hmmer-3.1b2/0000775361611702660230000000000012475462241012272 5ustar wheelerteddyhmmer-3.1b2/install-sh0000664361611702660230000002017412473612611014273 0ustar wheelerteddy#!/bin/sh # install - install a program, script, or datafile scriptversion=2003-09-24.23 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename= transform_arg= instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= usage="Usage: $0 [OPTION]... SRCFILE DSTFILE or: $0 -d DIR1 DIR2... In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default. In the second, create the directory path DIR. Options: -b=TRANSFORMBASENAME -c copy source (using $cpprog) instead of moving (using $mvprog). -d create directories instead of installing files. -g GROUP $chgrp installed files to GROUP. -m MODE $chmod installed files to MODE. -o USER $chown installed files to USER. -s strip installed files (using $stripprog). -t=TRANSFORM --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; -c) instcmd=$cpprog shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) if test -z "$src"; then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if test -z "$src"; then echo "$0: no input file specified." >&2 exit 1 fi # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then instcmd=: chmodcmd= else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst"; then echo "$0: no destination specified." >&2 exit 1 fi # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift test -d "$pathcomp" || $mkdirprog "$pathcomp" pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $instcmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else # If we're going to rename the final executable, determine the name now. if test -z "$transformarg"; then dstfile=`basename "$dst"` else dstfile=`basename "$dst" $transformbasename \ | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename. test -z "$dstfile" && dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name $doit $instcmd "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now remove or move aside any old file at destination location. We # try this two ways since rm can't unlink itself on some systems and # the destination file might be busy for other reasons. In this case, # the final cleanup might fail but the new file should still install # successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" fi && # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: hmmer-3.1b2/documentation/0000775361611702660230000000000012473613153015141 5ustar wheelerteddyhmmer-3.1b2/documentation/.dropbox.attr0000775361611702660230000000000212473271761017570 0ustar wheelerteddy{}hmmer-3.1b2/documentation/Makefile.in0000664361611702660230000000316212473612603017207 0ustar wheelerteddytop_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ QUIET_SUBDIR0 = +${MAKE} -C #space separator after -c QUIET_SUBDIR1 = ifndef V QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR1 = ; echo ' ' SUBDIR $$subdir; \ ${MAKE} -C $$subdir endif .PHONY: pdf install uninstall clean distclean pdf: ${QUIET_SUBDIR0}userguide ${QUIET_SUBDIR1} pdf install: ${QUIET_SUBDIR0}man ${QUIET_SUBDIR1} install uninstall: ${QUIET_SUBDIR0}man ${QUIET_SUBDIR1} uninstall clean: #Use 'ifneq' instead of 'test -e' because the '+@' in QUIET_SUBDIR0 can't #be passed to the shell. Note that ifneq breaks if indented. ifneq (,$(wildcard userguide/.)) ${QUIET_SUBDIR0}userguide ${QUIET_SUBDIR1} clean endif ${QUIET_SUBDIR0}man ${QUIET_SUBDIR1} clean; -rm -f *~ distclean: #See above for explanation of 'ifneq' usage ifneq (,$(wildcard userguide/.)) ${QUIET_SUBDIR0}userguide ${QUIET_SUBDIR1} distclean endif ${QUIET_SUBDIR0}man ${QUIET_SUBDIR1} distclean -rm -f Makefile ################################################################ # HMMER - Biological sequence analysis with profile HMMs # Version 3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # HMMER is distributed under the terms of the GNU General Public License # (GPLv3). See the LICENSE file for details. # # SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/documentation/Makefile.in $ # SVN $Id: Makefile.in 4489 2013-06-19 02:46:43Z wheelert $ ################################################################ hmmer-3.1b2/documentation/man/0000775361611702660230000000000012473613140015710 5ustar wheelerteddyhmmer-3.1b2/documentation/man/hmmbuild.man0000664361611702660230000003160612473612616020223 0ustar wheelerteddy.TH "hmmbuild" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME hmmbuild - construct profile HMM(s) from multiple sequence alignment(s) .SH SYNOPSIS .B hmmbuild .I [options] .I .I .SH DESCRIPTION For each multiple sequence alignment in .I build a profile HMM and save it to a new file .IR . .PP .I may be '-' (dash), which means reading this input from .I stdin rather than a file. To use '-', you must also specify the alignment file format with .BI --informat " ", as in .B "--informat stockholm" (because of a current limitation in our implementation, MSA file formats cannot be autodetected in a nonrewindable input stream.) .PP .I may not be '-' .IR (stdout) , because sending the HMM file to .I stdout would conflict with the other text output of the program. .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .TP .BI -n " " Name the new profile .IR . The default is to use the name of the alignment (if one is present in the .IR msafile , or, failing that, the name of the .IR hmmfile . If .I msafile contains more than one alignment, .I -n doesn't work, and every alignment must have a name annotated in the .I msafile (as in Stockholm #=GF ID annotation). .TP .BI -o " " Direct the summary output to file .IR , rather than to .IR stdout . .TP .BI -O " " After each model is constructed, resave annotated, possibly modified source alignments to a file .I in Stockholm format. The alignments are annotated with a reference annotation line indicating which columns were assigned as consensus, and sequences are annotated with what relative sequence weights were assigned. Some residues of the alignment may have been shifted to accommodate restrictions of the Plan7 profile architecture, which disallows transitions between insert and delete states. .SH OPTIONS FOR SPECIFYING THE ALPHABET The alphabet type (amino, DNA, or RNA) is autodetected by default, by looking at the composition of the .IR msafile . Autodetection is normally quite reliable, but occasionally alphabet type may be ambiguous and autodetection can fail (for instance, on tiny toy alignments of just a few residues). To avoid this, or to increase robustness in automated analysis pipelines, you may specify the alphabet type of .I msafile with these options. .TP .B --amino Specify that all sequences in .I msafile are proteins. .TP .B --dna Specify that all sequences in .I msafile are DNAs. .TP .B --rna Specify that all sequences in .I msafile are RNAs. .SH OPTIONS CONTROLLING PROFILE CONSTRUCTION These options control how consensus columns are defined in an alignment. .TP .B --fast Define consensus columns as those that have a fraction >= .B symfrac of residues as opposed to gaps. (See below for the .B --symfrac option.) This is the default. .TP .B --hand Define consensus columns in next profile using reference annotation to the multiple alignment. This allows you to define any consensus columns you like. .TP .BI --symfrac " " Define the residue fraction threshold necessary to define a consensus column when using the .B --fast option. The default is 0.5. The symbol fraction in each column is calculated after taking relative sequence weighting into account, and ignoring gap characters corresponding to ends of sequence fragments (as opposed to internal insertions/deletions). Setting this to 0.0 means that every alignment column will be assigned as consensus, which may be useful in some cases. Setting it to 1.0 means that only columns that include 0 gaps (internal insertions/deletions) will be assigned as consensus. .TP .BI --fragthresh " " We only want to count terminal gaps as deletions if the aligned sequence is known to be full-length, not if it is a fragment (for instance, because only part of it was sequenced). HMMER uses a simple rule to infer fragments: if the range of a sequence in the alignment (the number of alignment columns between the first and last positions of the sequence) is less than or equal to a fraction .I times the alignment length in columns, then the sequence is handled as a fragment. The default is 0.5. Setting .BI --fragthresh 0 will define no (nonempty) sequence as a fragment; you might want to do this if you know you've got a carefully curated alignment of full-length sequences. Setting .BI --fragthresh 1 will define all sequences as fragments; you might want to do this if you know your alignment is entirely composed of fragments, such as translated short reads in metagenomic shotgun data. .SH OPTIONS CONTROLLING RELATIVE WEIGHTS HMMER uses an ad hoc sequence weighting algorithm to downweight closely related sequences and upweight distantly related ones. This has the effect of making models less biased by uneven phylogenetic representation. For example, two identical sequences would typically each receive half the weight that one sequence would. These options control which algorithm gets used. .TP .B --wpb Use the Henikoff position-based sequence weighting scheme [Henikoff and Henikoff, J. Mol. Biol. 243:574, 1994]. This is the default. .TP .B --wgsc Use the Gerstein/Sonnhammer/Chothia weighting algorithm [Gerstein et al, J. Mol. Biol. 235:1067, 1994]. .TP .B --wblosum Use the same clustering scheme that was used to weight data in calculating BLOSUM subsitution matrices [Henikoff and Henikoff, Proc. Natl. Acad. Sci 89:10915, 1992]. Sequences are single-linkage clustered at an identity threshold (default 0.62; see .IR --wid ) and within each cluster of c sequences, each sequence gets relative weight 1/c. .TP .B --wnone No relative weights. All sequences are assigned uniform weight. .TP .BI --wid " " Sets the identity threshold used by single-linkage clustering when using .IR --wblosum . Invalid with any other weighting scheme. Default is 0.62. .SH OPTIONS CONTROLLING EFFECTIVE SEQUENCE NUMBER After relative weights are determined, they are normalized to sum to a total effective sequence number, .IR eff_nseq . This number may be the actual number of sequences in the alignment, but it is almost always smaller than that. The default entropy weighting method .I (--eent) reduces the effective sequence number to reduce the information content (relative entropy, or average expected score on true homologs) per consensus position. The target relative entropy is controlled by a two-parameter function, where the two parameters are settable with .I --ere and .IR --esigma . .TP .B --eent Adjust effective sequence number to achieve a specific relative entropy per position (see .IR --ere ). This is the default. .TP .B --eclust Set effective sequence number to the number of single-linkage clusters at a specific identity threshold (see .IR --eid ). This option is not recommended; it's for experiments evaluating how much better .B --eent is. .TP .B --enone Turn off effective sequence number determination and just use the actual number of sequences. One reason you might want to do this is to try to maximize the relative entropy/position of your model, which may be useful for short models. .TP .BI --eset " " Explicitly set the effective sequence number for all models to .IR . .TP .BI --ere " " Set the minimum relative entropy/position target to .IR . Requires .BR --eent . Default depends on the sequence alphabet. For protein sequences, it is 0.59 bits/position; for nucleotide sequences, it is 0.45 bits/position. .TP .BI --esigma " " Sets the minimum relative entropy contributed by an entire model alignment, over its whole length. This has the effect of making short models have higher relative entropy per position than .I --ere alone would give. The default is 45.0 bits. .TP .BI --eid " " Sets the fractional pairwise identity cutoff used by single linkage clustering with the .B --eclust option. The default is 0.62. .SH OPTIONS CONTROLLING PRIORS By default, weighted counts are converted to mean posterior probability parameter estimates using mixture Dirichlet priors. Default mixture Dirichlet prior parameters for protein models and for nucleic acid (RNA and DNA) models are built in. The following options allow you to override the default priors. .TP .B --pnone Don't use any priors. Probability parameters will simply be the observed frequencies, after relative sequence weighting. .TP .B --plaplace Use a Laplace +1 prior in place of the default mixture Dirichlet prior. .SH OPTIONS CONTROLLING E-VALUE CALIBRATION The location parameters for the expected score distributions for MSV filter scores, Viterbi filter scores, and Forward scores require three short random sequence simulations. .TP .BI --EmL " " Sets the sequence length in simulation that estimates the location parameter mu for MSV filter E-values. Default is 200. .TP .BI --EmN " " Sets the number of sequences in simulation that estimates the location parameter mu for MSV filter E-values. Default is 200. .TP .BI --EvL " " Sets the sequence length in simulation that estimates the location parameter mu for Viterbi filter E-values. Default is 200. .TP .BI --EvN " " Sets the number of sequences in simulation that estimates the location parameter mu for Viterbi filter E-values. Default is 200. .TP .BI --EfL " " Sets the sequence length in simulation that estimates the location parameter tau for Forward E-values. Default is 100. .TP .BI --EfN " " Sets the number of sequences in simulation that estimates the location parameter tau for Forward E-values. Default is 200. .TP .BI --Eft " " Sets the tail mass fraction to fit in the simulation that estimates the location parameter tau for Forward evalues. Default is 0.04. .SH OTHER OPTIONS .TP .BI --cpu " " Set the number of parallel worker threads to .IR . By default, HMMER sets this to the number of CPU cores it detects in your machine - that is, it tries to maximize the use of your available processor cores. Setting .I higher than the number of available cores is of little if any value, but you may want to set it to something less. You can also control this number by setting an environment variable, .IR HMMER_NCPU . This option is only available if HMMER was compiled with POSIX threads support. This is the default, but it may have been turned off for your site or machine for some reason. .TP .BI --informat " " Declare that the input .I msafile is in format .IR . Currently the accepted multiple alignment sequence file formats include Stockholm, Aligned FASTA, Clustal, NCBI PSI-BLAST, PHYLIP, Selex, and UCSC SAM A2M. Default is to autodetect the format of the file. .TP .BI --seed " " Seed the random number generator with .IR , an integer >= 0. If .I is nonzero, any stochastic simulations will be reproducible; the same command will give the same results. If .I is 0, the random number generator is seeded arbitrarily, and stochastic simulations will vary from run to run of the same command. The default seed is 42. .TP .BI --w_beta " " Window length tail mass. The upper bound, .IR W , on the length at which nhmmer expects to find an instance of the model is set such that the fraction of all sequences generated by the model with length .I ">= W" is less than .IR . The default is 1e-7. .TP .BI --w_length " " Override the model instance length upper bound, .IR W , which is otherwise controlled by .BR --w_beta . It should be larger than the model length. The value of .I W is used deep in the acceleration pipeline, and modest changes are not expected to impact results (though larger values of .I W do lead to longer run time). .TP .B --mpi Run as a parallel MPI program. Each alignment is assigned to a MPI worker node for construction. (Therefore, the maximum parallelization cannot exceed the number of alignments in the input .IR msafile .) This is useful when building large profile libraries. This option is only available if optional MPI capability was enabled at compile-time. .TP .B --stall For debugging MPI parallelization: arrest program execution immediately after start, and wait for a debugger to attach to the running process and release the arrest. .TP .BI --maxinsertlen " " Restrict insert length parameterization such that the expected insert length at each position of the model is no more than .IR . .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/boilerplate-tail0000664361611702660230000000116612473612604021074 0ustar wheelerteddy.SH SEE ALSO See .B hmmer(1) for a master man page, with full list of the individual man pages for all programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (@HMMER_URL@). .SH COPYRIGHT .nf @HMMER_COPYRIGHT@ @HMMER_LICENSE@ .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (@HMMER_URL@). .SH AUTHOR .nf Sean Eddy Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/hmmer.man0000664361611702660230000001320112473612616017521 0ustar wheelerteddy.TH "HMMER" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME HMMER - profile HMMs for biological sequence analysis .SH SYNOPSIS .B hmmalign Align sequences to a profile .B hmmbuild Construct profile(s) from multiple sequence alignment(s) .B hmmconvert Convert profile file to various HMMER and non-HMMER formats .B hmmemit Sample sequences from a profile .B hmmfetch Retrieve profile HMM(s) from a file .B hmmpgmd Daemon used for hmmer.org web server, for phmmer-, hmmsearch-, and hmmscan-like search .B hmmpress Prepare an HMM database for hmmscan .B hmmscan Search protein sequence(s) against a protein profile database .B hmmsearch Search protein profile(s) against a protein sequence database .B hmmsim Collect profile score distributions on random sequences .B hmmstat Summary statistics for a profile file .B jackhmmer Iterative search of a protein sequence against a protein sequence database .B nhmmer Search nucleotide sequence(s), alignment(s), or profile(s) against a nucleotide sequence database .B nhmmscan Search nucleotide sequence(s) against a nucleotide profile database .B phmmer Search a protein sequence(s) against a protein sequence database .SH DESCRIPTION HMMER is a suite of several programs for biological sequence alignment and database homology search. It uses probabilistic models called "profile hidden Markov models" (profile HMMs) to represent the likely evolutionary homologs of a single sequence or a multiple alignment of a sequence family. A main avenue of research is to improve the evolutionary predictive models in HMMER to be able to recognize and accurately align increasingly remote homologs, distant in time. HMMER is also used as an organizational tool, to group the exponentially growing number of biological sequences into a vastly smaller set of well-annotated sequence families. New sequences can be annotated by comparison against curated sequence family databases of prebuilt HMMER profiles, in addition or instead of comparison to the entire sequence database. Databases such as Pfam, SMART, and TIGRfams, among others, are based on this principle. HMMER is used in three main modes: to search a sequence database for new homologs of a sequence or a sequence family; to search a profile database (like Pfam) to find what known family a query sequence belongs to, or what domains it has; and to automatically construct large multiple alignments (i.e. with an effectively unlimited number of sequences) using a profile representative of a sequence family. Suppose you have a multiple sequence alignment of a sequence family of interest, and you want to search a sequence database for additional homologs. The .B hmmbuild program builds profile(s) from multiple alignment(s). The .B hmmsearch program searches protein profile(s) against a protein sequence database, and .B nhmmer searches nucleotide profile(s) against a nucleotide sequence database. Suppose you have a single sequence of interest, and you want to search a sequence database for additional homologs. The .B phmmer program searches a single protein sequence against a protein sequence database. The .B jackhmmer program does the same thing but iteratively -- homologs detected in a previous round are incorporated into a new profile, and the new profile is searched again. .B phmmer is used like BLASTP, and .B jackhmmer is used like a protein PSI-BLAST. The .B nhmmer program searches a single nucleotide sequence against a nucleotide sequence. Suppose you have sequence(s) that you want to analyze using a HMMER-based profile HMM database like Pfam (http://pfam.sanger.ac.uk). The .B hmmpress program formats a profile HMM flatfile (such as the file you would download from Pfam) into a HMMER binary database. The .B hmmscan program searches protein sequence(s) against that database. The .B nhmmscan program can similarly search nucleotide sequence(s) against a pressed database of nucleotide profiles, such as from Dfam (http://dfam.janelia.org). Suppose you want to align lots of sequences. You can construct a manageably small alignment of a representative set of sequences, build a profile with .BR hmmbuild , and use the .B hmmalign program to align any number of sequences to that profile. HMMER also includes some auxiliary tools for working with large profile databases. .B hmmfetch fetches one or more profiles from a database. .B hmmstat prints summary statistics about a profile file. For compatibility with other profile software and previous versions of HMMER, the .B hmmconvert program converts profiles to a few other formats. We intend to add more support for other formats over time. The .B hmmemit program generates (simulates) "homologous" sequences by sampling from a profile. It can also generate a "consensus" sequence. The .B hmmsim program is a simulator used for collecting statistics about score distributions on random sequences. Each program has its own man page. .SH SEE ALSO This is a summary man page for the entire HMMER3 package. See individual man pages .BR [hmmbuild(1) , for example] for usage, options, and description of each program in the package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/phmmer.man0000664361611702660230000003335712473612616017717 0ustar wheelerteddy.TH "phmmer" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME phmmer - search protein sequence(s) against a protein sequence database .SH SYNOPSIS .B phmmer .I [options] .I .I .SH DESCRIPTION .PP .B phmmer is used to search one or more query protein sequences against a protein sequence database. For each query sequence in .IR , use that sequence to search the target database of sequences in .IR , and output ranked lists of the sequences with the most significant matches to the query. .PP Either the query .I or the target .I may be '-' (a dash character), in which case the query sequences or target database input will be read from a pipe instead of from a file. Only one input source can come through , not both. An exception is that if the .I contains more than one query sequence, then .I cannot come from , because we can't rewind the streaming target database to search it with another query. .PP The output format is designed to be human-readable, but is often so voluminous that reading it is impractical, and parsing it is a pain. The .B --tblout and .B --domtblout options save output in simple tabular formats that are concise and easier to parse. The .B -o option allows redirecting the main output, including throwing it away in /dev/null. .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .SH OPTIONS FOR CONTROLLING OUTPUT .TP .BI -o " " Direct the main human-readable output to a file .I instead of the default stdout. .TP .BI -A " " Save a multiple alignment of all significant hits (those satisfying inclusion thresholds) to the file .I in Stockholm format. .TP .BI --tblout " " Save a simple tabular (space-delimited) file summarizing the per-target output, with one data line per homologous target sequence found. .TP .BI --domtblout " " Save a simple tabular (space-delimited) file summarizing the per-domain output, with one data line per homologous domain detected in a query sequence for each homologous model. .TP .B --acc Use accessions instead of names in the main output, where available for profiles and/or sequences. .TP .B --noali Omit the alignment section from the main output. This can greatly reduce the output volume. .TP .B --notextw Unlimit the length of each line in the main output. The default is a limit of 120 characters per line, which helps in displaying the output cleanly on terminals and in editors, but can truncate target profile description lines. .TP .BI --textw " " Set the main output's line length limit to .I characters per line. The default is 120. .SH OPTIONS CONTROLLING SCORING SYSTEM The probability model in .B phmmer is constructed by inferring residue probabilities from a standard 20x20 substitution score matrix, plus two additional parameters for position-independent gap open and gap extend probabilities. .TP .BI --popen " " Set the gap open probability for a single sequence query model to .IR . The default is 0.02. .I must be >= 0 and < 0.5. .TP .BI --pextend " " Set the gap extend probability for a single sequence query model to .IR . The default is 0.4. .I must be >= 0 and < 1.0. .TP .BI --mx " " Obtain residue alignment probabilities from the built-in substitution matrix named .IR . Several standard matrices are built-in, and do not need to be read from files. The matrix name .I can be PAM30, PAM70, PAM120, PAM240, BLOSUM45, BLOSUM50, BLOSUM62, BLOSUM80, or BLOSUM90. Only one of the .B --mx and .B --mxfile options may be used. .TP .BI --mxfile " " Obtain residue alignment probabilities from the substitution matrix in file .IR . The default score matrix is BLOSUM62 (this matrix is internal to HMMER and does not have to be available as a file). The format of a substitution matrix .I is the standard format accepted by BLAST, FASTA, and other sequence analysis software. Only one of the .B --mx and .B --mxfile options may be used. .SH OPTIONS CONTROLLING REPORTING THRESHOLDS Reporting thresholds control which hits are reported in output files (the main output, .IR --tblout , and .IR --domtblout ). Sequence hits and domain hits are ranked by statistical significance (E-value) and output is generated in two sections called per-target and per-domain output. In per-target output, by default, all sequence hits with an E-value <= 10 are reported. In the per-domain output, for each target that has passed per-target reporting thresholds, all domains satisfying per-domain reporting thresholds are reported. By default, these are domains with conditional E-values of <= 10. The following options allow you to change the default E-value reporting thresholds, or to use bit score thresholds instead. .TP .BI -E " " In the per-target output, report target sequences with an E-value of <= .IR . The default is 10.0, meaning that on average, about 10 false positives will be reported per query, so you can see the top of the noise and decide for yourself if it's really noise. .TP .BI -T " " Instead of thresholding per-profile output on E-value, instead report target sequences with a bit score of >= .IR . .TP .BI --domE " " In the per-domain output, for target sequences that have already satisfied the per-profile reporting threshold, report individual domains with a conditional E-value of <= .IR . The default is 10.0. A conditional E-value means the expected number of additional false positive domains in the smaller search space of those comparisons that already satisfied the per-target reporting threshold (and thus must have at least one homologous domain already). .TP .BI --domT " " Instead of thresholding per-domain output on E-value, instead report domains with a bit score of >= .IR . .SH OPTIONS CONTROLLING INCLUSION THRESHOLDS Inclusion thresholds are stricter than reporting thresholds. They control which hits are included in any output multiple alignment (the .I -A option) and which domains are marked as significant ("!") as opposed to questionable ("?") in domain output. .TP .BI --incE " " Use an E-value of <= .I as the per-target inclusion threshold. The default is 0.01, meaning that on average, about 1 false positive would be expected in every 100 searches with different query sequences. .TP .BI --incT " " Instead of using E-values for setting the inclusion threshold, instead use a bit score of >= .I as the per-target inclusion threshold. By default this option is unset. .TP .BI --incdomE " " Use a conditional E-value of <= .I as the per-domain inclusion threshold, in targets that have already satisfied the overall per-target inclusion threshold. The default is 0.01. .TP .BI --incdomT " " Instead of using E-values, use a bit score of >= .I as the per-domain inclusion threshold. By default this option is unset. .SH OPTIONS CONTROLLING THE ACCELERATION PIPELINE HMMER3 searches are accelerated in a three-step filter pipeline: the MSV filter, the Viterbi filter, and the Forward filter. The first filter is the fastest and most approximate; the last is the full Forward scoring algorithm, slowest but most accurate. There is also a bias filter step between MSV and Viterbi. Targets that pass all the steps in the acceleration pipeline are then subjected to postprocessing -- domain identification and scoring using the Forward/Backward algorithm. Essentially the only free parameters that control HMMER's heuristic filters are the P-value thresholds controlling the expected fraction of nonhomologous sequences that pass the filters. Setting the default thresholds higher will pass a higher proportion of nonhomologous sequence, increasing sensitivity at the expense of speed; conversely, setting lower P-value thresholds will pass a smaller proportion, decreasing sensitivity and increasing speed. Setting a filter's P-value threshold to 1.0 means it will passing all sequences, and effectively disables the filter. Changing filter thresholds only removes or includes targets from consideration; changing filter thresholds does not alter bit scores, E-values, or alignments, all of which are determined solely in postprocessing. .TP .B --max Maximum sensitivity. Turn off all filters, including the bias filter, and run full Forward/Backward postprocessing on every target. This increases sensitivity slightly, at a large cost in speed. .TP .BI --F1 " " First filter threshold; set the P-value threshold for the MSV filter step. The default is 0.02, meaning that roughly 2% of the highest scoring nonhomologous targets are expected to pass the filter. .TP .BI --F2 " " Second filter threshold; set the P-value threshold for the Viterbi filter step. The default is 0.001. .TP .BI --F3 " " Third filter threshold; set the P-value threshold for the Forward filter step. The default is 1e-5. .TP .B --nobias Turn off the bias filter. This increases sensitivity somewhat, but can come at a high cost in speed, especially if the query has biased residue composition (such as a repetitive sequence region, or if it is a membrane protein with large regions of hydrophobicity). Without the bias filter, too many sequences may pass the filter with biased queries, leading to slower than expected performance as the computationally intensive Forward/Backward algorithms shoulder an abnormally heavy load. .SH OPTIONS CONTROLLING E-VALUE CALIBRATION Estimating the location parameters for the expected score distributions for MSV filter scores, Viterbi filter scores, and Forward scores requires three short random sequence simulations. .TP .BI --EmL " " Sets the sequence length in simulation that estimates the location parameter mu for MSV filter E-values. Default is 200. .TP .BI --EmN " " Sets the number of sequences in simulation that estimates the location parameter mu for MSV filter E-values. Default is 200. .TP .BI --EvL " " Sets the sequence length in simulation that estimates the location parameter mu for Viterbi filter E-values. Default is 200. .TP .BI --EvN " " Sets the number of sequences in simulation that estimates the location parameter mu for Viterbi filter E-values. Default is 200. .TP .BI --EfL " " Sets the sequence length in simulation that estimates the location parameter tau for Forward E-values. Default is 100. .TP .BI --EfN " " Sets the number of sequences in simulation that estimates the location parameter tau for Forward E-values. Default is 200. .TP .BI --Eft " " Sets the tail mass fraction to fit in the simulation that estimates the location parameter tau for Forward evalues. Default is 0.04. .SH OTHER OPTIONS .TP .B --nonull2 Turn off the null2 score corrections for biased composition. .TP .BI -Z " " Assert that the total number of targets in your searches is .IR , for the purposes of per-sequence E-value calculations, rather than the actual number of targets seen. .TP .BI --domZ " " Assert that the total number of targets in your searches is .IR , for the purposes of per-domain conditional E-value calculations, rather than the number of targets that passed the reporting thresholds. .TP .BI --seed " " Seed the random number generator with .IR , an integer >= 0. If .I is >0, any stochastic simulations will be reproducible; the same command will give the same results. If .I is 0, the random number generator is seeded arbitrarily, and stochastic simulations will vary from run to run of the same command. The default seed is 42. .TP .BI --qformat " " Declare that the input .I is in format .IR . Accepted formats include .IR fasta , .IR embl , .IR genbank , .IR ddbj , .IR uniprot , .IR stockholm , .IR pfam , .IR a2m , and .IR afa . The default is to autodetect the format of the file. .TP .BI --tformat " " Declare that the input .I is in format .IR . Accepted formats include .IR fasta , .IR embl , .IR genbank , .IR ddbj , .IR uniprot , .IR stockholm , .IR pfam , .IR a2m , and .IR afa . The default is to autodetect the format of the file. .TP .BI --cpu " " Set the number of parallel worker threads to .IR . By default, HMMER sets this to the number of CPU cores it detects in your machine - that is, it tries to maximize the use of your available processor cores. Setting .I higher than the number of available cores is of little if any value, but you may want to set it to something less. You can also control this number by setting an environment variable, .IR HMMER_NCPU . This option is only available if HMMER was compiled with POSIX threads support. This is the default, but it may have been turned off at compile-time for your site or machine for some reason. .TP .BI --stall For debugging the MPI master/worker version: pause after start, to enable the developer to attach debuggers to the running master and worker(s) processes. Send SIGCONT signal to release the pause. (Under gdb: .IR "(gdb) signal SIGCONT" ) (Only available if optional MPI support was enabled at compile-time.) .TP .BI --mpi Run in MPI master/worker mode, using .IR mpirun . (Only available if optional MPI support was enabled at compile-time.) .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/hmmpgmd.man0000664361611702660230000001261212473612616020047 0ustar wheelerteddy.TH "hmmpgmd" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME hmmpgmd - daemon for searching a protein query against a protein database .SH SYNOPSIS .B hmmpgmd .I [options] .SH DESCRIPTION .PP The .B hmmpgmd program is the daemon that we use internally for the hmmer.org web server, and essentially stands in front of the protein search programs .BR phmmer , .BR hmmsearch , and .BR hmmscan . To use .BR hmmpgmd , first an instance must be started up as a .I master server, and provided with at least one of a .I "sequence database" (using the .B --seqdb flag) and/or an .I "HMM database" (using the .B --hmmdb flag). A sequence database must be in the hmmpgmd format, which may be produced using .BR esl-reformat . An HMM database is of the form produced by .BR hmmbuild . The input database(s) will be loaded into memory by the master. When the master has finished loading the database(s), it prints the line: "Data loaded into memory. Master is ready." .PP Only after master is ready, one or more instances of hmmpgmd may be started as workers. These workers may be (and typically are) on different machines from the master, but must have access to the same database file(s) provided to the master, with the same path. As with the master, each worker loads the database(s) into memory, and indicates completion by printing: "Data loaded into memory. Worker is ready." .PP The master server and workers are expected to remain running. One or more clients then connect to the master and submit possibly many queries. The master distributes the work of a query among the workers, collects results, and merges them before responding to the client. Two example client programs are included in the HMMER3.1 src directory - the C program .B hmmc2 and the perl script .BR hmmpgmd_client_example.pl . These are intended as examples only, and should be extended as necessary to meet your needs. .PP A query is submitted to the master from the client as a character string. Queries may be the sort that would normally be handled by .B phmmer (protein sequence vs protein database), .B hmmsearch (protein HMM query vs protein database), or .B hmmscan (protein query vs protein HMM database). The general form of a client query is to start with a single line of the form .IR "@[options]" , followed by multiple lines of text representing either the query HMM or fasta-formatted sequence. The final line of each query is the separator .IR "//" . .PP For example, to perform a .B phmmer type search of a sequence against a sequence database file, the first line is of the form .IR "@--seqdb 1" , then the fasta-formatted query sequence starting with the header line .IR >sequence-name , followed by one or more lines of sequence, and finally the closing .IR "//" . .PP To perform an .B hmmsearch type search, the query sequence is replaced by the full text of a HMMER-format query HMM. .PP To perform an .B hmmscan type search, the text matches that of the .B phmmer type search, except that the first line changes to .IR "@--hmmdb 1" . .PP In the hmmpgmd-formatted sequence database file, each sequence can be associated with one or more sub-databases. The .I --seqdb flag indicates which of these sub-databases will be queried. The HMM database format does not support sub-databases. .PP The result of each query is an undocumented data structure in binary format. In the future the data will be returned in a proper serialized structure, but for now, it requires meticulous unpacking within the client. The example clients show how this is done. .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .SH EXPERT OPTIONS .TP .BI --master Run as the master server. .TP .BI --worker " " Run as a worker, connecting to the master server that is running on IP address .IR . .TP .BI --daemon Run as a daemon using config file: /etc/hmmpgmd.conf .TP .BI --cport " " Port to use for communication between clients and the master server. The default is 51371. .TP .BI --wport " " Port to use for communication between workers and the master server. The default is 51372. .TP .BI --ccncts " " Maximum number of client connections to accept. The default is 16. .TP .BI --wcncts " " Maximum number of worker connections to accept. The default is 32. .TP .BI --pid " " Name of file into which the process id will be written. .TP .BI --seqdb " " Name of the file (in hmmpgmd format) containing protein sequences. The contents of this file will be cached for searches. .TP .BI --hmmdb " " Name of the file containing protein HMMs. The contents of this file will be cached for searches. .TP .BI --cpu " " Number of parallel threads to use (for .I --worker ). .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/.dropbox.attr0000775361611702660230000000000212473272040020332 0ustar wheelerteddy{}hmmer-3.1b2/documentation/man/hmmalign.man0000664361611702660230000000661312473612616020216 0ustar wheelerteddy.TH "hmmalign" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME hmmalign - align sequences to a profile HMM .SH SYNOPSIS .B hmmalign .I [options] .I .I .SH DESCRIPTION .PP Perform a multiple sequence alignment of all the sequences in .I by aligning them individually to the profile HMM in .I . The new alignment is output to .I stdout in Stockholm format. .PP The .I should contain only a single profile. If it contains more, only the first profile in the file will be used. .PP Either .I or .I (but not both) may be '-' (dash), which means reading this input from .I stdin rather than a file. .PP The sequences in .I are aligned in unihit local alignment mode. Therefore they should already be known to contain only a single domain (or a fragment of one). The optimal alignment may assign some residues as nonhomologous (N and C states), in which case these residues are still included in the resulting alignment, but shoved to the outer edges. To trim these unaligned nonhomologous residues from the result, see the .B --trim option. .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .TP .BI -o " " Direct the output alignment to file .I , rather than to .I stdout. .TP .BI --mapali " " Merge the existing alignment in file .I into the result, where .I is exactly the same alignment that was used to build the model in .I . This is done using a map of alignment columns to consensus profile positions that is stored in the .I . The multiple alignment in .I will be exactly reproduced in its consensus columns (as defined by the profile), but the displayed alignment in insert columns may be altered, because insertions relative to a profile are considered by convention to be unaligned data. .TP .B --trim Trim nonhomologous residues (assigned to N and C states in the optimal alignments) from the resulting multiple alignment output. .TP .B --amino Specify that all sequences in .I are proteins. By default, alphabet type is autodetected from looking at the residue composition. .TP .B --dna Specify that all sequences in .I are DNAs. .TP .B --rna Specify that all sequences in .I are RNAs. .TP .BI --informat " " Declare that the input .I is in format .I . Accepted sequence file formats include FASTA, EMBL, GenBank, DDBJ, UniProt, Stockholm, and SELEX. Default is to autodetect the format of the file. .TP .BI --outformat " " Specify that the output multiple alignment is in format .I . Currently the accepted multiple alignment sequence file formats only include Stockholm and SELEX. .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf The Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/makehmmerdb.man0000664361611702660230000000730412473612616020674 0ustar wheelerteddy.TH "makehmmerdb" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME makehmmerdb - build a HMMER binary database file from a sequence file .SH SYNOPSIS .B makehmmerdb .I [options] .I .I .SH DESCRIPTION .PP .B makehmmerdb is used to create a binary file from a DNA sequence file. This binary file may be used as a target database for the DNA search tool .BR nhmmer . Using default settings in .IR nhmmer , this yields a roughly 10-fold acceleration with small loss of sensitivity on benchmarks. (This method has been extensively tested, but should still be treated as somewhat experimental.) .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .\" .SH OPTIONS FOR SPECIFYING THE ALPHABET .\" .\" The alphabet type (amino, DNA, or RNA) is autodetected by default, by .\" looking at the composition of the .\" .IR seqfile . .\" Autodetection is normally quite reliable, but occasionally alphabet .\" type may be ambiguous and autodetection can fail (for instance, when .\" the first sequence starts with a run of ambiguous characters). To avoid .\" this, or to increase robustness in automated analysis pipelines, you .\" may specify the alphabet type of .\" .I seqfile .\" with these options. .\" .\" .TP .\" .B --dna .\" Specify that all sequences in .\" .I msafile .\" are DNAs. .\" .\" .TP .\" .B --rna .\" Specify that all sequences in .\" .I msafile .\" are RNAs. .\" .\" .TP .\" .B --amino .\" Specify that all sequences in .\" .I msafile .\" are proteins. Note that currently, a binary database of amino .\" acid sequence cannot be used as target to hmmsearch of phmmer .\" (only nhmmer can use the binary format). .SH OTHER OPTIONS .TP .BI --informat " " Assert that the sequence database file is in format .IR . Accepted formats include .IR fasta , .IR embl , .IR genbank , .IR ddbj , .IR uniprot , .IR stockholm , .IR pfam , .IR a2m , and .IR afa . The default is to autodetect the format of the file. .TP .BI --bin_length " " Bin length. The binary file depends on a data structure called the FM index, which organizes a permuted copy of the sequence in bins of length .IR . Longer bin length will lead to smaller files (because data is captured about each bin) and possibly slower query time. The default is 256. Much more than 512 may lead to notable reduction in speed. .TP .BI --sa_freq " " Suffix array sample rate. The FM index structure also samples from the underlying suffix array for the sequence database. More frequent sampling (smaller value for .IR ) will yield larger file size and faster search (until file size becomes large enough to cause I/O to be a bottleneck). The default value is 8. Must be a power of 2. .TP .BI --block_size " " The input sequence is broken into blocks of size .I million letters. An FM index is built for each block, rather than building an FM index for the entire sequence database. Default is 50. Larger blocks do not seem to yield substantial speed increase. .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/hmmconvert.man0000664361611702660230000000371112473612616020600 0ustar wheelerteddy.TH "hmmconvert" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME hmmconvert - convert profile file to a HMMER format .SH SYNOPSIS .B hmmconvert .I [options] .I .SH DESCRIPTION .PP The .B hmmconvert utility converts an input profile file to different HMMER formats. .PP By default, the input profile can be in any HMMER format, including old/obsolete formats from HMMER2, ASCII or binary; the output profile is a current HMMER3 ASCII format. .PP .I may be '-' (dash), which means reading this input from .I stdin rather than a file. .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .TP .B -a Output profiles in ASCII text format. This is the default. .TP .B -b Output profiles in binary format. .TP .B -2 Output in legacy HMMER2 ASCII text format, in ls (glocal) mode. This allows HMMER3 models to be converted back to a close approximation of HMMER2, for comparative studies. .TP .BI --outfmt " " Output in a HMMER3 ASCII text format other then the most current one. Valid choices for .I are 3/a through 3/f. The current format is 3/f, and this is the default. The format 3/b was used in the official HMMER3 release, and the others were used in the various testing versions. .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. pFreely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi " hmmer-3.1b2/documentation/man/nhmmer.man0000664361611702660230000004046512473612616017713 0ustar wheelerteddy.TH "nhmmer" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME nhmmer - search DNA/RNA queries against a DNA/RNA sequence database .SH SYNOPSIS .B nhmmer .I [options] .I .I .SH DESCRIPTION .PP .B nhmmer is used to search one or more nucleotide queries against a nucleotide sequence database. For each query in .IR , use that query to search the target database of sequences in .IR , and output a ranked list of the hits with the most significant matches to the query. A query may be either a profile model built using .BR hmmbuild , a sequence alignment, or a single sequence. Sequence based queries can be in a number of formats (see .BR --qformat ), and can typically be autodetected. Note that only .I Stockholm format supports queries made up of more than one sequence alignment. .PP Either the query .I or the target .I may be '-' (a dash character), in which case the query file or target database input will be read from a pipe instead of from a file. Only one input source can come through , not both. If the query is sequence-based and passed via , the .B --qformat flag must be used. If the .I contains more than one query, then .I cannot come from , because we can't rewind the streaming target database to search it with another profile. .PP If the query is sequence-based, and not from , a new file containing the HMM(s) built from the input(s) in .I may optionally be produced, with the filename set using the .B --hmmout flag. .PP The output format is designed to be human-readable, but is often so voluminous that reading it is impractical, and parsing it is a pain. The .B --tblout option saves output in a simple tabular format that is concise and easier to parse. The .B -o option allows redirecting the main output, including throwing it away in /dev/null. .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .SH OPTIONS FOR CONTROLLING OUTPUT .TP .BI -o " " Direct the main human-readable output to a file .I instead of the default stdout. .TP .BI -A " " Save a multiple alignment of all significant hits (those satisfying .IR "inclusion thresholds" ) to the file .IR . .TP .BI --tblout " " Save a simple tabular (space-delimited) file summarizing the per-target output, with one data line per homologous target sequence found. .TP .BI --dfamtblout " " Save a tabular (space-delimited) file summarizing the per-hit output, similar to .B --tblout but more succinct. .TP .BI --aliscoresout " " Save to file a list of per-position scores for each hit. This is useful, for example, in identifying regions of high score density for use in resolving overlapping hits from different models. .TP .BI --hmmout " " If is sequence-based, write the internally-computed HMM(s) to .IR . .TP .B --acc Use accessions instead of names in the main output, where available for profiles and/or sequences. .TP .B --noali Omit the alignment section from the main output. This can greatly reduce the output volume. .TP .B --notextw Unlimit the length of each line in the main output. The default is a limit of 120 characters per line, which helps in displaying the output cleanly on terminals and in editors, but can truncate target profile description lines. .TP .BI --textw " " Set the main output's line length limit to .I characters per line. The default is 120. .SH OPTIONS CONTROLLING REPORTING THRESHOLDS Reporting thresholds control which hits are reported in output files (the main output, .IR --tblout , and .IR --dfamtblout ). Hits are ranked by statistical significance (E-value). .TP .BI -E " " Report target sequences with an E-value of <= .IR . The default is 10.0, meaning that on average, about 10 false positives will be reported per query, so you can see the top of the noise and decide for yourself if it's really noise. .TP .BI -T " " Instead of thresholding output on E-value, instead report target sequences with a bit score of >= .IR . .SH OPTIONS FOR INCLUSION THRESHOLDS Inclusion thresholds are stricter than reporting thresholds. Inclusion thresholds control which hits are considered to be reliable enough to be included in an output alignment or a subsequent search round, or marked as significant ("!") as opposed to questionable ("?") in hit output. .TP .BI --incE " " Use an E-value of <= .I as the inclusion threshold. The default is 0.01, meaning that on average, about 1 false positive would be expected in every 100 searches with different query sequences. .TP .BI --incT " " Instead of using E-values for setting the inclusion threshold, use a bit score of >= .I as the inclusion threshold. By default this option is unset. .SH OPTIONS FOR MODEL-SPECIFIC SCORE THRESHOLDING Curated profile databases may define specific bit score thresholds for each profile, superseding any thresholding based on statistical significance alone. To use these options, the profile must contain the appropriate (GA, TC, and/or NC) optional score threshold annotation; this is picked up by .B hmmbuild from Stockholm format alignment files. For a nucleotide model, each thresholding option has a single per-hit threshold This acts as if .BI -T .BI --incT has been applied specifically using each model's curated thresholds. .TP .B --cut_ga Use the GA (gathering) bit score threshold in the model to set per-hit reporting and inclusion thresholds. GA thresholds are generally considered to be the reliable curated thresholds defining family membership; for example, in Dfam, these thresholds are applied when annotating a genome with a model of a family known to be found in that organism. They may allow for minimal expected false discovery rate. .TP .B --cut_nc Use the NC (noise cutoff) bit score threshold in the model to set per-hit reporting and inclusion thresholds. NC thresholds are less stringent than GA; in the context of Pfam, they are generally used to store the score of the highest-scoring known false positive. .TP .B --cut_tc Use the NC (trusted cutoff) bit score threshold in the model to set per-hit reporting and inclusion thresholds. TC thresholds are more stringent than GA, and are generally considered to be the score of the lowest-scoring known true positive that is above all known false positives; for example, in Dfam, these thresholds are applied when annotating a genome with a model of a family not known to be found in that organism. .SH OPTIONS CONTROLLING THE ACCELERATION PIPELINE HMMER3 searches are accelerated in a three-step filter pipeline: the scanning-SSV filter, the Viterbi filter, and the Forward filter. The first filter is the fastest and most approximate; the last is the full Forward scoring algorithm. There is also a bias filter step between SSV and Viterbi. Targets that pass all the steps in the acceleration pipeline are then subjected to postprocessing -- domain identification and scoring using the Forward/Backward algorithm. Changing filter thresholds only removes or includes targets from consideration; changing filter thresholds does not alter bit scores, E-values, or alignments, all of which are determined solely in postprocessing. .TP .B --max Turn off (nearly) all filters, including the bias filter, and run full Forward/Backward postprocessing on most of the target sequence. In contrast to .B phmmer and .BR hmmsearch , where this flag really does turn off the filters entirely, the .I --max flag in .B nhmmer sets the scanning-SSV filter threshold to 0.4, not 1.0. Use of this flag increases sensitivity somewhat, at a large cost in speed. .TP .BI --F1 " " Set the P-value threshold for the SSV filter step. The default is 0.02, meaning that roughly 2% of the highest scoring nonhomologous targets are expected to pass the filter. .TP .BI --F2 " " Set the P-value threshold for the Viterbi filter step. The default is 0.001. .TP .BI --F3 " " Set the P-value threshold for the Forward filter step. The default is 1e-5. .TP .B --nobias Turn off the bias filter. This increases sensitivity somewhat, but can come at a high cost in speed, especially if the query has biased residue composition (such as a repetitive sequence region, or if it is a membrane protein with large regions of hydrophobicity). Without the bias filter, too many sequences may pass the filter with biased queries, leading to slower than expected performance as the computationally intensive Forward/Backward algorithms shoulder an abnormally heavy load. .SH OPTIONS FOR SPECIFYING THE ALPHABET The alphabet type of the target database (DNA or RNA) is autodetected by default, by looking at the composition of the .IR . Autodetection is normally quite reliable, but occasionally alphabet type may be ambiguous and autodetection can fail (for instance, when the first sequence starts with a run of ambiguous characters). To avoid this, or to increase robustness in automated analysis pipelines, you may specify the alphabet type of .I with these options. .TP .B --dna Specify that all sequences in .I are DNAs. .TP .B --rna Specify that all sequences in .I are RNAs. .SH OPTIONS CONTROLLING SEED SEARCH HEURISTIC When searching with .IR nhmmer , one may optionally precompute a binary version of the target database, using .IR makehmmerdb , then search against that database. Using default settings, this yields a roughly 10-fold acceleration with small loss of sensitivity on benchmarks. This is achieved using a heuristic method that searches for seeds (ungapped alignments) around which full processing is done. This is essentially a replacement to the SSV stage. (This method has been extensively tested, but should still be treated as somewhat experimental.) The following options only impact .I nhmmer if the value of .B --tformat is .IR hmmerdb . Changing parameters for this seed-finding step will impact both speed and sensitivity - typically faster search leads to lower sensitivity. .TP .BI --seed_max_depth " " The seed step requires that a seed reach a specified bit score in length no longer than .BR . By default, this value is 15. Longer seeds allow a greater chance of meeting the bit score threshold, leading to diminished filtering (greater sensitivity, slower run time). .TP .BI --seed_sc_thresh " " The seed must reach score .B (in bits). The default is 15.0 bits. A higher threshold increases filtering stringency, leading to faster run times and lower sensitivity. .TP .BI --seed_sc_density " " Either all prefixes or all suffixes of a seed must have bit density (bits per aligned position) of at least .BR . The default is 0.8 bits/position. An increase in the density requirement leads to increased filtering stringency, thus faster run times and lower sensitivity. .TP .BI --seed_drop_max_len " " A seed may not have a run of length .B in which the score drops by .I --seed_drop_lim or more. Basically, this prunes seeds that go through long slightly-negative seed extensions. The default is 4. Increasing the limit causes (slightly) diminished filtering efficiency, thus slower run times and higher sensitivity. (minor tuning option) .TP .BI --seed_drop_lim " " In a seed, there may be no run of length .I --seed_drop_max_len in which the score drops by .IR --seed_drop_lim . The default is 0.3 bits. Larger numbers mean less filtering. (minor tuning option) .TP .BI --seed_req_pos " " A seed must contain a run of at least .B positive-scoring matches. The default is 5. Larger values mean increased filtering. (minor tuning option) .TP .BI --seed_ssv_length " " After finding a short seed, an ungapped alignment is extended in both directions in an attempt to meet the .I --F1 score threshold. The window through which this ungapped alignment extends is length .BR . The default is 70. Decreasing this value slightly reduces run time, at a small risk of reduced sensitivity. (minor tuning option) .SH OTHER OPTIONS .TP .BI --tformat " " Assert that the target sequence database file is in format .IR . Accepted formats include .IR fasta , .IR embl , .IR genbank , .IR ddbj , .IR uniprot , .IR stockholm , .IR pfam , .IR a2m , .IR afa , and .IR hmmerfm . The default is to autodetect the format of the file. The format .I hmmerfm indicates that the database file is a binary file produced using .I makehmmerdb (this format is not currently autodetected). .TP .BI --qformat " " Declare that the input .I is in format .IR . This is used when the query is sequence-based, rather than made up of profile model(s). Currently the accepted multiple alignment sequence file formats include Stockholm, Aligned FASTA, Clustal, NCBI PSI-BLAST, PHYLIP, Selex, and UCSC SAM A2M. Default is to autodetect the format of the file. .TP .B --nonull2 Turn off the null2 score corrections for biased composition. .TP .BI -Z " " For the purposes of per-hit E-value calculations, Assert that the total size of the target database is .I million nucleotides, rather than the actual number of targets seen. .TP .BI --seed " " Set the random number seed to .IR . Some steps in postprocessing require Monte Carlo simulation. The default is to use a fixed seed (42), so that results are exactly reproducible. Any other positive integer will give different (but also reproducible) results. A choice of 0 uses a randomly chosen seed. .TP .BI --w_beta " " Window length tail mass. The upper bound, .IR W , on the length at which nhmmer expects to find an instance of the model is set such that the fraction of all sequences generated by the model with length .I ">= W" is less than .IR . The default is 1e-7. This flag may be used to override the value of .I W established for the model by .BR hmmbuild , or when the query is sequence-based. .TP .BI --w_length " " Override the model instance length upper bound, .IR W , which is otherwise controlled by .BR --w_beta . It should be larger than the model length. The value of .I W is used deep in the acceleration pipeline, and modest changes are not expected to impact results (though larger values of .I W do lead to longer run time). This flag may be used to override the value of .I W established for the model by .BR hmmbuild , or when the query is sequence-based. .TP .B --toponly Only search the top strand. By default both the query sequence and its reverse-complement are searched. .TP .B --bottomonly Only search the bottom (reverse-complement) strand. By default both the query sequence and its reverse-complement are searched. .TP .BI --cpu " " Set the number of parallel worker threads to .IR . By default, HMMER sets this to the number of CPU cores it detects in your machine - that is, it tries to maximize the use of your available processor cores. Setting .I higher than the number of available cores is of little if any value, but you may want to set it to something less. You can also control this number by setting an environment variable, .IR HMMER_NCPU . This option is only available if HMMER was compiled with POSIX threads support. This is the default, but it may have been turned off at compile-time for your site or machine for some reason. .TP .BI --stall For debugging the MPI master/worker version: pause after start, to enable the developer to attach debuggers to the running master and worker(s) processes. Send SIGCONT signal to release the pause. (Under gdb: .IR "(gdb) signal SIGCONT" ) (Only available if optional MPI support was enabled at compile-time.) .TP .BI --mpi Run in MPI master/worker mode, using .IR mpirun . (Only available if optional MPI support was enabled at compile-time.) .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/hmmscan.man0000664361611702660230000002752312473612616020053 0ustar wheelerteddy.TH "hmmscan" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME hmmscan - search protein sequence(s) against a protein profile database .SH SYNOPSIS .B hmmscan .I [options] .I .I .SH DESCRIPTION .PP .B hmmscan is used to search protein sequences against collections of protein profiles. For each sequence in .IR , use that query sequence to search the target database of profiles in .IR , and output ranked lists of the profiles with the most significant matches to the sequence. .PP The .I may contain more than one query sequence. It can be in FASTA format, or several other common sequence file formats (genbank, embl, and uniprot, among others), or in alignment file formats (stockholm, aligned fasta, and others). See the .I --qformat option for a complete list. .PP The .I needs to be press'ed using .B hmmpress before it can be searched with .BR hmmscan . This creates four binary files, suffixed .h3{fimp}. .PP The query .I may be '-' (a dash character), in which case the query sequences are read from a pipe instead of from a file. The .I cannot be read from a stream, because it needs to have those four auxiliary binary files generated by .BR hmmpress . .PP The output format is designed to be human-readable, but is often so voluminous that reading it is impractical, and parsing it is a pain. The .B --tblout and .B --domtblout options save output in simple tabular formats that are concise and easier to parse. The .B -o option allows redirecting the main output, including throwing it away in /dev/null. .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .SH OPTIONS FOR CONTROLLING OUTPUT .TP .BI -o " " Direct the main human-readable output to a file .I instead of the default stdout. .TP .BI --tblout " " Save a simple tabular (space-delimited) file summarizing the per-target output, with one data line per homologous target model found. .TP .BI --domtblout " " Save a simple tabular (space-delimited) file summarizing the per-domain output, with one data line per homologous domain detected in a query sequence for each homologous model. .TP .BI --pfamtblout " " Save an especially succinct tabular (space-delimited) file summarizing the per-target output, with one data line per homologous target model found. .TP .B --acc Use accessions instead of names in the main output, where available for profiles and/or sequences. .TP .B --noali Omit the alignment section from the main output. This can greatly reduce the output volume. .TP .B --notextw Unlimit the length of each line in the main output. The default is a limit of 120 characters per line, which helps in displaying the output cleanly on terminals and in editors, but can truncate target profile description lines. .TP .BI --textw " " Set the main output's line length limit to .I characters per line. The default is 120. .SH OPTIONS FOR REPORTING THRESHOLDS Reporting thresholds control which hits are reported in output files (the main output, .IR --tblout , and .IR --domtblout ). .TP .BI -E " " In the per-target output, report target profiles with an E-value of <= .IR . The default is 10.0, meaning that on average, about 10 false positives will be reported per query, so you can see the top of the noise and decide for yourself if it's really noise. .TP .BI -T " " Instead of thresholding per-profile output on E-value, instead report target profiles with a bit score of >= .IR . .TP .BI --domE " " In the per-domain output, for target profiles that have already satisfied the per-profile reporting threshold, report individual domains with a conditional E-value of <= .IR . The default is 10.0. A conditional E-value means the expected number of additional false positive domains in the smaller search space of those comparisons that already satisfied the per-profile reporting threshold (and thus must have at least one homologous domain already). .TP .BI --domT " " Instead of thresholding per-domain output on E-value, instead report domains with a bit score of >= .IR . .SH OPTIONS FOR INCLUSION THRESHOLDS Inclusion thresholds are stricter than reporting thresholds. Inclusion thresholds control which hits are considered to be reliable enough to be included in an output alignment or a subsequent search round. In .BR hmmscan , which does not have any alignment output (like .B hmmsearch or .BR phmmer ) nor any iterative search steps (like .BR jackhmmer ), inclusion thresholds have little effect. They only affect what domains get marked as significant (!) or questionable (?) in domain output. .TP .BI --incE " " Use an E-value of <= .I as the per-target inclusion threshold. The default is 0.01, meaning that on average, about 1 false positive would be expected in every 100 searches with different query sequences. .TP .BI --incT " " Instead of using E-values for setting the inclusion threshold, instead use a bit score of >= .I as the per-target inclusion threshold. It would be unusual to use bit score thresholds with .IR hmmscan , because you don't expect a single score threshold to work for different profiles; different profiles have slightly different expected score distributions. .TP .BI --incdomE " " Use a conditional E-value of <= .I as the per-domain inclusion threshold, in targets that have already satisfied the overall per-target inclusion threshold. The default is 0.01. .TP .BI --incdomT " " Instead of using E-values, instead use a bit score of >= .I as the per-domain inclusion threshold. As with .B --incT above, it would be unusual to use a single bit score threshold in .BR hmmscan . .SH OPTIONS FOR MODEL-SPECIFIC SCORE THRESHOLDING Curated profile databases may define specific bit score thresholds for each profile, superseding any thresholding based on statistical significance alone. To use these options, the profile must contain the appropriate (GA, TC, and/or NC) optional score threshold annotation; this is picked up by .B hmmbuild from Stockholm format alignment files. Each thresholding option has two scores: the per-sequence threshold and the per-domain threshold These act as if .BI -T .BI --incT .BI --domT .BI --incdomT has been applied specifically using each model's curated thresholds. .TP .B --cut_ga Use the GA (gathering) bit scores in the model to set per-sequence (GA1) and per-domain (GA2) reporting and inclusion thresholds. GA thresholds are generally considered to be the reliable curated thresholds defining family membership; for example, in Pfam, these thresholds define what gets included in Pfam Full alignments based on searches with Pfam Seed models. .TP .B --cut_nc Use the NC (noise cutoff) bit score thresholds in the model to set per-sequence (NC1) and per-domain (NC2) reporting and inclusion thresholds. NC thresholds are generally considered to be the score of the highest-scoring known false positive. .TP .B --cut_tc Use the NC (trusted cutoff) bit score thresholds in the model to set per-sequence (TC1) and per-domain (TC2) reporting and inclusion thresholds. TC thresholds are generally considered to be the score of the lowest-scoring known true positive that is above all known false positives. .SH CONTROL OF THE ACCELERATION PIPELINE HMMER3 searches are accelerated in a three-step filter pipeline: the MSV filter, the Viterbi filter, and the Forward filter. The first filter is the fastest and most approximate; the last is the full Forward scoring algorithm. There is also a bias filter step between MSV and Viterbi. Targets that pass all the steps in the acceleration pipeline are then subjected to postprocessing -- domain identification and scoring using the Forward/Backward algorithm. Changing filter thresholds only removes or includes targets from consideration; changing filter thresholds does not alter bit scores, E-values, or alignments, all of which are determined solely in postprocessing. .TP .B --max Turn off all filters, including the bias filter, and run full Forward/Backward postprocessing on every target. This increases sensitivity somewhat, at a large cost in speed. .TP .BI --F1 " " Set the P-value threshold for the MSV filter step. The default is 0.02, meaning that roughly 2% of the highest scoring nonhomologous targets are expected to pass the filter. .TP .BI --F2 " " Set the P-value threshold for the Viterbi filter step. The default is 0.001. .TP .BI --F3 " " Set the P-value threshold for the Forward filter step. The default is 1e-5. .TP .B --nobias Turn off the bias filter. This increases sensitivity somewhat, but can come at a high cost in speed, especially if the query has biased residue composition (such as a repetitive sequence region, or if it is a membrane protein with large regions of hydrophobicity). Without the bias filter, too many sequences may pass the filter with biased queries, leading to slower than expected performance as the computationally intensive Forward/Backward algorithms shoulder an abnormally heavy load. .SH OTHER OPTIONS .TP .B --nonull2 Turn off the null2 score corrections for biased composition. .TP .BI -Z " " Assert that the total number of targets in your searches is .IR , for the purposes of per-sequence E-value calculations, rather than the actual number of targets seen. .TP .BI --domZ " " Assert that the total number of targets in your searches is .IR , for the purposes of per-domain conditional E-value calculations, rather than the number of targets that passed the reporting thresholds. .TP .BI --seed " " Set the random number seed to .IR . Some steps in postprocessing require Monte Carlo simulation. The default is to use a fixed seed (42), so that results are exactly reproducible. Any other positive integer will give different (but also reproducible) results. A choice of 0 uses an arbitrarily chosen seed. .TP .BI --qformat " " Assert that the query sequence file is in format .IR . Accepted formats include .IR fasta , .IR embl , .IR genbank , .IR ddbj , .IR uniprot , .IR stockholm , .IR pfam , .IR a2m , and .IR afa . .TP .BI --cpu " " Set the number of parallel worker threads to .IR . By default, HMMER sets this to the number of CPU cores it detects in your machine - that is, it tries to maximize the use of your available processor cores. Setting .I higher than the number of available cores is of little if any value, but you may want to set it to something less. You can also control this number by setting an environment variable, .IR HMMER_NCPU . This option is only available if HMMER was compiled with POSIX threads support. This is the default, but it may have been turned off for your site or machine for some reason. .TP .BI --stall For debugging the MPI master/worker version: pause after start, to enable the developer to attach debuggers to the running master and worker(s) processes. Send SIGCONT signal to release the pause. (Under gdb: .IR "(gdb) signal SIGCONT" ) (Only available if optional MPI support was enabled at compile-time.) .TP .BI --mpi Run in MPI master/worker mode, using .IR mpirun . (Only available if optional MPI support was enabled at compile-time.) .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/hmmpress.man0000664361611702660230000000363012473612616020254 0ustar wheelerteddy.TH "hmmpress" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME hmmpress - prepare an HMM database for hmmscan .SH SYNOPSIS .B hmmpress .I [options] .I .SH DESCRIPTION .PP Starting from a profile database .I in standard HMMER3 format, construct binary compressed datafiles for .BR hmmscan . The .I hmmpress step is required for .B hmmscan to work. .PP Four files are created: .IR .h3m , .IR .h3i , .IR .h3f , and .IR .h3p . The .I .h3m file contains the profile HMMs and their annotation in a binary format. The .I .h3i file is an SSI index for the .I .h3m file. The .I .h3f file contains precomputed data structures for the fast heuristic filter (the MSV filter). The .I .h3p file contains precomputed data structures for the rest of each profile. .PP .I may not be '-' (dash); running .B hmmpress on a standard input stream rather than a file is not allowed. .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .TP .B -f Force; overwrites any previous hmmpress'ed datafiles. The default is to bitch about any existing files and ask you to delete them first. .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/hmmemit.man0000664361611702660230000001244312473612616020060 0ustar wheelerteddy.TH "hmmemit" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME hmmemit - sample sequences from a profile HMM .SH SYNOPSIS .B hmmemit .I [options] .I hmmfile .SH DESCRIPTION .PP The .B hmmemit program samples (emits) sequences from the profile HMM(s) in .IR hmmfile , and writes them to output. Sampling sequences may be useful for a variety of purposes, including creating synthetic true positives for benchmarks or tests. .PP The default is to sample one unaligned sequence from the core probability model, which means that each sequence consists of one full-length domain. Alternatively, with the .B -c option, you can emit a simple majority-rule consensus sequence; or with the .B -a option, you can emit an alignment (in which case, you probably also want to set .B -N to something other than its default of 1 sequence per model). .PP As another option, with the .B -p option you can sample a sequence from a fully configured HMMER search profile. This means sampling a `homologous sequence' by HMMER's definition, including nonhomologous flanking sequences, local alignments, and multiple domains per sequence, depending on the length model and alignment mode chosen for the profile. .PP The .I hmmfile may contain a library of HMMs, in which case each HMM will be used in turn. .PP .I may be '-' (dash), which means reading this input from .I stdin rather than a file. .SH COMMON OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .TP .BI -o " " Direct the output sequences to file .IR , rather than to .IR stdout . .TP .BI -N " " Sample .I sequences per model, rather than just one. .SH OPTIONS CONTROLLING WHAT TO EMIT The default is to sample .B N sequences from the core model. Alternatively, you may choose one (and only one) of the following alternatives. .TP .B -a Emit an alignment for each HMM in the .I hmmfile rather than sampling unaligned sequences one at a time. .TP .B -c Emit a plurality-rule consensus sequence, instead of sampling a sequence from the profile HMM's probability distribution. The consensus sequence is formed by selecting the maximum probability residue at each match state. .TP .B -C Emit a fancier plurality-rule consensus sequence than the .B -c option. If the maximum probability residue has p < .B minl show it as a lower case 'any' residue (n or x); if p >= .B minl and < .B minu show it as a lower case residue; and if p >= .B minu show it as an upper case residue. The default settings of .B minu and .B minl are both 0.0, which means .B -C gives the same output as .B -c unless you also set .B minu and .B minl to what you want. .TP .B -p Sample unaligned sequences from the implicit search profile, not from the core model. The core model consists only of the homologous states (between the begin and end states of a HMMER Plan7 model). The profile includes the nonhomologous N, C, and J states, local/glocal and uni/multihit algorithm configuration, and the target length model. Therefore sequences sampled from a profile may include nonhomologous as well as homologous sequences, and may contain more than one homologous sequence segment. By default, the profile is in multihit local mode, and the target sequence length is configured for L=400. .SH OPTIONS CONTROLLING EMISSION FROM PROFILES These options require that you have set the .B -p option. .TP .BI -L " " Configure the profile's target sequence length model to generate a mean length of approximately rather than the default of 400. .TP .B --local Configure the profile for multihit local alignment. .TP .B --unilocal Configure the profile for unihit local alignment (Smith/Waterman). .TP .B --glocal Configure the profile for multihit glocal alignment. .TP .B --uniglocal Configure the profile for unihit glocal alignment. .SH OPTIONS CONTROLLING FANCY CONSENSUS EMISSION These options require that you have set the .BR "-C option" . .TP .BI --minl " " Sets the .B minl threshold for showing weakly conserved residues as lower case. (0 <= x <= 1) .TP .BI --minu " " Sets the .B minu threshold for showing strongly conserved residues as upper case. (0 <= x <= 1) .SH OTHER OPTIONS .TP .BI --seed " " Seed the random number generator with .IR , an integer >= 0. If .I is nonzero, any stochastic simulations will be reproducible; the same command will give the same results. If .I is 0, the random number generator is seeded arbitrarily, and stochastic simulations will vary from run to run of the same command. The default is 0: use an arbitrary seed, so different .B hmmemit runs will generate different samples. .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/Makefile.in0000664361611702660230000000310312473612604017756 0ustar wheelerteddytop_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ SHELL = /bin/sh # Installation targets # prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ mandir = @mandir@ docdir = @docdir@ pdfdir = @pdfdir@ mandir = @mandir@ man1dir = ${mandir}/man1 man1ext = .1 INSTALL = @INSTALL@ MANS = hmmer\ hmmalign\ hmmbuild\ hmmconvert\ hmmemit\ hmmfetch\ hmmlogo\ hmmpgmd\ hmmpress\ hmmscan\ hmmsearch\ hmmsim\ hmmstat\ jackhmmer\ makehmmerdb\ phmmer\ nhmmer\ nhmmscan\ alimask .PHONY: install uninstall clean distclean install: for file in ${MANS}; do \ ${INSTALL} -m 0755 ${srcdir}/$$file.man ${DESTDIR}${man1dir}/$${file}${man1ext} ;\ done uninstall: for file in ${MANS}; do \ rm ${DESTDIR}${man1dir}/$${file}${man1ext} ;\ done clean: -rm -f *~ distclean: -rm -f *~ -rm -f Makefile ################################################################ # HMMER - Biological sequence analysis with profile HMMs # Version 3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # HMMER is distributed under the terms of the GNU General Public License # (GPLv3). See the LICENSE file for details. # # SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/documentation/man/Makefile.in $ # SVN $Id: Makefile.in 4576 2013-12-18 04:58:49Z wheelert $ ################################################################ hmmer-3.1b2/documentation/man/hmmfetch.man0000664361611702660230000000751612473612616020220 0ustar wheelerteddy.TH "hmmfetch" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME hmmfetch - retrieve profile HMM(s) from a file .SH SYNOPSIS .B hmmfetch .I [options] .I .I (retrieves HMM named ) .B "hmmfetch -f" .I [options] .I .I (retrieves all HMMs listed in ) .B "hmmfetch --index" .I [options] .I (indexes for fetching) .SH DESCRIPTION .PP Quickly retrieves one or more profile HMMs from an .I (a large Pfam database, for example). .PP For maximum speed, the .I should be indexed first, using .BR "hmmfetch --index" . The index is a binary file named .IR .ssi . However, this is optional, and retrieval will still work from unindexed files, albeit much more slowly. .PP The default mode is to retrieve a single profile by name or accession, called the .IR . For example: .nf % hmmfetch Pfam-A.hmm Caudal_act % hmmfetch Pfam-A.hmm PF00045 .fi .PP With the .I -f option, a .I containing a list of one or more keys is read instead. The first whitespace-delimited field on each non-blank non-comment line of the .I is used as a .IR , and any remaining data on the line is ignored. This allows a variety of whitespace delimited datafiles to be used as .IR s . .PP When using .I -f and a .IR , if .B hmmfile has been indexed, the keys are retrieved in the order they occur in the .IR keyfile , but if .B hmmfile isn't indexed, keys are retrieved in the order they occur in the .BR hmmfile . This is a side effect of an implementation that allows multiple keys to be retrieved even if the .B is a nonrewindable stream, like a standard input pipe. .PP In normal use (without .I --index or .I -f options), .I may be '-' (dash), which means reading input from .I stdin rather than a file. With the .I --index option, .I may not be '-'; it does not make sense to index a standard input stream. With the .I -f option, either .I or .I (but not both) may be '-'. It is often particularly useful to read .I from standard input, because this allows use to use arbitrary command line invocations to create a list of HMM names or accessions, then fetch them all to a new file, just with one command. .PP By default, fetched HMMs are printed to standard output in HMMER3 format. .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .TP .B -f The second commandline argument is a .I instead of a single .IR . The first field on each line of the .I is used as a retrieval .I (an HMM name or accession). Blank lines and comment lines (that start with a # character) are ignored. .TP .BI -o " " Output HMM(s) to file .I instead of to standard output. .TP .B -O Output HMM(s) to individual file(s) named .I instead of standard output. With the .B -f option, this can result in many files being created. .TP .B --index Instead of retrieving one or more profiles from .IR , index the .I for future retrievals. This creates a .I .ssi binary index file. .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/nhmmscan.man0000664361611702660230000002775512473612616020240 0ustar wheelerteddy.TH "nhmmscan" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME nhmmscan - search nucleotide sequence(s) against a nucleotide profile database .SH SYNOPSIS .B hmmscan .I [options] .I .I .SH DESCRIPTION .PP .B nhmmscan is used to search nucleotide sequences against collections of nucleotide profiles. For each sequence in .IR , use that query sequence to search the target database of profiles in .IR , and output ranked lists of the profiles with the most significant matches to the sequence. .PP The .I may contain more than one query sequence. It can be in FASTA format, or several other common sequence file formats (genbank, embl, and uniprot, among others), or in alignment file formats (stockholm, aligned fasta, and others). See the .I --qformat option for a complete list. .PP The .I needs to be press'ed using .B hmmpress before it can be searched with .BR hmmscan . This creates four binary files, suffixed .h3{fimp}. .PP The query .I may be '-' (a dash character), in which case the query sequences are read from a pipe instead of from a file. The .I cannot be read from a stream, because it needs to have those four auxiliary binary files generated by .BR hmmpress . .PP The output format is designed to be human-readable, but is often so voluminous that reading it is impractical, and parsing it is a pain. The .B --tblout option saves output in a simple tabular format that is concise and easier to parse. The .B -o option allows redirecting the main output, including throwing it away in /dev/null. .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .SH OPTIONS FOR CONTROLLING OUTPUT .TP .BI -o " " Direct the main human-readable output to a file .I instead of the default stdout. .TP .BI --tblout " " Save a simple tabular (space-delimited) file summarizing the per-hit output, with one data line per homologous target model hit found. .TP .BI --dfamtblout " " Save a tabular (space-delimited) file summarizing the per-hit output, similar to .B --tblout but more succinct. .TP .BI --aliscoresout " " Save to file a list of per-position scores for each hit. This is useful, for example, in identifying regions of high score density for use in resolving overlapping hits from different models. .TP .B --acc Use accessions instead of names in the main output, where available for profiles and/or sequences. .TP .B --noali Omit the alignment section from the main output. This can greatly reduce the output volume. .TP .B --notextw Unlimit the length of each line in the main output. The default is a limit of 120 characters per line, which helps in displaying the output cleanly on terminals and in editors, but can truncate target profile description lines. .TP .BI --textw " " Set the main output's line length limit to .I characters per line. The default is 120. .SH OPTIONS FOR REPORTING THRESHOLDS Reporting thresholds control which hits are reported in output files (the main output, .IR --tblout , and .IR --dfamtblout ). Hits are ranked by statistical significance (E-value). .TP .BI -E " " Report target profiles with an E-value of <= .IR . The default is 10.0, meaning that on average, about 10 false positives will be reported per query, so you can see the top of the noise and decide for yourself if it's really noise. .TP .BI -T " " Instead of thresholding output on E-value, instead report target profiles with a bit score of >= .IR . .SH OPTIONS FOR INCLUSION THRESHOLDS Inclusion thresholds are stricter than reporting thresholds. Inclusion thresholds control which hits are considered to be reliable enough to be included in an output alignment or a subsequent search round. In .BR nhmmscan , which does not have any alignment output (like .BR nhmmer ), inclusion thresholds have little effect. They only affect what hits get marked as significant (!) or questionable (?) in hit output. .TP .BI --incE " " Use an E-value of <= .I as the inclusion threshold. The default is 0.01, meaning that on average, about 1 false positive would be expected in every 100 searches with different query sequences. .TP .BI --incT " " Instead of using E-values for setting the inclusion threshold, use a bit score of >= .I as the inclusion threshold. It would be unusual to use bit score thresholds with .IR hmmscan , because you don't expect a single score threshold to work for different profiles; different profiles have slightly different expected score distributions. .SH OPTIONS FOR MODEL-SPECIFIC SCORE THRESHOLDING Curated profile databases may define specific bit score thresholds for each profile, superseding any thresholding based on statistical significance alone. To use these options, the profile must contain the appropriate (GA, TC, and/or NC) optional score threshold annotation; this is picked up by .B hmmbuild from Stockholm format alignment files. For a nucleotide model, each thresholding option has a single per-hit threshold This acts as if .BI -T .BI --incT has been applied specifically using each model's curated thresholds. .TP .B --cut_ga Use the GA (gathering) bit score threshold in the model to set per-hit reporting and inclusion thresholds. GA thresholds are generally considered to be the reliable curated thresholds defining family membership; for example, in Dfam, these thresholds are applied when annotating a genome with a model of a family known to be found in that organism. They may allow for minimal expected false discovery rate. .TP .B --cut_nc Use the NC (noise cutoff) bit score threshold in the model to set per-hit reporting and inclusion thresholds. NC thresholds are less stringent than GA; in the context of Pfam, they are generally used to store the score of the highest-scoring known false positive. .TP .B --cut_tc Use the NC (trusted cutoff) bit score threshold in the model to set per-hit reporting and inclusion thresholds. TC thresholds are more stringent than GA, and are generally considered to be the score of the lowest-scoring known true positive that is above all known false positives; for example, in Dfam, these thresholds are applied when annotating a genome with a model of a family not known to be found in that organism. .SH CONTROL OF THE ACCELERATION PIPELINE HMMER3 searches are accelerated in a three-step filter pipeline: the scanning-SSV filter, the Viterbi filter, and the Forward filter. The first filter is the fastest and most approximate; the last is the full Forward scoring algorithm. There is also a bias filter step between SSV and Viterbi. Targets that pass all the steps in the acceleration pipeline are then subjected to postprocessing -- domain identification and scoring using the Forward/Backward algorithm. Changing filter thresholds only removes or includes targets from consideration; changing filter thresholds does not alter bit scores, E-values, or alignments, all of which are determined solely in postprocessing. .TP .B --max Turn off (nearly) all filters, including the bias filter, and run full Forward/Backward postprocessing on most of the target sequence. In contrast to .B hmmscan, where this flag really does turn off the filters entirely, the .I --max flag in .B nhmmscan sets the scanning-SSV filter threshold to 0.4, not 1.0. Use of this flag increases sensitivity somewhat, at a large cost in speed. .TP .BI --F1 " " Set the P-value threshold for the MSV filter step. The default is 0.02, meaning that roughly 2% of the highest scoring nonhomologous targets are expected to pass the filter. .TP .BI --F2 " " Set the P-value threshold for the Viterbi filter step. The default is 0.001. .TP .BI --F3 " " Set the P-value threshold for the Forward filter step. The default is 1e-5. .TP .B --nobias Turn off the bias filter. This increases sensitivity somewhat, but can come at a high cost in speed, especially if the query has biased residue composition (such as a repetitive sequence region, or if it is a membrane protein with large regions of hydrophobicity). Without the bias filter, too many sequences may pass the filter with biased queries, leading to slower than expected performance as the computationally intensive Forward/Backward algorithms shoulder an abnormally heavy load. .SH OTHER OPTIONS .TP .B --nonull2 Turn off the null2 score corrections for biased composition. .TP .BI -Z " " Assert that the total number of targets in your searches is .IR , for the purposes of per-sequence E-value calculations, rather than the actual number of targets seen. .TP .BI --seed " " Set the random number seed to .IR . Some steps in postprocessing require Monte Carlo simulation. The default is to use a fixed seed (42), so that results are exactly reproducible. Any other positive integer will give different (but also reproducible) results. A choice of 0 uses an arbitrarily chosen seed. .TP .BI --qformat " " Assert that the query sequence file is in format .IR . Accepted formats include .IR fasta , .IR embl , .IR genbank , .IR ddbj , .IR uniprot , .IR stockholm , .IR pfam , .IR a2m , and .IR afa . The default is to autodetect the format of the file. .TP .BI --w_beta " " Window length tail mass. The upper bound, .IR W , on the length at which nhmmer expects to find an instance of the model is set such that the fraction of all sequences generated by the model with length .I ">= W" is less than .IR . The default is 1e-7. This flag may be used to override the value of .I W established for the model by .BR hmmbuild . .TP .BI --w_length " " Override the model instance length upper bound, .IR W , which is otherwise controlled by .BR --w_beta . It should be larger than the model length. The value of .I W is used deep in the acceleration pipeline, and modest changes are not expected to impact results (though larger values of .I W do lead to longer run time). This flag may be used to override the value of .I W established for the model by .BR hmmbuild . .TP .B --toponly Only search the top strand. By default both the query sequence and its reverse-complement are searched. .TP .B --bottomonly Only search the bottom (reverse-complement) strand. By default both the query sequence and its reverse-complement are searched. .TP .BI --cpu " " Set the number of parallel worker threads to .IR . By default, HMMER sets this to the number of CPU cores it detects in your machine - that is, it tries to maximize the use of your available processor cores. Setting .I higher than the number of available cores is of little if any value, but you may want to set it to something less. You can also control this number by setting an environment variable, .IR HMMER_NCPU . This option is only available if HMMER was compiled with POSIX threads support. This is the default, but it may have been turned off for your site or machine for some reason. .TP .BI --stall For debugging the MPI master/worker version: pause after start, to enable the developer to attach debuggers to the running master and worker(s) processes. Send SIGCONT signal to release the pause. (Under gdb: .IR "(gdb) signal SIGCONT" ) (Only available if optional MPI support was enabled at compile-time.) .TP .BI --mpi Run in MPI master/worker mode, using .IR mpirun . (Only available if optional MPI support was enabled at compile-time.) .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/hmmstat.man0000664361611702660230000000561412473612616020077 0ustar wheelerteddy.TH "hmmstat" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME hmmstat - display summary statistics for a profile file .SH SYNOPSIS .B hmmstat .I [options] .I .SH DESCRIPTION The .B hmmstat utility prints out a tabular file of summary statistics for each profile in .IR . .PP .I may be '-' (a dash character), in which case profiles are read from a pipe instead of from a file. .PP The columns are: .TP .B idx The index of this profile, numbering each on in the file starting from 1. .TP .B name The name of the profile. .TP .B accession The optional accession of the profile, or "-" if there is none. .TP .B nseq The number of sequences that the profile was estimated from. .TP .B eff_nseq The effective number of sequences that the profile was estimated from, after HMMER applied an effective sequence number calculation such as the default entropy weighting. .TP .B M The length of the model in consensus residues (match states). .TP .B relent Mean relative entropy per match state, in bits. This is the expected (mean) score per consensus position. This is what the default entropy-weighting method for effective sequence number estimation focuses on, so for default HMMER3 models, you expect this value to reflect the default target for entropy-weighting. .TP .B info Mean information content per match state, in bits. Probably not useful. Information content is a slightly different calculation than relative entropy. .TP .B "p relE" Mean positional relative entropy, in bits. This is a fancier version of the per-match-state relative entropy, taking into account the transition (insertion/deletion) probabilities; it may be a more accurate estimation of the average score contributed per model consensus position. .TP .B compKL Kullback-Leibler distance between the model's overall average residue composition and the default background frequency distribution. The higher this number, the more biased the residue composition of the profile is. Highly biased profiles can slow the HMMER3 acceleration pipeline, by causing too many nonhomologous sequences to pass the filters. .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. pFreely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/hmmsearch.man0000664361611702660230000002740112473612616020367 0ustar wheelerteddy.TH "hmmsearch" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME hmmsearch - search profile(s) against a sequence database .SH SYNOPSIS .B hmmsearch .I [options] .I .I .SH DESCRIPTION .PP .B hmmsearch is used to search one or more profiles against a sequence database. For each profile in .IR , use that query profile to search the target database of sequences in .IR , and output ranked lists of the sequences with the most significant matches to the profile. To build profiles from multiple alignments, see .BR hmmbuild . .PP Either the query .I or the target .I may be '-' (a dash character), in which case the query profile or target database input will be read from a pipe instead of from a file. Only one input source can come through , not both. An exception is that if the .I contains more than one profile query, then .I cannot come from , because we can't rewind the streaming target database to search it with another profile. .PP The output format is designed to be human-readable, but is often so voluminous that reading it is impractical, and parsing it is a pain. The .B --tblout and .B --domtblout options save output in simple tabular formats that are concise and easier to parse. The .B -o option allows redirecting the main output, including throwing it away in /dev/null. .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .SH OPTIONS FOR CONTROLLING OUTPUT .TP .BI -o " " Direct the main human-readable output to a file .I instead of the default stdout. .TP .BI -A " " Save a multiple alignment of all significant hits (those satisfying .IR "inclusion thresholds" ) to the file .IR . .TP .BI --tblout " " Save a simple tabular (space-delimited) file summarizing the per-target output, with one data line per homologous target sequence found. .TP .BI --domtblout " " Save a simple tabular (space-delimited) file summarizing the per-domain output, with one data line per homologous domain detected in a query sequence for each homologous model. .TP .B --acc Use accessions instead of names in the main output, where available for profiles and/or sequences. .TP .B --noali Omit the alignment section from the main output. This can greatly reduce the output volume. .TP .B --notextw Unlimit the length of each line in the main output. The default is a limit of 120 characters per line, which helps in displaying the output cleanly on terminals and in editors, but can truncate target profile description lines. .TP .BI --textw " " Set the main output's line length limit to .I characters per line. The default is 120. .SH OPTIONS CONTROLLING REPORTING THRESHOLDS Reporting thresholds control which hits are reported in output files (the main output, .IR --tblout , and .IR --domtblout ). Sequence hits and domain hits are ranked by statistical significance (E-value) and output is generated in two sections called per-target and per-domain output. In per-target output, by default, all sequence hits with an E-value <= 10 are reported. In the per-domain output, for each target that has passed per-target reporting thresholds, all domains satisfying per-domain reporting thresholds are reported. By default, these are domains with conditional E-values of <= 10. The following options allow you to change the default E-value reporting thresholds, or to use bit score thresholds instead. .TP .BI -E " " In the per-target output, report target sequences with an E-value of <= .IR . The default is 10.0, meaning that on average, about 10 false positives will be reported per query, so you can see the top of the noise and decide for yourself if it's really noise. .TP .BI -T " " Instead of thresholding per-profile output on E-value, instead report target sequences with a bit score of >= .IR . .TP .BI --domE " " In the per-domain output, for target sequences that have already satisfied the per-profile reporting threshold, report individual domains with a conditional E-value of <= .IR . The default is 10.0. A conditional E-value means the expected number of additional false positive domains in the smaller search space of those comparisons that already satisfied the per-target reporting threshold (and thus must have at least one homologous domain already). .TP .BI --domT " " Instead of thresholding per-domain output on E-value, instead report domains with a bit score of >= .IR . .SH OPTIONS FOR INCLUSION THRESHOLDS Inclusion thresholds are stricter than reporting thresholds. Inclusion thresholds control which hits are considered to be reliable enough to be included in an output alignment or a subsequent search round, or marked as significant ("!") as opposed to questionable ("?") in domain output. .TP .BI --incE " " Use an E-value of <= .I as the per-target inclusion threshold. The default is 0.01, meaning that on average, about 1 false positive would be expected in every 100 searches with different query sequences. .TP .BI --incT " " Instead of using E-values for setting the inclusion threshold, instead use a bit score of >= .I as the per-target inclusion threshold. By default this option is unset. .TP .BI --incdomE " " Use a conditional E-value of <= .I as the per-domain inclusion threshold, in targets that have already satisfied the overall per-target inclusion threshold. The default is 0.01. .TP .BI --incdomT " " Instead of using E-values, use a bit score of >= .I as the per-domain inclusion threshold. .SH OPTIONS FOR MODEL-SPECIFIC SCORE THRESHOLDING Curated profile databases may define specific bit score thresholds for each profile, superseding any thresholding based on statistical significance alone. To use these options, the profile must contain the appropriate (GA, TC, and/or NC) optional score threshold annotation; this is picked up by .B hmmbuild from Stockholm format alignment files. Each thresholding option has two scores: the per-sequence threshold and the per-domain threshold These act as if .BI -T .BI --incT .BI --domT .BI --incdomT has been applied specifically using each model's curated thresholds. .TP .B --cut_ga Use the GA (gathering) bit scores in the model to set per-sequence (GA1) and per-domain (GA2) reporting and inclusion thresholds. GA thresholds are generally considered to be the reliable curated thresholds defining family membership; for example, in Pfam, these thresholds define what gets included in Pfam Full alignments based on searches with Pfam Seed models. .TP .B --cut_nc Use the NC (noise cutoff) bit score thresholds in the model to set per-sequence (NC1) and per-domain (NC2) reporting and inclusion thresholds. NC thresholds are generally considered to be the score of the highest-scoring known false positive. .TP .B --cut_tc Use the TC (trusted cutoff) bit score thresholds in the model to set per-sequence (TC1) and per-domain (TC2) reporting and inclusion thresholds. TC thresholds are generally considered to be the score of the lowest-scoring known true positive that is above all known false positives. .SH OPTIONS CONTROLLING THE ACCELERATION PIPELINE HMMER3 searches are accelerated in a three-step filter pipeline: the MSV filter, the Viterbi filter, and the Forward filter. The first filter is the fastest and most approximate; the last is the full Forward scoring algorithm. There is also a bias filter step between MSV and Viterbi. Targets that pass all the steps in the acceleration pipeline are then subjected to postprocessing -- domain identification and scoring using the Forward/Backward algorithm. Changing filter thresholds only removes or includes targets from consideration; changing filter thresholds does not alter bit scores, E-values, or alignments, all of which are determined solely in postprocessing. .TP .B --max Turn off all filters, including the bias filter, and run full Forward/Backward postprocessing on every target. This increases sensitivity somewhat, at a large cost in speed. .TP .BI --F1 " " Set the P-value threshold for the MSV filter step. The default is 0.02, meaning that roughly 2% of the highest scoring nonhomologous targets are expected to pass the filter. .TP .BI --F2 " " Set the P-value threshold for the Viterbi filter step. The default is 0.001. .TP .BI --F3 " " Set the P-value threshold for the Forward filter step. The default is 1e-5. .TP .B --nobias Turn off the bias filter. This increases sensitivity somewhat, but can come at a high cost in speed, especially if the query has biased residue composition (such as a repetitive sequence region, or if it is a membrane protein with large regions of hydrophobicity). Without the bias filter, too many sequences may pass the filter with biased queries, leading to slower than expected performance as the computationally intensive Forward/Backward algorithms shoulder an abnormally heavy load. .SH OTHER OPTIONS .TP .B --nonull2 Turn off the null2 score corrections for biased composition. .TP .BI -Z " " Assert that the total number of targets in your searches is .IR , for the purposes of per-sequence E-value calculations, rather than the actual number of targets seen. .TP .BI --domZ " " Assert that the total number of targets in your searches is .IR , for the purposes of per-domain conditional E-value calculations, rather than the number of targets that passed the reporting thresholds. .TP .BI --seed " " Set the random number seed to .IR . Some steps in postprocessing require Monte Carlo simulation. The default is to use a fixed seed (42), so that results are exactly reproducible. Any other positive integer will give different (but also reproducible) results. A choice of 0 uses a randomly chosen seed. .TP .BI --tformat " " Assert that the target sequence database file is in format .IR . Accepted formats include .IR fasta , .IR embl , .IR genbank , .IR ddbj , .IR uniprot , .IR stockholm , .IR pfam , .IR a2m , and .IR afa . The default is to autodetect the format of the file. .TP .BI --cpu " " Set the number of parallel worker threads to .IR . By default, HMMER sets this to the number of CPU cores it detects in your machine - that is, it tries to maximize the use of your available processor cores. Setting .I higher than the number of available cores is of little if any value, but you may want to set it to something less. You can also control this number by setting an environment variable, .IR HMMER_NCPU . This option is only available if HMMER was compiled with POSIX threads support. This is the default, but it may have been turned off at compile-time for your site or machine for some reason. .TP .BI --stall For debugging the MPI master/worker version: pause after start, to enable the developer to attach debuggers to the running master and worker(s) processes. Send SIGCONT signal to release the pause. (Under gdb: .IR "(gdb) signal SIGCONT" ) (Only available if optional MPI support was enabled at compile-time.) .TP .BI --mpi Run in MPI master/worker mode, using .IR mpirun . (Only available if optional MPI support was enabled at compile-time.) .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/jackhmmer.man0000664361611702660230000005452212473612616020365 0ustar wheelerteddy.TH "jackhmmer" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME jackhmmer - iteratively search sequence(s) against a protein database .SH SYNOPSIS .B jackhmmer .I [options] .I .I .SH DESCRIPTION .PP .B jackhmmer iteratively searches each query sequence in .I against the target sequence(s) in .IR . The first iteration is identical to a .B phmmer search. For the next iteration, a multiple alignment of the query together with all target sequences satisfying .I "inclusion thresholds" is assembled, a profile is constructed from this alignment (identical to using .B hmmbuild on the alignment), and profile search of the .I is done (identical to an .B hmmsearch with the profile). .PP The query .I may be '-' (a dash character), in which case the query sequences are read from a pipe instead of from a file. The .I cannot be read from a stream, because .B jackhmmer needs to do multiple passes over the database. .PP The output format is designed to be human-readable, but is often so voluminous that reading it is impractical, and parsing it is a pain. The .B --tblout and .B --domtblout options save output in simple tabular formats that are concise and easier to parse. The .B -o option allows redirecting the main output, including throwing it away in /dev/null. .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .TP .BI -N " " Set the maximum number of iterations to .IR . The default is 5. If N=1, the result is equivalent to a .B phmmer search. .SH OPTIONS CONTROLLING OUTPUT By default, output for each iteration appears on stdout in a somewhat human readable, somewhat parseable format. These options allow redirecting that output or saving additional kinds of output to files, including checkpoint files for each iteration. .TP .BI -o " " Direct the human-readable output to a file .IR . .TP .BI -A " " After the final iteration, save an annotated multiple alignment of all hits satisfying inclusion thresholds (also including the original query) to .I in Stockholm format. .TP .BI --tblout " " After the final iteration, save a tabular summary of top sequence hits to .I in a readily parseable, columnar, whitespace-delimited format. .TP .BI --domtblout " " After the final iteration, save a tabular summary of top domain hits to .I in a readily parseable, columnar, whitespace-delimited format. .TP .BI --chkhmm " " At the start of each iteration, checkpoint the query HMM, saving it to a file named .I "-.hmm" where .I is the iteration number (from 1..N). .TP .BI --chkali " " At the end of each iteration, checkpoint an alignment of all domains satisfying inclusion thresholds (e.g. what will become the query HMM for the next iteration), saving it to a file named .I "-.sto" in Stockholm format, where .I is the iteration number (from 1..N). .TP .B --acc Use accessions instead of names in the main output, where available for profiles and/or sequences. .TP .B --noali Omit the alignment section from the main output. This can greatly reduce the output volume. .TP .B --notextw Unlimit the length of each line in the main output. The default is a limit of 120 characters per line, which helps in displaying the output cleanly on terminals and in editors, but can truncate target profile description lines. .TP .BI --textw " " Set the main output's line length limit to .I characters per line. The default is 120. .SH OPTIONS CONTROLLING SINGLE SEQUENCE SCORING (FIRST ITERATION) By default, the first iteration uses a search model constructed from a single query sequence. This model is constructed using a standard 20x20 substitution matrix for residue probabilities, and two additional parameters for position-independent gap open and gap extend probabilities. These options allow the default single-sequence scoring parameters to be changed. .TP .BI --popen " " Set the gap open probability for a single sequence query model to .IR . The default is 0.02. .I must be >= 0 and < 0.5. .TP .BI --pextend " " Set the gap extend probability for a single sequence query model to .IR . The default is 0.4. .I must be >= 0 and < 1.0. .TP .BI --mx " " Obtain residue alignment probabilities from the built-in substitution matrix named .IR . Several standard matrices are built-in, and do not need to be read from files. The matrix name .I can be PAM30, PAM70, PAM120, PAM240, BLOSUM45, BLOSUM50, BLOSUM62, BLOSUM80, or BLOSUM90. Only one of the .B --mx and .B --mxfile options may be used. .TP .BI --mxfile " " Obtain residue alignment probabilities from the substitution matrix in file .IR . The default score matrix is BLOSUM62 (this matrix is internal to HMMER and does not have to be available as a file). The format of a substitution matrix .I is the standard format accepted by BLAST, FASTA, and other sequence analysis software. .SH OPTIONS CONTROLLING REPORTING THRESHOLDS Reporting thresholds control which hits are reported in output files (the main output, .IR --tblout , and .IR --domtblout ). In each iteration, sequence hits and domain hits are ranked by statistical significance (E-value) and output is generated in two sections called per-target and per-domain output. In per-target output, by default, all sequence hits with an E-value <= 10 are reported. In the per-domain output, for each target that has passed per-target reporting thresholds, all domains satisfying per-domain reporting thresholds are reported. By default, these are domains with conditional E-values of <= 10. The following options allow you to change the default E-value reporting thresholds, or to use bit score thresholds instead. .TP .BI -E " " Report sequences with E-values <= .I in per-sequence output. The default is 10.0. .TP .BI -T " " Use a bit score threshold for per-sequence output instead of an E-value threshold (any setting of .B -E is ignored). Report sequences with a bit score of >= .IR . By default this option is unset. .TP .BI -Z " " Declare the total size of the database to be .I sequences, for purposes of E-value calculation. Normally E-values are calculated relative to the size of the database you actually searched (e.g. the number of sequences in .IR target_seqdb ). In some cases (for instance, if you've split your target sequence database into multiple files for parallelization of your search), you may know better what the actual size of your search space is. .TP .BI --domE " " Report domains with conditional E-values <= .I in per-domain output, in addition to the top-scoring domain per significant sequence hit. The default is 10.0. .TP .BI --domT " " Use a bit score threshold for per-domain output instead of an E-value threshold (any setting of .B --domT is ignored). Report domains with a bit score of >= .I in per-domain output, in addition to the top-scoring domain per significant sequence hit. By default this option is unset. .TP .BI --domZ " " Declare the number of significant sequences to be .I sequences, for purposes of conditional E-value calculation for additional domain significance. Normally conditional E-values are calculated relative to the number of sequences passing per-sequence reporting threshold. .SH OPTIONS CONTROLLING INCLUSION THRESHOLDS Inclusion thresholds control which hits are included in the multiple alignment and profile constructed for the next search iteration. By default, a sequence must have a per-sequence E-value of <= 0.001 (see .B -E option) to be included, and any additional domains in it besides the top-scoring one must have a conditional E-value of <= 0.001 (see .B --domE option). The difference between reporting thresholds and inclusion thresholds is that inclusion thresholds control which hits actually get used in the next iteration (or the final output multiple alignment if the .I -A option is used), whereas reporting thresholds control what you see in output. Reporting thresholds are generally more loose so you can see borderline hits in the top of the noise that might be of interest. .TP .BI --incE " " Include sequences with E-values <= .I in subsequent iteration or final alignment output by .IR -A . The default is 0.001. .TP .BI --incT " " Use a bit score threshold for per-sequence inclusion instead of an E-value threshold (any setting of .B --incE is ignored). Include sequences with a bit score of >= .IR . By default this option is unset. .TP .BI --incdomE " " Include domains with conditional E-values <= .I in subsequent iteration or final alignment output by .IR -A , in addition to the top-scoring domain per significant sequence hit. The default is 0.001. .TP .BI --incdomT " " Use a bit score threshold for per-domain inclusion instead of an E-value threshold (any setting of .B --incT is ignored). Include domains with a bit score of >= .IR . By default this option is unset. .SH OPTIONS CONTROLLING ACCELERATION HEURISTICS HMMER3 searches are accelerated in a three-step filter pipeline: the MSV filter, the Viterbi filter, and the Forward filter. The first filter is the fastest and most approximate; the last is the full Forward scoring algorithm, slowest but most accurate. There is also a bias filter step between MSV and Viterbi. Targets that pass all the steps in the acceleration pipeline are then subjected to postprocessing -- domain identification and scoring using the Forward/Backward algorithm. Essentially the only free parameters that control HMMER's heuristic filters are the P-value thresholds controlling the expected fraction of nonhomologous sequences that pass the filters. Setting the default thresholds higher will pass a higher proportion of nonhomologous sequence, increasing sensitivity at the expense of speed; conversely, setting lower P-value thresholds will pass a smaller proportion, decreasing sensitivity and increasing speed. Setting a filter's P-value threshold to 1.0 means it will passing all sequences, and effectively disables the filter. Changing filter thresholds only removes or includes targets from consideration; changing filter thresholds does not alter bit scores, E-values, or alignments, all of which are determined solely in postprocessing. .TP .B --max Maximum sensitivity. Turn off all filters, including the bias filter, and run full Forward/Backward postprocessing on every target. This increases sensitivity slightly, at a large cost in speed. .TP .BI --F1 " " First filter threshold; set the P-value threshold for the MSV filter step. The default is 0.02, meaning that roughly 2% of the highest scoring nonhomologous targets are expected to pass the filter. .TP .BI --F2 " " Second filter threshold; set the P-value threshold for the Viterbi filter step. The default is 0.001. .TP .BI --F3 " " Third filter threshold; set the P-value threshold for the Forward filter step. The default is 1e-5. .TP .B --nobias Turn off the bias filter. This increases sensitivity somewhat, but can come at a high cost in speed, especially if the query has biased residue composition (such as a repetitive sequence region, or if it is a membrane protein with large regions of hydrophobicity). Without the bias filter, too many sequences may pass the filter with biased queries, leading to slower than expected performance as the computationally intensive Forward/Backward algorithms shoulder an abnormally heavy load. .SH OPTIONS CONTROLLING PROFILE CONSTRUCTION (LATER ITERATIONS) These options control how consensus columns are defined in multiple alignments when building profiles. By default, .B jackhmmer always includes your original query sequence in the alignment result at every iteration, and consensus positions are defined by that query sequence: that is, a default .B jackhmmer profile is always the same length as your original query, at every iteration. .TP .B --fast Define consensus columns as those that have a fraction >= .B symfrac of residues as opposed to gaps. (See below for the .B --symfrac option.) Although this is the default profile construction option elsewhere (in .BR hmmbuild , in particular), it may have undesirable effects in .BR jackhmmer , because a profile could iteratively walk in sequence space away from your original query, leaving few or no consensus columns corresponding to its residues. .TP .B --hand Define consensus columns in next profile using reference annotation to the multiple alignment. .B jackhmmer propagates reference annotation from the previous profile to the multiple alignment, and thence to the next profile. This is the default. .TP .BI --symfrac " " Define the residue fraction threshold necessary to define a consensus column when using the .B --fast option. The default is 0.5. The symbol fraction in each column is calculated after taking relative sequence weighting into account, and ignoring gap characters corresponding to ends of sequence fragments (as opposed to internal insertions/deletions). Setting this to 0.0 means that every alignment column will be assigned as consensus, which may be useful in some cases. Setting it to 1.0 means that only columns that include 0 gaps (internal insertions/deletions) will be assigned as consensus. .TP .BI --fragthresh " " We only want to count terminal gaps as deletions if the aligned sequence is known to be full-length, not if it is a fragment (for instance, because only part of it was sequenced). HMMER uses a simple rule to infer fragments: if the sequence length L is less than or equal to a fraction .I times the alignment length in columns, then the sequence is handled as a fragment. The default is 0.5. Setting .BI --fragthresh 0 will define no (nonempty) sequence as a fragment; you might want to do this if you know you've got a carefully curated alignment of full-length sequences. Setting .BI --fragthresh 1 will define all sequences as fragments; you might want to do this if you know your alignment is entirely composed of fragments, such as translated short reads in metagenomic shotgun data. .SH OPTIONS CONTROLLING RELATIVE WEIGHTS Whenever a profile is built from a multiple alignment, HMMER uses an ad hoc sequence weighting algorithm to downweight closely related sequences and upweight distantly related ones. This has the effect of making models less biased by uneven phylogenetic representation. For example, two identical sequences would typically each receive half the weight that one sequence would (and this is why .B jackhmmer isn't concerned about always including your original query sequence in each iteration's alignment, even if it finds it again in the database you're searching). These options control which algorithm gets used. .TP .B --wpb Use the Henikoff position-based sequence weighting scheme [Henikoff and Henikoff, J. Mol. Biol. 243:574, 1994]. This is the default. .TP .B --wgsc Use the Gerstein/Sonnhammer/Chothia weighting algorithm [Gerstein et al, J. Mol. Biol. 235:1067, 1994]. .TP .B --wblosum Use the same clustering scheme that was used to weight data in calculating BLOSUM subsitution matrices [Henikoff and Henikoff, Proc. Natl. Acad. Sci 89:10915, 1992]. Sequences are single-linkage clustered at an identity threshold (default 0.62; see .IR --wid ) and within each cluster of c sequences, each sequence gets relative weight 1/c. .TP .B --wnone No relative weights. All sequences are assigned uniform weight. .TP .BI --wid " " Sets the identity threshold used by single-linkage clustering when using .IR --wblosum . Invalid with any other weighting scheme. Default is 0.62. .SH OPTIONS CONTROLLING EFFECTIVE SEQUENCE NUMBER After relative weights are determined, they are normalized to sum to a total effective sequence number, .IR eff_nseq . This number may be the actual number of sequences in the alignment, but it is almost always smaller than that. The default entropy weighting method .I (--eent) reduces the effective sequence number to reduce the information content (relative entropy, or average expected score on true homologs) per consensus position. The target relative entropy is controlled by a two-parameter function, where the two parameters are settable with .I --ere and .IR --esigma . .TP .B --eent Adjust effective sequence number to achieve a specific relative entropy per position (see .IR --ere ). This is the default. .TP .B --eclust Set effective sequence number to the number of single-linkage clusters at a specific identity threshold (see .IR --eid ). This option is not recommended; it's for experiments evaluating how much better .B --eent is. .TP .B --enone Turn off effective sequence number determination and just use the actual number of sequences. One reason you might want to do this is to try to maximize the relative entropy/position of your model, which may be useful for short models. .TP .BI --eset " " Explicitly set the effective sequence number for all models to .IR . .TP .BI --ere " " Set the minimum relative entropy/position target to .IR . Requires .BR --eent . Default depends on the sequence alphabet; for protein sequences, it is 0.59 bits/position. .TP .BI --esigma " " Sets the minimum relative entropy contributed by an entire model alignment, over its whole length. This has the effect of making short models have higher relative entropy per position than .I --ere alone would give. The default is 45.0 bits. .TP .BI --eid " " Sets the fractional pairwise identity cutoff used by single linkage clustering with the .B --eclust option. The default is 0.62. .SH OPTIONS CONTROLLING PRIORS In profile construction, by default, weighted counts are converted to mean posterior probability parameter estimates using mixture Dirichlet priors. Default mixture Dirichlet prior parameters for protein models and for nucleic acid (RNA and DNA) models are built in. The following options allow you to override the default priors. .B --pnone Don't use any priors. Probability parameters will simply be the observed frequencies, after relative sequence weighting. .B --plaplace Use a Laplace +1 prior in place of the default mixture Dirichlet prior. .SH OPTIONS CONTROLLING E-VALUE CALIBRATION Estimating the location parameters for the expected score distributions for MSV filter scores, Viterbi filter scores, and Forward scores requires three short random sequence simulations. .TP .BI --EmL " " Sets the sequence length in simulation that estimates the location parameter mu for MSV filter E-values. Default is 200. .TP .BI --EmN " " Sets the number of sequences in simulation that estimates the location parameter mu for MSV filter E-values. Default is 200. .TP .BI --EvL " " Sets the sequence length in simulation that estimates the location parameter mu for Viterbi filter E-values. Default is 200. .TP .BI --EvN " " Sets the number of sequences in simulation that estimates the location parameter mu for Viterbi filter E-values. Default is 200. .TP .BI --EfL " " Sets the sequence length in simulation that estimates the location parameter tau for Forward E-values. Default is 100. .TP .BI --EfN " " Sets the number of sequences in simulation that estimates the location parameter tau for Forward E-values. Default is 200. .TP .BI --Eft " " Sets the tail mass fraction to fit in the simulation that estimates the location parameter tau for Forward evalues. Default is 0.04. .SH OTHER OPTIONS .TP .B --nonull2 Turn off the null2 score corrections for biased composition. .TP .BI -Z " " Assert that the total number of targets in your searches is .IR , for the purposes of per-sequence E-value calculations, rather than the actual number of targets seen. .TP .BI --domZ " " Assert that the total number of targets in your searches is .IR , for the purposes of per-domain conditional E-value calculations, rather than the number of targets that passed the reporting thresholds. .TP .BI --seed " " Seed the random number generator with .IR , an integer >= 0. If .I is >0, any stochastic simulations will be reproducible; the same command will give the same results. If .I is 0, the random number generator is seeded arbitrarily, and stochastic simulations will vary from run to run of the same command. The default seed is 42. .TP .BI --qformat " " Declare that the input .I query_seqfile is in format .IR . Accepted sequence file formats include FASTA, EMBL, GenBank, DDBJ, UniProt, Stockholm, and SELEX. Default is to autodetect the format of the file. .TP .BI --tformat " " Declare that the input .I target_seqdb is in format .IR . Accepted sequence file formats include FASTA, EMBL, GenBank, DDBJ, UniProt, Stockholm, and SELEX. Default is to autodetect the format of the file. .TP .BI --cpu " " Set the number of parallel worker threads to .IR . By default, HMMER sets this to the number of CPU cores it detects in your machine - that is, it tries to maximize the use of your available processor cores. Setting .I higher than the number of available cores is of little if any value, but you may want to set it to something less. You can also control this number by setting an environment variable, .IR HMMER_NCPU . This option is only available if HMMER was compiled with POSIX threads support. This is the default, but it may have been turned off at compile-time for your site or machine for some reason. .TP .BI --stall For debugging the MPI master/worker version: pause after start, to enable the developer to attach debuggers to the running master and worker(s) processes. Send SIGCONT signal to release the pause. (Under gdb: .IR "(gdb) signal SIGCONT" ) (Only available if optional MPI support was enabled at compile-time.) .TP .BI --mpi Run in MPI master/worker mode, using .IR mpirun . (Only available if optional MPI support was enabled at compile-time.) .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/hmmsim.man0000664361611702660230000003405412473612616017714 0ustar wheelerteddy.TH "hmmsim" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME hmmsim - collect score distributions on random sequences .SH SYNOPSIS .B hmmsim .I [options] .I .SH DESCRIPTION .PP The .B hmmsim program generates random sequences, scores them with the model(s) in .IR , and outputs various sorts of histograms, plots, and fitted distributions for the resulting scores. .PP .B hmmsim is not a mainstream part of the HMMER package. Most users would have no reason to use it. It is used to develop and test the statistical methods used to determine P-values and E-values in HMMER3. For example, it was used to generate most of the results in a 2008 paper on H3's local alignment statistics (PLoS Comp Bio 4:e1000069, 2008; http://www.ploscompbiol.org/doi/pcbi.1000069). .PP Because it is a research testbed, you should not expect it to be as robust as other programs in the package. For example, options may interact in weird ways; we haven't tested nor tried to anticipate all different possible combinations. .PP The main task is to fit a maximum likelihood Gumbel distribution to Viterbi scores or an maximum likelihood exponential tail to high-scoring Forward scores, and to test that these fitted distributions obey the conjecture that lambda ~ log_2 for both the Viterbi Gumbel and the Forward exponential tail. .PP The output is a table of numbers, one row for each model. Four different parametric fits to the score data are tested: (1) maximum likelihood fits to both location (mu/tau) and slope (lambda) parameters; (2) assuming lambda=log_2, maximum likelihood fit to the location parameter only; (3) same but assuming an edge-corrected lambda, using current procedures in H3 [Eddy, 2008]; and (4) using both parameters determined by H3's current procedures. The standard simple, quick and dirty statistic for goodness-of-fit is 'E@10', the calculated E-value of the 10th ranked top hit, which we expect to be about 10. .PP In detail, the columns of the output are: .TP .B name Name of the model. .TP .B tailp Fraction of the highest scores used to fit the distribution. For Viterbi, MSV, and Hybrid scores, this defaults to 1.0 (a Gumbel distribution is fitted to all the data). For Forward scores, this defaults to 0.02 (an exponential tail is fitted to the highest 2% scores). .TP .B mu/tau Location parameter for the maximum likelihood fit to the data. .TP .B lambda Slope parameter for the maximum likelihood fit to the data. .TP .B E@10 The E-value calculated for the 10th ranked high score ('E@10') using the ML mu/tau and lambda. By definition, this expected to be about 10, if E-value estimation were accurate. .TP .B mufix Location parameter, for a maximum likelihood fit with a known (fixed) slope parameter lambda of log_2 (0.693). .TP .B E@10fix The E-value calculated for the 10th ranked score using mufix and the expected lambda = log_2 = 0.693. .TP .B mufix2 Location parameter, for a maximum likelihood fit with an edge-effect-corrected lambda. .TP .B E@10fix2 The E-value calculated for the 10th ranked score using mufix2 and the edge-effect-corrected lambda. .TP .B pmu Location parameter as determined by H3's estimation procedures. .TP .B plambda Slope parameter as determined by H3's estimation procedures. .TP .B pE@10 The E-value calculated for the 10th ranked score using pmu, plambda. .PP At the end of this table, one more line is printed, starting with # and summarizing the overall CPU time used by the simulations. .PP Some of the optional output files are in xmgrace xy format. xmgrace is powerful and freely available graph-plotting software. .SH MISCELLANEOUS OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .TP .B -a Collect expected Viterbi alignment length statistics from each simulated sequence. This only works with Viterbi scores (the default; see .IR --vit ). Two additional fields are printed in the output table for each model: the mean length of Viterbi alignments, and the standard deviation. .TP .B -v (Verbose). Print the scores too, one score per line. .TP .BI -L " " Set the length of the randomly sampled (nonhomologous) sequences to .IR . The default is 100. .TP .BI -N " " Set the number of randomly sampled sequences to .IR . The default is 1000. .TP .B --mpi Run in MPI parallel mode, under .BR mpirun . It is parallelized at the level of sending one profile at a time to an MPI worker process, so parallelization only helps if you have more than one profile in the .IR , and you want to have at least as many profiles as MPI worker processes. (Only available if optional MPI support was enabled at compile-time.) .SH OPTIONS CONTROLLING OUTPUT .TP .BI -o " " Save the main output table to a file .I rather than sending it to stdout. .TP .BI --afile " " When collecting Viterbi alignment statistics (the .I -a option), for each sampled sequence, output two fields per line to a file .IR : the length of the optimal alignment, and the Viterbi bit score. Requires that the .I -a option is also used. .TP .BI --efile " " Output a rank vs. E-value plot in XMGRACE xy format to file .IR . The x-axis is the rank of this sequence, from highest score to lowest; the y-axis is the E-value calculated for this sequence. E-values are calculated using H3's default procedures (i.e. the pmu, plambda parameters in the output table). You expect a rough match between rank and E-value if E-values are accurately estimated. .TP .BI --ffile " " Output a "filter power" file to .IR : for each model, a line with three fields: model name, number of sequences passing the P-value threshold, and fraction of sequences passing the P-value threshold. See .I --pthresh for setting the P-value threshold, which defaults to 0.02 (the default MSV filter threshold in H3). The P-values are as determined by H3's default procedures (the pmu,plambda parameters in the output table). If all is well, you expect to see filter power equal to the predicted P-value setting of the threshold. .TP .BI --pfile " " Output cumulative survival plots (P(S>x)) to file .I in XMGRACE xy format. There are three plots: (1) the observed score distribution; (2) the maximum likelihood fitted distribution; (3) a maximum likelihood fit to the location parameter (mu/tau) while assuming lambda=log_2. .TP .BI --xfile " " Output the bit scores as a binary array of double-precision floats (8 bytes per score) to file .IR . Programs like Easel's .B esl-histplot can read such binary files. This is useful when generating extremely large sample sizes. .SH OPTIONS CONTROLLING MODEL CONFIGURATION (MODE) H3 only uses multihit local alignment ( .I --fs mode), and this is where we believe the statistical fits. Unihit local alignment scores (Smith/Waterman; .I --sw mode) also obey our statistical conjectures. Glocal alignment statistics (either multihit or unihit) are still not adequately understood nor adequately fitted. .TP .B --fs Collect multihit local alignment scores. This is the default. 'fs' comes from HMMER2's historical terminology for multihit local alignment as 'fragment search mode'. .TP .B --sw Collect unihit local alignment scores. The H3 J state is disabled. 'sw' comes from HMMER2's historical terminology for unihit local alignment as 'Smith/Waterman search mode'. .TP .B --ls Collect multihit glocal alignment scores. In glocal (global/local) alignment, the entire model must align, to a subsequence of the target. The H3 local entry/exit transition probabilities are disabled. 'ls' comes from HMMER2's historical terminology for multihit local alignment as 'local search mode'. .TP .B --s Collect unihit glocal alignment scores. Both the H3 J state and local entry/exit transition probabilities are disabled. 's' comes from HMMER2's historical terminology for unihit glocal alignment. .SH OPTIONS CONTROLLING SCORING ALGORITHM .TP .B --vit Collect Viterbi maximum likelihood alignment scores. This is the default. .TP .B --fwd Collect Forward log-odds likelihood scores, summed over alignment ensemble. .TP .B --hyb Collect 'Hybrid' scores, as described in papers by Yu and Hwa (for instance, Bioinformatics 18:864, 2002). These involve calculating a Forward matrix and taking the maximum cell value. The number itself is statistically somewhat unmotivated, but the distribution is expected be a well-behaved extreme value distribution (Gumbel). .TP .B --msv Collect MSV (multiple ungapped segment Viterbi) scores, using H3's main acceleration heuristic. .TP .B --fast For any of the above options, use H3's optimized production implementation (using SIMD vectorization). The default is to use the 'generic' implementation (slow and non-vectorized). The optimized implementations sacrifice a small amount of numerical precision. This can introduce confounding noise into statistical simulations and fits, so when one gets super-concerned about exact details, it's better to be able to factor that source of noise out. .SH OPTIONS CONTROLLING FITTED TAIL MASSES FOR FORWARD In some experiments, it was useful to fit Forward scores to a range of different tail masses, rather than just one. These options provide a mechanism for fitting an evenly-spaced range of different tail masses. For each different tail mass, a line is generated in the output. .TP .BI --tmin " " Set the lower bound on the tail mass distribution. (The default is 0.02 for the default single tail mass.) .TP .BI --tmax " " Set the upper bound on the tail mass distribution. (The default is 0.02 for the default single tail mass.) .TP .BI --tpoints " " Set the number of tail masses to sample, starting from .I --tmin and ending at .IR --tmax . (The default is 1, for the default 0.02 single tail mass.) .TP .B --tlinear Sample a range of tail masses with uniform linear spacing. The default is to use uniform logarithmic spacing. .SH OPTIONS CONTROLLING H3 PARAMETER ESTIMATION METHODS H3 uses three short random sequence simulations to estimating the location parameters for the expected score distributions for MSV scores, Viterbi scores, and Forward scores. These options allow these simulations to be modified. .TP .BI --EmL " " Sets the sequence length in simulation that estimates the location parameter mu for MSV E-values. Default is 200. .TP .BI --EmN " " Sets the number of sequences in simulation that estimates the location parameter mu for MSV E-values. Default is 200. .TP .BI --EvL " " Sets the sequence length in simulation that estimates the location parameter mu for Viterbi E-values. Default is 200. .TP .BI --EvN " " Sets the number of sequences in simulation that estimates the location parameter mu for Viterbi E-values. Default is 200. .TP .BI --EfL " " Sets the sequence length in simulation that estimates the location parameter tau for Forward E-values. Default is 100. .TP .BI --EfN " " Sets the number of sequences in simulation that estimates the location parameter tau for Forward E-values. Default is 200. .TP .BI --Eft " " Sets the tail mass fraction to fit in the simulation that estimates the location parameter tau for Forward evalues. Default is 0.04. .SH DEBUGGING OPTIONS .TP .B --stall For debugging the MPI master/worker version: pause after start, to enable the developer to attach debuggers to the running master and worker(s) processes. Send SIGCONT signal to release the pause. (Under gdb: .IR "(gdb) signal SIGCONT" ) (Only available if optional MPI support was enabled at compile-time.) .TP .BI --seed " " Set the random number seed to .IR . The default is 0, which makes the random number generator use an arbitrary seed, so that different runs of .B hmmsim will almost certainly generate a different statistical sample. For debugging, it is useful to force reproducible results, by fixing a random number seed. .SH EXPERIMENTAL OPTIONS These options were used in a small variety of different exploratory experiments. .TP .B --bgflat Set the background residue distribution to a uniform distribution, both for purposes of the null model used in calculating scores, and for generating the random sequences. The default is to use a standard amino acid background frequency distribution. .TP .B --bgcomp Set the background residue distribution to the mean composition of the profile. This was used in exploring some of the effects of biased composition. .TP .B --x-no-lengthmodel Turn the H3 target sequence length model off. Set the self-transitions for N,C,J and the null model to 350/351 instead; this emulates HMMER2. Not a good idea in general. This was used to demonstrate one of the main H2 vs. H3 differences. .TP .BI --nu " " Set the nu parameter for the MSV algorithm -- the expected number of ungapped local alignments per target sequence. The default is 2.0, corresponding to a E->J transition probability of 0.5. This was used to test whether varying nu has significant effect on result (it doesn't seem to, within reason). This option only works if .I --msv is selected (it only affects MSV), and it will not work with .I --fast (because the optimized implementations are hardwired to assume nu=2.0). .TP .BI --pthresh " " Set the filter P-value threshold to use in generating filter power files with .IR --ffile . The default is 0.02 (which would be appropriate for testing MSV scores, since this is the default MSV filter threshold in H3's acceleration pipeline.) Other appropriate choices (matching defaults in the acceleration pipeline) would be 0.001 for Viterbi, and 1e-5 for Forward. .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/alimask.man0000664361611702660230000002032312473612616020035 0ustar wheelerteddy.TH "alimask" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME alimask - Add mask line to a multiple sequence alignment .SH SYNOPSIS .B alimask .I [options] .I .I .SH DESCRIPTION .PP .B alimask is used to apply a mask line to a multiple sequence alignment, based on provided alignment or model coordinates. When .B hmmbuild receives a masked alignment as input, it produces a profile model in which the emission probabilities at masked positions are set to match the background frequency, rather than being set based on observed frequencies in the alignment. Position-specific insertion and deletion rates are not altered, even in masked regions. .B alimask autodetects input format, and produces masked alignments in Stockholm format. .I may contain only one sequence alignment. .PP A common motivation for masking a region in an alignment is that the region contains a simple tandem repeat that is observed to cause an unacceptably high rate of false positive hits. .PP In the simplest case, a mask range is given in coordinates relative to the input alignment, using .BI --alirange " ". However it is more often the case that the region to be masked has been identified in coordinates relative to the profile model (e.g. based on recognizing a simple repeat pattern in false hit alignments or in the HMM logo). Not all alignment columns are converted to match state positions in the profile (see the .I --symfrac flag for .B hmmbuild for discussion), so model positions do not necessarily match up to alignment column positions. To remove the burden of converting model positions to alignment positions, .B alimask accepts the mask range input in model coordinates as well, using .BI --modelrange " ". When using this flag, .I alimask determines which alignment positions would be identified by .B hmmbuild as match states, a process that requires that all .B hmmbuild flags impacting that decision be supplied to .BR alimask . It is for this reason that many of the .B hmmbuild flags are also used by .BR alimask . .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .TP .BI -o " " Direct the summary output to file .IR , rather than to .IR stdout . .SH OPTIONS FOR SPECIFYING MASK RANGE A single mask range is given as a dash-separated pair, like .I "--modelrange 10-20" and multiple ranges may be submitted as a comma-separated list, .IR "--modelrange 10-20,30-42" . .TP .BI --modelrange " " Supply the given range(s) in model coordinates. .TP .BI --alirange " " Supply the given range(s) in alignment coordinates. .TP .B --apendmask Add to the existing mask found with the alignment. The default is to overwrite any existing mask. .TP .BI --model2ali " " Rather than actually produce the masked alignment, simply print model range(s) corresponding to input alignment range(s). .TP .BI --ali2model " " Rather than actually produce the masked alignment, simply print alignment range(s) corresponding to input model range(s). .SH OPTIONS FOR SPECIFYING THE ALPHABET The alphabet type (amino, DNA, or RNA) is autodetected by default, by looking at the composition of the .IR msafile . Autodetection is normally quite reliable, but occasionally alphabet type may be ambiguous and autodetection can fail (for instance, on tiny toy alignments of just a few residues). To avoid this, or to increase robustness in automated analysis pipelines, you may specify the alphabet type of .I msafile with these options. .TP .B --amino Specify that all sequences in .I msafile are proteins. .TP .B --dna Specify that all sequences in .I msafile are DNAs. .TP .B --rna Specify that all sequences in .I msafile are RNAs. .SH OPTIONS CONTROLLING PROFILE CONSTRUCTION These options control how consensus columns are defined in an alignment. .TP .B --fast Define consensus columns as those that have a fraction >= .B symfrac of residues as opposed to gaps. (See below for the .B --symfrac option.) This is the default. .TP .B --hand Define consensus columns in next profile using reference annotation to the multiple alignment. This allows you to define any consensus columns you like. .TP .BI --symfrac " " Define the residue fraction threshold necessary to define a consensus column when using the .B --fast option. The default is 0.5. The symbol fraction in each column is calculated after taking relative sequence weighting into account, and ignoring gap characters corresponding to ends of sequence fragments (as opposed to internal insertions/deletions). Setting this to 0.0 means that every alignment column will be assigned as consensus, which may be useful in some cases. Setting it to 1.0 means that only columns that include 0 gaps (internal insertions/deletions) will be assigned as consensus. .TP .BI --fragthresh " " We only want to count terminal gaps as deletions if the aligned sequence is known to be full-length, not if it is a fragment (for instance, because only part of it was sequenced). HMMER uses a simple rule to infer fragments: if the sequence length L is less than or equal to a fraction .I times the alignment length in columns, then the sequence is handled as a fragment. The default is 0.5. Setting .BI --fragthresh 0 will define no (nonempty) sequence as a fragment; you might want to do this if you know you've got a carefully curated alignment of full-length sequences. Setting .BI --fragthresh 1 will define all sequences as fragments; you might want to do this if you know your alignment is entirely composed of fragments, such as translated short reads in metagenomic shotgun data. .SH OPTIONS CONTROLLING RELATIVE WEIGHTS HMMER uses an ad hoc sequence weighting algorithm to downweight closely related sequences and upweight distantly related ones. This has the effect of making models less biased by uneven phylogenetic representation. For example, two identical sequences would typically each receive half the weight that one sequence would. These options control which algorithm gets used. .TP .B --wpb Use the Henikoff position-based sequence weighting scheme [Henikoff and Henikoff, J. Mol. Biol. 243:574, 1994]. This is the default. .TP .B --wgsc Use the Gerstein/Sonnhammer/Chothia weighting algorithm [Gerstein et al, J. Mol. Biol. 235:1067, 1994]. .TP .B --wblosum Use the same clustering scheme that was used to weight data in calculating BLOSUM subsitution matrices [Henikoff and Henikoff, Proc. Natl. Acad. Sci 89:10915, 1992]. Sequences are single-linkage clustered at an identity threshold (default 0.62; see .IR --wid ) and within each cluster of c sequences, each sequence gets relative weight 1/c. .TP .B --wnone No relative weights. All sequences are assigned uniform weight. .TP .BI --wid " " Sets the identity threshold used by single-linkage clustering when using .IR --wblosum . Invalid with any other weighting scheme. Default is 0.62. .SH OTHER OPTIONS .TP .BI --informat " " Declare that the input .I msafile is in format .IR . Currently the accepted multiple alignment sequence file formats include Stockholm, Aligned FASTA, Clustal, NCBI PSI-BLAST, PHYLIP, Selex, and UCSC SAM A2M. Default is to autodetect the format of the file. .TP .BI --seed " " Seed the random number generator with .IR , an integer >= 0. If .I is nonzero, any stochastic simulations will be reproducible; the same command will give the same results. If .I is 0, the random number generator is seeded arbitrarily, and stochastic simulations will vary from run to run of the same command. The default seed is 42. .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/documentation/man/hmmlogo.man0000664361611702660230000000447012473612616020063 0ustar wheelerteddy.TH "hmmlogo" 1 "February 2015" "HMMER 3.1b2" "HMMER Manual" .SH NAME hmmlogo - given an HMM, produce data required to build an HMM logo .SH SYNOPSIS .B hmmlogo .I [options] .I .SH DESCRIPTION .PP .B hmmlogo computes letter height and indel parameters that can be used to produce a profile HMM logo. This tool is essentially a command-line interface for much of the data underlying the Skylign logo server (skylign.org). By default, .B hmmlogo prints out a table of per-position letter heights (dependent on the requested height method), then prints a table of per-position gap probabilities. In a typical logo, the total height of a stack of letters for one position depends on the information content of the position, and that stack height is subdivided according to the emission probabilities of the letters of the alphabet. .SH OPTIONS .TP .B -h Help; print a brief reminder of command line usage and all available options. .TP .B --height_relent_all Total height = relative entropy (aka information content); all letters are given a positive height. (default) .TP .B --height_relent_abovebg Total height = relative entropy (aka information content); only letters with above-background probability are given positive height. .TP .B --height_score Total height = sums of scores of positive-scoring letters; letter height depends on the score of that letter at that position. Only letters with above-background probability (positive score) are given positive height. (Note that only letter height is meaningful - stack height has no inherent meaning). .TP .B --no_indel Don't print out the indel probability table. .SH SEE ALSO See .B hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package. .PP For complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (). .SH COPYRIGHT .nf Copyright (C) 2015 Howard Hughes Medical Institute. Freely distributed under the GNU General Public License (GPLv3). .fi For additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (). .SH AUTHOR .nf Eddy/Rivas Laboratory Janelia Farm Research Campus 19700 Helix Drive Ashburn VA 20147 USA http://eddylab.org .fi hmmer-3.1b2/config.sub0000664361611702660230000010175612473612603014261 0ustar wheelerteddy#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. timestamp='2008-09-08' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tile*) basic_machine=tile-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: hmmer-3.1b2/LICENSE0000664361611702660230000010451312473612611013277 0ustar wheelerteddy GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . hmmer-3.1b2/.dropbox.attr0000775361611702660230000000000212473610422014706 0ustar wheelerteddy{}hmmer-3.1b2/configure0000775361611702660230000105066012473612603014206 0ustar wheelerteddy#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68 for HMMER 3.1b2. # # Report bugs to . # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: eddys@janelia.hhmi.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='HMMER' PACKAGE_TARNAME='hmmer' PACKAGE_VERSION='3.1b2' PACKAGE_STRING='HMMER 3.1b2' PACKAGE_BUGREPORT='eddys@janelia.hhmi.org' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS EGREP GREP LIBGSL HAVE_GZIP GROUPHMMERLIBS SIMD_CFLAGS IMPL_CHOICE HMMERIMPLLIB PIC_FLAGS PRTDIAG SED EXEC_DEPENDENCY AR RANLIB CPP MPI_BENCHMARKS MPI_UTESTS MPILIBS MPICC INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC acx_pthread_config OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build EASEL_URL EASEL_VERSION EASEL_LICENSE EASEL_COPYRIGHT EASEL_DATE HMMER_SADIR HMMER_ESLDIR HMMER_URL HMMER_VERSION HMMER_LICENSE HMMER_COPYRIGHT HMMER_DATE target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_debugging enable_gcov enable_gprof enable_sse enable_vmx enable_dummy enable_mpi with_xlc_arch enable_threads with_gsl enable_portable_binary with_gcc_arch enable_pic enable_largefile ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS MPICC CPP PIC_FLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures HMMER 3.1b2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/hmmer] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of HMMER 3.1b2:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debugging include debugging code --enable-debugging=x also set diagnostics verbosity level to (1-3) --enable-gcov compile for code coverage testing --enable-gprof compile for gcc code profiing --enable-sse enable SSE implementation --enable-vmx enable Altivec/VMX implementation --enable-dummy enable portable implementation --enable-mpi enable MPI parallelization --enable-threads enable POSIX multithreading support (default is check) --enable-portable-binary disable compiler optimizations that would produce unportable binaries --disable-pic compile PIC objects [default=enabled for shared builds on supported platforms] --disable-largefile omit support for large files Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-xlc-arch= specify architecture for xlc -qarch --with-gsl use the GSL, GNU Scientific Library (default is no) --with-gcc-arch= use architecture for gcc -march/-mtune, instead of guessing Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory MPICC MPI C compiler command CPP C preprocessor PIC_FLAGS compiler flags for PIC code Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF HMMER configure 3.1b2 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------- ## ## Report this to eddys@janelia.hhmi.org ## ## ------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_find_uintX_t LINENO BITS VAR # ------------------------------------ # Finds an unsigned integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 $as_echo_n "checking for uint$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by HMMER $as_me 3.1b2, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: Configuring HMMER for your system." >&5 $as_echo "$as_me: Configuring HMMER for your system." >&6;} # remember if the user is overriding CFLAGS if test x"$CFLAGS" = x; then sre_cflags_env_set=no fi ################################################################ # 3. Info on the package # # The four AC_INIT args set these output variables and preprocessor symbols: # PACKAGE_NAME e.g. "HMMER" # PACKAGE_VERSION e.g. "3.0" # PACKAGE_BUGREPORT e.g. "eddys@janelia.hhmi.org" # PACKAGE_TARNAME e.g. "hmmer" # From them, it derives one more: # PACKAGE_STRING , e.g. "HMMER 3.0" # We also define additional variables: # HMMER_DATE release date: e.g. "January 2007" # HMMER_COPYRIGHT one-line copyright string # HMMER_LICENSE one-line license string # HMMER_LICENSETAG which license to bundle from Licenses/ subdirectory. # HMMER_VERSION copy of version code, e.g. "3.0" # HMMER_URL URL home for HMMER. # And we have to define the relevant package variables for Easel as well. # # We avoid using AC_INIT's PACKAGE_ variables anywhere, because we want to be able # to use HMMER as a library inside other packages, with no name clashes. ################################################################ HMMER_DATE="February 2015" HMMER_COPYRIGHT="Copyright (C) 2015 Howard Hughes Medical Institute." HMMER_LICENSE="Freely distributed under the GNU General Public License (GPLv3)." HMMER_VERSION=$PACKAGE_VERSION HMMER_URL="http://hmmer.org/" HMMER_ESLDIR="easel" HMMER_SADIR="libdivsufsort" EASEL_DATE="February 2015" EASEL_COPYRIGHT="Copyright (C) 2015 Howard Hughes Medical Institute." EASEL_LICENSE="Freely distributed under the Janelia Farm Software License." EASEL_VERSION="h$PACKAGE_VERSION" EASEL_URL="http://bioeasel.org/" # Output variables (AC_OUTPUT replaces @var@ in input files, such as Makefiles) # Preprocessor symbols (replace #undefs in p7config.h) cat >>confdefs.h <<_ACEOF #define HMMER_DATE "$HMMER_DATE" _ACEOF cat >>confdefs.h <<_ACEOF #define HMMER_COPYRIGHT "$HMMER_COPYRIGHT" _ACEOF cat >>confdefs.h <<_ACEOF #define HMMER_LICENSE "$HMMER_LICENSE" _ACEOF cat >>confdefs.h <<_ACEOF #define HMMER_VERSION "$HMMER_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define HMMER_URL "$HMMER_URL" _ACEOF cat >>confdefs.h <<_ACEOF #define EASEL_DATE "$EASEL_DATE" _ACEOF cat >>confdefs.h <<_ACEOF #define EASEL_COPYRIGHT "$EASEL_COPYRIGHT" _ACEOF cat >>confdefs.h <<_ACEOF #define EASEL_LICENSE "$EASEL_LICENSE" _ACEOF cat >>confdefs.h <<_ACEOF #define EASEL_VERSION "$EASEL_VERSION" _ACEOF $as_echo "#define eslLIBRARY 1" >>confdefs.h # Figure out what host we're compiling on. # Three GNU scripts must be included in the distro: # install.sh, config.guess, config.sub # This sets four shell variables: # host example: i686-pc-linux-gnu # host_cpu example: i686 # host_vendor example: pc # host_os example: linux-gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Check if we're a binary distribution. # Trigger is existence of binaries/, nonexistence of src/. # # For binary distro, we do minimal configuration, setting version information # and installation path names, making ./configure independent of having a working # C compiler. # # Implements a sneaky if statement that wraps most of the configure.ac M4 code. # #if ((! test -d binaries) && test -d src); then { $as_echo "$as_me:${as_lineno-$LINENO}: Full HMMER source distribution - using full configuration" >&5 $as_echo "$as_me: Full HMMER source distribution - using full configuration" >&6;} ################################################################ # Process the ./configure command line ################################################################ # --enable-debugging - set basic debugging (level 0) # --enable-debugging=x - set debugging level to (1-3) # # At all levels, including 0, replaces CFLAGS w/ "-g -Wall" (so it assumes gcc). # Sets p7_DEBUGGING preprocessor symbol, which compiles in debugging support. # Also sets eslDEBUGLEVEL level, 0-3. # # Check whether --enable-debugging was given. if test "${enable_debugging+set}" = set; then : enableval=$enable_debugging; enable_debugging=$enableval else enable_debugging=no fi case $enable_debugging in yes) $as_echo "#define eslDEBUGLEVEL 0" >>confdefs.h ;; 1) $as_echo "#define eslDEBUGLEVEL 1" >>confdefs.h ;; 2) $as_echo "#define eslDEBUGLEVEL 2" >>confdefs.h ;; 3) $as_echo "#define eslDEBUGLEVEL 3" >>confdefs.h ;; no) $as_echo "#define eslDEBUGLEVEL 0" >>confdefs.h ;; *) as_fn_error $? "Unknown argument to --enable-debugging: $enable_debugging" "$LINENO" 5;; esac # --enable-gcov - compile for code coverage testing # # Replaces CC with "gcc" and CFLAGS with "-g -Wall -fprofile-arcs -ftest-coverage". # Running programs (notably the test suite) will then generate .gcda files, # which the gcov tool can read. # # Check whether --enable-gcov was given. if test "${enable_gcov+set}" = set; then : enableval=$enable_gcov; ok=$enableval else ok=no fi if test "$ok" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: Compiling with gcov instrumentation." >&5 $as_echo "$as_me: Compiling with gcov instrumentation." >&6;} CC="gcc" CFLAGS="-g -Wall -fprofile-arcs -ftest-coverage" sre_cflags_env_set=yes fi # --enable-gprof - compile for gcc code profiling # # Replaces CC with "gcc" and CFLAGS with "-O -g -pg" # Running programs generates a profile data file "gmon.out". # # Check whether --enable-gprof was given. if test "${enable_gprof+set}" = set; then : enableval=$enable_gprof; ok=$enableval else ok=no fi if test "$ok" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: Compiling with gprof instrumentation." >&5 $as_echo "$as_me: Compiling with gprof instrumentation." >&6;} CC="gcc" CFLAGS="-O -g -pg" sre_cflags_env_set=yes fi # --enable-sse Enable the SSE implementation. # --enable-vmx Enable the Altivec/VMX implementation. # --enable-dummy Enable the portable implementation. # # These set $impl_choice to one of sse, vmx, dummy, or none. # # Check whether --enable-sse was given. if test "${enable_sse+set}" = set; then : enableval=$enable_sse; enable_sse=$enableval else enable_sse=check fi # Check whether --enable-vmx was given. if test "${enable_vmx+set}" = set; then : enableval=$enable_vmx; enable_vmx=$enableval else enable_vmx=check fi # Check whether --enable-dummy was given. if test "${enable_dummy+set}" = set; then : enableval=$enable_dummy; enable_dummy=$enableval else enable_dummy=check fi if test "$enable_sse" = "yes"; then if test "$enable_vmx" = "yes" || test "$enable_dummy" = "yes"; then as_fn_error $? "Select only one implementation of sse, vmx, or dummy" "$LINENO" 5 fi impl_choice=sse elif test "$enable_vmx" = "yes"; then if test "$enable_sse" = "yes" || test "$enable_dummy" = "yes"; then as_fn_error $? "Select only one implementation of sse, vmx, or dummy" "$LINENO" 5 fi impl_choice=vmx elif test "$enable_dummy" = "yes"; then if test "$enable_sse" = "yes" || test "$enable_vmx" = "yes"; then as_fn_error $? "Select only one implementation of sse, vmx, or dummy" "$LINENO" 5 fi impl_choice=dummy else impl_choice=none fi # --enable-mpi Enable MPI parallelization # Check whether --enable-mpi was given. if test "${enable_mpi+set}" = set; then : enableval=$enable_mpi; enable_mpi=$enableval else enable_mpi=no fi # --enable-xlc-arch Set the code generation for a particular architecture # # The xlc compiler on AIX seems to need the -qarch flag to be set for a processor # that is VMX enabled. Otherwise a warning is issued that states the -qenablevmx # and -qaltivec flags are ignored. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 $as_echo_n "checking for C compiler vendor... " >&6; } if ${ax_cv_c_compiler_vendor+:} false; then : $as_echo_n "(cached) " >&6 else ax_cv_c_compiler_vendor=unknown # note: don't check for gcc first since some other compilers define __GNUC__ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if !($vencpp) thisisanerror; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_compiler_vendor=`echo $ventest | cut -d: -f1`; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5 $as_echo "$ax_cv_c_compiler_vendor" >&6; } if test "${ax_cv_c_compiler_vendor}" = "ibm"; then # Check whether --with-xlc-arch was given. if test "${with_xlc_arch+set}" = set; then : withval=$with_xlc_arch; XLC_ARCH=$withval else XLC_ARCH=no fi fi # --enable-threads Enable POSIX multithreading # # Uses ACX_PTHREAD macro from the GNU macro archive. # Back to my code to finish enabling pthreads... # Define these preprocessor variables: # HMMER_THREADS # HAVE_PTHREAD_SETCONCURRENCY # HAVE_PTHREAD_ATTR_SETSCOPE # # Check whether --enable-threads was given. if test "${enable_threads+set}" = set; then : enableval=$enable_threads; else enable_threads=check fi case $enable_threads in yes) check_threads=yes ;; no) check_threads=no ;; check) check_threads=yes ;; *) check_threads=no { $as_echo "$as_me:${as_lineno-$LINENO}: Ignoring unknown argument to --enable-threads: $enable_threads" >&5 $as_echo "$as_me: Ignoring unknown argument to --enable-threads: $enable_threads" >&6;} ;; esac if test "x$check_threads" != xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu acx_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 $as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_join (); int main () { return pthread_join (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : acx_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 $as_echo "$acx_pthread_ok" >&6; } if test x"$acx_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthread or # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags" ;; esac if test x"$acx_pthread_ok" = xno; then for flag in $acx_pthread_flags; do case $flag in none) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 $as_echo_n "checking whether pthreads work without any flags... " >&6; } ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 $as_echo_n "checking whether pthreads work with $flag... " >&6; } PTHREAD_CFLAGS="$flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_acx_pthread_config+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$acx_pthread_config"; then ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_acx_pthread_config="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" fi fi acx_pthread_config=$ac_cv_prog_acx_pthread_config if test -n "$acx_pthread_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5 $as_echo "$acx_pthread_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$acx_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 $as_echo_n "checking for the pthreads library -l$flag... " >&6; } PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : acx_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 $as_echo "$acx_pthread_ok" >&6; } if test "x$acx_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$acx_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: threads are created detached by default # and the JOINABLE attribute has a nonstandard name (UNDETACHED). { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 $as_echo_n "checking for joinable pthread attribute... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int attr=PTHREAD_CREATE_JOINABLE; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ok=PTHREAD_CREATE_JOINABLE else ok=unknown fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test x"$ok" = xunknown; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int attr=PTHREAD_CREATE_UNDETACHED; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ok=PTHREAD_CREATE_UNDETACHED else ok=unknown fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then $as_echo "#define PTHREAD_CREATE_JOINABLE \$ok" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ok}" >&5 $as_echo "${ok}" >&6; } if test x"$ok" = xunknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: we do not know how to create joinable pthreads" >&5 $as_echo "$as_me: WARNING: we do not know how to create joinable pthreads" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 $as_echo_n "checking if more special flags are required for pthreads... " >&6; } flag=no # Added _POSIX_PTHREAD_SEMANTICS for solaris. Needed for ctime_r() compliance. # SRE, Fri Oct 29 10:03:36 2010 [J7/3] case "${host_cpu}-${host_os}" in *-aix* | *-freebsd*) flag="-D_THREAD_SAFE";; *solaris*) flag="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS";; *-osf* | *-hpux*) flag="-D_REENTRANT";; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 $as_echo "${flag}" >&6; } if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with cc_r # Extract the first word of "cc_r", so it can be a program name with args. set dummy cc_r; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PTHREAD_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_PTHREAD_CC="cc_r" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PTHREAD_CC" && ac_cv_prog_PTHREAD_CC="${CC}" fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 $as_echo "$PTHREAD_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else PTHREAD_CC="$CC" fi # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$acx_pthread_ok" = xyes; then $as_echo "#define HMMER_THREADS 1" >>confdefs.h $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h : else acx_pthread_ok=no if test "x$enable_threads" != xcheck; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "POSIX multithreading failed See \`config.log' for more details" "$LINENO" 5; } fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi #AC_ARG_ENABLE(threads, #[ --enable-threads enable POSIX multithreading support], #[case $enable_threads in # yes) AC_MSG_NOTICE([enabled POSIX multithreading support]) # AC_CHECK_FUNCS(pthread_setconcurrency) # AC_CHECK_FUNCS(pthread_attr_setscope) # ACX_PTHREAD(AC_DEFINE(HMMER_THREADS)) # ;; # no) AC_MSG_NOTICE([POSIX multithreading support disabled]) # ;; # *) echo "Ignoring unknown argument to --disable-threads: $enable_threads" # ;; #esac]) # --with-gsl - enable hooks into the GSL (GNU Scientific Library) # # The (action-if-given) is blank: using --with-gsl sets $with_gsl to 'yes', # and --without-gsl sets $with_gsl to 'no'. If neither is given, # $with_gsl is set to 'check', and we'll try to use GSL anyway if we # can find it. # # We interpret the $with_gsl setting later, in the "checks for libraries" section. # Check whether --with-gsl was given. if test "${with_gsl+set}" = set; then : withval=$with_gsl; if test "x$withval" != xno ; then { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling hooks into the GNU Scientific Library (GSL)" >&5 $as_echo "$as_me: Enabling hooks into the GNU Scientific Library (GSL)" >&6;} fi else with_gsl=no fi ################################################################ # Select the vector implementation we'll use # (if user didn't already configure one) # if test "$impl_choice" = "none"; then case $host in ia64-*-*) impl_choice=sse;; i?86-*-*) impl_choice=sse;; x86*-*-*) impl_choice=sse;; powerpc*-*-*) impl_choice=vmx;; *) impl_choice=dummy;; esac fi if test "$impl_choice" = "dummy"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: It appears your platform will not fully support H3." >&5 $as_echo "$as_me: WARNING: It appears your platform will not fully support H3." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: We'll use the 'dummy' implementation, a slow reference implementation." >&5 $as_echo "$as_me: WARNING: We'll use the 'dummy' implementation, a slow reference implementation." >&2;} fi if test "$impl_choice" = "sse" && test "$enable_sse" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You disabled the SSE implementation: I'll use the dummy impl instead." >&5 $as_echo "$as_me: WARNING: You disabled the SSE implementation: I'll use the dummy impl instead." >&2;} impl_choice=dummy fi if test "$impl_choice" = "vmx" && test "$enable_vmx" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You disabled the VMX implementation: I'll use the dummy impl instead." >&5 $as_echo "$as_me: WARNING: You disabled the VMX implementation: I'll use the dummy impl instead." >&2;} impl_choice=vmx fi if test "$impl_choice" = "dummy" && test "$enable_dummy" = "no"; then as_fn_error $? "No vector impl configured; and you disabled the dummy implementation." "$LINENO" 5 fi ################################################################ # Checks for programs, including choice of compiler ${CC} and ${CFLAGS}. # ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # MPI : set @CC@ to mpicc, sets @MPILIBS@, defines HAVE_MPI. if test "$enable_mpi" = "yes"; then for ac_prog in mpicc hcc mpxlc_r mpxlc mpcc cmpicc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MPICC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MPICC"; then ac_cv_prog_MPICC="$MPICC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MPICC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MPICC=$ac_cv_prog_MPICC if test -n "$MPICC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPICC" >&5 $as_echo "$MPICC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$MPICC" && break done test -n "$MPICC" || MPICC="$CC" acx_mpi_save_CC="$CC" CC="$MPICC" if test x = x"$MPILIBS"; then ac_fn_c_check_func "$LINENO" "MPI_Init" "ac_cv_func_MPI_Init" if test "x$ac_cv_func_MPI_Init" = xyes; then : MPILIBS=" " fi fi if test x = x"$MPILIBS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lmpi" >&5 $as_echo_n "checking for MPI_Init in -lmpi... " >&6; } if ${ac_cv_lib_mpi_MPI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmpi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char MPI_Init (); int main () { return MPI_Init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_mpi_MPI_Init=yes else ac_cv_lib_mpi_MPI_Init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpi_MPI_Init" >&5 $as_echo "$ac_cv_lib_mpi_MPI_Init" >&6; } if test "x$ac_cv_lib_mpi_MPI_Init" = xyes; then : MPILIBS="-lmpi" fi fi if test x = x"$MPILIBS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lmpich" >&5 $as_echo_n "checking for MPI_Init in -lmpich... " >&6; } if ${ac_cv_lib_mpich_MPI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmpich $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char MPI_Init (); int main () { return MPI_Init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_mpich_MPI_Init=yes else ac_cv_lib_mpich_MPI_Init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpich_MPI_Init" >&5 $as_echo "$ac_cv_lib_mpich_MPI_Init" >&6; } if test "x$ac_cv_lib_mpich_MPI_Init" = xyes; then : MPILIBS="-lmpich" fi fi if test x != x"$MPILIBS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mpi.h" >&5 $as_echo_n "checking for mpi.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else MPILIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi CC="$acx_mpi_save_CC" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x = x"$MPILIBS"; then as_fn_error $? "MPI library not found for --enable-mpi" "$LINENO" 5 : else $as_echo "#define HAVE_MPI 1" >>confdefs.h MPI_UTESTS="mpi_utest" MPI_BENCHMARKS="mpi_benchmark" : fi CC=$MPICC fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 $as_echo_n "checking for C compiler vendor... " >&6; } if ${ax_cv_c_compiler_vendor+:} false; then : $as_echo_n "(cached) " >&6 else ax_cv_c_compiler_vendor=unknown # note: don't check for gcc first since some other compilers define __GNUC__ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if !($vencpp) thisisanerror; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_compiler_vendor=`echo $ventest | cut -d: -f1`; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5 $as_echo "$ax_cv_c_compiler_vendor" >&6; } # AC_PROG_CC_STDC wants to append -c99 to icc; icc doesn't like this. if test "$ax_cv_c_compiler_vendor" != "intel"; then case $ac_cv_prog_cc_stdc in #( no) : ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 else ac_cv_prog_cc_stdc=no fi fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 $as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } if ${ac_cv_prog_cc_stdc+:} false; then : $as_echo_n "(cached) " >&6 fi case $ac_cv_prog_cc_stdc in #( no) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; #( '') : { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 $as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; esac fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_AR+:} false; then : $as_echo_n "(cached) " >&6 else case $AR in [\\/]* | ?:[\\/]*) ac_cv_path_AR="$AR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/usr/ccs/bin:/usr/xpg4/bin" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_AR" && ac_cv_path_AR=":" ;; esac fi AR=$ac_cv_path_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether you have a GNU make" >&5 $as_echo_n "checking whether you have a GNU make... " >&6; } foundGNUmake='nope, so we assume you will use a sysv-compatible make.' ; EXEC_DEPENDENCY=\$\$\@.o ; for a in "$MAKE" make gmake gnumake ; do if test -z "$a" ; then continue ; fi ; if ( sh -c "$a --version" 2> /dev/null | grep GNU 2>&1 > /dev/null ) ; then foundGNUmake='yes, you do; and we assume you will use it!' ; EXEC_DEPENDENCY='%: %.o' ; fi done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $foundGNUmake" >&5 $as_echo "$foundGNUmake" >&6; } # Select our optimization level in CFLAGS. if test "$enable_debugging" != "no"; then $as_echo "#define p7_DEBUGGING 1" >>confdefs.h if test "$GCC" = "yes" && test "$sre_cflags_env_set" = "no"; then CFLAGS="-g -Wall" fi else sre_save_ac_test_cflags="$ac_test_CFLAGS" if test "$sre_cflags_env_set" = "no"; then ac_test_CFLAGS="" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed # Check whether --enable-portable-binary was given. if test "${enable_portable_binary+set}" = set; then : enableval=$enable_portable_binary; acx_maxopt_portable=$withval else acx_maxopt_portable=no fi # Try to determine "good" native compiler flags if none specified via CFLAGS if test "$ac_test_CFLAGS" != "set"; then CFLAGS="" case $ax_cv_c_compiler_vendor in dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -tune host" # CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" if test "x$acx_maxopt_portable" = xno; then CFLAGS="$CFLAGS -arch host" fi;; sun) CFLAGS="-native -xO5 -dalign" # CFLAGS="-native -fast -xO5 -dalign" if test "x$acx_maxopt_portable" = xyes; then CFLAGS="$CFLAGS -xarch=generic" fi;; hp) CFLAGS="+Oall +Optrs_ansi +DSnative" if test "x$acx_maxopt_portable" = xyes; then CFLAGS="$CFLAGS +DAportable" fi;; ibm) xlc_opt="-qtune=auto -qstrict" if test "x$acx_maxopt_portable" = xno; then if test "x$XLC_ARCH" = xno; then xlc_opt="-qarch=auto $xlc_opt" else xlc_opt="-qarch=$XLC_ARCH $xlc_opt" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $xlc_opt" >&5 $as_echo_n "checking whether C compiler accepts $xlc_opt... " >&6; } ax_save_FLAGS=$CFLAGS CFLAGS="$xlc_opt" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=yes else eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then CFLAGS="-O3 -qansialias -w $xlc_opt" else CFLAGS="-O3 -qansialias -w" echo "******************************************************" echo "* You seem to have the IBM C compiler. It is *" echo "* recommended for best performance that you use: *" echo "* *" echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" echo "* ^^^ ^^^ *" echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" echo "* CPU you have. (Set the CFLAGS environment var. *" echo "* and re-run configure.) For more info, man cc. *" echo "******************************************************" fi ;; intel) CFLAGS="-O3 -ansi_alias" if test "x$acx_maxopt_portable" = xno; then icc_archflag=unknown icc_flags="" case $host_cpu in i686*|x86_64*) # icc accepts gcc assembly syntax, so these should work: ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 $as_echo_n "checking for x86 cpuid 0 output... " >&6; } if ${ax_cv_gcc_x86_cpuid_0+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ax_cv_gcc_x86_cpuid_0=unknown else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int op = 0, eax, ebx, ecx, edx; FILE *f; __asm__("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (op)); f = fopen("conftest_cpuid", "w"); if (!f) return 1; fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); fclose(f); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid else ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 $as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 $as_echo_n "checking for x86 cpuid 1 output... " >&6; } if ${ax_cv_gcc_x86_cpuid_1+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ax_cv_gcc_x86_cpuid_1=unknown else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int op = 1, eax, ebx, ecx, edx; FILE *f; __asm__("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (op)); f = fopen("conftest_cpuid", "w"); if (!f) return 1; fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); fclose(f); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid else ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 $as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG *:756e6547:*:*) # Intel case $ax_cv_gcc_x86_cpuid_1 in *6a?:*[234]:*:*|*6[789b]?:*:*:*) icc_flags="-xK";; *f3[347]:*:*:*|*f41347:*:*:*) icc_flags="-xP -xN -xW -xK";; *f??:*:*:*) icc_flags="-xN -xW -xK";; esac ;; esac ;; esac if test "x$icc_flags" != x; then for flag in $icc_flags; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } ax_save_FLAGS=$CFLAGS CFLAGS="$flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes else eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then icc_archflag=$flag; break else : fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icc architecture flag" >&5 $as_echo_n "checking for icc architecture flag... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $icc_archflag" >&5 $as_echo "$icc_archflag" >&6; } if test "x$icc_archflag" != xunknown; then CFLAGS="$CFLAGS $icc_archflag" fi fi ;; gnu) # default optimization flags for gcc on all systems CFLAGS="-O3 -fomit-frame-pointer" # -malign-double for x86 systems # SRE: no, that's a bad idea; # on 32bit Ubuntu Linux systems, for example, this # causes an odd and buggy interaction with _FILE_OFFSET_BITS (LFS) # and fstat(). # AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double") # -fstrict-aliasing for gcc-2.95+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5 $as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; } if ${ax_cv_c_flags__fstrict_aliasing+:} false; then : $as_echo_n "(cached) " >&6 else ax_save_FLAGS=$CFLAGS CFLAGS="-fstrict-aliasing" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_flags__fstrict_aliasing=yes else ax_cv_c_flags__fstrict_aliasing=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS fi eval ax_check_compiler_flags=$ax_cv_c_flags__fstrict_aliasing { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then CFLAGS="$CFLAGS -fstrict-aliasing" else : fi # note that we enable "unsafe" fp optimization with other compilers, too # SRE: no, that's a bad idea, don't use this # AX_CHECK_COMPILER_FLAGS(-ffast-math, CFLAGS="$CFLAGS -ffast-math") # Check whether --with-gcc-arch was given. if test "${with_gcc_arch+set}" = set; then : withval=$with_gcc_arch; ax_gcc_arch=$withval else ax_gcc_arch=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 $as_echo_n "checking for gcc architecture flag... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } if ${ax_cv_gcc_archflag+:} false; then : $as_echo_n "(cached) " >&6 else ax_cv_gcc_archflag="unknown" if test "$GCC" = yes; then if test "x$ax_gcc_arch" = xyes; then ax_gcc_arch="" if test "$cross_compiling" = no; then case $host_cpu in i[3456]86*|x86_64*|amd64*) # use cpuid codes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 $as_echo_n "checking for x86 cpuid 0 output... " >&6; } if ${ax_cv_gcc_x86_cpuid_0+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ax_cv_gcc_x86_cpuid_0=unknown else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int op = 0, eax, ebx, ecx, edx; FILE *f; __asm__("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (op)); f = fopen("conftest_cpuid", "w"); if (!f) return 1; fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); fclose(f); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid else ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 $as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 $as_echo_n "checking for x86 cpuid 1 output... " >&6; } if ${ax_cv_gcc_x86_cpuid_1+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ax_cv_gcc_x86_cpuid_1=unknown else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int op = 1, eax, ebx, ecx, edx; FILE *f; __asm__("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (op)); f = fopen("conftest_cpuid", "w"); if (!f) return 1; fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); fclose(f); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid else ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 $as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case $ax_cv_gcc_x86_cpuid_0 in *:756e6547:*:*) # Intel case $ax_cv_gcc_x86_cpuid_1 in *5[48]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; *5??:*:*:*) ax_gcc_arch=pentium ;; *1?6[7d]?:*:*:*) ax_gcc_arch="penryn core2 pentium-m pentium3 pentiumpro" ;; *1?6[aef]?:*:*:*|*2?6[5cef]?:*:*:*) ax_gcc_arch="corei7 core2 pentium-m pentium3 pentiumpro" ;; *1?6c?:*:*:*|*[23]?66?:*:*:*) ax_gcc_arch="atom core2 pentium-m pentium3 pentiumpro" ;; *2?6[ad]?:*:*:*) ax_gcc_arch="corei7-avx corei7 core2 pentium-m pentium3 pentiumpro" ;; *[1-9a-f]?6??:*:*:*) ax_gcc_arch="core2 pentiumpro" ;; *6[3456]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; *6a?:*[01]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; *6a?:*[234]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; *6[9de]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; *6[78b]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; *6f?:*:*:*) ax_gcc_arch="core2 pentium-m pentium3 pentiumpro" ;; *6??:*:*:*) ax_gcc_arch=pentiumpro ;; *f3[347]:*:*:*|*f41347:*:*:*|*f6?:*:*:*) case $host_cpu in x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; esac ;; *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; esac ;; *:68747541:*:*) # AMD case $ax_cv_gcc_x86_cpuid_1 in *5[67]?:*:*:*) ax_gcc_arch=k6 ;; *5[8d]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; *5[9]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; *60?:*:*:*) ax_gcc_arch=k7 ;; *6[12]?:*:*:*) ax_gcc_arch="athlon k7" ;; *6[34]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; *6[68a]?:*:*:*) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0x80000006 output" >&5 $as_echo_n "checking for x86 cpuid 0x80000006 output... " >&6; } if ${ax_cv_gcc_x86_cpuid_0x80000006+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ax_cv_gcc_x86_cpuid_0x80000006=unknown else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int op = 0x80000006, eax, ebx, ecx, edx; FILE *f; __asm__("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (op)); f = fopen("conftest_cpuid", "w"); if (!f) return 1; fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); fclose(f); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ax_cv_gcc_x86_cpuid_0x80000006=`cat conftest_cpuid`; rm -f conftest_cpuid else ax_cv_gcc_x86_cpuid_0x80000006=unknown; rm -f conftest_cpuid fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0x80000006" >&5 $as_echo "$ax_cv_gcc_x86_cpuid_0x80000006" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # L2 cache size case $ax_cv_gcc_x86_cpuid_0x80000006 in *:*:*[1-9a-f]??????:*) # (L2 = ecx >> 16) >= 256 ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; *) ax_gcc_arch="athlon-4 athlon k7" ;; esac ;; *5??f??:*:*:*) ax_gcc_arch="btver1 amdfam10 k8" ;; *6??f??:*:*:*) ax_gcc_arch="bdver1 amdfam10 k8" ;; *[1-9a-f]??f??:*:*:*) ax_gcc_arch="amdfam10 k8" ;; *f[4cef8b]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; *f5?:*:*:*) ax_gcc_arch="opteron k8" ;; *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; *f??:*:*:*) ax_gcc_arch="k8" ;; esac ;; *:746e6543:*:*) # IDT case $ax_cv_gcc_x86_cpuid_1 in *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; *58?:*:*:*) ax_gcc_arch=winchip2 ;; *6[78]?:*:*:*) ax_gcc_arch=c3 ;; *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; esac ;; esac if test x"$ax_gcc_arch" = x; then # fallback case $host_cpu in i586*) ax_gcc_arch=pentium ;; i686*) ax_gcc_arch=pentiumpro ;; esac fi ;; sparc*) # Extract the first word of "prtdiag", so it can be a program name with args. set dummy prtdiag; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PRTDIAG+:} false; then : $as_echo_n "(cached) " >&6 else case $PRTDIAG in [\\/]* | ?:[\\/]*) ac_cv_path_PRTDIAG="$PRTDIAG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PRTDIAG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PRTDIAG" && ac_cv_path_PRTDIAG="prtdiag" ;; esac fi PRTDIAG=$ac_cv_path_PRTDIAG if test -n "$PRTDIAG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRTDIAG" >&5 $as_echo "$PRTDIAG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` cputype=`echo "$cputype" | tr -d ' -' | $SED 's/SPARCIIi/SPARCII/' |tr $as_cr_LETTERS $as_cr_letters` case $cputype in *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; *supersparc*|*tms390z5[05]*) ax_gcc_arch="supersparc v8" ;; *hypersparc*|*rt62[056]*) ax_gcc_arch="hypersparc v8" ;; *cypress*) ax_gcc_arch=cypress ;; esac ;; alphaev5) ax_gcc_arch=ev5 ;; alphaev56) ax_gcc_arch=ev56 ;; alphapca56) ax_gcc_arch="pca56 ev56" ;; alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; alphaev6) ax_gcc_arch=ev6 ;; alphaev67) ax_gcc_arch=ev67 ;; alphaev68) ax_gcc_arch="ev68 ev67" ;; alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; powerpc*) cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | $SED 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` cputype=`echo $cputype | $SED -e 's/ppc//g;s/ *//g'` case $cputype in *750*) ax_gcc_arch="750 G3" ;; *740[0-9]*) ax_gcc_arch="$cputype 7400 G4" ;; *74[4-5][0-9]*) ax_gcc_arch="$cputype 7450 G4" ;; *74[0-9][0-9]*) ax_gcc_arch="$cputype G4" ;; *970*) ax_gcc_arch="970 G5 power4";; *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; 603ev|8240) ax_gcc_arch="$cputype 603e 603";; *) ax_gcc_arch=$cputype ;; esac ax_gcc_arch="$ax_gcc_arch powerpc" ;; esac fi # not cross-compiling fi # guess arch if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then for arch in $ax_gcc_arch; do if test "x$acx_maxopt_portable" = xyes; then # if we require portable code flags="-mtune=$arch" # -mcpu=$arch and m$arch generate nonportable code on every arch except # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac else flags="-march=$arch -mcpu=$arch -m$arch" fi for flag in $flags; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then : ax_cv_gcc_archflag=$flag; break else : fi done test "x$ax_cv_gcc_archflag" = xunknown || break done fi fi # $GCC=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 $as_echo_n "checking for gcc architecture flag... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_archflag" >&5 $as_echo "$ax_cv_gcc_archflag" >&6; } if test "x$ax_cv_gcc_archflag" = xunknown; then : else CFLAGS="$CFLAGS $ax_cv_gcc_archflag" fi ;; esac if test -z "$CFLAGS"; then echo "" echo "********************************************************" echo "* WARNING: Don't know the best CFLAGS for this system *" echo "* Use ./configure CFLAGS=... to specify your own flags *" echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" echo "********************************************************" echo "" CFLAGS="-O3" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 $as_echo_n "checking whether C compiler accepts $CFLAGS... " >&6; } ax_save_FLAGS=$CFLAGS CFLAGS="$CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=yes else eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then : else echo "" echo "********************************************************" echo "* WARNING: The guessed CFLAGS don't seem to work with *" echo "* your compiler. *" echo "* Use ./configure CFLAGS=... to specify your own flags *" echo "********************************************************" echo "" CFLAGS="" fi fi ac_test_CFLAGS="$sre_save_ac_test_cflags" # That was a workaround. AX_CC_MAXOPT apparently thinks that # $ac_test_CFLAGS only gets set if ${CFLAGS} was set by the # user (in the environment), but that's not so; it gets set # by AC_PROG_CC. Instead of rewriting AX_CC_MAXOPT, we fool # it. fi # Figure out how to generate PIC code for shared libraries # This sets @PIC_FLAGS@ output variable for Easel. # Check whether --enable-pic was given. if test "${enable_pic+set}" = set; then : enableval=$enable_pic; enable_pic="$enableval" test "x$enable_pic" = x && enable_pic=auto else enable_pic=auto fi # disable PIC by default for static builds if test "$enable_pic" = auto && test "$enable_static" = yes; then enable_pic=no fi # if PIC hasn't been explicitly disabled, try to figure out the flags if test "$enable_pic" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to produce PIC" >&5 $as_echo_n "checking for $CC option to produce PIC... " >&6; } # allow the user's flags to override if test "x$PIC_FLAGS" = x; then # see if we're using GCC if test "x$GCC" = xyes; then case "$host_os" in aix*|beos*|cygwin*|irix5*|irix6*|osf3*|osf4*|osf5*) # PIC is the default for these OSes. ;; mingw*|os2*|pw32*) # This hack is so that the source file can tell whether # it is being built for inclusion in a dll (and should # export symbols for example). PIC_FLAGS="-DDLL_EXPORT" ;; darwin*|rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files PIC_FLAGS="-fno-common" ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, # but not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) PIC_FLAGS="-fPIC" ;; esac ;; *) # Everyone else on GCC uses -fPIC PIC_FLAGS="-fPIC" ;; esac else # !GCC case "$host_os" in hpux9*|hpux10*|hpux11*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, # but not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) PIC_FLAGS="+Z" ;; esac ;; linux*|k*bsd*-gnu) case `basename "$CC"` in icc*|ecc*|ifort*) PIC_FLAGS="-KPIC" ;; pgcc*|pgf77*|pgf90*|pgf95*) # Portland Group compilers (*not* the Pentium gcc # compiler, which looks to be a dead project) PIC_FLAGS="-fpic" ;; ccc*) # All Alpha code is PIC. ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC PIC_FLAGS="-qpic" ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*|*Sun\ F*) # Sun C 5.9 or Sun Fortran PIC_FLAGS="-KPIC" ;; esac esac ;; solaris*) PIC_FLAGS="-KPIC" ;; sunos4*) PIC_FLAGS="-PIC" ;; esac fi # GCC fi # PIC_FLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PIC_FLAGS" >&5 $as_echo "$PIC_FLAGS" >&6; } fi # If we're using SSE, figure out our @SIMD_CFLAGS@ if test "$impl_choice" = "sse" && test "x$SIMD_CFLAGS" = x; then case $ax_cv_c_compiler_vendor in gnu) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -msse2" >&5 $as_echo_n "checking whether C compiler accepts -msse2... " >&6; } if ${ax_cv_c_flags__msse2+:} false; then : $as_echo_n "(cached) " >&6 else ax_save_FLAGS=$CFLAGS CFLAGS="-msse2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_flags__msse2=yes else ax_cv_c_flags__msse2=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS fi eval ax_check_compiler_flags=$ax_cv_c_flags__msse2 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then SIMD_CFLAGS="-msse2" else impl_choice=dummy fi ;; intel) ;; *) ;; esac fi if test "$enable_sse" = "yes" && test "$impl_choice" = dummy; then as_fn_error $? "SSE instructions are apparently not available; --enable-sse failed" "$LINENO" 5 fi # If we're using VMX/Altivec, figure out our @SIMD_CFLAGS@ if test "$impl_choice" = "vmx"; then if test "x$SIMD_CFLAGS" = x; then if test "$GCC" = "yes"; then # -DFAKE__VEC__ is a workaround because gcc-3.3 does not # #define __VEC__ with -maltivec. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -faltivec" >&5 $as_echo_n "checking whether C compiler accepts -faltivec... " >&6; } if ${ax_cv_c_flags__faltivec+:} false; then : $as_echo_n "(cached) " >&6 else ax_save_FLAGS=$CFLAGS CFLAGS="-faltivec" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_flags__faltivec=yes else ax_cv_c_flags__faltivec=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS fi eval ax_check_compiler_flags=$ax_cv_c_flags__faltivec { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then SIMD_CFLAGS="-faltivec" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -maltivec -mabi=altivec" >&5 $as_echo_n "checking whether C compiler accepts -maltivec -mabi=altivec... " >&6; } ax_save_FLAGS=$CFLAGS CFLAGS="-maltivec -mabi=altivec" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval `$as_echo "ax_cv_c_flags_-maltivec -mabi=altivec" | $as_tr_sh`=yes else eval `$as_echo "ax_cv_c_flags_-maltivec -mabi=altivec" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_-maltivec -mabi=altivec" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then SIMD_CFLAGS="-maltivec -mabi=altivec" else # [SIMD_CFLAGS="-maltivec -mabi=altivec -DFAKE__VEC__"], { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fvec" >&5 $as_echo_n "checking whether C compiler accepts -fvec... " >&6; } if ${ax_cv_c_flags__fvec+:} false; then : $as_echo_n "(cached) " >&6 else ax_save_FLAGS=$CFLAGS CFLAGS="-fvec" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_flags__fvec=yes else ax_cv_c_flags__fvec=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS fi eval ax_check_compiler_flags=$ax_cv_c_flags__fvec { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then SIMD_CFLAGS="-fvec" else as_fn_error $? "Need a version of gcc with -maltivec" "$LINENO" 5 fi fi fi elif test "${ax_cv_c_compiler_vendor}" = "ibm"; then SIMD_CFLAGS="" # if debugging is enabled and the xlc_arch flag is set, we need to # set the qarch flag here. if debugging is NOT enabled, the arch # flag is set in AX_CC_MAXOPT. if test "x$XLC_ARCH" != x; then if test "x$enable_debugging" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -qarch=$XLC_ARCH" >&5 $as_echo_n "checking whether C compiler accepts -qarch=$XLC_ARCH... " >&6; } ax_save_FLAGS=$CFLAGS CFLAGS="-qarch=$XLC_ARCH" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval `$as_echo "ax_cv_c_flags_-qarch=$XLC_ARCH" | $as_tr_sh`=yes else eval `$as_echo "ax_cv_c_flags_-qarch=$XLC_ARCH" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_-qarch=$XLC_ARCH" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then SIMD_CFLAGS="-qarch=$XLC_ARCH" else : fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -qenablevmx" >&5 $as_echo_n "checking whether C compiler accepts -qenablevmx... " >&6; } if ${ax_cv_c_flags__qenablevmx+:} false; then : $as_echo_n "(cached) " >&6 else ax_save_FLAGS=$CFLAGS CFLAGS="-qenablevmx" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_flags__qenablevmx=yes else ax_cv_c_flags__qenablevmx=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS fi eval ax_check_compiler_flags=$ax_cv_c_flags__qenablevmx { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then SIMD_CFLAGS="$SIMD_CFLAGS -qenablevmx" else : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -qaltivec" >&5 $as_echo_n "checking whether C compiler accepts -qaltivec... " >&6; } if ${ax_cv_c_flags__qaltivec+:} false; then : $as_echo_n "(cached) " >&6 else ax_save_FLAGS=$CFLAGS CFLAGS="-qaltivec" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_flags__qaltivec=yes else ax_cv_c_flags__qaltivec=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS fi eval ax_check_compiler_flags=$ax_cv_c_flags__qaltivec { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then SIMD_CFLAGS="$SIMD_CFLAGS -qaltivec" else : fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -faltivec" >&5 $as_echo_n "checking whether C compiler accepts -faltivec... " >&6; } if ${ax_cv_c_flags__faltivec+:} false; then : $as_echo_n "(cached) " >&6 else ax_save_FLAGS=$CFLAGS CFLAGS="-faltivec" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_flags__faltivec=yes else ax_cv_c_flags__faltivec=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS fi eval ax_check_compiler_flags=$ax_cv_c_flags__faltivec { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then SIMD_CFLAGS="-faltivec" else : fi fi fi fi # check if the SSE2 implementation support cast functions if test "$impl_choice" = "sse"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler support for sse2 cast functions" >&5 $as_echo_n "checking compiler support for sse2 cast functions... " >&6; } ssecast=no sre_save_cflags="$CFLAGS" CFLAGS="$CFLAGS $SIMD_CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { __m128 a; __m128i b; b = _mm_castps_si128(a); a = _mm_castsi128_ps(b); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : $as_echo "#define HAVE_SSE2_CAST 1" >>confdefs.h ssecast=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ssecast" >&5 $as_echo "$ssecast" >&6; } CFLAGS="$sre_save_cflags" fi # Verify that we can actually build the chosen implementation; else # default to dummy. # (For example, Athlon reports as i686-*, so will get assigned to # sse impl, but does not support SSE2 instructions.) # The test here is cribbed from the Apache configure.ac file. # if test "$impl_choice" = "sse"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether SSE2 is supported" >&5 $as_echo_n "checking whether SSE2 is supported... " >&6; } sre_save_cflags="$CFLAGS" CFLAGS="$CFLAGS $SIMD_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { __m128i* one=(__m128i*)_mm_malloc(4, 16); __m128i* two=(__m128i*)_mm_malloc(4, 16); __m128i xmm1 = _mm_load_si128(one); __m128i xmm2 = _mm_load_si128(two); __m128i xmm3 = _mm_or_si128(xmm1, xmm2); _mm_store_si128(one, xmm3); _mm_free(one); _mm_free(two); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no; reverting to dummy implementation" >&5 $as_echo "no; reverting to dummy implementation" >&6; } impl_choice=dummy fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$sre_save_cflags" fi if test "$impl_choice" = "vmx"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Altivec/VMX is supported" >&5 $as_echo_n "checking whether Altivec/VMX is supported... " >&6; } sre_save_cflags="$CFLAGS" CFLAGS="$CFLAGS $SIMD_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { vector unsigned char zerov; vector unsigned char onev; zerov = vec_splat_u8(0); onev = vec_splat_u8(1); onev = vec_adds(onev, zerov); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no; reverting to dummy implementation" >&5 $as_echo "no; reverting to dummy implementation" >&6; } impl_choice=dummy if test "${ax_cv_c_compiler_vendor}" = "ibm"; then echo "******************************************************" echo "* You seem to have the IBM C compiler. If your *" echo "* processor supports vector instructions it is *" echo "* possible specifying an architecture would enable *" echo "* vector support, i.e. *" echo "* *" echo "* --with-xlc-arch=XXX *" echo "* *" echo "* where XXX is pwr6, auto or whatever kind of CPU *" echo "* you have. *" echo "******************************************************" fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$sre_save_cflags" fi # For x86 processors check if the flush to zero macro is available # in order to avoid the performance penalty dealing with sub-normal # values in the floating point calculations. if test "$impl_choice" = "sse"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _MM_SET_FLUSH_ZERO_MODE is supported" >&5 $as_echo_n "checking whether _MM_SET_FLUSH_ZERO_MODE is supported... " >&6; } sre_save_cflags="$CFLAGS" CFLAGS="$CFLAGS $SIMD_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { _MM_SET_FLUSH_ZERO_MODE (_MM_FLUSH_ZERO_ON); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_FLUSH_ZERO_MODE 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$sre_save_cflags" fi # Now, we can enable the appropriate optimized implementation. case "$impl_choice" in sse) { $as_echo "$as_me:${as_lineno-$LINENO}: Activating Intel/AMD SSE optimized DP implementation" >&5 $as_echo "$as_me: Activating Intel/AMD SSE optimized DP implementation" >&6;} $as_echo "#define HAVE_SSE2 1" >>confdefs.h $as_echo "#define p7_IMPL_SSE 1" >>confdefs.h HMMERIMPLLIB="impl_sse/libhmmerimpl.a" IMPL_CHOICE="sse" ;; vmx) { $as_echo "$as_me:${as_lineno-$LINENO}: Activating Altivec/VMX optimized DP implementation" >&5 $as_echo "$as_me: Activating Altivec/VMX optimized DP implementation" >&6;} $as_echo "#define HAVE_VMX 1" >>confdefs.h $as_echo "#define p7_IMPL_VMX 1" >>confdefs.h HMMERIMPLLIB="impl_vmx/libhmmerimpl.a" IMPL_CHOICE="vmx" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: Activating \"dummy\" implementation" >&5 $as_echo "$as_me: Activating \"dummy\" implementation" >&6;} $as_echo "#define p7_IMPL_DUMMY 1" >>confdefs.h HMMERIMPLLIB="impl_dummy/libhmmerimpl.a" IMPL_CHOICE="dummy" ;; esac # Check if the linker supports library groups for recursive libraries if test "x$impl_choice" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler support --start-group" >&5 $as_echo_n "checking compiler support --start-group... " >&6; } LDFLAGS_save=$LDFLAGS LDFLAGS="-Wl,--start-group -Wl,--end-group $LDFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } GROUPHMMERLIBS="-Wl,--start-group -lhmmer -lhmmerimpl -Wl,--end-group" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } GROUPHMMERLIBS="-lhmmer -lhmmerimpl" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$LDFLAGS_save else GROUPHMMERLIBS="-lhmmer" fi # Define HAVE_GZIP if gzip is in $PATH (or if HAVE_GZIP is already set) # Extract the first word of ""gzip"", so it can be a program name with args. set dummy "gzip"; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_HAVE_GZIP+:} false; then : $as_echo_n "(cached) " >&6 else case $HAVE_GZIP in [\\/]* | ?:[\\/]*) ac_cv_path_HAVE_GZIP="$HAVE_GZIP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_HAVE_GZIP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_HAVE_GZIP" && ac_cv_path_HAVE_GZIP=""no"" ;; esac fi HAVE_GZIP=$ac_cv_path_HAVE_GZIP if test -n "$HAVE_GZIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_GZIP" >&5 $as_echo "$HAVE_GZIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "${HAVE_GZIP}" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: gzip not found" >&5 $as_echo "$as_me: WARNING: gzip not found" >&2;} else $as_echo "#define HAVE_GZIP 1" >>confdefs.h fi # 5. Checks for libraries # LIBGSL= if test "x$with_gsl" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gsl_expm1 in -lgsl" >&5 $as_echo_n "checking for gsl_expm1 in -lgsl... " >&6; } if ${ac_cv_lib_gsl_gsl_expm1+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgsl -lgslcblas $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gsl_expm1 (); int main () { return gsl_expm1 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gsl_gsl_expm1=yes else ac_cv_lib_gsl_gsl_expm1=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gsl_gsl_expm1" >&5 $as_echo "$ac_cv_lib_gsl_gsl_expm1" >&6; } if test "x$ac_cv_lib_gsl_gsl_expm1" = xyes; then : LIBGSL="-lgsl -lgslcblas" $as_echo "#define HAVE_LIBGSL 1" >>confdefs.h else if test "x$with_gsl" != xcheck; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-gsl was given, but GSL library was not found See \`config.log' for more details" "$LINENO" 5; } fi fi fi # Checks for headers # # Defines HAVE_SYS_TYPES_H, HAVE_STDINT_H, etc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in \ endian.h\ inttypes.h\ stdint.h\ unistd.h\ sys/types.h\ netinet/in.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Check for sysctl.h separately. On OpenBSD, it requires # and autoconf needs special logic to deal w. this as # follows. for ac_header in sys/param.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" if test "x$ac_cv_header_sys_param_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_PARAM_H 1 _ACEOF fi done for ac_header in sys/sysctl.h do : ac_fn_c_check_header_compile "$LINENO" "sys/sysctl.h" "ac_cv_header_sys_sysctl_h" "#ifdef HAVE_SYS_PARAM_H #include #endif " if test "x$ac_cv_header_sys_sysctl_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SYSCTL_H 1 _ACEOF fi done # altivec.h requires the simd cflags # For reasons I don't understand, this needs to come after any other CHECK_HEADERS(). if test "$impl_choice" = "vmx"; then sre_save_CFLAGS="$CFLAGS" sre_save_CPPFLAGS="$CPPFLAGS" CFLAGS="$CFLAGS $SIMD_CFLAGS" CPPFLAGS="$CPPFLAGS $SIMD_CFLAGS" for ac_header in altivec.h do : ac_fn_c_check_header_mongrel "$LINENO" "altivec.h" "ac_cv_header_altivec_h" "$ac_includes_default" if test "x$ac_cv_header_altivec_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ALTIVEC_H 1 _ACEOF fi done CFLAGS="$sre_save_CFLAGS" CPPFLAGS="$sre_save_CPPFLAGS" fi # Checks for types # { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) $as_echo "#define _UINT8_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint8_t $ac_cv_c_uint8_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" case $ac_cv_c_uint16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define uint16_t $ac_cv_c_uint16_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) $as_echo "#define _UINT32_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint32_t $ac_cv_c_uint32_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) $as_echo "#define _UINT64_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint64_t $ac_cv_c_uint64_t _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi # Checks for functions, defining HAVE_FOO when foo is found # for ac_func in mkstemp do : ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp" if test "x$ac_cv_func_mkstemp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MKSTEMP 1 _ACEOF fi done for ac_func in popen do : ac_fn_c_check_func "$LINENO" "popen" "ac_cv_func_popen" if test "x$ac_cv_func_popen" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_POPEN 1 _ACEOF fi done for ac_func in strcasecmp do : ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" if test "x$ac_cv_func_strcasecmp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRCASECMP 1 _ACEOF fi done for ac_func in times do : ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times" if test "x$ac_cv_func_times" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TIMES 1 _ACEOF fi done for ac_func in getpid do : ac_fn_c_check_func "$LINENO" "getpid" "ac_cv_func_getpid" if test "x$ac_cv_func_getpid" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPID 1 _ACEOF fi done for ac_func in sysctl do : ac_fn_c_check_func "$LINENO" "sysctl" "ac_cv_func_sysctl" if test "x$ac_cv_func_sysctl" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYSCTL 1 _ACEOF fi done for ac_func in sysconf do : ac_fn_c_check_func "$LINENO" "sysconf" "ac_cv_func_sysconf" if test "x$ac_cv_func_sysconf" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYSCONF 1 _ACEOF fi done for ac_func in getcwd do : ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd" if test "x$ac_cv_func_getcwd" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETCWD 1 _ACEOF fi done for ac_func in stat do : ac_fn_c_check_func "$LINENO" "stat" "ac_cv_func_stat" if test "x$ac_cv_func_stat" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STAT 1 _ACEOF fi done for ac_func in fstat do : ac_fn_c_check_func "$LINENO" "fstat" "ac_cv_func_fstat" if test "x$ac_cv_func_fstat" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FSTAT 1 _ACEOF fi done for ac_func in ntohs do : ac_fn_c_check_func "$LINENO" "ntohs" "ac_cv_func_ntohs" if test "x$ac_cv_func_ntohs" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NTOHS 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ntohs in -lsocket" >&5 $as_echo_n "checking for ntohs in -lsocket... " >&6; } if ${ac_cv_lib_socket_ntohs+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ntohs (); int main () { return ntohs (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_ntohs=yes else ac_cv_lib_socket_ntohs=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_ntohs" >&5 $as_echo "$ac_cv_lib_socket_ntohs" >&6; } if test "x$ac_cv_lib_socket_ntohs" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSOCKET 1 _ACEOF LIBS="-lsocket $LIBS" fi fi done for ac_func in ntohl do : ac_fn_c_check_func "$LINENO" "ntohl" "ac_cv_func_ntohl" if test "x$ac_cv_func_ntohl" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NTOHL 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ntohl in -lsocket" >&5 $as_echo_n "checking for ntohl in -lsocket... " >&6; } if ${ac_cv_lib_socket_ntohl+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ntohl (); int main () { return ntohl (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_ntohl=yes else ac_cv_lib_socket_ntohl=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_ntohl" >&5 $as_echo "$ac_cv_lib_socket_ntohl" >&6; } if test "x$ac_cv_lib_socket_ntohl" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSOCKET 1 _ACEOF LIBS="-lsocket $LIBS" fi fi done for ac_func in htons do : ac_fn_c_check_func "$LINENO" "htons" "ac_cv_func_htons" if test "x$ac_cv_func_htons" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_HTONS 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for htons in -lsocket" >&5 $as_echo_n "checking for htons in -lsocket... " >&6; } if ${ac_cv_lib_socket_htons+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char htons (); int main () { return htons (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_htons=yes else ac_cv_lib_socket_htons=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_htons" >&5 $as_echo "$ac_cv_lib_socket_htons" >&6; } if test "x$ac_cv_lib_socket_htons" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSOCKET 1 _ACEOF LIBS="-lsocket $LIBS" fi fi done for ac_func in htonl do : ac_fn_c_check_func "$LINENO" "htonl" "ac_cv_func_htonl" if test "x$ac_cv_func_htonl" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_HTONL 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for htonl in -lsocket" >&5 $as_echo_n "checking for htonl in -lsocket... " >&6; } if ${ac_cv_lib_socket_htonl+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char htonl (); int main () { return htonl (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_htonl=yes else ac_cv_lib_socket_htonl=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_htonl" >&5 $as_echo "$ac_cv_lib_socket_htonl" >&6; } if test "x$ac_cv_lib_socket_htonl" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSOCKET 1 _ACEOF LIBS="-lsocket $LIBS" fi fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 $as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } if ${ac_cv_sys_largefile_source+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=no; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE_SOURCE 1 #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=1; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_cv_sys_largefile_source=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 $as_echo "$ac_cv_sys_largefile_source" >&6; } case $ac_cv_sys_largefile_source in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source _ACEOF ;; esac rm -rf conftest* # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # in glibc 2.1.3, but that breaks too many other things. # If you want fseeko and ftello with glibc, upgrade to a fixed glibc. if test $ac_cv_sys_largefile_source != unknown; then $as_echo "#define HAVE_FSEEKO 1" >>confdefs.h fi # # 11. System services # # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi # Done. # Config subdirs and files (except main Makefile, which we defer) # if test -d release-notes; then ac_config_files="$ac_config_files release-notes/LICENSE.sh" fi ac_config_files="$ac_config_files documentation/Makefile" ac_config_files="$ac_config_files documentation/man/Makefile" if test -d "documentation/userguide"; then ac_config_files="$ac_config_files documentation/userguide/Makefile" fi ac_config_files="$ac_config_files src/Makefile" ac_config_files="$ac_config_files testsuite/Makefile" ac_config_files="$ac_config_files profmark/Makefile" ac_config_files="$ac_config_files src/impl_${impl_choice}/Makefile" ac_config_headers="$ac_config_headers src/p7_config.h" ac_config_headers="$ac_config_headers easel/esl_config.h" ac_config_headers="$ac_config_headers libdivsufsort/divsufsort.h" ac_config_files="$ac_config_files easel/miniapps/Makefile" ac_config_files="$ac_config_files easel/testsuite/Makefile" if test -d "easel/documentation"; then ac_config_files="$ac_config_files easel/documentation/Makefile" fi ac_config_files="$ac_config_files easel/Makefile" ac_config_files="$ac_config_files libdivsufsort/Makefile" # the following incantation establishes a symlink of # src/impl_{whatever} to src/impl in the *build* directory. # Testsuite sqc tests rely on it. ac_config_links="$ac_config_links src/impl:${ac_top_build_prefix}src/impl_${impl_choice}" ################################################################ # 13. AC_OUTPUT ################################################################ # remember that sneaky if statement that wraps the source # configuration? well, it ends here. #else # AC_MSG_NOTICE([This is a precompiled binary distribution - using abbreviated config]) #fi ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by HMMER $as_me 3.1b2, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_links="$ac_config_links" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration links: $config_links Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ HMMER config.status 3.1b2 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "release-notes/LICENSE.sh") CONFIG_FILES="$CONFIG_FILES release-notes/LICENSE.sh" ;; "documentation/Makefile") CONFIG_FILES="$CONFIG_FILES documentation/Makefile" ;; "documentation/man/Makefile") CONFIG_FILES="$CONFIG_FILES documentation/man/Makefile" ;; "documentation/userguide/Makefile") CONFIG_FILES="$CONFIG_FILES documentation/userguide/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; "profmark/Makefile") CONFIG_FILES="$CONFIG_FILES profmark/Makefile" ;; "src/impl_${impl_choice}/Makefile") CONFIG_FILES="$CONFIG_FILES src/impl_${impl_choice}/Makefile" ;; "src/p7_config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/p7_config.h" ;; "easel/esl_config.h") CONFIG_HEADERS="$CONFIG_HEADERS easel/esl_config.h" ;; "libdivsufsort/divsufsort.h") CONFIG_HEADERS="$CONFIG_HEADERS libdivsufsort/divsufsort.h" ;; "easel/miniapps/Makefile") CONFIG_FILES="$CONFIG_FILES easel/miniapps/Makefile" ;; "easel/testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES easel/testsuite/Makefile" ;; "easel/documentation/Makefile") CONFIG_FILES="$CONFIG_FILES easel/documentation/Makefile" ;; "easel/Makefile") CONFIG_FILES="$CONFIG_FILES easel/Makefile" ;; "libdivsufsort/Makefile") CONFIG_FILES="$CONFIG_FILES libdivsufsort/Makefile" ;; "src/impl") CONFIG_LINKS="$CONFIG_LINKS src/impl:${ac_top_build_prefix}src/impl_${impl_choice}" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :L) # # CONFIG_LINK # if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then : else # Prefer the file from the source tree if names are identical. if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then ac_source=$srcdir/$ac_source fi { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 $as_echo "$as_me: linking $ac_source to $ac_file" >&6;} if test ! -r "$ac_source"; then as_fn_error $? "$ac_source: file not found" "$LINENO" 5 fi rm -f "$ac_file" # Try a relative symlink, then a hard link, then a copy. case $ac_source in [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; *) ac_rel_source=$ac_top_build_prefix$ac_source ;; esac ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || ln "$ac_source" "$ac_file" 2>/dev/null || cp -p "$ac_source" "$ac_file" || as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo " HMMER configuration: compiler: ${CC} ${CFLAGS} ${SIMD_CFLAGS} ${PTHREAD_CFLAGS} ${PIC_FLAGS} host: $host linker: ${LDFLAGS} libraries: ${LIBS} ${LIBGSL} ${PTHREAD_LIBS} DP implementation: ${impl_choice} " if test "$impl_choice" = "dummy"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: We will compile the \"dummy\", a portable ANSI C reference implementation." >&5 $as_echo "$as_me: WARNING: We will compile the \"dummy\", a portable ANSI C reference implementation." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: It is slow, about 100x slower than real H3, and is NOT intended for production use!" >&5 $as_echo "$as_me: WARNING: It is slow, about 100x slower than real H3, and is NOT intended for production use!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: It only intended to show the basics of how HMMER3 works, portably." >&5 $as_echo "$as_me: WARNING: It only intended to show the basics of how HMMER3 works, portably." >&2;} fi ################################################################# # HMMER - Biological sequence analysis with profile HMMs # Version 3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # HMMER is distributed under the terms of the GNU General Public License # (GPLv3). See the LICENSE file for details. # # SVN $Id: configure.ac 4766 2015-02-22 18:22:01Z wheelert $ # SVN $URL$ # xref autoconf macro archive: //www.gnu.org/software/ac-archive/ ################################################################# hmmer-3.1b2/INSTALL0000664361611702660230000000426412473612611013325 0ustar wheelerteddyBrief installation instructions HMMER 3.1b2; February 2015 ------------------------------------------------------------- These are quick installation instructions. For complete documentation, including customization and troubleshooting, please see the Installation chapter in the HMMER User's Guide (Userguide.pdf). ------------------------------------------------------------- Starting from a distribution "with binaries", such as hmmer-3.1b2-linux-intel-x86_64.tar.gz: uncompress: uncompress hmmer-3.1b2-xyz.tar.gz unpack: tar xf hmmer-3.1b2-xyz.tar move into new directory: cd hmmer-3.1b2-xyz The pre-compiled binaries are found in the directory ./binaries. You may copy these into a directory of your choosing, or simply add this directory to your $PATH variable. ------------------------------------------------------------- Starting from a source distribution, hmmer-3.1b2.tar.gz: uncompress: uncompress hmmer-3.1b2.tar.gz unpack: tar xf hmmer-3.1b2.tar move into new directory: cd hmmer-3.1b2 configure: ./configure build: make automated tests: make check automated install: make install ------------------------------------------------------------- HMMER is developed primarily on Linux and Mac OS/X systems. It is tested on a variety of UNIX and UNIX-like operating systems. It is written in ANSI C99 conforming to POSIX standards. It is meant to be portable to any POSIX-compliant system with an ANSI C99 compiler, including all UNIX and Macintosh systems. A binary version is also available for Windows systems with Cygwin installed (Cygwin is optional POSIX compatibility software). ------------------------------------------------------------- Starting from a Subversion (SVN) working copy: If you have checked HMMER out from its Subversion repository, there's some additional stuff you need to do one-time-only in your new working directory: ln -s easel/aclocal.m4 aclocal.m4 autoconf (cd easel; autoconf) ------------------------------------------------------------- The HMMER development team HHMI Janelia Farm Research Campus http://hmmer.org/ hmmer-3.1b2/configure.ac0000664361611702660230000006304512473612603014565 0ustar wheelerteddy# Process this file with autoconf to produce the HMMER configure script. # # This is synchronized with Easel's configure script, so that HMMER # configures Easel in addition to itself. This saves having to do a # separate ./configure in Easel. That means that everything that # appears in Easel's configure script must also appear here. # # reminders to save re-reading autoconf manual for the n'th time: # output variables: # - are defined here as normal shell variables, e.g. FOO="my string" # - are made into output variables by calling AC_SUBST(FOO) # - any occurrence of @FOO@ in an output file is then substituted # I think this only happens in files we assign w/ AC_CONFIG_FILES; # that's the Makefile.in's. # # C preprocessor symbols: # - are defined here by calling AC_DEFINE(FOO) or AC_DEFINE(FOO, [42]) # - then #undef FOO in easel.h.in becomes #define FOO, #define FOO 42 # I think this only happens in header files that we assign # w/ AC_CONFIG_HEADERS -- which means, easel.h.in # # GNU recommends the following order: # 1. autoconf requirements # 2. AC_INIT # 3. info on the package # 4. checks for programs # 5. checks for libraries # 6. checks for header files # 7. checks for types # 8. checks for structures # 9. checks for compiler characteristics # 10. checks for library functions # 11. checks for system services # 12. AC_CONFIG_FILES # 13. AC_OUTPUT # Autoconf 2.61 has a bug in AC_FUNC_FSEEKO; don't use it. AC_PREREQ(2.63) AC_INIT(HMMER, 3.1b2, eddys@janelia.hhmi.org, hmmer) AC_MSG_NOTICE([Configuring HMMER for your system.]) # remember if the user is overriding CFLAGS if test x"$CFLAGS" = x; then sre_cflags_env_set=no fi ################################################################ # 3. Info on the package # # The four AC_INIT args set these output variables and preprocessor symbols: # PACKAGE_NAME e.g. "HMMER" # PACKAGE_VERSION e.g. "3.0" # PACKAGE_BUGREPORT e.g. "eddys@janelia.hhmi.org" # PACKAGE_TARNAME e.g. "hmmer" # From them, it derives one more: # PACKAGE_STRING , e.g. "HMMER 3.0" # We also define additional variables: # HMMER_DATE release date: e.g. "January 2007" # HMMER_COPYRIGHT one-line copyright string # HMMER_LICENSE one-line license string # HMMER_LICENSETAG which license to bundle from Licenses/ subdirectory. # HMMER_VERSION copy of version code, e.g. "3.0" # HMMER_URL URL home for HMMER. # And we have to define the relevant package variables for Easel as well. # # We avoid using AC_INIT's PACKAGE_ variables anywhere, because we want to be able # to use HMMER as a library inside other packages, with no name clashes. ################################################################ HMMER_DATE="February 2015" HMMER_COPYRIGHT="Copyright (C) 2015 Howard Hughes Medical Institute." HMMER_LICENSE="Freely distributed under the GNU General Public License (GPLv3)." HMMER_VERSION=$PACKAGE_VERSION HMMER_URL="http://hmmer.org/" HMMER_ESLDIR="easel" HMMER_SADIR="libdivsufsort" EASEL_DATE="February 2015" EASEL_COPYRIGHT="Copyright (C) 2015 Howard Hughes Medical Institute." EASEL_LICENSE="Freely distributed under the Janelia Farm Software License." EASEL_VERSION="h$PACKAGE_VERSION" EASEL_URL="http://bioeasel.org/" # Output variables (AC_OUTPUT replaces @var@ in input files, such as Makefiles) AC_SUBST(HMMER_DATE) AC_SUBST(HMMER_COPYRIGHT) AC_SUBST(HMMER_LICENSE) AC_SUBST(HMMER_VERSION) AC_SUBST(HMMER_URL) AC_SUBST(HMMER_ESLDIR) AC_SUBST(HMMER_SADIR) AC_SUBST(EASEL_DATE) AC_SUBST(EASEL_COPYRIGHT) AC_SUBST(EASEL_LICENSE) AC_SUBST(EASEL_VERSION) AC_SUBST(EASEL_URL) # Preprocessor symbols (replace #undefs in p7config.h) AC_DEFINE_UNQUOTED(HMMER_DATE, "$HMMER_DATE") AC_DEFINE_UNQUOTED(HMMER_COPYRIGHT, "$HMMER_COPYRIGHT") AC_DEFINE_UNQUOTED(HMMER_LICENSE, "$HMMER_LICENSE") AC_DEFINE_UNQUOTED(HMMER_VERSION, "$HMMER_VERSION") AC_DEFINE_UNQUOTED(HMMER_URL, "$HMMER_URL") AC_DEFINE_UNQUOTED(EASEL_DATE, "$EASEL_DATE") AC_DEFINE_UNQUOTED(EASEL_COPYRIGHT, "$EASEL_COPYRIGHT") AC_DEFINE_UNQUOTED(EASEL_LICENSE, "$EASEL_LICENSE") AC_DEFINE_UNQUOTED(EASEL_VERSION, "$EASEL_VERSION") AC_DEFINE(eslLIBRARY) # Figure out what host we're compiling on. # Three GNU scripts must be included in the distro: # install.sh, config.guess, config.sub # This sets four shell variables: # host example: i686-pc-linux-gnu # host_cpu example: i686 # host_vendor example: pc # host_os example: linux-gnu AC_CANONICAL_HOST # Check if we're a binary distribution. # Trigger is existence of binaries/, nonexistence of src/. # # For binary distro, we do minimal configuration, setting version information # and installation path names, making ./configure independent of having a working # C compiler. # # Implements a sneaky if statement that wraps most of the configure.ac M4 code. # #if ((! test -d binaries) && test -d src); then AC_MSG_NOTICE([Full HMMER source distribution - using full configuration]) ################################################################ # Process the ./configure command line ################################################################ # --enable-debugging - set basic debugging (level 0) # --enable-debugging=x - set debugging level to (1-3) # # At all levels, including 0, replaces CFLAGS w/ "-g -Wall" (so it assumes gcc). # Sets p7_DEBUGGING preprocessor symbol, which compiles in debugging support. # Also sets eslDEBUGLEVEL level, 0-3. # AC_ARG_ENABLE(debugging, [AS_HELP_STRING([--enable-debugging],[include debugging code]) AS_HELP_STRING([--enable-debugging=x],[also set diagnostics verbosity level to (1-3)])], enable_debugging=$enableval, enable_debugging=no) case $enable_debugging in yes) AC_DEFINE(eslDEBUGLEVEL, 0);; 1) AC_DEFINE(eslDEBUGLEVEL, 1);; 2) AC_DEFINE(eslDEBUGLEVEL, 2);; 3) AC_DEFINE(eslDEBUGLEVEL, 3);; no) AC_DEFINE(eslDEBUGLEVEL, 0);; *) AC_MSG_ERROR([Unknown argument to --enable-debugging: $enable_debugging]);; esac # --enable-gcov - compile for code coverage testing # # Replaces CC with "gcc" and CFLAGS with "-g -Wall -fprofile-arcs -ftest-coverage". # Running programs (notably the test suite) will then generate .gcda files, # which the gcov tool can read. # AC_ARG_ENABLE(gcov,[AS_HELP_STRING([--enable-gcov],[compile for code coverage testing])], ok=$enableval, ok=no) if test "$ok" = "yes"; then AC_MSG_NOTICE([Compiling with gcov instrumentation.]) CC="gcc" CFLAGS="-g -Wall -fprofile-arcs -ftest-coverage" sre_cflags_env_set=yes fi # --enable-gprof - compile for gcc code profiling # # Replaces CC with "gcc" and CFLAGS with "-O -g -pg" # Running programs generates a profile data file "gmon.out". # AC_ARG_ENABLE(gprof,[AS_HELP_STRING([--enable-gprof],[compile for gcc code profiing])], ok=$enableval, ok=no) if test "$ok" = "yes"; then AC_MSG_NOTICE([Compiling with gprof instrumentation.]) CC="gcc" CFLAGS="-O -g -pg" sre_cflags_env_set=yes fi # --enable-sse Enable the SSE implementation. # --enable-vmx Enable the Altivec/VMX implementation. # --enable-dummy Enable the portable implementation. # # These set $impl_choice to one of sse, vmx, dummy, or none. # AC_ARG_ENABLE(sse,[AS_HELP_STRING([--enable-sse],[enable SSE implementation])], enable_sse=$enableval, enable_sse=check) AC_ARG_ENABLE(vmx,[AS_HELP_STRING([--enable-vmx],[enable Altivec/VMX implementation])], enable_vmx=$enableval, enable_vmx=check) AC_ARG_ENABLE(dummy,[AS_HELP_STRING([--enable-dummy],[enable portable implementation])], enable_dummy=$enableval, enable_dummy=check) if test "$enable_sse" = "yes"; then if test "$enable_vmx" = "yes" || test "$enable_dummy" = "yes"; then AC_MSG_ERROR([Select only one implementation of sse, vmx, or dummy]) fi impl_choice=sse elif test "$enable_vmx" = "yes"; then if test "$enable_sse" = "yes" || test "$enable_dummy" = "yes"; then AC_MSG_ERROR([Select only one implementation of sse, vmx, or dummy]) fi impl_choice=vmx elif test "$enable_dummy" = "yes"; then if test "$enable_sse" = "yes" || test "$enable_vmx" = "yes"; then AC_MSG_ERROR([Select only one implementation of sse, vmx, or dummy]) fi impl_choice=dummy else impl_choice=none fi # --enable-mpi Enable MPI parallelization AC_ARG_ENABLE(mpi,[AS_HELP_STRING([--enable-mpi],[enable MPI parallelization])], enable_mpi=$enableval, enable_mpi=no) # --enable-xlc-arch Set the code generation for a particular architecture # # The xlc compiler on AIX seems to need the -qarch flag to be set for a processor # that is VMX enabled. Otherwise a warning is issued that states the -qenablevmx # and -qaltivec flags are ignored. AX_COMPILER_VENDOR if test "${ax_cv_c_compiler_vendor}" = "ibm"; then AC_ARG_WITH(xlc-arch, [AC_HELP_STRING([--with-xlc-arch=], [specify architecture for xlc -qarch])], XLC_ARCH=$withval, XLC_ARCH=no) fi # --enable-threads Enable POSIX multithreading # # Uses ACX_PTHREAD macro from the GNU macro archive. # Back to my code to finish enabling pthreads... # Define these preprocessor variables: # HMMER_THREADS # HAVE_PTHREAD_SETCONCURRENCY # HAVE_PTHREAD_ATTR_SETSCOPE # AC_ARG_ENABLE([threads], [AS_HELP_STRING([--enable-threads], [enable POSIX multithreading support (default is check)])], [], [enable_threads=check]) case $enable_threads in yes) check_threads=yes ;; no) check_threads=no ;; check) check_threads=yes ;; *) check_threads=no AC_MSG_NOTICE([Ignoring unknown argument to --enable-threads: $enable_threads]) ;; esac AS_IF([test "x$check_threads" != xno], [ACX_PTHREAD([AC_DEFINE(HMMER_THREADS) AC_DEFINE(HAVE_PTHREAD) AC_SUBST(PTHREAD_LIBS) AC_SUBST(PTHREAD_CFLAGS)], [if test "x$enable_threads" != xcheck; then AC_MSG_FAILURE([POSIX multithreading failed]) fi])]) #AC_ARG_ENABLE(threads, #[ --enable-threads enable POSIX multithreading support], #[case $enable_threads in # yes) AC_MSG_NOTICE([enabled POSIX multithreading support]) # AC_CHECK_FUNCS(pthread_setconcurrency) # AC_CHECK_FUNCS(pthread_attr_setscope) # ACX_PTHREAD(AC_DEFINE(HMMER_THREADS)) # ;; # no) AC_MSG_NOTICE([POSIX multithreading support disabled]) # ;; # *) echo "Ignoring unknown argument to --disable-threads: $enable_threads" # ;; #esac]) # --with-gsl - enable hooks into the GSL (GNU Scientific Library) # # The (action-if-given) is blank: using --with-gsl sets $with_gsl to 'yes', # and --without-gsl sets $with_gsl to 'no'. If neither is given, # $with_gsl is set to 'check', and we'll try to use GSL anyway if we # can find it. # # We interpret the $with_gsl setting later, in the "checks for libraries" section. AC_ARG_WITH([gsl], [AS_HELP_STRING([--with-gsl], [use the GSL, GNU Scientific Library (default is no)])], [if test "x$withval" != xno ; then AC_MSG_NOTICE([Enabling hooks into the GNU Scientific Library (GSL)]) fi ], [with_gsl=no]) ################################################################ # Select the vector implementation we'll use # (if user didn't already configure one) # if test "$impl_choice" = "none"; then case $host in ia64-*-*) impl_choice=sse;; i?86-*-*) impl_choice=sse;; x86*-*-*) impl_choice=sse;; powerpc*-*-*) impl_choice=vmx;; *) impl_choice=dummy;; esac fi if test "$impl_choice" = "dummy"; then AC_MSG_WARN([It appears your platform will not fully support H3.]) AC_MSG_WARN([We'll use the 'dummy' implementation, a slow reference implementation.]) fi if test "$impl_choice" = "sse" && test "$enable_sse" = "no"; then AC_MSG_WARN([You disabled the SSE implementation: I'll use the dummy impl instead.]) impl_choice=dummy fi if test "$impl_choice" = "vmx" && test "$enable_vmx" = "no"; then AC_MSG_WARN([You disabled the VMX implementation: I'll use the dummy impl instead.]) impl_choice=vmx fi if test "$impl_choice" = "dummy" && test "$enable_dummy" = "no"; then AC_MSG_ERROR([No vector impl configured; and you disabled the dummy implementation.]) fi ################################################################ # Checks for programs, including choice of compiler ${CC} and ${CFLAGS}. # AC_PROG_CC AC_PROG_INSTALL # MPI : set @CC@ to mpicc, sets @MPILIBS@, defines HAVE_MPI. if test "$enable_mpi" = "yes"; then ACX_MPI([AC_DEFINE(HAVE_MPI) AC_SUBST([MPI_UTESTS], ["mpi_utest"]) AC_SUBST([MPI_BENCHMARKS], ["mpi_benchmark"])], AC_MSG_ERROR([MPI library not found for --enable-mpi])) CC=$MPICC fi AC_PROG_CPP AX_COMPILER_VENDOR # AC_PROG_CC_STDC wants to append -c99 to icc; icc doesn't like this. if test "$ax_cv_c_compiler_vendor" != "intel"; then AC_PROG_CC_STDC fi AC_PROG_RANLIB AC_PATH_PROG([AR], [ar], [:], [$PATH:/usr/ccs/bin:/usr/xpg4/bin]) CHECK_GNU_MAKE # Select our optimization level in CFLAGS. if test "$enable_debugging" != "no"; then AC_DEFINE(p7_DEBUGGING, 1) if test "$GCC" = "yes" && test "$sre_cflags_env_set" = "no"; then CFLAGS="-g -Wall" fi else sre_save_ac_test_cflags="$ac_test_CFLAGS" if test "$sre_cflags_env_set" = "no"; then ac_test_CFLAGS="" fi AX_CC_MAXOPT ac_test_CFLAGS="$sre_save_ac_test_cflags" # That was a workaround. AX_CC_MAXOPT apparently thinks that # $ac_test_CFLAGS only gets set if ${CFLAGS} was set by the # user (in the environment), but that's not so; it gets set # by AC_PROG_CC. Instead of rewriting AX_CC_MAXOPT, we fool # it. fi # Figure out how to generate PIC code for shared libraries # This sets @PIC_FLAGS@ output variable for Easel. ESL_PIC_FLAGS # If we're using SSE, figure out our @SIMD_CFLAGS@ if test "$impl_choice" = "sse" && test "x$SIMD_CFLAGS" = x; then case $ax_cv_c_compiler_vendor in gnu) AX_CHECK_COMPILER_FLAGS(-msse2,[SIMD_CFLAGS="-msse2"],[impl_choice=dummy]);; intel) ;; *) ;; esac fi if test "$enable_sse" = "yes" && test "$impl_choice" = dummy; then AC_MSG_ERROR([SSE instructions are apparently not available; --enable-sse failed]) fi # If we're using VMX/Altivec, figure out our @SIMD_CFLAGS@ if test "$impl_choice" = "vmx"; then if test "x$SIMD_CFLAGS" = x; then if test "$GCC" = "yes"; then # -DFAKE__VEC__ is a workaround because gcc-3.3 does not # #define __VEC__ with -maltivec. AX_CHECK_COMPILER_FLAGS(-faltivec, [SIMD_CFLAGS="-faltivec"], [AX_CHECK_COMPILER_FLAGS(-maltivec -mabi=altivec, [SIMD_CFLAGS="-maltivec -mabi=altivec"], # [SIMD_CFLAGS="-maltivec -mabi=altivec -DFAKE__VEC__"], [AX_CHECK_COMPILER_FLAGS(-fvec, [SIMD_CFLAGS="-fvec"], [AC_MSG_ERROR([Need a version of gcc with -maltivec])])])]) elif test "${ax_cv_c_compiler_vendor}" = "ibm"; then SIMD_CFLAGS="" # if debugging is enabled and the xlc_arch flag is set, we need to # set the qarch flag here. if debugging is NOT enabled, the arch # flag is set in AX_CC_MAXOPT. if test "x$XLC_ARCH" != x; then if test "x$enable_debugging" = xyes; then AX_CHECK_COMPILER_FLAGS(-qarch=$XLC_ARCH, [SIMD_CFLAGS="-qarch=$XLC_ARCH"],[]) fi fi AX_CHECK_COMPILER_FLAGS(-qenablevmx, [SIMD_CFLAGS="$SIMD_CFLAGS -qenablevmx"],[]) AX_CHECK_COMPILER_FLAGS(-qaltivec, [SIMD_CFLAGS="$SIMD_CFLAGS -qaltivec"],[]) else AX_CHECK_COMPILER_FLAGS(-faltivec, [SIMD_CFLAGS="-faltivec"],[]) fi fi fi # check if the SSE2 implementation support cast functions if test "$impl_choice" = "sse"; then AC_MSG_CHECKING([compiler support for sse2 cast functions]) ssecast=no sre_save_cflags="$CFLAGS" CFLAGS="$CFLAGS $SIMD_CFLAGS" AC_LANG(C) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[__m128 a; __m128i b; b = _mm_castps_si128(a); a = _mm_castsi128_ps(b);]])], [AC_DEFINE([HAVE_SSE2_CAST]) ssecast=yes]) AC_MSG_RESULT([$ssecast]) CFLAGS="$sre_save_cflags" fi # Verify that we can actually build the chosen implementation; else # default to dummy. # (For example, Athlon reports as i686-*, so will get assigned to # sse impl, but does not support SSE2 instructions.) # The test here is cribbed from the Apache configure.ac file. # if test "$impl_choice" = "sse"; then AC_MSG_CHECKING([whether SSE2 is supported]) sre_save_cflags="$CFLAGS" CFLAGS="$CFLAGS $SIMD_CFLAGS" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[__m128i* one=(__m128i*)_mm_malloc(4, 16); __m128i* two=(__m128i*)_mm_malloc(4, 16); __m128i xmm1 = _mm_load_si128(one); __m128i xmm2 = _mm_load_si128(two); __m128i xmm3 = _mm_or_si128(xmm1, xmm2); _mm_store_si128(one, xmm3); _mm_free(one); _mm_free(two); ]])], [ AC_MSG_RESULT([yes])], [ AC_MSG_RESULT([no; reverting to dummy implementation]) impl_choice=dummy ] ) CFLAGS="$sre_save_cflags" fi if test "$impl_choice" = "vmx"; then AC_MSG_CHECKING([whether Altivec/VMX is supported]) sre_save_cflags="$CFLAGS" CFLAGS="$CFLAGS $SIMD_CFLAGS" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[vector unsigned char zerov; vector unsigned char onev; zerov = vec_splat_u8(0); onev = vec_splat_u8(1); onev = vec_adds(onev, zerov); ]])], [ AC_MSG_RESULT([yes])], [ AC_MSG_RESULT([no; reverting to dummy implementation]) impl_choice=dummy if test "${ax_cv_c_compiler_vendor}" = "ibm"; then echo "******************************************************" echo "* You seem to have the IBM C compiler. If your *" echo "* processor supports vector instructions it is *" echo "* possible specifying an architecture would enable *" echo "* vector support, i.e. *" echo "* *" echo "* --with-xlc-arch=XXX *" echo "* *" echo "* where XXX is pwr6, auto or whatever kind of CPU *" echo "* you have. *" echo "******************************************************" fi ] ) CFLAGS="$sre_save_cflags" fi # For x86 processors check if the flush to zero macro is available # in order to avoid the performance penalty dealing with sub-normal # values in the floating point calculations. if test "$impl_choice" = "sse"; then AC_MSG_CHECKING([whether _MM_SET_FLUSH_ZERO_MODE is supported]) sre_save_cflags="$CFLAGS" CFLAGS="$CFLAGS $SIMD_CFLAGS" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[_MM_SET_FLUSH_ZERO_MODE (_MM_FLUSH_ZERO_ON); ]])], [ AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_FLUSH_ZERO_MODE])], [ AC_MSG_RESULT([no])] ) CFLAGS="$sre_save_cflags" fi # Now, we can enable the appropriate optimized implementation. case "$impl_choice" in sse) AC_MSG_NOTICE([Activating Intel/AMD SSE optimized DP implementation]) AC_DEFINE([HAVE_SSE2]) AC_DEFINE([p7_IMPL_SSE]) AC_SUBST([HMMERIMPLLIB], ["impl_sse/libhmmerimpl.a"]) IMPL_CHOICE="sse" ;; vmx) AC_MSG_NOTICE([Activating Altivec/VMX optimized DP implementation]) AC_DEFINE([HAVE_VMX]) AC_DEFINE([p7_IMPL_VMX]) AC_SUBST([HMMERIMPLLIB], ["impl_vmx/libhmmerimpl.a"]) IMPL_CHOICE="vmx" ;; *) AC_MSG_NOTICE([Activating "dummy" implementation]) AC_DEFINE([p7_IMPL_DUMMY]) AC_SUBST([HMMERIMPLLIB], ["impl_dummy/libhmmerimpl.a"]) IMPL_CHOICE="dummy" ;; esac AC_SUBST(IMPL_CHOICE) AC_SUBST(SIMD_CFLAGS) # Check if the linker supports library groups for recursive libraries AS_IF([test "x$impl_choice" != xno], [AC_MSG_CHECKING([compiler support --start-group]) LDFLAGS_save=$LDFLAGS LDFLAGS="-Wl,--start-group -Wl,--end-group $LDFLAGS" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AC_MSG_RESULT([yes]) AC_SUBST([GROUPHMMERLIBS], ["-Wl,--start-group -lhmmer -lhmmerimpl -Wl,--end-group"])], [AC_MSG_RESULT([no]) AC_SUBST([GROUPHMMERLIBS], ["-lhmmer -lhmmerimpl"])]) LDFLAGS=$LDFLAGS_save], [AC_SUBST([GROUPHMMERLIBS], ["-lhmmer"])]) # Define HAVE_GZIP if gzip is in $PATH (or if HAVE_GZIP is already set) AC_PATH_PROG(HAVE_GZIP, "gzip", "no") if test "${HAVE_GZIP}" = "no"; then AC_MSG_WARN([gzip not found]) else AC_DEFINE(HAVE_GZIP) fi # 5. Checks for libraries # LIBGSL= AS_IF([test "x$with_gsl" != xno], [AC_CHECK_LIB([gsl], [gsl_expm1], [AC_SUBST([LIBGSL], ["-lgsl -lgslcblas"]) AC_DEFINE([HAVE_LIBGSL], [1], [Define if you have libgsl]) ], [if test "x$with_gsl" != xcheck; then AC_MSG_FAILURE( [--with-gsl was given, but GSL library was not found]) fi ], [-lgslcblas] )]) # Checks for headers # # Defines HAVE_SYS_TYPES_H, HAVE_STDINT_H, etc. AC_CHECK_HEADERS([ \ endian.h\ inttypes.h\ stdint.h\ unistd.h\ sys/types.h\ netinet/in.h ]) # Check for sysctl.h separately. On OpenBSD, it requires # and autoconf needs special logic to deal w. this as # follows. AC_CHECK_HEADERS([sys/param.h]) AC_CHECK_HEADERS([sys/sysctl.h], [], [], [[#ifdef HAVE_SYS_PARAM_H #include #endif ]]) # altivec.h requires the simd cflags # For reasons I don't understand, this needs to come after any other CHECK_HEADERS(). if test "$impl_choice" = "vmx"; then sre_save_CFLAGS="$CFLAGS" sre_save_CPPFLAGS="$CPPFLAGS" CFLAGS="$CFLAGS $SIMD_CFLAGS" CPPFLAGS="$CPPFLAGS $SIMD_CFLAGS" AC_CHECK_HEADERS([altivec.h]) CFLAGS="$sre_save_CFLAGS" CPPFLAGS="$sre_save_CPPFLAGS" fi # Checks for types # AC_C_BIGENDIAN AC_TYPE_UINT8_T AC_TYPE_UINT16_T AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_TYPE_OFF_T # Checks for functions, defining HAVE_FOO when foo is found # AC_CHECK_FUNCS(mkstemp) AC_CHECK_FUNCS(popen) AC_CHECK_FUNCS(strcasecmp) AC_CHECK_FUNCS(times) AC_CHECK_FUNCS(getpid) AC_CHECK_FUNCS(sysctl) AC_CHECK_FUNCS(sysconf) AC_CHECK_FUNCS(getcwd) AC_CHECK_FUNCS(stat) AC_CHECK_FUNCS(fstat) AC_CHECK_FUNCS(ntohs, , AC_CHECK_LIB(socket, ntohs)) AC_CHECK_FUNCS(ntohl, , AC_CHECK_LIB(socket, ntohl)) AC_CHECK_FUNCS(htons, , AC_CHECK_LIB(socket, htons)) AC_CHECK_FUNCS(htonl, , AC_CHECK_LIB(socket, htonl)) AC_FUNC_FSEEKO # # 11. System services # AC_SYS_LARGEFILE # Done. # Config subdirs and files (except main Makefile, which we defer) # if test -d release-notes; then AC_CONFIG_FILES(release-notes/LICENSE.sh) fi AC_CONFIG_FILES([documentation/Makefile]) AC_CONFIG_FILES([documentation/man/Makefile]) if test -d "documentation/userguide"; then AC_CONFIG_FILES([documentation/userguide/Makefile]) fi AC_CONFIG_FILES([src/Makefile]) AC_CONFIG_FILES([testsuite/Makefile]) AC_CONFIG_FILES([profmark/Makefile]) AC_CONFIG_FILES([src/impl_${impl_choice}/Makefile]) AC_CONFIG_HEADERS([src/p7_config.h]) AC_CONFIG_HEADERS([easel/esl_config.h]) AC_CONFIG_HEADERS([libdivsufsort/divsufsort.h]) AC_CONFIG_FILES([easel/miniapps/Makefile]) AC_CONFIG_FILES([easel/testsuite/Makefile]) if test -d "easel/documentation"; then AC_CONFIG_FILES([easel/documentation/Makefile]) fi AC_CONFIG_FILES([easel/Makefile]) AC_CONFIG_FILES([libdivsufsort/Makefile]) # the following incantation establishes a symlink of # src/impl_{whatever} to src/impl in the *build* directory. # Testsuite sqc tests rely on it. AC_CONFIG_LINKS([src/impl:${ac_top_build_prefix}src/impl_${impl_choice}]) ################################################################ # 13. AC_OUTPUT ################################################################ # remember that sneaky if statement that wraps the source # configuration? well, it ends here. #else # AC_MSG_NOTICE([This is a precompiled binary distribution - using abbreviated config]) #fi AC_CONFIG_FILES([Makefile]) AC_OUTPUT echo " HMMER configuration: compiler: ${CC} ${CFLAGS} ${SIMD_CFLAGS} ${PTHREAD_CFLAGS} ${PIC_FLAGS} host: $host linker: ${LDFLAGS} libraries: ${LIBS} ${LIBGSL} ${PTHREAD_LIBS} DP implementation: ${impl_choice} " if test "$impl_choice" = "dummy"; then AC_MSG_WARN([We will compile the "dummy", a portable ANSI C reference implementation.]) AC_MSG_WARN([It is slow, about 100x slower than real H3, and is NOT intended for production use!]) AC_MSG_WARN([It only intended to show the basics of how HMMER3 works, portably.]) fi ################################################################# # HMMER - Biological sequence analysis with profile HMMs # Version 3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # HMMER is distributed under the terms of the GNU General Public License # (GPLv3). See the LICENSE file for details. # # SVN $Id: configure.ac 4766 2015-02-22 18:22:01Z wheelert $ # SVN $URL$ # xref autoconf macro archive: //www.gnu.org/software/ac-archive/ ################################################################# hmmer-3.1b2/release-notes0000664361611702660230000001013612473613151014760 0ustar wheelerteddyHMMER 3.1b2 release notes HMMER3.1 beta test, release 2 http://hmmer.org/ TJW, Sun Feb 22 07:59:45 2015 ________________________________________________________________ 3.1b2 includes the following large changes: -:- New heuristic for accelerating nhmmer roughly 10-fold. We have developed a new algorithm that accelerates DNA search in nhmmer. The acceleration can be tuned, such that greater speed will tend to decrease sensitivity. The default settings yield roughly 10-fold acceleration while retaining nearly complete sensitivity among hits with E-value < 1e-3 (with a modest loss in sensitivity among marginal hits with E > 1e-3) This algorithm requires that the sequence database first be preprocessed into a binary file format. The new tool makehmmerdb performs this task. -:- New method of deciding if a sequence is a fragment. If hmmbuild determines that a sequence is a fragment, all leading and trailing gap symbols (all gaps before the first residue and after the last residue) are treated as missing data symbols, and thus do not count as observed gaps. In H3.0 and H3.1b1, a sequence was called a fragment if its length was less than a specified fraction of the alignment length. In the case of alignments with many sequences, this often resulted in all sequences being labeled as fragments, which could lead to unexpected terminal match states when a small fraction of sequences contained a long terminal extension. Now, a sequence is labeled a fragment if its range in the alignment (the number of alignment columns between the first and last positions of the sequence) is not greater than a specified fraction of the full alignment length. This should improve HMMER's ability to model alignments with ragged ends. Other changes include: -:- The DNA search tool, nhmmer, depends on a value MAXL, which hmmbuild computes as an assertion of the maximum length at which HMMER expects to see an instance of the model. This value could previously become excessively long when building a model from an alignment with many long insertions. The MAXL value computed by hmmbuild for DNA alignments is now limited to 20*M, where M is the # of match states. -:- A new tool, called hmmlogo, that computes letter height and indel parameters that can be used to produce a profile HMM logo. This tool can be thought of as a command-line interface for the data underlying the Skylign logo server (skylign.org). Bugfixes: -:- #h100 hmmalign would segfault on a zero length input sequence. -:- #h101 hmmsearch would segfault when searching a DNA HMM against a protein db (on Linux only). -:- #h102 Marginal hits late in a target sequence database were subject to being filtered in an nhmmer search. This was due to a score filter that (a) was intended to accelerate search, but had essentially no impact on speed, and (b) was an overly aggressive filter. Removed the filter. -:- #h103 Error printing very small E-values. Closely related to #h98, but occuring in the main thread (#h98 fixed the same problem in worker threads). -:- #h104 HMMER would not compile on OpenBSD, because netinet/in.h was not included. This header file is included via arpa/inet.h on most other systems, but not on OpenBSD. -:- #h105 Errors encountered while running 'make clean' and 'make distclean' in binary builds. This was the result of the Makefile trying to remove the userguide folder and LICENSE.txt file, which are already removed in the release process. The Makefile now accounts for this possibility. -:- #h106 H3 failed to read some old H2 HMM files. This happened in the cases that (1) there was an empty DESC field in the file, or (2) the model was not normalized. Both cases have been resolved. -:- #h107 hmmsim only worked for Amino Acid models. It now works for nucleotide models, also. hmmer-3.1b2/Userguide.pdf0000664361611702660230000174425712475462226014750 0ustar wheelerteddy%PDF-1.5 %ÐÔÅØ 3 0 obj << /Length 392 /Filter /FlateDecode >> stream xÚU’MoÂ0 †ïý¹-‘Fˆ“&i·lBâ0è¶ÃÆ¡ŒVë´ÀÄ¿_º‰©‡Ø±_ûqêIg\ Sh@ÙÒIP5x}àçÅbº$#®üÚÛîŽH†{ï?JcÉ:›GÓ,:D€˜ûÀW iжuô±fȸû9b4Múù˪Q¬wVh½D“€@S)ù€©¢L)$%£ZKÏ2)۪ݕۼò½=œl³µÞË›¼ºôe€;õe³óæ¾k?ãUÈ+JclãíEÞ‘HüM8Ã-qÖÙêÖØª†sdALE¬þÈ„¢Ú±;•¦©ð`Åñ¸‹º¶m»Ý8Å­pÄr™:å Ê7’0l»¾l‘ °áÞžá‚xPñ1Î@]ÐHSઠF™/µ²y¨·¤þœs!À¾÷~FÀܹ+œ߯7šÑ{ame;ßÇý™ÄÿñóÆøÌc^÷f_Ür¸RgÂ%¶U»¯ms É6¯¯{ó Mºžt endstream endobj 10 0 obj << /Length 486 /Filter /FlateDecode >> stream xÚ¥SMs›0½ûWp3E Óc3‰ÓNÜñtè©éA12h‚aOþ}%V8IãžzZíÇÛ÷–ýR¬â;Ê‚çkºŠcÑ€ò ÞlhP”Á/tÓõ!KÐËF„#UÕ&Œh¶A OnìAÀ¤ áp»ïBxv‡Jÿ6Uµᾓ¥:ˆŒ¯z4ÊLFºpþ.¾I¥ f ü}È$-:å¨Uã¨: ©Ê׫B’ ÁBéMßV<‡Ôæƒ%´w—j4žÐ“ó»fÇ)´0rxFµðrèzµ´Þ}õzo…vÈÓ§fö'U^:©å¥ÐU!ugÔA.Ô Á9ç@ýÒî+^M _(þ2H#”^ºXBEÓ¼£õAu?õûÝîö‡‹d^ç5CP-½1t¤l^à~EÖ’']ÎÛ /CÛï?Á¹•ZÂðì§9Ý"‚ýÐ`ø-ôSÄàÝýÛýɹŸ‡K)ºsŠwĉk/Sù{À^ÅÙRú/£œge·†¿Ù’ä8ã™­>W­é?Çñù|Æ•žp7T±—oŒ}öÛ#ë 3»x>&bÑ2Lhn/ëùû~0¯ |Ï a)[3xþ§ÿ]PʶíG|i ]çXÝ«?Mþ! endstream endobj 13 0 obj << /Length 1584 /Filter /FlateDecode >> stream xÚí›IsÛ6†ïùº™š‰dbá‚^:Y'éŒÒÅjrhz€%XBÍ-Y×ýõ€"%Hrœ¥–¥m€ÈÞoô|úäü5‚€Ç‡p0½DpùdŒ¢Át>øÃ{‘gË*1üsúSÓ”ŒICÕÒŒ ¬‚áˆ`ì½Íªr}/Ÿ×³Šç™ê7Cqd¦i¤ƒ¨3Øãh€h0`L‚@·|“AàÝ G0н*×WªÆÿ{/çsýQÉèœg ÓnÉ…þ+¥Ùø^M“áEØGïo^0![ï=¢ p¤á«¹»çZ8(‹üªºQýiÉô'ýÀOxv-ú žò„–›½d{i>8‡ÊïÃ’VúµŠ2ÿèû01$ÞL&B‡ì0Â;\ŽÞNŸEÂgT ‹Áš_íà‡ðDvƒlÜ#j²/™à‹LÃ[ä4YÃ+y¾ú IN:Yî¾d›Bœ ß3`3¦ÔÕ(.Ϻ”Ç@y«èÄyû…àÿ.œEÅ“ÄD\¬Ü×&r9OpçÈ a<1Í­ç§—y½Ó’ð(±®…Î#pËhYÐ5ˆ5jh#hQÑ$¡«è9ÇB=äŸåHQÜŸ¼_k>S2smm¾3rûI©dËÓѺœ¡ã“ÖlL"r­‹[Q±Ôf Ÿj^²´É•¤– ¯ðÍGxR'¯–*»c&)¤òÈ”Nš1Kø¿S¾"™ušä"mÒ>Ùy&•Éx›®TK£HsÖô¡²4{?8XØÁM~yû9ˆfI-­·\ƒ“ª¹Ê—É1XvYÝï«(áR©gÍc|s¹ÂgU®“+à brZ蟅Gû6EÉäÖY•»§/ yø€î'í{ ®Ï%3 £àa1p)û¾øÈi{‚#­ÿ« X8€Å„6S¸m1ÍJF+»[›íä$Q"ZY ß"·z0ìö®3U)™k…8žÍ™ÊBÿY[}t2d†ÂaôÑàÝhÐ. Ú»ôT`9SH:kÁÛé…ZX­ µ;…5šðEfö‡7P47¥AÄðûüð®'!°©ÒuŒIÏ´Â7§‹õÊ:ïû7µFiÉE[´äKx¦îú"¹ªzöû»Sù®nÏ ås–Èç¾óÙÔc õÉÅûVIa¢²’@ƒÿË 9Þù0ÄsNÛÚŸZg¹à«Ýµ9"àTä¾—Ñ¿çâ%wB :Yü·™ ì̵^ëÝó…yRÎ¥£«¹èþ>àGN_æ)µµ¦ys$$k´f¬ôƒ“¡mÞ“|ÎåÞï*ìQß6 ïS*˜ÝØêm3w *7P_ÑÁÑBÛkT2:0ðÌ1ƒ,7g<&æs5Â×ÜC9&E®ðcª¼t~H¥©hôB(~Ú-V­oteYûÛ6–äk:Ë@ >ll€ 1Šà`„Ð8ô±=X.o=y5}ò+rà+ endstream endobj 17 0 obj << /Length 1187 /Filter /FlateDecode >> stream xÚíšMs£8†ïù>âƒ$$@§­ùH*³UÞÝJ\5‡™=(X±U ˆE0[ù÷+!a‡I˜|ØG'ì„ëéÖÛo7|Xœ¼;ƒá„ø$‚Ñdq=ñœLbøAOËÉWï§’-§3'^*òRH^sQøÓY OpüÜò¨ë^Ùà¡pú÷â÷wg!¼…yÆ-æ>3V ä-¦IàÑ«) ¼&£•Á.šºljóùZÿKT9­¥^z‚pä'YasÃ^\g©;ÅêŽ@qdN]¬™Y²¦ÕŠÙå×\­kÿÚþŠL”@ô|XÞRôÛ`¨Ðîx‡ûRä”÷p×_¿8(+Q³îLÉh•®mbÙ:è…GÌ1ÚEùjÇØ]”¶‘ÙE—"·øD½fvÕ¢äéð¦!o¼s1Øû¯  9~¶êÈk{×óùüôâ7è¶Ê¸“¡­r튕BEž•.jF;WŠ> pøŸ€ÿs±);ß‚fLITDÐ!~äŠÚX@¨d õrÁè’+ë*‘÷2_ÖË®H”¼´RÔÈͳmEYR¹6…£½^öÖ1±.h§¡Ê49+T&D <Ž{-”ÿ؈ÿœS $€f–Õ_WZ<6¨ÿZýÇê?ÍxNå?õ!_áé–´¬ß/­sn/j?e¼è|—èaÏÛ_Õ¼ìj¿dÿ6¬H»0d|U˜8˜üš©Û‚l£Ò'wySˆRr•j§ÏŒ<è{ûOL¦ª8ªâÉKÝ­©f-v´Ÿ¶Mí?[Æ*³ã¹r¸_ä¦'uOl¾\–,å×7›ª7ß(ï-VZKqäØcWw­êû¬\Ó«vH€Ñ›¡>Hï£(êJdÙ†Ø_•0öióY!nR+Ä?«h « –ÑšŸBìY\_t22¾ZëaBäøS ¦Øvh±!†ÄU‘§‚ÞµøC=Ö:Ï[§=`ñqàc²ãð͹=».í}ÙW†óù\û…ð¨ ckÿc?Š#gÿ÷‡|G@œýß'mgÿ_ù½Âm„ûªáÙr¤p§=kö#ÖÃ2¹”mgn£§5·Vˆð¢¨"'¿ûÎÎÈÉï¡i;ù=r7Ax*=7AèXÅn‚ðtl£RìôºÝ³,í³»ì˜?šüJO!Š_“ä1ÛÎlQé‡ÜAèjÀ“pžÎÚÌ¢YÓé˜2ÄW•6ÍÔ¨Œà##n®·GÐ#çzªåûΪz AŒ ¾Û!êw‰ŒDö^5ÚéoÞ™úµo‚íú$ìåT­„ ~m¸#`ZÌøQú¥Úµ˜/‰Üµ˜¤íZÌG>RÂYÎë±/_IšßÎɼ;7ôt&zÍ¥%ë^Ç:r÷:Ö!hÛÔþ(ò\»>9¶ÏÀöþ®ïËšÖ}|ªõzØÑ{¸gι”¼ËÜm‰ÚLõ… :*LxÅêlŠéÍv@Ê ÙÈ»ãã¢â¦/zäÃåkV§ë‘—+fgöœé®ÿö”õ'ž1Óþx!ñQÁGîqõa»YÂ>iúa 'Ê‚úa óVxNN'ÿM,«# endstream endobj 20 0 obj << /Length 1120 /Filter /FlateDecode >> stream xÚí›Ë’›8†÷ý^BU`$„Z&“îJRåÊÔÄ»d ¨mM¸ÁÌôÛ°ßhwb§µi.vóqøÏùÅáÕâæ·;ͨK‰Gf‹ûÔ q8 p f‹xöÑz_T"Ϥí¡o¹¶ƒ8ó§tšºì‚RhßþkñN]¼uÏs)ôg„.ÅX_†Uš&ù2o‡o_5ßw D3 Ç9¶ã¡µÿضx¦7Y»|3Ÿ¿ÐkE™ÇuÄõFÌ*¦×Jþµ%õV•ëågÛV-’øàÛôÊú?sˆNHŽ4(+èJwY}xÈòB ³C¬?9Ø…ýšË¨´ˆ-±V %¡}.ÚFÏŽü¨“^‹eUã˜ñ4oEóÞFÀÊK½!9+£•È–­°öÚ\qÑŽÿZs5XóÐŽY2‘Éêñ1ÿ̤’ö€óp ŒöNšÑÞKÓ6Ú{NäáòÛÿŠFý|`µ‚×_††ó“9tEÉ¥Hr¸˜îå85¶`%Ä!l’ÒAT¿#£æ€¢«£IÛL¸$ »5‚É„çDn2ái›Lxvä#z­œ#]ˆ6ŽAre2²ˆHõŽtjã^ÂŒô&cC&ŽÍ¹ßKÐ&F|/à=òƒâõ÷<«Ê›¸òS²BUîMP!DM"þÐè¤ÍÀDq1 û maFxŸÎ&¸D~J‚¾¶G¹ûÆM‡ÜØ£ Ò6öh:äÄØ£óÄî »oY$‚à/…ÿ3¼çãÈé7Þh#\³:BÇØ›:8¡ÕLŠtÀÛ Ð%ïy›HÅ-Zß"7·o,dÕÖ º™w+Þ»8ÖqÅyºëw—àߦîQgç4Ng:äÆé\ö\H•Ž–ñ¼–ûòL±¡ùMzz Ðù6 ŸÆp]cöŸ5eæ²Þ¯¥ši¸TÓ3qÓk‚o:ä0M™­U³Ûó2Yv»ª•JÇF¿n,…àôXºUÕ½¥´°¡ªh˜hckΤäCçNoük+¬¬Œ[è]$x:¤7¨5(¶¯øè[-åUWËßÊJ¤[÷ÞœW«¼±Ë¾®ŽÄk®ëÚår£Ù}2Ä¡)4ƱõŽta7j”ò¬bÉß04Dû«bÕèwŠ„,fo^ ’uš²W…š¯S¾ODCjÈ{øºu ñÕ‘F퀦{äÆ^¶yÞuväcÔûo}Q ®òäÈ.QõÉúUýäá°=á©Ù›æü q™–ƒÉ#T#‡¹(ðfŽ\/ ùú£›ÛÅÍÿ(|• endstream endobj 23 0 obj << /Length 1000 /Filter /FlateDecode >> stream xÚí›Ër›0†÷y –°€è‚Z¦M:Mgr™Ø3]4]`,ÇL1P.ÉÛW ˆƒM.dbœ­Y²Íç£óë×1_¦GÇßÖ˜ÅähÓ…³\âj `ªMçÚ/ý”g~j˜èA’qd˜”Ý2LÞÿ`3¶«·þHÆ îÚÆïé h&„#DÒ¾ªg²kó]ò9¢®þ5Žò4à º“ WEž¹ˆˆbø6†qòúœÿ-xä7W~\ç–¦ï- à”f¹l8Ïyj@ {å'ˆW¡ab ? ÒÆ OÊ{¶ž?´M—)Ï–q8ƒœps;Cä¼Ñyä‡EViÍ&ä¢CœTNÿ8:ñ}>š²õ;/ê •å/ƺØ> D´?¢ë4.SI“zÄëY.éþY™qB¯Ì2Ûù&“ ǶíCarÃŽÿ DôËOwË<+„¹ý±-&¿Í®­f—ÅjV†³é§cÂÞ2½d¦‰ÓR¶V+ͧp¾JõÎÌ*²¼°hò•³V‚wÐh5˜/›Äü@c¦\ÐÛA3P‚ÖŸ<²þ&BƒvþÊû׫Oç³zÈãÝǵˆh²¯)¤™€^á\^zõªäââì¦îDžøAE.½— s/÷f^Æ1^ëõ"W­·ÉZÙö¡+„¬ÂÓ´‰åÖæ4¹â$ Dh2•]gäAíG I[íG ‡ÜQ’·SЯ‘¼¨Ò»µÃ®å`²¡v÷R)ÏO/OŽo.Oä…Щ:Gñz¹çÝyAÔìiyCÚâ¶VEBén˜ )hXA%hC„!R‚¶oÚJÐö‡¼ZÔ—Û(qúBµ;®Ùsÿ`d…†ûÅÚ3Eâ±ÅWOxñœ‡f–p?(m·¿®Þñ œUè¹]Ó÷PÀlM<±^®$s$\t}(ƒŸq+ÿ³GæÊ½'Éí æ­'°&÷YÎWbÅIÙ©Bk_FD=ÂÕIIUßψŸˆÌleý% ¶0EšÈí¢Lò®jdGgÓ£ÿ#‘6˜ endstream endobj 26 0 obj << /Length 717 /Filter /FlateDecode >> stream xÚí™Ïo›0Çïù+viPÿÂØ‡²®Ù4­—–Û¶ƒN@“Gk÷×Ï®¡* U›mÒ6ÁɃq>~ïë÷ž_§‹³F8EÔK×^‚¼‚àÄKsï£Ï‚â¯ÊJ!J˜¿ð›}-t|Nß{$†fØîy¨½}¶BøÁ¨!Á4"˜{!„c÷ì»ËË‹+7ênß|õ1=Ù!I¨a Ài áü—Þûßš÷è=„"Éu!E.÷Ži+3]6*†ÿÜ & ×¢TŽpÝä²ú 6bdÆûL¼üo8fÈ׺ɬm‹¦ª_:ƺèdc/³¦®¥ÊeÞ-D¨t¹ë•¥•_ReÝ•¨Ê2/è^Û°Õ6s›ÕÔv:ü1`A‹öViqã¦Þ¬];àÓAæÁØßv¦NÛº sÞVÖBé2kOÃiÖbrüà?ëzU~ ™Þû^¼z»êüL©F +„v+ÇñÄ-ð‚×#qÂg‚Ï&x>F‘‰D'¼š >J0Û™—èò±ä©ƒ!8Ç‚OÙé² ´¥¥w#ê{º÷àûl2hÎq~üX þAnD—Þd…‰†Œ‰‹L˽Q…³™óiœñ˜¿‘Zv¢PªRm:ÚFy¥jmYj«Å”$“àuŒm4G,êz·©ó±„/Z|­|,ßct¢ö7ÆqUÊ*ïl­/m<,$U¥2 Äf' 28y%¬üåu@“a.êÜÚTs´Pqd©>3=Îó½4j/˜b ù¡H ¥Ó»ŠýàÀ䘋™X2—»Ã€¥+‰¨Æ¦ ß*™o¬=úÒFµmŸ*td‹²Õ¬é¿µEЄóű3H"3øp5ÓB¨­’ÿ¹ÁMÊ«º3H#Ĩ1Æ"ž@·w}‹‹tñ„y: endstream endobj 30 0 obj << /Length 2830 /Filter /FlateDecode >> stream xÚYËvÜ6Ýë+zVaŸ£¦¾™YÙŽÚiYùú©BØd›vœÙ¨ÁBáU[ÐóÛ‹«—Q¸±Åi¸¹½ßdá& ?‰âÍmµùÍÛ‚À{Õý6 ¼®ËAwíö÷ÛŸ®^†Ñ¦ð‹4Lqh°Ù…‘_DüñÍ›ë·Û]ƒ´Á_á[áASx ɆŽtŒ’}ypí£jKE•ä4ÊPçý6‚môôqèš®îöÜÕÝÓˆcß J·,dÕ~~¶œÝlEâ]‚,žl+ê¤í¯‘x\…çÄ“ áIB'[nOÖzß6ªì|þvgÉéðÂ+eK;; ôF£g³³‡_;{è=êáÀCt»¯Y àïi9…YÛük@3ÉÖ<‘nÍ íaŠ’~&k­œÔŠl4ìB=…±óL(²ÉÇ?s˜ÒÆtœÎbZ`.@”4%Öû kµþ!h…ÓÄ}â¤Ö ¸ØÜ Ô!ê‘Æ€-¦MXÙ±3ÓlgŽªÔ¸fIý¦ìÈ#àR5OfP õN¹a;Æ;3èaÄy8ÖÑJ;~Y¿0˜Y9·Oê‘KЫT­¦Nçé)ÎÓm8Ve¯¦Ž;y§k »)IÔt0땲®)!"ï}F'Û*]Ð~ÃÑhÝf#ñã|>/!¥³½’`6k˜å¸obA_¨ðï¾ÛèS ô+kÿ’Z¢(âR󺪞NÒœ¥?Œý·縚owh[ÄñÒü/ºÒÍfBaZxÏ_?»¹Ý 8ì%u¼ÜæçdÏ.IË:{;¶žš'±§dÃÎi€CÒr(D;èÐ?(F·@Ë¿u Q0­f£qy]…HM¹;ó)QCêÆP ¿—ø‹ÉA ÛqÈNØõÜ-Ërì5äà$x¼8ŽçJõjµ\¡Rƒ*j÷ªš±#S‰¡”ˆ!Ü.åˆf‹Šˆ ~ ú a†^µ{ Ô³n=jŒ-@Õ…SŽ O$à ¡LK ,ÀgË¥x?ÃA›µµKÙ¬Iò¡%Ùiaaêrp‰é.k'¢õò„Ë gi…ŸàPjè#NbØuèÔcÛNq!ﺑW„°øÄ¯çE††Z¶k')mÞX÷O.Žb—9¶IaMõcΠëÄ&=½4cÐ)ï›Èƒ>Ñ,ç[Än»Å¯,_§Åâ#+`E#ÐépìwTï °®ßF¾@á„»Ðc]¿-oÉ~(cÀø õ‰’µ¨(ša.ͦg³‚'ÁÇd 8pU¤}7î°ÊŠs ŽŸÏ †22¶xyl:µl-œVêmêY”ÛÒœ~ZÄ›ÈOEêÈêçe¨m–nv3-Ÿ´÷ÚÍZÞ»yì(~’: ëLj·Û1¬SÝA+éŠD½’Õc{,ô¶8ÒÈ U¶, ?Ë-õ'D Î#ï`¡ [§‰-«®]Jn‘Ф ÷¤ûd‹âøÝb«çñµfk'†áÇš:pŽaZj ‹áDíÈy¤Éro¹È:ÞÄ|íåZP𺠥L÷0Ã(³ˆÒ?:\íH?àxÔ÷k¥C‰g åÖ+ }˜Â¿˜\ELHQdºû†ÚcAb‡®§k@8C¨“,áj 3ìõÇm˜]„áòˆ›JvCA°„ûze€ÄÎH×9 Wœf–Žöðƒîæ¨:N2²64Žøt€ÂÃ>™óŒ°ŽìZeýjH´p FMœ“pLʧV—¬Ì¦ƒ]Eg湕j©+°z×­І~b¹®=ÍÂö,²ÄÉNû?­[uíwÜ´xÁdâá{Ê"Ïù9Ó0ðã0vtLöyÂak"òtüºž03p•FM»ÃϘn um­G (áP)¹¾¡Øu£W¨%"äÉÈÕ¸KŽC×@zW¼¤²H -3êAñzÆ­RÖc¥*,I:–ÄS¡î£®ë5ûÏÒAµiT¥aÙš¢ïOa†Ù½Ÿ™›i"|õ]»÷×·~žæsä W|N½H@#/EßîutºÁýØ4p™qÔi ŠŒ*cö@‰¬†GY^ ¨‰ N—~ì]e+ß5Ç80oº ìè䋾¦¤ãûâÌA@ •ƒ&ø^]WciãñÊÎ¥Ûûîêh´À­|óN^ÞnãÀûå—×7g/Úôª„¿w»í‰‚¾óÁ÷ÀˆÜïM’„YQÁ˜u{à¬þõýÞG“Ô|ÁÅòOîyöæK¼@Ol€eÝ[$ ¸° Ÿ‰c=|=úv{7‘#½jŸ¿ 1¬õê+˜Ã˜=WÑ Ø^öb~ÿÂû,‚¾}Ù’eß%øõ+æç|ÐX>|â­üôŒ7åÅ+ó%QºÇFÞ õZ즞‰±=÷^’ÄÂz-Ä7É•›h)Ãh_PD±tÈl j'*™ ÈÙbŒCÜåÞ>ÓsÑ@yÙÑ[ã´çŠ””ÄMõØ´$Å“ ÌF fY(×ÓÃLÂ\•¨Ú¯–`£«‘žÆÏhM”ùi¼`5ÑŠ÷3?‡j3¿O’£1ݶNÎIõ«ToHÃ>2ZçÞ„íX/±ëG ö¦¦jl5¸`c_ÙíLØ®âæ”ýbÞá»çŠfy‡Ÿºzüÿâi¯ÙËâá?…èk…A@í@¼?/ Ø4³ÖÊ¡@"‰(‚¹Âó[:T­,Öö~"QôsÁ<ñçÏ_1‹±UOšù}}rXwš" ær·{ìúÊè?Á7)8#[Y4Éü(OÜ~É­èj&!wœ #í x„˜€‹þ{ f O΂iKïƒ(XÙEê'yêt¦÷N3Äd‰‘÷EˆQò›5ðRDZT‹©Ê(é¨Â™_€’ßLrÀr?Hþ¯üÒÍø¨9tcÍ„oß­^fkòd¸¢8O°¯-ùÊ:^L—bHÝ—³›{Fÿ9àܶÿ°jTMÿÇ-ÌBæ˜Hâ¬é) fž@^ÌìàöL•ßÓg³ÈF·®Yêj¾Ÿ™«„{JݰxÈéú‰Ÿ\ò`vÅXÊr·Bí:Úé&÷ÙA†nz–‡[>^.â” 4½EÙºAW®¬ü+~ˆµ½ðó<§¡™ˆÿžíc endstream endobj 36 0 obj << /Length 4150 /Filter /FlateDecode >> stream xÚÙ’ã¶ñ}¿BoæThÞGü4›øJvwªR)Û‰‘å! ¤'ó÷é ©ÑnòD h4€¾Á·o¾þ.IwuXI±{|Ú•É®Œ£0JËÝc»û%øáý{{·O£<˜FüA3öçyR“Õ1ê`Æn<¾0þ×(þv'Æé‰Áª ï×uƒbìÆI Úñ<™áÈÃ`=YN7§Áü>kˈç“i„äIÝ%QðÇ]ÔyÐz`Ülu˰§»4 ÆËÝoÝE»}‡užó¦^p¾V"]†æV=kÍkÔÁE7ãq0¸ËðnŸ¥…?‰Öo¹á–­ü²ŽX½>ÈÜÜÅ@˜AÓItV_ÿ fk;}aØó]L¼ïã<øDçTÃ8©2Þ9¢Øy¹µ¿ïÑä>ɳàϧùÒœL×a7¥ ò {×U-w’䓞'ƧØ[EguF^J§ Ũö‚Ì«$¤a„éϪbÝÀN5¥Ë¦%ð²å¼°ûÏeoíÍŽ8¤ä#Ò]··³™tËÀIÂrœÇóÜ© w~M’ô|¢¤ÓÐÉÜëé4¶–;Nj¨cAFà”P6±Û*¸eµåCš­ÇôÈÌÜMæÜi7Dwh¤§:sz=L7·d;i:Ų Æ'þ"q"m µ\(ℸÅc ‰dœ…u– Ý‚éâ~?¸ýZÞpšG"¿Ðù…–¦ËØÎv–-jÏrhöBG\ô@eu ߌ]§Õ‘µú(cŸ›h2 ð£-ÀÒ7ëÈÙ‡¢ZÖ©IÚ³Œu´õýfïr¦#ˆžY•G{ç³åþf¯U'Ý’Dª3HˆjNZ«I¾‡qžx«ibe wK8Žð-²•E ×Ãý-ÉYUñQ%5/7éþÜ©‰/ž‰Ù“ˆ· ÃkHjg›‚×ð 7ïb`Rá„—4nàž‡Ã Wk¶1­Ëà‘ô­F«Íé>®5®Fn™’æâ 1¹¢"¬Ë´BW”ÖQ§Ù. ‹Xö›ùa‹ÇªÂ4‰wûÕ¨²t°Ž_šWCE߳ȤufpŠ[™A#l!ÍÐtsË~ @>þ¸ûîáãã2â¡›lsš;†HÃWDº@›Z—xLtTŒ#ã~t-45ø•Å-úV ÆS åVÛFTéŒþHÆ¡¡ÀeXÐJû›Fs&9ŒxR…×JŸ­ÝBÈb·h˜³[pÏÞ³À¢§ûÈŠÕ}À•‡eT ´ôy´äE÷à]ƒ×ÑܸÄ2c=dŽmà|„co‰ŸÞ £4ÓºM v Ý4'‡Æ7ÀMWeµ=¼>XÁ´`°äzPY±ŽgQó…qÆj|&à fk³`$Ë Ú Gµ~҃ȭÅ_°ýZtÜ/舵ºÓ€p¿¬lùZ#ñ×ú²Å쟕¹<KWX-WˆÝ’v¾â¸ÞTà,X8Q—+QÇ)BKD +;„³¿»ƒÛ@ÈðÃB挻x§Î¶ö9÷jðÔªjEív ÇbqÙÇÞL§¯ÿyG¨¼ù¡ãMѲ%Œ‚A=Ú$Cˆh¼"qÏp`'^é1@fаå¥û†"¤i&‰j3´¤£Å«x­yÆU¼VæšäRVioÁò0‹Ò«Cщ öy s2Äg†–ðìäì…Ad %öó QçifõK)vež"BØ°Š’‚^‰äÆyI #÷ƒRÌXëíºd®8¬!Ÿ¾.'1Î7ƒ'w–C# ¿ñË 4®B³r¥÷ÒÚ«9~]ô}ät½>òW2lÕÙ^Ý*¸Ã^„ÆÙI› ½ÊÉ.ÙÁf1h>37LêH ¶éˆrñ(49WA¤± ™Nx¨[Ü6"êüÙ^oÇ£ANê`:òM<‚aãä-MÐ ˜'\qƒü<8 Q¤˜ÜvD5¬ Û‰!¶Äßô÷Aè‘çœÇÞPË~´”ñ%¯,H’Ç,•yâ¤2÷R °+©ÌN,c2À¼&7y‘#°Û/u’ü,¾„Ð(PXYƒôY»rÈD‹ãŸlE7”s{žE$Á@×|‚:º‹8•Q#ù´š§±W.é÷ÒBaYǺÀ¢cgY”Ô9Q‹pÂds`M Ð";Bª ÔÝÞ´¯l®Ëu,]©†@ËûOHˆõ”òïž[lÒKÒø¸ìMn AzÅ•[ˆy…>m¾Ï§ÑŽz{íUÝËb|rØ+K&à$ûJ—„]Xyºé?.ã¤]¨…wœ~„øË2ÜHåçÝ–ê¹GÄ8 'H„Tß»â W¼j qÏL¾áæw°B ¯ßóZIûœ.^Õ½jᢢ³„®7Ʋ̞0g—/òˆÛ;f‹ 'öã0ÉUÀ! (^àýi`ˆÆÁ¹hh_@¢a=wñ(Þƒa%z‰$ø‰OðaDÙ/n «ie,:“D¤ËåÜ8úNI’˜ýBHỺƒ„,É ó:¡Åî¤Z¡z»õØÞуû³ÔTƧ‰ËNÞ7+ÎMÑÑÞ®³È~X©LÕˆÅ6'׎!£Ç(ÇÕ ,ÙYQ‹d'ìÌ‘®Ø÷e-º,Ʊ ǃå8Ž¡¸HN—°‘Ñ—ýxñ×öíâË[;ì6<¥e< i¬*)áa(­§ÒXå·ð4!Â7ør PI•«"QÆ—[ÓH¹®*WY1BzFoHý¯•¨(€ª }1’t·}UÈ`pš¬ëùH>ŽÂ¼Î7‰µ€”Î×¥e">@ |TŠ_ ÀŽãØrË›"@“l¥4³«†Ñ€Ÿz°ÎWÔëôpXiT˜Ý/x_%~Ï! Cž„yRnÏÉ ûÚÄAÔ† .+¹¬ÎŽé$xNpúiVU"Eð¦Q« ÙUBÏ*úJë­½qôx¡uX–±» íÆdw† â2uï!£ß‹>wª4å¿Á¡4V5 ì.átÖ¥â4_ì(âÖucè>SêI“\f¬j¼· 8ÛŠ/xíÂoJšX¬bí+‚‰ŸœpÚ¡°eèÂ;Œ_ó^­y‡Îšw*¼cUÄñ^åÛú4nÿ$—”ï*¸¤"s—´ÖºyÎ×—™æa”U.#ÆKxM n;­J7æßªùô9jYfqíFÞ»Ì °daé,-þ²àÏâÊ3i|ò'¹ß$…êÉøx–Ê÷xÞ2ô“ÏXÅ9-R†Õ“PŒr™…yze•WåF ¿èÈPÀWÄ›ÎÀ¾e½„³pÞbóüÄ1&”9Š?«J!ôÄ)»lJ'΋_¯såÒÀÒOs×}!!ÜÆ ¤¼5ûúÕûK]­ß_êjSÇÌ¢4ø×]Œ‰3fDˆ¾Á|”¬<# M]­ô£æ²Ö(dþòÓ׈64öæ8J\é[8¯¤fÙ®\R±ßÈ/ì|u{á®é_è²(c—u°c7O‚2#»®³àÑ!\6Çå\šÌÅUjrqi» "øªÀêjtdþ\²=1ýÌ?!'Á6qú,ô–¥ƒ° DŽÂÄÄ_{,—ƒ[ÌÃ)‘’¸‘±Ë|±¥ñxí:ŠŒ@^¸·&ˆÂâ"ÉEæåâ+¬(»‹¶î&É"ñ"–“GÀ¶£ ©“U.ºc©EðáøÂ^r-  «?[ X$« CUlFT“æã§ŠD§•õõõ sgXŒ´| ƒ¼!¯'œ‹Còxý¸L}§x8Lô[Ì ù…<ö7ˆƒÆAËTqïyä^ÐátX©†ýµÙ¸±}÷ªrUç|U–ÝÅ c/§OFú_ ãE„¼¶±'OÍ-àþàeùêP…•ÂÈM ä((É_6[2™&x4½ÕæÑžÝ½[Æ_6n™Êa–rÀ©+ó€Ôñ_ é&ׯ>Ây²Lq‰9¶7y€ÌxBê<ÕR¢Íƒw\m!*ëßRW,¸í|ç•q§=62çbä<÷A)À\Ö‚mæ(ó=p—7by* ýHâÂeº«òW’×Áêi‡/ì¡¿úÎ ²½p#mW‹ÁŽ«°Ü’_ÞD×ß?üŒt¹‹dßéi¨ö]”L¹ðoçÐJ¢¨ÿ=ºŸÂýŠ€«j ‚–úöÐQ»¢€™ûe]WXùì²®°’füçÅûÅÔ ü`< ;`¿XÃÿ\øVÜ#E€ÅhïëJv8ø XÑV]Z´* ÉÄŠ¥j—¯ªv„¡ˆ²e ¥s@4Ë;¾\ʈ¹Ïy˜˜Ó’ðs—ù‘ÿ^À%_lÆ+ÛÑŠ™¶g†->1£-…OFY‰ñQ3^X 3òdÅ]±ÍYÕ)ïÙuYyǰ›um·^˜â>øžÌdÏKäø_š>Oü$úæÛÇ7¿¿ÁGÃhãŸ{q†oÝÙ®éßüò[´kg¦uµ{¦Qý.®Ê0®1eêvßüãÍ[ù0ë²äÿ)0åÏVL´®þ»(a\S’VøßEVqêëàœAÈiœ¹_ŒÐ8/ ÆË€Å-ǘEº*Gk1ïQ ?÷Ä™¼ûà<®òBËWGM?œ,¯÷ñÕë=Œ¸z&ŠéS ÿ,CKL÷?¾÷♤«9r\!EÂ=òæLhš»}f…ˆâ0R†~ò¡5p&?9mwöлà¸qd¯.v>Õ‰KºzYœÔÙ½’Š·k:eÄÇ×¾wP½ÞÖ¸–ÛÇêÜþ¾ë´¾.r}ùò9š-}™š YQé]”i8æsZÚ•9ÓÄ‹¯·ó«˜ä±Ýš'²÷0V¢UòÊq|Zr+¢W Š…#üµFÈœGÅœÁ)Æ£˜\¬píÊ£Ð|/qøö?6˜yä¿€È=…D¥‹‰W¿~N.6´vú¼lK \g-+blª^;d?]Æþêše·\‰s2¶¦½-¥@÷ÆÚ×8ûÒF'.^ÒŠK%¯Ãèu$Iãû´ ÓRªrÆë¿ýH×Ï endstream endobj 39 0 obj << /Length 3435 /Filter /FlateDecode >> stream xÚ•ZK“ܶ¾ûWì-œªÝ1I3d|pI%©¼I”¸¤M¹R¶;„Åǘ-M~}úœ¥\•ÓWÝýõƒóúé›oßÅê.ßç‡øp÷ô|wŒïŽQ¸Õñû9°×¡M§wqŸLWŒzÜEi°ß=¨, ^ëç ƒ~×] ½‰;•.M…YØžieÑ4«©÷Fýû¤»R¶):þý€›?ý;ußöMž4ž4µ>oœÆ‹)M?Í•)ƒžÏ³uaw¿>ýí.¼{ˆ¢}ž¦|E9ã/»v€©Iƒ?ˆù„§hk7Ã\†ÞjÓnz’eß^úQW<¡–e»( ¦ÆšK£yäyêJkú®hxFÕ·Åb§_¡â![ëQ¯gÑÅ ÔþÙêN¶%yL°tã®ÀnkÆrrO”ƒë²ã|¢~6¶æVá,ÉcðÇ.NáäÝ0j´•mèžðënå•ä²éBâÐ[Hv4Jö"éïHæ{žñ/Ygd7c ƒ®Ç‰9ÝlÝ}qÞ1cm ÖoÓ(­º¸\4½Nè¹æ}™Rð<wØ2¸]¶h®Ö”Üe‰q»ø÷—0ŒOCßix+²×‹¬||\®üž.%û‰Á/fšã½ßÆ=•FÏ“¨¥á;ÓuÜÓ–‹fÏ­8ŒB˜ [¼Yl’Ð&?Õ.0üÉ>j±ûÀôÏ´ìN¼r»2ðÜÝy2c ?2®Yô¾ þáDk·´Ý Q)—µ®à7aÊÕ‚Èü3¶—`“U¥=‘V-fú2€Ûï,¨s?´Ô›µ`H&íøàl6ø¹ï¡ó¥=¬®(ˆlÁ7ù' 4økD3 óà‡÷ïß~À‘LP;GÔvÈÒóH[øØ)§ËãOÛWºáqÆMA"$à#0&Ð,‡ƒ2ž{âÙÞ>–üylMè]¶ÄWˆÓ—èlGÜz5ÍQ‚4ðMeÉÂÁA×ë—bÍ‚ÞÎ!ý&éoNÂ8°~ZøÎ­(à?»(á8‰Ñkïø(ì`˜šmÁ­$Ž–¡Âȃ…ü²)4 @Áñxþ=Òmp¤6U…&‚ëß‹7%ÑJØÅ‡£`e+¼3ä4€âŸRŠbàö|Í—ÑÃSQ˜4e…IÙLS1o9ëõèìÞS4eñnÝydŠW›€YŠc¡}ÖìD¬(Ý„^,¡E :8 C‚qCÂHܽÞ<. ³àñlü¯£Y÷FIɾ§9u1r£h P®®Ü91hAËžÃS³asb{‰!Ö íâÏoˆí¸ýñ¥ð¹Gé€FÉM`„!ì=:Ñ›_…NŽ5ªñVÞQÐãd‰G,•K m8Áئâ$ q—ƒ–\VÐå€â.‡MbkI ï˜Y\´.ë{—LT}ˈÈÇ¡Æ÷°Ù ð÷ÍøW¼+ÀŒa^”ñ¼·_P;ŒÈe™9°w|†CH‡jh:À‘Ìýê~±Rû(rÁ÷¬Ç™ZU#ÕjwìÎ*Œ¡Àl4/ƒžÜwì½a?Hfû(ºyŒ¬ û£#à÷hƲ÷a*’Ù9&æsþ°°†—îXÅG¸0æK6°ó*ùÃ>¹Ø[Þ+á÷’åì`”ýÌgSĪ8\mÓ'H¸­¢tYvÂî\KWqêvNýη¬È¢ߘ¥—ˆRR¤H¶$0,D+ëND³m´•í/ýø°‹h*aŒV ;tÁOêV¢þ‘I’ósý'ÆgÂøˆÞI¨ýÅš–*?ñV…%Ë‚Qd y·lyÖ–O˜vX\¬¸ã hâ 6Ë—Ez%G]u•Lz —#Ï1ľ~ú+d².ià.+ÁY$§i¼ó…«T´õKRqªp@m“ï(*ñŵŒ6„¶ä ¥Š2)QæEgè€à²rªmÞ¾4Õ;ÅÛ«+‰B"‡0ÏLæ@U4~€0œë¥•fGª¥ïJ®¡!ÔW_ãßûuA+y«Êüaª©X–\އ¡ÙÁÜ€'9û<™}È«Å:¾T¢rZ§ä#ü¾˜V”ÒîežDQáË(Š˜«ÇpŸªì«_vV".‚c(éëúI˜Ö…2¬ àŸGÝ\oJâ.ÄÁB\Û[¡úÓMIÝ×§xéˆy&·?5v®‰‘ÖV¨SÏ×Móålü* ³ÜG1·1¶ð³ ÈËJ™¯ ýYî³9HåÃE¶²]ü^!¢Sù,:÷õ&‹r#¤Ú{ŽÒ$Ó—{~%Ù_EdXa„˜oè Lëjàü\ƒ[¹©ê„®¬àXÁ¶‡ˆ|§œ²,¸Âðÿi”'+”œÀ">°ˆ¯ Ò|ÚETËÚ,æÛþ³“:F·ú‰$’í…>ºX²Å(KV¸º´tg-žSÐê~Ö£ô.G¾;ü,´û‰v#^åÉêÝ7±g+Eìß`@“¸zHåâc>õÓ¹¶²¬çß“ls#²dõé‰&:8V¬½‹,DÀ˜¿ßLYù›pÛßl~a Ë|Q´5TLª¥ìãÔ‰«N£,]F_ê …+å“ ˜2zè«JztdÙÒåÏÙªê'³æD+++V7Á‡_îïæ2È¢=hç`Öïí|Ëú¹Wu”[¹qò2TùÿÜg®/]:îIæ= ê·Ûûôˆ%ãÖ¸D‡ÈåÕ:Ê\Y…\YºÁ¤ué„LÆäßte3U¬ˆ¼à퇘SœÂ%-™dnŽà{¦²­è¦ìùÕlñ!Q‹ œ’gnä¯+ÿÔÚUô¸l€S!Ú¡ÏcË/Šh,g§á¶nå„9 ƒuÎ5åó_ êéâDÿé~ã¼äV&%DÅ_ ©’ÛãŠêÊI­÷Lø\sµÕ­ —ú›¾âÆŠ¢xFh•½^ü×äï½Øâ`§Dá&yù@bž†UŠn4‹ ’Â$ÐZúJðµ¯÷Îæ{q⇇½u~HŽûDŠ9Ž|óöé›ÿÈÎ< endstream endobj 42 0 obj << /Length 3345 /Filter /FlateDecode >> stream xÚZYsÜÆ~÷¯à[°UÜî#o$-ÙŠ%[Rv¥â<ÌC³fè_Ÿ¾Ç Lü´3=WwOÏ×ööá›7ïÂèª8i˜^=<^å顈ã«,ð~”]=TWÿôÞwUó{Sªm_vï{×»}˜d^g:­À3ükk=)ôΦéìÀäF~azè{Ï»Ô÷»}%ÞÍÀ³w‘艹§)™®Úæ©;éÎòÝ útÄZíft7ýïQw¥œ=”¦wSžÌ.ž8>÷ÚÚ—Ý¿þvµb’t‡"IXÒˆçe Ìù)JƒÄ{®M«™Ök5˜ŽÛÏ5rýº©*Ýñü(Ix_Y³ƒÖï<éd*ÝÜV½ì>˜é8`Û6%é™çXÛ#Kª´Íï»0ñ„ R—éeý$;-éTû24rü¢°þZL[+Ði”F$bÈ2¤±°ä'c*n{sTǦm`ŒI“°bf4vþsn›²±$Ð* ·Ø=ñìçÆÖL^\-vG`6‹² ̆­ L$…Ÿ‡Z˜º¿ùÈÛO¿ú~W²!Û÷qVžZí3ꞥÊcoNØÊ½ÏwL¹WUܼã+ÿànFˆSUË›ÐU<8º’-ǶåÖ¥¢`iÓ‘zt/·³~õŸÍ :«ïX‹Âm%ƒmoÈw«J¼±/óä0G}>á-±*> pL ÿšóÙ×azÖ8¢mNªeâòµÁØô†`hâˆk¤þÜXÝ›5 1€çã OHÈ·yR­Ö"¥ÎFX›aâË!kâØú(‡¨z"ªi• ÄN|¯4§(uöè` ä7Ý€š$€H=Z8Z^À׌gQ/aÉç%/";C•Õ„@VüCÆÈ#‹*eÕQ Úm¢ú²FgäL7nf¥Ê0‰¾R%FUä-½F]ÆhsäMvÜ8Ê“‘VBŸ3ò~ ÀùÍMk‡²[ÙÒñ&Û¢3ZÌ6¶¥Û隣͠(ü¹‰—J‚ô•ãqâòxì‹%ÎPR¾¼(‘G“,·šÓÙ8ƒî„F1+®{»J‘êЧ0MUìÃèÒ7ˆíM5–d!i:©0JïöÃÍýÃ.9¸†Áï=‡&ðïñ_sàak²òT‚O6t&T°^ ¢õÕùÜʸñêi| é*<…1g ØÆ›DG¿!ç¯a}ÅCkŽåö²$á1†àgeÇ4ýÂŽ‘†ÇJ¨ªKvz<ÀªoGí"‚Ü&Ýtßîça¯Šw¿åDr¦xë¡9ñÁ—7ò[i«)óPèH‡‹·Ʊš½.-¡½È˜Pšî7hœNPG3ZÞ3¹P p=;ÔmÜJ²iäñ»`ß|áäû@û¹n0›ÂæÒ2E|6.ÏÓC!tÀQ‡Ðî(/;iØÒECÃ[+·ˆ4wµŒ5§¡0‚ÿ¶ª^®¹ú~ÎFôZrƒO5ƤjÀßlNS±ÃÄÔlHz2³íD.AÜê<&ŽC0Cá.ë ¼>¼Wp™1ŸÆ×†t¶«y‹ÕiºÁp ßAXx·zh*-g¤í_4.€ýÄ t,ÁH€‡9)ç}¦ Ú 9ìè”ø2‰ Ð+¦@ôèNid–¤ èÕæ˜¹5¬éÁ’ßò½ŸÆ^|›Æ'Íí'C6Ìžq;¤G20Šà!AÄDUÖÍy°7ãSÍã.êY¹”ã…ÇŽÚ2²’´Á¬ Ü·“Ua‹DŸ9±½œw^ uϺ‚aà~|Óµ´­M5å~(‰28yu«åÅÒ» ê*mbÝiäÏšŠ‰{Š2¢¹fCZ²ŠœûÞòà õIÖ¶ •>8<…ýIá@? ‡¢Z)ÆTÜØ®UÐÃNYÁSÌŸ%Ü <ËÈì:âl†1N×)-‚Üà=x9Ë+–±gû´#y}rå9Wb|^”˜ÐÈé‹ÜA»ô2ÃzïвëdÙ€V~¾dÈÀnªª™Ò4©ÅaqdñŠâtd³‰S1.ªV@ov×±¸ó˜‹Sl 0“ZTPb¬YÁ‹±ÎÇÌ\ýB9:Ï™]ëzû£ÛcJΗ£V±Ål™W£({tá‘UO.»|äßï>}˜ç¢ äryÎO‡³Ý<_~Và¡~=ñï ~§‰Ýî·ìO/ëAáq•Àùt¡®~ÀóÄ©xX‰é 9>X4‡Ö '8$¶fäÌG\€ MáõáW)²äÖaAøN8@/NäÝ(b¸úàpYä dñÒÅVÃ{©®…ÂÑ…¢µ[ÙqƒkÝž²Ð½JŠ)\Áƒ\´Éë7kˆª=Ç@YB€Ì8 ®ö9Ȕ˿dǾyûðÍÌ endstream endobj 45 0 obj << /Length 3030 /Filter /FlateDecode >> stream xÚYKsܸ¾ï¯Ð%åQ•Eó=¤“‹¼ko*‰•­Ä[ç€!¡–IbB€+k}ú>Ftíž4FøúÁ7÷?¼z—ÄWQ”Y_Ý?\íã«}a²¿º¯¯þ³û|RîÅuîìõM¼/vÖ5mËÍ®±¶éÜizþþõýû·“ ºþïýß^½‹“«2(ó8GÑáÕMT{üö×ë8Ûiœ%;w2ãñäÛ .¥;þ&;ÅëÔá:w­æþyänS1û [­¬öR”ãÖãuî„Z™Þ6µx‚› ‘×I¸3wZ5õ­Ô´à`ê±ré’‘;Êv_Yä—0 º7F ОѸ9oZõ½q ¼dsÝÑ‚ªãžêUûda× OayØ\Èh¨ÜÑþ€Å´œê¤åhÍBèP¸9èN5½ ²ÆÅ6Ç ;>âè -i\ß$iºûŒiÇÕ5Yî:ã]W¦Ö:˜¤,éPñ«ø³>¤ðŒ}­ØÒ3màN½0HkÎ•è5»ƒÖö9öÍ—0Œ+Õ»öIÔê`¯¸E–[‹¤3PUuÒ¢´3›l<¸'(ŒÌ×QÙ4Ü9ջɔ²ÍήlõÿFÝWúù%s2þ`q «3ïÌ ¿¿æ—8NN¦Õ)“æQ4Qƒ~Í/Ð`õbã"(Š’·y]ÀMP½máNÖ83„³íÎjh,¼«`ãÍGñ>£$1šÐ½yq…;™ÏB9ã@O7/wíâxÌNß“B ®FNÒ€;Î 0fCðl{gY¤_æÍ?n?Ýÿò’;÷Ôû =Õ×t¶7^çÕ3ï/ÛëVEž^x,¬ ?¸à÷­x7àTƒ÷¯Õ¯ÎËœvX,LºiÑ$Âr²è-ÏY]õP®:ÐÏð‚´æ§MXMDuÖƒå6îšfXóàq jО­Bݾª£æµùqV­;8y7àòê:Úá½`#Šš+#Òa%!)03iœŠÆ„±“ifIÅ,¼K¸.ð; Xèy¿³€ß5³îè.:C*s÷d:Óšãó×ÚiBz8ñ6í9É"—j:&]à‚ÀýPM8à·%Ø,/Yƒ¬í†;”nÜizéP…ÔIcYfebxp/=¼¿w챉ÎZ×tëèÆ%W7)ÜÜ(]¾^™ÝZíË7 R&¸N=ãÅÚ£U‡¦mœ‡KkGmÎHû-û÷uðËÖ5º¢)ìø¨½ìOÆïüï| ÐndWË÷øž´DÀÇÀÞ»¸­ï€ZdÇÈ_š/øÒ<ˆÂÒ³™¼ÃsaqÄ3SmȰzkØlK½Ð”9/û1:h‚¶h^`¨…tÜ"ï³(ƒ¢ÌÖïƒâCCÆ$ôðZí4Ñ*-7•'>;–ž,Ð=FC*‡! Ïû£¢%R—§Ý•N õwtB¾Í@dš•îEn{ÅQ7´r’ÆÓØÛq'#0†ÈáÊ2í¾“¹¡Í[æikH\l º‹qûl$£æAü 팑÷x±ÿjpn÷6ÑèO{¦©ª• ß`dõà !×b'-&¥`*"-r‚â|ìe q´njšÃS­Ôhe«IßnÄUA»(:cWs†-õz#<” HJЃÐÔ-EJ£[GWöFÙä…Ï'lÿ gÔH’|™/;/‚|Ÿú—=ç;8ÉÈ÷[‘sã 1ÕšøL'’Ek+ûs»µ=Š`“±îÅŸ£¢œº-—WüˆÖ#8*Ž`îüc#ˆ!ÛYÝBލ) kn*ûÔ9VÌËdÎ4¿MáåØôþ!)Ê]¥DÞÊzÒIt`~kh db'-J;¾c7|m-z[/ÞAJÞ4I¢R'uFKÇ‘+КÃXð§·LµZ Õ  ªÛºnÐ ”4Dá$q15¢ó ¶Sd  ¬½˜ãg¤Ã-0ù6B ;߯¼Ñ>Íüuü ³K·q ÊbŠ<ÿÄ˱á"“eS"[IVq[>5àˆÁ–ÉÚ¦0@=sÎ… €¹W„_; *Ý‚"óR½á3  y S^e =pò AÙ¼:1—3\pÆx ¡É% š4râƒÙçŒ;×éÐ@fŒr ö´ÆÒµø3R0±ŽÇÈÉX×Д'Aó¬í×'n²½±óƒGâ wúTæ|2*’ §îlèÞ‹ŒÓMïO+.R~(£¬üxjhïМD÷¦¿ÙÂs'ðókC>¯(ØÅó"CY'fùèn÷¸ÛÆr:URhÑÂÖûoohGlã£Bou:O\«>Ðz¢¼jäN§h"wàáÞ½F–î2k¹foí“uà¥$÷|6AÂ÷¦#'“ç^ïúVkn(þø€š¢1´Ø6c/2<™DŸxÏ4uYmó—‘Þæì’à~¢GÆä´þÆd&’)ßvˆ‰B½hÐomuîó=:ŠŸ7˨Îv’Úžë¢ÙhÝb1‰óã+W×Ó{ ('™oµÈ, F+7–mMâ7hc•æý§s¹6¼;®¶òî¾VÁª®NÈWØøj¥`ÓÆÍµ7ìKÌŸ"¸æxf‚7¤é ›©Îvnt¥çšò“åcNAš`qŒ$‘„&dò\÷[Ž:åï5©ZslÖ;ºhË5ÐBò™Ë;ê'QØ—Ä %ÔIœBæÉÁ :,ÚÍ.IX`@£·­n™òóÝ¿,ϤÊ.ÕB‰å|¢øŸf t½&Ác߸Ù÷eRcq@žhÙü†F£j#,!‚Ì`71†\P’@\8ó· ?jв…Iù“}ÊÑp½»ûùÖ—³ý\ÅÅy¥,#·`ÜÓYºøsކ· £tGDfF ùç —V£?E&z ¼‚߮ĺûÙõl8p:âÉ–©ÿUPf!¤sòÂ9¯awœ’ÉDȬ9“NwoÈÇ­]ú) áɃk>@FR3»$èæ)KÒòêH¬+‰îB;*`a…ÖÇ('ï˜üÒ"Ž*Gßà’¸)œØ¸IϳÊöºDL©ÊEzä+Ê‹J“/>ME懡l-þRIØIj*>e…ð-ľý¥>ê0©qQì6ÒÓo$YíG4˜rŽ#µðçKS™~Ø‹}°/§x”ãl(I4aÿɹóëW¯ªä{Ñޝ¶GÉj<ÿDâWÌÅøÃ°‡úâà#€‚æOš|/Ùý!³fŠSíW>h$–#ÙT<#wgq…î@Ùù8ç¬y*¥ê­x—ÅB¯ã~XaÝ[õSÜ×lŠé÷‚¤SíêBøKU7¶5¥Ì}Av‘^ä—¹€ÚâTâàr ~ý ±,C—*ªØhçèÈUŒg%ì=Ú—’rhù×䜧L ãÞŸ ¶ðâ¼­ë§—ÜÊ2Ÿ›Ÿ:ö÷Õ $ÞRú Þ{¹e¹¿æxò…,¤®œ†—þ}{½›’Ç<‚°j0)€”KêBÑîäÏ;KÃåS ܬ9s¨Tk9›Ï£)ÕÀ6×`ÂH9 ’Ys™‘ÿub*€¤CÃvŸŒA®B1 ˜òím=ÿ‹‘‘­1\ÊäÓqKìˆãXäC’jÑññlX¦/Æ_ò ”-çt# U-`ø€ùÁózo’$AOµÜ7´]®~ãôOSqeÜÊo¾×’ËÜÕ¾ïÖÖÇ;ðÞ'z 输îâÍ~«Vûy·USÛÍòsíý‡ƒGí|¹?ؼ„i–pXIä‚Ç~x{ÿÃÿßK”1 endstream endobj 50 0 obj << /Length 704 /Filter /FlateDecode >> stream xÚuTKoÛ0 ¾÷Wø6H=,?v0 E; —.·uÅVoŽØJ»üû‘¦œ¥Ew"õ‰¤È¤¾®oVwR%uV²HÖÛ¤*²:Ï“RðŒ«2Y·Év—*Îü.¥ªYkƒéú‘ÞÌ9;— Í΄šñh›0›lI†½%ÛÎ9c½¦‚ƒïïÎíÞ¹Ü?>Þ>©º•l´Ñ°u,Žæh‡èµI%Ÿ3øn#í™k~Û¶ç9KÎëEúsý-YŠ|ªt)DVkM•J.xˆl2ùÈb xƧ˜KÖ[ƒ•hæð¬ØÁ–nÌÆŸPÅHàvðÂ&2Âô‘¬î%…0–n±~¼ŒVЉmöBù~çºÐùøhãäñàΠÖ\)f¢Åöýilß#oÿ­=œBlEgz¨ª¬ Uaðí©¡ÇÙ›‘”µzN!ÌÈ¥ ?™MGý†6# BD]ÕÂWwºJ*Å"ÇQ”$//ÉNIF»B\Ù•YUÉ„“Á½ÇA|M—ªÐ¬õ( ö@Ǧ –´i²¾P¬¼¸Š%¸Êr!æhë½¢K7R¬1t}Oó$Ÿ¥Tƒ5=Èœi.ÉòÁñ@uz5#‹‡-É3råOŸR“MØ…QX òÜÎˆ×Æ‘´®ïv{`ݶ±«ÐNY+P8´µ¦óì—ÛÙº¶?#ï‰ìäèOq”M½Q")^oìPÓá” âšx ¼PKÔ5E™•üÒ”}ÇÏ«Œ#ÛvÈü°[}À~-2-«Ù ˜ÊeILÁC‘)J„&žÒ*@±:Ïôƒú6c¨}*Žvk"Mê:“ï8£‚q>½³¤OrzjÚ¸øÕLÝ牮+ÒŽƒæ\öѺOÊ0-äKg± ×›1S1ÈÕZ¼ù¡%Œ¨Ö°¼ºÐ™”±hys»¾ù äz‹ endstream endobj 57 0 obj << /Length 2943 /Filter /FlateDecode >> stream xÚ¥Y[sã¶~÷¯Ð[¨ "^“™Îx“mâ´Î&]§ÙN’š‚-v)Rá¥Zç×÷Ü@Q½»>Ø:€sÃ9ÀW÷W뿚`¡CeÂ8XÜ?.’`‘ø™ŠL¸¸ß,~õ‚åJû¾ïÝÖ]ŸWUÞ—M½üýþ{ž§UE4Ï_¬‚HeF󴟆²X¾÷~¹ ’Ô+§³Çžv(°£ãõ³ÈT±,§3•$²Ü7ÍRGÞ¡®š|#ÜÑ"î8Dî0V™a1ow;Û®ŒÒêóV=ý9³A–©ØÝ”ǶÙ뙂@ÅÙqݾß¹^ÓòªiŸÖ3Ëj_«XgnÊW¬ìPïósô_òÜ8žh± B_eaª“]y‰¿,W1Øÿðd{¦IŠÎVùƒúw^ÛªÌIšýð°îšÇþ·–…4k2ÂzÞ dãË€‰üû‰ÙñÉìbs>IÏXi—…áéþ·°Ÿ‰2ï Õ ÜØæØúÏ2ˆ< =±ïm&¡`7Ì•ó±¡øÀPæuϽ¿Ax(û-O(kÇa;º†þ$óú­eö}kWE³Û—­~>E6l…ûqiPØZ)kþåÕPÚ²µEßÀtà{ž ÝYS¨5í‰Û]/2*ÉRaj¹JLæýk©C¶ZègÞ._Òv«PƒKš½kù$Ygy ¬û†©œÇ΄¥¡æ‘ÇÄ+­¬¹mš®¬ŸÀxaxtwån_ÉFl±¡æØvÇ5âØÚV$ùÍ|¶dK±µOŒb‘áC;XŒ€k>J(×3Óùf21ÝoËŽ©s­h´áßQ«KÇèT+?Oò7÷ßÍ8#UŽÎ8 @­² œV¬–Î|j3÷±?‰{h|FÜÇúfßÝݽþ“¨SHwÑlœ­LªÝ_T×Ö…8Úƒ'PàK§[² ®ÃaÏSÑÔ¿ù~ð4Àë8Ï9ž´÷.2عôd*MÓÙ¬¢Ö°Íc9n2Ÿ¹`qû¹Éæ~©Ñ,Õ¨5‘“õÀÔ-c»ž©n({{MN;Çк%Ñà”÷%$Á˜ÀVU×'Q(Âä²c³Çâs%f7ÍœÕæ”›Úƒ³òÖï?×47NZINm‘½Û6C%&Úç]‡q¡æ¼rLI&Ò }ý%䋨†A ?ø˜Àl.¦¡ß6Oh²ÿå»n:ËŸ8Šz!Ó@RŒâÀ»ßÊúµÅhIœ0Iï0x‘ÞµKïpBøÐ9éÆ>™È%~»¶˜ €¯ü1iœå'ñòáÔ‚F‰‰¾&•Ìj pf•¾Ö²ch¡1ÚqðhdædbÆÄF;·ù>²2Ø5;¶+'rìjješW É¡¾'ÑÑ=w½Ý],´OÂK¡í´ùÌà~…‡IÞÆR½É‡ªG / €| HÈ>4Üœ+Q¢Lâüººv]5E^a5Ÿ0ITh7§X™,„XúÅÝ’L€Û—»u[D€°þéY”jÀ´I|Ää¦0†Å#ýÒ)0Û“pPŠm^?Yîœ?i•1ºoÑÄÊd£&À°¢|ÅÞ6†x~æÎ‹’>-ŸØàj…çÂeÕi ‚`ôÜ´ÜP­V ÔcùaΔÚWG¼Ï9ûZìiRåggÕ>ïÜýgFŽÀ¨TZ j­A•µ3Äóú¹ÖÔx£˜X%:8óvF*JÎêí›cÍÁ<„¸!4db|—†üiqXˆ×9ÜL˜¬Ê>L£Ÿ°×Ý„ò'™‘wü;)ЏiYÕÀxŽvë…íc5ƒô’7»².óý¾* ºgŽèžû8Ô(÷Ò8”x y¿ Žf´Àa>®@l-À±–i ÛÊJE„}}ïL2–G¥2)›1H…]F‹£§¹)N¨òàH‘w²Ø$ÚÁU RÈìÓêJ²Êäñ€-Äõ8—ý5S¾;»ÏYñÞ:2&Áÿ1]»[¡Å;ú?Søý6ï¿XBqF×àÛŒ¼”Kèæ8‚1™Ýc+ôÐRT8õ‘;ÇÜ-Àòþ w×PÅ*h†žYŠ¡ë›]ùç¸|ÎýÈà†“w MWž9ø0 »÷å^€%Fß)¥ƒˆDÍ÷%A«¯÷=Äi介ÓÈØ”IéÊR©ÞvŒΕǘ·Tº$Û?ÈA;[÷Ý8õÅgœ7{Û‚îdŸ( ðåÜëLª=æã &„ MÃéʧš!\"H09A‚1ƒèýñÍÛÛwt§‡½åRÆ#{ðß;—'Ù¯CJ|I|’ƒ`ÁŸ¸}wÍ3ÿGÎÆð'òÎ\zàôÞåÅ›·ëwŠ[J‘ ±Œ=Šz“·Âo»ÌY ò§ãb€ß&€hÀš|@¥¼9‹ #@a÷½ÈQmƒw9Þô—²–;åÓb•%&åw5£â \À-ZÍ>ç8>°>ÔfS_ç$èÁ a©,„ÃDwª,‰{[w%3“`€²3üÍNM61,áÆÅÔ×Üz°E>tnG¹Íà4ôö±›‰]^lËšŒœERŒ˜ÞX"$Ñ™dÙÔj>úƒÎM&O-çüÛ´sQk•ïõ„íÞÖAü‚*¯]ƒø2ÆÑù¹*ÿœ<µîl¿mÜì²'ÏÏÛñ¢ºßÓ ”q»™n’:ßÅu.òdÌ+Ž~‘û$u±–®Fðóá„')£ã–-ñ²Â4#‹ÈûÆ—Çúñ™èöÆTÔ3ïö&…ld…ÛŠUâ“ w€, 7Y{¤¦JwnPöyûöu0çå‹§ò†Í)§sCog©lgôšE=X€S8ð˜}¥Š`tµ?~Íã!±).JÓs!qŽW»©z9$ÅúŸwï>!â‘İfÌÙ[¬æt=Ñ |61wrwÜæ (2‘ª˜Ä†…n‘ëü¤½›»oxÊK‹iïo)s ûoúmÕÈÄù™þгÚxp¡óÂäìr'a®…§IG%‘O4é›UÏΤÍ<¸a–ÉÀ÷}æ%3§äG¦¥8ÍjÔ3®ÖÒM9=­³É8MìÝ5©M•së[<+ú½ÛWwÒQsôŒCó¡ ' ˜+—ÈÂ5Xøm)ŽÕ¹åbÙù°- a«^:ÎÄGͨ<ºkúÚ6£ÄêèÆ%Õî}ß’:NlˆW€ÔY–½ v–o,[{9<™ð%kÓÑso 'êØ:"!ܽi(OU7„2ƒÿóPS[!di)uHNS¶/öB‚èÜ;± $Bÿôq— AŠ{ÙûPÒ äj';ÀÙG†Ñ”1@6¼9vF)ÕA'~L d)µ û yƒAšÅ/›a·£¼õÍÍŸ+ÐÆ•ŸŒo0÷nAZL®¬/B@…8qñ«×÷W\áýÝ_hüª À¢P/ŠÝÕ¯¿û‹ ôCä*“¥‹qí:M”ÎéV‹·W?]½Â/² "À` ɘ* ¢…b‡ç,6_“** 4à •j3jCnÓFÞ3×Â]wE@'å A',#BËË*?–]˜4Æ%òÁµñ0 L$6nÇ#æ®äKœ–.Àè·?ü¼*»­cƒ±#Ê„1 o:ÓðCiÅ¡¬6#1Æ{C'F»ÓRbnSá÷ëç§CÉÏ8ôBs4³3eüèä“ðápPÍPÅøyê› .OÑøF$7I}Óm[KˆéyU±m†'YÁ%O¤ñq9cÁß,"×ÃïÔqòä+ 6$S:pž’ºÉg·1[Ó×m@†t…áö¸N¼@mt`mǰ闶9Ó¶&í˶©ñØBÒï-Óïö)èÇÁÀy€ÓƧƸCú_8?† endstream endobj 61 0 obj << /Length 3645 /Filter /FlateDecode >> stream xÚ•Z[sܶ~ׯØ7sg¼4IðÚv:c;Ž£L䨑ܴ“ä"©]Ö\rÃKdõ×÷Ü’+ÊqŸ€ÀÁÁ¹|ç€on/^}«‚Mæfqonï7I°I|ÏõT²¹-6¿8m· <§(»­9ýv§BßiïùyÔ[ßsöM5ŒE‰¤Àéë>ÀøØsÜío·ß¿ú6P³|•¹an<žÿr๪ºæVÙè;\³–)ñ¥¹shùÙ—%7¾S/¶‘g8ëóªl†êWÏ r¦Üo•ç”z»²çùÚ†{´l÷0æÃn•švèf/lÀ¦a3›áçûnE¼‹S׿eß·]»¹ÝIêÐ.Æ_ªžŸM+„~¬†²à61 ’¦—®Ô5·`Öḃ 9Æ÷ä‡ÁŸH¶?t³0\2ó3m¸Ž§@yÅ©£«#H€ð¼+¹ã„ó…ž3Ì„>¦éT`ܱ%Á‘ÓpÏrËîvûs{ïuž—uÉ"ä ðl{a¿Ç^Xë ¯e_í”ÉÄAŠŒ²ÜWvºÆ|àD'.¿ ‡²ê¸9öB#†g*óJ×Õq ´0o.¯¾áÖ[Øn™­|_5ýÀìó©ØGñ$twhOfqÜDª]Èäýx²L3Åž½0+LŒ mÛ[nøæzëÃF_ÿô†EóÏËnœ³†T´’tQ%þl\âËg}<ÀxQM;€we]Ñ(‡ƒLKHy[HKì½ÊìL"‘>õ'$›1- ›Aï…DgÏ÷×»…b–ÀûëbIºëùöúýk¡Ub)Ä YÖˆ–Ï»$_´pv0wºišñÜoÛã©­ýËŠÛŠb7Œ¬×b=÷3§oÇ.§vj„T4v¤¼å×¼m& œcÕ칟„®¼¹ü7iWØ÷úÃÍ%“Þf“úzuW½ ã˜ý'2rhǺ0ŒÐ>¸ãL-H¶°P(Ýà\(,%Kb‹–ÄNUWp>Ó+J].y¹Dž×cA[Â"yå¼ÿðQæ:û”emRm¢lƒ4q•g…»Ï󵸻àzÍ—²ÑYZ¹ì‡3øD°5ö–ûbÇ=åÆS7ôÃ/s³ #ßMcÿ\šÅÚ„™«ÒÄÌW­ï†{vwFVæ Uζš:ߌö“U®,ê…ný_«r¸)Å”úöX¢¥>ÕÛ(¥û¡”@e¤ ¦8˜€Uö×LmçǾyÁÒâ~¨î:ÝU¼¦(‚¥ÀÑtLCÏQH›0˜A€ü}¬ºò+õk¦¡›úV¾»ºz÷“™ u•VƒE4ûö~x@AS BJ \QäBé‘uÀð¸à€9ït_Ö/¹ýp¨r±0³òB)*N¨"ñØÒãÐaC8ã#“¬ÉâK1JD•EB5ôÒX)†EQRx¼‘)‹’l¬1„`ª$ %½m)s"Á†ÈUxǰ„ ˜UÈ€&h/Ä…\Ð:GðX Fl˜ç3šY£Bhô3Äß×ÜññEç ÀÕPÕ û¥E~êz½Úx,ìÛÌ7 f:¡kTvÆ=ÀÈ„’ Ër ®âYÔ‹ì¼ú &.Ÿ_]éüÇD”™h¥ÉAÂP9-ê;vɶz‚­»ÐG•Ú²sÃnv8Å †$…š»èH‘²Ì©L×Ó¤bH$³ØÆìW„ª=²§ç+7ˆl¼ês±â“ð%¡o \©¥H®UâÙ×$p¢,phgã‰$„'‡P‚¾Á úú’)ÍFrW‘ã€Wƒ­ÅA˜ýVœ93ý‘A­ùêÝKûE)„ÿŒÍ'ùÌæ‰H¯îù9e½¸IeJ»º]`Åu±"`€JÃiª2{êdöÈ @2<e`›òiÇÃïÊ¡gºje¬›_ÆÓnhwû ›?ÃèÎðÉàÖlëžG÷”„ÓìýÙ¨£IVœ™Mp¦Î £+O[5Gý,ž@`¿ò„ˆÏ¸‚ ãIÈÁ£b¤‚Ìpæ·îI~ŽthðaÞv27j}„` ¿+ÚŽ›ÈÜĸ-Ê'‚Ì'ú· vXêŽäDp˜¼'rJÇžG<6Uàú‘1£ÃñxGªû”ƒ0r3 {[˜=NÏuÙ ð!qf)kÐ5Œ‘T©,R‹a*!4ÁA hÂ~.gžœY5§™1†NãÕ‰à-ÝŽôZU û­Ïغ¥ÁþL¡qšÄEfƃæÂè™d2´Ø³Û"ú¯^äéúØöwjÃÆ“©åƒ¢…Oü—«¸Êh2o†ò)2êh1Ïwía1s’뤋<_0ºD«ôg•6|™ùŸÓw|U?E,$¬® t-Nìâ,Õ±4²ç¢÷¾kÜ2Y5MtÏ 4÷Õvþg"N¦\ß·Z½Û¿u¹3‡¶–Éy zy^ÔMé½8+9+Ìà%_Ú¢ÌýžRWÒø$týð,$ûˆÏ¡{'âƒãè\Þä°âhÍEÄ&åÀlhCy…`—qiÐ$ Ãy @&ta¯´Ù©çü{뇢;8nÌLÍе²¢Ù:¨a4s¼£³V\cƧáE€8È!ѤtÐ4`’^d¿JJ}Hšl&;žÆÁ8.ú€j õ <ƪJ¼ôU8©T~‚]Æžçüíóß×Ûs“ɯŠG¶kX­F™ñîN†‡™#©¨8rS«‡3¸âä±’£– .Œºxw{ñû…toãCÀƒùF±›ªd“/~ùÍÛОÇUYºy ‘ÇMàÆX¨77ÿ¸xƒWËÕüÔRš(FˆŽk~x{ýq-õ¥lô„:Vum#¹8@V9qßVïD“¤Ö@±= Àhš iXOsöì M‚ûÐ1¯™m zºvšþÊvTâÆ‘­°ã&U6 h#.YLø¯DÕU°6—d †æã9ìŽfyà+}§{@£_š›ƒ=ƒqþ&8œZÑdà¸ò©,‹ñÄ/tac²aÌOý wK’9脪³ß?®œdQ¬‡÷ÜqX?J›Ž Ø Ï] M( ©Ž7¦j)œM[ݵ ÇØ.;ìENh”ZMËÏ3h‰ÖíÑ|\í7ï„5ðF÷£ðQ™{$BUv&½™Ô0x£Ü†©G¹ÆyÆŽ%º©NEè¹áÐ'àÖÂ8™ ¯ÐDµ=Üç0s ˜ùúòk‘rNš7RÝïç`O¨ë?ÇÈ´¤RlÚW`÷|e„ëmˆ…IvH¸l`1¡y‰fËäUüŠæ™3›=¿UòløJ“_戊r9(Ÿ#Úž%‹@áª6â÷ŒëWËMOCx(¦——§ßX„ìÚX„ØCÐzK—D-÷IäQ~/Áœ_Xw½™½d@!É P–©'¯jçãÆJ¹4§jŸ JïÖP¯(§²±ZµðÞ³qÏú㇇·…¯vÄ{I·íö+z”-nPVJê£q¨¨;b–Sßþe¡Ðí(Á3:³bþNSxÚ+©·`cºí.x„)‹bç 9r語›P µÌV5tJª7Ø8YØmV¬šyÍ”k™ŽîœKˆÛ©W0œ€fö< 8¦øèrÛj#¾,.÷á]ŒÚ;¿Å]Ësª¥ÂË,ƒ@¯ )Š`ç*X RßMýlŠ1Ȥ0ëZ*qÓЖ¬ N£ÙÛ/­‚?úÊ|€RŽ4–Z#PñùÐ: 24UË0 åÌ»œEީƤ;ãø'a¿•6ttÏ$ª0Áæß¶XM› ì8òu'´äº4x¦ ¨¢Iþ낇è¢Bÿ nÆù 7sñÏ‹\u&7>#¬äE™„afÓÑEV=pq‹ç0êH÷Y¯VP©©ãaë!?œªù¸.:¬Ÿ+,üásQ°vü5²Hƒ¥¾äß!¨>ëÏêƒÞ„msfë%O1§RéÊéqlŠÕ{Y¬ÉØN»±Yc6rãТ2¶–ÔùÀ¦-JSV‘-(¾àp˜òݸ³ƒFb¸ ÞÀÇ|À­u•ó]‡J¢Ì× Wˆ}²gI,êŠÏ/ÁQÅ—~8I's¤PñMÛ¼ P´ÓÅ«KàâIê•t‚T(øbÖå§ Àä,ñR›ÈÍ’„$›nâû‰ÄÙùUHãàxðÀ™ø›]nNÍPx4ôѼV!Ä¥ª^¤äŠ i-¥§Ð8imŸaɘ»Àïô†&£åî ›O €ïñQÊ W¶h˜äc‘ÌÃl`q ¡h›—åüj®;8þ šÀ—¶8rªeNÚs3Tz"t¤¦?¹Bð8ñf—¹!ê;ÊÍlŽ·~´`[wíh5áÖ€êÙØ×(<ùË‹x. †Ÿý§DiUÃ÷F‹ì2žl}Ï\½silŽéõ ½2™‚lÍü °Ä3•ÉëÊüyƒoöV|ö#Í%ÿ¦bþóÒµ»z»ž‚¼|¼s³LÒ?4Fð?ö¹ endstream endobj 64 0 obj << /Length 2387 /Filter /FlateDecode >> stream xÚYIsÜÆ¾óW̘*ˆÆ§’”ä’"¥J.Ç¢äƒíôp`b Oøïó¶ÆC -úÂéåáõÛû{Í·wW·ï]o“ØI膛»ý&íÄ÷7‘rlÇ‹6wùæëî ·;7 ­O?~äAQµ¥®t=¤CÑÔ¼¶ßzŽÕtÛßîþ <ƒM ó°QÏóà%‘•5õ¯Žã>Œ–œþ¸A`Šª-ÊÙŽ‡'û®©pZ=è“ ×~l[ô«ïXƒŽ,7íê6•ã„~¦ N&œbÚä»ï6èyG\²F¥_ìXÿúáË®@ü´CÃÄÊúúãVÿ7ô÷î“U:ƒ(ú ý(°9 È!ÅɱǞ)ŸP¸fä •( ªÒªeQóêR#ÜŸ4&¦šÒ$/ö4×”\¦ŸEÜ\9‰güÐ "ëX ±À¥WÞ.DM‹c‰¶]»Ö¬h¸5鉓Cг?¶‹šWPs:Y~Ñ\øË^…?¹a) -`Rˆ?Û­²^“è‘ïV?E‚‡Ž 8?ù&GÔ$­%?É;˜SŽË kša™}Â¥{1•äX,L’öï'?™ÆÉÿR¼<¿ã”ƒëbV(HÛx©Ð?¶»¸Up„ ŸvT?wÓ%znù&Ë_ùÁm›‡Û¡¹%rˆ…z_?VÒÇÈ•>ê•â±S>ÁˆÅ)œ1žöïû±Ò29…LÎÂi×n;Ù‰šÅ!uÄ'Ôå{`ŽçÅ–Î2ÞæÕû…„|þÔººÞÆk²EÊŽïU²å1FÝ 78ÉÒ,x—³5J` ¤'Á^ð* –Æ.j¨i„= î ÄÉ}”>"[ý­—Ç'³²4ùU+° .#ú• `0¿Ý7½†©Ïµ‚„o.ôæ^Sèo¤È‡@µì‰Ò µ½¶»›ªÐd‹³ì2/³Ë<3ð¸œOØíb¾æ£fT×7g÷抚þ†T#$:åo¹¥<7šøóæ 0p޹æÁxöx‚‹Âð9õ,¸ò}#) ãÏòNÓ3 ‡øé«Ðz_@5£ç 9ŸUù^ÑÏnõý˜CbF±ÏO^¾ëCè´»rÖ“”¸`oDÚšþI¸I”©<`È{¤–=A@Þ·:+öO¼Œ|L㋛ϵˆŠ¼³–SÁüéüP¦|îÎ0¶£xPÇ¢½f_lPÛ΢–º±žb°8àL—öÓ5~ÝFÎ3å1 ˆƒ>¼zwwõß+l%œ2ÿuP1€º$ÜdÕÕ/¿9›öÀCpùÇ›#QV@¢ eQÑróùê?Woé?sK$.I¤àB ÝXÞw‹ßOVŒh ˜ÐÀƒug]Ö³gøç¶ß —…‘ £'ÐNèMÅNׂ®¨³rÌ5‘+È™ö°F e]ýUU*ó€Ý¦ú›ióýI‘/Ð<Œ€lX¾ìG(WøàÕ~\ùO”‚ócz†¦ËÝñ.f˜ç¸d˜pO?ȃcF ®Ê+"öM%”òO˜8ËÍ7"ߌ."£¦ËÓ:rû;! W1X™ªŒOÕgõŒ ?¸âƒÇäJ’¶/YAàÜò¿ò‚ŠöŒã´s^ëè?ËZw’íŽ1½j*èéXÏ…³Š/Äm?„«zß"‚l \ÿˆ(UO endstream endobj 67 0 obj << /Length 2705 /Filter /FlateDecode >> stream xÚ­YYo9~÷¯ÐC€´€¨ÕMö¹@ðäl&žØs,&ó@K”Ôë>´}Œãýõ[Å*ö!·‚df`Àdó(ëøªŠúîæbýZÈEꦑˆ7»E*ÜTˆEìûn$ýÅÍvñ›óó2öU/W~èdêv)<'×Ë• ƒØy©wK ³]Þ.¿ùþâÕÍÅ/ü…þ"‰Ü4±»I-6ÅÅo¿{‹-Ì}¿ð\™&‹{³²XøQêúQý|q}ñãÅw†±p‘cQ0b,JSWÄ 1v¬õ.û¼\RJgÝ5õ:¯6*GF€Ò î†!-ÕŸõæ1ƒ¾¸iœ.¢$vC þ…¥_`Ï÷c7Šˆ’‰NøóÃX:Oø ™[‰Àƒ˜YŒhõmVn³šoóä éï)ˆ!Ý0Šÿ Ãiàú Q’@iÄð8!6}ÏwÁ.&’̳ۯg3’nä‹¿ƒM ¥1›ÀÉy6³r“w[mXõSÙËÍsF²U­ª«ª¥Mr´©9¨zvK¡ÆJXÃÌ™ ¾Ù!cÜAûq±Ö"ØŸxÂÆŽmiyÒV‰—›¸±H}çV7-õî—àä ]úÚŠÚÍA•{^ÞtÃÝíàÿ dÜÞtI½DŒª£®1r‚ÍÁÚ,ej‘SíØ@B)N¼ÑXGœ8²u_>£¯ljSdûCKÝ1ó 3Ÿ8[n›ªÐí¥ž Ý!ýií*u“$™òòÏå*ò¼‰™^3æk'ëCQÀÕëk…Ñ£·“Ðú”¶eã%ðrù?#‡˜ÔGšdÙãDÕñ `©Ô4Ú<4­.V÷`t4=(MW7´ÌJaÆ%ÀcÚûÖèbŒó'×€àÝ+`N‡ ÔnNb=!+·Öc :#JOÑT7YŒõ.à¬:Hç^U¤àM]ÝX[–0¶,u±eà*T<¶YK“-ÉFÆpåƒÖ˜ ï~º =gK+UÞT´{0.o™¶Únçp)…°ÐûXvÆ(ÎHÐ÷=7‰c»ËÑëuFEë½ÌŸ\]Þ¼¡+ý<¦² ¢Ð¶MôðˆiÌl|:e=€€„cÖGŽ:Ë: –è7æ9ìLJ¾õ]<˜™NìÚ® ? ß|‡²¢ö¨ÚC© Z(Á Šc–ë-Mf%HEYÞ©[A|+\bP–fò ‰†»K8k¿n:€$üGÚ(n¾©j3cvˆZE¹B—åÛÚ¨¼jYQ;óYOÖÕGïè  ±f¤‰©PêÆ1shäh|t.n)ØUôMÊ‚Ò ò펦;öQå 6?•P(|Gm6úØš»à2“M˜AÙ6à *ŸÃŠ’ÞPÚó_¾º¾yùîãœ#ȸí²ù<„ÏV-d¾î‰W÷²ßëš5Ù™¤l0›£Þd»‡3úÝš#çÉlŽq©7ª´ùƒî FÏóu},Ömq\ßZ¦fÔ<5ô•=À˜;׿,#¼Ã"»íÊm3c¸˜:°°JÔg×t*çKUå'Ϙ¬É!m°¥Õ[Ü“ë¢éÙ:kÜ/zrLFÊØ°í„>ìT–7Ô¥¼YÊM}÷Á#N™@­Q4v5>*8†{ Óç(]À(™@æ3c“Á£!½ÛÑæ! ãñ}>8ff8®OÐI1bLcƒ‰sˆ£m­5õ>y¡WËÕ´€7RR‚ÐFó4ìƒ>Ó6 ¦šœb0­C³~°$ª®÷9œµœÖ`Üž-vK2 z¢‹$áH<8ÿŸ®içê¿þî¤Õ 4Gbkîˆ{G3hd#JÝ—¾£Õ¼6„k´å™ —€Fñ8gR H]‡ÀFò©Š xî¶*Ÿ¶ÌÎHO8ýùjéÃu.Íúf°ÐXeMAŸ¥Ö[]¼CØ sŽE8•L_ÆœIìú´ß@( g“ˆ_—¥5ªÈßaБ€]3EÇQ-”8o~ø‰«Åy´!?ëæ"ØIϸ9Ö–Æ›M]:ИJ®²’dÊÀ>-V_¼þ×%FÂ7×\W“ü©$7v7ë¶@àP7À¢ÁTë˜Ñ@³áslû:œ uãcÀÕ%×VX±/3õIJV¨M]-o6• ½¾Ö½üuîÉ-tOç!îúKOn‰ydBJqÄܽx1s$Ä‹8ý;N„ëL©?ñý寮næt#\Oò]™ZÕcoTÀ Éf ãûN7 w«jK½ R’"ûŸµ1õJµç½»>€ËQ™a¾8·¬Ñ¸Ð]¤ï¼cìõ=jÁWøšÈnT£mn$®hõSFSc"€öqx‚öÖ63®àíÐ=ëªÜ³ßþ{é3Y…ÊGe]c1a6¡O|7 z¬C'šQE8.¯¬€¬=|óÛÂÊO"7öâ¯{] Þž¯>Ì`JŸÐ|Y¤ˆ{d‘ ·ÍVpò“²¬¨Oi¬â„Ç@ µy}˜гtoyrgÓ& ÌBM¹ßz¿˜¢ÇÚ‚!EzGb Á†ÆêxÔÌ|ůʖÒDnôÞ!¥sÝ™ôG8×6ëë*·ÙqC €@Aö5!ôç]ËU„Ù§hÙ]ÉoMô™5M§iAÆCóÍ‹zÒ³$ÓÄ•Æ4±£3 4D†ãÇ„Ö%Ž‚–ü¦a²¾™D`ôÂðó&kÌÓ„ähybò1À§H¾î¡4¸Ðؾšp6…á™=ûfÞäc5õ7‚ ®ŸÜiœzQš†ÐAP²ßQkBûõ©ô8æÙ&ksÇ7ÕØÌk‡/Wœ¾4¾ùøêj.ß ð{0žsçвtêÎù2žñÜ<«|>î|ZßúÓž t¯ê’ œ…F †±aKÙ\ HÖ ˜úü¶+ ƒ•躼Ë·B—íè“ cç­´.Aí¾èVÔT€ömëóÙääSþÝ3þä-Ôä\IêØöžÂ_’޳ttšGÍSv2‰aðÅ ¦PLJQs¬« —Š—¶ý¬¨o³)KÙ7MmÍ.Š}úy£ái²f,§V6GÍs3óÅjÎÑÇšpé%Àƒ,¤j]]Ãtn"°8e FÞ•­Î×—ï_Ò'Â>Ъ Ñ ¡¡5T Aç q‘u†â¨¯^œ£"ÆTlò{z4 ˜6q®§˜ÀlÒlûVÔÿ3œÙgö¼¥7/ó5*Jø·ÛÉþË|-ˆüÅ*—NùyÀl^ø»é± endstream endobj 70 0 obj << /Length 1306 /Filter /FlateDecode >> stream xÚ­WKoä6 ¾Ï¯ð- Vô°%» t] hÑzØìA±5#¶5õ£iúëK‰t2“L‹èeD“ÅÇGRóa·¹ù¤dR±JKìö‰‘‰œqe’]“|I?Ûa+yú¼ÍT%Ó«Þ>:$ë­àéÁÕAúx…¼ÙMó„äÞ¶Û~ÝýxóIªý¢à µÿºU<%…Tý¾•ÅÊñ£;úq›å<C¥~+Ò=’·LÏÓìz2ã`g²"èK\Ck×HõÁ¥›Ûù0:Ûdµ=Úû`Hç‚õIFgB°ª(Ðì—˸H?âÒµ÷cPeÁNQ¤­›_ûqtõÜ=ƒ§×©S;4(mPd›U7;úŽÆÂŠaÄVžö~$Îäè:Ûe~èžÿÖX^³¡YeT²¡´bR”‰bZhôM]HZÉòÒ$ÙÉ.LÜÕK¶àÖ{礖á%„«#1”ÊfxqKÈí蛥†½Ò»Hä)pII’ƒ¯ÁküŒ1ŒÄH'?#gZFÒö‘„µ_::PÛe¢#-¸“RÓ‰8’úãÜöí4·µíBlƒüÞu­ ί®£š«mÁÓ‰ Â¥wÓäš,ºÎÏ}^ŽS¾âȘ(€Àï‘é—dÀ)Ûf:—éíùÁ°±ñpÀ9ØãÑ ×¡Z$‰á¢"Á|šp;øƒ‚ÇvhˆçIå|h‡â­†>Ay 'æ'°Þ€ö‚£m„ü¹a¶së°]åyú}ˆO‰‘öÑG;ú >M¸ü‡u:,3qâU`~úýþD«Ö€ÑJë< UV¬,K2„ðú„ *‡ÝÔ~Ø· ‘eM;ÙûÎe¨{º€þLä¬ÊósÏv‡`¦**ˆM &Pµïm}ühˆBG‡«?‹³ëJDÓ>[~"¥/Ñ=¾ê±ŽC1¦+ò—qr'‚X5 ]ÖÎo8¯äYuǹèF?]Ô/Da‚\t³[䃾ði)g–R×ö´ïŽÜ®¹þüÓí5e}ës0ß/ø¾´íFÒ9$ÜK¯i@±ˆMnóÃnóÛFy"ÂDŠ3]ʤî7_¾ò¤>@•©ªLžâ®>¥a¢2@wÉ/›Ÿ7ÂdÐ+ 6AÉ Y$Bª¨ëM³4°‹ØSY)E’IV µb%DŒœ]×Í6fTZÖó‘„1¡ÀžYÀY§WDk`DAØâñÀ†pªS5c÷ðË%°`«²¤"&˜8Š€SŠàKP‚» mÅ9tf©;7Ô‘®eˆ¸‹O3òFØ7ÇéT*×IV±\¦>¦¥~(•kE'®`ji¹>"œ\wßg_h€­)°Õ<ÿ'H¦«7ù?½Thô6QSš°“G߃@ÂŒ]í ¸DgÛP¯ÝžÜ‹á¢s31r :úÒ‘*ÿ[ uñº=N°¨—×t‡A81’8¬þ°};Ð ÌÓlñõF|lK5IÛál»3àÑ…#y)½Ý¯&ÓøÃ”J(ˆSÌ)…é ±Ø‡ ™âÐXL«dBUÿ:S§ &¹ùÏ.äšVVm"Ü8þ‚Ùª`JåÿÇ¥ªd\æg—v¾Ž£3EÄÑ{¨Š¸„À¶vÓ“Iyö²<éɃ² Ï^ºô4 ôÇUËë³R…¿áE{ñÏK¦!LâÕaÖÐý±£%Þ endstream endobj 73 0 obj << /Length 2189 /Filter /FlateDecode >> stream xÚµYK“Û6¾ûWè©jÄ!Hðu´“Ø™TœuetÛì#A<|(hïüûíF)Q£™qí‰dãÕïþü°zwû1ŽfŒ1O£Ùj;Ë¢YAóÙj3û÷<^,Y†óÕ¢çiZ%ÊÅV¿ß~ŒâYi”â²p¶Œâ ˆ Zõ›låO‹$œëÅ2ŽŠ¹€GÎ n&sÜÅŽ|_À—(—fß6ÝnO›-ꦒDÑ•(Ý’CÛ|•k£ià»2{¢ÿöùó¯D]í•;ZܸMºíßa­% ™†È;iˆð´ˆàìÎM6xåÀµÜ Ä(#cA‘$$cS/–Qš °ˆÄz$²O·_ë¨(ê÷ú¿ò¹¨7£Iô±n׿Ã$†ÞK)´{5²:ÀYp¢pŠ,Ÿ`*£Qý¨nÞ^ÒK+ýRÏT?ô©S‰<9Žt·ÞÓˆÐî‰*­©•1OË2à·ï)íl¤ªÄ}²œŽ†§@Q¿-"ØY•â¿JIC릪H%ðQªÚ‘›ƒQM­‘Ë€ÜÝÕž9¿‹Ã Ï#:uµwë­ÕꮕãAÕô´^Òouô`Ƴ 9HQYæ¼ÿC§JÇSÕl¤—§gT”jçöÕòŸNÖk馠ý~ù󽓢qe¤ª­ÑPoKÆY6€£ƒ÷UeÕcÏ?·Œ g ý)—ÂÔ £{å‚Ìô²m›Ê‹àÕr茓­Ú•Fü:+^%kL(l阙ø&\ãù³xDùäˆíg8;¸ ºÄÓ¤ê1¬›¢g5õ%½LI–åA9{·÷RXÓ­‘Áý™1‰L´Ê3!pæN¨Z› Ó7ˆ¡¥÷p»”N=€6e{U•ÈÜz?’Y«zWö¡08Ô«ÊÍ2(®Nï9¶Ñ¸Œ9·nþá÷÷«/ËR‘E½g?ë.)±þU¬qÍã˽3’RŸQ6‰È²w€3 üߥþrg_0(¯þ+zìWo°ôˆñKaÿC¿B¬^?*Ã+muIä·ÊpØU›Wɰ²O/–.oqا}òn@CAÓîˆdAƒ|ÐÊ\ä°ƒ(LÆea*õUæùüÓO;É;)TžŽòNýæ¼ÓÒ[ÑÁ‹a*¿9-Š/wÚóý¯&¦?ß›õ¸ó&Ÿ•ç­nÌ,|d¾ZsºíŒ*•A§°ÆŽbħ>v©„~¼^±›Ú>M–å!ë¾úÚ=].»ÊEåïz'õks A™ö› @ùU~†nJ‡ä'•}ŒÕ¸6=Џ=¢% ãÉ鯑AVê:ߟdíËœ—žCÕÏíÐ é«Ò|Û÷EŸ€ÎUcƒ÷òn§võDb)™åÀ3°EÐÕ°Âót9ÅY&¹Ÿ7© hfƒåcä…;qÝï÷Ô¶:¯ëßäÂM”6j­' Ÿëý¤Køê}Ý´³eI†9+xû<èGÿéĆÑ®ú¦a“rlÎ[dƒ xÔë6O·‹­÷·NÕ·Ït2 Js÷*RzÔ$sHx­coÛÕkl`a'óäH½‚`æÊÀȦY’ÄqE>vßJu&Ê'­ÎZѺnÐ}«£ûh=(Á#ã`1}uê°e˜´•7‰ö½ù°qûb·Õ8”ï?¿ÿ éŽa*Ù‘ñ à|,šqÂ÷YƱ×îÅ&(NèÙý4ÔÃÄVaÀóÞÚÐm\ì4’(ˆò´?´mÜ:^!Äù±ÍÀw¼ÑÊ‹¾ÑBRoLšëk¿íkÿ`éôt× ò /’“•AhÜàU1v}”ÒUV”Í©#šu $[°Æ B*<Èõ ‘b!ZjÉ‹ÐÖ›»ÚHÊVànnØŠ~N‰7úÚY¹àhÓÑÝZj…$š÷%¤Ú8GºÍî×FÆ_à ˜å™s@ s{Ta3Ài2!{9¨Ñ_¸Œ1ä“8 硦Ò1íÜpˆoŸÁˆ9oê³·hÝîµUÜwü`d2 ¶(?)¢+cœàŠe'¢bÌÖT¤$AÞнaÄý{o^Žþ ‚hˆM)q82?ÉGl›³a5„/º’Å7A‘1áÛ^㇡.ûË.C2!¼ +žŒQ¦šˆõ,²„Ÿ¦ö }ðL_3Ñ1УòÈósr ”±´ƒN†++¢“ëáöâÌЗ]»2¸¸¼jõ$ ’4Zý‚r°{˜ v[ò<®q–¼ÚÛ Ly„ÒX%;fç9'/ñï” ít¹9ç *A1,Ǹ¿(5FXÂadvÉ8ìÀÛï Íõ«gÓ÷÷8hö•úwzï´tkOr¦íkî`W¸ZÏ’S® bH >´Óµïl›™yÄ\Ƈ)€sÁ=•ã×@©ßhz·5žƒ±ÃWû¿žÄ¼‹“=Ðe œÑ4¥ž°Uœ¤Ðˆ¦×«6ÔÙ¬·éÍ”Õámˆ{é𠫃sò@ç[.9T«Ï ð3 º8‚êe'ó÷ >ÎmÒâgˆ,ƒ(„p€ ü?[–ãØ»_Wïþ™lÛ¨ endstream endobj 77 0 obj << /Length 2603 /Filter /FlateDecode >> stream xÚ½YKs㸾ûWèªÊ {³cOí¤2»“±·rØÙ,Q3|hù؉óëÓ@| ²=©­\$¼Øhtýn¯Þ½çáŠ1’Æq¸zܯd¸’ŒÊåêq·ú5xèO§ºYoBtÙþeì×Ы›Ruíú·Ç¿½{òUJR M®6,%Ò~ÿãÇ÷Ÿá³X[UéFôm¯ŠâGUßÕ@)ߺ¡8Øe]¶ípº;f8¸_s½©î°gë=N*ì–kFƒ¾èòSa¿j³ßû¬Úfv¯"?TeVu×ÐtJS™îü[•÷‡ü5l–U–“Ú6^%pX¹Ãjá <í±,Ÿú¼ØyÄÅ$¡ |`šMA”ªÅ<&4€]˜Nží„oׄ’8ŽV»ÂGç[ò„2uË¢àqÍ´öz½fq€§l`[èä;ËˆÖ *"¯«kkOÙ6ß?{8b±$4öÚlòjo²ÞJµWþdBh"‘T Qlë²T•‘åjÃSNdšZqÇøI‘Wv­‚æºÒ'²²;5õA#¢Ñ?ªtä x Õdjן™ÿ¼:õvvÀ 1 °ˆ¤Q4ßÞa; -¶¡¡Š¶ÆÖˆrè †6ç†AsMÈì+ɱ=èN ½/”†W8²Öç’0;G4 L­·h uª9d ÜwàêÔ“ja5™†&üÃv•ЬëCO´™j¶G\(£µLs‘~õÍþÌjÁòÁ?Œ)á‘à  ßHÈgsÙÔb7Z*SpãNFƒz÷§ÌËc»Ì.ú–wG”SÀärÌÅa7h8[D(«ƒ:T§5è̵6Z]^|² Œˆ”†×½ÁîB"'®è’ݙι‰9¥z,Ìœ‰X¹Ä)‰@3¹eÍ\¹ƒX¨ÝX§²Ô};ØWèlç ‹à\ø T0P:Uç¥É€"ðFªê¦{øÐ;GˆŽ…i“ý€ªb¢t.c€Â„ÁÆ¡¨Ÿ@1i8Õ¾HI<óÖ±ûoŒÖé\ÝÈT(¢@¯Õÿ ÿÀNÚÌNMSf7U¢ªõt±ÃÆ©7Ð×pÌì}¿ízt%…¥U " $–M]âÄq…иUíÑlçcý él âtȈõë,M$¬eÄ£ô ªP»Š4ŒJ‡˜ö¥G|‘¶F<ÖîÓY€ž„ãø,Wˆd 3È‹9x2»$"±‚èk¸„ÅñÒÙòj`åþ3Gnnþúáwx›w„QJ›åÕg(ûNyÖ}÷&#syžK#$2¦6züsH¨“۾ÜvpÚáBZO¤G›¬…Ê¥ÅbR·¾Žýv}æÕQñë\G~AÊ"‰LÞWt °þ¥Ê?5µí°˜Èï•xL¼™Ç\âHþý:¡¬KnÎ]¸QFºÅ68Ocè:†)ÊćyYB"ëc¿j\<ÁIp.Ö°ª=ÓijhÀšT> 8 õÔ@¾ yg…sÝóÉ~üAÛƒÚA=¬c² EabÝ©ž3ÿܦغñɺDœt|ðH`„“ú`áVÍ`ÑfýÅ´ ñ%Á \jüÉ”¡rlíÊ ÿçñˆb¹nàß2œÀÐYI¤M²mZeÝXR¤j²zŸ‡VUUwJ':À­HÂàŸziö“¤Ì–i<¥:½Á¡¼Ãÿ=kŽƒó£¤¦Öñ$ã`*IÂßèøµ+€òóÐÈS6/zD‘–òù—V±¸ú€‘Œ^1x4¿Ï˜›À§OíÔc°I¹ø…¨ê¨Â&ˆ¼d{”ØÜ:²¼÷PéUÐK×0‹’Ð#˜0áäÜ;È¿ß?<èÕW÷W¿_é­èŠ­˜¦çPA¤2\mË«_£«L& O“Õ7³´\õ¾ÅêáêW·úæm¶-Ÿ)%R’ÒÖ"wŸþxï»Ùa€36Õ„Ô3G:}ÓžAúÖ‡Ì.É g¼c¨‰Ädg–†$‰ˆß5u[ŸŽyáóöÉÓÑŒ Ù È[ÜPÔe¹¹aŠ0σA¨’²ÓÆ%°ãX¤vxÇÁÁX£Bïk^™ë Ýþv¬ÛlzÒa¸…¢¤/”ý¾É¦Òmt²@óX÷‡cg;5þ[éa§ž‡æ¾Ýã’¬§›@Oÿ¿›¨?›™™èÏ6ß°ÕÒ¹ÁneŸ{*smàü€é\@>¼‚c]…‰$Œ‹ïCþ":%„KMIÔÝ;_B~ XúŠý ´°ßOËi+îS‡Âo[¡gb+Ž03¹†suÓè?)R-À±3ýò5í#S3í»S\¨¦§øóô+"¨Gòÿì¨cìÏET‚‡Û«ò-iO³¨™m½ÄÑurÕ É:Œ ן®2¦3ŸÊOm2K¨¬wYÑþàKdDh-ÓõKBHÆrꜤlcFíOì˜M'5™¹k­vjÀxJ d›{.‡wO’DÄÉ‹JÒ’³pnVIähùÓi¥oú¢{шˆñþ²¼Î¯÷×'!ÃÝXyø‡rd,›nᔳ·cBY6\Î.}¶us§ºÚ 9˜÷²šHå«/Ãs.ËëÁ|wýÖ1pѪDžsz#nø~P^…ñ„±Í¬êÇÛÛËÉ“1TýÑŸühJ|x^ùåãÍOoJ~¤'ù‘“äG.’é’9K~¤M~àÿؗʾ(06 ? N2&î_(³fË¢©/?ÞÜݳ aœÇ¼T|ñ¢³@ûäÃ,M%¶ôMˆ2˜éâ÷P†lÚ¬²WÐ*¼„´‹²"s{pwsé½ Í‹g Añâ™»jPàþ-XEp7ÉHâ€æ“?kŒ†<Yõ$R)DÃAM.‹™—ùš›Iáliyë‰Éå·° ]¾¥KûPo>÷?cm@k,rÅk/Û3võù˔¿»Ÿl4ÝøBy«Ôn.’äDH‰¥ÎËýŒVmz endstream endobj 81 0 obj << /Length 2861 /Filter /FlateDecode >> stream xÚíkªÈòûü “ý°Nrex*ÎMnÒgx¹ ‹Ârbv7'ŒâH‚G`ÏοߪîEñžù~¯1¡º©®wuW5ŸÂ‡'k<èÂtEì‰><Û$cà6ÝQòŒLPÃP¨Ú'  V¸YI—u¾eÃ4gOÃzÔÅ!™ÿ‹ ¿ïÓÍžcpÔT`„Šc0M)ñSò(iCY§£ Øq<Àb2×h›Çˆú`†ß$08Àà’ Á¢ñD°üæððûŸâ` /ˆ‚2Õß)êa ã)Ù xX>|ºŒHIÒx0Vñé-©„]üã`T¦âY#%PšÏ5щð¦È«8ÍÓüE„ÂÒð5.“’M'hì¿+æø bœfÎBh_✓ÜÃlQÎBW¨Ò=„Á!v£‚;H¥Æ£'É×ñEš—Uœo¨0ð&>% € 9hÃF¾aOiX—TT\ÄghTáS)>©)àÍ6®bT¹¥ œz2êJr*9õxCÑQÕÄù¶/;§‚¢O$Unâ¼/;ئ "PE0Id¢²¨’¬@~ØDd†$®àû ºnOýŒ±³Ç‘¾ƒÄmÒ§L¾Õ ˜šggk’n¦ðÕ%Ë’;”øD»Ân…àgÕDšT“‰Ä®’#C—žÁ°¹4 »íýšþ•¤¸áµËoÍzŘ+`ªKCˆ8DUV8ºÌi⫘MТ°+¦,‚pMk<Š–¥où!É+†ÞfŽAóÙwªDͦáäÀýç¯tË÷¡ÑXè櫚ÉÚðÀHà M; T—uœeïlö5a“q=êKº ¶Ñ*Á<†ÜT€W˜Æ›Mrd .¯Y– g›”˜(}m0ãW&û#`6Ò«Ú˜K\ÿÛÇSA?ÇvUWÅ)³§·¬x…ÌW4$©]F3åÈ™ŒÝô†ÅŽ+ÈŽ(E×Àz×.eÊð1r‚ªØ s¾î‹ŒŸH\¦F挟!YQ|å§K–~ÅUIs†¥ås«óX˜Nê *ëÈ|"L…1ÿ Ü-ŠÃ üõÅu~õæl( bëAXåúéÓç·9Y€tÀø/r¼Ð7M7 QH¼Ï¶áì"2ÌȶMâÙ+Ï‹¢µÿ9\®,Ë ,Ûð‚Ð7H4·¾¹Ä±]7ò– Þ¤áHz9 ‘øÄpÃ,&ÈÑ&‚àÛ\Û8š«¹å–†n¸¶|Ç€#]èØYF®M9’[ŽóµýÅwÖ/¤‡£i›Ÿ—^ä9ÑgâF&p4"”–ÆÌ›­<Ë ß =ÓµŒ•å:žšÄœ»$0 Ïu; ût´½OÚX7G–2°ôg‘ÚAD|/ ÄtCw¶ ÈgâGkÐ!\›a`GÀ2r-+;²4-Ëw-×öÂK`#Z}vˆ¹šÍ>àI›Xa{Äñ@S|ç¹vh‘töœÃ…i'2|sa+íEäE/`;–íšVèûÑ’õÒÀYŽ–R¿+ â… 'b,¹ øžCd¹–ÑÂr=/p^ „B€„>A–$rHà®å‘ z {íJˆM›ÌÀ8èNW°Üã¹¾G–CB×Ù™?sמiÍ“Ìfø:X9¾mX61ÈÒ&ó… ÑåY+ט}À• àœsPÐMwÌ]oÁh»qK– ärmAø͈F„ØmÔĶL׃e³—™ç}À•`ºµÃÿ8ŸÂÀ]¯î!_Ûwíšž½^ÚPBv-Ü#ýôÔ³·Ž$´R¡¤€ÍQÒ¹E Û*ËÃcq¬3z<Âàâ˜Ãáí‰A‘°dCvØ´]JOæŒo³#,4¶wˆÀ–‹U¤¦Ó:ŠâЃRᤫš-È*i…º{9Ýÿ /·ÿÛÊB~4Šì܇G–VUS3&Û´bµ3 ^¹¶‡ãÞ=JÃ7ZžªC£È®.K]¬äÏUiÏɨŠÐ¼µåá= ®<¨+Ð[´+³4çÇU§ ¾¬s¸»«:ùì_ |ÀÎNhLT­1Þ˜¯ÔpÓé]èeĶ;é:I&ç:%mÈQ au¾Ø=šA*lAÀ­ %ç‚À+'½Î:ðœwáH»àohkÎàfÕE\ãð¢†TJ\KšÁH…”R•n<]6W´ÁÚ.=ËÛ4ƒ¾¨ {í e«¦~´¯?—I›âp )$+Ósa]²qÌ—0dU5¼5Wtf#¥k#eJoh°Uœê9«`Ä´ ŸF¹¤X2³N@qÚ5HÓaÄ?(Ô@‰_ÄÍ5A#*«RË«{5(q]÷R!¾SÿY­jðö²âdû¥þ~Lž{.Ú ðB±ÿ°ŒnIGmŒPtæ£rwŸûP*ï<~β¦óãf`;BE]몱R|¿Øí+q[æXâʬ«àó3{BØíR :РCr¨¬Nõ¦J‹œÍ°0DèÐv_8:w_ãînpsæýÔòÀnAhœ€`%¯§:>½³Y”ŒˆsÙ«êøüôD›~vð§»ä_Šãû)}ÛWgÊ/,´8Y9Å÷øÄmáÔo{ŒK„çp¸l⌠f`…Ÿ=gh’$ãRoS°ZúZÓ­'ê|›œxüì¹ìÅoHòäÔ°òë×,Ý0ØK7I^&g lßû‹šC¸«÷èóqÏiNs¨“Ó?¼df¡ú¾~=ùhs2ÃjBUšSíÄF<÷<’Q‡ûxË&y–ð!ý@!8ír9Ÿj“vMlÏÏG€ùzZÎ#ƒv+¼).`{¦|®Œ`À+#*Æ6ɰÂP”¶Â¸Û³4wãMÉ¡Œiµõ ¿½-ñs‚ü±ÊQÖ•ÛÊi×;4(½’—å1+¤a¾íÁØKâ³/H† …§rY>°STó(ÇjjX—}=’. ’(5Rú»ø0"åÑód*H“¶¦‡1+ÞǪ0Ö•kËR­.oœûo›¯ä¦3­Ü¸¼OnI“]Ô.å¾ó‰±{õ>{1S…ém¯qƒ•ëU3KË'E™ Ù“–½%GÆ(-ùº’aÅÙ¶û8W&ÙnĪÛcCûÄ]È ¯åGš¬ÜéRd†FøvãéÑr,¨çþðòî$À" z׌*ìØ´ÚÈ7â}©*ÁuõÙ‘…x!Nx3Ýë°™¤¬è•ÌnЬ>ä¼!M©)³{ÁØiş좠˜=øgJ\„²R~¸£2pläeÍ%‚c#Eç´wЊ³ob¨’,ë‚:– B5A›ð*Z›¯Žÿû2¾œ endstream endobj 84 0 obj << /Length 3232 /Filter /FlateDecode >> stream xÚíZ[sÛ¸~÷¯ÐLVêD4îïtgÇNܵ'òîN'ÙéÐmq"‘ŠHÅu§?¾ç ÊTº»}lý`\œËw€½¼=:¾`|d«˜ÝÞ4iJÂõèv1ú8^giQM¦\’q^»r‘}"„ÙÂ5ƒRØñCº™ÎË¢Nó"/Ü·t•?ë¬ð3çåj·nÉÕ¥+ï2O¾¨²íd*àK^¶ƒ¶Ù*­ó¯&Ç™[¦KUYQíª •ãd2•ŠŒo—ž–pE•M'¿ÞþuDFSJ+¥“éË.+æ¬À,?N(gÛ [l\«'×?/wE2bwê§…kbŒg÷÷Sç-Ð)ܰº¬Ó•«V™[ÍÍ+p±ÝúůŸˆ$È!AŽ A 4'21Ôß ¿¸ ::¿=úrD¡—Œèˆ[‘«FÊš„:š¯>þJF ø'ÜšÑc3t=b‰BZ«ÑìèýÑËÆä½Õ¬N¨q”ˆanMPîÏY Fö©¤¼w ÆàÆ8c`ߺ\d^Y±•¢IÀ–*ÑDö-³ÛÀ8mÆy½tµÔ}`€j[nÐO®cÓ(+e•#„\ U|@ÍTóÄ(ÙJ³ÍŽaê€Ðœ%LwBïèæEcþ•ãuVD'î¼r £Q”$‘ƺê]^{à6Ê –&¬¯ ‡eÂÇE6a` 1~s}ízq6ÂUŠCœv® Üd@`fªx+É꼯Ér½[‰DJÝ« XäòÞÑÂËã*ø_º)WeùÙÕÒÚ«—¹ç#È*k뒤Љèòñ¢,¾«]u‰/#ЕëÉëï&èõN§Œ˜åîi5GÓ,·+ BT{þÁhíXíÖ4ì ×S”µ«x.·ùE¯¯¡àéW™kU®3Ã"6Wùgœt6R‰ÕÜ4fc p­˹ãºaƒê!ã<¡®ö/W\dwÛ]º}r-F(ÿµ {@Äò·§×ç“)e0¢µûóAWço_ûATØçßO¯nÞøïé:/ÊxuC>\€Œô¿ºˆÞƒÏÞ½yâOY5ð}ö-ʧ70ךûêô¶•þv¹ëÔæ*TøRqÂUÐã€gçï=¡ý_\¼õ_1 #ý8ûéº]àÀ-%v@“³ÛÓÛ™wõîìôÊU¯g?7žHÆSpU‚¼ûõ4±R?_n˜ÌÏ—·ç^^úÉSØòu³}ýZï>ürúá•×ÿT`ŒÑÿ‰TÉ`6Ÿ‚<8ñÌ—¯|yîË _¾öå_^úòG_^ùòÚ—o}yãË÷¾üàË™/o›’Žöí_|ù·†iIFYÌùzúà jª _ÍÀ< X„ÞŽm‚” ‰¼ï×7ï¼*Y•”¼Å["™Ô­bà TÛµ4ºÉ~Ôt-ÇÛµ%*̳„Úµ`5κ—Œ’nžÒœ*ÔÊM)­ ß±4¬®-M¥4 +)´ «+«dVr$Rp” Ò8,§E¬3 j” ÝLPzÒZبũœ @ªê¾ ؉D÷M3IUШå$ð­´V<´,ïì"X›²H¿<Ò¶æšF:4T™  kX ÉµÑö€ 0CƒžŒ°¦¢€’çîg-E+M´!\hÂádZZ˜`ÒvLÂÅÿò „HÜ©Æ|Èú³ßz•N´…³ñ„uŸ¨Ç4'„›Ž{ª5VÖŠª`®À®‘=àœÙCšàLKM"; ⑌‡oRpVóGº“’D-Ë©‰ð 4¥’&ÐÔ £`^ÓJ+Î4 8¥  ˆcµ.–~uÅt¯@µR…ðém ð©‰ÏdIcèQÆcàKŸFF`ŠøÑH~.øRFÀW–ÄÀkÞ¾P1ð oô¬‘‘´ü§ ð >èX0ˆŠHØ7H¨ÂÆ@v-.QU• áI’<3˜wa»ÐáÌ`P*u¤sCDZIal°±6,ˆ#­fA[’R@j |ü? §ÚI°µLFÖ!T‡ÍBrˆ`'1M# –³”kQáŠÇ®¥T'­`T„€IQéÏv7ÄüçÈhߨ‹¨g@·É¸ €Æâ*B"±¦·ô‡²½ 8ñHð©c?ˆ2lDõ6ûAF€B8`KÕ‘ÀÌ2€pÙÛâ@%ÀGü¢´ pw‘Î] Âø@ §Í`õŒ@ÚyhHÈÍr—KÚ,ê„ö6‡ããûç”ŠÄ Øè\ਉ®ÅÝuÍUOgg——þ¢Õ»&ºû¿»iöï{ÍÝ_äýu/Jk¹û½+g˜ài¯ö&q|r6ȧ—óÍêÌç2Ø &®\Ó-27Ç˲ÏnÔ­4QšYIëô.­²ýdÜÓ÷¨<׿º,ÀÅ+ýf›Á%6½Ã9˜Úñý‹5ö¤XÄ™+ì ,a ïÞX"7óe2™ÂÞ<~Ódisjß­VnÔ®›¶ô•ŸŠüf‹—il´­~~ Žx 'fÄá®ûv~ËšýW¬Ø%À{uC ¶ïÌ­>{Ì«jÚpãÂ9‘Íà^Úàbbàž2»Ð›û ÓÏÁ„!žÖ-æ\$MÞ›m‰y›¯y“‚À„–N5XÙÕHFåéêô)9¾Ëæ©S" ÀlR3³®\e•nü·*ÿ'ÒÏ\Zb ±g6-ºЮÈ7^ð=å+^ÀIÛÀAQÿ¹E¡œ±BÒx®pÍä>­êt¿Ò‘ÐDY'm)fœq€CLß8!e¤Y—2‚ê^ÊzR,h„ìfF‡l7©X<|ÉtÏ­;[ì ÷¹Mü¸V†øGºÞ¬ülç~±‡4/ªzÐ ®d¢•±±8û¸ÍËHPÎP õ¸ÌçË~\óÔ}Œ‡qÀŒóùØÆX¥ã´ºB>s?ëèÃcõr\ûH6Š``c’”é|žmê&ÿ®0ÿ‹4zù\"Ð1o¥OÚ«qþQ»¾(²Â—¼ØìjLWCý²öK¬ªÒ×ÂÊr|~ýòê¸ [ Yg}OxO•/^•‚¶K\ª“Óñ문K‹Ï®±74 "Søõ1ÇXÊaH `Ádó<]a8Ç‹¬ÎüļÈü„eZvŒ¡Õ%c¡Þ$h±,¾Ç7y.å½ ª{Þ=MBJ؃›¬<:‘—ã´z‡é¹Oœ(wÐèP—þž=¥zŽAÆáxÅÅoÍ|k¼¨µƒÛ÷ \7¶r·òg—áÈè*­ à ¤y_ø܉68BÓì1ÖôŒÑLãÉo„wmnõ»bt?†Û£B*1R?Ñ ?ìñWîêÁ#›…¥¡ÞõU¶ÉŠ…3§±ãæ0¥;üX‚¦œÐqç—$`‡9õ¼poInÙÕà»®îñ;`u&öÌêÃ̃"ïžyª¥·3,àí µu¹õ<6.…ß²ªò5 {è‚ë ãò7Bßc=DšÎZx{¹ñ¡«wšð‡Ö-‹·€C»ÍmP8ü[­ÂFì„!p®'¬Ì»39b[u\Gçv3òZ9¾*ZËÚD…w¸%lgÙvè6Ò êe»cÕÙjUõaÚÍ0 šz@×Ýâ¿t=0Ö}izZ¶‘‚ïjÂv?ÔúeóJT ½ç€¦,&/ý‹Ž^ýÓ ÷Ÿœ¸2îÖïóžèHåž±·=\¸F;«Øêâã³› _Û_ ”»ˆº ®òü5 —ýÞ3\×›“ãcà;Û&åöáxàÝÂÓ?+7OÛüaYÒgA ëkoÊÇt»ðõÝÃ曇Žl»œk\‚°9@7KÊs±Í²•çz‘Wõ6¿Û5ø.Š"¤šjB°òúíO¾’Ù¶]éfw·Êçþ#ŸgE•^ß\}mÔq˜éÿfqHÉJí‹Ïñ H§Äìïx‡¨´G¸Ã0?ñ6~»üD¹øûÞEcò&ÛNñ§ÝÍÊ-x·ƒ{•k¸˜{âo:†ë»Õ7É.Êõ! Ó¾E¹ð?i(øáÇrû9À{ ñ³jõÁþÔA R —°Þ#FOü«j÷8î’Z¯ÿB…xOŸÍá(àÍz_zåÏKÜÑë¬Ô*jÞ °™óÕnÑ~LW>þ€ù1´c9Ú–-ܤñ,Éá´"Úô'm‡ÿ ]äÈ endstream endobj 87 0 obj << /Length 3792 /Filter /FlateDecode >> stream xÚíZ[ܶ~÷¯ ™<ŒHêš lÇöºÍÚ[ïEvF»£Z'#7[äÇ÷Ü(i4Z§i€¶‘‡‡ä!y.ß!çùõ“Ï_»ÈT›xq}»Hc•…á"Ñ l²¸Þ,¾_^o‹³•5zÙk×l°l°Ü•®á†²ebœ»þãç¯Âx4¦Ö‰J³tðpmñÓ¡hÖ2fçvÜw[v-w>Ȩ04¾oU¶:[…I¸|Óq?ž[/sþ 7¸[¦ìÏt°Ì›g&X"½ÌªyV*ýDAëö0x°ì<ß vz`†—«g&ZæÕ¡8ÓÑò)P­YÖæ±+£#eÒp±ÒZeQ$‹-ïšò‡ 0ë¼¹L’â”\@ò¾í`bý”)·g6X¢ 0Ow$Òˆ¿9žûìêúLƒ «ªäuqCÛ=TŲ‹ÑÎ2±)îbˆ»¨A´D±aÑV«ÕÙ*‚åí¡ª¸4 ÖˆA§¾„¤›wKš?Wç(]ÏoB,ýè+Ú–PiÜ“Dáiai WÚàŒk·÷å›2oe€‰©øy'Ä·ò½êåO‘ᛢ]ïËé)ÊŒåXñ¯ý¸ìò+L~wzª²ê;¦£aˆr"H¬¢bGÒÓ£Ø*#r$ÊLxâ­i×~ßv¿\F§Ñ/ß½þñòü»‹Â{ñàî*wãOîÝÕW—Û‡¶èŠ=ê|½wëb·…Sh™ôúí©èVYËz±@»Œˆ(-SY•Lx‚žÇDLøËùóç?¾~÷þõ;á=/ê#ÙÛÃÍ¡);¯Ÿ]Þ/éµÛ—U%õ;0«ùC•É÷Û D4_¤Â OtÂ3/œ¦‰&ùÏÿrñìío–ÿÜÕNxò]Yé°þO-ÀÐ.Ÿ½½|ö›p™ Ë.oÊv}øo€õò_¿ÿ÷åïöØcCò§ÊÆÙx ÉD:Ý[fÐ[ï”'8áyÔz“„¬÷åÕ‹×oµÞ—íz»/×Û®ôæzWÞܸv0Þ¯$H*3f,¾Rj&ì®t¦´I1ª© Œ3UÞJ ëî1º:®¬]u¨›V¢#RÐ¥;´Õp¾!ßËP³Ék)aàÆo‘¯·Â”ïï ™qˆQ4N#!Ò‘›Ï+®mÐóÃ>FKvÿÊ«Þ86ór@>ŠáT*뇯Öà õ úF¬o‹½ôCèßÎ$+®ñ8ÁØÇ ‘1± ³ìácÀqzBIª2úž 1JKò2ÈÖvyب\Ó!aMÖ«‡ý°Qr¼O¤’ˆ‡Â@<›Ä¤|á0(ù5|q¶Šl6to#Öý¨‚À DªT|v¬àÑ ÄC?ïjÊ,2›‚ñÄ1 t·­˜Š¦ßœ?›¼Ëoò¶Ïs×±^ijý®|y;`[*Œƒ ⌮! Ô¸3½l¶àÃ+w炌<ò0šw‹Œ†mìñ¶YV©¼-û‰shÔÍ5nÐŒÎÏàÑÞá$ØNtHIÀŒ±„ÉÑÄ@HYÓ ÷dÃEÌ ðûH>`B•˜9¥ÇQð|Æ3 øÌ ×{´®È.ï·%ùŠ‘8Øg-Ø8RBÐ2Å›&F3׎nå6!÷"[D–L e€ïaèǰ !õ®hÅä~µ|Þ8ÿ•«…uW8`eƲÇÑœï.¬9×e»BoX,›¶+ò ó‘3bÞð÷ToL„aoÚâHò“ÁgÔi㊶ù¬óNwWô(×`Tc?4yõÞÄF‘„ kvèÝÞ¡FWR=¿¸˜Ä†žs6ŽÐA|ZíSÐöEØ9M&z„"fÁ#Úža–x}¥ôåT©uªLbÆJ‰ O9ëƒ9á ö>éF2uL¹:(_šÐ4dŒéÑÖ¦)i£kK? êzÞqÓ6— oŠBæÈw»ª,ø¬´ÄžÙcgI.9ÔâyB=Nï¡F*DdR!¿×´ü!=Õ‰B›-¬ŠµŒ«gv)Sq Ó¸^ùEã¨÷¹œ(úÃ(6…D‡ì¥ä €.ú|"j‡ÞE…aä2=yyýä§'¨ÁB/¬ÍÇ"L•ïº~òýß‚ÅÁN”ÍÒÅ=±Ö ðèîªÅÕ“??yN—.ãÙ@•Y)Eó ]{ñlfàLÖKƧ×oð†Ë’DÊ´ý†ÄÃ1q% ‡ðÅL’A@S€>2ÔÒ.ë"o¨zÝɬ„a¤Ô èNPØ] ØŒ,8 {Q‘Á˜HeL‰j²¤÷éÀtä\&È7?´ïïohX™µ­ tLä9ËÎσƱšógGÖau:2: Îq$ÁYg>ÒOWÖ—Pw`†}Á+Ɔ¦ £AfÇ­»USšñª§&õ<|X@ÂÒ(ö"G)äûm!}ËŽTËí:<ÞÓ™ÕÒ|±W (´„Á±äö‚X¼åotèá ‰âhÔy0|¨±á#y0|HERŠv¸c-7㵃¢}Q=à]ØD&Y;”Æë%…ž™uåww8â¾hÛ’6Œt>[;ÜmŸŠüt“ AN‰qVË\9׬½1{:<׎®¼˜&Äš¡â»ðš#°º 2æA$˾-†\ÈÆ‰·Éþ˜a¸ÑRç´4§ÈÀQó—Å€ÂìÊÞö›.® ä ¿lî˜aÐ\Ž¿uÙ¶\’ð(5ÖÉò;º€ô]z‘ºG%_ÝŠbtc›ƒÞ‚b¢ð8ÜEˆÚo¹á¾ì¶\êîÄw[Ö{ÈÕ NòPUfÆ—F G}Øå’‡FµdüS—2³l˜sãh‘ ½!á©Ñv"KíM+yÕ:fg§F(<€¡ûœ‹G€>Uj“ñšA!Àc›H‚<:8.eì±Ñ„©Vy›¡7öwÏ•O˜)‚€ÈÓ;i[òl쌥/—¥ufJàŽÞR´†3öQÛ&Q•AÒ9’Ìùy :•_AxŽb@xXë¶ûÂ7ô`¯e]^X ‡yÇž€’¿3y™ ‡ uv>P§ÍèÍ"‚0ÑÆhïp¡€Ö[I/æW8 ‡[2k(lÜJ°ÛÌÊùæC£ÿtŽ)Ç’¹ŠJo~ÒëPKÔG“ãÃMàÁC¹Á@‡Šà8¿ xÏbt^ûñdJº×Ò€rG ÃJ( "@V8Ÿ¦›s/tXý¥¸/†D>þ“µ0…Cf„ì´ža(ð-W8*þNb2& mù… ç-å -Çøô';‘÷ ƒŠÁ@:§÷iz`bMî„ ‡sO—¤ʧ 7q¸”à0êS»MQq‘8úÑD^,û!,£GK®£–Dj|–/†ïÄ¡´êÊÝñíÜr©“åi´qH:É´õòù¡¬6GPoö®ÁH#Cu»‚ß¼yä~M@ô»d¿E6}$ *`ýй}™WŸß6Vµ›»ÝHUõ±+ÛÔÅ›RPê/­Vã J÷c ê_4’DZ‹O&ô‰dº¼¤Ïknl Ÿ(ö³}ÉÖ;@ÉQç;ç6ÜñH·±‰”‚8õ²™ ÉU Ý”ÌR?›®:·Fç÷aë*Éhó¦q³(½#ŸÀn}¦!zŒ†(›ª‰|b$90":ï~óêa¸äó>ÕŒ²—¹l•NÓ“ÃL¾}yu5“fxsn!_Ó*ÒÉïI3«Ë#Äçé¿yÿîâ匙X¥Ã…òÓay3—ÏÒþ&훽kÝn[VùÌ#'kÒHA¶nTÅ€ÓÁ¯¬€*Ff|®$Ç׃lîÐÍ=ÒЈ ÷é‹`{L&á&\Ŧ‘y#!7ÜíBõ—iÄ[rÈ –•s¸}¸™D:ÿÿ"Ã[84¨á7ÒÒÌYQ.Ö³.q~•i¬‚$=t„YæïȳqÖ Sâµßa$™ Ó äå§zÀ*ýVËà¼ýÿ¿& aø_ø×„ùÕMh|9Žÿf Z5ü­ ìßTM±ÒþE9ÿ;!– ™iˆL¾dô?Šå}±~›×ø …Ò¾‚sÿêrﺢ@.>²ürÎF­Vqªå!Uœ÷»?¡cNø‘3AªŒ ›MôrWr@äFÄoø•÷4ã߯*ˆer%}îùqÛùÙÈ|ÛqÉq’…9¼ñ—Y8ªëðY‹#ƒJÌðÒ&÷„@’½¦ÖCÝöâ˜Ù¬1ô̸¥?5ô·š”ÖÄSxfu  Û<*¤Šx2h—ç2`„1±‘‰kF£oêÑ×cN4Yuœ¨$þ]݆*Šy¤(N>Øm ðœ<šÉ³aä]",òcìÆâ~dË 1d¶ñkV’j39(Ú´àøšœÿò¸lÉ¿à îõ%>Õ¿å/=­Ž‡ñï3öÈ«bMR$(\ƒÑ¥~0¤!V|îqB<û|…*$/LN1É“Q)¡t¼Î‡ÿ<þHÁb_.%ì‰oÈâí˵\O¾ÂÃoN©%5BîÐ}Stôømú`M¼üÿ[`˜QëÂÿcÿ¨_Ÿ` iM€†‰^]Rrf‡ÁGoèÄmäÏ£åÚqò†^wþ¡z˜ÞOØhœü?•;Ú´dÒø6Ž¿ý)Û°¤Ä'"´®*7œPGÓ÷n$9ÏßIöÁ”VCá]sjò‰YhX{èOY»N¥³dbðvá ÿ3k@!5yèÂà†T°u• *Õvò×›º-íß5ý-×ùÅÅË÷\„CÍíú¿åÔ˜æ]1ý—i’7{Éôm0‘÷p³ÙX?Ëv[l0›Ãå_éºÎO%½¹—#ö³ù»ÒD’ÈS…<Ëî‹>ÅþÞºÞæãwÙi‚ʨu„N‹rÚcü¡ý‹j endstream endobj 90 0 obj << /Length 3355 /Filter /FlateDecode >> stream xÚ¥ZYãÆ~Ÿ_! æ;4ÙÍÓ1`dãuœÄ'ÞŒÀëJâHôðEÊãù÷©ª¯š‡†» Ä/£fuõU]õÕÑóúþæóoŒÝä~ž˜dsÿ°IÍ& ?°éæ~¿ùÉŽåí‰×QëÌÍÐ;íþ7S¯z@¯²…ÞPœåb_þz)ÛNp,N§²-÷Ê׺Õq>OUéø»ôüriAÙum_õCÕ–…[nÀw§›ªöe;T»¢ÖÏvÀ ¼–H?ßÿclîÂÐÏãg=—§²úÛ0öøxIìÑA¹AKµ¼«DçNøÀ]¯$7LèÅn‡e‹º~éPývK‹–=Ø PŸnÃÀ+‹G|«½"—Ä ”$BÚ´ ¼g04ݾ¬ÝöêzÁ}µ—§Êõ÷—fíÀ—Ϝ㘖ö#ó0eº:ùÚuçMu8 Ö]÷ˆÖ{cl_Úê}˜]ÑDˆÀÿ>ˆƒ§cµ;‚³)h ú÷Bò ƒ€EmÔÎR8ÉógÕcvDÑÎånpîoI$!ÄóÅí]¤Â¿rÒ–9/"Ž(÷Ž<øùÄ*ÝóB&vs}vKM>+³ å¨lWŠªíô¸AñPŠ@0WzÇH¿oêóo¢dfj&É|k mÚÇ ›èð.ÌÒ&¾­c]®u§•»F)Û¢×ÝìºæÔõÕPuí+‘ ‰*ò“4^Šzžf¢œôÃj4Ð((.h³Eé«êÛÏe7N—ú²Lùyé" y׿;•»b5ø£ÙùþèËèßaº"nR,¢ù·t¯h½¹“õEŒÏwv§™«+H¬ªº“p¶Fh3?5©[åË/Á“ÍY2ŸÌÑq„+%qdãM³˜^aM¨ÍŠtñ[W·†ÔR „ÙU„[å;vMWw‡îÒ/ûŸyTw9ãk!lpþЏï”nŠ@ÿÿ“ºIô$&õ`fDš‰è³Ë@·’:®¯‚º¶¼ÿËp5sOÆXëàm)¶HTÒ;²LP¯ÖHuÄk»%nS7[2y*žÙít:‰˜Nçn[ÈÆø6l±±pGl*·î;—M7”`Ð[ú3}Y;»¶%ØŸúŠù-1šÈAs¬ƒ) èÜ ŒeÝŠ–‘·qä¶•X ozž_.½NQ|È~hìüº­Q;ÿþŸ¼wöe²jôG=Ú ß%‹@t”Û0ä{QRvýãè 2# †ÙŠiÿ_Œ'£@£d‘ý^ì9Ï|`>—åW·w1…yߨ’­è‰ŽmNué'ëpÍ0"ÐP/ñèniõ¼R|‰7iR œ#.JæíÿÆL7oîo~½ ‰l¡=ØØlâÈø Û57?ýlöÔI[ômžmž„µÙÐd95êÍ»›ÿܼ–ˆw¾š¡K "Ì”$zªûß¿þeúLîR΀<èOT68ÓÓ±¨õì P ½Sá2G”žb“{;mV¦CODPEF‡± ¿aT;T ÐMh——%¡Bz†$œ¢ ×O–Tà{Yj+ÈRkYæ@4Ècæó%>ã›ñ~œÙ)÷:ÄPÌÞ~õ ¶)ðVÚåB,5bn¸ˆf:ÀŠ^5¹•¦lu°Û©›Î,Žä»$ÏH’wp}Ë&á(ÃÑñ ̪Ös$&xÀ@‰)pg±Õ:ƒÁLèeȨ'wG=ªrºA§­Ë¾m¹/tèÝCÚ0Ar&Ú(ƒø(‚KcÒ¥i‰Öñ9¦mGš]pƒäÝWð|:Á(\HÐ’èŠc±â,ˆ’±€lWFœÞÇ Ò€·ªlHí0t_õ»KßãêJ v:µ/±)6tg:7MªÌ¢ãñtUk˜,]Ú‡!}rDÂ"¯…ÛÐÝSb«x)R¼1‡z£ø5PyïfAÞíð:ñ:æM"gòØ‘]̳»°Ä܆P™¯«¹æóÛ)%¢m©“âÆ¶ÉS°½/YqÛ’ËE,;D,.>àCPÃó€J§ ePG¸Ã•QÃ-‹ 63meÅcÈ$Î1G’ÈO߈3JC€À¸&@?  ®êjx[ìÒm ÏPáHÁ0—²pÃùcn‹õce.j˜À^(æÐ(bÙqô‹ëX¹Z2—)# –B³¤ÓEïºd½[)fè\¸cZmºBÊ)w]}iÚ=GÎiökñmK̪û':y¿îsÂhÄahç­Ó‚ñ …:ãP5 [Ä.v`\jÈ©°¤«ÍVܼQßMô½”Vw:‹C9, Í5£ã&Y$ ãÊt\F¤ó¸”¾v];8ÿÆÑ i@Œú!ν¤ç‰«£%N”`i `K^Š”ðÊÃlôp¿ŸV&~hsÇ£ "&é’,jt6ô³`¬ý´O¢kŽÓúi4^ë\μ*Çé$Y>e±Û‰›98¯™ú&¸òšv”‹¢ŽpFØ0röZáf‰´H¾ ¥læ¬E ŽY ‹„ìàâ×(È^A¸{7J&e){ÈÑE¥˜à¶æ^ÃÌô¨ÉÄYRmP¥jÎ#Õ­p]AOÎaÌð;Mû@·¿Z±Éе=³°WÈè2ÃWyï.R½4Óc¬^5] ºæ¯ r\ÕI«Ez'Uˆ^{—e{9= ÝÊ0¨L¢¥¦Ûh×ñ_pñܹ¦ü.àãT»O+?tfvqÖ .Éäc%E j9³ânX*ØG©ÝõV5zÅ à~i§ ÐÜÃ.dNŸÈZÙ&g Aæ½~Ç|q©EÓ£Äe8vT}ŠßêË~|ì ‰‚"Q¸óÉ€Ìì¥ÆX]un˜ ;£±ŠjFE{턚õ˜YÏ¡ÛÚÌT]`šFâH qrÎi°¹Šm4ÖZ]÷yŒ9) „TêZ%âu€GoñJ$cÆ™f%$æ©Zõ gŒšI™? åidn™½ïÊ|y -Ý*/C´ÈF~–ŽIÀCk×?Cÿß& ¹š‹H? Ó¥ðÒïÞ¼{÷²Ö™ç~dÓM˜?LÿH©3 hÃ3Ñ¢ªš_ÿðýÛ7ë/i/3žÅëN–’‚i> stream xÚíÛ²Û¶ñÝ_¡L¢3 xI&É4­3ãL›¦‰;}p2JÂ9bB‘ŠHÙu¿¾{x=¶ÛLÝ—êA° `±Ø]ì.ðåó'¥Í¦ˆŠT§›ç÷›Lo2G±É6ϛۇºÝWMr·ÓY¾moýåÖGw;“$Ûç'Ç­Çö\V —ûr§ãm- û;oÛëÝÏ¿†yì&‡yÒçQ©Ž•obž&ûãÓï¿G´'OŸ?ù剂öx£6:UQn-‘¤¤ÃùÉ‹ãÍ€_oâÈù桞7:J (Ô›ïŸüåÉ—´®ñ|:M"›ØéâþðÝŸÿôTˆ3AQJ£Vݶ?w¼žºú—ç> +J£"39vÚ©BGØ©”¦¢ÎŸ~·Kã˜øwžp§4´|çß”gŠà_Ýêú³o¯mï•ØÒ¹—®©]×}Jõxûô÷Ÿé(‹`êSœ£td­Ùì2 gû ™`ßC{u2Ͼ*;)vO_–õÍCªPÅùNçóýµ= jÜÜ·2fYW#8Ôfp×¼Á¡6À ’_Dõ. 0wDõn·ƒ^9àìèÇçÅ·Ug¢é?© J£áÉU‘‘"H¬3¥’Ê–ÅTI!KxŒ(¾˜"•R ˜õ0¥["2fS¨ú•ÄQ6¦J@µÛ©d^Kpß´™ÏÉLL!%«ã, °™Å„L¦ÒL©TI”LøˆCi·‹ÓY;)ãI´32rãñ eæ0=À’9‰™Y’˜I&l¤ÆR”b•Î*L£¤ÈÏEh E(»„šP´ÅbÇõ’N;e¥N¦")[œ‹yIM<;ã91FbÌ 4Nhú.¤¦A{<Ç›¥ÔÌÊØÇæ^}ôœŽÌ:²4_@M1@— -–Tf3 Ê"ÈX‰»=­‘©™x¾h)-y±àçºÔ"µ¤4ŸiQå+[ŸÃfgóQš®˜$& öÐ%T…b¶ØyXÙ‚ÒbF©^¡4RÖòimÊS™íÅ€Â˨Vq¶ ôèx÷gg?œóQtïtY#VõäâˆP^Å»¹º ø6»9wä¦ày稽Ýuhçᵌr¹¸òúH¯ÎýrsÍÁÝ)»ýˆ›š¶Ÿ"FnïCÿJšºê¡©~ˆc}(eœÈo‹R`“Å=A'néœi©Byÿçƒ.¡ë‘¥cÝÃMÎGùâ±A¬Çè^Ÿ÷mìL`ÇêPö®ãê«“ƒ¥]¹ÒŸ*iöŽ'—=2o‰µë°Ð•}ÕÝ¿æÊ¾íO\º¸ë.pœZÊæÈ¾J–D ]€1Ï=L ±‡úÖU­TûÓÕu§¶>vÌõ]žèí³Gq¨N"……[‡’D(-®§m¶ÛsÕ–~”=CÏe89F¼ÕÒ}ïÖ¶ûÐ6]bƒ“­Ù9ƒ/`ÃWmÐÚô0~sPI@øŒ1[ô ¯½\ÚnÚYÕ j6Z בb,Í׃m¯ª†õPsU×cúôLãÆ Ly?Ä6nï{G:’òÖ‰*e^¿R ýÂÖœÔC2•ªÔ.Ýv-·¿FÕmoÜ:%P'Ýx<%¬Ïu½Lš]î¸z®N=wÚ 5®Ðûê€Sý\³I,6+»)4!7s ó”×à  ÐçI“í—¯pt†•·ºÇEåéXba¼YX¿u·²®©w,ÿåV‘ÅHÉŸ©Â ÖS¼¼ƒ}å«Ä]ø‚‘WŒ× ±×ÈÍѽ²Ä±®Xð±êò’$£Ø>ÝæD œ<§áø“ZxNlA)qȓܥgèO%óO£˜ÄÀÎV‡£+d’?gŠ´܉æÀVº¦g(y…k ó‘1k4E¸qbê™%ÓFä#Ÿ.˜þh÷ÆÇSçäÄ  ¾úò)w‘$Ë£`7Œ=$ŠÄ"“D@´X dP=–yWŽ®;GöNº—û•‹ú úÀ œr*O@çµDštá&ä… û“[L¢ߟn · ›ÄÝÚâYÆ>Ä}6‚ ¹˜Ðº½ŒŽÐIÿt̼"Ýâ‘{¥)‹Œ‰(¼uÁ«;‹åÊh';ƯºŸŽK£ÇÇ¥5QaÂy9Q…0^Ì’±àQžyX'ƒHoì|é§”@ÇîÆ”z· Z» °à´%vá…­Ø2W¬ª$+%Åx “tœ›ƒP$ {øPc79a¡$¼ô:fòdâêÊãk™ÀÀ8λÑ*¹/¯N}IJ¿¥ôðž÷;µç¶nVdÏ$i^ÐHúÒ¬ †G©ß€Ë^—²SF±½¾¸ùÚäÖ ¢ uƒ¬\ò¬€¡²ÄÏ\ƒÊ,©„HϪ̣½ËOè žGž 7µB^UìIdÌÔ15Þ&M=×}õÀPï¾ó ݉¯Š‚Á Þ}㥢|ó o戕(Áz—‡$WÔæTõÃjU2¬z[Ý{QÿN„yä·„\ÇNÆÓÖÔ¢l­t½"À2` 1š¶‰ho2ÆÈº[Ê&£3º¦!ººVc:èJ9кÛ=)•ºüwt´-á`tg9Ŧ =Ý»Ør¥\´±\ ÖÉJ(ý˜©†q­ dgÜÅÁºØë-¦:…¸(â' ÊrHÕÔ¦PíP#¤N#±ÍŒØ‰Š¨Ì@ÄRñ¯À—X£Jç‘IÖ±ìË}Ù…XŸRߣMd‡”\N°\‰` ë{–~y¹ò‚¥p¯¹ýT¹P!C‰îˆGMÀ¦„ Øf”‡ž‡ÔÃ,]y–RÙÍ@íáPScZ0"bì±¶"¿ô"¯HÖEºYèú·øfœ¬cuOþð\L[@Á^…£“ õ† ÞÛ@´©·àJ¾tl#Jy¹”2.‚ní×SY®ßrc tYÌÆXõ+îo (Eªy$GÉïoL%yÈ_ˆœ/µðeïå Í.¯®Q:€„ÙX©x¶uï‰&ZäÕ¨ŽÿÄfª9εQA½”i¦€š”@Fù<ó·üê¼0#N)‚WT»Y7ªÑJ#6äÃ1²&­A—áçàMm˜;¾A<^m.±ÖìW‹eYmœŒSy“x‡aBÓÌ ‡€°¾<ËÓ@dR»µ,@ÛHœdvÆHLbø´Ãˆ}Ó4†Ïpø´GÉŸË ý»àWAïò˜(Õ~ïã“Òc3+=–Pé%ñ2gúdœéZ‹›óȉ©ÂP™·‹þðô–6›ÅÒ™…–*°˜*©&ÑÛßñ`{8›“©©šaC%ùtV>Y¢B²Mùfè|3ÈÃÊÒ‚í';êW—oÿÚTxaÊd Ž•YÚ •ëH]ÐEÙÔ¾ÙùÜM–9X•ÐP&a‹5Sìì‡$±5…JíÔøwÈ@nb—Ñ+ÉÓ\EqˆûƬåO?8çöèj¹˜Ú†±àÀ2œ\S®~n}=O± Eáê÷ÖTdðòZ\å ¬ÎÁ(ÿ›V}Bš¶€žñ@‰’d{‡“F÷%DSkùy•‚»¢³éjpûŸ‘‹‘Ru9>Nh>ì¹x*‡ˆž[ Ê}Ö àWù.à4‚!ðö|ÈþE×È»‘tE¡Æ“óQ|ÅT‡©8Þ¾½ ¸’ïŽ?Ï>ÄÌ'–º%L^ùñe¢««‡ »lúÇ3ûàb ¤†Åßp|;+ã#«øö'6JlöÖ'I” C©Ž~݃×rÇÆê¿ò ,G®´<èHÿÿÄâ=>±xã†/•W…ßg¿Ç ú͆Öß`Fêý¾_0ÓËöÙû¡É³0†þ6ÖïÿõBòN¯Ìèb¹êý¿^°ïð. Çûõð²&¥—5ê=¾ P“‡o|@|$öÉ[‹¢xïϲ7? ð”Å^‰LdÿטðoÚ¾"ÏºÈØ³^fUÀ³É²ƒ–õ¹íúµPÕDª°“P•=ñÀ£hÆIv¹KÈ| JèüL3ñ+H>¤ÖéóCˆsÏŽ<ÞÔ5yË5é ö.ÆÕtƒ¶².ð¥ãà wbÑužwŸûìÖ‚RŸMe¢m–m¿ò\16„O²-YJ® Âa=ãqT…Sõpâ¨*èøËGn ±3ôEê)š2ÂO1=`·ch&ޝê$ô³à2ýíäQ³µ[ Jâ™"á ‡u”ÄGÏí‹lF2—ÊDÃ^Q¤\„,:¢qŠÅˆÆ–½ % P‚_6Ü0Ýý Iü›-pÔeM÷Á&äs7Éúíô(q¢ø-~ƒ,¨ñå¿ì©¦KtÐç'œéÞA‹, J²4%Ìæ÷I§×"ØBÞ ŽO±õ’¤¾:;³ì<å»Õœ‚k0ù¬ÓðÂôà‘™K£8 ÷+˜‹] Tã¢6$ÄZ>66J“à¤öÖq dÌø|Õ‰žÁĄЉ¯%œÇX I@D¥ü94^Û[slï¥VEpøüZ[¹¡AÜðÚPþò ‹CÏ(U‡q%sAÄ !D yž‹ó˜ø°è_”‚ endstream endobj 97 0 obj << /Length 4032 /Filter /FlateDecode >> stream xڥ˒ã¶ñ¾_¡œÌ©²¸¤cW*.¯Ë›ŠãÄÞRë=P%1æCæÃãñ×§_I '›r.Ðh4€F¿Á/ß½zýµŽwy˜§:ݽ;ï¬ÞY…QlwïN»÷AùGÁ¯Åq¬Ÿöqbêr¯RìdAÕÕ©äo¾ýöÍ÷?F‰ yìmËðñZ ùg[ý½ïFeѯŸBÇÚÀ&†Q†òç©låÀH* ʾäÁ¾¼uýÃÞDÁXž¡ò‹ÎØÝr­FY¶®†ñáû¿ì¢Ý^©0O>ì5z¬Æ+`E6x³ÿåA'AQO°8`¿þZ™_Ò$LM$dª6Œ”-p€oyž81ÆŠ½Ô𩳠pøí™wÁ^¶éðQ ch1 S#ãµy´¨k1'¯wHÀ2•“йvMWw—á`È}e‚_±›FGVpO]ST-òiÀ½®µASÀÝ#c÷Y¦Q²fï„ì Þû“k#®i² hOV¶Üâó¶#÷ê®û©j/Ü9£ÂÝCMºä¹µabŒÜXBšXúáÄ„ÚúiØ ›„±—ÅP$'¶\ïïn`ÞÀô¬ñõÓg¢ Œ×0GY'ÚNÓŸ…•±[’bIí,4ªöTÞJøáØ*ºsVˆ1ðÿÊ2u[ö¥–Ê”éPëÜ­ùùç›NXyþ«­x,Ì3µ †)¸ÒÎ1ÁâMYp„-€ñ°Œ¶î¤óÚK-‡ýÙˆspþ±_ù@ÎA1e}ÞØkœ…6öÇ• |Eæë[¦ãUbrŽ’!ùPà¨ÉÓGV+ è}ð^I<=Lgâ=Ei>ä‡q¼¹êüäæI`ïBBYmX¬š>»I\™#wŽ++5Ü8ØXd¸È†Þ{çºÒ¯þ¸ÍÞ ²ÆV—мYâ’Ú“O'£g‚=(0“ÝÄC°gn#ž…%˜—,|«#áþ þ“ãv“€Y Û³úìA`süïŠö1ßD r /ÁBÊ 2רºV—ëÍ7óåÁ>К}ãîó]c¯¨{0UO`<(~ˆÅÉNE,¢=uB¸¦)Ð4¹KÈ (w à„ì­‡dí‰ÛÃÔ ”nÓ¤BzB‹ÅXlkN ƒ§dI#ÿ ý+ÉðDS Ñ'·”-ý‹±|YÍ$ †ÿÇkå@W2sYLfúÃ(–ÚeÛMÁ[»<¬]ÈÒÁ?HBµ’çŽðPç^Ûí_ßüð¢½zóîÕϯÐ}D;µ3z†I üäcóêý‡hw‚1Æ0γÝ#a6;¦è@êݯþñêKª¼-—3À£ð$7¼æWß÷í›-oA~ë}«;ÊAŽF ÿçöíÛ·{¾°½‹`!W€UV5çd.ìbW¢©Ü'&—\hà!Ír·6°Ü'që¦úÔ~22„oû¹‚9•ÈšKË$8Ñ6®žåÁ"*OÂ$Mv&V!¢ÿ‡T¨< u”" ô1±ÈüÖfã§9·±qö3pe­;«Ü3…R9']«±½Qq•ù C”JFî 2Bª8yÑ.œ…‚Ý%í÷žä !¡ Ñ%’ ¢‡‚®·vC’êÈQçLU»îB Jñ2Ÿà#¾`W D‚;‹îÀ’ÖÊØvJv“«Ã4ÙåU&[1×2؉Ô(Ì©ØÙ£ R­c!tãÕ;çÑnle…î8b,æÓ.9úKU!N9Áª¶ìMp™ó3èÚqìØÕSC܄ΥòIb&e1ƒÅ½uUKé'ÀÉWfñ<~WÁGœºcw‹6½cÑpŒ]ÉïLJ¨D¬cà¡ãáùEôñ¢{iºS).½×ZÇצa^Œ0±ίpÆ1¤z±ÄòaĈ…«Ñ¹.žZ.ýè‚g^ðå |;,M,¥-hTMSž*Ð*z¼Ìª,†'"Ÿÿ%[Z'¹c“ªi¼<»®?A¶%ú $¢_~+ÈN›LâºlÅØù]ÆÌRŒÓœZóÈ,þE$M×)Q"ƒL-þ««q¤Ü(OÍ“ N ?{wÒ0ܪè%¡Í}ÅywqÖ!ç›Æ)‹«âÃÐRRãYRaä^R]2ñ+rh£Ü”Faù`ñý‡­íš0JÍr»Ãï߬—ø})B“dkž­„6ÎFãiY€\ɹ_Z´örh%%ˆÐ ‚S?RûcêÈǪï7ïÑB´äó(L”çoøá£d¿²Û¶~º;P]žÇõQ\¹â:znpƒÍ„|âȆ™‰ï’‰­¯‘ßl³™éq¸q®{#»|ì,ü-Ž8ÏQ¶!üÂÀÙ{`5&>Ã[º,ìŸJ È[Ù‚ØÝ»™N³0 ^Žغ»•[Õ<ªùžY„œøâ¢qyûDÏÏ1 Ž»ïbmÃ4KÖ~ÀY%H–V?ØS ºI|űgû%(šS£€UuÓ B¥¨~`£9ƒ… GÈ zCpÚ ÂTlÑÇ<|¼vÝP %*Âà^¯®¸Mëo†¸ªQhÓŸ}p‹°UýË@øä<‹ãàÏ#6ö¡C´Rêæu›O¸Xäâ5Dß`“Á'²D\%…qˆ%¦Ã¢ eÔ‹Õ$Àèš[1ÐÍ1·çª‘ËÚ qƒ¡RtT1N%¸¯€ýO ˜ Xb˜‹@¥˜´¬öaŸÅêOÑ}Å8–”–‚Œo½ÌÑëÖíø7,²&oœ§ß~«¸ƒ˜´Ë²ç¨ƒ¯ÏÉ&¦®Äù  ˜ÑÊ[,’’„ǽ8Qx¬’”»ºŒ.êJ÷­|4ÍæG¢hÆx~õZŠ6/Ö“ØŸ Dü œ¬¾ãv )36¢‰„›9x:‚—| Ò¹ ëú²l$б(ù=Fÿ€ chã»/…¸Äc-¬;Pm"•“¡üvf}MsûE6_Jžuocyå°ÀæÒ“Kù:ùáÞ. $vU ±Xè©NS9ü‘»å™½ÍqgïÍæ‹Fi~‹\}GwyM*O-r §¯¸”{¯»S> wdR¸ÈxL&Ïw:q²ñjÌØò endstream endobj 100 0 obj << /Length 3659 /Filter /FlateDecode >> stream xÚ¥koÛ8ò{…âʥÖI¤ž»Ø¹ÔMs—vÓÚÛ"Ø.ŠÍغʒ+ÑÉåßß g¨‡­tÔ_ÄÇpÈyp^ô?/þñFÈIꦑˆ&‹»I¹iLbßs=O«ÉΛé9U}2qâ,«í.ƒ¶:yS•¯xt_תÔÔù½Ì¯ëJ[ø²Qe³o¨›•e¥3W%õ«;úÎnr"BG•…j¼ÙT'°Óƒíö¡hhUm³¼l~>ùsñ/ %œ±L?0´LýØM¥`ZpôÄóœ×¿½;»|2•t¤ï¶Z„V  õ&¿­«R-u;!~Ü©éåå%õ|wœx“)`ýïadÄØC‘<»`ÿòDFžŠg]> ¹‡DŠ4áq_¦âyèƒç£Ï¢ÓàyèÃç£ÓØ¢O°ùôÑóÑ'sÒ䙂]VÔþ¥›ZM¾›ú mºØ(P÷©ô#«ãØ ¬æÑŒ>»ZiýHsºÚ¯74¼Ììj]Ñä2+ ¸®RÀÒ¥ÞCïñć#¹pò0vÞ¾{7ûHwx˲¼hú"¸}ŠPâ¥|Ô›¼\óT¾.ó/ž'–Z2—®j=5 œ‡ @Zû”€Ø£Åú®ðRXfÀã«Ù|ŽP/f‹ß^ø0îMü‰znD“0MÜP/·/þøÓ›¬`vtešL èv"ܱ“ù‹/þiL{;?”®”„)#ÚõõÇßÞÍFTR¤n«ùlY*M´äȇH2#a@gõZiP")SR"IÌ3„mŠÀHxÎÍt…¨/¼pê Ò<‰æü4•SàVbDJÚ>*‰üC¦g(²´/à´õO ñfnU©¦|É€ì’ê+Þ/pnñˆ{ž·úhÌÝÃ1{éL»ÈöMn–Êâ·dÁ"$kwNË Ì:äÔ0žíºFNeKUûÜl_­Xb„ûYÞ3ço{ZhoqƒýrC½ÿîöÓ}nó5÷k: "~lw3Šâ}E‘‰ë‡Õ”/žôFÔ)vã ±0`t2ÞMFÏ^âP­v*Ó JƒLñTHÈO†‚þ½\©­«¢AË3˜Y‰°X¥±[fÚé|›4°«­8¨©jB–-AiH° ȬK·5¡ŽÁ²}[[Õ¼¢U §¤¢f€_ šöZ­æ!GËù´ITŠG†ôòšˆ)HQƒ„•tQíZꢄîŠY•7 “$8V+¸œa˜vq‘¾eÛ]ÑÇô4_s6ɸaËSXãÓçV-AãÍçº=^ˆ×¦²¯ÔkO´/! œŽÉû¼\Â^ȲWOª„ñž]°GmÁ:Î]Cjµ¯G쬇n'ah@s›„ ÐIœþ€¡…㸞G˜¢ä/ílµG«öz·×ÃËkC`¦3 uÁ4únäùìJB÷ë¯tX¶™È’£ÅfYÕêgŽØ<7¦Öm®›_à`$"[å©ã-ÁÉÙô>+öv‘ïJêk„û®›öB¦étz>£ßùbÁ­étîºó9|x`¶X,ÎÏ/ÎÛMÄb1Í:¨ÙÌѶçsº8RºAô·¼+%‡c‚@›ì¬asߨ{Ýè¦ÐEó¹Ùí¾®Öëõ.×ëu¯¿©¯kµVêá@Ýïj­us¯ ½¾R»µV7ê®þô-»/×€íqBTvä#œžè)3Óö™•§§Ÿ©±;ƒƒ®oNÛŸ'0ÅßûÝ)ïÓØ}NO¯NO×úôæhçÆñè†mæwIÿÌæ:ü‡ô“´A¦Ô˜Ÿ]ºœ½½zwqõúõüíÕÙ§·Ÿß^_||³xq}9»¸ùxõñj>ŸÏ.ÞŸMAt®>]Ÿ]|¼˜ß\¾™¸úpv±x³¸:»š¿»|ÿﳋká…ñ“‘Ã$©ýˆ r=–ß‚s¬¿ïgùFË œô¾„¼‰_"üçcì¡ „+¢ø-_œë뱸2´£À]~ ¦ ®^.ìlTfšH#§ÈKi4æÚd  ï V6féÂÐõaÍ ÜÿãCùÒý¨ì‹Í|Š\k b"gæ»àsܵ%€v—Õ EîÜ,Ù}î4ÍbÒ€ß5zò£·LiU¬¨U´˜?c›·Û¶aî‘|eGÄÐl+“OÐ2½"9ì‚sZýÈi‘Ƚó%Æ\‘o`N°Rm²q†D£ýtM¬ÚCV3sh˜«•¡AA°ºä)>*Lj'憀1i Œä密1&ÚÀ¹»ºÚÒlë"MÁBçÇ"‘ü»xa|0–Éx®—¶j÷·_/ÎÙ‚Œ%4‘çŠ$™Ò_þHB 0„É÷Ùç!³Çü¬ï†~›k½¡!rÃÈ?&áã›lØ€ yûrA&åüëj‰,ÿ ¿µüóÄçîÈÄc!Ò²1ý53 }›µGj×j½¯×9&.+0Vz×#kÆÌ„tEË r¨ÇF"ì@ªÑ¨ ÑÚ‘Q6 ±–þP±9Æ­UðCL 9¶!ä­QËut÷#[|—SÛ«‰[˜«Ù%:uÉ£K9R«47±KKü8pOùmŒ»ô$_[lu6œ‚j2€ Ӱϯ'LÝÎzÅðläÉ>U¸懃ùo{“4ÛŠ}à ה®œó ‚"“áñ!cT5£‡”¬†Ø[«Ýîkk<ÑÊ®4¼+ÙÙU‘ЖlrªW…Oi?Ö­ªRÃÞœUÁdk&.åq„¡óºÒM‡v„·ò¹â[Εá þÓ.‘ÅíuÎ瀤·`ÙšS¯ò%Ö¸g5¢®l½®[ÎPT0¡v£@"hê)ÑXã9ð7ìñMfÜì +b_VYŸÆÚÊ¢?fo|~N߀íËíÜ*ªÛ(¬Z °¶(Z¶aÚ”¯¥“CK%É sѳÉ(†Ì«u#§#"‚Ô¬³‡'µ ã!õ1ª"æ=6ã ça“›l;ÎÒÔ q«è›—š Å ŠÑ[Íúbá¼;Ø ,v:å@˳ö(¸Ùß6:×{T ¬&ØÝp .vLžäpdÈZ^ NáqŸ(ÓãuHõØ‹ótpCZ"b«â">2_"~Ò|EÅ•fcÕ.L&€ÇbÿGÒlt/a bñý<[z®í&¢-¹­¶"ÁCm Rßy5t-`ú ûâ1$íÓqû’ Í â£‚UlÍË€÷=ó=¼²†…’– ðCò¨öÌæ £×3&Ìô~Ô®ô5Fıs[i ·À›qÜFØqç=Œ«,æø¨ê†“»ººÍnsÈC Ù­\ž›à|ˆ¢»&Ü£aÙŽËÿ1J#.­áˆ lÛÐiÄ`™óÕ¾ Kd6k*‚Èñð9ŠÊL…šÞ4ü «W¡tü£Éè³³TΆÁ¦¢oUþ‚3±“¬‹œ$œ¦¼00ù„ÃkÇ?Ð<7ŒMZÂ¥¡´v´›ÈtÒê4…“zÞOÔ9 )ZŠvPoïË‹“`çæÄ0×€ëñœ1¬A S5Ä×Ô±y¨f¬Åšãµ3+*µRË|ÅKÙv›½<û(pÞˆ½DјJ¾Áa\\QŒV'WÊ ’¼4ö_&TA•±Á!:3![j_ƒÜiã4±y; ~Z×#º¤áF걡°ÙA;o5Gú©§¯ø°R½ä{eì.««}¹£¶¨–Û—þãÂ0ª±¡1GÓÖ&qñ–%Ò+ÈšêðÊbÒûÖE½Üö´‘08ðÀÓxƒ°e%! ï3ˆî ö¥ŽË<‘1ƒ“ò@C•«†½BÒd°¸öÈ®Íjå¼Ô–ÍŸ¬ûc@ÑjŽ=B$ÑñsEB†èîÝí½{a·¬oUÚ¡¼\{RØ(mJ8EÞF­)¤ j (VcOUôh˜mMƒ`¯}¦4 f+Ü½á €g½—¸€¥Žë ' Ûªl,´¥± £Â,¢- 8Ölª}ÁËny S'°,µE§y«[5vW6Õ¶*ªueóGtS-Gžö£ìˆ«-=‚bÞkT2dôKûšÃÍl<±ËcºÇ)S7”b"ÝÈgIŒe’&pŒCã<;Ýk ¶»ç426%¡ª§}¸Q2yUg˜qåÐèÑK—ìÇ&f· ™ÏØ$€KU]”OcùÎ? úÁO? Ö¬>&µBCò†a“®v,”\7¶.Ð|Çv½É˶ªøŠõ % Lì„¶MÎß6_¤š‘%–[Ëj¼tÿË0zECûí6ër4ÁJ¤ Ë.k–½A€ñ@ø ªÇ;+réCHîGX±¾äûIìúi|çK–Ó8¦œO˜¿"@ø¸ÂC}Æ·Ï7jï&XØnâs2piªQWN––¾šWQž2åclaÝDˆI¿`¨}£.×=ÂcûëE‡! Ñ:+fÈË®Ðp·Ò™ZM­gª ÊXZëlÁÏ0¦N÷׫ù˜†LS7ˆz à+kIÌ[¢Õ[â„õÄöÅ1×#—à^Ú„‡ÖÖ8åíýÀÕ,µEÆÆp¬Î‚eŽÿ¸ øò«øMÖ ÿ& endstream endobj 103 0 obj << /Length 3378 /Filter /FlateDecode >> stream xÚ­kܶñ{~ÅE‘=À+‹¤žÎ';±uëÆ—mœZ‰·ËX+môðåúë;/jµ»:_öp8‘Ãá 9œ‡÷êö«ço´YåAžèdu{·Jõ*Uaštu[­~Yïêvëšþf£ÓlÝÛ¢+÷ÜnÇá8ϸóp£C€|]×Üÿ†º©dR{°ÃÞ5;îÖî"Û7¿ÞþÌãUä©É¹Îƒ,ËV•¹Ñ¼€·Í`»¦ÂI®îhk×XîõC1¸~pe/ýñp(º"½ W “*&³ùo~æóxÚßGÛ=0ñC[Ùúc‡=üQ/n6* ¬ ¡á‹#*Ê·\B»¦x[t;;Èzíï£mJÛ#5äÖ±ÉUÏIæ*Š“Ü(žÑÙÞU£õû¥ó°Õ2§÷EßÛŠ1ß}ø™w®y"?]fá|xòYœ!Áox‚ýãhËÁÓQaš™ÀpG&è§Ùo]Ñ_ñ'é¥arÉ_%‘‰þß+øÙ — 0ÈT}Á?ŒL=.8¡@ŸqÕÓìßÜW‹ì• ó ö:Œ“ì üƒèÄ]ÙM/sÛ¸Áy³ñ†KícQÚ‰‰6§Wê÷KQ£§ÐŒ‡­í¸ÝÞñw Uî½fþ]{(\ó(ïi¿U{˜ø‹82Ïý ½-Ûn’KûÙ#{°’}[W¿.ø?1ηïdwWDÍ$ˆÃ‘›a ”p Ãø›‰˜àëº8¹¾8ÖAœ_‹A˜½+Ÿ÷¶” °EF_c?..qî7€œGÑj£U«L|ÈÞÁêŒNÖ;÷ùFÇk+]ñÃÜAÇË-WÙ‚[(HüÞï‹áë›NDèܨuK>š°™'ßïß½{ýã½(K[ƒ¼U¸ìÑ'ç¬âup³‰²lýÏQdàe ³vð|nÏ„°Ë´i›ŽcÞ4,¢QѺÀÐb€É°· ©Š¡Ø½eð ‚AŸ‘>cgÇ‹“ãõKÍúuZŠ˜~”qw­r Xí¸Û3¸`Ø®›¡fº‹—ÖYëOx¾‰¾la£€Á²}(ê ûCÏÀ²¨kTl*rÝ „÷Œ‡À‘Ùn먗ˆ(ÐÁÜ€ôÚî7Tt• Ó¢qt ˜M ɺ¦ìlÑOëèmÓƒÇøì†Y˜'}Ž©Öe{Ø,í ÒR†B’€Äè:{°ÍþÒ©R`ŠÄÐyFÀâ£ÖæÝXŽÇÆfW(ü`wH“‡D0!âÑsy’o$D θAX?0"ȸëbÀÓÈmsP4™ë'½-já§P|jè«¿¼üp;™I®0ÁFHÇn+M¸U4ümà„Ph„ÉSŸ|O{ÇÞÞíö› %ÊQ‰Ü®a¡_–×î$Ó럟x1 ­ô*$½ÄÇù™&¼¥Š•_g '-/8±ûl]Á)—ÈU…LLþ¤)"#œ ÷è9@)¹·w‚‡Û:XÔê?TMϬìñÆÄžÏ(z #>¼}÷·Øç”CÛmŽ;+0«zIwϵd–&éújŠÊו½Ãu ÏÐWÄìy¥‚ß²m0ëÝé)@†–¿À´Å“¸çîÉ÷P%xüy¿-Xåž¿QÑ,.˜L‘Éa´þ!è?ae3$¥ƒ,™pB!£f Å™ò/®)è1Ð  RW2¹HÀž} t’@åK–¯cíCƒF b~ÄìFRc¼hÄéÚÝ1"+âœ;õØ&ùå¾Gç&¾àëÅ™¼dÈ ~!Ùpå ¬ïBÒ5ÜaJôMŸM ÁÀµaHE™ÁZ†ôV¤Y&çËGrBíŠÑ¥Ý"ÃÏ®ûú£¢ôB/,¤E8MáYÀc‹Á²m<ïbx<,¸S¦'46°{ôŰ}‹Í†ãÆð»Åƒˆy3³âŒM†ÓŽÁJp'Ô§Ä!ò' @Ü/ßÀ:3ëlj5+% ýã§ 3_Ò¦NDïp&JŸ§Ñ+ž£ñ@C̼ ›”…øû¯íùe€{ÇŽbÁ`½Â5ç=–Ïfq8°A^è.6RÿLz»X7ъʸ¢aÒ2I`©j|á$Ð0#®šÏ#4ÙFi­Ø-¥—]3†ß5öf¯†„Yì0if³ÏgħZ§Ä¸"œnj4«_Øö&Nƒ8T =ï—v¡žŠîm·TRArÐ ôr΃d2g¶â±¦@“@Òt…^iÎhGqGæé3:[¥¼Ç°q÷ÌâìÁ ¿”´Bkª.m̀ǚ– ìOñùb à…Ôéu‚^šÄ¤;½ü”ö(,gÉNŠ*E7OHšy´àÏå32\ƒ,º¨§[*Œ-$|“kðå°ìL¿ØÊ¦ *váBÀÑ[ë,ˆÐ¬*yÍ×)Ž}õúö«ÿKkÌR endstream endobj 108 0 obj << /Length 2838 /Filter /FlateDecode >> stream xÚ­YK“Û6¾Ï¯Ð-T%b€I§j«®Á\¨}]±g¾®a°ÉÖlË tƒin3ЫÞI1üw0çMÚñtSïG2í(šï¥Xƒ­þê ä“i6Yç”!ÍY2ÂÝ &s¸£>ð‹d•_èýB%¡Îa=bïú®iKSýøòöyo^ÜÝüy#`8Z‰•ÈÒ0•ùJ§q¨R±Ún~ÿ#Zía4Už­ˆõ´’,´Z½½ù×Í-9ãtQ‘Ga,X’H%/þòÝ›ç¿8 §ž+ó0ͯbiyCÿ¢àçuÏßÞ­œÍóÙ^© §Ö™²&_BþÎäØŸLÍ« 1YMè$L´ö˽Dì¸â —…#O-è ÆŠËªf ~GKÞN¿!7ÊgmÈ×ɹ•LÑš³s\ ¼´!Þ™(xu4¡üÅÃNÍè¶”Ö‡/¼¡½]ºlZ‡Y|}ÛØ9lœÀn¶"D®4ÜrXÂðŸ=AìææÄuž±päquˆ}2L#í´×,îë:O'ô)l: HP'ŽäJ«,L¢¯<Õ™BRda”³$éi =žô+™ÁÒ:û*ä"”I6WáÓžµ‘"§9s'h,¡+Ë.ÿw{C€O ~{ƒ$•_ÛûKr#”Åå5x1¤FŒKÝ‘c.:ê¶é;nrø…PΞX:‡.¬…d]á‰Ö§;òìeÓ[?¶/ìÎ¥ómáÒâ=rùƒ˜Ç(ÏØÞ¦…w½¹8ƒX5Ž9”\ñV%í_i0¤N Á»üõ À”éÊ…Wš‚JWPØÇ‹ +"i!;8ÖŠÁNÿ5;ÿÀžq­‚È…y‡Ü~½SàÈ’!V€È'ÅnÑŒÀå¨X‹?æ„Eîd¢Á°ÔaË9­#CÑï˜cHpЛ‚=Š [‘ÇTnÀ SÛn.v&jHRh)"§lèõœP6T ŸinAzÏÌAw^É18ýþ㫺’> Tå¡>MÛäÔ*Lg5 a Àv{n#r7¾cû-{M‡Ø˜idpÈBn¦OŠÒÊ:uÌÞQ¸šƒ [G„ ƒ®vô ¸n”ÝñB¨)¬ú4à5^®¦ÆÝD9a`¬yÀ„|•Yx´‡ÁŠ›uÃÃuqè‰þ:ax¼ÔØ]±£ §4NO„&ü«äS=9¡ÜÙúu›{þ//5w®ë:—¯Ú ÍB<Ç8¸ÒÅ(çòÃ…åfš aª å¢{w,šL*ù‰ÿhqçµ;šúPøuýœù).$¥ª1”›¥âG¨0‘CnΨš 7*G4'æçÿŸµˆ”•™ |Å{(kŒ,Hš…cèO",ôHwø7Õ:šA£>:]ü=¹+õøŸí ùf!îû›5Cðp,Øù¼~H¬›ÎIuÿæ|†Ë1,üt™ÏË«t–ÂÁ’:ÌS•¹‚ ÉJ…Z¸©ñbѦu ¶¹îüï¥Tp•£ØÞB'fò®©ú¹ t Z–ÉDÐà Žÿè±Üº°Îð6òÝ »Ó -Dœ3E;Ç0×QâäuÈ>:…jK.Ù'×´Ê}O°zäóy:©|zQVb¬Œ ^mxtµkšvÕ¹¾DA,X³’3DÈôIÄÅ.—ó ûž®gÍɵÌ|(ÝezÚ9,dÃ'6À»]Ïî´‹s¸’]¾M!I„áë9âœdÈ2—ª¨>¼~:~?·¶?1¶ÓÑ:óB)ïêò·–ntH ø·Í©ðàºUéK^ì•—Uï‡3–ÅáFß­\Ì@‘V_#ˆ°kN'Îo$¼väÑ8™ÿ®ðìr@ç,øìëʧØ~IåJK¸€Ð¾öáj®‘ŠCF’”â_R±r’~T”{:Wás«ŒÂ8QÐPaî¦üŠGG8Ë{:=ðòZ¤ì¹ÎX°T’x‚fjÀ§¾ÔC¹Î¡¿CøGã~é×ÄP€ÿ>P/ì!‹¿¬²‘aœÏs'ñდqÜ!ŽâHoyàØ8{ckƒÇ"ƇÓï—¬k8J¹ c“Uc;§‚RS … n}h-×"Ló¡ Ý,YÜ#ëØM&Dð‹Gv(÷bABvWtåŠàb[±1)˜×ˆÈ-ãofs÷_¥ôà{‘¢wë”a:f,wŸ:Ø—ûú;jsØFCM?‹›ÛÂ"66ýº±NÌËB—±ìTTs¦/ Å3(“¤œóg¾,>´D±'OsŽößËÈ,[´ ÒËa¼àÆô±)ù`|-¬‚¬(€àaß<qUn‰mQ†rtP º…FÆÀ†…z zB¹¶87“o¸Ê±ì¬)¥^ʾe7dàÛ’¶Q 95GÙô‡£Û0¡ðv ¥`®LÁ­ÉÙ`·ï:‡ÆY(·¼çqÜ‚t —+¸½åö±ÔNUòw?›U À)–/vü(saŠW$Ùã—,Ÿ:ô\›‹5`4[:çñäS/QÏý.•ç4l™>DEò=ºŠ%[ŽyJe¡cÎ÷Ë1gúæŽa°Q¬wðy5®R(„ Ì¢p¨ŸÊžø‘J@zœKP Yž¦ü%TBI•¸HA–¸,Ràƒ¢ ·fª+ eƒr§‡%kªE{¬'ìmâ(ž|¦º–¦#2…±Ô¿À¤ÉÅã¸XDp yèF"“©NÍ€ºóŸ!MYc)€ãÛ©8ÔjÜãQ·&_~yìâ ˜&¥ M~(wSåþvŒÛbgzë¶1ÞöÉîf¥W¯ü-q“‡1z×øl‚5„û8–Ž’±3‰#yÊñ«ð¡.ñA1ÞñÈä±%Oùa‹›DH-*ŠŽø¸ÎÝÑ×!m±‡;hêÝ#÷ù½P¥¤Ø]ë“(vû³“í+’ÁjT=Éù¦A Ë™vHh$öÄkZ»(ÇîòÛ3U±ü¨qÚ㤎rß>©Ê –CçŽ ãœ×•™¿tIÈU endstream endobj 111 0 obj << /Length 2410 /Filter /FlateDecode >> stream xÚíËrÛ8òž¯PÕF® ‚oz+Ucg;+öØÎ!;™rA,aB‘Z>ìx*¿Ý@ƒ¤D*±s˜K6‡¨4ÝF¿èãëg/^»Þ(±“Ð G×·£ÈE̱/]/FŒùÁŸ×ÿœ`Nè#Nl{N2r4‚E]"íÅfÝ>°<ß¿>ðœq^Xn>óõ&,ÿ¢g«• ßh ¿5+²¤™ºÚÔ•†Ó<ÿDÓ©ütà:cqØpÚIL3,´Y’Œ,Ù‰çj¦~:°BÇÿÅçŸVëµ(ôððPÿÊJ¼’w"}Ð¥àÅ|¥a®6E^ ™™õÿÖ"› ÂXr™•Õ~ô¯øŒ—™5YÀXĶ;N'—ôl¦N༳¢æ±å:̃Yö/=\UÕæðÅ %Ë]ú[ä_囇B.WUKùjÈtšßóbAp½\‰RÃS±sžêÁUVu%ì½ç½.D£Ë…,«BΟ×ÙÂ\€²NÞ½'@dptÒE=Kå\Ãgr.²R´œ\œÝ)mìgÃú1ö©l¶x2à[™ÂK²¢¯ýøøæôýôèÝ^2/–¢¢cìhù±ºi‰ïà¦Äÿí[^V|/Õ(, F–-«Ò6«SNæ¢P÷DšÍ,|Ðv5K¿Jv‘¯¿‡,lûåÛ¸X`'>ù°ßÑ®ðÎÝ-û±Žÿ8{ÉüðϾå¼›JæÙ¡ñ8kNs&*r¤+±Î—i>“™½u¶&r5Ï ã¤nsºÏyަÛ&Z¶®£Ä]äú³yZ/Ì"OÉóÀÝ£OG÷¢B̈¹vx]þ-‹tr[›]Û¯A!°Ø@Z,&X÷œ¾ë#ôÌkUû6‹ýî±뎧µ í’$ žI^G!‰Ïš4wuÕð#Bç†ú×gé ëÛ°äHF;Í,1b5ã5ƒŒXâ#HX:ì<'bží +‰‰Žç9v@+ŽWžíàx=f;´ÎŒ7_.Â8ŽØ—މ+ÜÓÆDÉ êx¾jגϯ^žæëœpøFŠl !øçq• Gï.Žž,È…y¨žÉr^÷í㟓Ã3r\_~¿U;ûåHì Ë£›(~4QÃ#œ¨Á‰íxgHÇu\_Éqr~yrþd9NòB¦)—à÷ÊáÚ ð6<ú¶Ûð4÷áîà8=œýrú|8;{º]>¯Œ?N¿%GÐðèØÉ€]¹;8ñ#í äðôû¸šL'OèWbå ùí¼/‚mÛ5”Å|kàë]f',Ö¨×+ŽÅ@PË*8—AV…ÚÁ©fR}*¥`Nų=¶V+«<]Ð*í,Ÿ¯Äë0ß›#îW‹7¹Ìhö ­¼Ö甂ÎáDŸ/S™ÑÜG×õÏ7^›d `h5ØæëªNfXf€˜K=¾_‰BìÖŠ‰ëINUa)ª¡‚ÞjÇTzÛf•¯ãø‘1ª cé.ݺB Œ×‚Ç÷Pèwçí›Á—釓›·ç'ÇÆ9M¶lŒåm¾”d:³BÜA¡³)MYôrzLµÐäåàchY [ÃVº.FÄZ¿‡2ü˜ï%‰búþª y}!¦uY ¸zJ¤2¨敜׭$kÅl{aÒO$:Ù˜¶]6wÝI T:ÖKPÀF<¯ã ”x¡”5Ý(ä‘Lî ü1s|ôÌGÿ¹™½š¼§m_u7®@Õð_®EV•mÅ}~¥_fwAO ¯#èÞ’*OFÔb¸÷ÈúrœÇŽï_ÎN޽›‹É;ËÕŽ g3Øb±6Bʲ^›œ¥’wõzÈwy‡Á®ïXM’‹°éç ̳…L»ÅwÃ1Ôˆ•,ÁrJB*ˆ x¢&¯þž†Õ¥!H{d6ÐÄòœÄvGjSmt¨/‹çÚn”tºYQŒ*Í]ed†wlYiö$þÑqÜXR7ì¡í+çÓqzØoBOÎ1µF'ÇÆÍþŒµ„‡äiÈ×5½°á îñáµ”zâÂ΀ü.ƒ çºF°_yvØvúÐx©dÍ/§c¥êæifør—+¨¿¿J*}Ó¹Èëe3 Z¨½TwÊ,³m+¯Êµ³GÄl±„™1Ä<£•-ë)ÞÛ>K™eMü1Dx–JÑTƒˆ/ ^õfÞ‰ûnפܪ:‡&¹ô‚¾sï‘à©\fèI¶KWªž/l\¢r÷žÓ€¡¿tw+QU¤ ºi¼éNÑ^Ž^©\¤n6WTÔdâ3ñ7›-ì¡f¶»aº—¸ uâ(ç¶ñ éψB]Ê«#ÓyÚQÆn Ó {n´ hï¶0­£fîQùò½üMó…0=ùwÓ[c>qµÉK‰vX’xtn¨<cJ¤|†ïìNÂKcc˜g<3x|–ZfˆèŒÍˆÔ©º=œl¨ZQ/§µ«ƒ)xA€p¯g;6ˆk˜•b£D/*­ãt«rÝí÷!ˤc 7€A9Ä­•:àŠy ƒéb §K|ùs®òÓØ¯y5_é“ðÓCÀ:Ÿb²D V÷èòð•Êé2p ?θÔëJƒµL‰0×?øê0}±jÛ@*ÆGv´£8§«mhÙb_c ¿Gh$IÑÎoo›÷ÔÑÈ=\X#zÀ²„ó%O±ÿ®×@0HÀÑ»Í'…ä˜>í@:7˜í“ŽS3áæ3‡ÎÌ1 í|Íiu ¥Ë! òÁÕ»;õÿ­¾±Õ·ÅH„=˜Ðô`\ÈÔX¯‹±ß´…ã<®\Ú?н‹éäl:yrÍ?©1®µûÍ=Õ £†9ÖIðý†9oÇÀÙWª`Óbb*•o •¦LóNÇçE¾©âRŸ-¯WA1u?]6€3Xe¾ŸÝ¿:úݧò./hf>IJś3PÆ»;×ãt i÷}HÇÿç¿_>½w¾Èg"3År‘ïks?¡uô]µïwòo”ŸäZ7}M …óm.®Ê_¤*H#* LÛ.R\S{ÐX<ÃäëU‚%Ù¤l±ñÔ8\#`GÔ_h{ê„]ßD¤çÃŽÐVpéÏ@ˆ²ÖÔå„v‡#ð6‹è“’›àâ³Éõ³ÿæ6D endstream endobj 114 0 obj << /Length 2642 /Filter /FlateDecode >> stream xÚíkoÛ8ò{~…ýÐ[+¢$ëÑE븩ÓE줉{EowÐ2csWW¦9ôÇß 9”e[nSô¾Ým8$‡£yÏ9›¾vÜ^dE¾ã÷f÷½Àé̶l7èͽßyùâäÏÙo€5èùV¸!b9‘†a¯Ï®Š¾µ0¼6†ãáªÕP ±\y½:¿¶¿L>ŒïF7†SÂ<æË$ŸËì¤Ä¯n_ŽŠÇ|Qð8×+<«xW2®K½0ž¾TÜ÷÷Ùÿ™Xa(F‹IÀh˜t&ýœ°§Ckæ¹Q /ÇÂŒy"òb%3ÃùZR¤óVpöØwötìXÁŽý4;\ÛŽí8_.Ά“»Ë7³ÑŒŽ]ˆtK€•àE¥Á´.ãDh¸¬çu&iƒ'ëïï[ƒm›Ã³Â-^ý–<ŒxXîÛÃ9lŽÐ˜ã·ï0Ç_|gû~µofEÀ[ØðæYn‡=Üœ'Û#iѳ»ëá5F§=¶_­DÅû¬‘횯e/J »-€«œeÃœÛ Z—˜ÓFjãØ{8Ý ¾Œ/Ï^݆ï†7tlÜbþÕs=ƹHòTÆ›`çõBfœX/Ø#Oöð,¶ÃÜ~D vpœVÐÃ#ÇQÜMÏo†—„;ÞvŸ©(deMæ2–IBÓëó—dŠÛÔ¡~äÌdÒÈíÈ4® ùJðÔdFA„ÞÃîÞÝ\] Ÿâ=:l‰å?ìýºàËTdÀì[¹Õ³àÔøOdo[BUˆA !Œžj†·‘ýÞö¾LÇgw³óÙtL¸SQ»¡<UÁóEN+™\ù'YÈ…,„p¨ôÛbÊé¬kîá©á;ˆÏA®ÙÝÕt4ù@ÇZl·âô*‹!=fñÊdôñoYš ôÝ»ö.‹a§bÝm”à;¤pQ ç ÎwIÀVä±­–c§…Á®$ò<Á>Ð¥(Ô7Õ³“p…2»ÇuvÂì㺬y¢ª\¥x|¬E :°•’¼$]œg =Iy Žÿ>qìcA‹²Z5Í(Ö÷=ÕpšD®O†ÞÙROóB.¡ %zª)35ʳ ú‘æpE5<Ÿ‰=ek+¢ÉÞh÷¡;ÇÒÒFdÛ˜oH…F=Nn‡pÚ ;ôaLm”¢TÓŸí¨Cƒ÷Ež6Á–5›ªÓ)Ì$_Òf)ÿ-€±@1æùzq—²’yVv’xbÎ91¯KL(þ´.ü€“íì{˜D!ô¦ñ@Œù0Ð Ë:µˆ5YæÊÀ¸£’,Q¬!X­ ¡‚Tñu¢BÜ•Š@áK. Ô¼6Šª“æsª ‘Nä<¯!ç9oC–þ°m‡ÂWeŽþÀsMšø**òï3üŽF,á¯4¦È¥^ýXKQ%zyÞ¨ÝSò¢IýȧFZ%!¯“J¯§ü³LUUH5F~ß ì›dÜp§²Dà×Þ¢9Æ nÒÞ#Ú-¯)ljê©÷éïLSÿ…$5`ßJRŒyÑf©ÓÓo†OD%Iu Å U£z6:ázx5n; iŒW|Ρž™¯ldÅÚYeÖÛJ¬É¹^èšvµÆªÄ“¤Õok[Éd±õíµâ+GoO軓ɮG®Òts|_õ†fl(M4œ™•LebK. ¬¤ 4´ùNK¤ƒ¬‹¼æÆ“î- ½niÌÜ(»£¦ ÞãZP¡öý¶šBÝòÕÐÓ&(GëU5˜ÃWçÌ‚5ªÝuÕ‘'§z½¿V÷ó¦x–$ÆKH”2O Êëj]WFRNP’çÆÿ©»È§^•~êí5  ñ{i^p•·èǸ¬¬Š:FÏÛmÒSˆ,¹n}7ßjN:ZoœßhеÚMb^ÔÜÜ›¹˜¥~!Þ«jýâôD…•ËÓƒäGùú:˜Uµ¡<ÒéŽÈt‘?ð‚tqQ/Wææ2 ›îç hA‚Õ…uð{¯¡EOˆé…¥É9àa(˜˜dèYÖ¼%¿#@d¢0_º®ç‰yû¼”±ÈJ±`|}ùÉÕuíýÿÍá:d¦B¨£_Fg7ÅîxÞ¹E•[aBÄôez“,þo¤.#µ^(Œ•ŸéQƒcòÓjÏÿH¯<Á{©ÓD¿xø^Ÿ÷÷wW=†ˆS¸íSŠ2.¤ªš¦èÃqÖñÓÚùpg¶GŸFÒ(¯AÙÕ³kæ–1óºš÷fÏñé” -+!ÚÐL…­rµI“a!3“^‰B~2yé<›ˆ`­» ýÕbOxчÿ­óXjU"+xV‚®7ÊÝ7ìèšr\%SA…:¨Am@›‘­lû…úí•a¯Ku#ÞÚvì§^8§y%±y65 póØÜîpÕ„2nÄyR§™^×-ÒÖ¹•à*ƒã"ÜmÜ÷ðË{®÷V2&|lˆp)ϰà \¢J¥aEX½¯ M‚µ¦‚|Ÿi¥07ðÔ×Ü`}ñBè•z­GìƒqGK-z¼™- é~‘ AL–zG=@+bkÕÊœtíê7؃€\¢¾ÔQâŒT‚Û™ªÕJ&Çóø . ºïÒø²Íýç?ý ç endstream endobj 118 0 obj << /Length 3634 /Filter /FlateDecode >> stream xÚ­ZYÜ6~÷¯è·íÜŒHJ¢”$ÁH€…½ðC’µ¤™¢–:-õÎúßo]¤ŽÖŒì7E‘Åb±Ž¯ŠúîÛ¯~4v—«<5éîÃãÎ™Ó‘Š¬Û}¨v¿ìëíÿs©Ëqx8Ä‘Þ=ÿþE¦«°틎ûšn‹®¬ù©”§š‡="­âÜ´Ÿ~ûðwZ8U¹³.¬3£lžï¬JuÊk'aØÄ_¬¬Kv‡Ù(õppÚìÿ6 ÂgÑ>?èd_àšŸ¤¯-®Oõ•™Ožës[wo¡i tö·§“ û¸>h`{lúå¶pšŒ”7‘ßÝAg©r.††Vy’0—U}©» ø°±Û÷þ¦¼uä Xý÷ƒIöuÅÝ Ofw?òa¥ö¯ùWȤû¡ö3‹¶yêÎu7‚t’$Ú85²6pý4žx¼ï» ~^U×y·$$˲në ŒŽ6-wyi.uÛt5JDjá\ T%ûs_ÕÃÈí„ÿTüP\knt½¼ž”ŽøŠR1¾iΗ¢”Q×z¸µ –ÓZÇíoòÚ6¶IªE{óKââïGþ©„z[«õÚ¾C"[ʰð ¤dð$›3mÄm­q×Øï¦…yXYÈø£tô8‰ÏüÊ›ªªeÐsƒeDQØ’]¶Æh &J”N pFÏ8èÍÞüñFCo´Ó;“[•Żԡáè]y~óËoÑ®‚w°#0¸l÷L#Ï;£Òíîý›¾ùŽÃb±a˳˜ÈmÑÉæ1;ì”}e3-Ƨ¦ó³OqÊXdˆ¼( (­{+%^ Tñ)]0Àñ·(ò 4ë#È Ñ›Yç$ '@atžMnÚ9›;f"GÛ$ h{sÃ6Š,†ˆP ðsñ•ûTbF›m‚†øW3]^0äx‡0Å>£A¾ ÏÔҢݽ ±bbC*—fñRa_ýmÜÒžDeQ¶J|®vW@ï]7rÅ9øï%Xׂ*þ <êo[€0«rYàñ§wßÿ ñ ¶±†ÎÖ ¥–5Ðwõ·¶ò1¼ÿ]ZÍï¨õ×L-Mg 0ŒUéÀBß>RâF¨=±D¯C1pçÊìÀД‰â?ÄÜAxP€Z‘P%kFŒ|;goûü!ëGGna :‘ñr“80ŸÕ¥ $fy>Û«Ñù„“N¯È iß)8%²¦ò«é¶Ò5—⽇ɯ± )c6!k1›²©• ¸1IŠ ÒG©<9>èHŠ+¿!׌¥”Gî @ˆ* ’’㑊ø¯Ýå#ùÁúÊ¡—«T”˜Qf,¥ñˆº(O²T³â— Ì»€ ŽÁŒ ò¬–[3×§5G-e(jx€í9¤§ÚG6«}híi·= nÎÑšðãŠ:Ç(Íõ=š LÝŽs¾¦™ŸØþ6<ðÒMr’Q`ª¼i$‘a‹Ò^eVád©Ħû PâCØæ®\}BJ*`ѧ@3ÿ6Ü?âÙ#÷ˆ ÙTüNVu¼*u¡½”TÍ<’¯ï‹Ð€Ó4@ÞH¿úqŠÎœÒ¹[} `fæÎy`›À>4d„Úèõço˜JDš4Ueðú`T¦­ÿÄÄÁ¥ãÜccÅ]ìs]ṗáR—\—9óÏ˰Ã^6È'}ç?ÕÐ=1¡v¨ˆåÙ|6$Vfº)ôÉ…ž H”›j¿b¦s¿šG â6¤‘ªxÊ8¥yßÓe*õ?Õÿz%ä§©×ËËqáþFÈ¥tâ¬;]¼ñ;ÿI­Bµ¼ºÅ»C6f.ÙA^Œ^Iêƒáœ,òŸÓ,BG¤E‚â­/-_Ó‡ ÁÔ÷{dⳋq)þRw¬ááA+‰BRn~Á{NïðÂüÚ·oç· —¶)›Ñ£ä—W.`~­®®æ,ª­³ÀÀµÁÄ`è’äZí ó¿Þ}â endstream endobj 123 0 obj << /Length 2960 /Filter /FlateDecode >> stream xÚµkÛÆñ{~Åý©ˆhrw¹$] …{±0ÆJ€¢Éµ'±¡H…¤|¹þúÎkù’Î礨`[;³³;³³³ó’ÿ¶ýìÅ¥o² ³ÊÞlïoRdÆÜ$Q„:¹Ùînþµz³ÖáªiוÆ+—ÊžeÍßýÁÉ 9 $ª²ë¿Äa‚d­>”UÅ£;ÁäüÕÔnS•µß/¿[«pU xj›u¯>”»²Þ3jçú¼¬ÜÎ t?ˆ¯Žy_6"b~לû…´ ä—럷¿ÙD†¿‰¢ ‹c><ïTUÄòa…+â’¤+’é‘Ǽ òªÜ×GW÷ Š$®mýªQ²é2!Xo´1«­Gý†ªídØ–èß}ÛÇ-@x¸Æø&…k´¯Q‡Q Óø&äC¼{õõëHȦ·­²ÀÚÌS9í·üxªüaîXÑkТ ª¦ù¥“aù jÀ½øƒí$:Å7(@d-è2 2­™ÁW_­76 W‡ó1¯‹C½P:S* Ãh£8†QHWÙ óÛÀb1®hÐj" ^Ý•9Ê``øúC^Ÿâ¾Ç£(Æ0ÄìúU¸œÉ<@“y¸úÃd qž0ݯŒ¨\-+ò¢`Ó1A”š©¼ú0ýrÈ ‰üDì&´‹¥ÏL?EÍ¢¦†;Ÿˆú¹p×YÊ0 ŒŒÒÀ8xëMŒ»Ö6d.Áϲ½áÃ0Ö E0¡H“Rhºˆ/-veA¤Ò›‚7¥|z3Zg`=R±°]ð9:6b1HBÆL6ãg5ÑÒ¬òzÇ+ðŽyÐ:ÞÝïµs]ÏÖ”wnÇsþ}_¾I•š Nµm`žË[𦗧4 u8œPz:æP ÷ÞŸº84e!¢5÷W8gQªÁ|~…!¸{«<ÁUé#¨Aö¿^»cn2óžÝãñ®©:TkÀûŠ‹e——êU͈´Mž[ž+šê|¬;öåà“€°÷ë]½;5eÍ1G¡.=̷×À“æP¡ÀŸyųS× àCÙ˜¦uÝÉ‚&gÈ»†§'ÛÿzvÞI?NŽÍÎ!¿$‡?)¥ÉO!} CdD7¥é¤€¥Ñ‚JB òvï(l¨Uç@¦ºps†äøža8ÐŒ )@Ex[ãíéAÐÒŽ¿µÎÏO¹‚õÑh–óµyât|ă9lŒ ¬N®ØƒVŠî3­"ÌTøvq‚­Çe½+A×1ȱÜŸ1#G,Ý£‹Ã1žfFæåCäT> U±dìôÌpAWrZIräUq®äøËíŸôœ˜õ£—Dz—,Ø+9T,Úkêä÷7Y±Pô•W&ïñ‡zGfª´¯|`4©Nb¶0˜–)ÊPœFô®ìNU¾¦¸ ¤|P>l¨yÜpQ2(|aü¨¦³¥>š(ÿtÇI3Êua¼£!]Sô›i…2­ ćÎÔG•ÞT÷cer¥z(Åú»—Sböyw­†Ði âD*Ų½òºzéƒ ¦±Ñ¤DxÉI%ç²–Šq¸Ql‚4še¾¿ý®OŸ§æ˜×÷oX­ÀIgvʉ+0. ï÷}÷EŸ}Ÿçˆìq³Ï ÃÄ~_ s$„lWøIczŠû%š˜_ò†=ŽÌMê(b9 3ðe”g.…/›w‘<8]-áJºr¯ù.¥¶ÀñÛ·Û[øûöö|¶ðïv ÐÛ-~ÞÞÞ"x‹cš¸E^m€r³y»…Ÿ¼}u{;ìmâì)ûH3™RAk?PJŒíÏŸüá ILt3ÙÎk£ƒ@kt6en©lj¯s#ù¼ÑÓ½¾ûެ# ©>JÃÞù§Z(ʉñ—\}.7ž†ö%Ü=Ñþom¬Œñvá'v~KPf^9¬6ªkQ)¢ß,K¥Ädõ\”’© â0š×’_S'©{"\,Ú;‹6“дn±ªË~}7_x¥J¤¬ð¤<âÑUUæ27xSB*Z=B )Dc¼ÀèIþ«#ƒM®Çá[&)ÑUCÀåÊšó”-e焲k޲aw>ó¡kE˜‚~×—…¤¶Å÷nâ2Ühˆd,«ù˜¬ñÇ“1nN§H|¿çþtî%¨Mäp>oÀSõ.ži}©,HÓtÞøúKªÐOåÉqú€ÐD) “ÚgnÚRzæs¹ìP–>òÞ”/`Ða&ÿ’[<á*×3¾³S)Q]n¸•䤕ä¯ÃÍlºØÌÚñqC%VîÎΟ’nÁí®sø~F{Ê»ŽTÀû÷?òྫྷ@©À6A®6²q:áa¦©^ù “»ß°†Ç”ÊŽ$êw³çFÒœ?ò4qª9›ýøÿXö ö)eQdÎ=ÔÉsÜÃhÉ>z–ÿ›‡ÝUþ*J–üµý¨‘Û„ñÖôþ­Ôçã&à8Æ—NícÈèÐÜ rŽlCêë»þ‰Wß~÷ƒ´uË£Ïaa|†¡< _Ò˜dÄë*?un÷r9­Ÿdö®xѹBD‰ÅÝ/‰_¼¸žÄÍ;ÜýSC L@q^ ˆ†Q¹s9ÈMÂ÷Ã! QÚ§á IjY$ß5×N‰!p\#¾|ìàÏØ©Ça²úç:2äL}öϬzÏH0ŸÒ1ûæÝ;pÐè¸Ä1Q¶·²ŽV_’kAxt-HƵa„¼£a­D~Â…¹§Ò:ôÛ¥«»¼ó{¡*"mÚª†­}w !iWzaå•öG0ã*<íÄúØ„?qŸŠî×Ä#IK!’ÕÚv‚,Œ˜˜—`Ä´Ñjל§ø¸™ð~§¼pÒÛ‹ýO,ˆ¸uÉ"Ìc§ÚåPúæ$Œ5pÍøÄmsÞ™3nŸŸë¾¢Î•ÐÍ”Nc Ç #Üb[~ïQýáØ1Yé uÜ#B¤8Y€)ð®½+J­tñJÒŒ4Ò¼ÝÉ4 %i©ÌGBî GúrEëònÈ:Wwe_~z¹O–”x7çžžK.™E Ú-[º¯§û{ètšy› ú÷bƒŸë}~:‘*zïöœœ" Šþ æšä^á;Ù«óûZà›=€à„ª¨šÎU ´®Ê{¿Š~GK³g21:Vœ,¤aœH[y>Ëß B¨äþ‚’$|,ؼ?PF KùÞ¹“«wä×PšQ·°h’úãdǪö™lœFòzp·ò^z8䆊Èf‹ÖcU:*´ô}ÕJ#Œì ·Ú¥INy2ª•9Ô5çÕêowš-Ï‚zõŒþ" ¤£W®D§ÈãÖý["5R4‚Eϰ,-Híe©À {®0‚k>â[\Bºw<芼¦Îl´Ú­#’Ü¢´Ïíõ³àLAd†«½´­ÀV²iC؆¾‡‡ìGE°¹Áw> stream xÚ­ZKä¶¾ûWÌea °­©·°ãlb#,<çç Qkºéգݔ<™ŸzQ¢zÔ³vSSÅ"Y,Öã+²¿¹ÿâÝ{ß”a™éìæþñ&×7¹ŠÂ(Îoî÷7ÿ ª~»‹£$8UÖ6ÔNƒ¡gÚ8Èï±áFßÜÆQðŸ‘ÙìXš[•áí.Ñ:øæ™éûæÙª©ßEEAìºæÌ½Æò\õÐÿEú0›ýz¹ªmœöI–i~™š¾lsèš~”IžÌx”AÌüqwûïûïo¢›Ra™¦¼Ë_ou ÓN8G–Ã#2½{¯O3qª´„‘4â§H'ÌTx<8gáX"™Dy ô+ÇðÕË t˜gËšV¤â0‹rÇ2ÏÃt8²Ø| и»»UÁܶõp2ª³IÏô•Fãq²¨I<†¢Ì#v¥ËDûj¬*+_p"cez:øìæ>ÝÐËT6h|ÜÍZµ¤ó]®Ã¤Lךº…ãoPBª ªë錔jlÚg¤EA]µõÔaÿ ²Mä>šÃ±±#³á>ow°Ó¸[¿á8Mú–q‘g0H~2mËt4ñ V§2P–+Žã4ø+JË:Ci2•¥BM‰:7l ÅÓyTÃ4r³|ÿ$!üò²Ð˜õ.ëé0ŒŽIŽ|5âîîGṅ Ò‡$‡£K’µ0÷Ñ+ÍçI¤x‰ãižºHCd@Й¿a™XËÚé,-ƒ›ˆ¢É@áä(DU/.VqUóN]¿Kõ1XÎyÁl {îÉVŽQ6M°ÜS1ùš'WÒpMWµÜQµæÐc ä> ‡Âî 4U}dò“é÷s@¥¥«‘{ìDA9øÕ/»åp擄­ýÁ‘’‚Uà`•p°.€£Ü)È«x¸©âϺ¬›vz(³À.GCé8AΞ8`AƒÜàbbÇ»­ûSzÚÙðjŽ &˜úh(ý±ªSDÅN3òï¥B-³afÃîY,ü€=×µÏÀªˆ<訓ÌDòáX2#´!7Û­*ÓKÈA›ÀtÞq£Ý‹\.£R4¡H½Ø‹ZUš>!ohbÕu™ÎY]—:hLÉØZô90GëRáÑ#ÁËLØÌÇ`J§ŸIÈQ˜'Ùÿ/#Gj+%ça‘ª)%ÉÒqo>Š‹lÌ@W:Ib²ŠeÐãòtEaòF"U’‡ ä^g˜«i„3ÁÈ6bT6Ç(ô,07v­‚Ç Iï9Š<¡ŒÕyÏDçCÀIެ/wC¦= 9È>uÂE¦ÀÎpæñ•[è4€õ“Ñ· SæÐæ?ò‘2BŸ!OBŒÒ5`yžEœk— ߬%;ô)Ê\Û3FÉÿ¬í™óý†=ÇE¨Óä³öœªÙž•3èø& Ë<.…˜o%ªÌÍ _î±e¡Ö3ŒL7¬:u\Þ켉ÄlþÀ›ÐZå’Éb©ÉUBèÒiN;Ziûk:]UÌ(Ìò§‹¼EÐUŸðÌþ2D-=¤KÌ•~ñdšêÜÌ,½,4=üÜÔ#%/ì„“Ä®¡¶óP=˜ÖØ0-ZA0~¶Fæž0_·#v»â‡ܸð”wßTŒµ×A®ª=8è:»Ùõ‹œDE³“7ÏüuD•`6¨]ºi‡S³Ê­Àj‹ò0u€Ý‘–¡gÓ.áR¤¹í†N³XðÂF´ô‰Or‰çÆšýä\’güü"¼äÙÏÜ^ Î8W5n¹,¿Ç Œ¡x=pL+“<27]¤À.O2çYF<±E¸4F‰?$󶛩Í6 ¾®>ˆ±¶˜ÆÓ„R¥Yì]ä¡ àíq'S÷ÀÀNqÌ¢ê…äv.™€ô(»Fˆã†×«‰Ý‡ÆŸÈ…h xÕZ*a~í‘Uß3·+Ñg™]mY|Ó”‚Ï'S“^àÀ$RË9=€€d6} ù;à.>”Ô±ø5%’1`pÅæOó"Å`ï¯WÄåt±K”ÎS³®–Mlî(¾×]‹çûY”;‡Ul_—ÉéþZ!ðÞ°Á)ØÈ[†ŸË=H¦}‰lß®¾‡†=5ìD¬^¯/¤¤"¢éùwꛃùóàCýÎ65Óð& ËÀûç¾êŒôB\8à¡òÉvNQ7mk¯‡Ãm$Ár»ú=VÐo—òzþôñÜçŸcV0ä‰Z8›¶:ñõ“Ç&G®š •dïÈ4 Ÿ¸% ›x±å eyRÊå*¨6@HvÊR9$ß¼Rø1­ÞõðÎ`¹\²ÎÆõíß¿–o°”á0àFiëPGÚåóŸ«ú›ÒçKkâˆõ ‹ª‘e§ã4Laf8ç°(4³Þae‡¸ áÈN»Èz¢¾}!‰óà ú@¤d@>åîg^ gP†y®X¤ïzFkvènÕzŽ3%V vtæ~©¬ë,o‚ȃL4[ß" ˜Z™½öM+½‡Êôv\±Öç‰}øÍv•xPglÉ>8o…ïy»À´Ç‹ÈÓƒÙ¬žáèêG±*Vþå’(Û—Ñï†Ã’R"¢òtë€'êXÔ«qŽI9gV“¸4WcÆäž/Ï.Í;JC¥ý‹£ºê·lʽB3nSÞµÚkO^¹jÃooiDsæ;èûÔKx‡hªkž«èÝÚ6²ÛŠRè÷(3p(U\DJÞ=È.tºK $ùnä®Q€1­”ó ÙbŸ@bOŠVù“ñ « ïh™@Š9 ŸeªéÛ  Œm€(còeÌzèÌá(‘íAlå#—Q\gÞ}øú$Üß*¹;NwEzÿÝ_~x·hÕ‡gÃt¹–`LÕZÿ–t¾d…C>º´|ÍäÅ×q0¿É”Sí —v¦œjAc1Æì·L¶ê¤u’ëÀßBa”¦ƒ®ys´ÌøáÌÍÇÏeDõçŠÄ{è±¼ü™Ûÿ@<‚¢µéÝ GÆOVø %©ùÕì'ºX–•ºùm%-KI¨ƒL)Û÷VñŸt€»­.R»×a?Ddˆ³EÄÆ¸"?P˜vÏŸW¤Nf©éCŒýý7Üw²ö +x2ÄN†äåÈ»Qj³ãÐv[Ü¿HfÛ´;ÙfÃn |û÷}êv¹áñiXDshpˆÝÓËo0İ;dïÝëwkL>ôƒ8]{‹W°€0RåzËkÆ/Sá›$IgILHIŠo)Ð×"²àõI³¿’‚´š_?:ӛǪÛR ¦ªY‡ò_‚á¸UV–×Âý"íЦÇǯ< ûXZtVØÿñ“éE@¾Äp@Z2 Z¶Ö@¨à®v¹Ï§ôìô9û¢«s¥ö›z+¯EYæã´ÂѾÿãí.‹¢Ålè‹7g“ÈL'À¦jßÍ]–kýKãÝœô³1R/gÉ^™ETº1“ëy]¦ÃÿööV¾XGÆ_7ŸÍ;&Nê_Ò,[ÛÎ >™Æ¿Å@•_<Îx'¦"B³LAWÄߟ'¼ H¸ò߃ï Iâ¿Ûmç|ÁÊå&r=1 âpÞ˃¬!5p80 Lô†Œë.Á?1ÈpPˆÀQõEPpN>—YY õå©©Üùføô(" Ú¸Lƒ·füDôUÎ\ßJRÊfälɾ»~eIù<®Àw £!&ñøÎ#zeGÚœðƒ5„¥¤P T>&lMVæDÌ"b6È!aaœdˆcìûâÏ÷_üõˆA endstream endobj 129 0 obj << /Length 3194 /Filter /FlateDecode >> stream xÚ¥ZYãÆ~Ÿ_! #£^²›§Øw7cdìg#°ý@‘­½<´$åñø×§ª«š—¨ ò¤îꫪºŽ¯šz÷põæƒT«XÄ VûUˆØóV¡ëG…«‡lõóúmÑéf³•þºJºü÷ 4tñ¼qg}dè>o¤³®OÐqå:M*nÔUšti"ÜwuŠ3?ê¢$RRäU©«Žº¿8Ž,tK®~ÔÝÁm†|'á‘OûrÖ ï‘ÕvEÎ'çvùãæ×‡ï@H‡BzŽ/œ0Z9$ß§}RnߊVëŒ'5²õ$èBÊÕÖuEìû´&©²…ÝXHÏí»?ž+"GÚ¹ ¸J:Duÿ@™c á­O­^8/ôDÄvCYîNy±$„ç‹ PvbWÓî;¼ ³Âœñ»»–Œzë†yöÍ8Ü…¥ð¥ñô¤£ pßzãúk±Ù*¯9OxcÑkžG]Øæ~FnW[é¸Âý©’M}Ô4 ìm+ãpÄYÅ5DíNo—'x2Ø©rÀtš &ÍŒî°q×KZ•®'â¸×ÖcQïòªõD z[¸ÇPø²¿ó±=chš$6xHPßä?4 ž²`D`Eª¿Ô¿üõã‡Í6_»ývébÈÞŠ’ªª·¤PÏ“ÀW0Uhþ[£øÑºÈ+äÂ×ùïyõHÔ„~ª¤äAc+~Ä—³Y<ßÊ‹‘ ë¶^R¨ ÁNÕ+íÔí'’œŠŒTÇ}®j¼Î'bå0t"f4ÖáZ-÷9¯Kë¦ÑiÇQËØg´~ظ¶Ø#%¼p¦¯‘ƒ(×CåàO‰lŠ.ß–u¦ "fI—ì´-å‚5uyaÍÝý["]ÞÚ¨T¤h³räeØŸšž‚"ãÈŽW`øÃßYœEÒà7þºD%|§"ù< ÁkŽ»¡Z~±q¶»µ¼õíuI$ÃæJ”4šHõž~ÛÓñˆ;xÎÚÄ ±Td€Ð/kZ„áÆ$\^ñ>cï‚îÑòHJİyCk)nBC'éa¾v,/_4]Okö=sÔÜ"ìÝZÆ‹ÌÀ‚;PêõìÉ>§4Ô¥« I¸Þ”×w'¼>±n¿Þ}‘xHŽG]Ñ€±C›XŽ"«„!bÏ$@ôŒK]poßž¾.–Ü!`5õ©ÊÐò½£¡9]#S$å±Ðt~Z—%'Ü@#&:é#ÝÊNCGÁ˜ÏXDQ4]ø7ºš>$™KÄIÿ@ÀtáÍ.‰sŸô'¬ÉBðg¼ MƒÉ®ÆÛ44‘èÆÍxh4O=@¶k™Ê³ÆùÈ”¨î:7ŽãÑ„¨vºkËë \‚¾5Œ‹Ðµq‘æUàtJ@ëcéX|ŽýÚŽ2ò)åœ÷ =ÕmKÓq£0ê-e@Gø°å«òEäôÞs^¢õݧ[>:iP¿ #]䚦ҖE{pSRMZš›qz¢µŠÚÆ7!ÆpHø­Þõ+ õÖ­Ü((OO…1[˜¢ió¼©-RSN¼~Ê/lÁ'”K:;º±¬d3^²Üª+§HDNÆ­«ÑKòCyxÍy¶Ñ ÿgιº8Rk(&¡C\b«£ˆ ­_ Q+Ë÷ÆtØ Z·y§ÛKi|a~Z@Ú'Í5Õ©x)ÆÿÄt­òœ©Î\cx÷ßßÐ ¹ïOQ>²ú2¢¿¯Á©úÃaVùhÖ½Kº¯‡Sn«Î QšÃH>jšTa ‡â¼â‚àb< ³ªM7è´ç1Âw jšÕ&ƒ¾´ T^ˆsR±ÿJL{=þÈÛ¥äz† 3XÌþ_ÚÓŽZÛï—ðÀö7ú}ænM¿ºiê¦&ƒún:-}²ëÿÍ¿GMƒ¶i¹2âúcœ\ômÅ,®ŽÃÓoflnûm{íŸáC˜¡ázA¯_6Æ{³Sj}¢*6r ‘M0› #f@Bïéwô˜3Ze‘4=‡][CžÍ§|óAÉ%&#PeLìÞwšÃŠüQ¦g’JÓƒ."p‡Ì ï?fòL°ï,$þh«sÕaЋEºVk‹ÀÙ®òGIµMû³"¿wQeÏ”öm¡åWš~!¶füB?EÍÏFï±c½XÐåן8"X8,<œ}Öý“fR­ÀŒãõ[¨¿ïÿ~{K=£? tÃÓP©2Œ­qŸman|!ðÌ~J–wiª1È¢ðqQ…>åwPFq<ù E»‘wj‘]ª ®Ë÷Âõ}ÍlL‘Lú†g<˜lçù6ÈQðpñµm–Û>ô-VÓo\ßU±ˆÀ ]ßµýžïâ?|ÚÈóÝ=?†9¨K80¥üKé`\À™NÀ.¼ÐïTdžÿ'©§Ã=7òâà¡•pcwµ ‚a®ò,sÿIÏ¥ê endstream endobj 132 0 obj << /Length 3337 /Filter /FlateDecode >> stream xÚíZmsÛÆþž_¡N>”ª‡;¼¹ãtT™’ÕRªl±ÎhœL"Ob Šúë»{»â…Jœ~m5‰±÷¶÷ÜîÞbwÁ¿Î¿yuîË£ÄMB?<š?Å¡›(u Ïõdt4_}šÌõ±ãGñäQ§K]K";ú£çùUÝP£Ö‹&+ j”ƒ©å¶ÙlyæS–çDåeù™©ìó±ïMôëãŸæ„ÁÀŠdŒ…2¹aäÂoÐó&ëu½H j¼~MÏZ§ÕâÑÒ_¶ºXè½À«áAÝé*Í DnôØTåC–kj,Ó&½Okp޼#'4½ß]]M?)]抛œëûj›VÏÔã{Bâ®f¸M³yýê Ö•[V«W/²?+7ÏU¶zlöœÏöð-Sïʧ´Z2½]=êšè+½ÌiNK8jÖlí¾¸ßy¥uΠ—YÝTÙ=ÌgÆÛÂ’F¡H\\ÿ“ ]èÊît³½Ï³ѳl¡‹Zïpq3Ûi¼ Ãùß|¼$°]kIÖ©…† ÖÅ@G³éíí¿Þ~øÇÕôEFMZ­tÓZn߯-£uVdéúE&]9ƒM9kjËû~›§ltÏ£ô,4·¹Ï»<ňé²\ÿn¦°fÀ÷ÿ†Ô’Àc’<Þ£ è”?0G`ϧÙ?ÔOcAž.º®Á£Ãbæq#¤ ãñÄ·º^TÙ¦¡©ˆãƒ^\§kÍ­ómž¿¹©ÊFg…µå.ràNnÑ›LÏÞønäÂ+<åhƒÛEYY¿öP²M,Êõ&×>t;Œ³ÇEÔÌŠE¾]Ziξ ,_èÌ[çHønÈîÎŽÃ’}ØÚUýÌ#vê½¶ïÑݧ3ßWH} ý¤0åŠXu·:»4ßjVŸÄÐ÷YZ3ƒ¯š¤Ùpç5?¯Ê¥Îy´£¹Ô¡¿xŸ¶ÇøIV6m/Ãp,¤Ž‘ú7ÔNñBÅ®Ç|=W1 éÚ!÷«ÈõÛ) OIp²a‘ðó¡|/γûª,0€a=5ÏÖðååeO#xÂÚQÒ“ݽ=Þ[¸QoNèæ´ãü¼ùœ‚ðõëÞ ;Ò6ˆì)Ü0GŽÏ`Úu#2 ät¾¬9ЫxJV ¢¸n5¯®ÆqácŠ!ÜîØ&úÅ…kY±â¥u»‘ ûb€*„/ýÀ„iàêQ`7>©Š]%b;óÇ\ˆî))àpdWMúà…›AG J„“:û÷±0ЕˆL‹½Í#wبÒLݤ ^õp,áUÀ/éFRtñc¨z½pc/²ó²z°qq, [ߣ¼q€E“5ÞdžŒšê-2/yìiYÓBÏø¨A¿pÐï +IŒ®S<Ž=#ãd|ܘNˆL‹Ä¼d$&þc§!‰fr,&ºâÖ ðù‚N†ŸŸïR!ÜÿZõ'v&ca ~G¯Ø²öìWz¸ šèMíj‚y‘è‚ÐÑ}Q&ÊhŸÌLu^$2öj¤(•ÈÃÌx-Þ™Ú.OZþo¾ì´óLeö`ôDX_Ú»ÉH:ºma|S ñ2ÛeËmÚFYæx!²%ô9_ë]ÍÈ¥ê ‡ðM‘ŒguY|G½K½Ñ°õ6q|,‘Ï5žÑŸ”[^P}ŠQ]í6Eì(à¼=_¤ØI¢i$ ²@‡ý@¢8¢€Å‘ç ¦á”Æì+ܬHïVÎ Œ÷Ã9iž­Šµ.ê'ÇÃþ¼­¹;­iöaÄnàÿäJi\Ù‹«¢ÀNÅ—ÞWx7&œEÙ¤°ÒZ“Á†±¨_R ÃØØ”¾þíœ@ÅqÜÏéßv¥ýÖƒ¸O§6µ_S$c>£ ðXЮ÷Æþþ{æYØ7îï|ÿÅoù%>à ¹p¦Ý`-k›\Ãx¨02cÐb%ó„ótÆ¡5×Å®3­ý¸É—ÒÅ‚ÜTìÊ0…·m„6ˆÜzqÙ¯5—¯2PGH9”þ‹…KÁR@ÉÐPÒÆsÆW¦3LDŠX¸.‹E&!SÊKFc³…£]âà@°ìÓèlê¹Q ¡| d…â–tcjÄ>ÃŒ‡0•L˜ |o4µc#˜I0¶|ÙG ^SP*Œg=J‡¶eÐ ia(±´ÒL„Žùû15„É1LÕÂ4f`}m-åI¿ÓP±ÅhíÙ½(Âö½¤%e0•-$#­û2“¾8}Õ·JV³¶:dÚUV˜ÞŠ-y`ÔSûÑðk€†íõ±ò:p{Zåi1Vª‘?D-Š(ŒG£2ÙŽ…™Œ1Fƒ4ÈáøÉNš×&}г¦ži~ÚcIZ,q2’fot|‹Äi<¸E‘P;d|žõ"Å–ApI ÙkÞÞãQÑ’ÑHïp²Òd€Ô?€T L=ëï|¢ûå½>ýÔnŸXû„¬!á|a´«ûaüáG®Ô”ªÆ6üXÚ sqÐÀ>æ¢46ðö_Òý‡‰Òr²œYŒßÚaŸH.a?>yóf\Ðñ»õ.x‘ó7µ ¬ÁÅ"ÀÆÖʹ€Ã‹ìËuâ'™xð¦>›ÒßÙ|ΔãÜÂø?wLçóùÙÙÅYÛ ˜1Ÿ;Óé~¬òw†[NÁOE½"EG1ÑT¾Ò]äõ®Ö»¦nê¼ÉëêÍæórµZm²fu§wúù‹þ¼Ò+­Ÿ¾À¬Ý¦jš¦Þ5y³šéͪÑwú¡úø%Ý«¦mˆqL§C€ÂÉ M=aaÚ6‹òää®&¦°“ÕÝIûgû9–äçnsÂûÔvŸ““ÙÉɪ9¹í\@?B7bkªWb í ‰ÛÓ›—Ów³«‹ÙÛ··ïf§ßýðîæâÃùüúâærzq÷aöav{{;½¸>u@uïgoN/>\ÜÞ]žß¾Ÿ½?½˜_ßÍg§³Û«Ëë¿¿¿˜^Üc ›M'ö*¡ëùu»¾ÏËŸ~í£]p*8ê,~1%^>8_|=Ç[å»~ Øòʹ9˜¤øøzóû­»c¡0K4U¼æ–A²â³%мÇBo¸½Of í¥¬zûi5ö WyzÌ0íÀ&%®D›¬5èY°e+ †¦J‘!¹aÒÌ–B¯“áâ„Çr›3güZc,ìPfË~pÑà;)ø«œÂfï‚R͉™É>‡…ÁN!„f&Ä œUYArž6\éÃaô»ÇbbÓ]èé”0ã¦2"ËÖ ­=*vc2Ï”a·iî°Ì`Ê5ÒVs¤gO]¦Ä…]íÇÜ&¶å®­xþäÔœD¢äL‘fÑÓ¥f›æF²{v £^œð£oâYè3…€mCÝFtÐIÕ±…Iý•šd-GŽ™CŠÛ;³­¡p|9) ÿ]Vnkê`°@YSAú^s_y¬H™Ò–% —¿S#i¯JSv1[ô>—æpNÓžPZmAÉW”OÂÀ:¥¬ÞÎïnÒUQÒÝs[k ¹)iÝd‹ƒgÆ·º¥ ÏWx1Šïq]S'ÀgV´…-%p給¬2¡M­u£+k·JE$ â V‹Iù¤¤Å/ðä2ªÚß4ê·W‡úeY¹ß¤ÿ¡ {Èûr[,m)̸—˜‹ìq4YFøå“zb,áa‰m±Íê@lël‘œ\>ÐR–7N! 0£LœÐ‘½0Ò¶Àžå¦*7š€åÏСÐ?%žQ/2xB¶ìp½Ö-Dz‚—ôJ&vÐÏN¨½“€F{l¤ô +ìfMk·ŽÉ¸íœæ‘=vNMó ‘\‚(éi¡p¥¨ÖœC¾u‡Î*f‡ x0r«žÕ‹á¶.Ò­q%^D·:W½/'8Ò¬™„5`è¡]«šæ™Š»ÇUQì`·] *®T®ñ^J2?( ®·› ¼!˜é~[8MéXšæÑëÖ%4H,‡t®õ²&}°; ¬.Í—~l÷JéÐ^á¯HÌœ¦¬:?Ö1L– ü5‹ñ›FF‡ì(hí(èª= — ‚Â;´Õi”T˜›Õác\xÅ+Òƒw›<ÅÆ^bS l £º¥lœè,H“EQCþ{é‚EÊV»ÕÄÞP3Ú½ÎЫÈ.¦w¬Á‹ÔÔ j¡oŠ×¸;#Ù»`3Ä.8`|àÈÄ^¡ý–LXÓ1Ž·Þà˜ù›­©”GÊõ$åÀՖ‚ åEüeXÖ=WÄíg3ÇA³ã$óPÁ^Ð~M2~ŸîH×0¬ýÁúŸ4iÌ| TV#¨îg΢¼Èõã¤/&óÍm½&?åË—~MGñè¶ê~Ý zˆrÿ*ß]…e{®§S•ÏTþ¾™Î¿ùä·ƒ endstream endobj 135 0 obj << /Length 3621 /Filter /FlateDecode >> stream xÚÅZ[oãÖ~ß_! –‹ˆ!ï´€w-Ûªe¯½r¼Xdƒ‚’(‹]ŠTD*îö×wnç”h7) ÄÖáœëÌ™Ë7C¾{xóÃ…«Žcž¯«A¨¡c[¶–ƒŸ‡ïwiRgÅÓéH…Ñpsªìá>¯³mž2%ɳ§b“uÅÏÏY½æÖz³¡ÎÓ_þþÃ…r±*ÀMìÁȉ­P¶xXãZ‘3übÛ Öåñþ ‚ñ‡ã]ßòa®÷u¹Ë’ü‡§¼œgEåùÖ*éÙÃq|Ø!ÔÓ²Š÷Høçâ4²‡g³‡S:CšÒÛSÿ¢,ê$+˜qxö|þÝÄSºäG>·«ô×}Z,ÒêÔñ‡ÖéÈõ½!¯_ÊÖ$ iæÜ(Wxt‡ïX N;¢«„ÕuZ‰˜ëR~×}òñ=+r]ͪLP@X‘é›r™ærÅRn8ùŠw¬oW_»spíšÙ%xË{Aëp£Ð¶BßÖ|Þúo§£À¶¡'}p ÈLù½—=r<+ö¼î¬Wp¼r_o÷µ´WZ™h¬þ^gu¹@ |]—ù†I«S.q>ȧ~I&F ü(ê$ÊàyÍy°gWÕ­ÅSÜñ™ yV¤U÷°™ŒÍËò«Ä×ôÖhC`Å¡‘ækY„V ZA²øŽå9{øðþúêÃô†Ë&õC{ôa½ù|ùñìýå„ÙCkô8Ÿ?ÝO§·“Og×ã³ódz˫ËûóÉtòqzq}yu7~˜Ž¯/ί/®¯ô¢p±ñïþzù‘÷l­¶aïî˜nYALóâÀRn '²”âÉùClPz•t¯aëêÃÇÙXØz€­K`ëØzütIlMˆ­ñ#±õðÇØ’Õ;lE–1_Žm[žr™1çàL<…^8ó↵».:bmjX»<ŸÎZ¬½rcNo²üïáíÿÂZëÒfg“Ùû^Î&úÒîfÂÙì뢬þg06ýüþnrÄØÄ0öp>mkãõ-1vþ;“Õÿ Æn>üÔcfÓ–™5Œ]cmÆnÿc²úŸcf7?ÍÎn…µßFôwþi|ýx;{ü4;{ÏΧg“ËûÛÉt w6¾ÿ|7žÝß^]Üõ³fYÖkñLA ø§F i½òbQ¦‡ Ly]VòÔb…®€؇#M ™Ï?æ¶m‘!ÚYuTFóá7fê‹¿~cœ‚áÏÉè„{cÒ&Mèæ"[ÖªÃOš’þ®…ÐQ!`4ð]fOPðÚÝÛœ†_ÏÛüâœ,Üu^=Œ6R÷¤ýØ,r¢¢á‰Sí!0ïÅŠ/PåÖ-¦žÉPLmqä5ÙS³â¢¬ óyà k–dQezx8ÜîÊy2Ïr ¥²›œ>•e*p˜Uº”oSLrÿÍ:¨LÎiØÔnôh+ঠ{€–p­0ù’ÆJzøG³„‡>s¬ZÂÁ' 7„cÑ‹‘eC:*ý‘ó,¸Õ:MˆðάÔÏvøÅöí þ9L悾k }:¼“n› a~3…‘CaИ®Ü)‘+t"o‚yyœ™¦ÙN7'Je¸(%+5áÞÌ—Ô Æ@´OäzŽOH-‹üSÿäo˜R–ûwá3Y‘q¶Ã2YM§ÕHãd£“çÄz!îZ$2¾Je¾¤€Ø óîõ~'¤&N ù(F]™AúÕÍ ´Æwp»¶›.X\ALgUë0¶IM^˜*˜Br‡ßÆÜqßÁ·sãhÜÓäÝʳ­0p®8rž°Yn F­QTpÈ;ñ™¹Zè‚;*t„¡x¸! “¶ÊÐqP¬è;¨F–uõ4´l,Û´FìÇYúžkÎÎ ¤ç‘eä3㦵GŒ5`ó°.(#’¾ )«°ì¸Ïª5æ)ƒ¦4-ôˆlÂÙtWt€Î]¡Vú¡xSèE°Lª5::RÛ)ûŽKȯ ¶—K3.FÁö¸…Ï!†Âfz‚ÃÞŒÞüúÆÑöÀÄàçëÆV²_lÞüü‹=XB,g¹q4x¦›²âás>˜½¹ók´ÝʦíÀ•Ä´”Iòv¢KK¾½/–Àô¢Dc@/GîF;.ÀéÖx“Dü+94”Üx´¶ <ғͶ÷”`íîàЋ‚Rj­¥`Ž?-“Æ^4iîÞIuÓ ÚüF>ˆ¬I(L ¶Ç¶\ˉM}“ðy4œB!„{•EÊ{µ*˜ðDF ÐeC殸/O‹'œaÀ–±{`ŽÍ±GÂ3¢òïá^H#7¿²µ•ÞŽlШ’´¶y²H_Õ]ŸsI’ŽÒB”ðøœašÖ^ ÜáÅÒ¢?¿há((ƒ½Åo>°¡§QñY³XU<¥•ÌïJ„îQ‹½mO­äVZ+Á‘uÐÜõ-'Ù™ì˜EéXê§—)/â›ó9íæ™„~¼\@Ü_îÀO£œ}Ef9Yq_a®"–®¯ï+r‡sùíõØ%ÓnÀFN ¸ëxëEÇŠ³ÈgCß2û-[RúƒDásä«ûœ}ó|TÔU=œ&C-c0hôëi=„†¶ÏíYE|îÓúh-?†-b‘) =òÚymàé0o§u‹ƒÝ7Ùr)&ÀÞgÞ–Xôà²,[¯“ÚLïaž5-ôÀ¤Øógåž)€9Âþçæv̓9zñ°r=ªÊÑtpµÏ‹á€*É–ÜÝRðÐÓ¾Û§TW§©’÷‡ž¼òøý…Ï ª Q±Ÿfçf²Å^¸ú’ùõ`}Éz%„ƒ-¶²eL ì 1T_µ£"\"å,’„è™Gu9"ÏÀ@Û¢CO uA€Î€Lª&‡h®¾ìÌä…`EMiÖÒ7Imlm98 _•aªyÂ;½¶§+;8pÃùÓç2 Y9g*ÀW¦Fà›vÐÁ¯ÑÜЊ ek|kRR»S¬±¥v§â3‰´‰Æ?SÔ"€»¨+£9/'çeqR³”‰I£ !D€ôþ¢…ÃÏ§Ž‡~ôݬ^®2 sKÒIrÂ…H q1èÅ$¢“à¸ô¨B÷8ëD" †ªÈÔÊ9û*p làè{ªCTºzºò"Rqaˆ(MÈâéy$]6k‰’‰*qncîä)ú½ØF§™ÍËå㔄)ÞJj]¼3% l²`³¤NsÛïËîóHÙÄ錋rÿ„ÎýÍœódOª`HkÖð‘¸h÷LcqYøV#¥Ëà<0çFMÕ²ãÚ·Š+ˆŒÉÞÝõ}oÐ8°u±«É¼qe~©«kÆÜzR“æV|¨µI8vb¤ #æ“]4542?jm„žY =vpÍ7ÒEC° ¸¦\· ø¥5Zßpð”¤î•°è„­7æö=(_½ø(–}‹Ù‚zíµÒdÇÁç`5ØÌj¢u.^EÛ§¥v`ùÎÇâà¡D"-Q rWÍG+FñÁ™¡î/›O `+Mën ¦Ç´¢K½¹ýòN¾Ï¥{ÞøÙn’ª~ ¯fˆNBžåˆ>¤ø! -R–ò4oššZ¾}²Š.\@XÊŠÉ#ß¡^ñp™RrìóúûžëÃ+ƒ_5;xp¦Èmâ׆®1jÅ[Qñ Ô×nWíc ÄBS5[EJ«$z\œ »ô®Œ—’ BÜ›9aPX‡".¼ìÆ PØÔÀqis¢Ð–ú~,ÐbD©8¾_Š-/m[f¸L†ø‰½#ð:­›öZuHUÞ>2Ïá/D9{=˜ÓrŽ”¾ÿÒGR®å>Á&p‚~µCÇÀ³­É@«})jbc.{®Ó| Xž²ÿJªg ÒžE6òQPªr#}@üÒ*®àùd&Pàs'Þû’XÃ/”nÍ0²ú’‰I¥ê™=šïwÞŽâËéhrS4êø6ÛŸkÕ"/'ªÕ‹+TK˾q[ŽMnk„¥ÇÃÂd¯×’Ï›ÎÔÍ+Ÿje‡nžô÷_XËäúAÌQ€GâB±å+7Ðþú?©E¶ endstream endobj 139 0 obj << /Length 2179 /Filter /FlateDecode >> stream xÚµioÛÈõ»…€¢UD\r8¼ZôƒŸÅeAF°»h‰–ØðPxÄñ¿ï»xHa²»-ª/½yóæÝÇœ-O~ºTÎ$4COy“åÓ$ðÌPë‰o[¦åø“åfò‹qº’üõtæ8ʨwQýjêZFÿ•2~Uʉª*ÙæñÖZÐò¢ì§Ý¶9i_Ë]ÌÛû¢ªãr:³]#)J„ÙÆ¾,£Ç$MêFjéóv]4çÿI^!m5£(£Œ«dÓIJ/œÖpçoËŸ'3[“ˆ3Û6C×eï´’“WIû­ø;àñŠ?´ž(£ª£:>&º.J`r_ä›ê˜N’6YŽ ³Cã,^GMÝUEÙÈ­(¤u(žð BßÈ’í®æeÇÄÔ66 B6«(ÊyUäò„³×,1ƒÛ*D´Bεç4ƒ€ÎLˆ êÆºÔÞÀ 0­ÐqH ô*B:pYÛ7}ËnqFù!»kË5ýÐ;Ô ë[ÙY®ñ§E¾­˜3°GÛG"C²nR\ã6käx±eD.*ðç]LŠ$°lC)EüYïŠd-8Å“ÀˆÞ¦ŽeeËϳã¾h±šB Ñ­s;âÝU~@îŒß¨|Lêrjß–ñkË0éüA¨xL„bW à-žãÙXÆ`O£eÜÀ œ µÌ.Ë(Œ˜P»¦vZ¼un™×é _³‹*^DüÁŒB:‰£º)cÌ*¼!6‚Õ3rĺ.ãö°"¸ b ¨ *&&,ÛX@€¥é1¡ëwï.‚· mŠX8J 8$IÅMe«C}“¸ÈBÆÁ›BǸF[…ðŠkm|Ê ÜyÆÏ\äù2Un‹ ÊGÔ/Ɇü O ñÓ8ßÖ;†nÓ⑜ÖUü¹‰óuï*p}”oF çx–é9E˜H¥Ç-ú-ù\1-GºåHÂÐ3=Ë9ÔT˦ãÚ{6q Êr=Ûx C“%7¼ËaÖD{ $M>áßxDÛ9 äÿ€z¦ë¨.‰Ýe›#ÆqÉÿ†¬‚ÕÔ˜ØUÆMÍ8ë(U3ÊÀ›qgS0Ûzâ­¤W }S©àPAètLl÷¹I¨¤Øž‘Ey´L\Ûè" ´¯uœo'©+Þ`¥eÇ9£´G¹´€mG‡Ä›pù w#ÁŽÊm,.7o¢su=-œ/Þ^ÜœžÞ̯P ·«óûùÕÕÝ›ùéb~³Zݾ¸_€®Ï_ ù¡ >èX¨LËu$¡y8o†ÿ7%¿oZþ>bŒ@﬈K_Øô [†ø¢ïÜÜR»xq9ùtç×?ûIÝôª ší oÉ¿Íò€aÛÝì4ÔÄHº‡þGArÐ~hÚМýé^ÃZ#%øB‘á–5?’í¡í'b„”&8`:< Â×?Ì#³~‚âÕ#ã¢m+:©nès"Rýæ­áÛ!ñx²ÔÚô{£ШN0ƒ#ÁŽ!‡ædar\RÊSƒã†ÐVÕ‹~°‡Js3xM92Jqª”‡ רè#^x _„‘¥Þe1L£ Ìb~ñ¸WâCñ™ ^FÜ‘Çw $– !(OŠÆÝÙXÃb¹ Ï’ê«£¡Üqs´ß -2ÇàvSÅÐjò6]°ýûÕ7ÎE2Ú忝¤Î’£ý>MÖd‘v¦q<=° àŒôc€"å‡èöÐØ3dÙWÓcȈYTQ¹;˜)‰a€zÔ‚}™hTö€Šw¨h0â¿¶MZ'{jpc0d8ÚþN´;v`zvçûcA®-ª’ÖÐÛAQýïƒ\C}sC¦dAâûakSõÍ&9 :˜`+4<þZüDÜDÉ3K61àëUÓv}·w‘¡}òè_îQz«8Zï~§ir˜f-Ó²½oÓ,äý‘1Ó2ûü$ºèºXïÏ'<+„*Û)·ŒB„{à¢ÜÀ$QËÿAËwÀžêÈÉkÒsB t˜¿_¹[Î$ñ€†¢Ëþ‹yÞÒÁèÃÛÐbàh±´7 $+æÈ`ñqËK“^c3T®t\F¾ÊñÛXøDæòÓ endstream endobj 142 0 obj << /Length 3093 /Filter /FlateDecode >> stream xÚ­˒ܶñ¾_19y¶JC‘ørNR"Uœ*¹’hã,8$v†‡óáõþ}úð1ÜHªÊiÀF£Ñhôóöáîõ{îí)‡»‡Ç]î?óT²{(w?ïõý!ð}ÿp6÷‡0I÷ûðáÝ¿xxíîCß~òý°6¯{óÛhšBЊörÍ»ªoÁ­®¦®sÿËÃß_¿Õ.ó²8ŒqGw•—iÞðX ¢`?œ«žG½)†ªm^ÁWœíŸîoxæØwѾ2À‚zF°3´‘Áµk Ó÷Us’oË}=Þ+XØñGÎt·žVßá|HæNê¹ÃÅ^–¨§Uæ…~°S^Ä|Â`C0Jw‡Òðv­3/HƒÝ!¼,Šxº?·c]‚h36õGÁþTý~F(„?ÓíŒ<•3¬7MoÒ>2èéœ ±W @”=‚Ê–D† ±)MÇP+mݶå+jGö@Ij?,÷¹TýFžŒ¯dÁ%Gù?3ð"8txyêO~äwxÿygêgø{Ü=öy“(‚»Þü ™É›’§„A1û0 iÙ lGd+Š÷¹¥ëA¾«fµ Tì: ­¼Ƽ®ŸõbrX ŠpP*Ùÿe¾«kFEêzYWš¾fA?^ØÊZÈŒ#ë0„7ƒÁþxE¿ ´ƒaôî=ïŠ3O E£] *kTÁ ò½8V°!mt=_.pß·ªªB/L2‹öjƒRÎÄÎÙû–’N=|¥"o¶8J¼8ú"À"üšŸ_:±”ZLQ#e(oåkà•…yÌ T×Ïü•wíˆú†xCËö«À…å5–U_Œ}Ͼq°¾õÒ–j‰)WN“¾ÆÞ«fëþâÈó}'†æÅû4íÐÐ<6hAH“9©D¯•ç+'/OêÄ‹”=q<ùuäÝùlrº†ìÀÖmÃÔ«•TV^vK4sÇ2_ÊŽ½®[¤ûÄ® Àý`®ý÷|ˆ~Óq3­áÀy !ðÇ‘,˜ïÇÔÞ†¢Ô‹'›øK^c†Ý@Î?}ÑvÈ‘Fû Náç΂ô) UƒªFÛ+ïÏä&¯- ôUóZ0Á e0úc~¬êjxf±ÌCp ĹŽçÚÄ^à;«oÚæ°q>ЇLEÎÛK[·§g4puQÌÂÄhï&ZÉÑS —ÙuÏñ;¢@ƒ¿¬ÜˆvCad!5 ÎI ïÇ#Gá'6ƒ3à+A Ýe›ªaòšn%e§Üä5ÃàP‡¶,û‰ÀÜÇóÀ>y[ ‚ù ¬X(Çÿðñ'Öâ/âÒ¦)Ïy)N¸( RÊBˆ5…© »– ΟÍhc¨ yw«yo ’ J}€ÀV]kÃ$?šÓ…$‰(?UÀÛ±BÅ«•Mëªf !\Ÿ/ «Ûö³Äp§»o%fÂÔ 2µTÊ ÀG^HÐCž«Óù€âdöÁ:oõ3K½(uflNùõjÊ-O^Öáåuujð`=_Ô!éÿð(Ž™C§bÙPt,„'ˆšyߣ²7·±s°1ôèÜÖå6ª:9z!ÄÓ•,rc»ù=ñg¨– ×Õ¸ ~ëîÐý™‡¦îX j%”;ó+š)¿¬¦¢Øo«¼ÿJ= ½( ­°ß€µ?O‘0@Ya¶…£Î”cA"…R—œxÆÏkÛWƒKZÂw‚äªAÖ”£Ì¡Œð÷Œ¢·Ð¦à€D í"‹@˜•¶»|Y&*Úƒ¨)$:Z]Õ@Ž;L3̇y@"…_ȵúµuDÑ2ô±k/<âËKSÌÆTt^Ï̲í€ÒÖia693þääuŽì5eÞ•Kê‰âr¯8æ½b›f` .øE‚ræT¶ ¤0"ý„_1•!§Ý,n¥m¹sì`@î—9 1Ë~%(·«ø‚õ™¤&Ì ¦ÒoL^>¡Dl‘gÏb&|-c¦U(Ð ÇÛL8%b­p8TL(vF;[“LkÄ5€²wgHN<'rTØ\þR„Â_"ƒÉà—?Ö¨lü¬d²Z“ñ4èãƒ%u$Ç‘³q&*gãe„†ï'ŒÀn…µ£à‚3®+ ÜÌ÷扒è²ò0ôÅúƒ÷MžðžXÉopm4gg™[‰ÞÌo}Ùímóõ‚ç‹ÁóÑÌó….¢ÐPú.–qT…ÙEÔ& Û'òÉdTºÓðT{ªK^3AŒÚЪüêBz}ax]qÂ[WX‚K´†Åyc…7ºbÎÑÀïù«Ešh…M^Qw"ð1d(0a2™S:ýÅJ[f1\ò‚)\ªÔ}FN¦G[âž?çÁ%€l54kËÔd5!\š#ô5aä2Êÿs)Œüµ•r‰”¨A(¯‚Ê•m‹É<ßùÓ‹þÌËà[µÁ27ïz#3ˆ‹zu¢†QE,Gš«9Bâ, Ÿ@ÍUù[ÉZ7éG>“ 1QŒd©ö½*nl‘©?+Ã+rm§z8UŠ„p\·,AÉ9¯|°Ž){Eìuf,v´!7?qú:Bîê²éi³ž?¨Mà #Šå-çdzv{œ–é=Ùû31ð?‹!©U *8cÔ,º™|Bvq3ùXëÉÄò£€Â-fÁM¿ÕÅHÂY§Ð4È)Ë¡n¯vŲ\Œ¼ÐéÝ÷Ò¡rÅ:H¼uËnª*–fvv=¨îd¬q-ê½§s…½Wîe5ƒ3œêÖöÀí»Ê¬‰C}§Ü¶ §r{ZÉKþÆæ§zâ[o¬–l±§#Wi¿w aXÈ™ÿF{2QEêíñk`=ŠÏ½ ¯oÍñ—Ñ‚W²«“3Ý$œ*°’J‘óª …‰|/S±ë“ç¶Øê˜b“Óõ„gm¹zp¢1d†ÉReVÅÇâee£–„ÙY;%°â̬‡É-Ÿ—w™ UøNÃ5>Ó´ )¦~äì)ÈVÑkj/‡Oª©:w Jö†§.ó$Ua[„âÍÕFkì¨ÅÈ™pñÌ8è”>¼{Ã,¡Ì2 ˜ç‚F­\b’Ú$Qæ¾Ûí·ØG g–£}‚6Y›´*œÞx‘¯³ ñ¢‡¶Ëñ '|?¥¹í”Qc7Þ5ý~t‘+UÓKgŠÍ•‰†äZhOÅN©çíP5¥ÿ+’ÈÓ¾ž½xø¤I¸ä›P¼̼•-K‘₾x¶ž¿ÚFÀSÛõÑI¯¹e;ÀÃâ²ä"âHÚ¹Q9‹6¥ù^09(o§Öת:'\²’%eÉÞM[.õbŸ‰=°æaÜœ×d8ß´U…,ˆ(ôâd•ZpÊBÎÜt‡©Ÿ„€uh]Z‰6žVÉÃF:{jdzô;‚}ià± ¤ëÍŒ¹"¸ÿ,Ÿ/K™rÔ /l^CÏÅX¦+×-^–é‡Ê”w¬Ú/0$PûLŒG3§86Ò…åwœõëñ»²|–÷¥Ð~Á€wïî~»C;ôwþ"ˆ 1õ®¸Üýü‹¿+þÄSYº{"¬Ë.H/Èð•¬Þ}¼ûçÝ[ü3èUäeIBz•‚^ALÅkEZ«×ÿðü€Œ—†Ü—Jž a6O’ZýªWIA[€zL_´ž½÷c¢‘7›ñ­} Û~JLcozí»âõ5¹•’ò#HºÔ.ÀÖ{ô¿$rU<Ó|;å§`™PRÒHÇÛ+6)/É–ÏŽ+“†BÿÃrH’‰¤Jí!þ ‰>/ endstream endobj 145 0 obj << /Length 3245 /Filter /FlateDecode >> stream xÚÙŽÜÆñ]_±/‚¹€†nÞ¤ ±a9‚µ0DyèöÎtÄc2$½Þ|}êê&9Õ‚¼ìtWU]w÷íÝ‹ïß'ñM…U–Å7w7E|SD*TIqsWßü#øyjšÛ]\”AÛצ oÿy÷ã÷ïãä¦ «<ÎñˆºÙEUXÈ»£ýe|Žã¤»TÀ7”ßà”7ìu³Ÿ=š—Gwòtîïõ½mìøäVôÈK²@ú|0Ì¿'ÓíeÅLcš/hLTfU ´‘]?n<$Â=•ÛsìÛ¾éý4êþ‚L@z¾Ý%**ìÏJʲ€u³Kâ,Œª8„,Îùæ7°?΃¿~øðîÞÛ‘þ?ãõ1½ƒ@Œ@ ú‡‹•3²Y¶_®óºcÐw·™ äÚ5“ ÷€»¶ û $óóèòÏ*S~MxõDVòÚLøx‹,:õ°y°‹XŸzdÓo·q Â×Á`¡6Nñx¸&3x¬ïvž‚\ãf¹DiX¥éšNV\ i=J=vX ‰Hó´ïÌnA âdø¾ïQ‡élj^"^ÂÊÁtFd%‡ÐHÒÕ}+¶;Ä#IÀ££qЭÜÐÝ1¬1Ýa<²^GÑB¯w[ÏýiËT©Â€äI’2RˆÍáØÛ ~ ´ -`§E£÷2:ßëIÎ×üÒÛXƒÎ}Ë#?Ip¯÷¸þå€[ÏýÔÕn##|’«ì0‚Ö PîqÿÊ/W¢Jh!r¶êsͶ(¯[qÁ†6¬ÃÛ]Vå,é×0ŽbG7r 6‰ƒñlÀE –dƒíjs2ð§e¡“a\]óÄ€kÊMÍŠIDüy:Ÿá쎔"Ζ HÀ ¢ öl˜Ü‚YhÏ0 —H¥ÑP€K{xÍS=\X¤hŒ¼DqâY#¬ìúôh‡a÷ñÜ<ÏTXÎû·ýØß;«•ÊŸ±Lñ—ïÑŠ{Üž ˜ý±C†âL}7ˆƹònm·ïÙEŸzgwƒ\/»q”@ KœÌo…¦…'!ã®í¦(ÂXùÀ1;)ë°‘ýfbJXø˜9“¡bŸÍÅÏáCea8Ö:Û¡?I"g™ðôUèA¥‰Á’PÔO¼>NĽ #÷ŽGÅDqäÞånš=,.ÛîY\²ÎÔd–}]<šãRª "îRxàÝQÎ,Hf7‹÷p ÜPk—00±ªBšÎ浃nU¤Ð¸Ôwdp0w¼7ò|²[Ø® ¬øÈ |)±<8u¼ëlZm‰ÙEœ†i;Å£vÜÖ—4 ³<}F_ˆúFÊØà™Åj‘—¡J/ÔÂq°ÈÅûÄåYò–GÓ‰Etx€( Á¤!8„j$<˜'¥V,ò%úµœÑÀ¿ÄY=Œ ¡©Š‚{³×Ó ·9Ô$¸ ᳃7ãÜ—÷OûxñábÑçŠ0¾ˆ[œ6Èš‡ëM’ñ®³d…¦– r¢íç_sÃAÛr|-UŽ)Gª’E›ª˜Ø…PÝØ©,NPTô{”] ;Dø4¤éoNfoáŽÿà3Ü5"&¾ ³jFÔP6ö8ðÉ–%;Ú“»ýhÇÝ@ÞÈÃÔôèˆ7¤5u}:‘¹%ÈÏC Amà)ü¶zÜ1ì³b¥`m‹Î'Ä€–ƒ*^#Z™pùÕ§ï- ^ãä×­àò5†P“’v$ãè6ùçî¶ž"Ä/rQÑ›£Ô+UOÓò#н¦yÏBº©ßŒy…E^†é`ˆ¹zM©Ý/…9ŸÐ#iÚ_¼ äG3‰ÈÈB¾‘ü&`“¤Ê ¤ŽÙcŸ+§Ùž4»7Š/l!™ÂïÛŸÞ|ºsTÑ5SË+‹ûPx³œ—›Èï`¡>]ªÞ$Ú4' › î/ýt8bHU†,Ñ_@mÑó€¶Ð+Φ†9ûõ»ÎVç¿ØÓIÔ>w6˜]°—ax TR²ÃŽ< Ÿ¼‚Ô†ßGÓqô%4£9 ŒYA×±Pr"b´$kû½iŒµ¢º98kí·$å"yØïIøðë+5*x]rg ´×ùy ùEðCÇ`]×V‚BÄ&¥ Èoº¤·µä'9eÔ ádà#Ö]áh¯Ÿ:Ý¢pŽ‘ÓcâHÛJÌÞÖ’ÑË[2§2æP”GàR¹ˆ ø×Óž“þî¿*S.†"û Õm£÷Áo¹»wBÀ5s¸L'ðËaÓµ8ú›Õ<ˆòÝã-±Mø‰ê6ÙôÆŸ~øðÖ ¤ßg—¯»Ò`Ú3ƒ}ïâye©œ›¨f³®ÄMT1%0u÷Ê*å;É qf¿à«Mc}_3l•-¢¡Â†¡—»Gþ…²ÒZ¹r»Ák&ô}?ÉVV ‡í ‚!GOô³:ñ\qYrÜyW×O¯x µK)A§,% âÈTœVm[S[*úi•Ò³’,wšûY§N%'3|·ìÀŽyržpùÎÑ¢Íî5Å#GæÇÝ–ß ÐÍd˜Ë|ɧ3Ü–*\äýªj¼%Û¯ Oc뇨F¢t¾•ݤØpåº0B}‰ÊàãÎÓÆp ‹{é²EQBê›øTû³ŠÓíFFû[…*æ+Oz›D€yw—‰K«¨ÚO䥊„’r¶rÕ6¬BUe[ür‹ · QGMý­$À?¦8¯\~à‹E„q}ªV•7µÀ5Oçtðâ¼ô1Ê,Ê«Õ÷ 廥yµ,¨Õ¥ÊQå?÷nÕõ±žOüf?¤9æ@zà”¾ ýàjXt{ÏæжpÙ›{:¸“ø ’}'²„¼ðÍ}¹>H–µ‡:÷½î ƒÊQÿçê©ùMjOôf7cÎ!ŠMå{ÂcßPòõIUø¨D^¯ãQü’9ø%[¤Tœ_‘ø°™¸0™ˆ/ƒÁ2ûÂgCöõf¼Øl¸9#”°¹‘ÞB‚všÆW>¡=›u×DK»Ðv®q(…ÈkoïyXII% U‚"¬iõ}$#áÈBÀÁƒÅ'¼@A šUTðŒ¬P1ZàøˆñùZN'rÈ™ðI¾8B{í_°…Å%Ø=<"g*GK‰D|3M3ðpvÕ09ú’&-fO<ãŠì aôÀ…É^”=îg›®=c!¹…%—91gÉU’]Ä®o0LÃ×È{ÖVg¯Rd²ù‹ÔLöìð$U™/óåÿ¥½ûV\ž]¹€ÿ£åûÃè»cX¸÷Ã`çF\±pAÑÒ"¹5¡Ì,v¶ìê2´ÂÊìâÅÙ\-_ã.aÈñƒÇ5œk\ð/ö,—õæH_¬7ÜÌ¢ÚϤŽÄï•d·ÝiÕÈ\›•«ÏL°›šÅf¸Ø´ð±xD»T#k(}Êœ4 )_±È§·¸þ“fñêÿGVŸcÜâÆç˜k}H0VûÒÔ?kU€/þ¡¥xþY¹u-™‹Äíª üÈ UX ) eÀ/Þݽø/Ju endstream endobj 148 0 obj << /Length 3638 /Filter /FlateDecode >> stream xÚÍ]ܶñÝ¿bߢ¼²$ê3) 8mŒº¨á´>ä%ɃVËÛU­ÍRòùúë;_”(ÖI‹èË-5‡Ãùæ}{ÿâÕ›Hí ¿H£twÿ°ËS¿ˆã]~ ²Ýýq÷£÷—wï¾ûÇÝ>ÊRo4Úà(ñîTà•õõn&^óÄÓ§¾?òt«‡s4 zþ­úö¢;Sw¡§T‚cªþº Ý_yâP—F U$Лz¨ûî%B2ïpÞ8ðôpÖFèÚý¾ÿënÆt¨}úE’ð¡Ê+aæDsJ¤Y6|¸>#³õ§»(ñ·ìŽ2¸\šZËGS2_wü ŒðàR_tSwòõSGm*Z}°ºéïò¡OüÀ:à¯wI€'SE'MÝx^ԇ梑9^ôuV£«„0j#þäÛÐeó5_5¡G}º ïŠÊ£>úwûT%Þëôj<…”eyõ‚¬ÊxÄ`¥t¨?q{ßíi¿²QêAQâ/‘Œåi‹Û?,fbG©ðë±nR•M5¢R ¡üHÂBªu‡Ç§ «ª;ٵ䟟¢Huxâ±i"øˆÜöGÝ,™=pϘòq€ÈèÐJ‰×í¥Ñ ¼ê‹¬!«$QÂÌ´?/’½q¦6ü{„µÝQ#ïˆ1íßc#øeSŸºVðàr;£[òÌD: Yݸ­O5Š%Þâ0ôÞ°F=¢Ž—×ã«oË é}´F/›S/Z?œ[8_+P@¹ SŒøÌõX`Ãþ‡–Æžéy†—…`îðÑw_ ²cZéÞ;àÁíÖÍÖÁä<“Òƒ4ï‰dAÕ³8ôîí©‡«.–#."€_ë eqéöKÓ§ƒžÏt(ù*žV"n{#û-ëûQ–ã2¾¿vëXWÝ–uGRŽrqÆyÆþÁg؇¾ù$É$OZC_52 ÷ËX“3pÛÛض.¯ÕÙGk¼×†Á%ÿ˜¡¿œÊ S0}3²LpŠÂ Ñ5Õ8±ÉÆöÖeEIj[”¬S)[Îã¹n4ãtý ëJpØ›ÓÆI"NZ²¸ê,èô†úS=<<à`‚Á™{õ&Nl!*b? `™ÝÛ‘IœûŠ‘©…Šü,‰-îH’t©=ÈÚäò‰mf8ô…‡ŠR?ËÔRPµÙˆÍœzॵbÝh~®Ogðç,#®»0؈ÊâïÞ“û‰­SȼšD§âœ °ÝîÍ@ù¢‚jò»6pݰÝÀ[Õ@Q'ÅßižwÖê–r'„‚BÕGŠ$øõpí[F–À[‹Ÿb­·´¨úŸnÇãcmª%×}Î(1%är­f@iø—U6O'_2œ|9æ8/Åd(rô0ºŠíðQ*GÛ‘£âQ„ì¡ËŽA‚Ê`Q±ý¦…ñ‰TH®-R‘PSáœBñ'ž¸ö5+ha1cÚŒ±"÷‹¥VU¦.ò-ø<éN³%ËÒˆ³Ú'žžv¨ØÁ4ÉeCPèªf<²àT9€!ßJ=¢2îŽ+,@‚6<þQì6Ùå`·iŒv›å~šM6~ÉåÅw÷/~y0Ø…»0…²l—Ä‘ŸÃ¢ª}ñãÏÁî“À‡¯Š|÷H¨í.òS$Õì>¼øû‹o©üp÷ ÓØOS¦”¦Âú¹mýêë­£ ÷£XýGPðJ=ÛxcÏ(óÓ0ü=öT€„Ë=?èáO³â Â¡Ál¸S¨Ô¹\ËÏ\:€¿ prõÿ²¥ÙBŸq^ð&O˜:õŒqûê ü.d›{ñÕù%{‹(Ž}•åK5srîDl¢Ä|æ$¨dÆÙ°Îˆõt¼ö—s¨+ d:ñ´SR`ÐbKéL ¹œŒm|Ô'LRŒu0T¡Ð “äyˆÁcÚ­(à'\P<*/ÛŽb¼Ry!ÄZ(D"Ù¡Fƒ ö_ì)bpG÷™ïWXÎ!`Eü •a<8Ô‚!WÐÈÆ3?Ú‹¢7ޏ&›÷'¼!6b ÍŽg^k#™otw¢‹È9õråÅAÀªþò˜3ˆ6u«mõ™'ֹdz#W^ÄÉŸÇ;kµvŸ0³µõ»Wùí­ €;ëàŒá*¾CÐÝ䘎_oNÁ÷AŠƒY†­¦al½»ôì0¾J±q`ìâa™·”ü#Q-³Iâ«7àœ<, üÙEÿmÃ[@¾”‡á¥lŠ5T]•ÍrË©yáFoäÕÖÛOÁeEÙR<÷ƒW¹8™œŠåŽG˜÷W¾hì)I.œX{…V¢b¢yêäƒ8ÇiU§øYK¼¿4e% ðõ&7‘d ,¶tÌËnfD«"[OËšqDÊÈf(Pò"‡fêUá ^J9±õndûŒTv;7XÊ#8ÂYÈ” OpKjÚ/™»bªâB‘7ØÒû©»j°qü|fuVå¹õ)‚DÀ®D³¦¶|P£‡sðá&µþ0@m‡ ñÍîܹÊm#!+¼ïç Ïôyb@1ù~¨¢ ”Òè‰ ¤…¹(î¹o޶ÉÉŒ6+=~a“K»N€6´âØ HÏU-o[_·OŽv÷ˆ=9.Q\’‰sBAÍÝÙóu1úŸ^^7£’ùòÚòóÆ¥EäÅúÒˆOJO¬#6VY>ͯµ¬­È5ƶ4ž+ê>æ‚߬©*ÛõDxSI£ x®¤9ffÔæ¥ä)Ä(‰¶¤"®0Ä…¹UùôÇñ²y®¶Ó„ÃÎMýLØÇêÏØ¦eÈŠ€¿£m—’žæÅª:£Z0£p¯R‡9A¾`mlH¯°Ë9å8€À ¬»¡[Å–«&Tæ*©J%LH1« à€6Õjݜ٤ÁpD„z¼6«Þ·ø²’ fÓ’&ªT²å4‚É7Gù³îʼÀäYšî€ZŒÊét!NTŒ÷1Œr ”¡*˜ÅïѨØØáè¡FýüÒ±Š/ (¯á+‚t6-ó¸@gð /ÑSí‘ÒŠ4Ns?ç/YÝ(Ä÷c9üÆÌØã¹æ†*'ºi gy$±wž®=Q‹*W‰Ãà‘ŸØ`ôÀGe+XÅ—Ä[¯l0{ÉÜBVNÓU­+âxýÎ%¹­uÌø…»³«½Î12ÛX·©œ[âùœ¢dß>¬´lHÙâ$ÌLn^OŠH¶ûrã6D‚–‚¨ñóEªhÇg‰ð&Á0\tžóÉ~¨‹C½â*•·Ò‚€ô ËB·zVÚ´`aòôNµnXÏñØ©\³|*WfëaïeÄXL/«½éb mmf‚dŲ1½})s!œ¦óžøAAWʳ„’>þ¸ýHÿ OO17ÍœL1•G|k rïí°\=Qæ•)E9üÍ÷¬%ÖQc£«´:b@úðöÝŸyÄZ] °çM­®Ý>|-©bTØK×DZ"v‚n Ng$u¦ÿhÀ)iËÀh›ðMc]Œsj&ÎDŽ- Ó=ÕE«áè'Ìܤ«¤rï}GÍ @ì;¡wµºEÐ!Ç™×:(Ÿº²Åž›J¨Ùí<+µ-Ÿ2ÁW}Û·øÌºø5–ñ(–´ gJrb•ÐCÃ@ž¡=3 #’ÛH1‹Uá2ý²ô޵À˜”?æGÞÐ !N7¤_¨RI&¹[9—+¬ÌñQoVY@8—†MÝÖÄɺö3c{MOíœr_›aÙtû0~”*SÉa4vG}Å—"¹¬4à‚2Ÿÿ£ñ±Oºu0¤î<ŽÝtyÕÔ6r$îl»¬x®zr°6ñ§Òß} tJãh£g¿%HzzÐl2Ù—6òÂ7<þ¯–¹ûXÊEjGÄ`Œ“$NøÁ<µý„ñ t*Í(ñ#9ñ ýs4k:ÈeBÌZ:¬Ic»fñJÁ²½€né¶EXS—¨˜»-8žHÌ‘°D§“ƒ]¨y­Wd)K*yÄ/æ%ç5ƒàrÈ2\<÷¼rÉn™ý_´vÒ> stream xڵɎÛÈõÞ_¡[$À¢káêÆ™1âœL#—™9PR©Å Ej¸¤Ýùú¼­¸‰=6䤪WUoßôþñáímâ KlºyóæšW¸{á]^xñ|É;^›VÛüØuÅúÌ¿ÇúzË`/Úm]ÉS7 Qpq¼ù¸æPðæg¥ Ji©í½ý÷ÎD[×´}û{$‚F¦50ÅÂ4’èxÌ$éÖí¬ÚŠP–›5 NmöVB5ý¡nžЉ/ð¾EöàåhÕ6XÑ\¥³ IäªGdؤ1|ò[画슖+Ïnò²xªPR&M¶]ÍÀÎ_pkj"C¶}[TO ”s_–¼ú€x{ÞœüýOµh§»\ß 0õæçǼ<öeÞ¹VHð÷–ů( W—º>‘Ô•È;b6ÑPPü .òæÉu¼ž°»§‚u[-¾ùßÈ—ýõêD$)1‹Å§®jÝõ€$–ñôä$¼½nÛb†BÒ¾ºªkñbRåffJ‘× +KmýoÎ?-T·ü¿g*³mW\Ý^Ъ/®îŠr¼ìÝ™<ð.®h ^ºÞJ‡´åìdí”Ã+¬ˆÆØÕÀPÁHá8 àeð«ÝëÞ‚ŒYÏî41D°ŠÃ=?€al°á–œA¡Œ]ÉH?~üô=Ÿ±¢Ž1N×´Ú^¸í)p´¢efÃl¾ts¢m9¾ÀÆ=köŒ©x "´5ˆÏouQu×H[ä•à-<Ƽb¯ÿê[À M¶S÷O^Õ™e 2Œ ʰðCƒ¦–w@m‡D-"C°;Õ缊H=¸€×û Œ6h““Ótû>?¢Aþ:jYs¼FÆ®ä  Èp‹á’\¨]a¼éвè tg›òûøÛv£CµíxÏ!žê®Rèⳉ¿Ði;Õ×4K鈀ǼâÅÁy€Äy£sNð_ÁÀ“Cç¨ ’é SÀôÍä{Á°SwÖç,@œ\—¥$SNíÚº’MV`ÀHUKü:¸¯Eä%2÷¾ŒÀ!¹ÑŽmí±nè3Ëî ™¬­ãEÎê|BL>ÂDê¿.2>'ð¹Àò˜ÂMlîfh…ŽËî\ëy0”õÓJœFy`oBÍšB ÕÉ‘å`÷ŒÀJ€“C‘S€@¬ê¶èª‰”ðXÂfORB˜²sJqæs¹^O®_ÞFq õ™H“‹8Ì(¥215C —D’„›ÒãGô°–9,>ïÉ–ò²'@Ì>D¤5X±À‘WÀ¨Pjgw­dr<ØáBœ¹Ôå ã©MÆo)ñB,§Ü‹€é \ñëšÏ𫟫¸xò©|ðÀ»Œ+n`Õ7ùŠÊH]XÍM•…p/8¸Àªšç^×Åc;V)xcP$Q™¯3Õ‚ª=”Úœ4§sÄ­«ò…W½Ô©ã=Ú ‘óɵ+W!¥T †ñ¤ A‘A¢,Éz¥\”0ÒeÂ9!´Afõ¢ÖB—ÉØª5‹!ÓÜj9A&&† iËkrÀŸ˜¨gÈø½w"@û¨ Ôò5  érNÏêãRõìTWNÐ|ä€Ó|Íü®µ/âñõ’Q‚:eŽ=•aTTù辬r)´G|òÇPÊ¿j±¬·h“‚ÞâõfT` zÛï?H‹ö§/^Ñr*K=v}“ÖIaQuMM]™òž ‹y¡ñqÞ‚·*%¯æÀ?½â>p¨dækÉ[ÉœµwÎdÄPpµOu`âdµÛGh>aøŠ¬û8euÍ¿¬ÈÈdAgK‘¢ÈH|ìš•õžÕWƒh)H²…K}×Ýu§E#á[™¼9JuQ÷Ý­ïÄÀ†~7Ï…§¯unö=Ñ"+Î¥ïM¦ Þ ð~{?\øð|Z.h•Ä‹á‚ѱMô«Ã…(Pãh©¢ÿa´`bëG ¸E›¡oÇÍ8Z0PHs`-àj>Z@É~ïG õ£¢€t‹û~€‹ƒ‰ãÙˆéY'õÿ4bø^Ê^NcÙû #…︡ó¶ô¤Ã¦ÕÀªqùñB ?ÒCɨ¸¼g  µ´wª½ù¾f8†,.ÙaC‘O)à*Õ(U6æ¼z ¥òô(¹O¿VxÌæW6_ZxWá&oÚpàrP,ŸBsDT옥ç±A&s@ryDù =B:ŠpÜ" 2Høýë§O?üƒ—7¸ó¹Ûõœ«bÖr²ÂÓ!?BWCÀoêë€Ò9O–ïžhwù!o½L¼úøûÏÐ)Æ~6ìT3¾æëè&rôí®zê.²-Ú¹\ò@î‡++ ²¦ãí±t9[Èö¹¸Ä¡A®\~wÅÐâ;ƒ™Ç33Ç‘‚¿· žtzV ©êj>8‚u =‘4J¨3þ8¨”Ö žË¯²‚Vzj¾RîŽÅʽ¿/ËêB2™ƒÀVu…øn•£TuŸßÞøäÓ]Æ[}”_®J)|ÚwC´“ £Àj½±A¬…I3´IB°H ð ÍC)áwi ãSªí×§¦™ Âl(§¸ 1Ôô•T+t‰ŸZ@wF-•ïÿpq_ï„j¦àóÂÏ)ü…jÞzcËX1<~sèŒë^ÐyÊG©A(Ÿi¼+´ÃäÏdËÉ·|á’,cÖCøàŽüdÉ"úyjË(¿`Ù¬ã! 2ªŸVú¼è¡P»5d§_( ¶+J³Y Ã±ª=Hó¢ƒ(^8Ä0ÎÂÑÅxýaà Ç‹oFMqÑðá0Ãá“ÙØ_—J˜Ë¤Æïîgn|Û\®øÉD®ˆ"7Dß8 ·J¿"eB =H­íÏ_² Â$ôèX¨ë¡Ä‘g†ÿk`3™®ãÖgz¥GªüÉt Ž?RÔèvî-tÅ©wžø›YŸ¡1úãâ‘átiÆdQ$¡Yñ'+²ñò/ˆ–Q'*Â-?z‡Ì‡DYì£{Œƒß®hd=±&Ä™ÿŸ€Póœ(^c‹(Ô¿Á¹Ñóy·–"†ÀU`ˆA¥áŸ“S©È@¹1äÝÇKï§ã¡Š¥Îd4¯Nâo¡´«žZ^yŸOœa62fØ0$~ñعäé\ÇzÖ|nj†öÉ'žnÖÿ,þü™ÌÖº·Õ?‘|'÷ðÃãÃo8:Q½I ØŽM¥fs¼>üô‹Úœïgºntš:K`]n~|øûÃ{úc×n"È~ ¹[ É z1È×êfpKèÇ¥É-ƒÔ@i‚TKƒöpa²g9÷^¾™¼æm}Ä"q2¯¥eßãÖô 澫ÖqDvˆ ms|{Kîc€åXÖ‘ ,Äß‘Ž ¨ÿžŠf6òÈ=å›àq~–ëš“;Ç)E!’t ^+}e(*¤ÉÂpi¨=ÿ‡¢U£ endstream endobj 154 0 obj << /Length 3545 /Filter /FlateDecode >> stream xڥ˒۸ñÛjª,š øÌmŒ+N•S©­©Ê!Î’8שˆ¤Ç³_¿ý’ÐØ»9l¼ºÑïÞ?¾y÷AGwEP¤Qz÷øt—Ew™ ƒPgw‡»ÿlþÖ˺½ßj]lÕ¾;Ôí1¸ÿïã?Þ}ˆ´3¯HƒZ!ÏzºØ9ººêyÏ‹€{µ±g…ÙYáP<˜÷¶o€ñ•PKÜÃN_ï£dS]g¨Äp¶C}´ Õ„¼¥G„}ôâR$ qê¨JƒTeF@«{n¾á9W¦ö^…›ñ¼C„ðiÅï ÷ˆ¼Ò*P‘]µ„Xuª|ZAWGA>Çö£L+ £w÷ Ò”q¸ŒÃ$m‚Hr—"iŒˆäi ŠÄà±Ý»fy0Ž5(vaNÂ'â x¾54Ô½ÿX |Eí¾kƳ›rW5p°kTUž™Å úvñ+›!bkf6j«cÂAFyçü¥:‚ UõÅÉÚ—V9–Û€™Ë´eßÏ<óT¢ýPïe5¤9J7-‰í3Å6ñ©)Œà}Ÿ^dˆW ã ͵ٵíÚí\ ÝÀÚh×8gš–Ó=Y˜G² ÛŽ"}¥cè¡ n§R†í»v@cN¢¨ã"Ðy"˜ʊ ÔrlÆ Î,(Îe/2ÐÇcÇ„¦|& °a“…2šTšùÃþ4ɳ5†“8Z£7­×M"zÛÐ}@¥&󕛪Ä]°Å'’«LìL.,ŽsEÿÉÚÁ×Xú!×Ó­’ÉDÊ‘]%ü’¿p{e\ó™ÄZ^T,—߬ uÏxåõðî}¹ÇM¾,¦›Ky퉀0CO26hzÉòpQÞ€H€î½0µ?uc#Ëì*þ–;´$4\ý |ò¯ðô¨{:D#‡=WÑFl“ㆯ‘?ÚµLk8§²éàdnòÿ“ 4°Z(~Îkf`n ,¶oØ,ÈãøOX^×1°Z‡"†j!t€ Àu¿¿VƒŒ¥æ!“q#áSŽ´!}Ì_å‘;åȈYäàÁfç“.ÈéŒd¾- il[íWl½+YS4|ߨo3­6^º'i"óc‘Kü/›3P·@«/Ϧ»_tM‚JþÀƒm„¼ “?äšÛ'9¥Á=5ôÃ[>æŽ7Nò¹©Ô(ÌÉB°ˆˆò/-XóØwç xI&ÀOcÛ¢ü¼pï±³=dÚt¡7Mýå bpɈC«3ƒ®Õ¥ œc_ÃýÀ;‰â`éff¤“fKN=¨)ϧÔÝ£Äà=PÌ3TÑÃÈ1°‡â÷ȵ”ô¦÷£^66åþ;Õ^¦âÔ&c6 3tϘBÝ1pg:eÆÜÛáÈS-Ër<Ž­¦ãM3“;,ˆuÜ묽?D?:žü7°9öL¢°–6°ÙQnt`aºNö*7Œ‚Æ<Ï åæ·ßð„ÙO…›ÎL]„àv±Ì#'Ðií9´)µÁÆRË$ðÌN–‚HIâ]ˆº!v›رë$枌œÇÞ[›GÑe)¡åN»F½Û:N çâC{ Êתé.¸Hª,LŒ€ Ïþ)1`R¬œ¦$) Âìÿ°eƒ".;žëý[ YÔ0TçËÀ`òn%ˆ ×ÂEQNö´jñà™GH’/E‰Á¦Ê1X˜ÿÜúAÑ­µ}KC&£lÂO!2 _ŠÅKÕxéXÆ›ºÆ&Æ£ÇN–›læC%ˆÍ’I± Ü1ÐFœÉQ¼ `ÀÆ,¿ÝUf˜±¢Œfõö)>š@Œb8åùq‹•ÛyÜ"âß§ª]hù¤„Ê,\¯äf6ðÆ°æ'_d± S”Çt„IËîl%lfĸÕb ËæZ•‡³Z[A™ÄÅ’ Ÿîðw&$‰‚$ÔËÄTÖ…S©[[¦¹Ú”ÔÁY¨¬é¹¥ÍË ­©å»+DOõ÷ÞÔâÈr2›SõàÕÚ ;RF[넽Sº0®ß—}%íÙLKŒÿs"nø¼Ÿ£$ä„»iR`$ÌZˆtl0Á,3uѸ™±È‘ÝSUÚ#Ч%ÁÆï¾ézR<üé/åž¶§Y<‰‰ÅM`¹–ÿ@6Þ‘ŠÌÙ,6ë÷€–lX8ƒ×ð)¼HGæÏ‰Y&²IüÀÐoa§®a8p÷Óµ;‹Œ±³X‡Á *Zè8F©èe+LéÏ”#4CmÈpÜ#æùoyè3 #ÆœÐêûýH«¿ôÃ¥NìÍi@$rýÄ R ø’û…/IÓ#b²§ÎnDÄØ˜R>u{9Òà-R'Q€3ÙšÐÞ‹ 1ÂÀØ6ÞK)Èբ܆XC·?•RÊAz®x– X;Éže¹fœr%oåEit¥zæJ.ÞÁ|göaŠe®¹ô¬·ÖÅjk*SäS’ # ­¹4Òvbç"t ÉÜ˲e* Z%…rUBÚ¾:SXiSÔRE‹NN ™>˜¡€ƒ=¨×ËÃÂ;Ù? TS¥!ñÆü<ˆ«‰cñß‘çòÁd}%“V‘£Xù¨í±†‰Á¾7{Sº€ S @ã…½~|"7V-Í‹ÔS}D}M¢™þ«ÕÌá_Aá0ÇžGͼV"˜F‰¯…믅½d6 ±Ç£nyä @‡Ø bXƒcÈáv$&²²Ã*Ž~lV<”-O{éQM{Ã7ö¯×_Œ1K|3œ- 8Ð4°w®Â¹_…³• ÓØÒk› © ²(™j°¾RØ­luKÞ¶*F2Û() |Û®½•ÌJù_C`V,ê ÀóÐEL_]HdD7Ò¶bMñ[Èg‘ƒMëD8‡±£R Æ V¢h7ˆXO#sC\ IK-“èš*–ãLÖ ¤W ¬|R6íVdRGoyÞÕDZœfa´ùû§O¿p7gKØ‚¤´³ê¤ ³¥õrkÃöúDé%vXòU‹2b6uþ:öÒ*y=ÄÍlö+oQö½*¤e3§}g¯ï†›¢8˜ÛñhîIî®ÕTwÒ–|®£®ôÀ‰o_Ë.A)’é6‹3ø¥NÄšnL|Úì»âHŨ@¨¬¸­ïÀ‡ÑX£ŸÝ)ç :o•hµs¯ôG¯ÀÔò ,’{f7`Jb~•9õ •›üÀ' u”œ¹óþþjîîÿø•y“øZY¶È‹Ö¼NCIÅÕæXOq‚[3]°vÐ~¥ˆ›¡X˜ó‚  *ªu.× ¸¶TqiïŽAt$ð_òo.¹&ÎFPŽý4X"&-‚N.la6 \T¦¼ñhtÖâ#,4ˆÞÜú3±pã‘å4Zz&h=´g¬ÃŽÇ3¥‘KÚ ´üÁN”78†„Û˜jáz´1•(a³6lö]µÜdºN•X%é¾úxYêð<|°N!•\1%«+& ïÚ­áå$–{AÒºQÆ£B´D.¥0¾VOcÃ?âƒÂd>ÜoŠ—‘ƒÁK8T7‚ ݸ`ä:…LRà µˆáét £DE$– MF~ûrì¥GœŽ&ÞHŠö´@ÇߌîO\W´n—Å#Šà}nŸr}jD‹FЮ©`ÜB9¢Aj£l mŸà+êlU‹Ä¿Uhãm¤9»¾æ¼Ûx×ÑÉüÎ3o¦j¸ŽGÕŠ•ª‰yG, ¶BŒ¹i]^\üÐ#†´ÙÏ'7øõ†MœüŒäõó¦ƒM¢ã™w¶Î[ó—$t±EÝý²Pµ¸Øš×Çì°[¯[Œ3±Ëò¥EJfó:ú§ò[}& ©T¬ñr ¦#À\òo,±êÌQÄC‚‚áK vðUÚ£0²©¤ü@é­¿*ÆÅšm öÚW¤= tiH—Eœ—Z9Í-ÂÀ®4¬ÿ™¿øþ%<Öûç b~hüRêb¥™XnºGðq¼V² »K~Ö1¶õ©äUÌ:w­¤9Ý­!˜ô‹=Kf|ÀbG÷Ö^¶îZ*„¦ß»•Gcâò„”­„ÜvÃ~aìm{kÇ1?™èyhw@˜ëÎòЀ¶îÅåÜÔñÌs†ÜÛ¿0X=°Hf,b)H'ÀñÊ_Ù£'Ÿ=-41 ÂWU”hù´0b¯S#côÂØëpIsvK0M.\V!X^ 2‚£›žÑkÁú0Jò± Êò½9Ê’„pz Ðó/g•Й¡l _cuÏ*Q’MPl¦ ¶„Œ£© Ió_$E¨9ÄâÆyARLªŒ?†Laµ} ¹]i üÓƒÊÚ”1–Gà}Þ´J_~@å×—>Ëšg?˜Ñ8UeATäŒaß›‡Ç7¿M×­ endstream endobj 158 0 obj << /Length 3586 /Filter /FlateDecode >> stream xÚÉ–ã¶ñÞ_¡›ÙïµhÜ“ÓL2c;/çx:ÎÁö¢Ð=\d.ÓÓþúÔT³=~¹ˆ@¡ µCon¾~¯¢]á©Jw»<õ‹8ÞeaàQ¶{8î~òþ6õ½iÇúù6 ïîv§7ž 4T콿¯ëŸnÃÄÓýQ†ßêòVÞÇ+°n<ëÒ £éo÷0Zu=ÃŽ¦ìŽU{Â^䕺.§ZU×<®GþŽçJ °Æ…±uonyøÇ×ïãtqš¨Èüo±ÁÊÈOr·v%G%QÁÆ¥ïm5u¯6íi<ó ÆËà õƒ<´ n§ðÓPmíÈ—Ç~¨òõå¹}³Âëq†ˆ3L‹ùt«ÏÔÝE ÃtàÂL[dÞyœ{ÿ&]×ϼBÕ uÉŽ*&f‡(<‰¥ïÜ4ƒÑ}yÞ8Hú*p'qüX-~¼\«ÔíÆJQ槉–;&Ïñ~à‘&nx`|T(>zgdnF°‘_«B‹R 3à"ê(·ð.°e¿¨|ÔÐü‚HøjÓøhBkIxØ`ç³n.µÑŒ”›;>_*P1î|ÿˆ¨ºáÞ±k4\µ›îh)wTèC7 *¸Ñ›¡:NF0ê®=ÝÑyƒõAA‰Ë³èjê«öX}‚éH Áu2#¶³mÖ¦"s©¥›D 6fZ°gtyþ+4‹PÊ(h9,Êb‘йqÿ–÷·]Û4{°T´¦Å›VÞý»7ØcZW§¶Û+ïÛ¯LyÀ×Â'êoò8cSøÃ(÷ƒ"³‚x‰…IòûEñeÉ"g~ÕåÇ×V= #·HÙ éîñG7ÎÌ!ÍãWx‚{Ýãh„§ŽoštË0z0Ò?K£Ôƒá!–y„=ãmw­Ú‹R1˜ÄD­%‰ø+’„šˆ7 ¬mÇŠ”``jì…QßÂdÙ“™y1ÏÄ1¿ÛÐ#„îb" V2AË ÐPËÐÔ‚Hu5_í‘a?+±>A+æ9 ÙØÐ‘ïYݬú[ÅU¬™¹÷sNs/îÖÆÜi „¤õ°† ‘vS}´zKŠÀc =n}ó–¿ÐòÛ{Ÿ', Ì’ÄÞè¡ke¯ò*Øy)Šq”€M¿(Ö{‹¸¾ûMñ§‡N¼•¯f‡‡`å¡×µè‡°u†ðR#0âK1Â1+ ƒLzäïtat”+ìkþ]¥¨æ‰ã¹›rØs¦Šbš(¾~M°› 5²,J›ìQ‹cÉ”ŸÂ)×~…@i.²üE)šžnšeÞ„“4 V¢ ÉTõDò:+âð§F3͵ud”ºîJ ˜G6 ².hìöÌ 5…úš(òá ’Þ³ä†@x^Ù÷®Æ4F‘± ¤okïN®»ìê©`­¦6›¾/*ü$rA$p+ôNÁí9’ãŽ!)±[?UuÍ­“i {C]t0Wt º‘–®†VlÏØÊâ÷%‡g‰w¼”µ$ñÓ,ߘû9$5DðÛ *ºÅzÝ * †’o‡ÆÀ<—óÞ &«®Z âüFæYTž:½i72Æ0öã9^×Bѹ+·âåÃõ»Lêÿ<ÝÂ1e©‚hÂ!ý^§-N™ÙÖ‘Q¯Áµ–ðyçí«p1OîMƒ„6ùœñ\§â8hSq’£Ä{cÅ•H·T*±EötsZ‘{ßï‰]OæÍ9¶¯ä[¦²’œÄeÕG¤ ü $݆Á˜€ý’Jt?HÜ*©AàtøÕáØ€ÊfäÛ.Øt‰Ó¤vƒU[ÖÀHº@š„öt~ΡC6Óð=tãyëHNŸ'«˜‹P ÍÁ"ÒÇÛ‹é÷læfãÅÊ%l ZJu¸I6aRK¡Ûï®ôúR]L]µWj? ³È©ùúþþ¯7–fp0P"÷Ï[êŽç.üÌú”~¼ U`å‘’BlÜ ÜßÐ3»ÄÂ+©L(W<• ä+Æ9/‰À:Ñ`Œ(W˜ö2í\Î{ŽE ¦ö¤/Vd<ß \/è×80 ìZ[Êao8ÊÄP@ÐÜu ÏI±S=Êè4×È =w[餜‰ºˆ!²J&0Ò¿è/Ú$² Y.ñZ޶FY" Â@ûê°ÐÄq˲--êbá| Mgÿ2šÓ3¯Â{û•¬Ï]fãGYë°¡*˜ã ‹]´8ñÉqœDœ üØ™v‰4róÔPÐ Mp…]c˜ü†ìZ¥HDé[‰ qAð3#ÖÆlÞˆ@-«Z:Y»<÷Dˆ²~â…›5…V2kÐ*ÑÀ‘†eœÐ'0-Ò±ü€ŽÌrȪ€pP‹Ž5!Œˆ÷H-b]ä›í¥ÅRÊãIùÈ+àÙ¡r~”ðu}²Š2žF´¶á•Ò×õIÿ ûÏ’ü‹ÙPÌeÜ×K_FæËÒW’Xgçä—µœc eˆ P”‘KFš?«<¶æ\‰Ú$óð%¶A˜]]¼mgâÅ Ã/R?/¶ªr/‰5E£s2©Š6: yíÑ ‚{èÁN‚%|Àµ&×rWŸHœŠˆl X‹ÑKÊ~p'> ÑF¶„G«á°aêæ§‘2Ž,ëÿb_| endstream endobj 161 0 obj << /Length 525 /Filter /FlateDecode >> stream xÚmT=“›0íý+è"fÎD`0æºd’)RÑåRÈb1º“%Dœû÷Ѳ‹ssãŠÇ~é½·‚Ïíæã·b—4Y³/öIÛ'u‘Ô¹Ìä®NÚ.ù)\šK1[[¤Û¢ÉÅÂà;Ä1:AGQãèy}€õe5êJ;°*ÝIñ:qNûx¢ïÌ“”…VÁxÇ“]0–Òª0 ·(kNî .Pµá¡ÚŸ/¤y%0TŠcZÄiòW”é¯ö{"“mžgMU‘Èç±éëe¦Ûª®… ”\o³Ù˜@#ê oLMz€3gonbÔÂ1†o¦`ÔÝ– Ö_¸Q1)EEýì4Ûƒh2‘PLïýÞþ½üžÁit°>¼ÝäE¢0Gˆ¾c—+Co?'|×gìhmXæ×rÅlHô([Å!+÷y²­™9ÿ8Ê“›¯íæ‘4P endstream endobj 164 0 obj << /Length 3051 /Filter /FlateDecode >> stream xÚµZKÛ8¾÷¯ð-2+¢ÞÌœ6@f7{[lì$Yf[ÚÈ’Ç’§'ÿ~ëEвÕ:;s2Åb±Xüê!x|x÷soT&ioŸ6E¼)"fIºyõ¼ŠÌËÿ„ø× ïG܆{²ºNÁløæqÛ ¶fÃÂÖ½"â´3YQTÉÆ•fy¨ãXôŸ‹þÏUmvÓµ§vÂûä UÝSEyXf¥åÍÖÛuJýŒ'°<¬M`»„º :×ý19:Zä X´³„ƒk±b€·Âo´çï>¾wòÂA‹¤$]1ÀJ²IÂ\É‘“幇Rð5P(É,I˜ Q¡¹[9±ÝW'ó~E?Z…Ѭ‡²H.ý$‡öø…Ó‚ò`!x#-pÌpMzÙáXÇù,|< _Õ€š#èpMê2 c­ï¤vkþÑß.çÞìÞp£¾=ÂãKGùˆÙ|Äd>"bá·ï_O™…y¡_s=3ÀþW$;ßÉŸþµWôâÿ%×”ÍÇ(GçÎ=]»Ž{V:$^S‚Ê2zÇ -(0œœMΆt¡ÊÀ9 ¦Á|gDƒK÷Ã2âZÒ#ÌOv2õ­ &ˆàûØ´#“ò¯»Db]„ºtpp6âçSpT¹.–Pì]ÕŠ{ï’»ë÷¼áOèf‹  åNv‰*8_ Q":ö0ñ—Ý=4f…Y’ÁûzÚ“ Ч~ c«n”…çal§–v7œTKü~g§Oû´2yˆ¼ÙfpËìð‘–á@=\p§L»À:åªr! Щ 1TX æb æœæü÷€»TǪíljwqá$8ïåÁ>QlügÍ,~Kg•ÖˆGÞ}¾eN.Nƒö"2×cЮ²2>=ñÄ7 6®Ü±á²yn§†GOtcÝÔžùÜ É" ‹ô&|ä£þY"¸°þÀ¼Ú'þõ6+ЋƒeõV%BØ1]†îFO˰»Pa¡œ±“SfCáЦëVT—$!½‹pBŒ öñÅ`N“Ì“f… l³ÒÓ”£mÌÅJ]õ–^Ìû±EF)7&y#DûB@ïLüÓÄ7-ÈØ(^^èhŸ[D:jÍZ†¥¤eõ®ôÈKâ}v ë…1˜‘‹Äa²‘ Œ9ÃÙ¡'S76 ELzŸ³©xa«˜é–ŽŠûè#Ÿ1_Þõ ~šB¼Y,?‹-ClrºÀí=äc‚âÐs‚Ö$µè¾[¸F¾ªs›OÏBBÒ]Ʋ°rì[x¼‡¼?Ô@¶Tr% ².¿îº>ŠïÜõç8N‰».†NÊç"t/ïùŽþ=Ÿ[ÌúÿТ øõ':L‹¥ú“¸´Ç^Ççý‡%µ &­˜¸a!š~>[Ó˜f áKàb{¨Øe¢iHñ‹¥¦Y‰`ËNÜ%åÑmÆÁ?Úcã{Ò¶H iŸª­’¿Š.”Ú¤hpQRyp6±™ÐC1ì.Dâ+xef÷Û*ÊnÏé¹år#ãÚ«d?«ÅÃë £8…šä;í´mdCd+8M|c$Ñæ]¤yAOÇíÞpBp ïŸ3ûs×nÊÛ¹r#ŒŒt ¿‘Ÿ›–°Ý[N‚9˜Juâ0œ@oZbBÜùf8 Ýp®£Ì·Ø•xPkßwc·Fma£:Ÿ Ý4ŸŽÖY©3Vä2Æü( Æ+ÊIë„ÑØØêÊîl¡w8¬]èÒ›׆.v\õEçÁ8¸Â×E H7¿àIJ1êyžžlÙŠ‰=™VVõÃÄ#¸z å`ÐôÃß ¶;°,#%¢"¹q ÑËžs|5z•ßÉöf”<\(àÂ!Ž{UÚeK÷‰”âÀïÐÓ«„Ödi%¾¤6n¿ÃWÁI5*f!¸ o,ÏÞ gYÈ’‹ôøE\ûƒ`Z…Et}ík‹£Ðp œ”‰âDâ9˜ë¹¾-ŠŒüeZÌ(8×1šDA×­e0íØ¿™¸y†í–Ê“ÂT§²y ö* ïø®¼ZÚ¾,Ý*³2•¥›¬øçk©"hkÚZž­FK6ïÍ%õÔjÍ Ö~^õJ”Wå7œ×ô”%¡«5}t•³T¥‹Êöñø»D­4åï8ã—ç°oñÛ4M.BŽS:ñïù—?-!ø™ªQ.l”aª“[íí³À²¨ƒ¼Žö ÎÝ£©ºöØŸèÓ#vM?š“ Ým=øáããÃoXЉ6 ?f«4“<ÛÔ§‡_¿D›Œ܆p¿›g¢:mTY„J£ v›?üëá~åg¡. .ÁÅa÷¥’ x¥‹Ï8@W]¤¨š–1~à KÊÃT¹’ÞÍ'i˜Ëí·.ª&€‹£¨9»LøÅ/h{c+C{0z÷u Ñ൩¤°yÌNÕ~^ÀV‰ÃãAã¿×q¢Šµe×öôºïÇ×Cw=Í>3Sœ;ࡉ‚E©ÇæYX@¼ƒŒ?ဠi¼¶þnéÄ@uH˜ó»4¨®˜½T•!÷­.ò)çè ËIÐ\Oœ“¦R•® X¢2>¦› ÷ãVŸׇ…ñUTSÅ-{ âçd¾IK×¶y‚óU9dÕ» µ’Úo¦EàüMJùJÕÛ2øÙí“6ô‚Z5ÒÇˤŒÄyI)¸iû¯B}sÀL{Ç‚y>6¤úÛöv#)¾w^½™¶—´¡€dw Iuð7໩‘à6÷Ä‚öPC. ÀÅ d ˆoæè HÆÆ¿J[°&Z¼+6õ£Åý`ÿ°Bú™ý¯€éJ_ï÷òÜ8³_|qa’ ¤^üŒÝY\#ýaÐò3²­7ýN‰ ò] Ì×øÄÅí=ùûÌßÄ– }ñOI*€RLšY´übuÅ endstream endobj 167 0 obj << /Length 2162 /Filter /FlateDecode >> stream xÚÍYI³Û6¾ûWèfªÊ¢¹‹o™Š]•TMæònã9@$¡B AùEóë§ p©7O/vU."ÖFw½úÇÓ»_Òt“ûEš&›§ã&‹6YøAœmž›{_„ü†Û]^'NŸ¶ÿyúõã—(Þ°-Jq‹ýdЖß.õ^tÛ]3Oé{ºìD/¨D¤j´_ƒ jÄáô“Âãv¼äUy©x/Ôßo£À»b;õÎâ„Ì“º—¥ÝÀÛ¶’nu¯èÛ*Ý »VuîÄRdsB96»(÷“"ÞìÂÐ/#íˆÞm>Šæ€ÝÜÓ=GpèÊž„ÀÙÐp4À+yjjÑô4.-j#A%¶À‹œäÞ“[ÞlÃÀ³zÃõÄ@>j ŸeUÑðI4°¶ðªº:Vé[VJ #Y0—Éh$ɉET´ØÆ÷g+JRq2çWô`ü j. bœ±”Ç%µê„]$G¤(:#õì¨þ)+êÐ)ÛÐô½3jAHÓq_%´vÔJHÍ+"ŽÚÊ 4Á;j£ìøÝ»S°c0ÃIRºW›9éÆÛNíù^V²¿Ò@͵ÓAœd iºè‹W îXP˜“ô`:g°Á)Á9†ŒUØý+bžycœ%“@z‚ÿ=xgU«JÔ•ÆÂ7Ó©9¢s¥•h-f…<¢÷£õ4a 4޳„4–þKAÁ¤<àòx¥^Y­ÃÚ ¾1š42òÍÈ*hu3 Ó¹„q˜¶¢Wû¶ˆp_”xZüqMizñD0è8Ô±m„ågŽŽ7€Uô9ËÓ™Z7¾›Pw  vg®0.;US¯R½¦–qX_’{¶-ñ¶‚"D-]H¸“1fhê“&Î’Eù@â¯5·Äš[â=Ÿey¶´,MÒ aT†C¥jŒ~dSbP´¤ì6Ç‹Âóžs"ó´ºs2yàš¸Òz—sdr—ÜZpUí†<€ÉƧ3KM»(ñ‹ ²…ŸÅ$?Åc~*«Ë«óSHއÅ$#…¶xO-²&c!E5ÎßÚØDÕKò34ØâNspd ZD„íìþâ‰p‹­Ð½*Ͻl%;YïèɶJ±ç%"÷;iDs™þl:èÅI`8£‘NhU]0‘Yt,ÎÔ£°™Oâ˜ÝFQ[¢}«R­ãY2È›ô}9„Ú^سþ‹E§¶ Æ‹GÐOFôÕ·5ð“Ü"‡þ—!À…kÜЃÌL”– I˜Oq#<—á–ŒŒÉä·ÖiIÍì]§jŒ©¦y³vpcŒ³¼µ¶ûax[ÉŒXßêeUOÍFE‹æÛÿs3S"$Á{ÕóŠšS;À>J‡ßpxZ&YìíAšqªÇ¶EVbÞ`™ˆþ¹ ñ’Û±ÇÝN6oò3܎Ήl?‚P:"1éµp¬PÆR:NÿÆ¡™÷‹õÕIùùÁFŠÁÕÝw(b4¯­¼|>µ މ…b>Q@™3(_9ä¶»`- ÁV—Qh} Ó8ÈgÜ9à±~þ‰P¥5ÿSRœ¯iö¦RÀ}ey±¦q%ýãº!™»S)ã§VM+©‚q¸g´Jšôã µ2Þ)ÏÀ'„ïƒÉ¦7»öÕ™“ÙÀÄòi Q÷R¯Æ bs}i•M9ÃX†¤sVÕa¸Oä‰÷‹¥vEqÔåýP¬™«”VŽüêÁNZ–ÙDX¸!ú,ˆ×»ðØï+uéWäK#?K˜[‹À¸ÚÊØVe0.0p>lïdU3‡¯¤kIë7²_IÊÆŽ­¿ÚBñÞ†h>" Ý_SDIŒwC½p æ Ÿæ¸eÖ.&¡J@I([ªBL?Ò·çÝIôk2„,ð£8›åR!ò~¸ipš &·Áˆ{¿…›Íþ€/ŠëíX"®øƒÚ±Ž…ˆÞj#Ž&|ïã´òÌt{ Æ@ýÐX¡@šÞÑøDGŸû‰¯90QâÖ3µfD:wÙ¥ÌÏXÑw ,h—MuÂ#(ÂÕÚŠžÄ‘s\%-¯taÇÜ*Jˆ~´´‡Ãör°s¼Ìüjò΀Q3‹l1Í"÷ÎÀbë<%ÝqcsSÁo †ˆ÷P 3.ª2¼äõÔ VšÓP£²4÷>ïÃi2 lë.ºî€ã Ž1Ô”, *CFku åÜd*YKÊ,Ñ\"²stfj «ÊV…˜­l8p%‹1¼{v75gëÄÃ}yͬo yvºþ´âÓ’¢ÐÏY2ñçÑÝÉØn ù¯ùoúÁh‰ƒû6C­°ðÜûò¸@ –:†ïÕPdO]£Éû&$s0aÐÊ×9ø.ì»åzØó}Xÿ0Ÿ{¿{o#–¥Û¨æ¾ˆ–Å›¬0¹ ÃñÝõepræ§Yñ8Ht|Rx;@öäî“ Ï˜ÿ^ͬpr½:×5>.­ ™>‹—Bº÷èyÁ1È­2¬OCÓE®>Ñ=·uÈý´nù¸*É`ãZ•#ñCöƒå€‚úˆ “’Jìï ÃýHðƒqÉgB}\þ¢`¯j"Q1{Œø;À¤/]§.Ía¨•—oq^53©_Äñï'ùË(¯Úm8©+ôô­Dó€À°úÔŸÉÌÈác¨LêÝwP³>ÀŸ¶%rsp×ÇWøË329/Ø.Žrô5Šâü$Ž–{eµík”e&Ð+ïÝ÷; Lʉϻo¼º¬–\PÃ¥Àã  ј eÀ?[ÍßMÜ^°µ<5Òü[Å&báToÊZ¾Ÿ<œVÉØgI-€šçÄk’âÜ»ÏOïþ"§ endstream endobj 170 0 obj << /Length 2723 /Filter /FlateDecode >> stream xÚÕÉŽä¶õ>_Ñ@£º4Im“ƒáÆÈ±IAç ’Ø]BTRYËôt¾>ïñ=Rkµ;‰/¹TQ\ÞÆ·óÓû?Äñ]êgq¬îïq—„Èäû»÷s¡‚ßðpŒƒÀë‹¶Ó4ĥDZ®yAÿ2ê¦Ð¸õãáüðƒw1£À2¾ îàˆ,¶E–€UCÓ§jè +~=dàµ} 窧çjðG™eÞ—Öª¦¨ÇR÷v§¶Ðò^—Ç¢½\Û¾ª¶!€»ÓÅɽ;†"ò¥È`úY¸×'vr: ågA›EÍ„MÂúhÿ+Y)å§Q²”U’î³óÄ~ßÓ¢5ÿ§öFÞ׃ˆ<½Ç…Å´e#žØy]u%|8Ñ>ÒÿwOzxómA¾äUSêŽ>þv½®Uýj‰½?D ?š1tŽÀ %΀¹•(;miÔ¦oƒÏ×.#_dn®=LÁ=lWâ=DàÕ¨Tøw¼P´õxiòA—ôÝè|¨_pœL ‹ çñ’74ìt^槪®†—C"• =ƒaèlÙ2¼v Á3390âkÞõºcr†s>XØ„ÄÚØ5"1 ÚªÔRµ-ý ¹ß#’!È41dšzý5/ô±Ôuu© £8ùs]—=Jì/N$]0¼vz^hß Mä}?^PŽÊ7M¼Kþ­º€T¼ñB;ž«r8ón+Pä&`>bâCçÅ6‰Ð4) éË#Î /_,Ò©@¡uÙÓ¸äuÝÄ*|à’¤°ÅΡã¨Üð¤éü…ðv„ÑëÆË¬¤ÊðàTû9¯Û;#e&bŒs`õ.«žôe¼ÌÆÎš•1aà ìŒËx>ÄG²§;?µ¨Œ2PtcÏ„(ƒˆ –æˆu€ãëpä½Ð71dUIؾ§Ó×®}Beèð'¿Ðîºú' ‰]ø«É•‰(óƒØùÌóåÒë¼ÍØ:§(ô•JíNÚf´ Ý'¨Aý©5—? Û’7T´ŠGÄÂÉÇÖëÓW™ƒcwΜK™z_Zg±å/Œ¤ ñFþá$1ûjG&ƒù`G|ó1 ù‡ãÐkò ¯÷Ìк~`Pæš ßæ$8#+(?V+Y!¦Ià„M†’±á±á¯‹¶1ö­R£(0·U˜|EQÂ4ðå\Œ…“÷\ˆ2ñãÈ)É=™´qd!³‡xZu4<ó¼m¦R°Ó™…J^¬´Í¦¹F‰0é¤Raà4J…á\+qi¥R T)Ü™ï BI_-5j_*ôµ«Oˆu¡OJ±GÀ•yVyp¯Ó%åÁsFy ‹g>1‰§ç)ª¥‘ÆÙ2L:’Jïo‡PAÜñ^"ïR=U^ŸÌUp–2ö«XL%àC<]—Í{>GA b¯¼‹É^qXûªÀßÓŽ¡¥ùëh'μsîL`žÕX4ÍÑÂzX˜qâØ ,)˜‡Æ²Ló_+#H˜¥t°ës45~)U{Ãç¤B¾Éç? ¹ í;.:0 Ö[ô-›Lo¡oÒú¯žX1¤;f½*AúU‘×ߎ)¸é¿šô¢®™G'^<‰Q Ïä¸LVg¾ “Uþoµâ(•p†+ÕPœ¨¨Dæ"§à¨¬ç€Ý.:ªY, $տКø N–4r9%ÿ|4·˜×#ï|ÅX›Ì g:ø¿¬ÍQS3ìéjIC‰×Éø¨4£ ž-Ày0¥ÙT¹ô´k–•mœKæÇIøÕQ)ˆ}îiá¼›ôXb`ÎÙѯSÞ\é½~¶¢…,T®ü@RžÚ–çM¦Žƒ¡å” Æ!-ÄÌäù" ìœóž$ôþbìÖ8Ðk“Õã.(áF®"'¬¯åDAìË$²ì\oÝíq ŒóïÏgM.-°ž'\Æ.AÜG³P6¥¹î¸½4{¦³¹Øyª¢U”«Á™<Ô©ÚwÛ,”]=fø*0ð BȲÅ“æZ„ëõVc#°SÑžž*gú0^!¢É.mÁ¹R±ÝP!q=H RAjýÄ£¢yÄUxJŸ”žnÐ4£ ê»8spUS˜ŒèfwÉéþ1!Zš–þ¡ð@‡‚ç^p_‹4 ™™H†³Ž„æã¬ëëòV¬/Œ“m›Ý&/—©ÌÂ÷vïoCþýríýñ=;Z†Û´ëVqN1Óâªvê}K¡+²W¢3QÔz—s¨‹œSû“nžtŠ[_¶6—å«y–¤"NäÕ†g&–àZ§ûªµÍ#…VJëõgZ€N˜y®,ÿ"q¬À˜>ÐË]˜²Å´€4<“K#†âãq¬ç¦ÑÙh70`løº˹ãâÚç­hÛr>è~ d.~'Ñ`7›Ö wŸLg_/cíÑ·Ñö•ךxºëÙËŠêåu“M#¨iœ;üé¶¥ÎÅþ¿X+#ܨèìéU MpUÙÿ©2ñæg/S¿üöù[]ÔýR—6ºÃ†¡eÃD21¥<–ñ{|Ä™Iw‹š—ÙkåhöqÀòõaÖ{"»\sއ½U 2ÊEîì‘5£Üå–)ÞZºzBÞ½µÔO\4ùTq‘ˆ±hª³©Aìókíð‹6üRrÁ¯š…s~ïé‘Ììì+~S%2g]VH‡¤Ÿ&+OJåO]‹é%wº¹|¹íÚÙ¼ÉÓÍ.›.‘ÿšÕ¬ÞœoÐjï÷Èv•Õ3Òê^¤¯Wpãå ÖNÕð÷M* &·Ç#ñŒAë•èŠçËó¶5ˆÐ÷ØySñ øFïÃYVØ>~Üob#ö¡òzŸkõ¬šÖ ]é¹Ùs)÷«Q’½²Ä¯|àn¡æ1•)W„*ÁµwŸÞýªTóÔ endstream endobj 173 0 obj << /Length 2344 /Filter /FlateDecode >> stream xÚÅYK“¤¸¾Ï¯¨›©B7õñ”diðE©¤ì»ÊN¶ïLËħÓ×£JëúÏ@-òÀðâ­Ž'X½Úq´Ä'¢®µïƒLúþmúcœ¿ód¨[k.G­°ME¬±: &[Þ[#±ê¯Ævx›Ã)MÃ䬧8ÏiÊ׸šcoÈœ—?‚*âØ]°ørÇ8˜ïWø÷ã­|ˆ<(M‹_ŸêŠç}Ç¿†Æ«iÛzIm†²‘ñÍ”"jjLçFrÛUõ­†?ÝÄ+O'ºR´¾Ìr&¾FZ(¹Fšk¥Û;Ç}¬Gñ‡§;ÆQp¿¢b‚Idä1Ãk=ÍÌÄË73®…ä`´[ïLÓ½2ÛÔ õØôm5nκs->D ÇÖ±2Ø­ñ#j]Ãþ©'^½õ#ª‰ä&oÂÐÀj¯„'Xóu4'ÙŒ,÷¿Ú·-;£;tžêà÷~”ÙXš-Ô xmœ³ó‘€uç¶p/ UœéøkÚ¡6\E£`¼¿|‰"UZ´ úYº)e/FöËÐ_y†ÚxÈ1rÌ#aêYîžìË›P4Ö“Èxá_Ïœ¨jæù÷?=²$Pš±Œ/Öô×¾í_Ñ;iHÚ¤Þ&€o?Â(¯“ÀÏ¢ñ#ò¡ø¯%0{c¤Ò™‡Tqž‡i:C•©f{?¢šÎB]ÄŽU”Ã_ ö÷¶â“:‹âéû?·ºœx uˆt´LWÉv ^G«b–eH°E¨ðFzíP¦39ÛŸŽ)øR¯ìÄKcÙô¨¨, ì 3pÃ@‚$ _ L 9-/® Š\žA‘ƒ¯>8~œ™®BçBæ®ïĶý}Üsi' íš“gÚÐaT¤Ü§¼—ùÌ0ŸE¾:n¿eFÒ+,{Çú „–ÈÙ3{8.Ò=ùcWa #ç¥@µS§}dBQjVå€|-@8ï/ìf«Ä{+Ÿ£¶ƒë©Ô˾ɒ}íDz¯Jbʾ«ì€ÄÇì«t,½^fkR%jáq&û|z¼e+ô²¿’sDbrC¢( ¤1ˆ¼‚uïfÞ¡.kÉþâtvvM+îûÝìÍ”Tã }ã‰dx×Ýòå¶¿ ;c÷âÄ;f;Q´h æ²½Wœž`Ía m GœóTŠ¥•Àp56“¨¦{Ecì€à\âè„S©NÎ ®!q]âà2ë×p‰NÈ:—3¸0—3…ÊØcºò$¬Ü…p€KSãŽÐOŒžû¹ „ƒ€`~çê'x:"’wÍ«<®Ìd.f”³~$rô9€{a“é0N7a%äÄ#' ÙMwT+‡gõîžL„?ž,]Nv±fÜ;XZ„y±s.Cõ Ž1Ôú‘2P´«…¤fß\FVË ìœ ’‹œ˜Û ù ¥ß8Οvôôž‰ø2¬‡ÌÓC¶èk‘Œrd5W™”}?Tȵ§£X%a­ÊJKEaæâçJ*“ÄÕ,*øûÓOL1­}í® Œ0eFå¬ ”ù²@•„ TH—’ÛQjï6ÉçH䌫 íâ€ËòÓ¹u²ˆ§ñ8 Ýq9#iÄ\/ ~uîÆºïbIç ãÇ£'_lƒ7ü eb¦[ÿU pÅ:¶rJ›D­M23&Î$Ê3‰šM¢|“(1‰Jé&I´M x2K‘‡Y¯íòÇÔâ½@m}g $iº œsï–ºÖL³UâYeÍH.M—4 »Ø*H­BÌýJzºÔ}d”÷"ce' ¿¼o“¥šôM"à@¶º×ßçýxøFìÅC–KBOYð§w4ñÃ!æÖÛ(G¦»Ì,0`”ÏÏË-Ða£›x^`ߨ”†=Ç8«žýM6:“ï\”{6óög®rtM‘_`~:ÄûýØð¿!ºØBt±BÝG«Ñ–î›A×!+0 ²f>²ò1Òf -ÐðC[ïáß”ån—’„zSUØÃvü² ÏT‹u{yö#š˜¸–DGÀ˜zFK\X@Nì¾"¥I±8-¾ ž†@ÂòÏ‚ùQº˜;i~YT='ÛW‡uw­]  €[ÙÂüÂE/Îɪ6B>nƵ÷гˆyÑ/qc ä‰dk¢„‘ð@nKÃð…+†°ßkpÚ7žoêd'îÀ‚àýs=´u×¾ª[4ø‡*Så=OU5 ¢½q{™É.#µó»A—F¡Úvpä³ZÕë[om'#׆oÞÜ3(á ž‹ð¶ô¾$Â…a1÷¾/Cí ̆’x’4Tè.4ϱüì'Ü¥•wAÒü†ÄÆN££ÎÃ)UϳP›x¢4våÝv;’˾½_;þ_λÚL„ªZ{È ÍýJùH£Ó˜ÊE_Ñ˹M‘üûÄìœHî¼alèáŽUN õl8Eâ ‚¨xõÝÌ0â³Øæ¡a¨ð/ΆîB`£=!òÔ°¼|¸ôO±¸­½ÚÉ-RŽÅÿÉÓ ‘”«0â3DK´a®øºÀÅOOÏŸþ ¾K©u endstream endobj 177 0 obj << /Length 3000 /Filter /FlateDecode >> stream xÚåË’Û¸ñ¾_1U9Xª²8|KtI¼±×N­“­õ¤R©8J„D¬ùФg'_Ÿ~5’³‡½å"F£~·^?|sÿ6‰ï¢4HÒ<¾{8Þmã»mXÉöû×*_o¢0 WûV­7ñv·êÇZ <û³>˜õ¿þÂT¢ È2¢Þmâ,(HTÞõë([=ò®ªçï{þô(”ß}øðæÇ?0¹8¹+‚"s¡Áv1µ‡6$Q²*Ïç¡?3@\—#AS$XŽºïGþ޽|kA{\GáJíj  òRNϼӣŽ à‚N¯ÛV A?œ®0š%Á¶p˜Áz“fáêŸë( Wý$'ÕýÔTÌBÙáŠGu9òèË:ÎVj0r•tÕWZýq|D¶ËA!7ðè)pïà½HÌÇÓ:æóãt·šŒª€±$IWÿX'ð .‡C­ùD4 zä?†ß dœ­ð ´¡C ŸÕ {Yï-á=¢42ew¿KÝ ¬VÏNd€w“‚nB<€,k% ïôKyé=ÂåC ô¥šz¯=>‰>ù[vö[6OÕgökWµ1iJ@€áiº<…Õ3N/'«Unj÷h?ˆ@º pÝñœ €Z••E"©¬íÍ(i•Ñ»þ±*O§ôŒÆT¥eÓ÷pU=N£ üó¢Åo¥áºÒfô6å©#‰áĈƒïþúw¨N ö¨¦}êKãïõAuFÍ7øî‡ï¿Ðs7ï½ùÿü<7»ó[Û ßüHÅúð1Cß^X–Q‡Þš[£;å–źÃÓKÇ9S¥Æ!(u°pйsƒZîïzñäûc`Ógi€ä^¨Aß1ñT›ZUÖœ].Cq—òeBl¯ÌÅ+Ð%y?ü2d’<"¸–¹WAV5¿–A¼ê‘=0Œ…?¤{L§¯¥JLüM[jq“ñýæx%ÏÉÒ}»Ÿæüñ§²S.ƒºnõœ'J¢ ·sÒC! ÚFAo—â}­Žè‡{|.pº’‚Á8WähÈ! ’ ¨Sª2 Äx÷ Ä'Œ[»p¦Xe#!ÐʆCnßÌTx•rA€Ø|@,*¯Ë°^¸¢”†GLÚr#W¾’ @RÕ¹èœ$[ÐpRl Ъ²£áÎÝ"æ7¾»‘W("´.‘)—Ÿe¬ øZ-$j(Õ<öÒ§öHB™‘qrÆÊŽûkÖ?ád2AØ!Mƒl•ìÅ2ÛA@d ’àZÊeŠ>zVìoŸÕ’ä‘2çš.j{n_Ü‘uF“‘¸¥¾ZzNܧ0Ú^Q`%V}ÿ$çŠPÇg>á̵…Ÿ:>:ßÁ’ììlèåY.˜Ûð™›hÄIúë¹{°nèзmé{c/Yz3OÇŽ  ¢&íoÉ!¤Ú:M/³žµMX½çG¯¬W¶i ?øÔYÎ{sëöÆó¹¿É5Þwâ©PÁÁÄm= ^fßSîí\©V¬>ë®â×h‡Bâ4Ç\¹Ô|ÂîÐÅ…#† ^¥d[@,ódFÕ fiOB‰k9ÍÕE¸¯s†TSÐPàWìò"v¥©¥1Õ"|p¹ŸbyBUPš9Étl¯°vÔ|.öº+­‘bR©Y[ Áâ,Ï4½,ú2¿èKç¢(é±¾vµÙ!aAu;MöE­á–ÃijÁLg½™5eöVgp2,†¤àPNª¶§ÆÞÒ¢q—øq6i~“,£`µ£‹’„J¬J ®Ãq R«u´2BîŠ~ q>vd–‡ú"eY˜“8ÊU«¨Áœ±m¤‰uu.ïL\žÁ%/|PA¼T!´ì¨¢^ßÈéH¸2ÓÙ BÆòxäá§8Îeÿó3å(¹ª z|‚õ²Ÿeo„‡Aq¯rÁÛîÃócsªq+ƒ\ÿ³Ú÷Õ¯qk)I¥íSÏjC8,UCfˆdä¸Z dŸæÛ âåÞÌ‹!>EöF‰ŸÇ’N£pÉýú«{Í"ØâÊ$¬“’\Q#òX·Ã_u·½Ù7l.ÂHv=Em‹^'3•¢ž§¾¯,Õ¾úz”KÝoÀNDì Éã—ȧQbÉ#ŒÉ#ÉcÖ•nýŽ8`ªÈ?"]þÇ)œÄiŒÛ€æ+)‡ì•]s¢B°u¸@í'¢# Q¶+Îo!Ô¿ÌMÕ­<ÇÔôç–ÛyÖX9!æRñ!\Šú|+U<€˜‚Ix`y>+ÊaLRówtü™e{²€1(î®H¯ \zU€Fp6gë0‘˜›Ï1öš£¿¿õKÆ4šr‡8OÁ±Æ.|îæŽTîþÚËS{…tq…l¾Bê®@-ÄÊ•@{wK¨z¨C‹”$Àâ¹7ÆÕ*V uC,ÒN2älÎù”+좫¼¨•eY9ô“5ÚeÒ[/³Ú¯Y¼Í쎔õ‰@V]`Èýõtn ns/[MW-ÿ?„¨ü75‘T< Ap=÷°å‘ãl“ç̺!È3m“€Q„ÃÌqxÑ…H¸6ÿ‡Žèíì—(•¹ib­ïÀÜ? ^‹Õóv¶÷Naü¯¢’;Ø¡tw`p˜†k7à·›a/°ŸN5¡Žìxä*š±»/V?MfÔÇ'J¡ÅQ&“æt¸ZV±î6üŒG›IŽ\ú±;t´¸|Áø“‡¶º»ù†ß³Þìó#æ é¥)ï­G Cöo¢nT|›®løÉãx@YM“ìv;æ"-pí›7ßüK“÷p endstream endobj 6 0 obj << /Type /ObjStm /N 100 /First 826 /Length 1269 /Filter /FlateDecode >> stream xÚÍYÁn7 ½ÏWðV”D‘ŒÚ·Aš[C.Š\âÂvôïû´°³³Ëìx4ã0`í¬D½G>Qn¤@LV©K"£˜q¤”˜)U#.”  ‰dâJ%a‘Fb$5¡Z( Õ`‚8¤H6CUаÁØ" q 0ŠïSM”ð<>c+Ñ4dÆ^&Xs¤Œy†¢Êx^)l•’9‘`ÇȰ(¦P¨`ëTñ󲕠£”Hø‹Ð æ7»ó æU0(º°£ ÍŒ‰aŒRÔ@*”R‰ƒ@‡C´Q© ŠÖ)ææ[ûù›‚ràc ÀØ·‚€P…$:T86ÃhÊ‚Í+æÅY±yÃ’M"XQs{¢$ÁÚ“BÂmü")„æi jžÉÒ|á•«Jó.B GcX‹)ü wJ…#±+!#Bˆ^á„­D`稹¥SɈ(‰`ÎÍ‹Ô8%*Ú‰ C¤Jm!ÄÆ" ¨2dĹù:À"«±ÚÀY ‘BTL†ß´´l)–ä©Z›N›èˆ±8 Y€»°Ø¼ X¬20D€X7# ¹I 20ø¥i !Ã> þ¦MP‚¨°¶èL54Ã×Ð VA [ 77Ãîã¿ïi÷þË_ûa÷ëÝ÷Çý÷ÇJ8R†Ý‡ýÃÝ?÷_÷8_‡¿ïÿüöå—»ô)àAAt´ÆÏ–ßcéaÖ»w÷0F77´»‰rû¦ qCLÚ½¿¿ûúÇþ‘>aÿßni÷qÿã‘>?¯¿ŒÃ92{+ȼϺœ†äÃ?±=Ã\ŠM6YÉm'0;]]pù­D7ºèÆ·r$bqÐò,hñ”—\H£­nw‹œ›øiŒï1ë̹˜‚+1uqqŽN}ŽžÀ¿æ‘JÕaÖµ0qñ/šã9жÚëÐ,gÚ\Ð(ÊÓ¸ÕU+Qw6ó¼³)ùªËQ»É3ü‚ú,^ …²Fº¤¸kM¤‹ÀD,FI…—XæÂsÝóRœùg‰k‰cäÏ1ú~ß:=ÙóçÿBÌêa±-ô0Ý« uÅÎ,†^WÃêô ²)ÎS7s¹Ú…t~¬Ur4—O´vq<Ê•3»³Ë-»0¿$·¬P«˜Ó•ÉZøÇ¢YóÞ©þÅÙ¶À<.¾¯Õ-+H©ºTT祢ºXJ'%ÌHVcæ?Ù.¥åVe-ZqN ïÃŧ¼j„¨;“rðœÀ›"= Àɵ°÷óR¥Ö´[éÀp0ϲlÁòâ-7U=­•™Ù3««3[Œ.ûþà¼[ŸšuÿGIÍìåÂåõ`ŸuFÚ:õùCëø‡µš;ì;|<³Å÷B¢ýB÷?žÙò›uFzóë™j Æê)ëÑ™JOÇ~ñï®ÃÅ)¬Oa1<ñðæu¶ø©1ºâëRÿqöOžÙùœ¤s­J_ Õ·>yfï³ÃóýYÈwB9o#˜©^èD¦êˆ¿órÙV;§Äú«<ñµP®ŽX·ú€ÅI2³HY¬©Uß"Ä‹GJ… Ø×/ç~ùv5ÏìW_g³“IÙF$óåÙ[÷û±ïZó̶õ$Wèá±o\óÌÎõ*°×È6¾Í3ÙüÂîé X½Jf6³yy7{n6ü}‚ endstream endobj 180 0 obj << /Length 3835 /Filter /FlateDecode >> stream xÚ­ÙŽã6ò}¾ÂoãbEo»q¦”»*a©Fîgè™ ôGwÿ6Õî;·~DJ™òÒ—Óa(NÒìpç´W:UÞk Øá¶mð<~½Óɺl*äÀÕzh¹¿`XŒŽ®áoÕl]3¸¡jÑîýŒ§l¶ç¿¡=”À“Žq«áÈpC@ºî/[Áz¬~s݃FKö³=¥¼'×CJQðsn+ڎʘ8Énv%Ê0Ö&Åú›;Ù1F‰?Üé §˜H’N×O$´F9U‡ãb, [YL–ï/})x~}bÅúIpDFzÉÇl¡vÝ¡Ê¼È "ëÆÂ¹Â8 ß6妮PœéÎä¡jä°¬.ˆìè·Âó@',Èr€V³ÎKƪ6Eâ€ïåïñèâ Q'œÍŠd}§o<Óqܶª« Dƒ ¿Bùž)d[Øá‚æ(ŸüeÙaH -|’:Nq¶N†¹úÔöƒo?"¾CrŸdz":ý€N¬ ý!Ñø}½yÍ+Kx®Ý¶œr~Ìh¼ˆÜ¥Ómvl؈od.çÜ`àcUׂçÞã~¹Ä\V“‹ÚbX´îs²ÌUÓlñ2>0úžÁ~xƒ=³ÇlÃp;ÊF…µó=Ú§m¾ }:Id·VD¨­k¶¼šEnt¥`L«mÁæm†ª+ÑÐß/—Š„Õ¿Y„y ½îó#û“K Øøßºš—h/pèoì]Òt•ƒwI-z—¥Í~y·IÁ®O§¾tŠ*þêÔ³·Àri*8YòY¯¾¾õË+¢¯ÔJg6JòU’gQ«íéÕ?Ç«ô°D¦ÈW„yZé(- Q¯Þ½úþÕWèØgÔé,‹t¥Q.þ¯Ç%£½  ÓÚ¨,‰L®çVV¶°uÃsÄÿoq“›Oì ÌZ”ªb•À¢qb_°5£=Æ™l”ÃLË›Ó*¬V‹ç3nîYjU¦#Ë%©‰ââ%¡h¿fÒQ3ÝPûžÞò~³ælòŽ:ËtíþE,²®“¾Ã˜› %÷qxÙs7©|9¾Tv]•¾§ãä°7·Í•ÙN€"–¬ÉGg3½äötåy¾hV©fcµÁ¸ÿç\È{ ªa &7‰ÏK8ožIÁLÏx=X/OÍÇÃé ÚG(3 }³Çý§üžÎ#ĕ͊È*ý¿g@RžI+óŒ'ÙüE[)}ÛÜ+Ì0y”¨“~cÊIʬBÅø™l%Bo-‡¥¤oÉ\ƒÁ‹è<Ÿ7ŸÆ-½ƨÑ`bÚbÔdKOõ±< }MÉ oØf@R{¶ÚD‰¹²³¦‡ ¸š¬}ÓR¶{uÆ98wg(ê©”GøÕDìÞp0¶AÉѪ­ÑpÂvÌä›S­^Æv¥Oâ§4ÍÕo0{Ç…³^‘yËt“‚ödÙïsQY”ÇÚ£²\èµø~qRȼ¬¸.KôKΤmrx_  ì«ºüriáü³õ¨"r:‘´2Y2 F×^Gþ¡:•tRˆbDQ¦GØ’¢¦„X K¡OŠ2ð$­V. öÂJm®"îIGâb'ÑFs¨õ¿(-!Fk/õŽÛ%[’é_«öÒ3@¼´R`n‘ßÉ'AE¨dËàNË1‹‰%  ¨1¢º²›ÑÕ¢ˆR=nˆ F·øIœLq‡2·“)˜¬%VüëFäÏè(¹6ó\!agè$>]ï¼ÜÈ↸AÍ/[Š…|H©/SQôÝ÷ÿáÆÎ îÁõ2^¼9*nÏU•ç’è¿WÊ%ô¡¯ ™†0&Ÿ"<©4‚»w9ŸÛ©ú:/ðstS½pÆŒm{¾ãÂV8ÿwlŠN¾p0‡nÞ¢£ùãÉós1Äw{?çRzqëÑÁÀÛ[/~µÆ~š>ôŒ/Èv-f{™]™ÜPúÏ{} f9Iy¦$Ó‹A͵ÿÆÀ7ÕKîÛ@ì¸oüuüaa‹‹™ÉU1sž…ÁïB&€é²?ÇôËN}v0Ï8ô,pèà‰çöA6—(n„¦1SòG`èÐ&•ÌͯV\&-$Ó+»ki!hQM¾"à–)ËJÆ‚7´JçaľÄÇ4þà°¤†?±wû Š`ÖoýTó½“Â4P³l}M†®Y°¾Ÿ`ìÆœ—\Åk1vì ñ @ü=É6ø,“ PÖ {ë±\"üy«Þ§,™ÝÖï%ßþ¡ðE¤¾¯ø.CIV¬0ìK=Ê`@”(¡`ƒ4J£Ã’1`#c¾UçK‡‚D©y=Èœ¸ë–qßãEš¯ßrKb%Õø'!+ôè~µq)d-§5 {'_$žíEØúÂ—Ç Tª~¾^ˆö`ƒkÞР[]¤¾ûmƒ¹™ñµ¬´kùë–ìAGq”cLëRb’¡QͦZ€ßÕÿúýÊÚ’áCë¡EE¥mŒÂÄ&ÁjàW6ç[è˜a—™T±Ô²t̺©kŒ2ù§”T4£—°éËpü©I×ïÊmÛàõ¥S©Ã`'\cKñŽªd!ÊÆ“%=\ÆGô`sWþñDU ²C¡rã—Å«® ˆ$rs}ßn+ÇrlF3‡=»]…2çð®c‰¾DëÁz쇇º-3¸Ë‡ª®ÜäOŒ ¯@ýd-÷øD‚~0fâ–\ŸátKuTPvN˜7Á'n𫽿ªP#Õ\#ô0–*•¤l½Ù…švÁ])³j´²çûV ۃxbÅGëo!£&Bù®ç{(Ÿ¹.;V1Z§SJ«S¡W%V¹Á3¦X¿m#¼˜¡±Õb¢–§WØPq·cž*ªÉÀ߇¹NQl+º¼ƒåš²¤;\h1%„ ËÇÊà¯=—ª(Ö£+ îí­0E6å唫܉þãøâÊn²¼ë—¡/ز«óGŒñüñ]Ón‰qÆFÚê›ýDGÃØI`§6J&îíæ³Q:ÙÏSµ?/Ì¢U”¨‘…‡%sM1Ù3EȰ’°nŽBÝ/å©ITdcy{ Ê7Œš­‹5ûvr`}¦Ì§¥ÉB:XŒ“s\FÜn‡Ð5%À‰{¤ÔgŠ8Ò×…òÑ{OW *F !nMõ;Å0)ôµF|…þMÕ„oN õ6\q‘\7›aŒ@É=öux£éƒ6ãõPÙØA|rí#– Œ”9YÇûhN÷¶| ½>){+“ÕÃzöHYb¼=ðaöœ†:!Š#IDqû¨Àú´Ÿ ×î86D9ƒ«=C¦—8¾“Aƒ¨ÛGœ®åö𼀦ˆ5õ>§cØx¾àC<“ °á‘‘*ßø ÅUÐhÚšøV‚È)ò5Tôc”€Io8-qŒÀÙ fLy„„M’IÀ‘›;"æö’,PiñËžgí¸7Ø »Ã~ÉÌ!w˜žàßLÈâ…LgÅúÜBäí÷ëß^ˆï¹ ×Õ¦JF±ºæèç.rß.õ%)?õþÕæIä™`ÔÜ3åq¨aák&"ùØÛn‰anqØÉÚX¹âÃm22)ñÙÞìÑòßgP5Î+Bðªå¯*rÈt ßOì_]eVã{Ùíˆ)"erˆ,ÀÆó’Û«¢\óLÆØ?s;2qá#W#‰…CY¼1ù®aÝ•s¹Cü«ýA=\/çJl#Šç¬ @}¬S–d)‰Ô:òP~èÉꇠèºÿÚJó“•4o¥½2ÒÐÑJê>½x6Ñ<•Ž @@7‘_¿s¡¹¢×~róhs‹Ù9÷O ê«Ê“Nf•'ŒMóòn5= ÛÊ#CH©Øa=B¿ä¹åÎçRº7|[=°gÖ’]‘'í€c Þâ‡âta›ùWYIÊ& Wyv‘Û_ºÀz!!^ˆ3b´Æˆ¬/ù8› E³B:DNñtOÓSš¹®'QjF´ÐÂÁÌáaàø!t´íy ñR–?ìKWW¿a‡§{2v€Âï?ÕÉL¤óbÁ/è὇åö…™¬(ƒº<üUvì#Û‹^%ÏDS<~¬ñ4ƒÿãï¨Y¸R5xRÜ®ŸQ¡gÌ‚_zš‚×`ŽçÓr¦Ý?A36¥WÏøÖÄñï˜ËZ~x(yvU‚‰o4_ß×ìe†Ù:“'›úÀÉNµJ‚m§Z…Mǧ¼8I#“ðÛ4ÐZ+OåžÌ¤†JH¸_­óȦj Oy íš_É 3ø?…›/ endstream endobj 184 0 obj << /Length 1280 /Filter /FlateDecode >> stream xÚVKÛ6¾ûWè¶kEIÔc ä`mmãK‘ä@K´ÍF"Q®±@|f8”-?¶íEÍ çAÎ|œ«ÅãKšu\i¬6A™%Kâ$+ƒU|{ÓÊ.ZfUŠÑ¯´Œª—OÑ’çe¨¼¤5Òêÿc¥ôŠ;9ȇˆ‹½PTÖ šxF{íï9•„¯“ò)¥O‰ø’$içMô¨&=ÁVŽÞãh®vZÙÝF_W¿I°d,®9Ÿ%; Ëã:Ï/Å«›i^…°)HŸ’Fæh ƒ´#äÁx¨šQé-i®e#´­¢`°¢÷–$ÄäX[#ºÉžöC4;%#8 ¿£”‡ÒoXG©;2Ô¤Z齓뙷Æô½Ð­@Jy.ï%ú º­2—¦%òˆIä+º3üIÃ#šz$ž5®­_ûˆ%á¡Õ¾ó›éŠ1¸É²Ø ¥íxCŽbpw [Þ!'ÿ¬Mă7ÐQx.¯S¸wÃZû )Z:ÂáÀI<¾äŬ®*ã"l§}Ñ9«’Ã&§¼L¶Ë Û;¶X¿HîÕ^N¹À¯6#tEHP¾Oä¥(‚ ¼9zYò¸®JXA¾ÞGË"Ià¦F"úWo î”õ¼h‘¶[Ú›ý/7´´Ú8\<¯ß IdY³¬ žÄyÁ‚¦_|þš-¡u⬮‚£Síƒ4.j ºàÓâ÷ÅD–‹È³œÅUJ–Ò"¥Ð-z7ÂŽ‚y™BlåwKEšB$uþ_™ã%ÁýÜf¾ëû;yÿ¶} "ϽÞa¥N[Þˆìª î6Ó',>ž;Ãu$á7Ųy™=ÞŠ§^p?ƒÀŽÙç`©¨œ*H¬¸SûðjÖ¾ üëà:¨@>áŠ÷fÈü7mpû1*²Q‡ì53€ˆ_ég«È„~]àÚ·˜Ú€уɬF€QxÚY9‡vFx<€l«Ø,ý:P‡u-i½„ä„S´03ü?Í '†‹ODÄ“ÕNøíj:NŒ›žàvf«´¾÷ºPAÑÕyØŸÏ­¾ÁEŸqÄsåy€Hyý/iš½œîR`Þ(:¿«O §ÚvÆò`&Î*1[1Š5ØO¸¡Ž&<P&Guÿ%[;ÛÂÉÀÛòãWRÅSß*­áXb¨‡ÓÈá¸8æi8%D½ÆgÂ* ëzÂÜsÃÞ¶e^Å9«&Íwþ–#œ¥1øÀ®Ÿ*F5…ôÿAê†øÉ´…]VŽG®œ_ö¿d…Ú|žÎwœ2.øEJó7d˜Íƒ•³pò$fi}ûÚg9ŽLZROvXÛœ‡?üøüYíÛ ´žá&;â]5²%…Ö4‡^âÓ‹:ʇØÔ@dïæ>Ü/¶’X0]à¤Hll¶“;×½¾òd`Þ—N¹a²€·wغ80¬¢¸„‰A½ö*ƒÜw¢Á1 ÿ¦1 5–Øú,ÿŒXNxIV´·~5t ¯ÙÉm|»µ7̓8Ù¹íÚ;•Ã…À‚æ†Hðçœs˜8}¤G> stream xÚÕËŽë¶u¿b–20b$’z¡E€$ÁM€Û½t‘d!Ë›ˆ,9–œÛé×÷<=?ò¡H*QÈòái÷ðKTlâ4I’èsÝmÒ$ºÔí&–Ej|Ýã×È ›ßž~þæÇ<HSQeaJboIňêÖëáw†Ä;gÈL‰Lep€c¾àã/Øñ ¤Uk;ë±çgí@6ÈkG{jÀ`þ¸˜®qopÿ¾;šnœ(¨D•Ë ˆ±ÌD¡ç_^ºþ4Xâ ™¡okÌè|JUBIéyù¥?¶ï†ß2M:Hí!ÿº‚«  Àq¨M ÌÝ¢9gYê!¿e†×0¦¥yáOý0¾…6K„*hW—–¥È* ªÖ¢ýä÷fhΖ8WxR-E’ˆ¤ô÷äc•éè2˜¯Pãø¬O§öÅ-ùÁö+¶ÚùzûÀÙ>ÌÛÇ#¼*ÚÖîÞ,6ätî7iýiwž¢Ù¨èµ?¿1ó³‰;õõ;Ó"T5}ÞÙ®ÁoØÄY™Eÿ:˜nE©L„T¹ÊáxÜ’¡Ûv·"@ÐXULÖw6±nd†JW“,*`a6Ê xÌv§ ‹£ŒìÈ{ ƒÝ¥ ð•¸éŒˆÑ¯$‰´H…¼–…Ey&Eôõ`›.Á™†÷Ìу%‰'„x[omkGKW@=ò§€Øc¶äkìln0#ï=ÐÁ‘o-ü­%(»A\¿ïÑHÎý¥sHŸÏl#/°ŸD( PØj8{öÖ½dn<Ô‹lkl·ç%QT“UÁ^ïÀúí˜àºˆUå>û«™qÔ€ƒg¢פ5° \ëè›,‰œâád‹JiüiºE'ÑÈÒE» Ôe–ÞJü8gvÜg,×<‰ºÞYDÝŽælv(œÔ±™éè¾6:Ø?›=©‹\àÖðeª„ãNâh}ÁúFÓŒK#柑6ðQˆFhŽb–BhÚ¼ —,YbŽÈŠPÙ“ ޹È+>¿Œ=Ô¡o¼uu¹X‰·©Ö¢J³÷RBywJW±;[šˆ,qÕHß ÓÚôÝX{^ú®}ñ«·3«p>_iQ(…Î/*Ð)áÿÈÂnúã‘ÌÖÇ~äèT;“,*"P»ª‰l5¼¶× {.Â~ø 9ú•¹Å☂k{ä<§ÀBÌqÕ7ÌÉ n*G~e1¬8ö²nijÈlN‚NÔ—®nskŠñ^ì»?ðÊû¢Ãÿ¼°¬ºõÈ8ò•Á8»ñ°PÌOxwå .˜õ™©* ðÂYt–DQ±UMõXåIêö†Á‰wØÞÛ)à«uÏeêã㦭ÄÏ’çÀ¸ rt¥Á&rÁBnÄ‘dSõÇpö\w®`]q˜ØŸ4ünY6¬Uv¢z»l 0ˆß,…RS™ö‰ªŽ¯›4ˆ®hYï)/ëÊUKèT a§)gÞîaAÚ¤¯Î)¦°59nöüܺoaÅDªàÃÖøK *êFJ9ˆü`–ZçXZŠ2ÍÃPZ‚Òì(Jû,­Ã2ö}I_~M²„ÌTì±œÊæòM»D ðPõûÎþ‡CŠæêö'_×åäÑt]=ކ¶ÃÀ ‡ÛëN,ÓݼZ!pù£|õ¡£OŸ?óNÛïÃ,4ûo”bÑëÚ–!—ö›¾½¹âQ¾âÑÐPU“™`Îç*I¹"HÍE”Á#EÜ j(åÕžP(^Qêƒ13Э¯\±ÇÃËñ™cF³–ËÁuŠ©Ø…»TºJò)1Ü:“‚:¡Ìî/õÜ)ÍÙnØÙ¡¹Pí‰* ZOECϽ­Á2s\áªîa¨+Ø£¥FxçÑåÄÏÑ :SxG•ÊPp¬iÔeº €»‡Oh¢žÎæÈŠs&Ü#êDF,óÎ8l˜EpÍjÈSȱÞNÇFwçÂ2oh|\‹ÏP è¹”y½¼‹=dXxQž¤RÍ;R.}[‹´„¦"Ð5Â:æ*ÌJø­vˆ9æ¶-UŠ :Ñõ\i JÕy€î7³MžC¼¿Ò{-ËÈ÷²Lùv–)æõŸÄ5³I‚nþ«*-È0;²ƒ>®P/¥Èòô}í*Èt ËvWC?pïí{Ä,»Ô,ðÃÌåÇþÒºžºÎJ;ÀËš )ªªüZm=sè¨ðn7S\|íTà ‚%YjqeÍW1f`‘SøB²Â„õÇÅž}©4ïc:X›@VÍï„j9}bE: Ö ûþ’l˽9îo ?‡ËéÔZªn+ê²WHƒŽ ÑúsÈ¡kQ³ÍRˆùɱm}s'EÔy Õ©EySUÔCß]WèGff¾Ûñuô”ÁBÚ“BÈòîŒ\ZÅ,V,òÏS¿4¸€G[¸zÕ(1´ÌñÉÉ+ogu²Ê…Áð¬®`È¿ó€’DX%¢Ô8U¢˜2öa­u,DšM–öÉ´§¿¸ÞÃe½n f³[·mœ¤!AYè©Î¡ü±7¤f<œó^†z?õI;/ÂÖ_àsVm[×6ùöè4¾5_?i… ö¤ hq¿Ö–K‘÷jŸWP€eæÕ›Íx&&y~>ߌ³MrË}áp7éÍö2rc´è)_¤:z&áÝ„ó Å[<Rx :Öƒ×5OÇÉ·4äP9 bwÀäÊMìO•o»TJUá`Ú»k›¥ #8°ÁqÙó =xÿ<ýpøçU¹šlãCjjI©F–ÓdVË’^©aƒç¢SÆWJ$’m|ÝÕÃ!Ì©ö­ÿŽ÷Oµ=ã¸S‹ÊÁ[¸;[ËÄ ˆ$Õ×ÅIHLšÄ2Yá¯JEVN:åI™¼™¥/™<Û> stream xÚÍËŽä¶ñ[º7W¢DJŠ“›ØF`ÄN°;@q‰Ý­¬½M)ãùûT±Šzôhf×Hì¥É"Kd½ì?ÞõæûDÞ¢ÐRßÝï -Ò¨¸ËâHDIvw_Ýýcw8´}eišzÿÏûÞ|Ç‹/”‰Žï"Âýa¤z‘‰,-‚Û8"E>ðBÉ!VB…ýwf8Ûëþ¤z7œM‡3µ3å0š¦y¢õ˵¯ÆÒÒ Ójk܇½Œv¶âošúÔµ¶¾X';W·:AÁ ûC¬vu7ð·(Úºîãhgº“ý9R‘ƒŸ)òq, ¥ˆÌ²¿^­»ô]Uw§ýAfùnèi¬»Ë8Ðt"ÀçG ’ÆJG‡<ªˆá>X“*( Î’Dæ—£$KVÎf%!4)‰x²T’ÿf¡$)Õ¤$:aVÒ —Àÿ¥¢Xÿ¿BIq”ß½ˆ\³ýõ2Ô}çè#òØ_ x±e}|šï÷€ÉÛær6vØ6p!è,§Ãq'dÀŸ¶ÿtáu$Ö´u×ïÓh‡¯¢Ý·?½ýšðÄz÷Ó[/'¿X;>r€ûÁ–ƒ÷Xy@꟫²Ç}›wõ®éûž/D5-زo/½«Q.LÇqÆxn£7škù9Šdc7Ä“ÄB©É\Åþ Á‰ß"¡3tiVŸ íÎëC R ­c=Xš^í>Þ5µñÜÁ`xÀo¥Ä/ ¢õei=Ÿ±Ðê–4ë­AržhùMûPŸÆ~t v•·ÙóCükâʬYIôÒð„tR7¡òý r˜J –íÓ•ZîÂCÝáêC=‰Àä_Ž`ÔŽÿÝÀt¼¿Ë¢Xi<¬®FËÞrÈrµ»ßÇèá;˜ÿ{gÖ1œA/ ò®AN\wåÕ‡B,Àñ{R‰:ëP’E´‡Bk Y2,PÔ“ó›—úb›> ËxG2GB˜uß:r[Ú!›Æguã2©f ¬çƩб vúªE+¡³)À>ÖÙ,#U‘y¶–Pã8†ôv€£­8¥S!³Ô“"J¦\â#Ås"ÒDd0c"ÞPÐ2SRãHéìÇÑ‚•¹N7$ËBD2ý, ¤B%“Ì•„<2Øúe!M‚èT~›/«Îl]"ET_‡§_ã.išÝrwÝäHÉóüËâîÝkÜÉ _ñJ&ýSß Wï£M3eÐ¿Ñ “ðÜp)X~N>½u ”x[Ïò9÷H÷ã´ãlçÆ ±ÛðÕÄke‘¤Î7$QÚïnÊÁ-Yd‰ˆ“øÖSÆ Û²ÎõdÆßòµ‰â¥2¥?f` ½ct2 œç0Í{††#ÕD Ù®JG©¤Èfj¶ŠÇUùùû îs(?'ÛqOíñjÊ­‹$Kž/'€¾~B.DžéuÄ4.h*’ ŸPžÌ…Mì0õéô½e•>ØfiSš …ÜsVâL‹l9 :|… ÒÃTÆ% ®Ð€{Ì‘dIî¦t\”eÛŽ¥yrØÐ”3W·æ”‹8×ÏÍIÊteøX‚L†{ÞÀap˜_Z…ˆ=y&€£#¿õu•W ;´kº® •8{Hnëp¡EÛ6ë EÛÚ`áT7Bƒ@GªcxJõKÝW3³ä©T}ÊåWg55õ4/†¹L‰<½ á+³X÷bhŸÝÍýòßvs³¾Ó´ Áã„½Š€U`<@8÷ME`g!‘8ƒ”ˆÒÓX­.04,¤K JwKÁg‹WF:XN·]b¨Žôìy/EO)Ò¤¸q;([eN^°p0Z@«Â1Êã3.hò“Îo…òhMÉ5]i¥j]î³2—äî0–¦)ÇÊYèM*Z2ÇÁwÞ0 õ^8¿Z@«Cì–yGl.A—ìÓþèû­Ÿqï‚mê{;°˜”¤FÅNDD ­5>x,_^Á̇BRÄä ˆ¼|½4P÷¦tÉT-€¯Ó`†Í#ŽÆ98Â'/Ñ8û55º©Çs ¶æ·§–fyÒèìqäÓk¾Ïõ-ïB‡k§|˜dKqúð’À™ìbM‚Q›Dƒk\`À¬ï|Ó ³¹(Á?!@Ÿ×Œ•%€OòÉÙ/ òo4J½¢ÑÍ€R‡ ø!„ýY²Y>Õ +Én¿Ôi‘A7q“d!ª£áž(Bn=×åBÍõÒÿ?Àÿúu¯?Ò70dË=flÜÈô8-±¤¡Y4l,¤Œ¥ùMÒfó8Ò1”¾¯YØì¿—¿ùÐQšî^´¬Lñ Jº»mí@ºøU@æéÚ»µ°#ØÐ° '„°z7ñ_®ßM’M¤4£¯•aŸ >½69Þ¸¹šdë¶ 2¨¦€£wþñÇïÞQ˜ïÇTŠdã@ñ®†Ð^|E;Ç’êиº¢åUøü-^³zÒ žUÄ…H®[Tÿ‹±ˆTæÈœŸÅáù7l 8Ýü@©—¦† #…ZF9Ú˜ßj(/kM/+ö†ì_©ØxÓg Nͯ“¨ÏŠÌYŸ™°¼xYòë<®"Ò7hÉâýXk8µ†Ïx^kÞÙ´qrãk5¿ Ìg°Ðݼu¥ç¥bö!a¡†Âú)<¤´üv€Px{X©œ7$¤º+°ùÍR"ÿ³ä¯þ­Ôpâÿв¦r매Öæd»¾­K~Ä;÷ÃiäÝÊ Æ*w±ŒÈ±Ö¥‰Jpï«ïî¿ú©îí endstream endobj 193 0 obj << /Length 1897 /Filter /FlateDecode >> stream xÚµXYÛ6~ϯØGXkEJÔÑ ØÝ4ÍÙ$¨7(Š4²L[Dt¸•íö×w†CÊ–­ A‹<‰‡œë›¡nž]½ùEæg1/¶ ¿HXàarñ°¹øà½ÝkÕ6ýbɓԻmÝ-xàµU¥š•U®ÕgI³ß¡ð¤Ú•º_||xuõ‚‡GÒƒ‹%~¥$üåýýÏ¿.–!‹½¡—=òÆ~7ô-Û‚½üsM!q&¼Ç è s³£ÚµÝb ‹J—5ÑtKßM»ÀMÍaÑ‹ªíeõD“U‘›éqãµ,}Ø/Q3Ô…1?‚t™Ž3o£z7Úˆ†éA4LÚ¤ÂuüÅ2f‰÷PªžÊÜt)i ·ÛE‚ +¶ÝÒ·Î?‘Þ8n7²ÂIàU²·"Ö*ïÝktš½ÉÐH”øyÁÁQ Ñö%’žªv'©U1§`'÷ìe£sŒ¸z(RïîC£ó”{Fî_y½¯$jw‰ÔÈÓÆ2-±¨ PE^á4<¶1®çPmhU?í‘MhÄçEI ,¤"ˆPæÕ–˜ŒátìZÈ5­€õ'úŤß!¼0ŽÇ« ¢Q>Ýi©=N‰S¢­ì¦R™+Âð4‘¶“Úî‚hÁ&?¦Ùúqš™$ÉN÷Z.÷ë™\ #?d ´0\ïÍí˜3 ^ÊF}2ɺÝeßö ¯¾\Sd íHkÆO“Ê0¥¬íò‡s™&-ÎŽƒ8¸œ³ñ+\ñÉ÷mem{£Æ!ÂïD] ˲èãèe群) 6Òœ˜•ž3ê2â~¸¶d@ãb´ê®/fÌj™'f=L0ïÙõZªæjÕ6M™×µì®nËV—*'ÎSž³`¶NM¥v¬¨»ˆ¦‚Ecª™”<6\(¾cAœL-7c ‘øQc·,ê›Ø=›$™ËµÀëóÚ’Šj¥¬®F}\v!dö˜4„Ñ#bDÞË@‰ -Q&ù ôM®s“@C1`í¡J”y7¯ßÎBóêý½…›a 0`6Õ¹¶wµžÅ8pQŒÃÚyŒYxﺶ@7Ä÷&ו^¹˜y«B‘€4'eLÌ&øŒc´'ì8cÄ¡øt‰×ƒ²•\Bõý”ï,ÍÚ ˆS´¯ù6ô%ÈÕ † º/ÛÊòÿˆà(ƒæ ø1ÿm^H (>NÀ-‘¸pR›™0âÜ¡p\p.C™C`ðéa¼›Œh£1¦p‚õ'¡WÐôP@lÁ¥ÃÎcHç#ürSŒ)R–q쳌OÕÕ‡Úâ*ÁˆZWÅ<ÊfC×tšX-7§0CÜÖoZ’ÝQ/5{ºë0Û¯+[qŽ (VÎnËû^íÊ)(7ÚŽ…Zxõ©èy ˆ|9ÔŒÏ< ¥çȳ±°4˜‰º¾Ì1ü5#"ò³t¬f?ÍXŒ Œ¹’;\æÌ…ù“#1ŽS /Àæ:!¤ž&ÒÎ 6=–Ø(‘ $ž«•Ø2~”æ /*x? SÇMØýTâ×$ïc"¯”u'¦‰usƒAñdû°EwêÚ±M· |ˆ¡çG9?©«˜í³Á‚nùilÃáíáD÷N@MÂÀO˜€.&ô1FŽj¶:;Ý9ÿg~ ÄW‡PÿCè¹,*“.Ônçú¤ñVÍ~Ð3·`óƒtS÷ùAÀ«¹…UÓµøÊ¶Ü“„œµ$ á·µÈD‚}ŽÜ]'ÝË%=X$/ ¹ß05†ÄŽÚ“îàn\&’iCÔîšÄ¢qrŒÈqìYË™•{ôDUP¶ÈÉåZix B}‚Ü®ïá&וƒ:`x±€Îàzõ°`Àu}IçÜbRSgüonoîæêï»ÕÝòæµÛ{‰Õ1òÞ½üýõÝ»K-EöTôÐÁ9wS½õýíê–F«ë{\ó{ŸvM² —TO_ìw!4<ã´yèz)çJñiØPæoO:bkX“ì3‰~š•*(ísØrÿðÌøRŽXÖÌ2”ýìë¡Ý¸R¸—Œ€ç†˜¹­i¡1¡W¯ öÀ:>Z‰G“e¨“˜¹ K2? ØWçÔÒf"Átó¨Í½T£å.;#–O¾^î$/@0cïn;W•S?8T™o£, |O@Îx¨mþÆè“]»ˆÜ[p2|[Å'áJXCÃé]æ=þ€94ìÊÂLnŸÜÈô¨°ûÁåµ$ þšh7C¡¨èJèU£@8äâö}‚;ж®éOÎDÐnì¹þ…Ô³¯èΡ·€<²”ÍÛ?ž@|sóÇQ81?Ü/À¨ËB›Axáã Ê‚iÁúi‹“…¨`2Æy·Všøl‡E‚ô‚óвÆÓ™ðÁ*'ÿWŽ|k^§¾E"¹GÔóÀ1!õk@Úvæþ0¢Ó‡†fæÉxF%PŒ(Fã+5rQ`!Ž¿vˆü/¯ ^º~ÚuJõIP/à úr™,6ü"ÂÅg??<ûä‚ë endstream endobj 197 0 obj << /Length 2416 /Filter /FlateDecode >> stream xÚÝY[oä¶~ß_á·hC‰º- ¬×Þ¦Avt] @’yÄñ«ËTÒÄñ¿ï9<$u1½ö6±QôI¼Qç~¾C]\¿ùö}šž…!“I]ïϲè, 9ã";».Ï~ MSÔÕm»ùåúûoß‹hN›r–ñüŒåv³²< j=Ô¿OªÝ©¦cg(èqì7ºŸ9jEKß}øà¾#™L£?³5ßÙF Kúاû¶;Õ€äÀÀ|kÉqœÎNŠ%Ë#aþ©;ŽU׿eÎ)C&¢ØRþÙsVƲØÉß4r<\±ö6dh„Fµ#M»½]®i0V¯ 4­Z¯Ä“±|¶A¾Z{ M€‡"µ7è§÷3¡ªöÖ‰ÐX¦ËêתtuCK '.Ff,Ã%‹x–ÉX.âIËp&äˤ÷q&³)ºS]‚OEq°ëÚ±@9qÒµÚÕ`TÐc¿Ô¡ãɯ¬·ó(øÛžöªqqÚ@³¦ë5ñ9LE:;âx`?ŒëЙ­‡ØnÞUóZå™`2ÏM,¤&¼ŒçœU2›Ïç&¹ªàÔÞÈ2É_.ÖVIsç*“âµròã’ÁÏ<á:O鸒IÐvz7Ýx€Ý–›Cáž&Zó@òÍöZÀSÊbÐôç¸$ƒ»Cµ;˜wU΂oôª(uÄõñ FUKq û¾k< *LÎB»ò•¢m§`[¹Ìš=VœB;åŽCÑ. ÅÜå玔̒”bQq`êO¶àqölçúÝ'M]2-zçΟªt\Â3NmuÐ! ku·+ê­)·0mºÒÆ~*9ŠÞ+“Í᪦°¡JlšÑG¡}ï)dC!Oâ¥%Ès¢àsÛáGîZšj„O—§pB™$’¡¶,Ø<…ã²k!zŸNÒ06¤{2ù­©!xÚÞžªÐKA<‘'¦üà2€›U¢™•˜Î|ö†p*2Ô5ÊùËÜßÔ%]ÃW!á z¶]{èš®în»“YBÎ?ª¶¤Á;z c1ªÁTœQ™S`ÁpW ŠF`;\}¼WöHÌsŸƒR6Q(F ƒ4ãÚ—íØW'6!z£ ŒPÏÀ¼mŠ`ß p›Úöwê04sÐJ qYbº«íÁ— 2&ޝïT}ü“똴-ž2YïÆ,«=Í{ÕµI²3«»ú"íœ0©«ÖUÝâÖ Ý®†èô0¢vƒ¢ª í#©šÞÉåÚµ2Á…±•dY$´¯hF,ÌâgçÙ½/¿²ì‰Ú0W)/«^íÆÉ/ Òhµ]ë£Ù=Œsóð—àñÎ="‚„Â<^(½p;…˜‰²%Üö•CcæÆª¹ œ¦8‚Ò|]4 Ù©¬½¼m?¨þV7•‰í.Ó@aÒÿ­FÓµ%ËÆ4¡º'_0p"æÏÆuˆ‘=ÕqærjeÐëbØ4·iµª¹ç+2g|/¤ï%§ñIZ.v#µ¿©M¹ä3"[ᇡ€Š»ÃlnŒ8Ôž:ÒÆ¦¬¹8ÁÞÀt´B«ªíòÁœ‡¸§¦¡ÿ"! óÿ™&P¼HÅÔEWF`zæ€Z§GèþÃÕ=ÂiÐ^s] b.äiŽy_¯Ï û»®>5ãqO+“cmhÕ§hf½î»¡¢dO/‘‰€®2+à²\TàtêÉϦ¼´¨' _®«þ:Sds—÷Èùê–‹§‹ôÁñ²0ŒYòôuÕïŒD¼þpž¬›lÍÑat“±X¶<ítGA¬Ós$„²¢q¾ò±™sDQ49kà[˜R¡uËÁÔÞš!ÕYXtže±˜CO 0”aPVñ6€öí©óâ TôÂr,öèŒÁè‚ÏY6k²Ì\>`!¥–çvuWœ³5;›‚{UcE™V'dʲåÅ^fð; P›U‰ß2Ÿ"5y™nüñÎvHÜ½É Cô,ÆÂ_¼‹´mçˆì1Ðkˆm4h4?¡x‘ó5VÇ¥ «‹ÜúÆ`;Ø\_‰êçGzh¼‰ƒwô V‰^Ö®™ÛKb¸ÆN¿‰o}JC×Ìu^üQ¿0‡zS[¤§Ëøöà?‚†^Æ4™®ÑPè»ó¨ÔP•~:ª]µ×WlܤTÑíx´¼å#YF  _ëŽÀœH–wÀ(8ú¨*Û lãŒÐÉJºt( v!Hx<7ÊÈ;Þ•‘Ðä 0ËY’g«võ4B]¸[7Ÿ,[wÝggÎb|hnôI×Ùbæ‘ð“\‡HÙ¾!Úµ9 ÜWÔêW˜ßœ‘d<Š_ÏœI˜/̉œ]~|ûxS)É,\{|ïUH“çùÿ‚þñE%ð\¾ö ªÝë}SŒ¾6 ÄJžIßLN·ªO¶ÀjW“o3ˆ3z®~èx>’‰þp•~õ2§ó·»:Röþ§?¥8s@á¡d3`gù2)šû?tK¼ß@]|û‰*õÛsZ¼úpñƒþUµEûg@xyyñ=~Èlþ³­~„4nf‹hæs7›W?\ý‹ÑørJî¾Z\­ÿû»$¾ÊÑkk.î­Õêrz¹`î›¶P¼¿yIÂRùz7%ÁÄý(¶W¶°ä®¡’õïu\™“˜º/\Ö1ϧcÐ6˾â‡Ù‹Ewï»S߃DµÓ‰"á .äþ)$ƒÕ“Àmc“÷øüÍþ•¦ÿºø¸ÀòþNv¥&G;§Pã%™á1IpïÍÕõ›ÿêãõ] endstream endobj 200 0 obj << /Length 2559 /Filter /FlateDecode >> stream xÚÍYYoÜÈ~ׯ b/ûâ€޳ÀÞd¥7¯(GÓ11ɉ¢Ÿ:š×ˆ²h7Ø—!û`wUWÕW_×|{ñÝ»(ÚH)RkÕæv¿‰Õ&–¡u¼¹Ým>nUuwråîòÓíß¿{§Õ|nŠ8L6!Ï .'Û¼©»¾=å=7í¥ ·Í/a¨Ê‚»~xÿþ—ІüHîÙó¤Š[6NeïŽÃ]ñåTÔ¹oe¥»¯«¢î§UáR‘F*BÙ/\ ¬ˆMÂ"Þ<Öͱsαc¨(m<*k¢Ùz62–ƒ®›cï@ÑOýôÐ)V–L"E$7„Ý´þµFN«Š¬îxb[d;Wßsp¿¹úGG¯ûpø©bÊ$"ŒÆ(èú[ KeÄè¾-_ÖŠvØ.«ù-¤¦Ã‘Î<°Zoo/%æ=u“–^§GJ'‚ï@+-dƒM(#ùc¢€ï(ùÀæe×ð[w,r·äˆ/Qºÿx”‡Þ÷# X8{?áÁõ‡üR!zņAàê=IÚâ—+"il^PÝÚ_ÅÔÅ W+–²ÂL2d+8Øt©žÑ´Ö™v|º}“c×çCSVk® ø®&\Co½+òŒ,Œß7{o/¶¬óŒÓtiÙüÔ¶l©$Ú–®r}F©ÚŽž|£õ >Z–&]ag²}sÍ££¡á“3Cw<#Ïêºñ›ÝüÌN}³+ú"ï‹ëüö?ê¦nR]½Ë½ËbðÈØ„‰‹ÔІ@‚¬ÄÄbf=â¨×c¯”V( Ø«"ÚW± ‰É?4´”Líë°Ȧ’ñ˜¼Ù²L̀ϧ'I@¦¹o84Ó‘.öÓZıš"ìn¶“7d›5c$nÍXaŸgáetmÖ¨‘6£çP9žÍR’PØp”ä‘«9Q²7D£a#ír=42JÔ´2š¼$ZºV_àYþÇq0žÞ÷ü䥈¥7÷¸?Cv%VP ôìÌ/þ`Ú> ÁÈí°ypX³u,¤MõCQÿ8Þ‰ñäÌøqç» /o[TY˜OæZäMU1ùFéj¯Ó©Ëî‡Ã0š•å°Á@‘2WÎB—õšQZZ!«&œ?Ч¼ó«ÄQÁ•áׇùå‰Z12³YU̼L q|ºQ  üƲ.VœÛoYR¹ÝÄÙ¥D¾Î}Îg¥Þ'ñ1_Lú*³3ÈièIn·¡ói¦© )#ðh½ ÚUI8®¢ãÏ•b¤W¼üÊÙ`<Ãú–!¿àÿ>Àz ùØŠÓø$ì ¬©÷{8Rº½æ iN×D“ò‡Ô« â\8 ï… <~ܯ. þ2…5PÑ+ÔúÌyÔ€å•HÎÓ|Õ´¨—=]Ä·†BÚF“M¯Ö„’†2e¸ ÉsNmãQÅ]Stõ›ž7aüeÀùŒI0HHÊ7*$³œ¡æñ´û„ÖayƒžŒd;v@È VÊåõȘd‘ëy°^q=#”z‘%Œ°ÚÎÓ$“¾iƒ›‹£®?üùoïøíÇ·”’pÓä¹5€”˜ŒL|†Íër¿²„ñä³ßBÈ·®-†ÂÔ˜ûº¤Éªg©’±'ùÊõ´5QòZ%âßO¯|.œÝ®XŸ¬E^!I1H}““(ÈÐúü*|V¬ISb}Kóþô ùÓÉÿϼ×ûžNØ¡d4Ê®(¹“º¸DI‘~B2O$P»8«œÀÔ1ýœ#@pÓuŽÃ#¯ [8ôŠXhwp ɇ!‚5氙В“™îøxÖ×"¬ýÖ*EœŒ3P¤96ÀTÜ{vw‚”«˜s:ª5¢cçÕk‡ á°Ÿ¹- 0,¦ˆ v‰Š-„¢åêVs,â6s?­R{çr¡JŒ Å…l± ñe–ΰ9Õœ ±Ìf$¸+ŠšÇºƒÛ“v´ZãË‘˜7;Ð{ÜÜG˃59™w:bRƒO-RÛ”Ys߬ŠÍ¬Íoå§¶`:Q£ÉaÆÎu@ü|èx¹žá³îÜlÓ»¢çS%½",‹u(”zÞ€0E?¤4ôó·‰ÿIÌËÜÃEŠÿáŠÏÇ\³b&8ÏX×åñ°ß.‹S(jDÅ-À›Ç£ï'—ªæÒE;½ýp}ÅóPœõó‡kþ³;©f¨ÏË!ØC øÈ³>dÞ/;FÛ²i>spÂÔ¬çÎ~üæØ elkî#‡ð“žÂÞ9´~‹‚ËËL´½FYG}Pâ”U±1`\‰˜C_NŽüšn¥¥¯ì€pAôÕûž§7yžu°î´ÀÌ"h[¶ôOA‡`ß™UwîþÔœ:߬wžB³2K¯\êa@î<ó/Ãí‚[hüÂÂ*x/BŽ×"âóÇ!ÀRì}ä/!ÆYHl,`Úh*|þ‹˜0Íà5Àýû8b*ĉJÀüÝ9Ûy9°f=ˆ§¼äÖsžóuuÞÕ‘Sµm6I××E‡'™jÊo8†‡V1Bcw†zìÈü0xtÇs˸1ܺ†R4M˜lߎ¥faŸÆ'sc7›Þšµû•«L$å‹h½Q<òº¡@½ Œ …JΪã M÷²*G׊ؘ¤¡*¿ŒO…0pT£7S­hiV{™gI¾~¬\æèŸ"ó¿_l8çrI«/ÜWê8ÀaEd“3ìêlm%Â4ý}i8ý5í´0ã%l(Êíªv J’$¿/í~žkþ¬Á`,†ÜÙFC™û¿Dò endstream endobj 203 0 obj << /Length 2619 /Filter /FlateDecode >> stream xÚµYIÜÆ¾ëWÌ-l@Ía±¸ÊI˱b‘mxÆÈAö¡†¬nâÒáâÑüû¼[52øTÛ«…oùÞ·÷¯nßiÿ&uÓÈnîO7±+Ïõt|sŸß|p~¼ eÛô‡£'Î7m3tßsÚª*›3OþÄ3¿zž_Ù™®º1í‡ßî¿¿}çëÕÞÍÑÝ8HøŠûÂö²±]ß–ámmŃ¢=¨ÐyœWzÛôãLXõ´ËtrVnñIÍyX6²>µUynjÛ .¿pËí*­è™©§ù™ÇãÉôÃÎçèÀM¢¾ŠÈþ!׎Zm^ÊCy) µ±3m/äCaî¹úûÁY3Üœºƒò³â­R«Çø¡ïÆËkþ¾óÞX?ümçë7M‰ ªOÉvÎ ”«c=ѵ'~_gû2mn`Æs“8º9*å¦aȤ¦Ÿ¤}/ù -·gséQÔ.ί^èÝY郭Öjp:hP¼NövçST¹*ЧG/|NìFÀÊésH]¸^ñCî‹Rž=µx£h½ÄŒÕ®2ý>> € 0é‡ÓS Óä{ꔸ*‰ž«“ïÅÍXÖHÁahá1Ÿž½t‹eÂpìÙn®ãWÛÎ6™¬š¦iCšEc’ ò—ÂDºŸY^*â6š2I6É.FuÅ4S‰èdüD 1neŸ/Ë– ž¾lò›³ªò#-ëÐŽ4âÐMžÉb£ƒ"µ˜¤ñW&¢Ï™Ó§½ÀœÔK©B7|.ï H™ñØ«âÁ„жÊyØØÌö½Ë? IËm¾¹Àp³â.‘» § ‹WzѤIØÝ7=ÀÐÈ‹Ëûzún Ó+³;c?AÇÀ¬ Œ'P«°õÜhÓ…$ù€NûWŒÂÒZ“ŒPÊ‹\/·Ÿ) 8ú‰Ïæmfªl¬Ìšåä6%¢Šdf¤XÖEaëňÊÉÂÕÕÌÛ~›&ä8 xïÞ¿ÿög8O§hš=÷ 7}YcäNÒsxGjñ¯Ð–„ULµÁÍ7‡cEÄÚRÌG!Ms–£ÚÓtéŽ ±Êg¦|9 :(bpPn8ƒŒ— àêzŒé*Ù¶Ú3CB p}`e¯/ÃH¢ëwAˆ—"§B·O=ð¥h'IL—81}Ùs³›§3 šáÀS#Û;Þ›|p±åÖpó…LI+ßõãðO¶|åªt¾c(ë91Ò‘ë_Y±Õ6“gã%’÷*ògÛ"DvMç„kUñ%f‚YL;*ºª—–×ÖÚêÂ,zÛLCÌH²‚ÉÂ0]ÕNVæƒoJWYÙJo$BÐ>‘{;|NÝ0˜ÙÌ>…_9'ã·<‹Ñ´­/ÃÓ¤léŠ[H#xq„TÌ ÿ*Íðìkn}….©ˆ‘Ôâ1é‚ï¸@Š ³¹´Öà Á&ÌlΙ0y³ô—¹6çVî1<ÎL‡A$Ìf#¿t¸ŠÐ«¬ \@pÄktç…‰CK<¢_r’ºQ’üBV;BN\Ï»2>k•5èãªë×’ !ìsƒT?¯DZmQDz«¬ D”Ø]D‰#†}%I”Øc”WÛsQâ&Yêxmmö¸_Ή2Ч=Éem-%­ÌQ&ÛX]Ü'ìˆ(RRé (ñ<}EºAkG.îh:kòž—}pª¶ƒ9Û¦­ËlÞ3œÇݘ!7ƒÙ×”— bíì—æÄJEˆ¤BN£ú/Å«k‰WÇùlsn‹6ãÎ HZ›|vTç)óŠšçȪ¡Í%‚Z¶ñ|V¨È$a@9¢Í·×ÍÏ’ùñ²›–lŽ ¥/1RØÚÓÕÑ0˜›Ì5R±dp¡0Òaÿ {âÈ%“cI ­%µ¥~ 1&…rÞä•aö¡4ýtá M^26«¬á¹KA9PÕ‚A°ší…e½D€ö©hˆbßÍÕ¾D»O†¢1Iµ0™%ÎH"]æh9Eˉ^óxÎÁÛ±Êyuxº )…ãx¼¡”-AíÏì*•×À·ê$)!SkyðåŸ &Yöåõx~Ê\4ûõð)«¤ÒÚV©ŠjÙÚž¦Ä%éu‰ûñò°_áÖKiôzÝbç;ÛpÕ­=xfŠõެ8·újõ¼‚YakYþðüL®…\_zðzÇßãŠËžûÝŠ3oØ ¡‡¤kÊù§…àÚ–Íí]Û4…©kÛÝ~H[”†)¯yªçÊd¦ƒxh‡‰¿=ŒVÁ"±j‡kÆéðò¢x˹f„±Ìeïhfƾ°p¬wx"{6<‰ÓÉÖ<§7µLeÕØSV¼”¿¼E…h™!ô¦ HFùåJíËÛÚ/Ì£Ëâ± (¦ÚŸx¢Ôyû¯w¡ùî—÷7ãXÀ(µtÀ¦Ú òVÁ ýLÇ“`ª÷é§šÛO]›¡"ÏùÁ •t¿Î G¤œ»¬ä’„”ªp×8@f>j{œÂŽ)è(_ˆ¬ïVöÞ÷£9˜𜳈µinr‡ƒ¢¢³oêÒ0ÄÀ{8ì¼Ìs#ÿ+ä1 íNn…«Ôá±Üû‰âûn¨çX‘ƒ|?ž0:`üKpF{èÍ:…Šƒc¦y¸‰~_óÒ²s éþ ¿\ fMÔrÁëœoñ-“'˜Lë6ÛGÀl?3¬FÜÍ5Ì0µðâù×rU¤Þܾþ÷õTŸ[;ÐõÖm½nlÊå·\èÔ×G3¸(ß3W˜»‘’/c\{õíý«ÿ²lp endstream endobj 206 0 obj << /Length 2463 /Filter /FlateDecode >> stream xÚ½]ܶñý~žE‹ze‘úFŠvm §¯OItZî-}lô‘»ë¯ï ‡”H-×öK , r8’ó=³oïï^ˆù® ËŒg»ûÓŽñ4ÌÓb—³(Œâ|wÜýOò¸ÿíþ‡×³yFŒï"Âú+a$™…‘‡yR„g‰$, fþF<¶/”†©Yÿ$¦qà< ¦³À äQt“œ^ xã¹oŽ4Gq$´‡=L5Ò(»ÇFÙý^= ‚ÕÍÝýëî-Z¼sZ‘…Y–*J)³:²ƒ+{$ÃY˜–媼‡´äÁýÕ'Î"ûe0gÀJäÆ ->*ËE@UO³b\Æ6;A‘N7œÓ€ 74ùصà@¶qÁÉÌçIcO„m®W5m?jXÕ<¡Œé‚£¶Â,äYâò~uhðV‰ò.`uf4Áóó<‚ç ‚m«B\kè/šØØ&‚Z1û£G8Xbž,Žâ×($aÄ<¢ËÅâ…qœ×ã+Õ…®ÕÁ«zâL‹â@<áefÏDRJ|é4 ;ëìÔa‹U¡¿ •Ü<„&ø°YÔf‹ÐJÐG*b¸\-®®×Un\íÃ-Ïx¡²^€Œu?èE:Ÿ¹ùYƒÏ}Û7ý㨫 rK‹jŸ÷E7ΨNi\úQâ£Ð ²’ô N|5<Љp6/ˆ£šreª.s±p\ÑgR Ô.¼¸Ð’‹Ã¥ÓÜÕxdTÎ1r ú@ȺÛy™–¨"i‚Ú©+Ǩ‡˜¦Šbš°¢ÐµÊ2^„,-ÖHˆwð8‘’†Ä`UOûYÆEnQå#xÚ`%‰N¯bWœ‡,ç*¨”Q¼DôÄ ·¸¸7ÇÿÌè28O|ÖƒàÕz8G†«h"ø­ê³TÊio­4ÐWùkñšæ®Ò UGiåbè%ôIMkÂç\xÈ’ü‹‚b!ORË1?Ç·JÇ``9A¯0 Ø@Ryù–<]ޝ•v!§= į¼°2@¸ÏAÓO{^¢@`¸,ZfNpá¹-€“eÀEÈ)ú|›(âšNG¨ôm*½á">I,â#;cÅ™•±âô¶Ìˆ#Êl¡™”ÜZdÇ-´„Å&LÃýEûâHÇFøvýDƒAÔ} õ(Žß6Êé;LT4ââÔqbܭΛuÌ` <²7‡¤µ²¬vP5sµæ©çCòMZ%“Zg»àƒL®è–+)äAvö}ìy lY˜¯VÙ°GA9ÏÃ8JµŠf Ù®ï|6’Äa#M÷~Ï0ÿ §8ÌA™N4ð%‡&] ®5ÀÑF˜;‰¬ £GÏ©ä¢põŽÑ*MlI²\ÂE¥O˜rQÁCÄü©Ãäv¢ñ|D|QÿL“³¡Ī›h ¿ÇžV'¥†1ßɬ¨÷ª\É‚¶Õ³luB®WÎÂwÿ×D=[½æëÅOR½t¢¯~‚.Úþ(šW:ĥѽ%‹%E¤/pú474^óŒ–g%ð‹èmuƒÂ’‡+‡1×WnCTŒËoWn¿¾4²–Só²dw Ñ.ôœ˜¸å¤×£ˆ~ïm6@¬¾øüâKÏçŸ{¾Ã@¯Ä A s¨¼¶„P÷ÎI¯Ñ7i¡(# Á|†$_Ú`c'¹a'åšÊª±W&SA~õÿ}àF&PèeÁÏ a"§GBÉ6w¼ +dņ¬Ý¡šS%Î\Ws¨«Yªª žešã°”?Ãw9W¾Tê݇µËÐOBvî6å+Ð e…ª`‘¶ÔgEP~ÓèANã"¬ï}þб22Áºýé‡k¤Ë¹>Ði%©v|ö^ÃÈáð,½vekæîŠ"gœ~ëÞ!„vS×6â(Û–k€â–kPe¥;ºÙ  6XY ¶ÃÄLo0§¡ƒÓËvÛ‚AŽ€"0õ¬G–R]=Î!,õX„ÅqÅX÷8±øäK0ÎÕHëôÊ8·|4-¨ìàmõ»J½fG-µ¦1Q\«mÂ>C°WÙ ¬:,óÍnéŠt1aÀ ɪ·âÉz·Íô+kÊ“µµÚÏîŸ>š›®ÍÐ{OéâA’†Ñj7C9+ üÍø•ø;çqX|ó¾yb"w’'ªøUÓD\¼Trx’£Æ°:ë°VÏ“ÊdqE·Õº´ÕJÕÁ×Þz’{zëÉÒÉNr“Ïmع±€/‰Q˜¯µ8_-ßÛ]ï¤Pd©ómçûŸƒk‚ÇŽŸinDí-2/+íË)W̬f¡b6àÔýL5T¦ÛÖììf˜²a³A5àÛŠª£ØÜ" ŠB%F¡‡êA6$jØÝ ‰q’m5 }:ýB´åó4ÞŒüÔ'Õç†2G yæðq±Áxû‡D¶PU{>O‡6\w°R;Ú±É/¹fJeÔ=[¦¬5Z-5–è?|Cxº}uõôo¨¸Íl—®¹è╺Òuš†ŠâE¹z[ý*³ì”3KM¬Ø¢™f2€é¦i\‰éÚ:2ª|7]µË­:9 y¾8èw}÷F™’µ\ÿÐB赚$1–¥© m#u¤ó$±¢ÀÕQ¶—Fc>èS(*bLx©ÀÖ¼9ÒúiPYÑ.Ž“+Uô¿¯kO·rÿþ:ø“^—¦‚_íc¨Þ úïQŸTÑçG½OMþ¶B5:§á+ª)Œok†e™…Ç2SÒHÿÁÉ8$’dÑeƹ~^Z˜µþºçç· endstream endobj 209 0 obj << /Length 2350 /Filter /FlateDecode >> stream xÚíZ_oä¶÷§ØG-pË”DIhSÀvîp.ηv’iä]ÚKD6’6>çÓw†Cj%­Ü;£±Q }Zr8’ó›G{vsòÕ»P.2–)©7w‹D.Á“ÅÍfñSðí®3uÕ.W2Iƒóºêš¥äA]¦º'âÛÕoHÊ‹½v\yan›ç-¾ùëWïd8X€/V2fI”’ü›-ÎÊâ ¨×4Åövy³"ÈKÝé¦%ÚÝ2„•êt~žFê§^wzC”v]7v0 6¦… ¯D˜[ÜäÞf*îòú{jü“sYtKèf ­]‚ˆ7HÈ‚ï léÖ ÙŸäÍ« ª-Ëâ˜ýŽ–~@μÙÚÜdÛnô¯{Ó8}vÛF»f»Å G<èßRp\¤.Ý8ÌÓÕÚs›Ç÷ENdžÕ!2‚t¸þÐxpí­æ`y”•\¥†¸0Ä]æhÚn*…¿ª£ž5ømµ#˜é@ ·çÖa35Œ õ(ÆQðãRDnU¸}×Vsp)çE[;Âê‚:äGá!5#'’=Ì#1¶Î8lÇ Õ•Õ¬iêªÔö40HjqVÞkÛªèØlÀû™ÈúËñý%]*+OCŒž¼½9ùõçð…XH.YÆ‹PF¶¼³.O~ú™/60ªba–.,k¹p£ ‹ë“¿œaýp´Éc–€M¢¨$s‹~Äql­ðf’2ıHˆàÆj3¼£ ©=­*‰ò„A"Z²¸À‡$0–¦4´®Ë)°bˆ½ƒ©6ò]}{}ñR_²,J¦ÄÇïßýnçËq6s·y©ݱÊ'@˜Äeð¿ÞΑÏtÄÖ›8·‡Cj¢Üj]c‡Á *[ö„¡úîŽF¹PÍn^]ÄTÏ?×|,>Ê9Ð}|m2oëj6oH&ÓxššêÎn¢¼h.³Ë¿<.¶ÿirø^y£û°ØM¢©vûnf‚ ÆÓ^LÙæöÙªg– á5ÙÛµ V.ýÔŠmN#‡E¾¬F¦)^^çû¦„ªô ‘|½Ö;[^ÇžË~;³£³cÚ&ž¸J^˜{Ѭå*Ó`}Nsvd¢ï?ÕºØoËuW¯Ñ„~ÙÖEé¼çå{Û·Lypz}³Àuú†Dœû¶Ë Çÿñüìb.ô_]_¬Î>ø¹ÀÉ(¸zÿ㇋«¥H%†‹½ / ØWÂVö-ëwç×çÔº>½¤Æ©¼d4k”zãcð‹·2äû®¦ÉÑ·úß¿ÅÉf¬#Rþšú7õZ}¢Ìo+ÇÙQå¸ÕzóDé˜g¯™®[,céŸLáøãFýI5V_o¼Â6O~Ñ«„‘A‰ˆ3n é8¸µsç8ó!ä_×xõ endstream endobj 212 0 obj << /Length 1218 /Filter /FlateDecode >> stream xÚ½VMÛ6½ûWè(1CR_dQô $@Ñ6] ‡$ZâÚD%J•¨:é¯ïCÉö®ÐÌ!9šÎ{3ä›ÇÝ뇌'’È’—ÉãSÂ(%…È’ŠQB³*yl’éápÙ~|¿{û¸ûkÇ ?–0V¢¬‚&ͺÛ}üL“6ß'”dR$— Ú%œH!Aj“ßw¿íÞ¼tÊ)ŠâÞi«íɽß׌Ýhgœ”…sAíGÔÈËŠTùª`7L@ä™\~BžÝFËþ/ïy‘êqÜX‘šFï¼*RwBžv}£[\3vrÊÖq#ž ìÌàGýl÷,m^mDÎ!9]cÿc#4 kl¯Ðäålê3:5.õßx1SŒ¥î­û¶Õ7™8¯ˆ`Yr`ŒHH}°vÜsš~EŸ÷eDÈrqºIN")¥ \°ïa‡D‰¦¨à14íÔF28%9°5Fö‡B”é;·?d…L§s?· ÊGc«Æ“ÂË—bé—"–A3 M>. ªã´Ú±¤D^ùµ"ËI–¯q{̼µyZàÉž2{O£õA¶~Ì®Tu­[8£©r¦Ûƒtk¬Þo#S”mÖzêÉE~@.NzŠÖFl·õ>£é—A×NÇï]*¦TíBÔô>ÜQOsë‚I‘~¢u€ÇéŒó/¯9º›Ie™b•ÿ™Ô춬›>zÒªAÉ-+½]}cQÏ6j˜NC¤ŒlÔÀ‰œHžƒ‹¼Xj¡ÌF,Ф¨\cù–ª)Ž~ é 2¨Ë7~þõ ÃØŸü*tÄ3„§oU¨so¡5'ÛiëpÊ,ªi‚õ¬†/îVã4½x£=žýO_ô! aÿwX–x€'¿ÿ€ËÐK&W{¶ùà$ C¡Œ:j¯¼“±Â¸ÌÒN}1w?whí6柅½ Y+‹ü“ ÿjóÕœES‡-±Ð+O¨0®9›pn,ޱüýÂ0»Mò$g+ùºI}¢”·z xW[;’g“o! ZˆYÜÆÊýin±]Î:šðlÚÆØ®„ZAXqõ §-Kp\Ý»5GÌh¼° ¬`Œª¬ŠQäZ×€©†ë&]×lû%å£ÀÂ4­ 1Ó°ežn ¨g[^¨Õ Ž¦5úK4vñ¨èCÛÅ\]mvº‡ÂjõÁ—$Æ¿Q’´QΞW$ÜÁm» jGhJçÐÅi?BÖóŠÇù.ú’ ?ødfá14Рu_¯¸ˆ´õºžcºÁ´é:ÝåtÈ6è©'\ݨ;8Цê(ç±g²Œ95gk}ú‰Âáz&7|; Î…>r»†5ÂÒ-òVàhµž¦øíÀŽšôõë 1A›ÐIIDñ¢—Bs°ShFpd¸7Þn#´Ìþ¿çß½4;Sûn”ó4ÆèaÁ…õ¥òB—N{LÃwkWƒíi®£"> stream xÚµWKÛ6¾ï¯ð-6°âò¡'RhÚI @cô’æ@KôZ¨$¢œíþû9¤,ÙÚì"@N¤†Ãá<¾ùÆ~³½¹{—¦+ÆH‘$|µÝ¯2¾Ê%Td«mµú²>´m©»oª6_·Þ½|¦šÄ+ŠºÑ&âY¾ýML×p¾éz@é±ßÀ‡þ‡RÞ(M÷ƒÆUâòþãÇ·ávïîõ­<{P"å©u òD¾ö‰=ø ëÓðT!j3kÉòÔ_d_à~òà…Ûdåt^§:¦øáŽ™¨,ac÷µÒúçAºóa¾Š^à%´’æ+»EÑá.¸m•ì|Bz%±v˜É§ ¤]¡®ãÀéØ2f+ >sAŠlÔê7 @ õêÃ{¡…ä¬_æ/)C°œd)›SÆ'$4Ÿ‚’<¶ *H–¤žÉK¹Ìï×{Õ_ÔÁóu‡wlçÅÐg>mmÝU!½\Ѷ²«ð£©;_•“‘÷*P†?•Mì"ëFîìW­§ê'ÓÁR’ÒVqß1‘\Š}´Ÿ–Úd¬ûU@Ðþžè ¨E L<Ç\4儚–ƒÀJ̃Ø=[²—1¡Šïµô ’Ê_œÔX$î}»6ê^–¸G’³û8$׊Ïɵ_×gñÙœÁÕöö}£KÙØîFY«+ß6QÎB=ìàLÛƒ3ãWß#õ…3aŸ”⬙› ð½4UåudiÏþß”þb£ò’#ÔÉE[ClvÀ; ×;p¦ωX ÐcG鉤F‡°¸f€)¤žî–4')»,l3cßK?†(yþÜ¡‘°Í’ Rä컌žä@¢ÈpÃ*q U²{»=cÇ~]`…¹ÖiT7îpÓjãõÆyè.uJeë¿7¤º©«Åbt]*5>-ÚE"AÒ¢øÉ¹ä„ž›Ê^¡SâNÚ ƒ¨{}º?©sÖv ÝïH'Ó`/\%Ôj`[±`Àu(EV·ÇÃ!(Ô&HþzËrgÙ<}3nŒâ4EW`Ì-”“ðêOl¤AéÉØV´b‡ ÁŠÞ[b,kÙàÁˆ$fGX£¤q¥¶]Ç c~ßâg‘9lª~œpªšsïÈÿ8ÚüøÔ§0”ÆŸžVÌlØAA)‰í°ç9ü‡£>e)³‡7o·7ÿá"‚ endstream endobj 219 0 obj << /Length 2462 /Filter /FlateDecode >> stream xÚµY[ã¶~ß_1o#1#’¢.ض@ºÙ --Ð I€rly¬D×’2ñ¿ï9<$%zé™yH_ƯçúËüýáÝ×ßåùç¬RJÜ=î qW𔥲¸{Øßý”»®îšióËÃ?¿þNŠõV%™’ê.¥ÛÍVe2êîÔÖv\ÿw®û]=Òçá¼i2tô¥éçD“?§©pǾÿáÿ\Ū\äøÚÖ>·Šå<£G?_úá46#îB‚µ€ò,_]•,UÒþÓpšš¡Ùle^â1KL„{r+3¦*Iç¿­Çݹ1wÐ!WG®ˆz8Æî)°–;‚ƒËàù|!ütž6×Θ×\ÂÅÍÔ"¼;9*ñãø;v–¾ßì·¢œ UÌ_]°¢ª“Ú³d_›+õÜN8|Ž´`D ¿Î·qmèí©¹×móÔ×{»ÇÊšvYóÂ;Ü+»álÁÐõ†'MÛÂ\7ìë…Çyò|lvG:ÔÕºwĵ%¯Ö°‘ÕB‚àø^1¡H8) g ù8Jo·mÝ?MGZÙnz°#)dòM;Õ(D•ôÚ‰¿½€¿¥¨a!Šä¹q§¸kƒÍªô(¹‹8àmUy·&8²×_ :ÎDëN÷ô”3Ò´26uaªÓ¿·.[ë9)*x('koF£¢4‚ªûqF9‹ÊKñ=úgF_ÅùåEÊòÌ{÷VÇøU,KùüÊŒ/ü" †_|ŠøÅÍT‰±¹®îí4"Tc—œÙ Kz¬7^_n¬ïg@¡FH ,U¡Œt;äDÏx‘ÆK .ÄM!œ•™Á§˜à©EJþ¶¡«§£ã¿ bçÂG£{5“õîÀ]Íöýò0úÚ8ën2†`N`°- V–U ßÀ®%A ¾Ò“”Þ Ä-3’¥\xœb2C+ +WzâÎÄ‚>H­­À&-ظea|ûbozŒGOóÙ,B\ûøo{s­ÏJ¶\B´â }}H4 ºÍÀ3Žj§œh$€‡/Mëÿ9ÝÐOÃìvY²ïiÝá…– U÷•&vï¾Æ—ûÆÉž‡AvôC¿z ‚‡pÔýodVe± ‡ä¢,“vØé––½k-ë…gˆñI‡É˜\Cxû 0GZ&3[=²zc_Ÿê~ïÉ@m㯉 xÖ£0L+ ˜É­CB0\À™5vGÂ}$FÒC&ç Ô¹Ž‰åUšä8†KÂûbŠNµ$j>á0ä ý¤›>H‚Ûæ‘’8Ê".¡?ƒMxU&ý"@"œ3w"Ι‘‰‰>‹¦}MÛº$~!×Ù‡wM³rŒ˜á<ȼA2eBÄ_"òåÓ®ÄÜf€‹‡DÅ˨÷Û{ øïõxDPûê ÙXïÄ!d_{®“ñ_$Ž®DºXr›qH¼5ã´ob©>@^Uø]¤Ð‚kGv`‚×¥†ä%+©Öt釡ë{Í¿¨l1æ IF‰‰1€àE˜{ŒÉµ`\ù,ýûº=½÷u˜Iœ?Y"]Æ{p"ìš~ïxrº²¼cþy;ÓOv¸rÛÖ=¨GYuÓÚ@l7Û‚ì¶hJÆ+„è ´bëÔí±3ˆ0¼ðøU“=D® „—-U1¯óo›s½›®Ð† “hEìâþMGáPôÊ%5¼ÅAù ÅK "°þsÛx§!BC^°,ðà9æ `|ÒÓWmZ2)¯Tû)&ÉDùf¹ô‘@oòÍšýLÉGÊr¦2ù&ÁÐ︲¡0±{U¿Î£KûÛàÃsPXEÐèp€cN€0F­›¶õ˜ú£©ÍÖ–ý1ÞȈtE ­äW%(ŒLŽ ¦…ßq¥‡0á!•Êú§¸³²ˆˆ/vÔ5B¸«TadD‹­…T¼RÊL®ÒW<ê› xãqÆšž¡&1|Ùî$Ù½¯F\5;àõaÖè둆²¶P¯Ï^+:BñMp­àUÄVPâ¥".gyêíú#Uh¹­Ðò°BËW™®Q–‚Ó&KÁAcMñÌ«„Š*/ß”zAØTY, ã3äøÐ*U‡ù¥‹a„/Dºªò¨ã .Ìé0dNM÷’c©…ø¶{«x‹ÂÔèõíL¬aëd»®äaϺ’_‚”Cf)–ãÉm7M,׺%‰,­J,˜tùÑu‰A>“¥Aó*nP¯/fhjn×î‰}3Ú¶Wc2€ \áÁݹf>WÁ ]2},Èö4i+«h¨…H½J­.;ýGC%Nçk……dÊ€Æf?_©~I»;=¹á8ééK(™Àô.°„1K ¡%(n?˜ý®1&·MCñ@–*( áË:‡ºUÔêå^–`R©°ªG…æ2ùÇÁ=cßCaÛ•($¸m¨#¯H…6<±ÖÃWªÀ£Fžx‘œ¢ÙBÁ”¸ŠÒaüHYµô+ Émã~žùìy<ÐÒûF-ð<‘aÐ?-#+FAÜUk¸xò†ÕËýü&,ô4fM!¡,-Ê•þÀ€ðž"Os †FL’³Œ¿=ük,6°T¼*¢œ••·VŒkmT¬ü5m¬êgh 1´O_`r¥õ 9idi]kV¬F`dU`åIaμ$X^J¦ò?W²·Ø…!g¢ª®À̳- eØÆ_=Úßž~ç“M•ï(orÔ×BžŽv骿¨°×‰ˆi¯1„Pœ<'`'Yö¥„VP–¯œ‚¡7}¶Ô?“íèIðÚ J @d)KM7miÔ*ø’Ž31ÏT¤!\W^ÅOËjðxðDØš¦\Qˆc=FóÙŒUK“<޵Х™—ÏÜ·õh_\RP°‡ÓñnuYBŽŸ½MgÅÿq¡ 1Y^5PoƒÅÊî]Íð쫈å¿«<5쪌eP5m`Ii»v¹À¥wÞý–{å endstream endobj 222 0 obj << /Length 1725 /Filter /FlateDecode >> stream xÚÍXKÜ6 ¾çWÌ­`ÇkI¶%·M ´EÒÝzhzðÎhm£¶<µ=Ýl}IQ~®§Y¤I“õ hêÓ'’â³ë'—/ß$~óxs}»a1÷Un$ ü@ÈÍõaó»·;nÿ¸þùò%SIé³(Þ$r•VÇRow"I¼“IË"3ú€]åµú¯“6{ÝÒìmSWÔêr· €µÅ¾èzù´Ùç4slêwAÀA3‹¼‹í.ä‰gên®Išöu£ÑV0kǘŸD™WÕ]ú°^ÆÞµæ‚„¡ÅiššûÚ´EÛµÔ«MyïZ·ôíúÕy]ÕeÕ''Úvi§]û]7º»Û²ÀÓÚÌVrïFïÖlÌ ”¡—š5tßtˈ A)úüøúõ‹_©ù¶L¤¦ÝXÁ`ϱnÏ01j»…Ù—§©…Ð0µÉëÝ:Ó=ÿr_æ=ߊÀ» 1²?Ïp¡ó‚{e½OËËÌ~KN¦¸¬´SÙ¹%hOˬn¶;ÐPty5î#;5(žvEm.Ö쵪yâöfi“éŽÚ¥6Y—S»§ˆH8ÂÕè[Ü”¥NOXl»–ïN7[)}&([Õ)ªº§NaæÀÆd¨=Ú›Etê¾Ä¨²œ> â`kº1Œq0viaú[°~yº< W§6šÓ?r)‡?Òl«³J›Á …÷ìžF„h g{A«èL`jŠt §µp¿SGˆ=ÃЗ+ Á[ªsg€û)Ña uûB|0„-51thk¬IÐA=p€¿u:+ÿ° ˆ¾ Âdsç·Ý.ÞŒéNïÂqáæ _ ™@«¿šAªË¾\¦{¥í)F®fÁ#á27s°˜ bU7”$ˆiÒj‰"wK¬a.ÁÙìÑwæ£v3Ó€oÁß‚dWa:±+j™¯’Çë}Jútz"ö~º]‹, ò7õy7 96‡Ñ>]#[Eøï—†w@ˆÕ{ͼš/‹$(ˆ%ë5õ>OÛ®Øc_xmáR®Ô¥(tWØLßhi4ä@‡Ó¾¸Áà_êï¶»0ˆ\I Õ¦•¦ûºª¨1S”}Æ€ãν-Ÿ5¤…' ý dmt[Ç_ÂŒ>;üq(fðƒ}².}݉ÍoPÌoÌ/oˆôºÐ+_e^ÚÜɹšxbØòþ‘µ'À³H±¹G-jœ­”ý‘À´=”œû=Mºš+LÒßO†Æññúp”j•q_X”= dܳë“ÀNWŸÄ"ÑjÙqú&Äš«Âß’ÚSë*möŽãw†ÒX|C$/\«ièPÜZíºÁ§ÐZrMcj^U^IkY©ô9 ǧ.á,%P±µxÞ¯YQ!ä~ÉÝ’üÇR·cÐd<€xƒgÌ¥ö K,pòÉ‹ë'ÿÞ„¡ endstream endobj 225 0 obj << /Length 2887 /Filter /FlateDecode >> stream xÚÅZ[·~ß_! (,Ãë\š @ÝÆp Nšòàäa$¬©ç²ÕŒ¼Þßsxȹ‰ÚU]{ó¢áòð\¿s¨W·7߼ޢ…,5F.n÷‹X.bÁWñâv·x·ï¶‡Õï·ÿüæµ’ã¹g1Oœf®Wk'ËcÞ‹|%ÌòcN=wÇ•äËæ7ÎeéºÞüøãoÜð~õìiREo=Ü'~딥‘ŒpçµÛz- ‹uBüòP7wmÑâ| j2†ÇX ¾„£àÃGG£5 g"þ4ïš»®hêöwš)Äh¦LIãg~X+¶;ó~ïñA&K)Í’(õ3ÿJÇ­(&£ØOü€ÌÊñç!°¨0Lp=,jgH5žÁ™=( Ûj RÙ)¾ü¸’f™·½´¨QgU¾ mȈû.°!2$ý¨WQ?Y̪P@C”LÆj±1K•º öXë}HRfâèjuÐO©Cú<êpqi³D™'•"½V)²²ìµÃu•EÛ~ØvQ‡D+5û,5yüTÑSÊ’<©,QÆ/¯R–uQï¬ûKb˜NðiÍ5ön2ý„?yZ5e‰¼ZX_’¾=ÒÔ]`°B*ê÷—Ä'c ;#îä"×?òv{,¬;ÎâÃϧb‹šö¡|ÂØ%Õojƾõ±-dRq&þ*1åKw·ÌŽïé?YÆgŽè]Öe›¬µzÿr$ÏÒ¥¬º+s³1x-ÅT:µª×þ3•FË*ûTTh\§ ;̲½Ëól e´ì¡Ó XÌ(ù\†#X”ö  =4§rG¤or¢xjHnw<¶=ˆYžZÐÝ€Þ 3ëҙ¿Á¥ÎüÍ„>`pbzf°Õ:Jãåí!§oÚèµ%’3’ŽJã Rk‚t´Ä¦¨3Æf¬^ê¬.Æÿ8aqj¾žH./ÅÚ¶‰M³Të[”VË7 rñÞ²x°éãÊpRi W´ÔòOrà+áÎÎæÕ; yˆ¬$FÝõ²íú¦Ý¹¡o>P—÷ jyªÏià~Kfg¥&´|M¥–•›¼èœ3²ö´=Ì]S[ÒùÁà ΗÌÃä±qZͱöž“ùŸJ¿j³sC…óh]󈧜ÀxTÿ2ì 7„{t9õ«Ùv›ƒ€›Ú¹œ-€0ÂÞAï‘Qrµ*~Q(jõLnæÿâÌ.VÅ'Œÿ3Ͷ.ÀÅ»©^ÿÁ õý=;í@Ó`µ›ïooþsƒþ‰/ÄBJÉL¢:Ṉ̃ØV7ï~ç‹ ‚¤Á'‹{;µZH–&Hw¹øåæç›W˜NÎ%!8D¸ðÔiÙ¶s:h”¥#ÈÏ8ÂO¯9çÚ„tð×¢C×ÇÓAÄù.IU"=v?‹oƒù“ ƒ )“ï;‡bQòY:óàR 1éUkÛÔ]VÔ&ìÉ3$–[@MÍÞ=z(çG°ƒì[#²Zšcý=Œólçzj@èÙU«ÄÅ ˜à½܊.oï²m¾vÒV ¨•žzœ]^UAp_Ð 9†F‰Y|MyfUZuS¯­©—Yý&a×¶©ª¼îhNYXX%è°8%lâÒ –Ë//®G“#Tº~‚u@è©ÍÝ‘3×R/4–T~I—¤¯NxÐq*á‚ÒWc x ¢yå”Î9&ȘӹœøÁl£HªðìlŒ€†´,?ðù¾uDõRÊ€zù~pÛ{ü;=(dúàÑ=¸}öôôÞLJ¯@˜ŽÐ!)ÁÀÆÍwÂÁíÚ ÑG,Ñ×W£ËK¶épIÄP¬`td˜œU2~=ä(ŒÑå´€¹vô¸Ÿ„–ì©!ÑIP‡ád<}n››,‰šl˜íC@ZÂÌ輜²W1¡zþ¬Ù‘79q3žÃy·+éÇ•7b#ð4ŠŸ’Â4ÐO¤`ƒ¤$Tvêh§ Ç!]5IrÇ5“C­hë~Ý3NãÖ³(Æ 1—¬x4a‹m8û>b°° vÌx99" rðÛW¤H£ ĬϺ?²_-]ui,H¤]¨GŒ¼Ë©#ß~ÚvônC¿°uû^ –İ™ÙÔÄöu‡¬s³F®G((»â®tëÏq!yÙ¸ŽÑúŒÑHÝÐãéqô]ä©d|žNø|}]¹?Š©4x©d¥•É À ` ) ™ŠEºgs ­'˜jo—ð4—jЧíÝÍËP``+ž¯¥D¿Y•­\ݘ¸qÌ|±~1pu—µ¢{-#‰Ã"T­ò¬n©‰pÙ"q|ñR…¦MÖÏn;e\È©bµÝ®Õ%¨è€ûhXªBbí¸¦VFÇ«KkG.;¢¹yPš`%âzíH#1Ï“‚ Rõ|µjlÉ4Á4¢£†. ¾ íž@¾–ž±+Šæì‚KFdËqÅÇbw²Õˆ(rì›M¾øÀÄ€«H?Çû|îÿÕP Ø $ZöFfÌVìulˆÁ)=£TXÉ“Y‰5\‹Ä׎;èS6º­ö×æÛ¬öX£ío×=dª†û™^ƒÝw›œj¸„²î¥ÿz é K…ƒN‘öwÃÿÆŠÇX endstream endobj 228 0 obj << /Length 325 /Filter /FlateDecode >> stream xÚµR»NÃ0Ýû‰Ü^¿bGB HT‚90âÐHM‚œ•¿Ç®Ó*  –2ÅãsÏ#·Åj½œäg<#EM˜ÈAKF4C@¡IQ‘Gš¦MWÙ„)zHž‹‡õ†‹Ù‰ÀUN0bï»a´e•¤BhÚ×ák¨³£KRÿ¾±‰@úÑto ³Ñ»xÐön:ywý"ßÙ!ÞÔ®oãtÆfÓ9ÈQœÆ_GˆÌfíõmÛ6Ò.p &;#o¼~£ºò§Çl¼«CÔ=n—¨‚Èä_*ÍeTY¾FRÆ W*"ë 2ä̵¡õ~܇¤Ãúg; W´Ü ¡o𞤤Ŷ"öÕÙr´Ó¦\PÇ”-Øÿõñ; C³3 ô óÒteøÕ~F³öÂvÒr´î©|‚è£DMRÏhx¤ÉT¸]Ý«/ERÉ\ endstream endobj 231 0 obj << /Length 1531 /Filter /FlateDecode >> stream xÚ­WKïÔ6¿ï§È­Y‰˜ø‘Ä¥D­DQÅÞ€ƒwãÿnD6Yòí·ïŒÇyA(HpÊÄÏÃ󛇟v_¤iÀ9Ë“D‡‡ AÆcË,8ÁÛðr½V͹ٿ?üýø…KÖD²D&ALŒÑ>™Ïå'[iü÷å«Wˆºµ{‡M1œ,-¦7DµöãP¶¶ ¿¾¡ïù‡²*¾’HÄÊ´œå©HѲț‰„eJ“oîusëÊùÁèÕÞÊK•.D©Œ¥1|ÛÜú²©»÷ÄÉù’“3)ÔÈùû†¬ æ#¨|Ç¢²¢¤b:8ÿØòKÎ%ƒÈñú`=·Ý©-‰ßõRÈ…¸lO&ÛOÍõ6ô¶ÛGRdaeûÞ¶HëðbËó¥§uSD”ua+Ú¿™vÏãÐ\-ñçû‹ñ'N?d;ZZ:ëe`À€Ö£Ãi ¬ù›r,.øÎ0ôEÅ!s¾FÞ‡È!4%O—­H(h*¢h…‡¶ëlÝ—¦ªî´aèÞ_Á·¨*këOÔàÍÃ^‚c'¿äþš–$]Ñçát¡­æÁk¼x^9RÜœáIXÝËzÏÃó¬o>Ü«ò\ÓóÏQ»ÿ8ü´I´-å"yú.NâŽN³¦=Ã/gû(Ieø ÝKxXXra¨úGˆâ\2=#ýÛXQp®G¾ùWÔ‘šfè‰0ôéKb=Ü~ ïͶѭéÊnáê'¨MPóBÑ»ÂÞ,Ü_íÅgèî€hmD@à©`\äëûù8Ø®whË“Æ@T/M÷EJÁý‚Àš¶Ö¾Á‚¡ÏÒ%øu.åéìù;gs%5Gs,+؃´™›ŽüU¯ßoåÉTô3Â{6Ë35=°l@`òJ{j üv½9¡É–»ÂßwG¬3¤‘Ãaˆ…C1„1èFú’eód’_Í|îÔ@ ÕýZ»?Ç'èi¬}aq P96]xƒM`ôiLnüvñ(?•ÅØPÌéÔ´EYŸ×ýÅ™€„½–]çÌ¥>µ —[B£W'¦»ÛÜ5Õíb޶g™¯‹ökj)ÎÑœÀ¿ûó°û¸Ã’<à"c*ÕJrW¨N×ÝÛ÷qPÀ& „É\Ÿë5,ר>«àÍîßÝ3œrÖµNÆL%™•Æ‚4·¶Bˆ~­7ÑŒkñKô¦œñŒ¯õâMnX3-¦à°ç88aâG jÂy%óð)-ùpÔ!h¼i›fäX°Šš†v·“Ù|²bIP% Ø·&УÓZZ={µµ_ßÊYÊñѼ9m¡J¥|ŸêÞœz*Rñ…LW– “‹Ÿ‹\³ Á¢2ñ=ÄÍT.‰^ó‚o©×—töxÞîÏ ×[È‘éb‚ú)}ÖÈÁ•rpaBþ|£Ì§ÙÈQ\B¨¼ˆ¹×ÀÏ粿…¾@} íÑ 9¾þ}±?ã”Õ6ÃXæ"}÷•¨µÓdÄ£cü&ô6–)†øK’ @ÍŸÅê§Â¬–ÂÄý÷mZ–Ý04)ùf€…XŒèÒ–ºáÚåZ/l8Ñ«5±º¦|#9Ó¿'”¯ó£`­q„6*µ}©½@ædƒÔã[AêYд–/vljG\°÷5¡L.QüeòK”m!ÊIDE[&O0SœJÕR D;g\ÙrLTXÖFøýúàT³D:Ùÿ4½?Kþ"Ei„ìã½àêÔ€žßµKïÖÔÁ‡Á7kÿHÿŸêbüHSû©¬/¶µã8áÒóbûá-óÜçÏ8ÀDu³•;41$ŠdÚO%fyž9I±wœÞ¤¹ÃA©sçySÿÖoÏMî³éü3w³ôÌ/‚qÖ&3F ­J¤z2+MÇ‹ø‹íˆv endstream endobj 235 0 obj << /Length 3192 /Filter /FlateDecode >> stream xÚ­Z_ä¶ ßO13ÀÎúcÙîCÑKÓ -iÈC’Ç»cÄcOÆö]·Ÿ¾¤HÙ²W{— }Ù‘%Š¢(ò'’Ú¯ÞcíNJQ¤©Ú=>í2µËd"íÏ»Ÿö—ëõö|=~yüçûo´ IS-Rî"<Ž*Ë÷ç²¾öµŸ*Ù÷wúêòŽßÕA&ûKÓ=SwI?77ÖuÃs›j˜¤/žÚÏeÓ ãç'žË±<•C=K\ˆÂ*‹Yâ£JEfr’û‡—®¿ Í€ô°—ÕØj󯬀“Ís¿÷ŸúÛØôÝðË‹"éQ‘[Öê×õPÝ7‰¦(LÙHñx‰mFI¡¤ò¬$]1K ‘,t·{ÿŒš¼ãŸòz8šÄîaóîw„…\âI2è,Gêý„s˜b¸Ñt#”J÷]Ù¶/ÔùtÐtð× eÒ4Ù‹ƒ„Ñgê%®'¢Ìýx†DüF4ww&’z8º£:æ‰PÊìŽÎ"-mo¨»±!9t^쇦Áæt‘ìÑ>°ïéÞw#uõOÔå$ÄÐ’› []¨½QÛ;T ­EÓn_Ÿ‡.„Nf²wNV* ví9±#N…Uray42s ‹H™ £ÒyUÆLÐX‘&38-¸ÖãA¢¯‘®¦¸‹• û£cI¿h‰(dˆ®­Úÿœ$êŽ~®…}Ð/z~ÙUxR&Ý_Q“§9q/P8£Ûõ™F¦”s‹ø²,”é¼Ùk9Œñ“KÁ“Œ'‹›*ŠïL«9Ètÿ±9{q>5ã…bÑÛº¤]¤û¾«©ÏÙ%ÒD„EŒ âI¨à¡¼$åX³ÀÕ )¬™qëç$M¦Áa1Σ@crð³ÙGXë|ж]'º|ö’8ƒJÞ#P;²-[ˆ4›àïß~ûÅdJ(ó?m¬2º°}µÜkËVÐ µÿ€khP9ã‘€ÕéÆâýq¨"¸‘Ü×b¹øuâ^w{Á¯ƒ"lx—q3ž‚©]Ëí,ÑûO—ñÉ1-‘âeÍÌï9ÒëN‰"Ç´±ÝýððýÃWXÇZÇú)ñP +kE*ç2îä^¯+a‹ÿÏÚ9äã àÕÚ5ZïlB€w·6ZK‘»D¤IÛ’µåÌqBΖ–98®;gìæ*°]îé1Tš ÜŸm¾.ýÔrûT‡ÓcŒÏàþ.£„>çXð{­k.Ó½¸Lbºû9õ™!)‚òвÌMàÛ]ðKH&y=ÿ’Eš 6­¬†gŸÅ”Y–DU^ð°Hyª7ë =‡€¾¿ä!ËÔF!¡›Ó<¯)`à8ƒ8¨Öí;ßÌ€N$¿X‡22¬`bp1W¿ÿRQÀ¥?Ô»@g˜ÈXKfV˜Lý¡JV.’${S(WÀ¥q.¢óD³)Š||‰8RöÉúÃ=ªF¬”ÙßQ)+hL\乎½xHT(Ú×F:ö~ H–Å¢!©÷Ï^H }Ðv[êÛæÎ’ò-Z;~zGÀ®P<s)9ô»E†‰ õsÔ+51S{¬*´,æ„ÔK+j¡c-ÕëúÆÂd1Ÿü_6õmÚžeaÉPIæß¶.ô§’ò™D˜sm‚R’vl…Ép2ÀV›­ §¥¬GY*M`B<2Rï½¾AHQ»(™ÆkÐ A‡õ`7@–ò1[ ñ×I ¨Uý ¬x³‹ú1á0ÎRöÓá±#oÒ}(2%¯åpu—òp$/57†ÃѻƺV'…¶sÍöýû˜‹T›kÌZQ$ùÚ’¿™ Ô:Ê¢PÏX –qâicos]e„Yœ·P‹t1$H’kâé ÿØFeÒ:<äQÑuú÷(O¡“ Å’®â¥«óÞ‚Ú´|V®d)ƒ«Î<Ò*Žà¯s3å gÐø’›Á­/tªg7óÕ\ÇMÆ¢¢|ål&™Óšyá!>ä>Šž@ ¥±aÔØõµ‚Ï_\v4v3­òo©'^¸†¾jÊqûéªqºój Ï;5]ëñf¿™3n$½´OÓ‹;ÓyIÿ†æˆÚ×½'þÿЉù­"Ã’>!“ºQèQI²l›ÿ &ýœÍÎøvµÅòdTË–€WÇ÷ºåBI¯bXµþmjî”"`í{lª©í§F§îVºJÓ¯œdίHjmCçRs„ëì1^ ^Ý]Ïåe®×ˆîkõë 뇴3ºôl[JåÂ`À‰ÿTð%ÙÌ×Åþ Ÿ1Ó¡ endstream endobj 238 0 obj << /Length 1077 /Filter /FlateDecode >> stream xÚÍWMÛ6½ï¯ÐÑj.?DJl‹ $H l¾µ=Ƚ"ÑŠ%wóó;Ô^[¢“-Ðn{É’3ogF?nïîß žh¢WÉvŸd<É%TdɶJ~[ýÒÍÁë?¶?'š’÷“Itå­¿ÄFQ¢Ól†Í¦+†ö,J3B¥ýz²ÞÜ¿cíôLãÁ „wÆ’Æ Ï(a”ƒ°Æe0åÉù~8~ æ0vi#9DÞ›ó=j¤ê’$KuPbG³ ðCŒ’È+‡EÆ&‡EÆÜôiÍœ‘>:ƒÑÍo@ª%ÀZSŽ}Díñ€›'´ÜB@Ë-ÎÑÂu1¢¸pï:Y{>õ`Qã§ÞĪ:š!æ2ŒÑRþ›°]· T1ï3õªÂtàÊò@ɉÌùMêù'é·û6ƒoÐþN)÷37lÍ·€Sš®îÍXÞ×]×?v½}ÌV%×ùœ›ek‰7ˆq‡žXœìåz¢û9mL™ÛUK,pŸmÊÒô#Á ² UïÃi! ÆT<ÀJ.¨|2AX–ÿ!‹•¿?§œ¤D‡føõMñœ§D¤ù‹[…}ì’©ƒ÷¾èÌ5JXu¼c6 ñT7e=ëžúã¡t¥U}oøÔ„æpçÕž|û9ŽÆÆŸd óy…̧jË’9¾:B)G„Rß¹Áªi,iãò_*V¾L£à9ƒJHv#è1ëÆ¢ÁÎÈÍÎÑிút2àÅ’ ÷ô;§Z©L!ŒcXyÐetÊ¢¬Ý³©S?\At»ƒ‡´ t6§5ø [*‰Èôk‡MPŠˆhíûXX€¸ñU@é'|÷ððO©FüÃ&ì5®Ïo†åqïÂnD<»¿‡¿”DS96eŠA¿ŒìsòûHúí‹£KÀðóhÚÀÑ£)ªYÎÅÖcâ­¤‘¥½Le@¨pŸû[&÷È!%\Ýtoq‚6ÙäPæ~0µ"J XåNv÷f{÷¾Fè^ endstream endobj 241 0 obj << /Length 1265 /Filter /FlateDecode >> stream xÚÍËnÛ8ðž¯ð-2P±|ˆ”´-zXlƒîÁc/m´M×BmÉ+Ñíæï;ä–d+H/Iz"‡qÞ/ý¾¸z}£ÔŒ1RJÉg‹Í,糜QBE>[¬g“í~hM×Í?/þz}#øWQ’ÓbF3§èÖ  k\?ÜÞâf­­^ê.\oæœ&M‹PêVðA$T’Rqåè¤PÊ%ɳÉÝÝ×Í¡«"C‘‘ògD( ÏO"ØŸý>ghPûW‚JD2 ÍrR)ÿÁ§t†c<éÕ ¦ جZ£­Yÿ6áH%¸çOç“?E¶b?¡Î JDz5AGÊÄcOÃq5iŠPõ«2¼™fX±¢ç8åó&rï½”{¦x/ d«aÀsÞü˜wI¸”/¤÷)×N³‚“¼8ËŠ§ê!s—k­®ê!» Çà ¤mQx£EԪŭ®ëÆj_à<\…Uã2NÝò"ñƒJeñJ…(IÆ¥àãóSK1ÔRÕE}àzw÷'¦Ñ Ò(W"XAƹ6Nÿ²½R„âÞQ e‚Ëg â±Ì)AœsU@ùp-‹,šqBûxzf)¦’gDõýdP°É 8À(P½]Óq´®»k×]àÕ ]9¶¦»°¨ˆ…>ªoIÏ|Á£êÎõ:"O¶æˆÏU­Vî¬@¶¬iã•c®nïþ§ˆ·Ì™àÁ<Åò DþBA5•d!ëSž_Ø@Œ”(Îl×Ápui1H5èmúÉØØð‰ÅF¨Ùàjôj§¡fèÜ—J ¡CÏÕhÓ¾aÙëyH­‚%ˆq³4¸^§×¸q.³ÖÝÖ9ÇÌåA_uífËn’ Iÿ™þzg•ŸXöe(j\@U Æ‹Ð$îqߺæSƒ¼© Â4°õy%ˆ^Á0ÕyCXq`Gmªw»Æ™Ì·¶fM&„¤ãaío%ý›%%E–ÁÓБÄÓí”=r˜FOýس;¼‰~ƒa\ÏÒ¸,ñÙÄö~ïŠA;v?ð󽯶ØUu˜¶þršËÃ-È À(þmîš«j§—Úä0$<ølvÍ Íqúƒ3…t²—CD:Ú•q"g"ñúö˜ö{Óúñ€+W¾GœÉ}û­jŽ6„Ñîý¤ÃÕh|ò"xîsšÇ_Ì›ÇEü*Ðñ# ,+ëCØ‘^6Gÿ2Œ|äÄ“ y_]ÚuÓ·;M½Â»¯¸¹÷ÿ>ŽÄIjmvƵƒKïû—ÚÎâdÅ\¡ @¤ˆúV¥»¼z¿¸ú _f‰ endstream endobj 244 0 obj << /Length 2342 /Filter /FlateDecode >> stream xÚÅYK“ä¶ ¾ï¯˜Ûª«,ŽDJ”Tq¥Ê‰³•䲇œlØjÎHe=Úzd½ùõR¯aÏŒ]®õeZ!><ˆùÛûûRÞÅ1+Ò”ß=<Þeü.‹#‰ìîár÷CPµíXªîôÓÿï?¾eMKEzcx y–£VÉGAyŠ£ "ÚÕPúI×cúeÖ]©ŒÒh„?1‘~ó¤ênœÁÿ½%üE¼ÑDº¨IÕ¨E VH.QÏÐ*ò”eINê~úÒõ×±‘ް[Û9‘QIÁx¶ù‡þ:Õ}7þDœq¼åŒ™à‰ãüÖ#+ƒ Ç[^Î1B0/þ•Îê“çŒËÌ1‚­qž‹ä9Ë ¾Šô,Îr&9¿ EÂri‘ð½Ë¡6'~Õh\lÄ¥œñuC0yÈ‹(˜G}Á§8˜z¢ tÊŠh×Á¹Û,\ì—j0–}ÓèÒ¸VûGúÝH0âÈã)Nv ENØb×Êmív3‡ ­ò¡Á½´GèÒ¿ßè….óÈeÙ]+Œ$² ôç9›™î3[ć' Bœê¾ì¯çR¯ÛûªÌ¦YYn~››Ä> stream xÚÅZKsä¸ ¾Ï¯pNÛ®šæò©GåU›ªÙªÉ%U‰÷”ä ·d·²j©ÓR¯Çÿ~‚”H™m{vÊÞ“H|øP»ùðýJ^•¬Ìdvusw%dÁ„4W¹àŒ«üꦾú÷f»í‡©¹fóez¸þïÍß¿ÿQª “¬ÈÍ'îŸú®=´ÓõVsµ™ö º¦¿ŸöTîèÛT;×Òµ½ãkûUÇC囆ót+áÂÒCi–K/;" 9ËuáúĆUz†¿$äS‡§ÿ ÷ª2áî $`X¢›ùîÚð {Æ\"Í˯-“HÙQ†Ä‚D!™(õoJ0¥ç9žÈ.¬d×®—dTÇ”’TÛ#ÕÁP²­ä+À D²Z“¼qÁ‹+Ð ÆyIŒÿ°Â2’´Ü¡'ªü³9Ú"ßLV/°ífjÆýÐÕcb“ îR³B;IrýõÜ_H¸Ç¹¿­ï†~: UœšbqßNŽ£:5T8-Ã555Y…‚¯WR,“JŒ¾b¸¬è,ü7­2Éd6_%(ƒUÍz$6¬8+ø|«¨Ë`œò¯– dH.ãÖÃáÙ¡ÁJó|–9؇H^§æ°¸sØS™v£J‰¹d¹zQuçI ¡YYˆ×ªîç®ÅÆYñ­·`ÖÄÉ]ÅV+^±ë<3ËÅÜ9Äxh ¡@DÜTŸ¶¿\ãtç†!Ow!KÑluÑ6¢ƒøsbˆô­xÛ£ŒFPÔj¼R’•"‹5>¶Z×ty¹9€ÆAû´¯§Å2  ö ²O÷3Šbív8»‚Ó4c76Ô|Ævji€‘šÚ®#Þ[Çëq&ÉÂ~ÿ¶%ÀeX ·ËåfˆúhmÕ+%a&¶ŽMCB MÑZСˆ(ýÐŽŽ•Öêf×ÖŽnw7œ¢éNcÓ¹qÚ;bk‚ÖSSuà#$öEÓ]‚bÍ™[AñMZE®ßSÇ©©Ðà¥=BYòÅŒ“a ªvè”|±Êر§¶PEûS¢戌€Ìû<8Íb'L&qªr~Uë|¥q7œœŸ”4 g²(^RÈâ9£P0S¼¯QHÁ;83Z¨•G`“‚•3^¼3"Xͳ°..B†–·Z›EùlØ+Ä;\5QiØ/â­:PÇú‘Èc5µ#vE÷Áöø¡µH»–¤1ZdZÁ€§•O£BŸÆ( 0vjûºý¥­ÏUGhÏ#If±¹¢p‰ >ŸÌ³G°†I ^­û7áZÁ¤Qï‹kJ)rq¥Ö1„I„0$ „9æ¨%:%lˆN û"Ö¹îäj þ˱ّ ¤qî|¸µQÔélb3¦a'Ñ™Vu0¥ÊCôÃjˆ~Ô2_4V¬ó©\h‰…ñHaçÅJS¬ó‹åcµs<ÖàÚNƒŸf7Ž• ôFôÜC©Íh¥^'ž×áU‘Äÿê°H»Ž]n+íÔÅI;± ‡mÁ“hç‘J{¬ãeÅœRÊñõè öÐ;s½C7Üg¢xƒa­yEŠÊqÔyIÀšÄͼè“53<Ǽ | `ýÔtmEÑoC”¦Î÷û4w‹‹­i¬Â¥sô³6ض®½ïMïªtåÁ¬žoÇb "³Éµ+Î}a Ìç>!«íí‡cާW«ÁŒ, €ÎL¦ýjÌ6Öq‘9ÄVæÑ&ñ²‰î*ÈH" ­o×þŒÝ›Ä¢¥,˜š× [Fæšç}*íê›Ï=àŸ*ÓY?0jsJåFJ¦¸ ~×§ÄÛÉEœ3€ ࢖«Ô–¿7¥3ЈƦsõ‹gY¾Å¼ÿ¯² ûó¥Õp£¹ WÎ]¦Hæè<ÖXO|•ÈѵèfN«6wÖkó{º´ÎÄ×ö(¿ ŒÕÌH”ŠÖu`·‘ Ýb{TBiÀ¯ÕQœ£@§R;Ôtl±jîAuÇ3üÝ•BgÈ™7PšÑ:>³Îzæ¿.Ì”C€öO¯CƒxÈuÞj §› T 6Öæý"•ŸlZ ·2j¿± žg‚Hò'Õ×f–LöÖÁ½dÞ* nˆ’"yåè° |À ˆo¦ÜËâôvtéi!s&ô*Yþ¼Õ(‘‡9©bÎI•.'U>›“Ê—œT±Ä¥¤Ê•SŽ-8ÊpF«”–*V¡RZ·Kñ+ tTðçN­¬yjœ’-)‰ºu}j¼º .×ái÷̃Á°~ý`Wt“Lt²â­©t¦H¹L‘Æ€üXh ”h¤–9ÆGᙦ™×Ie(~ÈÆÚRç‡ ¼çÑuªˆ™œV¨“Óš¸´¤ Éxn¾)j\¼½±RcŸÛÄÇÁH‹X‹XÁxvl¡rää‚á÷LaòH) ì?8Âè8𬭺Å2sA„d ˜X÷qÇê|0G¿˜Òg¼-pF–g’!ß6»Šd&˜ÓÄX©‡þ»‰Š^ßœw®©¢Jlçz§Vîñ6‡+Z™5<™wŒ{¡) dèk[MKZëh øó<4fìm Ǿâ~B"9M¶Î€`—KÊQ·s¼áÞ§môsÉ4å%ËyöÔ4]H>BÈ®óì1]sAÑÀ*͆ «×£ i6¡$Ë ù­ÏGB½¹uÈ—÷æj¤¹ß4V™W.Bë@|‹•Õʾ³’Ìçšå¢Xɼµ2h ÷ømÄÚ6A* £TRÉre@ ß> ›4Ã#“fDdÒL&æ×2þÌ3‚në]’K‚-t‘ììÎJQü°kã|“ÒÆÃ.6E°ë<§,xsA2ãP¨¨»EN_‘ýsC'| °‚Z‰oÊ÷”Lf¯ÿ§ä·åÝ¥ŒÀR{Ÿ¶¨ýQ‘6*Yý½³ˆ›Ð‘¸i£7?ŒÔ¾ÚêW-Ãò%¹:mqج˜Zöîí¢ þò$ÄZ“›,€kážXíC!\ãbG ÷NMo z†:¤Í. ¼ZÝKÞ/È[ýI¥K ë–j^›-a´)üK4< KÉ’>|ºùð+aî¿ endstream endobj 250 0 obj << /Length 2811 /Filter /FlateDecode >> stream xÚÝZYÜÆ~ß_1/A¸€†b¼’ €$H ȱ­‰ó`û¡‡Ó;ØCއ¤Wú÷©êªæµ\i•è!È˲꣪¾:ºf_înž¿Qr“‡y"“Íîn“ÊM*¢0RéfwØüüýÒ•MÝÞnešw·2 š+uÞ5[mÛ‹-ÊŸ£H4ú¾h®–š»ÓÕ¶§¦:”õñö—Ý7ÏßH59)Úl¥†ôª¿ÞŠ(0=Àò8 .×÷­,u¦3{ÓZ¼Jœgs«¢à#ÏY¤¬™rv%èïËŽ'ønÐìüÝx»;ÜÍq“Ö§åD<ƒ±Dm±×Ö:®‘©qöãtã-ò‹ æqL²$€LȉãSMMCmgº²íÊÂT¨ŠQÜ:½‚²Ï¶æ.饯 “0×MÍÊü¨}2-“Ý£>ê8™¶­"Ö&ŒŽ·­ý­·¯éÞÄ·¾u”„q@é'$óTý~N0\Gg¡ÐùW¸Žx:ÞN\{kk6 °Ï³¹'o^•. ¥Ó¨iªê#õ-ù˜tˆ‰Ð:cÜÿãmœ³È΂«s`+W¡ŽSHà6yê¥XôÒÞ¼ÞÝüvƒüF±1ƒÒ›$‚5y²)Î7?ým0 ¡'»¹w¤ç ó %YmÞß|óòAn#’ÈÙn%ý±G³&ÏrTË9í@"r¾ÔF5ÛÉI“ÇZØZ^8÷Ïþ¼·/„?$ur%Ïb¢x¤u8pµ A|%©¢)9[˜4W ú†/Õ A$wXLÒ&.‰£­-áá´rGÈ0Úò`¯.L§’؇ïÞrÿÄ«­Jã"råFÔqD;Þûœ:Ö°ïb®9—lìŸíyIÜ©¼@&¡E>å•{Zœú`Η! TqBŠñ}Ç[ó0g^J‹ù€rLRqöþ„¡Ƕc '÷ƒã (–'Ð蛾ªhÜ¥ óD“Ã!æl›>Ï„¦S'º5×âd™à¾ìØ®Çs\oý:‡ÐG-y«ukŒÇY)Ù“L9Vi¨ ßú ¦Œ[ ¡éغx¢)'šÑ•`"J_4‘º)i>ˆuÍÝL“5'czêö˜húNcãÞñ`Ü8ÖðrËûÌŒ{E‰xŸo_ySOÙ<±15nì¥)—Æ=[=1n•Š‡Æ b#™ÌÍjÅ0œ©+0ž¹©»¡™qCß±ß=/!‰|'4›»ÅÜ©<N»-ÒxÿJ3¿Ö ^÷¾¦.!·jyÝ¥iËÕXWþ~ Y·}Ì"LSfõi01Ó™ £Lÿw`V@/a+f™¿ë*˜“0‰²9˜…w•BâA¢#™Á‹Ž” ç˜jÂ4L JXxR! ÓBø#ä€iÁæÓB>ŽéÉÓpç1-чQ~Í–Ê™RŽ”Ötõ4`©|-`I|‰.'i“ëêU˜–`±SLK6iüî­…–|šˆié]6*.îüÚH0¶Û”µÈËÚŠygÓ­1P²ƒ7{·ß°‡0„`cz–+ï f„ÝéYûx‡2ɹÓÔpi¬Jð)N.-ä_…­ìÕð«cOy _ÛÏ—‰þöîÝë©tŒdØ#w„ Ú~’!(Æ1NÒQ`·`ê»wg¯Ô»ðuàÁ¬co^0þîý ò˜Š:‰~,ab_>JHžXÉáM»PÜJEîQâæê¼v:Û4wGùÍ]±n£ÒdÊL¹²HêÓM˜&ßDŸú¸€‰è0„E—ô”g fH2·¨Œ'\ìžw”œÑ* ?ŽGU«~úèéºÓ¸sÇ­ÓoœÓ±‰CjÃ-úìKÃS)@ÕŒ–Ê"ø.r{‘Fö%Ø`õùc]}Í\9IK"²7·öbÚá&•Ÿ´ã‘ë†iv“UÞûJq ç¸Ê'²ç‚ÖS`<ØÙ*fFãKó€òìŒ^‘„TD¨ûéç ™Î¥'àäÈ¥æÈè °æ~ðÀ‘ÖÖ.—¯l›³Å›áKòfFÀ\G‡¢¨po)Ø»ãÎk^¨½À{o=%Î!´/3â7k%<Ð}ô…·µb$ÊŸ®sÅáPåzo])ÕçVÐøn4?3ü~€Ý±ò>]åB6&¶ =4¥`^;O~°CûЧDKQI´ÅŒËšš+g'hצ?ž¨ ‘òôuo tˆ¶±Ñè2€&àWêSsnªæØô-/|t(r¤1W1.>d ]C_ÆÖ\ŸO׿¹Ç“!"ÿg 2I=Éæɦ™¬Rº™8¨š2…‰ö0É–0Ɇ|`‰/£úÿヤð+ˆSØm¼.Í$Ôy¼gݸèð_&$(éHQP†ãh°µHÏS‘³/ÇIçËÉ‘£“ž9rœ_:rÿSeßÑ|aøº–á)³f¸è2P|¹÷ú:çbbF~Ca’BÊ„%®Ù ÍÑïxȱÊÿ¶ˆ dœÊ”9daBõ–– éÕ螦w|ÛC²V?jɵÒ5¼ðm7yÜâÔ¤úí(ްñ3J§]¢$tkpÃ÷[êêb¥—ò»šw°ÝY’‡âò'û`©Ÿ³ê]r•kÈQ,‡ks9¢ Ð%–*µ0ùOØ´Aí!%¡?÷i -Ò™c}¬¡¹óøß¹øoi‹ñŸ`Žž8ÌGL6^‰ð̩ԣö¤bcD2Müµ¹²†+ qÖµÓÚÅ•Æ ¸ÕDµ0ÒU8ç¿u“"Öi^ú”M:d_úõÜÐÿ HµÀªx‡öãA‚CŸÏØjþð@[6Àeõ>ˆ¤æï¾î<|²wý}õ·Œª1”=mÀo„:0›0йžJ_?ü79ÝDK endstream endobj 254 0 obj << /Length 2213 /Filter /FlateDecode >> stream xÚÅX[Û6~Ÿ_¡G¨ñ¦K±(É6 L'Û™í¶}ÐXYr$y'³¿~Ïá!eYÃiŒÝ¦}±ÅÃCò\>ž _Ý\¼x+ET°"itse"Êx™E7Uôs|5Þ›~µY_íǺk‡Õ¯7ÿˆtÎDžEk!Y¦Sb]¯Û®]ñ$>4@®o…œm­ –q%Ä}³âXqo·tBwwGp(}÷³ÃaÓõn¾z³!‰,án%“¸s²ÞÖå`*ϹÛwC¬ŒÄ:Ñx­¦­9Єvºü‹89ŸqrÁx¦¼#•έÇ2Ux†O-+rî¾ ‰k¦ýüËa@Û«$A…f)§/4ƒÊⱈhd«Ý­õ—Bk:޲ߚq þº%âã ¬ßë`Ê~soÕC@r¡Ktþeµ?Ùá+„†šùu®÷E‡ ð¬ôEh‚ÏÓ€ß5ç¬ÐΡ{Ó¯óñ`ÚЛõ¿W½²9xD•ÍæÐ”)®íù@îѬåñ€ÚJËÍx°^È^Èœ²¹ÇÆ„±˜*¸ObÅuÕíBx”)ÓBüEx”`;£ŠLaI„Gi/µ³ÄŠÇ=‘ЖË×"$‘x„$ŽŽ´È²mÕ„wD:¹ß0¶¢Óª.”3d&=?iüOJœìÀ2¾îvN‰a4û>mô‡ÿ=*47™Çû¾Û˜a 7¢Ö'ëÞ­¾ìÚÑš¹†#‹š_—`ðvÓªâ¡ÞQÎ.)á®%@äÆf+cïNyhF"Ôýnùa°œ€zÿ’$â.±VÆýÿú%щðË1R§Y,?)MbK¥â—.ÇÝwµO€>3%ôw DŠéÌå·²¿­Gºäã¬å·L;å²*xÕ3Å4OÝUŸjÄw6Ì÷;pP §PW¦gß–áMi™ô)Í~¡‹2CÑ@ý‘&ŽeŽ ûF0Ûÿ–þ¥‹ŽÃú cùÿ­®ø\pÈgÁ!Eür³1û/*¸sRbÓ* ªþŒ‰¬8Å]ìa,2Îä1‡>Ýñ$™¡û™}òâ춦½-Û * ž½QUÝþBRÎrq¾8‡¶†ë;†ÄBFë³7Ænƒ&ú¹vê´KÕùß“ëvaƒçê|;•"´ ™åó²Þ™*°›P6VøíH°Ð–’éyÊ „ ý¦àOjéÍþº‡Tù—ÍÒOK,ñõT²è¸‹ÎPM–›Æ4DyÀqGù€–$¶ü*«Á ‚ÕH¡Yšˆ?¹Q<~õHZÍòÿWDùöòòÍ÷ô9˜‘ÊŒ÷õ‰&V#,•‹¨ã*\¹¨p¥«pEüúýDÀ§ƒ>ë‘þ+3šwRPÐ⬠ѮÜÜ×­;cM.Gàš© ÇÖÚí:ºdiÜÆXÚÐVŸê]ý\aBI›TI ªðÃêÿ3‘`Tâˆ:ƒº)}…b§\%×9NR™Š€”gˆ:[¬ð/ –¦ú _Δ˜Î¸¯·®xš:–´8aæOò¾V6Šœô(Ö@J?k˜òn‡ÏÚýûUM=Žž­¶´kWÞñØ~9/C1F•ÙŠÛ‚8ßЂ]¹ru pUi«:¥ J[Ó‰Ë (Øôäž%6ðªw$t|?­¸r§æÚB4^>ŠH‚ª½ïÐUBoTßš>wú<ãàða~S¨óиußµ;ªQa’,ã€^ΪäPŠ€Àx1Õdß^®É¥ž~¢)F˜½xssññ×$D"X&5$6Éd!¢Íîâç_“¨‚I0òèÁ²î"õ¢°‰®/þyñ 8O3L¢Y°Ä­x!éÐï0J²T BÍB™âz´¦ÂlD‰:ÑZ¬‘‘ò &‘ Á†,.ö! Àí …?œÂG˺Á G5ô4–ïýÕõ»É|Z²BeËâSöC‡ýÔ£O5\©k¼2—€€°Íp§&ùê‘Ø&ˆ#ñþ¨¤!Ê­±}0Žþm—úµÌ½î¦³ç¤Î"Qäztât}èLáøÉ‹ï@ý®}™(‡gžz%ÄÁ—- Ô¬M¨ÚtÜÎýoýi ® g»µ÷Eq¹pîòý;¢ì 6ý‹`¾V“Ýú@ô5Öå${ûqqy7z>Ïyu¢ 8aÚ9®H„€Ñ*ÛíÒiM·§m3· „¼q«í¨È5g˼~ø(‚šÚ–T‡)R”¾±®³lµ±³lÏjY]¶2Ç×¢¥äצµïNi|ýîﯯ¾»Á„ÊzÛÒ{kJöù øÝ8"UUÚôØ£?´UL:ÞV·_‡ªP­WS™„‹€“ÇíçëI°@ºK8;¾üL­úZj¨crqª)žqÕúþú™ØSµëÚ)øøWg‹9{ fwž(”†\kDŒ{Ïóo|.Þ¬ÇzGöòò>¹B‚%E±¬ªaq诳À÷‡Ö…?÷ï.Jòûç»Ê§`ÛPMẺÛx.XžM}Èä¡n¹t¡g±=“½€Ç~6‚'3/x…\©*™JÅÊ èñyYh(ß ³çdÒ'Ðÿeiû  endstream endobj 257 0 obj << /Length 2492 /Filter /FlateDecode >> stream xÚÅZK“㶾ﯘÛJUK ðYI¥Ê‰½•Êežœl04b…"‘òxóëÓ/ð!qv¦¼Éú2@³Ñý¡_š¿>¼»ÿ˜ewZ«2MÍÝÃþ.7w¹ŽUló»‡ÝÝO›ÃñØ{w®Û_þqÿÑšùâ,WE¡ïb^m#“\¾5ñ¦Úêxs`Ú‰(ÝÏqlÿsœÆ=üÑ<çpÝ“«Û~áóï‹o+Ïo;7¸G×ûQŒR•™ÉPŠHĈL¢Š¬da~üÜv§¾îq=¸˜“3Í„$¦I6cšÊ–ád?u§¡îÚþ^¨õla¢•5iXùçV¹Ê“",€o³VXY–QVþ…¾ÆQÊdyXŠÚ=®°3¹Ò¶˜Ø­hN ˜:²VÅ™˜ü{ßWçšN<×^þEå;ã›Y•BäË`„È–vséýŽGCÇOA»ÖËàÌÏcwÊé,ÈF. …^«€|Ñ¢ÓÚFYo>nm<òö.|väͯu»¢ÈHÎ1ô¿léò÷XúV… Ð|ØFIœ¡AÊBo†ƒÃÓñGŠ7Ÿyf~˜&EyT4Ò‹;?yá3*Œfº=SƒR{&¯*ÇðyùÚ(Z_U‰kw"òe8]Âk”h@s±4×±êÚ!n†&Ë6MÝ=ñÄp¥X9H˜_ŸëáÀ#Y‘>ÉaáÚú©­Qí•k…ttCu›Ñ ‹­“•Ÿ6‰7[.’W>¢˜—ºAçß÷çî(Bà±.ÍPŸgxYçÇv Èvô-œ>õ!xÖ57še‹¹Ÿš„¸µE’«$=¿b½k]ª¼(a«8MxîÐbÔ”A0˜Áö ¹U¥y; ¾îžA¬ËÊÑ•vׂʹåœÂù¨_ xt[¾ì(Ü£ù>zÏŒ¬Ž‡;×#`ËtSƒ¿üÃîÔ<ÝfZù|¨«+ò3¤W–‚H`JU¤KÍœŽ±+Ñ–£AÚä_p¦nñ®ÒÄsÝ4L|”ígïvL˜[L VTQPë+ Ü8ŒÉÃnÕ­âD¿b=EøS}A1²’b¹¤4Ë‹nõæSÛ|–=íÈIôQnúîr®¼èš@v¥lð1x‹ËMÕq;yôswy:¬®0*MÓ×tT|½ŽªþÀbµÝÀ’>vü\¹ùN„÷ãß*ÏY-Ç4§8¸e(kw[gZeßÐM¤Ö†Uט‚°xœ¨°!‚qØ´@šî™ÔB¢UÚdiÒÙÓqLê+)­Ù"5ʤÙ7r<£ßÔ±9!GàÁˆÀ¾ŠºòuÔ•ÿÔÍ3TÛ£¯Ü¥ŸÑñÉŽðžN€‹ÁÐö\cò€Sâí ‹ÀûëöIèÁƒÁžyWBœ³¥)ÎKTIåSKQ# –7 HŽˆT-2ÁgñódÓEÈph¼ɬI1Õ`"] xî<&$”äÀ ÏGas¸]¡“uàùÓ¨<`É!ÿŠ_·|ËÃ^˜ýº…wÍTÕ]hÝÛ-$•ü‚üYZt0cXO!"Õ•k>¬&.”ØA†wrçž8Ù8'NH¤’Ó?&Ÿà2‚ƒILIêºÍm´r.ÑEÃ# Ðt—a-¹‰É¶ñ$É ÇRe“ˈ¢]wü"OpVÖŽ<¥žäCôµN*õ|ž`j:j+«@kÌlºKãÎø®i:üÄsÏß>û]}ö‚,àÛ 3GWËV‚8…°ÑVÍEЇ²Ct$~#Â#~‰¼ÎIVÅYlž(r¡+úÜ×ûE®_ï[N¼µrþXêé‚÷~c#÷2VE’`u&úY+¡ÁèÉÍÿÝ7§?­”$®Ûe·äQÈ~ÏïgwsÜL'TpÝG60¼4u+Í•Kïž|ðN2ë(/£tºº}³•“ßuÓ^À*lM´{O=!‘ðoR¹IÔ4l( ~šŠº ÒNäFŠË—ÀZ¦Fß÷kGå¯d©Ñý=“åedÂ@™¯º[V]ðæy1Æ 1å‹iŠ Îõͽ¦Ζ¿–èè‘ÔâÎ@4žrçÉï8¨?%ð ;8×*LŒS‹-'¥³€üïÖ h•)¾ý~\zß$¥ ÞaQZóD(¦yuIˆÜ0᪀s‡šœ1Lbm6º^xõn¨ûýg„úí M‘ÚËÉ àÐzr¸šï‘xvYºðV]³ë׎]¨É¥L ؿѮ/¢ˆ)¾únåoNéÖ H¡GùKñ|™ÞgªÌõ)c Ýlx„ŽãE GµÅO®òÑÎ7õ±üNldôf¬¯‘Ëœ¸¸ûÿ°¯D~™>ùs4&®ð>ÅFk9 ]I·ºvÖg¿§Fݱkº'Nù1á37ízNH.ínÕ„Euíµ W2¨eáS(PÂæ2v ð31/3±,{ÙŠ¸zlÍ"—+¿ƒL£A#Gð=XqÅvRZ6T&XHbE±araE˜Ÿ¡~€hFµCa9ë)¨ÇŽ“óf3’g&‡769”g~§ûŠ¸× :v ©U˜X(c{WU+–“µb»’›…û¾—\ÞÇ€†rà@lÝÑóüd;À@,`õtl‚M3ŸXÏp˘–ãºYw½Þ¹¹ÐÔ{~)±²¹Êlq­™¶ƒµ¦^-ºùtÄü7±Rö&6™6¤÷˜mc´Ánhá*Yòn$±N (àÞ>°,ÃÔ£ÂÁÞgH~lyáHæ/•Ÿ>¿æŠf™ÑXgúU‘B!‘§·ªhËoÃóŠBdOKKP:AãÛ'¼W8F à“6¢YºV8"UÌ7Švp[ÐNEïC˜_dMÄ¡ç§ ¬GaÂwµ‰×4µèì"€MÆ·Üšœ%äÊÞÚ2tyqÉЉž¶´«ûSÃE»"#?…àäX±j¼£þ%M´²ÒKåY·®9¤j¾9¤ÅPÓ Ýyþ£ÄÔzÀ:Åɺ=䥭ÜàoƒÎ¼óL i_‰K ¥²—¯RfUç7ùÄ=×ÝÂܼ9 _íá©Ô¾=Ñot™±AŸ”Ÿô~ U/ê=‹˜8LcÆqY-š ¨šÊäÿ|(­ ;Š×àÙ¼$oÚ iÉm¢/îäþÈÄ_·ÊáÚpK II£UŒÿº€³y‚sï~xx÷_¨"kI endstream endobj 260 0 obj << /Length 2335 /Filter /FlateDecode >> stream xÚÅYKãÆ¾ï¯PN¦‹î'› äl°œK€drŠ}àHœŠTHÊãù÷©êjRÝTÏnÆ›_Ä~T¿¿úê¡w¾û^ŠÍm!ŠÍÝÃÆˆá,gÒlî›e;OMßÛ0eö—¾›†­`Yß¶M÷H¯ÏýE–MKÛÝq¨Çc߯íOwýî{!ƒ%Øf'tnTI+øñjÏE6]Ç»úî[ª<›ý‘ŠÇfòÕPSa¸NW¨©éèÛ_¦óe¢òŒ‰¶çŠfÓÑOpªbùo骎 ‘‹ÂÂQÜv»é¯¥…‰K–—LÍÂßÂäBgUwHL,$\Œ¸Î{èOŸZóœ™r–‡sð¥6;U˜¼´r³ã<·ZSÿ?êÿ\ên•p?tyX½¸,çN/¥ »?bØrþ7n¨öCÜîž©S ÷‘+ð×vÚ„·¾»»´ ó·F_¬ÂŽvàÅ ºCUØ+794a*öyèÉÅõÂÞ¥Â1l •” ¥y1S‰D,àó,€c½KÝí•Ìb¬ T½Ì®i#%Xn¸þŸ3Mº,ß•hBä¥âN:ðìSVA‚ù(ßÙ(”l6»+÷· }:¨\}:2„’EÁÍVùŽcÀcÔRµ –‡g?½.Ä©óùÖûH2Ò×’ó[·, K±Ä8¨·éçæpqQ AîÝo×\QCäea{dÜP"‰ß•÷þ+›Ðò}:¤äà)µòÁ”vv ;ÐŽyá?SKì‹BCìÀX4x~8½²BLÀô¿œ!Js€®Ýåtæët·`g‹\•<ÆBu–”&4X M µ\ýh¨8„ËÙ‚ÂxÂøpð•º\Ì‚åsµ÷2Hº4¨Ÿ—Ù÷§s£8^ú½© ”‚ëþP‰á > ¡cß ê7n­ö8Ǫrq5E±®ï2Réä.tôó¬ô7ä{Úº§ÔÞûÎÓô±?õmÿØ_<·/4ìNÇZk„ˆÃh‘àÀ”Y…·Öâë=cñTÖÞVŒÐÝÃ76¬ØçŠkB ˾íÖªb€Û„ ľ54\q •ãÿWPmó’}½ý4¿¹ýd*/:RåeQ$²’ÎôáÜÝÞ¥Ë.cÓw¯HFÚûy¨d:Žð¡N>ÆÉk<0×0Ë:Ç—EïÛlyFN~± C1úK .‰O¬øÄ'}rf]¶¢I‹9‚= Á(Á]´‹_Œ”ËT´ME Æšzꮿ<ÓÒ nö0Ï…Z€ßÊS!móØj`óÌ·¸AiúŒ—{r&_÷|ë6Õ_:4ÞJ–8ÓÉî’‰täñ&½® 7þ(„úþPÆ1ÑŸÁVÌÓÌ ØÜè¬Ër=áLŠgšy0äÄ9sx‹ies ,çvp»I¢¥ß“ ÿéB1S¸—Åoìñ˜"M8¥Î‹ßõu„cs]¼u<Åá¨Ëu"ð@ˆš8)‚õ&ÐOè0¨o!Kr•°#ùqàè³TÂä|¡÷‰»PÞ„y€rÉXŸ°ŸÍ˜k Ì8ÉGi»ò°…Òãô°J©€rå‰aOãwàzæP ¡‘œ1¯}N‘oã¿Cóàö\4keTðCç(â¥È\—9çfíFÀÝ%ÓKyù0_¿Ê–Ü…¾ùдÊÏÊ ¯’c=M‹¬wKmˆ@ £¡LàY€,%1¥uÎþ9㜨“³ð*Ò±wô¯ÒÛ…Þå×Ý=Ë5/CM¦T­gêÈ…v½½‚P“%=ã˜Ç 6‹™˜–ásÛ¥ƒWKb•qËÂ&ÀúB讳2Å»½bd”Ù*Ôņˆø±! )ò¢_Éü%—oÎüF©/x"‡,„Î=Ö¼ÜUï”ó¿;n ´ÆñžÃÚψ×5_`زD„R¯"n°30ø#’bh\2wõO& †KóçºàKæš}&eMU߯‚]+ÓðNѱf¹ååoCÇÖÓ±µ Û{£Ê”'QK$ "Qk—ˆË¾”²´üñ%Þ,¿ð†-ÞXXn„‰xÓÎö QkCûãð.$RÆV$ aîV|³³2—VŒÑØ÷áÓ݇ÿÙÆÚi endstream endobj 263 0 obj << /Length 2813 /Filter /FlateDecode >> stream xÚÝZYÜÆ~ß_1/A¸€†"»›W’rœhâ<Ø~èáôóI¯ôïSÕUÍk¹Ò*ÑC—eÕGU}ut;>ܼ|+Å.ó³XÄ»Ãý.»$ ü@&»Ãi÷£÷×K_¶Mw»IêÝߊÀk¯ÔyמLµï.&/ ‘Óèû¼½jŠ«éŠ¶:•Íùöç÷/ß 9;)Øí…‚t7\oÃÀÓ½9Áò(õ.×÷­ uOº×GݼJ”xµ¾•÷‘ç R6L¹¸ôeÏ|7höîn¼Ý=îf9ƒI£ób}‡0ò^ÀX,¼n¸˜kg,W–H78ûq¾ñùEÃÐÏ¢ˆ8dI™ô˧ðÚ††º^÷e×—¹®x <7ćnrCĺj{ÿv/eìnCT M¡•}a\³eýñýU˜¤©…€¥W£ø‡®§½ò¶éuÙŒûQC_`ÑÄÛ• ª-6 ¢à›W/ð~Ê;Ü¡`¹£›ÓK”1¶¿»ºÚtGd{¬%)å¤%·¾iQHmóGUôEÙÑ”û^Ê1ú þ1¼l¸Ð÷ˆƒ ‰ ÌK•øI(Ë@Q×–t(áàǸ?™#¾¿¶5mÿ¾oél¸pm³—Yê+%–ò™A PŒâVè”]›†»¤—nTtä½!LÂ\?7+;Bò£v¡;&{@}¶Ô±2íþ€[¬Mï;óë`^ó½‰ï0œñ­‚Ø¢QJÚ ˆQ’ùnl®%ŽâÏ[¡£Ä¸‹ÖöJF~· ‘ÆD†ŒœÚšðšŸd#‹ýlRßç¹ÿ!‘ŒÅÍn¦sÔp ïh ¼ßdœø±%½?l±á«@­¸Pñ—ë"\±±¸Ç’ý¾lò­»ˆÄÃôs—I¿òe@á[—‘ÒO¡ô’y®~?'˜'®£R?TÙW¸Nø|¼\Gc6°ÏÒ¥'o^•6 %󨩫ê# ù˜dŒ‰Ðª1îÿþ6 <Î òEäNÁÕ:° €K_E $p›,qṘioÞn~½A~ƒ]¸ #0©vqk²x—×7?þìN0 ¡Ç»{°¤õNøYŠ’¬vïoþvóúQnƵ+ÜJ¸cÏzKž™/“ÄÉóh½2ãЉo^ÑcÝYÃ0‡ÄæÌQ-ã´‰ÈùR=Ôb'+MkiagxáÒ?»ó¾yºCë 7bðÂ!Æ’× Z‡WsÁ¤ÀW’Š!š’³…I@sªoyñZD2+Õ$mb3,˜8›Æ.Nw„ £+OæjÃt"ˆ}ø ÷ n\MUj‘+;"—ˆ#ÚéØç„в†}su]"°±_›úI\Q^ “Pa6å{œú ë˘Ê(&E‚ø¾ç­y˜3/©Âå€rJRqö¡ÀÐãgÓ3…•ûÉòëhôíPU4nS†e¢Éáó¶M—gBÓª Ýèk^&x({¶ëé›Ç·Î"ôIKÞ+åG ãqêCJö,SŽdâKÈ·¾‚)ãVa¨èØ&¦)ÇŠÑc"J_4‘¦-i>ˆõíý=L“5ÇSzj÷˜iúVcÓÞÑhÜ8ÖòrÃû,Œ{C‰xŸï'lžØ˜7ö‰RL”kã^¬ž·LÂÇÆ b#™,ÍjÃ0¬©K0ž¥©Û¡…qCß²ß#/!…Ù(Nh¶÷«¹¢<Nû=Ò8ÿJ3¿4-^÷¡¡.!·êxÝ¥íÊÍX_þv Y·yÌ¡Ÿ$ÌòÓ`b ¦Ré©úïÀ,^ÀVÂOSw×M0Ç~¤K0 Îè¥ñ¹e=É ^tV 0ºÀ4ô ÓÐpJ+¯%ÂôtD0bi[^nxŸ'1={¦ú0ÊïƒeÀ’SЉòQÀš¯ž,™m,aE³š¤M®›W]aZ€ÅÎ1-ؤñ{4.puh"¦…s ب¸¸óch#Á ÚvSÖ"/Gh(æu¿Å@É^í~ã‚ùY¶¼3švçg=íÿCÀ#Øq¶Q1ºkàKU5æ’$ h¼ÊsS™«æç+¡òѾ1Ÿ¯ýåÝ»7—¤Û)¤aü6hûYª 'éƒp0{°‘ õíË»7Wê]ø:ðrV‘KI`üÝûVäU9T<ýPÂı|’\²ããv¥Á·”“< èõÕºïd±zk@ð%š»bG&ñœ˜²õ‘Äå0Mº¾‰>q3Òq«=6û)k ¦J"ž¶¨´#\ížx÷”¥Ñ&+‡ŽGU›ûìèú¢n£Ìrkõetll!Ûr‹>ÇRóÔL Ðc5#…¡ú>ì^¤Ñ˜ 6X}îX[hÓWÎÖ†Ϯ½èn¼Iå&Ít$ORz£Á;ƒ°=‚6ù&è†ã¿LNðžå`¼=h/7½ápl¿§ï˜<`®‚d‘ß}Ó©,µÖŒ Ó~ÏÃíËךêb3 „¨ñ•r¼î Ýœ9Ê'så…É22A¿m(ÙH!6Ô3ç¦y'Õ<Ú„×î`çÚ­ðŸHlÕQ( †[{Åmè¹» ©fwÅÞ"ÈH”¸áVÓbHJदµ+}޵Z%½7{Ë“®†Ù° ê!D]Õp¾†¼;œ`cP=¥}»Kƽ¡Ó!Gpm¾!»¶2®P6cH˜¡j+$Ò“lý²¯õ‡ .•/§ºYØ@·²‰],ØœP±aÁˆ“³ãX Å*fظô¦Ù ÌV9ï+Äœ,ŸÈž ZÏñhg›˜™Œ/ÉÚ–fì«,Z‹³imtxÌ/“?”T )(aÃòƒ 4ØZ¥çI˜±/ÇIëËÉ‘£“^8rœ_;r÷›åÐÓ|®ù9Ú–æ)½e¸è2P|™óú*ãªbJ~Caœ@Ê„µ.Þ Í=ÑïxÑO±ÊýȈ dœê•daB †– éùhÞ¢}7@²UHêȵjÒ5<õM?{åâÔ¬ n)ΰñ J§m¢$tkpÃ=÷;êkêbÉ—ò»†w°Ý’‡ä:(»`©$Ÿ³émr•)ÈQ,§k{)Q9èkˆZ˜ü'lÚ¢ö’П¹´‡Vi‰È°PÖÒ\=ý[A¦Fþ;Úbúçó³7"> stream xÚÅXYÜÆ~ß_ÁGà¡ú Ù¤)QyïHbû;ìeÄcLr"m~}ªººy©×Z–ü2Ã.««ª¿ºúÅáêÙk)‚<ÊS‘‡»@‰@q1©‚Cü^÷ºßí…ÊÂëóXuí°ûåð÷ É"‘©`/d¤’”X÷û¶kwœ…—ºÈõìµ Ñq).F܇Àв“°¥º»;z€Méa–g–ñëíxêõ‘42„»dagu½­ŠA—޳9wC…¬©µ²x³(fq°ç@‰µåßÄÉù‚“‹ˆ«ØðâˆÓ¥÷"çŽá£GDåw ßyœÄ“(qïŸú>fá–Äè–bzB7Ä*»±¨‰F¾jnÍyÅèMË[ô'=Ä_µD|Ø÷»‹etÑïõ@«jðh.±$û²Ö¯$|ƒÐˆ纴ûŒªÃ 8Y§6؋Є3QøÝså‰=гî÷ƒþõ¢Û£Ыýw½¢¾8DõñR)ž˜ýÜ£[‹9 àÚ J‹ãx1§ 6§ ì)¨å) ޵öc1!žÄ‹û²k|x”i”ñ'áQ‚ïRÄä C"·5\t•‰Ñß… )–³eáð7à$÷õ Û©„•ÞWИÚŸZÃñÎd÷¾sñda%<}r l%cÒU2æ*’Lj$âÜ9à›²‹Ûb°+Dh­‰ÑŒ4“ÒÙ²wIB¿åÐáDY,¿¬éÛüÃQŒ…G!Á#9×ÔO%¥0]L ë†ÐþˆœüÉ‚Nº½-Ú÷9¤ÅŒ¿Ï *ËÛÿø–E™xº:—¶‚h}ê@_“<]aìŽè¡÷PzßàGi,ž,îL'×øýÍ÷³’ á‰AªlÙR%óŒGšqjrDAŠùDBþX!<cÑ10–ÌLfk¯+‘ʨaÓÙ,x»R0cn:ŸmP¯Û|ÇeÓÂc}P’D9K¶}Ðñ|ñåmPöµû Åœ1l3Ôpk-´º‰ºÖ5Q>ຣ–à=‚’>a¦7,ÊÁ.¼­RžD)_¹UŠyøâ¬Z@â¢üííÛW?Ðã Gê™p1ÞW+Kl•¢¶^aŒü'ÅÚÒúè/ßýHx¯1лj$ao …iÜà1¶kSï«Öî±§?Û¶£ iŠg©#M¥­`ƒv#êcÕTÿÃ/´¤}c5h<&ࡇ8Æ-U]¸öÉ0Ú6ÓD,ÉdÛ¡¨3“„ð,¿,.ò(SÃ}u¢qŸÇnÜçÒMñf˜=±²}oq!dÄòÍeÄÂ/JMg¯R›ƒ”/ÖÕ8:¶êŽx ×€"qÝ…… §Þöthшï’ó?)ZËGYO˜“*Û0OìiÔÍà$§öR†ÿÚñØìãiFfå™ëc¹uǾ«‰LÁ„äÕ” oŒ%ôçáDkM”ǘ ¾€Åå< D¢»gŪ¦ù+‡‘-Ã÷îúæÍ?‰8§y —ótIù AjKÆmç,\û½MÆ’-p|ÕHl¤‘x?›g¥ÜjÝÒÓ讚©åtÙŒo +ï‰ÁºýX5öëùž‹ë)`†aÏ2Á{esjÞ^M4˜›+”bxäN:)øvˆ‚fºöµÁ–ÛâäµÛ ÛüR“ÛN'<1·—Bøîí»7Di M×ý3oíŽ'öëÛÝ> ¿©øqq7:>ÐÏž6Yœ$&yà ÝÎXs*xœVš±œv«»3‰UV d¾q¯m¶ ôZ²)gÞÞ %—¶%Ó…²†Ò3vœ†Íc6Žàƒ® «­\z¾ÖÚj~£Û’òæÍ›¿¾¼þþ€‹Prjéb8µ‰/$jm†GC¤+±çuÔàǶ¤î) Oåí·¾ìm$Ÿ[{ü8Iq?ïŸLŠyz?Æ¡}æ )Ü¥hj2¹67¹nÝ•Àc EÙ„¢\Fr÷ãt&É(sºQÙ2öæÑuÚ«0E‡9}?‰!•7߯|ì‹ âµøáÒ"N™i»ðßF ûíHÁ÷02ØR 𥩣YÏôSfVýÓ`’/ªÀ^ËæSÀm9cÂýÏ§à ²}«Œât3ýáGp#-^„‹XE©ë%•r¥öÿý )ˆ endstream endobj 269 0 obj << /Length 2585 /Filter /FlateDecode >> stream xÚÍËrܸñ®¯˜KÊT•‡Â‹igS)'v¼)+µ‰U{ñúÀBÆ$1’‘õ÷éF|ÌPÞªø°Ñh4úݘ7wW7ïÒtÃyœ'‰ØÜÝo´ØhÎb&õæ®Ü|ŠMÓUÍõ绿߼“bŽ©ÒX¦bÃo{½:‹ö¶®Í¾§noO†¦eÕõ§jw-X4ô•m;Û–ÆSÑ–¶ñ»Ì×Á´{Ó‡æqžŠÏÜúC·"‰tôǧÖ»Êá;´Æ/ÙW錒’±–Iàþ“=:®>&çsLK1bþq…–޵Êœøc¢6+¤¤Š³4˜Z» :NµÞl—'aþÕtûSåX¤=BÎö°¥8îf…°` ¸dÆä(–-¥M´ãÉ>\sð_ú‘‚G¦5èAGDŸ¤BüžTÈ“è%À¤ cðøýÁxÌǪ?àL Œ@-MýKXÿ8ÁªvMš *ßÑLþ?kf!™…’ýàÊÎè¶J%±d)¨Ïù!Ù¡?½·ôÿ\‹$*N×[Heí,@‹–½§ñî²}$.kÛÏ¿‘ 7ÁÛõ½)g.Gç]øÝýµdžNòÎ M7Ô}Õ>ÌÜׯX×q’¥¿gQ2ÎA'^p2çQk{š44EÕ» ¿… š1’ €‰U˜¼¿½}û¯€ºÇë}) ñ ûttk;ÂЙSGdQ˜öšGC]äPà^§8£xé\xÂcíHŠ&UïŽÉ¢Ÿ{otKÒ:ÝUì*i†tp, ÊŸN­í‘€NËt½Ÿ9Ÿ€I×=¨³Ú5ÓlùzƒÚM¢¦j=_¶dƒõ`º³ß^,ùÑÉYÆ!´ÎÍûÝhC¹ˆÜ…¾ͱ6Á2óÄD«+:ú nqFb‹ˆBÆkOxÍË yáÔÓªZ cÍŽÅÑxÖ¬Çy/_\',ò;këd‰¤‹ºzhÓúGYwk·ÆÀôËû‘\ä/¶9ÒìMei¢^Îà/ͽ{"S¯½[÷ýñÕÍÍãããuÊ¢|¬9î*[ÇöôpSÚêæ¸ßU±§€p’ýÌÛÞ˜}AƘp’2Ž (SœöúB£Ú™yJÒè ­Þ´Ô¬óœ“_„z¤\>;Äé Æ?¼ð‡ž,™®_Â-(îDÓ³l✠îŒhçþü=ÛSjÍöT¦"ŸÑ ¥)ç‰>ª¶÷憗SJ:pÅÅSÊñÌÖíì@ƒ ¸aÐò^ýóê v ‹ÏU ™;RB+âD¬”;‹åÞ¢è˜ô£íÌËšõR!¼Ô1n“lµv¬­¸L}‰Fsgþ04ôÅä^RSpK¸Ãš"›ÖÒÇtu ` Šì Ü+È`cÉV–nï@X¹pi‚ìiÁÙ‘gÙ™Žá^¡ó‚sË¢÷7*ž±±^?séSÝ |ésyréðùŒ“Üs£W4Ì0Ñz¯w¸ #‚7}1L‘²á€ê!3á’Ox3q€^c‘’8D1£ÕuCƒ^¼7‰ÞOëþ T,ÁˆìGBh×§")­}+-03%ÙR¨J\FQí¾¸ì²Eèp2‰—"!ÛÖO •“l$ÉW:@£m>Üx}yʦ|0[ò¢$¡¾{n8`c'DÔoh/Ú—ô1t¾ÐÑ~8ysÖ)Ö{SäaÑe!ßK?½-Ë'¸‹¿¦¹Ú]Jy…ÑÙa!Àè3K!ز,^M»rScŸ¼‡žßƒz Q€Â ¬B Ù–>BÁW5/‹ðu¨¨Ä9»VYù¦çi$C•(}Î"©ŽÀRZÓu[{¿ ‰åé™}ñöÏœ½x9Е«B¼êblg]À²0g!|ûŽŸì6Äi{ ÝkïO~õ¾vÞùõbg‡>¹ZÈüìŽ@£ê_žñ¹·õдÝ3·ƒ>žt2¯Vš[­b!ôb{̵JjÑu.û[)ÁÃeèoÿáükõXöWÞ|D)JÁ1‹úW¼Öqå8ËB¬’(Ô²."ÈŒr•Ì|:@8ÔTÂÇø“¥¡s¨ë3âÎbûj‘6Ÿj6Uâˆès9Æ9.£Û¿^sA@™KάðýÓÎÓFN”^VX2M€×I+ô_ç5€Rù†VxÌh‚¡¡ µPL¸ë…(.UžÔT˜!4v%¹;ÉICQB]6f«M18áj½², ‹®Gái~½É1tÄb&¦ÐWø ùl鳌Ëg¡@²Á*ÇJ¶˜ó<^úâQ–Å‚åKûmœ”1ɯ½ ÑoĦ _·–éìùתem‚ïymžÄ–Af$€Š\¿ˆS¹¼Ž/¦W®âpýM>úâåÿã2‰y–-ïia-ˆ*›•Ç œ{‘0O*ͧ+áb¶QšÀÙyšÀ=ho´ê«Tœ¢YSÎòµŠf!­ãž‘ôí‡5;*JpQû‡­±ÂP¥ÒèÍ­–ÅÙVhsª˜ !f‘š\$Ðôø‡#&'9%'qæ÷W÷´¶b€cUÛµ@ÑÌLžRcø©¤ØC¥^Þy|u¿±ærx·ok*¦—>—ò3cM¨ø‚{²Ø”ž•`8kÃùÊŸž ÿHªž–z¤6 &ŒxÆÆ§ôU,„N`Îߪ(' -ï<ÿ®–úÀG,¥ÞðTÅ êÚ(õE*c S$óEï‹wcqšËgC'—,æêÒGŸÓ"´ìW G•På/íz ¹£"¨I\ìÃ6rT;*®z÷Ä©wEÄ$ÝnœmNváCÏ6a$¢Ÿ¾§%©ãœ‹ ‡Kè䇴)'gÜ‘b:Yhɳ൮$Pb’>ïmbÍÝò8Mù¥»a[s·„ëe4-(ò-›E€_4‹€šEX&wsZZt]œñ û~;µm+¾&.qÁÀ98Ô§yœeþ§H=ýr>΃ endstream endobj 273 0 obj << /Length 2279 /Filter /FlateDecode >> stream xÚÍYYä¶~ß_1@¢,Z"©Ë ‚8‹ulÃë]l&Ž8šnv·`Il·¤ÙÿúT±Š:zÔÞ /ü$‰,’u|uQÿ¸}ñéJÞ¢Hezs»¿‰e&RÝdq$"•ÝÜînþ¼ú{ýEòAnþwûõ§_H5[‘H¡uéíÑlB©Uð*¼ßÈ$(ëÁ È`[ÖÛ¡.{³#‚ýFE=Ódï—ÅQ¤·ó&Ž‚²ýi#£€ÖÈ ÛÚ3]Õh´AÊt“eˇð¾v8˜ÐìÝ¡fÛ‡(ðƱ(’„x‡ÍÏ0çËò .›»])Hä…’B™‹$W°Æ$¯>5Èé°¢!¦f }c·e_Ù–9•$gczs¦¡²£çއ’ ©ZÏÔòHï_ª?o’(`rÓõU3ßùl·f7œM·‰“`U ‹,Î.Ä ±WÄ`jã_µ=™?‚ ±YÂ2¤,vM¢]@NYBP…ï ªðÑûe Ux{UóP…WUˆ°ú Í D9 +E¤ˆÁÏ{Ô\Æ'&i`¬aÄîýLÕÑT_:­Ö…Û§q`[Cd ±ouÕò^´0oBXRµ -¯ëz0h¨£ '¾ú}ådú?у< fº¡iJÞã¦YN‘§^CZªkZ÷òí¿™´j˜vè@y+~9Ç˨ý®"UÖ.>ÜâL€©uÛg¬´i 8áҲ毡? =‘`,©MG¥·cÕÒÀCsÀ£Iž-oöðx‰À|Ù‹M¨ ­,Éɰôä”ôçÌy?ÔìBNÃ0½?S?2/¨ BkU&wô³NÇe|ónQÛ¾¡ØÙ}ÿFù®xl ´ÈSÞàuÕmM]—­±{웩+"‘k V"óg†Ç?ûÄ@À~ø¥©OñþîÁÈ:à€ÁÆ-x6Mv>Öx»n- ±õÁ›€î¼¯<˜…JsF¡;àª>íi ¬ËÀ§"EÏp-n2!KûÒÖ5$ć ‚åá䓌|WAÀ¼«ð#RuhÓ2umÚ¹¡Fí+ˆ–ÛŽ¾÷gÛÐ"Sn=Íä"~ûÎü<˜vk–î2ÃÈ-E”0Ü:ÐA-#k÷•‹ÏG÷ýÑ6ÿn“c »³ñ†Ñ:x{áÚg28híò§GÛš'¹ôä½Þ9øÕ¢ Â÷ î¿!Ê8^”»"ž*‚¿®2™ÅkW¶HD¢ Oð·5 ÅX5ç˾àMâ™SKNë³I.,v¶q¾S]Ùœjòfò°Ö¶GÛØÚ &£¾™Ž½ãí ç 8KóâCÒ¿IúÅÎIWy9§S*Ð-BÐ,TÌó$\Ѻµ¥ˆÒ‹26üvÍÚJÈüc{ŽõÖÅãæî2u]Ø!?Ú?fÆt^²ÂÎBËlLp챌þ5»EWÚ¨XDÙe” ›Sµr¶+ãáï.%d¼~û½ønÒlM#p¹,V :GW:zq»Ã‚úÐVžeËHïb¤Šbl•¨j¥OwJa…ŸTd»7Ë-Þ¢‹,ï:™ó¸3@¯óŒ uóK!¹oà ªðíÅ]G'U{zÄÍí°V}§z ÙÍ"n]T†×±œE,s¶”Æ2ÊÍ+Οh¡ãgûDZixï•À‰5ñóµVhJÊȧW€û ³¢cÝÒè¥"Ø eÇÄeÇ¥K¤Ev (…qg45ÒcO£°èhœ¬ëÖ÷-x×ùž1ÿs4Å ÛR£è¤TI:ë–!ÎÍ»Aœö­×J…‡M6XoX¥Ðr$!ßEŸÂ8–%³¶fì6¾bÁá΄›d.¢H/ýzêAÝ“žÐ™A?5o—ÍÿðÂÝ=¼õLXNôëà…ä©ÓßÙ‹>£Zwì€ÇB?¥¾Îqï'QÉïPGã~‰¿(D¦ÒµxS#ŽW&Þ)¨w¢ØåÚ;¨%«©á:–³õ©Nâñÿ¸Ä"ns.˰¬;ë/cÌnÝ1“T¨ä²4¿|㪇5xŒ·¾ð•÷>Ab‰yñó#qWoôæ2ÐÿúŸï>GOzùŠ&Ü¢N./iÐÁV]×Gª¡> stream xÚ½YYsã6~÷¯Ð›©ªM‚à•=ª2S3q¦j*³±7»[™4ÑW‡ºhÖeaf ¨f ž„EFq`©H¤¤i$>#$t6˜ ± !ke¬ óÀû~ËcE]›48´ÔäœQšÁÌnà1…ú<Ô¦ç9xjØjrR`8‹U@žÄ*³Â硨Ï'³ÈŽó8UYmz23 gâH¡‰èeز5Ó‰Þ'™`Ç~İÐD<:Èó™ ÷³,ýã3L„·uÑWdÅt= IïKe ÃäCÝ‘OAáõÿݹòAødï„ó1<"vð×&¥=ž1™L|yRøw2™ð£8²äì Ò??|÷ã·Ô7o™ðøÄíÙЋÞ7± ²‡ŒgÙb:?e'î„c.Q–“•apˆ:ÝZ+sBtj%“õ¦³ –•î\¤"ÿ0kü Ʋ„VvÕð´jS™"sÚ˜ßxÒis`m˜f÷¿ØŠ»„`ãH„ºÛ&;Â×ß(²:4@AxË›¾X"Áɤ6®IshÆHÀÑó/u·Ãå®ÞÞ_}¾ aÕ`.")üåG¾» ÷ôUm€ÞvfRQbÞŽ7´%\$zÊßÌxt3ÚÂå…™ôS¼ ¬­£‘*àf*Ç8öü’oA0÷ Xo ‰·…‰ R0Ï)àäÖVcÐ9»‹óÅb…™qm®ð»ñ¨f F«âˆ“ÎPsíNú©‹tžó5߇aö ‹äÒœ,÷­- {.~Om‘ä‚n¹ÄH± Ú÷Ü ÄÌ æB-h/ˆ¥™=Y]¢q–¸~Æ/íýì7ÙIøI~q«¨aÖKÔ¤¨”3Â&žt:ƒM$¼ïÛË9èyð½.ꢚRü|5Œ¬¡ ‰0 Zg ÞWìŠæÍËtI`Ýó-ù ûôxÇ4nô°¶OTLà›nloºÐÁ¬‰ †“O©xêØÚ]…i’ü 'ßÊlß3â[烮LRÌ|¿X명ç<5qÆf ŠòÜ»®õ5smº†'$ÞöØ5Ü»ýðáíb|06¬f:s+a±íìÉ¥ƒªþÉeãÓÍÎ$G#d“LCwn¯ÏX~p `gÀuæeæ˜ãVÈlôm!ó}H?—>'ˆ"é½îðg1 dÆí{¦7§Å0õcgÜ  ÀãÆB<Å–ˆ3, ‰oÊ"œc«_>æk7pÀ.Ã{S8 åHüŸá0Ú8=yø ÿ¯’òNiüø¶ÞÁW¿oH>,J2X_ÙàKåªÛE⡸„ ,úSÚ¯+Íó—Bùì&î€ûHRšŒ‰C¶_Ð&Óa¡(ôc¸_Ì`ûP:t2¼.ÞñY= Pű´»[ue©ŸWì¤É+CšÆ¾Ò³#—­G§T«Ucúì­„Îçêí©\»UÌ/Lïúöim@\b8LÒ™ð‰ C0P*½±¯2¤ ÌÇg-lÅ^{‘o|sú¿–!½ÈÐû:pܲA™ŠÉìä´&ÄL)V„Ü{]u•;̞͸8r/̾ɉÓe≀Ÿ«(@…˜‡´b6_˜KDWÛ»€'nèU“|7—ˆ"ll óˆÕ`¤/~Wxæ)yúhÒl¿z¹èQÙÞuCS:ÁàùFø]õp=ßš¾æöì&@w?$AxCöEÏAkh|]3¸™ËWl'óöæ¬8²K÷3!‘ÓB{z—'Ôem&ÜØGýÕZí‹ñ<˜9:¿‹3ûùSûË ´¾CÕ|ú.?’>Ø`îIþâò"潨ñ@>úÅ;§'AÈñþÑ>Ú]q8Ð++|iµ3|pØûW¦Š‹‚© bå4ð/o8vú¿š‚~[ÁP¸Ü8ãøºaŸöj0ChðKs(_&`™øqòÌ,°Ï”ÿ· ýQ endstream endobj 279 0 obj << /Length 1830 /Filter /FlateDecode >> stream xÚíYKÛ6¾çWøVˆ‰õŠÚì")š¶@Œ\š¸½V¡‡kIÙ$¿¾3œ¡%Ù\äÍ-z9‡óÍ‹öÛ'Ï®#±Êý<Éj»[…qêçA¸JÃÀ¢tµ-Wx›ÍNõÃúÏíÏÏ®E4㎄äù* ¶ëuxÝq½‰¢ÈSí:”Þšt;ú{Í«7.¿[ é1©; U×öH~ ”8ñÆž—^Dß­eàõcS}DF]épìʱÀý4¯šC­Ýj¢½ d0ö¼(¼ C?—’¯ÚÛõFÄ¡÷úå«ç4"ÍŠ¯U$ú(Nx[¼ r–z‡÷Vc=¡êé;tô5×0»e©³÷ªà³Þ(˜Uñb£êÚ¥ºjº±Ð^’¬ _°|àFq±Wª&úᨋª‡á æÛ=ªűW¨–Xªv0¦Ô4-ºÖ\Î(‘Œø®2ÀÀ>`ïˆØã]ÜÖX‘z}ÕÝj{q$ª¶¤Þ{˜ïhán¯[u­¦Á­x{?ôqšxa@­Õ,œlh¨ñïUÁÓRªªù(—C ÖáDšy7zŒlP ¾êf-¯ÖËUòòCß«F}7 æF¼ðË5¤qð)ÎQ¹ ƒl&ñ³„Cò·ƒuØõS°¡]]“/ñº­Ko×èSÕ4{¥ú^÷VSA1k¶tÇ;e•Ž` é§qF¼HDöïT>KØÈÍnŒnÑYF%¶;¤©žvCpìÆšŒõ2örJ¡-Ç’øú¢;jÞO{'0=¢{©ö–52rYí $ú¨[Öb sÀbCæ˜%!­GfÝ+¾ë_#¥Á“¿$d tKØq%3L &@ÀƒlRìrÌR&éU¥&‚"¦FpBÕ7DÝÒ(¬[ {¹Gqš“©)Gµõ‡MP…ñzØ13rš¤ä3à™G“ ÌòS*wĆVÅžÜåܪèè''C‘Ö¦'ô÷dO¯Øou«ÙàÖ[«ÖFÍw`ĹEÒ8fD¶Z ˆ0Ìa8¯V3W«ï‰#Nf)¸÷©œ½wˆˆý< -ÃŽ ¥:áµF«D _$’^mà¯kœ Ön0·Ò*VªûÉGaÉXÓÐʪ8ÀLêJèQ˜·µg-ëì4‡(ì‚('O[(9ßèÀ¿g<å» ¸},‘® –~–¥ hBNH)—™¡¯HdúØH ÁF€Áx0y ‡!Bs66Œ!Ý‹Dë„Hƒ4zs€V± FHóƒ¿ HièGù%H‡®ÂTî02à~ ¦Ì2¸b@ˆò/ƒ)¶™·:7«˜Kj|ºsœÙÔf¸©#ƒ"¬°³ÙIÆØ½€è8n¡0»Æq!e~’X…æ©f¡µÈ 1–Ít8(Ts…ʨÁ!>¾r.ÞÆÇ¹x!bËf#´2õE.+Óäp˜°)a–„ç³¾ejZîÛÆÎ‰íÌ×ùYû"‹.ü «ƒ::îËüÖ >Ó"*úÌ‹^ÄEáä œÜÇwÕ°'¾±­¦+C–¥uVƒZP¨¬pG,‹"§¦É “ ÁtÒ¹αéwÄåå¦*v·Š3ưoª‚mk~˜~ðEDßßâGÕèSS{ÕÃ‹ŠŸJ¦AÔþ+ûO÷€(3ÂlI¶5 ê¨5 û}ÇAEsƨì^׺-,÷åÓ@5á«YAÓÙ4ˆƒº+ìfEg˜«±ˆ©›šï³­jM‡+b‹ ÆÈcw:ïimÂ&¯^¿Á´ý)§—<óÞT ÏMEl«”`å²Ù]Ã’ Û]â†Sw‰x rwaö ÛdÚ{Þg'Ç9Ý4]i^£ºt6_…Âü¼ùºj~q÷^y?j©0™ÚßÒ¹¿Á¬Öí-¥Ô4œ†cáƒv;>Ý"hØ õ¹Ü™ÂláƒD"¡®wÃ"ß’ÿ`8nLg¯êqÛÏïËÞ"üÏo¹®š_ÝWøØèˆÌþ&’‰e%‡zºMY‚ùÍÛ¾çP!+¿²auÕâ *$/¡rDwY*™øqrQ¯Þ¹BI¤~’~þ3æ¿JÒJSÂ}HŒR_&9c”L¹Â ´4 £o@}À kŒÅEPíœA%ýXÆT‰uþdTÉ,¨ªÄTÉ)¨ä2¨frçA•\þÌð鈺ìM¾¨ð> ¤Au9¬3²ˆÂÿ뼇S®¨zÐî.èèÂø2ºhÂO²øQÏAí%—3 ×©Lí/50Ú‘Uù#ÃÕÑ×þ-©¢Í$]F!-*fŸ:?¨œ•6gG>½Ì¾×é'áφÞñ1ýxŠPÍ|iC03o÷'WÛ'ÿ8IB\ endstream endobj 282 0 obj << /Length 2240 /Filter /FlateDecode >> stream xÚ½X[³Û¶~÷¯Ð[¨™C@RJ/Mí:ž±©Õ¼4}€HH„$X‚Šó뻋)RâiÚéL_H\À^¿]àO‡W¯ß ¾Ù'ûœç›ÃiSðM‘²„‰bs¨6þ¬[΢ëy›²èlÚó6æÅ.úÔ Æ¶nûÃûM!’¼Øob.’"ËiY»AÕ5ο~ËÅì!ÁÓ #º·[Á"Ûoc ‡TãYtŽL÷ÑpÑ4÷á‡ïi¤QnÐýë/È.L³èg\¥Ã&¿lyì}»s^Dº:M‹Õié€?l±hx‚_–Eƒ¥ Ý*ÏF­o, ˜l§i²Ï2â¼ÒÈ:VÛŽ¶-Â.y¤†A•»É|ÍÉŠQ¾<"I®mK¢Ã JmÕVD¶"öO,c>)‘v½-µsÚm$Yãü³ÆÝx‘GŸ¿ÿËwŸ>°“EΜ[UÓ²‡c½®µBåùÁ‹¦QR¨ß>RFÈÁßÚ ™Åésuü– /ó™áy–%©ä£åqPã¸ýíülbìÑ}R–&™Lg»¤^ÆXdy’ïÄRT<äS[%§UÛÑ?”©oFÆ)s¢¿õ~MlìÈé°á®]gƒ»ÐÈ”_9êÜ\¦ 'ªÒ6©u<˜†6ò{uqΒݾæaŒgS iØÐS§é<„x’NøýŠª‹¤»‘ ]Ù!K2± þ¸¦f ç?kF¤ÁY±Ñ£‚OÚ†ú-ö¯Í=ûžoZbWNOe–0ö›ìÿ' ;€£Ê<£•>aôªkD3Žþ À@`œ] F/5Šͽ¬ï€ižlî–¸ÐÌbC·šÖÉȃΩ6üû£ˆIXô•Q«ˆU)œ¥¡á‚ž†‹*sò"é^·ah„G´ö´âx|_ÌÃéÒ4Î4+Ú”»$ÙCÐQ'ó$…œABðWuc2ÁdTê6Êø8LÌ• ‰JÑï^˜ŒL‰1‰‹jºzDÉù-…àì"… -Ó42Íy3¯ðÓµ^CF‚½]t¢-˽P­®¥Y@F¯¸‡Ù'ñÓk~bŒ?OéR…%³¸ÁþÜ;<Ì€…“5xHÙuìò â7ÏqTÚaĪYF¾³É3 ~)Ós´s¢yÍS”°Ì´ \ƒyÝ7 JÉÍŒ‚ä6@é1=Nbÿ¹«í<&•…Y6DánIìN#9ÔÐBÁöLŒxy<ƒÚ„ÄŠË„ri<ç!§Aã¨J´ÞϾÎéíÕ§È\ •Mu DxbàŽÜ Õ6²ôWô»¶æ4ú%(©ù7ëÑyò<:ÚáBT·…Ð鮤£ÎbJ_ñYT·Ø…J äTh#ì5¶Ò¡I&Å–iéAU^k0ôSp¥íõèÒ2 …ÎLLagÀÓÒéüErÀ=u¼Æ÷?¯º-Ç*%–`Bg.îЙ‡Èå¤dìdBCÑ@¢­T_•jLUi*j­Ù‰O½öœ| G·Êí£ÙVã4I*BÏo^‰eÀŠOõÂ%rÉXæ\Î\’^uIÜÈ.6”Q£U˜B†¬37Z´óÃñÂ&¤Å¤x¸˜U\ÔBÀ1‹zÏçŠÎ6z ¡Â„%:ÊÁ-)ŽFMûÏ„X5¤6hß×TÏqkãZ·çáB±ñh—°0æ°MQ¯È>pÄèì"z'€êϾL‚¶# tµ§`D…{ A³y¶%Ö|c§ëSª€–„t43‹D}|ú»Oï×ìBÁËCå.<û6ÀðÈÏBdå‘ÈØk9vL 7Uý«| p Ã<Ò méÛÑòw>¼ù+Ç8ÞÑG;¢ßÙÚŠÈL¥Õ££§Üp¥W ïr÷ÍÉÆ”]é44ÜÊ ï5íKÖ¨ñÌw<$37»Ñ YïsX©_ÌF±Ü'Ûß>i{¥xåi"‹ý\ÿ>¯l!“ý.ý/+x6¯,8µ;EZk´¿o 6Gûù¢Ÿ¤†ªÏc0CÑXßQé¼|Úaû»k£Ô…CíYu]uî]£¶TùaRà ‘ªèï#_)àÄ|¾„ ÁGÆÌeòŠ÷‘y^A„ ;ñë~É{€×ζ%¶àaH¤¨û&^±ÆÓ¿yy§ -ãÇRÞ£:šÚ`=…D¨%ü³$v, AcSP`‡‚Âïki/ˆÏ!^4¦§ÎT·aíEï 0:º.¼(ú˜¸^‡÷tƒ¹¡TX×IH7¸¦¾—…2•×5ŽáUÜ„veµk¿ (zjÛpS@Kä î8-MôZ9ÛâÝ4PìØ¨<ª ªóÇ c=?ÝM¼²2¼ð?FÀ0.F#Åqã~Y{Áb ϦØ2aCìàêØ›¤’Øò£jžÖp" ¥z ÓmX=®ô÷,?ÒÚË M­½·äE’ßÞ[☜߭UDZ@ÌäãëÉQ—ô|¶€OÔzc~E=^Ëü…dv§PãuâÕÙÓߣ¶rî:ä€X$C¯Àl!“4/îa¶.àh—5„Û(þÏ8Ëe(†±ák(«Øû!¦Ð«¯z¤CÎm]…®¥?)\R¡Žÿû‚›gìnë΢1Ânv6fhì¼à$"•I¶Ÿ¹ü)T}‚rÕj1{QBzl¥‡‘'…÷o¤sÀÍ%.ܪXÂ8 -Ð%÷¾¢Bî¨iÒCo»rèÕFoY Hë³a†24|q†*3\A ±µVó_Â9bLÛßl€½™5ý®X,æP‰o¶`¯p–*K@ŠÑ˜¶¥ÑÎtº6íì‘0Î>h¯ª`…ãòbMé-¾K½f5”ò™Éh¼ÁŸüÜáèÈ]x¬žÙ Ža9Ãw=jÞn±ÐùÑ€’ŽæéÅ* Õq¶x¡Nxß¡T×ÓûÈJòDæ)ìT +ÂÓÆŽãä«7‡Wÿ‰5s endstream endobj 285 0 obj << /Length 1950 /Filter /FlateDecode >> stream xÚ½XKsÛ6¾ûWèy&b€ɦÓC¦É¸m<}Ä·$ˆ‚,Nø AÖñ¿ï. nÚz‘ÈÅX|ûí|uwõâÍ~¿a,*Ò”oîN›Œo2G±È6wÇÍûí¹iô(Çëw?¿x#øR5Q*ÒMLŠ»ëÏòí±Ò}-¯y¼}$žšF×;v‘Àz•«RÓû µ»^$ýõƒ~ˆc^+ÙggH{¾G;vÖO£,ÉÉœwm×ëJ£>˜èygJö‹¥’$â¹pGzßõcÕµú#i2¶Ôd‘àóῬ•™ ãyË¥ýÞR"‰ò}á4ñ<â°ÝÎèZ×ü¨t9TÆDšÃÅbÎêÌwçt /.ôpñóq™Æª®ÆÇÙS;–n«v´îì¦Ñså(èË©–ƒçHR>ù,Ãqa‰’åÙmjCÇ,bà›o8«øÏÎò°ò–ŠKìŽ Üšüâ± â6.§ÑÈkBZˆýö èÿÙî=|ˆÓXâcº=J}&ayÿ@ËrTh°ç O"n4ÎUéT¥¶KÎÞÑô.;0(y¤§ÓÐ5´‚ º.’tgOã­ÇcŽŸ|ŸyŸ¾ê­¡U«ÇÙV`+¦“]óšlHsè â[oApD. -ŽiôÊ®žšÖÒú.¨yå©0!]Ävêø%pÎë™;ȼIÕúü‹wã¹Òë@ƒŸ“¬E‡OÍA¹¿_‡¤wv=õuC(ÃI¼ç.`±(”ð„ˆ² ΋ Š[€[Ù¨À­êúÀF{uV8jpû`^í.ËRiε¤¾¶€ª‡¬­cçùÿÀ(‹¿Kw8OvøcÁ¾Ìœ{­Û®}úT8»cí-¨Z}Jª_º „—¾ÕçIµ¥ÒÎ09>y<óú€FJ«® Í7rTÇ 7‚ö'û(Û'¾[ÔÉÄäÕ뻫ÏW Ž7lÉÌÏ¡l%Q¶)›«÷ã͆ #Q䛣ØlxTä˜;êÍ»«ß¯^a;ä×Ç$Š"3 ¥1û·‰X!îT9V^ótkĉ‡$ª!’(_ ‰bB’žìÌ’(Ÿ‘ı’8†HbšÆ´}ÝV7·»9-ò×íë?Qleßוq„¬lI8й¤ìÑFKY—P÷Gb=(èÉ$ÜDÓ?†ŽÊl §z´;¶ãÐõT§æ>à^ªº?cR Ò… RŸí·¡ÌoÔÖL¯U{?žŸˆÕ¦;ªÚO|%ô‰ªÕ“¥ô tuœ\<`A·¸¤‰­ÒXCÃa Å<+|š ufVÙš«Ð_‚¡ˆûÌ8fñ¼fÛÞ•~õ† n­ÃGcMB‚TàA~¨ Ã3©1¤0çà€û'†âN¦ÐôÀCDfÛðÌv—²TȯƤÉsA_ûNWH$Ø>ç™ÝÜÿƒ •DXCPäq*ñ9µóDÃÏÝ‘ž]¿01 HîK,À|/`Ô†&…¼~9iCPèZÌúI¶Õ .ïú(8zs +hÐðQ“Ïö>š»Ôd“íìœu`Î"ëÉ’|ì•!݈…¾÷-2þp¯ÆP·þêAúC‹“³U•ªZº$†úR÷€§‰™âlH‘ß@}[#Æ“y1Œã©pA€²eðÔ†9ÈA€-ëoCw ëMýH m7ÒbàØÓTGÔ8þ´6ÆökO]ìZÔtÛNêQ«Ý=Û’p˜õýlKe¸u>\fƒ•OÀ#ñ C%"ó3Q?¯ø:”Žh†ïœÏÑkº!x_”³¯ BàsAÀÄ%ð©Ë>8àþ%ý'Û²2Ní1ØÎ &›Ã†Dd´M ;ãú`Y$&@&\-¸-ÔjùÉäœ㎔¡ì&tŠ)Y‚t¤[UKøÐ ¦K¸x(×5wí p…6ƒ‚RÜóM¶ÑrÀëy¥ôK8_WäG_.}¼`æÒ‡BiǺÁ Êr"“F+ñ2¼  YÀâlfÞÛJòæ™moô9€Ú=Áð ྨ±«Úz©¡1‹ö1ó)[vMÿËÛÐg R¶lýá™êú K´ðÓî­"[kÃ%f>n’2<”¹ƒ)›©–† fûƒg×) @‚©»D¨®i0tln è`‚J¶X³bë|ð _ ácÏt› @C;ã4PÑz´óà€¾—¨âf,¡Ö•·ˆšÌV|ZÔ»ÔB"ˆåAßšï w¨¤6MBj­Gá|v”.ÏnFM§¼T_6ÄðZ¹<‘îùölÅ”¹ÞËû0c¥lC‘¤kã¹<ƒŽåj/ ñ^W[ç‘‘(ÅuÕº’d°½ý(ŠÃ¥œ´í:¤®#iF€¾Õ«Ü¹kºº»ï&ÌL«K—­×½Ô:t‡þ_?y5dp[¢‹öä¿Ò§O³oGy÷.7m‡Ìîj¥³ˆ¥ów¶U÷/× ½’v°burE¥Áï«Ë%0 17}9‚jž&MÁ‚˹QŠ+³‹+YÕ¶B{×ò Æã(ÙCÎHó(Ü\¸kå_bP V endstream endobj 288 0 obj << /Length 2453 /Filter /FlateDecode >> stream xÚÅYK“Û6¾ûWÌ-R•Ÿµªd³®lªâ<·$Œ ¹áCKRûßo7ºùÆ3“ÄÎE`³ÑøúÉon_½yÇ7RŠ,ŠÔÍíé&Q7‰ D “›Ûüæ§ÝÍñ×¢®m·ÿåöû7oµZnŽ‘¦ò& ­‡ýA%é®lg†ò7[íe´ûHÄÞšn¯‚Ýq/ƒ]1Òþw±ÍÑþDA?’È·Ü›²é‡‘àþÎŽA;ز!Bnsgz;I–‰,V1 v`É*I˜’|ï?6í¹/{Ü2¯Öà˜È}yÔ0^0Œ"!A5|ÒŸÚóP¶Mÿ í”r±3”B«hÜùw¯Ä½–7€~UY+•Š$›^úO:µ£L…Š“ËüÎÇ.R§3;Úd’Š0T7Š4f|kûcWº?SuJ/U¯Mãñµˆ¼`DÈ^E;[BÂ4p9¶§™5Ç‚F€‘nÐÁnÚG¨¡YÙø¤"ôSw=ûäFi«óI%"=Ý’‘‹Ò ‹9˜îÞë,`ÿèIZâEÕÅÏ?Ðó°:Ì ›bHÒpwëNw…JêÜÙ`²¸HÀ‘ðòT¸+sÛ åÑTDZú7ÄÉ8:œ®êüˆB JŽæó!VX¼·{GÛñ»FY‹ä>a_-–èVp©Fú¥ÊsÅšª¼oêt¸]©Yÿ½¾†ã1frמðŸ/ K´â|háÞ ¤á¶‡r(ˆnªŠ702p<"£§Ý=HÛŸ>–ͽç¾U‚n²ù²9V—ÞÝ„ãZt¶/Ú*ï=ºÌ€ô¤ò²g‰úÞÖwhÉ•Í_#-tž9wíl€ÉÌ+]«Äq‰Òݼâ§Ï96'ê©kk ŸÓi™5 S´†nÜÞ–þá\£ VØQ ÆÙ €ŽÿRV¹A0œ=¸S”“ÇnÄA‹ÄãÇjg–V€›ühìÀŒ<ö«œ$ke}Fû…ÐÉtu·)ÛÆÒh«æ„ÕŒa¶ñÙg  „ o"¹Çß§BÏ“!ŸŒªNÚDU ¶³ *Ä$2­éQò;R/êZ'Q¾>ýó|½ú¤z%xãiGmö—@È;ö«ÃW4@Uæ¦/ht, 9"0ŽŽ¡†1z·þP”Çq+¦6n4xáæ ‡SÓñ¾ÎšGŠ,Ïi8ËD åˆÆ£„LD©Ú¨ó*DÌêr–"åª\ÖsyFÙÔD?ø0Aë ƒˆR ýñ‚›Á( –k1dW¾(ø½†'—Ø9š¦iõŽÆ—²9Gf0…(˾ø€ß¶¦F<ê„>š‹?µÖ™I­‘ôd¸ÊŸkó~í}rþ_‡cç.02ñîoœòÆnãU¦jÀaÂAž_zíT”V—á|h|SÌ ó„ÿÜö\(“,¯LÝ­âq©MsÀ»5˜´\ëƒÞ™¦³š‡žÞÝÙ¼ì,@ÅÁ 6ÁJmJ~†† ŽJ-}({Ñ¿‰Ã#¾ •ø€k®d r.r ÿ&wiúoo2ûJxάËÑù²‘;¤²)d'`l"«£ƒ/) £ /ßÙêü·©«€ÉjÙ¬› wL¶'šwl3NËÔc[×tÁ0©Ê1ɺôæÞŽI¯RÂï^0¢Ó”Õä3ˆ-Ÿlô`[Ï*¸ÄhŠ5yxç !Z¨¹/ódÂ="¨·²OØ1®¿§ &ë °ô¡$W^Ó ]p}G¥PÌ•S²®ÌzæÒúΔj!çLôÉPþ»µâ€F™e1@¬Ü:¿` :±ì,oÄ;ÿs¢ù»`Z§9êƒq® ™JO€ŒŽ#¦²#&§ Ý (¡Æxº~èÌñw¬Ÿ=SêèHúMÎIñ¯¶¨WU䀸#¹ØëošEß`]¬õR—èfB9ÇcXý/L¨¤À=nZ¸hÎg8KOðK;¦CRÔŽÜœ³Ç /µµužª0¼ÁÅpÚã ä¡ò<ã\÷´sqÙ mb@$Ê"F Õå´b9{iZ[9i\w±‡ƒŽ;ZåÇ»á¤y^"s,ñpþ+ø.~ÚÝštøB%Õ=Ÿ[§záû=9ű°”ôÛÉ}Ž,ÜdV›®‘ÄÓ5ú@g"…’“zõÖ>AA‚÷|—pòeÉË>ÛÏ}ë.e“xz2@òæ# W¼Ð’×ÉEbî•~žm|œÏ„Z„*Úš¯ 4_Nÿ_ŸWkÎZp€º$ £©oú|:L·ù <‚ÆNÿP¤ץ‡ץ‡Û0÷¨pêlÇ‘ùuEérC ­{u[KYvç¢dÙss×)¨\1³e¾å6[´œ’Ü— uÈ’E?€?Ÿà~Ÿ¡`„ê3ßæùÙÜ‘$yÞ-—†mUéÊ5úªL­Dm“«Bc%¡ŽE–È¿ŽñÇx ÇøŽ‘¼‚#U]ÈbU…¡¿@v9õ{BÄéÌ[¦!8áøH¥Ôûáö.É-… K– Rãü Ä™uœt¥mõq¬õ—Q•ã¯K´¡8n@P0éNkû³9ÚCn«².©Ûœ¤Ï‚WŠ@mÁå):×éc*àv¿8¾°eD-À`/¤^}ÖÐÉ_SË,Zã k|-Ûm_H¸¢‰„.Zö¢ Ì?Ž>7º’t….gB—q²I«ÿte‰H“+ßEsl‘ùÛØê¾ëÜYD¯¯‡>}6Æ\_„{Ì:€Tw |ìxÁùœ`LÃqÇ•W ²«\pÅrÙ¶Æ…ï~øá5V‰«cͶôoˆ<~|ARcj›{޼ðËK5ø8§ƒÏ„–ÉŸ^«>ÎAL¨ZÝ´B NŸb Ûy?{@º¥´[¾ü³Ô”Bo ; ­úüáŠ?#ÂL ñnùõ(ÞwˆB÷ý$ qíÕ¿o_ý0¶Îî endstream endobj 292 0 obj << /Length 2807 /Filter /FlateDecode >> stream xÚÕZÝÛ¸¿¿bßj1#~IÐHŠ—â¶)n÷žz}ÐÚܵYr-¹›ýï;Ãêkµ‰Ókè‹M‡_óñãp¨··?¼~¯ÕU.òT¥W·÷W¹ÎØ«L&"ÑÙÕíîê«Íf»–Éjÿ©¨Êõ?oÿúú½”£.:Ö¸«„˜ÿH&qd"3yd8žü¯I¢>/Œ¤ŒÐ¶éÏÄ¡ôˆCZacû›n½1&Yu{¯|½#JsOÿ¾Øî©Tvþ„{(º²©_Í%«íÞo×*Y}:6eÍc5 ;}¨>’ã€EUQû®9eݵ…QÛû§²~ÀÃò6RŠÜZZfYo«s Ó®7:Q°Ú“o÷Mµk©þkb¿–v% …Ç}ÑQÛc‰óaéÎo›ƒÇ²¤ý"ñ_gØ”VOTÿñúš ÷k 6§8!÷«=’?ó؉À"䫥ŷJè߸µÎôÂÿ|Õ5T/¨Š ­<‘êâàw ʕң.·“¹zpìažüKv”+a¬šÙÑË3m–ŒZh™]¼Öza°T_¼Ñ‚HŸÛ»J`½ÌÊšÄpÓ5$°£I£W¹²«CÑ‘27*ÍDb§*}Üû“_r¾\¸ü¿å©û&ÂÊž£P™# ÅÂÄ&‰Tcý|¸CKÇ:ºËý©9PM ñ7´]AsMlãŒÈ’ 6CAY±Ý.,LK‘$:.ì—mL«0û}·¥:¸|ç‹Vd$¢Á÷íôO>D æ>wÇ3èe£MÊ: )‚ƒ­AmEYwX ]7¾ã©!ëo—ü´¨w¯QëjXx@•%Éb§ÚÍ%S7=¾OeCÜ,›Ä£uÄ]3K ·~KúÃ é ¹˜]³LD2Øs äÛ=Ú2l îü€Ê?ù¢«ž¨ÃÉïÎ[?L¿ “$ÄÚTçƒQ`;.³, ;ˆ¢ ]>w á>ÑXêª$™$Q&P¨|ýÐí©Nøçã[Ëšù‚(ÆY:Ø-J'“¤Ãí;Ì¢8W¿°J¨,bÊæÀ6¿9nñ‹s› ®ÕòwöíØ_´cAÊÅ aâ5È0 ¦ ^ƒ´þ rc¯A†É±äz¯Á¦¼FÃ}ñwöš4xÆ]î5fÑi”ÐÎþ_:ûf§1—;Ë‘ŸÒ‰ÊÌi‹©L-.Ouµ¿ÕS>ÞuÔ9ŠQŒ_ͱmzØ×L¼ ‰îReÕm☳8ɨYœ,/¥ýfqÀ÷‘ÅÜU0Àº Rá‚G«T¢A¬ ÁŒI ˜›ÁÂXxÏL3 î°m×ÐÝt\ðž›:nºãaN!e„%Î\¥fs9ñ^‰wˆ]ò©´èæâæâv”tZ”KàZòíÛŸ@᪠ºã•þ} ÷¦Õ›k`š=ÉzBF×àwFQ&vzûÓÇ›_®å<¦L¬HŒž ‡xl2š«© UÃU[)9¦˜œ'‚ÌøcÈF`CS{.ÜSÎ/Í0@ËÞµmS8){ïìAi–…3àWO/8 ç$2qy¯Þf|íÆã*Q“!ˆÍŒÆÝ5‡/ î–d=\õsW×s—Ï0ën,·ü,‚¥ù+½N’‘I!‹8· ,P §øgÍ'îAÖŸpÙž»DcÇ2xJW‚»oˆ!Ε¡ M›•¼ÛôTçµ\l¡¶~!¬ÐŒ iõêÁ×qƒa)–­šú\!Vø{ÁʪÈ~ô§Mÿ‚a5Olè%aGGèˆêiÜ»“T6„bçÉce}ù@k[Ì[öJr½\ºz,ñ iáEþ).áŸTàìòKµgw?S&4éÜ٩ס Ò”dLäYÀ4‘˜³#a¸l„˜Ð… xzáa9|¦íû¢å!‹¶¥KGãGn*¥±0Ïpš¡MH8 hC9e#ùÃìÑx‚¬£OBãxKØþ|x=ýþs#'ÿl-Ahi*ñ1aA׳§®Ž!Y DãAaX©’lHð%Â0²f†ãxéÛ TØLÍ6ÆÉ4]b¤o2ɀНê1‹Íï•É(É­’I’;x2œ©ˆJp#! Íw7k„Vj*¦þ³†gi™±Â\QôUÄÌßøcNüÜòwe7äÔý³(D_/&+AK q~÷áøôsÛ~xwûÃB¶‚ endstream endobj 295 0 obj << /Length 2692 /Filter /FlateDecode >> stream xÚÍZÝsã¶÷_¡·Ò3'Ÿ$8síL¯½Ì\šië¾$Í-ѧ2¥ˆTË_ß],@4tNîb'O°ìçozwsõÕ×J®jV—²\ÝÜ­„ªWvU ¿Õêf»ú®X¿¿þþæo_}-D’1(Ðo£R%–#+ âEcëp»COí0vîA ÏÛNé…ùíïÀvþÚnö ŠV—n‡±Ùc³,†î'TXO@ýOfn›±¹m†i-ºms:Â-³Ü¼ðÝ$Svâßà o@ÞBΦ>ž¡ýãa@#ðWtú •bµ¨S…Hì]Õ¼Ø4ûÍyß .€>•U]üݹS<4ûýGš”!7âX¯o·Ô?µ¸™›îg Oݯsç¶Ž$‚Ã(‘@θœY>JZp;Vœ±SÍf<û3ih›ÓfçŽ=ôT-~…Ýõ4x:ú<,ÿÅ‹óÃm{¢©înƒ9C‚ÔSùʺbZ•AL#fx `xeË•Ãö)*× ‘©)óØ”ùÈá, ¡øcy@Îk¦Jû³ÁpΔ®ñœÎØ/µå*±eo%“ºN½|¢xíÉÀ…( ¸Pœà(ŽR ÁÆ#žYNKœ;MH˜”ÃqF“f“†|"oÑŸ›;\4ôo†>åJˆ âH0¢ð Æ—LR a† ç3 Ve^:Ðrȸե B‰ÁAÓ ‚B‹ê°C¤ –žÆdHK&I)h`’Ð –OÚ1{ j¢N*³ÌIü9²0 B/3ØÑ [§™ ™‹Ð^–&¨…^¨…ñj¡Sl†ŒSP\Ï‚¾$¢žf7:ÅæÉóg­J`ÝKifK¿á7Î(½5þåÐ' ÷ûiÃý‡öça²Þ›ð!£IUÁé£O6a©Š+EõA ãµ(N‡=õwVl‚sñ“|ÞÉn¶¥¬Ñ»?·§'{Ðð=®Üƒr<´Îì`EÓoiüx:ôŸN1ŒäÏŸ•Î9s.… ¼P}‹“~tˆTLx)ÂzÌ |–¬+ã¼$Ò"/ù†ª• ¢Â¦ ÷üæ»å0©šœ-*¢r‰¤ÌGKH ™1ò_·@3.è;ˆ$†¶Íhš©Y5§¼Ù ÞZë*ì©Çp ‰XòEIá÷¶õù£W—NV$QŸë$îBÎðBR·Óvº­Ka×%úîä £‡Þ“gÑ`/;ýÄ~/£F‰œ ÏË ëÓá'Å„[y1aó²˜JÉLe\—•–¬St˜Ej]•œð<~hÛÝ9ÅnO¤‹8 î#2«m{ˆ¼Öµ Öâpì°ï$‹nò T¾/ãUµ´ÇÈ­àÿ;RFìâ éôCä„ œ(ƒIáz®ó@¡ "wä¶n©ù$Çþ€†P.Q£Uè—.¨Ë””SñÜ ÆîºXkQ¥ U²h U>ÇüõŸóUvc‚÷{´7Þ?”=,¤á;}3Ð/i¬gPd+uÊøRGŒ‡Í|¤ÔQù¤Ä¿•…1 O˜ÄÆéH©*Î0¼ñ¦2w¾Ã=“f߆jó ¶x8âþp|s8Ðït8ìlÜ«RÛ–ÖÞNÛ–„Q¿– []ŽãIàj¨AhÉΔþÐ m>þ4_?t÷;ß¼]Ô‚ºT®²øZC¢°CuÍU00’l¡‡3­ÍëÁëäãá2IØ¥äPJõü#§‰«®o?/äÚ¾l.­Ù;ÕÀ;ŸoéÚ#õ¾oï°-‚»pÙþýK§bµy'â4ùcæ^ìÞ”Ÿt ®½*0|®°ã¢RšÂ!Ke–¨d®´#kfmõÚ¯­Ö½JëKد­V%¯­6~mµzùÚjU¨\­" †U'¦ÙÒô©l*C¥¥Ê.Ê<®Ê زT_TäY+£™°2 ¯óüú"åÁ$Úœõ\(ÞƒtUþ>]U<*÷UbÒ„E•IϹøZÆÿyûyïüÿXæ? 8”w]<^u +_l©„sñëùyVÛÅWˆ]µI³]z xxöÝ‹Î^Τ¬~¾·CRþmâòcíëu¨`ãiùF§òc­}ùÓJÅ0‰Š½x±øü‡…Ëñ§ª™Ð6o@7ù¬¬öÕ#¥dC²s²i²q²I%ûIü©âøã$~ÊÏ]Ä{á}¡Ì¼/¸†À#m}ñ}Áp›žÜûxþº–qàq7IªÊ@Z%ÿðuë ëËo úù?û<ƒ'ËZ¾îŸ}•üŸ}³¥þ•þí³BÓÔà~׈´…ÿ§¤-Ã?þ.j… endstream endobj 298 0 obj << /Length 2767 /Filter /FlateDecode >> stream xÚÅYK“ܶ¾ëWì%N•†"HZIª,G[vªTqE[Î!É;ƒÒæcB^í¿O¿ÀÇ,-)'Ÿh4t÷×ô¼{xõæ>‰ïаÈâìîá|—Çw¹ŠÂ(ÉïNwÿ þ~ª®u»}œ‚ïºvèwqtu]µ&~{<ÚÚöù˜ò½ûÊ ÕÑíþóð·7÷q²8 ºÛÇi˜ëïÿý‡ïÿ‘ìöIΚþXZÇ3Ó[ð;f°'&V­,òÏPöÖîÝ`¯<ÿwÅõÑìZ]-\Ø~³Ûë™eçºaO£à5t63ýTÁÂcõ›Œ¦=ù;X”%T*,Ò”%¼ß% °þi§R yãõ>!Ü ´ö@ÊZïœ$KA`©rL<ï77 ·ççÛÀJÓM¤ëµïïSÕ€ßâµµß" jÃŒ[»uͤM!ܱƒ{…°@GÕ—n¿¥áÊ´ë$pu‡{=¡Uéòq’ˆ­Q&,@œhÀèÍ…¨ï†A^¼9qÖ®cŠ‘+#K³"‘ÎH!;ð%lËŒ ÚU‰AÁÃNÁ-M±ƒãõ¡4rç«qn%~ÆâÖcäUÑ Ê˵àÉ«êA,<½¾7>þlì!¸ÐÉw GÀÑ:'vŠ‚ýžO]cüñÕɶC…j:.NE%lØsmztúÑɰ`Avƒš7ïÌ-üË #äBÐÌø@-ë4xï^÷|³i×2éœÁçyñjX[KI°«Àèˆa««™•ÎÑïÜ–`%Ä.¾ 0Ú ÇS LÞ…`ðãþ×] Õ# G®ìê“|"7à ¹úÔ’c^½Ý€rfQŽb tgþm»¶ìš®î.Ý(;ûßѶ`Û-YXI¬—K©…PìQ:ƒv&ŒLœ'ËQf¬e·•tÀYV—’#” ž*†úòLÄ™ @ÙwW4º†skŠå„ßµœ[è©ñ꯽{ká sI몡úµž™@ªP>øÃÀk¾uDãñÓ«µ§·ìì`8D,™tez*Šü¡nÒ|¶ h=“Ö¸PñZs0'mm(º‹2Òü¸<¶…Éòð2*3-4€Ÿ¬4I<Õ•®FćæÃ=TÄkˆ¶-ÊfѶâÅ¢¢Tñ ±‹ Vÿ rŠ‚¤ç; @¡ÎV×I$"—=FÁ*¶ÆüêT9Ci¥¶r798òà»Ò´9ºXæ^ún²Ý†Å8*%Ù!èmCHà{à¡Y ¹pT_'¦BˆòYYÎ}×0@ç Ï À¨-ÇùvÀµ¸n·Û)´8 c°rêüqm7ðQfþî‘ÔŒè^·ò½Ÿíí @Á¸÷1¼º´ Dìå"™Ž¸ÎüûTVÇRÖz ç'ËI>$7I ®«­ò•T•ë<ri¹®]“0Ë ª/‹(á{ï÷ù´Q†&:„PR×µª{,ð‘`œûG¾oˬÝãFVR–ñºH %†ŸŒÇ $ýÇŸß––…‡7¬qJåD)˲)Án–\ŸÉºI¤^–@£@Ih”˜‡”à™×¯)”†ò‹êÅHùxbezx€à(‡)tnÜÕgjÃ?5žãs·Ö8hõÒü{]„0Ú+ Å©7ÿ½bV¥¬1¢ÄÿOÌ ³%”à…Rx†O;è°8LðùËÀT¦~ý¾¢z>Ö˘ëÃSÞ"¢0Æ ~Á2ÿ*Î"a޳Äxfø5ËT®aoŽ+¸êM¤€Öüâ@ú”á!pÔrÑj³…—aLùFSää¾Ô€<Ðw㥤XäøüK©•Ø$[P-@ï Þ¼#€r[é`~™b%¬cô؀Ѻ˜¢"°“àA •ËBAÖ:ü5œâßN-dˆÓgsf §UÒ[çíb…'œNxZ}5¿_¹ÀfЇíGðª†$os "õEõg“ú“ß_ýø0ˆêE³x­ý"aík*˜-s¬´¯—¥4O'íóvÂôâñ­—bYZ!×ÿ·”ݧÛFÈB]¤·NÐv”¶^ªIؽ¢n²¥ŽΖ8`é`ÀG·™*$Éàâ"ÉèH¯“ ®»®±˜æž Qu¨çv®ÜàˆŒ42²d6‚¡ð)ZH Â=•µ¤ ×\KY˜åJK`³ü¦„^ƒ ´±…@_1”¥+Ë sÿÖw…·äSà˜‘Î¾:tÅp§d! ŽLG3:9ÖHÃya• þÑ?‡!cÝWæ€WÿÂâ«t ÞµŸTY,3Te¦»b¸F»Î‘“©Ò.ÒEDúMD‡Aj ƒ:ΰì$½K;e‡aÍ[áBÛñ|WåÀ\¤P;®O¿víiª´|‹¥„g äθ#<C)zÓ§©Ôp‡×^½xõ?4Ÿ´ endstream endobj 301 0 obj << /Length 2754 /Filter /FlateDecode >> stream xÚ½YK“ܶ¾ëWìMÜ* — Á—œJ•e[±]–²Ö•ƒì†ÄÌ0"Á ^ï¿O7ºÁ×PV¥RÉ @£ýøº|óøâámÞå~ž„ÉÝãéNHág"ºKEàQz÷XÞ}ð‡‹2åýoß?¼ £w”ù"KïbûZÿ¡Ñ÷‡0”^Ñš^›~ìqðÓÓ\eˆ¼Qàý1õÚµ¸AÍŒ}eÎÄ×é2êN›‚g•1í †ª54Zb.ÌÐÜ‹À롺†pt8åA?c:­ª«³i´|ºØJ qà º‹ýS÷aà}¼4îvÄǾ±ã†k\ÕY .áöðQ­,§®m¨g,×î^xú>̽߫ºcïèNHx§ƒb?ÓõÕ¬,ÒŒe•,,eºý+ƒ~Ý’1ö·û,ô£ù("ö|8ž”Þã¥êiÖµÓâ’ä à{"?¤±ŸI¸ÂØ^ÿÜœ:¿åbÁ/S?Næ!™,R?•¹cøco?Ϧþº£W²½5n)sºv:ÝWåȃS‡rV)–ø€áÒÖ% .tß«Ué=3KKm¹ú€¢fáD4D'Ú³æ'Pð‰sìâ)oF~$î^‡ÃIõÞo‡¾Œ&ùµW¼(9 3P²¦,TJT:¶[Þ|æMÛšúAáBnµ*.β?1_3¡c°a’A[¨ºkð7ð’’Hê4€£Úî >Œdè‰ÀVý~06™ ¯×ÿÙÞaþ O¥«óe˜–TÆ:îYíHþ‚#ߪ·=}˜¾nÁÅÞY]±¸xQîöºëi²h;°“kkJæg<ƒ)mJfjO4³M²í÷.ädPN€“xß¾{÷ÍÏ#úô$ 0^ ¡ fG7$Õ¡#p6Fä|¾Æ VtêY!.ì@rÝ;õ˜y¤2hkˆõØ輆h(DlaGk.8 Çn©«hroÍZÈÜÁŽ?ãÙç\#ü3×€žœ>1TæKq~¬ ŽÎR!ðe€1æF6½5ÞS(4òdcÇ”ýf ‰ãÈÚ(´X…Ôè&8PLTÔ, ##I©έҔ冔¦ ¯ƒï[ü óÌOæLs¹V‡r`’}°#ÚCK_–«Ô†7‘‹LG¦¥ýдF7×áÙ‚¶¥.LFoòŠdmÜ_ )ƒ‡F8Ò|ƒ©u8—°³àI¸åðž|`ëöÙñ‡T ‰c|é².¤-AGQS¨C­… ŽtîÁªÙfSáő<^¢M8a¸¸œ4}Z±›cÿ‡Š»>8åHŸ$™³>q¤y>-ѹ]!ÒhѬ5d`­awÖŽlÀïqkµf-‰}m|ͱ°,t7O!î‹t¥Á>-*H¬ŸiT´ %œvÔò7ÖI*ÇB݈r(Þm NÓ×Vý{¡áÒNQN«Ò•œ†Ë]=¨³6mSD€5ÃyäÙR j7QA¾)ý,áwŸ®.hò¯Z‡CÔ5%z@ü™* Î …ˆ©~èw¬îÆ—)ß(\§Áa˜QH×O!\KC{ÄïU==LËnêü0]×ùQ6Q`æ ŠL†w)©½´M,ÐÈÛòWÔgWè —f¥®dQeÈÒ¦/ó&H‡r¨s±Ù–Œ©@³y ¦ ïH¡¢ :ãu»MYaR2ìn 9gê¡{¢€‰‹â5ØFŸ(;(^z¢¶¡*rÇ›’;4^™rÀdâ+ENT«´g¢K•š¿^lñQ·`²%DíôP§¸ðŽ¡þ;åaÀAo1Êf<ìRÕV2-}®*Ñ; [Èt…82%}¶c½_>_q! 4¢ºÜЍӅžkh˜º¨úDS,ÆÈÛj‡ ?‰Õ KzaZn=Š´,èÝ”n=©,"OÊ mÇ#ùÙœº|öí.õ!ÅsÜUo^òI¡°)\ÅH¨µ[¾ymSÇvÄ5æD„Èöl=Ѩ\ãº>X`*Žœóœ¹zˆe.‰a¼,÷9µ‚–õ¬@l¸;yy^ï®)1{&¼µñÙÕ'· µ6R•ýš¨ÎÊ}·Ú¯?¦7>ÀÖ£êyäb?ªcZ¯UW\@.³·†Ú-i—[ ä¶\†ºr=½AK;ëW®•þ'Þ½²Ü‚pD.è?]{_ÒÄ”óýbO'øu;ßjS}´·;ˆQ¯Â£ŽäùH[¨Nܾ.!CqÑ O¸Ý“ðnû9Pá«=%|3>Éà][³lßTS¬úuœJ~ñy.ûï_meèi¸­îŸÎ}±#Vf^‰5v5E,¼¿é®teÞ·Æ\ºìÃW»/•"έ cqk ÀöÁmDC=8V¼{œÌ¢‚I+ªq.ůE¤kÉíÀD&7oØOG<5űÙ \³’IÊ/ÌÖÿUÃ$À‘Þ>7ÌïŠÁlBv…Yè¹ÒÚ²ŒdiΊÁŸŽnK=ççîQ•3Ü{óÃO»Oqïy‡+ à#ÿ‘É ºPŸÕFäÙÚx&ÝCj´cãö1óï][ ’ÀûQ 5w¿,Ti»Â{_T´A–ƒ’rï:è,DkOsX1‡ABuÐ$1ÛËÖúÙÝGH‰Æ2Gâå+9c–,VðÏDX>øÃÙ²úÜI? ±8K1&êªâY§sýùTíýŠ C?ަÇ,.S‡!Ðy÷ 9tÑz“MáÀf;)„>®Ê©W45¯\€ŒüÒ#ûËŽÄy¸ sîfC×z(öQ0;Jo ëá=˜!n–Å­+V¯ÿ«¯÷‹_X_º‡ÏEºd£N·û:šjzÃwÀíÖû@!ýP†7÷qš]=Õ„‰Ìÿ"ÿ÷¡ïI•ó[pfþìÈ“ãáØ\¦‹Ô­3Ù÷ ƒEôçŠ6š õÕõ û2`?ô)@í§ÑT§¶"Ìó¢µ)~gpk+±:ÑMÜ/Q4ŠgÎK@ÝVµSÈ <ÛÐ×˧e\Eo§#‰0 G ÈK"ÁùH–áÜ‹o_üÌ3_ endstream endobj 304 0 obj << /Length 2678 /Filter /FlateDecode >> stream xÚ½ÙŽÜ6ò}¾¢ßÒuË"©Y,àÄc`ƒÄ9<›—$š–zšI±÷ë·RÕØ@d±X$ë®êùêîæå%7y'2ÙÜ7©Ü¤" B•nîÊÍ/ÛïÏ£îÚa·—i¶ýºkÇ~'ÃmW׺}`àíñ¸á¶:ŒúÏŠAïª?.U{0³·—æ¾êw¿Ý}óòT‹³ÂÍ^ÆAe|Ô«ãh{•æÛ¾ª ·“ñ¶BH¶}¤3ôÃi¥è+”mÔF·;±­Ê»}FÛñTá]?¬ðÛÎ`µþÏNÀ %1vŒ0\0 Ûv:5C*x³2ož. ;§wÓAxe~{n_0¢Äe€AÇ̤ H7·w7ÜX 7b“© I“M’Ê Vjshn~ù-Ü”°öÍ& Tžm ³ÙÈ ÏrÕ›w7?Þ|…¢uNË’ Ib¢¤TÄG¶ped¤âiR°ÛǹÜÞ4ò> —/ƒ¹V"7>ðâ}Å@d?ŠÃx!ÆÐÝ Štd¸åœ9¹¢Q뇶©Úd«2¹½GÉ^Fƒ=2¶½^Q7Ý``Eýˆ2æ øÔ À™D.ïP‡oáñT´Óh„ç§iϯVV$üâR €kõÝÙ°³²’• ¨©ÆSWzt@&’LÀðú×0÷û HÂHxD—Ï2iÑûª¼×ø²æ†õDð¬ž83¢Ø3Odž‰2Üòþ /$ëÈpèz³ÈçË-øª=ÈþbÀ§®éêîa ÆäÌnim‡pï¡j‡ ªS¬¶çnÐø(4ƒ$g=P1/ú‡jdœÕËâ(´!‡\éÁÒÅa~oŒ þŒ¤@Ýþ\À« »8\:^Ú^•Êíã©êÍ,y·ïeD04S'Ljƒ¡Ç‚nSÈ£O•2 D<©,¨+ð8‘(Ed±ŠÖ§ý"T–.( ú¼‰Gí3°’höH„áD®½Pi ~aPÉC5‘DôŒ‚,™\Ü«òßtRF>ëAðl=R*Ç‘á*š~‹ÃI“r.·†è«þ5 åç®Ò UGiålé[%ôIMk¨*Ÿs‘ˆÒg%Å $´Èx|Ôû%%ÃÁ z…ÁRˆ=È7—ñtü´ 9}}‹âW:)Õ;²,™‚4 ¦w2GÀp62X\\˜9ÁE&ì¶Î–!åèðÜt]í!§ù= ¬ðšd$ˆQ˜ÛfùÚ{=‡¯ á¦%ˆSx6žúj8uuÉÓ§e&@a²š.}B —qÀ-ʆi8£;_šØß¶yÐW‡®ˆZVå—züƒ89uœXwËU›˜!"xz”»Aƒ´Q–ÙŠúRŒSÆxê0$?ò¤!™N<»dsEG¡D yP.\ñ›µÌ-óàÕp’WA¥LÆW*Úv­ÏF"¤02tïvóyÄa Êtä/90ë*hðÁm„¹“ÈÚ0 pôœ4`…£ËPY­2Ħ$Ë%ìÑQTúH,S.bÑ>…ˆù}‹Éìî«bÀóñeüž4˜Õ0'VíÈ hlø-;^I b¿£]¡÷R®´€6Å{ݘ„ܬœ*ßýW^õlöš/'?I+øVüš'ôF庲ª_˜wÒV÷¦,–‘¿Àéã¥æñœç`´<á(‚ç,ˆ>­nq@òp¥ms[W‰•šbÓß=N"…h8!¼÷ˆ á…q0¹üÛ÷çZôX˜2•»÷ÅDB\zNL\ó Òk‡QL¿ó½>X>ûüì¹çË=ßa Wb )T^,²ä*„ºwŽ5gD½Ä(Ÿ __ztÿÜwc¥[wù ã…ôè¦Y!”߯éqx9W =MáÂÉu[$Ò® ©ø³j*e±U±«ª*LÖÕ ¸Õ¨jâìÃÔþT?ÁÊT?…˜ &^½= ýY^v„l-/=¡FÓÕU Q¢ÃšH© j£öaU0¸`*6ʽ#SÒÓ²I¯Vì\YÀs5[¤s©ÂõÆ'Ë7 é—h”Ù=ÕèŸÜˆþ¡×`MðØáù^ó?ÑQ(ž+66nIÛ5šÚ,ÑÂÇÀ–Å{ÌêÜî#Ÿ¤°óuiÙwHÓx&`»lg‘ÙóÉ¥*à4¹0€€™N£2Œo{_Üëš‹JDZös|¬FÝ#õU%f³ìz šnôûñBWøkmN:œj.¼1hÙÃm…ånà$´gèä :†îª…8s±)Ñ’È[X¦…´~ãjsÛ—9Ô•Æ&KŽ ]ò–Ü?½}eÀ­¾~ûŠ‚rSXà¾XntMê 8š4<7 a„ðêšËZÖGØ×M‹çÙe^›j*œPïp–áÈ0­4wíYå*qY¹ý+¡]›—A$iÓù‰ŠWåAN®îu×~ Èr.>qª g Ê|ê¢Òlr¡±¸çª °GMµts® æ½9…Ÿƒî~àRÙð¨dð±ç„JÏU.¶ÅÑZÄ> ƒLf+"U¦–­$˜9|…ÂзèGœëþ>NÆaé¥Eý×`Î(øó­ÙG“¿ þ:F“EüƒÂgTÊ'2Û÷…ãh0›&LV¦É œ,¢Ÿ‚Üñ|tz5(ü_=óíþOõÅÄ„¯!»ï ÛÐü¸¯¾eÆž+ŽæFwÝl›ÀW~%Ž~enGëb<€a©‡U¢É£æûL.Ú~÷îgP™ôDÊj¢JÕög k÷z…ëñcÎN*)Z“>½ás¹áÒ A§qo«$“ÓõUåïR0‹Ú²k|5Ì`ÒòºàG?áA > stream xÚåZësÜ6ÿî¿b?jg¼ _¥Þc&iœ^:y]íÜô®íy—kkª•6+mSß_Aêµt“4ïfî‹—!ˆðÈO®Î=“b‘Çy*ÒÅÕvÁ…Œ©š³˜ÁïÕfñC´Z]üòbùÓÕ·žq>b:Nuº`ÄõgâPéˆCÇZež¡ˆHàm¹gø+19ÞpøõKӵ˕”:ên Zóîhêµ›U¦¾éni\ÖŽ£Ü-9‹ŽUÑ•Mí/:¥‘i»rWtf.·jÖ#þ}q@ÅÎtæ@$Š†Ý­8ó$¡]n—’E ° Eÿ(á‰ë’&?2&*+g«_–"‰ŠêoçIƒ`¥¢§Æ (ŽUG|eK¿‚±˜4±Ø*Ñq’æ°‡,VL {²XëL<´ÅDÆI³" ·»¶j€…fKtoIÇæÃß¹ù•̇«#óM^2˜ÉSóLæŒiÕüàæS±PâÄ|Û à’X%ÉÃ.õÀH'€KG€KàÒàÒpÉp#¹cÀ¥§€ÎâÃh{F“÷hâ°ù}†â÷*‰%è– %Cq–&?d§üÿ fhÂSŒý!F»],ι:EW2šˆÓL}´Õ~ ˆPqžñO´Zâ®;(ÊŠF»¢u‹[ÒêÚ)¹úÅ€ÔѰ¬'’NQH‹…ctüþ‘A“ѵ· YÓô¡ðìjøi¦…DDmË QÊX¯ÝÑk8‡{ùë=£µûN²Xdz±ûæyâ} n"U%vRy¬¹ô–ºZr¬(;‰jzC³ÝºÓ[åÁ`g§íº9¸Ìšvtª¨ë²hÍÆsîöM["kðÌŠÏýù_Oä"æúùqÛ¢î‹Ð|*óΦ¼‚úmWTD›„'•QxBÞâpC°PΩx·í7GÇÚšâ°¾µ®«¬—„îI³$û²§ŸH8G×P#»ŽÏ½Ç­ÃXÖo΋® 66ßž ko«áž…Cç'Eµvض :'2áu€¡žy)’£µ‚žYA;+è±Ð ûbªbœd.›fòG 7¢ÿ%” ;—‚år$‘?J jÒÄ.»‘P–Ë+ŸµI—ÄÙà’–'è’) 7ë’˜7õ.IJpGŸº$¹bweʧ®h• së’`Ù‚’¼âT½±QÊ*PÎ<Ôrœz¨„Œ=ÙÈCiäž{%Šö{ð†elÀ[÷poú`ÚûüÁìç e}㦽mª»„BÎâ,×óŒð° 98\–?d·ǔ¹÷çÜë¶;á<™*ÖoLmœþGz_Bú¸=2¸3uòeO3÷V%dd!Gœu憲ȹØ4–ÃÎ>(÷/$²ÃUšËèù6d:«OˆM¿Ït|Ü+ †`áâƒøîo5vN¸• ˆÎg¸=rŒR+™BÎß5ëÛR¾5Îå,7l‰é}YU´|mˆ¨94›ãº¼Æ`W™?!‚| A±éÓµìÀïæ‚nJ;>€.I9‡÷µüõ9!TAkiEð6‹S%GƲûcxÉ‚QXÁ ð&r6½Na}†7dñ²0ˆØ0ãâp]vÄ\pú²ºƒ‹ÜûP³ÖÒ9T ÙÌÐcÛ ­Nm‹D2 Ž(HSì¿#Òö`÷¯1~àÛ5Íl•qB¥Aùت¼ý`ä¼Àæó"ºò ›Qb²¿ñáÚ'üJ£±VqÂÓyºñnkoâT3¡3…Ôÿã ñös³Ž§f]˜õ+ºÚ:?r¤²Þ»À.8“q¦µ©Ÿ7ðž]\½;Ã=°_H–Ü!Ÿ’±®wg?üÄXÕÆ2Ïï-çnåN†G«—g?{‚½ÞÉK%Ô©&Q,I½9ÞÙ>— œk-aAg¢ß!÷M¢°5 tC:üÑí«û¬!>:D‚+fBG×k³ïÐÍpŸCf³á°çéLÞ×`²Çj}½½®ŽWk?[f,z|IUâãsâ¸xùäÅ9­cê'Eý3ÎR=}úä[”éøÞÖå›CÓ¹ÅK€3:ôÏ™ìÍFV”syñââûx¢ÔûÝ=Å3²þc×l b_w³Ôhnµi๜–îK” $kuÍî·¡)-œšàö¾àÂÝf0¸šyg¢¿ ( ¡RA®˜@I4\ŸK¦ã,SV”V²‡åæ:IeÕ8­pg¡ß€¤€ËTY+L$$•JGÄ}ŽšÊ\zgŸ`å*y,­£›÷”˜PJÛ~š9(q8€R15%. ÄÅ (¡BtdÊx€;€Ëä—Iç,™ãr½?†?æqž=è·<󇙥OÚµ¬îÛUe*¢¼ÇyC‰ÉÏhz„Ù¢®Ø´nÒ„’lH¢R&°²±ùžÜÑ©FéÐ9QþöòåÅw4lA)ð—&Ým99 ø?OãTæóÚõ'g-éôô¯ß¼¥6$[Z+;"‘ïµ4±ý6øõÛ€uW¬oËÚ½cE?®ÞFA}ûI R;—Ç'Øz»õk¹+ÿO/È„î³c‹ëÜ¥›ð;ÚDˆg”Ê–UáÊb„’emÚÖ"‡+wdWQ^g[!Ç€±ü²~‘C’×3Ü–7Ô§ãÊ÷é¸/.€4±æH“³û¸( ƒËg]Ä‘^´îm¯Sƒ´Ã—Žª²ë<[¹%ž¾~DâÐÙñFYáÇŽ&Î:4ÙK_\¤uÿkÇGQO[7§­Ìš·§ ~Ïo‡O2úç’+ûž@¤]Û·ˆZµ Žlª;4‘ LHžtE`ÅžäŽÆ­sËè%šÚª¼<4õÎÔ-ö…úy¯j«ŸSÏøNÞ_’ø“"aiÌ  ¸Ô3–N‘@‘À˜¶¢RNo}…qàÔ'E ¡†`åz :ÀNU|Eñ(…{hï>¥yÔÓêêŽ(÷¡˜¬{‹y@"i‰%$Ä¿}YÙš¶?eùÞ¼¾|þ=‡(ôö¸ï›{Á;˜¶-§ôˆùœÍc1$^ƒ[#_Ù[ïÑH¼Žç¤\SÓ¨óŸˆlbÌö#®N$~ßÓ­ºrçžú³0µ•¹-;ÇÔ„ÿm¡ÌóOJˆ#ßú,Ú{¾%IKÁçÙAÛÁEÊ4‰ÛùÉ3ÿ6ÞRÛÍÅŽâ¾ââË7ω²+ÚίnÕkôЂc}µ\¥??Úk.¶çƒý9kc–$6và‚©_ó[\-›á¤©š=‰ÕN ¾®­m8ìk̦ýùÒ¾;RÓÑ…v¥±M‘-pìYÂZøÃ‰Õ]\fhGÏÍ}il!aóòù7_¿~u…“¼ä¦¦:©‹£ X½»G¤+q >¹âÞÖJž’èfsýU(xAÉUŸ1áCÀIGñÃû“~c¡–ÅGR¸5ÓÌ‹n|Ék (˜$ßP´ (ÚG$ÿ]Ë:ÅÁ(8e7ø5ºwׂò‰ö¦¨0¿ß ¸xOþù !ˆx¾ÃŽš¯(ݯC ûm¤à:T î&Vp+Û>¡™ö”2éFÙaO}'/\Gæ£[`¥Aeƒðµ÷XÁaK¿ƒü\Ú*c•f³¾ßmšzðh2‹¹³EÎü=ûH©>M endstream endobj 311 0 obj << /Length 2150 /Filter /FlateDecode >> stream xÚ½YKܸ¾Ï¯è£pÓ$õF‚6¼Æ&ØÉ"ñääõ-q¦•Ñ£-R;;ùõ©bQj©‡¶1âSSÅR©^üªŠýööêõû,Û ÁÊ4•»Û»].w¹àŒÇùî¶Þ}Œ:õ ]§Çúpýéöo¯ßÇrÍ^H&e¾ãļ¿Þ˼ˆ×’GSÓÖô¨èçç››Ÿþéš^×{Á£'"Ôʪƒ2šž~ã\¶~}7¢°¡Ûˆ2úó¤ûjË>kW²2“*·÷ÚíeÊò¤ ?<õÃÉ4ùAïÍÞb,~s68ÉV"ó˜%q2Ûûq8ÙfèÍ'âbř˅óÏ!Yðárf“ÖvlDɂ奜9ÿBV‡$Š‚Él‰†÷r ^þ¢è„3‘–gÑ'J^²\¦»}œ°"óiñN›jlœõ/v¤Œ×Æg,Ë÷@8@OMF×´²ýV£VVÓZÑÏÊ."Ìù‚ë»s%æræ~÷÷7´8'Íê‘FìzŸˆ8º=ÎJ|U~§®Ï}©¶¢¼Ú{óöî¨dd¤S¨Œ¬ïµÅõ:ïqçE£g;jâñ”`€«£ß†6,Q@ªœ3 §<÷~\²˜Ç3 H’ gÉ‹™¦¿ˆ‘9Ëòl檵3@M­ ,YÆWén-È4!Ý &ÊEhÓ‡òœ³Bfß¶2ci¼Xù <'2ð+ŹŒžÝÖ~íc3Óý±}¢Æpس¼ôALIŠà{ “C·8TUé>`¦Üqj=6öHû¦SmKËv0†¶‡;¿©{ÓØæ÷Æ>ÞO!³úêØ9L£ãó4†ÿÆSN¹Š|¶Ç¡&¡Geæ—µ£QÕ?,~å÷k ÏíñZm¬®_Ígwm!¡·õH{¦Çmœ%àz­;3ÎÏ7te<•—Bjœ4™Ótº·ªe`‰$ ß"ͯ±NÓâžÀ©’1Ëgu÷Ç@äE°¶$ÈϺ=ý‰49yz»)(OÖwô<ê®ékÔŸO­†®S½·¶mzï„ɨ{¿\vÕì)…žp¾WM«œoçÒæ‹Å6¼‚®Lð*­½s–‹Ô{ÅcÍ~ßôw®r޲!à/¾¸<…D°²¥c…”-_xc êžð=Ÿ¦p]v¤!’VeÈ«žö–žv\ò§Ez^p¼¶VJÉ8§ï5W~ÍÜÜÕ¿Sá´æÑ›k(a•>Ñ!y®ëbIÕNµ¨µ—‰d)61ë3J@k¬ 24gÌ{.1e™Xކî(%¿ §|± {ÝTÿÆs)ò ªëÿC¹TäSå3SßœÆÁ†Ôá,9'þ7;T衇ãÐvqI²D¾X܉"×…ý]$ù‹%)" °ç+!{Yd•žKƒ~g‹Û)³ô|20¯3ì–ð,ɦè;‚ï¬÷²ŒáÀۼŮΡâd‡Z[]y&Àvÿâ(oðwáZ7o¡¶š/’\ðð@ÄÕO·WŸ¯¶øNÀ$ðšpÁ”úª»úø‰ïjØ„ºù_ìk QY Ú݇«\½ÅÉiÛzA†¦`gÂ9+A”ûl«û{{ €I,Y–~†> 4Ë—Âï[‡•yî5Â(&sºiyež­F°B|Ò}mhcðr="HÁXª¡Se§Ñ¿YA¤î`Fy ¾¿!X×¼"úã±©Ž¡†dïUßüí±]+i€×Q`¦`÷59ŒKuú47éÀ„Ùƒ¿ÔP—›A˜Ñ1H˜í _ ž, [ÊòÅÕäŠÞFÄ++dôËÐߣÉ^_ߦr˜rãlë3¯û>‰%ô¢ØŒ$q TU "R\wê 3)è†v°Ï<èJMXq—B[!J¥N뚨ê0`׈ZUG"‚–®ÍsdC—ñ=A[ÜPz¢Ý´FûÃêìy1;eØÇC9oiI©Œô !Áµû ª¯ã-¢›ÉQ@ë†QÏcêi• é7—Q¨ä:Ç9„Œè»íîÀ/ph €ÇÆÿš“Öuµrá†)‚­¹¹Ý@- §»8ÆÛˆø»P Ç2™8Q2N|w1êÏ¡´,-ʇY¦;ÌÈ?ðˆÃ„6ÒŒåc"3Õ¨'„É0½LJ…G7Øsˆ¿ âø×/ ¿ÒšV$Ü+Ý* ÙÎB'šàýöÉOÇKNø¢c!/ @ÒRíðÁIÆÅŸðiiƒÉ°<É£—µNÀèx­UF]ÜàóñM!í¤Cù;«òùI És«<¿²Ü¢¸×S>õ0Ö~]Z ó.Ì~®øÌ xìM¡gÛ:R÷x‡€H•ûK,¬ƒÝñäÑ__ÿJ×:óÞÁo(ÿ8X à­©éDW0O8ž_Îqut½‘G…ñf26ø©ÓdC…×÷]òK]V‹K¼: ¸Ö÷ÌaèJ[fÐÌù÷BW*'*)üÅ#† ï•u¿²òâáO)wNî>¥Œ×#.n¢Æáæ®mÜ ®Q†•ïNÏíÂ{KІLM/ÿ¯‡Vp–eËèÓÁY¥jªµÚÂ[®­Š"zãw;g,¦io$“b‹Ÿ.“‹rù?Á’¨ó5)ìQ«ä«^!äåsUp×&Èã«üJfíð)´S8 ñyU-ž}•zIü< ‡k!ŠÕ¿£t‰âRFïÖç8á µUð›rÏñ‹G:$^&ÒêkhVi í-ŒÖ­¬ßòÐé6§ƒ± TV­'`7Ò·éñâÝœg,8n08»±*Í¡eÄWŠùŒÿŒ¡å endstream endobj 314 0 obj << /Length 2654 /Filter /FlateDecode >> stream xÚÅZKÜ6¾ûWÌÍ=€ÅI=±ÁÞuŒdØÀznIlI=¢–:Mɳ“_¿U,’z´fÆAâñI_b½¾úŠÝÿº}uó>I®8gy‹«ÛÃU*®R²P¦W·åÕÏ»®>«óõ¯·ÿ¹y/Å|f”0™ˆ«æ×H³®ÔùZ„»âš‡»šúÞ}x{óßoéå÷±:7•¦…³îTÓéÁu\®Ð¬éŠŠÞJ5¨½Ò•?QÎòD$x Àž(1K£ŒÎõé¡ëOºÑ8κ›Ë%³"ÁÂÔ‹ösš¾Ó¿ÒLÎç39“"r3¿ÛØ+…ïånJÈp÷ðKŠ¶ÚØQ¦,R·àŸ$õÖÆ¡xü~@ÝõgX¼¥< ˜ägöu“{›O¡,¦1<œšBµí½:9Ô8€}‡ªª4ÇÑîC?ØA‡ O /TH¾ÀÓþV÷íqã´A$8xF´ÔèJE6ɧö!ìè‰)Lvž£*- Oô4aˆ#&c` DèìXWmïUÌ;?€ª”t¸ï]°¤¹AhÌÂìŽRÉ"ú+2€KÅA‹…¸~}^‹×—;ÇÉÜ}¾"/8Ánoù:xM EÍRéšZE­€ÁOÏÖϱ¿éèy_7…›j²Ñæ"9‹Ó|é‡Vÿà9©g>Óaß”ép¤é(AÀÀ}Ó¶Ô¹·ËÏ•*©çpîÔ§¶r–Nzùî¹ü­‡r;•rFü)@ v©9Ùƒ"Mòg5ÁîÌD¿yî4CXŠùÑ€Öt~'¯ÝçªÉC©ˆBEr©ò¢?<Æ0=÷ã]½Mš’Œ?§¢ü¯«è‚%@Bíúηï‡Iï~<¸#Û³/¸¼–+&œ |²É-.ÃàIiÛ™í>7›Î‘H£±—‘<[IŽÒ]¦'!™Èä—f'À{¨$²hIšÁ›¤ºƒ¯ N›´i¨zjs¢¹6¹(‰¬²Ól:ÎB4PÈä…Á°ƒ{_ôÝ€Õ†•‡*Ÿw¤Ë;2ÍÖÔí f7‰’mY'YEòؼ”Guäôp`ž©…±ËÍ™%L¤ñ2ª_ÐS…ñšBÚfó{t(ÛQ^[:V?½o0ú„u'â`õi,õ;¼Ÿß,ÐH?]hö"£±3-ÃG2º³|!›±jƒœ%d\™YŽ!Hããyd%—K@(пô!-¢À(™ ¦?b,I0å i$L¥gëÈôâ2.žÞÆ‘±ÄB?üô“¡Ë˜ôih^…ÀJWnM6 Ë ¨XàŽÉP³­Œ·„Åq¿<ƒã[ ðÃ\ºs%­{•caü`é„Þ¹é<:zâk– 7?yç!÷drV†@5ñV‚µÞ¬Al·¾ñ |¹töÛÚ2_ból£à”FñYVX$W–¤˜8ôT+ÛÕãQu.eü‚¢ u[’§¬öëCÕQSÛÍ>_Çûv èGM,´Éwj˜©ŒÛ°ŸmØOŽ›b…õfQD[ç£(cÈûgR>¾àNæ©é©Üœ¦ÃZ,º6ªD)XÎÌ3ìñí#&â€ÑþN’܉>¤*ÈH_Ù#8³˜cu‹ciÔ„+´Òöت3u\˜PÆ‘«gB˜¶›ø;ESž­*íJéÆA©C_Ôž'¢QôˆzrβIà ßŠ7Áø¥N¨l{ü½v©£lÎP/"Æ–Ÿ+-ÒÞ8L)Ú±œM?Ó~¾§ñ—Û 9*x w·ç Ô¶Ðûù†®Ú–mÞÕ† qfïj­³}¤ûi£Û)¨'ʪmŽÍP•ÖF‚O·a¸Ë náþÂJá~’€Æ©:¾p‚÷)JI´tƒùÛX,³ÖéáäÒHÝû¶¿#R¶ªÏ–׸Ä?Æ®Ü4!ølšåk–u|ÒŽIÎóÍì(i !YÙûµ Úº*Ù²Πê*!ÛÕ††B¯7œÌ[ŽÿÜ\¸ßP¬Œ%“I<Q[åÚîF<ÉQeÈät‘3ñöÅ]¾‹ iï9Þ5!ZÚ T°ƒ~Ä óè›EjnÁ0Ϧ€Ë)/ç™ûy1·™07œzÝXº =$µ'žçö·iìûâÕeˆt¹±SÝsÔÕalÑ䡜¯Ïv†}þOü Š §4ÝV07%䨆’K ydðŽh—„¥&mAgÝÜÕÔ2‡¦&¬qèÅ—ѯÔÐkʳ©îÛÏþ†U“&É¿[u:ÙQŸqS{²þ]³læ{չ꼫A4=Î.Óˆ¥<^{ؼ4^&¯Eiüõ}ëÇ­2&Ãü‹`ø[þr°btz ×þòÊ\ZXdª#€j£¢bÒÜ|PG4U–.ï„,¥ØºAÏXο2µ[ìÀ¦ß—D”^±`!·‘ɾúþöÕÿEv' endstream endobj 317 0 obj << /Length 2674 /Filter /FlateDecode >> stream xÚ½YK“Û¸¾Ï¯PN‘ª,šx$+¯Z;öfS•¤+§Ý=p(ŒÄZŠÔŠTÆóïÓn@¤„±'Ù‹4  Ñ¯¡w›»·•\”Ii¤YlBIYæ‹\¤IªòÅf»ø~¹^Wu½úqóç·¥š0+‘¤©Z¤ÄõÏÁ®ÖJÉ%0Ûahún ~Ó £­¶ØËþˆ]u°aœ¾ãž*"÷y<žÇ7ÐÑfù¸·'¿ÄJ¦Ë­d¶¬š¶ºÇ^kiÊÃJ¥ËþD|ÇSÿCšÊ–‚íÃN×B$e–ÑŽ«nû9e^,ûóÙv°ñ•È– v¦™µÊ£ P$:•^3]_µML7ÄͺùÛ¡Wk­R+½„i»î`;¦¶AeÔy8õâbvÅ:Aé$Y­ ‘.7ûf †ºâÉ»ÐO¶Û'šp²Ûsm/ËG4A2IN­}{>ØgU‘‰¤È³[UŒnÊçñ1¢žã¥kÒIêuÖv»qOm4üÚªfJÛtÌçT1ÈÚÁi^;¹(@;<¾µÎ,ªsËK:­Á·ò¢ÃfüºB¦1MÕûê„ ®êўЀ¥Y-š›Ìi‡ 4XU‚Á6¸wdÙÛö8“³m m›áØV¸­§¦Ûѹ ú AbÝÚªÃËtsâšpQ‡¦«ZÞØólˆ¶Œ âÅÚm3ö§7ˆç8þÞacÉÀsîê .”HÕig™/øu·v¨iBs$ F*jâyW2*ÉÒüÚ~®¬Gˆ©;é$—Þx~K ÚLò$×Áݺˆ„,ÉTé~1P~üVÁ ŽIÆÇ¤_¯²t‰z7)&Žyvm²)'¥lH2¥~åC‰Dé°ÆñÂÞÈxÝ~;öøuVJò¤Ï| ÓµLMRÈlîà6Ñ+)„N¥_ ‰ÎZ2—÷}VÆØ·­s$þÃ]tN—c mö';ìûv;D v/uRœ¶x¾óæ˜0ßõk\¸o©ÃþŠÍ}32G…9§‹8»%’ó,ø†ð mŸo¸“¥Î„°C&tá¹qed"M¸Rp Jn0#–dÒ¤HÃí¢ScF¤(p%X*°%y‘»¥K=|Q~~ªÃfà0"¡«×yš(£çWÿ'ÒÜé dmÝO¸†Sš:OœuÇjl†±©«– T!D£š… ?¬)Û·g¶qeb&ÄF&e’–¼¥õ‡˜ãÉ$W_ &áØŸ#"ÐÊÄKƒÉÄ1dO¢iVNp‡zl0|`ËEcøNNN3 AEÎTÊ$ßj¶¥Ù¡~‘Q$ª¯«–™„³dN6 4xô†•‚XÛ@¢‡T^$åP ’eqhnˆã¾B :sÙRj=Á‹–Lrçó´ÌÀÅï{ç½À(RšH;iÒb÷ØÍØ€8›¶¥Á{fºÀä‚+ŽÁ%c˜EÃiJ ‹åÐÓè“ }gšCy¨ƒb5Š'˜”û#5²8‚éúfà&FÎÓu³ebÀÈØáÅOƒmYNã¿!Ë9_¶UÛ>Mx.½ëÒº¾J'Š\ÿržø]¨D=ü†”@(L¨ øÂvGß©2“bRÚËiêçN2û9¶'~Ž]òslU1Èvß0ØêÞÇÒ¨ßC(Ô¥y±ËÅÝþ6p¼®ÛÇàAiBŸ‡ÎLÙf¿ëj—¶ÎC@œÿ 2€é~ªJ³(À¾K_Ø 7õH•›ef×–°#òD) fó• Áޝ I(¥†-ë:pî†-Þt_ŒLZ"ti›K•Œ#¶ëÏ»}œ»ÁÍn½,WXÁ·â¯wät5,žËX 8 7}†ó=þÈ}[\9‡›êÏÝüHg9N‹œéP‘úgð¡n‘Âx ?H©…?æ3ú#„q/_ØÜ€VvQÏTÒæ’|%µ÷îé«Í[‹Öe¢ÏÐÈTC$€ã´Î~¹8èžj$ä^—jÔ5È€h°) å×0Fñå`#ŠìÅ%Ïs•_P ƒ2‹û§Ò&ÑJýOh`­2 >*çxä•t&™(fž:E±S59úÄS'¿{òÀvꨎ± ÿò"åiçî%ŽA”H¤.^ŠAþÒom»ÀÃ( õÓ°m¦Àò«˜äý™ÂÕÙü ºÛj¬î« ÅrãŠý Ç,rvÌ9ÛôÉ~² ˜ÌŠù;ˆ». Ò“ë|\- 9ªÈ£dÚT©ŠÌo…G!ЇØ2SK<É–ª/wA@š¿ áú-Kµ¶¯TJ™åf%ðJh'sï¾ÙóýùjÏgš)JKTÿyIB2z¯ÉÔeJu„IG…ø:9&b‡o¿yC¡tóËÿ¶ÿúž`¶ixl}é–”š”&~~×£’úî7ø'ÙÒ]lçï±qÀ8 &¤ô凗[ËW|Y„¸±?èa¸i·±G¡4Éep|ú«Å{Z6| ”¨JëZÎõ315°bT·É§ÿ†HcÂ#_4`ìarWçn¬nm?Ri CôJg©¥·cc®j<ä ¡F÷.ô\äb„oYØúšàž™€…X´%fR¼ø濊˜kmÒDfb7!àUux‚B-y*S‰ y4Z™—Žÿÿ€tþWã,ú?Ÿôs@Å+'}ÜJ±÷º»·–“ø}ÛøÒá_/"ä!zBËÙâô ¥žÅø¼¸)#Y©P‰„œN…„öʪé½öîÃæîç;<[º€]ðOG½FU‹úp÷ýéb ƒ¥ðÆÅ£c=,$¨Ü.>ÝýýîÝíÿÀ`gt„¢ŒáewULwPèäùüOà’³¸*Ëå·ßÃâ®2GÏnÇ°ä …Ì>ö•Å,öÁˆ¯S¹N¹Lëé;Xœ©§ùßñÿ1žfSÄÝ›RÞ@%îÎc®jxã+tØÙŽ‘½³$A2 õ¹›ÛÓœ{ëeq õuìAhúw9·#ŒŽ³Í¨Òz”€>?ö7nCÀ°‡{Hâû戙$O§ÿš—\:T‡cÈû*˸|(—daL¦\}§œ@Œ‚äÁ™ŠÿÔï˜ÌÙÍùQAè> Îþ`™™ŠË 6>/r?2=1öêz<Ëcݪ{  û9¿þâó‘©ì7þ]Zýi•ßppÉI¹¢Ñÿ©a&Ð,Çâ ¥…ilòòjð¿Ûæ@ÿ|˜«z-ì‚ß s÷qíDÍK·Èq¼q„˜²Àå´´áJ(†¶¥ò!äß?Ê¿¿ endstream endobj 320 0 obj << /Length 2821 /Filter /FlateDecode >> stream xÚÝÙŽÜÆñ}¿b^p EvóÆAI–’°¢XçÁö‡Ó3ÈdxxµŸºšÇ,Wrb?Á>LwUuõQwq_ÞÝ<£Õ&ó³D%›»ã&Ô±Åé& ?Ðéæî°ùÁÛn‹¡¿ýéî››×w7oÂMá&ŒS?ÑÑ* -ê›~ 6@~³ |í6÷DZo”Ÿí2U›÷7ÿ¸yùxÛ$ð¥—Û6îùü Àg”™¯ÓXÉ?;s»ÕJ{ý™‘÷ö~ â ±e'`¸€=2z_öŒè ÛŽ³-§¤.óÄfù—,q£% ô3–Ì-!]ZLûÛÐ{d QäݽüÜRg 0¨åéccHGcHÑžÉJ>A:±òíš2-´:LÐjºò`ZÒíPtà{ÿ¬¼€pŠ 0Rì9®bíEÎ+ú ”“~óB‘¨,¿Ò›)5äœ÷L]v«îgO,Ýk¼¢ùvŸ`çÔ¡7IB&ÁS#{‘¼¾Td`øÆñŽ5°_OÁðì¿'P²0ð`—KU ¯\ãþlo¢kÛç¤c<ÇŸikàû²?Ïé¨Ä{›Ù29d‰rF0ðæÁüm2–7þîe ~ˆB*•‰£ÍD k޵=åMÙÕ«~(#÷w‰xƒ¿_z°QøWà²[t¿¶ªøÞ©sè0xQ¦2mÞõ®¼ 4+¥b?v¼Í_¿ýöõwô'§`ò¶)áL‹‹pÎìÉȳ –&"ù%j¶àx.Œþ1TÕÃ"Â^ä8„i&®…6,@–pŸíû÷ß_­‹T' {ŽÔß—€Ø—u£HÖG:óÞ°êÞ£TóV°s>àuv*óîhàÚ®¿"$^`j3æ0`5‚ z ÷¯­cÚÝZ2™²†—‹ŠÕŒE•;Bâ<&îZ,Ž®/±âe—^%Ràõª“õgпmši¼&Jñ´ÑuVFü³/sAÍ®¯0 ƒÞ£¬‰ÈôìÑÐ@@Ò$.ô0ѹoC¸wÞžL/ÜÙ‡áè’wãa*‡4kFe£LHIŠ£]Š£–*+ —ÕPh8£¢UBÐ û›‚£'LÉäqH$W@æÅÆ‹¶[Æl—²ÂCÓ—øRÅlWIÿôR.+˜»Ž]–NóJÜÏ_溓#ù#ùưï+ˆ~§‘ãÌ ‰ÿä€qn s°akêY¸phYFaûà ½“ ®;¶¶^»” ›£(¾BûM½b<ºÌét*›…{Œv :XÓ]ùç|ZÀiM&±·“X¤å½ÞÒEòjX€­,Ì«òÔÔ µ9’£ã,RÜŸËâ, ÚU]<>KìÕ _’ät¶2UR‰‰œ“ÎTi-¤ÚOÒŒœth—Öù§_ñB«Ð%‡lVŸÝ³Æ äÈ*‘À¿“–TRé˜oË,ƒñ)À#²À%ûvy Ø/ÌW9‡ ?¤ðˆ“ä¥á؇!ü‹J½òÂl0 ç$ìa rä_v8 e²Î|LS—`B¡ñ·†É Н!ypYhWd£R¬÷à—s]ÃÍËŠŠ];2|Ǽ àPá(;àÄY(Kù»ºré(9x¢Ïx^ÓØQ9fÏ0zì0c" àÈÅ$/ŸxÜ~ˆ5NÙÆˆ|R"œ’13r]¡)º½u= ·»xíço Rš½`’ÁÓŒ×~R±¡ÒÒãÎÏ\6kÙ>Z-T¦yR<Ú¸·%æÂ‡Þ=ÊKv‹|f-š¸Î2—2vR ýT-…â( ÝÊŽ!r?¿œmq°BUg$ìLCyyÙ?8GSSm~QÔÕ9RåüS¡ð°`c™ù¤îbÌa½8M®kã7!“‚òÎä _ôO+‚O!åÌÁ§”Ì£^üy­ŽýQ#Þ“Mï\• ƒw“£w˜©¬…éT·ÌW‘|q0 @0£¥L»HfCt–)ÛZI!ÇÒb™ÿbQ¿™—IK™·x:©È|ÕXu,žƒ g¦&Ø­pK–j’r~¿ &Aø_<£þÿyÆGÅ×oðœ¡ÙÆë¯™øÄß«çl,¥-+ñ€ÉŸH£"(K%jµ«Œ®JV,pB¬ KAÎ\wDöÌu#þÊuG:òö8zƹœ  ÞŽrAåk†‹.Ÿ/?#*Õ#ñó˜£%)döàJén!Í‘iØ÷R%*Þ=!8S¼8¹ƒÜË5§" ,57ŒlÃXL9»¡8¯VçÄMSûdÝš‹éç}­HOéšPœ€1žµ IøÔ‘G½xœw<ÏyZ›zÏY]#\ ƒì ¿‡–&‚%<"÷éžjŒ«,‚ü ŸåÐÚË4ªYb6Z ÈS;ôLÉÚŸÅ¢-ºÊ—UU¾µŒ«AØ`Fªe}Œ¶×—5Têh I#¿ûf<ó¸ñÙäÈõ燵SV6?ü-½#µóÄõ½Gk<>¬´öªË9ß›þ˼;n“áea dõ{ú\€þá"(Ê0‚±¥r¾´ByÈû|Ÿw‚Dûýúí ^B&ÀïÞ¾Ú1à>m9ôJ`ì ‰ pï>!ã™ ¹ÎNg<¢ýÀJ‡ìú«c‚Šl×¼ÝÜß(¾]N•Ç"ê%‰Ÿdé/œ`}‡ýZøMýPï>=S’‰`/lêÞž ^HNŠ¿RÞ•Ê!èãySAeUæôXc›;.cœ@[y7 2Èæð›°|ô#Þs7T5󡆺òÑõ¾< ”[ªT»O'ÊIÛ]qE.sYñ 5h–`£®ës)ÁŸñ'$éë§®{—ê©ïŠK¦0€(X.Ÿ˜äTÒéÇc1`j:àŒ|6~¼ËZêœs˜(°¤gAãT€>ô tè{lI߀¤„‰(î*XV¸àÏÐֲĺ¾¡O¸£P¿ø¤µ4×q r|èJ!rmËi+,Ù}} ‚I¤0騕¸®¶«&Ý gCº#x­Ç ©ä‹çî×Nøq8R8ÁNŽð€âAÝ×Ü )nŸUô?´4‹ÜÇÛÿâ+«\ endstream endobj 323 0 obj << /Length 3490 /Filter /FlateDecode >> stream xÚÝ[K“ã¶¾ï¯ÐQSµ‚‰7X•JÕ®§Rq%»I¶‘#1+‘²Hyvþ}ºÑhFöŒ÷“@¼htýôþ㛯¾“b‘³Ü³øx·àʲ<ã Ë3–I»øX.~\®VeSÜüüñ¯_}'䤳,ËóEF½>ªu}÷p³Ö-ûmÑS©Øí¨ÐU¿œªf]uôY74#çSò"g™PqÊ?Qe&],³j  s–·‰y„e\ºØëωµÃþ4zÇŠVõÍßßu7\/ ™ñf%2Å$·‹‡UJ™sL2vâœû¿bÎ?ŸdŽL‰|±’’åZÒÐ}Ý6aS_·M¼Ù²ÝíêfC•ªªŒ¥Â·®ox¶ÜRÝ_ªÓ±îúzXd45“Y8‡ÿl«æf%óö]×[OAæny_÷Û«rÇœÔqÍv¿¯Ž)7LK»½½YÁ—mSÑÜûâFfË¢ÛúÍ‘>PãáX­ÛýáÔWÔ^PõmÝÀFWã¸_o„^VÇSöŽúmÙÇMÕScYôÅmÑUxoqÁ Žø`8°^ÓROràñ¾áô³ÜÆ í‹OÈóÊo?JËŒÆ0'=2@*‰+õˆÙT.6EÝt=}ciºb „ ý«£ãÁÖêyXœv}œ±ï¡µ£ ruGuµ+C¹ Ÿc{Úl=Ïáƒg+âI.™Diœ²Äjw oRëe±^W;8s¶¢'ÞC­—_êö^;¥VË]ÛuT髦«ûú׺ aü-hñv ËÿÔe¥­^~ÜÞðe承j…Ë"!K;ö`úÙ‚"ø)I|ݾê·mé·›…Úhྲྀáx*OÍcSå9 ÅŸ2šMq8Ð ,S½iöUÓwÐÆitœnBûý¶ö§Å»± ¾‹k·a“vY¢¾F8Œˆ uX RµWév¹!„\«Ã®XW¸*ªèÛðëõ >ü› ]_lyÁ ²ÐçËÛ"TÞV^¤¡äÏãs'L§â… éT]_•(“R-oQoNa%ݶ=íÊH»ö ñs†Çªè«Ð{ìÚ}…3ÞÓÑeq‡*œ;n»Ø1:%8°±¢ŽA¬w-nøž¸Ÿ©Gõi¿ ¨®÷‡bݧ€Áhfró,"ªŒ7B}Gè `~ϲbw ‹…yl,Œ`6 ÙjÕßy³pÜ}Š dv¬ºK,ì•àC—ËX¦Àa±<öc„ ö ½f§ñõ¶h6d£¸] B €iªT ?Ÿ7^©V?e™hÊa8ÍJ÷^2°NÁ—o[„ßó@Ö&*š2ÔM‘+VæÃ¡^“±ÖS©cæq9!i»ª(ƒEFÂß :¸I?Þ;$#Yžei›ŽrNHfLY€ß|ûñÍ/oÛÙÜÅW -Ó dëý›Î%´Á¶Å½ï¹_–;ôav‹oþñæý#5·ÌeÒÏ$sÍØçÇ$9wLJó4¹à`NôœhY¢g1÷¯fžß%7mèrõ48ù“ôˆíDNˆJ$rP:‚cY½_™›èyB}q> }Ú†>+Êrìr[‡Áݺ=šà©ú™wU³éÃø¦¥ß]ÛlBÎeÖ‘Ú¶€sÐüŒs³ƒx–s†eîIßv6ƒ·HrùþìÐÄA”·Q³±mŠkð«á hŽ¿Ñfç¦Õ{øA¹è“~6¨jÞ(„k`È:LM Àb êŒqûªê áÁ»—ÑÁ`M8j„Sß‚·ãí÷j?Žlé·¬÷uSw[²M|‰§½ë£É¡Þ™·žó#©3€x›´j d¡ÉOM€ 0lhÓ’øÂ3 ´L¸ÄÓ‹€ÐU,”ÉÁŽå/R÷L2è€3ŬSøJh쫨ÒÀ´ E:¿„„C|%¸¾: üœ˜BÁrøoƒ=`”öxž'ôô…6rè ©ÐU@äœ?§ÙO.úyLžgƒ€BëÁI{àêHÈ@lÜ‘™Ç"8¤ø ûÏÆ¡Á‘Ä¡ïhà¶Þl½ÖS:vÿôtwÖ)Ä´8}’šcŨæX¿-ÐI§ˆˆÚÉì(3pÆ÷CÅóZã›Õ°ˆ(«2e%-Ê^ÛPl#$-IHXROß ø]ŸàšS‹˜«† °¢~‹¿€YX×@$Åõ¸ðŒ9ª@N|7†¿kBç4¤µý8ù oh 5³ ‘3ÆçŽ"baÕèÛËj RÒg säeÌÁåœÂŒs Q3 Q#ÐÈ4ê hRþÁU°#,Ë…¾v„x °Òç/òùØ€Œû™ ‰•’ò—‡”÷aÁ>Ù× Ì1ý Ååt„#9Ë´{¢R±LÙ9QpêSÆÂ>c¾\|ƒ6—‹è~@iȺâGÓöT˜ãÖô3‘Søòп!`IlOŸU¾ÖW¹…اö!¢HÔai!©†EÜuµ XÛCGEŸ|zHeB@G䘮½¤%:sp†üw ÎŒ¢F««ÏÕ$¥"¤Õ8ù*DAZgÒZïœÆ®ï;wÉÐ*I·Ü#wCjRˆåû¢ I•€€RÙg &6ˆ’7Ò ž´C¾‚»–~Á1ü[ž6[úÆp8 [¸íw«¦Ú}=ØTœìRN’’˜Ô )X²E6?³E–BTlP¡ç÷d è‡ëïBØSݺ8÷4÷†<®4˜fè< ©”UjÕƒ³Zy·c]Ÿ{´Ñº¸+CÅsWvpÄ“>,l[ùmÀ’ÛЫ?5ê(Eê÷–Œ>AN•¾6úÏA"…ƒà…Ñ'Ðg§²<Öò Z¼eT«LÏ)jõØ|Á(ô{Ÿœ·t@Šç^Œ)ç1½Žƒž·¡²ié{&üòN¯p330GRð-Ç‹¿KÇ.sI@ú»˜?#(!bâúüÔS'®¸! }9Q²ítJ5ék(‰R™¿ QŸ‡·gb}¹èa¦†/Þ> s`“ÔÃU›Ùü,¥­§3—­§ÊXþì‘ •3k€e°¶ÜÈ—0BhÁ¬æ~*kÔSg~5N½ Uk˜°bN5m<9¬OÈiôcbúħO\ˆ~F?2pz’=‘Ã{ì#55>¸ÜßÒŠÃëÌ¢¡¦]Õ…‰æÆd/×lÌË‘žs¯FzÇŒ ÀrâyúÝŠû©¬µCP— *Nù«•³rNÔT:>cÊÉ/êèKîbJ“ߤmúÂC§D:ŸzøåAzzOŒ»‹inÀý•¬‡A\>øá” ?o…H5I°ã>‹Þ_Ò‡ k£Ãå.Ÿ]IÈsΜé@ð‹tЄAÑìäâ"ô z6IG–ét䋵Š+¦­>.u!]ˆOX@©ÀYY*=wL¤âD6D»î×Ëéû—“ŒÙûÍ‹ñ¥_ðzðÝÝÙ(ºÞ ÓøYÐO·Å³UÙ²ßÁ·Âg UM‡à¸ø8„>}t¿CˆRÆŽuN7ÜX*ëcµ¦w ‰w+¾¿“DÖAß÷ÕþÐS¥¿³‚J¼ 5ÛêB,D>šñïxêyº Ä{3?i¸7ñ7:X;l¸¯›r¸Ê£Ž-ÅvnÝ©žÞ(àeg2;‹<'¬´ÙŒ•ð9²°£Š:ü^ÎVXÅœ_öÎԈťÍpMÖl³Ðõ›j <±aÂ!¼%g`6¹iÀÚ‚âëXžè™¤›evà ãÃðhLxá ¿azÎåç/©>Q‹Ïál~ê’ú¤‚I­g`ˆ$ ‘ïs‡ %ƒ³ñC?„±ñÍ$N*ÁSÓÊ¿°Y~ñ¹Ì<¬’Lssý+Ñ—FfﺮñÃ?¢'L*> ’ãF¨ŒO]©ex迼 ‰êðtɃ|/nô2½sÄ_§ä»õÙ h­á(Þ­×Õx=^hƒ°pC¼õîT¦PLj–˜zO>4ßu|…ý61èØˆÕÞ‡?»ôLÒ=;Ó°¨MÕÜͧԣY7}õìDeyûß”9æÄõËU<ÛÔ2px•6WOÔõíYô ¬@*(R œvqõt:¼}šánÖgg*D2FË™´öêó/h9©‰8T>}ékrŸiK½ô®Óðà.Äg{§Ôù“•ã]ró $ãkvo*L´*âܪˆ`U¹ð[œú¶¬újíÛãDh8Ç _é#+Æ^iÈãžQNâÌ|÷.g–«Ù{ûtî™[–Kw°–õºèÉ×ÿLLÈÅp³±"â"–ë0® ÏÙsr¬Ÿö…ˆ6Íê'ž„Ãê„ù oÂÁÃÒzúÒb4éàå1šxy=9“1?í Ö§ã\¡]ø›ÄxÂU9<‚H´qžÙùùsýûÿï·‰ endstream endobj 326 0 obj << /Length 3219 /Filter /FlateDecode >> stream xÚ½ZÝ“Û6ß¿ÂòL¬òC¥ÎÝÍl¶Íu;M›ën¦×kû µ¹¶¦²äXòmrý¨/7M&M_Ö ‚ ü‚ûüöâ‹Z-ЏÈT¶¸½_H‘ÆIž,Œ±Ðfq»Yü­Voî—JDíq_öËßn¿ýâ…”“II«<[¢þQ$Ù„ÂÄ&)ôÜX}‹ßI•͆^_Ý\1ÉåKby©^ÆÔõ•u»+A34„¦}Kß婇#èíºIIª7ù#«wîLáw b­ÊLÒÙì ¨VI©aèÃ.ª¦mèìj0tžÃ–N::‘—â\Œ‘ŸûìÖí‘G u„­VmÓï >ÆQîmW!ix/"NDÂ{am­þpe Þd’Fƒ·ŸŠ´/üŽtÆ*ÁÆÁ鬈`O¶£.<=7d«]ÕÓÇ׫ÿ.Aµe}rM´.ëõ©.Iep°h}…Œ.»½>QOt„é³5ûŒŸš]õ?œÌ<ýÊH2ºò¸µhbJF›²/rè« ae.b•}fC+Œp_Õ5¨ƒD"[[×¶í«õ*RZÏÑ(]‹÷S®ûªhd´¿#rEÎ…ÄNŒÍR(½Î°Ù†m4qî€|æo@¾ ÅE°SQ|°›Pà‹S]|¨Þ¸#–Þ¡A k6íRœ»®™RàÛÉN³Ú¯éÔ’|ÞM< ½JG7íž7ÑõöÐQÓe ð{À u=D¾µíºªÙòv! UGžö²mzËgœÂZ…œŸñU Ûª¶ÁÚÁ¡8à•„P0°4º™¢>v¸„~{ž~r•£Ó7÷[œâÔ‹ü­oapNFg´kðÞ®¥©=ìŠ9ø8ÚãU(у,°råG?ZÐÉæ´®î0¶úÀ±J ˆ` ~¼CœQKN¤3&;Œ²ÔSâ¶4,£pMêÞNˆFª{§{tùà¾Üº'î(kÜRŸË…›ËO›&±u’D—ìª5 Ûìö{’E²û¬8-ú Ì8sRäÚ†2ÛfCmp úä¡”ûŽ,8cÇ. gJæÖ9t6€[''™#§¼o2ñžŒ×%TsÞe]{F”vw3â`´µå0‰p£•‰œË½£6e*÷bßC…ÊÃ+2 î%æÜt_î þNüB'ªPçùô*H+w—° Æ$Ÿ;ç;CI¡È Q®YÀ/º´+³Aeiœçs{¢+$X1š‘.·ØÎÀm–tMÄ;K¿t·Äa´<ìqþG¨{¤hUm˜Ø$ÒN²K7å> ˆ‡±RÉû(˜t€xÃÉt¹´æ¡êX–5¤€Ç¶®¹¾É¿s>3Ã'VjÈõšƒ9:|’@lÖù§Xƒ‘òŒX 8¦³L`¡Æ¹žUšgÑ5ÂRZDÝ®=Õj#°àož#µéΤS«„. Ò³¼õÓ ,|†!BD1Ú×£=ƒ~àæPÏ iœi=hk|ÈÎãõhƒX¼ª}´ãx©£Cu°uÕXo³()z£Õ¢ ¸±}€.¶”<ú4-S²€ åù”è¨ÚÊpygÈÚub\BÜÃyl1¾&ùx06è´£± Re‚iaúJUƒN7-1¯m¹!¶½ïi^ócôéSC#}µ·\)LSÅñ É|¼B¢!^áÀÝp­Êâ¤sPÓ‚Ò'ü}"ˆiÁG‰4S ê e(@eÞ« ›1Æ? bÈzbNÄ â]úžÆD1 úØð¥EÎëj€.°CÛ°Ù#üåò‰2á'„µT¹Œç,ªõí¡mjº >›çø(ÐÔîÌ!iµåqíÌØk :öþÎ…V¤“è9O›gMÐq×öç\¦;¤¥|Yɨ( ÝyÞ%‘%TgW¡4kµåR5Þ }¹’öñ„ÂŒŒU¢Î"÷íþ=:ãisejÔYæwënCÈm¼0Ÿïf”ÜÝ‘‰ÑL½EFê…¹z‰ûù‚õðjRÃG55\«­z6³§ÅûÅB¶TˆGWëõáºçšR£¿.Ó¡ª™ÞåļD6º‰èPÒ1@BQSÏ~·j¿#Ðäuîø#XX+Ò8ê/.¬û<G»šØÎ3êùæå˯ä;ªÅZTG=½‚ ;Y`} "u‚,­æúÓ¬?è¿zõšøzÐÑXÕS=˜tôAƒ ,ß[OÌf_®w×ÝЊ~ü»§+dsÀOF®=ÇËŒ]üv¬ÞVû¡€NŒlG¨ª'ÚüND’:*ñ‹bWU—¾ææ¹6é.,2á-s¡D)´ºë–!À¶þ¼vQ@ vÕ–*ê &Wԥϲ k^051Û»¯¨Àí^œ?tNôbÌpö&ãPÆ™ð[W}ïɪ{¢)}Õ;Ç,Áçv\Ý8õôÁ§CC΂|pJÙ0åqÆ×d22˜é@»·`ö®°l¸<ák’:úy)·NP×.½–¹/~ÊÂ_C¨›œ »§ŠÅ‘¡N#MÉ<¡ç ª¼:¶ü‹ƒ¤¶órRö Þ´r°bïäðn5©Èb¬2ñÇÝjf륢ˆ…0Ž“åwZÀÀ­&Ÿ–(¸¢¢Sé­ •T>¸8ïÏŠhèsñ{žòN ræ$ò ‹,¤£~s€‡ª¦š}ÁE2¤{õÃÍõ¿©sDy|ƒÛnËxqÈ28³’®>cúyŽÅZLÌéÜS¢“,:wãö˜ËÅ¢¶zÿžë³^÷¢‹#%³Ä8»[aöO#“ÄXN`‰»ªg"ý§À€Ìç�â¸D¢ìžxøÕp/TòÑ£ZÏÇvÂÔço³ ¼±¤¶íÖùN" .SAçËW×Ô³/»Þ¿†îD¹Ö—ËU¦ Ä}pryß{:OŽ,IS*Ú!£f´5/B@i›IfU·bk˜ _ß—˜<&®öè÷rMÉŒß_6\êÚº2¼Qj»ÄÉÛþW„H9pùhüÆRš˜E7×ÿ¼úáû[ºewÕ¶qO¯&cÅG,¸ŠR9Æ?KB/)t|ãA ^7_+Únî¾ ÖÜÆ<'% ŽìÇõÓA°Ð¿"É8Mä„‹ôP9M~VÂE(¡§÷¥0 ã‰ÄÈÉèœLÀ+˜ܘ|b2œûÿ™¹)*ÌËûȇÞâ܇`rȃˆ–5ð#°ŠŠÙSÄû=ÇáÒÌ‘8¨xꆄf~oϤ²ƒLC" ›ˆÓbVT6ž.ûÄ)¸-ÜÓïx ~Cœ¶ê8ÉÎ ôúÑ,$è2´,wÿ¨â–)2hÿžÛ. endstream endobj 330 0 obj << /Length 2374 /Filter /FlateDecode >> stream xÚÅYK“ܶ¾ëWìMœ*">+®T9qTI.:hs²}À˜!Êṙ¥Í¯w7àc–³«¤\òeH6šÍF?¿ÆüíñÍûiúÀ9+’D<<ž2ññˆE2{x¬~ ÚúrJÕ~~ü÷ûR¬yÓˆeQþgxE–ƒVýADAyàQP­Åû©Dr£»ÑTÚóþ:é¶Ô?EI4À'²Bö³2í0z‹b®öƒÝOQ$=+Z°")ê:EC‘°,ÎIÝOOmwÌ€ü°…ÍÚfÏqºLd‰ßòÝu4];üLœœ¯99“"öœßíÈÊàƒ…g€OVÇ1R2Áçþ•6¼'çL¤™gˮͱ)r–b¹c0žå,â!”1ËS ?è¡ìÝñžÑ¶‘"äJ^R°ÂÌ}lÊ$ ¦AWt7vtÅØ)kºwΞMë/N€ò1‚e×4º´î Bwº/èÚ»h< Ø!L²$øpE=qhŠà.C§|h?Ík^™¦Ý±r’±´_íÿÿÙaoD½ÃÄh^Ro¬ÚH(Û‹‚'ZYo£ /È|ñÒj/DõgíÄTjTGåÅ[;ueÓûV‘6c}Ãré|9̹5ÈÙâH5–µ±yuö“ V—{µE‚¦Æ I —뾂˿`Q“ã§x §ÐIsËb9ew¹tøÕ,Z§Hvv´+7߈Š-ï¬Û#ÄjSˆ@_޶³ÙGIa‰œSk ºFÇ¥à‹gZ°ÚÙ¶é^±ûÉœ%@ Õ@ ]4Æ}ò¥|P­¶g»òØÙ~ûKÝ5—w®£XŸVFåçlšµÇÉ8>i½„õóPQÎ 1Ì0üõFǘ‹c‰¹ P3^©eß]à¸ëÚèQ/ÙL¹ò+ }]Jåß xd>ƒ‡Vë Ã&u®6èÓꎆ·¶¦ØQ Çó~ÎEÊøR @/ûÞ^§‹.ªµ³£&ùf¤+å|þè¨ex5lñÛÑ"ŽdðJ‹;p!NYÍJ@ø¤QþpX-ŒAŽÌó›\ìµ}%­'çþ£iÕ\U°jý.j‡é„Ä/øžlVKç»x½ €‘˜7qÚSŸù\Qìåº'(g9ŸCå|GŽX¬`÷ÎóŒåQüo ãÑéú6|K7XfÖ[CMIJVT‰ËQ÷¾Äå¾´EÁçÚ”ž•Ü;v°r׸–Uïø f*º;õÝÅ-îl8,2‹xqß½:†±ÚÅ@‚³(~­—&ÑœþWsµU; í’Êð`q\êp§èâüF-3ùRÆ!Íx*¿M5[å3ä|Û¤êÑm¬ŸwµÞÍŽÎQ:§7:ÿŸ.øz•‡ÄöGt.akôÈHy ÕjRºW·×®VØM jønØ z¯l©é‹i̶rÝ-eöð„Ã/£/bR<íc‘ –äâkZVÛ›2$¹Àõ2$ø Hóüh'@¼VzðP‚;ÁõèÄÔÓEµ!††"d¤}Å‘–2ÝÈëN£névp¬©»fº˜¶›, 5Ô¤KaC»& ºhÀ*® ™R5ïö`5*Uoû¯}0n,õîò<¦uãæœ•Û&)Ë¢lAãhÀ¦{-@wß ;*¯ÍÄÎ-V­v£Ö`¹aœ¬=5ÊÂÏ\ˆÓ¥*W;”_šÁ A£PÃʤm‡“i5Ýo3­ç‹ÂÅ}óœåˆÃn/uãÏmBÀµéð Ÿ]¾ôº2=žX÷of5;®,C¡ƒ ¦-›©Z±÷$o¦˜ùÀ ,ø×|ë£×éú¾¢ã=M4 Û=ƒ‰‹!*]ŸÁ|¤'kÛ°h MIH–ùƒ‰°Þ³Hèo.šÿÔÍõ/óÁYÈ1¶çlGGÖ'o'ÈžÊ;ÌϾ8ýÌh¿1­3Ý4¨³¾™Àð+»Ø T¦™³šÄºù÷¹9¼)Ò­)\é Þÿ;Ì›t$Ø4³k>Rô£áÒ0T~c¸n¯ÝlBéÕyÚë4,K‹;MÂæ>óƒ Ç»±¸SŸ\øtRëþ°Û#hÛÅk{Ë_Ù[öâÖïóY ^vP*5ÔÔøC’±‚}톂(b&0ò9Er¯RnQJÊŠŒ;W~Ú4z™qBg|)µ0…oK-,Ú‘ûªJVº1}œŽÅiÑÏï e‚äsiú_j:w_uÖ¶u.a²ˆçÙì¶‹u>ñpï6§¯>÷ëîÒ5Ý™:i¶œ ÒùèìØ|tˆ¦­vý˜§,Ë çFŸ‡auR—]‰§ù¢+Si]™Š÷ý¾ûì¢s¼¹ã>àpó‹X¹¨‹ûò£ÇÌŸCÓíV&’Á¾`Úyã÷á…è'çÆ±@.ëíÞNNe q?U¹ˆYlV6©ª3” a¸ãáœEEügyX®Œsý´÷Š.xpDw¶ˆ6=Âk7‡4€B›£û>ý­`Éà_†EL'–æ¯0^œ&{Éõûy`ÃeKad1í^J›J·£9=Q|ñúøÙý=ÂÝß#@¬Í¹¦;«4Ý›°'z˜À×hòªEVèÐ5¿Íß°€È¥b|7êzu« nzpBqÎ[+íò¿2'û=Ýëv]Xî ³\$ŸEXYî4ñ:·ÿ‡þÂïK˜}œmày™³%wÿoˆ U=¯ÓÕý;"\¶Üs¶Æið¹Ö½ÿÄ>òÁWûßê„ýYã½G9Ë¡Æ]Ëd,•Ïr¯í ûölCÜÎ6/XbéªR,ãõq2Òú·hlG.Ç.MD6hÏ¡ÔP´#ƒ=EÄ›3– <¿kžèæS©—Ïïõ«æ™g¼Õ$\D,NaîH`B-\p®½ùÇã›ß®eæë endstream endobj 333 0 obj << /Length 2768 /Filter /FlateDecode >> stream xÚÅZY“ã¶~Ÿ_¡<™ªZqI€Ér޲7kgS•¤’•Ÿ?P$Fb™‡,RžŸntƒ$4œÍ±›'áh4@_7õíþîõwRlò0×Boö÷›Xda,Ô&£0’éf_m~ v»®Í6VÁ‡ñaûÓþϯ¿r±HÅa–ªMDÔ?tMÝÖãv—D2O†éŽã‰Úý=ýš¢ä‘¦î˜®în¶…ê¯ãù:†Û]gÁÞÍWæ~+£ ¸6¼e=ÐoáXO¸}cá)@à]‡¹R$xy*.ÛX•£¹)tp6l¤$!ÜÀ+èÊó¡âP&ÓO”d#åµò’ò‚í¨\íà¸g;8¶ƒZ¶‘3x>OÙÀlVŸ<޲Í^1Óì/þfµe u¹GEì/Ôù‡9ÛfŒÖ0plº˜áÔ7Õ°rHÐw¡ìUYμ>™ÖÇÞqZoûeß—¾¡Û)6OõÈÅÅPã2³3 Y‹‚_g¥Ø&›\GEVu°Cª3Ó¿Zyi©E(ôô”` Ö6X±r`…Y4½*3x¶þÆBÂň™oEÙ~”¿ûL&aà0qHOž¤Q(uÂO®iþOtgðJtgÐ -ë~Æ=ì¥9góHía,Æzë²hx >v5^!x¡’™à%¾ÝýºÅ³5W3‰q£Z:… ”YÈ#Áç|»fp"Lå‹Nd:ö‡I˜gñ§:‘…Âd2{Q©f/:ÐÜC~g¬†‘ÅÑi"ÓÊ¡R°)uëE<™¼Sýn…Dsõé~è¹{»Cˆá*'ƒó< ½hñjwb Y3^ä©Ù"¥¯6é‚;hœ½DC ytÑYhˆ–‡ÞÚ.Æý’Í€riœû¡kb0ÅCÝ4Ô:0Ñ­{€)ëR±ñËÕ:WTû8ŠÜÆCO³Öé]©CÑø ÆÐú•h>ög2*66ŸØ^º¾¸‰¾€£sYWÆ9Y9;YÞü2˜†ùÔîwŠmÖ’MÑ4Ë ž êI&QrÔ÷ëvZûåìð]7Œ¦¨“¼Ãß) ö’r†\RÊ‚±¥ 2®KÁ-^–Vn9³•cû¼ƒ…¡ã:¶ ú9ÔãÚ;eï¼éªáË,„ü’ͽ`÷*˾¨Ý¯ƒL†‘ˆ?¼ëJ¸®Ã„5ÿlËÝR)`ß0l ‚ër$FÚ®ÒÞ“² à f£P6œpv\¾MÂ!Èu Hw«Š~AדD)"MøÍ¬wÂþÅ4uA¡ÞÐŒéúëñ´N]£°ñÊ8ËJm@¾3;Ö@ÀnMÇ]ºŽŒÒ©4®‡Á€ó£iˆî¦¸”¼ç¥¿væg úﺈ|gÞÚv@ï¸SDHuƒ¬}¹¤KUoZšRã´ˆ 4œáµ¹3 »sF®© ѬH-â,Ôzë 5(Î tËC‰%´b¹ë…¢°® ÞÔãØpÛÜ“jì$„L¥…¯!Öñ›³bHlÜ¡Xß9÷^Ü;Bê?`”µ­Ó„ð¦,°-È@<ˆW OÑÜ8ƒ¹ßàqIgΠ$šú¬£Žø3±K`O53sIþÓgHàz1%±`P:Ð w»F'‰úrèžeÊ/»…x麧ÏeùK/{áeêózzP¼8žö°š ¹ G]¨7³z£NÊØaÁô fŒÓ.!¶XPOXÐj| †‡qÃIVu%‚fÉ?†e’;,ˆ b¢_@A]BA"x@.ýµ©ˆàÀ„×}8ƒ™ŠmÝÀÍ8 Ò†QD„ä%Ͱæä9=@DW³™^Œ³­Ì$ó³¾·üHFBÄO 0ðFkxMäa–¥ÿ¼&rM(~Aw,ú‡æÂj™‘-t3Ž-h«ZÐ^ª`¾רQ ;0]A?ëm!#±ü™L&:L¤ü¯ ØNªlôÆqž»†Ö5­¡ ņ å- åªHƒw#/Ô»^}ípü:\mbë{ž˜‚®îZ…Š,sÔö§G‡¹0ÂÇÏÃDBž‘-áA,@в°² ¶š20ÄWUß}5Rs6bÆ` A­Iz÷1ÄëÍÙrQÒRNzj÷ó ™Ê+$±§s¡àëg€WLÀ@éëØœFéWXø~Ë.™ªžð0—Œ-:λ̵>ýœÿK_™f7À¾„hôý¼õ~™§=ïsÚèÍ•œ;BùÅjèVÅXŠÁÞ“JÄlÙkâœAÊŽ)=‘ Oj«ækQ™¯¶ÀnvC0Iß-|\ñAB>Ƚ)ûD¢ †ÎŒWѾËX…‚ÌNbÏI +ù…5¸-¬)D¹ýTê•RûmŒOB“d¨Ê~\qÍþ<=ø+:*¹ ˜ò.X-™ÿH¼0»¡â§’ó’⠋άOø‰a嘈¿ÿæÆý¼Xî]õÚš´ÿú†A"´IF<¶¥lžËLß­‡d @Ú¯±œH»8Róï¹¶9æmqìz¦_®b>Õz™€gާ(n‰L¥nªµÔ%O6¹ñûKßû÷cO{ƒÀ-Cú<˜ºé{þdaºö’2¬39—À éêwÓ*¤&*rØecú‘*E0Õ¢UZMÍk}S2AºÞ}ñÙ“$3_ç,qt}Gà]/ ßZì‚KT"þäjæÿv‰ŽB¡b?Žì­Ø,¦œêÙÃT[©;ËPO¨hµÐ•‡Iô¿O/üO±îÅÙ\ÞÂ¥€÷²Ï áP”‰ÅÉÝÝÁNßÀî›zŠ.“ë‹㥓÷ÄDuqY‘,=ŸfOê.+)“¡„æ#Ø•ôñãîíþî—;<[´‰‰¦¡–É&†÷MU¾)Û»Š6L‚— Á7–´Ý¸> stream xÚÝYYÜÆ~ß_1/¸ÀEv󌃒"%6 X‰6ÛNï cc^í¿O]M6g)ÛAÃæÝ]ÕÕG}uõ¼º¿yñV«]îç‰Jv÷»PÇ~§»4 ü@§»ûãîko¿/§ñöÛû/nÞÜß|îø…»0NýDGÄ«€·ln¾þ6ØøÅ.ðuží‰µÙ)?ÏrhÕ»7¹yõ|Ù$ð¥×˶%®ùâ-Œ;œ¹¯ÓDËßs»×J{㙑÷ç×<ðMmW 2 è`0dò¡™0”]?ËèÍpîê#Sªv%Z{Mw45ӯއ#b.¦ßŸY¦özséúÛ}xcÕžð°ß}úyó¾‹QY‹”õ4T]ËÝy Ãm{>ˆK5éŠHý7ŽÚ 24Œ°.Ì„eM;Úi…HÿãËϰ‘Òј$ʮͭ¼ãÖv»؉μ÷ÈS4wÐMW÷ÄDÚŽÖ©K›þ6ƺÚ4˜#éæ4î´³ü|Á8VÎcvÅ™v®Ng3Œ{ä±GdÖïÚ/ë±ÝÚ9o¸F¨4ó.ÝPÕ·*ö ß0!l…Å}úiªAŒ©øÇMpÑ.‰#?Š’ÿÌ4ð+¥"1qÓ? ²• ¨4e¦l8€& x˜†€£®%`Ÿ,§Éí³¨Ù°KpqWK ±Ž¿d H›-GÄ×Òµ%@w¼ ½gÆEÞýk¡»ÆZc€F#§HŸC:CŠÆp'3yé"Ø÷[`Z¡:LÐj†êhzÂv(؆ñƒá/ƒØ0FÀvi5£%oà8|óDѨL¿Ñs@Í9#sWæû9H;EÅO…È]Ç]ªk@z“$dÜ52°)šKM†wgŒ  þaq 8 —0Èú+}'+7v¹ÔÜðÆ1Ïåæ º¶íÆ‚0Æ}ü$¨È®1<ôXg‡˜Î ÎÙÛ8Ód“ê‡A67Ü»ÉYßø=È|(„ •‹£ÍE![޵?m54›~(#ÌûY"Þà5xé=nW3Piß©õãÐxY–¦6=Ü„µ£÷ÕÅÔUk6üìEÅ~e,ýOïÞ½ù«Øà LÑ— ìiñì0\°x²r(H¥8‰Dþ "ÍüÍ…ÉߪG˜DÔ‹lç·ÐÍţЂ%¨Ô·ÿðá««yq€(Ò°æÌýU„CÅ5ã§‚mÉüHçÞ[Fì#*³è…êÊg“©Ü»§ Bë‡ñŠ‘d…9¡Áè ~à˜×o:+@Ýwd)U7 †+GD]XF’2é*¶®±á\×Î$Ràìê“Ï»}šk<&jé´ñ ´øs¨ !9ÇWÇî¨kb2#;2´K m’ºhˆêìÊ·!œ»èOfé캰u)†y3µ%š-#Ø(R’Ùh›Ù¨5d%ÏR3 …‡)š% Ãtø§)9hB—,çAs%$\ìk`Ò~Ï´cוL‡¨ÐŽÞTé¬*YŸ^ëeã@K×±MŽÀW^©ûÅ«¢DWðÝbd¦ßÖ} Aï4Kt ’ä/~û]KÑ ìMãD K–i­vt´Äy}×lÊFËYŸ¡ý¦^9ï=å²;•;Qƒ;3\¹åb™ÀÙL.!w¤å½ÙÓAŠzZ w2±¨«SÛ€Ö\"E'@<ž«ò,úM, ï%öÀ—ä6CW &©„BNE(m€TûIš““ÎmóЦø¸áË!LhÚœÍjâ} {Ö˜x9EzI©„ã‚i÷Œ.dá]ƒ¥?p¿àncšg^­H,o4|ZÞopXÂ#ò:çެUygDãÓ±ï.g@T ºÄŒQ Ä¿ƒÐn™“ÑŸÇ‚ºÊiUމCÇ´” æñÄ={þE4Å-ki\É*ûÞ±¼õ¬Å'UÑ¢=¥EÅQ–ú̯6…dåøWE'j¸Š½üeA/ŸÈu`øß çOVʤy-‚ n¦Í×Ñ‘Š:i†äíÇ‚‡~º†E®u ‹¶Ç—5ÕGzu@–V¾‡vÞó¼ðÙ(õ‡Íì«îŠãÏ{mûÎ,¾îËË8Ã,Î|Ù)dÏ~jí½U‹— …ÚrY¹Ÿ†úS.‹_ò®Ÿòyìníë<šn߃òhGÏ}¸Å sÎF¾íyùß‹µçýÇF •¦Ñ/Ç^ƒ‘ÿ à$‘}RÖç©__Ç¢æ1¾«æ@úŠä]ym‚…ü”@ÃའNº¼tb¯¶b8”pAœýoO¿’pÇoà‹^Ýs_&võ Y»m8/F*U~¬Ó«zÙôûÅ;#,Þ\çeQ—S]0¤äÕ†å©f6ƒåÏ“¥E9NEí"V´à¾NÏZ@ÃXLú’p·?¶–”çöO¶dAñ endstream endobj 181 0 obj << /Type /ObjStm /N 100 /First 886 /Length 1098 /Filter /FlateDecode >> stream xÚÕšÁjI †ïýzƒ)IU%˜vßB’[È!$CÈ%^l/dß~ 6 ‘f§»gÜÛÕÓRÕ¯__5Õ¶ÙbsØ•¤~ iü줷½Qõ¸?¨á3v§îL<„Ìp0yoŽi*®[êÀ_Ü"‰¥6Liµv _+c€à¦dv‰×'-eL‹; Ç\2ù' ŽÍð ·Å"jˆÌ^ ÷³·>0ÀEoˆÛÖtB‰·ˆ¦Í)Z4b)+µ’Æ7Á…ªDŒ‘ÖЬp¨…抬ZYš+‚z¥J¸1j ™0¢2cf¬WéŽÁ€–¦TKª&C8ÕfQ²:l–†,ëƒ,ïˆéðYpÑJøÜ5ͽR‹R¤;5Õ»Q«±º µš Y=4²zø ך…Ï0´yø ‹ÛŸ¡©—XÝ uŽÕ½ú†ÕÁO×XÝz.£’ŽÅ&"½Ã OÝàÌDב5¢W¨ßJ8ŽŒá˜–‚ ™?t†í>­šNZÜzÛÈzCg0…Vׂ,ch#Ùˆ>°—èwrF— ù¡±<ÈU"Æ I6Å…7L¯|XE§½£HnØAƒ» È` €Ð2U™F©ÚhSôc€’éæfÚ}øç¯=íÞ~þ¶Ÿv¿ßýxÜÿx|Ú±ßM»wû‡»¿ï¿ì{óðÑŸû¯ß?ÿv÷“>FLG%6äÓ„)î‘‹¸zˆ{óæ0ý-¦¤›ÚÝBna 쟇ÐÓüùc´ýi¶ñÓ¸…}‡1&ݽ½¿ûò~ÿH¡ú[Ú}Øÿ|¤OÏëýG95•gf•sT±ÖË9[¶eÙm¹.k=®O9\þÒ©sk™$_¤c­Ç5Ì×­I÷àÓtÿ·^¶þlÝ™™Ñæé>æä¸†µ˜‘’™¾µ?qÔXƒŸ—·ÀÙº{Ö]—Ó½Ö~•2²nÛ€ß,I7—“t ëýæÌ ×yº/¾G93ö~ /²tn ’ù‘ùY{iY·nŒñ\C߀÷ÊY÷8M·Ê+ñ^3?ªë×°èÞÕÌöy5\„ŸšùÑ­ñSÓ+aü‚ä:5àãxsŸWåzÚXj%ë>í¬/¯©;óÓd º3'­ÍÓ}ñ½Û33mf}7—žß ;o€™žÏú½nAw>ß÷Ï÷V^ ë–™1žWÃEX·ÌŒÕåt¯ö^k™³Uü^–uÏï^6À‰çs¼ëÆö¨çs¼ŸxŽ÷ñJj™ŸQæÕp‘ý:2?C· ;33úrº×zÎhÉï~clAw:¯ÇŸn×нèóQ‹eݧ׵øõøVæ¬{ÌÓ}ég¢rf†ek5d~xA~VÛ¯R²n_E÷²ûUÒy=þmc~÷¬û´óºŠ]ñ9£™ñyº¯ù{<ÕÌòr}XÍüh]E÷9ûõ_zë­N endstream endobj 339 0 obj << /Length 2885 /Filter /FlateDecode >> stream xÚ½Zݓ۶¿¿BÔŒE ’™¶3¶'nÜÇnî2i'É%â$6)‹TÎî_ß]ì‚_‡;_Æu^N °\.ö㷋޼¹zþ:–«<̵ԫ›Û•y(¢x•Š(ŒâtuS®~6›Î˜rýëÍ?ž¿bBËž#¢ú $zB†i’9‚ÆÃA…*ÎÁ߈@ÆS€Â­_›~½‘BýÁÐà¼QP4e»Á‘¦œº·æLÏVtz«õ â,ÌUò¹Mä_´‰‡p½‰e\·GÞD×›SGê¡ßnæDÐÃàtnw¦ëªfÏ»6.Õ™ß~Û6½Áo®6BÁ's{Rô¹W(B¨ n^'AW­†ê¢¯Ú…I¢àÆ*VKs»ŽA¥—º§‰ª£ßž_¿t–R=ÿEò#¾bµŒüý©(‘ðW<É4èZzµ?À¦ŠžΦƒñWŠ3ËaåÇb×ןìÞ¢ù¦ÎtR^vÕv-£ 6kØ lEå*xÑàÃ'Ø—A žrÆ¡•vU_ý¾– ˜Û™ ·§eÜUuMÓû ‘ÊêÖjÄœMÓîË~÷ÂE;Cê¥\¸y¿ü´i;N’àì;͂ݡ­v†Æí-ýFôšïhT4ü{ÞV=…Ù¸m96a*4HHN9 õMš„Jh æ¤r¡þáEoÏG0Ð}WOt(3ýähé|,Â<O ù]‡E]§1øN1ŒÐD© >\¬#ktXè Êš=¤mË /ªšfE7ä°8sU„.§“-¿€xÛ^šÒç˜l­óÁ—~ò&‰ÔÔ/1£7ôKv…Œ’¹š’ù¡Ú±°Íáx$Yöµ(†JwQ,À»l’•ìvÒúMSÒ˜/V£ åiÉ®&«Éà~Z3%sëléšBQw±’YròÕÉ‹·”ÌwX™ÍyuíQrë|eª!”;dX¨þDcʘ2sâÜ]…ÊÃ+ÒS"kðÏté:×ù%~>‹JÔù@hÓ±ýr×9 o„Qš|]ï_ÖèI.É¡Q®bá„]˜M²CiØÅ9÷怄àÅèFq±Ç±†°YSµ‚ [C¿PÞ•´Œž‡36þ¨=s}W2±µ$ÒÚ墾ð<¸‹´¡†‘2y,ÒDfјàÁ»)ÅWݤR#ÊZüAö$»ò4¶ÊXÀarTCWuéK‘)ľÍáá*$”f" d#²éÜH†™N¾³¡¦P°d¥5ôÁÈó±VÙŸw@~wß[dª¾$#0©„%#ˆÂŠo"xÃQÍ‹ß4‘Œ±ü$ü–šS>Z”=¤ÝU˲ƒí¹­kê8€÷Èì¼pŸ *lÌ*^wQ†ª ªË£üK¼A‚H™&Vé½>G>ÀÐ,žà‹‚"ë ¢‰ÊƒîÐ^ê’Æˆø[g:œÂØÂ"Œ¸œÁ)áHiÇ,oÁðÑ €ìùè^ CœÄ3Än¬¬uC/¬SsbÛ<.XÀɦvIŠÓ\œª“©«Æ–gì(%]tZtAÀ$vÐÅžN®_ š–—)Çc7ü>%r8/OY;ÃA<µ§ûì±Ç´˜d£`mÐiGk^¥ €†4QŸQªtZ¶Ä¼6EIl{7Ó6üé, ¾4´ÒWGÛ[@£+ÉiÉ\šA¢!ÍàÂvèé0OÕ_%§ÕÇ»¦¶FbÐçõ3.qXñjïÚ›hæ8 ^òkój&¶m¿ä2kŠØO M‘DRpátEn+dÉïÌÆ'»öxªÍÑ6¨ÿd\‹ ÷ñP›I„N» …È}{|DgüÚ\gZŽ:Ón·ö”ÜÆöÜr7£ä¶#GŒfêÍ5©æê%îËNÔ;UÇÓ¨lj×±W=7ðï(V)È_÷úw»ÓÅw~LC(]¾n—û~«>\´Fó¾<„èd§‚Ì ¿¦™;|n u~Ãh¥W×0²ão7?W¡ŽäŸÜ͇ðyù‰v5ñg4óÝÛ·ßþÀg?ÓS[úC5ÛÉ »ùJóE÷Ãz\Ïô‡Ï¨¿8–Á«÷?ÒÄ®=Û¼ê§_j—tDh›ž0ùÉöw/ÌæXì˜xíÆ~¸ÇÛã+edÌ'ŽkÏ Á0c›®,«Õ±ú/¾a|ðÁÁ“Óìàw"<øDÉ¥ª ×á·K|Ò2%m™Z¤èu=Þ’xü_æ¶^ÿº ÂDß8T{¾| 8;â­LìIÖ‡Cnœ.z_VA‰zP%°äÌÊÝ[uÕ÷ެ²sØ×s×#‰šdp¶2‚ÍkaîðÛ†^˜”ØX¦õôDE‹¢N‡ýâr¡=pz2Ï1m € ©’àßk‘ðW3ì¬ò²á¢§è@JHà” â[Õgrl€d6­ØÇÔ4V¹Õ¹mq‘4ÃŽ^Ln™|G!€PäC~ÿî-·˜Üṳ̈ˆž# ÔŒ±ZÅPÒ©LþÁ3ɼ¦T˜‚["+Ø}ô{D Ï¡$›6°é!„ëY Ÿ¨BÇÙaÎ&bœyÀ'‘ Iûp œÊu‚?\”WÕ¶¹ w¡îý»ë7ÿ"õ©8Ì“t‰!.à}"U[¾.2éÂRóÅeê…z Í‚Ã%ÒU=‘ .Ž“‡q“†f¶ÆÞ«a¡–sC÷)„Ý-­Œå*ÌŽØfE®z§=û0r€ã{eoG÷Ŷz(:¼¹õU§€!R,K(©kßm S³ù_ ¸4¤œýÞÆK"¹pííû74s,ºÞœŸ{óu"Çœè¼×J!Ù[ìÇ—‹ÛÞÑ|lE0L¢2pÁ4S¿"> stream xÚÅ˒ܶñ®¯Ø›f«L. YN¥Ê‰­J境6'Û,³d™ ÉñZùúôà3y+òEÄ4F¿»W{|óðNë;!â2ËäÝãá.—w¹HâDåwû»wǺëìxÿóã?Þ)¹ÆLu¬´¼K/ºd^ì&kÆ{™ìª{‘ìj† 2̶é=Ò¿O¶¯ìOI–Lð`°Á3Ϧé§Ù>}žíÍlžÌd˸ÔR#‹‘ã1’Y¬’’9ýð±ŽS3!>pO{âú±©^JeœäË[Žs3ôÓÏŒ)ÄSÄJ¦ó/Zyœ§¥G€§ü”$²µR²ˆóRxÌ¿òkCEK¯HîŸBäòX¨âL. .¡A©¸‹” “×÷vªÆ†^¼™çZfRmeVfÊßòޔֻÓd÷¸ÊwóÀ4™ªfØÐ[#ºatP9Â’ÝGÞ9ŽÎ"˜[„»Äx+BDð~¾² ÜZ,Hd»˜Þ9æ#²wÍOxw·cBí¬!ž…Ü2;+Ú°ÛôUÐE™ë/g%òB­ElH}lIj`nçÚÌÌéšoÅÚ!¨ÓáºGÍf|¶3áÑÎpØ aú„"‘K0\í¤œ½^¯·ï+A+APŒé÷¼Nóñäψ‘Èô¿`ܱn¿m¦yr¨þ’<ÖÉí¿4s}Ñ >¨MÍsß 6+Ó;Pgæªö‡Qð›£+ûI²2P­2”aœ–)?鸗peét§Vǯe–§q)‹¯d‡ åD.´†KFQ]SÎ 8'?‡ÉÿÑ>¶ væÞ95pùä˜|½eæ.Ã˽™jÞ­jæSÍvÄĆޖ’ùæKÝ/Á²b—Áw“´ÕDY©ãT]¸ÇÚÔÊœ¤ˆ_>{¤, ¸›Í6^š¶åÕ“åïhÍžW‡qèxeB²K³8I² ÜŽ2Ó¼º¼ §ŸTAçKÊ;6GÇ'Fó…Ur¿Ë\(ÀÙ&Eñ(MÄî}ß~tgúE÷b‡aiœG[§±rƒ“âB瑱s ¹‡Ós ë"wJ¿Œ”ÄçD2í§æ§a®IÉAMù·Êrg‘Nþ9fæ'6 ù·Ð*Ö¿_Ù_(V€œí­ú3:óÇ5r ¼÷gý’F°© žÛht¢e¾Ju`*”(·…TQ1–»_!ö$qšlzV'0ë,/lð×Ä ‰ì×1ºr“>’ÊP-œ¾`ìs¼Â Þº€¶ ¾4œi¡z¬Ý‘i†Ô5ý³ÛZrø¦–p¡ÚjrÛV¹Ò)¸næË$l@””ofÓd›G‰;±ª `}ðÕŸÌ0a3œ¾{‹iJáØ‚ï“#SŸ:ÓGkÍŠ¢] HätAo8̶çåäˆýzí „5œ s'ˆ’y))–³ …“Š`Ó}fj*Ó~³<{UßR)¤(•Í8%•äD TÀÃ×0øþˆAòÖcê½8¹J—®$Šæ'd Ns¨YH £X bä$@±Œµ.Ï÷C÷IšZ1µÐt=?b2(u©å÷xUÓS{‡RkÝþ̪;µfäÍ {p„)š²ù¦ÀnVlÍ×PäJSŒhUCfœ*WƒÔš©!CM¹G*Ãç4¥ä-i£³”Küˆ†pySœÅàsÜaÚvÀ+^&¾{´ûf´`*dN€ÀÅ(ìt¦qgX`hÄY«Ú“³>äR$Ñ[=âM pÏUW$+u(2¹‘•ïöö”½~}èQ×§¶ïO¶=ë{§l¤^&q‘BŠ—„›jDuH>¤³Å^þaÛã·Ë"Ž›~;—xr`ëÚÑ‚oî} ñM„ïni2Ú¦w¡ë4™g{Ñ‚*Ïèo¦i—˜ÁdÝË|«zÕÂ'EXtú@“Çáß!«òh¥m].vïÙPpºŒ ¤¶ÜlgcÐà«“ä!”}âüìÚÁü˜Å‹uOÆyÙao0p{ÕáùÌáTy»R¼ ÁõÕUÏ·å¿“ú3±P8—º¡Nso)î˜SëÛÉyï š‚Ì0 1JHí…Sàw!ªø3ºÀ?¬¿Ûè›f”T :tìásÃa7ZÈ«EÏC/¸eÀE7{uCÁ6±G›ëar´&37Óá#g¶4ã 5QTãF;ÕÑ&3ºP4´ûÕœòªC¿i=:è¯j<Ìчy¨PÆ¿ÔCÛy×ßä«pðÈDœâÂb®2÷†A¥ã2–ñH)ɇáã³5®7Ù4j>šÊF{Û6]3Û½S¨^LåáÚöÿpTDzµÛ>Ú1Zzmø}΂JqÉ2Ÿ~5ª¾LGŸ0ê¡Úᙋ;4/ÍÕÄ›Uyê÷A%BK›ÈKj¥«K"ÿ´ 9Àg©¹`½­¹´¾­EÄöZ$*WZ$zµÛF-‚D ƒ³E‹ݹ6¢PN‹…ôZÓ"¬X‹°¹Ñ"løkè !oQ—; Ud¾ÅvŒŒà•Ê᫪ý‘Óø9Àî¥uH*h& ú½ä29D¦ªšs¸NwÿâÉ8^UÙirUµ’çÔ 8‡jö¦³Ë>ÝÈOºœMØÞTªw/Эù+•YâÇõ?…¤Öƒ¯zδ[%”Êc­ŠKÉôä¢lÛÉæ}‡•nªÜ°åKÏ©r!Õ·Ž.‘Ýv%­â,ɯꉭõlˉ4Îå«+¦Ð ²Œz}¢?ciásƒð1Iû˜ôöú[ú»bâ ÷¼ÓšmЍÛ£ú£2ý??JÄPÄ.óÃKãÞØx‰ßÞ²’ ßøÜßÈ#™è¸ÙÖØÀmxx& oÖ%þÑ8‰ü¯´›Ü|óÃã›ÿÄ>I; endstream endobj 346 0 obj << /Length 2686 /Filter /FlateDecode >> stream xÚíZKo举ϯð-Ý€[Ë—D HÌ3H‚L°vNÙÔÝ´[ˆZêHêõô¿O‹zP¦½6ö)7YU|«¾*–üéöÃO_¤¸Ê“<ÙÕíÝ•Wš³„I}u»¿ú×êÛ©/›º[o„6«¿4uß®[5UUÖ÷D¼Ù5íÔ¹t½=®ÿ}û÷Ÿ¾9›—]mDšhehÚÛƒ]od*V§¶ÙÛ²*û ŽÍÞVÔ,kš(Ø ç³KèÄ<$1P:Ðä=Å¢g>¸TNTÊßÙ_¤ñþ"÷¤Ì°Â1Bð73¯AnA´Ák\{ô˜{ r‡Ð¬'¼F&Œ½³×dYà52Qæå^£¢N#iÒÿ;Ír—F²ùÒP9¹e=3è†qñZdi:!›H³9²!ol(á ˜Ù´x+p,{Z°=-~7 2/U…|°QèOu"$ …Ø siƧðÂÃÁå 3øQe)ëï‰Að[÷˜5¾Òdòë¯_¿~þ…š˜ÀÛ7¶‹=ì€Ê̬Â-6R´›9[ߟв*:»|DŠnq]R9„câÄ…GRàL/Vwù4 }ÞÍB?‹ps%ÄLÂ$Ó5½­s`9 )±ÐU%¤·tlÌ 2‹DŠÝΞ¨r½±ríO?¼¹u˜|M„/køìi¯iRw³Èm`ÕÖ/;¥Õ¸Æ¥+£×Þ5wXmH]´uQQ€l@6Í€Ì!7SÄzSý<J£çó¼=K÷-Æ‚ÄdÙK e¿Ø“»L¶êGÚíàñÐTûYN+øñjÒOã]‡ 7uåî@ÍCÙ{ J“8V³Æé\ Ä¡(ü6çþtî©=¤<¾ƒã'8¡üuă$óO3lªÊæZÈÒÊÇÎcqð 57QÑÿPt~Ê¢ëè岸"ÜÓš¯¦mmÈÎ!ýHU¶ˆ?®²-Pw‘BÑ —¶Žö%à†–{w‡ÎφývR8fŽR(C~"Ä#í) ˆ -BR¶³ÄÄ"W?îTCö­QqVÖÌ4¼0„«Ç6Â3•ðìU6Sq÷LÑ©Ïî`}ºâªjP»Þ¸æ2 S lrqÑãL<— ÁïîPÔ÷~N2. †©cx8ÿÓ "¶x¤.ï‰bõ \ o=³â“¥/ ¹j8•²ê®‡wt,Œî2¹¬úŽÝ‚H´|Ç‚¿sß\{ çYè_ÀÝW²À„Iz.9@WG]o‘¹&Œáù]ÑÜ1;yÑ+}…!Fj ‰Öê}KŸŠ¥OHš´~¦ô)™¤(Æús †ç-jB ¢¤Ëñáwöü °wo ÃÞ¶9ûÝ8­X9$2}þ¢ :"=”ù@vë…Â\)öË¥ÒÜÌkÒœQ&.rH›‰;zµä¹/µ³–ôVßœˆâž8sNÝ”—¦4€#ìʽçOôi¹¶³•Ÿ§¼#±²ÿÃC+Q[ ès‰?óp¹'¾ÛmðÃäkáçˆÛ¸ 󷶾ЅìÀe¤C•å69kB:ö©mü‹„}J…ÐÄ6wR2­”g´‘H€n1Èìì&¦Û ô¬´{Í>…®ñ %X¢yúŠÒ{ RcÞbuz!£ø²¼1=$„óÎAžÓ>ì.Ò_3ÏéÌü;‚aA@p³ž–QRTX¾øq˜u¡ºœo¹'¾¼v-9œ–Í¥XhÄ8¨„´é·rv¯>O¹O¿¹ Be!=n(µßø§†×Ú¯Håû7LH)ÁSj‘ƒ©”ªmŠâ˜þH”0B˜ÀX x~8ݲJý—Ó“¥ÿYAVí¾É·®˜}Ò-ÄÙ,QfQg þ'DêyÄî<eÊ£¡ã,\ù4º#¾[ß±EëÞ,Ø>;/ãÊ?nP3,³kŽøÏ(®×aÞ{”’C`i4è„æÏ‡Ú04‚ÜŒ§ÓZ'ìí»Ê½«éëxî¿h 5ûÈ ½…?â†<§²E×Çö>–¾ͱ©šûæì±}„ Dw:ÖX€X‚ ¼8t*"xÿBšŠÏŒ¯¬¯òüQ`ź»cø +RÂÚ@6”°íi£*>pËùan „É.¡óäûÿ•4ÍÃ~<~ê÷ŽŸWkZàê â”þ#8ÈûðùöÃÿ®•y endstream endobj 350 0 obj << /Length 2709 /Filter /FlateDecode >> stream xÚÅZY“Û¸~ß_1yH…ª²hÄ9j½eW6U®lÅ“ÍCœŽ„1K‘ IÅö¿O_A lo6eûe„£q5¾þºœç·ß<}™ë›ÚR—7·÷7•¾©T–fyus»¿ùGò—ÓÜý´ÙêªN¾úyÜè,º®í¸ñû~‡MÝyAnº=Œn: Ý~ÚüóöÏO_êcÉyÒ5,›ýL$MÑCÅRNN5.Õ= Û˜Dn>)¢Ê“©#Â¥0™6¯ó"¡ð,>€Î àì¯_rù¶ ˾Q²›nidƶ‘®E‘ØÎH! 7ó&\Ï‚ š¢ßsA€Ëj›ÜnìÒ{ìgS3M±ã³3Ñ™WmF˜¸HPûV€gG­Ä"3ºË(˜Îwÿò‰v 2ô€x’{ÊÀð¯§!ÚÆ2Éñ—UQ ‘­¯ž¨E˜¿² 1\¡æé󆞊~Z`„RšDpEòbšp; ¸÷W“}'äw6ϧ†µutpS—µN¼<ó (ÎoÐîÖ7UòÁî,{™æv‡@[ 3qUˆÉ›~X%îy¾zÅBÙsçjèUB-÷|”Ü´ sÅß~èÃq膇á,/¹\ä’$*ÒŠq‚L‡b‹2•N^ûÜh%¹Î¹µZŸ$íÃJA&ÊP×l¸aPŽÃòbÇXS|Nø]Ÿ3†>9µ+Ȉvæ Âú’žRòv~Ï ¤ åÉ ^ó=%ñJ–Ç¡'çöÏØØáâ‚—Éô ÷‹^rIÚÈMk\(½ÖÔI[‘Šî²’t?Ó,ÓøòZyôH‘Ã5À!+ dÂgسÒJ⺠°,î¡"VCmë£eÁ“M‰ÈEê@ÊË|Ž™¸ˆñþ r0@j( Ú=™¤AŸwäŠä‰Å‹l:Cès4[N±º1øŸn¿Eâ[‹O—DâA’†R,Dx׆ƒq¬O\o¸ztÇ;G{™B‡Ù±>rùüˆÍâ¹±‘×™>ð=l«­@Õ²‡tæˆÚÁ]â‡~ôNÐùw˜”>»¢¤<ž^t¬¹Ž—è‰u¸ïèÿ1ƒjKæ@S›| …>q ¶ðKãΕªÒÒ**ñ3gí¿Â }óâö›ÿe-F9 endstream endobj 353 0 obj << /Length 2062 /Filter /FlateDecode >> stream xÚíYÝä¶ ¿¿b=ÀÎú´4’æhÑ´Yä¡i4¶fÇÇž³=wÙÿ¾¤$ŽövÍnôž,S4%ñGR$ýÝÝ«7ïßd$SLmî𯛄Æ$æÉæ®Øü},ûãvÇ™ˆö¥îLc½¿˜v»£2*M·…Çk sUFe}ïxúÆ}×U ²|ÜÒ8¯Öuí¸Ì–Çѯg“÷N¶ˆÎ¦= ±^&£“®sãxu7|í ys:_vÛßýuov”’LJ·í^÷eSëªzØî¥QY÷¦îÊ[hé[ä#nN·Å›ït¾eqôË@p\ººoüQûã©CbuÇæRxËRûç¾÷<.|4¥~xí²jtApâÍ;Îf(ìhœnv\Áã?ÎxX%iôç¦î[ÚT•Õ6ßî> IWã¹tUî[«·ÂgØ“Dr'þm×—'`µÐÉAÁ’Ãs'Á’ϺEõÉô¦ím„ Ùýwb*Pº¼iýdQv½Wé÷|ñgC 3q"úáÇŸÜà_qÌªÞøU¬¨ÑìýTÂܾ\ñô½ø•¤ë VÆàˆžÝŽ[óþRŽoý±5^Ï` hqÔ{F«¢ºhN~>4Ö„í[yÂùK¥Ý¡a¹ˆ”0šF‚¤”ºÍïvoOs¼@šxyL²LÀQ-ן‡P3Ž„$"ꀴ„l`ø&`.8†ùM`ñÄà ƒéŒøV™úÞ —µçXœ{ø\÷8R‘qögÖrgæo ós$'4õB@ëÖp0Òè3ÒúŒG|NDßû±¾TÒÒ£Îâ8è­*&išÀúi:¡õ÷ZŒÐ—ÆŠ¥Ô锥 d¢ÊN{«˜hŽ>`èù8|®CVÎ΀[,2‡ä%ps°”Û¦‡Ñ*ù%“Šů€ûr3–•ȧ ËþŸÝlŒÃψXB¤Ê/˜_Ï íÉ \Oia¥G.…d…BâQHæ(ØbÝ„mQ ’ȫĊü=r¸û쑃î|2µÊä`Ü:µÓÄ–ú~œ´Ê°\ƒ2ð[›ãq2I|›LÒòM b‘²—5IL›¦î‘U‚?úÒ$)¦pU*º4E«žY“dµËñ2ˆSuQºv"Vj9®-[Qs E6ßõ´#ÿåÜ*Qô°‡ˆPbá‚ Xë®Í!˜Ž6ßšóЛƒØ®êŽMU<Úp²=Œ,YçàÅ#MŒ8{ɔ϶³Áž3±h³ñL. ó÷¦6^ÿ'ÙVvàöHáÎ|îÊ~m­ÛÙµÛö¦ï]¹«Ÿvö¤Ü¯ÿ  z€·8òë¡f-Ò é è9¶,ר"ÑA‚#¤]ìp¤CëÚò?põKíÞl‘qEu)‚b«ðƒ‘·›Î³èn`(fy} ~·át‘ï ŒÆ‰ ’ªuºñþ`o⊙Щ õ¿½ïþ׬ã{“WÚfýj¬¶”or ©¬Ï—Ð>³„Äôöl’CÛ‹2tø2ö„u‹X-¬[ùd[ÍòûÏ.´Yˆ7q–=¯R¬EÅÑ·ynÎöçîwµÏñyu)L`OPÁ>)ÆÙd×ëÀ⌖Ín¦katÂøª>¹@–È?)P‘T‘âÆ^׿äpü¦ž4®Tûÿ„ %)Ën–r©K¸úÐvÀ’¤¼YÆ*û;Ò®S¨èvÙÍâÎÃSXß©Hn–¤YHž$óÅþØ.ÒXB8Ĺ…Dr"v­”p‘’§r)-}ŸŠ}µÛ^W‹úÒ7…éMÞ¯²Þµ'/K¼Ë’Çr`¸m¡Ö9pÿé¨Ëm¤þ¢®íMº¦e> stream xÚµVMoã6½ûWè(CR¢(-Š²Ø´)Mvã¶ØîA±h[¨,¹ÝÔýõÑ–Ô(í¡íE"‡Ãùx3äõjquË gy*Ó`µ „LÏ“@ Îx¬ƒU| £h}8-¿®~¼ºb–š ‘œPß"IGÍt’y@3£B1_4|G „_4vIÍC»34h–‚‡§ý“9â\„í†ä‡âˆ+E]›š$Ï8o&TøËRò¶ ®£)ÊÎMÚE®XÊå?ù™ÿ+?'Ø2Š^ŸÉ«Òl–1xsªí7$ùáîîÝGvøÒÄ'A$EÊR8:‚åJ‘~Š_,§ñ‹]ü@þöá ÖíÑt´VY•ÆšµíhR5ô?cHÛ“S³/Ö»ªqgDô³»Â:EÝ’€ž$ƒVK©©ŒS ö;U¿WûêÜa¼"ӻƧ>:\ ùÿ‘I" œý¶”*,ªºxÂYí6ŽíÚt]{¤)¹ ça¤DÖÙªÙÎÆñÿË‹œeúØUÛqfB<r² ¢I6G‘˜ø9^È ]Oc8Ћ֗Üë4$ViW_:¬+k=¬ÚÌ IH§Õ'ãS ²^ùÉÒÄe‡&ûù}&=ϸ¥h®çü;ªý”3^h÷h "Ë “>yIþ´IÎ cÖÀXd`g×â(—{lkS1¡xX\é=9Ó¸sôè^£iúWǶÙt)&Žç—P÷ñyÉ™wrá3O°Å»Õâ×Êy ÅSÆE¤©d‰Hƒõ~ñå+JXwYœgÁsÝ’å©רù'*ž3Îu¯J ×ùßc#xIJ™1)“¡[õŒŠ•fP±Ó¯¨!¥YØlÕ"cÓ<¼ÈšúL’×Ê@=¿â{ˆˆ"É×íࡪMI‚çÊî÷pÿxû™„C›yw:°Ü–M¨‘ŽÍŽy߬àO]§L›qÌG¼F\e v¡4 wƒ{NË“1 lß¡TØ ùn7Z)œJp½‹lµw»{ М }Á]eÖgH?´f zp‚…D#ˆT×6Œ?y@M±XbŽA&•tnÚž8´ãÉ?-ƒKCaÛnûâIDN!Ƶ»‡[’ì‹ÎšãÕìÝ\"zì€Xo–Q*5\üý=€›‹õ8°ÏeR–(Õ7\0ÍÀ5oÂLÐJƒ¦Óiu{ µÚiÎg-D•dƒ_`צ½iHžœš†\—Ú9Jã¢) 6ãöÏ\ñ>‚ îæò×ÕŒåµaß|¼ýþíýûN°dÛ5-P#Uõònœ^XÊÔ7Ô$D >5%½žT¸-ŸÞÌu/¥˜H.O&ÜH2Õç«‹a3o?.˜JÄH‹ð­5Y<­Y<äž pøµ†¢]CѾ#‘‘®¯ƒQs ÉÐnt6¢LéNr¨I™bÀ¼½/jHÂÍ›ÿµ†`ó\ÖEàã©AžòþÙ…W)üï+×ÛÒ_Å \‹§îò¢™äMdÞ—Î6y®ÎÙÆ™ÊG·@¤!dCðØW²Ð»°¡ÿï{·Æ,I³)›ÿóÔBh–Â5%)RŠŽ\ù«öO;qNž endstream endobj 359 0 obj << /Length 2997 /Filter /FlateDecode >> stream xÚå]oä¶ñÝ¿bß²²2¿E]Ñ>Ÿsr_9; Š4òJö ÑJ›•œëýñá”´+ß]_Š5`‡Ãù$‡ûüöäìJŠW‰TF,nï©X¤,K´T‹ÛbñËÒž®8clyUÕåéJ¤vy*زÝoó¾;ýõö;"À“LkG€-VB'™ä4ÿåë×—ïiânïfþ1hÁ(uè ¹È’Ìãéñ,ISOïvƒSò3ü½°0Á(œ uµy¿ìÛ}•×g÷L6ÛíÌ Ö&)‹ª?N…^/n™¼¡¶<•lù÷|»«ýúí½GÀFÒ>%Îo.®¯©Ûå¸g¢8á›ëerº’2[žûò»=ÈZ/«â¡,Dóö]ÕzœÊsÕmZ¤ð¡Á퀀„L,èoEz lʽ[æ’ð÷í…­,ÎYNàÀ”RËmNÌüF3в.{ࢣÏm^Dch ô±®ý¬ªÿH¼)¨Óíòuù,jK%™å…/²ÄZ œƒÍ¨‘ÉÈ3¯ÃûE&œzÿ¤æª¼Û?æûô%—¿:)€¡Ô‘7ç¯/( ù„ó‹ ·0þî \ñ„OÐRB{qysáé\Uwû¶)×}ÕÐÚýÇ]I½kÔ7vŠv›WÍÌr¯.ß|ëéX3³Îù«w/ýx¾­šv†Äû+¥„é¨'à<éxÔϽxûæÆ“ÿHnvˆpã§ êçï¼´æ§¿8¿ â¾ÚWQQÔášZfž1õ Ä57³Ò››Ë<%ÎÌÌR—WWoO×VÎé÷âû›_ÓJR¥$·Üά÷í¹ß¸M#ü4l†âíÅg1Ãfšd3›£ys{~{C¯Þ^œ¿¢î뛟NW w¸ÊÅ”ôûeIÊ­JgVœ§óÓõíåûç×^s+ £2}šÖ'yºzûþçó÷/-8RñÏÒrÞ`1+œyáÛ¾½ôí•o¿õíKß^{Qº •$¢ä¯n=÷Öè‰0¶«¿l!ŒáªÐ­†ná»Õ€P Å-×…VŸÒ_zýî­—ƒ€Ô!%ór€°Æ…þK&LŠ4|‰Ä(–fqÌ0ÉÒ8fDÝ8–‚î‡/˜¥)a"gÚ‰àZ›@ÈøD°¦5ÜFî”BÇ5ÓTólø’EâšÊH­â˜‚õ†±T¨làNdó î ×lÎ;¸”3“0‹^¾,x¾¶ex¦‡¯4ZÇ/†Ž>O³ĽX±ÄÂ!Æ­òµOO„Ȧ!îÙÅd‘‰ q*•FiÁåx«™–qL*auüâ65jƒý˜8OjËø“"ʤµ é"%wÔ¬·MÊðGZÙXËÒŒµíµ œµlôDËb¤eÍôXËFJË\Ík9K³i¥áOhN™f°88޲!R)«S¿`ÿœyÍÎHcä™"îdTžH„JÕ°H/*]'’+9`‚Ÿj3Èt9¨9¢O)V%Bô(§XŸóº/S¬ýqß'Ž…#ÅŽÙsƒh«Ô„-ç¤|eU4t {fz0f›j̤2¸–FrÇ‚»'Oã|eöIÉ ãL p9§þç“ÝŒOðÿ…úOÿCúŸS®‰!›ÉTŒ<[±lÈ«©VzRf2>x¶0Ú97ãÆñÎò!œÃy†=éÙYÆ9ÊåŸðíËÿ%厜[ˆt¤ÜT^Ê‘•™ënß‹øK³vf#çr¶`m(g{‘ÍÜÞ£©.—;¸¡Aئã§Ô:ܺp ÷تë;Á{Ô@ÏGÌa $pBh´”Ì>Èì74öÒÅô¾˜±*¥2¸ð`3½gìÊ$CÜòæ  œ0ñÙƒ«m– _ç úÂ~åí-÷f—»`÷ˆERðÓX–­úÒUGWuµ…~qXXõFvTmíÃú®âH½¶(k_lŸêÐ)â©£Èy“$_îöí]îã ,a.¹Mý0UºôŸ¹GlÊ0ÂXûFHÞ?A¿`Ý>®\•~:©{èc2EõPõË•áaÑݾ\W¾Pà¾1o«Hp”EÅê‡MOߎ–µB4·ŽW›.w-¸3j-sæß-V2•Ë«¨˜3~(ðÕw˜ÓàTÀ´¤3A;²@ÉàÄ'bôc>óqÇúy@xvL˜HŽ•3f.+# gªÀŽÓdAýܿƀ7 Ó´‚ÛŽŒ/Ž%˘†¹å³ÛàÜ¢>³t´ ¥Zþ½ä3ô kkm¿T.ÒUMŽE#@º,ý÷BÀ,%÷®·Î;v5D€ A”û6<‡ma/¢RK¾íW_õ´ÿÞ@øpÑ¢ÂQ¾'Okük’EÞ;sGâ–"Íà‚USTëxF<»‚ ïèæçLn¡Ÿº†Ù„‰°ÂMõ; U(yp‰AÈ fü ˉïê“9Á08:ßÿ G´£v|L¸Óo8}ßÏŸ¾¹Ø–¹{VÑý]Ï…"å_­ÕèœúO²½ò%Í äê©Úh7V¼ Üñýó¦ôи&ô!>@4ìèƒNÐ9$@"Kê IŒV†žÏÝ5¯ØX·…Ÿšä0ͺìÂ{?Üèé$ŒtaD!ð¾O.oO~?Á¬ÈŽÁ…Ht¦ëíÉ/¿²Eðï,‘™]|pXÛ·iÂ3LYõâæä‡“çø»¸v¹ŠýÆA€½e ŽÏ왘¹³¥€Ê8-$OAúpÓßph‰µ7ìˆå£ $tvGãx ¥žNæÔÉ‘qÏüOM6Ë›v[b^ï69¡Ây¹§ÞÈ<½ö~§œð™ÎüR×M_¬q‰f÷u»Û‚sÆœ$•Yàû¬ñ¦yÀÍ(aÐÆ¡ã¹AÐÙzôã yV|sð‹ y6ŸdÆ ezl:1ø(y’rÏ“BG£úß,k endstream endobj 363 0 obj << /Length 3678 /Filter /FlateDecode >> stream xÚZYsãÆ~÷¯P•BUY0æÀ1µqªiw½ñîÚÙ•s”í„$TH€@k•ÊO÷t0 ‡‡òBÎÙ3ÓÓÝ_wþ|÷Õ·o¤º0‘Iezqw!bA)q«ìânyñËlS´]Ùv—WRëÙº¸Tñì™*eÑU+.·åº¨j*ϋťŒgÿzºɬh—‘eÙRµ¹§ÿÞõ¯ªšKÅ}ïFaïow“$9œ$Õx•‰HÃÙb:Ä÷>¼þ¤¾½ç‘þ™uéÔ¸}ñ€c.®´H£ÜÈ‹+!"“$Ô[ÁQ”Èg÷mYR©/‘!_z®=\r#«‡ºiË%UìÑŸÝP¦@ü½Lbd‡N5í•úÛ¶-ë~ÅsžàÈÀ¶ª/õž ¿_Êd·T555Ô—"žm×säÖ‹š÷Ж+¸7Ë28óätË¢Göf@·¦ÿy‹dø:ñ§Ä±ç±lí~CUºÎ‡(pBdQ.2Çà_T$æòò*ãÙéï¶\”´S¬ÉX¨ß÷$d%qâè¸-öUçö€7Q¬7N¸, %=™ŒDž;€)Eß SñZòØÍISoÿW*QQ–«€ŽdV}¼þðš¶ûÇîO!¡Ê£Xë4Ër{LÔ¬.Öå«“˜ª‡ aš"ÒtcO  úëªúa…·—èÙ^ZÓ.©gÑÔ=hôóž±)eG3ØÖónPÌ”“·M%·lMSÀ ¬¬ "›Ê“^|»!mÊM¤à¤q»o›5¬<ôUx<¯2Q–ºã~ýÝÛ7Äðw·!~ë(WƒŒ‘@Ên |†Ï}C»|lV®gJº5£¿Æ±Ì“röîÞíÒ*5Ì ÿ˜ÐSæ-; ð ÖRVmì·lóg,Ú”lÉLÑQb2fJ:aJꨤ™£Mh½®t²u¨òÖí¬ÁÖ@;ØÕô»;±Æú3 §éç —ºí=v|‰íföµ /ûvT Ï£!z ì¯}ªÂFO³*;ÖY°ulip»ÛjÕS•Ø@úÍ6É;+VyÓ{cT”dƒž´í:êV_B2B Æ€”f»Zò~xUÜî2°J–€p&Þ"!…M#¡d Ù#`²—š£uILíÑõÍÍQs$#˜Íë\/@ï)9EŠx²N ½‰0%÷ƒvX‘—¨K6$ëDÁ]ÿ®‹_Õ‹Õv‰±Æ>ûÀ³ÁÇY4 Ûÿ×&Q¢2ËjQ†¨ð§üK•Yf•7 ²:2b‘Ŷë›Gx ¨=zôWJÞ Ð^–”•„?9€Éfk¢ÝÅ ‰nOþØÂy²ÄÔla;¤XŽD¢")ÔÔr²Âg³r]9'j›¶™ójUõø-«®gw‹â/´C.Ú½»i@fì]¿P/Á¥6cP뛢l<®%1’ÉÁþ ¦ä‡`^(ÊåÄí´ikøá_Æ.ò]r‡Û ß ©eœ‚USyööªR"ÿ¿J©®QŸnn_¿yûý»ÞøøÓ_?}¾ûÛßÿ }šGú»ùà³Ú6‚ÊÕûn˜â²42ÒIúR³¥\v@¥;û>Æcf8Áäd̦Z&#I M †lß j–óz¦é¯ãõ ¶×“=LyüöyúŠšƒ &õOñé\;ïmhº‰c ÃãªSR‹©Tj'•úlÞP±TéCBi³$ Ç#Ã~F†…<¬LŠf„ùNxñéÍ17„<w¥ÅÀ1‹#:ÆC× xéÖ<é8ÁXH!OWHˆvevÜ¡q$ÒÜç8.RV@„Ã’A & ô³Åao®ytòžËîäÆF·ðÀüLª°é5Y”ŒR^n/úr&×kw¯|†Á%ѪzÇ ¯H¥r¶x,øEÀJ•`ËÕ’úGÿ*eÁ–8.Ãá6.£ÖЉ²Ìã0jRƒKȯ®äóre™OÈ(¦ÒÑË@ˆ®—¯˜³!þk¬Žßzì¥-l)Ü"g3Áq÷.ßAˆ _pC™aO ô‰Ÿ€Ru¾«8rѬ¶ëšgyJa'3µ½Ì´ÙÌW>$¹q6ýí&¹óØË;6ÊBüã¼.”0ã?Z»¯¿{ËY&Pÿ`¾Äˆ|’/áT:Èá;›/7œÏÑ#Ùy¬ÐnÍ"üORò9ÄiýfÛw.Õ,ØcÂ.vƒaÎð4‰•†S%6”‹)‹íÛnº¦œXüÓ,ÒRì3Æ>%dßQPW·öBâA¦mÞ·[ÎðI òêPµ‰nìG2ìtm”ãÚ7Ñ2ÃäR²›ø9ÄŽv£ì#wºn»&)áÈ7ãÈê5׫{WïÌ$Qªw$›_6N†¦l.ð”g"§›”ÄWånly L ±\z2²„sM W•GI¦›#OAœ›–7&¡<:×€@?vp‘çŽý ±ß6zÖ‡Ýa¥R1vã›@,<€xT(:À‡±z|äaÔ$†Zúâx¼ç5”@tF™ü$$ÞÑ»^Ç{Ø1øÄ,¸2‘ì<XRx(€,WCÌJJì¤ï¨Äã=ûUfé³ žém¥Û"‡}‚Ò ™*‡€•[Û­ì)a"([ØX+g$ƒÈ£…‚53fÄzã€Ý¨áƒdYKiBpßRbáÚ)Û £ˆ¯œÓ°T컢Aô§÷ËqY$MÝH›t´ÿóŽß²H—‚çqK 2µ©{¡bÁ{«K—Í~Bxd.\u›rQáý,Ül»¦Žgî-ÅpTob€˜U96óùܺ$ P°É´0ÈT¹Ä|œÆ¦2é õ°ÓÀ|Š‘@[>ŒÁ|àK0ã“àKƾb8€ñcáÉ”ëÕ½«sr K0‘+9E“›?~>;Ñy3â³Ô œ¿«–Û’*¾W…õ#¡F’EÙ˜Y:ø%F’O¿Ä¢‡¢Esad|aD$Í)„™llDi_AB£Ô¡Pî]ë"Œä×W» 9L.¸È”}8šæ;íe©Ü»,•`"•ñžQ¡‡ÀKle°È`‚ƒ­+÷:a‡¹&g?aÔ&ؾ&ØTñ¦0±la6)-¢tÌž&R`‚ …ÁD‚³À@/K õ=Ç:^beNh't¼“©\RãÓcÉÃ8¿O$ܪÃ'v]á=ìÌhîCjøB ‚ —Pv.=~>Ärc|GÇVüÏý0™>FÒ9 6cP%Ëÿ<]gø¦I»Æ~·k,Ó׆GØÇÅU_mÜn-\.˜³!, Síôà‚ýxªÄy~„Ćuñ¥¢µÖÔ³ªÈ€¯ªÇ¦YÒ ï2S‹Ô8}*hq¨Œ7¢³ÙÏô‡cسąWÃ?[XöLâžêøq”cAÛàyFO“ÈØ=j¨OÅ¿Dã[c¨¸Ç¡ýÇ0æz´]2 «RšþQÁ¢W=©Ðxýv7°.ÄÀKª¢âCü@çpÛf?WD™Ø|š¾túþƒ—mˆ#³ûTn?^‹‰GoÙÙóön>Ÿ=ùJŸš™Rn­¾¦;©„Ô½ÔDR«“aU>&–*^ø0è™HFïP~MAî¡°*QâdXåmÌo3@/éÐK¤^ z£«›æ(÷ñò \,³ÿ·åov÷îL˜½ØJxph?<l®ppˆÓœÓ-8´_דO‹­Ä‡DßÅVbqRåbìb+•‡c+â|<´ºâ1Ó·FÃ,ÝË¥Ù²–;½(J«‰Ë» ¥§5ÏóËÈ ãÿÞDYFAŸûø0¥ïxÒýïx²½”¸^9H3ØÀ:–ˆ3ìüêõÝWÿ2#£ endstream endobj 366 0 obj << /Length 3895 /Filter /FlateDecode >> stream xÚ¥ZY“Û6~÷¯PÕ>,g˃ ÁÃ9ª&ã±×›Œxf³•ŠS[”DIÜP¤"Rq&¿~»Ñ ð0æ¨ä‰ ÎF£¯øúöÙg¯”^ä"OT²¸Ý,d˜ (¥2a”.n׋Ÿ‚¿}ùúòì< Ãàææ¿«¶éÎ~¾ýŒ‹FãR-b¥!¨«¦<“:x~våqP4k(¤ap8¶‡b[ô¥ù—AßR}QWÛf_6=U¯«îPgQÜu8 #5&4ÏEæ|wè«¶)jeq(â0³??;e]wÚ—LQ!ƒeIÿ ÿWûß㼋óHj‘èŹ”"ך&<Ëg“d‘ÁÊIŒ+Ã`äå¹Ì…V9u¿¾øŽXùE÷•X%`,Óz]€ ìi€„wˆÿ2ø†Q±ýœÇëÑ’y,dê¸â_ÈQ‘ëSu´FYõ»òè™2ʄʵí¼ñ̉LG¶Kë›Yç¶Ë]ÙÝG˜›æC¨ÃUÑ•D^Õ—»ª¯~;S:(¡Q 8ÊXo6Ô£+{âNßúÖW¡H1¸‡€DÈȉÂ+óØB ì=ÇAb,Ê9• 8#UÖ aÀk ž¾f.,ì [µo×eMEÜqWrå™ ÊºEñÿˆ»å‰:ú.€Ö¬AžUœ¡¨zöœk¡sùðÑ…"MF;V10pWô–¢Ñ&>V5ºdAiÛc¹†ƒˆTÜÚÍýóúú³‘FÓ~Ä+&"Ò–W ­Ë -(ª ,V;:Ê}ÑSQv Ú ªTÉgƒ ^—h/~§ífÖŽäC­šU[Ÿö •7ÇvÏSï*»`e;û’Œˆ[¼qÕ<˜; §ÇêŒu u°Aº@'Ìϯ§ju¦Âà—ú+dÌ¡j¶Ô SÂBwôÓ–]ù뉆à*÷K˜aYÐŒÔhl~ÍΡ€+äնBóHkžŸê¾:Kê’*ݬÏ}Ûù­*à ÓŒ% Fn}†9OÇÆ0ã´Î0›ÅZú.y͆ÿÑ0ÓO…‡Œ°Œ#!¥ššá—·WÚáL„ÎD¾4’§ÒØî^;­…âG<³¢£è{âøinÎg£eœŠ${ÌHƒIIõØHãZ­²9–LGORßSýš áa"@´P;ÁLÞîì$ƒRÃ[Ù6(‘XC’‹uNr±ºn·[T£Å2ME$Ó©NFȃCÛ•c·-£E"ò4Ê cÁU€7‰D"yØG†R¡Ó ëÐËÊ‘÷ˆ³L¤à8&'|ùîšø§/š¯~~è¬ÓXäÒYýËv¿'¼¢"Â1Tj½þ6>¤n,¬äwk‘vG¹jOMßѤ+ßZ*hŒ~î—å±³ *"å¦Cú¨Ãt2qø°^AŸ¶)χ¥™"ÁŽM%"ÖLL˜ù#öÖè FCË =aek›Á4Ô‹øh´PÊ9|<1/ñÉЇ)…É呿î 4 ¨ ¼vø3ɬCÎky†ÎàW`¢¨%3 UÆèÊ% `Ο4Ô%õ€RìÚ¿Dì›Ò3’ÜPP­säkW2߯¥2žò·ŽG%Á±\µÇ5• Ý“úÝQ=¸‹«÷TÄ ~ȹG‘±a•±®¥¤ÂŒ£P3p‰•[lÚ•õ‹'GàüõiU-qžš bùužÅúþSß‚›¯VEM(C]£ÂŽàý|gÌQ±¹ŸŽ»Mè%‡Q6TšäçT=2m±ð÷b°[üÔ E HýAkiıùÔ½½¹úžÐúQ‡scüþªœË,›^3EgÖ÷Ø€DNA?L6 F?Úü;/-Õƒ wP›ºTM_nP£TV\fôeßÐŽwÁk±àÅÙ0! ù„þ©š üȱ˜#®¨Ùbƒ¶1Ž-vŽ-;¶,°•Ö±eαÍNß:6÷ø°‰0(€8á è C¨D²oŠhÀÕ«WoY6ÊÂÕÆP[®†óˆU蘋rz¡WDdŽ…e’"•¥g/hɉ”`ÅTJ°ç±,jX³x`]éß@ˆ¿þ”zlB¢=ž³x$ ÉÌ:á‚ãÖeoÔ¬‹HÆüÜùxjÐf‡QwûýòTÕkßQ@À?ÄGë“CU´ìp ¸ÞÇ3GowèJÐÐ$cQƒî`ˆ—Uãã €OFŒYÛ^„°lBâ¼óÜÃËŠéYíjŒ~•Ö…©Ê¬©‘Ö•É"P (H·öÄCüѨ9ŽPpžŒ÷)g•Óc,‰r%«”XåôKÂ\ƒÊáòOQ¹Y8ò°Ê YV¸Ëonþ}ýõÕ‘pÒp{&Al¬¹!PMSTð»Ú•vA¸âW·T€Ø>j”s•NŒ2®DP·¦Ü#3œÉàÔt@†ñØÐ%RçËŠ h8¥>죳™yÀ¾…ñ€hT6å-8âÕ©¦ÊޱD²€… wT>Qh‡8¤@/JJýa‹BÎr—#,iþwjV,PAqýd¥q!O(ƒ'Õç¾hÕIù(†t å{sg£Ù‚#Ho·Ìm<^~äS0ÛàbTÏúS!³¡~4U sfБ„Bkõ4?“§"³Q.‹ýë‹ÁË<àn4DO´™Â,¿]96zf?mïÚzÍ»x}!™ÍÚÖ(vÎ7eéCoëvuBVÎ©ÝØ±ì– ܽŽé÷ip,–à­Ãl Çn/ÿ2k,ªìz+ +€²› såörΕÛË?Ϥ÷q®(-dž:çíY2u»Õ5`VŒ4Ayð˜Y\sÆ÷„iaª³†ºÂ™7¤âHèl”^Ø‹hâ†p}2[{þ¿£‘b·¥¡é Žý£ÌÍ *™G”°=Ñv‘܈ïÀœŽG`D™lðl!”ã°ûÛw—ßzöð6L§¾æÄHyÛT„[×>%Éhïæx½üIòl>7'—! 1ma3kêV˜ ád DéÌÙ®+—©3hõÄìÑq8bçž'*td_ßüð„Û ÏÞ…–÷üðæöêý×o|¬MyN®EÒäžt”J ÈpèÕ»÷ÿ¹xÿÒ‡«¥ˆCw¦…ɥɎ+Õ"‹‡ Æ/Πët¡é$C֯³‰,•½ú­%¹¨Ï­^€²Íá”Õ[Tk væj¨HlëÚ¸XìT·+¶zØlL&Vwu{(Ç1’äÔÖxE‰ƒ1p؇!«ï>÷¤·@6E,åpý¦ÿ}‘Ì£Ox;M”A¤9'L¤ý…C”kác V8–Ñ4Oôñ+Œaîß*ò2\ØÃˆ…ÐüCl_VTk´ÓæXãXÞ·Ÿ8ç)?„QìÙxŽ!Ë{/c’,„1¹È²hÎC.å©mV¡2Á3l¨/ªº£öIçWôCI”ãšoß0_= "&ŸTh‘·¿÷ x@ºóv~$W|ÛÔOwìX;ÉP^1Êtpa®si@&wåÄ';„ÖÊT³±ýËý§ëñU%´ó Ñ TZ|Ü„õ-¨xA’¿ìâ,e”tÕôÜw6E÷˜z¬Ö”iöÝfÿ®–ì½™©ÁéóˆÎbˆ0O.¢'b ¦TÉ)äŒÜÜ‚£exU[ãí-£ŒGYtj G8ê@ÞXÅœÂbWšèoV5ÀÀ¶. Ä£KSè¶;íé²5Fk».–U]õw÷,ÔdêâøÉz—z’Ðoª »Û/[–ˆ¢>ìŠeÉ‚[±vœ”nXþ+>ÞŽ$êTÃÏ]à§ž§3,XE‘³" ÊÕ@.§_:"‘taÔÌ×çf3 Ï)ÜQá(Þ2% *HçÈ®ÜW]Gü>7ƒ€3ª¸ ¤}æ B§P\Úg g‰ÉU@ØÂo0É8\h¢4×=X_ñEݵT3¨ ü°ˆ(ÊA:‘¡IWã „ÃÑ,ú[µ¶·˜³¤}ØÌAÞ9 Çf•·†~`êH‰ÍóóD'Ïq¹¥Tì4þUÍl:â”)§Ì%gG¨+&‚jæâ` æ;ºÝµ§-^|é,85<èM‚w¸1©>l¸GpU$¢,yTpSgúbk¡¿ÚšJs¡ã‚=Á1š:Ø .q‚jþâ+S"ð*^i½yÞw/|q*ØÂ!$ÈBF0ÔŸ#Â,‡2ä5ù™Þ_ªC7³ù,Ô?m«/¨D«Gø ýÃ|ÄÐÑ2ƒ½Ÿ½nÈ2`Šœ¦;ß]÷nÀã•B,™Gõú‡iÐpÌ‹Qí7~¨ ©LRU°×(ÑGãgµ½½ÆjJ+Û·ÐÄFª¬€¢mSoû’ç)¸±µ/HfëÌ.n±ÊfËgLŠ 6ŒôøžØãõrYîØÿÂí¢ã}.’Ëb!õ콋—œ„ËP.ÂØN?¢¡@È=G×–Ô°-i„}ö}ì³'¨ì06 ¦r+ÚL0€èË‘°ª³K›_ûvh‹ËÛÓ슖·j\­O¥}á²'ìF9>ïÔÞ@ÅÀÊæÂ˜u"æüs]CKH0÷-zÍ/¸èz€jÖôÐÜ<8þ磷qØ2¾3¢æ–òÔty`LGÎÀñœyŠ`oð½!œtÁ!r„¾¶å›…žo)˜óæ,×ü¬Å,~äèC»¥ ƒòÓj»ö<øGõÍsFX±ˆâdq.'dÌ*Œ²çö´m–Ôî+yo˜îÀ†ê!b(»ƒD™àŽðY6¥E’ƒÁR\f´¬ 3+&ÿ7QÎs endstream endobj 370 0 obj << /Length 3569 /Filter /FlateDecode >> stream xÚÝ[ÍwÛ6¿û¯Ðž,·1‚O‚l_m“ôew“t›ÜÚ¾WZ¢cn$R©ÍºýÎ`¤!ÙÎK.{±H ?Ì'üû³§/”\¬Èd¶xw½°rag\ÙÅ»õâ×嶬›‹Kióå¶]WzìªU_·ÍÅïïþþô…TÑç|q) fýÇßoüýMEû ÖÍ{zýsYmÖ½•ûŠHN8’3¡s íjÖeßî/._Þ&X0‚q9 g8˜2“@öRV˜ŒúÞ9®2娨w=½ô/€rK/›º©»L/°?|åEƒO^4ðDã^pAôÐßîêU¹aįP‹ŒVåȯÔ9J,Ë„gì¯Ä²,3²X\F£}‰2pS¬Ú¦ª›ë ‹)IŒŽ,íãR4|8uK9¿0|Ù‘ä¤å,ãÚKÎÐÔ?<ÿéåkø Ë>¸}©ò˜ª;ê _lVµ¦¶Ò÷A·ûÞ5ò'ø›-aƒ© ø^ÝP_×—}Faš~_A—ÿ"Ч…ACÄ(‘œZ¿û0æªz_;,;ôF«ô“ªL¸Ùðw‹Ø8'HG,»–º`ν]Ò‡ÅùÏh%øXmë®sÛo»}{U^Õ›º¯gÄœfs8`€&’C4Nùéøºé*ØUÍ—=5pú$L7WŽxj¹`h‹’a&XžÇUGí4>ìQeÓÕ½£î¯/ÄrßngCI¾î1Hè–aª)çÓA8ÎL†w¾ ~Áÿ¹\Wžjã6e{Uí= ÿoüI3åƒØѱ²,Ó6(¿%ˆÅŒ‘aÄ+a£ó\°,30Ó…ŸH$޳f0M4æIbªŒ £ÂLG¹Íîåv ñò.·š)[L¸å_”ÛGÈöÙ]nsÚòѲý6É­´Ùi¹ä)±LV”3nŠx¦OLöEeÅ£öà˯ê³kºªoá§<ðpK»,ñ'MÀý»ÓcÇùW稈UzfUœš€æ+oq$¨0|ó:õ~ DzmœBùoÝõÐçm,u¢*îh;tW®ª›¸7ÍŒškSWõ~@°cðÈG§Ç;U~|ß’ òHNR[–åÃáÙ´à@ І?±ËïÉ„„93Ú„QzwˆƒÇ¦îÐæÁïQ’ÙbØ}°Q\$xæp‹0è»oàh1¸j|uî½5ÞšvJtî­)%¼¹F£¯í5ýö¡ß;øxƒuî+ßí]:|ÜÁ‰q¸Ðƒ“töÒX¦µ˜æé¢4ã£»Š”ýl¿qÃ?:'!qp56¿—ì ͺ›-z´S©çAR…Iœ¢™»8_ºƒ£÷ûz0±øŽS@;ñg@WY¦i/“ÅÀà?Ÿ¿þ)± ©™Ì‡uâV€T#±{+Os¸ýÂÇà‚ÇgE™RJ@>ˇÝùGJŒ°x­b1Np¹ÙÝ”Wá$võ_(ß¡}ÕÕëCÕ!çß$ð£%#R0Î=|_ÁFàÝ‘Ñ kL0[ d‡³K Ð‘Oè_ „¢ øíÃPò®ÝS ÷]áD˜LÈ A‘´1™ÌÙ7 *2K?Yx{•Þx®Ì¨1ܦgƒ§ íÊ}˜#ìaŒg–µ[á°°°ÄùzJß^ú€¯@”OÁv sŠy…†AÈåê¦Z!°?à+к§.Rã;ˆæÀFtÔFRb8ÔØÖRÓªÝVÔâ|]hi÷ ¢üBµ6~¡ø5Ñî²UÜ0 ÁÖ)¶ì ¬§®¯±ê‚/@[å3[¢ª„±@ æœrt§àv{ÕnžLA8(õʆ«Å°‘ ¡…aÊätµTãÚá-Â.váÆâoZ½ãÅ ˜WßÿœÂ‡#S×´½|‘îùÒ$4ŽãW FïåuJ·Éœ)ž?föH³ìĤ`vÔQ·UwŒÖàžÖÍ(ÇóMUzi?ñÍ-xÆÅÌi!JØpjDF B åß›¾zH³”vÛ‚C7 “4ôuå?º@ëù¾Ù:×[Víæ°õ“ Iv›K”qO‘04’/”Dñ ÆÊMÕàùùÖ# ìuWE`%ºQ&ɃÔ7þqy~Ž$pÄXyT¥C„ÍÁQ‚£;hÁß¼~›ÚEÄvµOÕt¹{+B“ŒÂr1}˜;Â&&ÒØÌÐîªG±rœÂØÓàÄŸ’18C&‚°¨AÒvægĈ½”2÷à”€¿‡œø[ÒOÜTô¼º)É_õ2S´¹ðÉ(o|äífuCcŽl±Hq:è~)\ãÒ˜—Æ›xh<ŠË,ÀðË‹´#)‹”’Dê#Ý4ÙDI«Ž)I ¹yøÜ'QÈ s/ 3;¡ ~°>Á›²ŠðFÁ]n êPs]é–Êí2ü–ô@ˆÏ)*¡ç*“•ÉuN¢àô7+Oe"rxEÎmÄGP”Ü´%úÙ±§bo#ö”ôQÇQ-˜ÉG},ˆ±fLåwˆ ó÷ÊS‡JF"QÁT;Î"òü 3&Æ,Óq.ô`ÈÙ«E¡6zC/÷0…¡Î&0Ì HÐIJo~À5-éu€!<ŸoÏé!‰G…¹àu½*=%ªæ²'jÄ4íZJeÐ[ͼF$»}_{|çÅm4Wë $}œ3Rv¹ƒwâCÅ'ª"¡‚î©ûàŠ&ŸQ¡ÚÔàÕD –6µô.‘ÌŽƒ¹Áº¾='‘T¨2vƒäpº‘ŸÊ:/ŽA”ÖŸû4’Å} Ž”³ƒRåáFÞÃoIš¾XdÁ¹"‰ÒÂ̵¦ É +&®¼F(9¸ÊŠ•K‡h;8Kv¬±X9˜g-b4ã“>ç XÍüÂ*…$gÖ¯ò%U1¤«b<<ÀÏ™ŒÃûDJ£c%ïÉh)¢\\¨¨ªlé¦WÁ’c v°’)*xLÊL+1Ø­º;¬¡¢Ö>T„q*â!TÔ¾` ½Q¨è£R–ÏÌØ$x<)mA_¼ó¨ý>äeO‹š¨Ä¹Yðy9IÂaŒDZßêEX„*>a@´÷Ï} x7W _.eáÝúDnQC7º=Rµmf¢êÊ {~z’¥kënZÜ­ õ 9J”Ï’sÍ‹™_V–‘º_–ÙgG®º¹“IC™H,w"Œâ˜£Ã¥·0HWBB På7å†^ލgaÓº8Y£áÌŽÉsçBéÁ/‘jÌxÍSêèdÎçÓb«ÌÍÿ5^ê‘É"1˜H‰I‘3«Mï²ä| WO^½ò^}$„篟›`™ÈS•¢dEŒe㚟'o.2ö+µ*¨Š«)RF ª9ù•Ø„—fð7ÔM5·Gg Î{d—KÉNA蘔³?xZè=Z©Çïjà˜hvP0%>é8NŽ~áœöû޾fùXx”žy¤Ñ,S“{C1yÂÐ¥‚ƒR̓џ®ñ:aþ)|¢¶}¤2)L7厎A’s­9&5(*CÝúί¨ ÓÜT_Ü·Ô1Þ»ÅÄ·;+Y8+& OŸ@ºs…¸Ѥn'õÏkÃ'RLÁKŽ÷79h¸ã^jˆÜæbw·#«Ç‘¨©Q0NÅ:§sÉ .ŸVp_Ô óÍ-LÊÇ´D(R—]…”Ǹž šÝÉœr<ŒúMJõô)üÕ¡Ü q×:ÜÙù`oÀN&:lÒI ö¥ÐËBL‚_à#¦–j7ífûäεÜU»ÝVͺòmqèaÓ×»Íp=åÏ%1I¾CˆV&qe¸¨ûîSäeùòg'ޝÐdÞ `ó/“æáDµ>&­ÛŽÆÜ”ã}·ŽÂ¸M»«<±’zéÖæ¸¯'WÃûcV°÷,nÑDž©D،ʸ¡”Ž#)n(Bóð¹²Peð2É}1º¯ê.ˆ {2&›¶aßcÅûªuÈ4f¹kw‡M¹§—™HŒ™ÁŽ ]³¥tÔºÂ"">\ùa«›²yïdd0™€¥qG˜në¦Þ¢…mSé¥&¡Æ˜‹ÂJ|$K…þÄšËõzH8–ô3Ÿ0Ñ΄^†ô‚;o )€b*³&À¿ÊëéÓ”ÉPîê¶â\1\"h“žÒþKKŸ=wöçº |!ð¾€ãkìbµ=ûõw¾XC3`Œ©"_|tƒ¶àî£V ¶ß,Þžýëì¼Î¯%„…µt—ô˜¬Ídj~¹3 q(Þ;p.Ú¥‡C…c¶ R>&¤üÆìÃ~ŒWæá%Ü×Á¿ö«Õã‡íñpðã›W?¿¿ ׳Áê=k›ó~†¯¶¹>t`C:#¦N)ÅU˜ëÚóÑœœ[‡íw…£}ÌE¸*0S`x. w1Í—ZÝ÷è:ûëÒþþî6å*xÚ®,{Úᆚþ_ÀÇ W•W³Æb±TcÑ]†CØ!"1Ü‚„™{•Ÿ<~ÿQ¹'L;ãHMîºÆ>“û$Ȫk̦¦Ìÿ”+¯üP4Ú “Ta¸?v&oàŠîLöÁ9óJ—OÊ1™2¥N‚,UèÆx¤€eðžs ^„ö?G§P endstream endobj 374 0 obj << /Length 2981 /Filter /FlateDecode >> stream xÚYYsÜ6~ׯ˜ª}áTyh<ÀÍ®«lEŽÄGdí¦RÙÏ-ÐÃÔ±%Aa˜Òb—Þ>·JJ«cA+¬yZo»ûÊ¥HÆ ZØ8¯ íV ”¦FÛq%óÖ<_»â±R¡-É>ΕU¢É•¡Ø/OóÒž–`‡…Ž®S2æîIy»ûìA-|ÔwHB‰r(²æ¶.ÿ‹tV?‰ÕFK£»Òjø´ånïØ\3“‘+ljwñµ£„J‹#;,VYgÕ1·ÁaB,àÚ¢nüÉ— €*/ÿ„ N+Z¸|ÿ’V½ð»?@µcÙ`J‡sò´OqxBÛh³îØ[ÊÄCMg·RAXÞn»¾‚06ÿáâ¡`¨è³f³t+Häe © m+½ö¾íЧ€.‘1º«ã®îYÆŠ¯KyÚ¥×iëŽjއŒÇe=ó0ru»‚Jå ”ã ØA9Òöģʅ*k—,ç÷Êw³ÖÕö¡]Éxò‡’Çΰg“KdTdáKÀ& BûƒåeáNé¯iz1Á̧‚—ú<;\ÀG^ÀS âZÍ‹V#`øDóI8´îáåð•vÚÒ Ùt „Û¦bQ!õcÖ?Å)ÔSâÇî¥~ÅyEjÂû@*–îx éî~ Â!òC‚?\—–f&LeðvëðôØ0îs² œDbyÂo—Ñ yžˆ8/_\Y²¿K¥d·^–¿“F• hî ‘8ô5¼Ê©ã`úòê5=ûÿÐò‚‡í‹¥€ðUÒ¿Ù?¢k—ca{¿O-ûDû*Pnÿ2%üÐã¾€=—~n3:Áqœìح鋞 8²ÆœHÇô`ï1A»Ú7*šª™´³X‡šA)·ðŽ{Ý‹ï’*Ýí œ²ŒÀ0‰U¼l’ï_^]ÐèåþPVÜžyF¿J± TÚu4“èÜV/ M“eGlR±P‡DF¾PfžÈ·æÍ‡^Æë_Áøql!%P 5ØÆ6ŸÞ[ªÀ7“k/(8ð!Ç-úŒeîB±é%eôÚBú%õ‚°FûÒD%õB|r1P|A”~ñÄè:ðEÏÃcÈeÚ|+@$æððy€ §¢)âˆÍ'‡Ñ&t=C2•Î<"~Vñ<5àuÚô. ÊZîhpóÑcr„1×¥8²ž†ƒAyø…ÖÈ—Ô¸ =èÍîT‚ÀøG«1rˆVdB*âŠOEl:‹‡G#Yk?94û5œm«õãÅùÛ‹O¸óìâêìËš[¬äJÃC0”r¥à2„Ívg¿ÿ!V9,ä<˜Õ%Ý­hÕêÓÙ/g¯¸;?!Œ|%ð$.ÅåOþuyÎXržPnÓë¼ìÐp®¨ŠÛ´n—ŽrüBâØâ 7UáÁ0«´("µ‘³GÎØþ…Ü1rŠ&ˆ4A2"‡" *§ªØÌ_ÖFÎ=½u§âó [”8TÃvGº[J¦yéŠÒ’Å€`pUŽt%7–‰÷û2s8'çLû|pÅ\_QrwFéMWÌëÍQÑ‹o’®-*{êãÕŸÕO½·…Ñ’ŠÂx¦¢”ýæÝ»‹KZlŽÝþØáÍŸQ7•®ŽK£«ãáÎÚaÜ 3o,2¶2[lÞÃÛ¦Èû7iŸ[ÆÍÇyf™*y²w •%Fÿ¥är‚ÎÓ„¡ hÀù"u§N„ï·¾¿ˆÞøÏ™4ó$Ave¿™"$`èÐiz˜@÷mž°‡óoßBO&i!é[÷ §…d!-„ÊW,OL ‘j¾'Q =A`Åßê ?}þäO€0d ~ŒsŽ‘.çà ýŒ2NöÞh/žH?0ÉôÞ“pûnI˜°Í“ $jšØÃ‘¡àÁl{ü&tPºÚ¿¥eÂÊÑòøßXŸ7‡éñB°²‰ñnÓ«Ù¿·tà°Z'®}ˆ¾ý‡ã2«£)ëB㥓¶6xÞÕZbsߡʩñUÙ‚üÖ¡X gÖ·òõå-dD¨±¦¨´¯ÒÌ=€ÓnGEO ÔLï¡i¸É^HìŠÉè0.¿Y`>Œ|ä ?ú7 Nä$‰“'ùcÎD2€È1€È €ˆ@$ˆ\žþOåCö×Ķ”“i°‹È»p¦˜˜"z¸ÀÄ—¯þ¿ Ì$¾^ÁüMeÏJoײŽ]Ë:ž".¸î®¤f;N+ É$j/Ÿ,NÒ¯ú6¸Íª‘G¼ Þõ:{6.{/‚ëR»&)ølûÔ¡.S'—m”bÛsôׯm½Ê¡õJÍ3œf± Ý9Åj<.Ž!&\Aþ?/5øh endstream endobj 377 0 obj << /Length 2737 /Filter /FlateDecode >> stream xÚµÙŽÛÈñÝ_1@B+†÷±IŸq; ¯ŒMçCµ$©°›O¾>U]Õd7‡cG/ݪ¾ê¾øt÷äw/£øªôË,Ê®v‡«(Êý,Ì®ò0ðƒ8¿Úí¯þáµ¢;ªÓf¥WI O!ÍúÃbéf^Û×8|ô7Û8ϼÝ&„w—¦®ÚönóÏÝŸƒÔ Ìs?Ž’«€ÞþÍ_½ã]ž™Ÿ™ÙÔ6Œß ‹K[ÕbOÀæ|ûf‹÷\m£ ñÃðj†~™¦tA¥ ³òÂ;lâÀëÛ¶ß„©wÛtGQ0©ÚæØé‹áÿEW‹yÇ»®Wp1Þã qd‘° ÓTóPô‹¢$L¤8WjjI—hžÂø‹b6žúöL s5|/+¼ àêÒÏón¼î@* îÝ“¥w©)Z¾mÚ–fU]‹‹¢ò®SU­Xdz¹î‡AÔŠþ|‚¨À3?$ Iò#/7’®v 'ÅhŽÀ=TO{ö=?OH«“¡†*ˆ{Í(ÉÀ•!ðc<õ)[Ð Ö ÍýmR„ÞkEpÄG³ߎ£˜DŒ€êriXÕônO>®h;ñJïWJœ/ʾ ¶uJŸ¼Ë ̽{gQuš2„~Ò`z{’?@C¬K'âbA7šŽÆ ‡Ò¥8Œ-n‘jøÝ& äL /\+ZžîT°¬€.¸ÿ³ÄLß<ˆÅ§¢ý4ò"ÈYt|ç§F…¾P3·t{ç|éýéÍ›ïvzR¨5ªOÍ~/:2€7†p¼_›ë'¶Œ~/Z6Ðþ ˆèôR‘TÇÙ2¯ÂÄ/“Ä}ÊdžlÎÔü8HÁßU{Ià…1!ȈT8·o$¸$Íz>Þ(°–8Œµj÷h-¸O‘ÒÜ‘zÀ6­P¸}©Pú :Tñ0PTö(÷vš³x¼2÷Ü]@~Ú:äfD.jáäŽ p&Y‚Î$öã°°œñË5gúiXšMHTTxBÕ>épR&¬1€—(ݺ!‰ 6ÙÓ¬L0=‘vwZ¬ä²Ç~DOÛ¦[°éì 4ܪ>¡r1·Ý‚\yÊ©=E‘Ä/ >:c¢ñ„¨nuߎçΆô8›ýh<ÔCZh #IÐo j©x°è*^Â~Fˆ´z+4« Ÿ6š†>ÙuG›0èàjÓQ0D„Sx"¬†žß%fÁ¡ŸõÞÊ ƒæ>¶ª¹hâ‹“[¸¯‚Lë¾RÕM%Ù.·)DnRã,°¯‡ußÉ^Ç,O5#Q΂1ÆS)dGÄcšq°Eãcµß7HMÕÒá>Ó™‰fýàWª†’=áDÛÉ5.àŽžà$±ßUWxEQÄÅi‡Î‚€–%AfD`ãäÅaaM.höpzwÒº áÐD"^À{À­õR«?o8wÁ¹á6’äDÒ´„m…¸ÞXY¹ð¹Ñ ã"²áXQB€Ö5= {–ºY!j x™ž3ú’”¹÷÷MÒêGZ"ŽG˜24ÝG—•w*ÉãÇÆœëiüÛ›¿üÀk òÙ{Þž/|8ÛZ>=t~hFýšÎ{“9Ò¯Òäùîù&Œi8'¼Óqoüí&EçµÎ\¢&Œ&KqSJ©HáÆZƒIhÑí<Øb:!¥:ö›$ø‚ÃÚ™Dy=e”F²:Ê%ºV¤äœhSZD(Bn¬TûË<Ÿ'r-Å—?®&çLš›CÆÛ»æß@ä2Œ™Ž‰vÂ6'éÆ,³)I'5ý|³Í ûƒüi%¬Æ¹e¡ «¯!ïQ Æ!Pü40%…óFûe0•Në·†°=˜‚uc”†®:‹¥øï?èÄOÿÉôŽ>¹øQ¬10Oü׎OSR9ìþ¾k ^½¥q޳kôß¡,ÍÍÅ2b»~öx.^CY#¥ö—÷¯OADiñUöåeá°/Ë5û` E2/áßÌët@<ß ×Âå™¿ð‡ø‹‡þCÍߟ_ð 'öÞ{28=™_©mø1x)ÇFíX:a½\ja‡nºé¤ª°Èå°ƒHJttºâ¡½œª¡M” ¥¢4?›Köº¤ÒY-¬rÞ`½®·a:OÑH¯Î&WBkÎË6mÁ>ZJÇ2œÿhÌõÖYI¾·³6’þrìxþâñúû\Țѽ¨‡Ô8óÃ$ûªIèzx‰$LX ¡®«ivl>qƒd:»_ H‹sBãHÂ…¢'Ž¢GZæïÞ^ÓVöºÜ½ÉÁ/‹¼Û¼ƒ•Ÿ2ÑÊH%@u×QËyÈw’£ñCï¿Á!cG(ûôåqâ§eùU)&™+Å8Ö’€¥ˆ³{R KQÏ$Ù%þ! á-;¾j• „µ†7÷®Åí¶`'B@ö„‚}Z) æ$Î4öƒ…sºf‰¡¾£ÄRpÜ…+°W×,°ÃOóä>—é$3ùUE‰.*¸nMOÕ øYÎÞt›òÂ4:M·Aî×Òl’Æ’(3‚o°`ʼn¬uIƒSÈ{·sÛ!ºÅ€'qi-9Ý÷çÊp©U8pÔ§üÊ,ä9Ñÿ,e;œc‰Nƶ]¤ ò[DòöÙ·‹ämß`øÀjßPGb·è‹v»b€¥I °hÄ`ÀŒ°¬vÅÄ,^b–¯U3ŠºY …£Ð}Q2@páŽgÎ=Qæ?NÍñ¤»íøGã"i‡:Ù$‚Çn­é±æV{Bÿ½=Ñ¡{B_ë­þ%ÏJºû/$OÂå2FjBã"_hA–Ç -À=¤qQ¸Z€KF pÑ´_¬µ'¬¸ìj.R¿—­0h-Àƒ–à_]‚š¯*ø‚çH>c”Aϵ2àlÎâð<²)ñFÆüÔŸû¶?öãtjRz­â«¹q»Ú­n¸í ^H,œÅ«ë/yÛarYKúøÐ‘ÿ]ÝúŽ5ð1åÝ/)ï]~Ý}I‰u.`”øW¤A€i«Õ4 „?'s«×áÃYb§qF->.½lTcDg±Q}X³‹ü?i~f{ú˶Ú@êfÝ‘°V ÒôßjšM/O†azdh¤#Uð¸NÑ1§l ô0×PúóEt¿£AäOíÊ$“¬èŽ£+d>µ)Ó¹¯{÷d6…yèq9¢;üM[ tÌéãbÞO˜'©)^2‹ rÕ>ð}bÛ€;ñ›\x¡à$_Ô;Yh¾Be…s·Þ+©ÑÉ.!3.V\9’}è–QgüaÈ>7Ù lÊŠùË]¬‹ÈÆå[v+„ðP3S½hÈ€©EÏ<ØÆS=æ~:¥~±äÐÉbœS½ÙjgcÝ/zë]oGã*!vuÕ=œÒ»1é…Ç6’ új.G¹“Ëî°´Šd ´Z °è´`yÎËÃ’Eˆ`ÛýùËã300êEé,¾EEêÇîG Í`Ï WJ¨,'¶Ø¿xúx—‰ÖG‡nOM}âÀ¾FºýP›î[TüÑÆ ü!êZ^w2 (¥b(è’ÐÏê~Ó»'ÿÐ(ªô endstream endobj 380 0 obj << /Length 2905 /Filter /FlateDecode >> stream xÚµ]sÛ¸ñÝ¿B3S7L€ z®7ãøì$m“ú"_››$E[œðC©úr¿¾»X€"%Æv÷‰Àb,vû>¿>:¹ ÉfqÊÉõÍ$“ˆûÌ¢ÉõròÞûåb: }ßû©ùyúñúo'—"˜Ä€-BÄ" ߢfMº™Î¸òòu›×£ ƒåUȸPnÆø¢\³H;”¼™ÎD¨¼ºÊ¨Qä®u›ÿ'¯n©Ðg¹GAo¦ïÕê´+·d“}ÞfUšMMgA{|åŸ×å:Ùd;³ªÞ)D³HqGã_þúâ’¸Ü:<ô™ˆc‡\&Dà§íz(ïN˜Ì‚X²X©ÉŒsó5¨w«<]‘ƳN…ò²†º }FŽ ÐÝq¡ƒ0»U]ØfRä·U™U-ƒór¢8=Šg$×™ÐL똈Ùdi}[åÂv¾—-i%8ù¹]³ªê6A"š± É"Áé€o§ß^ŽÉ^bÇØ·™9K¶1bš ÉIüN`Ü;«°ó…ÆÒð¨KÒ6ÛÈȾIšfëÖ-ÁAéÓ‰ì8è|/­‹mY™m…w½²ääU |$ ·W[Û‰EQ#uw–òd‘¨°(p(éNJ´‹•ò]ÞZñ7u™¹›µÔ­oèÛaìÒÍ,W‘ý±°[¾~ý û_×ˬ€ dQó [¢/I€—Ç„™WËgÌŒM– ®=äùQ˜¦ÿH¢„ÿƒ]8¾á¢]†óˆÃv gmj‚ÅÐܼn Óì_7c¡D2_ìC¿d4a$Twzÿ˜Xýícbu¦“¿7NÜ÷ª‡·ÖCµÆÐbž%X<„#‚^‚uN ÖXP!bÁdÈ'R*¦ä7^éa^+Æ­Èî´dBw‚OFždÙz²Ú(!#&å0'u?84ßÎ[ iþ!oÏÆy«!B±ÇßÉZeÖ‘âÿÂ×HÇCÆ^]=ÈØ«©טl9ùP…ÑÝ"鸫ûèP8 (ì£h@u–Ìr?„8€ fl Ã&>4}J Æö±îS‡®LÑ[Ùt0ñ›ÍÇ’IÈ ¤Ë¶$‰/!×3›Q l/£0ø5 ÑÖé[êRò€®FÅäDX¯×uc< Nµ[S¾ŠsŒþîÄ ÈÆo Œœ!t ±É)ýÆOÇì¤(l, “óêƒï‹%Z|!±Ë°/v‰m'ömåD7R¬‘`¤ÃÏPMp“¬ÂgIÀ¤¡/ç=§#ƒ2MÓY¨ž ÀJ¨¨³ù˜Óc `fW8 ¡G$aY¤'=¤SBÒ¯ !÷2ÄÿKˆñøN, »Z¥[@ƒî|!G¶à> Ã.tÁ T¸HCË¢jWFü±âb»|5fÁÚïÜ.J`—ÔL,Èv¸|(Y¸›ü¿ró€À;‘ÀÝïã¨~$Gõ“q”G9Ʊo¬"cèC"ȸðkj¼ð ¼µ#Rà`Á|!¾W [ôWÅÀŸR ñ“éMü­b0–UBdà‡zhkà0ó ddÄq°9FÁÓÝËx”ß 僆„3¨¿—Ñ£éÃUôWáOd²Ðl dpç?‚ŽçÇ?cá üÄ Ìw ÖÐqúz™Ì# z ~©Ì «+úÒ›¶l© ›UMßW‡ÎÊÞ@ $SjÏÓ.²ÌU+lüµKÉO êío¬•™{&^ÛR=úÂmÑæëƒ÷÷~#0Ø,»Rv°—~÷²3í.ÞcÛP²y‘4¦fÍ"_»våN€nêm ì°èT~ à*$ë¤ç¥Có²€ß;=´µ˜¢^Wî4}b{èývNßyRµ 5Ïmø'mòAˆøIãhìz§G„c•O|Š 8eøÄ¥°bþlï­«‚äÖÅCTcZoÛÑ™÷½˜ýv>·[ó3+;0Ît‚35½ÊÜ´Tðr¹îÚÖü“Û]Ú¶™ÅrO§®§Å³"K‘(Å­Âpä°*ÄZ<὇x4Š7k, ÔQß÷%¢3š!ãýP8›p[{MJÔd[T!½L=›l”¢„FçmMZÕEI þ=P¼[q:úª¥5‹â=vþL¹lÖ3ØŸn‘àM£üû°†ôì =Ÿµ3ÌÚ‚âÑÁFö¢ ¥¼t ¹”ÉvO¹5ö u0Gª©¹°ûöÿzþH+êNWm»>=9Iër½ÈkÖÔÛ¦MʲåöľÅû b?å Ü‘oÞÜÙª-‹±Z fÂvÚcª0¿O9$…õÖ=ÔNwE²{ß¶–§Þ/¢;vY3vãêwæÑ»µO½"zg»ÜÓDvsߟ‹l÷B«¸g¾*-ЩÂiÇý›='ù7ë‰ÎìšÆX›`ã³–óAŸf '}ÇxÚÉ5„ì.ÐTQ‚ÍQJ”RÍ4û  *hÒù/—&¿xùêïÿxýæê×ëýûwçZ`JÔÍß<#°3f³ÙÅeYmv32fVbÅ´©«Ì–h9®Úö_&Û endstream endobj 383 0 obj << /Length 2933 /Filter /FlateDecode >> stream xÚ•isÝÆí{~…f:ñuür—gzÌȎ丵6V§ugL=îÓã˜Ç ¦þ÷ŵ¼D)î'î»X `ðùíW_ß(}‘ºi¤¢‹ÛãE¬.bßs=_ÜæÿrŠn·Wqâ˜úÐä&çIQó÷J½áÁq§=§ia:UÖ30ë¾ÙýûöÏp@x¹i¬<@¥n’${?vS­ø?uæg·÷•ç9ïÌÏfvûf>rÓÚâÜM$/¼‹=l}Þ~õâÛë›—ß½úËë7oÿú·ÛüøÓ|Ñt„Ú¼4Ø–]_Ô÷CÑ@b.s©ïLÿ Ò5œ1óBùMÝ™º:šr¨jQ­ñBï—ÜO[Óù`dufÁ…PÎg”†(e ³:çÁ}v^oÌø“gÝé µï|Ü_™þj+²Z§DÜé·Ä[°®£pÎºŽ¢ëˆÌ,YG@Ù ¦YA-£XZ| ˆE˜Á6zº$à_'‰óÑžsIÓØZ-o¨/{&cðÿ{.‹CÑ“ñ¾;1õ’/6È¥ï²G,;ALzŠxtŠÒ ;<Ø9êÙå› ÎMWP¼¡,7€¶ s²ÕØõ‘2¿1šÂtK{þàNPa|Å´O0EÅê°TøÛŸŠM[nÍîÓÔ}†Ì¢Aà\É#“åäy`ï ƒ_ü½Ç ‹,zšê ~XƒêØ‘—­rK„uªW¬! \»¦[,XÃqƒb,`‹#ã8| `Ò!é–@qŒ)°¬o3óa³e ¼ÈÁržóz€çCm裑r3E¾yÙ®Ygøó Œ³àâ5°L«$Æ`r‡Ñ’Ü vÎm3F^@}÷æPû0•U«›½F°õÝ•¬w¥Ý×?<Û2 Z‚7<;§ï^ܼXˆÀé@œ½ªåµ"+m>et=aȾÏ׈ÎÄ‚¼3FNE×õŒ[½'¡ ¸ßزðQÀÂwn4µþ{Ð%hŽ#ŒJÓÓÓä\²¢ó†±D[Æ‚.þLÒ*»Êv,0N–B±ãæ|0 m/c29$qHHËáÒ›)Ù\Zžuܯo }œ#°•@j™2÷¯Í½=÷€'‚0$nï6ò*4¨ÔãYB¥"Ÿ4ÊòF -’#b0‰@ %è@óÍ+Õ5x™„;N‹¼òBÙ|816™>þî’1È œ¶ÏöòøMÌ®`ÉÇ1áž$Óià&~’h”ö6ä!íšËIøªè:ÈC˜|žõJF/¹§ú)«‘£!¸†«FèØi†þbæ%D™¼í7ˆXY]žX´ùþÚο =y*@HRËQÌCc8bÂfS €œ³¶³ù­<)˜Ëòá®3’¥“ëc¶Î6M«ª»’Ã^6amÖ­J^VÔ EÞÉ* 8ÆJÓôäÔ!ûg*'ÝB9…²äL`%ôê\d‚Qk²\œÎfFçû‰‚ŠÙ7ìŽN”]ðüý?·¨¤®žl÷~ƒHâBbP2‚lKxâY/Âp$†òøÛõ ®¬Í­LfÏ¡Šç¬xÖ[ó›Qû0ÙPï–ŠXǼéuV´­5»QýšÒ|»àí»Ðs~Ú"乡ÖO).vãП+n×%k6(‡©«Âø‹Y¼B­½xyû÷ R:pÃ'/wAIrÇ!DHªX˳,O©¥AiûÁPEþ̦Š"(ßf”È-‰;ëç*“ï{Y&kÞºÖ}àaI£€},ùBÈ‚/ù”•!êã÷—.(®à€­„†™¬†UDo›êœa\ÁõO±°8¶F–.Ÿ]†UM>”FÊIŸóÿ›Wo$7`RçM2ák øAÄLíÀsr?­Q¬}צ|Àóô¦ŽÎæÅ6K×X¡Ë :%ú #׳hWÈ¡¸„±Û > Ï„-6M %²›å §iL|$Nãpñ¤¡âõy¾ó|-äT¸•ã) ‰-=`Ë^Y™ŒòXž)kÛ¦ü µ™­fó‡%T2¥±¤0XÝ`Y½7µé‹Xûçý–”cZEöa ¦ðO–™Ú[Œp¸l÷<Õ« ¸„iºì›%Î0ㆠ,[ê3 ä]KOÀ±? º2P1o¾å¨©X â§r ¾èW<"Û‚/XúX3ÅÁ,Ô'¶•}…“–JÒƒp`yJűd ›í›IÂ>è÷‚‹¬yDïB¤eÕÛ=™,°÷ƒC4§­šÉªúËzº_skÀÈá`Nª¨Þž²°8k•dzoièþhÅbJI \%VƒØü¤hQ8ûTs¡!›¡J?”]'ÁBè$˜ª'\F‰B)“ï¨Ù 3¼Dß»gªÃ휅|´0 ÔÈC`Ï Ô’R°hL™³r^y»n B iÊ*;ž@Ä̇SÔc)ŽªžyHúôƒŠ—2äOªy¥œ©ggnHÉá7€€Õì1€P”€)¾(­Yö€œÕàÈT‡K —R{®€"6k…¨%žm7* è7‚<ÿ¿ùãËÜlÿáf+U]•¦vqÉÁ"ˆ%%Œw}s@}:5eÅ •½I§ •´‹?‘™!uE¯Ÿ†ÂHiÿÁó·å O¶¡¾?öC µ“loº|j fÒ±#w1Xê;öfúþ=‡¥©Fˆmº‘aÄKÛÅÂÖÝúœ;j8óI!vl›Ê%ß…¹lV=™ªA¥| —i X ÆÅšŒ—ð"͉넯悻~}ýža+Ž:^°ªëuò“T8Ù|7ÉÎ¥7«ÑçСbÛ» ¤1ÍšW¡ 廯ýä›$LÀï4çýÎw(èœzÀö8|2ò}›­ÑÆûž´Œ”ŒGÏŒ2ˆçFIÌ(xz9Š6Ã}ÄÈ#¯(Ù–¦æD¢¡„ä0¢Pt‰éP7út^TÏEÞ¼ì8UÕÝP”ù–?G®NF†ãîQ/¬œŠ¸Änƶ$@s¾Ál(ûoàf#oÞ¯ƒµG¦qo3ͽµ)ã:ÅŸÿ˜S^ìú«œ÷Û5U0òz¿•¦Ä‘¿pCJž4±†³ÒÔ÷TÜüWAÙ¢•îuþ2Q¼I›q @e)=#\ÛÊ&ØÒÀ$7./V4ó†ù ­©2ûÂÏx›!ggWÏ â?ÏCߘ!ôBo£°÷|7Öcñ÷ÁSá†>}¨bý•Bãy.5ÿ°xr¹z¥ïíY>‘¸L‹¦ø¬¯ Ö0êC&ä6{¾¯äŒÙýÁ {hwcÛóˆFÙ´ÿ~5+ºåÔ]ͨ§jN^‰<ƒ˜0nåK°çPBzCñ&ø{£’`Ñ1¨·'­#lEÍ&…j‰+ndlðÔóéP0r•gƒ4ÿçØ«( ª¬Ž´ÍN%rÀ„“sY=mÏ ÔØÊ3S5Ò̃|"F/Ö ø0`¼ïkÄ}u}ûÕÿÜúÊ› endstream endobj 386 0 obj << /Length 2949 /Filter /FlateDecode >> stream xÚ­Ë’ã¶ñ>_¡ªBU¸xñ僫¼ñnb'ÞØÞI\)ÛJÂŒS$MRžl¾>Ýè_ÃÙgæ"4FÝèz}sõê­Ò›,Ìbonn7ifÆl)B¡“ÍÍqócps²ÛŸo¾Ìh“flSI£ œÓùÜÜŒ7¥hTh¢Ìã5m}·•"hñ'?ow&U­òýV‰ ´ut6o'„ePßR_]YZjÏuk ¥³¿^luàñcÞçû¼ó´~‘°[á]¸ÝeQ¼ûþš†Þß]÷m[÷׸ïÍ.ÉB§›Ö¢ˆ6üª@  "a’Ê‚û¢?Á95]QÝ•–à¢êú÷+â2qœrdî7@"”²Îöø(… 7ðõ“j¤Ý×íÅ Eð)à,ÉÒàµ=ä—Ž±ûÓ@°wü‰9g(XeÆõ@^*Áí¨Ö—êH£ž]„E~Ûª(ÈaÀdQ_xæDðˆtηnî£Fy¸i–¦•y³ÕND Ž„( ¯Gnm¥Å ÖSg^–ŽØ=/csÔœ;n…YœNu°·Ôv=hÏ‘àzr\¨•÷Õ¡¼‘üÊyâ6@`SØ“CYb{¶}Žb ¯þ„›&RÇâ÷@k\gàˆ ·€ç‚1Ë]§&(‹®\Ძ/-nI¥óÓHPw¨ûþT8yHBO¦‡ÝEGí  \ýÃÉ2ÜO#+Njl;;5”1/ÿÐ…èX…2QŸö!: ãч\»€Æ›Žã(oï@péûNgY˜jÉ2Ši¶— î+¥}CÛ5öP ­Ùã5õ85pCžÍ zk»žÕÿÐ[FD£ £AÁçÞ–uu笊EÊа#tRnçÒ8/<;Û·ô{îÔX¶èÿHI|î½í+©œl dƒðxÈðu.îN={îš>b ‡¾”}Ñx }qv<8x…§¬5åïzE vkì~$ ˆ0Æ+ƒ;‘,ÀN‹»ÊE‘¡÷PŸ›Ko©óÍŽüVy±<©ª{ú÷¥ë©«®¨%ãp¤ú¼dt'’óÞ 9êÈT;ð& º¼b‚S –—ÓJÞÿŒ[tJ/$µÓÚ.0^zÇÍaKÚ‚ÓÍ9Ü[j';ÁÏbI¢f= õ¤0d6uו?PïÀ!ÅBÞ/XÛ|ËÆxçí Œrk¾øT{ó›J > ~=›MÞ2Î]Aq£b¬¼ýð8kÊn-³äúQãz$Å¡ÊôR&iìñ|ÄÖNÏ‚X;‚QÊ©ñƒpYT êªÏ‹Êù -õJ¬%,’ úßó4ÃçËôì€ë´b:•ùLÖ$‘8žHnMƧ‰¨Won®~½’ .±‘)²P¹‰â8L’hs8_ýø³Øa'ÔYº¹w¨ç cŒåæýÕwW¯1u¯ ‹ÅQŠ^ô€ª —¬,n @¤éK,)X4}dñã~eí4‚¢—X;MC‘F¬ÀƒÅ•ŠC•¾„Ô•8YH]ÒÒ·—²\_>IÂL½„Ü!ꇱLV—_]Z Vôb×pGJ@ÉgK«Op®£,L^DÝ1yÒKuWd‹Q:UØæ˜<}Ž"‘Ô(hVl7¥’2pñö!lMëìØ0à*„ÊælÀêÜÐÖ`'££…‡Í ä#!P|91чÁîÕRI/þw>Ý>¼†Ç‹í‰‡“äëaô[l ““¦N™òÒ_s•, “$@ðÏ–„É@Ùó±H´Ÿ' ‚FÇsI¬ùmpÛ&Ú˜$ Ìüÿå•`AHHÄÏÔˆÙ]﹂P`j¡«¾,ƒ"€ƒ(u¾à*Æœ!i8­_‘82rø;òs&£bJtY ÛÉ`ž':Ð#³´§@NK—³Øðíjj‡4}%e„ãL£!\cÂ~êÇñj­³à]Ý[¿]¿pqKl-p0'‰¡Ôäè.yS© •ÓâIö–³ø ÚâÊyí•Å_nï ¬p i4Ü|r) h¿bĪÃP‰O±1&~§¡,D‡iâÉÔ|ÌP\äÊFÙ®)7“¥i÷£ÑZ‚ÊÉ Ö†t ´óYÉ©‚€E”T”=UÉßy6Äì¨] \)õT­s'®¼{sH»9÷¯b¨XÀÀ©¾”GêÝ3‘Kg¹‡ÜäË7>Äüú휆óà+^Ì]w¤Æ)Êv~{/‰ ¯›·þ²x¨Ë2o:÷«/ýÜS.qqíý¤QŒÕLWÒáÌëMíPÏY­q%2Lôp «j†±0ŽS— EB?ÃV"èQÒÂ<Õ ­dZFkØwºÈ´¶©¾x³Í Ù•Å/«ñå«u‹Û‡ /²®¯°aü}€s^p×¾>båÁPe†4®‡_3ÏÆ3)ñM‘;útu×ïKÀË5àó­/ò²¤š:ãk;Là­ÁZÆ_€w]à‘w«%Ù¢cHY Ó„J—)>iìèâƒp¥bé¢-¡ùlê/ß¾ îÔÿH$\½æÃ@œ:kžFï%áš N« 8Dö[<UM}ù¡84¯M¯p;lÚB —CÐ"tãtÕÞa¬5¡Î75·§£üìôÅŸ¾|óöÏùê¯ûæÝ·ßÝüó‡=Äùœï[B®ç:R+4ï@ʇƒoÞ~óîûq+Ú<”.ñ5 ¢eh.škûyÕ±@¾õ™èN<.Â\‚)EG=g$èÒPKöDÝá×L8çú°w®‘I\]Ë¢´îñ`ŠJŸ´PäÊRf¨rZ_ß ˽ˆ´öŒVúâ<õZ¡gbæß•Ö[êÁò"ÉC« ø£3/èžI¾OyGÀˆ;%µ’{©ròô©Q˘(&‘²˜4æ`G‚§RB>:ÚDNŸû‚û‡‡WyÓÃ[Ïð= Û (\¸IçÚÙbðíN…{ ñ}H‘k‚cÌ ¤ó¸ÞNÄSq£"ªŸâ‹úஎùá`*; º¡8èwq½SµËfvî_Lµ„Cë »`ª•…¨Þå£×€>÷Ð -Å!ÛÅžþopÀÎ_xK·<*á޶áôÒ±È,ÄÓ=+²–ü®µî)Åë­0§¦Ùâ,ü¡b=Æ!~“Á,¶mm×€+VÅ—eä÷eè›ÿµÁd:¨òóàŒpgÐuE]­ëÉ»AÓ¿ëÈ„MÏô.$S–­ß'<½ö<-ƒíŸ0­©»~×´5nn-e*”Ê9íŠ3½üÜø?mpBØ’9m‡ÿŸ GÎä˜jòë2PkA>…O<óe& ™ûȯÝñÒ Ài3ä£{o³hÍ•OC/ô· Øñœºº«Éé.µdP²É_ BÐAÅú¾ùìÕ«ûûû)…u{·æNµ„Z> stream xÚ•T¹nÜ0íõ,% ¢yKj\8X#0à"‰:ÛWâî Ñe ü÷Š”ìÍ®‹T$‡3ofÞ<ò.nî9CÎS(? „¡„Lx‚ò=…_£§ª=F1KÒP»å™V·¯Z·žš¦?6¥;"FÂnhô½ä7÷ŒHAPL3œøùÉ¥$üöø¸ûïôhjk áÔuµ—(…p%l8%  ˜%ÞŒu<˜ÃgÉT‚¹d«s5:h½·Ö>óÔ¹µèZkþ1š!Š\yç°õ ¦¥o°Í­®«ckJg>Dœ„zœ|Ärì m>tͨ[gYɃúœDàšˆ)Å™T®òK ÷9P~q†q.N~R£#C©Ô± §i꥾bEÈ9‹%Ž«¥ `—¯å› ŠX †”RXFÑO/•pù€æYŠþ,® bXe°©ÑÏà{pg•v^ Ì‘s‡Ä×6Ý»ìÍ[¹Çž¼Y7‘m.ǵ=ß^F^Ë–t“vœ Ð|šeçÔ,Ò„.¢!ŒúŠ eŠ¡1w5 2TŠ"%½ÿãì\û ¸K‡#}çì²OxbBðµ,P ×GÛ ÝOó`F×Ûh^gÓÆÝµºñ=ë¶t›ÒŒèDV­4¸‹ªýG”U·ÝLàÖy Ÿ§júÚg™Üû›k=xÉÓ'™8§ÿBÝË«u￞y4Û³à£ß~¬éÔÞ}y׺žmç Œ.l¿6ðËÑ2*±béÊâçª –­~À(Ô%½ù¿±šFÛ‡‡!‚bb ÓÂ+ŸR¹êæ/g d¶ endstream endobj 393 0 obj << /Length 3821 /Filter /FlateDecode >> stream xÚËrä¶ñî¯P. Uµâ ’3ŒOZy×+{µv­ä¸RIšEc‚ÌZŸ~ÃQINºñh4ú ¾{øæí•^$Y¬²"½xx¼X§ëUç*»x¨/þ•—WÉjµŠ®«Ët=uî2É£¯©wˆˆLkºÁ_^¥ëM¤»š{ë×þùò_?¼ýª‹2.‹´À-VW©ŠKUòïîÞ‰›u”ðç+î¡=wjs©VÑ¿/Ó<2;˜šÁ®ã¯o˜¢i&Ðd.“èé2)#ltµ,deư7Ühô–z8ÃÜ}¹áÆ'½…ƒÀšš¤ð@¼ý£Œt©ÆF÷Ü}g]ãvÏ0c½APÝèö ™€ÇN’¸Ìs>ö”G¶Þá¦iýò#΀-¾îm#°[þhͰƒóCí*`‡=c¿Øj¯ûšÁßý–ŽÓ:þàö·îÇ.ª‹á`é&ì5ìu÷ÄS˜û8¶Zæ|¸Ìò¨wÝ`MÏ£î+kºÊ,ñçÞí{ÌÂÆ‰n‡v€ög=X×é†{·ì0ÆsŸ¸]¬¢F7tP€=¢Xà¥ÐR{c¥Ù›V3kŸà~Af›gžlºÆîöƒéŒìïÇÃÈà¤BZøòŒÁ¶BÞ×½é„4È,º"iOÐÚÂÑ‹ÁñwkøKÒê„XÛíJ’£÷2l$¶-#^À·3#³µáþ™ž ^2€t0+f:¨’"Nr H¾Á©17ÙéÎ/èm¶ŽUš†91ýJe›8O7§,*m¢$Þ X癜@ÿ\­ÒÞ#uˆñÈ—d+Fö°¿ö2’Î _Zï ·+Ý –$–¸>ˆ*5²eY沧߇ ¦¤~Hp3xø´d@˜q5¯H¨_/aªö{¸Ð>0ØÊ2Ë伟÷—ÎòüÞÛ6Ê€H]¦’è~ÆnVIôÉÖãVÒ¿æq$Çyð•Äq‡\úƒ—žøÙ×»‡¯>]²CàØnñ ØG6â:­ë C¼–¹QVm]mqËŠÑóTÕ ·í¡Ÿ1M\€Ú¤BJöl‡ŒÄ–6anTDyƒTʱ‡³A“åÃN7ñžAÂd@‘ѽCá@ÄttµQÄ…Z–Î×ézÚ…N„ò£”ŠŒ¯49!¥R¾Û|µ‘»¥dÞÙê'<’a°øK¬gJê-mà ìD [T¶ž±E¶Àœ#[ÔK¶Èׄ*42 çœ@b¡Ê²Iw×Þˆ›>LvlìjÒ!4.Áù³4v3ÃfÐÚN&ˆ,Ë‚íÆ‰Yõ*Jñ“ÌüÞšý|:#æmlĵ‡Æ †Ñ=«’ˆ÷$,]§ÑVË Vbc“`cqUÑ@ìüÜhÁ¯Êa¡¢¯ö°l5Œ½eVYÝ" ÈqRŸK!gœN”A„°5»±ã¦•ïç¹^±”ùvµ®Þ2D¼47 7άÁ^X&€}g(·æ±eÐ÷Áň>ªä¸ìçÛÒ>z.Jb%BÈ’×"y΀Ú/Æäc&·¶q#uAä(ª&ƒ½É»ã*âÝ~ê³Rr×è?y4ª"¢Èó­áŽ®ïE²ó­ N&|ä5 ®Ú›‚Ú)Thl+]´âÞ „Dº";¬ºqmk‡ÁFb\ß÷åÆ'K!6ÿæ#i1’OO“ù³³² P,­ƒ¶5ox2ƒ®ŽÌšÑÏa_ö p”zp‡¥3£ü(0¨‹âí©’½ ¿ç)¦•½ïì†Ç»î/ÈÏÀ'c3à3étc¿“ÏåÈt ÖD×v!‹“pÒúßœe‚ýÞT®¯OCPˆŠ{s–ûI¤ -²;zgPì;y vaSAù.B唬uÜòfòt9ºL+w4q´'pM“X¶µuÚzl“YkìäÁsqu8(„›”gˆ=À¹ã@Ñ&¶ÿ™¦…Ç|&jªAŒq#SZ`;²ÞÔo^.aÕq‡’]–Q-™Xb¢.Ì ¡½y©a» 2f‘vìØ…5œ¡’8ª LJã$NxôQ#KÉEh‡9ó ?…ë8êh„JÌ#{³(ƒÏD‚>F9*‹{×bš¡«Û\¥«U‚B½.'âRÄ¥;niƒ(¤ÔŒ¢ø ¾˜cáW‡î ­@qØ<Ÿ…X4 Z‹ýÁYê”­Ò8OTȃjL‡‡+v ™“*ãdU„3Ò¥gYIyžEƪõŒ± î‚ÓFÆpH­lÍcÀGd¦B㙦b!`0Fú”mcg¶ë6‡0”. eä”6­[žÂ½(iÍÂRÐï!„áƒÖ<ŸSÑaèaæÁÑÅ>„$¸Ñ^‚ÉÓüˆmÓüJi…XÅ©´%aD»5žÅ£?ÁumC(Ë»¾fyn§J6ғ佩§ªÀ1¡§ûŰ0Iª{©c«!iDAüˆ,Ñ(;î ë8HX ]æN JHsÅeŸ·ïëúùí½ÛíßNÞãu3³uîiAÚÓ†–At¹¾e+ îøÞü>RñzEt "õìíRí Që¸L“°G}AÌp.b¬°ÜZÒÖb’ÀŒ„J¾Œúj!0¾)°G8$¦<í8}’®Êš%…¾J oÖgB V·©—tYÅY± Ùk¼f¶ê FŠ•×œ}%ÁzÉi7Zºv¾QÄ’ê%t†­ÞÚ˜AV>ÙpBúA[ð XÖDÔÑ6$è Ã}`O‡û Åàr SrÔƒ¿h¥’’«MÕŒ×c ÇÁ<ªfQ@ºA… B°à¤›lb îo¶:)žæ"óИ—^x&W#‹|VÇèTÇ<›#Ë8AQÙ†ï)Y°4”jCšó-V.3דí«BnÒnžï Ú!aï‚ý\š!ÃÍŸyÕ…æ<Ê®_@g7K“ÔÅ Dz&l7›º=jÞ’ î=U³{§nÊV¸¥ƒçÉIp™‚ŠÍÍ8g€’r;ê«ãïï#äjcËÌÀÇÄS–¿ý¿—é\!) ö¡¾|¾–zÙ £,6ëï— È­XdÞ}º¾ÀfF!­¤:¤„ ~)0À>)%Œm—Øšp›M ¶B‹íÃiA«N+*™ø0V0´ÞgÎWú®^/xÙ‡Œ$ Q$mT]BÎ<ûá¤wR ÑîÞíœøú”g£ù1Gvdz©Þ”ËÉXî¨^µÇ¼~¶q§‡cá™GBv ´‡öVJS³ÀEaÙpŠÀ!J_¸ñ3öR¢ fa8öø–“T ÖSˆ ¢Ï7ïnßp“¼zaÚr~–YᦰÍuy%uy5SZ‹ÎÃ(2Ö "ý„ï¬ð&Ri ’ :غåÏÜNÝV U‚⇿2ƒ€íbVŒ%z» ÿBÑnN=Ðyv².pmé‰`ldq誂-£öžmÏ P#ž~ 1ú‘^«-eZ’RòòøXÊUT\õ $/ _=UÛpºç7Ço9Þ}å™b~<%Ç›Bw>^1/Ôó0j t÷XË”ƒóÞN™/BÀšA¶'±¸ÄäBVÐgŸ€€€ÈÖ¦^$DÖ)åÙ–i øÌq£½\d¯GJÏÂ@åyÌ7Ø›ð9+ró«¢ûÉj„ÂŽwƒÜ91N“Õñ,˜Kù3“Dáºâ6ôß £‰9ŽÆ? ˆòT~P«x³IùX‡õË¿ $e¼^ŸT€²¤¤±îuZé@HçòÛèõÀö¤8äD¹Ð 峊Žfsw>RVzä/{-£eÛƒq˜ju ›€†S ÑT±æú5 [YR[|À‡Xí «÷uéö¨Œ<™ënªW‡ßÊ,ú޶ IôÒ¥§Ëãj÷¦ßYY 2nÓ4º EsÄßaXNo!0B¬;KÑä\aöÏ §üˆ„¤LÑÇ@®>Êž²ÄÚ¸é4ú" Ô,ú;ú~œPQ5ö=½7f«éé ዯሠþ‡€£µ@NÖê¥Ó¢Š0^½À€{tAÀ'z)™x"=NmaÎ"hcÏXû±:(Ð…ƒJ˜gšG~¢µ<Áœ;qI!YÃÖNœ1SðÎxˆˆÖÞuò Ay^븂äÎË…²ìU†"£2™\ØÇ!TªiÙÓH ð[3ðK<Ïêߦds`¯ºî™}c[†ü~¿Š¾—Ÿw:ß„`¹"ëœMÎ[Ï\€N7€°Š?pqàãAƒ±öš-R¥ü§°BsWï]/pâ~e–¼GÑŸ k& fü¤I±zó¼$ºucø#Øèù½¡¥ý@úõzÖôÓñm; æ-K^³MrDÞ}¹¹út÷ާðÖÓ;jÿAáð­üE¸Úújô°’¥C^òj8~+v—MˆY<ÍWöó‡uÅwsû¶ãïr ²õ&d9’M…ìpáAžâOždÔìIFÖz/§…î]×íuÛšã~뙵Æ!ïô`8)HÓ<.Ê\b—‰œ.I D~óþá›ÿSùn† endstream endobj 396 0 obj << /Length 1743 /Filter /FlateDecode >> stream xÚ}ÛvÓ8ð¯ÈÛ*çà»x¢J(e{Ú°Ë9Ë>(¶ d+kËtÃ×ïŒfœ¤!Ý'榹k|±|öâ]æÓye£åz”G£< ¦Aœ–åè/QËæùxå3ñöa¦B6tºÐ-©hÔ8 Än`Æ+Ûp£ $~7ªfÒR×¼ïW "V²-™tg7ª%ðÞë¤ëŒaú‰Èºdݲ¸–ãøäjÙ0ùrº@¾gS.+ë*-§ã¿—Fa2'Éh†Óyš’ŸËJ'q˜‰Ï—øÍŽlœ$Ô%ëúIÇ÷77lÐ…ÖöÛqœ¢q” £J’_Q\<ã‘í^ì»Î ·ÈèmF´n Ó—ºÙÐñN„‡EúMõ8ÒxÙõ8 „Â(üÐ i»–¨6[®‡hz<9çòë¦T-Æ' Åuk7_ƒ4h,Ê> "‚$Q‰Œá÷ÒnUSÉj@ $…ÕéºV ‰ßó&zšåÙ(˜†³„ ø¥›7 Ãp49¢Y#ѼqJ¹MsQI¶u¥Û éÓÙ¾-ÁvM·~g E|&Ö”K­šÒìèr°bšféãà¶Þ*§¶¾þ³„Ëa‹Bv€—Ï!°#W¶Åj(0… Ä3ñÚè ¸Îé¯Aƒi·>þÈRÙÞ”D\)ÆY:S™yí…¶”V¾ÂW-òrµ"û¡ZÑ»à±[k,k¾û¶H!¦¾0ÇÐÈŠ0 •“Ç´„BcÔ*éŒ"ÂXî²s„ö…ßíÛ¬d ž9®@¸J2;tÑÛ;;‡E ¥ì†+$Û×i¸zGWIBµj‚Hõå|´ y?v7#w]¥4ˉßhJ t Öµço=ù2ÎòWÉ¢"Üê”YÓù=™¡'Ÿ?-¾œÐŽ'nMÛaQðqAvªoÓÿÛqÞáëmŽþÍrªÞÞ3À¹(èOe·uºðÌË+‚oNú/‡?†(¾ñ‰o‰X¼'°Ú báþfö+çÙú ç²‚¶óW<Äïzxë$p(wTÅöYw0¶oZe$Þ'g*wØì´Ãã¤ì G~ÏgßoG n؉8LˆÓ/ú~6š¾þÝòk«9Û£H×3‚öÞâ¡…ÕØ6Ý©iòüË¿RÃæÜX / øÍUå°.kÃU×Ù•âúÃ(fsøûK¢h:Køÿ/ s¤>{»|ö(–br endstream endobj 399 0 obj << /Length 2779 /Filter /FlateDecode >> stream xÚµYYsÛF~ϯÐ#Xe!˜€oÔaÙ‘è¨L¥¶*ë}€À1 p ÐYù×o÷L.òî&yÂ=WŸ_7®ž~øñ­àLúB*~ñôù"âQø¡OÛ‹¿{õç <}ÔU¦›Å?ž~úñ-‰Ÿ(®pApqÉ…ŸˆÄүʶÉòSùfq)$ó6 x>´yì½]°:f&ðîŠ&'¢¿-â~|]”¥>.€òìì n¨ ìåniÿaZmíèCqا‘Þ,¢î:?-D×þ„K’¾ †B{WiSdv¶¬³´´Í´,vÕ^W­í6:=f9rÅpD\\2æ'ahyÑÖué[–I5`ç¾J$pÎP¹{ð(öÖ¸À´®ŠníˆÝp?GníKÌY¸”øÄ¹’,0Ë..cáÇRÂ`1¿•ŽŠzéÈd(˜Y§Û­®¨ó´`DŽd“åéçÏxù^\0¼¢ýVŽî×<­vÔ¶o=3ñkwðHü0ÐK:Vª°{/Uí¤ Ta’jd¥:#¤»ôpÐ[»àêaµy²ûØ“`ìqóþÒŒ/me?•FÞýn‰wº‚;ƒ™¤mQW– þl¿‡cÝê‚·i›>§¶=Ò³íp»ÍÞè÷9Ý‘AäË$q ðᔕôÚUVl+zGdªœ%7)|!ÄT©Â¥q‚JÅI«DàóDµê*=.àLÐw#ywx§` hOlLÆÜ{ìxó{|ù©l‹C©íH£ÿuB·c{CÓcÎÀ;Ðxο‹g”‰[}HÛ¤rÉC϶Y^T»s|‰ò¹ŠÖºÍéÞ·Õ×—ýycT±Ñ§Žo–ùahvi‹Eg¡<"^:m±²ÉMÕÇ­ñY‚´Ût¤w× æµy‘ºÎ¢€Ôòtó{Ì[ûvÊŠ!Žœ«ƒ=n´cÔ¾¨Òªm,¥Ñ`ø¦vƒÜÉ úöšåìBÊØû¥*@Zv…õ i{:êÑ^xs=gˆ»²~ƽQ÷R¸HMMPkÛrê0kLHØŽÿ‰Ž•%j :‹bãL‘Ø`Ðg'Á‘u]ç'°ep^¸R%Æ8¹CüÛb»PÒÛ´5¸Ð¦Å0ƒ$ûz«ËƶIl'GùÔèdêÍß|XaC}Ÿ)à\|2÷°«SYÒ•Ö©ÑqlÎ1 B 3>57­Ýÿ”µß1w0`?ˆÂ‰½«¥PÌD<+xùŠ%ckÿXXÒ‡hÅKbwþÇ9ùôãKÂk‹ª÷!†¼";§LŠûa0}>“Ë( ñý‘îýqä‹$yEbÙ¿?öýðÅ÷ó pïØ g#2Cæ•¶iL¾„º±iœ„k‘00ÀØmó”ZM±?”2#ixP·,5YŠûÍD# KöÎc{Ê#:®?>Ô2ªz8}Oõb韰^.5ð3TâLP‚ïå¯ñ= {¾'Üò=aŽï.ÒHž¾E‡Y‘lŠY‘À°æòzþðÅŽ:˜ŠmLiK„8vKë*;4,L‘:ÚüqÔòÄz-¾ÓU½×.´$~,Øʾëø9&NMÂo ­Xò ´Ñœ¹Ø„LýžŽŒ Ì{•eºtLÕäÚc›·^;4ƒ\Û\*?à3:¶¡÷-ƒÇ#5a@d´Œ£?%8þcAß•ñqhÞŠH¥‡ 0¸é{p¸Oí c3F`‚KÓ§×õngÁöÌ%y±òÞé]ŸÂìÊïÈ0¯*K€ð”jtÛÚ{Þ:Ê»%ö¥pD?/$ J`áœkMñ1…Í€éÚ"–u†×%®s gÄ&Yif¬åÌ' 7±u¬¬"^Þ€¢¹ÞpîP–-&özWW_ÓRÅ…ÀgLu85[:À6± í~„NOFÁKŠ)ÜûuŠ‚ i³.mÚêªgŠ8‘+Ì›0~YêÊ`,èöž :EÛù`»“†(V”ÀͨÞ÷\x$ºP8‹"ëCã.XÎ'R¡<7CPw^uíSãáÔæ‹¡?±~öÍ$ß®žõqG®ì3[Á<ØJ ÄÏú[ð‰däŸæ(Â…9\Øg1ýAþ›b­Ï ¤ ¦j€4Û.7ÂmîÝEHþ¡;­Uß—¥ý3ñQ0ßÖ]À&Z]9oæçdQÉøSð—àZ™Å¢ÂÕ<ÂÐü°‡´Æ¢ˆþP±'¸}úá?(:êt endstream endobj 402 0 obj << /Length 1758 /Filter /FlateDecode >> stream xÚ¥W[sã¶~ß_áGyf£Š¤®~sâìi²›tÇN»3=ÛFflNeÊG—n·¿¾AJ²ãtÎLŸH H}?@×Oï~øÀŬ‹”§³§—YÆg‹ÂHd³§íì¿Á'ÕõF—s–ïçW‚Á]è&7õ±Rsßç,мzÂÈpt‚Ϻj'Û¯qǨ3¿ãZ5ó«8 :'ÞLm6徯º¿ì*îç çÌ»“fKç]×àŽùÝ»ž³œòk”D<ŠRˆ›‡åz.¢à‰,’Ü€'Áª>HmZjCc·Wóßžî-LbvÅXX$ áSÖ¦SèçÏn~ų<¨_hÜ)STK {KœÕ}´Y‹LˆÎø§“8°$ Y‘Î":æ±/«\,K½un×jºÿ,ŽaÁ¿ý=Ù‹x±âIö•ótÅÓÈî›]q‘‡QÃwvÝñÐW[ˆJbã3<"”y.ök”®NlפgÁ²sŸ[oêiÎ8…|}ô~®¥nêrnâ¦QUåV«y6ž| ) ;uæÕ&mŒO¸×Ût‹÷ÿ†z9µz‹7B|Ýà'ÈíY²sðã’Ì®ØI ^Ðöå~@éµúõkB|MÜ¿&ÜÔ}S&ÊÝ·Þzåjø$\ýgÁèÃõË×(âݾ½º¯îËÆÅò¥sÓ!8$w4 &;m_ÕøEçòro.yû(È9Õ(°» ©˜<8·®<_D<å[Ýð{ó¹©iµ•|–­+ž…/ñì>Äì[kS6 öºRP޹§ˆavêUµÀø}£Å ~»’]ߨ7«X˜¦ìßUô¼j°…`  Ár_3ò8„=)”q²ikÎG` ]_ |ÁÁ'}$öFKʲ²Œ02¬Ès™¸ˆƒ»Ã±™@ç¼uu]µ´ß…TŒòg]WõN—²¢u«€ìL©È´¬Gé®6— 9 Y,<& ¥»Û£ì*Ôºå§ñ_–rëÀß”ÚÍ~Þ,/Àžæ!‹Äìy²àq#î0zà3¨Õiê€w4´–@íciÉÅaLs*0: £Ñ’4]ß¹ª¥"ÕÇ"ØëíV’=8”l·æÐ·ŠC½U<Î)oaÒI”r+y§ß¤…˜‰)÷»ÇÁC]¹Ùµ®«KœWL¢I'I í)Dí4 ,ά°LÁŠÌAë7É×MmÌ^CÊŠŒ''ܦ.^±ÝŽ?€D£µ7"VÉÐç tíÌï"sx§@¶Ÿ-Kȶýê’ ‘µW¦ÕÄ.$Xß®0("ÐP§ •ßhݺÒþ/ày$Ì _Š—ÈJïÌ’à~ Š0blÂDx|{!d" “øœOx¾ˆ#œ˜­”„ ËNŸ’]âõ¿Wõ@+I1ð9OˆÏqt¹ì­°¼^ÈåÄår’ °YáHǸÚ×dëï´z¦nØÎá7«…¨ô--¡ñ?VðØÈãÝÅÜÅôGjÈýÄå>¥3/B.Îûþ7`%²ì ]–ç ð`i%ª$XƧ¹ÿe¯Ôø³„5hü#Ц hn*5$Äûimt‹“—ÁFŠQê^ì-Žçê¶"{§“fýÕ–ƒ:è]—é¦Kw+O\ÑkÉmÌûIù¾ñ­GEC?«ÉKf)ä­u7y²ŒrÇFU5fxÜ [=.iâž§µ74B®bWÎÔWDh‡.WD4rñG,rèÐ8?ëÐ,dÔ¡Y,þ¡Ca§ÿÇl±Ê"û¯Ÿs”³ê؉Xئ†h›¨}wûôîo܆S— endstream endobj 423 0 obj << /Length1 1677 /Length2 9663 /Length3 0 /Length 10764 /Filter /FlateDecode >> stream xÚ·T”í6Œtˆ„”äÒ3twwƒH0ÀP3 Cw·ÒÒHww—¢ )!¡‚´ ðá›çœÿ_ëûÖ¬5ó\»÷½¯}¯g˜éµõ¸dl`VE˜ ’‹‡$ ÓÐPá@ >nˆ—™YŠt‚ü-Çe6„ Ü 0Ñÿ°C@ÀÈ{™<yo¨s¨º;xø<‚¢På_$pOÄÑ}õ‘¨ñ€ÏÿA<¼  þG pŸäþqþW"xob÷ûz½ŸÌ?n û˜Žÿ@^Ð ìleó^÷iœ~ŸÜ?6÷aœÝÿpOo ËÀ{5üß*î‡ß“fó¯ÿ½ þ3À¹µ;q?“?vå~ã?n?Ä b»´³ sh뺪“¡òäÚ™Ç8ʸzÆË5SlŽV˜³ØLÒËÍYV«T\âQ4wèÕ”u½Ê[{ê»ÝH×äÍÁE§¸gGg•°xwñ`!Ù÷’ša‘  ¥Ð(M–V´ 1Œ¢MK؇#ec7¬ÇLà÷´aðC²' I¹¢jx—fO_]yŽ:µˆá—OºÈv«1ý3ЧùŸœ_†nÅ™F§kf1¨‰÷üÀMò¬%Ü[!¢é VõÙ9fŠ@)ˆQËócÕ®¼zô3¿Ìã0‹Ø×Jé±ô¡Íðëu¶´«Íûí“C3zÖ”>!{ËÛ8ž/>?hˆà+$²ˆ‚¢Ý›y‘th­£’É—n†ƒ™PåµêO4Žª‘ájÞË ƒ³?ÝÕÒULÞŒ„±rj$IÜVmñofîŽ÷°@íxZ—F´­ÀA–Ãvàoúj„É)wå‚5|Áˆ×D8þK_²tE$¬#è¾4£Æà°ùó(V‰ñ…¯ÿí«ÓžY–e×ÚX—xâ8ŸÆ¿¬âÂë#àx“uf}œœ§óæ…_­×¦™ú¨3¬Ä¿Ú§ËYàëÆ{¢q0Q]^ÅAoLX<wG4CõÇ­¡¨sÚ*Ô”rÍ‚××gÁdÓ#°.>\òà¸ëCŸ_‡¨YM\x“F¥6©˜á\¯àè«aêúÚTÏãð¼&Ô®üf/UO{Žj%ØÏ²Ç>¾Ì*­ßÓ8ôÈÚ„ärÜð EÈûÊ÷q†ý½ÖðW,þÄð[®¹ÛEsøfÑw˜Ê‰ßÇpÿtÏE÷t£—Æ""]ÛÈŽêã—–˜jån™b{1š™-¡÷bÝïÍË—ŽœæqVIYÇ>“íØ`¼Ép~ YÌ­ƒÇÄ+7#3×ÏV’à gùÙ¹Êô†—+Á6-ô-Ab6ü¯ŠôK–D9·®=H­Õ^²¯,Šqø¼!ÅzWKìƒï /Ö™_÷–»ŽX îðÄ«\·Ï¨²„KAÞ¾»L”ˆ:°mo?vPûùbžÉ±ÍébÙâ̙Ɍ0Sd‹k(´`‡Ü¬>H¹ò#Cÿ6ïÛàÇ”$.Ñ/Þå).ûZéwOuÙbF|úZPí­>wÈÕׇ;ñ,Wdk¢tãúò[óº¤Tðãåí&ý‚c°oºžY󛢸‘´Ùö#\à NtÇ u?™÷Í×¶Gþa‘ÈÝåg¯B;„‚N\‘a¶×þ}Ä»³)luÂèzºóÏR½É‰ÅsÜšxRµÌ»6C;™û¾4Èíßð•\ˆTÕVÈ9ÃÖw@3ÌUþ…ðä6Ÿ}íÉø%cˆc°Ì=åK¥!:g6†ÐÀPãYó éÞf)løC(ŸuC°ìp» 俆vôìü!Ú,Cµšõþ®.î™äÏñŸú°Y‰bvêÇmã“×ÞÅAKŒðǘL™3ÔàÒ † \Þç|¢¹­TcâÆJ³¾Nöæ¡îÊ‘Ròº|ApWÑ#ˆñ~–š`¯¿Z(è›…aÙLgÖÇ)`™`_Àd4èÄQ6)jäÖ雤gÒÚ³ñOÊÆñu#è^ÄÝýƒ¶¹˜²²­HèY›}åut­b£öŠÛ†rñ¶5Ÿ\ðWÏcòÿÈ<[o\¹sa϶´›‹Ô©¬oÀa-ý,6\§ƒo@&·Ú›–»”Cì³(š°Æâ¾úþ#áG©Ô E<%ækFW‡ÅYM8Ñœ­¶ÑÚ[Ô­òür÷ ÕËÄxG`R K­ÀùÃñ¹òÍï>à×s­«>¯´úÂÿ,Ïd ä>å@&©°àØÔ@ÿl¸O=¡§åªp4Ñ ½î"{  ét­¯L=æ2wë=1¹ûé.ƒ¾’ 磛ñ3£ÔšenïRù´¯jÖ°¤R¦(½3à‘nŽàŠ ŠÎª<8x£è“ÂTÚd𨆊æôÞVÐËu£€Ç·ÁÓ¿>DYØÈÎ|ýÑ*Õ1¹ö§q½7Ìëm‹CÍ·t¯¢½î 4Sïf6r©Ž<ýÕ–'´?09èÆ¨Áá&d>+S¶õAÄéïmUØWMlŸH j“ñͳ1w}¯¨!Lv­¬iÑbÅè5åzN÷„6ïPuW™¡s‘ÐL£#pQ¨Oa¥î”œp$þBq)¡ãùJëVˆLàg#•hê{ÎWdêÚR‰Í£äšr5»zï Gïð—%S¼¹ŒÚy¸óý½£Ñ`®üð^,ÓɼßI}«bÌúÄTLÛ-åþ²z²˜E ®Nšª SKGÚ ñë 2g]׽ǗEª&I¶‹„h"œi¯?‘[ð\Íxð:+¨õ81¤x^J…bã.Ê, ¯{;±†l©?hƒì, C;2H þöe§ïÉkgé9v²›}‘„ í¨%FZv\Ëi‹ýquÊûð]ŠG`eLZlSŸâ_„À¹yÚ0C ß\žèSž©PýúTCõ_sÞFj~>As§[éÇ~Ë-H¬bY›ýpC‰Ÿ%¾å>ýEÕ€®]“†žæÛw|–¿< ná.ˆPƒ‡†F•ÙÜŸs!÷23öëªx}rß}O +A‰Ä×Dò4; ­ZvZeíÆ äw ¨’ÍÒX°å>Ï<]°€*<ÒCâ—X |™–Û”Ž Žz©ËO÷ÊdÄ´þÖ,¥y«‹ Pýšc;âµË+Ïš2åRа¼˜óº_ùf¶"Î p©+>ôÓ57b »öTÁ¤‚ ­êWë—óG{¡åÁ>Ýi;/5sL%²•xê¨À˜„Ï¢m²dç€Åµ÷,AJTys3<î‚ 37Ë`ܤ³T¿¬ŽdÖz2þüõ2ÖýcÙ†_\DŽ]íy#iŽ%›g7j´5α«ÒkÅ2Owß÷=ï˜ï#ÆædÒ…à8/È› UÇ÷ÅÃ&kŽ£ñ0Ÿ­$Ëüv–ñY:ÿœƒnÓ£)ư@9›TÞ_ïºH'm{"§Tú((Yóm~Ý‹¡u?1€Ö7AÂ>™õË…QKËíQ *9ÊóÆ—Aw·¥ÌìׂT¦N[dw7“—Å'v´ã˜àhÕA}#ûžƒÈphù´¦Xµr!¯õç Û dxòØmϸ#×!Üÿ®éRYîëhâm&W~sÐ9ã … m=ÌD«/¬¥ê9xóËo€Û7ݺ.Òé ô¢(еŒl9P;ƒãÛ4uõÒó¶[8€å;!¸Œ ‰I¡2IQ9Þ…m|­˜£ ¹®»Ívb1{9Òÿ’Ë Ùÿl1ÃÕéï >+ýùkÕþ¤’Äùkûl޵ÙíPa«ùÄ+i7sò+/¥;îÄl‚C ­Ëˆ¬ç±ßj·IôWºÞâs2B)u?Ö]»Ù¦40u²väÕsìbGNí®£õ+DZÅrÊÕ¸ž²DüzöøP¥({d!Ñmú±e düîÓ.fé‘´Ù°!‡K}y³PS›cûNn†³¾b±Ýã±pêˆù*tfL¦€ŽuÉLcûÉ{"B’‹•óàêÙwZ©õN«oÞzKPŸ•›û(Ä?ñaº ™´þºštÔ‹¿ì–9Fµ/C¸á…wGYb¨N'ß:ÆvµO))Ø/°ìI‘††ŠoÔPY¦ænI‹ÄÒgÀL¥Õ“ÁúéfºH¼/>½µO)Ùû/ Ä"¸f)w“aúVŸV{¶k[{vó¦ôH¾þ¢æåÊ7X²1n,£©ÎÞOxë7kôž9 T4%±«(]Û‘Â}Äk¾h,Íg¥Q–¬‚ì-kO­6.ˆÕ^~}_æïl”³Ïõ½YcSfÆÇÍÒÍÊ?!/né× [›4‰E²[5=oK1ª7Œ@+IaàuºÓ·Ø5{S%K«`Záâ¬V&Öµ“1s¾Çµ®YM çG[§r ¯ï)£‰Vâ©É+¿o€;¾ë˜û³)°ì™‚Ça/§Gж¾”+1EÃgºÆGZ5¾‹Î§^»ü`²Ö :¤ ¯LÊë¥Æ|Z–§Ok Ø–Ç™g{XxÒtwê†N“o~P'a'wü*±)xUêÇÞá{,±x ³ä.DÀýß`åäÚh ò'Þàéž \…’Ý‹öŒãT¢?d%D˜Î±¾R0e³· &ž_Ù#ÎéCqè Ub{“‚挆¹Ëm.•nA ›38(ÅkÒ<Û-%ñ^кÃJׇ‰Smµ¯Sª áŸíŠ5xz›­/𿬏ñº:»•ÊãþP¢Ör}!æ{~®ßÎBÑ—?ð²LóÕÑáfãáÆÍ†W¿Š½‚ÄhhYT‰Y’ ŸÔçßñM%äæk6ïê“Fü’HôÌÛƒaœºtÜwIÖî¿¼Û tƒ7ÐîßHš'¢©^O÷F„ùu=Ó^(0ìfÝ÷Y›=pöõè~1¨‰dÏŸúžeMˆ"ŸY?E™„g!†t\XãÊÎ=à§a.+kÁP,ÿq”ùäáÕê×Êh2Zù¬5nã¶õ̬+7ðùÊ ¼,\ð<µ£€ºh«­3>z w…Sý”tlÖCyq±F‡º¡‰Öëõ%•¼n$4¯ZÖodšì"”’§5õFc¬Gx~v¼GsG¬n ½“{a.'[°»WG"±ŠH˜µL;!Éqr­få5[íÍÔ„Påªí¥€i¾H•ÍÁyÒ.¿ã™Çgœ<"!%²Ôл£“P[½“Rø±«F•ÍÒÈq]„0eâÅa2yôZ„óõ ~26(¬r ÅhfGµ,@*.e𪓠„GF‡a ìp·‡Ô?ðJ.œˬ¤]t8N§Ätã\ò’¢y½ßDÔ’…-µøÓvî©íP3Ôe|-L¹—— WíñœÈÍ›%S°&ÆKά”P9ß.Sµ<OyƦëu´–´Ÿ€6ä…#0˽l_ΈÝ!¯üä  4†jÝÐßN¦Zòp+¢í(¸DÔldÌÞ[mµéVQLÜø.ÿmøÏ€A¿“×­ë8 DÏôˆÞ_¥tµG2CV]£EM7ÛNUÌN>g ,p€Ûçdym9M~5Ó–Õ“])Æïº.s—© ›ŽŒ«ùgIÒz×~ªxlwgʦèT˜$þœ)sRòâlA“iGfÅÙ¿Š¿¥v'U}ZÛWz;JÔŸŒÒš¥Ï´§¢q±é‹’%LÆÔ ñ«kíeÌ—°¤Á@ÅHDâ?žvœ …¾Ú÷ú‘š“ßþw+Ÿ"ŠƒVL?]éc` 0¡ÎÑÀíx¾=-½…Ý\š ÖŠH#'aœh€øÝdœYÕ~¢ÍÄ{ˆTž­¥ODù½™?èÑ¢e[w}»C¨˜ŠÄIÓÊG-’ðj(éƈ]ÆÿPj±;,q—Lø‹#½vNKd'BÆŠ¢ÐoÓÛœ€SÂË"®ÿµFç˾õBA-ìHÙå-a©p©°Ï;òñ(‰Ô&/μåS–z±œJ-“¬bÁwi~žlD*–ÕƒP0Ø<âÖÍÅ­š«gà“‘fÙõ–îþJöi>ˆ‰ŽÚ—^¼DÎRâyᥞžsL‘± µ)¿±¸Ò?£àñpÓ jÕÐøÑñ@ºÍ3·ë4åõ¡6ŽFp¡WoÝ9ñQÚM/<‰3®(ôŸJoHüëŒÛ¿ùXg.œÕ¾ábƒ¢~w6\\g­RÏJÛ2²‹­xp‹˜‘Öô²ð(êû+˜}ïâ+\/Óc¦fÑhóŽ/2–+NÁ±ú±ÕVÏ#ãIªV„{Ù  ®NÌÁ)Rܦq2BDŠcòß^iLXPšéGe<Í𨥹‘ÒñÆuØ›W¼™Ø—áÇUg­NˆvÖ¤N”ÿÍ'`Œˆ5çŽJýš2Bh¡¤Z‰ãyßd¾l\ýzLïD6;ËT°¾Ðká€ÀÈÆŒ¹‘^§Ôa:Òº†áî6{Õ›ÖÒþêW¬ñwV;ìd~È8*Në¹dñ0È©õ¨®iÚMܰÃ¥j”g.岎î¥â“Гt®òÁ?ˆ}`¡c%+¯mªÐ“o&XIB>`Ž”_ª·sKšV¹Þm-ëYÊ=D r…èg“•‰[•àÁáȆֵ¹:¤¾‘–eõÜ1?·–“W’×g¢ï/®žµ=)¨š´VS"±øj¤^„ù”…OMBEG1º8NÐÓÕ»z.ê£{~®psÔ¯ê±D,œ¨'³ˆÇ ue&¶ì*‹›Õm$ã¢#QÕ°²ñ¥oøÞ™~ÓÓ.,"{j‡¾_ºŽm µÆ¶½ kÅ<{³ ‹k ÊØ“ŒÄß `ËÀÑJÂ}]1úÌS`È0¹éç˜YÎ y¤XS}Ý£„×¶‘L;zÞŸG Ò8‡1ÚÃgõ÷™‡Nvpé°J–°Ï\ã̕㈲ïÚ;êðSápï·ÔÑ.º\ a³ü^‘®£3Ú²Ïúë’?Y€"µÑ¼,t-,„Dc½Eƒ- Än)5­«¨QŽ¿1tûnÊnëżÏvyÕí¥G`„‡À¦ª¸=ñ«ÚÐ!±‰:®w›+N“l_ Ó ôÓ'Q‚ûôF‡¸3 × ¤-#*íG‚Wœ7*úýL‘ñ·3ÞÙK‘ß’(§Á¡í»w†ÖöyfN,× WEÛµŠ÷™Çb°éåEËQb‰P™ÙP±HÀ[Ù^É¿ÆF,ÔÓ¯¥¨lˆÙ¯E#AG¼fB^¬_:øáx5ÚÂ]ìÔÜè4yn“Vâç/ÍÔu"@GìW-j_Sßs´JKB¸¹–a•ó/÷nåžÔ—)gãÒQzSK¬¢MØ4¹diü‚0­ "CˆóÂ<¬Wt¦¨û² ͺÐù¨0L: ›ïrP.kçõXdJÈêDûž‘E«ÑÜÈ6Q]T`0Ê ½$(¸Š«¦ÇÕ:½–M¹±% ³X/4œ€>ê¹<Á‚'ê®_=®*+éŸD`|øÂ4²;¼“ICqkäû‰™I‹0B QE™RF}ÿ]þ›QLG &}ÇÂ+xsÖrö*¹M…\g'Ùj4šižr–íì¥)çãc^F…8ЈC‡ŠEš1B^Õ7É9ãtºšÇKŸW;Êw[ûÏçÌe¹k¼—çÈÓ¿vî1Õ]:í–)º9ŒfMOÍ”yÐ«Š¬¿+:kÌ«¬¥¬{99Ͱ!WDÈ`®8fâÜ>Kß9Æ{µ=MLø¥õ‚tæ-u®»[2ìÎ?S"¿Rx=Û‹Ëb”½”ÀæÃ¢pŒÏ»Ãú2z©êÌ–êîqñ>ð­'Ašaß® ÖHPŒSG3‘]÷‹ÿ)ý^%žÝ•ËRþ' ÀøºNLÌo®óG/!ü”™i,²Â³I𒲜þÝ7žrÕöè’Jm1eYu8×KæÑÞj¬ƒ*’žJ‘o®ÆxâˆOi¡ÒÜEul,>ªøÃ‘ós^ô¥_¯¿˜¼ VÇΟ =³§×7™M^L÷XkÑB ø°}',õ½|ߢ÷¨6ãç-øVTŽa:ëçPv~T ó+ÿ¨ÇÕ¿ž9°HöP77¬‘‚è¼Ò_ÍŲ+vVQ:$½[gÝCclÖ*¨¨4·'Ý{ãÀºcœ%v^î÷XÕ?Òú>.ÌÎ#ØPò¹Æ¡vž0-© +ã€bÇM(žÚúÕuÌ”}3)TÐWë¡*p7° '´?†˜nزÓÞ+Kr“æž“k†ñÑ®¬¶ñíž{ŒÛª¹/JddÜôô>“éùÄ[³…q(ú*OP"—OÍôÇ·j®)ý+p¢»úCóá~;Û³uq+í[Ÿv…I½ä?£|ã3µ×¾5ž2aæerØ&Ͻ#IÅiž!yRŽ~\ÓôY,ε6 ª&FÎ÷ÆÝÒa‘Ýl˜I\Ò;>Çßµ÷øõЄ2î$H&›`mv™O¼®í­ØÓk˜8KSµýaP[¿“a4´FtÅÉÏå‹bqǤùÂdS†üо£*ÿÞp|ª<‚â³ð›SÏDs9d’䣱|¤hýœ&ÁÙ!Ç䀸´B_¼"OÏJI1ãy³™l»Õ’| ãxpµ¯Øa=µE#¦Z¡H®4 eþÂ>žæ°Ô±YT78áA1Çç0Ïžƒ537¦Y¬î¬mMÎp·~Ž•¡œ åX—ÀZÌË´õ_30ñ2¿r0¾¾jÛ£ð”ÞŸèþ>Íb!4Õ‚½ìüîö ÊÌë¡°KÙ›DEïðQÊ/ž„lèê·¢¤÷2ãÒ# Ê§ÃäGaÔVå+9$’%b$êǨ,2„;ZClí߬Ó(yÌ—‡2üDïrÖ*¾ëÚ¶(½¤_U9™Ü¥}ŸDFD/§szVªuG”Éë0b`LÄ8­‹Ìl±‹èœÿâÕøº'ýÅ»îïêƒð Rx…¸§”ñ“À¨~†”§NãîêûûÚ³œK¥©u:Q…Þ´?© dši„£RÐð¯RE;_G¸—Sbç¹îÓ|gÿT.çd’ûÐFUŠ`ìƒ I/Z"ÜÆ.ò¢Êl1µèûvžZ 'š‰õWE»f%.äÜ8áçeCµ™ŒHöJehžÒ†©£+ÎѰí.j’¹(sœyÚ>3¡ëz!oaûþûë´Né2óî |RwÊrš½ò6¹ŒùÚõÐGõK/—¿Éÿxa޵*L2üJË8¸îŽ)OªpëLÓ"ðëk ã"±ha[k?îØ¼Ü9sÖóæãا0£BÄØ0pî~è¥þy:~ˆå®£(‡“cgšV’ìf\©wfC­ËÁÙZî/½¬þ^ßfµ‡šQ&»ÙZÂáFa¥kÍÿÌÌÿÃv®*/`s’-$¿ÆñÂ}*´ˆ· ðÆë[©²ƒ’:KÈþÛÉD}Nå™Þ y²fÞø¾'•üÐ}EÃMgOÚ¶¦8¬™, @ÆTØ‘ö¸åÍÛ¯ÑçdpK7”Xf1¤~R>¥aQ·ñû›Ô~Ç}åIK]Ó¬Ô£ž7‹‡+Ó+îÞ¬Êöñ‡”ðJ;¨`EK\£©Eõ@]¨­ºf,÷«C;öW m½818_»‡Þ¦ãw|†n¬RŸ(×np5ÌýŠÞD0†øƬg›~ ¹îНÞ: FîÃàÁ—ãTpÏoÿ%E>Nüú#»›ÎOW–ƒ ?DD$’ RÁ¬|Sçã!¨§:õ™çVž´î­i÷2¢¡þåã' ‘B—O× \ë•0>lóL_øp}‘Ô} 7e§¬» âŸS¤%þÎÔÈ—¨ ¿c¾5 *˜h1®nAq9“. Í#Ÿ®ï ô™W ~äÄÀ_Ü-wé,¼”ÓRʆüp“_&.Íú>’¿»k%×üŽÀ{ª(xuå°yÑ|ùÒÝ:\où® …÷‘•í‰ÖB)q? ʧw­ƒjX9 ™]ú³ê NEŠÛåD*#V)Ñw;¿#ªG=ž~,;Æ•WzÃ47BÞÇX—µºõÆxÈj[í”±ýrºhzM##†.ì(%­O¡k61·¨d/½Œœ%Wzoa&__Äoór‡b‰b¸½g.LÇœ>Uÿ‘Ħ?Uö1ó±ÕÆËêˆØdåÁK•̪Iuí¥m†Øö;¼s [%×ýzÇý5¯[æs¹Ò‡u³çt³¨Tï"k¢wr[áîwÛZ‡Å¼öDWî¿TŒ²ø1Ç/ç¶L4¸T¡?Ô…¶oMËgË~iõ|ºÎ&Á¯¾éú™¼,µ$ü†J2rõ}ö>ÃO®:åÐÆò´gŸƒärÑÙŸÃÉ£ý[&\ìÀO8.Õl=CâžR?À,VÌY°æn×$m&möµõ Ýrðœ—ÊY‹Æ¦(JˆPõiÜSš?˜ÂÊ¥ói’j}›Í;C3ídΦ‘Ò?º`ó´_?2%¶qý$¾¡±Þ‚”õªŸ—â8ÅU[…æŠË7sbL¬/S¶‹ÆlE·—T‘Øz½" ?§â{¥DßËø0ÈÛoýô{"sEà¢ÛýT3l³J&ŽFÓ$r¬A`q+HÃ6ÀÑ—ÓtºGÿòÅacˆÅÊéà#‰™8åenັÊÄcKóÝXQç€*Óþ‡‚sBâJë&vcËʣʩ‰†ÄÑ Šv½YÿêCNê[,(òF£ûcî2‚1Ðÿ¤m‡Þ)F±êapjž¾o%»¢ò4² ÃŨ… ­ÎìyCö­º¥EWö÷¾x^›\†Ê’–šl¾î¬Î¹„ X í߸wXÄ<—TP3™þ"$T6®‡+> ÒKm¸J‚ Íõ“#Ö´ š\#”o¦Õ¬Åí{ïŽR¸ÛÌgFÔbJ¤„µ"ãé6£z>­’m÷µÅ‡~zÿ,œBâíÄÙÕR»Û@†*©wnToø¢ý‹·kÍfKûK1S¿Æ!ø?«Ûðƒqw²7Rx4\5‘Uïé`««8hÁ•µ÷çË4¡Þþ³r›LåØïQJµS|¢™;N¤ B΃ƒ½³è«ÏÆfrj8C§@þÞC[˜RÁÞ@ŸUÓ¨<“°Ožsh鋌¬G®/¦{‘ñ ©µ¯« v‚†CéŸÓ„ŸYù¢‡»ÐfN¯«¹ïËõ.kÇ-$ZþýžÇO‹ÞWpÞ2p/‰.Y¦öæA-cÊIZåÝ*N¢!êëG&V Ò)× X*ÒJÔ@d‘µkŒÏ>¸bG~œ4à¦eªOèy8缓}ýô€ªH{7À–µ-pr©‹Œv8¸&w•ìMDõ|ö*3«øtï#u¬çÕ /Ï:l'±ùnÑ%%¯Þu-ÙIÎÑ/ÛfòD¿J”K¿£j‰”æ&›ˆK/Škó(ïäkˆ¸µ›ý£5<oÈ™œ»³Þ™lµo©}†PÇîð‡^ÍÅkÈ­\?jŠåíû!ƒi¶uÐ<“»ŠEöÉ4á… J’±Í¢1”Ì1ôóPÖG iËÛŠCŸ¶A©T>ûz /ï—N* ½:ÇcËŸœ˜bžìm»Ü~š*Ì\ÿ¤jž¯v^š&ZmO;iß\Ä`>*å>ÇQ.×zÊ<€à~®ÎÙ6¢ÓKÇM™o¿ ¤|I;ÖÒÀÂíx+rõè˜j³˜Ž5“ဲ”d!ü»ôž@[×±·¬âËÆÕ;ðË\¥2¬„oæJ•†#ü±¾ÛÝðz†aKÃä "„›„lðîUø>{©~Ÿý!Ì]L£Ä zÂ’c¨I§Sƒ| ©R> stream xÚtT”ïö.)8Ò5ÈCÇ ]Ò t—"0  1C "H#-% ‚t§„„”4"­(R’"ÍŒsÎÿwî]ëÞ5k}óí½Ÿ½ß½ßý<˜UÏP@ÑmƒPC£0PAˆ4HY[[]ˆB Â0؉qFüuÀ&w$%ý¿ÊîëSa°8m4 ¤áé ‚Š€ âÒP i$ Hý ˆv—©À¼¶ mA…ð€•Ñ®¾îH{ ö˜½‚¸á< ¨””ÿït¢  ‡¡@Ú0ŒÂ{"æ 2DÑŒï?JpË:`0®ÒBBÞÞÞ‚0A´»½?ȉq <î^[ЯA:0ÄŸÉ`‘Òãßm‡ñ†¹#@X‡3Ž@y`3Ì †t†Ù`¿;‡ÔõA0ì€Çó€»#]1‚Hç_# ý*ƒ½eU”­2ÚÅÂx~õ§‚tGÀ±×î+ôg³N(´7Êÿ¯a‡DÙÚýÂÖÓUÈ…tóD¨«ü…`]€ÿøìDRBDR„p!|àB¿Êùº"~¡¿ÜØ ý]Ñ® ;ìˆ@¤ûð÷€y!@wOD ÿÿüÓ@¡ [$²AØ#Q€ÿTǺvlìòÝ‘> û,÷  ȯ߿ß`ée‹F9ûþþ{¿B:Š÷Œ4MùþLüÚä/ ‹A@P¨$} üg=òoÿ¤ª£ìÐ (äO·ØkúWÇ^ ÀýW< ÓAcY‹qÿ‡ä1û€þSýwÊÿῪü¿Hþß ©y:;ÿsÿŽÿa˜ ÒÙ÷/KZO VÚh¬ Pÿ 5Eü­6ÂééòßQu +E”=–ÌPQAˆè?ÒC 郰ÕCbà(óÇoüKjÎHBíüõmÁfA ÿÃê î„ý~x`yù'óÀŠ ó{¿lVNÿìCGÛþÒ°˜8æîó`WµÄ@þP¬@m>¿™ D¡1Øvæ@ÚðkÍPˆHÈé—ðºpOwwìÁ¿é€=ô_öoq#>8`v — u¬ m=®VdòX•%ÜI?6Í·$ÆôªNX}I2ÌΚÓ,U›íªY:vè(¹?ÿ4}à¿\ÇRï+z$À¢öÍžÅ&aêêw2Ùÿ'mм '×4Ué–t‘{/ŽsÌÍ7×åmí{ Áä\µÝ3ÉÞœÔÅja­:íoª‹³´hR&[K˜f›~£±Cz®œ%—øÇ_ŸXD¥é£ô·¹C¥t—çþOrqÂJf¯é&APDÕ ËjìªçK™®GŽ›¥çYŠCë™ÅÉ]³¬õ‡ß®|¯«9^Ð8d¹¤Ç¾Ö_)²«ðüÖVþþÝV°Ê¹§Œ d¼¼mxŠ‚J>»>Íâg,ÇZ>=XXnfîÃ-Ø¢_ØáÜ6cµ}z¿ôaL·}òÇꉓ‚è4ûÍ{—F¶tòõ¼ôQJçNï‹ûÁrÆ•‡àaÑŠyÚÚ3-ù’׬b©›…¤¤ô³ Yn8ïÙ½¬8´}Bv½üb±BÕ¸—é¢Çjœî¡ÝG–ìMÞSÇŸÔ'‰¤/¢Z·p;%z(|ã&~–`~÷Õ·’†Èvÿõ¹7“3Åù9RuŸ~Ž¥és=wå[>¹1VÒÅUA¹‚ïö܈æú¤Ö¥DpX5Q$rÏÔ™f§M†ÿm¾–lžˆvò6yô­ªð‘“ç)dD@oÉ·N3 =ƒ|i®÷=T[4²‹]QI·S;ÈÔlöȾ”‹ægêôù«ŸáÀA&÷i¿XˆÒ™?©T_ˆá«¡ ]qC•bô 8ÑåM¡A¶å¥ýUš<ü@¸/óH?Áó®“üбkÓÉÛoåÎy9$E¼ŠÎccêÇæq~ï@ªª_"ó§>Ñ+FN¼ËÕ1/àñ¹U²0žÿPdîQÉöÐÇÆ¨p A®në$´dÄéãíŽ+ Ù½/”Ñ¥"û*Ò¢K&gÕÝÞónÙz9ðÆ®õõ숢°jq™=P7ໟ°ûGfý©å÷JÝðSûô‰ÛÏ“®¾ZPÆÙ[‚®Fª¢8w¤èW…ŸÍá.²*¾Ÿ;ªG¨§âHãz‹9‡øŒ­uÏJödo¹ùÏ,¿=y´_¼-” ¤¤!H¥NÑ<»Ø”ìñܘa›{kœ{y/³/eNº¢-4(ï>µ<Î9EVÀ€‹Œì¢¶ÐÜ”=,qk‡íÈ6õ®X`»*¯%çqLÏÐo]=/™ônx–ËŠhŽŠ‘©#šQÓ£¿[«MërçžÙ•”¾ž­Ûåš„òýÑþ¬ç¦Øòl’¡ÑYpóhõ !°À÷çÀEœ39²ºæLΡ£W­-Y÷G’Ï𵊎ñëÍGÞ°vk ¶“©~AXå)?ïw‡¨³Í±‹¹:‡sµ.wF°›žwÓFl^N÷Væ™ðR1fY Ü»ëð áä"R»ÛvŒ³ÚÛýx¹á^•OÆ+ݼ†÷ÇwÐ&É_ÀÈiI?ëçÔ²}á­áT†Ÿéúvý¹Ç5 ÌŸüè8§a÷ ÿžÒÜõõiaÊ`ôÃÔÓÈ-Ä+ŸÍŽk9—Ä¡¹7MY˜Ú„uºn,4¹Ð^ü—› »o »ª¾©²+"Áû™7ÉMVTU,f#&#Üȱ¤£ï¢à+Ó¸ÑÒX¾·Æù@hRïc%°B°˜æjÑ;Wpwön×N¼ÿƒSù{ÕšXÓ/s›xE-ÐQŸ­CÔ *c߬ï¥c…|5\i¾üË‹ô-;øô»¢:Þqô­_$0¢>Ou5»4î¦G2ĆÝE”^ìæÊ9Û缜õ®.܉ › S6eâÉ{’R|º92-žáxH](*¬)G†×[<1|àVÞ{øU¶¢ÂgDÔzPÝ=šë\Õ‘b0£sm:›Žá[C÷Ý >ÚN°@arxÚë#“ì w²˜’\S^[T &ëCÅ—UFzÇ0ègfü̶M÷KúùâÛ(ÒšŠ Ô;AŠí–V\â”*Ž8 ÃŒ’‡¼/çU¤omgûžá¥õ›)óG qPų°ì:Ñ·‘ŒI©‰ö€™WÞ|ùÑ$QÔ2ðy²±Æ•lE!÷KYæêßd\Q\TÙÃŽ²¯–¢¤¯ùéÒGÙBÙÓQ¬ m? †ŒÜÔÛ•9xk$É$.ÜY†šiÅéÃLòšµÏ] ²›Ìº MÄ W²"0f‡QƒYDO7U÷¹’š&û톩ÛŸ™ÏG<_cÚY9EêE]A<›WMQJ¬¶Ú4ÝmššÓø¹¬õS'y7ޤ6i3e˜ÃJpûôäÞÍ!‘Z`Ç*Ù/vø.Fþôià®RˆÞíÁÂ;Ó¢ŠOQ"ê÷2Œ©ð?ËoÝY°¥óŸã~´™txT{ZoK-uÜ„ÑÞâ‰d¿ü_AÙµ<¹¿ÁWæâ±*]ºŠyflL‡ßÖlNŠ˜W´lAцኡê‡zû-ò*:Dº€ù°mÞO?Z¬ãéê“â‘Òw²xN¤9Óäý»ÒÛ¯“¿Á4o7†fÏ(S¸Œ3ÙfßÕ#ž|å\hòóBÿë^ˆ ·éÀßã~“Õ:¿(k$ɳ>’Z†[uä!÷b4¹ó¨ø!³¼ ¹·5ÃþÚ&#æÔµÆÁ^$Ôñ–NÚ-®`jÙ™T£ì¹¥žd¦ÇÏÆÍ 1ASj¬OÂÚqæòׇòî ³¼ äлÁröc}Kk^JmõÖ[ü%;“q?óÛEßì‹‚Ì‚:ªyêÞíñÙ  ÍÒÍÖðF¹| äN2&K¸Ö>fÞ“hl91 à{S qKÍ6™~ Ü^]Æ<¼&}»ÿ›½ªvÌ2Nç•~’«I0­+§Ä})·y }´ú÷‹ó“T‚xmá°žøP'7KÅù—G5v³BKjñî¥'ÄOÉ L¼Î-v+¯ã ô”ÎLkP¼˜x¯|óÎEµ'}Ëú}Ú¸ _åøÖJSYÚ¯¤ÝÕKœQµÁêFLj#4¶ÛCäßb9j&/ÆœÀtµ×{h·S½œÙ¸Ä÷2oÄÔI'ÇÞ]lW ™‘È|ù 9I!‚0'žó^^‰òe°{° Ø;Æu³\±NÚ>­í¡X}ÈU—ˆo} rIй¾?ɽº -›šgyصî7ià¨è}ìY “dÇè V»å…äsÜÄý”ò˜:ÑP7ë.MÞ†BbEGLÃk¦e_ fè¶ZoÙ0Qj÷cžhK5ÍàG‚Çï˜EýÈç íO¿ªˆpà91ðCv i:3ÔaS’¹e Ñ'U@`b¸«ÞG}÷å.dyFÿŒÓ7¥‡,œ©#+/ž?µhÔ32µäj#{»qÔ7§œã—ÝánþHó†èá”—ÿ ½GT/Åz<#Oí:ž¶¤Úð´áfÅýÜçGMrœŸÙ¢”Bö®ÓŸMG2Ü S ^qQ1Nmu˜\× ‚jó8½Ý!æÑ;" 9S`6 ›Ò/ámgtAÉ_ŒH¬Þ,:ÔàîÅ:í§Et´.$2¿ŠPn¨q~†! 8¸ m;é i[$ñ;Õ^æ‘h')ÎÁ‘£:êJ1á³>I÷ó‘ õâkP^U:¼Tü—fN¡$‰ó}¶×¬?½‡÷ÆÂ¿¶eSEÀUw@6n¼%,ìc`Æ;MàU¿>§1Iþr?í5!’æ2¾ù)//zÆŒ~jZé¾à§‡kO´vNì+uæ²_Сéi Û4éØ7ÚËN§¬:¤©"ÉîXÖð.RPJö·Þc/©Wtà©Ùe¬´˜¢‹aXµxÉ™4—jèÕrt fÒLÓ߈^â­¾ ª!º`•ŠåhûKs—XebîëÀÃ=¸&³w_&µ8½¹zü|’bÍ—_õóÞÉç&g½ïú5‚¢ÈF~ö.ë ,ð!9¯an!1ñ3µ£—a×™èsi'ù#W÷je?ŸÞ[æðeîË™+á‹ááN"ôqƒhþX^ï¹XŸnÃTD½Àd&'¶²Ý„ i'WLQy¿žûq@ 0KðÙMYæý°áë‹”Ÿ…[:æÌ·™|p¸-Â}nÕgYú„EÚÚD¾ðJ©ÃøŒhšˆ3·÷ÚÊÂáÑäåõY©»=nÆÂû'ë8Ð4xá£VÛ]•W7ò”WÞ‹yi®ªž"M>±ž6­4××ȸ¥'Ý"'^Å$œë‚%Lý’Ò¶ÖtíÛ›»µ†®l¯ÅÇvSëwMG¨eí>¬!u[‡·å Ì4ã´v„Ùz太8¢²™¥?îVÈ| º–²Np¨Š‘ªUwâé•3)T‚§OeK=ëÛ5ç˜v¶ØnŸãJJò ŠÐ]¼n±œ¡Ü}÷“Î:‹aõ©²_ÒÃñ¨¥kŒÑ“Çåó"]øþTÆ-ÏŠ3+EÙGÂwúF_qÞftI¸>fTûsžŸpm÷Éøí‘®â²g”ÊÙ´–yKޤg«ŸÕ–ìk÷šüÍOœS^BÞ‹®½áþ?vG7­Ç^¾ÎLi`Që¬íáž$à‡$3©³–Éç¼¼ ÛUX¯·};¨ ̌ՋÒç5à嘞„—ŸwÎÍ’Rt©GÌ$ôd>Ú>Ðf#İuÊNç¤h4û¦¬½´ÔNœXÏWN*ÄâCÚä×1º½Ž±sòÅhUnÙx˜ÕçB¬òïÒìõóÅÝJ 'É(n$ïÓhÅ| 8½åæì]~%C»ï)Ày—CHëÌÄ¦æ æ¯?zÃZ^^ðý%NÖüu ’‹»Ï↚ô¥_/dŠ¢ïýT /çhwh@QôƒÑ¨ó»ÖÚvoÑY=Õ¤?±K/^‘c<wçjIY2Ý+aðú¤7D!Ñ]ç¯BÀsÄ€Øõ´§zõ6>Y‰k‰îÔ†5”G654‚U¡ŸW tš?ËŸ ;•%ªòõs“²fEÊÍÙï€ûÈ{J(ûÅ^qá{_ÅÀ¼äk+‰ärÚAïûáÞO½]× »ÉVO‚}ö‡êÛ/©%C"wùÙ3-öïTÏ@Å+ ·ÙÈÖ*Cºy„gïô®7‘Z  *_þ‘µš÷cŒ„7z,ÅG¤<»äaË/¬‘‘¡Y9¢J¹,Õ t|T¿úêÿý\ý9ˆâ(Ε˜L—CêÍë˜k¥RXºÖ"*ó˯­)ùLÔ+øò‹Žâ°óò¶ê™ _/]ÊΨì4zä»d?c$WvxÌq|¿"•Ò,Ù_ºŽ¡Ù•׬ôºÕ ù_æM·L8~Êʸ\§‰`û+oúãØ÷–êÑ7#§d(rµÙ¬dñïê«¥Ï$GìEöôD¦,@t2´ø„œ›)¿êmU¸µ›QOjw2½ÇG,M7½{ÎwKõUÐgv?T|Èý”íòÞÄ…q6Xç3M6Ü 1£Ë2-Ý“Ñ5ÜYßqW¶*ÈŒ^ßÎGùkkŠ™ôƒ,ð{çG)¯Ý†šf/Ç·P¹7“LíM°}YÛŽ˱-7"ò–&†û½qéé)ħ8´Mq`ó¼o³¾lú’èž÷=2¡Âݱ™(ƒnÏâ? |yA¸t#\øˆv²,ÁH‘ªâeAëèà É­”Ÿ¼V*‘¾\8ɽǑo µ×—:`ßO${½lNöÊZ“ñ€÷3glÅcÉ/âo9S³gmäIÑ&+=Òvl3 ~´!2Q1WÝ´‰Reh ²6Úô(¾ßðŠjd.ç¸V§jñCÂqIPåÛ¥gé a]ýÐQCΡ#Ü0Ý–½¸þ}ÿÁ6[çîf`RCpw"¡ôfØï6-uƒ/„t³#ð{úæöµË•üØÌÖ¯ŸÓ,U¥·µ]Ì %€}88Æœ•@ª•GE™ø[â ËÇ]v¢NÚ\zë<÷«»É¢ A‚fUö+‘ »/Ö¾;éßС2iÝÒ?íx3´‘Ä]ÑnªÐtev ê»ùz“X@‡\7\î0t¿Lg—•¶Ÿ.¨9Ô­ŒÁm{Ñ6ñÎs£\ /ÿS5õÒ,O9E9ðÜ 5n"ߣ°vtVDç¦ÛzÏHk,CêÁ:+ôOè0)jVòß’ØDC¸õ¬%÷«vž-¬u?¯Ñ¸‘•â}¯Ð·™Ôòq[ä&F ŸBy¿Œƒ{à§Æð›ôuû"¦Ï½(ÿ'^ŸÒ endstream endobj 427 0 obj << /Length1 1386 /Length2 5972 /Length3 0 /Length 6927 /Filter /FlateDecode >> stream xÚt4\ïö¶Ñ’ J£×-zï5z‰6Æ`”Ìè!:Ñ%Z½…(AHBô^¢× ¢DNü'åÞûÿÝï[ëûÖ¬uæì½Ÿ½ß½ßý<‡™á¡.·Œ5Ê ®ˆBb¸!<`Q@NCCEƒùyÀ`>"ff=Æþ×MÄlwE#PHÑÿs…C1XŸ<ƒÅi €ª›#á B¢¢`0À‹ü ˆrä¡îk@ƒPE!áh"f9”³—+ÂÖƒ=æ_¯Œ€ˆˆ<àúÈ8Á]0(ЀbìàNØaPG@CÀ1^ÿ(Á&n‡Á8‹òòzxxð@Ð<(W[Iv.À±tàh¸«;Üø50  u‚ÿ™Œ‡ˆгC ÿøuQ6¨+À:08ÍpCZÃ]ìီŠ: å Gþ«ÿpï€ð@þ]îoö¯Bäïd( †rr†"½H[Àá´Õy0ž.Š´þ„:¢QØ|¨;áµÂ~we´(vÀ¿ã¡a®g špü5"ï¯2Ø[V@ZË¡œœàH šèWòW8 {í^¼6ë€Dy }þ6¤µÍ¯!¬Ýœyõ‘7¸Šü_ÖEôŸ-‚…ð ópî ³ãýU^ÏËþ;ùåÆNàëãŒrl°CÀ}6pì‘ê0®np_Ÿÿø§EÖ°‚Û"Dÿ©ŽuÃmþØØå»"Ü|7Ÿ €@ `àöÅ÷ŸeBÛÿ'Wiƒ°øßíbïé_-»ÿeÛ_u°ÿ,¦‰ÂÒ°ý‡å¦`A0 û€üsýwÊÿ⿪ü¿Xþß )º9:þ³ýŽÿa¨ÂÑë/ËZ7 V(¬ÿ 5„ÿQ­ÜáæôßQ «¤-–ÍܰÀ?­ˆð„[?D``v8óǯÿKkŽ$ü! øõqÁfÁÿà æ€ý€ ±Äü‚¢±jÃü^ã/ŽÕÓ?ûP@ÂPÖ¿„Ç'(@]]¡^DØÕc-AÀ‚U¨5Üó7µ^$ ƒM°3û6(W¢_k†`©Æ ÿå#úG]˜›«+öàßtÀú/û·ºápO8Œhj ¶¯ ®?®¡ñà^þ$Ž¿rlÄÇý)Ïü:¦]aØbá™îËôiµbÅ©6ˆ¢¹}£¦¬ËqÆÜľÏRÕýj/CîûŠ«¶÷­âÆ/¯Œ>÷9¢e'y‡“m˜$K/ZèÚŽó.’´‰PÊÚ¶]—™ä1keëäs–ÛEŠTCê5š*ŠÒÕïÒŠ|_ÔÁ¼·êÒ[üAÅš¹èô5Êôi²f*£šxà Ñ3rÒùΞ®²6ºæÈU÷Àå¦P ™‚X­¼A¹ÁLέóÌB÷Tr+% ¹»ºÙ :TD]r9 ï·©LÏAFöéOížmP‘|ÌIý–o‡òO>ál NÎe ³ð±ŸUÔñox?Ö3Ly4…?ß³äx£i°Ž-ôØîuÑÞ¿^ÝHû”2˜ 7a|œ"»œÃ¾qô^ ’,î™Ñž·—Ò"ªo KhŸ ©'ïyYÒ{Ð]‹%á¦qSqX!“qÏlŽv‹ÖZèG„f =,¢½n`I{çkØbrú§ã_©EY&XÇeØ Ã„§‹|Ê5#âýÚoŽ”Òß¹¾%¡œaMçâcµ(}ÿ+¹±&NÈ>ÿ\ázìñ}&oä÷ëÖºIWnR$¨@Rs"äåêSt8ëV ¾‘ð~Õóϸ•‡ü²S’ßñ66Z¾‘#‹ãðÃÀ‘±Çz-îðÄ ¿xŒRþNZ­ŽÀ–¡,,o',R¼qv“åìý5+U};Mñå³±¥”úz§G4Æç‡Ù«'cÕf­ GÀþa„Åžå„ dSõp颪¸€C¼Í9ÓÇ]êè¦)mRc²ÙñÚZº¤<@Hé¿¡_ú¹-ÜOÄU6}ÿ˜³ªÄ °Cä.@«"‹c5²~ÉÅ «ò‘*V×\³¸!Ä#!6‰âÔ§ªÓ·ö’}˜Û~v{_úìýÙCÑ´ê3+é \'ë1å×ý›êÈRFøÒ û‚Š"鞪hú¿éÝiþ-tXâÊÊú·[Ìóüd ½}1VÌ|Iœ¦EÊXþÝÃÀ£¬úâçKÓëÓ õ 45[6{Á$É×@=Ú—¦Z7I˜“©–)º9&êã×á´ó»âu…_ðMÙÅ¢ŸZ𫚠êC§åõYCošÛeûh™«÷² ¸Çˆ$ÃÉ®ºöÎvx)>ri™"éhIÆu´!Z;\.Äyž¾BËn?ü¢'éXXAS”ÄWYlûm(ßYo¥Qúº¯Ï£:«-5ˆ¦aÆÅG:šSó …¿|!]7Óç=±…¶(.®‹ÒõYcmAþ”k¾MÚÐ:@]ïc:hÛûÈ3úòp á‰WÄ,ãíÀj€uOÌqœDç¬öô^ÞÐ=kÅÓX€Î§ùa‡ÔøŒÃIÏEô[R5·6}fÜé;EOê¥-d¡)Ûø£>úÏêcӂȹ;ßÍâ*å„–@šÕiž ê7)‚×Άƒ%×5t(o^™ „°[»dA¹Ä'ïë$%·È?™²È®Lʪ}?z Ë1xÕmxç”ÃÌè•Ô±ÔÑuF5“wáA¡8öÒÚ¬Að¹:Ì¢QÝÛ€Õwâ3woMž|ØHtX!õ9ìFs›àff;¹¸„¸¶©;ÍŽºà`xE ™¡š·#¯ÙÂL¶ïŽ*†Ù”ÑÉ?v,ZW3>i–µ?²-= ©H+ôµ,ß üš^aÇD™ºÂ”«§ÜÎMÎ*Þjk¡hä-ê´tÔwtÖŠ}ô’Z´ÖH´Hápé`¤Äª“Ÿ„`cªxÁƒz¶:Æk?û‚yðƒM±_›Ç=}_Ž`¡óë²÷_€q§s67Úç*XrP½²`ÊמÊ1T̼Rµã­‘0Á«Ýž{ª§xCý*ƒzb~ b,d¦§ñl„×¼gtÙ¯œ¼‹PÍ‚˜ëÛ/Y­Âƒ„øé8ËE¥Þí—wñ³\.qï(|4Úã}T‘ëÞœæ]+­¶ÛeZ¯»xBðc†­'Öç .RÓÎ,7¥jœÉ1!M§aè“ó[`>òÿüå’”v^‘ôòL©tˆTóœoýž~DÀ3‘@•¸QÙoþt‚B{ ¯g¯ç@&s‚,Œ¬¡‡Óå¾d!Ͷ¯}ûæw+`¡ªnQÝwSw$h|ss”Æ‹#§CoÖíì¢}Ìnéß`4yÒ½Ty¸WÉãÛÌësÏ,/nÜ‘ª¬†r¨Œñ.“¶»ÂðˆÁGÚùãLéÞÍÜo¾´œÌ"'#údà=êŽ/s—0ÂÖŶºàó‹ò›d£Ö%´ÆTYƒžŸ•ˆŸÿ0&˼«@ª•'.ÃÍtµ2޵{6ª™TËônÑIƒ¬ŠÜÕ¥À'=¢„ªôÓFš²öót¤ßHóÈfú]ÍÊ äëÉÕ Ö*jÿIH]»Kl¶òÌ@³Sf‰Ee´O²6y#zzVº¨‰ W6“šqâ»Ü3‹ÀtJÛ¬Y7¹ NÃgFvÊí¯Õy6™õ`®~´è®Gr©*:}TµÕ=¬ãF“ÖŸ„ÊX“Ì÷$#qããuæ›Ü &—¶ž-P™9ˆ°¹;@Ï╎îq”íIæç_Ä•ötà’Æ}ìÙ´4Û<54Ò“4Á®5..ÒBMfôÃ`Ì êªhH¨£™}‹€£Žù)‰g€K\FžéÚ©#çDMý©”b‚q.Ô°KÙ)èåzv¥©cÆ8áIØ+Ž3y¸B>ýcB›óЬ+Jî·„(LñƒÃo5ë o0~l{9Hï9x]_Ø}†ÇÊÔÚÈuqâ¦oçÄ Îïí$ÈB­µj6$y÷›G:¤×‹R|Q">×Õ){d» uõvT~¨ a×nDm×G+ÝØ…Ï‚ú7¸•û-}ñ?G­Ê…šñ©Úé/ 'p‰3¬BÔZï¤/9”œþú yKNtvs²Ð·½2oY5yqDJŽ©)´áyZÒB€ün{Ý{Y”ƒÜWŒ6ˆ1œûò³6Ô–¶i|ª/ð ÝËŵ=„½LÑ^-ª^{ij'ÊÃHý:¸®*ß“ˆ6ÂÁ¤áÇ›ùIff EgÕ‡Åxï»KHÂfæ7X§;¨­ãÉ8¿<ª )¼(ÛÇiï•Òúà-¸rûˆTk­LÕqS{ÐùîòµŸæGmµÈOêU 8ùÙÖTÍÞ´â ü÷[b&a‚v¾1ß"’Ó}ôtwªI-¿A¸yÆ÷`’…ï5£·žÈcû7ê½5ßœïšêL¿ ÊVRŸ{Ã)<èdò|Çâ"L¦Ö—Û{f8vÚz[LÌ+ùÎÉ{b€ßxŠøðÀwæÆÅPWOžÉ‘ÎY½€’Ë¢ïÓ>28ÔGÞÑì™°Dhþ“PuÀžYôW˜µTŠ{"_Ù}ßK˜ÑØ9ÎxyýËàñq-üàxâq†ö˜ý­ú°Ë*{ž˜¤ÓôCéôÄx_ퟜN™Š÷EÆäDz{_í”-G;âç4Þex5½l¬[uŠÔÄË_ ŒZYLA<˜x„ªU<ÓÈðú¬îû÷‰öÊwO¿’¨_g½Ô¾»ù=v}œCÏÂá ßÌzÅ4¼‚ùñ{åàæ'îò’OõŒ˜ä Ç䈬ï€ÞŸxŽdÞ›ÓüÚðœ'H¬ö9§¡ÃMR¯rïe­¶O$Ÿ>»¿…Øœ˜Œq+Z<œWËÚ­®H2é·\Sz¯Ê0›¡×t½r3ïV!å|áë‡ONÅgW–mq«iyÖܺs5î¹Ó™D|Ï·écÑ<›é Vª:öÂÁ•^›‘’?Û5ðË}IÍŒ*wÉÛJ D÷̽ÑN:]”voèŒdrf-¥Ô F'2WóIA¿Øp/àú‰Ú%¼H=ôSÔ ¨õæ²ÈsóÿþVˆáœº:c¤A³ËÕw}Yó FAÔ±P›ýWs=Î-¶Æéù¥! ³!’,U¬°õaW]…7ý79qʸޒƒ“úE^$ÉþT¬d “»ì—F̬<M&”ÆÛôH¸wè‰qË(扠°Ñ¯b"¾aîÙæã´†Seqz´`òy™«÷Bûì§NeVéÀtÍÕâ§þá$eÀKæú`Ý.Ø&x¡N)'g…gzdEì³ÄÑVÂz…ð!Úk£±†ußÄŒTƳªÇÃd|ÝžFém†–JG胈®>ÁeÔÊá«/oZ㤠˜Ñ*¦––2*O®¿QäNTÞÀýJAkeùzaé?t* &oÈßeþ¬ý>ÚÜ9m £Í-m–P¥+Æ[EC9ëÖ(G°Vµ/Ày-ê¶®‰¿Ë޳åPuîN@„£|Ù|Âð °·ŽÇ 8Qô‚|r½åÎðOЀ÷Ns•’z¿úõëçÃÙ©jæãšƒ1—ÅV»‰ìó±«Ú)¨ÄÁÊ_õŸ¼|¸òõ’´7œc@F©H âç³vI¼ÙŸ.a9ø9HE|Ÿ”àT‚­W8çÄy̹ìõ`M )5È,/ãÎW*Kãϸ³ðSϜþ+]yãD?B€ƒ¤oçM!­ðÀ­²Ô­I{f[,M}ÍŠ¦Uv¯÷$TXi­Ÿ6gOüàxu8vd?}§ˆé4¹ªŽrÍÄ=[Qöƒú-¥daw¾’FTЈèÛ@§ÀtpÆ‘ckÍniþ4SCLFljù¸žúÙ“fÑÍ¥»ÃiT“¹ƒ£Fx"dÜf±>,'+{V|½YBK@f6÷nwßd«puóZ?Q“< ·EÅ•¬±7ñZí):B{ Ï~$¯Ë¢BÅrŸ¥AI1Ìä<Ð+¼uÍܼ÷œ-¬“«u;—ø–¿8@?>ŒA±{C}C%ŸL NqPÚžô“OlÜEIâJ›É¨48Y ×<M¸Ý¶E[žW¬šWˆúa~µû™Sí@(=*²!RÜy› @ÕPú}Ys{òìl†ê¶›^èÒÌH´? þA0bæf‰oWuÄ»åƒ2{är¸v#¦í㤖â¹$Hˆì¡¾ÌF£©õ´w}gá3¼²æ'Ílx±Q‰Ò·L ˆaÊmåæ¹ÙÕ¼ðõ¯Õu6Íã®\ãKÖ8ô Ñ{}3Œo‚7¶]>s¦ Ï¥n óŠÈ?úEuÈ?#KQ*ß#ô~&7”¦Gž->‹‰ò*’Sèý¹«ú%grгd¸.o ‰™Öá¡WBüÐÓ ½¯}")£ÏÌ´Æñ;-ìKצª ¤œáa©†w‚X­ 4S¿Nµ²E:~i‡—ÉvOËS™›-äÖ{_ßãlV¨€$‡æk¿Ð'w!Š¢/>¸­”ú\–оþ’xæ¹ kö–îAá¹ËYâM{÷åãæ ö˜»Uä[»·Fn FÖS߀?£E´7Ò8Zº‘ñF®$à£êÜ$-&«ôpÙÍuñ‡¸éC¾\7ÂM4ß)Ü”»ò£üè†ñh|ø[ï–ÑÃþúct ³ÿài;ÓÍ­ ¾~e)J Û9¤ ÔÌ©IÚB™|: —|¸—ëJõy_¥‹Ù‹jãDú*Î+$wIE~YÛ¢®À›©–šQŸÚOãÑùÆ;¨([µ¶ì‚ó^}ADe®™’QsËz>Å•|zÕÇæ7 ’èh¾7O|ð¼µÃÈ´°kÜk^ûSàÚ÷b‹ gÁ–§ºªãæ@ê§¥ÑZ׉F+nÔ91sÄéϾ¾ÌaÏ ïH€¼æ’-|°E¢üFkL¾“DXþäÐð©×´ªO+¤«pϘ:JúØ™’(ʱ[¸R!­-•šôö¡•¼¿î¾iyäé«u`v2k)3¿"¸\®Šêt?d_ÃN[ûyæ°§Æ@ò y÷I³µ¨º¬‰ÃӲ႒ÕbŽ÷z‹9 Æýa»Ï4!»C AŠž‰÷¨ jýzEÅ÷ö™&@a8aïyð×·€€ŽäÆxP|§oþ­¸q6{†‹ ¶»±k˜{oÇ•y#ijLZ@û—wó5 OîTpœno}Äe•´tmá5¢§K%}kÀ¶‰‡Fã…(·èäã„ì6]ƒ³V·,žfåqe¤¸ÅÀEoÜtœ?û9ôpëcKß-–ÄOOxSW¦~'RxîÉaœFNp´]Ä4¹ÜÒ>[д=’Sµ™±¿õ¤8t’ xÙE•n*y§`äЮ´Rì‹6Ͱ”)u èÔ•²§¼˜4)Ê©{S¾VÔŒS9_¯]òvK¤ÍxSƒXQÓÛÒp×vÙ«E Ae¸ãKÔZ’ou ÙC_JrŽvߥo“Ÿ¼ž9üâ›è¸µ¨Ë%½cÊÓ|h”57Ûµ.º6 FžZÓcÎDè,f-%±ºæj$K’–ÓñÐ-foõE¢ci:€):å¦,"•/Χ£d£“{¥BÍ5܇I×Ç·Í/€Þ,¾™÷‡|¶sÒ.>Þhl/ŠÐmóTÙ4H¦©¦Ô¥q‘zÝ.¸£”âõXQ|²µ^z(?ªd"4Üûü%aSÞÞŠü»O§ÉŒß°J$çÄÛVÚÍKßûŠø¥-QíØßÇ12ö8N¹P ø8êMÔ%æœ0NZwÒ xïN:?œ‡etõ9¬]Ýß°ÜçÉbZç²ó #;µ½"·/vÛIQíª*Å —µSNHéíý¹ÈŠï¾9˺j•ñwvø£>häÖ_¥_Ÿ¾vHØð’UH"&s.A’ãÔ:ˆvˆ•wÙ]¨«ÖîQ~†úžŽtŠùúªšóqhr¾R kõÇYvU˜j­þ@˲â'U}}âiÓo},é­,çÒùvò•I¡¡÷¾ omﮦè\L|áôþЧâBK[z®ì=rÙˆ©ì,ԵǬù3«Ÿì ý¤Ÿ[Ç ´áÅp»›‹¢çåÿts§ endstream endobj 429 0 obj << /Length1 1416 /Length2 6001 /Length3 0 /Length 6973 /Filter /FlateDecode >> stream xÚtT”ïö.-!  8 ˆCIHw‡„HÃÌCÌÀÌPÒJ§Ò! JI# Ý!!Ý=Hˆ”HÇPÏ9ÿß¹w­{׬õÍ·ŸïÞï~ž“MW(EZÁ”‘ P€$PÐÒR€@B| 9'§ãû “sÁPh8!ñ¿P00‡)‚1¸8-$ îâ<•‚ ø¿‘( €"ØhñÔ‘šœSéä‚ÛØbpÇüëÀ ላ‹Þÿs„¡à0 ÆØÂq'BÀ}$Ãxü£·¤-ã$ÁÏïææÆvDó!Q6Ò<÷npŒ-à C¹Â €ËÚ`GØŸÉøÈ9¶pô\iq£`à‡Àh\†  Cp‡ôÕ4:N0ÄŸ`Í?÷ï À'ðïr³/ Á¿“ÁÒÑ Œð€#lÖp@GY“㎹# —`4—vÃÀV¸€ßƒÊrz0nÀ¿ã¡!(¸͇†;\ŽÈYwËJ¨ÒцÀ É/ûS„£`ܵ{ðÿÙ¬=é†ðükXÃPëË! .Nü†¸³ LMño"ÿfÃD@b¢Bb˜3æ±å¿,oàáûí¸„qx{:!Ö¸!`ÞpkîÜ v…0(˜·çÿvüÓ"@á À fGÿ§:†Yÿ±qËGÁݦ ÷ Ëß¿ßÌqô‚"ÿ ÿ½_~]=u-]Þ?ÿÛ'/txÅ@A@$*Žxÿ³Œ.þ· ÐrÕÖH\ÆŸvq÷ô¯–]ÿ2€û¯:xÿ,¦ÄÑàþËÍ@" î!ðÿÍõß)ÿ7Š_Vù±ü¿Rvqpøíæþíÿ?Ü`G¸ƒÇßk]08h!q:@üwècØÕjÁ pÇÿöªaÀ8%È!lpl ó„ÿàp´2ÜÕ…c ¶8ó7¼ÔšÓE¢á—\ô_>œÀ ö¸GÌ?.0§6Ìï5^Ú0œžþÙ‡‚„^ OPäŒB=Èq«ÇY"OœB¡0÷ßÔðó!\ 7³7À‰"¿\³ˆ€ß ·$ôÿ ?ðã8 ¾íÏJ/=ÿ8â‚BáÚúM\Kÿ²ks‡AÈ'F‘‡v¥µ‡År·Ü€Ë}’Ä[‰‡Æ‚À¾¬§¤˜6¥A‹…Xý´ÔI<å‰Vå§v Úò·é³c?=±e·Ë=„÷·•Wmn[E^ìãÇy0³RWáe>Ž—g•ø€jÃÓe »ÖH&µiÓç¤öº[Ú2çÆE—£,ªT«]ßXœ“ªÉÀ,n´±øSmÕi°,²Çx7cÑ1*`)Ü,$A;™]C²þˆ<Ö­èÚ|Gwç4M+KS˜Ÿº«ÿò6Ç ÒÃNfEá+EFÓo©N3>¸~O¦õ´R¹.ûÚ–?ÇXª½k‹ÝýnÎvϹ5½’±•t#[S%öyrfdw¬loLñϳт—ˆY:w¾ûL_÷"¦ƒÐÈ£ÙÝAòBµXÐI1Ç÷…‰ÂM´HÊ"®bÁ]÷¶ö€‚c›³¶‰;í6úf<Êã^\OÏ žêkñðÜæ?(E¦ +2S82»¦I–ŽG­+·NîcU`M2œ{C Ogw›p/wþÓ˜ÿ ±0/ü£‹E‹y€šò ßõüòmaíH0Ö«­ôL¨¨˜äÌÓËHC^¦ùI\;EÆG»‘ÚeßU¸ B….{ÜBb4y3ú)hŽ@Æ^ê¨×ˆvÈGožð)€ yÚ'_eæ¦Ñ©´Š wë ÃoŒaˆßŸTÌÆŠçqx}™„çMI„N©ÞV~+ÜEµ¾!Ô«t²çÍÙy£Ôö2ñZquô¬ëŠYº¼OtðlpMÅ}CYµõœâ^Õs¹˜É£0÷l\¸qÅ”Gn°Fkèëy¹‚[k²«-[´=¨ï}Ò¦”‘åÔ2©NKJ£¿5ÛcÎ_K9Yè‹×¹Ïå£vÃZ¹ˆÿɰnò8ÉVÊŠ–Ì*“ìÉ—»³|Ïs×ÃÓÙ!ÛnnZ_pXéÅèF*+8ƒ%Ð>¸›·Fê®jÚc«íËÁ `L’1Îâæ•»:Öžÿ×p€î¦F^ùµS”[ ´•`,zRvt+ØÂõÛfÂPÎõ]ðªëõ›Ý7è¾]$·}ß8sÛÙp¿zÑÝÙ£ =¶ýÊ˾ˆ|M;d&7SUúé‡ìh¸~OÉnJ”P‚”ÅÈýо’%×Ûu4‚"_ 3úû,YËùm*ˆùo›YúŠ'i5å&Be¼:œ2»õЦOWgûnÐ(tó-o (÷cæê}¸ ß+à°JuÍéÑQ{/a'İÕrEo"¥ò³ÇPÓÙ5DM¨ŠxwHÁÊ-ã;Y{/Í¢dâow~LVÇcn&ÝynxÏt¡æMäãgf} ¹À2¬ˆK³ýÇa@Dµ'å9ûVRDžҀ㔺7U½)K*B-®9s«óˆ¤m&#›_'G#¯Ñ§®@ü¥êAI{Û:‰ç´ û$ô*$IWPJû2¿JÖèfõÝþ–0˾C(Á JòGMöïC7Ï–£•gVë¨9šˆ"`³Aï$¹Âc³µ2 w†‹¾~Æ÷2(SÕe5¾î”lkMà9Úªó nÇZ”V s½ 8óV­ßBÜ\ÁÁŸN `•ÐCnìt°ã]‹5Šû~ìâRÇ•H% Žaä‰=s/õÞˆúÔd1¹}’f0ò«k΃jˆ‰Xé3·R[þŬã+ÃãzÞÕ Ôè†&N ‡sÒ;í¦l“uZý Ý!ƒÚu_îùÒít¶,~Ùe­/-æÚí@>”=!ü&TšêÅŒC,—šö±nMŸ´q`zfŠš¢$wh²˜Ä†/jtC#²¿«C  býõ%?Š+Ðûu6†œÑâ™Ý¼~š-{皺uúHßF̥ݎÕnÓfzF©Ç~V:=ÓEÖE&2ß,¬àr‰Ø¨Ñ~^ù 1RÄŸ§Üª¦ßgp•hs,ò£qßÑï@‹•p˜õù®Ë„k´öigÛ}®wÑøð Åú'²ÜÂRß̯J{ðÅHªT4«Âe>5Ë´b'|R”ÇÞ“ÞYjç2œ2ØxšTü®tBMšXåºF‰³Ù‚]|æ4•«ìžø™Ì­!Sõ^Š”OS±Ù2q6Œ ÖMÌ#1J3G²å[´\ºb·˜.q=²NU[ø¥Zôåå·|ɵcÝ7‡1 ©ÜÙºåÿÚ~®¼q`üf¹bKçжüÙÅxÕPÏŒÞ5­!q?…àbyìäµÀQÙÂþæÚ˜š3…À‡yW¯dm=3ýª:¬ é¿ä?‡~æJ[âlͯKû|ŸƒÏ¶­I·ånlaã‘þC\Ì;{•oq0ãÅ/¡w ß­ q.òç ²JZ² ¼ÿ5›´;¦‹´ËµÛÖœó`šÑ³€˜Ø1…A#â`êWmB²L¼KDÎ|¾‰³"Š9ØIù ›¯À<‚ü‘ø4lS‹•ƒ½0ó–%Ø”ëMŠ#‚ãÆÒû~ ðAîŸã¿e¡^¿å1£d fxt:[¹qÈÄJ“+[åú3K[ŒÅòÍñþù‹ÑçϬ~º “@GB…|-‘s%ÔÞƒü×½•'­€–^Þ[£gMå¹>tÝ«Š¯)WaYˆP¶-wJúš‘µWA„ß™øÖûeÏÚ,•–Qå½Ó Å{& »Rnšy¿jÖØ½ÒÆ­¡˜ùù¹±`ùˆà6?Gƒ<šâPφá`sªÅu“Ìÿ¥Kðý-â^§vBÒƒÀ…vĈÈâ-xHžžªÄ.fiïðVúX]ѯ+9äA²ŸoŠ» Àe‰)·i ü9H¾küxêÕZ祻Ÿø©çðHš™ˆiðô™_$’̽í°nÞétuO3¸"þH‚ׂ·åftƉOŒ†TÞùðRX!Ù.K]óIIŵuÁ’Ð: k|öŠí<ÒD÷¦«I™¼ðþE…ȹþ% —LŒ¥ÎÆ-1‚sÞrµ¦ÕÏn%ð’ùÎuйêzIÖP±JÎö_Ù4¸ùž©ŽpÌA^. ½70ÊóNýr%åx°öÊŸîêE ïBÓ9¬2²RÁ%Ú‰Z‚Ò$äOKõýÞ±??ÿ²ÔÈØ òµ–|cŸ%2Š-}Þ%ÕkÊ'JÈ\¯œ‰éB2æ%ZÀ l¨ü†ÒM\ŸÝ;Cô@ú3ô> o6?I‡zvÄI ÃJœ'QVê H˜˜•噆ĕƺü»oìŒ:`ÖXŽÈZÈãŽê(cÈÇ ÇÃ9c·EjÄbõi?û. xL¾¶cª§j·IÏRÍ £Ø»ÍæoÐÖ’yÏ“+!›×ÃD_4Ksä¬qLaÚ²N¡*ßMfš?„Äqݯ®¤ý!m_p-L¼¥½˜±ò0Ý‚ nòîèÀöù°ì’ıËÎ^„z°s_”?1¯jÜ/šÊ=œÁ¶ÙUáæjUM:ÚõÚKŸ&ÖsX«ì£48®¤Ö~l¤‹,¼pÇ?HRb<ûX³Gîóé)ç`zæbÉøÊ}•al“ÞwíFÝ#<„X¿üxLM^Ø©¡‰ÿY[¨µç1_µ™ÚhÀÛ2¾»è(¢¦ÞLºÞ|<>²ü@6IŠMÒ (W%úé/\ñë–ͯÚO÷4Ž¢üe#‰í û_ª fÆ[qïVV¦FëïÖæµ*­ ±ô)>ÀÊ9ƒÉʦ7G™ÊÌO]»XyË™—åÅ)>›rž]RFVBÔoð>Â.a­$²™9~á…pò¸‘€Eø™1 é´ SŠIYƒ’òV̳òòŒ¥gššy,ÆPᢊ~0],ÔGªIþŽÝ~ü+€KºU[Sœj;6–í>J¶~ì»àFíWb¹L|‘°T…úȸ Z€(O9Æ?¢+êT¬j )žÌZܳ˜çÐç’gß¿sMmÌ ;Ç‹§6’çx€P²ts¤ù®¾ëžÒé•)š»’!Á9mÏ´DuL?ë©§PiVæ¤×±¿˜ql¤5¡Uf%u:ì•LNݪò#ˆþ^îuÁøÀeÈ"'%¸@1[²HÖéñ‚ýu.]¢_–î¹@ Ô ûÇÞ?S™|w¨Í*ÔÚ{2@8_B§ ×oDæ°£ê§EËþðÔ¼ð]½BÞm áTkóaKG¼`ó‡”e É™æ¾Ï‡v(oj=ó‡R5ßz +ð—¸ý)é° ¢^‘DlxÝd›üê-Ô3GïjÍw¢™Ïtþg/i°á⽦Œ%ÛE¹´ß€O"y IBtD¢C£à•ò~–R©všö‡‚lRÎn¶¥Ÿú’±بé}û>&šÒ)]ûöI6÷)½%ÿ’VC]-ëy§ÌãôõÌErš(º=ÒcÏWð­(–ˆ×àc[z•’l8“¿[ÏAá¼#˜îI”£«^d?¢aùÀ1M)ë¥y½³±Ýìc…ž9¢Ðä±!k+¼~mã'’Qcp£{l;GÞàMQñ¯½ÛmݹAÂÀ¶¡}FçàGÇm#È€#åW û6Ñ  oc7ˆXÕ°ëUî¹PûX}oÔÜ G<ïº…Ø€È E×éÆ7Ü|ŸŒŒmš©Ìºêî”´õáøçõÜòQ Á¥t…jJ‚n{Ó[–Lƒã–#ÓüŽð7à°0¦n•3¿,ÚÚ¸æ³ÑAñ´„¢2Ù-É WµÅIò{H‘=¢[ùÊ”°·;…4¬ŸB±LãRñ¾ä²¥‚qwʸsÂT²¨(ýl`C3u곪šì&€BŒu±‡%^Q_ ßÔ<Ù™£AûÌ äì–ãv5Qv@Ùi…ÍVŽ£|› íjÒÍåb…8KꀽfûµïuçöÿÉõ&û¡Lkf€)CœÙ^I¶†H¢œŠ– ËVò¤O”–8uD<Œ ê}%óKÿ9\òö°¿º–]W7VXöÐ*Ú𘕠ǫû£gJn@<÷Äh@ÐaÇXk•VJºrÁHÍfopÃlÝÅ÷àœJÚW"14§™^ƒSéˆ>£¶rmJu'åã„zßÛA“CìÚ‘Ã7÷ºaO³Â÷ˆëeÚï˜70‹w¿ ú*ØÙ'%Wk¨ÿº‰XúÊU‚Fwký ï ¹B<®ò0=²ðÛ,¥ê<Ûä0Åþºpå; pÃålùqàç¹Ùs-ICÍ›~ñÄ4?‡®ð³}H8³enc-vPêy>ww”w7Ï=‘êþÑ{áÑ2ÿYšHf¢¸È¡@Ðg÷m× ¨⪰v}Ñ ÃÛWc¨û*ÞIź'épfº¢ô,ÄoQþØ;&ÃâÕw &£fâüæë˜e›+Ÿ%ÊC¿›D½ï2™§¢“÷Ñ J½ÿ‰%ˆò–Ò©ÂÃ!(ëÓ™áH±¦a°LÀ+Œ¢ÓRäy€8t'Òoï'ž:ùºã©‹M(]7¾6¬BbÞšdb¹9ÑIAw"F´c—MÜñr`Ýç~4wna×¢R?W´õì]¡³î‡i -ÙlÊ:•j3TÒëWo j:½XCœ±ð¸Xú>Þ#…„OÈ{ ÙNEÄ7_Ú6Q..é‘'qFHõ¹ª hVÌì#ƒ¦Ç6%BªsßuK(pž4e´›¶:Ö{ðQIy¢ïºêWSeyç ¤ ùãÓ#ìþhdqÓᦘ€w=kÚÕÂ¥ ÉO¹‚ Õš‹U±Î˜PbóðWï•èßÏ0rš%úCÓ9¾4$¤ròqú»äêï1åß¾¥¯„ßó+m,$ Q%ÈŠ>§^FÊy¢cPúÞòäé«7ò0Ö±YÜÊkc¦N±Caµœ‰ß ™Ø Jôõþx1 "ÂwéùÀI«s9±åÊ uv³''MÉÛÙ%PŸ’W€ /"ØëÁÞú€é)ãœÏö= D’I>ázBXÈp7I±<­:Ü5\2¨îV; ùaŒòfd(þõl#™ðtŠ™é¥I±Qò:Dg>gµäÑ@¬– ïµ rÝrÄâUÅÅ«ïM=!„ÉÔ [O0…÷j“͆,«ŽC1ó_Ù<·BVæ°´‘îòæ …Í0¶jþônO×O=σh“ŠÙr㕬•r̫ޗ©¯H ¤9£I’¥]Ä46úß÷]lVZp®óìkŠÊ.Œäó(®ÒL,M~isµØßyÕ§¢XãQΛÝ9}z'Áã*³ÛƒØv½èð9w›µp©¦¢¯3šÕ¯U;uñw^þ¬žžläú%[ˆh˜äÈ3-/<'ç¾:ø“g¡Âýø®Ãj©ÿÌ=鮑øR­ïdo_U×ÌøKVŽ‹Û~í3‹Ä‰ïhŽc‹s)æ³öÒË)“Þs ‘BEfãsÝ¡a?I¼I2ì»x[Œyæ}ÓÁJcWG§v!Éd2%;Ô UN¤C(jŽŒNâxqž}îŽ÷%‘Ù¸‘_C`²¸^{?¶Á$aMØ•žÃô’bZs.ø¢¶e*ávmmã»K{7Œ˜RXíùZsø;’øÀ•´•^cg .ÜÌiÛ}uÞkŒw(:>xæÅ,r‚|bE¯ 8 t¤”5'Ù¿¯ 2ôî«ÐxEÍö½»ýÓŽ·Lãe7tVnž¸MMÓ9…Î5Ô½Û*`îÆ’Ç–W4^_ä½rîŠm»Š‰H;¤ß3hkq‡œÝÔ›ýÐMóõmt”øv™™ôKÊIJÞùõŠþ\ $ᆰp «Ì‹†gQ&޾?ø°ÅÅKâÈÍFènã'ÎoÇ$·ë¨/°?Vk‰´¼¡Ôœøø­û1ᚢ›gyZó›Mߺ*7¼ùTq¾o¥òFÕfí á\‚ iø,4/µßKȶNà ¥\Å ÊÇÛnëÜùœÙ™– æµà+;|%-ùš,Á§šúæH£;µ×íî ÞZñ&zäÐeØñ~ê5¼”ï|ýš'µ&ëËÆ¶W*7H9<ך_gÜ.”=0™ëZ(H<þÝÞ4mäY­³B Rö¬)ÿ0\}:¶EÙ×âš*^±±&ÁÃ+,>ÔEGá⯛¼ïõÈ@¡©Îë~:AZCžËö2]ÊáúäªMÝc™ÍVW†™ìšûìR,UÝwHäj)ÛŒ ÐiR‚Ônî‚ð·‚•'¥£hOÜd÷¦Þ\žÐeôÎVÿ*kíl5Ôq‹Î{qí´k»38Õòîk÷æVó\òÍwÿð_ssÄûŸ57õ%ÞîÊ|%éÿ)0#„²ã”Ÿðª‡;[².A•¦Pfí¢€ë¶ A¾š~Ö;Ô“þâ›-ºŸûŽ8É“ŠÝ‰{Cé [Nƒ?†÷²³K6fAÃe]ñmúPXò'Tã¹JóQÖCÁȧ 5§å½šŸd_(¢4•žîåêŠpy}ì³Âw›ó—““Œ¦(î<†ÀL›“ÂÖ>îŽÚÃ9½ge…áF?´­•hknKN©ÆéA+¢s"­ÀÆÄöùªÓkÖá¦Ó¾c_Yù-€äi.½íF¥/`GŠ:ôƨ—Iˆ:ÈjÃ]/b:½&˜&:‡;7œŠŒÙd5„LïÔ¬K#ýˆå]mïiÆÍÚž\’ Žfm§‚ªú¥‚_> stream xÚ¶P\-Škq÷àÐâîîîn„Bp÷¢…âVÜÝJq-Z ¸»k‹»¹|ò¿¼7sïd&9{mßgí3¡¥TÓd·t0É8@\™ÙYØ’Êìl66N66ZZ-°«èo…Väìv€ü‡¤3èúŠI]_í” 7;;'€G€W€ ÀÁÆÆÿ/Cg€Ðl Pf(8@@.(´’Ž^Î`k××4ÿ:,ìüü¼LºÄíAÎ`   tµÙ¿f´Ú4,À W¯ÿ Á dãêê(ÀÊêááÁ´waqp¶adx€]m ³;ÈðGà=è¯ÎXPhZ6`—¿pM+W 3ð Ø-@—W7ˆ%Èðš )¯PuAþ2VúË€ ð÷lì,ìÿ„ûÛû@`ÈŸÎ@ {G Ä ±Xí@U%WOW&bù‡!ÐÎÅáÕèÛÍ_ þ¬W_ü»= g°£« ‹ ØîYÿó:eiˆ¥¤ƒ½=âê‚òG}R`gÅëØ½XÿºÙ÷ˆÏß‚biõG–nެÚ°“H^êo“Wåߘ5ÈÀÍÆÆÆËÏ 9@ž6¬„×òrý©dÿ~íÀÏÇÑÁ`õÚÈlzýAñqºƒ®În ?ŸÿTü·„Âΰ[¸ÌAÖ`Ê¿£¿Â «¿ä×Ëw{ Ù^¹Ç`ûãóÏÉø•^–;¯›ÿy¿¬JšZr’úïþêø„„ƒ'À‡™‹ ÀÌÁÍ`ÿƒd¼¯¿ÿ£ÿ]ÆøÊC¬üUû:¦Uìþ7þ^FÀÇRqxe-Àðo’±q³Y¼~±ÿ?SýO—ÿ?†ÿåÿFòÿ-HÆÍÎîO5ßúÿh¶óúÛà•´n®¯  ìðºÿ5Õýµ´Ê K°›ýÿjå]¯‹ ±¶ûgŒ`°'ÈR ìjaó[þµÿØ2;0¤æàþãY0¿^Íÿè^WËâýëÓáòJÉ?U ×Íùï”Ò Ë?VŒƒ›tvz¡¼^ò«Ä ðaÝEKçŸ$°²@\_]¯íù¬œQþ¸ÑW'Ö¿Zz…ÿDxØ_'·×›øÂÍ `µ¿2û€ãppsþ`g{5±þ‘Àúþ¼VÈk7ÿÖ¿n«Ã?"ÿ«ôjÎW{Góëƒò視^8Ú¹¹ü;(€ÕåuEþ‘_CºÚ8ƒþ£J¶WÄã?Ò¼å rþ ø¯!Z¸9;¿&û“æ¯þ—üç£y‚,Pç,Cl¿†´ß}'ñ`Þž¦ÝÕýÌÈì³èÜáö€Ž˜ÌX“ùaÝùFóƹ¾™ÆÎ¡Pˆ‡âwÍYäc°Ás?ë½Z©ÅáÒEDCd@H{=2Iç#q¢@0ïSZ´ò}Á³E¨ˆ")u…“å€#£¬iê­uYìdßÉM„Г|ÇÙI¬-kÂ5u¦RÅ«i3Âq­å|";è´’Xm¿Ñé¶²M%]⟪{Ì éÛ6wûü®wZúñù6,µõn¨éÇv·Ÿn‰h¿(©µû[iÃÈ•e ²Tør×Q˜.]<.&Ó’{2ß#<0TÈçùÄ1ûV!›|/ôé w®ïyŒ_UÙJçÆ Ö¼¶qðK0Ê‹ù·Ô³³B"Ni³Ì0†¼ éîyk±ôê‚_A 3Áå¬gUø,Re^J [Ü ç4E\ò²½»óÕC‘F¼lïù XNtª´Û⸠Ô)wŽ¢˜G‚%‚Cûøo,¶n**$Lð~:èÜŸUyDH Åljñ†ä}ìÔÌérQM“‚)¾ÝžíE6§>Ö’p§´oŠÅÐÕ~Øí*~ô`*——¢¥/ZTîWü)î»h¼ UÔKô%P ÿãuS Ç×Õ;¨7™˜«1´™{˰ԦCM:çÏÄ$šZwùÔÞP½óS£Û”ÓÛ4>vUF%\}ÍAîOi°vñt”óÛé—ë Ÿ"Ÿ­"›×´=Äë—Hk3f¾ƒÖGà$¨;8ÙpEÆŽä…eô™kJEïp_æ³m·¼³Ä(b›…«]Œ¾®á^ …VuéCÓ¬K‰FhÿBžØ{äIΙò”ÍS‡ T¤Gí€khç’²)ç'Q”8 j ³Ó±®¶‹)?Y…ê}@²8ÀŠB‚Úš¥Çü›r®£Æ)GÂ,P‹Eµñ÷ìoANk´îthÔںǥÊåNi˜az+ßšÿå´®æïûžE1Û:YÅ…²Â½rŽ>[åH¬»Ï:aÒœÑ]/Æ9Çi(Š“Hø6)KkJ_‘eE‘ð×c7ìE`„¤„lv 9™×2z¤"}X/‡*Û´Nj5¼ ÝÍ̉†]„‡3 Ñ¡¨»b$"Å‘y:Zë$óïð[…¢4&7åJŽ>Bï5·„´Üðž·émo‹Ñú{Ð*&_ø¿•®‹ö(&á[0ßnYç¸Vщ–mÇŒ÷]ý† hzt$îµÓäZªI6gŽ-©ÞÌ‹érxRð9Q*YNUo“8úï°ë°~”«½z8¦dKèÖÏsð¾§9¾Ÿ¸¤í«ú69„ç±¹¶ÉaìPÞ»¨6}•·Æp;È“°?‘A h`GGZH±D*ôâ¹ýе´ “A+ !T‚pk^xЕ1N©É–õ¾+åÿE(úeß'Ö¤;VEXXe¿bN˶øþíƒYú!b_^âz"«Õuo–]­š4Gž¹Ž8£¦„ëžP9þ 7N¹d¶xÁúm–`µÏp*uë‚éM¤=Šgú%g÷»A;ùÛòhìšXåwæŽa‚>«å#ÈAUêœø::‚ yí£ÓèhØÕª,ªÙ`¦v>¾Š9òà£Þ°Pëa#á 1*™E™;­<óߟã;u‚bì쬫»³–̧ª¢W)›ÊgSf‡6Ÿî\êì_Füü[N:EÍ%#E€“÷Çù.–1tïøn$Ī‚ýB9R¥lo"㬳rgÔÈ¢üò`w©Î(eY^~y%ð3]¢ø‚5É&ÄŽÇ :\9VFµáBHy÷Pm´P5F\œð‡{XbÀÚ”]>Ý~Ãþî|=ýâ”îÒÄn0]W>["à™/Œ ^œrC6Ï&î‘Dáèó—+šÍá„Fñb¹0ÌõlÙZuew«*Ïzã(>ÎbÈU ¹Àaî‘ôÎàZVx¢"&´!•ùºŠÚO•FIî¿S!øŽ×ѨÐÓ[KÅd•[ºztå ›4Çt¥%E¶ávóìg ¹ø»&œÉv³>7–K·w'Û‹T—"‚gLÞCõ“´(m5빞°ƒlŸ]>`Í aë²ËxŽŸÌ¤®¬Ÿíã£æÚŒA²ÞÔýÔ§ŸYö4jõžÓë9̬§±BL!ɰ Jyø¨H )b(_÷s‡'ÒQªTÈ|eÖ—ÏLÞg˜¯õ@~ùã›)Õ#- µó [ú}#°Ý·N•ÖWZ÷ò¹¯Ø?Óà8Û‹¿œ¸$ãö|¿¼€¬Ã¾Mk.»ýár}æk.æï5‡ŠD))IåC`Ä¢`ÐxtJ¾ÇFAÝ0w µvQûlIÃôÓ¶çF·4J©OC„LCh÷íгÎ4w^?Kà+·rI ÜúÞÉ2îi$"NL[FI@éoVÛÂÐþÅ~T¨w`Âêú$1Ê]f¼jVopÓ”œmx>æ¶ ž3ÞÏ•”=–‘¥‰¹šš¼ñ÷©ÕKv}‚t)5ÔBûKé_.@qŒV“;2ÞfMM¢ùÛòPbšrt)B/ðí 'p wNP–ÌR£mÚrÎþK`•8¥—Wû¶Àùô;Ül ÊÏ3ø”æãÊÏs7Y­ü8×S2‡‹¶©dËR°ªöé­”]&g(ôtµŸüoššõû¢MPgæimG(å:O£Tå^†Fc(LŽ]Äo)4»ç¡ 2^¡F¡YD,ÇX¦—´ âN Ñ$|"k;þÒ}.–XE˜…œ¬¬dÆM°ˆ ûiç  ]¯Ìp‹à ÕTB½l6?Ñ÷±]6ãôµƒq'«6k¥—·Ë} ب¥Ü­Ì»žVëùqä“” ]óùTxÌx`‚´`s¨úÖ,«é$cÛñîáMŸ›× óEÊêe²Š•Ÿ…Sï;în/ʧUãÙ¬’»®#tm¦*èN×\Æ=°€ÜEn§jhß2Cµ)H5è'™ŒNç³Ó¾H¥ÛÁF³¬@ÄæyŸwpvh†œm¬ö±ûB9Ú„÷¶ áÆ°D´m ŠÖVs#§0aµÞá†h»=®BÂ>ó4gÈ-x{^Nl%.Èj<øé}³ËaÆõ“;}à€= 6ý¨ævTÛÈ¢×#!o"~þýë9ɺª~ûŸ &5²nܦ²ˆw ‹ìÅ¿1\Y?Í >oDl¡lp}¬e¯‚D˜þ–ñsDx·gUnÍoCCöPÚm,vª|o¶`2Õ"«x#È]Pè1pØ·#ïìt*^Êi%þa] ìVسºÓ{Ñ1yz4…­ïŒù“LêúF 6zÉ’Q£v(îŠõæ¹<Ž —q«X^8Ôj³5Îo8Sâö‚¤¹Oȯ˜@‚Õ§¥XÔ£Ùñ°JlT 6Ü‚ñŒ"q.ð‚“gHyi·ÅäV*)—ï²hðóµ!÷–ÚÂÑï‰óhÓ~×ñTi 0vºß7^ØŸÉþí¢Á.`ÔE2mæv'Cì WyD7·qPŸþÝd‰‡ä„5Ûkò·ð,»x-Ò°f,ÓlªsD:» Çƒ¸þHNò&Ï{|¡ !Àö³ýñeHìwAä®_€'ÆÞ©n#¸¿oå nbjDú”caBN·› †üXGwˆù«LwêËÖÛî_¤Ðþº.ÙŽ"sô ž¢P 쇇<”µÃÂÕ3Ü«¢â‰ŸÕMÂyä´Ó|0J™’ÕænÁQ)WXkHÅM¸Ž™IßÄ•"¸³›E4¨%ܸØlÙÞZ–^ùý(U ó–^H‘Õ½WNÃmt>±×nª‚ŠVg$¾Çì:n’Rà_â²7‰"K{ê×Ì‘{ØP;t²ÉK‰L¨™‚_B¥ÓA1Wåܺwkƒ!I؈´]‚âM­´ÛMh ¥VГÑýùw…Ÿ¡¨<ùP§¥Ö_ʨ"€»w¾Ë •«¯ƒâ÷›X«¯±©äÕ€Æù°Y*uµŸÂÛ) OžCÇn[vo4«Dçmûë ¨ãv'Ã~p‰PÛ€ t(X{u8å˜0Fªwof Ð]#"g”LûÝvéÑîs,üÎrc›_Ù6BÀŸª0ÇLî¸Î¥äJƒá¤GÄ|ßfÌæev ƒïoG=h¸?Ýmn¼>Ü ;Òo"\8†ðѤro’TMròñgÏ/êt4X©½]s? `¾ZÁ™eã,LõåÚ8mÅPU çcL=È@FÍ;”–6²šÏ`¾!¼ä`7ûžÅ®{ª=Èëªç`aS“`%„Á‹4×ÇSúsÎk[¦mp¿»M⸒ý¾ lè¹eÑtQ„iÝ„ïq±ßô ×Yª`vô™_¬« Eb ÛüLÅáÛ0p¢Ÿe×`»ò¬1eGJy£+þ9¤˜Ý0/ÖS×Îa$ÜÆ@˜3çŸ$­RxžyY¸Ë‡ê—x<‘q‡ïïôE¾àf½±±y™Ï(l"N2ÞÜV”OÄTñôL|[ãE¹é7ÎÐi~´ÉѬ‰Å¢mdÁ‘ðô±ˆÖÃó†-t0ù_W%WDƒ«£®ÏVàL%>¦n•°^©ä‚›½®J®îÄq ½CPÜ+ž51`ëBº>5èïèÏyO")Ž3Zqvw1;ó¼XèŽkN»ã¼9F €\“`FýM~FÏþ—ò=×G¦-¯áö[ŠN)9š^ N.ð ¤ MÛio=¸i›µ(Ï¢¸cÜ"õ úCöy«GuÈ™–fkE'—VTóÅ"•c_OÑZ5¦E¥“Î*/mk‰çêGt¡9›yGQøåÊßö_mïB® ˜æzRèÑdâ­M&s`Cm¨t êkŒéOˆ±‰— ×…,4T÷Óå[nñ  ¡ƒ¤Ó‚´S‘5ÐêÌÝF6 Œ,4\—äš³¤ ]ß>®£ã·âì8‘xÑÞ’/÷`^ø±1'¾uJ»kØÎ >3.éÐiÚ5‹ß¾±ÒÈóÏÑ0v­æ¿¿+™šGy˜ÇÎ9šÖí팄;›!ix»É9ÂﱪðÛ·»Ö£ÝÒì÷Wì^B|‡L|\&Çy¨ã~½¨\ƒÅÿòÈ5{‹†ƒ¡uc 5ÆÓ÷ŽªÒýhߢ}˜þÛ°‡åá„+9c1ijm-曨åDrB8‡â¸+SVH¢‚B›}Ì$Ñö­`•¡õáT ƒ²@ÇzÅZH´¤ÃxüÈf¥’W©?VS2Š3Ç>õM„¡ÑêvâÇ>e%ï¨;†Ó†.•k\à ´$ÍìcÙEÌ‚1"W]ª”@_ìrR™w3Ðf—K• ä_5jàTinÃŒoÙuœ@ö{ÃìkËÛ¿V³Ò»n×|2À;QUº°ŸoWU&ž°ãLÓæÐuÍÚx†ä%Lë.÷Ü’·zo!M¡–#Û? ëëƒ9(%Åõ3‰›GE[L-ҧ̱.àÈ"nu¾H‰cµÞ5¾ ¢1|‘¿.BÅXW-½À≥viQð"oÖ2ó3ïϘXÊŒ³„¼—¶ÙÚtÇEs#<É:ƇëÞà\ärúT)Pñ€pô§“X?wÑéN©}X/’.”¯#‡LRu㣲ÜILçwµ•žØèŒÀžRÃêJ0G1”…(Òù¸cOêþXò½©&]ëœå±1#ÄÀâµ®Ž„ápÇA¬Û; ¿£T¢ÐÓÈ;ºÑŽ÷hn=×@(æD¡ °ü¨°“JËOúÊmUCOŸù“JK.qG»v<ú¡JÖªRødÄú’¾Ôä9G8Bo|~à:Ho-шåi¯^ý>ûŽªC?è|ÇÜo\!8k‰(%Tü§ØVŠñ¯™[k¬±÷Y®Mðš˜U¬tjF’zÖA2ƒýˆŽËøõTMšÔô2IÈ_ô\DÝ"b%›•¬QžÔ˜Ï[¼ŸUd3)çJ–²2Œ±ˆ ßkÛhd¢ ~wb-ö^m~¿¢ŠkáïtÈØh}‘#rÓTþòc‚¡.°„½Œ}¤¤ds]Ý—r¤uz×z™r=®ÞÀå†ÕÄBS^ƒ¯¸±&ÆE£Ý7{|\ñˆ5»Ù€?ôÄ'³+¶p™#õn]Ý5ƒbƒ¼$ 'V“À…3™¢ÅxOEqñY\–Ò3ÝÍàªq´ßDÞáürª¥4N7Úøòá’÷S}âZúYsYx4ÝÂv_ØÀŠÓå>j'XàI¥aM'“¿ÚJ€”ü¬ mF—G‰…Éaá­-ÊìúrñQò[UÞ¤( :îÚxå&Ù…1è^L§€…ITx‚÷”œ)b½ª1–‚š¼,ªáiLCÔ,‡N¸³„E!™õ‘ÜlÅRvhaÅg9E,ŸE¿J9'ÕÞCf* Ij|"b³ºš~ò¦’'u‘Ö:_æ.ÜÎn» ¦œ?­°¾)}¼9Á¥ÊGho5qÿž™<Òá ƒ%0 ®›ÖÆE íqŽ–* Ú¬†ÖøäFÇrÓ߈º@Fï˜d,l îˆÌjAt"Ì•8Ô8ô„¢‡¸ÁLŒ½5€»{;è$o>©±êÎŒ`-êz2ðM¨“«URŒ…ñ›‚«´·ã…»x6”½zÓœ­©s;<èÔ.­mû`Š2Á^„¡Ý’¶i‚F•€mÐ{èŒ<•Ø¡ ÐäxçwÍó€#•ß/ØÍЈ‘/‘26„ g1ëKZnô§kPv^OD’ÂìðTd0î—ÈÔ‹> â1R(³²×UßÎ\Í„a+Ÿÿ\eæDö1´/+üC~ìùh–Å‹“ °t³Ë<sQµø<ìú±ô†P¶ 3û—<ÊÛtÞ 4¸Ì+ç©hkÎ-稗 R#“·2§Çv-‰?_¬Ü “ìq}?®ì]%À«•Ë­‹÷–Jî{bwVDÁo™ˆŠ£Ê±ƒRÉdÃÉþ­[¹>WB—Ó–©¹É Ù……€¨€ØïAl_J¹Uù}y0+M6¯‹RÜyn[ÍngÊ•‡/‰‹÷˜œ¡]üTKâæ—ŸŸp%ÕˆˆÇÌÊ@isŠÅ;aXYwZpÛ5°'Ø}zù}†‚Éykä : _ì¥æàèÛëcs}«ê¤\î2 D‹ÇæØåÌ®§›µO£Å¾9Ê„R±§Éńҫ47î2Ùˆ=ƒhaßÝ{µì<­‚,8*ªº¶xîBÏõ'í‰â$\©#³?4XÙZ¼ eDù9bÅîO†ùEh°˜¡÷uz@Š $º?h,‚;g:ýÎD*Ù}Ý£V+Šƒ@´ƒˆ÷,„|Â×}˜+y“c©°ë.Jýú132`²ÁÊ&þd,¢õXÊÑXçy¤9¨f½º ˜‰dBUŒ} Öò*Gß’/aÊ®½ßà '¡‡pÁÕyXgºÖæñÐëþèÅ'2ò ÒD|3ãá}ñÁZ!wRN"Þ´­‚kÞ]m©g‰åï}·•bœ¤häD°§aÁËoté~P{ð;F™epJcúæÈñóþØè,¶+‡øu*(æ·h•/ç™ï~ÍÄWá…«’\— leZo¯†X·*U¯—Ž¥G^鑬H$™Œ˜È+ÿæ;p’a WßäBÝx³lª(ü®´¾r€3ÝôLµ2_âè8íÇ›óº9”ĸÌÀö+Yo{üëô/Ÿ¤g47œJ³ ­K-ù×2Ì´7еE7GmÜ[.“+FßÔ›àhYÀåò¡qUÊ 1ˆÊ)U!—£täuK‰ßâ3šÊlMî¹ñ?Ð B]ž\ ëÅÒ0HæÍ\lÍøP¾å¶LHʦ³Û:ÍAó*OíúÊýZhojè=¢l±­ CÒæ÷òï,yÜ‚N`Ù²yE}œ…¿¤[ÐF€1$æ=[¾Ù‰ûS”}&……ñ&}cÃßüßO{Ó9¼GU£ÙÇïjjÊ"CY«6U¨T§¼Œ¨Ï„y~ܦQÅ••¾N¶¨Ûr+¼—''ûH&‘b=‰FNüµõÛ#\­°BæÝ1màKTb ̈•ô;*Ëà $M•Yâð1¤Ã=µ¾,jc¹ªß‚D £¿ñ·=ß]nîáÕ;\J¤ÓðtÚ>®"„Ë@¯Š¨:i‹×åõýäyF>þ¬ÓêÓ;¤P{‡'40©¼ÿ¾5”ÖØÏ„HÈ#>MÍŽ:wÑáö‡ß±6רµ?Þ’}ì/Œ‰Ìl߇Y¬ÊÈ5|Cñe±”+Aìå[2}^÷NÊ ý;`àƒO‚ÒÔaú$(ø•ì vÐ…ó¨î$€~/äÅ©6íAR#ñdQѳÙ̆{êìæÿ¨\fØwÀ¿ˆÿé¨zâçÔ3MžóÕûc¹>Ÿ÷#s8-[ÃW;ÓŒ+|ÈÞ‘`/±=¥îý}̵ÍYW}5=_â æXÕਤ©-øI£4 yiÒ{øÅyÖÄÔH½휭G]ù%¨E|î©|Ýûçµm™4ÜF=£»Íswʘ}GH}5”TÏễmÙ[·µÏ½êµ VÆgOÔ¿Ê@ZUt|`ƒh ­úøÁCÜ_9TÃ.7h|w«RÓB¢[]UÛéI‘ ×›ªû29 B7®àj8’ÜhÙNÃDŽS`ÀØÉ˜œ\¥A•7—HP+iAyQÈ—åjJˆ=I§/éɤ*¨2Å×Iœ}n±R½ºåk»‚±¡¥ f¸b² M‘P>w=ÍoHTž8/Ç:gEò õj¡…vÐ ”þÌ\Ëugz_yà‹Ys”›dÂCgŒU¶›š/úUÒ ØÜ|í‰ôÐá"ªvë¼äzÛæ©[1×¼û­Ô]£4­e¿ó.%X¿ž «áHí—O¯µ¯(é9¬¸™ìü(vaã‹`4Ö[ anõ,pž¹¶Ë»²ë^xKsó áÍ^WÓò¼²‰ªuMñÑćá—R^=­*b9’¡çB'Lmðžqà;ᔄ‡A UÀ¨4¶m¶^pÔ­Ú¥õ»æ s×ýÏ;è©Qêÿ÷‘ó endstream endobj 433 0 obj << /Length1 1408 /Length2 6404 /Length3 0 /Length 7369 /Filter /FlateDecode >> stream xÚvTlû7%1–F&¡4)(ÝÝ)5Æ#6ØF7(%)) ©´ˆ Ý% R‚„’* Íú<ïûüß÷ûÎù¾³s¶ûþ]q_×}ý~÷Ï-c!EG”L …Ä …A2@e]#) $& ‰xxLX7Ø_(€Ç †Æ PH™ÿeWFà X¦ÁâÜtQH –—,KÊ€¥d@  ($ý/GZ¨ñF8u…Z($ àQFyø¡NÎXÜ)ÿZy¡|@°´´”àŸp ¢; €B@]ÖæŽ; q£ Öï?RðÞwÆb=dDD|||„!îaÚIŽOèƒÀ:`ÚæüÝ.PâûÓ˜0€hâŒÀü£àXÄn( ‰Áx!ah îl ±¦P߆üËYç/AàßW ƒÿîïè߉È?Á(åîAú!N@8 ÔWÓÆúb¤ãoGˆ…‹‡xCnœÃŸÂ!@5EC ×ßßÝa h„#ŒA¸ýîPäwÜ%«"•Qîî0$ø]Ÿ  ƒânÝOäÏX]‘(dÀ_k8éÿÝ‚£—‡ˆ)áéÓTùÛþÁœ`X ’’až@˜/ÔYäwr?Ø#ø7Œ«?(Àå„ãZ€!à0Ü ñ†±h/XPÀÿ6üçP,Ðæ„@þÉŽƒað¿ö¸É£¾À ñÀ@ÐïÏ¿W68n9¢n~ÿ¸ÿ®ˆ™™¾²ª¦ÀŸ†ÿmRRBù„D¥€B¢ ,* ”Â-‚þ3‹ñw b5‘pPú¯bq·ô¯‚½ÿž>ïßÂàþg.=ޱ0 ï?·I€ ¸/ðÿ7Íÿ„üߨý;Ëÿƒàÿ]š—›Û+ïoóÿa…¸#Üüþ¶ãøê…Åq_…Sò¿]ÍaÉUæˆðrÿo«&‚Ó€"ÒÉíß—ˆÀ¨!|aŽ,Ôù/ªü…›þ˜ 3@a¿ ú/NUPWÜ£Áññ †Í©Š„¢«KTBA£!~܈q; `'CG˜ïE„‘(,.ˆk/G¡¿ç)!#p”Å¡qi îúgsðpóÂüÜŠøÃШ?ÀÔõB£qJüÃ\¡ÿÚÿ‘= æ ƒf§QÐ{]j¶W+²ú­ÈNð¬™gò Ì¢Û¼N)IÒø^å„/¡Ó»©?­ªò*Ìq\l5½!‰jN1l9 <·K6_kÌŒ1¼}¾¥XÛÇNÆ&d¢°xáhæJ؄ߡœïéu—Ò îØ§WÝ·¶¯|þ}äôšáú+ImòóòBñ¦qÖa%“<Ϧ˜8‰±Bì¤ü´û¾T“‡G´y£WZÉ€ íx±VË¢ 'Sþ •&¢˜Nfnf+&vÂCÚ÷ã·”6Óµ?”¾X,š´ö*ŽûÔ‰g£<½B&uß‘|÷µüá­u§Ï¿¶;ȇ‚êÑUséÏ×/+Bª<$Ö7ÎA‡y!Ô»Óìå´õ5œçÏ¥”ß<½±"ªÅu‹EVöðN*Ç>úñœ7‡Ü‡úszÕ­H‘ë†×Õ(uß÷ÁEÜo²ò óærÞB”uå´C%èä(úŠÎÉSµl+ê±2 îÚ„Ûü7Y>ð³’ý¨ˆvu.› pÑ÷Ùlûä¹M@¶ïz[0eÝN>ôéûËÁhèMΤüQñÈ”yt _nJúÔcºN–vÂb²xמôõØ4ûx«— ©="‰Æ´×ÉÓù‡åÓêˆC $_R×ÌûœPíÉ»ÉS,ïªjºwa˜ãöjC*ÄéÃÁfq>µ‚ä:ïÆwGY¡f»k¥ 3I×äF{—½©ý/öÙu]ª¦|(ÒÝouæûä.JzðÇ]óƒ&q3ÄÍÅ vÜ{_©_^ôRq¤œK0$=ÊPb¶2†ûy‰Slæ–úv/7^×;¹™žaý°R`ñÙ5MŠqB3»Iއõ|3h"0sg~Íäé_Yð nMž‘+Ïå'š\µBº´)£›f¾®#”ݾ}Û ‹­“ó9tVKZ’Ρ{/Wæd窗FÞËPwp%¡¦½›éA°vë Žª‚üî‚>vPÊàæµC¨Á+%ÿ€>–B8žìÒq½#8öÛ‚zÖ€ðÇNÇ•`? t{šJ•¾UR©ê ðhÒ'Ù­^ÛÒ6Q³ÎFF¾Æv–gß>ôõá]Úßqßkf†73“\£e3J1Ù/Æ4˜è¸ˆà}1¤KÐyòŽ-üº¿öŒ.»ûkŽá¯_äìŸÏ Ø~mœöV¬m T‡.Õ}9ʽٶw,4} š¿É{N2p:%ç;§Ü]Þ±%1N‘z°w˧`Âök Å ýLï‹ïT^ƒqqA¡¢pX÷÷Ö‰–"Ry£˜Õí ù•ZO˜gWz7ͳø 6ÒZ¡‚üRR_Õ] ÷á§Ìx†¤B~1TëçªÌpËIP€€žðéE]hŸÜhtôÙü°†~M­3¶Üæ}”2'Æ^/& ;•U=Ÿs©Ú"?œ´Ò{' À{u¨ÌïÖ,‰Àð|s—+ýM~$‘t9˽À"Åk|Y~”äRÑAŸlëܽXÕvsfúEOc R+«}ƒÝ%»‰ï›Ùj»rŒø›%úýªzΩúâ.•:õqÁzß—Þ†Þv¥h—6ÊÖØãLû$k[*–«¬36¹Ü>‹;Ê.©sê$Š0€´%7³ÃYyýÇ‘±´Ì=Jª¼[lëNáçT=²å4~{Waص¡÷96)b_/ÉŸš¡Î âÈ~> T_°ñ-®ÉªBx”@HÎòƒ9ßuçèûÈhìlrÇai…&ivÑóð6»‘ýäbÉÛB,{èÕ˜×#iÇr_*¨8Äo“ª÷É£_XJf—R>Ðáƒùt3%êÉT@O*%A7æsóÅuy²3–o½©”x1ënöŽ)Þ$™w ð3·UÂ+»ól÷‚ŽÉòÞ€34mÞk´™hüYÏ‹öo®—â‚`;꣺>-:‘Œ|³:õNv¶­q.¿?“o+% óJvÓÝ:<,<­Ã‹ÆÍVÝYo€c†Xálk™—-# sÝ—¨åTòFÊ,Ûk"‡Sݨ°;´üßHëï–÷I®ÉYÛBv(æ7ääV?åly ŽÈV=ŠÞž6òu×gnv]Zç¥Çó¡ËnréžP—väͯ¶VÅ‹e®E®6 Þ,‘>=ô¸ØÆîø-±,¡v¨äNø%—»ŒW ÆG]å€*O+„Ów±ãš4™Lªm»øCä16añð¾Ó ³oUS)‹.Rf;È`çÏCN¡®‰ÆõV¡°Ó€#™ 6ýŒùßùhv5^¶’L*ZÌ©nµ¤ö^•ü2uÊ»ïZçY‚§ÃÜS«T±>ýŽß¥r¢™Æ™rZ3î÷µv…9waáHÏ žr7 R¨ëukø×5/-èÍŒ6Jí¼µý,çÔxo_w‚T Š ~NôîqzCGÜ=ë»{^Á»kd8Ô•CejÔ8õ¨c,![QV™îÌŠXãÑÀí£Ñ<÷yÙêr³^: bó|ƒ±e±gùîOAœ-/ÚM¥6ê?¶3<0³ÈÝK.ƶ½R{ׄžª÷k² Î/zß«k›â¹1qìÏqøH]wÙ0xR6Á`hOeÔ ïˉG¿å[­Õ# æh;è¢á3™Ý%<—”¯«¥K2S§À‘ŠÜüêÍ!k i Óq K,Qö’—͹g]ΞUciòjKhV×rb"_™ðÙæžgn éV —@ÿJÿ€õÓ途áÔ¿´ò4›±6*ýãb–yUØR³³ŸgÀWçš6VŽ•9 º:Tûº£™·BUàÞã›m‘ŒqäüßJYÚ³ý|ö.¨i(´ó¨Foý(œ¢Umn‰zze«UÙ±[(¦¨=–0Wò³% Š3—›œõ×Oó\'*) ñ¬Ž(ŠcåÌ>ºDk~âà.‘ì“,î_U[*”ž4”Jœ–mR7h¶%ÌÈѽ÷»¶^ƒS~³°Á¡(*Û©t"¿[ÔÚÅiMS èr² ®?ûå)¬D¢Þf˜HÞCÈ[Ä:¼X8Âþ‚åv^2LÎ]5茂ƒ·n§è8Z ˆFšÿ̦Þ/IˆÞm±åæ1Æ^Ë0¤2¸g%_»óPêa‚9xÿ%ÿu•û«à!›“˜er­vºã´üâoOäØ¿Ó«°äÉØ]íaÇPÃ?µcÓ’tbï@ËcØñÉ>±-Eå?vg¢7&–£ïz7Øœ@q/ddå˜pm®ðqšý NAU?‚’›PÔá†YOv»9ÇÁ^½Ñ¾×~–ív“Í)Q®È—Qû•_)úµcU†‰ê¢4ýÜ™±=Ów2ò¨—žµÔæÖT—ïn|_ãÈóŒ%(fd4XÂ{‡½xõ®»ø³‘ ÷+©ÇTªxá}ëÍVô²,‡r=Ù'$O÷û¦s苸n´8Ó)Önˉö.GêOÉ»Qqz.òR«|ÓŒ:ôr=$· â˜ïÏå*£À{a¯×} Ò« §n±S^«œUº¿"[á´¥­O 9…´ÝÚ¹5™Âk¯5ôò#³´pT¿QÑP©˜Ä…¤ø»2C§ö—ý)üd”!´<œéåtðp¹WK¬Ök•Q&°ôþ€¶­¹”Î>o݇WÍ»è¾Æme‘8†~b;ÒG_ÇWoÑQ´=Œ;õ8Ù>8|¿Vï•NV¶bæˆ2i²«PåŽ,‰ŽÓêX)o…9|£\¦ILbâ+áòº„m.,“lòß/¤v'î b%¾ºóø~ˆÕ›0eåÁqšT}Æ*róÑEÚz¥,µdÌÑ4ø&—ýK"”®}£æò—'êʱÌоeÍx£n^8 þ 0•üJÚW9KmVe+úG<å©z>£¿}÷®4ôUŒ>:?Ô9#ˆ‰‹š§Y)+“¨ ~;R˜oHÊêïqZáñ¥¤«3_öÚx«CÐi’‘Ÿ-É–¬3\Æ8È® ŽÇK¡ñ91KÀ:ÚÀÒ³¾®Îz#oFÌVœk(éò„Ä‹z7æVÝõäblÈš¥Ž —ê·Kïˆ¡é‹Æ»ò¡T c÷¿Ò\¹Ë—íõ<ÌZén¼˜è°ÜÍ`씚²5Eõ×µoŸµœéc/™ÜÖ2ÚSöºMv!¢ÏU kI : º©uöðëÊ„êS¶¿þˆ¥Iº²Í:b²_äôí·3 6³m]q”!1d@ù&¢ Žøþççe´$íK¢vîjÍ•†~¹ÆˆZj,S§&©soiÍöN¦dè×Éi „]gP›ÿ)LΣýi§ðê£ùåÜ×Es«ki^P6Cê³)£ú⤠“çàܺçÀ¹=ôfÄQvúNlÜ=µ±›êÓ%ßï\´³ËÔô•9ÞØf°ˆEj¶Ú —ùzŠl0I£Î›1ˆb=nôÐ ÷MA\ƒÉej[û'µwú?á[2&¾,*(êexÞmR|çnË GÚso &­D/LºW–Xñ‚Hštò䲃•‰tñe ò6·k_˜n3¿‘ùÙ—oæ&}=dê–õN'ǘs;~ÓÁp†1šžpáê:™—Õ¼n;‘·r]᥈I$jŒAÈ\,àáUúç²zÙ¾®iŸ#á±8L_·Ñg¡töh?pçXõâüþŸ¸w‰c)GÒbG—qÜlÆöþƒývûYÀ²Ø”wçqܽˆ€ômV¦`Χ[ˆÉ_³ÐÅ­a& W§Ï™ßçeE†>«\G9àq߯ØòÛ%œlÖŠ¶GH¤oHICÎ&&˜>òZ:³>ÉŠjíÁ20G^H(Žã±%ú3 T |†¨Þ H.íÉ++î;ÔÝ óµ¸†½—\y:!m¨³QpÍ b f¯’`M”{cÅêWr _eâ]ðâQ”>_‡ùy+8[Ü®ð*”ä'|†ÎòÚ&‹•Í,­ãD++!1NS¬G÷s†&ŽG‘5eåªþs÷jF* ä?ýüg£VXhkpÿq®üGŸM΋¨‰§$mîFÊ6IV¢^—V2þ8y>EYÅŸ¶KI²ÜêYh”ñˆW èÎkb}v˜€cq]§HyƒNÜBöεB‚•Š.l}¡ÉbÈÒ€L‡ÑŸi žÒ¬*Hd¢&ø‹Kñª55-¡s™é¸ Ù ü¡Þ²ÄTMpÃéóøg¾Í½‘‘Òy†Õrm9rP¶Ønõ:¿½~ ©ŒD+yŒîvnÖjPràñš•^‹iÿ¯„­[\K× ?´Q)W§çjvš‚×Q¬¿È¹D±+ÜÚ`:d ¯tNsôΔôóÏ$? Iu×µEà4îãÄL‚ Dùs¸´G©ûÝ$!IjÓ‘&'‚oÔ™Âꎅ›”C9Xµ6nðˆ“ÝŸ .u›˜¦³ÚI5¯s)oqÔÕïéàø‚»f<ï+cíæìi["•-tÇ/—N‰…þ„:>Š’_¢XK«X²+tFØd¾a6u~!òÑ|+œÏâ»÷|GŠ%`ðœðǬ@gÊ=¤vÎ’t£NX]\?}…}³P<˜"Tà5a׌ì=¦*—¾±÷ó?~šc­ã~í¾û¡Þ©wcÞ^kßR|ú~—ƒH¨(Ss—I6­¸9%µ_¤Õó‹ï‰ðÓe²­rë.³V_º¯8r“Ô¦”rÓ‚âˆ`ëÓnRȧóªè뼬»>bÑÖ_ŸZ[ä®*td‡ˆgÛ¿·yµ“˜â¹1' îàK$Ͻx”çØ&I$,¥Ö쪼.²ŒžÑ’pÌ^g‚å¨÷¼Ž9e‰ð ¯Jo åøŒçnºԹ”«×?º¨`ÝÆCø–$¦l·-×CÇmqxªô£ñ<€âE2Ïðf•Þ[4™Qm"2¯8Ȩ- ¼H¢ä}ýëSF»±œ¸YÝBT¤ªE‡®.ë£[ŸÜ‘®œOX?J”¸‰ˆÆW®:<øqóAÿ§Â>Í[“¦XR„’‘'·¿/^).ÞmÔº«`uuÛå¾êèfš}©ù}Ò\üÉ£Ü>à›ËyÉ›ÝÔ„77 %çuÊm›ÞÒEy.w E ] ¯IÄ/úÛŠÎ(i²å„J³Z hÛùĈø§[3oc®w|«ªT—réù^7Øç!6ù²o£(o¾xá“SGGaai`KÝHGÎ|…Ùó°–˜‡´u×4Æ~úCKöê‘”sµW £Þkœé½,[+µ?±>[å« ¦ýFK’£¾7!_¾Qòöd{Q> stream xÚtT“ÝÒ.½)½ H@é5HG¤÷^Ez€@zé½IG¥#|ô*]z^DéÒþ¨ß9çÿνkÝ»²Ö›½ç™™=³çy6‹®ŸœÜ¬ ‡¡ø€ü‚’-}q€ à#~AA!"66C þc%b3#8Lòá 0…¶)‚Ph7-8  î€¢’@1IAA€  Ä¿áI€"ÈbÐâ¨Ãa`$›ÜÕqpD¡Où×ÀiËJHˆñþȹ€[  B9‚]Ð'Ú‚ ¸-ŒòþG ÎÇŽ(”«¤€€§§'?ÈÉG8<áâxBPŽ}0ŒðÛ~µ й€7ÆOÄ0t„ ÿ˜ àö(O @ [0 ‰p‡ÙôÙ5M€Ž+öÇYó/àï«ùÿN÷wô¯DØï`­-ÜÅó†Àö( £¬ÉòBñ@0»_Ž (ŽŽy€ P Úáwá €²œ„îïï+ É„@u(ð+ ú’•`v p0 …$úUŸ"¶Eߺ·Àï±:Ãàž0ß?k{ÌÎþW vî®F0ˆ›;XMño´‰è?60 "(((&€Ý`/[G_É ½]Á¿Áßftýþ¾®pW€=º°?ÄŒþ#òE‚<ÀÂìïû¿@€Ä°;@`DÿÉŽ6ƒíÿìÑ“G@¼f‚hâ‚¿~ÿ^Y ¹e‡A½ÿãþ{¸*JrÚj:<¿þ7$/÷øò=𠉀‚b‚1ôÂÿŸYtA¿«üO¬ÌøS,ú–þU°ÇßÓçü[\€æÒ†£ pþ‡àæ‚"‚¶èðÿ›æ¿Cþoìþ•åÿAðÿ®GÙ ýrþ‚ÿäzÿ£ùêŽBs_ ŽVì¿]Ÿ‚ÿÈU lqwùoT Bk@æý÷%BÊ/°.eëø‡*ìF¿…ÀÀºp$ä׃à þ†V•­3úÑ@¢ùø£EóÏ#•`¶p»_ê€7zÄèÀˆ–¡Øë7ƒü08 @·ç°‡#ˆ~ÍSX €~–~ïÑaH°Zî¿,ÿ8ÊÖ@ í7Ðuükÿ[Õ`°Ø–hnn+õ©úEËy•ƒ'ßæˆô$ÛæÓt.>ß9D«ûOüT®ÊìçˈS¹ÔdŸ×•8Od癯}¿6Öâ‡7%ë5_ú]Y%êo6}£é}óU®¦‡‰‘ÏPvËïÚÍÏ8Ø»³]-ÏÍ]œD7Ÿòܳ[Å«¦§ta(lfSo«RTãÎUé_¬QŒypÑÛk›œi:V<7Å¡éÔÉé$Å«Ñ[fõD"ÿ½ØGo}MW„â.¦}Ë …ôéM阰O(†ÆÙ}å·_ªÓÎú¿]F ¥MÓ´¯º¤¡Ûœ>›Úú爖ìl£’œôtØTjÑ1ËMªI.E,IxÂ9‡ŸÕ—½Ô~ˆ5Ú yu’ ·:P±j«î#‡ñšôV¤¨ÔVêÝ´ œ´Ú† …W-o‡š‡zÔ£îg¹{Ë,ð~]JÞ(­cΠþ’£º†€J©Jqz%ê è\¦Üjf0üèŽ58Wã@Ú,14̦1àùé¶c»¦ÒhÛêP7¼«.:9y/_eÜ»ÞÅÊeè˜X8j©@Nê…õ’ŽSÝ;•·ÉÅ£º-µî‚ñ›VæËÕìVÖð!6íØf)q›£y<ÊXÓ®ÔŽd›>»bKÈÞʆæãÈ=ø4™Wß½´¢Ì•ô¿[ùhÄ(—˜IË㻘MEû°m¶‡–w¢°U Àz,òŒ5k[—,AGè‘ø|Ãg¡¦òÜv£Õ^lc*¨pè‡Ðìð½ÄùCÉÍ—^â’.Ù#Bv/j*&šå qG¢Ôs¾ ZÆeÍ ¾iOŽiÆcM:[‡sݵ÷»‰ï•³|~R³‘=/='ö»ŽÐI˜´9©¤oût¹»kLX¬A¼–dÙØÐ&>Þü˜K«¢#4&lý1–Ë2Nl±ÔЗ—‰ŒI¤þ:v@ Sƒª/÷]tC쇅«¦š¸˜Òýµ"³t ¶„ƪ¡@‡Ø¡5å“‘L’oKù®ÄiÆõþ?b|늛‘S3Š@Ôuž•>žÁ¦0‰¢0mc z¸wºIú&†¹ÐH‡¿mš‹ÅX2Ÿ:º_Hú†Ï(T±sÜEëÑHí^É ‚½ úˆ¶‚ƵbJc²Qý9†@•k×\oEZFÕQ/_× [Mœü3 gËö‡¶Å Š{ÝÔ‘„ Ê;ZÚœ˜Qk€p™).œ½&©Y-Ê¡‚}yíår•6““xEé.œv—X÷ÝœAË“E\3篧1ñ}f¨ìή#Ê÷F–ô2‰‡Æí…¢r¿‹F>òÚ7ÂØîjuiŠk=±vzk;à\ûÐ]²O¿”j.4 ¢ôŨ‰¬yúõÙ«Ç{-kuÓü–ÏØß§/„1&À—$OÞ_ v5·%6mUŠ;µùЫM.ì(¤±Á›'¯Êâ2u`â ?ô¼”Rly9È;F&”È©Î2xä77ÞI ’\´=½Ÿý•jÅYb¾z&„êìüºX _‚‡—Ïæ‘g£ÄÓ„s1,ÿœÙÝ ùþWŸéÕ‚FƆ·7Ó%÷Œ¼¯ ]v f/â"¿[]¥ ‰N ‹“¿аàMéd Afc.Õ˜¯È¹"&xФ›“ºB#ò"žÁ€îo\íÌ÷¡Î¸,Pý½ AÑÂ1V^¡-ÛV÷ÞÃ36ûv‰—¬jz{¦Qy‰0÷Ñ^1¢í….É¡4ø&§ÊÆQ)§ J:^êa?‰œ”] _8rÑ› ´b¿fœ ¯ écŠžßyé»îŽßEj[À½)U<–™·Ù\îÀ—ßøË¾éç#Ïgtú*g¿&ñW›ñ•ÍñëB q,ÃË»j':a–ã–¦ô põ "ÊÔcÊ”l\8†##Hdе¸ÿ´Gå Þ…Çí´–2`ç w.¢ÊL¡îïF`xèáâ¤0³Yf£ÕM!黺ßÙ~JØm¬ó• 2²õ%y¾”ô~Å¿qo—3>áa>ÞÁïÙwìC•O½žþ$‰m-ký+ÖÙ`Â+êÆÿB‹”ã€òúuOüü2+°¯—÷¨ é5ð—šAANVwö9…ñ-«å¾“Øæ£l¥Æxœ8ù†–§|ùÎ21ß¾eN&ñ¯JÙùrM¯ºÈ;Òð—oÇ»Þá®.ÛÆZ•üé’üVê1òù{>¢·kâ&YÃ<®ì§NÔôu§:–-À÷o ]=bC-Ó¨º»ñ™c2ˆ½¦ÿµÏc=ÞðJJ¤½%ÖY)½F4}Âpˆ þ©Åî^Y´¸%N+6ÉU(\üÌL¹ÛI(DˆÛÛd…¼qW,·üÉ!³¾Lxív£9߯ïüyR„{·ª…“’– õb2yNOÉÝžÍëÃ6§ +&¦üN„Û37zwL‹‘2U&‡¾¹n º7®byÉù’ïµçôä¨í0[öæ§Ÿ¥~þ¦çÌéG=öÁê,Р@ ðL”l|ÑÏÆŸ÷`5Šc)ß+rfrÑ“‰?z]ʵ•êÀ®þúásyÐÔ ïJß‚“5ûGàž²ÛØwÿ.÷€I&w\<¤þÃÀ^;…2Í×Í”‘°’[¶oÅçejð½fÕèV<ÎǼíÉ$œF->‹'¥•ȼ5ñvëÝ…vZ‰É¦›2u—´ ¼•³mâ£Ä(‘ë4f’Òžô­Åc¾Ý}…#rR¾Ñ¡YÙ9'Íb,§-Ç©±zÉDóÖíù†A67‡þOé\’ ɶ”2¦•°Ž1Ý}ÐÙu¦r¢ô÷µ8&)nÓWͱ/–:ó¢ÈTà1à3"¥¸YE^¹‡{€Ñ£ô©‹Ý}Rôhºzè×H?te’„¨I|–dΫT¬¿'ÀfÍëBSVÉÝ#Û2XYC1Ò´ž@†· ~š®M¿¢ÁÛ³B©ç”Q»õetâ«ç¾Nqvï—÷®~ÀSZUTÝÓ}µù¨HÙŒÌÈür²Ù{ç© s•—^,ù¬“= ?~ÐÕ1˜lU‘!5bžð9æT\r—×7¢ºZú[T)DÈìé;Å&_űÏÍL§ êAK¹gc›—€Ç£@§4ÉqÏ ®J>ïlÏ(o*õ&e yó¨eñ¹²Ú­¡êJ¼*c¨uÆi¦Gv[ê×’Mi¶I~Ж7¦FX|d…·–üŒ¥ÕÀÝÙÛƒUäý‚¢ÑLÑgá{gË#/ôüˆÙgŠ›ú;&ë›ôél9³O¶Ì©çåÝv!>2ûÔa–Üïè7bÁ”M)²±ÒXþûŽTÅR±ŽxZoὟÊm+ãIGO{¼~r2B:è¢<ï4P_h5¸¯¥~">½oxpB ]ŒÙ$j 0ÎH¿yó°/æÐŒ1É>acdfïåOY3äŒ3Fà™°³zó¡¬À;ÒQØ3usV—þ{›>¾À×5¸ ±)ÝàforcãF¨_iÌ%ùáp¶åÃÚ<(gýÂìXNVm­*åäKü•Ïâ*®lÌÕ·Ä‹RéŸYÙY0‚FFrÊ)ÎcÙ~÷U¹8(Œ—±†¶’½ê*å ‰‘b÷óÓ"¡kÂ?ïèÊ5?Í%10 P* Ñ„:oó_Gtkç2IJËZc’MdÆHœ€ Oj_~¯ ë¦I«KµÍÎ \„´æÞéƒÝ=ŽÂlÃlk=`eâ>¹)Æö¡âÔæÌéº,Åΰ>Èä$Çk.pzùD!* È­0Y¼¬F‘“@@eƒºD„;aÙ¦=uk;Cɘ©A˜»Ù­N<ó<8%ˬ­ýL ì á‘-ݱö/œ€ñ8w7îMjdñ\!›<œ—˜J©ý@ž0­äý€*¶MxYü¿o¯~1÷›b=ïHM›ÑîÅœnog8C¡^вäPÍb‚ý=B3ço¾Ö!O¯f›6‰DAì£Ñ´4;ö¨Ve]ño~TI<Ø>ÚÁm <Òò‘Z4ägžöÇøgOD.WoÂcD™–Ëåæ3ÕÔ£9â}ùä Õ¥¾¹<¨Ðk¸/Âlg'xÏýO)óŒ‚mpé‰é$Éxô”°]¾ÛBj‹´n5Ø0â~UÓ¸[ôbpËî‘/÷q«:|Ë‘b©ÂÑåÞ©nµÁĘ ¾^/Ù#¬É…ñÈ ³v!Œ–HÂmÆx…9›—é<­Àæ¬|ž˜ó²y¹»ÿJΫ˜w‡1NЪ”Å¿¤¬°s ü#ç?s£ɬI” D&+“xÿenc4`†½Ñmë5íÐõ‰«7È›Pý¼ ‰^n}#xìõÎ/Áð´›~òÁHÿBÌœÞGÆJ+€»záºÂÂQ—Cë"¨qpüOJóx–ºöª³–›ãB½[jzhyDÄf·Í5þJʱE®OÎ`'gA9±{Ðodb¾3/îŒ1¦&ãò?ë>žéê„æWG³lŸZ Åjx†{L]ÈI©-MÌI׽躇V)öŸí^ ™ÛMh¾e§I äCÝÕÚ¸ÎæÇ«HÏtBíýˆ÷×2Våæ`pYàfSàl·W˜ÕT´nK‹<Ù0ÿøö}X?¦|þ-cä²ðë7åo–4²+4o•¸åw\J?{ÞÉ_´å¨rä}õø}³Û ÏýeMá¼TïËv} ‚ØqiGȆ¸Pž1üc§R¶ÖÞþÕ™ËÙí.„Ûæ+õªœàö„êçU¤Á$Ïè7ñÏT÷ÒÞ[Æ#7ðK=áQ³ˆ™Î˜²ñË{hH„û Wr(¥ÐB7N —/ä%îŠ:|ˆ‚²ûï)kf‰ €þ&Û9Í2R£ª}•ËLº:ÜJÂlV“Ã8ÁzÞ‘”ü€``+fÈáGÿ¥à©ásƒt¨†’lùG6Z¼ž7z¬SøKGûlÆŠG%‘åÑqMYÔa[Þû,R‚4ENÖü%Ìõ©»œ՟׮ìYŠR¥âã_ ˜avG=yà_³‹³ÈÑyÒ'íÃÇUv[VgÇt^èðê "М®&ü¾®¯¤:‘eå`¸%™x‘4HÕ¸úýÛÈf‚û庨Q ¸°ç*ð@å|¬>þƒ†ÖPdΕÓeL&øøj77h28ñk—±Œ#\_Äû…Ìb†G^wƒé,GíO‡‹wºÈ†ì}I×Ü êžÃ·f#kïa"¡‚×7ôì²ÃµÚ(©˜¼›si쑪;‡ñó'ð¯íÏxJ5z²‚㣔»zP¡>Ýõ>úÎA>¼¹Ð.‰GØkïXÆÝ-£Š½õ¾ìfo(7'z^ëÁSàa²KÙôÕ]Aè'¶Ú»<’=¼€WÇ÷B2’Ò笜®›z-E§y¬úz;En@¯È¡BÞ/;@û3•çm^ìÌéäίқD”®Š9î^ùÄ)»¤ý̰¨ˆ<üìbØå;úÜ1Øm•˜ÎÙ{¿’âÚ#¥Óqï¾äkç±|:ú,á@8ýa§îmÀTþݲí÷¯ RkÑg‹5‹7ƒÀ~ëšco5Ų̀8ûÃzͰã"%Ñ‚YòÇ!#<‹ëžÙy™VÁoyL´ÂŒG4w: ÕdžõoeÓ»;‹2÷"VŠ›@)á„4(7é ²/ZÒ•72?Ý¿8ŠœTnK<1g^†½,˜Î¨º¶ÿä'¶Ó¸½kE™JÑ)÷£ï/!äÙ}Ä'ç8ö‡°Í©‘pXÅ\»õ%Uôh‹†¢¶}hsåF ¨`oðƒfvÑä“a‰åwC“7'Ã+ë&*ïtŒn *C$Jr92Ù•c®ÊÇ·v"p.ÀÚ\K¨¢Ì&¥ÃCdǹí¾L6«±'[°¦œÉÞ•”¡úf?úU›kËQõ#Jׇ¥õ×k’BÑäþp$M5b'l|}g“æm÷£Ýàˆ¦öo1opj2<öjº© #ˆŠBDF+WËÄ‹yÛ•ßâ7¡Ò='’°ïë*Ÿ¶¦É°‘Tƒá1¼'W[Yà:&ˆh §ÑÕäîŠ×ÞƒCÊmËÝ/¥ßÃ3]â"÷Í'},¨è¢ ½×>©úgÔíßdû«×]M ®ÖðŒ„È—©ÕÀ#Å‚ÔdX©Æ ‰n+dØçWpQ× Ö’6Û4ò p“ !£ Úda‰ÏBÐ6ßç›ûÒH¹§ŠÜ4 Ójø9ß6DÓERµ~°ToÉD¿$TêP3uƒ¿L)±©Ï7;Ÿ–óÃÚáQl9„­•”«%µH{i!'!Á“µ´óÜoõÖÃYÃu˜×ôlËÎ/h½:²ÙU|¨nŽ‚Ö5’íýš2§œp~¤CoòšÏ’ë•SÄE%Rú¬ÓìMG5Æ+³ÆÀÌA´‘6Ÿ‹\P$0å•US¬^Æ î-‰{5-Bwc‚£ðàÞ´l;C¤ðî;ÖŠUS·÷~b€¶…æ(ÝPg¬§?—Õ2ÖíãTA~¡I¹•&/$MÈô¿ &ŸÖXló×Í4Edç½ZÉÇ ææ$úª®ì]e¹òíˆË„k)2Ðî=Ýî»q:/ëÔï… ËôCõëWXœÙz›2öõ |&ó…Ìbæ²`ZmP†ž1££[ü=|(©õ@Ђü¹I‚ùm 9)ëÐÿ$ë£3 endstream endobj 437 0 obj << /Length1 1601 /Length2 7576 /Length3 0 /Length 8638 /Filter /FlateDecode >> stream xÚ¸TÔ[6Ž4HJIHwH‰tw—4Ãà 2Cw‡twI‡€t7H‹”‚„4’*È7z½ï}ïûÿ¯õ}kÖšùg?{Ÿ³÷~ö™YÃÌ ­Ç-c ³) n~¾'9 =~>Ÿ Ÿ.3³>ýã2‚\á`ôÉ1ä\AÖ$&o@5`P€ªÀ/à~Â/ò„ ÀÇ'ö7æú oí¶hðTaP—Yæâå ¶w@ ÷ùûÀdð‹‰‰pývÈ8ƒ\Á@k(@ÃárFî´†ô`@0áõ¯lO—'¼¼<ÖÎp˜«½$;ÀŒpè‚à Ww-àWÊMkgПÔxp™ú`ø_=˜ÂÃÚ@0…#]Ü ¶ Wrw€žŠ:@Ëý‹¬þ ð§8~þÿ„ûãý+úÛÙ„9»XC½ÀP{€h)ªó <\k¨í/¢5Cú[»[ƒ!Ö6HÂï£[etÖÈ ÿ亂]p8ò+GÞ_aeV€ÚÊÁœAP÷×ùäÁ® ²î^¼šë…y@}þ^Ù¡¶v¿Ò°usá5€‚Ÿ»Täÿpî?˜=â„@ž@Þ_è{¹€~ÃÈü|\`.;d ?°ùë·v®n ?Ÿÿ6ü{…Ëϰ=ŠûOt$ ²ûkì¿+Ø`ʇ”?€ï×ë?OæH…Ù ¯è¿[Ì+#++k¤Êù'åÿeeažn1·˜0€ŸŸ_ ""ðûwmkðŸsü—¯ Ôûë¸È:ý}d÷?`û3 ì€ÇÒ„!• °ý#t3>!> òÿÿYî¿]þÿTþ+ÊÿUèÿ{"E7ä·í/ÂÿÇní †xýa •ë†@N 9 Ðÿ¥þ] -ØÍù­*kä4È@푊ææÌÃ÷ø/ W{‚lµÁ Ã_ªù 7ø5o0¤ ƒƒÝ0H/>¾ÿ±!‡ 脼EàHiþ63ôï} @˜í¯aX»ºZ{á"{\ |ø‘Si òü-f/†@º9úì`®¸¿+(àEzÁ<þjÒöæçðÚ¸ZAÝÂàÿ¡ !ad¥Aÿ@ü^û_w"ÈôÜ ÙÞ¿ ż`(r0ÁÈ^ÿ‡Íà… óü7 :ƒ¡nðhHÀ ‚»@þËõ1€FvÑÚõ?˜ Ø°"þ«n@7WWä%ò[àÈ¢þ½þ}c@ž îÒ{P<Ôñuhçu µ÷ç ̵õ¡H!ËBƒ:V–ÒìsY+Ûš‡ãéÚ‹á3ï}©9¾\Ozšõå­¦)ç#P†6eO¸ G¿÷ÙƒèlaTöS"éQ›Älj:´„V¦è¦¬ÉFïoÂDúw^mßvÃwž‰œ¥—D iÔˆX™¼îÔ& Lëˆ13¢¸®¦nú*S·¨/ÀqW²1”ß¼6Mã2Ç>~|“3<”.xV¤6P+\NBIê­Ê7ž4BI–˜£ÚGa‘º”«HM`¤,qgYE³Yý1W4Ü‘8"èÖd¯)t_Ëÿm³[Lè½D^ÿêåV¶þ7^ü‡­IQ\uéL²Ìµ¶(—cǵ‚ütr:fC÷ÊÆ¬¬üÊDu¹9Ë?DÐb{úáµUlV"¿€yªDtäÓKYam˸ÑòÍÓT 3‰¶ š&ƒãºÛø#.ž¯/‡ÀUÆôÉЋÝÖ7cý'0¦/´d³A Æ]Yƒû‰-*B—ïˆ 9„õj °Köø¼ø¹ÝüX£ 3ÒäñZÙyx+q‘IüüÛ"cm…õ[MK¶û5m0åT\~ ÏYJÒÑ}ÖžN7Jßþõåw#MzZÝ,…”³Ò£Ì¶ø9Ô‹,)›zÅ;r³ubT]þWtŠy6§¥5S~œ|¹ks@iÉJ?v(»Ý<,„ÓnêaŽÆÁ}ƒßDŠȱÉø¥Æ"@·zÛ¼Ò9|‹è¸,T­Rkt6ŽAå~Ìë¹×?v~Õ%þi‰˜3Ïìy{š1â&Íö¨Áñ¶Œdî¾AAŽïæ×¯:~Ö‚ŸË!h©Ý碞èÕÔXųˆ$e#™òþš ñ†eÃÕéŸøríc¤!†°†ô÷ö¼Ã$©þ†zñ”œz‰ñ’\¡Ã›eUÝfŒUßšS³(ft0ÜuåRKÐstäp) æ¤-¹òFÈÇs»œÇÚØAvdT®µ-P+2=–²HJmUF•½Ø€W‚!ž?è¢GƒõÆ ´Uì|Ô&+&àTax_&Lj; xÝûâ§L Û~,Òµª3kJd*‡„'?xºªÍ§úr|%À=qžk˜©‘ÑÁ LCê¢á@j=Ù…ã}¨ˆ;Á…ÄŠ6?ÜoS‰0YºX3IÈâD05Jÿsƒ¨]{8€ÊK§4"¤M‹=´¿šOdn{–™ 'T ¯ø{’®÷K’ós»=Ÿˆi by‡O·Š|237dSÇ÷ßû}ï^ʃ رÊ{­nÔY޼š{%m¤M®‡R‰ŸŸ™‹BRã·Zàm,¡¡}¼ ìY úŸ­ñÏQ׫¿,M7¬“ué1ŠÇï¦Þ¸Y èEáÊe ËJ¯¹CW2õ7±k2ãë§:Ãf®*HÌy1'¸ü|"g†G¥óçÒ8_Ðd îÝV­'] £+›sŸæ}*ñ5+‚QŽ˜áß*÷Nò(m ëšÅäÁ[Ÿ« —·&GBz¬+²Ì/v¥æ¹ðPÎl…ä "áÄ;­H÷~Ë2Lݽ· b z 4í#—+œ¾ê«6Wá«Î>ñ’†gi»=Ã[î‹tbNx^ÄqäMÊI^.âTò£ ›€dGÊ#þœé''º¡æÕ³m¼•䤙ƒ}AK<vëÓ&„cÇKtµw™¶[ÚžÜu½cíŠSx´¸[bËZ=𹇚»­ï /õ€ù4Î/b©‡:fñžóxXí³ªÁ"uѩދ¥XàøyÓŒt µ::[]¹ä]»Ú‡‹óæ<öŒ¯XÏó8V€&^©C%ùÙ÷pI,5ÞÆÜZqK7`ñ=0ļ¥f½È™ªŸ¾¬@è•ÚJ}¬7&C'a 1 ¼rÒ4j2é=R\|º+ë×¶çÔ°2€µ¦{ĶÝ`ŠB0îÝë%´$áƒÞšKZòÄbÚ2(+|I[®qÏ]óË£’°^é!þ¬ü<ó&þBŠ„Þ˜Nß:¶­6ÃùÓµh¥òjˆH°šµ©÷ªk¾å‘Ä%FÖÊÇãáÆ€R¶ž‡©õáǔ޼š—¼gÕž…ú¶EÉߣ~ÌMømOáÈ¥9šê™Þ÷Ös™‘õˆjìȆ7딋­2[)m}]Hwý¤òm¡)Š~'|R£ˆ6L;Š£±ªˆ/µ+íFñpZŽxHw­ÌÏ.‚]fŒ8fâ£]üÔX5`(îyð Êû|GtxÈ·§DÒöÎÑK?+6h ÉÐyd;}òyÙ[{¹1ÊÄóÄãÅÞö¬{bÞŸõ#åVxþí‰Cáe0ZŽ£t±˜aשy•…0ÇZƒ#µKOÇÂv.̉kNþº÷¯OñT²!òêÇ:ÏЃ®šµ¹¡°‹Î³.Ö§Ó&]k˜ îC~Þk‚˜|‘ ¡G鶧۸4s¹JI¦ŸhŠ8Þö Ó‘/aí(sŽÑï¸5M”LÔÀÎDã‡Ô _Ç*!b¹Ñ`‘ì¯óxIÇiµMé‹4D<{¼ŠåÔÔ£mã|EiÝœõöhTFžev`hë½³ËÙÕX£t]ýFZÐåɾÌl€`Ù†Ù^,á…?Ó‰˜BQ;y‚£î s)@Õn®F­%¡àU‰âû¹ž†Ç¹²™»[Ù‡2åUÖ»ž¿ž:'¤_ë]yÜ„MQœ0ý…ÿ•¶ÝÃw8Õç\ïõ†ò…/6;1h \‹ËL?ö¹[}ÂëlªÿKqÑày¥Ät—OZ²?ÅãWØ6yÿmJK9Ň©nʼnÌ`]}Vb°ÄÚ>;Š{ôã]•<˜¼;˜ƒQº¢ílÒKK/²¼ñ­]Òš,*Îéy_J3¼qNŽIOBÈ Œîg å”w¯sEß9QÌ'b<õºÎÑt÷NÁÚ/)ïâ)>FEh6– FB^µ:ɨ˜G°Sh\4ëmß™¤-A›¨‚c113ãçYÊ9,âhGYo€Ò(„oXZF}Ÿ®M§_uÓÍPÕ=¸Û_ªäLÔ6?-ô÷bu>„?Í4Ø sa°ìF-Óé\þºÅZª™­Ôx¼Ž‘!I€:T>ÑëhÞøz.h,©Zè-µ$(¡yv¯ËŠOëóœÂÆ„M’qI”c÷E÷è„S¹—à5l#úå ðewÑV{”º¾Qtíõˆm³ÖŠyÙ§’š¨Œ¡S‡.‡—¾æÙva·#[ÅY=ïúâXaíØ1³l¯¥F«ó’é;Ók RªOÁ 9Rû¶Ò‚@v"sÁJª4‚ýyšyf ?ešªÌ½’ j¢4«?ƒ7xèk»ù$’Ã;ۧꮵó^prçÖT¼H¯Wüjp­ÍØ¡6ÎYÕ9kÒ !‘â«bK½ÄÛRSg©7ŠÛ;a‰õ=`3QáNˆX½úúEÜjžlg[f[ùIã«‚ueZþä¦åŸV] “™,J.Ü&ÅòwiÊòKg†TR.gX^3ém¤Ú«ÌŠÁý#ò˜—K—…Jj‹Ú þš¦­è*c–û‘rØ'úäÞ«³v8;8OçÒRbn‚îY=F~++ð¿Weí¼]ÿÈdå§‹ƒIŒµ`VH¼¡)àdWd}sSÌ Úo!Œ(ÃxC#T–> 'ªÌ˜$žG{]E\*ŸA¿8Às¿N~ˆvi`¾õ*$IbÆ8úçýÛ$¡ÆÞè@×@ „¤—Dm8ÇfZ·¿~bˆZƵ¾ÂÚ|=Tšzs~Ïìâj1”F=õ ¤P;™E D½tSòW³¼|>K'ÞâÆÎ¸× þýƒ^jZ¿{×øÉÍW9ÿ©ÕÞ$EFaž:>ÉLÔ Îj:s¡|”ŒcsU3A§ð½Õ£O˜ªùúB%Ã[a­<~/òãBÄ'E†ã œÕÄ%-Õ5½7´"Ñ ðà¬Wï+†½v> &céçÇÈ Ý(¹Úo` ½eŠHañ­‹oê‰ÆöOý¨T¹µ(š—¾_X‹©áþyÍ‘Q²¹À?*‚že›Ošé ¾5z¦µ˜HéLÀó2®æG×´›b:¦ùÔñÑ6öOÖàÁNþ’E‚^q?z“03€\à{¶'‹ øz©Ë°ðM’g™éÔ"í#Ð+†v‹û+vI¤crô«Só¬Ö—ŒÌÃj¾V:j~ŸŠÞlž¹É‡ç$Gø³ÞŠŠñܾ/ëØ±¡r—r(ôpJá •F²@Ä.ŒÛ´%§¡ö8*Š;O¤ú)‹ ˜zZ“ÀaG9gÓ’OUZ"’ANFßJŠ*ºPÇkYC^¡-%Ï!$ëjPözAsETfë¸_ $ŠÄË|DMuš6ƒ`5Nµ%ãT©?ÑÜÂÄδõ2?‹qnËå ¼?|J”×±GVbKåNùÂ5Ó$íò'½Ì…äb/“!SaP;WDQ öpjÐQ›Pl㬆1»Ï>Y6:7frhIûKÜ…¸¬…N¼VE²à·Ùû‚ !nÐ4¦–5•a‚ý»|K-LÐO«w¸ôL½kVÁ~Übd:¼ƒ%Ÿ5@yR‹}#£û³uM÷舶ÐÌ£KmNzpn÷:ö«,÷žÎ\O¤ s¢"hú+ëL§rê#)U VhI3k$ª¯îá#J›Ý1CÂçͨÚxm6gÎ4 ÉÆø„î&9T> ‰IÚ¥ùU´ˆ¦¯›/ÍUwí…Ž•᥾ŒeÛ_ÞãæŒš’Í©G;䣯™< k`_„ ‰8‘­ýL~Ä€¥œd†ÂUí9é{¯…{•(ç=UT#ÞÜŠXĘ8r(»ßöLxúaŠ3×ꌃ·Ñ³ñh“ªY[ê®Æ$Ê·>xh~Îm°†T>‰bºÖZÓÞ õ°œŽRà‹fP[Œšg´ø<óÍþùO1¾z;…a6qF‰ŸcvÀžl'%øÑ¼ÜøAÐf4ŽÖ·Ó«cØe.I>­kå*Ârij·rh¼u¹Î¤XUÆôÞ1½ÒùA7#§~QtžØJî™áó©»”6L±u5ƒߟ1tK!Yr"Ü·YÜ pÏýó5ýr­¾éð=¦ùq05šQ)Ý€Ê1v­ 3Ô+úáî9ÿÄÍV'‘Üí™—%ék}[ÆäÊ—6œ;}Záæ‹ZÏO¬Âg›ÂƯåˆzäÕè´°(û"ì²Ùì¥=ÌíJ 3ÇûM÷übø¿íÑYʺWãŒlhe»ÏÖÒ4 ÜsÇÃõþþY¿uõû8ßÒGR›G—Ù÷L³½½¦’æ™ÐAüÕ+NóB鶺2‡VlCaÒ> ^F’='‘[’ßkw¼¤·‡îÚ Ö¿cÿþKa@Y|è“vòÔKÖF¤ÂÀâß~‚!]ñî8›Û¶}¥Ëmkß ¥u›1#àŠÕí˘/ƒäŠà¾ÆXŠÎ—ó¯R²Ïgrû´hÅ·Õi½ÿ.@¤[ÞßHèùf÷›>RgûÂCÖ~:q£óVï¶#/›q¡’msré-ÞVŸ¡â5o¦°€Ñ7¾åâZî¤×")Ýbé-LÍ€ ŒE!ô®¶™iƒŽØwy]tG®W—z+ 4¹áf(€’„®9—êàeÏÎX©°IëÛʾf|Ú±‰ÔyMuqR§yï8t H ¤òÆr§D!Z Üðgæ!Qó6Ó$-Œݹټ"WØÇâÚ ÌKhPÀHØI¹ƒT#†ŸŠŸÌR, Ì´JŽòG.¼If$ìÑ1j/Ѻý:“ø˜CËûG;°õܘReÂr³öaqqŠ$þp_â@äAŠÉÃÌÆËë7'û\2BÐ1•5ÅèTÞ©›·Ñ™ëøæÖpžFMÞŸr󨊷ÊaJB|ž~ Z1ìt=J–o9ÕØ{A|Ÿ]»?U©–Ñ)&b] jÖ˜õHYë ]Ãf±xßÿ¡Á¥ç<íâÚnÈ>þO!Šx¢@®¨ŒR)–÷&BK7OõR°‚6¯†£A7. Œfc?a– çˆÛí“«™˜°´à¦#ËÑšÞt¹Öì*›X%Õ6˜¬Þ¤îHqD.o3³Äy¸‚æõ, Øœ5ªÕó*ÕâÅêK×ÐxÃë„@5ÛbGßÓEÞsÐìNB­œñ@h5ð{p4ÇÅs›oò_îm9$ËÈñ÷¶P’%'^\:w+àäwä2Z’ÑJËW£h¤§±²Š©uXú]¡ÔD&jâríL‡]mò§rU"ú¤Ö±g¯æÃr½ æÙ±bíEÌ”¿’uÏW㹕nÂ>Ú;u€ÐѸNÕi?•± œRøWj\Ôéñw€;oŽêøªÏÂô..Ÿ;x•W˜/G[ôôö´†´Í7 Ø;†µZ~²nôå¯5‚ŽØPØ­ˆ»ò¾Àb³1¾Å ë!²q8L¯èÕ•“cÅÓÔµ²[£ê%6eõ¸1ýß4`šðíø2) QNäWS<¸–ÓPÖzè’àÑnïYÚ{\¸£‚åÓ;»ÝŠgéýؾ¾È>±ô…&Ël•Ò‹fWœÕg&ú±!¶:Qlv¢!ðvjê“NÀÄj‰nñ€á…ÇHfLÙº}!È€=ì2®S娗3ÍV•—ó9ÈIØ­¶­%üÚß©æùàØ0‹\’®lm³7èó‚±´0eþffÜyZB/y_¶O+Ÿ6d,^´hïðf\íÀýÛ¾µovõ[´m NZ’x6ñïô %oï5{ñY¹íS½sï¼U³_è nOÖN g —SœFwÒÚ,¡”û¦ }8YKJ~GÒÃ{¦ÛúbQÌh¤ÿ™³ƒ(Å鯩ëî¾SyÚ0~ävq†Æ‰ø¨Ñ{&•aÃO:¬ƒ º¸-^aûë¶3¯$³d—‰W®˜kø²šœ}« P7PZun +YÛ¤§½Y.';n0í9Wƒ{$£¿á N‹wȰºã¨¿WÊìƒwZž!Ÿ¨B-|vº˜U_O7='¢²°£’!‘æR”·rÍR·îJ‘Í´JLøÃ쟩F—í¸óxˆLâfê<7›hŽÌ+RbÔÏ&9NVÐ5„Mf͵Ÿ†<2‹9Få•D­ã}éÑÄDn™¶‹pŸÿÎ$-õúÞ_¹³ÊHUáæZ"vo›9‘Cé“iAÂdæ£<"ø'øí„ó»"‘ëyéôªá×Éq*$hêXt$ÞM²Ñ²7¬>÷‚ôjiZwm¹C8º o7lf5i/F]»ÎÊ G°ºçÅü¤õŸ fÜ$tÀº¾QàÏ Ö¸vÚ¨i‹ïʪ4Äõ ùVã¢äKìU¦Y))|3…â—¶¯cn8­> stream xÚvP“k×-Ò«4)JézWzïR  Ыҫô"M@DéR¤£ô"HPªÒ‹H)Ôs¾óŸïÞ™{'3Éû¬½ö~vYûp²é *@Q¶0U#‚¤J:FfâH “prÃ1.°¿`N˜;ŽBJÿ/‚’; ‚ÁbÊ –§ƒB4=\`X\,! „A ©¿‰(wi€2Äèš($ M©„rõq‡;8b°×üýà±ã€¥¤$~»0w¸ Ð`aìv€ÊÃøü+¬#ã*-$äåå„ Ð@”»ƒ<¯À ŽqÂÐ0wOð«`€.ûS„`ìGÿÁPö/ˆ; €\àv0$ëá„ÂÜØËFÚ=WòYûAðWo` ø?áþòþŽüí ±³C!\!H8Ò`wôTµoŒ‚„þ"B\Ð(¬?ÄwØb ¿3‡T l•‡¶s‡»bÐ@4ÜåW‰B¿Â`»¬‚„*¡ƒ&ù•Ÿ2Üf‡m»ÐŸÉ:#Q^H¿¿öp$ÔþWPW¡ûH¸›LCù/ "ùs€ab )qqQ Ì ó¶súÞØÇöÛþc+ðsE¹ì±EÀàö0ì‰â `Ü=`~ÿÛðï  €Âí0[˜IòOt, ³ÿsÆßî °aµ€~}þóô+/( éâóý÷|…TÔ•Ô´ùÿTü›¢"Êà'( ”•ÄÊUX !)øw}ü¯,@ÿ¸j íQ©?Éb»ôwžÍŸç¯Ýàü;–. +Z€ç[‚Ä@vØ/ðÿ·Ò»üßþ+ÊÿKãÿª‡‹Ëo3Ïoûÿa† à.>°šõÀ`õ¯ƒÂnò¿©¦°?;«ƒÂ=ÿmÕÀ@°{ €tÀjY, ‰þÁáhU¸7 ªÇØ9þQÌüþ¯Ms#aú(4ü׫ëý— »^vÎØ×+Ëß&v{þ}¯ ÒýµfÂb∻;ć„U“°˜ÀŒÝG(Ìû·B@$ ƒu`k Ø£ÜI~U Ack†£±Spüeüƒ…Á!(ÄÁÛŽ0á¿1¨­Ëoø_¹Øy¸»cWò·d°‰þ}þ½ÿ0˜7ÌŽdze'êTÚ|R¥Àì%¸Ë9u.í­EëöIÙ›‘}áŸÁ]42 Û¼‡’ãœÒb¯wŠt¿‘m"-L&©ë£â¿áµÜ ¥a­uV(cn[¹Õé²±çŽìÜÚÛ[i–ú™ÁY~‘hø,oÀ¯@vÁVÏ7H´¢Ê„/ª»uøv™Ú-ß65v›ìEÐaV3û˜ÇVŠk ï#î$$ ó0–=»:*×2#Dhpñìf´Tæ¨ÜUi[Ç« (Êߨœg,€7÷›æyÈ$ËϨzi/¥F›«Š'¹Á$,E_nƒ…|—¿ûY;BÃξ.7v½í“Ñ›d›zn¸ÈÇTKV§úF Rxº‰ƒKLcaíHÃs¡ÿáy”« Û.Ù}Mzå53¢å«u÷fææ1­³Z±åÒ™ÝüN‘-¬"â寮Ó4þëq í0¥÷¨Ù}€ëø}ÕmÔ£îN´ØX³vKËÍIÜÿ§-âÅi^ø9!¿Û“C*“œÞÙ0#‹6XjzS UÎÉ ek¼å #®ÊŠVh)ãÊ— 9Ò­šÞgËNO²TTçS_ΊœQGwr’á\•Ä8¼y¡·2‘#«ek0ýÄ$«éë†Á¡·èñÓouߟQMçjSVºôRöm ϲ‘¾2k]­’]wçWχ*¼¨%•™,Ü,6!¿|—¦q þ<^‘-àû1^¨\ÒÙJGŒ§µèÓjzqE¢´lqýú.ã˜N¨­ˆ5 ¢M?Êð9ŠŒêv-Ü|¥ev¿ßÓdåÑ žqßýÞ(°-»1õîq)œê¶ÏƒŸ¦«´%}•ÈcöBô­,u¼X;òU»×Î͘Ÿ¬«úR[?Òº¡À¸²úi Ìž‡¤Z'òë‹Ñ«'’¶.Ÿ¯³¬T|‰שÜbäÒʿƑòƿҟVyB0‘îVð¤O ÃgTo)?êBø2; }ÑÕOcÎ%ßoݺ­\k‡÷xT™'›(Ã5X tëÉd0Ãûáö/µ ù"âÇ–odçýb/úHĪÄv åƒüBXºúRÔh¿h_%-Vˆ+oxŸ;%VNÄQ~ çMâøÄ×e”‚ Vþîô.ðgÓø ¹E–÷=JæªáÂÔ›üƒy<¶¦•qì1ÓO‰7 h¿ºÈ瑃Eñú>=÷C(q}|£°"w'–NŒâõÛ9û¾VøÓ¡nMϯ~h@ôP¡OmX値™©s0çãwåê¼/’¢7ÙåwK!d× '»—@³ðíb—B 8f\K v¢°1·w-¤%{Y´ˆ¦ú 8E~Ò>>X”×Y’4uì<õ†nü‰ŸoÒ3¬(SŠh´í¯ò?I§Ä¤Û”¸ß }ÿØ*w“­§9×ÚÕíKF´÷%îQc}6ñ´%sÌE-‹µßKv½b~R=ó’e'4^C*\ŒÆ×^ Vº44¬’ yè™×5èȾn&ïé:ÚðN-Ü»´õ"¾¦–díAôvïÐ?OÁ€}é‘WªA›,ØV3[“+n©íÎðw8­áµwAù««êÚãžã GG=]&òÌ–­‡ë`|K~9¹ìGõ-ñùâ{~™9ïce¶¯-ù©’sñRÓ@ý‚Êbw¬ºªÛ3'øÆø4÷î4XKæìqß¹EÜ/£êj¤¿µ˜dœªb7AZ.Pn{­ªÅÄ'­ÀÕy„/‹"Q¦ßR½uMî-‡ÉÎM¢Ã:Nº¡9˼–a湟Ó,û² ¢‡¾(þæÍãóÉú–ÐÑÇ5¾+i‹Ëò‚ë, u‰ :ßÎtñ**_'Ó¼{“6«fÐÙ¿¾“ZÝi6 1­‹tóך|#q´®JTÆv²º ûvK¦}ˆ‹# ìjp˜H£Ø¼ï9íUGCù@ÛÍð¤N;­)•–Òý."–ò¦`|©ùÂþˆúyJ®¸c/2Ëýß””ÞžäÏ~ó[hUù\Õwq²;þ_rÛ£®Í<ø"ºy9ž~nÚÇ"ï20å1’ñÕdoaƒPÒUÔ:!išæ\3 mŽ•ã*¶ñþ”t€b„äK˜#(*s³øõ³HRÖ“ å(¦ (Hä^jAB"-Ìߺõ¥¸ªFØÝVàTŸz†÷jW%ÞôH`£Ÿ ¯§*ì3CXô®÷ñ\wýFaœ±‡KÁ³‘Zc›ˆâ¸Äç¬u{¥<´C¦÷ÐÐZRk-ݟ̳žC*7êˆm«¸Ø ƒ#“¿AˆVåÀÚ×|W¨“ØÛø3 …}ð:Šlrå8ÞOGO\ÎtºCêÕfƦ…ïÝÉ=¸úXÒ~}o;kˆ¶fß=Ø¡‰v"n¾3-$ʬ–-Ú¦$è˜@‘úÖ'‚>ÿ´Èê)¾Ô\5>ˆ£­Ð‰ôýŒÞöd®k¾Z½Ô^I{ÐË2ÿ‘Ÿ¥øÚ»‹‘=änûD˜ÒïŹ;ðƒdª8šaMY˜­µJI&+÷vüGþyÂöxè _jL ²vúŒá95¥D8©;^—è*ްk¼‰Ó})ÄŸìxñNÁ,ŽÀB%¤øY·‡*µîùV9Þº˜oWÁ[êφEÁªy·8„§•IZ¯;Yy++<×8ù€Ðõ;[—%ˆ.çè±µ&]’pF­kLÄU_é±Ì§ôÈ<¹Ùk>Á:“þíX1WïB8¶œ`£+⊤À!O\f˜4?H̬4.S­ð.|Ýl_UOºJD6/qñ›ó{Î ªj“sË„J/8Aâ3-zy@œ±g÷qcG(Ü‚äžûwA×gÕ8œÊ€m6––5£áÁYƒ8žó=uãfnçÇ ·MµÓëMLjcÌ»+£(ÁïuñóV¯ÚQ?Šªò‹úrˆŒ`=d&~„tÊQO~_¸—°Ö¼B:‰?–Ö¹)'»W¬)(iþ¡TRCàò]S°ŒÚ´VʱP,Þ™óSKšd]¨´Ä°é6JÆo„ÙTþì)4!1k4}©ÎzBþóÎPÜã7:|E¦Y蕎ܲøÏµQî8ñGr„8oí´Sž.D[Z ¶;•//´õ ó<³èz(ÃÝBz# ¸þ²÷t¿víÝBÜ•– Ý3D¦è…Úd»Í¼ÜާœöÏ·Ú"Ñ23?~AÜLhFŸR [eünDO¦ÑÑ-412¾“½?A"•|q±Ã£©Ú@c˜‘ê<žÕtœqQ/|Ô$:´¯ëv ECÛè«ù¹fm+ý£ÓOu™ó’¼ÒLì\máS&3\‹Í6e(i,¯ü"¥9Ú™`’Mœ4"*_°®ô¼î`¹,À)üÜB,Šm)™¬ùyáÎ3‘w9Þ±kÔ1fe'ùŽ®b±=(Lÿ­Ù2ÁÞöXÐÁÇ~/Ò\ÿÔIv}²Ãà§å¦Æ5!%šéƒ^n\ŒO»ò\ÕÓ¡œ`.Ê ÉÚ9»³ík~AÅýK‚Œ­w>¦]úŸódÌêGHjfÂJÓô_´S~¶åø ë|p…þ¢tS‹!òÕ’ªa¹†87ýÉFʪw ÁHÀ‡ï=ƒžV"®aDm.ÍôÕy³›øÚmƒßêž!HNRKRI¨÷4Æy) 8Ë­–\­Iņh­ÒÂzÅ¿w¦––\d}¼üæ»—I,~lâúÚu£Ž{>zŸãýòˆØè\x%7ßì§3 áf+MBѼ;{׿âfß¹Lh\Ëd¥¼BL:gÊÎa8ïÞÄ{9Ie5C®TÿÉEmÉ瓽wîlû$!}2peñ‹}|Z*§ÇüØØEpúðYﳕ[!§| èýMŸˆ’,Êêʘïþ±_™|¹ ]my6içmÁZÍˤ}ùñ##´K©-•ØæIêÌ[K€Ÿ#s¤û9Ènå—NÆØ‚”+²½ žÁ¹}‹(ß嬱Q]63tÌ –kÍì:«vtÅ>í—‘Ê0‡—± t¬ž/Îø0xÇ(° Rxã+ ûUxŽ}P*éx`œFÇïÛ·Ây:óc²P÷†¸M a&gÒ)E³ÐyÜE’]άc¬Uý¨,ºën9'aq´ï=bë#£žoöº G6…_ˆ¤f+&¿‰7:H©dKÝl4Bx~ó)¥<:ü‘cþI¬òˆ.?yöÔðvTY‘ Áòó=ut¸Øý8zÉžr¾›|éÐ}®Bñç.ó`óòÏCo+ :S·B^”8‘ƒ aˆÞ®9¢þWV>ŵђuêÎOV©ê_ÞN<Ð+Ô¼þèµàÔõô9E¦]o–3UÎ[@y”e:^;Îý”}&ææ¶wyúìàÚmä²¢‡{÷*œ®ÄîŽz cʹ ‘„(_ÑGFg†½O»uO.€óÆΦFC»”1ÎY>Qêçu\mÌ“1¢±g@–æLÕJcÕ|OËw-û“Qô÷$qÄO%¤BÖ¥7bVeËuï§Uú…êf¥¬NÞ÷Q$é§;?áØ –J·úìÂz›À­¶‰>‚mºPjÀÝoH¢¥g-ÞZãéãK£Pâ)´T‚hÊhd 3lR6äDŒã& BšÜZˆÜx‚2*qoy¿FâR?1¾‘ù¨ÚõEáÖ‚Þô/©;Ÿ¿CGÆõøm¢IrÈÃuY.Ó6Ù©…÷‚æ—IÖaル0?øˆè‚æØ<ßí±÷Ùâßš-Á¬G_C9¬=7¦Å•þôV™(]¦ ×’*ï¬æ==¥Ã‡(TC~áÔÌÄ<ü1ÞÖˆ :äž8Æ~"ÇÏFz ó±Y¸´ƒCpÿ””9 þydD{l®z)Ý0 Áéè}XçzCU !®¤C¦gêr›—•¬!YůãÑënåcx"„s4œ9dÛò@Gß•w·åñ]²²)Ði`ó+ö}×gC ²ó‰i Mò~ÖÜn¤·Ù”nF~"Å` ˆáKJ..u 9˜C(i&âŃYø{]õÉ— üSbáDÄa®* ¹ªÐ¸ž6çý²¯ö1Ô /-͇”´‰(¤á“ þò‰¾?"ŽÖHV¶n«VcRV+XÎ’è¶ ûl— %>”s#Gˆ8ëŸOØšÖ¸£²ƒiÇùÆg7C>¼G½ÍàU%ÖôOMiëÒ»´ÜžuÑ‚ Yöß ª_•¸:ßMyŸ0L79E=ì{~“öÃJØÖBwm_–Äz…:RþóFJç– ûáˆÞ?Á¸ŠÖ“ ðÔSÄÛëÉ{/Òþ˜‹²f𖣨¥Z«i E]¼’@€åÉóe®ý©ø””ª¾úšUGOÊ~ÄÍS¾”ð0é/É¥z?£Íà7¡ –…Îzh¦ÎÿZQû£Îëh"|ŠJ]¶At¿Vú9à«v²€˜Ä\<7Ìš{J«åá~Y’ôü¦Bfé—&†›bö‰¡8ÃT¹ËìÁÕUÍ"ÒØ¿$$Ršùb(‰!Ž–`cÓ‰OÁÃÙ ‹ ÍyÕ/`r;´Žª&šô5äIÅ9] Áæ~¢5‚˜‚ӷƇÜ /Ÿ•ÉÖ}ƒQRþ…´Ô©ñrž7ˆ¤m掷‘¯dYÞ,%³ïïè½v>Zn…ÙÔ2ÄáC7^—Oñ­¹å™ƒ‘u͈šGòy±çZ…ÌJOŽg ¦Š¢äzó†'1l^¯†ÂrE¸uîU;¬eÁx”³\ó÷Îôv 1S£ú¼}Çg2¾¦Ô¯j·éNjîA‹}·÷7ûŒÝç4· MP2ÔåU%ã¼+G^È+çˤõdmN9ÑDcñÄNäS áÁ¶Í‰ÁŒ¾9E _GûÝ7´Ÿ `â‚è?Ýó(#¿Ø&DD\y“’º\O³b©úHe¹]-üÜ.{ÇP¨cë>qÝHËÒjÖ©ïÖ×»ní/?¼ ¨a˜­q-ciSíï¯~Êz÷¼lÑ1‹W.š~Vú‹õ¢‘H§F(¬ÕM¿3Ûpâ²û"»õ86§N´+´SpcôÜÕ¨}3A•q·¤v¿·u™®yt¶x÷~õö•DY³š C34ϰ„EXea%ÏÐøEÇCœT¾Qš«äÀ!^zšÅñú‡ÂÓMœ;ÒõQ}§ORý®Ïk‹»¦oÅ6Y.Ø+yäŽfsäÙ9V~»Hyù‘íÅ®F°˜]m§o² ;o¸}šZ< ” ÓÅ9iÊh÷Átv9tSêÃNÕ·¦£¢µ’ö§h÷•ùSæ>ô<…43«ÈÃuŸlÿ0!>öùÃÛQd‰>á¾~ †Y0ƒ9£mê¥ÇuÁÝ\;?xöÜXkŸ£Ó¤à»‘o{/‚ÁÚjÉúŽ8÷LMŸFË;“˜vÜߨªÿaÃÌ»åê½dTjÛ$ÉÑ0>%ê#V–€QÀ-™zütA }{ÌO@Að×^jg;o\·ÚÇÙ ÿ“iYþ\`a]²ŒC ¾ZϹǷBŸ£ 2  ›èÁcºÒÌ•8yŠ¿Ç«úóCÂc7‹Üôn:¡Û«ÁîFw‰Ùº¹nG£4û6 ¶˜˜Þ,lý“ö µÖly¥›*õ^ÚÜ3A·µ¼_#|”–¿â–Ì+§œjªo@=|ÒAe¨m(Ì i¦•¤°ª›yìÜ!µð[B‡$|Ð|ú¥%€»ý9Ùp]òñuÿ½7°ÙÞòçV}ÅdB+Â@ƒt-·í‡‰£¨µbwÌ5äR­ågÊdò’Š;™âÏ>޼ánðXbKk½¦ Åv¸°”«M–[¬‘ã1bDN˜Ï½«Çr1r'.o…w¢A]”—1V«æ¬aÕÍ?¢w[ÏŒúÌDvî}¡f¦‰¿ÇÉQe5¾¶ËË;­Î~6õyñF³AÑwƒ6–t)R­â¡¯ƒ-Ã~®mxôÌ0äùRú  ¿MÏ£`%Mçx4Щïæk±}z¤½Rê¶[s“ÌÓ/È1烈ÿ·¨Ïþ:s7…å)ïzü€`齨C²; u ö¸9!Š} ‡CïB9ÖxZè,ŸèŒÏ8Ý ~¿Ü~,®Ð’äÂ*púÈŸM¹åþÚe¤ˆ$&¨üHÌHÍE]W¬å€­¿ès¦o¨·“ÓîH7dzÇ”jLa¸AéØR‚KÇAGëÓGIÃþ=Ó¿‚¤ô¥Šçf¥Ïäj§ÇgOñ¡ëÔÐð™C ùd¦rÜET倌7c\ËŒ“|7w ­gJLRkgÄ=öüV›7™ ®xÞí°5yJ‘9\IÃ@•fî†}ž€Nʆ’…¸eæ®uÔ˜±£Æù«~õ+zMÅGpÝ'ÛŠÎ^–Lƒ¯p­ Cw™|ÑDû^Š<%uÛWHHZ°%Aíãµ$Àÿ5•Ë endstream endobj 441 0 obj << /Length1 1438 /Length2 6716 /Length3 0 /Length 7705 /Filter /FlateDecode >> stream xÚtT”k×6Ý(Ý1( ! 5€”ÒÝH×0 0Ä C7HH)H§4 H "ÝÝÝ]Ò(*(ð¡žóžï¼ÿ¿Öÿ¯Yë™ç¾öµ÷½÷}_×ÃÆ¢¥Ë#m°‚* à(~^>1€¬º®‘€O—O€€M†r„þ°éC‘®0\ìd‘P0ê“£nyê8@ÅÍÀ/àãããðñ=ú›ˆ@ŠäÀî0k€:/@‡º°É"œ½0[;Ôí6¿8 œþGDþNH;A‘0P£ì N·;BÀŽ]Eyý«‡„ å,zxxð‚\yH[)·Ê u…"ݡր_4ÀNÐ?“ñ°ôì`®p]„ ÊŒ„nG w½Ípƒ[C‘€ÛͺÊjMg(üYíá!௳ðóòÿ§Ü_Ù¿ Áà¿“ÁÂÉ ÷‚Ám60G(@SAå‰zíÁŽ®ˆÛ|°;涺%üî PÖ€oük…Ã\Ü ÊrQn!‚0[( â{$,,$ €º ž;à¯òz^ÎÐßAþ_ðí~>Îg€ÍíP?˜ ôöÀÇì nP?Ÿÿø÷Š€Ÿ` ƒ VP[œàŸê·0ÔæÏúöò‘0O€ ß­öø|¿~ÿy3»•—5îèõý÷ýeTÕ•õ¸ÿLüŸ˜Œ ÂàÃÃð<ñøn"¢¿—ÑÃþjƒïŸ\e¸ ðèO··ÇôwÇî €ã/spþ]Kq«Z(€ã‘›òø ·þÿo©ÿNù¿)üW•ÿ—Èÿ»!7GÇßaŽßñÿ# v‚9zýE¸­êÖêˆ[Àÿ›jýcZu¨5ÌÍé¿£Ê(ð­¤á¶·bæáâåúƒÃ\`žPk- b÷G2𧿬æƒCµ®°_ß–Û,>¾ÿŠÝú âpûýp½ÕåïôÖ>ÿÞWAXÿò™HF"Á^|·r>ü·†´†zþV2È G nS·3úlH‚_×*‚]og†¹:Üނݯàoœ_€´ÛÚÞÇ?˜Àߘµ•ã`>Ð wsý ü«9ˆykÒߺíüïõï/ê …ÌM# âÏ쫞5~¯¦÷àÙÂYYk~þÒ¨+„bŸyíc§†›¦8î"ci]F3¬5û&llÚ—žëèû°§i[FÐr’R6 M¾kCæ„'§ïâs›-”ÉAg;"’ü|ƒô8N›ñ®¥ –ɃWÓ?CEÚwÞmç_5»î?Ú8 ¿’°$Ñ£b¤³š÷1¢ŒXX×PýF¦$±dH“7=å§#WQ°Øo2Ñ´^&±©ýKK½Ý]É‚g¹ªåÂeaä´Þ*,Yñ=´”q*u®hì2 ¯²o_Þ£-p c_Ætªšäg``í¤ås1ØHÃ"Ð㑚wUFjÇØ{%X~z{á¼f“ºÓˆÔKÔc€{E`e=¯¢þ¸æíæÓçŠ5[+3‰îÃû`#ÖÌHÝžšÃvÙìeÃ(—¥;š—‘«;m©/$aÃfÌÚï@rcÆóº jUD¾ÚÂKÐèü)»ÏÛ¦²´/ÈÈhdï9žnϤ)žîï MËxHpö ұˠÉ©[\*©ŸE t¿á†¯YÍ;g­[ÕÊ’¶db˜#…6kö†û_E+Vè®ò-š^›?ž)ÐÓåªeø#€¸aâôR"¼Û‡2VÍ:Ñ•>Ë[oåÑ«u):ykQcõ/cp=>œÑG(ŽIÐݯÝËšL¤ Í6Ù{7y»¬Ž1=¤RÆI,¨žÏ£òþTî¹vn•ÂóCCéõ+ªþc2pÑcRY®‚(’¥´ŸÓÅ0Œšéć×>U¸¥œ¥ß<.âØÏó"#ûP½2qdu>ÍtíZDŽD0ëÊ^ Ø?PNtUÈ0uÇâD®ª4nÐëœßåTê«þ~îN¤OyÜŠÙ.>ƒÏû²ÐþFUn‹èóTÒöºÞH)>”?]ø ‘ñ«¬š²F©Š~vÉÉ»CwÉé†ÌAW ¯®“‰ô´g} §¦ù:×îáJYhêˆW\7Û]«Ü‹zµï£V@iÔ)(okÓÅ龦˜Š=ÎR|fx'äÜxt8 vþ «R£–{ω¾ í.X¤gdMR›ŒY¨l°ð´Ý„™«Mù.[à‹È@š‚øsV:8]ÄÒLwMá¿c4 È©F­TµZÞ,Øô3Ik.ÆYJ{Òc xO 8µ- ¿^|æé§±XÙ“µ??˜q7Ù1; å=»‡qq Ár‡|`]¾Ÿz“>},ž&e¼l:/ò!Jö\=_i"º@{KPôŒô GaLJø äPgp.ìl7›fLkãí}ö8RµŸžbŽö’5Âè¢VŒt9ë$iI8ÊÞÂ;;âýÌosÚòíã3âÌx Ò BÞ=¾"ñ“;¦²=ë5–ÔONJ,\z»!R' õñ5ùÈí¸ô®jŽi¯/¾7}†ó*/¥Z $Ô9/´ËMˆñ©˜žKv†© üyS¿ä|w,MÓ!T…Vœ¤j qd÷ì=ýè„ý²~ŠëŽž‹*°ómŒ8á V)GE˜¨ º°„ðYgj»sÖÅU“X5Võ¾ü\%v»?¬ëQ}&{k6̘XŸ^^}¤Aì!]7ö› \yˆÚªýzšÕøksß Øc›±=¶–2þ‰Íï+FNäò©˜ãhO®ß©½—ëGt†áþ¸qåpÔŽ ØÄõ¬3´ϯ*09S !Ÿñó/è“T‰ÎE:e®´ò.›øI|Û¹"žoˆ‘ÃáR[ñ×ÏwÍÎnT¾®è‹‰.÷ \îÏ þ:+w÷yßaö×lÔ7ú›Í ž·û x¡{-ƒ,Ó†„åHì1%~jwÂcç<ŠUi&Òõ b®98,]úÈP²šU=Œ58R–¬_ÿI%iËåaHìÓ2ãŽgK&é*SMÚª´øÑY\jÉ¢åë¡Õy´Oøb*’z)\Ï/ØâúöV(TZê­m9'’¿HHÉOo˜‰é?)»É<ȔٷçiÕebô¿¤/ ŽðÉšœ êÞsÿa{YêÀšÙKVÃÅ–Ä} ›°öKKþÐõn&;žÔýí4õACá2ùAÒ8¥/ ¼=v÷w^WþcŽñt•:ˆ´Œ‹uW”£Ç¤#±”(9Ã}¼ŽmV¥Ñ,ÞÙ«}”ò®!ž!}¢øÍøîëà”Ý´‰Ø@½%*ò2×l¬Gv†ÌWúàûë?À0’™֗׉ԘlP—Öû\ŒÓ,×KB%hº©[÷JÉ=uÕÏ ¬éó¾·qGÌ4ÞIø`MÇÇLW×§‘™·ÓömÆ9ß>D3¦=À|o¥ø¼'*„¸ô1 ¤^{©pÈ0oͼ›^]ªÀ2òdå˜×ϯ8ÒEžêî}b©—U~Ø`•véíÚ¬úµ[XΩE}ÝÀÐH•ÁíQÍ)¼JbL2Dñøé³î Ö©yåÏÛNMæ]`6MP -M ·M¢æ7>ûœöOÑ¡ ZKt¼ —˃Q£L-Â* nüCZ€o²#ã cîd¦€9²qõæ5ð@Rr_Ô¾[S¸¥iˆ„b‰ù³õ¼ðº–ÄÓN­.s²¢ï*O%¯ó"¨ãü3Ùä‰ãÄ~ I“=Á(Üaca?È+O M´Ížv¼Ü³ù©®“γ÷2íÑWE±}·£ ®˜«M¦jCìwe’ÒF.RW¦â2ys]ƒ$5/‰¹F´\wľ}ÂoKªk.ñrx¹óÚв«;9Ò±±*ŸÓ'ÙÅÊÍú‘~ƒk+L8NµÖÊi4,%<ʲoH¼iæ«ßïôÛªÔ‹ßT@òîËÝÒ’vç¸Qº’'_¦i¶ea’òÌÎúÌ E6ÙJƒ´–ŽÑ;§$zoà5Ÿ¹\ˆ„ÔØãýòSAúƒ€+V þn¾ô-Elt&Ê/æûÆ“I7kм^º}kŒÿôôkÁ¤¬‚\ÁVøˆ#ºo„†7~–ÚôS”=OuÇ´G‹Ôަå½]÷œ/$³ cÈ76ë½¼Y^Oä Iu0ì"¾:èA¥‡LyŽŽŸ’ÅRãôQÒ¸‘Ê §X%VÕ¯1;¶Ò€¿¡c‡;¤-'nYM&dd©2‹æc¼Ü /vÜšè5,%aþ¬8 Þ¹Q—@o1‡zž¯4•ÄTÂR6åM]PV¨pÃM±Cc`ܦó™ðlnš$Ržÿ1ª¯ýÓ ß¹…Îó»B™è\$Ü׌ÚáÒÚGŸøè0}’bèßÖš)S®/”ìLE-gpá'tY`é¬<Ï3bèÑõ­‡ LX4Ú$b–†#Mhu•ø÷¹‡Çðõ]ËK;ó[¿•íRi»¼ Î!“ÜãÅ— >ãºÕà/"«®8…”è>üU éˆùx"‹8g´îšlï3üÔvŸNŠ;5ˆÊ²^‘¯w8Lʦ,1•ªÜ0TîíªÙ2¬j i^©2¨n̤Å_·eà–ˆ÷ë|¼aï[ˆ'¾ž¡éÍÌÐZcž`×Õ½Þ•Z7$8ÛÀ*œ"©àoûØ‚Rôë¥Ï—s7»YO¶q¡¸ußÀ\&™¥íð/8kÒ°6ûlÚ¢&]—‘7µC"Dµ‘¶ûz>ã hgÿ(EŠÉò3ÍAü3Ú‚]šxCÚ÷ïÕÏWV~àÄÉk棗’ÆW†/Gk-`¿* ŽRB·bœ:9/ÿ8A~8Ij—V¿¾ß±2ŠQ>ª‹®k×¾–’W_ pjpᑃ0ç‰oUÏ×n|y«>…ÅØøÚÐ⊤Jy¬ª@Ó9­Ôš.&“Ùgëž}Tü#Ïì“1Ë2åì¼8Àý*àu)VEj”­–®Õ8Æ(ÛBa—'#¾kMòºK½RBÙ9fTŽxˆ}‚ûMŸÏÑ·ƒŸ…]žpn%M’c슕+ƒ¡Â›È3ÍA1Eªc¯h©w.¥ØKË'è„p°Ç9š±e>_Fš×!tÆ¿.šý+d–ˆªÎv1ÙðÕkCV}bkCfÑhž•N쀞@=ê¢_06~KŸÓôýP%¾ÔœÔڶꥰpð‰ÿä-ñ‰p†þÌ®ÐÐ>xßÑÎãžzíz]»9%cfj¿yÏç3'(†ÒëÖŒ]tpèìǧ÷FXŒg{:žIñPIÒã¾Vî#WÙæÑ‘æÒzRÇâÖòü¤ö³¡cÚË ú*ïýÕ«÷‹Ð”–—ïÄ ~ K3®Ã«%¾SÈáw‰©IºQÉáo+¯œó5'VýÜ“eîÎØôžïiÙ-™9 ˆžïàsßС3±¬¯aŠþùm¾‹3†»AÌ÷òÅ8CP ¯ŠÞ5Ök“¿ÈßÀW7+ç¹Q/ÌroΩÐác¯(on õV$ˆ#ßÖï¥úøÜ$•>OU9×÷ kŠáJ“O‘æ#Ä3$›hÀ9/jêÎ8â…zñ•° £b8Ð|žÞr¨–AîÙ›}îÞöceÏðËÙWñÏ›£94WX1c¥Ã U„ôvŒÒßÞcçea4òùê‚ ³o*“¿do¡[¿SúQ ±¯\Jß(§žñH«îaÊó}ù¦àýRµmÕ †|ù61sA©i†DLjSð3à}J}')ÆKÂø]ýŽšlyö|R,Óõ“÷ÛÝB&N4*o‹ôPšmRÅMÕb?½âÕHaŸ Êïé–n<µÏÖÂÔ5ŠOw®!¯Ó(Îèm ª7ÈUã%˜®IN›ro>=í,ÓD2înñDò|?ÎEdAºÙ^`ê<ÑÒ& iܺJ}¯ƒ…¯~!œß4Ç4éJR=iŽÅñ¸mý½­ ŒÜ#ìøgyì8ð½îöùʦ v&ÞÙ Iñ;‚Rÿí¸óÙ¾«u‰ {äÇþD½ZÊø÷gJAa”\s9±[x@"àU·d;°Îž_ÊŸGÎvŒcà9ÍÀ y%ôÄÝ•ˆ‰Šu*)?ž™{¾ôMúla’·Ûô'O?Z¥âÐ)‘C+ &Èd÷sÅǹrü|­.ã*U‡Ÿæ˜_!ØÀ¥5™£:–Ë‹9ÊeH"ƒ`&ÍAö‘°z{ÙhMhÛ à;oZÞööË(ËsÙËìëvuíG´$õV~jìRùÁØ~ÑÇAž!æèÕAVàØ¾Y̱T¾}M%±¨:óh{•œ¶H¢‡1¸¤0ýà} 9Éé‹"fbôoíÊo}»†Ÿu’ÔõÍ<“éô½8 ÿø£ ½ äqÇ—Âòdè'•ÅznêÌ}Z‘˜`Ç—Æ9ê㟠æ«E¤…Úô^ie8Wdd©¿yªÓZ‘Ô‰hs»ÀÝ×Í¿•ØÒÃÕà1\<àugÈcÆæ>VQÕp瑟<å]«šáFVz³Ñ+Ì,Qæ>'³QžH&'54\W Q”^o䘛îfâ{‡ËÞ´yQ¢,þGf„„I6ZêÁb3ÎNÑŽ DFË"i þ| ç¡§­än›ÏÊ÷±÷ÙõfåýõjK9ίOç #ÈÔDZê]¶¬¯õ'çÝëÀï•~B  ÔeÕÝYãÙxšßØÁF°ÿƲÙz™§¢ï•lLAAº‡í:MïFª³Öéwu|1ÇAΈzù‘öSá㤘Åî"˜¶ºÜ7òYá”]-uè‚Ï|ý»s•;Ÿ«xf«,_yVêËý,eÇHµt>&dàþ ø|§³rÎ^“GTz®_© Ø¼‘Ù”Ørp]”É ºð£3/Ü´Ça“·âðœxÑ1ß°Z²á‹¼~abF2”rôC›=¼4ŠeœÛkøU–qÞtj‚LSeÐ ª·ªëÒ'ôÉ{ÅÂ<Ê&H¶DÅKâ·B0Ã#ÓÏýl°c9õf#áG7lþ*ˆ) Ã*¤^B]ä}à\X¯cBûá䈬 ë&𫨠_–_S§à §ç…Þ[Q¡rÌÒMÁ.=a’⢢»Ž_3&î jëY²¹Ë º-\¢ÙI;ê4IlÓ‡ºÚÆö´Âkð¯èñˆ²™dôK3Ú­ÚÇSݹ|¡{sb ¤HGÊlv&/HxÕÔ4ì…'’I%^Û ŽTÏv¸~ÚUWkÙo7ûlZÒ…¶ÈÉ~ñ° ·£þòXá,U*gH¿íã„´;Üÿñá)¡¦e;‚æ„cÐA°I <éØÂtð}Lòy°*VÁ ðHðI­ô¨o5†"÷²žLÔ^¦ÎöÉL± æô©ô†ÌÇö1ŸmWÇ{äçüßDÃýãtqÐÍ1²›—Úa¥ ÚéS´èé GI'1\°æNɽ:ŒEÑ®ªŠU6Iõ2z'Œ°V“¢¡3 ‘:¥ààÞD/N 4¡ ˜X‰{%¿Ä0BÉKÍP* 4ˆ.UëÛÌNW#ü&ûêþ˜]‡Ìg¼»]%Ö©È‘Yßï5>™h½z[ mÄ’@óaó~æc­¢'hÄ賬^ž‘Ò-3Ǫ³2Ñœ¡44JŠk‰aŒ}Å¢±Î'Þx-§Ã¥'çæHÖ“õ`D0©ñYMMÍ"üžr¯m×v:·–×^j5ÁÚÇYD&UZ Ý$ºÉ¤Cµuü¹WÎZÖp< F¡ë“’÷Њü£U¼¡¼ Üð€s›ˆJ6-mÒÒ…†W/XzŒП_ÓñÑuy/J[Ð’ð=>£Ýí£#0 •¾Ÿc=¹Siºi.•ëhŒÓý2‰WªƒÁ±w}Šu¸}DÆ‹ò;•`"P¾DãxÕIÙð&ôÄŸ¾ÑéY-¥øÈlÿßï-%7ÉK­w§öò¼y…ÕE“ß ?о.°UU¤°8â«f šF|ñ.4ùÉ%dæÙÎxÐùv½­NÐé´I8÷¹kŸS?”²ãæþVÊQÍÀ£€AKÃ%sKq9ÆMà þuÂѳøÒKïN"åj»‚|ÉåV•jBF‚¥Ï:?3Z3¶ ±©¹ké©Ð2ß±Å*tNëðñ.%ÀÁ—ëà^·­Š:ó©0:ó ¾!“º<>^Ú!"ìVM>Ѷ;w$*šíºyUÈ”iRÔÐFû|7›×ÜâGÉÀëZTRÀ¸j>¡(uóø[åõÑ€ÊàÆ¹!ô áXÒ8V´×Ù>¼Û“rÜû¨Ø½5‰ºrx;W¨×k¡¥ \=»ñ´så!¦N®Û*Ó}| šómÚ'>Éa»*£\¤‰oaR¬Û5Þ5?lÛèîò”lÕ}¢»mÖwqùêÅ]ƒK ;-çìä..`¢§±W&+òén4ä s`4¶¼äâžGúVAòlI)CǪ^c£%ç¹ Oö ˜•ø@kd!®’i'43Ôï`u*¯±WËŒi87IôO’â-—ÕÄ{ ïR˜vƒåèQÜ/lyë«ÍG$_‰Ü­1(™>n ­÷|»yw–R³¾üÓÞ–ë~ÕWeŸ%˜I‰'iÚNeWAÀèHR÷ÏÅRÃ,ÙçkCešÁËìÉm‰¢\=×°]bkꬉ5i‚¬Ç½‚QŒp‡ÖÅôï•줭ï¤Ó¥ÁÉËûÌÇŸ•ê4)$O4£ï¡˜œ3ܵßrAßÉýP¯~§¬ò`£#ËdËÎ¥®n E¶bóâ¡4cØy ÷\Sxã«N=áâÛ>KëØŒ©Ñïm>/ C’Œîë²þ¥®ž;‚e¸Ï²¥u…w ÏRxƶSº¼Â‰~JèëŸÉ„/2’ÈËdi¥£3Â8r²{Û[¤•ü§@“Vqç´ðb—²©¬oƒ§&sœ>XY“÷tÙ?8ðVúè3x´dØ`wS2N:•mnG]‘Ôà¾ËóæÁ®ÍL%ª0ÇÝ0Y„LÏÅŒÚx9Í4ç³Îý3¼6drý6EùW–1!æY¢NÛóçdmY4oî@É0­*̸ŸLê1°ð ˆæðŸ+ÀÔÙ,¬M¾Ã'­™EBÙ:ÌSƒU}ŸJTL ¿•«)nõ© 7GÙ\¼o¶lÍÞÈý¹ûE@O¶{QK\Æ©ä­b[À!¤Ván²Ýšt/xT›Q2³{ ¬Okkòåa=?ýäÿŽ@I=Üø„¬~ºzÂ.!ÍËŒaÉkV«XææHïIJAˆ~ÄI›²0j})_˜oã6$4ÎáTkb>s¤D˜(ã6ñÓèºd Z2Ç6Öv¢‘>|û,¤%v!· Œs£æI+áë1â^Dø¦œÒi_ž½Ù*±g€íˆPa”®Ï„‘=IëëN‡ˆ«f~ðJ-Áž¢âˆMåÖï(ÿ"ì<ÉâÛeýŒVÌÿ¦?ó# endstream endobj 443 0 obj << /Length1 1413 /Length2 6387 /Length3 0 /Length 7356 /Filter /FlateDecode >> stream xÚuTÓoÿ6RâPÝ£i” c0bƒmt7R¢„‚tŠH·H‡„„ -)Ýüg<Ïóÿ=ï{Îûž³}ïëÓ÷纾ccÒ}ħCYÁUQH,Ÿ H@ ¨¤ýÈT( °± °ð¿0€ÍŽÆ PH©ÿå „†C°8L‚Åùi£@   0PPLJP\J@($ ù/GZ ¨ qEÀ€Ú   ÇØ”PNh„-Wæ_@N(PPRRœ÷w8PÁŽF@!H 6k wÄU„B€PPëñœ2¶X¬“?¿››âˆ¡Ð6²\¼@7Ö¨ÇÀÑ®pð×ÀÀ‡GøŸÉ@6 -󄲯ºAÐp p@@áH . ƒ£¸âÀGêZ@'8ò³Ö^àß» ‚ÿîoô¯Däï`Šrt‚ =H 5ÂÔQÕaݱ¼@öËâ€Aáâ!®„Ä çð»sPUAÁ øw< pÂb@„ïù¥Áݲ ¦„rt„#±À¯þ”h8wíü6kD¹!½þ¬H˜õ¯!`.Nü†H„³ \]ù¯ ü³c¢’bb"’@¸3îµåÿ•ÞÀà þÛ(ø ÆMàãå„rZㆀû ¬á¸€â bÑ.p¯ÿmøç („! X Üü';†[ÿ9ã–F¸Á8î ~}þýd£ …tðøûïýò›iªiéòü™øß6EE”;ЋOXÈ')* ”Š‹K}þ™F‚øÛ†ÀbÕ‘Ö( äŸnq×ô¯Ž]ÿ€ó¯8¸€ÿÌõ…c-Èù’› ˆ @q_‚ÿßTÿòcø¯,ÿ/’ÿwCª.¿Íœ¿íÿ‡âˆpðøë€#­ 'mNÈÿv5†ÿ­6†pqüo«:‚‚ÒGf>A€ÈQE¸Ãaº,Ôöeþà†¿¤æ€@ÂuQįw .J@à¿l8}Aíqï Ž—¿Mpœ|þYW EÁ~éLHT A£!„pûöÄ wÿÍd ?‰ÂâB€¸}€Ö(4à×Z…€ü¸pgÜp¦ß(tD ]0ÿ„D€üîª èߨ?z€º Ñ8-þ¦ ®Á w‡C£(¨t°]ypÝQ©ƒßb/ñ·¹†ˆXÓöpQ,ûØk/[­«©†œŸÀŠnw'뎿 õfàÞ<ês7oN˜IR{…ÅSiŸWÜæËì:Þm¶ßƒ¡èmúÅ“#æ)¶âôî’?‚9žž…ˆ·//åœ7`–Í$×€ŽÀ·7™’°Ï2Öð#M™Xç°ŸMÍoFS¢Á/\ Ô ûÏñ#чŠuQtÇóàè”ÏÓÓŸÒ;Ú“…w²4[KÄŠB©ènyj0etÇwÒQÇ¥kTcðØE”Þ%Æ2Ó½q eŸ!€´·N€%kšV±ºô«Ï¶âöT«U™åÀ ãC|0«íöòikö”‚uá™Ðø“é-UÎ*âEy@ƒX´w—ˆvNtÝµÑ8ÙN%r²Lzé¯=5îµÍvúõ 6°py>¿|©‚®¢©è´ˆ;ž ­‡®îeûÄä¥T¡‘rú&pƒÐ’, v†Ú/±ä‰F»²:âÒûf ‡{îUIFaZ2NÎŽwö¡nQ+­p=Bæï­']Âk“ŒxKÑ„:>¢H–Gþæ-‚4ÑÛï”íºéƒr ›ã;VêÙ_/öväšßªq¶K{]ýf?Ö½Ù}=é~ÿÜ0³Y%WV¢èE2ͽ¯u>­´–½³‰|~r?<Zǯ?ßA{–¬m9_yÌÏ”!«;â™yEÞûØr!o9ûUˆwÕðƒ?Qk™‡ŸM‹enC§"qúC¬ç3üò¸ÜƒœA ç÷à,µÛ^6QFöÍŸ…~O‰mc…Úee$6ùñ‹„ö‡>T{½«Ô]ö­ë1cÅá*CEèbî&è³aa2w8„% K=q!íK¦ðÿLOâ¤&ÇêT±¯§ëß&ÌhsCg¯ÇêÞ“KÕ¾Lm¼*òE©ÍˆÑOé›™_´È}ÛN]” å èÿ*é5‘ü ðy›ãHê‚wma¸øê'gˆ— ><`i{¨-zˆ|€V²ä¾=§{ë½ ¦KÒÞ Z®5z0ßq…20Kã+E™ŒÛrÀO¤d:·¶?†,sãöí6 ì*&› SÏåØë¥†OþsßLʉ—LyËNËÁÚùÄ¢†½.¼x²ˆÖ+`›CyÛQ8ȼf§yŒ§—«/†¾n6õ”嬳{ͳãÄ uI&ŒÛƒÆBq<ó½ûi·@žÉ½:gV³†Þ#Æ èÉdn^eNÌÜ;×kjþ©‚Ü1øÍ±èÅó°™`ŽÀ9Ëz±Ñ~ãî¾ÆDÊ 2sSÇŸ¦úro@¿á|i ,#0Tiž’)Ì¿!ò7êiORLt?$ ê"ÔV¼sºCïQŠJù •ÒÇEÁ¬<”¦rdÙÙMmáÀ«M1VК{`ØïØ÷ø˜åû)<ؤ­±›:XX_˜ MÖ?`,)Þþà¸ÍS^Þa±öix»š½ðF”½î†óùåXÜêòXñÁ©ÀÛÃñÁ2ÓŸ¯(Y;Æ»&‹3v”idÝ&ôÏ:ýÍ 3n-J´Í7ëbò&¥¸Ž¢˜_«ˆõб|pkɳ©ó=Ê`õ™;SÇ0ä‘9¶K4i·±sÅϵq^\7Ý&r“ÿÞÚ l n3L訩¿ÆÚ¸|@kM©p50fïÖÒ¯|4©~2÷”ÚGÜ•¬0ÓÈJà–+w{³4‚Fá ›õä]a4E‘N q•ü2Tv(VEèÆä¨zšÅ{ý…ÎFžO±­Z/¬¥®e b®1è4ˆ"ŒZÓ]ç·¬eÌÈNRUáéj¡tz7oÛIš·¸9½z5Mñjà`áÀîrg ’²¥š ¼7ÏLÊ¥ßÊ*Ø”1/2ñª8äMq²T‹‰ËùÐBAéRÓÏ*Uæ;“µÌ4o8„ù~8!6òñ¦ \ðþ¬°dH ïåœ'”tÕ½Ç.äsçéŽ:Í]ÍóLEŽI·AôaOªÑ ê‰K{·bÀ§›ù»Zv_8W6=ð‰­¨áÅIº-ƒŽœ[åµÉÒðº—X‰ô%&CÖ°ÕðfJ‰Æû4M*g'Zoë(Ô/¡ã2P+pt-{œü3vF°ã}D%¥ü–ÕØõ2 où!TÌϊ+ö™2Öäø7)™Âñ};œ}YòLÚù\¼¬y6„ýöj ñ“·Áއ2©”üÉ‘Ř è…£2c‡Noüi éƒ' ¨U}?¦}š]Œo|rkY @s ]Òÿä2½¨0TÃtš|³ð[œ˜.ÅÚÄA/µ6Kq¦}Šo¿q3º²±‰êÈÆ…ÆEIÖÚ_¼iÀ9 «òâ$¶°f{5šfFxºP Å樹5ßlõ,æþÊ•G²ùNã*ó9OïQˆÄ©{Ì –~ù}y[­Wlú̦èì­ÁIÎ=Ÿ…Á0žx‡Ù;¨È7ñ±2ß#«ëñÔg³'ï§è¡úúÂÞyÃòTNZÖ9¢æ¹ã -lžtûÈ¿Ö ŠñÏ7ºJšX”'a{Ž/ÜX¨-çSžÏ:êÅ/›Ðä¸ÁôcôÉŽã±vr˜ùru¶j5ø=óEõƒ}Û±ù†ðز =ÿÌh2ÊBê‹)ÏÙ³î÷}Ájñ©9`d ñóZãŠNÂÉ¢l_Œh(E¾Ôð¤®LÛžªç Ïk›ÝoavK6zxJxUNH³É0óoyž¥–(üþjÑAÆﴃEƒ2÷Èô-³ qxç݈Ý"2ÍÇU Ÿ½’ÙWÁ*ûi –¶ø¼gêðì(vJ&$-kÀù®‘¬…ÛvÃUKæ¢yöÖ,eϬ§ãù£ç¬!0(k¼ã›Ÿ@!䇩Â}çðw&$âšárs\–Þ:‡œ "BŒcH{I§Ÿ*å÷u³üU¢<ËébšÆ–áb®ùÛ ˜ïKô£Iü­5Ÿr_T2è»w…èÚËo*Kù~Ñ$ºó(–¡ Ÿˆ‰!×#ËTôìbÕ çìóÀði²Í<òÓ`®úteÿ›ŠÁ†ÌV·ëé}ÅWÈñ=t®3?tIW†äãLÊÜaº‹\ðt×.—.õE÷Ê[«´ÅõȹðEÚ»o¢‡ö¯0|koÏߣ1Pt^ 0úâ¢tʃûš:'ÅlÚæV3+u_ÛxS«à+×™\\ 0I^ùT˜CƤÈâ S“Žæw<–üñ²m(l•“ûت*Tñ⟠1á¸[u+ýzÃq°lJÎØ‰þò‚ ¹ÛPÝ+of×N<ýsƒ~ÀÅe2•ãEíUZիɯjzkJÔÎFÓ*žQ*+OU´Ë}x‘[ùÚ••±vž vœ;¾ðMmÈt€ÞÜS÷2„¨Šç¬N< |9;©K¿UfÒ¾þý›ðå©pYæ3JƒQÈKd)k”‡!ÛgéAò˜¥·×C›Ñ¡à“ÚêCª;iY'箦ŠwM¤G×Úe¸¶Û“J…ÌOvçà߸¤y*¥gþÉ{’l>ü«apIO–âŠ7Yè¬FxÖ¼ŠzgƦ† dÂÕHAɶƿ»´¨|ãœO¿ѵÊÙö$—ÌÇublx¯Í×Ôh:µwÓ󕾿†8fK8f—_IJB6½†Ë ýöÜú·LÕ2KgC*ãg’2c…YDkµ‚Q·ì YŒ£û¡T Ôõò:q¬øèWÄSe/K»øXœ¶:zÖ‹“5òo)—U˜H*NyÆ/EL_|íçà1·”»2mµJvhG—Pëàæ•øN·ŸÊU噞Dðξ/ßÁ›MÆÜrpAz“²½ ‡}D«£5ké:~ óŸöÅåÙçë…%@/ØU:’Jë|Í.üùƒ¬ÖkÊ6äŠb#î÷«˜Ï2ããÇý{¼%%DŒ>¶îh<‹È‰u&g q9>­Þ,¤qÖýQ;) œ=o±9âàn§»Ú˜õæäiðù9ÆXÄ2Èð³Ôؾ[) ~Ч¡­¥Iks ô¾äš„ñ‰ÁûtV¡·^‚¹å_¬rÍúTºZz¥Þ&d··4f¼¬~t_&—…ÃMCÖÒCɼšÙtŒTçCcWœöyQ4H±ðnÙ†Û7}ˆ ¨-w(œŒÞŸÞ¹ ì¼Ýùé‘Ê@÷tÉæG¨bÒPÑTö=®+IÄšGâ‘1’ê|UÜgm¬Yï¢. ý´X{–Ÿ{7ÙvEµa·ú&Ob$ Å ÉF«Ò|—E#‰Ç|Ë–e«›:j¥óô±ÙÀý–ò̾‡¯ÑË#íóaÙoTwäÚÎDðÇ2¤l~’ÅÊFPlÞ/½H]wœÍbÌîéŽß, éòã+§ƒÍ”²WkBÒÛÀí:l¢+¡¶}¡£=ú<R ²I‹Ã˜Hn˜Jþlxà§Êxa þt%›/ú9{ìQaÜt|äñ"¶yïyÝWV±_Ͷ"ë%M#c»‚×µún`ØG‡›ªÏ¤ÃGYÜ¡k2e å¸&¾ÿ‰²ÉÕIçªÞ!3ÀâQðµo£Óbå¹bQO²´jÄ9âüAiÃÇÇÆ_žf‰X²®ÍÜ~Ç\¶‘V¤X§¨Ï4 %£}A \žxàÜyèšD{ÕbÄ·¢í¹w$ ©Ñ¢“X)¢}4‹/yêÞÈ;ý>;ð—Ûöö¾Ô…L üÌD«#ñGWÃH£¢Î÷"^nw±]Ù¡(5<Ö&^ØPãVŽ#ùž»÷$FîÉBŒ±ã˜dâü4äSå_Ç¢Vwê¸ëé]BD9œ]ªö2ѨwïÂï˜Û~÷ó /ˆ‰Ça<]ðÓ„â7ðO^ Ó»<…Ëz‚™ÌŸ?y1/ao ô6ÞÝÒ÷ ¨­®"ó`ý0 *…†±®$FÌ«g²}:{9šgw®Ð•j¸XËšÍ$Ïë£Ï@^ìÕ8MíÅkߢÕ*T[¹¥q`¤m,DDvEcA!ÆÚû®Ô[õ6JEêîÛãDZ1D™tÊCÓ¼Œæ¾ É1å×%à6*º$è{Ö¦;D<ÜÇ»ì£@_·n’Ç -³¦’+Cêü™CÊ4ùÔéëuáÁ23€ ±´ª¢ŒÄÉÛÌ¥°’~‹ãÙnï1=ÌF5—*Á'e!S‡gÊÍâf5-ÕÄu—’Â×y•üYù|³ÂOÓ Šý[ª½•=,cβBŸ ͧ ’9RG3d—°™ü’œhZÎvƶäÝ„ ­ ¡÷FšÜ)Lú ˪® ´j/ÝÚ&¨¿ù|„ÜÚHýŒú²¥ùâ³míïI͈–Á©ØUË^¥]{œËðÎ+l"ÁçíÕwrŽYp¬‘а[{£Ö‹Hqá ˜V£¦=‡Kìî(þwjן5b$y{'ZW* ì%}å˜}êØJÅWJ$ "xtƒGÙã>÷OïκÐ].žßË£8îa±YNŸ¤eoty‰É3UDŽǴø=Es>Údá‡Ü#Vš/š|ÏØßu_¢ùJ©ÎãðdS÷ aWZÑÖ\Ò½…pþ³UÙž¼öbA±Ôš1Ëz¸§~³J6ײ£ÐõOøÍ ’Ð2Ò}^"ïœY.’¥æ>+£–•?ÔµÚ\¬KµÄ{€²Ddy£Tí_|Òð<«6ë´¶ï_<ÝtK õ×ÞZ½j¥P·[•KŒ—r]>ȤžåUVYÞtÚ!üH×xv|_ÒÈ®eú&xVeï΋ òb?ˆD“éIëógƒ×ßÞ–¸EXí§!óÓ«åäv‡pæ½YƒsfÑõ`èÍñm…TÖ7Œ«Ú®bt=²âs›­¦)²‡m¸ÈïÄkö¥Ô—-ô¢Š¥9‚1CÌÙ,¥ÅöÛî2ï_WMŽé<þú…{Úõ=¬rcéófogÎjÀ÷ÎÍ:nVAq‚‡>*OŽñäYÅF†?¿ÿ¾ô­*m¶(¥¯BQtÏ&Xå£þA7”ÄÝûS–Í1Ö±¼eµ¦½Sßpʰ©ªÉ¤Eò¶äz$SÔLñùmküý²ú®°qÔ*2VÍiØ5E|§¨è·UqXª†éÁ˜‹ÎGcP2ÙUº™YŠŽÒ4¢cHñê›&G5ÞôI¨¶éùû“=è[å›ÔzWîî×síøWõûqLé>' 8VTÓ¢ñ9í1W 'w)ØŽ%‘‘6ÙæK;óä‚…{•’= ärwÿšenå¥öˆ .fàן.8¶w×L–”y3ÑU ó²ÊEé¹ 5ÅwN›(Ý=ÊZÞ!ݹ/fà¸Øãd5œ¬­˜éRê½£QdWólxeçJcFñ2Ù ¸ä¸Ôe·àޝåPÓ2ùÓÖùáÎ¥yàcÿ|åÅ•‚¥·§ƒ‚sˆÔx ñ®}‡ƒNÎÆ{¤æõý)·³<§†DÊöéLUã +F¯Ô¥**ˆ6´¾—±L¡»üÃÄBJO7Ò¤ù’Òˆä.™·wÓ”°4; A€(U6»ßç¨Ô.C¿dw<Ýj]rNÆÉ õ€Ûãx»å¹U?æìêVu¶ÅüJ¾zÅÒOêÈHerº}G´M€¿s|lÛ¢0{O0þš<}bÕŸÚÔÄ-%÷Œ„»½¹IÑsè!oŠ«úuÕ÷ŸºÌoIC2- Þ³ãßÉçtˆÁ9²€Ù»±ö)éÖçÓ9LÁ®+BîÇ/«¶×ˆFÑTqK$ÞÆ++`šìð¦!:«„ ZÙ7…S_ú*× m+žœ®±tƺ>šÁOQ€xÀ4QPd •M@V<ååÙ|¯»)ëìTW—eã×8F3S º“ùåkà´ž4J²<‰‡ø.ý7ÉñÓ¿¼Ü…ÑŒÐzÙàà9K˵€Åg Ó' Bdi©šõœ°«:yÏÒ}‡7òªÌ*W9F©7JW‚¢]ÛFÉoäÈ—l¸Ú?m“8‘Z}(€¿n¾¶dÓ˲–áËÖ2^cÝ"G£*×FÞSØ©eiËÛj z¼=gDGEj¯¸:¶Ãk½wš5濸ÈPBC,W¾è÷jnŸ¤:¿ Þ‹Ð2xRF ûæÆþq¢ÛuØoPÖÊžcjÅ_õËÜg¸ |ŸkĹ݃kOl’®Fƒ¥žúßöï/:êJÍœâa%Z¯˜á¿~‡ º«&Ù·¢‡OIg–6#H¼–·‹/pÚösϲ8ÎRgnñä›nïÙæÙ³¡a³gï>®/¯ó‘|®–êlË7wœÉtõ„ýlË2.ó´üž§(ÀhW4óA`QÅ©h ìËðòÒôqpUÙû'qb&eaâÌ^±¶_gKŸC¹”z ¥;G Ñ^W ŒK´BžœBº,G™ÞÞU½/ “Cg™oÑ7¨ÕŒ(p[½7¡”⎸4:^jéòk‰»¤éI`t¹Š½Z Jì–”æö¹¾N".<…ýÑwOÐ endstream endobj 445 0 obj << /Length1 1401 /Length2 6215 /Length3 0 /Length 7171 /Filter /FlateDecode >> stream xÚtT”ïö.)HHI×PJ Ý”¤t3Ì 00ÌÀÌÐ!ˆ -Jw‡„J‡H«¨(Ý!Ý ŒsÎÿwî]ëÞ5k}ó½Ï~ö~÷~ßçù¸Øô ù• H{¨áJTt Í¥@ ˆ(LÄÅeÃÀ¡a".( C"¤ÿAa®1Uæš§ƒD´<à!€¸´„4¥þED¢¤ª O #ÐB" h".¤› æè„¹Þæ_¯0/@HJJ‚ïw:@ÉŠ‚A€ãu½Þ ‚ ‘`ãó<²NŒ›´  ———È-€D9Êóò¼`'ÀC(Šò„B¿è‚\¡& â9ÁÐpC¤Æ „‚®8 E ¯3<( p½9ÀPS çEü!kÿ!ðþž @H@èßåþfÿ*CüNÁHW7†p8ÀàP€žš¶ÆÃ! ¿ˆ 8yòÁà ûkÂïÎA5%èzÀ¿ã¡Á(˜-€†Á(ø«Ìõ)ßG@T®®PMô«?U ¾>vÁ?7ë‚@z!üþ.`ˆÃ¯! n‚Ƙ»TSõ/å"úæÅÄ€Rââb@Ôõ; þ*oäãýú_Oàç†t8\ €9@¯ÿˆüÐ O(ƒò€øýïÀ?WDBB ŒØCa¢ÿT¿†¡Ö×—‚y,×Úýþýf}-/÷ùý÷ý jišéÞû3ñ¿cÊÊHo€¿°€_JL $$*ü³Œ>ö· àr5H€ÔŸn¯é_{þÏ_sðþYKy­Z(€ç?"·ŠÁסÿo©ÿNù¿)üW•ÿ—Èÿ»!58üw˜çwüÿƒ\apŸ¿„kÑz`®  ƒ¼¶â¿©¦Ð?¦ÕB`®ÿÕÄ€® „p¼3¿¨PôC«Á¼¡}ìôG2pã_VƒÃP}$öëÛrþWìÚ_`—ëïúZ—¿CÐkûüsßû0òËgÂbâ ò!^ËIXL à'tmHÔû·’‚$æ:p=cÀ‰"úu­B@a€ = †Â¡˜_±¿°È_øÏ%þÂÿ±/Ø…ºößoy\7õ¯õo³C¡ÞP0Ñ—OH°Ìçº'-'5JŒ^üKC7fæÚ"âÌ{ÃÅ0w&süœ´ 2ÔÇÝ•í •tƒ©úŸKÃÆ>ù3Þýq2ìmÕùðýû»ço{SEöòtW‹W†QÑßöÕbËL裧ޮՄƺ£,v¤RšÇN_èvg×Nbú|"ïí›ø>G]•`b½À÷õðÈLq¤bkn×D=·zRYŠghÏu“ñFœõU¿Êì€U4ê‚l1Á4žkw3];;†—/?F/èsW @Äá¬ÞøQö|ýŒ è¤ÒKºÅñpîtŽPWt§.¡5§¨bòQ´sS¤„vÑ+Ü„fÉ&çÏÅû?Îù»o §S‹ÝP^lŠçÙ]Ocðõ“²K.SÆ"b¿¡‹Ï_#DJólÄÚxf`x¢Ñg†»:ª«—‚zæK“öÈ¢¢qÙàQÝV½÷Jä{?DE\Ó’ýï}Óg/É%äü‡EÜÿÓPSvMÍ^…úL)¯:9Ž6S¼ààÇT·ÐºˆßPƒä´¬bf°}«OïÑËÞV‡™WÉïsC5Ñ)ÄÚnu¡Þ³p-Åöêf¿D ßS¬ü;¥2D^¾³tŽc>b}é£R»í0’_p«Bc".N—Ô}zÛ÷˜°hÚÛ‚sòÏ`ºÙn¶¾Ç‡ìÉÙõ†l™£iÛ%v%XwÒ£ø¼¨¼wçf0í{û{ì2e%ÓmŒ®2FM–¤ÌìrÜNÇ{@Ås R(½¬l¥|cwKEÕ…«aýNuœsô·Û±ýò.múþ4[5“ãO-?7ouŒ0PzÀewkt‰ŸÝ.ûVYe†gTëy9Ï/¹²Ol ‰(Ô[ƲdѰ °QßP ðã´#¤¼Q‘ g²^Ìä cã×ýBÛ…Y2vó§u𗪵âCCK-5óU—ìÉÁÇ®KÉ\RGrp]kß †å¾—mVYµ7Y豸œRz=žx_ýé©Ç}¾­ö M²¼6*{ç%$äV"7¹ûŽ‡Ä”í©¸‡¨[bÂØ*–þÁ^·Íp‘õÜIP¬ÀR®fæ†Þ3•W /t¢Z…‰úµy¬6¯·áž#âÊ´hB”ŠY÷K£š /Yu„f3KÁJKàĉƒì\ †K+z'•’J,±nB‚ ºÂ1œ³3í4!ÝÌÚLW"›~VcR|‹Ô²Šb’ó­õÆÉä·›¼"†ön>:W_LßE]'óä« ›,6×ÝEî—ÑgÅ&j vGÓµ}¥ª¾Äʸ Se)_³0¸ì~l³Î1e`t&ªlNŸ_õ¸ Vb‡×$VÇF‰ÓȗСãûÖk,…èK…ÃÍ’ îÏZ_ëøW`"Ÿ}^šÏ×”Û_äóg1g Â}Ÿ¶J×lEËÀc§ÜÌ5ëԤϧ½É[L,Ì19NUÅ&ç“Õ÷BÚájÈÇG•Ö-fݼK˜T«…Y»Wôñ#h}ÃK¤ª½¨3· ? (-â°”û|Šä~VMÞÐiµ÷ízÑeû™©c,óÔè»5ÓéXv² =Ÿ¹0WèæÄ2ñô5’s{}ˆõF^øÒ—%÷åÚôœ¨ÂÃ$«ãWl͆ 9?ƒ¦VšFExD»i”dx¡IÜÝh½-´kÖÜìb•/mö#Ÿã¤€ÂqBuh‡¤‹Z ¼'b/&÷çwñx7w™ ôÓN[æ”Úd‰n–KG[É ºý!ë™/AÆÎ‡‡k¯ß2˜®¡Èc4Iç÷ ƒ<ͧ/‚Åv}ƬJöffý7»©"V΋,FbOžªæ<,AÍmú´µ¾‹Ä™™a?<}FÔ`¬=ZcÎÐÛ¬£Á–[h™«6àêuËÖ_|Z"$¤J~óýÞc­•Õw[ff!ÆÄÊʬO^µé›Þæ«r6‘²bgÛ27É‹×÷)¿“TWK¼NÏgî£Îê(ÿ8_kƒWn˜VnZ¤d˜0HvgŒ§/g~©3©t8i¡š]“{ìì¶+eÖ•”<~·[„ãµ ´Æ™éû #¥Ø@®ÂØ™ø°LË±ÃÆûz¯Žˆ}Ã(þe/#ãàé·3GîzYïàL N=ì¼ö&­¯+Y’¼IfÁLâ21-™”.êûäÌè»Ô¯ulÑfdC¯”V´ømÄhøˆ*ÊMgB„1v¢Ÿ ]iÛ^öȹ3•t²ŠaAµ‰ATH~àÌa\ï§p|¡ŽÛ‹ìÏ"ýúßcv65í P‘É·rJG*\Ï_Bûš°Ã¹û¼É³ˆ£¨OqäK†­x+9gœä®¿MàËùyª*ý22œÒ]ëﺚž0xH㭉㙫Äd¾ÑX¥r³:@Dç÷Oj׻Вui²,–IC-;ZÒ9Ô(D ·ˆñ~Œˆ6Ù J$b[‚ÜiæØõ?|~w¼–*G»‰Ä$ëZ&g÷†]ó“ÞÕ>¤26~‰?tì—~mhÀt7ŒTC×ER‚˜K”<ã³ô¢<°Àˆì4õdob8 ãuä~éIP™O†¸Ðr¬eȇ¿ ×É+’Ðcßëù‡ïG¾pÌp±•ü1×aùH•INªñl´Ëz‰Z&üS{ðîO‘m³»l×C‘_ÕEi[¤š•ø…HæSN×µ»ä¬™üW,¼uïm† Ùx‹Ó¹ôîY¸Á­UV “Ó~ŒŠ{‰vù˜2&œ-4‘..bo²Òaú?ks]áFÙ àhA6Ôñy£ö"”>ÒÉóík웓lðt°Áä$wâŒ)1YxÙ‘“>½ ªEˆÂçÀ©jMƒ ‡­Òh*©T×4U`QBÚ·Œ~0^ày ~"ÓùºÓ¯ºÇé& zÒó'»„dÔÌØµS«Ý!Ãda¿-ø@¥ƒd½ô&>m«›øaøG#•²P’½„òðþ9ÛtFK—«Ùz†÷Åå§ÂVYÈ©9%NýX^A4ا͜åÄ2c'köɹ•Àõ)Ûg‰Sp¸]SCÇ£`$ŠOäpMÄè1¿ƒÝËù7[s1åÓ'&†Oǃ´‚³•ž‘r¹mqu~9µ5Ë~|Ÿa”ËžnCTÍL?<¡ŠûL=ìqÄ‚O»'´ÖHÂS ö·Æ´ÐÕGbóL/jUÙûžÝ- þ|jÊaÚ*—¨9Èð®5¡Öm6Çmt©(+þþâêe*"Bb´ó»;NhG‚1¥7’ÕnûVvQ¶W~f¹ç@èC÷Î!==ß·¯¥–óEÓg£ñ‚Ù î]ÏÎç›õíÓ\–ëb£su•ÛÅ}Ç~Î\ͺdÑF…ïj álH{ßÿ4¯Ê´;ׂBmAÍ–fÒ xÃ|­žŠjеðô¢µŠÔ¦’,MFç5“S4»Å¡zÀ²7ÉX*£[¡*u†Vº¤&žI1§Ë×õ lb ¢îÊñºIiüHÚ5ò²U’9+4N—gÆz6=§ðŹeyT¸{c¾‰Nj¿«°ÝÖìoª¥hºÀ”ó%¯¼0\=Ve‡¬€'±Ç˜•I­_Þ“XvÂÏþíKv»~í•[ Œâàñ48vxŒu©7Z5÷ð¢b$eا‹Ðø<†…Oä5rZ¯!n  -,êzD^´¯›—ìq/J?ãÓJ®G<£­é'ÚU˜Ðz›½ý&„ù'ø0õöEw³ Å,ðí-?6ëÕ/l/ÓfG›øS²ê“—¡e:±±Å&2©º’`ׇ:2§ˆþœ÷ gDŽ%ÜÞú#‚îÍ­‚ï„·Ç k{é¦öâÐ Hã4Ù) !õ)fmYûÙ¶iIÜÍ –ý(k¬áÇlUçlŒ"x5²N`Çlþr}RñÝgçrZ—µ‰ZóÇl¹s壣£ðÕúáóÆY:1qÞÕ@ÌäÓgCš›¿Q2»˜Þ¶Výù…bTcéìðÙOA-ÂË©ùÈp´ ’¤›¿‡TÖo©Ús çñF–›n_ÁXd‹‡¸DMƒ“ A|òÀNèŒn·"¼®*ý­NÉøf»{œJx!å-ˆ¡9Ùt™™šìå_R dt&7ÛÍÜ,嘑‹Cäðt†©÷ÊEe ‹È .Jε'}ÙÑÖ'¼ä8»€QÑÒ϶¼’±Û ͸˜Õs®£™Er<ò=5𛾢Äx­Ý:AØÒÞøª ˆÊÃíÓårêÆÇÛ9©³\ó¹Yª I0)Å{ÊÈ“^ŒÆÉ mYª”ºYÜì€W™•MøC–g-31!"pÍþUy„wô¾rñíy,už‹þZP~&¤”¸ ÔÚA}O>€øy½ÑêT~S ß̶«nÚDözFºlÙÃbû€8Ó=¬3uëòÍ(¥1óçwŸÑ\õqE)Õ…¸ âîäýo)ñ½ß{xµº?÷oº~* çQúA0±vrúR^“¼ÑâUBþ]‰ÓÄ' }ËD‚³Ÿ7¡­!]aÆ1†Þ^ÛÓ€tjÚiãJcü.kݬò G{E¤šüÅ«ÏÇOÁè•D©ex¾PÜËy®Ä žä–`ÝJ]“É•WF»¢oy{ǰ-§pª„}ò© Íø eÌS*)qSå‹M³p†FŸ¥QQa%âvy#IŠ7%še|ÊÍþž9…¥¾j5fJG;¨œ3öYøLòçnÔiî­ÅͲ /gÖÕý#¾†Ë4‘…HyÇn$g°r>ÿ=1Åã †bvÅòGåiDŽŸ Nƒ©º&,3ÜÂ]Ñ‚RjazóØ/¹ø÷'}Nžû±˜Üü’¯Q ]ާÃô8~9×ßPÉ*mÉ£=¸CcŒ í%˜hªÇMk¡jcÆËvV¸¤û1fí<Ë+쨰¶þµ=9Ý!Hôì΋¦.!ž±qxoˆ{€6ñ׈ß{&hÊÝ÷mN°8–“bßÛð¼}hcZç±1Üc¾L¼ cîdL4~,N5Ê:ºÞñ676¿úƉ—ZÝwßÎ$=:UÒ3úÛ¯vÆ^Þ/ëš$ÝR4ª^ö²×ã¸S¡Jà2R|+8Æàã"ÚXÉ‘KõG—1e/d|Ýž•Ós¥‘/¼±¼IÊÔãù0ÿ¾ªò*„“±éíK‚•šè›‡ŠB!O’mx´iÁSøŸ®ž”y®žÕgš" _aÑâ9Ýd‰Ñiãš¹õXN}<%=08®£JÇ9ÌÌyè_^—8°_ÄvWî0¨ ‚ÑRKÎl¥ŸÔViŽ œÜÛVÉnó×ß#sãê>¤+ío¼ŒaÕÈr€ð2%‰¶œÓÓ¸+¥×܉"~¡¿Â¬ÝªÐ¸{Âü€Æ}ei÷A(t3<-2ÄÆ2a§éç×$ÚøYYG„AÍžÈÌEZ¾Å½_îÓö‹IÌh«S£6\AÞDÑGúLƒ*Þ`ŠÐº,ü4÷¦ÚþÆ;xÎGC’qÚN¶ Zó)™l™ÜÄ'µG+Ù…Iþ<­WèIŠfà›!|yî‚•‡ Þè±THm¸·=6'çʳnŠ r|¤(µ„¹ôÑ Ï­h¼R[Z`’k(\Èÿñvª˜ ·Â„ÈNåªʽ¿ŒFOLk'Òx# æÿp癃þ•\|®×9OL¾^¯£jÏ–ðJi±|ù† 0¹¦F…âxäüdGð÷q‰Ç #-ê;ÅüV2å³ÕÂm3™ˆ{JæEá“m„^昡møªLÛJô†`±œxû¢Ë×;ÅG_©èëA0é1cƒÇ/~OdI4ç1FWâÌ 6*B7GÆ‘¥€Œz}ê‡-ÝQãÈHÏÈèJ#«®Â†6ÓØ'؇sm›nAÆ•F9“¥¤C»Aa‘[2"“ט+¶Îh*x£ø³û=T8Å_OôÚÓé22:l€…_t[35ÛïËÑ÷ïÇÉ%<$"º´Æœ³Á{VRÝT¯.«Urö÷'øCŽÍ_;ÒœsÓÝt!O¡M€0”-óçzlíøõJÂØ9·üwû/Èo­' @ããjÜ·ZX 9i£¾†è¸¶ê ±ûðfÁǤ«Àκ¾É†ÎÞ0¶“#¼{Q,ž•´0 ªœâ›Ö–'&<àŠÓÎY@µ¿‰Çõ›i¾¬¸õLˆ|’ÿ,ሎõò«]aæ5%ÙØýüôíÅÓú‰Ø›“R5̯øpöÙm$â5Äb8è?í…Ö–ÍÉ®/êÒeâeâ6$º“’´p»Êï ßuŒ¢û´EZxÐù*yû3=_Bz ÜÃÌ|+G­üeê]áF\Óª»ì.Ñ)â ²£aZÄ‘ÎÓÔíDOIêI"R<8ãÒôßaËß·] ¨fYY‘uö¼·Ê¸ÀçÚ]mõP(ä_EŠ£œéïFø]Ð’±l‡|,}ôõçA±-ÏŒÌQX^÷’íÝ>£‹·/Z8µ]ŒtÛà{kµ$r»î\™`±Û|yñC¨$ttË^û&;eŠÉ é‰WæT"Ϫm½n³Ç§¤ŒNp+½}êEB†3xi|6\¼óò\iYЏ×ûœ+‡p/“«{Êx ªc9UŸ zâ®:ñš­ º]­<‡vûIÏY1çq»ÙÕ¼g”6?’¼§y¢_¦(XQágˆW~ÄRZ_Òþ?Àgç” endstream endobj 447 0 obj << /Length1 1606 /Length2 18479 /Length3 0 /Length 19316 /Filter /FlateDecode >> stream xÚ¬¶ct§_Ó%«c;¿Ø¶mÛ¶mÛ¶mÛvÒq:¶“Ž;æÛÿûž™gÖýΧ™çõÖuªêìÚU»ÎY‡”PA™VÐÄÞÈTÌÞÎ…–‘Ž gikäê,ko'C+docøkd…!%v25t±´·1t1娛šDLLLFNNNR€°½ƒ§“¥¹… €BUI’ššæ¿,ÿ„Œ<ÿ§çïNgKs;Ùß7S{[S;—¿ÿוMM.¦3KS€°¼‚¦¤œ8€B\N njgêdhPp5²±4ÈX›Ú9›RÌì6ÿ^ŒííL,ÿ)Í™î/– 3Ààì`jlùw›©‡±©Ã?.€ƒ©“­¥³ó߀¥3ÀÜÉÐÎåo\ì–vÆ6®&ÿøk7³ÿ!'û¿¶}Áì]œ,\³*ˆˆý›§‹…¡Ë?¹-ÿºöf#Mì]ÿ)é_¾¿0½.†–vÎS—r™L,l =ÿæþ æàdù/®Î–væÿÅ€àdjnèdbcêìüæ/ö?Ýù¯:ÿ[õ†6žÿÚmÿ¯¨ÿÅÁÒÅÙÔÆŒ†‘éoNc—¿¹Í-í`èÿI;3{#ÿí&®ÿÓçfêô¯Qü33”IšØÛÙxLLÍ`èåì]þ¦Püß©L÷ß'òƒÄÿ-ÿ·Èûÿ&îjô¿âÿ×óüŸÐb®66r†¶àß àï cüsÇüÿb m-m<ÿÑÿ¨núo†ÿ'Iÿm´3ÿ+ÿ–Îb–¦& –.Æ3C›¿=ú—]ÕÎÄÔÉÆÒÎô¯–ÿj#€–‘á?|*–ÆÖvÿ4õß.S;“ÿdþWžñ¦U–“¡þÏÛô_Q UwQñtøKìÔ!koò¿ÿ` Ù{¼iY˜´Lì6F;£ïÿ!Û¿`ÿk-kèâdéÐþ[2ã¿ ÿß­tÿFÔÎØÞäŸ)Qv1´3ù;XÿËðÛØÕÉ鯞ÿ:ë þŸë¸©©‡©1Ìúн1wˆUFv¦KFþØOí¡FбP‡òf•’¢€:û~ÿŒˆ=ÎjƒúPº–Y®¯NÏ_ŸGRTÇè6äýi¦×…¸¾Ä”ƒEHÛdÝìÔÇAôzåp™¿Õc¼o–evÁ´ØÔŽ÷**é•}@àÍv3;AÝ{~"™í¿<¡΋‡&å6ÄðK½ Lqñ4pzh6þscw…?¤ê‹°÷A±XŸµ‰ƒ•„û8ï°…æ1±J2@14Íì“‚º®Æ•M0«ð9s•)ìfÕºçm†L9Xb‹‘/”ù9½SLSϳª/•ÂŒn8Ø.¥ ·¥~ËtùÝjwÿãÜË R¶ªõqJ:x$hÜ©®[e=­Ø›(P´…íÎNˆÇͶäüƒk"j ÊóÁÎ :ËÀÞPg)½@ëJ*©ìÌÚ*-´øãhšÙÑ8l\kÛ¼XùÆ_ e ã…a€…*ŸþÒ‹ìh(zøvë:}‚g܂Ɩ?`ËrV×¥»¹.ØzÊæVÜ&ª ñù®šb¬eD}SÈ#WŽzUXðurâí=iÃ}h6?Þ´‹Û1d>4ãõrRm)þ×þ!4A…E\¾Ûç¡…‹KÙï Ò†¬’OtÞþѵ´³ pivóñf^¹YXÕÎŒÇ!»*nëPTéoCÁ_'€XùÛ¬Ë4<¾Q‚KdÔŽ°WB¼U¨lvpnü×%5þ"÷’:=íØÂ=I’œ_kGpÙÍs‰xwüO|0eK©'%ðu"ý7¦ìÞeNúŸÓ±5VðÑà‰î®~ôÃ*Ú*t]" x˜\Þ#ö›çž^[ý²ö±N‘:uò]ºÏbŒ¼c!_á'Ú´;ßpÞój‚/7òº!Ì+wg6cSû!lÂõxº‚šV÷M`dÓÄ´ŽYû4ÊÝüé2f0äOXÕûè“îú³Z¿áÇ˧ëîªcQH¿rõòiõÍ_ÌwqÚO¶#©y¤Ð’µQz0šû…X:úY]'[@ƒ dxšçÅ,³ R÷ ²onBß›1eQ< ñ|ìÎ1—ÞOÊœK8ÁƒŸc¡VƒsN‚µc2]&áH”þê¡Ø=½“eô͹$>Rˆ`Š,/q¢BÃ5Ž­³Td€¿ºuŸÖÞò‹gv¥³£d‚—³ÛD×xüôzµ¦Öj,ÿžìG¢¢Æ™sÕI8üS€ "{ üñ¾TeºHÑJ:‰éìÂW[÷†rr¼ö`|±…¦Þ‹tÑ…¢}/çÔDa¢®x[wéë#Úô{i=,оá‘6ç5bøuïnÕ§1²êcAÒ³ëỢ)Y‡Eǯ è7Ñ^,?©¡ÞûCw¢â,u¬Réê`Ž Ø––‚Ž_ÜPÁ¬%˵?³©BŠçGê¸ÿj,!7âiç󞀪q}Á4+ùávŠÖý.Ò„šˆ$îçX–õ>b‰ûœð;óÑVzÍó•±.vr(‡ánXí¸N߯ad5©É< ìbAMtÉHs„y _§g n¦×§û¶´OAÈ òÒÁ•_Ñe±v¦â±©/†p•Efí¬lœÍ¤úö[–­`VSI°§¶UªÍ!AÞƒMŒ¯nå~záíg~Ž˜ÖäÇcÌæû¥¡¶´Ì.û¦+韑ø9V¹ŒâS”Å/Ðñuç8ÐõÖ ÒžÐ¦uƒzlf&.»‹¯J“V¥ßÓÒq$EAê}"IRµã˜Õu¬Ê!TGúfYÝm•¯Ça„ÕÛO¨yÓ–¿u- Z* D²9é¢÷´q·Í0xpª£0¤nmÄëA¸ ¬ ¼6Dê&"?#eïàgÿ ¯D!H«º¡ Ý&žÀc˜}¼mÀ–ñˆ«Ì©¼vÒ®#Ê P=šAšâ»×¥è–8éDª‚~>ß½ÚÂo‡Ÿkã«w•ëó‘(õ¶3õñƒu5éFqu#ø¯o'JÅ÷%§:(³r w¶/Ü ¢QÈõ”í­í$ t¨~‡{áw@À}ˆø« ‹ñKÇè;èù„÷TijšéÂ!q©ÞL7­B"»3CáVòó0ÅN›Õþˆ×2W~k åC¾Ölþ#bH— ›,n•. }…ïGSCp¾^Û•[5.²PÜ¢yô E—¦2wKç>UØ™…TŽí˜_ØR.¶ë‚¥—fa!7]T éÍ_ü’p€³ ähÐÃÐÊ:ƒß‘~üޱT* o¸.–ŽG}Q0•$f$³çdFJ¡>æ5"³0¨Änvê¹Æâ”¯_µì±ßÍšï<žû#qSÑB4­¤ aÝ(íˆÍ|ñ„¸Æ¸&ÁƒÊñF.+àî²jy¦xýÓpò¶fàŸÎKÞGâÍÏþû¢wróÓÖ’6K\25e”vJôϘ¯Üî:Î>®Z«ƒq^®mÉrÛ‘2NëÞÄyrR²hsMjÇ$ÂϪ¤&aùDÐ|£ÖéøJýíÚÅó0Ö2©I¶ È\È¡TØ“W°ÍØøPô¸ˆ _‰ù“ógôMCò”³áM4ЃŠ$÷\œãÇ„[$¨ÝgEH¯ ¢Ø]Ë™æšL}©‰J¯P¦¼ ÷geÑãKÎÁ‹ê—•SÆ|ÊX÷tNQ còÇ„sÒáÂRãõÁ~¦±XKÆÝΕdD¸(dD”e[Î%Ćæ~:ô¸&iÿRe˜Í/ýó” ™À›Ì£ßM2ìã­¡½§ªœªa޳;|C'é$c¿¸FqE™Oø)8¿V«ÜœuÒ¶BQ?û+_8Ûï61|WåÖ ;k(2홽jô&Uh×íÂRC=`•" NjÜRv®ð‹lÐáû ®Å5v¡s‘Äg”¦#òùé¾~ÎÑò˜}Ýq_OÛÁUS¤ãÙ°oI/)êÖk::3ˆ¬ˆóëQò¼u sÝãdžŒ> nÖ¼+] "Ÿb"ÔζŽ¶…̹þan®‹U¹ Ì8+U4:ãƒBŒ­P>¶“»[iI¨=•*g_QFɱЗ#.9©öˆ™6“¼d`ÆvT;ª¸ºŸmÜ÷sœOè¨:îŸú‚áOéÉöhÌ^‹‚ ä¸]‰2—Eóz ßÄgj4¿àݪŽ`ÿmù—Ρó($òõüp*Y¾§•”U‚I>Á&ýiŸ£ì 'h;BLYIïØ‰SÌC‘ï{ëˆýÓDF—¼º½¼¨¥âÒÀHTèhœxt™µDž®9‹CÁîÒ ¬Õó±õòù#¦ ­FH°× Hšínër=n¡Ì&êKÕN´òšÜÆN0/Ç*âa&eˆ ±]¿øÕ°ù«œÔ¡&x„‘Nµgí‡Usfxuñ—h¤Nä#;§&P™LcìÊóî 5àfYQHÛš-E†EŠ:ƒåÕÇîØ”h ö.-¯°¢*ÇR¾uŠzÚ-+ç*ðç@¤^–(àw.À öÊi/®ƒÈ¥ç‹.WÑ£Câî\–»¸vÕË'úKTh2‰maúž0¢Rxíá[ˆ uß3 ż8$¹;îz®ÎâxCé‚(pÆ+B³,(7…îÝKãðÔXè÷ª`^3®ôd‹(0Ðþ<î.þBx›¬ dö è&ÞdµuÀŒ£þÂï];3Åx»‘𕏤f‹m}ßì…ÇóÎ?“?˜BX߃¶ m3³¶â2d{ý‹HÍX2i”òglÂ=¸N¬JR Ã% ¥÷Ùc Vyjô/KF94ædK:Æ”"üzİN $­ˆVÜ`Ëbµ$‡žl)[‚߉úÉ=ô›n$‚Õ?4·Mbœ§s§…Xb‚¾¤8Zã\ Ns{6t4 hÀ±ÙJ—uBâÛbˆK­Ê4¶{ü™ÂùÜŠäÓØ>“ê>_ƒÃ8µKm¬ P~Çz„Y‰ØlÍeì­4¢¸h×…5À{…—¯Kã×ó Ú¶¦2½§¦a¡ìZ¯¯+0F/q'ÛØÁÆ‹i6*]˜Í©>AŸÀõðØ¢w^lBÜ)1iNÍ‚F£ø9Ö¥¯6!£«\‘?2ã·‘ß2ÙEpZ– ©®W9ð™) †‰¿p{ ù@Wªtç# H¶‰ïaÛMôMJILëQ9mGRçëf›¥ ¡”0ø8_Ôj«Ì;áÚÙ”y8Œm8Þà Á²à£×Ôhþooaó¼ìl!VÜ?6¤ÅODá ø F =ÏÕŒ{‚ï2¶”Ê–“y¸é3|qæv<4iÞ~~®1ôÇöøuÍ7@ÎÄÕ¢ÆìÌåµ!®׸Èù\Ÿ®¹¿ip~›ÎœEE,cC¹l†-ܽ—­ý@BéäP¸üæ•EݬS0Q}uæ °E{G{G`Bñ…š¢åè ÁŒ´æ51•pèQt‘ÌÞÏ>Ü›÷Â->½ËðZC"Z[?9‰Ë!Iö‰ƒü¬wu!Öâj'Šêˆà;ÿ´ŸÚ ŸE’å¬J»†îiÌq¬pé;½²F¦qæˆþ’ÂÕç în£C?&Ô-¶f”yÇË \}%§iAc]LÄ/­¦;Šn[ sèɬ»RÕ«©Ü›Å[•Ç5¸ëK2›XàñµïS ³Åm1íª ¨ñ]ÀOE„¯4Ïû¥:3þð ˜æ”F’ÞÞ½`Y”,™ñ˜ò(“EeÀEº4‘6“§ _Ú)|è‹{ÄDÙf¼m¦SI#Æ i³0ÙØà…Ç +rÚë£/#¾“øŠ:r\»9±|?aM§or¬YPŸ•ŸO”C¡T­É´;báiø˜£…ƒÔúôP T%­Éýu€éøý” â,>!Þ`ðÞõLŽŠæ™œpè ý}°Ó¡j[‘NT^ûLù {Ï—™f]ð«zh‚úz?5y Ñ©¤* 31lfÈå­eÌ¢vÞÑþâKJ¤ƒN«Õ8ça]î—‚›5AÖÛÎKlÇÍp…#ô»–nIÀ¥PCßiû¾OhxY…urhœÇ’é4éLŽšmË Å·]4C½íû¸¬s1Mšrç&´.?湞qꬒaç©md!Wæ3ã ƒ)—<’û[Hí°KšÃÅJj*,ø!OMzåi§vD«ê@¾Õbl&‹gÆr4‡îâÿÐSÏ88É„ø3Ÿe©Òªg[]néK¿²]Ú1(#ß!úÛx!ʲ@9kwT×~Êk@êÓIùJ·vê) RàÿA‡}"w³pŠVðË•NŸA9þ|>¼í¥eÊÜzÚȱ}ùŽ©w£Âà à›èH)âs ,<êÉÍuZb™F½ï@‰«N6’ôUádÙÐOÌ"¼7S—«eßËØ´à­÷åÕ¬qhMÝÍô#ç˽`Ó;*ãÛz(v+왿L´½ÃßoÏk/ç3Ò¨«zõ‘¾žõ><39OH1#¦†n7˜}0|Žz×íJCiL½žL,_&*,†Äÿ¬,›Í  óWYÌqäËòô¢<âv,³Øç9çA$Ì•ÕöíÊæ< ±?ZD»˜›šQBÕ†šdk8œ&jÎKø´Z¢}_>›ÈÊ/u§^úÝ|<ûcŸž1þ¾\¿_ÀéH×6‚{¡2£ÜÿCm÷èôûë8¬/ºÿ¬õ1n]{+˜Yf-Ë„ þRˆíQÁÙ’ìF8ªàg˶ $:kÆAìü^d-Ñ™èšZó„ìþÒ!Ĭ}“Pù×`ËæS/?ÖLׇȯnaGè›{0ºí9Î:%*\r7=ÒSRM³Ã±k´\ ž ¯±ŒVÉË€k&'y¨  KߨŒ=KcÏÅEø)1¶@ºM²ÍÃÈÙ…Œ ÷‡”Åœ[í¾ ò¾ á³’¤¬6öø…hvGÈc½õªµ#6õªG &ŧ`_jÓfªq˜rzäF²o›gƒŽ a4FVgäT¯zFŠXc±¯¸¾Í5<®¶TÉÒDÓ€À·-áCìÆW*àW_M/*W—ßϘ¤ ô`å^Ðà‚] Bh¤«|5‘»U@”a«rÒ Žc¶aøDXÙƒ:¢øØ˜úšB1(Gó ‡Pakw³‡æpF• ÍçCHZº¸rÅiÐë‰Â†F¨|’±z#ÄúÆÏ]zå Èt-mž—¼Rq½{¬ªØBok8fSÙ' •¡Cºýïõ4êºÓ¡4s}Ü77¿ŽÞLïuÂIÞcXmÏ®¼‡PYµ4ºsÂZâˆ×ks|}ð¹Ãî37‚ËÊ—.Íž.«=)x`žÓ¯†ð£\2V­¶Ø¿Çh9n†ý ÅØsµ ~+ÁuÁöý’œžõÙh&Õz4°ÕBTq0‚= Ù;JtÇ—C×£ˆ#9+%;Õl“0[³#´¤ìY—=*Êu|±ð¦ ³T…¦µÒõ•6ƒ7ö=ñЙ ¼xDþˆ=c{m`ÝÊzÎà5høÉË<Üüp´ØæB°Þ}‘Öê( @M¬Z¶ýûJ‰j>ƒ ©×®çz¿¶‚ï’sÎâš1}j“y •>rÐ°Ê pæ4Ìl1!Ù=SBœ–îäîüã‹Ì­‘rå( y¤ïäêå†@m©‡âàEžšßo_ÜÆ¦ÑHnp%—>˜=*º3I½Ûo;¾ƒêjÄ#`»\Oòâ7‡üiòŠª%ŽÀ^ù6>_pe$Ðh6F,b/ÒOAÛvxÉ/ àÖx*§OG²Ãåß4˺9ÏVZâo¸÷Õß`ÉUJpAYp|isŘ³"á!Aqµ)‹B@Ö‚÷Á-ÜGæD—6-°±7 ÿSTF—jÎa[þ `\7¯ô áE48пÙÈb\93×Õ† ’<´-á‡ÖaSaêzèb:[x]©#‡m‘l“ô/Û‚×Rån~]¾Ú:ø‘–Æ]F!à;¸pöFùtÏÔ/Ýbj¼„ƒcó«yØÄUŸäsØÁú§á«DÞ˜z„dz ÄGGƒj^äÙÅ £Ðî¯nÞÈ6”÷°\<êÇ{ К—ÈlY[;>±•}$D8ªÁŠ]Ç7{E⦒F•à!Nn“Hfʈu)[Á‡Ê¾8ZèÆën£¼Âf¶Ü°ý[7þŸª©a¨HYJ »3J¿VñgƒÊ ‹‘õ@H¾Á"’nW·Ü3ÿ2e—RÍVµý«·=9!@m‡-Ÿ F’Œ0ZØUÓ«ŸÂÌZÓÏÛz(ÖZ,9m‡I”êø“æ`¡8Y–vÆŽï?È»Ö#<&…€f"9 ãŸ'SË Àç '¢"g=ª¼‘wÏÙG: R¯U1¿0avÕ­…&Ñ’Ty°üC)+^ѯS—ý\ÞÀÏPr§ZiŸÑ~™.¤i{/x9º¤–Õì>UóÜ–ªÊwÑû`;a´EÈêp*®‚Ðä"÷tðsÙf<Ï|n²Ùâ†òe Ú‹†ñÉFs;åyÕ„Fìùáy,­4YÀgJ„œ~„!±¢k^`(lðšŸNxùPô„jžÜîÊ-—!ø¯¦Y(¢£³\×Ái¢3à6’íÚF°ADB.9ÅS +òax«3W„ÁitI§=.OŠtå°µQwÝE §?.S| ¥S7=39Øó)ù<üw§X×ʾ 0å³~X¢ÚîÞ/K8ÃÊ–Ä]zÚƒ(¨ï5vCÓ&ºpÖ•Ã ñ-SoýƒXoN Hdy?é)ÛÉ­¯⤨7ä$9´£€bÔ(¨×iÐr¼Ó8z“õ ¹—|mGâ”饸=_¾ýóÖ½”4—aq ƒìëçµo~®BÔód=EÖ°Wä*ïsÌnëMʯ¼Ù½…o4fΑ§ä²çþ¨M-›pÕ3Š< ^y6© Õvc aŒ‰­ ³‚[$ù7}¦4›þ”±ôO…›¸ØJ8¤V#)6›N¬Ý0Qe>ì…dìð}¤åjœ^š2âœDIAe*qœÕÏøˆ±ôŠ]Rò7Ôæ³˜s4ã ^n\þ0÷Ûʵ›§¶I¯¯Ü5ôE=xu]¿Ë[eY”Ÿå¤i‡ËÉ‹ ÂLû+ÅZ…zI"ûrº¾ü60‹-ØHc¹ÙƒJqÊü`êu¯ÕyRd972Õ@ú´êP¥Té2ë<)on.ˇ ëŸðý\FÒâŠØ‰º,æé ѱ7`Ô÷Æ >ZytÐÍeü´1·Y™5ðø|'üÛË‘Asö>.A¯aͰ̖i×#b"m&Ù. øÂü³L\7° N-¥]óEýYhØ·3p5Õo–žuE¬âmd5jP=¦;©-°„Åü„’ÄÂä#«]göÄ ØfÒp„ ªàó[tPWÌM„ñ%d8 ˜žã`ýž¯x‡{Æ£®!Š{ïÚ^Ìîç¾'”AÆ>ZW”7¤¡xD³ _|sÁ¹œ Ñ‚ÄQ2¹ôäRò[„û\2¯`³’‚7ïõøÕ€‹o‹ ¶Q„;3ÖO6({ÊÒì:;S÷ŽE~ËdÔê¤ò«H@N# }eJ™|3ðí @ؽº»£±¾¨¥uË]³[ö{ç} ¨ÄÏdU•ƒ© êqÿ–jòcAããÄu4]2wðÀE°²9ÿÀÕ[ ×CÕö*Ç@kÜ×a¾x‡pJ" -3ã±AãHØ¿7›«ÅçËss]U¹þŒëÙh:už¾kæ¢"i&¿{,aÕÀŸ’ßÔ!{ƒ>´R?|Œm¯&ÓHT“##³¤Ç%‰U™ ó^'EYÛ~Kä8;jÄüi¦/†ÇnV$(9bíáÅxòÜÁ° G[jÒUæ“Ï}­…“«°Aöj׆½ia»¦‹b!ý”s°ðÒÁ ¾ÿçCޝéä–åå¢U­wdˆ]Z(…‡'­Iy_QðñŠ™Æ„.{~:÷Êg뺡ü—¸ÃÁ‚ V"7ƒÜ,tÔ%9Mm¹Ì·ôjŒÆ·I&Q©+½&ÏoX¸HuçTz™—ÆÀEt­-™ –Lò$i’A$@:0W¹FNe˜õ50Iò˜ôHA¥/Ç9†Ol]ÅêŽN«Ã=…f ôŒŒ± _åÐRâΨ[yt§ÖÜð¸‹Ð‹ý:`¥W2º§Ñ¶kxä)º¼vC5f&o€y¯Û‘áEmxë2™*¨Zx¯_ã¿»ª‹U^™N=!Ë)Ç4A/¨¡{µö¿ ¿¤Ô®dÙ‡+ËVªý.Z óúMò‹0ÜäfÏŒ÷>ÖqåppDZ:Du‡.]bÅ#s÷}Wõa¢¼¸ÓMWãgGB^Nì%łۮLgû7 oó‡¸È|ÓÞ(os@u‡ALô‹Vìž‘O¹J|šL-׋®ç7spV>x‘{ÿ¥R'ÕM Ëkî½æuiRa(î  ›F éàXëUhêZUƒ·©öMÔr™{ÛOÊŠp¨„Ï$Ñ''{ w›õI×§ž–ÊŠ”£·ö4ôÇ _@²õnÅQÐê'ó Óó,ùÔײ,ñè—Á0S—¿ðëÁLw|vG–·@Ñ]#Ž¢­DoÂOT^J¹ëGfòíq/æŞ<È_u¯¯S„"²ŸàîYã—pÕâƒVC5Ãð FíkÓˆßoOÓó®.ÄX/ñAW¼9ãÀ›R-?N#SrêîK3<È5Á­ªJey2I$  ’` [Ûà*’„~-vóˆß¨ý}‹ýÒϺ;Ív¾2~¦Y;]VéþÚÅ¥é»c­wºz‚Üñ¢M—1~`ƒ1fðÖçO¼å¡H?fÍLEŠ·e Ë×赇ú57¢¤7é·‹Ãfì^U“#6ä>;´4¼7d›{"h£HÀufƒ>“R6U?À±ÿ}Èñ)Yü}hZ£@(8Î7|L¦-ûvfYCuœÜ m`¾…jâ {V}ÃõÝ„OëžD!O*`µê ™HÉì}_×u—ùgÑËÙ7Ež|:³Bš™ºî² ¦˜©Ñh {iDWüL ¿­À–’{FsäFw)M;Ôùim˜vJuSª³­æWkƒ¬F»4¼÷6×Âæ‡d+ë±ó@ûÓYͧ^³bœn ·kïUÁKØí³)M!ë(w·Ã£ð»}–ðKn5^†ã l_I‹†t%Y~rÑC L® e„!yAùYO¾ Éy‘¥ŸGeF«É5ÓšÃ×u@ÙßÄcyƒ J}ùçO®lÍJtªa°iŠ¢S“x·¤ú?(¬äüû¾ÓÉY¹˜îh ñT† œåÈX:?„”¡-Ö“ðu Ú·’óÿÈ*pÍaFüTÒ3…ÖW”mιYNå½,ÖæDWð‡Û"ÈŽºÉ¾¢œ­U^©3P`;,Qf9œÖ¯7àQžŽ“Qäî·ˆñ5@ëFÞˆ_@¥èî}ÛÁ{„ãçÆ‚ïYª3¶0’fÆäjˆäö~c9ïêf÷·)®ñT/‰&ŠyŠÛÕÈïsA¾ŠÆ˜>7 † ð[u‚¾P¾a|­¨Ù·b¼uÛªT¨°ø­*ãwi–‡G%…íCñÉ„«g¤}D&ßÛä‚6‚àqNÔ¢8|swþrë$_ˆõülã k'ó Þ%ˈá:ŸŠÇ¤ÄdoP‚×:ZE‘ˆí&,4¨Ê*€É™†ïJÙE 2Ýgöt =’_$sV¨KbW驸öƒÇ h‡J4’¼Œzr3tb–F9ÿâ¤4¶QÃfÒüe7¿?]MÌö‘„ÓÙ£ú=¯§Œ™ø±„Ç`M»oø¦xì·½–š÷cHúåy1Ö d¾¾ƒÀyq¢#v+< “]Žn¶O¬LÕïôŠ1½B¬CžmøÌ±*¤AG='×,Ø_ñŒ|½èbY†"ž9í‹’™È$-ósÆ%SRç~owèòúæŠN}GÖùõ í>«®èÖš`v‡ãÖ¾åE~êkòÕw Å+†Eõº‚gI á_µ– ~ ‚¶¦ýÅ™y-8¿´é7²:‹`O0Zœ*E+û£Ò"OÛ2TàJ\šÏ¿•\²¢–ãڇ䤶—2¢ýœxg°q†“1c ”°Cš×jEk+D(öoë^A$ÓêðIk3L¤ ôn¬Ü’VÛ­Ì?ñÅL°3‹æÊ>¤H[J“«— 6‡Šî‡­uÇ3Næ 'R¬!eô«ŽIÆ3"’—;¦;“6Äøðð)M4üX=å«_YÊË×Äl>´Ë|Khކ¡]4ø ø»•…ŠNÔÑ`1šA€^š@@ÀÀ}55ÊD<Ç$skÖ#¨:k©3Xßo@ÓÁò€éeÍ‚CÝÜÈ£ç.2òû ®ýJŽòÚòU?UL’¦¨Ñž.YQE<+âú£Üëw£:úS³¯/N)Øviau bzss急*ÆY² >àgÒ´<œQaˆ!Œ~×´Â,ýGׯßv=¦¢zó)}>:79(Þ=tú ôbµ:rÈæÖþ¦ MÉôि²Ðöq÷«r—³Ô&˜Ö‚1傎’±:¨nûÇF{Á¬SOëH©Ö»¢õαøJ«¯æýâ˜Ñ”ó<}ß×{Œöøó/R²®Žrv•àZ6ÕÇOfs•.÷XÃÙì´®î¼o=Â#¾DÈຬý\ Ž7Ÿîˆ8×sS$ç@²UÜm¹·öç@úî©Íž­œ~elíl•4—øÂã%›z-¼dÑß õ…/ÓÌ<öÙ–b½Fþ »œÆ–Uéþˆp¡ökæ6†]r?æQG:¹>îæà­×ù#è2 B›[+¼À(ÊXÂÃGü(» Ù¯É*OÙëÿ¼¸Hû9 #Ú ¶BàÔùaÍb}÷󂾆”Ù@ޱ·Èi#üO"²åp;ñ]„¥Íx¶÷8s~vgý­YÔ„Dìß¹‰ý¼Ž;ïµùSÑR—ïr¿ò4{«¾h !Ì?Ês„g³ßÖÁËhO-)ú!ãÄx©½í· YŒóÉÖ ñ×Ý6¨ÝófÄà&•O9F·1'åHVE5¸`ÙÐï>R«d “'ˆ1ÞËJ‹[æÜñƒ>"M ¿‘^ç ñXl©õú×_%@ZÝØ‚T¯3"°³So¿äùާ·PèqŒ•})¬Æ]6~+ÑÏeôîÚ§;Ôúµf¸“‚Ë$sX¦„âèî‰êBÎD€*E-œûæ@ñ¸S59”Æ{°ét~Ð$¸óÐOqóò¹Dëƒ4|&oéq¯ ‚ê÷t]¨“Z­ ù;­ÿѾQïÆ›5 D4Pw&¹ö$Vý0¡Â†x Hª÷ÚòD̦$ÊJ–ˆ)êñê?—¢Ž©‹LšjŒº‘T»La,=Br¢A3[œë¿ä+Ô[OÕd'"­œB 7g8—2"{‹¹ú®+lòÛÏNå 0m×#”$‚NŽì CCñPßXÍÞR°7KÇš§–ÔÞ¬áÌQÃg’ò9ê¼ÃÀM*ŽŠ‰\⤖DÎ=)ÍV–'SX³ $FLËɦSúÇ Z—ç¹ÖéÔØ ¬µ?{喙‡jd€‹€\ýaw6T2‘k•nz}æoøÉ±êU[>šÏ„÷d÷ƒ ±ø ûñ1§t¢M„€äj"Ü;ƒ7gú™#‡Îþ}ì~“IŠyz•¼œçÞi¶”@5€áïÂΓ\«â4’•­L†™½á±£­}ìz‹>PM@²’ÝÏÉ­9í£ÄgEp½S¾f%•~/6ƒ´˜FÉ[øý\GÖ³,'.]sG„ YvO@¿œu¹‡!·kmš µþͤzÌå2"nó"ZØßQÛ—{e4»0½rî+a(ÊR.©NwÂîõ3ÚF{4{$d|o&øãÇõArXAx0‡ ÉÑGÿ{qB]šB,lœ”ªG9‡Ê ¼ããœGS-è”\uÿZŠ*ÅPб\i{칤â;tcÕom^.á“ì98©êÈðL 3ÌaÁ-Š\êu£ùã!¬Ük²…r,LðúzU~F`Þ.ä@ -1—똽"² 7Š•eþ¸Â/Z :Lt”{\– y|:—9p6È0f„½0ˆÚEÄPq3áäÒ*1ßÂÑ]»©ð>a-tìɺeˆ´>ðBÂè¶û¬ Ňcúà léÙvŠIþA’j,9[XÒÈKk&ŧþŠÞr‘J# l÷7üàÿ=Zð'ÿ*ª±ÀÑS6Ä>ÜöÑõ?ä^¼¢!ñ¸DË>¬×cDÛ!,ÙkI<’²áæ PQäÖ—q2 ®k@ò¡)y•¤©«Žø—³µ{¯ÜÅø\G¬5ùSœÆ+7äÉ#g‹Aj+¸·jŽx¦-èl^,°膧wÆaAg¨ˆÒ½q×Üó”ùÈêöKƒÌÃE#©Ð3¹l]–˜-07²XöJ ô+º›® ð!Ó¬‹5þù‰«†$3õ¥wÊr?c/SžÇ˳bZ‚s¬&d}’ý‚ÜBòÆšmT¼ªFœ{qž¨az |…'¦Û‡™çuÌ~Œ*1ëZÜÑï¸Û&{ÌÉ!Xܼ¦u¡¶„œO %UZ'âÁžMþp¬Dnþ|ò‘¢ÑúÍÎ"‚j¦ÁÝÛWzOžLCî9ÜUßÕ†v±U‚D4—mw9Ux¶¶>ÈÁqÝ|þ€¸1e÷N&º¯[ÿ#yó;Ã6ÿ ‰äלèhoÇix Å•¥cc‹ÍÛM¹„1Q„•¸×B¬Tüît8ÚjìgJr‰xtcÖZ„r,D·ŸÏ9ÊXà›Ö¢·Wv>šs9Z»ÞêÓhaIAz)À¹Ã–†•àµÔX[ùi_Î+ì%À³M)êWÝÂ0ImFø¿`äLñ8Öm'œñøð0z½úâ0ü±j­3qóh^Cmb€” \U¥¹P€©ú^˜ñ¹Ó6š IÑú.Ñe˜°@†ðȨ¦`*Öº¶|–C¸¼ÒÏh½É~ïÀ™ûDä¼mqÏEV/õ¨y»0à­zʇjXwˆÚ{êQZôÍœf¥Ä´…(VtüGÆ…’”M›¶Ì]¬$)*ð/ÌÖ—ø°P¡mò«qfcøç&¹ÃøÈ³S]¡éEò¶j ':B)"@´øå¨ïúÚê¥Àì8µ<¢• Î+Zƒ|¿Ï,ÚoµÍ42†a† d”•fNR"úÉJÇM!.ž†—ˆ?ú4´á« ÖìîþüÎÀ¹‡-ØPªM M ù2/¿àµZïÛâÖvÁjIAUFùÇg K®u?!k¾ãb]5ªðJŸKˆ&!–gîå Aã[ÍŽ¦„[#3“9¬’ñ‚‚í¤nV6…Fr‡ÓÒ%›Ú¶r0xm.Â^`0þ¤„‚—°3™’¢æÊKEúÞk½îퟱ[mÁaWÖêF|óúdq£(êa^¦Dý@ƒÁÉSVÚÞ€q麗›Â?¡P6/bíp¬’pÃÏÍkW³ýMtñÒ¢?, PÊ:¤˜®4pq“HU˜®Z}2.Ë¥[c%MR ÈcÙJÀÍøA,•ØÍÊý’Ràkäv(gÆÙ»l9Xx^(§‘¾«˜+ÒjÚz××1¸ÙìHÎ#áUÔ+œ¦@‡ h«c®¿Žé+6Ü»Ás/j­˜«9[·Îêž:Þ/þÑo[ÀÆœxÁé²N7íå«þó¤ý´±ä>¦’j<˜} ŸGƒ´òÙjuM¤ÕþØ spF‡Ú}–PPT½t‹Z3ÅÉ[¼éóЉÉØpwz$|·ÿ «Åº;;YÒú¼Ê×¼ ÷çVš_R¨U|€ò8JÇ^žÈwç5ÇlósZƒã§=*¡1Ñð/9í1Ø'rDDÀ7‰éæ™àDbÃg–ÔPÚ’8üõá4[i% *EÅ­ÚCÛè…8[#M9ãöü>DûáŒÚƒß>usjAË4ÀÓ½ »ÖÓèW;‚¿$Nut,ÿç˜?Ê7K/$%ŸÍ }L¢öºN›/>ÄDZÞ”ÝÞŽôð\å?L{óîz¬ºÌ2µ÷å2‰LŰßÜ™}^Ô+‹DÍ™„_XªAVËlZ|‹Ør~MøÆjí£}ºEg«#ʽ"8!®Ðßù?éæuJ„é…•fHWÈ7c aÀ˜]GäøÌ2%¿ÑX ¡rˆŒÁù·Ô¶ÒQN‡¿O͸=Ÿybèßu‹UX*­ Uë÷ ¸Ñ¿±Pœ‡«Âg'jþÐê…1 JCgA4²rz‡DïbGzg®ÂóG`%"©ßï–Á¥>±Ý+OZ ì˜ÕÒûñ ‡:Þ|êicD9µ$!§ðU,”êŸ(`vP¬Äe Zý:¹<4ÐÕÑ@ëý¯­Õö¸~<5=¸¡*a°û¥°F¼>ýŒA oâï‘úz¦nÜHìæLÊŸÁÛJþ÷x:xAïL¹ÔŽ¿–jU²NY͈ܠ¡YV+#ÐR¤ä™“³éøÀçÓI VtxSâ—ÌŽ‘´¸aïø×štigB}ùnРCnÚÌYµuÁ‚,éµ >}º‘ìuS~Å(Þ;p,BŸWÕqí¼± qIŠñCñºÐÓ£•½Gú6žÄ^â Á5„kÊ” ì&ÕhQp’ÛpÛe‚/nNß2ÞdœÙ £õƒ’\(‡D—Gý^û6^æËâÍ{r(Ÿ&¾ÞÜS);æQ߀~i¨ðô\õqòh›V!¹áÃZBÑEÃý¦ùª7;'Þú…sÍ ÐX²×f|¯:l¯ÎŸoÆçpgø{¯£ý áJÔŸ\KÑ_Ä“ÞÉ@ëp4bpíîÓ…ø0Ù¿CGp qÁ3—žMRìuÑq‘ ^M6H"¼Îî¢]tÚo@ÜdÌDRB·ªØntKŽä»D¢Pô¡NáêtlœåN2ýAiø¦ÎM@B©x gjñ<·…¸Tq§:Ldi›yŽRÀÏqäFÁ”ÃÌ¥ó¬ì$ e­¡ÚÄšdÅT>@·¾B¸Ž;_1H¥¸C‰ö¥¸çGÖÉÞç›õOt\ž¹r¢> {^¥€Ô×=Â|ù{SïNÚd& @Cƒ7'}EÖsò)ea×7{³!ƨjÈI®®*CÍsÎAyZÐ}Ã.OØüŒÕ³K^ñÂöŸÕ‰þ5Aþ<3fÓ¦THÙì 2sK²§A+ÚøžFé¸t„5Qý%Œ‹}XìdDÔ·fÜç¸cºÚ½«=PëBÈŠ¡«áŽPKšñf;ÃÓJ´û®[ÙK]†>LõX¡o¯ñHuO‚è‹ Ö+{+V‰Má6+)h ‰Ä§ F°Ú½Òì`€‚‹¶pŒS^ËB\-øÎü4äM[¢ !à=§T V†w¤Ï¡Få§ÒðS«©N0±3@òºÔ6ì*æ ä8Ô°Wª)ÒÉ ™VxPp‰—ñyÎ7SS·\oÃR’Ør—0LÁsè Z±Ï O52Ñ"’Y¥ WLŽ­í©dëAˆ^L(™¶žâ7±àª<3-ýº…mŸ·õüväì’ëó óº–*™;ÓÏ8Þá»GÄ4 BÊÒ2ð Ñ!ß¹Pq@^®™AŸH‘ý„Y?òŸÿN‚úÿt ‹õÁTñ ¯©!ôÁÅ1 sËÄ£TÕ>žÕÿø ðÜl/Þ%«]퀹%íX,ÜìO3/áãü‘†LWô€ÀWW˜X7ñÆ’ Wâ½>cI„-ÆYylÌÞK"†aµyþôË3¡¦ÖžNÇ£[ýÀP*jì…ÄI\LÊV$ñôÊÔâ1úûÓ©»Qe!ô8+¸P4K½·Lдj—ň7éõ'Ñ]Û¡GbmÜȪ üýŸ{HÐ;“¢ÚhyßOÑsÊÂü@r‡ÏøÈuT‚óÒý¡„Æ\8DñNüJ~_߈ž‚a5ZO*¸U¡­‰ú¸’dÇÿØäèuQ©­Ô ¦K¶í *(¥B‹n"ëpî?‘º‚‚öÜê¯Iï<ûö¹(‡íJî@ý/CúJäÁ /%uœÆýél°é$±=È“Š«¬1/Â&¹h¸6œ~ „Ò-I:Èa é{[Õrpà|ËRºÏñÝŒ~Qÿ1¨½Ê Á¨ €dÎÐáÙî(@ã¨êÐHÂÀ” YhEA`È®³;)SÑzg°çÔ3 +%pcÄæ"è¶)žXhGz(ʪNˆ¾DÕæKˆ©G ÛkÀx õ{é§F–¸..W}¡¼˜Ò‘)/³»ÝÆP˜‡ ôc-h¦àµ¥QÕÚ‹I²æú=LY²iì¹Õ)DWÅJ~½G¶Êðb#¸(w¶”;tÕ2²JíÞäI%•¾R^»Úy¬hXŽ}m¹8 c!6n#yŽq&ëkvÌkl™£G¹Oü½cVjøAЋ’øŠ¬î‹W— ÇJè Ž(_Î\ñЙ?­—ÇdjÍÂÝ—éYTùœÆÅPîÙ`h”šdO/ ¦hý€(é,úþÎ{½v JNòÕïžïíÁ4VÍŠ¢6{ÐGªÙ>ö{WjÆ»hG¢£ŸºUÿ"D±q'hC w‚Vx #Qu?DëizWÀÆ Òô›”»4íXâSË_X*nHoY^¾˦—ª|g^ÜfMÑ%V¨®‰ùXG[_–ódÈ%Š|”©OŽÝê“•æÙ†º‘ ®7b/–>=îfY ²õ[„Ö£÷­}\¦½ê¿ݸ`ò@íÕŒð´!sÓT/ L`>•tÑ]ÛYriº÷à”=lípf®¥(…~\æ7Š.Ù$ÁàÍAh É¬E´Ø™É=‚Xs±¨FăÚä+AŸyá#8wk—û È¿J†7õ!cAâþבÖ‚u¬a/óÛA…W¦ïŒ|=uƒ ‚Œt„P–Î&™ðV’ªÚ‹Ì/Kó™xäúš¡A°£ÓåyÒä5eX^××ðlNØüÏNÌ$íÝš+Bû46:/IŒÔs—úÌ,ªúB‰ö‚Êãž?ç¨ãtHåTñå§:Úp­A뉋4?4ç­¯Š÷sÉhFg+B[ÿE1ݦ¶8ê•$>³™ÃÛ¶2±ê¨y_EoBgèûŽâÒ QU¡Ù;Јw«V+£/ß)ÐX_¨sŸö´PÒ¹O…Æ”£Mã΋Ê1þêäÿzÆ0-Ûã(&—UMBÇ|xçg 7míj¨‹×ý¥¡U –L¢ðX÷.«¨ð>ˆ¾*BH­ïïæ©~’¨Û·ãOÏM¯Xμ¾È|¼AG#>®ˆ`©Çü Ãl‘ô:VüÃ×\ÒQp$/~¡^ÕþôÃcùº‹ „§à{Üú#·YINSe„Ë%jˆOïE’Þ4€Ü¯@UøïÆçºø!Â^`³<“™‹ÔÝÍ’%+D·Æ¢¦ZC©1‘° XWÁ<* 妔kgPÏ;æð|Þv¢“óXS}M†I²Á>W"€Êì g/hÓ·':}IODüÕrÐT*’9™^7{›Ùœ6¢Ñ·–†éIíç¡¶3élè]ý.b¬¤øÏO?cå`[+Ü7ŠùNan¡F µw‹'Ä|ý^–ÚéHTxǘ™¦÷ºˆgmÚzBÛ«)Äe •†ìeçÉâ/ÆÐ×(¦2d{Y4++ÿGëðê\Åwœ¢ÜÚÍ%‘ýÛýrÄm3èA®—‹Æ:94ǘ‘?žÓ6z¿êî'ÔÅDâwŒ(BÙ§´gkJ<5¦j×ÝÀô1w»'aj®ÌÚµÊ~òÿùüRÇÏ3ã‹7£üø„ÍÀdŒR´šr8‰dØEîƒlâRàì7½Çbvpjç~÷`@ºÇ䥈mNÈx‹ÒZG‡¿ã†Á#fÚcµGÊlÏŸÝD×Çk­ä^>+e­åh:/]š«|7a uÞÈ›ik‰†&>AOiÙdÍ­)9!ÀÀ¥ITƒô§]A, œ\ßБlÙKxºêz¦SËj¹Py|³²·®ãJ2§7—…ûØîÎÊêkÆYœ.®Yt|ÿ^ë”ÂŽ¦0•Z^ å œ\³à)kp Ó΀µN†Ë™Ûßvã'êrÁAàÛ¯ 3V±N¶¸X–›5±©íˈ!ƒÐ«?ö„-Ê4c ¶¼^,ìÖ‹™}ØrG–ǹ¨LX\®“eÑ£!6ûÍ:°ãi{€ꥻ¤Ö iì$/r~CZmÈ»×½4¼/<ÂÇÝrRUhÀÆ^™„U³|è½(RmPÉëœàÌq—QÿEŽ›Â‘WèT#º_ÝQª-¦:‡iÔÃ*¿i ïNÈ—;3ÉÚRÛf·CÎÉèO^t30clÒ×ïªS£I¯>rµ°E³„]˜5.×T( €3DËL ‡óå°oÖÊ@¹1 ز/PŸ X‘Ã_ ·m¡º ÏIì171.Iöç—d$Ã)¶@?ÕeTŸ[¼æx2·5duv³G½Ýƒ­™ô¡ ¼^@Çi~§Xœf'`AL@¼IÎïûïNkLx¢»à†¬ÁöþQeq$‰±¼.GÕ’ß&¤ûÎ4 üæx2‡;¢s%Ä^›>ô' 0aÁ´¬Œ^£ûN\)F¤Y…!6íç*"l‡<˜³µí ­Üç‰êÉs˜¨Á‹9FÙi~$#‰eÔC45‡×[d»¹,rY« Gb}¸€Fgíî®È$\'ɼJÎ(v8CW(;B±ISÄ Ì0¬Ÿ7¢,åÊÿVå­ó»µë½1Ï—™‡'@Ì[¯þ¨ v÷¢ endstream endobj 449 0 obj << /Length1 1612 /Length2 18409 /Length3 0 /Length 19248 /Filter /FlateDecode >> stream xÚ¬µctåßÖ&Ûvv¬ŠmÛN*ÆŽm³bÛ¶­ŠªØIŶí[ÿsºûíqnß/}ß{Œßšxæ3ç3×Ú$Jªô¦öÆ@ {;zf&€‚¥­±«³¼½½ ÐÜð×ÈGA!ê4r±´·3rò4¦1  €…ÀÌÍÍ Gµwðt²4·pP««hÒÐÑ}û/Ë?!cÏÿéù›élin üûá´±w°Ú¹ü…ø¿NT.@€™¥  ª¨¤-­  –TPHí€NF6%WcK€œ¥ ÐÎH0³wØüû0±·3µü§5g†¿XÂÎ#€³ÐÄòoÐÃèðëÀèdkéìü÷`é 0w2²sù;{€¥‰«é?þÚÍìÿEÈÁÉþo„í_ß_0%{gg'KÀߪJbÿæébaäòOmgË¿n€½ÙßHS{×Zú—ï/Ì_¯‹‘¥3ÀèáòO-c ÀÔÒÙÁÆÈóoí¿`N–ÿ¢áêligþ_ ¾œ€æFN¦6@gç¿0±ÿ™Îõ øßº7rp°ñüW¶ý¿¢þKg 3Ëßš&.k›[ÚÁ1þ³(Òvföf¦ÛM]þ§Ï èô¯Qÿ³34I™ÚÛÙxLfpŒ ö.K¨ÿïTføïù¿Aâÿÿ[äýÿ'îjô¿]âÿ¿÷ù?¡%\mlŒlÿ.À¿À߯ øç±1rú…ÙZÚxþþ3Pøo’ÿ8Ò.F‡!lgþW&¦-%,=€¦J–.&3#›¿“ú—]ÝÎèdciü«è¿†  gfbúŸš…¥‰µÝ?£gÿ· hgúŸäÿŠô/êŒb šòâtÿù¦þ+Jé¯ö.jž‰ýVäíMÿ×á {€7ýßHÏÂÊ àø[‹™Ù÷ÿPí_0Ìÿu–7rq²ôèüm™‰ù_ÿßôþFÜÎÄÞôŸ]Qu1²3ý»^ÿËðÛÄÕÉ鯪ÿºñþŸç-:è4[]²7áýa•ž•áR72!¦3ÐÇ >âPÖ¤V\Pkß럾Í]eø^ÂÐ<ÅóÙá¹xêð±/C{0Ö‡eCÕ› ¼, ð%£é/DÝ ìä¤;bÔ/CÌ8ÓŒö¾ZÛ‚øÎÁ¤q°3¡¬¢_úE8ÕÉêsõD@æV€Aþè€äg’Ö‡Ù…Ò ‚V_tzF™tüôH5ôktd¸÷²Ÿ.7–‚×Û/å”$ÙÅÓÐé¾ÉäòÕÓ}‡W9¥œá,¹=ÚwÌ…øJ{X¸ÅBx$<ˆ³°Õ ‡"cVÙ?wÈ¥B5‹åWIAñ’D ÍÔ@3ÓÍ$Ààê¶–‚f»­É CoËò[6L›9?ÇúA¬€Gù¾GÛž]‹hßR$Çn0ÙÐàÁÍOR)žsן16¹þ}@ë`Ü%2`‹ï*X„oïäœÖXŽ@û€\¥Ìå’ -[>½¹ñ4 Œ5²ñÏëtrß`C>>쎜ºð¦ æ¾ÓÈ2Þ7=ða ™ ÑŒôëôÔ¯®Î6ÿþVs"‘àx Y¿9òÓ\åq¶œYº?QV[»Øùd€§tÁ¥W²o‰4êT0.6rn[Š×£þ]É#Jæ)}ïu¦|Éß)L.$'C¸.„{/“Ö… EV¯ÇYVðb w†$ÎôJÇÔ÷ÅÒ˜/ø ϺøÞ€ª}OqÇQ§vkÅU-N§§ ø~yV´0 ʦlˆýé‚®íUG}T’ïŒ:ÌÛ/å©(‹æ~e¾ðøÔx-‡MÕ¨QDÒ‚Ú 9àþŠÅC~Û&Êã’x÷ý©V5ÊÂz~õ+ò(­¡•²’fÊÖÑÛ¤NÚzIû0°tzùàï¦Iu8ï~_ÝÖÇŸßà•¿²"³tÌÊŽêöŸÞéÛiKèl`å|0øYJbøÌkÂÈ…`ž¾Õ¶/)ÑhL”Çu,‚œV&¤o«±™ñè>Õ$Êúñ,{²M‹ù‹Ù *פÉ'Ô"®®œøqƒµ}üÚnË÷N¡nÏ–âϦÓ-×Ùu1nZÉþšZ©µæ‚Ö&qÍ·|n©6Ê“ùu{ž‚ÜC)^–«Eoµy_I–‰óì–ÚkFá—Üþ`ã—] ›âÈð÷ØÂÃkY?ç}I¢8Ùß|•}Ød>G☰úeÕ…•Õ¸vîl»ÐwpÔ y^tß‹ƒˆ¤‡²Ì\A”-õÔïg2!"0&ŽÇCjÑ”vˆkA‰©ëõ˸ u` Ú6¬|e¡©èŠCcŸ’ð¤k;\ÊÜ»6ÞS¢à°÷µá¨‚à•*sUèb7XoEÝp+ õ,6H û·gËÁXMÛHŽ:‘.>ýã©é•¶CИûÄTì÷k?FÕ5s¹~’ “¼*YaÙBòcô™8ÈrÅæ׿`éFL5 /Ý@õ½”[õSù® °›éG¨ýÔÞùVý›è¡ãþT\®a´¹¥éåu§'\ÄÚz!’·1õò>ÑíÑp/VÕ°Ö”3a9« nb]/l)ÖyÆ×ÐG€…ÞkÅÏ™SÉU(E0òtÝÊaé@H2uN×ýòS­Ø2ýtf#?‹1|SL5ìKIáι纗|Arœ|¥—-@#Nù^ËTH#Ài¤é|2¾ D4óϰèþóŽnSrWoqãð–>xìN­rœ¥€D¨ûÙ?6e7Òù֑ɺØQ™#[tqj+㯤Òá´¸ÂQF‚éa^˘õ.‹X5ãàC”æ£ ©â‘Eµö˜zXëâ5¥%Èy¡ÈùR;S¤ØL€%µ¹|Är+Hyƒ´ªtÔq˜ñÔšÁÕ tºP"ÚÚï’Ìå»ÉÊ­À’X*ä"Éïìf(JTéüðpsUŸ7'' Ñå¸y33NÊ3×BDÿÙWËr¥jÜî…õøÒå Mñ³q ñ!a7[ªƒÞõ¦›'Ó¾(pž9›„­Ù„ôé Ë!†n÷7¸\ËL:¤wã×wNžyY1Ab0A‘çRàJ¿ú,v’ôA¹CФã9'$Xv3Z:{Ñ®ŸÄC×ÀO´¡yÿŽ•S:·©4r‰:ÙBþCÔ1óͳÅ=¥Piyv7ʪ;0ül(ýÕШŠKÑ®ì èüúÁœ¼Ö²ÑÓ§¡ðwyÝÕxé\¼2C¶AÜžäæI\XÁPŒ»?-¤…ãkðÁXêð¹É”hƼôêÃùB]&ÒZF™S~pÁS»ö º¾E„˜ŠœYŸ¿$iÔó*ºü>tVF^bz{îfŽÚ^Äø«Z°BØM”"OН‡cw­ö=[}1?@ªüi Ù/S%´ZJwÜV©ÎC$i¥3l#$šgpý¾ÜFÊ.kÔÜ„2Úðkƒ1Æ*ÛeÁ¶Q~=4°.&¯¹¶Ã;ø8õƒ‰×4@¥Hnó~‚q‘ ·µô`Æzû%碈8í7ÀX0œ\½’Á›Okn3Ÿ¤,'¡ØÏþu¦O_a˜r áÍëy²Á®Â•8kþÌ8~¡ô20Úâ÷‘öóù¥¿À ËSÍj¸Ò"N"ðØEK\J¨,h–5\ü, DÞ¦I-¼³aœ€ %ÑÖãÙœn/I%õG$L•TM+4¢ëE«—G‰|9¾ôäz  }8‡)ƒg© @aêç¦âû óöw|t%¿„¿ÿ©±]p VƒÓ0Õ¡j‘qKKkáfù/ Å¦R/÷ȇìx L‘|%'Vá.T À° K?{eB2-º¡ †bŸ¡Ðü®sl‚IÒõfçöý[yÙB7ŒÇíjõ h…Ùh 'ö–gi!hñimåã¯|n£®É.ù0t!s˜!m¹³uÊ뛾]!Pà“qsÄñôj“Å·’wã%F‰ÇuÑ8JdŠFî÷« æ ²HNuÙLëÉõæÞçK!ÏGÃvêóqDÌ)Lö¡AkðgÊÕ…âMÏ1ƤԎ*l~-÷$³²…ºð?²RTA¨ç/ð1ê Ǿ¸OâMÎH‹L¹óᘢJ’ÐÎGIÌЉ¡°§ÄÜËé[³"”@cy£À8ΩFnˆ×_–ù ˜¡®®?ÂÙÉ<6ZþÜß è,hùMï¼§õ!庚cׯ–\ª‘¾$ÚèŠuv‘ÛfÕÛbXž"PDèÞçòkÀÓ‡%hÏåSÿôð‡Ñb(¿Žµ „é !ÜYò„`¿úü×ÖóÐÆ•/·êe†Zž¥!öDއ2 W‚f>1†eb,ø.œg·c^qú9}Ê{ªÿÑçæ÷KþFÙüÇø!Ä÷ÂÅ·˜nªâô+9mõhbŠÇ‰øU1»}?—³§Q\'i-ÚAŠîùÅžŒ¥cÎ$›Va ¸Ó¹&bôÀ@>y€ˆf–%£•Ÿ¿—Îl_¹¹ksê¤VÅ×Mˆ•ô»m<\9A)DLûDŽF+ë嘅3Õ@DrIZ0€5ל…l†¬äûaU8)äquß‚²_òIOŽÉ[z±z±C^Biáqá‡&-­ 41ñ{»„ó eD«Cê„'Šw¦ðŠÖà­ï8ÅTƒ´TŽ˜9åCð`Çú–o|SÉãë_CY˜-b­7iâÕ‘èŠr²ÔmšúðMÎÕ0ÚË8/{)gÞÎÈ“{5LîÇÓ+³o‡¬hA0TFõR^v„¡7/RlÜk°\ƒ5™Ø÷…E°5°MZ,ŸÙ¬¿¿ OÛ¦&³ªSE¬ªÑ&h<Œo(ʬAA ^T¬•O¤óC–N8Í1ßR$HKªOŠ«¶´¦":ïF•ÉÈ8)E0ß,¨¡ÔíW÷5ädWv>²ó”ò¿ë#0\ÎUƒp˜ÖºáÙ‹ž h+ÏB.©«öÎrjBltSgÍá=[µí-…NtŽeúŸÖªt^èââÏ}®È’×’òá &’]Ðõ,¥–ùJ?½»}W T·–êU½˜J¶†E/vPþNÇË ³ðx 9Ͱ¿Õ÷ļ!Ëý‰(€ §˜˜Ø· o@úÞ?®RŸ`žgªßÜ+›m¸4‡êÿè½:¦u„N”|·ùÆÃwäŽÛ#š=ó Ï¿:ínº_Wd»ú&Üp•«ö¥þsÍÌ·ôÖÑÓ¯×wdGQ^É–ŠV‡UWˆ8VÒN8К”Éî˜û^‘~¢‘ªÔ;ë^³úcC>_Áìk°«UâIz}¤ ?&?uËÛMXaŽ,fËE÷à+ Ä6ö¶YJ½­#í ¿Ùæzæ+M©ã³–m3`%Yrx‹jûlÖczDûƒßf À= Ù@†<×"áeç`éL_kº°$3‹Z\$TËò(#; ÔÄ¢ùØT^J3oãÙ3¨X÷@©{m’1ÙXJƶœ}"sÆ Ç'aÊq\&Ò-±y瑉œÔÊ;+*sqó[Ã0ÄOsÄÛñ‘˜Ö²šUÀÑÁª=¬¯s¿ZßÙx²«lɺgê6‹±·g>±hXhçâOòSÀ ý׈9ÆÑ™RO“Cú†Ç!UÛ3Xûï/Z°ha±íºŸôsPlwYEú ¾úr¸‹©ƒŸùl åìÝÊñ0!mÊzÆ–E*=bÛT½\ÊžÐPj;”Ç0+‹˜}^¬ ßË9ÛûZ%±ˆtY¾•T0@ôÈD•fOW÷ç.†Àб™A®t7ÿ M&t+|¡µü=ÿUQ«žÃ$ºŒ¼å¬5Kó ²†¾  †&C`Cá¬fœBª¯®ò iû=â{ ¥¡HÃL¼9(Œß"Iå.óý—ð¼ÄÉÃÏáðé$'²w,i~©pó)âªP'·8žÚÛëçʯÙ±ñô0§Æ{TÓ |!xÃ(}n}‘¬3<Åš „Û²u\U+$6¸ú¬&–çEˆfäDa뻡PÌ{`UL%7 Æ/+«ßÑ*ü¯Â=…Ž.*Ùºmñ\ƒ9®ç,Ƭѳ½dÜHgÅz…ç[(o gW´ãü~iùEB[ädÊ#zŒ&õUÝmÇ£8x[Ž-¸iþÌX |§ µÌk•lLZ<Ä8‘—•m 2ƒ$jÕ¾¨aëöܘ1ì;È÷ˆ¨ ïeJÛ^n>òÜÊÜN¶1½³8p®y–KHOþðKí„v×p‘ê­ãS*ívé´'(tM †²ŸÂÏ$SfÒÖK¸I„‹Sʆޱ¬Œ…Ð-~Ôä{‰r‹”Va2{²">Ѿ[˜ •=>Ãð¿Z‡>žBS?:—ñ1 zËØ4¤ æÃÓžY6÷ØtµmgáÞ7|–D¬["/µæ¦3ȇ/F c K¦•K ªÊ*Y…Rt–3W5Â,S¡Ñ!_‚L­çÊ}1YŠjNé‡ú{Ëœ+ ŽècÍbmGëR Ž,µ6sA n‡Údl›¿¥¼uj+qcsüà|ÈBT®©rˆv¢#-iVÑFûœ£o5˜ô¨¼{¢$âߘö¢¬Ôby¦ðÃÖòÏÙHKä!Ñþógñ›aPø^<ÙnŸD‰ùL¹{™´?œEýÏ Y]h¹û%QWÒ­~¦,8V7⸻LxQ0*\áëÊy*vÖëCŠ9ß(nˆ·Ô¼['ÚHÓEû{uŽóêÓîËÌ÷mFŒ˜†²?{&}пVkLŸ:¾ónñ]:.¼´©µ6·µþîÜBñÞÆrŠ&òHVmáÌ‚‘ÁyÐÈlZCzÔ£ôóâÄvŒ8;TÎÜw¥}N%øîÜ%%g)qv[+;kUŒ_U™A¿ÿó<#FcÄÈÝÅäJd&€Ô»žâà DP1™¿¦—1ÜŸ"L+4㣼FÕÛ {ZygrÒÎ?/²ØŠ„µáçÍ=îÇ{"ÂÂÑö‚Ý»SÛ¶% =ôlV5ƒ<¥aÛ³à ìéîjÃYÏî2\S„àϤԦÁ@öƒNÅÉ;•ÎEmL{t~‰1È@I)µF(‹,0÷ Mxt©1s´Ã&ЫˆEiÀÏX¸çÜÁ;Y€Ï ŒA¿D‚¥b­…ÏšñS ¯û´ƒE;¹nÛ0º*Åh-Õ ,?è´©ÜL=Ç ›ïž…Úm&rˉyºÍÊH“åƒ@ŽTª±` Ü) ÙyåF8¢æ‹w_Ådzu ™{çˆwFL÷õV°ÑÝœÂN¦áFÄ®'j-ß¡@?N.g·,’‘²åÛ¸á=Ö¡›óŒÙ+öQÈ>‘0+†¸¯·i€î9q‹œïxŒS(}XmØ yãtÃÖJî•ÓfAª°Àk—ruT‹™("¬‹"wUïÅ ÿ#"® ø&yôÛFªÄ6Öál;­êlÕJ5„€‘IìJ,cgtÜ­™TÞ%4r_:áQA«÷Ťõ$îq«¯®Îj\3zòµ_œ¡añ† Í“à“9Û›ƒ|ªð}ö‰¸’BMtú¬³q™TÕíûÓž¤ÿ‚mï¨O³¨D×vCä=ªl2?–ŸÝˆš'âSY ;¹{ÜC—»/¤&Ø Uj(éÄ€¿ë½EP²¬o3¦(Wr˜{ÿµ#6TÏ“¨É. lt—ä Ä‡@¦ûž²SÏȽÖËe¡YõÆl_H5½á+'û,ioÄH$#päxEm'Z²wYá=z)+ö”íA,tSó°³Óx'Zôu¶®€–nU6áO<ëb]7W%˜äð%_ºK[Æ7cM &ù%ù‰Üî)Æ¥ZËóZM6‹­ÏÊ^^ìÑx>u˜Ž²ë“G ¨ýŽ‹°Ö¹A'jÏæb&4ª?êÏÉ!X졉 †’Ä•Ã/pBH6oqÇ%šuÚE,;Ì‹2“†{XÇ£]Ú½™hº‹í†éz8ÚôÔŒÖû„ð÷›š¶Â•‹'Qߨ´eâBGÍÑžƒñ»4’RqE-Ø7ìÀ= žf Õ^Wo(µ³´kvå;<·C>È Î>׳ÐÅD¿^pú+- šîÜÉú†z‹·LHOÙáÈ+iZ3šÅÃlœTËT—¿ÑÓ'VF)uæ?f›ªYµë“ŸðÝÙÔ¨Í×û ã˜gÖ6ó?–½î®‡ùç°H³H¥ËZÒ‰ÖNÚÅu#Íg >,Ç”½ºõ‰Í_íhþà<ƒô¢¹@EÅ¿›ðMár²&êûŠÁOö#þ/H”gQ±,ŽlÉ{$òDÃ]áÒœºxZùêk±´Bë7µÁÏE/èC{mý:‡‚ȱñ+Z*\–'ØŒmݸØÊ7Ç Ös›Ñcu?Á¨fÒ¹¹ßQ®è_2pQ¬â‚zÖ Þ{F Ü—Prç¾aEk¹æw¤Î~È!¸Ü0ä>°u~ žL¹A©x2ˆì3fº>Y§LÊËøIȤ=œrˆ …øp? LL ½¿Çéóòv˜P¶Î§kŠyÕ°T*ï‚æÏÙs¸<ZÚ´ºYÕ-"2ìo¨RB\ƒÒƤ͉܇¿“Û” OìzR<ßFV6•¡“0†­óFZÐÔ•PæˆêÆ«eBU9æYÿØêÒ‚!t'cÁV6‚ð…EôJ¿þ3z*¯ÎÆ8z›1þÔ!O°ÿ<ùÊϨuåâõßñ7Ä­Âg¶EP1£ããL®ÑÜ=“ÑÐÕ¸cËAôýAÅnI™²WÎïUn2 ož}ÕîÆtH…a.8a†á¡aX;6ì’oJü±…âæQeïÞá‹C¶• ’дñÌŇĿzG¾ÞÕgž¦¤Õ…¾íΙ·B Ó¯•í¦‚(ÈKw£®:Çò¸˜âE¬ðBO0y.]3¾‚Õõž;ŸÐÇ’nA°Ç r,ó) ܪ\@dòƒn›I„÷è‰fR]L?s±±ð¨¬X^^%Ž–âr1\vFWÕ!÷æ¨DÛ*‰ªUúèƒý‡V⬳uç8í=‘9ß3ßõƒñœ¾;Ù«‹çÖ\—sy'ß9”±$»—¨,ÂiÕØ. úã¨6 ‘ ÷Yçh3‘¯Ò?•¯ò)2zÂjdöù%¾érœF8ó[è*Ï —X² 0ì+^]e©Áe´Â 西ÎFÉ×àÿöO5ÙÚ¦´ÙÛ3ÿíP¶×¦YŽîÐ%$C€êû§ñÔp[R¸šÄ:ÒC³jy¦^Pç²e¿„Jm…·PŽxãƒ"äáùþ¬ƒûÞj¢¿©’ßÚ¼Ú蛌wQž¾ð¸«*C˜)ÖI ‹.Ší€ó7£ r^ø¥¦T‰†yðç.þ’á0 ù}1ÞPA ŽZ’P˜´È¡³G¢7Ù¢àðâm^·n: ì›l¤Hì- ¨*’"?ÂÔ‡¥ºÝG ÿ/Ü’LÓ7ïFüÞ'´_îkЧ*|õ·˜üºÄ–¶uÛœ3Œ rԣ锋S»˜ìVCÌøm¶7—,¯ây(2Ô|ö…݇”ð›x/P¤i)c‹‡ÎOg>BŽò‚ídüüº®îq|Ú²Tš=¶V >Ÿgþ†Yfd=þ7^µ`Œ4;»~¨oâœ~Vpš›s½‘G“9µ¢‘ú<.lZx´{šæü޲Òk×BñÔ%ÅþñA+mËj«Ðв{UjZ•WÜ–‰µå0ü}?í“5ŠºB’Dõؼ÷ó] äzÓ‰LÍ ÉÜ„l"Ñ™yŸ eÆ?5’®jöÉÍâ0ÝŒÍÒs'ã°=ß•GpÛK¿¿YàØ\Göë½ _1ÿ“^ÌÀÛ`E¿$6ºÚ©Ì¢ù%ì¹Ùáv´¼mèhDï&ϨÜÈÍóí×7I+]‡AŠ[>ý8q*Z0ØÙp“—so&·"§-̱{wÆ6h\ÜãÅŧ+”DšSpƒC— kpC’¼G'wcL¸ì¼˜ ÕÀ—v?&ÿÍo/–ÇI> iµ ٘㕕Ì=vh`šÏ“y² DÎN»ƒªÆ9Ø)?žD05Á¤‘ã¬N–ijÛzq|æP~çÂô•ŒGt#5%ˆ[“¹°:-ZòK„lcé¼V­è'J æh½ Øè·€°®{vÅ0#½`Î2ŸØÈµŠÀäµâ½MrPÛëÄz«o¿=7˜C;Ê‹íPÁxø•#C^K³áOåõÿl5wÞµµüIñ£iY{x~›4‘p?"ûÖ‰è/0•¯² mõý¨øIc¯YÞhÚ6õÊBÈŸe«6cór3ðP¥žÍÑò™þ€·#uÅJB¼rÅrJv—V'Aâ%õlj±R ˜µ»SucÅzfA©XC[­G–Ž7vîfu-®]S¢—ñ ›=ßë}¼ïfê÷º(KŽ:ÐmÿÉ\ºûE”¯Yq¶1^å…ùîÓ(ÒX«_x^oýá;‚mVÞ7à¬æg,ö öF¨Ã“LwZïÑ,¯£Š † ÁqZ8¿Ã¿êuDä81>{dXÐA›‘Ìbªê¢}m~ÈÊãû.¯¾ßC°Ÿn¤&œOï- ÑûtµHÕ=<˜öwÇÎþ„+·Õm^XŽ`àQå-õüк;Ü£4 Žis'Š+±Z?ÎÂ/EOë╚³ŒtÌÊ›€•” ×∕×>á;°Y7^HËжÅ{B×€8ëÔ¿êË0ÄV¬³uŒé-N¡ƒ©'K‘¥¯PŸ†Ï°Æ’>9So¦6œ=$Q×é*´I·úm騰 ÅñvwL—¼‚g á]Ö‡Ýn.OʚትÎ-çl&pÛ«{ô`yNJêÅ4/…c”㤠¡Â±«ì3­ÄÓásAï ÖIë:%âå¿1™ÙhDI)ŒÙ9ì µ]‚qprÁênn<+øÒø°ëÉ4óö¡#\)?ˆ*¦ƒå M¿ W Ò¦^l“°w+爉K%ƒsã-Þ¢êvà×ešCžeî4ª„¼âã À=7N3}Gª‹ö×<{=ˆ³»Åðé߆[úIQ™ÆÅÞÊûšbbÁ¹l°»ç–r³ßàÉô¤Ž Zɱ MÉKqšüÇ=Œª80A—õ<„ÌÄ´U–w ½rËÓß°o ƒ…n‘ÍÕtÈÛ ŒìWLÀ¸ÐÔ‡G¡ÇÕ ©îP|дt¸šxñ¤k곉¹yšä<öŠy‡+8—#&~o¦üÉEÖŒ£²ª'4}Šu•ð÷9¹Øn*U—CH ­r}ް+—+˜ÞY4ä ¦Üﲄ:òèh›Ç[ Ø×¸‰!ßµø¼zsMµS:S™©¼*”ÿ™ñ‹6$Ìà¹ð]¡H£Çil{“XðÝu ÇB`Sš»Ä0Q+ÅE³gw?öÚL³N¢0Š,ñœ# ¹2šo-À¢¥¥ÀÜ"UTIUpˆèC¶vçë2ô0VpNõXÚîÅ“Çð>6§þiiš‡ø"±èô—f¼>m‹rÖÉÖI qŒg)—•§`ŸJ™‡`ª}éÍyï|wƒ¦ñ¾­ ›ß5Ý8zËÊ/dÔ(z°ÎÖ-½öu3üŽ)á-a·Q¾s8¼q­r AR(͆ú™Ô¾ø™LöëG¼a+6V½ØÁ™[Åe®mÿ£< ç°¶Ljc´W7žS£ª`=”®Þ¬Ã5iVÕ±N¿Qlÿ^ë9I·X¡ ¹9Ïd”mI¨¾ÔâDt¤ñiw„ÉUçJõéfùÖÌAKm3iý¥OêfÜgÅu}Lc‚;BæÜÁ ¾Ä€—d¡h±œL‚)•YDó;r)³^6¨¹:ÛN\ŠùE´SÈP"&3w©‘þ1¯{*…ÍŽ×Õj‡¬´+¡S‰D˜ì\FÉfîØD~ó*£ Eäl“Ï”ò¤Ã¸±–ô Â¤Q¬õ#Á=¤Q‡1 ´ƒan)ìW}¾¸3_æÞKFcÓôüëAu8°ÞoÑ&ž3±¡<¯=)½œäûy±5‡ÉÂ>Üh+ßÁÍçs” ª_õñ> Œ›2Ðhµ ò“3ñî’µçi·%F0™?tÂ4ôœw¥hGËo½+ë!øùó§ˆùþt¶¡·md4Ö»‘—àNFµîúû¬³˜û×MO˜íë^ˆÂ¦-²€îAMŠB¯qˆå W˜~ÀÏ̼×vÊ¢tž®Š' E΢…KíXªÊ$¤曌;Ô™ñœÅdÂYÏ0»þQBØáëWt‰*foÈêœÍÜé‚ÂY çFú5=É9…å¦SŠÌ’euo±€ ¢·"É=˜UÍÈ’tù g'Y—óÂþaG‹k½>²àHG”ËÝ ApPN¹›Ô‰ÆK #?±c;é‹÷¬ìòìe; b3BgxBƒ­™ïwé÷is^&êŸÑc€d†ÐaD˜öÅPlßzŒu1KÆ| ÆgظÉúf„“Sf4ïð„ÞqD¿ÞOß߯!CÅc‘ù5Æ¥äóm]ÃôPωQ ½DQáÃ¥è5Så¢Ùôüé›™® © ÛÙNê¹yv¥Û³Cà|wßZ>òa(ÕJòæýA—#vO )ÁÅ]í$tî‡|íØãw¡T•‰ ,•3ÅétÖâ_©å-”À®]JÏÀqšÄ>jÌÐDýI ÉœÀ0‘WÙçÃMöêLR–gýÜðïŸn™`£;’)3‚ÿPߦ;ç•Ô0_Xdδ̩ðB*,8ÚÜ£oíÅc:H1¾­‰J¿Œw]o9ÛX˜ÜN,WN49ˆÜ¹?“èÇ.F8ºî´ÀÈÇñ2¡ÇbþÆ!ß®s`Aœªú©Ï©t…—C£‰¡´2… ¢í Øô¹¾s ÏÏŠñÿ•#ÿ™é\»W?(™4™u_ – •ÊÒ2›|«]ÎU½Ñ§˜É¶ÈÏ®ÏâŠ!)+sßèû«qSÂ` }·Ð]B©³%m úâÊÉ$DŇ~5Û=Ø;oøX}vÙÏAŽHïÃ?”'Î÷¶õSˆgÛsk./FáÀƒý§´6l¯Ç§‚Ç.6QÒ— ¹¢·xï¬ÌV>¼‘s¼ñªP{µb(qÉ/>ë6¥ÑáþL'›Ùº%Á:/]‚02fËGŒ0ù„ýÛûïz™æ‘í¥ØsqØ5Dæ>᢬ÞŸüècÞ4«G½S½ŒË#ƒ{ÅNB³ÝèbL56¡õlÖk0Ú”ÌÌÐÖèq·sŒþÇèªû 1 d&l ; ²¦»§ece[©|H¿ô)I•:ž wŠ.ŸýäÑN¾ Öp»wJ©×z¯™È[åi›¥áu1žµ ÚáôG³üü¿dìªaõz0ëR„þHg.N×å 29Œ%hÝ…­­Ê‡Óô ÷–ÖÒÀ ÐC±÷_ÊÚ™ž™²¶f€?/w«Á•|¤‡Ž…ä‰ G \‹ ¡4pS<ùúŸX9Ô'{‰¬»Å”+åÜÔM=é౞FGcU?]zN€îºÄÖ¯øS™ú¡d•Ìü®ž¶'V–º EE#:ÚGA<½ÜœÜŸêªÓ¡WŸÃ¢ ™;߯•þ%Z¹q†¦Ál_ŒÛ:øºŒm……1šh(Ãñ•^ôöÍîVÎT;ÜE«ë‰³@Âï¤>½½û¨ñHâ[ܪ½­ý%ñ›CAü²°ÏAM¼î,®·¬ÐGýO×ÝÏ‚…vj¹¬h¢dß÷&8ÆÈ_k‰yJ‘ö[åT–ždÛ1zÊ€ ×FtËòkgŠàŶMÐÄú1VøU³¹zE|>z»€Þ.)a”Cw¨†§‹ÎÏM¾WȳÌnÆp»XWFSß?Ý XrsMSmšìmÂ#º´ó^F’ŸœÕ°xæÂ¶ž<–„ˆéŠíùßÎÙ6ç7eÝÜ ºd¼wóWÆêùzIðòð¦+_ퟹÝ=áEð$*UŠŸÃÃw÷Õä/?*àeEfDžv\ÇuðH€œO¥¨.óúxE4gÝL;‹xÈÖ'Š@ž¸·€&F[4¾ÝPɆðŸUÎvéKÞBžØ7i«„nûu ¯4?U²dDBEAŒµ/¬Ð¥º/º)ÝQôÃi“Îzçø0¸Zôg82&÷ÉÅX´í¥"(eå6¦Âýò¡¡4ù@^Mø óuˆÖwQÝÔÀÝ€ÆAÏÐgžîK/Ž[¬hµI9Ràïø#uÁæ>Ÿ:vVÒÙîŸß…Ï:‰Þu !XR)§pr`­·–hˆ^˜ñÄ_JXª6[@tõW×>7AÒ0&&/< ¼}¥èÇ*)΄Žøv®Þh²C{ï&1Ðu:EÝE¤ÜzB³‡‹lüØeôÓeŠªqHÝ7r:Ã/7 ;,¨¬ÁB9ŒqûÚÿy¨6ªZì2Ü®ÎnnËA¤ÔL º[£QŠnÅŽ&@WºGXša+³eF ¢Ù…róÒ‘5Ny±…¾2¥ˆÀNRÙçƒÉ:èTL¥Vêèg(I è³î÷dG+¤²L˜…ã\‘¿…¡U(wŠ^qþ^ Ðm9Ÿï´pO‚QýC5Šœƒ>#b Ëgûâ$€þË@x{;Æ€™×uHnÅ{¿\z~I¾ÕJg¥ ‰Þ®51aõÄ®šã‰†ÉŠ¡®ë‘æfNü}³„,£þþL–ñíôÄWT¸£æ“ Ûcñ‚櫓`Â-™tµÉ[sI|?ûîs`QÕ_äÆÄ1j@ØgN|„å·*ñž}Üú¸š8øá3öú¦$ c«ƒÆ'“ODcÂ!´ŸBžc‚ˆÀ-¤e„ÄkyJXE-V=õt`0+šAZ®I8UA _ô10~ñœä!Ø]–{]ð,åÞ†Ñ硇S²¿ÌÒâ|ƒMº·ã^RþW™&ˆ€ÖÜÚØY2àz×ê\Ÿ†É+ÓÏ%@4#Ãú廽޷Gwþ¬ ŠBœàõµ? ƒA tdªX©=šij.q~-VÇ‹ó=áKñ樷ƢԊPn–¶CþûÄJéÐgÔ{SÌzOkàˆî­Äå©/‹Ã‘¹(Wg"OÜO~E¹**æ2ë—¢‰•AË5Œßç‚­LÇØÊì¬|U 1˜¿ Uú×j›ZºŒ®^Ó¡æu˜0(€¤Yq¸hZvŒùãjä …Ä>§hÅfYwA\1|2ʘûâr¦íj€8”2(Ì<|Üßp‘¤ìå_&¹g/×ú® þV`;945”q™Lg*wɬnÄLˆº˜>ŠjCœÄÌ…•®Bb”›­fLnxl¨ôRñ Jç×F-#ºPP(‡áÌUm(ÌA%ºMµÖ?R.‡’QÐ&H³ü&‘6ê‘'j@w2['î]|7¿Ï„N«¦ZAtýœäð¶±/{X$hF.HÅm™ÑNñk˜˜üÞÔ&~r?S߯÷ ¬Ê­Êü«}CÅ¡Œ*]@ÿí ®â ~Áá|j@ÌHjw'ÄbA»››S¨f£÷õ]DÙûÈÅZ^í=ãÇÚ¯BDíǶLË©ƒ) 2XºöQíëš"°¡ˆ®|Žp’äš.ÓL>ü@¥Èìn°:·¡‚%¿xj^š')·È òÔz69É%Ïû"LoçóÀ¿÷z;m_ Çï<þ eÛìe³¤[S–±·4¢^VÞ/âÛâ¼ ¶u¼Õ—{Ãt#èU#¶ů;‹Õ;°ÏÂÝZ ÈU^2M. ßy½èêÞÖ£wVÈá™5ïGWàâcÆoHhƒÛk³öÏ-zTîHú¶m ÿˆôwÌ#;¶¡ƒ±^Ví`º*ú‡€MƒÄÃò¬| §():‘ÍT}€Þžb]R çÓzm§iGu×Çšÿ7%íéßi:ÐC#ꙣ=2\Á»2ðj‡A" 7Õ gÖjÄdš;NÆ?Ø`À Í^¾z¸=°}R‡ 4ïÂOÓÒ9À«I›XQ[½`†è¹ÌX×Q­-ÁÆtŽâ/ @m–ã®l_ã&29T7ÎçgßÜm8báQŠ$0ÌE¤S¨/Òl¡×Ûšƒ¡kºµ·]×ÏÅ…e쵿²XÏ]eü.ˆÎ»Øüå¸Úøã&ËÀ‡áÖÅœẏC¡ÝÅKX±‚ý:“y”0¸ïºc¬汞šôߨå+ ›DÚFTþÎÈrªÌÎÖºˆáòˆÅØ÷G­øæ×ùýŒß¢jækYg‘6<σó èð$ãHµ/Ï®‚3%¯™I/¬l%‹¤±5Ÿ:ä"Cd©ˆœZÄn+ScÏ4pº—`£Âî'ŽlAƒw&A/ÄlKÙD*©ÊÎÃ7KPt¦¥'£ðD®I[ÑYú‘‰D(Ѝ]ÿ.µé§ ݱΈß· ‹ò~N^7y~šºYjšÀÔæp<€‹v\¨,ää/ zÀUŠ0£”µ"¤ªFX¤¬½²‰ÛrŒö&Å8ISŸ(yCM5l‚¦—C§‚¦ùÄxo¤º6®IU9À ß«fHV¤Ó7)ƒpÌç³T«6ž9öŠX&]hP–í —ÒY@ØHYŒ€§;¹s=êù…ò˜MÔ]n‘<#™¾8œQð !èmšÀJmö'•g1•,¯ ä G;tÛºG÷6ü1(Â@Ÿ<%yÄ)c¹¢ÏâWKì3ìÌÃü7.Ò>|ŒjÁÁÿü0MœEHãê†JÕðŒ“)oôÌ¿Ã~V4h……Hä\‚éåužÜYÃÃi¡­šç®éËéH_Ô¼Z  ȃá!UnøöUr4‡Á î92GlH®„”ØŸgû,á}#ÇÍ4SxÏúE#"4ÝðÓ©‘3í6ÝÙƒÝ_ô¢l…… s'ìÇ+vV˜_ÄN~œÑÀ!Ú|Ú<áo6X#;[…§ê¬5*š=Ë¢¢™µ…$ôépt6™{ŒÂ,+T_ g•”¼âc¯B3[s¸õ*˜ø±ÙÃm袋,)ÉýŒŠ¶ÿ6 Œ¼Â §£ºRëmÙˆîÆ‘ŒF ¯,´ ¬>P˜€ù÷3M×ÞkÍõ"ù‡º!NûUé¡Rm?îÊ ò±>l½w û­Ì OÜBJë¶ûc‡7$jÂÉû!Ç\kœ¸©d¶öFÞÂÊr…::¦8Ôý4É1“&\÷hÍ<ù\%ц‡^4ì´*xЬ$Ñ$ Ô®†MSwh(*[z½¤iå®2t“òàó›Ço¹˜ô ² G'˜Î¡`·lNΆ#™]/Ðrd« ò_à1½8}àÏ ¤ë"OðNòGÀ×*QuBhrƒ¾C¦ìQjUM–2ÍŒ]N 6C\Š'b~óýÝ¡áИ \œvù ÀQàí3Û²f¸wÀÄ8ÐÁІ@dI74ç³æúÉ&Kç;ÚµcÑAŽªZÿ•æ|¼,*ÒÜ\ ­³K2ûK 6Ö–•¿°–O@eý bý95®þÏ£ÚPât8ÈÌ ÿ|D§YjÐKS8U%RÓE@ýé˜Â‰vá}.Õö·´VËÜ_Û(šÛ ¨AC÷®Aú® zn¢yy• VªËHÈÐ;Yv€Äqð+õ¸Ç¾8Id´—Á™êã)coëóeÛå§¡º€ò, S‚¥~b¨ÿ'3 Ìõ?ñÈÚüÃu© Ù¿Y©±1_œKГ&2IÞ`!¡\nJ6;bj%ïÚ¤_ðs¥ ÄÓCÚ_~¾z~5¯F&ò¸˜žÏ€ÉF½TÃS,Ö9q°ù¸˜LЍ'˜ùŽf[XøTÞâÑr ·MùûOƒ¿óˆD®n垪1®mÒxäÂÛgr(*ß’ÈúªŽn«¬1=ɹl¼ã ÙÝdßà®Eç&°æ“ /SŽa…ä•QøÕ,_^é£Ïíac±* †ôœ<“ÁL…Å[À–¬¼”.F­FáB Ñ™ «—S=@¢h°Ý²[-·áËï»Ä…YÇöÙϯ‡ÿô«@ ¸i¿n- !hÖ¤”9Žà"»åìO MË&ôm}ÊìE`Ø}†&hhõ'!R)mS‰â2›bJÿ†™+6`¸Íû¿-Þ^ƒíWÉuûxŽOuˆ=€@ß‹k]yÔòD¡G5©+rÞ¬QHŒ£tÌWóhd&ì‚ùVY#ÊÀ*ìr±„_M4hZz@©ëå™H•ì™[¿Rëq¤Ñ&6kmzëµàÕÉõj#u‹ •œ _ï*¥]W” ÈW…3ìÂ&˜oævaô˜Ò=9Tlà gJ:+DHˆ†šQ\p·“÷y/¨>½Êè¶ù¾ÃÃZ¶(Ñãr¯cü[T×5¤‚!÷1¡äĬºw“±gÀEhÞquúPæí“1µl؛ཬ`Å}Ëkû+…Å?δ鎌:XÖŸiUì`±&¡S¸ãÜ®]*¬ W… ±'-¢L(ô/çB"%"'3Ä3RŽ8+]ø]µÖ˜51a²ÑSÚç_ Ñ{~Ýîe¹Ãá‚v O~‘x!zÍ®„ è§>6ð lŠ¿Qp0´àÏÁóV1ÒmU2 ´ßë¿p1„b˜ýKEX“¯_Îàh'¥£·±„…mEȼ§8;Ò¹À–¿àžÆ5õèÉqr£áp²ŒØâðuíÛ Œ$l^B•ÛSNNæú|KœÔ4ªIv¿9O«¨ý©5úz÷àí`l¹œ‚Î%þi£áedïö®ë’Ùw‘„ó/^…Qœª/Ò2„SVAØ~¦Êo˜ª¸Bãf'Î{–K>ž×hžÌ“@(ÿŽ ’î­Öû‚BLT=HžzÑÅ÷éÀL?ì~7ü^ë-‚¹:ç,-™)ïäwÕô´I°#Ú\–o×"çÃûî[«mÖN!’·æH·•^õ=Ó¥>h‚È~0¸µ‡‰ù‰¸ÙØ:ù)c„™*ZäLö%¯Iœ¶"Iï$ñ•p·5n£Íb›u?CŽ–þšíb1+¬vÌ¢1ë'!šÝÔ¼|´É­¥æùªI”Û‹©9™Lf؉ÌóÄ›9¨@5þUMä|Î77d^CÒY·¿’B³sú(§jâm\ƒÀ‹6i¡ÌÝã2ž9OB[Vã邵Û“±< A˧ïÞµ>_ȃ°³Mä²%ÿi¨ËÑV\óDË;îÔ”)TAˆAþ¾óí »“s™êVwH—œD•%ìq“oÄ´Ì;Õ£ÝéË“@÷!g#aÒÈ«>_¼‚úé•÷XÙ É?~£‘È’Ò¸VÔ}ùë HÖRôªCΈõû–ÇJãF|[Æ"¢·$Å¡Mñ<"­î¸ã,º NÃæo$\†_Ŷ]l)®²ÆEf;xÖõdc.UÂPñdrSÛæ…ràÕìÓR@‘Ç;æ'î=&%ÆùnZØ ²Ø\ef¶[¢B4´è±ZÎû”¾ÉÅÅ1™`û^L¢JPÏqiŸ.§e÷Îl¶Í×¥63K%ÜìÿÙššXmý'&‰•wG«tÚþ]¬)MˆŒr¥…Ìξ9 úq÷ϲN9½{ˆ/àœb“ΩÇ$‚&™3ßoßÊüb·Þx—[wéÐ0Cå! U8Á¿nf¾–ôßurÒšqWÓp[+¹±%¡þÐÖ…`a±€F¼íª½N’µaWÃઉàØ2Å —'}ÆäŒéM2ºr7X¢Üa-yômxDª4bÿk[Ö¦‰‚l?“bíaRGÈu÷“^È/Åaë@ó—ˆâŸ)¯iYX-z?\§ÍñÙÖx$QÛÄ¡øÚáÞ½Ä›u±= ¤Ç™6É¥\T F 'BR^íy«÷’õþ뀽:#¶¢TØÖ€º~5J‰, (­EÝœ ±© v{äõêÜTt‰²ŽcÜ\Sœº5³ñõ\ñ¿/êJ+´WÃi¾\u(Mh—¢À 8ÞoËã ÿ¦·œ9_×ÀëtvŸãg{¨åszëÀGèR…Š4øè²jÈB¨Ìƒ•<“ùÙ•©ßw€i§6òÞŒžÔø]· Ô§>P>éaãà_­/ ÛQ¼Åè#üo>> ÖÃÙ72tOñj‡iU1×RêT(“ ýÐÇ<"×  ÄÆ TäÆor±ä©ÒÆ5x•Õ“.{´—à©îç ¾I E_¯ƒ…Nœ½G×9ë=E0†C&q7^Õq=VüâýèžÃÖ7/Ö³ÌÑ{—HßÌÐû9búºÖºu\*'9À lÄò‘ÇdòTfÃuÒ!e òƒ¹òNÂ(®%»`Z¥ÕI„ÞÙÃ2/©üÔé :û«V½4HÖ@k;4Ï%…dDHä&o•™Šø“sÉóôÊ{8Ò”gž—dÂÚ a~N_òø½bÑçϲU@èpIz#bÝP{º0(å&]6/"•ðæ™RÒnðÜÊÔ²€¬kL.b°ô',A€·Þ| ,šZ¸ŒJª;msâØCÍ€n}üãf<ïâ"•‹+~%l,9Räe³ÁåÞ¦×rç/mÓå]Ùu•‡Áº«Q}–?GÛ²ÊÉI‡v'‚#5ÄAåÒûe" Bgö3”Þeü@Šlb,kÚçâ/z”¿’MàÇr8¥aŒ9µLbóü¹¹Í"g”­YßbîZWÝ4ú£±úvÁa½úá­Bè«ÚäfLjœí¼hÅ7mæéÇÍ0Ž7‰œ±žýáO+­ÖY³EÒ{‡Ö÷÷@ JºF©ÝË®âÕrlôu¢Wn…ž8\}q!œØjXªÖ‹ÜÙ4ÖŠJ®<5ÆÔù+¦Ët) úƒ‹KÑLeX¹kºÚlñÁ endstream endobj 451 0 obj << /Length1 1630 /Length2 5389 /Length3 0 /Length 6219 /Filter /FlateDecode >> stream xÚ­WgTSkÖFAš ÁDº´ÐAÞ¥w !@ $$4é"½7.(—""HUJ")Ò»©Òð‹Þ¹sgÝo~ÍÌdw?ï~vyöÙk.cA%{´\Â Š ‰ÈzW;ì]4JWÐîè¡o‡DD@‚Š‹K‡âh”*—Ìáö€*@ €¨ŒŒ  ‚vÃcŽN8€×ÔÈœO@àÖ_–ŸW;üŸÑ‹pDÜÄO8íæ Gáˆÿ±£1àœà€ Tô ,µô4^ =S@Ž‚c HÀÀƒX ÐEÀà(,œp@cä†FÙ#~–†"r)a(€uƒÃD7¸ îöº¸Á1®,–ø °€#ŠÂ{€C éaÿ3¢Ýý+!7 šxÕˆÉ ÐX†A¸ábTUõ?òÄ9Aq?ccD@;oÚ£a?Kú…iˆ(Š@aÜ ÷3–°G`ÝP<16‘Ì ƒø•†rü+ƒ[îÅØ#áX,‘†Èý³;Õ üKõP77$þ—7ú×­æ€ÀaáH!*Q1& GŒíˆ@Q ÿ-”ùÃnïáö'æ ÇüjïÏ™á#&µG£xÀî@%¬‡ÆC¼ÿ™ÊBÿ;‘ÿÿOþŸÈû߉ûwþå%þoßç¿S«{ ‘zPWâü±dâ–AºÀÏ=ƒ„b€Ÿ»ÆÝþÿÜ ®$þß8þý¢9üdÿÁ÷wX %6E åHFP"$ò‡UGxÁí 8˜àE{öËnв‡cœ¨í¯¶DDþ†™8!`.¨Ÿ"HüÁQöOŸ(ׯä…U¬¬ÌÌ´þ݆ýuÓ€8 8¼øGó»hû~ò(+£½AIQ@"&HI‰Ò¢¢~ÿ&â/Ñ¿Îw¡8  °ˆÿþþ:ÙüF CÛÿœceO¶~Â0 †¨ñ¯÷ŸXôŸç_c‡{ÁaT£Ãh˜\ˆsÚÓt\svk—ªus£èùÖP·ü7&/rJÑ ÒÂgdŠœ¼ ªè‘=«Á­º.hó/¶72!yRà9 ?N¾¦\†Iî:)Å aÛ|Úô¯æQ>›ƒºÓdV’"f‹³]†F¶/O.°÷Ô‰a(7ø8=soî»ÑùÃRËc¯ÖÓW\.{¾ú•;qù`Ÿ§¥£­õCÃ6yÓ›@VìE.9(³ò*Gÿ³ûvF~ì)õpVÎ0˜¾ø¼Ðפê(¿vxÓòƒR¥™RkxTî[çk\éý†²Zp…ÆÙL޼œð°z%_Os…Èv÷æCÇ*)ðO^†{4SLAXMÛ7ªHF’¥NÝ.yþf¸Roh,G=Á¡Óœgq®8žå ÍFy_.¡È· ¶}éNšv×g©‚Y‡aã,¶/T\Vî¤Ü¨Yröâ·ÀŠë•;ÿ€éœçÚwÒ»3ï˜ =EoÜÌ2‚¢zo¾Å Ëc>Éì{&Þ¼1ì!­ãŠŽZ:ƒ«ßçzÊ?ÞØÚ‡€Hl*ÏÏ6Z¿tT¶èK» €kYM]ß «jŒ»ó†t²@vßùSyòëH°I2oƒ•z¥»\`9[ßÄcÉææ½cò6õƉQ#ŠÛ ¬ô¼Ž¢/XcS;ƾ,ºAvíA'<ÍÑ ,¡ÀhÏyr.‡ÙD¹êˆÑr»{ÈÃbJm8Éðærÿ¶ndzó-°©Ö‡¾ïáv=´=B›ª‚y)†ø*1¤î4,XÌfŸIMSÌŸ ´E¤xÿ¶ÍhÆÝL»ÐÖŸ ¶5 ºéô€Sí²üw<©š¡¬õ÷iäa…!ú­ý"11B±‡µamz?L\†÷o-kéD$V/«Óq-¹ÕŸX¿|í€ï å°P[<.W×ÞxW9˜¥nPN$¾+=TNLN?ÀÇÍ&Z(›yG0w%Òk±ç»dÑ^: .Zi&õUmÝÙé1)Hyn éÊŽGµ|æô$G…a1…¯¤´=uñ!ËßÄ9ÛßnŠ›½Þ{ï#Ào,Švp7ÓÇ»PP Èih¯¶Jò.Äw?”‰,Tj(ßÜHóìØb×*ÔŸf0ØU—á0é3ðr­.'Õ´ÝØýD¦=¦]zÝbcUT$túÔöýfðpJã1O5‚LÃûAžQ¡ëM”›~íõ`E®¯³gíä¯å‡Ö8|;Ä\½J^ëÎç|mF;ß:»î%Üi©¢õÓLâÑnŒ“£à;ù©Ä!ˆ[¶·MSÀƒ`·³Üoäߘ¬L¥®±ÇoçÅ·Ž=£•·Z(¯l\m>Š,•zÿZS¨HðåtéÄØ$Ãzˆ•4B‚eÝ‚íq)噎ÑÛK>§›Ù¿uœk‘„â®/CŽ_¬÷ ¸ ~'•‡“œx×›H^ñ}»vH&½óïP¡¹-Œw{›2fîË¡Ægr“j$b€{=¼ó ž‘3\ÅtÕòý·C‰ÉQM§ 7[Ç¡ÙH3¢óAVXÏvû§Ïºi ûÜWvN0‚f ßíþãý„£ÞQy`æŠ5IR¶‚‘†nóô‡Ã"½o+sŸ³9ÐøÒË+W~º=cç›o[k·½Ñ™×dfŽý^|¥Øâس,"î:`å%1‰#³,hË4ûmét¯Èf¾î¿N%CÅp 9°rB=3PʃUõ£¼ »¶ÔTÕg©³Øôüà$zËcÙ¿˜]†ÉÝ”â¸)× ðcÌ™¹"õ<üùó±û/xïd.röÝqÝØ.h¦.³´Âëô´J2aCå*ß/Iª§ÐËÐÔ.œñ\»ÒÊ­‡¨´aqïfÒ,¾½=Ù%¶[>Pì‡4u‡šÄÆíUbþfRÒ,§•ÚÑêžÞ&µ“«T¥¨7¨~¶QªðTŸbté°VÄxy•fÓ¨%J#¦äÛbôí×9Ÿ‹ .S:Dï•a¢ü¦dm³¬óò‹7b +Gêýúv¥¶› 2N˜\lÃù«â•’ëž4ºKª=ĵØï|V&1ܦ‰)RLKpMÞ?ïç0hpº'o2P<ÞË#ÒtÛ¤1™ñj —Yk>¶×âsÝØU“DÍ—d% ~{µË<Ô¢ub~zϤ?)¨Ïd t‚ZÇÞd¶(¨,Ê5dÅÜ‘ÜØÜ Ÿ‰¦–hf—ò¦‰_($T>_´ûº;I.¹ÔF+û!¢|úùú`JSÔܪ?_R“ ídFrú¥ [9A Íz ÖóNÔ¸j©Î¡Ÿ€Ì£[¥bqñÊ­Ÿß'+é–¶œ£DÌ.:‹×ïQ,ýbГ…ìäThªž.©¹Ý÷YæÐsáF*ȦòàMÐãË:ì[*e'oEA5¯SeýF®B¾>žÀªŸr°âÆhb“úQIé%‚Ï9þü®ªa«x%!í1†ãê&JÊšÿU„NKN¥º+޶1—*ÈZðõ4ñL ‡càÓ*¶¶òΩD«w¡†ýèÅðKBY=Û‘˜*®ñÎ+Þ%龿k‰©+«/Ÿ|%d=Wë>¼]<ðÙíÚƒËoæXóî¬&©}¿>{ž?mð雸b|;0½€ÞWJ?Eâ‚›Œ¾@³xFMW*6Jñ®ÛëC˜÷륾ëòC¿…v†Ý#'¶âåMq¯(K­ôÛÓ Æ-IΔAXzz»r>5õEèð7œ-Fúïu=}FÍü!÷G=²%ƒÙùêBB°Ú<ÞÌ ±ÒQ¥ø&rÐZÊpí{¢gÛ厂sɃ„)Å»Ì|  î­^ö•Œ´Â=6zÏ„\)BÓÉ1Xš'à Ö;zdâ‹"— '¯™hŸSÃÁìØê/j?Q[ñÀo¯"J?\™SCÏlÅEÞÕcl\BnܶŽD;Ž·Äß*s京V?þ±ÌfðêƒPÙܤÛä—«ÞžWÉŸð¾ƒf]}ºR¾>î )O{÷”ÞŸfÂy­o¦Ã¡«•YrÐÒ ”}¾Ñ#?F­+AúÌ•²§0M:-rÕ5·ÜXç¹èý&×0œu‡GÇ’Ïeõ@¥—ÔEkô3íV# ‰Ç\ô&^ÒÙ+x'Ì+yµVÊQþøhf`­FÊÎp™*ñìå5ûúã8¿|CY«:G­¨\ƒêÃoPÍ öÐËM˜8šË‰ïºò³edV7÷½RÄe°ßkž5Õ¾úá„%L{Vù„Òš¤Ü!‰¼lcm¿Úv6“éÂr[åÀ(tpqÒä8ôÙK½¢üبPµ,­tÛF[MènçÜ« ¢Ë¥™ëoó¿¿8˜ë¤à1MM\äÞRà?„<Ž/ôÓ?šÉ4Þô—ä¼aþ½Bÿ°sÂ8¿x0ÀÍΘŠ÷§’À÷Ó,÷AØ.½cÀÒ{,ŵ1vnÝR©ûJGX ½è®69|J0*(VË…Ÿ|Öæ¿[C¢yµ%úr¯ný-ÆìdotXº%§Ï{tD~d/¬~î:{krz®‹#³úíÝ$¸p³q’›“kèý{ÎK7­II\GÀO%Øo ‹ká5 Kä,j¯á%ê~]©ý‚a®ãå+“Œù¨S‰ôÇšÓ¦ zzÁHÝÕ'ÀAÁÍîwõq1.kîwÅ[ÐéãÔ¯|‘nœR¶Cö37mO¯¥iæZÜÔ„ÕªYG5}–ÉÖÁ-’¼ã\Ù¡3XÖÏJ–Íl§>“'÷Ú­öá»õ-¼¢?Á¹ùŽóH€P§rDO€p’²›ú˜]ÈOº]¹Ù.ŠÏvCvºW|-¶¢Ç{Rä P¶"„l~:H!ŽÞ P=̪3žŸä;õ¿yȪDÒý±÷V,!»…Ê® 0oQ‘œ3£¶0ËæÊ‘åYÙö§‹#'Ÿ 7®ttÎ!¸’öáÏûãíUŠw׿R ”E]÷úZ4+Xм*üœZ;è•¥ú–pQD—PâkÓë´å*q#[ú¼yC2gÆÔ ‚ÒË s>Ç-w£v¸&J2ÔÁÆj)‚ëreµì g•OUîË*–¿ýXæüruI[Êgç’W©ÝöÜEú®&’Ùï$á¢ZÜC\uûs¯åy²;ô/E²–­_ ývôÀŸkBTŠc¨F0YøY’Þ8é~Í‹"o\Ë_¤¨Óªž|óš]õï´ôÎp“?D'îg†ÞÇdòAïehÉ"JpòqÑžm],¶Ë =× ¯2\úñ‰JlŸ¡þñèãÙ<”Mf†Ï€•¯ø=›ä•ß“oMiú#„ë쾿ÇÑʬó8zŠ £m¤Éç»õ"zõ%Œ| SYÓ¤Q$,H Æ„pň¶1ùÊ­ Ü%Y~Ç$Q”YþÝYíÓq¬æi C£Ð02ÕÂÃppÐŒMY÷f‰£Íu¼»½×³k鯃©ãá—V/ÐÕŒv›“+òÕÈÿPp H}ÿð^£Z6ËUJMcž5 ~¹îZH½ÚÜ‚œ„H wO‚®‡]K·|™ÅTš‹ûJ·!?LS»ëh,y¡NZBµÑo”d¨ûsžüÔ C¢zW[{öÚZJœS£ÊR ^oOàÞð)ú¨µ.#Ï}PfûÙ*jQH’î»-]oà¥ï…ïæÞ,™GäÆŒ´XÎ{œ–“W÷¤–/0<%¤¸>âœietùX;³Ji5‰óï’¤i9DÉIÁÔT£î“¿KrñÉa©ÓjÑ.¥ƒÓ#:‹Ô¯c&Œ.€>_xUÈHWŸ9Ê“òØ}½#;ÎNœcC ãÀ'#Xð»ÀØ…3V¾¬%icnÍux"åø*Ý¡qˆ;& Çïm+ᬶð<Š W!õõø4iöº RüÛKïÂÖR§¯öú„w|+¾|‹ÂaÕÛ¬›Ô—þÉiûh®âºûså6ÈánšÖ¥ý 6õ:½’aÓñèìz ne†ƒ íÅO”l2ö 0ö˜…㉔)EU3Å}DŽZPt2‚-Q°ƒ2 ¾â]²ù\‡Îçý×.ïJÇÁ»íë9êz:N7ÊVŸÂÐÆìUÖ‘Ež-í52Aùë¹d‰«W)¦^õæïÑû]2T4bIÛoÑr÷<ý£. ˜ø¸7˜K)}]paëdUÝÂϳ¢¼øÐ4‘Õ¾6ã°Í7ÚýÐÖá­å«·÷*èÑÁ“‰À½×%a:ä;’ù„™33›ñA«Çü ŒM¤‚H/Eêîì5I¸ˆŠ¡ /cÔÒîfú7$ubë3gê{!š}ÊtvñÎöh Jm_“3Ë ±¢ ˜g¤rŚ‘‰%¦Ûƒ–>®| ¹Ë\7Áñ£lªBK^`cliv⹈tö×£d‡Nzß•º“áIYuÓÑtÆö]c‘pAêò oê#—.8ruˆð>g‰L]òàSmMºôØMØ ¾•Éêõè&6`¦AsqøÅîFø˜®“žÝV=ò®öJ£ïûòLþà²(—‰-ÍUUü—-A¹ª¤bqÍÚ±{!j ZïV\ 4nšÆÓºB¿)—Ý>º@НP â*mÅö‰`°FAó%eêŘÊùðÎÓm+ WžÑ’ùê­ò¦œ‹êä*)[©'•ºKåÜ+? JàϪ¤¹±’u2}™!ØHPÃQ«öºíÍ›ã,a¤¤äŸ_`»ü&umÜa°v Ò@Ãä¢'ý4s׺yº}†ác°ùM¹Ì6% äo/Ü»1¯H2õ©üHÏVj R[Añ^éÜôdÞ ²ÐÓK]›êE´«Ìàš™ªy’KéÃ’-šR9¢ªÄO™¼´{‚Î\¿ñÍÙ#VØ?®ZYÓN´äŸ×é³ îmŽ~„W)ÙXbX êFBÈ»†ßSù ¦¾©6™ ªÆh7;ü¾ßã5jþ:–áI9ËÆ P6w¾^¼Nñ¤t×­ƒ¤®3ävtíj3&òä(¸‡Ÿ’u%Þ1ŠwR5¤¯ç›E.%(/=H[Å¿G7uÒ!=[¬í{l¸šo”ði“9E#ê Ç3{•3·‡AÝ™ ¤¯8ÛS';ÈZÙà»àÁZ²òªäÛL‘£Yà"7–È,)tÙÐòñLL^!ûÕË®íçå¦cݹgJÕ3ÇÚŠÍárM…gð-* Ò³¯îs@Ï!õßYŸÓt|éÉ×úqÍ¶Åæbfÿ½²gg–¾O8÷¨ä.ÉÊ—R’±¾¡¤KGRÔÕ3¦ÈÍ*,ÛJôó:ò–ß¿Y<õ¸v‹ý›;ØEÙE\:µ±5`|®ä]ËhB{9!V¤šûmÑË!ÅìN÷àZæ+ ŒUÝËQÎ[ ‰8’¥nŸ#¾ [¾ÓT`×·+_hÏ Xß­Ö@‚–ÒžëÉTÂ)vËòhcYì§“ÔSÂÚEý&v¾ä¤o(\‡T†4j vh¡Ÿ¢—Ê\âMȰo©©—Ë;•UX·T¿X²÷*óhx…~ã(ü£ãduè JËw¶IXã 0&p¬I¬.edR\qŽ«ó(擎š*/ÔÖÐ86š½¢@TúT:¶+•-gîQXÇÌ;‚†ui=,Èʹz_ö†¥\áÆ%æ n[œímœ-n>x;€]ˆdL®Çwé}v7= ³¼•µŽ YJ/t\jç‹ôDÃ$)–Ãç ¿”Y0Ü-Ò—º×ñûåx`IûIHÄ‹~;*¿€eÍ#¾°=Jé¹U¹¼û¤­Ì.4Ÿ[ÚÖ9› FmëÑ1hݬTæµ¥/¡ÑçÑXW„ì0ñÝPØéLÔòw¤ü†Á endstream endobj 453 0 obj << /Length1 1608 /Length2 12641 /Length3 0 /Length 13471 /Filter /FlateDecode >> stream xÚ­xeT]Û’5îw;¸kpwww=¸ÃÁƒ»;ÁÝ݃[p—àÁ-x°ðqïëׯÇûúWwÿØcìUUkÖ¬šµÖ{S’*«1ŠMÍ%@Œ¬L,¼Ek{S7W5yFQG; àÃÈ@I)æbn²vt7™ó´Ìqs3€•‡‡ æèäåbmiÐh¨jÑÒÓ3üËòWÀÔ럞®Ö–ªws;G'{sÐÄÿx£š¹9de°°¶3ˆ))ëÈ(Jh¤5Rææ.&ve7S;k3€¼µ™¹ƒ«9-ÀÂÑ`÷ÀÌÑhýWi®LX"®€«“¹™õÇ6sO3s§¿\ 's{kW×w€µ+ÀÒÅÄôÑ#ÀÚÁÌÎ ø»…ãß„œ\?"ì?|`ÊŽ® W3k'à#«²¸ä?x‚¬L@åvµþp->"Žfn•ô·ïæÃ 2±vp€Ì=Aå25­]ìL¼>r€9¹XÿMÃÍÕÚÁò_ .æ–&.@;sWט쿺ó¯:ÿ¥z'';¯¿w;þõŸ¬A®ævL¬l9Í@¹-­˜ÿ G+Ë?ì@7§úÜÍ]þnÍ_3CûAÂèè`çš[ 0+:‚>Rhþg*3ý߉ü ñÿ‰Àÿ'òþïÄýwþË!þߞ燖t³³S4±ÿ€\0€Æ øëŽùÿbMì­í¼þ›èÔ2ÿÃÿDdòÑË)X˜Xþa´v•´ö4*[ƒÌ¬&v=úÛ®á4w±³v0ÿÐòï6Y98þͧnemfëðWÓ9yþv™;ÿù‡<óf–Ò‘V” ÿ÷Ûôï(åÕAê^NÄþ£Gà.þÂuôø0²r}0~fáú8l,Ÿ<ì<¾ÿM¾¿XÿµV0¹X{ô>Šfaý»ôÿxþµ2ø7 3Gà_s¢2q~ŒÖþr›¹¹¸|(ú÷iÿ(ùŸë¿‡ÜÜÜÓÜ auÉÑŒ/Ä&=+T“7<)®7ÐÇ 9êTÖ¤^\PëØëŸ±ÃSeüZÊÔ<Íû§ÝkñÔéí§,ÝÁh¶uošùe¡/9m!Ú&U'ýA³arÆ™VŒÏÕùm(]N̓ÝIUÃÒW¢éÎÏ.pW´äî…˜NŸü̾6Æcu¡6ƒ¡×žQ%?>PŽ õ^C÷ÿ$ Ï‡§ä3ÁñK=%My»Ü5™½y0Öòæ$‡N‘š ŒÂ0=ÕQ öQ@ˆY]¤ |ÞŽ2k]óû!v„"Ë6MÔ`à–ˆÑÒ=ÆÐ<Ø×oõPÅ«š.f)7eî â"Í|Lj¶4±k¦$à€‘ä}ÚlÍ@Z~ ŽuAxŸg§ÌMñ³dËøL~üŠHèo©¡]+…ˆ÷Úá£_põÛþBî/G­Y!DFñóvÏ>pÓ 0¦€¼á½| k]89Jè«} úF4Uý}]¹«œSJmä‡8 ]ú4€®"aXuQ¸a^"ëG`¼»Û<áü®Dþ¼%+géãç3ÐWð¤>#w òÌÁû6ŽpB¢8 X¿0ƒ›0áµ*é6 ÿ¥Ô/1CÑé ¹=%SÄJì“ô† BÜH÷NÚùr)ÕžW`Ÿ}âÁòåM1¯EóUä¸YXùOŸCÇÈu¤QÔ?>VäQU·#-+kþ?$QÆ-uBcæÐÕzÝöLòJ˜Päy ‚k!Z%¦ÒãúÅ ¿Óê+ø¬+ ô6(›ÁNƒPhX¾ ?¼3çÛDÙŸÅtÈ×Ïq®ÁêUõv É¬Š2Kâ‹æN ƒÂa·\Í{NIxªúŽJB®Óó0|ƒ5¤­þy¦bÂKÀ$HÊÍÉì]dèu·þT#Ücm%…Ï×¶ßò¦Ã(^Œ‡[ÏBÍ‹1^ c“Æ·/“ˆ™wb¬ê‡Û©³›wk¦êgDê=óAE$Ôþ%ÆC2””7þe—4¢uz¸sÝ6—sÉ™¶ßû*¯Œ¹LMk³Ûy])ÉâöÊz`:Ë$±#‘dDX=%­Ò½®ÍAi³ï–$IÇ(º¯{¡Ú„[ÔÞ…™:ˆV<2Õ¥{9m^º¡¦Ã°?Ê© ÞCž³ñur¶UQ¬‡sýqiÇÉ»ÌÒ¾Œ—¥ÈîëKÉîëT:f„~‰¡™;´òß&Ñ«¥oi³¯Ö/S§<г췄äõŠ'(â!UµãMëÂÓk@i'°[C8³¹µô„‘ÅPø«òo0ø»Õø“ãê‹uvÇ8·B´ÈÚÖл_Œ€@Ù¥ÎýAN¹¹a¥l4œ„MЇ* Li××hóÉÖã®·øõZªSÓ}{H `†,›Æòw HÈûB[OÞçÔ4¦îW>Tò¼ÑOø»`áÊL“­ùÝ-Ó¶ó=áõ¹èýÀÌï'•Ø:ä²TœÃà>’u©y~Z"¡‡6¼ØÄ$m26y3Õ2Œ„H{ ‘ˆ~°½¨rÃÀ\?å©|3ºRt™¿9«õ;ïÛ­ [ÚZüUæp%ä€å‚ZTl#Ë‚¦IŸO»ðÖ‘l£`kçÑHSo &®²¸.Ÿ¢özÒL¿±ÝÞûI:9S³|h%,ŸvÖRb´Tåù õ¨Nî[<¡)7Ò(ଣG´’ßÊhÛ'þqþ4]"¾7:ª¡È}b-Ø›œý%wF?Ü:6®fF{%úH aç×/äþ¦®ëÛ¥o|?œ¡XYI‹§f.&ƒ•.‡"ÕB¾fXÜ¥ý)™¸^÷用+9ùõK­T“WW“¨ [ &çÒ)#VÉÀ»£ód Mí×ç8F(Áyuè5üìàŒ J›Df¦õu֩LJp%ÖŠðzÁ~z_‘²¸Óvp?A#@¾†(^>½HDÒNƦGK;do€•+÷ÂF_ðÿŽbèïfÆ@Ìu»;CöEÇ슘VLeÌY¾é¯ßó}Ï+¯REdJ¼ò¦Uã 2dÙ¿à@:©ñÊ¢n€ÇGdæÛDp/L5UÎñ¢gt'7]W¸ô)¡ùCwç*Ó¶ŽdœQ³çË*)þW >‹±“ˆ ‹œ¡SMVúæ®Ä¡yzÖAC~æüP´Pz†âßŗȆ|¤Òm–ÀØ:3_Z!D¤ì ø‘Ò6uÞ¨VÈò’Š|ÿFøvÛV?d“ ^Yš #D6`èP1¿åÔÖ™<9u,2ßNÞ\†ôeò­ì`a™ðA¸œÇ~W€úùÜŠ 'AÜrpÈuøP¢û©ÿ¡F™¾»äk’n“šh¦^÷í68Œƒ~Ó@/#ÞѶ<–EŸC¹ÕÖŽ FîÌÝX›¤AQœ"sR&Mu‚Š Kʼn(’Lgl5Ç|ÙIˆ-Rvl{R·ÁªÑR¬ÞÍÑlÇÕàtüžù]Lâ®—o›AÂn¬øz¢]Ù¾Z—âzÞ`ÁFµà«;e.e‡ÌT¸ÖzÿˆÑ”.fBHhmRÞèpâ¶ÃÁÕósè'“¨UK”z<ÜãŽð3ÒÊÆÁ”+šÚ |9*ó뼇âÝâË($­†E”õ¾z{ºÒŒæ{ÚÒDHÒÒzû÷Ðä¸à²ac¸Z‰Æôœ|( JÖ ÆŠà“ëÇŽºPH=)¬I,ÊÉX|þOƒ(ٹ㠺Êùw ÷ë°´¸&.a‚7}5OTû=„Á°-Î )k×|6æ9(&üMxÇžtÔM¥èÔ¢J÷êgEô[zµbÒBOØûÞèÙáþ¨£}ç$—(»ˆB£«î‡òq嵕8_©>…YÐ/àR¡t±Ê„>ù'fOi*‚áA^Ž!aTõ¦bN}FšòËÛÝí–ÓÔEZ>éð^ûtXö„=T \Ûõ¯Ü?–&;æ»%•®xïCM‚†—!U ~Åsª:¨öÊ଴“MŸ‘·hÂerÝv#V«"á”üdg“ÅØèÇ}Qþ•†£HŠ(± U湘­¥Ò&ŒÞÌ Nv_ÞmÇ›knûœç×ûí–¹ 6cƒ–Œ%•ƒ8-¤¦çð¬–ÎH¼fD6ÂB€À71rµ.|Œ)úvˆ?ª}’ªÌ8Rf°ÿÌ$Ã÷Ïzçõ¬êj੎l‚¥Íy²z©NçÜ–ÖϯÉâg_mAÎ3£†ªç·b~rŽqY´ô¾M|;§‹`íBBœ_®~oz°µzkäj¾µ°’´PEöï¥õásÒéî¼— 1U"wíf <·úìþK Äcmî%3rè2O ß(§œ®¦>N+ÒŽßÅ×øÒ`ç’ðªìg%¯g 3~ˆv'ÓAŒòü1´¡ 5E#¿UÓ—|h"ÔZ ̶”à‹Ø¯ež)%@d‰®°†ûÝ7Šúö#qþëï—87G#»D%ž„Þn9º5²,¹Ô¯Q' Ó„¾ªOJ£ò:·ÎæûF(.ø9ú|Ó5¡+XPpýÜ~ºì±$(\¶üób’4×xÛa­Ì’{›w¶÷•óeE^%»‹ DnÛСó °ð“pv¶¦ø¿&1ðu8ûùŠ_Ñ µ=SÎ8@Aî½z %4þxÜNƒôV H2@ Wéc¤Œó,°K±çûŠ9bZÍ]ŽÁ¾Ý"çp[®J¬Û©ã.Ié~Š>〖Y‘½r_CŸÏÁ ÇDvd±ÈñjÆ:fÜÜVÁˆ¡èRÆÌ®Œ“k߈MÛÊ}ßr\_ðÉæ‰k¦ï"{ øàuÀ€¹ÒQ`Cê¢y.¿ñÜ£:ö ¸OóÃ’Žo€ºÝ´Ã#”-j2y í%1Éág5軩ú©qB;ç@›½½íÀ=O¿qį]bVQ·MUÅ&í@j—l$ý8e"W ¦ßT‚Rî’Eþp†{ 88ÂžŽ ³Ð‹.í…Y Ú¬ï¬.0¹–þùé¿F’YEp[WöõC©1ÖhÆ¥Ÿ6‚Pý‹!v;¡ÊH[ëGÖw~iâÇ(%B9Fo§óà©´ÛÉKÝSå¡çŽäwŠ›ì4-øZlmgâÈWsöÅùsÄ*ËïM¢$5#æLmgZGªÅÔÉso¼–´zà>}’aér¿ª…u7ñ¾ÍÁÑ*V6Þk䂇åÒeC¹ ÆxZub°¿§|¿ÃY÷ÝG:Øò=š¢M…Bmš°¨3\Ì»mauñt#œ>Xy9]¾æïpÅXÙUá¶')ÌPžœ>v\Á¤<õ*/³Å¨¸`¶¨TõDVVØüúrÑiŒÌ–“tVõÎìa6 àpSmøv/4K£HqÆ<[ƒ¢Oå7É!ýY?Úà _ó¾Ôƒó¢‰Ôš½(›ÈOb»g#Ä}¢:Ì3\é»´-é9{îb°[ž°¦õÆEìȤ¾”Y¼­ëþp9$+›„ÁÑçÆDÆìG9“·ÉĨŒÓ)j»,Ú[MÅwÃÜJ5`©D3”$ó’ÍäfÃÐEß¼}¡É¤ í¨ Æ´•3)kDsd(í‚ì¡5*Ô•— SÄé«BM™/”a[‚H•AÄP"pƒIXžPÙý—¾”§¾˜€"n>]÷½–èçÏwØêO0!üðÅMv¥™J—V¹=3D?‹~£´J½å­"Ð.—á/Øc’•ná®’´ªšp`„=ÅEͲ-ëA;L}3݇wKB‡#šÜåèQƒO7 aùnZ"©%¢ä9{ò`ú³æ•<ƒÂЀúؤ~7ΑžrK¾ä65׬böj§/ñ<îGß)rÁé‚2[É)¡¼$N秧д võ•ÄO„ yF°„ôâÖM‰ß"Gâ­ÞãàâÈ®ÌdÕßñj»Ì¿4*&.Ë剳 Aqaù…ó§Ö ¶”úÄøAþ7¼84\j7¸Ïr½N·oì$0+ûAªyèZæáÎ+Ö´ÆÍzækNdÞùnÖo⊒ôCˆóÈ2Ä3uñˆå…ŽÖÎRýÄßý R²cÓ퉽&åhÉå£v£bà]CäS³Ö"S“] çVxWBõT¦;q–¿s ,òÝ[IKÁŒÀ¶ Üd!ÜL©6{Çl9Š|%œÜÌ8r µ,*Õ,DB¤>Y!2@†TÄ%G³.¦®-ÉgÚH, 9,¿ŠnLÁÝAH,Óõ~ùMÙ[ù bÒtf'<ÀТ’Ð;éÜ×úæÐuŒ".a={䰩γ×/‚úR*›õíÞ¨ØRÜ|CðM¯Xþ‘àZ$‹=ŒÀøPcðà m`+\V/l/ƒ¥`­Ïœtþ{Ãz[ãy‡d•B³!IwÙäp›ÿÒ«b¼W’®eg´Ã3µÆq¦<Åm,(æRn!o¥™žh o3Ê'°’'ò«hƒ^k}Zœ3A–ƒÄu…¾±ö#£pÀ˜ŸXŽÕFKTK놜7}X³mÚh­‡*ì¡e“¤9‹}%Ž07!«Q̰²:ºO3+ic¬áLéo-©¸8÷Ômt5#rõ† _^ä‹Î¶êzÙ[Á ~ü2öfSäH“_zÁÓŸš¾ß{ܘDÌ˾1פöWýh—È–­qË\«CH£“©XbûÁGëKéRÁj´øÎ½QKÃ!ùv³jn"_ººÌ !ˆÁ¡\8uÙM]³"Œàh“éÒUL¾Lç<ˆ>vg¢øö‚ÿê¹!Ÿqîzï6çn{îÙ_¡ÿç~‰„š^JDo[|ÌqÄ—ƒE»ÌÀ¯°ß–Ï» Xl Z» ȹã€×]y†%ܱ2’ø!XÜÝWþ°Íöœ‚zÞoÑseŸû‰€xGKƒn1…²™ƒER~ò±Ib2PU‹êL¥vÑÍŽT©ˆ©=”…ˆD¹¸ C²Í‡³MhÝœh”4¾s™¾¬ÎЫ{õ]ÒÕ+ô/aGh*MCŠïï™ÈQU}ÎÈý7—4 Yît°@[²…Ì Fjæ«V„OŠÖZóéýÜ‚›Ü±.)~U9Ý0³œÎä¦4F—®z¬‰oî„TÅqëµf© L|A’Õ?„$¿´<¬‡çg5\ŸÜœÄ• dÕO󓜇”M¢Àä®V¹O)J9;k'x§RJí÷¶a”e¬×èl>m­6ž²†‘¬ÙcºŒÄûlzâ€ÅQ¹(gÁ•<î4=lÆ‚xŠî Î-$ªuƒ7‚ (I^S«¢Í7iªpruµIAdåÙ>¸ª‚c#Ï8Õºî3’‰ˆºý™çDÜŒ£ÖTHØ?0ka)Ô¶M“ñ øÂ|Ïý‰ŠbÆ©ÇÃPP {fQæ ·^ Òâ¢c‚Í·"-¿Û( sv 1šXÄû;¤%‰^ïèuXÆ‹À,¥EœX¦䢼ôÔNV£›Êm?q½æÇàÔ±¥½Z9Š«mÑ8JG eû—–ïáÉe¬õmòª„¿[m áÙ‘I™-Šs‹]—.5)u\IõpuhrïßiÇ1ãS.póÇZ°ôíÔL,ÌݶZ›– kåì˜+¼I8‘&KŽàÙ­ 7¥“É'^n¹³gXuDžõè Қݰö¶kZœá’¹¸nùif%åçŸ]FŒA]+!˜Ï†}B-O9/ï‚qc˜ú¹¤í\ þÃãÃå°Bè8­Ází3Ü:gNKµO„¸‰Â £|™ã¸ï¨sìåNÂ8±I›‡âþôÉÓ eºÔÓ,lÕýc_ž'R°:Œ“ªÜEE×å$ïGâ­q ±ÞŠk¼‹þ±ûkö¨s0tßDZÛzU»ð¬·Y› A­%Âñc@jMDvÑ È_ZSwFV\ÍJ|f›Ý™ÔŒœAc°àÕ¾Ð0ŠØÑËÊ_>ÿZPóMåµà{:z”Zð©òè.Œm~zÏtX?EßVÉœõ/L©\ê^èqMò¢•˜ä$‘I]`yÓ¯u“¸ËalÕrýoçoZg”­Ä¼dÄ+¥ì-Í.Y¥° ~Î⑤9«"Ô5£ú}ïºgtïy>åÏ`ʼnœ<Á£Gê vsÀXj椇pK3§äü"Œ RÃßí5^ÞŒ*ãì BûéÞ ú$eØš¶ÃÌe‘Î+Ù«hÿjåm&U…¨1 qË5ðŸ_|ìÄXM­¶Û9Š9\8ù\ZlD¹Œ—ÅÛß®H ‚•ЪºR‰?ÓÓgôšìx¦BšúPðø:QXÓ³mÔÔŠ zúÜ”ë‚6R?'ùË|’Ù ˆ¾Fš>Lu˜9“‡û#€ð~”stáU†D%Ÿå ­MD¨hü0¥Ÿr!ß]°éÄÏ ¤©U~àX][p>qçRŠ'÷‚Å;•êÆ;¯nùP\´ëZ5:=™%(ùn¶­¾«D6¼#éECñºè)ÅfO<sˆ•¬Á|O¨ë¡+‰ÞÙˆ‚0ÏÜΦDóÈÄÞ‹Ñg¢ÞO0ñVà¯P»T"’É9µ?Ï,QÂŒ}v·³æð£.hç§y7=Ô'Â9ƒ“6á·Õú ¹ËÚóÍŸ\*«<Ó®HÃ)5Þk³I §><Ɇ×jÖDD¤‰?3!Ö[b”n§±ô? Ñ£7^†ÒùÉ5"TB™q]égÚ ¬gtò`HªÍÃVŽÕµøI`ÚÐ.(À[mofßÅת¯ˆ9\r)&-Áž7ø ÂR]mR ðÄê1ÑÑÆªºËyErpùcŽIûàý&DèjpÕα=ÈFºòLî¹Þ4GÚ3ê¤ÔpÜ(ú%ú´ÄŸw¥R„xn ¥@©¹vð~ÝUfÁ@÷%Ëïꬹö>þ9í1¡Êü-ÓÊRJ‹µwâ±­+ãË~Þ²÷ãü2ç)"p ;¹€zê·Œ¡ó—‡âv«úßy™ÈæÙ޲c§_l­k Õ[àô¡w9É1.ºc¬FáglËeöñØOò s´B9\IÆTkhÀør†­/ì™F/“‰0a»àyòí Så’%¹àdJ…Nõ1£ÂôõšIYG¦±ý¦Þ]bJñ  ®õN¸N2ï`î[çB,9†¯Œ#ÜömVCç(­4z@~o]t¤ŠôPÔôàoïÉ–»‚2÷€ë¬aÞor¡(Ϙؔ“Ü­ô-fþðtpÜœ9•念+‘†Z‰ÃMô½ˆâü²Að+?¡Jùú£Ü®ˆðwµ ¢+5¨k‹«‚ÚM¢Þp(ŒD!Öµ»Hij¼Ê?½qƦŠ#ò ç‚yOnfû´X´Ó0h¦ø©ÙQ…Tzò…Ò”›l£ÞŽ7/â.’Y£’wñxç–P¦AkRÎ<4ƒ•; 潘]|ùßýTL:Á¶ìõö4ÃÆ® /îùÂKá vħ²;…9 0ßéËJâÖ*m2bå)lm]Íû2Õ)d1Ç<Ýïi,2™ ¸V> »'XXþJù#ñþ¦VUç· ÅŒöÀ½*0± аV/B”> ¿‚¡-e¡Âzm·óJhéÏ2еeHŸØ,!C’Lc¿"±[ÚNßÕêÀ|I˜ø®´‚4Á¡Â:Mµr«C…˜3µ1'ão¹ó^7c@ËÀ£ûM&azxå›by*Z…<€5®”ã “ó> § [ˆ óbnÞÈM”ŸÉ”’¦ùvà0ŽÓ§)£XÔ§â…?´ÂsÇ î{™‚=+Lðx.}È<‚tÍs%üV0¥÷J\{¨–ÁoDIðƒ߸âné~“Ã\ýì»ÑXtCCKèÏÅfžÃt¡¬IDëú,‡Tß_iêyUðà5Ý!õ[6¹›ó·ýâ,´ V¡þ®sæØåèÉ;¿Ž(cw˜ ªìoøô5¦Á«/bÚ²4†n¯àvÉ‘U‘Ù%¥|ëŒPû*ébÔ$AQ~ÏBQýš3g+qŒh³ö+UF6° ÙØTužß¬¤kd‚mäi õæÌJ¬Â`¯Ñfæ¿’X9Žs½ò©½Ðʼ–¼œ_¼ÙK$ƒK€ W½Ò$±0ÅP‡¡ðð/õ´ŠË~þ’˜†“:ƒ1`)~ÃÔÄÉ¥«ŸzÖL#O³¨6JÝ/UÄx- Ùª—2…ƒÞJ(ÓðJ}¨ò½§ Eá^~pySõÙô–ûôÄõ<2„LÂL­@z;½oÌ‘™ƒÒ"ÐC²Üò k &ª'M;â  ÁhF¦.‘0cWçVWæê“ÚdßÑrÏíLý=ãgDqîvÒuk¢UÇ…¥Ô‰ï§5AòlòŠ.T’<ÙÉv¦“ÙeO>†öá1aA!›* ä?2¥†yd M[ºø¼ÌIZzëŠ.éVº}È0?€ðGNÞä êïäzñ}xˆÝ£t^}z¼®‚œ~9!'ÎHÍŸZ"‘t+ZÌCA©j´ïuh£ñЩK=‘?+oü¤(3#äqï=ŽðÉ7.õi„™—×'‡½è½³alB@Àydi8ïãê…ù¥3…cI¨ ì#Ï rCÆfå&ö5ü“F|Iÿ~¼áñE¹ !]q;dZåJŠ®IMCû:!‡Í ÆÝ3L2©ßûynú Ö@D >Æ@C=«8¦SÌY·yÛî¤B|'Æ;^õ^Azl3T”ÁËi<šÓ^uÞÑXÁ:妀ÎYŠ®qVµ¥êÖ™âZýÙƒú b^èÃJ¦÷âÉJzÔl@oº…ÛKb`þ0áf0 ³IÅÑã–”1d±†ÕqÛÎ6V¬È)ceþ:¨jd)KŒ¨Ü˜-÷!:mNd* ïiˆ,Úƒª6¢D¯•º\ à „ÅBÆ6¸°›”¼LBÔhY­18Ö nÜ˧&öM”@9} 8âó/x(OzX Ò Ÿ•á€/¤™àäY7Éëþ:Øòß™<±á*ìÈ•U§2¸†Îvk AS&“pQ¡õ@´7G™F išÙÌß&ãÂpãË»"´¡ê۾蟩Œ¼ÔMéËubE†8÷6ªß]søÃveÇ3R-®á6Rãz—,Þ+½ÿýV-K7înls Un"ðÓF>°½aàŽk2kÚæŠ²ãEEv%ÿîV9™!"Úl¨vÉÂP³]Ñܶ v㺳 %ë+xQÞÊ#ãM¢63ÔiËK´ÍÜj¿–œözáWÅu›„9׸ŸÕÖÎK÷9¾³ÖR醮cõddÛÈ”T¯á³ê )ž¥!1åÜÂá¾H»ÎvŒ¥*É„iÊÇ'ÀƒZ."23ª2ÌZcVƒ&Oúy6vnÐáÌ%)¶a eJ} 'ç;“?b|¿¦œø¸š§c¼7$-ÖlƒOðÂS>Þ‰"›‚^ë¾2‡§C:ÂgIzT®¬užö§ÅnéÄ8ÀçR®ðÊø(½œŽ0¦$îy¶i¬þEeò{@ÑΑÊ×WñrÌ=ìnŽ'Bæâª{¾¹Âð,ßeaŽPöŒåÓ¹Õ­Ó'kì9½›õ:Øæ{¾¼6×_׉ׅ1l4=®GüSKe^7½ø3*kÙ¶³–I/0B_Gæh|)g ±Å ÞnÜj€Œ®‘9¯Í|Öœé¤ä8ýüô^!ž— ΀@i@{GŠå4oæ)·žAXrEÿ±_„þª~¶Xo(ûJº±F+Øi6fo4Ì<žj$£¦Àü!R“*`›SÐsWël’ºÊ8ÜxíN²´BàÓ{¹ÖßJ~$^Ûâ›û;ÿåå @,G[ó[ÅšE=`ÈI‘G ܈‚γÇ̧érF6‡º]<ã°’Gús%’©Ho¦q$0Hù­l/¹2 –¨A êúGá¾/:¼õWàe¸Z9LÙUà)c©_‚œ©úqPùÜUÅ8>ÿ½§IX¾GxO¶ jê@‘­š5OÙH’‰Õ|稘jç ÷8é»òkM‹zeÜ…éfæ½Ògÿ?”Z…Ç×äBY„zpW¦- Å9ÇëÂe]›ª5Jh›+Ë—Z?(]´· ‹½sw$èøZsÊ3ãロ¦uÙ’ 3ù&)ØK}Bkñå‡?Ô¼Oº>bÆSS„ì½Æ®‘×é0·—,~XÙAÅâ˜ËÁ[_½2- M«!Õòè·[:jšóÕâMÒ5?&‰»ÈoS×Çå"Ú§üùCÚÖ V~^"¤aìálꥥf®i6.¸óä­‰ÁtÐè¸Ó)²Ñ{¼g8oµ£ýÈ̯݊tµÃâ?îä>]¶Íºh󃮴DX9ð Qdž7 ªŠî\àF¢ÅÛïƒy ”Í|²µ¡q¦olx0‘|)sÈçc‹¾Šä. ’©’QmÉ‚™ZÜ»¨âÍîELšÂ‡QüÒ QëöLjùyg„¡¢q²g”<(XüÍ{¡ôšM«Bä[åÕ´Ä'·²ØÝâ7›<ÎZ€h_}™C±‹¿‘©–6«{÷í.ŠcÌuJ¥`,®¢ý2k ~ ¸h RÝÃYn 9yxüÙÚš8y,kö‡¸ƒÊØ¥ëø¨b”ÊöÞÏ+é¼–ëËÞVØ^óŠ^y£Ç+›…˜ «=O?¿7™}U+Ñi£Ö„„³àZxFb3"3ˆ¼?¹3M„Ýçê$ÿ 'aNüØÌÄÜŠû¹ ðÊ#/TdDä^2Ïu ë«d|Xµ#{Syj—ÛÿÞø–ˆ<£\£nÂÔ¢ [D3&Uä¿l©¬vƒrkž=Q«ß9ÓÎLQX+é}=²ÊuK€ŸO>*lf.ëD…•r`9E[5¬Ë ÷™ µdBvãàem ŸA™Œåuµ«,ó‹cá$5écê²Bm3^¶s¢¿ñ.æö²äù•¨ÔJÆtgÞáMo†•p˜ßéúcÝ&ü®ßÎmÓ~Xë(Bb$tY¢-i§ém …,cû¥¹ªó»øCθë¿R7×’²»{õ×` ­3Gé$éŽdŽ„sÚ&æ™F³J¿:÷ü ‰N“{^ÛàÀ,Å#·©44o1àÊë‘“¦È¡¡uzTaª¨ƒÍY#|šŸ²?a ý³²@lênŸû¹êx»›—çž°ÔâÛS<á—÷JÀ‹‚¡ŽJu·é ô¨­´ûO^½-ÞfTÊ%iÊߌ›D]\‡QÁ¬;ï‡ü¶ê7‡Ò¿dÏ× \‹ÉÛ ž½¨i¾]/‡áÓ«—7÷èÏùÍÒc/ýp*ý)£Þ¼À‘©É^^æ÷²‚.ÚZ#I÷mLÑÍåÚŽ»ˆœgõ°Öíˆ"T’UDÖÞÖ¦% dŸøæ“ìšYLnñRYŒ ŽÍ•CÉý†¥Æ=™Ùpp½Sýíª˜-‘1ûí’“¸ð¬Ag2¡/¥¾¨¿EæŒá$uu+¹È×T‡¦ºá@âª)ç±`4Ðzù‹J{âõu;~áØ6ßèW•›@ÏÆ(Çï¡6;¾ ñõYìb?^¥³§[Èt2ëF<õgi1¸ÑH })„ÎOQ¥`P°¨âeéAìtH‚A’S¨;ŽR-ûzâà·Q.«×+hÕLƼ‘×=Ñ«Û{È Ù_§(Wn¶ýñGS^i÷©ãÞðþù£08€Ææ fIJ¬ëÚ·V,Œ€“ðnN¡¦?£ó ¦5Šš16'°—“¿nÏ…oþQ£nêˆÍv3ÊÿòËŠ«1žR¡Ø´™¨¾Ÿ5‘*ð”2¼ü5‡ Ÿ,Tç0ÞÈ<¿µJv{ ·S§[vŠÒ#Ót˜Xl! ™‡®ùðÓØJ°n+ÊÑÁÀ¸}‘´¼Ï ¢®ÿ“»£ë-"x›9§—`Iñ¨¦.’d:ÅÓ«ؼâ¦4Æ&%j)M>(s3ʺsò‘+¤Èï¡Ão6¡ØçºVÛŽ êÆñÑø‡ÎUlÔ~舛L¸–Ó©3ÅCAYÌõC6±DqÃ[s•^T¾!ÆÓ«aÊÏM¸IÀì’¨ýªƒÌr{à—vuŒ·l;ÑxF#Ï?§¿·éå=è¸Tï;óèyrý#<Þ9 _o ·,!§lhê6À<39ñjZ“a–aYS¹¦vºOÈŠ±#1+%°fVßöMÍþzI ŠSÈŽ ϱ(¸L¤–w•µ‹FK2jÎÏh.¶™¡h&jÊ>èî1ówÍ»‚:øx»Î¸ÚÍ6Ý|—p°è¯¹Á³îYLF¢ ¦¦ˆÄ¬ª±rÚåÉ]X‹ò%§Û¡ãá‰N–uzž6>£¥—WŽy-üZ~½TrB‚ÞøÕžé•ÿ£íá¼R™ó9 µJo°îçVb(„ëÙ¢©-Õ×íâç`îR¡œÄéÏ’PŸ<~ ñF+Î5'(ý ï!ðñV燵^ÀFÅ89£=ãe“=Å ³œ­™ɉš2áðù2áP…©X;CÙu<Ç(”¬e:> stream xÚ­TgX“[¶¦£ô¢TÑ M¤†*E„ÐAzoBHB’Ð¥ H•Þ› ŠÒE¤ƒ4éEAzUz“æ ž;sæ9w~ÍÉóíõ®õ®w•½y8õ„” ({˜ ‰ ‹Êtá®öîX#0ò¡…€jâÀ¤àáQÆÀÀ88 ©ÆÁdf0(@ˆ‰€222<eÚwtÂñ þe¹tØ{ÿÁGbáŽH/þÆ@¡]aHžâ?4‚Á8'ÀŽ€”õô-4uÕwÔuMê0$ ƒ/Bß݇Â!0$Æp@aˆ? …_–†Æs)a` ƒÀña0/ } Ð0Œ+‹ÅàX€#ŒÄá{€CàHÂz)ow@ý„Æ ð®x O¦Ââ° à³ê«¨ý©çÆ]æÆÂñ0å€÷„¢ î—%ýÆð4x†#±Ì w™Ë€Â±hØŸO†ÆÀËpÇ‘Ž)``Ž` Ãbñ4xîËîüU'à_ª£ÑïßѨß^ÿÔÇaaa  >'‡ÏíGRˆ\.‹&ÒŠþi‡º£ÿyÀ0¿tçrgøñ"ÀPá €Â(DtQ8|JÀÿlÊÂÿ½!ÿFü_ðe¼ÿ¿áþ}Fÿr‰ÿ¿÷ùïÔjî„.Ø¿>2ü+ƒ<\¾3€Ë‡ù?!`W8ÂûßýÝÑ ö§ÐK®¿cR+!ñŠ ‹þi†cÕà^0¨>q8€øfý¶› ¡0 Ž„á‡ú»Ÿø ðo˜±₼쾔Ìo†„þ];~N¿•‹hë¨ëY ü»§õ·§>~pÆÞhख़頠ÿ<\ò€@(/€¯PZ $.*E¥2’â~ÿ&ço"à_g0÷X‰ ‹Šøÿüþ:ÙüF AA/—ÆFBñ{öOÃ% qÇ`ðãý}õñeÿãü{ãa0/„br ‘ qNËLÇ•1çvôªXµ|w„¢ +Œó_– šÒÂgeŠíÎJC…+ûe/þð]GŸ/jÝ]êúÈ„àkJm¾¸áÇÅßü’~š·^Z`)XäQ!uú†Y´ïÖÈÃo$–R¢¦Ks½† ÎÈ8úëÅ1W¶Žø¹<^^ã>DÓøCRËc¯7ÐU0”å­oð&®òµuwv´7í6/² äÄ^å‘3û'¯s&á¼í0ûsO¡ÙìÄÐ>NHK™ðÏRnÊÜ$KJìŠN›6i÷Å¿EBª§üG”WØÖ´Äú9ÞÛ¸Ç3V‡4v Vv¬«=@ T¶= Wã>KY®ƒÔŽÌù%6Íh•¦Å à]¹×™ˆû¯Æ%)Ú>]ï?EÚ˜§Ûò1iß™’?‹¶®U_V‹fÈdnüRµ@7$52U29ZXÎefë„-â%¨ÒŸ§ñÐBö®?Ë[þ:°¥ûÐýk9ý-á1V>¾ÈOyÛLE‚5Ì}ëkZ×j7ÙY·¦{Š<"§é¯Ô}¤ÍZ Æ-]åÌeoi#á ñ(”·h޼bsiï? c.•:B3çÁ¬º;Óq“¸ã.å~8ÇÚ1D‹øsc€ QFrz>c¦–¦úÙÀ'7¥÷èƒÆCuó˜m;ª¶Xó.ý˺"|†‰Çlƒþoï‘ÞÞ®ŽàD¶iO:ø”øÝ¹sV¬ê\«HôÔ=œcpÖ2‹ñ¶¥éWì;èÆ°‘Çη;J-ú‘Ù×sÔK„9WÞü¡\'æM ûº”é¨ÙIé.»Þ¶S3–Z’Ø9~þò‰ÅxÚ¯–''™T÷®Õ]OËìÀd¥VZ­˜mÅæ×RÒD¨iwÕ†Ö"ƒÀò¦f½Ð”uþ«œ7ƒŒâ“æ}¬¾§H0F§Çê›-ˆbF¨Jó+Ÿ•½ñ¸¾+=Ýß³ÐÖ±)b¿·Þ¯L 3ßm¢UÖ#£pÙ˾%æÆ¤DøéYãà€AmÇxéÍÙì²g/kÚ³":;Ï0{÷ý ùŒ Ûž!Â¥¾Wúè%è×N£Û«=XhH?Œ u÷54äˆÚÌ îÜOtŒ`l]º˜V£"ÿfÄJM¬½ñ¸ óÉÌ~„îÜEÓûŸÂ¾ Ñ&•­Œ+Fû6¸û¼‘R 7»Dbl«ðõsÈbçxµt ƒlȤ!£Zýj•H&tŠL¸Øhp+th(¤•æuÃqñ¦§Àq1RåÈeøÂê‘¿qÝÌÐd4D鸾€qóùI—g'6(·–9?N´_i8 ЯÖ{EËïzæÔÉÕð{Xß]h/v*㺊ß7±Ø¹ŽóC$_…U§å¶©0»œ{ðÔqµ/®E šs„*œAªžÅ…âVC'}ÏüuÄÇoÆúI©8߆^|-–?ô…MTÉJ#p·Xc¦ƒmü•¾Nqqœ>snLmøúÚ¦àùÒXàLkâ×VÚ–©×†uÚ:ýnW‘¤ŒH]ÎrÕ·þºì˜_Ÿí¯üÁ.0³!Ô;ÞVú*ÿóS÷øÂPÐZÇ¡ñ=ögaclƹÔ%Kq3òຂÇX cyßK* Šºø_”ò ŽibNÒ¤ÛÖî‚£IŸ­®3ß· -lF´Cœ×:®¿N˜äÇYYlŒÖPØT“GÝ´7 [˜DçÀï“Ïç%ieVopž¸ZQ²ÌtxÆ·S ÍL]xZW2©Þgë7 ÕݱHWQÔö;S']U¸í©6Cl%þ+Í~á Û¯’D Õ’|øòv»ya§#ñdr&Èî#–·®3Æýg¶Êþ0H()¾ÐÏÖ#¯vòÎ õçóÂR#W¡ÜÙÀ_\]9¦^V9_¬…š¾J{óìD½×Û2YÐÂ2fZª¦ÛÖÞÐìøƒÿRmámDýNʪûŠÜA“`nÏÒàÓÕÏPf節þ?>òœ,D¼(+oqîåõ@^Ïtzùý Ç®ÒlÐÊš°ä^_…¹«Â›‘îʪ麚IªÐÄÓ§jFÝÄ¡2‰´y)ÙÍ'$ÅíìØ§tYô¡ïL5šEt@?e?$ |Ñ畤ߛ皸O%1¶ZQîX ”_;Λ 6øô5.ÈtЄAR©·êCÜg#:p½ï&3W¤\oŠñâ2s¸[J´sÒ¯€ïWC6iÂW‹Lt‰a,!úçOåÎQl*[^ÍŽ¬´â¼u’åÏZ–T—7þƒ~Œ™{aû´OºâGºÝÞF¶ýùÑ#K¶ EnùhH`"‡fL4³ÿÈ:èc :Ú*5'ùuÏ<™“܆CñuÈòŠeˆÖNáh"A›î畆.CˆÖLºÍL>)ÕD ž{\¢ø2…T6¿^ƒÞ­~ÝCÙzºS„©ð*# ;.ŠS¹—ºï}Ðâû6P8 ž[ËpÿGêÕ"÷2@’ÜÉI»kÏ2[f®7Ý#F¦‡ssžû8zOŒäS yP‹ÊqAÊæ€²Op©á ª•eC ˆò7nÉú‘æqTÔ_¢†g¡+×ôüŠš¿e©&u¸à·ºDauç·[Ð|ſtsÓÉ ù¨Ü;i‡)HX±‚™N]äÎð37õ±c2Í–&“Lë±øŒoÂéb*«K|Ñ$c´.Œ¦wÄóNH ¶ÚäÏ™~q_¬©ièòº™¬Yñݪ۹®¯ex24dÓS›tÜÂ# ö&?—8¸¯Ss\v Q¼v­'‘‹)œšR(…t2uܼ}ój¡o¼"Æûþ°D©‰î;t7('HÕoŠWPk¢clXæËà¸íbŒÙÂJI™ºe¥a}¨{Q™ÿíDSL,½1ÿ]b£´,HÅ|+‘C±Ë~BƒÓVK©ù¿¾5ܺzþ’úâ†ï Q­øAââ÷,÷(·©jÓÙ|Ùî›}OÖw²äW9Œ¿}Ã^UÔwŠ”6°WP˜ö}H–Ëb3Ïb¢íc0ÝúŠ™ìHƒðáPÒÚ-Öc…Ç´æ 6*±Û’cß~¼™”%W¤k·wT' ^dr\Þæ‰èJÀEÝ1¤TIÿè=Zðõˆ°_×~[.ò‚ëØ&ÖEa†œÚ0qì¤gˆöÖól¼-¿£òñ¼éºGÃÛu¤Îš¾ÌÃl‰Ê‹OÜî–´lo/¬ÂŒôžù,qÍJÝ]ó¼°!Ù]! / î—¯”ÿL­ÏÌ™Ý÷·½ƒMl\†Ï’ýJž ¸Ñ¬Ó%X1Þ^×jQfDY( PscáìÍ40yüyž™®Ÿ %ÓË“’žLuEj§{NÝdØô¼'ÍC*`õ"£ŽÃj›«tõǃʅ‘"n‰ ÓûöQíµNw«õ¨;X×`RÊ´SÃ~ÈAMf9°°R“ÉÊFòéÝ«îì·4QÉFD¤íƬy.^¼J£i­=ŸúQwT;ÄTQKz÷*4G¶®D3¶:ÙØ{ã%°Ê(ª— TÝ·–uJš‹+@×,ñ™½LX;‰„½\hàû©Ž¨Nç·Óƒ_y÷Ê^Âoðîfþ$õe€flÞhFeêŽÒ5Ѷ»÷¹7?A×ä(RÄ LóîšÄõwuhHœõÉî½Õà×õk¿OñMm¼Å‘g×6@újwÎÿÒ§tÂcntƒ~¦‚ò(¯÷VËÍWô §[]£¯ƒ×Söâí1ÿZ~ERGWGƒÏ%w+|FCþ§f?—à?³dLŸ˜ûÆbOT‰“HUKÂe~l¡j¸Sm"D×ö35 9»mÚ7}¿õÞPá|–¢ØVú*)œÕ­õ"lFx…£#ê\Õñ€ÇpÈë*¼9åûÙ•UÙSE'ï{fë#X•XদÛVá¹àƒþkuŒgYœà~¥ãÓºÓ–hr‡ýSu.¾ÛTÃÝlEÊ*Ó–iƒ žønåMI¬![ý vÇYõR¯¬Ðú°¨¿ZË[Ùr/kîm „‡ä€(YÖ_Ò¤SD ˜Íõ…JÏ.±S¦o‘. ‰’íl –“M¼4ײU|¢°q0šÚšÏžS:!à_s“ÞÍ&±õ4±O’Î$sP4XÈïÙVwê%×ef”ß­ø4;Ë.æ?OÌæ;ùÜZúpZw’SMžÂ•ËR@¦‡š#Ï™¾p´s˜C¨ QD®©´oz¨¼)ch®?ei«Ýw÷fYväLšet¼K>½šmµÌ`&m›†Í9Ýõ:žlR¯Ç‹×C&íî1ï‡3V8EÝÚXhCÖŸZÇYˆÔÚ$¥]OˆIv;tׇ­u šTÈí¤ŠZ1•ÜÕ­ÌL9q|òRo!ÒF¬ Xþ)JiU&tëæÄ ´Ê‡SVà´¿àì’b^Ú›'nÐû:´“N7 E7*¹äUdI½R.G¶êñk3’ˆ€5¶ßTV…ˆ¨D¿)ßNÈkkdDD0e«ºE†×}*Ê9ÞlXY‘eg´ú™“w;g¤ÜÿVaIó};áÉùë¿ø“/ò¦ë}!=acÀ§h¤ƒ´8ø hLî÷%DIºXrÕ¾¿'6oÓ­ié˜kßZjeô0W¦_v:?ŸºÈl¬úÖG×¾º"ûùÀûÆ´2ïÿI m$ÇØëk]~ýŒâa‰â€ƒ$/nvã=|¯l¸Û›'CÁ>q:„›âíʽ؇¸pQþp6©/êPóîb;ûyMç9äTWξ±ˆKø~õ»Ž+G¡ú’Gí².ù }Äq*á¡Õ×[êUÜ'‡Ñ,3B-Ü´ý¹Ý”W +•C§BžbDröfåšjs7qS < Íü9ækMOÖ4 ÕwË6Ø iBmyP‘ÇqÒµv_?üè(ß×Ûƒ“¥[»s$¥Îù2 $rhþz¿‹®H,RêLf¤Néa"ÄÏ×9ÓÆ†^¿AK’#Á¨bÂ’HaZ„ºZÖcIsd²+·¯|Úù˜ ÷ÑtÌ€Kž›Û“ç²ë;Ø«:ÓªðwI£F~'cí%•´›Ó¯vËfÒT¶4<é–=8Áþ²ŒrsÓ™\ ²ñPæ³»·(¸üaÙ½ ޤ3š¯©þ©ß:m$™æ/ªG}mïŒ<ðÀ'96äó¨Ð¤J—½ª+Ââ -€_ëmpD:Ô55G°SÍZiZÛ ¤Ø`´ßÀPU§Ï‡3 MW\K?ýù>Ž"Ò™2ñÜ[>)9…ÝžÑs7Zо§W]á|ç]ܪø^*w‰N|¸ñóJФ'×sDùDC‚LÆ4W=¿3l]uÞ<œÏf¦sïä™ùÍ 4’‹€ :~ˆœë€ìÄÅoôSéº6¿ï`Yg; ✂Ά-ö "£ì8ÔFÌ%H~"_ÛW›¨’Ϙ…NªGLŒ¿RÍ×t1ÕØgh ø™c"Ϥà38Á6ù=L'Q´/·ë‰oË™\ÔV÷·ji®/À¾G@|¬°¬¯rò-õ͵¸\/dº'Z^¿ Še®Ÿ$±ù½U„}Êg…†¥:ÜåJjá+]ž~NMê U!ç…Î`5}ä4nç0íÂFár¼,ŸÜù7"Ê5·F³ágégƒÝt.zaø"ç±µ&b=O©¥g–æ-eù9Mk唚„Ê„4õyT* oˆHÃ@ ŒáÚ¤ìç\Ù†q…>Â'ü‰γ“ÓMAùœ¿ˆ®øG³³„£¦Ï/D¢äM#}ľ:°o˜‚B¨@%Ñö<Ô;S©EO¾0ؾÒéPsÚóN’ö9íþ²ÌQ~œu4gíËaó©„—KD­¼ºÕÉÊfS‚"𬑠x±õÞ6Åú·l2¸–}§gÏÒI詚W³+¿FüôÎæ¿žF+‹–ÑÕ!Sþ–ÂWn‹ÿN¥) endstream endobj 457 0 obj << /Length1 1144 /Length2 11556 /Length3 0 /Length 12328 /Filter /FlateDecode >> stream xÚuveT]Kº-îîA7îî\‚»ûÆaãî\„àÜ!¸»»»;wy9§_w¿Û}ßX?VÕœ_ÍOj®1%©’*£ˆÈ( ²wadebá(XÙ™¸:«ÛË1ª-\@NcJJ5+[àÑ1' ±‹È^ÜØå¯fé 7v°±XYøXxø8Yÿ¬YØÿrâ(9YÙ¼J@ “­•ýJdêj´wQuup°µš©A®N¦@g>€ùŸÊþ;+@ äàédeaé QWѤ¥§gø7ÂÊËË 0ñü':[Yبþ,Ü€¶ ‡¿2ý‘ÚþmöW¬’¹±„™•Ë_íh,]\ø˜™Ì0&gs&{  3íŸB%ìÍÄ@v 8#ü53q+' éŸ¦<™ÿsn6ö w{ïÿ‚Í­ìÍþnÉÌÕYÝÞÊÑ(#þƒÿ@ÿÆ,€.N6^6Ðô0µdþ+¥š§ðo’õ/ØØÞÌ×Ûä07¶uúZ™ÿ¼¼Ý€'W ¯÷ÿKüÏ++ÀÌÊÔ`´øs ÿVÿÍÿ±—7vq²òè²0±°°XþzþµÒÿs¡f {[χ+ÛÌbÚê:b2ôÿÙû¿¢DEA$Y¹9Œl<œœòG‘—“ý?•Œ­þoE,ÿ>,coðþ£ð?ûgñn@'ç?.ÐümXZÀÿTR¹X™4ÿ6‰ 'Ëüy±þ¯æùüÿj¡ÿÌ!éjkûwÿ4ÿhð§sg€à¯Þmþ+ÜØÎÊÖó9ðŸšÀøüÿ£#ãblke*boaû¯1Y9KZyÍ”¬\L-ÿaŒàêöfq@%³Õ_ß,€‘•“õ?85K+S{ ³ó÷ýMíÍþ#¥„½)ÈÌÊÞ êòÇÆNfÿþ¢M]œþŒçï úsöŸ{s«?@S„å)ˆumHÛcµ;ãþ{/—úý‡+ BŒ-ø.DžM GîÏ·Lq¥QK¡J]HyHð°x‰nw^Ñv&X ÌP éü3¦:>¤K8š©+–^ü„h¼Ôìc1Ïéߤe÷Ú”Bbãªa l¢GÃ#GEâ²ü xÅ£Z^œç  Ei[?e>˜¹áqë ðTDÙΆé'jYóÌŠv £ù…>QdNÿ¹0)—ÚKín¾ŽñN¶gËö/Ÿ;À»~FæPÞ0!¾o ÓÍ!Áà%%­#¡àáMrÊÙñ/›Â¤ÏçõµOÓ #ñ,1ŠØšT¹“Enx•dåã¹ÊÁJmí¬>6±.¶/Ìo,ô£C±ÚšúžÒ5ìp×gôGÜÄz:¾lïŽÕèƒ)úƒª’‚ÜA '>2ª†Ýùß¹¤âZ8¬yE ~×aZùwTÆg&‘œdNªþ6¸6 ‚fP*»ïó^Äß}­àâÉ´mÐä~HK-*Ø/Ô—ËYE¬t‰2’ÈG{6ÛšŒe¹²ª>ýn硬½íA°¿×%¤pí-¦º8×s*Ð~R)¡2£'›'Ü€$þhc UAM·%¦Ö4‹ˆ)€\Í‘–:žß‰z|‰PÝøúË_­h~Ýý)Z¬ * ãð½R¨ÇŸË¶L3™2îkbpà9]DÔ pM:ö—;7Œjv#Ù[¯b“4A…1H êšÄ·Í׺;¡p†u¤>Õ@ûÏEt÷pµÝ°D–¥\¶ÂT÷xr£†õ¨30ë“)¡ß±šq,Q"O1†˜+QPba=u ѪÂEð­s"ê‹§Þ|ºª‘ ÁE¦à"v"„nÙÆE\»DµùD-¸«T0ZÈN¯q°X¿6 ó Áê$º3µà±pfb×5×l@zzÕ»{ñ^$Z+ÿ¶mn<ŒbÊ ÿ•zrô®°VÍÙæ 8k-íć¼×LúÑzNo1‡U±Uâù0ƒ)”Üý,Jhå brss_Œ4½G[þ@WI×äð{zg#®KSƒ/‚Ÿ¢]°'ÕqÙ66¥[Ô¡¢]ƒhP?†En»2©¥æuZ±¬øÙ†ÐîÛ•rIbpô!ø\3? F¬> ;Õ€¦üöÙ-ú³¥#µa™`«À üƒNÕµ8;þiëñõ̧–D±RÖÅ5 Re£°¢ãĹôDF0ê2§GŸQ˜¬©ËêÕRJÂÈ䲘ÖJX6ÖóŸ^{kä ¥D=DËÆq;¾T˜‹:…ö¬h‚z=_š -P·—2 ˆêá_,ò_Émç\ZJ²´£+=Am\…,Na…Œ!Éæ[~PX˜•QFÕ¸2'Èõ»\2ãñ==É7ÞÍMÁìŠ*‘:Ïßq$Fµúµ®ñvÈìöæ¨"…W¯Ê9œµq-vŒLdRñóþ/¡îf%!ÐzºjNü¢A–NÃ>}ò™ƒûÏØoàê°Uˆ¨9æ’Þ¿½Š¼(åzñØÛNç²ooîr<;e¤\·qc:¼ñ¥d!—ôÓ$(º¹°Q2ˆ]ø' (m“³Ï¥Ì2R©eî`ªÃDæh¼’‰ѼD<ˉWÊjÇöãT”ý4FWEª0ЂOÓô7ý_]‰FUôP«ûýŠq'+»‚`ÏÓ”WqG„µ†k z2T'Ӟ̭¸D­×AÜã­{®hBa„Âù*‰nwôž|õ£tßbk.²G¢¼%^ì÷ÖqÝ×fürð.†Én®NÅò̊׈¢*çfÃÛºí`à C KYp'Ywó’ï'µpyœ]± 38æÅî'g]Q:Œ4üYðcÕxbLv^ˈ‚,cÁWº`Ø*¬8·bè¬kÛòj˜J¢p[m“¿t, ²Åfîôs?.‡®W‚ë6 ¨ï\Nä&’uî¶ñnŸî ©h¦„X9-Ý}´,›Å ',¤ ŠÆ¤þÖSEÌ+ƒ¨ŸÝx¶–oÌëK•²¹¬›3¶¯Wæd¶…*óŽG¿%â’>‹=»<ûÉ«8³s+ eY,Aê…ny ßÉ4ÛVÌÆ’µâÍÙ:ö6ñႫ鵀⛎óT{,¿~e$ź9åŽ`·É¥Ã/7ÖF ±Óørˆß®w  ÜRG|zƒ-zCØ—Ë–ÂŽ˜œñŽ1ÍÕKÒ'©M'­ª¸X-Žª?‡T«v;ú yƒUO3öûŽ&÷Ù:I™ªR‹Ê¥ŽJþî)_ÿ!ßEßÈÆqäòÍ­/ì®Ú ¾šrÅ‚1þÜž¤çø "tû=“s¢BYŽŸí6ZðHæÉ[(²zGƒ£À÷YIî÷wRzç°<½ÛÈm}ñLJ—T„.ˆgžßn‚‚úqEåzÙ65Ff»¦Ú'»Æ™†Dô?~ŠÂbѳÔ(^ß”Žìí£)BqÏë|)x<þ}ž„6×´¦MÉAc{ÓbœL@1[‰™hL½Ù„P_ñí¼Lò{ëIvü•™¢Iô]6ÅšDhªˆ]Qÿ½6J‰ðÈýÌŒ²*Ó»ÓI"wUþæ;æ‰0ó¹¡÷gÛ‚…PÃ_œéÃÜo(«@Ò ðïÆ[4åÈ /ÌÛ‰NbH[AØŒ-‡öõ.ä"†ÊFi]f b¦4¦d’ò{ãðVN8V дGùÑHòökk­!@Öù$ý46é’ng©o³æßÈzVÐB-|Åx/TÁ$m E^½•SËÐ'kªæÊ'8c4 åV±kX6ôõ°Ë»½ŠÓ² :êAqk“*©Š‘J»Â]¬¤'íMÒæy›n_¦3ì¶uù|t/¾;Á`Óª]«¨Oªl­dq¡öñÏÒ>dWE¿LÈm¢)1ï.ÓœËr¡¦Ý–´¦VœàTu¾f4]eç¨R>qÌÊëïÈ=˜$>ÓÈÖ­À#á–#“êÂ8'|Ú_­ò¯ØSfwâxN^#eŒ@oqÙªü(—ZÛ¡ e)ožõ°Ï™ªÙ>ë štTŽ4Þ¼|É ™Xc`¯ýt–!‹D³+´T£>±(æÐªé ’>?ªWÌ=ÉèðáþÍýk—^¾îx8CÿüH1X‹Œ±s_QŽÁ•Rñ!„µå؆eN9} ¡j¦äè–(òžæ…ˆ~WÅX ðhýˆó–§U}XGÃH¯*4I|Š U7>{ îq½'ó³kÐ;.O¨IB§vLý:76»yé[É'`09—kÈ…?6À*jÜo#‡:ŸƇÁ}›´÷n’v®*Ö*¶ºw¡ðTEÅÀ•qM»%? :å¤ÚŸsŸ]fîcõ"hž&Ø¿­Õû<ï•¶S8Ñk‘—mhÄz2Ú¯ÃÈϼtRÜî!ÈpÔÃn²ÊyœP^Ë]{eÁtõpéÔ'º»lu¡ŒWz¦ïhõ‰¬sŸ8 æ“éÃJ?çKa‡3LZÂè=‚×O%±ƒÈŸ÷ÀÆwêò &Ù*÷`„~£ç+iÖÿ"K#® ’ ª¦ ž¥ò¹zÐOAÒŒXíÛ§6p LcÈ®Š¡?ÓäŸÁMOjî‰44“d ~–jºa›×É'VÊuBJκà½TГ,or̳Ïìÿ UrÆïE¦‰¬_ ¾E{æú0Ñò'«æ/Ùe=ê8Þô6Ðýv=rÿ&òÕøÀ™´Ú€á‹ÙÕIeSl½ÂÒXnQ—dÃyþí×dýo:+">9Ú•ë·u\$#ßžõ p)¿ *ߤ©´%B{;j·‹Xd£ÀuW%q†N¢äR¦Ô.mÝÚAÑDmi"5Ì*¯zÇ mßm|ó§½|ã}Ë% »!Ìz ½æ•%}²ù¸¤ìo,p–tÃEl©¹ä×Ò`ú ëBŸšeÃinœ^ø¯CxÙê• XVfÊXn·±7px/TùÞñá_Óפ)€˜ìD<ÕÎÂamyØ5/Ä‹t%NŠ~OþŒtÆ™ Én ¬ï2ñ©ã¬h qrn7ém>WðE ‹àËA#70ù%­1§hNÔž `“N,9® gÃn~-D8ņly׫6<,’rŽ 75z6[À*À. kåîKģŤW?g@†ÏÈU¼"Åf™B1«qŽc0‚¨i”ìîNŠ]6ëâYèÉFMdW­-¬/‹l/ ÕÈM6'º¶„]Ø}Ð݇ ïý™)[¢Ô›!ã¿ösÄ‹êÕêâ-±X§ÇWˆ×qˆÈ¡¢ƒ‡û1Þ²f¸„õÅøXšÏ>/ôæ'Ú”ôŽÃ| #ï4P̘öåKNÎ.áúÊG›ð® µY¤VçŒóëEê¡+t\*¢ ˜Í2mCÕ5Ë ×Pç£Gzç€døå ÍeÕ¬ñmw¨í8F¼4ßD–%~¹¿å slEÊE¾=!)oLµ6”‚÷u÷P¯}ÌðS:­l¢¦"@xQ+±UÐLxwJôÇw†Wý‘§Gû™ªÈˆYÆ¢{¸…½7¶­Q›'#`ä[lw.¢ýo.x?~ m4¹çA¬@¤ª™¯Ý=‘ÿŒhkÄ%ZóbM£Å™lJH½=Î#‘ŒCZK¯fM¯QT ¶›h'Î$µo†J¶õ%Žá;·ÌÙL01öLË ©úÙ› ­©SñK\˜¼†'6=Z½ìèR¾“â¾’ À”c;êÅ+)]N-’ì/sõ›“«‘k}jL+}`DŸ´õPÏûñ›òÐÈ—‚½Õqúzö’x0Š8½dDT) \ ·M°±“ëA®Ñ?7û~T‘{2?©ä†2g2•¤½ºbÈÅn^™='jsçoDËÍê̦VÍè˜ &/ØggšV0¤e¢²>ÏÅìÞÔÞ‹K—¼=þ¨¥‰Sœ>jÑpº˜h‡'ûßœ¢p29Q®Í=IeßæÉûSÃp2[ç"çà*4¢hQŽ.õwKâ,S)d©ÃjÞjrCY˜—Ä\CJžÎˆ%ÕÞ«O5eª³–Ut·-Û1š‘™—²2jCNƒB-Ñ šÝïÓõP@ܯ[á­9i&ªB¸qy‘°Ò ÙU†ÆÔ–Ú2°NEÚ’UÍ\3+ §Î¶\Ö€æÏRÉ„??.d6ÑÎþñÃ;Ä}(’bÄii]'jŠþ#ïÖØ÷ã‰fxGßIuáÈU]>ž·Ã`‚øöU‹Ü×z%Ö“æµã•w9”ýг=2§_÷³9¹“zZŒdxMô´‹ks ¦çP Âæ8”Ce §¶Ï}”Vìµô4`ÓÇ—]Ä%¥è3ÏäÌŠôÄÎÐXÐhÕ$4D©j:Jo{;¢j¶mï·88$ÉMF^@ËÚ&«ë…œðëE–Ò¶m™v Ø ¿2„wðöE†»¦ ˜"Üg[¦¿¼`.ŒŸÁ7Û)w“ÁR#‡€í®Òj¢'^¸+êÁc/µpB^ìŸj˜ ~ˆaäs}B@£|ýðê~ŠÕD6ÜûB´q`Úè#R6üŒ†ûÜ›ŽœJR_í÷¶ÿ"RíÐY·€9Ð>Åõ­9a¾CχèÞËK\s0\A†j¬ùíûŽ%Ïh¬ÑV¡£5uÌ-9ÚâK’ÐFµV»O š)R-ª-XlµrBæw}€¬wžý§Ìܪӟ°SklÀgXZö_­­H'îÛ7ìîIxºs¢U/$žm`nå£ÛÚ›Rä²ZûLQ‹ÂøïûYø~%í#ØÚ:t'Ô(êýä¤ -WaU~{cËòΕæ0`di˜×ò¨_ùj:|ÞîáŒÑ&ˆÖoý´&îÊh9Ш„Ät†L>Ó cÂóaŽv‰4oO¨Xh­SKÞUHZlG¢g7!<¾áþ4E–šf0³v Tya‚)‘ƒBÆw=Æ¡ñ³Ö ·–Ñú©ã9"ÈÆ#ï¼Ûu$ܶ:×bnjˆÛ¢OnT\ÉÊ,UP*’Ϙ$ßQy|Âá籦Äòñ‘9«.s¤€²¾â:W£×ôë]ÃV/èÙ ú‘ãƒm·RïÛñ¥ôšH·¼”‡Sÿà¨X=Ñ!A ›‰f+—Ðó+Ïð‘ M2û¸wïÝ_Xó.L´´Ò}¡KôXDcFʽ –§‹Û–84àT”X,•°fyjpD›|Û'g&4¾±¥×´¦O÷ã†"Э‚›£M‹¿I‡Mâ{•÷ù!ÌoÞܓݔñ„nÞ×¹õš¹Œn2™ Ý©r~ ¹b bëûc#”|DÍTÇÿXbø¤áÖ°Ö¾¯[E´ù\kû¬,i,wq´¡tDÏH@»‡ ÎäÉw#|“—žìó²°™²¹Y° ×(ŠT¼“¹“n‡ñ»õ݉Ó÷Ða uzCÅ+]ƒXšÜJ|5åF¿ùY‹ŸCÿèNšçt…Ž0ÝùÝ;•þÁAš)i%eÆÑÐk4ìÖ­ÆŽ úÉ©ä.2zò‹Õen×Õl­Ã£Œ1ÑÐts¤ÃñÕÏ×Ùý}lîgÈþa "Û±›ƒ©§*¼ƒE6K'‹Ì®¤^– ޹XI­“ŽÑ"ù}7{›Y[Ôn½9©(މ@›Ö[~ã›ZKOq.íuÑaÑM÷múœ4BcèUzš{ÙöèÉ ˆó&ým &Â…¨è’F{1ë–ŒòÛ2žçËo|A=ì™ýŸUüݥ̅”n±¾œoe¸,k²E;üt’äÙ¬Ðl5‡éàM({êyÂÅ׉Òñ¶’¢Þ®Æ æ†ö€`˱œi§Údsÿµ¶âG³ÛÚ“É>NŽd‡LBŸ¡jL%hh¤ƒîéÞµx[¹1Ü9ÕÕ ú÷Ö㣶­šñ;8ª5™ýå»T‡ÊÀ™-Å’B«¡¹ÏäS`@ÒÊ'®OÆô„kŒñÞ_>>iÌCFdÊ´¯¦ êî!°[ªß=‘»JØ ~(C,lÇ“j—T[DK«­õæ]±`rÄ^1r)û¾crt1›?ŠAÀÛæ¹üÎ8>Îõh<ä B<Ìu¡‚äi­RS³íl¾Ï¹±Çö5l•¼Xù[˜ËCº0ÍöÅı„ûü4ác¤Žút ºcwNm9‹æû-—Šœ-xX›þAjÞ™Ð2†Žwc,ì$ûx½"Q»zSÜÇå¹iÖ(ä¼Îõ6ÚYŒ ÏÆé Ù+â|È“»B9ÙOSeÝH{²]& ›œŸ š–cr»Á÷ð25δ6Ä–») çñ`IezdRÐ3Õ¿Osùl¦Ð”u úÉ.âW|äë¸Ù®·þÝkdõûÙkŸñ^±Xâã¯Ã GКBk>²ìòæqUÊd;¨‰kyˆPŸŸ\÷÷ñ¶çïA-=žIá|k‡ð‘–ˆàµmdÕ`ý?ðƒ#øPQæ”!œ, Ü<Ä^ØÀ¿NdK¸ôOk¸ÉL±09ôr =ò uÚžoŒ[­Ë0ä‡/Ç~°€Á WEâë›! ãy ~$y‰¸IñW&Þ8ºûÕŸ°”8uè ‹¡Ó“C¬ÌÉn çzÎÒÝ Ží øìô°$–!û¹µäæ,²¬¼¹t€âó€ äv–}Ó”ø“ëcϵëáµ2œ9è|t_|YÔ y¦•cÇ` ñıò&5Σ2rYuZŸÔÂúL¬±8ý¼Ž†:â#—»ß†;ÚZc¤™¢Ï ÀhRö³³ÏI9VÔЋU…èçšJõqç|‰ûv6ûÄÞW‰î˜,hΚ·†A éÃ$Æ,ZK˜bp‚8ëHÃã(¤µ6µeåúôw\.&G“ØŠ:ó.LFÄŽ,^¥õd’(vÃubIò4v5zL§[11£µ)8 ê‹ ªF¬·-îÇÈ·Xèæ:õyú® ¦—>+[dÑtFœ›á3¥›ÄGpa~Ö¯óÓ²v’Þ÷ÐOà-vŸ„ªH>&G¬w—[Ô±‰±c0ï–jØF2†p+7Ö—Õi_¦;Û­?&^‚C$Cš·ß?Ý‚Cá+Žù â FvKZ»IŸEܶ#éF®ò,{5”¨)TŒ ‰/ï?Àøµ6˜r+¢ašÇ‰$êRìî–k¹ßöÆ"9WP] ÐöÄéðo/$«ÜMË9ðï"žÆA)IS|èÿí¾:uòVý£@¬`~kü(Ák­HH™/BË­Su mxfµß ÀÒ-ó#a]j70fmeŠÁ¥óÝêݘÅI_â•íˆc^è¢qóœÕ§·w«ҩ›øÚ)«NHútyÞtˆ–iÞ¥m„yš!ÄϘs¯Œ<öôij¸ƒ–4eP’0të²ØîO·©ÓÅR«Jÿ¢/­:Ú?xRqäÚMÕºN³ì’ë"¨$žKÝci5êøà.¬~ÒáöôM»8u‹Æ/sšS‚ S·:‡1óy‡–K÷)qбÄ÷¶wqòæ’!=Èd|ã&§.ıâ¨&y´¤:ªø41›Ë%¡¾¥8%ú¸B\ôú°²XOE}Nód<Š4òýQ§:“>Á1B5«å¶åý¼¼Þ22ÝÓ_%ÈZ~[›«ƒ¤ 9,þÞ÷¹Ùj¡çX¼½`îÃ2ÞOÈeÙ9@Fž(wÆæ+æÌH½7ÛYáNö½ëzŸØb ~¸lVÓL§Ú ÄÓ—rr5Õ›'E‘¦Œ¤ [ÂQ” ÈÈà4û_ö©„½!t…þ¯@Î a*³Œ G»BüT¿ÎuK÷NÁ¸oä{j ƒæ6–›ìçMyí,ÊÛ ×ê°Íò¿è“X­8®<g‚Iî²ø³>L}Í\<7®y!9(‘3^[")‹RûSmÔÛ²ã¤ÃŒ7“ÏMŠ®>})Çìru õ×ݤ# Çd–ÙÑ’e+‘êá·ûµG³D_aÎAA0ªW„ñM+äÖpìKÂá<;Ë]ÒõiÑ3_0ä Áœ]Y[gl¢0}¹DÍwî›­SšïÈÿyÇA _§Kà‡èý•?@Ùï›}/F61zÓ^w7¡%¹œ˜Èkõ6Èøæ@·_¾‚Ö•%4µ(m¦FJYfv㔼m€Yµjjj‚>eÓqaÚ4à ç‘&Ì4Ù&ˆ*ïÝü‹7n—/ï{³º±âëGJl]f²¢RuDy;›±—(y~ Q±( M3ÍwƒõQú ªiù®8BÄ8ʽú8ˆ‘&åÛÅ#I!ÑŽ´ÝR[çGY̶u2«<¶€hù\^ì­…(»ëNsoš|{‹ó™ KDDáƒÂ;Yê±Þ;ðTÒóê/Í?.`ŠS¤«ñÆ!KÕJxk2MÄÎÂR$÷ ½˜S|±a[Xëv=ûÉ®t…‡KÏÁÆ!÷òuÔwWgG FÝó|í`Ë_ ÃyiUBj$øëM0›ø×Ìâéó ¯î»×*^àF›[0 =EöÉzWzÏw§Re_ú MÅïPrÈÓXa|Ùðo×#ù{Ç3Ý¡y¶Ã»?°ØŠn鈌à{3zX’G”ª ×'ùÌŠmZo ,Ì•"“McÍrM•èL¾Šš¹Þ¹ŸSÄÊ&¬v$> àëéĜ뷺û̲I„óVìÜx el)Á®Áÿ<7Ht„ùš/¢ ÌZMò½ì†NÜzн…¤L¯Ì‰»÷P”0Vaòð¸ÈŠ©Ñºª¾•lw¦7p ½æu teϸzÅ•ÁMš|¨G"?_u/ÅÓ®Wv{M2u³ Õ÷R(0µ•J ²~Ö¹Z¸·á· ²ÛOÎ4ϽªŒ¨Q·$Uáɵ˜¶í0à Óßrµ!×ìBb4›cQ¦×|?µ­Sx(Ï‹‘Ñü<1y‹Æ$*¾ Z!‘ o²U]Ž ¿Ê5êš–ã¤k{")&yVm/L`dˆôTiиéÓUËÃ`¦="¡G5¯À«¾bèùÑ.A£Ìc×ßýâØ gJçSÉm£ë±—!¾!‹ õ]å5ŸB^Û銛ÒaâY ¦ò`ëTßa‹*ˆ€jìøaͦ§[~ Ç2+T<¤+ÇqjoÓ)A0¦¹þé¡“èxs%ž¨º²rOdD2³ÕtœŒÂÊ2¹6·F¿à„쾚O±`R­ã»+v¶<ÞªÃÝ êš(&¾vaÆž4e¿â–Òµ÷ÒØB˜„¨´o˜_ƒ({$dù<ƒà֗弪;Ú‚ƒé{ÒFÈ³ß ¦‡‹9ÍL¯íq?yÔ¾¤”Äìp¨0XìÀá ’÷šÎí±é'ÏþJŸÝýœ8À"?fëÜ)Z»D§Ñ–ëˆ5 f7¦66$•cŸ‹ðÊD R¾-¨í£I?žöä´¢ª¥·|U%#ïÍv@ äYµ/¤ã³úÚŒì0³1š%*E;ãC ÛV{»Š%% ‘ÑÚNvÍC8¢:¸ m®öþP8§÷t®ËÆJ-þ6Ê„¸þk+û‰gOÖÜfÝ¿lˆ ÙJ~¬>Ü’ô¦Û¢¤¼¤ÊtZœG<V_ z‹ Þ'D`(1ÅÃN$“ìªù`j½`jR¼¼ƒVn›ËY.{íÇqÜT²€A{3ž~`q¯Ë -FÊwyJÍí9‡3Ñ0íRg£”ƒW”+!26ÕÝñ5ØñÛ xQÞµ œHBÌÞô“dñÄ–Pzø»X:ƈ¼Í*äËœuµ´ÿB9ùèœ#Ž÷þ®»Æê¼Wú³¯é›/#6Üû˜X:—úé@Fðâ®Ð»H z˜»2¨ï&@usH~i1TÜW-ó˜õBMÌ¥Žb†È8@1BåãÙz’ìC a³A.›@“óÇ$¦ˆwN 1¯HPõ ’Ìæõ+MÜÓÐ5úö;öëA\ËYsEc]œÚQc@‚Û¤ κrÅd¨ÏÐ8ÇÊ»ï'n°î¶ É5èçÆ ‘ ÆqË»ÞsI«Œys=±=UÆÏ‘ƒ+D]ô<6šCfï&y»m”Í÷'â…nÜn釤ñr]r Ie=¨øgIjåî`œL§„S EûܬÌ5¤5„–âñÑÖû ‚±Þ™«Ã鑯l3As[F‹¯s2$ß•CAo'»Â±G5D@,Úl‘W˜°­0ƒÞ¨rð¤-ŸAúî‘¢SUB¦h½Ñ§¾]¶JxÄyÝe#«&4=],®ªºpÁ<‰EÐæ‘«¸±0Ûº:ºóq&q0ª#9^“Òë·á…à:ß< 7÷O«­ƒËÛøY”éc,jo9šälâ6¨NÒ&coÝ\Ú<¾z÷ïýK¦Ä»&·WZ¤“q,tð„P6ª³ì'_ùv ¨=(Õu0¸=@þÈè¨ áɃɟ(.‹øÌt~¦µ„ƒ-®€S¬ãh ÎútÑ'Êžçô»¡” _{o+÷æç}F–äÅÓþJ÷b¢™NSÙš‚jøIXü'ÈIWq¼•ú·w8‘×&ܨ}ý»¡…寯šëàËá•°|ª£ç­Òñ×U½3ô˜û-³ÖKäB¤5¿¤|Ê ‚iw;ÿ`¥ô endstream endobj 459 0 obj << /Length1 1177 /Length2 9767 /Length3 0 /Length 10544 /Filter /FlateDecode >> stream xÚm·eT\Û¶5Š»»SÜÝÝÝ]ƒP¸;ÁÝÝ ‚w÷àÜ-¸»ùØ{ßsÏ»çV?Öœ£ëcö¹Z-J2uFQsS ”ƒ½+#+ @ dgêæ¢nb¯À¨´t“u5±|œ&”” W[àuùÅ&® { × +7€¢‰3€ÀÊÂÇÂÃÇÁò±faÿ—£ƒ3@Ådçà PºmAö„ƒ™›ÐÞUÝÍÑÑ4Wº8¸9›]øþ÷ÊqG/g¥•+€FSM›–žžáßV^^^€©×¿€Ðdi úX¸mÿªö‘BhtþhÜü/_ Isë_´4V®®Ž|ÌÌŽ&À“‹“=Е™ö£YI{sq»¿¸ ü5? 3Ð샘󛡽ƒ‡½Ï…,@öæÓ3wsdÖ´9¹e%þ'àÄðo›%ÐÀÉÂÆÂËÂ:€žfVÌ•Öðrþ ²þe6±7÷óqtpX˜Øºý@À‚‹‰;àêìôóùÿÿw‡ÀÊ 0™¹L–Gòïìf Å?{EWg'@Ÿ…‰……Àò×ïW†‡kî`oëõow%; €YEYJ]V‘þ¿ñÿ_O11‡´Œ¬Ü<F6+ëO^Nöÿ̪búŸ®Xþ,koáàý§ù©ý‹€;ÐÙåC•š¿EL ø¿™”\Af@Í¿cÀÂÉò¡•ëÒÿÁÿ«œþ³†”›­íß3 ù‡<àƒ½ @ðÛ+ò× @fÿ¿(;­×‰ûOGmà?ÒÿŸtÿ ÿ“]ÔÞÒ`deûÇr‘yÍU@®fVÿ¨ä»¦½ùßW¨âàúë2„p²þ¦a2³±º¸|HñohoþE%íÍÌAö–u×1š8›ÿ¯á/ØÌÍÙùcNŸÔGì¿ö @O Âò‚ƒˆu]HÇc(¡ãÞ${?—æý»)B¬-ø.DŸžM!GÁOj®„ʘ•Ð}HEHð°BÉXn^±N&X ÌP ™H‚S¦z%>¤K8šé+–~‚ļô¯Gâ^C2d÷º”BâêaØþÄz‡NÊ0„$EUðʇ ´¼8ÏAçÊ2¶_Tù`æFº$X¬ƒÂÓ庛fž¨åô›N0«:1>Ï/ ˆ!súÏ…I#¸Ö]šê–qóuMt³=[uÊ‹t÷0GåSÜ0#¾mÐÍ!Áà%'¯#¡àáMr*Øñ/›ÁfÍtÎÐŒ ñ,1ŠÚ>1­ö Úð.ËËÿ„ç¦+½µ³úØ2Î6¶Ø¹ä`qci2ŒU«o>·¬ç NY E.Y öçWµ2i#—R½Ù5’ª-/¬Ú†1Áê÷|ênLE µU–àÕÓ#ˆdN.œ”H(mcIެAL€8I¢™&y W%oV±:“<1¦=‡‹¹ ñ GæÐòŠVÊÀäÉùd@וÆð>D"Êòüš‚ev¼ÑånlÎÿ ˜hluÕ e %3?6‘?~2Hë:¤Xã•)p!æ-9Êt¦Š‰;g°‡Ÿ‰¥EÄ‹'lB†¿A¾*½Ù”™ª¨d{WªŽ¾ö;ùܱcâÃp„;¬Ú¨A1 ÜLcU|«–ñBN%re,Û\*RÏ«@¸^Aø ·xHþ\p0=5 P†ª2Ü~÷ Ê‘QËÆ>ŒåL†261Å5¡xŠì”Çn¥ܵxrD÷*©Ÿy„M6éû‰…¦*‘¿-óVã’Çò†" ì[àýÕê$4Ýûs;‰ª%†éÇl,6š 2 öFm+TÃZ!/|è®ÉA·™!é­×jšëò•û¼Yqº&Ö…&EP¸ŽÙm©©ÈGqžËt+—Ð@|•¹Ž[…—Š ^èå® å­Ž¬JËÙ«/WäR®˜°ˆïŒ¿ïkD˜¥þKšñ{ê¨p@Ðx®Lúëm›qid¡9]"j õÀËr«ÙeâC”$¡înñ`?MÍë…¼Õ¤·b¼¾ŠTHµzr–†¿‹à4™|’ –ƒ—XÃX>*ŒÄ ©iÿÏ,że»‡«6Áº&ðK8$U÷J ð,á{â¥Ý¹Sÿ-Ó{:ÒU£:VI ïd<œn'Ÿ¦€¬ôÈð†‰‘OCX’ñVȶ »bE´ét•;½! µU‘‘ÌýÏgã \C #Féõ'ðaÏ¨ðæ‹ Gµb½œþH‚dŸñk0'õy#gnTꪄ÷&/+Íô}7ìÛ=¥ÌÞUaF3ƒ¯lŽËFÃí©œƒ¬†fÄR\žÜNêOV´5úãÝïþ#•˜÷£-,a ?椺ë´ÝôÎÅij<&"ÊR‡ @7úÓ£’bAò¤â´Óª?+í³{z÷°ø GqÚûÔqžn¡‹¡d³§pgˆ²JLn†î³§ÓÎì Sq¨¿ƒ# #Ö'”«cl'õU·2ÈDÅù0*u5š?‚CŸ­Ã;š¨E‰ç*òAá…~j øí8óhòö‚zC"aË¢ x¦Í;s7dbIK–1*÷¢:Á|Y¹¶ 3iG(1oÃY­Ÿ¸'½vSÍátåð »Àç O°>ÁâªÜÞŠîuÞ›ðUö'}•f®"O‰Ä pÈ#à)ùhÈÝØœkÝ8*K\O]J–]Þ ÖøÛW ö©…ÔµåúA=OݘBïª ó¶çâ•yh­ÍÌ2ñHW/FWÉ{¨q¾eCÊ7Áþ[}¦Œþ/½÷ò7òyÑM'5„¦áéÓ´H¢Ëpï¸Âb'9†ÐivDüË4uƾÅjÔ_Ù¾hc‘PÉya9ÇE(dóJ÷Á£”Æ@5"õÞí—»W n«wbAyb’Gc‘_ øþ|ømâh¨„C=]õTÌf[à•žoucâ˜pçd}ÂÜ•ùóhÿf–¶œYÚÇW¹®‘mØòP¤|%%ð „57?_ž1†(*¶§NT.OÃM}ÿ&Bj^uB)€ÃRà«é6íE[RÒë`JLpöùÂB?Q@s3¾‹ãƒžÁhä@å«ÐJB/ ~#(’þh£G]ËœQÿâ9¡¹i(ä<çÈÛ†ðéí3qT,©îó“^Áey]Î(V_mÁ7öFLVl$›»ÿ ñ¼AÒ_£]‹=N|^ñLÚ=ZöEÈu>ÉkŠoK˜‘S#/=™R×?ÑIŒ”cà¸c§—ß“‰a›Ú#™ä›—’ëÀ¡’(û8ŸÕCÝIîÄø¾Au( ×¬»"¡‡G¶Q·ìx"—ñèÇ_vdõ,Ÿ ‚wràUªŒšþ£=tŽ¿…gS -4÷Ú_¸2kÛÄg°¡QE‚<9Æv~9Úçϸóð+¿”à¹ÄX)Ò'E»/ÈÖŽ+ÉAgù?³QîåëW€wøë²Ò†âR^¾¿`Õ¯Ò èà=Iå{¬dž‡”`šŸFr‰  9ßp6xáWÐÙÌ‘Ïh>^8È’Çä¦HÌ%‹jÄ~òÂ=S}-+²aŸ\ã¿ó@‹ö²Éï}ž¸bHe‘eïTÆ%;€ósé(ùR@žòÔ¶z(â&»ó/Âß-g¶Âcs=߉y–†V àI‚ì®_ïÈ’˜€>2“屈ä±yn3xAÚçÊ1‹³Ý†£ÞG'yØ5'×¾Tk2«Uº‡°©J.sä7}ÂèÝ>’Z}šæáb nÆQ "¯=àÿÀrt”ª#ÀÜÚÒ'$mÜñ“è½¹Ö@L"bv/×çø7–èí!æ˜OÆqqµI±áFýL-ÿžFÓà5ÒÙXƒr.EKzD ³|Ÿ!¬U»(Œ)÷~‡©-¼*Ä+wîÆú»U«§Ôö¸ê—²Ë/ç4øÝ¢ä‹®opÌæø®€dÊíêzŠ!rò€IæÉåmT‘ZOZãìiøÎ%„¢Qruô~†%ô æ!ã¶„rÛI©Aÿ™È÷ĦûTm¯v?Ÿ^l×pŸ(2bí*Á.Øá×tIÊumÕ-ÐÚXÀ†L,SS¥úf¾åÛ`ܸ0\ã%8¨Á*•x`ËN¯±[ý‡dq¼»Ê?ÞéÝåÕ ×D¥>¿1"]Ђk}³³l¶ð4ÖXqì¼§n6R%.î3[õе¸ÝpNÞ#°oŠ´Õ‘¬ÐmõcÔZégÞc¤. é³Qqa·m‹|`‘-D“Œ×fa_¯ž2ûm„Ñâ7\,ÞÑYéÔ¤êqÔŸ}-–J^rãZëDZsë¯îo}y- ξ|oôõH`D(áBwdïÍæv…EÓ›lÀˆõ®¬™$úð@!¦&Ã\ĺÏ0qyþiõ’PrœóÜFÌæBbÚK"4±Ÿ·@”ÊÊúy‚‰ý¿¼L+"IÌ'-õ–Æ*ò‰Ø¯ƒÅò) # âè™.s£`ÌD±qÂw~–X÷ǵT«`4 a¦¦hi˜!·—í$Ì £j ɸPÍž>jÁ¦Lý– øž;5¸ˆÁ¶æ!·nÂþ­IÐl“ÛÓL¡Ô“ÜnÜ#ô^‘2õ!…#Z¡rWm‘ê<)ÿÙpáb‘9vr‡ù;¸=݆.D•!*=£RL×¼­{E&Fà Aj%è9 þYÁŸÿ§¹$› MÓ| eÓu¦´­éí=zžCá¾ÿãHÔY›ä¢Z£Ù“†\¤ƒ°ÉÞtÑrS÷ñ ¤ž·&¶m¿Gý·ÞÅ\LGþò¹)Õ·ÇmûVøÄ炌…î{G`s¢ÝB¨çw­ö[¨ÕG h ƒÈ÷kÁªTvï9 !=ÏØ€ãwÈ‹а‡úÎøÖõ”ïØÚíi§´Â¤™?àÊ OkÙ£°ÊÒðœî-蚣ÞCÐrÙÀì˜jÜ;é˜,YTņ@K¨ÜÇž§£ͰÌÃÓçÞÖ—ñ†!a0è ©‘í¾ðñïú-L&Ëñ&Áìú=®]E¾œXàÒ«²£J3ä—¸¾vA£gr"½æÌ ‹L49æûkà«ÎÂôÏw¬´ifU{Û —,êI"sÃ\˜²c ¤å3CÔž¦~)®4Má/Ù8ç)½›³«ÞÁ«b}nxCß8?ÿ«ß…á/!pâ°ÇÕ/hÁKœâe©ÿeÆXÈþ‚]xrm0?> _\O*3bhƒRh…“Ú±Ÿ7ÎäeæÝÑðŠA#ß~q^ø¦‘BiÂɘtÑš«·ð€ÞÞŽ‰%uPß«ç¤yŒÂjlº0îí¡U)†R›@Ù¡ÁÔ¢y?›ü¦JÖ>%Oâ”t~Ä'ŠgÓG5†Ð&õT‹fØŽ¡Øãí–ÑZ’{BÏ_Ṧџç,ÌsWk?R—‡°E ]ÉÙ™î¬æiÒüË O+¯š£ @4-„|Á)½RëÜò°ø©„êþñ/K‚Á>ŸæÕ°zŽ^(M°dFAG ÝGfFæL9µ¾ —+.Šbè-*iÃŒÔPÓòXû%ÒºÕ¹mÞU“j<¾Ä¯ïñ´˜h¸¤hË%tÂËÎQ긎%j.K¿ÒÂ<,MvÕº ˜_cŽ"VAéË÷×»L|pögfâ! ¬Ù:Û}ò š{î&+¹\ãÊ%ŽûÈð '•¯¿›x­zKJÜT’Urp»-ž–Ku—¶#ç·gÏéUŽÔÏ´Í!iä·iK| Ì/{~Ÿâ§3”\ò÷iKßîVÐuh«xMÌ—)·‡Ú•~SQZ>~B>ÊôÆØeº„Fö_ei‚vŒ.â E5¦+D›²è5NBÐkùN"ÆWÍÊC<ó)w©‰ý ‚xZ¼ºô^"i“G%ÛfÛgbï+­X_6k¾8''Å>ÚzÛØÏÂÛ¡Ã@Mš÷äYPØrã%#GØÐ ÑHÉñ4õüºH~¾3óæU!½TIÓ±FÙ765ã©ÏÌmõ½ó³iéyD“ŸÒ:®ÍKLÔ\#õ‘LÙ̵ìÍó)!gØC“m.åàÕÎï©zÅßëE‚¼´Â\‡uÓíïØ.ä8}ZY¦+¹×µQ˜cRTŠå…›´dìõ?dCr¸v:XÒo””²CòCòJùÕ ÂD±•df²! W4„Æ–cØI4œÀ8Aé¯kšLJ Ríâq‹¡)ê• ²v ½d¶/g´¸œ·14éE:îkÔÊ ©TÖæùÚGMª+Z2]Q!-;<1ü^2ïZghÜ!å,¨i7†ØQ#k|ÇnŒ)䥔RU±‘¬E¤=¶fª‘FU ®V*Ön<ªc©¹Ö¦fîc§ÔXÞ˜2b.Y³ÉK ”hÑR;·¹}à^ƒÓ+;Û×6n³0Ö8 5¦¢x¬YE¬é­ck\M:¼6AUsõÁvaR•vŽ}é·`ÏÜ€0É€Eü2+¹eæ?Ü è1í°àÀ^TI>ºî˜þš+tp°p&*×XŽlá¹'*ªý<±N‡• L!­âŒóâ=AºÅg”#AET`T·*8{•ÇDÇ­ÿšoüÒk2ÓbåE3AÔt×M«3qC˜çAþÉä[Ò78äÀÎþ¼Ez¥r˜•îŸXâ;}®YŽ×XlÇ`’Ü éþÏ¡ :ŠC oöYE¥^Yn×!Œ Ò_”—Â'h°õÎLîLwfß«Çt˜ºw1"»ÅÅæÁýqKÉ«ƒDðø%’2S†ùÍ›”iv”‚éu¶ÚË‚BÑ‘ù]½K~;H¯¸v=eñ´dþWe¥óŸ£‹h¢QUŒ¨¯èT„üêN}³f®éÐs…PW«Nk±/¬š'ªŽ33¸?>u”vE>ž¬$.†%p+3³¿óÁŸBÜ1·-êwuÌ{÷¸eè y‰ šÔÑMøal¹“Ò€é,ìÕ…ü ÛðwLb¤{Ét&0ÝÖz9`›î™U:Ñiµb³,I†¿ð5eð¶ÞÌ“Ïdµ^ø$¯…M^Û@>ç<ËŒ—j*³?Š‹×ö¯ÝŽ|u]õ!“ÚÉ ¦É·wÊ$ªÄñõÈY^\H»•3Á8¼bˆG:ܱY0ÍÛ«ÐøÔwÓq"ŸÛéŸ^øRqÉo\Ý[èÂH›XÏÄe-Ñ’~÷²å+ƒšp‘¥ΰZ›ªÑÌ&‘4´L8b!ÝÊácÁ‚v™iïˉp¸ó?è6×+4áÏ`—ÃìFŠÇW.® ãK 3¼¹õúÜ(_p2‰i]·âl|Ó¬žï&1Ô,ØRtqa0âóAœHÎCiÄñd¿u:6’º‚ÈÝ·Á8Å2vM.å;UaùIpŸ+×·ÎC^(&`É23 %hyæ¥ï gGõ•Ÿà±Ä «ßo)O¨õ&Ä ³ÇWQz‰þ@K€u]õÃ>Ñ)Z„AŒªšjÁØÎÌ“­åO°¦â®Þmí²ñ¬)ª\užSÐåA††¿é I¶â\4=Ÿn³Z†ŠP vm좚aÜcù\´+2ƼŸbbEÝ:Éš3ºéŪ¼3)°—­rRfas Ý5q˜$/uÓî}ÙjgÛæÂÉEº1éÓ¯bAWͱe¼g™<ëÙщúèðÌ<›ux–VŸ’`ÄI¯â.a¬¦ì °OÃLe4¹†‡‰c"g9VÄ ·e 5È1a¶FTÂ7ýÔÍ#ØQãÝYe»&8Ä‘¶jÞ>Ä Åß·”Õkî´ñÛ^„çõšÚÛš†!«a'6äôïËMÕ »´¨2“Çä¡V ãaCq0ØíË£_­”f,Î|†açË{+K5•m™3¯özÑùǵ­Œu&Uvö9¶”7ÁâÂEïAÔY~þ—M§æÚFÝ!®¬€­wͱ£P­³+ŠA7-é›èB–ìRÒ®ûiRy”KÀ3øR‹™q¸‹›­Gx{JDúð,\Õ8'ôÃŒ;çÄk€]ü ›XŸ·€jŒD»b f¦•[–S.Z8ï÷ë(…;ÕÓ– ySÓ·6ó Yµü.1'ïæ]ÞaOþßÝ…ð6èl/nŽ ô~ÌÈ4¹øTŽY«{R°˜]¦ó錩¬×XîrÁ™D”ÇPª±FÓ‹z´ã·+)™Ü©î¢èº‘ }Ã4ÃýyE{;¦¤?ß6°åš¼ÑrobdF©<ü‹’ÓäÖ%n›ÙµI)áu=AÍ ½Š”ðáÑ°Éæ0¢â¤¤P¬£Yñá =Á®\^žßCµÒÌ·ñ—öC¡ÛfÓñcߥÕÏí±aÉùmz¢`»ò ®¹XöXPZ½%þ"êp\7ý—ŽÄŸ£fbŸ ³¾ï\'߹ؾGs¥eæ>óaà¯.!ÌÌ$¥nQD3­¾³SmÐÔüôAˆ\¦lfË:“-=!À{ðA¹H혌ÈÄrv‡Ý¤™O‘a×%qOjÝí/YÅ5Ô­÷Ýú7E,œÐ`5n!ÜÉS¨*¹‹•)㠉̥¢oˆÖ9SÜŽÔ»,šÈ“Å#áÃ5kÙÇÏm­ý¬´ëlj÷S¥r´ßý2ËêSX;c¢íÚÀ(P€ú1âz|8õ€ÄŽ®øÉm4à‹5–n|í#W\}H¦iaÊ=¶9ɲ8’³ýÎÒ-º¯´EÊ÷0WçÚK;Oçôùð§t0æ¼Éè$ŒÊ,¹m>x §”ŒªT„òŽæk”8É“£KÖ×S ÁÝDzÀfG= z×üð&—2±ØfmMôBY´kù€2ì«=ðßÇ?VíàW¸—Ïä))<_z9™µ';­m Hv`9«C"–iƒc†ØÎ€Ÿ-«ŠêÈS3¹ÌöÇà ų[ͦšmÇû¢¿ç– ì`Ž~Ž ªgÔË-Äûxa` XÛö.{¬Ô4åíôç‡;YG°@,ݪBö€á[Õ¦t¸"€)=·e=3fÈB=Áh% û•ã©4“»0IÒ½‹™·˜c/|¸Üw4lyážiu)½%±½ ÆEôò¸$Õæ ±N½¨TÉ€y Œ¤H Ž6bkˆ†½×]õµ™®v«® ŠÙ¬Þ(!0«R™Pç™ÖWEÿˆÞãÎÕà5ÄA¾&÷ûÙ/ÚHPö6¹#{ }ù@²±h—EÑqÇfÂᇫâã&gsL_G‡ˆ™R³½ šÉ€@g\£Ü ”Oàæ„îÉy!¬d­N„X1ƒð« ±¼eJq0" æÃ«ü³Cðä†VÅtœÚRJ·(½y÷¶èÖ¤Î)ÿ…GõõxŠCÀW“ºõBÔˆfJ7Wg[ñ\.t7ûJñû#žãžõ§ †4#XÖ€DW–¢Wx$Û—‚ŸÉÉ6 €º¡W*ÿ­ëž[Ç{Æ/^®µä’xá*•^#8÷Sô+Nwš’¯ðöJÜ’eX«œsHQáßMú½{Yq'TAË8샖AÇþn¿òèˆî8fÊõcE$H6áä±IG,š¼ˆX$€´ºÜ»WÒR3Œp,6çP«ob|`Ô×$bמW4£\A†åKÛ)\ç–Èù˜[oÛèî`#»:ôaÜú/¿00Ä…ðPC=ï'o Yjô |>%Y¥Ê –ö}?ðfQÆ:¿üÍú4ÒˆÒDjzÓÐÐlTZªù~]rz¸ìn•ÒÞ»]ãí—e€ Ö…>¶æ>X϶½ñÜÃöfjÑôj Ær†²|0ñ5¹b‰`5e×'¢RP‚g·þÈ e´ØNÆ6ø *X@ÃÂü­§Pá›ä©^›†¯þtg#An-"yg6ý5·…ÐP/‡R8Óû°˜H»œLWžÐ¯Ip^7ökÛôÏfÔ¸=µ)¥É¢¬É”ÄØÂo¼ç^¼¥7ÍœÀ¬Ï!k?rdwãswØ8tP—p-äûx§ÍÉ).‰)-'´\¯ˆÊP]<ß¾G£Âp<6ZÏRÍØaI ޵âih]÷íÛÛè¢ÁÞ£&â¶vþðly#¥´=~ Á O÷A…à@«èÔâøEÙM—q’Rª1”ŽO_”(8ÐŒt2Â>Ò“.Så<ˆ;û~Ê-eMCÑÝ$ø‘´Šàdî}â€YéLFMØ2øåd×l,|t·L”Æ—í]Æ—›´+68õÐO[Þ¦Ðèóˆ59eXz¨JxÈÑͦïîg"4½¢ðT@œÃinb ™‚/ä>úÝ5)¸à^Ë¥…ẹ  Ø4ÿ–$Uí"ùËî¶¼(¤9Y˜QÎvpó6Ì-CQa*©ËˆjÁxôlhÿ˜ïªÏ˳,+ÿ|®Šk€d\Ý‹39­#c'Â<48·> stream xÚí\[sÓH~ϯèÇÝššôýV55U$$ À¦xp‘xqì`;̯ßsNKvK²ßØÝª¥RjµÕ—sûÎE’­LkÏ¢eÚ(&ƒ³dÊG8̵̮0ãq<2ëp<0gaÜ*桯­dÁè=m-‹ZÁgäP:I)t<“JJ¦Ðöt’I ´³LZ“agé`\»È¤°¿ƒå!š=í5SÂÂ>^1%œöŽ)EË”68™2¸ó)«`y€Éù (2`r Ža*ZØ9ÀaqÈ!A@ Ñv×(©Fà̳šˆB[œƒ|ƒŒ@V€¨ ›=#4nŠWpw˜h„eÆz ‡‚«NièèÐdP±ê”e h¤b6H˜‡1îi˜ÓHKZæp…»ôÌk/ ˜·¸³Œ,H$¨ $5J²¨€_£‹ÔoÚ ´´g”ƒžC² t/Î׌(À””!¥m¢ž¥´iX!½ÃQ4vôÀ»JìÁ 0Œ†$Áí0–TŒc;R+R ¬¾±+ŒÝD `V˜A”UˆGÀ´d$ô@¨Jèã/.5¤–^‚Q@&éÎ(z„.È=ã‰mè9–‡Ž- F¥4Í A. û.Õ. f!;A[Í`§€¬ZœâÛÐ °/îÖi™Œt©a0ª ðQU ;V«½_~Ù㯿ÝŒ¿ì]{üp4œÃéGðÒW{üU1Ý/Š ¹,]:-.û½ƒÑWö§€ @à£ú°[Œa-C½à¼_¥íaKöË/Œ£¤‡ XÝ¥>º’,ûˆêÂjþr<º8+¦ìO`ïá1㯋¯Sö¡Úx1ßF·ø6r;¾i=ñ—Ëó˳½ ®-ƒYM³‚îgüu™aS¾­hó¾ ß‹U¿1ßmÌX¹ß¯÷Ã~c¾Û8±;ÄÉwóQÛŽ-Öœ( q²”FS\MK5¤„-`£ÔϽÞ(ŠÎÛÈìÚs»ÃX&g®‰\†Årn,NznEè¹.qæ2txOMœÜœ¹l™iw`6ßi.l'gW(î(¥§¢%hsH÷^îP¦¥¯¾‡¡ó³Øè‹àÛ"Ø-EXÃõ6e;´¡ç·„^î@÷‹Ðÿóà¹u í¸ä÷6NîRÛ—¡ ʱ0¬%Bn>èØ¶»l*Blc-„íD¸?#oï"± ž(¿ ÛÛk±’¸+”lÌS»‹þSF¨&¯øàcW^¶*:á÷õ8ë°Y„²nÞë:¤Rj_•d‹ò´øj¾}$[V¿â]Ø·eÛ¹D;»ï« Aë}]¶RDµïªêÞ SS›æ$vB û²l+æÕ"ŽKšëþ1‰Âx‰t<Žzãö©ò‰pÉ l\‚m`óÀ‚5ȾQù¹Å'1¶ƒ x…m ¡%ní½ÁÏÁVÂÇøV9‚žËÚnsÝYØL.hs“Xb<µärµÑ´Oê§Q`\°¨p|´ ‚Z#gzMm¥Ëe@¨«D8[â®ÐÂ܀Ϝ@~|~hê[QÆû[Ü©âã#ä‘úT¼¨¿J+eR-[wñJ[—§î‘œv}¤¶´~ÍæR»d‘VZ® †²•BZœœNÕð¡lÓœRa]¶™‰v”ä-ZÑ)þÐZN:ôG‰âù!8‹§ýÓ<Ý#Ú|ÄVjƒµ…í"xxYшfP²yA1È P½LmLÛ’ʈN‡&kò.h3 Z˜µ™iŒS³6¡/-÷¡~ÅÐa!tDŒH¹2Q£®2r}¶¨£gIŒÔbFwýq|÷㇦ïÓÜÑD¸ÁõJÕ÷K8æá.?+8[ëÒ\‡Œ’æÂuœ[Í›­+ûјt­¼®aî…g Y÷¬öÆñüŒs°Ωæáß\UcÕ/ËòuįoøÞV­‚˜@y+åtKQ w@¢CÊÝ¢>F³SÇV=T¶GjÓ®ÆcðLmºâ­¨b`Y©!·.¬¬Â¡=ÍÓPÚÈRž´ÚÁmV”®/¯ÑÚrwñßZ çåþ8߉¥R£úJß—™ Í^¦ÚÌ ¥y_ ìÏg” LWÕ|d€4Ç­£>ä_îef£=„n1U‡T[2¨wûøæ’JI%©‰¦œm=¾ópÆD‰×`¦H1Ú¤0LVR¢T´³£QJ¬*‚ñÕ+ªÞAÂP©@k4-­l?ÛaÞ³Z É2TzJCåªÇ«Î0ûRb ®, !j,%-UÈÁ`âK0ˆ^`R†BKX’ÉàmA„êlpBm*¥[*9)5ZMp ¨ëÜ]R;׊!(ZXƒo…±n0šv„’5Mh È©ñ¾´£6ȳü¥y€œˆåJÀð$°”1ädÀr7(·O¯ØQ.ê§Ò¶Ý_¥…ÛA^#¯¾8k1Y}6²¼%]VhY}Ù ›R³øjE¯ôæ´(R»pª‚””f:Cj%µXå–îOmšA¢¦¥²è˜"Qó‘# PýJNž‚‹—X×Úˆw3 e©ui¸t<¼½è]é#†G‘@Ø £ˆKQ 6p1Äq ‰E—‚¶™ ÙÙf*+ã[«-µÑ°²~qS-¦MHÉØÇC̰H©RˆYj8.ã<ã×ip_<(­œ¥cü"K™îó¾Ê1›eBuàW-~¯¤¬)–Ö+„Ÿܰ^©˜ÀÒÇL‘3F)U¹ZSÍ¡yª= i H& Pf{ùrMuh téœÌ…d‘±0»àJÃÓ‡¦á(K?<*ŒTân‹¥ÃlãM #•iv…‘jŸ#ÿ%m ~8G1Óe ‘ TkBdF~Ü#ýwŽô·þŠ¥ë~¤…iá¾´@_ËJÚ,M?+ëðC4‰”£·©zóÈTEÑã·T}É~o·º†‰w-¯Í‚8΃ñZ‚p¶4”™`€Ù»|Eó°˜\Œû·ÓÑ8½²yÞ»‘§NO:<==‘½« 3iƽúY+ö³¢;YC÷±öøƒÉ¾rföný«køôG28ö³ÄÁ“ioпx0¼p.œM‹›7`«=þG¹Êh ›\÷Æø‚èü€?äGü„?åÏø)ÏÏ‹i_Œnnzüj\ô¦Å˜âƒÞÍùeŠÉ„ßÜñ!¿å·Å¸?ºäÓÞÝ?÷Ç} i”Î_UݧçÞ¿~ú–´á+C–º^îHAvêâS]»Ž(Çg¯Ÿ(a±(ÊT²H±+»†NYŠº,~Y^þöäôå{’%vÈ+ŒbU³YL§,ÖÆý®㜺xqñž½~|øÄ{Õå‚FT≸x¢ÎÅnCáE^|¾ë øÇþ_ÿ8ºó+>àÃþ°à#>‚4€$øíànÂ'ý¯|z=. >ý2âãQMé=ðªÊxóæÅáÑ *£Ã:%l•Ú‰.|·.H~’ålK¶VpytôàùÉ ”¬Ã!µ›XìF2×) 5)þ*†uÖ 1Þbˆ9{×\ôËèDú ‰÷v.È·™_Ñ)To<}!oäçãÞE1(>–½òâÝ`PL«<’ Þ~ìûÓo”LÒ¥›þðóÊ`Ú¿|xßô½qu¦9u­­ÌŽ>xôŒ´æ:¼t–~WñÙãtf»ómoªèO>Ýô¦×ü²wu 6.Ïb®Ôžžž¼yGbv¥R râo:ðG@>¨]`#n&g2yMZ³VÔzÿôñ³ß~'i»œ[ ´Ó™ž ŸBáÔԃѰ¬¬/yQÏûµÌ_ÕÝ×üúÛíu1ä}þ/,ÂËúÊoª †w7çÅxÒ¿VE¿Å/Œqê%Òeõô™¾MËÈ ÑÒÑM?1E‰‰ÊŠÉ 7¹æÓ¬¼¸ãñ/ü+ÿÆÿn'd³V$~øæùÛӣܿ¯Š«»Ž`…7Aßh ¨Øk6·u›ûÜæÆwØÜä&Gd,3ù“¥FwI™á{S²ýŧ¤»µPp9`¦«ƒ¡øz÷[ÿLP™…À(&Ó>ðµ",úƒË wÃK w1Kq²V*;|ÿþÍ›“&N^œú‹±âdŠ÷f¬æÆÁ:Z’j 0É5¨}4¿WZªIn×JkÞ=~~TyÈYoiT”¢ø½BAò §T.7}œÉ­d—ÈÜIðוÆErôŠûƒ^‰ñAó¼·‰v%¨)ìAÑA3«ir+"níZ©ýééÃ×/Þ7­Œ&é²´GKãWÑþê\ojé áÒØN[‘}OÁ¦d´>h|¦Í)ÿR}­´øî÷÷‡'¹èKR€Ç&޺ʆز.¶¬‹­;r™©vØ6 ÜÜ&½áe3¬œúp_4éOæ®qs‰È+†éÔLßÅ_Ò“…Å¡ê\޾ÜïIóë;­2ìz¯^Ÿœ6!¶Ì» ¿Æ*Â60˼+„µ€6‡Y²·UÝ¢ ¼#k”«ÅÏ5íº *8^Œ.ûÃ+PtÿãGpŽ!þRâOEò ˜Ö¥70msˆ—…Tæ¹_f.”ræ·ü¤ÌR]¥’PÈ´Ýœéî|Jñ"Ô&½IA¿~i½F©EúïôÚãþx2Eßcè›ÏzÕüô¶9½žÐ?Y]–‘o¼·hRw-êÂçäñSE^èõÉ7Þ54ɇ6yY#/3òv}ò× òZ4Éãs“u2Õ›õ‰7Þ7‰«&q]Ó¼ÌD—ˆ^ZÞ$ÞBÞGÌ%×™Úýú´ëϳ›´[˜ÃgssÚ6£½à›ž›Ô[5Àe’˰>õÆ#ÜqÓ\®u©2_®ñ`µI\-•¼F|ÉÏ9›ÄÍ2âÊdZßo'MÚ ‚œê2ºˆ½ë a“‘ö´­™ WCùãڪʠÿ„´6gϱœÙ60kÈ´8ÔN8[úä¤ÉZ§¥t™ÞÔ.¸ë|ºÑä¬ë°L–A”ØcKoț̵pïjF•1S›Þ‰Q»î™›œ…¥j‹YêS;±çÒ;­sN¬lSWa^=ÁßWßჾÙo¥MõOižö/ñ¾~M²b–ê=–¨°¤‰íþ@úîK¯rYÊ„,½Íb)@Óîÿ·‰Í endstream endobj 468 0 obj << /Producer (pdfTeX-1.40.15) /Creator (TeX) /CreationDate (D:20150303184811-07'00') /ModDate (D:20150303184811-07'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) kpathsea version 6.2.0) >> endobj 462 0 obj << /Type /ObjStm /N 24 /First 199 /Length 547 /Filter /FlateDecode >> stream xÚ¥–Ak1 …ïó+üÖ’,[†K޽„Ð[éa¡K(”¦$é¡ÿ¾òèMèJ:^Xx^1|oFÏòŒ–”S+©¯?2KDšØ4‘Ô$CUSêWéP¿®º2IjC…“™.¬”úøßr¢<Öæ ÉNHáæØ±(¾P©¾T1_ l©äVëBÆýä¥T¿±nä‡fc_T·×Qi‰™i¹¹YNý¸¤Óýùñò²œîž~~MuñÿÏ_ lNËéÃ×//éSéã_ÒºJÍ!‚âzÉçåöö0½ñJh² [Ð ÅyzzP'¡ÌÐJyÚ€HÀ‹Áf…Z¨ÐÙyH¬BPÔ ¼5Ï{(žCÁB΄  IÓ±¨÷Èš65ä¸ y“]áÄ ‘2gdÎY¡6íÁý÷±‚F.>\ÐmóýgdϹpA½´ñ(;L6#{ƈ³¢^ѳªó½AöÜг†º¡gVæ= ½é`uô¬G]r†Ê´‡äèX˜{¡­=“˜ÿ9œÂ` CQÇüK¹Â£€…ìEᡨ+<ê!ÝyT°*<z…¹̽Ø s/õÏQò»ç®üiRwï&lÕxÿŦj!ØbD:_ qæâ]6mû{Œ…çMƧF<Ž­aAãñ¤¼{XÿËd|šDÿÉoñ*ÝŽ¾m«nQÿE¹;¿ž¿==.{»¿æ7ý6 endstream endobj 469 0 obj << /Type /XRef /Index [0 470] /Size 470 /W [1 3 1] /Root 467 0 R /Info 468 0 R /ID [ ] /Length 1256 /Filter /FlateDecode >> stream xÚ%•kh–eÇïÿ}?ïûι“sîäiÑô:i Ñ lý^ºˆX¼X¬"êb¢ØÿžZÚˆ%À[ÏI—K£?KuËS×¥zûíÀùné*¢øæ ÆëNÕïƒO½Áã90?¦É!Nóð奼+‹à+nI0{Ö97¥ ˜%Á·œÔºÊ”Y2ü²ÍjaÊ,~M±”³4øM;¤L”eÀoƒ”‰²Lø¤L”eÁïy^㓨Œ•eÿºW- “å¿¶MÊàX>ü¡õRfÆ àè‘3c£á)3ccáOÖxý1 Žƒ?sG- ŽÁ~ZÊÌX ü¥J)ãb᯼ e\¬þ‡ûRÆÅÊཪñÉTfÆÊáïW 3cÓàÿ"e\lü@¶”q±Jÿª”q±Y©?I«FȾ§ñzìLŠÕ"®P “bu¥û¥ ‰ÍE¨|"e4¬¡nðU06¡ip7FÃÚvh| •ù°f„®µja>l!B߇RFÃZ¶êshŒ†-AØõ®”Ѱ¥{OI [ŽðÆv×)a>¬áðµ0ÖðA‹”ѰN„ÿ•2¶áì9)£aÝ—Ó¥Œ†­C¸æ5>Ê|XÂoúÿȧmD¸÷’”Ѱ>„‡Gõáá¬Cât¥Ö᥶IcD„(g„öH§&ˆ8¢ÂÛjB$!*üŽ%’Íœ$M%RÕ6J»MICÔܪµaD¢Ží‘ANd"Ú¼G-ˉD¢í—µ–Cd#zùœ4ÈE´ÿ‚t$‘èÐ3ÒQD¢c“µ‡¶CŒFô ÔRHŒEtæ¢t<1Ñ—¥ÅD¢+£¤ˆD×I'“ˆRb2QFL!ʉ¥ÄTb1˜AT•ÄLbQET5D-¢»´ÑlÄü#Uuˆ¼µ9ˆÕîS5±ÎUõˆí½£ª±c%ªæ!öE²ªùˆýÞ jb?RÕˆxA•ª&Äk¶¨jF|Õ]U-ˆ»®j!â÷w«Z„D¼^U+³»T-Fbå_ª– ±ïuUm|â™H|¥ÖÏWÛŸEð…ög9H\œúô~}ÕýÑQM6 endstream endobj startxref 508615 %%EOF hmmer-3.1b2/README0000664361611702660230000000217612473612612013155 0ustar wheelerteddyHMMER - profile hidden Markov models for biological sequence analysis http://hmmer.org/ Version 3.1b2; February 2015 Copyright (C) 2015 Howard Hughes Medical Institute. ------------------------------------------------------------------ HMMER searches biological sequence databases for homologous sequences, using either single sequences or multiple sequence alignments as queries. HMMER implements a technology called "profile hidden Markov models" (profile HMMs). HMMER is the software engine underlying many protein family domain databases and large-scale annotation pipelines, including the Pfam and SMART databases. Other files to read in the top-level source directory: INSTALL Brief installation instructions. Userguide.pdf The HMMER User's Guide. COPYRIGHT Copyright and license information. LICENSE The GNU General Public License (GPLv3). To get started after installation, see the Tutorial section in the HMMER User's Guide (Userguide.pdf). ------------------------------------------------------------------- The HMMER development team HHMI Janelia Farm Research Campus http://hmmer.org/ hmmer-3.1b2/Makefile.in0000664361611702660230000001763212473612611014344 0ustar wheelerteddy# Top level Makefile for HMMER3 # # On most systems, to build H3 you should only need: # % ./configure; make # # Optionally, you can run a test suite: # % make check # # And optionally, you can install everything more permanently: # % make install # # For more information, see the Installation chapter of the HMMER # User's Guide. # # VPATH and shell configuration # top_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ SHELL = /bin/sh # location of easel ESLDIR = @HMMER_ESLDIR@ # location of libdivsufsort for suffix array creation SADIR = @HMMER_SADIR@ # Package information # PACKAGE = @PACKAGE_NAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ # Installation targets # prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ mandir = @mandir@ docdir = @docdir@ pdfdir = @pdfdir@ mandir = @mandir@ man1dir = ${mandir}/man1 man1ext = .1 # Compiler configuration # CC = @CC@ CFLAGS = @CFLAGS@ @PTHREAD_CFLAGS@ @PIC_FLAGS@ LDFLAGS = -static @LDFLAGS@ SIMDFLAGS = @SIMD_CFLAGS@ CPPFLAGS = @CPPFLAGS@ # Other tools # AR = @AR@ RANLIB = @RANLIB@ INSTALL = @INSTALL@ # beautification magic stolen from git # QUIET_SUBDIR0 = +${MAKE} -C #space separator after -c QUIET_SUBDIR1 = ifndef V QUIET_CC = @echo ' ' CC $@; QUIET_GEN = @echo ' ' GEN $@; QUIET_AR = @echo ' ' AR $@; QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR1 = ; echo ' ' SUBDIR $$subdir; \ ${MAKE} -C $$subdir endif # Programs installed by HMMER (stable, documented) # PROGS = alimask\ hmmalign\ hmmbuild\ hmmconvert\ hmmemit\ hmmfetch\ hmmpress\ hmmscan\ hmmsearch\ hmmsim\ hmmstat\ jackhmmer\ phmmer\ nhmmer\ nhmmscan\ hmmpgmd .PHONY: all dev check pdf install uninstall clean distclean TAGS # all: Compile all documented executables. # (Excludes test programs.) # all: ${QUIET_SUBDIR0}${ESLDIR} ${QUIET_SUBDIR1} all ${QUIET_SUBDIR0}${SADIR} ${QUIET_SUBDIR1} all ${QUIET_SUBDIR0}src ${QUIET_SUBDIR1} all ${QUIET_SUBDIR0}profmark ${QUIET_SUBDIR1} all # dev: compile all executables, including drivers. # dev: ${QUIET_SUBDIR0}${ESLDIR} ${QUIET_SUBDIR1} dev ${QUIET_SUBDIR0}${SADIR} ${QUIET_SUBDIR1} all ${QUIET_SUBDIR0}src ${QUIET_SUBDIR1} dev ${QUIET_SUBDIR0}profmark ${QUIET_SUBDIR1} dev # tests: compile all test drivers for 'make check' # tests: ${QUIET_SUBDIR0}${ESLDIR} ${QUIET_SUBDIR1} tests ${QUIET_SUBDIR0}src ${QUIET_SUBDIR1} tests # check: Run test suites. # check: ${QUIET_SUBDIR0}${ESLDIR} ${QUIET_SUBDIR1} tests ${QUIET_SUBDIR0}${SADIR} ${QUIET_SUBDIR1} all ${QUIET_SUBDIR0}src ${QUIET_SUBDIR1} tests ${QUIET_SUBDIR0}${ESLDIR} ${QUIET_SUBDIR1} check ${QUIET_SUBDIR0}testsuite ${QUIET_SUBDIR1} check # pdf: compile the User Guides. # pdf: ${QUIET_SUBDIR0}documentation ${QUIET_SUBDIR1} pdf # install: installs the binaries in ${bindir}/ # When man pages are done, will install man pages in MANDIR/man1/ (e.g. if MANSUFFIX is 1) # Creates these directories if they don't exist. # Prefix those paths with ${DESTDIR} (rarely used, usually null; # may be set on a make command line when building contrib RPMs). install: ${INSTALL} -d ${DESTDIR}${bindir} ${INSTALL} -d ${DESTDIR}${libdir} ${INSTALL} -d ${DESTDIR}${includedir} ${INSTALL} -d ${DESTDIR}${man1dir} ${INSTALL} -d ${DESTDIR}${pdfdir} ${QUIET_SUBDIR0}src ${QUIET_SUBDIR1} install ${QUIET_SUBDIR0}documentation ${QUIET_SUBDIR1} install # uninstall: Reverses the steps of "make install". # uninstall: ${QUIET_SUBDIR0}src ${QUIET_SUBDIR1} uninstall ${QUIET_SUBDIR0}documentation ${QUIET_SUBDIR1} uninstall # "make clean" removes almost everything except configuration files. # clean: ${QUIET_SUBDIR0}src ${QUIET_SUBDIR1} clean ${QUIET_SUBDIR0}profmark ${QUIET_SUBDIR1} clean ${QUIET_SUBDIR0}testsuite ${QUIET_SUBDIR1} clean ${QUIET_SUBDIR0}documentation ${QUIET_SUBDIR1} clean ${QUIET_SUBDIR0}${ESLDIR} ${QUIET_SUBDIR1} clean ${QUIET_SUBDIR0}${SADIR} ${QUIET_SUBDIR1} clean -rm -f *.o *~ Makefile.bak core TAGS gmon.out # "make distclean" leaves a pristine source distribution. # distclean: ${QUIET_SUBDIR0}src ${QUIET_SUBDIR1} distclean ${QUIET_SUBDIR0}profmark ${QUIET_SUBDIR1} distclean ${QUIET_SUBDIR0}testsuite ${QUIET_SUBDIR1} distclean ${QUIET_SUBDIR0}documentation ${QUIET_SUBDIR1} distclean ${QUIET_SUBDIR0}${ESLDIR} ${QUIET_SUBDIR1} distclean ${QUIET_SUBDIR0}${SADIR} ${QUIET_SUBDIR1} distclean -rm config.log config.status -rm -rf autom4te.cache -rm -f *.o *~ Makefile.bak core TAGS gmon.out -rm -f cscope.po.out cscope.out cscope.in.out cscope.files -rm -f src/impl -rm Makefile #Use 'ifneq' instead of 'test -e' because the '+@' in QUIET_SUBDIR0 can't #be passed to the shell. Note that ifneq breaks if indented. ifneq (,$(wildcard ./release-notes/LICENSE.sh)) -rm -f release-notes/LICENSE.sh endif TAGS: -rm -f ${top_srcdir}/TAGS make tags-append tags-append: etags -o ${top_srcdir}/TAGS -a ${srcdir}/Makefile.in etags -o ${top_srcdir}/TAGS -a ${srcdir}/COPYRIGHT etags -o ${top_srcdir}/TAGS -a ${srcdir}/INSTALL etags -o ${top_srcdir}/TAGS -a ${srcdir}/LICENSE etags -o ${top_srcdir}/TAGS -a ${srcdir}/README etags -o ${top_srcdir}/TAGS -a ${srcdir}/configure.ac etags -o ${top_srcdir}/TAGS -a ${srcdir}/src/*.c etags -o ${top_srcdir}/TAGS -a ${srcdir}/src/*.h etags -o ${top_srcdir}/TAGS -a ${srcdir}/src/*.in etags -o ${top_srcdir}/TAGS -a ${srcdir}/src/*.pl etags -o ${top_srcdir}/TAGS -a ${srcdir}/src/impl_sse/*.c etags -o ${top_srcdir}/TAGS -a ${srcdir}/src/impl_sse/*.h etags -o ${top_srcdir}/TAGS -a ${srcdir}/src/impl_sse/*.in etags -o ${top_srcdir}/TAGS -a ${srcdir}/src/impl_dummy/*.c etags -o ${top_srcdir}/TAGS -a ${srcdir}/src/impl_dummy/*.h etags -o ${top_srcdir}/TAGS -a ${srcdir}/src/impl_dummy/*.in etags -o ${top_srcdir}/TAGS -a ${srcdir}/src/impl_vmx/*.c etags -o ${top_srcdir}/TAGS -a ${srcdir}/src/impl_vmx/*.h etags -o ${top_srcdir}/TAGS -a ${srcdir}/src/impl_vmx/*.in etags -o ${top_srcdir}/TAGS -a ${srcdir}/documentation/man/*.in etags -o ${top_srcdir}/TAGS -a ${srcdir}/documentation/man/*.man etags -o ${top_srcdir}/TAGS -a ${srcdir}/documentation/man/boilerplate-tail etags -o ${top_srcdir}/TAGS -a ${srcdir}/documentation/userguide/*.in etags -o ${top_srcdir}/TAGS -a ${srcdir}/documentation/userguide/*.tex etags -o ${top_srcdir}/TAGS -a ${srcdir}/libdivsufsort/README etags -o ${top_srcdir}/TAGS -a ${srcdir}/libdivsufsort/*.in etags -o ${top_srcdir}/TAGS -a ${srcdir}/libdivsufsort/*.c etags -o ${top_srcdir}/TAGS -a ${srcdir}/profmark/00README etags -o ${top_srcdir}/TAGS -a ${srcdir}/profmark/*.in etags -o ${top_srcdir}/TAGS -a ${srcdir}/profmark/*.c etags -o ${top_srcdir}/TAGS -a ${srcdir}/profmark/x-* etags -o ${top_srcdir}/TAGS -a ${srcdir}/profmark/pmark-* etags -o ${top_srcdir}/TAGS -a ${srcdir}/testsuite/*.in etags -o ${top_srcdir}/TAGS -a ${srcdir}/testsuite/*.pl etags -o ${top_srcdir}/TAGS -a ${srcdir}/testsuite/*.sh etags -o ${top_srcdir}/TAGS -a ${srcdir}/testsuite/*.pm etags -o ${top_srcdir}/TAGS -a ${srcdir}/testsuite/*.sqc ${QUIET_SUBDIR0}easel ${QUIET_SUBDIR1} tags-append ################################################################ # HMMER - Biological sequence analysis with profile HMMs # Version 3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # HMMER is distributed under the terms of the GNU General Public License # (GPLv3). See the LICENSE file for details. # # SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/Makefile.in $ # SVN $Id: Makefile.in 4489 2013-06-19 02:46:43Z wheelert $ ################################################################ hmmer-3.1b2/profmark/0000775361611702660230000000000012473613132014106 5ustar wheelerteddyhmmer-3.1b2/profmark/x-fps-ncbiblast+0000775361611702660230000000650012473612612017106 0ustar wheelerteddy#! /usr/bin/perl -w # Do a piece of a profmark benchmark, for NCBI BLASTP+ searches by FPS # (family-pairwise-search; best E-value of all individual queries). # # This script is normally called by pmark_master.pl; its command line # syntax is tied to pmark_master.pl. # # Usage: x-ncbiblast+-fps # Example: ./x-ncbiblast+-fps /usr/local/ncbi-blast-2.2.21+ ~/src/hmmer/trunk testdir test.tbl pmark.msa test.fa test.out # # SRE, Tue Mar 8 09:12:11 2011 # SVN $Id$ BEGIN { $top_builddir = shift; $top_srcdir = shift; $wrkdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } use lib "${top_srcdir}/easel/demotic"; use demotic_blast; $blastp = "${top_builddir}/bin/blastp"; $blastopts = "-num_threads 1 -num_descriptions 9999 -num_alignments 0"; if (! -d $top_builddir) { die "didn't find BLAST build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find H3 source directory $top_srcdir"; } if (! -x $blastp) { die "didn't find executable $blastp"; } if (! -e $wrkdir) { die "$wrkdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while () { ($msaname) = split; %seen = (); %best_pval = (); %best_bitscore = (); `esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname`; if ($?) { print "FAILED: esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname\n"; next MSA; } # Extract a list of individual sequence names from the multiple alignment. $output = `esl-seqstat -a $wrkdir/$msaname.sto | grep "^=" | awk '{print \$2}'`; if ($?) { print "FAILED: esl-seqstat -a $wrkdir/$msaname.sto\n"; next MSA; } @qnames = split(/^/,$output); chop (@qnames); # Loop over each query; blast; accumulate best pval for each target foreach $qname (@qnames) { $output = `esl-sfetch -o $wrkdir/$msaname.query.fa $wrkdir/$msaname.sto $qname`; if ($?) { print "FAILED: esl-sfetch -o $wrkdir/$msaname.query.fa $wrkdir/$msaname.sto $qname\n"; next MSA; } if (! open(BLASTP, "$blastp -db $fafile -query $wrkdir/$msaname.query.fa $blastopts |")) { print "FAILED: $blastp -db $fafile -query $wrkdir/$msaname.query.fa $blastopts |\n"; next MSA; } if (! demotic_blast::parse(\*BLASTP)) { print "FAILED: demotic parser for blastp output\n"; next MSA; } for ($i = 0; $i < $demotic_blast::nhits; $i++) { $target = $demotic_blast::hit_target[$i]; $pval = $demotic_blast::hit_Eval[$i]; $bitscore = $demotic_blast::hit_bitscore[$i]; if (! $seen{$target} || $pval < $best_pval{$target}) { $seen{$target} = 1; $best_pval{$target} = $pval; $best_bitscore{$target} = $bitscore; } } close BLASTP; } # Append to the outfile. foreach $target (keys(%seen)) { printf OUTFILE "%g %.1f %s %s\n", $best_pval{$target}, $best_bitscore{$target}, $target, $msaname; } unlink "$wrkdir/$msaname.sto"; unlink "$wrkdir/$msaname.query.fa"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/x-hmmsearch-max0000775361611702660230000000515712473612612017045 0ustar wheelerteddy#! /usr/bin/perl -w # Do a piece of a profmark benchmark, for hmmsearch --max. # # This script is normally called by pmark_master.pl; its command line # syntax is tied to pmark_master.pl. # # Usage: x-hmmsearch-max # Example: ./x-hmmsearch-max ~/releases/hmmer-3.0/build-icc-mpi ~/releases/hmmer-3.0 testdir test.tbl pmark.msa test.fa test.out # # SRE, Tue Apr 20 10:39:31 2010 [Janelia] # SVN $Id$ BEGIN { $top_builddir = shift; $top_srcdir = shift; $resultdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } $hmmbuild = "$top_builddir/src/hmmbuild"; $hmmsearch = "$top_builddir/src/hmmsearch"; $buildopts = ""; $searchopts = "--max -E 200 --cpu 1"; if (! -d $top_builddir) { die "didn't find build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find src directory $top_srcdir"; } if (! -x $hmmbuild) { die "didn't find executable $hmmbuild"; } if (! -x $hmmsearch) { die "didn't find executable $hmmsearch"; } if (! -e $resultdir) { die "$resultdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; while (
) { ($msaname) = split; $output = `esl-afetch -o $resultdir/$msaname.sto $msafile $msaname`; if ($? != 0) { die "FAILED: esl-afetch -o $resultdir/$msaname.sto $msafile $msaname"; } $output = `$hmmbuild $buildopts $resultdir/$msaname.hmm $resultdir/$msaname.sto`; if ($? != 0) { die "FAILED: $hmmbuild $buildopts $resultdir/$msaname.hmm $resultdir/$msaname.sto"; } $status = system("$hmmsearch $searchopts --tblout $resultdir/$msaname.tmp $resultdir/$msaname.hmm $fafile > /dev/null"); if ($status != 0) { die "FAILED: $hmmsearch $searchopts --tblout $resultdir/$msaname.tmp $resultdir/$msaname.hmm $fafile"; } open(OUTPUT, "$resultdir/$msaname.tmp") || die "FAILED: to open $resultdir/$msaname.tmp tabular output file"; while () { if (/^\#/) { next; } @fields = split(' ', $_, 7); $target = $fields[0]; $pval = $fields[4]; $bitscore = $fields[5]; printf OUTFILE "%g %.1f %s %s\n", $pval, $bitscore, $target, $msaname; } unlink "$resultdir/$msaname.hmm"; unlink "$resultdir/$msaname.sto"; unlink "$resultdir/$msaname.tmp"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/x-fps-ncbiblast0000775361611702660230000000642712473612612017043 0ustar wheelerteddy#! /usr/bin/perl -w # Do a piece of a profmark benchmark, for NCBI BLASTP searches by FPS # (family-pairwise-search; best E-value of all individual queries). # # This script is normally called by pmark_master.pl; its command line # syntax is tied to pmark_master.pl. # # Usage: x-ncbiblast-fps # Example: ./x-ncbiblast-fps /usr/local/blast-2.2.22 ~/src/hmmer/trunk testdir test.tbl pmark.msa test.fa test.out # # SRE, Tue Apr 20 08:29:03 2010 [Janelia] # SVN $Id$ BEGIN { $top_builddir = shift; $top_srcdir = shift; $wrkdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } use lib "${top_srcdir}/easel/demotic"; use demotic_blast; $blastp = "${top_builddir}/bin/blastall"; $blastopts = "-p blastp -a 1 -v 9999 -b 0"; if (! -d $top_builddir) { die "didn't find BLAST build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find H3 source directory $top_srcdir"; } if (! -x $blastp) { die "didn't find executable $blastp"; } if (! -e $wrkdir) { die "$wrkdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while (
) { ($msaname) = split; %seen = (); %best_pval = (); %best_bitscore = (); `esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname`; if ($?) { print "FAILED: esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname\n"; next MSA; } # Extract a list of individual sequence names from the multiple alignment. $output = `esl-seqstat -a $wrkdir/$msaname.sto | grep "^=" | awk '{print \$2}'`; if ($?) { print "FAILED: esl-seqstat -a $wrkdir/$msaname.sto\n"; next MSA; } @qnames = split(/^/,$output); chop (@qnames); # Loop over each query; blast; accumulate best pval for each target foreach $qname (@qnames) { $output = `esl-sfetch -o $wrkdir/$msaname.query.fa $wrkdir/$msaname.sto $qname`; if ($?) { print "FAILED: esl-sfetch -o $wrkdir/$msaname.query.fa $wrkdir/$msaname.sto $qname\n"; next MSA; } if (! open(BLASTP, "$blastp -d $fafile -i $wrkdir/$msaname.query.fa $blastopts |")) { print "FAILED: $blastp -d $fafile -i $wrkdir/$msaname.query.fa $blastopts |\n"; next MSA; } if (! demotic_blast::parse(\*BLASTP)) { print "FAILED: demotic parser for blastp output\n"; next MSA; } for ($i = 0; $i < $demotic_blast::nhits; $i++) { $target = $demotic_blast::hit_target[$i]; $pval = $demotic_blast::hit_Eval[$i]; $bitscore = $demotic_blast::hit_bitscore[$i]; if (! $seen{$target} || $pval < $best_pval{$target}) { $seen{$target} = 1; $best_pval{$target} = $pval; $best_bitscore{$target} = $bitscore; } } close BLASTP; } # Append to the outfile. foreach $target (keys(%seen)) { printf OUTFILE "%g %.1f %s %s\n", $best_pval{$target}, $best_bitscore{$target}, $target, $msaname; } unlink "$wrkdir/$msaname.sto"; unlink "$wrkdir/$msaname.query.fa"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/x-phmmer-consensus0000775361611702660230000000460412473612612017615 0ustar wheelerteddy#! /usr/bin/perl # Do a piece of a profmark benchmark, for phmmer searches using a # consensus sequence query. # # This script is normally called by pmark_master.pl; its command line # syntax is tied to pmark_master.pl. # # Usage: x-phmmer-consensus # # SRE, Sun Feb 7 08:58:12 2010 [Case de Gatos] # SVN $Id$ # $top_builddir = shift; $top_srcdir = shift; $resultdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; $phmmer = "$top_builddir/src/phmmer"; $esl_afetch = "$top_builddir/easel/miniapps/esl-afetch"; $hmmbuild = "$top_builddir/src/hmmbuild --wnone --enone --laplace"; # for building consensus seqs $hmmemit = "$top_builddir/src/hmmemit -c"; $opts = ""; open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; while (
) { ($msaname) = split; # Fetch the query MSA from the benchmark (.sto file) $output = `$esl_afetch -o $resultdir/$msaname.sto $msafile $msaname`; if ($? != 0) { die "FAILED: $esl_afetch -o $resultdir/$msaname.sto $msafile $msaname"; } # Create a profile HMM from it (.hmm file; .query.fa file) $output = `$hmmbuild $resultdir/$msaname.hmm $resultdir/$msaname.sto`; if ($? != 0) { die "FAILED: $hmmbuild $resultdir/$msaname.hmm $resultdir/$msaname.sto"; } $output = `$hmmemit -o $resultdir/$msaname.query.fa $resultdir/$msaname.hmm`; if ($? != 0) { die "FAILED: hmmemit -o $resultdir/$msaname.query.fa $resultdir/$msaname.hmm"; } # PHMMER it against the benchmark $output = `$phmmer $opts --cpu 1 --tblout $resultdir/$msaname.tmp $resultdir/$msaname.query.fa $fafile > /dev/null`; if ($? != 0) { die "FAILED: $phmmer --tblout $resultdir/$msaname.tmp $opts $resultdir/$msaname.query.fa $fafile"; } open(OUTPUT, "$resultdir/$msaname.tmp") || die "FAILED: to open $resultdir/$msaname.tmp tabular output file"; while () { if (/^\#/) { next; } ($target, $tacc, $query, $qacc, $pval, $bitscore, $remainder) = split(' ', $_, 7); printf OUTFILE "%g %.1f %s %s\n", $pval, $bitscore, $target, $msaname; } unlink "$resultdir/$msaname.tmp"; unlink "$resultdir/$msaname.query.fa"; unlink "$resultdir/$msaname.hmm"; unlink "$resultdir/$msaname.sto"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/x-fps-ssearch0000775361611702660230000000631312473612612016524 0ustar wheelerteddy#! /usr/bin/perl -w # Do a piece of a profmark benchmark, for SSEARCH searches by FPS # (family-pairwise-search; best E-value of all individual queries). # # This script is normally called by pmark_master.pl; its command line # syntax is tied to pmark_master.pl. # # Usage: x-ssearch-fps # Example: ./x-ssearch-fps /usr/local/fasta-36x2 ~/src/hmmer testdir test.tbl pmark.msa test.fa test.out # # SRE, Tue Apr 20 10:18:56 2010 [Janelia] # SVN $Id$ BEGIN { $top_builddir = shift; $top_srcdir = shift; $wrkdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } use lib "${top_srcdir}/easel/demotic"; use demotic_fasta; $fasta = "${top_builddir}/bin/ssearch36"; $opts = "-q"; if (! -d $top_builddir) { die "didn't find BLAST build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find H3 source directory $top_srcdir"; } if (! -x $fasta) { die "didn't find executable $fasta"; } if (! -e $wrkdir) { die "$wrkdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while (
) { ($msaname) = split; %seen = (); %best_pval = (); %best_bitscore = (); `esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname`; if ($?) { print "FAILED: esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname\n"; next MSA; } # Extract a list of individual sequence names from the multiple alignment. $output = `esl-seqstat -a $wrkdir/$msaname.sto | grep "^=" | awk '{print \$2}'`; if ($?) { print "FAILED: esl-seqstat -a $wrkdir/$msaname.sto\n"; next MSA; } @qnames = split(/^/,$output); chop (@qnames); # Loop over each query; blast; accumulate best pval for each target foreach $qname (@qnames) { $output = `esl-sfetch -o $wrkdir/$msaname.query.fa $wrkdir/$msaname.sto $qname`; if ($?) { print "FAILED: esl-sfetch -o $wrkdir/$msaname.query.fa $wrkdir/$msaname.sto $qname\n"; next MSA; } if (! open(FASTA, "$fasta $opts $wrkdir/$msaname.query.fa $fafile |")) { print "FAILED: $fasta $opts $wrkdir/$msaname.query.fa $fafile |\n"; next MSA; } if (! demotic_fasta::parse(\*FASTA)) { print "FAILED: demotic parser for fasta output\n"; next MSA; } for ($i = 0; $i < $demotic_fasta::nhits; $i++) { $target = $demotic_fasta::hit_target[$i]; $pval = $demotic_fasta::hit_Eval[$i]; $bitscore = $demotic_fasta::hit_bitscore[$i]; if (! $seen{$target} || $pval < $best_pval{$target}) { $seen{$target} = 1; $best_pval{$target} = $pval; $best_bitscore{$target} = $bitscore; } } close FASTA; } # Append to the outfile. foreach $target (keys(%seen)) { printf OUTFILE "%g %.1f %s %s\n", $best_pval{$target}, $best_bitscore{$target}, $target, $msaname; } unlink "$wrkdir/$msaname.sto"; unlink "$wrkdir/$msaname.query.fa"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/x-h2-ls0000775361611702660230000000573312473612612015240 0ustar wheelerteddy#! /usr/bin/perl -w # Do a piece of a profmark benchmark, for H2's hmmsearch (ls mode). # # This script is normally called by pmark_master.pl; its command line # syntax is tied to pmark_master.pl. # # = HMMER2 build directory (hmmbuild, hmmcalibrate, hmmsearch executables) # = HMMER3 src directory (demotic scripts in easel/demotic) # Usage: x-h2-ls # Example: ./x-h2-ls ~/releases/hmmer-2.3.2 ~/src/hmmer testdir test.tbl pmark.msa test.fa test.out BEGIN { $top_builddir = shift; $top_srcdir = shift; $resultdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } use lib "${top_srcdir}/easel/demotic"; use demotic_h2; $hmmbuild = "${top_builddir}/src/hmmbuild"; $hmmcalibrate = "${top_builddir}/src/hmmcalibrate"; $hmmsearch = "${top_builddir}/src/hmmsearch"; $buildopts = ""; $calibrateopts = "--cpu 1"; $searchopts = "-E 1000 --cpu 1"; if (! -d $top_builddir) { die "didn't find H2 build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find H3 source directory $top_builddir"; } if (! -x $hmmbuild) { die "didn't find executable $hmmbuild"; } if (! -x $hmmcalibrate) { die "didn't find executable $hmmbuild"; } if (! -x $hmmsearch) { die "didn't find executable $hmmsearch"; } if (! -e $resultdir) { die "$resultdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while (
) { ($msaname) = split; $output = `esl-afetch -o $resultdir/$msaname.sto $msafile $msaname`; if ($?) { print "FAILED: esl-afetch -o $resultdir/$msaname.sto $msafile $msaname\n"; next MSA; } $output = `$hmmbuild $buildopts $resultdir/$msaname.hmm $resultdir/$msaname.sto`; if ($?) { print "FAILED: $hmmbuild $buildopts $resultdir/$msaname.hmm $resultdir/$msaname.sto\n"; next MSA; } $output = `$hmmcalibrate $calibrateopts $resultdir/$msaname.hmm`; if ($?) { print "FAILED: $hmmcalibrate\n"; next MSA; } if (! open(HMMSEARCH, "$hmmsearch $searchopts $resultdir/$msaname.hmm $fafile 2> /dev/null |")) { print "FAILED: $hmmsearch $searchopts $resultdir/$msaname.hmm $fafile\n"; next MSA; } if (! demotic_h2::parse(\*HMMSEARCH)) { print "FAILED: demotic h2 parser\n"; next MSA; } for ($i = 0; $i < $demotic_h2::nhits; $i++) { printf OUTFILE ("%g\t%.1f\t%s\t%s\n", $demotic_h2::hit_Eval[$i], $demotic_h2::hit_bitscore[$i], $demotic_h2::hit_target[$i], $msaname); } close HMMSEARCH; unlink "$resultdir/$msaname.hmm"; unlink "$resultdir/$msaname.sto"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/x-single-ssearch0000775361611702660230000000513212473612612017213 0ustar wheelerteddy#! /usr/bin/perl -w BEGIN { $top_builddir = shift; $top_srcdir = shift; $wrkdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } use lib "${top_srcdir}/easel/demotic"; use demotic_fasta; $fasta = "${top_builddir}/bin/ssearch36"; $opts = "-q -E 200 -d 0 -H"; # -q = quiet (batch) mode # -E 200 = report top hits deeper into noise, down to E=200 (default was 10) # -d 0 = suppresses alignment output; we only need the hit list # -H = suppresses histogram output. if (! -d $top_builddir) { die "didn't find FASTA/SSEARCH build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find H3 source directory $top_srcdir"; } if (! -x $fasta) { die "didn't find executable $fasta"; } if (! -e $wrkdir) { die "$wrkdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while (
) { ($msaname) = split; $cmd = "esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname"; $output = `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # Fetch the query MSA from the benchmark; tmp .sto file here $cmd = "esl-seqstat --amino -a $wrkdir/$msaname.sto | grep "^=" | awk '{print \$2}'"; $output = `$cmd`; if ($?) { print "FAILED: $cmd\n", next MSA; } # Extract list of indiv seq names. --amino for robustness, some msa's v. small @qnames = split(/^/,$output); chop (@qnames); $qname = $qnames[0]; $cmd = "esl-sfetch -o $wrkdir/$msaname.query $wrkdir/$msaname.sto $qname > /dev/null"; `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # Pick a single seq (first one) to tmp file; tmp .query file here # search it against the benchmark db $cmd = "$fasta $opts $wrkdir/$msaname.query $fafile |"; if (! open(FASTA, "$cmd")) { print "FAILED: $cmd\n", next MSA; } if (! demotic_fasta::parse(\*FASTA)) { print "FAILED: demotic fasta parser on $msaname\n"; next MSA; } for ($i = 0; $i < $demotic_fasta::nhits; $i++) { $target = $demotic_fasta::hit_target[$i]; $pval = $demotic_fasta::hit_Eval[$i]; $bitscore = $demotic_fasta::hit_bitscore[$i]; printf OUTFILE "%g %.1f %s %s\n", $pval, $bitscore, $target, $msaname; } close FASTA; unlink "$wrkdir/$msaname.query"; unlink "$wrkdir/$msaname.sto"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/.dropbox.attr0000775361611702660230000000000212473610422016527 0ustar wheelerteddy{}hmmer-3.1b2/profmark/x-iterate-psiblast0000775361611702660230000000764112473612612017567 0ustar wheelerteddy#! /usr/bin/perl -w BEGIN { $top_builddir = shift; $top_srcdir = shift; $wrkdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } use lib "${top_srcdir}/easel/demotic"; use demotic_blast; $n_iterations = 1; $n_iterations +=1; # +1 because psi-blast stores checkpoint file from the PREVIOUS iteration. $blastpgp = "${top_builddir}/bin/blastpgp"; $blastopts1 = "-a 1 -v 9999 -b 0 -F T -u 1 -j $n_iterations -J TRUE"; # opts for generating checkpoint file $blastopts2 = "-a 1 -v 9999 -b 0 -F F -q 1 -t 1"; # opts for searching the benchmark # explanation of options # -a 1 : run a single thread/cpu (benchmark sends independent jobs to our cluster nodes, uses all cpus that way already) # -v 9999 : show a large hit list, deep into noise (benchmark calculates its own false positive threshold) # -b 0 : suppresses alignment output (benchmark only needs the top hits) # -F T : filters query seq with SEG (can't use this option on -R restored checkpoint file) # -j : number of rounds to iterate in the iteration stage, on the iteration db. Minimum n=2, because the checkpoint file is for the *prev* round. (n=1 generates only a blastp output and no checkpoint) # -u 1 : specifies checkpoint output file is in ASN.1 ASCII # -q 1 : specifies checkpoint input file is in ASN.1 ASCII # -J TRUE : "believe the query defline", but I don't recall why I needed this. # -t 1 : blastpgp -R checkpoint restart only supports -t 1; otherwise it will bitch. # # also will add -i -d ; # and -C for the iteration stage # and -R for the benchmark search. if (! -d $top_builddir) { die "didn't find BLAST build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find H3 source directory $top_srcdir"; } if (! -x $blastpgp) { die "didn't find executable $blastpgp"; } if (! -e $wrkdir) { die "$wrkdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while (
) { ($msaname) = split; $cmd = "esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname"; $output = `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # Fetch the query MSA from the benchmark; tmp .sto file here $cmd = "esl-seqstat --amino -a $wrkdir/$msaname.sto | grep "^=" | awk '{print \$2}'"; $output = `$cmd`; if ($?) { print "FAILED: $cmd\n", next MSA; } # Extract list of indiv seq names. --amino for robustness, some msa's v. small @qnames = split(/^/,$output); chop (@qnames); $qname = $qnames[0]; $cmd = "esl-sfetch -o $wrkdir/$msaname.query $wrkdir/$msaname.sto $qname > /dev/null"; `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # Pick a single seq (first one) to tmp file; tmp .query file here $cmd = "$blastpgp $blastopts1 -d $fafile.iter -i $wrkdir/$msaname.query -C $wrkdir/$msaname.asnt"; $output = `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # Iterate on the .iter database. tmp .asnt checkpoint file here. $cmd = "$blastpgp $blastopts2 -d $fafile -R $wrkdir/$msaname.asnt 2>/dev/null |"; if (! open(PSIBLAST, "$cmd")) { print "FAILED: $cmd\n"; next MSA; } # Search the benchmark database if (! demotic_blast::parse(\*PSIBLAST)) { print "FAILED: demotic psiblast parser on $msaname\n"; next MSA; } for ($i = 0; $i < $demotic_blast::nhits; $i++) { printf OUTFILE ("%g\t%.1f\t%s\t%s\n", $demotic_blast::hit_Eval[$i], $demotic_blast::hit_bitscore[$i], $demotic_blast::hit_target[$i], $msaname); } close PSIBLAST; unlink "$wrkdir/$msaname.query"; unlink "$wrkdir/$msaname.sto"; unlink "$wrkdir/$msaname.asnt"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/x-single-phmmer0000775361611702660230000000432112473612612017052 0ustar wheelerteddy#! /usr/bin/perl $top_builddir = shift; $top_srcdir = shift; $wrkdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; $phmmer = "$top_builddir/src/phmmer"; $searchopts = "-E 200 --cpu 1"; if (! -d $top_builddir) { die "didn't find build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find source directory $top_srcdir"; } if (! -x $phmmer) { die "didn't find executable $jackhmmer"; } if (! -e $wrkdir) { die "$wrkdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while (
) { ($msaname) = split; $cmd = "esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname"; $output = `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # Fetch the query MSA from the benchmark; tmp .sto file here $cmd = "esl-seqstat --amino -a $wrkdir/$msaname.sto | grep "^=" | awk '{print \$2}'"; $output = `$cmd`; if ($?) { print "FAILED: $cmd\n", next MSA; } # Extract list of indiv seq names. --amino for robustness, some msa's v. small @qnames = split(/^/,$output); chop (@qnames); $qname = $qnames[0]; $cmd = "esl-sfetch -o $wrkdir/$msaname.query $wrkdir/$msaname.sto $qname > /dev/null"; `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # Pick a single seq (first one) to tmp file; tmp .query file here $cmd = "$phmmer $searchopts --tblout $wrkdir/$msaname.tmp $wrkdir/$msaname.query $fafile > /dev/null"; `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # phmmer against benchmark db; tmp .tmp output file here if (! open(OUTPUT, "$wrkdir/$msaname.tmp")) { print "FAILED: to open $wrkdir/$msaname.tmp"; next MSA; } while () { if (/^\#/) { next; } @fields = split(' ', $_, 7); $target = $fields[0]; $pval = $fields[4]; $bitscore = $fields[5]; printf OUTFILE "%g %.1f %s %s\n", $pval, $bitscore, $target, $msaname; } close OUTPUT; unlink "$wrkdir/$msaname.tmp"; unlink "$wrkdir/$msaname.query"; unlink "$wrkdir/$msaname.sto"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/pmark.param0000664361611702660230000000063612473612612016251 0ustar wheelerteddywith g0 autoscale onread none world xmin 0.00063 world xmax 10 world ymin 0 world ymax 1 xaxes scale Logarithmic xaxis offset 0.0, 0.0 xaxis label "mean false positives per search" xaxis tick major 10 xaxis tick minor ticks 9 xaxis tick out yaxis offset 0.0, 0.0 yaxis label "fractional coverage of true positives" yaxis tick major 0.1 yaxis tick minor ticks 9 yaxis tick out s0 line type 1 s0 line linewidth 2.0 hmmer-3.1b2/profmark/x-fps-wublast0000775361611702660230000000647412473612612016565 0ustar wheelerteddy#! /usr/bin/perl -w # Do a piece of a profmark benchmark, for WU-BLAST searches by FPS # (family-pairwise-search; best E-value of all individual queries). # # This script is normally called by pmark_master.pl; its command line # syntax is tied to pmark_master.pl. # # Usage: x-wublast-fps # Example: ./x-wublast-fps /usr/local/wublast ~/src/hmmer testdir test.tbl pmark.msa test.fa test.out # # SRE, Sat Apr 17 11:16:23 2010 [Janelia] # SVN $Id$ BEGIN { $top_builddir = shift; $top_srcdir = shift; $wrkdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } use lib "${top_srcdir}/easel/demotic"; use demotic_blast; $blastp = "${top_builddir}/blastp"; $blastopts = "cpus=1 V=9999 B=0 filter=seg filter=xnu"; if (! -d $top_builddir) { die "didn't find BLAST build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find H3 source directory $top_srcdir"; } if (! -x $blastp) { die "didn't find executable $blastp"; } if (! -e $wrkdir) { die "$wrkdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while (
) { ($msaname) = split; %seen = (); %best_pval = (); %best_bitscore = (); `esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname`; if ($?) { print "FAILED: esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname\n"; next MSA; } # Extract a list of individual sequence names from the multiple alignment. $output = `esl-seqstat -a $wrkdir/$msaname.sto | grep "^=" | awk '{print \$2}'`; if ($?) { print "FAILED: esl-seqstat -a $wrkdir/$msaname.sto\n"; next MSA; } @qnames = split(/^/,$output); chop (@qnames); # Loop over each query; blast; accumulate best pval for each target QUERY: foreach $qname (@qnames) { $output = `esl-sfetch -o $wrkdir/$msaname.query.fa $wrkdir/$msaname.sto $qname`; if ($?) { print "FAILED: esl-sfetch -o $wrkdir/$msaname.query.fa $wrkdir/$msaname.sto $qname\n"; next QUERY; } if (! open(BLASTP, "$blastp $fafile $wrkdir/$msaname.query.fa $blastopts |")) { print "FAILED: $blastp $fafile $wrkdir/$msaname.query.fa $blastopts |\n"; next QUERY; } if (! demotic_blast::parse(\*BLASTP)) { print "FAILED: demotic parser for blastp output; query might be x'ed by filters; skipping this query\n"; next QUERY; } for ($i = 0; $i < $demotic_blast::nhits; $i++) { $target = $demotic_blast::hit_target[$i]; $pval = $demotic_blast::hit_Eval[$i]; $bitscore = $demotic_blast::hit_bitscore[$i]; if (! $seen{$target} || $pval < $best_pval{$target}) { $seen{$target} = 1; $best_pval{$target} = $pval; $best_bitscore{$target} = $bitscore; } } close BLASTP; } # Append to the outfile. foreach $target (keys(%seen)) { printf OUTFILE "%g %.1f %s %s\n", $best_pval{$target}, $best_bitscore{$target}, $target, $msaname; } unlink "$wrkdir/$msaname.sto"; unlink "$wrkdir/$msaname.query.fa"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/x-single-ncbiblast0000775361611702660230000000474312473612612017533 0ustar wheelerteddy#! /usr/bin/perl -w BEGIN { $top_builddir = shift; $top_srcdir = shift; $wrkdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } use lib "${top_srcdir}/easel/demotic"; use demotic_blast; $blastp = "${top_builddir}/bin/blastall"; $blastopts = "-p blastp -a 1 -v 9999 -b 0"; # -a 1 : 1 cpu # -v 9999 : long hit list, well into noise # -b 0 : suppress alignment output, benchmark doesn't use it if (! -d $top_builddir) { die "didn't find BLAST build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find H3 source directory $top_srcdir"; } if (! -x $blastp) { die "didn't find executable $blastp"; } if (! -e $wrkdir) { die "$wrkdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while (
) { ($msaname) = split; $cmd = "esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname"; $output = `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # Fetch the query MSA from the benchmark; tmp .sto file here $cmd = "esl-seqstat --amino -a $wrkdir/$msaname.sto | grep "^=" | awk '{print \$2}'"; $output = `$cmd`; if ($?) { print "FAILED: $cmd\n", next MSA; } # Extract list of indiv seq names. --amino for robustness, some msa's v. small @qnames = split(/^/,$output); chop (@qnames); $qname = $qnames[0]; $cmd = "esl-sfetch -o $wrkdir/$msaname.query $wrkdir/$msaname.sto $qname > /dev/null"; `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # Pick a single seq (first one) to tmp file; tmp .query file here $cmd = "$blastp -d $fafile -i $wrkdir/$msaname.query $blastopts |"; if (! open(BLASTP, "$cmd")) { print "FAILED: $cmd\n"; next MSA; } if (! demotic_blast::parse(\*BLASTP)) { print "FAILED: demotic blastp parser on $msaname\n"; next MSA; } for ($i = 0; $i < $demotic_blast::nhits; $i++) { $target = $demotic_blast::hit_target[$i]; $pval = $demotic_blast::hit_Eval[$i]; $bitscore = $demotic_blast::hit_bitscore[$i]; printf OUTFILE "%g %.1f %s %s\n", $pval, $bitscore, $target, $msaname; } close BLASTP; unlink "$wrkdir/$msaname.sto"; unlink "$wrkdir/$msaname.query"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/x-fps-fasta0000775361611702660230000000630312473612612016171 0ustar wheelerteddy#! /usr/bin/perl -w # Do a piece of a profmark benchmark, for FASTA searches by FPS # (family-pairwise-search; best E-value of all individual queries). # # This script is normally called by pmark_master.pl; its command line # syntax is tied to pmark_master.pl. # # Usage: x-fasta-fps # Example: ./x-fasta-fps /usr/local/fasta-36x2 ~/src/hmmer testdir test.tbl pmark.msa test.fa test.out # # SRE, Tue Apr 20 10:14:39 2010 [Janelia] # SVN $Id$ BEGIN { $top_builddir = shift; $top_srcdir = shift; $wrkdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } use lib "${top_srcdir}/easel/demotic"; use demotic_fasta; $fasta = "${top_builddir}/bin/fasta36"; $opts = "-q"; if (! -d $top_builddir) { die "didn't find BLAST build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find H3 source directory $top_srcdir"; } if (! -x $fasta) { die "didn't find executable $fasta"; } if (! -e $wrkdir) { die "$wrkdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while (
) { ($msaname) = split; %seen = (); %best_pval = (); %best_bitscore = (); `esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname`; if ($?) { print "FAILED: esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname\n"; next MSA; } # Extract a list of individual sequence names from the multiple alignment. $output = `esl-seqstat -a $wrkdir/$msaname.sto | grep "^=" | awk '{print \$2}'`; if ($?) { print "FAILED: esl-seqstat -a $wrkdir/$msaname.sto\n"; next MSA; } @qnames = split(/^/,$output); chop (@qnames); # Loop over each query; blast; accumulate best pval for each target foreach $qname (@qnames) { $output = `esl-sfetch -o $wrkdir/$msaname.query.fa $wrkdir/$msaname.sto $qname`; if ($?) { print "FAILED: esl-sfetch -o $wrkdir/$msaname.query.fa $wrkdir/$msaname.sto $qname\n"; next MSA; } if (! open(FASTA, "$fasta $opts $wrkdir/$msaname.query.fa $fafile |")) { print "FAILED: $fasta $opts $wrkdir/$msaname.query.fa $fafile |\n"; next MSA; } if (! demotic_fasta::parse(\*FASTA)) { print "FAILED: demotic parser for fasta output\n"; next MSA; } for ($i = 0; $i < $demotic_fasta::nhits; $i++) { $target = $demotic_fasta::hit_target[$i]; $pval = $demotic_fasta::hit_Eval[$i]; $bitscore = $demotic_fasta::hit_bitscore[$i]; if (! $seen{$target} || $pval < $best_pval{$target}) { $seen{$target} = 1; $best_pval{$target} = $pval; $best_bitscore{$target} = $bitscore; } } close FASTA; } # Append to the outfile. foreach $target (keys(%seen)) { printf OUTFILE "%g %.1f %s %s\n", $best_pval{$target}, $best_bitscore{$target}, $target, $msaname; } unlink "$wrkdir/$msaname.sto"; unlink "$wrkdir/$msaname.query.fa"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/Makefile.in0000664361611702660230000000365312473612611016163 0ustar wheelerteddytop_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ CC = @CC@ CFLAGS = @CFLAGS@ @PTHREAD_CFLAGS@ @PIC_FLAGS@ SIMDFLAGS= @SIMD_CFLAGS@ CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ DEFS = @DEFS@ LIBS = -lhmmer -leasel @LIBS@ @LIBGSL@ @PTHREAD_LIBS@ -lm MPILIBS = @MPILIBS@ IMPLDIR = impl_@IMPL_CHOICE@ ESLDIR = @HMMER_ESLDIR@ ESLINC = -I../${ESLDIR} -I${top_srcdir}/easel SRCINC = -I../src -I${top_srcdir}/src PROGS = create-profmark\ rocplot PROGOBJS =\ create-profmark.o\ rocplot.o # beautification magic stolen from git QUIET_SUBDIR0 = +${MAKE} -C #space separator after -c QUIET_SUBDIR1 = ifndef V QUIET_CC = @echo ' ' CC $@; QUIET_GEN = @echo ' ' GEN $@; QUIET_AR = @echo ' ' AR $@; QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR1 = ; echo ' ' SUBDIR $$subdir; \ ${MAKE} -C $$subdir endif .PHONY: all dev distclean clean all: ${PROGS} dev: ${PROGS} ${PROGS}: @EXEC_DEPENDENCY@ ../${ESLDIR}/libeasel.a ../src/libhmmer.a ${QUIET_GEN}${CC} ${CFLAGS} ${DEFS} ${LDFLAGS} -L../${ESLDIR} -L../src -o $@ $@.o ${LIBS} ${PROGOBJS}: ../src/hmmer.h ../src/p7_config.h .c.o: ${QUIET_CC}${CC} ${ESLINC} ${SRCINC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} -o $@ -c $< distclean: clean -rm -f Makefile clean: -rm -f *.o *~ ${PROGS} -rm -f *.gcno ################################################################ # HMMER - Biological sequence analysis with profile HMMs # Version 3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # HMMER is distributed under the terms of the GNU General Public License # (GPLv3). See the LICENSE file for details. # # SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/profmark/Makefile.in $ # SVN $Id: Makefile.in 3844 2012-02-07 21:51:20Z eddys $ ################################################################ hmmer-3.1b2/profmark/pmark-master.pl0000775361611702660230000000670712473612611017064 0ustar wheelerteddy#! /usr/bin/perl -w # The top level script that runs a pmark benchmark. # # Usage: # ./pmark-master.pl # # : Top level directory for finding executables to # be benchmarked. This is passed on to the # without modification. How the script uses it will depend # on where the executables are expected to be found, relative # to this top level directory. For example, for HMMER3 benchmarks, # we might pass ~/releases/hmmer-release/build-icc or # ~/releases/hmmer-3.0xx/build-icc for testing a release candidate # or an existing release. # # : Top level directory for finding scripts or data files. # This too will simply be passed on to the # without modification. For example, for HMMER benchmarks, we # might pass ~/releases/hmmer-release/ or ~/releases/hmmer-3.0xx. # For installed packages like BLAST, it's likely that # would be the same as , because we will not have # multiple build directories. # # : A directory for holding all temporary files # created by the benchmark. This name should be short and unique; # it will also be used to construct job names on the cluster, as # . # # : how many processes to parallelize over in our cluster. # # : The script will look for files .tbl, # .msa, and .fa, defining a PMARK benchmark set. # # : This script is executed on each of # processes, on an appropriately constructed subset of the # benchmark queries. # # It must take the following arguments: # # # Examples of HMMER3 benchmark: # ./pmark-master.pl ~/releases/hmmer-release/build-icc ~/releases/hmmer-release h3-results 100 pmark ./pmark-h3 # ./pmark-master.pl ~/releases/hmmer-release/build-icc ~/releases/hmmer-release h2-results-ls 100 pmark ./pmark-h2-ls # ./pmark-master.pl ~/releases/hmmer-release/build-icc ~/releases/hmmer-release h2-results-fs 100 pmark ./pmark-h2-fs # $top_builddir = shift; $top_srcdir = shift; $resultdir = shift; $ncpu = shift; $benchmark_pfx = shift; $pmark_script = shift; $tbl = "$benchmark_pfx.tbl"; $msafile = "$benchmark_pfx.msa"; $fafile = "$benchmark_pfx.fa"; if (-e $resultdir) { die("$resultdir exists");} system("mkdir $resultdir"); # Suck in the master table open(BENCHMARK_TBL, $tbl) || die; $n = 0; $pid = 0; $nseq = 0; while () { ($msaname[$n], $pid, $L, $nseq) = split; $alen{$msaname[$n]} = $L; $n++; } close BENCHMARK_TBL; # Sort it by alen - this helps load balance. sub by_alen { $alen{$b} <=> $alen{$a} } @sorted_msaname = sort by_alen @msaname; # Create subtables. for ($i = 0; $i < $n; $i++) { $subtbl[$i % $ncpu] .= $sorted_msaname[$i]; $subtbl[$i % $ncpu] .= "\n"; } # Output the subtables for ($i = 0; $i < $ncpu; $i++) { open(SUBTBL, ">$resultdir/tbl.$i") || die ("Failed to create $resultdir/tbl.$i"); print SUBTBL $subtbl[$i]; close SUBTBL; } # Submit all the individual profmark jobs for ($i = 0; $i < $ncpu; $i++) { system("qsub -V -cwd -b y -N $resultdir.$i -j y -o $resultdir/tbl$i.sge '$pmark_script $top_builddir $top_srcdir $resultdir $resultdir/tbl.$i $msafile $fafile $resultdir/tbl$i.out'"); } hmmer-3.1b2/profmark/x-hmmsearch0000775361611702660230000000513412473612612016255 0ustar wheelerteddy#! /usr/bin/perl -w # Do a piece of a profmark benchmark, for hmmsearch. # # This script is normally called by pmark_master.pl; its command line # syntax is tied to pmark_master.pl. # # Usage: x-hmmsearch # Example: ./x-hmmsearch ~/releases/hmmer-3.0/build-icc-mpi ~/releases/hmmer-3.0 testdir test.tbl pmark.msa test.fa test.out # # SRE, Tue Apr 20 10:32:49 2010 [Janelia] # SVN $Id$ # BEGIN { $top_builddir = shift; $top_srcdir = shift; $resultdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } $hmmbuild = "$top_builddir/src/hmmbuild"; $hmmsearch = "$top_builddir/src/hmmsearch"; $buildopts = ""; $searchopts = "-E 200 --cpu 1"; if (! -d $top_builddir) { die "didn't find build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find src directory $top_srcdir"; } if (! -x $hmmbuild) { die "didn't find executable $hmmbuild"; } if (! -x $hmmsearch) { die "didn't find executable $hmmsearch"; } if (! -e $resultdir) { die "$resultdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; while (
) { ($msaname) = split; $output = `esl-afetch -o $resultdir/$msaname.sto $msafile $msaname`; if ($? != 0) { die "FAILED: esl-afetch -o $resultdir/$msaname.sto $msafile $msaname"; } $output = `$hmmbuild $buildopts $resultdir/$msaname.hmm $resultdir/$msaname.sto`; if ($? != 0) { die "FAILED: $hmmbuild $buildopts $resultdir/$msaname.hmm $resultdir/$msaname.sto"; } $status = system("$hmmsearch $searchopts --tblout $resultdir/$msaname.tmp $resultdir/$msaname.hmm $fafile > /dev/null"); if ($status != 0) { die "FAILED: $hmmsearch $searchopts --tblout $resultdir/$msaname.tmp $resultdir/$msaname.hmm $fafile"; } open(OUTPUT, "$resultdir/$msaname.tmp") || die "FAILED: to open $resultdir/$msaname.tmp tabular output file"; while () { if (/^\#/) { next; } @fields = split(' ', $_, 7); $target = $fields[0]; $pval = $fields[4]; $bitscore = $fields[5]; printf OUTFILE "%g %.1f %s %s\n", $pval, $bitscore, $target, $msaname; } unlink "$resultdir/$msaname.hmm"; unlink "$resultdir/$msaname.sto"; unlink "$resultdir/$msaname.tmp"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/x-fps-phmmer0000775361611702660230000000627712473612612016375 0ustar wheelerteddy#! /usr/bin/perl -w # Do a piece of a profmark benchmark, for phmmer searches by FPS # (family-pairwise-search; best E-value of all individual queries). # # This script is normally called by pmark_master.pl; its command line # syntax is tied to pmark_master.pl. # # Usage: x-phmmer-fps # Example: ./x-phmmer-fps ~/releases/hmmer-3.0/build-icc-mpi ~/src/hmmer testdir test.tbl pmark.msa test.fa test.out # # SRE, Sun Feb 7 08:54:28 2010 [Casa de Gatos] # SVN $Id$ BEGIN { $top_builddir = shift; $top_srcdir = shift; $wrkdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } $phmmer = "$top_builddir/src/phmmer"; $opts = ""; if (! -d $top_builddir) { die "didn't find build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find source directory $top_srcdir"; } if (! -x $phmmer) { die "didn't find executable $phmmer"; } if (! -e $wrkdir) { die "$wrkdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while (
) { ($msaname) = split; %seen = (); %best_pval = (); %best_bitscore = (); `esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname`; if ($?) { print "FAILED: esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname\n"; next MSA; } # Extract a list of individual sequence names from the multiple alignment. $output = `esl-seqstat -a $wrkdir/$msaname.sto | grep "^=" | awk '{print \$2}'`; if ($?) { print "FAILED: esl-seqstat\n"; next MSA; } @qnames = split(/^/,$output); chop (@qnames); # Loop over each query; phmmer; accumulate best pval for each target foreach $qname (@qnames) { $output = `esl-sfetch -o $wrkdir/$msaname.query.fa $wrkdir/$msaname.sto $qname`; if ($?) { print "FAILED: esl-sfetch -o $wrkdir/$msaname.query.fa $wrkdir/$msaname.sto $qname\n"; next MSA; } `$phmmer --cpu 1 --tblout $wrkdir/$msaname.tmp $opts $wrkdir/$msaname.query.fa $fafile > /dev/null`; if ($?) { print "FAILED: $phmmer --tblout $msaname.tmp $opts $wrkdir/$msaname.query.fa $fafile\n"; next MSA; } open(OUTPUT, "$wrkdir/$msaname.tmp") || die "FAILED: to open $wrkdir/$msaname.tmp tabular output file"; while () { if (/^\#/) { next; } @fields = split(' ', $_, 7); $target = $fields[0]; $pval = $fields[4]; $bitscore = $fields[5]; if (! $seen{$target} || $pval < $best_pval{$target}) { $seen{$target} = 1; $best_pval{$target} = $pval; $best_bitscore{$target} = $bitscore; } } close OUTPUT; } # Append to the outfile. foreach $target (keys(%seen)) { printf OUTFILE "%g %.1f %s %s\n", $best_pval{$target}, $best_bitscore{$target}, $target, $msaname; } unlink "$wrkdir/$msaname.tmp"; unlink "$wrkdir/$msaname.query.fa"; unlink "$wrkdir/$msaname.sto"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/x-psiblast0000775361611702660230000001070112473612612016123 0ustar wheelerteddy#! /usr/bin/perl -w # Do a piece of a profmark benchmark, for PSI-BLAST # # This script is normally called by pmark_master.pl; its command line # syntax is tied to pmark_master.pl. # # Usage: x-psiblast # # Example: ./x-psiblast /usr/local/blast-2.2.22 ~/src/hmmer testdir test.tbl pmark.msa test.fa test.out # # For best results, the target database should be masked. For example: # seg pmark.fa -x > pmark-seg.fa # BEGIN { $top_builddir = shift; $top_srcdir = shift; $wrkdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } use lib "${top_srcdir}/easel/demotic"; use demotic_blast; $formatdb = "${top_builddir}/bin/formatdb"; $blastpgp = "${top_builddir}/bin/blastpgp"; $blastopts1 = "-a 1 -v 9999 -b 0 -F T -u 1 -j 5 -J TRUE"; # opts for generating checkpoint file $blastopts2 = "-a 1 -v 9999 -b 0 -F F -q 1 -t 1"; # opts for searching the benchmark if (! -d $top_builddir) { die "didn't find H2 build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find H3 source directory $top_srcdir"; } if (! -x $formatdb) { die "didn't find executable $formatdb"; } if (! -x $blastpgp) { die "didn't find executable $blastpgp"; } if (! -e $wrkdir) { die "$wrkdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while (
) { ($msaname) = split; # Fetch the query MSA from the benchmark (.sto file) $output = `esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname`; if ($? != 0) { print "FAILED: esl-afetch on $msaname\n"; next MSA; } # Reformat to psiblast format (.pbl file) $output = `esl-reformat -o $wrkdir/$msaname.pbl psiblast $wrkdir/$msaname.sto`; if ($? != 0) { print "FAILED: esl-reformat psiblast on $msaname\n"; next MSA; } # Select median length single sequence as the "query" (.query.fa file) $output = `esl-seqstat -a $wrkdir/$msaname.sto | grep "^=" | sort -n -k3 | awk '{print \$2}'`; if ($?) { print "FAILED: esl-seqstat on $msaname\n"; next MSA; } @qnames = split(/^/,$output); chop (@qnames); $qname = $qnames[ int(($#qnames+1) / 2)]; $output = `esl-sfetch -o $wrkdir/$msaname.query.fa $wrkdir/$msaname.sto $qname`; if ($?) { print "FAILED: esl-sfetch on $msaname\n"; next MSA; } # Create a PSI-BLAST checkpoint file by iterative search of the query # against the seed sequences. (Thus, we're not using the seed alignment, # only the seed seqs) $output = `esl-reformat -o $wrkdir/$msaname.fa fasta $wrkdir/$msaname.sto`; if ($?) { print "FAILED: esl-reformat fasta on $msaname\n"; next MSA; } $output = `seg $wrkdir/$msaname.fa -x > $wrkdir/$msaname.x.fa`; if ($?) { print "FAILED: esl-reformat fasta on $msaname\n"; next MSA; } $output = `$formatdb -i $wrkdir/$msaname.x.fa`; if ($?) { print "FAILED: formatdb on $msaname\n"; next MSA; } $output = `$blastpgp $blastopts1 -d $wrkdir/$msaname.x.fa -i $wrkdir/$msaname.query.fa -C $wrkdir/$msaname.asnt`; if ($?) { print "FAILED: blastpgp checkpoint file on $msaname\n"; next MSA; } # Run psi-blast against the benchmark if (! open(PSIBLAST, "$blastpgp $blastopts2 -d $fafile -R $wrkdir/$msaname.asnt 2>/dev/null |")) { print "FAILED: $blastpgp on $msaname\n"; next MSA; } if (! demotic_blast::parse(\*PSIBLAST) ) { print "FAILED: demotic psiblast parser on $msaname\n"; next MSA; } for ($i = 0; $i < $demotic_blast::nhits; $i++) { printf OUTFILE ("%g\t%.1f\t%s\t%s\n", $demotic_blast::hit_Eval[$i], $demotic_blast::hit_bitscore[$i], $demotic_blast::hit_target[$i], $msaname); } close PSIBLAST; unlink "$wrkdir/$msaname.query.fa"; unlink "$wrkdir/$msaname.hmm"; unlink "$wrkdir/$msaname.pbl"; unlink "$wrkdir/$msaname.sto"; unlink "$wrkdir/$msaname.asnt"; unlink "$wrkdir/$msaname.fa"; unlink "$wrkdir/$msaname.x.fa"; unlink "$wrkdir/$msaname.x.fa.phr"; unlink "$wrkdir/$msaname.x.fa.pin"; unlink "$wrkdir/$msaname.x.fa.psq"; unlink "$wrkdir/formatdb.log"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/x-psiblast+0000775361611702660230000000551212473612612016202 0ustar wheelerteddy#! /usr/bin/perl -w # Do a piece of a profmark benchmark, for PSI-BLAST+ # # This script is normally called by pmark_master.pl; its command line # syntax is tied to pmark_master.pl. # # Usage: x-psiblast+ # Example: ./x-psiblast+ /usr/local/ncbi-blast-2.2.21+ ~/src/hmmer/trunk testdir test.tbl pmark.msa test.fa test.out # # For best results, the target database should be masked. For example: # seg pmark.fa -x > pmark-seg.fa # BEGIN { $top_builddir = shift; $top_srcdir = shift; $wrkdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } use lib "${top_srcdir}/easel/demotic"; use demotic_blast; $formatdb = "${top_builddir}/bin/makeblastdb"; $psiblast = "${top_builddir}/bin/psiblast"; $blastopts = "-num_threads 1 -num_descriptions 9999 -num_alignments 0"; # opts for searching the benchmark if (! -d $top_builddir) { die "didn't find H2 build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find H3 source directory $top_srcdir"; } if (! -x $formatdb) { die "didn't find executable $formatdb"; } if (! -x $psiblast) { die "didn't find executable $psiblast"; } if (! -e $wrkdir) { die "$wrkdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while (
) { ($msaname) = split; # Fetch the query MSA from the benchmark (.sto file) $output = `esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname`; if ($? != 0) { print "FAILED: esl-afetch on $msaname\n"; next MSA; } # Reformat to psiblast format (.pbl file) $output = `esl-reformat -o $wrkdir/$msaname.pbl psiblast $wrkdir/$msaname.sto`; if ($? != 0) { print "FAILED: esl-reformat psiblast on $msaname\n"; next MSA; } # Run psi-blast against the benchmark if (! open(PSIBLAST, "$psiblast $blastopts -db $fafile -in_msa $wrkdir/$msaname.pbl 2>/dev/null |")) { print "FAILED: $psiblast on $msaname\n"; next MSA; } if (! demotic_blast::parse(\*PSIBLAST) ) { print "FAILED: demotic psiblast parser on $msaname\n"; next MSA; } for ($i = 0; $i < $demotic_blast::nhits; $i++) { printf OUTFILE ("%g\t%.1f\t%s\t%s\n", $demotic_blast::hit_Eval[$i], $demotic_blast::hit_bitscore[$i], $demotic_blast::hit_target[$i], $msaname); } close PSIBLAST; unlink "$wrkdir/$msaname.pbl"; unlink "$wrkdir/$msaname.sto"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/rocplot.pl0000775361611702660230000000130312473612612016127 0ustar wheelerteddy#! /usr/bin/perl $nsearches = 2809; require "getopts.pl"; &Getopts('n:X:x:'); if ($opt_n) { $nsearches = $opt_n; } if ($opt_X) { open(EXCLUDEFILE,$opt_X) || die; while () { if (/^\s*(\S+)/) { $nsearches--; $excluded{$1} = 1; } } close EXCLUDEFILE; } if ($opt_x) { $nsearches--; $excluded{$opt_x} = 1; } $fp = 0; $tp = 0; while (<>) { ($Eval, $bitscore, $target, $query) = split; if ($excluded{$query}) { next; } if ($target =~ /^decoy\d+$/) # a false positive { $fp++; printf("%.4f %d\n", $fp / $nsearches, $tp); } if ($target =~ /^$query\//) # a true positive { $tp++; } if ($fp >= $nsearches * 10) { last; } } print "&\n"; hmmer-3.1b2/profmark/x-sam0000775361611702660230000000570712473612612015074 0ustar wheelerteddy#! /usr/bin/perl -w # Do a piece of a profmark benchmark, for SAM. # # This script is normally called by pmark_master.pl; its command line # syntax is tied to pmark_master.pl. # # Usage: x-sam # Example: ./x-sam ~/alien-src/sam-3.5/sam3.5.x86_64-linux ~/src/hmmer testdir test.tbl pmark.msa test.fa test.out # # SRE, Tue Apr 20 10:42:48 2010 [Janelia] # SVN $Id$ BEGIN { $top_builddir = shift; $top_srcdir = shift; $wrkdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } $w05 = "$top_builddir/bin/w0.5"; $hmmscore = "$top_builddir/bin/hmmscore"; if (! -d $top_builddir) { die "didn't find directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find directory $top_srcdir"; } if (! -x $w05) { die "didn't find executable $w05"; } if (! -x $hmmscore) { die "didn't find executable $hmmscore"; } if (! -e $wrkdir) { die "$wrkdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; while (
) { ($msaname) = split; # Fetch query MSA from benchmark's .sto file $output = `esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname`; if ($? != 0) { die "FAILED: esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname"; } # Reformat to A2M format (.a2m file) $output = `esl-reformat -o $wrkdir/$msaname.a2m a2m $wrkdir/$msaname.sto`; if ($? != 0) { die "FAILED: esl-reformat"; } # Build a model using UCSC's w0.5 script (.mod file) `(cd $wrkdir; $w05 $msaname.a2m $msaname.mod &> /dev/null)`; if ($? != 0) { die "FAILED: $w05"; } # Calibrate the model (.mlib file) `(cd $wrkdir; $hmmscore $msaname -i $msaname.mod -calibrate 1 &> /dev/null)`; if ($? != 0) { die "FAILED: $hmmscore -calibrate"; } # Run hmmscore, search the benchmark .fa file. The result (a .dist file) drops into the wd. `(cd $wrkdir; $hmmscore $msaname -modellibrary $msaname.mlib -db ../$fafile -sw 2 &> /dev/null)`; if ($? != 0) { die "FAILED: $hmmscore"; } # The output is now in the intuitively named file (wait for it): .1..mod.dist open (SAMOUTPUT,"$wrkdir/$msaname.1.$msaname.mod.dist") || die "failed to open sam output"; while ($line = ) { if ($line =~ /^%/) { next; } @fields = split(' ', $line); $target = $fields[0]; $revnll = $fields[3]; $evalue = $fields[4]; if ($evalue > 100) { next; } printf OUTFILE "%g %.1f %s %s\n", $evalue, $revnll, $target, $msaname; } close SAMOUTPUT; unlink "$wrkdir/$msaname.1.$msaname.mod.dist"; unlink "$wrkdir/$msaname.dist"; unlink "$wrkdir/$msaname.mlib"; unlink "$wrkdir/$msaname.mod"; unlink "$wrkdir/$msaname.a2m"; unlink "$wrkdir/$msaname.sto"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/x-h2-fs0000775361611702660230000000572312473612612015231 0ustar wheelerteddy#! /usr/bin/perl -w # Do a piece of a profmark benchmark, for H2's hmmsearch. # # This script is normally called by pmark_master.pl; its command line # syntax is tied to pmark_master.pl. # # = HMMER2 build directory (hmmbuild, hmmcalibrate, hmmsearch executables) # = HMMER3 src directory (demotic scripts in easel/demotic) # Usage: x-h2-fs # Example: ./x-h2-fs ~/releases/hmmer-2.3.2 ~/src/hmmer testdir test.tbl pmark.msa test.fa test.out BEGIN { $top_builddir = shift; $top_srcdir = shift; $resultdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; } use lib "${top_srcdir}/easel/demotic"; use demotic_h2; $hmmbuild = "${top_builddir}/src/hmmbuild"; $hmmcalibrate = "${top_builddir}/src/hmmcalibrate"; $hmmsearch = "${top_builddir}/src/hmmsearch"; $buildopts = "-f"; $calibrateopts = "--cpu 1"; $searchopts = "-E 1000 --cpu 1"; if (! -d $top_builddir) { die "didn't find H2 build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find H3 source directory $top_builddir"; } if (! -x $hmmbuild) { die "didn't find executable $hmmbuild"; } if (! -x $hmmcalibrate) { die "didn't find executable $hmmbuild"; } if (! -x $hmmsearch) { die "didn't find executable $hmmsearch"; } if (! -e $resultdir) { die "$resultdir doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while (
) { ($msaname) = split; $output = `esl-afetch -o $resultdir/$msaname.sto $msafile $msaname`; if ($?) { print "FAILED: esl-afetch -o $resultdir/$msaname.sto $msafile $msaname\n"; next MSA; } $output = `$hmmbuild $buildopts $resultdir/$msaname.hmm $resultdir/$msaname.sto`; if ($?) { print "FAILED: $hmmbuild $buildopts $resultdir/$msaname.hmm $resultdir/$msaname.sto\n"; next MSA; } $output = `$hmmcalibrate $calibrateopts $resultdir/$msaname.hmm`; if ($?) { print "FAILED: $hmmcalibrate\n"; next MSA; } if (! open(HMMSEARCH, "$hmmsearch $searchopts $resultdir/$msaname.hmm $fafile 2> /dev/null |")) { print "FAILED: $hmmsearch $searchopts $resultdir/$msaname.hmm $fafile\n"; next MSA; } if (! demotic_h2::parse(\*HMMSEARCH)) { print "FAILED: demotic h2 parser\n"; next MSA; } for ($i = 0; $i < $demotic_h2::nhits; $i++) { printf OUTFILE ("%g\t%.1f\t%s\t%s\n", $demotic_h2::hit_Eval[$i], $demotic_h2::hit_bitscore[$i], $demotic_h2::hit_target[$i], $msaname); } close HMMSEARCH; unlink "$resultdir/$msaname.hmm"; unlink "$resultdir/$msaname.sto"; } close TABLE; close OUTFILE; hmmer-3.1b2/profmark/create-profmark.c0000664361611702660230000007553212473612611017351 0ustar wheelerteddy/* Construct a training alignment/test sequences set from an MSA. * * Usage: ./create-profmark For example: ./create-profmark pmark /misc/data0/databases/Pfam/Pfam-A.seed /misc/data0/databases/uniprot-7.0/uniprot_sprot.fasta * * This generates five output files: * .tbl - table summarizing the benchmark * .msa - MSA queries, stockholm format * .fa - sequence targets, fasta format * .pos - table summarizing positive test set * .neg - table summarizing negative test set * */ #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_distance.h" #include "esl_getopts.h" #include "esl_keyhash.h" #include "esl_msa.h" #include "esl_msacluster.h" #include "esl_msashuffle.h" #include "esl_msafile.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stack.h" #include "esl_vectorops.h" #include "esl_composition.h" static char banner[] = "construct a benchmark profile training/test set"; static char usage[] = "[options] \n"; #define SHUF_OPTS "--mono,--di,--markov0,--markov1,--reverse" /* toggle group, seq shuffling options */ static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "help; show brief info on version and usage", 1 }, { "-1", eslARG_REAL, "0.25", NULL,"0 contains protein alignments", 3 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--amino,--rna", " contains DNA alignments", 3 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--amino,--dna", " contains RNA alignments", 3 }, /* Other options */ { "--single", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "embed one, not two domains in each positive", 4 }, { "--minDPL", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "minimum segment length for DP shuffling", 4 }, { "--seed", eslARG_INT, "0", NULL, NULL, NULL, NULL, NULL, "specify random number generator seed", 4 }, { "--pid", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "create optional .pid file, %id's for all train/test domain pairs", 4 }, { 0,0,0,0,0,0,0,0,0,0 }, }; struct testseq_s { int L; /* total length */ int L1; /* length of first spacer */ int d1n; /* length of first domain */ int L2; /* length of second spacer */ int d2n; /* length of second domain */ int L3; /* length of third spacer */ }; struct cfg_s { ESL_ALPHABET *abc; /* biological alphabet */ ESL_RANDOMNESS *r; /* random number generator */ double fragfrac; /* seqs less than x*avg length are removed from alignment */ double idthresh1; /* fractional identity threshold for train/test split */ double idthresh2; /* fractional identity threshold for selecting test seqs */ int max_ntrain; /* maximum number of test domains per input alignment; 0=unlimited */ int max_ntest; /* maximum number of test domains per input alignment; 0=unlimited */ FILE *out_msafp; /* output stream: training MSAs */ FILE *out_seqfp; /* output stream: test sequences */ FILE *possummfp; /* output stream: summary table of the positive test set */ FILE *negsummfp; /* output stream: summary table of the negative test set */ FILE *tblfp; /* output stream: summary table of the training set alignments */ FILE *pidfp; /* optional out stream: table of pairwise %id for all train x test domain pairs */ ESL_SQFILE *dbfp; /* source database for negatives */ int db_nseq; /* # of sequences in the db */ int db_maxL; /* maximum seq length in db_lens */ struct testseq_s *test_lens; /* array of length info about positive test seqs */ int ntest; /* number of positive test seqs */ double fq[20]; /* background frequency distribution, if we're making iid negatives */ }; static int process_dbfile (struct cfg_s *cfg, char *dbfile, int dbfmt); static int remove_fragments (struct cfg_s *cfg, ESL_MSA *msa, ESL_MSA **ret_filteredmsa, int *ret_nfrags); static int separate_sets (struct cfg_s *cfg, ESL_MSA *msa, ESL_MSA **ret_trainmsa, ESL_STACK **ret_teststack); static int synthesize_positives(ESL_GETOPTS *go, struct cfg_s *cfg, char *testname, ESL_STACK *teststack, int *ret_ntest); static int synthesize_negatives(ESL_GETOPTS *go, struct cfg_s *cfg, int nneg); static int set_random_segment (ESL_GETOPTS *go, struct cfg_s *cfg, FILE *logfp, ESL_DSQ *dsq, int L); static void msa_select_topn(ESL_MSA **msaptr, int n); static void pstack_select_topn(ESL_STACK **stackptr, int n); static void write_pids(FILE *pidfp, ESL_MSA *origmsa, ESL_MSA *trainmsa, ESL_STACK *teststack); static void cmdline_failure(char *argv0, char *format, ...) { va_list argp; va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); esl_usage(stdout, argv0, usage); printf("\nTo see more help on available options, do %s -h\n\n", argv0); exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { esl_banner(stdout, argv0, banner); esl_usage (stdout, argv0, usage); puts("\n where general options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); puts("\n options controlling segment randomization method:"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); puts("\n options declaring a particular alphabet:"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); puts("\n other options:"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); exit(0); } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* command line configuration */ struct cfg_s cfg; /* application configuration */ char *basename= NULL; /* base of the output file names */ char *alifile = NULL; /* alignment file name */ char *dbfile = NULL; /* name of seq db file */ char outfile[256]; /* name of an output file */ int alifmt; /* format code for alifile */ int dbfmt; /* format code for dbfile */ ESLX_MSAFILE *afp = NULL; /* open alignment file */ ESL_MSA *origmsa = NULL; /* one multiple sequence alignment */ ESL_MSA *msa = NULL; /* MSA after frags are removed */ ESL_MSA *trainmsa= NULL; /* training set, aligned */ ESL_STACK *teststack=NULL; /* test set: stack of ESL_SQ ptrs */ int status; /* easel return code */ int nfrags; /* # of fragments removed */ int ntestdom; /* # of test domains */ int ntest; /* # of test sequences created */ int nali; /* number of alignments read */ double avgid; /* Parse command line */ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], "Error in app configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h")) cmdline_help(argv[0], go); if (esl_opt_ArgNumber(go) != 3) cmdline_failure(argv[0], "Incorrect number of command line arguments\n"); basename = esl_opt_GetArg(go, 1); alifile = esl_opt_GetArg(go, 2); dbfile = esl_opt_GetArg(go, 3); alifmt = eslMSAFILE_STOCKHOLM; dbfmt = eslSQFILE_FASTA; /* Set up the configuration structure shared amongst functions here */ if (esl_opt_IsDefault(go, "--seed")) cfg.r = esl_randomness_CreateTimeseeded(); else cfg.r = esl_randomness_Create(esl_opt_GetInteger(go, "--seed")); cfg.abc = NULL; /* until we open the MSA file, below */ cfg.fragfrac = esl_opt_GetReal(go, "-F"); cfg.idthresh1 = esl_opt_GetReal(go, "-1"); cfg.idthresh2 = esl_opt_GetReal(go, "-2"); cfg.test_lens = NULL; cfg.ntest = 0; cfg.max_ntest = (esl_opt_IsOn(go, "--maxtest") ? esl_opt_GetInteger(go, "--maxtest") : 0); cfg.max_ntrain = (esl_opt_IsOn(go, "--maxtrain") ? esl_opt_GetInteger(go, "--maxtrain") : 0); /* Open the output files */ if (snprintf(outfile, 256, "%s.msa", basename) >= 256) esl_fatal("Failed to construct output MSA file name"); if ((cfg.out_msafp = fopen(outfile, "w")) == NULL) esl_fatal("Failed to open MSA output file %s\n", outfile); if (snprintf(outfile, 256, "%s.fa", basename) >= 256) esl_fatal("Failed to construct output FASTA file name"); if ((cfg.out_seqfp = fopen(outfile, "w")) == NULL) esl_fatal("Failed to open FASTA output file %s\n", outfile); if (snprintf(outfile, 256, "%s.pos", basename) >= 256) esl_fatal("Failed to construct pos test set summary file name"); if ((cfg.possummfp = fopen(outfile, "w")) == NULL) esl_fatal("Failed to open pos test set summary file %s\n", outfile); if (snprintf(outfile, 256, "%s.neg", basename) >= 256) esl_fatal("Failed to construct neg test set summary file name"); if ((cfg.negsummfp = fopen(outfile, "w")) == NULL) esl_fatal("Failed to open neg test set summary file %s\n", outfile); if (snprintf(outfile, 256, "%s.tbl", basename) >= 256) esl_fatal("Failed to construct benchmark table file name"); if ((cfg.tblfp = fopen(outfile, "w")) == NULL) esl_fatal("Failed to open benchmark table file %s\n", outfile); if (esl_opt_GetBoolean(go, "--pid")) { if (snprintf(outfile, 256, "%s.pid", basename) >= 256) esl_fatal("Failed to construct %%id table file name"); if ((cfg.pidfp = fopen(outfile, "w")) == NULL) esl_fatal("Failed to open %%id table file %s\n", outfile); } else cfg.pidfp = NULL; /* Open the MSA file, digital mode; determine alphabet */ if (esl_opt_GetBoolean(go, "--amino")) cfg.abc = esl_alphabet_Create(eslAMINO); else if (esl_opt_GetBoolean(go, "--dna")) cfg.abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--rna")) cfg.abc = esl_alphabet_Create(eslRNA); status = eslx_msafile_Open(&(cfg.abc), alifile, NULL, alifmt, NULL, &afp); if (status != eslOK) eslx_msafile_OpenFailure(afp, status); if (cfg.abc->type == eslAMINO) esl_composition_SW34(cfg.fq); else esl_vec_DSet(cfg.fq, cfg.abc->K, 1.0 / (double) cfg.abc->K); /* Open and process the dbfile; make sure it's in the same alphabet */ process_dbfile(&cfg, dbfile, dbfmt); /* Read and process MSAs one at a time */ nali = 0; while ((status = eslx_msafile_Read(afp, &origmsa)) != eslEOF) { if (status != eslOK) eslx_msafile_ReadFailure(afp, status); esl_msa_ConvertDegen2X(origmsa); esl_msa_Hash(origmsa); remove_fragments(&cfg, origmsa, &msa, &nfrags); separate_sets (&cfg, msa, &trainmsa, &teststack); if ( esl_stack_ObjectCount(teststack) >= 2) { /* randomize test domain order, and apply size limit if any */ esl_stack_Shuffle(cfg.r, teststack); if (cfg.max_ntest) pstack_select_topn(&teststack, cfg.max_ntest); ntestdom = esl_stack_ObjectCount(teststack); /* randomize training set alignment order, and apply size limit if any */ esl_msashuffle_PermuteSequenceOrder(cfg.r, trainmsa); if (cfg.max_ntrain) msa_select_topn(&trainmsa, cfg.max_ntrain); esl_msa_MinimGaps(trainmsa, NULL, NULL, FALSE); if (esl_opt_GetBoolean(go, "--pid")) write_pids(cfg.pidfp, origmsa, trainmsa, teststack); synthesize_positives(go, &cfg, msa->name, teststack, &ntest); eslx_msafile_Write(cfg.out_msafp, trainmsa, eslMSAFILE_STOCKHOLM); esl_dst_XAverageId(cfg.abc, trainmsa->ax, trainmsa->nseq, 10000, &avgid); /* 10000 is max_comparisons, before sampling kicks in */ fprintf(cfg.tblfp, "%-20s %3.0f%% %6d %6d %6d %6d %6d %6d\n", msa->name, 100.*avgid, (int) trainmsa->alen, msa->nseq, nfrags, trainmsa->nseq, ntestdom, ntest); nali++; } esl_msa_Destroy(trainmsa); esl_msa_Destroy(origmsa); esl_msa_Destroy(msa); } if (nali == 0) esl_fatal("No alignments found in file %s\n", alifile); synthesize_negatives(go, &cfg, esl_opt_GetInteger(go, "-N")); fclose(cfg.out_msafp); fclose(cfg.out_seqfp); fclose(cfg.possummfp); fclose(cfg.negsummfp); fclose(cfg.tblfp); if (cfg.pidfp) fclose(cfg.pidfp); esl_randomness_Destroy(cfg.r); esl_alphabet_Destroy(cfg.abc); eslx_msafile_Close(afp); esl_getopts_Destroy(go); return 0; } /* Open the source sequence database for negative subseqs; * upon return, cfg->dbfp is open (digital, SSI indexed); * cfg->db_maxL and cfg->db_nseq are set. */ static int process_dbfile(struct cfg_s *cfg, char *dbfile, int dbfmt) { ESL_SQ *sq = esl_sq_CreateDigital(cfg->abc); int status; /* Open the sequence file in digital mode */ status = esl_sqfile_OpenDigital(cfg->abc, dbfile, dbfmt, NULL, &(cfg->dbfp)); if (status == eslENOTFOUND) esl_fatal("No such file %s", dbfile); else if (status == eslEFORMAT) esl_fatal("Format of seqfile %s unrecognized.", dbfile); else if (status == eslEINVAL) esl_fatal("Can't autodetect stdin or .gz."); else if (status != eslOK) esl_fatal("Open failed, code %d.", status); /* Read info on each sequence */ cfg->db_nseq = 0; cfg->db_maxL = 0; while ((status = esl_sqio_ReadInfo(cfg->dbfp, sq)) == eslOK) { cfg->db_maxL = ESL_MAX(sq->L, cfg->db_maxL); cfg->db_nseq++; esl_sq_Reuse(sq); } if (status != eslEOF) esl_fatal("Something went wrong with reading the seq db"); /* Open SSI index */ if (esl_sqfile_OpenSSI(cfg->dbfp, NULL) != eslOK) esl_fatal("Failed to open SSI index file"); if (cfg->dbfp->data.ascii.ssi->nprimary != cfg->db_nseq) esl_fatal("oops, nprimary != nseq"); esl_sq_Destroy(sq); return eslOK; } /* Step 1. Label all sequence fragments < fragfrac of average raw length */ static int remove_fragments(struct cfg_s *cfg, ESL_MSA *msa, ESL_MSA **ret_filteredmsa, int *ret_nfrags) { int *useme = NULL; double len = 0.0; int i; int nfrags; int status; for (i = 0; i < msa->nseq; i++) len += esl_abc_dsqrlen(msa->abc, msa->ax[i]); len *= cfg->fragfrac / (double) msa->nseq; ESL_ALLOC(useme, sizeof(int) * msa->nseq); for (nfrags = 0, i = 0; i < msa->nseq; i++) useme[i] = (esl_abc_dsqrlen(msa->abc, msa->ax[i]) < len) ? 0 : 1; if ((status = esl_msa_SequenceSubset(msa, useme, ret_filteredmsa)) != eslOK) goto ERROR; *ret_nfrags = msa->nseq - esl_vec_ISum(useme, msa->nseq); free(useme); return eslOK; ERROR: if (useme != NULL) free(useme); *ret_filteredmsa = NULL; return status; } /* Step 2. Extract the training set and test set. */ static int separate_sets(struct cfg_s *cfg, ESL_MSA *msa, ESL_MSA **ret_trainmsa, ESL_STACK **ret_teststack) { ESL_MSA *trainmsa = NULL; ESL_MSA *test_msa = NULL; ESL_STACK *teststack = NULL; ESL_SQ *sq = NULL; int *assignment = NULL; int *nin = NULL; int *useme = NULL; int nc = 0; int c; int ctrain; /* index of the cluster that becomes the training alignment */ int ntrain; /* number of seqs in the training alignment */ int nskip; int i; int status; if ((teststack = esl_stack_PCreate()) == NULL) { status = eslEMEM; goto ERROR; } ESL_ALLOC(useme, sizeof(int) * msa->nseq); if ((status = esl_msacluster_SingleLinkage(msa, cfg->idthresh1, &assignment, &nin, &nc)) != eslOK) goto ERROR; ctrain = esl_vec_IArgMax(nin, nc); ntrain = esl_vec_IMax(nin, nc); for (i = 0; i < msa->nseq; i++) useme[i] = (assignment[i] == ctrain) ? 1 : 0; if ((status = esl_msa_SequenceSubset(msa, useme, &trainmsa)) != eslOK) goto ERROR; /* If all the seqs went into the training msa, none are left for testing; we're done here */ if (trainmsa->nseq == msa->nseq) { free(useme); free(assignment); free(nin); *ret_trainmsa = trainmsa; *ret_teststack = teststack; return eslOK; } /* Put all the other sequences into an MSA of their own; from these, we'll * choose test sequences. */ for (i = 0; i < msa->nseq; i++) useme[i] = (assignment[i] != ctrain) ? 1 : 0; if ((status = esl_msa_SequenceSubset(msa, useme, &test_msa)) != eslOK) goto ERROR; /* Cluster those test sequences. */ free(nin); nin = NULL; free(assignment); assignment = NULL; if ((status = esl_msacluster_SingleLinkage(test_msa, cfg->idthresh2, &assignment, &nin, &nc)) != eslOK) goto ERROR; for (c = 0; c < nc; c++) { nskip = esl_rnd_Roll(cfg->r, nin[c]); /* pick a random seq in this cluster to be the test. */ for (i=0; i < test_msa->nseq; i++) if (assignment[i] == c) { if (nskip == 0) { esl_sq_FetchFromMSA(test_msa, i, &sq); esl_stack_PPush(teststack, (void *) sq); break; } else nskip--; } } esl_msa_Destroy(test_msa); free(useme); free(nin); free(assignment); *ret_trainmsa = trainmsa; *ret_teststack = teststack; return eslOK; ERROR: if (useme != NULL) free(useme); if (assignment != NULL) free(assignment); if (nin != NULL) free(nin); esl_msa_Destroy(trainmsa); esl_msa_Destroy(test_msa); while (esl_stack_PPop(teststack, (void **) &sq) == eslOK) esl_sq_Destroy(sq); esl_stack_Destroy(teststack); *ret_trainmsa = NULL; *ret_teststack = NULL; return status; } /* Each test sequence will contain one or two domains, depending on whether --single is set. */ static int synthesize_positives(ESL_GETOPTS *go, struct cfg_s *cfg, char *testname, ESL_STACK *teststack, int *ret_ntest) { ESL_SQ *domain1, *domain2; ESL_SQ *sq; void *p; int64_t L; /* total length of synthetic test seq */ int d1n, d2n; /* lengths of two domains */ int L1,L2,L3; /* lengths of three random regions */ int i,j; int ntest = 0; int ndomains = ( (esl_opt_GetBoolean(go, "--single") == TRUE) ? 1 : 2); int status; while (esl_stack_ObjectCount(teststack) >= ndomains) { ESL_RALLOC(cfg->test_lens, p, (cfg->ntest+1) * sizeof(struct testseq_s)); /* Pop our one or two test domains off the stack */ esl_stack_PPop(teststack, &p); domain1 = p; d1n = domain1->n; if (ndomains == 2) { esl_stack_PPop(teststack, &p); domain2 = p; d2n = domain2->n; } else { domain2 = NULL; d2n = 0; } /* Select a random total sequence length */ if (d1n+d2n > cfg->db_maxL) esl_fatal("can't construct test seq; no db seq >= %d residues\n", d1n+d2n); do { if (esl_ssi_FindNumber(cfg->dbfp->data.ascii.ssi, esl_rnd_Roll(cfg->r, cfg->db_nseq), NULL, NULL, NULL, &L, NULL) != eslOK) esl_fatal("failed to look up a random seq"); } while (L < d1n+d2n); /* Now figure out the embedding */ if (ndomains == 2) { /* Select random lengths of three flanking domains; * Imagine picking two "insert after" points i,j in sequence 1..L', for * L' = L-d1n-d2n (the total length of nonhomologous test seq) */ do { i = esl_rnd_Roll(cfg->r, L - d1n - d2n + 1 ); /* i = 0..L' */ j = esl_rnd_Roll(cfg->r, L - d1n - d2n + 1 ); /* j = 0..L' */ } while (i > j); /* now 1 .. i = random region 1 (if i==0, there's none); * i+1 .. i+d1n = domain 1 * i+d1n+1 .. j+d1n = random region 2 (if i==j, there's none); * j+d1n+1 .. j+d1n+d2n = domain 2 * j+d1n+d2n+1 .. L = random region 3 (if j == L-d1n-d2n, there's none); */ L1 = i; L2 = j-i; L3 = L - d1n - d2n - j; } else { /* embedding one domain */ i = esl_rnd_Roll(cfg->r, L - d1n + 1 ); /* i = 0..L' */ /* now 1 .. i = random region 1 (if i==0, there's none); * i+1 .. i+d1n = domain 1 * i+d1n+1 .. L = random region 2 (if i==j, there's none); */ L1 = i; L2 = L - d1n - L1; L3 = 0; } sq = esl_sq_CreateDigital(cfg->abc); esl_sq_GrowTo(sq, L); sq->n = L; if (ndomains == 2) { esl_sq_FormatName(sq, "%s/%d/%d-%d/%d-%d", testname, cfg->ntest, i+1, i+d1n, j+d1n+1, j+d1n+d2n); esl_sq_FormatDesc(sq, "domains: %s %s", domain1->name, domain2->name); } else { esl_sq_FormatName(sq, "%s/%d/%d-%d", testname, cfg->ntest, i+1, i+d1n); esl_sq_FormatDesc(sq, "domain: %s", domain1->name); } fprintf(cfg->possummfp, "%-35s %5d %5d %5d %5d %5d %5d", sq->name, (int) sq->n, L1, d1n, L2, d2n, L3); sq->dsq[0] = sq->dsq[L+1] = eslDSQ_SENTINEL; set_random_segment(go, cfg, cfg->possummfp, sq->dsq+1, L1); memcpy(sq->dsq+i+1, domain1->dsq+1, sizeof(ESL_DSQ) * d1n); fprintf(cfg->possummfp, " %-24s %5d %5d", domain1->name, 1, d1n); set_random_segment(go, cfg, cfg->possummfp, sq->dsq+i+d1n+1, L2); if (ndomains == 2) { memcpy(sq->dsq+j+d1n+1, domain2->dsq+1, sizeof(ESL_DSQ) * d2n); fprintf(cfg->possummfp, " %-24s %5d %5d", domain2->name, 1, d2n); set_random_segment(go, cfg, cfg->possummfp, sq->dsq+j+d1n+d2n+1, L3); } fprintf(cfg->possummfp, "\n"); cfg->test_lens[cfg->ntest].L = L; cfg->test_lens[cfg->ntest].L1 = L1; cfg->test_lens[cfg->ntest].d1n = d1n; cfg->test_lens[cfg->ntest].L2 = L2; cfg->test_lens[cfg->ntest].d2n = d2n; cfg->test_lens[cfg->ntest].L3 = L3; cfg->ntest++; ntest++; esl_sqio_Write(cfg->out_seqfp, sq, eslSQFILE_FASTA, FALSE); esl_sq_Destroy(domain1); if (ndomains == 2) esl_sq_Destroy(domain2); esl_sq_Destroy(sq); } *ret_ntest = ntest; return eslOK; ERROR: esl_fatal("Failure in synthesize_positives"); return status; } static int synthesize_negatives(ESL_GETOPTS *go, struct cfg_s *cfg, int nneg) { ESL_SQ *sq = esl_sq_CreateDigital(cfg->abc); int a; int i; int L1,L2,L3,d1n,d2n; for (i = 0; i < nneg; i++) { /* Select a random test seq, to use its same segments */ a = esl_rnd_Roll(cfg->r, cfg->ntest); L1 = cfg->test_lens[a].L1; L2 = cfg->test_lens[a].L2; L3 = cfg->test_lens[a].L3; d1n = cfg->test_lens[a].d1n; d2n = cfg->test_lens[a].d2n; esl_sq_GrowTo(sq, cfg->test_lens[a].L); esl_sq_FormatName(sq, "decoy%d", i+1); esl_sq_FormatDesc(sq, "L=%d in segments: %d/%d/%d/%d/%d", cfg->test_lens[a].L, L1, d1n, L2, d2n, L3); sq->n = cfg->test_lens[a].L; fprintf(cfg->negsummfp, "%-15s %5d %5d %5d %5d %5d %5d", sq->name, (int) sq->n, L1, d1n, L2, d2n, L3); sq->dsq[0] = sq->dsq[cfg->test_lens[a].L+1] = eslDSQ_SENTINEL; set_random_segment(go, cfg, cfg->negsummfp, sq->dsq+1, L1); set_random_segment(go, cfg, cfg->negsummfp, sq->dsq+1+L1, d1n); set_random_segment(go, cfg, cfg->negsummfp, sq->dsq+1+L1+d1n, L2); set_random_segment(go, cfg, cfg->negsummfp, sq->dsq+1+L1+d1n+L2, d2n); set_random_segment(go, cfg, cfg->negsummfp, sq->dsq+1+L1+d1n+L2+d2n, L3); fprintf(cfg->negsummfp, "\n"); esl_sqio_Write(cfg->out_seqfp, sq, eslSQFILE_FASTA, FALSE); esl_sq_Reuse(sq); } esl_sq_Destroy(sq); return eslOK; } /* Fetch in a random sequence of length from the the pre-digitized * concatenated sequence database, select a random subseq, shuffle it * by the chosen algorithm; set dsq[1..L] to the resulting randomized * segment. * * If is non-NULL, append one or more " " * fields to current line, to record where the random segment was * selected from. This is useful in cases where we want to track back * the origin of a high-scoring segment, in case the randomization * wasn't good enough to obscure the identity of a segment. * */ static int set_random_segment(ESL_GETOPTS *go, struct cfg_s *cfg, FILE *logfp, ESL_DSQ *dsq, int L) { ESL_SQ *sq = esl_sq_CreateDigital(cfg->abc); int minDPL = esl_opt_GetInteger(go, "--minDPL"); int db_dependent = (esl_opt_GetBoolean(go, "--iid") == TRUE ? FALSE : TRUE); char *pkey = NULL; int start, end; int64_t Lseq; int status = eslOK; if (L==0) return eslOK; if (L > cfg->db_maxL) esl_fatal("can't fetch a segment of length %d; database max is %d\n", L, cfg->db_maxL); /* fetch a random subseq from the source database */ esl_sq_GrowTo(sq, L); if (db_dependent) { do { if (pkey != NULL) free(pkey); if (esl_ssi_FindNumber(cfg->dbfp->data.ascii.ssi, esl_rnd_Roll(cfg->r, cfg->db_nseq), NULL, NULL, NULL, &Lseq, &pkey) != eslOK) esl_fatal("failed to look up a random seq"); } while (Lseq < L); start = 1 + esl_rnd_Roll(cfg->r, Lseq-L); end = start + L - 1; if (esl_sqio_FetchSubseq(cfg->dbfp, pkey, start, end, sq) != eslOK) esl_fatal("failed to fetch subseq"); esl_sq_ConvertDegen2X(sq); } /* log sequence source info: */ if (logfp != NULL && db_dependent) fprintf(logfp, " %-15s %5d %5d", pkey, start, end); /* Now apply the appropriate randomization algorithm */ if (esl_opt_GetBoolean(go, "--mono")) status = esl_rsq_XShuffle (cfg->r, sq->dsq, L, sq->dsq); else if (esl_opt_GetBoolean(go, "--di")) { if (L < minDPL) status = esl_rsq_XShuffle (cfg->r, sq->dsq, L, sq->dsq); else status = esl_rsq_XShuffleDP(cfg->r, sq->dsq, L, cfg->abc->Kp, sq->dsq); } else if (esl_opt_GetBoolean(go, "--markov0")) status = esl_rsq_XMarkov0 (cfg->r, sq->dsq, L, cfg->abc->Kp, sq->dsq); else if (esl_opt_GetBoolean(go, "--markov1")) status = esl_rsq_XMarkov1 (cfg->r, sq->dsq, L, cfg->abc->Kp, sq->dsq); else if (esl_opt_GetBoolean(go, "--reverse")) status = esl_rsq_XReverse (sq->dsq, L, sq->dsq); else if (esl_opt_GetBoolean(go, "--iid")) status = esl_rsq_xIID (cfg->r, cfg->fq, cfg->abc->K, L, sq->dsq); if (status != eslOK) esl_fatal("esl's shuffling failed"); memcpy(dsq, sq->dsq+1, sizeof(ESL_DSQ) * L); esl_sq_Destroy(sq); free(pkey); return eslOK; } static void msa_select_topn(ESL_MSA **msaptr, int n) { ESL_MSA *new; int *useme; int i; if (n >= (*msaptr)->nseq) return; useme = malloc(sizeof(int) * (*msaptr)->nseq); for (i = 0; i < n; i++) useme[i] = TRUE; for ( ; i < (*msaptr)->nseq; i++) useme[i] = FALSE; if ( esl_msa_SequenceSubset(*msaptr, useme, &new) != eslOK) esl_fatal("esl_msa_SequenceSubset() failed"); free(useme); esl_msa_Destroy(*msaptr); *msaptr = new; return; } /* select the top n test domains, to apply the --maxtest limit. * if n > size of stack, leave stack untouched and return. * stack order should first be shuffled. */ static void pstack_select_topn(ESL_STACK **stackptr, int n) { ESL_STACK *new; int i; if (n > (*stackptr)->n) return; new = esl_stack_PCreate(); for (i = n-1; i >= 0; i--) esl_stack_PPush(new, (*stackptr)->pdata[i]); esl_stack_Destroy(*stackptr); *stackptr = new; return; } static void write_pids(FILE *pidfp, ESL_MSA *origmsa, ESL_MSA *trainmsa, ESL_STACK *teststack) { int i,j; double pid; int iidx, jidx; for (i = 0; i < trainmsa->nseq; i++) { if ( esl_keyhash_Lookup(origmsa->index, trainmsa->sqname[i], -1, &iidx) != eslOK) esl_fatal("failed to find training seq %s in original MSA", trainmsa->sqname[i]); for (j = 0; j < teststack->n; j++) /* traverse test seq stack without destroying/popping */ { ESL_SQ *sq = (ESL_SQ *) teststack->pdata[j]; if ( esl_keyhash_Lookup(origmsa->index, sq->name, -1, &jidx) != eslOK) esl_fatal("failed to find test domain %s in original MSA", sq->name); esl_dst_XPairId(origmsa->abc, origmsa->ax[iidx], origmsa->ax[jidx], &pid, NULL, NULL); fprintf(pidfp, "%-20s %-24s %-24s %4.1f\n", origmsa->name, origmsa->sqname[iidx], origmsa->sqname[jidx], pid*100.0); } } } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/profmark/create-profmark.c $ * SVN $Id: create-profmark.c 3267 2010-05-14 17:27:36Z eddys $ *****************************************************************/ hmmer-3.1b2/profmark/rocplot.c0000664361611702660230000004762012473612612015747 0ustar wheelerteddy/* Summarizing results of a benchmark by plotting a ROC-like plot, * including confidence intervals derived by Bayesian bootstrapping. * * The <.out file> from a profmark benchmark consists of lines: * * Target sequence names are either * decoy\d+ for negatives (decoys); example: decoy75382 * /<#>[/-]+ for positives; example: CHP02677/42/297-773/781-1257 * * The <.out> file (or stream) must be sorted by E-value, with best * (lowest) E-values first. * * The format of these names is important - true/false * positive/negatives are classified by matching query model name to * the format of the target sequence name. A hit is a positive if * matches the component of the target name - * i.e. the embedded domains in the target are homologous to this * query. A hit is a negative if the target name matches /decoy\d+/. * A hit is ignored if the target contains domains (isn't a decoy) but * doesn't match . * * The program also needs to find the query, positive, and negative * tables for the benchmark that was run. It looks for these by * appending ".tbl", ".neg", and ".pos" to the argument; * that is: * .tbl contains one line per query: 1st field is name of query * .pos contains one line per positive: 1st field is name of sequence * .neg contains one line per decoy: 1st field is name of decoy * * The program calculates a plot of fractional coverage of the positives * (on the Y-axis; range 0..1) versus errors per query (on the X-axis; * ranging from 1/(# of models) to 10.0 by default). * * The default output is an XMGRACE xydydy file, with points * representing mean coverage in the bootstrap samples, and error bars * representing a 95% confidence interval. * * A typical command line, after having run a benchmark on "pmark" under * MPI with many output files: * * cat *.out | sort -g | ./rocplot pmark - > results.xy * xmgrace -settype xydydy results.xy * * SRE, Wed Jun 18 13:37:31 2008 [Janelia] * SVN $Id: rocplot.c 3546 2011-05-23 14:36:44Z eddys $ */ #include "esl_config.h" #include #include #include #include #include "easel.h" #include "esl_dirichlet.h" #include "esl_getopts.h" #include "esl_keyhash.h" #include "esl_random.h" #include "esl_stats.h" #include "esl_vectorops.h" static char banner[] = "construct a ROC plot of profmark results, using Bayesian bootstrapping"; static char usage[] = "[options] <.out file>\n"; static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "help; show brief info on version and usage", 1 }, { "-a", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "all: plot all bootstrap samples individually", 1 }, { "-n", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "plot original data, without any bootstrapping", 1 }, { "-s", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "plot error bars by std. dev. not confidence interval", 1 }, { "-N", eslARG_INT, "500", NULL, NULL, NULL,NULL, NULL, "number of bootstrap samples to take", 1 }, { "--min", eslARG_REAL, NULL, NULL, NULL, NULL,NULL, NULL, "set minimum x-axis value (FPs/query) to plot", 1 }, { "--max", eslARG_REAL, "10.", NULL, NULL, NULL,NULL, NULL, "set maximum x-axis value (FPs/query) to plot", 1 }, { "--steps", eslARG_INT, "10", NULL, NULL, NULL,NULL, NULL, "set number of steps to plot per 10x on x-axis", 1 }, { "--seed", eslARG_INT, FALSE, NULL,"n>0", NULL,NULL, NULL, "set random number generator's seed to ", 1 }, { "--nsd", eslARG_REAL, "3.", NULL,"x>0", NULL,"-s", NULL, "how many std.dev.'s big error bars should be", 1 }, { "--interval", eslARG_REAL,"0.95",NULL,"0<=x<=1",NULL,NULL,"-s", "confidence interval width for error bars", 1 }, { 0,0,0,0,0,0,0,0,0,0 }, }; /* The FP/query x-axis is discretized into points, evenly spaced on a log scale. * * To calculate FP/query threshold for a point i: 10^{ (base+i) / nsteps } * To convert a FP/query value x to a bin i: ceil(log10(x) * nsteps) */ struct oneplot_s { double *tp; /* yaxis values, [0..nxpts-1]; # of TPs <= given FP/query on x-axis */ int base; /* scaled integer offset of bin #0 in tp */ int nsteps; /* resolution of logarithmic x-axis: # of evenly spaced points per 10x */ int nxpts; /* total # of points on axis */ double totalpos; /* total # of positives possible in this bootstrap sample */ }; struct result_s { double E; /* E-value */ int qidx; /* index of query */ int tidx; /* index of target seq: 0..npos-1 for positives; npos..npos+nneg-1 for negatives */ int class; /* +1 = positive; -1 = negative; 0 = ignore */ }; static int parse_tblfile(char *tblfile, ESL_KEYHASH *kh); static int parse_results(char *resfile, int **pni, ESL_KEYHASH *modelkh, ESL_KEYHASH *poskh, ESL_KEYHASH *negkh, struct result_s **ret_r, int *ret_nr); static int classify_pair_by_names(const char *query, const char *target); static double weighted_total_positives(int **pni, double *queryp, int nq, double *seqp, int npos, int nseq); static struct oneplot_s *create_plot(ESL_GETOPTS *go, int nq); static void destroy_plot(struct oneplot_s *plot); static void make_plot(struct result_s *rp, int nr, int **pni, double *queryp, int nq, double *seqp, int nseq, int npos, struct oneplot_s *plot); static void write_plot(FILE *fp, struct oneplot_s *plot); static void summary_graph(ESL_GETOPTS *go, FILE *fp, struct oneplot_s *plot, double **yv); static void cmdline_failure(char *argv0, char *format, ...) { va_list argp; va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); esl_usage(stdout, argv0, usage); printf("\nTo see more help on available options, do %s -h\n\n", argv0); exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { esl_banner(stdout, argv0, banner); esl_usage (stdout, argv0, usage); puts("\n where options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); exit(0); } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; ESL_KEYHASH *qkh = esl_keyhash_Create(); ESL_KEYHASH *poskh = esl_keyhash_Create(); ESL_KEYHASH *negkh = esl_keyhash_Create(); ESL_RANDOMNESS *r = NULL; char *pmarkbase = NULL; char *negfile = NULL; char *posfile = NULL; char *modelfile = NULL; char *resfile = NULL; struct oneplot_s *plot = NULL; struct result_s *rp = NULL; int **pni = NULL; double **yv = NULL; /* yv[0..nxpts-1][0..nboots-1]: vector of bootstrapped samples at each xaxis point */ int nq, npos, nneg, nseq; int nresults = 0; int nboots; double *queryp; double *seqp; int i,j; int xi; /* Parse command line */ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], "Error in app configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h")) cmdline_help(argv[0], go); if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], "Incorrect number of command line arguments\n"); pmarkbase = esl_opt_GetArg(go, 1); resfile = esl_opt_GetArg(go, 2); nboots = esl_opt_GetInteger(go, "-N"); /* Set up the RNG */ if (esl_opt_IsDefault(go, "--seed")) r = esl_randomness_CreateTimeseeded(); else r = esl_randomness_Create(esl_opt_GetInteger(go, "--seed")); /* Read the queries, positives, and decoys into hash tables, and count them. */ esl_FileNewSuffix(pmarkbase, "tbl", &modelfile); parse_tblfile(modelfile, qkh); free(modelfile); esl_FileNewSuffix(pmarkbase, "pos", &posfile); parse_tblfile(posfile, poskh); free(posfile); esl_FileNewSuffix(pmarkbase, "neg", &negfile); parse_tblfile(negfile, negkh); free(negfile); nq = esl_keyhash_GetNumber(qkh); npos = esl_keyhash_GetNumber(poskh); nneg = esl_keyhash_GetNumber(negkh); nseq = npos+nneg; /* Create a [0..nq-1]x[0..pos-1] matrix preclassifying each pair as +1 (positive), -1 (negative), or 0 (ignore) */ if ((pni = malloc(sizeof(int *) * nq)) == NULL) esl_fatal("malloc failed"); for (i = 0; i < nq; i++) { if ((pni[i] = malloc(sizeof(int) * npos)) == NULL) esl_fatal("malloc failed"); for (j = 0; j < npos; j++) pni[i][j] = classify_pair_by_names(esl_keyhash_Get(qkh, i), esl_keyhash_Get(poskh, j)); } /* Read and code the .out file; assigning positives, negatives to the results */ parse_results(resfile, pni, qkh, poskh, negkh, &rp, &nresults); /* Allocate for the bootstrap weights on queries, seqs */ if ((queryp = malloc(sizeof(double) * nq)) == NULL) esl_fatal("malloc failed"); if ((seqp = malloc(sizeof(double) * nseq)) == NULL) esl_fatal("malloc failed"); /* In seqp, 0..npos-1 are the positives; npos..nseq-1 are the negatives. * To convert a negative's key index to the nseq index, add npos to it. */ /* Figure out the coordinate system for the plot's xaxis; then * allocate for a single plot sample in , as well as for * storing all the bootstrap results in . The * holds the information about the x coordinate system. */ plot = create_plot(go, nq); if ((yv = malloc(sizeof(double *) * plot->nxpts)) == NULL) esl_fatal("malloc failed"); for (xi = 0; xi < plot->nxpts; xi++) if ((yv[xi] = malloc(sizeof(double *) * nboots)) == NULL) esl_fatal("malloc failed"); /* "Bayesian" bootstraps: */ if (! esl_opt_GetBoolean(go, "-n")) { for (i = 0; i < nboots; i++) { esl_dirichlet_DSampleUniform(r, nq, queryp); esl_dirichlet_DSampleUniform(r, nseq, seqp); make_plot(rp, nresults, pni, queryp, nq, seqp, nseq, npos, plot); /* Plot or store this bootstrap sample. */ if (esl_opt_GetBoolean(go, "-a")) write_plot(stdout, plot); else { for (xi = 0; xi < plot->nxpts; xi++) yv[xi][i] = plot->tp[xi] / plot->totalpos; } } } else /* just plot the original data with no bootstraps */ { make_plot(rp, nresults, pni, NULL, nq, NULL, nseq, npos, plot); write_plot(stdout, plot); } /* Summarize the bootstraps */ if (! esl_opt_GetBoolean(go, "-a") && ! esl_opt_GetBoolean(go, "-n") ) summary_graph(go, stdout, plot, yv); for (i = 0; i < nq; i++) free(pni[i]); free(pni); for (xi = 0; xi < plot->nxpts; xi++) free(yv[xi]); free(yv); destroy_plot(plot); free(queryp); free(seqp); free(rp); esl_keyhash_Destroy(negkh); esl_keyhash_Destroy(poskh); esl_keyhash_Destroy(qkh); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } static int parse_tblfile(char *tblfile, ESL_KEYHASH *kh) { ESL_FILEPARSER *efp = NULL; char *tok = NULL; int toklen; if (esl_fileparser_Open(tblfile, NULL, &efp) != eslOK) esl_fatal("failed to open pmark table %s", tblfile); esl_fileparser_SetCommentChar(efp, '#'); while (esl_fileparser_NextLine(efp) == eslOK) { if (esl_fileparser_GetTokenOnLine(efp, &tok, &toklen) != eslOK) esl_fatal("failed to parse line %d of %s", efp->linenumber, tblfile); if (esl_keyhash_Store(kh, tok, toklen, NULL) != eslOK) esl_fatal("failed to add %s to seq index", tok); } esl_fileparser_Close(efp); return eslOK; } static int classify_pair_by_names(const char *query, const char *target) { int qlen = strlen(query); int tlen = strlen(target); if (tlen > qlen && strncmp(query, target, qlen) == 0 && target[qlen] == '/') return 1; /* this tests for == */ else if (strncmp(target, "decoy", 5) == 0) return -1; /* or a decoy */ else return 0; /* ignore */ } /* Given bootstrap sampled weights, calculate the maximum # of positives possible */ static double weighted_total_positives(int **pni, double *queryp, int nq, double *seqp, int npos, int nseq) { int q, t; double total_pos = 0.0; for (q = 0; q < nq; q++) for (t = 0; t < npos; t++) if (pni[q][t] == 1) total_pos += queryp[q] * seqp[t]; return total_pos * nq * nseq; } /* The output files have format: * * * Target sequence names are either * decoy\d+ for negatives (decoys); example: decoy75382 * /<#>[/-]+ for positives; example: CHP02677/42/297-773/781-1257 * * A hit is a positive if matches the component of the * target name - i.e. the embedded domains in the target are homologous to this * query. * * A hit is a negative if the target name matches /decoy\d+/. * * A hit is ignored if the target contains domains (isn't a decoy) but * doesn't match . * * This information is parsed digested here, such that each pairwise comparison * is stored as: * qidx : index of the query model * tidx : index of the target sequence * E : E-value of the comparison; results are already sorted on this */ static int parse_results(char *resfile, int **pni, ESL_KEYHASH *qkh, ESL_KEYHASH *poskh, ESL_KEYHASH *negkh, struct result_s **ret_r, int *ret_nr) { ESL_FILEPARSER *efp = NULL; char *tok = NULL; char *target = NULL; char *query = NULL; int toklen; int qlen, tlen; struct result_s *rp = NULL; int ralloc = 0; int nr = 0; if (esl_fileparser_Open(resfile, NULL, &efp) != eslOK) esl_fatal("failed to open pmark results file %s", resfile); esl_fileparser_SetCommentChar(efp, '#'); if ((rp = malloc(sizeof(struct result_s) * 256)) == NULL) esl_fatal("malloc failed"); ralloc = 256; while (esl_fileparser_NextLine(efp) == eslOK) { if (nr == ralloc) { if ((rp = realloc(rp, sizeof(struct result_s) * ralloc * 2)) == NULL) esl_fatal("realloc failed"); ralloc *= 2; } if (esl_fileparser_GetTokenOnLine(efp, &tok, &toklen) != eslOK) esl_fatal("failed to parse line %d of %s", efp->linenumber, resfile); /* E-value => rp[nr].E */ rp[nr].E = atof(tok); if (esl_fileparser_GetTokenOnLine(efp, &tok, &toklen) != eslOK) esl_fatal("failed to parse line %d of %s", efp->linenumber, resfile); /* bit score ignored */ if (esl_fileparser_GetTokenOnLine(efp, &target, &tlen) != eslOK) esl_fatal("failed to parse line %d of %s", efp->linenumber, resfile); /* target name; will be converted to an index */ if (esl_fileparser_GetTokenOnLine(efp, &query, &qlen) != eslOK) esl_fatal("failed to parse line %d of %s", efp->linenumber, resfile); /* query name; will be converted to an index */ if (esl_keyhash_Lookup(qkh, query, qlen, &(rp[nr].qidx)) != eslOK) esl_fatal("failed to find query model %s in hash", query); /* query index */ rp[nr].class = classify_pair_by_names(query, target); if (rp[nr].class == -1) /* negatives: look up in negkh, and offset the index by npos */ { if (esl_keyhash_Lookup(negkh, target, tlen, &(rp[nr].tidx)) != eslOK) esl_fatal("failed to find target seq %s in hash", target); /* target index */ rp[nr].tidx += esl_keyhash_GetNumber(poskh); } else /* positives/ignores: look up in poskh */ { if (esl_keyhash_Lookup(poskh, target, tlen, &(rp[nr].tidx)) != eslOK) esl_fatal("failed to find target seq %s in hash", target); /* target index */ } nr++; } *ret_r = rp; *ret_nr = nr; esl_fileparser_Close(efp); return eslOK; } static struct oneplot_s * create_plot(ESL_GETOPTS *go, int nq) { struct oneplot_s *plot; double minfp, maxfp; int status; ESL_ALLOC(plot, sizeof(struct oneplot_s)); if (esl_opt_IsDefault(go, "--min")) minfp = 1.0 / (double) nq; else minfp = esl_opt_GetReal(go, "--min"); maxfp = esl_opt_GetReal(go, "--max"); plot->nsteps = esl_opt_GetInteger(go, "--steps"); plot->base = (int) floor(log10(minfp) * plot->nsteps); plot->nxpts = (int) ceil(log10(maxfp) * plot->nsteps) - plot->base + 1; ESL_ALLOC(plot->tp, sizeof(double) * plot->nxpts); return plot; ERROR: destroy_plot(plot); return NULL; } static void destroy_plot(struct oneplot_s *plot) { if (plot == NULL) return; if (plot->tp != NULL) free(plot->tp); free(plot); } /* Given the results [0..nr-1], * positive/ignore classifications pni[0..nq-1][0..npos-1] * and bootstrap-sampled usage probabilities , , * and a plot axis to store results in; * calculate a new ROC plot for this bootstrap sample, * and store it in tp>. * * As a special case, if and/or are NULL, calculate * the ROC plot for the original data without bootstrapping. */ static void make_plot(struct result_s *rp, int nresults, int **pni, double *queryp, int nq, double *seqp, int nseq, int npos, struct oneplot_s *plot) { double weight; int xi, curr_xi; double true_pos, false_pos; int j; if (queryp != NULL && seqp != NULL) plot->totalpos = weighted_total_positives(pni, queryp, nq, seqp, npos, nseq); else plot->totalpos = npos; curr_xi = 0; true_pos = false_pos = 0.0; for (j = 0; j < nresults; j++) { if (queryp != NULL && seqp != NULL) weight = queryp[rp[j].qidx] * seqp[rp[j].tidx] * nseq * nq; else weight = 1.0; if (rp[j].class == 1) { true_pos += weight; plot->tp[curr_xi] = true_pos; } else if (rp[j].class == -1) { false_pos += weight / (double) nq; /* FP/query */ xi = (int) ceil(log10(false_pos) * plot->nsteps) - plot->base; if (xi > curr_xi) { for (curr_xi = curr_xi+1; curr_xi < xi && curr_xi < plot->nxpts; curr_xi++) plot->tp[curr_xi] = true_pos; if (curr_xi < plot->nxpts) plot->tp[curr_xi] = true_pos; } } if (curr_xi >= plot->nxpts) break; } /* Rarely, the plot won't have enough false positives to extend all the way to * the left extreme of the x-axis; make sure we propagate the last true_pos */ for (curr_xi++; curr_xi < plot->nxpts; curr_xi++) plot->tp[curr_xi] = true_pos; } static void write_plot(FILE *fp, struct oneplot_s *plot) { int xi; double false_pos; for (xi = 0; xi < plot->nxpts; xi++) { false_pos = exp(log(10) * ((double) plot->base + (double) xi) / (double) plot->nsteps); fprintf(fp, "%.5f %.5f\n", false_pos, plot->tp[xi] / plot->totalpos ); } fprintf(fp, "&\n"); } static void summary_graph(ESL_GETOPTS *go, FILE *fp, struct oneplot_s *plot, double **yv) { int nboots = esl_opt_GetInteger(go, "-N"); int by_stddev = esl_opt_GetBoolean(go, "-s"); double confidence_interval = esl_opt_GetReal (go, "--interval"); double nsd = esl_opt_GetReal (go, "--nsd"); int xi; double false_pos; double mean, var; int ntail; for (xi = 0; xi < plot->nxpts; xi++) { false_pos = exp(log(10) * ((double) plot->base + (double) xi) / (double) plot->nsteps); esl_stats_DMean(yv[xi], nboots, &mean, &var); /* the dy's in xmgrace xydydy format are dy's, and in order upper, lower */ if (by_stddev) { fprintf(fp, "%.5f %.5f %.5f %.5f\n", false_pos, mean, nsd*sqrt(var), nsd*sqrt(var)); } else { esl_vec_DSortIncreasing(yv[xi], nboots); ntail = (int) ((double) nboots * (1.0 - confidence_interval) / 2.0); fprintf(fp, "%.5f %.5f %.5f %.5f\n", false_pos, mean, yv[xi][nboots-ntail] - mean, mean - yv[xi][ntail]); } } fprintf(fp, "&\n"); } hmmer-3.1b2/profmark/00README0000664361611702660230000004525312473612611015140 0ustar wheelerteddyBenchmarking methodology used internally in HMMER testing: the "profmark" benchmark. Table of contents: 1. Overview of files in the profmark directory. 2. create-profmark: creating a new benchmark dataset 3. format of {.tbl,.msa,.fa,.pos,.neg} files in a benchmark dataset 4. finding summary statistics of a benchmark dataset 5. pmark-master.pl: running a pmark benchmark, in parallel using SGE qsub 6. x-: benchmark driver scripts 7. format of benchmark results output files 8. rocplot: displaying results as ROC graphs ================================================================ = 1. Overview of files ================================================================ create-profmark.c : Creates a new benchmark dataset. pmark-master.pl : Master script that parallelizes the running of a benchmark. x-hmmsearch : H3 hmmsearch benchmark (subsidiary to pmark-master.pl) x-phmmer-fps : phmmer family-pairwise-search benchmark x-phmmer-consensus : phmmer consensus query benchmark rocplot.c : Constructs ROC plot of results, with bootstrapped confidence intervals. rocplot.pl : quick and dirty ROC plot, no bootstrapping. ================================================================ = 2. create-profmark: creating a new benchmark dataset ================================================================ create-profmark is compiled from ANSI C source create-profmark.c; see Makefile.in for build. Usage: ./create-profmark Example: ./create-profmark pmark Pfam-A.seed uniprot-sprot.fa Creates five output files: .tbl - table summarizing the benchmark .msa - MSA queries, stockholm format .fa - sequence targets, fasta format .pos - table summarizing positive test set .neg - table summarizing negative test set The format of these files is described in the following section. Briefly: each input alignment in the is split into a query alignment and a nonredundant set of test domains by two single-linkage clustering steps, such that no test domain has >= 25% identity to any query sequence and no test domain is >= 50% identical to any other test domain. Positive test sequences are constructed by embedding two test domains in a larger sequence, with nonhomologous segments generated by selecting a random segment of the and shuffling it. Negative test sequences are constructed by sampling a positive test sequence at random (for its segment length structure) and replacing all its segments with nonhomologous shuffled segments. In more detail, including options that change the default benchmark construction protocol, the procedure is as follows: : for each MSA in : : Filter out sequence "fragments". Defined as sequences < x*average length (in residues); default x=0.70; controlled by -F option. : Try to split into a training set and test set such that no test sequence has >= x% identity to any training sequence. Uses efficient single-linkage-clustering at x threshold; defines largest cluster as training set, all other clusters as test set. Pairwise % identity as defined by on the given alignment. Default x=25% identity; controlled by -1 option. : For the remaining test sequences, remove redundancy by performing another single linkage clustering by percent identity, at another threshold x. Default x=50%; controlled by -2 option. For each cluster, one test sequence is chosen at random as a representative. : If less than two test sequences have been identified that meet these criteria, fail and move on to the next MSA. (For instance, if all the sequences in the MSA are highly identical, don't bother using this MSA for a benchmark; it's too easy.) : Permute the order of the training set alignment. (This allows single-sequence-query tests to start on a random but reproducible single query sequence, simply by taking the first seq in the alignment.) Other than this (row) permutation, the training set is preserved in its original alignment. : The training set alignment is written to .msa. : The test set is now considered to be "test domains", and we construct positive test sequences by embedding these domains in nonhomologous sequence constructed from sequences in the as follows: : choose two test domains (by default; --single option makes it one) : select a sequence length from at random that is sufficiently long to embed both test domains. : embed the domain(s) at random positions in that sequence length : construct the non-domain regions of the test sequence with "nonhomologous" sequence segments. There are several ways to construct "nonhomologous" sequence segments, all of which (except --iid) start with selecting a random subsequence of appropriate length from the : : shuffle the selected subsequence. (default; --mono) : shuffle preserving diresidue composition. (--di) : synthesize with same monoresidue comp (--markov0) : synthesize with same diresidue comp (--markov1) : reverse C-to-N direction (--reverse) : synthesize iid sequence (--iid) : The embedded-domain test sequences are written in FASTA format to the .fa file. Details of how they were constructed (where all the sequence segments came from) are written to the .pos file. : Finally a set of negative test sequences is constructed. Default N=200000; controlled by the -N option. For each negative: : choose one of the positive test seqs at random; we will use the same set of segment lengths to construct a negative. : for every segment, insert a nonhomologous sequence generated by the same method we used for nonhomologous segments in the positive sequences. : The test sequences are appended in FASTA format to the to the .fa file. Details of how they were constructed (where all the sequence segments came from) are written to the .neg file. ================================================================ = 3. Format of {.tbl,.msa,.fa,.pos,.neg} files in a benchmark dataset ================================================================ The .tbl file is used by pmark-master.pl as a list of MSA queries in the benchmark. Each line has eight whitespace-delimited fields: For example: 2OG-FeII_Oxy 27% 167 141 0 113 16 8 3-alpha 24% 48 10 0 6 4 2 3_5_exonuc 24% 219 28 0 21 5 2 4HBT 20% 99 141 0 97 37 18 In more detail, these eight fields are: : name of the MSA query, as given in original : average % id in the training set alignment, as calculated by esl_dst_XAverageId(). : length of the training set alignment in columns. : number of sequences that were excluded from the original alignment because they appeared to be fragments. : number of sequences in the training set alignment saved to .msa : number of sequences that passed criteria for use as a possible embedded domain in the test sequences : number of embedded-domain test sequences saved to .fa The .msa file is a Stockholm file containing all the query alignments. The .fa file is a FASTA file containing the positive and negative test sequences. The .pos file is a log of where all the segments in the positive test sequences came from. [ ]... : name of the test sequence. These are constructed as /<#>/-/-, where <#> ranges from 1 to the number of test sequences, and - and - are the coordinates in the test sequence that correspond to homologous domains. This naming structure is exploited by benchmark scripts to know that the sequence is a positive, and to know exactly where the bounds of homologous domains are. In a single-domain embedded test (--single), the names are /<#>/-. : length of the test sequence in residues : length of the first nonhomologous segment : length of the first homologous test domain : length of the 2nd nonhomologous segment : length of the second homologous test domain (or 0) : length of the 3rd nonhomologous segment (or 0) then for each segment (5 for the default two-domain embedding; 3 for --single): : name of the source sequence for the segment; in for nonhomologous segments, and in the original MSA for homologous segments. : start coord in the source : end coord in the source The .neg file is a log of where all the segments in the negative test sequences came from. It has essentially the same format as the .pos file, except that negative sequences are all named <#> (example: "decoy2012"), and the benchmark scripts rely on this to identify negative test sequences. ================================================================ = 4. Finding summary statistics of a benchmark dataset ================================================================ Number of query alignments: wc -l .tbl or esl-alistat -a .msa Number of positives: wc -l .pos Number of negatives: wc -l .neg Test sequence length dist: esl-seqstat .fa ================================================================ = 5. pmark-master.pl: running a pmark benchmark, in parallel using SGE qsub ================================================================ Usage: ./pmark-master.pl Example: ./pmark-master.pl ~/releases/hmmer-release/build-icc ~/releases/hmmer-release h3-results 100 pmark ./x-hmmsearch pmark-master.pl is a wrapper that coarse-grain parallelizes a benchmark run for our SGE queue. This would typically be run in a notebook directory, which would have symlinks to the pmark-master.pl script and the driver x-* scripts, and also would have the .{tbl,msa,fa,pos,neg} files either present or symlinked. For each benchmark you run that day, you'd have a different ; for example, you might run a "h3" and "h2" benchmark. The name should be short because it is used to construct other names, including the SGE job name. The pmark-master.pl creates the , splits the .tbl file into separate tbl files called /tbl., and issues "qsub" commands to run the on each of these subtables. The jobs in SGE are named .. The is passed 7 arguments: where is /tbl. (the list of queries this parallelized instance of the benchmark driver is supposed to process), and is a file named /tbl.out. When all the driver script instances are done, there will be output files named /tbl.out. These files can be analysed and turned into ROC graphs using rocplot and/or rocplot.pl. ================================================================ = 6. x-: benchmark driver scripts ================================================================ A driver script gets the 7 arguments as described above: : path to top-level build directory of the program(s) to be tested, where executables can be found. When testing non-HMMER programs, this is the installation directory where those executables are found. : path to top-level src directory of the HMMER program(s) to be tested, where data and scripts may be found. When testing non-HMMER programs, this is nonetheless still a HMMER top-level src directory, where parser scripts and data may be found. (For example, BLAST output parsers: our demotic perl modules.) : name of the directory that temp files can be placed in, unique to the instantiation of pmark-master.pl that called us, so long as we use names that don't clash with the other -1 instances of driver scripts; for example, we can safely create tmp files that start with . : name of the tbl. file in that lists the query alignments this instantiation of the driver is supposed to work on. : the benchmark's MSA file; query alignments named in will be esl-alifetch'ed from here. : the benchmark's positive and negative sequences; this will be used as the target database for searches the driver runs. As a special case (i.e. hack), iterative search benchmarks may look for related files, such as , a sequence database to iterate on first before running on . : a whitespace-delimited tabular output file, one line per target sequence, described below. Using and allows us to easily construct regression tests of different HMMER versions and/or configurations. Why the BEGIN {} clause: you'll see a BEGIN {} clause wrapping cmdline argument parsing on many of the x- scripts. That's a trick that goes with "use lib ${top_srcdir}/easel/demotic", where we need the demotic library included, but we don't know where it is until we get ${top_srcdir} from the cmdline, so we defer the 'use lib'. Error handling: why don't these scripts call die() on errors? That's deliberate. If a step fails, the script prints an error message and skips to the next query, without cleaning up any tmp files from the failed query. Thus we continue collecting data from as much of the .tbl file of queries as possible, while saving tmp files that we'll need for debugging later. If you have the x- script fail w/ a fatal error, it will stop in the middle of a tbl file, which unnecessarily compromises the completeness of a benchmark (say, if one piddly query out of 10000 fails, there's no reason to bring down the whole benchmark). ================================================================ = 7. format of benchmark results output files ================================================================ The output in files /tbl.out have four fields: for example: 6e-41 144.1 UCH/6548/39-342/368-893 UCH 1.5e-34 123.1 UCH/6546/168-490/816-1424 UCH 0.17 14.4 zf-UBP/6823/3-74/209-283 UCH 1.4 11.4 decoy31607 UCH These can be concatenated and sorted by E-value: cat *.out | sort -g Analysis scripts can easily tell the difference between a true, false, and "ignored" comparison: - if the target is named "decoy", it's a negative (nonhomologous) comparison. - if the name of the query matches the first part of the name of the target, it's a true (homologous) comparison. - if the name of the query doesn't match the first part of the target name, we will ignore the comparison. This is a match between a positive sequence and a query that doesn't correspond to the positive test domains; it might be a false hit, but it also might be that the two alignments (the query and the one that generated the test sequence) are homologous. Thus it's easy to keep track (even during a run) of the top-scoring false positive: cat *.out | sort -g | grep decoy | head and using the rocplot.pl script, it's easy to see get a glimpse of how the ROC plot is turning out: cat *.out | sort -g | ../rocplot.pl | head ================================================================ = 8. rocplot: displaying results as ROC graphs ================================================================ rocplot is compiled from ANSI C source rocplot.c; see Makefile.in for build. Usage: ./rocplot Example: cat *.out | sort -g | ../rocplot pmark - > results.xy The output is an XMGRACE xydydy file, plotting fractional coverage of the positives (on the Y-axis; range 0..1) versus errors per query (on the X-axis; ranging from 1/(# of models) to 10.0 by default; see --min and --max options). For each point, a 95% confidence interval is denoted by the dydy points, as determined by "Bayesian" bootstrap resampling of the query alignments. Output from rocplot over a set of different benchmarks are usually concatenated into one XMGRACE input .dat file, and worked up into a display following a procedure akin to: cat bench1/*.out | sort -g | ./rocplot pmark - > bench1.dat cat bench2/*.out | sort -g | ./rocplot pmark - > bench2.dat cat bench1.dat > todays.dat cat bench2.dat >> todays.dat \cp todays.dat todays.agr xmgrace -settype xydydy -param ~/src/hmmer/profmark/pmark.param todays.agr then manually making the lines pretty colors as in All: symbols circle 56 opaque white fill no riser set 0 bench1 orange set 1 bench2 black and saving (as .agr) and exporting (as .eps): Figure: todays.{dat,agr,eps} hmmer-3.1b2/profmark/x-iterate-jackhmmer0000775361611702660230000000635312473612612017706 0ustar wheelerteddy#! /usr/bin/perl $n_iterations = 1; # $n_iterations = 2; # uncomment as needed for -n2, -n3 tests... # $n_iterations = 3; $top_builddir = shift; $top_srcdir = shift; $wrkdir = shift; $tblfile = shift; $msafile = shift; $fafile = shift; $outfile = shift; $jackhmmer = "$top_builddir/src/jackhmmer"; $hmmbuild = "$top_builddir/src/hmmbuild"; $hmmsearch = "$top_builddir/src/hmmsearch"; $iteropts = "-N $n_iterations --cpu 1"; $searchopts = "-E 200 --cpu 1"; if (! -d $top_builddir) { die "didn't find build directory $top_builddir"; } if (! -d $top_srcdir) { die "didn't find source directory $top_srcdir"; } if (! -x $jackhmmer) { die "didn't find executable $jackhmmer"; } if (! -x $hmmbuild) { die "didn't find executable $hmmbuild"; } if (! -x $hmmsearch) { die "didn't find executable $hmmsearch"; } if (! -e $wrkdir) { die "$wrkdir doesn't exist"; } if (! -e "$fafile.iter") { die "iteration db $fafile.iter doesn't exist"; } open(OUTFILE,">$outfile") || die "failed to open $outfile"; open(TABLE, "$tblfile") || die "failed to open $tblfile"; MSA: while (
) { ($msaname) = split; $cmd = "esl-afetch -o $wrkdir/$msaname.sto $msafile $msaname"; $output = `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # Fetch the query MSA from the benchmark; tmp .sto file here $cmd = "esl-seqstat --amino -a $wrkdir/$msaname.sto | grep "^=" | awk '{print \$2}'"; $output = `$cmd`; if ($?) { print "FAILED: $cmd\n", next MSA; } # Extract list of indiv seq names. --amino for robustness, some msa's v. small @qnames = split(/^/,$output); chop (@qnames); $qname = $qnames[0]; $cmd = "esl-sfetch -o $wrkdir/$msaname.query $wrkdir/$msaname.sto $qname > /dev/null"; `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # Pick a single seq (first one) to tmp file; tmp .query file here $cmd = "$jackhmmer $iteropts -A $wrkdir/$msaname.jck $wrkdir/$msaname.query $fafile.iter > /dev/null"; `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # Iterate n times on the .iter intermediate database (NR, whatever); alignment to tmp .jck file $cmd = "$hmmbuild --hand $wrkdir/$msaname.hmm $wrkdir/$msaname.jck > /dev/null`"; `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # Build a model from .jck, using the same architecture (--hand) $cmd = "$hmmsearch $searchopts --tblout $wrkdir/$msaname.tmp $wrkdir/$msaname.hmm $fafile > /dev/null"; `$cmd`; if ($?) { print "FAILED: $cmd\n"; next MSA; } # Search against benchmark .fa file; results to tmp .tmp tbl file if (! open(OUTPUT, "$wrkdir/$msaname.tmp")) { print "FAILED: to open $wrkdir/$msaname.tmp"; next MSA; } while () { if (/^\#/) { next; } @fields = split(' ', $_, 7); $target = $fields[0]; $pval = $fields[4]; $bitscore = $fields[5]; printf OUTFILE "%g %.1f %s %s\n", $pval, $bitscore, $target, $msaname; } close OUTPUT; unlink "$wrkdir/$msaname.tmp"; unlink "$wrkdir/$msaname.hmm"; unlink "$wrkdir/$msaname.jck"; unlink "$wrkdir/$msaname.query"; unlink "$wrkdir/$msaname.sto"; } close TABLE; close OUTFILE; hmmer-3.1b2/aclocal.m40000664361611702660230000013113312473612604014132 0ustar wheelerteddy# aclocal.m4 contains custom macros used for creating HMMER's # configuration script. # # SRE, Sun Apr 22 09:26:38 2007 [Janelia] # SVN $Id: aclocal.m4 896 2013-12-17 21:07:37Z wheelert $ ################################################################# # Macro: CHECK_GNU_MAKE # Usage: CHECK_GNU_MAKE # Author: John Darrington # Modified from the original. # # Sets the format of makefile dependency lines for executables. # # We need this because GNU make and SYSV make use different systems # specifying variables for dependencies: $$@ in sysv, %: %.o in GNU. # Would love to hear a better way of doing this. # # I use two different conventions in my Makefiles. Sometimes # executable "foo" has a file "foo.c" - this is the HMMER, Easel, Infernal convention. # Sometimes executable "foo" has a file "foo_main.c" - this is # the SQUID convention. The configure script sets the # EXEC_DEPENDENCY appropriately: here, HMMER style. # # Sets an output variable EXEC_DEPENDENCY. # This is used in the src/Makefile.in. # AC_DEFUN(CHECK_GNU_MAKE,[ AC_MSG_CHECKING(whether you have a GNU make) foundGNUmake='nope, so we assume you will use a sysv-compatible make.' ; EXEC_DEPENDENCY=[\$\$\@.o] ; for a in "$MAKE" make gmake gnumake ; do if test -z "$a" ; then continue ; fi ; if ( sh -c "$a --version" 2> /dev/null | grep GNU 2>&1 > /dev/null ) ; then foundGNUmake='yes, you do; and we assume you will use it!' ; EXEC_DEPENDENCY='%: %.o' ; fi done AC_MSG_RESULT($foundGNUmake) AC_SUBST(EXEC_DEPENDENCY) ]) ################################################################ # Macro: ACX_MPI # Usage: ACX_MPI([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # Authors: Steven G. Johnson and Julian C. Cummings # Version: 2006-10-22 # Unmodified from the original; can be replaced with new version. # # xref http://autoconf-archive.cryp.to/acx_mpi.html # Sets MPICC, MPILIBS output variable. # If ACTION-IF-FOUND is not specified, default action defines HAVE_MPI. # AC_DEFUN([ACX_MPI], [ AC_PREREQ(2.50) dnl for AC_LANG_CASE AC_LANG_CASE([C], [ AC_REQUIRE([AC_PROG_CC]) AC_ARG_VAR(MPICC,[MPI C compiler command]) AC_CHECK_PROGS(MPICC, mpicc hcc mpxlc_r mpxlc mpcc cmpicc, $CC) acx_mpi_save_CC="$CC" CC="$MPICC" AC_SUBST(MPICC) ], [C++], [ AC_REQUIRE([AC_PROG_CXX]) AC_ARG_VAR(MPICXX,[MPI C++ compiler command]) AC_CHECK_PROGS(MPICXX, mpic++ mpicxx mpiCC hcp mpxlC_r mpxlC mpCC cmpic++, $CXX) acx_mpi_save_CXX="$CXX" CXX="$MPICXX" AC_SUBST(MPICXX) ], [Fortran 77], [ AC_REQUIRE([AC_PROG_F77]) AC_ARG_VAR(MPIF77,[MPI Fortran 77 compiler command]) AC_CHECK_PROGS(MPIF77, mpif77 hf77 mpxlf_r mpxlf mpf77 cmpifc, $F77) acx_mpi_save_F77="$F77" F77="$MPIF77" AC_SUBST(MPIF77) ], [Fortran], [ AC_REQUIRE([AC_PROG_FC]) AC_ARG_VAR(MPIFC,[MPI Fortran compiler command]) AC_CHECK_PROGS(MPIFC, mpif90 mpxlf95_r mpxlf90_r mpxlf95 mpxlf90 mpf90 cmpif90c, $FC) acx_mpi_save_FC="$FC" FC="$MPIFC" AC_SUBST(MPIFC) ]) if test x = x"$MPILIBS"; then AC_LANG_CASE([C], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])], [C++], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])], [Fortran 77], [AC_MSG_CHECKING([for MPI_Init]) AC_LINK_IFELSE([AC_LANG_PROGRAM([],[ call MPI_Init])],[MPILIBS=" " AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])], [Fortran], [AC_MSG_CHECKING([for MPI_Init]) AC_LINK_IFELSE([AC_LANG_PROGRAM([],[ call MPI_Init])],[MPILIBS=" " AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])]) fi AC_LANG_CASE([Fortran 77], [ if test x = x"$MPILIBS"; then AC_CHECK_LIB(fmpi, MPI_Init, [MPILIBS="-lfmpi"]) fi if test x = x"$MPILIBS"; then AC_CHECK_LIB(fmpich, MPI_Init, [MPILIBS="-lfmpich"]) fi ], [Fortran], [ if test x = x"$MPILIBS"; then AC_CHECK_LIB(fmpi, MPI_Init, [MPILIBS="-lfmpi"]) fi if test x = x"$MPILIBS"; then AC_CHECK_LIB(mpichf90, MPI_Init, [MPILIBS="-lmpichf90"]) fi ]) if test x = x"$MPILIBS"; then AC_CHECK_LIB(mpi, MPI_Init, [MPILIBS="-lmpi"]) fi if test x = x"$MPILIBS"; then AC_CHECK_LIB(mpich, MPI_Init, [MPILIBS="-lmpich"]) fi dnl We have to use AC_TRY_COMPILE and not AC_CHECK_HEADER because the dnl latter uses $CPP, not $CC (which may be mpicc). AC_LANG_CASE([C], [if test x != x"$MPILIBS"; then AC_MSG_CHECKING([for mpi.h]) AC_TRY_COMPILE([#include ],[],[AC_MSG_RESULT(yes)], [MPILIBS="" AC_MSG_RESULT(no)]) fi], [C++], [if test x != x"$MPILIBS"; then AC_MSG_CHECKING([for mpi.h]) AC_TRY_COMPILE([#include ],[],[AC_MSG_RESULT(yes)], [MPILIBS="" AC_MSG_RESULT(no)]) fi], [Fortran 77], [if test x != x"$MPILIBS"; then AC_MSG_CHECKING([for mpif.h]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[ include 'mpif.h'])],[AC_MSG_RESULT(yes)], [MPILIBS="" AC_MSG_RESULT(no)]) fi], [Fortran], [if test x != x"$MPILIBS"; then AC_MSG_CHECKING([for mpif.h]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[ include 'mpif.h'])],[AC_MSG_RESULT(yes)], [MPILIBS="" AC_MSG_RESULT(no)]) fi]) AC_LANG_CASE([C], [CC="$acx_mpi_save_CC"], [C++], [CXX="$acx_mpi_save_CXX"], [Fortran 77], [F77="$acx_mpi_save_F77"], [Fortran], [FC="$acx_mpi_save_FC"]) AC_SUBST(MPILIBS) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x = x"$MPILIBS"; then $2 : else ifelse([$1],,[AC_DEFINE(HAVE_MPI,1,[Define if you have the MPI library.])],[$1]) : fi ])dnl ACX_MPI ################################################################# # Macro: ACX_PTHREAD # Usage: ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # Authors: Steven G. Johnson # Alejandro Forero Cuervo # Version: 1.9 (2004/02/23) # Source: http://www.gnu.org/software/ac-archive/htmldoc/acx_pthread.html # # SRE: I have modified this source; search for SRE to see where. # Solaris needs -D_POSIX_PTHREAD_SEMANTICS or ctime_r() calls will choke. # dnl Available from the GNU Autoconf Macro Archive at: dnl http://www.gnu.org/software/ac-archive/htmldoc/acx_pthread.html dnl AC_DEFUN([ACX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_SAVE AC_LANG_C acx_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) AC_MSG_RESULT($acx_pthread_ok) if test x"$acx_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthread or # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags" ;; esac if test x"$acx_pthread_ok" = xno; then for flag in $acx_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) if test x"$acx_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_TRY_LINK([#include ], [pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], [acx_pthread_ok=yes]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT($acx_pthread_ok) if test "x$acx_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$acx_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: threads are created detached by default # and the JOINABLE attribute has a nonstandard name (UNDETACHED). AC_MSG_CHECKING([for joinable pthread attribute]) AC_TRY_LINK([#include ], [int attr=PTHREAD_CREATE_JOINABLE;], ok=PTHREAD_CREATE_JOINABLE, ok=unknown) if test x"$ok" = xunknown; then AC_TRY_LINK([#include ], [int attr=PTHREAD_CREATE_UNDETACHED;], ok=PTHREAD_CREATE_UNDETACHED, ok=unknown) fi if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then AC_DEFINE(PTHREAD_CREATE_JOINABLE, $ok, [Define to the necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_RESULT(${ok}) if test x"$ok" = xunknown; then AC_MSG_WARN([we do not know how to create joinable pthreads]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no # Added _POSIX_PTHREAD_SEMANTICS for solaris. Needed for ctime_r() compliance. # SRE, Fri Oct 29 10:03:36 2010 [J7/3] case "${host_cpu}-${host_os}" in *-aix* | *-freebsd*) flag="-D_THREAD_SAFE";; *solaris*) flag="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS";; *-osf* | *-hpux*) flag="-D_REENTRANT";; esac AC_MSG_RESULT(${flag}) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with cc_r AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC}) else PTHREAD_CC="$CC" fi AC_SUBST(PTHREAD_LIBS) AC_SUBST(PTHREAD_CFLAGS) AC_SUBST(PTHREAD_CC) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$acx_pthread_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) : else acx_pthread_ok=no $2 fi AC_LANG_RESTORE ])dnl ACX_PTHREAD # # ACX_PTHREAD macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_CHECK_COMPILER_FLAGS # Usage: AX_CHECK_COMPILER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE]) # Authors: Copyright (C) 2007 Steven G. Johnson # Copyright (C) 2007 Matteo Frigo. # Version: 2007-07-29 # Source: http://autoconf-archive.cryp.to/ax_check_compiler_flags.html # # Check whether the given compiler FLAGS work with the current language's compiler, # or whether they give an error. (Warnings, however, are ignored.) # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on success/failure. # # Everything below is verbatim from the archive. DO NOT MODIFY IT. # AC_DEFUN([AX_CHECK_COMPILER_FLAGS], [AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1]) dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname: AS_LITERAL_IF([$1], [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1), [ ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$1" AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes, AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no) _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])], [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$1" AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes, eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no) _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS]) eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1) AC_MSG_RESULT($ax_check_compiler_flags) if test "x$ax_check_compiler_flags" = xyes; then m4_default([$2], :) else m4_default([$3], :) fi ])dnl AX_CHECK_COMPILER_FLAGS # # AX_CHECK_COMPILER_FLAGS macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_GCC_X86_CPUID # Usage: AX_GCC_X86_CPUID(OP) # Authors: Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2008 Matteo Frigo # Version: 2010-03-01 # Source: http://www.gnu.org/software/autoconf-archive/ax_gcc_x86_cpuid.html # # On Pentium and later x86 processors, with gcc or a compiler that has a # compatible syntax for inline assembly instructions, run a small program # that executes the cpuid instruction with input OP. This can be used to # detect the CPU type. # # On output, the values of the eax, ebx, ecx, and edx registers are stored # as hexadecimal strings as "eax:ebx:ecx:edx" in the cache variable # ax_cv_gcc_x86_cpuid_OP. # # If the cpuid instruction fails (because you are running a # cross-compiler, or because you are not using gcc, or because you are on # a processor that doesn't have this instruction), ax_cv_gcc_x86_cpuid_OP # is set to the string "unknown". # # This macro mainly exists to be used in AX_GCC_ARCHFLAG. # # Everything below is verbatim from the archive. DO NOT MODIFY IT. # AC_DEFUN([AX_GCC_X86_CPUID], [AC_REQUIRE([AC_PROG_CC]) AC_LANG_PUSH([C]) AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1, [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], [ int op = $1, eax, ebx, ecx, edx; FILE *f; __asm__("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (op)); f = fopen("conftest_cpuid", "w"); if (!f) return 1; fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); fclose(f); return 0; ])], [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid], [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid], [ax_cv_gcc_x86_cpuid_$1=unknown])]) AC_LANG_POP([C]) ]) # # AX_GCC_X86_CPUID macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_COMPILER_VENDOR # Usage: AX_COMPILER_VENDOR # Authors: Copyright (C) 2007 Steven G. Johnson # Copyright (C) 2007 Matteo Frigo # Version: 2007-08-01 # Source: http://autoconf-archive.cryp.to/ax_compiler_vendor.html # # Sets $ax_cv_c_compiler_vendor to gnu, intel, ibm, sun, hp, borland, # comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft, watcom, etc. # # Everything below is verbatim from the archive. DO NOT MODIFY IT. AC_DEFUN([AX_COMPILER_VENDOR], [ AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown # note: don't check for gcc first since some other compilers define __GNUC__ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ #if !($vencpp) thisisanerror; #endif ])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break]) done ]) ]) # # AX_COMPILER_VENDOR macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_CHECK_PREPROC_FLAG # Usage: AX_CHECK_PREPROC_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) # Authors: Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # Version: 2013-12-11 # Source: http://www.gnu.org/software/autoconf-archive/ax_check_preproc_flag.html # # Check whether the given FLAG works with the current language's # preprocessor or gives an error. (Warnings, however, are ignored) # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # If EXTRA-FLAGS is defined, it is added to the preprocessor's default # flags when the check is done. The check is thus made with the flags: # "CPPFLAGS EXTRA-FLAGS FLAG". This can for example be used to force the # preprocessor to issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_PREPROC_IFELSE. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this # macro in sync with AX_CHECK_{COMPILE,LINK}_FLAG. # # Everything below is verbatim from the archive. DO NOT MODIFY IT. # AC_DEFUN([AX_CHECK_PREPROC_FLAG], [AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]cppflags_$4_$1])dnl AC_CACHE_CHECK([whether _AC_LANG preprocessor accepts $1], CACHEVAR, [ ax_check_save_flags=$CPPFLAGS CPPFLAGS="$CPPFLAGS $4 $1" AC_PREPROC_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) CPPFLAGS=$ax_check_save_flags]) AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR])dnl ])dnl AX_CHECK_PREPROC_FLAGS # # AX_CHECK_PREPROC_FLAG macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_CHECK_LINK_FLAG # Usage: AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) # Authors: Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # Version: 2013-12-11 # Source: http://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html # # Check whether the given FLAG works with the linker or gives an error. # (Warnings, however, are ignored) # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # If EXTRA-FLAGS is defined, it is added to the linker's default flags # when the check is done. The check is thus made with the flags: "LDFLAGS # EXTRA-FLAGS FLAG". This can for example be used to force the linker to # issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_LINK_IFELSE. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this # macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG. # # Everything below is verbatim from the archive. DO NOT MODIFY IT. # AC_DEFUN([AX_CHECK_LINK_FLAG], [AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [ ax_check_save_flags=$LDFLAGS LDFLAGS="$LDFLAGS $4 $1" AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) LDFLAGS=$ax_check_save_flags]) AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR])dnl ])dnl AX_CHECK_LINK_FLAGS # # AX_CHECK_LINK_FLAG macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_CHECK_COMPILE_FLAG # Usage: AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) # Authors: Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # Version: 2013-12-11 # Source: http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html # # Check whether the given FLAG works with the current language's compiler # or gives an error. (Warnings, however, are ignored) # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # If EXTRA-FLAGS is defined, it is added to the current language's default # flags (e.g. CFLAGS) when the check is done. The check is thus made with # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to # force the compiler to issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_COMPILE_IFELSE. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this # macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. # # Everything below is verbatim from the archive. DO NOT MODIFY IT. # AC_DEFUN([AX_CHECK_COMPILE_FLAG], [AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR])dnl ])dnl AX_CHECK_COMPILE_FLAGS # # AX_CHECK_COMPILE_FLAG macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_GCC_ARCHFLAG # Usage: AX_GCC_ARCHFLAG([PORTABLE?], [ACTION-SUCCESS], [ACTION-FAILURE]) # Authors: Copyright (C) 2007 Steven G. Johnson # Copyright (C) 2007 Matteo Frigo # Version: 2013-12-11 # Source: http://autoconf-archive.cryp.to/ax_gcc_archflag.html # # This macro tries to guess the "native" arch corresponding to the target # architecture for use with gcc's -march=arch or -mtune=arch flags. If # found, the cache variable $ax_cv_gcc_archflag is set to this flag and # ACTION-SUCCESS is executed; otherwise $ax_cv_gcc_archflag is set to # "unknown" and ACTION-FAILURE is executed. The default ACTION-SUCCESS is # to add $ax_cv_gcc_archflag to the end of $CFLAGS. # # PORTABLE? should be either [yes] (default) or [no]. In the former case, # the flag is set to -mtune (or equivalent) so that the architecture is # only used for tuning, but the instruction set used is still portable. In # the latter case, the flag is set to -march (or equivalent) so that # architecture-specific instructions are enabled. # # The user can specify --with-gcc-arch= in order to override the # macro's choice of architecture, or --without-gcc-arch to disable this. # # When cross-compiling, or if $CC is not gcc, then ACTION-FAILURE is # called unless the user specified --with-gcc-arch manually. # # Requires macros: AX_CHECK_COMPILE_FLAG, AX_GCC_X86_CPUID # # (The main emphasis here is on recent CPUs, on the principle that doing # high-performance computing on old hardware is uncommon.) # # Everything below is verbatim from the archive. DO NOT MODIFY IT. # AC_DEFUN([AX_GCC_ARCHFLAG], [AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_SED]) AC_ARG_WITH(gcc-arch, [AS_HELP_STRING([--with-gcc-arch=], [use architecture for gcc -march/-mtune, instead of guessing])], ax_gcc_arch=$withval, ax_gcc_arch=yes) AC_MSG_CHECKING([for gcc architecture flag]) AC_MSG_RESULT([]) AC_CACHE_VAL(ax_cv_gcc_archflag, [ ax_cv_gcc_archflag="unknown" if test "$GCC" = yes; then if test "x$ax_gcc_arch" = xyes; then ax_gcc_arch="" if test "$cross_compiling" = no; then case $host_cpu in i[[3456]]86*|x86_64*|amd64*) # use cpuid codes AX_GCC_X86_CPUID(0) AX_GCC_X86_CPUID(1) case $ax_cv_gcc_x86_cpuid_0 in *:756e6547:*:*) # Intel case $ax_cv_gcc_x86_cpuid_1 in *5[[48]]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; *5??:*:*:*) ax_gcc_arch=pentium ;; *1?6[[7d]]?:*:*:*) ax_gcc_arch="penryn core2 pentium-m pentium3 pentiumpro" ;; *1?6[[aef]]?:*:*:*|*2?6[[5cef]]?:*:*:*) ax_gcc_arch="corei7 core2 pentium-m pentium3 pentiumpro" ;; *1?6c?:*:*:*|*[[23]]?66?:*:*:*) ax_gcc_arch="atom core2 pentium-m pentium3 pentiumpro" ;; *2?6[[ad]]?:*:*:*) ax_gcc_arch="corei7-avx corei7 core2 pentium-m pentium3 pentiumpro" ;; *[[1-9a-f]]?6??:*:*:*) ax_gcc_arch="core2 pentiumpro" ;; *6[[3456]]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; *6a?:*[[01]]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; *6a?:*[[234]]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; *6[[9de]]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; *6[[78b]]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; *6f?:*:*:*) ax_gcc_arch="core2 pentium-m pentium3 pentiumpro" ;; *6??:*:*:*) ax_gcc_arch=pentiumpro ;; *f3[[347]]:*:*:*|*f4[1347]:*:*:*|*f6?:*:*:*) case $host_cpu in x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; esac ;; *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; esac ;; *:68747541:*:*) # AMD case $ax_cv_gcc_x86_cpuid_1 in *5[[67]]?:*:*:*) ax_gcc_arch=k6 ;; *5[[8d]]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; *5[[9]]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; *60?:*:*:*) ax_gcc_arch=k7 ;; *6[[12]]?:*:*:*) ax_gcc_arch="athlon k7" ;; *6[[34]]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; *6[[68a]]?:*:*:*) AX_GCC_X86_CPUID(0x80000006) # L2 cache size case $ax_cv_gcc_x86_cpuid_0x80000006 in *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256 ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; *) ax_gcc_arch="athlon-4 athlon k7" ;; esac ;; *5??f??:*:*:*) ax_gcc_arch="btver1 amdfam10 k8" ;; *6??f??:*:*:*) ax_gcc_arch="bdver1 amdfam10 k8" ;; *[[1-9a-f]]??f??:*:*:*) ax_gcc_arch="amdfam10 k8" ;; *f[[4cef8b]]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; *f5?:*:*:*) ax_gcc_arch="opteron k8" ;; *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; *f??:*:*:*) ax_gcc_arch="k8" ;; esac ;; *:746e6543:*:*) # IDT case $ax_cv_gcc_x86_cpuid_1 in *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; *58?:*:*:*) ax_gcc_arch=winchip2 ;; *6[[78]]?:*:*:*) ax_gcc_arch=c3 ;; *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; esac ;; esac if test x"$ax_gcc_arch" = x; then # fallback case $host_cpu in i586*) ax_gcc_arch=pentium ;; i686*) ax_gcc_arch=pentiumpro ;; esac fi ;; sparc*) AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag], [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/]) cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` cputype=`echo "$cputype" | tr -d ' -' | $SED 's/SPARCIIi/SPARCII/' |tr $as_cr_LETTERS $as_cr_letters` case $cputype in *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; *supersparc*|*tms390z5[[05]]*) ax_gcc_arch="supersparc v8" ;; *hypersparc*|*rt62[[056]]*) ax_gcc_arch="hypersparc v8" ;; *cypress*) ax_gcc_arch=cypress ;; esac ;; alphaev5) ax_gcc_arch=ev5 ;; alphaev56) ax_gcc_arch=ev56 ;; alphapca56) ax_gcc_arch="pca56 ev56" ;; alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; alphaev6) ax_gcc_arch=ev6 ;; alphaev67) ax_gcc_arch=ev67 ;; alphaev68) ax_gcc_arch="ev68 ev67" ;; alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; powerpc*) cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | $SED 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` cputype=`echo $cputype | $SED -e 's/ppc//g;s/ *//g'` case $cputype in *750*) ax_gcc_arch="750 G3" ;; *740[[0-9]]*) ax_gcc_arch="$cputype 7400 G4" ;; *74[[4-5]][[0-9]]*) ax_gcc_arch="$cputype 7450 G4" ;; *74[[0-9]][[0-9]]*) ax_gcc_arch="$cputype G4" ;; *970*) ax_gcc_arch="970 G5 power4";; *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; 603ev|8240) ax_gcc_arch="$cputype 603e 603";; *) ax_gcc_arch=$cputype ;; esac ax_gcc_arch="$ax_gcc_arch powerpc" ;; esac fi # not cross-compiling fi # guess arch if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then for arch in $ax_gcc_arch; do if test "x[]m4_default([$1],yes)" = xyes; then # if we require portable code flags="-mtune=$arch" # -mcpu=$arch and m$arch generate nonportable code on every arch except # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac else flags="-march=$arch -mcpu=$arch -m$arch" fi for flag in $flags; do AX_CHECK_COMPILE_FLAG($flag, [ax_cv_gcc_archflag=$flag; break]) done test "x$ax_cv_gcc_archflag" = xunknown || break done fi fi # $GCC=yes ]) AC_MSG_CHECKING([for gcc architecture flag]) AC_MSG_RESULT($ax_cv_gcc_archflag) if test "x$ax_cv_gcc_archflag" = xunknown; then m4_default([$3],:) else m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_gcc_archflag"]) fi ]) # # AX_GCC_ARCHFLAG macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_CC_MAXOPT # Usage: AX_CC_MAXOPT # Authors: Copyright (C) 2007 Steven G. Johnson # Copyright (C) 2007 Matteo Frigo # Version: 2007-07-29 # Source: http://autoconf-archive.cryp.to/ax_cc_maxopt.html # # Try to turn on "good" C optimization flags for various compilers and # architectures, for some definition of "good". # # The user can override the flags by setting the CFLAGS environment # variable. The user can also specify --enable-portable-binary in # order to disable any optimization flags that might result in a # binary that only runs on the host architecture. # # Note also that the flags assume that ANSI C aliasing rules are # followed by the code (e.g. for gcc's -fstrict-aliasing), and that # floating-point computations can be re-ordered as needed. # # SRE: I've made modifications as follows. # - HMMER relies on IEEE754-compliant math. Don't enable # any options that break compliance; for example, gcc -ffast-math # - similarly, for IBM xlc, add -qstrict. # AC_DEFUN([AX_CC_MAXOPT], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AX_COMPILER_VENDOR]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_ARG_ENABLE(portable-binary, [AC_HELP_STRING([--enable-portable-binary], [disable compiler optimizations that would produce unportable binaries])], acx_maxopt_portable=$withval, acx_maxopt_portable=no) # Try to determine "good" native compiler flags if none specified via CFLAGS if test "$ac_test_CFLAGS" != "set"; then CFLAGS="" case $ax_cv_c_compiler_vendor in dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -tune host" # CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" if test "x$acx_maxopt_portable" = xno; then CFLAGS="$CFLAGS -arch host" fi;; sun) CFLAGS="-native -xO5 -dalign" # CFLAGS="-native -fast -xO5 -dalign" if test "x$acx_maxopt_portable" = xyes; then CFLAGS="$CFLAGS -xarch=generic" fi;; hp) CFLAGS="+Oall +Optrs_ansi +DSnative" if test "x$acx_maxopt_portable" = xyes; then CFLAGS="$CFLAGS +DAportable" fi;; ibm) xlc_opt="-qtune=auto -qstrict" if test "x$acx_maxopt_portable" = xno; then if test "x$XLC_ARCH" = xno; then xlc_opt="-qarch=auto $xlc_opt" else xlc_opt="-qarch=$XLC_ARCH $xlc_opt" fi fi AX_CHECK_COMPILER_FLAGS($xlc_opt, CFLAGS="-O3 -qansialias -w $xlc_opt", [CFLAGS="-O3 -qansialias -w" echo "******************************************************" echo "* You seem to have the IBM C compiler. It is *" echo "* recommended for best performance that you use: *" echo "* *" echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" echo "* ^^^ ^^^ *" echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" echo "* CPU you have. (Set the CFLAGS environment var. *" echo "* and re-run configure.) For more info, man cc. *" echo "******************************************************"]) ;; intel) CFLAGS="-O3 -ansi_alias" if test "x$acx_maxopt_portable" = xno; then icc_archflag=unknown icc_flags="" case $host_cpu in i686*|x86_64*) # icc accepts gcc assembly syntax, so these should work: AX_GCC_X86_CPUID(0) AX_GCC_X86_CPUID(1) case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG *:756e6547:*:*) # Intel case $ax_cv_gcc_x86_cpuid_1 in *6a?:*[[234]]:*:*|*6[[789b]]?:*:*:*) icc_flags="-xK";; *f3[[347]]:*:*:*|*f4[1347]:*:*:*) icc_flags="-xP -xN -xW -xK";; *f??:*:*:*) icc_flags="-xN -xW -xK";; esac ;; esac ;; esac if test "x$icc_flags" != x; then for flag in $icc_flags; do AX_CHECK_COMPILER_FLAGS($flag, [icc_archflag=$flag; break]) done fi AC_MSG_CHECKING([for icc architecture flag]) AC_MSG_RESULT($icc_archflag) if test "x$icc_archflag" != xunknown; then CFLAGS="$CFLAGS $icc_archflag" fi fi ;; gnu) # default optimization flags for gcc on all systems CFLAGS="-O3 -fomit-frame-pointer" # -malign-double for x86 systems # SRE: no, that's a bad idea; # on 32bit Ubuntu Linux systems, for example, this # causes an odd and buggy interaction with _FILE_OFFSET_BITS (LFS) # and fstat(). # AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double") # -fstrict-aliasing for gcc-2.95+ AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing, CFLAGS="$CFLAGS -fstrict-aliasing") # note that we enable "unsafe" fp optimization with other compilers, too # SRE: no, that's a bad idea, don't use this # AX_CHECK_COMPILER_FLAGS(-ffast-math, CFLAGS="$CFLAGS -ffast-math") AX_GCC_ARCHFLAG($acx_maxopt_portable) ;; esac if test -z "$CFLAGS"; then echo "" echo "********************************************************" echo "* WARNING: Don't know the best CFLAGS for this system *" echo "* Use ./configure CFLAGS=... to specify your own flags *" echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" echo "********************************************************" echo "" CFLAGS="-O3" fi AX_CHECK_COMPILER_FLAGS($CFLAGS, [], [ echo "" echo "********************************************************" echo "* WARNING: The guessed CFLAGS don't seem to work with *" echo "* your compiler. *" echo "* Use ./configure CFLAGS=... to specify your own flags *" echo "********************************************************" echo "" CFLAGS="" ]) fi ]) # # AX_CC_MAXOPT macro end. # **************************************************************** # **************************************************************** ################################################################ # Macro: ESL_PIC_FLAGS # Usage: ESL_PIC_FLAGS # Author: Dan Nicholson, Mesa3D project # References: http://www.mesa3d.org/ # http://www.mail-archive.com/mesa3d-dev@lists.sourceforge.net/msg04938.html # # Derived (essentially verbatim) from MESA_PIC_FLAGS, in the Mesa # project's acinclude.m4 file. From the Mesa file's header: # "Find out whether to build PIC code using the option --enable-pic and # the configure enable_static/enable_shared settings. If PIC is needed, # figure out the necessary flags for the platform and compiler. # # The platform checks have been shamelessly taken from libtool and # stripped down to just what's needed for Mesa. See _LT_COMPILER_PIC in # /usr/share/aclocal/libtool.m4 or # http://git.savannah.gnu.org/gitweb/?p=libtool.git;a=blob;f=libltdl/m4/libtool.m4;hb=HEAD # # Sets an output variable @PIC_FLAGS@ which should be added to # CFLAGS lines. # AC_DEFUN([ESL_PIC_FLAGS], [AC_REQUIRE([AC_PROG_CC])dnl AC_ARG_VAR([PIC_FLAGS], [compiler flags for PIC code]) AC_ARG_ENABLE([pic], [AS_HELP_STRING([--disable-pic], [compile PIC objects @<:@default=enabled for shared builds on supported platforms@:>@])], [enable_pic="$enableval" test "x$enable_pic" = x && enable_pic=auto], [enable_pic=auto]) # disable PIC by default for static builds if test "$enable_pic" = auto && test "$enable_static" = yes; then enable_pic=no fi # if PIC hasn't been explicitly disabled, try to figure out the flags if test "$enable_pic" != no; then AC_MSG_CHECKING([for $CC option to produce PIC]) # allow the user's flags to override if test "x$PIC_FLAGS" = x; then # see if we're using GCC if test "x$GCC" = xyes; then case "$host_os" in aix*|beos*|cygwin*|irix5*|irix6*|osf3*|osf4*|osf5*) # PIC is the default for these OSes. ;; mingw*|os2*|pw32*) # This hack is so that the source file can tell whether # it is being built for inclusion in a dll (and should # export symbols for example). PIC_FLAGS="-DDLL_EXPORT" ;; darwin*|rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files PIC_FLAGS="-fno-common" ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, # but not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) PIC_FLAGS="-fPIC" ;; esac ;; *) # Everyone else on GCC uses -fPIC PIC_FLAGS="-fPIC" ;; esac else # !GCC case "$host_os" in hpux9*|hpux10*|hpux11*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, # but not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) PIC_FLAGS="+Z" ;; esac ;; linux*|k*bsd*-gnu) case `basename "$CC"` in icc*|ecc*|ifort*) PIC_FLAGS="-KPIC" ;; pgcc*|pgf77*|pgf90*|pgf95*) # Portland Group compilers (*not* the Pentium gcc # compiler, which looks to be a dead project) PIC_FLAGS="-fpic" ;; ccc*) # All Alpha code is PIC. ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC PIC_FLAGS="-qpic" ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*|*Sun\ F*) # Sun C 5.9 or Sun Fortran PIC_FLAGS="-KPIC" ;; esac esac ;; solaris*) PIC_FLAGS="-KPIC" ;; sunos4*) PIC_FLAGS="-PIC" ;; esac fi # GCC fi # PIC_FLAGS AC_MSG_RESULT([$PIC_FLAGS]) fi AC_SUBST([PIC_FLAGS]) ]) # # ESL_PIC_FLAGS macro end. # **************************************************************** # **************************************************************** hmmer-3.1b2/src/0000775361611702660230000000000012473613161013056 5ustar wheelerteddyhmmer-3.1b2/src/hmmerfm-exactmatch.c0000664361611702660230000004141012473612613016775 0ustar wheelerteddy#include "p7_config.h" #include #include #include "easel.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, { "--out", eslARG_STRING, "none", NULL, NULL, NULL, NULL, NULL, "save list of hits to file ('-' writes to stdout)", 2 }, { "--count_only", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "compute just counts, not locations", 2 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[options] "; static char banner[] = "Find all instances of each sequence in the database represented by "; static int process_commandline(int argc, char **argv, ESL_GETOPTS **ret_go, char **ret_fmfile, char **ret_qfile) { ESL_GETOPTS *go = esl_getopts_Create(options); int status; if (esl_opt_ProcessEnvironment(go) != eslOK) { if (printf("Failed to process environment: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_VerifyConfig(go) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* help format: */ if (esl_opt_GetBoolean(go, "-h") == TRUE) { esl_banner(stdout, argv[0], banner); esl_usage(stdout, argv[0], usage); if (puts("\nBasic options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 120=textwidth*/ if (puts("\nSpecial options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); /* 2= group; 2 = indentation; 120=textwidth*/ exit(0); } if (esl_opt_ArgNumber(go) != 2) { if (puts("Incorrect number of command line arguments.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_qfile = esl_opt_GetArg(go, 1)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_fmfile = esl_opt_GetArg(go, 2)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* Validate any attempted use of stdin streams */ if (esl_strcmp(*ret_fmfile, "-") == 0 && esl_strcmp(*ret_qfile, "-") == 0) { if (puts("Either or may be '-' (to read from stdin), but not both.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } *ret_go = go; return eslOK; FAILURE: /* all errors handled here are user errors, so be polite. */ esl_usage(stdout, argv[0], usage); puts("\nwhere basic options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 80=textwidth*/ printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); esl_getopts_Destroy(go); exit(1); ERROR: if (go) esl_getopts_Destroy(go); exit(status); } //see: http://c-faq.com/stdio/commaprint.html char * commaprint(unsigned long n) { static int comma = ','; static char retbuf[30]; char *p = &retbuf[sizeof(retbuf)-1]; int i = 0; *p = '\0'; do { if(i%3 == 0 && i != 0) *--p = comma; *--p = '0' + n % 10; n /= 10; i++; } while(n != 0); return p; } static int output_header(FM_METADATA *meta, FILE *ofp, const ESL_GETOPTS *go, char *fmfile, char *qfile) { char *alph; char *appname = NULL; int status; if (meta->alph_type == fm_DNA) alph = "dna"; else if (meta->alph_type == fm_AMINO) alph = "amino"; if ((status = esl_FileTail(go->argv[0], FALSE, &appname)) != eslOK) return status; if (fprintf(ofp, "# %s :: %s\n", appname, banner) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# %s\n", EASEL_COPYRIGHT) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# %s\n", EASEL_LICENSE) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# input binary-formatted HMMER database: %s\n", fmfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# input file of query sequences: %s\n", qfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--out")) { char *outfile = esl_opt_GetString(go, "--out"); if (fprintf(ofp, "# output file containing list of hits: %s\n", (esl_strcmp(outfile, "-") == 0 ? "stdout" : outfile)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (esl_opt_IsUsed(go, "--count_only") && fprintf(ofp, "# output only counts, not hit locations\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# alphabet : %s\n", alph) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# bin_length : %d\n", meta->freq_cnt_b) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# suffix array sample rate: %d\n", meta->freq_SA) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (appname) free(appname); return eslOK; ERROR: if (appname) free(appname); return status; } /* Function: getFMHits() * Synopsis: For a given interval, identify the position in original text for each element * of interval * Purpose: Implement Algorithm 3.7 (p17) of Firth paper (A Comparison of BWT Approaches * to String Pattern Matching). Most of the meat is in the method of counting * characters - bwt_getOccCount, which depends on compilation choices. */ int getFMHits( FM_DATA *fm, FM_CFG *cfg, FM_INTERVAL *interval, int block_id, int hit_offset, int hit_length, FM_HIT *hits_ptr, int fm_direction) { int i, j, len = 0; int dist_from_end; for (i = interval->lower; i<= interval->upper; i++) { j = i; len = 0; while ( j != fm->term_loc && (j % cfg->meta->freq_SA)) { //go until we hit a position in the full SA that was sampled during FM index construction uint8_t c = fm_getChar( cfg->meta->alph_type, j, fm->BWT); j = fm_getOccCount (fm, cfg, j-1, c); j += abs(fm->C[c]); len++; } hits_ptr[hit_offset + i - interval->lower].block = block_id; hits_ptr[hit_offset + i - interval->lower].direction = fm_direction; hits_ptr[hit_offset + i - interval->lower].length = hit_length; dist_from_end = 1 + len + (j==fm->term_loc ? 0 : fm->SA[ j / cfg->meta->freq_SA ]) ; // len is how many backward steps we had to take to find a sampled SA position if (fm_direction == fm_forward) dist_from_end += hit_length; else dist_from_end += 1; //the SA is on the reversed string. What would be the position in the unreversed string? hits_ptr[hit_offset + i - interval->lower].start = fm->N - dist_from_end; //printf ("SA: %d\n", hits_ptr[hit_offset + i - interval->lower].start); } return eslOK; } /* hit_sorter(): qsort's pawn, below */ static int hit_sorter(const void *a, const void *b) { FM_HIT *h1 = (FM_HIT*)a; FM_HIT *h2 = (FM_HIT*)b; if (h1->sortkey > h2->sortkey) return 1; else if (h1->sortkey < h2->sortkey) return -1; else { if (h1->direction > h2->direction) return 1; else if (h1->direction < h2->direction) return -1; else { if (h1->start > h2->start) return 1; else return -1; } } } /* Function: main() * Synopsis: Run set of queries against an FM * Purpose: Read in a FM and a file of query sequences. * For each query, find matching FM interval, then collect positions in * the original text T for the corresponding occurrences. These positions * are 0-based (so first character is position 0). */ int main(int argc, char *argv[]) { void* tmp; // used for RALLOC calls clock_t t1, t2; struct tms ts1, ts2; char *fname_fm = NULL; char *fname_queries = NULL; FM_HIT *hits = NULL; char *line = NULL; int status = eslOK; int hit_cnt = 0; int hit_indiv_cnt = 0; int miss_cnt = 0; int hit_num = 0; int hit_num2 = 0; int hits_size = 0; int i,j; int count_only = 0; FM_INTERVAL interval; FM_DATA *fmsf = NULL; FM_DATA *fmsb = NULL; FILE* fp_fm = NULL; FILE* fp = NULL; FILE* out = NULL; char *outname = NULL; ESL_GETOPTS *go = NULL; /* command line processing */ FM_CFG *cfg; FM_METADATA *meta; ESL_SQ *tmpseq; // used for sequence validation ESL_ALPHABET *abc = NULL; //start timer t1 = times(&ts1); process_commandline(argc, argv, &go, &fname_fm, &fname_queries); if (esl_opt_IsOn(go, "--out")) { outname = esl_opt_GetString(go, "--out"); if ( esl_strcmp ("-", outname) == 0 ) { out = stdout; outname = "stdout"; } else { out = fopen(outname,"w"); } } if (esl_opt_IsOn(go, "--count_only")) count_only = 1; if((fp_fm = fopen(fname_fm, "rb")) == NULL) esl_fatal("Cannot open file `%s': ", fname_fm); fm_configAlloc(&cfg); cfg->occCallCnt = 0; meta = cfg->meta; meta->fp = fp_fm; fm_readFMmeta( meta); if (meta->alph_type == fm_DNA) abc = esl_alphabet_Create(eslDNA); else if (meta->alph_type == fm_AMINO) abc = esl_alphabet_Create(eslAMINO); tmpseq = esl_sq_CreateDigital(abc); //read in FM-index blocks ESL_ALLOC(fmsf, meta->block_count * sizeof(FM_DATA) ); if (!meta->fwd_only) ESL_ALLOC(fmsb, meta->block_count * sizeof(FM_DATA) ); for (i=0; iblock_count; i++) { fm_FM_read( fmsf+i,meta, TRUE ); if (!meta->fwd_only) { fm_FM_read(fmsb+i, meta, FALSE ); fmsb[i].SA = fmsf[i].SA; fmsb[i].T = fmsf[i].T; } } fclose(fp_fm); output_header(meta, stdout, go, fname_fm, fname_queries); /* initialize a few global variables, then call initGlobals * to do architecture-specific initialization */ fm_configInit(cfg, NULL); fm_alphabetCreate(meta, NULL); // don't override charBits fp = fopen(fname_queries,"r"); if (fp == NULL) esl_fatal("Unable to open file %s\n", fname_queries); ESL_ALLOC(line, FM_MAX_LINE * sizeof(char)); hits_size = 200; ESL_ALLOC(hits, hits_size * sizeof(FM_HIT)); while(fgets(line, FM_MAX_LINE, fp) ) { int qlen=0; while (line[qlen] != '\0' && line[qlen] != '\n') qlen++; if (line[qlen] == '\n') line[qlen] = '\0'; hit_num = 0; for (i=0; iblock_count; i++) { fm_getSARangeReverse(fmsf+i, cfg, line, meta->inv_alph, &interval); if (interval.lower>=0 && interval.lower <= interval.upper) { int new_hit_num = interval.upper - interval.lower + 1; hit_num += new_hit_num; if (!count_only) { if (hit_num > hits_size) { hits_size = 2*hit_num; ESL_RALLOC(hits, tmp, hits_size * sizeof(FM_HIT)); } getFMHits(fmsf+i, cfg, &interval, i, hit_num-new_hit_num, qlen, hits, fm_forward); } } /* find reverse hits, using backward search on the forward FM*/ if (!meta->fwd_only) { fm_getSARangeForward(fmsb+i, cfg, line, meta->inv_alph, &interval);// yes, use the backward fm to produce the equivalent of a forward search on the forward fm if (interval.lower>=0 && interval.lower <= interval.upper) { int new_hit_num = interval.upper - interval.lower + 1; hit_num += new_hit_num; if (!count_only) { if (hit_num > hits_size) { hits_size = 2*hit_num; ESL_RALLOC(hits, tmp, hits_size * sizeof(FM_HIT)); } //even though I used fmsb above, use fmsf here, since we'll now do a backward trace //in the FM-index to find the next sampled SA position getFMHits(fmsf+i, cfg, &interval, i, hit_num-new_hit_num, qlen, hits, fm_backward); } } } } if (hit_num > 0) { if (count_only) { hit_cnt++; hit_indiv_cnt += hit_num; } else { hit_num2 = 0; //for each hit, identify the sequence id and position within that sequence for (i = 0; i< hit_num; i++) { status = fm_getOriginalPosition (fmsf, meta, hits[i].block, hits[i].length, fm_forward, hits[i].start, &(hits[i].block), &(hits[i].start) ); hits[i].sortkey = (status==eslERANGE ? -1 : meta->seq_data[ hits[i].block ].target_id); //validate match - if any characters in orig sequence were ambiguities, reject fm_convertRange2DSQ( fmsf, meta, hits[i].start, hits[i].length, p7_NOCOMPLEMENT, tmpseq, TRUE ); for (j=1; j<=hits[i].length; j++) { if (tmpseq->dsq[j] >= abc->K) { hits[i].sortkey = -1; //reject j = hits[i].length+1; //quit looking } } if (hits[i].sortkey != -1) hit_num2++; // legitimate hit } if (hit_num2 > 0) hit_cnt++; //now sort according the the sequence_id corresponding to that seq_offset qsort(hits, hit_num, sizeof(FM_HIT), hit_sorter); //skim past the skipped entries i = 0; while ( i < hit_num ) { if (hits[i].sortkey != -1 ) break; // i++; } if (i < hit_num) { if (out != NULL) { fprintf (out, "%s\n",line); //fprintf (out, "\t%10s (%8d %s)\n",meta->seq_data[ hits[i].block ].name, hits[i].start, (hits[i].direction==fm_forward?"+":"-")); fprintf (out, " %8ld %s %10s\n", (long)(hits[i].start), (hits[i].direction==fm_forward?"f":"r"), meta->seq_data[ hits[i].block ].name); } hit_indiv_cnt++; i++; // skip the first one, since I'll be comparing each to the previous for ( ; i< hit_num; i++) { if ( //meta->seq_data[ hits[i].block ].id != meta->seq_data[ hits[i-1].block ].id || hits[i].sortkey != hits[i-1].sortkey || //sortkey is seq_data[].id hits[i].direction != hits[i-1].direction || hits[i].start != hits[i-1].start ) { if (out != NULL) //fprintf (out, "\t%10s (%8d %s)\n",meta->seq_data[ hits[i].block ].name, hits[i].start, (hits[i].direction==fm_forward?"+":"-")); fprintf (out, " %8ld %s %10s\n", (long)(hits[i].start), (hits[i].direction==fm_forward?"f":"r"), meta->seq_data[ hits[i].block ].name); hit_indiv_cnt++; } } if (out != NULL) fprintf (out, "\n"); } } } else { miss_cnt++; } } for (i=0; iblock_count; i++) { fm_FM_destroy( fmsf+i, 1 ); if (!meta->fwd_only) fm_FM_destroy( fmsb+i, 0 ); } free (hits); free (line); fclose(fp); fm_configDestroy(cfg); // compute and print the elapsed time in millisec t2 = times(&ts2); { double clk_ticks = sysconf(_SC_CLK_TCK); double elapsedTime = (t2-t1)/clk_ticks; double throughput = cfg->occCallCnt/elapsedTime; fprintf (stderr, "hit: %-10d (%d)\n", hit_cnt, hit_indiv_cnt); fprintf (stderr, "miss:%-10d\n", miss_cnt); fprintf (stderr, "run time: %.2f seconds\n", elapsedTime); fprintf (stderr, "occ calls: %12s\n", commaprint(cfg->occCallCnt)); fprintf (stderr, "occ/sec: %12s\n", commaprint(throughput)); } exit(eslOK); ERROR: printf ("failure allocating memory for hits\n"); exit(status); } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/p7_hmmwindow.c0000664361611702660230000000610112473612614015641 0ustar wheelerteddy/* The Plan7 MSVDATA data structure, which holds a compact representation * of substitution scores and maximal extensions, used by nhmmer. * * Contents: * 1. The P7_MSVDATA object: allocation, initialization, destruction. * 2. Unit tests. * 3. Test driver. * 4. Copyright and license. * */ #include "p7_config.h" #include "hmmer.h" /********************************************************************* *# 1. The P7_MSVDATA object: allocation, initialization, destruction. *********************************************************************/ /* Function: p7_hmmwindow_init() * * Synopsis: initialize the object used to store a list of sequence windows * * Returns: eslEMEM in event of allocation failure, otherwise eslOK */ int p7_hmmwindow_init (P7_HMM_WINDOWLIST *list) { int status; list->size = 10000; list->count = 0; ESL_ALLOC(list->windows, list->size * sizeof(P7_HMM_WINDOW)); return eslOK; ERROR: return eslEMEM; } /* Function: p7_hmmwindow_new() * * Synopsis: Return a pointer to the next window element on the list * * Purpose: Accepts , , , , , , * and , assigns those to the next window * element, then returns it, increasing the size of the * list, if necessary. * * Returns: NULL in event of allocation failure, otherwise pointer to * the next seed diagonal */ P7_HMM_WINDOW * p7_hmmwindow_new (P7_HMM_WINDOWLIST *list, uint32_t id, uint32_t pos, uint32_t fm_pos, uint16_t k, uint32_t length, float score, uint8_t complementarity, uint32_t target_len) { int status; P7_HMM_WINDOW *window; if (list->count == list->size) { list->size *= 4; ESL_REALLOC(list->windows, list->size * sizeof(P7_HMM_WINDOW)); } window = list->windows + list->count; window->id = id; window->n = pos; window->fm_n = fm_pos; window->k = k; window->length = length; window->score = score; window->complementarity = complementarity; window->target_len = target_len; list->count++; return window; ERROR: return NULL; } /***************************************************************** * 2. Unit tests *****************************************************************/ /***************************************************************** * 3. Test driver *****************************************************************/ /************************************************************ * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: p7_hmmwindow.c 3784 2011-12-07 21:51:25Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/trunk/src/p7_hmmwindow.c $ ************************************************************/ hmmer-3.1b2/src/evalues.c0000664361611702660230000007023512473612612014675 0ustar wheelerteddy/* Calculations and simulations relevant to E-value calculations. * * Contents: * 1. p7_Calibrate(): model calibration wrapper * 2. Determination of individual E-value parameters * 3. Statistics and specific experiment drivers * 4. Benchmark driver * 5. Copyright and license information * * SRE, Mon Aug 6 13:00:06 2007 * SVN $Id: evalues.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include "easel.h" #include "esl_gumbel.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_vectorops.h" #include "hmmer.h" /***************************************************************** * 1. p7_Calibrate(): model calibration wrapper *****************************************************************/ /* Function: p7_Calibrate() * Synopsis: Calibrate the E-value parameters of a model. * Incept: SRE, Thu Dec 25 09:29:31 2008 [Magallon] * * Purpose: Calibrate the E-value parameters of a model with * one calculation ($\lambda$) and two brief simulations * (Viterbi $\mu$, Forward $\tau$). * * Args: hmm - HMM to be calibrated * cfg_b - OPTCFG: ptr to optional build configuration; * if , use default parameters. * byp_rng - BYPASS optimization: pass ptr to generator * if already known; * <*byp_rng> == NULL> if return is desired; * pass to use and discard internal default. * byp_bg - BYPASS optimization: pass ptr to if already known; * <*byp_bg == NULL> if return is desired; * pass to use and discard internal default. * byp_gm - BYPASS optimization: pass ptr to profile if already known; * pass <*byp_gm == NULL> if return desired; * pass to use and discard internal default. * byp_om - BYPASS optimization: pass ptr to profile if already known; * pass <*byp_om == NULL> if return desired; * pass to use and discard internal default. * * Returns: on success. * * Throws: on allocation failure. * if , , aren't compatible somehow. * * Xref: J4/41 */ int p7_Calibrate(P7_HMM *hmm, P7_BUILDER *cfg_b, ESL_RANDOMNESS **byp_rng, P7_BG **byp_bg, P7_PROFILE **byp_gm, P7_OPROFILE **byp_om) { P7_BG *bg = (esl_byp_IsProvided(byp_bg) ? *byp_bg : NULL); P7_PROFILE *gm = (esl_byp_IsProvided(byp_gm) ? *byp_gm : NULL); P7_OPROFILE *om = (esl_byp_IsProvided(byp_om) ? *byp_om : NULL); ESL_RANDOMNESS *r = (esl_byp_IsProvided(byp_rng) ? *byp_rng : NULL); char *errbuf = ((cfg_b != NULL) ? cfg_b->errbuf : NULL); int EmL = ((cfg_b != NULL) ? cfg_b->EmL : 200); int EmN = ((cfg_b != NULL) ? cfg_b->EmN : 200); int EvL = ((cfg_b != NULL) ? cfg_b->EvL : 200); int EvN = ((cfg_b != NULL) ? cfg_b->EvN : 200); int EfL = ((cfg_b != NULL) ? cfg_b->EfL : 100); int EfN = ((cfg_b != NULL) ? cfg_b->EfN : 200); double Eft = ((cfg_b != NULL) ? cfg_b->Eft : 0.04); double lambda, mmu, vmu, tau; int status; /* Configure any objects we need * that weren't already passed to us as a bypass optimization */ if (r == NULL) { if ((r = esl_randomness_CreateFast(42)) == NULL) ESL_XFAIL(eslEMEM, errbuf, "failed to create RNG"); } else if (cfg_b != NULL && cfg_b->do_reseeding) { esl_randomness_Init(r, esl_randomness_GetSeed(r)); } if (bg == NULL) { if ((bg = p7_bg_Create(hmm->abc)) == NULL) ESL_XFAIL(eslEMEM, errbuf, "failed to allocate background"); } /* there's an odd case where the is provided and a isn't going to be returned * where we don't need a at all, and stays after the next block. * Note that the length in the ProfileConfig doesn't matter; the individual * calibration routines MSVMu(), etc. contain their own length reconfig calls. */ if ((esl_byp_IsInternal(byp_gm) && ! esl_byp_IsProvided(byp_om)) || esl_byp_IsReturned(byp_gm)) { if ( (gm = p7_profile_Create(hmm->M, hmm->abc)) == NULL) ESL_XFAIL(eslEMEM, errbuf, "failed to allocate profile"); if ( (status = p7_ProfileConfig(hmm, bg, gm, EvL, p7_LOCAL)) != eslOK) ESL_XFAIL(status, errbuf, "failed to configure profile"); } if (om == NULL) { if ((om = p7_oprofile_Create(hmm->M, hmm->abc)) == NULL) ESL_XFAIL(eslEMEM, errbuf, "failed to create optimized profile"); if ((status = p7_oprofile_Convert(gm, om)) != eslOK) ESL_XFAIL(status, errbuf, "failed to convert to optimized profile"); } /* The calibration steps themselves */ if ((status = p7_Lambda(hmm, bg, &lambda)) != eslOK) ESL_XFAIL(status, errbuf, "failed to determine lambda"); if ((status = p7_MSVMu (r, om, bg, EmL, EmN, lambda, &mmu)) != eslOK) ESL_XFAIL(status, errbuf, "failed to determine msv mu"); if ((status = p7_ViterbiMu(r, om, bg, EvL, EvN, lambda, &vmu)) != eslOK) ESL_XFAIL(status, errbuf, "failed to determine vit mu"); if ((status = p7_Tau (r, om, bg, EfL, EfN, lambda, Eft, &tau)) != eslOK) ESL_XFAIL(status, errbuf, "failed to determine fwd tau"); /* Store results */ hmm->evparam[p7_MLAMBDA] = om->evparam[p7_MLAMBDA] = lambda; hmm->evparam[p7_VLAMBDA] = om->evparam[p7_VLAMBDA] = lambda; hmm->evparam[p7_FLAMBDA] = om->evparam[p7_FLAMBDA] = lambda; hmm->evparam[p7_MMU] = om->evparam[p7_MMU] = mmu; hmm->evparam[p7_VMU] = om->evparam[p7_VMU] = vmu; hmm->evparam[p7_FTAU] = om->evparam[p7_FTAU] = tau; hmm->flags |= p7H_STATS; if (gm != NULL) { gm->evparam[p7_MLAMBDA] = lambda; gm->evparam[p7_VLAMBDA] = lambda; gm->evparam[p7_FLAMBDA] = lambda; gm->evparam[p7_MMU] = mmu; gm->evparam[p7_VMU] = vmu; gm->evparam[p7_FTAU] = tau; } if (byp_rng != NULL) *byp_rng = r; else esl_randomness_Destroy(r); /* bypass convention: no-op if rng was provided.*/ if (byp_bg != NULL) *byp_bg = bg; else p7_bg_Destroy(bg); /* bypass convention: no-op if bg was provided. */ if (byp_gm != NULL) *byp_gm = gm; else p7_profile_Destroy(gm); /* bypass convention: no-op if gm was provided. */ if (byp_om != NULL) *byp_om = om; else p7_oprofile_Destroy(om); /* bypass convention: no-op if om was provided. */ return eslOK; ERROR: if (! esl_byp_IsProvided(byp_rng)) esl_randomness_Destroy(r); if (! esl_byp_IsProvided(byp_bg)) p7_bg_Destroy(bg); if (! esl_byp_IsProvided(byp_gm)) p7_profile_Destroy(gm); if (! esl_byp_IsProvided(byp_om)) p7_oprofile_Destroy(om); return status; } /*---------------------- end, wrapper API -----------------------*/ /***************************************************************** * 2. Determination of individual E-value parameters *****************************************************************/ /* Function: p7_Lambda() * Synopsis: Determines length-corrected local lambda parameter. * Incept: SRE, Wed Aug 8 17:54:55 2007 [Janelia] * * Purpose: Determine the effective scale parameter $\hat{\lambda}$ to * use for model . This will be applied both to * Viterbi Gumbel distributions and Forward exponential * tails. * * The 'true' $\lambda$ is always $\log 2 = 0.693$. The effective * lambda is corrected for edge effect, using the equation * * \[ * \hat{\lambda} = \lambda + \frac{1.44}{MH} * \] * * where $M$ is the model length and $H$ is the model * relative entropy. The model relative entropy is * approximated by the average relative entropy of match * emission distributions. The 1.44 is an empirically * determined fudge factor [J1/125]. This edge-effect * correction is based largely on \citep{Altschul01}, * except for the fudge factor, which we don't understand * and can't theoretically justify. * * Args: hmm : model to calculate corrected lambda for * bg : null model (source of background frequencies) * ret_lambda : RETURN: edge-corrected lambda * * Returns: on success, and <*ret_lambda> is the result. * * Throws: (no abnormal error conditions) */ int p7_Lambda(P7_HMM *hmm, P7_BG *bg, double *ret_lambda) { double H = p7_MeanMatchRelativeEntropy(hmm, bg); *ret_lambda = eslCONST_LOG2 + 1.44 / ((double) hmm->M * H); return eslOK; } /* Function: p7_MSVMu() * Synopsis: Determines the local MSV Gumbel mu parameter for a model. * Incept: SRE, Mon Aug 6 13:00:57 2007 [Janelia] * * Purpose: Given model configured for local alignment (typically * multihit, but may be unihit), determine the Gumbel * location parameter $\mu$ for MSV scores by brief simulation. The * simulation generates random sequences of length * using background frequencies in the null model and * the random number generator ; scores them with * and with the MSV algorithm; and fits the * resulting distribution to a Gumbel of assumed . * * Typical default choices are L=100, N=200, which gives * $\hat{\mu}$ estimates with precision (standard * deviation) of $\pm$ 0.1 bits, corresponding to an error * of $\pm$ 8\% in E-value estimates. [J1/135]. (Default L * was later increased to 200 to improve length dependence * slightly.) * * This function changes the length configuration of both * and . The caller must remember to reconfigure * both of their length models appropriately for any * subsequent alignments. * * Args: r : source of random numbers * om : score profile (length config is changed upon return!) * bg : null model (length config is changed upon return!) * L : length of sequences to simulate * N : number of sequences to simulate * lambda : known Gumbel lambda parameter * ret_mmu : RETURN: ML estimate of location param mu * * Returns: on success, and contains the ML estimate * of $\mu$. * * Throws: (no abnormal error conditions) * * Note: The FitCompleteLoc() function is simple, and it's tempting * to inline it here and save the working memory. However, * the FitCompleteLoc() function is vulnerable * to under/overflow error, and we'll probably fix it * eventually - need to be sure that fix applies here too. */ int p7_MSVMu(ESL_RANDOMNESS *r, P7_OPROFILE *om, P7_BG *bg, int L, int N, double lambda, double *ret_mmu) { P7_OMX *ox = p7_omx_Create(om->M, 0, 0); /* DP matrix: 1 row version */ ESL_DSQ *dsq = NULL; double *xv = NULL; int i; float sc, nullsc; #ifndef p7_IMPL_DUMMY float maxsc = (255 - om->base_b) / om->scale_b; /* if score overflows, use this */ #endif int status; if (ox == NULL) { status = eslEMEM; goto ERROR; } ESL_ALLOC(xv, sizeof(double) * N); ESL_ALLOC(dsq, sizeof(ESL_DSQ) * (L+2)); p7_oprofile_ReconfigLength(om, L); p7_bg_SetLength(bg, L); for (i = 0; i < N; i++) { if ((status = esl_rsq_xfIID(r, bg->f, om->abc->K, L, dsq)) != eslOK) goto ERROR; if ((status = p7_bg_NullOne(bg, dsq, L, &nullsc)) != eslOK) goto ERROR; status = p7_MSVFilter(dsq, L, om, ox, &sc); #ifndef p7_IMPL_DUMMY if (status == eslERANGE) { sc = maxsc; status = eslOK; } #endif if (status != eslOK) goto ERROR; xv[i] = (sc - nullsc) / eslCONST_LOG2; } if ((status = esl_gumbel_FitCompleteLoc(xv, N, lambda, ret_mmu)) != eslOK) goto ERROR; p7_omx_Destroy(ox); free(xv); free(dsq); return eslOK; ERROR: *ret_mmu = 0.0; if (ox != NULL) p7_omx_Destroy(ox); if (xv != NULL) free(xv); if (dsq != NULL) free(dsq); return status; } /* Function: p7_ViterbiMu() * Synopsis: Determines the local Viterbi Gumbel mu parameter for a model. * Incept: SRE, Tue May 19 10:26:19 2009 [Janelia] * * Purpose: Identical to p7_MSVMu(), above, except that it fits * Viterbi scores instead of MSV scores. * * The difference between the two mus is small, but can be * up to ~1 bit or so for large, low-info models [J4/126] so * decided to calibrate the two mus separately [J5/8]. * * Args: r : source of random numbers * om : score profile (length config is changed upon return!) * bg : null model (length config is changed upon return!) * L : length of sequences to simulate * N : number of sequences to simulate * lambda : known Gumbel lambda parameter * ret_vmu : RETURN: ML estimate of location param mu * * Returns: on success, and contains the ML estimate * of $\mu$. * * Throws: (no abnormal error conditions) */ int p7_ViterbiMu(ESL_RANDOMNESS *r, P7_OPROFILE *om, P7_BG *bg, int L, int N, double lambda, double *ret_vmu) { P7_OMX *ox = p7_omx_Create(om->M, 0, 0); /* DP matrix: 1 row version */ ESL_DSQ *dsq = NULL; double *xv = NULL; int i; float sc, nullsc; #ifndef p7_IMPL_DUMMY float maxsc = (32767.0 - om->base_w) / om->scale_w; /* if score overflows, use this [J4/139] */ #endif int status; if (ox == NULL) { status = eslEMEM; goto ERROR; } ESL_ALLOC(xv, sizeof(double) * N); ESL_ALLOC(dsq, sizeof(ESL_DSQ) * (L+2)); p7_oprofile_ReconfigLength(om, L); p7_bg_SetLength(bg, L); for (i = 0; i < N; i++) { if ((status = esl_rsq_xfIID(r, bg->f, om->abc->K, L, dsq)) != eslOK) goto ERROR; if ((status = p7_bg_NullOne(bg, dsq, L, &nullsc)) != eslOK) goto ERROR; status = p7_ViterbiFilter(dsq, L, om, ox, &sc); #ifndef p7_IMPL_DUMMY if (status == eslERANGE) { sc = maxsc; status = eslOK; } #endif if (status != eslOK) goto ERROR; xv[i] = (sc - nullsc) / eslCONST_LOG2; } if ((status = esl_gumbel_FitCompleteLoc(xv, N, lambda, ret_vmu)) != eslOK) goto ERROR; p7_omx_Destroy(ox); free(xv); free(dsq); return eslOK; ERROR: *ret_vmu = 0.0; if (ox != NULL) p7_omx_Destroy(ox); if (xv != NULL) free(xv); if (dsq != NULL) free(dsq); return status; } /* Function: p7_Tau() * Synopsis: Determine Forward tau by brief simulation. * Incept: SRE, Thu Aug 9 15:08:39 2007 [Janelia] * * Purpose: Determine the parameter for an exponential tail fit * to the Forward score distribution for model , on * random sequences with the composition of the background * model . This parameter is for an exponential * distribution anchored from $P=1.0$, so it's not really a * tail per se; but it's only an accurate fit in the tail * of the Forward score distribution, from about $P=0.001$ * or so. * * The determination of is done by a brief simulation * in which we fit a Gumbel distribution to a small number * of Forward scores of random sequences, and use that to * predict the location of the tail at probability . * * The Gumbel is of course inaccurate, but we can use it * here solely as an empirical distribution to determine * the location of a reasonable more accurately on a * smaller number of samples than we could do with raw * order statistics. * * Typical choices are L=100, N=200, tailp=0.04, which * typically yield estimates $\hat{\mu}$ with a precision * (standard deviation) of $\pm$ 0.2 bits, corresponding to * a $\pm$ 15\% error in E-values. See [J1/135]. * * The use of Gumbel fitting to a small number of $N$ * samples and the extrapolation of $\hat{\mu}$ from the * estimated location of the 0.04 tail mass are both * empirical and carefully optimized against several * tradeoffs. Most importantly, around this choice of tail * probability, a systematic error introduced by the use of * the Gumbel fit is being cancelled by systematic error * introduced by the use of a higher tail probability than * the regime in which the exponential tail is a valid * approximation. See [J1/135] for discussion. * * This function changes the length configuration of both * and . The caller must remember to reconfigure * both of their length models appropriately for any * subsequent alignments. * * Args: r : source of randomness * om : configured profile to sample sequences from * bg : null model (for background residue frequencies) * L : mean length model for seq emission from profile * N : number of sequences to generate * lambda : expected slope of the exponential tail (from p7_Lambda()) * tailp : tail mass from which we will extrapolate mu * ret_mu : RETURN: estimate for the Forward mu (base of exponential tail) * * Returns: on success, and <*ret_fv> is the score difference * in bits. * * Throws: on allocation error, and <*ret_fv> is 0. */ int p7_Tau(ESL_RANDOMNESS *r, P7_OPROFILE *om, P7_BG *bg, int L, int N, double lambda, double tailp, double *ret_tau) { P7_OMX *ox = p7_omx_Create(om->M, 0, L); /* DP matrix: for ForwardParser, L rows */ ESL_DSQ *dsq = NULL; double *xv = NULL; float fsc, nullsc; double gmu, glam; int status; int i; ESL_ALLOC(xv, sizeof(double) * N); ESL_ALLOC(dsq, sizeof(ESL_DSQ) * (L+2)); if (ox == NULL) { status = eslEMEM; goto ERROR; } p7_oprofile_ReconfigLength(om, L); p7_bg_SetLength(bg, L); for (i = 0; i < N; i++) { if ((status = esl_rsq_xfIID(r, bg->f, om->abc->K, L, dsq)) != eslOK) goto ERROR; if ((status = p7_ForwardParser(dsq, L, om, ox, &fsc)) != eslOK) goto ERROR; if ((status = p7_bg_NullOne(bg, dsq, L, &nullsc)) != eslOK) goto ERROR; xv[i] = (fsc - nullsc) / eslCONST_LOG2; } if ((status = esl_gumbel_FitComplete(xv, N, &gmu, &glam)) != eslOK) goto ERROR; /* Explanation of the eqn below: first find the x at which the Gumbel tail * mass is predicted to be equal to tailp. Then back up from that x * by log(tailp)/lambda to set the origin of the exponential tail to 1.0 * instead of tailp. */ *ret_tau = esl_gumbel_invcdf(1.0-tailp, gmu, glam) + (log(tailp) / lambda); free(xv); free(dsq); p7_omx_Destroy(ox); return eslOK; ERROR: *ret_tau = 0.; if (xv != NULL) free(xv); if (dsq != NULL) free(dsq); if (ox != NULL) p7_omx_Destroy(ox); return status; } /*-------------- end, determining individual parameters ---------*/ /***************************************************************** * 3. Statistics and specific experiment drivers *****************************************************************/ #ifdef p7EVALUES_STATS /* gcc -o evalues_stats -g -O2 -msse2 -I. -L. -I../easel -L../easel -Dp7EVALUES_STATS evalues.c -lhmmer -leasel -lm * ./evalues_stats */ /* The J1/135 experiment determining precision of mu, tau estimates can be done with this driver by setting Z=1000 or so. * There used to be a separate script, tagged p7EXP_J1_135, to specifically run that experiment. */ #include "p7_config.h" #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_alphabet.h" #include "hmmer.h" #define BMARKS "--msvonly,--vitonly,--fwdonly" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "0", NULL, NULL, NULL, NULL, NULL, "set random number generator seed to ", 0 }, { "--EmL", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "length of sequences for MSV Gumbel mu fit", 0 }, { "--EmN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for MSV Gumbel mu fit", 0 }, { "--EvL", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "length of sequences for Viterbi Gumbel mu fit", 0 }, { "--EvN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for Viterbi Gumbel mu fit", 0 }, { "--EfL", eslARG_INT, "100", NULL,"n>0", NULL, NULL, NULL, "length of sequences for Forward exp tail tau fit",0 }, { "--EfN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for Forward exp tail tau fit",0 }, { "--Eft", eslARG_REAL, "0.04", NULL,"0", 0 }, { "--lambda", eslARG_REAL, NULL, NULL, NULL, NULL, NULL, NULL, "set lambda param to ", 0 }, { "--msvonly", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL,BMARKS, "only run MSV mu calibration (for benchmarking)", 0 }, { "--vitonly", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL,BMARKS, "only run Vit mu calibration (for benchmarking)", 0 }, { "--fwdonly", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL,BMARKS, "only run Fwd tau calibration (for benchmarking)", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "collect test statistics for E-value calculations"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; double lambda = 0.0; double mmu = 0.0; double vmu = 0.0; double ftau = 0.0; int Z = esl_opt_GetInteger(go, "-Z"); int EmL = esl_opt_GetInteger(go, "--EmL"); int EmN = esl_opt_GetInteger(go, "--EmN"); int EvL = esl_opt_GetInteger(go, "--EvL"); int EvN = esl_opt_GetInteger(go, "--EvN"); int EfL = esl_opt_GetInteger(go, "--EfL"); int EfN = esl_opt_GetInteger(go, "--EfN"); int Eft = esl_opt_GetReal (go, "--Eft"); int iteration; int do_msv, do_vit, do_fwd; int status; if (esl_opt_GetBoolean(go, "--msvonly") == TRUE) { do_msv = TRUE; do_vit = FALSE; do_fwd = FALSE; } else if (esl_opt_GetBoolean(go, "--vitonly") == TRUE) { do_msv = FALSE; do_vit = TRUE; do_fwd = FALSE; } else if (esl_opt_GetBoolean(go, "--fwdonly") == TRUE) { do_msv = FALSE; do_vit = FALSE; do_fwd = TRUE; } else { do_msv = TRUE; do_vit = TRUE; do_fwd = TRUE; } if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); while ((status = p7_hmmfile_Read(hfp, &abc, &hmm)) != eslEOF) { if (bg == NULL) bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, EvL, p7_LOCAL); /* the EvL doesn't matter */ om = p7_oprofile_Create(hmm->M, abc); p7_oprofile_Convert(gm, om); if (esl_opt_IsOn(go, "--lambda")) lambda = esl_opt_GetReal(go, "--lambda"); else p7_Lambda(hmm, bg, &lambda); for (iteration = 0; iteration < Z; iteration++) { if (do_msv) p7_MSVMu (r, om, bg, EmL, EmN, lambda, &mmu); if (do_vit) p7_ViterbiMu (r, om, bg, EvL, EvN, lambda, &vmu); if (do_fwd) p7_Tau (r, om, bg, EfL, EfN, lambda, Eft, &ftau); printf("%s %.4f %.4f %.4f %.4f\n", hmm->name, lambda, mmu, vmu, ftau); } p7_hmm_Destroy(hmm); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); } p7_hmmfile_Close(hfp); p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return eslOK; } #endif /*p7EVALUES_STATS*/ /*----------------- end, stats/experiment drivers ---------------*/ /***************************************************************** * 4. Benchmark driver *****************************************************************/ #ifdef p7EVALUES_BENCHMARK /* * gcc -O3 -malign-double -msse2 -o evalues-benchmark -I. -L. -I../easel -L../easel -Dp7EVALUES_BENCHMARK evalues.c -lhmmer -leasel -lm * gcc -g -O -pg -o evalues-benchmark -I. -L. -I../easel -L../easel -Dp7EVALUES_BENCHMARK evalues.c -lhmmer -leasel -lm * gcc -g -Wall -msse2 -o evalues-benchmark -I. -L. -I../easel -L../easel -Dp7EVALUES_BENCHMARK evalues.c -lhmmer -leasel -lm * * ./evalues-benchmark * * -malign-double is needed for gcc if the rest of HMMER was compiled w/ -malign-double * (i.e., our default gcc optimization) * * 27 Dec 08 on wanderoo: 24 msec per RRM_1 calibration; 37 msec for Caudal_act * profiling shows 75% in Forward; 12% esl_random(); <3% in MSVFilter. */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-N", eslARG_INT, "100", NULL, "n>0", NULL, NULL, NULL, "number of calibrations to do", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for E-value calibration"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); int N = esl_opt_GetInteger(go, "-N"); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); esl_stopwatch_Start(w); while (N--) { /* cfg rng bg gm om */ p7_Calibrate(hmm, NULL, NULL, NULL, NULL, NULL); } esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*p7EVALUES_BENCHMARK*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/generic_decoding.c0000664361611702660230000004673312473612612016507 0ustar wheelerteddy/* Posterior decoding algorithms; generic versions. * * Contents: * 1. Posterior decoding algorithms. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. */ #include "p7_config.h" #include #include "easel.h" #include "hmmer.h" /***************************************************************** * 1. Posterior decoding algorithms. *****************************************************************/ /* Function: p7_GDecoding() * Synopsis: Posterior decoding of residue assignments. * * Purpose: Calculates a posterior decoding of the residues in a * target sequence, given profile and filled Forward * and Backward matrices , for the profile * aligned to that target sequence. The resulting posterior * decoding is stored in a DP matrix , provided by the * caller. * * Each residue must have been emitted by match state * <1..M>, insert state <1..M-1>, or an NN, CC, or JJ loop * transition. For dp>, xmx>, * is the probability that match emitted * residue ; is the probability that insert * emitted residue ; ,, * are the probabilities that residue was * emitted on an NN, CC, or JJ transition. The sum over all * these possibilities for a given residue is 1.0. * * Thus the only nonzero entries in a posterior decoding matrix * are , , (residue L * can't be emitted by N), (residue 1 can't be * emitted by C), and (residues 1,L can't be * emitted by J). * * In particular, row i=0 is unused (all zeros) in a pp * matrix; the null2 calculation will take advantage of * this by using the zero row for workspace. * * The caller may pass the Backward matrix as , * in which case will be overwritten with * . However, the caller may \emph{not} overwrite * this way; an <(i-1)> dependency in the calculation of * NN, CC, JJ transitions prevents this. * * Args: gm - profile (must be the same that was used to fill , ). * fwd - filled Forward matrix * bck - filled Backward matrix * pp - RESULT: posterior decoding matrix. * * Returns: on success. * * Throws: (no abnormal error conditions) * * Note: Burns time renormalizing each row. If you don't do this, * probabilities will have an error of +/- 0.001 or so, creeping * in from error in FLogsum()'s table approximation and even * in log() and exp() themselves; including "probabilities" * up to ~1.001. Though this isn't going to break anything * in normal use, it does drive the unit tests wild; the SSE * implementation is more accurate, and unit tests that try * to compare SSE and generic results will see differences, * some sufficient to alter the choice of OA traceback. * */ int p7_GDecoding(const P7_PROFILE *gm, const P7_GMX *fwd, P7_GMX *bck, P7_GMX *pp) { float **dp = pp->dp; float *xmx = pp->xmx; int L = fwd->L; int M = gm->M; int i,k; float overall_sc = fwd->xmx[p7G_NXCELLS*L + p7G_C] + gm->xsc[p7P_C][p7P_MOVE]; float denom; pp->M = M; pp->L = L; XMX(0, p7G_E) = 0.0; XMX(0, p7G_N) = 0.0; XMX(0, p7G_J) = 0.0; XMX(0, p7G_B) = 0.0; XMX(0, p7G_C) = 0.0; for (k = 0; k <= M; k++) MMX(0,k) = IMX(0,k) = DMX(0,k) = 0.0; for (i = 1; i <= L; i++) { denom = 0.0; MMX(i,0) = IMX(i,0) = DMX(i,0) = 0.0; for (k = 1; k < M; k++) { MMX(i,k) = expf(fwd->dp[i][k*p7G_NSCELLS + p7G_M] + bck->dp[i][k*p7G_NSCELLS + p7G_M] - overall_sc); denom += MMX(i,k); IMX(i,k) = expf(fwd->dp[i][k*p7G_NSCELLS + p7G_I] + bck->dp[i][k*p7G_NSCELLS + p7G_I] - overall_sc); denom += IMX(i,k); DMX(i,k) = 0.; } MMX(i,M) = expf(fwd->dp[i][M*p7G_NSCELLS + p7G_M] + bck->dp[i][M*p7G_NSCELLS + p7G_M] - overall_sc); denom += MMX(i,M); IMX(i,M) = 0.; DMX(i,M) = 0.; /* order doesn't matter. note that this whole function is trivially simd parallel */ XMX(i,p7G_E) = 0.; XMX(i,p7G_N) = expf(fwd->xmx[p7G_NXCELLS*(i-1) + p7G_N] + bck->xmx[p7G_NXCELLS*i + p7G_N] + gm->xsc[p7P_N][p7P_LOOP] - overall_sc); XMX(i,p7G_J) = expf(fwd->xmx[p7G_NXCELLS*(i-1) + p7G_J] + bck->xmx[p7G_NXCELLS*i + p7G_J] + gm->xsc[p7P_J][p7P_LOOP] - overall_sc); XMX(i,p7G_B) = 0.; XMX(i,p7G_C) = expf(fwd->xmx[p7G_NXCELLS*(i-1) + p7G_C] + bck->xmx[p7G_NXCELLS*i + p7G_C] + gm->xsc[p7P_C][p7P_LOOP] - overall_sc); denom += XMX(i,p7G_N) + XMX(i,p7G_J) + XMX(i,p7G_C); denom = 1.0 / denom; for (k = 1; k < M; k++) { MMX(i,k) *= denom; IMX(i,k) *= denom; } MMX(i,M) *= denom; XMX(i,p7G_N) *= denom; XMX(i,p7G_J) *= denom; XMX(i,p7G_C) *= denom; } return eslOK; } /* Function: p7_GDomainDecoding() * Synopsis: Posterior decoding of domain location. * * Purpose: The caller has calculated Forward and Backward matrices * and for model aligned to a target * sequence. (The target sequence doesn't need to be * provided, because all we need to know is its length * , and that's available in either of the two DP * matrices.) * * We use this information to calculate the posterior * probabilities that we're in a begin state B, end state * E, or any core model state {M,D,I} at each target * sequence position . * * This information is stored in three arrays in * . This routine expects that this storage has * already been (re)allocated appropriately for a target * seq of length . * * btot[i]> stores the cumulative expectation * $\sum_1^i$ of the number of i's that were emitted (by an * Mk state) immediately after a B : i.e., the expected * number of times domains have started at or before * position i. * * etot[i]> stores the cumulative expectation * $\sum_1^i$ of the number of i's that were emitted (by * an Mk or Dk state) and immediately followed by an end * transition to E : i.e., the expected number of times * domains have ended at or before position i. * * mocc[i]> stores the probability that residue i is * emitted by the core model, as opposed to the flanking * N,C,J states : i.e., the probability that i is in a * domain. * * Upon return, each of these arrays has been made, and * L> has * been set. * * Args: gm - profile * fwd - filled Forward matrix * bck - filled Backward matrix * ddef - container for the results. * * Returns: on success. * * Throws: (no abnormal error conditions) * * Notes: Ideas for future optimization: * * - The calculations only need to access the xmx[CNJBE][i] special * states in the fwd, bck matrices, so we could use * streamlined (checkpointed?) matrices that only maintain * this info over all i. This would be a step in letting * us do domain parses in linear memory. * * - indeed, the , , and arrays could be made * sparse; on long target sequences, we expect long * stretches of negligible posterior probability that * we're in the model or using a begin or end * transition. * * - indeed indeed, we don't really need to store the , , * and arrays at all. We can define regions in a * single pass in O(1) extra memory, straight from the * , matrices, if we have to (xref * J2/101). is * already implemented in a way to make this easy. We're * not doing that for now, partly for clarity in the code, * and partly because I think we'll want to output the * , , and arrays -- this view of the * posterior decoding of the domain structure of a target * sequence will be useful. Also, it's a lot easier to * implement the trigger if * these arrays are available. */ int p7_GDomainDecoding(const P7_PROFILE *gm, const P7_GMX *fwd, const P7_GMX *bck, P7_DOMAINDEF *ddef) { int L = fwd->L; float overall_logp = fwd->xmx[p7G_NXCELLS*L + p7G_C] + gm->xsc[p7P_C][p7P_MOVE]; float njcp; int i; for (i = 1; i <= L; i++) { ddef->btot[i] = ddef->btot[i-1] + exp(fwd->xmx[(i-1)*p7G_NXCELLS+p7G_B] + bck->xmx[(i-1)*p7G_NXCELLS+p7G_B] - overall_logp); ddef->etot[i] = ddef->etot[i-1] + exp(fwd->xmx[i *p7G_NXCELLS+p7G_E] + bck->xmx[i *p7G_NXCELLS+p7G_E] - overall_logp); njcp = expf(fwd->xmx[p7G_NXCELLS*(i-1) + p7G_N] + bck->xmx[p7G_NXCELLS*i + p7G_N] + gm->xsc[p7P_N][p7P_LOOP] - overall_logp); njcp += expf(fwd->xmx[p7G_NXCELLS*(i-1) + p7G_J] + bck->xmx[p7G_NXCELLS*i + p7G_J] + gm->xsc[p7P_J][p7P_LOOP] - overall_logp); njcp += expf(fwd->xmx[p7G_NXCELLS*(i-1) + p7G_C] + bck->xmx[p7G_NXCELLS*i + p7G_C] + gm->xsc[p7P_C][p7P_LOOP] - overall_logp); ddef->mocc[i] = 1. - njcp; } ddef->L = gm->L; return eslOK; } /*------------------ end, decoding algorithms -------------------*/ /***************************************************************** * 2. Benchmark driver *****************************************************************/ #ifdef p7GENERIC_DECODING_BENCHMARK /* icc -O3 -static -o generic_decoding_benchmark -I. -L. -I../easel -L../easel -Dp7GENERIC_DECODING_BENCHMARK generic_decoding.c -lhmmer -leasel -lm ./benchmark-generic-decoding RRM_1 (M=72) Caudal_act (M=136) SMC_N (M=1151) ----------------- ------------------ ------------------- 21 Aug 08 6.62u (21.8 Mc/s) 12.52u (21.7 Mc/s) 106.27u (21.7 Mc/s) */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "5000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for posterior residue decoding, generic version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *fwd = NULL; P7_GMX *bck = NULL; P7_GMX *pp = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float fsc, bsc; double Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); fwd = p7_gmx_Create(gm->M, L); bck = p7_gmx_Create(gm->M, L); pp = p7_gmx_Create(gm->M, L); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_GForward (dsq, L, gm, fwd, &fsc); p7_GBackward(dsq, L, gm, bck, &bsc); esl_stopwatch_Start(w); for (i = 0; i < N; i++) p7_GDecoding(gm, fwd, bck, pp); esl_stopwatch_Stop(w); Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / w->user; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_gmx_Destroy(pp); p7_gmx_Destroy(fwd); p7_gmx_Destroy(bck); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_DECODING_BENCHMARK*/ /*------------------ end, benchmark driver ----------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7GENERIC_DECODING_TESTDRIVE #endif /*p7GENERIC_DECODING_TESTDRIVE*/ /*--------------------- end, unit tests -------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7GENERIC_DECODING_TESTDRIVE #endif /*p7GENERIC_DECODING_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7GENERIC_DECODING_EXAMPLE #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #define STYLES "--fs,--sw,--ls,--s" /* Exclusive choice for alignment mode */ static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "--fs", eslARG_NONE,"default",NULL, NULL, STYLES, NULL, NULL, "multihit local alignment", 0 }, { "--sw", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "unihit local alignment", 0 }, { "--ls", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "multihit glocal alignment", 0 }, { "--s", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "unihit glocal alignment", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of posterior decoding, generic implementation"; static void dump_matrix_csv(FILE *fp, P7_GMX *pp, int istart, int iend, int kstart, int kend); int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *fwd = NULL; P7_GMX *bck = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float fsc, bsc; /* Read in one query profile */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Read in one target sequence */ sq = esl_sq_CreateDigital(abc); if (esl_sqfile_Open(seqfile, format, NULL, &sqfp) != eslOK) p7_Fail("Failed to open sequence file %s", seqfile); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); esl_sqfile_Close(sqfp); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); /* Now reconfig the model however we were asked to */ if (esl_opt_GetBoolean(go, "--fs")) p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); else if (esl_opt_GetBoolean(go, "--sw")) p7_ProfileConfig(hmm, bg, gm, sq->n, p7_UNILOCAL); else if (esl_opt_GetBoolean(go, "--ls")) p7_ProfileConfig(hmm, bg, gm, sq->n, p7_GLOCAL); else if (esl_opt_GetBoolean(go, "--s")) p7_ProfileConfig(hmm, bg, gm, sq->n, p7_UNIGLOCAL); /* Allocate matrices */ fwd = p7_gmx_Create(gm->M, sq->n); bck = p7_gmx_Create(gm->M, sq->n); /* Set the profile and null model's target length models */ p7_bg_SetLength(bg, sq->n); p7_ReconfigLength(gm, sq->n); /* Run Forward, Backward */ p7_GForward (sq->dsq, sq->n, gm, fwd, &fsc); p7_GBackward(sq->dsq, sq->n, gm, bck, &bsc); /* Decoding: becomes the posterior probability mx */ p7_GDecoding(gm, fwd, bck, bck); //p7_gmx_Dump(stdout, bck, p7_DEFAULT); dump_matrix_csv(stdout, bck, 1, sq->n, 1, gm->M); /* Cleanup */ esl_sq_Destroy(sq); p7_profile_Destroy(gm); p7_gmx_Destroy(fwd); p7_gmx_Destroy(bck); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } static void dump_matrix_csv(FILE *fp, P7_GMX *pp, int istart, int iend, int kstart, int kend) { int width = 7; int precision = 5; int i, k; float val; printf("i,"); for (k = kstart; k <= kend; k++) printf("%-d%s", k, k==kend ? "\n" : ","); for (i = istart; i <= iend; i++) { printf("%-d,", i); for (k = kstart; k <= kend; k++) { val = pp->dp[i][k * p7G_NSCELLS + p7G_M] + pp->dp[i][k * p7G_NSCELLS + p7G_I] + pp->dp[i][k * p7G_NSCELLS + p7G_D]; fprintf(fp, "%*.*f%s", width, precision, val, k==kend ? "\n" : ", "); } } } #endif /*p7GENERIC_DECODING_EXAMPLE*/ /*------------------------ example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/generic_decoding.c $ * SVN $Id: generic_decoding.c 3816 2012-01-22 15:23:50Z eddys $ *****************************************************************/ hmmer-3.1b2/src/generic_optacc.c0000664361611702660230000005754312473612613016206 0ustar wheelerteddy/* Optimal accuracy alignment; generic version. * * Contents: * 1. Optimal alignment accuracy fill. * 2. Optimal alignment accuracy traceback. * 3. Benchmark driver * 4. Unit tests * 5. Test driver * 6. Example * 7. Copyright and license information * * SRE, Fri Feb 29 12:48:46 2008 [Janelia] * SVN $Id: generic_optacc.c 3788 2011-12-16 01:53:22Z eddys $ */ #include "p7_config.h" #include #include "easel.h" #include "esl_vectorops.h" #include "hmmer.h" /***************************************************************** * 1. Optimal alignment fill and traceback. *****************************************************************/ #define MMX(i,k) (dp[(i)][(k) * p7G_NSCELLS + p7G_M]) #define IMX(i,k) (dp[(i)][(k) * p7G_NSCELLS + p7G_I]) #define DMX(i,k) (dp[(i)][(k) * p7G_NSCELLS + p7G_D]) #define XMX(i,s) (xmx[(i) * p7G_NXCELLS + (s)]) #define TSCDELTA(s,k) ( (tsc[(k) * p7P_NTRANS + (s)] == -eslINFINITY) ? FLT_MIN : 1.0) /* The TSCDELTA is used to make impossible paths impossible in the * optimal accuracy decoding algorithm; see Kall et al (2005). What we * want to do is multiply by a Kronecker delta that's 1 when the * transition probability is finite, and 0 when it's zero (when the * log prob is -eslINFINITY). But we can't do that easily, when we're * in log space, because 0 * -eslINFINITY = NaN. Instead, we use a * tiny number (FLT_MIN, ~1e-37). * * A side concern is that we don't want to put a bunch of if-else * branches in the code; compilers should be able to generate more * efficient code from the TSCDELTA() construction. */ /* Function: p7_GOptimalAccuracy() * Synopsis: Optimal accuracy decoding: fill. * Incept: SRE, Fri Feb 29 11:56:49 2008 [Janelia] * * Purpose: Calculates the fill step of the optimal accuracy decoding * algorithm \citep{Kall05}. * * Caller provides the posterior decoding matrix , * which was calculated by Forward/Backward on a target sequence * of length using the query model . * * Caller also provides a DP matrix , allocated for the * M> by L> comparison. The routine fills this in * with OA scores. * * Args: gm - query profile * pp - posterior decoding matrix created by * gx - RESULT: caller provided DP matrix for M> by * ret_e - RETURN: expected number of correctly decoded positions * * Returns: on success, and <*ret_e> contains the final OA * score, which is the expected number of correctly decoded * positions in the target sequence (up to ). * * Throws: (no abnormal error conditions) */ int p7_GOptimalAccuracy(const P7_PROFILE *gm, const P7_GMX *pp, P7_GMX *gx, float *ret_e) { int L = pp->L; float **dp = gx->dp; float *xmx = gx->xmx; float const *tsc = gm->tsc; int i,k; int M = gm->M; float esc = p7_profile_IsLocal(gm) ? 1.0 : 0.0; float t1, t2; /* Initialization of the zero row (i=0; no residues to account for. */ XMX(0,p7G_N) = 0.; /* S->N, p=1 */ XMX(0,p7G_B) = 0.; /* S->N->B, no N-tail */ XMX(0,p7G_E) = XMX(0,p7G_C) = XMX(0,p7G_J) = -eslINFINITY; /* need seq to get here */ for (k = 0; k <= M; k++) MMX(0,k) = IMX(0,k) = DMX(0,k) = -eslINFINITY; /* need seq to get here */ for (i = 1; i <= L; i++) { MMX(i,0) = IMX(i,0) = DMX(i,0) = XMX(i,p7G_E) = -eslINFINITY; for (k = 1; k < M; k++) { MMX(i,k) = ESL_MAX(ESL_MAX(TSCDELTA(p7P_MM, k-1) * (MMX(i-1,k-1) + pp->dp[i][k*p7G_NSCELLS + p7G_M]), TSCDELTA(p7P_IM, k-1) * (IMX(i-1,k-1) + pp->dp[i][k*p7G_NSCELLS + p7G_M])), ESL_MAX(TSCDELTA(p7P_DM, k-1) * (DMX(i-1,k-1) + pp->dp[i][k*p7G_NSCELLS + p7G_M]), TSCDELTA(p7P_BM, k-1) * (XMX(i-1,p7G_B)+ pp->dp[i][k*p7G_NSCELLS + p7G_M]))); XMX(i,p7G_E) = ESL_MAX(XMX(i,p7G_E), esc * MMX(i,k)); IMX(i,k) = ESL_MAX(TSCDELTA(p7P_MI, k) * (MMX(i-1,k) + pp->dp[i][k*p7G_NSCELLS + p7G_I]), TSCDELTA(p7P_II, k) * (IMX(i-1,k) + pp->dp[i][k*p7G_NSCELLS + p7G_I])); DMX(i,k) = ESL_MAX(TSCDELTA(p7P_MD, k-1) * MMX(i,k-1), TSCDELTA(p7P_DD, k-1) * DMX(i,k-1)); } /* last node (k=M) is unrolled; it has no I state, and it has a p=1.0 {MD}->E transition even in local mode */ MMX(i,M) = ESL_MAX(ESL_MAX(TSCDELTA(p7P_MM, M-1) * (MMX(i-1,M-1) + pp->dp[i][M*p7G_NSCELLS + p7G_M]), TSCDELTA(p7P_IM, M-1) * (IMX(i-1,M-1) + pp->dp[i][M*p7G_NSCELLS + p7G_M])), ESL_MAX(TSCDELTA(p7P_DM, M-1) * (DMX(i-1,M-1) + pp->dp[i][M*p7G_NSCELLS + p7G_M]), TSCDELTA(p7P_BM, M-1) * (XMX(i-1,p7G_B)+ pp->dp[i][M*p7G_NSCELLS + p7G_M]))); DMX(i,M) = ESL_MAX(TSCDELTA(p7P_MD, M-1) * MMX(i,M-1), TSCDELTA(p7P_DD, M-1) * DMX(i,M-1)); /* note: we calculated XMX before DMX in the loop, because we probably had MMX(i,k) in a register. * but now we can't do that, because XMX depends on DMX */ XMX(i,p7G_E) = ESL_MAX(XMX(i,p7G_E), ESL_MAX(MMX(i,M), DMX(i, M))); /* now the special states; it's important that E is already done, and B is done after N,J */ t1 = ( (gm->xsc[p7P_J][p7P_LOOP] == -eslINFINITY) ? FLT_MIN : 1.0); t2 = ( (gm->xsc[p7P_E][p7P_LOOP] == -eslINFINITY) ? FLT_MIN : 1.0); XMX(i, p7G_J) = ESL_MAX( t1 * (XMX(i-1,p7G_J) + pp->xmx[i*p7G_NXCELLS + p7G_J]), t2 * XMX(i, p7G_E)); t1 = ( (gm->xsc[p7P_C][p7P_LOOP] == -eslINFINITY) ? FLT_MIN : 1.0); t2 = ( (gm->xsc[p7P_E][p7P_MOVE] == -eslINFINITY) ? FLT_MIN : 1.0); XMX(i,p7G_C) = ESL_MAX( t1 * (XMX(i-1,p7G_C) + pp->xmx[i*p7G_NXCELLS + p7G_C]), t2 * XMX(i, p7G_E)); t1 = ( (gm->xsc[p7P_N][p7P_LOOP] == -eslINFINITY) ? FLT_MIN : 1.0); XMX(i,p7G_N) = t1 * (XMX(i-1,p7G_N) + pp->xmx[i*p7G_NXCELLS + p7G_N]); t1 = ( (gm->xsc[p7P_N][p7P_MOVE] == -eslINFINITY) ? FLT_MIN : 1.0); t2 = ( (gm->xsc[p7P_J][p7P_MOVE] == -eslINFINITY) ? FLT_MIN : 1.0); XMX(i,p7G_B) = ESL_MAX( t1 * XMX(i, p7G_N), t2 * XMX(i, p7G_J)); } *ret_e = XMX(L,p7G_C); return eslOK; } /*---------------------- end, oa fill ---------------------------*/ /***************************************************************** * 2. Optimal alignment accuracy, traceback *****************************************************************/ static inline float get_postprob(const P7_GMX *pp, int scur, int sprv, int k, int i); static inline int select_m(const P7_PROFILE *gm, const P7_GMX *gx, int i, int k); static inline int select_d(const P7_PROFILE *gm, const P7_GMX *gx, int i, int k); static inline int select_i(const P7_PROFILE *gm, const P7_GMX *gx, int i, int k); static inline int select_n(int i); static inline int select_c(const P7_PROFILE *gm, const P7_GMX *pp, const P7_GMX *gx, int i); static inline int select_j(const P7_PROFILE *gm, const P7_GMX *pp, const P7_GMX *gx, int i); static inline int select_e(const P7_PROFILE *gm, const P7_GMX *gx, int i, int *ret_k); static inline int select_b(const P7_PROFILE *gm, const P7_GMX *gx, int i); /* Function: p7_GOATrace() * Synopsis: Optimal accuracy decoding: traceback. * Incept: SRE, Fri Feb 29 12:59:11 2008 [Janelia] * * Purpose: The traceback stage of the optimal accuracy decoding algorithm * \citep{Kall05}. * * Caller provides the OA DP matrix that was just * calculated by , as well as the * posterior decoding matrix , which was calculated by * Forward/Backward on a target sequence of length * using the query model . * * Caller provides an empty traceback structure to * hold the result, allocated to hold optional posterior * probability annotation on residues (with * , generally). This will be * internally reallocated as needed for larger traces. * * Args: gm - query profile * pp - posterior decoding matrix created by * gx - OA DP matrix calculated by * tr - RESULT: OA traceback, allocated with posterior probs * * Returns: on success, and contains the OA traceback. * * Throws: on allocation error. */ int p7_GOATrace(const P7_PROFILE *gm, const P7_GMX *pp, const P7_GMX *gx, P7_TRACE *tr) { int i = gx->L; /* position in seq (1..L) */ int k = 0; /* position in model (1..M) */ float postprob; int sprv, scur; int status; #ifdef p7_DEBUGGING if (tr->N != 0) ESL_EXCEPTION(eslEINVAL, "trace isn't empty: forgot to Reuse()?"); #endif if ((status = p7_trace_AppendWithPP(tr, p7T_T, k, i, 0.0)) != eslOK) return status; if ((status = p7_trace_AppendWithPP(tr, p7T_C, k, i, 0.0)) != eslOK) return status; sprv = p7T_C; while (sprv != p7T_S) { switch (sprv) { case p7T_M: scur = select_m(gm, gx, i, k); k--; i--; break; case p7T_D: scur = select_d(gm, gx, i, k); k--; break; case p7T_I: scur = select_i(gm, gx, i, k); i--; break; case p7T_N: scur = select_n(i); break; case p7T_C: scur = select_c(gm, pp, gx, i); break; case p7T_J: scur = select_j(gm, pp, gx, i); break; case p7T_E: scur = select_e(gm, gx, i, &k); break; case p7T_B: scur = select_b(gm, gx, i); break; default: ESL_EXCEPTION(eslEINVAL, "bogus state in traceback"); } if (scur == -1) ESL_EXCEPTION(eslEINVAL, "OA traceback choice failed"); postprob = get_postprob(pp, scur, sprv, k, i); if ((status = p7_trace_AppendWithPP(tr, scur, k, i, postprob)) != eslOK) return status; /* For NCJ, we had to defer i decrement. */ if ( (scur == p7T_N || scur == p7T_J || scur == p7T_C) && scur == sprv) i--; sprv = scur; } tr->M = gm->M; tr->L = gx->L; return p7_trace_Reverse(tr); } static inline float get_postprob(const P7_GMX *pp, int scur, int sprv, int k, int i) { float **dp = pp->dp; float *xmx = pp->xmx; switch (scur) { case p7T_M: return MMX(i,k); case p7T_I: return IMX(i,k); case p7T_N: if (sprv == scur) return XMX(i,p7G_N); case p7T_C: if (sprv == scur) return XMX(i,p7G_C); case p7T_J: if (sprv == scur) return XMX(i,p7G_J); default: return 0.0; } } static inline int select_m(const P7_PROFILE *gm, const P7_GMX *gx, int i, int k) { float **dp = gx->dp; /* so {MDI}MX() macros work */ float *xmx = gx->xmx; /* so XMX() macro works */ float const *tsc = gm->tsc; /* so TSCDELTA() macro works */ float path[4]; int state[4] = { p7T_M, p7T_I, p7T_D, p7T_B }; path[0] = TSCDELTA(p7P_MM, k-1) * MMX(i-1,k-1); path[1] = TSCDELTA(p7P_IM, k-1) * IMX(i-1,k-1); path[2] = TSCDELTA(p7P_DM, k-1) * DMX(i-1,k-1); path[3] = TSCDELTA(p7P_BM, k-1) * XMX(i-1,p7G_B); return state[esl_vec_FArgMax(path, 4)]; } static inline int select_d(const P7_PROFILE *gm, const P7_GMX *gx, int i, int k) { float **dp = gx->dp; /* so {MDI}MX() macros work */ float const *tsc = gm->tsc; /* so TSCDELTA() macro works */ float path[2]; path[0] = TSCDELTA(p7P_MD, k-1) * MMX(i, k-1); path[1] = TSCDELTA(p7P_DD, k-1) * DMX(i, k-1); return ((path[0] >= path[1]) ? p7T_M : p7T_D); } static inline int select_i(const P7_PROFILE *gm, const P7_GMX *gx, int i, int k) { float **dp = gx->dp; /* so {MDI}MX() macros work */ float const *tsc = gm->tsc; /* so TSCDELTA() macro works */ float path[2]; path[0] = TSCDELTA(p7P_MI, k) * MMX(i-1,k); path[1] = TSCDELTA(p7P_II, k) * IMX(i-1,k); return ((path[0] >= path[1]) ? p7T_M : p7T_I); } static inline int select_n(int i) { return ((i==0) ? p7T_S : p7T_N); } static inline int select_c(const P7_PROFILE *gm, const P7_GMX *pp, const P7_GMX *gx, int i) { float t1 = ( (gm->xsc[p7P_C][p7P_LOOP] == -eslINFINITY) ? FLT_MIN : 1.0); float t2 = ( (gm->xsc[p7P_E][p7P_MOVE] == -eslINFINITY) ? FLT_MIN : 1.0); float *xmx = gx->xmx; /* so XMX() macro works */ float path[2]; path[0] = t1 * (XMX(i-1, p7G_C) + pp->xmx[i*p7G_NXCELLS + p7G_C]); path[1] = t2 * XMX(i,p7G_E); return ((path[0] > path[1]) ? p7T_C : p7T_E); } static inline int select_j(const P7_PROFILE *gm, const P7_GMX *pp, const P7_GMX *gx, int i) { float t1 = ( (gm->xsc[p7P_J][p7P_LOOP] == -eslINFINITY) ? FLT_MIN : 1.0); float t2 = ( (gm->xsc[p7P_E][p7P_LOOP] == -eslINFINITY) ? FLT_MIN : 1.0); float *xmx = gx->xmx; /* so XMX() macro works */ float path[2]; path[0] = t1 * (XMX(i-1,p7G_J) + pp->xmx[i*p7G_NXCELLS + p7G_J]); path[1] = t2 * XMX(i,p7G_E); return ((path[0] > path[1]) ? p7T_J : p7T_E); } static inline int select_e(const P7_PROFILE *gm, const P7_GMX *gx, int i, int *ret_k) { float **dp = gx->dp; /* so {MDI}MX() macros work */ float max = -eslINFINITY; int smax = -1; /* will be returned as "error code" if no max found */ int kmax = -1; int k; if (! p7_profile_IsLocal(gm)) /* glocal/global is easier */ { *ret_k = gm->M; return ((MMX(i,gm->M) >= DMX(i,gm->M)) ? p7T_M : p7T_D); } for (k = 1; k <= gm->M; k++) { if (MMX(i,k) >= max) { max = MMX(i,k); smax = p7T_M; kmax = k; } if (DMX(i,k) > max) { max = DMX(i,k); smax = p7T_D; kmax = k; } } *ret_k = kmax; return smax; } static inline int select_b(const P7_PROFILE *gm, const P7_GMX *gx, int i) { float t1 = ( (gm->xsc[p7P_N][p7P_MOVE] == -eslINFINITY) ? FLT_MIN : 1.0); float t2 = ( (gm->xsc[p7P_J][p7P_MOVE] == -eslINFINITY) ? FLT_MIN : 1.0); float *xmx = gx->xmx; /* so XMX() macro works */ float path[2]; path[0] = t1 * XMX(i, p7G_N); path[1] = t2 * XMX(i, p7G_J); return ((path[0] > path[1]) ? p7T_N : p7T_J); } /*------------------------ end, oa traceback --------------------*/ /***************************************************************** * 3. Benchmark driver *****************************************************************/ #ifdef p7GENERIC_OPTACC_BENCHMARK /* icc -O3 -static -o generic_optacc_benchmark -I. -L. -I../easel -L../easel -Dp7GENERIC_OPTACC_BENCHMARK generic_optacc.c -lhmmer -leasel -lm ./benchmark-generic-optacc RRM_1 (M=72) Caudal_act (M=136) SMC_N (M=1151) ----------------- ------------------ ------------------- 20 Aug 08: 67.96u (21.2 Mc/s) 128.14u (21.2 Mc/s) 1091.90u (21.1 Mc/s) */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "5000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { "--notrace", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "only benchmark the DP fill stage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for optimal accuracy alignment, generic version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *gx1 = NULL; P7_GMX *gx2 = NULL; P7_TRACE *tr = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float fsc, bsc, accscore; double Mcs; p7_FLogsumInit(); if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_UNILOCAL); gx1 = p7_gmx_Create(gm->M, L); gx2 = p7_gmx_Create(gm->M, L); tr = p7_trace_CreateWithPP(); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_GForward (dsq, L, gm, gx1, &fsc); p7_GBackward(dsq, L, gm, gx2, &bsc); p7_GDecoding(gm, gx1, gx2, gx2); /* is now the posterior decoding matrix */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { p7_GOptimalAccuracy(gm, gx2, gx1, &accscore); /* is now the OA matrix */ if (! esl_opt_GetBoolean(go, "--notrace")) { p7_GOATrace(gm, gx2, gx1, tr); p7_trace_Reuse(tr); } } esl_stopwatch_Stop(w); Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / w->user; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_trace_Destroy(tr); p7_gmx_Destroy(gx1); p7_gmx_Destroy(gx2); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_OPTACC_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 4. Unit tests *****************************************************************/ #ifdef p7GENERIC_OPTACC_TESTDRIVE #endif /*p7GENERIC_OPTACC_TESTDRIVE*/ /*------------------- end, unit tests ---------------------------*/ /***************************************************************** * 5. Test driver *****************************************************************/ #ifdef p7GENERIC_OPTACC_TESTDRIVE #endif /*p7GENERIC_OPTACC_TESTDRIVE*/ /*------------------ end, test driver ---------------------------*/ /***************************************************************** * 6. Example *****************************************************************/ #ifdef p7GENERIC_OPTACC_EXAMPLE /* gcc -g -Wall -o generic_optacc_example -Dp7GENERIC_OPTACC_EXAMPLE -I. -I../easel -L. -L../easel generic_optacc.c -lhmmer -leasel -lm ./generic_optacc_example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-d", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump posterior residue decoding matrix", 0 }, { "-m", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump OA matrix", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of optimal accuracy alignment, generic implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *gx1 = NULL; P7_GMX *gx2 = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; P7_TRACE *tr = NULL; int format = eslSQFILE_UNKNOWN; char errbuf[eslERRBUFSIZE]; float fsc, bsc, vsc; float accscore; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_OpenDigital(abc, seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); esl_sqfile_Close(sqfp); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); /* multihit local: H3 default */ /* Allocations */ gx1 = p7_gmx_Create(gm->M, sq->n); gx2 = p7_gmx_Create(gm->M, sq->n); tr = p7_trace_CreateWithPP(); p7_FLogsumInit(); /* Run Forward, Backward; do OA fill and trace */ p7_GForward (sq->dsq, sq->n, gm, gx1, &fsc); p7_GBackward(sq->dsq, sq->n, gm, gx2, &bsc); p7_GDecoding(gm, gx1, gx2, gx2); /* is now the posterior decoding matrix */ p7_GOptimalAccuracy(gm, gx2, gx1, &accscore); /* is now the OA matrix */ p7_GOATrace(gm, gx2, gx1, tr); if (esl_opt_GetBoolean(go, "-d")) p7_gmx_Dump(stdout, gx2, p7_DEFAULT); if (esl_opt_GetBoolean(go, "-m")) p7_gmx_Dump(stdout, gx1, p7_DEFAULT); p7_trace_Dump(stdout, tr, gm, sq->dsq); if (p7_trace_Validate(tr, abc, sq->dsq, errbuf) != eslOK) p7_Die("trace fails validation:\n%s\n", errbuf); printf("fwd = %.4f nats\n", fsc); printf("bck = %.4f nats\n", bsc); printf("acc = %.4f (%.2f%%)\n", accscore, accscore * 100. / (float) sq->n); p7_trace_Reuse(tr); p7_GViterbi(sq->dsq, sq->n, gm, gx1, &vsc); p7_GTrace (sq->dsq, sq->n, gm, gx1, tr); p7_trace_SetPP(tr, gx2); p7_trace_Dump(stdout, tr, gm, sq->dsq); printf("vit = %.4f nats\n", vsc); printf("acc = %.4f\n", p7_trace_GetExpectedAccuracy(tr)); /* Cleanup */ esl_sq_Destroy(sq); p7_trace_Destroy(tr); p7_gmx_Destroy(gx1); p7_gmx_Destroy(gx2); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_OPTACC_EXAMPLE*/ /*-------------------- end, example -----------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/mpisupport.c0000664361611702660230000025222312473612614015454 0ustar wheelerteddy/* Optional support for MPI parallelization. * * Contents: * 1. Communicating P7_HMM, a core model. * 2. Communicating P7_PROFILE, a score profile. * 3. Communicating P7_PIPELINE, pipeline stats. * 4. Communicating P7_TOPHITS, list of high scoring alignments. * 5. Benchmark driver. * 6. Unit tests. * 7. Test driver. * 8. Copyright and license information. */ #include "p7_config.h" #ifdef HAVE_MPI #include #include #include #include "mpi.h" #include "easel.h" #include "esl_mpi.h" #include "esl_getopts.h" #include "hmmer.h" static int p7_hit_MPISend(P7_HIT *hit, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc); static int p7_hit_MPIPackSize(P7_HIT *hit, MPI_Comm comm, int *ret_n); static int p7_hit_MPIPack(P7_HIT *hit, char *buf, int n, int *pos, MPI_Comm comm); static int p7_hit_MPIUnpack(char *buf, int n, int *pos, MPI_Comm comm, P7_HIT *hit); static int p7_hit_MPIRecv(int source, int tag, MPI_Comm comm, char **buf, int *nalloc, P7_HIT *hit); static int p7_dcl_MPISend(P7_DOMAIN *dcl, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc); static int p7_dcl_MPIPackSize(P7_DOMAIN *dcl, MPI_Comm comm, int *ret_n); static int p7_dcl_MPIPack(P7_DOMAIN *dcl, char *buf, int n, int *pos, MPI_Comm comm); static int p7_dcl_MPIUnpack(char *buf, int n, int *pos, MPI_Comm comm, P7_DOMAIN *dcl); static int p7_dcl_MPIRecv(int source, int tag, MPI_Comm comm, char **buf, int *nalloc, P7_DOMAIN *dcl); /***************************************************************** * 1. Communicating P7_HMM, a core model. *****************************************************************/ /* Function: p7_hmm_MPISend() * Synopsis: Send an HMM as an MPI work unit. * * Purpose: Sends an HMM as a work unit to MPI process * (where ranges from 0..), tagged * with MPI tag , for MPI communicator , as * the sole workunit or result. * * Work units are prefixed by a status code. If is * , the work unit is an code followed by * the packed HMM. If is NULL, the work unit is an * code, which knows how to * interpret; this is typically used for an end-of-data * signal to cleanly shut down worker processes. * * In order to minimize alloc/free cycles in this routine, * caller passes a pointer to a working buffer <*buf> of * size <*nalloc> characters. If necessary (i.e. if is * too big to fit), <*buf> will be reallocated and <*nalloc> * increased to the new size. As a special case, if <*buf> * is and <*nalloc> is 0, the buffer will be * allocated appropriately, but the caller is still * responsible for free'ing it. * * Returns: on success; <*buf> may have been reallocated and * <*nalloc> may have been increased. * * Throws: if an MPI call fails; if a malloc/realloc * fails. In either case, <*buf> and <*nalloc> remain valid and useful * memory (though the contents of <*buf> are undefined). * * Note: Compare to p7_hmmfile_WriteBinary(). The two operations (sending * an HMM via MPI, or saving it as a binary file to disk) are * similar. */ int p7_hmm_MPISend(P7_HMM *hmm, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc) { int status; int code; int sz, n, pos; /* Figure out size */ if (MPI_Pack_size(1, MPI_INT, comm, &n) != 0) ESL_XEXCEPTION(eslESYS, "mpi pack size failed"); if (hmm != NULL) { if ((status = p7_hmm_MPIPackSize(hmm, comm, &sz)) != eslOK) return status; n += sz; } /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* Pack the status code and HMM into the buffer */ pos = 0; code = (hmm == NULL) ? eslEOD : eslOK; if (MPI_Pack(&code, 1, MPI_INT, *buf, n, &pos, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi pack failed"); if (hmm != NULL) { if ((status = p7_hmm_MPIPack(hmm, *buf, n, &pos, comm)) != eslOK) return status; } /* Send the packed HMM to the destination. */ if (MPI_Send(*buf, n, MPI_PACKED, dest, tag, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi send failed"); return eslOK; ERROR: return status; } /* Function: p7_hmm_MPIPackSize() * Synopsis: Calculates size needed to pack an HMM. * * Purpose: Calculate an upper bound on the number of bytes * that will need to pack an HMM * in a packed MPI message for MPI communicator * ; return that number of bytes in <*ret_n>. * * Returns: on success, and <*ret_n> contains the answer. * * Throws: if an MPI call fails, and <*ret_n> is 0. */ int p7_hmm_MPIPackSize(P7_HMM *hmm, MPI_Comm comm, int *ret_n) { int status; int n = 0; int K = hmm->abc->K; int M = hmm->M; int sz; if (MPI_Pack_size(1, MPI_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += 6*sz; /* M,flags,nseq,eff_nseq,checksum,alphatype */ if (MPI_Pack_size(1, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += 6*sz; /* ga,tc,nc cutoffs */ if (MPI_Pack_size(7*(M+1), MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* t */ if (MPI_Pack_size(K*(M+1), MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += 2*sz; /* mat,ins */ if ((status = esl_mpi_PackOptSize(hmm->name, -1, MPI_CHAR, comm, &sz)) != eslOK) goto ERROR; n += sz; if ((status = esl_mpi_PackOptSize(hmm->acc, -1, MPI_CHAR, comm, &sz)) != eslOK) goto ERROR; n += sz; if ((status = esl_mpi_PackOptSize(hmm->desc, -1, MPI_CHAR, comm, &sz)) != eslOK) goto ERROR; n += sz; if (hmm->flags & p7H_RF) { if (MPI_Pack_size(M+2, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n+= sz; } if (hmm->flags & p7H_MMASK) { if (MPI_Pack_size(M+2, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n+= sz; } if (hmm->flags & p7H_CONS) { if (MPI_Pack_size(M+2, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n+= sz; } if (hmm->flags & p7H_CS) { if (MPI_Pack_size(M+2, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n+= sz; } if (hmm->flags & p7H_CA) { if (MPI_Pack_size(M+2, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n+= sz; } if ((status = esl_mpi_PackOptSize(hmm->comlog, -1, MPI_CHAR, comm, &sz)) != eslOK) goto ERROR; n+= sz; if ((status = esl_mpi_PackOptSize(hmm->ctime, -1, MPI_CHAR, comm, &sz)) != eslOK) goto ERROR; n+= sz; if (hmm->flags & p7H_MAP) { if (MPI_Pack_size(M+1, MPI_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n+= sz; } if (MPI_Pack_size(p7_NEVPARAM, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n+= sz; if (MPI_Pack_size(p7_NCUTOFFS, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n+= sz; if (MPI_Pack_size(p7_MAXABET, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n+= sz; *ret_n = n; return eslOK; ERROR: *ret_n = 0; return status; } /* Function: p7_hmm_MPIPack() * Synopsis: Packs an HMM into MPI buffer. * * Purpose: Packs HMM into an MPI packed message buffer * of length bytes, starting at byte position <*position>, * for MPI communicator . * * The caller must know that 's allocation of * bytes is large enough to append the packed HMM at * position <*pos>. This typically requires a call to * first, and reallocation if * needed. * * Returns: on success; now contains the * packed , and <*position> is set to the byte * immediately following the last byte of the HMM * in . * * Throws: if an MPI call fails; or if the * buffer's length was overflowed in trying to pack * into . In either case, the state of * and <*position> is undefined, and both should * be considered to be corrupted. */ int p7_hmm_MPIPack(P7_HMM *hmm, char *buf, int n, int *pos, MPI_Comm comm) { int status; int K = hmm->abc->K; int M = hmm->M; if (MPI_Pack( &M, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( &(hmm->flags), 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( (void *) &(hmm->abc->type), 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( hmm->t[0], 7*(M+1), MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( hmm->mat[0], K*(M+1), MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( hmm->ins[0], K*(M+1), MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if ((status = esl_mpi_PackOpt( hmm->name, -1, MPI_CHAR, buf, n, pos, comm)) != eslOK) return status; if ((status = esl_mpi_PackOpt( hmm->acc, -1, MPI_CHAR, buf, n, pos, comm)) != eslOK) return status; if ((status = esl_mpi_PackOpt( hmm->desc, -1, MPI_CHAR, buf, n, pos, comm)) != eslOK) return status; if (hmm->flags & p7H_RF) { if (MPI_Pack(hmm->rf, M+2, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); } if (hmm->flags & p7H_MMASK) { if (MPI_Pack(hmm->mm, M+2, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); } if (hmm->flags & p7H_CONS) { if (MPI_Pack(hmm->consensus, M+2, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); } if (hmm->flags & p7H_CS) { if (MPI_Pack(hmm->cs, M+2, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); } if (hmm->flags & p7H_CA) { if (MPI_Pack(hmm->ca, M+2, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); } if ((status = esl_mpi_PackOpt( hmm->comlog, -1, MPI_CHAR, buf, n, pos, comm)) != eslOK) return status; if (MPI_Pack( &(hmm->nseq), 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( &(hmm->eff_nseq), 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if ((status = esl_mpi_PackOpt( hmm->ctime, -1, MPI_CHAR, buf, n, pos, comm)) != eslOK) return status; if (hmm->flags & p7H_MAP) { if (MPI_Pack(hmm->map, M+1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); } if (MPI_Pack( &(hmm->checksum), 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( hmm->evparam, p7_NEVPARAM, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( hmm->cutoff, p7_NCUTOFFS, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( hmm->compo, p7_MAXABET, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (*pos > n) ESL_EXCEPTION(eslEMEM, "buffer overflow"); return eslOK; } /* Function: p7_hmm_MPIUnpack() * Synopsis: Unpacks an HMM from an MPI buffer. * * Purpose: Unpack a newly allocated HMM from MPI packed buffer * , starting from position <*pos>, where the total length * of the buffer in bytes is . * * Caller may or may not already know what alphabet the HMM * is expected to be in. A reference to the current * alphabet is passed in . If the alphabet is unknown, * pass <*abc = NULL>, and when the HMM is received, an * appropriate new alphabet object is allocated and passed * back to the caller via <*abc>. If the alphabet is * already known, <*abc> is that alphabet, and the new * HMM's alphabet type is verified to agree with it. This * mechanism allows an application to let the first HMM * determine the alphabet type for the application, while * still keeping the alphabet under the application's scope * of control. * * Returns: on success. <*pos> is updated to the position of * the next element in to unpack (if any). <*ret_hmm> * contains a newly allocated HMM, which the caller is * responsible for free'ing. If <*abc> was passed as * , it now points to an object that * was allocated here; caller is responsible for free'ing * this. * * Returns if the HMM is in a different * alphabet than <*abc> said to expect. In this case, * <*abc> is unchanged, <*buf> and <*nalloc> may have been * changed, and <*ret_hmm> is . * * Throws: on an MPI call failure. on allocation failure. * In either case, <*ret_hmm> is , and the state of * and <*pos> is undefined and should be considered to be corrupted. */ int p7_hmm_MPIUnpack(char *buf, int n, int *pos, MPI_Comm comm, ESL_ALPHABET **abc, P7_HMM **ret_hmm) { int status; P7_HMM *hmm = NULL; int M, K, atype; if ((hmm = p7_hmm_CreateShell()) == NULL) { status = eslEMEM; goto ERROR; } if (MPI_Unpack(buf, n, pos, &(hmm->M), 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &(hmm->flags), 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &atype, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); /* Set or verify the alphabet */ if (*abc == NULL) { /* still unknown: set it, pass control of it back to caller */ if ((*abc = esl_alphabet_Create(atype)) == NULL) { status = eslEMEM; goto ERROR; } } else { /* already known: check it */ if ((*abc)->type != atype) { status = eslEINCOMPAT; goto ERROR; } } /* For convenience below. */ K = (*abc)->K; M = hmm->M; /* Finish the allocation of the HMM */ if ((status = p7_hmm_CreateBody(hmm, M, *abc)) != eslOK) goto ERROR; /* Unpack the rest of the HMM */ if (MPI_Unpack( buf, n, pos, hmm->t[0], 7*(M+1), MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack( buf, n, pos, hmm->mat[0], K*(M+1), MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack( buf, n, pos, hmm->ins[0], K*(M+1), MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if ((status = esl_mpi_UnpackOpt( buf, n, pos, (void**)&(hmm->name), NULL, MPI_CHAR, comm)) != eslOK) goto ERROR; if ((status = esl_mpi_UnpackOpt( buf, n, pos, (void**)&(hmm->acc), NULL, MPI_CHAR, comm)) != eslOK) goto ERROR; if ((status = esl_mpi_UnpackOpt( buf, n, pos, (void**)&(hmm->desc), NULL, MPI_CHAR, comm)) != eslOK) goto ERROR; if (hmm->flags & p7H_RF) { if (MPI_Unpack(buf, n, pos, hmm->rf, M+2, MPI_CHAR, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); } if (hmm->flags & p7H_MMASK) { if (MPI_Unpack(buf, n, pos, hmm->mm, M+2, MPI_CHAR, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); } if (hmm->flags & p7H_CONS) { if (MPI_Unpack(buf, n, pos, hmm->consensus, M+2, MPI_CHAR, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); } if (hmm->flags & p7H_CS) { if (MPI_Unpack(buf, n, pos, hmm->cs, M+2, MPI_CHAR, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); } if (hmm->flags & p7H_CA) { if (MPI_Unpack(buf, n, pos, hmm->ca, M+2, MPI_CHAR, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); } if ((status = esl_mpi_UnpackOpt( buf, n, pos, (void**)&(hmm->comlog), NULL, MPI_CHAR, comm)) != eslOK) goto ERROR; if (MPI_Unpack( buf, n, pos, &(hmm->nseq), 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack( buf, n, pos, &(hmm->eff_nseq), 1, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if ((status = esl_mpi_UnpackOpt( buf, n, pos, (void**)&(hmm->ctime), NULL, MPI_CHAR, comm)) != eslOK) goto ERROR; if (hmm->flags & p7H_MAP) { if (MPI_Unpack(buf, n, pos, hmm->map, M+1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); } if (MPI_Unpack( buf, n, pos, &(hmm->checksum), 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack( buf, n, pos, hmm->evparam, p7_NEVPARAM, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack( buf, n, pos, hmm->cutoff, p7_NCUTOFFS, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack( buf, n, pos, hmm->compo, p7_MAXABET, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); *ret_hmm = hmm; return eslOK; ERROR: if (hmm != NULL) p7_hmm_Destroy(hmm); return status; } /* Function: p7_hmm_MPIRecv() * Synopsis: Receives an HMM as a work unit from an MPI sender. * * Purpose: Receive a work unit that consists of a single HMM * sent by MPI (<0..nproc-1>, or * ) tagged as for MPI communicator . * * Work units are prefixed by a status code. If the unit's * code is and no errors are encountered, this * routine will return and a non- <*ret_hmm>. * If the unit's code is (a shutdown signal), * this routine returns and <*ret_hmm> is . * * Caller provides a working buffer <*buf> of size * <*nalloc> characters. These are passed by reference, so * that <*buf> can be reallocated and <*nalloc> increased * if necessary. As a special case, if <*buf> is and * <*nalloc> is 0, the buffer will be allocated * appropriately, but the caller is still responsible for * free'ing it. * * Caller may or may not already know what alphabet the HMM * is expected to be in. A reference to the current * alphabet is passed in . If the alphabet is unknown, * pass <*abc = NULL>, and when the HMM is received, an * appropriate new alphabet object is allocated and passed * back to the caller via <*abc>. If the alphabet is * already known, <*ret_abc> is that alphabet, and the new * HMM's alphabet type is verified to agree with it. This * mechanism allows an application to let the first HMM * determine the alphabet type for the application, while * still keeping the alphabet under the application's scope * of control. * * Returns: on success. <*ret_hmm> contains the received HMM; * it is allocated here, and the caller is responsible for * free'ing it. <*buf> may have been reallocated to a * larger size, and <*nalloc> may have been increased. If * <*abc> was passed as , it now points to an * object that was allocated here; caller is * responsible for free'ing this. * * Returns if an end-of-data signal was received. * In this case, <*buf>, <*nalloc>, and <*abc> are left unchanged, * and <*ret_hmm> is . * * Returns if the HMM is in a different alphabet * than <*abc> said to expect. In this case, <*abc> is unchanged, * <*buf> and <*nalloc> may have been changed, and <*ret_hmm> is * . * * Throws: on allocation error, in which case <*ret_hmm> is * . */ int p7_hmm_MPIRecv(int source, int tag, MPI_Comm comm, char **buf, int *nalloc, ESL_ALPHABET **abc, P7_HMM **ret_hmm) { int status; int code; P7_HMM *hmm = NULL; int n; int pos; MPI_Status mpistatus; /* Probe first, because we need to know if our buffer is big enough. */ MPI_Probe(source, tag, comm, &mpistatus); MPI_Get_count(&mpistatus, MPI_PACKED, &n); /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* Receive the packed work unit */ MPI_Recv(*buf, n, MPI_PACKED, source, tag, comm, &mpistatus); /* Unpack it, looking at the status code prefix for EOD/EOK */ pos = 0; if (MPI_Unpack(*buf, n, &pos, &code, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (code == eslEOD) { *ret_hmm = NULL; return eslEOD; } return p7_hmm_MPIUnpack(*buf, *nalloc, &pos, comm, abc, ret_hmm); ERROR: if (hmm != NULL) p7_hmm_Destroy(hmm); return status; } /*----------------- end, P7_HMM communication -------------------*/ /***************************************************************** * 2. Communicating P7_PROFILE, a score profile. *****************************************************************/ /* Function: p7_profile_MPISend() * Synopsis: Send a profile as an MPI message. * * Purpose: Sends profile to MPI process (where * ranges from 0..), with MPI tag * for MPI communicator . * * In order to minimize alloc/free cycles in this routine, * caller passes a pointer to a working buffer <*buf> of * size <*nalloc> characters. If necessary (i.e. if is * too big to fit), <*buf> will be reallocated and <*nalloc> * increased to the new size. As a special case, if <*buf> * is and <*nalloc> is 0, the buffer will be * allocated appropriately, but the caller is still * responsible for free'ing it. * * If is NULL, an end-of-data signal is sent, which * knows how to interpret. * * Returns: on success. * * Note: This was tested against a version that simply issues a series * of MPI_Send()'s, rather than Pack()'ing into a buffer * and issuing one MPI_Send(). The packed version seems to * be significantly faster, although benchmarking MPI * programs is difficult, and variance on the results is high. * * To optimize communication still further, one might try * to avoid many or all of the MPI_Pack()'s. It might be * feasible to change the allocation of a profile such that * it is allocated in one contiguous chunk of memory. And * once one embarks on that, the memory layout of the * profile should also be optimized with respect to cache * performance during DP alignment. * * rf, cs annotation is optional, but for simplicity, we always * transmit the two allocated strings, even if they were empty. * * A "typical" protein profile (M=200,Kp=28) requires: * 8*200 floats for transitions = 1600 bytes * 28*201*2 floats for emissions = 11256 bytes * 8 floats for specials = 32 bytes * 2 ints for M,mode = 8 bytes * 1 float for nj = 4 bytes * ~100 chars of name, acc, desc = 100 bytes * 3*202 chars for annotation = 606 bytes * 3 floats for ev params = 12 bytes * 6 floats for Pfam cutoffs = 24 bytes * ----------- * 14Kb */ int p7_profile_MPISend(P7_PROFILE *gm, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc) { int status; int sz, n, position; int Kp; /* alphabet size including degeneracies */ int M; /* model size in nodes */ /* First, figure out the size of the profile */ if (gm == NULL) { if (MPI_Pack_size(1, MPI_INT, comm, &n) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); Kp = M = 0; } else { /* This will look wasteful, but the MPI spec doesn't guarantee that * MPI_Pack_size(x, ...) + MPI_Pack_size(x, ... ) == MPI_Pack_size(2x, ...). * Indeed there are some hints in the spec that that's *not* true. * So we assume we must match our Pack_size calls exactly to our Pack calls. */ Kp = gm->abc->Kp; M = gm->M; n = 0; if (MPI_Pack_size( 1, MPI_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz*3; /* M,mode,L */ if (MPI_Pack_size( p7P_NTRANS * M, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* tsc */ if (MPI_Pack_size( (M+1) * Kp * p7P_NR, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* rsc[0] */ if (MPI_Pack_size( p7P_NXTRANS, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz*p7P_NXSTATES; /* xsc[0..3] */ if (MPI_Pack_size( 1, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* nj */ if ((status = esl_mpi_PackOptSize(gm->name, -1, MPI_CHAR, comm, &sz))!= eslOK) goto ERROR; n += sz; /* name (string) */ if ((status = esl_mpi_PackOptSize(gm->acc, -1, MPI_CHAR, comm, &sz))!= eslOK) goto ERROR; n += sz; /* acc (string) */ if ((status = esl_mpi_PackOptSize(gm->desc, -1, MPI_CHAR, comm, &sz))!= eslOK) goto ERROR; n += sz; /* desc (string) */ if (MPI_Pack_size( (M+2), MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz*4; /* rf,cs,mm,consensus */ if (MPI_Pack_size( p7_NEVPARAM, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* evparam */ if (MPI_Pack_size( p7_NCUTOFFS, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* Pfam cutoffs */ } /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* Pack the profile into the buffer */ position = 0; if (gm == NULL) { int eod_code = -1; if (MPI_Pack(&eod_code, 1, MPI_INT, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); } else { if (MPI_Pack(&M, 1, MPI_INT, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&(gm->mode), 1, MPI_INT, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&(gm->L), 1, MPI_INT, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(gm->tsc, p7P_NTRANS *M, MPI_FLOAT, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(gm->rsc[0], (M+1)* Kp * p7P_NR, MPI_FLOAT, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(gm->xsc[0], p7P_NXTRANS, MPI_FLOAT, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(gm->xsc[1], p7P_NXTRANS, MPI_FLOAT, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(gm->xsc[2], p7P_NXTRANS, MPI_FLOAT, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(gm->xsc[3], p7P_NXTRANS, MPI_FLOAT, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&(gm->nj), 1, MPI_FLOAT, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if ((status = esl_mpi_PackOpt(gm->name, -1, MPI_CHAR, *buf, n, &position, comm)) != eslOK) goto ERROR; if ((status = esl_mpi_PackOpt(gm->acc, -1, MPI_CHAR, *buf, n, &position, comm)) != eslOK) goto ERROR; if ((status = esl_mpi_PackOpt(gm->desc, -1, MPI_CHAR, *buf, n, &position, comm)) != eslOK) goto ERROR; if (MPI_Pack(gm->rf, M+2, MPI_CHAR, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(gm->mm, M+2, MPI_CHAR, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(gm->cs, M+2, MPI_CHAR, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(gm->consensus, M+2, MPI_CHAR, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(gm->evparam, p7_NEVPARAM, MPI_FLOAT, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(gm->cutoff, p7_NCUTOFFS, MPI_FLOAT, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(gm->compo, p7_MAXABET, MPI_FLOAT, *buf, n, &position, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); } /* Send the packed profile to destination */ MPI_Send(*buf, n, MPI_PACKED, dest, tag, comm); return eslOK; ERROR: return status; } /* Function: p7_profile_MPIRecv() * Synopsis: Receive a profile as an MPI message. * * Purpose: Receive a profile from (where is usually * process 0, the master) with tag from communicator , * and return it in <*ret_gm>. * * Caller must also provide the alphabet and the * background model for this profile. (Of course, that means * the caller already knows them, by an appropriate * initialization.) * * To minimize alloc/free cycles in this routine, caller * passes a pointer to a buffer <*buf> of size <*nalloc> * characters. These are passed by reference because if * necessary, will be reallocated and * increased to the new size. As a special case, if * is and is 0, the buffer will be * allocated appropriately, but the caller is still * responsible for free'ing it. * * If the packed profile is an end-of-data signal, return * , and <*ret_gm> is . * * Returns: on success. <*ret_gm> contains the new profile; it * is allocated here, and the caller is responsible for * free'ing it. <*buf> may have been reallocated to a * larger size, and <*nalloc> may have been increased. * */ int p7_profile_MPIRecv(int source, int tag, MPI_Comm comm, const ESL_ALPHABET *abc, const P7_BG *bg, char **buf, int *nalloc, P7_PROFILE **ret_gm) { int status; P7_PROFILE *gm = NULL; int n; int position; MPI_Status mpistatus; int M; /* Probe first, because we need to know if our buffer is big enough. */ MPI_Probe(source, tag, comm, &mpistatus); MPI_Get_count(&mpistatus, MPI_PACKED, &n); /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* Receive the packed profile */ MPI_Recv(*buf, n, MPI_PACKED, source, tag, comm, &mpistatus); /* Unpack it - watching out for the EOD signal of M = -1. */ position = 0; if (MPI_Unpack(*buf, n, &position, &M, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (M == -1) { *ret_gm = NULL; return eslEOD; } if ((gm = p7_profile_Create(M, abc)) == NULL) { status = eslEMEM; goto ERROR; } if (MPI_Unpack(*buf, n, &position, &(gm->mode), 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &position, &(gm->L), 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &position, gm->tsc, p7P_NTRANS*M, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &position, gm->rsc[0], p7P_NR*(M+1)*abc->Kp, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &position, gm->xsc[0], p7P_NXTRANS, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &position, gm->xsc[1], p7P_NXTRANS, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &position, gm->xsc[2], p7P_NXTRANS, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &position, gm->xsc[3], p7P_NXTRANS, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &position, &(gm->nj), 1, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if ((status = esl_mpi_UnpackOpt( *buf, n, &position, (void**)&(gm->name), NULL, MPI_CHAR, comm)) != eslOK) goto ERROR; if ((status = esl_mpi_UnpackOpt( *buf, n, &position, (void**)&(gm->acc), NULL, MPI_CHAR, comm)) != eslOK) goto ERROR; if ((status = esl_mpi_UnpackOpt( *buf, n, &position, (void**)&(gm->desc), NULL, MPI_CHAR, comm)) != eslOK) goto ERROR; if (MPI_Unpack(*buf, n, &position, gm->rf, M+2, MPI_CHAR, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &position, gm->mm, M+2, MPI_CHAR, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &position, gm->cs, M+2, MPI_CHAR, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &position, gm->consensus, M+2, MPI_CHAR, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &position, gm->evparam, p7_NEVPARAM, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &position, gm->cutoff, p7_NCUTOFFS, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &position, gm->compo, p7_NCUTOFFS, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); gm->abc = abc; gm->M = M; *ret_gm = gm; return eslOK; ERROR: if (gm != NULL) p7_profile_Destroy(gm); *ret_gm = NULL; return status; } /*--------------- end, P7_PROFILE communication -----------------*/ /***************************************************************** * 3. Communicating P7_PIPELINE *****************************************************************/ /* Function: p7_pipeline_MPISend() * Synopsis: Send pipeline data as an MPI message. * * Purpose: Sends pipeline statistics to MPI process * (where ranges from 0..), with MPI tag * for MPI communicator . * * In order to minimize alloc/free cycles in this routine, * caller passes a pointer to a working buffer <*buf> of * size <*nalloc> characters. If necessary (i.e. if is * too big to fit), <*buf> will be reallocated and <*nalloc> * increased to the new size. As a special case, if <*buf> * is and <*nalloc> is 0, the buffer will be * allocated appropriately, but the caller is still * responsible for free'ing it. * * If is NULL, the pipeline statistics are initialized * to zeros. * * Returns: on success. */ int p7_pipeline_MPISend(P7_PIPELINE *pli, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc) { int status; int sz, n, pos; P7_PIPELINE bogus; /* This will look wasteful, but the MPI spec doesn't guarantee that * MPI_Pack_size(x, ...) + MPI_Pack_size(x, ... ) == MPI_Pack_size(2x, ...). * Indeed there are some hints in the spec that that's *not* true. * So we assume we must match our Pack_size calls exactly to our Pack calls. */ n = 0; if (MPI_Pack_size(1, MPI_LONG_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(1, MPI_LONG_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(1, MPI_LONG_LONG_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(1, MPI_LONG_LONG_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(1, MPI_LONG_LONG_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(1, MPI_LONG_LONG_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(1, MPI_LONG_LONG_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(1, MPI_LONG_LONG_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(1, MPI_LONG_LONG_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(1, MPI_LONG_LONG_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(1, MPI_DOUBLE, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* if no pipeline was defined, return zeros for the stats */ if (pli == NULL) { bogus.mode = p7_SEARCH_SEQS; /* that's 0. (some compilers complain if you set 0 directly. */ bogus.Z_setby = p7_ZSETBY_NTARGETS; /* ditto. */ bogus.nmodels = 0; bogus.nseqs = 0; bogus.nres = 0; bogus.nnodes = 0; bogus.n_past_msv = 0; bogus.n_past_bias = 0; bogus.n_past_vit = 0; bogus.n_past_fwd = 0; bogus.Z = 0.0; pli = &bogus; } /* Pack the pipeline into the buffer */ pos = 0; if (MPI_Pack(&pli->mode, 1, MPI_LONG_INT, *buf, n, &pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&pli->Z_setby, 1, MPI_LONG_INT, *buf, n, &pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&pli->nmodels, 1, MPI_LONG_LONG_INT, *buf, n, &pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&pli->nseqs, 1, MPI_LONG_LONG_INT, *buf, n, &pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&pli->nres, 1, MPI_LONG_LONG_INT, *buf, n, &pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&pli->nnodes, 1, MPI_LONG_LONG_INT, *buf, n, &pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&pli->n_past_msv, 1, MPI_LONG_LONG_INT, *buf, n, &pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&pli->n_past_bias, 1, MPI_LONG_LONG_INT, *buf, n, &pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&pli->n_past_vit, 1, MPI_LONG_LONG_INT, *buf, n, &pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&pli->n_past_fwd, 1, MPI_LONG_LONG_INT, *buf, n, &pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&pli->Z, 1, MPI_DOUBLE, *buf, n, &pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); /* Send the packed pipeline to destination */ MPI_Send(*buf, n, MPI_PACKED, dest, tag, comm); return eslOK; ERROR: return status; } /* Function: p7_pipeline_MPIRecv() * Synopsis: Receive pipeline data as an MPI message. * * Purpose: Receive a pipeline from (where is usually * process 0, the master) with tag from communicator , * and return it in <*ret_pli>. * * To minimize alloc/free cycles in this routine, caller * passes a pointer to a buffer <*buf> of size <*nalloc> * characters. These are passed by reference because if * necessary, will be reallocated and * increased to the new size. As a special case, if * is and is 0, the buffer will be * allocated appropriately, but the caller is still * responsible for free'ing it. * * Returns: on success. <*ret_pli> contains the new pipeline; * it is allocated here, and the caller is responsible for * free'ing it. <*buf> may have been reallocated to a * larger size, and <*nalloc> may have been increased. * */ int p7_pipeline_MPIRecv(int source, int tag, MPI_Comm comm, char **buf, int *nalloc, ESL_GETOPTS *go, P7_PIPELINE **ret_pli) { int status; P7_PIPELINE *pli = NULL; int n; int pos; MPI_Status mpistatus; /* Probe first, because we need to know if our buffer is big enough. */ MPI_Probe(source, tag, comm, &mpistatus); MPI_Get_count(&mpistatus, MPI_PACKED, &n); /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* Receive the packed pipeline */ MPI_Recv(*buf, n, MPI_PACKED, source, tag, comm, &mpistatus); /* Unpack it - watching out for the EOD signal of M = -1. */ pos = 0; if ((pli = p7_pipeline_Create(go, 0, 0, FALSE, p7_SEARCH_SEQS)) == NULL) { status = eslEMEM; goto ERROR; } /* mode will be immediately overwritten */ if (MPI_Unpack(*buf, n, &pos, &(pli->mode), 1, MPI_LONG_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &pos, &(pli->Z_setby), 1, MPI_LONG_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &pos, &(pli->nmodels), 1, MPI_LONG_LONG_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &pos, &(pli->nseqs), 1, MPI_LONG_LONG_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &pos, &(pli->nres), 1, MPI_LONG_LONG_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &pos, &(pli->nnodes), 1, MPI_LONG_LONG_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &pos, &(pli->n_past_msv), 1, MPI_LONG_LONG_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &pos, &(pli->n_past_bias), 1, MPI_LONG_LONG_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &pos, &(pli->n_past_vit), 1, MPI_LONG_LONG_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &pos, &(pli->n_past_fwd), 1, MPI_LONG_LONG_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &pos, &(pli->Z), 1, MPI_DOUBLE, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); *ret_pli = pli; return eslOK; ERROR: if (pli != NULL) p7_pipeline_Destroy(pli); *ret_pli = NULL; return status; } /*--------------- end, P7_PIPELINE communication -----------------*/ /***************************************************************** * 4. Communicating P7_TOPHITS *****************************************************************/ /* Function: p7_tophits_MPISend() * Synopsis: Send the TOPHITS as an MPI work unit. * * Purpose: Sends the TOPHITS , which the * caller has allocated for optional posterior probability * annotation on residues (with , * generally). This structure will be reallocated * internally if necessary. * * Args: om - profile * pp - posterior probability matrix * ox - OA matrix to trace, LxM * tr - storage for the recovered traceback * * Returns: on success. * * Throws: on allocation error. * if the trace isn't empty (needs to be Reuse()'d). */ int p7_OATrace(const P7_OPROFILE *om, const P7_OMX *pp, const P7_OMX *ox, P7_TRACE *tr) { int i = ox->L; /* position in sequence 1..L */ int k = 0; /* position in model 1..M */ int s0, s1; /* choice of a state */ float postprob; int status; if (tr->N != 0) ESL_EXCEPTION(eslEINVAL, "trace not empty; needs to be Reuse()'d?"); if ((status = p7_trace_AppendWithPP(tr, p7T_T, k, i, 0.0)) != eslOK) return status; if ((status = p7_trace_AppendWithPP(tr, p7T_C, k, i, 0.0)) != eslOK) return status; s0 = tr->st[tr->N-1]; while (s0 != p7T_S) { switch (s0) { case p7T_M: s1 = select_m(om, ox, i, k); k--; i--; break; case p7T_D: s1 = select_d(om, ox, i, k); k--; break; case p7T_I: s1 = select_i(om, ox, i, k); i--; break; case p7T_N: s1 = select_n(i); break; case p7T_C: s1 = select_c(om, pp, ox, i); break; case p7T_J: s1 = select_j(om, pp, ox, i); break; case p7T_E: s1 = select_e(om, ox, i, &k); break; case p7T_B: s1 = select_b(om, ox, i); break; default: ESL_EXCEPTION(eslEINVAL, "bogus state in traceback"); } if (s1 == -1) ESL_EXCEPTION(eslEINVAL, "OA traceback choice failed"); postprob = get_postprob(pp, s1, s0, k, i); if ((status = p7_trace_AppendWithPP(tr, s1, k, i, postprob)) != eslOK) return status; if ( (s1 == p7T_N || s1 == p7T_J || s1 == p7T_C) && s1 == s0) i--; s0 = s1; } /* end traceback, at S state */ tr->M = om->M; tr->L = ox->L; return p7_trace_Reverse(tr); } static inline float get_postprob(const P7_OMX *pp, int scur, int sprv, int k, int i) { int Q = p7O_NQF(pp->M); int q = (k-1) % Q; /* (q,r) is position of the current DP cell M(i,k) */ int r = (k-1) / Q; union { __m128 v; float p[4]; } u; switch (scur) { case p7T_M: u.v = MMO(pp->dpf[i], q); return u.p[r]; case p7T_I: u.v = IMO(pp->dpf[i], q); return u.p[r]; case p7T_N: if (sprv == scur) return pp->xmx[i*p7X_NXCELLS+p7X_N]; case p7T_C: if (sprv == scur) return pp->xmx[i*p7X_NXCELLS+p7X_C]; case p7T_J: if (sprv == scur) return pp->xmx[i*p7X_NXCELLS+p7X_J]; default: return 0.0; } } /* M(i,k) is reached from B(i-1), M(i-1,k-1), D(i-1,k-1), or I(i-1,k-1). */ static inline int select_m(const P7_OPROFILE *om, const P7_OMX *ox, int i, int k) { int Q = p7O_NQF(ox->M); int q = (k-1) % Q; /* (q,r) is position of the current DP cell M(i,k) */ int r = (k-1) / Q; __m128 *tp = om->tfv + 7*q; /* *tp now at start of transitions to cur cell M(i,k) */ __m128 xBv = _mm_set1_ps(ox->xmx[(i-1)*p7X_NXCELLS+p7X_B]); __m128 zerov = _mm_setzero_ps(); __m128 mpv, dpv, ipv; union { __m128 v; float p[4]; } u, tv; float path[4]; int state[4] = { p7T_M, p7T_I, p7T_D, p7T_B }; if (q > 0) { mpv = ox->dpf[i-1][(q-1)*3 + p7X_M]; dpv = ox->dpf[i-1][(q-1)*3 + p7X_D]; ipv = ox->dpf[i-1][(q-1)*3 + p7X_I]; } else { mpv = esl_sse_rightshift_ps(ox->dpf[i-1][(Q-1)*3 + p7X_M], zerov); dpv = esl_sse_rightshift_ps(ox->dpf[i-1][(Q-1)*3 + p7X_D], zerov); ipv = esl_sse_rightshift_ps(ox->dpf[i-1][(Q-1)*3 + p7X_I], zerov); } /* paths are numbered so that most desirable choice in case of tie is first. */ u.v = xBv; tv.v = *tp; path[3] = ((tv.p[r] == 0.0) ? -eslINFINITY : u.p[r]); tp++; u.v = mpv; tv.v = *tp; path[0] = ((tv.p[r] == 0.0) ? -eslINFINITY : u.p[r]); tp++; u.v = ipv; tv.v = *tp; path[1] = ((tv.p[r] == 0.0) ? -eslINFINITY : u.p[r]); tp++; u.v = dpv; tv.v = *tp; path[2] = ((tv.p[r] == 0.0) ? -eslINFINITY : u.p[r]); return state[esl_vec_FArgMax(path, 4)]; } /* D(i,k) is reached from M(i, k-1) or D(i,k-1). */ static inline int select_d(const P7_OPROFILE *om, const P7_OMX *ox, int i, int k) { int Q = p7O_NQF(ox->M); int q = (k-1) % Q; /* (q,r) is position of the current DP cell D(i,k) */ int r = (k-1) / Q; __m128 zerov = _mm_setzero_ps(); union { __m128 v; float p[4]; } mpv, dpv, tmdv, tddv; float path[2]; if (q > 0) { mpv.v = ox->dpf[i][(q-1)*3 + p7X_M]; dpv.v = ox->dpf[i][(q-1)*3 + p7X_D]; tmdv.v = om->tfv[7*(q-1) + p7O_MD]; tddv.v = om->tfv[7*Q + (q-1)]; } else { mpv.v = esl_sse_rightshift_ps(ox->dpf[i][(Q-1)*3 + p7X_M], zerov); dpv.v = esl_sse_rightshift_ps(ox->dpf[i][(Q-1)*3 + p7X_D], zerov); tmdv.v = esl_sse_rightshift_ps(om->tfv[7*(Q-1) + p7O_MD], zerov); tddv.v = esl_sse_rightshift_ps(om->tfv[8*Q-1], zerov); } path[0] = ((tmdv.p[r] == 0.0) ? -eslINFINITY : mpv.p[r]); path[1] = ((tddv.p[r] == 0.0) ? -eslINFINITY : dpv.p[r]); return ((path[0] >= path[1]) ? p7T_M : p7T_D); } /* I(i,k) is reached from M(i-1, k) or I(i-1,k). */ static inline int select_i(const P7_OPROFILE *om, const P7_OMX *ox, int i, int k) { int Q = p7O_NQF(ox->M); int q = (k-1) % Q; /* (q,r) is position of the current DP cell D(i,k) */ int r = (k-1) / Q; __m128 *tp = om->tfv + 7*q + p7O_MI; union { __m128 v; float p[4]; } tv, mpv, ipv; float path[2]; mpv.v = ox->dpf[i-1][q*3 + p7X_M]; tv.v = *tp; path[0] = ((tv.p[r] == 0.0) ? -eslINFINITY : mpv.p[r]); tp++; ipv.v = ox->dpf[i-1][q*3 + p7X_I]; tv.v = *tp; path[1] = ((tv.p[r] == 0.0) ? -eslINFINITY : ipv.p[r]); return ((path[0] >= path[1]) ? p7T_M : p7T_I); } /* N(i) must come from N(i-1) for i>0; else it comes from S */ static inline int select_n(int i) { return ((i==0) ? p7T_S : p7T_N); } /* C(i) is reached from E(i) or C(i-1). */ static inline int select_c(const P7_OPROFILE *om, const P7_OMX *pp, const P7_OMX *ox, int i) { float path[2]; path[0] = ( (om->xf[p7O_C][p7O_LOOP] == 0.0) ? -eslINFINITY : ox->xmx[(i-1)*p7X_NXCELLS+p7X_C] + pp->xmx[i*p7X_NXCELLS+p7X_C]); path[1] = ( (om->xf[p7O_E][p7O_MOVE] == 0.0) ? -eslINFINITY : ox->xmx[ i *p7X_NXCELLS+p7X_E]); return ((path[0] > path[1]) ? p7T_C : p7T_E); } /* J(i) is reached from E(i) or J(i-1). */ static inline int select_j(const P7_OPROFILE *om, const P7_OMX *pp, const P7_OMX *ox, int i) { float path[2]; path[0] = ( (om->xf[p7O_J][p7O_LOOP] == 0.0) ? -eslINFINITY : ox->xmx[(i-1)*p7X_NXCELLS+p7X_J] + pp->xmx[i*p7X_NXCELLS+p7X_J]); path[1] = ( (om->xf[p7O_E][p7O_LOOP] == 0.0) ? -eslINFINITY : ox->xmx[ i *p7X_NXCELLS+p7X_E]); return ((path[0] > path[1]) ? p7T_J : p7T_E); } /* E(i) is reached from any M(i, k=1..M) or D(i, k=2..M). */ /* This assumes all M_k->E, D_k->E are 1.0 */ static inline int select_e(const P7_OPROFILE *om, const P7_OMX *ox, int i, int *ret_k) { int Q = p7O_NQF(ox->M); __m128 *dp = ox->dpf[i]; union { __m128 v; float p[4]; } u; float max = -eslINFINITY; int smax, kmax; int q,r; /* precedence rules in case of ties here are a little tricky: M beats D: note the >= max! */ for (q = 0; q < Q; q++) { u.v = *dp; dp++; for (r = 0; r < 4; r++) if (u.p[r] >= max) { max = u.p[r]; smax = p7T_M; kmax = r*Q + q + 1; } u.v = *dp; dp+=2; for (r = 0; r < 4; r++) if (u.p[r] > max) { max = u.p[r]; smax = p7T_D; kmax = r*Q + q + 1; } } *ret_k = kmax; return smax; } /* B(i) is reached from N(i) or J(i). */ static inline int select_b(const P7_OPROFILE *om, const P7_OMX *ox, int i) { float path[2]; path[0] = ( (om->xf[p7O_N][p7O_MOVE] == 0.0) ? -eslINFINITY : ox->xmx[i*p7X_NXCELLS+p7X_N]); path[1] = ( (om->xf[p7O_J][p7O_MOVE] == 0.0) ? -eslINFINITY : ox->xmx[i*p7X_NXCELLS+p7X_J]); return ((path[0] > path[1]) ? p7T_N : p7T_J); } /*---------------------- end, OA traceback ----------------------*/ /***************************************************************** * 3. Benchmark driver *****************************************************************/ #ifdef p7OPTACC_BENCHMARK /* icc -O3 -static -o optacc_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7OPTACC_BENCHMARK optacc.c -lhmmer -leasel -lm ./optacc_benchmark runs benchmark on optimal accuracy fill and trace ./optacc_benchmark -c -N1 compare scores of SSE version to generic impl ./optacc_benchmark -x -N1 test that scores match trusted implementation. RRM_1 (M=72) Caudal_act (M=136) SMC_N (M=1151) ----------------- ------------------ --------------- 20 Aug 08: 13.11u (110 Mc/s) 23.39u (116 Mc/s) 332.62u (69 Mc/s) */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { "--notrace", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "only benchmark the DP fill stage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for optimal accuracy alignment, SSE version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx1 = NULL; P7_GMX *gx2 = NULL; P7_OMX *ox1 = NULL; P7_OMX *ox2 = NULL; P7_TRACE *tr = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float fsc, bsc, accscore; float fsc_g, bsc_g, accscore_g; double Mcs; p7_FLogsumInit(); if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); if (esl_opt_GetBoolean(go, "-x") && p7_FLogsumError(-0.4, -0.5) > 0.0001) p7_Fail("-x here requires p7_Logsum() recompiled in slow exact mode"); ox1 = p7_omx_Create(gm->M, L, L); ox2 = p7_omx_Create(gm->M, L, L); tr = p7_trace_CreateWithPP(); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_Forward (dsq, L, om, ox1, &fsc); p7_Backward(dsq, L, om, ox1, ox2, &bsc); p7_Decoding(om, ox1, ox2, ox2); esl_stopwatch_Start(w); for (i = 0; i < N; i++) { p7_OptimalAccuracy(om, ox2, ox1, &accscore); if (! esl_opt_GetBoolean(go, "--notrace")) { p7_OATrace(om, ox2, ox1, tr); p7_trace_Reuse(tr); } } esl_stopwatch_Stop(w); Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) w->user; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); if (esl_opt_GetBoolean(go, "-c") || esl_opt_GetBoolean(go, "-x") ) { gx1 = p7_gmx_Create(gm->M, L); gx2 = p7_gmx_Create(gm->M, L); p7_GForward (dsq, L, gm, gx1, &fsc_g); p7_GBackward(dsq, L, gm, gx2, &bsc_g); p7_GDecoding(gm, gx1, gx2, gx2); p7_GOptimalAccuracy(gm, gx2, gx1, &accscore_g); printf("generic: fwd=%8.4f bck=%8.4f acc=%8.4f\n", fsc_g, bsc_g, accscore_g); printf("SSE: fwd=%8.4f bck=%8.4f acc=%8.4f\n", fsc, bsc, accscore); p7_gmx_Destroy(gx1); p7_gmx_Destroy(gx2); } free(dsq); p7_omx_Destroy(ox1); p7_omx_Destroy(ox2); p7_trace_Destroy(tr); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7OPTACC_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 4. Unit tests *****************************************************************/ #ifdef p7OPTACC_TESTDRIVE #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" /* * 1. Compare accscore to GOptimalAccuracy(). * 2. Compare trace to GOATrace(). * * Note: This test is subject to some expected noise and can fail * for entirely innocent reasons. Generic Forward/Backward calculations with * p7_GForward(), p7_GBackward() use coarse-grain table lookups to sum * log probabilities, and sufficient roundoff error can accumulate to * change the optimal accuracy traceback, causing this test to fail. * So, if optacc_utest fails, before you go looking for bugs, first * go to ../logsum.c, change the #ifdef to activate the slow/accurate * version, recompile and rerun optacc_utest. If the failure goes away, * you can ignore it. - SRE, Wed Dec 17 09:45:31 2008 */ static void utest_optacc(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { char *msg = "optimal accuracy unit test failed"; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_SQ *sq = esl_sq_CreateDigital(abc); P7_OMX *ox1 = p7_omx_Create(M, L, L); P7_OMX *ox2 = p7_omx_Create(M, L, L); P7_GMX *gx1 = p7_gmx_Create(M, L); P7_GMX *gx2 = p7_gmx_Create(M, L); P7_TRACE *tr = p7_trace_CreateWithPP(); P7_TRACE *trg = p7_trace_CreateWithPP(); P7_TRACE *tro = p7_trace_CreateWithPP(); float accscore_o; float fsc, bsc, accscore; float fsc_g, bsc_g, accscore_g, accscore_g2; float pptol = 0.01; float sctol = 0.001; float gtol; p7_FLogsumInit(); gtol = ( (p7_FLogsumError(-0.4, -0.5) > 0.0001) ? 0.1 : 0.001); if (p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om)!= eslOK) esl_fatal(msg); while (N--) { if (p7_ProfileEmit(r, hmm, gm, bg, sq, tro) != eslOK) esl_fatal(msg); if (p7_omx_GrowTo(ox1, M, sq->n, sq->n) != eslOK) esl_fatal(msg); if (p7_omx_GrowTo(ox2, M, sq->n, sq->n) != eslOK) esl_fatal(msg); if (p7_gmx_GrowTo(gx1, M, sq->n) != eslOK) esl_fatal(msg); if (p7_gmx_GrowTo(gx2, M, sq->n) != eslOK) esl_fatal(msg); if (p7_Forward (sq->dsq, sq->n, om, ox1, &fsc) != eslOK) esl_fatal(msg); if (p7_Backward(sq->dsq, sq->n, om, ox1, ox2, &bsc) != eslOK) esl_fatal(msg); if (p7_Decoding(om, ox1, ox2, ox2) != eslOK) esl_fatal(msg); if (p7_OptimalAccuracy(om, ox2, ox1, &accscore) != eslOK) esl_fatal(msg); #if 0 p7_omx_FDeconvert(ox1, gx1); p7_gmx_Dump(stdout, gx1, p7_DEFAULT); p7_omx_FDeconvert(ox2, gx1); p7_gmx_Dump(stdout, gx1, p7_DEFAULT); #endif if (p7_OATrace(om, ox2, ox1, tr) != eslOK) esl_fatal(msg); if (p7_GForward (sq->dsq, sq->n, gm, gx1, &fsc_g) != eslOK) esl_fatal(msg); if (p7_GBackward(sq->dsq, sq->n, gm, gx2, &bsc_g) != eslOK) esl_fatal(msg); #if 0 p7_gmx_Dump(stdout, gx1, p7_DEFAULT); /* fwd */ p7_gmx_Dump(stdout, gx2, p7_DEFAULT); /* bck */ #endif if (p7_GDecoding(gm, gx1, gx2, gx2) != eslOK) esl_fatal(msg); if (p7_GOptimalAccuracy(gm, gx2, gx1, &accscore_g) != eslOK) esl_fatal(msg); #if 0 p7_gmx_Dump(stdout, gx1, p7_DEFAULT); /* oa */ p7_gmx_Dump(stdout, gx2, p7_DEFAULT); /* pp */ #endif if (p7_GOATrace(gm, gx2, gx1, trg) != eslOK) esl_fatal(msg); if (p7_trace_SetPP(tro, gx2) != eslOK) esl_fatal(msg); if (esl_opt_GetBoolean(go, "--traces")) { p7_trace_Dump(stdout, tro, gm, sq->dsq); p7_trace_Dump(stdout, tr, gm, sq->dsq); p7_trace_Dump(stdout, trg, gm, sq->dsq); } if (p7_trace_Validate(tr, abc, sq->dsq, NULL) != eslOK) esl_fatal(msg); if (p7_trace_Validate(trg, abc, sq->dsq, NULL) != eslOK) esl_fatal(msg); if (p7_trace_Compare(tr, trg, pptol) != eslOK) esl_fatal(msg); accscore_o = p7_trace_GetExpectedAccuracy(tro); /* according to gx2; see p7_trace_SetPP() call above */ accscore_g2 = p7_trace_GetExpectedAccuracy(trg); #if 0 printf("%f %f %f %f\n", accscore, accscore_g, accscore_g2, accscore_o); #endif if (esl_FCompare(fsc, bsc, sctol) != eslOK) esl_fatal(msg); if (esl_FCompare(fsc_g, bsc_g, gtol) != eslOK) esl_fatal(msg); if (esl_FCompare(fsc, fsc_g, gtol) != eslOK) esl_fatal(msg); if (esl_FCompare(accscore, accscore_g, gtol) != eslOK) esl_fatal(msg); if (esl_FCompare(accscore_g, accscore_g2, gtol) != eslOK) esl_fatal(msg); if (accscore_g2 < accscore_o) esl_fatal(msg); /* the above deserves explanation: * - accscore_o is the accuracy of the originally emitted trace, according * to the generic posterior decoding matrix . This is a lower bound * on the expected # of accurately aligned residues found by a DP * optimization. * - accscore is the accuracy found by the fast (vector) code DP implementation. * - accscore_g is the accuracy found by the generic DP implementation. * accscore and accscore_g should be nearly identical, * within tolerance of roundoff error accumulation and * the imprecision of Logsum() tables. * - accscore_g2 is the accuracy of the traceback identified by the generic * DP implementation. It should be identical (within order-of-evaluation * roundoff error) to accscore_g. * * the "accscore_g2 < accscore_o" test is carefully contrived. * accscore_o is a theoretical lower bound but because of fp error, * accscore and (much more rarely) even accscore_g can exceed accscore_o. * accscore_g2, however, is calculated with identical order of evaluation * as accscore_o if the optimal trace does turn out to be identical to * the originally emitted trace. It should be extremely unlikely (though * not impossible) for accscore_o to exceed accscore_g2. (The DP algorithm * would have to identify a trace that was different than the original trace, * which the DP algorithm, by order-of-evaluation, assigned higher accuracy, * but order-of-evaluation in traceback dependent code assigned lower accuracy. * [xref J5/29] */ esl_sq_Reuse(sq); p7_trace_Reuse(tr); p7_trace_Reuse(trg); p7_trace_Reuse(tro); } p7_trace_Destroy(tro); p7_trace_Destroy(trg); p7_trace_Destroy(tr); p7_gmx_Destroy(gx2); p7_gmx_Destroy(gx1); p7_omx_Destroy(ox2); p7_omx_Destroy(ox1); esl_sq_Destroy(sq); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); } #endif /*p7OPTACC_TESTDRIVE*/ /*------------------- end, unit tests ---------------------------*/ /***************************************************************** * 5. Test driver *****************************************************************/ #ifdef p7OPTACC_TESTDRIVE /* Failures in this test are to be expected, if you change the defaults. * The default RNG seed of 41 is very carefully chosen! Most seeds will * cause this test to fail. (Only 13 and 41 work for seeds 1..50.) * * The generic fwd/bck algorithms work in log space and suffer from a * small amount of imprecision, not only from the use of FLogsum()'s * table-driven approximation, but even (apparently) inherent in log() * and exp(). To minimize this, the generic decoding algorithm burns * time renormalizing each row. Still, it's a problem. See notes at * the header of utest_optacc() for more info. * * Another expected failure mode is when a fwd, bck nat score are close to * 0.0; FCompare() can evaluate two close-to-zero numbers as "different" * even if their absolute diff is negligible. (I suppose I could fix this.) */ /* gcc -g -Wall -msse2 -std=gnu99 -o optacc_utest -I.. -L.. -I../../easel -L../../easel -Dp7OPTACC_TESTDRIVE optacc.c -lhmmer -leasel -lm ./optacc_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "41", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "50", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "45", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "20", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { "--traces", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump all tracebacks", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for SSE Forward, Backward implementations"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* first round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_optacc(go, r, abc, bg, M, L, N); /* normal sized models */ utest_optacc(go, r, abc, bg, 1, L, 10); /* size 1 models */ utest_optacc(go, r, abc, bg, M, 1, 10); /* size 1 sequences */ esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); /* Second round of tests for amino alphabets. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_optacc(go, r, abc, bg, M, L, N); utest_optacc(go, r, abc, bg, 1, L, 10); utest_optacc(go, r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*p7OPTACC_TESTDRIVE*/ /*------------------ end, test driver ---------------------------*/ /***************************************************************** * 6. Example *****************************************************************/ #ifdef p7OPTACC_EXAMPLE /* gcc -g -Wall -o optacc_example -Dp7OPTACC_EXAMPLE -I.. -I../../easel -L.. -L../../easel optacc.c -lhmmer -leasel -lm ./optacc_example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-d", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump posterior residue decoding matrix", 0 }, { "-m", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump OA matrix", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of optimal accuracy alignment, SSE implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox1 = NULL; P7_OMX *ox2 = NULL; P7_GMX *gx = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; P7_TRACE *tr = NULL; int format = eslSQFILE_UNKNOWN; char errbuf[eslERRBUFSIZE]; float fsc, bsc; float accscore; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_OpenDigital(abc, seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); esl_sqfile_Close(sqfp); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); /* multihit local: H3 default */ om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); /* Allocations */ ox1 = p7_omx_Create(gm->M, sq->n, sq->n); ox2 = p7_omx_Create(gm->M, sq->n, sq->n); gx = p7_gmx_Create(gm->M, sq->n); tr = p7_trace_CreateWithPP(); p7_FLogsumInit(); /* Run Forward, Backward; do OA fill and trace */ p7_Forward (sq->dsq, sq->n, om, ox1, &fsc); p7_Backward(sq->dsq, sq->n, om, ox1, ox2, &bsc); p7_Decoding(om, ox1, ox2, ox2); /* is now the posterior decoding matrix */ p7_OptimalAccuracy(om, ox2, ox1, &accscore); /* is now the OA matrix */ p7_OATrace(om, ox2, ox1, tr); if (esl_opt_GetBoolean(go, "-d")) { p7_omx_FDeconvert(ox2, gx); p7_gmx_Dump(stdout, gx, p7_DEFAULT); } if (esl_opt_GetBoolean(go, "-m")) { p7_omx_FDeconvert(ox1, gx); p7_gmx_Dump(stdout, gx, p7_DEFAULT); } p7_trace_Dump(stdout, tr, gm, sq->dsq); if (p7_trace_Validate(tr, abc, sq->dsq, errbuf) != eslOK) p7_Die("trace fails validation:\n%s\n", errbuf); printf("fwd = %.4f nats\n", fsc); printf("bck = %.4f nats\n", bsc); printf("acc = %.4f (%.2f%%)\n", accscore, accscore * 100. / (float) sq->n); /* Cleanup */ esl_sq_Destroy(sq); p7_trace_Destroy(tr); p7_omx_Destroy(ox1); p7_omx_Destroy(ox2); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7OPTACC_EXAMPLE*/ /*-------------------- end, example -----------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_sse/impl_sse.h0000664361611702660230000005361612473612613016671 0ustar wheelerteddy/* SSE optimized implementation of various MSV, Viterbi, and Forward * routines: structures, declarations, and macros. * * SRE, Sun Nov 25 11:23:02 2007 * SVN $Id: impl_sse.h 4694 2014-07-01 02:35:31Z wheelert $ */ #ifndef P7_IMPL_SSE_INCLUDED #define P7_IMPL_SSE_INCLUDED #include "p7_config.h" #include "esl_alphabet.h" #include "esl_random.h" #include /* SSE */ #include /* SSE2 */ #ifdef __SSE3__ #include /* DENORMAL_MODE */ #endif #include "hmmer.h" /* In calculating Q, the number of vectors we need in a row, we have * to make sure there's at least 2, or a striped implementation fails. */ #define p7O_NQB(M) ( ESL_MAX(2, ((((M)-1) / 16) + 1))) /* 16 uchars */ #define p7O_NQW(M) ( ESL_MAX(2, ((((M)-1) / 8) + 1))) /* 8 words */ #define p7O_NQF(M) ( ESL_MAX(2, ((((M)-1) / 4) + 1))) /* 4 floats */ #define p7O_EXTRA_SB 17 /* see ssvfilter.c for explanation */ /***************************************************************** * 1. P7_OPROFILE: an optimized score profile *****************************************************************/ /* The OPROFILE is striped [Farrar07] and interleaved, as is the DP matrix. * For example, the layout of a profile for an M=14 model (xref J2/46): * * rsc[x] : striped blocks of M emissions, starting with q=0 * 1 11 1 1 * 1593 2604 371x 482x * * tsc: grouped in order of accession in DP for 7 transition scores; * starting at q=0 for all but the three transitions to M, which * are rotated by -1 and rightshifted. DD's follow separately, * starting at q=0. * * { 1 1 1 1 1 1 1 } * { 1593 x482 x482 x482 1593 1593 1593 } * { [tBMk] [tMM] [tIM] [tDM] [tMD] [tMI] [tII] } * * { 11 1 1 1 11 11 11 } * { 2604 1593 1593 1593 2604 2604 2604 } * { [tBMk] [tMM] [tIM] [tDM] [tMD] [tMI] [tII] } * * { 1 11 11 11 1 1 1 } * { 371x 2604 2604 2604 371x 371x 371x } * { [tBMk] [tMM] [tIM] [tDM] [tMD] [tMI] [tII] } * * { 1 1 1 1 1 1 1 } * { 482x 371x 371x 371x 482x 482x 482x } * { [tBMk] [tMM] [tIM] [tDM] [tMD] [tMI] [tII] } * * { 1 11 1 1 } * { 1593 2604 371x 482x } * { [TDD] [TDD] [TDD] [TDD] } * */ #define p7O_NXSTATES 4 /* special states stored: ENJC */ #define p7O_NXTRANS 2 /* special states all have 2 transitions: move, loop */ #define p7O_NTRANS 8 /* 7 core transitions + BMk entry */ enum p7o_xstates_e { p7O_E = 0, p7O_N = 1, p7O_J = 2, p7O_C = 3 }; enum p7o_xtransitions_e { p7O_MOVE = 0, p7O_LOOP = 1 }; enum p7o_tsc_e { p7O_BM = 0, p7O_MM = 1, p7O_IM = 2, p7O_DM = 3, p7O_MD = 4, p7O_MI = 5, p7O_II = 6, p7O_DD = 7 }; typedef struct p7_oprofile_s { /* MSVFilter uses scaled, biased uchars: 16x unsigned byte vectors */ __m128i **rbv; /* match scores [x][q]: rm, rm[0] are allocated */ __m128i **sbv; /* match scores for ssvfilter */ uint8_t tbm_b; /* constant B->Mk cost: scaled log 2/M(M+1) */ uint8_t tec_b; /* constant E->C cost: scaled log 0.5 */ uint8_t tjb_b; /* constant NCJ move cost: scaled log 3/(L+3) */ float scale_b; /* typically 3 / log2: scores scale to 1/3 bits */ uint8_t base_b; /* typically +190: offset of uchar scores */ uint8_t bias_b; /* positive bias to emission scores, make them >=0 */ /* ViterbiFilter uses scaled swords: 8x signed 16-bit integer vectors */ __m128i **rwv; /* [x][q]: rw, rw[0] are allocated [Kp][Q8] */ __m128i *twv; /* transition score blocks [8*Q8] */ int16_t xw[p7O_NXSTATES][p7O_NXTRANS]; /* NECJ state transition costs */ float scale_w; /* score units: typically 500 / log(2), 1/500 bits */ int16_t base_w; /* offset of sword scores: typically +12000 */ int16_t ddbound_w; /* threshold precalculated for lazy DD evaluation */ float ncj_roundoff; /* missing precision on NN,CC,JJ after rounding */ /* Forward, Backward use IEEE754 single-precision floats: 4x vectors */ __m128 **rfv; /* [x][q]: rf, rf[0] are allocated [Kp][Q4] */ __m128 *tfv; /* transition probability blocks [8*Q4] */ float xf[p7O_NXSTATES][p7O_NXTRANS]; /* NECJ transition costs */ /* Our actual vector mallocs, before we align the memory */ __m128i *rbv_mem; __m128i *sbv_mem; __m128i *rwv_mem; __m128i *twv_mem; __m128 *tfv_mem; __m128 *rfv_mem; /* Disk offset information for hmmpfam's fast model retrieval */ off_t offs[p7_NOFFSETS]; /* p7_{MFP}OFFSET, or -1 */ /* Disk offset bookkeeping for h3f: */ off_t roff; /* record offset (start of record); -1 if none */ off_t eoff; /* offset to last byte of record; -1 if unknown */ /* Information, annotation copied from parent profile: */ char *name; /* unique name of model */ char *acc; /* unique accession of model, or NULL */ char *desc; /* brief (1-line) description of model, or NULL */ char *rf; /* reference line 1..M; *ref=0: unused */ char *mm; /* modelmask line 1..M; *ref=0: unused */ char *cs; /* consensus structure line 1..M, *cs=0: unused */ char *consensus; /* consensus residues for ali display, 1..M */ float evparam[p7_NEVPARAM]; /* parameters for determining E-values, or UNSET */ float cutoff[p7_NCUTOFFS]; /* per-seq/per-dom bit cutoffs, or UNSET */ float compo[p7_MAXABET]; /* per-model HMM filter composition, or UNSET */ const ESL_ALPHABET *abc; /* copy of ptr to alphabet information */ /* Information about current configuration, size, allocation */ int L; /* current configured target seq length */ int M; /* model length */ int max_length; /* upper bound on emitted sequence length */ int allocM; /* maximum model length currently allocated for */ int allocQ4; /* p7_NQF(allocM): alloc size for tf, rf */ int allocQ8; /* p7_NQW(allocM): alloc size for tw, rw */ int allocQ16; /* p7_NQB(allocM): alloc size for rb */ int mode; /* currently must be p7_LOCAL */ float nj; /* expected # of J's: 0 or 1, uni vs. multihit */ int clone; /* this optimized profile structure is just a copy */ /* of another profile structre. all pointers of */ /* this structure should not be freed. */ } P7_OPROFILE; typedef struct { int count; /* number of objects in the block */ int listSize; /* maximum number elements in the list */ P7_OPROFILE **list; /* array of objects */ } P7_OM_BLOCK; /* retrieve match odds ratio [k][x] * this gets used in p7_alidisplay.c, when we're deciding if a residue is conserved or not */ static inline float p7_oprofile_FGetEmission(const P7_OPROFILE *om, int k, int x) { union { __m128 v; float p[4]; } u; int Q = p7O_NQF(om->M); int q = ((k-1) % Q); int r = (k-1)/Q; u.v = om->rfv[x][q]; return u.p[r]; } /***************************************************************** * 2. P7_OMX: a one-row dynamic programming matrix *****************************************************************/ enum p7x_scells_e { p7X_M = 0, p7X_D = 1, p7X_I = 2 }; #define p7X_NSCELLS 3 /* Besides ENJBC states, we may also store a rescaling factor on each row */ enum p7x_xcells_e { p7X_E = 0, p7X_N = 1, p7X_J = 2, p7X_B = 3, p7X_C = 4, p7X_SCALE = 5 }; #define p7X_NXCELLS 6 /* * * dpf[][] * to access M(i,k) for i=0,1..L; k=1..M: dpf[i][(k-1)/4 + p7X_M].element[(k-1)%4] * * xmx[] arrays for individual special states: * xmx[ENJBC] = [0 1 2 3][4 5 6 7]..[L-2 L-1 L x] XRQ >= (L/4)+1 * to access B[i] for example, for i=0..L: xmx[B][i/4].x[i%4] (quad i/4; element i%4). */ typedef struct p7_omx_s { int M; /* current actual model dimension */ int L; /* current actual sequence dimension */ /* The main dynamic programming matrix for M,D,I states */ __m128 **dpf; /* striped DP matrix for [0,1..L][0..Q-1][MDI], float vectors */ __m128i **dpw; /* striped DP matrix for [0,1..L][0..Q-1][MDI], sword vectors */ __m128i **dpb; /* striped DP matrix for [0,1..L][0..Q-1] uchar vectors */ void *dp_mem; /* DP memory shared by , , */ int allocR; /* current allocated # rows in dp{uf}. allocR >= validR >= L+1 */ int validR; /* current # of rows actually pointing at DP memory */ int allocQ4; /* current set row width in quads: allocQ4*4 >= M */ int allocQ8; /* current set row width in octets: allocQ8*8 >= M */ int allocQ16; /* current set row width in 16-mers: allocQ16*16 >= M */ size_t ncells; /* current allocation size of , in accessible cells */ /* The X states (for full,parser; or NULL, for scorer) */ float *xmx; /* logically [0.1..L][ENJBCS]; indexed [i*p7X_NXCELLS+s] */ void *x_mem; /* X memory before 16-byte alignment */ int allocXR; /* # of rows allocated in each xmx[] array; allocXR >= L+1 */ float totscale; /* log of the product of all scale factors (0.0 if unscaled) */ int has_own_scales; /* TRUE to use own scale factors; FALSE if scales provided */ /* Parsers,scorers only hold a row at a time, so to get them to dump full matrix, it * must be done during a DP calculation, after each row is calculated */ int debugging; /* TRUE if we're in debugging mode */ FILE *dfp; /* output stream for diagnostics */ } P7_OMX; /* ?MXo(q) access macros work for either uchar or float, so long as you * init your "dp" to point to the appropriate array. */ #define MMXo(q) (dp[(q) * p7X_NSCELLS + p7X_M]) #define DMXo(q) (dp[(q) * p7X_NSCELLS + p7X_D]) #define IMXo(q) (dp[(q) * p7X_NSCELLS + p7X_I]) #define XMXo(i,s) (xmx[(i) * p7X_NXCELLS + s]) /* and this version works with a ptr to the approp DP row. */ #define MMO(dp,q) ((dp)[(q) * p7X_NSCELLS + p7X_M]) #define DMO(dp,q) ((dp)[(q) * p7X_NSCELLS + p7X_D]) #define IMO(dp,q) ((dp)[(q) * p7X_NSCELLS + p7X_I]) static inline float p7_omx_FGetMDI(const P7_OMX *ox, int s, int i, int k) { union { __m128 v; float p[4]; } u; int Q = p7O_NQF(ox->M); int q = p7X_NSCELLS * ((k-1) % Q) + s; int r = (k-1)/Q; u.v = ox->dpf[i][q]; return u.p[r]; } static inline void p7_omx_FSetMDI(const P7_OMX *ox, int s, int i, int k, float val) { union { __m128 v; float p[4]; } u; int Q = p7O_NQF(ox->M); int q = p7X_NSCELLS * ((k-1) % Q) + s; int r = (k-1)/Q; u.v = ox->dpf[i][q]; u.p[r] = val; ox->dpf[i][q] = u.v; } /***************************************************************** * 3. Declarations of the external API. *****************************************************************/ /* p7_omx.c */ extern P7_OMX *p7_omx_Create(int allocM, int allocL, int allocXL); extern int p7_omx_GrowTo(P7_OMX *ox, int allocM, int allocL, int allocXL); extern int p7_omx_FDeconvert(P7_OMX *ox, P7_GMX *gx); extern int p7_omx_Reuse (P7_OMX *ox); extern void p7_omx_Destroy(P7_OMX *ox); extern int p7_omx_SetDumpMode(FILE *fp, P7_OMX *ox, int truefalse); extern int p7_omx_DumpMFRow(P7_OMX *ox, int rowi, uint8_t xE, uint8_t xN, uint8_t xJ, uint8_t xB, uint8_t xC); extern int p7_omx_DumpVFRow(P7_OMX *ox, int rowi, int16_t xE, int16_t xN, int16_t xJ, int16_t xB, int16_t xC); extern int p7_omx_DumpFBRow(P7_OMX *ox, int logify, int rowi, int width, int precision, float xE, float xN, float xJ, float xB, float xC); /* p7_oprofile.c */ extern P7_OPROFILE *p7_oprofile_Create(int M, const ESL_ALPHABET *abc); extern int p7_oprofile_IsLocal(const P7_OPROFILE *om); extern void p7_oprofile_Destroy(P7_OPROFILE *om); extern size_t p7_oprofile_Sizeof(P7_OPROFILE *om); extern P7_OPROFILE *p7_oprofile_Copy(P7_OPROFILE *om); extern P7_OPROFILE *p7_oprofile_Clone(const P7_OPROFILE *om); extern int p7_oprofile_UpdateFwdEmissionScores(P7_OPROFILE *om, P7_BG *bg, float *fwd_emissions, float *sc_arr); extern int p7_oprofile_UpdateVitEmissionScores(P7_OPROFILE *om, P7_BG *bg, float *fwd_emissions, float *sc_arr); extern int p7_oprofile_UpdateMSVEmissionScores(P7_OPROFILE *om, P7_BG *bg, float *fwd_emissions, float *sc_arr); extern int p7_oprofile_Convert(const P7_PROFILE *gm, P7_OPROFILE *om); extern int p7_oprofile_ReconfigLength (P7_OPROFILE *om, int L); extern int p7_oprofile_ReconfigMSVLength (P7_OPROFILE *om, int L); extern int p7_oprofile_ReconfigRestLength(P7_OPROFILE *om, int L); extern int p7_oprofile_ReconfigMultihit (P7_OPROFILE *om, int L); extern int p7_oprofile_ReconfigUnihit (P7_OPROFILE *om, int L); extern int p7_oprofile_Dump(FILE *fp, const P7_OPROFILE *om); extern int p7_oprofile_Sample(ESL_RANDOMNESS *r, const ESL_ALPHABET *abc, const P7_BG *bg, int M, int L, P7_HMM **opt_hmm, P7_PROFILE **opt_gm, P7_OPROFILE **ret_om); extern int p7_oprofile_Compare(const P7_OPROFILE *om1, const P7_OPROFILE *om2, float tol, char *errmsg); extern int p7_profile_SameAsMF(const P7_OPROFILE *om, P7_PROFILE *gm); extern int p7_profile_SameAsVF(const P7_OPROFILE *om, P7_PROFILE *gm); extern int p7_oprofile_GetFwdTransitionArray(const P7_OPROFILE *om, int type, float *arr ); extern int p7_oprofile_GetSSVEmissionScoreArray(const P7_OPROFILE *om, uint8_t *arr ); extern int p7_oprofile_GetFwdEmissionScoreArray(const P7_OPROFILE *om, float *arr ); extern int p7_oprofile_GetFwdEmissionArray(const P7_OPROFILE *om, P7_BG *bg, float *arr ); /* decoding.c */ extern int p7_Decoding (const P7_OPROFILE *om, const P7_OMX *oxf, P7_OMX *oxb, P7_OMX *pp); extern int p7_DomainDecoding(const P7_OPROFILE *om, const P7_OMX *oxf, const P7_OMX *oxb, P7_DOMAINDEF *ddef); /* fwdback.c */ extern int p7_Forward (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *fwd, float *opt_sc); extern int p7_ForwardParser (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *fwd, float *opt_sc); extern int p7_Backward (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc); extern int p7_BackwardParser(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc); /* io.c */ extern int p7_oprofile_Write(FILE *ffp, FILE *pfp, P7_OPROFILE *om); extern int p7_oprofile_ReadMSV (P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OPROFILE **ret_om); extern int p7_oprofile_ReadInfoMSV(P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OPROFILE **ret_om); extern int p7_oprofile_ReadBlockMSV(P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OM_BLOCK *hmmBlock); extern int p7_oprofile_ReadRest(P7_HMMFILE *hfp, P7_OPROFILE *om); extern int p7_oprofile_Position(P7_HMMFILE *hfp, off_t offset); extern P7_OM_BLOCK *p7_oprofile_CreateBlock(int size); extern void p7_oprofile_DestroyBlock(P7_OM_BLOCK *block); /* ssvfilter.c */ extern int p7_SSVFilter (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, float *ret_sc); /* msvfilter.c */ extern int p7_MSVFilter (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc); extern int p7_SSVFilter_longtarget(const ESL_DSQ *dsq, int L, P7_OPROFILE *om, P7_OMX *ox, const P7_SCOREDATA *msvdata, P7_BG *bg, double P, P7_HMM_WINDOWLIST *windowlist); /* null2.c */ extern int p7_Null2_ByExpectation(const P7_OPROFILE *om, const P7_OMX *pp, float *null2); extern int p7_Null2_ByTrace (const P7_OPROFILE *om, const P7_TRACE *tr, int zstart, int zend, P7_OMX *wrk, float *null2); /* optacc.c */ extern int p7_OptimalAccuracy(const P7_OPROFILE *om, const P7_OMX *pp, P7_OMX *ox, float *ret_e); extern int p7_OATrace (const P7_OPROFILE *om, const P7_OMX *pp, const P7_OMX *ox, P7_TRACE *tr); /* stotrace.c */ extern int p7_StochasticTrace(ESL_RANDOMNESS *rng, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *ox, P7_TRACE *tr); /* vitfilter.c */ extern int p7_ViterbiFilter(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc); extern int p7_ViterbiFilter_longtarget(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float filtersc, double P, P7_HMM_WINDOWLIST *windowlist); /* vitscore.c */ extern int p7_ViterbiScore (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc); /***************************************************************** * 4. Implementation specific initialization *****************************************************************/ static inline void impl_Init(void) { #ifdef HAVE_FLUSH_ZERO_MODE /* In order to avoid the performance penalty dealing with sub-normal * values in the floating point calculations, set the processor flag * so sub-normals are "flushed" immediately to zero. */ _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON); #endif #ifdef _PMMINTRIN_H_INCLUDED /* * FLUSH_ZERO doesn't necessarily work in non-SIMD calculations * (yes on 64-bit, maybe not of 32-bit). This ensures that those * scalar calculations will agree across architectures. * (See TW notes 2012/0106_printf_underflow_bug/00NOTES for details) */ _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON); #endif } #endif /* P7_IMPL_SSE_INCLUDED */ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ /* * Currently (and this remains in flux as of 14 Dec 07) an optimized * implementation is required to provide an MSVFilter(), * ViterbiFilter() and a ForwardFilter() implementation. A call to * p7_oprofile_Convert() makes an optimized profile that works for * all filters. * * Any "Filter" returns a score may be an approximation (with * characterized or at least characterizable error), and which may * have limited upper range, such that high scores are returned as * eslINFINITY. Additionally, Filters might only work on local * alignment modes, because they are allowed to make assumptions about * the range of scores. * * Here, MSVFilter() and ViterbiFilter() are 8-bit lspace * implementations with limited precision and limited range (max 20 * bits); ForwardFilter() is a pspace float implementation with * correct precision and limited range (max ~127 bits). Both require * local mode models. * * An optimized implementation may also provide other optimized * routines. It provides specialized Convert*() functions for these, * which may no-op (if the OPROFILE already suffices), or may * overwrite parts of the OPROFILE that Filters or other routines * might need. Therefore, after using a "bonus" function, a fresh * Convert() will be needed before a Filter() is called again. This * API is tentative. * * For example, here, ViterbiScore() is a 32-bit lspace float SSE * implementation of the Viterbi algorithm. * * A "Score" function might be an additional target for optimization, * for example. A "Score" function returns a correct score with full * floating-point precision and range, and works for any mode model. * * In the generic implementation, profile scores are 32-bit floating * point log-odds scores. In an optimized implementation, internally, * profile scores can be of any type, and may be in log space (lspace) * or probability space (pspace). (Calculations in probability space * are useful in the Forward algorithm, but always limit range.) A * shorthand of "lspace uchar" means log-odds scores stored as * unsigned chars, for example; "pspace float" means odds ratios * stored as floats. * * A note on memory alignment: malloc() is required to return a * pointer "suitably aligned so that it may be aligned to a pointer of * any type of object" (C99 7.20.3). __m128 vectors are 128-bits wide, * so malloc() ought to return a pointer aligned on a 16-byte * boundary. However, this is not the case for glibc, and apparently * other system libraries. Google turns up threads of arguments * between glibc and gcc developers over whose problem this is; this * argument has apparently not been resolved, and is of no help. * Here, we manually align the relevant pointers by overallocating in * *_mem with malloc, then arithmetically manipulating the address to * mask off (~0xf). */ hmmer-3.1b2/src/impl_sse/.dropbox.attr0000775361611702660230000000000212473271741017317 0ustar wheelerteddy{}hmmer-3.1b2/src/impl_sse/decoding.c0000664361611702660230000004033012473612613016612 0ustar wheelerteddy/* Posterior decoding algorithms; SSE versions. * * Contents: * 1. Posterior decoding algorithms. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * SRE, Mon Aug 18 08:15:50 2008 [Janelia] * SVN $Id: decoding.c 3665 2011-08-25 13:45:55Z eddys $ */ #include "p7_config.h" #include #include #include /* SSE */ #include /* SSE2 */ #include "easel.h" #include "esl_sse.h" #include "hmmer.h" #include "impl_sse.h" /***************************************************************** * 1. Posterior decoding algorithms. *****************************************************************/ /* Function: p7_Decoding() * Synopsis: Posterior decoding of residue assignment. * Incept: SRE, Fri Aug 8 14:29:42 2008 [UA217 to SFO] * * Purpose: Identical to except that , , * are SSE optimized versions. See * documentation for more info. * * Args: om - profile (must be the same that was used to fill , ). * oxf - filled Forward matrix * oxb - filled Backward matrix * pp - RESULT: posterior decoding matrix. * * Returns: on success. * * Returns if numeric range of floating-point * values is exceeded during posterior probability * calculations. In this case, the matrix must not be * used by the caller; it will contain values. To be * safe, the caller should recalculate a generic posterior * decoding matrix instead -- generic calculations are done * in log probability space and are robust. * * However, I currently believe that this overflow only * occurs on an unusual and ignorable situation: when a * model is used on a region that contains * two or more high scoring distinct alignments to the * model. And that only happens if domain definition fails, * after stochastic clustering, and an envelope that we * pass to p7_domaindef.c::rescore_isolated_domain() * erroneously contains 2+ distinct domains. (Note that * this is different from having 2+ expected B states: that * can happen normally, if a single consistent domain is * better described by 2+ passes through the model). And I * strongly believe all this only can happen on repetitive * or biased-composition junk that we want to ignore anyway. * Therefore the caller should be safe in ignoring any domain * for which returns . * * Exception (bug #h68): see hmmalign.c, where the model is * in unilocal mode, and it is entirely possible for the * user to give us a multidomain protein. * * Throws: (no abnormal error conditions) * * Xref: [J3/119-121]: for analysis of numeric range issues when * overflows. */ int p7_Decoding(const P7_OPROFILE *om, const P7_OMX *oxf, P7_OMX *oxb, P7_OMX *pp) { __m128 *ppv; __m128 *fv; __m128 *bv; __m128 totrv; int L = oxf->L; int M = om->M; int Q = p7O_NQF(M); int i,q; float scaleproduct = 1.0 / oxb->xmx[p7X_N]; pp->M = M; pp->L = L; ppv = pp->dpf[0]; for (q = 0; q < Q; q++) { *ppv = _mm_setzero_ps(); ppv++; *ppv = _mm_setzero_ps(); ppv++; *ppv = _mm_setzero_ps(); ppv++; } pp->xmx[p7X_E] = 0.0; pp->xmx[p7X_N] = 0.0; pp->xmx[p7X_J] = 0.0; pp->xmx[p7X_C] = 0.0; pp->xmx[p7X_B] = 0.0; for (i = 1; i <= L; i++) { ppv = pp->dpf[i]; fv = oxf->dpf[i]; bv = oxb->dpf[i]; totrv = _mm_set1_ps(scaleproduct * oxf->xmx[i*p7X_NXCELLS+p7X_SCALE]); for (q = 0; q < Q; q++) { /* M */ *ppv = _mm_mul_ps(*fv, *bv); *ppv = _mm_mul_ps(*ppv, totrv); ppv++; fv++; bv++; /* D */ *ppv = _mm_setzero_ps(); ppv++; fv++; bv++; /* I */ *ppv = _mm_mul_ps(*fv, *bv); *ppv = _mm_mul_ps(*ppv, totrv); ppv++; fv++; bv++; } pp->xmx[i*p7X_NXCELLS+p7X_E] = 0.0; pp->xmx[i*p7X_NXCELLS+p7X_N] = oxf->xmx[(i-1)*p7X_NXCELLS+p7X_N] * oxb->xmx[i*p7X_NXCELLS+p7X_N] * om->xf[p7O_N][p7O_LOOP] * scaleproduct; pp->xmx[i*p7X_NXCELLS+p7X_J] = oxf->xmx[(i-1)*p7X_NXCELLS+p7X_J] * oxb->xmx[i*p7X_NXCELLS+p7X_J] * om->xf[p7O_J][p7O_LOOP] * scaleproduct; pp->xmx[i*p7X_NXCELLS+p7X_C] = oxf->xmx[(i-1)*p7X_NXCELLS+p7X_C] * oxb->xmx[i*p7X_NXCELLS+p7X_C] * om->xf[p7O_C][p7O_LOOP] * scaleproduct; pp->xmx[i*p7X_NXCELLS+p7X_B] = 0.0; if (oxb->has_own_scales) scaleproduct *= oxf->xmx[i*p7X_NXCELLS+p7X_SCALE] / oxb->xmx[i*p7X_NXCELLS+p7X_SCALE]; } if (isinf(scaleproduct)) return eslERANGE; else return eslOK; } /* Function: p7_DomainDecoding() * Synopsis: Posterior decoding of domain location. * Incept: SRE, Tue Aug 5 08:39:07 2008 [Janelia] * * Purpose: Identical to except that , , * are SSE optimized versions. See * documentation for more info. * * Args: gm - profile * oxf - filled Forward matrix * oxb - filled Backward matrix * ddef - container for the results. * * Returns: on success. * * on numeric overflow. See commentary in * . * * Throws: (no abnormal error conditions) */ int p7_DomainDecoding(const P7_OPROFILE *om, const P7_OMX *oxf, const P7_OMX *oxb, P7_DOMAINDEF *ddef) { int L = oxf->L; float scaleproduct = 1.0 / oxb->xmx[p7X_N]; float njcp; int i; ddef->btot[0] = 0.0; ddef->etot[0] = 0.0; ddef->mocc[0] = 0.0; for (i = 1; i <= L; i++) { /* scaleproduct is prod_j=0^i-2 now */ ddef->btot[i] = ddef->btot[i-1] + (oxf->xmx[(i-1)*p7X_NXCELLS+p7X_B] * oxb->xmx[(i-1)*p7X_NXCELLS+p7X_B] * oxf->xmx[(i-1)*p7X_NXCELLS+p7X_SCALE] * scaleproduct); if (oxb->has_own_scales) scaleproduct *= oxf->xmx[(i-1)*p7X_NXCELLS+p7X_SCALE] / oxb->xmx[(i-1)*p7X_NXCELLS+p7X_SCALE]; /* scaleproduct is prod_j=0^i-1 now */ ddef->etot[i] = ddef->etot[i-1] + (oxf->xmx[i*p7X_NXCELLS+p7X_E] * oxb->xmx[i*p7X_NXCELLS+p7X_E] * oxf->xmx[i*p7X_NXCELLS+p7X_SCALE] * scaleproduct); njcp = oxf->xmx[(i-1)*p7X_NXCELLS+p7X_N] * oxb->xmx[i*p7X_NXCELLS+p7X_N] * om->xf[p7O_N][p7O_LOOP] * scaleproduct; njcp += oxf->xmx[(i-1)*p7X_NXCELLS+p7X_J] * oxb->xmx[i*p7X_NXCELLS+p7X_J] * om->xf[p7O_J][p7O_LOOP] * scaleproduct; njcp += oxf->xmx[(i-1)*p7X_NXCELLS+p7X_C] * oxb->xmx[i*p7X_NXCELLS+p7X_C] * om->xf[p7O_C][p7O_LOOP] * scaleproduct; ddef->mocc[i] = 1. - njcp; } ddef->L = oxf->L; if (isinf(scaleproduct)) return eslERANGE; else return eslOK; } /*------------------ end, posterior decoding --------------------*/ /***************************************************************** * 2. Benchmark driver *****************************************************************/ #ifdef p7DECODING_BENCHMARK /* icc -O3 -static -o decoding_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7DECODING_BENCHMARK decoding.c -lhmmer -leasel -lm ./decoding_benchmark RRM_1 (M=72) Caudal_act (M=136) SMC_N (M=1151) ----------------- ------------------ --------------- 21 Aug 08 3.52u (409 Mc/s) 15.36u (177 Mc/s) 318.78u (72.2 Mc/s) The length dependency probably indicates L1 cache missing; because we're manipulating 3 matrices at the same time, we can't fit the calculation in cache. */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for posterior residue decoding, SSE version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *fwd = NULL; P7_OMX *bck = NULL; P7_OMX *pp = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float fsc, bsc; double Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); fwd = p7_omx_Create(gm->M, L, L); bck = p7_omx_Create(gm->M, L, L); pp = p7_omx_Create(gm->M, L, L); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_Forward (dsq, L, om, fwd, &fsc); p7_Backward(dsq, L, om, fwd, bck, &bsc); esl_stopwatch_Start(w); for (i = 0; i < N; i++) p7_Decoding(om, fwd, bck, pp); esl_stopwatch_Stop(w); Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) w->user; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(fwd); p7_omx_Destroy(bck); p7_omx_Destroy(pp); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return eslOK; } #endif /*p7DECODING_BENCHMARK*/ /*------------------ end, benchmark driver ----------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7DECODING_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" /* compare results to GDecoding(). */ static void utest_decoding(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N, float tolerance) { char *msg = "decoding unit test failed"; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *fwd = p7_omx_Create(M, L, L); P7_OMX *bck = p7_omx_Create(M, L, L); P7_OMX *pp = p7_omx_Create(M, L, L); P7_GMX *gxf = p7_gmx_Create(M, L); P7_GMX *gxb = p7_gmx_Create(M, L); P7_GMX *gxp1 = p7_gmx_Create(M, L); P7_GMX *gxp2 = p7_gmx_Create(M, L); float fsc1, fsc2; float bsc1, bsc2; if (p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om) != eslOK) esl_fatal(msg); while (N--) { if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal(msg); if (p7_Forward (dsq, L, om, fwd, &fsc1) != eslOK) esl_fatal(msg); if (p7_Backward (dsq, L, om, fwd, bck, &bsc1) != eslOK) esl_fatal(msg); if (p7_Decoding(om, fwd, bck, pp) != eslOK) esl_fatal(msg); if (p7_omx_FDeconvert(pp, gxp1) != eslOK) esl_fatal(msg); if (p7_GForward (dsq, L, gm, gxf, &fsc2) != eslOK) esl_fatal(msg); if (p7_GBackward(dsq, L, gm, gxb, &bsc2) != eslOK) esl_fatal(msg); if (p7_GDecoding(gm, gxf, gxb, gxp2) != eslOK) esl_fatal(msg); // p7_gmx_Dump(stdout, gxp1, p7_DEFAULT); // p7_gmx_Dump(stdout, gxp2, p7_DEFAULT); if (p7_gmx_Compare(gxp1, gxp2, tolerance) != eslOK) esl_fatal(msg); } p7_gmx_Destroy(gxp1); p7_gmx_Destroy(gxp2); p7_gmx_Destroy(gxf); p7_gmx_Destroy(gxb); p7_omx_Destroy(fwd); p7_omx_Destroy(bck); p7_omx_Destroy(pp); free(dsq); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); } #endif /*p7DECODING_TESTDRIVE*/ /*--------------------- end, unit tests -------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7DECODING_TESTDRIVE /* gcc -o decoding_utest -msse2 -g -Wall -I.. -L.. -I../../easel -L../../easel -Dp7DECODING_TESTDRIVE decoding.c -lhmmer -leasel -lm ./decoding_utest */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-t", eslARG_REAL, "0.01", NULL, NULL, NULL, NULL, NULL, "floating point comparison tolerance", 0 }, { "-L", eslARG_INT, "40", NULL, NULL, NULL, NULL, NULL, "length of sampled sequences", 0 }, { "-M", eslARG_INT, "40", NULL, NULL, NULL, NULL, NULL, "length of sampled test profile", 0 }, { "-N", eslARG_INT, "10", NULL, NULL, NULL, NULL, NULL, "number of sampled test sequences", 0 }, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for SSE posterior decoding"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_BG *bg = p7_bg_Create(abc); int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); float tol = esl_opt_GetReal (go, "-t"); p7_FLogsumInit(); utest_decoding(r, abc, bg, M, L, N, tol); esl_getopts_Destroy(go); esl_randomness_Destroy(r); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); return eslOK; } #endif /*p7DECODING_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7DECODING_EXAMPLE #endif /*p7DECODING_EXAMPLE*/ /*------------------------ example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_sse/vitfilter.c0000664361611702660230000011153612473612613017055 0ustar wheelerteddy/* Viterbi filter implementation; SSE version. * * This is a SIMD vectorized, striped, interleaved, one-row, reduced * precision (epi16) implementation of the Viterbi algorithm. * * It calculates a close approximation of the Viterbi score, in * limited precision (signed words: 16 bits) and range. It may overflow on * high scoring sequences, but this indicates that the sequence is a * high-scoring hit worth examining more closely anyway. It will not * underflow, in local alignment mode. * * Contents: * 1. Viterbi filter implementation. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information */ #include "p7_config.h" #include #include #include /* SSE */ #include /* SSE2 */ #include "easel.h" #include "esl_sse.h" #include "esl_gumbel.h" #include "hmmer.h" #include "impl_sse.h" /***************************************************************** * 1. Viterbi filter implementation. *****************************************************************/ /* Function: p7_ViterbiFilter() * Synopsis: Calculates Viterbi score, vewy vewy fast, in limited precision. * Incept: SRE, Tue Nov 27 09:15:24 2007 [Janelia] * * Purpose: Calculates an approximation of the Viterbi score for sequence * of length residues, using optimized profile , * and a preallocated one-row DP matrix . Return the * estimated Viterbi score (in nats) in . * * Score may overflow (and will, on high-scoring * sequences), but will not underflow. * * The model must be in a local alignment mode; other modes * cannot provide the necessary guarantee of no underflow. * * This is a striped SIMD Viterbi implementation using Intel * SSE/SSE2 integer intrinsics \citep{Farrar07}, in reduced * precision (signed words, 16 bits). * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * ret_sc - RETURN: Viterbi score (in nats) * * Returns: on success; * if the score overflows; in this case * <*ret_sc> is , and the sequence can * be treated as a high-scoring hit. * * Throws: if allocation is too small, or if * profile isn't in a local alignment mode. (Must be in local * alignment mode because that's what helps us guarantee * limited dynamic range.) * * Xref: [Farrar07] for ideas behind striped SIMD DP. * J2/46-47 for layout of HMMER's striped SIMD DP. * J2/50 for single row DP. * J2/60 for reduced precision (epu8) * J2/65 for initial benchmarking * J2/66 for precision maximization * J4/138-140 for reimplementation in 16-bit precision */ int p7_ViterbiFilter(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc) { register __m128i mpv, dpv, ipv; /* previous row values */ register __m128i sv; /* temp storage of 1 curr row value in progress */ register __m128i dcv; /* delayed storage of D(i,q+1) */ register __m128i xEv; /* E state: keeps max for Mk->E as we go */ register __m128i xBv; /* B state: splatted vector of B[i-1] for B->Mk calculations */ register __m128i Dmaxv; /* keeps track of maximum D cell on row */ int16_t xE, xB, xC, xJ, xN; /* special states' scores */ int16_t Dmax; /* maximum D cell score on row */ int i; /* counter over sequence positions 1..L */ int q; /* counter over vectors 0..nq-1 */ int Q = p7O_NQW(om->M); /* segment length: # of vectors */ __m128i *dp = ox->dpw[0]; /* using {MDI}MX(q) macro requires initialization of */ __m128i *rsc; /* will point at om->ru[x] for residue x[i] */ __m128i *tsc; /* will point into (and step thru) om->tu */ __m128i negInfv; /* Check that the DP matrix is ok for us. */ if (Q > ox->allocQ8) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small"); if (om->mode != p7_LOCAL && om->mode != p7_UNILOCAL) ESL_EXCEPTION(eslEINVAL, "Fast filter only works for local alignment"); ox->M = om->M; /* -infinity is -32768 */ negInfv = _mm_set1_epi16(-32768); negInfv = _mm_srli_si128(negInfv, 14); /* negInfv = 16-byte vector, 14 0 bytes + 2-byte value=-32768, for an OR operation. */ /* Initialization. In unsigned arithmetic, -infinity is -32768 */ for (q = 0; q < Q; q++) MMXo(q) = IMXo(q) = DMXo(q) = _mm_set1_epi16(-32768); xN = om->base_w; xB = xN + om->xw[p7O_N][p7O_MOVE]; xJ = -32768; xC = -32768; xE = -32768; #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpVFRow(ox, 0, xE, 0, xJ, xB, xC); /* first 0 is : do header. second 0 is xN: always 0 here. */ #endif for (i = 1; i <= L; i++) { rsc = om->rwv[dsq[i]]; tsc = om->twv; dcv = _mm_set1_epi16(-32768); /* "-infinity" */ xEv = _mm_set1_epi16(-32768); Dmaxv = _mm_set1_epi16(-32768); xBv = _mm_set1_epi16(xB); /* Right shifts by 1 value (2 bytes). 4,8,12,x becomes x,4,8,12. * Because ia32 is littlendian, this means a left bit shift. * Zeros shift on automatically; replace it with -32768. */ mpv = MMXo(Q-1); mpv = _mm_slli_si128(mpv, 2); mpv = _mm_or_si128(mpv, negInfv); dpv = DMXo(Q-1); dpv = _mm_slli_si128(dpv, 2); dpv = _mm_or_si128(dpv, negInfv); ipv = IMXo(Q-1); ipv = _mm_slli_si128(ipv, 2); ipv = _mm_or_si128(ipv, negInfv); for (q = 0; q < Q; q++) { /* Calculate new MMXo(i,q); don't store it yet, hold it in sv. */ sv = _mm_adds_epi16(xBv, *tsc); tsc++; sv = _mm_max_epi16 (sv, _mm_adds_epi16(mpv, *tsc)); tsc++; sv = _mm_max_epi16 (sv, _mm_adds_epi16(ipv, *tsc)); tsc++; sv = _mm_max_epi16 (sv, _mm_adds_epi16(dpv, *tsc)); tsc++; sv = _mm_adds_epi16(sv, *rsc); rsc++; xEv = _mm_max_epi16(xEv, sv); /* Load {MDI}(i-1,q) into mpv, dpv, ipv; * {MDI}MX(q) is then the current, not the prev row */ mpv = MMXo(q); dpv = DMXo(q); ipv = IMXo(q); /* Do the delayed stores of {MD}(i,q) now that memory is usable */ MMXo(q) = sv; DMXo(q) = dcv; /* Calculate the next D(i,q+1) partially: M->D only; * delay storage, holding it in dcv */ dcv = _mm_adds_epi16(sv, *tsc); tsc++; Dmaxv = _mm_max_epi16(dcv, Dmaxv); /* Calculate and store I(i,q) */ sv = _mm_adds_epi16(mpv, *tsc); tsc++; IMXo(q)= _mm_max_epi16 (sv, _mm_adds_epi16(ipv, *tsc)); tsc++; } /* Now the "special" states, which start from Mk->E (->C, ->J->B) */ xE = esl_sse_hmax_epi16(xEv); if (xE >= 32767) { *ret_sc = eslINFINITY; return eslERANGE; } /* immediately detect overflow */ xN = xN + om->xw[p7O_N][p7O_LOOP]; xC = ESL_MAX(xC + om->xw[p7O_C][p7O_LOOP], xE + om->xw[p7O_E][p7O_MOVE]); xJ = ESL_MAX(xJ + om->xw[p7O_J][p7O_LOOP], xE + om->xw[p7O_E][p7O_LOOP]); xB = ESL_MAX(xJ + om->xw[p7O_J][p7O_MOVE], xN + om->xw[p7O_N][p7O_MOVE]); /* and now xB will carry over into next i, and xC carries over after i=L */ /* Finally the "lazy F" loop (sensu [Farrar07]). We can often * prove that we don't need to evaluate any D->D paths at all. * * The observation is that if we can show that on the next row, * B->M(i+1,k) paths always dominate M->D->...->D->M(i+1,k) paths * for all k, then we don't need any D->D calculations. * * The test condition is: * max_k D(i,k) + max_k ( TDD(k-2) + TDM(k-1) - TBM(k) ) < xB(i) * So: * max_k (TDD(k-2) + TDM(k-1) - TBM(k)) is precalc'ed in om->dd_bound; * max_k D(i,k) is why we tracked Dmaxv; * xB(i) was just calculated above. */ Dmax = esl_sse_hmax_epi16(Dmaxv); if (Dmax + om->ddbound_w > xB) { /* Now we're obligated to do at least one complete DD path to be sure. */ /* dcv has carried through from end of q loop above */ dcv = _mm_slli_si128(dcv, 2); dcv = _mm_or_si128(dcv, negInfv); tsc = om->twv + 7*Q; /* set tsc to start of the DD's */ for (q = 0; q < Q; q++) { DMXo(q) = _mm_max_epi16(dcv, DMXo(q)); dcv = _mm_adds_epi16(DMXo(q), *tsc); tsc++; } /* We may have to do up to three more passes; the check * is for whether crossing a segment boundary can improve * our score. */ do { dcv = _mm_slli_si128(dcv, 2); dcv = _mm_or_si128(dcv, negInfv); tsc = om->twv + 7*Q; /* set tsc to start of the DD's */ for (q = 0; q < Q; q++) { if (! esl_sse_any_gt_epi16(dcv, DMXo(q))) break; DMXo(q) = _mm_max_epi16(dcv, DMXo(q)); dcv = _mm_adds_epi16(DMXo(q), *tsc); tsc++; } } while (q == Q); } else /* not calculating DD? then just store the last M->D vector calc'ed.*/ { dcv = _mm_slli_si128(dcv, 2); DMXo(0) = _mm_or_si128(dcv, negInfv); } #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpVFRow(ox, i, xE, 0, xJ, xB, xC); #endif } /* end loop over sequence residues 1..L */ /* finally C->T */ if (xC > -32768) { *ret_sc = (float) xC + (float) om->xw[p7O_C][p7O_MOVE] - (float) om->base_w; /* *ret_sc += L * om->ncj_roundoff; see J4/150 for rationale: superceded by -3.0nat approximation*/ *ret_sc /= om->scale_w; *ret_sc -= 3.0; /* the NN/CC/JJ=0,-3nat approximation: see J5/36. That's ~ L \log \frac{L}{L+3}, for our NN,CC,JJ contrib */ } else *ret_sc = -eslINFINITY; return eslOK; } /*---------------- end, p7_ViterbiFilter() ----------------------*/ /* Function: p7_ViterbiFilter_longtarget() * Synopsis: Finds windows within potentially long sequence blocks with Viterbi * scores above threshold (vewy vewy fast, in limited precision) * * Purpose: Calculates an approximation of the Viterbi score for regions * of sequence , using optimized profile , and a pre- * allocated one-row DP matrix , and captures the positions * at which such regions exceed the score required to be * significant in the eyes of the calling function (usually * p=0.001). * * The resulting landmarks are converted to subsequence * windows by the calling function * * The model must be in a local alignment mode; other modes * cannot provide the necessary guarantee of no underflow. * * This is a striped SIMD Viterbi implementation using Intel * SSE/SSE2 integer intrinsics \citep{Farrar07}, in reduced * precision (signed words, 16 bits). * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * filtersc - null or bias correction, required for translating a P-value threshold into a score threshold * P - p-value below which a region is captured as being above threshold * windowlist - RETURN: preallocated array of hit windows (start and end of diagonal) for the above-threshold areas * * Returns: on success; * * Throws: if allocation is too small, or if * profile isn't in a local alignment mode. (Must be in local * alignment mode because that's what helps us guarantee * limited dynamic range.) * * Xref: See p7_ViterbiFilter() */ int p7_ViterbiFilter_longtarget(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float filtersc, double P, P7_HMM_WINDOWLIST *windowlist) { register __m128i mpv, dpv, ipv; /* previous row values */ register __m128i sv; /* temp storage of 1 curr row value in progress */ register __m128i dcv; /* delayed storage of D(i,q+1) */ register __m128i xEv; /* E state: keeps max for Mk->E as we go */ register __m128i xBv; /* B state: splatted vector of B[i-1] for B->Mk calculations */ register __m128i Dmaxv; /* keeps track of maximum D cell on row */ int16_t xE, xB, xC, xJ, xN; /* special states' scores */ int16_t Dmax; /* maximum D cell score on row */ int i; /* counter over sequence positions 1..L */ int q; /* counter over vectors 0..nq-1 */ int Q = p7O_NQW(om->M); /* segment length: # of vectors */ __m128i *dp = ox->dpw[0]; /* using {MDI}MX(q) macro requires initialization of */ __m128i *rsc; /* will point at om->ru[x] for residue x[i] */ __m128i *tsc; /* will point into (and step thru) om->tu */ __m128i negInfv; int16_t sc_thresh; float invP; int z; union { __m128i v; int16_t i[8]; } tmp; windowlist->count = 0; /* * In p7_ViterbiFilter, converting from a scaled int Viterbi score * S (aka xE the score getting to state E) to a probability * goes like this: * vsc = S + om->xw[p7O_E][p7O_MOVE] + om->xw[p7O_C][p7O_MOVE] - om->base_w * ret_sc /= om->scale_w; * vsc -= 3.0; * P = esl_gumbel_surv((vfsc - filtersc) / eslCONST_LOG2 , om->evparam[p7_VMU], om->evparam[p7_VLAMBDA]); * and we're computing the threshold vsc, so invert it: * (vsc - filtersc) / eslCONST_LOG2 = esl_gumbel_invsurv( P, om->evparam[p7_VMU], om->evparam[p7_VLAMBDA]) * vsc = filtersc + eslCONST_LOG2 * esl_gumbel_invsurv( P, om->evparam[p7_VMU], om->evparam[p7_VLAMBDA]) * vsc += 3.0 * vsc *= om->scale_w * S = vsc - (float)om->xw[p7O_E][p7O_MOVE] - (float)om->xw[p7O_C][p7O_MOVE] + (float)om->base_w */ invP = esl_gumbel_invsurv(P, om->evparam[p7_VMU], om->evparam[p7_VLAMBDA]); sc_thresh = (int) ceil ( ( (filtersc + (eslCONST_LOG2 * invP) + 3.0) * om->scale_w ) - (float)om->xw[p7O_E][p7O_MOVE] - (float)om->xw[p7O_C][p7O_MOVE] + (float)om->base_w ); /* Check that the DP matrix is ok for us. */ if (Q > ox->allocQ8) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small"); if (om->mode != p7_LOCAL && om->mode != p7_UNILOCAL) ESL_EXCEPTION(eslEINVAL, "Fast filter only works for local alignment"); ox->M = om->M; /* -infinity is -32768 */ negInfv = _mm_set1_epi16(-32768); negInfv = _mm_srli_si128(negInfv, 14); /* negInfv = 16-byte vector, 14 0 bytes + 2-byte value=-32768, for an OR operation. */ /* Initialization. In unsigned arithmetic, -infinity is -32768 */ for (q = 0; q < Q; q++) MMXo(q) = IMXo(q) = DMXo(q) = _mm_set1_epi16(-32768); xN = om->base_w; xB = xN + om->xw[p7O_N][p7O_MOVE]; xJ = -32768; xC = -32768; xE = -32768; #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpVFRow(ox, 0, xE, 0, xJ, xB, xC); /* first 0 is : do header. second 0 is xN: always 0 here. */ #endif for (i = 1; i <= L; i++) { rsc = om->rwv[dsq[i]]; tsc = om->twv; dcv = _mm_set1_epi16(-32768); /* "-infinity" */ xEv = _mm_set1_epi16(-32768); Dmaxv = _mm_set1_epi16(-32768); xBv = _mm_set1_epi16(xB); /* Right shifts by 1 value (2 bytes). 4,8,12,x becomes x,4,8,12. * Because ia32 is littlendian, this means a left bit shift. * Zeros shift on automatically; replace it with -32768. */ mpv = MMXo(Q-1); mpv = _mm_slli_si128(mpv, 2); mpv = _mm_or_si128(mpv, negInfv); dpv = DMXo(Q-1); dpv = _mm_slli_si128(dpv, 2); dpv = _mm_or_si128(dpv, negInfv); ipv = IMXo(Q-1); ipv = _mm_slli_si128(ipv, 2); ipv = _mm_or_si128(ipv, negInfv); for (q = 0; q < Q; q++) { /* Calculate new MMXo(i,q); don't store it yet, hold it in sv. */ sv = _mm_adds_epi16(xBv, *tsc); tsc++; sv = _mm_max_epi16 (sv, _mm_adds_epi16(mpv, *tsc)); tsc++; sv = _mm_max_epi16 (sv, _mm_adds_epi16(ipv, *tsc)); tsc++; sv = _mm_max_epi16 (sv, _mm_adds_epi16(dpv, *tsc)); tsc++; sv = _mm_adds_epi16(sv, *rsc); rsc++; xEv = _mm_max_epi16(xEv, sv); /* Load {MDI}(i-1,q) into mpv, dpv, ipv; * {MDI}MX(q) is then the current, not the prev row */ mpv = MMXo(q); dpv = DMXo(q); ipv = IMXo(q); /* Do the delayed stores of {MD}(i,q) now that memory is usable */ MMXo(q) = sv; DMXo(q) = dcv; /* Calculate the next D(i,q+1) partially: M->D only; * delay storage, holding it in dcv */ dcv = _mm_adds_epi16(sv, *tsc); tsc++; Dmaxv = _mm_max_epi16(dcv, Dmaxv); /* Calculate and store I(i,q) */ sv = _mm_adds_epi16(mpv, *tsc); tsc++; IMXo(q)= _mm_max_epi16 (sv, _mm_adds_epi16(ipv, *tsc)); tsc++; } /* Now the "special" states, which start from Mk->E (->C, ->J->B) */ xE = esl_sse_hmax_epi16(xEv); if (xE >= sc_thresh) { //hit score threshold. Add a window to the list, then reset scores. /* Unpack and unstripe, then find the position responsible for the hit */ for (q = 0; q < Q; q++) { tmp.v = MMXo(q); for (z = 0; z < 8; z++) { // unstripe if ( tmp.i[z] == xE && (q+Q*z+1) <= om->M) { // (q+Q*z+1) is the model position k at which the xE score is found p7_hmmwindow_new(windowlist, 0, i, i-1, (q+Q*z+1), 1, 0.0, p7_NOCOMPLEMENT, L ); } } MMXo(q) = IMXo(q) = DMXo(q) = _mm_set1_epi16(-32768); //reset score to start search for next vit window. } } else { xN = xN + om->xw[p7O_N][p7O_LOOP]; xC = ESL_MAX(xC + om->xw[p7O_C][p7O_LOOP], xE + om->xw[p7O_E][p7O_MOVE]); xJ = ESL_MAX(xJ + om->xw[p7O_J][p7O_LOOP], xE + om->xw[p7O_E][p7O_LOOP]); xB = ESL_MAX(xJ + om->xw[p7O_J][p7O_MOVE], xN + om->xw[p7O_N][p7O_MOVE]); /* and now xB will carry over into next i, and xC carries over after i=L */ /* Finally the "lazy F" loop (sensu [Farrar07]). We can often * prove that we don't need to evaluate any D->D paths at all. * * The observation is that if we can show that on the next row, * B->M(i+1,k) paths always dominate M->D->...->D->M(i+1,k) paths * for all k, then we don't need any D->D calculations. * * The test condition is: * max_k D(i,k) + max_k ( TDD(k-2) + TDM(k-1) - TBM(k) ) < xB(i) * So: * max_k (TDD(k-2) + TDM(k-1) - TBM(k)) is precalc'ed in om->dd_bound; * max_k D(i,k) is why we tracked Dmaxv; * xB(i) was just calculated above. */ Dmax = esl_sse_hmax_epi16(Dmaxv); if (Dmax + om->ddbound_w > xB) { /* Now we're obligated to do at least one complete DD path to be sure. */ /* dcv has carried through from end of q loop above */ dcv = _mm_slli_si128(dcv, 2); dcv = _mm_or_si128(dcv, negInfv); tsc = om->twv + 7*Q; /* set tsc to start of the DD's */ for (q = 0; q < Q; q++) { DMXo(q) = _mm_max_epi16(dcv, DMXo(q)); dcv = _mm_adds_epi16(DMXo(q), *tsc); tsc++; } /* We may have to do up to three more passes; the check * is for whether crossing a segment boundary can improve * our score. */ do { dcv = _mm_slli_si128(dcv, 2); dcv = _mm_or_si128(dcv, negInfv); tsc = om->twv + 7*Q; /* set tsc to start of the DD's */ for (q = 0; q < Q; q++) { if (! esl_sse_any_gt_epi16(dcv, DMXo(q))) break; DMXo(q) = _mm_max_epi16(dcv, DMXo(q)); dcv = _mm_adds_epi16(DMXo(q), *tsc); tsc++; } } while (q == Q); } else /* not calculating DD? then just store the last M->D vector calc'ed.*/ { dcv = _mm_slli_si128(dcv, 2); DMXo(0) = _mm_or_si128(dcv, negInfv); } } #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpVFRow(ox, i, xE, 0, xJ, xB, xC); #endif } /* end loop over sequence residues 1..L */ return eslOK; } /*---------------- end, p7_ViterbiFilter_longtarget() ----------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ #ifdef p7VITFILTER_BENCHMARK /* -c, -x are used for debugging, testing; see msvfilter.c for explanation */ /* gcc -o vitfilter_benchmark -std=gnu99 -g -Wall -msse2 -I.. -L.. -I../../easel -L../../easel -Dp7VITFILTER_BENCHMARK vitfilter.c -lhmmer -leasel -lm icc -o vitfilter_benchmark -O3 -static -I.. -L.. -I../../easel -L../../easel -Dp7VITFILTER_BENCHMARK vitfilter.c -lhmmer -leasel -lm ./benchmark-vitfilter runs benchmark ./benchmark-vitfilter -N100 -c compare scores to generic impl ./benchmark-vitfilter -N100 -x compare scores to exact emulation */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for Viterbi filter"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc1, sc2; double base_time, bench_time, Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); if (esl_opt_GetBoolean(go, "-x")) p7_profile_SameAsVF(om, gm); ox = p7_omx_Create(gm->M, 0, 0); gx = p7_gmx_Create(gm->M, L); /* Get a baseline time: how long it takes just to generate the sequences */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; /* Run the benchmark */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_ViterbiFilter(dsq, L, om, ox, &sc1); if (esl_opt_GetBoolean(go, "-c")) { p7_GViterbi(dsq, L, gm, gx, &sc2); printf("%.4f %.4f\n", sc1, sc2); } if (esl_opt_GetBoolean(go, "-x")) { p7_GViterbi(dsq, L, gm, gx, &sc2); sc2 /= om->scale_w; if (om->mode == p7_UNILOCAL) sc2 -= 2.0; /* that's ~ L \log \frac{L}{L+2}, for our NN,CC,JJ */ else if (om->mode == p7_LOCAL) sc2 -= 3.0; /* that's ~ L \log \frac{L}{L+3}, for our NN,CC,JJ */ printf("%.4f %.4f\n", sc1, sc2); } } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7VITFILTER_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 3. Unit tests. *****************************************************************/ #ifdef p7VITFILTER_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" /* ViterbiFilter() unit test * * We can check that scores are identical (within machine error) to * scores of generic DP with scores rounded the same way. Do this for * a random model of length , for test sequences of length . * * We assume that we don't accidentally generate a high-scoring random * sequence that overflows ViterbiFilter()'s limited range. * */ static void utest_viterbi_filter(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *ox = p7_omx_Create(M, 0, 0); P7_GMX *gx = p7_gmx_Create(M, L); float sc1, sc2; p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om); p7_profile_SameAsVF(om, gm); /* round and scale the scores in the same as in */ #if 0 p7_oprofile_Dump(stdout, om); // dumps the optimized profile p7_omx_SetDumpMode(stdout, ox, TRUE); // makes the fast DP algorithms dump their matrices #endif while (N--) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_ViterbiFilter(dsq, L, om, ox, &sc1); p7_GViterbi (dsq, L, gm, gx, &sc2); #if 0 p7_gmx_Dump(stdout, gx, p7_DEFAULT); // dumps a generic DP matrix #endif sc2 /= om->scale_w; sc2 -= 3.0; if (fabs(sc1-sc2) > 0.001) esl_fatal("viterbi filter unit test failed: scores differ (%.2f, %.2f)", sc1, sc2); } free(dsq); p7_hmm_Destroy(hmm); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); } #endif /*p7VITFILTER_TESTDRIVE*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7VITFILTER_TESTDRIVE /* gcc -g -Wall -msse2 -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o vitfilter_utest -Dp7VITFILTER_TESTDRIVE vitfilter.c -lhmmer -leasel -lm ./vitfilter_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "-L", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "145", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for the SSE implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* First round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (esl_opt_GetBoolean(go, "-v")) printf("ViterbiFilter() tests, DNA\n"); utest_viterbi_filter(r, abc, bg, M, L, N); utest_viterbi_filter(r, abc, bg, 1, L, 10); utest_viterbi_filter(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); /* Second round of tests for amino alphabets. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (esl_opt_GetBoolean(go, "-v")) printf("ViterbiFilter() tests, protein\n"); utest_viterbi_filter(r, abc, bg, M, L, N); utest_viterbi_filter(r, abc, bg, 1, L, 10); utest_viterbi_filter(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*VITFILTER_TESTDRIVE*/ /*---------------- end, test driver -----------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7VITFILTER_EXAMPLE /* A minimal example. Also useful for debugging on small HMMs and sequences. gcc -g -Wall -msse2 -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o vitfilter_example -Dp7VITFILTER_EXAMPLE vitfilter.c -lhmmer -leasel -lm ./vitfilter_example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_gumbel.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in one line awkable format", 0 }, { "-P", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in profmark format", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of Viterbi filter algorithm"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float vfraw, nullsc, vfscore; float graw, gscore; double P, gP; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); /* allocate DP matrices, both a generic and an optimized one */ ox = p7_omx_Create(gm->M, 0, sq->n); gx = p7_gmx_Create(gm->M, sq->n); /* Useful to place and compile in for debugging: p7_oprofile_Dump(stdout, om); dumps the optimized profile p7_omx_SetDumpMode(ox, TRUE); makes the fast DP algorithms dump their matrices p7_gmx_Dump(stdout, gx, p7_DEFAULT); dumps a generic DP matrix */ while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { p7_oprofile_ReconfigLength(om, sq->n); p7_ReconfigLength(gm, sq->n); p7_bg_SetLength(bg, sq->n); p7_omx_GrowTo(ox, om->M, 0, sq->n); p7_gmx_GrowTo(gx, gm->M, sq->n); p7_ViterbiFilter (sq->dsq, sq->n, om, ox, &vfraw); p7_bg_NullOne (bg, sq->dsq, sq->n, &nullsc); vfscore = (vfraw - nullsc) / eslCONST_LOG2; P = esl_gumbel_surv(vfscore, om->evparam[p7_VMU], om->evparam[p7_VLAMBDA]); p7_GViterbi (sq->dsq, sq->n, gm, gx, &graw); gscore = (graw - nullsc) / eslCONST_LOG2; gP = esl_gumbel_surv(gscore, gm->evparam[p7_VMU], gm->evparam[p7_VLAMBDA]); if (esl_opt_GetBoolean(go, "-1")) { printf("%-30s\t%-20s\t%9.2g\t%7.2f\t%9.2g\t%7.2f\n", sq->name, hmm->name, P, vfscore, gP, gscore); } else if (esl_opt_GetBoolean(go, "-P")) { /* output suitable for direct use in profmark benchmark postprocessors: */ printf("%g\t%.2f\t%s\t%s\n", P, vfscore, sq->name, hmm->name); } else { printf("target sequence: %s\n", sq->name); printf("vit filter raw score: %.2f nats\n", vfraw); printf("null score: %.2f nats\n", nullsc); printf("per-seq score: %.2f bits\n", vfscore); printf("P-value: %g\n", P); printf("GViterbi raw score: %.2f nats\n", graw); printf("GViterbi seq score: %.2f bits\n", gscore); printf("GViterbi P-value: %g\n", gP); } esl_sq_Reuse(sq); } /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7VITFILTER_EXAMPLE*/ /*-------------------- end, example -----------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: vitfilter.c 4540 2013-10-15 15:45:51Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/impl_sse/vitfilter.c $ *****************************************************************/ hmmer-3.1b2/src/impl_sse/Makefile.in0000664361611702660230000001273712473612613016751 0ustar wheelerteddytop_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ SHELL = /bin/sh prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ CC = @CC@ CFLAGS = @CFLAGS@ @PTHREAD_CFLAGS@ @PIC_FLAGS@ SIMDFLAGS = @SIMD_CFLAGS@ CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ DEFS = @DEFS@ LIBS = -lhmmer -leasel @LIBS@ -lm AR = @AR@ RANLIB = @RANLIB@ INSTALL = @INSTALL@ ESLDIR = @HMMER_ESLDIR@ MYLIBDIRS = -L../../${ESLDIR} -L.. MYINCDIRS = -I../../${ESLDIR} \ -I${top_srcdir}/easel \ -I. \ -I.. \ -I${srcdir} \ -I${top_srcdir}/src \ -I${srcdir}/.. OBJS = decoding.o\ fwdback.o\ io.o\ ssvfilter.o\ msvfilter.o\ null2.o\ optacc.o\ stotrace.o\ vitfilter.o\ p7_omx.o\ p7_oprofile.o\ mpi.o HDRS = impl_sse.h UTESTS = @MPI_UTESTS@\ decoding_utest\ fwdback_utest\ io_utest\ msvfilter_utest\ null2_utest\ optacc_utest\ stotrace_utest\ vitfilter_utest BENCHMARKS = @MPI_BENCHMARKS@\ decoding_benchmark\ fwdback_benchmark\ msvfilter_benchmark\ null2_benchmark\ optacc_benchmark\ stotrace_benchmark\ vitfilter_benchmark EXAMPLES =\ fwdback_example\ io_example\ msvfilter_example\ optacc_example\ p7_oprofile_example\ stotrace_example\ vitfilter_example # beautification magic stolen from git QUIET_SUBDIR0 = +${MAKE} -C #space separator after -c QUIET_SUBDIR1 = ifndef V QUIET_CC = @echo ' ' CC $@; QUIET_GEN = @echo ' ' GEN $@; QUIET_AR = @echo ' ' AR $@; QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR1 = ; echo ' ' SUBDIR $$subdir; \ ${MAKE} -C $$subdir endif .PHONY: all dev check tests install uninstall distclean clean all: libhmmer-impl.stamp dev: ${UTESTS} ${BENCHMARKS} ${EXAMPLES} check: ${UTESTS} tests: ${UTESTS} libhmmer-impl.stamp: ${OBJS} ${QUIET_AR}${AR} -r ../libhmmer.a $? > /dev/null 2>&1 @${RANLIB} ../libhmmer.a @echo "impl_lib objects compiled:\c" > $@ @date >> $@ .FORCE: ${OBJS}: ${HDRS} ../hmmer.h .c.o: ${QUIET_CC}${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${DEFS} ${PTHREAD_CFLAGS} ${MYINCDIRS} -o $@ -c $< ${UTESTS}: libhmmer-impl.stamp ../libhmmer.a ${HDRS} ../hmmer.h @BASENAME=`echo $@ | sed -e 's/_utest//'| sed -e 's/^p7_//'` ;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=p7$${DFLAG}_TESTDRIVE ;\ if test -e ${srcdir}/p7_$${BASENAME}.c; then \ DFILE=${srcdir}/p7_$${BASENAME}.c ;\ else \ DFILE=${srcdir}/$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS} ${BENCHMARKS}: libhmmer-impl.stamp ../libhmmer.a ${HDRS} ../hmmer.h @BASENAME=`echo $@ | sed -e 's/_benchmark//' | sed -e 's/^p7_//'`;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=p7$${DFLAG}_BENCHMARK ;\ if test -e ${srcdir}/p7_$${BASENAME}.c; then \ DFILE=${srcdir}/p7_$${BASENAME}.c ;\ else \ DFILE=${srcdir}/$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS} ${EXAMPLES}: libhmmer-impl.stamp ../libhmmer.a ${HDRS} ../hmmer.h @BASENAME=`echo $@ | sed -e 's/_example//'| sed -e 's/^p7_//'` ;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=p7$${DFLAG}_EXAMPLE ;\ if test -e ${srcdir}/p7_$${BASENAME}.c; then \ DFILE=${srcdir}/p7_$${BASENAME}.c ;\ else \ DFILE=${srcdir}/$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS} install: for file in ${HDRS}; do \ ${INSTALL} -m 0644 ${srcdir}/$$file ${DESTDIR}${includedir}/ ;\ done uninstall: for file in ${HDRS}; do \ rm -f ${DESTDIR}${includedir}/$$file ;\ done distclean: clean -rm -f Makefile clean: -rm -f libhmmer-impl.stamp -rm -f ${UTESTS} -rm -f ${BENCHMARKS} -rm -f ${EXAMPLES} -rm -f *.o *~ Makefile.bak core TAGS gmon.out cscope.out -rm -f *.gcno for prog in ${UTESTS} ${BENCHMARKS} ${EXAMPLES}; do\ if test -d $$prog.dSYM; then rm -rf $$prog.dSYM; fi;\ done ################################################################ # HMMER - Biological sequence analysis with profile HMMs # Version 3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # HMMER is distributed under the terms of the GNU General Public License # (GPLv3). See the LICENSE file for details. # # SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/impl_sse/Makefile.in $ # SVN $Id: Makefile.in 4321 2012-11-27 16:15:47Z wheelert $ ################################################################ hmmer-3.1b2/src/impl_sse/fwdback.c0000664361611702660230000014504312473612613016446 0ustar wheelerteddy/* SSE implementation of Forward and Backward algorithms. * * Both profile and DP matrix are striped and interleaved, for fast * SIMD vector operations. Calculations are in probability space * (scaled odds ratios, actually) rather than log probabilities, * allowing fast multiply/add operations rather than slow Logsum() * calculations. Sparse rescaling is used to achieve full dynamic * range of scores. * * The Forward and Backward implementations may be used either in a * full O(ML) mode that keeps an entire DP matrix, or in a O(M+L) * linear memory "parsing" mode that only keeps one row of memory for * the main MDI states and one column 0..L for the special states * B,E,N,C,J. Keeping a full matrix allows subsequent stochastic * traceback or posterior decoding of any state. In parsing mode, we * can do posterior decoding on the special states and determine * regions of the target sequence that are generated by the * nonhomology states (NCJ) versus not -- thus, identifying where * high-probability "regions" are, the first step of identifying the * domain structure of a target sequence. * * Contents: * 1. Forward/Backward wrapper API * 2. Forward and Backward engine implementations * 4. Benchmark driver. * 5. Unit tests. * 6. Test driver. * 7. Example. * 8. Copyright and license information. * * SRE, Thu Jul 31 08:43:20 2008 [Janelia] * SVN $Id: fwdback.c 3665 2011-08-25 13:45:55Z eddys $ */ #include "p7_config.h" #include #include #include /* SSE */ #include /* SSE2 */ #include "easel.h" #include "esl_sse.h" #include "hmmer.h" #include "impl_sse.h" static int forward_engine (int do_full, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *fwd, float *opt_sc); static int backward_engine(int do_full, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc); /***************************************************************** * 1. Forward/Backward API. *****************************************************************/ /* Function: p7_Forward() * Synopsis: The Forward algorithm, full matrix fill version. * Incept: SRE, Fri Aug 15 18:59:43 2008 [Casa de Gatos] * * Purpose: Calculates the Forward algorithm for sequence of * length residues, using optimized profile , and a * preallocated DP matrix . Upon successful return, * contains the filled Forward matrix, and <*opt_sc> * optionally contains the raw Forward score in nats. * * This calculation requires $O(ML)$ memory and time. * The caller must provide a suitably allocated full * by calling or * . * * The model must be configured in local alignment * mode. The sparse rescaling method used to keep * probability values within single-precision floating * point dynamic range cannot be safely applied to models in * glocal or global mode. * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - RETURN: Forward DP matrix * opt_sc - RETURN: Forward score (in nats) * * Returns: on success. * * Throws: if allocation is too small, or if the profile * isn't in local alignment mode. * if the score exceeds the limited range of * a probability-space odds ratio. * In either case, <*opt_sc> is undefined. */ int p7_Forward(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *opt_sc) { #ifdef p7_DEBUGGING if (om->M > ox->allocQ4*4) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few columns)"); if (L >= ox->validR) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few MDI rows)"); if (L >= ox->allocXR) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few X rows)"); if (! p7_oprofile_IsLocal(om)) ESL_EXCEPTION(eslEINVAL, "Forward implementation makes assumptions that only work for local alignment"); #endif return forward_engine(TRUE, dsq, L, om, ox, opt_sc); } /* Function: p7_ForwardParser() * Synopsis: The Forward algorithm, linear memory parsing version. * Incept: SRE, Fri Aug 15 19:05:26 2008 [Casa de Gatos] * * Purpose: Same as by calling or * . * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - RETURN: Forward DP matrix * ret_sc - RETURN: Forward score (in nats) * * Returns: on success. * * Throws: if allocation is too small, or if the profile * isn't in local alignment mode. * if the score exceeds the limited range of * a probability-space odds ratio. * In either case, <*opt_sc> is undefined. */ int p7_ForwardParser(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *opt_sc) { #ifdef p7_DEBUGGING if (om->M > ox->allocQ4*4) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few columns)"); if (ox->validR < 1) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few MDI rows)"); if (L >= ox->allocXR) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few X rows)"); if (! p7_oprofile_IsLocal(om)) ESL_EXCEPTION(eslEINVAL, "Forward implementation makes assumptions that only work for local alignment"); #endif return forward_engine(FALSE, dsq, L, om, ox, opt_sc); } /* Function: p7_Backward() * Synopsis: The Backward algorithm; full matrix fill version. * Incept: SRE, Sat Aug 16 08:34:22 2008 [Janelia] * * Purpose: Calculates the Backward algorithm for sequence of * length residues, using optimized profile , and a * preallocated DP matrix . A filled Forward matrix * must also be provided in , because we need to use * the same sparse scaling factors that Forward used. The * matrix is filled in, and the Backward score (in * nats) is optionally returned in . * * This calculation requires $O(ML)$ memory and time. The * caller must provide a suitably allocated full by * calling or * . * * Because only the sparse scaling factors are needed from * the matrix, the caller may have this matrix * calculated either in full or parsing mode. * * The model must be configured in local alignment * mode. The sparse rescaling method used to keep * probability values within single-precision floating * point dynamic range cannot be safely applied to models in * glocal or global mode. * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * fwd - filled Forward DP matrix, for scale factors * do_full - TRUE=full matrix; FALSE=linear memory parse mode * bck - RETURN: filled Backward matrix * opt_sc - optRETURN: Backward score (in nats) * * Returns: on success. * * Throws: if allocation is too small, or if the profile * isn't in local alignment mode. * if the score exceeds the limited range of * a probability-space odds ratio. * In either case, <*opt_sc> is undefined. */ int p7_Backward(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc) { #ifdef p7_DEBUGGING if (om->M > bck->allocQ4*4) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few columns)"); if (L >= bck->validR) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few MDI rows)"); if (L >= bck->allocXR) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few X rows)"); if (L != fwd->L) ESL_EXCEPTION(eslEINVAL, "fwd matrix size doesn't agree with length L"); if (! p7_oprofile_IsLocal(om)) ESL_EXCEPTION(eslEINVAL, "Forward implementation makes assumptions that only work for local alignment"); #endif return backward_engine(TRUE, dsq, L, om, fwd, bck, opt_sc); } /* Function: p7_BackwardParser() * Synopsis: The Backward algorithm, linear memory parsing version. * Incept: SRE, Sat Aug 16 08:34:13 2008 [Janelia] * * Purpose: Same as except that the full matrix isn't * kept. Instead, a linear $O(M+L)$ memory algorithm is * used, keeping only the DP matrix values for the special * (BENCJ) states. These are sufficient to do posterior * decoding to identify high-probability regions where * domains are. * * The caller must provide a suitably allocated "parsing" * by calling or * . * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * fwd - filled Forward DP matrix, for scale factors * bck - RETURN: filled Backward matrix * opt_sc - optRETURN: Backward score (in nats) * * Returns: on success. * * Throws: if allocation is too small, or if the profile * isn't in local alignment mode. * if the score exceeds the limited range of * a probability-space odds ratio. * In either case, <*opt_sc> is undefined. */ int p7_BackwardParser(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc) { #ifdef p7_DEBUGGING if (om->M > bck->allocQ4*4) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few columns)"); if (bck->validR < 1) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few MDI rows)"); if (L >= bck->allocXR) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few X rows)"); if (L != fwd->L) ESL_EXCEPTION(eslEINVAL, "fwd matrix size doesn't agree with length L"); if (! p7_oprofile_IsLocal(om)) ESL_EXCEPTION(eslEINVAL, "Forward implementation makes assumptions that only work for local alignment"); #endif return backward_engine(FALSE, dsq, L, om, fwd, bck, opt_sc); } /***************************************************************** * 2. Forward/Backward engine implementations (called thru API) *****************************************************************/ static int forward_engine(int do_full, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *opt_sc) { register __m128 mpv, dpv, ipv; /* previous row values */ register __m128 sv; /* temp storage of 1 curr row value in progress */ register __m128 dcv; /* delayed storage of D(i,q+1) */ register __m128 xEv; /* E state: keeps max for Mk->E as we go */ register __m128 xBv; /* B state: splatted vector of B[i-1] for B->Mk calculations */ __m128 zerov; /* splatted 0.0's in a vector */ float xN, xE, xB, xC, xJ; /* special states' scores */ int i; /* counter over sequence positions 1..L */ int q; /* counter over quads 0..nq-1 */ int j; /* counter over DD iterations (4 is full serialization) */ int Q = p7O_NQF(om->M); /* segment length: # of vectors */ __m128 *dpc = ox->dpf[0]; /* current row, for use in {MDI}MO(dpp,q) access macro */ __m128 *dpp; /* previous row, for use in {MDI}MO(dpp,q) access macro */ __m128 *rp; /* will point at om->rfv[x] for residue x[i] */ __m128 *tp; /* will point into (and step thru) om->tfv */ /* Initialization. */ ox->M = om->M; ox->L = L; ox->has_own_scales = TRUE; /* all forward matrices control their own scalefactors */ zerov = _mm_setzero_ps(); for (q = 0; q < Q; q++) MMO(dpc,q) = IMO(dpc,q) = DMO(dpc,q) = zerov; xE = ox->xmx[p7X_E] = 0.; xN = ox->xmx[p7X_N] = 1.; xJ = ox->xmx[p7X_J] = 0.; xB = ox->xmx[p7X_B] = om->xf[p7O_N][p7O_MOVE]; xC = ox->xmx[p7X_C] = 0.; ox->xmx[p7X_SCALE] = 1.0; ox->totscale = 0.0; #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpFBRow(ox, TRUE, 0, 9, 5, xE, xN, xJ, xB, xC); /* logify=TRUE, =0, width=8, precision=5*/ #endif for (i = 1; i <= L; i++) { dpp = dpc; dpc = ox->dpf[do_full * i]; /* avoid conditional, use do_full as kronecker delta */ rp = om->rfv[dsq[i]]; tp = om->tfv; dcv = _mm_setzero_ps(); xEv = _mm_setzero_ps(); xBv = _mm_set1_ps(xB); /* Right shifts by 4 bytes. 4,8,12,x becomes x,4,8,12. Shift zeros on. */ mpv = esl_sse_rightshift_ps(MMO(dpp,Q-1), zerov); dpv = esl_sse_rightshift_ps(DMO(dpp,Q-1), zerov); ipv = esl_sse_rightshift_ps(IMO(dpp,Q-1), zerov); for (q = 0; q < Q; q++) { /* Calculate new MMO(i,q); don't store it yet, hold it in sv. */ sv = _mm_mul_ps(xBv, *tp); tp++; sv = _mm_add_ps(sv, _mm_mul_ps(mpv, *tp)); tp++; sv = _mm_add_ps(sv, _mm_mul_ps(ipv, *tp)); tp++; sv = _mm_add_ps(sv, _mm_mul_ps(dpv, *tp)); tp++; sv = _mm_mul_ps(sv, *rp); rp++; xEv = _mm_add_ps(xEv, sv); /* Load {MDI}(i-1,q) into mpv, dpv, ipv; * {MDI}MX(q) is then the current, not the prev row */ mpv = MMO(dpp,q); dpv = DMO(dpp,q); ipv = IMO(dpp,q); /* Do the delayed stores of {MD}(i,q) now that memory is usable */ MMO(dpc,q) = sv; DMO(dpc,q) = dcv; /* Calculate the next D(i,q+1) partially: M->D only; * delay storage, holding it in dcv */ dcv = _mm_mul_ps(sv, *tp); tp++; /* Calculate and store I(i,q); assumes odds ratio for emission is 1.0 */ sv = _mm_mul_ps(mpv, *tp); tp++; IMO(dpc,q) = _mm_add_ps(sv, _mm_mul_ps(ipv, *tp)); tp++; } /* Now the DD paths. We would rather not serialize them but * in an accurate Forward calculation, we have few options. */ /* dcv has carried through from end of q loop above; store it * in first pass, we add M->D and D->D path into DMX */ /* We're almost certainly're obligated to do at least one complete * DD path to be sure: */ dcv = esl_sse_rightshift_ps(dcv, zerov); DMO(dpc,0) = zerov; tp = om->tfv + 7*Q; /* set tp to start of the DD's */ for (q = 0; q < Q; q++) { DMO(dpc,q) = _mm_add_ps(dcv, DMO(dpc,q)); dcv = _mm_mul_ps(DMO(dpc,q), *tp); tp++; /* extend DMO(q), so we include M->D and D->D paths */ } /* now. on small models, it seems best (empirically) to just go * ahead and serialize. on large models, we can do a bit better, * by testing for when dcv (DD path) accrued to DMO(q) is below * machine epsilon for all q, in which case we know DMO(q) are all * at their final values. The tradeoff point is (empirically) somewhere around M=100, * at least on my desktop. We don't worry about the conditional here; * it's outside any inner loops. */ if (om->M < 100) { /* Fully serialized version */ for (j = 1; j < 4; j++) { dcv = esl_sse_rightshift_ps(dcv, zerov); tp = om->tfv + 7*Q; /* set tp to start of the DD's */ for (q = 0; q < Q; q++) { /* note, extend dcv, not DMO(q); only adding DD paths now */ DMO(dpc,q) = _mm_add_ps(dcv, DMO(dpc,q)); dcv = _mm_mul_ps(dcv, *tp); tp++; } } } else { /* Slightly parallelized version, but which incurs some overhead */ for (j = 1; j < 4; j++) { register __m128 cv; /* keeps track of whether any DD's change DMO(q) */ dcv = esl_sse_rightshift_ps(dcv, zerov); tp = om->tfv + 7*Q; /* set tp to start of the DD's */ cv = zerov; for (q = 0; q < Q; q++) { /* using cmpgt below tests if DD changed any DMO(q) *without* conditional branch */ sv = _mm_add_ps(dcv, DMO(dpc,q)); cv = _mm_or_ps(cv, _mm_cmpgt_ps(sv, DMO(dpc,q))); DMO(dpc,q) = sv; /* store new DMO(q) */ dcv = _mm_mul_ps(dcv, *tp); tp++; /* note, extend dcv, not DMO(q) */ } if (! _mm_movemask_ps(cv)) break; /* DD's didn't change any DMO(q)? Then done, break out. */ } } /* Add D's to xEv */ for (q = 0; q < Q; q++) xEv = _mm_add_ps(DMO(dpc,q), xEv); /* Finally the "special" states, which start from Mk->E (->C, ->J->B) */ /* The following incantation is a horizontal sum of xEv's elements */ /* These must follow DD calculations, because D's contribute to E in Forward * (as opposed to Viterbi) */ xEv = _mm_add_ps(xEv, _mm_shuffle_ps(xEv, xEv, _MM_SHUFFLE(0, 3, 2, 1))); xEv = _mm_add_ps(xEv, _mm_shuffle_ps(xEv, xEv, _MM_SHUFFLE(1, 0, 3, 2))); _mm_store_ss(&xE, xEv); xN = xN * om->xf[p7O_N][p7O_LOOP]; xC = (xC * om->xf[p7O_C][p7O_LOOP]) + (xE * om->xf[p7O_E][p7O_MOVE]); xJ = (xJ * om->xf[p7O_J][p7O_LOOP]) + (xE * om->xf[p7O_E][p7O_LOOP]); xB = (xJ * om->xf[p7O_J][p7O_MOVE]) + (xN * om->xf[p7O_N][p7O_MOVE]); /* and now xB will carry over into next i, and xC carries over after i=L */ /* Sparse rescaling. xE above threshold? trigger a rescaling event. */ if (xE > 1.0e4) /* that's a little less than e^10, ~10% of our dynamic range */ { xN = xN / xE; xC = xC / xE; xJ = xJ / xE; xB = xB / xE; xEv = _mm_set1_ps(1.0 / xE); for (q = 0; q < Q; q++) { MMO(dpc,q) = _mm_mul_ps(MMO(dpc,q), xEv); DMO(dpc,q) = _mm_mul_ps(DMO(dpc,q), xEv); IMO(dpc,q) = _mm_mul_ps(IMO(dpc,q), xEv); } ox->xmx[i*p7X_NXCELLS+p7X_SCALE] = xE; ox->totscale += log(xE); xE = 1.0; } else ox->xmx[i*p7X_NXCELLS+p7X_SCALE] = 1.0; /* Storage of the specials. We could've stored these already * but using xE, etc. variables makes it easy to convert this * code to O(M) memory versions just by deleting storage steps. */ ox->xmx[i*p7X_NXCELLS+p7X_E] = xE; ox->xmx[i*p7X_NXCELLS+p7X_N] = xN; ox->xmx[i*p7X_NXCELLS+p7X_J] = xJ; ox->xmx[i*p7X_NXCELLS+p7X_B] = xB; ox->xmx[i*p7X_NXCELLS+p7X_C] = xC; #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpFBRow(ox, TRUE, i, 9, 5, xE, xN, xJ, xB, xC); /* logify=TRUE, =i, width=8, precision=5*/ #endif } /* end loop over sequence residues 1..L */ /* finally C->T, and flip total score back to log space (nats) */ /* On overflow, xC is inf or nan (nan arises because inf*0 = nan). */ /* On an underflow (which shouldn't happen), we counterintuitively return infinity: * the effect of this is to force the caller to rescore us with full range. */ if (isnan(xC)) ESL_EXCEPTION(eslERANGE, "forward score is NaN"); else if (L>0 && xC == 0.0) ESL_EXCEPTION(eslERANGE, "forward score underflow (is 0.0)"); /* if L==0, xC *should* be 0.0; J5/118 */ else if (isinf(xC) == 1) ESL_EXCEPTION(eslERANGE, "forward score overflow (is infinity)"); if (opt_sc != NULL) *opt_sc = ox->totscale + log(xC * om->xf[p7O_C][p7O_MOVE]); return eslOK; } static int backward_engine(int do_full, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc) { register __m128 mpv, ipv, dpv; /* previous row values */ register __m128 mcv, dcv; /* current row values */ register __m128 tmmv, timv, tdmv; /* tmp vars for accessing rotated transition scores */ register __m128 xBv; /* collects B->Mk components of B(i) */ register __m128 xEv; /* splatted E(i) */ __m128 zerov; /* splatted 0.0's in a vector */ float xN, xE, xB, xC, xJ; /* special states' scores */ int i; /* counter over sequence positions 0,1..L */ int q; /* counter over quads 0..Q-1 */ int Q = p7O_NQF(om->M); /* segment length: # of vectors */ int j; /* DD segment iteration counter (4 = full serialization) */ __m128 *dpc; /* current DP row */ __m128 *dpp; /* next ("previous") DP row */ __m128 *rp; /* will point into om->rfv[x] for residue x[i+1] */ __m128 *tp; /* will point into (and step thru) om->tfv transition scores */ /* initialize the L row. */ bck->M = om->M; bck->L = L; bck->has_own_scales = FALSE; /* backwards scale factors are *usually* given by */ dpc = bck->dpf[L * do_full]; xJ = 0.0; xB = 0.0; xN = 0.0; xC = om->xf[p7O_C][p7O_MOVE]; /* C<-T */ xE = xC * om->xf[p7O_E][p7O_MOVE]; /* E<-C, no tail */ xEv = _mm_set1_ps(xE); zerov = _mm_setzero_ps(); dcv = zerov; /* solely to silence a compiler warning */ for (q = 0; q < Q; q++) MMO(dpc,q) = DMO(dpc,q) = xEv; for (q = 0; q < Q; q++) IMO(dpc,q) = zerov; /* init row L's DD paths, 1) first segment includes xE, from DMO(q) */ tp = om->tfv + 8*Q - 1; /* <*tp> now the [4 8 12 x] TDD quad */ dpv = _mm_move_ss(DMO(dpc,Q-1), zerov); /* start leftshift: [1 5 9 13] -> [x 5 9 13] */ dpv = _mm_shuffle_ps(dpv, dpv, _MM_SHUFFLE(0,3,2,1)); /* finish leftshift:[x 5 9 13] -> [5 9 13 x] */ for (q = Q-1; q >= 0; q--) { dcv = _mm_mul_ps(dpv, *tp); tp--; DMO(dpc,q) = _mm_add_ps(DMO(dpc,q), dcv); dpv = DMO(dpc,q); } /* 2) three more passes, only extending DD component (dcv only; no xE contrib from DMO(q)) */ for (j = 1; j < 4; j++) { tp = om->tfv + 8*Q - 1; /* <*tp> now the [4 8 12 x] TDD quad */ dcv = _mm_move_ss(dcv, zerov); /* start leftshift: [1 5 9 13] -> [x 5 9 13] */ dcv = _mm_shuffle_ps(dcv, dcv, _MM_SHUFFLE(0,3,2,1)); /* finish leftshift:[x 5 9 13] -> [5 9 13 x] */ for (q = Q-1; q >= 0; q--) { dcv = _mm_mul_ps(dcv, *tp); tp--; DMO(dpc,q) = _mm_add_ps(DMO(dpc,q), dcv); } } /* now MD init */ tp = om->tfv + 7*Q - 3; /* <*tp> now the [4 8 12 x] Mk->Dk+1 quad */ dcv = _mm_move_ss(DMO(dpc,0), zerov); /* start leftshift: [1 5 9 13] -> [x 5 9 13] */ dcv = _mm_shuffle_ps(dcv, dcv, _MM_SHUFFLE(0,3,2,1)); /* finish leftshift:[x 5 9 13] -> [5 9 13 x] */ for (q = Q-1; q >= 0; q--) { MMO(dpc,q) = _mm_add_ps(MMO(dpc,q), _mm_mul_ps(dcv, *tp)); tp -= 7; dcv = DMO(dpc,q); } /* Sparse rescaling: same scale factors as fwd matrix */ if (fwd->xmx[L*p7X_NXCELLS+p7X_SCALE] > 1.0) { xE = xE / fwd->xmx[L*p7X_NXCELLS+p7X_SCALE]; xN = xN / fwd->xmx[L*p7X_NXCELLS+p7X_SCALE]; xC = xC / fwd->xmx[L*p7X_NXCELLS+p7X_SCALE]; xJ = xJ / fwd->xmx[L*p7X_NXCELLS+p7X_SCALE]; xB = xB / fwd->xmx[L*p7X_NXCELLS+p7X_SCALE]; xEv = _mm_set1_ps(1.0 / fwd->xmx[L*p7X_NXCELLS+p7X_SCALE]); for (q = 0; q < Q; q++) { MMO(dpc,q) = _mm_mul_ps(MMO(dpc,q), xEv); DMO(dpc,q) = _mm_mul_ps(DMO(dpc,q), xEv); IMO(dpc,q) = _mm_mul_ps(IMO(dpc,q), xEv); } } bck->xmx[L*p7X_NXCELLS+p7X_SCALE] = fwd->xmx[L*p7X_NXCELLS+p7X_SCALE]; bck->totscale = log(bck->xmx[L*p7X_NXCELLS+p7X_SCALE]); /* Stores */ bck->xmx[L*p7X_NXCELLS+p7X_E] = xE; bck->xmx[L*p7X_NXCELLS+p7X_N] = xN; bck->xmx[L*p7X_NXCELLS+p7X_J] = xJ; bck->xmx[L*p7X_NXCELLS+p7X_B] = xB; bck->xmx[L*p7X_NXCELLS+p7X_C] = xC; #if p7_DEBUGGING if (bck->debugging) p7_omx_DumpFBRow(bck, TRUE, L, 9, 4, xE, xN, xJ, xB, xC); /* logify=TRUE, =L, width=9, precision=4*/ #endif /* main recursion */ for (i = L-1; i >= 1; i--) /* backwards stride */ { /* phase 1. B(i) collected. Old row destroyed, new row contains * complete I(i,k), partial {MD}(i,k) w/ no {MD}->{DE} paths yet. */ dpc = bck->dpf[i * do_full]; dpp = bck->dpf[(i+1) * do_full]; rp = om->rfv[dsq[i+1]] + Q-1; /* <*rp> is now the [4 8 12 x] match emission quad */ tp = om->tfv + 7*Q - 1; /* <*tp> is now the [4 8 12 x] TII transition quad */ /* leftshift the first transition quads */ tmmv = _mm_move_ss(om->tfv[1], zerov); tmmv = _mm_shuffle_ps(tmmv, tmmv, _MM_SHUFFLE(0,3,2,1)); timv = _mm_move_ss(om->tfv[2], zerov); timv = _mm_shuffle_ps(timv, timv, _MM_SHUFFLE(0,3,2,1)); tdmv = _mm_move_ss(om->tfv[3], zerov); tdmv = _mm_shuffle_ps(tdmv, tdmv, _MM_SHUFFLE(0,3,2,1)); mpv = _mm_mul_ps(MMO(dpp,0), om->rfv[dsq[i+1]][0]); /* precalc M(i+1,k+1) * e(M_k+1, x_{i+1}) */ mpv = _mm_move_ss(mpv, zerov); mpv = _mm_shuffle_ps(mpv, mpv, _MM_SHUFFLE(0,3,2,1)); xBv = zerov; for (q = Q-1; q >= 0; q--) /* backwards stride */ { ipv = IMO(dpp,q); /* assumes emission odds ratio of 1.0; i+1's IMO(q) now free */ IMO(dpc,q) = _mm_add_ps(_mm_mul_ps(ipv, *tp), _mm_mul_ps(mpv, timv)); tp--; DMO(dpc,q) = _mm_mul_ps(mpv, tdmv); mcv = _mm_add_ps(_mm_mul_ps(ipv, *tp), _mm_mul_ps(mpv, tmmv)); tp-= 2; mpv = _mm_mul_ps(MMO(dpp,q), *rp); rp--; /* obtain mpv for next q. i+1's MMO(q) is freed */ MMO(dpc,q) = mcv; tdmv = *tp; tp--; timv = *tp; tp--; tmmv = *tp; tp--; xBv = _mm_add_ps(xBv, _mm_mul_ps(mpv, *tp)); tp--; } /* phase 2: now that we have accumulated the B->Mk transitions in xBv, we can do the specials */ /* this incantation is a horiz sum of xBv elements: (_mm_hadd_ps() would require SSE3) */ xBv = _mm_add_ps(xBv, _mm_shuffle_ps(xBv, xBv, _MM_SHUFFLE(0, 3, 2, 1))); xBv = _mm_add_ps(xBv, _mm_shuffle_ps(xBv, xBv, _MM_SHUFFLE(1, 0, 3, 2))); _mm_store_ss(&xB, xBv); xC = xC * om->xf[p7O_C][p7O_LOOP]; xJ = (xB * om->xf[p7O_J][p7O_MOVE]) + (xJ * om->xf[p7O_J][p7O_LOOP]); /* must come after xB */ xN = (xB * om->xf[p7O_N][p7O_MOVE]) + (xN * om->xf[p7O_N][p7O_LOOP]); /* must come after xB */ xE = (xC * om->xf[p7O_E][p7O_MOVE]) + (xJ * om->xf[p7O_E][p7O_LOOP]); /* must come after xJ, xC */ xEv = _mm_set1_ps(xE); /* splat */ /* phase 3: {MD}->E paths and one step of the D->D paths */ tp = om->tfv + 8*Q - 1; /* <*tp> now the [4 8 12 x] TDD quad */ dpv = _mm_add_ps(DMO(dpc,0), xEv); dpv = _mm_move_ss(dpv, zerov); dpv = _mm_shuffle_ps(dpv, dpv, _MM_SHUFFLE(0,3,2,1)); for (q = Q-1; q >= 0; q--) { dcv = _mm_mul_ps(dpv, *tp); tp--; DMO(dpc,q) = _mm_add_ps(DMO(dpc,q), _mm_add_ps(dcv, xEv)); dpv = DMO(dpc,q); MMO(dpc,q) = _mm_add_ps(MMO(dpc,q), xEv); } /* phase 4: finish extending the DD paths */ /* fully serialized for now */ for (j = 1; j < 4; j++) /* three passes: we've already done 1 segment, we need 4 total */ { dcv = _mm_move_ss(dcv, zerov); dcv = _mm_shuffle_ps(dcv, dcv, _MM_SHUFFLE(0,3,2,1)); tp = om->tfv + 8*Q - 1; /* <*tp> now the [4 8 12 x] TDD quad */ for (q = Q-1; q >= 0; q--) { dcv = _mm_mul_ps(dcv, *tp); tp--; DMO(dpc,q) = _mm_add_ps(DMO(dpc,q), dcv); } } /* phase 5: add M->D paths */ dcv = _mm_move_ss(DMO(dpc,0), zerov); dcv = _mm_shuffle_ps(dcv, dcv, _MM_SHUFFLE(0,3,2,1)); tp = om->tfv + 7*Q - 3; /* <*tp> is now the [4 8 12 x] Mk->Dk+1 quad */ for (q = Q-1; q >= 0; q--) { MMO(dpc,q) = _mm_add_ps(MMO(dpc,q), _mm_mul_ps(dcv, *tp)); tp -= 7; dcv = DMO(dpc,q); } /* Sparse rescaling */ /* In rare cases [J3/119] scale factors from are * insufficient and backwards will overflow. In this case, we * switch on the fly to using our own scale factors, different * from those in . This will complicate subsequent * posterior decoding routines. */ if (xB > 1.0e16) bck->has_own_scales = TRUE; if (bck->has_own_scales) bck->xmx[i*p7X_NXCELLS+p7X_SCALE] = (xB > 1.0e4) ? xB : 1.0; else bck->xmx[i*p7X_NXCELLS+p7X_SCALE] = fwd->xmx[i*p7X_NXCELLS+p7X_SCALE]; if (bck->xmx[i*p7X_NXCELLS+p7X_SCALE] > 1.0) { xE /= bck->xmx[i*p7X_NXCELLS+p7X_SCALE]; xN /= bck->xmx[i*p7X_NXCELLS+p7X_SCALE]; xJ /= bck->xmx[i*p7X_NXCELLS+p7X_SCALE]; xB /= bck->xmx[i*p7X_NXCELLS+p7X_SCALE]; xC /= bck->xmx[i*p7X_NXCELLS+p7X_SCALE]; xBv = _mm_set1_ps(1.0 / bck->xmx[i*p7X_NXCELLS+p7X_SCALE]); for (q = 0; q < Q; q++) { MMO(dpc,q) = _mm_mul_ps(MMO(dpc,q), xBv); DMO(dpc,q) = _mm_mul_ps(DMO(dpc,q), xBv); IMO(dpc,q) = _mm_mul_ps(IMO(dpc,q), xBv); } bck->totscale += log(bck->xmx[i*p7X_NXCELLS+p7X_SCALE]); } /* Stores are separate only for pedagogical reasons: easy to * turn this into a more memory efficient version just by * deleting the stores. */ bck->xmx[i*p7X_NXCELLS+p7X_E] = xE; bck->xmx[i*p7X_NXCELLS+p7X_N] = xN; bck->xmx[i*p7X_NXCELLS+p7X_J] = xJ; bck->xmx[i*p7X_NXCELLS+p7X_B] = xB; bck->xmx[i*p7X_NXCELLS+p7X_C] = xC; #if p7_DEBUGGING if (bck->debugging) p7_omx_DumpFBRow(bck, TRUE, i, 9, 4, xE, xN, xJ, xB, xC); /* logify=TRUE, =i, width=9, precision=4*/ #endif } /* thus ends the loop over sequence positions i */ /* Termination at i=0, where we can only reach N,B states. */ dpp = bck->dpf[1 * do_full]; tp = om->tfv; /* <*tp> is now the [1 5 9 13] TBMk transition quad */ rp = om->rfv[dsq[1]]; /* <*rp> is now the [1 5 9 13] match emission quad */ xBv = zerov; for (q = 0; q < Q; q++) { mpv = _mm_mul_ps(MMO(dpp,q), *rp); rp++; mpv = _mm_mul_ps(mpv, *tp); tp += 7; xBv = _mm_add_ps(xBv, mpv); } /* horizontal sum of xBv */ xBv = _mm_add_ps(xBv, _mm_shuffle_ps(xBv, xBv, _MM_SHUFFLE(0, 3, 2, 1))); xBv = _mm_add_ps(xBv, _mm_shuffle_ps(xBv, xBv, _MM_SHUFFLE(1, 0, 3, 2))); _mm_store_ss(&xB, xBv); xN = (xB * om->xf[p7O_N][p7O_MOVE]) + (xN * om->xf[p7O_N][p7O_LOOP]); bck->xmx[p7X_B] = xB; bck->xmx[p7X_C] = 0.0; bck->xmx[p7X_J] = 0.0; bck->xmx[p7X_N] = xN; bck->xmx[p7X_E] = 0.0; bck->xmx[p7X_SCALE] = 1.0; #if p7_DEBUGGING dpc = bck->dpf[0]; for (q = 0; q < Q; q++) /* Not strictly necessary, but if someone's looking at DP matrices, this is nice to do: */ MMO(dpc,q) = DMO(dpc,q) = IMO(dpc,q) = zerov; if (bck->debugging) p7_omx_DumpFBRow(bck, TRUE, 0, 9, 4, bck->xmx[p7X_E], bck->xmx[p7X_N], bck->xmx[p7X_J], bck->xmx[p7X_B], bck->xmx[p7X_C]); /* logify=TRUE, =0, width=9, precision=4*/ #endif if (isnan(xN)) ESL_EXCEPTION(eslERANGE, "backward score is NaN"); else if (L>0 && xN == 0.0) ESL_EXCEPTION(eslERANGE, "backward score underflow (is 0.0)"); /* if L==0, xN *should* be 0.0 [J5/118]*/ else if (isinf(xN) == 1) ESL_EXCEPTION(eslERANGE, "backward score overflow (is infinity)"); if (opt_sc != NULL) *opt_sc = bck->totscale + log(xN); return eslOK; } /*-------------- end, forward/backward engines -----------------*/ /***************************************************************** * 4. Benchmark driver. *****************************************************************/ #ifdef p7FWDBACK_BENCHMARK /* -c, -x options are for debugging and testing: see fwdfilter.c for explanation */ /* icc -O3 -static -o fwdback_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7FWDBACK_BENCHMARK fwdback.c -lhmmer -leasel -lm ./fwdback_benchmark runs benchmark on both Forward and Backward parser ./fwdback_benchmark -c -N100 compare scores of SSE to generic impl ./fwdback_benchmark -x -N100 test that scores match trusted implementation. */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { "-F", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-B", "only benchmark Forward", 0 }, { "-B", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-F", "only benchmark Backward", 0 }, { "-P", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "benchmark parsing version, not full version", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for Forward, Backward implementations"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx = NULL; P7_OMX *fwd = NULL; P7_OMX *bck = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float fsc, bsc; float fsc2, bsc2; double base_time, bench_time, Mcs; p7_FLogsumInit(); if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); if (esl_opt_GetBoolean(go, "-x") && p7_FLogsumError(-0.4, -0.5) > 0.0001) p7_Fail("-x here requires p7_Logsum() recompiled in slow exact mode"); if (esl_opt_GetBoolean(go, "-P")) { fwd = p7_omx_Create(gm->M, 0, L); bck = p7_omx_Create(gm->M, 0, L); } else { fwd = p7_omx_Create(gm->M, L, L); bck = p7_omx_Create(gm->M, L, L); } gx = p7_gmx_Create(gm->M, L); /* Get a baseline time: how long it takes just to generate the sequences */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); if (esl_opt_GetBoolean(go, "-P")) { if (! esl_opt_GetBoolean(go, "-B")) p7_ForwardParser (dsq, L, om, fwd, &fsc); if (! esl_opt_GetBoolean(go, "-F")) p7_BackwardParser(dsq, L, om, fwd, bck, &bsc); } else { if (! esl_opt_GetBoolean(go, "-B")) p7_Forward (dsq, L, om, fwd, &fsc); if (! esl_opt_GetBoolean(go, "-F")) p7_Backward(dsq, L, om, fwd, bck, &bsc); } if (esl_opt_GetBoolean(go, "-c") || esl_opt_GetBoolean(go, "-x")) { p7_GForward (dsq, L, gm, gx, &fsc2); p7_GBackward(dsq, L, gm, gx, &bsc2); printf("%.4f %.4f %.4f %.4f\n", fsc, bsc, fsc2, bsc2); } } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(bck); p7_omx_Destroy(fwd); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7FWDBACK_BENCHMARK*/ /*------------------- end, benchmark driver ---------------------*/ /***************************************************************** * 5. Unit tests. *****************************************************************/ #ifdef p7FWDBACK_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" /* * compare to GForward() scores. */ static void utest_fwdback(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { char *msg = "forward/backward unit test failed"; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *fwd = p7_omx_Create(M, 0, L); P7_OMX *bck = p7_omx_Create(M, 0, L); P7_OMX *oxf = p7_omx_Create(M, L, L); P7_OMX *oxb = p7_omx_Create(M, L, L); P7_GMX *gx = p7_gmx_Create(M, L); float tolerance; float fsc1, fsc2; float bsc1, bsc2; float generic_sc; p7_FLogsumInit(); if (p7_FLogsumError(-0.4, -0.5) > 0.0001) tolerance = 1.0; /* weaker test against GForward() */ else tolerance = 0.0001; /* stronger test: FLogsum() is in slow exact mode. */ p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om); while (N--) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_Forward (dsq, L, om, oxf, &fsc1); p7_Backward (dsq, L, om, oxf, oxb, &bsc1); p7_ForwardParser (dsq, L, om, fwd, &fsc2); p7_BackwardParser(dsq, L, om, fwd, bck, &bsc2); p7_GForward (dsq, L, gm, gx, &generic_sc); /* Forward and Backward scores should agree with high tolerance */ if (fabs(fsc1-bsc1) > 0.0001) esl_fatal(msg); if (fabs(fsc2-bsc2) > 0.0001) esl_fatal(msg); if (fabs(fsc1-fsc2) > 0.0001) esl_fatal(msg); /* GForward scores should approximate Forward scores, * with tolerance that depends on how logsum.c was compiled */ if (fabs(fsc1-generic_sc) > tolerance) esl_fatal(msg); } free(dsq); p7_hmm_Destroy(hmm); p7_omx_Destroy(oxb); p7_omx_Destroy(oxf); p7_omx_Destroy(bck); p7_omx_Destroy(fwd); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); } #endif /*p7FWDBACK_TESTDRIVE*/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 6. Test driver *****************************************************************/ #ifdef p7FWDBACK_TESTDRIVE /* gcc -g -Wall -msse2 -std=gnu99 -o fwdback_utest -I.. -L.. -I../../easel -L../../easel -Dp7FWDBACK_TESTDRIVE fwdback.c -lhmmer -leasel -lm ./fwdback_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "145", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for SSE Forward, Backward implementations"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* First round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_fwdback(r, abc, bg, M, L, N); /* normal sized models */ utest_fwdback(r, abc, bg, 1, L, 10); /* size 1 models */ utest_fwdback(r, abc, bg, M, 1, 10); /* size 1 sequences */ esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); /* Second round of tests for amino alphabets. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_fwdback(r, abc, bg, M, L, N); utest_fwdback(r, abc, bg, 1, L, 10); utest_fwdback(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*p7FWDBACK_TESTDRIVE*/ /*--------------------- end, test driver ------------------------*/ /***************************************************************** * 7. Example *****************************************************************/ #ifdef p7FWDBACK_EXAMPLE /* Useful for debugging on small HMMs and sequences. * * Compares to GForward(). * gcc -g -Wall -msse2 -std=gnu99 -o fwdback_example -I.. -L.. -I../../easel -L../../easel -Dp7FWDBACK_EXAMPLE fwdback.c -lhmmer -leasel -lm ./fwdback_example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_exponential.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_sse.h" #define STYLES "--fs,--sw,--ls,--s" /* Exclusive choice for alignment mode */ static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in one line awkable format", 0 }, { "-P", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in profmark format", 0 }, { "--fs", eslARG_NONE,"default",NULL, NULL, STYLES, NULL, NULL, "multihit local alignment", 0 }, { "--sw", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "unihit local alignment", 0 }, { "--ls", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "multihit glocal alignment", 0 }, { "--s", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "unihit glocal alignment", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of Forward/Backward (SSE versions)"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx = NULL; P7_OMX *fwd = NULL; P7_OMX *bck = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float fraw, braw, nullsc, fsc; float gfraw, gbraw, gfsc; double P, gP; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Open sequence file for reading */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); /* Now reconfig the models however we were asked to */ if (esl_opt_GetBoolean(go, "--fs")) p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); else if (esl_opt_GetBoolean(go, "--sw")) p7_ProfileConfig(hmm, bg, gm, sq->n, p7_UNILOCAL); else if (esl_opt_GetBoolean(go, "--ls")) p7_ProfileConfig(hmm, bg, gm, sq->n, p7_GLOCAL); else if (esl_opt_GetBoolean(go, "--s")) p7_ProfileConfig(hmm, bg, gm, sq->n, p7_UNIGLOCAL); /* now the optimized profile */ om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); /* p7_oprofile_Dump(stdout, om); */ /* allocate DP matrices for O(M+L) parsers */ fwd = p7_omx_Create(gm->M, 0, sq->n); bck = p7_omx_Create(gm->M, 0, sq->n); gx = p7_gmx_Create(gm->M, sq->n); /* allocate DP matrices for O(ML) fills */ /* fwd = p7_omx_Create(gm->M, sq->n, sq->n); */ /* bck = p7_omx_Create(gm->M, sq->n, sq->n); */ /* p7_omx_SetDumpMode(stdout, fwd, TRUE); */ /* makes the fast DP algorithms dump their matrices */ /* p7_omx_SetDumpMode(stdout, bck, TRUE); */ while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { p7_oprofile_ReconfigLength(om, sq->n); p7_ReconfigLength(gm, sq->n); p7_bg_SetLength(bg, sq->n); p7_omx_GrowTo(fwd, om->M, 0, sq->n); p7_omx_GrowTo(bck, om->M, 0, sq->n); p7_gmx_GrowTo(gx, gm->M, sq->n); p7_bg_NullOne (bg, sq->dsq, sq->n, &nullsc); p7_ForwardParser (sq->dsq, sq->n, om, fwd, &fraw); p7_BackwardParser(sq->dsq, sq->n, om, fwd, bck, &braw); /* p7_Forward (sq->dsq, sq->n, om, fwd, &fsc); printf("forward: %.2f nats\n", fsc); */ /* p7_Backward(sq->dsq, sq->n, om, fwd, bck, &bsc); printf("backward: %.2f nats\n", bsc); */ /* Comparison to other F/B implementations */ p7_GForward (sq->dsq, sq->n, gm, gx, &gfraw); p7_GBackward (sq->dsq, sq->n, gm, gx, &gbraw); /* p7_gmx_Dump(stdout, gx, p7_DEFAULT); */ fsc = (fraw-nullsc) / eslCONST_LOG2; gfsc = (gfraw-nullsc) / eslCONST_LOG2; P = esl_exp_surv(fsc, om->evparam[p7_FTAU], om->evparam[p7_FLAMBDA]); gP = esl_exp_surv(gfsc, gm->evparam[p7_FTAU], gm->evparam[p7_FLAMBDA]); if (esl_opt_GetBoolean(go, "-1")) { printf("%-30s\t%-20s\t%9.2g\t%6.1f\t%9.2g\t%6.1f\n", sq->name, hmm->name, P, fsc, gP, gfsc); } else if (esl_opt_GetBoolean(go, "-P")) { /* output suitable for direct use in profmark benchmark postprocessors: */ printf("%g\t%.2f\t%s\t%s\n", P, fsc, sq->name, hmm->name); } else { printf("target sequence: %s\n", sq->name); printf("fwd filter raw score: %.2f nats\n", fraw); printf("bck filter raw score: %.2f nats\n", braw); printf("null score: %.2f nats\n", nullsc); printf("per-seq score: %.2f bits\n", fsc); printf("P-value: %g\n", P); printf("GForward raw score: %.2f nats\n", gfraw); printf("GBackward raw score: %.2f nats\n", gbraw); printf("GForward seq score: %.2f bits\n", gfsc); printf("GForward P-value: %g\n", gP); } esl_sq_Reuse(sq); } /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_omx_Destroy(bck); p7_omx_Destroy(fwd); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7FWDBACK_EXAMPLE*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_sse/null2.c0000664361611702660230000004367012473612613016104 0ustar wheelerteddy/* "null2" model, biased composition correction; SSE implementations. * * Contents: * 1. Null2 estimation algorithms. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * SRE, Mon Aug 18 08:31:11 2008 [Janelia] * SVN $Id: null2.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include #include #include /* SSE */ #include /* SSE2 */ #include "easel.h" #include "esl_sse.h" #include "esl_vectorops.h" #include "hmmer.h" #include "impl_sse.h" /***************************************************************** * 1. Null2 estimation algorithms. *****************************************************************/ /* Function: p7_Null2_ByExpectation() * Synopsis: Calculate null2 model from posterior probabilities. * Incept: SRE, Mon Aug 18 08:32:55 2008 [Janelia] * * Purpose: Identical to except that * , are SSE optimized versions of the profile * and the residue posterior probability matrix. See * documentation. * * Args: om - profile, in any mode, target length model set to * pp - posterior prob matrix, for against domain envelope (offset) * null2 - RETURN: null2 log odds scores per residue; <0..Kp-1>; caller allocated space */ int p7_Null2_ByExpectation(const P7_OPROFILE *om, const P7_OMX *pp, float *null2) { int M = om->M; int Ld = pp->L; int Q = p7O_NQF(M); float *xmx = pp->xmx; /* enables use of XMXo(i,s) macro */ float norm; __m128 *rp; __m128 sv; float xfactor; int i,q,x; /* Calculate expected # of times that each emitting state was used * in generating the Ld residues in this domain. * The 0 row in is used to hold these numbers. */ memcpy(pp->dpf[0], pp->dpf[1], sizeof(__m128) * 3 * Q); XMXo(0,p7X_N) = XMXo(1,p7X_N); XMXo(0,p7X_C) = XMXo(1,p7X_C); /* 0.0 */ XMXo(0,p7X_J) = XMXo(1,p7X_J); /* 0.0 */ for (i = 2; i <= Ld; i++) { for (q = 0; q < Q; q++) { pp->dpf[0][q*3 + p7X_M] = _mm_add_ps(pp->dpf[i][q*3 + p7X_M], pp->dpf[0][q*3 + p7X_M]); pp->dpf[0][q*3 + p7X_I] = _mm_add_ps(pp->dpf[i][q*3 + p7X_I], pp->dpf[0][q*3 + p7X_I]); } XMXo(0,p7X_N) += XMXo(i,p7X_N); XMXo(0,p7X_C) += XMXo(i,p7X_C); XMXo(0,p7X_J) += XMXo(i,p7X_J); } /* Convert those expected #'s to frequencies, to use as posterior weights. */ norm = 1.0 / (float) Ld; sv = _mm_set1_ps(norm); for (q = 0; q < Q; q++) { pp->dpf[0][q*3 + p7X_M] = _mm_mul_ps(pp->dpf[0][q*3 + p7X_M], sv); pp->dpf[0][q*3 + p7X_I] = _mm_mul_ps(pp->dpf[0][q*3 + p7X_I], sv); } XMXo(0,p7X_N) *= norm; XMXo(0,p7X_C) *= norm; XMXo(0,p7X_J) *= norm; /* Calculate null2's emission odds, by taking posterior weighted sum * over all emission vectors used in paths explaining the domain. */ xfactor = XMXo(0, p7X_N) + XMXo(0, p7X_C) + XMXo(0, p7X_J); for (x = 0; x < om->abc->K; x++) { sv = _mm_setzero_ps(); rp = om->rfv[x]; for (q = 0; q < Q; q++) { sv = _mm_add_ps(sv, _mm_mul_ps(pp->dpf[0][q*3 + p7X_M], *rp)); rp++; sv = _mm_add_ps(sv, pp->dpf[0][q*3 + p7X_I]); /* insert odds implicitly 1.0 */ // sv = _mm_add_ps(sv, _mm_mul_ps(pp->dpf[0][q*3 + p7X_I], *rp)); rp++; } esl_sse_hsum_ps(sv, &(null2[x])); null2[x] += xfactor; } /* now null2[x] = \frac{f_d(x)}{f_0(x)} for all x in alphabet, * 0..K-1, where f_d(x) are the ad hoc "null2" residue frequencies * for this envelope. */ /* make valid scores for all degeneracies, by averaging the odds ratios. */ esl_abc_FAvgScVec(om->abc, null2); null2[om->abc->K] = 1.0; /* gap character */ null2[om->abc->Kp-2] = 1.0; /* nonresidue "*" */ null2[om->abc->Kp-1] = 1.0; /* missing data "~" */ return eslOK; } /* Function: p7_Null2_ByTrace() * Synopsis: Assign null2 scores to an envelope by the sampling method. * Incept: SRE, Mon Aug 18 10:22:49 2008 [Janelia] * * Purpose: Identical to except that * , are SSE optimized versions of the profile * and the residue posterior probability matrix. See * documentation. */ int p7_Null2_ByTrace(const P7_OPROFILE *om, const P7_TRACE *tr, int zstart, int zend, P7_OMX *wrk, float *null2) { union { __m128 v; float p[4]; } u; int Q = p7O_NQF(om->M); int Ld = 0; float *xmx = wrk->xmx; /* enables use of XMXo macro */ float norm; float xfactor; __m128 sv; __m128 *rp; int q, r, s; int x; int z; /* We'll use the i=0 row in wrk for working space: dp[0][] and xmx[][0]. */ for (q = 0; q < Q; q++) { wrk->dpf[0][q*3 + p7X_M] = _mm_setzero_ps(); wrk->dpf[0][q*3 + p7X_I] = _mm_setzero_ps(); } XMXo(0,p7X_N) = 0.0; XMXo(0,p7X_C) = 0.0; XMXo(0,p7X_J) = 0.0; /* Calculate emitting state usage in this particular trace segment */ for (z = zstart; z <= zend; z++) { if (tr->i[z] == 0) continue; /* quick test for whether this trace elem emitted or not */ Ld++; if (tr->k[z] > 0) /* must be an M or I */ { /* surely there's an easier way? but our workspace is striped, interleaved quads... */ s = ( (tr->st[z] == p7T_M) ? p7X_M : p7X_I); q = p7X_NSCELLS * ( (tr->k[z] - 1) % Q) + p7X_M; r = (tr->k[z] - 1) / Q; u.v = wrk->dpf[0][q]; u.p[r] += 1.0; /* all this to increment a count by one! */ wrk->dpf[0][q] = u.v; } else /* emitted an x_i with no k; must be an N,C,J */ { switch (tr->st[z]) { case p7T_N: XMXo(0,p7X_N) += 1.0; break; case p7T_C: XMXo(0,p7X_C) += 1.0; break; case p7T_J: XMXo(0,p7X_J) += 1.0; break; } } } norm = 1.0 / (float) Ld; sv = _mm_set1_ps(norm); for (q = 0; q < Q; q++) { wrk->dpf[0][q*3 + p7X_M] = _mm_mul_ps(wrk->dpf[0][q*3 + p7X_M], sv); wrk->dpf[0][q*3 + p7X_I] = _mm_mul_ps(wrk->dpf[0][q*3 + p7X_I], sv); } XMXo(0,p7X_N) *= norm; XMXo(0,p7X_C) *= norm; XMXo(0,p7X_J) *= norm; /* Calculate null2's emission odds, by taking posterior weighted sum * over all emission vectors used in paths explaining the domain. */ xfactor = XMXo(0,p7X_N) + XMXo(0,p7X_C) + XMXo(0,p7X_J); for (x = 0; x < om->abc->K; x++) { sv = _mm_setzero_ps(); rp = om->rfv[x]; for (q = 0; q < Q; q++) { sv = _mm_add_ps(sv, _mm_mul_ps(wrk->dpf[0][q*3 + p7X_M], *rp)); rp++; sv = _mm_add_ps(sv, wrk->dpf[0][q*3 + p7X_I]); /* insert emission odds implicitly 1.0 */ // sv = _mm_add_ps(sv, _mm_mul_ps(wrk->dpf[0][q*3 + p7X_I], *rp)); rp++; } esl_sse_hsum_ps(sv, &(null2[x])); null2[x] += xfactor; } /* now null2[x] = \frac{f_d(x)}{f_0(x)} for all x in alphabet, * 0..K-1, where f_d(x) are the ad hoc "null2" residue frequencies * for this envelope. */ /* make valid scores for all degeneracies, by averaging the odds ratios. */ esl_abc_FAvgScVec(om->abc, null2); null2[om->abc->K] = 1.0; /* gap character */ null2[om->abc->Kp-2] = 1.0; /* nonresidue "*" */ null2[om->abc->Kp-1] = 1.0; /* missing data "~" */ return eslOK; } /***************************************************************** * 2. Benchmark driver *****************************************************************/ #ifdef p7NULL2_BENCHMARK /* icc -O3 -static -o null2_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7NULL2_BENCHMARK null2.c -lhmmer -leasel -lm ./null2_benchmark Does the expectation version. ./null2_benchmark -t Does the stochastic-traceback-dependent version. (This version isn't really dependent on M, so Mc/s may not be an appropriate measure.) RRM_1 (M=72) Caudal_act (M=136) SMC_N (M=1151) ----------------- ------------------ --------------- 21 Aug 2008 3.00u (480 Mc/s) 5.45u (499 Mc/s) 77.56u (297 Mc/s) -t 21 Aug 2008 30.50u (47 Mc/s) 44.96u (61 Mc/s) 32.03u*10 ( 72 Mc/s) */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-t", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "benchmark the trace-dependent version of null2", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for null2 estimation, SSE version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox1 = NULL; P7_OMX *ox2 = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); float null2[p7_MAXCODE]; int i,j,d,pos; int nsamples = 200; float fsc, bsc; double Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); ox1 = p7_omx_Create(gm->M, L, L); ox2 = p7_omx_Create(gm->M, L, L); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_Forward (dsq, L, om, ox1, &fsc); if (esl_opt_GetBoolean(go, "-t")) { P7_TRACE *tr = p7_trace_Create(); float *n2sc = malloc(sizeof(float) * (L+1)); esl_stopwatch_Start(w); for (i = 0; i < N; i++) { /* This is approximately what p7_domaindef.c::region_trace_ensemble() is doing: */ for (j = 0; j < nsamples; j++) { p7_StochasticTrace(r, dsq, L, om, ox1, tr); p7_trace_Index(tr); pos = 1; for (d = 0; d < tr->ndom; d++) { p7_Null2_ByTrace(om, tr, tr->tfrom[d], tr->tto[d], ox2, null2); for (; pos <= tr->sqfrom[d]; pos++) n2sc[pos] += 1.0; for (; pos < tr->sqto[d]; pos++) n2sc[pos] += null2[dsq[pos]]; } for (; pos <= L; pos++) n2sc[pos] += 1.0; p7_trace_Reuse(tr); } for (pos = 1; pos <= L; pos++) n2sc[pos] = logf(n2sc[pos] / nsamples); } esl_stopwatch_Stop(w); free(n2sc); p7_trace_Destroy(tr); } else { p7_Backward(dsq, L, om, ox1, ox2, &bsc); p7_Decoding(om, ox1, ox2, ox2); esl_stopwatch_Start(w); for (i = 0; i < N; i++) p7_Null2_ByExpectation(om, ox2, null2); esl_stopwatch_Stop(w); } Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) w->user; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(ox1); p7_omx_Destroy(ox2); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7NULL2_BENCHMARK*/ /*------------------ end, benchmark driver ----------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7NULL2_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" #include "esl_vectorops.h" /* compare results to GDecoding(). */ static void utest_null2_expectation(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N, float tolerance) { char *msg = "decoding unit test failed"; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *fwd = p7_omx_Create(M, L, L); P7_OMX *bck = p7_omx_Create(M, L, L); P7_OMX *pp = p7_omx_Create(M, L, L); P7_GMX *gxf = p7_gmx_Create(M, L); P7_GMX *gxb = p7_gmx_Create(M, L); P7_GMX *gpp = p7_gmx_Create(M, L); float *on2 = malloc(sizeof(float) * abc->Kp); float *gn2 = malloc(sizeof(float) * abc->Kp); float fsc1, fsc2; float bsc1, bsc2; if (!gn2 || !on2) esl_fatal(msg); if (p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om) != eslOK) esl_fatal(msg); while (N--) { if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal(msg); if (p7_Forward (dsq, L, om, fwd, &fsc1) != eslOK) esl_fatal(msg); if (p7_Backward (dsq, L, om, fwd, bck, &bsc1) != eslOK) esl_fatal(msg); if (p7_Decoding(om, fwd, bck, pp) != eslOK) esl_fatal(msg); if (p7_Null2_ByExpectation(om, pp, on2) != eslOK) esl_fatal(msg); if (p7_GForward (dsq, L, gm, gxf, &fsc2) != eslOK) esl_fatal(msg); if (p7_GBackward(dsq, L, gm, gxb, &bsc2) != eslOK) esl_fatal(msg); if (p7_GDecoding(gm, gxf, gxb, gpp) != eslOK) esl_fatal(msg); if (p7_GNull2_ByExpectation(gm, gpp, gn2) != eslOK) esl_fatal(msg); if (esl_vec_FCompare(gn2, on2, abc->Kp, tolerance) != eslOK) esl_fatal(msg); } p7_gmx_Destroy(gpp); p7_gmx_Destroy(gxf); p7_gmx_Destroy(gxb); p7_omx_Destroy(pp); p7_omx_Destroy(fwd); p7_omx_Destroy(bck); free(on2); free(gn2); free(dsq); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); } #endif /*p7NULL2_TESTDRIVE*/ /*--------------------- end, unit tests -------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7NULL2_TESTDRIVE /* gcc -g -Wall -msse2 -std=gnu99 -o null2_utest -I.. -L.. -I../../easel -L../../easel -Dp7NULL2_TESTDRIVE null2.c -lhmmer -leasel -lm ./null2_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-t", eslARG_REAL, "0.01", NULL, NULL, NULL, NULL, NULL, "floating point comparison tolerance", 0 }, { "-L", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "72", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "10", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for SSE implementation of null2 model"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_BG *bg = p7_bg_Create(abc); int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); float tol = esl_opt_GetReal (go, "-t"); p7_FLogsumInit(); utest_null2_expectation(r, abc, bg, M, L, N, tol); esl_getopts_Destroy(go); esl_randomness_Destroy(r); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); return eslOK; } #endif /*p7NULL2_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7NULL2_EXAMPLE #endif /*p7NULL2_EXAMPLE*/ /*------------------------ example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_sse/ssvfilter.c0000664361611702660230000010206212473612613017060 0ustar wheelerteddy/* The SSV filter implementation; SSE version. * * Contents: * 1. Introduction * 2. p7_SSVFilter() implementation * 3. Copyright and license information * * Bjarne Knudsen, CLC Bio * SVN $Id: ssvfilter.c 3974 2012-03-30 13:53:57Z wheelert $ */ /***************************************************************** * 1. Introduction *****************************************************************/ /* Here is a description of the major ides going into this * implementation of the SSV filter. * * * REMOVING THE J STATE * ==================== * * The original MSV filter allows use of the J state to chain together * multiple matches in different diagonals. Thus, a full match can * consist of diagonal match followed by the J state and then another * diagonal match later in the sequence. Going through the J state * has a certain price so for the full match to contain two different * diagonal matches connected by the J state, each of the individual * diagonal matches must score higher than the cost of going through * the J state. * * It turns out that even the best match in a model-sequence * comparison rarely scores higher than the cost of going through the * J state. This is the basis of the idea used here, which is to * completely ignore the J state. To avoid this leading to false * negatives, we check the resulting maximum score against the cost of * the going through the J state. In the rare cases where the J state * may in fact have been used, we return eslNORESULT. This indicates * to the original J state that it should recalculate the score. * * Since removing the J state allows significant improvements in * speed, the extra overhead of having to go through the original MSV * filter in about 1% of the cases is not a problem. * * Note that for the score to actually be different, we need two * diagonals to have a high scoring match, but we cannot easily check * for that. Thus, oftentimes the re-calculated score in the original * MSV filter will be the same as without the J state. * * The code governing the use of the J state in the original filter is: * * xEv = _mm_subs_epu8(xEv, tecv); * xJv = _mm_max_epu8(xJv,xEv); * xBv = _mm_max_epu8(basev, xJv); * * So for an xE value to be high enough to affect xJ, the following * inequality must be true: * * xJ = xE - om->tec_b > om->base_b * * We defer this check until the final maximal xE value has been * calculated. If the above holds true, we return eslNORESULT. * * Since the J state is removed, the xBv vector is constant, so we can * set it once an for all to a vector where all entries are: * * om->base_b - om->tjb_b - om->tbm_b * * But see the following section for why this is changed for other * reasons. * * * INTERNAL LOOP ADJUSTMENT AND IMPLICATIONS * ========================================= * * The following assumes that we have already gotten rid of the J * state. * * Here is an analysis of what is going on in the central loop. The * original code is: * * 1: sv = _mm_max_epu8(sv, xBv); * 2: sv = _mm_adds_epu8(sv, biasv); * 3: sv = _mm_subs_epu8(sv, *rsc); rsc++; * 4: xEv = _mm_max_epu8(xEv, sv); * * Here is a line by line description: * * 1: If sv is below xBv, it is set to xBv. xBv is the begin score, * which is om->base_b - om->tjb_b - om->tbm_b. * * 2: The bias (om->bias_b) is added. This is done since we are * using unsigned numbers and the score can be both positive and * negative. The bias is the negative of the highest value the * real match scores may have. * * 3: The match score (and bias) is subtracted. The subtracted score * must be positive since we using are unsigned bytes, thus the * score subtracted here is the one adjusted for bias. We also * progress to the next match score (rsc++). * * 4: The global maximum is updated. * * When the everything has been traversed, xEv is checked for a number * of conditions. First, the maximum value is extracted to xE, though. * * if xE is greater than or equal to 255 - om->bias_b, there may have * been an overflow, and the result is reported as infinite. * * Since we ignored the J state, we have to check whether it could * potentially have been used, possibly resulting in a higher * score. This is the case if (xE - om->tec_b) > om->base_b. The left * side of the check is the highest score that xJ could have * attained. In the original MSV filter this score would only have * affected the begin scores if this xJ value exceeded * om->base_b. This explains the check. * * Now, we optimize this internal loop by using two ideas: * * A: Get rid of line 1 by using saturation. This can be done * because xBv is a constant vector after getting rid of the J * state. * * B: Combine lines 2 and 3 by using a single signed subtraction * instead of an unsigned addition followed by an unsigned * subtraction. * * It is a challenge that SSE2 does not have a signed byte max * operation, yet we need to subtract a signed byte in idea B. First * the new code, then the explanation: * * sv = _mm_subs_epi8(sv, *rsc); rsc++; * xEv = _mm_max_epu8(xEv, sv); * * The last line is unchanged, i.e. the overall max is still done as * an unsigned maximum. The subtraction is saturated to satisfy idea A * and it is signed to satisfy idea B. * * To make the saturation work in the lower end of the scale, the * begin scores have to equal signed -128 which is the same as * unsigned 128, or a bit value of 10000000. Thus, we basically shift * the calculation with a (signed) value of -(om->base_b - om->tjb_b - * om->tbm_b + 128), which takes the original begin value to -128. * * Since we are using an unsigned maximum, the signed saturation at * +127 will not work. Thus, if the score gets high enough, we are * going to pass from signed negative values to non-negative values * without any saturation kicking in. In the unsigned domain this * basically constitutes an overflow from 255 to 0. This means that we * may miss a high score of it crosses this boundary. * * The highest positive effect that the subtraction can have is to add * om->bias_b, since this is the highest real match score. So only * scores strictly higher than 255 - om->bias_b in the unsigned domain * may cause an overflow. In the signed domain this corresponds to -1 * - om->bias_b. * * When the calculation is all done, we may check xE against this * boundary to determine if an overflow might have occurred. The other * thing to consider is the check for whether the J state may have * been used. This happens when: * * (xE + (om->base_b - om->tjb_b - om->tbm_b - 128) - om->tec_b) * > om->base_b. * * <=> xE > om->tjb_b + om->tbm_b + om->tec_b + 128 * * Thus, we have these two checks: * * xE >= 255 - om->bias_b (possible overflow) * * xE > om->tjb_b + om->tbm_b + om->tec_b - 128 (possible J state) * * To avoid having to call too many false positives, we do not want * the overflow to occur before the J state becomes possible. This * mean that we want: * * (Overflow => J state) * * <=> 255 - om->bias_b > om->tjb_b + om->tbm_b + om->tec_b + 128 * * <=> om->tjb_b + om->tbm_b + om->tec_b + om->bias_b < 127 * * The worst case bias is 19, om->tec_B is 3 for a sequence length of * L and a model length of M, we have: * * om->tjb_b = 3 * logf(3 / (L + 3)) * om->tbm_b = 3 * logf(2 / (M * (M + 1))) * * So if the sequence length is L = 1,000,000, the longest possible * model where the above holds true is M = 482. If the model size is M * = 2,295 (the largest in Pfam 23.0), the longest sequence length * where the condition is true is L = 43,786. So, the condition is not * always true, but typically, it is. And, importantly, it can be * checked. * * A final thing to consider is what to do on an overflow. Since we * shifted the baseline for the calculation, the question is if an * overflow is necessarily going to happen in the original MSV * filter. This is true when our baseline as no higher than the * original MSV filter baseline. Thus, when the following holds we * know that an overflow will occur for the original filter: * * om->base_b - om->tjb_b - om->tbm_b >= 128 * * If it does not hold, we are not sure what the true result is and we * have to indicate that in the return value. * * Since we perform a single signed subtraction instead of an unsigned * addition followed by in unsigned subtraction, a new set of match * scores have been introduced in the P7_OPROFILE structure. These are * called sb where the originals are rb. * * * EXPLANATION OF THE CODE * ======================= * * The basic idea is to traverse the sequence while analyzing only * enough diagonals that they may residue in registers rather than * memory. This may require several traversals of the sequence, but * this is still worth it due to reduced memory access. * * So we have a basic calculation concept where we fill out some * number of adjacent striped diagonal vectors throughout the whole * sequence. Consider a simple case where we have two registers, A and * B and they each have only two fields instead of 16. In one sweep of * a sequence we calculate the following matrix cells: * * | BA BA BA BA BA BA BA * | BA BA BA BA BA BA BA * |BA BA BA BA BA BA BA * H |A BA BA BA BA BA BA B * M | BA BA BA BA BA BA BA * M | BA BA BA BA BA BA BA * |BA BA BA BA BA BA BA * |A BA BA BA BA BA BA B * ---------------------------- * Sequence * * When the top entry in one of the vectors hits the top, the vector * must be left shifted to be ready for the next column. This first * happens to the last vector (B), then in the following round to the * first vector (A). * * This means that the sweep contains two different phases: one where * vectors are being moved without shifting and then a phase where the * vectors are being shifted one by one until the have all been * shifted. If we have Q sets of 16 diagonal and we have w registers * in use, the first phase takes Q - w rounds and the second phase * takes w rounds and we are back where we started. This is done until * the sequence ends. * * After having done this, we do another sweep, where we calculate the * remaining cells: * * |BA BA BA BA BA BA BA * |A BA BA BA BA BA BA B * | BA BA BA BA BA BA BA * H | BA BA BA BA BA BA BA * M |BA BA BA BA BA BA BA * M |A BA BA BA BA BA BA B * | BA BA BA BA BA BA BA * | BA BA BA BA BA BA BA * ---------------------------- * Sequence * * This sweep is identical to the first, except there is an offset to * the starting point. We call this offset q which is 2 in this case * and 0 above). * * Apart from the model, sequence, etc., the core calculation has two * parameters: w and q. If we have three registers and Q = 8, we do * three sweeps: * * sweep 1: q = 0, w = 3 * sweep 2: q = 3, w = 3 * sweep 3: q = 6, w = 2 * * This covers all diagonals and we are done. * * To make the compiler use registers as much as possible, we have to * be quite specific about what is going on, so we have to make a * function for each value of w. Since 64 bit machines have 16 xmm * registers, we need quite a few of these functions. It is also * possible that some of the diagonals actually end up in memory while * retaining high performance since a few scattered memory accesses * are not going to slow things down. * * To make the code maintainable, we cannot write out all these * functions. Instead the are defined via macros. So a function * definition may look like this: * * __m128i calc_band_6(ESL_DSQ *dsq, int L, P7_OPROFILE *om, int q, __m128i beginv, __m128i xEv) * { * CALC(RESET_6, STEP_BANDS_6, CONVERT_6, 6) * } * * The parameters are the sequence, its length, the model, the q * value, a begin vector and the max vector. The return value is the * updated max vector. The whole body of the function is defined as a * macro with parameters that are themselves expanded macros (apart * from the last parameter). * * The RESET macro defines and resets the xmm variables in the * function. It is defined recursively: * * #define RESET_1() * register __m128i sv00 = beginv; * * #define RESET_2() * RESET_1() * register __m128i sv01 = beginv; * * #define RESET_3() * RESET_2() * register __m128i sv02 = beginv; * * So the variables holding the scores for the diagonals are called * sv00, sv01, etc. * * The next macro is STEP_BANDS, which moves the diagonals. Again, * this is a recursively defined macro: * * #define STEP_BANDS_1() * STEP_SINGLE(sv00) * * #define STEP_BANDS_2() * STEP_BANDS_1() * STEP_SINGLE(sv01) * * #define STEP_BANDS_3() * STEP_BANDS_2() * STEP_SINGLE(sv02) * * So we end up using STEP_SINGLE on each vector. This is where the * central calculation is done as described above: * * #define STEP_SINGLE(sv) * sv = _mm_subs_epi8(sv, *rsc); rsc++; * xEv = _mm_max_epu8(xEv, sv); * * The CONVERT macro handles the second phase mentioned above where * the vectors have to be shifted. This is yet another recursive * macro: * * #define CONVERT_1(step, LENGTH_CHECK, label) * CONVERT_STEP(step, LENGTH_CHECK, label, sv00, Q - 1) * * #define CONVERT_2(step, LENGTH_CHECK, label) * CONVERT_STEP(step, LENGTH_CHECK, label, sv01, Q - 2) * CONVERT_1(step, LENGTH_CHECK, label) * * #define CONVERT_3(step, LENGTH_CHECK, label) * CONVERT_STEP(step, LENGTH_CHECK, label, sv02, Q - 3) * CONVERT_2(step, LENGTH_CHECK, label) * * Here, CONVERT_STEP ends up being called on each vector in reverse * order. It does the following: * * #define CONVERT_STEP(step, LENGTH_CHECK, label, sv, pos) * length_check(label) * rsc = om->sbv[dsq[i]] + pos; * step() * sv = _mm_slli_si128(sv, 1); * sv = _mm_or_si128(sv, beginv); * i++; * * First a check is made. This is sometimes used to check whether the * sequence is done. Then the match score pointer is set. After this, * STEP_BANDS is called using the step parameter of this * macro. Finally one vector is shifted and or'ed with the begin * vector of (128, 128, ... ). This ensures that the zero that was * shifted in is converted to the needed base line of 128. Other * entries are not significantly affected by this since either their * most significant bit is already set or we already had an overflow * and it does not matter. * * Notice that the CONVERT macro ends up stepping the diagonals w * times, so it handles the whole of phase two. Note also that the * macro may let rsc overflow since it does not reset rsc after a * shift operation. This is handled by extending the match score array * in the P7_OPROFILE by MAX_BANDS - 1 = 17 as defined by the p7O_EXTRA_SB * constant in that file. * * The only macro remaining is the CALC macro which just contains the * overall function for going through the various phases. Due to the * starting offset (q), the first Q - q sequence positions have to be * handled separately. After this follows a number of blocks of length * Q where we can be efficient and not do a check of whether the * sequence stops (the NO_CHECK macro indicates this). Finally, at the * end of the sequence we have to be careful and stop at the right * time, again using LENGTH_CHECK. * * Even though the code is only around 500 lines, it expands to a * fairly large file when the macros are parsed. For example, * _mm_subs_epi8() is called 6,840 times even though it is only * present once in this file. The object file is still not * ridiculously large. * * To better see what is going on, run the preprocessor on this file: * * gcc -E ssvfilter.c | sed 's/[;:]/&\n/g' | less * * Ignore the warnings and go look for the calc_band_2 function. * */ #include "p7_config.h" #include #include /* SSE */ #include /* SSE2 */ #include "easel.h" #include "esl_sse.h" #include "hmmer.h" #include "impl_sse.h" /* Note that some ifdefs below has to be changed if these values are changed. These values are chosen based on some simple speed tests. Apparently, two registers are generally used for something else, leaving 14 registers on 64 bit versions and 6 registers on 32 bit versions. */ #ifdef __x86_64__ /* 64 bit version */ #define MAX_BANDS 14 #else #define MAX_BANDS 6 #endif #define STEP_SINGLE(sv) \ sv = _mm_subs_epi8(sv, *rsc); rsc++; \ xEv = _mm_max_epu8(xEv, sv); #define LENGTH_CHECK(label) \ if (i >= L) goto label; #define NO_CHECK(label) #define STEP_BANDS_1() \ STEP_SINGLE(sv00) #define STEP_BANDS_2() \ STEP_BANDS_1() \ STEP_SINGLE(sv01) #define STEP_BANDS_3() \ STEP_BANDS_2() \ STEP_SINGLE(sv02) #define STEP_BANDS_4() \ STEP_BANDS_3() \ STEP_SINGLE(sv03) #define STEP_BANDS_5() \ STEP_BANDS_4() \ STEP_SINGLE(sv04) #define STEP_BANDS_6() \ STEP_BANDS_5() \ STEP_SINGLE(sv05) #define STEP_BANDS_7() \ STEP_BANDS_6() \ STEP_SINGLE(sv06) #define STEP_BANDS_8() \ STEP_BANDS_7() \ STEP_SINGLE(sv07) #define STEP_BANDS_9() \ STEP_BANDS_8() \ STEP_SINGLE(sv08) #define STEP_BANDS_10() \ STEP_BANDS_9() \ STEP_SINGLE(sv09) #define STEP_BANDS_11() \ STEP_BANDS_10() \ STEP_SINGLE(sv10) #define STEP_BANDS_12() \ STEP_BANDS_11() \ STEP_SINGLE(sv11) #define STEP_BANDS_13() \ STEP_BANDS_12() \ STEP_SINGLE(sv12) #define STEP_BANDS_14() \ STEP_BANDS_13() \ STEP_SINGLE(sv13) #define STEP_BANDS_15() \ STEP_BANDS_14() \ STEP_SINGLE(sv14) #define STEP_BANDS_16() \ STEP_BANDS_15() \ STEP_SINGLE(sv15) #define STEP_BANDS_17() \ STEP_BANDS_16() \ STEP_SINGLE(sv16) #define STEP_BANDS_18() \ STEP_BANDS_17() \ STEP_SINGLE(sv17) #define CONVERT_STEP(step, length_check, label, sv, pos) \ length_check(label) \ rsc = om->sbv[dsq[i]] + pos; \ step() \ sv = _mm_slli_si128(sv, 1); \ sv = _mm_or_si128(sv, beginv); \ i++; #define CONVERT_1(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv00, Q - 1) #define CONVERT_2(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv01, Q - 2) \ CONVERT_1(step, LENGTH_CHECK, label) #define CONVERT_3(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv02, Q - 3) \ CONVERT_2(step, LENGTH_CHECK, label) #define CONVERT_4(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv03, Q - 4) \ CONVERT_3(step, LENGTH_CHECK, label) #define CONVERT_5(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv04, Q - 5) \ CONVERT_4(step, LENGTH_CHECK, label) #define CONVERT_6(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv05, Q - 6) \ CONVERT_5(step, LENGTH_CHECK, label) #define CONVERT_7(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv06, Q - 7) \ CONVERT_6(step, LENGTH_CHECK, label) #define CONVERT_8(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv07, Q - 8) \ CONVERT_7(step, LENGTH_CHECK, label) #define CONVERT_9(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv08, Q - 9) \ CONVERT_8(step, LENGTH_CHECK, label) #define CONVERT_10(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv09, Q - 10) \ CONVERT_9(step, LENGTH_CHECK, label) #define CONVERT_11(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv10, Q - 11) \ CONVERT_10(step, LENGTH_CHECK, label) #define CONVERT_12(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv11, Q - 12) \ CONVERT_11(step, LENGTH_CHECK, label) #define CONVERT_13(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv12, Q - 13) \ CONVERT_12(step, LENGTH_CHECK, label) #define CONVERT_14(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv13, Q - 14) \ CONVERT_13(step, LENGTH_CHECK, label) #define CONVERT_15(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv14, Q - 15) \ CONVERT_14(step, LENGTH_CHECK, label) #define CONVERT_16(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv15, Q - 16) \ CONVERT_15(step, LENGTH_CHECK, label) #define CONVERT_17(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv16, Q - 17) \ CONVERT_16(step, LENGTH_CHECK, label) #define CONVERT_18(step, LENGTH_CHECK, label) \ CONVERT_STEP(step, LENGTH_CHECK, label, sv17, Q - 18) \ CONVERT_17(step, LENGTH_CHECK, label) #define RESET_1() \ register __m128i sv00 = beginv; #define RESET_2() \ RESET_1() \ register __m128i sv01 = beginv; #define RESET_3() \ RESET_2() \ register __m128i sv02 = beginv; #define RESET_4() \ RESET_3() \ register __m128i sv03 = beginv; #define RESET_5() \ RESET_4() \ register __m128i sv04 = beginv; #define RESET_6() \ RESET_5() \ register __m128i sv05 = beginv; #define RESET_7() \ RESET_6() \ register __m128i sv06 = beginv; #define RESET_8() \ RESET_7() \ register __m128i sv07 = beginv; #define RESET_9() \ RESET_8() \ register __m128i sv08 = beginv; #define RESET_10() \ RESET_9() \ register __m128i sv09 = beginv; #define RESET_11() \ RESET_10() \ register __m128i sv10 = beginv; #define RESET_12() \ RESET_11() \ register __m128i sv11 = beginv; #define RESET_13() \ RESET_12() \ register __m128i sv12 = beginv; #define RESET_14() \ RESET_13() \ register __m128i sv13 = beginv; #define RESET_15() \ RESET_14() \ register __m128i sv14 = beginv; #define RESET_16() \ RESET_15() \ register __m128i sv15 = beginv; #define RESET_17() \ RESET_16() \ register __m128i sv16 = beginv; #define RESET_18() \ RESET_17() \ register __m128i sv17 = beginv; #define CALC(reset, step, convert, width) \ int i; \ int i2; \ int Q = p7O_NQB(om->M); \ __m128i *rsc; \ \ int w = width; \ \ dsq++; \ \ reset() \ \ for (i = 0; i < L && i < Q - q - w; i++) \ { \ rsc = om->sbv[dsq[i]] + i + q; \ step() \ } \ \ i = Q - q - w; \ convert(step, LENGTH_CHECK, done1) \ done1: \ \ for (i2 = Q - q; i2 < L - Q; i2 += Q) \ { \ for (i = 0; i < Q - w; i++) \ { \ rsc = om->sbv[dsq[i2 + i]] + i; \ step() \ } \ \ i += i2; \ convert(step, NO_CHECK, ) \ } \ \ for (i = 0; i2 + i < L && i < Q - w; i++) \ { \ rsc = om->sbv[dsq[i2 + i]] + i; \ step() \ } \ \ i+=i2; \ convert(step, LENGTH_CHECK, done2) \ done2: \ \ return xEv; __m128i calc_band_1(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_1, STEP_BANDS_1, CONVERT_1, 1) } __m128i calc_band_2(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_2, STEP_BANDS_2, CONVERT_2, 2) } __m128i calc_band_3(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_3, STEP_BANDS_3, CONVERT_3, 3) } __m128i calc_band_4(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_4, STEP_BANDS_4, CONVERT_4, 4) } __m128i calc_band_5(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_5, STEP_BANDS_5, CONVERT_5, 5) } __m128i calc_band_6(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_6, STEP_BANDS_6, CONVERT_6, 6) } #if MAX_BANDS > 6 /* Only include needed functions to limit object file size */ __m128i calc_band_7(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_7, STEP_BANDS_7, CONVERT_7, 7) } __m128i calc_band_8(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_8, STEP_BANDS_8, CONVERT_8, 8) } __m128i calc_band_9(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_9, STEP_BANDS_9, CONVERT_9, 9) } __m128i calc_band_10(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_10, STEP_BANDS_10, CONVERT_10, 10) } __m128i calc_band_11(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_11, STEP_BANDS_11, CONVERT_11, 11) } __m128i calc_band_12(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_12, STEP_BANDS_12, CONVERT_12, 12) } __m128i calc_band_13(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_13, STEP_BANDS_13, CONVERT_13, 13) } __m128i calc_band_14(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_14, STEP_BANDS_14, CONVERT_14, 14) } #endif /* MAX_BANDS > 6 */ #if MAX_BANDS > 14 __m128i calc_band_15(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_15, STEP_BANDS_15, CONVERT_15, 15) } __m128i calc_band_16(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_16, STEP_BANDS_16, CONVERT_16, 16) } __m128i calc_band_17(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_17, STEP_BANDS_17, CONVERT_17, 17) } __m128i calc_band_18(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, int q, __m128i beginv, register __m128i xEv) { CALC(RESET_18, STEP_BANDS_18, CONVERT_18, 18) } #endif /* MAX_BANDS > 14 */ /***************************************************************** * 2. p7_SSVFilter() implementation *****************************************************************/ uint8_t get_xE(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om) { __m128i xEv; /* E state: keeps max for Mk->E as we go */ __m128i beginv; /* begin scores */ int q; /* counter over vectors 0..nq-1 */ int Q = p7O_NQB(om->M); /* segment length: # of vectors */ int bands; /* the number of bands (rounds) to use */ int last_q = 0; /* for saving the last q value to find band width */ int i; /* counter for bands */ /* function pointers for the various number of vectors to use */ __m128i (*fs[MAX_BANDS + 1]) (const ESL_DSQ *, int, const P7_OPROFILE *, int, register __m128i, __m128i) = {NULL , calc_band_1, calc_band_2, calc_band_3, calc_band_4, calc_band_5, calc_band_6 #if MAX_BANDS > 6 , calc_band_7, calc_band_8, calc_band_9, calc_band_10, calc_band_11, calc_band_12, calc_band_13, calc_band_14 #endif #if MAX_BANDS > 14 , calc_band_15, calc_band_16, calc_band_17, calc_band_18 #endif }; beginv = _mm_set1_epi8(128); xEv = beginv; /* Use the highest number of bands but no more than MAX_BANDS */ bands = (Q + MAX_BANDS - 1) / MAX_BANDS; for (i = 0; i < bands; i++) { q = (Q * (i + 1)) / bands; xEv = fs[q-last_q](dsq, L, om, last_q, beginv, xEv); last_q = q; } return esl_sse_hmax_epu8(xEv); } int p7_SSVFilter(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, float *ret_sc) { /* Use 16 bit values to avoid overflow due to moved baseline */ uint16_t xE; uint16_t xJ; if (om->tjb_b + om->tbm_b + om->tec_b + om->bias_b >= 127) { /* the optimizations are not guaranteed to work under these conditions (see comments at start of file) */ return eslENORESULT; } xE = get_xE(dsq, L, om); if (xE >= 255 - om->bias_b) { /* We have an overflow. */ *ret_sc = eslINFINITY; if (om->base_b - om->tjb_b - om->tbm_b < 128) { /* The original MSV filter may not overflow, so we are not sure our result is correct */ return eslENORESULT; } /* We know that the overflow will also occur in the original MSV filter */ return eslERANGE; } xE += om->base_b - om->tjb_b - om->tbm_b; xE -= 128; if (xE >= 255 - om->bias_b) { /* We know that the result will overflow in the original MSV filter */ *ret_sc = eslINFINITY; return eslERANGE; } xJ = xE - om->tec_b; if (xJ > om->base_b) return eslENORESULT; /* The J state could have been used, so doubt about score */ /* finally C->T, and add our missing precision on the NN,CC,JJ back */ *ret_sc = ((float) (xJ - om->tjb_b) - (float) om->base_b); *ret_sc /= om->scale_b; *ret_sc -= 3.0; /* that's ~ L \log \frac{L}{L+3}, for our NN,CC,JJ */ return eslOK; } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_sse/stotrace.c0000664361611702660230000006245612473612613016677 0ustar wheelerteddy/* SSE implementation of stochastic backtrace of a Forward matrix. * (Compare generic version, p7_GStochasticTrace().) * * Contents: * 1. Stochastic trace implementation. * 2. Selection of steps in the traceback. * 3. Benchmark driver. * 4. Unit tests. * 5. Test driver. * 6. Example. * 7. Copyright and license information. * * SRE, Fri Aug 15 08:02:43 2008 [Janelia] * SVN $Id: stotrace.c 3639 2011-08-05 14:43:19Z nawrockie $ */ #include "p7_config.h" #include #include #include /* SSE */ #include /* SSE2 */ #include "easel.h" #include "esl_random.h" #include "esl_sse.h" #include "esl_vectorops.h" #include "hmmer.h" #include "impl_sse.h" static inline int select_m(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int k); static inline int select_d(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int k); static inline int select_i(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int k); static inline int select_n(int i); static inline int select_c(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i); static inline int select_j(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i); static inline int select_e(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int *ret_k); static inline int select_b(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i); /***************************************************************** * 1. Stochastic trace implementation. *****************************************************************/ /* Function: p7_StochasticTrace() * Synopsis: Sample a traceback from a Forward matrix * Incept: SRE, Fri Aug 8 17:40:18 2008 [UA217, IAD-SFO] * * Purpose: Perform a stochastic traceback from Forward matrix , * using random number generator , in order to sample an * alignment of model to digital sequence of * length . * * The sampled traceback is returned in , which the * caller provides with at least an initial allocation; * the allocation will be grown as needed here. * * Args: r - source of random numbers * dsq - digital sequence being aligned, 1..L * L - length of dsq * om - profile * ox - Forward matrix to trace, LxM * tr - storage for the recovered traceback * * Returns: on success * * Throws: on allocation error. * on several types of problems, including: * the trace isn't empty (wasn't Reuse()'d); */ int p7_StochasticTrace(ESL_RANDOMNESS *rng, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *ox, P7_TRACE *tr) { int i; /* position in sequence 1..L */ int k; /* position in model 1..M */ int s0, s1; /* choice of a state */ int status; if (tr->N != 0) ESL_EXCEPTION(eslEINVAL, "trace not empty; needs to be Reuse()'d?"); i = L; k = 0; if ((status = p7_trace_Append(tr, p7T_T, k, i)) != eslOK) return status; if ((status = p7_trace_Append(tr, p7T_C, k, i)) != eslOK) return status; s0 = tr->st[tr->N-1]; while (s0 != p7T_S) { switch (s0) { case p7T_M: s1 = select_m(rng, om, ox, i, k); k--; i--; break; case p7T_D: s1 = select_d(rng, om, ox, i, k); k--; break; case p7T_I: s1 = select_i(rng, om, ox, i, k); i--; break; case p7T_N: s1 = select_n(i); break; case p7T_C: s1 = select_c(rng, om, ox, i); break; case p7T_J: s1 = select_j(rng, om, ox, i); break; case p7T_E: s1 = select_e(rng, om, ox, i, &k); break; case p7T_B: s1 = select_b(rng, om, ox, i); break; default: ESL_EXCEPTION(eslEINVAL, "bogus state in traceback"); } if (s1 == -1) ESL_EXCEPTION(eslEINVAL, "Stochastic traceback choice failed"); if ((status = p7_trace_Append(tr, s1, k, i)) != eslOK) return status; if ( (s1 == p7T_N || s1 == p7T_J || s1 == p7T_C) && s1 == s0) i--; s0 = s1; } /* end traceback, at S state */ tr->M = om->M; tr->L = L; return p7_trace_Reverse(tr); } /*------------------ end, stochastic traceback ------------------*/ /***************************************************************** * 2. Selection of steps in the traceback *****************************************************************/ /* The guts of the stochastic backtrace function is broken out in * pieces: each select_?() function randomly selects one of the * possible paths, according to their probability, and returns the * index of the state we move to next. */ /* M(i,k) is reached from B(i-1), M(i-1,k-1), D(i-1,k-1), or I(i-1,k-1). */ static inline int select_m(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int k) { int Q = p7O_NQF(ox->M); int q = (k-1) % Q; /* (q,r) is position of the current DP cell M(i,k) */ int r = (k-1) / Q; __m128 *tp = om->tfv + 7*q; /* *tp now at start of transitions to cur cell M(i,k) */ __m128 xBv = _mm_set1_ps(ox->xmx[(i-1)*p7X_NXCELLS+p7X_B]); __m128 zerov = _mm_setzero_ps(); __m128 mpv, dpv, ipv; union { __m128 v; float p[4]; } u; float path[4]; int state[4] = { p7T_B, p7T_M, p7T_I, p7T_D }; if (q > 0) { mpv = ox->dpf[i-1][(q-1)*3 + p7X_M]; dpv = ox->dpf[i-1][(q-1)*3 + p7X_D]; ipv = ox->dpf[i-1][(q-1)*3 + p7X_I]; } else { mpv = esl_sse_rightshift_ps(ox->dpf[i-1][(Q-1)*3 + p7X_M], zerov); dpv = esl_sse_rightshift_ps(ox->dpf[i-1][(Q-1)*3 + p7X_D], zerov); ipv = esl_sse_rightshift_ps(ox->dpf[i-1][(Q-1)*3 + p7X_I], zerov); } u.v = _mm_mul_ps(xBv, *tp); tp++; path[0] = u.p[r]; u.v = _mm_mul_ps(mpv, *tp); tp++; path[1] = u.p[r]; u.v = _mm_mul_ps(ipv, *tp); tp++; path[2] = u.p[r]; u.v = _mm_mul_ps(dpv, *tp); path[3] = u.p[r]; esl_vec_FNorm(path, 4); return state[esl_rnd_FChoose(rng, path, 4)]; } /* D(i,k) is reached from M(i, k-1) or D(i,k-1). */ static inline int select_d(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int k) { int Q = p7O_NQF(ox->M); int q = (k-1) % Q; /* (q,r) is position of the current DP cell D(i,k) */ int r = (k-1) / Q; __m128 zerov = _mm_setzero_ps(); __m128 mpv, dpv; __m128 tmdv, tddv; union { __m128 v; float p[4]; } u; float path[2]; int state[2] = { p7T_M, p7T_D }; if (q > 0) { mpv = ox->dpf[i][(q-1)*3 + p7X_M]; dpv = ox->dpf[i][(q-1)*3 + p7X_D]; tmdv = om->tfv[7*(q-1) + p7O_MD]; tddv = om->tfv[7*Q + (q-1)]; } else { mpv = esl_sse_rightshift_ps(ox->dpf[i][(Q-1)*3 + p7X_M], zerov); dpv = esl_sse_rightshift_ps(ox->dpf[i][(Q-1)*3 + p7X_D], zerov); tmdv = esl_sse_rightshift_ps(om->tfv[7*(Q-1) + p7O_MD], zerov); tddv = esl_sse_rightshift_ps(om->tfv[8*Q-1], zerov); } u.v = _mm_mul_ps(mpv, tmdv); path[0] = u.p[r]; u.v = _mm_mul_ps(dpv, tddv); path[1] = u.p[r]; esl_vec_FNorm(path, 2); return state[esl_rnd_FChoose(rng, path, 2)]; } /* I(i,k) is reached from M(i-1, k) or I(i-1,k). */ static inline int select_i(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int k) { int Q = p7O_NQF(ox->M); int q = (k-1) % Q; /* (q,r) is position of the current DP cell D(i,k) */ int r = (k-1) / Q; __m128 mpv = ox->dpf[i-1][q*3 + p7X_M]; __m128 ipv = ox->dpf[i-1][q*3 + p7X_I]; __m128 *tp = om->tfv + 7*q + p7O_MI; union { __m128 v; float p[4]; } u; float path[2]; int state[2] = { p7T_M, p7T_I }; u.v = _mm_mul_ps(mpv, *tp); tp++; path[0] = u.p[r]; u.v = _mm_mul_ps(ipv, *tp); path[1] = u.p[r]; esl_vec_FNorm(path, 2); return state[esl_rnd_FChoose(rng, path, 2)]; } /* N(i) must come from N(i-1) for i>0; else it comes from S */ static inline int select_n(int i) { if (i == 0) return p7T_S; else return p7T_N; } /* C(i) is reached from E(i) or C(i-1). */ static inline int select_c(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i) { float path[2]; int state[2] = { p7T_C, p7T_E }; path[0] = ox->xmx[(i-1)*p7X_NXCELLS+p7X_C] * om->xf[p7O_C][p7O_LOOP]; path[1] = ox->xmx[ i*p7X_NXCELLS+p7X_E] * om->xf[p7O_E][p7O_MOVE] * ox->xmx[i*p7X_NXCELLS+p7X_SCALE]; esl_vec_FNorm(path, 2); return state[esl_rnd_FChoose(rng, path, 2)]; } /* J(i) is reached from E(i) or J(i-1). */ static inline int select_j(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i) { float path[2]; int state[2] = { p7T_J, p7T_E }; path[0] = ox->xmx[(i-1)*p7X_NXCELLS+p7X_J] * om->xf[p7O_J][p7O_LOOP]; path[1] = ox->xmx[ i*p7X_NXCELLS+p7X_E] * om->xf[p7O_E][p7O_LOOP] * ox->xmx[i*p7X_NXCELLS+p7X_SCALE]; esl_vec_FNorm(path, 2); return state[esl_rnd_FChoose(rng, path, 2)]; } /* E(i) is reached from any M(i, k=1..M) or D(i, k=2..M). */ /* Using FChoose() here would mean allocating tmp space for 2M-1 paths; * instead we use the fact that E(i) is itself the necessary normalization * factor, and implement FChoose's algorithm here for an on-the-fly * calculation. * Note that that means double-precision calculation, to be sure 0.0 <= roll < 1.0 */ static inline int select_e(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int *ret_k) { int Q = p7O_NQF(ox->M); double sum = 0.0; double roll = esl_random(rng); double norm = 1.0 / ox->xmx[i*p7X_NXCELLS+p7X_E]; __m128 xEv = _mm_set1_ps(norm); /* all M, D already scaled exactly the same */ union { __m128 v; float p[4]; } u; int q,r; while (1) { for (q = 0; q < Q; q++) { u.v = _mm_mul_ps(ox->dpf[i][q*3 + p7X_M], xEv); for (r = 0; r < 4; r++) { sum += u.p[r]; if (roll < sum) { *ret_k = r*Q + q + 1; return p7T_M;} } u.v = _mm_mul_ps(ox->dpf[i][q*3 + p7X_D], xEv); for (r = 0; r < 4; r++) { sum += u.p[r]; if (roll < sum) { *ret_k = r*Q + q + 1; return p7T_D;} } } ESL_DASSERT1((sum > 0.99)); } /*UNREACHED*/ ESL_EXCEPTION(-1, "unreached code was reached. universe collapses."); } /* B(i) is reached from N(i) or J(i). */ static inline int select_b(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i) { float path[2]; int state[2] = { p7T_N, p7T_J }; path[0] = ox->xmx[i*p7X_NXCELLS+p7X_N] * om->xf[p7O_N][p7O_MOVE]; path[1] = ox->xmx[i*p7X_NXCELLS+p7X_J] * om->xf[p7O_J][p7O_MOVE]; esl_vec_FNorm(path, 2); return state[esl_rnd_FChoose(rng, path, 2)]; } /*---------------------- end, step selection --------------------*/ /***************************************************************** * 3. Benchmark *****************************************************************/ #ifdef p7STOTRACE_BENCHMARK /* gcc -g -O2 -o stotrace_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7STOTRACE_BENCHMARK stotrace.c -lhmmer -leasel -lm icc -O3 -static -o stotrace_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7STOTRACE_BENCHMARK stotrace.c -lhmmer -leasel -lm ./stotrace_benchmark */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seq" , 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of sampled tracebacks", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for stochastic traceback, SSE version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx = NULL; P7_OMX *fwd = NULL; P7_TRACE *tr = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc, fsc, vsc; float bestsc = -eslINFINITY; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_UNILOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); fwd = p7_omx_Create(gm->M, L, L); gx = p7_gmx_Create(gm->M, L); tr = p7_trace_Create(); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_GViterbi(dsq, L, gm, gx, &vsc); p7_Forward (dsq, L, om, fwd, &fsc); esl_stopwatch_Start(w); for (i = 0; i < N; i++) { p7_StochasticTrace(r, dsq, L, om, fwd, tr); p7_trace_Score(tr, dsq, gm, &sc); bestsc = ESL_MAX(bestsc, sc); p7_trace_Reuse(tr); } esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("forward sc = %.4f nats\n", fsc); printf("viterbi sc = %.4f nats\n", vsc); printf("max trace sc = %.4f nats\n", bestsc); free(dsq); p7_trace_Destroy(tr); p7_gmx_Destroy(gx); p7_omx_Destroy(fwd); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7STOTRACE_BENCHMARK*/ /*----------------- end, benchmark ------------------------------*/ /***************************************************************** * 4. Unit tests *****************************************************************/ #ifdef p7STOTRACE_TESTDRIVE #include "esl_getopts.h" /* tests: * 1. each sampled trace must validate. * 2. each trace must be <= viterbi trace score * 3. in a large # of traces, one is "equal" to the viterbi trace score. * (this of course is stochastic; but it's true for the particular * choice of RNG seed used in tests here.) */ static void utest_stotrace(ESL_GETOPTS *go, ESL_RANDOMNESS *rng, ESL_ALPHABET *abc, P7_PROFILE *gm, P7_OPROFILE *om, ESL_DSQ *dsq, int L, int ntrace) { P7_GMX *gx = NULL; P7_OMX *ox = NULL; P7_TRACE *vtr = NULL; P7_TRACE *tr = NULL; char errbuf[eslERRBUFSIZE]; int idx; float maxsc = -eslINFINITY; float vsc, sc; if ((gx = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("generic DP matrix creation failed"); if ((ox = p7_omx_Create(gm->M, L, L)) == NULL) esl_fatal("optimized DP matrix create failed"); if ((tr = p7_trace_Create()) == NULL) esl_fatal("trace creation failed"); if ((vtr = p7_trace_Create()) == NULL) esl_fatal("trace creation failed"); if (p7_GViterbi(dsq, L, gm, gx, &vsc) != eslOK) esl_fatal("viterbi failed"); if (p7_GTrace (dsq, L, gm, gx, vtr) != eslOK) esl_fatal("viterbi trace failed"); if (p7_Forward (dsq, L, om, ox, NULL) != eslOK) esl_fatal("forward failed"); for (idx = 0; idx < ntrace; idx++) { if (p7_StochasticTrace(rng, dsq, L, om, ox, tr) != eslOK) esl_fatal("stochastic trace failed"); if (p7_trace_Validate(tr, abc, dsq, errbuf) != eslOK) esl_fatal("trace invalid:\n%s", errbuf); if (p7_trace_Score(tr, dsq, gm, &sc) != eslOK) esl_fatal("trace scoring failed"); maxsc = ESL_MAX(sc, maxsc); if (sc > vsc + 0.001){ /* need a little tolerance of floating point math here */ //p7_trace_Dump(stdout, vtr, gm, dsq); //p7_trace_Dump(stdout, tr, gm, dsq); esl_fatal("sampled trace has score > optimal Viterbi path; not possible (%f > %f)", sc, vsc); } p7_trace_Reuse(tr); } if (esl_FCompare(maxsc, vsc, 0.1) != eslOK) esl_fatal("stochastic trace failed to sample the Viterbi path"); p7_trace_Destroy(tr); p7_trace_Destroy(vtr); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); } #endif /*p7STOTRACE_TESTDRIVE*/ /*----------------- end, unit tests -----------------------------*/ /***************************************************************** * 5. Test driver *****************************************************************/ #ifdef p7STOTRACE_TESTDRIVE /* gcc -std=gnu99 -msse2 -g -Wall -o stotrace_utest -Dp7STOTRACE_TESTDRIVE -I.. -L.. -I../../easel -L../../easel stotrace.c -lhmmer -leasel -lm */ #include "easel.h" #include "esl_getopts.h" #include "esl_randomseq.h" #include "p7_config.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "--vv", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be very verbose", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "unit test driver for stochastic Viterbi traceback (optimized version)"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_BG *bg = NULL; ESL_DSQ *dsq = NULL; ESL_SQ *sq = NULL; int M = 6; int L = 10; int ntrace = 1000; if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if (p7_hmm_Sample(r, M, abc, &hmm) != eslOK) esl_fatal("failed to sample an HMM"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if ((gm = p7_profile_Create(hmm->M, abc)) == NULL) esl_fatal("failed to create profile"); if (p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL) != eslOK) esl_fatal("failed to config profile"); if ((om = p7_oprofile_Create(gm->M, abc)) == NULL) esl_fatal("failed to create optimized profile"); if (p7_oprofile_Convert(gm, om) != eslOK) esl_fatal("failed to convert profile"); /* Test with randomly generated (iid) sequence */ if ((dsq = malloc(sizeof(ESL_DSQ) *(L+2))) == NULL) esl_fatal("malloc failed"); if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal("seq generation failed"); utest_stotrace(go, r, abc, gm, om, dsq, L, ntrace); /* Test with seq sampled from profile */ if ((sq = esl_sq_CreateDigital(abc)) == NULL) esl_fatal("sequence allocation failed"); if (p7_ProfileEmit(r, hmm, gm, bg, sq, NULL) != eslOK) esl_fatal("profile emission failed"); utest_stotrace(go, r, abc, gm, om, sq->dsq, sq->n, ntrace); esl_sq_Destroy(sq); free(dsq); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7STOTRACE_TESTDRIVE*/ /*---------------- end, test driver -----------------------------*/ /***************************************************************** * 6. Example. *****************************************************************/ #ifdef p7STOTRACE_EXAMPLE /* gcc -g -Wall -msse2 -std=gnu99 -o stotrace_example -I.. -L.. -I../../easel -L../../easel -Dp7STOTRACE_EXAMPLE stotrace.c -lhmmer -leasel -lm ./example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-m", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump the DP matrix to stdout", 0 }, { "-p", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump the profile to stdout", 0 }, { "-t", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump the sampled trace to stdout", 0 }, { "-N", eslARG_INT, "1", NULL, NULL, NULL, NULL, NULL, "number of traces to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of stochastic backtrace (SSE version)"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; ESL_RANDOMNESS *rng = esl_randomness_CreateFast(0); P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx = NULL; P7_OMX *fwd = NULL; P7_TRACE *tr = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; int N = esl_opt_GetInteger(go, "-N"); int i; float vsc, fsc, tsc; char errbuf[eslERRBUFSIZE]; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); if (esl_opt_GetBoolean(go, "-p")) p7_oprofile_Dump(stdout, om); fwd = p7_omx_Create(gm->M, sq->n, sq->n); gx = p7_gmx_Create(gm->M, sq->n); tr = p7_trace_Create(); if (esl_opt_GetBoolean(go, "-m") == TRUE) p7_omx_SetDumpMode(stdout, fwd, TRUE); p7_GViterbi(sq->dsq, sq->n, gm, gx, &vsc); p7_Forward (sq->dsq, sq->n, om, fwd, &fsc); for (i = 0; i < N; i++) { p7_StochasticTrace(rng, sq->dsq, sq->n, om, fwd, tr); p7_trace_Score(tr, sq->dsq, gm, &tsc); if (esl_opt_GetBoolean(go, "-t") == TRUE) p7_trace_Dump(stdout, tr, gm, sq->dsq); if (p7_trace_Validate(tr, abc, sq->dsq, errbuf) != eslOK) p7_Die("trace %d fails validation:\n%s\n", i, errbuf); printf("Sampled trace: %.4f nats\n", tsc); p7_trace_Reuse(tr); } printf("Forward score: %.4f nats\n", fsc); printf("Viterbi score: %.4f nats\n", vsc); /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_trace_Destroy(tr); p7_omx_Destroy(fwd); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_randomness_Destroy(rng); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7STOTRACE_EXAMPLE*/ /*------------------------ end, example -------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_sse/vitscore.c0000664361611702660230000005145612473612613016707 0ustar wheelerteddy/* Viterbi score implementation; SSE version. * * This is a SIMD vectorized, striped, interleaved, one-row O(M) * memory implementation of the Viterbi algorithm, for calculating an * accurate Viterbi score, without traceback. * * This implementation has full range and precision, so it may be used * in any alignment mode (not just local), and on any target sequence * (not excluding high-scoring ones). * * The optimized profile must be configured to contain lspace float * scores, not its normal pspace float scores. * * Contents: * 1. Viterbi score implementation. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * SRE, Sun Aug 3 13:10:24 2008 [St. Louis] * SVN $Id: vitscore.c 3665 2011-08-25 13:45:55Z eddys $ */ #include "p7_config.h" #include #include #include /* SSE */ #include /* SSE2 */ #include "easel.h" #include "esl_sse.h" #include "hmmer.h" #include "impl_sse.h" /***************************************************************** * 1. Viterbi score implementation *****************************************************************/ /* Function: p7_ViterbiScore() * Synopsis: Calculates Viterbi score, correctly, and vewy vewy fast. * Incept: SRE, Tue Nov 27 09:15:24 2007 [Janelia] * * Purpose: Calculates the Viterbi score for sequence of length * residues, using optimized profile , and a preallocated * one-row DP matrix . Return the Viterbi score (in nats) * in . * * The model must be configured specially to have * lspace float scores, not its usual pspace float scores for * . * * As with all <*Score()> implementations, the score is * accurate (full range and precision) and can be * calculated on models in any mode, not only local modes. * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * ret_sc - RETURN: Viterbi score (in nats) * * Returns: on success. * * Throws: if allocation is too small. */ int p7_ViterbiScore(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc) { register __m128 mpv, dpv, ipv; /* previous row values */ register __m128 sv; /* temp storage of 1 curr row value in progress */ register __m128 dcv; /* delayed storage of D(i,q+1) */ register __m128 xEv; /* E state: keeps max for Mk->E as we go */ register __m128 xBv; /* B state: splatted vector of B[i-1] for B->Mk calculations */ register __m128 Dmaxv; /* keeps track of maximum D cell on row */ __m128 infv; /* -eslINFINITY in a vector */ float xN, xE, xB, xC, xJ; /* special states' scores */ float Dmax; /* maximum D cell on row */ int i; /* counter over sequence positions 1..L */ int q; /* counter over vectors 0..nq-1 */ int Q = p7O_NQF(om->M); /* segment length: # of vectors */ __m128 *dp = ox->dpf[0]; /* using {MDI}MX(q) macro requires initialization of */ __m128 *rsc; /* will point at om->rf[x] for residue x[i] */ __m128 *tsc; /* will point into (and step thru) om->tf */ /* Check that the DP matrix is ok for us. */ if (Q > ox->allocQ4) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small"); ox->M = om->M; /* Initialization. */ infv = _mm_set1_ps(-eslINFINITY); for (q = 0; q < Q; q++) MMXo(q) = IMXo(q) = DMXo(q) = infv; xN = 0.; xB = om->xf[p7O_N][p7O_MOVE]; xE = -eslINFINITY; xJ = -eslINFINITY; xC = -eslINFINITY; #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpFloatRow(ox, FALSE, 0, 5, 2, xE, xN, xJ, xB, xC); /* logify=FALSE, =0, width=5, precision=2*/ #endif for (i = 1; i <= L; i++) { rsc = om->rf[dsq[i]]; tsc = om->tf; dcv = infv; xEv = infv; Dmaxv = infv; xBv = _mm_set1_ps(xB); mpv = esl_sse_rightshift_ps(MMXo(Q-1), infv); /* Right shifts by 4 bytes. 4,8,12,x becomes x,4,8,12. */ dpv = esl_sse_rightshift_ps(DMXo(Q-1), infv); ipv = esl_sse_rightshift_ps(IMXo(Q-1), infv); for (q = 0; q < Q; q++) { /* Calculate new MMXo(i,q); don't store it yet, hold it in sv. */ sv = _mm_add_ps(xBv, *tsc); tsc++; sv = _mm_max_ps(sv, _mm_add_ps(mpv, *tsc)); tsc++; sv = _mm_max_ps(sv, _mm_add_ps(ipv, *tsc)); tsc++; sv = _mm_max_ps(sv, _mm_add_ps(dpv, *tsc)); tsc++; sv = _mm_add_ps(sv, *rsc); rsc++; xEv = _mm_max_ps(xEv, sv); /* Load {MDI}(i-1,q) into mpv, dpv, ipv; * {MDI}MX(q) is then the current, not the prev row */ mpv = MMXo(q); dpv = DMXo(q); ipv = IMXo(q); /* Do the delayed stores of {MD}(i,q) now that memory is usable */ MMXo(q) = sv; DMXo(q) = dcv; /* Calculate the next D(i,q+1) partially: M->D only; * delay storage, holding it in dcv */ dcv = _mm_add_ps(sv, *tsc); tsc++; Dmaxv = _mm_max_ps(dcv, Dmaxv); /* Calculate and store I(i,q) */ sv = _mm_add_ps(mpv, *tsc); tsc++; sv = _mm_max_ps(sv, _mm_add_ps(ipv, *tsc)); tsc++; IMXo(q) = _mm_add_ps(sv, *rsc); rsc++; } /* Now the "special" states, which start from Mk->E (->C, ->J->B) */ esl_sse_hmax_ps(xEv, &xE); xN = xN + om->xf[p7O_N][p7O_LOOP]; xC = ESL_MAX(xC + om->xf[p7O_C][p7O_LOOP], xE + om->xf[p7O_E][p7O_MOVE]); xJ = ESL_MAX(xJ + om->xf[p7O_J][p7O_LOOP], xE + om->xf[p7O_E][p7O_LOOP]); xB = ESL_MAX(xJ + om->xf[p7O_J][p7O_MOVE], xN + om->xf[p7O_N][p7O_MOVE]); /* and now xB will carry over into next i, and xC carries over after i=L */ /* Finally the "lazy F" loop (sensu [Farrar07]). We can often * prove that we don't need to evaluate any D->D paths at all. * * The observation is that if we can show that on the next row, * B->M(i+1,k) paths always dominate M->D->...->D->M(i+1,k) paths * for all k, then we don't need any D->D calculations. * * The test condition is: * max_k D(i,k) + max_k ( TDD(k-2) + TDM(k-1) - TBM(k) ) < xB(i) * So: * max_k (TDD(k-2) + TDM(k-1) - TBM(k)) is precalc'ed in om->dd_bound; * max_k D(i,k) is why we tracked Dmaxv; * xB(i) was just calculated above. */ esl_sse_hmax_ps(Dmaxv, &Dmax); if (Dmax + om->ddbound_f > xB) { /* Now we're obligated to do at least one complete DD path to be sure. */ /* dcv has carried through from end of q loop above */ dcv = esl_sse_rightshift_ps(dcv, infv); tsc = om->tf + 7*Q; /* set tsc to start of the DD's */ for (q = 0; q < Q; q++) { DMXo(q) = _mm_max_ps(dcv, DMXo(q)); dcv = _mm_add_ps(DMXo(q), *tsc); tsc++; } /* We may have to do up to three more passes; the check * is for whether crossing a segment boundary can improve * our score. */ do { dcv = esl_sse_rightshift_ps(dcv, infv); tsc = om->tf + 7*Q; /* set tsc to start of the DD's */ for (q = 0; q < Q; q++) { if (! esl_sse_any_gt_ps(dcv, DMXo(q))) break; DMXo(q) = _mm_max_ps(dcv, DMXo(q)); dcv = _mm_add_ps(DMXo(q), *tsc); tsc++; } } while (q == Q); } else { /* not calculating DD? then just store that last MD vector we calc'ed. */ dcv = esl_sse_rightshift_ps(dcv, infv); DMXo(0) = dcv; } #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpFloatRow(ox, FALSE, i, 5, 2, xE, xN, xJ, xB, xC); /* logify=FALSE, =i, width=5, precision=2*/ #endif } /* end loop over sequence residues 1..L */ /* finally C->T */ *ret_sc = xC + om->xf[p7O_C][p7O_MOVE]; return eslOK; } /*------------------ end, p7_ViterbiScore() ---------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ #ifdef p7VITSCORE_BENCHMARK /* -c, -x are used for debugging, testing. See msvfilter.c for * an explanation. Here -c and -x are the same: both compare * to p7_GViterbi() scores. */ /* gcc -o benchmark-vitscore -std=gnu99 -g -Wall -msse2 -I.. -L.. -I../../easel -L../../easel -Dp7VITSCORE_BENCHMARK vitscore.c -lhmmer -leasel -lm icc -o benchmark-vitscore -O3 -static -I.. -L.. -I../../easel -L../../easel -Dp7VITSCORE_BENCHMARK vitscore.c -lhmmer -leasel -lm ./benchmark-vitscore runs benchmark ./benchmark-vitscore -N100 -c compare scores to generic impl ./benchmark-vitscore -N100 -x equate scores to exact emulation */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for SSE ViterbiScore()"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc1, sc2; double base_time, bench_time, Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); p7_oprofile_Logify(om); ox = p7_omx_Create(gm->M, 0, 0); gx = p7_gmx_Create(gm->M, L); /* Get a baseline time: how long it takes just to generate the sequences */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; /* Run the benchmark */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_ViterbiScore (dsq, L, om, ox, &sc1); if (esl_opt_GetBoolean(go, "-c") || esl_opt_GetBoolean(go, "-x")) { p7_GViterbi(dsq, L, gm, gx, &sc2); printf("%.4f %.4f\n", sc1, sc2); } } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7VITSCORE_BENCHMARK*/ /*------------------- end, benchmark driver ---------------------*/ /***************************************************************** * 3. Unit tests. *****************************************************************/ #ifdef p7VITSCORE_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" /* ViterbiScore() unit test * * We can compare these scores to GViterbi() almost exactly; the only * differences should be negligible roundoff errors. Must convert * the optimized profile to lspace, though, rather than pspace. */ static void utest_viterbi_score(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *ox = p7_omx_Create(M, 0, 0); P7_GMX *gx = p7_gmx_Create(M, L); float sc1, sc2; p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om); p7_oprofile_Logify(om); while (N--) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_ViterbiScore(dsq, L, om, ox, &sc1); p7_GViterbi (dsq, L, gm, gx, &sc2); if (fabs(sc1-sc2) > 0.001) esl_fatal("viterbi score unit test failed: scores differ"); } free(dsq); p7_hmm_Destroy(hmm); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); } #endif /*p7VITSCORE_TESTDRIVE*/ /*-------------------- end, unit tests --------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7VITSCORE_TESTDRIVE /* gcc -g -Wall -msse2 -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o vitscore_utest -Dp7VITSCORE_TESTDRIVE vitscore.c -lhmmer -leasel -lm ./vitscore_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "145", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for the SSE implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* First round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_viterbi_score(r, abc, bg, M, L, N); utest_viterbi_score(r, abc, bg, 1, L, 10); utest_viterbi_score(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); /* Second round of tests for amino alphabets. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_viterbi_score(r, abc, bg, M, L, N); utest_viterbi_score(r, abc, bg, 1, L, 10); utest_viterbi_score(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*VITSCORE_TESTDRIVE*/ /*--------------------- end, test driver ------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7VITSCORE_EXAMPLE /* A minimal example. Also useful for debugging on small HMMs and sequences. gcc -g -Wall -msse2 -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o example -Dp7VITSCORE_EXAMPLE vitscore.c -lhmmer -leasel -lm ./example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_sse.h" int main(int argc, char **argv) { char *hmmfile = argv[1]; char *seqfile = argv[2]; ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float sc; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_Logify(om); /* allocate DP matrices, both a generic and an optimized one */ ox = p7_omx_Create(gm->M, 0, sq->n); gx = p7_gmx_Create(gm->M, sq->n); /* Useful to place and compile in for debugging: p7_oprofile_Dump(stdout, om); dumps the optimized profile p7_omx_SetDumpMode(ox, TRUE); makes the fast DP algorithms dump their matrices p7_gmx_Dump(stdout, gx, p7_DEFAULT); dumps a generic DP matrix */ p7_ViterbiScore(sq->dsq, sq->n, om, ox, &sc); printf("viterbi score (SSE): %.2f nats\n", sc); p7_GViterbi (sq->dsq, sq->n, gm, gx, &sc); printf("viterbi (generic): %.2f nats\n", sc); /* now in a real app, you'd need to convert raw nat scores to final bit * scores, by subtracting the null model score and rescaling. */ /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); return 0; } #endif /*p7VITSCORE_EXAMPLE*/ /*-------------------------- end, example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_sse/p7_oprofile.c0000664361611702660230000024246712473612613017302 0ustar wheelerteddy/* Routines for the P7_OPROFILE structure: * a search profile in an optimized implementation. * * Contents: * 1. The P7_OPROFILE object: allocation, initialization, destruction. * 2. Conversion from generic P7_PROFILE to optimized P7_OPROFILE * 3. Conversion from optimized P7_OPROFILE to compact score arrays * 4. Debugging and development utilities. * 5. Benchmark driver. * 6. Unit tests. * 7. Test driver. * 8. Example. * 9. Copyright and license information. */ #include "p7_config.h" #include #include #include /* roundf() */ #include /* SSE */ #include /* SSE2 */ #include "easel.h" #include "esl_random.h" #include "esl_sse.h" #include "esl_vectorops.h" #include "hmmer.h" #include "impl_sse.h" static uint8_t unbiased_byteify(P7_OPROFILE *om, float sc); static uint8_t biased_byteify(P7_OPROFILE *om, float sc); static int16_t wordify(P7_OPROFILE *om, float sc); static int sf_conversion(P7_OPROFILE *om); /***************************************************************** * 1. The P7_OPROFILE structure: a score profile. *****************************************************************/ /* Function: p7_oprofile_Create() * Synopsis: Allocate an optimized profile structure. * Incept: SRE, Sun Nov 25 12:03:19 2007 [Casa de Gatos] * * Purpose: Allocate for profiles of up to nodes for digital alphabet . * * Throws: on allocation error. */ P7_OPROFILE * p7_oprofile_Create(int allocM, const ESL_ALPHABET *abc) { int status; P7_OPROFILE *om = NULL; int nqb = p7O_NQB(allocM); /* # of uchar vectors needed for query */ int nqw = p7O_NQW(allocM); /* # of sword vectors needed for query */ int nqf = p7O_NQF(allocM); /* # of float vectors needed for query */ int nqs = nqb + p7O_EXTRA_SB; int x; /* level 0 */ ESL_ALLOC(om, sizeof(P7_OPROFILE)); om->rbv_mem = NULL; om->sbv_mem = NULL; om->rwv_mem = NULL; om->twv_mem = NULL; om->rfv_mem = NULL; om->tfv_mem = NULL; om->rbv = NULL; om->sbv = NULL; om->rwv = NULL; om->twv = NULL; om->rfv = NULL; om->tfv = NULL; om->clone = 0; /* level 1 */ ESL_ALLOC(om->rbv_mem, sizeof(__m128i) * nqb * abc->Kp +15); /* +15 is for manual 16-byte alignment */ ESL_ALLOC(om->sbv_mem, sizeof(__m128i) * nqs * abc->Kp +15); ESL_ALLOC(om->rwv_mem, sizeof(__m128i) * nqw * abc->Kp +15); ESL_ALLOC(om->twv_mem, sizeof(__m128i) * nqw * p7O_NTRANS +15); ESL_ALLOC(om->rfv_mem, sizeof(__m128) * nqf * abc->Kp +15); ESL_ALLOC(om->tfv_mem, sizeof(__m128) * nqf * p7O_NTRANS +15); ESL_ALLOC(om->rbv, sizeof(__m128i *) * abc->Kp); ESL_ALLOC(om->sbv, sizeof(__m128i *) * abc->Kp); ESL_ALLOC(om->rwv, sizeof(__m128i *) * abc->Kp); ESL_ALLOC(om->rfv, sizeof(__m128 *) * abc->Kp); /* align vector memory on 16-byte boundaries */ om->rbv[0] = (__m128i *) (((unsigned long int) om->rbv_mem + 15) & (~0xf)); om->sbv[0] = (__m128i *) (((unsigned long int) om->sbv_mem + 15) & (~0xf)); om->rwv[0] = (__m128i *) (((unsigned long int) om->rwv_mem + 15) & (~0xf)); om->twv = (__m128i *) (((unsigned long int) om->twv_mem + 15) & (~0xf)); om->rfv[0] = (__m128 *) (((unsigned long int) om->rfv_mem + 15) & (~0xf)); om->tfv = (__m128 *) (((unsigned long int) om->tfv_mem + 15) & (~0xf)); /* set the rest of the row pointers for match emissions */ for (x = 1; x < abc->Kp; x++) { om->rbv[x] = om->rbv[0] + (x * nqb); om->sbv[x] = om->sbv[0] + (x * nqs); om->rwv[x] = om->rwv[0] + (x * nqw); om->rfv[x] = om->rfv[0] + (x * nqf); } om->allocQ16 = nqb; om->allocQ8 = nqw; om->allocQ4 = nqf; /* Remaining initializations */ om->tbm_b = 0; om->tec_b = 0; om->tjb_b = 0; om->scale_b = 0.0f; om->base_b = 0; om->bias_b = 0; om->scale_w = 0.0f; om->base_w = 0; om->ddbound_w = 0; om->ncj_roundoff = 0.0f; for (x = 0; x < p7_NOFFSETS; x++) om->offs[x] = -1; for (x = 0; x < p7_NEVPARAM; x++) om->evparam[x] = p7_EVPARAM_UNSET; for (x = 0; x < p7_NCUTOFFS; x++) om->cutoff[x] = p7_CUTOFF_UNSET; for (x = 0; x < p7_MAXABET; x++) om->compo[x] = p7_COMPO_UNSET; om->name = NULL; om->acc = NULL; om->desc = NULL; /* in a P7_OPROFILE, we always allocate for the optional RF, CS annotation. * we only rely on the leading \0 to signal that it's unused, but * we initialize all this memory to zeros to shut valgrind up about * fwrite'ing uninitialized memory in the io functions. */ ESL_ALLOC(om->rf, sizeof(char) * (allocM+2)); ESL_ALLOC(om->mm, sizeof(char) * (allocM+2)); ESL_ALLOC(om->cs, sizeof(char) * (allocM+2)); ESL_ALLOC(om->consensus, sizeof(char) * (allocM+2)); memset(om->rf, '\0', sizeof(char) * (allocM+2)); memset(om->mm, '\0', sizeof(char) * (allocM+2)); memset(om->cs, '\0', sizeof(char) * (allocM+2)); memset(om->consensus,'\0', sizeof(char) * (allocM+2)); om->abc = abc; om->L = 0; om->M = 0; om->max_length = -1; om->allocM = allocM; om->mode = p7_NO_MODE; om->nj = 0.0f; return om; ERROR: p7_oprofile_Destroy(om); return NULL; } /* Function: p7_oprofile_IsLocal() * Synopsis: Returns TRUE if profile is in local alignment mode. * Incept: SRE, Sat Aug 16 08:46:00 2008 [Janelia] */ int p7_oprofile_IsLocal(const P7_OPROFILE *om) { if (om->mode == p7_LOCAL || om->mode == p7_UNILOCAL) return TRUE; return FALSE; } /* Function: p7_oprofile_Destroy() * Synopsis: Frees an optimized profile structure. * Incept: SRE, Sun Nov 25 12:22:21 2007 [Casa de Gatos] */ void p7_oprofile_Destroy(P7_OPROFILE *om) { if (om == NULL) return; if (om->clone == 0) { if (om->rbv_mem != NULL) free(om->rbv_mem); if (om->sbv_mem != NULL) free(om->sbv_mem); if (om->rwv_mem != NULL) free(om->rwv_mem); if (om->twv_mem != NULL) free(om->twv_mem); if (om->rfv_mem != NULL) free(om->rfv_mem); if (om->tfv_mem != NULL) free(om->tfv_mem); if (om->rbv != NULL) free(om->rbv); if (om->sbv != NULL) free(om->sbv); if (om->rwv != NULL) free(om->rwv); if (om->rfv != NULL) free(om->rfv); if (om->name != NULL) free(om->name); if (om->acc != NULL) free(om->acc); if (om->desc != NULL) free(om->desc); if (om->rf != NULL) free(om->rf); if (om->mm != NULL) free(om->mm); if (om->cs != NULL) free(om->cs); if (om->consensus != NULL) free(om->consensus); } free(om); } /* Function: p7_oprofile_Sizeof() * Synopsis: Return the allocated size of a . * Incept: SRE, Wed Mar 2 10:09:21 2011 [Janelia] * * Purpose: Returns the allocated size of a , * in bytes. */ size_t p7_oprofile_Sizeof(P7_OPROFILE *om) { size_t n = 0; int nqb = om->allocQ16; /* # of uchar vectors needed for query */ int nqw = om->allocQ8; /* # of sword vectors needed for query */ int nqf = om->allocQ4; /* # of float vectors needed for query */ int nqs = nqb + p7O_EXTRA_SB; /* Stuff below exactly mirrors the malloc()'s in * p7_oprofile_Create(); so even though we could * write this more compactly, leave it like this * w/ one:one correspondence to _Create(), for * maintainability and clarity. */ n += sizeof(P7_OPROFILE); n += sizeof(__m128i) * nqb * om->abc->Kp +15; /* om->rbv_mem */ n += sizeof(__m128i) * nqs * om->abc->Kp +15; /* om->sbv_mem */ n += sizeof(__m128i) * nqw * om->abc->Kp +15; /* om->rwv_mem */ n += sizeof(__m128i) * nqw * p7O_NTRANS +15; /* om->twv_mem */ n += sizeof(__m128) * nqf * om->abc->Kp +15; /* om->rfv_mem */ n += sizeof(__m128) * nqf * p7O_NTRANS +15; /* om->tfv_mem */ n += sizeof(__m128i *) * om->abc->Kp; /* om->rbv */ n += sizeof(__m128i *) * om->abc->Kp; /* om->sbv */ n += sizeof(__m128i *) * om->abc->Kp; /* om->rwv */ n += sizeof(__m128 *) * om->abc->Kp; /* om->rfv */ n += sizeof(char) * (om->allocM+2); /* om->rf */ n += sizeof(char) * (om->allocM+2); /* om->mm */ n += sizeof(char) * (om->allocM+2); /* om->cs */ n += sizeof(char) * (om->allocM+2); /* om->consensus */ return n; } /* TODO: this is not following the _Copy interface guidelines; it's a _Clone */ /* TODO: its documentation header is a cut/paste of _Create; FIXME */ /* Function: p7_oprofile_Copy() * Synopsis: Allocate an optimized profile structure. * Incept: SRE, Sun Nov 25 12:03:19 2007 [Casa de Gatos] * * Purpose: Allocate for profiles of up to nodes for digital alphabet . * * Throws: on allocation error. */ P7_OPROFILE * p7_oprofile_Copy(P7_OPROFILE *om1) { int x, y; int status; int nqb = p7O_NQB(om1->allocM); /* # of uchar vectors needed for query */ int nqw = p7O_NQW(om1->allocM); /* # of sword vectors needed for query */ int nqf = p7O_NQF(om1->allocM); /* # of float vectors needed for query */ int nqs = nqb + p7O_EXTRA_SB; size_t size = sizeof(char) * (om1->allocM+2); P7_OPROFILE *om2 = NULL; const ESL_ALPHABET *abc = om1->abc; /* level 0 */ ESL_ALLOC(om2, sizeof(P7_OPROFILE)); om2->rbv_mem = NULL; om2->sbv_mem = NULL; om2->rwv_mem = NULL; om2->twv_mem = NULL; om2->rfv_mem = NULL; om2->tfv_mem = NULL; om2->rbv = NULL; om2->sbv = NULL; om2->rwv = NULL; om2->twv = NULL; om2->rfv = NULL; om2->tfv = NULL; /* level 1 */ ESL_ALLOC(om2->rbv_mem, sizeof(__m128i) * nqb * abc->Kp +15); /* +15 is for manual 16-byte alignment */ ESL_ALLOC(om2->sbv_mem, sizeof(__m128i) * nqs * abc->Kp +15); ESL_ALLOC(om2->rwv_mem, sizeof(__m128i) * nqw * abc->Kp +15); ESL_ALLOC(om2->twv_mem, sizeof(__m128i) * nqw * p7O_NTRANS +15); ESL_ALLOC(om2->rfv_mem, sizeof(__m128) * nqf * abc->Kp +15); ESL_ALLOC(om2->tfv_mem, sizeof(__m128) * nqf * p7O_NTRANS +15); ESL_ALLOC(om2->rbv, sizeof(__m128i *) * abc->Kp); ESL_ALLOC(om2->sbv, sizeof(__m128i *) * abc->Kp); ESL_ALLOC(om2->rwv, sizeof(__m128i *) * abc->Kp); ESL_ALLOC(om2->rfv, sizeof(__m128 *) * abc->Kp); /* align vector memory on 16-byte boundaries */ om2->rbv[0] = (__m128i *) (((unsigned long int) om2->rbv_mem + 15) & (~0xf)); om2->sbv[0] = (__m128i *) (((unsigned long int) om2->sbv_mem + 15) & (~0xf)); om2->rwv[0] = (__m128i *) (((unsigned long int) om2->rwv_mem + 15) & (~0xf)); om2->twv = (__m128i *) (((unsigned long int) om2->twv_mem + 15) & (~0xf)); om2->rfv[0] = (__m128 *) (((unsigned long int) om2->rfv_mem + 15) & (~0xf)); om2->tfv = (__m128 *) (((unsigned long int) om2->tfv_mem + 15) & (~0xf)); /* copy the vector data */ memcpy(om2->rbv[0], om1->rbv[0], sizeof(__m128i) * nqb * abc->Kp); memcpy(om2->sbv[0], om1->sbv[0], sizeof(__m128i) * nqs * abc->Kp); memcpy(om2->rwv[0], om1->rwv[0], sizeof(__m128i) * nqw * abc->Kp); memcpy(om2->rfv[0], om1->rfv[0], sizeof(__m128i) * nqf * abc->Kp); /* set the rest of the row pointers for match emissions */ for (x = 1; x < abc->Kp; x++) { om2->rbv[x] = om2->rbv[0] + (x * nqb); om2->sbv[x] = om2->sbv[0] + (x * nqs); om2->rwv[x] = om2->rwv[0] + (x * nqw); om2->rfv[x] = om2->rfv[0] + (x * nqf); } om2->allocQ16 = nqb; om2->allocQ8 = nqw; om2->allocQ4 = nqf; /* Remaining initializations */ om2->tbm_b = om1->tbm_b; om2->tec_b = om1->tec_b; om2->tjb_b = om1->tjb_b; om2->scale_b = om1->scale_b; om2->base_b = om1->base_b; om2->bias_b = om1->bias_b; om2->scale_w = om1->scale_w; om2->base_w = om1->base_w; om2->ddbound_w = om1->ddbound_w; om2->ncj_roundoff = om1->ncj_roundoff; for (x = 0; x < p7_NOFFSETS; x++) om2->offs[x] = om1->offs[x]; for (x = 0; x < p7_NEVPARAM; x++) om2->evparam[x] = om1->evparam[x]; for (x = 0; x < p7_NCUTOFFS; x++) om2->cutoff[x] = om1->cutoff[x]; for (x = 0; x < p7_MAXABET; x++) om2->compo[x] = om1->compo[x]; for (x = 0; x < nqw * p7O_NTRANS; ++x) om2->twv[x] = om1->twv[x]; for (x = 0; x < nqf * p7O_NTRANS; ++x) om2->tfv[x] = om1->tfv[x]; for (x = 0; x < p7O_NXSTATES; x++) for (y = 0; y < p7O_NXTRANS; y++) { om2->xw[x][y] = om1->xw[x][y]; om2->xf[x][y] = om1->xf[x][y]; } if ((status = esl_strdup(om1->name, -1, &om2->name)) != eslOK) goto ERROR; if ((status = esl_strdup(om1->acc, -1, &om2->acc)) != eslOK) goto ERROR; if ((status = esl_strdup(om1->desc, -1, &om2->desc)) != eslOK) goto ERROR; /* in a P7_OPROFILE, we always allocate for the optional RF, CS annotation. * we only rely on the leading \0 to signal that it's unused, but * we initialize all this memory to zeros to shut valgrind up about * fwrite'ing uninitialized memory in the io functions. */ ESL_ALLOC(om2->rf, size); ESL_ALLOC(om2->mm, size); ESL_ALLOC(om2->cs, size); ESL_ALLOC(om2->consensus, size); memcpy(om2->rf, om1->rf, size); memcpy(om2->mm, om1->mm, size); memcpy(om2->cs, om1->cs, size); memcpy(om2->consensus, om1->consensus, size); om2->abc = om1->abc; om2->L = om1->L; om2->M = om1->M; om2->allocM = om1->allocM; om2->mode = om1->mode; om2->nj = om1->nj; om2->max_length = om1->max_length; om2->clone = om1->clone; return om2; ERROR: p7_oprofile_Destroy(om2); return NULL; } /* Function: p7_oprofile_Clone() * Synopsis: Allocate a cloned copy of the optimized profile structure. All * allocated memory from the original profile is not reallocated. * The cloned copy will point to the same memory as the original. * Incept: SRE, Sun Nov 25 12:03:19 2007 [Casa de Gatos] * * Purpose: Quick copy of an optimized profile used in mutiple threads. * * Throws: on allocation error. */ P7_OPROFILE * p7_oprofile_Clone(const P7_OPROFILE *om1) { int status; P7_OPROFILE *om2 = NULL; ESL_ALLOC(om2, sizeof(P7_OPROFILE)); memcpy(om2, om1, sizeof(P7_OPROFILE)); om2->clone = 1; return om2; ERROR: p7_oprofile_Destroy(om2); return NULL; } /* Function: p7_oprofile_UpdateFwdEmissionScores() * Synopsis: Update the Forward/Backward part of the optimized profile * match emissions to account for new background distribution. * * Purpose: This implementation re-orders the loops used to access/modify * the rfv array relative to how it's accessed for example in * fb_conversion(), to minimize the required size of sc_arr. * * Args: om - optimized profile to be updated. * bg - the new bg distribution * fwd_emissions - precomputed Fwd (float) residue emission * probabilities in serial order (gathered from * the optimized striped with * p7_oprofile_GetFwdEmissionArray() ). * sc_arr Preallocated array of at least Kp*4 floats */ int p7_oprofile_UpdateFwdEmissionScores(P7_OPROFILE *om, P7_BG *bg, float *fwd_emissions, float *sc_arr) { int M = om->M; /* length of the query */ int k, q, x, z; int nq = p7O_NQF(M); /* segment length; total # of striped vectors needed */ int K = om->abc->K; int Kp = om->abc->Kp; union { __m128 v; float x[4]; } tmp; /* used to align and load simd minivectors */ for (k = 1, q = 0; q < nq; q++, k++) { //First compute the core characters of the alphabet for (x = 0; x < K; x++) { for (z = 0; z < 4; z++) { if (k+ z*nq <= M) sc_arr[z*Kp + x] = (om->mm && om->mm[(k+z*nq)]=='m') ? 0 : log( (double)(fwd_emissions[Kp * (k+z*nq) + x])/bg->f[x]); else sc_arr[z*Kp + x] = -eslINFINITY; tmp.x[z] = sc_arr[z*Kp + x]; } om->rfv[x][q] = esl_sse_expf(tmp.v); } // Then compute corresponding scores for ambiguity codes. for (z = 0; z < 4; z++) esl_abc_FExpectScVec(om->abc, sc_arr+(z*Kp), bg->f); //finish off the interleaved values for (x = K; x < Kp; x++) { for (z = 0; z < 4; z++) tmp.x[z] = sc_arr[z*Kp + x]; // computed in FExpectScVec call above om->rfv[x][q] = esl_sse_expf(tmp.v); } } return eslOK; } /* Function: p7_oprofile_UpdateVitEmissionScores() * Synopsis: Update the Viterbi part of the optimized profile match * emissions to account for new background distribution. *. * Purpose: This implementation re-orders the loops used to access/modify * the rmv array relative to how it's accessed for example in * vf_conversion(), to minimize the required size of sc_arr. * * Args: om - optimized profile to be updated. * bg - the new bg distribution * fwd_emissions - precomputed Fwd (float) residue emission * probabilities in serial order (gathered from * the optimized striped with * p7_oprofile_GetFwdEmissionArray() ). * sc_arr Preallocated array of at least Kp*8 floats */ int p7_oprofile_UpdateVitEmissionScores(P7_OPROFILE *om, P7_BG *bg, float *fwd_emissions, float *sc_arr) { int M = om->M; /* length of the query */ int k, q, x, z; int nq = p7O_NQW(M); /* segment length; total # of striped vectors needed */ int K = om->abc->K; int Kp = om->abc->Kp; int idx; union { __m128i v; int16_t i[8]; } tmp; /* used to align and load simd minivectors */ for (k = 1, q = 0; q < nq; q++, k++) { //First compute the core characters of the alphabet for (x = 0; x < K; x++) { for (z = 0; z < 8; z++) { idx = z*Kp + x; if (k+ z*nq <= M) { sc_arr[idx] = (om->mm && om->mm[(k+z*nq)]=='m') ? 0 : log( (double)(fwd_emissions[Kp * (k+z*nq) + x])/bg->f[x]); tmp.i[z] = wordify(om, sc_arr[idx]); } else { sc_arr[idx] = -eslINFINITY; tmp.i[z] = -32768; } } om->rwv[x][q] = tmp.v; } // Then compute corresponding scores for ambiguity codes. for (z = 0; z < 8; z++) esl_abc_FExpectScVec(om->abc, sc_arr+(z*Kp), bg->f); //finish off the interleaved values for (x = K; x < Kp; x++) { for (z = 0; z < 8; z++) { idx = z*Kp + x; if (x==K || x>Kp-3 || sc_arr[idx] == -eslINFINITY) tmp.i[z] = -32768; else tmp.i[z] = wordify(om, sc_arr[idx]); } om->rwv[x][q] = tmp.v; } } return eslOK; } /* Function: p7_oprofile_UpdateMSVEmissionScores() * Synopsis: Update the MSV part of the optimized profile match * emissions to account for new background distribution. *. * Purpose: This implementation re-orders the loops used to access/modify * the rbv array relative to how it's accessed for example in * mf_conversion(), to minimize the required size of sc_arr. * * Args: om - optimized profile to be updated. * bg - the new bg distribution * fwd_emissions - precomputed Fwd (float) residue emission * probabilities in serial order (gathered from * the optimized striped with * p7_oprofile_GetFwdEmissionArray() ). * sc_arr Preallocated array of at least Kp*16 floats */ int p7_oprofile_UpdateMSVEmissionScores(P7_OPROFILE *om, P7_BG *bg, float *fwd_emissions, float *sc_arr) { int M = om->M; /* length of the query */ int k, q, x, z; int nq = p7O_NQB(M); /* segment length; total # of striped vectors needed */ int K = om->abc->K; int Kp = om->abc->Kp; int idx; float max = 0.0; /* maximum residue score: used for unsigned emission score bias */ union { __m128i v; uint8_t i[16]; } tmp; /* used to align and load simd minivectors */ /* First we determine the basis for the limited-precision MSVFilter scoring system. * Default: 1/3 bit units, base offset 190: range 0..255 => -190..65 => -63.3..21.7 bits * See J2/66, J4/138 for analysis. * This depends on having computed scores. I do this in a first pass, to get the max * score ... then re-compute those scores so they can be converted to 8bit scores */ for (k = 1, q = 0; q < nq; q++, k++) { for (x = 0; x < K; x++) { for (z = 0; z < 16; z++) { idx = z*Kp + x; if (k+ z*nq <= M && !(om->mm && om->mm[(k+z*nq)]=='m')) max = ESL_MAX(max, log( (double)(fwd_emissions[Kp * (k+z*nq) + x])/bg->f[x])); } } } om->scale_b = 3.0 / eslCONST_LOG2; /* scores in units of third-bits */ om->base_b = 190; om->bias_b = unbiased_byteify(om, -1.0 * max); for (k = 1, q = 0; q < nq; q++, k++) { //First compute the core characters of the alphabet for (x = 0; x < K; x++) { for (z = 0; z < 16; z++) { idx = z*Kp + x; if (k+ z*nq <= M) { sc_arr[idx] = (om->mm && om->mm[(k+z*nq)]=='m') ? 0 : log( (double)(fwd_emissions[Kp * (k+z*nq) + x])/bg->f[x]); tmp.i[z] = biased_byteify(om, sc_arr[idx]); } else { sc_arr[idx] = -eslINFINITY; tmp.i[z] = 255; } } om->rbv[x][q] = tmp.v; } // Then compute corresponding scores for ambiguity codes. for (z = 0; z < 16; z++) esl_abc_FExpectScVec(om->abc, sc_arr+(z*Kp), bg->f); //finish off the interleaved values for (x = K; x < Kp; x++) { for (z = 0; z < 16; z++) { idx = z*Kp + x; if (x==K || x>Kp-3 || sc_arr[idx] == -eslINFINITY) tmp.i[z] = 255; else tmp.i[z] = biased_byteify(om, sc_arr[idx]); } om->rbv[x][q] = tmp.v; } } sf_conversion(om); return eslOK; } /*----------------- end, P7_OPROFILE structure ------------------*/ /***************************************************************** * 2. Conversion from generic P7_PROFILE to optimized P7_OPROFILE *****************************************************************/ /* biased_byteify() * Converts original log-odds residue score to a rounded biased uchar cost. * Match emission scores for MSVFilter get this treatment. * e.g. a score of +3.2, with scale 3.0 and bias 12, becomes 2. * 3.2*3 = 9.6; rounded = 10; bias-10 = 2. * When used, we add the bias, then subtract this cost. * (A cost of +255 is our -infinity "prohibited event") */ static uint8_t biased_byteify(P7_OPROFILE *om, float sc) { uint8_t b; sc = -1.0f * roundf(om->scale_b * sc); /* ugh. sc is now an integer cost represented in a float... */ b = (sc > 255 - om->bias_b) ? 255 : (uint8_t) sc + om->bias_b; /* and now we cast, saturate, and bias it to an unsigned char cost... */ return b; } /* unbiased_byteify() * Convert original transition score to a rounded uchar cost * Transition scores for MSVFilter get this treatment. * e.g. a score of -2.1, with scale 3.0, becomes a cost of 6. * (A cost of +255 is our -infinity "prohibited event") */ static uint8_t unbiased_byteify(P7_OPROFILE *om, float sc) { uint8_t b; sc = -1.0f * roundf(om->scale_b * sc); /* ugh. sc is now an integer cost represented in a float... */ b = (sc > 255.) ? 255 : (uint8_t) sc; /* and now we cast and saturate it to an unsigned char cost... */ return b; } /* wordify() * Converts log probability score to a rounded signed 16-bit integer cost. * Both emissions and transitions for ViterbiFilter get this treatment. * No bias term needed, because we use signed words. * e.g. a score of +3.2, with scale 500.0, becomes +1600. */ static int16_t wordify(P7_OPROFILE *om, float sc) { sc = roundf(om->scale_w * sc); if (sc >= 32767.0) return 32767; else if (sc <= -32768.0) return -32768; else return (int16_t) sc; } /* sf_conversion(): * Author: Bjarne Knudsen * * Generates the SSVFilter() parts of the profile scores * from the completed MSV score. This includes calculating * special versions of the match scores for using the the * ssv filter. * * Returns: on success. * * Throws: (no abnormal error conditions) */ static int sf_conversion(P7_OPROFILE *om) { int M = om->M; /* length of the query */ int nq = p7O_NQB(M); /* segment length; total # of striped vectors needed */ int x; /* counter over residues */ int q; /* q counts over total # of striped vectors, 0..nq-1 */ __m128i tmp; __m128i tmp2; /* We now want to fill out om->sbv with om->rbv - bias for use in the * SSV filter. The only challenge is that the om->rbv values are * unsigned and generally use the whole scale while the om->sbv * values are signed. To solve that problem we perform the following * calculation: * * ((127 + bias) - rbv) ^ 127 * * where the subtraction is unsigned saturated and the addition is * unsigned (it will not overflow, since bias is a small positive * number). The f(x) = x ^ 127 combined with a change from unsigned * to signed numbers have the same effect as f(x) = -x + 127. So if * we regard the above as signed instead of unsigned it is equal to: * * -((127 + bias) - rbv) + 127 = rbv - bias * * which is what we want. The reason for this slightly complex idea * is that we wish the transformation to be fast, especially for * hmmscan where many models are loaded. */ tmp = _mm_set1_epi8((int8_t) (om->bias_b + 127)); tmp2 = _mm_set1_epi8(127); for (x = 0; x < om->abc->Kp; x++) { for (q = 0; q < nq; q++) om->sbv[x][q] = _mm_xor_si128(_mm_subs_epu8(tmp, om->rbv[x][q]), tmp2); for (q = nq; q < nq + p7O_EXTRA_SB; q++) om->sbv[x][q] = om->sbv[x][q % nq]; } return eslOK; } /* mf_conversion(): * * This builds the MSVFilter() parts of the profile , scores * in lspace uchars (16-way parallel), by rescaling, rounding, and * casting the scores in . * * Returns on success; * throws if hasn't been allocated properly. */ static int mf_conversion(const P7_PROFILE *gm, P7_OPROFILE *om) { int M = gm->M; /* length of the query */ int nq = p7O_NQB(M); /* segment length; total # of striped vectors needed */ float max = 0.0; /* maximum residue score: used for unsigned emission score bias */ int x; /* counter over residues */ int q; /* q counts over total # of striped vectors, 0..nq-1 */ int k; /* the usual counter over model nodes 1..M */ int z; /* counter within elements of one SIMD minivector */ union { __m128i v; uint8_t i[16]; } tmp; /* used to align and load simd minivectors */ if (nq > om->allocQ16) ESL_EXCEPTION(eslEINVAL, "optimized profile is too small to hold conversion"); /* First we determine the basis for the limited-precision MSVFilter scoring system. * Default: 1/3 bit units, base offset 190: range 0..255 => -190..65 => -63.3..21.7 bits * See J2/66, J4/138 for analysis. */ for (x = 0; x < gm->abc->K; x++) max = ESL_MAX(max, esl_vec_FMax(gm->rsc[x], (M+1)*2)); om->scale_b = 3.0 / eslCONST_LOG2; /* scores in units of third-bits */ om->base_b = 190; om->bias_b = unbiased_byteify(om, -1.0 * max); /* striped match costs: start at k=1. */ for (x = 0; x < gm->abc->Kp; x++) { for (q = 0, k = 1; q < nq; q++, k++) { for (z = 0; z < 16; z++) tmp.i[z] = ((k+ z*nq <= M) ? biased_byteify(om, p7P_MSC(gm, k+z*nq, x)) : 255); om->rbv[x][q] = tmp.v; } } /* transition costs */ om->tbm_b = unbiased_byteify(om, logf(2.0f / ((float) gm->M * (float) (gm->M+1)))); /* constant B->Mk penalty */ om->tec_b = unbiased_byteify(om, logf(0.5f)); /* constant multihit E->C = E->J */ om->tjb_b = unbiased_byteify(om, logf(3.0f / (float) (gm->L+3))); /* this adopts the L setting of the parent profile */ sf_conversion(om); return eslOK; } /* vf_conversion(): * * This builds the ViterbiFilter() parts of the profile , scores * in lspace swords (8-way parallel), by rescaling, rounding, and * casting the scores in . * * Returns on success; * throws if hasn't been allocated properly. */ static int vf_conversion(const P7_PROFILE *gm, P7_OPROFILE *om) { int M = gm->M; /* length of the query */ int nq = p7O_NQW(M); /* segment length; total # of striped vectors needed */ int x; /* counter over residues */ int q; /* q counts over total # of striped vectors, 0..nq-1 */ int k; /* the usual counter over model nodes 1..M */ int kb; /* possibly offset base k for loading om's TSC vectors */ int z; /* counter within elements of one SIMD minivector */ int t; /* counter over transitions 0..7 = p7O_{BM,MM,IM,DM,MD,MI,II,DD}*/ int tg; /* transition index in gm */ int j; /* counter in interleaved vector arrays in the profile */ int ddtmp; /* used in finding worst DD transition bound */ int16_t maxval; /* used to prevent zero cost II */ int16_t val; union { __m128i v; int16_t i[8]; } tmp; /* used to align and load simd minivectors */ if (nq > om->allocQ8) ESL_EXCEPTION(eslEINVAL, "optimized profile is too small to hold conversion"); /* First set the basis for the limited-precision scoring system. * Default: 1/500 bit units, base offset 12000: range -32768..32767 => -44768..20767 => -89.54..41.53 bits * See J4/138 for analysis. */ om->scale_w = 500.0 / eslCONST_LOG2; om->base_w = 12000; /* striped match scores */ for (x = 0; x < gm->abc->Kp; x++) for (k = 1, q = 0; q < nq; q++, k++) { for (z = 0; z < 8; z++) tmp.i[z] = ((k+ z*nq <= M) ? wordify(om, p7P_MSC(gm, k+z*nq, x)) : -32768); om->rwv[x][q] = tmp.v; } /* Transition costs, all but the DD's. */ for (j = 0, k = 1, q = 0; q < nq; q++, k++) { for (t = p7O_BM; t <= p7O_II; t++) /* this loop of 7 transitions depends on the order in p7o_tsc_e */ { switch (t) { case p7O_BM: tg = p7P_BM; kb = k-1; maxval = 0; break; /* gm has tBMk stored off by one! start from k=0 not 1 */ case p7O_MM: tg = p7P_MM; kb = k-1; maxval = 0; break; /* MM, DM, IM vectors are rotated by -1, start from k=0 */ case p7O_IM: tg = p7P_IM; kb = k-1; maxval = 0; break; case p7O_DM: tg = p7P_DM; kb = k-1; maxval = 0; break; case p7O_MD: tg = p7P_MD; kb = k; maxval = 0; break; /* the remaining ones are straight up */ case p7O_MI: tg = p7P_MI; kb = k; maxval = 0; break; case p7O_II: tg = p7P_II; kb = k; maxval = -1; break; } for (z = 0; z < 8; z++) { val = ((kb+ z*nq < M) ? wordify(om, p7P_TSC(gm, kb+ z*nq, tg)) : -32768); tmp.i[z] = (val <= maxval) ? val : maxval; /* do not allow an II transition cost of 0, or hell may occur. */ } om->twv[j++] = tmp.v; } } /* Finally the DD's, which are at the end of the optimized tsc vector; (j is already sitting there) */ for (k = 1, q = 0; q < nq; q++, k++) { for (z = 0; z < 8; z++) tmp.i[z] = ((k+ z*nq < M) ? wordify(om, p7P_TSC(gm, k+ z*nq, p7P_DD)) : -32768); om->twv[j++] = tmp.v; } /* Specials. (Actually in same order in om and gm, but we copy in general form anyway.) */ /* VF CC,NN,JJ transitions hardcoded zero; -3.0 nat approximation used instead; this papers * over a length independence problem, where the approximation weirdly outperforms the * exact solution, probably indicating that the model's Pascal distribution is problematic, * and the "approximation" is in fact closer to the One True Model, the mythic H4 supermodel. * [xref J5/36] */ om->xw[p7O_E][p7O_LOOP] = wordify(om, gm->xsc[p7P_E][p7P_LOOP]); om->xw[p7O_E][p7O_MOVE] = wordify(om, gm->xsc[p7P_E][p7P_MOVE]); om->xw[p7O_N][p7O_MOVE] = wordify(om, gm->xsc[p7P_N][p7P_MOVE]); om->xw[p7O_N][p7O_LOOP] = 0; /* was wordify(om, gm->xsc[p7P_N][p7P_LOOP]); */ om->xw[p7O_C][p7O_MOVE] = wordify(om, gm->xsc[p7P_C][p7P_MOVE]); om->xw[p7O_C][p7O_LOOP] = 0; /* was wordify(om, gm->xsc[p7P_C][p7P_LOOP]); */ om->xw[p7O_J][p7O_MOVE] = wordify(om, gm->xsc[p7P_J][p7P_MOVE]); om->xw[p7O_J][p7O_LOOP] = 0; /* was wordify(om, gm->xsc[p7P_J][p7P_LOOP]); */ om->ncj_roundoff = 0.0; /* goes along with NN=CC=JJ=0, -3.0 nat approximation */ /* otherwise, would be = om->scale_w * gm->xsc[p7P_N][p7P_LOOP] - om->xw[p7O_N][p7O_LOOP]; */ /* see J4/150 for discussion of VF error suppression, superceded by the -3.0 nat approximation */ /* Transition score bound for "lazy F" DD path evaluation (xref J2/52) */ om->ddbound_w = -32768; for (k = 2; k < M-1; k++) { ddtmp = (int) wordify(om, p7P_TSC(gm, k, p7P_DD)); ddtmp += (int) wordify(om, p7P_TSC(gm, k+1, p7P_DM)); ddtmp -= (int) wordify(om, p7P_TSC(gm, k+1, p7P_BM)); om->ddbound_w = ESL_MAX(om->ddbound_w, ddtmp); } return eslOK; } /* fb_conversion() * This builds the Forward/Backward part of the optimized profile , * where we use odds ratios (not log-odds scores). */ static int fb_conversion(const P7_PROFILE *gm, P7_OPROFILE *om) { int M = gm->M; /* length of the query */ int nq = p7O_NQF(M); /* segment length; total # of striped vectors needed */ int x; /* counter over residues */ int q; /* q counts over total # of striped vectors, 0..nq-1 */ int k; /* the usual counter over model nodes 1..M */ int kb; /* possibly offset base k for loading om's TSC vectors */ int z; /* counter within elements of one SIMD minivector */ int t; /* counter over transitions 0..7 = p7O_{BM,MM,IM,DM,MD,MI,II,DD}*/ int tg; /* transition index in gm */ int j; /* counter in interleaved vector arrays in the profile */ union { __m128 v; float x[4]; } tmp; /* used to align and load simd minivectors */ if (nq > om->allocQ4) ESL_EXCEPTION(eslEINVAL, "optimized profile is too small to hold conversion"); /* striped match scores: start at k=1 */ for (x = 0; x < gm->abc->Kp; x++) for (k = 1, q = 0; q < nq; q++, k++) { for (z = 0; z < 4; z++) tmp.x[z] = (k+ z*nq <= M) ? p7P_MSC(gm, k+z*nq, x) : -eslINFINITY; om->rfv[x][q] = esl_sse_expf(tmp.v); } /* Transition scores, all but the DD's. */ for (j = 0, k = 1, q = 0; q < nq; q++, k++) { for (t = p7O_BM; t <= p7O_II; t++) /* this loop of 7 transitions depends on the order in the definition of p7o_tsc_e */ { switch (t) { case p7O_BM: tg = p7P_BM; kb = k-1; break; /* gm has tBMk stored off by one! start from k=0 not 1 */ case p7O_MM: tg = p7P_MM; kb = k-1; break; /* MM, DM, IM quads are rotated by -1, start from k=0 */ case p7O_IM: tg = p7P_IM; kb = k-1; break; case p7O_DM: tg = p7P_DM; kb = k-1; break; case p7O_MD: tg = p7P_MD; kb = k; break; /* the remaining ones are straight up */ case p7O_MI: tg = p7P_MI; kb = k; break; case p7O_II: tg = p7P_II; kb = k; break; } for (z = 0; z < 4; z++) tmp.x[z] = (kb+z*nq < M) ? p7P_TSC(gm, kb+z*nq, tg) : -eslINFINITY; om->tfv[j++] = esl_sse_expf(tmp.v); } } /* And finally the DD's, which are at the end of the optimized tfv vector; (j is already there) */ for (k = 1, q = 0; q < nq; q++, k++) { for (z = 0; z < 4; z++) tmp.x[z] = (k+z*nq < M) ? p7P_TSC(gm, k+z*nq, p7P_DD) : -eslINFINITY; om->tfv[j++] = esl_sse_expf(tmp.v); } /* Specials. (These are actually in exactly the same order in om and * gm, but we copy in general form anyway.) */ om->xf[p7O_E][p7O_LOOP] = expf(gm->xsc[p7P_E][p7P_LOOP]); om->xf[p7O_E][p7O_MOVE] = expf(gm->xsc[p7P_E][p7P_MOVE]); om->xf[p7O_N][p7O_LOOP] = expf(gm->xsc[p7P_N][p7P_LOOP]); om->xf[p7O_N][p7O_MOVE] = expf(gm->xsc[p7P_N][p7P_MOVE]); om->xf[p7O_C][p7O_LOOP] = expf(gm->xsc[p7P_C][p7P_LOOP]); om->xf[p7O_C][p7O_MOVE] = expf(gm->xsc[p7P_C][p7P_MOVE]); om->xf[p7O_J][p7O_LOOP] = expf(gm->xsc[p7P_J][p7P_LOOP]); om->xf[p7O_J][p7O_MOVE] = expf(gm->xsc[p7P_J][p7P_MOVE]); return eslOK; } /* Function: p7_oprofile_Convert() * Synopsis: Converts standard profile to an optimized one. * Incept: SRE, Mon Nov 26 07:38:57 2007 [Janelia] * * Purpose: Convert a standard profile to an optimized profile , * where has already been allocated for a profile of at * least M> nodes and the same emission alphabet abc>. * * Args: gm - profile to optimize * om - allocated optimized profile for holding the result. * * Returns: on success. * * Throws: if , aren't compatible. * on allocation failure. */ int p7_oprofile_Convert(const P7_PROFILE *gm, P7_OPROFILE *om) { int status, z; /* Set these first so they are available in the following calls */ om->mode = gm->mode; om->L = gm->L; om->M = gm->M; om->nj = gm->nj; om->max_length = gm->max_length; if (gm->abc->type != om->abc->type) ESL_EXCEPTION(eslEINVAL, "alphabets of the two profiles don't match"); if (gm->M > om->allocM) ESL_EXCEPTION(eslEINVAL, "oprofile is too small"); if ((status = mf_conversion(gm, om)) != eslOK) return status; /* MSVFilter()'s information */ if ((status = vf_conversion(gm, om)) != eslOK) return status; /* ViterbiFilter()'s information */ if ((status = fb_conversion(gm, om)) != eslOK) return status; /* ForwardFilter()'s information */ if (om->name != NULL) free(om->name); if (om->acc != NULL) free(om->acc); if (om->desc != NULL) free(om->desc); if ((status = esl_strdup(gm->name, -1, &(om->name))) != eslOK) goto ERROR; if ((status = esl_strdup(gm->acc, -1, &(om->acc))) != eslOK) goto ERROR; if ((status = esl_strdup(gm->desc, -1, &(om->desc))) != eslOK) goto ERROR; strcpy(om->rf, gm->rf); strcpy(om->mm, gm->mm); strcpy(om->cs, gm->cs); strcpy(om->consensus, gm->consensus); for (z = 0; z < p7_NEVPARAM; z++) om->evparam[z] = gm->evparam[z]; for (z = 0; z < p7_NCUTOFFS; z++) om->cutoff[z] = gm->cutoff[z]; for (z = 0; z < p7_MAXABET; z++) om->compo[z] = gm->compo[z]; return eslOK; ERROR: return status; } /* Function: p7_oprofile_ReconfigLength() * Synopsis: Set the target sequence length of a model. * Incept: SRE, Thu Dec 20 09:56:40 2007 [Janelia] * * Purpose: Given an already configured model , quickly reset its * expected length distribution for a new mean target sequence * length of . * * This doesn't affect the length distribution of the null * model. That must also be reset, using . * * We want this routine to run as fast as possible, because * this call is in the critical path: it must be called at * each new target sequence in a database search. * * Returns: on success. Costs/scores for N,C,J transitions are set * here. */ int p7_oprofile_ReconfigLength(P7_OPROFILE *om, int L) { int status; if ((status = p7_oprofile_ReconfigMSVLength (om, L)) != eslOK) return status; if ((status = p7_oprofile_ReconfigRestLength(om, L)) != eslOK) return status; return eslOK; } /* Function: p7_oprofile_ReconfigMSVLength() * Synopsis: Set the target sequence length of the MSVFilter part of the model. * Incept: SRE, Tue Dec 16 13:39:17 2008 [Janelia] * * Purpose: Given an already configured model , quickly reset its * expected length distribution for a new mean target sequence * length of , only for the part of the model that's used * for the accelerated MSV filter. * * The acceleration pipeline uses this to defer reconfiguring the * length distribution of the main model, mostly because hmmscan * reads the model in two pieces, MSV part first, then the rest. * * Returns: on success. */ int p7_oprofile_ReconfigMSVLength(P7_OPROFILE *om, int L) { om->tjb_b = unbiased_byteify(om, logf(3.0f / (float) (L+3))); return eslOK; } /* Function: p7_oprofile_ReconfigRestLength() * Synopsis: Set the target sequence length of the main profile. * Incept: SRE, Tue Dec 16 13:41:30 2008 [Janelia] * * Purpose: Given an already configured model , quickly reset its * expected length distribution for a new mean target sequence * length of , for everything except the MSV filter part * of the model. * * Calling then * is equivalent to * just calling . The two * part version is used in the acceleration pipeline. * * Returns: on success. */ int p7_oprofile_ReconfigRestLength(P7_OPROFILE *om, int L) { float pmove, ploop; pmove = (2.0f + om->nj) / ((float) L + 2.0f + om->nj); /* 2/(L+2) for sw; 3/(L+3) for fs */ ploop = 1.0f - pmove; /* ForwardFilter() parameters: pspace floats */ om->xf[p7O_N][p7O_LOOP] = om->xf[p7O_C][p7O_LOOP] = om->xf[p7O_J][p7O_LOOP] = ploop; om->xf[p7O_N][p7O_MOVE] = om->xf[p7O_C][p7O_MOVE] = om->xf[p7O_J][p7O_MOVE] = pmove; /* ViterbiFilter() parameters: lspace signed 16-bit ints */ om->xw[p7O_N][p7O_MOVE] = om->xw[p7O_C][p7O_MOVE] = om->xw[p7O_J][p7O_MOVE] = wordify(om, logf(pmove)); /* om->xw[p7O_N][p7O_LOOP] = om->xw[p7O_C][p7O_LOOP] = om->xw[p7O_J][p7O_LOOP] = wordify(om, logf(ploop)); */ /* 3nat approx in force: these stay 0 */ /* om->ncj_roundoff = (om->scale_w * logf(ploop)) - om->xw[p7O_N][p7O_LOOP]; */ /* and this does too */ om->L = L; return eslOK; } /* Function: p7_oprofile_ReconfigMultihit() * Synopsis: Quickly reconfig model into multihit mode for target length . * Incept: SRE, Thu Aug 21 10:04:07 2008 [Janelia] * * Purpose: Given a profile that's already been configured once, * quickly reconfigure it into a multihit mode for target * length . * * This gets called in domain definition, when we need to * flip the model in and out of unihit mode to * process individual domains. * * Note: You can't just flip uni/multi mode alone, because that * parameterization also affects target length * modeling. You need to make sure uni vs. multi choice is * made before the length model is set, and you need to * make sure the length model is recalculated if you change * the uni/multi mode. Hence, these functions call * . */ int p7_oprofile_ReconfigMultihit(P7_OPROFILE *om, int L) { om->xf[p7O_E][p7O_MOVE] = 0.5; om->xf[p7O_E][p7O_LOOP] = 0.5; om->nj = 1.0f; om->xw[p7O_E][p7O_MOVE] = wordify(om, -eslCONST_LOG2); om->xw[p7O_E][p7O_LOOP] = wordify(om, -eslCONST_LOG2); return p7_oprofile_ReconfigLength(om, L); } /* Function: p7_oprofile_ReconfigUnihit() * Synopsis: Quickly reconfig model into unihit mode for target length . * Incept: SRE, Thu Aug 21 10:10:32 2008 [Janelia] * * Purpose: Given a profile that's already been configured once, * quickly reconfigure it into a unihit mode for target * length . * * This gets called in domain definition, when we need to * flip the model in and out of unihit mode to * process individual domains. */ int p7_oprofile_ReconfigUnihit(P7_OPROFILE *om, int L) { om->xf[p7O_E][p7O_MOVE] = 1.0f; om->xf[p7O_E][p7O_LOOP] = 0.0f; om->nj = 0.0f; om->xw[p7O_E][p7O_MOVE] = 0; om->xw[p7O_E][p7O_LOOP] = -32768; return p7_oprofile_ReconfigLength(om, L); } /*------------ end, conversions to P7_OPROFILE ------------------*/ /******************************************************************* * 3. Conversion from optimized P7_OPROFILE to compact score arrays *******************************************************************/ /* Function: p7_oprofile_GetFwdTransitionArray() * Synopsis: Retrieve full 32-bit float transition probabilities from an * optimized profile into a flat array * * Purpose: Extract an array of (e.g. p7O_II) transition probabilities * from the underlying profile. In SIMD implementations, * these are striped and interleaved, making them difficult to * directly access. * * Args: - optimized profile, containing transition information * - transition type (e.g. p7O_II) * - preallocated array into which floats will be placed * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_GetFwdTransitionArray(const P7_OPROFILE *om, int type, float *arr ) { int nq = p7O_NQF(om->M); /* # of striped vectors needed */ int i, j; union { __m128 v; float x[4]; } tmp; /* used to align and read simd minivectors */ for (i=0; itfv[ (type==p7O_DD ? nq*7+i : type+7*i) ]; for (j=0; j<4; j++) if ( i+1+ j*nq < om->M+1) arr[i+1+ j*nq] = tmp.x[j]; } return eslOK; } /* Function: p7_oprofile_GetSSVEmissionScoreArray() * Synopsis: Retrieve MSV residue emission scores from an optimized * profile into an array * * Purpose: Extract an implicitly 2D array of 8-bit int SSV residue * emission scores from an optimized profile . must * be allocated by the calling function to be of size * ( om->abc->Kp * ( om->M + 1 )), and indexing into the array * is done as [om->abc->Kp * i + c ] for character c at * position i. * * In SIMD implementations, the residue scores are striped * and interleaved, making them somewhat difficult to * directly access. Faster access is desired, for example, * in SSV back-tracking of a high-scoring diagonal * * Args: - optimized profile, containing transition information * - preallocated array into which scores will be placed * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_GetSSVEmissionScoreArray(const P7_OPROFILE *om, uint8_t *arr ) { int x, q, z, k; union { __m128i v; uint8_t i[16]; } tmp; /* used to align and read simd minivectors */ int M = om->M; /* length of the query */ int K = om->abc->Kp; int nq = p7O_NQB(M); /* segment length; total # of striped vectors needed */ int cell_cnt = (om->M + 1) * K; for (x = 0; x < K ; x++) { for (q = 0, k = 1; q < nq; q++, k++) { tmp.v = om->rbv[x][q]; for (z=0; z<16; z++) if ( (K * (k+z*nq) + x) < cell_cnt) arr[ K * (k+z*nq) + x ] = tmp.i[z]; } } return eslOK; } /* Function: p7_oprofile_GetFwdEmissionScoreArray() * Synopsis: Retrieve Fwd (float) residue emission scores from an optimized * profile into an array * * Purpose: Extract an implicitly 2D array of 32-bit float Fwd residue * emission scores from an optimized profile . must * be allocated by the calling function to be of size * ( om->abc->Kp * ( om->M + 1 )), and indexing into the array * is done as [om->abc->Kp * i + c ] for character c at * position i. * * In SIMD implementations, the residue scores are striped * and interleaved, making them somewhat difficult to * directly access. * * Args: - optimized profile, containing transition information * - preallocated array into which scores will be placed * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_GetFwdEmissionScoreArray(const P7_OPROFILE *om, float *arr ) { int x, q, z, k; union { __m128 v; float f[4]; } tmp; /* used to align and read simd minivectors */ int M = om->M; /* length of the query */ int K = om->abc->Kp; int nq = p7O_NQF(M); /* segment length; total # of striped vectors needed */ int cell_cnt = (om->M + 1) * K; for (x = 0; x < K; x++) { for (q = 0, k = 1; q < nq; q++, k++) { tmp.v = esl_sse_logf(om->rfv[x][q]); for (z = 0; z < 4; z++) if ( (K * (k+z*nq) + x) < cell_cnt) arr[ K * (k+z*nq) + x ] = tmp.f[z]; } } return eslOK; } /* Function: p7_oprofile_GetFwdEmissionArray() * Synopsis: Retrieve Fwd (float) residue emission values from an optimized * profile into an array * * Purpose: Extract an implicitly 2D array of 32-bit float Fwd residue * emission values from an optimized profile , converting * back to emission values based on the background. must * be allocated by the calling function to be of size * ( om->abc->Kp * ( om->M + 1 )), and indexing into the array * is done as [om->abc->Kp * i + c ] for character c at * position i. * * In SIMD implementations, the residue scores are striped * and interleaved, making them somewhat difficult to * directly access. * * Args: - optimized profile, containing transition information * - background frequencies * - preallocated array into which scores will be placed * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_GetFwdEmissionArray(const P7_OPROFILE *om, P7_BG *bg, float *arr ) { int x, q, z, k; union { __m128 v; float f[4]; } tmp; /* used to align and read simd minivectors */ int M = om->M; /* length of the query */ int Kp = om->abc->Kp; int K = om->abc->K; int nq = p7O_NQF(M); /* segment length; total # of striped vectors needed */ int cell_cnt = (om->M + 1) * Kp; for (x = 0; x < K; x++) { for (q = 0, k = 1; q < nq; q++, k++) { tmp.v = om->rfv[x][q]; for (z = 0; z < 4; z++) if ( (Kp * (k+z*nq) + x) < cell_cnt) arr[ Kp * (k+z*nq) + x ] = tmp.f[z] * bg->f[x]; } } //degeneracy emissions for each position for (x = 0; x <= M; x++) esl_abc_FExpectScVec(om->abc, arr+Kp*x, bg->f); return eslOK; } /*------------ end, conversions from P7_OPROFILE ------------------*/ /***************************************************************** * 4. Debugging and development utilities. *****************************************************************/ /* oprofile_dump_mf() * * Dump the MSVFilter part of a profile to . */ static int oprofile_dump_mf(FILE *fp, const P7_OPROFILE *om) { int M = om->M; /* length of the query */ int nq = p7O_NQB(M); /* segment length; total # of striped vectors needed */ int x; /* counter over residues */ int q; /* q counts over total # of striped vectors, 0..nq-1 */ int k; /* counter over nodes 1..M */ int z; /* counter within elements of one SIMD minivector */ union { __m128i v; uint8_t i[16]; } tmp; /* used to align and read simd minivectors */ /* Header (rearranged column numbers, in the vectors) */ fprintf(fp, " "); for (k =1, q = 0; q < nq; q++, k++) { fprintf(fp, "[ "); for (z = 0; z < 16; z++) if (k+z*nq <= M) fprintf(fp, "%4d ", k+z*nq); else fprintf(fp, "%4s ", "xx"); fprintf(fp, "]"); } fprintf(fp, "\n"); /* Table of residue emissions */ for (x = 0; x < om->abc->Kp; x++) { fprintf(fp, "(%c): ", om->abc->sym[x]); for (q = 0; q < nq; q++) { fprintf(fp, "[ "); _mm_store_si128(&tmp.v, om->rbv[x][q]); for (z = 0; z < 16; z++) fprintf(fp, "%4d ", tmp.i[z]); fprintf(fp, "]"); } fprintf(fp, "\n"); } fprintf(fp, "\n"); fprintf(fp, "t_EC,EJ: %4d\n", om->tec_b); fprintf(fp, "t_NB,JB,CT: %4d\n", om->tjb_b); fprintf(fp, "t_BMk: %4d\n", om->tbm_b); fprintf(fp, "scale: %.2f\n", om->scale_b); fprintf(fp, "base: %4d\n", om->base_b); fprintf(fp, "bias: %4d\n", om->bias_b); fprintf(fp, "Q: %4d\n", nq); fprintf(fp, "M: %4d\n", M); return eslOK; } /* oprofile_dump_vf() * * Dump the ViterbiFilter part of a profile to . */ static int oprofile_dump_vf(FILE *fp, const P7_OPROFILE *om) { int M = om->M; /* length of the query */ int nq = p7O_NQW(M); /* segment length; total # of striped vectors needed */ int x; /* counter over residues */ int q; /* q counts over total # of striped vectors, 0..nq-1 */ int k; /* the usual counter over model nodes 1..M */ int kb; /* possibly offset base k for loading om's TSC vectors */ int z; /* counter within elements of one SIMD minivector */ int t; /* counter over transitions 0..7 = p7O_{BM,MM,IM,DM,MD,MI,II,DD}*/ int j; /* counter in interleaved vector arrays in the profile */ union { __m128i v; int16_t i[8]; } tmp; /* used to align and read simd minivectors */ /* Emission score header (rearranged column numbers, in the vectors) */ fprintf(fp, " "); for (k =1, q = 0; q < nq; q++, k++) { fprintf(fp, "[ "); for (z = 0; z < 8; z++) if (k+z*nq <= M) fprintf(fp, "%6d ", k+z*nq); else fprintf(fp, "%6s ", "xx"); fprintf(fp, "]"); } fprintf(fp, "\n"); /* Table of residue emissions */ for (x = 0; x < om->abc->Kp; x++) { fprintf(fp, "(%c): ", om->abc->sym[x]); /* Match emission scores (insert emissions are assumed zero by design) */ for (q = 0; q < nq; q++) { fprintf(fp, "[ "); _mm_store_si128(&tmp.v, om->rwv[x][q]); for (z = 0; z < 8; z++) fprintf(fp, "%6d ", tmp.i[z]); fprintf(fp, "]"); } fprintf(fp, "\n"); } fprintf(fp, "\n"); /* Transitions */ for (t = p7O_BM; t <= p7O_II; t++) { switch (t) { case p7O_BM: fprintf(fp, "\ntBM: "); break; case p7O_MM: fprintf(fp, "\ntMM: "); break; case p7O_IM: fprintf(fp, "\ntIM: "); break; case p7O_DM: fprintf(fp, "\ntDM: "); break; case p7O_MD: fprintf(fp, "\ntMD: "); break; case p7O_MI: fprintf(fp, "\ntMI: "); break; case p7O_II: fprintf(fp, "\ntII: "); break; } for (k = 1, q = 0; q < nq; q++, k++) { switch (t) { case p7O_BM: kb = k; break; case p7O_MM: kb = (1 + (nq+k-2)) % nq; break; /* MM, DM, IM quads rotated by +1 */ case p7O_IM: kb = (1 + (nq+k-2)) % nq; break; case p7O_DM: kb = (1 + (nq+k-2)) % nq; break; case p7O_MD: kb = k; break; /* the remaining ones are straight up */ case p7O_MI: kb = k; break; case p7O_II: kb = k; break; } fprintf(fp, "[ "); for (z = 0; z < 8; z++) if (kb+z*nq <= M) fprintf(fp, "%6d ", kb+z*nq); else fprintf(fp, "%6s ", "xx"); fprintf(fp, "]"); } fprintf(fp, "\n "); for (q = 0; q < nq; q++) { fprintf(fp, "[ "); _mm_store_si128(&tmp.v, om->twv[q*7 + t]); for (z = 0; z < 8; z++) fprintf(fp, "%6d ", tmp.i[z]); fprintf(fp, "]"); } fprintf(fp, "\n"); } /* DD transitions */ fprintf(fp, "\ntDD: "); for (k =1, q = 0; q < nq; q++, k++) { fprintf(fp, "[ "); for (z = 0; z < 8; z++) if (k+z*nq <= M) fprintf(fp, "%6d ", k+z*nq); else fprintf(fp, "%6s ", "xx"); fprintf(fp, "]"); } fprintf(fp, "\n "); for (j = nq*7, q = 0; q < nq; q++, j++) { fprintf(fp, "[ "); _mm_store_si128(&tmp.v, om->twv[j]); for (z = 0; z < 8; z++) fprintf(fp, "%6d ", tmp.i[z]); fprintf(fp, "]"); } fprintf(fp, "\n"); fprintf(fp, "E->C: %6d E->J: %6d\n", om->xw[p7O_E][p7O_MOVE], om->xw[p7O_E][p7O_LOOP]); fprintf(fp, "N->B: %6d N->N: %6d\n", om->xw[p7O_N][p7O_MOVE], om->xw[p7O_N][p7O_LOOP]); fprintf(fp, "J->B: %6d J->J: %6d\n", om->xw[p7O_J][p7O_MOVE], om->xw[p7O_J][p7O_LOOP]); fprintf(fp, "C->T: %6d C->C: %6d\n", om->xw[p7O_C][p7O_MOVE], om->xw[p7O_C][p7O_LOOP]); fprintf(fp, "scale: %6.2f\n", om->scale_w); fprintf(fp, "base: %6d\n", om->base_w); fprintf(fp, "bound: %6d\n", om->ddbound_w); fprintf(fp, "Q: %6d\n", nq); fprintf(fp, "M: %6d\n", M); return eslOK; } /* oprofile_dump_fb() * * Dump the Forward/Backward part of a profile to . * , control the floating point output: * 8,5 is a reasonable choice for prob space, * 5,2 is reasonable for log space. */ static int oprofile_dump_fb(FILE *fp, const P7_OPROFILE *om, int width, int precision) { int M = om->M; /* length of the query */ int nq = p7O_NQF(M); /* segment length; total # of striped vectors needed */ int x; /* counter over residues */ int q; /* q counts over total # of striped vectors, 0..nq-1 */ int k; /* the usual counter over model nodes 1..M */ int kb; /* possibly offset base k for loading om's TSC vectors */ int z; /* counter within elements of one SIMD minivector */ int t; /* counter over transitions 0..7 = p7O_{BM,MM,IM,DM,MD,MI,II,DD}*/ int j; /* counter in interleaved vector arrays in the profile */ union { __m128 v; float x[4]; } tmp; /* used to align and read simd minivectors */ /* Residue emissions */ for (x = 0; x < om->abc->Kp; x++) { fprintf(fp, "(%c): ", om->abc->sym[x]); for (k =1, q = 0; q < nq; q++, k++) { fprintf(fp, "[ "); for (z = 0; z < 4; z++) if (k+z*nq <= M) fprintf(fp, "%*d ", width, k+z*nq); else fprintf(fp, "%*s ", width, "xx"); fprintf(fp, "]"); } fprintf(fp, "\nmat: "); for (q = 0; q < nq; q++) { fprintf(fp, "[ "); tmp.v = om->rfv[x][q]; for (z = 0; z < 4; z++) fprintf(fp, "%*.*f ", width, precision, tmp.x[z]); fprintf(fp, "]"); } fprintf(fp, "\n\n"); } /* Transitions */ for (t = p7O_BM; t <= p7O_II; t++) { switch (t) { case p7O_BM: fprintf(fp, "\ntBM: "); break; case p7O_MM: fprintf(fp, "\ntMM: "); break; case p7O_IM: fprintf(fp, "\ntIM: "); break; case p7O_DM: fprintf(fp, "\ntDM: "); break; case p7O_MD: fprintf(fp, "\ntMD: "); break; case p7O_MI: fprintf(fp, "\ntMI: "); break; case p7O_II: fprintf(fp, "\ntII: "); break; } for (k = 1, q = 0; q < nq; q++, k++) { switch (t) { case p7O_MM:/* MM, DM, IM quads rotated by +1 */ case p7O_IM: case p7O_DM: kb = (1 + (nq+k-2)) % nq; break; case p7O_BM:/* the remaining ones are straight up */ case p7O_MD: case p7O_MI: case p7O_II: kb = k; break; } fprintf(fp, "[ "); for (z = 0; z < 4; z++) if (kb+z*nq <= M) fprintf(fp, "%*d ", width, kb+z*nq); else fprintf(fp, "%*s ", width, "xx"); fprintf(fp, "]"); } fprintf(fp, "\n "); for (q = 0; q < nq; q++) { fprintf(fp, "[ "); tmp.v = om->tfv[q*7 + t]; for (z = 0; z < 4; z++) fprintf(fp, "%*.*f ", width, precision, tmp.x[z]); fprintf(fp, "]"); } fprintf(fp, "\n"); } /* DD transitions */ fprintf(fp, "\ntDD: "); for (k =1, q = 0; q < nq; q++, k++) { fprintf(fp, "[ "); for (z = 0; z < 4; z++) if (k+z*nq <= M) fprintf(fp, "%*d ", width, k+z*nq); else fprintf(fp, "%*s ", width, "xx"); fprintf(fp, "]"); } fprintf(fp, "\n "); for (j = nq*7, q = 0; q < nq; q++, j++) { fprintf(fp, "[ "); tmp.v = om->tfv[j]; for (z = 0; z < 4; z++) fprintf(fp, "%*.*f ", width, precision, tmp.x[z]); fprintf(fp, "]"); } fprintf(fp, "\n"); /* Specials */ fprintf(fp, "E->C: %*.*f E->J: %*.*f\n", width, precision, om->xf[p7O_E][p7O_MOVE], width, precision, om->xf[p7O_E][p7O_LOOP]); fprintf(fp, "N->B: %*.*f N->N: %*.*f\n", width, precision, om->xf[p7O_N][p7O_MOVE], width, precision, om->xf[p7O_N][p7O_LOOP]); fprintf(fp, "J->B: %*.*f J->J: %*.*f\n", width, precision, om->xf[p7O_J][p7O_MOVE], width, precision, om->xf[p7O_J][p7O_LOOP]); fprintf(fp, "C->T: %*.*f C->C: %*.*f\n", width, precision, om->xf[p7O_C][p7O_MOVE], width, precision, om->xf[p7O_C][p7O_LOOP]); fprintf(fp, "Q: %d\n", nq); fprintf(fp, "M: %d\n", M); return eslOK; } /* Function: p7_oprofile_Dump() * Synopsis: Dump internals of a * Incept: SRE, Thu Dec 13 08:49:30 2007 [Janelia] * * Purpose: Dump the internals of structure * to stream ; generally for testing or debugging * purposes. * * Args: fp - output stream (often stdout) * om - optimized profile to dump * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_Dump(FILE *fp, const P7_OPROFILE *om) { int status; fprintf(fp, "Dump of a ::\n"); fprintf(fp, "\n -- float part, odds ratios for Forward/Backward:\n"); if ((status = oprofile_dump_fb(fp, om, 8, 5)) != eslOK) return status; fprintf(fp, "\n -- sword part, log odds for ViterbiFilter(): \n"); if ((status = oprofile_dump_vf(fp, om)) != eslOK) return status; fprintf(fp, "\n -- uchar part, log odds for MSVFilter(): \n"); if ((status = oprofile_dump_mf(fp, om)) != eslOK) return status; return eslOK; } /* Function: p7_oprofile_Sample() * Synopsis: Sample a random profile. * Incept: SRE, Wed Jul 30 13:11:52 2008 [Janelia] * * Purpose: Sample a random profile of nodes for alphabet , * using as the source of random numbers. Parameterize * it for generation of target sequences of mean length * . Calculate its log-odds scores using background * model . * * Args: r - random number generator * abc - emission alphabet * bg - background frequency model * M - size of sampled profile, in nodes * L - configured target seq mean length * opt_hmm - optRETURN: sampled HMM * opt_gm - optRETURN: sampled normal profile * opt_om - RETURN: optimized profile * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_Sample(ESL_RANDOMNESS *r, const ESL_ALPHABET *abc, const P7_BG *bg, int M, int L, P7_HMM **opt_hmm, P7_PROFILE **opt_gm, P7_OPROFILE **ret_om) { P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; int status; if ((gm = p7_profile_Create (M, abc)) == NULL) { status = eslEMEM; goto ERROR; } if ((om = p7_oprofile_Create(M, abc)) == NULL) { status = eslEMEM; goto ERROR; } if ((status = p7_hmm_Sample(r, M, abc, &hmm)) != eslOK) goto ERROR; if ((status = p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL)) != eslOK) goto ERROR; if ((status = p7_oprofile_Convert(gm, om)) != eslOK) goto ERROR; if ((status = p7_oprofile_ReconfigLength(om, L)) != eslOK) goto ERROR; if (opt_hmm != NULL) *opt_hmm = hmm; else p7_hmm_Destroy(hmm); if (opt_gm != NULL) *opt_gm = gm; else p7_profile_Destroy(gm); *ret_om = om; return eslOK; ERROR: if (opt_hmm != NULL) *opt_hmm = NULL; if (opt_gm != NULL) *opt_gm = NULL; *ret_om = NULL; return status; } /* Function: p7_oprofile_Compare() * Synopsis: Compare two optimized profiles for equality. * Incept: SRE, Wed Jan 21 13:29:10 2009 [Janelia] * * Purpose: Compare the contents of and ; return * if they are effectively identical profiles, * or if not. * * Floating point comparisons are done to a tolerance * of using . * * If a comparison fails, an informative error message is * left in to indicate why. * * Internal allocation sizes are not compared, only the * data. * * Args: om1 - one optimized profile to compare * om2 - the other * tol - floating point comparison tolerance; see * errmsg - ptr to array of at least characters. * * Returns: on effective equality; on difference. */ int p7_oprofile_Compare(const P7_OPROFILE *om1, const P7_OPROFILE *om2, float tol, char *errmsg) { int Q4 = p7O_NQF(om1->M); int Q8 = p7O_NQW(om1->M); int Q16 = p7O_NQB(om1->M); int q, r, x, y; union { __m128i v; uint8_t c[16]; } a16, b16; union { __m128i v; int16_t w[8]; } a8, b8; union { __m128 v; float x[4]; } a4, b4; if (om1->mode != om2->mode) ESL_FAIL(eslFAIL, errmsg, "comparison failed: mode"); if (om1->L != om2->L) ESL_FAIL(eslFAIL, errmsg, "comparison failed: L"); if (om1->M != om2->M) ESL_FAIL(eslFAIL, errmsg, "comparison failed: M"); if (om1->nj != om2->nj) ESL_FAIL(eslFAIL, errmsg, "comparison failed: nj"); if (om1->abc->type != om2->abc->type) ESL_FAIL(eslFAIL, errmsg, "comparison failed: alphabet type"); /* MSVFilter part */ for (x = 0; x < om1->abc->Kp; x++) for (q = 0; q < Q16; q++) { a16.v = om1->rbv[x][q]; b16.v = om2->rbv[x][q]; for (r = 0; r < 16; r++) if (a16.c[r] != b16.c[r]) ESL_FAIL(eslFAIL, errmsg, "comparison failed: rb[%d] elem %d", q, r); } if (om1->tbm_b != om2->tbm_b) ESL_FAIL(eslFAIL, errmsg, "comparison failed: tbm_b"); if (om1->tec_b != om2->tec_b) ESL_FAIL(eslFAIL, errmsg, "comparison failed: tec_b"); if (om1->tjb_b != om2->tjb_b) ESL_FAIL(eslFAIL, errmsg, "comparison failed: tjb_b"); if (om1->scale_b != om2->scale_b) ESL_FAIL(eslFAIL, errmsg, "comparison failed: scale_b"); if (om1->base_b != om2->base_b) ESL_FAIL(eslFAIL, errmsg, "comparison failed: base_b"); if (om1->bias_b != om2->bias_b) ESL_FAIL(eslFAIL, errmsg, "comparison failed: bias_b"); /* ViterbiFilter() part */ for (x = 0; x < om1->abc->Kp; x++) for (q = 0; q < Q8; q++) { a8.v = om1->rwv[x][q]; b8.v = om2->rwv[x][q]; for (r = 0; r < 8; r++) if (a8.w[r] != b8.w[r]) ESL_FAIL(eslFAIL, errmsg, "comparison failed: rw[%d] elem %d", q, r); } for (q = 0; q < 8*Q16; q++) { a8.v = om1->twv[q]; b8.v = om2->twv[q]; for (r = 0; r < 8; r++) if (a8.w[r] != b8.w[r]) ESL_FAIL(eslFAIL, errmsg, "comparison failed: tw[%d] elem %d", q, r); } for (x = 0; x < p7O_NXSTATES; x++) for (y = 0; y < p7O_NXTRANS; y++) if (om1->xw[x][y] != om2->xw[x][y]) ESL_FAIL(eslFAIL, errmsg, "comparison failed: xw[%d][%d]", x, y); if (om1->scale_w != om2->scale_w) ESL_FAIL(eslFAIL, errmsg, "comparison failed: scale"); if (om1->base_w != om2->base_w) ESL_FAIL(eslFAIL, errmsg, "comparison failed: base"); if (om1->ddbound_w != om2->ddbound_w) ESL_FAIL(eslFAIL, errmsg, "comparison failed: ddbound_w"); /* Forward/Backward part */ for (x = 0; x < om1->abc->Kp; x++) for (q = 0; q < Q4; q++) { a4.v = om1->rfv[x][q]; b4.v = om2->rfv[x][q]; for (r = 0; r < 4; r++) if (esl_FCompare(a4.x[r], b4.x[r], tol) != eslOK) ESL_FAIL(eslFAIL, errmsg, "comparison failed: rf[%d] elem %d", q, r); } for (q = 0; q < 8*Q4; q++) { a4.v = om1->tfv[q]; b4.v = om2->tfv[q]; for (r = 0; r < 4; r++) if (a4.x[r] != b4.x[r]) ESL_FAIL(eslFAIL, errmsg, "comparison failed: tf[%d] elem %d", q, r); } for (x = 0; x < p7O_NXSTATES; x++) if (esl_vec_FCompare(om1->xf[x], om2->xf[x], p7O_NXTRANS, tol) != eslOK) ESL_FAIL(eslFAIL, errmsg, "comparison failed: xf[%d] vector", x); for (x = 0; x < p7_NOFFSETS; x++) if (om1->offs[x] != om2->offs[x]) ESL_FAIL(eslFAIL, errmsg, "comparison failed: offs[%d]", x); if (esl_strcmp(om1->name, om2->name) != 0) ESL_FAIL(eslFAIL, errmsg, "comparison failed: name"); if (esl_strcmp(om1->acc, om2->acc) != 0) ESL_FAIL(eslFAIL, errmsg, "comparison failed: acc"); if (esl_strcmp(om1->desc, om2->desc) != 0) ESL_FAIL(eslFAIL, errmsg, "comparison failed: desc"); if (esl_strcmp(om1->rf, om2->rf) != 0) ESL_FAIL(eslFAIL, errmsg, "comparison failed: ref"); if (esl_strcmp(om1->mm, om2->mm) != 0) ESL_FAIL(eslFAIL, errmsg, "comparison failed: mm"); if (esl_strcmp(om1->cs, om2->cs) != 0) ESL_FAIL(eslFAIL, errmsg, "comparison failed: cs"); if (esl_strcmp(om1->consensus, om2->consensus) != 0) ESL_FAIL(eslFAIL, errmsg, "comparison failed: consensus"); if (esl_vec_FCompare(om1->evparam, om2->evparam, p7_NEVPARAM, tol) != eslOK) ESL_FAIL(eslFAIL, errmsg, "comparison failed: evparam vector"); if (esl_vec_FCompare(om1->cutoff, om2->cutoff, p7_NCUTOFFS, tol) != eslOK) ESL_FAIL(eslFAIL, errmsg, "comparison failed: cutoff vector"); if (esl_vec_FCompare(om1->compo, om2->compo, p7_MAXABET, tol) != eslOK) ESL_FAIL(eslFAIL, errmsg, "comparison failed: compo vector"); return eslOK; } /* Function: p7_profile_SameAsMF() * Synopsis: Set a generic profile's scores to give MSV scores. * Incept: SRE, Wed Jul 30 13:42:49 2008 [Janelia] * * Purpose: Set a generic profile's scores so that the normal DP * algorithms will give the same score as : * all t_MM scores = 0; all other core transitions = -inf; * multihit local mode; all entries uniformly ; * scores 0; total approximated later as -3; * rounded in the same way as the 8-bit limited precision. * * Returns: on success. */ int p7_profile_SameAsMF(const P7_OPROFILE *om, P7_PROFILE *gm) { int k,x; float tbm = roundf(om->scale_b * (log(2.0f / ((float) gm->M * (float) (gm->M+1))))); /* Transitions */ esl_vec_FSet(gm->tsc, p7P_NTRANS * gm->M, -eslINFINITY); for (k = 1; k < gm->M; k++) p7P_TSC(gm, k, p7P_MM) = 0.0f; for (k = 0; k < gm->M; k++) p7P_TSC(gm, k, p7P_BM) = tbm; /* Emissions */ for (x = 0; x < gm->abc->Kp; x++) for (k = 0; k <= gm->M; k++) { gm->rsc[x][k*2] = (gm->rsc[x][k*2] <= -eslINFINITY) ? -eslINFINITY : roundf(om->scale_b * gm->rsc[x][k*2]); gm->rsc[x][k*2+1] = 0; /* insert score: VF makes it zero no matter what. */ } /* Specials */ for (k = 0; k < p7P_NXSTATES; k++) for (x = 0; x < p7P_NXTRANS; x++) gm->xsc[k][x] = (gm->xsc[k][x] <= -eslINFINITY) ? -eslINFINITY : roundf(om->scale_b * gm->xsc[k][x]); /* NN, CC, JJ hardcoded 0 in limited precision */ gm->xsc[p7P_N][p7P_LOOP] = gm->xsc[p7P_J][p7P_LOOP] = gm->xsc[p7P_C][p7P_LOOP] = 0; return eslOK; } /* Function: p7_profile_SameAsVF() * Synopsis: Round a generic profile to match ViterbiFilter scores. * Incept: SRE, Wed Jul 30 13:37:48 2008 [Janelia] * * Purpose: Round all the scores in a generic (lspace) in * exactly the same way that the scores in the * were rounded. Then we can test that two profiles * give identical internal scores in testing, say, * against . * * The 3nat approximation is used; NN=CC=JJ=0, and 3 nats are * subtracted at the end to account for their contribution. * * To convert a generic Viterbi score calculated with this profile * to a nat score that should match ViterbiFilter() exactly, * do <(gsc / om->scale_w) - 3.0>. * * must be the same profile that was constructed from. * * is irrevocably altered by this call. * * Do not call this more than once on any given ! * * Args: - optimized profile, containing scale information. * - generic profile that was built from. * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_profile_SameAsVF(const P7_OPROFILE *om, P7_PROFILE *gm) { int k; int x; /* Transitions */ /* <= -eslINFINITY test is used solely to silence compiler. really testing == -eslINFINITY */ for (x = 0; x < gm->M*p7P_NTRANS; x++) gm->tsc[x] = (gm->tsc[x] <= -eslINFINITY) ? -eslINFINITY : roundf(om->scale_w * gm->tsc[x]); /* Enforce the rule that no II can be 0; max of -1 */ for (x = p7P_II; x < gm->M*p7P_NTRANS; x += p7P_NTRANS) if (gm->tsc[x] == 0.0) gm->tsc[x] = -1.0; /* Emissions */ for (x = 0; x < gm->abc->Kp; x++) for (k = 0; k <= gm->M; k++) { gm->rsc[x][k*2] = (gm->rsc[x][k*2] <= -eslINFINITY) ? -eslINFINITY : roundf(om->scale_w * gm->rsc[x][k*2]); gm->rsc[x][k*2+1] = 0.0; /* insert score: VF makes it zero no matter what. */ } /* Specials */ for (k = 0; k < p7P_NXSTATES; k++) for (x = 0; x < p7P_NXTRANS; x++) gm->xsc[k][x] = (gm->xsc[k][x] <= -eslINFINITY) ? -eslINFINITY : roundf(om->scale_w * gm->xsc[k][x]); /* 3nat approximation: NN, CC, JJ hardcoded 0 in limited precision */ gm->xsc[p7P_N][p7P_LOOP] = gm->xsc[p7P_J][p7P_LOOP] = gm->xsc[p7P_C][p7P_LOOP] = 0.0; return eslOK; } /*------------ end, P7_OPROFILE debugging tools ----------------*/ /***************************************************************** * 5. Benchmark driver. *****************************************************************/ #ifdef p7OPROFILE_BENCHMARK /* Timing profile conversion. gcc -o benchmark-oprofile -std=gnu99 -g -Wall -msse2 -I.. -L.. -I../../easel -L../../easel -Dp7OPROFILE_BENCHMARK\ p7_oprofile.c -lhmmer -leasel -lm icc -o benchmark-oprofile -O3 -static -I.. -L.. -I../../easel -L../../easel -Dp7OPROFILE_BENCHMARK p7_oprofile.c -lhmmer -leasel -lm ./benchmark-sse runs benchmark */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-L", eslARG_INT, "400", NULL, NULL, NULL, NULL, NULL, "length of target sequence", 0 }, { "-N", eslARG_INT, "100000", NULL, NULL, NULL, NULL, NULL, "number of conversions to time", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for the generic implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); int i; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); esl_stopwatch_Start(w); for (i = 0; i < N; i++) p7_oprofile_Convert(gm, om); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*p7OPROFILE_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 6. Unit tests *****************************************************************/ #ifdef p7OPROFILE_TESTDRIVE #endif /*p7OPROFILE_TESTDRIVE*/ /*------------------- end, unit tests ---------------------------*/ /***************************************************************** * 7. Test driver *****************************************************************/ #ifdef p7OPROFILE_TESTDRIVE #endif /*p7OPROFILE_TESTDRIVE*/ /*------------------- end, test driver --------------------------*/ /***************************************************************** * 8. Example *****************************************************************/ #ifdef p7OPROFILE_EXAMPLE /* gcc -std=gnu99 -g -Wall -Dp7OPROFILE_EXAMPLE -I.. -I../../easel -L.. -L../../easel -o p7_oprofile_example p7_oprofile.c -lhmmer -leasel -lm * ./p7_oprofile_example */ #include "p7_config.h" #include #include "easel.h" #include "hmmer.h" int main(int argc, char **argv) { char *hmmfile = argv[1]; ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om1 = NULL; P7_OPROFILE *om2 = NULL; int status; char errbuf[eslERRBUFSIZE]; status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); status = p7_hmmfile_Read(hfp, &abc, &hmm); if (status == eslEFORMAT) p7_Fail("Bad file format in HMM file %s:\n%s\n", hfp->fname, hfp->errbuf); else if (status == eslEINCOMPAT) p7_Fail("HMM in %s is not in the expected %s alphabet\n", hfp->fname, esl_abc_DecodeType(abc->type)); else if (status == eslEOF) p7_Fail("Empty HMM file %s? No HMM data found.\n", hfp->fname); else if (status != eslOK) p7_Fail("Unexpected error in reading HMMs from %s\n", hfp->fname); bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); om1 = p7_oprofile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 400, p7_LOCAL); p7_oprofile_Convert(gm, om1); p7_oprofile_Dump(stdout, om1); om2 = p7_oprofile_Copy(om1); if (p7_oprofile_Compare(om1, om2, 0.001f, errbuf) != eslOK) printf ("ERROR %s\n", errbuf); p7_oprofile_Destroy(om1); p7_oprofile_Destroy(om2); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); return eslOK; } #endif /*p7OPROFILE_EXAMPLE*/ /*----------------------- end, example --------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: p7_oprofile.c 4699 2014-07-03 14:54:25Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/impl_sse/p7_oprofile.c $ *****************************************************************/ hmmer-3.1b2/src/impl_sse/fbparsers.tex0000664361611702660230000000150012473612613017377 0ustar wheelerteddy\documentclass[11pt]{article} \usepackage{times} \usepackage{fullpage} \begin{document} \subsection{The Backward algorithm for Plan7 profiles: serial version} \begin{tabbing} Initialization on row $L$:\\ \> $F^\mathrm{J}(L) = F^\mathrm{B}(L) = F^\mathrm{N}(L) = 0; $\\ \> $F^\mathrm{C}(L) = t_{\mathrm{CT}}; $\\ \> $F^\mathrm{E}(L) = F^\mathrm{C}(L) * t_{\mathrm{EC}}; $\\ \> $F^\mathrm{M}(L,M) = F^\mathrm{E}(L); $\\ \> $F^\mathrm{D}(L,M) = F^\mathrm{E}(L); $\\ \> for $k = M-1$ down to $1$: \\ \>\> $F^\mathrm{M}(L,k) = F^\mathrm{D}(L,k+1) * t_{\mathrm{M}_k\mathrm{D}_{k+1}} * F^\mathrm{E}(L); $\\ \>\> $F^\mathrm{D}(L,k) = F^\mathrm{D}(L,k+1) * t_{\mathrm{D}_k\mathrm{D}_{k+1}} * F^\mathrm{E}(L); $\\ \>\> $F^\mathrm{I}(L,k) = 0. \> $V_k^\mathrm{M}(0) = -\infty \quad \forall k.$\\ \\ \end{tabbing} \end{document} hmmer-3.1b2/src/impl_sse/io.c0000664361611702660230000014332112473612613015451 0ustar wheelerteddy/* Saving optimized profiles in two pieces: MSV part and the rest. * * To accelerate hmmscan, which is limited by speed of HMM input, * hmmpress saves an optimized profile in two pieces. One file gets * a bare minimum of information needed to run the MSV filter. * The other file gets the rest of the profile. Both files are binary, * stored exactly as the has the information internally. * * By convention, hmmpress calls the two files .h3f and * .h3p, which nominally stand for "H3 filter" and "H3 * profile". * * Contents: * 1. Writing optimized profiles to two files. * 2. Reading optimized profiles in two stages. * 3. Utility routines. * 4. Benchmark driver. * 5. Unit tests. * 6. Test driver. * 7. Example. * 8. Copyright and license information. * * TODO: * - crossplatform binary compatibility (endedness and off_t) * - Write() could save a tag (model #) instead of name for verifying * that MSV and Rest parts match, saving a malloc for var-lengthed name * in ReadRest(). * */ #include "p7_config.h" #include #include #include #ifdef HMMER_THREADS #include #endif #include /* SSE */ #include /* SSE2 */ #include "easel.h" #include "hmmer.h" #include "impl_sse.h" static uint32_t v3f_fmagic = 0xb3e6e6f3; /* 3/f binary MSV file, SSE: "3ffs" = 0x 33 66 66 73 + 0x80808080 */ static uint32_t v3f_pmagic = 0xb3e6f0f3; /* 3/f binary profile file, SSE: "3fps" = 0x 33 66 70 73 + 0x80808080 */ static uint32_t v3e_fmagic = 0xb3e5e6f3; /* 3/e binary MSV file, SSE: "3efs" = 0x 33 65 66 73 + 0x80808080 */ static uint32_t v3e_pmagic = 0xb3e5f0f3; /* 3/e binary profile file, SSE: "3eps" = 0x 33 65 70 73 + 0x80808080 */ static uint32_t v3d_fmagic = 0xb3e4e6f3; /* 3/d binary MSV file, SSE: "3dfs" = 0x 33 64 66 73 + 0x80808080 */ static uint32_t v3d_pmagic = 0xb3e4f0f3; /* 3/d binary profile file, SSE: "3dps" = 0x 33 64 70 73 + 0x80808080 */ static uint32_t v3c_fmagic = 0xb3e3e6f3; /* 3/c binary MSV file, SSE: "3cfs" = 0x 33 63 66 73 + 0x80808080 */ static uint32_t v3c_pmagic = 0xb3e3f0f3; /* 3/c binary profile file, SSE: "3cps" = 0x 33 63 70 73 + 0x80808080 */ static uint32_t v3b_fmagic = 0xb3e2e6f3; /* 3/b binary MSV file, SSE: "3bfs" = 0x 33 62 66 73 + 0x80808080 */ static uint32_t v3b_pmagic = 0xb3e2f0f3; /* 3/b binary profile file, SSE: "3bps" = 0x 33 62 70 73 + 0x80808080 */ static uint32_t v3a_fmagic = 0xe8b3e6f3; /* 3/a binary MSV file, SSE: "h3fs" = 0x 68 33 66 73 + 0x80808080 */ static uint32_t v3a_pmagic = 0xe8b3f0f3; /* 3/a binary profile file, SSE: "h3ps" = 0x 68 33 70 73 + 0x80808080 */ /***************************************************************** *# 1. Writing optimized profiles to two files. *****************************************************************/ /* Function: p7_oprofile_Write() * Synopsis: Write an optimized profile in two files. * * Purpose: Write the MSV filter part of to open binary stream * , and the rest of the model to . These two * streams will typically be <.h3f> and <.h3p> files * being created by hmmpress. * * Args: ffp - open binary stream for saving MSV filter part * pfp - open binary stream for saving rest of profile * om - optimized profile to save * * Returns: on success. * * Throws: on any write failure, such as filling * the disk. */ int p7_oprofile_Write(FILE *ffp, FILE *pfp, P7_OPROFILE *om) { int Q4 = p7O_NQF(om->M); int Q8 = p7O_NQW(om->M); int Q16 = p7O_NQB(om->M); int Q16x = p7O_NQB(om->M) + p7O_EXTRA_SB; int n = strlen(om->name); int x; /* is the part of the oprofile that MSVFilter() needs */ if (fwrite((char *) &(v3f_fmagic), sizeof(uint32_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->M), sizeof(int), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->abc->type), sizeof(int), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &n, sizeof(int), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->name, sizeof(char), n+1, ffp) != n+1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->max_length),sizeof(int), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->tbm_b), sizeof(uint8_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->tec_b), sizeof(uint8_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->tjb_b), sizeof(uint8_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->scale_b), sizeof(float), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->base_b), sizeof(uint8_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->bias_b), sizeof(uint8_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); for (x = 0; x < om->abc->Kp; x++) if (fwrite( (char *) om->sbv[x], sizeof(__m128i), Q16x, ffp) != Q16x) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); for (x = 0; x < om->abc->Kp; x++) if (fwrite( (char *) om->rbv[x], sizeof(__m128i), Q16, ffp) != Q16) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->evparam, sizeof(float), p7_NEVPARAM, ffp) != p7_NEVPARAM) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->offs, sizeof(off_t), p7_NOFFSETS, ffp) != p7_NOFFSETS) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->compo, sizeof(float), p7_MAXABET, ffp) != p7_MAXABET) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(v3f_fmagic), sizeof(uint32_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); /* sentinel */ /* gets the rest of the oprofile */ if (fwrite((char *) &(v3f_pmagic), sizeof(uint32_t), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->M), sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->abc->type), sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &n, sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->name, sizeof(char), n+1, pfp) != n+1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (om->acc == NULL) { n = 0; if (fwrite((char *) &n, sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); } else { n = strlen(om->acc); if (fwrite((char *) &n, sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->acc, sizeof(char), n+1, pfp) != n+1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); } if (om->desc == NULL) { n = 0; if (fwrite((char *) &n, sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); } else { n = strlen(om->desc); if (fwrite((char *) &n, sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->desc, sizeof(char), n+1, pfp) != n+1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); } if (fwrite((char *) om->rf, sizeof(char), om->M+2, pfp) != om->M+2) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->mm, sizeof(char), om->M+2, pfp) != om->M+2) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->cs, sizeof(char), om->M+2, pfp) != om->M+2) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->consensus, sizeof(char), om->M+2, pfp) != om->M+2) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); /* ViterbiFilter part */ if (fwrite((char *) om->twv, sizeof(__m128i), 8*Q8, pfp) != 8*Q8) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); for (x = 0; x < om->abc->Kp; x++) if (fwrite( (char *) om->rwv[x], sizeof(__m128i), Q8, pfp) != Q8) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); for (x = 0; x < p7O_NXSTATES; x++) if (fwrite( (char *) om->xw[x], sizeof(int16_t), p7O_NXTRANS, pfp) != p7O_NXTRANS) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->scale_w), sizeof(float), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->base_w), sizeof(int16_t), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->ddbound_w), sizeof(int16_t), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->ncj_roundoff), sizeof(float), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); /* Forward/Backward part */ if (fwrite((char *) om->tfv, sizeof(__m128), 8*Q4, pfp) != 8*Q4) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); for (x = 0; x < om->abc->Kp; x++) if (fwrite( (char *) om->rfv[x], sizeof(__m128), Q4, pfp) != Q4) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); for (x = 0; x < p7O_NXSTATES; x++) if (fwrite( (char *) om->xf[x], sizeof(float), p7O_NXTRANS, pfp) != p7O_NXTRANS) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->cutoff, sizeof(float), p7_NCUTOFFS, pfp) != p7_NCUTOFFS) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->nj), sizeof(float), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->mode), sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->L) , sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(v3f_pmagic), sizeof(uint32_t), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); /* sentinel */ return eslOK; } /*---------------- end, writing oprofile ------------------------*/ /***************************************************************** * 2. Reading optimized profiles in two stages. *****************************************************************/ /* Function: p7_oprofile_ReadMSV() * Synopsis: Read MSV filter part of an optimized profile. * * Purpose: Read the MSV filter part of a profile from the * <.h3f> file associated with an open HMM file . * Allocate a new model, populate it with this minimal * MSV filter information, and return a pointer to it * in <*ret_om>. * * Our alphabet may get set by the first HMM we read. If * <*byp_abc> is at start, create a new alphabet and * return a pointer to it in <*byp_abc>. If <*byp_abc> is * non-, it is assumed to be a pointer to an existing * alphabet; we verify that the HMM's alphabet matches it * and <*ret_abc> isn't changed. This is the same * convention used by . * * The <.h3f> file was opened automatically, if it existed, * when the HMM file was opened with . * * When no more HMMs remain in the file, return . * * Args: hfp - open HMM file, with associated .h3p file * byp_abc - BYPASS: <*byp_abc == ESL_ALPHABET *> if known; * <*byp_abc == NULL> if desired; * if unwanted. * ret_om - RETURN: newly allocated with MSV filter * data filled in. * * Returns: on success. <*ret_om> is allocated here; * caller free's with . * <*byp_abc> is allocated here if it was requested; * caller free's with . * * Returns if has no <.h3f> file open, * or on any parsing error. * * Returns if the HMM we read is incompatible * with the existing alphabet <*byp_abc> led us to expect. * * On any returned error, errbuf> contains an * informative error message. * * Throws: on allocation error. */ int p7_oprofile_ReadMSV(P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OPROFILE **ret_om) { P7_OPROFILE *om = NULL; ESL_ALPHABET *abc = NULL; uint32_t magic; off_t roff; int M, Q16, Q16x; int x,n; int alphatype; int status; if (hfp->errbuf != NULL) hfp->errbuf[0] = '\0'; if (hfp->ffp == NULL) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no MSV profile file; hmmpress probably wasn't run"); if (feof(hfp->ffp)) { status = eslEOF; goto ERROR; } /* normal EOF: no more profiles */ /* keep track of the starting offset of the MSV model */ roff = ftello(hfp->ffp); if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->ffp)) { status = eslEOF; goto ERROR; } if (magic == v3a_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/a); please hmmpress your HMM file again"); if (magic == v3b_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/b); please hmmpress your HMM file again"); if (magic == v3c_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/c); please hmmpress your HMM file again"); if (magic == v3d_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/d); please hmmpress your HMM file again"); if (magic == v3e_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/e); please hmmpress your HMM file again"); if (magic != v3f_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic; not an HMM database?"); if (! fread( (char *) &M, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read model size M"); if (! fread( (char *) &alphatype, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read alphabet type"); Q16 = p7O_NQB(M); Q16x = p7O_NQB(M) + p7O_EXTRA_SB; /* Set or verify alphabet. */ if (byp_abc == NULL || *byp_abc == NULL) { /* alphabet unknown: whether wanted or unwanted, make a new one */ if ((abc = esl_alphabet_Create(alphatype)) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failed: alphabet"); } else { /* alphabet already known: verify it against what we see in the HMM */ abc = *byp_abc; if (abc->type != alphatype) ESL_XFAIL(eslEINCOMPAT, hfp->errbuf, "Alphabet type mismatch: was %s, but current profile says %s", esl_abc_DecodeType(abc->type), esl_abc_DecodeType(alphatype)); } /* Now we know the sizes of things, so we can allocate. */ if ((om = p7_oprofile_Create(M, abc)) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failed: oprofile"); om->M = M; om->roff = roff; if (! fread((char *) &n, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read name length"); ESL_ALLOC(om->name, sizeof(char) * (n+1)); if (! fread((char *) om->name, sizeof(char), n+1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read name"); if (! fread((char *) &(om->max_length),sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read max_length"); if (! fread((char *) &(om->tbm_b), sizeof(uint8_t), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read tbm"); if (! fread((char *) &(om->tec_b), sizeof(uint8_t), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read tec"); if (! fread((char *) &(om->tjb_b), sizeof(uint8_t), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read tjb"); if (! fread((char *) &(om->scale_b), sizeof(float), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read scale"); if (! fread((char *) &(om->base_b), sizeof(uint8_t), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read base"); if (! fread((char *) &(om->bias_b), sizeof(uint8_t), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read bias"); for (x = 0; x < abc->Kp; x++) if (! fread((char *) om->sbv[x], sizeof(__m128i), Q16x, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read ssv scores at %d [residue %c]", x, abc->sym[x]); for (x = 0; x < abc->Kp; x++) if (! fread((char *) om->rbv[x], sizeof(__m128i), Q16, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read msv scores at %d [residue %c]", x, abc->sym[x]); if (! fread((char *) om->evparam, sizeof(float), p7_NEVPARAM, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read stat params"); if (! fread((char *) om->offs, sizeof(off_t), p7_NOFFSETS, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read hmmpfam offsets"); if (! fread((char *) om->compo, sizeof(float), p7_MAXABET, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read model composition"); /* record ends with magic sentinel, for detecting binary file corruption */ if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no sentinel magic: .h3f file corrupted?"); if (magic != v3f_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad sentinel magic; .h3f file corrupted?"); /* keep track of the ending offset of the MSV model */ om->eoff = ftello(hfp->ffp) - 1;; if (byp_abc != NULL) *byp_abc = abc; /* pass alphabet (whether new or not) back to caller, if caller wanted it */ *ret_om = om; return eslOK; ERROR: if (abc != NULL && (byp_abc == NULL || *byp_abc == NULL)) esl_alphabet_Destroy(abc); /* destroy alphabet if we created it here */ if (om != NULL) p7_oprofile_Destroy(om); *ret_om = NULL; return status; } /* Function: p7_oprofile_ReadInfoMSV() * Synopsis: Read MSV filter info, but not the scores. * * Purpose: Read just enough of the MSV filter header from the * <.h3f> file associated with an open HMM file * to skip ahead to the next MSV filter. Allocate a new * model, populate it with just the file offsets of this * model and return a pointer to it in <*ret_om>. * * The <.h3f> file was opened automatically, if it existed, * when the HMM file was opened with . * * When no more HMMs remain in the file, return . * * Args: hfp - open HMM file, with associated .h3p file * byp_abc - BYPASS: <*byp_abc == ESL_ALPHABET *> if known; * <*byp_abc == NULL> if desired; * if unwanted. * ret_om - RETURN: newly allocated with partial MSV * filter data filled in. * * Returns: on success. <*ret_om> is allocated here; * caller free's with . * <*byp_abc> is allocated here if it was requested; * caller free's with . * * Returns if has no <.h3f> file open, * or on any parsing error. * * Returns if the HMM we read is incompatible * with the existing alphabet <*byp_abc> led us to expect. * * On any returned error, errbuf> contains an * informative error message. * * Throws: on allocation error. */ int p7_oprofile_ReadInfoMSV(P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OPROFILE **ret_om) { P7_OPROFILE *om = NULL; ESL_ALPHABET *abc = NULL; uint32_t magic; off_t roff; int M, Q16, Q16x; int n; int alphatype; int status; if (hfp->errbuf != NULL) hfp->errbuf[0] = '\0'; if (hfp->ffp == NULL) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no MSV profile file; hmmpress probably wasn't run"); if (feof(hfp->ffp)) { status = eslEOF; goto ERROR; } /* normal EOF: no more profiles */ /* keep track of the starting offset of the MSV model */ roff = ftello(hfp->ffp); if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->ffp)) { status = eslEOF; goto ERROR; } if (magic == v3a_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/a); please hmmpress your HMM file again"); if (magic == v3b_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/b); please hmmpress your HMM file again"); if (magic == v3c_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/c); please hmmpress your HMM file again"); if (magic == v3d_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/d); please hmmpress your HMM file again"); if (magic == v3e_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/e); please hmmpress your HMM file again"); if (magic != v3f_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic; not an HMM database?"); if (! fread( (char *) &M, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read model size M"); if (! fread( (char *) &alphatype, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read alphabet type"); Q16 = p7O_NQB(M); Q16x = p7O_NQB(M) + p7O_EXTRA_SB; /* Set or verify alphabet. */ if (byp_abc == NULL || *byp_abc == NULL) { /* alphabet unknown: whether wanted or unwanted, make a new one */ if ((abc = esl_alphabet_Create(alphatype)) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failed: alphabet"); } else { /* alphabet already known: verify it against what we see in the HMM */ abc = *byp_abc; if (abc->type != alphatype) ESL_XFAIL(eslEINCOMPAT, hfp->errbuf, "Alphabet type mismatch: was %s, but current profile says %s", esl_abc_DecodeType(abc->type), esl_abc_DecodeType(alphatype)); } /* Now we know the sizes of things, so we can allocate. */ if ((om = p7_oprofile_Create(M, abc)) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failed: oprofile"); om->M = M; om->roff = roff; /* calculate the remaining length of the msv model */ om->name = NULL; if (!fread((char *) &n, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read name length"); roff += (sizeof(int) * 5); /* magic, model size, alphabet type, max length, name length */ roff += (sizeof(char) * (n + 1)); /* name string and terminator '\0' */ roff += (sizeof(float) + sizeof(uint8_t) * 5); /* transition costs, bias, scale and base */ roff += (sizeof(__m128i) * abc->Kp * Q16x); /* ssv scores */ roff += (sizeof(__m128i) * abc->Kp * Q16); /* msv scores */ roff += (sizeof(float) * p7_NEVPARAM); /* stat params */ roff += (sizeof(off_t) * p7_NOFFSETS); /* hmmscan offsets */ roff += (sizeof(float) * p7_MAXABET); /* model composition */ roff += sizeof(uint32_t); /* sentinel magic */ /* keep track of the ending offset of the MSV model */ p7_oprofile_Position(hfp, roff); om->eoff = ftello(hfp->ffp) - 1; if (byp_abc != NULL) *byp_abc = abc; /* pass alphabet (whether new or not) back to caller, if caller wanted it */ *ret_om = om; return eslOK; ERROR: if (abc != NULL && (byp_abc == NULL || *byp_abc == NULL)) esl_alphabet_Destroy(abc); /* destroy alphabet if we created it here */ if (om != NULL) p7_oprofile_Destroy(om); *ret_om = NULL; return status; } /* Function: p7_oprofile_ReadBlockMSV() * Synopsis: Read the next block of optimized profiles from a hmm file. * * Purpose: Reads a block of optimized profiles from open hmm file into * . * * Returns: on success; the new sequence is stored in . * * Returns when there is no profiles left in the * file (including first attempt to read an empty file). * * Otherwise return the status of the p7_oprofile_ReadMSV function. */ int p7_oprofile_ReadBlockMSV(P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OM_BLOCK *hmmBlock) { int i; int size = 0; int status = eslOK; hmmBlock->count = 0; for (i = 0; i < hmmBlock->listSize; ++i) { status = p7_oprofile_ReadMSV(hfp, byp_abc, &hmmBlock->list[i]); if (status != eslOK) break; size += hmmBlock->list[i]->M; ++hmmBlock->count; } /* EOF will be returned only in the case were no profiles were read */ if (status == eslEOF && i > 0) status = eslOK; return status; } /* Function: p7_oprofile_ReadRest() * Synopsis: Read the rest of an optimized profile. * * Purpose: Read the rest of an optimized profile from * the <.h3p> file associated with an open HMM * file . * * This is the second part of a two-part calling sequence. * The here must be the result of a previous * successful call on the same * open . * * Args: hfp - open HMM file, from which we've previously * called . * om - optimized profile that was successfully * returned by . * * Returns: on success, and is now a complete * optimized profile. * * Returns if has no <.h3p> file open, * or on any parsing error, and set errbuf> to * an informative error message. * * Throws: if an fails to reposition the * binary <.h3p> file. * * on allocation error. */ int p7_oprofile_ReadRest(P7_HMMFILE *hfp, P7_OPROFILE *om) { uint32_t magic; int M, Q4, Q8; int x,n; char *name = NULL; int alphatype; int status; #ifdef HMMER_THREADS /* lock the mutex to prevent other threads from reading from the optimized * profile at the same time. */ if (hfp->syncRead) { if (pthread_mutex_lock (&hfp->readMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex lock failed"); } #endif if (hfp->errbuf != NULL) hfp->errbuf[0] = '\0'; if (hfp->pfp == NULL) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no MSV profile file; hmmpress probably wasn't run"); /* Position the pfp> using offset stored in */ if (fseeko(hfp->pfp, om->offs[p7_POFFSET], SEEK_SET) != 0) ESL_EXCEPTION(eslESYS, "fseeko() failed"); if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read magic"); if (magic == v3a_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/a); please hmmpress your HMM file again"); if (magic == v3b_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/b); please hmmpress your HMM file again"); if (magic == v3c_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/c); please hmmpress your HMM file again"); if (magic == v3d_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/d); please hmmpress your HMM file again"); if (magic == v3e_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/e); please hmmpress your HMM file again"); if (magic != v3f_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic; not an HMM database file?"); if (! fread( (char *) &M, sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read model size M"); if (! fread( (char *) &alphatype, sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read alphabet type"); if (! fread( (char *) &n, sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read name length"); if (M != om->M) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "p/f model length mismatch"); if (alphatype != om->abc->type) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "p/f alphabet type mismatch"); ESL_ALLOC(name, sizeof(char) * (n+1)); if (! fread( (char *) name, sizeof(char), n+1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read name"); if (strcmp(name, om->name) != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "p/f name mismatch"); if (! fread((char *) &n, sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read accession length"); if (n > 0) { ESL_ALLOC(om->acc, sizeof(char) * (n+1)); if (! fread( (char *) om->acc, sizeof(char), n+1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read accession"); } if (! fread((char *) &n, sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read description length"); if (n > 0) { ESL_ALLOC(om->desc, sizeof(char) * (n+1)); if (! fread( (char *) om->desc, sizeof(char), n+1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read description"); } if (! fread((char *) om->rf, sizeof(char), M+2, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read rf annotation"); if (! fread((char *) om->mm, sizeof(char), M+2, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read mm annotation"); if (! fread((char *) om->cs, sizeof(char), M+2, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read cs annotation"); if (! fread((char *) om->consensus, sizeof(char), M+2, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read consensus annotation"); Q4 = p7O_NQF(om->M); Q8 = p7O_NQW(om->M); if (! fread((char *) om->twv, sizeof(__m128i), 8*Q8, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read , vitfilter transitions"); for (x = 0; x < om->abc->Kp; x++) if (! fread( (char *) om->rwv[x], sizeof(__m128i), Q8, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read [%d], vitfilter emissions for sym %c", x, om->abc->sym[x]); for (x = 0; x < p7O_NXSTATES; x++) if (! fread( (char *) om->xw[x], sizeof(int16_t), p7O_NXTRANS, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read [%d], vitfilter special transitions", x); if (! fread((char *) &(om->scale_w), sizeof(float), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read scale_w"); if (! fread((char *) &(om->base_w), sizeof(int16_t), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read base_w"); if (! fread((char *) &(om->ddbound_w), sizeof(int16_t), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read ddbound_w"); if (! fread((char *) &(om->ncj_roundoff), sizeof(float), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read ddbound_w"); if (! fread((char *) om->tfv, sizeof(__m128), 8*Q4, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read transitions"); for (x = 0; x < om->abc->Kp; x++) if (! fread( (char *) om->rfv[x], sizeof(__m128), Q4, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read [%d] emissions for sym %c", x, om->abc->sym[x]); for (x = 0; x < p7O_NXSTATES; x++) if (! fread( (char *) om->xf[x], sizeof(float), p7O_NXTRANS, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read [%d] special transitions", x); if (! fread((char *) om->cutoff, sizeof(float), p7_NCUTOFFS, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read Pfam score cutoffs"); if (! fread((char *) &(om->nj), sizeof(float), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read nj"); if (! fread((char *) &(om->mode), sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read mode"); if (! fread((char *) &(om->L) , sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read L"); /* record ends with magic sentinel, for detecting binary file corruption */ if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no sentinel magic: .h3p file corrupted?"); if (magic != v3f_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad sentinel magic; .h3p file corrupted?"); #ifdef HMMER_THREADS if (hfp->syncRead) { if (pthread_mutex_unlock (&hfp->readMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed"); } #endif free(name); return eslOK; ERROR: #ifdef HMMER_THREADS if (hfp->syncRead) { if (pthread_mutex_unlock (&hfp->readMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed"); } #endif if (name != NULL) free(name); return status; } /*----------- end, reading optimized profiles -------------------*/ /***************************************************************** * 3. Utility routines *****************************************************************/ /* Function: p7_oprofile_CreateBlock() * Synopsis: Create a new block of empty . * * Purpose: Creates a block of empty profile objects. * * Returns: a pointer to the new . Caller frees this * with . * * Throws: if allocation fails. */ P7_OM_BLOCK * p7_oprofile_CreateBlock(int count) { int i = 0; P7_OM_BLOCK *block = NULL; int status = eslOK; ESL_ALLOC(block, sizeof(*block)); block->count = 0; block->listSize = 0; block->list = NULL; ESL_ALLOC(block->list, sizeof(P7_OPROFILE *) * count); block->listSize = count; for (i = 0; i < count; ++i) { block->list[i] = NULL; } return block; ERROR: if (block != NULL) { if (block->list != NULL) free(block->list); free(block); } return NULL; } /* Function: p7_oprofile_DestroyBlock() * Synopsis: Frees an . * * Purpose: Free a Create()'d block of profiles. */ void p7_oprofile_DestroyBlock(P7_OM_BLOCK *block) { int i; if (block == NULL) return; if (block->list != NULL) { for (i = 0; i < block->listSize; ++i) { if (block->list[i] != NULL) p7_oprofile_Destroy(block->list[i]); } free(block->list); } free(block); return; } /* Function: p7_oprofile_Position() * Synopsis: Reposition an open hmm file to an offset. * * Purpose: Reposition an open to offset . * would usually be the first byte of a * desired hmm record. * * Returns: on success; * if no data can be read from this position. * * Throws: if the is not positionable. * if no msv profile opened. * if the fseeko() call fails. */ int p7_oprofile_Position(P7_HMMFILE *hfp, off_t offset) { if (hfp->ffp == NULL) ESL_EXCEPTION(eslEFORMAT, hfp->errbuf, "no MSV profile file; hmmpress probably wasn't run"); if (hfp->do_stdin) ESL_EXCEPTION(eslEINVAL, "can't Position() in standard input"); if (hfp->do_gzip) ESL_EXCEPTION(eslEINVAL, "can't Position() in a gzipped file"); if (offset < 0) ESL_EXCEPTION(eslEINVAL, "bad offset"); if (fseeko(hfp->ffp, offset, SEEK_SET) != 0) ESL_EXCEPTION(eslESYS, "fseeko() failed"); return eslOK; } /*-------------------- end, utility routines ---------------------*/ /***************************************************************** * 4. Benchmark driver. *****************************************************************/ #ifdef p7IO_BENCHMARK /* gcc -g -Wall -o benchmark-io -I.. -L.. -I../../easel -L../../easel -Dp7IO_BENCHMARK io.c -lhmmer -leasel -lm icc -O3 -static -o benchmark-io -I.. -L.. -I../../easel -L../../easel -Dp7IO_BENCHMARK io.c -lhmmer -leasel -lm ./benchmark-io Pfam.msv */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for profile input"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_ALPHABET *abc = NULL; char *msvfile = esl_opt_GetArg(go, 1); FILE *msvfp = NULL; P7_OPROFILE *om = NULL; int nmodel = 0; uint64_t totM = 0; int status; esl_stopwatch_Start(w); if ((msvfp = fopen(msvfile, "r")) == NULL) p7_Fail("Failed to open MSV file %s for reading.\n", msvfile); while ((status = p7_oprofile_ReadMSV(msvfp, &abc, NULL, &om)) == eslOK) { nmodel++; totM += om->M; p7_oprofile_Destroy(om); } if (status == eslEFORMAT) p7_Fail("bad file format in profile file %s", msvfile); else if (status == eslEINCOMPAT) p7_Fail("profile file %s contains different alphabets", msvfile); else if (status != eslEOF) p7_Fail("Unexpected error in reading profiles from %s", msvfile); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# number of models: %d\n", nmodel); printf("# total M: %" PRId64 "\n", totM); fclose(msvfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*IO_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 5. Unit tests. *****************************************************************/ #ifdef p7IO_TESTDRIVE static void utest_ReadWrite(P7_HMM *hmm, P7_OPROFILE *om) { char *msg = "oprofile read/write unit test failure"; ESL_ALPHABET *abc = NULL; P7_OPROFILE *om2 = NULL; char tmpfile[16] = "esltmpXXXXXX"; char *mfile = NULL; char *ffile = NULL; char *pfile = NULL; char *ssifile = NULL; FILE *fp = NULL; FILE *mfp = NULL; FILE *ffp = NULL; FILE *pfp = NULL; ESL_NEWSSI *nssi = NULL; P7_HMMFILE *hfp = NULL; uint16_t fh = 0; float tolerance = 0.001; char errbuf[eslERRBUFSIZE]; /* 1. A mini version of hmmpress: save the test HMM to a file along with its associated .h3{mfpi} files */ if ( esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg); if ( esl_sprintf(&mfile, "%s.h3m", tmpfile) != eslOK) esl_fatal(msg); if ( esl_sprintf(&ffile, "%s.h3f", tmpfile) != eslOK) esl_fatal(msg); if ( esl_sprintf(&pfile, "%s.h3p", tmpfile) != eslOK) esl_fatal(msg); if ( esl_sprintf(&ssifile, "%s.h3i", tmpfile) != eslOK) esl_fatal(msg); if ( esl_newssi_Open(ssifile, TRUE, &nssi) != eslOK) esl_fatal(msg); if (( mfp = fopen(mfile, "wb")) == NULL) esl_fatal(msg); if (( ffp = fopen(ffile, "wb")) == NULL) esl_fatal(msg); if (( pfp = fopen(pfile, "wb")) == NULL) esl_fatal(msg); /* the disk offsets are all 0 by construction, if there's only one * HMM in the file - but don't want to forget them, if we change the * unit test in the future to be multi HMM */ if ((om->offs[p7_MOFFSET] = ftello(mfp)) == -1) esl_fatal(msg); if ((om->offs[p7_FOFFSET] = ftello(ffp)) == -1) esl_fatal(msg); if ((om->offs[p7_POFFSET] = ftello(pfp)) == -1) esl_fatal(msg); if ( p7_hmmfile_WriteASCII(fp, -1, hmm) != eslOK) esl_fatal(msg); if ( p7_hmmfile_WriteBinary(mfp, -1, hmm) != eslOK) esl_fatal(msg); if ( p7_oprofile_Write(ffp, pfp, om) != eslOK) esl_fatal(msg); if ( esl_newssi_AddFile(nssi, tmpfile, 0, &fh) != eslOK) esl_fatal(msg); if ( esl_newssi_AddKey (nssi, hmm->name, fh, om->offs[p7_MOFFSET], 0, 0) != eslOK) esl_fatal(msg); if ( esl_newssi_Write(nssi) != eslOK) esl_fatal(msg); fclose(fp); fclose(mfp); fclose(ffp); fclose(pfp); esl_newssi_Close(nssi); /* 2. read the optimized profile back in */ if ( p7_hmmfile_OpenE(tmpfile, NULL, &hfp, NULL) != eslOK) esl_fatal(msg); if ( p7_oprofile_ReadMSV(hfp, &abc, &om2) != eslOK) esl_fatal(msg); if ( p7_oprofile_ReadRest(hfp, om2) != eslOK) esl_fatal(msg); /* 3. it should be identical to the original */ if ( p7_oprofile_Compare(om, om2, tolerance, errbuf) != eslOK) esl_fatal("%s\n%s", msg, errbuf); p7_oprofile_Destroy(om2); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); remove(ssifile); remove(ffile); remove(pfile); remove(mfile); remove(tmpfile); free(ssifile); free(mfile); free(ffile); free(pfile); } #endif /*p7IO_TESTDRIVE*/ /*------------------ end, unit tests ----------------------------*/ /***************************************************************** * 6. Test driver *****************************************************************/ #ifdef p7IO_TESTDRIVE /* gcc -g -Wall -msse2 -std=gnu99 -o io_utest -I.. -L.. -I../../easel -L../../easel -Dp7IO_TESTDRIVE io.c -lhmmer -leasel -lm ./io_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-M", eslARG_INT, "45", NULL, NULL, NULL, NULL, NULL, "size of random model to sample", 0 }, { "-L", eslARG_INT, "45", NULL, NULL, NULL, NULL, NULL, "configure model for length ", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for SSE Forward, Backward implementations"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; P7_HMM *hmm = NULL; P7_OPROFILE *om = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); /* Sample a random HMM and optimized profile, in amino acid alphabet. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (( p7_oprofile_Sample(r, abc, bg, M, L, &hmm, NULL, &om)) != eslOK) esl_fatal("failed to sample HMM and profile"); /* unit test(s) */ utest_ReadWrite(hmm, om); p7_oprofile_Destroy(om); p7_hmm_Destroy(hmm); p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return eslOK; } #endif /*p7IO_TESTDRIVE*/ /*------------------- end, test driver --------------------------*/ /***************************************************************** * 7. Example. *****************************************************************/ #ifdef p7IO_EXAMPLE /* gcc -g -Wall -Dp7IO_EXAMPLE -I.. -I../../easel -L.. -L../../easel -o io_example io.c -lhmmer -leasel -lm * ./io_example */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "verbose: print model info as they're read", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of writing MSV profile part"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_ALPHABET *abc = NULL; char *hmmfile = esl_opt_GetArg(go, 1); P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; char *fname = NULL; char *pname = NULL; FILE *ffp = NULL; FILE *pfp = NULL; int nmodel = 0; uint64_t totM = 0; int status; char errbuf[eslERRBUFSIZE]; status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); esl_sprintf(&fname, "%s.h3f", hmmfile); esl_sprintf(&pname, "%s.h3f", hmmfile); if ((ffp = fopen(fname, "wb")) == NULL) p7_Fail("failed to open %s\n", fname); if ((pfp = fopen(pname, "wb")) == NULL) p7_Fail("failed to open %s\n", pname); free(fname); free(pname); while ((status = p7_hmmfile_Read(hfp, &abc, &hmm)) == eslOK) { if (nmodel == 0) { /* first time initialization, now that alphabet known */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, 400); } if (esl_opt_GetBoolean(go, "-v")) printf("%s\n", hmm->name); nmodel++; totM += hmm->M; gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 400, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_Write(ffp, pfp, om); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); p7_hmm_Destroy(hmm); } if (status == eslEFORMAT) p7_Fail("bad file format in HMM file %s", hmmfile); else if (status == eslEINCOMPAT) p7_Fail("HMM file %s contains different alphabets", hmmfile); else if (status != eslEOF) p7_Fail("Unexpected error in reading HMMs from %s", hmmfile); fclose(ffp); fclose(pfp); p7_bg_Destroy(bg); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*IO_EXAMPLE*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/impl_sse/io.c $ * SVN $Id: io.c 3960 2012-03-22 21:42:50Z wheelert $ *****************************************************************/ hmmer-3.1b2/src/impl_sse/p7_omx.ai0000664361611702660230000525246312473612613016437 0ustar wheelerteddy%PDF-1.4 %âãÏÓ 1 0 obj<> endobj 2 0 obj<> endobj 5 0 obj<>/ArtBox[12.3447 106.627 786.406 515.052]/MediaBox[0.0 0.0 792.0 612.0]/Thumb 121 0 R/TrimBox[0.0 0.0 792.0 612.0]/Resources<>/Font<>/ProcSet[/PDF/Text]/Properties<>/MC1<>>>/ExtGState<>>>/Type/Page/LastModified(D:20080819105919-04'00')>> endobj 72 0 obj<> endobj 73 0 obj<> endobj 74 0 obj<>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 12.0 %%AI8_CreatorVersion: 12.0.1 %%For: (.) () %%Title: (p7_omx.ai) %%CreationDate: 8/19/2008 10:59 AM %%BoundingBox: 12 106 787 516 %%HiResBoundingBox: 12.3447 106.627 786.4063 515.0522 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 8.0 %AI12_BuildNumber: 205 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKCustomColor: 1 1 1 1 ([Registration]) %%CMYKProcessColor: 1 1 0 0 (Global Deep Sea Blue) %%+ 0.8 0 1 0 (Global Green) %%+ 1 0 0 0 (Global Pure Cyan) %%+ 0 0 1 0 (Global Pure Yellow) %%+ 0 1 1 0 (Global Red) %%+ 0 0.5 1 0 (Global Squash) %AI3_TemplateBox: 396.5 305.5 396.5 305.5 %AI3_TileBox: 8.1001 7.99988 784.0001 603.8999 %AI3_DocumentPreview: None %AI5_ArtSize: 792 612 %AI5_RulerUnits: 2 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -97 561 2 1836 1235 18 0 0 6 111 0 0 1 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:0 0 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 75 0 obj<>stream %%BoundingBox: 12 106 787 516 %%HiResBoundingBox: 12.3447 106.627 786.4063 515.0522 %AI7_Thumbnail: 128 68 8 %%BeginData: 11054 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C457D53FFA87D5253A8FFFFFF527DA8FD057DA8FFA8FD047DA87DA87D %A87D7DA8A8527DFFFD047DA87D7DFD53FF59A8A8A8537D52FFA8FFA8FD04 %7D52527D53A8FFA852FD047D52FD047D52FF7E7D7DFF5252FD047D52FD55 %FFA9A8FDFCFFFDE4FFA8FFA8FFA8FD1AFFA8FD5FFFA87EA8FF7DA8FD17FF %5252527D53FD0DFFAFFFA8FD15FFA8FD15FFA8FD17FFA8FD0BFFA8FFA8FF %A8FD05FF3C853C3D606160613C3D14613C3D143D60FFFFA8FFA8A9FD0CFF %84A87DA8FD15FFA8FD16FFA8FD16FFAFA8FD09FFFD05A8FD06FF851B8B85 %8B3D8B618B858B618B3D61618B85FD0AFFA8FFA8FFA8FFA8A8A8FFA8FFA8 %FFA8FFA8FFA8FD05FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD05FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD05FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFFFFFA8FFA8A8A8FFA8A8FFFF3D1B143D141B141B14 %1B608561613C858561FD63FFA87D7DA87DA8A8A87DFFFFAF8561618B6161 %618561FD0AFF52FD07FFA8CFCFFD05FFA7CFFD06FFA8FD07FFA8FD06FFCF %A7FD07FFA8FD06FFCFA8FD05FFCFA8A8FD05FFA9CBFD06FFA8CFA8FD05FF %A8CAFD06FFA8FFFFFFA8FFA8FFA8FD0DFFA8FFA8FFA8FD07FFA9FD07FFCF %82FD06FFA7A7FD06FFA9FD06FFAEACAEFD05FFA8A7FD06FFA8FD07FF82AD %FD06FFA0FD07FFA2FD06FFAE82FD06FFA7A7FD06FFA9FD0CFF52847D7D7D %FFA87DA8A884A87DA8A8FD06FFA8FD04FFCFA8A8A7A8A8A8A7A8A7A87DFD %07A87EFD07A883FD07A87DFD07A87EA87EA8A7A8A8A883A8A8A8A7A8A7A7 %7DA8A7A87EA87EFD07A8A7A8A7FD05A87DA8A1FD05A87EA87EA8A8FFA8FF %A8FFA8FFA8A87DA87DA8A8FFFD06A87DA8FD05FFA87DA8FF7DA77DA8FD06 %7D52FD057D527D7DA87D7D52A8527D7DA852A8527D7DA7527D597D527D7D %7EFD047D5252527D7DA8FD077DA87E52527D7D7D7E7E7D7D52FD077D527D %7DA8FD047D527E7D7E527E527D52A8A8A87DA884A87EFD07A87EA8A8A884 %FD04A8FD05FFA87DAFFFFFA8A77D837D7D7D837C7D527D7D7D7C7D7CFD0D %7D7C837D7D7C7D7C7D7C7D7D7D537E7D7D527D7D837D837D837D7D7C7D7C %7D7C7D527D7D7E537E7D7D53837D7D7D837C7D587D7D7D767D527D52FD05 %7D537D7DA87DA87DA87DA87EA87DA87DA87DA87EA87DA87DA87DA8FD05FF %A8A8A8FF7EA883A8FD067D7CA8FD047D527D7DA87D7E53A853847DA87DA8 %527D7DA87DA87D7D527D7DA87D7D7DA8527D537D7DA87D7D7DA8A17D7DA8 %A859FD047DA8A87D7E527D83FD087DA8FD047D52A27DA853A8537D53FD18 %A8FD05FFA97DAFFFFFA8A77D837D7D7D837D7D527D7D7D7CFD0C7D837D7D %7DA7FD067D7CFD047D7E7D7D527D7D837D837D837DA77D7D7DA17D7D527D %7D7E7D7E7D7D53837D7D7D837C7D587D7D7D7C7D527D767EFD047D537D7D %A884A87DA87EA8A8A884A87DA87EA8A8A884A87DA87DA8FD05FFA87DA8FF %7DA883A8FD097D7E7D7D527D7DA87D7E59A852A87DA852A8527D7DA87D7E %527D527D7DA87D7D7DA85252527D84A87D7D83FD047DA8FD067DA87E7D84 %53FD0A7DA8FD047D597E7DA8597E527D7DFD05A87EA8A8A87DA8A8A87EA8 %A8A87DA8A8A87EA8A8FD05FFA87DFFFFFFA8A77D7D7D837D7D7C7D767D7C %7D7C7D7CFD087D83FD057D837C7D7D7D7C7D7CFD077D527D7CA77D7D7D83 %7D7D7C7D7D7D767D527D7D7EFD047D537D7D837D7D587D7C7D7D7D7C7D52 %7D76FD057D527D7DA87DA87DA87DA8A8A87DA87DA87DA8A8A87DA87DA87D %A8FD05FFA87DA8FF7DA8A7A87D84FD057D7E7DA87D7D52A17DA87D847DA8 %52A87DA852A8527D7DA87DA87D7D527D7DA87D7D7DA85252537DA8A87D7D %83847D7D7DA8FD067DA8847DA8537D7DA8FD077DA8FD057D7E7DA87D8452 %7D7DFD18A8FD05FFA87DFFFFFFA8A87D837D837D7D7C7D7CFD067D7EFD07 %7D83FD057D83FD097D7EFD047D537D7DA77D7D7DA77D7D7C7D7D7D7C7D76 %7D7D7EFD047D53837D837D7D587D7CFD057D52FD077D537D7DA87EA8A8A8 %7EA8A8A87EA8A8A87EA8A8A87EA8A8A87DA8FD05FFA87DA8FF7DA883A8FD %067D7C7EFD047D527D7DA87D7D52A8537D7DA859A8527D7DA77DA87D7D52 %7D7D7E7D7D7D7E5253537D7DA87D7D7DA87D7D7DA8A852FD047DA8A87D7E %527D83FD087DA8FD047D52A27DA852A8527D53A8A8A87EFD07A87EFD07A8 %7EFD04A8FD05FFA87DA9FFFFA8A77D837D7D7D837C7D527D7D7D7CFD0F7D %7C83FD067D7CFD047D7E7D7D527D7D837D837D83FD067D7C7D527D7D7E7D %7E7D7D53837D7D7D837C7D587D7D7D767D527D52FD057D537D7DA884A87D %A884A8A8A884A87DA884A8A8A884A87DA87EA8FD05FFA87DA8FF7DA883A8 %FD067D7CA8FD047D527D7DA87D7E53A853847DA87DA8527D7DA87DA87D7D %527D7DA87D7D7DA8527D537D7DA87D7D7DA8A17D7DA8A8FD057DA8A87D7E %527D83FD087DA8FD047D52A87DA853A8537D53FD18A8FD05FFA87DFFFFFF %A8A77DA77D7D7D837D7D52FD107D837D7D7DA7FD067D7CFD047D7E7D7D52 %7D7D837D837D837DA77D7D7DA17D7D527D7D7E7D7E7D7D53A77D7D7D837D %7D7C7D7D7D7C7D767D767EFD047D537D7DA8A8A87EFD07A87EFD07A87EA8 %A8A8FD05FFA87DA8FF7DA883A8FD097D7E7D7D527D7DA87D7E59A852A87D %A852A8527D7DA87D84537D527D7DA87D7D7DA85252537D84A87D7D83FD04 %7DA8FD067DA87E7D8453FD0A7DA8FD047D597E7DA8597E527D7DFD05A87E %A8A8A87EA8A8A87EA8A8A87EA8A8A87EA8A8FD05FFA87DFFFFFFA8A87D7D %7D837D7D7C7D767D7C7D7D7D7CFD087D83FD057D837C7D7D7D7CFD097D52 %7D7DA77D7D7DA77D7D7C7D7D7D767D767D7D7EFD047D53837D837D7D587D %7C7D7D7D7C7D527D77FD057D527D7DA87DA884A87DA8A8A87DA884A87DA8 %A8A87DA884A87DA8FD05FFA8A8A8FF7DA8A7A87D83FD077DA87D7D527D7D %A87D7E59A852A87DA852A8527D7DA87DA8527D527D7DA87D7D7DA8525353 %7D83A87D7D83837D7D7DA8FD067DA87E7D84537D7D83FD077DA8FD057D7E %7DA8537E527D7DFD09A884FD07A884FD06A8FD05FFA87DFFFFFFA8A87D83 %7D837D7D7C7D7CFD067D7EFD077D83FD057D83FD097D7EFD047D537D7DA7 %7D7D7DA77D7D7CA17D7D7C7D767D7D7EFD047D53837D837D7D587D7CFD05 %7D52FD077D537D7DA87EA8A8A87EA8A8A87EA8A8A87EA8A8A87EA8A8A87D %A8FD05FFA87DA8FF7DA883A8FD067D52FD057D527D7DA87D7D52A8527D7D %A852A8527D7DA77DA87D7D527D7D7E7D7D7D7E5252537D7DA87D7D7D847D %7D7DA8A852527D7D7DA87E7D7D52FD077D597D7DA8FD047D527E7DA8527E %527D52A8A8A884FD07A884FD07A884FD04A8FD05FFA859A8FFFFA8A87DA8 %7D837DA8FD097D7E7D7E7D7D7D7E7D837D837D7D7DA7FD077DA17D7D7D7E %7D7D7D7E7DA77DA87DA77DA77D7D7DA87D7D7CA87D7E7DA87D7D7DA87D83 %7DA77D7D7DA77D7D7DA17D7D7D7E7D7D7D7E7D7D7DA87DA87DA87DA87EA8 %7DA87DA87DA87EA87DA87DA87DA8FD05FF7D52A8FF7D84FD48A87EA8A8A8 %7EA8A8A87EA8A8A884A8A8A87EA8A8A87EA8A8A87DA884A884A884A87DA8 %84A884A884A87DA884A8A8FD05FFA852A8FFFFFFA87DA884A87DA884A87D %A884A87DA8A8A87DA884A87DA8A8A87DA884A87DA8A8A87DA884A87DA8A8 %A87DA884A87DA884A87DA884A87DA8A8A87DA884A87DA884A87DA884A87D %FFA8AFA8FFA8A9A8FFA8AFA8FFA8A9A8FFA8AFA8FFA8A9A8FFA8AFA8FFA8 %FFA8FFA8AFA8AFA8A9A8FFA8AFA8FFA8FD06FFA8A8A8FFFFFFA8A87DA87E %A87DA8A8A87DA87EA87DA8A8A87DA87EA87DA8A8A87DA87EA87DA87EA87D %A87EA87DA87EA87DA87EA87EA87EA87DA87EA87EA87EA87DA87EA8A8A87E %A87DA87EA8A8FD0EFF853D8B3D613D856161613D618561613D3D618B6185 %858B1B3D858B6161613D3DFD05FFA87DA8FD04FFA8A8A8FFA8A8A8FFA8A8 %A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8AFA8FFA8A8A8FFA8A9A8FF %A8A8A8AFA8A9A8FFA8A8A8FFA8AFA8FFA8A8A8FFA8FFA8FFA8A8A8FFA8FD %0FFF856160616085363D6061608585856061606160858561608585856061 %606160AFAFFD04FFA884A8FD06FF611B613D3D613D61613D851B1B611B3D %3D613D3D3DFD04611B853D3D3D613D61613D6161613D1B61613D618BFD25 %FF8B616161858567618B618B618B6161618B3D8B858B618B618B61613D8B %618BFD07FFA8FD07FFA9AFA9AFA9AFA9AFA9AFA9AF85AFA9AFA9AF85AFA9 %FFA9AFA9AFA9AF85AFA9AFA9AFA9AFA9AFA9AFA9AFA9FFA9FD25FF856160 %613D6160613D853C8BFD19FFFD05A8FFA8FD15FF7DA87DFFA8A8A8FFFD05 %A8FF7DA8A8A87DA8A8FFA8A87EA8A8A87EA87DFD04A8AF7DFD0AA8FD11FF %AFFFA9AFAFAF85AFAFAFA9FD1AFFA8A8A8FFA8A8A8FD13FFFD06A87DFD05 %A87DA8A8A87EFD07A87DA87DA87DA87EA87DFFA8FF84A8A8A87DFF7EA8A8 %FFA8A8A8FD38FFA8FD17FF7DFFA8A9A8A8A8FFA8FFA8AFA8A8A8FFAFFFFD %06A87DA8A8FFA8A8FFFFFFA8A8FFA8A8FFFFA8AFA8FFA8FFA8A8A8FFA8A8 %A8FFA8FFA8FFA8A8A8FFA8FFA8A8A8FFA8FFA8FD1DFFA859A87DA8A8A87D %FD14FFA8A8A87DA87DA884FD05A87DA87DAFA8A87DFFA8A87DFD06A8FFFD %07A8FFA8A87DA884A8A8A87DFFA8A87DA9FD06A87DFD05A87DFD06A8FD1C %FFA8FFA8A8A8FFFFA8A8FD3DFFAF8B85AFA98B858B858B61AF85AF85AF85 %AF85AF85AF85AF858BA9FD1FFFA87DA87DA87DA97DA8FD3DFFAF3C613C85 %3C85363D603D6085603D60853C3D366160613C613CAFFD1FFFA8FFA8A8FD %7CFFA884A87DFDA2FFA8FF7DA8FFFF7DFD06A8A9AFAF85AF85AF85AF85AF %858B85AF618B85AF85AF856185AF858B85AF858B85AF85AF85AF85AFA98B %85AF85AF858B858BA9FD38FFAFFFA9FFFFFFA9FFAF7D525352FFFD04A87D %A87D847EAF60613661616160613C61363D603D146160853C613C6184853C %1B60613C616061601B3C856085608560853C613C3D3685AFFD2CFFA8A87E %A87D7EA8FF7DA8A87DA8A8A8847D8484A87D847DA87DA87DA87D847D847D %84FD5FFF597D7D7D59A8FFA8A8A953847D84597D5984597E597D7D7E7E7E %597E5984597D59FD5FFFA884A87D7DA8FFA8A8847D847E7D847D845A847D %7E7D847D8459847D7D7D7E7D84AFFFFD04A87D7EA8AFA8A8FD53FFFD057D %A8FFA8A8A853847D84597E5984597E597D59847E7D5984597E597E59FFA8 %A87EA8A8FFA8A8A8FFA8FD09FFA8FD49FFFD06A8FFA8A8847D84847E847D %845A847D847DA87D8459847E7E7D847D84FFFFA8AFA8A8A8FFA8FFA8FFFD %09A8FFA8A8A8FFA8A8A8FFA8A8A8A9FD3DFF7D7D7D847DA8FFA9A8A953A8 %7D847D7E7D8459847D7D7D847E7D7D847D7E597E7EFFA87D7DA87DFD04A8 %FD047DA87DA87DA87DA8A8A87D7D7DA87D847DA87D84A8FD07FFA8FFFFFF %A8FD30FFFD04A87D7DA8FF7DA8847D7E84847E7D847E7E7D847D847D847D %7E7D7E7D7E7D84FFFF7DAFA8A87DA87DA87EA8A8A87DA87DFFA8A87EA87D %A87DA87DA87DA8A8A87DFFA8FFA9A87DA8A8A87EA884A8FD31FF537D7D7D %52A8FFA8A8A953847D847D7D59847D7D597D7D7E7E7D7D7E59847D7D7DFF %FFFFA8FFA8FFA8FFA8FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFA8FF %FFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FD30FFFD04A87DA8A8FF84A8847D7E %8484847D845A7E7D847D847D847D7E7D7E7D7E7D84FD5FFF52FD047DA8FF %A8A8A953A87DA87D7E7D847D7E7D7E7D847E7E7D847DA87D847EFD6CFFA8 %FD07FFA8FD07FFA8FD6DFFA87DA87DFD05FFA8A8FD06FFA8A8FD73FF85AF %A9AF85AF85AF85AF85AF85AFA9AF61AFA9AF85AFA9AFA9AF85AF85AFAFAF %85AFA9AF85AFA98B85AFAFAF858B85AF85AF85AF85AF858BA9FD47FF6160 %85616160613D613C613D613C61613D6061613D6085618560618585608B61 %6160853D3D3C613D61608B613D3661613D60853D8560613D85FD47FF8561 %85618585618B85853D613D61858B6185613DA985613D618B856185853D85 %858B3D616161858B3DAFFD56FFAF60616085608560858585608560858485 %6061368560856085608560853C85603D6061608560858485608584AF8585 %84AF858584858585A9FD48FF8585618B6185618B618B6161858B85673D61 %858B8561618B613D618B85AF858B618B6161858B858B85FD05613D8B6161 %618B3D613DFD49FF613D616085616114853D3D3C85613D84616161363D3D %61608B3D3D3C613D613C613D61AFFD5CFFA9AFAFFFA9FFAFAFAFFFAFFFA9 %FFAFFFA9AFAFAFA9AFAFFFFD04AFA9AFAFFFA9AFA9FDB7FFFF %%EndData endstream endobj 76 0 obj<>stream %AI12_CompressedDataxœì½{e7Ž'ø¿üwÿh <;ytô®],‘žšv• eWO÷6F83lçTF¦']íýôË%R«xÜÈìißîʸ¼:$EQIQ:÷üé›ßž¿|ûýÕoíÙvxôÅßýÝ“wW—Þ¾ûÝÁ‡ß¿~ýñý‡wýæÏ_Ì~¶¡ÕùïÓwµå?^½{ÿêí›ßñog¿>Çó¿9ûòð›/ñõÛW^_àçøÝÛë;»|õ¥¢Ÿ^~ Óc“ïÛ–fûχó? ÍÅÛo^¾zóãÅÛ~ú-bŠo~þ/¯þ|õ~jsf‹hxöHÙۂ¥'üÙæ÷=}ûâãõÕ›z÷öÅÕû÷OÞ¾~ûîýïO~¹|søÃåôËå៯^¿~û·ÃÅëËíŸyþöÍj{þîÕåë?|‹_þÏòå·¿ÿpùúÕ =yûñÝ««w¼úÛŸ¾YÁ~{ñöõËòƒ þãÕÕË«—ŸŸÀùïýwÏ_½¾¢Q¹¾üpH<‚ç¿7ûw_½~ùÇ×ß_Ñxí›g¸ýŽò—÷$  þfxüî÷×úæêÃ’6±ÈŠðäÿüOHCÞ^sKúùÍ¿üùêÇW¬:4ÈÿýKiÜ ½´Þèó›¿ýöûËׇ§WW?¾¹º$Á¼ú²ôj;KÔÂt­þþÝÕÕ›úky¾ýö§ï®x(åééYþ½Œ®¶0C‹?_½lÏžùá·oþçÇË÷?}YõíÕõϯI}YõlÔØnÿÛþ–¦4Ü,™m3‡x–sN‰Ôm„Íž%‚ÕöMG¯þõÕÕß~wøãÛ7Wu0Ïß}øæÕÿGƒó~f¯à?|}õî/o^A} ,—¡üÃÛ—W¯Æ?}É#¨Ò©ÿ[[|{ùîÇ«4·Þ¾þøçvÚä7R—¯.¹z×ùúç«7ß¾ýGfó·™fg0š«Éš–˜˜}3B«HÜTœ@€ÇqŒÿŸHÛ¾~÷êÇWo~'¬ÅïþþÝ«—Mã~Hå1Eÿ?ËÿW.©Ï>\ÁN‰ú?ùC§ÌÛÙ¾Õgo^>y{ Ñ¿g DJü†töõÛë¯í ÿF(>þüè‹yô…ÍÿçÇ·®ÞÆ×W‡ÿøîò_¯Héñ³ïތݺß_¾¿zü Ï«7úòû#Ý|õóûWDþñË˼zWÿ¡ß¿xõŽôâ‡×Wÿöøç«w~zûñýå›—¿yqùîí›Ç?Ò|fܯ¯~øðøëgã|Á áã¿I¤?}P’ÜT¾”Ÿ¾ÿHЯ޼$]|uÍÿ| Sqõ˜¦óË«ëËwd¿Ÿˆ–‡ß^=~ù–ìýû÷¯ÆçÇÿü’,õøýáñûŸ/_8‚{üâã»wWo^üB_Âãïß½ýëÕ›ï/É̘KûÇ/ÞþüKÅùîåWׯ޼zCÇý1ÉÿÕ‹Ë×oÞ~xüÓ/?ÿtõæñ;¶5ôàËÇ×—/À‰•éñÏ´|Ñ“ß?þð··ï?’Ð^½}÷øÃOdAôÛå‹®_„Ê>fØË4þŒíÅÕËW¯__&šú1t}ùþÅÇ×ÌQJø‘,Ã;zþtùú‡B£ßLÞŸ³>ªóBñ¼Íó"ßsíý9:ðøüÙã'•…ÇÏøñÇÏøaÂò¬{ü™>÷ûÒê÷…Äï»6¿×6Ï>üôøLÐ|]øº<ðu÷À×…§¯õ¹ë¯?¼úùõ/¿~ÿ:ñéÐ_ÊÃéþ‹>õÏåÇozûŽ´åŠ¡7¤jï_—ҟËîéËBúR‘\²8.¯¿q\•ǯ ö«ö0¡ºÒç^•V¯J«W‰WÚæŠÄñ¦|[š¿žÞv¼­Mô¹—¯þõEË£ ¥?õ™_ÊÏX¿øÑß>+¶Ðÿ×ï¾}O–¿3øö;64ÏÞ¼x ?çw‡ïªsМ„y,°Çò[±íßþ¿Ù-yþðí»WßþòóÕ©Õ9òG„¼‚O|VfFÏçÈ"fFÐãé7fªËµvÃ&¶*üñêùû2X˜ùޏûÍŽlðþø3ÿ–¾ûÓëôãß¿{ûñçß¿ùáí£/~Sú?]~ø‰¼+2îïÉ?/°òõP!èW¯þU€ä­ÿüå(¿}GS—¸ûúûÿqõâ=_í¯o>¾úpuTÂýîÍ×o ›ï>¾ÿéðíÛ·¯•ÕÚ þ¤“OSžùÕÑÆ+ôã¯ù“Kr@ȘýüÓ«+ü‹ß•Ð ÏÞ‡,ù0úŠâø“;~â×A‚þáÕ›—ô+~“ÜÛ럭¾ùéòg€Ñòy×ò>ü?½ú¹nlúìÍ¿^½~ûóUƒ+„–Ûû|÷ó½„óËõ÷o_¿zÝdÒAôïû "û]Ç¥À¿÷š¥¯/ß\¾;ðÊ [¦?]’µ›¬ÃZ³Ù[Æßþöv›oúÿ¾Ç›¿;ü† áÕË߉Ä÷5È\ÇÃÅKþïG_<þüžÒç }.èsNŸLŸDŸHŸ@OGKŸ>†>>ü8þ{JŸ'¾xöäÙÎé“é“èùèãéãøcé³ÓÇðg{¶=e&€æ)þ{Ÿ‹G_<½ Ï9}2}"<},vþþlO·'Ü­'ÏøÃ(}Aÿ[þ»àÏ9rý$þÄú õãëÇÕ­ŸˆM÷ÙúÏÅóòyôÅÿÃRO[2i§M.ùRL)åtž.ˆôSØó¼eòóÍ.ûr̸Ïó1!<ËÏÏ·ss¾ŸÛswN‘ûy8ç„à<ŸŸŸ_Pwž’øŸ_lô1û…½pþ"Ð'^¤‹|q~ÿž`Ÿ]#mzBZ}N³‹x$È92I;™¦FûéÜÒýsšƒ‰lB sæÈ¬ídÞ6Òˆg¤—Oh~œÓWëÜÛçb¡Å>šuÁVz´Ñb¥ÕF³…~:Yè¥}Æ`vöY¬s±ÍOŠ]®VÙªENÕK,V˜$Ùçõó¬~Š$Þ ›2Ë&ÑfþÀ@Gþþxþ [d/¬e•€RàÃÃSÀr*~ÕV“ V•s–%*¥ ¬8P(aÜËjÄŠô¼x{U çÞÿ‡µüßÑZZð/ìÀ¿ ‹Ù¯ú÷†¾Æ|F¤FǦ—&›@¬¿˜³˜;Ohýky=ÞCù…œ$š?®{nõk}.%šåïÎH¾nñku½<&Hù…\:O¾Uïy-~-ϹLúãË/{`ƺçV¿–ç6GãX1’Es¿÷ôV¿v’ßf™ŸìHýåÍ›Ëë«—‡+è-¼©˜»Î¥âHö®Ïñvø¸ö!Œ^?¡~¢~J¨ë‡ƒ }—}‡“?+y NÚ‘r³ñ5œÓØ9¢w5³á9âlŒ‡Cçl’%ý”3ÏÙ8óÌùŽG_87d¦T0Ö]ì1C-†;×H5Ý´\mË~ø„îˇ0Æ.Ëú9×ÏEý´]¤§õó¬äÂÊG¥éajn¬|lÍ‘9^Ä}Í••|Yä%=ñ²ž9ÿrΙ˜‹º{Å4ˆLMI—\šhwÓ㦷¢¯MWEOEGiÜ¡£¥{ü÷ïŽñvM¹×‡0>ìÉý¦Ï‘nžò9ÖcúFþß2J5_÷©Ÿçò!ŒÏÇÏ ÌÝmW«=%­:²«U3gËÚÛÖØ%còhc £ØÙfkÅÚŠ½ílný˜ÎîŠí­Ö—¬²«¹Ö VX,qª¹ÙsµÇ5ûT­ò³’ç­†¦4YeêdÉ5'ö.gê4WJu åc[.vÌö,lËÁŽXÍ¿êü?uÜ1W VÍUgªÓ©–<5gª5K=å©gùÞéß™]br—opе?Ò{äÛoîGË·Swúœ{j9w—Þ<ܶÜd¡kX(Þ±g‘ë,‰‹ _½«{;žÝFÝÃà]Œa<9WêM&õ̤€¼&Ž;g É/7GÀ}×ì)”Lç™1>ÒÏäào9O8úäM7¤w·-8÷ˆ3[ŠÿlÞ2'[(´wœr½»¿öÕ‘Oè¹Z–ûE>=O‚—~…èLïÚß«ý'»åní–»Ù-¯.ÌêsÑ}ZyN-—§¶ð°£¿/\äê,-û0â‚× Ô\Hœïêx«ÛmJAd:æ IRG»ÏÜ#¹‡v?Wdr„ ãÊ žàÎý]ßÑí%‡—0ŠÓûlpz{‡·¹»½³;:ºY4‚4¦stEÔíh#ß»¸Ý¨ÿJ\ØO‡óÆ1ÿ$‡“Ÿ¯NE¼×g±O¦ŸÜ¸ …37Ù€Þ ô–`´¬ÍU]º¥«ðþØùÏZ ¶ ëÏou6Ëöüß×ÝÛ7î±æÎî_ïÎ.ཷâ«U—îÁîàŽá8—îáìÎŽaïNõÎÔPºÀk.Ìãó©ùÙ9;‹Œ~ÍÏ>(;{ìˆÒ*rGvV´Þ5[“t¥$3v\HRå?¹¶+=Ô9t›{ÛÆäiµê‹¢’ÙÅm©še|êgrš?ƒÛ¼´²“e/}a±ï­%Ë<¦ç<®¹V(på'ûœ³Cž¬Jñ©w¶)ølZjÔŠŒš³~syQÕö}nÕ‰c·Üí‰ýÕ`{¯9¿{_¹å÷h\Ýòêgo™~ ‰œcOÞ¶=£¹Ð{η6»3îö3c‡ê…ûµ/¸ƒw†ýiÇÝ1üÍîÞÝäßóÝñÿöÓ«Wÿ¹Ü+?|øNòÙÿ£Ôàóͳ{”œ²¥öé;½ŠþLàË׳æ …8ÿ¡Àÿ¡À÷PàÛÕónõ¾EO<úÕÎõÖsŸ¤ó¸fâðöÍÿBÙ‡ï°ý9¥ò­aûVÿAáï¾û(µi¥,ïŸ~)ßÿ+ýý?ú·ƒ;üáð/ÿ};¼|ø?ý™û? ½î@óá+ÀFj¬6ÿêƒÞ.¾®ûÁ{tžnò‡qyÃFö_K»?‹ÐÑ‘¨kâáo· g%Ž=«Îœ%k*[ÆŸÑDð#pG™àÖœÙ8ù_*›ùÖŒÀ‰6þÇÿ0‘͘¨­\1p¤ÀO¢h±ƒ1z†):3+oåipmGØLyâiUaƒL\<Ãd>–Ìè (2ñûÙžGÐD¹±Äªb'1-ô'ijã(&%Þ‹iàHDö³Hž×›)7ž* &éÃͪ/ú4…“œÌ\˜ôiN´õ cãã-ƒ' u¬åÔI MJ3°g jÔ›iiÔ ª ¤"5e¨Q p` hÔ1OûBP2®ƒ ªF 2•Zjù ¨%OU§ØL»q%:*šp}ã”^N~Qµ;Lª€ÐÚõjÖQnvleÛ–heE{}º¿˜žDŸîë <­ Ö÷ÕªÅxg†þÙ}ÿǶÅälqÂÌîÖÒȬ¬Ñ¶l2èý…§m§h"³h gTb/⮜™…eY ½¦}ÉÉ=¥3Íaf(Ù3ŠŽÇ$–”dcrØp©ÍâàÀžsTX™çýõŽÁ`¶nv”g[òÃjF_ß¹ºÔnõ6©!ÍV_õálUáÑ0£ D5¬¼ííæ¥v¹& 7‰¨#ÓëôôÌ”?þºZD!­¼Úíæuv¹ Wv,ÍÇʪªAŠáX:~Ë©Îä…‹»4í«5`»Ûe=mlÜìë LÜè§îKNî'–ÉlöSøØÏ›¤r£?¸ÍiJÌLØI‰ãŽy »9Bép~‚2l-§å2vk4pÌÖ_}Qn£ãËÇjRäÑ2Oò͇Ëwï~9|ó×_ÊÉ9ý†›x ãwKd Ìo@%­ „±mûÐDÉ„ùº v‰è_­ð2pLšdÞo2;VbR,U\¯³Ù¼ïu¶Ïø¯oÄÿø®ª”i¾m˜ò+Ti(O*¶ oÐÑÍBmÏ6seŽÙ£!»çÝ™‰[>¼.¶†´#ÚD`ú}O¾‚É¥D¸ ©–W(¶vlB·i^˜:È4»ü?³Ñ´ÙD#­‰¤‘w“©R$ƒš]°èXŠõq¤Ê c{r²ÐÄpUi¨ß‡v¨a4!iWÍÜ!QÃmo21¤s$úÝíœûÓi4!NЋɠMê†T®A9¢Wm¤NeUÂx8Q7ZÒ<õÑV‚™ZîéíFk¾‘¶ä®ð8ñ ØseƒÜ‚”\bæé‘Ý3]²F6ÉBo gVR’lÐnºXÞ-€i'§µ'ÐMšÎÚûMäG–gÛCc‘œiË ù®Ca7 yó®u?°ÞÀ ²®‰Š—ð±Û&Ö±½!'³¹`Lá+^‹ÏÆË{®Š\ Ò`Ä7<ìÔí£¹LFû Ê“„&VŒ{‚×샧žÓ¸g„’êˆ?Im›Ý³™¤Ÿ¡Mª d³ÙS‚˜LjMQ‘{Èðé6m;u­ï5"’ +ܵ<1à„Æéô`­Ã€g_v¨´™‚YøcÝúµ#z¦…†úç¬,¤ÉrÃ-4Á4ö†›}­ÜuÕ h}s­É§Á&Yld.›ØØY%YôÉÔµÎIÁBI+,2)kÍ#˜àn•k™ÇÊÔ‰¤–<ÎdÆÈ¯¨=†1Ä0cI˲`Ã_pÙ! B®ªQO‹™Z²j‰;’I´´r°æ3ÌmeˆÛ%mÈ#°’‹6Ì꺚ŠÈ³cs]›#‘I—_Z(2Žñ#2‹Éh¯xp©ÿ»}"¡ðØR¯8š¡°¤ÈÁ£ð<Ùiß/éÔRñmI†ÛaDÀl’ð–xça%â6¯À¡C­«äUÙ”[ÂÏÛjdááqD˜qm@í,Å˯*2Cu«Âÿ1Ô kdYñ®,–ˆpã.³¨Ñ"8.MF\øUŒÚlÖõÎÛ}g¼N­¼-pF1«ð@òóð@ ʼ^ö­ëv.“ÚÀï²[]¤é\&ñf ¨…“hKÃiµƒÅT‚O?ž/Ë©¡6NÔÛ*8¸Â¶±gxÅ#Fìõ$x_´¤z ËhDÀ¡_ôoT/ï¨gc§=ñOÚ(Ò£Láü`žŠÒ¹ìh²’~²Ç(¬9xà[" xå¤*¸¬*PH«<°ÛA:…¸:!sÃæ:b’b4 ¥ Qbp[¢âÈíÀ²-! Æ,t*€©Cãi8A³&Áw»®­Ù„¯edbÈ9 €ŸÛ©Ó}c‹´†xâ>±¼¤a‘ÓÞå xvØr—CAüÃ͇뽉sl Úع„dI)”äF§êÔÖOI=#åKó ¸’û­éq(›à,dÎ:èÖ”È+*õZBÜX’€¶%.àŠO°%Ó làkE'2²XÚmñ*¢¬4IP­y_bö4’ÚCòòÈÞ0Q—‹|¦%V7磞 RA"¼92·Húh±Ð°;ìé!vmYq8¾zÈU&¤ÊÛVân³c‹—H‹Í®òc“Ë©,kHÖdâ C£¸=ˆ|‚)âã _:굆\©ÑéSĉ¨ˆ8iqòq{ ÝsG8cÉ3Jdvq–€‘nrÑ¢Œ´;­ÍgIÈ5H꬧P 0pŸ¯‘­"Ì–=³wÔ]9”dìcªÇ“}!DV•F@¬ ,HaiÛtpeíÆ}Lj"Á[Y‡j®kkŽÐ8O.±vù6|7Ý" éšÓ‘!f]Àæ±nÛ¦\ê‘=%I†e$)lèkE†WWðíÉF N, ÈXQQ!*‚£ ûÜ£ÖW¸·ØsÅRj$§ÝV󎤅•<o”%Sí˜$ðá2$Íb»oƒÍ•oI(N ñ¾ý.XISK$â\IèÆ[¼}.ÓŸ[î}±%â˳Ú²Gýj]v°îˆH 5+§ØB²Z×@+7 04Ò@¢Ø¬ª{ÙÊ-n‚JYÑZ«@+ƒÄ/È{¥Rï ©$”›1Ì*1p¿±ù(/£M<œ)AvY¼£žµNcæ#o@‹ !ßÄÊ¡ä ±Ã0?Åà#3ÈÕ äšdÝÕ’Í>È”â#1\n—TB\u»cMÕÃGÝ3êC ê¥ŠB í)ªKÔCF( Øë6\.Ù+€ƒË©L]ìzø‰—;lÚëf° 5`ÆæN²]Ä`pé¦ $rcºîs(„²;MF#9ˆ °)›mÊ#\ ÎOakz³Ç²ŸÓêÂær <Ø›ö²YF%õ…TMÛ€´xŸ% a¦«÷Üɾÿ4G(®G¼„hG¼è€œ0O+ñ@°qC£†øN’ä‹à dJh…Ð`ƒ&RO}ê†näêÒkiÐîÊÁ¦`µ±¸Gê&qG¬ œvƸæM“xãƒ- Ò¦¾´^î¶ÔÈrr]›³y!Ù‰5Žì°ðVwËá¨6’²5]XÀþΡ¹>z„oÀ[â]”‡ q©õ®u*¦zŸH»m®™QÎÅ#'ŸdÕƒD°èLÌ:ÁH‰¦*Gˆ¥¸lâEˆ5¹È‚(ïci^Ë 0 ŒèÀÓRdæ‹sï‰;ÄïØ9‘­m«"–@±t Æ Ì1•} ÇÕ+@EÖzm¸3Mß×ö̽9ÅÁK¾xC ŒëŠ(„ÊjàbM!¬«dDô‹ò[[þÄÖ ²©åpC@¯S© Æ9U÷CjÈpõ"Š [õPÉÔ ))躑͹C§D6…°Æ$Ôü´StpU°ÞGÌ{ñÙ“¬×(Bðͤ¢/0Õ{–µÜŽ-!ùæp·™±QÌàòâ¬^*yÑ c‘^ýx„Ô pM^›l®˜»®¶õ6l›µ;î ƒŸßOU8ÀâÄ ”ÐZÝvvEýLÄŒ—lÇÎ-(ÑØ\‹ë6W 2ɰ´ÈšÓlØvÙ¤^‹¼· rFKDˆR 61˲LyÔ®°OÌI Ûʲ\Q‹²ÞïMŒœÒ"wË[W¿2öí!zƒp ©µQm`Û›ÎV­Ù{OW•&uûÔ¢3;o¹YeP»ý¤2;´ªª1ùlkûÜU_`g} V«ºì¹7äs¿N1,*QxK¶e쪲Xä5~©ÊB6ßën\Õ²òº©¦Ø®.²j l@˜ôd›Ä•"ÕY?ÎF¡±~ ²Ü[ÁêÔ™S´#  "cƒ¼«¶¥ô(™®NØqHõ ]•ð^J!ë¬J@‹) ]pÝ3X½ˆ Ї´Få ØðCÑŽnM£ ãÚßXÞu `6m]yðN ¹•ÉôµÁSwNÑ ì]ëŸbW8ʾFÚ»²aZ#¸j)§®h˜VXšÆ1u%à +±†ÊZÍÓ’*8Ò÷hº¹’YÖiƒZ%la×¹ÈïÀ¡š€­TYÄ1^÷¦—Ã}«È±ÇäXyÊÛÇ¥§ä£¡øt¬=åMÛ£âS|Pû5ŸÂ!^TŸ¡—ŸòjwT ûXN ¨XãŽÖXzÔÃÎë&²«T,oÇE¨pß·Rþ6T¡z¿*CE-óTˆêÓ²/z:*EÅÚ°¨E5˜ÇŨ&î«jÔãþb4ìð[ÕHËÿrÖéxÕ“Ç[ `ÖqŽ{ [)=˜6A¦>>ÄÈø¼Šn‘CÎoo9õDôÆY.ÄÓC„ËJB’™"\Z=`¸û“é8ÆåœŒnä> 0F¹èù*ÌÍ7Źp.ÙM. ³O‘.ô¢B]úI(÷±.|w®#ƒ]èðëæU° ̓Ó2D»ìµc†p—…SO—vú7wì$'d+5í£‚ãkèöà†@ 8·:ú!¨[™ïVž.‡¦uðD°@pW-¤z_1 [¹Á‘À ¦É™úušI¼tþÈV«{‡&“5bôH…¹$F¢ýÁ'A ƒ¬É)ÙÊy±Þ+)SÝMn‰áò~›F¿*ÁyüÁ1™úu‚š8.ãT•¯8ånb$¦bÁÊÆ#&îV×…hd{ƒ4–†Á—Œ®ºŽïù+o›dö9äTP_Ž™¥ç,¹RÈÁ[‘X™·fŠm©,{œý%ÆÜ®,x¶„ M[hÄÆ®¢)Èf>݆|³ˆ…-`æS}Fu®Åâ2ÄMl8Õ$‚=ås5|âAÄêê‰.Þ®“²S"Uª#í¢SrÛàû Qàd=B†GôYÓÞËó°\ék:ôëU HcajŠé^¸ò…¾žËÃâ¶…’I&ûÞ”ãI@Eý± Å•‹Øš°Z¡çk¡êI£t*pò¼¤ÜE}B-oÖôLÆ&©bšªAö³B­ºã\€wÖØ³S4…=G8é¸)Ÿlk;‚êoÒ‘F¹$´?âÈ„)‘‘\®#•€¢T¯U±:æ‚¡ºú°}…þ¾ ¿Ïà†Ý¡E„CBâ†ãÓ䯻dýÅÇ=êÖC<‘ºÁ™uDd¼V“õ²Å²o½Ï¡[,(l;âÎöéÏn‡å¬KŸè‹¬»ì¯¤¾Ê_¶W|vI©ÕÝl«7wdêZçȶ‘s”º·‚³ÝÊQ·V(lº©;+¨Õ×óŒÝÆJï¹´}•r2@¹+Û*[²µ]•>Ô6Uh¢5ÿ¹î© ®i뜧¡k°¨qŒn2ØI¦ØÝ‘eO,ciùƒŽXêG»ŠM3›¡Ì»Ú ><› &Ò¬µX dˆZµíÔ¡‡Ø .Ia4œ¯“:j2PV,rFâb1{?âb/özœg²%RÌÅÞ—ô‹¹3¬ƒ¹€"Çî\ÜС& òªø¼. %*¥N¢ìbcmw^V̈L67±ŒµÂ"¢])Õ µoÐÁ¼<𮍀7¸EXK8zô/RÈzP-Ùªô˜Ç{h;5ìô1ÝæO¨ÞÊFvصŽpê× S纓/e…{?¥i¼ù Çé.1¼±Ms—(i÷ËÙ9T¼êkL¥”ݧˆXÚòªZJtpOªByRÙ£æªm©áÂ͸7©°Ú›r|³`4ÌB4Z_7wí”Y‘MI cpeÅ1%š†Ø©ÓãºØ‚wJÀÝJ–çµ’Á w=äŠj7ÌM> ©|¦8ÑuZ‚’X/+‰âîçºÇC_VŠ(Þ–$}”qcŽr+2»s‚‚Ý`È÷ØoWI˜Rä‰Ð#J„˜r™ŒxÕgV…Í5 å qÆRÄ]·ó颯4õMÑwNr‰ã„„=t çôµF;»R…Qc›$ öýbì‚™¹G§¨’W®¹ÒHZ4ÓCð¦[·Ž‹$ÃÖíabvâ€ί$±ðˆ‘Bô¾Tˆ¿®dxMC„¬™3äà ã£K ’AŽ·EuÆY#¿s“×êG®E!2ȑ葊¹7'¨¢ ö®Nþ v‚­L”JÅr›M;‚‚$=ù.n&LZ,÷µg­/‡ã’ GȃÿÞw¹-¤„`pqbLýTo¡èÓ÷{[¾R`™Ú$Ñ4wè­ÀIOœnp¦Ó Ôòed©Ó Nfóž¦ ÒC”`©Zà˜ b#T{©Z 0Wíã4„ª…l¨ vSÕg'"oi©ZÀ‹@²IJ™ ДxÞ¦N-æîœ ¸¨ÜÖ©Ü6$™r§²gè¶N-P´Šz0”S¶Cø5É€ã‹[×’k‘Tµ¨î¡µ}Ñw½%dm»É•Ä+ ÑT+ 2ìW"0V­˜ûsŠV˜Z5‹ ®¨¹®çzó\«ª3Ë;3R_ê!§"..ÑÖDV¹iÆÎhÂ*—ërp¹JVUÁQ4²‘ØÇÕcƒ¼£†Ó²±8ÚE$ŸQ±Ø×Ê#"͹;ÌxÔŸSô”Ä7o ¥­MìåårÉ‚Ž6ç_p‹ Êg7rêeê!$ßB[ü VØŠL•)·ºw¸–1ó³¹uwYxÇ' µ8”e–xlšÈºsŠ^¸½V=(ê‘€=yÜ|.¯ãMÅhÛÐí£ŽÖ Yß$eÀ…RFœºÍ-ººoˆÓ†êGÃóB%ŽÄ‰–ã2 Tƒ[ßyÌ'p7æÈ˜®âÑà@«í«Ýç «56äsÙ“Œ/жój°ƒ‡“¨(Õ¨‰&òÍùõÖƒGŒQøÞÕ^9±2kœÉA-@;aÉT™ŸÎ:—ÜŸÝÕ@Cf´¢Ÿºs’¹põ´?þàh®ë¶îâLCh5Œ57°/°0‚SQ¶îP žMåRÐ×µƒöüùVg»üBi[I vÈ·Îïâm¼â‘ïå0c‡rJ »9G}jb]ª·dlp%%Éê|W>!cõèZ,eÐ|Wˆ°Æ¨[è® qjpqjÊ6láIU2á–¯¡Çý½·‡¢{àÕ£¯^îéØbW'ëë– kZ%6víGÕȱŸÌ5:ׂÈá„O”­M„ߨãß° Û6ù¹µOm-Ô‰ƒ»Ë\çÁ倒•lТEŠ©|óûËæïÆyôæ÷—uÅ—·5ùaÒ ­ tîX/ƒÛnù…”&ËÍEyÊ„‚«Ã7ìÐ*FÓBŠƒbYCqr&Y=$DÚ^²À(œ5Z4å!¸z0ºí7ÚÊ*Ê7ºsv|AÞ&s¹Ÿ m[q=OºÈ™ÕÔUk±aãù[ÓÙ†ÏģğÀÙµjœ©‹§Ø8¬›/Õ2*>P„ì–Xê/ç‹PÕ;âÊê®— ±$1çù°ÐzPoóDU›€­ÔÜá í$YN?°ËÓIækÊht‚t¶ ¨wzÖé¨{§kÍ­Ð'È À‹œ7ùu)êÆuÜ^õ‘ggϪ­ÊØ×ÃÍ@¹?ºg«ŠJE½È î¼5lõ±/œº[Îx…$]CºÏ„E ™xŸšyœûsŠ'S+Ôù^"k“ÊÂ> ‘v×ÊÁÝÐë-X< …Ë®]ʱ»• Ë œŒÜ‹¬ûL&²ß›´â ]„k‚;˜¬héñi”:Ö?$ã1:’>;êÐÔ#²8cY¼ªDbÑlziüƒ€ÚjéK‡ÇpN£x/ÐŽà;[ƒùí½³‡v„zÅ™ŠÚêLѱÜCâk³¤!+¶²5žzs‚n€.Dr)ÊA°j ]”™r¹Bl. B B'00Já¿0ÈšÂx‘k¶šž×Ú~ì²éx˜eÐ –xlrdÍ©iåÔ›Óõ¹ü½Ü0|–²ÿ­{·{¿Išª›€ckNñ Íç.MwF•ð¸ç„¨ú¶‡ù† ‹zINïuëu§êæã8\ò ¬|Û³´¸5•ÙÚõ`†©uTwˆQžûu‚ŠD¹7Ù‹]œÛX ‚ŒU‘d>—ÆgQå"@.Mgâ!¼r ûÞDÂʨ 2ݱلDŸ^Ýä.ô“w1%5é•m€"ý&<¼îœÇ)vWÎŽ½z€“oŒVp½„Sv-@öQTßÔ»À)p¸(8úÚB¢-÷¥µ{:¶Xœ·o¥O8tj)öǦQòŒ •B¹,OÛ²‚ oÛ1hìcÍOðûÕ= ¶ìà ½r»vŠoO‹7_|–R \ÜǻǮ§pM°)áÚa†TÙL]íäÇ÷´ØqKõ–ñXÎåhØ-ÁY§;Ñè'< ·?C&ðJ¦ÈÅ-I%?ózÙ¯A&rÁúÆ‘ýA‹4N¿i€X/qµ¹ì¾·=þ­Üš´·êO®Ÿ!󋵸»;Å•m6Îíðbݺ䃫·F9ǪA /9\¸ƒ-Y‰Úi.¾ë¯á}q~Fê¶wѶfˆ÷¨ÜܱN*õÞuM!ðÆ;V¿] +?ÍL¥þ>W©²©ü«”ÊSˆDû¶œÊŽíB£r÷Læ|iW<çjñ"Ù]ž÷‰Ð¶>¸ XÛ‰7–6’Á€Ï®“kß±SÔ‚S¾Í›2Wx—˜¯žˆzÑ&J¹v‹¯_–b^‚\)»K É°–(Ñî ‚øÞh´lëÇVö*вP·©^ú‡õ… OÏ4´õŽhAl«ÀØ«tôùæjÇ'è®åiäàN» ÷pœàËYeò…¤®«Q†…Zc¾ d³m¹a³¨º‘¡^„þ{ °Vsµ7èÙmœU´zŸËÊTbjkíØ¯“,E*=žmI\S\$ÊWiÀ ´ ¡\°^Ž}ikå?n-ƒ\I*w`ìí,XªwÈïÝá|‹*•v¸æJ,àv1Þɶýéá\î¼äÙ©µü¦Úež‰›mð±k7Ù $RùÚ œï ^w'J¥–ë*µÂÇz >…¶•¥ÇáðJU•ßÌuC›Z5\€JÝ­N¡œv†6-€Ã _« êpá6qÅ«Þ!‹«Þ’’o‚»vŠjà€§`NìrSš-õV¨ë³šÁ]ïƒïÝhÉÀâ0‚#‚›â¸ ,`›R‚mìÙñí(·$ZwÀùüJóÄ]½— ¸n/œ/F«‡H vm[npô8ŸÓ.ß{vƒf€|©Ö e—›O·=B혜­uÁ|†"¦N[•V»ƒÚÖs||F_ïÐÇ•¨|%MèuÛÚ’;€LÐЗÌ2*uÃÞÅL oÔ±qí~V[~Ô·“¬²W¸‡µÕÍjØj6âÖ¬Ûj6`½´ÎV«ro4lµlæÛŠÕ©\¹XÕj`ý±›iMQßrWg«Í€Ì}2‰mFðÌýºÉdðæ Qä½9é~½€5öÕZœú‚Í@XÑü[mâ·vã zŸz»í…Óa°X@R/A¾ð•_mߘ«ÁɽåÖ#•€¢mþ•­&,´»ƒ¦žd0êÅF²á!7–äPÎ{´âD÷He "Lg*’Dõ÷°ßÇ—ÑÛîÌ t¯•råz½ÃиëewW ïòÂZk­>{y4Qï¶Y˜– Z:0÷ç&+‘ê1ûP.•œF9=?ägB©¡dwOËσˆi§Tøêòà±ë½[¶ÞànZ:‘–ò Pç\´‡–z`ã]qêä°µLÄ[ºiêÐ):€ƒ<œ£…àå|dè¹¾;S’æå>_¿óK²^×–$ŒÒÒè­&žßhbyÃ-ë¹}oØqERsÓ+{w9á°u~¯;Rnï.ËÇ©³ŠãA}HÚÖ àe'%ê~Äܯ”ôý^Öì ‰r¯¯êoÜF-¯Í¥)ïx ¡²6a·°-!I°•ݺ»M¦â¦ª—~ãtÈnËÆgw;0Šè·rûWl÷ÝÚ†·Mˆk“KÍQÏ];)ò¨×Pc5Û´´–K}q ®Ó{Á‘±Û‹í].; C„jºÍdö¼Q¤»¸Ž7RB8Ö®2§ç2ïo·;ÝB}) ïþo-ì p¥°¤åx°š›ð{×rîÐ ê€lœµð@ú]®9&jy ¿ñ#Å_¤ÛEa¨Ç%ÃZÌŒD'¶ásÒÒ§P½UNDí- ±qãëˆ[^‹ŽíòKZÄSÊå N£ÖÂŽ Ýû·_L:Ék0õ®±àû—¿l¹\0P“ gº¶TbÂóS§…wø2—¦µ„+€ìEÓÕ«sªŠo~ÇÝåí}U8¡”ù.w×½>°õü—®Ñ¸’ßóR¯5S¼¼lÿVš©g7ù \ɵ]ëÓœ×îk-8ÇŽëÊpg%núóÚ›r°[€Ëè÷þÄ0RP$ý°÷çÿká’pÀ m›ëbL)œ ý½œÃ‚§Ëþ{î²}CÏNs'q)0Ì‚[äD.¶¼!‡M·¨Jjùlɶï¸ðy‘Ø"#—’Øîöxë¨ÇçCÁNWp²—»ëƒ¦”Ѻžoã‰[cžVÌ^{éÜxŽCPÚØ˜{x£géê-¾b)n¤'øøgèeËû`ùËܨñäæ m\óŽ·R…Ík}sùö’¿bðÞÜνœç#Æ-„·ÕÑàÖ±ùãNî sÝ~+¬c½t-ìíºä¹§( N>á:ùÔ_ Š| ,d £‰ç¢Fܸ§fâyC÷©§‡œÊKÝÊM¹±?¹nщ{Ù.¢†QÏES§ÉŸér÷RåM 5Óëe1©ËžÎݹA/@‡]R,ʵ<‹³G ¯1 ­×0¦®âY(r-¤®XÂ’ë^䆫)ƒÞ•);"©7úx‘òønIÏð¡ØŠR1H•ùÉw‹swNQ€½^kÅYÀ$‡–ÊKn2g̺J­\oB"2Ë=œœá}¼6Ìég[½Ã”LY»\g›Liê4úD…ìÆå ¸”Al P+™Ìm“'”Rn’ÉÓðÕÆ¦fý’†ŸG=»ApFϾ×Ý…§ù:KàÌ­«Åy%e¸5h-™°]r+×R(\¹§5_Á s†¬eJM*Æ›z¹‡Û‡ã̹\.ijbixCjráÍcf!éÌ=ã®ó[®Z&¸W×3Ðì$dWQåÓ4™ÝúöÏòý?eë&^k4a±#-yJ$_{hhÂD+t´”¡ÚÈÍXÜ‚V¹6×$Že£{=Ü·\ÂÊÀΕÃ^~§¯Œ,§{¶&G(z:òL…q&‰ŸªHüHÇ÷t*+¥IžQäc:åXQXDËrýkc.±‹Ë·!cwʲ»/¿ üÞñeØž'= ¶g*,.’8Ò‰J§±"MFSZGH•ßâ#%ѵÏÕcüÖ›Ìï’.²®ß—+b!Ù”Š¥ª:Žb3+w·v@‡úW'J¨Wð¸:›ä{1uÊi#7!q#%y¨ë¡(E'J±§$ì´F#¿ ôC5,»±U`r¸ Âôõ þ^¯½–ïÅvØB»k4#(ÉCäaQ$q¢GJ…iä&$nA©¼/¬ ×õcÛyX|5 ®›¯¶Ãõcë«ÑFvBbGJòPÖaQ$q¢Ô­²ÓHÜ‚’¼„Y’g­·EÙרÔYe·"qù.Ë~ù±5𑠔䡬ïP$ûDi)vv¥8"1 Jel}Éõí©ÓdÆ¢„Ht`Ëc¯ªÃo$,¿7ýÂAQd¨»F#7R’‡ÈJ¨HÒD)õ”„iä'$~A©¾£Õsír7¸=”†O/@ž.Wog«a¿^”ç\5]³#D=}Ž¡¾u)"¿Mô Ï•)¬ÍüŒÈ/èéëi%Ê»®7¨rÌÕWqŸú÷[°´fvFdGzú\ZáXÙ™žEÍlÙIB ‘[Ð+]7õ§|BS=lŠŠòQv\ñ.œòf¢P_ï(ÂŽ ÂF×ðÙHUUpI´5dûÕ}¢ZÙÓ†ñÙÜ×ÎÛ¬WoøÞŽw@·Pßå+SüÞ„ò{¼?Ó´k4"1#%y¨« V$q¢ÔÛqeGí’}Ai°lü¾=;6~a8"<1%ü¦B«æ¦~ìZk2¡pÁ¬•ø{hHö‘ÎÞè(+¥‰ŸQøc:?ˆÃÄ?fðz„aãÞò6o9vh¸`Ù ƒå«øPå¦ÑÚÄÎ(ì@§<ÓÁ)kœÔò’)k0%$ÝwÛ?$@¾›O‘ä‰Rî();رËHæ>uÃ,çuw߇%´D¨d„Üw1µüÁÒ¢ P¹WS°µYœÅ‘ž>W ¡FŠ(ÌôÂ@OØêšMˆÒ‚^½„²æcŸë§ÆM %)WÙ|³·èÓÝF‚оÙ¢ž>'ÐZ–&ˆüLÏOô [Ò¬c¼îýo zurË)ímë³ZY®òÍYx©ÃóÀK­Ö,aŠ#E}P¡u Šânu•Jâ=v;ÊXßlÆ”5}/®gh½ÂiïË Å7§½ïFp³ÚûÚÌΈìHOŸkB*ØÖyËŠkï< ×:/ÍfLnA±Fã›D¨ß‹û½e v‹ƒ¾e‰‰;/~ÓÌ‹6:FÓSÓÇ PÝoETt¥Ö{ñÊRm¤L+š©oÝ.ŽmÿúãpßlÚÂ{’øÑåk1Ïâmk“#=y¦Âr9Å×ä‘NîéTVJ3£0ÇtJؽËýžVƒÖ¼¶7‚¿nXy#LôÛZÞ§­Ù¢‘ž<§Ð’TDq¦Gz•-i¶Ïˆæþ »yåV7‹®gè^÷óÊ ‹·ºgjæ]²95!V·ô&Dv¢'Ï)4Õ]½¨Ù‘žïé)[­Ù„hîßl©`H¶(L’-e|35Ãaä÷.ÙR6Ó7I¶L(Ü@Gž©°–l©Hö‘Îl©¬H“ …?¦Sv~RÍ7õYÔÈN.œæ¤UMŽî±f¶ú*çÉïHâHI*ÀšõT$v¢Ô'O•i”&$iA©ht­ÃFñ&W'u@>kênIB£PÞ³©ß_Ô‡øµ;Ú(MHÒH©<Ô€üÊ4Eâ&Jn¤TØif$Ç”¤ö „0E´ö@á_Ž˜Æ—£€»äåê÷õ©úÖžÚÈÍXÜH«<¥@VY{hhüDË´*CÚèË1­º׳©ßìê¡ÅiF9/G=jEM™S©ßïâbhŽL[L'DÛHOŸ+к]Õí3½aBÙêšMˆÌ‚^Ùæ“n:´r,lÕN”œ…õ-•¨¢´joj#7cq#-yJì0*³´Lçx*C­Ñ„Å/hé¥÷\<Ï÷í;}‘f£63—?ÊmpX/oÊÎÒ†!/$V‰¸•qh8#Û&ªú¨‚ý¾:\ûÑ} ªÜiC3ãš{Ú«|./lö²Sß»ƒò]FnõÄ™˜ržºž·@UÁz1^k–fDi¤§Ï ´a+"7Ós=a«k6!Ê z?ѽԇ›aLÁ›l]E>œ €î3EiÒoHÅr^shxŒk$ª*Xw®*2sDÕLT wÚ.áš{ÚYyÉdí©/1ë |½ç¾ËvŒdŒìÙľöËÈÆNk6!2=yN¡|»sC”fz}N§±%ÍöÑÜ¿ÖõXkQ´¤Ã/À$ÕD¹XNüP#\[^ocS±UÚ(MHÒHI`©&ªHò6RÊ½Ž ;]£I^PªI†ºgïû »KhìÊÝ®æ(ŒlØ9xÐÆµFvBbGJòP)­HÂD) Ù˜ÊNk4"q J|”#¦¦?[Ö€œOíqu} uûN¾kMìHìHI`©™$f¢dzJÂŽ4r· T49,’¤aL’F¿H’âá}’4ú ‰_¤.; 3ªHòD©Ï~(;Ò(LHÂIRÎ)í|Š£¯ÝhÐZr±UH ŽÙ³J²¶, Y¢M÷=ö`ÝwW$q&ÕïÞ7Žºfž£®u]Ù0œ–l@QFŽZyƒ¡èÙV¯«ïô¬6ÚhŸì#%yH€r® ±%;ÎÂNk4"± JRÓ>xÔ×[ðŽÏnòNS}Ù‹¨Ž|/Kïù¾ÑŒäØwï€Ì "1%3R*ìT`ׇR£¶-(ÉüÝË{d{2:È›#1”—çðõÏÅ( ð]æb¹ ®5š°ø‘–<¥@¾` ¡1-ÓÑR†j£0c ZR\r¦õ»œÙR(Wp9ÕîËÁ¾€V8/% Pø¨¯Gé›xÌDMS¨s)ž8“‹=9åJší3¢¹w‹m~ÉÙÑ6Ö€a›C¦Žn; Lw'úfGˆzã6‡”§7Dó¶J˜·U [Ò¬c|ÜæèÕÍ­Ð*[×;háØÖ•Á Ü ]Ë!{‡¢®2}³ ‘éés­ÇL‘ŸéŒ°¥ÍÂŒ(,èÕ®W÷ÆÚa_¯Aëv\- °RC`«Ûd‡ò?ùÖ7;B4ÐÓç ÔÉvœ r3=7Ñ+li37#r zg—ŠêÔw½ƒŽq¹EuOjùÄVFA(‹ƒ¢Í&DÛHOŸ+P¹ÎXå™ÞPÔªli33#2 z?ˆªUͨ׺_ù=@ŠÁà›ëp~[Óy!S•Oº#dn¢ª*˜ïèå#ªy ªìu gds_»ÝùiO]¹F,…’ËáØ‘Ïã^ê÷²#Y!iäf,n¤%O)°Z(š4ÑꊂCÚhÂâ´ÊÈ×r2 ”\@MDK,gj¶zøLMiwF$q¤$ °$‰™( ‰aG¥ IZP*ã[ïv‚¨Uó Üë!¤ú6¯P_Z…ÛCëï­–=Õ·tf$%yH€å$“ ±%;R*ìH£4!I Jes§Ö<Æ>aÒyíáÒßòJ1žb¾F¬±Ï–ðJBZ¨ü„Ä”ä!ò¿Š$M”ú°NÙiF$aA©ôVKcÛÊê`eJ¶Gw>Ñéµâ±úÔ"}mr„¢§#ÏTXªûPŠ$tRO§²Rš˜…9¦ÃýË£/žÑ¿ç¿·ß={óòO—>\½{SW?¾zSA¿;üæ/oÞ\^_½û?Sù+Éàø»ÿÄ´Ìái!ñ5ÿC›”ñâÛÍ"ŒGIÃùÌ8.0õÆ.ÄS5Þ‚ŸWðò6“þI ¾jm¿Rn…$åàmRzÍ™|ç—Þ)ů̞î`gq]ÿtÕ"mÝ_ kÒ«Ò¹`X÷âä{®ËÔþïÌv’?Š$›0%‹üäA‘f™å[u}®D’?êÞJ!(og~v¹sBùuBy»þ•ðv’,o39áZW(Eý#È{Ôë•4m&¡^Р€3„íÏ…ùèµoOîµA¿×ঽ®nº€X¼“¹µƒÐåkŽ|­²“g«h s/x¡+¿†QðÛ³R4¯U,ž&ÙO7iSåHÍ<¨ûS4"mKå€åê•C¿×.D?t!îCz‹I0±¶õÙf|Kc?H^žm†¼—¼Ð•_Ó(ùŽíY9‹×¿*O“ì§»ÅFˆÿiw]1º?ödåºmô?Y¯;/ z_¼¤ú×àVXußäYùº ÎLGy¶ÎV¼zÖ;w&lÉÃÛ ÿ³²sý«bñ4É~ºå(6BüOÑ—ú?ödåŠrèw;zI•qš}zÚœ;y¶YãÞ¹á©íVËÞK^èV˜°Õ/7(GcñúWÅâi’ýtŸ£Øñ?éÿª×ÙþZX“•ÿ)ÛQú=Ž>´ž}¦úGïVPñãôA™j§s¸úk±úxõÁÇ«0åg}¼aƒIüÏÊÈõ¯„·“dùYüOÑ~€®ÝŸ ó±ò?Eô{½¤Ê8i}ß…Þb6çNžmÆ·wîÔ4‡A¼Ð•_Ã(øŽí…ÿÙků†ÅÓ$ûéÊ‘6UŽÔÌî°mŠF¤m©âéÎu» ^Reœ¼¤¾ }:§9wòlË õÎæÒ y¿u’ºòk%ß±½ð?{åøÕ°xšd?KþSÞÿKnº`´¿Ödå}¦Ñùdƒ×¹HƉ‹TÿœÏ ãjÏ. Ž+w£ë“¥pxË_ƒ_Waê·Õ{Õ•å…ãYY¹þÕ°wšD?KÒS4‚þÜtÑh-LÈÊåL£Ç)ü‹_T¹FeIÇŸÐiîœ<«©¡Þ›«bÓ'‹P·¹R-0uÖʳ具ÙkႽÓ$úæAk†Ø¼ëÞù©0qnÔð¹1«ße‡À ™Ø4$bݸ·0n-Œ; CîX’Œ¾Š¼Ïÿ0™ÀÛ£,$|ºÎj:È«¹Ò cgõ»WsɇoCoÅ‘¨°êfȳòU¶;ìÐc <¼8!‹>ßs|ã>ôY³~X¤„²|Æô»©Ú«¸}î±´µUž•¯û°¶j>( }nl}¾ŸaCxž[Ÿ5xÏCì¯1¡|£–Än]íb†ûÄú{¿rh6:ŽYð8ä³ÔoÌâuôù¬Y·o_Þuv}Ö˜4!­fÒö±Ïú=†¦ö û5û±é–ôY_;˜¤Þ€ö}Öïv4IµWqúÜóf’äÙf`{“¤æ7 }nl?Ì$ÕÉ?˜$Éanc¬ ßÝh’$VÐlæ&&©z,Í$i‚"މ‘8„8êÎj«>Ä9Ù$õ}Vç%&©7 }Ÿõ{MRí•CŸ{cÞL’Þyè³|ÝF“ÔŒõ¢Ï÷v§ªc7Ø.#E烳'_Óh¹4ê‡]µ\½¯çšõSË¥ÑJïšÊS…48¦'»R}G51R`j—*Ù0tT¾ª3m‡Žµ;¶Z&Ë€¬VŒ–„WaèncùanTß_õ LmR!,_Óh±„g}؉ÅêûÛûÚÍbɳê÷K‚‡4ô·±Üúû Å`vU f¿<ø³Ýeþ_>ÍoæcÅ•‡õ8¯ ¢­ ¬‘Ö,~5ãj¥d&Mï6_â—C3Ý笯r‘ÆüîpqñDÅ$÷Ü£:þEpÿR‘IƒcdÇ¿äø²Ù.¢¼o@%‡Í %(|™ûEáidR¢òO=‰V^T»ÛI÷ÒÉ»ò |_Ók©†áéë"YŠ*„éë­ô§@Ù;¼ oKª?È;ˆ0ÎV‹§×©®¯«Áñf‹Û|Z"ŒBÙëÉ‹–`j†GW‚9fÑÇ™¹&¿±ñõBd¢$Ó×Û Ž"4äyHÎ8~ë.V¸lDsØRuryy\¯Tü¦¾0J†_™âÑX?*È²× f]Ò©Û?:ñׄ8š•ë;pVA¢ÒšiþÚwJð®`7ë«,Ì®h'^øi𸹅:ãâ(ìU¯=Yð°b5Æú öžý‘lŸ3LÛv/3"|5bXHe·'òðz(8â‡ßÿ¼ŸïÌZ{½=‘)ÚO:žÊ>ŠOi»*ȱëÇý[Ó‘¹Ntg&aÐ1æb¬¼@`»É±l”ôe˜îCgÄp ½Ë5°.¸F`aq”ÅBf+ÙÖgû^®ÌãÊŒ ×ý³sŸ{±íòV¹];y˜)s毽 TŒÐ8ŽÕ _ xÉ–<Þó¿2vK£XSÿ¬L݈väéñ¹ßǯ÷l–¬Â òðØ?ý ,Fzr}cŸ—Ò‘Ç{1.íØ-¦yè˜<<övb²I¶X‚Á1ÛôëÊÌÝhM†‡&QB囥p85¤ïXì}]V>½˜³:šÐ ?š$QŸÁt ,xZp¾´—B£Nޝü=`R«ÐwQ]æ¾bU†NŠùz$š4‹&"ZˆrÕ%y¶ïúÒà.M³2Þ?>÷»•Ô”þh¦™Äž´å¯+!]߈V , çÒԈȆÇÕé i@Ó Tï%/„FM¬,@a¾|© ƒI‰µý«Àš<¾Þæ×Ü9•ÅÖH?®oØR´úx?k£v›]ú%øœm¢ò½-‚{A¼ãµÁM°{Z¦ùƒ|ìj¹¸g~´¢"‚¯nêÍ‚‡§K[;‘m‚íD©À^F+Y®¸œ1®du¿ø¹šºAVK{º´¼bê†> sƒ¬—ߢNÃÓM²ÂÌ YöR\Š{ÉÔŒs!Û{Ö³ ®{û6tfi ×6³NÓáqi1mÙe—öÃJ”×7"¾5ï7œ¥®Àax–9Ùáû¥ÍÄÈ j¾6‡·-wëÉr$fêýÚ¿I|Æf 2Þbäúªíðg™ÖEávq®²ZÀÒüJ;øÛ££@ïº3S½§}KÔ{Wl‘.»%«6]¡ß×ùE^ÐX(u¢EùcsˆGªPÈ"ÅÝÃéäAßûm‘½àÿÐO¯>nZ}ËèpÝÞß™ [åÌVáæ÷ãˆ{øÐ}õv¯xŒ_ÌÞÜî,©2û‡Þ¨ ¢X$Ø–9©Ué¶lÓAñ2z^DÙ" ‰1\ÙϼaM»Ï¬ú‡^Sçqåü¯‚„e|tK ugVf•½YF2K|³Nè¤t{+A»ª†L§êdy²×Œ9@fÉݱÌ2ê¹5>º;[³Ìë,™ï§qWI˜dze“¬Æ.¿‡I7ÖÙ§e¾f•åX¦nMJÜn­³U'â(Î_XŒG.ÿªd[ÙÉ©Z›êOÓdH¬|²•ï¶òŠosŸï ØWýÒcU`ÇbQ—†TucR 1%êÝÉÒZ¤0;ÀÃNÓÝÑê2®½5¾Û©^ºßKG}žwx÷4s8{=èsßÑ[CÏ»}Ùµ×{›ÄTú•© +«¸ú•©ü„AÉ«AÉ«AI«AI«A™q.¬¥_Z˰2ŒK _ZËc9ˆmK+kYø-ã –VÖ2}‚µL+k9PV?mL+k¹âçDkVÖ2® ãVÖ2Üh-ÓÊZýµ«1±«A™q>ÄZ¦•µHûÕ øÕ Ì8?ÁZ†•µŒ+ø†•µ<”¸”¸”°”°”çC¬eZYËtZ JZ ÊŒó¬eXY˸2ŒK`XYËãAQ»––Ör4UKûµ4`3ÖFPM?7—å¹9º\BÁW+¬^XÑ Kz~IϯèÍX½¼¢——ôÒ’^ZÑ›±öz¥5žFv³ì5õ'QdƒŽÓ9Fvá,賓‹"]÷rƒ†Ò`[ùÜ=Œ³YËÑ7…¯¯OêŽ_°¼Œ¾—ùU¸Uè<3í>ÓiÁô2@]¦ ‚étÓñ³1mÌ‚kÞWçÛ3ÎNCæàßsfƒZû… ¯`wgáÅvŸM±íJ³ïb—ÙÃe®jÐíOç{ξ Ê}wœ·Ì±-3:ƒz:ߪŠv©ßwCË\ÔÖ…†:ïsÂcÐð´ÐæìîÊ áñ³ixXiøÝÇ2õ³Ì2 þé|ÏAó áwûæËìÈ24üÓùV] K ¿Û]¦ް.4üÓyŸƒÔAÃ+ “²ÞøŽî‰ìI}º’Œû%ãêŒ,¡w‡‡£“òé¬ÏáΠç#“aÉú2²]Q£«ò鬫R¼7oc`3/™_F€GxWËmìßYûTØ/5q|-òIÃ.B^ì,HŒ¶H'ݘ&é ¹!»¢d¤ÜM¤â‚T\‘ +RaA*ÞDª¯«ˆvÖR‚+n7R“]˜Õh¹ÅȬ`v5\7oØÕ€¹ÕØ,v5b7g·íjÌÜjx–@»´[Ò¶v9ln5BK ]ŽÛ‚ $„Wƒ´‚…ÕÀÝœ «‹«1ZÃjànN´…ÕÀÅÕ-a5p·dÂràâjŒ–À°¸A™Š}†EíãK‘齩”çÂFöÔÜ’š]’³+z3Ö…¡ìéÅ%½°¤Vôf¬+k9ˆs[Ës-Ð¥Dg¼ä'”4ÅUISüoÏÞ\æ·ho¾¾£Í¥PþÍ¿PdÆ{Ý+ruzŠ#Pÿj…“óÑ9´QÏm%¹0i¸*`jð[köœú«?p¢±¦–wÉ‚{9ÛŠÁŸÉ{êë~†B6‹W¾–÷&1R—Û÷'¬ãS#Á(ÂÑ¿ò]„ó¤'¤/y1‘Ó@in4q;öçIÓòiÈzQµ’\-1•»¹ziÏì ª|©ˆ4xŸÜÞ:ºìøÜH™‹g&Óp«‚lîÌmäì>ºP[ų}kÚFãG\®$ûÃ)ªçwb"íKÕ»ç¹.AÑ©žb-ƒé±©$B9å6ð<¶ÇE¡äû ™¹YbëÃú=7šºrº4…æR;EšV" ¨§Û(† Œ»sgd‰›@–š)sUïäû¨G­ì™ÝÂan4ó»‹“$+O.M$”…ÅVJ‰µìºÌÿC§¦Š´Œ¾h’€Åè\ÏäßåÃ:‹çF Ì­Sbn31;vçtV’Ÿ ©Ó×LÆ=š³-uÖz-œ©‘pV°~µtjã3ýF*pë|˜M¼®Æà$‰ÎŽÃ–¦Yã®{ 0ÊÞš‘dlNnìíÜJ¹«"SfëÜJiÞ6€s£#†Wóè$ÑŠÑáqÍ{'Zù…ß½¹Ñóakº>ò¸˜#ù>¸>TšXšÌÊ!™[TFÈâøÓyWÃ<0>7RÞŠò-ü޹Eu\n›s›™Ó¹;öoÊYJ´º2®1– ˆî…l#×½w#ã.ŽK¡±ÌÐ@Œªt+cj"„nÔý±ÁÄÞJîrh¼âÌú5¸3êŽUG¥š}qfº^Ž-Ô›¨BZzs£ÞÉ[ÕØàˆÇÕDyCÿrŠí)(†–â­~…x1BGl“|\ªÓ¸½Á 9jT) Y Js£™Ý¹O§ VȆïaŽÑ06Š·š~ñ{„ÎRFs#AÂkÔ~ƒK87*^ ØF ãGL®ÆàANÒRO従]îDòíFã|Р§ŠWü_v„J5UÛc uWªö-Ý—¹‘ø@·N†¹Ñ§Swî(­Tô~¹‹™ñÁS’ÁGHÈ,E47$¢|ëÐhnT)Þ:æF3»ËÁx×t?›[™AwW—¢V]U¼Uºä·”ðj0p>7R¦êâÒ£9jTÝ¢ÛæÅÜfævîÒƒ]§¥EÔê©~Q×cßiAZG_\#!²ÏÔ(è…’¬†+gjÒ»è7Ή¹ÑÄêjäG}Â5«ÜàIiöµúIº:ˆ/5ôvn%XDdK_gnÔ'vo¾¹Ñ¿«y4ä:†iùG–˜î¬¶Ù³«:–ѶÉ#d–ÞÈÜHyëàGkîܨ,Û‚b)Œ?N,*ÿ_w)>l7b—œÂ›¬%‚¹RΔ©ÎU:vPçFsã@ÍFf[Ol?AŽÃ6ØÂ˜9Á¾´ßs#á¨KÆÍ&jjÒçÑn¬¹ÑÀ¨öááp)ÁÓRãÛhû kbÓt‰åz7·R®úmÜÙÍú­×‡kn4q«]$©7j5×…UëónðŸšúìñ°/qúþrÇ? L{¢)Uø¤J ½âÊO"Þ\^p“¬neö¦ò‚{íþß®MŸcÏþÔdÕd1Œ³Þè©çÕPŸ¾kÿ€¤ð}Ÿzê©MxøVãíãv’xneñ¦ê€»gÂgÚH?9EwÚ4\äé[ê'gpºÖPáÀ'm­Þ®J§èöâ†õþýÊþ·n’Ÿ¸—9Zî™>h÷A©Áaõ·ÉNÞ­þ„=¬Ûé$ÝÌßÚ9¸×öïý,ÂgÚ¼}H†á4ã>òAû¸Êòõ àÀÂÉÛÕÝ•ºß8ž$¦›¹\»Ÿa>|¾­Øe]îe×VÃü =Ù¤è†%rààô­çOض»×êx/ݲ3¾rîœ Ÿq£ï!y”‡…;CfòAÛ~J´ +ä¸=òMÎOÚ´¸ß2y/AÝÊäM®ÄÝ»€Ÿikî!©¥“¢¿AFÚ {PÚ±_²ùðM…ûy ÷’Ñ­,Þä%Ü­ìŸoÛìAéµÇéA{cÈ­KØÀÁƒ¶¾QrŠn߉\¯ãwªëÍGÀ<ßýñí›?½{õæÃ«7?þö·ÎGÃú_}ñÇŸù·T~»x÷ñýOŠK‰1‡Å¾|´Î}±þéo¾øˆ?úÃ`ë£`å ØocÌö,`½M.û3W^ŒJàÍ"¨· üÕNxI9M¡¯&,7Áš7àékúŸ3}׸ÑÍhäRæ÷WÆbp:y „Ën¾2iðâ\cÎp¼³@C*s²+Q€Î¥Ú’Øã1+ð=ûÚ˜(Èó¡cO¯PÊÙÖçñ>y/H õù@ZY‡¼W CŠ{ÙÂÀ:óøü݇§¯^|xõöÍå»_¿ì7¸(>ž<<þæéŇß\\œ¿xññúÏo?\¢í—‡ÿŒ–ÿþ§ð²Ÿí Éî£Ýd( n2J '¡VX–NšÝVX'£}3Òǽ¼3 À]rµq뎉Q°úä]íã;ɧ£¶–†¸½¬S>»ìY ¢2¶¼X©€çnÏ…Eší&W¾m޾·°UiðuÿOCc}.ÔÆžÄ$@#hGþ!õªJiJÌUàq“Aw!¦*ò註i£[§9&Öá…<ßA«ZcÈ£;†-Õ :#³ÕïµiÊYæ_ÎéV£ñd<ö ü»­Š˜ÔWTy’ÀÿB{#†":± ¢ê©©¿qUìÙÇ&b«òH–„ 0Ö~Ó·ü¿¨‹ul¼ìô×Þ¦Š Ö°Ù²«CfvV­lŠ—T€Îm¹m°VÆ‘œ‚„—gNà"$w– P ®L6xFAÍ®§Æ¬uc/ºD¤„VWƒp”1gþ(cBpZÖŠ 3éeL-ìÂèÁc ©£ U(sˆá1›Ê¯Â—·媠´Þù¦ÎÁÛTX õNV/WA”•c';Tev±Ë[æwˆT8ýp(ÀjqÌŬpß©’ç§fÓ¥nËž1ТçuñJÖK¾-Ÿ1ÄÕÞê ‘h“!ŒÊô¹µuƒ”Å8$£>ÂæÎ¶=U#ŽmŠ³Î²!#ÿ øÏ¥­§h#È*€h¹c ÓìÃ%œÕg¬¸õ´J””Âx_1;jc»%S€4§SR¨— Ð…MÇ„ÈÅâ<Ô©‹œ™ábB6Ý4{Š Ã^-")ƒ)‹޵í±ɸÆhyÊ!Ö–p¼žˆ,Cu¡HsœÝkã`ÅŠ±ç¼”ú¿Ã¸²fyì.5u¦Jšüt6 0)7õÒg[GÀ[c¥q]»0“’Ê)œ±Üuœ±·Yxؽ2VHç7gxY{ÃP'à6ûƒtÙ »‡ÃRŸÝÞG²š[¥ÀV¢ü\‚žÏ,¦Ý³[5$rÏw @”ß;±÷·>Tu²nKµ± » :† AT×9ßa¨‹ÈÅdkã¬L,7t'S{ÛÅØîNÞL¡]”Æ!úÚx‹E˜½«ÝÝ`Ó*2Þ$i\ÌÉwÍBn ¸{+Œíª. ÷ OYÇ$S{kÀ¬jOuÍ!8yP"· 6î•a›QõÊ­<˜ *síZƱxfCå*EbUج«snMÌb[Bë× ¸Í‹Ý£ª½µõ÷$%unr ´0–Q ݬ³¾b…rÕ\u$Ñx5#—W$ÖÆ½ÞăW‰íðq¥k9N y‹2lª9 ¹ê[õ é;•Ff]DQœÚÙÒ‘M)S2ÒxIT’7uÁÎ]lkGÚÝGÁP‡&»ÔVº‚!oFúe*«‰ ÷«Xl`¨s„Ðhe­$x ÂC >ÔÆ49¥±/îsöFœê&‚Ç}ï0W —€€ƒó Üsìüꆡúi«†‰„¼K@C1ÉzYü8Þ¨ÏC·E¾q+"³[} 7»æ> ºê¯Á@ð¤BvmËaä‚«]›k‚ò€›X³©ä’+îcVr‰Öû”ÆÙYÅkÀfwÄûbòR‰:hmvÇäöÒ¤-emÒÆ±F¿`̤Êpn.ŽEÒe«Þ$¦«òiÁ] Yf2wX{_¨ÌŽÚ.‘ÞÌÁ‚ÝeÇn–‚È—ìMñÌÎwm °yH!«ö[[²ù¦(2'?C‚ºXÒ·°°µåø)Ãíš3©Ù?Kã…N.µ÷&U'Ì>Õ™%Ñõ™,>·ßš$£$% Ex­­,u‘¬C ñÙb*0…²|yLŸ*´ArÞㆶ 'ß%ì©C[±æì}±Di³ÒµP¬rÁ€{ÈJx“.Xîr¤?c±x d‹DZ¶¹šÍ›ö"‘/’Šãi —æò†D’ŸÁ@ÄÇuµ®iÕ"É\ÉïÆ0ù e’ ¡j#Áڲ჆„“¢ ž(¶0]¨s R"ÁâqúÿY{³V˶&;ì] ÿp_ ¶ ?fßy‹?ÿkÎÓßxJþßüÃß½&äÿé‰ú?êÿ¿Tý4›e›íÇ]Ï&²›ÃÄ_Äb5ëÐM³ñ]ÌܼwSú¦ï1׋Ū—¥|>!o§»Õ[f—¥ B¯™)¼ô&aÝÕ…ƒ]Wv󄿦ñ$K8?Ϲ]øœ2n÷ž§BäšSQ¹'5Eè¶Í#¼«CmßfL¯Ë‘ÙB”HÒJ}b·V*Wkг{¤˜Î€Ûí—Ý»¦ä”ûÇëwYO¿xOw 5BóíxG5;8’ç ‚Í?ð6s˜“%1HõVu’nÁО³-&i-Û\ñ»õèWá1gjXìÞÕzôc<‹¢CÁ[b‹÷ʳ§b"ÎÓ¿ôî}`MÌ4Ô#Ÿ›KÆÞ\Õ 6Èñ>‡ Ýáå/·Â]²m UÒ嘋r?2õ±T¦Á¤§Iÿ Zû¬zt›Žà3¡»pï=—ª]dñ[ì‡×ÛñMåÖ^ؽb ð›^ã+W…ƒÁMtQÌÆEqV(x¼°äwMxÚöíïΜ wƒð €§ò[ý³©Ûõ—+ý¸Üïbê…e ¥UÕÎ3a?74#4 @óÁ_ôÕöønÃÏ–Ëñ¸cxk1#@Q§ì˜xßIZ”ëŸhÙ[ ÷w«=öÁÛtò<Æ (ò½¸!/6žyC¿Û¥ß?œÔ†ðí“þ=b,¾ŒÅànا"ï6jˆ›ù8'2¦b²{ÈX„ýÌd…»ëþÌc»@<Þ¿ïh‘Â< óøù†D©,*2ŃÕpÓ#\Ô4•6‡¡"Jìái¶æ#Ô;Éó㫆MËÙòá> ?¿’·ž¶'ç$^¢0M/ONÄi@ÍçÜùÁ96—E GÑøƒÏùÕŠûžÏžÙþƒ!‰Q Ìò—ïÄO¨~ú0{ñÅ7lô Ž…ûÄ7¤³¡‘<‰`ê}®FDŸšùô&?vHÂ#wóÝc__‡ëkYŽ(PŸ»©(~¿P8O³—âŸqÙš#\-Œ÷®9~´KdÙf¾ÄIšØOƒ»}²{ü sDhº äš¾{ùÞ×ãé#ä}%9„]ù*¬YškƒæjéiÝÇ5ÌõÛËñµ×€=pók‹Ø Z—ç }! ác1P5ñÚúðÚ› /¹כ†×!ppCrZvÕ‹þØèÆ5 Æ#¯–‚ÿ€öFí‘ÙéGŠ O³X-÷ Ιþ°_гX®Oeü$¢ÐZx€É¯õâr]óþ± ­ØÊm¡Jìºz–è´€à,–©Rá–¼ÁOjXѹÍMilíy#Ãyʆ™?-ã!äå–¡b2=«?¬i^zÐ@„FÙ-4”Õü-4ôññ‹ïôO(s6‹_#U|õOÊGu³GCƒ!¿xÞskª¤B(Qôo5ÿÌ?Z–€büÕßÔ­]uÍ †ò&EV÷þñâ|fæMSÇ<³ž‰3üNœM­ݼüölúÍ- fRóÃý1ÙšëP4ÂQïCË7ù\ÛÏ`½±?#q³KÎAq^æÛC¥×Oó«à Ó¾ÿbEÝŒu=9À³È¯ÍG>qht| ‰°ûM%i‚‰“¤"¦–W)X(Üwß#ôD½÷þÕQä#+Ç£ækMœ{æñ^ϣ؃î´ižâÖP° 9smfëÑÐÝT™š3¡Ã]arÖ4Ó^'á940†n;ZóBm“d»M£ŽœwÅ9bzzã”ÞžÕ o–˜6ËÃìÓ?¦2~Xç"ØØ#ܵc´1Û…¦ØQ¤ks‡L†Òá8Ëßì0X´¶ÝûÒ˜Ëýòcmx¾¸Ðµ8V ~¸‚eé{ }‰ãe éï´ð ˳`9¢!òꦨûk/_‹FÈò ‡MŽÃ0ži¼_MNo|zMØæó¤‘+Bßµ ò÷nîÉëÂȦíYµÈ²¤ÙʸXg[Bá=¦9®E‘s‚<ç,ËÉ·ÏŠõ?p›Hêíì´Ý–·8\êÅ ä¦l Ì@?B}sû)X}XÜg:Ž9šÜ>‡k¡2ãç¾ë}Ìç¡°yÝê‹_R4÷°Þå.´KYÔÆjzî~;&e«]VPw¾ýZ5Sü¶…Xܬ‹k(p!¯ ~hºÚ´‹ô5vÈ20o†_ÙÃÛ¬=ÛÛ-–%8‡uóˆ^ÏY2<”€7s›‰q2| |ˆ)¤³pkÝ6óC ÝR9"°.äè`lLÉô#6VüýlÇßMoŽuý&ÃJ–bE ã‰ÏÕR‘8‘¢ƒå¾Š!èô$G GÖ™“r2Þ8sùªHùú²'.ä ‰ûR,ŠåÄ…[kó+FCž®¡o"{©`„ƒj²¤$£yÆwTüšZä&ÃIÓ͸µ«o¿\]¯—*M³UÐ_ñYŸ”_$wk˜8Í&Úšº¾Ô‹À°ÐÄ.ãªn³]¬5³×DXïÆZ3@ÌûÂhä·×\‹Ü/©?ØØ÷­m<ìÚ×'k´M[<¹Üצ|²+4œùW>Kzx|Øæ YüÇ·ï Æé_±6ƒ£‡ø4Wa0¢š¡°B¬Èƒœ–0ðXè)­si]^ÄE_ßZÕÓTz>QÌ "¸œ°m$ûå!··È/èsåÔ/Ø62°S¢<µÂ(ž˜L©Ðj(¾5h]¾rñ­9ý*´Q¬Å™{Z¬ºC/þár…ŠÝ*^ðŸ÷ G"&¶j‚Øõ›ñMoüädhJLÙR“Þh↭1)Ý0Éh„É'™¯Ý…CT/0^e#Wg7<µß »ÂËD˜LÁf#5Íå\‚,Xþ°¢ñ~· +/u/º5!blâäú)Õ>,Ä ÍÒ*R¼—‹-©dámâ¹õßœS:¶‡‹¹ÏSbÕסƒ¥E«ÃM¿2ÿ>Oe˜»%ÂÅ›ΆDóžSÓ™³3¬šÉã/l14 ]ÙU-FŒåjR“sÎöÍp=Ù¡SŸ‘þF5¯_…kg3螸ª/.™ÚÕÞZnž‹¬vV\2—ªÄ”ë—o1aß­ “¥ÈÜq¥¶ƒyd1”%æäL¢»ÚËLŠõ ¤Ðó:Ëî£ùÏi”û-L;|Ù†¼)Řá†ÖøIùj?Öªa7R …ݲß"l8&frîw:–“õ¼jø2;@þÅ?š" \Ø-¹ >!Ÿ»8èl¸{&Âz »¾¦€Hç}3bfCèêvn³G¸,¡!~㾈€z™Œ!ÅÞåCÁw]µöˆ€vßiÆF*NÔó‡†p4”Ö¼òXè³'•h £p'sJ-Ðp›I7%C¨uŽ—6câïÜ0º–W <Â6påk®€/ç).9ßöB¼µÑ¦ÕDŒÿ–{ˆM|æx /¤gw™_ží–3öip—T;àñtÌ»&Ô˜(pÀ³xáž“Ä`üÐq¨¤+qƒ}¼äi&øYˆô<&R‹°˜íV-Úfˆûý{§«Õ€pº«·k…q1øÃþÌMŒë¼Æá­F Þ5CÓ½«“ƒâ9´êëp¾tóAü-Áô Ìý?±žÜÑëöáö…%ÒéE‹§ÅÏ16½œÂ9ߌ’Ë 9²¥ò±g#u4Ó#L_äÇ}P‡ð¨ŸµýPâ BËu_‡5ðJA¨Å©ÔY¼î¯—°ÅàV>Ëfô!¼zC"a†a7…øò´KÚÌ, ²œ<¾ €Û‚lÙôçdé¸ô—u…D*Äâî:† ZQ!ªŽ"#aÙYqHù,Ò¸¯ÚDziÙ!ùøÓVõ8âªá?l‰õŒÖt¾¨+áJ„j^}{€Ûù^ÿø×ŸÆåßåà8Œ/þ²ny_<Äë÷º0Þ4ûÍò7‚²_/à †‘ùeõ-àöÃ6™ §cóãr¡WÔaÍf5ë Î%Æ)ÂÛ<5_ñ} 4¡ûf èKèø‘÷S]ùˆ8v—@Â<éyWâµoq$½kŽmاfŠ€Þ`gR|@>-0¤Ù3ˆz#l¦Z˜ñ[ÍüѲT—ôb¹ì&bNä…„.¨Èý.¡Se&ýþáBêQöŸ¿øEÚE­7âµ¶Ÿ”w@(<^ޚݻ*Û½PèÌn+ÅAÍj[L_Íà&t¸èûò÷Τ¶ŒßÇo:‘ûÆV!t¬éjLþJ±ãÊÖâ y¡Ù"µ"ô’Ùªfå¯>ä·CãœJ LëþOz=}RNU× £Gxjý’VáBi×à£nÌã‹pâU®GßßÇð3 oÔëëL‘ž[ "_vôËÊa1hÚ©,;ªq½k朌ç:2ÉÓ ðëy`ÁÍžÊ?ßä~ٞƺ¿GÉuý‚Ç·;í]s$Ÿ ý²6Ňú„Üc£§›1êB n‰ÐQË£ØuèˆZÔ£-™§éÏ@ù¢õËâhÌÛncžù„ЄMFú2Ùä®Q¡mHþ¤†fgï¶ôÒÇ/~ñ# Æ"H r0¥‡Š¹mR<l)Ôm“"õzFv2•-ŇR &ãbò5Kz¼*xgJðë§øºÝŸûDMV×Õ€ANFÉBož¥È½G> Åg!bÛ¿ÿønñJê%„/..ïÕˆ‹Â(nÐô‡y«üV¶§U ,:‘‡éi#¶!?7øs~Û¼!ï‹r’3ÀäkL¹‰°³ÚÇÑTB aø=œ¬D­ À{xá^ŒáŸo_ÐïŸÂ2žj|.Ÿ”Ï‚Ò Ï3ˆp[¦)ú¡ Â]R±Ë-€²á`U zgoyCÌ^%ºTˆäïjÏ”CZnã{Ъ¶ôÆY±1ºDïê (6ô:Pa¤æ”ÉÒ“eà 1ƒ§¡j·«Zµ”Se-ª»:këKë‹_;ö"…1.Ѿw ØÅ°ŒƒËÅQ,ðkÅ*¿å% ÝL`Æ1º<ŽT ­ÉnŒo€˜íà?¥¡Äè8hÊϾ¹`¤¶•ÎÊfDy_¯K”Ïîc–5as8¥˜÷%}I z§UX~ðè³$±šh‹c»ËaÉÅÓߥ™ib¨b”a8,xD‰škë~lñËW$ËðlA“_ŸÊÛ­G‚ïõ×& ·÷ºÅþ¶òýÕ;² GU^½!z¦‡&od\äy?ΔNB¬ÁF\G1+ëç/~ñž(Hž)YÔ'å¡/=>(÷XI7»Ã„ˆŸuÄßç ¸ ¤yj&|†|d9' ÀÃH• ûz¾j›F`}¬W•ør„›àÆ©o)ÿ/„{âÄÒg÷x6„YëËbtÝ–“¨â†ütX¹æOªðîW{X„›Fò‹k˜QàV®YE",¦¯/Ù÷1¼N"}Ù Ír×ðÉNXÍ·oþö÷éaG(vèofygý¡ÃÌ>)¿¸Çëº>‘tãoñ°’l˜Ü——‡W³œûûÏÅH&n¡ë,Ÿ¿Pnp{‘{IœûòÄäñìCŸÄùûóךÝö»ˆÛ)’Þr½¤¼lJ[j²é%þÍfÅ„n•‡¦1/)Z—žzÂË‚zÙK±ž *§‹ÇŒÆ 2Þ"Z…Fµ+¸[ôá8·Ü ôn øo¶³Ç‚ •ÒѦïÅ¡&wV»u)‡;T„,¹ø^%‘xܽÒò|aŸµ‚.'fÿ}l’¸æ›ã¢Bé„•¨ƒÏƒ´DÂ/DÎ-Tq_«9FlTR=½›·ÊòÖQÌG¬)f¯S´™ª“‡IÅI£ò ¡+dK–œÚZMŽþÄ[„f‰ÂQÓÀ4‚`í#\›d¯aoÈœDîOOô·á<“»³@9ã„~›)ß¼Oü&Æ3Æ&\ABõ!ðýfá\_¬,mÆ1'owÁÊžÊ%j¡/‘ט7g$k„ìèd6ÿ­~Ò˜—1 ë¡ŸÝØ~h4asæ5æO eBŽ¤ä˜ z’WvÈÍdv·«ˆn¾Qy!†ôJýNëeLÖtƒRƒ‚Íí¹¯?fŠP./,U D …ŸV‰lÞÄZœC©þ c-;—ú·á;—OÔsÀYQ˜—†;Žì;o‡$°¯Ã !lé8[ñ`ë™ô8þš]Ä64·#‡"Ý_UC“xÝäL?‚Q0žáW’ýš§jGÐ ¾TªŒ†P N/{œ|^^ïBGÝ9Þ‘yõ30g ký€\‘¯&¿€&Ü…:ž~YÃç(dswÁ2°9ô¸dû_œ!z°,\LT®—XÅègÑ/›=˜QÅhʼnV˜Íík¹¹¼çré1eA©¾SX¿¶™úí/Ѹ膞̴xDN:v\_¬œi†[1!êøš…© É_w¢‰´ôÙ#»AÍUsÏõc#µkÝìy9Ÿ‰jã5!°ÅÒW®`@ \€t-Æ‘+˽Ehaí«Q’”DJªØÃÓ‹tŒÅü8F†*…»¢‚¥ØÍǸwo‘»2ó¤K´üàÖùa$£–œK<–ÄÈ=ΤÝ'ü‘ë¹ÜßÈ8j–Y<”»@Ñ/|-Î3Ð+j¹åлZé¢{×§8.ß>Š]pÏ ËÐj u7Pñ4V¤tk‰ÖRAW‰Å>ÍAÒ'õBáôTRÉ,ˆ† kwº'Ik7jV±‡¯eÃL¾ºï"B¬Á(âz5Oï@Õ¸~ Nª®ÕÓ9i9ßPwªØ—;NÒ/´®•¡-†ìÀáöÇ]JþÆëoª¡&}r»ææÉzO¥  ½†kÜvòžC¢%Á¶‡'Ç‹¡ä€™vhÙ. A;‹j$¤tpï¥ÊàD\Û¥76­ðT',´ƒØæ¥Ù¡ˆ¸îf=f³XéOhÛm»å%„¶N…ðúnPõêîs ù¸Ý^ªLŽÜGD,oR'Ä58âãåa‡K j–ån©$£'bàŠŠR8éøq°~Œj-—;Ú å‹ joÑ•Zìb'8»QðÚ¯ÚF¤Gk¤‚m¹ÌF¶T/€E®¹Z-ž™¼»&yT…¼¸J¶ä{c€ïWm5GœùÁ;Qaˆ5Qá-8W/‹[.îÖ #ø=€²µ^.P‘(©ü9¡kZ¢îÚwX¬†DåÇ·&aìÂŒ‡Ý‘kÌô Z*xÀ^27f+•d6HÃ+€wðÙj¦Æª›EÜžŽÿaœ­äSDò¥\DriPÝ5š _$é;ÆIC˜Q„^ëX3õ†Æe±(ùù9¸L”ðòs(”’rø%¨”0ðÅkÞ"CÂð Y¸™ü‹‘Á,'ÁýÕéît¨=•ÈjÅ\T$‘ç9x¸O¸æ¨ô«ù48<Í›tAœ¬*èyŠ`ìÙ$‹è»êAèUBájT¹WD¨•ëÄ!‚¿„ÜXÍþG5ÈymÀß±rÂ3€9°V3âü«¨MùýÆÊÕZ­¬ÌþÜÁÒU´"xƒ–Zµ¢Õˆ<ÙƒºÈÙéÕÊUíå¹>*¿Á& †î„Ýàþ&Œ"Jd¨k±,½ £³[AÔë=µ\8á‚©mýïð°t¨«cqŒšOŒÕ’zèåíà+IõN?¸îÄÈúûŽ<)ðµÄñÆ#Vï¢d!-›rxà ›`4ó:´mº¥œ>  J°ÊêQ÷šÃSs-…9ºäõ2ŠïrPèå¯eƒÚÒÇxÄ6uPSí¨ëŸ 3ÉË8 Ï:6p!ŸjpËâQÒr¼´ãM5¬j T,èE<«‹h„’KTÑû3ÏÞ„o?Å!ìàˆ8ô‹¤óÞÀU­ÁNƘ«ò Ùƒ¨¢ª†tÅ“™Ê†¡Öä€e àÅuŠYûRPâëxx7˜I- ™–‹ò¤EߦAç;Qº.ÝЊƒÕæ-…ÊÕšz*ÓŸ)ë΢ó<××›ž»‚‘L l¢\ eè.¬l•yfÒ€°| Èå@C˜ÛˆÐì4á5ÄT°ÈF蘢Íqõ¡Ûùyª9„®¡Ó¯VéÂÁð§ÓöügŽËØÙ&~(BÌ Œ+¶vÁ Ê0Ú_RÇ.aqÃFÁo#›Vgœÿ½å×n1÷ÑF[X@³^øº“R2+“Ô<$ÝÐJK°åŽ<ødž¹ÑtYÊôŸÎÐ1NÏ6!¥@ Ü\A+/Ñ‘²[4Ø¥Ebèçæâœ@ÿ4÷p°­sñ–ÜCÖI)dÛÀÚq8™Ę̂)=E]4Dþ3F†ÞDwwXÕÂÍQctÂÓ.äÔ€ë¥Xžü‹=Z¨¢p]N’ >Õîì]Ò׳V²Î–th€d¢˜wYzÇ„<øH#{¢ß¬è=hý‡¦3rV2ºzÑ—/y)WUf‚¸yA¾üÚELܻ˂Úö\ØÚ"g'N–mnœ…yvÒºÊ<3WºV.æì¥‘b%š~•%ŽØ$Ô° ÿvv9¤+Œ’ê_ð`:µ`…m늤ր?Zδ'–ƒÚ%J×|oC DŒ„ýîèRy‡‹ÄûÉæèï_!oÆN’ÈÃ?x“:¸qÛŽö›©Ÿ¾`& Sç@¢ÊƒnŠ*ÿ¢¼6þ°"8]Ã" „<ßéÌPÔÅž<4€ªB× 9©ýsl³ŽyÊý’O`è ä´6® …, ½Ï×¶¹äØ€çܤr–3Ê,kœ7d¨Õ¦Ý†i6¡SÐi©Þükõ~~÷Js4±aâ‚sŒÙ2ðƒß’>ŒEà™„x™•KêãJUNwFWJK¯Üä WßYD±~[Ögr'ôf°·@^F ëB/X¹;V!W‰RÞOX}³ ¦Ð²p¥3 <ëÊ+¨f@u.ÂÁô†hðVšNéÖÍDñDÜÉ5ª\†9W&tæm!äûìÒ:,=ÊЖ5´›5xQ{ÞtÄ(»7Ož–^b4ÐÝ¥¨Û[È9ÆUxQr»fŒ&@šJÒ[HwFúEØq¤&vz0Š0ºÍŒÉ‰Èr¹Áù{‰ZøötV•ËXBÄþÙˆ¹€#ÉïÃÍ¿¤ïi§ Í”·%›ÝËœ±#«ì ¿,€¾*QšÑíËD„ÒËœƒ²K&¼t‚ß¶â&¿E6Á*°áŽÙí—œõŽÛħ)>±©.ª†!Ö¡y„0u;£…ÃööÝB‹ ß­.É„ ù OílˆÕ^ò-L Ë[xÐG2~u–D×I„q·C™Y øÝâäþ°Û dÑ"³Ä«’wÄ9‰(¦æk­±ù_0Ê$Þ̺@C)Û$вëâ™!¹OSlsÖÈL¶&náÑãošÏÓú0ýÐÜŠù'Ûåý’tâÒ+›ì6#YȆs@dI,:é„ß Ô]½Ôûø@²Î)×µŽ|¯$/(ôO]¶$Ȇd¶(gŒ’6æ%^-¼V¹T»XŠ`IjÕ 3‡ý“¨fm'ÓT$9O'+ vó _MfÒƒ µ¿ÒLÖÝ·Ì£=«[p!4&šdÛ¢dMb©h<Zѽ[$‹C¨9žÊd2ÌaÝÚ¨†œlÁòqbqSî;LÒünC7‹âÐ}‹4ËÏ™°¨ ö½ f};«¤1/zôÚàØtps*„`0—_\0ÔPû*c» ÝRÀGŒ™7’0$®/ÃД;CtÇItô‘ [B¥E(A O h|ÝØèÓŒxðNN2dŠxâjUÄäΞz¤6’Ú d(òɤb8$Å„žr¥F\²,ð&“e6XÂF¦ì|-úw/©ä¶ØAµ³ÀL4lt‚R»Ü…îK6Ãûýn ~Œc<ðctÐum–ÿç4Ì k©Ñ&KsƸÚòÙ/ù²íÔ8AøÞ£)Á‡ÞËk» & A–Öp*ùµ ›nxåâ·|mþp‡ß].ê…3ÉÝ2Q`ëÇY†b™vœU ióÂvLz)Øäž…©I•MÒ_–G`‹Œd[iÞaUɲ(ñ‰Ü–´­=à‹ Ã®­D % TŒvUÍB^D™á²Ñ@ìØ…qÆë‹Öl3ç‚#i<ýÑSȃîbÃyèvÜðïÑÁ®GñM룓¨óÂön¹|\ºÒ[ºç8©9ßùò€mÎL)p»o½¶y×õœ¨k'­ ÔÝ©6«±Ÿõ¤žhˆßi9öÅÖu—¥]€^äøHííoŠ×¤ªwÜn#PÝIOqÆ"BÕ‹ánÍ2ò2ž^hnw’(5Êð\·è†ÐXhuS.2ÚpÚw/¯Üá¢àо`>ä*-<é–šú{ÀZ«µ°æ¾wÎ>Ôá·eëØ/YÁÞɪ¶Ä­véûËZ ÝqO'>„‡‹*këd\—=Pñ^cÃk 3ì¶z8 Ü“íÙØÛë‘í%aرus¯‹rpõE?ùŽDðÍf¸~6!Z;B÷ݰR;R,î›ôÎïæœÔüžzv™éd7¶ kñYßøÃ‚2þ ¹bÇ1­úlÁ·ó2S k¡bgÒ¤ŸYâ¤9G–f‡вàãM–)ë´#h—¨òéÝŽVs`D“ƒ-¿Þ¹É]ÃFU«úŸ%}ŽNN”ê"  Íëzª(¾^ rF‡¡ŽaÁ*@ßwÇšÐ;kc¼>„7ztÓ <ˆ·ª`½âÙ¸{t¢\þù³ÉV}a¥²3é–{?)˜˜º*>"§Ï‹<®ƒ]èšC®qÌŒ’H>ñAFIQ?G$ =íFÄò:£Ê½¾ß2>Û€éL5áŒk¸ºÌî-y £XA·âž¹ýðò8û¨¼pľep@_l½DOíQ¹Ö0-Ìá‘lSvð骚Jü¼ËÚ¤ë}1Á>îÍENeúø[Jr“—0 ÖÇ¡óá½Ð¥®vÀÜ}]¨šò‹å¨Ç•J*©Qõ½â ÖT°­™²­/Ô{ÖiAÓO ÑF±J.ûsÒñ%ÖÉF«¸ êZ‘i(’g{§Ó³  vÎNà™–xH€s %Á TÁ øjæ¾ÛO핆€¥4Ì °‡M ê·UsVÊL ‘¡R0‚kpÏzÒ[Ýíf¬h“ز%Tìêîû¥IX$t“†N´`Ö`êÐHX“fîKK쵈`™¬»_›(.¹Ê,¶³‘¿3·fZ;UáéÕh íyí–aŠ)ßÒ Õð*'™£!|X çà×½©É‘u@u(µø˜/RúhiX¨µEnž-þVd^_2Ðk³‹ð4æ^¢ewdBçI”ù¬]Ȥ?XZ·$;Šhöĵƶ"á±.‹Ã|“(x`°ºKêí}°v›R·YÅÊ»Â:èºíFìÞ0T‘k¨„Œ Fvc|ÒéµEx½g `M9ˆßð“ Ö­Üˆ(‰‰œ–<¼°|ýðÝÈŒÁÊÃÝRiuÚV[6lÔyîh7ÖˆÕ5\+,½™)Hv“•ÿÌ\ÜÁ0ÈÞ$B¯)»;[IN^^{$ÐèñzÁ=ÀI/Z#8¿'1ªRØÒãéo ·  ¼ƒí¥Ê“¢G@ ¥÷ay”C¦]Ã?«ü\c‡¦žìËʺ‰ï#C¶nf·x_[ܶ¯6O–56Ó*¤¡¸²e³žËÓ“•—5 Tê Ïž~Ñ5Ò)‹ŠÓΜc.è@ç‚q‹ókÎkZƒÚJBg!8EȳÌC³âv׿¬ãSÛ;ܯÜT^ÍëqÑ:¶–]¿˜„â´ h¨±£é ²~¢Åê"U£†<6¸|Ÿ ~v[€¬¸üU,sClÛ &ÄѰ3(Bÿ~²óH‚ú^×É&À‰¾$Ël¬È‘Ÿ¤=Ô‰` òõ%˜3ÇÕÙ­¢@'`lš-7¸3¬Ì¿¤v!f²øå(ÇÊ€0Ïéšµue[ÇNÁi·Óè0n8áêL»¾2…¨EìX“Ú·Êgg1Ô2 ¢OãgßbPFMôg²UþÄnuˆ¬râÙ÷Â%/B=Ìâê¥vª,e-ôþ¿›s)êÍ"8d2dãVðq¥ò‡£TX ¿sàŠvÏF;A8c"ÜdÏ«qF¾~Íÿ2!2š—˜v=ò±j¥ŠØi¡*M*ƒY9?…Ÿü)]C'?h±¼«ß-)™ÐKÜl© –‚‘qÍý [mÑáSj`ûb´ÁÚ!w^Ž›+ Ä0rczß›’‰ŸÔÞâÛy¢GíC¬=Ô‘oqŰ)´“ÅW»SÉÙl9%3÷’zO„fQ\Çoº†wYå–JÞBJBáî™|‹?=ÂÈ{åV²ËUù-7:o¦Ÿ[ì@èÀž¼rc‘왺°žhé$ÃĦÐ÷AyC>¿ö ‰Öa3šM"OtOÏtÚÝÙ´6;Ôœ“!ª=ß¶§°¶VÀ`Ç»«ÚYÃtÍh¢‚ íà>ÆI >üÁžÃ\Ê£ü¦²‰]™Ä¸å2a m85 <ÉS'qªïbvš Á!F»0©zß…¸Îknj@¸ç²TM„ž½¼„‡IÔÁCH~Ìþ‰(E÷°õ%†f]s%_æf±½œÌz¥_ ò‹d÷£ŠÚÄ 34…nƒ×n þ}_q1]† 6óô|—óîFÏ9¯…Ö§¯ìkòÓîsñ4? Çi]±þÖ„÷'Ï6;5Ö4Scœ ÊeyØ, ùAûB‹ø6•]h•Œ³‹uÏéˆZu_j’º‚e‘ÓÚZ ‚’í2½'¿ÆEâµok{ìšC€‹%ä²f¢®‘rú_ìOë/Ë & FÂ: /ò ÞáDâªF¡_‡Áw‰ù.ÒpºÇ.ÑáKkÂíùUé«\ÑF€ºàbQsör.^òKè» ¡Ú&œÔ²)é½ zÎËBØ ûhΩŠ£zgRƒ31ëÉ)Nç õËѦ|ÞÌ ‡‹äHŠrÌy€GÖnG™^ouœ’‰¹ p¤—W\¶tñB{ò°áôN‰ A¯åG? WM“œžŽ´¿wØL9^6<”LŽ÷C+‰>’,¶è¡&û³¹Sõ +”vPÀ¦ý.ÏlWÜÛ3ØÍIÃüÈÐ÷§d²;MKWZfˆ±qÁ/tTF›l/;èňœ×À‡s¦CDÎóeÞ¤ Öz¬tqôâ%ÙœtÚn&¡PÅè0̇‹hãÑ»úÚÍȬީl ìˆϪ¸-¥¨Ýz±òåÙë_‹p™nœ'Œw&×'OgG—<±çúî œesw£EïH¦?ûwÃÿ.*™®YRßÎ\"ôÚõøv7øqn6—D^0<˜}7²cêˆ|;‚?upõ­z¤a ÁÛn OÈ6ÙŒ7 –u†0mÝH·±sèt4to|ä¨-ÒTc×CwäÞܯð6Üh 9&ÙªÑcv2ãûâz:Üãã×^âƒ/]±žA†¨Peô*'Üu2¸3éš Í‡"ùËy§øM_itâ¥6'U:|™÷,šÑ’3W×ÿâ½£ 4Ë3ÂîFökýíÍ5GÒ™Ñã÷—ØÒÑЙç\69–BŽ34X´p~(˜GKö8ú¢¿½ƒm‰‚UטA:æ;ó§CŽOtü”ä »AšÜLçK ËÍ/ë}*E?b?ò=¼gyAkH‘O@=4á) sú Ñ´Õp–xØ6…ä‡m€E«yǬ7*Bà0»"ÃåÝŽJ¦÷wà3 ³ºÎßÍ×CÏ÷Àø¸æw˜ÐÓã¢á’zGmÏM„$ÄÈ–]ýu®×NË0øŽ/”÷±qØ ôF[8-îü„Üa½f'P÷€è_´>צ»¸9_+R¢=ËW6SK×ä&L&W}‰œ;Œml7kh¯Åì\H[°Dæb]xÚ¢ËJE¿¼Ãszä NÞ™$ÙgR¼À‹Ó Ñ´ añâl©Sq¿0‚P²Ø¿®–ÃßuÂèKŒåò 3eV›‰ø¥"Bó_¿â뮯 F“¬pq›?! ‚û8µYë[ãîñJ§¶÷Ô‚ F,ôXŸÿ#¸Á„4µáJÑIq A²zHú)ÍŽ.Ž;Ø Bë¤ ×âĦAHJ\ËD ¡î“›ªÑ×HVJ úX‚Ÿl\ËÐ*†ƒ,Í™HöîXÐ÷éýùrôÕÉ”Ë6—ér÷ 4ÈMÚ:¥äÄa¬Aaƒöˆ?¬™£·>ôA‚‹M>péfrÒŒ¬!e³ƒÎ¹F òdÖ‚ÊX¥„ܬ”wç/ b 2²“‹»¥™Ý}”U‰ôT× Ì‡½Üå˜?ø'4ÀÅ;de¨Nå÷®6u {½|ÿ¨{¨¼78^;¹¯.iÜk'{íÍ¥¤2‘ M/RŠR~‘(Àv.ÂŠØ öXgBTR>™QäQ]$d¥%»/’H›¶Aî¿k ¤?¹½¼Ce°±tFs‹~OìpõõYp,òÈ¡ ìqôL-Að?›Ñ QLÎdwôè»'§Î°óÄרXI‘ÙhA rÙ+.q/»æcpvškжÃDzž‚·ˆ@%)‘þ–Èä’»$ë<Ø›¸W¯r'Þ»…Þœ¼ÇBBĈ"ìhø˜yÍÛ“ãX¢f/¨ŠpðÎjcB?çc§7¯Õ›r7ˆï¶ÃŽÞÅn&{Ò©ä—‚ÝNxrÍ=O¶°íZŽ_¾¾ïÍñeá#RÃ5‚0Ñ0-œÉ"GŸTBT·»S…~/Ì K=AKšs“¿aÓéªétƒ³¦£ÌP¡Æ€þ¤éä Ç%–ÛËZPçC3ö 4fæËy‰„ôv3ËÓ˜¦À‹º•›M‘*Sø‰Ù»XCÀ>éÍ„aU¶‹8—üTøA2¿ׇk|!ó3oÐËÔ,tÌM0‘»sÔ ¾þA¹OegÙžX¡žHnÁ¤%·Póvá‰À@HN;Ú\£Ô¶—$DmW/©ÓqÎ.bº)½>|Ó·&È~ÔɳvŠK“_Ð{VÔ-ˆ“…%½¢Ù¡¬“²è(\<ŒÊÂëðŽš»W¨ pÖ Ý/…ànÆ1åiàÊuÝpÎèiP1¯^’ó:˜Æž°)Â-rFP`WÈTZ‹µ[€–VÚñ滢odA˜}KùåçÀ=@>fIGøö†·U€¼ÕèÉI¤·ý#¥Îõ‚&è—\ÁqnÐ_F“-?™bÒ= ~˜pê¾Kìô¿q¤&o¦ JŨ#jT–#Uú`ÙØ!ŸJg§n±wf§;Ífk¡.eO ï®nxÁ›ìS q/X0×Àkª%Hé˜ÂÓY <²Õ€» »ÞF‚¹Oaž%¼%¹TBƒÇØó\%¸ü"~@ºØß8…Z•‚“aïõƒJº†FDZ))ÕªL‰€­œFÊK×ÔBØ"Í U3g$Ìy€NñÍ0‚°åR鍯å0!"ÎGA'd¡<\Ñèö#Ȩˆnèphø[[k~22²3R®µ´ýmÎ%á/¼R–Ý#Jò"7X¥Z²=P§2‚1<%¾j2‹4xÿ'Þî0›´¼.xT.åK×f´¼L–LEeˆ;ZÁм#Ž‹^î"t§é°û€/p¬ziS3€çáÆŒŠÌçéF¾ÑÖ?/ŠÊXéåžTT¼]qtö(ĉÝ\t6 «‹/»y¾hÀ9¢<èæøšp>¤ÑÊF8ÑÙG…œU×–Wh€Ê0­+qðJT~…ZtÃ9æ€SÃØ8k¢âY¶ZF‹$Ù^Ô ^«ïÏK§û°ïDÏèlÄ\„ó„ÏôÉ7¥Èô²mïØj888#ˆñ$­0o>ì“–(VO؆7%¡S1„¼}`TÁË9å8³péúa§æc “C7¬}Z~ý¤OÞS—À]ÖÍË£%g‘>ê^¹âÎ}‡Vô:¹lN‰^òpÑ®R¹^£ÁB¡C½‘óóˆ 5ƒñsÇéN5>N«)쯇1‘zê@°mÊèUcA6ûzû}ÁŽÈv3L>)^v7XT„w!d3³ôôa°Û÷Þ© Rë±]p1¤¢Á÷¡øä_üþsqry›4òÒØßxGkçw4¡Ó)Jkì‰ƈê”FŽÕÍâiñ]Xo††ôoC Õ!J †wE¿Û(š1Žîq«áYàRÙ”hg¾Qy=§›õ&´ßÿ P…ær]Šÿõ ¹¯{d¼Å§- äWv©Lö”ü6^pk¦Ù-Å@Ðæ4xLÔN4JngB¯í€s@ Þ WÆæå,%.¯k‰ìoçágš"¯|§Q"þœ" _¿e?(7¯:Fäe)•®cµÓûãúãëÐÛ Ô'å´«07.QÀS}¯'_:µ¤b#y¸¡ï*[­ùÚ±~'Fé˜ÐxBgÏF—Ê[­—¨×•"ÝšÕÍ› ^¹ñ­bþf½ld; LãÈ €>d;mF=‰×l)’`IMfª‡êõåQ_Z5îéÕ·Å£[5:½ò¿í# pNgùâ°£Åz¾kK0HVÊI’³£“…öûà–F¶ÈË\+jœ{Ní‚ܹ[Âëç/ÆÞF(f…€¬ ^ÅŽQ K0UP'šwßö—pöÞÕð$ÄÌák àr ±¼›V´[l`7OL÷ïzòO^ÜlŸþÕŸø•ü‹ž†˜)¹'(Q*I83^ ¹ oÄ ÐÀv’©öšÇp:ú0_ùŠÖb,°*¾áŸ2ºÅò†4:0ÈF¥ã{r$‚ý…9­ÁìÄÚ@Ù ºü»ám²Ž]cµø„´À^eñÏî‡N›""Œâ bI4_Ô°hY^° ^ ,»pðSfÌq[^#n‰´ô`ï½Y­u;|ÏU‡¦„$Пc6Ð+¸zª)k„}”d·Mr*0{C~™àŒúX$¤×|Q%xc-}„ÈDÈT'8ÙQîut"¢™EgSè½Ô:Í”×v ÞðþXW:oÑÉUÍ¢¾÷wˆ×{Óý 9\ÑÊžN£ÁDc+«jùUÝ5ÜÎ@hðê~ûzÜ—€Äu«¥ŠSá×=7-“Lž‡î»m_èá¹Ùg"šL[ÿ‘#ºX‰ ëA}[aîõ™ú½¤¯;ÉŒV¸|{ÔAVÒоàÏôuzEÔHýr~´ƒY|I„'÷ÝÒ.»D)Á DÍ-ßßîï¼ô3ï¦jP:‹°8ŠÙøu¸…VQR/ƒÄúÅnyÂÏt¦àÅÝGá™âX˜]ì·ã©ŽÈVö´ÃVÍ1vò²zùˆÁÓ‹ˆÙÕ¾³{´<ëu¤òS^ÊÝ_rCoC~)ùj »Õ„ë¡¢%Þ’”Òý&ÒáÚő¤fo³‹ç3ß;‚©®ØCŸ¿ÿI9= ñLô.‰.<€Ç¿kޝyìª:–Rxi­„è¶{Ê¡¤Ý ‚ O’ˆf3©Ä8ɘ1œcá=þúíbF‚P¯YüònIáãY÷>¿Aï›oïzâû/rA¼ÜZ©Ä) §F rØh)Qij/tИâÇ/ô¤·süë¼²,uláÈ®Kë—‰gGeG gÜžèz‡w¯PqOÝN„žµúæŽ1 'åáÂ>3î ]/×øù‹ó]VÐ76+|ü„<š!Q't­lóZŠáBvÂkæ^•dTpÃÕY Mh¼˜¥åv€«víh7gRÝÆL‰*A\Å'_I Ð=µ±^•í­»µ15abŸ‰@Œõš#ÿ‰!.Ú,ÇcBTÎ9ÜÅÔ"­Órù”È£+4L SlͲå?Œmx¢Í} ý ã;€’b:yÇñF¸×…AeþÊnlcEG½yS¥ZÑÀ¨Z´œ -gD¸fPKVX󲵎ح+) ²£æfô“Àm`V94‹JéÖn nÞ‡ljz+³SÑœyâUˆî/ô„d9ùB-Ö›@»SƒÐ¹Â$8…a‡DBìíÖ~b¡]ºÍÄ÷]/)=1;v¢Ö¸Ä–“N x `ñ÷FÁàA^ù¶‰ÒjÀ<ÊâÂÞc¶Tˆìå}šK_ƒ¶F5òI.8›‰‘j bP«‘m»­GÈ22ɨ–W4 »0µh. {ŸeêCîžõ’?ÉÑ~‰J¸Z`–zÁÕˆVY—1°Ê®£ÂÆÓ°=SÕ½ò°ÕÀôèïº Ó6Z»°×J³ûˆc€_ÚØ-O44Ú5³èB? ^:U¬KJ…n5?”¼Ç!ÇÇ&Œ>ƒxA/¶gðÂazvª'ô7!Ž´nE†Ô¦·âH„McƒA¡†®AÈ¿A TŽº•â+êºí+hPÇ{W‹…£-ÖrNkrT¢ˆ¼¡‹ºæ¹Þ¥o,VGøK„®q±»W;)¾ÓárfžN¶ûîÔ×àGmÞT±qq÷Ș¡·s¤/ÒS«)0oÈÈ6M9îjô1š1¦—çvtnâ6u^p¹»÷n3Ðð{¿/?y–² blrÛ± ŠeVI}ÏN‡q_ìfèpÕÚò¯ýêÊþ{ì2TgY¤èó¯,‹G@s~Ø]RÏ[мéå/ÎÃ6éÕî©OÈq•U–îwO¥)Ú:€S±ÚræÍ ÚgFáÍY ºu*³ïB,ÄÞ 3ì TÀÕÔŸü}È4S㛢 Ÿ»UÝ\çå’¬D,ýÆ øåË\¶,õj>·Û……SoCû™íçšdŸC¥2@»´¯[°az°ŽVOþ_è #º¢Méõ¦OŸ4Að£Nf!v&jN!-TY ðµ0^16&ªŠ7ŒZön“ù‚/ø™ÆæÛýú9c»V»ãå°®Œ™xHêãzøú{ØÂ<‡|RÎ<)ëGêÈJéåì=yuF·×5\hø2†¼ëç¼Ø·}E(C/Çn½è]耳0ÐÐ7*vô‰ó¦À<8ÌWDĕɘj' åàinLáïJâÖÆÌï®l¾æœÚ>–2¿ •.‹}O=Ý"-sO¼©B¶¿a©ê% ã½x•ÔæOž?ç—Ì $MnðÏ÷Ô¸ ¡¼FZá9(þ×o2²7ãL±‡Ñž¥·Ÿ S¦¸qÓi({R°œŽÔ+kTçÕÄ~µÚÑÁžá܉óÎåŠvÄ‹€ž ‹`±6`ä!wÑ ÒP¶ ×RÊÑ(¯æÂçžÍàÁ~-¼˜4ÞÔ@çÄ×–FfúËWº°±P¥;++U@îA.–F€èfHãtæK¾Ýk>`g0êÌKîÊʱÎN†ï[2ƒQ}ví5ðIùDÓËt‘f/C~φßh”/šó‡è9ß$_cc…Ì™)í­À–›ó‹A‚>þ(cÊ?4´-ÃwßGÈãΰ- ¹o8øÁ¾Å~”¡™«oàâíKÏÈ/y{Çôtvj  bÑØO-tuJ9ÑpDSuzÑl •,|Åm‚|¹¸v6iP›•°|BŽ(•ûR–“ÐÚúär¸Gœm_’o6»PMjfÙÏ_hÎ?Ššï–§}’=¯ÉÃ_«29µFžGˆN L ï¿ø3}/³ÎÁ ò°E£—“n(8ò‹7y8¿|›ï>óßýC)ž0æÐÏ€|iæj'rU…)Ôœòf¸~ØFˆó«úøá…¶‚ÙJöÜ"NƯ"?ÖÃq-fý¼@í'5Œã™´¿–Ÿ³Læ+ä} an:ÒóOÓ0BŸ{ÌëN¦v…CØz0ÝIFF‰CXpëÎD³Ëéÿ¥o–—Õ¥6jÛ˜"T˜#®¼×Û-¹¯ÅHQ-ö¨»ƒ¯‡áN—§WÎ*vG„×¶u³¶!$2æ•›ôók£÷ó/?Ò†ÓvãL–¹±~77®n!t¾¨.LíZ—’Ÿ]êQ$zdT»W[wRf°ÝeG/¿^bY¸Ú¿»/že_úÛÅë$¨¢—ùAŸ|¿fYæE<í-Ö&¾Óv\˜y‡™{—áQ'DA|ú/Cˆ“¦2­Øü“†6AV¸²¥UIœÆØ-ñš×¨ëÝ•47׈™´IÅë _)!/òÇ·cËÃfùÒÞáæüêa#]»îšªÚPáðEíË,±€&€ù‹‰›áЀ &Ñö÷.._`ɉ¡ A¿4£±Ú—1üLvQ c[Ø‹>)gÎh-í/ÕüÚA,[ò G*ã6AÅ…#ý¥­ìðð6†ÞM]JÕËý„¨ @y3¦Ç”xk¥7ÅüÍÛ…xç¹$)½…-»nË„Ï^É£À ôƒ‰óõagJQµdUó ×Ûþ̃{Õí£s7΢ îƒhÛœÃß¹¤}ÙOhX_©Ä3ßžYêH=ipøJ ØD«A§¢Êoçãy¿ùçÿì¿ù—ÿýùßÿÍ?üÝ¿úOÿøÿüŸÿó¿ÿÏÿù?ü§pé¿úÿÇÿõ¯òÿöoþáþýçø»?TüÇ#ÿ£ýwÿ¼üñ/¥Šçßþ—þÏþQþ£þQôþíÿ+ÿßÿðü×ÿýÈþËãÿñÿõ+üÝóÿö±wÐáû^òFæ¨^7n’HÐ…‚wúˆ?üFdøòÃÿ“üùŸúÇ„®SHTWò¯NT?{±ÒÒfD Ûð(gŸ[ì»-ËVãQ›èß_T´hÔë»`ɯ»Ö•0ߟ´ÊYÖ‘ ‘?V'ª8$úñ =ü ©Y¥Ÿ¾ð'ä}^-zµ® =+ˆvЉ°÷âž \1ZØå<—ú€¼ìåJ˜5ñ¤Ø·¬ŒâqÜ=y,\öÍcÂ.åæ*‹o#µÂÕíg Š§lÔÿvÃïʓޢŸSùÄGò²#²«™¨*Ü`Oe;/¯†sÊ gTH„¼Õ ~óùõ^UóízÇ!£p¨—Wֻϧî—c{Gñ„dA¢Ã'äŒ"j}}@>ÈÑY×TXRQ8(Šlmùþ îÄ­ê_\Ë»ØGP¨û>4^¥"ƒ*ÛL®qÔq¨'0«–A?êj‹–ë‚×ÁÙ©z.JT;l¢û~ó£ûàf ©°û.1›¼éFQ}â ¨wNçd/Î,NÕ—¡åQ7ÿA‹ÈsÐˇ[d”†•É ÅSòäE*‚..©ƒKÕ‘âºÜ7;{x,ôm?ÓÙô]aÔ{’g ñ›!'? o¼(šQùˆ³ &~Á‹pWгÒ㛌yj r¦~ë%wÅÔ>›õ’“”¬ NáÂÒ™•…ÄR/Ù°ùsÎzI&(iO‡’ /èà}lyØ_~”ÃF•O1ëœ?úœú5­o’¿aí»ù:±ý&ºàÌË­„ÜH)IbšÅ‡uƒÀGù>~¡'Î¥‘HJÏzHáú7ÁŒcIúX±ýÆîIþEMþ…ǾƤJêòMòWt".“}TÅ€µÐ¤h8hš£‰ð)–- ö-4^¤o° @å%'Ðòl‹Žcï¥MåÐOëýâMüÒ'ägßÅC1e&ô®úÍðž Æœú ¼†økò—!Äè¤h#ˆS ùàYŠ3YδÊ=ÑVÄÒ H[QÛ±UÍLмNœöNÊ)š”,÷•ÞÇ–‡½&Î^5?ÿÚ>W=T9¸µHs¿¦6ÿ‹5Ëkm'íÐgÁ‹þ#ÑÚHõZ¿ -:n FpÔ FЦ•òö%n³ýë)Áà Œ©õáiëÛ1äÓÄÛzZ_Ê8Á€ V& ŸÉIh±EI_Ä{ŵ]ZÕ~ýxN¾$QkGq~ŸiîzE–\é8_û ¹PDîk¾Fé¾€>ñ›€ûÉ“eùšQOïç/~ñ#È;@[µNúïâÏ ‚ãË點tl´ »OÃ#<6à‹*㉟l¡È/h¢R¯\=LèÍ8K“ÏåYTÏ¥p' u¢ÍÚ^c(ÜÀj×û?Ó¡ïmZd ƒýé_H›ûá:[ÿº÷{…Ë|E2©(¯©/éxÆ<Ë´ù©ÿ6„ÝÎÝ´"Ó'òÒ¡üXê¦ìWÓ§_÷Ê8A¨"òfpùá Âù}ÝUn‘ûþ߯–×L fWÞNê½ð&x„N¿süØ…|A…[sVoƒÝ®uýþÍI®~§¿Y5^)§?w°> šþ9ÃÚû;ÄW‘¾¢-ÛoŸ”ÝÏÀTY©ïªGšË²Î£& ¦A‘ßAY\J´.°Í!©ý>„¼¢ç‰Îe-M~Øçàéá¦)îÈA®`í1÷«b{+’ ‚Jð» ü2„ÊèÖF»giëÃßCüú7+ãù_l-l {8ÿÌïvì0ÀÒ2’£¼J›íýŽ""=aÁr@R,™©Ú±ß¼©gmŒ2.Gp¿9ºHÃxÓŸ‹‡ŽáÿÝ–¿ <ÆíEXÊ[؇YnÚ š(ÎUlf»ú—-î Þ ¥(#iF³Ç¿ñY3Ö.WjxÆD¥Y$¶üÖLÀyø¢ì ü0Âó¹Y$µ;½ Eo´Ÿ¿ø”[ZätäÎŽ,%*/Þ¿p>® ‹âFy0Ü/ø)Q¿ ‡ÛžÛ’ÏLfGpeÉwž¦Òùz\ôÃk D8ÉEñ×§xaôë4’B¼¿ÊG:þZ‡ªÐM˜ØŽA„Î}+ñ4zx‘©µ²Õ#/„±€Ý>Âz\ÂÉ[þÖ°Wm/Róz|Žð:žÀwâgy‰†n'ç °(x Ÿª\ú-k¹øï çVËÿh(ϧ%úÍ5PpúE•±%¬“ÑÉÜ\ö޽w…‚Ê c„K^åËÉ+Uˆ3r9#ú!{ÅŠ|!µbluVšò|¹z6ý—’>QÜËkMþ.ε6_˜¿´HÁ¥rfM`B­´iö©XfyÖ´ÌÆ¼çwÁ¡A7™ßŒáñÁ0Þ±ã%"¤ÈeöËyŒ‡ó¤ÏþÍçùþ{¦H/ ¼m!-ƒåfnç›éIy7 ¡jV«èâÀ‚F¢ê‚Ì«CUzeý/çe“‡qú­ƒlø0êõeyt·±K3º\‰Ü/¢(J‘`Ý› ¬/q£Žœ7Kc°êE’q-|×_¿ß¬ÅÖX† 6•†(Â…Åß!Á‰ÞŽ nåµ²ñ>ÅùӓߺA8´Z÷zH ÄÁß;LUc§Œc~™ÜWËmzÌN_šŽ ã¦¯Ãui;§âeä²¹õ¸Í°”O£œ“ñàntï»Ø½äÅa:œ+ý‡©bX,]™MíMÏG²ð{M/fœTnÌrGW"ĸå5lññ =Q¹ Ð;ÛÛÓJμ€äwZÖâògÞ]ŽvH"ôÄÅ#œ^Òð¦™S7+ÍÓj1?)÷ôò4üä°=¦Eç]è×ê$êá]3TÛÒLÝ#)üõi׿;©8=ñô4ÂÛ‰c° šõ'<†>àaŒ]m­þ Û™M§¯G-$°Æ$Æâ Vc(¡ ŒHô‡­F…a–¨W£‹pÃÈbìÀÆ.°nü[›’ÖbcÜ™˜Œïî^÷PÆE.¢êQ„õþùõߪâë!™#4öF^^7nk‘…—÷ n)QÖ·šcùI˜+çF2M*cÏràÔȵ6à±Á Ú~^¿^¿ÕËŸ¬ š¯Ñi‹Õ jV]S…ßt3°ÄÞk¥‹'Kô[¹y¦ß•­x’ú>†Ÿéö销š-¹ç(•˜~x%e  ‚£5šÎ‰fR࣠Ž;{8ÔCáëbövÊ–Î2ÉÒ§`a†¼7 ðÇ2øàÒÒ,W¯dÙÒpÝ$"à šÑüÝüËÃ鸋Ÿ[´<›‡Šßß" Oå×rÚÖMDÖD“R=mÍ¿ábTƒ.tVðiȧŸÔàÑ›‰`‡Èžußú}/Ø(K{i„—ô‚J/‡þê]˜p͈AWgGË­ $8 »9"×i]x‰¹z£äUKŒ+b² |†3pPµ&4Œºêß)øù½Þô‹Ï¹î6ŽòÝñ'”[ëõ¥«ˆÇ…*».«BüœÈ×u®yX[„c!™¼}‡¿!&Äa„vÜFi¥È7h4P¡Y/ikz¬Ôȯ»ð'5tjðÀ—ñvâáÝIæù:†ŸiöÂCÐ2Šø`Ûëü«Ð¾(5=$B‚4ÓÏÙÛsðჇc+‚Ùà} yx«°@aªjÉ!l«Æõô\—ì\s¡üù\8>‚í·j·à„ö¹|˜p=Ÿ¼·!Äèï×’kªâB¿ eo¢'—Þ¯&ï4òlº%ÂTäŠþÕ~Ù®çr’q 8¥`®| ®]ÁäzŒpØ(ˆœušZ‘Üë³ÉüÞÇKo­š[.d 9…Ã.O÷(we8odèí—!pö{cñÁ´ Ÿ!/ò ¯¶–cøAjÙY­$Âίo<Ü~NÔÚûMñ÷F@ËÌØó÷¡eâ3o=/Öó& §‹¿Y}Jngïx¦ÙTæý+?: xÑGï¿hƒùÿ¤§Øç æ»lw79îƒ,pÕêf½·…ìžjgÔ2lŒÚcÝí¾ãGüóðp €|šlq‹" ×p¤Ö˧}v¯6âôá@ùæôË“TQjÞœJ‡Këu,h‘§Sª¶/\–íç§·pÀ+ªÕ=>f‡N©ÝÉ»õ"Ä,œ›¨q¯³Îi„=WToHÔ½ùô¦’(©¼®×mdt¾]Äè‹á‹Ù\ËW¤Ò:¹©é+^]s£„ x3ÄfDè!ôÉî["¬×',Ñ ,1V··æáº¥T¾žY~ä|ó/Á²(#›ØÆè+ Ö²²ø“{ûž÷¥†Îj¦iM½Ém1cA ¸]êT&&è:9Špb@¨IOjž¾-&»~.Au_Š<2aj/o‘×eíf£”Sy\x’Ôl ÆS§A÷9çòÖ/Ê·ØžH”I#í¢oó…UD«ºpxó  Ê6—h<>rLWXt®y¨#ø`†$³±“k!…Žƒj§·¹9×pR>† ¸Q‚Ú[ñ‡S à$Qˆ 8©Íu~ÑÈ#à¡´·”#38¬ –-Þ€DêP¼3Å5óõив¹ÀâÏDä¨òR@yeЧã •RŸÉ•^­Í~q²g‚âiƒˆTƒ7Îò³h„§m¾YZ°”^,¸™1é–®H©MºfÐûWêeAn¶uh„N‚¦”Iç`ÅûA.¥jkøÇ»Ñ3H¨Š<´hð.ïn«sÓ׺¤‰#jÕRC´u†“OZmÅ -R9¾gÈÎr™29É#ÜJŽô_ÆWbÊ\XA²Û%yjA<% 0šFdD.…¾&«AîwêãC/âš3wÓÒRsøž_¹<2< ­Ùü$b)ÕJó©â<ÐÌŸÐཀྵ%xã.ÏΧ6ÒR»1?> Ëêc“R£ îZ*DÁÃÆblC™hí1¬QÞ–…ÒLüÊÚów˜Ëä`È[‡?œ½b{$Ä¢þVg{;½‘ÝÐdTíX'lhŒûA ˆ wØMÜ­b­5Tð6Öý ¢wøÒÓRÍ®¹ÓS< ¶öŸqµÎȸ;˜}Õ¬œ‰Ù´,Ò®Uâ`Ä’ì²§aOf@„Øj½ü}ËÑŽŠZ¯_Qv ¿zêR³Ý=ÆmŠ­ûfâójdO F"õ’g'«f½¦WF'²÷³“\¼Ajk½5D RKw,…c£Z¾Ê¥ñ{ñ®ý\ƒ´”_pjÌÔš÷Lƒ*[ÎyÐŦ$ÐÖšWw½ïõ¯ Møk,¢(þœ6aðì\œØ…¶€'ªŽ8– ü½XÏ»Q”ŽXà̤kû7ƒkäé8ˆ‰ÜÒ­iÃ1«¼¶Ð½ãaô Þ—îÓ° ¥ ÇÀfOÜÀ"÷Ìý°¬¹× ÊɉÏq½s„Ô#¬œJXy TæxÝrV“J6 ¤Þ'x^”w¬~ñ Ï`PÂãn®x$/n ¬´a)¸8@\[°LסõŸ?~Æ3yŸp%áþž™î,ªÎdoæå"ßúYŠÚÊÈ»[G~ËZó¤Ô€ú6·5> ?uCI#-Åy.í1áŸ:ñïÑm…™sØÅY< ¼‰óOhèëºï%®ÝÌz¶ÒD(Ôâ _’Qº†µÎgÇŒ6nÇÃÃ냥k­îL²¥„gâæÏ•Îè¡Íà³JC˜è¯Õª^,Ô†\íÓ­fV~ÃèP=úZiÇ î™.ÞàKâwàê›óBˆd±ì$.cí¡{i(¨CëÂq Ja\;hJ ò_»P=Ú¯íeðS=°—ZL‰Ë‘9ùe‚ÂÀ(çìD/ÛWŒÇÓzè~@®A½cà£ÊÛ ¸÷ñØžüò@3æ„BòãuXúðå¹å#-bìÜÙPǪLKi®7ÜÕ’(/ƒÀVPݨRN«ª}úÐ…wÚ h©Df/Û¿ãí]>3Íõ"ÜD¾ß›ŠÆÄ­7Æ-µ`g Û±ÆÅxtáfô=ÏÑæ¥šÞ=ÇnhO†½¸Hr®_*Ç’ºJ#aç~=Cìî æ¨gÉXðfTÞ²å >ܦ$zËlÿ%À#J86]3Ê´¶°ŸG¹¼œ^jÄ;JòpEôgÖÀ ãL`·²k¥\ÙûäÃû=(ðÁ_$Æ@A)B¬Gh¹ü§Nû/’ãÕØÌÄ¢þ´åÜvèB§Ç—2Jq¤ÊtI*ƒ®bÖ 4÷V‡ýOØ {!79ÀÕ&Qc”9¸|C(^°nâR܃vU1”Yà»Æk×Êçêt ªjB¬¿^“áÝ/™A§„¨Ä(0”=W×ÁZgœ^ˆÒ‚®ÑóöÊž¶ój5ác™!#ÛKÒ€“QP¿3û%=ŒI& |¼pȰ^Ò©l„l±%þ´ØKÃÓ8?P£ˆ„Š×VQçÝ¡'A¹x º…s—AJ)Ô\l¤¾'dŠ,9Í0ÉÚWün¿“£ñ‡±Ñ8Æ/Ê„\¨Lƒ°=‘·ƒEë­(—¸õHƒX¿&Hš®'Û#NÕØ¾"|‰SõËçÁà; "ùºELv™nF*vŠBÅ’Û©œ×¸8Э|Å¡]ÍÔfÑåjá¥`wræ7)4,¶Fî×!›qî@'.$a&àÑ8g¢QÌåmŒÓ%TeeòùŽJ=ÔH(½b÷£VE)âq°ÍÂË]XR ¬+lØ0TöqÞ!ÿ=ŸËÖ[¯âZpÖˆ|®;§˜—8Â6³§c¥ÚIÉV·XïÜɼ^OÒ%«3/O»NäüœJ¡û\Ρّpv"÷{&@ŠS|óKÀ„E²gg¢Q˜oØ3k á¾Ócf¡2µÿŠ\ç‰o Ö×z-B‡àWk C šP;Ùr´Jeu%ò} ±;Ï©AŒÈ,„ÉWR»ÎÂ|ið¾O±P$£\*Ô0Ø)”qSá°50Š€ï9¤Ÿöe&×ö¸hì.¼ûù0 £Õ¦Drbo‰‹¼ku¸5l9Ö)Üæ+lQ@¤ BÛCÛ;ˆìøæ¡üw„Jf N{£$kìܶȣ>pt¥ÜÞØ©†SqS—ƒÍ<ôX Œ_1#¼Òö—Ôû|¥*ÅŠ»âÉRRˆ¸TòÁ–S˹qãÃ=ò ˜¬†³? Ç/Æá:¼ ÚužO†ù\•É›g»$¹ý€:éL*+…¤[ËÙ|x « ÂOB Âd¶4繬}uöºÑ¬@ÈfØ]º‘!Dòs A¡JƽQ“C6=¦4Ø EoD&:G¬þœ7à®É5a¡Jòº–Ó‰‚Z\0Q‹ŸBc3? ”QµL‹ÿqIg-úŒH¾FËéžy/Ú©‰ü¥ñ5üe A¹Ñ\zâ;‹¹·bÚàÑ6‹²òkƒÅÔÀ\¦ð1Ç!èJöm8Ñ\+ õë‘–®¬¶7ù šò]föìêþ¡“g)9ëÙÃÏQ¼ÜIJ©nµ‹Á­Ô"r’×x I߬oäV”æNÆ+ QZaÒÄŽöÝñnB}0q'¡4rtÔO5œŸkèŒ ¤k¢Õ |57ekVükÿ5À@šNAk\ZÐíã†F­mo czCÂ7¬$“¬G8ž{eHËvu½#ñ²)yä Æ¬zDœÒkË=ˆnâÈEôB$xµêlÿÁ|“>¦^ÇÃw±×Ùvö(x­Ëï%ñ;ýì½[oeÇ‘%ünÀÿ¡^p7šå÷ÌÖ“EÛ ÏÐXîþ< ªŠ²Ø&‹ê*–%õ¯ÿ2.+2Ï9›*V‘¶6KñH¡Í<™{gFÆeÅ ÔÈû6cZ†š$¾™9°Ì¥cžZOg|»(Iw_Í$Yle]8<­8Üo_'„#î„.L n.¶%A·«ßæ’ÕxUzÓ°…>Q)ŒiO4ã~”ÒeìNÍŠMõ†>„·Û~ÔxæÑô¸ÚùÖöö'ŒpG ˜4‚ÄYÜcRG.½FUš&!ƒ¹ MVóú°º_ƒ3ÀèÂàDâV²¦ÎP†äš«ªIBc@?:cµ1(~ï­i:Ì—‰ˆo½XOq‘Ùß§ž#"Œæà O­w½ àí|ûÑÇ`“iÚ²–U/7N5°>@n–wYüÑé‰Zc‡ 1õç£ac`õƒ”ÎÅSuŽ<'ßt„`KÞaòÜ@;X½iï ›±X×LOY»q5ù)Fp|b <Ñ‘½y¥(%á‚("Öqâ~¹6í¿)oàšIƒG„(ƒX¬$™zÖ;#ÌH`Š›‹©+eœ.WÅ_‘/¢%G³É¶»CÁ:ä=Û7u¨kv#¢$`$ì¦k"4Ê “VKTujq"¦âà•ɵï1[ röÅû­êF ’]œB¶D¸› j˜nT„ƒ# )Gw¥•£zãöu~*Tç ×FÖ~ØmÔàÒÃf"²ÓnpqièÅF ×0×TžAîÍ·GkhçÑ^œ ­Ëàö¸¸÷£)ç'óÌÐÎ]ÖøzÎ2Ñ‹pÓêDˆ²á:Ž @0êxTèK¶!m¥çÇ€Ð\¶l²Ah0 @§]uvìMâ Àc[…dãád/ö°}{­jà5Š· ZÇa5l‰jíŠZ<”f}n{Ô§§h÷sf••H¨.Bå¯#ì°ñe­2Y&â³ tn±àmh#d+†Fh±Vlm´\êÂ~ÁÌ,¢2=lCEè#ªÍx\ˆÞÚ2-y°'R¸þ;@ŒK›Ì^´œte‡IÇιР¼rG>àVçkš8pL ³0%|7m‚Ò¸„º:Žß*¼°¨f1l‘WúK–yØþa‡x1(4…}‡¶uÓK§À´§‡I@wÕgÞ¸…õa«ô0`¾ŸøOcpÖ† uôýÀ¸%åw6µ² TÏt"EYšŸj30ØcàI;Œ¢Mò×õ­v(k$Š.¢QC Äôz4|õ®H¯eZÁ‘^Oˆ OúµŒ@2:G‰oW»‹V3hMè(V>¼.Ì/÷+ e¿ilm£n6hnv%òœuuB J_3 ؜֪›Ý¸s’¡ÃéÓKB/OäoÀŸæ:U°·c†0Uì9¼7”¦R!š^,Ö¯œe€$,‹ è®OøDèõà²E‰¨cŠÖÔ ‚ˆ 9i^P´ST&l.w|¡(Wºƒu€bA •:ª@iH“ÕÈM!ŒF¯lÝ\—Ðß·B™à¨3Õ‡=Z >Ô•©J1 T¶Ð;8Y«²¹rÖ·€<h5å½·¸Vö$r§HtYØ–Ô ¨$¦Þ˜ôÄú\ØÊüb(‰µé¹Ò—‡ðd}–P £<ûú¸#ÎüÛ( 6Bn€Y5Õôž”>F@É £]‡ç ßê ôöÎX¢U[Г PpÚàÔöh"°[ñý…ÆR2Lþ%;4i™‰@Âä;„ôä|9oÄ žn@‰Gç³Y ÉÒ¬>fÞ¹eTÛ ý ; Z‚E €› DZöc„dGñDŸ&rtÍö„:†ûÎ'ÎÞ[i8Ëh æÓ”l-øç³¬ÈÕA4ä8Ñ,RŠz$Ÿ§Ív扖˜¥0K8ÍZ3=i´_âƒ\ó$\€€ÆÂ· i^G‹$Šü-$º8Â`m:MhîèÑÈÎFÓv’¢_ 4ÖSU…– ë]EOz”àNt v ´—æñA‚ÖˆÊÈEŒRzx"zÑ®ÞÁÚÓÒå;,7ŠÃšíWõ½…ÅRXQHùõIéàÇPïˆ1âˆüFàl3´ ¯é~@ã¨V-›fà>è'7fÃÕ fÚ í;s’ÙÊ*¯|¢û΢MgpÂhQF¡!ÿ]GñóRqŸ¦Ü€·Ú)çÌ"¹ž[º(=rÎ~mQ¼ l¦f £\¶ÛÇòy¢ñ²EÃ(¾YìI‹º…dˆcmyy¿ï#,·ƒÔj†—×ý” H¢?7[H¾àТ`,d‹` )$ó©¢4pI3 µE![!{2âê@hújŠc¬.þ„Î¡Üøa6u5®A²chød![Åe´ì?å ‘ 9ÒPlG¦hŠÐ—èÑÌÈl-ÅtÞc5}ç¶”]Þ²Õ±9‹‹jo…kÅp$Œ¦KrµEq½Àƒcx4š…ºQxE‹ð8nex†$w¦J4íV1%(‡½°„^nSuJ´("7˜óš%؉'S" ”ŒôJÖI\ì&ŠbA˜IÖ“7eψRÈkt3Ë({ªH"4A§>Å•t­â‘„uÙˆóàÄT–_k ÎqU¡…)Íp×#Šàvò6Â(©€ DOZÁüD­—ÎJe/ ”űP¡:ô;$1G’¶!{P‘ ÒNpgî’†FbšHÉ–dzŽðE jF “•«-YkóXúÉE]ùT¥ØåM ¹d‘‰>%ÙêSú“Z£ËØ,ûs”€&3Ø"e…>1¥5j¦›˜Yµ)8ªö)²£DˆXóTÆ1H“òA>n1-2ØÌŠ›´©%cØÌz×clSesT7² DÔw]ˆRÀ$¥ž2BZ¦-…A‚×ÕªìŒM!^Cž}¹‚9l—*-æ]fÁˆ9 ÄÔÆ6@‹ËìžajÕt=>\b˜~÷¬ÞäŒz“nÈ0Ö†n²V•iOöé‚Ù]ç {rƇ¡F‚Qõáb‰†:â_CPUS;99zjnå10ÖÑjb„6‘7²ÚÙ¨ Ã2X)dk‡È•!K´s¬°Ø™¼E AéïÍØ˜z9ÚÀ#|4ƒÁ£ AóŒhVC :r ÝöÞ[°XA¶Ë?iÑ"0ùi)šM–E!áž:$ð –ŒºÂ:­‘[‰+#¶w€ ò˜[¶ÔQ2«€]51‰cC+Rð»§lyŠ,䆃ÿ4Ïu‡¿4 ǹ@Ÿh¬ ‹©¨ hN™¤fAÍ‚¦7¬£’{©á=iT&6!‘VMnH\ ¨“0 ŒCmüm¸¿H+”Á6åÿ>˜Â©ñ&.¦È¢•^C>¿>‚¿qX‹Æ ¹f$ /JAßß°óiÔ†ÉÁõ<œ‚ÍŽr*†h¡Êöëý¤ŒòéCäúڲКs,†Êq·ŠÔÉ„Èxr”pm 29°¹`l3 î²)z±,U@ù1˯ƒå+Xƒ÷H«Y˜ÅYˆ”9ôµ¬¸Ê‚h# „ê,åÂ|žáí-awÿRå}–£À×#<*ýfFÉRDb õ¬¢~œ,?ü/ÿa±Åî›f”ž¨ã!n"rÀ~ÓÉ÷z2@Å'!\4ÔÎát&ÿ´+uâf9H9§Âû Õ~ëÌJi>ÕšJIÛŒ„z•%tubÆàE¹UåFwOùgГ(¦Ž`íb`§}O6d‰fÌ«§ï97 bu´g0;ÕÚçF‡'·Lp "Œd‚ •ö$4Ú¸¸³eëè‚–£º¡+ÜØ‡S³Y§¹:A(XFÿ‡p#ú&fBZ!{W¬ÙJwñÀt;õM$²¬Þ(¦.±hÖp@êÀ %ñÁ’6‡S³n‚§¯‚•½'›ù"Üê™ÈÙóV¡Ï(»ٹʋ!v›AIPŽ´È@¾îý±ÕxZ3šfád'ÝÏVç?/m _¸VÕ–«ÀY AT¢• ¡?L5ðƒvÏÖéURÚVб6.𗇵ÿp§ñb0«u"Wí"èˆIØPÏÉP ñ˜uê#h„‰ÚI0ˆn«#{Æþ æ7’Þ°Óm¨‡’F2r­šÙ¥xñC¼7ÌLxšò²ùÑ“žà1†ëàé€Í¨OÆ©J€£œi~)†¥ÙÔ2r„¤22}„Öy`GÕʃéÎ4­»c›bêúÙÊXB =[¡Š—=ºeáa¤†«¥Q­ÈÞâêò†ÚtHÞs`Âf‡²Ý ÕÛ¦6Qqæ<Óá8ã³%s´Ë€‘Nƒ!ÎKíÿ™É•Æ[æ•€!ê M0!Šá#m¶Œ/úņ¢¤¦¯£î%x]…^Ûx3ÑàšÙ¹†5HÁE’°!ÛÇ7D)L®¥‹–}SdÃÙ?8¿B 4xzmò¦ @øÝè”ͳwsƒ{U#gb$Óƒï9ìÁìMyªßEd–oÍkÈCE<´‘“$¬ª!•Š…¹Ç¦Gí{TeìXêOpè_½P¢×ÉÛW"åcÓ ’«3ÂÞxɘõFFp?çcHi‘%[&‰ææ-ƒç$JÊÌýμ+«‚Ø[Åé´À½Ám°òoµÍLM¤MéE˜;!и4¾{Óà2 «EXÿ][žRoÇ zʸÄkÈ£Çy¤¤¨q“Œ0uPŽs6ýDq¸59Œi?QÚhÐgýtq{‡‹hq*°î–;†À¢€™wøcã­IÉr[]›\Ã3YŠhF€P‹—²¤¿DW0 £È ûÛœûa™C{¿8ºbiäÎÿ‰I›¬+, ÌØ;kŠ|B’ÜÔÙÃŒ_(òɇ¿†µZÙÀ¥)[P##/NµØÆ%Ë•^§ß3@1œï`!<œ‚|ŒîÆýÓ/~S?ÿÕ«—Ÿ¾~ûæ«?œßÞ^¼~¥ÒO/þrùjWþ³ÿxõêüúâå3?ëògñŸº<û9£þæ§?yKÿàž-üþŽþíõú¯.ûæY|öÛgÿ÷ÿ-Ï^ö¿øó±¡@ˆ—wÚ#áRò³}¹^&gûãÜ%ã¼¢iýžþ‡þÏ=û+Íh$®2¸žŽA´2N:‘F¿XØô;ÑZ~«<à–^ªÎPºÃŸf³»! ‡ÁœŒÏ(£;u+)G…!/EÈ|DE úbê|·4$‹a]c\ˆÖÞ¨Š%"wÛÔrªMÑH§­Ùþ´`Zà'®)>+f3¸IÖ-¦JU†Â1Š}²AíEkB X:¹2EWPe{°¦^q¸ŸdO9°›ãu!ûÔ 1¢‘qŽ‹Ž`iRú8;d ˆ„ ‚KÂñ&=࢔È7A¯ƒ7æÀÁ é†ÒU7] ›5Q.KS”*ÉÄ4á}¾¡R²a"’†a#[s›—ÅsÒ{O-÷*©™:g]ß%»dÃÝ\Hö©ÝØfذ‚R!Ñöu5¢ãB§ò­6ÈÙêu…ÏZˆµ qƒŽ6Üø1«¥íIîìC8ãÂñNxš«dZ Ê ’uÅœ¸ QÀYŒSŒ2X:™`ÔFæ£uÎwQ,'`S³Ñ{¹‹ê>È‘Iaž°a5í¯!ÙüÔ™•ÙžüLË£÷Bø:~P†#×—w¢Õ‘ÚJ·¢L+Í]>©6ÐbifOy  ×9ÅBðØ8>išê“}§a Ïh$˜iiA™f¬ œ²¸\Ò À$?6gId„lÐFt·ŸPçs¬vÀŽH¼£±jÂF†üÅ´º€W3h'Â"û^Æm¨Æ¡>YSžhÉ9µ©:(›!¢ ’Ea»‹´¡#}Þ@3É„€t:q1P4€_S¾¶à¬$ >W~T’ ­> ç¶lð j‡A‰vx¼õ—àø˜•Žà…ŸYω¡%ƒÇáaTöÿÁÃÌ–ª×ŽLñÔh›·ª,Y797J»äJêéÃJh1®¦0_± d²š1¦â¢”ê^Pþ®0@šÖ¼BKàˆ¶e ôcóûï‘x¶Äóƒ_3¥áø8ž„de[#½Í`ËÛÍFÈ \yh Læp[A«Aèçà|èó¸W ›Ñ^9$)óݱ „iyµ£®Yuœhä„™`™‚&<ä‰âÕ)gJ(\U@âQc6×î+¡HC_}?Ê‘R¬Ù]”èœá ÷ 8g3 Cä€r³¯µCŠ›]AÌ\e#·bp"€T S @`Ô#\"®÷®·7\§& €²1âý$ýnÕ I)l€ÑTcQla3íöwš`Õ¸nͪ#…²·hƒÔX“Ð!nmišÄÃThÑi]â-£»/ñº€º—h0Þ…éUŠÕ=”Á¶”AhSY‰}!*~²& ƒo&*{`oËFଂ¼JPÃô ø“µF0ŽšÚNdbÓ±fàõ"¡V‚&Ã7•N…eĶ¿£’Ô.f$L?X"0â­3ÃRš^±G™bþ@˜"`A\ªÍÚ8käñ”V£ËÜ´<Ž vÀ^JÎe„ àæ%þXgÈ=¼€®–# NÅDKHÃŒÐÉ„„ÉúI@y\/S8ɰ<†Ö f†ºLÀ+?Ôº`mBbXCæl“¹i­Kœ)íÑCš†m8. hGox4O”Z¦ÄÙßá0Œ&Ê`’[áˆVôE%ç/ ¶V‚ Dopž“ØîÓ:â¶1/}hÝ$¥ë”p&™ANÊhç³yœ†· x‰(óIâûòÇÃ¬Š£ën²bùHWPÓ€~š„Æu^†6¥i™êµù÷¿s#¨íN4j –÷ ÎÖš3Yð€F°~ ˆÚYIg&‚¶ìðml;R‰UÆV€¾ÈSÇŸ‰‡‰p•ŠºTc;"yhåCË,BlÆ2¿ .n #í©2ÇJ„à*Ëæ˜­]ƒžî?<9£Ä1Í´và›Hƒ6°È×ÝýeÒÞ¬!yݪô ÑýjûlpźÍÑŠKFh M¯!2eŒèب’®'‚@~-SK¯X§ ø c›BšðÑôi°L¡Þ6y H¾hKé1²¼+²ÌšÓ“¨ÎOâ­‰p1˘ŨfÓÜ€0/èð²sj\‚6l:¶¤Ñ·@[C(µd˜•º[Â"¸¼Ú‘Œ‚3 ¹<:ôتA¶/ƒ3ñdЋD„UvëF9ÍÌFåB¤™ÞáÂËvé&oð¨4Ã;™ÑIÕ´r•ñåúSn 0º³Á·`h&„ Ø üeú†m„Ül›¹Ê„:z‹léCÀæU^dêm±¤:XÒ ¨O–?%S³€YNT^žô•MŒl¬1ïN!H'ÏMJæñïÜ£it;IÂ_,Âb†0ˬ̦Q§üépë)æäL;c5¹Ís€1Ëè iÎN€Ä3hØ^øñ‰ñ²8l£MxÁþEô„Ñ´¤j"Z…Й)BGФ¤Z:aÊZ íŠô¦¥Ö‚É3íÉ—`§0a„ ¦ñ ÊÄX0§jG&F+@óÜ­>7©CêT+)Sd¹ Íüæ›ÕFŽæLTÀ¹YàäÁ\*r‹“çD ‡ý=zn0wðÁI¬SÀU]謥<‡òØÚ²ahЪÖýÏLšá©Nv*î š†•— žÑoY$ð?̯ˆ[Ùéì2Ce8ÏÁhœˆÖi †.Q;/°Ìa*wá'n u{tˆK­G!aˆvñ-`v5À>Jã&j“ci ¾& ^«Á¤E<íóÆlVcŒÛP"ÞÜÔT ¡Ù¬WÇÎêʘp³fÕÊ“DóÐâS°¯ËG‡|¶f&¼Öˆˆ°,f&†K'ÏÒÙE]1…l·4_úS&ü0ÖÓ²*œº½›IȺgÈÇ­l®æL/rxGÚï¡•ÂP¬™h—üìŠÇ,#šw`.àüçe )€_%+Ÿ¢nt3aób­ì“dü”w}(Ç®ÌNºÊÜ z…¢¿ù«©b9.`Þ=60ò{TaÔtŒÉœS—jj!Êe×O}Ô`!îödµ5¢¥'hKU%Ú8¯ˆheoQÀágo®‹šÛö÷Í"özƒ¥²!êó(ÖØ1™H®vL¶@$ô† ðÖŒ~@–䦎À¨ ¼tô„TCŸ…QcÂDí_ àv:m||õˆV-#®Â  2¤Ñò2KSbݦֹ`tŠŠšgËÄ#„È8l$¶À }óñl6ú™Ì·0üžÁ#”GÑw6.$jtéQ`5 ‡Ç=WÔ3E'ô°÷*ôM19á&Ÿw¤ÞèY»L§¶š€Ó'+ î—ÍÂ:Cwç".ýšõ뜶È`'¤~™iX -0Qx¹¡È¸ØPÆtç$¯xÖša15ë´ßo•àÚ¸‚l„”FÖK7WS/£‰ºmÚëåì´Ž@is­„ZkFÔÙ±hÖo+[+z2§²;0ìõ,lr'Òœ3˜îÔ¸?õÐÌ·ª£ U6ósÞ’y´ºôóŠwšžýtk0OÐqúiDÐÊl+L!ž¿GäJ=_õƒX7[‚`gOY ’GÜÙxcJL{d[¨¥Û¨ÉM¶²l¿6¥¸,`•èOBëmT …;Ó¨ œ ¾\šô¤’“„CSå*×-  Àºcê­°x´§>vJ¦ZläÅ#¸4øI?gÛl—¡Y.‡ ÌEÔz¶Ø¢³Í Ýv³rlÐdësZ(½9.Ĥ2òœ¡Ío˜È­In> ¢ÿükaÏ$,£P1[¡Ü‰44› êŸ[ñù5§Æý¢ygôì&h@@[ÂpïÀ+«‹á¾äDÛc"1Xw«RÊh—˜LOLÛF°Íƒè§tð…a¡h¥:Ê™òÌGT—ÙõÏÖ(•ÚgsÉ ´Ã;¯ÀˆÛœ ɪ„)íò¡‡ bò^ãLu0¦%Qj"ŒÁ cÃWn€ AËæª³~\Ùrÿ•³¦:>§à-Ì4}9?ÙBÏ!âu»›gå³1æW/ÝxT¡hG]oi¸Ò`ó ‡-0a ~®XÔGÐ5JUÎÃÀÏ×h!¢lèÚªÓÝó§“3¡f¨“¯¹›q´÷E&@M‚mŒ7›GPŽ» kI{‘“f/²bTPhfÉ´ÚÅÕ}õŸ¦|MtÖ‡$K…¶°4ÄÖQëW£±¥fQ©ÐÒS ¦ª×'rå¶âw†¬“šæ$«V‹6i&Âú¤]P5™=xÔ»=àû‘ÎàžîÆ‘4º2O¨ ,’0U1k¦dL¢Éú;Ô4!Ú¤©y²´%¡#Ð.2,òeÐÁ;‡×QÓD<÷¶ÏBÙ§ŸB¬Ãš%Ò¹»§»3ðv§«®L÷¸µ–.sz@Y„k™.¤)¾ÚåH…*Ù½³û¯:Œ0âliÄÙh„ЉL=¬ÆM^6 þŒÔ–¾Ž¸•` hµíëø2ÅÚ§–s4‡„p˜òñÖÉ:€âè8K}íÇ¥¦ñ“Z ñ:€´ô¤Š©&¯V#îlÊuø†š¬ÍÐCš¨Ô(XˆÍÒ¥¶ÈÑݱ½¨rÒø3§X775Áµˆ'ÑT(Ù±¦ªÈ(Îè@K\,V%‚À7(¡„Ï\28:aXóm¶6YgiÑš›l/T»rÿ$C·k°HzXÊF4ç`žjR¸ëŒ±OUŒ;ØH•£›£ÌÌY$ŒäïB'Óæ¦²å¦¶0ÈÎ|*6B3˜rÖtQYEcìEˆÔ·Báuoe]:á3ÈJŽ©fHk)‹OJ•ÏÑLî¡#IP9Ǫ3ÈǦä0̲¥NLžle ¹¢*ö‚-Ú¦ší€77Uos— Ta¡.3¤¢îL»0É&*Rê(ª£ ãD1ê[¬ anH€jðtàÅa»Ãaz›£Ð„I Œbz1î„ ¾›æ ¹(‚®‹gÃLŸ(.dÇÚ¾4 ¢¡&²0Zïm^ÙÙƒVÞÈ\Ø„è´Gû$·ÎG!@!ÎóÅÆÕÍÕ¤À냤œv¦ L­¼]Q¤9U!’ýܨ’C½ úÌê½ðs€{P©µGEW‚¨¢Ñ1j²ÐÙjl2z£áÌZ±@jáÎdÜÒÃVÉ^± 32x;¤áõƒ07t«“ŸÓ;ºiKy™X 4¡br"ydÍ ªâ‰·—{ŠepÙCWÎBìtêÏæÁ)5WÍîéh °V«7Øò*ÂÉ4ªÂj o¸áÓÕ§XÜ0ü×"4xú•ÌgªdêÞPóü6¢7S·¢Ï (rkÒay’œx3SCm Hä´8¡ ]¹Kw¨åÉUMP‹>o';»86²—#Ÿ)Lî2ªMÂ@œÖù$"­Wýô’õŽªÞˆ˜µØÇBˆÇGKVgù!ê"£Âeê¡4u¸£‘b•´Žv¸Z›å p)ƒÒ?B±ÂÔæ7i:o¿Ì E”ä¡6Ÿâ• ês*ÈàЫõÈQ¨pr›mê‘¡°ñÂLø, +;°ÿ FQr-½ Æ«GyŸðÊâÈšîå78‘TP›s.ͲeÌ©I5vƒ˜÷°ô†† ’Æ%¡ö´«ÒÏAÑ͈4ÂÄË^‹b@‰%›áÌÇRbZ›¶Ð›ð¸kc <"rÙÓR²„r{p©aHó'fêúÚåΘjR’«š„Ö›K¯t ä¬omÒøŒk«MP2:B@8L! dFmˆª›P¨ ’9=ƒ<++-Z1$¬ ýV"k¾_„#וG{•`˜9MÇ-¿s²Â¼0eT²ÖõÊêŠæhb?°ÔP¹è~# endstream endobj 77 0 obj<>stream ûõ¨V#N!S´ë¯I¬!‰É³™Ñl´'–¡d`P—Ž ³7‡"žÊ¼x§NãMÚÁèðÙ.Õœ‘7É*ß9,Á®ñ1¥§#,V¬?¸Ò»p\:Ø&ŒâÃ1ô3ƒH±O#")®D_¤ ɺę¦EU0J«0cºü‚…¤ƒPHˆÛëTPÃëÀÁÜá0X€ùC@;ñ¤Ef0¼KB„Gð²"½`?¡ÛGk²6šÂ“¼á¤€ ‡ŠÄPa)àåÌf²>‚ë„ûmÊDÑÉŽ¶ÕŒQ%A ⼣½õR@f:-Ó¡J­G#'ŒÌ]MO”¬ÚøßP Ó$E)#Ô©ž‚¼ªx nŠcK_6òÇÚ‘PG¨VuF9·&†·nšç5.²'=­þ eÙA:tȃÈýIÇØà … / =úàÁ.žê½Âï .{bH°€Åhµ‘ÑÈûbœ¾D¾T^–Ð0Î ±¢Á—èJ"[ê˜sî:B˜»]yÔÈM]{4nƒ±ºÌ¤h$Ö¬E˜ÉàâHPÉ÷p±!\§`1°f˜C P©jÁQAÃÑ0·ˆb3ï„ËÅGwœ¹ÈbE_~nïÜ£·ä¡…Ý^jXd?«(%á‚7éµñC´¨˜9Æ‚qeñ’lìHÅázmø'£S›û²¡×§¢h‰£a“ÁðÞ°o~®*áîtÆÊ§éa¿jÅ[!uT?Ëϰw×Ì öV9AŠžQ°µh„jv™ûY£7·— Æ™É#89Ûbr¿XkPõ5c¦¢Ê‡i QágÜ) å0vˆþYIç‚Õ|¯PA›Í©ˆ„ûëbc£‹3qbFtE¨—‰Cmg÷ ±g”,TuÅU@¯4¨Tkèajr7ÿ¸é?'26?E!üDÆÆü‰ò‘Š‹¨ÌÊÙÊ.ø2&ûá‚l”S¾‚kgüp§˜^%”Š¡¼I½^›|Ð$+잣̳Öé‘0·³L™Þb •²ˆì‰挄Èe`Gê¨äÏܪŒ•¾ÁÕÞ[ÄX_6ÿ# ­åµÉ ’@6‘<Á6ÐY¤f iä¹ÝÓáÈÆÇy CXQìóòbÈä’  %¸hëDST>ChwKff«<«Ñª²Aó§p:Í~glv°y ÄIQC&m0Vio"s<Õ"JZ ¹ ¤RG«øÌ5«3“£6Þ'óǸ6¹Ãä”`¿R>R·–`t†ÁÌÏË„UCŒ8©i©‚AŠÀNìMÀæ¶©©$ }ANz±B[L¨ö6a}Ò€X›ÉAáÔ$ਗ਼ԎȄB\Yz³œ®Ml0ú©aÊD‰ŸüÜ$¦føÔ$7* Ž:œÝ1Žý5H Ðhƒ¯”Hš• :ãQø9E¡ÆÅ"¤»‹˜_ª´8¥¼È,NÁ¾XS!Ûö×&oƹAeÖ¥¯V„9¤tvÇ8gÆ«˜Æ«µ™A†œkž÷,?Û“eT±R…v‡húë]"EŠÈ(—bUÖÔsž;pš•fžÐ)D‘Àz> ™šÐî;ç™w˜äÒ¦/gk˜8PT_¡éWªua "×pfë»»¥JV/óU¦ú²ˆ})G^óÂ…<9‹ŠQÔQßäf¦fµª¢L•øp‹½×ðB7åSÐÿöÙ,ƒ„Ò%¾²ˆ°À®¥fuTŒ­5â¹þTâçIþ”«ò\Ë<_bÐr´fÀm*'pø@À(Kâ ½×€)oPX¢E´¯»ó?ÕN{„r†ÂÈš‰]#œ¯t‡ÙsKú™jèÔ@¤˜»øó"“Åâ«tOÍÚ¼Ò*¬v…5„¬¨z7Ö)Ѱ²ƒj“µæ€2Å’\OQªe ZNJEÞ£;­-CŽ2{ra«êÉ£ˆY–ã×–3ÒG?WrF«Bý4,¹*/¾g„|vJ‚z/r–%ëMÝz´WeäÂLÅN%eÒÅüKYðFŽI „T°¬\:œÕe’ÞºÓÌ2ù\¦bZoñ\vnX Q¬ŠráúÒš¼´f×3-Y:à Ôe#,ÒvÄHd³«ÁB¯A{pˆÞÓᦴû¬0àŠþAáª1Ì— ÿ»Žˆáã«S!¨K I/ Þ o½K¥†Q*TÄbëÂh ýfÎæQ3ÿÅùåÕvGÏwaœJ!*¦²pÐ5ß©„Û÷U¨.ä?  œI…ëêUÜŒüWS†aCŠ›#U;'RW!•Qò­¸ZÂëܪåŸcg‹aÙA2ß!•ÀÕ#y,:BUÖNþnl’P; p±;$$'æ…ÍAâ”Sk’k;Xwpæ2>S,c˜ƒåK²ôèÀF„ æQs@-Šúä4…2•²,Q^YA§LªŒªY'P|BE¦’ê~UeôAM£ŽËüÖh×à ýbWSWÕԙʭðºé\Cì—i¡¬UÕ@Å©V:Txžb„îŸèÞ(g”ÂÙ[áå"ÕМ£4O7g¡é+8¨âqï— ¾®¼èý>u|¤Ý(i²G²Ô<¤_8¾iŠàë,œ.¶7SÀ£b…ª5B3W%Xóx‚àJ¯ÊIŒ>A§¥™D=’½-ƱVä5—†'½mZ·‹¢·qÂ/ú,o8×ɉ\*ÛջÇ5žÆÃ¦ô}Spf~E«Ý£W#5´a%iÆ—„ÆÒ2Ä™HI+ÒÚ*GÁ|«0³þÈI¾Ø¡Šî´bôsRTH *eI·œ¦èhå¾±YìŸh%[E´8CçS9Š”fÒÉš*Ù*Ú¤ëZŒ¯µ ð()rÉP“èzä6£¾ÊÇŽr>¥'¤áQpdÐO*…¯±0ÙLyC…гóçŒ)ŸR­žQô´[óH­5X$ŒŸ¶Ìc–s„Fl–7Õuݽ~UðE;ä¬k‹”ˆ¾ÇlDêu§ Œ‚´k§XŠæiÉSϘˆ„awuÓ®µÙ/²¿î¹8ÝèÈt©KTÀwF] 6ûs³î;D“&ᘾ§å¢èBEßYØ/ ò¨Ë¥æB’¾% »E»Æ$p,P¼}p¸(“üs€1:úe><±ZwEWä‹ôÙRÀ§)Ø*á{JY9ågvBMÞhHâE´l%I!a×ø„SM޾׿–¼Mµr3›P¡«:B‹FÌ?­$NáÈŸ—˜AüM]? ûIk¤t„ t>ñK‹Ô+«š$òô]£ŠWö”°%5ÇÓ+‹^G`ä¢<Ù浪˜œ=ýEÐ}¢ÆT™;fŠÕ‡Ù <^øØT“N]<—‚@aÖŽÒ'µVÆ6R,D[ù{ѦT:BîŸêÍu7PÔZ¾p¥[*j³J˜á‘KD8½8s4–M"1íiíAÏ÷\RužØ¿¨:w‚²ÎøªJ›èøÜ¬ð"+Ÿá©Œ°&Xî 1æèjD‡8Hw)[9™{GX­">•¤t 2¶Fl ¾%z`Ÿ0Ýl–È87ÌŽƒ—Õ`tsÑÑÐJ!µ)­ªÄýºÙ ÏM]0¥mb¨;í‡lbâqÕOF\¢‰™ÕTn?êõíd ËÄ|ašþÉR“ÐÒl% uø, ERjß‹¥X×2­,-ÞZå‘zõºAÀsâJz ãÆ™¨HŠ'ùK9‚ªŠM˜sW²™ŠMNäY(8i÷«o陯-Ëõ W§mÓ>3ºëX†? 7žpP/@º†šzèIÑæYÛûŠfX8S;®oŸ$ÕÉ#ÔÕðdÛ|R´RD ‰Q&Ê™žà’•ŸD-^`hæ¤ÁÑÞÙ2HÈ=v41›¸Dð Œaê8±$˜Yœ7/Ñס SC/vº'jÀkh°–©—¸Öu½«6åô54â#:As[Úù¢Ð˜ õòNź"UÄŒt§úŒã¸SB/]¦ÜÙ=™–—{‚¶µVISÓ‚s=:FøŒ‚æè…çüd¦B§„<ø—êJˆÖ,&g{,dJ°Îb4ª¥ïÔ«ÊeU ­×;Îöš¸K]­Ìª%.Ö?8ZÝ ¹ˆ¨Øä1ô(2›ÀÁ„&ä¥,Ä5Å™}>±Î±‚"HGú¬BÞ-á‚4 HïÃÉ¥ìw˜ŒÌ›•R^|ž4#DÔÚ·ÎÄ6Ê|¤•m$0y$œ97„:"ò(*§!hsu 2ˆÕµÎ*Ú"Pò#æ s ¿ËÕÜj:¥Mñh6Ùž"¦_×—µØÍ¥¬ÅYí5sÑÓh£V²mÄ3ðÂ{½”%Y\œàçô×ä=’Ë¡{¯5]¥|bßîâxDùè”É‘&§Hw °àÝLõÛ#ßéwÅr”„‚®>*G¯ êñºÈÆÔ¬œ›Ü-@ªTê°3Ô”®Ée$œˆÕÔ÷ ØÐ¸æŠñ„QS©g*ƒ£À9 5ðË™ìxêN$Ű,÷6Ââñ°2Á^µ{ L–CÏZi®Øƒ«–ãfæºMºj½Þmê®ÚŇô]æöºm¾jÅßeò¯ú«žÄ]nǪ²êÍÜåú¬¸I«þÔ]¾×ªŸv‡G·îþ0Ò݃–™FnHwŒ_¼•YEmÜ«k0À. õè¬I }€Ùµz©®^À«Wõ]÷úš °j,ÜeY¬š!«˺q³j­›LwÙW«ÆØšÙv—·n®šŽwÙ™«FéÃmÝUú.{{Í6_5âï²øW¼ƒU7âNŸcÕAYódÖTñz{UÃßu,rKˆO™b¹Ï5ƒ”˜ K†½Ó _õÙW½ûµPÀt¡xDâoàk3Нë;.öu+`ÕdX5.î²DÖ¬–;Ì›U[hÕpZ7±î²ÇV·U3ï.›pÕ€\55ï°K×lØucwÕ,^5 ×Lí»ìòU#~ÕÜ¿Ó7Xu$V]Ž;Ü“„‹ÜîF{k´i”Øž_ò$Œ+„Á–§ßÕvöü°ÜGdy(çµµ.‰a.7dÈ9#q ÇWoŒØß˜ƒ„}ð¼“v#’@ˆ€I®G× 5 ª%£6¨’O9è7¸õû”dÕŒn"U¨/r2â±ÂgN?ýåç˜W3ª¤PRÚèrB+‹x°L{¡›¿8¿Z‚F}lôLF £ÓnÚdңѴ`°T)› —Ð!H•zèa×P"_–f†¢îÛTvÊŠrDZYq§s°êI¬úkʬGU2û§•HQ>Ä{ªÞÉðлž¬Óè›ñÿP:"’ÐØN(k#/ê·†4­Ú¸a>—xŽ8.–ÿ±äX$“Ú§W;ÐãáI Ù m¿2ç^Ü’£è™œA“@JŒ@»GX¸Eˆý½Cî”:'D#‚nKT:j0&$'èÕ‚{ y´ß&tú…Tx× &Ùt‚e%L*Á‡ôè°3|w±’ˆ~ùÛ6S \¢ XH7“žS[&¥ÕtsË*å[ZŒÜ–4•‹‰KbÔïE+þ$R ¥Â#5.DZró •)/-UÔN‡Ÿl̦—/ºøE#ë$ |ð 8醫Ö]:mÈfÚâŒv!)'MB'”fÑõR´Âq{©&ô2Y²6“°FÐä¯m·Ð5&ÄB+4ŠÊ€!»A™æI½;–y¶ù=„½>©Í ûàNAÉ>ëâlŒ‰u0å6€ÆtÉì\EUóÁ2eÕ4ˆl'5Ǫ´æ‘[KG•~Π3dnZ!¼cI˜ùPPhª4Ê]Îþ:ù‘`yKà ¬WO2B’ Q$ÌçÔÍâ¶îb?jí u1«Æ‹®ŸI­NýâQ³4 y®K¤ƒ©°“nq)#™Y2ºy¤ò4N,ŠgIpk÷+„NúeÑæFSˆ„‹¼8#Y¡î☒• e–¤ÎR¶‘‘Bmás[¦úÁ Ó§%ÖêÚ¢ÐÀ|:4Q¶ÆŠen±™¯½n®Ú«–æ]féš »jíÞe¯ÚÑë÷Öùª%¿fòßíú«^Ç.ʪ?sè÷Üá! ™ªži"4c¡×Î1‡ kO³Á›;ÜpŠO½cw®ìã»6ýê Y;Kw¼õSºzžï8ü«šb]§Ü¥€VµÕª^»K #©ïô 7T¦Ê âF§XbŽt½¦2ÝAʤèÂÒê (ÅÝ aµ.ÔªvÐÈF9óK£c_*|ºÍ¡õ/@¨ÓÒªÀy¨d`p Q¬P Þe€\ ªbÉÒYªYÕ¢æŠqTÜ€i±Î8$lxMÉèŽ‹Ž„.M¼¤ÿHŽ÷…Zgý(lI`·?†Í¯¹j€4y£ª-0S°RE‘G °<ã}i p ÖŠ,ýû6‚›DÕ©ËŠÆ©A³D(†k`ÅåP¢£SlƬõ.I~V„KáòóÁt«,DQ2Sõêû«Ö\£{©Mê¼D¨Ñͼ̄F„ÂVm–‰·ìÆbÕêDT­ÎØ2WØW?”(ºœÅÈ6ƒ+;dvù Eè³×,­òRÎZ“´£_ávîü`ÆÑSh`Moå18aŸZ«`ËèNF}~ÔŒt²jÕkÔY–=4¦¯{J°*ÅŒ¨Ë ¤Ò2»G¢´ž$Ý­‘²ÌZ²‚ª'zÒKéÁÔâ \Œ|$Ü®t&¼:;”ÆYÔ Ÿ»;K…´»Y¬þŽ^§­Ð Ÿ´ÃƒƒàG$¹PÑP˜&,)åeµÍxÔI¡+ ¹^n jÕ)Ò ÿ]¬á-× €2ØÙ"E)ƒ‰¸[ô·4‡I~Å^7Á­ëß{à#ÈüE‡*Í‹A…^c¼˜ Å5³ ¼¾V£ 2†ÈFJm¢¿oJV#oÁ;|JXÐi²ÐöÕ‰¾°U¨EBÅbÊš@Î`žâ4Ë {¾hÞfúîY{'\­ÒÚ-ÉÄ4ÄðÔ;?gVjרaY…b¨Ïïr”q¸-Ãv%ÇüYauÍ‹˜8øÚW³ëHçW* †bÙ}ÙAê’¯?ãîvX–Ðw÷Á8gÓ¯;ùu·ûÛ{T~ðEô×û,T~‹õ  žNN7–FVòLg½¸‰›4‚Ϭ_¿¸HˆVÖFëE05«_ôÅÄ£o4kËDûØÅó2Ù‚’7%+Š' Q¸ú¬(±e˜”…œªoÁøA*…+eãÔ={ˆÂG£€±!† bk.¥Í²æ—LÞJD§vm å‘Y"ìíéÉJp·ò¼Ó4õÚ’ ‹I@«{¶úêNïq²¹3+–3aöÂ_ÓÑD¨u~»¿ËDU,œ(ýÆWft­ÆÓV¿ãü[9x©èCúR°°ìåAú<­"NLÿÓ¯Eóüèå‰KLÞG=ÉôãÆ¹ PP’;=¼òú^äé¾jÛŸ(39×íŠVUÃeâ¦saÞ+»/ko©CÌ °nv`m¸[>mOæU+b|ËÝÝy°èó}%®­ÔïqÆ‘¤.tWiPøCXŠäwU¨-‡T³Ÿb„”c›”û‰dÆCÜÓ~Eûwè`ª£…XÜ’iÎY‚±p¸0Îa<¬«8³‘£Óç­{' tÂ^³”…HbšÎaêî>ÍmD_˜tÁ«RóáJ5‚"ŸˆB(4~ y,‚ô[¤oÀÙÞG¡ìDÉe][‹št»ñ¼è Ö”#áàŸ­ÐvFÞýEýˆäGN½)$VÓÞàöhzF*²HÿLÙ~°¸—2Ëy‚+á<ÛÛ¿”O®Ö储b­‡r›#ÉÑr$ºsõã˜ï)”]5@ÃA8…´H›ù|”ú“èk¼Fm‚rê«-›˜ž§‡«7æb<sÐ'm<\-¢´3ì(—cFðñ @Œ<“ô Ã* ™,¡ZÐQΕpýR Á‘çuÐ#OM;ua³ v“#û­iÈq""r òàÈ49ƒ\]n~då&ê%ã é“­éÜ ÊFVç›x®´“˜K,”À£R6PÁŠÀ)¸šÛ"Ø“|\]ŽÞ”^;J2í²õlÐ;Ç>Pp¢aªœãã.Ú¶“vÔ92ï95ã»s‡! ¢» ÍM®C„±TRV•hWÑNÑ"Óæ~±>¡A:/œb§#n„é '<¦^P'&W³’’´+M®hxŒ£?º ( ´u¢ÓŸ›_O#¨w$gÙE§k ÕkˆÇª‹6e0žå/{9V‡÷ÖÄ`zI£óæÎ[ Œl‰¤õ0¦¨`œ @¥ì5­‹›ÊM‡–ݽ¹?±Ã Æljé îÒŽ#ÖåU鿆M¾#dÛwW¸ãˆ*·¸kÕR:fÉ~2$O8ÓªƒøIËÑÔ[—G>ÃÈ}‰nšóÁÈê/P¡Žòäìø,¹‚Æé¤´µž!ê wІÄf?˳Z*B2Õ*Ó\g3~çå(Ç14J€”Œï&´(Õ.íöÞ.ñÃI‰Ût‰PÁÁZýÂfxí£Ÿ.IáÞ5BñE²dœCŸ×å]@³j¶feU³X¾W¡"=ûD¨Md)ù–0€ÉL¯3P{ ¼:¹ú*Ñ'öJf‰×Dž›”«4©L±„„F©wІ³µîJ¸r°Šµ2ãdfwO"çæ¿gg‰'r‡k*BýE+o¬õ†3Ï4 JmõµÏ_D£Ñ”â¬˧4k¶%•ŸA®‘v*¼BL)=Y˜=0“‹ ŠR÷Ûkr²K0ä  Yé•`×ãÎ/1ÀátÆ2ÀÊÄ4<¶ÕÎoa^~Æ[LóòBr¶·1Š·r*&QdG‰j¬4oK9óšæ2õÕM£ük‘.9'œSRs‡ ¯´Ôêi5Ëìvн3ä)Á9µ+!kµ¤k 1í$êõʨ)™ä„R2w%Y‹Ó2:ÖMÓ¤^‰’äE“Ý-åidõàK6€clØF#ÿSË/ © å"”~’ ¤0rE:V§ˆh2J4\?Í«1gŒ½5®(ÄZ„ô%eØöú¬Èªô¦à×h=DL¤Â&Eu-î;Çë—mç¢t¢Ù9ö4ËS‹ŽX]4o@¢ió¨\Gû§Év¡VE“P=ŒIXB¹¯ð ·íê¤ÓÐü6+œÆ]¡ê1 ¶Œ\Â4gò”üᔫ5ýšÆ(xÚ}EªG Œ˜åj+Ï>F-ƶ=MW6Šý}·¨õï'×z# lrîß&§ZíwN¸­¨€¥¨æí7"·œ\Ò¸“uñÜYÑ•i‡Y«p¯¥j=½±$3£-[Ô/p®ôlN ”R½Ä69z]¨žwÅ ÑHµ£âî¨ê7»¨¦æ.J@?ÁÓS˽öQœ(èÕ…Û®å­aÛ¼MÇZíðÚýâÐó}[û© ÒãÔàŒ3ºl®ÃtŸüt<õ\Ê9ˆd󇲹[ÎãœÝ1þ»³nÔ¶ÉîŽ1^ÊÑv&Q9 +`uhRR‚äçNWF@Ÿ) u2-ʧ%;¶Iò’úœí…Q¦walj¨ºõ6RéríTB©¡>ƒ\gŸpñP6¸^F$;BêëÃ\¾¬Ö|å#º©!¹|±ÃÜ$×ïÎZä 4*ÚÕþD0ÝÒµkž—Ct³h—z9ÑÑ™ÊOv¢ K*^´­ü–Ö)S„s°pRŸ&óín1’KüšÂÛÚE‡qåEõuRºZªyË#Ûûé»eþEYƒóœÒŠóœICd7=©#g0ùí^1#å6UD¿àz€Q5m 5ËN±)@œΚ-“\ƒÑ6‡V`̇îU Û ,Î6€‚Ûk@ÁØŽ =Kw„©­QQHúkÞÙuÔ5N{2ÏØ~ÒŠÞ/Å>­_¶+ ʸa[P¹œ!:4ìù#b„è£ÊÃPêt””O›6é³ÝÉ9ëP~xïs­:\E‰¹¹¥òµ’TÝ´ïìð,B°çÏîçñú¨ÔGé£Â¼Bܘ–ÈMò³=yUE3A WDÓ_3ÄðÃ\ùßôßüôDQ ì.£<…}û$>ë/àóŸÿâõí//_Ü^Þ¼:ýݳ#ÙÏN$¥WÜ??ûùg·¯/_ýåÙÏ>ýô/^¼½þãÍí9=üÏÏþ•ý„þǼAñ2Ÿ¾|ÄGü‰}𤓕Q²M@ JÎfí×:…˜¡ºnÖ°GÓ0²Mж¤c +º‰Ò9rÿRäZ¢¯ÕÒ„SG]:W¢ñØü·J-B"!œ­f/Á¬u¨%¤‹@åYȨuùû¨x€¦ÈMÄó @HðVòèÉã$“f¨äeÌLÁô\`a®MZpç¢Á\±Â£‘s£~Hú$Q H$ƒºA)ÆžÊí¥v«5ªµ•ÅÅ•;&‰òÊTkè5uPî7I,"÷]+¦mu– ÿA5I-ïó””(È®|ºX^¯u´z§$œ!Èëâ&F1<œ… j†»9VÔ>z„4¢¨¡'B™2­ ¢¼µ7G¶~ÉÈ Pö–üLy‡Ô?Ð- °Gל% E)W Ö{ ÈøP¢vtö L—~ñÑ4&h÷zIj$7VIaò‰p¯/àŸNéPàÐu‰Ž3¥"¤ÅPR—aáv”E„!tp•QÄA½f³•Áªèž Z_³Ààþý’”M½jšLdA MX}'ʤɆ¢ª14%Ò ëâ’5/ ØK¤Z´ØúR$×ÁËOg0º~µ’¨µ@ô½y)ŒdaQÄ2÷?M¨Ê´³¤Ê$ýñ9a·höwÑÆ¸œAͺi¦¤2Á¥ú€ÖÓËÝäv4Í:QUm‰D„JhÂæ(³NÍ75ø© {™ZË 4›me4£oîé¨EyÍLÎ*ûô#Àp©Öá•ùY¢¦®¡U‘C–<^È0ª(‰èQ1ƒ¼ дBm"B‹(H†j¸Z± :&<-ÝVM„<'¿í¨Iî)>Gÿ‘½´Nƒe ›”!ŒÒîÍ„äêVnÔŒEóÔÈÒK-NvŠÿ `¹Á8rŠ ² W ÍÍ›eºÑ4_7RLmÁk§û ex N =¬E(Õ²\ôFFØPàH¬+§ ­_/ˆ!øÃ͈s>ÌF €c Ø;mc­Ò´J’O„£76³. c|4}O:¨U„ÒƒþMý>H¼À¤hãÇôâô–FdaÖikñ×jƒ­CüäÆ:…òp{n+ßÀíEd ö M„TT §=Y1à#Nñ8–IÉ0i¦–÷,(u#UžùK­˜à{lk™ÜÖd0÷juŽ‚B H ~- ðêl¶;ŸïóI?ÿÝÍ«?ônûX''*g¿iþ/?ýÉï¾æÿæùŸýç¿ÿúòªõÓŸüÜþ™&ùó?ÿöìw7//èŸö%‹§¹~{}õªÿÇúrÃx²ëÿùoçWoå¿»g?ÿÍ«ÛÝÿzûÝ×òûkz}þÝá/_üéíë/Þ^]¼zqñúýOÆ/¾º¼zùúB¾ÅÏw¿âÎ4e˜ŸÿÇ«Ë]ô½³üÙí¼ ïù‹1qÿ¨Ÿë›èõåoo/Þðƒý¿Œaçå}qþæâׯ/þûmŸõw÷]'96\áÞZö—úêíõï_Üžÿþà~ëô\伊ý¾¹½¼}ñÕŸ.¯î¿ÄW7Ÿñmp¥;«Ù_êë‹7o¯nßç`np…XÄ¿~ÿsûkÿòâôæúë›7—·[Vœ7__¼>¿½y}ßotùjƒ_h,bÿ#\¾z‡vØüîã.뾫úìæíëÿþúüë¯._lry÷9X²³Åfêë½½·š½ùâ¿.^Ü~zóöÕËþÔ§7ßnð…í,ë`_¼|—ªùÙ/~óù/®¾þêüs·ÁÅÑü÷×ôŽ0Ù;ÿ´Á}{¸ ûp[\ЊÉöÕÅå_¾º÷-ï–M® ‹Ø_Ü7—/oßawm~mº†wèÙŸÿòâËgŸýДúåëóî"\ýîæòÍGï‰nñ²ytG4np‘GGôèˆÑ£#ztDŽèFÑ-^›GGtó ::¢Oom…#úïçoß¼¹<õéÕÛÔ >äÚysûò—»Ô\öÓõ`v×ñ0Ãþ ùd[[âdØ?Ⱥâûtƒë»ŸmµwÌ~ÿå—o.n7|ÀÞoëÝðr>ýX7àFOÖåŠÊxyo»g‹êðåŠÝóòÞ¦é&Wôíh‡Ï¾¾xñöêüõK}?Œ)ð‡›ËW·gjtnUOÝ{sœ¤eY6¸A⺜tKx“‹Z9ÆÿsïEù.êþ^1”7o_yþââ³çW÷ίlü¶»Ž‡³oº üýÛw<~4'þÞæÄ›Ûïî¿'¯ôº:yqsuóúß¾ùJ‚ò[[§®é`©zéþêÛ¯o^]¼zHË×x°˜»–{zóêÍíù{,wëkyo“ë˜EúÁ³Hÿqï,ÙÖ#J–m÷Ë}P(çcÔç¯/o¿º¾¸Ýd2ó±4ÈÕåíÎ/ßuó=U²åSöcȵï¬î¯ïMMÙÈ ®ˆf°¢wØ_‘[YQxÊ&0Íþ`E÷V›\‘ÿ€Ëø·¯ÿòºˆ×~šþ}ÃvÀýµì¦3:d§}\ßgÃÆË£‚ÍþáÖûÁ·>½øÛÅÕg_¿¼ùæã«&:ñ›DÐ<(²Í%=È7¹®Çrmsmë·7¯¿þêæêæ/ßmø¾{߸ÄËË«óMæ+&±ÅpßÁˆ—OyUk÷çGIÛ݇ç//ßÞ£ïžo‘xkxÛÿ¨ Ÿ 2Üb¡ÐÕáWõ0exTO@~dˆã/¶è“?‚rØâ²¦6©ï„œ>Ù$Ðø»P GÚ‰ìGzTÚ‰-^ON;±Eœë‘vâC.ì-n×G¸°·¸¬^Ø›´A>$å÷ËË7__¿¸¸¾xuûÛó¯7|ǽçYzTᩞ¥-.ký,ÝY±Mýð0Ö–Äîeü>5[Ü|oÖKi¾;ýêüÕ«‹«Ï.®.^¼GÄð\âáZöWûí®ö\íáZÞûR;¥âšßž÷ç¾Ýð…ö>NÛ5³µ¯µî®½ç]½Å`Á#ÜÕ[\ÖíÞ-Þk×OäÞî%Z/.Ïžü£ÛùÇ .K}o-ùðØìÌàüÕåõù¦kB¾¼¼ººXíââ¶P“E|þ×7×Oú,óß_ÕíÍSšÑì÷Wôò]èâiIïÐw?LÌý특jýŽ'Ïj{óYý Ý[Óþ’¿ fO÷¾¶ø%uû ëî׋ßÞ¼¼÷g¼º|uq¾EÄüXÈÁv¥¶`oß$™ãÕ¯¶xÌ 9XäË——·—»÷__pÜp‹«´•¬¸%·ç¯ï4¼úæü»-E[Ç»m¾1{>„9p‹6£2nÑ`xu‹Ëz ºI·ûÈ€ø³[Ô?B›\Ö´»¢“ºÁ%ñHÿú#Ã#ý8²n’îëˆHú+{‹©ùG¸²·¸¬‡]ÙÛ´BŽˆ¤é m1wögi‹Ëz "i›úáaˆ¤-+ˆG$mѬ?"’Žˆ¤#"éûZHz±Åâ#ÜÕ[\ÖíÞMšHrGDÒfÔä1?¶r·Ùz¹Åe=PcnòøHÁ‘Éò‘˜·¹Ë?xK|4ße›ÙùãwÙ0›ËãÀþ ¢cìõèÎo>?½¹¹út«èñ‡q¨¦Úà’D¡ºM:Î#…ê÷­ÍmrmG ÕÔÅþ#` ü¸{ƒ¼+Ý#‚÷ç¤û Ëõ^vÆ/y[¾Å×£VÆQáQ>š"Ì\Õ†á_ÏQnR^¼¾yW…ãQnVnÑâÙ‚üíê£=xTƒG5øcPƒ[´w¶£·øvž¾üˆ=[„Q z~°C5øÏ·øªŽgkÃg«lpÃlôlmñU=õ³õq1Ó½¾¸¾y¯Ï†˜éÞ(íž¹OüòÌ¥þ¿Ë³þÿ>éÿÜÿÿOúx¶Á5OØèåys›¤{<¢79÷|×8²¼ý=øH,oo¾&ž· ®ïÈòvdyÛ]â“`yÛ[à×ç·¿¼ÿqùêåÅ——¯.7™ËVón£úèmÊz¡ÞÕ»öï-ÚèÂ~ÍœßOwœÞ\}óærÓnÞû&hÞõA7–yÏC|°ß¿}ÇßlKsÜŸwdû9¨‡5EÚ¨fL˳´ÅkoZÈ;ÎÎ19LÎ?FržO¥çýòÉVOÅ1!ÿÎõòO?!l»öîÑcBþ˜¿ÙÍÓòÇ„üÃ?Õ1!ÿtvLÈ4þøòË·o.Έò©/ãè[}ËïYÜwWW7ß|ò—ׯ>éGüâ“~©^þåæ“¿]Þ\]Ü~òúâå'7¯Ï_ýe‹/à1œÎ¼Ý÷•ª“Ô:aƒK=zžGÏóèynb•GÏóèyþò²¿¢W·gÊzºUûíâªÿÎû¸y‹Aóijå.¯ß¾9kÝâúlïÞ†~xûúË®J?{ŸNg[¤‚ß]ÇÃÂ/ÅûÛà*ØîÚØ'|£‘•µô>îľ“¹Á%î/gýì½—‚Ù"cgβœªÓ›W|ó?åu,å½ÍŸÏ¾¾xÑ ý×ÇèÙ1zv?7€be=ÓPюѳcôì=;Fώѳcôì=;F϶e¿Ýßå¾zw÷£Í8ÜǘàžqvŒ Þ׊Ýà{zÌ àõj·Yëyw©îG@çøÕ·_wkí=Â-›Ü£‹¹k¹ï]Ú¢ê:\Ìþr?,<úúâ÷ñVb£ïg }ŒÜ53ÌS½&ŽŒÛÿzGv¸÷?v˜«ËÛ?œ_¾ëºªjdÃy臩íg®îÇÌ ³ÅìÃXa6ùÄ ³É}+Ìñ2~â—ñµÅ#ÜÆ[·{t#oØ:^ÆO`EGжí¯èHÑöèvÀû+Ø-îŒ#=ÛÓ§g{‡jÚLòüH϶-z¶šd‹‡âÇÌòc¦Ëøý—_¾¹Ø2Xëý¶Þ /‡tÆë‹—[ýP?*ÄÇËï-ö÷¥Ù¬èVÛÆWôíÑßzluÿƒû$ôÓ]$×wz"©À£oüä|ãϾ:yóÍ–yËNãƼÁ stNã&ØÑi|:'ìaNcÝàŠæ4nrEG§ñè4Æ£ÓxtH§q‹‰£µlê½ïº—þiƒkúöpI÷6H6º¤“ä«‹wW·OØ¡°lq]XÄþâ¾¹|ù¥âq“kÓ5<íÌŸÞ¾þâíÕÅ«?ˆ)x$ûG]q+db_¾¾¹¾7|ôù+¼eû뺽¹ÿª¶Øï…æàŸÞŸ¾æ#'=ûâüÍů__ü÷Û®³Þqëo‘óìH ¶²È#5عÊ#5ØìCl!™÷ýÞÔ—¯Ï_Üž_ýîær“¥ÈcØBÊûß-[7ö–²¿ÒWo¯ß¿Ïßî¨Þ$çͼŒý%¾¹½¼}ñÕŸ.¯î¿ÆW7Ÿñmp¥;«YQÔï‘O{±Å8ÕÃù÷7¹¬‡Qï¿Ø$ åÈ•c`ƒ_çî²ì#Ñ–õÄcæ~ŽY›ûemnÏ·I­ðô~ÿð¨òßÛ¹´µýò¨ÎÌò£ðf¶ˆâ9:3àÌÐÁÜà 'wæh( å'i(oôhM弩<ì¹ÏßÁϳ™(˽AN›Ä–<â´É=à´lr]pÚæÚŽ§”Eu̬­;£[¬Ðt_t‹‹<ú¢G_ôè‹}Ñ£/zôE·ë‹n1T}ôE7¿ £/úôÖöQø¢1ÿɘ3ÿɽas]ØÃ€sG©÷‘ÖåÿP?_7øj[[ÚÃNØVÕÆƒØj¶x‰)NYùýúêææîá“Ñ}÷hÀûDÕÝVW¶¦íÞÜ~wÿ6ì_Ò”nÃÿöÅÕù‹¿~òLD7_Ÿ¿¸¼ýîß¶™­Ð5¾÷y;Æ~ðØïÑœZYæ¦Ú9}BZæ=BøOâ>´üb«ŸîC\²_J¯Ý3mFÿÃD•~yùæöüÕí™F0·ª­ïƯh%›¬ÒY9ÞW}.ïżÅBÚiû <ÿŸËë·ï?[ÌÊØ"Þ}Ä?(búöõ—ç/.>{q~ƒr‹¯iw3H¶Û‡üáVÈv×ö£‰ê\é{rƒb,𛯶Éݱ¿šõ£÷^úe‹µã;ËØ_£ªÓ›WlÏ<åu,å½-ËÏ´oôÑ´||ÓrƒæhY-Ë£eyßêÆß¿ÝâQþQu‚À§øÕ·_ß¼ºxK{‹ªêp1w-÷c°Q×ò£3±)‘:%òTï‰#äû_ïÈ‚¦ŸéüõåíW×ÛdRz,Mruyû‡óËwÝ÷OUl8šù0òD` ;«ûë;P$SmÅWD³?XÑ;¬ßm›É4ûƒ½ƒcãß(¬¬èÞÊb“+òÇËøxo`‰poÝì}Ð…¼áOw¼‹ŸÀŠtoÒºxÐ]¼É}È]|ìEûýùÍ{+Ø'‚ ýÐ-òÑ|§í_„“Ë|¿o|äêúÇ~êGäêú‘ðFo2oy$ëú/òO[ft8†`ë©¡ Ø\ݼþíyîÛäz¸Æb¶ö}Ö/†÷;`ÿÞçóæÝ°¥'z¾6­>Öb<‘ûßsÏý¿µ2É׎u¾·z9’óBªöIèüfl·ìÅ}Ýñ›ùn“ÈÓПuÊ "n`m\k~8ì™ jþôúüÕ›/(öÝ_¿}õâ>òï9¼=ÿb“*y=pȳýÏ÷ @ùg[Ì´ì,ä½ÏmÀ?nÀ§±Ÿ—g˳-.ðÁ[ðÓã|"[Ð} Jðï{#ûâÏݬøõåë-…v æ<Á`Ž$!žÜ!{ÏjÚ-W‹=(’³q-ùá Ð#nøáxÔÍŸï¿_§µ÷S„üÙquµÁWtÿ>òšŽ éV×ø‹ß|þÿÝܼüËëóMÞÿêFwâ6Ù ì!ýè6º¤‡w¤K›\×ãt¤ÛæÚÞ¯#Ý?ýâ7nùüW¯^Zg:–%}þ»›Wè«bv¢•zñ—ËWóùéO~÷5ÆáÿøÙw×_Ü\‘z}þÅÅ›ÿ~{ñìäY^_ô9toñŸº<ûÅO²<ûó7?ýÉÛŸþä_Þ’±ñK’ü¾ÿÏóšwùÙòÜJèÿPûÿ[JLîÙ_é)þþüýÛÿêÿô_]öͳøì·Ïþïÿ[ž½ì?ðç?þô''¥,áy+Î?«iqÏSöéÙµÈãs²ÊI,²à}žat-Š0öi½¿oÏ—¥ôgc£OϺü|qK蚟×>ó.óíyŠ•ìëX–ªÿœ†$¹{^R«ôpH}¹þs‰,¬Ïó’£þTë?u*#äç­ÊÈåy­KÓúðüs×ÿQ…Ñ•DÂô<¥ŠEìÊuÁ4‡YXž'ïÒ³ÿƒ‡Uî½ù¹ò<7z ÉÕç1Wþ¹èž·¶ôUô¿~^bŸ°ü\¤—Â#øþÃY&œú/»ÆÂüÜÅÈsÈ¡¿Hþj><ï»!ë’YgùªP&œû„sáiøç‰>V×wU 4áö¼ÅÄߨôéøB#¸Ôç`?Wýó°$Á•ç®fž[mσ“÷Чùþer‹üùÞ²ä.ï[ÐAîžAÆ+&Ù 8À÷žÚžßÄÞþ¦ƒQC:˜AßqÏËÓu´àÚ¿¬ó)í,¬ºØ·´ûo¡ö/ëZÿXó+«¾?œå[ÚË­ý ö’¦/!sýöÓ¶ókì—øŽÝPc¡ÓŸ°uúÒd{r>n+Bþð}žýUø¶³)kênòmûNBìuù9’»à§ƒq&òÐ?³k;§«ÿúóCÜ9‡ýçÕ÷¯µwhid·Ð›ŸNxMùyª1í肚ZÌ(Ž®Vúôéã%Ó´o`š×¤jM8D³æ"±[rÛÑr$ì{.Íêd1µ4=hdÙ<$×'‹ÏN$!à×»îÌ"s)ë†æQ³(Î~b?]gC¾4‘ûZ¦—¨Â~!\š¡«ÁÖg¾4¡ï¾ZË3y[>§Lo+>ï‰?N¦Û„?N-Ïm!¡‡–Hqõãó¼ºÆï¶óþE²|—«ìÓþqúǒϸЩÒ}êõdÆRíCô³âR£a3íØùöºJ$a²?ƒóžwSEÞšnº<ý\×_K­n*#–(#¨Ê ­WòîÃôÑ’ß¶ô»)·?Òœ¾¸´3aÒÞeñygi%ôú>ßtYôSŸv^]y±´´ózé~ ‰¶ãî· »Ôå°ûáJ?¥Õ/uçÓ ½x™Ã¼øêçkhÚ<ض ³Óž<Ūg±‡ÏLn{[ö;Éê’ü8+¦GŸ×—d±ü’¿t×…òH…úÚßݵÈû}–P¿à€;úh¬ºÂnª½ºš®Î±tÕAÇôW—–EîÇûþnaÕÕõ_ê“SeÙUgÍï~m/KTE®WÔRŸ9ýëתèÄþñ°a» Ð4}IýÕÜ×PåûWÒ,,ëCÕÌg†næ€3ÓU%OžŸÍz;$~±:j-rêé¦Âª+öwqC±¼ÆI~v‡üjE^übYD‰õæËDÄ®¿€$/³ÿþTϱäÌ/-’%“œ|7·4¼ ¸¨v§[±ÒJåJŒžï{Oæ€*Šƒ!;†Ì¤~ßÄÂÇdéŸ)èf)]•ùVU ,• ÆÒÕÏ.ö ÅÉYï·¸«^„}·7=%ýtÉ&"mѯâ¨6Nt|KuýY½ç“ÚO¸ÞR%“:JCßtáD1ôsá`%ÅȪԑ`Yíg6³ÚíG£¿OLT¿‹¢Dbÿ~¸t=˜ùÓ ýÔ÷¯È߈T—ÇAíòn3U‘÷õ'}88þÊŽ^HÀKmj&±ZÑ9ô©'¯g¦ûòèÅ »4°º)Ýb b©ùþ"æÐߪX–Ëó¬–wÿX!ÉŽ­°Ôú é¹ÉAŠ¡@ãuy¿Û‚¬8ô—¤·PpúVÛö‹ŸT„ òØúMæôçh¿$Õ™U‡í“­%«ÅÑ5,4ÿ²Þñ…[«röéø ×%ߦ$ìÒ·(˜ú÷×èÎa³¥Ë³k<‡ÜTŸÐ°E ÿLú7ã^-ý=êåSÕ¼àÝÐäžé/U¼¥>j¶$¶ïɾ!ÛAgÐåÕìž®Üôá~qÀhYÄÝ"aàcLÂat÷£”«Ïò%¼_ÔF!yU^¿¾œD†pSÙ⪠]m*ì:Á^o‚ï°Àñ‹/bOQ´üÇ™}†.ÌqÉãÍö ¦÷\~˜ûmàåëš“Ó?¹ßþus(eŒà"|Î~5õˆÈòÁwx3Ñ9'Â¥xì°¾ú±ã­Ðí—¶d°'£U†UÔõb­Qoê8¦@š…-™¾Ey£ˆ°ŸIµý¢oeGHÇÉ$õ¢EØ=Ñ*ú¼{;þ~ Îí<ƒ¾¿Ø£#链±¢V))˜&üµšžô@‹µí!fÉÓ9ô­`ßKÐ}ƒEz·$잆é Ú˜¢)ØÜ—íÕ­¼ÈMÚ Ï#ä®tu{õÛ^=ÞTHEéK`G–Fr_Ü$'a7v»²ÈÑÜcºvÕDë¦Aó^¼˜EYtÝÔ²Sž\,ù–Îã”D²Ë‚êŠ,fFé>Yw£øø'1W//Ükd=ô‹®ìßkdH{Çw؇nØîåø_$/°kØýÙÑm%µ›«nÙ[s7Sú,/Ÿ™ ¿„ùmž™Ý–›Ã'á3ÀfTß.ÁäJìöòwNª DÎñ|ö_ÃV©u![®› ÛÊõÔ»ïÐv6`e[±[+™u™­AÚÚr—WúáâÛÎ! ¡RvN ¹*¹¥ÝãEÂ\Ù9ˆ³pœÙ!Ž·ü{)CTšyÈÐäë‹¢™& ÃÖ¯8PCÑ[ì£è-’çÜŽ’#£Ú×–wÔ! ÅŠÝáv»&fÁ¬hiØîŸ¶•L“õ™­¸ýÍ‹ð%î({:qðï>ˆvšoŽÊ~*;× S…$÷ÉŠlÜ]§x|Ÿ»î ò¾'ÜÎÅÈÂ×_¯P˜äã¾íYÿTãnS\—…m½q‹“ÐM_W>½Û⽟Íú!´];‚¦–¥îtJúÞ;J7Ÿ'm¡¶ m»”ÝIlëæ¨lÝÉÁÚ“Ë’I¸,j­-dfXJNå}“4Óö]î9CÙFA]ú<”l©øÀÉô}„CI>*úÕŬè¦n·¡Å§mÈ®õ¶ žÏrŽ›|Uh)¹$Dž/”o‘­Î×%o˜šº^­q„ÕQàÚ~­zÚ²º£±!+gJ8òÒgÅíéÆgïÕž¶ìË‹SƒzIâ§±P.T·3Bµ¢eäH\óá³ gx5ˆÚ™ßÈ5:Ì76µr“”­Œ ¼Üêþk ã¨ë×0¿2Ê2ä ŸÒÞ-ù*} ´éChЖ2n÷SÐÖyägu3PÔvYø¸ñÎév¯úW»rI¬ 5ˆJ‰Ô%ììIJ…õ+=íìÞIˆ­ny³ÔwÉt.Î ÷‰£nãpQÊfqù·cÈåÆù‹3Ë¿X\Û9à•ôwÃÞT¥ØvÙÓ”cjj°˜’¡”œ„'uD©+=D;º‹Sj]…î(:öŸD*_TbßxýÛæ8=©#tÃM¶ÉÕôë‘ի1™ÐÌx6×O1¿oöejêüÌ侕“õ­ÂY<ÎÓÊ„[s™yØ®>‘ÓÒËŠrSdÙ…#*¶´¾±Th À^¢JÔ¶Ÿr‰TÒ¹îÊž¢èþ*ФÉâ4^ êáC‹ôK¨¨Eœ6Ã/v³tµ(þ ‡X’@EE˜ždÝòî.¢ðQ²'’µTƒ¢_©^4a!ÃÉ;1(8©uŠœA·ÊÕb3WßÜ^¶l3‹RpÐ9CéI jB¨6IqT>EœÍLBGpª1€ˆ)F}Á¯uîÄD:*¥-¢obd´†/Qºæ-|árˆ¬¨ÛÇqO¶;,{ÔÍ –5DÖFn€îœdѰà‘(òºß{M9º¸X-ÑOr×`(!6Ô…ì4³>ážÌ¡kb)²!i™¹¢aEç "ýâˆ*ìÞ»†B†ÙÍI&ùýÐGdäÁèða¢3Ž4h"µº„<]÷ÊU˜mwu± ¬HliÒ‚âw¸ùô÷|õI`6†±&MQØIÝB)q±„âìçD9»Íï$ aP5[—²„× ‚Y7Â&š¶päçòQÎ5ÍàEäÄa 4Žm ¨;ÉrÁÙÙ"š L‘´„sVïEù:&¤¯ãs€÷=ÉÙ‹ÖgƒBbÔ7ÑŸªQ##»S@îªZ±¨À:a$\õ¶sšx° L£'˜ˆž¢N m°‚Ò½Eõ³sShe‰E}8¾Y4-G{Ñ ÇóÅÃuºÇ2å×$Ôaƒ3ÒžŠåÐpÉǦô0¸Èòrµá†î/©©‘·NÁS¶DÓ×Ñ+4™¾fÂØõd•(y“삌À<Ä%q:/¯9/§·ùZc|[ålŒBi¹"™üñ{ä :U óäÈIû+¡¼\.‚ó³5S^.µj/š€Ì"<Þæ̶¨¨ˆŒcÀVÔbO(ÊñxÄ|6üç~ø±Äf+0HÝ™¹îA7ì­„¤TŒ|«Ø&$'>ÈÆ†¥(~’¼#onY4E¤#_lãpÒBÂ);g†äýî0N¬µææ“8ËæS;äÓ—_“Tˆ)ƒ*S‡æ /ÙòR}û5C¯&ÆXwRe{L†”'áq2 «€‡J$K˜2Ê'WKuGB PCÙÒÝ;j™ó¦!èpþB 9 o‰¹Ñ‹XŠÛ»DHÜBp;mdyìj"ap˜ßcæt“qºô,9×­8¸/Þ6dà ·(ÿ{@…¸m)ÛÖ4œYyÂyêPÎÔKœž,ã hŸ_ æC—²kHðr¢Ö¬Ú ¹Äºc¢Pbú¶ í{…§”æ5rbÍWØH²=(4”c‚5•êŽpÇòšÅf¥qÎy|±¼H¨PûãÓß1¸K‘æ+!¦É¦¬ì‡°ƒ¸c€R^®È9ÖªäŠÛµk)ϸ´C#˜Nbµ2XÌÙÇɶÎÝNr†x¥ƒÏ9ÖÉj¯ì ·cßsp{·-“»žCkÙ\| ú*N\šÙ!¡€ 4ï¥.ÀJM~½ÞZ9À¾ãÑYìäAQbަ³¯uxÄ\“л˜ÓHÌU‡£aˆ‚/G=Ú áÀw"à …3Ä¼Ž OàÊy«ÇŸ<ùèððõéçç×Óž¼Z;>iêçœBžØ+”€N‘ͯžZß@ºx EòMΦ)z¼ƒºIUL2CèŠlã‘V:Rk0 Ý,Ÿ¯ïz )ÿ¬5$¥E¹[ÐCVP=‡×»±_"¯Œ@;ØlžÝ dT·5 ßòDÓNœç]B~.i§Kj _TÀD6^cH)Y6²È'Ë¡œŠxTºñ$«‘ÀI9<ä&FÐ’)Qvæá'wœØWcUg¹ ê‚´¶†, *Ñ«d}£ °au4qœQPrV¨Ï|t#³ÈU}k¾ÕI¦ V!ïÙ0µzJ*žMvòæÓж$Ú†ôió Åh6½…"µ žv žÀ ЋD0Ƭ®Z«š|´çª8i®DbèÑülLÞ$uÞO¿crÍ) šÕyÒ_MyNv„<0‰ð06ƒŽÊçkTñ ä \@Sã'Ækº&§“Êç£,…©Ðuäì|S¿ø&‰ß\Q*§›ŠW9G¼¬½m9 2FE§´ødée§åfòù<"Ÿú$Oâ j„ó¥ô×ÚySÑ£œ-²{¦¦>ßa6I^î<Ó0Ëó!ñ®ådó0÷„ÚÿÔÛkt† &Í Ok±¦N¾ÍµíV]Ð O¾ÑM|¢X±,õÙ|¡_£37P0þk[²Õ«ï ñ‚om 8šôLöBÊ:ÁšJÈ* ùUèG—g ¿¾"|&ÊA)ù®|ORß^¬`ƒ œ'Çë«óÃÛa=w,äŠL)vì€V Y“JxŹ‚ÆSš‚h:Ìu,£ˆNp ’gBï¼4 4ÈWõdš§)5àl²Åò½Ó˜0½SÛS”ÐýµX<„‹ñ-ïx @«‚d–J—Ù¯á_¨ /.»BOÍïP]N]õ³dä­çŒÞkCJO÷vÀ“©´­†6h±÷tlEã0äEé~-ËCÃ}Õ{Åßñ©ŸK061¥èH'»ÛîŠAÏmºÙOð^è@˜& oO÷ü(îûjÙDöºvÈR<…A4Ài‘³9ß§|uºÔp9kvm§ë~³ÁÉH :Ùàé+Bf>Äå¾EBöH˜ %LUß@ܯ l¹qh¥ ƒV´‚Íi1*¤“㧪¡å®ªl6 u8a¦[2Ê1‰\½8ÂáÁhó(¢èa¶l +2@£Â›¦ÕN”¼Å±EÂQ)µÁÖCøîßKÂK émNd‡žB^áÁÔDžÌ ô§¦ÌÃuÅ!¸Zö?҅ـ¹J§›^RLᩪ“ŽÞ¿JkÌCå$N~j“lÇtÐ+Þa~¨š¼?eÞdæ)6ú¡¢Ô½^Gá¯Ôu+;lÈ_NÃ÷ô^ÒûÀN‡ùô g±Oã°àÛXÆ%B^#ÂÖéD"šs·¨¦Ä^|€|€H‚š¯¶Ö=êlÒs³Ó&J‰p<È@iBJœk ÙH2'&:GabæÆ?G¸7ƒZ,¤–$;gá{8±ÞÔ fd¶= ŸàZ€—‹*Ûcô$42ª&!)É:´³P⊞Ð;9Ì—qÖZK/ÂXøâí ‰?¹þ0…¤¦§"E‡ÁA&2ÁƒO½ :» >ìqAk†`ü´Ædë£ ü  :[Óðm? Ü’¢zk"=x1‘s*êâaœd¨ðR¢v’]¸JbÔ –«D`¬ý‰ÎògÐã9ÞH÷vÄž &‹”ÄEûíþ<h×£*—<Ê;ò)òºÍ…fËåkh–.k üé†<Ív!e Xˆfž«r‹zlD!ðFG# ¸ríø]í¹Z÷”Ã]i« ‘³´v,'Ž´¯wô‡2{ºÓ†}["­ßMTο[úIi£NYfó Àµ w;KvKdPT½çruñ*góâÎ_¹^GB*SÝî•â5'ùðÖ°eÌÈ‚A“ËæÄÜhœÚKú94}?¦-P?cïÏÖ¸ä":°É_æ‘õê‘UL Cׂû§¢(cËALéü„uQùlK°)y£|©¦ê^m¿ú ™WPÞjnâ¥vâqà{üò…Bc똿Z-¹tÙÜÄKí”?ZÃmò…f¦pÛ¿J/bÚîdohoj]Ý(ÕpH®¹°ù«ìfÌ)l57ñB{¿:Ü(_ª©ÀnüjÓMg£¹‰—ÚÙ„-·Éjœ‘y«[þ*¸«^671½-­ÞÔ~“<{ñ mõþùROŸ³›äzú3¹A¾Ð3¬„›ä =ãJ»A¾¡ÇÖ÷Mò¥žáý¹A¾ÔÓßÚ›äK=îpƒ|©§ïE7É7ôô½îùRÏ|.J ôFùrSÛØwŸ-°êâ£ì•ÐO{ˆÉß„S}\‹7ÉEÍÖ’6ñËÍÅ8þî ^êïkô&ùø»[ÚŸÁ{]¤ÃïŽâQÿ¸vo’¿»­½ÿn_¼‹ßíâ…þaMß$_üî¦vûÝaQ¿;ˆú‡µ~“|üÝ-íö»Ãbw/õ÷wà&ùø»[ÚŸYDÚ}{w6~ÈW‰cQ2ÃçN±¾›Úu—/F×úFùrÔ[úû™Å˜“qO7壪ñÝ»I>vi‡þþÓýõ'|øÊbÂGù ÛÁòÍ ï/ËbÇå‹g=ì 7ÉÏz[ÿ;næ²äÌgœ;`°s8qB$äjŸÌæCʺsšö•r§|Þ–oé¶p²Ü;NCmv1TÂŽxßû)ÆÙ!ö‡´jš &Wž+!QÍ%² A NV&b-SlÊ+>€` اónù‘$oIø«¤™ˆÏ]/é¡–,4R&š“%b¤(ŸÄiÚ%ý„>4øý‰×Eè|…r¯%U7ÎÄŠ"'” +%œÈ0SBT(€±*‘5 Ém¶›&I±&Ï¢WP#ÞHæÇ<¥Ö@Hµ´Â+‚¬ëqÖðÉ}c4UÉGèç]sq84LæšÔ…ïI$<@û˜Š.Œœ1kx£ÔãKox:-AáäÍ1¸èÜ#p~1 ((©®›JT;-kª½§If¢ŒYéDS4;Ë{a"‹AG’ šUU¨Ïˆ²ÎÇDO߃:4Ñiþ“æ%Mv*U²팦\h9™ £Lþ0 ³URÁP'Ü„¼i v‚W|6SÅ¢1¥×‰ãº+Ú5K½vËHjB¤=)êN„eÒˆÌë‚jCÅ…dk=©q3î„W¹eE²FÙ™SG·Y+(@GH`ªãTžnmA{|Ô=-VZ/±‰Ì‹µhëHÓµj4’²³™æŠùÒÉí®GÆä!.ã‚ìc?WPÛHU^ÑŽaá„ßbð„-$e'FÝ4‰|F¸jQÄ!çX¹IÖ T-™~ÇPfN³Ò!µ”´-L¥/£¨&z0¦e&¯† .Báº0“WÒ¿>è³ à¹OøXýÃDç ˆÓl\å4xÞ¼×EÒ#Íâ1ÃAÈruÒ;XÏQù¹H˜qš3%ª]"BÄ=L3Iè9gD¶#_·„ìÓ4Ì]—+LŸÎ7ì9!@ƒºë!4 E,¶eãîAã@…B…AË"í³c ¡ñ,T¾“A-áL]n[}|I·Õ8—æ—C[‡yXȑ䘩 Ó‹¼çIùxYÆQ¤†SÀh‚'å\as&ÌmZa°lÜr…UÒ–Ì §)€<ó5iõU/Åü:cdöx#Ôæi¨z™éYO T¡›Âôµiò¨dуZBîD¿ÑöíÒáÝ÷¡Aíö<îŒòÜ÷"Ìä“î;|”[,b*± r:ïuP t*¼¤Ëa¤ ¦œyxq@ËÖæµÃÙ{¼ÿj%ÀA¨ö™yqº<(;\kÊ¿¹zŒ¤öRÂ\áqì5nÈÃ4Mi«ñl«u¨±°ÀÀaÎpEq8ö†ÆJ”ÔÕ2ù´ßìI•æoÙTò?†-…}6äÊ??±Gó"„ÎÚÅBzj}h84Q›5LD-NDB7¹Ah}Ð{é²q.Æ ¨Pá…0 t£ÜØ&Ôà3ËÙä$ðC:ºÔ=íó€õ¤9ö$ŒÓ¤ËwŠaCä®i]èrÛ;é`©8²œLRLØÌQmÌ‹A…mê¼lÔGäj±µœ­‹X{®«à4£Š w?Z$…n£±ä‰°Úžæß…Q0 ]Þª9h%¥‚'²xê¹ÍUSK…‹xåØ/ ¿ð §à]ëÛËd):ì õØ^¬1q`{ñiKĬöý.ç›ÿ¦ÒaÏÚØàÞñ g^M±Óm¹â´ùñy¬wÍiæmû' í‰Ì?U¶ Ýõ†Ú.ìfâR®e2—jÁϹè MCïðиmP»1ûžAìÈ«x‰së›nS jQC– Õ#׌‚Ïëb¯›ƒë™—Ù„Æ Åak [ÂÐCJ£Øª°õ½Ý Z‚ ¾š…GŽxŒb‰[…Õ…ÕVhE$" S ¡äì6Û6ÛöL©§‹jÛîï~½1®sÃÀFá0 £‰Æ$ ˜Å<™0à¤Ê‘ܼašÙ„ÃF«Šƒ@νȻá34î†^“‹ÐRX(À4tyS·W^f¾™ X…\j‹åtGÇEHI鸬®6óC ÛBÚ0‘&‡¿…O5çLš02¸ïUh«IEy§|w`8‹ƒx±´¶–“ÇÕ×£ÖiòˆóÊä¤BëCÐ+é¢1@Þ‚ƒP*4™‚.öê&aÅ5hpãøˆkStÛ ”‘’äÊ:H€kP@í¾·¨Pû0!Ú66ž¬Z]À%f)ä|TÓÐåàtÔ.¶¬ýí >õd„ØwÊ.× ûÀìæ¯~Ò× Ú3ÑLõ±1E-CÙP; ¹¶¸»µjA,û BëCì.ŒÞ¸mP»1{ADsf1]&v:……úÜçÅ)4Êí*æn§PN€á¢õbÇ…5®v° jGáp -äv\tµ¥,½eq õ/÷¡™Ú­yØó"@¨·¸ñÓŸš¼˜78eTà' —¬ tÊ¥o;®Kqsµ“Ñ–¦¬¬ìsRöÕ…ùæ¡¡Ë9U[-êXëåA¨ó:iµåÆ!t]Ç` Ö«æD¼ßn,Å 6ÔvÞ²ÍcÖØ €M m!æa!ç<,F\Ÿ«¿Õ<‚–†ya1ž±z`4œñ}g¹É!Lä‡>z\‡ÆÊ1>x?¡Ò¡›†.ÏY79â—Âf>-l`xgÊϧ} !¢N…3s •îRØñ¿ ¹Ómkž ±{ QÒ£Œnô¦Ù£Ì¡ù­Æ)Âñ‚R…œ¨›zYÏa51c¦ÃÒ›¢j­Zz’Д9äAhïDËЀƥ)çÿœËB.lº\qòVuGQVY³Z¤Èš½ØU!G†ïà·]8-HLö–0ð!‘­{?6¦„¬jéywŠrÂ…ñŸ³hŒ\‚…Z¼—›}ÀI±hŒ<´>²Q6ÎÂ(WX4 õpvÊOÏ9Y U/|kcÀÚr– @B5"]¯Ë˜í†®BíB±3{hLlŸH(Ôtߥ°Cå“óI­föN@ÕñÈÒà¹ÏÓ> ²š¦^hoêö2YÔv)tnÈ÷êræ¥×!«·x9¥6 U¸øÁ·š¶ÃNšúUŸ¼)^ÕöŠâãz" :Ù®;´ÿU'ïÛ ì'©wu£1Y9HDÌ`!ä®Á$‚u–ø½Bòlž<Žø’'å¦t{f*xDý͆—sº†{‹ ûa® j‹ÆÞ'uø(ÂŽpåN¸—j[ÖÆþöÎGPŸz'ÛÓíGb×RŽ<5,n,WWm„ãèØ4) ³ µ¦ Ëᣴ:«¾3ô@…ÝÀ¬xo­ñ8^S»5 ßÂù#¶ õ8õ;PÒÚ%&×U&¾Òý•œk4?;ô|+Ò °l’+XˆíK)¤•{Öç(Ìq´ý»|«ô*å“¢N%¸! Â~ ,{lLHˆ¨«}Gv‰² @ì[†àh—µšõR-ǶzP$šµlZ%š5l޳0Ê'ãï%í–e¤Óa×ôñD7ŽA#!ÇÖ ÁÙÉX– a?‚4]xh\”œ„–ªÛESê— .O€u³ReÓ–æ,¸ (›÷Ä~ ÊÈh%9Ü¿n"ÞflraÇ3/äAéfijÄò ûI¿Úi±xû$¨ìecÈÓ¦ØÙ¼ ²IXú%¨¯¦ÔýDtCtJ[<ß§8íИܲq 5ý\°rÄ]È\º]gr.¨€·*«p84›Š OŸÓRPÙ|ìDºÑ³®h»¿î.iŒòˆe«±¨uÑ/›ÂÖòp†AÎ)ÆèÔ.6­nsŸ9µötû‘TuSo=V|Ñü`¦²°úþH(æÊVã(HëQmJúÊ4±vüQkHû² yĹý6µ›³p¨Gß›XôfqVK£âôº…Üh–úº³ç±+úò-ý»IèîŸ&›-ƒlDD°\q–[äZTš^eˆª{rDD°õY"‚„€J"b)ôCšì(Giú9ˆ‚¾B«å@r¤É.#MÖ@,Ô4ÙÁE/4«qh\,MvP[,MvÙ‡bi²‹ÆÈ|†6 Çy劉`¡æf–^·£Xšìˆ‰6£¹j˜ð1ŠŽ‰`’$„.#õ˜ˆ¥¬c"–r½ƒ³VM“5L„Œ <;&B¦¡ŽðM6í±vLÄ(7LϦÉ̦Ñ$tLÉ‘&»hŒ4YÃDðÂÑ4Ù1.(ÃDÐêƒëÏ`¼x¨ò&› ©¿hŒÌWÃDŒÂ±”;¤ÉfK“5L 5MvÄD°\cx†‰`µš&k0‡åã‡4Ùl¹'Cãd™¯†‰X ó&;Ê+ÒdGµÃ¾µ±É½ãQ8Îýˆ‰XÊÒd¦Ãx£±=´c"xù)o4.–ù:¨…±”7ä³vµsû0b"Æ/÷¡™Ú­yØï>Æ¥k2ÀF=M–äóà Wa¡.O2ÈzÒd¥(ŽÃ&ª*&£bI+¼Hå–MJ.X1,ï4iÍš†Ùlv[Á²—;ï\ÒäüjZš,ËSÛnÜìí4µä×™òvoŽQ “ïÜSÝŽó°#Q–L0#D¢,í%HÊeI^Ò Ç^þ=Ë}ÍÆ/’‰²Ù‡Ec¤¤ž(; ÇDÙQn‰²ÙØvRO”¥Í`Ù1Q–çA5X¢,yC@f‡DÙ.‹‹DÙQ^†ÝÓà0–(›ÇL87NN—¡q2†ËØÙè©ßÝeÇ‘(ËK2"_ØÊ©'óKÆábÉ/\ƒ†¡ñl{£â—\ {¢ìR®A,y±@7¢‰²ü[úܸâðÖDY*!!÷u¹ÁôDY®×–±ÁXã'ÃÆ·Dý±”k¢ìRé°kmlqï| õ™OC¢ìRŽ‚FS2¤dÅéAÛÚeyµH!‡±1© ›1µ£pàSYÈ5£u©Vs_—}色Ëûеó°ï)TŽ9¢zùkFó˜Xe¥ÂÆDñ?*èìI¶L©ÚJÙ4¸ˆ²-®4Ä-aO[Êgó. æ³R1rÉXåÅ΋’ÅÄsËÆˆ½g¡Ž!FÉY™ZÅläo6¦úSØPÛàUÜèC§=_4V·Ó8´Q8ÎÃ(·Ý›òf’2RE#ø~™¯ç)4ÄP*Ë!„-iW,bÀ(Xh}gò¢1¨Ù( -å !½ò㵟öy€†y ™‚Ö‰]} ÃDšX™Õ„?¼LZ¨ÓXÜ:“¡ÔN÷a«ñ4Ù‘—ÊI‚Ö!ÉåqkAÅ‘מØ9zçÅëpÞ±Ð5Ò1} ºÛL¶¦»ŒK‰˜‚AÞª)hf"T+Û:' 6d~$²Í«å=ÊÞíŠ{" ûÕ¸ZC¿è~¸)ìÃK¹3wµã®µÜàÞùªC6&‡VO·åÙTÞk³'R úÌB{"­n4%:Œà6”ŽÂžÁ=ʳTJ•N‚þûyÈ!;»hÜÓ~¥s°gPªŽ6$;5¹²0'ç%¡T—õÀ Þƒ$pžš† £**\¨Ž¦{Ö”ÿ…ÚChìüèìç4­=ƒ ›„567UC÷| Éw‚#\‹Ç²°_ÙÂNìò¢mÈHF´Â§³Ù0 /wç‹lŽÓ0ʹ<¶ ódïj6 2eøþa£Ø¸—@ho»ÆIhô›,Ô>Pº æÁÓ›«Õ^Ô…L ` ï,Q¤Öˆ4ÀîÂCC¦AiCºÛ< ¸Á(o ¥ûÛ¥ágÂ!£e”×k¥‡™À‰Zµ"Ÿ÷¨²Õ·ÜˆýœN34?]·øp˜£r³³!$³7÷÷±iv`"Ò{!Lv/åYóâˆØ©R¥’ç_rÀ³•bÁA1Ã?­`ÅÔ¼‹ §·ø û¦°ÕØ©Ÿ•‰SÞ&áÞ7 ]îÆ ­‹íjco{×pÔ0ïI̯Óíç dzv u~Åðjº`#t†´á¤®·§ lSÛ…i0 —rã@îjÓ# ]H#«qïno:Ž×tnM¾€ˆlÈOzÆÄ<ÖÑ r„±Aq·Þ%Ÿó€¡Â*M=û!£lVM¨¾¦ÕÅ¥Ã7\©£A³…ÍTØãðSkç·?½8\ü \ü)ÉÞ(Ó…Òì[ÜÕƒê1†¡qkƒ l¦ ×ņa,Æ¥œ:ÂöæŠõÇ1Pµ˜A®BKoG¢ 1jæcÃղј.¡8ü8at)ŒrT›†.¯€µSýã%:  ™6ë£h@°§ŠÚ¸ƒš'j)dúkëB—s½3ãôû=KµnTITQ ZEÞ8­µ¥>Pž©;Y-šq9ű,‚7&åÄd°ˆ¥>L Xa?—­ñH bì…0Œ°.ŽrQ“—*T•7Œu'x‡×Øam%²…Ø_îñZboQá,‰n«±/gž£° ².7âQíbËÚØßÞѧ> Òÿtû‘NŸ¢¥Xð\‰FŸtÀ!ÏB[XÁ-§b®A-„Ú‡¾4MzöAm²Œ½¡i$æ:<4‡ì;PccdFwS±t-ÞV>\}ñ‡ù?>ú•›¾üøìèùÛÓç'…\àr$Çä·¬)8$4¢Ü¤amÊ’n”,•ÝFã0[ü´‰“Ã9…?Ž©Iʧš§ô$Sý— ®Ѭ–æÂH|uä9„\«$‰0Ê™ÞÈ_T Ao}óÈç'`¤@ó¼z6 ©¦Ád•‚\G[AI2.[(Ζ`¨ܤ<}½°åyJa?rn(‘0eyfÔï¬JM§Â ŶáF‰žlZ4ŠÞDù30‹ö©+…âL¤J~ɶ*_)µ£ ¹æZÑ/¢T…F¥>}î•q`ó“t»h6 €ñL³¡@Å–@¡BË«J†EK¿Ó ûûèôhod”+»Q©EJµQ‹DÏ4éc¢oR¾“ çá‰(>‰J®MX˜¹q8”˜UÁ6 C· ò"™h-hm.Z—n²Ê ’qFÂè;W-Æ@òQŒƒ#w,kÎaÆ‚ª× xm~HpS>¦ Jªüé!—mœ/c 5>wº²½_&󼘣ÆLžK øøIÜò\åx¾Í²Öq¥ ­FÞl‰“œKHñ ÞcGØØp̳£ÐºÏBGQÝ2ôaªª¡äIG¹ÇÍÂj5ChhQ`ÜÄej @GÔ™]«ïü¤s35Å^P¶•E‰×° $å%²NÜy¶oÍú[`Rç Ýù[wØk镚‚R^{B-ðÁˆH7"þ"Ÿƒ¾¢ ÌÂÙžpXìŸå´=hh÷ß=ƒÀjrã•ïˆtIÞ2ßp<Íjƒ¾ežhH« k¶Èú©º­x­äK#åt±MyGf9W†%’#Gt%ÒèhÊÞ˜f/ÒHƒà!m*Tm‰¤çnÏ88I¾’'$7VRËÉ´ü8ZB³«õér*©Ï³a±\ M2г¶Å#¦AûPtôM˜Äí+o…ÄœI+¿àòVžÓs”“_ÔÜ;àT/ÕºÕuz1ÞÙ°L›àb(¬þ¨–Ø0ý‹5a˜dæM›ì,œ"QPúäû*e o(M3EŠ6.pìÈ‘Í-»wjrVVÝI,S„^ÞŠÒ-÷‰j-ñâ+äË®U9âË$Ü›"·©u²’ 11ø³Lâh5óúNPlÏ8iœÝ[jÕ‰£•ƒï¹J uÀV¡ï˜å O‚ËX‰-@jsB 1¦Q“áÆ±\Ydu*óTPËP°¢·1ý)q»uR˜† 47co0?Jž1qõ6¡v-^|Ó‡ˆ3q*/`™©ÂÕà-PO¡–È9†Pk8Ï™åêQ`ÏòÄóXbwçyªR]¾ÖAC‘£,†ËŸ#ôW VpL‹>hL‚|«Š‘l'&¥®Ã™^`$1¿FÄ‚ê•`}æÌ r•ñSôYPEAЈ@o.|h©PߪjL¡"磀÷2ÝÅEV´´6«rÛðÛn«¡y0UéÙÊALL³2aSч3ÆeœÍbÄbb“É«k75+)¯µ6X.Ôž°Dªä  * ’AZ'‚ÑT ™ž4³¶:HH~R!Ç ;bAåp¼þN–¨jˆHò¥·'kµyM©’þ&åŽrñ“¯XA¯ªv½,~ęÇ0ùé«'0“c±Ð—Ž·åZr*W*i`[E^Ù3©eê{fîTÎHÕâlg)EP¼Ýn¤ÀHÊM°ADRæuCòÉ1¬é¬“ï:zkg3+˜²î»ÑêOy!ç®ù2––…„]Ò︱¡,:‡RÑMÛhU¬´Ü¨©387{yhž40B»¯‡P÷\Ú [1¢ŒI]Æ,ÏJ]âìžìùÒé›ÎÌT‚e8!œ–GéDCn°#2ݤd•f½hroçólÖ ©J,8É5Q—“R¸LÖ1'~ÆÞ[$9 uýœ˜›4x/Lhô r-+t…ÄDÒrÉYÅ-(ŽÅ[[sr‘P¼Y²HSʈ]B_Žî%ÈíEŸ„šT%¯#tœu!ôš–“î-‘а‚S¯´XšUñ" MË4#,ª††y$Ó d:CÔ˜œ5ÃêÇŽ“mk KÐg=$úå!Eò:*TLfúXÝôVf±-Ê#«NJÈ:I…dHážcÞÖY˜Â²p,;rývܱCäU™Êª=´ÇJá?JË&ŽÕ@qp§T*x%˜LU®¬äp‘ÌLpÌu:ï¥ L“X ´¦Iy߬ô‡ ùÚŸÃ,×µPé¶ášîÆàyTcX7y£àç\50ÔZoJ^Œh>;*nJóü xû3Y8°ËÖ¦Q ¾…ú B›¢†&Õ·CmŽR´1!…Š5«O`ÂÁè$·/½”iÙ2;ó…Ø‚ÖgI® `:ƒÆØ]#Wiz+«¤Š“(ö-ÖãªE(#µ‹rš³/J³ËøNµŸR誺ŒB§Ôš`õ´õ–ü¬Œã"ôÆdà½yo)aÒÆ5'l jŸ¬Eî3ÜRÜ Œ´0\)íN>«¼j9n:3$XÞ¢ìè*K“°)ÅìÇ\¤P";ð`Ãf.¹¥6iöú ¼§Ÿ·t–ˆ/§%#ÍÙWÙp¿ŽONq5ó­of¶¸8Û¨r.å,ë^ 2J[•“= "4Õ42Ç(¥¹ÎQC¼¤AÝóP"’PÞ!³\7¸Æ.BUD²\r°'Üäí L>ßçyídºI VƒŽg¾T•<©×)qp»ÑäIº{"á+Ò } !úEÎü¬Ø2×Çš\æ’¢¬·©"RNa¹Ù°—5ÿÉ‹ZÌÙ‹ó„…0o¤k^À¥¢¹Y[‰‘W[Ù í@y5"$§ÍŽ8H>éÍΞcçôe¡Gì8êA.ðlÈßœeÛg¹§æu#aKÚ7¾OîH+Óšó£ Ø=½•å"kU™š » ž¯õ¶Ì«zü°"ˆÐkèÕÃÇ,-1³Ý¨#CÂhìDÐóÖ!€N0ŽšaIø0éOåž‹F·Ï)©Ã?;Û/JÊ:ãQwc¾ÐF.›eqÝE»Ãë±&2ؾi+¡†Á®”­Œç1™¦b`زŠò†³Ð,:6:ªv` èì€%û­Õ™èÞI'ºSIµcK‘Ìæ°Æ³d tûÑ6/BŽ' Æ}So‡R¼ffMúòÊ/YZ¢:aQt ¥høT]‹=‹G –“´•@ñZî°Za^¯‡&‘¾ÅµNùš›9Õù¦Š=²yݽAß$,á +\XpCÞÄbR:H³‘ªFë2†l8Iì”"h0äB/„àX{0£Ÿ)q›ÆàQw„n€D#)A¼Éú x âÓ*Ù}ðBþà­Zº‚– ãU%0=TB¨äQàTy@Ùd“(ëd°P²ÙéK-Ù‚U áyçž/œ3)ÒƒŒfÁæPø·—¶&X½l¯.ö%YõÒ+h“ˆÄEâ¢A’r–7µÉH­"[ˆ·&Ã䎓`kò˜¯AÕ är¿(ì™QŸÚl³“°ôÒzEºIT¢òK®ÝìÏá}Ì‘E†«4¿Ð û‰¸yìšäãï‰/@Ôñú”ÉrݱÃìÀ¼L)˜¦õÕ„”… ¯í.ìG"¹†°x‘£Ò/nóâXe4Tt3-S…úi2&^ÕÇ¥f©<2 uçÝ¿‚àÊf39Ya ¹û3.¬saË ^S8<³çó×Ó›:lÇ1‚-hê!ÝÓØKÂÜkû•Û‚ÄꎣnUhðZ5œœƒrR³†¾óG@—ðsœŘ=Nýx‹þŠ‹Šày¼‰Ê4Ï›¬Ïlʼ± ]`†>/Èm夨|O@&w¡ûaK±gA_ –‘&q }{‡¼±à“ ƒá‰ûFâ»Lï%Ûš<àK¯Â/ÃBù؆!L=¬!ë€qxey¨ëNµyœhoH4Ÿ`NÑ‚*½±þ\ìy±€²ò ÷¯“-SºŒ»]jǼ9åi‹u2»êë´Û¥š„[ Ñöé"s¦ÆS€p00è´¼ˆ7TŸJ²ËÒ›‰ýX+rð˜r¯³5öIr|Pœüfê~Ì rŒYñTù¬ nL†ªuUà© ?T?h’Ä0Þr:×Ja6CÁ0U‰h‹0èîOøÄlyÚ…/Ú´²­Èj0N LNVPbé¼í顼zÙs5awCª4: Z±}>×þ̺qFEÎseáªÈÈÖŠiha,ÝÜ„…•ϦÖÝ¡¨Mâ1;E<$ [«ê¢-‡¦EïÔ/EÍÙILUQ(¾ƒ3QO®™ááÒ€i Ä/÷ —ì¨hˆœùU`# îÁ³^†R4ôdšìNÏÙQñ{ð2¬%(¨È‘ÑC,‚2#æ. 46œÉãq«¢kiÉjP¨uJq15&¢\3dã£+a*:“RMÚRðZÈv$< ¹£ž"¨ØJ:Àwv™wðɱ±ðþë}× ¡ZÞ¼‡†Z‹n¥ñ¶:1FžZ4sªº½=“S_mP€|ÊI¬i$úžüFûDÐó¦8ŘRð´évÊF²¯; ª+H >à-¹ö¶‰_aŸQ…‰[ Ól,×®Ao·4ÌÖXßҠȦ Î\>–¬t É1Z,p†UÐŒj›ÄCMä£hǤë”Üe}ƒ†…ì$!ÇMÃ\_òB Mèþ²"ÓÜ’çr“+¤¸”(*z y˜ 9Š4ÈA† §J#|ÔR¼œ”S4Ø“À¹«Qoèâ-‹vÇ”r8Ü0በ·¡|¢G>9ìpϵ֠¸/®œ`‚pãÓvÌÜ<%; '+_ÕoÉeS‡[HPŠIòB7¤ Ь8"–E ÈÇ9¹!ÏJ0Ž$×—€¶ß¢>jAª¨ MüÒµÀ·W{[…å+$®^9…x2TÂT’ñ ‹ó ÉÐu¬†CõµWDUo§¹G]Þ7dft§;]˜ÄcH°‘^Â¥¯Gâj‘´[6?-˜òò1Û;JŠ?©ûE|ÕLˆ(‹êÌwÅÚ! aŠË âDѸ!&áö$ŒïŨ&›„lè8rH‹´>ÕpеÓ\¶z޵ôlPö)%#—Á´È <;ÅøB"±h„ùia}–°{›ž]òÌò4é9ÄY¥üô=!¶éÙV4£C-SOjìÈr¾jîaÖ“¦,‘–Õ‡&µKªɳauzmRË…@€2Fád»` q8‹Æk2‡XèPñ"v „8IyÊ‹ÒF›Â“¢ùñ>=G¬ºÌ¹Æ]G+{Dð1Æð"r¼ 0Q¥Ð"­‘< .˜üNÖ“@Í8ɰD05>FOXQ=N'‡06Á†âTíÚuV*™'¸ Z:+℈…H?›à |Hw VëóU²ulQT¼™Þ†„X¿ëkš {asîH¨ ¡Öd+CW¤¶<´ƒÛáÕv`yó ‹æ0j*0(ä^° ²"L qÄŸÉ5ˆ_Ì FMPÿk0ŸÅœ8ˆÚjË µKrÉ04øŽâ(¦A¼Å¼ü]GáYãÜÁ}bÚYÕ@…TE)†ò‡ƒ¢g4—db—‚ÆPûy+Ø>©¼Ó:ѾâfJRX_ÀFWÊâ‡g€ hÆÂ—Á:ÀOü“œÎ?5fm*™ƒró…ØR’ Š‚3rY~޲AXYã.šÎ—D§„y­zOQY³ÓFI¾!nD& @màÿpjc’œ©ï$‚ªYQ® 2Ŭ›¦VœWB—gîè˜Ù5ž¹Ó¼‰:òR–Rç…œkmùah[‡IG¥ Bá3«·û%AvV¥»BÓÞÿšQä!©Í½•gð ¹¢h)I ‚L_$Á KyC=廉û1­š&ê ‡7^ŠLck=;%E`Ë%ÎZeƒg¸,HoKÒÐW¯W˜¬¢Ó+ú«P2‘ñá5ƒ…¼dDµ@€MßF¦Ëû‡‹d€i¿‘\—zXæ€B]Û$ÙF"Tä4¥¤Å³””i¾[»¤^_ êƒ/“¶AtT+Ý5£Ï·{[zzSJÃ;'¹}E FŸ qÉ:¥WM ½Ö˜ܱœÂáí8q^®^|@}ÊPR£ßK¬N“C°Pdf#½šq¯7.ô/KôqkR.]ŽÞÛú®K‰‚©c¦.g+d# pÀÇÇ$Ù•þ žHIi¥èGßäÉ·Ó¢Ê'Åè;TåH]þ.©E– ÞÆ}O³(¨ˆœZ‰¡AwvE{÷<$²€CWŸ8dâëä8 rE{a)l¢Q:B’ +0 ÅÈ,ÇeHTïrµßèçêä5mÑÖdD4'!)o†‰?G–ªº±)±/èä’½,áž±..ÉߢQ•Šßâ´Piœ‹Iâ7m sŒƒ}Wl³˜ (˜o9 N’ú¨± vµ"»é®ÇiÌ š¯b9KÆ2Í‹^Þ¢`GbŽÐ€‹W‹âõÕ|< ®`ÇÏd>Îb/Ñà™,ý³Ž@ë¢iÏfíèkñ‘Ÿjð äû‘O ØÚªÉFì#ï®9À$KŒÃø¹lXòÍz[\½æÌ íÀ|" !Žê)l£!ˆÕæDFuÀJeÞ‰Mºdð"î6'g¯SÊÙVxÐ7 §Xiš µŽ oƒY… ¹3 \ˆZæMŒ"Òä:uÊd3!™Ùi=9»éÃùY˜èC.ú-@Æaê7ðM3wË“äa°ƒ½&](–Ç—÷ iô„H¶ë°œ„Ü u¿V¤®ð+ƒl§ ãâûvñj ߧ뿦ü;¹!¿ESuºÉˆ(éV©o‘“»ñ )”sÍHq2w5&'­ÃkLñä^Í tºÈ:ájóÊF=™8„^ôG=’^Ke8´(<õAh!ˆ5B/q–ÇÕ‡° ô£|I}.¥jߨ‰£0snÂgÈÙ`ð‚¤°‰æuÅ´Í%¥:]Ód‰@nt]M„ä—XCν ÁÛñ\y­L€]D7¾´Ê0 cˆ¬ŠNð#C$…Êô±âj µdÀu@žÅ®ž¬eo‡i׈<· ISqe³.^"Y“b Œ e 4¸]•ö†  ¿Ac`‹†îrè*µË&YsàE¯Õ„Ù ¿‹„ž„#×Ad­ÖnîÉP* ›V‡›ù]|ФF¤WOœ£<6=Ó{¢ß8Üp¯FŠiÏŸ{ yŠ 9h“ åráz‚QSîN¶Dm‡ôöÈi¦˜:"§[8KXsA&¹/æXΙLòk!Gš—2M5qæÖ¸˜jÓÆNÆä)äPg×0¡h§D3Ð:_!#ÃÅrÚ„] M«[¼z¥Ò`wÐH#ù€‘ÿÃ*ónj"!ScF$žv„·!#ôçïÝ„¾cèCC‹‚Ã礚?L>¦8c7:š êª7xo¸´–Í1 \ÇQÔž*@ûZ0Öq„‘&¼µô¤8|8Å^[/õG÷Æ y¿±'âò¹½c¥qi½¾õûñÁÿÍ>øß !åG?ýI6bµ/_Ó?˜&mþ×îuñ³/oZødµA*ö]¬cÏõÑûñî+Dtì·FDÇ~«D˽×ÉϾ|IÿøÑåí<îO—G-i•¹aË‘]‡Ðyó¿(´KG6_0¶¯ô`ÌMàü°õhFáI´875¯Yëæ÷O꓉ÁÒªGR/eHÕ ˆI‡\*štJx_ ?0)k/JmkSÌýV'ëØo}ŠŠýV¨ e¿5гÿÝW©hØkŠŠ½V*TÜs­nû7ŸÏûþŠéФ¼ [/³È}z^œLùrŠ÷ ÙtnÔ)g!õÖÌ0ϰæ¹2a‡„ŽœpåªÁ%¨2ß¼˜Ç{’Éj–s²×£"=ý½ÐùÌœSç#Pû„ûQXm gåÖ¦I gˆ=V.+”ÒRš”§È/ÍÈ[ìÉ dw}­V_xø«¹XBF'ˆzÙ«¤‘h¿7-m,±ï{ÑçÖ@èÅé°š,™ÄI½óI*¿4;&rU —Í9íp ;¥m½z¢iÿaÊ7vHkŽ'¥ÙTÀ$oB®Y™Ëƒã&‰‚ü±j.ŠÁ‚-0 tàèß;!Ö‡zÀÁ¸j“ð‹Si’|_`F“À]9š÷¼äI ¼1P…’[dÇó8BUºI+42!‰E<•äÜcà•ˆ&¡ï¢M%÷Òv0eJ.•Š( àkzhºöB[o¡i@ȺX\xûÑ¿µUáAZ]µ'¶*Z,pCr5hAÐ5×ï2Hn`”guC„`$²„8‰_‚¢ðç&ɳ}ÈthA=©yd»òÉb„Õˆ‘}ß &_I&!Ф–)ÍÌC¥>“ÒÄHr‹í*i4¯1ã¸UPŸ®•N•w…á¥{ù²¬2Ø4yãÜÆv ö÷@@9d"ÐŽ(ªJ²J:Ó·×h¢½¢Èv>ÎñI‹kÚ|±æ¸•׌åŠ[D^]ž`åN¢i°WD/qÌ·àŒi¯S6á&àS‡Dl’7[áøÌ;易¡ôpi”¢6"#€Ý†Ï|ãAL ´å±Dà1Ç÷ñÉ–kEPƒ‹jôº?¤Š E„C4 #í1ã\D²×™ IØ—IÁ/q"¡m0Q)B§lD Ô—sÂÚÉÞw÷šÚzîã’ØÐÓ_~5·Š…÷ Ñ'¹°¹¥æo( ÔMSl; ^¸vY2¿‰âÅzÑê¤y·\>FÙÌ<Û4Ýõd c°¡.LÙ5ƒ†¤š­. t¿Íq µ pì Œ ¬Öv/”á‹Ó+!S;™¿éŽ;›Û>`OÚxf;Ý» ž|ñÿêím›,C¯ü÷¥Ëøco~O ùݽ(3DÅ~¤¢cÚ hxwâ Ѱu†¨ÐœK%ϰõ, >æÃ!z.Ç¡ä…Vp­(Ÿú¤(Uê컞åë­V•»5Ì“Y¥Èn%\}Bq3”%ÞIÀ!:ö¢à@7fSM¡ ÆNÀDkŸM¬¾¡ †¡èí˜¬Š–ñ‹Íº¡Uì5á\j¢¸®ƒ,š‚AzÛüÄÞdaðwm’@Ã>t ¢œàòÉ„´.çÀ«r6Ú-&!ÕNžv ÇÒ5A =~µ‘…F… ØCBÖ¥é‚nÄ@$Å hCÀ(#¶ˆI bjñÛíGN":š&ÉGðˆª3Olxó券Ÿ âjDÖþÓîû›*ªÌñŸäOLgÜ yÂXv ¤vb©¶aW¢a'Fk'škôKtL¶%£2 æIJ‘ ¡(æ e2øiï‡p,Ò''¬þ)*â‡bŸ9)²ØAÇ|ÓEóÖð“`P‰Ñ°qÛ08›-ÔÜN|ÝN0ž,QâˆDu+"KÍ‹¢ÿ¦l´&ÙEæa®’K(xR0340FPšv1Xaáè±üZÌ]åV­^€f±š”N 퇻 ‰£Ž†æ ½#Ýæóþ÷½¹–[p¾Ž%£Mxiè¹vRÂà߇ÆžÀ»Ó ûÃ@Ç>Ô0Øv÷ ‡Š}èaDÇ~1ýygŠtc’¨Øƒ&FTìG÷¡ŠùcïõýÈb0ÓûÐÅØâ}w¼†ûPÆ`GÙ‡4ÇÓ>´1бq bŸûPÇ@Ç>ä1-íC{È ~º…ŒèØDFtìG#{p"؃9 %Ã#M|’³Jb|Ê^ÊEq‚²¥p–Ù”´ogÍÓ©RH@ðY-´¤»Ô¤BN`tà\M‚2aç¹©Š‹ÛÉH#:öã¤û±ÒˆÊO—+QFч¦õY¯¨`™$JÓ¹6¶¦0 À³uâšXvg!>¾•L´3íhGŽ’aëÈGë•Ëõ´˜Ë&é{8rÙ¸I÷¾:Dî%Ǹl¢ &ÌÕ„ >¡į̈3èxgNÓ±«Î ã]yuï̬3èxgnÓ±»Î c~èØfØÁ'û”ÄûÅ…Ž=Ê⊊} ãBÃ>¥qEÇ~Åq¡cŸò¸¢cŸ¹Ð°O‰\ÑÑdsE‘\*P™Á0šŸM‡íYŠ©°x˰g6?d~$ ®àCE2kЛx3yÐë1®84/Zº²Èù,Âíj½¬cÏz½Ð±OÅ^ѱOÍ^ôbŸª½èÅ>u{±ê¢H3+ wx]i:™/& J|Îjx²S@ ©i}IGœ ðh²·åá Ië2–d.ú$ù]"̱(t$ð#™=I¦úA4ÉiaOõJsF}Ä$IÙ…ÝÅ‚EGuŠ|âQ Žn›NýuCQ(éZú´ë`?‡|¢#¡]ÎÁ( ¸Ý$Ö }*Å̯; kÈât”ƒàO‚ƒŽê­Èqˆ CÙ¨|l:ö«}Ì:Þ¹ú±|{¯úÇ¢b¯ È¢b¿È¢c¯*È¢b¯:È¢b¿JÈ¢c¿ZȬãžÕÿˆæ÷®‡lÚ÷¨ˆŒŸÜ§&2fjªÈÊ»×EF'ö¨Œ {ÔFÆÚݧ:2tìS¯ò>’¡cŸÉØØö©’,Û3e£ Î>&ÄÂèÑo2Ç£Y6U?ªHµF|"ô%Ž£ª—o2w±æ :| øfKAz_¢òiV¶ÎEP~6ÑA¶˜>Â#xJÈ6oO…!áYS-xã¶ÃJ™#cȽ8e…è„ÉAqT|Š"€Ñ,køI†·Iß¼’€ÔwT˜6{՘ƹ»G•iÿ­ Î´2AUS…Ô”@%E,¬)ݘPu(냔ë*TfX Ó`nSÍ`#¨ÂmÕÓ¯ƒÛ‰—‰·ê]CÅ>¯MÇ;×¼V;fŸª×P±OÝkX3ûT¾÷«}ýÇÞüžÕ¯ÑÃ}ê_CǰÍrÜ£6˜«ÔuÅXê\ªà¹ÃP¼Æô…ä®Â?‘ž+i7X°S«PœÑßmèa,%Y¢w3ê·dtˆêj¡÷° 4³ö¦ü¼õªr;÷&¡«Â/XŒ p«7t©GSèDXÁ<¨Å†xçN8ºå•¢‚ÒŒ•,M!Ø«vQB…fÑØ+J}÷ëÒT{gkë]°RfD X¥¶9…N´ ^–swap»ä9Çt’[ÄɬCêÈØC4Üϰr“àY¶„SÅ¥m›_Ò €m:ÊÄ•»X.EÇNRÌ]ì™»˜6á@CIt¢PjO媓W ®býOºîS_äm+‚ë4D»¹TeR…Zw’;Â0¨Zjexù˜gƒ‘Ïò["5¥½¤¨ KKÜÙ›¯$^&ÏN„I¥% ³“1ý´JBl‚sÐJ×Q<5]ß%ãúâðPÜÀ [fê(io†<—5¯çÔØœ*’¯¼à; ¿c—ß³ô»éØ£ø;tìSþÝð{€‡Ôææ6˜¸à.„1¡s\5P„¥.¡€5çÚ÷ Æ‚5xÔàA1¬\ôçðYqü± ±’ ¿Åß°øÄ•OÔÚâ‘v7ŠÙCÅ>åì¡c>¼|¢NS `%Ð@§¡‚Ö]8Œdž%}N=,cË6æ ˜C78V7ÄÿÔê.®g#:e"ca±:¤K8qÚ ±;és-^æ>AÛXBœ ·® œï)/ÿ$Ž=ŠÝÓksNu::Utä±L²zU¨ktêѸ]äÜÐQJÔnµa9‡QýT60äÒÌ›’yS”rè†køEKôh¿å"ÔÌw*=ÄÝ(Àœ" Qsž¬4gï+vŠ“!!§ærõñ)/‚ÔÍMZ`@P¾x;]b|eá_ú £$”wæ³X…Q¨çò1Eè=„µ.‚å Øò¸Þ®M$b¡ Eƒ>Ã|p>ªh×2¡MÓUäåòZ‡ð^ P¶ÆÐiBñuÔ5¥Ô Ýh̸“нmßÓ Ó¨Ðd„ ¨ŒB¯O»Šd‡\Ö¢­ÄYœmÎXy"*Ûï sô§ DøU䔣[c0ðc’î‚•û!Î%óÐ1ŸRØI;;Ð6Ÿÿ0–Múÿ lW€ŽEv—+تm`:N¾”z)„â ÔÒõ<§àf÷R™ÓIT`0i,â à#UëIGç4¶@š1½zU)ë&BIfà³¾•Œ=)Œ‚?QÞâ4ÆÆýФҫÜP¹ó4¦8ø—éÁ*“*™rÿ 1äCªç{¼ {ËUÞ1þ…uhÉ%¾›`ÜcíœÒ Œý°eº=úI«Xâ5Ñ–~#À²HÚŸP†UÛB´|³€=BÃDœšúÂMãSQV"Î Š¨ø¬.º2d9åáåtß0 s©WÚÐÓ>"¸yJA Õ‹V4­Õt$8»h«‚Ž IRûDg4Hî.ï­apï0¼ÉA,5‰˜Õ× "y˜D°ÚU;W‰r ŸToÍ«L¹XÁF=©A‡RÑ'Í^YWªþ¤Ú>E¹ÜY6`‹nÌv=UÔÏ͈õ6iª|‚°Ð¥Â²@ +Åy‚ëb⦀ƒG7•(Ö¢ é­í_“à© |BB3 {ícg¿ÆvÅÓ®ÃG+æU"’¡‚P¬&>ÑìH¡4:‹Ç¼J‚Ǧ\“òâ$Ÿ••¥èœâÀ…fä%ÿdŽìb›,•°zóÝQdd%GGoÇ>úáPI%è'àŠâ“FQ)vJäPíVžƒÕÛQßé’Œ%‚Lg‚©,L 9 Tj(­k*ì“¢®„Œz.$l+yÒ}€ ìv6Ò½°Ÿ%÷-@~š¬o[4 ¬‚ùîvñ/L«Ç¿:»^=øèWnZžŸ^œ¿>;Z]½:¸X¯NÏÖ®þ™šý+ýƒþÿÅÿCÿäöëëõåÙ§¯¯OŽÏÖŸœ_>¿¸"н/þ̼zÿôÔ}LÍ÷ ize›&§Ù™L£pº” Q•ò.´›ºtDzbʶX$]Ëf¬5éšòá<5 ¡(ý}ªF¥ìاó#Iª0á@ÔOÕ$ùï)¸@ƒøˆÆÆÅvùNö¶¶»@ n€ø”àäà3MF¦uF‰èŽrñeRƒˆmÒžÝ0™RÑv÷Š{ð¼ÊÓ< WŸ__Ÿ}µzðäÉG‡‡¯O??¿> ÆËôO¿»…@äVÙóyM®žžœ¿>ºÚ\[º®ˆÑ‘Xˆ¿‘+M„XLÄæ¸úÍÕææÕæn\m\a’  &éˆÆjSöÌÿ‚tÔùæ¡l`¡¬äœ§ÿ,AóóQW…]NT Y÷, W3a©xXZ"jK¯æ<ÈODÎ…$tóÔn\ÏY‰›Ï7 'ˆ`ÞùD³÷ªÓ—µ±À©utM…Ûó3kxò‚¹4wvvpº>Z}uypt¼ž·ª?äyoôœ¾ÿôÏ'_Í?;?%úŸ[Q‚ ]KéÜ¡ÌQý€#F!ÛØtÌ_œöïúU¤Ä w×wÓ$®œ'‡´ä&îú½$‘Œ'§ý;ñöï0 o~å+ä¨l³‰zûWýMî'ß|Xœé@üg4¬ùøÕ“'½ÌFTˆŸX§Æ’p±Qæ¡VD!ŒEÛhL}sp²l*:v|ÁOèκEG˜6a~¸ŸžÍVì«EëÙú<ùzõüðòøÅ‹“5ÚŠŽ¿qyx~p2›¬Ÿ¬ç×—»AtìøÖo_ŸÝÞ©O^IWDÇí~u6wý‚ ó›ŠjþëƒË¯ç5óÖÁW¯nïÂf¥‡ç'çÔþ·:–ãïW?\=Ò<¯úåú}ï ™–¼,;^püŸ´ùoùßO§Û»ü®?okX=Ñßi¢¿3ÿ­ûú{ùõþBȯÏÿíeÌó8ÿ­c/¿6ç}•lÖëü/êË{œøþjÛÐ#¾LúÜ{|ßå×gsAÞCøÃ{þÛ~Sv½ÇÔÅåÇkgÞÒaHÛùk+÷x…¿hñ<^ñ4ºoã-º¥k[éÍÝóßk÷hϾ¹oñ»ï7v¨w‡®°„Ì(žož‘5ö‡Çzî¿ÿî'ÕÍÓX¾ûi\‰7w­~÷][žÀ|öÞÜ¿4öK•ˆ;¾i7ßeKjòÙ<Šç×oOÖW?ýÉãÿ8;ÿóÿÙÐ>:#ÏãßÌ]&OÏãçǧ'kûœ]0ð¯¼SŽÇŸÌZͦúêñÏ×/é»ú°J.ÝÕùáùšø¾{’ïì ×äï^Êݽ T/%’g¬°—ì}w©ÞÝ%X9ï«'O__­OÖGcO>š¯‡ozO?U/ú'Ç'óëª_›5¯¤‰ˆåžÿXÛüóî¯=¿>˜_ñÛ¿öäàêøpü©ó³£×Ç×7µçÁ}Fîõ]_žÿxrÇï·áyί?_žÏWÎ#útnúdÞ«V~wµþøÍúìÓ£#vå’‚¡Õ7y0RAJžÆjîúSÄzÿuÅýY-GõŽ`s2d/þôåË«õ5í¨¯>äŽ_y0|øèàøb^²ÎMÖXÿöøúd}÷LzËü×Ùõ5®¾ž §'ǧ,yX :yu}Ë|lìùõåù×ëÛgÃóœ|z©ïìðciØ2;ÐSsíàx›Èž]0aÛ…Žuàw¬·½†_û#—GúÉë¿üåí|õ½úzû‰òg¿|9Ÿ7?QX¦÷~šnÞ˜ôY}~ptLž€›úüwº”…þbvI-©ù_7®_:ƒþWðë÷¶õø«·J3Ô)Òä=ª·­aÿm.â—Ä_É’ˆ;BÛfŸ}«ûÚKâº$˜ÝÑxAr ݸ$ÂßäA÷(ÜÛVÛêô““õÙÑ>¨Ç¬¡?Bêßó²4ÌxWòãøW÷VAy‚ LN'ð÷ͯáߤ½éßõÆô=¹4>6Ï)êöÉyÑïæŠúFû<Ÿ_ž_¬ž¿:8:ÿóö3>¼ù.4Ü÷9Γâñ __þåÃÅeâüâà™å‹ƒcÁNhóâäµH’‰Ž.¿Æ×ø•qr&Oeü¹7ëËk¨âV‡W—‡7>»Z*½oêäLR߇ó±ßÕíÛàÕáÉå÷{†”÷v„Ìßùø¿×‡¯©7·:N‡Å³z~þòú‡ë@ýn¶ú=\ ï¶‘ÿ5ø…Å…?ñçLŸˆôôÇtþ4lí¢óžuŸ4¾ÓF¶vQw]tµOÈcÞ·ëïq¿üøôÅùÕtOŽÏ~@á¦oé¢ðÚÓ„ö$ž5ýÇ÷yøíåÁÙÕËóËÓíÃ>Z}|pxËÕhPqo {Â5¾«™;WKKë’²/Ö_þ|ýÕåz}µ0Î^Ÿ>=¿8VéCÛwNÏ߬ùåg×ÖZ~èêðàdýìøl½!Ÿÿèüôø/ë ñúåÉ|}øãÒ8$Ý¿ßÖ­¿ÀæÆý»8>ûìüøìzç€èq ƒ5íÜÅ_~ùÉçñGÓ´øpþíõåáZ•n~úËå§ßÔ~w·ïïô¥ŠtJ“ì¼üãû|¯¾§3Ùí8“KºÇ™<ÄíT÷8•Ý;ÊTb.¬˜Šþ¥^_æ“¿'õ_¿Eú~‘ fÍ/.OÏÏÞ®žžŸœ|µþáØ5?ÞßÛ±ôÝ]-¡J훕“Ÿr6Ñô׉UZ]¼ÿ[åwáâñé½½ÜS+"üݬˆðジςÈ? âÇ-â^+¢üݬˆú,ˆ¿?W3>ú?¯V¿Y/óþm\öx*‰>ql4ÇÕ'4ˆãø}ú ¾Ã1G*ùÃc®·ÙýíŒ9Ù¹Ôn³¿0ÙïpÈ™ê4óí#ß.¨ò{‰µ9ó¿qÌñÛð_Ÿ—ôÞóô^ÆßùÝâ»Üýˆ"Ew?wÛóÎeÏû¯Ê»ð]ñTšøVÃm¼üµ=ðïâyÿø1 ðŸ³üàõÉõŸî™†-«Ïñß· Ów ÄÝœéËyëŸ Yëw§¿vp²¾¾^Ko>{!?@=øÏÏçϯ®/™ÎðOôœ¾¸¢á.Å?ýÉg‡‹¡=øÃ«ãëõBÎä–ó¼Ï÷»e{ 5~ýÓÎI±ñ)ü‚K6TRå.þô£«W–??·!|ÂQ^O‘C òçÏÈUÒ?Ï œ¤Ô·ª ž\¼><<>;·F»’ÅüúüðÕÁ²]¤J^¼Bíí¬‰W:úzpyµú|}´Õ€?ýüõ‹·6ÈAÜÛËTâƒÏ^Ÿ^|ÍÔø°ö|¾ÔS&¿¤Ÿ½>»zu|6ÎtWy¹^ýq}rrþç±CƒõåñÑùµ}8~öìøš‚ÑÏ/.Ï__¯~q¹^Ÿm¶ÃDüûÁQ*eãÃ_ÓŠÿ÷×'ë mâ¬ÿhòñéúòàähù9ÿ Z<_,º`mx8òä‰Uf}p¶zròzݛ٠çÉxúö`S…~ü˃?o}ýQoñÛ?Ï«ëÍ&Ü!—óø›ífÎÚü|½¾XÑ€†Ï·(|r¹¾zµzv0 «fÍÜ8¤‹“õðTúG®¯_½½º^®M|úùÁÕ‹õÜÑa}.¦é×_­Ï®±òŸ07lÿ¼’a…MbðO2[àÄ$vËÆ] ¶œ'¯¶T®.sò4ã;‹~>¿^¯Oæ'M6U·èÛh¾PŧÎ|†}>oÛ/¡q‡®Íö¢ «âù×oïåâÛ«†_Ìïéj>Òèß÷Ó±øÆrzð‹“ó'¼uÉñÅ;vnnAøL·¡­ïlnO‹/›ÐÖ7wíPuC¼÷[_ÝØø¯…Z~×wÿâbp‹¯.ßέ¯ïzy?{ÒÏl;™¿Wͳùp^X%;0 ;\¼Û€Í]÷Ÿü!Û‡üô;Rî,ŽIÕÿE›ÏåÁ‹õÕÿy½^=\ÍŸÌ[Ñåñ¡p¤ýòüõÕZh˜^ÒáûàÙúà%ýû&îMÒäMÚKýÍ[ú¯SýóóÃ×§ó®öóƒë¦Ø„@Ø5, ¾øõ³ßœ­•=ú´ùÀýß§'gs‹‡ôŠå(}ôîoxAq‹¦è©ñóë·øøñG——»»1ÏåÁÑ<‚o£î{ñf>l^̦òšP’?žü0:ò]ÏÇ¿öV‡¯ŽOŽ.×`1ßZÑCÓÙŽžÍ¥×× ”¥Ïþy× þåꀮDôÎ|ÏúŒm£ãôµ«yswü³«/çgwõ¯7´»î¿‡ÇÒ‡²ëñ‡÷åáë«ëóÓö8—ÿyÛJ}÷µqr~ø53iÝ5igçgëêla;ßÚƒËùeý äÎA¾˜­†¹û¡tÌû_ßä}úáï÷Ÿ±i¸zùçï÷4½:9>üÛ:JyDÏÏ__®ŸP°á<¸Íwâîž:®ñm¼p?¬7a÷&ùö£šò#æ.ýŽêíîQ½Z“çéî¡E*=àSøAŽ ƒØ5À?17Çã£j’\ ò‡8>îá½8¿žm´gë—ן^Ï—Ö{,RÄ~PCÜÇë잸¿•£ûÛ=µ¾½a “åB¥n«Ï.×WëË7ëÕo×ÿ}½úøèøúàÅñÉñ5öµœ¨ô"jĵÕÁåõ‹óƒË£•ÐP»Õ¥Y¿w6ýJˆÜ8yªÔwcc?è½³é¨÷ÎN¼è«êNÅ/¶W µã4Ú‹ƒù‘¾üøhu…”V.¨7L/æ~u|u~rp½žU®Ùο½õ×góµ‚Â=_]ž¿¾èmQªÏ­Ìi6å¯/VÏξz}ðÕzõÙù…}!ô”Uêö§¯¯/f•Ÿ\]¯/ÿÂ!ÈÕçë¹c¯‡šk.-¾ôkŠ~Üõ•çp{”muqp±¾œgìôõÉXëmkYã)Ί §à)]?Ú\ÎWç×›¿wpr|µ);e#™ Œ¡^õWæ£_­>z}}nã¶-ë?½>:~}:LÁŸ†Ýk׃¡²×ë³yÄü¦]¯†Té ÕM«—Öò’öáö¼®^œœn3ß9<9¾àú'ëÿžß¯æ®]m,ݯ?úÕg—óÏÏʯþðêøðÕg—ç/OÖÿ±~»©}Ñ–p9s篶Ÿø¢Ùǧ/ÖG÷TùÙÏ?!­óXì67î\JL®®ƒÅaÝé<Ósø_¯HåêÙúÍúdÇ{¶Kñõ¼û™µi/À¢ËÏ_¿˜Ÿß'çg×WŸÓÂÝ1Ä åØ[Ï߬//ÈÞ·åÇ#.ccõoá6îþ{Ãã~<><}„œ ùÖâÙÝÐôðô-^¾²Ç¶—G—WćÕ5Ê|m5Ã\\]}xs?¹ål¼8±-WÿûâÑáù%>Ë*¸Eco:>×tCÓùøØØÐxãÜÕôr«éα_ÈÈï÷Üj^P ‡={³í«ƒ£õåú'îß«Û[n½Ñ74<[u@) ·´zyvýèèäâòåy_ßyç¾:ýúÑéÁå×Wç/_>º>¿¸ã“õËaD7´ž×Ïúh©ú—ª·ç€óYöâàòÖ¹§†—ºç®¶óq}LÁ7mGÈ€›z{´~IÛÔxay0<¿;;>œÍ¾]o)í¿Î_\“Á7øŠ¼Ø´…ßÕÿå»s¦/ÑÞwrpñèÍ}¾ÚÞ‡7›2Ɇi¼³!4¦];ßÜêâüêøŽ'FÍæGpaDó±Znjx~IÅïZ‡'—ì`x!`Ž[c÷›íœÛâüб΃«Ç×§›æãζçwýì¸zãï™gã+zƒ 7l¿ãy°Íupvv~ÛºîõÙáíן[~f6™†Ç}ƒQu~qôú®Wwê8<¿enÈ <9ÆûXvs“åMëFÓiÞ-Ïîhôâ˜,u˜t7XjËëÉN»êj¾s\ß2.±½†Ç~ƒg±ÎïÑ~\Â7[H—ç·3]ã'‡œX[Vö:¯ ‰~ó¹}=ß0Íá²óÍaKáðìê¶aJ£‹“÷·Mÿ_ÝÃÚ™½ºíçæÿþ¯3MÝ/Žì¹ºû¨ÍÌgk®Ðw»å8itú7Óy·8³»±ÝØ…›ŽÄÅô_ÍŸI0çÐrE÷æ]¦{Þ¡ibé@™÷ë;Vîåü:_^­Ï¹úòÍkš^}}|1|g·ß³Ù䢊Îg_­wŽòßÏ_zoãèRr«?{®>¬Ç¿gÒ“IÒúSõ‡<_8Z¶Û=%wÓSu7}¾p7ÝÇIF*îëó«~uïQpã»ÁÍök¸mnôyžwÐêøŒuté°Æ£ÓUçç( pv¤nØ~ ûw‰H©~$‹}úw|K~ì_[ö‘ì]œn\b¿\3›‹öÓM‡™ÛX[ ¦›Áð3)—ë¨Éœµê¶\=ïÎÞÇOޱU|ôüé¯~UÓÏ×´ò§|pöOçéú~öèƒ?þÏÿ>þç‹ÿñoù÷¿ûÓïÛ§¿ò¿þñÙÇ¿øÝÿøâÕ¿}ð³;û§û—Oÿí:½þ—'Ÿþ…¿ò—ù|ðáÿ÷ó>ø§ÿû>øàÁ¿ÿìÒ>Òÿ}0ÿïÿ§êº¶”…ºä³(ŠEPPÁ’s‚@cÎùæúÁofÍš¹ènÑnª8ì³wÕæ@CÔ`µ¿/€wñ­<Ÿ¿L-^U'¿OžžoùlJÕãïÕó¸xÖ‹¯ôóÛLþÿæªxµýïÍþpq(~¹¥›x{ûÛ,>G—ÿÝ,þÖ9Dÿ6 ÃÃbg‡¯Tü9´øÇíÍјªö@ˆÖZ4_Ô\n±ý6Û¯ » ÿ®Š‚OÒþŸ£*vóŽñ?Üb·šü§¿ì?lî enÌN®ˆÄyCj˜?öÝ4Ã]üÚí ¢VŸÅl5¡íZ רb0jK¶ ƒ ]¸ÿ” û…þ×Cø~þÆiáRýÆ¿Œ*\ 5r?¬]åC¸ŒñÊrèTË3 ‘Xg½\×·q(dŸÕfàÕñX›&¼¿ÕÒêDHÒ …Þ3|wjd×&ÿ¸Q_ÌïÍͽjÛ_w/¸WÀ¬7û…·¡ ÖÞ¼ ^ßêÛ‰°kõÚ³ÝJ¹ôö„#û“]Ú8A°eì89Z×NõO'áiµ°ó OÎÛ¥j\¦ëV|¹ðBre¤yp}ݺÀM¥S¡€¹×ðÃßÝ5ìçž–Êh‹–Ÿ½Å6&*¿º„ü}Ã{×üMЬÜY, QÂ_À©«}*Æ©}ªöf¿™Íß d5—ýZ6LFõ™É­ ˜ú›½È ïË]šÃçãÙ¼=7;HWçn«“§³Ö¶ÕiµÙ8}Á ÄïàXeÉ–ZuÞvÃ(âaÇ øÀ¡ç¹Öï*›å°ëÀ¼·­á3Œ£GS¼Ø‹_jJ¾u½O 6Ùøó¿ƒÈ\ †­K ?v®ÞGÿ# KÈ'­MG“®Æ£ Œo®Õ™›ÞdÚ}Õéiê%3%]<ç…ç;·BQÂŒ¦é†0ÿòKºóueJbüK`‡ùîÆÞBgÍi·7ÏÃÌàó{ìôXn‹%··Ýë•ðºKÇ‚ÈB+òÐ<Ü•P Úê€âgê‰è[šPûl ½úÙ”õàŒAIS$nLa*7,p6'¬`aí>#Úö±×Ý:‘o~žÂc;ÝÓ'“¼åû¯­ïFÛ œä" ëÖ¶®·æ Ùˆü2Ù¶'<±Ýiìu'$}ßé»Ýý!LÏÌAEÆí¬ã±~›žäÍÕ=ÃDv8oM¸ˆSxu…åµr=àvSütG2˜»“ï÷¡"ÒüÙ™A|7^󵍸ã×çœ9²^ÆKë€Tîf¼ºÇu%$²muü¢:Õ÷v‹ƒî´Ü«õËa©vJC«.®r£>ãÆ_ šôÇ €oœ¡`ˆÈ­Áº ¶.`n·å™ ÁM½íÁÉþ w¦e5è¼Íß]"ˆ9üóQD`ÚèFûúÝÅ>Az¦$=_ÅØ Õ9aç#¢àòz‚ö¡»{ïÿÑÐj@e†4,[ä0h;ÑXÕ‰ûh’Fz¬ºR·5:–™ÎX b¬€™´haߪcÓm c–kl•Ú±¹@ÿMÏæwV-CÚ.µ:öme§ñ·=ÙÊ¥öý˜‚° 5áN3ŽGAy:{ÈÕж¨<–»A­ß©²Ú#`ß»UЦˆS‡ÊæOò'ÙŸh£¤€é?å=20ĉ?ìpÇæp­²6A¯ê ²´mÒ}ë#¼r5áYóùš™€lm;YÖ(d:t}z©þ]f’tïÍëû’:öç?ŠH—ê¢1-MÚT³¨—·úbéÐ13¬Ýv̉ŸÝYÞ _\Eß¿ 9u¼ó½ÒùÂoÒëA úë?ᕇKQGDS‚l‚—â+0’‡g£!ÿJ'…UiO-ÑÇ…jupXƒ+ÑïF3-¹·¼.UýüN ¡vFÌ å‚¦»a^V—™ß¬M›¾Øê=ì·P®8f{‰¹X—Ý\òÕ/ ¼ïØZûÎC]Ø;ƒ‚‡ßC¹yY/[½]ZÀ,ó?`1;û×F|/N¹Ä]-J”Ôhšd‰ ¦ìºLfðd; ý©­˜c½è/<‹R„EÝ™Ççê¶1ü ·{¹¶Ø™x6ÜÔ|p§íé/uîÄT9šm}¢Êõs¯þÜ\ª±ì^®OѺþ=žéÍOÑ»Ú*‡š<žøµ~Á¶ö:ƒúzÍMEjÝVc©ÆŠtîïKÌ@Q•JÓÅË*×ÜŸí)ªJ`Ûfæ®.Äå¦Ù–H¶j@uç]•:7ù-ú®|;‘³Õ\íçd(ÚaÞßMRÈ ˆa“Xˆ¸ÉÁÇrÅÜ­÷5Æ«Ê}›íJlw>ûÍ£#ä¦Þ°)±{“ ¿•öéÌ÷“À j¬M8"r'z:û3†sµ;Ñ)1MþÎÍÒb=RR‚} —B¨áÙäê÷J(ÜÐK×”6Sgó«ž"xT:ÆÏzúe÷Šc7“ðÍškóu­-fpgó ×(Ö@×\ý¸Ì–µ!꾈y*$ä„4~²û ä,¼G_uö®¶ñù“-q¸Ä7&;ýy íñMž É¡ €¯å³ÓÆ®¶Æ‚殟ú´°¨ ÞGyákw‰M¬…Góáèäv±JµQ*Bï̾KXÍÖô‘ð“§›è1‰ò’&Áøº‘ÓPÀ¼¸^A5_L²w¡m>î×W·ÎÎwm^×s¡ý©­ösBxæ•# ™j>FŸVYgÂXôî1&ä°,U!Ç-,k÷½ohŒà7ò¶Ìá@Ä+¡l¸nÚ ó}~RYT¨ ÖöYîÇ«ûUí ÔðÚŸV_ãË~ŠO!…£ÚÓɮڡe7Ôj>Ùoãˆô^ë*´ßl{Öþ•5Ÿ]«òM?sœŽ'qz˜q²1¶»;q €¥·k—5÷ÈÕŠç÷”!¢«û<ó”æxA˩ۯiý+¾—E¯z–§­1ñ*p&7uµ$Oí'9ꔿ„eV‘ ¥›ÍõÍ}³z¶I²»mÌÝTmmZÅ[rÜ0Ù¬ˆ •äWm¹j\[XÙ,)ŠyÔÙÊæ9Ü@®S$Ùnå\ü¸ÏÇæýP%~ÆštÚ*[éÅ´>³Ò¥ª¿ÆÏškK²AJ¶,ÕäEVU¨Êþ¨rXß’þÚëÃ&×q}ãì¡vǽ"e,ÚcKOübÊ*¡JN„z=¶.g¿xKéý W§Ä9à1¹õì|ãJ²[û>KÑ3@•`ÿÒœo1 EM¾Fã™ë–a>"‰ÛµwྴÚR äad”ÖµºŸÊ’Ô— §.Z—°;ù~¤ÅB©2Ì,jz%¯µ‘!u_H²/k». Êaz*í\(ÿ«0®t$m$š}U/ioÅ»DósV©e4»ìÔ†s©;!6£{0¹ùü¨0Rûzà,1Êêßw]•+Y'ÉÕªŽ¬ŸÉ{#I}·Õü9M«©ý•à?]|°Ê5jŽ´žTeNN×µ€­W »¢.ø›CãqꈕÃ먳_’ ¿ËëéÐçB­jÓ âÉÄSm O âTåÇ#9:"ÞKæjíš™ º#žRcøPô°1éf~Ê囹Œ4ñ{-úË2Æ#ÕT•Êß–;Ò«D …‰5~Y ‹|jªt]µ®ªNT´Ý{–Ïô¾Úò­j!®ÚP)›j°vtɘ¸ÚOލro}]r+¨E •¢—ƒ°ºë©B®°öVñqš¶u«¾~9M=DJfšLùcàÎMTKÈk@kµ•¬)ø¢0­@@í1Ò€Œ¦•¿ÂwµNw[³çCk«5&g±iß”Sáã|-®×Á-—û°*óYût§ß;ϧ£>lˆ¼£ñ˜üKæ LNJÚ½R†kR6Ò;¥çžò ‡=ak7ûÂ"˜ ”ÅÉH3ôñð³ËGߦ.gêb^Á¥Û$7~ضƒ*ïÞnŒ”b‹Po¶ßc†îzy“Ü;_ÒX2>WàrP‘›+G²ø ÚŠ´ºi8CªÆŸ8¯iÃÕ³®vg\Y_”2z^䮢4µ‰6—#·³ÄŒ2|X[ث͟”Ë ˆÍ_—Ã$ Ùïx·ÒÖI=DÏSã¥m¤½4‘Ð,vû7¬Øå\ý¶j‰ú€¡:°!ÐŽ¯yÃ>›åz8ÌœF«ƒæy¥ªpcjáð¡ÝäÕqF“uài܇ÁÕûbÿîô¨|¤ÔF¦®®[2û›Ö«¤á°q^|ûö¶&î¶/½õùmr̶|àT ùÀ=æApU;ñ@ [ˆ|þÓ"Ÿ[[¶^x¼ìt«°þ²r7µV×WÍÞïé-ëhNN_ʪ5üÖáËËl0?\UŒèŽ2¤Í×S„í Gp›îßΑʅ½q®ìnÙëÔKµ~ÓóBŸAéô=ö²ÊU|ùžSdˉ™Ìip¿„1‚Йõˆ;úJÆ5Eb¯NµGŽFm;ÌÔ\ݘð&ë®JÍ¢úÖžÛϹrÍžÓÕü' „Y!%\t{M±;fr,v;àVŒ~EA4ë²ÉžORôn-„“7¸ú© ”eq9”âøç~EàìÏ9‡“>ÂŽm”êSºæ /i›WÓ¼¯Ö¿z3YD>.Ñ{3Ä/´jù!9^³£ßãFü¼¶Å"ÒTÄ1üÏx0·¡Ú/‘¥ºëSî? ×ïÄÆéo6Á·!)äÌèu <ž¹ O6ÊeîòÙ[–Ú‰A¿ø«Ý'?iPN¦:P·Ys”?ããÓYhÕ«UÒ¿ºß¨>%¬«·qˆÇÙéà`çFÇ©òŠ'/Íê›hÕûh{A;çi^ës0-À§Wïª[ÑÕÕÙ=,cñ•ÞÚuî|ÿº¯19²^õóÖa4C Iû,Ù»Q3¾óïx¶q/x”ºÕ}[—wÃ1±Òö«™³ä×¹²|Î/ù¨ÙY;¹êé^ò}³FuÌ”ì‚ôÃ(+n‡{{F@| =û2û’:œ^þÊmÉ\IEJ¬;Y×Å\¿sò¢GNÏ-3z­DÌM”àø‘¢ßÑdÌ_e +Å‹Â] “7ªÕŠÇÀɪ–»5­“±—ht8/þʽ¯d+Ïð®Ïîãòª·{%¦¢NDÚN¯ã%–4iýÒcql[Uc_=Ôþ´'µrÊõ Ûûé³?Þ‡ÆëÛ(ª>´)ïùM<“¡˜€t‚¶ã’Õ*ïMPÅjm™Æšø¹ |ÖÆ„ëýf ÝJé)·³’Šv§®Ääžä2`gWÀP€ $äžlrö ‰ß$ì †Ö츘nzÀH­KØKÕèi…·&£v7Ó†7~×|îsO8…2„¹S–·9¸¦|·á……éÕ*Ÿ+î¿î A]*†ÿQuÅÐìyß§voXñ/¶¬Ci`8g™/ÍU|€hñ·Ö÷ðЫ‚jŒ¹…;Õ‚ Ú*˜8Ã@k3 Ú*Åè‰ê^án±úüÁl“¤j­¶JìC²§R3ÿŽ­ksÓÜfúb½õõ/ûò¤‹y?мooÈ(°Ô: ~è;R†·çàî´Ÿ;X³f¬vóÇ›2Ñ!Ì pþÍ›ð¬Œ%x»Ÿè”!ÌTY@þéº.»Z¯¯p“*¹b‡Û]«B ^ÛØÇø\7çÅÁ7=ÜÐ{ë#ßÜùµH¿Å:Þªû>È{ÏeÃrü5ˆT(-fùhz—ñT²Æ=éZ tqgÙ‘1¾%ï\åè-!ʽêŽr`2®þYùý”tIXר¿sÐ_ªâcl}¶­€ =êø² ™Î`ÛÔZÎoÐ,Ëuôø®8cã  þŽè²Õ9œ|óÏwWøtNN¾™p`|b¸÷;¢•\ Ú‡òÜîÙ}'¨'Ç‘X˵d%ªBÍBs¥ÿÔ"†œµT¦w¦·ùŸw;âG/Nœ£ƒº‹Øi&±Î¬,ÙÎåp¤’¢c/·{›ñw Ì;ß?„äpâüFÞ~û¾;:\P$«r°¼,G¿~š#€Ñ¡ Ó¨dÚV MÿîÚIŽzŸ¼vB€z ¢< 5ÿŒ=ü®B¢(ª0’ß´iàu¥gª¹©ÅzeX»Û £1¶¼yr\NÆ[ˆ˜ËOÙ¯&ù³Í’ {SOPº_x ï…Èß:¤Oµ]oR0©~ &ÍJ”gP}Têí¸ûgJß©‡fIÄ©ãîÞ-bP®§gsºU ;øþ›7uÎÈ7zG«„Úß'lð¼8¤Žá;W6ÂݬÝtÎ?ý¸ùLJþÙ~«Ç¦Ã>2}/T¹7wö4UÆ`S0©u#.ݰj,œPŨßcz×êtÒàf~õ0C]©ÊïúDZE¹7¤Ø£ft®3>ïépR4³ÂHV>mÖ’Ê¢Ç+kÑ0±¤,ÿtC.ÂøXŸ$ql‡àÄéd'!Ôüß¹QÉ®Üh£ SžH­sVË8A¥Ý!wùÝZÄ;ÇçÔgùÓâÂü›sس,àBçÁê¾ü-I-á»o|EÔýáÎÒ`½pÀÞ¨´‰úãthoÏ ¶ì†O;qhªË7¼Ò€y›×Ki8 ÏcåXÀijw`>‰ûý¡Ñµ†Ô#{~ƹYcÞ÷lpYƒk÷H´>stE²¼,˜¼~'È[&‘½u¥J{>ˆ*ßr%ª– }çû$°xâ¯ñ2ƒq'ògq½#ÞÜ1¸ƒ³çm¢æ¥½¤¾ùËMèæ—?÷ëH¼>]Bj'>*®f"êþ ‘ƒ0ÊQ„xÕ²µf.4af¼ßÖ­`rÑ &ƒÞ:²æïšóæ¡TŧFaé…ñUbÑB.&šˆŒ~vØR´S$/D“bwÑ’šímO¥ -«5Q|haÿq` S§?î §Ûl´ ;j`AsG&ƒÇÏ,ib}‚Ü\žÈ ž B²‚™k‘oÏý˺š;.ÑЦ6]N´´S€ñ¯I¦RÛé³o }¼@$C˹[)"Pél{–ʱ•§,†Ì/Ò¨še›RbR»8‚ôëe±‰ß’¢´{ÇÖK‚„Ë~:‡ô{Ò›i×fÏåàÇ$ü1Yä µ¸øšÖ¿lŠã­øÚ˜ ´W]ÞÄø÷Uô{^sƇí¥ÁHD¶•áv *³¡H¨¬Îdæ]å<âð2²ÆÆÔQ$©4Ęuôdàöˆ‘]EéMØüè$‚ Sêæi•è‚É­T0Á-Õ¼y.úÃ%_P/|Ò¼—ãKwޏ&¼{/ym†t›RƒtV× íoÛæ¬"ßè?EA•ú»˜$O[Òy#Lÿ¶¡¥^Ts$uä<»ïo_‘PuÈm|E”ohÙyIÌ…[,½õV™ºüëCK¸ÚžÉQ®µ³Ö%tm·GÑ¥ Q·¥Ñ½OÚÙWe“õ$tö4ÿ:e¬nÂcx*¾a€´6-ê¢ëö/¯^ÈfÍ׆s~,>1!íN½}ý£Ué%³ Û+-åîš¾G‹9I¡§,öÓÑã»Oé Z+Ÿo1ˆ¤û„ G·ÎS\Ϙ¸Hpž«ò~™CîÕÊ»0õ#(ˆ\ˆþºæS=cÎ=ø›ŠôŠ èíŠ, ¨¥¢$÷Fè>ô6f)$1¸Ÿ]rÒÓø¯Ú°ÄY=Zg ݆£‰]éÓ’G̼ŽRqÅ~À˜¤.Ú5ۨ߹ç}‹¬òý¦ ¶íˆ§­`‘ú_÷’,Ä9!6^Å1ï÷R®p Xœ&îæ#J»'Âoþˆò¥çÍј°*bÈÃÚa¹Ýt‘0›ûÒ7˜•ßÔ©ž®Â½#|Ü€#ÖŸ‡Öe²sñÚpöM±Þ:0նߘ+ÏQIÕ˜àœ¬Þþæï‡€¬šõl,¨¹Ì[é\µù…Ú4?¡âw=…›‹¿f ÚúT‡‚Í¿"µf‰÷õ}Ó÷$º5VUú†ÞÓüޤšÞ;);éi —[k%Þ÷h 3 F¸õ¡)>&«µÒ0ÌNeŸ…-©¯ Õl(æªÝÆ*¶Ø_²ÉËÄLG£,$Pa¨FÖ£äý-yÉUš ŠëŽee†”¦Çìו³Šš•Z@+ÛÞFðjÉ›Ñ |=S XÅ„¦V›j#äå}ö~HógØUj°IdÅÝU*Óp²RÈ)e)žÖŒûe¡jÏ@U:PÖ¶ëÑä­kYvç_nÎDQM?™9!….@JôÍÓž%¾.S3αÄ;û9uz(ä[,ýz6ÃãcââØ––ýg­Ê/Îa½F«LîaŠ8ä·@ÝìüIÅd_åàk޾§¹¢›Yd¼Ï0T®o9¯ãšÖF6/oUË<KÎÆìq qÆoz^núºãjõŽe]·¢túˆŸ¿àØU’º å¯âN|fQ«äÑq—j6ñÏ/È•n‹«;]ÉM‰•â*w²“1•¿Oæ«Ô*š“ÑÏâf7%dåu««°ßƃ}™–^Qg4ÿü^ØÞçÉ¿Byg‚ÞïöžK‡’z„µt¶\̸\xUŒôí]l ú|s[²tYÛ¬Ùç9xýÞ`5yÿ–Á ÛùGhŒëw­QŽ ]²VbuXÊÍÊ­‡ÀB‹ÅìÖ}è«v(tO¸ˆN}pÓÜrš:Ô*½ƒüUwX ƒu·M‰ÛÓ ¬n¯·¨Ð8z¤|¤ýïhô/üÊ-ɯrˆuµM{8`GŸk"/«_™Ð?´«…Žó 3Á³~ùp?Uäöm¬ã3…ø>ëâHt@k\å¥Ü¾hÃÛ‰V?Ìc:ùœ¿Ô©ÒåoEŃ€ÁWk¨–ÊOYùÌ sµ¿á_{Tútj„)f¢iSS/M­{„^ŒG<^FIà u¼Tú£WRÑ.šn)7y£•½Ê /ãêJ?Dké§lŒ÷ããRh•ÐŒúu"½=¶bcQ¸SUÑyO˜ì™ÜŽ•õþ±lGI21|8(ó¤­z‹E®ËüŸ^r/³¹Ö`¿:V‡êþ „L]1DÇî}håéÌ{ø|»4uIݲ`“e¹UÿÜt½®M}Ž”Hn˜;­?\’à^æ}OöjO^'eð¹ŸÁT„§sh³£½ni/€‘_ˆøŒwíåÏ{fzúá´üköå»qŽ/¸Q-ù–.–$Š„¡„¿•ø†npoù>®–‚k£<óF'lfªcÕ“s¨g(GßÈÊh >ñå.45Vþ]÷½ ¾Ä{ç¥wÐhQ=¤+ÀÝÓV§‹ ºl'XÄ®f{ÆLÛXƒ—HŠ~Ý´*_^Ô/C‘\35-¯ x㛉ü…Žõ0å×%ª6t¤<›0öé&qNyï*Ue¾¶ªà¦!p4”È’Õg U9¯F|¦ä utj¿.AïÆ¡&#µ¯ñ§Yж¡O{Ó™åmkW­Å}sãCµuçÿªçtQÿêÎÞ°â ëÊZð½jàƒÒ( ¦ÒôžTíáßÕ²„ÍMÍǶ¦\†[ü†õy<£ý%+òñ(í¿5í_._)KL.jvqâ_ûáÖ©B.}¥ÏVûáÜ‹~«ØT kRiÂQåO5}á›ê-º»î­´Ö×°[ÐXÓF§4¸VFÒxö:X·Õ×·›K5öqlj›PÓÚóÄ‹ï;×½ò[2¢;èíT¿`CÕÕøÉã¢' Ò„¿T¬öGÔ_ odä1$lž“X…Ø['ÈâÝÜ@Üj{~ªœß1ò_Ú±°=6PÎ ô% ©Mš%Ãà_ê$õdhEäÏú‹¼Ñ ×Ô©q±û7̲ž'e}Vãwdïù¸51IµQ9@Ý^ô1+ÍÎ@¹¾ä&0ãf-Ã÷‚;’KLýËÅëo\ÈA RÀÌf£%Âw¢úÆZÕùF·ÝG–|÷3k4¨õ UòªæRQ;O¢(öþ¾SGÞ%e4‘M{S{^~Ã2.˜l¹ð;»ª²Ö=4 0lJ'ªâÝÚ½™µœ=æœpYfÇzÈM»~¼ýʸ‹¨ŽêC.¡0¹K$»ãm~¾‹ƒÅævç°y[27w»änHBçcÉЦÀÜ6½Ö ¾:EÌ næÌ†FJ1±ªyT0É…Ðm·Ë2VÏQ^™¿Bàå`žñ(gO¼ê°¨BáD¥Ý¶Æûùòü¨nò ¡U?® ;5ɪ…¥ë; Ð6æJ›-áùÝ6ê²³¡9¿ïÜ™ÁÊîuΓñoÐl~¼-·~nd²ó¯sÛ éëò.Wê-t©?û°çvb®o¡mÐÜä%§™ÊcŠ7ÏÙ»5‹T ¸áÖ­šã½¢¼º©rªœãÔª®´j1­TRnâš‹e»ŠbÃýGsyúšù!íñ­%ižyÞÅ~PJÿ~L’‚ -$´ô&h!_Ñ\aQ¿³&§Ø, ÜŒ£ÆŸ=ô—øÁß" ÏÁªƒ ƒ áSª¹òû¢ô”p— åÚÜ8Æ|ZÒÈmp—Ôzë²F s§JDïïà]B&oÙДÆ.óõ”7'L’}Ád~^­BdÊ_rFüEè"—¥™£öä#ÚÊdU^ùIw~î>âùE)ÃÅ‘îAóT1Ÿ•Õ½*oš¡Ù,0*G½ò"µÜüu ÷#ØÖUx¨×PE‚ÍÈëÎ/Zj'>kµG¹îºókh¯è‚ÌtµÂ`¬Í‡çÃÊÜgx –£á${j†TÓR¿c^§ÝÖ‡õ#ågn·us*ËW«­xìî ‡ÇþTÁ{ó·‹Û¿–jÄWûRîמÍJN0Óêû!•’g :‘›WoxKªÙ„É`‡Ày ÓuÁ$žLÆßøzˆ¼ò×lx¿3aìVÚ¯jMs{y›YÙïÆYå÷¬§¹Þ/œôÓùTÖ G+Ñ™ådkˆ)JM ¥“9r?ö9ä]2€t] J‹ŽtØó²Y¤¸Trþ¶¤GseÞ† áÃ/íG±Ô:=ûù¨ þŽ1X‡Ò9Ààä´gïäñ4¸ 2å¢üÒU”ힸäË>—èKðË33æsT–Ûá[Â…±(›dxÍ‚…œ ðÀã3Ü­à»ÊPÀFÚ¯µl0¥‘ ­0©lÒàct~‰ÅþÈ^ ˜Þ«Ó“7¬”´Û_ŸÜÞŒŽTv@gy÷c éÚ—…øî£° ‘ò(tWA.r{úÇ ËAåð‹´êiç¤2ªÔgÆžÞ)èߤ×+Дü#gþ½ök‹AãÚÆRù&»´¿ßúáÉíÇÈÔæËÀ®j›8\±\×'WÛ­ž_Ñ`Ù!ùü·ò¾ko!Õœ¯í ·ÎÃrÎú_y¢¼¹ è Á¡ë—B¢—ÒäšèêLe@Ë`AŠ8…Åñðæºù@c½&€ËšN6ú¦÷“Í“KÁäñó7™ø>C ÄP=»¯øê¾ßd8óC9»ÐmùÒû%3ª™Œ¯NC( “¶,½.]¹uiAÅG‰—2o#‘#¹7SŸsÕÙÖÊîò½³æx,¿kköåšB˜çÓf{ËÍŒñjÚöÆÙVù‘)RÜé®eè¤þdš|| ÚýË;Ö ÃDæàîé1 颲ô@&ÛæÖQèS˯žd@Æ>*» g,·v‹_KõôŠó5ûü´ˆ±ßNÛ‹þDpŽJ_%“‡Ž·µ0Wàþ¤Õ?|>5á¶»cõÁîôn\æx~®§°¹µÖúÊ×nYÙY¦úIdEú·¢‹ÇÂV—ÌE0pôRïd©,ªMj,ø8‡㩼PIÄ#9b0ìD.ÿ)L“¹Gö®*ºÎ™r>Äî¼ùÚïÆtUäþJ0„–16k3ýehi“(+¯C1G&Ä蔩;×í],;*‘ZÊSèr ¦¿…ªMh^ßÛýî7®µ׺Å|“ôÁ!Ò¥ãžÐˆ•—g~©MÉ”ú‰ëþ ÏßÂ1Å…†A½)îÁÁÌ(éKwíù‰^|pÐOÛ®Ú”÷sŠÜárï†À8kæ­–•«Áé¯Û}Ž ÎÒB6Ò¼=½+_òèz—9¼Q¤É_£‹¯çka¿Us3úRÓ[ê‰Z˜•d"…~ÀÆ:gK÷ð1v-þ9æøuü7jKPËz= þö l=’ê’Í#m,sFÀa•[ÏvÈd5yRÀ„lo±—3•Ñ/à {=ipîdsè–Ãë”V †ó—²¿cssÍ_÷g&9f»°çVÔ´Ü»_ÙùpâJóÝá³<–UƒŸ!oÜðS âsNõýó7Õ­~ªt‘'ÅCEj¥ã °—ìŠGßõLSY 8}ê­Ä{’HtâRݲ­TógzŸþ:9%R^®ËÛ‘½3Årç5ÇÈ& zf;Kì§:EfŸÅûb³ëãÛD4K™d¹+âì%DD­Z¼Gˆ“ûW6QÄ'ôªµSÚ‡$Ü+"k¤e¬*ßÑX¬–úœâ½Ü>M+âXÁ´Á?Õ)íç²øçoË›7Ìõza˜ø>º5zZ,„à6õº¦úVõ¼ã^8OñgvOJvS±Eøåj)êFrVCv°ã§«Zá,epòxþê¾Ý;ãOØ!c®Yª,zŸ@maõ$$>TfÜÅ ±DR£5{Èsï‘uR~ÿÒºÞDº ŽÙ®õ…òëÒ mÞ·fä7FûVJ VÄ÷ï_ †ºzV¬G¡×7ñzúÝÅËýËçmÀÇÍóAo 5Ýky‹N~ÊMÔvà¡#ô¥TE†eË5¿¾Ñ¯^ÍìçTÁ"ª…»i5ÿWoìͺ»²¿äÓ:ÔñÇײÎ?vÌ{˜åøÎ9¯ÉPhõ«B…$ª'eÎ2[žÀNÇsßtºú<2žN’@3—º¥›A±cDç=z_ ¸’6.ve® ˜Î,wÜ›BsôÁ²ŸÄlG-—^{þ9NXUÙÛR8+¥¿/ÂýΓsU;‘c7ƒ‡s ¤øY¥ß—SDÙÇzJ7'V0Ή–òvùÙbþ-ÍF¢A÷@ðÙQfèóe€S8iãÂCïw˜–‹Jy.û„°ÈÊb^ì7½ê²öFrûjµ<ÿª2¬ú`‘DÅ¥t@KºÝ_Aæ6Ë®¥Ò3Îo§´ë’HOßò¬VCo‘óš\Ué‘)šr”Ê‚ªROZBL6}ÍQYIÇ–dÔã.|ú¯"~ç””W!m™•²Eö†š´¹U}hëõ&a#/Y¡$¤½>»$ \Ÿü­ùz&¤zÒ5,ñóbó´Z³´+[Š”þd\öLJ踊$ÍZ¸®ÔïðDzÔ!5{êtºº†Æö¾ÿݽ*•³*󵚥?íÊNj…Í¿Dìùlðe…¦49I‹TöºÇ}ݵøMm¶6Œ'N¹úÞŠGhÙêg­)dõ¸º/nWýWùvåP™F–DŸ£0 ÛoÕÐò¶Hñ–qYK_ÿ€õ41Y£Êä,¡{w˜Èû u¸åH‘õ!÷†{†–Ô×M:½M©ÞhQæžîŠ15Þ­Äå³ñdœAë–Gy^äáð×UïÓëSÍKih–so É“X{ë+S‚<&à –/¸¶²–»íh®ì‘†z²õ¤-i-.÷Uù¦Ùž?«¿Xù_Ñ#Grþ«¿›ÇµäFm ¢c"lõ°v‹°L©ó~q*ì5"ÜÒ&ŽP® éTºƒÚŸ8j7bm×Q ÷ícÒ•Ó(õø gEu\ɦ. µá|kc÷IK,x2ë]m·.½%ýÖ+* Ï–7¸ÛÕ·½UU€Ö•Ee¥Žeê«Ö±Éžþ¬Æ¬âp ‰ˆã ~›)õÓPÈîî[úCû¨ô<^«¯Ä_Êù6V¨ácé]íØFGØ-¥O÷'_á'ûÆè5žŒ5¢‰•äÏH-qܤÕxÊËø´]ö|îôq®Îƒ§í n-™]¨è@FÏø·l–ÈoÁ¥üˆÁsÈ ¬ïv÷HN&{¶ä=iD2é ®úÏ–æÐ‡©åé%ÌWÒJÿXäïÒÚ!eç«”»«ÙHR®™Åq3JV«î³Õ¡Nk³>xCrû‹áaöwùeèåÕ“º* »‘6þÐP€/+¥óÁ&Ô„î¨e»õ:bñ*9½ãF“ oµ-¥l.)ÖŽW©Soë”åË2. øB˜K*”Ìö5Ôñ/&¯ð×îAíšæmä,cʇîdbªÉÚ“¶¬gø(2˜1Ñ(=™ß †)v2*±Äÿ±yH­ ?1íw²1[æ֪ÌÉèç;öºSe­{Ú'ô ™j|åÇÄêip[,7Gçµ.ŸÉQ®´k·ßÍå^åhSõ=b†q-y&3uÏSÇ[úÌÝWÏZo@ZwÄÇÝşϨ¦õŒÔ‡5§~®ù·¤“®šÛÅ Ëß#–½YÝÝdvö°3³ztþFc=mITzuEßí­ŽêÔ£O³’Ì{z»ÆÐ²j5¿®¾]fÞâVC Hb7Ò™)¢aÕ™¶m¦ßY».,û»'Õ¿SíÛ­Ý §¹z ¤ºø{’“ð÷<é‚Ì´oÄâ7à €d͉t"M,æçî–U­öž¿‡Ë*}v0z³V{ïÓ¶q”MØ€ÔÄ–J¯ìâ<¢Åú¥çë’üÀÃðÜX_5µÇï ˜éZK>³ ª8žšèŽîü¹wºPÁÑb_ñê“ á~V›™šmV,s…”“þUß¹¥*×t{-˜¢(’sÎ æ³÷¤ûíý|ççc·L—kUÍš5W‘£Q¶ó‘[|P¥>÷ìzÃôÈ…œ³GãÖ®RzE!rÌj¥U[ØaN~N\7/°·IÜ O¢q:•œ#–š£þTôÄÓC5ljÅ6šlnoIÍ ÉÙ²ÖégJ‚ý­ß?‚ßÍ5QŸÏgòÝ.¾‹¾ù´ietpa/{‚Ôê轋ò𤗖ý™ʧ¹ÄÊ2謁½¯Ú¡´Ôv¸Öu¯€É‰·N¡ªÁÁzê@“–„ïêj¨ÎaiMnâ¼Yâ6‰*O6Œž×Ưrå¾`îkÏ~#ÙÖYLÍ´2s¦ÄÂePLëÕrµnG§j…›ÎMò%óž¶ïåøãõª^¤”[þ9´åãºë0 Ôt)󃈴ô¬ÏÑÍ*ÛE¬N7=ÑÜ §®5̼Î'sÀ½÷æc™ _$î·~ORЫ­Ü­ÆÅfÓ#³§Ó«º}Š›='Ԝ媶‰vP°¥ÁbcrþpX6·Pæ4ì!˜S¬–vµëÖŠêS§ãÇ«‡Xíxîêµl„ H¼PD^›º6ÍuÆ`{Wù¸àèC™b)óÜíúÉ9tÓ[åùå.r|?ŸH –™š6ÛÞ,üÆŠš5àe²ûØ‘Ý<´p|¶ÌGh(”Š*Ãé=2ZT¥Á‘µÚ.ªN×nË 8¾¸v8ÿqx³ƒn’Žùµì<Ø?öë[ ü8ü¹·ÍÊólßæ¿`Œ8ú®v"«—ýGÊ7`õí7i×f HkyÐs¿[AÃ^]\"ù²;‚ÂEe«¤x°ÕD™uê„~Eó9ÙoÐlÈ<•ÓèAv[fOÎoÝŠ:öü•Lï»¶ËJïºûè^eÑâÞ®žÜ3YÃÎ4du¡–`ÉÕéÒRÓkú7¯É’Í]k¬r4â¸g·>ë<“u¨ÂV¥çXûyf-¢wâ¤Bne©à–úá~D»á ÖF}•óòAOíµï™Æ®‰¹7ÕÛ#Ìv«ƒTg^7[Ï;7ÕñÞAû‹Äø2°DÂÃyûy”–g´c BÆl|Æ>Êĵ fL‚´; fgšÖbã1ŠKö°b•[zn~ѾŸQÍéÝ 'xuX¢îÌØ•uÙ9ŽoÚ(æ¯Ø°qîØx,µdµŽëýG;{?¹uŒç¤°•É>HBZ3 É8ôÊþCsj~~qK ËÜ^] ÎÅ)ä:Ê«}qI¨Ø°%k:(öÁ—¬ç{]ûI¡<'Ç‹b ÀZ·œ)·NÅB‹[vÝ5ý¸a`BA%ûr*Sõz›ÑœìœÚì«ÜøCR!¦T_ð4¢8÷714.?ðNµ±á,ɇ+õµò[xœyó¹ãaÿÀAþ€‘/¹ ¦iå3SI£Ø i;YDʶzab"ÒÃì€-èÍêÅLa‘7vPnUKHJ·)%/>[~¶ÓŠ£56¦NÝ#^8éi¨Ëà^­ƒå‚u\ù>¡²ùr]~É4ºa~‘̘S¢zs|‰Q –¢ª•övκƒn.DÙyï©ïJ:«§šA(»xé#rÿÀ.®1žðml«–¼ÅGOn¼¯ÝÎ…mÐzmî­ZWßiÎÍV½ÝÃöóÈ”˜«á[ûßšÈfÈZöÌ¢Àx•Jk–˜µá*ÊKód«–§½'Hu­‰µìÞ®.ƸÏ?$€ϧ…ìwOð¯ŠÓ0Il|(_Æ?©ô>ÖjÖ›we˜xlÉîÌVy‘rªê6¾~ðçªh³x•›ßv2»Åg•umZu ŸÎ¶¸kñ UʸÀøY­²/å5sUÚjÚÙ­‰Ëæ}—ÀkésZ´X>K ¦ŒžŒÆ)y¢Òð¦)V<’~‘L­è@ù =MŸå¨I?§VêƒéøÐ×ÓΛgn; îÇAHß+R¥5*§&Ùwïå1`Êó¼\ÐÆÖSÜ}kÚŸ@­í»ù"娏rŽ€ÿF˜¸WqF.|;ÒöË$V&ïÃìIv ìLa‰î¸SË«½F­õ±æ ý™6fì‰ß™ß+OŸÀëà–èŸ –«&f‰,ž=vnÿ‡äеxùø„–#òAr|nƒ Ã\ÿ²ßÑ™§.ÛLåK`íÊ’w° ¯Õ™¸fÚí¶†i†æ‰9ì´¼y K>×Äö¦6ÞË‹Žëà¼v¯?m)Õ¹AôÀ,I9¶Ì$—D|ÿò`郮T UzNY¤­¾WYè´}ÈÎ`Æ%nÛY:kÿZk®X Î!Áç°›¹qï4ã¤gX—.Nå`;±åðbË-`3­Y4w¯$ â²]¼J/ö.2½GÏÝCzQ ß‘ìt•ŒÍi™Ë~Ÿ$’›åÁÝüô÷N’.|Þ;­£æþLŒm䵞òïAlü :Ï ÇýÈû& zèh¼ûØ0û&Æ®Ô{ÁFàU!™{ßKÖ½^p/¿ô7¼Ö3ͦð>ûv¸Æ$3út/ÓGN+ÏÏaqÏõl6ùiüšÂOnÂ#jÕ£Ðçeïå^S‚nO­VŸ| öûëB4Y;ëÒÈO¾¸lô ÛDÖ¿‘ÆMŠŸóÁªaÉÀXcÅR­$8ì’…j}\ð™,|½&«2ñ¨9&vòÌU|ÝÔð[Oø›1@“-N1ã\(Âr_ZX°Y9{¹•˜¾¢ÉÌ®úZU0žSx$Å2jy£•–=΋‘ôáED½J±ÿ¢¤*è,û,èmäç‘%• éD Cy ª;A‰®tl®‰ÎiMx ,Bëñ´±ÔÂÑ%{Ú'#¥TÒ€$¿Pç8¬ë2©*áÇ–ÔÙ \V{ƒƒÜ“0úLwsn‚f"º‘pH…@`÷¡ex¹vOüÊMo;Xý[dq¦DŸü ³"õÞärüªÖqÆ“ ÝE™ …žµ ´£våíc—H„­BiÄ{F.¬z£w‡GÀÅ{ƒ1«AÙ×JeÁªÁ.‚ŠèŠ_­/'·Læ~|So2zµiȯð]×%koN8ôȨ7¤€‰-7:¨‚Ä*¯¶Îeõ€Ë~ˆ&ظV(Gqcì1ü®EÈZ÷>bÃæðËÍGÕ]D(ÝF⹟ÁJ8ÚYQؘ÷žcœJs‘qcm\ðú¤E„êØÄq¯02ÏæG>™îr|OÍ¿£‘¬>±î|Ð{Þ°ƒ"ABTåyÜ©•Ô™ºZ(¯Až §*¸fÏCüÇݽ^µºªSª?¹ë¡{P&·õ(ÍJ%þjZÊbÍ㦅: – u´n§‰í­ñˆ”áuÖ¶ùOÕóçn¢ XâB›í‹ºÍQJ—U÷ßâó‘IªÐöUE\ÍМ7Ë’Ìœ|,<¬/Y»åùÚkÊ›¼Ï+bÿ–Çú|#¯g,8òôYŽÑ1(Ÿg³F=Fø›qX]Á‰!7-ÊuG{Ãt]&:¦åg 5ú²äÑÚ³—se¨-;ù Ýé8P¹Bt–å@瘭*ócM^`˜…c,›qßIÏÚÅ‘ßaÛ3l"å\®ãkûr×½Þ+³ÁɰÖ;%¦¥Få§l¡CxÒ?Ú Wæk)ÂaÌÜw‚®}™Ï)ÎC8ÛYÉ…Ï%iKíÝ‘Ÿ¯™Up5—’vÏAâx¥¤Ä¤*±Ç䳜™Ù®ýׯ$v 2’ª€-É. áèþX¶×Öb#yé¢W;Ï’ºåùåœ Ü½Z¼Iå¸â®‚ÞfÊçCßm¥[A˜éäzðsÏx+‘—êõûä©Lh—¯<‰è„Ð>Ê^‡Š¨ Þ>°CVS DB©4«qR2?£´¬ÅèÌááIÊ>¥;RwiC5gzeì—wO¥h8¨EæSâÙܾš Óµ™êêZqðj‹i7qð¡¯Ûâ™o¾ô£¦Y˜† ÈP²e´iw•ùFvU;£Sì[nݼ![m>åfâ®äÞ„»Z÷À`ÃBpÈn}‹JÐÔ÷ãA®fâ^Ý®Ô;äÂ{rˆeè ‘š‰¼þ­J ¹Ué´Üüñ¡1`8‘{Ta®FÑî,[¶!SíN¤.šÓŒðǨ<~×,.PYÿÆ¡ [Q_ŸKN=TZgÔ Uÿ0úýyàV2ÞjËó*¼SX¨SzæÕ\e;Un$L„íngcv Å£:+^ͪ Oƒ 5WEA…õDÓ噜UÒÊísc:ý›ÄkßXzR®Ì!sk8™!MSÔ) endstream endobj 78 0 obj<>stream Rö¼3ÈÛ“hBª§ý¸Ëzf ÉRV×s€=—À¬ò¡­˜–ûªžïvÁpM§§41Š Âj/Ó|‘nj«-Õçí©»±tÍ+Ó4ùP ã{vju…YÑzûv/Ö®xë*}–ÑÿÇ.ÒHŪ5ÒFàšÛM¤,OiÈß8ûéwC9UðOšµ"0£.]övœ( ¹*WƒumnE¢jþ¹`˜¶&“Sˬ+éúF©f Ç¿zVˆ›M“‡î‘Üj*…îøÖöë ÇK{±.ü‡¤•ž´n«¨g"E²ü•x™«Ö&å¼k+Ëpfœ«Ò£/ß÷&/ ¹½1š×1°- ÿð”®Zƒ·¢»Ú ¿Êé„y <\>NÞw-ã4¡†„òѳJZ¸^†Q)ÞÙ–à6—"7éažkz™îÄɆU}›°54ÆÅÁLšøÄÖ¸HÇå÷Ö[Ú ‰‘«4ÌÞç¤6¤×4Št9(<+Iƒ9KŸÒf¡ ²œ=Æ…eþ­ÊËüÄx¼èkª`??ãÞš#{hؠÞäÕ“Žë`ªÓí&=bëÔ,‚¶÷­FNs’ïæ ®Õ™jž$à?H~•Û\×ð 5ù¦ýúÍÕ»t_÷Þ›I­€±ï9ÃÖ¾ÅGÒƒäbÅ·£¢5Ë^»Â`µ»Y‹jÄ/’ö±“ QJô‡p9K0„ >î05íyÁ>ßÇàïù€wå)ähÝÀH›Œó):¦šßjy,üÕªoÝÀ/‡³Þ:ìÐ1‚nq}Ø­_ݤfÁ)zÒ³²Ghö†RŸº£wu/N…J[ñï&pþü8ˆ30¦U€—Lü©L\$„B×àöì&?&íÃt×ê¾%rëNkb-ÌÆ¼qóGÞ¬wR[±ýÞY€Ê”6B@IÚÃ/ )逸¢Î=#Py¦µÏØ.u/4„´Å‚V¹ò¸•:µ»,\k:ò‹¤~¦Rc»Jvòå'Û–HÃÆ9°>ü«Üþ,Kà;Ë;%)¸4* «ù¶{“¸K‘äl§hH‡4?ò=@ÞÃ8¯ÐÆúbv×Óc©‚~ëâéþ*`FH|ƒ½õ)ðv8kú|ç}1´gxËÄ ÓÜ`\‰%‰¾ÙXt~Ø´:Y×Í!n¾þ8°ŽGù”ãæé1å­pü]œó²428ǘw© ‘T›Ðk»1Lak?±œ‘[½ÓØà¿`ºÇnÑ…ŽLÞ®/Wî8j5ííž>˜sSZz[ýh™þ¦cxõ𨍦 hÁÎS4´õ“ùCb6ì¹9^ÉFRôüúéXè—‚fînS«® wãzmd„—Žˆu £4i±Åë1Yèö ‰?rÜgßoD§Ú¸j%C Í~Õ.»c2p“À^ûûÚ‡G¹Ï±¹¬§m8§ç óCëïg÷ø‡£ç³"`pgóü˜ðy¤ýÙÝχËÛ糧½Eã¶Ó?µ¸l4½ N¥$?ƾP«M¨ÐºjóÐj¤ûï¦á38uÉFñÓʈóê×ɣ߮;=¡¿«´œÅ =Coµj ¡v9ÏÓ¶þ‡¤µ ŒL 0 ŵ{¸{Þ*œzÃyC|A“¢s&P›Ä‘Ôž~l§Š³Ëù5E?%n¾dÀ(=D¿|‘ÔüZºétѬ*…'ï¸ÃÅSë&¯žü˜o>všêh·FùvùÄö¬@†Hm58ì„‘¨š‘²Y"pOÇu?ŠIM+6·¿‘ªtLRuò»cD~‹•*ÇÀ/öœL¶Zf<57´Þ4æ†=&‡Î„)Þ{:×(êÇ3Ò¶;!>„Æð!‹Ðúv󯬉РþÀ@­¬ÞücÓþVíçoÆ%S×nvÇ"¾ÁNW¬u&:²9{¾9Ëzþ´(DZéAx¿HàÜüâMœ'àÕ"&£êô€-¬Ý>×/;ˆ¹ÝöúÞ°ï”ÚÓÀZr52iË`Ù¼ùõ‡”¼·L5¿¡À<Qã(ºùög€õÏÊ{¼›±`ê¨5–?'÷İZq¹ž?‹ð`ÄúÕ»0=!:ŒÃ:Q"¥ûí®¯`hµ ¢ù;WwÇ~p7´òÔ&§xdËïŸ`ôOêY=cÐ÷,P 2iˆÏŸZëƒΠÔZìx7Ü¿ƒú´íÁ†}„ÊǶ|÷Ô,¡²4„ù¸§ÿ îï¨,vøH‰’Þq@Øþí!RH¢’Ä!ïj;ƒŠ:ö>—](sPu.ÆÈÒp×÷˜Åuìõ›fú’¬ÛN8°Ä+¶‡gm™›"¿W5˜”@Y€¯wψ7p.¦{yvZüÒar –—fÙ,Õ¨ô.7ÔªkôZþñ½ö‘å­©XÑ<,ö*ïD÷T¢¡zŽ-ï?$3+zØ;‹‘Õ´lÔNP5;î3›Ô%>·ð¬fË€{È;ëâêߨ©ç€U›Vö«Wú F:]GÖ«´eBËÜQDIkÏ-`qøXÓDó\Ì^β]ƒ»á•÷[ŒåFZÛcý!™¼"ó dÕƒïø½sYíà õfG±öžԽr°1àêi~´I Ý’oçsµpÄ(Wèô+Ç £×˜ JÕ­"·+“ñév¹×°ï_±×»¿áø ¥à&4ÅÿAÂNAöŽunzâé0·è-¹¤Ü\Ƥöå=ªñtGÓªW.ÎOJ™Çzõ¼;õà Þ˜Í"^!+Š kMªF ¢ŽZ…'^C£3Ïlp5~VXˆõ6ñˆŒ®Ýù‚1E)…Íóæ©D+éäž“Ç ’½ÕË~ÌX¤ÞZ‹[V:œú\è¯ùvñq¼¥]øqÎPøC2l~3=ºÇñdJ}µ¸*ãnñµB<•8OÃóÖRjB¾>UÆk†té }‘È¥¶·S3s¼t º 4ú“öº( ¶Gë ½“Ñ!òýò»5Cº™˜¢ÙajKÕWKUf{ÖTgéíÇ¿e Ó6&‰ëyŒ™Æ]ŒÝ¥`£ÌÕ:ëƒA‡-xW­IEöfÌ#­HÊþ”J÷’l§­6ë`ø¾/Cü‚QOöðÞïEÅÝi݊DzkmƒC-¨Ïèf©“7}œŠ®ýh/ÿrЋ'ŸIG!îR|ôZú9×ÏåK#ÊmÎ>Y›(˜(ŸNM†J°VAÆOFNvñŠJþ³~?‘+}>·SŽë®¤`Фû,ŠX}^šd®A‡3àVM ¥¤‚Y»³Ì/®j*Öf6ZäùYæLZÍÞ‹-ÜÞä­ZM~͵Ö\Ñ›fÃ'Ë‚H€ŸÛ•"@¬õN¤Ðg«z3ê.=1&Z=±\|žVë/Û“^gV`ó9ò‰Ùµ-½é”CjÛlÑÄåæ&È¥yxà‡ïÓOë-[nVÈ Çt!e–S9ç)&½¤zÖ•¥ì[É/ËF ²lÕ5×›ÌçT-ïÕÆ~÷àqÿé4ËÍ)«Î4ëÞì´/»¾ùiª7ú¾Ÿ^o~ÛÍåÅ"G%’(ëÓý â¬ïõ{(mk[<êñErº)¨v×RõÛºNíÃÃ¥·ï„Ð)bÚï!¤c˜™Eh+ Â+¯,šäun ;欓À®­n\òJti”³Â\Ì­éÎæºšÛ5½ÅJ £eâ¼¼ZŽvý`ÃÞÒ£ +nvæ¦@Ùh–BGl…ÚpþzR(›”ÆŽ^ưt‚éŸ-µ±$=‚a¡Øe®aëD\\7p7æYÙÃ]­Ú·_Ø«Àç®ÅoiÖQÎó’Ø9R{À»ÉËųC##PLiö:ðãφR×Ù¡½o)É›ò냪ÌÎ4 RÈ›ÁMk>âOæm%#/Ü|¢y0ÄÒ]kÃbÒggp%F$Æñ‡«p¯C1•+_o*PfNâ?Ò•ÛhjÍÛB•{—¡âqŽƒ 3ßKJX>ŽW~äÀ]Ao¥W‘ùïø~*¶ß5DLaÎÉw«#Ytåm•/ƒΞ•¦yäÇQvÙOUÏæVò‡ã`Öp€ÈúM:%¶ô³iÛ£tïfRC¦âéaa”ÔxŽÎ¹T,Xv¿J *v¬Q|Œ…MN½#åQÿ˜bd”Æìœ2†ÈL—››{X/DiC΀}íi0—¨¡aw˜h¤âΆ}=8õI>qv4¼ Cm_7‡ÂèÔoÖ÷ð³«uÂWS¤b‚™¼ÚSס°Ïåg§‘Å7½, X÷Á^âNwdÀ®½ãÌTƒE¯¦|÷d?Æ(õKü³µ{æa¾¯c¸Éö¸\7Èw =oÛÝ­¸ÚlÉב)9›)ãs/c½ÁW³[ÎúÌ(ÏÕlFW]DHÏ| j‘8Jµþ„çô¸:~(¬2X'æiØ‚±è/9ìúš±Ó%=¤²¼ó5½vÅ“9òbõâ±åZ͹䭣voÁ$9ÿãûãòtRþÀ™Q™ LDæ PZ=ŽÓà¶Vù¯}v ¾C\¸z½ü""èœE#òèñ¬œhr(|äöçIoiG0§ýT‘)«²a–ø7O6ìIOöXzƒ<Â^ö>~ ïJ~ë €`ш v8IFò·4ŸÛuÒ›R¼šnø?g¥Û†„‡º" ôþȈgÎk#òZ!wÏ)¨€EÏ`3—;Ûß';»a /W”ÊUN”zÀgJW¬!‘Fë#ÙŽ[@øÚ—"t¤Ó.ºòŒ“¥gÊÅboF\¬t¥•ƒ4BEwœbò‰ Å#P¼ï§a]éE ßO²$-auׄRœ)ÝÏ”“…ŽåGI£Œ²qö„7Ìõu¾íuPLŸßVôÈIÚ¤±QÅù˜à:—FkЈ‰çrRÈͱ¡ÐSf!p½ÂÓÑ êè§Ã^Êw„Íñd‹µæ2•Ïr)ÂXç4°÷÷ŽAŸRLÔw„ éam¯§Ëp%{ƒ;Š—{ÙSÀY, 5m®MJŸÀ9 !ΛojUú¨6<¶¯b…ØfîîŽò̉æë(êbé¹>ý:UFò—ܳ?ÛQLÇE\@U6/x¨TöÔº”Á}¼@šRwÂûá,¼™B õâc%Èë)ÏsdVª?O“Ì×ÉßL|ª¡v±$æ È„Ô)5Q?{!Œe§QK ^?'vå-ݤ‡”l{©Ù!-ðúÙ†kª¿Y¤ü¼†Èì¨Î~TaŒ0vg’*g‹+Y•¬.X…VG䇉)È»þöî¾Âp­]NS[ÍéZyÀò€¯1®¥¼åâ‹t‹Õj–’V{Q»/ì/B< fjwœò?$Af³š² Ìgc.šÍ¼Èó‘b(ÕŸ›Ì+ânäβÍþ) l ¾¶Š°«,À¥A ¤žWxfvØCB/Qš‡AWk! Àø¼«Ô›ó²ü’¬æ8¼^j|Ó×eCèb}\!õ¾Z•d§¿xƒ<ßÓÔÕäñK³]“J³YC’#|y0µ Y¨+s`7¿§Û- $8ưv»Ëm祴øÁþ |–az×ýCRÝË¥åL3x-Z:ÕêJÏËdÏ®Lckè*]µ0‹i½K׳Í{ø¦¤kkÍJž3®û«;¹à-w FÞØ•vkú)ç—¶éYÊh'MÚÍÒhSTgé&Ò´7/·ªƒóÄ>.4Z“;÷‡¤œQirê&FiÓ½E\È.${OR,abï Z¼Ä’LžQ0[ž¸·’êJå1Jæ¦&¶O?H¬ƒeæi í m56DÓ·Œä?'úñÓ|â1ùÈd;v1Ãó:k¨EøŽCnõVæF Yæ~w ¶Aµ{¥D·ޏ.Žz¨¬OL-•ùnWôò¤©£ŒSÙ ®jçµ-#öIšy’þ"Égó¬aãS&zUû½ŠðDË5vÞ´v¬ÌU¼Ñ4o¢WJsÝYØjÍÖâ-µó+Æÿê÷åRï}¿*à>-›å"¤SþEó×;,Ûšší4 šÜ…îc’œe¯÷dÔ´xãË9cu’ÕýÆúÇœ»Öp«?Õ”çúþ¦¡~züU½ë­á˜˜?UçÂŽ³»#Ýnt•€‹¬:»–Øÿ”Ûd‚hë´•‹,¿Œ3>¿ªçYº¢Î¨;1 GMUI¯ËtÍ—p×É|ÓSAÍ|—àj¤m,ûE;;Æ)5TMû<¿óZeë·ê0)e¶„!¬Ý}sý¡ËÊuPh5ž~3ñÜã®ìgçÃß²„¶ú6¡«"7¾2¶Rg*}¢HŠ_güΥʉ)ç» Õmí?ƒ·¥‰ôÊéïIÛüSnÄï`á#(¶Tó.y! [”Û‡Jú߃ýsÐ÷°ÇžUäÞgÒ˜¼_ßEªlß Òe‰?$”å{‹lÛ¡íåqh$®@œØK6t޹ÄéÈ|´‰Rg†WY.çAu3î!qÁ{…8׬­2aØi#Ý?°VÊ-­ÛùKÉsJµÃšI´?bDêòøTš7ê…±rã/Ó€2ƒTÿ?Ê-.YïîÇÏó)(á*o&B²'ض Ï3¶6²+tè:¾¢FNØ\l«­ˆ,&&¿Âàñˤäþ¬š·¦—gaÌKŸ“’ù¡³Ùìr?Ã%,.*FSY˜µusÿë•ÝÐ@Vö_#&éQVÁXrâ@™Å*ioŒOGgGß„xRáüói”Ãò°ˆÈPy$~[áYÐŒe&©*+CûUnÕѤÕ7ÐBsaÂ.PeÔ‡¶×Ç•ÂÁ€q.ìKo°ªç¬¤³¹ò¢f:Eí¸¥ ½±°þ ƒÕäÉ•/\+šb™ò6|øóÞ(‘[!¦þZCºˆ5„ötQí½´Ðî|iZ¨ £ÉGYüE°ÌÞƒtÁ˜3(Á4AwäQwªqvÚÿÒ»»Ý bF»P~¯6\·Iˬ¬ðÐØ}ü§—‚få»ðB0{ÏýCQr<ÜnŒê}ÚöËÙ^Ïm%¼ÍÇ›ÀíϦ¤&µfi­“}MÀë¥$3ú–!Úþx2ÔéQ¥Û9sÛÑï°À»UHfP\ß,\WöÓQµ±2nì.ÄNqJ¶~‘”—êÈ;àÉ!©Ê³qÿ[¾†öÂz3ãèäšµr3X½kü·~!ì-e˜¾hÞ»_0ùrQâ—[XtÍC‘‹ê8PtÄ:ÕC>D‹cþ*,xéeWEµ]-­À­p‡„¥<–ä_ý~BÜ]½}`×Gõ",ß8xTTçß‘vkÙÅVjRvC‘‚±ïYÓîèãg[ZzD:ù+Qzæ^YM˜–âï‰våDñV§–\…îÔfFŠ8Ø6,¤úÀôd¬Sa`mö#?÷f§¸Å‘Œ²´I:8ݶ;êâIXÉšgìóf­wÍÚìºÐ°/·2wÅ›S{dE­ìÏ/’Þa˜3„ø8E†ËF×g\7¡;OYþq½îÒ[5¸!Ä›†aºàñ%nŒvÝ{£ÒH6€ããÛ8ß>NN‰svµ.<vP·Ò}ò1åU¾boÂÒl:Íš×^嬒˜ùÈ×ÿ[–RUùöÊ^ó7^Kä|wÓn¾e5aÕmu­¶sª!³8¾µÀ Ç)V.ïÕôM­ù×…9KIc‡RÃ0»‘OÍ£¤‡î©÷¸îfL§QÚùÆ,órä°L?†Ìˆ«Š{N%1Û'š‹/c×u¹> •^·– &\q`”rÿC¢Á)fyò½6ò­\¾û¹oBïI`'ïÓµË|–a½‡Y{UÞåj=wjöL[üOwbÒÏkÔ7´øn8;çJ5ÔòëIàn}Tm#=§ÎL pLþL”^ô|«F `nž¸«ù‡„z½¶’¹íÈÙlFÜz ×õPô=Õ¯ƒ´è,ó]Çä€Ö×H0vèõû"©õÿ!¿ØÙˆÃ•üê¦öšgªo I¿ç¢aÞª³’y ©¬½j¿.µSék¶Ñª-sT³þÈí™tü«Idh$O—˜Žû¨´ÊNÿƒö°7¨·WUÞV•tj/»>C΂Rk¿íŠ­ÊY›ˆÊ÷®þÿ³~ÆåhX†c%zá)]ç˜úΜFéÐÉO„oôéöÙ"‡Iô‡$×™|’Q„ÛœÌ0Ëyr_¹.Âé«ç›“¨av²j­:ðŒ}`7&ÂN³oâ(Á‘ž0¿2ª>n6¸h@˱ØQ}§o|¼m¼xÞ$^?˰’!^ÛVš¦õ¶þúA§OÆâ74êà”„'~Ö¢3‡æ,˜¬Å†ŠUÃB»T‰u‹¨K[Á·¤ì]¿wùxÊ­~ïM2’«`<–:µmŸ6Ûr9¯R!­)Ú³ë%þA{ÿH Í+ÅÊm#·6’{WüónÆÕ9£`#U±[½<.# ÆÕ|¹Ù>W©žš*oCüøá׳™ä£ÿO¹%OT·¦OÕú'Úô;Ûþå½·¾7‚ †°CÀ5í¾Ã]Ÿ`ZÈ?+Z·{h´TYÿ!y5DZô ñÎÉWÍÕìtÙº!µ²Y3k]1+q}éõ´ªD¢ Œ„˜KÞfV„²ùÛÊ`ÈõóYt¨ÔH¢‘·²ú_íÉ£ë ¢&° ã»A]o©‘V9– M¨ý3¥ÿ‘Û”˜´£Æ­"(Ps=¼°Òj«ÂdưØÑãÆÎkJBÈvɾÖY»J#˜…éßœ+»¡ˆsž*uÙQ³ÐÏÁ÷ÿÇÃò“cÄŽzÅÌ¥ÊÏÏ—„ð¢Î99TéñªF ôyîð¥òææ-,vñœ"“O7‚’F]ÌçÄ}¿žoêeþ@EÑÜ六‚=CñÊK;N-§`ãHš†Ôy=3iˆ¿&¯t†R¾§ ûÆŠRjõ™íÜRJ±“‡ßAvp$?–•Ë-̺UÝ…|¾œQös(#ùy«s“ÇŸÍvòòJ"L‘šå^Gå:ÝfIZsÚiÀ ¤ïâòÍSŸ=,ÏJ½rÚ ‡H¨Å/ÓÏxÚ_/vuB IÆ×WÖ¬U\˜oy§s·BÊU<²h8A)eÔJrF»gç£[ 3éû–-Z^I$F=€oƒ(Ç#ÀxDt£OaB~  ´+ºeï.&Ms¡ @ÚZp™.3ã&ݬ¿ sÐì4fžPFÚIŒhdø®¼šÄäì-¨›D~0D2Ï-…»ÕÓ±àŽªü„>bT»{Äܓ팚2SšUrù‘±ê¼ö±Gæj5ñÏÓ¿Æ!ƒK"/J÷KX¨Ý‹ÔiAÊx¼N§ž£6òL¥Í õ¸óãåp°{ 0ªCÆîg{ ýûĩÍûÛô7 Ló;+àQýÄJ™-ìîka Qå®Ònö9uËÃ"é>9bŒ·x"o^ÙusXðRm\bmˆð¸õ{4’‡ø¾ÏÅ#áÀÇûÑE•;?A©Î¸:PCr¿½IR~WÒÆ“ä„Þ¦ª±¦Ï,Œ­èo„Ãgwál¤ L‘Bè¯÷‚&òý¥9ñ¸r~œ÷·GxË5FR^ˆå<Ó[;®{Pà¥ü¥ÿËOë±Äœðlº×#§Œ,g@ Ûêá ³¼­i¾u’µ‹·‘†û>ù·2¦í€Í Ñwi5Í¢ ‚hÁò.q¢w^®¡®'Ê€S¢Ï¡›¾¯’ùö™›TŽi.W"žJP~:4¬)‘ó®©éž?_æÄÑÙI¥orL_¬ÙºGÃÜnIëö ‚83gJ znÇzé³HºQ¿‡×EeäRО¡…ÚºªC ¹bŸ†-ƒñ¡ó€n&ï‡5´á;;ÃD¶ó\›f-QpvRö+ʪ‰N(¹y;¼×"ý8u^å²à—ž˜?õ×±Á“œAa`¦»½•Ïv•'Ðù[qX|÷ìIc·¶ Æ}o{¦LÝ<§§Å§Á5äɔʈI-ñ¼ç=iÂ6Ö ÔñR¦ª»¢À‚Ì­´€ct,+3Dž‰}D*ÚdºSì±¥‹h[”3óa@²IºBÊveý›IãF½YMû÷”ó]g“]×xûçPc¼>6f8ôóf¿¥M²ìqòREä¶/P:ç ׳޽}cn6ñMj|k¹Ÿx+¢æ*ÇO«Ô²Å«"€R˜ƒëñkÕ9 ‹nN.=Æ´UG‡ :{‡Èµúª^䆢“ë¨Ù¢®÷¤Œt §‹ï^>Ê%-öå¼Q\ðŸÛ‚ …1X–ë¶Bë©´¹[T—»!8V%ûu^M ÕäØV%+ÊûÙhu¿:&|=±Ü£´‰UIÐjü¡ÝÁû—ÙTk(› t:Vk˜¥*·ApüÉA^£êféH¬¹®~Ñ÷‡1,v{|QºãÄΪ‰ºTEëüBdzNaë”iíð`SÞ^ÁíÂ`ÄšÇýÖ,{9Ûß7êÄ7â$Ó”½_œô¿aàû]ÌZ-xðvõç|ž7xþ¥+î,Áþ¨[Ḭ̈lÌ•²ç g7tÖÇt[cbx`·öµ2›ñ þ!Z‘ßL¬Ûá qËj\þCR'ØbKŒ¨É-C©*”Ù½Ü/²©ˆ~»ú„9M©›ýâ—˜g;Mbc•ûÄCôP}i>4÷Æ~–‰‡H$?•ÃF²ŽhH×Ê{Pɱ½ÇÈ‚k3¹Y‰ÒZûRs¶=ì§öì+gàõÛÞ ÈíÍáçÍ~Pûê0ÏBÑ—NMeîÀåj9¥Z—ïÁºððgÚ•ÌŠ­Ô±Ê›Ÿ¶ñÝ*׆Ýa,ß-Ö`ÉžMñ´ÂfD¢´*zþl´4!Öòô1Ѩ9hT(±5±T¹çš¿ûV–Oóº¸GÒ³68ngÒ— <¥âÁt÷ý§G@¸4ìd4–…½´›÷¦’Ý ˆrìºÒâ¾ù5;Yš0Ï Â}\d­.&VÖ ¨ýÓLŒËµ'%RÖmN|ãÚNÑLñ«‹ø>þ)`ë¹°;¿ŽjجÑúq#6ÄêTi;ªOõÖt}Y‘ÊÆ¢püžj^ØUÅ@¸‚e·¥(Z_x¿rܧv©ÕP?RcA³YÊ*ö%!]Sõáát¬š9€šŠíNÂ@< î`˜b¥Fü±¸d.ý4‹÷5U…')ä2Ä}&ÈׇHW{oÒN FÖqËî®C²`MA5/Ü´UæPõbÈì¹þ‹Ä}!Ÿ0ïóy¡Àž•êEe*;žÆÉP*Nߘ¶žÁB,> ¸ï‰k‡X쇂ÖËÿ]ãJÔ±v>Y/RC L;=o^òÑ}Íè…Ÿ+iíÃÅEÆ``ëÕS Q¥Í®¨5VVžRàw«\²- ‹³êš £>žì‰‹ð2Ìöúš¡N – 6ÆQÓóYu¨9ðM2ËÃoy¢5ìÑï=;ˆÊ_ø›t™œû|»1ªÍ³‹ä"—òÏ’ž%5'A‚Ü'ÁЉZ9sl‘.!}ÁQÛÍŸeÑv' +ZSfíKž}ÔŠ”ø¨VmE×u [z GBkõT‘îšUw›‡ŠÄ7Ô2W¶ÚÿQnÉ—‚Ûc©ö…@¯/$¶ ±Dª°Òw‹Wùφ“lJ+¬•åϬp.ö3O©¢É¯È¯µ.%Z¯Á¬'¯1¥Ê2ôËÕVõ:%û½]–=1,ÇÄz~²yïLêÃ=2Ôrö•—#tòÏH9l|‘Šsd13½›u–‰×ðEô$À7'ª,#ƒú¶#V'žQ$Š\;ÀR±~BŸZJç©?åVÝVîgu fF9æ5üÜì¿ÓÒGÄâ~"p9KJ›/éÖÈ%õâ\ƒ¬œCRºZþ“(ûˆœkÜž"C#¤÷\~ÄÓ½QѶ—(ÈWÚílü‡½Fñ¯0¨†±¬®T¯×:wª]²!§š>hXòfrp8~´ÖúWt‘—ý¥K©×ýçwJ =žn\Ï’p­Ôí­4ÁÍe*Ç¢Q]8© ¦SëÚ*j¹‹*é#G]̱E¾*8µxèW‘ý+oì{Lã.ð›ÜÛÉÁ@»9ZݹÂí®Å³îä^¼Jë U|–]ÌŸÙvaÜù§R¾¿ODöÑäìª0-ª§W¸æf*m•÷öJííTsòžk¦Ñ—,å]ÛAé>{Ô”7 ÜWe`3ŒwÝüÝóô&Óöç×1Èq27Q;ܲc&µFf†ÅÝpRSÁ>˜7.——ÜQpFR.îÈ+-•S‘•«3z9=þ;AâÞÊ>ËoÙ½Dt )hf1wÛö »öI/>óžQäójú]ï}îš™úô§ç=|Zë)¤òøÝÀUÏ4k¡ïUÙ å!N|¿—éQ¯­ÑëœÒò†#ݳݼ%ò†»jFkÞ:i£ïºý!á]Ó5¨U²´æ(Øêb8QêÙ hóKî¤ÛOñV¿¥²uŸ 8km:eø…iÌ~½‹´³0pB:bœ¿ ¯Ñ ˆ\Šä›ó+ž±¾¬¿§ïAÒ}R=h½Í¨Â‰Œš´ò6UCÝ ÿÝõ®mýWŽö»C !yÖt(t¿AhÄd‚¹€ãÛ®9l×àøÿÈú®-Å•eÛo‘@ !á„@È{ï Þ{ïáå|ýE]»zïµîKõ¨1*¤ŒŒœ1cFd©žÑòÏD» îüÇ’z ²Jƒd§gÚ¯-jE¬-– GptíÚ"ꤶÔãÙü^†@¢?UGùºä¹µè/µŽxéKXN ¼­¶VÔK"7÷dSîé²NîI0&=}ˆšÝO–IëÞÆ·bo×È6àá`nÍÄ"î1Ì1Ž×Í5 _[Š’†Ð,©cÜ ?óZ?®&YÜ×¢ðX(ŸwLRºÜݾÒùkIAHö˜’mO9Î ›Ä‘kl3L± ¦ß<ºƒJƒ?Q”k0–¾ &jÁa—ãÿ2`b öÞn×¼VâCþŽRåíõæJÇ8²E«©ÓÇÞ…›ì½Àø\Q bsÜvpêîü“¯$­=‰±DüÝapˆÎ §úøí<¸ û®£ØŠoøß%0CêœÏ2—Éó,.|¶=#sn鱬òTnTn†ÇéêXö‡w¥éj(ž>r˜ç`BÈÇɽrËé¬Ã_’ÿ0} ‘.ÐÈ”mñsµ8îwO¦ŽÉB„ìÙ«—VŒ¬„W¼cLìòG¢L¶¬Ö˘?ÆpìôDŽ>Múgv_kµ!‰ýØê‰ûµZNÇ5N&›ïµ&¥Hèʼnìm57©î~ÇYFê”JVƒÚ{ö]¾úåžJ/y8W¥ÒZ·º —ï#å8ÎèÉg®²X›¶ý€®&õ 꼓¸½3œµ€â{¦Ön×Åf^X¶ßi¦„Ô:„aw6ƒ{44+ÖžÍ+ãì”Úïx8½'‰Œ©4·Îˆíºüi×ÏR±d0JÒë@~ׄáüT4hö cJr”éuGÔ?˜[ö9©æ­FW›v§ëÒ¦¹ÇGy«wK,v–ey™W­&Óë§zQÓ[žw;ãß0‡Þ¤Wo”5ÜŽaîçß#jõu¼¥&sÎ*…i•©áR-8íZç¹–Šþk »Y ·p«AžXsÕ‰pÏ—ùT=ޝe®„¯=ª•4“Më{ÒŽOêÊ¡Vco'ú¿àöÐvgÇhE}÷¼¼Õ}ún‰ëú2TôÀÖ *ñÊðF±X÷SšìGkœU‡“Ü-5¶ì˜Ûé{H*^£Eðn%áæÇ9"ýL;¨ ÛtÊ<åYŸæ£µœ(}B¾©]é5ÏUÆ_M«†P¾÷|‘Ԥϣ¤Šg)7³‚LåÔ:Ëz²ÅØáÕGʤPí–£ü€ÐÒ3KØõ!ØDïSV‡‘ ¥#Ð1GjNŽ~ŠÇaK’Ϥ;×i•0e È‹Mv¾¹¹íc#Ýþ>Uí`¤/¾Éµˆé -éú |Vh¼ï¬Ù[,3æÖT ôP|W÷(óÀÕ ¶‚ÌìjrñÙÍ}\é/Ï‚û{k3r”A\à$”| $é¼pLÁ„‡/îq¾Öõ#·ólaf ÛtfXO-»S³=jÀÁFïfÉ%mgeÔqDìƒ"~Qrpdµ0zxÔMÜ„3ÏÆæð:w%];¤tƒ "ŽÎ;,\Ÿ#‹y±2yp\ÅÖêôiB±ÏkVê¡ÂÕJlä`GÄñŸQU¤‚È„·y®'òSÒÅ4Ë‚à¢5?_êS½Ð“Þýùº3sØ6Ý#þ¢»¤²¼ss©Iy¹¡%¯¹Ò¼iµN€¨³Žþm$ÐJ5vs#ÐiVø¼<ކ“è]¼ÔùuáQUö5ëúÖ_Ýœ-®/gN½}&¬Å“Ü.míX$+h œ(å…ßbKûì ]wÎ’â‹#Ÿ2ãà9—~0ÙÖ{Å_˜±ÿd¦Êq[\ªý}çÖ0SÖ`ø’¡NõóÎE€ÔÞA:þ.5ÅÁæ<‰ ÿVGk$#BpÖëüm®Åcµ«ˆBãHÝÓnIWÓ•Êo:Z‘yýz†B+Ìm:#j†êYM1Ù3E‡Ú²mlƒCCè\8èó¹YEPi’~ÞÍ»¦ ¿‰õ7ì7¯5ßì ©Åa~?lÛqéPûþ,Ö˜£Ò·Õ× ¿`™¢è"/Ù”o+Åê'›×YZå Ü®^û©Õ›V¾ŽÐÅ·ÞÎi.ío9»y f+‰»ø¥ µædîÏŠ WCÃuµ2r¡ó¸+}v}h㻹ÍF_º<ð4‡ÎøOF ¤¯®«ŽŠ}>`7¥ìr2oÓÞ Ö'ŸNî’\_µ’,·ÞŒ¬Ie$ïêç‘¥ Ä«ÉNµîyx§Ç!$|ðºÆß3.­·$Ž®,ŽlKÙ^ÁGÿ¦×eñÍ>ö°é…Øäˆ£S÷ïÔVëŠäýÄßMDR[kï‘â….#ª×Û6ÊN-vN£Í‘[Q©ÕÝçCy„0Ö|„nãs³yâkhÑ~˜=E_Ò£0™”h¹Žm_¤g)¾²– l¨.nû¥ÝV†s¼ýÀlmè&˜ŠãÉÈ;-ë}É:V­8Æ|% /ù1Ÿ´ËxD“«ëú­’];k]Ô“Z4‚ß%ßV'ö’IZ18¡e~í€Êš9öÍÆ*êÊ Quê »å±6êË7-ò)µöŠ]'îmmd\Î?"=&o²6L÷ l3¨nÀèt¯x•ÃXÞNá—†\¢ÚýèBâòn`¼‚ ¢U¥“ ÷YðfÅo䇨îN+Öj™2Ó©ŠFwQ¬+ˆФ <{N^ ëÔøØ*‡ì²Û|j&zÈY‡‰ «Â2þ’ »±TJÎM·r®SîÔæ£ï·K¾ƒ¬Ûœ”çŠXž­Ñóf9pG¨@Ù^íßqqô“†Z­6 ¾•¹{t ° Cì}¬ìžb–åüaɯ€ªˆmYÃÚmÆ‹Äd¡h×ñï|§Ór/WuúâÆ¸œKÖ²àJÉ}‡ÏÙÙ—ÃÃãÙj—ŠÙÓ»V§¨ Ëî®5«K?UÊ?º‘²‘g¤Zg±ÓœŠßs+y§änY‘f%Ybá¼{ …ÊciTw<`F}%:Èû~DüZÒé‡'ži l—Ÿ‰|Ì#³Ú+ Ä­ò…mÓÌÄ)Ž›ú¥zÄ·t Ôý‰Ó›˜u ¾º¸õEe÷Î¥ÏÕÜYÓ—Þ¥VÙˆ¯Íë…ª"\ál&¤Yô÷ÊXÍõTíºÜ›c“ÿÑ;™­6¼Ö>ɲfò¾¦å©Gdk(–‘@QOÓÂÜ@îÝñLz¾¶ +# L¡ÐОvõY&é,yÕ(ËÖôÚ”¨i>ð¹«Óí,§o·yRǖ‡¶‡ðÀàÞHC¯›ƒŠÐÆØšœŒÆÑøË€éÕúó‰.\ oM*¾!7‚>‹½öoÚžüÓMD×FÅR¦‡™ŽúF!¢gKœjÜwÎ=Uçuæ>*›çž*D[sg1k—5`†»ÔµRÞ:˜¿j‰‰µÊ/wrrˆ0zé•kcúk‰”ÑvŠ~r{¦ C®ŸŒmæ‹+â¾Þ4ï°›Dꥉp¼×T‡/ ›~CÃiv)¹>@\,QÄ-ÊZq¢óQ‰ Óy8`]Åu=¥,ÐÈ®r :G7R×UúY—ÑYÐZK=Míú¿í‡'î(¯e±o| u$zmAI èÊ»$>Š 7%U"ÎKéå~45ñTIxhÂQÕïü/¸µg˜…sJ¾ØQTVd!碂Zw¶vÇ}ùm)=m¤êÚ¬Ù»AÕÃêxn.«Ìòát{íÍ­™»zCkÚ¨ºZ.â}~x[kwšpLdVäo†ðGdq_Ü!ª;¥sʤjÅ8wPoårâáLÒ ÙÒòÑX æs™kHS¬³WÞÞ³°B' Ï9GSæcb ×ã½ ÄQ ÌÊÙzï_Äÿ0·ÐÊDøÖúÑ ´nò³ciZ׉ÌÊÖ/(»T˜¹¹¾4W¹urz$*ÿüù“~6##¶Ñ÷XôÍ.ÔØûØËiR!yÄܶ¶¼‰ ku´×ŒEóüœÜÍ™±~ÓÃw_?1-Hƒ¾oÏ)ÐÐÔÀÇPÊ–^ξг’a r¹>Æ–g{öHeÃ'ÚHnëº=ké/sk®îžïmF5YïèÆ å‰óéL¿Â ݺQŽ»ûžÔºè©¨TÞrîôµj{qú;oäx÷õ‚MœÔN‰Ï…¸³<èߘq@eíØ%> }h8hío×þèL`zø¬îrã*;ÏA=þ±Ä 4-¡sŽ\ôT¬$f5®ûí‘N†ƒr+-¼zDO]/âK»RX—/ƒ,BƒÿjnÓG#Q¾âE†'øMÁ«=;+º­}T“/ç^ŠÕ%·=InâšÞ sH®Ç.dLéduÌ7¬Ë:Ï ÛZucµãñþn—¸•Ÿ5”¹Ü½ÞobGš‘û·iêò秈`fAVè…ÿq¿1ég6¦õu­žs»çq™mm|ùÕg ´Ôšç–j.ßÚ;ÑCÖ«VùUPws§èÜW§˜£[–{Jëõ§­„þC}6k9§44Iî:2·ÚD˜/í§¾$‰!´¬éìœígÿù€¯AëÎû;¥óæï´Ã„±"á¤1 Æ|…q¶¶W3QÕ¸À=³¸›Nm6¤ºÕ’çÍLêiò¶Y¼W•õÌå¤óÓã á6fÚ¨Xá¬7ò¾rÒ±çØuàõ²ŽEÎ'¨»P·Qô}ÿBQ…Wå>a—ZÏl{ÚÐTüK ú+bñ³DRwÛí54Ér»…G{ßä ·¬K4^@å„]î.˜4-B~ݘØãnkõÃÅmú]ó ùø­EÜUülRŸ¿¤s«x}<ÑÙöK×2n>›û%}Ï-o'S‹!ø¿;ÈY™OS-‰»|ñå2¯tønû]Ú ÓC55'U:•Ö)l®¸‡)tvÞ;h[°Çõ×ì§w~L]öuh¾çè3-³8å·r©¬kÔ ¯Øº(ÏÀw°‰øtkëŽxœµºîT\/~\eqÈÁ‹cü=WWÄjï‘ÿX»tm­ëéN Ãà_¬õ+íªìŸI0».³šìü­Zó™õc Ì>ÒA{¾ÿ¹JÒÛR•”Ÿ¯¹ìóçþ³~™]å"ˆß”uºŸ¨ìXSú:Auö·¯ûfagób©=R‡¬›]}~Û¶¸sa ÉfAõÜÉô€É Óö¥èÝM5Θ„¹±w~ŠSÒð‘ô±ñA¼-eÙMZhݨ !íÁ}À©{¸Ù6ÀÝë=C{”¾Ú.Û¡Ûùèz,'s¸‡Üeå,ò¶ݽZž5/s޳¾ïŠse?Åphz·$’ɪ¸îwgýi‘Øý—LZÁFw’çw‡ýv‹:Mä»ÑÓ–[oÃz-U(§ížŠÎáð^@çöuæÔù«ô糿–”(7Xr!×ÙaÉ‚x=X»%„û&µgì}ãé„åŠ~ÈÀPÂqè+xüÏÇÿÒq¯cž “KZrK̲B ŸØ"ÌéØñâ)YÏ]®å@¶T§¸éÿ™¨¼<'¢'Ö”Åÿs8)ŒíYFoÝ{œ](~’rÛ6ºÛ²( Œ*Å};ì!FYWD¸¥Þb„gTÞÀTÑ`úC–òq~–ð·Õæ}{!2j-Ë"{<}bh„•›:´%˱ã¸ÞÏ19|¹ƒ¥¹¶8Úüù+æ?lÆñ€§xœi…~öÑR„лœAò:äî;¢(«Œ„Th”šE0ÞÉŽ2Úpîgè._©m抳n‘ãÃ…¨µJ-ÑN8J¬C¥»¬ñê…Æ©°;"‹9曨iyƒŸepýv“ˆþüi’¥£ÝÛЋj~ZF/Æo³\EwýY>Øú.񯄡ÞÛ}´€3ÔÚÏ<)ÓÿƒóÉž6±çr*äBk-˜ fÊ;mD{¤Z4íIše·Ürlü̵·½þc¦b(ñÓÝz0Û7‰Kð õÞ¢³­ƒSÆß?¨)ê¯o ¾´ŸÉè¿\…3zX&Tvw½7 mzÔrÚÙí~J„¿é±V£¶¸+;ˆoR'=GŸÆ˜3nñ¥X2®+Ã]ÐÅK®TsÐÐ_&9ÜAÚOø³è#0ãÓUzúõýò°I­ý/cèMæY$·?õj»^‹( )7¼ªp—yî¨Í þ4žÝ{8Ѓ 0x‹Àþ‘|(þ¥Ör&êëÕ—"ÕlñÏ`7ì ú¸Ã´Xy¯íŽ×7Ð|©¢ó97“¤{ü¾­_—úÇsÇ¢eöèÎ…÷üÆÔñPÉ^çée×P†Ö32Enä¼C‡ŸÌ¾ÉiÁÖ”üé•Ï ˜¿R䃰ìLÝS‹,”í¡’«ŸŒ´owéê ÙT”‰]Rp[‚¡ù Š*‹I{Yµá«8EÊú·tåÁìÕ­]}¤¡íJ iÔ64’€;ÏÖZ—ºô“YT€Â´ ëvÞþDZßÏJý~kõ]ƒ 0q¥ñ´ªW×/CÓÞYˆ—È2†–qÛ3„w{zunú¯¢Îç»`µŸýEÒE„e£Q î–< q”¬QP&¿Îc³}úîî}çb-*·ÿqÚæ–Þ'«EßiuÙÓÁ‰ªŸB<ÏH•S¯ GŠýèdh2¸ NëÒA‹îÿ¶d ß—OÄ ÐÞ¯hbÂÞ¨~ÚE§f%K,QÆ–8áϳ˜–¯µ‚é¡À–rQÐü‚ìjÙ"«ã<óQ =ÍŸÓZG-¾|è÷¨.VÖô'DÇ€ê$ß¶ü¶/™Mx¿J{{pî:éâMçêQÅîõv‚[¢êdU»¥Æö¢9½J÷Å«c0ÁëÓÈaÏ£<–"Dž‘`ïKM>C'кмA÷ùBW½ñ ìs…÷Š}à%›ª”ÎwÏéÜ^<{…P´ªÁÙŸñãVdÒ½Þ0y8a+?¨ÐÞG~ÉFôâúëH[œó„ÿ¼ó EŒSûHÖÇQP“§(7jƒo°X›Eö1Êo[¯óZ÷ßÄÆïTœI-b=»›H ú¶T1éÁ"“F©} FdÔ9æ@NåŠjé9i×Âæ²;0y©tOºî0ÏìkWX"Ç{ÍÚX2Ç·ÆoTîÏX˜ÍäµhºårsßÓú}V„e¥<È&êõ¡}úã·*§CM˜* _σoáÍMxñ¸\ªji¿IóuÓ95ü´ÙxüP„ ¾Ud[MMï:Reû6üƨ»,SJeÁS9Ö|‚ØŸùÎ{ˆýyµËe!UGÒ½/#B8ªëì¨Û”$Sbsü£ÓS>í1û´À¥Ç¡ÁI[åÉU‹J£_ºéÖ*Äx 3dïКXùI]ƒÏ1å& K´ƒìxFºs~ŸÛ¬sÅiud¼Õzb.uŒä_lOá(æx7ŸóÑS ¢X{¡ÄÂ>-O¼œf?Y³µ·s=¦¾°«®iGŒlÙ¬‹ãy ‘ }övÈQµ)Tï¡G¢Æðè€4+“„ cœ°ß½ê œˆƒ¿J<3ª;ƒÃṪÚA‰›æ§1;u!É£¹»*ðËdRëIJ–x¸[ Ù ³ñ[T=­Ô»UK4úîiì²Í|•^ùšæxÆç+TÚkMxÚ @ ¢…¼'÷à‡´|êžê?–]ýœÞ]¤W…Ný:Þ}"ÿ¼±‡Y¿ËŠðŽ:¯àÁ;øc[,“O&'p7ú/ï4mÉÏSKvèá1äÀÍh£‚p/”Ìw„öiw×òö†j•°âU¢#2CÚPÒ¢¨\DY(~Âï¥^ÐÀ¡€ß 6;™Ïs½ŽmºâàÚy+>°R˜IMe^X/Õh4½TeftV&ƒö@£Tè?êßRÅ`ù&lU_d•BÙZ%éé~S½5ät•uq•Z®±k&›j^½éäV¹!躈åê;ëå3€|ƒ|¢Qî©Ûz¡(2Åo^ÇE[ñ•­4‘ÖW&7@u]Û{ù„ЙP¹òÜÒ{ LÙú?ÒŠ·Ì’§eM§¡ î€ØWáu±-SÐò)YÓ&(· ³{¦x™øôg…'¸æ°pþÁÉžxöZXfä=?j¨Ø{öÚ"iìDZ—ûK;ÞÝIÉÒ ~%éÛ ýÍ-ò,.þm%ÖT®‚¾es{Ç^pÃü7yÃ|ÚîsÎC¢*‘Â?‰‡U2ñ¸Îã…Q„%nùôè¸]ã‡3´Es±Ê€*Ô˜`¥Í[B£…GÔû]¼ùkí|µ×1¬0Ï>á+‹YKúLÿfd'©Ïã^Öòkjpa”€ºçðЂ„`º^DAžIU‰¶/¡«<7ÂîX?\úÙõŽz6ä)émb¯Æ,øDÖvòò­´M Ïgå=,^DªñYµÅ2f]ic÷2\ýDÒ¬ÂåMã¨ü´ê‡Â:Pi|ÌQ¿ þ¼j•ýPç1¡9—¨ºx×^©6Ú×WQ^sB÷%¢”Ÿ¤2¢´d+“tÆöͰ2®SR=¥«L’êRöS –7‡½¯ö=jßîæTÍ -^ÓKA‚Í”¼£^äÅT_ÁÏÜE‹‹Nù‹Mªºú~Ô9ÃTº¤œŒ·ZçüÍ£Zâ#c9ðÝ-Ùê\Ò‰Ô6ç»§¥«»ðóÈÙ\à ˜ë#ÒíPC¥Ùô93Ò{ã¥äм×.._‰ñ‰ÆoåH·LÚ·zf³¼¹kn·ý+ì9AÚã|ù™×&¤··×½(mÍÄ®ÔÉÇonI>8‰‹ —[ÑfF¢ð#—wrÞ.ÌüÕº¥<Ÿ”»°P[L¯QMªø Í5z¹–´~9.”,B»y·Ó–ÓkÂ0éd9·rs¬vŸ_­ø @Ùp­qxAy)ÞÄ…[±XNÓ ¾¡¼Si»º–ëïVE÷NŽ'͘G)¯sÒ5þ·VNýÂGAõ4aNñ¤¸pÛˆ^b5ñAï’P×Õ°®Z¤4X=‚m8Ÿ­¼jm¼ú_‘ÞŬƒiMÍ7«7v;í¾MŸ$d†ÞÕþQ(e.`¾‡×Zm…q²›Ö­î<àACe’^^ßï82†…X9ž›Gƒn­|!Ø3¾X)£úúA2­b4P¤ùr´3i¯×,Uí‡.OÏÄÝ Rà¯,ÁBŠ·X{#=C¡ºë§4=åæz‡™†ô“rJ>Éß*´/Ô„By®"­Nÿ˜€ÖkßWãí'Ñ_–ëž0èm”Œ¿£óò(³t4z®ùúæ6†¥[yH]nÖçÒYÏ_p@³ã1Ø cGq¢‘Se6Ä+P —P¡‹`T¿ÉAŒázfŸ8d\æ;y‘°Ê~Þâ%8kWpª—:Ø ç³Žà«aÙ‰î·nÞÝ¢°Û^œüð¥æáZõ¬wȉùÜ9áïÚÐ.§f…Ü+¸/¦X+þîÏFXo©t\Ss¡*ÙÕ?Qvz*u²šu{ q7Å ×üX¥Vcv¥X“îëbÎÚØ?hèP)½Å«5xÜâÂ+¾s¿¾oÂû;“É™ »^ ¿q•„ëM©ŒgÂ1² ½ójÀò/s J™i¯E­~¹~·Ê¡ùs᎞"äOõPVMJ‹übh‰eÊõ¢“ûûÇX¦lW;ÕWßýg§õ»°ì𾩯®Cü†ë¿t\³¨Û¥Û‡ŸpûºÉÉSLžÞ£ÖôPß›q=Œæù–¡Ú{hN6Ÿ‹aÍÿ£P²\ì“üX”k{ÔN`½~© é±}É”)ö¤ö^èùÀqÀ)+v<ù€ú@bº…¡sÇìîBÄþAÇÕnšr;<Óï¶æÇÚs_ª·Ä•s'·®­×G6½fnœœ]"ó¿žö—ì[Z,ãB¬‰Â£E Ÿ[? >R›©PŸnøÈï¹ÖPÞÍ|Á¦`ÇëwRãùû'ñ1/³}"òØ6dw–7]bSÑ|âRïÁ´ŒRßš'‚×üe÷öS:‘O£0 ,#L:Ä¥8ã{ÿ†ÛC«SØ"6vŸì¤U}_K{q.u§‡Ý<¢™™ NÂ"¹ü}õkÌÍvË“F…zû¡8r¦¬‹ Lð¸v–^!¹¥Ž>)é‹ÕSžWIµg ÿÇU`žü)N %ûy—.;-/ŸÅ´6¬µŠâ‹¬ÓħYúH%Ôê˜o=ÌÔPEÁýbããîókÉ×­s#Ã[u4l#ñ¶SÎ[)„µUÃÓl—w%ôµŸépÓ˨!{®ìª?ÞR¸0?$É7ã”—F5&[Ö®£Ädtn*FÚ^€ÖÕÚ¶70òxo·q#xû•Y¼ö‰,І²*xbÓoÍik¸.o-f‘H eó=§ÓýËjó\¹¿ŠCkŽ„¡¥³ü¿\…/—ŠO(1¤¹?È"IzÕ¹4Ó©¹û¬·•gºVœÁu±3{g4ËÖrŸa¥ãHÑ úc–¤IkMzŠÔ^¾kžéWbŸ!–w¸%¬)eÙ %Û RÂŒKé_–°¸q£è5¤g¥ˆ¨N®£¦ºäÙ_¹‡ç%¼ÀvÝÈ·Å“=Éo\²[!Æ»E6­!÷k‰Ï‡á5²Úc¥•rgÆ™…˜ëM™ŠßˆB¤äJEè`fWî‰ùGA:|ô#¿×ºŽ×úc “žê¸@Í*ÐNM“¸_$Fì^Ža€A$ŠùÁm/u;×m°YEÐçe™ØãZ¦9‰-±,*2ÙKk—Å» ·s„¯Oª¶»ž’siÊgK±p×m… UÛëŒ*ÏL»TåÇäu”­ÿ¾z›8#Ôô਱Z<Ÿ[XX­Hì²òªwícg`ì‘6bõ/v:¨o¯ùžØähR2tywëx9Õ,ÕP õU<»{÷1+Ì“Þ^_î­[=Xÿ&ùé¡XýÓ|¡¾DÙíÌF3¢H¶s8ýœ]Îí3èí/ÌÙC‰]¡±€Uo§YTYqþá*RäÖùMDòÑèi/–³È…¦ˆ[CÙ0¶¯áØY¶/Y„.xö>µÇàí ½aï߯H²zH%Ýýºhœ¨GÛ}„Fä8è B/ÇéÎË絃ݦàÚëö‚éXò‡~èàóG»‰÷ 'Sº”â4„¯ò‹ÅOìlxé¹Ïx¹XiqÊÞ"‚u±ùs„iå™ó“”‘WªÑb™[¡“Ó P0§ÆÔ¥› Wí:‚*嬼Êïen”¶@:N[ %šsYQ÷wÖú¡XI,{s#†…áX(å¶ŸøÉ ne;–bc5)'P|ä3“5„øÅ=ó#Å1‘ÎJý·¤‹Iš™=$f†é±=KŠ”²’5_˜ð†zå’Ý;Gn%{gBu-{Ðþµ$çD‹ÝìB4ÍfCAëg5bÉÛ¶Œ¬K=eêYèŒèOi››"Š¢ÜK;ÎíÚþ_ D"K=U¯c¦^ºN¥6[M¯ƒ«ÐÆ¡ÜÍkZL|’àõÖ2Öw¾4Á¸Ôûs»ÿ¡Ýu›K¸,$VÃr ¼ÝÜ/68/Ï;›ÙØÊXlFM§_Î;ÿ²¤µ:9=Kh¹Xp ˆcÍ/×–Í#¥À°ùl.lébiøèìwºJ—úÂ?þŸoÛ?7A:zÑ7<:³òcðŒóÀÇÉÓ NϳÿªãçÜlCN£Zú¦‚#þ×’_p›"¸EÓ Ïì«;Öì2ì˜òüC®î„¾›Óçkâ4ôp‡m3Rç}­I@g –ÓÒõ08ÐMdÝñ†¤òÒõ­²öüB—”ž¢µJ|ß/bía„em4Åüi’/ùóïŠsÆ¢cJŽ—Š@ŠÑmNP˜ñ¬JñQË^Õe˜7xÊ‚L¥« ¯®éIý Eõ1lHü;E2µànôšUÇÙ2ä—g›Ã׿EƒD‰Q4S[hœ #¬Æ•oäÚ:É·ì|ÒRÅ«úühVs(U£ •£¢½_“®.&z¾<et7ݪ @.,{]è½ë¬ÑêêMŒ?\Ðí˜@@B‹×«yb뿾¡Õi¡v[¶Aòã] òp>6qøtO¼9¤-Oi»ñAæ” ä|Ég1ÍæçîÈÂ!âÆ”Åx*)ͤ0-æ1ÝqÝ´»ÏfÈå‹eÁUÙÖŒ¾çl Žžµ‰["]‡¦…![Gû —F ì4œSC›…E<¯µ\ùœµÊËÍN rÔÛ¡¸;N’X=Üøl hu›¯!³ûðnŸŠlU¿9}ðÉX2⊠‚ £0Ù’1¸mvI——bvù–.áhö©ciÀ×ní.æJp†˜{Ç¿q+·´ýêÑà«Àpvi9aäNy#8p%ݯeƒ{Ï/˜d8A¥•Þ QhÙÍ£M˜Âá“t¶õl,,jÏ;WA''΃V”>(ï³¹ƒ}]¹ Ó,Þ8u%jªŸÄÇ­ïÔ@ÃýÈoðI—­üSÊÔŽõΕþœ¡®½_w®\Ý»óR{ŽåÞIh Ãb-£Î*d3¦©šýН.…©Ô»gs³ ~<ŠpWú°3}­Û ªI7c®àÊŒ®CÍ<Îçüº€ãU[U^:ÎCQéh? Ážøm[ˆ {kÞÛú†³MßÁ«/Ò hõÍgC®˜¾‡MíÆÎŒÝ•Zpûö¥T—ãØD¾éÅw/^tKEË/MvíÑ‹PÕQ~Z=i_aj–jÑ›€X“fPd?ç%_EÏÏLÎcíÌ&pã`ûW§7m±Û&m`tp»¼¥ê„³ú7š¬ÚgÜ>»iæë›–3¾2. ?Þó¢oß(´þœ­î5.‚´6j’%:ÎÚ|T抉þ¬ÑRëÁþHË>ðîA¯ÎtGµRåô÷^ZæGBm-ü½NBFˆG¿‰˜QSžD§cÀwhŠƒRa0³%ZaɘX ôøGýÏKË®Eé‚Õ}ymýCîܹi7×Rù»%”»˜ìàVÀe‡jN©Ã ˜Å ¡)­¾,ïD”ré Ò¨=ôsimÚüéaÆ›a²„/ꋳè#‘ŸºÀ@D+›PºÍT qaȵtÏY[9é´WP<@ y.¾Pù¸DðxÍ L´xaß´·hHñæáŠHŠ©få (Ų‹H|é´·¬_†žJÀ'K £ÕOДÖò†…žùœþD›%ŧ _DÓ=÷8µžjü4a¦ŠõÏ_!íжb !HÙ¡/í¢O3aO^±=·Àh›ë>“ó0ﰂ˵mjëîÒ/r~9iǘw1P%] LΙ–ÁG1±¯È›Åá÷~¥²¤Öèi¢£bÉ0Ïy9ba•K¸f ¬âÙ=s×Éá—hð‡"stÌ×<5€Ú÷ëö¿¹ªµj\®NŸ_è2‡'RôÌ'ޱ>TX†)yíBµQp4æs}{éa+bŒ:õ|—ÓÊoçÔ)ßh£ûSvù‰[ÞÖo:8Jw†õ »®X´Œj Ö§¯+ÜãËœS‡:{®M Ík®±Åˆÿ(w<âNx¥}v?ºT#ÂAÈ ‚)§µ*9ÃC,`ämíO /F˜÷qÞÜõ•2ÉŽþ*§òy›i€o~q%• ]X´64¹¥ŒMÕ'8zÔ£ÈG…S¿ßоA£–c¦ !îÛ]!»¦Ã4u¨’ÑìöAd¾DîÙºð—cÒTˆš´¶Þ­$®›³—Z‰©3 Õ^’\ºžVz x?˜ß,!!<@-R ­á@ÔÔ«#©õhÏhB’"<É?Ìîñ¨Ã㚬°ëKCÞÏ&G–塌æ|Z„ÏeQé/›ÂÊ‚Ãû³o–x‰Ï•¶k5ƒªök¹›tåï^i€u-ӉΆ¹¸Eæiœá¥vBgZج„Æ{ÈÓ“eÖ)t8ã&F×:+§©Ÿ*‰"na®‘ktŠ¡æÏ? ¤ÇO7îåóŽSÙbž_W´™É-[(N¶ns¨þÑ@™Ñ©ì/hU)©S4—5·©køêökÌpÏøÃ@ü¡ÃÚžÐ÷ˆs=¡«FųS½àð÷%ú©µÜ˜³Ã pDËœäp0OÙ ,~Á­žoðOøˆ9ÝðÏlýØ“¯£Þˆ´Ù:)7 –Wü\ªO…‡Û+Ú¦®ìÚ¯%Ý'Ÿ¥¥\v°‰òs–þðµIпi­Œåà¦k–­>µÍÓ7Ïn•×ïÛsî{ö-~&ûidahÒ¹Ét§íŠâ“Ó®·«áCNOßo„hÌ9>]úCƒÃ&˜ÜŽaáô\ÖjYú;çÖØÇESÂRW‚¢î•ëê'U}\¯½¨‘íA[N Z%­s'©ÜHIú¸5€ÌC{¹,¶ÒÌñ=µ±95Ú¢J£_vØ ±äĽÚ^¨DØÊÊDQ²ÌÉm ,©'e^(~Þ”$?òÕxƒÿLù€Ò$•D챫¨ÊÊÀrç°ÅÛˆøá”.3{+ß/*5¿TÝg§ªVƒÖ ß_só ò n¡0³T=ñá RæjvΗã¸ÓUDØœ+Á[R\un5¸÷+Vˆíþ¶³¡ÁKyÁ¼·Á{œ8bZ,iÃhÖJbÌûçª4è{³ò¦÷=bò „Ê~cðÔ¡mîIúg «<n—ÖÄ\IBõ®¢Œ\VÖn³„Ekséà³Õ³öŠËO²-FÖüe=¤)fydóæÜÉ*—.Ôÿzܪn+‡÷w`Zß,çM5±¶¨²þÍ‹µå°RDˆ Ù¯¼-o°û%ô¼Öõϯp·EÌ1à•ÈûÒ¢–7B[4ç¸<NÞ¦Ÿ'-"{1ëÌVxü}-eÁ$^À®|“É«£9^ö£æqu®É÷b« t-è÷"Ö6w¯_~=Mê?·™LèY/ï Ç¶;Û®Q%ÛSjNÕM¾·%c¹ù¢kì…§ÝØ™Ü} @0¬ÎÅh1>e÷ä¤?Ö†„9Í»n\qr"…p%uú™ËÔvM¦R>H°¯ãúùÒž¢8ËeÈ®¯¨8ù¬¢ÃωEÝýH8YGÔŒ)@£ò²Iµßà|iÔÌœ+NwYÓŽNl毟#¦Ì“þs;ùóž5¥6ˆX–µ A-ßÎuµ \sÄ îTÕ7ßÃÔåI°Qèî]4;ÌAzãzûϨöR¬þÜô$éË×kã…+¯ðÜ®-µ™JUŸOæc¥§¤r-¿:FYƒŽÊ €ðü>10ƒjm–Y³Æ¯ùp–%¶+.™¥;ÛšûÚÊ’íAîEäÞ3ßàd¡ä©g¡´îú¢U¸ÌÊê­|[ýÿÌ-ÌE;§ZrR;z.É7ø¾8¥À.É8p›W‡=ÿh?ëi[.Ÿ^~ÒÞcö=¶Þÿ 5ösáCo¶ŒÒ¼ |"\š*‚NpÔd";xƒAÞÙ¥=?™¯å}hºîê:Ιì¶FìmñA\y)Ÿ6aÄ}=,®sM¡£¿:Žö~ÿ£9±Rô‡œUb‘/ï®y>÷².¼Vþ æ…¹ñ¶,:¯“åo>$ dk ª  Í¿[QZã_Kú9ä4ŒvÀQÕú(‘°dp5>cƒ®ïrÐ[¦éZÑîI–7N'·–!Å-A:|¯ŒÉ¥GNÞÃ+MŸ ðzO#eEÀ£vBärõ…•UÓꩆZ<  |¯¬Õgg›½“7ók‰{×Ä\k–ŸÕ¤µT·:,³»z»º¾éðpÝ×…`Ší ©õvÞx­æ-c칎 Ÿ™úB$8¨\Ó¸Iz]sáó [N˄îÌb–°ƒæèë®Ãì¢ØÿõSUýiÒFë,gC•¾ªìþªöLs–õ §Ku…ÃRÑ5— § cc™N©[Rܾ$WŒYŠ«LR:%Âþšw¡ÞT©õ Ãî»àšŽÔ°ûy‚ÒK œ¢¯ü“Ž£¾W¸>ZýÁeGcdê[oD®JdAaah]ŠËû;›gÃ>†îÕÃàgL®r»Œ~šñ)j@t˜F_Á<–\=ðËÕrZ[{n²VJnwñR0­ø|s”1E GÄ”GÆ!'î¯%øÃ- ×ìJŠæmÙ ùFüì»­ðV–²n iJÎÜþdºÌo/X[„?#ÉÁWÚJ72ú3Ÿ¹Ý“¸¼Ð¹o'·Ÿx ñTËÕ2ŽíR^¾î¥¡‰gpÐé‚ ¢„®ÂÛ÷c&;™üS®YëGŽhÒôS’…ƒàÛX¿"VØVjˆÈÛ’ <òéáf)Ò&ÃÕÇð‡¢´fÆzúc ÿÇÐ ¶µŠ¢[®OÔÍXݸ!gq­Â¢Ï‘†5//*Øþ("ŒÜØ“ÿ±@pËxU“X+œ®÷´¶bš³ZÞåCýöM'5²ŠGÞ:£P)g ç}ý/o!“M#1Ë}݈z,_g*ÝÜ_7㘞?NqóV6&¿Áî°^ôãŸ:äüŸ{£BUF‚ØNAR ¥ºµr:4öÉËFáPçòVã ÛkOÿ÷ã¿–4›|µ-ã4.¼òJu°¿iÎ56qÛÜ)…ûȺ¾>bég%¿q_˜€»yÖíñ+bÙo.šž¸Ù|A 8AT<¥cTjƒ+vÉ<&14JHàõn–¹r^Ûùïü§Ž©Zò/¸mKÞbÍ»4 ž¤0ª^G†»ÝÖXX÷ïxoR%>íçA5P¼n¤ý¯%§ßü}?÷ýõ R¯ã,"Ôoó¥…\ª´ü¢0±,Uþ4b—ë8쉅x^$‡¬ÊöCDXTËúy-„Õ­Éâh‚ܽM4q*¤Œ<¥4yŽýb]GË î¤íäÔ°„%¸ùëyœàô0:™ìEï¬ïY¦Õn‹,×R7À6­];Üì̶•„h¹ƒ‡µÛÿ9º½|”õÚsÛ‡c˜æG{'Ý”N§úmtÛ«›#TvÌw¦XºH#$¹"`£\]¨sS‚î/AÇ2„¿Ÿ–ßïCÅäñe!á/t¼ækZö¯Ožö0Y/vÿìq +ßÍÒ«}Ú”C*ÛU/­¼w»nÕ‰Z¯jç4´êR‚uVŠ«ö«j4'‚JB#‡‚>Zä¦Rm]ªk,€¦{Èò#訨è«Ñ„1³¿òqLœÁøVûúíéa‰¥Ž²$|µKvÈzîä'Lé‚ÍïAw÷wß]o5’Ë ¹_´è~Ð8¡ÕHêÔIª´‘žjL[n·˜Sq†ä î [ 4nDWÍ5Ìfkñ~õ¢Â}<~–*\q+ \˜=û&á¹ÉË8ÿÙÔa}Ö«˜Îì²8ys­p·y´yRù]3™ óë¼/V­ZCŒaÿ* ”Z =W<'›Û° p%ŒÀrúÊÜOj¥DNÕp^yiýýIÑ®DPÕ•¥ò+:­×1²#s0ÇÆ@4¿²„Xnz¸Ù=fšÚ—6î;ªJú.Jº©»ç{wO‚{]¿ÅÙ‘¿Ch"ÌÙ-D”k¿©éÍo²è®Ëâù²°84¿óO ·äëË&Þ —Ç:ˤf]+d4}\®J^GZ­+‹ÎpÕצ#3þæÅÍÈmtêlw“MÜÞ7©ì÷#8(ýKtÄßgûx)͆'\ÎuÎgù¥´s ¡Èê¡Éeiõ^WF=®»½™-¾cåó¾†_ùcÈ}çK·>§Ç%ó¼–kí×Ð)’¯t0ÕÞ ¹1üÁ¤Y„ â¹TÊ~ielÏåY\ûÝ S)«°QñgÏMµKDê¼=jÓ¿mSû„=«n L·æ|c§ÔNÍ)ž~š_¶R„,.´ÐRçÛÊ΃/<Ü|?¥UD…šÚŒcM(JÄèsþkÜÃÛ/¶d­×޹¢JÐNé@ÜÊ8ÚQ¤‘Ò…Šæ¥»\?éÞPc–½'8`¤! ý>ÊŸšý:·©IRoÐ…MhÓî{Pgºå«ù‹ÍÂ@Xo~éŸau^Û £‡ú®£.•Õ…•å;1® êxqÈW•Fî¢Í°‰<„¹i½¸Ó§‘3‰gýÚm?; ì}.8á‹/ë‡ïõOw(äa›^"×Ûü™øZ‡‘¤c’)C6%ÈñµÄ€~n4ÀiU8+suâ©…ÉiªZhÑòâ¡-ïðR§¯‘ªçßþÈk9f–9·jºæÜjÏÆ7k O.6‡{û-:Ù1á¨ã¢ˆܵì=®W ½ïÀÚøÎCwg¾{Aó²‰ZÄ>Ö«Òf1ÛÛϸÆDœòK7™(hYkàé2[ŠR:ßé ¿d¶—±ÿЩ¶¶ÒºC,VëÇóJƒðwÆq^Ù5ú«pwµéÞìfý£®ÉcuŽ{)UNæCÛœ¹âªžõçöR‰{ù3oÖuõx¦·Ÿ­º«­bø˜ÐäÏ_>»+nóª»Ú+¯vð×kü¦·–kš.lj«ÚBZµHK.äë¶<$YòŠHS®FÏ|Ú­`´”Ƈ§Lòµ 1è¸SQ­·HUü¬ÔQEééoÑ$ÉÌhiŽbn-i!„…€Ž%ùbˆµ³lWh8w µ;â&=ßLut ,™éÑR­˜s÷Ai¥/ÚéßbÝ!½=˜0‘2îeQÔ²Ïqzn?£Î‡DÀ \ðj[Œ'Ö¼¸tXâf=ʺ¿ÿOJ”O[§nÒÎÕ¡ z•¢„¿ÝMÃÒËL EZ0ªÙàpz-°s©-ζwØ875Ú;Ÿê;q•¸mnú¥K˜þqY×ÂVíÂd¢«]çåˆí’·9ý¯Õ-[VĈËGy!¾¡Hä]¨&^ Ö›ï¢TÌ™§ÌÖðw-²ãKrßÜîIw}ÀˆÎK¬m.Ýtq,¯³ß~Ñ‹mƒN£}V/BÔÿ§&sÕC;nþ­R~Å·0UV¯§Š¡|¶½'ïõ‚4ó·…±ùЗ/ÆMêlŸÊMÔKPš—¶}0Õ§2åèMÚVS žz¹Z†ò†ØŸTÚé½»T9ÝUJ İq·t ¿/ö©Ê+°ãÅ«šË/m¾¥æâŸÅŒ“ãƒ÷Q±0ÜQåéP7È™Œïåâ-dø©5(ÐÛ¡+ìsÿÿá—§ÕkÊ·ä;ù{‹ Žú ’·½‡˜§»½!kO ÓØ)±JÄÙ4Xê j(›hg}ê®8áåÝŠ!Ƹ)ê®4˃C¸í!ÈÖ ØßݶLG„þx˜ óu÷På1»Ð¿¥è¶ ˆÖS )'Yëoß}goWÕ´8Éx·ó}Z­G¬@³?ØÇÉ}¹ó›¥½*‡öç¢Á¨gïOد]æû‡ëuÏ©¡öƒ£ÌêŸ;N§OýO`U ЃVå?¤‡åÅÝ-‰rÜïŠ.”Öæþ ?É2·#Ǽ‡!ž}͇Ü=^Ò~ŸpLÝhLÞ2U–§çNÿøk=Xɺ‘’ÇUí[Š;~—¹>·QÝÞeéçÄø ã[·Â’Óéßk²ª ÃUÄ‚øPG­ЉßY¿èNãÏáŠ,¾K Ƕ[T,×N¼Œ$¥ÿ# ;_¸æz-WãFØ/=á­ñMü‡ÜµœãxýÁ¥Ú4Yè䨅£UIƒÅûökÐÖA•‹Ä©tìTäÉñ£›šŸ$n¦ ÙTlõ³ 1ÌÖt[£+˜ñJàÔíŒ4:Ýllõ2…¡C¹:¨õßs Dù\`Š «=2…zŒò× ðøòá@¾—G]¼M}æÃ¨nB­6X‰ª8ZØ a뿃ò1WwÅÝ´Ñp®Ju8Ã#Ûc'?茔µÃÔ3Ò-gf˜]Úê¢%/­L1ún£ÊFQéÙÓ¹*ZÛyt”¢ÚÇHæz>+æq}½ýz?-¾{E7†VˆP$D&àaGOXùBÚ€áU6>_f§´ÛÏÊð<[Þ´øŒîÛoÌ9|y¥öµYmVæç©˜§¾²D#•b‚ŽUœ¶.Ž uú”É›ûθ[woÊßò,ZY™,‹°Æäv TÖ_yî83Á^¨ï6ë²XéOsÆç@~îKŠso&mp½þP¦§¾ §÷¿(m6NØüZýA§²÷Ë­Uî¶–¹•1É ™ZDòŠ)á2<ÅA[a8ý.‰¯c=¨:ÀGëmŠÓª¾½5 9?"‡\_ÎÖ”ƒU)/ýï¹&ž{çþ~ýihY«2f`X$ÕÈvf×îOý¨dŒ1çéXe=ºlØe#þ„æCô Ôl܇•?·¦”ÅHŠºÖËÓþíK…¾'iåÁïM›2/Ùéÿë VÔõ*Ç»`aÍ–¦ãÜIõ)Tz¥±þ.±I%·¹ù!«)]ª50©WQV'ÒA­ô«wô‹ìv•?…ŠÕ˜øúºVqŸƒ_ؤ¶×ÎÿHƒo/íUÔ¢I¶"Ç  ®jDEÐ+# à1Qáj¼zZ73á´ËŸ~­]?>Nôû2Èô ©TÄKÜ-h³`LhÅ#^4»ES-¾ÿÈ8eLWtã*žÂLo-shèè’[ý°”v$Ýw H›¼Á †ãPÃ/§1· æ‘EORÉé“ÚÕ¶›_ñD ö8õø›ÅM#J6EdoŒúVÃy'\ΦWmm(‰p™¹›"ØCå‡%‘‘½ºhê~£ÀËŠÆå¿o|Ù;˜Ùì·¥HŒ-|9{]ªú9þŽÃ«_9õÃ$ Õ/&W8Qç=6I%i†pwÒõã+™áw–óÉçÍmSpÞgkɰkÐê»Êz¦øÉ·´ zÁ>HTËh•š¹A1_z!+›Ñ‡À, ˆ‡¦-ÞDžbδôžÝÔg½])¾¨Ížüõnê7V;”4B­ÝEáÝÕa‹‚ìÙöÆŽzŸëÞª;jUþBYâýú_j9ÓÙQ¸šX‡¬0ÑšíÝ!š¸¦í» ©@•Ó4.‚ñpùŸª]Ç¿ò¶ñè6Ò=‹2ž MÌ Þß&i÷•·^„³7åºÇåïn»³ZM­n»¤r©Ž[Á{çL>ð®"qw/ÞL1ih—âˆ$6ð‡ö¨çÎ2qu$m¬s”t/úzª&ãî:dã6,ߦ^Ý'7™¥ù_¦#O«ÉÔQ]t2õLî!c2Æ›9”ìû>÷ôä¶3kë•°¸CÄr£ kÔÅfƒdcoÂã:ÕâæÚr­-¶ŸØ^U¶xµÓt8¼2}˜“eÍ ›% zÍ#€À;R‡-øk`ÁKÏ@ÕZŸ¿Ç‰Ã7â†]bŠ-:UUþ&s"Õ~#sûìŽ\+Ó¯­j>ä+ˆ¼»ä€¥;KÿÕŸFvzìÌíáysÅíˆÜ¹Ãš0U|fbQŽm])6чûŸ lÖ<ã>é8»ö×ëSÙÑ&íZHY˜ û»É/yoœÂùŸøx8€¨i´¯³õKÉf¨à¿»Æ) »{Þ«~7•˘߂³ž=ŒäÏDÃÇ©J]ÕX!^Ö/LÊŠA¬‘?`í1¢A¥»ê4äÏjò·oqÐZÀÄØrLk– Çê ôkF£b> ;oØtÞU»¼^×õá7wˆÒXuµšUkw”9‘غ4•H´œ#Àz%Bäcàc^Æq…w“çtõivqïIXe©xV4£/õà¸ÒDäò·F,r=µ!þÙ ðå]½Ì?Æ—Kâv»í3›»ý’‹“òÇ<^ˆ´]n¡Ü½~1­4ƶΡõù±§ÚܲQxÛ'9‰Eù&œgÿáú8éj@{òc›i, ½¬Ü*è…úºO®àã'åëgº\0O.׿ü7,iù…óæ.¥_Uûõ$E~þ†QþÐGqÞ„mŽžÛ.ƒÆÄãÃGõ²/çH[élÛN8°¾,çrÅÀWÇȃ6qÌ%±¥9çáÆ:I¬Û³lt®6µûUC› ~‚n8m÷7F"z(sBYÁ¦’`á[[i8§1½kB®vs2h1´­ôj¬OŒ—¾¤Û…Çx¨ÎxÑ[K£!“„ÕÜèÁ©¥HÉÍ2÷úÞ¨¯u‚¦$¤ø(…¨±u9jòâWäþDd wƒ Å14*—†ûm¹k#· +ÍI·éwÓR{Ýίè¥Qëˆ]šºZXúªÓs1ƒ‘% Kš(‘Ÿ+3j>ľ¼æ”‚ dáìúR%ë~Àp8ÛÎ2'¿qu–ÜEÿN'ríln”àðÛÑùð+¯JϸPJ‹ð9dŸæ@zf HGo…My —qîvUÅ’°¼^þ ¾¼ZÝÒà áæîû›(Êù€¯·]髜œvó7V8@ÿ§¿Ö¾8­f·÷V×ELk°€•§®ÍÔ)ã:hÑÍòÄ[öÊVÅâ‰?SÍ^¡êš4WpYÖ‹‡5¤+XÂ{€w‚¹ [ BÅ^2 ‹L~Ž@<¡òÓÕ–\$ï‚u{Ð*߇æLÌL.*z¹ª²’ufS… åÅbŸÅ%+"àso¬×†ºPД/¨üšôŸràäÒ“µ»Õêîeª£¯×ÞoüŠÊS—qÎT׬«,w™„ÚÎs-¹J™5vÇ8c#­é¯ÏW¯»à§l$²Øiøg#rê}ü•âýÃS+£Ú·;àý³ôè\ŽG+…Ÿ—rþzU=ƒ‹¬íöæe¥žL$M\Öž_Ds LØ¥:ò ƒ|֨̉ªÒ³þÎFÈ“äàmóF“)Çam3”t\9ÙÚ"Tµk2±zw‹Õ9[ŠMy†ÕÍŠÌl¬v¤Hϳ¦à=ÔìlߟäPGûªº=¼œÿ<ÏŸ3LËÚÑ:ÖâîŸÂo«†y1ù!ó™[Ç ’)·Îhqßôt‹ÅÀ.!,Ú»î'JoBpú¨Ó~ûÏgz ¿Û!®ç•Ï/ !›šzlŠ}•+Ÿ0c4ÿ~­èaWÀƒ<,;þ¤ÚÔâv®ƒ2€Ï‰m÷Ëx¸ÚŸÒÍÌ?èD2Þ(¨|ïÌ_Çzêµ”ÍFaî‡Ýíˆ_Óïa¿n0]£ Úž&ÊʱY#†{¸ß§ü™ÅV7aúòê^a„!+U a0ÎXZ©üâá}-„ªSò ²øØ‹[%óŠóèL`º$ïó¾uté…ãØÿil5ÍB?ºÏל—&WÄÒI)+Q<»&%OyÜT‰¾sHÜf!¹ùö3[¶Ê7—ÂÎ7ðÔ-×4Ý·ýÇ™W Œ!{¢ËÛ(îòGˆ×t͇_ˆíå¼’ãæôª0ïEd›¾êuhŸZÄö4ÑÕ£¨7^ßSnR›1Ó©Ü*Ë¡–~ÌŒj |€XVË(¨#á\ÂA)oŸ­€ÎNÔ¤žféÕøenÍ2:R¥Du}:¯Nu¦™è#þ°jþ®Õ(Þ= wf*£mðŽ”~˜˜#Ò‰ÙÊÔ\Jí»’»–¬²¾þ¢¬hzx‰®1 ‹ÆØ¶k¯…¿ »†ÁpCY¸ÕâO=°©”š–Q·ÖN{úìx³¯Ñp*KD^mvóLošü½b¸ýïXe MÈÍòH íŒË÷¹R“aµÿŒ…)i¥_±X³,õn–1Ñ£êó4•Îrb›Õ £U\¹ÚwÙîɨ«…GÄ+"„2$z kè=¯öù^®,Š‚2„•‰¹j”ý’cÕµô" Ãs#‹¬¯[ýe9T¤zÇ¡–Ö—-`6’Ü‹æ+˜Wæê~·â®Êþñ²W¶ã´úô;m šúš›]ýµ'cãÛÙt iK›œÃ·ƒàIÖc˜{wâ{6•Ãõg<¤æÂ‚þÜèü(ô7ß«Ô,«yœi߬Kƒ¸ÃêË̴ͶkH™öÀÕÆ²Øñð.çƒý' \¶ü9(Ýã^ÁÖ;9¹Ýҹȇ÷–6‚ó+á‘ü˜peë´öS­ÁÎe ,$ZÃM³(f{5ï°}®–~¯\¿ÊŬD¦oÙÁ¤ ”º¸½éÄÉ"ÛÂ¤Š‚+ÊâQÑÜd«BfñòX¦s€Ò>XÓµ.[µ¥%Ö7¡k¨V·j }©’@ø¾’¾J_uW1ZHé\,ƒA}íÿmã÷žr`¹ÓÝÜž§Ès\wkøƒ>m6¨EuPϘŸ¸ÕJð´Ý Ç´Ç­öM‰‰ÚF™uÌìÝ—G,†UGЙ‹³‹½H+«Ö~Ö¸êj˜øø2ÖwävJ–O÷¾æÓï¦*W¶¤z|}Á½¡\Ã,ÿBÀ WüËïBå܆¬Ä×B´ê ÃYhìšÌ‹9gq׬ަœ¦/õ63ø¾Ô}í¥*˜Ü2JR R”2§[·F ¾ŽaßGJ=óX~Rãƒ=iÛÏCïçot‹S´Þ;`®Ú˜J‘RÏ)O>¿¯h4ôÞj¶k-y{9qýI ¯Ïúƒ!4œ5á§2OÛúp+œf…½ÉJ–ŠäÂBÌ·’z½Á«íþO}908¼.>•Q]<2èÑuîxƈ¿ýfÅ…å.W“îîd“×·x}²À®0eá‚\þdƒ0Ý?ªT ' ¾2GÞjôYÏ ¤W’ƒG³iïOö=éñùò‘Å—klðAWìÊs¹ßT§|co^Ѭ¨”AÕ2hU´ÛxA9äxÍùz˜-bìQ©ÕÛ=«’d7¬”÷`¾"Díšx~ê/å¼þÄmˆi®ÚD¶¹®ì׈Gl;èÔŸC¦†-2ʦ¨å†¡UUùNŽA ñ§ýÑìø¢–´rÛÔŒo…bÐñ¿ÀÅ^Ò[[¡9ú¹ŒÒÝþz9²qÓ>§«®Í*½²Oš’ßhXKš PŸvÇ,VåõÒ>oŸœ{ŒØ÷”ãÛ4©Ás×õé)†è~9º Nm²@yv^¾²º5~ocÒrUô¹½÷ÇóÉ+¯æÎÑÌ2ã´gMydtÄŠ¹TÌ·IÕ‰cWœ< Z~¶Ö ÞUØÙBCðÅZR`ï™¶0Ÿ{Px |׊q|Ú¾ŸL¹øñå>ßêL‡fçkjzxÂXœŠ‚¥º;¯iÅ:£7mx:”ùAi×Xl¹:×.‹€a+ÃÁ®ÐÂè ÿÉ_g;ø³¤ˆäÔªÎÇð[¦ùihÉ`ÓgÒ“¶ô¾­ Ñe2.̈oÎå¸(FWÅCq•êOê*Wajþ*ÖÞ~CÉ‘v ó˜†ì6 Py¸@Ãä3×`ø!KbÕô}iùËr ºgȽõ·?õa³ƒ4f%¹»ÃÇFa(»­ÃŒÈó¬ƶբ¥Õg)›F‡ ò³·ê |hšúsòk¢O"˜wЃ¹J믯¤üZ¿J¡l(\}ß°±®ö°gdy…êœâǨ†¯"ʯkkÞÝ‘ZûÜ{^š\:Mñ¹Tj“AS×o.ªW´jƒv µöÉØ± ã| 63´ƒñ®§üN¨êD} ¹¥ú¦ßGTd¨FݵiÒ⺌ Å×]á­jƒT]­›wûÅ5~N[sè;½˜kñ9ó¼k|p4Äê‰P˜ÛÅ8vêA«!·åuÔ:ý†ÌÂð‘}ƒ€ ÀbÇê¦4{ICgõm¶’I­ñâÜ«XÏè•Õûõ7Ÿèn0ñ×§Ì`\{:S+)¨u}©nÒ <{nÃ{²ÍçÕâlîýÏÖ<¦¢ÓƒwÌG0y[ñèÙê4ðªÝ¾B¨=f¦ wº¢ÖBœ­Î芶ç3?M*Y¼¹«Gó<ësYà¼+‡Þø[›Ë£t þÎBkCüÿEtGÎÒµój’Ê≪iKy‚Y“yxVÅéndEJÚÓï_ªüþ#îÑ í+ìŸéÈ÷´ åF ?NÒçem³æ-ñ‚d]dN¸îã¦íýÚyFÃ/ÊÈåÙz럳aKe].µêU›ÂúJ—;™€¾®F…¯Ž,탭²¡æd“ÕÆ“?…€ËA“ÃpYxÐÍÁ°ð)¸twujÇÏk[~µÿß9`è:ª¶ä¤w—ÓoÑI…üå'›)¬µëåÓ‚_2Ë9N(µ®ÊO¿=bã¿'™Å ®Ñ+ú6:}‡`2ä êÙ$y6þ6{Þ'Äc§MUö¤Q÷V)¬3¶B÷‹¥žÍãÓIßa¡½jIÑ Ì2F“kÅ~CÌ[ê§Å³„òì•æµG΢נsõ!x¥?éÉÞ[^÷›ÞÌí4ÌC«÷=üªžô³2¶L՜ɔ<<ûs1zýø¸¿Q“†ÖtMƒð2µiº|Xõѻ錓V±}8ûê¡wõôMÈ¡­ã®å‚e ˆËô]y¶|]j§üÄ‘;@#úò\ZÓRÖö¸.G÷¤6…éÑ:¸˜ŸFóˆºÄt¬–)ªŽsÃÊá»6äë§wY˜/Z\B~L…ïWø šˆvTÖsaP»R¢ž;ãþŒüŒ+J½Ù£‰?Ž•ÐÕçõÏ'ݬ)éÇ/+´­=ï.ÔBMŽ‹h(àÏ^KR¿ÎUÔ×àÝ_/Ü‘´hï’ƒüt7º®Ú–ÌÏzÿÛàbú^s&9BÓÚ,´ …Àßë]áÄs6,J¨:l(.1ÌÁ5rMÉónÄ̽o5^{:³Ö²*ðcu¸w²ZÑÔž¯ pÙ¥y¹y6T¬Pø¡€ð½ÿá •y°?¾Të#ðñôjΜÞ.ôç!ÿê-ȵղJîÆÏÏ5FmwýUÅ?-1[ÿÚõY"ÝO¼SÜ€N¨åyqßÓW‰ïþ´€Gû5w¾A¬ÈÎW¿{ßV×#ïìÒ|·;,åŸêÌwO$oÈ–V7ª­‰YV\ëÍY¼hK•`ŽNÍHavª-Nßùë…ÒŠÌ|ܺüåþ&çÈÕ3ÑpÑ=+|ô MGyê8 ë¾½j6fãØ ÆÜ|²Œi»ç6þÈÌ\ønövçƒ)[u꽦-ôÍX"]œ¨ëb*Û¢ry5Îg{_½;_…}vw¢bT8zpÒ¸I—ypŸ3JyžU¨T|ò.ãFý~³ÞÈà)¬Þ/; ú%iBé¸ùNÒsT½ò¥oKçý¬geneΧ"@¥'‘çPgð»DCÐæåµ\wÊ©Yõ?L«9yfÄÆ. ©ü<]¤Q¸°â÷NRµ$±œWð{:>¾$ﬠ£Òdõ’&Ú’’²Ä²(•¤S¨‰G¢øsÒËñú#©ŽË‹ïc€™¯þ° ¤™´’°â‡š‰O%<Â%É»Ad}œte§9hJï2 ¶‹|sÖ³˜…DE¼£Aí@š°®9bB\8ù8›ë*ÍN~ßF*as(× {÷÷¿Aq˜<¾áòM“2±auŒeñú-XÍ™‰ÔŸU7ë'ûitANŠ&×.Ní~E92¿9Nô’Íò¤èÇVGr˜òcsôŽ?‹ëÆT¸g^×'KoÄ>ËÑ]Dbó(Ãõ lŽ ýo~Çø°ho íˆ:ºÔxâ4F¹ë)8Ÿè¦à}—…d𷛃æãööfÌóÚwxÙa&ýu?L¡£˜é6SE_dÄÞ|ú¹?o¤áæ7ýC3‰or<̤y DcB¸ù* Ûb­/¹–òp»§$v¾ûÍ *£¦IPš!_[CͲ■ßñ8ÕªñãäU‰z‚¶Eý!2åÇkáÔU…Éi ŵ5§ÓÞª×þ2”¢ÔVBoEmu>ð·„Âj¡äºÆ§È7Á\˜z[jàà‡iüõݨÀOÒÁ¸IW…3i«{¿?èãDŠïa-}ÑØ[Ñ´¿ ÙÖ\o–+u1½üY|zÜ}Næƒ •JÓw’'èžÏ]JX¡*Ÿbî7¥?Ó>=D˰¤ç)tž ì °Ü©€zîDá#'ò¾ßË»waÄ䲟ÉúlMÈÁsd¡Y£:”é|; ï¢)<¤5ªü/×báÆéÉMíþÿЇ›É=îÁGe%ž,*îŸC8nDY€,*]¤ÔÝ|Œïº¼¸©Samƒ‰Ù?ü÷°"öš–ÔENî?”33HmýA¹ÜMÛOÔ¦´_ï  V´ §æ5}išÛï/SG¨ªÞ<˜i|Âäæ9FÈ4¨âB®Ô§^—l×jãÚ‘äÖº¦•YL?åa³7³ùúsÇoñϺE«_JU †¬gIA®H—ì 1õíÈÖÁtéJ»ZGÿþ¢¡ÔÖ!$OŠ_1lõ–Ïвš¶ôŽJjœ ^Ù”¤õ”ŒoíÂÅâ×/­!îV×ÚßX¿#¿ÒÿÔ—‹žq[’ÇX“ëLõe}ÛñŸü´uWJߎå‡û(’ªä ÜŒ>ô'oSÍ)Å#•Æ+%8=#húÅæ=k¢E¦Í ÉHi|©ßALž>9œ*“„6¦lp:ò\T줷î8¾/N0Û+¢øŽi ´Äš1ˆ4%¤#SËË?‚™ðª‘okóçz–ŠN©ÿVâ¯êÐm!:J•fƒËóðKÛ!JËž€jž+^”¾ò¹«T¿ÖzéøéÉ^Ì•ÍIÙm‡EeZW~õÐ΀jrv€Rë…‡ûCõ›,Q5£±¯Ž ëúýMæUNò·õÏÎS¡qþ¦4ŒM‹Ú#F èVÙ³?Á†\^t §ÓPˆÐu?´œ¼©+ë É»ù¹¨ímWþŒ§ÇRAMRñ1êÕ;ubýcOð]¯wò}cV£wuü¶ó¶ÇÉË@_Bż;KE!ŸîlÓ°~Ï&ð]êFI­~Q½pT–;»j¨‚ðúqgö!q ¡@(fåüë¶“ûØ±Þ íi\]#¬k 9bPTΈ›S~©2¤tåp¼å#µ†øá_Tv”üÁzB6,ÏJÛ¥Ðëíg¹AíYkÑà°¥ˆ+òÑ«á¯â!oÇÙ6Æz•çjo8é¸ÕšÕˆÒæè¥0J½ õ½w2b¨rÇÙé»då–ÌÉO kë7³Öit–eb5üÙšÝfêÊ´¶•Tk”¼ßt¤?:nF}ƒ)ûxÞC¶=Í×§µ>hªO!FŸu™>,[˜oó·U¬ 륧áô)†ÅˆhVKˆ¨·^ á‚+ ¢×»ÝU{•ýJDÝ>‡Rï>Þ+-ž—}c]=ÉÊ•GZ+©Vuú–{W=չ鄟\’N*Câ× 9üî#íHnøó­â¾ mûø¾ŒWÁ$¥CÁ* «ä‡ã¯ÉB_1Û»X`G%mƒXã6òmØG¼*0ô†¢Vëé¥}û@ªüòú[?Ù¹÷1'QôpÂÀöôKyÚ·¶¶™0mÝéÕ&ÓéÖQ•˜ª¢±Þ¶ù^¦Œ-*R° Žg¨HËHæ]ÕÜ0o«iCï8!%HšE-¿î©ù†½®QÒÔØºB*ªàíM—±¼<.&ž¢ï8­0úÆ„Y$+ÜîXwRcy7â¾Ó?Ÿqö,[­CæÁ U›¥qÎÀ-"8½ @ªŽc2È+æ¼\½y»#„h·å  ÔKCÕ¾L˜¹jlöÒÀq*¦q ?¾Q†mj/ kW]à«@ޝ²GXÝc´;p]„[±f±/ôlKk”‘3=>‘}°´r¸dWRjőѼuS\«¿'Y½]wÚ.Ìu´/ÿêžó6òŽlÆ›:sc×Zóçú5™ô&0ÚÙ Ug?Ö;q<Æéq/«Å›ò¯&¶zm÷aJˆö×*ñrÿX€„ŒMšæ{ïÆÓFg#bhAÔ_öîGk=ÅyÅmqÐQ‘¿‚Åc[“‚ëËs"5©hë°ÅKÏÕÌ´Ü©{œ£~(íµëÃðyêÆt1ì+èp¨yä)dzTŠäB•ió¸Ø ·&(~w8ÿõÒ½NEÚ£&ø4jºIGëˆý>µ*àÝsECaµG-9Wþ|:EuxÞ°Q7em¦NY“ZI~þ`·d[E¼µÅ¶¨oPFµtõéû>ü%ïíÒò5èV¬âQ§™€Ï0¥î”îV8ÍUPÖ†rJÒèítÿŒèënl7™Åú>÷Ôþ´GE; qjøKµP¶)å‘~ØLL@½JuÛ-Ÿ~¹Î?ÐõÎv_ËΦ­¿ƒ[:²&‚Á/Ý‹½h^.z±ÀMÔ´¶}á®úú*+ˆÀî6m[£íx+S-‰½­¥Š™Îœ65I !ØïX–é´L€Ÿþ—"ŒåÙì¾—SI[æ·¢¤xžë=80•Í¥öJ¨&í'ax4G¾¶šÕÂåiÕÖÇBBÐ2ì:f+j–Uen"e &gq¼NÅÓ­ ñ›Ã5‹>ÛªTcƒ]ÅátÝqÁý6Ì“içÍ—f¾vBÞ9W¿+Á©öz}îwZ)}KÐ{EDoAw,N„!¬>]ƒ¯Ñ–Ý…e“ÖK[þ_P)Ê"ÝÞF§¹`ž­.5ÿì­ÚóÔ©Îä/°{i‘|" º$#Œlß^'qè¯ì‡È¤öŸZ'ƒG´ÄÃ&k5¶uoô¾r½&ýJ> Š|©Ò*HïùÃ9kâmRRztäFbÑî÷EŠ´/çñä¤û“R sêǺ촿]eƒíkÚ§w´ùt Ü3y¥xæq­ªóuÛˆ1޾^ñ¤µG#í$tÇ+˜X¤IW+âò®<«‚|.Á¶w‡Ö˜¬o€oÔ­£î°óÁ‘‹y;ТvM4·u1êï >¬Rrèè81‡~à ÕÊÜ£Û¿ˆĶ[döt´áóe–ÐLRÔ4+?`é*.:Ûú :]{£å½Õ™ø’T?Y‘0BêàßÄÓ³Ñl"³#sëP¼àëÔ€“—{Ì<¾OÓ_‚xúÿ¶v£,èÓzËÒ]3Àœ)WGñ|ts5°ì.ü;¾ÝöµÏó¸%;‡f£k™ ì5x¡ÐØÜ}8Û(äàO†¶ m_ÒuF}˜HZ¿R8e¯ÑÂ2PRX,þqt][ªAð[Ô5‚Š ¨ä Ó˜sÎéÿ¯ÞÇݳ«„žîªÕ'L}Lrfæ’rC€W9Õvr´Kx»:Ätýæ¹à¸!ˆ¦V—fO¦ûw,üÁðîAýY`XwƒÚ{ù4>ò¿…Á ]-(ÆúŽu¢.¡• ¢kf€|Ãefx_øb"GW®×ácðjþØ>ýYõwcn,H$éƒ:§ŸãXãNí¡•8×AsDñM&ÏÁ2¨þ‚´c5ËoB«h±ƒ?!I?dÖÓ«ì’3¶+2ÈV&óaÌ}(¢ebU ¼,ß+‹ÍjW+´¥9ÁfØy´ Á5¡á´#à÷›Ã¤$Ôaå·v–§ñ$zn†ûNŽûp¼;~—þ×1mô0qÞÏ/¬ ‰ãë‚™žp‰?±†]­…æ'a÷n¿›ÆU‡æy]OÆ¢ùn‹ú~±0Áy–%˜Èuϳ¥h>Ùæ1ö¥³ØZ\×y u»ÿ{n?]ЦTÁg¼N'óþÉRëYðgnÄlˆ>ü:ûe:‹G³OJùþ–$ºjÇ¢ÚýWXfjjc45‹îŽ·Nzx~‘ègJ8¹IQõÅö^äÑÿ­—-¤úêŸ'Ïswo»Ðw×Tt¾O”Öî<<ò~ ¼ØFkhkÖÇ­q`Ú“ú¹ío%È`KÏTã‚?ºZºMû»Ù…ÉÊ`íËý ™óÛM4•­[µ7’aÎTiœÃf«Géf›S^ÓŠö9ÌzUÂrõ™®ž'-?âzÿ€múQéÀ¯o³¼ÍC‰™o§VvCÔ TÂk¶Z§{ô‹‘ƒJêÕÉÆvC‡Ðí¨p~+ÂÌcã´ººØî.®¬„Üð X,…é¬eý4 4ÞjÄA0A/Ïh2um2é-U®ªíœSîÞÑŸg+êTŠbcõÆÍ4¾ïk+T’¨Éì¤ÌjIÿ—rQiw¹«ûתf µÕÛŸc†«—®Ê¯RÈéK¯í*üg¶—ÇÒœáÂÁªÔ–¯¬L>ï¯!süARÿþœ®ÿ^5»1m;¦†ß¤»²ìÉ ‹{oÝg޵†¯Ž›«ì9³>#öëüY®ŒkÉú硚ÖÎýÞ¸KfvvU…áX«¦\×ñb¹žjã\Šs¥£øyþ0°!rÇ€SßÙÖÇûÈqR!¿NмLzZ*cŸˆ|pSÙÁ¸¹êq¤™ ï¾~ãq1è±ÞYåç…¹gµ5ÔxpKgi'š²‚ìûösZ5¸ªz–¾Èg1º]ÁëRÚ볃 Áp=öÊLòvˆ„/X_D ”¼9užs#åÈÏÿA)¬:«˜¥ú¸é½–f,Ë4aÂ21VÊðoaöÞ™ ^£õù0üÛ«s]ù’åmÎRÁðapk®—¬´aÕj Ã?cW•@cÿ ŽÅÛø LiÝsX™·Öàs~A%{N°ÒCÁÁó0õdAÑ£nJ¢Ngκ¹–¼jÌþ–WnÆtÀd²ÖOzp&ISýøyß½"ëÝv'€Ï5›óTlÍ¿Ïïuîž¹x/»;ÏVšG£,½î¦:¸’n©ŒåŽð˜ëÈêÚc½Lš)$’æ¥æœáß#ži×K Íbñ/²E¤[dõ첺¼ jïwÏ@mû'.–³÷·ÚÏŒ'íÚd?#KöÖ,¹ W©³Ç–÷ú½hiÏùß;n¶/‚Í]÷khÅØ%£f˜‹uƒM)q…ÜÓÃZßçß I­¹ÔÕ¼¹ï_ÑK³fùÚàžÊÙk{î독~_»Ÿ„Ÿ•¬Ï:펤I9+D–ºo¤¾B“šR“]ÑôjæÂòª³œ“4=|´l¢bÑäC´‹]¬éø©]7¤}ü“Kâ¨Nùá0d³7 ˜i7‹{¦Úõ‚@¼oÝÓžù°Õš÷õ³AÓsêËeO£jíªÕGú”Tzµ ]y+æ2Ní 4öÇ{ßš‘Ü/«>±×ÙTïw”²Åti+L¦§Øh=ºÕæ'}'¸CcºVé]×LLÃYYGvÍÞgí.º§à 7ý-®`.®3°~œO¶qL0Nó?Ÿ¶ùè.º½“ædíî vÞ^0ì3£lµät<õ?Mû°M" 9Ó ØÎ§g›´'C  “£Þ ö7[xXÿIËèê+®Í5ûÙÚóןféÓ6 ò :Mß¾½õ„R¿ zþ‡×½êÖ·1Ð; ¯qÇù-.¥½[·íxÒÃÓ›{±—ŒÞê¾; lN§ü&¨voõ SäHs ^?KÓüQõ´öºò‚§óÙéÏñ‚”7¯7+Í Åb¹eZ…â$¯í^|y²Ð´×}V{*´Zã?sX@‚û>óÞ{;’AN\ÚŒÖÜ®²öÿ7YüQþÈAœ}ÜÎÁdC¶ëG¥¶ŸÖn·’)Y$¢UÓª¾¹×ÊŒÕÞÌ=ˆÞÔ0bšù='Û¥ë$1±C^J¾‡¼0ì0¥…‰sÉÑŒâŸ\êÜÌ–ÉË-VÀ»;5dƒ²9ר|»î—×ýF Ä3çãHéíºÃ-Ó™'ïVµÃÊÖAÄS›7´²ŸÚHƒØ÷j§y}6‚ñ×~ú.æôA=‚yê1Ynzp=œmÛÕÀ¨ -Uágc½x—VãÖBh—o)ÉÅÄ\¶æˆ†N¶º~­¾¹]7m­ŒÝE‘\Ê­HÿùM?Å•÷9±M¡,&jwo ç €óçU«¡¿ªÞ{ÍîÊi;²e¢ “óNqþ¶aÊà¯ɳKð•½=µ>oZçKBÒYþV¬Hkˆ •¬R?’îÓðó0 /K·8Ù7ÜÜñs‚(Æ/”[¥ì÷¹aY«ÝºÑµK¾¡Z·¾„ôÓPN9ÝÚÚ &W+ž”Ð#ÃÊ€£~ZKo[Ï÷²Ž5ª —•Ô±s?‘eK›]CW«ä—A¸ªÅU^Ͼ'šZ<üWˆ–_EÇÆF88++c&¢¼Mf‘o0°ø±t)Èn#«5þ’ÄaCšùGE‚mûE„Á Ò#Ö$ßâŒ7k]"Xåº}$÷-OÛ~KW«¦ Q>”dÇCWs«rîú¤Ç\†d÷Î[‡û— ÕÏo”¤_W¡ÅÕ*kÙTGTú£œUÜ÷jÝBr»y´Žƒ·; ‘O\iî3?OußÓ=eM¤5[ò}“·ºê+-]²ç,Xc¾ôáÖwCå÷Ðp‘lÖŒåçHØì3Œ·¥|Q{îÁ7òô°ôîø'¹¬íÊ8Y´[µm°“òØa{%ºCˆ4±F®jwæ;©þeÇSÐÓÚC/d´ŸW¦²¹¢Ó#på”×{ .oÞÁÍ3cËägpCòm c¿tª ˆs„ïü8¦Vaî~u‡9p°nçç–/ãš“€êI|ÐÚÅZ>eÙ40•ºŸ'¿úåLÈ œÙPŸ}ä¾Õ+R¦{ôÀ“×KÍ™Ö6¸³v¸‡6%aÝ>ŬaožÇ%3iñ#»(Ž.ðö(.ðJ¦Z{ްÚ*ñÑ4×´üM¿—¹Å„þUq-½ˆžƒf[§0ž"Ü{º[ƒ]ÙF®°C"²G³;d±Õ ¾ä®É×F‡sWúûI´·—0>Ñ7‡µiSëšÊ÷ÕŽË‚-¼ÿžŒôîôÝÑüÆ # ÷Ö'—‘¶?RÖ†ˆ°ˆß7- ÖW££•gt,ZÖÏ9;S½•XŽÇAkœ÷àº:ä(»'L]Oe°P£åújw²áhhlÜj°?»Y²ýµóô{ÛÜÀùƒ{Y}`i·™jíΠóFì¿9Vƒ_ˆÝj]çž“±o|4½‚°˜‘Rr÷R˜”§³³„Uµ‹Yÿ5±&üe{š]ó=„¿œ égŒ~[ðWÇ“¦ô¡//æT~½¢j©&Ú>?ú_{KŠ[<+–ò‡ès:žxËÎ~L3"‚bÝJ³š´ ›bj¦üìfó T÷Èf÷>øenƒ]÷õu¢Óß Ì~ÑÇ+ŠÁGµÜŸ¹tÛE7jޤ0wA«qŒì{•ZÔËÄaz7©Â½?2=²FpFøiÑX*Éuo™¥ýÅ+zO¶7¿‹­ÿ3l©æõb¯Ïænµ½<#òÂ~±»‡Ð‚©¼ÞA+j«^êµ’V.²ŸJ:aäTäîO’pàÅ]èËÇ}2ýßÝ8ÎEKÉâv„;M-Û¥`ׯ·ßvn¿åœ%a »hœfרí N$³Ÿ÷Xá9·j‰^·„Q^Óhí~Õ°KduìÅo²„Ú“¯õßÔw¿Ì_·¾ð.ñúLØÎc§tÛ¸Ó‰1æ²›° ’מuÚ÷lßè¼æŽ«ïÜÑP¯w§Âœµ*njÁ·f>©ŒT¼»–‹Ai‰ýk—T—¹ ÖÊêï¡us1¿Ó‘óz³æâÑ<J²1ÏêW§%?i{&x+ÍHòùä¯î²êòOqutÑÃý™³ík0ÕŸY~èû“àNlúÑÔx‡ÔE½â UÐêuç— N¦ªÄ˜ƒ ¯OzäMðz>So–&±WK=i\£Éè~¯$nÙëð Ó… ƒÊyëÈ;*nem¹KýšUVsdÁN¼‹òùííéóPcú¹8Œ:«N®¦¶¾Ÿhž'¶yó ÅÖ9aÕÀj.:šXÌÍÞ £Ô›-Unz­uºµ-FãráA>"H½:ð“GEoìÊÈ´™×¯°âM˜ÿ†&¿ªöíΧ#ÁpáS7kdzWyÜ›ï¤ÙÒ)*Ø o.Þ5”µ¹ßb±;¬qeä3è>À°|2õ9‘µÚÖ@¤‹^2Ïɾ³›üöïÚ*‡7ïÖ#\áyPòîŸK±ñÈ–Opið —±m©Â î©ö5 SI\ßXnòÜ¢ñs¡sauÞÛE³÷øuÍò–è!ç÷ÈÍï”8Éq¡:Úùa zÆ¡VÏ+ãv¸JŸ++”º©üúVèºcUX*žÒÆñªïÎŽÔ^Çñ%쵓b}v>î)  ‹{M¹·ú’âð$ 9Þžì3-Y×}·RètÀº9ÔÒ0¢L°-Ï•ŒEüüc{Ûc"²g•@‹Æ´q~\ÜHŽXíÏv¹¼B¿øeD¬G$½-â·K8W2»ú"4Z®¿ž•?Pg¦U8?յõ¡òøÂ‚WrÌr€¿ËI‡)·èèàì¢å™ÑÄO8¥|1½†²#£e[±+ZWª.í²9´núý”åãâ”><ý5´mìÜ•A»¤ÊŠ¥E³™¿•¨_±¸QÿKÆ/ûS^µ¶ÖEPæcÇ4÷j÷î°Vú…ïŸÅÿÂJ÷ñ–ìf¢DFΞ.0 çk«Ni©ù¨†×%…Öø-wãSwæÑŸ~tDkH¹í?G®ÁhP;*! ß+áhƒc}`ìÔ‚=ׂ}.ïÄOKõëDƒC*V#ºÅÛ­‚,_yOƒ$¾¨\]L–s²*œ»xk‚žö‚V;oëp!y±ÿ5Š¡ ¯© ®P®uÞmðé:¾‚1PÆ™¦KËió?†Îúç®fM¾îwD+µÔrç¼ÀVãEݽH|%ǨÚ!…OÉ“lóÕªŸ”Ž©*N¥ÈyÛrBÈéÂé¤c|ܵá êzL>S­v¨ÉéC˜ä™sœ€Z¹gãŠ,))ÆšvÜ€ðCÂâ«`t«Y†Ñ Nu¤¬hõë‚Ó»÷iù9­}~ÿ›¯‡kÃ¥Š¾w¸_gб‰$é}O¥±:vóæªEò;ߙ™¯|e¥uʹJw¡i¯}S¯þ7N%gÙæ4.õ;A=¤Bžº‚<òù—ñ«D6†å=ó ·9˜€Îø'lë¬jþ\ Íñ @âÈoõ?=éãKëd¾eÜw•ÞVeÍrdjâZ½Ð„¸XM㌩íÕ¡ÛOÙuY£ßКqV°É:,,z]U¢ ¢6?žlþœG :’Ìö Yˆ™ sò*¼ÇýdåOùEªüdœ†›¥¯¶×¬Æ£³^¤»ª»< U]«‘wZyŒ—NMoèÆ²Uš²K~iïðù›#Püñø’¾Šo2.ÞúsÕÂLêa.جƨÕmGx~y´SMѯÕÎ|eçäkS™Ìœ1²ÈöY}»‘”=´Á=-ï©Ûjå­ù&üu?„fg³Öó„Ñ¥kÜèKU+uÌ0"i²|M†¯Æû‹ðÛ6™†•Jmà5âŠZϪ;Øl¥ä¥ÿa.c¶Ï¥fH—¿ÚÇýÞd抂V5[«Û¯ql<Ñ”«ª :EÞgó%Y!;zu›jè´3P's‚ÑÛâzÓ‹ël‹Xå>Ë7vɈ6Ù"¹3=o·JðÂß^£Ž£µ¹²¿æ;u­7Ýÿ ÊE—êplÔó Ìs)mç`ýhv¦ý¦UéÞ…ÁbûÞž7Ìê¹{É0ùÚþ:›.ŠªWhÓ—ç{sÿ¬{ÜÖ¹™ŸYo´u«Ú˜¯«Æœ†cCÉ©XxlïÖº#¶Œåí} –®[þ®ÇšDwšçïZâÕ9˜ë‘¾#a»iµž qkçe·çu朂yÙh¸ÁÉ]Pqê¾U5"òÿúã/qì"6íŽÙÌè>Rsöå(gÞs…¨1òË¥â\œÚ!JSmãw´pa޳<(‹Û–ûåšá´Ï×Ýnâë¢mvwý%á÷¦ xíß¹ùÒ)¡±Ï¿r´]ÀºîîÚ·ùD°àS¬7ŒÜ#^(ÒSëyG›7†ò:í*õÓ‰y]ÓgZïFÿ^¡v H½²7_Q}Ñ›%¡X|ê^pš™Q<ÿ¥»Ã÷ µ1xp«ŽmøÝúÀ2nL¦j{tsÌ·”SúŸ³ ¼¨&ëœeD_R¿« zÚbJîÑìF„R~|¾ó誒|ú‚ºèÏdÊ#h$Êöß »ÁËȸ£Å“ò²ƒ¶ ÆzÞ™(ÇxMùƵ^¤¬iüÀ…•ÚqŒoÎÍhZoXDk^r/h¨j|ŽkˆÌ‘“üíwšij?m]Xá wxÝÖ /W·æi‰è¬ù@4üã×»Œ‡!Zÿ´•·yosØ÷Gð òƒÙÖ{HdÁ›æÍfv1 €ÙX¥ÌÙEå/1Ý`îZBî=ÀÓþê7ÐóødYt¨¡ca m[U~•ƒV¬:ö´Áûé‘ÒÌé¬rëØùò;š³þö8a!ÝÂá{%oåûp f÷;æswñh/umúvï—¶ÓÝ-ÎÛa>ɵ²‚2凧¯Ag6”ÇÉ:ɪU¼{^œT „·Sˆrb@òÌNÝÕÍî¦=«KD¡¼q‚û—+Æ_ÐÁnfsÅëÿ5;Ûñ»æl]é¨Åsímê/&8n¢”4*Ðÿ¸æ×-g ªô«Ä¼¾á²Uc nbáB©ˆÛü1y9¨<¾´ÐÚ&lÉü3/ÿ´6ýèGØ#âÁÌÖ9ˆÛG­âoƒµòΦ>Å/ã`Þ‡уð½’€aÌåjxôLýòLg‡×Òœpß?Äh'Ú¦bÁœ™Ç3~mþ\ª [ý04N.{Þ“p*{ÔYÒ¶Ï%¨- ¸½+¹éjèhŸ*|©»ªºáʷǃ{›ÂÍopj„ü\ÝB(  É±XÅEsDìdC¨“ößOkÈáüt§Ú#ë¤MüÄN“½+y©¾/okð)ûX—ê&šÖ~r<(øo­Ÿ›%èlñb^wFÎP§Ží8uI0öi¼+q/V‰$Ÿžòk€1ûÌQ†¼ú8Ö{ëâ6N:e`nü— p3'lEêsÊ;ó"ÐïŽP¸÷]ÚªÓ˜î‡5Ø£ûVKúì–àhêªuú:ÿÙ+c²Í¢•_ʤÝ17/NÂsUø{0dÇ8‰\‚’K6jXç<9¶¶Û ^ç¿DË’‰×ÑfI@Ûö°¸rµ$-Àñ> ðÂ|Çlç°§{s©×÷4Z¿»±§Ý¢g¯ UòóªɇM% ”ÃM„‹c/6Næ¬î—“³¿åÉ÷;È…£êËšÊÌ™ ™{Ã>/䥥—rF]ÖÆ)DjO ½d£ˆþ3è¨؉5N©5‹§àïó´¬éö€ôμã¹'1^[rÎæ[ä4Aí¸š­öÉ›ûÄútL5L ž-Xó׸²z>¬§<¯Â€s'K®m¤Tkïz´;°°²Ÿ««gú ûØu¸öºðýÝ«(×™ÎÇoµñ4/%¤2”œ¼{WÂEwËÆ¦FÔßÛFޏëÞΦ‹s^(ÏÖ[_t íœ;OÕN9Zœù\] *ze\™8G+µUÌa ~×ÙQ/7A£‚×3/ˆò}-4ó†ÌêË7êx½ølJ½a ñk¿nÙé—»Á#÷›[3Kï:cñ ëU¦óz~±p4'ŽÜ¹OÍ—ƒ-=7€&Rßs‹0‹‚Ûa;;v9yлY˜ƒàw¤M9².Ô:mO31RåÆyÌ\=4:Í×Úœ®š+{HÌq«c—´ƒ$Ÿ|e§gŽÑ—± •nkט™îÊ¿úäd7l‰ Ž€Jrΰøþé ³ `Áb.–“q¯µ”Sºn9,sâ2<_ÀyZÛµÖh§Y€»w}¹Ùο4¾‡¶Šë*e7‹²vÓ–»ú.1½»œ…jíÖ‚#Âÿ¥íœÎß»Ró Em{1v—["öI­íÙ±Æë}R¶Ì$Ÿ&_ð}–-òM8Û+„7™3£¾ì[m´òý¤øhûüvjç#*të½3Úн¿_> 6º¥ܾó†6¿}qZ3­âÑá€ùgñä{9d«ÕùÎåé N‚¨ ¯y­ -A7b»s/¯ìu=ˆÐ?9v­×.ÃâsZÈêU‘ƒ/òì‡^»óKÞ32žkyÑ>iù(GYm[ixÎìBÌœµJ|iÐÉÃwS‰aÄ¿Äb¿ÅÇM†¢g<Ù{íd=L¹TÞÞ ªhdCµÞœ‡Q­½]5¤#ëÕZõ‡Ó<Ù!µýX{š\ËŒ†-¦6ŒÞPúÛy³oÔÛHÛ=*ꮲ1Ë¶Êø•—sz'-°þµYì×;ú£cÜ‹‹£bª#;Û»öEjF¦Ô‹#Öu‘Ÿ~šv]PqbŒê>UwE}/ŒB¼|?cyYò&¸‹‹F#-Pé:,2²ÖBºž¤†ò¼–R⥩P²q¨l[‘ºY øLÖ3ÊGBäÇÖêæÃŒ@/ÜIöFÃ_òŸÞù΢¾µÂެøþ{‚îáðŒÃ½Û¥òæ«›Ê!ÐÛ#VM0Éûß×=n"†·¬rÕ¤2О¸‚+þ¹°ZR~ÃåÉ,‚^›ªÖªóÄÃ1Úxã6ò²üδãÁEÏ®'ÚðniR®l‹XÜ”c¹Ñsê:›¦§æäÊrƒUf;²yž]îL¾åÜ <Ö?ˆ‚‹5¯¯_ ¶ŠÕº3úR $ M«\.³o,Û[ÝÀÀð„ÀUª‡ˆfÇÑåí1ÄÆiþûXB`³ˆ÷JsWŸNÖ"ü:Ÿµ]:ŸÏ²»×©êý³_;˧âÄ3LOˆìžö _-8{ö­øûaxCumÞ“ŽÔšûÈ|NsðOŲ>6ƒ·´D¤R>#•£Ü÷\R¶ ò~~>jdkÒ+„ªšM£†Öç¼GÂèêÃ33×®ÎrƒUIùBKZÚ÷A´.݇êÇ/Ê©¡±‘¶Û…²¦/0‘I©òÇ(ŸýØhïjK¬À^f,íâ’? Ù«aüLÀh´s¨l,Ÿ˜£«=Ûè—W¨Z¹“_\·«tMÜö}íÌÒ^{¤y?S3¯ª¥ÉÉ>,JzíÄwLKáŠUfçUy¢Ç £ !1x>ªºPøit1(ŽVÁ½kê‘Í/š§DZ‚ë«EÜû·õ‚pêµ–8Kþ³Ý+Ûâ6‘”f/hŠ3Á?ÀA¥ìh¸„gdëý‡X7¶32‚Zƒ?úÕÿz‰Ÿ¥ oR\÷y*øÒ¾y)ëœrËÜ|O+û¦²¢'<Ú‰ÌnõšÆÉÍe)Ãüõ(ð)îk}³®Ñ_©ê‹¾ÞBàéDiþG]”d»±©ŠäþýÃÐîí…¯Ôq„\Ú/Aí©¿í{¤Œ…¸ƒôQÉ+ œœíi‚9±åY²ymwŸì‚í~©*=ðhù½Ú{yÍu´%ûÍÑd¹„g„Kx´«ÿÊÒ-ùd‰¢Ä2¥Í Q\rÑ*ÉÅþ@.e|ì:*§ ü§Õ^½s·¹…S#7}ÔGQ| ¯É¸ª‰h«æ_¯*.ÓúQg¢i^KÛÀVZãWX1¸ÕøD£¢E5å'j1Ÿ7[çÞÞ¸ÕöUµ¸bÉ]ÉÊÁHR­Ž¾°Ôr–Zq…:±9IBÜW›:Ó0EÃØ&|[®'GcvyE ÿ§† ~¥]]\å†ó¿^JU£ýÙZy ê‡ë#F¶Êº÷íÞD!qS´þpã@<¶Íê`årÌsrÿ|’âÓÕòA81¬ïG b«ÍéˆNyA#¼Í¯F ä­²¶Û×Ç!·i×Ð> –ŸáÉ„p|èrco‘KW^l—]¯]ÜLì:öXªšbTâ,ôOÅD Øi®ÇüÉ(Ìs…‘A/›fAôû–̽~ÝÝR2Yžâ²üºydP•Üþ‘KLB·tÚhª¾Íö¼½žtíãþÓÑ9Oç!¿±˜©f­ÿ—ËïüòK¸ÝDzj´>ŽãÝÐwEÒ‹Se‰é¿ãé1Lq¨~üYÐËåʉ£›@?Gä±ñ:ûeÈ,Ïñ¥o:‘ïîÛñdFDzRÅló=ê(!]ÞŽ•kXx'O«P¸t“ðkùšžŸúÍÄ,‡!hVm‹„á¬ù²| J®_ƒ¶IÒQ½Kµ*º~Ig€ÞÜyƒí]þ 4EŽÜ×.·ò3ر§³ÈZƒ10ö#yjÜJÅàY±Îõˆ¡b¬“Òͤ:MäwÑÁý} ³î$yÇÚ¼VŒ–6 Ʊm¿ã;¨Oö7zýk€‘©.‚®WzbPzu.?…7m|5h1è‚ån5U§Ø ÷_å*'™¨µ3ªtwYiçê èmØU_ô­[Æ_ŒÈ˜ðíKØ[N×ýÕÖÌ÷I’öTÝ%uÕõ,Â-qE6nh)‰i<—û–Gó_›ïW;‘ø8ÂË`Çš…Ÿ6ºïXóùSn¯bû¼çúªûLèÞÛþ•¾=ã2k>‡°Š“Ÿ;{„[Õ´Ãâ#}¸´«5gfûQ/Þ]lbD]E©ÉrÆ®ÚqÒJìÙ•ºŸ4õ{G\Ô©’ÒïéöáæüiŒ>ÉÏÙ4ºùûZ7;¯˜‘¿òsýÏ#Íõ×kU.tÖz³6ä"ªÜ¾jê³½fkž¦ûRN†úªÚ.áþÀÎ;|´¹˜z‰‘¢)\„uvõÀË–TwVÒ´ÐüÉX… ÅôžzŠ·Ú6)Ì©©ËšûqËÜQIÝé7[ÆÓÁw Þ+7t™“"LÉO‚¯Ñc‡Q‡¯ÐÎî­\þÓKÛ§B,µNtõ猌¯,és_…ÀðÍ‚64Gòæfô_ s•gɼÞö}Ù>Fý„R€:T¯”>”Y:®û`Ñõ œ|@SfúÆS~“ήlBæÏ¤@ÿ§§Nrß{^«3þ\XæOå4P-•}€°™ÒZ„Q XùÇ:ÌOi–ª,a$Wþšó¡u#MÆx³ÎUHÉT³çŽýõ‡+ŸÂX/±tßøÕo.j¯zô?V‹ÚæŒBîE9xÈŽ[}Ï å=?«Õóþd/çôÍ8­ÿFt–}Ïþ³Ó¾˜~åδҫùE}ÂgLò…øò}ñí÷¤«_x˜ö—ºÿ,Md?ŠÁ¦”€}N™óôÐxpÛ'ùÚ^Jv€Ô–是z=«ÖÇ/xºVÛNìU™Í‡ÒO¿ø ÊÊX½|ûXu ©VíÓ|B¦®3þ´ÌF1üÍ­µ|Klõ‘ð;ù%ÿ‚³ódòIŽºÙgC³A½Ž‘ÃÝÊúÙÚ:ü©/ìý§ã¾Œ`Q+øG¹lÚL‡¥šõþûЀA_íï°!åVfâäõ¿eÄn½ÛKyTí¬ä X‘àïzvÖ«ó…~®ÖøÒ˜tñº5(þ_â ã¬V1Ùj¿p€ë_Ìg*–dÆûölb¤ Ô·–óyô‘§BÐW$Å"•°ŠvZì Ö³ªÃ\[ÊKÏ¢ÎÜÛÊñ@ïÞze×ÂÄòÿâbBsXR̯-dPë[ÜvîL³ÒÅ> °)õ6Ú$nlm'ÜÀhU–¹*Ë[pÿÖ`²áçí`†¤KQ\†_ÏãŒiÁønžYxßú¿§0mZ@÷:‰ìcçú4 œÄJ7eÌÄžZðÍÁ¼[È@¸[¡àV™E¯fùàtB €z‘¼Æ… åµA³´£ÙepÙ¸‹eðÝBø[ÜV·Žìä„á ø«Õª^5Ö gTÕŒÎð‘Ú­„_BoÄûqt ÈÃ2?'€v•C«êÞ'ùhOE ƒm³ýµ¢Ñ¹ô&ú(/ ó¤Ý×D@”½µhH޴踵ÞEe…Ë+Ú°¾uÚMÖ!d÷/Ñà¡ÈØáKhÕ)ôw™º‡ÕãiX¥._“žì|ÖÓ§LŽS•‰¨’Ól”²— ¿ùm× 6¢…¦OÏÿ ÿ9§a2b«Ö~Þþ¨ã‘Ùw¸ßST<ªj™P–œ2õx1Ìšüè}÷õ°YÄ_½aùj,ÿ¾°5Ñ)Úý$¨¼IÁ0íßž~wŸÃ/bølìÇé­ùM7î+sgSýi§š}ƒ¯ÝÿÔ`\éÁfÐar ö˰H²=‹õ÷ðù«dï*“¯NË#ÏjØM–™Üá…ƒ¹~,ýoí Ju¢UèfàXüëNmTMŽW+wÚ*öÊÆNºµØá>hqvÝ«ü†L!ÔíeÚ-æJ=æMæÖáÖú}±²OΊÙo¥ãÃëk}é/A첞:±±íÖƒ[“r"MC'Ôô„¼ ìt(ÊÖ{t»5ûZ„㫸´bŠUQ{†»ÖdnÜlr&hßÓâ~õÅ`ºX-x{LŸÝñÑ/Â\"ÿ’Ô„r_N;ÙVØFØfpIÏpîê‹ïLO [W‚pßc¸®Þt™>î¯A{­j°Ö`r´5 ¦Þný¾:Ó‰\{²wð¹±éqFÃÒäñKã×ÔÒ“M¬vqõ"ÚucèßË“Wø¸P'ӛ眮GÒÜUçªä×37çi^ÃüŒ÷úpw¶Óza†ÖüËKo÷ŽÕ&FŠQ…ŠÔZí¼Ùõñî5ÿG£Ô“ÜI\Z¹ó­S…éþÆ_Øû´²ùm7gzƒæ%h1§\vv¢nñæ]„OÂ.f9^Û>ŠëÕf9Rpýukm†}KÁÁ˜ÌòSûzü{7F!ßÕô(ž~ΣbÃ݃њìwnKA÷š&Æ¡µÉ9F©ShíÐ~ÉLäîÌnœ?dïªp¨ÓŸj£ºò¹Žùº«7÷q­4YÙÄtÐ ¿t·3¶#‘ÄÆw¨ëWÕÁ,i¤œüОÜ0=•/kX•¥›×º·ÏÂŽ[Ö=±zÎ;SÝl`Ö¾5ì¥Î[Ë6s²ût`r‘÷ùÝÕ ªgtÓŽÒÈÿáÎßeÔq™±/²5¹Ú‚Šžœª]©‘Åm6‡}ê8„=·i žó…õ ‘ÄzUÆy]0ú„§ZÆM Œ”¡äš*:lüjk]@ã'‡ ‹‘M3O³5yê=û®x°æhUÙç¬C£/xEc°“?è¦à_”éÞ¹¢yžyü†ÑÚÁó¨Õ~äª'ÇFF6FŸR0ä—´¦²¦ÖŽï® ­ï‹˜!¯7- ¦Ô±äWø…É3êq¸‰ ÙÞ½|öXÖ1µ¥XšA­ ·2¦Gµ×(½Ÿ(Ƴ§Üiù%˹R5¼åM îO I9(å_ö!KD= Õüì™É«l(ŰÈfl§™W–3_QÎÎõÑïÃÁý¬ÞÐN¨×Ó˜:¸tY¯f')y³"ïa˜·âôvÖ/ti· ÌD Û¢ƒ–'ºP3ÔàÄ]²»£,°cïÙµ2Âq‚®qçóeçYZõ©ì æÝ:§v¾•ÒŠÙØ-LT/CFlIÖYŸMsRûÍxø0blj”s׿*nÔ]¥4þDÀ´Š=X[t©ŽÍÌ —¹ÜT¤àÇ³ÈØtƒr}0èíô3°o±éáo',TùÌvû¤³Àv]‡¡èXʆ†NÊxËÌùÿöýdÅ–¥}dIÞûUwûØlYÃ}šd`ÖBŽkÙ¨þ©I9 •ƒË¾tLŽ Þg¢ñ¸hâ!Š Åi„‡·éßÉ’¤Ö…†Ñ¦éûÖÝkÓ2Nhµq³ݱ.H“üj ø±MÖÜH•xŠ”®”âaXí$<‡®Ž\‹<@õ¦°U¶hV*Î"E:þ-c"w.]‘)ž”-1éJ•ÐŽÕëDY4íáÑ5}‡Äüö+ê .âÀ‡–˜¿ôï.YRÐb+/7­£uh¦—§ïœ]Nn£¼˜v;Šñ–ˆuïdZtL®R£_ÔàôêjÎd"ó(žËZ”ÞºY•þ쾤„¿Búk]4¶ƒÒ±Ke8G/²gny©‹gFé5ÄàQ ;F÷U‹ÝfB6§6µ‘ùøp¢ÈÉÉ?˜Ï8›w?çôÄŽ©ƒgÕDoKñ&Ž\pv’ùýx½èw½ ïÒÙ  KÖ gý·£‰/hnÛ qìõëý½Op°ùéà1:§Ç»ì6éi!õZƒc´«¨’Tÿ®Q¯ T¹íY÷¾Ò§˜Š'«Í²ævw§_ú¡óùóGld1eP3”Yþ­O1¥¦IýÿÝüœ‰íÙöp¢›ÂRƒÙþÒS½©Ò]^›`\uÜópÿÙV.#˜î]'¸×i¸J2x“ròß+‡ÂzÁþ¡ Ñ¥ïCÈIë…w´!3kçà ¾Òáy—dÝwúñÏ·ø ÌuLœ ›ä÷WÏUŒ"2@ ÎòÁ¦…ë’:× oFu²;î’÷S‚ª}¬0¾pr¶†ú1ÝîØƒ`ër¯„îVXLGnÏ7{J8oµTH ¯3¿7¯½wßÈ´´²cßä÷í.5X§ÝQ"µ´!RÞ]ÈÄ)E´žWÔ­î;B*ë€ÎDDNîW"T¨þc¤·¹©“± ¯kæ¼&˜­Ë†±_Á]0RbѶ‹HO¼™ÉZ{9*»e£\þž•ºåÆL#QGC4éË/zò[éÉ÷l¶@Ìã{ù0ÍÏw/oN²í5ñ¶Á¥]¡ÿlÂrÉ䥻7IÆ ”œZç7ÖVWutêŸÚŸ½¤É·¾”í¾Ír‘ꌗřy ù_œP,|vît5¶ÈËXpWà5´|è¤×а)RÕ*‡å»öŸ’¢¿0¨`¤«Ü:»€«¨ÂV—­›´SÏ)O^–cWËÐhØPϲt~1Šìàô÷g,$(5^˜–JRnÅ·yߟõ‰Üx•Åßî­'¾ûö%7˜mæ3Ÿ\¯R{ü‚»” ÆqÝ(\•Ç L¼ñ oGÈðsÑ…YRTV%ÿ÷ðfH]:kó9Š š¼dÀ‘¥ŠóÊ…çð„_õlÔØ?d™×zñÇ©…ω:]Î 3¯v¥¸Á˜ÁsåϱÌWן–MNCÓv·O@¥nGü«ìÉûÎp±Éß {¡v¦?ûéÊ»+…×ûëáŒGßÀ`£<9¦'Í®-2VJÞ±{õ¾«Øxæ_4ÛåyýÇú~°Øðeâ¶I û¶®+¿É7x$ܬC‚בgAå&“•%GUÜs•ÓSçhöÕT•ª9ØICÆ+9Õ‰ÓÄ>xËÇÀŽ¿&Y]ø’±«#ÚW_žñ ®¾Eän · °BØû³W5¬È ØMÕ!÷ôÝmëZÕ3àœ¦ãèÞfVîŸõ޹£±¼×€.º_Ãïž\K]Q?ûÊôänסƒó‹¥Æ.(w3j2)õ­ÃóÏM„eEg,/ Ìº›ÃŒ;KÕŒ®zƒ€yKÖ ¦­e2¸]§UçJ‹/t4ÀB/é7~å<ê´ù•êâœyùÉÊŸèþ£òåÕËþíQçmJOû$71iä³õëØv ,£ÐÖ}à£Üs/Òï¥ õõ´©¥ÕVF7¹RøÔŽ%ýÁ—öFñUý)é÷þfÖkì b`¿Ó¢£³:º_­Ü£«]eD §txGI~Ór­ÓIÎ)™^â‘Z$ŒNoI³søNܵ.ºûGÞ ,8œÆMjç_›O¯x<•:Þ³«‚)ƒþ l~y4<ê­ép¯wFÏv2VÀ^òbÇ$~†tàÉwíSûa`·ó‘Rfg\Ê¡zÜk~&-­0µ Ço"õvm eFmµ¯IvR¬'ˆVÔ|É‹0 #œz®è<’N^vîJãöw°¯ì*g}©)3Äv–£­äà`3¹éÎÿê!‹‰HníÚ ÎÈv±ŒvÇþ%ãçƒCË“1Ú…D”›;TO¼æ-ʉ•TŠÕ§c“ùÑ~L‹¬s=Yg:v^ÎÌ.•ÚH,¸³¾t|¡E ®ÿåù¢ûÏÒšm¡]ùêÙ~mÝzéÌŸ§ØÌãVìÀ^—‹ÁptËsHÍ™–_[^}Î^Ç.Úî‘®(øs°Ùy[èJ{Œ]Çê€Y|õórdàsì6õïÑv…hÚëki+w%o`j«è\—§€~·ê†¿Ö@ðHoðŒøê‡”Ì·_ÚùDKçbø˜«ÖC&úºìÅQ+G;7Ö|uxû*£6ùr…møø¥Q+ÜŠÀÕêÑíMºYÉÒx6ìs¦Ûɺð·µágá*34¸ÄÌ b# Dz[îÃYW¤Ý›» R:@‚Zås2õÄ÷½ã@½µ§çæ¯Æ2\ÚÒ÷.M§t-°CrKq{ß?Å&):O#YãÛÉ& ­g;£¯l 5cE*õÓñcäݲ6_Òø wò§Ò—t쎠»?ùýi3¢îéèß ÍýI:ø‡ƒeÃúü3t‡luì-­ŒV®ô¨ˆÞ¡Œ5Û)¬LÞLPïcÅûls »Æ°cŸ^^|ìñ¢X·±Ùþ$Øöƒ£Á¦Ìw¯6ùÿ3ôEYmiozüßâOü¸ÎÈÞϬ™×9SjÙ—2¿ø\ͦ-8v¤8ÄÍ`OÌÌ?–Ž#bi 2Oª«·l{sëMmîHuÄ–Û½Ž;ÿz -¡áb·Ù0}ðñ—²Ôe´\(^ºGꑘ‹Q[qÚtj\ÄnB4¼ºµž‚Åa=¢zõòlº{n .áÁ#ƒ¼C¥ê¸èÂÎ]b^üWÚûzï·“7)Õ®gÿëñw Î»kÔ{u?é‹`]7qì¼9_y_*Þ˜;Oüv<õ"W—u·ÐûD&wÓðJR}×ئHGW(DÐë@·Ïï òƪ6ñ õŠÿ ?¾ßÍœ«c¿‹KgK͓ĻÀyÖ¼·Z âeŒ_ÁÍ ûÏÂ1û¯øm¤5¹ÃNÃS´•¯ìÖlÍç ‘o£%ì·hއIã”S»tL®}ï¶rK|«‹>”æÞ½>\šÞ|h$]üÜOa”|>}ÿ\½¾LÍýaÄüǼî3¥E‘A‚M =zmlð­¨÷ÌLö½¿dàÍù túÕM3t>•ã$­ƒ‡§,kOLl9:[¼'è5œË™×0ÜwÏ\ာUài°…3oVÙ÷áÖúq÷—Zòk+õê%~n¦ý˜ ¯¬o¢YG ¢ïÔ‘ì5Y°k©Ç¤1wXõÔZ}Ž~ñwü…µ¢·; aåH~=…A’RùwK‰©5I5‹‹KÌÎ!ÿg†²¾£Àøu:‰­=5š‡ƒåj¡ì¹æŽïåU¢„_êÛþñ ×õØïs[ÊïwãQ!QÖ[[4¾T­SL¶ÂóÓêºkS öµÝÕ­‘Q?íÓè³ý=¢(øÛ1ï{/‰Ü)o±Q8تÆÃîj=Äoníâ¼¢Ã+Ø-S²²l ÖÆs½?#A—ú÷–-ÕˆBÄã›°v¨ò7¶xÿFëGO™¥ËÕæÞÕ¶l›@>ìq:—ç$ B«g‘…cîV{ïnÔdªùò‰rwØ‚?¡mn–,{¤M@1XU#?znã÷;ÀåÁê5½ÿ㩇„O®ˆi¨ <#ÛlCuˆt·"Œ½Ø¼[Á Õ'Ô£Q_yS?«ÜVÑò=©y¨0õçnïÏÜ7z~`Âr(ú‘Ü–·€Þó`jU~—ÅlY"þå\W(î½ð‹Õ¡ý>¬÷ý©Úë@‹AðÕÁa²…“¦M%1â1,ÚE\`þ¬Z ‹UÐôªµã¢i0[Õæþ¨h£×]ûù_õ·¾µ.fÛ8°I¤0ß5O©D¶ÇøKãï¢ÝOÌclcõP4t£øùk„EmYúú!¶ ¨êÐ?Ù©}žÖåT §Êq{K³ êܲ¿úõ­é•¯MÞt’’>V‚MŸ‘f1¯@øŠ—!‡¼Ëp8ÍMH® ­rþ™uoLœ;r[_¾Ô}Šk½[+ Õœ¾&ÜÁZ%¬”öÞ¯÷£ÂÎùÅ›æ.=®SN¦Y[µÞJ8}TCßaRQ+4¸øH–Ð{ŽâCh-Ià®öCa‚HêbK¤¡Jw•§óày*tDǾÆ)ͱT¾ïO¢ž[lÜ·¸IÏ-m·ø Œe£ÞúÚÄÆÉ ê.g/&d˜ Õƒ÷ÈõDLUòø§ ²p¦0($$ücž'®‘û…èìÊR;`@ÁÓb˜†ô¡îÌoæ½™A` _"ÛÜcXÉM´÷c&6–Ñ,/Ý(FŒQ±E>ìÕ” í»‰MðÏÎ æUŒýþâûÄ{ÍŠQe>%_Ò è,!c·°ýÝ{r•÷5÷•4®G¸l夸•>—½ãà‰"·uŸ+Ã+?OxDK6î*ÔtŠÄd-Üšö÷OË<%|=hU3¢ØÍ+Êá]ÁÆŽCøï ø7e„Åd²já‡ÅÉ:ΩcC^ðÂ'ú졺¤›c‰RÚ‹ØUÂ01½Ë|ù'sûÇ1ïY»]Mƒ²)k×ún½l/ÕLæ$cTH÷"oÛÂg¥à³ÞpP˜†Z˜lE®SCÞˆÁ­(â 2X^ –†¯ÕYz«ýñ9ò#›þ» ߬٩¿Åjâç˹ûÃŽG•÷ï6*©V|ã ¤Dè§·[›ýhwöU†~ëRž¶ùpNaŒ1˜”zTçA'ª?‹QKÝœm£½L}´ ÖoýΡª( û~ Ÿvw))…ÿ*ïµþ÷Ô°ŸU’FüX’Ú•±Ê£ÜŒYmÂq±“ŠkjÞ­oî¤èRÁÒYV3[SiALq\Z·DâM¯¸A«‡)Å€Æ(*U‡´ƒ½ós÷+[#é»×A¿­L,ïgUyœV´¿Ù‹Þ»²îHàbËëý˜Mõe5†fݵ¯DåhÙek¯«z[=‚d;6ß_:ž¸ú…ËŽê0¡a[óÄü¢ï¯1F’©¡`Yrçc¯pÆ GdÃq†ÛC„WÜíô÷“ц'ªz¾$žŒÛæë¯³ÔO¡üÑ‹(q³•†X¶ªž™³T6„œc¹Š:°ñBE¡Á¨:û-š|Td=^cäækÐV¦•WŸ™f¹s¡Àš_Ü ¥;5BÊÚ_ò F•?0?»¯Ä=fí~k¥ƒÎc}û%<ŠÞ!wêàÂ\çZp@šÙ½ÕþEOíX1«…戹ì1ÕsÕyÙ~ßMT 6sï†¤Ä 4+z«ÀYD޲ ™šuÞÏ@W¶CÝ;=Q?a}W>o,¨+öHù+(ühº/»âþ%S²kº c÷½HŸ_}Ó{ÐÑK852„\}pµNøÇœMCù„#ý`›š Û[L}TV%ßß3½³HÖÅSä²ÍnÚ=‡ª¼'‘åÊö"z»_jHK ÁQ¬«Ÿ¨—<(³¯$&ÙZÙ«°¼7·xý:6ßÕÓÎkºˆ%rLOÁ9HY¾o_&Ó+jÕd’kk}Ô÷M’b|©E«5Õ·ÑÅó‰Ê—¡ø ÒÑ­®˜î®yýêíÅXžuÏokXOV™>h)áö»ô‰„.çÆ’ù=‡qSŽD|kÔíÞ×@=xði ¢LU¶aÁ¦ ¨­tÓé[.=ûM²P륱`J<3p*!“¶Ž“RÙv=­è>‡Â‰úßÍùEOgyè~¹u`ä#ëmœÎ»¹iõ6žå ½c½«@™éÓ~¬ÉÀqÓÚŒp*0ë&ÊooÀW{’^Il²/:µB®½žSN­ÐHŒ÷¢PP¢¤rsr©X³¯‡Ój[Á«éÃ%¯:Ò~»#Þwæjp™ï*Ú„Ÿ Öº9.쌙½üÝx€6yi™:U?ñkö0y£lÚC ÕqË!ž¯àíïäýx×vWþ"²¦êÛTeE®øã8:ë‡í)TÊ­ìëÄ6›žU7±rK¹øM_k»¨3œŸ~œ†ô讀Ïl1FiÌ›ßfŸˆz™GMá»%ƒÂ·0ú#›F‚¨KléR°ÙµJv…‰B¢õGT‚j]¸§Úß8™¾”Âor¡\jÙÓæ‡vRA¿òQ½ü,ytšæÑ켸›C‘-œŸC‹ ×Ko»Èh²o¥Áª ;j»ê3*”f_Ôú ’ãHÔÏ ™¦õkc­¿1Úæéþ–Š©Ñ°a %úI ùô—¹ ̋ܞ‘º%ÉÛŧeV»;7%‡‹C·±Ë{r…µ Ý«_ ñ™}h‡Tß 7COiLÛð\WnûEkuš˜^+ÍßwgöêÎý-mƒ–ïˆs¢Ç#.¬º{Kø»|"M\Y4ÎàÕT¿rTÂÄþ<õÇôz·´ž¦Z/Ø>˜à"2vª }©cŨ•Ûô˹.… Mß6‘3ÜUŠ„ðùŸjñ ôš’eœ>¹ ì9Ѳ±íJ²H‰šhé±øpˆÏ°iwÎ7ƒÃ_Z×eÁ_Í¥C ã«||Ôóàœ 8î¹"mÈÆ¾]9Y Ûýù4÷‘M‹{œM ^oe`²üÌ~]zäB÷ôÝßv~áǽ7I+ݾîúµ‰·-läšsÄØ¦€ÁÏšã0ÖÑ=—^Krº±;Ÿ”W?Ý—0?WOBk• ¤õ8ö–ÿªíÅ/Ìv<á™;‘¡³³ãÛ9Cßœ2ÐnˆjT<Ƹî¤ëa ²õÂý¥É´î¡õÏÊš^œŽk¸g.’—½OJü®|Y{©ƒœÜ2¯þÂÙFý·Z§   !l:÷Ž_òzo³7ýÈÖWiA¹µ©l,wD= ¶7Ý)6þú­œ þIlµ]o5Œï/?eʼnwû·[—‘è:±/bšûƼ«mÞ;bËöÉ.–2Ú‡qh{Òdmúe R»êæ‹Sa¿Ê™þtáÆI=Ô-´‚œ¿ÀSF,¨{¹rMʱj^×6(ïÑÖ6Âÿ=R÷)ÊŒ[ÃÒkÕÙQÐ+lQpaã›C­‡¶‡cÿžÍ÷­U4â.tí,U™ðu„FÈÝ)ºº+$-ú¶…e â¸Ð•¾ß™­nºÏ'k7ÙZÞ… *ßðw/€Fá½ôîÏÒ/sÛúkçOÐm^f~A‘«x‘QÖ 5w>Mß«tÙÛß¿îWho»Š_’aoÙGŠ^ ß\çuÿ ùqö:«È'ÿN_£} ]oËÁH|{ôüzŽÿPÝ'2ÑasX ¦BàÕ¶mâk ÍYàuÓG^/›V[ÜHAÕ\=KÐ%¼ð¨ü%Ô+x›ù±Å~®ø¶ à ½| vܨE®ÀUö6œÛþ.$î=xåÀÙà ÜVkÑý¿ÑÒ–ÑuPÈ/ï~ ×jÀ2M‰ýHVò<4æB½Ð˜+SÆr’B‡0h¾7¼êRÕD÷YE—ÍéÊ¢òÔOoðƒÛ¦¦&3×Va!é,XVêGÙ]uâa¯og†­õÿzz_¤Ñž/š„iêæ'dÈðP÷³¯G?N¯+ÜôÔÕB.jQt¥bgÜù?mXúBN÷gÑ04D¾ uís¸’FzðÀÞaä­¼x„lNƙ•ìF9JÄ¡oö¦^È`zEf½jL­>AÂãc„´ G¾×–ÁÕ{ÜàþðúË@zÄ1¥½N-k¼x©QmCò¼ü¹ößBÙ‡^¹˜P~4tÝ졃žºÔÇö9`¢ hÞç‚g€Í;ü먌¸ [»<³Pèw~s9˜°;èºKBÞ³ ²$Ø7]v²lŠ›ðWå+žÚJÊþÎÀç ݶk`&¼Za³¾9ñµ§Üöʶô&úžZó'µA)hô¨zSˆµ7+þëXñç-ÀBõ:ò+wÜö-¦»šã÷N'H[ž‘î˜èûõb)¨Ö?2ÅÙÌ7 öçA>\/M_íÁ¾çÕ6rNª¡·’î'Æ*÷Ȫ¿aaíhå.lP«ÂD œîšð³Í´„¾ókÃÏk˳¯ž–gˆlR…aG¬å;þîK¦g7)»ÜûýFªWuµÍ@Úšæv}¯rcX}´cwÿjn¡öŠ¢ì]}¿ O§L Ü0Uªåå.{ižåáaM#JØ-õFô“”ö-ÆHù/OD¦cÿæþGMõ›p´Ý\k²Uö¸ò‘¹µ)üÊyÒôÞèÓãΨj™ý1)`J»ÊtÅʉû92ÔÛ :ò¥£+1;.,¿U NôáFÿ¼JZ :ã óª^¾¬·¡ÃË!‰C“ÌÆ2ÅŠFs³ŒlOà§ÖÜbü<~ ¢õj:ïã<+ÅS*²Í“B¿g>‡%lù½¦]lÙóã4ºzÃÛÐ…ú(Œ·E .ÙùèÍÊÀ¡‘¨u–;û°f7‰€ ¿W~™?{i8SzuŠ¡«G“õ÷aãv;©nÉk¹hS or'ª¨Ð½†7Þ´+ EÎŽÜ ‹07gžh¬\ñ.-á¼¢ÛÁß»°ÒÕ«Ì_Ñ¿êîùDQªv÷¦ìbË­®­Ïu/:/­8¨š-&›³EoªŸ+‘5;ÝÉù|yÛ“†›³È}}=û¥á_ZíÓÜ­-Ÿ|xrìeˆÛ–é¿«¤1Š—É•fD‰õoWZ“á5Ã.šÂùc¢ò@Éïí+¬ùAV²ý9ìV{°’kB×(ò§i=ƒ}PŸÈžÌ¦š´®®õçûEjŠv«×à§=Ùg6pM½6 ¿"Ì[¢‹ñšp؈üW”§Åí›PžûûQ¾vSÄiSR¬ÓµG_FIêA”n¦ s1ÿÎ_V/7²ƒ…ãRCiß9÷Ÿ-î¯{UTœ]êß¡”6ÆÅÛPa[tOg^ƒ›¥uGñW"6-Ê¡wnå«ú]é ØÇ|Éõ…ó$¾Û»™5þL q}+FöBE){ަj¹'Rå0ÿݰ;¯f2†â#'­íˆjÙs9=jÿ)ñÜmyÌÓägí}Ìpë.“³Ô­¢ŠÖ¿Ë3 <‰•ÆÌše–¬IxðéФ»®Gýµ7·Ðú/5—üè³C¢# K³kh=ö©ëÔ”wÌǵ›å“Ƥ¦]¦JN÷xÓoM^3‡ê¶¦ÙNàê{ÛõÙÞ:zº‘–ÂAâ½E£®K‘GX¼·{£ c ÍX¨ð47ƒ}Šnút௅ϕ~ï{dCõ8‰SÀ½GáÓš–&N,Ií¹ôBç ÑH:‚öâ^ø–AöÅœû±ï GÏXèü«~hŸ ƒ ÛçåÓ8+ž)CHÓŠ¤~ u6á9=Uvýý™9¡¥$ò]øÏtÿv3tËöù ©¡Z2úênB‚Ëó·ö:¯‹–my¸òÊà©YOö¿Ê!‡ó·~ºWL;4;câq°¦v㦫@~šÝ¬œe™<_¬[Ê£J`ð>W´ÒôW©ûR¸;6d"ÃMßÍØÖz{ì8†Ý›#ÏÛíÏým~ù4‰`…/ö‘¾Þoñ/å¯G™æßiS2Õ]3е2’ ±‰Õm ¼ K¶ú8±mÄO—Ú÷÷î¸K퓇s£Í9)F’î;CwÖ.QÖ}=ýzÂh§ì7ÿæ:°½(ÄÕh¶n7$u•Rv·Ÿehám¼ªTøk½# y±Ü‚IÀÒÕ½õ*•Ü¡û§«Ÿå~"ÔŸ ÷ä›¶vxããXõ0˜ˆ]Œd¿[Ü‚Æ ¼lÐê~µz9ù´½ÉðÍÈËó¡¥È¯î­‡ÂU'ïÕqk¢Cuïñ¡S»èÅ(Zu›>–hCCö[=Ç!qþbœõ$#D5˜sñ/(>#ùÍPÜÖ¿â­×&ºçQÁ?Bï³…BlÔ€À~öÇó#ÝsâIÔ‰‘nÍVžd(…Ò§5“•§EN7oE„F‡³:OÄAëñ;žAä<[X‘k_wŽhúa ¡DÒ ÆW¢so[á»…)ßÉ>n´m‘C*oR"Iê\ˆzËIIqÓ¯*àÒÃ(K3‡Èj+¹w¯\ÍY{ÿÓ7rºyùš3-¼íЈ&8%E÷ÀÜV,ßu·\îÕÃf5öy§§ìþ^¾>ïu_zøžëPÁ%Ì¥4êqÏ'×3ƒãËqªà1Âë éMsõ/s»ã¤žü…Z8Y.ÔîlÏŸ†ðÚ|ô­¾>ËU*ŬfØß[Äå´¡‡JYrªŸÚì«aPµL>kÊúâ0·Î\6ßí*£®öí¦öî8h3}ûl0piaXu:S²+¥ûWžû€¦q;ÄQçî4‹ƒ<¢—Ek°zÎ%{ºƒum)æûswDĂٱ9m6Nsí¼§Ãµšä{{i~ÅEPy©Íš¿™Ú—Éj7M3“§×¢7o½~Qï}m—¼`~È,®·á½rzñŽÝóÜï<ð/ÃR©G [û”Õ$^DÀ?Á®6¨ÆV‚0ñ?-{gpò YäLúƒÙK¨É!Æ .úÞŒ…Z6ê»c¶³Ž–‡¸'CjSóZ‘ï4)jìºÕcßU ëÀ ¾G–xûÖ˜þ‹ž«Èu5€ƒz´Ø§É»‹xeß6—6KD‘.+b=¿ˆ'sq‰®Ê‘Ñg÷Ç…nž'ó0.>;¶5·ûˆSYý*c&K3ÌElC£’µÓ¿œjsuX­ùôÛ¡¦ôöCH"Õ=6…Ÿ ߦ̰åm§–ÏJXQîÚ¥ñAmÒ,IsW½v¡ºo;Žˆl±‡ÑêÁ¹Ã3-Ÿ¬ÊËZsÌ¿ênÉ•°?]$îRÚ{Zî¬6ŽÈ™smcÙñåXã|³˜'«{yÌûSnY¯Á¾ãüu9îŸg‰…£×0¹½§XœjÜ‘‹§-ÿa’ý«~°øÒålg¸(ÌŠŸº=šWZvE-K‚ã·RÄ6“Ü_Ž+àµê÷” ×vÜTFv®wºzµIÒ « gçŒ+STÊCfTo4Ý횟ڇ[ñ‡ƒXÿÖ%¿Z•ä@Ú¯VAÛúJQ¨Sþ¨ä¬¾×'é›É’ô$¼JÂ׃xàþ^~¬&E·Èwj*ž‘¶Rç§1<7•©÷lnž²Ð½ÖëL]ýAâü .ÕuEGä{ÇýðÝ Ũ>Kç)ß¼ìË6>z_°~å#úZ¹óØ; @=l£/¿Õ”Bû:Ó¹ÏC “Xïjç¥À¿ú‹{pÁiÍtäÍ”<nÿò<:i9a9<Ã[3üñ”%º²[½çs¿$«ÜÈã\Žt ‹6]v¬Ã±ÍP– û£ûÀZHfе_—]üM`÷N"'Wä†X6·cˆà×S¨Å|ÂÊóz{᪕g›' ׫kS؇ú“xˆÂý×y „Z@s]¨6­iÞ=šCæ)#?Ùfø‘Æ*ZÑ>›dáVàFÒR¥ÒÐtÙî¿GQÝ$z¢ýw\v(e¡úõ*9®3L´bŒ ­/îYêÜÕõËüö±Ûºã¶ð³oîŽ×™[?îÄ®j¨ö#årph¨_zmU Õþ`˜Ï8GÄ¿aô”t)Z¥Ê­+¡ÕÞÃ]‹ºÝﺭÚÓÜ;”j,\A%t˜¯7î«]0<·V(ÛãéI·^£3 þÊM§`Û¯Ú²šGµÊ¹lÁr>¥^Ã)UÞ?‰KüUr4õõÀi ƒu§í™©h“çpm°ËÙÌ /o£½6âèŒû€R׎-¦/ú´å+`3œ—œ©³èx{=oÚ9‚÷ÁaíFxËþñ‡ƒz‘+m”]l½ sfÉñ!®ác’wßnF6]'<¢Np¿2QŠn¯SWaRK®>yðÕTcL?6_§à(5=!‹’(ûì<ð3Ø4碘ÑÃâò7}4¨AÏÐAúÊFÓŸé9 †$1´_•“{ת;´¨„W¹y»‘óõ®zΞ;íZJ,oÝpKDªôk‹ŽË¹×2̹iÓ_ ÀNü%ïµ[Ô¬IzÅ>ƒ¯ÙNo6U›êè⥥b—šŽ+œQá:œO/{g¤ &®-'u-h2zÍŒØ;#Ø.w3ê"{ELR§"m7X2·Åíf4÷ÝŸ’öpYzá³e­eŽï¿”ýì@,”ÝÜUç)9XlH½îYÚÄÄQ·< |>·Bc PjgŽäë¥7¹×\ßdFé ·¶úzc¥"4ŒÍæùóÐFUÍ{vƒ^ÒÙvU³Í.ΖòÚLJÇ=S;’›ß«:î,tѹü±§¼Byíùœ† mµÄÊ@í¬Eëžî¤/»îr>\6þœò‘?:¶þûJ8hŠË±ZØCVòtzw÷Vxáiàøeä M§baÎ×…k/dà*Ï–mg…&Áp‹ã”Ÿã·[=ÜÜ<éKp">>˜+Û4(uÚÞ|7øwµä‹AË+o®Œ%Iç û¼ñØË%±OJ‘Bs»í¥M‘u³cF {xO{·'=ðÔ ù]¢¶¿ Š-Ì3ËNGªüÂÆUx6¬q‹2eýW=ÜN§Ž¥ê®DëÜªŠ øñk-™ãëîNü†Ë{¤ìÛØ$<ëÃÐ 2Íà^~b=ýcÓB<§Jêˆó¸qa~¿BdPó¯ÝÉØ«;—ߌ.md¨{!OÛaP'¬X-›òðò<Ä.¬¶Êñh …#üjPÇZÂ:1GøMB~!4;¥ÃÌÅn¥‘÷>stream d7…\¤Öt7>5¢wÞt”ôe”‚Çù½±[h³Ä;îÕzŸlàØGwM#( ˜`ÝÞ”ibTG¬ùÛöùc)“ö½ÕYÉ—KJ¥-¡íÞ8RË«këXákÊ“½v¾\9%pê$F ¾nBފйŸ m»™oBÌF<¹q*Ý¥›‰ÎÃÞ_,s-hk¨‚ý>*—у*öö@?ÓÝ}X4ë$Ú <ßší[³`­4¯MsBw uñ`rÒŠH˜?­åx0\Åy Ô˜‘][Hà™Ý&nɶ|Y ä¬8…ë##ú—Ok«@iŒšR;½Ì c×vuìtŒ%sòüc…{’k¸Ñ±zxûâ¢ðlª;CŽqýû¸¹m¶ €uåÞéé|NÊsõ)Ê¿ãÙj>6í{>K\h;çdSß¹ÕÚ0Ý£/À0˜ÿ·k,¥æ§|¶› <ð”Ag§0tš¥Š7\Fv’áÓÅ£ÉË»­ð5ŠÎ_З…ߘ6Ÿgðis}¹^p*•ïÕnŒk À+ü5'ôyÔº€’o=­ÄÑx /`ÙªCÞªzgaÙ+ϼx¶|>_WÄ¥;>ƒw ö=~³ü†gyô¤'€.×I§1 ‚}æœsV É ‚ (I@ýóýW^kÎùvÏðç¡xõ¸©*`Œ¢€Š‹ú Æ( zõ`Ó-Í·hu¶=4••§Ûã6ˆFk®ƒ^Ñn¦–°ý…wyc‘\¦dÙBµ½^¨äZnüÁš[2"šJߊÅ\ß– ™‚1©¾\÷à”Æ/¦«Íë.)ªUMÃʲwîfQò蕪w¢×Ñ`€ß^5eSÚÖC¶õãv5¸øƒE§Yfö}*¥Qü–øN8Ëë3#£ýcòQ¿‡ÀpMœÙÂöØ+6+•{Gç«ãqÛ«e[Åi":¥VN[M?¼D¯à<ð•3F‰m ¯æ ].79™¶ÛvýV½OZ&BdœÚæÛ•Y‰çŒ$ä f¹š§p<¹MHè[ˆܶkõž›°ï&·}þ‘ª[ç¦ ^‹s¹•M½ÒÉûyÈM<ˆt8æ‹Ø¥gÁ磗Et4‡vÍ\6h¨±)©ÛD}ë5u Bû}‚ANUn\õË)n Á°ƒ]Ò„å ¾h©1‚º#¾¯—Ò:,«B!Ñ>Ò¹<¬«ô aŽF³~ÆF|Ý$¬çqÙu¥·Y5œ±©"eÐ(òÕBéèè6ìã¹Ä_²ªŠîúÿ! Á‰D1—ü¿ÿû¿,£-+Ѭúòê¥hÔÓ×–¸ÏVo¸™9 ™W'f1Î¥±ÐåÝF×*~…{Ô6R©#ädÒÐ{u¬• SÇöL¸z~®ä»÷Ýï·õ54À~üjœ¡Ñ(Yã‚ûLMÆlMÅáa9{&0fÑ;Îu€\µÂ¥]ÊU×eã6"KÃA¹½“áDùÈp?.l™im€º™$Œ×TG ðh“§*•¦ÓΪÍL¨^DN÷h º–¢)¸/zj¯jüzæø„pµc³qO¦râ­Ê…]\zúnd*©qX!,eê9²Rþ®ô'¥ªJ¥ÂéÉV \¯LH1¶’}ɽî #Ó§+f’lõ#SKë‘Xà6óðùÈ^¨~måC×­÷Єk¶Ũï PmÓyMnù&²‰ÍGRæïÓœwº¿Ò€óà\ãñ#†ŒïÔ~Á–?Ûñ¥ë ¶üÙ†Œºù’-?jȰ–¹´Â*÷dÑÿð|aá$®å†_2û°ÝÕ•“œjÅIœU£I©¬tV„}|T6¡ô|63¢„ìÓ¥UL ›šâ«Ég–k‘úwJi_ÛöQÔpFÝü0ê8£n~õœß2ÚGQ?Àuó‹½ÿ­½ù‰Þs~¿Ñ>eÒøBðk½ÿý!ðy“FÝübïeo~¶÷ð¸ù”I£n~±÷¿ko¾Ó¤Q7¿ØûÿÝ›_âý__区ùÅÞÿìÞüˆI£n~±÷ÿ±7¿Îû?7¾Íuó‹½ÿ‰½ùa“FÝübïÿ±7¿Øû?-þà¼3Ôõ=ÿi$"Îå³höE·­«¹0~Bõ„¨¡â ù¨P=ï*÷]1”^è*#“¯üa…¯ó|õºLíüÖæE‹ìèñy‰Kv¾ùƒUk†U5™ôMrŸþëu-£Ï¼ÉN ­sV®ÌNr&TÛI¯ÔºÊ»l;!Í–Hæ°zs<²;%Þ“ÂìùÎyÁ!7âÞüÙÖªV\zðªõ_©Ôó eªyóætšç£¾i•i;¡JV‰£ë?¬Ú“7æõ$ç–»ËÑ=›Î;:Qåºò—$®¥ùÚ¶È5¬*Q”ZëŒ{‘ÍçU§'y«Ë"KZ1¦ÚyÅeïZõÞWáÝ3§’uås'Øãùã}×ߟ&•¿è¤¶¿ñ†›¾Sâ à×¶E¨—æï¨ûÒõ6š·Ø"ò–§]Fr³šêš½À¦>Dy—W…ʺcìqÔp¹Îmì2/xy¡³S&N?O=`$ì~¶„µÞ52©‰¿<ò°Ôêõ¶‚¡»¶O9›¸OšæèЛk5ê…HR¡A p$îqSÕ¸ngm±50™W:Qv%5ø°Ç:PšýªÄ¥ÕßüÁWåÔdôWèÜ&óðr·bÖÁð e “Ý¥ÒG‚å¡4éÇ!°'º{ntºÇݨ_˜MëtöúTÈò©)àxfÏ¡·YŽþ‰o7|¡9¬Íýõ‘‰P‘¹ -ð”<ž½‚Þ>OJWZ ÏñÞyáà.ê i‰M´>*…*¦‘ØNÊ{Ìå(æ]]ß-R?["ÎkówNiîÁ¾øÒ¹–±î¹uI¥ÓÛŠpqj½]+v’•IFlÉ“žïdJuó"Y©#{ܾ¤XŒZQ4ÊBêÛòÞ›ÿù«IXƒýfXËf˜°^Bõ{AÝëVüs¹ÛHHr±æü׬É&ûÄ‚–ávœ9§s\›¥NÍÞ<—ï±=ŽKYëŽXÌÆÄK¼7ÿl kô=BEªdX?‰GqNʆDëªÂ8‡wê™;%ä ½ôÚj³JBä¼’$œòw„9v¸3Y±˜×OQhÐnäIdyïXJY @‚‰F]#ðvi…cô¢†£wÃÐ{@·|wû‰ï|ð§o ëÉ|3läèåÕxvºšÍ:€TÔV7k;êÌŒuß]xçÈÔ°[Žb̆Œ¿r‹>°šöl;q"U¨9’YŽg°’,~ŽÄ7¶þ\ ë“RÝ—^dá jÑ¥]öòËýà•@éòöFâþ,TÐÝx蘳Û3­!Çuª«ÝC. PÒ@*ƒõ&h¤r-9&Úo‰o:þ¹òÃrgÁÓȘ†¤$ìL–gœæ‚Ù,JqÕÑÍR8:EQÚÉ×zwîJÍ/žgÚ|mZl"±öúajMÙNjÝ]ŸÒ« (f>*q©Ûj&vÝ:¸¤UÁ-Osì*¨ ˆ¨X]o‘BȳÑ_*`³kik_C.«;[¾¬†ö#¾½½Z¶½œˆ{™œG#Þ·0ç ÷'J\/£K>“«# «…çùN˜ÂÃOîOYé(5³g£sf‚'˜2*Š … z–L/“þ‘õW®ôP\[¶Ž(ìŠÎAj‹×ÜáüéœëßË–osÆ3éEý€|lo~ؤq2åGQ?¶7¿Øû?->Àuó‹½ÿ±½ù9&Cà×zÿÍù_êýŸ5i<øµÞÿŸ{ó¨8Ÿök½ÿæ|‡À/õþ†À§LßüµÞÿÖÞüìÓiœOûµÞsFÝübïüµ•ÔïD ~R=eœ‹æ×Ì~õ6<ÏŸÅÍéRÜÐ*jÍß7$ }hÊ´ÜŽ» w“övʳõõ 9ŽsÈ\è›ÇW ÎÊ“îwJœèúgËï¨+ «Í§v'ÓRàOk^„ú|VMFÊÎÒn¼ÖJ¶H©X>*daiÊLz‡í.å›8ƒpÿå_(ÔàðÝ *ÝYŸ­9?GþÎ9Nj÷+dÅÏBûÓE˜¹–W¥ªy›ŒçcZi ⑪uæ%åj‰–Ì@p„úÌ¿¤ ² òŒ½ ê³þâ+5+Ç2F? _EÝþªÄSÜoþà_¡’¹õy‰P©kà F1âäU«bƒËô¥¯4½S!Nµ}(©M)×9É·•ó8r–’¦m7}PÆ­4“ÃÔŽÎT_ô/ß) CY?"Q7­„U‹ËÿšTï׃¡ÞŠ©+TW,ŠU—ƒš]éktOŒ$«Nýà*^[LÃb&'ÁBV(ÏI®mŸCf*w*ç×â*aâ\€œŸ#çÄ3§îûþ ÇÉû«.ËëÜûF‚Y¬Î¹s™ÖÎJGÓªÜå©ô&AZJ/ɤPöFO޼µnŒÀeR›d-Ü©7¼Ñ]»ß–wòþê-¿£b×(P÷yõÑle"TH¹Åñ¹j·^í¾ñl$ÁKFzrç€:*9ƒc2‘ŽßY#œk—`/Ý€Ý'“RŒÕ ·°ñeꦊ2îóÃOØãe„ÊDŠY‘UÕ’òh®Kþmœß&Ýu˜¨Ø×ª80﮸~Ôj´> µÖå°é$ͽS-8»›1»2),¯‘ Ÿ1 ¹í¨´Ü#Ï ŸÓÞË–°zb“ÆÇ¾]’˜Ýóo{YM¹'¶¿ÑÚÁ&õ‘uó)ô’[‚ÒßêâAËç%¾î5O\—¤.ìxì\è¬æ+âÙìÅÆ¿…³GÒ[ ûʹٻ7\P''!ÒbÅÓ<ªö9®û¤$v¦ã‡Æ˜tf£R…› â6¬ïP6RÈkBPHª?¤޼Pw.ò>j­Ö–šO»ÁnÜOø‹^¿z­SÓñ%…Ky<Ö2a®·Ü’,äxfv–t®ÙâÄ$·2*ƒF¾ ‘ÁHŠ©·ÄFûså;%¬e¤È¤\¥µEïÖ'²sï1ZÂ+ÜEóÉëñ•S{ ö:Us¾n¬Ù  ´ à Æ|œ˜<õI‡¹wƒFÝ.¼GRúÃòÞ›oý ¬U•Uñ#“J“}Xw<ã–j-]›fýP¯íˆÒ1m{¥=Õ϶Ùi'=£—â¢6£*Až§ÏYa/q¤á¸ßa°.¦SèZÛD>!³ó“$¬õ´üo7$Ÿë°ÞFÙ{/ ÇëV»Ï ~täW÷òK&ÙòU¥ ÅÍ€¼ŒòK²Úñ· h$î…yHDƒ•AlÃÙߎå1†žÅ¿Il´¶|JÂÚ\Ë…5¦„õPÆ=µk!F6£J¸0ÍC­70v }'QºŠæ ;ï7ñëQãdNXa~Ð{­mŸÜNf,ˆˆ»ÙI_+X&‹Ð§$NB~m[X£­\dÍö0Õªó¹¶[jÐvðƒ9¨‰;á|—(ÁM¢…>Øí(U°>OvÑ2m§£Ç‘(uŒdL<þ`0¼ÊÆ6Í¡N ãý$ kg?÷pB8~ŸÓºXÏ“ëˆuñ²JbÜØ0) q;¼''”ßþVLNÓÈQ-”`•Ò+Žn«PYTAcZ¯5&¬mìšSß`ö¹±i®Åæ¿äÿÅ_Àþoó$¬é§W0ó¦^3X[ÒºÏ÷¼«kºâZ>(BôV2xY%—ñÈ.370Þ7ÙlZFṦ³îsÝÝë¯U0>%W¬Ç§Vz—Y†Uô;$Îu~¡ùöTæÒgèQvÏ×ýcSnÐFRžâ÷òh³• -†&ôªá eCÊš¾î—GçÕ(—5–ÂØ5—O·–Iø`R†rÞ¹NwÌhí.ä×Ìû9r>-àš|8”`þ¼¿Ëèƒ G°ÕÒÍœ ø ¶ Q£©õ`gÑ˃1e€#_à€¬wã*l‹‹‚rçúˆ’"aå9ø¢”y™‚Ô™Ñ]k_’¨›¯nûªD¾ù=¬¼ÈaXÑ/ѵµ˜qZ['¼¹H*À´Ì^Ó˜ŸÅiÑNÅ]ü²LÕxUµÞ- ^×,Ù--L¹“y™Gt4´NÙÇ^e}•‚ˆ!X¹‹ãKpû”ÄY޶|õœq‰â¢~€3¾!ù£¨àü¯Ñ>úÎ8~­÷ÿ»7¿ÄûoÎ8¥úk½ÿæŒWøµÞÿlüˆIãdʯõþ?öæ×yÿÍwók½ÿæŒÇ¿ÖûŸ6iœLùµÞÿco~C­¸Q„ªqaµ•P¯«§7?ÓE¾i-“V³³HV`í4æYÕ,”$µ5 ¥•‹LJú}ãè[®qd {KºWf¶´C[®4x¶î‡Ùcny¼¼þˆDœ“7ç8¬¸—ˆsœ·ɼ%¡F‡Ö «Þåî¶Oÿ¥QywÍ[¶ƒñS307qE—‘,…Kf»»žL¹ÉƒUàÔhí-²~Þõà†Æ$n ? x! —²ñí2¡âõ\ |Tâ,ÇšÿZËÏwwÜoã¡^pOƒYÛA™âÜbZ9ÂÍÇêY žJ˜Í«$VK¨$Ê®ƒ'FXÞãH£–NS%ª#ü„]Ó¸ƒz“³‚µç‡$¬r›(JGR¥Ø“y'Sj“ó£©N·½ùÈ{¹Û¾VO,`SI—1ÃÜÈÔ¡œy•ï¼k‰¹gï²ÇM[cÇÅB©)F"Ø–0r¨h?ØÛdjÛÀwNI\ÑõÏ–H„ºŒL:Fqí9Öúí÷ÑÇ-„›yO~¥:n¹ÛY;-TâÍ„ÃÄgèŽÌc*»Ö…êÂ:ívµL­¡H–Ã…€¹+–ßrÏÄ™2ŽŠLûá™fýSòN©þ£åï¨j2BE–§‡íŸÁ°¸ÊùÌõ\håCvOiô³>;Êa“Z`ÊœßëHl┩S¡!¾‹%Qv֥ߨ6OÃY|ÎAjKT!uì]~Dª?~ç|äɰ&Áq¤…u"¼ß{l²à©=­í´»÷åEÁ_„ÚË\ qÝJS{gXVHmwô²ÇïÉs7)à­ù‹A݉ÌJ<gÕ9 ­[´‘ƒåBÊ1­ÅÞE¤¸>H¡—¢ˆ“çC‰&L@Û½ë%·aÀ‘Ã)À``±Ã¡õš #áwŸ—xoþ\ «¡bJ„º¨nÃúFï=élD>º¦°y¤4¼¶sCmñ-âÒe jBò’„Ý*L ì•ÀÛÉ)Ž˜mCˆÂ1_Aßi»¤‡A§ì)2­*S?"¿s*Ú ¬]†pX=Î_ˆ½¸Vݺü“^3í‡<½/²üµRʲ‡€-SúXì’µfcŠ_·—Þ&½g Ж?ÀmÂ\CHZ+BpN2!h“=m#1±/Il´¯mû—„µ qÄê†õÉfpý%âe ÖÙQÅux0‹rYÑU ²å,ªu¼³Uúqy¿LÑQ¶6ß&©Ã ™›ñ§ÀµúÒ’á*õÏ Æùe$âú;%.¸Œ—a­JG¨R2.AåÇ.´d:gí…O”I6gÓ9íR‹ê‰ª"ª…ÓÍÄR'WíT-tììØ… YÁJ*§Ò=é›ýµ—‡q²á£HèñHX›ïnQl6Š·Tó’72÷ÅK qrÀfÉ8µ›9gŽª e»s9 MæPw›–¦IX}¹YH7©íGQ?Àù_êýÿi´Ÿãý7gÔÍ/öþ·öæ'zÿ͇À¯õþ›ó·³À¯ôþ÷‡ÀçMuó‹½ÿ•½ «…’.bT +îõV‹¥àvO Ò^&³©8ð@ê™Þê\öW=§áN[gPéT¦ªšŠl/gÅÚ€½tŒ˜3~ÆCv¸‡#דq÷÷Å"Ÿª{ß)ç¤8®ë<¾“)ãÆ-è‘ë”7ùŠsIÝ{V»Ö.!Š#çô Íjë9-žÊz[Sk[ë¢`“UdM¦fÈf˜rë¥:Go¶÷ŽTp ÅÄÂs¹EXÉ;¥ú–oKÄ–¼ï‚õ°ràà¸XR «xϘ<›ò¤±S¹–Õ®E\VscØÕ‘óìÖŠóÚZÅS¥0<©µ£¡ˆ!“™—qô^ëHÏ(÷Ø5©‡˜@?ÍÛæþ¼¼ëŸ’wJõ•ˆ­YÕUà¸^2šî{^À I?é¤ËWp4ïZWB˜\"ŸE¢µÓ:8œ =©õJÉTšfÊíû#Μ³Ž˜ïφ‹¡Ð #Ê’É™$§íœãJýNù;§+Áq±dÄiÏã´]à›vÒŸn•«v§;vsàÏÌ~v…\’¨NëËíàp:ÃgMÝê“Õ¬£ÿH9Ò:ú"ÿßÙ>œ)0ç]»ÞTØÞ$uü—¼Sªÿmþ’üõ¥@q¢Íüç×{gžMù‡Tq ´ÙµíÙpn2¾¶½b‡Õð¿¢]+mZºŠ6aC¦xÎ’FúÑ<,À„)ämþº¿Ìç>ëçÊ3¤õ#ýìÅÏKœR—j) ÔêKã"D!šù/#T8›ð¼ä®ÛÅžS/ìV7ßF//UáÎ kªj °7”ö¬­K|¶ €aWãAÖ8+xê;TÞAÂ…NbHÍ_Àá;åN°ZÊ»‘kµs§ýøM}þKSË®êÌzÎÖ –7;F8ÝÎméª]êjG.g)™:È<$ÉGŸgd–-ƒ 3â›gj1ZËäjÖÉBºÂI¢n¾ºí/ «£†ñ;j3®éVóû°Ö‡í»‹ƒÉÛxx+{¹-Û»V“ÐÚ&Ô5c±¢¢9RU:–Gš”ô1I( »G´z{–½2}Ø¿PUBïv¢ „näþ;å·<ô_¨Ê:®—äÂBXæƒIÞö÷fÅ“©ìðz©¿@›\ج‘Ô‹ò ÕÄãÃ¥‡Õ¾Ìï±R°cïé;K‹@mGžzû=逄ׇ•8Ñ…á“óÃÛgþ;åïœ#mKFœ m>Z5! <2þ@½?ç°ñYv@ë¶ípçÕVÔ6p¤™Üãx2سG)&)0©% 7݃Ë4öÊ í2²ˆv»ýW%.†ýæ"Àê%ŠQ¤ ¯¢íE¨Þx8åd2Øí¯U?c)#ÇFIÐ ë §í9'ý-{Ø´¯4ç塸3GÌKœTaÐÁpKÁqÔß%È-W’YdbŸd„ßïD$TwÂwJD×6~»£bV„Úï±a=)_ºÖK\®Tõ ˜5pZV2Ò—,}je3´$©-ŠG Á†F£s«›Ãú¥°ÇåpÆa¨bb#ŽP&ƒaÞ4ëenð6ÖaN(¨{s¬Ta~c(â ôøm‰3P_Û¡6"ï7±ÕòñüdXç5àjžëî—¤ÍdòÍËjSžªþf·––íÛ†o‘ˆ^]ˆ*gv ~hñëóÑwƒqÙá#ƒP§Q°ÃÔfkñ‡µÓ•ï”Èáí7ço/š©%ça½D‚%!ºÓ®ÐÑèãñ*œÈ›Ó>f‚~Ÿ'vÄ€¡·!%¼)Ѭ$çSW[ÞU—È|9^Áùd¸Š¶‚pKÆÀŠr´jÆ'›÷òóù|yEV#ÇçÇaà‘`ø èëV¯îÅBºœ\-L—%ðäŒ.°óî«LUÆ^w¡|cNÂdû´ Sdl§qNrm¤`Â{q¹1=z³iôvÛHLêòÎþ·9¬*“UáJaÍoôŽcn¼uµ´6§%l«µòêé(WÏwÞåvQ,=HSõR8¥ç‹èãÄ5¶‡l­ƒ,(µòã8¥ •n‰ˆÔÌá+£õu¾™®ÛÊXù£åú;%ŠÍÉå·êã:±‰?¥söÕŽµs¦ ÍÞáœ)¥O¼Çô/,]^H¬ÿ°±à• бÃe¶éZç÷âN(?«‚È-ý.éü­šsMŠh{åßçÝU4.ïnoô–¸òÏ•JX½Ï#Ôó5ñho–EÇéTú6Ý-Ëóñ ÚáE`å‰w ñNGÄ8®ûþÄüD8HîQ}@癚·×YjƒÓéµûp²ënK̯X-¬™Mi¹õÊÀëШ‡n©ñQ‰ .ÿÙtyŽöJàäª~.ƒ·³,⛲@OUP'‰¡BaãÎ!jŽ—`p17@kv±7m°ï¬{ý‡»ÚáÆmž÷Ár’âze‚ž€8Z&4ÕN-äJ#»Ìjî;%¬y;åöT6ÂeµTa%¡ã »à–/µ]–:NÉëyb“MENÝ m”ßPë°î“ ¼µÓr:¾ExZ7€ŒÅš eµµË×Ú™k³±;ߘw^BëÁì’ÏýMâ$ä?[¾-G=Ó—eR®)|ÏCÍ)lí.ž%Ý5ÚÆ¦,·@´•C(™Æ7]¯G®S$~/ptÊ4K<¸ÅºgðsÛæPsœ—uRãi§éÎ& tœOú•ãr|—÷«1·d7ãáÚŒžÂ=I õv4¹Ø¿$êæKÍ_’°2Ù°Ò¹?ÃrЇH ¢éôýò@Ó×ç-êo†ÍŽÎ #Ë^×6fU‰ äâ3ôy"Œ.*C^OëQnÖQË’rR&š¾Nó©à#Ö©pa÷¾å¥_7iBÎç%¬€ØîwÎÙ*2©®q©¬ö0½Ò#èM¡¬'Òb<“¾n*™¾]GV€Ù­Èed´¨sªxâôŒ2µüô~jgý‰S©¹Ñ$¹o›¡¿0½ý¹„=yžÕ+¼¦fÐ5N÷_rœ¦˜RßP¶ÚU©¯;¡Ä^!?B ¾ÈUãc8´”ÏKX„ý5 Pì],‰Åõ§Ñ”ÕÞ÷N&•ñ…í¬ê®ª§Þ»º[®Î­ö‚AŒAàçà ØëYQ–NšÛެŨ‚"MãèQª-Köv˜Ù¦Ã•ªÎ¡EÙ&}[âê‡/4ÿ‰šŠP‘Q\,¡ªm9¬e‰ÛûYÿUf«®âçúÎÅ¥Ö•L"ƽµ¢/ Måõ\Ñ“Täv•dr‘}çÓ¸ôZ'“ðtHÛ²ÁoªCƒ«ßH…õœé‘ ü¬ðyùóÐIGÇ6ü­ºÛ߯uR4§&¼;é-²·‘fW½E¸^ËJØÍŠšýþ}§+)v§š£ 'w“NQ[þ°(x^k Å=¬$®1½èloR˜!|hþnĨ÷òSV4…ÿÕ%‡Ñôÿ¾ë:Ű¶Ø¹wwMfn«_÷ŽGcxÕ}(þ\ˆågìr_­ä hÙ3|Zc:uÈžš/ ‡-n×¾¶ç¬Nô„£xJ*à{*C­w¸àòŸ-G}1ø‰¬9PÙ}à ? `²áÉ•ìÐ1jeuï9\W•®b´‡‡‚–éÆWú0Æ5M-ž°}¶FÒ¯¢»£S["W•ÖžÌ]ŽÐv-öóòg3?yÐ+‘w2¥?ÂÚå|}Ø·|öÂ\Ý=ÉÙ¾Ó`ô¥ñl&P Ò [ù6BQZÔ`>šÜB\뜙°ÜGèYQEIu4# ½;àpääíp„ØHBæ-q1ìŸ+°r½DѪ÷Óqíy?~µ(ÖXëIÇ~´ØLú–¸“·´köl’Í®.–ˆŸ^UíqsWAsÕ5w]Ð+v8d–tzooȵµ†£éjˆb8ï1¨{9s¨ËÈ,ê"2ýQ‰]®üµÉõâ÷`‚‘ãá}Xo‡ö$þ\aŠ×ÚpÔ±ØAg¥ƒ“êRéMÖKñ^¾&¯»þx² ç·Îœ,Íqo”øp ¥'Ñlv×G $Äwûí'Ø-»§™ÏËœTtzâºñK0×‘× î]œDÍ`§¡·Z yG•®™(Þæ'»z…Zq&œdÊu§¹ 3 žÜ?&xãUŸ¢=‡_ Bv¸†çç )ÕÍž÷&,’ —Ì_ÏÖþÙòU +ÏëáwԕЉ´ºë%qÖ¯ó&Œ½› .Û³ÚÝói Õ΋‹ÊAŽs6ûk«9b'ÙóZ ÒÇç‡Ú7Â’ZL&ÐJL ¸{ÂDo° ØrÐR™ï>%q¢+^†Õ|4t¨¸£ÈûœÒŽb´„õÉÜýTZõ¢ã\ëçLÒ| Ï–fš‰®ãwB®qá­(³Ä¬ñîœß ‡ ÷yùƒ³™ÔÒšq]ç<¬ŸòöTOñ¨Ó­ŒDÍâ–Þã¬ùÙ’Ê´ù¦”óõÖž22-(o›„ÝìµÐ»ßl!yÐ/}¾»iÐÃáÊ/dæË{ê¹Y—UŸ°¸ê¢sþ_õ}¡ù_VO1:ì§É°V½Ö£ÃžÞý’‰xëÌ’°{2-žõ¢æœ:¬™”y”ãÉ´Ydçói‰47Åø…X´©ºM©…:\X®[`­vn¯¯â¦·ò±öhÕs{‹%WBË¡¹£‰FŸ—ßîFe¤(F—¯øÅ²å°Îéx2uÚé p)ŒW´z»©I…æ.O¾»ÀwOËuذ’ImgÒ"¯gÇ"h€õÊ{˜Ñ Ž«#•ywy ã‹ôrÔíÍ€g€B€°“ÉÏK„ßzŽkºëÉR!²&Ú¼W¡|QìrÿÔRñõF:5Ñ#O©µ3›Ëž,²¹í[ØÐm¹ÛL ~ÀEÝM€fHop6[w‹|aÅΉÊrßlW'+íZ¶'‹c~¾ü’DÝ|uÛ[¢ }>ºpöh/²æ$å/rhH°œ(aÐ=æ«2ÆÓÌŠcó©â‘lM}­f*¢;º´’3>n¼c!®ë4žËpŽ&–cn™n/¤+¥Ââ(—*‹\¾Ôœ«Bµ÷y‰¬YßWOïlw8°­ÝÛŸ\'š?åçh—g&ÄæµI¶GÉ–è©{¤pQ{Ú†D…óºw똫áÞµ—úà¢ù@ú5Ën=\ä‚Fb¾iäã—Í‹Z>?ƒË™òç%:Œz|Xwrʵ>! àìq)v<*]¶°Ûd§·ŒÇX²]â\§¡ú‚Þ¯o²Æ¯öå…¸œî_G@ò\m¡(”¶È¿Ö—¹FÖ¼ œÙm¹³ª–ó§Ö4÷˜¢·ôë«'!¿¶-¬ Ò[¹…^Uw­ã’:íx6·yD”³Ù9Ã}ô˜ã–HI?@à5`ëݼ„-g·|\¬i—ëÊ1uÎË/J˜ÔVœÕà8µÑ±2ÅóÝÓ´© .wÚµ&Tª{ý¼Ü&3ÐÌ §»åÔQhF”y>¢ÌZeý…X )«…1è6ðõzÔÚ­–R[.6§Ñz3)p†b:”êcêÛuó¥æã+`E¡áTÔˆê’T_a)æNE” ì8ëj–è Ü…3›h&¦Tï•°#»8ÞÏ•ÑKfë£Ã’mRÚ6¾M4<‚Po”¡Á0k¬G‘l'¦ƒuX üø¼„å; ˃²–sÛwuw9a¥ÂD“®e>¶Kéu»ñ‰‚÷Í›n&¼ŒœÍ£¿°«uc:`6[Û4nPø™º°½%ué+“ÝùÑlógNoKgî09GݹqUOO>çqqÒiÅ&ÝOÉ¿P?ÀϤõ`ÿݛϣ~€3Ϊÿ(ê8ßÉ”_êý¯íg{ÿÍuó‹½ÿß½ùh*ï>Q‚«ˆ’‹f­³k„º3A7WŒP±MÃÍÖ¯#¬-––•Ž9…bxý¿‰yaç0{~`Ãý™{5âÏŸGP騿ÒUMC+:вª¯–׌ý) ËÈa–·}5µ!‚‘I)m÷[>Í¿<Ì^*Bê9ïe¡u7»½A"Ô™ š9Þt-À/¬·£Ïû|w½J¼þ‚òG]’ª>Eó†>]ö¼1SŒâÝåíò–8¥úçÊ·%,3ê"F=…壡Bçz£)«—‰8áLd‡óǰXsJ¾ï€>XÖùý“¸®·F¯’—Á™fÎ{eÈé/=Ч·»¬§€ûYO «Ñˆ@h?cŒ¹Gªaâã8Ó>*qÁe¼ü•FÝ^¥ÈØ<~ŒŸ «Å¼I/ <Íù|+ŒP©v×ÚÂܲ‹eÈ$‡{ürÏÄ9 æœ5öú¬ãô{=iÇœgn#Ê| BYåvtw[Üo»Ú!8+Ÿ’°,Ñéÿ¸ÒÃJ:qÈy4Uñ#Îñ;×-'{{hçüЩ×\¹¹ì8ºcMíš:Mr§b—;&Ï)oÎw¼Q£RüÌù0òy~Ö„Ö$Ï n"–ôÓ©[ñZ鵓Gçc¦3>ÁÞy"Óud"¾^ÐTPKÄlÑ}`w%§k–~¼`fç=Hš·Ü8ÑE‰¯=Ce Š&• D~JÂJ*µŽ8±Èûú´¨2 kÙÖ˜]4e½%Ü[X]Æ/örì-ç }¨n4º¯4»¯«ù@â¥lÿCÓý¡6Æ;ò93¬;§§½íŠZ€-¹ª@ ¡-[6Zd$Ý/JÔÍW·ý†ZI1qEÿ¢!ãbI8¬]äãÕwì[ëÝÜRý–¶‰Ç¾~™ª­Óv µŽò³-f0µÃW“t<†Þy]¥Çì™GŸ:ÎYÃQ¼ ^Û„f'³|$øœüÅù¾z¾…hZmõ#Ç¡°ž4wêq¾øóÕÜ¿"ùlÊbðCU×—šâMê i ¡œ×¹6^­3áuÚ¤äÛ!¢k}¯×ù1êJ`{SÑíö¶íØ2RÙþ) +ål„ZâºÎU>¬ZV7rü ëmoª©{KwruìÆ"þf±9¡’†d°²<ÌœËõ2­ì±g®Êr_¥3È«Fœ­V#¾³ Fá‹™’€ ,f&8²7òðЯKœRýBóßQ›`.¬eîêÞ„u2·¿ñ/»š‹Z¶——ì5ȨW·SDÎ µPܱŒ\¤ ®H–[Çrœ ;fyË•& $9ºw 9¸ŒÁÓõ²7Tƒ–…* §±Þç$¬tÊ›H3:–°ìo·"’°^Ú­Ä4Çø¼®ÆA6¬Ýuˆ¥ò0RbÞìe÷홞eÄñ&Kê·is¹qn»Ïí ð‚{–AÍäDúklK.ÖÍúßTÙ{|YKÝÌöSV¦M0¬€–Kd:®ël…õÍiyï1橽ÓÎiWB͘;%ÿD´[q^à˜N‚OÞn_ìó ¥(-SMâÄ&•ÚòÝ\ ¤y„(«°¶¯dmEmWÝ%K 3 LZèò¶yâ««sG¿-qJõŸ-eŠÎPI;~ýq2r|£Ö`~›Žw«k‚Qóù”úÅâœhHçø‡óºpì¾Ó*P‰æôü@GUë /C÷Vñ^ÐëöRË-wG¤ð'¬»/Ìl1GîÛ…ä)`/=ñOIX!§ñQU;¬UÅWtÍãù‘A‰Ž J}ó©U—ç2Íp*²š´Z¶-žLÛ.›¾W=².êæø¬„;XóÝpÝ9/SË‘öÌ)àR«%¥;/ ×ÙL¯÷Ðh”¹ãçKçý=‚÷ò£V„ò[Mw >?Âú‰(ø ꙳îu¥!Ö¦ê`€SÒº2øeHl¶ø~aÙ;:*TŠ|z4l°1ļU ÚÁ’¯BO`vh¤š,ÌU-YŸË¥þL7æ‹H|jœÌý$Χý¹V®$WËêa=zÁ}Q "5tΠ®¦Ô;KE¨ íƒÂƒ`sÙ3G¶R̾ /¨6+—óºgÔÌ%ïœ8'y[ÈT7¾¬ÍOËLr^’ùœÊTg¶Ú™šƒåtº yðSVóÖz9ŠÍ®éêhãp)4ûñàV0AJ*†½}`—æÄ„á ÑŽÍ3î.ƒxüÆ¥îº/`ÊR8¥´ˆýxY¬¢#i®uÞì’Oßf°{MMÿ™š6ÉÂÄqJõ A {o‰Kÿ\ù¶„UôNFÖäù›€-)#cº€Êú”,•¸^zÏõ›MF›FÿÛçz ºHNqF$ØRá8ÒV{¤—³z²¢}X¬¬ƒ<õ­63Ò€1« ö#ëî´Y®È…“vXM}¾Wü¨Dݼ—‘A«Û±·Fšp*jP*.ÅËÒT÷œß{1àuV#Ø*:BŽ´‚‘ÙÛŒƒ¬x%‰òv±]¬½>‡,ž/v7«Gcè)ŽÎĉ«½?¼9¡¦-mÒMuñí:ã¾S÷G¢ûø”„õÖp~YXÎCõžH"B\nö£ó]fÊü+~<.¢lgÐ,¿ªÁÛÂc´¹M‹Õt>Ÿ«²,JÄh5³ª¯ÍÔy¡i»Km'4ºÆ&½<@wÓ.3¦ûQÈv#~08ŽÆÎà4Jlºç¿$N©þ³åKb$±¹¥Rv‘òJÓ‹ß4°Ž(;‚­z„X½Á5ÍlØN±ºJ‰ps¡ƒ÷μƃ½YiÆ÷o¦Õk2éÏÔÙ˜Û±‹ñ¨A­F¬GÓò%³íPŒñá<“à 1fJ{ÆJâã¦Ó< âi:÷çF”ƒqD¹Û¢ÙýuQŽôMß?^—@:ôegx»–œvî·ìøq8Æãô¾::,©Æ(¥A­8wÚåíp nñ`]¦Q7ƒÂi<ïë›ñ²%›~YßQExrßS† SÞ‡9¢o–"6…lÐ…×û~%ÜêrÃηµ»0¥zØ1lª£—\0F©ÓÍ%Û¨ˆ~ìý¯ã‡gj‰‰~ÙÓ=ƒæ³½mÏ÷jw¾Ôµ9±ÚÅGbã_uó¥æ¿$,5ùbXju¡°T<^ÂrŽ-‡e´Íw+.ú‹1 ƒëXNû›)z|]hº3¤Ó¿wâ¬L*þ€ ­=• ‚cØ.ݺ˜u꤇õU%Z«º™)¦•„ŒHTÿÒ£‹W]hœìÊ›3@ý(ê8ãÁí¢~€3êæ‡Q?À×Üþ(ê8ãøµÞKã1ü±a„åÁ±–åÎ*,›X„* ÆÃÈ3Ïàºw2þ½Ù(y“œÐrÓ‹Îàš}¹Sg>,m=v¹3@¬ [Á¬ª“¦¬*_äL«]‘LôÒ:Eòþ –q­±÷¨wÑÒ©‰ñQ K#¹£"aiÿ2ÃòÖ¨„•ô*š¯T¸]X¤ÈÌò帹\<#ðïØ0B´Ušõu›Ùúì²0-äXÜZµ\‚0->ÁšX)!˜ )§×~ËŒ·wý¹;_O«zò¢–ÜéKŸ:¿Ð–VçrXZ۰䬰l¼jqºwVfÒ;ƒÍ®Ó~xoÙ[¿GW¼‰á·ÜL:§æ#â4Ù•e€]ȪmÓñPÝÄp“4› “3®°)d&Ô â1ðÏÃÀôN [2µãõù8~TÂæT¡Q€6í÷L:]¨ýžî¥46ú명•y&¼·R@æÖOO m73!‡Î¦ùšÙL­¬í´™v?ÄÌæøL$,óFû~R.þʳÎw:ñÿIûï.U•-Þ~-f ŠÉ„bEIÒ÷ÿ½÷=çž3Î^¿ÏýçË¢ÆêæÓ³Š “Y³¢K.¬:Öl3I6-›Û4ÚŠhüVþFÕÄ%l ¬ mXKÒ Èƒ$ îÊç J‡rü/z>TÆ©$–#ØhÕ³QE„sJ&´j¥YŸ>DH÷Õu'ß^Oi“©ÝåÖò£×¥Ïv=ë,oÇ•çŸÔ¹®ëlvÿ(Ihï–lüÔùă6¤ ª-÷@éë­’dgPNµ¢·»saT锂¯%ÕüþüÝu/m¶ç”³GþY™tfw_»Š·ö¶•|÷´¿¥´f§w¼ô›é‡uO-ïÇæê)Ýúa?Èí¶;¾6T~+ ‰ÛØI~\ù‰c²ü—3eÏ2õ‘@™oÀÿÂ÷ûÆs¡:àñ€Ûn*_ðZÎL$˜‡ôáûWplnuáÏ'©)œìÖwiÍü»b:¥ðh„¬vÒu&kìóÏÍN8,™Ünçsoý[ùÕÑ ê]ö’¼¥d7“¤Hâe‡Vüä§AÔºÜ>¯4SÊ{g½‡%]çü&×ÍèÔºÂElçRd·ÝÓ´‘aM·6×jiltÒ×ÙŠ¯K¹‡Oõ´í=ü(ªxÞ¯• ±\ýY’€ËÝ@Ê,ñj)cIf„R²;:ñ¡–!j<=¾½`è†TÓxû–œJ»e³Q|ñ²rå”lålW_UkÉdÇßiÀùÐÕ9§Áþø¡×Ÿá­>§š°.ªª[0d%`–kY%jÒ,¿‹ßÊßœñQ¥æ3É72ÃAyû¢>EÄ­ Úª…­Æý•™¯|oòŽ?NmØ+Þ˜‡S¼ŒQ³Äù?¶—|ùÀÌê~xÊ5´«¹lmxV¥1R6éÚÒáÒf7ŠÅMÊw–ë©%!#?×_¤D+£²^låÅ’£dºI^ÑYì´‡0¶ÊvP(¬\w®eâ‡Â–³¶µ“#)N‹m9TSqáÀ•²èi—q­ÍʪôŠkò]“ð˜M껞¬{œ¶\™ù|5Tç³U±ËÿF’{rý ÏÛ+ø:¥_ð5Z"Кiˆ:[ÌãZ¬jaªø1}t·z8M¼oºs|€Í×ä™6RO-»çwj^#üKQmN2ˆLÕ…ÒÚ ²É¬seáAKºTS} [•¦â…2Ë„D&¿ˆX©œp’&9ȹÜ"I\gÆ&™ ¼Izª¼8?}ð¦ÒþúÜ\‘×µ°a¢“Xwâ#U½ÈÕ>Ú‚(}UrH¥7ßÓ:·î?QTº„»’8ËålÁ,<ç,@¹B9™<”ó_’¸Tÿuóò7jÛ‡¨~¢n÷Å$®¢¾B¤¦Æë`(¤wî²q³ïÕv/ÓîÇ7÷ð:ÓØÏ9…³Š©Á÷ËLúýYz•”TÂÕÜRlT‘EÓIWæíkº=ÓZ=~O§ãy{3AYð¿•ŸOYƒ~F†h¢Zû<¬ø *Ç8ÜM™…?ɦÇgsç[>Ó¹ž«¬ñ<ÒvÉÝÛÛ‹·õ1%?êôµj«P*}°¬»Lz®¼½ü,En—ê4[Ý6„ÁÊë Gã§\­1šê£Öð·­I×®ä7ðµ¯ú ü¾@Î[¯×å]ÿux7’cD½™‰­ŸÊìv´'nêlÉ•Ñí`£Ç®"ÌžJ|긛<[õ¤Y¯í/÷u8û´‚xÚV™Éy_+Œ¯J— Kz<íx£ 'çlúÿ’Ä¥úŸ%ÿ%£Þ ¾K-ågTÒãÚ»•—èÀÚv‡®MÅûigg£Çý-Úߋ˶U­Ýäì4•ì÷\•ò¯Çr]ü>gßFÅæ‘C8Á>UÀ?•|näIùò¨ñ¢:P¬_e¬ÿ8ß~-ïsõŸÑgø:1 ¦Ÿ ¨ŒÕJøáǤ/ ]Úiu§³ëxø•­¨ÖÝN££¡yqËR˜Wx^]=õ¼ 6²=§§Û´@dŸã»9tùz{•ú=5ÐZ~2¬õ¿Nö¿§ËxçÑPîÃß Àg|㯠Rekø„_øÆîÎÄ^ýM«äÖ£Fãn(¹dáq©Þ5ÉLÝßòþQöª&¼„׎âjÞ;Î÷ÔÈšÇëóøñn£À;Ãn¥öÓ0Õ3G!ÒÖ)²WLyãž™ºM ,þ¿$ùkþGñÜX“ äY* r‹|*Q´Í×?Þ|ý>Ò/ ·‰m³¶·Òì0Á¶+­ÅfeyðÙn%Ñêh ºÑЧ|öÇ;8vÚss$GÑeðÅ¥G¿?n=„h¦9¼Naìl³l²D?dz3›sXë3ý­ü¦µ@¹ûþ ‰'¦» ¨¸/EêíÁ¦±ÛÅêy‹ÆRíƒÝy ´°¤M”|j¼\UÝÚzñ! òôì`Ú¤Zdõ‘J+ÇÁª\úÅ}rWæ±óx›f\ú†3õ–dK y'ÐáÊLÍYˆ¿PJÛXñ˜*èÃ?ÛÝþ9{Ñ&̦mÑZ”?ÇWMSÖÇÄ%ŸÄEOòç,¿`}z:Åg½Åxõ0ÖÃo%£ ò-ýЛ¬¹GT+¶†£!³êSôKŠtëÕ­B90Ô[©/©÷@Üý/Iüiÿ£”Æ_ =f»Z$'!¨{+¥‰ö¡œy¦´Î÷„Ëãü¡)‹YpïûpZÚE“1y-φÜ÷Ï©xÝ–zR7Üœ›¬X휟­ßé°SðhÙ­*n´²ÔöÖÃ(jv )jžâ~+°â' ´æxâã ’¤f¹b³kRfgú“5íígty˘ì%I×9ïNË& s âkÜ?»”Л¶Â9W±“N“W˜µGïè'tgP¹P1 ŸݨÝï‹N¼]}6Íw9bƒýVA¾ÿ’Òp»Tš†5±}9/·ìÒ8mîØ7”ÚÛFa‘—–ÁîIKãce†Æ»Ëô'ƒÛ+¿šÖù<ó"• ÓZˆ Z½+ê“áŠétvTÊ¥ÝV?u³yë˜ýßăè%ñþgI¤xq¹¹ÆÕÜÕ©›^‰ |›Yö§›yú¨‹ñ"zÌOL @J%Çkí+2äZå>~·ªœˆ±M¶¹ý¶˜öúNÑÛÇ‘£¾E%o(–ø®¡pB·_ákLJF+¢ÁíÛ—öÀlcþò[±1×ß­éåyÇTU?9ÖmCä@ÔªÒjΧœ—¨Ì…¯v8×èœæt»ÃW8ºmK®-`a¿Ñ“Ö½OÏZĉN"ï[„Æm~+ÇÏî°Ü?О¤²ë†¶vz&"R^± W¼P»;Ë‘N«ré*œ#ÞöL¸í'{ ! q¡¸BxëǾÛ9ÍŽ~q´0qŸ‚6¨©ÄsškÍ[„t¶*FŠÔΆ¾‡zÓ×Ïíæš»Rø˜ßìgÑv¤2óþd½¬š÷åW’>sä€à“u…¬2z·ÑÇorÚgèx@:~Ü`ô¼Ã©-ÔS›Ö}©-"rw¤£º²ö9'AÓß_OÍ5{µ›dæqo„G×m(7¨ÇçG%úüVrßx‰Z5€fK€¥ŽO€IþãOÛé¼q$€aΠòé—Pþ‰ÅO&\ ì%G•à-SdÐÕ®ÿA3¬¿;d†>SŠÇ~Êüν•Yy‡Zsçqþèäeùé ʽ7P%™ÙÜZ­Áíò¨¿àLüiÿ¯¨¿@ü?Íÿ ê/8“Éíÿ+êߜ᷈L d$¬~wv §ks?Mà¯Æ„@oÎóýHÁŽM¤Š¹p^ ª4©Û~“ô?|¦ëïü˜õ.ú©(¼Ã"^z=$#{Ü·yð²ë‘íÔ‘ûxȱsU·¨mï.?'_ü\ÿ,͘@KÃ@7(d¿^â–.¼óí¼J¬vÁM€5óîûAÏ!ç¶š ›á µ¥YÒ§“þžÎÐ~š»÷¼C䌽Þð>÷²ž-¹æÄߺ&‡[PVÞ³œÉ{×w޼_¡t:› qü…$FCñëëoÔk¢º„ð]¸JÀ™ö‚ZC^ÖؾéÆå¼G⻕ Iü‰ñxRó¿y„ôY$¤=ƒ¼¼žz»¦§/Ü!«¯Ýa3Lö߸…~}^÷¸wÛO;ÝÜœO—úçxÂ6–þ hó9Éq6P2ÚÀ1ñW´4þ˜ý&Œ««À‹?.Ïâ8’Z½ì+ŸXïf5ç[~ú²^?{ºVq=q‡«õÒ-âÇ­sVî¦sVÛþ]Ò4ßföæõ\”Ò¦ùQ;³êÚ$[Iþuó¿äoTnѰƒ”¡5'/PÊâ•¿£K2Äö4î>ˆË!"é°€œ“7h»YÕ×Ûµ$w·gø>ëåúÈzâ̹d„•3ž¯÷V¸_›Ø»Ïùv.îÒ–ù\R{ãu<)F»¢È¿€²ÁÏÑa¨°!a…%¸²‚¨\¢ 3Š!AèËòÞ¼˜X;Q#P3¯è‹a}^Õ|®]k{yáĸH‘:ؽ>}–E >ªS°½½À¼vÕà'ËHQ{[æ’jê†<×T}oV:;ËþF:@×»6À[xhE ´f“Ô²[Èi?!§þ“µ7®,.NDVðEméo Œ¼WÌg0Gˆæµ‡c<š÷æé\·±÷óíàb0³éÙjÏÖñGMÃhwDUg§`½;!›å†‹KâåøÏ’ ¤Ì¾ª›€ç}®Qoa’®¹œ¤le“ÜÂ"(£ÕcìW××½»þQG#wr£RÏeiž»oä3r¥M/.Ç#[9#‡{ý„ÖóѬY«ò±‰Ï7‡í™Ûî¹Çz‡¬‡âv^xO·„ûúü›óç½i·p™úVý.Ëpùï±I²‰ÅÛ#?»P ûVË­oîuð𞢘~ß¶/ؽè•:xÖš¿ù‚Y'S¸îvÕƒFôH]OuY=Ó[»SMJ<·þ(/Ugw›)ëÙl¢Dü ”h PÿÑøœz1嚌'é_ok½LO}±" Tö.£ùÙYœ¯Ï{ç±tíA{na72½ÞòcDá5u _­œž­=‘ÝÉ\•5{5inïʪ·%Às¡¬å‰ +§æd£~C¯ÃáI2ëüŵKõëÂÚ?Ö4Pò?§ÞàI T:~ž˜Y¸½ÈRgò[wfóÇÇë¦^¯9<?—†×‡¹F-רî¿/ÝÀêI>›ÝÙ–€6­Ö2ªÛ¶‹J€je9*ŸÚrGÌC6ÝçרÀÖYU®Ìîºÿ ù‹«§(ø.QÚ_Ÿ"!4¨&Ѳݷ–ù—Þ\Î}ä•Ù8¢ nû }¼ŒããÙ’šÓ«¡Yì]ï»üs7™þvY̽”W~Ëê´’Þ0HY÷²…ÚÊrܪàñ‰Ñ¤ó~0°L½…üÀН€ñ( JVƒÏ@Në†$¡²í(Üäú¯lf)x%Y=I•NþškÞ4ôÓóÀê9g²«ïy'ô€½]F­‡"˲³Ù÷2Áº;·U±3ÍJXcŠ‹SÃíŠåA¶¿|æAo¹8ì?JpùŸ%£Š% ”š³$»lïÊo¯yÜãÈ£ƒ‚²¹ÕvmyßMRòE˜°[«¹ÌêFzcûñ@7·nmg)Šä]6z½ùãO³>º+á…úkù”Sß…'¦‘E#è6ç¯ÃŽ›¿6ŠšÈî7hç° M:‘“”­ÃàÇ™Rþbg6l„´úìøXeÙwVD{vË;é\Qpù¨±æVF;mñ"÷Jôè›±´V§‡sïJ羬\o.û‹h¶äÜôÛõªÓý·AO¿µnòÅcFz4”áo`÷XÌ1 ´‡Ó€òvꢟ˽}§A¼zÕ[Ó+Ÿ—ô³MgÆö8hͬ mÿì“ÎVÆòîN"ŠúrR[™¹äö«ó×ÅÇdn.&eÏ2¾Ouµƒ&öœ”>>áoZÈ?r´Ðr]áH–©ø˜ßü…ŠDõžõ çÕ„QÍF]DƒáåRq—î¥sgëÞùi~&ÇOY˜ëã4&iõгV(û,¯G³ËV|.m±q ûÙÎú+ÏmöQ¶'cÌsÆ¥ÓåÍ/°L‘¯Ü–-þѰºca÷ìŽm×ëüBV§Þ_3 \ü‘SPIw“ãwÃðLû8n É+ÏVèSse >B »ÇÛ›«—"n‹ÅJš×g›EØ\˳ýÁÝ Öºw߯žÅWµÕmÔØ¬^ÃÖö˜¼ùfc¸qdj$õ÷‰£käÊFç0j QÛh¢öÎX¼Õ£Wïa¾]çhe Á–.sçLšt¡Íê“c0ܾôm²7JîiôlUÎTKÒ"Ä™îÒ+§Ty<¯b»‘ß·Œaû0³Ôvæ÷Y]K÷3S¢Ög7+z@¥–ÝÁ¶¾êüY’¨ä °‘”¥´Îmuˆkp"˽ûvqótZ•kt½Nñ´™ŽkÆàúíîÄñ®§èÅæp—Süò%z“9£gfÂùVYŒœ´mš9e°«ïõÏísyé ì¥Çñ=Å¡[¢åÒëåŸ2Ýë¿WÔ/`ÛC¾öxV<³•:0ô¾1ܺò³ ï6âÓϳvÒfZÏ•õ2u$U 5ºÞø²¢9÷çzË vÅ™Œ—:µ»’8ØÏËr?wõöÜedÙYÉp™ç"N1KjB05´Ê3ÿƱ¥ï%Y­ý\ÿ,{>ò ô“fb:ÞÄT°õq÷=¿YÛ‘töWµ›É>9pÀÇ3Tkw;Uy”ý’‡žº ¦³IŽ¢ö’Ki{8êê€[½o8Ané°uW/L½× èµµLÓ¤˜®R}èæu:¡W×Þøò3êgó ¬ÞF ‚næaÚ/éõ—:û»£hfsèIŸ[Á66;9`ˆ´™ò‚]êS¼]mWê’~»7ȽùIoB¢Kö)]7Œ'? Z¦Ï?‘ï[*¤(¢•ï~b³ÑýÄi÷ÓàWT7qý (5æpàìï öoƒY/ ÑöÑ$‹½;Î%>›-ý¨9›k½ó‘H…Ê/² ´Tá£Ò­1äæH«ÏoŽ wÿ #V4é9CN*k T {*Õ@Ï]ΠýŽ™_¤:ƒÓï´Ý)L¹3`3›ùqBþŸ›ÿ% \1Ø<«Ô-LýsýÒCAêî¥Ók¦"d¿™žø‡ønnÞs+wÏ Ïj çßtæ&rµIµÄAÌU·v—yqJÞyžÚãƒe×(t6Ý\£¾ë gä©S$øgû|ZGí1ÿȶ±4Zi] ’ü…¢ÔO`n9üC¾v:æÊÄ}÷rŒ¶ÚçòÂúépš¸½œoó‘Q …e$fy-. NÕÒ›f8ëÏj5¦íû$M=NÅîçl·¯pÃŽåÒBÁ:b{Ò'“XŽ6 õÖM›Ÿ[³úúÑ*_OùœÚàrO5GûSÃæU£€g·»ƒZp–k7×µS‰_~W’ÛR캅p4Y÷©Ìy0€•EÛ³Rë¾v7-"zlI±{Þ“µÏÃLܦI«7o epuB8ïëÚØýÔiì©}ïE´¦ÏsØ/Dó1Ÿ’‡å%‘äš_ôßÏÛ”¸àO^kuüÁi°‰8gé}˜ö§“䤸¼›ëœ¦´-Ô†DkN¶ê k5ý}®Û$Ó¦¡ô_½z|zëïMjßëmZÓ§žXãʯM-óül«ƒÚ[¯æƒÜ vù/ù_Å.ÄMP”àâ©èzM€Dî Sá Ð Ð §FE"@RYu7>¿Kà}Ý¿2ïÒý†DÎ…ˆæî-ÙU«:¯ гÛ0¬ç_Ó°°õËß 47ï¯n¡(Ÿ nýBþ‹3þ_QÁ™,qÿÿA…K¢TRL·š çF„œ×¨P¹@´]‚œZvz)é@ñZwâñßW?{—Â'- U¤}#t1£ІŅu½üÓmöòϘòZ3ã“;Ý›—Í>me'—»»”²ÿ%I”ê–€âé ­ºk½2,·¡ ³k€¥N.À0´°t–É ùú |ÉJ»ñ$Wïéþ•÷UÜm%t™-ÖåU2Uù%÷òccüZ‹OñEbi-Pf½›§ëŸ»ÃïgöÝ¥ï¦ V`÷ Eçízfb€¨­@?'-ÁeµQÇ$0F€Ãô|пȉ„¨4çÄXRûå•—‹Š……îy[ áê®õ ú3úµvfýÉËÓ J]6Aø*>MÎé3»>…|òÞ\;_ôpɺCõŠñ¢ºÃl c8 L Ô¿ÜÒ˜+ ;ë°l|úÒ€ü¶!‰ Žñ2´jùòÊEÕ¹‡’´ª½cÒ~mˆ Dt(Ál(K :ýòÕ=F°É=ÈõªR%ãÒ«LµWCÿ(IàØ¿nRHŸ@L¿--º£Eˆ šÀ+Ҩn8…ƽCTC7áû%:1¾¡Aô¼¼²¡7Øãac¼¬¿6³~'ˆ4Š T”MæiAg3‘|P¶žî¿žÏi¦y¿ª£ŠuÉ‚Þ>ÿ¦˜U¡-½!þYþâD È)àBU;jïôVÒ¸â@T¡>¬Íæ![€±™óΈn‘8Œ^aSY¥^íF»tŸß²Ï¬O ï *]/{Y÷ÝaFœsç´qÐ}ízk•—K®ÐÛ[×·¡=’Hüi‡÷X™ÿBRÉAÔŠœ¨í2p9í@Ôã6LÜÒe(,ðh¹øb¶WcÍ7&8`>LFO_?|"¯ï‹)w4¬ìöÀŸeQ­=ª½qëø æ=ãk·ºQ/¹Êаʣ™rlcéÐ} æ{cMþ,IÀerH;d~É M±Ð ™(eªðsŽœÌ‚g-Þâ¤&‡í§ûÉÎðÌà}qQužséÞ}¾®qQNÙŸ;[¸õ/v¶rNõÇMÅÝÓøÐœXååL5äÊIÒ÷ýÊlŸû^'ÚdÁ !T/9z“¯p°Âkû$ò;IÙúWh¯mÐqå! aÔ¥@·*Š7ŒæÌF[ó!ï—+X»wÖ€s>Ñûà4±(`8H›Up-¯kÕ;)úðÞÍŽ±f;¤4ool¨._^’æçúg¨ehÒð QµNàáèJz5Nò âI² * >ýá‹¡uÁ/\€è<ÒeùÑ|ÔvWI ½K±‰™§)º´Mçãßdwñ¬ê_êÒ3¥gqŸ/zÕÝHhô4|Ø«Nã5TÖùUOVê,û ù=ç |ísY€9Jø2I‡ØMc·°xá?Ûá'˜ ·‡îô~å‰WÝ×d8U¬§(¢oÀ®rÒõ·iï ÙÖs‡xX¸½÷’Ño‰]UÅ4ÛRÖIJ/wÐ6·Ñ68³ÖUŸú…DéÚåÊY€b”ؽÊH/q Þ÷ŠÜ'ñi¯½’ïx—ç€u–J4¹í"jr§ Ë1>ÒQ~"òaß¡µ½ùÞé;4ÂÌíü%ŸÕ:O=²U åN­žÞhk±²IeCf­©Õ`¿î® ì¼ý#‰wð_7ÿKþF]·’5ª>¥Õ¢Rã(?ßÅH6WDÐw†{_òÝGÈ,ú×Ü%3:=gÁ$Åýü ³Z²#?Ú<ÖÚ¬TTT[í”V9n€zº¬¸è¬Ì‚ø^ÆDâCº+¡Gº+^d[,¹¥Ö/¾KŒýó5Êîå>;öAÉû˜Ð R¢XµbõyúN8nmÞº}"}™ÈÇ¾ÕØyc×c½P¡gÚ}4]ª«³±’ß'BÙ0ã~e†äQ³ÉRÙàÇsËW3ËjýA.ÜàG\r!m®Í_È*@¿SÈi8ÃäLFÈi©~\=S/}ÕÎyB`';½žÎÕ¯ƒµÑ:šÀßÇrÿ«eF»Ò!«A›É±Ü_l2œ½Z!™’,ÞÄ@_V-ÉZ4té9o™ægö5(Ó&”jZÿ·$.Õÿ,ù·ä>¼¬¶)$)<†Éygõ}pßM{fûº«“t©²ª“†µž–º+>™ý$sìm¥ín¨tÜK;¸É־ ùðK‘8¹ëÅê9Tçm®jL?ŸâuʲL$G f²ÕÆ4•ëS¶Ô¨ýBþæŠÅu"£d#·ˆÖÉ:¥±ïŸçéÐñ¦aúf4T优Õ#¨^IýÔ[uµ'å½ö6½Ù¨¿BÚH¬(YaAö¦‹™¶Æäiæ|Û yãrž ÚÓKBŒÊí±WŸ ’W›XàSý…Àžtll{-&{øyPÞ¶t@l¢{˜êVoÞ-ÿvžòÓx_‹që'$¾1óqãÀnjûE‘Ûæ­Ò•ÙE™Y]ÄvO\xÂ`Ñ¢ÏüŒAªSÁì<¥ :›©üíGnr€šøü¦Gð«ò•ö¾Êße£ò_’Žýb€fЪïIöÆaÅ÷qí}°^Y¯hºKñeß¿vß¿ÌìèkniÑÏ Eh‰4zÀUbÃëˆù¥íA)é¡glYÃð3Oo³ùÈKëað&ôAôm_]ÁƒîtRD×IuÐËÊ/ øæð6Š‚rq?ùùÑšªQTïüIú©:dým\ùÝévZw¥È0Þdv_~¥1U÷ÊfHª5iËÍ…rÑÛ3®Q¢7Ø1!ƒÑêÄ ƒ8‡Hýýþ«õ3ÙšÝëWÉ·µ^¾Ö$úikRïïÞ£ê/ ìáp¹ƒòð6Äa³S÷÷ÂuÚÛÅ#õžl.ÐV'S «žnïã$‘æ6¤¶9¹ßçÑUù”—­M¿6;Ŧ€>ä¸b–©)ï{-`Çýl Yr§ûWåÐjóÌ «Õ‹-qÍk¯—MÎúÎêÿKG×–ôâ>@ Sʰâs“XÜLgAÑ•ÏHë®Ø=\žZ‡”n yﱓ J¤èîw]JUòËpPDçªV&c®2®~ÍÆð½*&ãÍ€q.lÏ*OFÜØ¦lyXS˜Åer¢½æóE¯²ËíF^—™GÛ&3¬øÚWPÚ9e@LËÃx·ÄsûTt¸â¸Ð9ɧ‚pìOÛýÓZ]ÔÏŒö6X3÷7]75ç/'\³yd\ïs¥a™ÕA&l‘=¾þ¦9üy1ÎÚXÐþÂP©pÿ:S ÇDT§œNæiTû¹èQ¯-FýBž›{ ÜÅ PA«ô}odc[ø~R§öû@'¶8Üמ£µú+ÇÍÄÜܤ&œÙ%›/Òá·å%5nxHaøál¥*½ñqG²Ïtf¤SkDo®]‘RŸ=­û©©v—9¤ânzz¨tÓ}AèÒþ£$QªÿºxG€(MˆûnÛ}\fîín©òçe ŒUÛ­ŸD_夹´)‘¦.*ÚÍžØÐæ}ôÅ+Ãî{˜qŽ©>_æ Ü}–Ùpthüäî¦â“9ê~¯çe7óv·]¸t èæçjóSnyü`Œ ãúgºíN’íû^z¶îåK:[)÷ã¹Õx#4§µ†2Üu¢;¬Çvv^ׄº\§K¢ù 1;¯ô`S)Nü`}{ú©}Þ‹~»pìºÕÐ{S™ó|;b[¨g×­9¨¤Ø½î›köpl„ǃÝèϺ66_u{¥júìS¬qŒ¨eÜV³z”¦É°ösý³èX'î¨Í·×S=ÛY~zÔv>ú¡vûz£ï¶øÂîË9b>Ë(Ýu‘Ò%¼sššD[¨-ê?ÄQ‹$k¬ó—û´“&îÓ_§QïoÏiæéÉÕ£˜þËiZ9mª÷ ònø„½~~!É¢0N¡õµJµÅ—¨6fB6³‡bA2غwŸÊ[¶etêk¬­nþZ±ÛBÕ}Ž"¹Í5üJ¿ú®k|Ô¾ö7]ãJ!4ÑÂGªyïŽWN+?YIWÐo¶ò¥à¢õÛ+ß÷ȸ\É ³’slo~! °ÁUPÈGP8¼? ¸{ÂõJu!dÙ©¡àÇ i—1PämPÌŽ'  .àOvwGÿ˜7¿¸/×s)°Ès­È“Ã:È—6ÝØ2ÍAŒÝùû¢×wÑͬ›a­˜ì¨¦§çŠºÛÿ<“%îÏõåÿF½~ ªûî@Ju€¨£:,û¶pPZ³4ƒ‚)É 0<˜ P¼>@Þû+Ú.¯§!êº\„¼ y§ÍØŠ6t»éçR»ð "+ÛêÉÓ[˜éðÍ•~w®wõ~Éõ$.ÕÝü—@Ôæz¬Ûè(­Ù£Ú+ÈÝÌïš)Èk–²h;ÓdÁîæ?–ù¨ÐñÞdjs61fyâߟٟS,D=ÌNéXIªÉ å€ñ±“¸ÏsÃh8‹•ÉŸèn$F§¡³Êû¦žÍèÙ\Ü£j… Âú ¯M>Ÿ{‘"‚Ê!Sóãw¾ëÓ5bèéëÕÆtÑ×í]&R΃WC´¦È~jV"8ÖýK’ÐÞÿ,ùPDG;È»=Dñò‰¢Šú` íC Û)M€5Ö½¸¤¡“È1U)\…Ý«]÷¬ û”ï>#P¾wXIÒ9/»G³na!NU”©SOÁ§w·~ÚÙôý¡œÎý´h.¸ÑÔÜ?¨ÆzðgÅúlŠôåk½XøëSÚXî>XI`wà˜ŒË/…‹BÀ¿T¼< R©ýÚ;Öš;w4w,g‚Á‘¸Ì—œG•á-¸˜ßk¤ÈyH«’M¿žÝ ZËúö×ÐÑ}Ô¦‡7¦tF«÷ö=°H¹„¨Ú ¢r h>@:BøÝ‚œ‚Äój¦55šzQÕMÒüžv¹ç%µtJ}ó¨9©í­=dtûsûX£¾½ž­ÜÄ=kýè„•¸Œ5ŠeóagúÆ«Oõ]Löp±Àj—á‚Ö° Cý—$³Îÿ,ù¯Õ{EhÍõR&>Ôæç•¸¥Ñ(ÀîÕ—v(‘þ ÃtÝÉTî=«ŠÍÉ)غ—[^ò§Éúdç2[k6Ñ“xsÙ™Ÿ+Œ~r¾¶)&£z‡šžÑá®hJìö¶oÑêröî(žcµþ, È¯ö©”!çWBàrúÄÿåL‘ P‚ÓÈxAö ¡Ú×° «º÷ ‡ˆ§HõéÕÎ2«XœQg4¶*Ããìè;’Ѿ>”µ”vz&Û5÷¹Oã¾5{‘v™o‹öé²êR~'FSš¼Ü–Û¶¹Ù¾‰ÆŸÅ-D´nåÄÁåp J“Û”¾ÃðÝèæ¾/Fä¼óU¹Ê Tôdeç×Rët3ö´)=ìž¡à›êIÂþhWÅ_yÊ.Ï´-!Ž,µ6=”•µÿÈajlâ^“\—89üøõÕ‘=Vÿ—$.ÕÝüzß“¬(8¬ø D½|Ž L-üð=~FAîÚüº³¦š}È9³ÍY½|.U« sà-ƒÂ;]½wذ»³žh'ª›Ç“ re½vÖ²2<í7{º¬õÎÝ_sE] šZ]:ÅšÄøŠ„8âÏß%CH¸¸'ù;pXëµI’¶1ùŠ/¾cçõ¹m]i!¡SSæŸ[Êg.XíXuÃ*ñéë}Í%w“ÖÙ>++Fm´‘¡¬rÚdC_:‹u¶SW…Fö ñ2ýíØL‹Â™¬.X!¤—óWH¤üg¨û=@qõߥB ”XV€ÖlïY¶_™öòîáϼûÏdd[àò==¹]á9«d}sȲ<±³§‹êÖÁŸ¤òºÕº› 2ëƒW¬Šù‡ ^7qù-´…+ì. ©\Šõ÷•˜ÛC Š™ÈùŸ>æç Чdë k>NÔË ´š@ÔeWdåcùSÿäV†ßÛž>Ü‹^ÆV³Êd æÐ,îÏó:®UF-B w£êæKšëþ°Ó•.³'–7?Çì,<›Í7fz3S/åã¬;Ù½¦²Wš~J ¥‡ÍºÜøÿC@ѹº‚ÓL¼O°® §ÕÛ…[`%ñÐ>ZoêÏ`·®fmz?WòÍ×1n¾º5t2»2ÕMóÉ´Lë9¯IB: —:¦MªØŸmçÖdºgö’`ôoº;—‰%}0!wÉ¡Bïƒ%în¡ç‘? (ÆOˆz  IežH2LNâ§ÕS_6Û¸iF~¨¡¸·Çdãbõ¼opùó{?ÙŸÒÛUy“³#*Fqm.C\¼Ry)jRm>ËíŒpÄúÃÉèÔœ'Jåï¹½Íß ¹0Æûd<™]Šã‹ñüÿŸ)ñ6`gšuþR* <ô„÷ÊN‹Á@nϯôoƸ ŸŸ…—iv³§Ç¡Pß¼4g>JŒôÒ›>6ÉI·Òº¸”d›«½1K­ž ¡ÀPí±íä“aŸ ±0—ùÍÐ÷Gçáú@¤Fut…Œqð„¶/þY`Oš6FU\Pjœ §•¢vhL¼ëÒï?eõž|ú¾ÂÎ@<5^òÞ8xÂu_z6Ü-9&B9ó(€ÕÄ©¥—Þ‡ËÍß§3:5jilrb\&òÍ‘k‡ÌpÓ=ñ•u¤>0‰c·ðÞ}°e‹åÝ/ ÉÞÏ‚ýçú{ã{(>%)¬"WäÃT¥Ï¹‹¯Þ½s™:}!ôîÔ¤øšª_樥Ivú¡0åÐ_ónôEý“,qçñ½”š[ãÜÄÎÜŠüóE•FM$¬ ¶C½Óg3ëA¯”g¿:gMŒgqÚ;ø,ÒOùíŸvO½Ÿ¼¬‡°õx}zA!pO¥Ô!l;š'²óƒ¬#íœúCW·ÊÍÞuå!Uûª¿èV÷á,«…ñäZë¦y·pÉø‰h2®öŽ…äN%É;ÈÚãÓ‚Åïù=sW Ÿ™Wû%v¢²WŒXäÏнzø!|ƒò¢]:,U¿nÙøzÎw³g©׬‡6›DÞë¥ ?Ý*Û±"°™)9ÕÎe§zY¿)û“[Ïy)Bã¡úÚ§i´]ì ‡q™Ã2w’yœmŽv gF7 „FîÍ¥Ï(ÓõýªL;Þ ÿø˜ßü—¬]@‰i@ËÊ<{O{¢¦Ÿçº×Ì}a†0Á'µÍ¹0Rzduµzðøn©„¨9;ZÕËä¾cüš²“SI†ZµõÄùÛC¦“<{GÚefiâMzu©õ(ùNͺqe»ën?-¯»ýV‰îVÀàz‹}×þ,{wî \Ð’0¸G§z1mŒiOÍb׉«ß|=§…º®Ö¡¿ž_ ±…ò<'¥t¡Ì-~#³ö!ígß\ñau vÑz智¿/QpÁÝì‚ýžë2™W2è†}§WuýÎaT;ÙCŠépÜ¡ógxp÷ž«ÅHµùÀV-™ì(ÆñBëûçñx߯F”UòO©¾rv¯¤¥-µ"ÌNn5‘±2ŠÇ·Ã0óç>²ˆÜì®,ìû?tØfò”–j”ºz®ÕêfFã~§ï›Ëö©•ÒÛ|níµù¼@´ñδ.Þû·$Ž®ÿ,ù‘ ×èê×*JÖf~^y¢·Ø¹Ó¡¼MÉÇPF-&·ª»^}Imn6Îh¤þ|ˆ£]·* ÚlÛ+Yù+á÷ Cº?q…•ÒÆ©nöº@;…ç¢Ö×vTkÊ]ÇäÃÊnÈÅr~"«tæ %l6ÝÂüYnl½4>ÕçÓñÁBŒäР]í³+Fa¹\?«‘/µÎ—¨÷ÓÛÄáÆr;;¥Íá´™½$nÙ›ÈÌËÆwôv›Û8ÙÝ|^s:ºÛxYJµJEÉ¥~n4ý`›Íe)ٮп¹ÑÖO§z<¥Þu­–32}#ëÍOû´’Ý(ÜJDâ…Hí6ÑüTg‹‚3¹×øXF[ü9NzÞ}öê³þf9¦c™QúÀ—ºLW:ˆ#ìÚxÀ[Ä›<“µoýÙ\s°¡ »éz|¢u—ê5}~ k\%×2^gS=®ó¿äÇ¥ú%§#-ÍëòQ’×1ÛËLykÎp³Ÿ4»?Ò© g+Ë9ba”î©D}IŽ mvgÐmÝ×–tT©ßô÷ãdXk’™á¬Ñ)0R]÷¶5}ƵŒ3¾VóÁÔ¯œ6»Oy_ „­¥«„@WÛ–]•(U”ÌðP‘$#æ}ݪüø¡ ÷=¯ƒíà4À¶½yÙ0X¸<=ÓtÚtèÜkÛËJØšÃάóÛ$ÓÛ\£“Ÿê?Ákú”"j™g»^Ô¨N…'›,a«OàŸþ¢\Éô“ØÁ’s”’8¸\Kõ‚çüY¶:Æ%õ°y¿§޲ʌ¾jkÚÐöˆõWúÒFÝr˜´…*3'%—ìj®é§ÜPzÖ®N#3½Æ•àR縠Εӊ¸VyB'ï•ï»|X®¤óŸ’Ø/dñ5ŸEq­×0eÚi£ñ“ãPm)Œþ—ÀÇüûäó%È}Dþëk‚Â4LbzE‚b3=ÅLC…cÏ…œy`T@~çÑ ÏæÏ”× wïîAî8=ƒœ²{‚Üü‚Ü0lZ¹n¹ê¢rµÂäå¨ÅERÙGSÞ¿Vù«âo{ÌÆ§ÊÝ–ÿ›ÓB,P¸åÓ ÈXíÚªºE¶w…p Q•m*ˆzNP' j³±¹Ñ!ïây.äuß ·(f!/S‚°j r–&PÄMlúúþ-„CX½g“ìæç ò¦Q»º -ö JeAñ“î¤:]¤hš÷êƒ"~ËÀvðª€B7Q½òäW]ÈÉ.L»»CØsaÁäÌjÂŽ«?M@}0±U#—ï I«Ñ­K^Íüuï}s Õ±B8“˜ßåÝiÙóè"´ë} ›ÙZs’ýË-¨æêgE°'€Ô /PÔs°E”ŠUP0äeà¦*´ï¢NÌ„Ž¢ØºGßx4Ìãâ§ZyOšÝvtSBøÜ=6/Ïp÷>5e4gtœ­Ä!Lüi×v”ØZçÁÿ£üÅ(¦Œ+@ [H÷˜²-§6Í‘—ÄÓ„ê l·Šä¸ iŸ‹‹äl¢·}ïo´®Ñ}Ür#Âh½C‡ Òa§Š/•ë¯fïÆù1òYxßVYuF÷™|¯=•¥­ \á<èwGçB¾:üGùiiÑQ„ì@‘¾Ù™{p~M8€nH%‰A¿´§Çyîh\©cf‹y—ÙÜ$ªæ=)¬dõµ~®ŽAø]ƒN©ïøÚ°ùÔGÌxzSI¶Ê{Åo¹ù}sò´ÍÕmMñâEßí¦§“S™ì²gV}î²¶+¾¹ÅsúÐlN®¯©ÀÐ$¹îßâÓ‚t 爕l·úØ­õ’ùY?èZ¸à3¬#z½‚¦ºfcm¸…þüâð"ÿ| S.|Ü­qúQALâ¶^ìµÓŒ„K –`[ãø!¸C4Ó“’µ­uÿQ@¡t‡¨A?qø5î†x’{0 6^ìL<&QßÈýîò¯Hz¡MSUïX½wÜÑ\è;“4š¸»ŸåÑU¼»ñæ¶i·W®xí]êv±S-ϽpZñ{6SrýÄ?o=sù²}ÇÓ}ä>—þY@ôÞ›b}©ÃŠï=joJ;‰<À+H0=y¼kíLôz›ô7H·åœWxĸS굇X6;7ÙLÓöÇXö/JLÎfô]žÎ{c]mg•\ýd.°»û㇞—2F°Ó[‡.!2ûÚ»bUmno™Vu;½·jÿ( À…+P÷€„j’¬ûZ8a“óîvñ¼²¼‡ uOÇö‚F‚2Ÿç“Õ ÷Vn›IÅ*_D³y²KÇ®5›tXsYÉŽŽÃyj´–é Úª¦ïLÕÒÓÅ(Ø÷©´+ÂÑ`; uu™ÿT•UýB(`ŸD¦ü\ÿ—€‚ð]ÿíšj^=€-ðY˜œÑ´ÚEÖ>¿Räúæñ²ë:Ä ïmúû±{÷wöqˆuû¥úÒÚÚŸºÊjó8‰û5=•.ËÝdrŸ}7šb6¶ß¼’µzj16¶^ÐÅÍܨW#³ ¨½ÿ ©ãñÿþ$™¡¤D*!nAa;yRó\ß‹ìà±¾®ú·*–ïŸi«9ðå&2Þ*䬳‡·»íx?»ÍГÓÑ W‹©K¡Áƒà59#LOÓê¥R쾑S·nm”W:2,¼4<¦„›ç—¯4<}2Ò6g¤Í3óýÉôd$k»¤ï@öÞ ¤Çé­V¯H©Ð!ÿeÚ×GïB7Ô5q:ȳäÍ{{sµ}móëÄó¦¤tô-wt?ûR=˜œ#硆næ­´ï³ìh *ˆÌÚ¹Š„ãgB,B#ŒùŠÆ_C?½£K¨4–aLO?Âiâ~ÄBpùþ €Å³Dª¿Ùƒâ ˆAéŽÔž³yHÞKEP¹P¬X>rcrkáÊpÍŒumYô%'Íë$ÂÊ^rúÖÄø¥?¹Üžgõ1§oc0ÜD#Æé}¤æD¹ë„ÊeRçë¾I‰óaÄ=§üš{Îzß¡ ‹_¾>Ò?|}0ÿƒä5ÿ’ÊO,ìqE÷ @¹V¬Fý£R nÊ9Á²ìÕ=^÷À«Ú_íéæh>ñê¦3ïVg"ÖúXï´f´;Œ?è<ÓP{Ùtx mùåõ’‚ [KºÊަXz1ØŒTY°¹³ó°÷å:õà:8ÿ €ÛQb†hù(ꟸ¶ÿCaøHƒ÷çÏèö:>ýìÖìÊëÁíE-ËdVœ¾æ_ÍÚä–Qª–šIµ=¥»›ìFHírŠ(u4ò#ys3ŒÙž×*à^•d†k™g0.7KðIÉ2Cµž@›0¯ÚçO$ÃK¤¾é (-ä̳+”2gúþ>|ç}Ù…ÿå-ú’Æ1‹–³“x#ãxÛ¤þöXeQD–#”l­¥RÑÝ lù8tº§ûU¥×À+v² ¿¯’i®AôÆ;ëUôœ“àõ*}"Û/øµo¿°Ljå¤âô òÆ` Š£ùíEv½è<ïKî¡EÜ}%vº\ \¡sË.êZÕùr]ÊôCŽŸìp¬|¦Kc4ÜS©Ü­.„fÇõ†T¥¼g]ùz K)ÍRMLÒî·§f;yzÓîƒv]«@Ø]«X‹º-GC»¡×ÏÑõ'û7@¡¶YƒRþ^l ·‚åØ;ýÀ8ÞWýù’+ÕÞù [ìO$ Ÿß*÷ՎȨ¥îôâMõúÙ‘²’ÕZ4­›7]–öw˯¶³º~˜”ÕÅúØígÙT½µÓÿÒvçb¨Á¢ìfÆÈÇѦ_å›úÁ·®³ÿj~F0*SíF·¹Ô¯9í =ÚÞe„µ¿±Òæ°QõO¤S§IXËSï‘öÕâTò²p4\ž¡µ8{I[Ía7=Ï**µ›Nhë¯Ú_– #Éb˜»ÒülÝr,³ ü¥`0´4ëÝÝÇš¶ùý±;“÷!Õ¯¹i®zgmÜ íí4ÛjóÃ‘ÐÆëÐŒôÃàIún % WºÞ:iÆŸ¸Xí<ç%‘óè­Ñ[ž¨boÖA‘¡dñ)5 &mvW¼{#+_2VAlÉÙúpñmV0ƒ£,åaïVÇ´s‚Ìîü Ô*|í:Þëumï>¯W;/×P²¤’Õ–ò±z­ê(ÄMv6Ämĉ¦{ÒÄ­ü¬þ‰æ“=/¾²åqﵦqƒ&-á›ïêÄT´?öÇû{1”îyç+P&† áÞ¬28å‹DÿN(úÍqé^wYhˆÔºRR;[ºä´ýº"O<´o]e(hÕOˆh~zX3òÝf3 ±6Þ/NoÌ6Ïm£Ûgà?±qàvz“Å*¯ µé{õ¨ZùœXk’P¶‡ÊrTé{Ñ>r>×OöPÐ2Ì$SÄzNí\î~¥Ay"G¥·µöÛr#/ ™µ&ÔcB„K0k>½×:½d5½e¤AóQ}¥Ùzî&kž¾o×8åkÈÓ™&8»b%ˆ­òŒ”E w íµµócœê–äúIžóß©;ã´¼üɇ¾úÛ>ñâÏ4Cî”'Þü*ÚÅpµ‚iKo(­\ov¨Õ˜ o:Í’eÓ«F5$ü˜U,»•ÃŒ:Vä®UŠßS¶|v å²2(¤ãæçùf3Â-¼rEµW·‹Œ|=@Ä($¹¡×‹¤ÁyTû&±“i:ÛQ(MÚua‘ 1Z´ê€òˆV¶¼K„Á§ŸJãk)ù÷š§úiÜÂÿVñç ªÈ]¡|^œë¥`}î”ÈwX ÷„V4EÞ)¶ ËMáyZîþ„µe}X{†¹sÐ/˜Y¡ýz~9ÁIfR“I:ž Êã©Vû DíV`kaÒý~#Þæõ¯ÿäkž²ª;}"WñHQ+r[ÖË M[¥ÀíLK ¸³*š|'Qr`ÒÿM¡SÂü\|ðïÝEq†Ø—ñÜ+C&@©?`ñ!8ûRìËS€PÏ-@Þë/@+•@b–ÈܶBû»Ÿ°ÝãØ® n÷kŠÇ]k@»HÐs¤“.€DõàòÉÔ %Ø4Ä ýŒ˜ÀÑ$ïôwÞo)O•½ÇPøAê°ÿ·ð/¬¿š†{©3|вŸHeÛM€¶ó‰·v¢7Ú¤ ':£6šˆ7±³€_H’WßÊi< @ûÞ:­Ü"µ\‚# ³Ä$垣Óx^Îúˆ2#9œ^ ŸøN)¯&µéý¤ö"×ÊþŸ:ºæ €Ú[1Ñ{w@R‹€¤W< MðIK¤ÚÛ>€ÙHpÓŒ6g F÷œ($:ïT¢Ý¿$: 6–èt7ê½W¹ÉkÔ¯N¢¦°PBj†I·uqÆÿ /3bÒð-í?1T’õÿª°l¬˜Ôƒ§í”`ðþùßèžè]Iý^{ÉoÁNÓ0×[$¢Õm‚ýÀµÌ ÀÇCÉm¾EåØo@z^¢—é»ý$¤¶åñ vÆÂU*丑ºþߟ$*! ÷Ÿ*ê€õX`‹7°%¥¬?\ô<<”Ó@Ñm ‹k ½Ï ÅòÀOÊŠ·Ê`cûAšsûö{âù-Fúã]°¯ÙWyŸ5»FEÍ9É=ÈcO¾´‚ðU^ºTàwŒ^hïOøž—2œèIm"óħö>ÂÝÒ´Z“N k»».ÀÒ˜3úLÌ T¹bA¿¶ÞÛgÞÅùR|¶ú `Û~j³å*º‡Ë]dÈþåm®Ï‡ÍWàp&kĽ_Óz7–0RËæê/ùd¬îÐÕÝÞÞCš?‘ £R"u3O¤ºíER‘ØàÜ;ðÚOp™\ËxÇ¡ Ï›÷»ÜÔR;íU ºÕgÃ*v¢õdŽˆaìÔ°»÷¬û*»ZÜûöa{[ÇÏë éU@À¯ç•kQ𨳶•Çö4Ãú¹ñ ·ÃµQ(©õ?H.ÿ[H¾!ÿîÅòÒà(uø«YyæÂ€ü ¤ƒ|™Þ¼ÏÒëòª÷ÈîÆ™5uð0ólUîÐmß8÷Õm?¼VîøZ|¹iù¥r·fçIq±9™¨{9:E8wè²ê3ÙµÛ po£ ¥ö:Œ¾„ëìæõ?Z+Ñ)ÇÆÒ+yY-ÿ‡Î³ QÌ÷Ek¸Oè»Ç\»ŸÃÜn<ûÊ×Â/—o­rÖ¹;qJͳcgÞíh«Îû«mq¼÷Vˆ¹G¡öz·Û,ƒ­,çÐM²>Ô½FO?¿ëv&“ÆÒ-—ª‹MíRüQ¹dtq3q§ïëÄ«:>@>Ü”ÓOó±ñ8ãϨfʼnrïCHÛ²^.Áè'4tjs£øðYãï~½ü~¨&«•ØoÛ£Rên.4`7U;#{9j­ÍGËs_d¯€PÊ/]²T_ ¾[žçŸbaVFkøoHöô™ôQy”4˜Ùs3ØÎ.«o÷óŒÎ‹ÚçOüŒ‘‰ÔØN￞@A›Äi µò|%¦f¸éL;ÊèŸç_ä]źë^´ÉMÝEÜX-7Sk»È;ðqvÉ,ƒé„ï>â+î¹ùmOÓ(3×°šRžöu^{):Þð“C¶û™ÇÄG;W*@ÈûOt*¯,Æ&Ñyõ(žÌr´Lý.êÃ4úÚ4—Íã€Vºû’£ò“7÷Û[™+8óEAjº³ZÞÞ:V?ØgX™‚ü4¼yõ£ïF029ðÙŠvfàŽVÙ $u‚gÖj=œGjýÄJ¸:¤‹´b2ÞëO4Œ©¬ŸH½ßŽ ˜X!qµÂ®±(ÜÊk¬xž Ûe߇Käö¶hÖ Õ–WÞXÖÒfaÏêÈ=ÍRul¸ëZŸb°7Mæh óÌmr,m^š²gÔ‰#åS7ÆÏèÄŽ;ž3î ÷¨q¯d¤0ÏÑŸHÆ<¢þìâ®ßi œ@qðü¼“ns#ôz¿náãútÀöãÚ«¹±NÙžëa™§KÊ,0z†c? ÛúÜ¿ ^p®.nÛI¹5=«7ðP¬NŒ;oU-*Åšì6º=™y$k-´Þ_åA®ô”™'úHÿ£‹*ÀŸØøÒ×¹ÏóµºåîRµ¹8øøàŸOîÕ ·¶þhËÎj¨Üü"¿¤iKÁ4›.ó¦ÉžwS]²KKíºZxjóNúã7û¹Žÿ%´yNÊó¢¸ß„±Pç±ÐèEq²EQØÜÅýüøs[Búü ÉÒD¨ _¬-@aÛ¹€R¶ò‰ù}«Ð›è´R®¡_|´²›ggXr×+©µ8±&3kR ÞóûÈô¾¸¦Ë"—®žZ =f*±¹ãÙ9»å2³“´I¡(•ÚaŒu0þ*™-¾vÉI >{^+«!èw¡lMÿÀvÝD§4XýlEÀ”zíÏcp/…W“$ÏG´)]v“i{tÃVü…¨Ïµ ÓufĵÖR2 ¹§¢ÝÆ ]m™gLKµ…ìMÖkI€¥ƒpf*¯Ýâ×Ð8gÒ.À=«×Ö½!×6–g‡TÈE_ê>$ê½ÛŸ8"i ï««¤ƒšÁ˪›áÅ^²Ë„Ö]¿4{î7/i¹ÞÛOgèÅÙÏU§ÏQž´sÕZߺìpRÛ¯d•œ@ê¸G‰†¼Q²S)ïÚ+A ëÛá Ïœ³ÞEì|~̱™,Z0¬20œä˜!||/å;Û}•o?H^óoá_$ÃÞž€Bmïâqw»ê>nŸr‚gûDz3Ý5KòÚKü”ë*ªßÙƒ]œ ¶¯›B3ÛL} Ú'E÷™ËHæ‹M-íi'úd 5 ­ ⱟìîÀfb/d6ÖüË ïW¹/Òt¯/öÚóQÐß÷>w†óá¿ðÓI…)؆Þû”ºQ§%ͨþA+Mvz+£{ŸÞkîb–{XÔÔÂÓùä9ÄBŸzYW᩾ª_zÌ-Vj QTPlćƒ­1l›]‡]Þ¾«Ë|Ï̃~Þ}{åï-MK ¯.Ó¥µq{FkìýJ_•BÔ++ÙðO$ëfÅcl.$Ò¼z“wŽ(y‹uYtyºg.4[OßÑöfmÕŸ+&ô«ØÄ5ÒׯîiGÊâ ß«ÏQ²T²"·À …e6}‹ÙEñ¼/O›žbݨâ®i¡êù–)ê³6åL¢3åˆä»K,jÏ‘ºþߟ€üg8 ”^ƒ=6SnpäÐ[”OìÊoIƒEÝ·ÇÓxoÏm.O ¥¸zjüÆëO½(K³!Ö±W›o££>×{¿¹Á¶e§¾'#Þû“~Y©Ìè{Ùt£ r¡ÞJÜùL¾³xT§·[ÛžN;Ù‚þîdNêçO¼µbÁ8YìîOÖ÷â·ö“½ßä:sÃ>ÐÓL#ZûîY3ª¾ãjÓBõ:Þ”ôX.±!,<`¦4¹ÁAÙ5è žúboBh mv´i·±kªK—“1â¶7òmé§¹mäV³ÛÈþv!w“üËþ‰k0ºÐ¾Ÿ½·7Ü%Wûêª97†púï|ÛµÐþ$2ò’úÙWgcß參D¦ùЂ?g†½Cc‡û[…9!*ÑW]ª×kò¾ûÎEcêƒFvÇ=V¸š½´±fáMŠëqž,°ŸnëT½ØdRέ‘a>[墛ý$¯ù·pdnQk{?ö —ë(Õ¹®½ÊN®6­tØÔf•¥xôCÉõÍ\ —ÔŽŸÓ×€ãpþ=k(ÔìK±×ÊX º«õ]‘ •Ûü|³ƒÜ)³-¢KÊѱu^¸ÏVµ˜E‰à,¶ˆÉ%ˆ}bÂ÷£f¸êÿÄîJ³ÍuÎQ*ó¿/8Ùe-ôÏ6TðUÆùÇQ–«¡® Ó~a:4®[VìjFVž=k|þvÁC‡»YX/w6‡A£½¿PT»Ppd¹?·jÜÐ"ô½î6£æñÒ$Lܘ¡½|ƒÚÓ.PÿœZÿ˜õC} ±áŸX/ÏBiQíZ˜Ó[b¨QqǰJ?cH>‚¼h3ƒß/f'\b¦9ÌõÐ^ö ªèÓ]öð“k¬ží[ù¶¥Ã!ǪÐÒîÍö©vóÉ‘ýF¬Sb£‰z}Õž®ê¹ÝíTã 諆D*^ÝÙ²*t±Šƒxùþ¿ôàò\œgêôš§œQ!ë•vÖ_¹_ÒÛ$·c—Â@)rŸxžUšÎÊ:å §ƒ_À’<Çm+p6'"\Lƒæs­Fx7ŒtžÏÕ™rûÉ ÖØrug²DiýŠL­Gåó2rÊ SÛ”«Ð((›ý§4á …?áý”5Æ$öQéÎ8–®xð~ áÅe3µ¡û¡A“ôœ¾´)uÛµÐ'+Ñ#ÂùRh:ƒñ¨1çY­¾’ £æ©E»†Üñy¾nEn·åó"w*W³xXj 8(šB -(<Ö ìNß]±1Ê•:SlÕj\µDü´ÍãѪßûN¹òvKÆêÃÎ[˜*IåçŠ8Á¿·‘3MËÅ<{sÀø¢Bú&àh>«WÿÄO¬“¥ú F<€³1€%ÚðrµpX'pÊ^=û$†, ÷WÚgñÛ7€º_@ùÄ‚ò<  ŒÝ¹‡/€\”Õ@îDNX?gØs^þ™@E\* ·É“ w¡»±§6¨ù Ô«Ô¶Èç9µ~€Æ½D§­':› ѹäŸó u÷~î@2`·=IôJ«Dïò’è½Æš (€„v@ô¸  Æ’ID_E° €²Ô,Áb \ã rO MðH~êP17lõÞ»{¾û:D?³@tkPdÔ°0â7$*‡ÉÜDª‘Wþ“…L}÷™Ù_€hÏ@èÊ Ë&:]{ˆõ¯‰Ø7PPÁ´ãë?m3·©D¹Ï&Êß2€Äš Þp‘`¾¸xÌ9·ú[X\È—|ºt_¥q²Ò&ÛáKMfç³lþ­ÅŸùpaŸH½·T€ ½)@®í#@Ëa H½ ]ŸÈdf$ï{>¾o¾i¤¿`DKþP¼¦å÷!€öð8eh¡®âMoˆÑ5ˆÒj~Q†_¥S¯ò¬="ÒÃîãaÕ¨p:¼¶oƒN¥qƒ’Öü :©ƒ"è%h¹„é5I?D×8Ö(»ü'K5ö©óOÒ3zå;@²ý,€×ãb¼­DŒ F÷ígfÜ[´Öòëx]j¯‘v¾ÊøÇ{^Žä%º]íÌÃ2gùpºÙÖïàãS÷^ßèÃÉ—¸”5.MT>«aµò’†×©wTü'[T}\€5y4O,ûêÀ@«µ],4Ë÷·g?¯Ó7Æ^•Ò³òÔ†Ï4ÖÝs72Š!÷ˆ¸@zØXNß}dÎrìþþáNïÛº#Á¶W®~#&/§²CœšçGÕÿ¬›y¿_Áðß #7iWªõsMZ:¤—NH.ÀDì°›ìŽuÒºý.·Ëç­>>Dá«ÿx<—•o+v™ò}ùÍ{~P·õboH’žD'öæ–W©{ÒJ»nΟQÜ`‡÷Þªº…aeÏòQa+Mûèæô)¿!iøc2Z¦LRif¬LØzGÅÀU¬`HÅÒr(½4áž:QÔí;ªó\‡™õê|Ûä¹G°»V?þ- ×âù]¼ŒÁ½~Ö¢-y2‚}´wˆË[õÐd—~ßï{vfgwüj™¨Ûðo’}¢îs"ç\§Á¤ÔÏóàÛ‹(4‘–©éÝÂŽ¥<,ć˔z5ªÙAÔ~¥°¯Ú¯ÐÓ  ï¢JêñôбÛÑyoŸ‡ùÁH=5å`?wg {®ÈÔw;Ž£vø~2ÜÊYo²QÐÊÞ›4¥çÚl›ûœOÐM– %„3 N2?¿ 5(ÑɬäŸÀäO0…kî÷ÿ•8¦^xÝ ²uËN19&8¬9ñ0ýÔnìÃ’¯ü‰ïö(Øwù“nKs.Þ(AΛlkø:ü6«ëV‹ê¸ÎTåWñ畦Z­2%Ẅjf¼àŒEnžç:ßé¥ñЧ—^æWD­r]©íü,¦÷ æ_ñH¶ð'éÀ•ÄcÁñ6o_ôF&=·v¤Ù;ï³oBÝùϽ7éŦ6›uTrîë£ÞVàÜ{­hÐü.™¨‚.6¢º@'Rw.’¡Ò–8 !$nŽ™·Ûì’ÝŽ ?8ü’×ü<“a¿K¤ÚÛDêg±Ųp‰2…Áözû´çGxFÏv×Þeç½Ëå› ÝúŸ…Zè4Œü²='s ÓË mÏ¿ú“q]äÔû0+)Öi¦Œ)AJÏŽ2ïúRÚ˜È^Ü«È]Ìû¬0*®j¨”tI­Xá8Zü €uŸÀOW¨£÷´Á`}±*œrê[éêé'擵5XÝ[÷>÷ËÒÏVâÙmCAδ2+ZŒÖ ¡ÓiMØíªa©Æ(ížÏ–“¾,³0®KX²¤Šå¼å¯ïÂרçg¨ïéòP¿wG >iäv¨‡”?¼}©=_ëýß ûœ˜Œ¥¬ êÍ Î stZÈ7ñÀc®´¯pÓ‰7šK).‹ò5xL­O9kg3]ÔØKót{uriB 5üŠä8¾EôhÅÚœŒXQ<`¡*Œ¹Í×›“õ¨LN\;ï¼ØÙ8“OðäÙ™2›³ïKÁçÈW²ú&Øý†Ÿü ’H•Êvô>.Íó ß³‡Í}ÈíOç¿%N…Ѻÿ:9K ôw3ãàÜìOô&W`½¬ÈõñÞWÆàÒ$FL´íHû|·/–¨pÈgg44E!=Ãu΂¥3ôaÐsÆë1Æ£WÆëñÓ÷ý ïgýAñÞÿ€WºÈß{Î5(oè£[köü‚‡1[ã±í¯¿_;=ï¹ ɘOFáÒ‰7ÌÙB&z¤Ÿ±oV#šUTéâ‹Òhp‡k’¸ÓZÂåP¼n,÷ÚË"»`;“ó@§ ÷®îúBغ÷óæéI¡Û;¶ÛvïXY¦¹ƒ}ÁŽü¾0¾îC2–Æò3jHã³Ã¿¾RÛûQ£<¯wVûÂ,ªÁs<ÖÍ© IÐÞ( z7ÍTì·B'çˆ}ÒËL$é•ÍeÃèóms3Åë³ý‚"0[º4îûdÞî¾ù }muº6u¡î½K·»wš0»÷ÆÌ£kôõ@×¾ÿ@¾°'¯ ÆÓ,ÙLù¼xÒd‰Ò„ë³¥ºÔŠ¡Ÿ]M©w.¶ŠÇo±UÊ"?H^óoá6³+¼&÷~?{ƒÝMlpæXA?÷Bg¼é~å(G!þmËU)ß ìz™0i¤Ñˆ7¢þõWš§ÈÝêNg˜*Ñ\¥7ÄŸ bº1.nC/&Þª]láUÁ‘é}~®r7ü{w>øÊEœiuÒÙÉó¦çq‚xòtÕçC%7òQ¯e‰ô(u£zf‡õ(¸Rܶ‹ÁìÖšÒ³éô¿QƒFÏq=w𫻉˜­Èd3ÑÔÅÐR#wÅŠ&w*qYÎǧY-OWì&Î4Æ$æYZCÞöÅ¿³1rXÝS)ÁØ>o‡A‚=€!‹&(~ÈñÛÈm?]µ,€lWNð0ät<y‡@*ŠˆbHû8<ÈùÁϑߜ‰» '³gcìäZ‡L‚/ råJ9ŸüÝò²rð[9dè$xø ‡¶Âæäª,^ߎhŒ4-8òæíü/Òèà ÿ‘ct"PåtÚËÎå­Ê6Áó W§ ©ÒÐð ûZ &>Lî0¾€ÜjýJd‡ÙÄ@ðÝÈ ~r“ç–9–Œ¦ ÇA§Ü3öÐEî½+$Úp{„¼êè«8ÁàßrÚ‰Lj³–è<é,€›¯€%Æù ©À2þ0# ­(]â¤ÎµŠ .¿n ÷=½AI+ùz‚%ruyœ@ŸÆß;1½ãÒçUŒ{iÂåS¡Ëè³~(0ïÈ#œÐoHþžHµ©n¢rÃx™øãÌ‚çŽ ¤/€C¯ `óI˜Lœmfgi¤ÿ‡Öü;€øÏ@tP£_J`±w\vcntâb´’¿…IÙzÉ–¸žßnMV‹øñ€|øÑÎðù‘ÐYö‘;=þæþ©ï™>TÛÎŽ‹Ç Xg 5\dÖ='ð2ៀä‹=?'¶ìE"Ú?ÄCÞßû•Þb+„_G5È¿Fسú¼HOâ©B¹t³øYÝÔ‡Ñm8žD ÿä†/å}¹ƒeáuÏ8HîÆ!tƒ&(àfîräñïoиœèìYt"âÒ|Ù @Ëu ä,ø ©²P„¨dÇöã]~¬¼%HV¦â=5ô{Œîý\5ÇqüˆPz"šßÙR5¤ÚùæÄtïÞ£ñžÍV° *þu$—‘VüœU)L£ƒ']1ÁÑÒ[oÿS¾E¿!éžd"u¿ï%Ùþœå¨+y}D7€eY '»ñ–EêÜÃÈì˜êÃÉrÓptÒ/ûÝ—néxÏ^ó÷‹£ï`Ë`Ù`ø*cWŸª•¯£I\FÏ!s¾V­ñÉÈ‚õá-ÜŽþgp{øYÞ}í‡Q´Û¶zѶ°¿ß~ÃϸiŠ€T_}€B²ÐcÅJ/Âݦßf ¶X"ïrb•Fϼùè€F÷îÂ7þÆÉS-jâô*ç¨õe|+øgÍ}_ODwmsÞ—UîÐÅViú¨¿”Îu?{Aú{¶f;<ço¶pºn*ÙõÝÓØñm}úk¯¾çß`]OtªP òJL$JS€ÝÒXo5ñä*,•¶Mô„4\*âmK[×ã‹ì]ªÑ‰?µ,b”xâ±áŸç¹ŸÛϽ=—u»]E¹îpAyn‹#ù»ouÜ ð}ÓÓŽáڸΧnÛôö«Ùë|]~‡«Kòšeß—O öÙ8üßÜDê«‘Té7%Žêz–^ÙêÇrÕ Ÿ-<ŠÂ•Áo¸».T(ÚÛ<ô¦^LJs»Û‹hºG°•ßGm£¦¶¼ôÕ:¼·ëVqxvnøXÅ‹qfEg—…媑 Oi ätqçx ޳Ãüqœ•òûôZw¿!iõcçgÜ´è>À„Šðö}ž^…zxMNåóƒ¾h—›?ÃË­Î|ŽóqòÙͼ°ó½Rc[vï^²kk ‹îT¼ª«E{i-Ýüx±„ÒfvÙÓ\0ùô„äìðr²³R-¨L••&87(rœ†ÖÜÙfXØ[¯þgkMs÷ÍowëÔ”™rÑpžƒ|qˆ^Ûëþ>”ÝUu'©q{·éÝçW°+«È¦îêŵ}À«ÏmI­²6?Xló¸0ß¿žÊìè{ƬôœÏ§Õ›¹q'åd[•ÕËz Ôêœ¸Ž¹èä&f»ffolA“O‡§E]÷7$óR†h8gÓ\4äsµÅû¢ 6žÉ¯‚Óx·:½—7×ß"ðq7J‘÷V_7þÂèŠAíòb‡ ¹dÒ}ÏÙ˜R˜iíÜàæÛ¤õ2-ŠßÏÍÅê²3ÜÍ-0 /úÕ‡ŒZÕ±2-Oöï`>gßõ¤ÀÇ®vƒÕoH:(J¬~æ~¶"ØÙ$©PjñÒØê¾åbûZ§[æ1WçûÂ÷´ß9ü¶¦H潂œev!ØElv^­ÊÓ F7ÂÉPVœwóóV3{è)¼!m3 ËIÁ©¥a;mtDêµyÊ«ZÎåÕÚ¥a%˜¬”{Ò'ƒâ¿ ¥j`üsðõÉù¥¸|’îvz“tG;Åêtäólmµ‹”Þd±~»Ój]ÏG QìÙE çQkåmǾU,:¯fnÖ¤ D†ø‚vŠÖšz –3å~œm>c[¨Cãv³ÀŒÛ½£1Šsè"Åüitð¿…P¦•HM&€Gwã}ñ Ó-†êÅÄ÷ÃcîYà÷¥d Ù÷ÊÂ]e&þ2±nóòºöž63kS€˜nc”7¸–î°ëù≘ÝU›*¡@ŒÆÏAÝÅݺ;ꮤ‹¼|2r»ìʹ ©$pg 6?˜þ†d,1‰Î¸.‚<‘M£Å=]ŒÕ€>ÑX²ìâ+»xe=_Î ÙV7ósÕºL íþ°g5˜n¼È\F'GãZÔTT«©‰ÒVZÒ(åïý0‘sçÃ\BnÏ´ ˆ;ƒEü…¢À¼G¢0: FÓ?ЃLÿDÑâÒØŸ\5¼IžæhÔ>x§mg_r¥Þ¦u)J.³3ÅáÒ;Sf“Þàè´WË›•+|_ßP¾“S7 k5ÅÎ+Q¶]Oµ/1êA^WfîæPBAó¢àòiµç/HñÊíPã•»!òJ˜µþRoþƒÔaÿoáÉ|oö>–ä¨ó1Ù ‘‹šÇÜzÜôó¶µÕyœZ/ôÝp…>˜É\ÍíΫï¬Õ”¿»öá19—[±V'ü¬b‹}tLŹôFey]rjÒæ#wDÑé „‘X•ù‚šC] =îáš7Î3EÎRêCîq>™ Þΰ™ûØ¿!öNR¥'{Œ4¸vêŠãt‡Ý„bmW}…5ï]ôZî`=a£-4ž>n¢m/º×µÉùõ£^¢›ÖÀ3OÅéXßÑ—Å!™]íò^*ÂÉ+üuö†Fù!p6þÐÙôZ >|']=Kü… –ù€|DIK°´Xj±6À´]ï}þr'Öåƒ×®Wv—VPÙXËIyÕµ¥Ô@»³»±êT3,˜Y¦ánýxÎí5dÎÊ´x{Œ3½a,sÚ7+6&*(D«È×oPƒ{Ž;û.¸ÁòåªÌú¾™1¬Y=÷·/7Ç ä®Ï •º’@2–ÿ_H]ÿ-ìýì‡L`5N3±ž÷ñoPÜ6>ra½D!|…—/¥¹¶™¶¦mEä¬õ6RŒÂ§;Õî“§ÌðÒaä‚ÅMÆ*µ§8bü3hhUóùŸ8´{©²™î‚@%éïîú¸Ÿ/nf=Y…޽Rm‘í•’Ví•òø¸WÊtÍžLó¿"™ì‘~PÆN¥C2Sb»ª*㥠iâØŠ'G¹ù*ÀÓN«Ú¹ã›6òLšÔϸ©ÄƒÉr´~¾¶’Ïbùû¹ó5{É3a—y€Û}‰šS¢_¨z½rQ•èZuawuì»MÂL’t›%…ê6¡Xî6á®Ùm¼ ã7¼Éïm´›Ø1¦‰n,©…¹°«ç9óu@AÖ&¯åc× '“Á*€Þ)#/l¤ÃS:ÜŽk!ØQ>ß‚¢+7'ƶ#Àg þ?zãÍ´NkK«Û%:*OÙ‹½ÙIfòmgæ­âÎl³êtºµ¯Øéâ]ó7¤ —éó–ßDI…^èvr¯Âë,½È-N!ú:¢[Ã|ö¥«ËÒ¢j\Sñ®;ÎAM3º õùp:Â<.ãoƒ 71K¼ú¥Ù÷KßZÇÔ÷ì>¨Kržn§3G¾“i£Í8Mê„ï6D…$é…m‘ôVšArŒdþ†KSaóûâ‹=ª}ƒ–R·ô7+¶6‰ašŽÕ—j·W‰Çë …Éþ»Ú(ÃðϬ;â¾ÊdYê³`|g¶é{Ò©W‹ëwºùÀã.ùFáÎÇx;YíÁ§:$ù­·|n¾nIXýÙòù~z<®%†k±Uïq‚ü_q`µ²±Šh5|·¾³°³ˆmFûDúåÎÞÕn#¸ÉSÅɲ„–¢‡óÓ°ÅA Š3,Ý#蟟'«7Y,Wt‹ï»º¡èA÷ÙaøN¶Í1­<) ;ÍÖÁŸ Z¥âA#w‰*µˆj×'ˆj¾)4w¨7'dÏü éQ’j­ ¹ëŒžkÎâm¯fï‡QÆøDe޻ȹqZ§ý•¸jȯÛì °zWû×á›êň§ÉÛI£>öÒ¡²óÙº[ڡͤ)~ ÐCNÚˆ«4šw#î7V_mD›­Û°yêѰªÙ°®Aº¥þ&oÆoX/æ‹ì¢’Û¼É>ŒQ½©3z—Hd ƒÐZëé"ÍnaìÈTÂá«_0ý\åî\±IŠijL‰Y¡ÏKRi³–¢Ik"µ#Ñ`–fkèeŽê U$ëô”Ö3Ôɪ1‡¦Ÿà©A£MêxÔ v^¬AZû Ë‚ÿˆxŒ=Œ#ÕÔ÷äðJþÅö¶,6\®{ƾîÑTút{} £`”¯¶÷K’£y»×ª*©qK4µ¢Ü´¾„Þx3íiý3¬¯ê½{߯­ éVƒ½å·Ê£A¾âKx«RxJ|ùäEvy<Êìõ-]Ã}»tu3ìo˜ÚQ9õoL!ñ‚Õ7=?Éø?*~Ívégþ<£ãñ¥ƒwð y. hK»Æ%Âø~ÍöåÙI¼ê Wgrg®Æ¡;±ºÓÏj«RŒ³²B^)pãÔ¿)†»Ü£h TxçÕ‚3úö ;ÎÇÁi‘ŸëÍsžn^¡ß`¡-ã¦YÁá<ÂåL"±Mn>µ\ÓöÑ›¶wÎM'+£bzY#avëQ³åÞ ¿õÜé×`W–^(ŸgÃr)XQµR¢ˆ¢9¤:Gªõòñ¹Éåé*%ãL³g`ž­.1$ÞÑÝ"ÿF…žš&È^šÈÁ+¥áî䩌~äÙÎ#Þ{þU©yÿ¨l'–R;n&Ds<5s.ïÖsÇ×®ºÓÜ}Ene…œK“>[hö^èäïiÛäéòö‰¯´uŒçB/ƒ!/3‡ ”ƒ#‡å¼ŒÈý3+\@ÃU¬(B‰5¡Fq»É…8È™jäZ5 þ kUÃÇ?é£?ÊÜìCƒÜ¼É'°tþ]÷Ù¬*Ò-ø·€ˆ9aBÅŒ( ‚$ˆ ¢"( ­ÿÿ…=sçTí:÷ËÃöÌX,ZB÷bÑxÈ ;È”xÀÁ½`³8°´X˜Õ· ¡àyá”0¸¸Ï¼ !NÖ0À“o ”€‰VzNK–²œÈðGägkF2å^²ù‰pø|G„ÁÀÇ¥› …–Ý/€•B>aZO8õ¼² Ö>žB¯Ó›¬F×Èæ¼{´Ä¬{Tºì’óòŠN÷´Ÿå/üÕ@æd·þÉNþS2ÍÈKœ%€Ìˆ@zú 9€‚ŒßI6IÛL@fyf@fœ‘“,ÍMWH'A{þl rA&›É$à¥!ùR6Æh±D¿I: ˆ£ÍÙÒ—À¨{ÀÉÃ{€õ[÷—ïgodL Y?‰“)u2·×dÈ™-¥ÓeBÙÌÞÈ-Í ËÍ@æ«6@çÈ|bd.5%ay]sãi$>cT>Åïsã¿I?,¼ ÛB=ºtF½¨,‹dðÙ?£µçÌן!ÿ±ŸøÕ¿ù1cßý}M»ûƒ‡pK¹ÿ"iM­‘D ·@â KYµ{Èú¦²Zè€ì ‹A¶Ã–@9ÿLÜŒÃyœ’³ïâÊ‘“ ¨2 íð|ݰŽ_ÁÃKFJ¾‰ÍÖ¬ôÚŠ›æ«ƒ?FÏÞÛøPm zH??fìêžß«»˜?¯÷‹­_~HVóçÃIƒžÒªÞF*EwAöƒÌ:—„tl $~(Æø´Ý—ÞË<ÛŽªlg6†•EЪ!ë×n‘“ž‘‘3žr·bù€+¦{š¯b—%ý;ϨÌo|W+c?Â]kLÐw:?¯Þ¬b8/*g9Ç;_äìμôNô_ÔA¶Õm‚¬§âi½ìÏ{£rÈs rÕ rYÁ OæÕ4$§ò»|Ûÿ\†„Ë-ÒK.ëÇ)Óù^Cs)¾z¼;×’s¯Öþm½h¼¯<ÁÎË%+N &ö'[J«†,C‡e+‹äÍs>g'ËÒôE Ú©TZª¿HvK8 UM_îÈ‚ÈU¤eúbFäá]ñò¹Ø{IöíëJñÐÛ5{º—–о3ûöàÆÑ…ÙµWN74¹‹R×wö‡75{x5OÖÕ+»¸½Î§R1sÎ3‹Æ©´¦Û y³±/h‡–~QŒ`uÞbe¯ü!­üïCÒ @s»@£úäô òMRŠíâéòá÷øüà Û;_×aé÷Íë~G:.Š¢\¬Û£àÖÔqFgR‘É“ýÜ1§r…Oï­™9¯˜®½3M,#;aæF`çQ/}Phm4*Jêá$u:õDE­ÝßY¾ŸÄ93Z ·J“Íòg%Ï&rOøþ5®錄4·NÎ×®"Ü/pîZs”‡ÎEº•?Uùºù¸]Û&ƒC;g†TVz¼x}`²¦½ES=|•«:5`°?g…†r)iÏF)ïZ™y7¶rMÉ ÒƒÌòd­a ·Wäžúä“(Ôl)G7ÁGOÑÆ­ù“­OD՞Ξ§ó»G·Òùf«-@F¤b90™ª nM é˜}u6—Æû³&QÊEb×JH²Ì¶Ì£ôcOÂÀ ·Ãï`Þ¦ôNb9~×ë1›m ¦\Êúi*]&?<ÝHvO¤ó“›ùxļYh´yêj}ùH†–‹ko£Ðölôݞˇ™vÄVÑ倗‡]k¡6Q„¯:_Ír{ª_¯(tjÊkÔëI᥅Êâ«kQb‡s6»ÞÊÙo÷.do Ž‚þª·d"Íùcö±ægîMaøgÒ¿H~xK~ø&ò\œVLrlø¼Ç´Ÿ£´gs{ñ‡Áe’­‘çÖÇ&ÉFlS¦žY¸õärþ¾eB¥jy°äã<*ÅIe½«Ø<³øvXÉO…I^ñÇQ~ËçÌ¡¹¡’Sç,'UŽnƒt5\%êÑ\Óëû±³JYþ Ò1 õ2ëƒü£@FU¸x"„E¸ë¶ßvÔs¹mQ‚9:z×ÎêЋdAKyM]L„“r[•ÓœŒñ{_ âÞ{÷vòðVëÛ¨phkþ”cš&›¾œsÕ&É®×;Me½NÚo-²-Š"˜ dQLÐz­R–ãçQ’Û½ r_v h|މuçÎ×G•kŸÉTìSEªÜÙ¸ov•ˆÔ »¿V­…-+ì³lHO [bmÞ¶ßíë)˜ùÝ›?…Sxc[Xž» µµËÅé=iÖ_=GL0.™î¥ ÒJ…´è¾[ˬ>J€¯>ûÉ|õ9óÔ,~r™Wä{"âî Âeo£âµß½ä/“ç¶`•üN:“ű]C[íÆÚ<ÌÓûê„ÛÉ­L¨Š½ëØÜêOÏfsÞå aëÅÝo°~tÏö‰íKLXÙ6é÷gÕ_}3,¹‚Áv³<¨_s‰f¸÷­0­„Ï4Ír Õ¹D»¿rm„Ê™Äó»ÖïM+“sàÁµl¹ž=¹(âªÑÔ§ë>¡–QŸ’}nÀ‹²'I;(®è¼rL .7N»åpì9x¬›]1`ÂçôKÇÇ&ºúj•Ú*#åºK”ÏM(òÚY/.µ­¾(óèsQÖÐF‚8^,?þ"YòEÏNs?ßЗÇ|Ü«ó ‹ Ülþ¸)?L‘\’rØ›Y·>ýf# «œ‹ ãsºùöt?£çlúìžeìŽÜÉŽÆ»/{Y §¸²Ù\ïªÄ5ªƊÉé+¤CÕÂcy´!e‰úwA7×yr]¥s¾@÷g;„_L£ù}7• ‹ÛT.ÎJ qQ£ôB.§)“_$ÇR³ùRâVù¶+ê=¿ŸÓ£¤Ì^±þÖMߊՕwÈ)Í=‡‰ûgf°Q’_5!–Ûä×;6éò«ô·*~òÐzÛ^’õðN•Ò“t‰Y<÷»CtZÕéiá“O~BN†£0‘Š=6NHngÏøFÑÉd8­ý•äX"š^ÁÆÓ‡£rm`•À9>¶ÄÛÐ#/Њæ8r‡ÙÈ·Ý)*¹`|> #½5†˜cö‰öIšöãÕjÕû®g|/³ìÈøôF˜]2ëu–Á,jßp9×®í_­Ön¦§Îv0ÅæsÆø-L&kMÁ^v›í3ü?GfiòKv®»Cå²³inÆ'f"¨å2DSe¼:ëÒУÍðÒ:bGŒ¡A?KúÃÂëM*ã>~\Ϧ]KÓG"„NÌÔv^X-žÑ_Í×ã•iv[õ&‹ìë÷2Bã“»Þ±~ãPl;h7Ô1<üCšRýïƒ~œ;"?YÁ¯¯¶µ÷”ë|ösˆãÕc+]²¾ë6 '5=è^2/¤[^«ÆovÚ\X'ZÏA¶ÚÖŒM+ˆ¥+a1#°Aü¸7ô! ™Ã¸T7™Ç Žz]GÁçX;k>R;õ ñ„ùàû†ZòÄÑvtåëSÉb‡ó—¹¬µ~æ¹¥<¦Q‰¼/?Yk®»ò‰S‡ Ç·¶7“¢Ö‹Ráf$…f½×1uñê6ŒÝkØ@Þ`^Ÿ/ŠlÍrê»Z©:6ª´"ݪÕÁ÷SY;ãr¥AßÒú´²O¹2Îå–å"å–Ш—[ËFãâ·ÀÜø[p¶Yõ— ßÕÿ ±òØòƒ¾í0];È.Ú<:Zâ¬c7ªãbšH¤.6ûÞ§)´^èÎKµò`X«2ª]yT¨~“wÓ²ðQ—%©|ä‹1ûR‹ƒOÓ)|mƨ”ÈÒ:X:?,µüŒè¿¨ï’Õü,…õ¼°à—W«ÿo”Õä´Ñÿhw¶[¦?‹fxÇ'Ø¨ÛØ6fUëT/àÒËÚ«%’â3ÀÀO4 •$¡ºbÒ¤ož¦¥q•I ãÕO £®|¡,dÚPdÊDd2Ûy<ímÓ·ÇÅY` o²¥Ëï|pÑ#[|ž£e/s‹J ö ™!Â, ñW»„Îüw\`ýA³,zŸWFôF•óÖun¢ß÷Û_€Ì ýóæŒËÒ=Ur¨¶ÈÓ°È­£DÚØé_É#Ù÷ùUß…GÔ‰ÊÎk²ÙÖöl ˆ°]N~ É®÷j+Íó3ŒoO\_¥7VüxìdüÁ©Ùô2ÛÙø®g+· ,¶÷å­"Ünµˆ¿Õ6GîúhÊ¿I~éQ> QIâ4Ü2ÈidùWZ-Ml@V4m_Òñ›¢6^T‰g ðèúz JÕgÔÉwž½uièïíü̇2ù•§›—Uñaª}푃''÷|H.ÕEÔzßWT£r}<º=g»ë’—Þ ÊÚ{!`l¢}Mo¬Xº$®þ@²Lªq*$QVk ëûmÔI€ö·|ò×C‹ªs̱žïùÎóÕp<ÃdÇ^u­M¹årZÔw¯¿ãûù.®|æI;¯ÞcãtÔP¾È™Œy陸ÍVsâÇ2Úì<µÑiÔ–G§û]+ÊeaÞú_ÈDÈlÑÿÙ²Þ¼Ð54h²én|ÄΈÝ+T޲¯çº‡âoÛ]Òšws·xtmYÉYã=µr—þƨڪc´l8«ö­ iLÎG]¥ÎyäȨþQ<¿PZ y¤Ç‡y¿¿Š~‹t\™êÑ'Gê² æzèÍ´lM甄Êç‹iµ rHgrãýâ]ÑÌ+¢ ÚGfoƽÄBzÇã¶!3ªƒƒÍÉÖÑÊÍšn_¯39·>'[³ÑãURJǪ§`&Wñƒ?†‡Ö^ RXý=±%]޳gíC¬ßLjjvSìç¯ÆdŸ7ªÅždÓ|ÚÏòIƒºI¨^£øou5KB}ÞÁ+¾OýÉò=rif4½vóûåR뼕#ÊiµõLþjbÀ?´ÓÛßçtˆ«+O© }‘MMÍ·õ m 5Jäžì9ÅVcUYŽHWN†4yÉõG k3#ѧCQpBÌÑð »øäÚ£* ×)þÜÊ=·£wuÞ=µj¾ã^©2æ¼åEמ<ÀøL)üò¸žçùÃK´UC†–GàjŽ6}}uÖ{Dû3eAÊeªæ”ò^­ÊÌKmKîq(aœ³…”fÕwaw|Úá{Úî‹«úvàÜá»»‚ÞÕûd­R ¦Z¹m³ûv¢N?èÆtÛ#GÓò5øvrö!x5Îå*Õ3ý#œvÕ7#0úpWÞjÈç¦î-vsTœ!q‘ïxÓ—¼"JÍ ‹¾ŸÛIBPÛÆ·wWøZÁX—ó4o²”ÊÏõpsÖŽåÍbœënŠ•b/OIígùÈeœzÒšD÷©u´‚[k2ß›ðn/z݀ΗU>b—lˈ‡ÊPÏk •lœ×ʵGìäõR%^¹ŸÄne}ÙÉs:lÕv?Œ: …øÜ´\ß,öXs ’ä*“ÓnÍž»×uÏæX¯E5Yo¨vYæÛ õngû^ }xXv¯çe:íUÊ?ÂË÷¶¬ó¡Ñ=ôzbMÏfIŸÂ›µEv¶-†õ”Ú/Ò‚Ët r#£è‘°9±¶}XnG^Ÿ_Œïž4²9:íkXÛ•‚ï>±—Nܤº¹Î‚6×`‚Ý蔓ZìŒ]‡õ-µxGûÅêyOŸÈ'Ù»uKްc8Ûš'd¿6íµóƒÉ^¢ÙÉ^^Ý'{¥’™Äo½–Rý §½*2º /º9vÏÕ¬•´æ½eë‡Ãσÿûë²>qp=‡Û©³†ùå¥Uæ8Õn²âfУ?ÇçhuhoÉåÜ#ª4…xòþµä¹wß³—½¾L#“ò'@e  $r¥ñ8¾âcDíӣ㨒öÓÆˆà1²WÆã'[M©ü"ô®Yôþ(¶;G!·£ÉWCS?–VئüXYÜó«óÖ<¯|þrê|¹ÍÌͱNVéﮜž¡WSÛ$(ô& FD–$GÞ×ó6²ÛͺZŸ|¤îyó­Ç8Ë´âÑüL‡6¤t†¥)L%D§aif~‡”Ü,'ô*#YÍžgÁÿèÞÙÙ½n&ŽL}zu­}=‹"¨7¥íìxg‚Ü8o½ÙˆÒ"Ú¥U®è•ÄöÉ8w4ž"r& fºoÐÂdtkÉã©Uý™”<”îÃå¾ÌCî›i 8åC0âh °¸%TH¨TRÊ¿ðòÁá}K³Ç©Áo†æ—.êŠ`NrG0µí‘¾§‡'_­¬÷oï,VöhŸ6­Ï*_ùæ¨jYª’ž5ëÌ»(BLî̦К§ÆÇr=²r qèÀ%ƒ`•Ïe°1²Aÿùngû‡õ$=˜õ$ã¨õ$q›>ŽÝ“PèI³\¹'õ Ò/îæ ´¨VÑ5ñ uÕÑv”Í;ŠÃúBåéçz»‡Ÿ-£mF³ŸÛr¹ ¢…k›²[”fÊ´˜ÖªO‡ß>ÉÊòpœhrx­·hÂm5¶¿VÒúA1o÷ÞÙ¼ í >\quFÞã®árר³AרD¹®AåÊÃ!FÛô"}j(ÎÝÐÃÛþ^,)9„ÌmžANX·zúÂVˆKT-ɧÍxó^§:SÌNf…Wy\8ÍQÙ–ÚIOÏa‹ê‡ÓƦyÿvóé.€”®×ê$Ô9EZµC*¥Q§0pvBÓ|µí+’mÛ‡f¹m‹•Ò/,‹o>q…¿k ¾Ê;²vÚeù…¾á¶²Ä|Å놺çéíÕyÄo¸8˜û©±¸]&óêí9¦°ÇwT‰¬<á |uð’è¤_¢Î“a«Øõ }‹Á‘]uÛ½ûFgñÞÚNg·+rPn±ßþ µ†¡Å¾b¿Ugˆ´sÛôÐE©ùˆÇ¿9úÜÝÕM­W¼g‹CóbòÌRÙý²º[éÑšìöXj2ÿZä¸t÷6£ê·¨¹ñøF´óD0À˸?¨Ó+=Ÿ7ðƒ8ìvOûî°[€†‹NéÝåÚÌ€R[ܘ¿4ý£6Û…R .r采ÁëÆ[ë>n¥Æ{±/þâ0ˆäÇþ¾°Ó‚K©¯ÎÂR$Œµ4§å•E2(?˜iÖæCî3œõc/Kõ¾AiÓÓ»C©yw<×|…Ý…ÃKœ/t*DµÞ®OJÝÖæÔ5_Øœnv¶ü“"'¯³ˆß ôy¶½vݨn™º ·úxãêHñ›«#зð ­(•îÒk[ÛBiuà:K¥sg·hén:e:ËácMMûÄæ”Þ#èRØ`Ün¬Ëó–ßXnZüÇÕ[­KãÚ;ó ‰#'Sæ×"6(À͆¶­öpÔŸ×G•¯£yO¯‘«Ê­jG;¨ºTzµLšdµ¼8Y•k*ÌKïxT|ÿ…d™ËÍ]NÜótú8ËK ¡€óSf™áã®’}h¡ç‰öšj&ç¿6¶jèÒ€odÀr_7-ÛªçZïGíVÓÎm­8dªNŽ)U+¼‚Uî-·_©›Y²Ì'=ûrÓ;J»vÎ/u32Z”çP»Øo˜L±)Nèïwìj™_ìRxÞlˆ¢Á ·nZœ´ð¹åvj¶ö롇8TÏXØ£NuãM|ÈvêÓ/hÕìÎÕJ¾­VÅ‘ZYÇä±ì/8§Üz)^)ØÙQ φpQ!¿ùÂçU®F“ž?œ˜iÅ®i:w†ú‡i8Ï\æÑK펣K°bÑå·Á/øÚ£s`ŒÑ|O5\a7˨·ÍÐëD«äÊèOÚî¶<À"Ñ®-:ÇFeíæz?ÄbyS Ï…]©W,(E¢òÕ ãÆó7…ç9†O'·è…\჆èjTødofͲ³U yXzi–B2ó¼M¥Ì–õ8ô[1, J–¶%îuæéhígù–øÈåÒ¶4Õ:Û›¨ð¬ÍmÛÆŽêjÍ×K/³Q+ÆÛܰ ³`’7ù™Gƒ;•+Äê]2“½;.ËNÔ4/€Š jí¯È$¿Îp mpÙD’a @Q» #7ÐúÊhWT˜œãï×ð¶B¾ñ÷Õ/$ì ÷^ü qB“LX° ûmÂS¿!f%~œ䃿ը˜C;a¥U&‚[Pìî›@‡ã ^½~HVóçCóðÒ„,œSI¨z» à­ÐKúŒ. àji wšA?©í¡@›~&Í W” UD!ƒ„Þ,6J³U<¾²éq#Œ´{kgõ={„§Èj¡÷¨(® àNlË/6Û¯¦û=w…ýèÙ¹lÆ~´ZŒ|¹BüÀ#1‰Ó¶“&ý~ 4¡û‡d5?Ë£T`ˆC¡íR:GB7!MK‹çÎ.ª`%ØÌKæ«“'žþ¾O¯Æˆ—!ãâÃ,t‚¶Ýs¶6p $–õÝ——6u»!8w«Í—Ê•³–Ó–ó;ÕJÖw†µ¬‘UîžÍbØ9O[çŒ&»Å/þ ±ÚúÄ-e+ Kñiµ´7ûÉCŸe*ðü÷òY"çñHònºV½ÜÌ×»Ý@]7¢ùuž#ëtšÇÒE¢º»ÇŽ½ç¼¡õMÆŸÖ¸ ±VÆ«çÙ ôOÅl9V ÍtìiÖ+Åæáq‡š‡ ûÂÍºÓøȼKI¨»ùd›~.­ð¬,8âoûªaíý…§Áƒ¼_,sõsEÁévåÒǬ´Ëa+êÕšäyÿ|­ßçœÄ@'«§äOE^¬WÖ2ï5­o²€±oþd¯ÊñZS Ó-r¶Ù˜pîW˜Àx}¹Ñí°Y]–·iµü-¦©ÂРðK©“þHÚµ·§XwQJ ¦*Ó^‘«íZéo$¿ùü²ÄJB–*©õwÖŸ{ ͹—”ÎA|í´&¨­ùúù,Øø©l1“‹ËÔA¸|7Þ7E]LCÓØíYƒ­íM›çþ„³ñ>¿Ygê%—åkUmÊ´ Æ’Û쬥†_D‚]ô?Ó”j÷µ-þ°}ïV…_€,Ä'­y2IC΋áÃ=¡OhxÞ쌿¯»âÛã¯ñ952¬«µÆ¡Cš]=ŽØ‰¦/;Kuƒ´ævnF¢r©Þ5¥L:'¹6V‰“U_ô}5Ûå²Ùkeûö>Ý­"Ì)á¾TaÔ_=ùƒíeùéò•ç§ÈóhÛËý"Ù7w?¯Cëy$º×ÌÃÂ.·{ýÓq®Ýšc_ ÷Ä9—úÕÀäÏØ•mI‡î½¦: ¼Þ¾¸'Je²^Igƒ•š•êNlƒ÷~'µÞÇm̼¯Âw<…‘óNWÛh&YñÃ6¤ÃŒ7¸el¹\YmAë5Ï­ÙR?û7@v±‹“Ö¬fžP wï÷ãìâô÷òÉ>T[æÙngÓµt¢CéNßÚ¡SÉîmØ(+Õæ¤)y§Ò@ܵ¯“\?,·*̬·¾Ü Hs ò3zpÚ,ȤŸwÑÛ/®‚Ìàuí³(³íÒc›F3O7a¶Ü.f:ùI©&Ë”Ì/’ÞˆãE½”´æàì\ww´“–q¶µ«vt-æ`ÄPù¢üïko[úW©Æó¼$TóõÝ{têlUÆKËGù#÷¥6ÖêÁrÎü¼ã*š©­ëÒþÌn<Ýe¶ù¦£š—£{|±¹­ýbEH#sE³áЏ3È ZOáô¯ß€llÅÁó™O«\z%9  «ÐxkÇGT!Žªúè~9©ië*5qü–Ú«Of§hJq;ªO1!{(à»ܵ"M×÷ÏŒb½°Ç1/¯"2ÝRÝ ûhñ²R½ôžôÒ˜ôá%rÚÕ¨ã"7¡’ƒC§æ-åIÍÛ(DÍGå¿ÐÚëãpÛ½ùžmO'-ýtköf;ÈìŒÁw/ªgma(7k|ûÉCŸ‹Á.–ßm† üF«›2¶Ç¸²ÀY_«™@Bæô{q_Ñ}ã.¬†ÊQYNtëL#Ï[X¾¥N2~r"• ie%“ô¹ýHÐ> ‡t‡N—àe!wçÍ8G‹<•ô㦷” }l5óNûÊ ÙËM²ÄÞÖñ¶ãåüÍŸÕ²)»faý/j¬ð©·œ¹§)Uz°0F«Ñd·XNK‘‰¸°×”I^—óY½ÉñœË¹…™¿là3UÜÍümxŸù»iœ°óÆKøM|žU3jð¸]´Í.½Sx.Ûfv¨¬‰W‹ü‹•½ÅQ#åxÜAGþ.ä¤F°©Ðöw½¹¬P¶Ó¯—éøê5Vúb×YšÝÉ€:c­éâR)­È[>+µQIŸc³†3Ô~º§MCXÌMqÜoOâÜq3‰ógŠ“…(Sñ4øM¸áúo·:Þ_íénr8>nÕLAÒæ¯¬§üRêvçÂn¸šèÂ\h9?yèÍû¹öN `;Q'C«­¨¸ŸåÚ27™´¨"V•ògDÖsþbÞ„¯›Ù÷÷S©é[“}÷ó7µÌXo*Øx WãQØ´Æzû$Äïñw‹¦ù´Ÿåž{ ø7!O\¬‚R5Ì­ÇìuC‰%µ4'x)hv»¡ýY §~v¿¹NƒóÚŸˆw¶«BZõ¾ßU¶f ”eLJ GiaäºýNKâç|ýJÌv¥9•Qe=Q!Qš@ÝÃiŒ`§Çh¶ýB£\uZžã5<{Ð)}ŽrõË;%ú…Úg€{çÓíy¸L'ÕÖæ—›¤píÜFdaR8™'fs ”‡ŠÉâ$y¥5¹ð\eƒ –Í5²¨ºÝ"ÙгõYг[ÓwKéO>5n:‹äjœÍN·£Üwj ©Žp'ù Òj»Ê·VÜõ딨¼î&Q Æ>Q¹²!A—¤ß<(îëÚfQ>7¡o0Ž«j)Ò%)DïÜ)³ ·ëm³Ì1ñ©¦ÒãJ!½³ð•!>¸ìT|Õ¸òš…¸âÁ/œ Ù§º^=Ã+g¨e:£IÒ¬’æ¡·¹A—åšWlFr§¿¤ØÜŒª›é×u¾s’þù˹ãæã£e}GÖõÒ ²L¬'86ðN£~ÿ¥·§½HÆm ‡¤Ñ©;ZÐE„L:ÃeçØÖúcÇØwŽÙâ­c¾gaÇt‰à6ú2,³;{µS̘òÓÞïwämùJøaØ>÷Q ná¤@ïFs| .§ßг›f¯´$~|ºY—Ñ’W½!#îÞ·a’áâŽ,ôE¯õÞÏAÿÜÛ#¶±e7{÷2·4Û6eûíÒ­œm]ÙÞº®-©u4ÖÛ„-ú2~¥?¤Uªéò´. ÏÆ¨u=íÙnÁÁl¬É kV«Óq?%Ÿ„Ú›fÂk{|¶‚ñèrË3£Jo"ëCêH4§ô}Ð!&¯~oÒ=‚ij¸~”»æKÇžÝ\ïwŠåÁ¼½š-7-–õæã¸Í ;Í4›õw»ÙÌG;ì©Ï.Øsµa[„ýÍá=ÏžµÂY8Éí¢o8]J𦉥yhªö&3‚ëã£J€×¯W¡;è&ÇK_>‰ëÞó÷=¸œð‰ß»Ço>èæÇ¥O§4/ mÚ®UZnï4ýú`ÜlQKÛ]Jã]‡†ìÑ Ñòé€=éeB\ýSÙ[uU>?êêúòLyýAŸ­4¹Ìag¨½ýÆÝ®wÌwª­©›½'g`çŒÆtÁ"SÇÑr¯Ú¹äfÝÎÒÒ§í[+NûÐm&l+íš)œ[›œro>©SÐl_¯_Lª=sîêýpЫÜ¢>F¯ÛšIUÏ5ôº«g¶T©ž×EºzžßŽUÒïÕÂ2ôRü?¤]õ:=:‰ª$éü•»Ëì¾ôæ——wžËTe6¶;}‚h×È6næ7Õ6»L.ðÕ†ÚÙµC$7 S“®ÜF¬O°³QÏB§v4ÚÏZ¾J~ª–û3S_µ4xb•+ÔUªŽ-»µ¬Qnlh¿äK…’?‚f%þ¶WK¼_J­~Áÿ…Ôoß‚ÍTÔµ”ïþ_V¶]NòOyB´ÅCš„ÄÍõ k×Q ë&ùÚ)Ÿ-Vjµk¥ü¨W;eΛ˘j¬JO lKÛr]+µÃ•] %Ó/J³ï§ØkŒ‹…Ø×Û…½^ž „Ùåu7ïäÇÊÊ#D?}Ì'w,õ¶¹™¨Ÿs³iøøÅ–,u®}¤¥•U6äîv¦'$é͉vøl¶Z_LÚð2ÌWmþš-c›)RŒÔj»ØO·TÚ‡. ñõ2oœe.Ù u—;¾^zn~¨Ø¨v(õØ´´ Ùëèd™Òm‘­†äqðáæBÁ°VÁšÉÉËw¶ö/¸çØHóÐôìánÉ ²“S\¤ˆ­Ðšà9¥ÐmµZÅZÖéRåÛh©ýÂàqB3ù)“ïäÎhw˜+lúSt ÙÛdHgÙêšÏÖ\YB6ƒ£žy^<+Ó©ü¼’îaH*’ bÑíÌžrZ {‡ˆ^NÐ’ÿÐ.&Ô„ÍŠ þYæ¦è´·"^yzŽÏ»ä  {X}º•«•ÚÕMëÓŠ½I-“;¶Åj_ð"Zþj,;>u‘ÇQëežö²—é$—R¸WLjhÆ 8™À± W"ÚU3w“8¡o_Kâ,&ÿ_÷¼M‚^þ)íu“­é ¿ˆ¿ñó ôùL_ñ÷|K Îaü-!Hü ˆjü9ìûñ‡ Éø3ÃùøÓÔ„ÀŽ?ý–Ÿ@Ç §t´–,ƒBü”j ýVÂ:ùæÀšÆZ%Œw ·S<<`Á{r&àhîùÐîŽË!õîüÿ¨'qN¿?Ӥ˟‰¿ â¯5ÎÅ_~߈¿ÃxËíeü !þÜ®zü¹Wú•pü$|Ðøã6Ê “F®›à ãÏ"cmSgãQs‘Μôžv7fDžÏp9Nš‚áŠù—ûÌ•_œþk{¿›I¢3Qï_¤Búq“fÕÏ%õ3m哸ë‹iÁeüÕ\1þ®ò‡4ƒ~O°¢øKg3±^mâ Y*¿ÍB«ñž^úí7ºš÷#òN£ÂZ¦ÂKÿŇe½¨µãêñ|.ÙØ%5çK=«âÅ*_ööC*­UO—å_(¬ù.c^Bíà6xtC<ÆêF¦8€îÚ@ò›ÙPâ±Þ?½gr÷ý¾Û“wx 98¬ô¸tvž¤Ëª”V=5^lw^›ƒ?x5gÙÙskUég‡ZË~yÝYûÑ<ø¸l[PZ•,á?€Lžó@fžN}B€tGiZ:indòn„÷<ÖxušÛ¦O`=ü1k c·pð·qd¯˜B N[§ö1šì¸OÙö@˜§¥VÖ·Í¿¬‘´çƒ'dÎSþT<;zðàxÉ­YóV†NÎËùƳÕùmùèa7úèâû~‘„¨$qÞO$ºÖ /%óSÚ ¹ùðn~³OyÑDÑ’(¯>@Æ?‰Ž KØ™7å’ðó=-¹Vô®~5}1Ʊ [‡L¡xÎ7oé1Ž«'ý;:xò‚4^Áp,èrP4@õ M--l š.\u|fÃý±(Ãû™óª(V­ÞWÛF¦aÜ’Öèò)ÕÏL$z‹i(òE<ùæ(íCÿ,HÅ÷âTŸ?Y¿@èM>ü[^ö^´®Â80lÍ<ÝÎ$Ã…G†îAÿ’KzÜ=¯®+-§«i¨°(X5ÑFazeëŠ}:òU; äjx˜J O D¡%r»€Å]÷,ê[¥¨YÂgrzÃSðà^æ'Ž–\nNø\ÜÌã×…³©œŸâqË"xü zrúËnèÀ;|›ÆíqèK—ý‘ám¤ŒrçbQçÍæ˜PŒž@ØÚ˜Ï=ög×{+«ñÏëBäšO$ì†×ĶZhïð]Üß*n8¾…'%ŒV!ÇOçqsҞƦù:Ür^ ÖW{‘]3˰úweÃrJãÈbƒõ#Åežú‡ûiJ5]&QÖ ±2ss/¬§9½íI°Ž£wrmzƒ côÀk«!ÇØSUÕ‘ïã¹/5µ*ØEµgf›\Ò Â÷½­ ™ç¢Å£÷^³Èw&ÜeôórÇõ­WáÖ5µ£°\@™'Î>˜öþü¥Ãa³Nã‡pµŠYA_Åkø¶Ú÷á{ÊíÉßõýowº×‡²js†?93mòJ.}i!KêB›0ÔzOÔ^^ë“øúÀ÷]¿vxm!ƒüqÐD6V'W䜜Wå*Ã{{]Ç>»Ù¨f»SWtèÝ+XÚj¿Šœå×­GË1Æ—™‘Þô¢ÌCfŸÀ9”yÕn)×_üóÛƒÅщyÉš/ñÍqýÚ¬Œ÷Òšê0ÕŸî©ïg)sÏN Xߨõ¯ÚE8@£?WÊi–cS*?>ë»%#¬'Î ló1©3§Õ¦{nu°R r[ë%2ï+ÔL›ŸVF}.ÇRnQLúR¤ƒIé4ËVBûòöҞͲš÷‹qÓ¼¨+_<—X”3ÛÙÙJ×$yª’UŸÝ£8ƒPàvƒ!·ûÁ‘Ïß“}Ž)›Þº¡."¶%ö!¦»)¡tWùÛXš‹SGé”>G&×Õ¢$ýuºö9Ìï|ë1_·´Ì¼ö»3O®óò8'|/)ö/‚v¯í¸•9t°'kmwt÷!gÄ…úR›ªó‰rýriæVüét·ÏXÁ¬ÕD¾°ú£éÖë±.\ëOZ!£÷J_áåÄ_"Ô©ÍUv}Ú\”(’ «Ó)9_Ÿ9~æCš>ký­û\VØF}-¨¨˜$K’((É€ f1ƒÞÿA÷þÞ¹kÕùó sÕ*†ÐÐÝ£›†»x'DÞ<&]`“ßÇãxg£¼s 7_¢¸Î€Çæ`V—‹¨±œÀZÆbQKeÚcܤ³jvÄýôìüî!›•ØC\ÌôëXZ ÆÕúV£ÖÏoËFÍ£“›Rlk© Õ¨¼T+u*b3Wlõ‡|“,º&ðw§£óØKœqÓŽ»eßö+aç˜Õb縡³ï1¼ÌÂùý—wøÝóÌyaõÁØþó`üT¦‡¤Ê¹K¾k³R@™ÒÔ†ÇúØ0`EÆQk¡à-T{rCC»Jj y‰z ÊõG@R®Ø£Á?¨Æ%èù;û£ŒDcç[hÌæëLÄð†ÿdмÎaRcøQ:gx¹µfüˆø—¸éá¶ç€ÓÕ)­YË™¨ž픉 ½9à°)½ˆïûШWzúm^W¡ekß•záãre"鷺EÆý¸>„[åþPîZâ *¬q4º@X¶=¦˜@ d¦xx8=©\[Ó[E¹Ñj=_¡Õ¨dxßÕ®é-¬¿¬z_YÿqÚ¡l¸'§I`W>Ö‚µYc¦!‘:ÆÐg•¡34¬¸£;ÑŠn,ª>ð½}O—i_Ж¢1Ç¢¾9®~ïЂ3zßx²±N8O ì’µ+ÌŠT[½¨+½Jv…ÓusfRúþ¼¤Z:“që\&ãöE$cHžP-ñ¶¦ZÔ1ø‡ƒ)ß‚PQÜoÿÆ'°³5/‰¬Æ,5g^vÙ‘ö‚;ºÛ’ëSD¼qYër­ ¤*;b§ŒyÂ=Wü”>í¸9æÇ¬O¹f*¦l¨å^Ua›tC 1ª- ü/së†Ä½xXX¯xÄ_¹ˆ¿òsžÀPnL`õeðÿÇöM÷櫳 Ž—ÀpkÏöex4viYµ‹y‘5,ëÙÖòؽ¬@öý›¶“ý7%ŽÐ²Ôï¾Á!Ÿ¸÷1÷™]–\ÞÙl˜°3<0mÝ{5C|ÓM…(P®‘VDw ×§Yü•è:NÑ[›ûÐcðqcˆ)‹1mÄÆ˜²óÍub½·éÿæVçþ³ÚÏûö™vò…‘35³æÕ˜ÁŒXµeUµJâh#Ö…'Á |*[, æWù6a®×Ûu+úˆŠßºeð1[Ô“Du8GŒc¢‚Ïö(Œ-B”Æ ]C.˜tÃ0¿íJ’ûéJ²Kw¥nÛìJ5sÙ•ò¦ÿk½æÏ–½&4™í'ö÷yÏ1>‹†Vh]dãzêªêtú· ^â½ðPä@lÛ`Ëâ‡`ä.ö´3¤3¦ÌgwNÞI*"^L7«ùÇÞóšoÌÏ¡%t•ÀM´L d·Š©Ò/s; ø@l,§ løS6tl‚·€[©ãíØXþ ž2›÷?Étr펓qúHâÀ³íž¼/ˆ0í2F¢}.Àß´um³ª;ŸõÈqþ¬³Òy„äd‚3‡¼­â ‘ü…Ü⣫œ+9ä£5øŒÑ]¸“Ýì:Öõ`¶XsÕv_þ£í&.ÜvcÙhg¿nÖÆ‘Õw]õßößXɬiSw6Km«²hèÆwEµ¼i±Ë!ǧÝ=R[y‚v /H&„ »ÆJn…A¥„PÐJh[]­2›!G-øŽ"­Óv›ó¥s³“´ƒ¾*¥ö„"Ú­ta3-úyÐ[ÀšY6—âåÖä*ÓF“½kZ³0ˆ&Í[6‚d5ÿÃÛÍÅx<&ÆvimšCDžªß|ni˜ÄÏ2'¸wÄ’‘F·<*/Òžo9œÊû¤ w°7G·_OjO•xئê¥Iëý¤ƒCJûVî=»5yfûi¬W@µ!ö¼¾¹l¿ÍÁºbã³Úþékƒ©X® FœXБSkÜâù?L®—Às ËØµœ1`¤®òß|ù”#­§tÈÉS­`åÐÈÁ—÷êÕZ ¿öF8½§J¥Ö·7¾YW)^¯c'®v,VµšöìZk4YTc8ÞVÍ\ëV…}³Pqš·vYzšW"óü¶œ® |9Vùr:œØå”Šfñ·ü¶?\ B§fÃî[ƒOs8øOÊÜÖ=f_:aäkqnb—`»|{·òhT†þµjö©DгÜK¡w9 år.ÞvJ¾ù!K<ƒß*Ÿm]£T¬½fÅõ“ÜÃÂîQ×íRQ<Ÿ¥Üʵ5¨V× X;XháÐï™`m²šƒ5cçÿaU‡+WOûHQ‡Ò'«ž­®ßþ ™Tj0õ*ŒR|«`rI½ùYeIvã2ƒoOŰ\‹R¤Á]U…@õ¾hu÷ŒŽÄŒ£Z±kåÍÞ~ž»¹mθG+ `¢`ßt7@æw:@Ô@6ð7@6‹ÝŒ‹DÃýÃp/U+;¹Aâ"« }†ÂÏCÝèFç)öŠÍ•g~jÆçô„^oæVâÏÛ3¸]޾™[°4ÓÂP>ÔòÖ`VÏÝÏv3‡Ã6 P ¡›1£3  šø ðõ ˆÆ!cù(’lg¤"@Q  $þ’‘Êt±Œ;÷ãûk¾[5¼‰ÿMìCP$PãÁ‰Æ*Vwž§I¥Yö6…êßåÅ?Šaø¸‚umçÍõì–sèÌF(Ð0 eè €®ŒZ $ûšP¿Ì-Ò2ƒŒÓ »È:cyh+eÄ8@c¶Ðxg•±¾4Ñ,dð•?’Ín3ˆ(ùTZaò¶oAò®ÇÙ'þ¬$éÉÌ%éúVOÒQ KRi$d\$•»ÓŒá*c³OR%wÍ@’$e c˜ý_f]Íxµ“”mãŸx…ž"¼|TvÿˆÚô7sû¨XRzß1Bz×òDF}ÿCò™©Y¨3! uD‡É(­’÷Þ%oG½%on—OÞÍR#y%"IÏ‹,θ8Ìà³8cýû5ñ뤗ö-£Ÿf¸ùŒ=”xÖ¥žKûµœäÐG"Ìs5ï+(XMï»è¹¹ƒÛùÇ…äjz@rEèÛëŠHir¹Wâ׿Ìm2ÚdHëäsfWYÐlïlqÎŽôù•|ªõbòÞ³­äíþ2èÉ/ƒ>Êpgɼ´_'9ù²qþþôù×ý¹.å’gYÎg]‰j­ø÷ÝoæöQðí»và÷Æh#ÜÚ.h]îÄ/­ŒÉ×äyžSýÇ™¸ÿ’Ûb÷?RG)ÀV)Ðd—Ù×Ù&„o–º…’O¬–¿ÆÛÂÉG)2 3†¤WNOÑ…œ‡2ÊÏîûÜNw{;½ºÇÛpÊ\¯—ó¼Z åsytðâ®fÕ Þ?Ãñt›§ÏŸ:?8ùoq k÷ÃA‰Oß"°×sîeßôñîÌóñnTÄϤ€f¡îY¨¾í§¹ÜgŸæòÔ=c‘OàZKØ8AžR8&uLb²“Eô¯×#ª]Ô¼]zòKwÙELzx^˜êîÌ"öù¸öí$àAz Ãoš«’Öê Žîõ‘ÐßÁ\8Þ<¡í*JÑÇ)¢'Á1Èñ1\¼õÃ?dm׿<4rX¥9ù¥¹ sÊpin~Í¿úñ¸t?U Ðõö^5.dKCbàÞ'Ï…3ÇJ7N>VNØàP¿"ÖÞ@±É.ž‹ü&×[‡!·[,/Ÿ7ÁøVkQ9ŸÈ“/Õ84°#vƺ\M«j«²´Ñsïo«í0œÉÿE—„iÎKVi¾LíÒƒ»)pT:´¶»í}\D6¯Ñ‡Ø÷"ÍqHŠr£â än‚Nwºî¿º‹uyÊG+ù£ƒ=k݃A!knD¨é·¯kq‰¼rã–µ æS¶üí{zïàþ‡¹°Yÿ‘¾b˜EY ÒüÊ=¤ùçé’mÿz»NéMÌìÉÕQyfÍ"»5ˆ7‰+¦sƒóaqZ¯¬!»ÔZ)ÇÚ•ï’FAS)ñþðPQ–×VÝXZì,Ub¾p÷Òzž4GÇ95Z<½R(yŒ«ã3>ʧâ¾3ŸB&œ(Ig=©Í Õ?¤ùvsæ'øê7µ·>ßÝcX_^Rf92>èFq´%Fá,*ˆãp-í88v¥—?ŠÉÜÒÞ·K‹g±Ý˜§@žÓ\•ð>¯6ë±"Í»=˜eTgNä,’·ù]zr¢v³îe½|Æz¿ßtÏÛ’â\Ÿìı'㕃’z`?Þ‚ÿiÞhúYˆVt»9ðôÜ—^úáxÅÕÝ-š‰YC®.…e0ƒc''ùÜ,&ËÉiîM§Ç¡ýÏleðÅi¤àÕi%è¶'Z ÇÆÇ^—9¾ïÆ8?p¿oërÀšÛOn½µ'Eðn¥’X¶è}™5—¸c›lrËšZ³Ý·5ZIÑâ²sŽ¯Ê¼³Ž¹qß: ;¢º¥ª:ùTVÅlÚ´cRYâEÒ™3ê·àfº.§É¾·ŒO¸ÿq/°]pmô›Aì¬õ–ýü¨]›duÊò&º`ïñÀä˜À­‚«?*—¡ã0ÚØ¹¡¬R„±{^ £AUgí¹~‚Þ?¤… ¼>_•é©zÏ}SCÛi|Ãz«C¹‡üM.¦§9ç…¹>ƒ²þöd‰Ëq‡ïFn—nž+ÞmªýH­¹r+˜¾A&è­#1u‡<¢†ÕY,Úíiè'¼òM?èí½\èð9°ªzG»ë¬¹„;Éðg–ºÓ/“?Ò‚ºÙ]rJ4Þ_!K‚Á¨¿:¬<Ê¿úïî"q]O¨7©©ÊÔ¤ñ9*~ksŸ©,BßúL[+oNfQ ¯#HF“¡â#ycŸ´!ýtzk kØf´ûµ§j8ªÙêÔð|•¢êWe¾ð …áTAaE[É7k“/¿Ód[÷çÎê†çõx2Þ&“ŽVhBà¹F-RzÏ P¾5U½Î ÎybcÕž]G¶UhS³TkÃm˜nŒÃòx4š¯ÝMï\½ïÜÁ]ŸæµqÛ‚ÔD±Z*¸¸²(múJ^~ eþÐ𤰥$ñ$Ⱥõ$ha2¶ã/îçÛЧZt6l窱Ž\é›åX>=jÎ5Äά2UÆñ€í8Ï%AÙ=Í•Q7Frîé ë³ÈÓcÌð·· jï¤ýöMÍ©² ‚’O¡ª,ôº])t)FÜÎxUTéõ·Zë|pÛ×ù)Ðo•4²ßj×õ Éùb÷ucäüq‚Äü0ßV$ìÏj`öcnáÅUÒ+SxgbÈpÉÅ:iÃîõo˜¹zܸQYý’÷dz3ÒM­?`P{®‘p¥Òée£°÷õQ^5ý»\­?RE[”Dõ´m÷Ð5 G+JÂèD9ü­3 yûÖxñö½gì4Þ~Tì/Ö—ïðêoûã2[óÝc;…•óLñË‘ŸûHŽœîÕZçûvО–5sÝ5áQ5rzưÈõud‰ ´U¶Tïq+ËØ_È«½µ–¢ßJÕŠòmÜŠ zõ Š-ñB­ ðÓÆy‡ î9ÿ˜Y 6]]lº¾ lJFl}Éþµ˜Zļ’zÛÙQ®Ž7I^N»+Þ¹ËwI£ÉP´òã,ðÂA£jZmÃAÜo §M»œ]fkC£¡-—}~*UCÊËæ¦o¼ £`^>7þŽ–3ênr¡»ì»¦rlO†Ì2þ|ßéÅp–ue8Û‚ÎA¤Œ‰É,o«9Cz4Û°—®\0Z^0„Á͔ӉwÍ eù«^nTÃOy££Í¡ÁƒÚ#µòi5¯Ì¿+rXhÒ6Ç›â`VsûCû3.¯|Èß/×=×ÎWŽjRv.ßÊl.: _‚™Þº'h½²¿È*l¡{¦7ýn+ãÕï•ךùeôÇwÂåw{Ô{Æ4*=òºŸÂòœ4~ªwÖ”“ý¦ YeÀU´÷`L1EõsdšJ`1˜,+Õs]El&µa¿sý8B÷ùðxü² ¸Y-ܱ‹Öâû ;›—/¦È{`O wMz ¤]ãa•ÌÔ Õ¤?ªÙKjT“ñ9j°À†ÔÀF~ìQñí¬÷Å«¾œnK²'!²0Y—²Y m|óЭæî3¯Á‡Êޝ9¥$'UiGäñ؃zýÑ+é öç1àÇσÅÍÞá”]<ÆK¶Ð²#¦„è§ž4д*ÉuØMêT Œpr$$âº$Âæßì geÂ,–°‰—N\'Õ!q5@ã-ýœZ«öm6X0§<«ó¤àNÚ iJÏ[Mw*“Êå§WYF©x<ëÅ~|›µ„;¸%ùô{#&ç•]nì! æG.S.©ó^5G¯hg÷”AW2vè ¿Œ*^Í.>ANœZæuÆæÁj󪥽}V#õî–"§Á߯íê¢Xþ£aëóR+V&ñ é;¹Œ¦Í÷‘º6ßk iÎ;S¡9‡Nƒ¦÷ÙhÌûêØžXn:² TFºÇ  YÛþTãßÍsQÊÉ÷Üî21þXÝvkûWŒèDùŸ=„G½a†«{¬s=äØÚ*KY°7l½þ¸•æ&~‹æ£}s>ïÍB)6‚½‡4J- _ãѸ.YÍS]R;ß)#uèi±uèxÒêÐj£þ1=]Çù,MÃÜåOŠ>¬²©Þð¾Ûß7Ù8”¨ëøðÆY1¾"Gä¾k?—xÔêQø¹¹ÌîMŽç›`ýú}¦°±:AH£?eèF™²ÄzôÙuyNjûF;¨i'ãTk ãOÕ¸!jÛY1«›$Í;1S¤?t hòan÷ùòo˦ám0âS?´ºÚ+¶gc3iT†óK)}e/‘6E+„…Cy·Î]Çr½ê dy æ*ïùˆMë£ ï¸ J$µU endstream endobj 80 0 obj<>stream rÄLyèÙ}‘›È ‚äÐòøP7€ª\KUe?µ–)sfoT)rVév»‡¨¶½Ú=Wß­ïŠ[îÄ%ÿ¼8‚[ŽÞg»ÉŸ7· 0޹@¤fÂqÿ_ŒB ú+Èç1Û!Xi6ÂjÊ·l€Îc€®ÅÉÿ›Õ ÿo òàqO~ b/ý‘¼ÇEò¶—³ä]ï»IºBœ$%Û“$y÷WI2÷NIÂÜ’$a{PÆ I®ÄdJÆÂÌxL“„oÌ&Ãúl»¾%Tè?_‹Šÿ~åµ°ðäO‡Ê#ì$ä4éû[îJR^Üt;ºé¶ÿÍec÷ÉûóÌâ¼FÓ,XÓMÞÌúen𗤓U”¤bᚤúI’«YI’mœ…ºƒ³P—ªœ±ÍBõóY¨~×O¨¤¹~-èæö•_ÖO¬ÅP¬ÝТøº«…zîvè•[s3ú>æsÕóʵsdœ‹MNƒ ÚÞoâÇ{³‰ŸåÓö’•zɧsœ$ï­aý7^v9ÏŽðs“¼Aúž¤§I>I§¿ô9ŒeØßNaBßêk‰mÍWaºOáºõºõÒó=*“dWßÉùvì^¯·ÖøñºŽÞ@îâä Pü$&¢ƒröºÍñi)PÁ‰k‰Ñqåááè÷šßÔÐoû#ùÌ ³ä3<:Y¼Î(‹ü6M>p}•¼oÄ>y;úý?t/)Ô_ zì<¢Ë T»GöÞ vâÍðâÁõ’»™W„¿¹—{ ð.NTùÞ:ãW®ÆYu8¿‹ðåÜ“ˆ×9W1Á§ÛÇ2 ÷÷Ú‰íŒ4ÛZt¾EŽð|s7*ÞpÛÀìGòIJ“äóJ³8O7;ûZŸýé¿ùú"û4['Ëbxx¨óçþzÝ÷Žq²¯g¶|INÅùpØÊ¿7_ìõ¦]ßè1¼½.ÄYKU ú:¨ÑL=#ºþqÃÅ0ï…,…‡ë`!žÖ¥Â<]…'¼¨‹©àë«ýh9Ú¬%lùÎâÖu…ýØ?²Ýü¶Yltà¾e¥9Äž¥¹ÞÖOsÕíêÑ(Of— 6Ÿ 4;ìðójg6fûÍÓÖ/Qº§µ«y•õJðšëR´DVru‰¯*û#hÍøÛ) ê10ð ¤`.c·>[š¼-náâ²pä:8Ÿ¸åy³DõrÕš=ã´‡5ó²˜7ÍÉ’æ¢`ú¬~Rçv±áer¿cÒÇ(&„bµ ¹Ù¹¡OìüuÙ÷6«j¸ŒƒÆnùôÛ§9°´ )¸D¶›ê­ïÛó—qBçÓö›öÞÊ‹÷æõj‰Ñ6gÜ»ïÍÀùj; ¥d²1vßcÆ{»Ô7žÄÈ=­Ð‘;ìׇn§\0þøo”évz»¶Ií`Eæ¨<rºe2޶±Ð丕r{ ü3uw—vá²\ŒË÷Í|–?}oÞ¢´¹zùÞ&™ñþ!?+òòTœ]ë“-ðèL"LJb“7%\uÏ•¡ãv´µï\›‹Óík6î·{Ö¬¨iu6tó3êþá7ÍÆÏÚ¬åĬ4•úæ·ÄÚ„£Epo†Åý ´°.¾DÕŽ0OÛ¸á-Ýñ,;Û‹©äBáD&»ñá–¿Œ[õäᎌÏÇ…¡èØj¥j?Ž­ï<›h¤•l¤ïT4[7úvb²dw7 æÛܨTWˆ¡dläa¥½×¾¨Æöâ+¤ùÖû ¦wÃNKf ˆ°?[+Ç!?V¯ßA¯Å„Yt¼¥9¦fåâLšì–öplˆúØ5YÁs’ìçœÞÙă8[^ ½[€‰¦&»Ç £U³W gF°G+ÎN2Ô°ô#Mºœƒx0û.r:0[0€ãŽ2€Sü_^Rn1‹—DYß݉Û ¶jæÖMÙ^‹ Òb‹Ø+T§ÕY¡;‚ã"[@±_B<´Þ½È±rüê›U7¹Ù2­nÞf½ÌðÚ1®Æîê¥F£îƒºalêƒørGH=ÇjŽ ÔçÛñÔÉ¢rVI6m(ïÆˆU¼S ýâw½}ï§è¶lÞ{šY×ú=ÔïΔÆüÓ¶A<>“ýÔÝËQk:8£áÖ§¤ñV>'+£õ 7NÕV_™Ñ¸æ–ú°öŽý} Ñû¦¹5ð­¾èûŒ‡JFÝ–2¯Š¤’Le™;ß4å´f¸Š$æo¤$о$ÖiñKÿë³Ù‡Å+?+õ‚³ÕFÉŽjxBM§5Ž~¸W´ñ]eÄN°b1çwÇ,:or¸í\xã€fšs{=\k®­=JÊDÃee©N}1T>Eå¨0ôà!ûËqN_‹ª$R箸Yy±2£þ~}Y÷£S1»rŒïôÑl{þþ‹§˜Öî~ÌK!´ˆißvßÝùâÕlLÕQšw.Ï«x^båÏÃÂ(\NÃ:4ì­ºË ®^Ю¨‰Wû>!©|œ¥0¯ÏT:ÉR.:ù­$žò±¸íÔR±f¥þà(u„s{Ö:ÖcÀ_QÅçmÏñv±ÜÍ0ù/Ü?üFK~Cßçǽ$ÂS×ëCùƤµ<æœñx[…&rIËÆÇ8vš>z6ÛÔ*â1.²*ŸûYÏ#PdAœ’¤Ú¶¸]fb½l¯ú:cï…s°¸ p).ü2· ÐàLrca¬rD¹¶`“Í+e“ëa“ÆeGÀýÿá\öÚæ†¹ûAܞЋ^eÝUk‡ºëˆúDz¢4’>÷‹a”§ßqO~„íé…5ÕãDá€!÷A•¤Ûw(­ö$<ì·¬–+Œè’¿µÐ šì…ßM€M›Ë*Kž8 ´Ì°n0eرû`؉ØÊ¸ÿ:‹W™ýÂüqÜ/ߣ¨˜‚³ zÎiÓîäTUR%Þf¿ ãjpÜÔU›DüGí $Ha¶%—DWÜ][Tÿx,pýv»$çu"ÕÛ€wO‹{†ÏGV5ëñ…# „p’]:2Ô[q“n¯_ú½R¨éHî^èH©5z¥ÍšÎ81_züv~£%Ëç£ÿÍÙxý—‹Ž­*]±sF)jöt§#idø9+~ãüûŸ´ )`¡& Ü柸`•n ïæ¢>÷âwGÎV#¶·\N˜åké3 µÛ÷ú‹ôIG¯ê÷árºJqj÷‰xJ[¢6Õà’#ÕÀÏ5J+d†Û£vÿØáÇ®ö0Yxi›š)Ôuñf2E$zé—>¿Õ¨â"PxÌÞËdç ˆûãøÓ?½#H¸æ£O—(—ä<𣸥À2´©0þÒ4ðeº=‘š,i57Ô~²ºQË%OÑj“l?M–¸L³òcQ‹-aÁcˆ¸˜8‘!~ÙŽúÍÂû¨i<ù¹/7èiSePûÓ¹•G5Ü|p¦³Ux‡^Jʶ‰ÍIå(\øÅ?ÆÈãÙm£s̲E™`ºÏôB®÷½<{КÐʧgQ¶ï‘g²·&;s#&¬‡÷Áī޻’Âqkg` *…X‚©e±Œ.ã|“ü#* BÅÇæ;ÞÝ=¾µoÿÆ ^ÉUȇÊ$¤v ‹þHßü3·Üri3¾q@/°¬ß®0Âëô¢ ‚Ñ»F»GׇHŸÒ·m•ŒëˆIÂ}dB  àã wÄÒ’™btoóM? ‹ Œ£¬àhh¡ (K`ƹ‹²pžDRñX7*ªü{À`V;½zNšÛ£í¦ÆëÜ]oáF¸KÝö”å`dͬ–ÚwJ|/:M’^•º”hmñnR'ì’(G‘óæg•“ñW4p’Ì Kté5v(˜ë?»}|Zî–RCä^_Bd¦¾@d´žCäú¢ƒÈ…+ñã›RÐñ#°@Bžóé¤?‰;/ÖfÏ£Ž `A¬ÍMª¿f[î]ÕæÌºóšôªÇW@æ÷-Õ©·ï¤e0Ù%çU¯;x’ßã8%œlÝ¿EËç.Êó/«»ŽÊ‹.”klZ‘¼ÁÉ-ÂMà…t†|¯ß %¯3$‹ŸÎ°=kw†å+Ù1ÞâåôZWf»œ!þæ™›2×jé}ùÞ¡•þx~ïgÃËó†OŽ›)Ù=ð3<‰”5N#óö¹¿ŒšE¬P⨠+H7ÜÈ®4˜óÈöì+HÞ`ݹO;çsnÝaìÒ¶+ký~Ó®[ãQoðsÜ"OÒ"ò£f œ‰~Øâ_~Ÿˆy°Ôi»©ÉN.«‡ÃrÚÒp^šUñÎOŸêÎΚ´7¾‡-áÄAKIÑïVüw•d·ã¯H£1Háãk[‚é§Ù¹ÅnÇ\vé‰bÛY­4uZ¤º÷›Þ)whö†ò§±¼î Îéq {ºõÕùp¯¯²öF}eX}%øoJõ»i½£æ¾œ†dA­fOwQKl±ÐG‹Ì“æì‰nÝœ îüewÃç§ËQ·q†^´’ühÓšÎ׿§•¤Íù¥6™¹Poæ™q·ä·ß›Mƒ>b£ØïëâFœÖ!e³­)Çò³V3Üjuð)ÓÕ¦í +gL=UÎM´R9%£¬û{ãLÄØAù. ÏÎ™ÖØžÑãväÝoŒ ×Ðé ñZ›{tnÖpg{˜µfVËi”èݸ¶kD‹šzº…Õ#\8U €x~W’ÊUbnY©˜g§Ÿ[tI"äÀÁÂrM¿üôݸL–ò`)¬ï²9%Oih¥^í–z…¸T¢O0\¢×,ñ‡³hš©ê®¨O:‹ž¼ ɶ0­á£ˆÍùÙ&°Ú i¹þ¦•N¶‹z>ݪqê›å—þú¦†Jsù>)15pYʰmÑ—Œ]ZäÉ\±È÷å6¸ÞLHp½$PT„ÐkTؼĤ  üþƳù Žóƒqé•ß?vÙߎ%,£NüøÞ:¥¨_Ôþ%«À`æŠQ§FÝê­^[/İsëuÂúF`çÕNc5.OŸe³ôü!XiúnþXÓ¼¾œ/ó-î´ÉÅÅÜ97:c¯<~×Rnð¦ >Hd2€…IÆì GÐÕе¯h(‡ËÅŒœ‘v My(k`VG‹WØÁ¹ ˜¶i³³¨àœëåöFû¾›¨5w†ûº,V»ñôÊ@KòË.hÍ©™3—Œ `C|œ¡Ìlê¯lý>ع÷°ÄÏx«Ýp£܀µŒÐð)ðY±ôIø›¥Š{òÀ7õ(c›øÖF2üÇ ·}ôÿ›2_€('Å&î3…2œ<Ós;ŵCpÝ@OJ\Ý›ƒ²…LóÃâe àÜÀð¥?ùífw™ø½D®ˆêäHüÂòš±­Sñ 4€„™yÆå=· G¤Z23!@jGFPÎ8×~ÈzþNí€aŸì{&˜þ¨Žœµ~¡ÅÊíGíÈR'ˆÄ¥¨¸FŸ«Âþâ¹®—ó¸gÈm ¢þ b-üoÖ·tÌöOÖ³}Ò '§Bã7ƒÔ €â! \ PîPO°Ð…hPt³¹ÊðoÝ‚òMðÇ/_š¤GÐHRa£&‰Ü’¤§h÷i’0½MÆîñËܲH1cÒÎx’I¡ýŒ‘žÌÀ…ýúˆ‹Ékm¯¼Ï ~ˆžüñqxOü;ÐãÙÍÏ}‹²¥»ò\tnªÖ¿ >–}k..þõÌÛ_JµðÚ\;«SôÉ›å¬ä]¯êIœ”$I•lÿžõ uãdQ"ë ï’EWÎehõŒ#–P«[ïÅlbáÉŽÊ#l¿ÃD1~Z÷-rsïÊ=Ýkã’¤…õ­éµö×s¾\;¾ðºØÅIñÒJÝx\Õ¥ߟís¢ççYó3?Sç«÷ÉÛæFY°eõ—‡~ìÅÿÄ›¹Q’¶ÛÙQÝôVI¢8ÿÍ Ï íR`µþ,ê¹Î} _ÐÛÛ“·æôÄ^‡ŸSÿÚY¼Ô‹]¸ë—î:gű<Žñmu~NTì›ëï[á^{ßÕ‘ÞZU¹\¯P=~<‹˜ !ì<›CÔ¨5¹ÓâÐO…VW= f×8„wÜ>Tpf¶¯Ó”¿Ó—ƒý6n\Ò-<§r磧Ù,ÏM˜žÞƒÿà /ÚäÓ‘Éûƒd¡^Û_zƒÿ¦ÑUoöZ^dÿQ…_ë[r·§/žã‰¢<Ͻó9q û8Q9È4ÜØkÜﵻ㺎îÚPÜÆY©Ü"uBÜÜžº¾ÁHÛŽ&ó…‘Ìgz+ê¹^¾“öj]ï2Á†dä@~w¥ :¯‰þžÉÿÉgê ’Õà³OƯ|¦ËaòWÖs})›·!V3â—>6Ϲ=>–ÊbߘÇëíEˆv[$~^7Ø=~FSü„ï(W çr£æöÖÚèLúôj=3…LÔ@Ñvßj-¨5+K0’NËs®-¬3Íô¬?Çwºà%šÀÿ‡Yƒà~$Ÿ—£dÈýÀVjRèÚS"^òõʽ33Ze0Û+ò’6xœûް‡ç=]â;X…êk³‚N¹S RÕ»X4R_gñüò¼¢ÊËQ_i,®›¼°•)9<öBÖfÏ ²ë£íz´âDP'sÓàít¦%&f&ÒaÇN*úòû¼ço;ÞµœÞ,@ON'ÖîGoÊÄÞ„îœV¼×8†K°²éÍ’¼^5Šôª²(JþÑ€†Ëت·qm±@Óæz>éu÷^êwcÏãùï«‘= äß³¥4g…ݸ:]i[xZ:‰‰L…I`Œ±ÆM½q£ˆ\Ü6¼¯9¦ß ì{±Ú³0GÿL¼S?~!>öDŠçê•<Öšñ·¤m￸™Äy \NG¹Uµ/Týö˜Fn•eæä™–<†3îÅ:Ó5%xÓòB &JAÝŒ÷}õ8ÖÞ£«{bì—;ÌGyç"+=Ûö]ie»~HßÇã¬×øàXä»»1çʧhæŽ 2âI…üà›!þHsUxtÍú‡üqËHø–è4êa`v «-D=ƒféš,Ü™™ó>˜WŸñ[B†÷;75k)›ã¥ácÏr®ÈrâtÝÕÒvÏ˵•ÀË5½cóƒÝ^&3ËåÍ<ÔFü’C†!h2CqýÔm…^Êô>kézñAèÍð€ÿø¦TÏR€ýx ê}5Î/»ÜξÅÝp%ìkÁQÜæ–·Òù6OBô: ŒÛsZÉ¿À±n¾›îh bJ¿{6Á½Ek6}käL“årî(˜¼½Qñ“ûN»J,¸5¶ðl¨$òÒs¾ ·òÃú`$¬ñ\.Kšm™ E…‡:^ݪêxMc*!ÂݸY›ªrªˆynÓëhðJóÅÊÒ9ªß5Sæ@"\fÂÑÛOÔ‡vuÍ*÷¶Ÿ3¾l¥ËAÛ\Š"6Z±LoTZ‰ýaeŽ+†–Ç ý(P¶ÞòðéÀÌQþö•­f'ƒX}ÒÓT%–‡²âó°BŸ•o“C^Â'KfïÞY.½²´VÈÿÿqIü—²7 •ûÇvǿ̺•ù\i~¦ 8OµêÚ¹Ý.›OwsùÌ«wRÊÁõ[  Í;`ºáoéAœ„ü¡·Šæ8®>_¡¥’ÔvªxöÖW€çu/sTþ.­p^*¤†­¶”(‹¸.Vá꾿»í }Ím·úšßƒ¿t~|Sªßm¼8ï•íd_!×Õ7ØYâêòŠøã=>m¼£s§ç¾5‡˜È'øi¸QøÄ´Ø‚>D¤ÚÀÂ%Xsáì|M1”VÞçô®°,ûõ–.ƒüMwKý ቛ®ŠU]=õµx–öfZŒŠ í`«ð—þ`Å[öá­Î¥™ñnÿù´´äMï•’Á9wj/¨gR™ªÀ8q»zï;o½OÔb´_ýa­zØê§äzXËë[s×iInÓ†2?>aÙßì0¹˜_Q’(D¼¸‰vŠXËEFÀ]á>—B§ZÚóÖ€xòÝ¢YäÜÑ áp„ýæØ×#?Ïx¿Ù×sXϘ·¾4ÿ8îÖŒŸˆðí¦ßžçß!4iÂËN¼öÞä­7¬É#OïÌØ•öàØƒ:ëHe99 vûu ˰X3I´?¸“”pÆ{¼Ð‘ oݸ÷À´)ç¾¢ ›P饜jžù`F›aÖOŽaÂÅ”ÉËÖ“a6Ýj†Øü??¾ãž—ÚCXo &¾ܶWbf{ýTË]¶Ã-±˜ê#¼5ÖÆ°Té°QòO –Kåz*Uòå¼X/P¿Uy7„÷êð×õçÑJŽáÆì»Ï&kðÛä`i¨áfu½¼fغ÷‚þ è P»A‡¶ÇҡútèòŒ¢Ãq³Ù+:?vX<æV‡¾Œ/f·A{º#Ø’3ÉßîfIœoŒVUúv<´Ç'2U íÍd!0Iмƒ¨îW÷¾~^½…Ñm]äí×¼Â=;Ó&GØó.;{ú kžY¼ïSè¾ì^V3ùtøîé 㼩íã^£Ô•LSu±ðm Pu©x¥êô¸H©³¤ñ¥þÇæ“S¹`¤ Ø|‰ñí‰Ñ«í^iyîT%ØçïëŒþP.ØXÜÉyßÀÛ‘`ÒØ™¿í´„{ž”ïB3 )eÖS 8†k[do¥ Ù^éàÊ´ÜòMjg^æTýÛ‘G{‘­x±U%³»2ÝÆDìèŬ£Ô~­Ý¡þ# Šèwùß>T1oµf:c‹ XÕ®†atC5Ý>]¹Ï4 QÝ-án&ü:Ü }8rZ½³½EõÍø…N‘ûÝZ¯¿ÁÛô¦FatUgz”1}òTUŒ_ævàN3\‡"W︳‹86¸ Ø«e °W{tÄ1ÎgŒj8F©Ü™ÚÕ!t˜%‘¼±ÙêvœååGò¹îÈc¥€¤c‹Úù÷^\ÁÅ÷²›}¯”9›»¸†gö—Þ:¸'=¨ô)Њ’‡¨ý¡Ø¤š-¨Keˆ".ûOt›] w%ÆÁ^;k…Mµ×}‡:—æÊT1ejÄwj/Êäo:gÙ*:G‰Ê+}õ¹Ê ›P¨c3…0l\_ç_Ê\Rº}[è6D•›n‹2›'ó£^XýŒ{и»¢Õ’r¤²û šûùw–*yœËdç|­6ü€ñ‡“8žä9lôãt,”y)~7èLO]þVÌ!!¦´‘¯Šˆ˜–"$l>HX®Wõ»u‹d«òã7Z⭹͖f‰Â–¹¾”>ºµòOŠ“üþ¹…Øuí¨ŒÐ Dz»_è”>\9/HØ-n ;é\4TR|RpbÔ0¯¶1@ ЬɿíuWõ«Ø- O¬ Ò¶3‡wõÁV÷Oçuw¾£ïâUç˜'Ã=-wûçÿ°$ÇýÞLYoHgÖ¤ëÿJµY—9ÈÐ õ[n8Lð„4ºî«ß;4‰u ¾à!NŠÂó®³5Ö³ÏGÔó”[à ŠB¹ÛßJ dS×D>.hx_¸¡œõŽq„fíK›ß¶k´îõZ­å}¦åœVË–J߯mËEÅŒc¹åHQéÇÜ÷HfrÞÎ)+X¤U†µD-´šQß–|.€n¯Z.ꤙè ö^ÅÊ37½+ê7 Ù¼+s$+²¤¦Ì.ð¡vøfá¦~ËwÎíR¥3¼À­öµKãmë1âZ"ÐZ¸÷7gùnÔ¤ÿÕ˜§¨ÁÌ-ªÁ,´IƒÑÐ[ƒá–Ń­Ê̶.¹OC¡F;rù#§öK–+ŸƒàŒŸ Šï 5d >½IZœïDX7ûRæûFÛ>›níüÖN·­I½6SžNš^QË7épYm£'ÜX"-ºQpY©¾Âß¶@½4û¬jQop¯UÜC©º#x¢ª¾«Vu×iem¿…\¨ª¶Yþc‚½< Óeuy-'¢ñ:¹¹¼[õjì}F<‚Žƒ SZ‡zô}0¦áU¡áör4^ÃzÿšsëeYÖ6¬¶­)/®UWÇWu/æòÕ„T««Ù­œì#[i¿Jè2Õ=È¢>§ò})åË.÷é–ñ¢¯—±tu.c›ê·ÕYÆæ=¨ì¼åÊwZ¸ fõ6ï«ÈŠpJ|ž³@‘·öe-ÍæѶ‚Ùv{«A3_)K5å¢p•NÜ•!»Géå‡ÏXå1oye¢¹ÿN+%ç÷±43÷ˆ¹Ý;ÕK@¾Šew­_d…› :Êø¼AAµÛ`©Ñ‘ÀR±½‹É.û[« eµ6oÍ…ag*a*ÿº×7ü­àÏŒàJ·áÝŸwßë®2èÌ;Ý•ä6ógǨ©ëœ ÝJ(yÚ-‚P(}û0ËèÃ,D¯Ú¬ O©U¡J öùÝg}Ïk»b>ßÐøFÎ8¹ÿ]çÙ®*³¬ëßÒ¢(ŠE¢ ˜PÄœE1¡þÿƒÎ÷Ýsíuí3?Ü8c^”Ø¡êéêj6ƒu3ßåUp!Úc@^G@ƒ šdî¦xŸ©§á(©÷³?üê„Ûþ£ÌGkSR‚hÕmjþàÆÏ]D#¯÷¿ø¼*CômµÚ=dpß|¯ÏKÊÈ-Ç‘šEs#ƒ÷ PÝJaõ5ßú€ZÀËÊ PÇý PO¶˜bF*Át@Ãç1 óÎ Ð"Ÿ"æ »€ÌЙÌ7û!½òÅÚô3‘­‚ 8mؾÔH<ðüöÃä·ç~Mf»ª¼YÍÐÊõ:BØF¥ÏK;‡D¸Õè­ñOT@oB;EÜtŒŒR°áï6Ÿá0Èí ‚Æ8¡iЮñ)®Vjf‹¦¿ïEÀ\Ç`nL°™×°¨ûl¹XþÁZòúŸäí|^¯ W×*0š/~›AÞÉKFàu)"‰°à[MV{·~ÖJì¸ï-ÀŒ>`žx°9¶Xf8¬|™Öέ;“O€ÝwÀA…,à¨^pV±¸pÞÜ”ýVçÜîyÜmVܽ©>[§˜ïŸCŸ)¬Üî¯yy~ßb¯—ÙÜì˜#ú“Ñ£ª<;ÇR·×]~O˜äÖlµ£å°)ýÔƒ±÷»ÍOî%sá? È=f¸@þ ¿‹#à Ùà1úxmÞp ª€º"XÜ‚ršÁi߀0"ÑËù+v„hùLñ~qzM^ÎÆL^y]IñÎ'Iª§š)öÃ$‘˜UŠiœ$”¢]ù#Ÿ&r1õÞ—5ã"„ý”¶bï1/sƒ‡rlŒpÛšÞWXwù“T/ÞöŽôWÑͼoo×½¯ö»ŒÄéøBÅÝ,ܺĚà]ÜÂp‘b¼ü¿¼—ÔNÕ–“Ä8Щ±1—šHi)~µTS+K³½¯|úz'¢RxJ›Jå¡JÄ}Uø;Ò#¥Û–¬k7tÈ7¯Vs®vÒêÅ‘ØÆ]Ðó/±Ü›^ÜÜt}¾ëëã™Ý>QÒâó‘p:—"N!Q6OÒÕpS¸£4°¼Žs¦1ü!yC§¯¸Ûo$É JU÷ΦV"éuÛNñôSåíSZ3é]¢Ìýf^3Ÿ«ý„à8ào~ZŒ‡HíâfòB-pîìðú™Ý°J䣬 Å>…5¥{‚zúð•4`H:«½&ç#ù]uÕ§·‘qQ¶Ý⻹Åwc·6ú_|ÚÝ(飵ÅäåI|ÚLéŸÆÐ3ÍÔÔ¥û€[¸w=P÷0ƃÕòBͶ‡3»Ú¦–îæSXY}NPg—;*ñ9¬è5ºßòAuNbç@ÁH „-¾^(·´3×wûÑ[³çòdå“Þy%ÜkùeÈøRzyÜZ»ÜbÞëþ’·y’Óçª0)l>Ť‘š½ÔÒ±oÝWÛ¨ù[#P‹f”,Gé³±Fƒ£Ê‚ýv.Ïv‡u}½öÌ~K¤]~ãúò}ýòkíMmhõÊÙù•¿¢+€Œ±eÚ1‹ô£I‹<ÿnÎWŸú`^t¯»ÙN}—¾§Çñ ŸbÅ<ž·/濼7{1µ×¤’÷d–šjn¤ô1/åÛ.T™Ë€1§ÆåÂîw;´=ûº±È’³é’» \Å_‡ù͇^ʼ½Y,&öa¡IÃË|}˜<æMçf»sÏZ½:=Þa|ÚöX>¼ä;zH67½ÉÒ6ÁS}güwŸ©úõ;‰û™9†gjû‹äS¸?{ŠO˜è¸ïMÓ©£rçÑò–;¬gû϶wr k~!ÖV™¾Ê-ô¼(Ï͒؜٬ڙž|c0Å凗©; ©œ·žÜNÛã„ÅqðLG@`²ßÁÆÿ丒/é1žÅ¾8VÜ5Z>õ`„t±‡‡ÌÂÐÉ kÃêÒ®þ0ˆt¥òCòÑ ÒÃà:üÅ;–+§¼‘Ëîk¥ÓuÛ¿¢Ñúyñ£¥t¿§’ÌͤŸF­v-t…;ñƒFàk=ÝÿlF¶ß }ºGc•;‡cøõZŽ ìFE¨|ö,‡{zåZ;;tz:ˆn;jЪ{Í{®K÷•sEßåÕÞKý”{A>F{âz[ú‹Ÿn„}*(Óòv1Ÿu†a/Ëü\ÜÌ·×ëvÚÝNÏ“QaúÄû¦àgƒMmœßŸ˜Q1:Õ½qÓ†ÇÁó»F0¬=ŸíÁÙϹÆîuJÎ]&ÇlúeëÜç‘Á³¸û\¯ÎªÝé˜ç»²~v:‹]wÓIݾw»é‹ÅvI$ÿ½•ŸIç̨û]aßQÚY)»Ó{nÏWÑ´_™ÎC¦A΃ ùÜŒµÕ;•†žD¸0¸ÈHÕ½uª´Ë¤>}\ÆåÞ»ë½ú…²{™¾ÔëÊwÅë¦ÑÙ´£½Æ›ö¦¾üæÙ´M(órö‹8•s‡´O½·fw¤Ý´uYˆ·…-ò)Öëv òq%‡¦t4çErz㢌w^¡g‡@:bÓñrfŽFé<7vÆÒWOP–yï'˜zÊAzçT»ió ;«ŒËuÅk´Í•§¥=É5{:ïÚQn5´q= [ým²iQ-*¶†O'c&ªlú¯›Âî9l~ìÅ¥)½JßQ ½’ðá"ˆ”´s[l¹&¥üŒx¯ _÷£ím3ñªÛ¸7p [¿ï«á¢×(Í]•C¼fÚ–|-8Ž~.ÛÑöJØDöü:[®vZ4T˳²é˜|Ì·M«yÍÏÅX4”w4æÞöi¨|¹ ¯6.«VÕÑ‹•Ì^/2 mŸËì!š—?õM€ðµE¥ZýæÜNÞ¥è1.š›aP|×»X>¨Ñƒ®:+¢Q^9G†ˆì³@?Z×Zô¢ž·F¹l¾L 7ŹL7§yYhf›šl¤Ã²iäí «ÑÎ×v$ø–fѬ›xSì «:/@¨µuh*g³¿QÎV%Qze6ó??·›¹¸Î>rÕYïs‡9ñî^ûŽ­ÝÑõ¦jÑé¬[ëN»öy|Ë´æhc¼õÅ|½Î‰™Éœ2M™Ýç…B8Õô¦|¡µÝøÄk-1£ªÇi¡¥b9r œ—½…B"ë“Éw´s•Y§ÿjŒÏ$}H‘&·mU‚؈®Ï^p£×qKÔgúPD”ÍJ0×¹«€6;þ€xþP.ú)¶‘€¶Ø·€Êøw¾ù^“Ö3dDÏú‘] à—R÷QÔƒÃêÔ‰”lßJò{­9KкXU³ß‘©vÑO_q1È—= ^4Ý5„~–Â:õ û©Ïã› [‡W*® Ÿ‘ÝJ¬Jlh„»¼C˜s¾z½Ä\—ų).,‡¿v×å½×Å’ä¢ü+½¬QSP*ãí9¹ÉK;u¶óä­Ù®~ì™Ò­¯È6µê»[WâCW—½že7^™pØð<”ÝxSŸ_“S=Ï|®â*AßbQ¬e…KBYV1Þ,_B•ë†q‡½æÐ ë.›ýXÚ€ æQì“Ì£4p™*˜4²´tH¾ø½z.Q #C‘©–GÎnúá­th;ëÕ¤ÅY£®±Z ŠæŒ|Aq5®ñªå°k¦”í¿Ú0|q-wbñî…]'Š…r'üq…øÚ3p=¡\刘cØmÈÌcä; ÷Ž}ú¦sxÐØ|èzNÀé:Ìwiñ•ݦptPsÿà+©~¯óHÊ‘“Æ­xÄÉýôÔçmïûn`N1¾­—°¬ PŽkÆŽ’²Ïu½^@v𨀶Ðg‡BEg|{«nxÌr#®wônÙ^}ØÁe÷u9˜'uFÞ{ô›'êt}bXÔôî{”<‚·TŽï$äâWI-¼Xäâº[‘‹w£r%õñ3×¾‘Aþò© FV-éìÂá¶õˆDÿ§—›óñ£4‚4 ®/smR,…M^¨[2]ZM®/M{…¾vØÎ/Y£ÌxÒˆArz2diI]—¨Y°Ã)8óàI]-$’ï ³­ ¢¾)#ø~¾-áûãÒÀ÷ËÑßûÙ˜(Eµû_„/cIŽ÷PTq3ÜãÙÆ4vmÕ§ù±¾¯Þ…Ù”ú²µcÛÂ.Î?IÖƒ2"“¨•Îüwý†þnd¦Sš7ÔÜ)ž)µF?ÈU¯Hƒl#Äv8ªh²æp‡¸ªxõÆõ±.ë¥ó ¹ÕâÀ/Ö\IQj±«Ík±u¾ÔâÆ#ý}¾þð=¿Ùûޥ砽¬}³‡´j.ÛÇ‘Ö7Nã­TÑ<íx.U(Æökt£;á(u:‘Èuåb’FTè;‘- Í‰ò.ØãÇÖ1ÆÛUðÂkömXàÑÚuФjf-W~¾[‰Î¬òΕ€mÀ•€«Ö+V +AaUü÷úVñ/Óëþ¦Ó¡ãUéT‰Jl}ªÑÊ@¥§Ü™¡#©y_û‰÷ŸµÈr›Cg£!A잉··xÚhIÁúÙ‰ƒ‘‹Ó 6,Ü‚WVÕ§[?VÇtûVåÓOå=z"•‰€á•L¨‰e%»°Ë¹em‚.õ0Bõ"ñý4hawÐÂì §žŽ±jÖõ‡q5´Ù¾òÀu¼\Lxê,´Èkd€˜mqGz7°Ž zUx²´ëPX¿תãש„¥ƒX‘îð7Ä-ϹªSV^Ò  ¯û4ýbV¨QzžPäŽ=J[ÏÌ–,nV.¡ïWt¤ºQ¬AÇ-„(ì@!UªOmÁ÷…=‚Ïä;‚ùÛCo}èn™Â²-Ñž]ÎY)£3’ò!"«]“™hk…Lg‹;z•Ͳœ·U¬TÞÑL±Íˆb±öt4ä¼\¥.«~ d™®Wi] úQaö_U=ÿH|~äëxžO2ÌÈ\WÖ+¸®¯ÜtðÜtòéÁ Þìàz±rƒë{üàf#Ÿt®þ2Ž}Ñz.½jÌ`Ì«ÅeÑs¨Õäú¤ñî­$WËÊZïÎO"‡†Úƒ?ÐŽ%ç,ÂR»¨ÁÆÙ¹Ù»;HqsJmrpCˆ³«¬²úâŽf]à s;³ TÆ&{œATüíñÈTÅW=S­ßƒL•v)†ñ¿:á­·< »$ÄŠÀ—7u Sîé#ZËy=㎭Uô²®ÙbTø‚Lj4N®D.Ÿz™u|÷âfj~]g±¥€,@L=@ì‰I w›"¹â æRÄÄ·ÖˆˆSaˆå∕b]|<@LƇÏûí~psù±¿F%콑—è£@æê+F^벊̽šŸ9vÊ«AÅ*žQ[+p×H‚eÁ²ëG–Íœê Q[H4Ru@¾ŠN u¨ü| ¨´fç@ñŸ ›”˜1R> êj ()_5¯ªa%ó ˜éçäw„Qéyy:e_b'O_ØI¬íÉì¿Ä¸QTòÉkX<~KßùwS0rËÎVÉ¢´Õqý!êv åe@£ 3…ãšš÷-}|@[ÂÐîäè]é0C“©p€)ílÀ ê0eäž"ª¦ÒùLµâ¥XìSÓ2?˜Ía@©cI/IæÉÊò\Ó}ÑÅÇ(ÆžEsS)xê¤Ø×›n^ê íœST+Ïu@÷9Ðo× 67Ão-Àhwçw›>ÌÒsšÍ[-ì«´n€Þ ÀÞÛàÊEptúi8YÙNÉ}gŸ(À9píÚ4…i ùùá—¼ÝXTY µß$]0¸7Î$·S¡Ë"u:úùl!çæŠö¸›!³I 0í»ýÝê»ÛŒÿà?U_r¸^o¸õ9Ü%ÿ<–vj^Ï~`¿ À'‚ ø½Bm€À·h è´“"ž¡«œSl>?$I I"néñ“OY=ŬŸ$Režb%I¤Ü‹R{§D",ÖÜ3,ì¤'dµÇ}Xع:÷úwý’÷n[*ëßÌ{yvC=z}µ_Üᚎ׸›ñ>1>å‹›w• µúç»)MÏ*ÌÎìÿFk¿ë_$¯<þ5ÕÇÿÅ×Þ:*§è·S¼ƒÔÔæ>ñ¡Åý)­gà¡ìgù»MÐÛ–˜a7t°ü¦Êž„ku¼—âÎg¯þ‘T/Í‹›=µ.ÔâÙ={…çàÌn Aä—+‹Ó§ÍNÒ¥÷<Îé\åZÒA/Zû­´èüp@&ÇnúÞ£÷CòR…ÔNõ5Ñ©¤‰ßC“ôíºb>?ŠÝ(;=¸ë'{u3ãþéZ™×ŸèÉÅ…èìåU8Jšj1òKNõô±-ü$E}œwT®ÝÔˆ§¡ìÍOÃØ†³«.~¥õ·ø&œmÜ2”z5ÇyqíazÍÆTãÿBòò„ôëNVÕ$évË©‰ní÷\Ÿ9’næ¥Øˆ#.k^âz¹öàü8J=ùïŠÇI:¾ÖGårÝoqÚ£Áè²s2£û6RÉ_ ÁÆ-sj7K¨Ì*«¤³!WB|JÛ(ýT–иd/”OÓŸ¯äüunäÚðYîj)Îøl«¯¿‰c¿ëÉ뀓ɋ ‹)¢ÔÞ$JŸ¯â7´W/ïY96ãô3×úõý–e•]uŠ4·øv6Ôê¯ÙCâ­üZ¬„ <_†©/¶„<è›ý°˜sh´€ƒêmndªÉ™5²3 6ŠÓƒáâÓên%„Ý*lMâîd>qëØuBg:Ppßó7þ’7Tý U“×,©<ò£|ÛÞÛßQ òkãËQ…•çÎ@f㪻š#ÏØò“ì˜eìê‹|e§ÎÎÑœmãs{V¦Ïýéáñð¦5þ„ÝmvVy;qD4¡GÖ3ðÞ½Œÿ’¦E_<¼¾»ð|0²ô±Œ á8o®#MF²£B…½õ ÊýA³}Ï&o”“ û©ÅNÑáã£ÖTvû>_o‰~q½ ˆk´Xt®¯y³ñÎÏ*…[yŠ¡·oƒIîÉM“L#xB-ÍK–ÿΗÚ~°f~¦ÄŒÇÓ[k>N‡´íh‘¬/£‚ñxyÍ}öJ¶† [ÉQœêŽ?ÀPäö9¸T¾ú·5õùá›7l¢ïäÝïÐWÜÊ#hù».kžÖã71]eÒ y™Ž¯ãÙžz.¾=ù8²ÏG ?/U>ÈXÁ?ÕÑrŠP#$‡òÞfI5<¡´aÚ{­aµ¬t¾êàé1ô8? ÝËû²q)«pé̻ώ&¥Þøýf{ÂvÝëJOnÛ™ëá³£"~òð¶ûüán^ïÄY v¥Ýy¼Öà Ÿæ-0šL»fÿ{›0ÎS½ a!χÐb´Ò‘£·u©Çð0â2ƒô+ÍH,»®cýûÙ`ú^¯+ö’[WîùðÙð¡Ó W¯›-!ÓŽjSÛN>¬Ú†€ÚŦðœ]éÖ´Ü`a· Å›]Û”Ÿ­³™}üE|Å}âØôµâz"nžs»¦î&ÏFf€äŒˆaŽŒE£;—8÷^ ºß簾ܕsÓRgÑY×:ùxM¶×î•oWÉÙó†Sþ”»Ýà<+{‹V¯½=¶H[ƒÐ)YŒŒHæèt LÞoEÍ·8¸ýÁ´®Íàª}÷➃…Jlo—%¼D:ú#ôr“}oTŠ}{Ø>•ÉN­þh7èöêãÀïÊÛ㺣ϧvór¾9{êúr*Þ²;…bc›J¥ÕG+x‹<ð¬5¬ÉßÄ1óÙk昜v›ïáqÜL½¦u3³¶n†RZçŒÜ]eõåˆêºvÙë’‹ÿ §¥Y#ÖaMÊÎk4þÞÊ;t«©£þ&¬þ3Ѿ·éI•‚ÚÍÅ«mªï¾c÷K»ãUV­Ë‹9¶¨zýj grb&°ž1C‡›ŸbmJ­>fÌž3ÖPÆ—†¾S×§ü@ÛæÚ3 íOê j_wßî©Vg«ž©Â:Åäü_8Ø«¶Ê—ªÙ)½Žncã‚-×rìöEöØì*›ØÞ¢¶èØ/[³ñ™i[÷®=°Øë84ÅÜlÝ õÍ÷Р&´ÝdžZ>= øøÉèöµ­ ¡šEWqõ0b9Õá;šMfm…€n¾ë;Ùm¯™ÆùJãñ­×åM£yÛ±ÑÿàôÃŽzÖ¿y‹ e'ݽãð2ë¿&Ý^Wݵô¶Õ v´†è]¹×Íäs×›á1i7³8ây uc„¯µí›:hÖD‰Õ#¤<Ôšª”sÞÍ+DÓCåkéð-Í"Ó$5¼n6¸ ïIAf¿”Ä—€s*I }4ëSÜš¦¸ÿ [(ÏÛzœ rq’b?ìMçb·½“š}æÎz0Þ·{šâÖå›Ù¶ÕÐ×’cj;µÛÕÊk¤¶Kó©rF…Hâ£|íÞ/2}MǬ5x˜(H¯•Iõ¢ËI`u¹ŠôêÙÈž‹ ÿ‹Z½S üõlÄB¶6IáïS„‡¿X7tFZ!ôËßvŸ²4éjëbÇÁ¤›ÒbÀ‡1Á–®_¦õx­R+k*FÖl…dk}yàÓãÆp_?­1šZé³R]w.RŸ¿êÓøš«ç€Š‹'M‹Á…õgÛš;jÊï+ý¿¯â9¾½%¾u>ùÖ¥±Kaìÿ`u«üyRš2ÿFllqì¿ÇÕ SšÖMÉfÎã†6UmŸY`j;š2 9Õef¹0c䨖ÞÖu Õ¯ >ÃÁ¼žsÁZ\Ò壨gÕ‡XX 2‚Y BióøöÞ.ë|åhµ¸S;¸Ž 9ìs‡ØËt̳—ÙÀãpˆØqØý?±,‘ýR(ðݬ×1{‡Þl’øÎi9²­qÓn4sVƒÐöõiYÅ"¹ümiC™!cᤉ++RæÑ²ê ŸŽõËÉÈ(˜›Ãy%˜mpà÷—ü•·ûô›¯RM˜ëx£‡sWžíOj&KI—á3<?Ìð¤3Ì0Ò¾î 3\×)^[æžÏï~˜Ÿ½4(:3¤Tf×Õ½pd÷·ZË”lVÒM,‹©xµ‰ÊÃð]>Ø“ êFÕa-SõMI¶(é¨'ø×þšá«AoÎEõé–ë–6v@º5,ËRçf…ñÈ€eØ{¶Iûœ8 …×vC}&lB}B„¤>Ó’K}ƒ-\Û°[of—•PòSßôã&Íßf¿X^‹]”Ì&Ü…ëjT:c²°’bãôgh\‘s,rÂñ޲”ùü´¸n¯Ðã’±ñM›±4Û\3881Þêø _Åg†ö÷X‰N›ÑW³¡Âh­RY2ß'ç·î’T=ø™"ÂIµ½ïjGž“óå`óÓáµZ£WÿÕ[§ kó³¾5õ­‰ŠË.0)lŸz5aÁ ¨oJ<_³ñ*×XнŠf¥wcƒy´öm†;]ôË/Lè@$—thj*·b*j?äB?H­X"ˆuKkÍʱC#nŽïº‡[:¥9鼆š6¾³*_Wß5ø5Q µ QtëëPÌA%¯;Ÿ½A¸w¬¾°^Ö⛫n}SW®¦ÊKSYÄ–j#\oúÉý¢z:3² Tnc•Iò)²p?ˆ„©~t- 6¾¿(Üîw¼JÍ–Øé~;bQé^»¼ÙL­?é—«wèôÝŽ].x«Êj» ’ Ü©2Þ¾ •ñôÓ¬Œ‡¿òÜ_Vá7©-š+ƒØéÕ·SSÆ´®vÜ º<òh¾®ë8­íó\Æ05;62Ä–*~Ç4ÜÉç‹XÔ«Õ°.©²‘º³5W™7k4µ«÷3âU½;­r¤¹©$·Ù¥âŸïŠÈ±ÅrôérCÊè|®PU}PU›Â¨*ÌuT%Øô½âð›j…ª ³øÁ»”ˆBw”¢Ö³Ú T騽gUoÔÏ5A,}ê$;Ü+(-ÅQDÞb;ÃÛOõÑJ#“×xVáŒWêŲPž¶jrY®4Ìröé}S­ÐÅx;F5!™£€Jë©y/5åm®TªRD±Õ*ÅJ)ç"Çý`ƒ´ í¶(#m> ÇŽ´@Žº°üáWϼ}rO'+³£'z%ywäçåó+f²¼åÅt %)FdÍ*¹.Ç%¼v§áê,2å.gÐÂ±Ž”L^.—JïY´¥_¬¢g9…tÚµ‚cª_¸¼çëB’œ TCù{v^É—Õou8A†x¼«,áñôø‚eÊÂc§Û‡Çj<…Ÿ t?Gð²·|W€=Ü(û¦¾ÌOÔ˜¸u·Õ…ÃòQg½w…¡~ŸÀOX\©1/)ÏNÓ\iK3ßÅb¤[fó÷d_ÈsÆ¥ ¿J"/Àþ¾¥Ââpaâ—€£§¹ðÕÝçAüÌe%É. ›U‚ ­Þ“ d„L î…Œ!hA†mŒ¡ÕlõÝ·–^£u§š/+tª{ý0¹NäWnÓ«{ó&w½…ž¡¤@Ø­]ó «@7®\Ú~ÖÒÃx8ÏWg 7½NòÙee†f IÚà{ jÆo* *ß5‚LëÉØ™Ê¸='ý¼Ø.J1›åk)æ*ÀæÊ`Þû°Ñ2°N¾×¥‡)ÜÀ oa?äzbæ{ðAÔ‚‰´Hã]›mmf²x}›iå™FëýÔ|ÅTi‰B.Öeø} ‘Üìœ)d‘Á¥”©nûe€•JŠ>ðÇEø³¤¦Ðl@äv àÚ2…wD¾˜Má€(°ß’éõ=Ä€|™¼ ð[üÎnSèÇV½Ã¿õS%uÖ¤Ìh&Ú‹Ùˆõm—*ºÙv½ÕõÊ,õ•Jû}Â#ÔT¥áÏæŒçT§Wƒ¬[©ü»Ígˆ¹a€,è$H¢%§˜6Y]@6Õ½Ã}üÈɶÈP`RܾøhÈYê‘‘ól^¨r¤Œ9.œSßC¸M¤\úüÉß.‹5O_.SZ›A#üräúU)jÙh¹0Ó:€ð´cý£Cw2mP0OŠmRÿ@Yˆ€²_* ¼š ¨¹ÚÔ!þtèûg 謲4}K-Û( í‚˜bÚ´ÓXº|RD ÇýtØöK »£cŠë]ïn`HÎïwá"¾NÌì˜YÑŠšÕÄ1Fw»Ñw"@obÁJå£eMו¿¢÷-•ÿh¾?l ÐÏô;ê¯z€¤0Ù 0v,{ÊÖk€]ä5ÀW#Àžôïš4H½$Å[ì+pû./S¸éz¯ÊÛóõRœ?ãT‹×Î?Öè¾Wô I6×…•›mC‡í½ù9GÿG‚^ÂíŸàû»Í/Ï÷Wtb0öþ~3¹àHm¸æô ¸ H=îw¯x¡L~™€_u&€?“1à_ïàß ˆ3BÚ¥Ðï)ú¯$çäòÿ’O‡$‘raŠÖ!Åùù§xƒŸmVžaA#žÙdÊ¡)ÞWµ¦|×Ï=ã¶%ÛÖͼ Ú7tô¯vxת¿ž|%ÕH¼.c|úÚ_\¸x=ß :{¥,%¶eE~5ýÿë!$¢‡¥èVÿʧ)>â¿u&.£Ä‡Èoužg˜ç£‡²'ïw="?7óZÍ^ ŽÄ‘€–có-§»«®1ë‡mÔ,˜ñ¯b µô¯|z`žaîÐx(ÛÈJGˆÄ½¡ýdr­zŸÕ%®Çû³¯¢È/†×Ó§>OÒ)üŠ)Ç9@GØ òý1*îÍw»¼;HmlW·©m7ßã7qs$o¨ýÂ\{Õk•ôˆùJ¸ÅïåÇkT–!rÿ¤ÊûçÕIâ[_ó™?M€Î§°ÊOHèÍ<jq'Å/ÔTkD‰.7Oa™o• æîÍä4Ü9 m»¹Ùtë³å†ÚN6k¯<9¬Ùãò¼ò±åm%\N¯4‹¡%äݿǺ-”×§2_I5Gæ¬4³ò}{z0K‹©ƒNaä<á0j—Jÿ…$Y‰_³à_Ðù8bZ³—Í%'i¿ÊUØUÃßÉ›X«‘ë»YãW~-ßX~zE} ¹PàÌW"èÍ ζrÞŸY¹ÚlzÐk«iuKìÃn™>‡øÑJ&.6È÷þº°Àú>oXãOÍSô¿ Ô8l,_ÐÈŽ“ÒVú #¾YÕõåÒ—‘°F–{óQžmbeº\%­Ö~â­ëBy4ßsýmÃ3 ²Ñ©“×kaÔ4©ß›ÜÄ­þªÁM¨¨£Ñ1ö:¶}Ÿw}á¹ñÆ¡p ÇPø\Ô\!òV:ùô dXnnhÉÁ°ÌZëÁ!Y]Îjþj†wN^ʪtkI=pæuþ›ÑuXïáå–8úkÙw–Ò÷°£Võ¦‡Yuv»ø~âN¥[à”·ïǬVqÜXX•qVs‰‘ºq™Q¾¿ª{Æ}¥xE/6‡ÖëÞMÄ´Qáx¸g¯³w‰×ìÖ¿nªù>ƒ™ÞãÑì÷xíºê¾ñZÔ âüéêý×ñQ`8äü܃÷þPžVŸÒÙ_Žc{Öš­äéÑpÉuܰž6zO±fôø)×î¾[Þ¸[?m—žœ: 0@{)Çx»ÍÚÎ&`æZÒ¾k¿«½ßóÛ®¸ôBŽ«0x¯_2t˜—Ò›ÜW‰éø—èKPçzrÃ3«ÍÖ° Úƒž„.…ëþÐ]ŸzÏÇîÚøcÒln™.„Þ¾Kßt¶+u`,Sm//ªH¼èl¡žá ÎºkÛç‡oW'â¶ÕM;Z ?¨QÓ¢‘Éä»bczÖ~ýg?˜"ÛëìùX4½Æf2òÆß}kã…nžµnòCG>ƒN<áú÷öXîùÒ¬Õ Ó  ßa¾=—mC-œíºtqRúnöäÛ®U)¨E Ò"D»j]Á„¶hyS7Õ’er]þ{›fFó¦8ç&°°1­YŠ‘@ž¾¤åhµøá”ê…uý:¼O/ÓÇÊÏÍðÞðÄÍŒßlŸÏJXOœ d7«|¸öš„U§#ßM²öÑ víª‡-â)-¬´ïì,úÓ‰ÌQ£s5ù´·6-Ì4ëXŒÓ~R5dºÊè‹…®èš¶lkëÍÛךnó •è'P÷¹³¨V £¯VºŸ¥r"⯭œŠ‡ù{l´Ï-õ±rŸ®<óöŸCç{¸“Ò“²¦£í•v³ëTœJ¥A´ÎŸoÝÊŽf>±®mò“ù 9¶A3£憼>¬\39êÚ>ùUp§Ö|­¨ˆjgº˜ZÙÇ¢Ò©!¦‚͡ܯïW2ñ™*“dãvÊvÃŽ¦pf±yÞuhîÐÈÍW ™pºížt%¿:t‘XÊ© ´u]óÖ:WM!¿#›Ré, ûÒõewt$Sv5S©5gªÝU×j•è•Π{QpfžÈýñ’)£Xn wÓ`[ž*%,üõÓ$!mQõq»Ö?Í4² ÑA«–‹A]:Ã?ËÄt-­«™iüÚÆ¿¤h—“»³Z¼%§š|ȵ,—ÌñAƒšRO.°ÂWuĨÓÚ’¿Ñšj?{† #GÁÓÀXŽ»±L-ŽÓÆ]{¬lœ=H‰K\%ŸVßõÏb„ÔCíJÔ¡mYç®ëˆ*ý EøiŸ…ÕŠ* «5i¦ØS;¦`qK뻼ÚÌÖÚy½XÙ}T'ì…ÐtX¦ûv¹ÁyRò_C^õ‰\oÌ–ÍzV¹´E5zºb¾Wð…5É,„f¦µçwÊ æ[ð ðå3†rÇ^åj·³Áž=î›sËöÔÃŽíi^úJ«lÏ ‡lO”ƒ/ü~õYü…{=¸ãÇë4åv³u=KÂO‡Ö×$ŸööOï-_Û¥gcD¡Y)ààB}ÚD«õìžúÊv¢VDaÝUT¡xÕM¾Åèß’7_ÉÝBîU6éˆ/ŸÙóµýb{Ó Â’ I178ÐÆx¹ Óó·ô“â2ô“–dúY¾ôég¥ä3L‹ ¾ø‡8;oÃ̸9šîûÁe;lWôÔ[íaÎX³U­|ºAòuA& žÜܤ |âbçgÅs@…’°ÅøV1|E†$®}Buë°6{ÁM—í}&K†§¯fÃÜäÜ‘Vä'ýìôazŒßpš¿Öeê=Øõ© Ë­( NÞ”T€êTý=ìRþíSì6þbô+%3ªôµmo†z KºY?E¬Þ<+JÏ~·ü6øÞûYŸÁ«¨]ÍD(-Õ o#Vë”­ {yT:ônEæ69(ÌЂ,†-W»ôó(èñh8§~¿§ÞŸÌ•š„R–‚²Ã*9[fꤢ·Ú$Ld¿C'±¼† ñuIÕ;)–#†&©H›Q8æÌðâ”Ö]=/ö[7ï¤6$d´ÊmTn<Û:¨Ï”åC,\Ù˜ß/‘×qátNXä³Ì½P+1¬I4PG ^W¢>ÜÜ Âü½MIx@A&5!çTgC*÷Í…Xqï¡¿¥2L6¾m6ne!Ž.7] nåq7_¶‡›g}ˆoko’¹Cßm¥–Ø/;h©Ø³ÆÁX1²E+—DC¥É„"BØwÞ>!1KéWíÕæOÚ¯‡ê3Ûå©ÐɦSç¹H‘ó@Iµîhd>ã·ˆÕìÐ' ˆbýî“Æ­žrÄËä,Áw¸ˆ9^‡«E¯‹YëNd¿Ö ‹q­;­Qµîà`Õ¢›àÕ¢=5üÁGDïÙÿ0Ã…Ó9í:¦4Óeí€ÑÔO/¯+w<Ã;á›s˺æáB'¯Æ‘ o+¹€Õ™7ša\G%¢8XcøNÞ‚Ë ¼¼›ØÑp:X›XjçA4«õXd_#å^½úÛ|•É då1•‘Z¥Ø}·ùTøÂ¯Œ„n³2Âc·òèBÃÊCO#'ÇÝ)ñ­»ÛrŒ•H*²!Vr%±˜‡3\w)=n¾Š)9CŸˆµ"¼•zœØñ™}c˜Nækä·°Rëm{dt×BõF?ÔêàYlU™1ׯŒ+¨ðÛùºünAqyRQ¡rÚðr¦+©èŒ¸ QùÖ: 9O+£ò‘ÖQyáõÓhe>øaH£ëK§œ_}W<,Q#mÝrI~À;BÊò·?KØ„¯ðJlàr„¬Å¡F¦×*KÏÊØ›Š >‘ò§P¨–'†.KýV½ QŽÎîç6ªŒò kê·ß”ôw*!fò.nËF¥h“FíØ}äPÌl{w‚‘Cf'QJìQ´ÑÿÁuþäCuÜ\”n–zÖæõF@„¸67%®7¸géI¶ú"õ’ÿK»®ÅKMOåÏœ?¡j¼•V3ìY2l3[*V‡Åâ6ZÖŠ–ÿf‹åz¥3õ&âÌ=¤¦ƒB÷\܈žóÈ_ÉW1ïÞ!O;‰?°þöbé;ØÀ¢&Áptò4™íÿÐ]wNû_Ìzún56•Aß­Krk@ g‚²ÌóS0†~ðë=k®œ¿VÄþèŒæƒÂ¡˜ìçB/ÜÜ dã”äo9諪ç'ª”g::?ñ> â ®%æ§M/÷–×ËÜ.ǹújç2Í2“e|++Ïñ0›ãö·¬)îù켌T²Ê‘¥²pÛ¡63 ¤éf¶4öu92棷þúö§YÕ)P@uà AÕf ê°PUO PÕ*VŠz§5¶£¥aJ­J1vKRzœÄGV:Éù³1F¨„õ<:_™TTo¿cZ±Ú<òw¿t…ÅÆþ’ËjûTôÌ'8ÖñÔö4HáR¬ª vGغ’bßµ,»>,WOÿîyÆ@-q P;Wý— ¨mÆßcÝ@-l¥o‡WÔ¦ù±9'ü¥^·¼ÆgKµÄ2[“ÙÆs”Ö’8v‰«U¡Ç•PŸæ‘s¡åGÕÁW&Éj£ç#cCãÀÎö `¯U6Eü•^@+)$àØ¬p!×L¡õ®_ç7ç×,À›]à&Þ¸tIÑ<Î05€³5;Å|ðj¼l™îJy¤W_·Q‡»ÄW‡¦J“ˆêtÃW_Y˜B×J£†\²k4?¦x$7ó/p‘ûYY™ ÊMÁ)Lq Ö‰D+ÃbÀ+€˜6 öY·î:Åç«Üò@fq>Å¥ÈÜhˆ„€Ìçi@¼B os‘bsÔÎqcݘU™@èô©>ʪM–À¨Æ7¹¬½q¡ˆ‹.G,§ª­*dísè_ZØ£€ì<+€ô3U@®*x ù›Š<¨2Ù©€ÊP5±(u5ÔˆÚj±yj)”uz7\@½¬ ÞD!Å]Ô§óÍ4ÈÍR .Êø¨îë!Ï9î`ûTsì»Ø°wnWàiÉ,vç‚’_Ìi.ÍC•`Aÿ£C+íôÕ~Çÿ#øf" QP4•—mþ ›ºïÙ€žz*O0ˆ½Œ‘9f5ÉæÌ€-¤„Åæ!`ûXQÀÛ,4ScÀšù `ûVÜPßîE [£ç— ÿ$“jã^û:·¥ö²ÞÍ¿ÓÌéúAÍtÞåú?™„üÜûK;Ö¢Ö?ø ¿Ì íü§ê;½¤Fܰ5àJíàš¯p›^ð8÷+uÌ Iðâxø¦ö|Ÿ¤S¼À‡é”ÂO¡Ôýž ÿ%Ÿþð•Oë°ôo‘¿ez׷ćÞàæßùǼtûî)|Àö3íÖÑ›ºm‰'{3o¹ú –”«ôkÕÇZq`Ÿòƒ‹›«ûç»®ÍÏ2ÚG‰u~D‰/>ݬz «ÿ·Â|k#üÒGÓë¿òéO9ýi¨?ùô—€,‰Ÿ™¸ÏÞ„yñ´¹ë§Í醺ãøZ ŸqçíƒK,ù¹ 5÷‘³—N™QÒt«‘_ ÉÓÇö™ßm"_8¦CLãBý ?WöÞülÝ“&ÛHÇ[|#›¸¥pêÔWÿ/¤6‰HŠr6ÿÑN?²?”-÷-7uÛbµÆõ@qVÜyѽ 5«Îìª6=}ZÙå j¿¶G¸>ôûù¼7_‹xçd·?©²]x6±1ùŸTÙeu•töÔJˆoâ2d ÆËîORý¼ x:ÈÎWò ›¹ñ_ø_Êi³ »t Q?*g‰; CAÞ9Ñ·øânn¨MôM‰_{hÜ_ùµÕ`%œ#’‡p ·óÅœ7 ØsÜ/³­œ‰»HgB]7»à>$_)ì\à±Jö/þèÐÿš*„‡÷Õ¾2‡(QíÃîö»ê„>nÜ|ù¶f÷ÅÏJˆ*ù¥tÅ* åY!æú§À̶‚0C…ÆÔ)äÔ023FØEKö$v ‰[#¿«QÁ½ÇGj ?¶÷¾Œâq(®ßch–)ŽT8nàuÍõVÍpí¥ä’âÿÅÏÄlæ¯1>Ú¯OcåïÜ ¿öSo)]ôïw3_qB0³2ìrêÀÒ1Œ ó6‰[æ;¸wT(`c5ïû´Zò…‡U‡¼EŒ¥w—Í¥®0R¿;=WjhxF>j·Íd8DÈtàÔ¨­õ웋ß_u°{C©ïò•~Ÿz·¦)FËz÷I{ñ„«OLìñqÑ£VzO¶— õ.Íõ„«OìUšÄæZîιãûäчìy:š‹ÇÔš^ž‘»~nõëmˆn¯IX¼ÁÀ©`7êŠnǪýØe¨>õ¨ ½ûb¤÷¸ÂºÝõ]0î|ôº.VNV°°ö¢HYí±·5p›¶óÓ}øÃõxP¿+'ùþŒþY﹨¨ÒvíKPrÎD0€bsÎYÏÿC»×»Ö~öŸË9±g[–XÜ55jñ\z“ò‰ñ’ÆQ÷¥B÷_T†ï%­¡Ð-0C£ƒ×Jïeâ•dúq'¦ÍK^5…½kt ñÜP²ú=8ú;Ò ~.•«phqãõi{#Ö]9oÕ ¥ZCÑJ»ZiïæUB–o•Ý;GWhâ'ì;Ö š9¦ÿÃOŒ^3i;YYÅx(­#§gw,¡³l5ñöÎÂíJS?¹ûõš­ñÇhtp9z§ýel©ZsuXŸ!Æ´î®ýUmIø»ZùÑ»T7jïQ%’Töæ¶P¡§7"8…¼pgßñÛ°îKy4)÷J•}YeÅïâ ï“A\ϨÖâqû²dÐÚ̓ús>*v–I+Ûnô ÆËlS≋…\m<9!ÓèÙT!2æW‡aV«a¸àV«]¯V%•8®„ÃÎ×Μ³$àÎÔ¿Q«µ/5Vûò“»]Ëjûóö>Ž\ôŒ…G•&ÜD-Ù7ÈwçN©ãzÔcí§vÖY% Ó *¹(Õrp¢ÿ°fÇûëd½ßùÍ “ëízú6¼ÄDæ5†ëóÏÔá]ð©aC+_9Ô,,8*\ dºš/“§ü<ì*e=F^2º·=3WJ“yaRrlz3V“ÜÍkÿC™R&Ë=V âm}èñžn vMÏ\š±6nÍ”?ÍÔÙ¼¸SKQù»BR…Ù ¬øcBP0»U’·…\[ÞRÛƒ\=­h¹zöÝËú_¬Æµ 99œz^¦×k>Û;¯`†ÜzV6Žt¦TêéWgs›íí°¡n,^’¾w MIcîFoíåôQCt#Œ)m|îðšl5už;ØjiúñU¸וct,.%òÖœ­åZ>s•ɽI‡pÏJ‘¦; vmñtq¨Ôm$ýn©FQ˜à÷‡/Ôƒ.oàb z±™AikÞ¬ÏÒèÃσžÏ«6Qn/ J'½ª—CPeåâ”Ц(o›Îoö92yKé097¤È…ûK—âù4>‰q‚eEÁ )áN|½ÓûzS#d%ÈäÆÁä¦Tû Ÿ©&¶¼kÖŽœ–îT.ÈákK('·5⮋}˜\ÏæmÌl ™/ôì½³QçËè¨"Xç®àTü‘k$SÜ“¢ñ…/Ð]/Êã£ã‰B#® wýкYx*È[ÿÀ¿j›ïדÐ<Ákï™Îƒ„‹¸‘¹žs#kWäFv¬s#'[åAúƒ!P_›V|?Ä!ÒCíà^™sžójÁthA†>×Ú4W›«ÞRX(x‡Ýý:í%œ¥F†}ˆ—ª•[dîQƒºìˆp׸׏àð[¨ð:µxp˜'Üh€m9K¯>¹|憲ӭ¯²níZcÝzkÊ™zžu#Gc]oõ J·•úSa´Šåw¿YÇOË”¦TæÜ¢Ý0ËoãUµÚTè/Uä$ÌÒþ¿L¤†wY‹­Êz'Ü÷« hàÍ¿ ñzEÁø Qf¸Ñ¾õ-n9«·³¸¼|v¨ˆu×µ[¬¬–Ì’$oLù™À :À$z£÷zc(#ºš£½±™Þˆ5/Eì3h¥ã÷Ê´»h‚›U·™Y­LÆ%$ú4c‰ ñÔG}þ ¢Eg!×'`*qÑ`$<ÄÖ‚—^?ÎÜXX<9ë~Ͳ³RfK0M±Å•.0˸¡3¾0-1èý^§73¡GWKÑœ&áó™Ú¯µï,*¬lyŠ‘ì2yz>äéu|’§ÓT Fó(ÖÊTXòüÎîVœEÓVZG_÷Üi²Oê2Þú㡹kø ‡Yv!¦³ô‰ æ•!o0℃rô7φ-Õ•=³ fÌ º:Ù`4YϰԦ*ÉóBÍqÙ/’BZ;·ëþ{c…èt2zZ+qþ*4x±âšÏnq€õßX²ÃI̬'–cø–c‹G,Ç¡ f–fê‹– Ž^¬æ¤–ê•ò¸wSœýf@˜½é0¯ÍãÇ÷{s(n¢´@V¼ñhLYÏDGtmÐëSl»7!î^¸ ºHo‹¿ZË >¯/\{B9ôyy>ƒYÈPÁr듃¦êJ•Zxî–Èb ?²¾þªšÕtxgpEinàuoLÀëˆÖd^vøEš§b±ìÁf:_áû.nK?­jAó!›«£2¹5WPsïæÇäeðwÚØèA~+,_b–è 6öh1®Þ¥Ðû åû BÐî‡7%†‡«pI‡‰Õ°\Üï¸ú¤Hï×çÂ)R …&{” ÜÕ«A×¶€®u)pÓ¥Rh<ŠÎÿXâýDŸ•ÜZ:p›ÏµˆëÐMÍ)µJø;Ûɉ›Š¯ S1Ë ª±ÌL e^b6þé!~s›Àdm5+¨ÃªÈ ž‡ÂÙ€o…8+ƒQ±ÀOæßâºÕ³2Ô¡%’Ní0ÿl>†ù¾àîóêý‘^>]1÷‰ —°óq.Aç¹ÜÇðż:¼:yµyu«çg¡åͶc_²ˆ`$×GÊK—’ñÀ±ó½z²åynOêîŠèµO3lü1oƒbT«u¡;Wç_Õh‘MŠÃ9¯³¯Âl«+çD}Z* ByQ‰Õ÷O2§Ãäu$ž¾¾Á&ýÓI+¬Y±ÁÆÐý•$y}O\¾_[f––°Ê 3v 6%ó ªpí ˆÕ4ˆ B¦ägW£•â´Ä­’þ“;Mb·v1óz€˜ó@ HªžbV*»>÷ÕÓœF÷i›ºwÕ v"¤¶”-ü2¦FöŸdgúºà¹Ž{@ÖëÇ¶ØøTWPÏ…æy£|˜eçd²Ûгä^Û¤¨ù˜ßù@A’â·g1 (ÈHáWR\{€¢Ë@1ybÁŠ Ò'Px ¨Ìæ¨ìFä],§hD¥*• mñtvô’¸äsaC &üAXܗ󔈌n%à; ›AýZäÃÇÒrí}>W´wY¤ú\ê- @£ð-ó4çe­'E@—? ›ª”bè:A£­ GÈ1ÅôØ‘=Á¾!@€îl–€î6Ó?EÐQ!ý÷‘7pï™Æv[RÉÏ@™=Ç¡ù,A]kò³n#Ûz…jëé€{äÜúé–©Üü3` j Ù¿ÆiþBgöI?ˆ˜.‰fj“€ÙõxÀÜ:` ˬ¸kV’瀵ÏwÀ: X3RœÒ'Jƒ`5¥X¨)V1`y~fËÖ©©#ƒÕ7Zͣŗ¨ŒBŸU‰'ÌrD¡øù‚ŦR„ èå`±šv}ÿÕ¡Óñ°+¿ðç°ØÏ›a§‰2à¼rúþ¢‘ ¸òSn¹W<|Þž~ÏHtŠ« xm:¼ÝÏSDŠƒ xÁn¦x/ŒéyÖRNãs]̆¹2K•E›Ôͪ†nªs±ØÞçÈÄT)‹Ä¿:té„n^¤OZÜ_Í÷‡jK|{ ý•€o¹b'ø¸ÿÜBbL𹞀ȶ @Ô9 ˆå{ ˆ~Ä8úE‹-ILq­±jõS¬WZ-wHýÖæÖg3¢zíF‡§›!õ"-‡vsòß6ýñ¯çø—wü|ÿ¨¾Åþ/ú?êï7jøoÊp¯¤v~¤kydîõþ»\¢Ù@^g;@¾,÷@ɤ=¡`e (8ÒŠÐ_¤øœþÑN=ì‡?zÚOøý2ðOL/=ýå7<’BývŸ •÷ª6ó78ªÂWÿRůX«Í\ª&>¨¡t?mít6ÛÖ)νãÍWŽÒrúØæ+wÔ]~²Ohq·Ï6»Ÿ¶[ÿ üÉCø"ëµäS*ÿ~-_ Ï~¶Æ îöšŒo¥=?¼b1ùu?\È.¶>3Cøpâ'ÙËQšßî‡>r{ï?•Kfoìù}6¼Ã»ôƒoçÂÞøï)»ÞkyMNvÆ**¼Ê˳7–ü6/:4öZH§9=Ƙ1ï Ù¯kè÷øßÃÿ#Ÿþ´éû¤xA¯þ±Až’ËŸÎZE?Þ¬†wèÕÚ>[Û9¶7þóÑ[×À~¸:X›ñŠ™mæË^~×­-nÁl»èà›ãüYßüŸ[ö–›e;dj¿az27$eOBo¼r‹ý1¶ÜÝGÛ@AF5\Çÿÿ£Þàêý{÷tVéëA]ô®;û`¿6þƒÊ­ÉAV̧7?'ÌŸ5 Î>ÑÝœ—»;ˆw õ.ÕIés 'prÇAîÞmÝûpTƒ ³ä ë„Ù±§aLkÏŸ¤Ú¬ä~G÷Ÿ]Öê«ïç°÷IªÇÿ¸dÿÏ*û§•½Ïísõý±“•Æ[8Æ˳­wçÏJ1™§ëljßÞ»I鹎Wú­¶œOå,œ0›,>~ܘa¿ M‡³ŽWÜìÚ« ÿlxmmCÂiÕ˜u¯E^¨U|há__çïñ‡__^±¨¼;¨óÃ`Mˆ`ÞÇ1{2—jöhkánÁHuãTkСÙaÿÙÔæ½OGÞôŒ—vìNtóÖu2Þ«3·Ë™ŽÕ¡öÊ«|ûµ¤·¶•Óª#1>„ =fÎÇRóÜBÂ&ÿ{ŽZ›GÏduŽ´¼ ‡Ÿ9섉6ÓŸNƒqƒÇ—ó¡¿õÓókƒV§Ž)£­é~‡ÎáÙÏSýg4fz‰Ø»uhv¼\Ûk¯Üq½-7íV ÛâCí4‰™ãiÑ<7›&½î·NæÒžï{ô?‘–Áòab3hhB>WŸxm­­—ß…1µyµØ¬ÁwR ØÝ¥Š]GL» NeÛ©ÕþÅ©eÕÏ«SŽêO‹Šä /÷…ÐÏÖuv‡´ƒø(߯,ª8Ö5LmQëÊ5äµ°ª}íU‰Ì½V©Û÷F…¦  Ñ( Ž£¾Fe¿Õf—¾(™ûrw^»•o‘õëîeHV*ž}¯”מ-w–in\wÛÄÝb5œ¥¢xÿbuöàõ¸FÏ¢~vy×[‡°J6že'Ž?µoÉQŸu.‡º{\œj‹ëàV­Ì‡ R¿,á ñX’þU= ¾¸zkåGuÊÊ-{ï«yú™kx™Xï”ìœ;,å§­¹[*Žvβy¹;¾ÀAö¦[¡íª{ùnëfíÏZh…ñyf…£OÑbì¦bžÉ½û/ X›;G¬ÚÁ®ÒxÉO,,¨÷Lu{Ê]+‘äî‚3s]<~Úû½¿”Uãññ ç •Æ'økç)ÙM‰sg7UvK’ᬠU×ñíÀÞ¢½Ð®nf-ë †Vø*.̳ÎÌí~Œ[ûÙR ¹p¬èÏ¥7Òû±—Õ5 STñ½·V.€Iß"æA‹ƒòR8mÇHu×>A‹œË/ó½)ƒ¢?ó̬´,9~çz(qVíÒÇÁžQÁ®i1fÒ‘ÒŠ*[É<ï·š‡7ÛXÈ7:#ò[@²¥¶õþ¾:Òµp¹ÑF ×Ì‘_Ôr•« NIËS端ç—ZXN8µ°"í¿H`k\o FÝrâ”›J<êhä Á5-²ÊzE<–¦Ãö÷zã–¡çØY#“±½Ë÷Ö‘Iv¯®f+wû÷€Œ.Œcú+ h} ˜¢ºŽ¦”š­™ï¾¯NýU¤ºØ§§îÆB)+Í“‚ÂÙœ¼>‡¬\‰ßßN“ «Õ‘ ;¾Kû‚L§X™2ᜭ’Ö‡´÷n¡]Ÿ¯†b¡è+Ïû³4S3u¤…]%#ë8“ûf+¦F·N-õ×IØëºáݵÑ$ø^4ËéBêt1@U·qd”Åõ((åÐTÆySpªreÑiI{î0–ê7r÷»£/žê$%6éž)r.y€ŸD>“#SÄFŠNúÄ52ïÉõ{Ç£Õ,ÝÆ06¸¾7^®olövÈeçæµd‡ñêêÃÂ1ÑÆèzªå«ÇµêîGeÉ»‚ŽQ ol± W! “öžKK!Ò%ú²0ÄSëþ:Ŧ-4DžŒ‡B;Ú®IW_ü33Çø'fë|oûhðj}´åÕp€ñ½ƒ¬¥0úãA¯KÕSÇì'ã?T*ÍÜ›} š;‹·3£à_šž9vÛZþZï©Åge¤`ÀÉÕJc+í÷ݳÄ0ƒG:[±_ ÂõþÀ„öŒ`©¤+ü“i9|ï¼®òêïrŸJ¼äâsçŒg á²ýÂe½o,(;1¬;1­ôð¤‡GˆþCï˜Ûøx–U=xsºœÈVÎ `åfËöÖx–’™ž¥v=už©´N´d²’ïKá>?›ŸâBäq/trÊ7H“ºÊƒïý ¯ž†0÷inH.1ó"gæD“Ëî;©ïZ¬£ 3ú$f¾f‹)VãU*ƒPù9ãÕi8Å4=æ®Uf>½h]¬ÅÑÄ*~Ç´Jl¤7ˆ9§Ð7³S%7zSuÎu» 6'béo"1Vfá¶Ü ùçv6á5j³â>ÇÇ3¹÷•Ëeé;™ëÔš8[ f3?>4ÆrßS€AŒzƒ^c÷1ìÌ#<D㽚@í´¬Ÿb?¥vú ¢vFY ñæ@ý¡}HnÍŸ%>èôd¢äµÞ›u®£€6šS& Y)Н_ç½(¸Íñ~ÌÙîræ ”°S4œ³Îf¸eäøÄxÏë“AP–^ëJí.Ã;UomE‹Ïy‚’lÌK"ÉyC‹¸r™Ѻê=Bl/ÖøCÞx¯p¤qeé8¸²"¸2">xœüÁòÍ—¡Õ«GÇVʹÉñ;r¨sëc*™ÞYsñd¥à×ûXsï6¯Õ—§°:³« ½!Î1µW]ŠNCòT$·Ç¶Ä5Em¦ô$ÄO?‡?’-Š÷¬,‹«„¡cï}ï;adžá»¬»À2—Ëë:žàj;Û.j+û:î5),³?I?4¬¨VZeR.--Äæ„ÊÇÈ@¥“Z®Ç+é­Çü[¹v8kë7™¥öù~=iâÑ©§s·\Ü&$7êá½SŒ«ÍÕûð·=6¼Ã7̘j˺µ":)N(Ô^>eŠÕ2†M¤ô(N¸×ºÂ+ EàŒ4›1ŒMüoÉûw ‡WxUHŸl‹a¹Òòý7qÝÊØ‚͇"¾µÂ¢i.Å«7ó™å©Ë–äRLW[·<3Qv© –¤S6,{£Ú¨#S}´PðfÈ|}KuÄ+ON‚ðê†äà £a0.Ç|qû:˜ÅÚRªŽX{Xˆvè1ŦX`K¢]à{]Ðì¹Àês¤5Iþ‡ZýL”ÊÖ9âíS„¡‘ÿew/+ðQf²ß¼Ë`ÂÙÍGŸÁF‹b·! ^ KÞHYHÇ:\a×Í⮵hëâeX¤!d^8Î…m¡á9ç‡tÞÐe½+@­6N§ˆ4H”Îßû7ùûKí廃ý.¯¥\^1‹bîuTs¯G›O ×B^¶L¾ëd…JÛÙ8%ߥX«غ]½¾”j÷y”øš¼æ¢5eáíi@Em¾Mt>Û&6roɳ  ^7(pûJµÕF ?Ý^þ‘,Æù^ðZåU9¤ðž¹÷~Ï Ã ‘3XJÊe.Q)k‹‡8›‹Ì¬}eJ\‰ËöÕηëa¦„o¿öÑL)O!)<Ú7Ú†é¸;c|Ü!¤ÁÑø)GÅÛIè—‘5W`*3ºöÚ'Ä}Îtñ ¾j¡Å¦Ù€‰ç½^à­z%ÿ,Õ£\ÔÛÙIÝêfº<ÌÌ›•¯¤šñøî:ßÖ'°ê‚ÀÞ”¢A쌵:À·|“ î€i)`ÚÀI‘tÿø·#\„ä`“,þî#d¹ä±R,˜ÍtŸÐ ·Ü´»¿þW‡vÂ`&³?/s;½›}üãB6É,`»ظGvuå{AeÀ!pÚ½þOâÄg¸f'¸D7ʤçh·ܸ•ÜDNu¶eÀuÕ¯:¨á¶`K íªœšN0ô®e <„Ìòr…}­Ðpæ¯ý¯àûóÿp hÀ=9æ¯Öú‹¨.¾¶Àwr.à·fت „À˜!¾Þ€0j¢@؈FŠW ·í÷~z졦ǧO%‘¯‘ç ?pÖ:é„å’2²ï×ø‚º\PùU&¿ƒ µß£›õmÌŸ&Œ§ò_³ñOóý7lâ_õ÷ߨa÷\âÌè‰ØOÔ¶÷‘æiQfÖ¾ò+üÈíü+Å)=<T<¥†@îÖVÿxcÆÓßÊýŸ«w+>Ÿ:ã¤èEϧ‘>Õ ½|dËèþ6'ÞçëŠy<®Xüø\ª÷ç×py>(Ïâ™ÞÐÓÙÌR'~òa7–ŽÒÖOŸ±êVò÷ e„» g|÷kN¶psÜ™&±Þ:s]+(•ÿ$"|7[ÜBßþO¾ÀO›,d~FÙŸùaÌ"ù5ë×ãàŠ5ûÍóAŽ{§8ã%ÇäÌ}D^¦j³Ï†ÔagŸñóv. ·ÍJÏ 6x}ÖµÌ;·:8™¯ž¶byb£¿è„:FziÞg§ñìÓ–73ãгì §Ýù '# ShLñÿë’5¦‹ìÕ?3çð±Ìof=ô‹íoRßþãÏ”}lšÿÉ;kry+fú©,ùå¹þÇ*û¬Úó>uëÏ>s23®çé,Ûþ¬¦öó³›Ìuè2ÇØk@24Úz1ª!+%9TùZÂ3›Ÿl×h‚aÌ CþÚ†þàûë¿­¼ÛKêzfº§ÕA]Hë-‹ÕÁ(¬—q!wZtÐÂsÞ'ÑÜ̸dà©}“ÒûDWƉc““üGR}è#rqµ’Cù]J˜Í;øã–åÅxÐáˆþ@ºZ³~_ªl{ŸþàÖ3Á)רÓu …zg^îÏ;s¾üÇ%ûýõß&~uèoÂv΀撟mª³„æ«“¹t®°mjùÃ09”>‹„YÃû!¿‡.éô¼÷Ÿ1úê½ë%J®Ð3ÞÚË)2-€(¶ Md©ãd­½*›_ù¡m‚Jk[´Zäáć³™kõÙŒå,Õä_×Zã6´’Ÿ7ö:†;ùµòÄ«ÓõV¶ªó>öÑ'pïÂ%QÑò-ôû\Fï%Rþ»Ž ;ÑŠµ®ÄVÇËsýöª$ŽÛØJY´j¸¸n‘;}G´rŠ™“{ož›•w“¿U³[§]lH¯!='!Ò²#LÚÍB£]Ÿ”w³:´nµyúš,j”k“mÖàÓ­ñÃù fV¿V¦çr$'·ˆ¤Ÿí÷C®ãeƒ|;(xH«†t‘Øk`–LÂI«Ö'³-å 0ìNŽ¡b¬þ°âœWw´O˸žu8‘­ú-Ê4ºÚ%m§›0wtWu§]\§ŸÄl] „Ù×]©¹›Gp8}r+@ˆO1Ò\‰/wNª\–›%Ã{ñ¡ëijÙΰ^2㸔+Ÿ®s+.ÜBÇ:9åÂ8ã '”´+|Y³ñÛ¥fí¦“•µÛ÷¨zN ྤü0G\sÐë¾Ôvµg` µò|×KÎñP­JÅE…Nü$8åŒqpìs¿e0ër·&¼ACzx™Œ—-Æ1\ÊCÂÎ'¬ëFçï(à,.Í)·ž¶ƒJ°oWúXÝÚ#éÅ©¾Ç托mÍÆ¡ø4®šmä!â¦RÕ5a©÷¼¢Ã¥H„ÆÕSXëA“†Üì8[¸>£oÉñÓwýÞ›•ÕÆgàRÐòôC­_#µ±;#‚…³d‚ƒ&«½1W›˜îòÖÞ½#VçHó#œÙXÙ¸vÃh+NI,ãºÞó·]í}‡¾w µa×?kÙâ6§ŽW«Úñ¾¤Bbk¤Bv7£BŤ¸Â*í]†£äªµ~÷åVfãåxfâÎûqÏYY¹¦ƒ¹‹†½Y®»Öþ¶þª#_fsðÚ·,8í-ûÒŸ”˜Õ{G«¨«ƒ¡%™£㑤N …¡ÚGPV¡†ÐP¼L”(ðæ³—W5/½ö¿¶¤´–´]q©VA^)Fßû7é㎑¶ë;;ÐF+?¾”f\}á!ù e¯¯žU®\d~Ù;QîZÑrÚ0Ï[¥jò/=6¤+ÝÑû¶>Ò>sw‘– å­–]·Îꤵ~©Ðc“Qæ½ë÷LS<-Ë«5ÁÊAE‘e\l9R­7­J”‡ôÄ#R[‰Ñåó.¶‡ 2„VaÖZôî!´˜2ž¢Ë-¸A÷\Ø,5¡ÊÖá˜+§ãs©È‡_Ú®·:‰yYÞÛFW¶B}€\ˆ›šf¦—~ÕI6]e‘;ĽÎå5ƒîäà,^¤ >¤Ú½”‘¨nXéÉ"²Ë '\â¢.´ËÄÜ¢ÍwCä»NšW˜èʽ‚¤˜¨Ü`l7¹Á¶žNÆv(Ê ¦"ŽsÝEqÜF'˜ªœ”AÖâ×_Ì,,®ç îmÝÖuH‡À}»¬Î%_AvF]®ÐÆw¶&í†~O¢³áXͽ©™Â Žo—Ó‡VƒËë ;Æå3kíÖ6ß3%f¦eCf¦Ol~°‡Ùü°ø5'ýÛõÅ Ýë™ Ú¼J³8Ù¡/ŒGB týÕj©³ü¾ª,>~Y®L³ŽT_ÂU±±ù„•üĂ؀úüƒ#ǼÒfÜÛ.í¹!^8}>üª\&ºA옃qÖÎØ›ßÌlfVË×™’Ü1Å78ÒËe#OûAA 1|^£1bs ýj³bOÒËq:~r›†Y÷¥é«2þq}ÿt°š­Û\ÿä _Zƒ2V¬øÌ¸*S¬$ž+[¸¶çeþÑïWxôCnhMÚ\f6é³6³°ùómÉÌZО)Yêóµ ”^ –öû%ƒÆ´Y…Ú¦-UÝŒ¾ž[ŠìˆYò ¯92|{~ª[ò IéQø¡ù˜‹zdkxÙˆ^o§º]L©7™éYùÒWa[ŒeR¨VÄfãì ’Y¼ê9gTLŸµ{ò7h†…T¯É”’ K¯rÁö§Õ·[jK?ÏTõüSDEŠ\miòPU2«>É<®]âÜ·ÖDìÝ?„€Vhü¶E<ü¶cÖ„€²DlÙøéË4>¡W΋zözý²£B{o¨çhªAƒu_Þªï†xvŠ ç.—°²ÉNÄœÁÌKˆG¯ü—OcÛWÚv©E¾Ù>yš2òã5Éb“#qÞž¿3i"îâ¹5‚܃Œßa²„wVí.·Ð%ö/¬ÿ¤ILëï\LœXÿ=Ø‹Á°"{ºT‚[ˆ %xßzZ±^Úé¦àMUøÚíI‡äôͶnK¾’VW5‡u,Üdz­Ñ8¿°)Ê™zdt\WI¶qiñõÞ!„N!ÁÀ»o‡Ë‹Î{5.lÀ#¦g“­Ž\&B­âxŠæÎÊož;?pdÚjÙÈ´ÝŸ¡¹méb‹ VöŒ†ð²)ÿ¢YœíJ¹›rzªý$syût»â%·lðým6` –`ÓkúbPu¬«‘ ¹a­r£„w«î×΃+R7ÄýnŒéÚ¢eÀe‚Ž6ȵªò Í“µ2};@¤¨{:¼ÌjpybŒ`´ö¸Àh½7 g+k$)nçFu¯—¤V«ñß5¿hûˆÓwC›ÃÛ?’ùQSº?ÉœIŸ S&4—Ú-ïÉÉ ï^QB´ŽY´„Ú@¬ 3K‰R¾ÜAгV/Ãõö™×F/Ô·ÓŠ›V9W¬Z ¢HBˆRØÏ£ –³ƒƒ6Ði‹A)N*Ô¬¯ûÐiÖ¿ˆ‚ ¡¤Á• {ãÑ,–p<]õÜê¼ù£—_Ft—-› vÚ?W~:´J¹dã¶¶ðGÃÕ1ƒÌ(Èlµ×áUîê·ôÆ+VO×j‘ŒóÍÂA {…ð® Ì´µ†Îîú Åpî“¢ŒBüj-æo-ÁËwÄy7Ÿ–ÃÛ·ï7÷l„bîÙt›yiåœR\rù@`ÿ5‹Y—€òyãu^ÔÅ.YË´´ |±Ëgø°É”/Û*EŸY¨© ¯®‰BQFƒ¼'¢fhBñÄÿN< ¡ÖöSlÂüz´óšä妲HÑ=æ^üñ•ë߉bNëVØlò^˜Y3Ùœ¹]d¦yû•qf:ãôg~fòÚ­3“·üÈæèA¾œÇqÊæ‚Þw&ýKeQ6t¼–¸þtÌ¿Ã|9v“&‰y¸ ¬}ÓïT׆ƒämŽJ;­}²U3÷.TK9½\*ç2hµšmzͬU]ö2ÓÃ~œqùu¦È‰_Ï-(·« Ò¨¬()ŽU€*Ñ  yOq&Ê=€¢ƒ%@1<=†•³¿4s³§Ø@+!êY o-JÈh—ï>ƒ•¥˜<‡óïwÙï)€:ã‘WÑ)w ›=#¯Ü†NvÜË™â. Éú)˜z ¿ 0v9—_¥p/)6Y€ñ™bªLÃÏ9ÀÄá`¤ñs©bZX±°è{¾¯÷ ùÍ’ÅЊ‰äY:g½ ÿ±ºÿ‘ÌñW4Ði¯Á•ù((4 у$&_Ê}ø½›µ_½$£ °§ýÓlp¨¦Ç'Ó×Áeež¢±Kq¼\!€» à*e¥˜7®•V×ÉlŠ«ð´z8îmNh0Àó1mIkÕæÒû£Ôòüw&-ÊmûG2§›„èöù–¯'-x3a…æeQÏ?{åj.I¸J¶P{¿6=@döõï& 0º ÞÂhMá7€ˆ© ’Hqÿ-ü'F¦”âPĸÔÄ$¿O±)bÚ5ѓۀˆ # Y e[5’éÕ ËJñ¾ýRYB¨,Iq³™`v…Â[Ò+Ä¡—ï"Ù\î3hfкâDG€,êM@*õvŠÑõ×=| È™¶ä>>òqxŠ €’P2l¤h×¥ãë+ Ô ¨tB(ýbts¶•ãJúTÍà >9a°Ë>XtŽÉ]ßb“h³@ðž=+´:çq~ÈuFÙÙ\²;êþÕ¡-*}™–6ÔÈ™ý•~Ádós#Ï ¹ô;B—K@7úé±e–ô»*¦øð—Û€AÀ*EÿÔ“eÂïôXn–ôÃýDj?óö/"œ+-¡u¾hߣ3RÙä÷…vnòÆ›Ygi»ü¯=ÈîýâO€¡ìË_r­}LgøÌvóÌ=›,n ÿÄNœÀ®u p`WÿY{3Z’âv\6..§ê€Ë£¯3`Ÿ]pÓìk[—›¯=ÍO’òËÝþ删˜synñ–Y™[5Âóß6ýZr;½ÖÞŸðœØÐ_Çñ±OÏŒ{O™N”ky %î`âåÙמ-È7 ûgë°ÿ5Ê~-¨·ÒÜÎáú¥Éé¶OÐÙggh[ºLðõV˜3•ùÅÍÇåù³–Óæê1gÍ.÷OªìãUÌÕû×*{ùN Ç+ tÇØ,—Œj02OµM˜vžëÝì?‰AGô`’þ³·¿öûþÿŸnsèCÏáÆ¿Ý{?—ìרü ÞýÙ'ÌLgÙ8¿™Úwú2‡ùÇhk_?#rþÌ'Ìz[ÆÄòû39è0f oBÿ”¾zÿ½O+õŒYéNL©Ùurá°3wÇ˼||}6íU`Cml÷V[ÛðØkÕXsûäEØüðëÈ_+÷Æ:ê.ùYè̲¾>@AOîÚžý]yp«íêýgc×ê÷ù\ÒKd0ëN´ûWø60·Á©Ï^×öÊË=Û‚‚Ö¶R̵j LJÆãˆ±¸æ9®¨ÍX˜–·î%lH|õMoiù\&üÌ>f˜xÍ84‘aïoùMêûyywöžm¥Ýã•:¥‡1:,ô>-îN”'Úñ²[²¶|k[¾i­†•âC©ÆÌ‘‰š1Ç··6Ókt$)‰ž}~õ5u~FÒ:L,ûëL Í|x«OJÍwÝW…Ú<¸‘5xÉÕUè—ªØyW¶-qQ©It±B>wZ…|É•ñË”øéÐ#rJcý>›]hH^[[¯snžÓýwRx‹ÓâYº‹ÙH}sÅ01t24³¾>qêJZ4ÌÚ¼Üukð¦ëWWÕQ­‹FeM[•»ëWÈË}DXÌ“=ú±f>Ë·Q«PîXw¶,CÚ×sëõ½$ò4Ô^—>[N±”R\µ–çM&m?;®7L¾µƒ—¦ WQ_Î'¡ ®Ó:4›-j¼ÜV|vªlëûç׃’ 1ÌúNqýs—d|þñåÛ‘ËC5¼çD²½¾c—=­P­•’r3.™èrèNª×…ëPÜÙ™7¬ãqWÊo–i¯º mÊùjj§˜Ó?L§uæ»AÿuË“­Ý­ô‰Þ0~¨QtV­¨þ R»[ÁaÐéøç¶×óùg0*w´xé=Gý½§å“K))%’ ¯; Öy×Á° í^„3sŒã1¸h¯bê{CÒÓµ¶Ý jÕÜUÇ<¬²33Š«“Îy#ž©œÏ3!4ÀÆ`Ë–ÁG´§i¥h ž8¹×–åò:8é»”'mïMR¡7辋–2:vHiSÃ<©Jç)F/©ªæ éOo¨É"ßx6‚ï’ßv¼ŸËÏ]o^‚ž½­¯#+ÊrÙœ“GJ¦É­CÏgv ÷˜j¤½ãfGÓïí¡–éÎfêXÙ§=1<”Y¿)%œx+Åš—}Ú@dôÝûvšT5fŠDâhY ëV,2Êq.œ>ÚMh®.¨ÀW"SàÛéÀwôGŠaþ‡¶¾²QB²Ön=shÏœ`íõ,ÖïFF§ÿðõ¾U²µûùžišá¯t-›=»*TX••tP ˜‡Ú²ß2&3ió2VRuÄ^Äp3|‰Lû Íçø…*ð·rÏæ¥ë#䞓ʄë;÷3§Ñõ"û9ãß—a?&áxߨÏUÊrgçZQoÈÔ½Õø]DÜ» šXÇé]J©ë 2.«“3dª…ìDU<Ê“åU¹fÉØØq$òàøâ!Š#‘¹Ä-áÜš|ÕA!¶ÎSAÈV|:ïy™åoÜóâ¥5àh‚pšõdÙäÀ謵«lNGfŠŽŒ³¥!¦P[ËL¡~è3…°ybœœý!b›ªá»øSÖ‰üWt*Þal¶š—¶®sÅš: «žRÎÞL98ŠT^ñ×/@/Ì•L— Þ§‘DzO­û⎪hË U)7DŠÀ‚6U ŒcŠm†Z'‡Lc @D帔_žUì~~h£»¶4«õ®)åX*ɵ2%ê*ÈÂ%\|ËAþw^¾4n  L G%ÖÊŽfêLCÆ-ìZLá”Ò‹&5£ËFÚYh¶s¥ÖÛKÚ’:ŽR„‰ä¾øñÈúÊïtðX'1,6ž(K4^ø·²!N ´O~HºÞ‘Å­°àšEž¥¢?ÜXÍ|<Ò‡T·¥{˪\¹“¥oÖŒ!´zw‘WÌ:Ëé®È°–/JÌtË©L‘âLºÜà\å¬ Ui[_EØ­ET/crOVé$P;‘ô ~§ò&šËÜ-qðk‹ñ¶2\â̽°ÇjOcõ.Ä%tµÅ%ŒámÃø„n;Áüty¸è¤º6Ûªó½£ËåXAÏíŠDÏŽÐ&eWVk‘ËÔ-–™qé a)=xí_%ªŠ<4r_yÛdHËÄ)BkDSSâ­!Á#»~Ý€=ÞnË\’Zö„^_¿Ö[˜&¦–·úáKstx{<Ðá}H¡F¯ Ãgm~ÈÏýPðûçÞ/µéÝ!^êÊèÅìPŦLâ¥@乕Ã÷"Jã2÷È” ”¡}ûÿ‘õ–ëªÛÖ¨¸»+ Üàîzÿ'dεçúöþó`N€¤ª¥UëÛß7M(×W2_kOuîü웜š›zì<äØÎúYb^:ÚH`õ™þ³3ö|¹£¿¹÷Ë.B{×!OÃÄ¡â U¥BœŒ)lÙ¿‘‹¢Ê‹ˆÎSØFøÅPS!µ~P!8¾Ë‡¶@æƒLõž¹@äÊ=¨‘µÆ¸¦QÛçJšQîÊèŠ;ÒüSЄù£Óç¹K&àØ{-yá×80˜_tè﬘¡ÇÕQ‘öÅÕoîIÃçg‡Š[Ĉ ý̊‘ö‰\ì_2_Ói’J†±ÄúÊFD4YŒ‰hš»lð¥ð=¾ ÖÚ̈¨^‰õ¡û*©âË‘¶rõïú}é§ý½ü'¦´5R|7”cííˆkÏÕøãà q­R™gM›a'â%Úï15#“J¦>…ƒ¹T›e2Ÿ·Hª{Ñû3#Ø•uÀ÷ÅÆ¯27¯²i÷8\x< Ø©_b ;%X“˜Õ2XCmÇØ©%\°Sä<‹/µ†;ºx;™Sä•Ù •̵n‘‰R½\ZôNްÛY:w¥¶2Û}´Ò5«Üy²àîdb³=êD©|·ñýë›Á«C¦€‹®QMÐìbgh5Å;t‹)÷ž`‹£í3!'f“"÷\ÈSP¤÷âmäiêCT¯\ƒ[T¯ÊÉw‘ ™.ž]̭߯¨œ UþIæñ5 Åõgéð'S7ØG{¥0®ˆ4Ê’I‰Ë˜ÁAWÄ΃®Š5±‰©`í¡·Í+‡vÊi‚?jðF+AgŒ<‡5ÒoÄVrü¹myxÔÕ=Ø3÷Mh:2—Pà]>P uhÚž¶ iG_ÂÐvxÎåK7à?èòÑÁ³æÌênO{Xº2ÁŽ?Ûµ´ÔÍPØg.×.Ð3`¤{0YLÞ®¦Þéfp›f(®4® >`F% 0c$¤]°˜IpL‡$œ=ÀT†=ÀTã7`råÆêiñD¼7T,T˜$†©ÅœW¿Ý*3>#UÀÚyBÔéÓW« òÙ5}8ڈЋ ˜ç=uB²<$°ó€5jeÀ–“í<;€Å`w¥`ï›àùý2k$ûR‡€Ã¡+`ß[°çj°gØ'¸È™ï§Ñ,µóú¨Ù›ÍB&ïÏ‘ —.ë²ã&µ‚©*!^ 3jzûPZœFÉ MsYÀAýà”U¸Â­ ¸&ZÜHonUüñ!óÄc x;MN|­ûü$·‘˜àå~˜«~„Î,߀o5TÀ·ý*àËä*Á+yr8µíÈY}ôû}|RÂùl%гŸ¼=¤I"îÒIhaf)Õl Ùk€Í­$uÐÉ‹‹Ù૽.àgË>à×ÿ¸ÁBÆY¡ÝÝa²;áF>Hça ºGˆMÏL°-±•é1zìXb©@ä] V¼änós¢µe€(5BSžßêdغHÜx¹ã^0º¤íòŒhÀÇ1fê#=ÊCPÞÏzË)iñߌÿÇxœnfIÿ*­ÿâ'*«/f$¤GÀ™ÿR†õ Á¬äròjrùrr¥Ë¹Z,9§Ï€ì€O‚‰d×ÌêÖ¥ÉÅN÷§Có÷ÙéÌ„oqOеþ³³ü Án÷ÕeüOY¿JþHЩðœzŽS“ï?§ïÿH¿ÿ¥úÖ>¿œaWO­½Ø2ÔP(5Þ :óö ¾PçS¨ƒB¨CsÔ&Nu´¶:¶Ë*öài ì”Þi˜5ö¦ˆ’µæ×¿…¥~èÿèБŠü?fãîÒœ‰Âï?Ïo*ø~e Ûjè‡Ãè¯Â8ÇCxä€a-~£N`äú/`ä‹ 0b” ×ý¿òiêïMÃîÖkI¹ç7jO8Ÿëþ'Œ¯|^^¤ák{V§ÇÃÉXħ´‰XêR- ïÐ}ïc©í±VÛ%ßqjËŒªü†KʺŽÝU‹žå—÷ Ò^§Á~1PóÌŸôû~wR¤.ÙTCý_uþtè ÐG°šà·µ%¯å›Ë_j¯¬~¾8_ë0%+uYBRIµœ!çcYdf±N 3¬OüO°,jM™äN*ø'3áWhn\gПU­ŽÔÝve4xu2ËýjŸûßÁêû+öáX«õâ,¼Mûýnz!aßÿ[I·q²§»Ä;²¹©¯Ôù<š«Fi†u.å˜Ü[Ó‚‡“]ÀÌÇÇ<³µØ×aØ/—Á«yy ìûñÝ›{Ð÷Þ§´;vìîñ^=˜î"¸òÝ<ލu·:m†í]9ª´“Án·U—/ó–tónÍKæš- ª6ÕO#þ—%›"uÉžŒ˜Ÿ¬.ZœÃÈHÄ~I©Û§8xÕçr2ЇûS¯|·ù6þT»äìÙê0«s¯½+~Æm~÷Œ[uá¶hI§Ï¦yiBû¦z‡Î{—¸7Œ7ý©¿†Zw €©}§}5•T±ƒ_ D¹ÒÕaeQ~+‹*¥Tòâ"úã’ý¤™«Kfž‹sχœT×ÄúÞ£óꬃï³]¡vŸ–tèfKJް÷Ö†ktµ÷o3 ãÉ:uû‹gjß±¯ùUã,U©†„Шb+­SÉ3r¿BîÌq9œy™9EÛREi]Jüm÷ê&BEÒ;ÔŠ-7Î5Xêîñç\¸Ï>Rá>¯þº¹B"Ý—1ÙßKÉîc .9=ž[u¬ÆÝÕÆ.½ªÆ™Ï¦Š- c%OÑòºÄ}Ëçá¥]Í£Kü%¢c«¨Du­f/½²]lYÍ_C§¢úég ÷Ñ<*˜ð¼šÅ·NÞÁ?£Üw¥¬r>S¸äàÝɆ"-d±s/“Å.~/\´½w‚.:¼šb+¾ž:;ÉÄíÔ0™ì,),÷»~S!W—FiW·¢ºRùɧѠ¨¾êqá>ˆ7,Žù×ärÏ;èåû.œçq<o*—(.r‚”Ŧæ%ÓÉK‘Væ±nev}ò×=.Ãï€_Ï‚/£ç¬/c¥/ãÝwY^ÉãÛ–ºùOçÛ°Hd_)è«ItêÛEmJ• f®Ë;ˆUȳV9¯¬z6dÜN¸¨d~ T˜ª³< 7A¤ôös›]2»Îæ‘©§œa¿î|_†Ö»LÙÓ0×rï‹vÖ5©MÍym…±3(wŽ#àý= û{î7íqKߨßËæwLKþ>¾×8°-Ź<ªÙealëçG˜\ÏÎ…B¸\~‚ÚŽü`ý*så3™Š.åýc_-ûÒ×hx—qÐõZ~yäÞgåØíf›K×$F;çuÞþÖ­9ƒæóé8>Ùã™DØ~µ,Úˆ8·¬p å-Ü/tÌ%ûX™ùCø4©Ú›36κ`l ó…±)r—™Ww…JD}$9—RÍ^ÍòŸm·“Š»w{þTuÿœ\_iæwC^¶wí½|÷áu=×ÜÅ9g(,JŽsº4ì‰réØÙHÌÄÖ,TWVVÈ,üT»š¥ù2ih‡›f N0t}êgõêˆø]ÔÎpa®5âÇ]SªmVSjQASêÞ<Áö’àùh×Ôšš¢‹}nš]Pr+sTõÈ»ËÍÀíϾ¶3*Fªu)ÑLA³''Ù²Ñäs´²í÷nÌåˌ̠¬™´Si[Ð¥I<ÕÜn¥W÷½.ÖÉ›v–¯¦L*¤z+U?’¾ò¬×jJßEcù3-\äOLSò(|dåQöË£Zp–?óòï$Ý4 &T.ߪûüwÄOBæñnú]µ3vìÅ–µÀÅ"å½`õ*gÑ¡blí†fpë¡£×ØI ‹ûMA;W¯M9_ê­…ôÔŽ/OTñšÒÏæ÷Š-Žïòçü€eÏXFê¦4=À‘ÔjCqþýÄabnZðÄ\ŽÄüMîCÈs}̽¾Ñe nsapeŽŸeÃ}SÛ?â®EááïD`ì&WÙàç%N¯]hJ—|šÓš=BRoTU °”,úJ?vóòwKòèTmÈ^cØ“ae3‘bYKXHÅ…‹¹÷oMàˆU…ˆiåfý6ü®×ßò[‚øŠƒZ|ÅEúün8Þ%Øj¡´ø»ãÏ&KåC¿ 7ê΄ëä­üní{ZÐõú|"i­–ª÷î–PSŸPÊœ—¿å¾({ÇÎOR•bgjI!Øú6¹åÄE€–Å<¯4…uÝê ‘Ó˜ ,X&[Ýâ¾RΠ¼`l$î„;!W_îÚœ\ôÖìUý¶õ˜êlë9ë²WÃßpr¹u¬Rlô³ÄœÙj²“hú¡íY.—3KÂØÕOe\×´uITÍÄ(ƒåˆÇS‘â…AI8¥²b¾$ Âú &;¨æY+}~÷øÊxUá…ÔáNœøurõgiÍÉýÙ…½æi˜Õ6Žy´¯Ó3Â:c¾îsú½l¾è÷*Pè÷:Ûb’uÅôçPÞ‹Ú3ï:«Ì©/ôÜaC¬Z˵3ª…Š£µk'MµØÌï »†[ZFÊ&áu©Ö¢Ç‹æ÷Ö…å…ÑEäðEåäøk±×ª°mÑ+²Ú§Yg«Ã€éE蜱´Ì‘~?&z8§Ú͵m¢¨*5¹Æ¿%¿Ôä<©L©LnP“ÇfAC¾/5è÷=—UsKÿúÅ{Îd UÌ-ÂdõÆ6tÔ'¹Ñ7+ ÒlÚ¡Äå@„’¿†øj¶q§sL²×{‹fÛÝîÏyŸü»Ó. Æ*Ü=úÃ`9zx·«´Û-wh(ÜÆÔ”@wTæ\xQhsK’sM7Èr*“Ä<œ«ÜëJ¬òkžX5’b2ûÙï"›\³´)ý¼êÞS½ví9w«ójL¶•ßSåÌŠÄV¦„ÒÃRƒ§Œ‚/«Ç>ÊX'‡¤? ?ÙA7_ ¡N¤RÓ`ìP¶ ©Ÿ?€œ7Ô™SŠ¿¦A$ m7Ä*¦ïD1,c#B¾=7Šx¹E¬/8¯G ε2^î*S|»koS÷~˜|js÷S™u¬Un^Nõrõ9`mšUU)Ýxa›~aô¼¸?¢l§AL¿Â|èчh˜ ãA²ƒ^,Gæ¦B’NhkP÷‰âf]$˜Ò«Žïxi€—_µ%ÎìèªV§W Vg²LÚ½‡˜´ÿ,ŠhKÒhô’÷J˜´D' ²ÛüO™si§Q'ævÜ,é*Êçò¶dôã*©Z.ðT@sªµÃ˜þ·èÑ›üRÁõò%óè%"iOà»Öæ×ü¯øoP\ÃŽsÙIPÉaõÚ¢ŠÉÒ·‡Ér°@[íÎ mMÕ‚Ž„;œ›L… H ¿ñÝ·a'mˆcòlH%Øóh›8)h›¤lT[kòˆ¢R‚uééÌ/n 1Ÿ¹=<´§oØ ƒÉÈ…&Ò€2Ø~!CÿùŸ¼ Ml£•`4MÓÌ=»åL¬5¯´ô‹eDª½Ègä`¿±Äµª«T}õ©2ŒÃŒKI¨øä£d~ ’ñÑ|°Óx£í^GžD›B¬bƒ…?ÌP‚‡»»•‡C"•‡&g§¡^½æðq ˆ,yI0À‘3ŒŸ* œÞ®ŸNØ OÖá“M@h¹qšfîÂ=jlVd¨©u=¬¨ø”“‘Õ-캜Ê]6y“$CûqL’ÚÄvúÎ ´ƒ Q¤o IØc ˜nê„̹"HÈ’4¬û0[IPé’y-Éï ¾$ ¹NòL¯ë3Ÿºˆo¹—à¶L#dì|á42dmÛPÓ×O‡–ãˆëóÄæO8­±=´&2`-ñÇ4Á•M;×qíD›¤Êý†€½Õ„ 3Crh±€\–D@žfz‚·ȳœOPO*9_†€¼Ø›T‡¾¬ž€¼ÚÉ?]o oà wÎ{“š»5ÐÇ 蓲ôö§òeÞ4Á! oXkÏoæøs?áÜ%ÿÀ¢{õV<ÇÍ+ßíöÎ7?<Ýgr2Îüho„åÁ; ë},Ýn¡^Ûâ{xÚìÜáß&bÒb¯Ô͈\v¹ƒ´H7kþmëÑÜ{n~_èYìÌñ"À•É.*pcét#ÿoBýu'+ì÷Ê·WàÜü6ÑSé0'c¶Uc¦oîr7ÞÚ”¿k{-ͺÞJ]U~G襱ó³‹àæß†Yš{7¹2‹ ¹1 ^N7^8þ(&'ál¡õ]2n]ÇÇh¥Î%‡Çº?¼·Ë³á½c}‡ÆË€Ó^aûûüþË’ýÿþFLÜÖüð˜j¨¸4žlÊïå`u ªãå=ßX.Íð°°ÃÛ,Ö²Ï8÷Ñ¿ÓæáÉ.äñ ¿d¨q&©²˜0jñŒ2¼×I}h\1k0ÐÉŸž6°ŸF¡?¶ƒZ×z½™Ï»‹tî’ëÚI&kn'âåi‡9¶É­ñ1½•ºdŸ_?~ÿqÉÂ¥|wÕBûÙy2;µ¦k‡ýµâzøciµùÉ£s-Ô=õË”†ûŽLûÞëñÇ-ûŸ¾\§cgÛ_:yºw˜õãÝ®°O¨ÍP¼U—h¶yi)JS}dœF×jÆçÝ©|gYw×/E±ö]`AmœŸöþWœlª–ïrçkcaï.Nš$ûŸ Ú]x-¬KÆ]ºá±ÔÞÖF»B¿üV¿d›—ú=jª×{µÑÕ/?’ê+Ù°}ï×íïkTû÷iÍGáe ž3»jHòçÊ"2^•<[ÇÊëêB(3Ø)íZÅr‰Ü&ѱÿD£ã`ïEÇ¡ýC(ñzt)¬ˆ^l³¨š-qóÓP'‡ºýnœjc·}¯ÁÓá7Á“¨†Ø‡­, T!·V^— «ÌQ·´«ÓA‰¿¢ÙèØ¦‹Q]WªÅK_i[væ—–P¸Kq¡ëÏvù×ìñÈ;¤ˆå¾ëž’—Ø|Îç.Óœ/`D‚‘™`j¥˜+k;Õ¡»yèuIª›,jßÁaXÅæR»1¯^©"‡Ñ±qüiQ]ù®Š—.¼/¶LþZTßö»Ðu¨`B!–>™w°<›û.*bnœo©9xS7²qiìeCn— µK9ÌËL'X·½8ˆôù)³`P¦âÔÄŒq¿!G2Lò÷Á±›"Í”H«ltÕLœ˜Ôæ—‹—ö>_èÚÕŸ|š‰rã¬[ÉÁ+·‘‹¥^6dz“ûe¸¨ì·a^xœ‚uãzMͰÊû0wä›Ùui$ÿ Ü?Ö¯»Ù»L ¦× &¡{_œ*n·  ]“Ž÷Îk'gPYÈΠºj:ƒÚðè ꔢÿŸ¿ÍÖÙV–\'íÀ,óµüà[ýõŸœ;á¢#i!yä­€¹bnf×&3þÉüäS£â×í éKɰܻŒ›#OCš±{Ÿõ—n7;ݺ&±::¯Õùæ ŠŸ·ã° b«êopkûbQ¶âæÈµB -[Ø£44½÷ÁÌÛUÄÌ;ŽmæÝ`”à–Üç×N 6^µI¥ºŠN¬—‡ÈM),4žA¦ZW-¿á¯Uïj9‚×*²’{‘ŸåšÉ¹Ãy-)Ç´Ðqh¿hËNÙöù|Æ•Ž×[+”ÇS »®—æ¢}Ù™äóu1ÖæmDNˆë»IWÔ+™—« X®ª·©V/d/Z½(þ\CZ=Ò* Öc­^b6Íë5¾UèÌsV°¦ùf¸²ÜB*îºÏìXs†wJp ~ÏÚ“ú0Õl„ËVh‹¢…}-ÍÌû–eRHÖ7ÖûFΈªÃßò8ƒg5}÷¹vtÁ»´‚ÄZ}¯m4¹]ÔÖgüUµ1 •dÖj*=ö)æ³<’ßè$)ÝIAzZ_‹úð+œRSt.ñz¦V>ÿîó Ûtwk^ßóæ*“¡L:ûDMÚ&(c3ú0F‰¹qú¾ruátÓ´S²5ùöñÔkÌåÔv¨DªŽ»5åqjt•^c2V,å´”‡1r”ÝÐù-•—!aFI™&¢K¨Z)ˆsˆÙYç &sUB$òz.Á©'y^‡Ë}ÑÉa¸z,«¾Z…Ž7ŠM+·ÄecûÌ2úậ‰Û@kœ‚ŸQYS 9Rmo=ZÕËEAé˪bÕ›¦ü‘Gžì¶G¡ eÎ%iŠ~êRfÁõ$4ïNÅìµ±‰öþ.¬èECæ·$Ë—•AçîüŽ;twèÝ~y6Ü¡_êòÜó:«0ta›CÇAÀ ew {‹+†ÉlN’žœMíN1ÕhØò¼~ÞŠ®Þò§¿ƒä‘tÄd¨µ#¥©vç$tö•ÅyŽ4Ä)ý¦Q"±¶C¡ÈzE~tü¶·ðå±àkýÈÕZSÀI:ͳçgÏg› ¹ÅªùÅŠ¹Óyˆ¹3å sgé6«Fi©v¤×¹àÕêù—X)9㾚1“ÀÏ/ CQÓX”V^Ë&&õÏW†sý§4½7 c½—8Ÿ…@$ ŠE&ÏðåJ^àys s‡÷ÂájÃKÈIE¦Ì^¯Í6ï£)«Î =Ó%ôŸrËçC¿ZºC´M¶Ÿþœúö¿oê;ÄÚ~o´ýÇ‘º>,“Ù¯ßõîo4J%scQšv%K‚òÆWä_]·þŠ‹Vù)’=ì"ßi£g~§¼^<ß¹¹ÚëqÒà³-ð¦Yuˊ̽lêLרûŒñŠ ôkñmЃ‚:¤¥³¦ =¨q\$)ÿwqÛU2¾P1¶Ö/2lï,2,ç~†K2Þ>GE-BV:î[>­%sñ ¡ƒhê÷xF¤4ÃxDÌG!ê¾Rعã¶{d/ÇÖÕäÖ‹¹_»_ÆÔÛ0=è·ñ{ŽvòàwL£%ØÔøšÏR~{P¡Ì«GÎxoI†Çé•Ä F,ݹA`½DPñ~‚o²Ñßäê¾q˜2A Fƒ4w;j ZÌÍM»ºü|hÊ»Gÿ”[9uHqia!z”ß¼0ÂîœÜŸYmà˜ð/ô;ã?hgn¾¨ ©})ÿRÀÈ™V LD2‹\ ŸSbY KDA´‰dwÎðÍ$8á¥Ò%í*Ïñ9Û?E¬ÚhŒ°jÓ¼a¢&«X5z•°ý¦ÜÏ#ž1ËÈ«}+1öú£éÒRU\夬‘#„MkñU+xsòí’ìÃWëL¿7òð[AelêFÎÆÈƒ$XäM,÷LªIÐb–Ã7Ÿ¡†—F{ç~±6±ê>ž`Õ§zÄÄþBÏŽ$£M°Ê£M¨0D•9'x ¨2[ÑÆÓø]XÉ.ïÔ{ĆM¹¼!*‘£öÖUÎά¸<€Ç+è[ÅÐXlýÆ·ÆŽF sú Ä<@p…ò!/nU1Óúƒ+õ4êDÓ‚-O-WWÁ”¸ ‰sçìfõó¦?ƒõƒ ôðJ’uÆwðò€ÍÉ/n ½4fwä¾¼“ï}à×q Ãú„ùÃCß§A¾¡$•¼Jy/N-€ÓÔ4A÷pFül€#:ÀQkpŒFŽS€½£Šß!µßÊΡϪ!¾_YÕ–q[FϺ,Ò¯>Ë×2$Á©Äaú]éKÃÔâIææþ ßyï3vìnNèå4» zö€‡Xï MäÒBÚ9ð¾l«ß¤l–x€褘E£à‘”º g .€¯ê$Àת ðñ-y`ÒÛ¼“ÁÞ ³ .-÷³{ô-FÚVµ;´/ºZ©r²P®7Yîü„ Ö(¶~?OÚ[b_r‘¿ækÞ±‚ßЫy½"Æþ˳”É·?€à” ô"ˆÌOpãpj‚’ˆò)DÅì&ˆ€¨ª÷G¹rºä79Û'9 Ü%u<_³N0œôŒ£Ö©¨¯`þ‘Ì‹;Bær“cïÙ/Iã J…&¢ùøƒ"ÿ…^gÂyøAû„zi^'±©&¥^§0 Á$M0€T\ îÐJðé™U@ªÝ> }f“ ÿ¤Î³ Î ùÞBxÉq„$iÔñÝάu¹ÐÕ[Vð³]+ã|>ø+™W%5Â3ƒÕ—¦fx'6eÁEi ¡7­¾å|aOEÞ`þš=Yß|9„P@.E§L²éwC¾Ô%". ¬0mDYqP63IÐÜÊA¿€’; +(•J`ŽO@!Ïi¯ÌÖ±£™Eµ¬ T>LƒcøúRYóPiäþbIÚ­S¸¸ ~G¿jùc‰A±ªCÉk<’͘ ¨POŠè6’3R<ãµ{(€zà: YÇ´Ö ½*€.ÝÿXé  ƒ&è0ùnÐá>´Õ§±A€–%Ð4—<WýZB;ª³cÊòLîæÿXÌu…0èÉ·(“Eá+àRPgÑ.%Óˆ£ã4ކDRNÿ+F{'Ð-ÀzL‰éfÖf²áoËþkE¶¿9ÀÔ2``ŽŸ `Nî6Áò ˜•B%ØX€YG5ÀL¤5`¦$þ÷ñl˜lüÑO¨«‚»]“h.ÿ›r7³í¥,ä)j¸ ½d´{Œ%x’ñ°¼.©’JLù¯æÛÍTøM]È¥ßÀøi­å"`§«`ïhpjv ¸âr•*·ièD«‡®ÍÊ€+ BÀFp!zœyæ'ó€û]Kâ@„j½'Ý—³o©.H¤_d¾n; ÈïÇÅDÓF{±aÁ¸µñùÚú§C§tªùþó7>•ÿ£þf‡}ÀÏ‘àŸþz|ù›.Üp@è2N‚y Uw„ò‚}J]ª‚r¿L ¢<ÐI¬ ôZrÐóÜ-ÁºÛ€®š ³ä=ˆ;h‡\ø•Þ4¿!Ï<¿‡Â9_{ëŠw'«ùܵ|—£óÅyWN÷Ì£y³öaÌözûX, v Õm‹ob¼Ù¹èï*îú˜¹Í×Òü¶^%S‹ýÒØo/‹øüÌÇŒÏb‹fبèÆyjM×9ðœFäP˜2ë?º4¶Dš/öãú/…wŒt_© õÊ·3¿ +gu ]|þ EXƒƒ·ý’»…¼ã6üXãV-ü-,íRZØÇ¡:÷®U}ë%k†õ nœûf3ÓµŸÉN#¤MvÙjm¯í±´kF-a¹Þïß…ü¡q×áýîÉý±×j÷}$wéóÚ35Ȧj{WöiBZà¥ö¸­cjÐßðC½²¼çµ…½¯Õçc±ß›Åj2úÓå4‚ÊÛIËý-ë”wµ8é>¼×¤÷и0ßÁ«%#û!àý±ÅR}ï£ñ½ØÓþ'X6ô;ëB+ê0Û]§]ÈyëØ(ßZÒš—žÛi¶¬Ù"¹µ_6LØúÉvõAHŒïdyyJuè´aØÜ;µÌ)3®òi+®a—?˃¼ÕûßöÙí;b¡ï½ôj›.9û´;ñé·wÅç¨ÍïnÓV]8Ï[Òé¶j¶”ó/h¦©Þ>§F×øÜÆ›ûÖ®ŠÕ¾Ó_ó±¾Yó·|ÛZÝÊ¢ü8Tò"«WÈó±ö/K¶©q-õò¦i iBªð¦!f‘š,ZÇRýÑ’•w³%µ‘¦zYÒ{ëšüÀz'­nNVmì¼ïƒj^“­.OQeQ¸V*yúÝ(¯ËïN9ðai× âRE17ѱ]#é5Š-çý›­5(ïºÁ¥^0ñí)ÿZ”‚Iº™H«œT‹Mm¼í åì÷fiVóA¿_Åæåq…\q9bƒe‚þ¡Ìì·÷Ò®úü–øsšvÕÕI˜)¶Ì/_T?˜\èº_µ`˜™ż—wp>Ì}—v”óé žƒ·ýA6äËpÑ ¯a^éà!y'ô`Ý=5‚Èú>ƒuÿ(¥Éçë7¿I?éT‡n^ª›eZ`9bƵèØ`£Â½?,Œï¬šøÃzÞA–Üwvå¾sv‘óIv“ƒ×Ú1²ò%‹íÍG¸¨úŸ0/ài »@¼¹hÑŠ™×DÃ$–k¬{™Àˆ¬BÞ`>Õ’¾µkzÅ›´uÞ Rå6<ÅšL õ²Ò.j«Ø†”ûnÏ*ݪé(¦¸®*¦”›)¦,~ä×Mt\[òënNkÈR™ÛV3KXJÎol0Óù¨²h£N›6—5ibþ 36ÅÒ׈b2˜7 ôŠ Ãº‘¸vœJŒV A“1OQ/‹œ¡jTÎQî›rFé–:yÅäæùu8·äAÊŽl-¥ïµw‘|ý IðËÅx°ÿ])ãaÔCÛ‰¡± Î91ÌXÍòæ0äÝR ¸Î<ãöÅf£ƒ gÒsŽÐÞÖ΂øÖ”üí¡^¯‡—z-­>ªÖ¯½•™û(¦ïCòÉÿ–`Ƀ}‹–êX¸P¤ñygHþö%Ägr⌠ªb¸ït…¥µ…ü—>Ôºñå7%ˆçK\#óG¼Åíëƒ5·oT0nß üÛJIl£ì\Kån¿éä¼T‡6‹™£×Š,N(ÏÉá©X‡òU~ù“<¼7yØ2ž2Ø3/)ƒß²Â!qÖÔ¿Ë´°ìš¼P0CE ñ®Ío–‹€/1<§JI1÷ò„ÃÕŽ=Ü›m¬ú,«´Ÿ¹iË&Ó~úkFàH‚—ËèàTìß~X´ ‘gd$ׯLY1øœNkjØD”þúÈ^®v—¦­Ôd!¡ñn/f߃ËñI$ÜñU(L»÷d¼;~ó¥Åð\~‰qêDsÕÍ[àÄŽ ³gÃqÙÆ«žgnθÆt’i £ßrºoL´õ–hê3œ;Ôȳ~ë=)¾.)h¶Ä(¸”‡ÁQj5x•+8_ën›kù!éÒ˜ TcYDä1zxK˜¯^EÒ<…b£µã·SyÅ—yjÍs vÏò‰7Ô…=—äŸóžUò—¹Õ\”éHŠÑ¿C‘~Ž÷ÝÏ Úæœ5ªUÚ”gßç ì dbŒÄxÏ$æÇs™È5J1‘+š_"É1_/ŠyË·ý‹ñÌ;psa¥~èÒRÔ4øC)dÀÉ ¢ÿÉs˜áâÈóËÕ`Éž/“«²½%sÛO¶Œ!ööôó<9Ó¶:¼QŸûæCâO²w²4MÁbF&§ç¶M£ëo¶Fb¾Ð lwJÕû_Û¬á̤a»@œ`;ãýÂvæUÇ™^¥Zâ½{}•³±ûÀÒó¶ šæ–”}ƒ„ÄŸù˜÷ëÂ%gê={©ã¿€&V]oL©ÆôËÊÌh{”YQcØÚPp¨ìÈ`)I¬‘}$èbážI"£Aî’cñºÒñÈ|ÔpæcްÝj}À*QrÚØ£Š \-BGúgK@ëõý­&*z\™¹4zÛ}m:Y‹"S—íª  Ns2]¹'¬Á“¯4.NæÃ=s¿¼×ŒÉN´CXSÊg 1W ‰½‰5‘w>‚‚П¤Š¯§ÜÊ™Îò5Û½V,V|T¬²,˜P˜UГÊÑú½µCåüMËÈÕ6òHë{ mо m¨!!W• ‚е¬»Í…f´ MMk¹¿Py•ñt¥¡ÀVí'W߯gVËË;ÆŒ®kÚÉVç”_“IypK¾Òùù6«¶×ç+¬òÜî°*F\1a!¾ÐSރцÜgÜT¾q.r6~¤œºˆŽkKø±\<á^Ñá`‹¹d`‹mv ÷A9@ï—܇-ÝL½Ù®9ˆ­F’ µÇ꼌tr¸H×€Ṽ½ƒ3ÓìŽ"û55!ª?£2îˆ)A-¶cœ½Ž&X53£§Ã|6ú‡=ªØ·3rèiOx€è€Ÿ\_„{‡³[u.—UJ hÞ3Èæ¯ Lñ® 2#¦Po›Z3ã2íŒåkÝLÕÆÇL 7 DW†Y‚“ðß7†}t¾\CùÞÿªåm|GƒÞrMΊÙ±ìr3¼”ß&%Næ1zæVKäVÛný2ßÃ}mô›ÀÖcuƒ>½ÛÙ Aëdê<Š*عÐQIÞËp ЗvèñDô””Šží@WŸ-@7(— ç¹ïQ67Ý£ŸºáåÉðÆŠ…<¥:tµöe¯ÛûéÕ+gzØTÆZnH‚É.ñ-Nϱ8$U–¶sTEÏkøù]í /ÛÙA°˜Ûƒ`T<Ìë<a€ù  ¨,z+¥™)Éßë`åè°Š™¢ÿ¢ØÊ·û†dñåKQŽ”kêÊ?Éœy1LÃùׇ$çÑXäŠÉ•ÇO*Ÿ]àa§z†P™>¤›‰žû¤.©òš}´?€¤V0 ]ˆdAd9,I€\n,@®¨l‚J=Á} ȱ·Op‡9騀ì¸@VØ5 à HëÒ>ÿT­Kßó ÜÆÝÔe.ðõÏv‰ A+JæÛ€W¾•7¦ æëZîn—w0¯®€” 7>‡Ì^€<> ß4 (Üú™‘\êCNuèbêfŒ#@=±N‚òP‡ÛPÇ2¨%a&¸6Ar>ªU¡UÊåÖªÃÇ9{¼]1R3ú‹¹Ó|Ñ>ÌãøþðþÍ=1e<ƒ‘~6  éùü-ëŸÝÍ`€ÚU @ÝÛ$ ™ý׊ * Ç‘ èKœ ù-&_l&ØŽãÒ›½`<å7“ŒºñÃVº€A½+ _|ò'¨èuTƯuAZV¬cš~ðsBþz…¥jg]^ŸþK>ý­àO]²iêYu–ië°}̽¶»ÜåxÚ®µ×sSþœÀª…7Å€çйwyâ³àq âÜgÊL×ÞˆO…®¸/M*xGðË‘9®Ó}gt)‚‘zœÿÚÞsaUã{ÿ>‚ç Fбì½"HG±7ë›ÿÑ?÷½³“ü’|wÍ‹ËÈM2ÖŒ0s±Xè…˂״üUUßZb©"Vý2kbRq;ËžÒ¡×»N:Nã›ðU\ÂÃa­Ð; _ru|4ñàÑÅðeWËÂ:U[ âºá¸©åšÒ·ûÀ­]}=3R3Œì~äè…sÓÕ´ls£¾•Ú^­>¹ÓÌ©aÓâS!ÝRD^wZQ9¶ħ£Ä4ÈL‘„”ÎM<éÒ›dïIYTÊÊZ,‚&hÉHààÔ&¬$;rù˜4\OvBøÂ°0—7,Ôú~º?ìaê[z *2ó Å­:”«tP&8 (ä¼\›îz±¦tá])u‡Ù²þô= w*<Ô÷gªìÛB¾†á«±Ó&÷ã&Y¸ŽÜ~?2"÷N|ØgßÅÁNjô?³dá0éõ°¤Q˜¾ˆ«ë/Äævµøð þ0uÖxü)³Io'Ùót!<”ÁF(?»{Þ¬tÏ|-2{@9õ^ãJŽÜÎ66"7Ûäp=8g†±Ã!?Øñ×àÁ(õªõÒ½Ùò‘n?u§G=©œ˜t}3£v•Ú`ÑyÌç§Žm³ßJ¶kñg³¼yËÉ8”a¡ÕÌ4ò_‹ „u¦»NgÁÁ¢04(‡±4îÅ⸟ºÖ¦=©ÀÍ ”õª—}xû®Âyç/•Žö{qíyAÛÈúI´œk5T²…ÒÙf'•+5I¯ÓhôsÒ ´ToG¹>*3nðB´kM¨“t-šµt4}¬¥áÕ9”°È@è–‡1 ÞÁnÔõ²÷Y ®ÿ_•6²œ[ø–¯6Ý¡Újv£Û$«Qh©ž"S(½ÑϰV}''æõQ!³ª3Ò®vÔê§šÀu¯µ4?ªž¥Fª9̈VüÅ!Q)’¯÷Øäë—˜òå÷µË¦ ]ʵL:VFü†XFn-/ÌRÍÍŸ¡È}\;ò&·ÐB :„X±l#æ)ÉÚq–ŒÕR¯8S•ªñt5‡$sPjåŠïtjP´NE»s¥ÃsZw-q}œ•ß[/L1‡»\KâË’#âÛR3“:—ðkãQte /’SXëL¹Ð¯£BaíüÎÙøùÝ|™ÍÚ¾žß¹“C(bÁÏÛa¦qû휹ƚߥj©ç38§U”Fã´)›ýý»\‹¿ð’3¾“öi3E'K¸Çf ´JEWT‹œØ,¬gƒv¡_û…Øk6Î”U÷j>‰<íÜq_ç„VÓËz+)H‰ÏJ½[,›‹7Ëï3 Ï/2ŠÐˆdqÖÉ(“š™ñÏÊ"‘]Eµ›m¯T½´jIŽs»ÑÒ<~;Få^XÛW¯Ð/œ¯ùv~äGÜõO?X|±O:'4²L.—ÓYÏmä³R§WÎæ(¾–ñ7j;£ ƒôã°ÒŸ¥¹4;O½/ƒCÊœî_©Z¡”H!}uô¦Ä:FlÇ:f5Í:Œ´ tu0Ú­'mtÎ6k§õ#Ïéö3Q‚ë ¼ˆµ^¹“{õséË䜕îÌ>›c߇Œ¿zœ2Jïáeб·Ÿ~ìñ'”’ÖÆ\4ͱ5*eN¸xª–íÓÁâr¬£hÛ,®›,þ|“®‘š&;Õ¡¤ÃYÏ˦ß:¤™8Ùê0qŠ‚Óyy2ñÉA‘‡½|„ã›4½ªUî¬)-À€* à%/'žˆà.næžzi¸@9¤+ÕÝ6 væ6eEûÛT­ËíRh$·g9y`›…œÇâî–tµæ+ÙáH’b”Y[zŒé×—,Çn…ÄÎ×£N­ŸHRÚ4~Ü"A.G\ùk<]Ä©˜wš”cÞ9#ÄR=s¥"•ú‹´#œ¬o· bÁÜsDë”o„®óÑU5£ôndÛáÛ1ŠãCV)àÃTa„'ÖçžØ0|Hw3!ýjq¯³–/Æòãx.;R±´q_=XyÉXEØ%xõæÆ'’hÇäqB§ï§»J—é•J Y¥*>¸CE´‰IÚé¡Eb¿ uuC´±Å‘ g?º‚—Áh/]¥¢ôENã[ë^ŇügpKÙ$wÀxqƒbü¤“ÃRÙwKÅU =x€¥6UçÛàÝDëç ÃC7Zæ)'%ß“ëâãZÐq/urcò¾nÑêÓ©7½šQÞ“É—’Ø%6%Úyr]ÍÞj´WFŒhŒL-ðíººÅ‡ýáJÛ %gòޱ‹ñ £ŒñGº‡¥„±‚ztƒJéf8 Z ªPvS€&m¸mÓ•ò©c—[àrdý[„NÃ1IöÇ)?!ÈÒ1tËim<˜Sæ$a‘Îp¥®ÐSòR£±Û[ÂG-Š ÆQA/±£†æ”(O׊<»ëED§½M„Û!'`™ÐO«=›(@u3ÐUŠƒb ºÎ›Pn€n¬8@m®PŸT¹ûF*ÉÕRxµÌïÓ™gò@…K9fOÄüø…ÿl•WÃ{d³±Õ Šj(Ñx>6ÅG \Æ„³'cé5¢¡yämFž'LjT2Š ,[q†+K(ÇÀ’©;ƒâ'ÆV9€•®#€•ÀÒÔÊ)4S°ŒÒX¬¬,ž ‹dÊÑì±’Oóz*̆g)É~‡Ùåab9ý¬Ý6”ùê.HÇÇ,b‰ohÓ˜ác,¥`'rfHREóÙ‡y%wA]ŽH¤bš“%غí. ø€9ÌJ¶º;Û§RPŒÀ–NÀŸ÷a騼lIÁcXú=€ª 0SE6…3 MR*goR—M£ö€Í$qõ&˜ÇféâÖã— U;\2ª`vtÓ± |?íiØéPP±L;)MR*¾lqm<âX§½À«äà½êÊć²ïLJËñ>ŸýâLwE€Üh>Þì¤ÞÊ^z¹O½€§OÂ8S+ežû|’]º…èŸüòÅi0ßoÈùd°$èhÄÁ`a…IäSÃÂ2‡¡‰Ȳy£8¤|zÀE߸AÂÎå À_½=ˆ²‹ ”ëDS) Ê0å\Ñt© e3ÑLm¢Yä ¢±uDÑIèªG±ÖàVà§b/wÅ©bÚ:cLr ÈOË<ß8úô ÔNT}|Ù+¤»Š&tl§À}eó«9òH 툙+X ™| J6ˆ–ªKmñá{£¢³Õ DçWHyO<‘è!Pl Ê+¦^²ì"™Su·€ :ˆ¾™"ˆz/ D7ˈÚsD£V1Oµ®‡ÄGŠyà4O¬Ü ÞŽ ¸3I¬öûè°ÙÝà©nfýá–küv©õùÄÊ:§ç‚èM^"¾Ý¢Ž1Èø€°Aò"¨Dò"™É0PÆy(§°(™-ò€Œ9& ãÙ# Ñ#HÌ€ÇðÌq*^±Êea6fa!s¶WX$ÂóЫ ýrrqà.Ñ]ör ­r,WOìÀ¼¿ø°»ƒâ"Ÿf4q„D™3$ª_ɉ7@væÍú‚”§<¨è˜Tó”Ô8YT«Ó…rœª\X@Ù^•nÓ€Ê$ꀊPÈ1Ì$÷f‡»™ÆKbþ³*K>F†–9Õ¸ìžÙå½¢7}sA*CÑÄ4rød ÍhA¿òxzA’øt}G¥›5ô¡w3ÐÈ…t-W´)UíyÀ€è+¶ôV|ÚI¤ œº€ks@·G@sÕ2 é®"WãBrø8°q_Ñt­9‰Mâ \ì÷_è½”~"‘íéþ鑇XI"òIøÐt˜€fú®ãì§ÍšêdAŒ7‹ ¶x×AoôA¼±AÜIèPİoâÊÍñÙ˜q>Zñ¶#€87Ü‚x¦J‚8B7@Ìš)Š˜—°H…5ÌÉnwDâçÀÑ:Ç"Nµ‚|†*d }è'ðŸC:ô|ëˆcï ˆbµ?¿*5üáùV¦€)í¯·¸ÌÝñs¤pÀ¸R0z¬˜îÊLu ÿ«¤ƒQÃ0Qù~t“Éݸ{a‹,dޱ©ÛEŠ‹GšçÍ—\í°8ÇWúk~oè«þœi,Ê_« ‡©½¡ç¼YîÃ×ä¼ µvø©BBi¤AŠ=4@ŠlMA Dw€Ý,qÀûAMáò °­È)‘?«4žÚ£GƒÉb3ÆÏFXÿ£ç …Ú_íÞ¯iÇa9‡",1z¾ÆsP]",˜Ú¬_½Þ¯yµ¡Ã*” óØ·ÂÔÞSn2˵ 2“Ædjxdr‡!HßÅ%H»Éw ÙŠŸuD‚W?" 1ûÙ‡yz½atˆ’„®3„íî¿åÿ‘äû§Âá‹ãÂÔÞ tïGVïªßy-¯.\ò7çqÏL[ ç'5sü+ÈÍ”à!Ùðáý0ûôÃ>íŃOo¾ßÞ•"×u²½ÆÄnâÂÈÝÌY™ÂQ#Î¥Cu·¨îÜL»¶id}Øæ:5ßµWÙ•Ù]*1màjÉÑhñGÁ£ò DîÈs\kêNŒvSÖˆt¦@iÃ㥪‘½Ø«°Ämèð†¯â óP?ìÓöötíÓóä%/>,Ê Uvç¦8c3|îƒ)ÇZˆ,µ€Dw+)Šž]-a]æN®tuÚ/ún÷‘ÈËÚ5Þ‘—ˆ ”OÞàHÙÃ1¡+©«=¤cN+ß|N5ËHKEÌÔx†ÏšÒ!ìÜ™2ÝïÜ”¹  )u»­Buì zJ˜‡~a“¥B–ëóÆ5—³c¦ž¶˜¹^4bÆ^ÏjRì4Еä^ÐÊW]R«élæpbð»™á–h+l¼×íîRŽ­[›é®?8L™ýÀ“vp›x“ñ{’õÕ¨¨·IáaœÀ!­o6÷¬F·±Ó?¶Æø!;ì”Ñþ^žÝÐ@ é`3ådƒB­&/2ÞÃj­rÌ=Þ§ÌÆ}AybSf›‹KÇa3=‘Ò霨ä©"¤ÿ6ž5Þ¬¡-™ƒîØiE‡c|…ò#·GI#rG¯u®G9k;ÕVƒQftêe÷ÝO=©DOªŒ*½ÂL»þ¼‡„Åc;ZŸ®†õB#5|§YøÂ°.t'C5̹íìlÔ!ÛvØL¿±€"o¡¼al¾FìùÝ?N<´ŸòÑž§øt/ûô]_÷Ù0U¶ó°ßÅŽÖ$«í÷2Öj›Ýò°l{Ó\>8-üDŸ› 5IŸŠ24Ö3TiôËÍh#öÖ’a}ÚqžŽý©È@àúA6R0§ÜàÃC óPßóD»m¶ò(-ÊL†r2ÛÈê4ÿZiàÿ K¶žMòtóë ¸5úÙ諾S°H}TLDë̳ThejéÈŒ«J}·š‹æ”ŠÒÕÖ•b,õæ»w{ÆkîqÌ#a}°@«âVñKø&³ÀîLÞ®Rn5ZN·Whv$z¨uæÖakÇ™”¯ %¥Å­By´kB™V=“ªR-;­æÐ²ZQZY½R$Ê6÷X5\Në ·“Oes¤ú¡s›Ü2rFÈ’3©fJ¸¯Ö‹îŒž;%kU$ßõHamiýÂÚ¶wPÎçPÂ|èÐ%ïh5¢Ú$~:Ì­ø¶ˆs7ƒp…EÊæÃÃf4%Ÿ€ÒJA™ÊÈÁâJÍ”^+áÞ¼Ut¥M¯ØÉFEòv kÈ…~™Ò ±wnžÕ¸M>‰J—Üq~Šä„vŽÉ¥I·–õ6…IVÜ·¡¥:|ų96'g¥ñnJØÝÝ»T)«ž~"!\Û6Ùú­ØÉb—ÂZ>œ ±ÇêòaŸî´×û#õtTa¢Pª±|2ÒNæŽö0&Ã6&…\—ËYϵëÙe´2þfÕÏ(ƒ«)2´š~+ó´&Ìi.ý|¥Þד2´‘ª5%U+ñ—T­|¯§jÜ\…²üðË[Mºš¯¥Y*¨ÇŠFŠî¹~Ïï‹sN0Û¬7÷VÙá,3þj·Ë(½ãñ‹}ú¸fŠñØJ1’ÖÆ9,ͱ™zŸ›ñ”9鳩ZVȦß,³Ž²k°Íâ;ÈëdñWVJºo%;Õó>I¡UÀ¬ç×4Óo»L¿S´™~W‰1ýޤǬWW±óXçëxû‘åžÃ9U\¶ ?f^~vš¯Óω»Nƒfqž2O¨•ª¥OVèÜ^.sÖ™Þ–¬#£(ñ=Û,$O,þÈ]“®Æ=’®öNR ‹2kK$™~Ýb˜8¶Ï&v.à£N®“HR‚?n<+. á<(Íxx<”K1ïœ.k1ÏËcÞ¥“§3x¯6_µZú¦¤Ëun@ÙÁ;;µÔKZ7ü]ªÞ­X8u’Ý„n0›r]cÖï’Îôk´ÎÄQÚ„’q»yf‘µò«D’¨î`ü¸ªãB¯{‰§câ#æíl$&d,Çb,íŸóE(V‡V$T¢‹¹þ‚zÜÞ7êqwJÓª-JÓ36¥]’z¼ãåf—6*•™Qd‹Ë;ÿáC—Ôê9Uwœmr¡Ì`aY‰±YÒâ§[D‰‹Íë,ž^. ˆ¶»Ðª“äž E6iÿÁÛ´¢É.­ö†.¦·Gêq¹^)͆ë®Ñ )€««Nšî•#kÝ|ÊF#Ñw ç„Î\*΢1!w|ƒÃŽMÔ÷Çj™«(€) Î[4+S×{:"áG–Ð;kfpß; VªèñÌ,2‹åEU¢ïôd:·Æ”.1U™zj)™ÒÓ$*6£À×H+³ÈÚ!µ€ÒÞ’(ÏŸˆyʾÍ÷#¢V6Å(E—C¢í2ãY”:¡;|#ê(¾éårø¦êsh|“;ÃÍ SÍËXGåydÉ”î“k˜_œ¤·Ée‚Oév<³Ohô]\ÈtiÛ›P7&PɺéCé{Cw1Ÿ¹S¢Urd"úZ–jti­h·úp£Ý~á¥ã=ßì;¹Çø@íñDûÚÃTe†7§6ÞN1ŒmFsPÜÆ–xcË ¤:½íò%¸Ø¥Ãj_¡_ÎO-ô¡¸ñI­eÆòÏëŒzÙC‰Šh$OÖßžXäÜ1AŒ¥qtÅ |´»êðQºÊñøáD(}8’ŽvÇž#;ìÀ¦.Øø%!kãkfƒ«'zît’ d4s˜mx‹@¹d™nv9–rüîþª”ÎB¶H2dhí§l3ë%{ÝÑ6‘J-ç±ë­bÒªx˜QU¦:!i„'Úqg]•0É‚^Á%â¶WãC$= 5ÂÆçã£É Æžj*ÉFÏ¢³‚ò>¡“já‰f‰@®Ž—Fäq¹ŽØ•¹{%7¢J—g¤œ³àuD[PŽá›/ Q}pU¤˜. Û 2óˆ`¯žcDœÔ Ÿa%>ÂØÇsˆž—(Nº¨ˆféh0 ‘ë5§CÁÉ´lîBãáGÔe‰”Eï \ý~uªÊÕH .öržHêÒHÚ5BËÏr£H¥ò¼ñ"ÒïüùÉ’Mÿ”82ÉuÌωA~Ú‡[Žx™ÄáÙ† ãëq´×RÆøvÕ‡¬ÖÆØÁ‰1~¡ç':B³]À#òå)FùÓ$¢ÞŸ³HÙ[àÝáVÀL+gP½xo€ØÅ”§W§<€ò‚¨óù j—ˆ–ìNø"úH©-ÜØÜÄßFÓÕÃö™ì=§DÊ¥Ö±Â~à„V9éàC9xÍ”]ÝÖ|4V2|8éŒq&Ëw 1ÞIP/IAJ#…ËpØ’&¿œ€Zj#Ä»¹%éåñ(ÝCy”ãG³s(·'@1= P¼ÙŸ…@ÎaQ†bo³Lf•¤Š‡ÙðÌ(cãÙ÷mEk¥Šýá–ãZ[&Ú—Ø$ÚÛE|G(<ÎLúcŒ÷sCÔAÎì3>FŠ”l9hYçÚÞKPžÁ BΆ"l ì<€Šé@u‡¨‘ª@YÁýÍ® ÐiÃô™èÐÛšò -9V1ÏhÝÆvj½{Xà$¦H§ͱu‡B¶ç`áA¸†LVLŠÆæ;ʲ5H¹ãFh®˜!E‘GÀàÿç*Œ&zxJÓ3(œEXŒ9î–Œù_lé 0¶]X*"†>tJ_ŒjÁ£¥s%€EÞ€úwx\ûk:ç­áUµ6Ì¢aA–øïbÅÚ~E™FÆ&ù ‡®~´_'C-`ÂDcéžÄ£9§9Ž<Åhp†Ž€- »ð+PrXS& åÖCñ×Û1'(½À|Ø­œ²mìP‚ÿÅáw9.!ñRªÌ¨*“*w€ ꥬ²Ç‚ Tªéâ3:“Ÿ–¹v[®¨Ú$ïÍáÙ ¨to†ï1rŠJ¾„¥Wë šG1ò|r<°®è2QÄá¦*ÀiÇxå±ø„YÜh„Yª¸!_¡xàf–†bänÑm(–p¹¸¸|ä×ÞZè/Ïß¡#áNš¥ÖÇH˜bþá—sûÍšB{¥9Ñ9®Œh|3ÔB+«X¦›!÷ìQŽIILm±šÄd€‹¤\>,€¿˜ˆ²íÍg*òìJ<¡4p(‹äge m6Q1ªAqO¡AÜëS Z+·@4Ÿ°A”IÕ;j½°y2w#·Ì£~~ñ‘ÏÖyË,Úr_§ôˆáø§«À è.ü·çÀLdXäôÃøµ]Ý«@ × ò ƒÖ ›åû’…¬×¡Dy(Š ˆ1sDË‹¢¼è"=]‚žFìFas†kÁÍâ0ËüÃ2ÇØÍ– G¥%Χ__Üòòĉ ó˜ ¢b~aj,¾˜Ñÿäún€ä`÷‘bËN„Îís–†rãyÎu¡82 ½ì ëíÖ0H¹4ä(¹d €L•…ä*ŸUYüAG¦M/¬ƒ£Ýí§U®žW`çÝ0h{~ùg¬Àjýô¡áµå3ùoÆo%H÷'¥†; %· è))z04]]˜`€N²á iLuÞÍ8 ¦êð£ù¤µÆè×ãýü(ÈÂø—3&-õ¢JÐ’®»P}0…†¯»y~âÅÊA¦oØLh²ön_J<„–fèùª^Äåˆ7Vob:ˆ»O^ ÎŽ öŽÖAÌ;j f©>ˆ {ik–ÆÌ‘Æcž‰‡íSŽÑºvǦ­èí#kûƒ-ÕVèC‡¹Ç¡¯¸Ï9Ç-6ñYg"°Y¿¾µ*Ó0µ·tr³¨í£šwÀq 0œV å¹.Abg£ 1p Á§§‰\¾Ç„ÕÁÃÂàØµo!ˆq®)$Eÿɇþb©†ôu&>8¾z¾¡‘ùõr¡ÍvøêõŠxPµ×E@ª‹1,ö »žY€¤C¯“Í?YÀ2n$Ÿ½y¬Rî¥HZwƒTr4ò¾=©O£:ïãñ?R{?Òž¿Ú½_ K„$_篵‚2Y½²^mÞ ™01'¯2PÀpMìÒ' ä3ùÈ]OÈ9ÂäZIäÿÁ§õ‘ÛŠo¢âeªÂ™œ{&ÈÁŽ&å\£¹Å-¸q»‘CbÈh’‰%Êìº^œ¤›£ê& Ô6’»G§…Â$¥ñ%¦b/Ëëþò]iʧl ÌýA}v|9Í,\d¶Ž™$Ûéײ^sÛ2àÖ÷‡*.$ÆYVr7ø#gib¿çž¥ètGM­Ý½¦”@žù¾×ŽB6jôgE7µ‰mùíͼŒñèÂON K¡¬×qqµÜ,Íý{Wß^2‡rý&=? |òq‰ë¹ /®Ëuµ{«_[æýö¯Ï‚ß%ÿ¸àêø±ûÕƒÍüSì~uà`3ÿ»_8ø¿þ–A÷3ƒM|ë û™ÀÁf¾uÐýLà`3á'¼NÄ£‘âöG¦ãC=§- .…}´§6#„[ɦ(%šAø¦±Yw½Š_ãpÕÁ‡ñäpR©°ë|’OãOÄÉÔŒó%«×ÄG 3ëN`ÃùaA/íXúÀ‘Þ ݧ«VÉlÕ^€—y§¾nNÚégëHGØÎ¯v;üJèÍ3³y×ë°¤qäH®2ű‡Eãž \ç8Y&$tŠžÚÁÈ’+R¾­¨J™]Ÿ–2·/}Ô0cCŒkA¤E»>J-#…ùóûåJ¹YeY‚±V†«}¤gn¨yé´muØÎŽìþµ?vŽÁž¤¬¸=ïÍà~Løäµ[#ëþ»Oî‘åÆ}”ûÚ­°¼ÎÿÏæj‚ pðcþóçŸÝZCQq3±Ãˆ[Gc)æI´¯H‚l&WìCú)×Ìx¾”:ÁñŠcÌÁ¾f“Û—ØH‘VSJ7›ÙeÆ"‰{ö¹¹Çòùц Fî¸x¸m8•®x\‡cƒõbeŽ y8‚½^½ÔYh 96Ý7χn¤ÍˆÅT§Ÿ‹5»îý5í£ú~5¨ÔÌG0ã£ëªQáSƒ /Œ’QG\Ÿý ÍkbZ/ªYúÊÝæt5Ûb‚Å‚&P¢ï¶×¬Ù¹ÝzÖ\[kN¤ªîáÐFò²’r½~²¹J2ÈtÝ?WÛèûvu{Ãî–Ö8<¨¡tÊî*Ë`„ß½}]á¹ö5а™0Ö0–´‡šCr/¾†\ö÷> iWÂXíbâ‰]goWþ%È€ho|šÄ—í …ø¯Zá­3”#e.>œ‘Ž€á9È[ †6ÇööÏAÊvFÍÇ,wŸàÁÐ.ÂH›Bi¸¼ï¸N§DW­ÖnÐÈïÆÇ6£wн¨j°ão'Dã«é—š9ê÷Y~“÷•ÒüìÉ‘jû$Íý¤;•vß*°™oÝuëØ•òÎ*Å7;«•Éo\—\,ÙS"6/å##ÛB^+ ¿.îÆ:ÝÁt¦¤½Õó}ÌdnôRº½Îrå,¦Ø(¶¬(s-ÅÕ/ØLø¹mKåªßV;ôLä6ä{í¸™ÍvôÙad£ÍÕÒteõfĦiM£óT³ÌÞWÔ{’Öv?m Õ­DhÇ¥¸ÍwÂ!EÍ¿ læo[~P¶Q&SÚλ—å¶•9g×ýš`/ò5怳d,XÍ¥º4ÖZÕ×GòV½Xî6+pâI~ݱýÔžL6R;‰»“åÌÅÄ"gñçÞíû$¸ó¿÷Ú¸¶¸^—‹M—é¥W£qÑž—ÖÕ¸ú¡Ù± }g!gíØÚ=g~áé)åiý #Äj--œBð`ë¤ÇílqX,}Gu>ã/µ_-°™ ÕÁò›nA\¬éXÚõl˲í¨·¢'r¨ïɵ¥÷ë£êM„«òèÌruA¬%Î'=ím‰Ã©f¼ZÓù‰fcyd)ØÌ?mþ.Y÷½kv=àØù*ysRódz¬–­%õ=ßìj¾¤à¨’ÑÙÌ”Qú(›õÖzŠùL™âðrÔþПñ/)åÝi:z$­ØÌï°ÚçŒìŠEWswZM¦ì†“µŒDî™P/Ê©5›EN²òdž …ãN›i³LÏ'keb‰£ ® B™ñRª43öûqiô&£òRµ,E¢Ü®v§“ò|®wDÖŒÕGÍ7YZynëu-^¶ÀÌ”ÑüÔ•¨ìÙw§¤ø /ñÚtì¯k“q1žGZó)ßËðO䤃§!*}vÊD ±#Cþma©÷Ë$PáetÙôKßT.o=>œ¾´‘Vêñ’ÂfÞŒ*JvòúV \ŽÿÜÁX Jëy+ÝíDMïV½ ìý#…AT•…!³žý:Ç §¬DÌ…cy›ƒ&ò=~=“[m̨¨zx"´e•‰27ê½øwqý×}ð‚¨FßëʹÝ*6]$ j¤Q6DMœí×+±ì¡†š .‰«øÕ7¯¦,Ú¼³Ë¦UŠ/'"ë“9­=;à«¶Ý_·|—ø‘×Uð µòð_ ¹çuí"ä´V°÷Óä\°3ǯø°ßQí5n¶ÓiÜè¡K\OL2˜zÆmdvÕˆ2›_2ð«i®ÇžÒü$aß%ÁjíßþvmTí±o,Zõ v½î– Pq÷Èõ‡½ßÏŸíw©€XöÕ'Ív§FèCvŒj¬}³kºõR²»\éõ.ÒÜõÏ“î@;OèúãñkäÒµû~•¯ÍÀ¡0lCÔâvÛ,bî±C¨k^0+u\Ž:eô(®&¥ˆšq§wå^'®²þRÏÓº;LVÀ܉•Û ²yü›„~ÚÿÝü âõt¦ë#)Ö÷«åvËë^‹›U?}€œBrÞóóÝ:Ùï} ®ž¡‡:[@=;à9Ë_Jù5Þ§v¶±—ZG#nÍ¥0ö¢.ÎÕ÷Kè§ýßÍg¦î4®ö;áûYmz=ºQ;Wˆª%: )Q2çÊB?ÙÈ9Fó%¼g×ãüª”ÄQެ䭴hÆÖ“Ð?ML,Š®^ìñµiý"9N¼4wm¬‰ËµafëÁ2ª—©­W}áL.“L©³¸Ñp´w}ov òCßå£ 4&•èžäjé°b~u9Yiþ\æû–À§(#pçô±\Ô’ÐOû—¿ý«ìµè,{q«/ïâæÈª·:I›Õ&!–ÉF¥åf˜“f9ÏÅÆˆƒ”¯ „Ì:gòãt–ßùÌvÚ˜¨K‰LÆq»1Máphüyªãën£Žî'qöƒ¸ݲ/Ÿ¦Yo­,Þz´+z뤶^mFt9®LX­$£ïâ®vœ¯Ïª”í\-m¦qv¥ö®çLb‡!2uERmNå³Õ§ÍÙÈ£GTÿE²3+ÝôÁ Öy$ ÙóNï#mM÷ò`1}DŠ&µñMØlUštv³b’:È5¬´”ܪmOúѲ)ŽŒ¶€)3Þ+×ä±_‹NÇe?©OKúW ‚öŸ;üM¶Nƒfvæó¢ì+h—ÜYDd²Ž±ÜÝ\>´œ&ÆãÃÙ-‹êÊ3‰.–ëi³œ}èµ21oRŽÓ#¤äG2Ÿõ¸éX‰Gwò2•Osñg$8š?¾l\õß6¯³Évn`è†b#»­^´LVÏ*O¹ÛQ@g<•-`ÙÆd§wµ>ŒÉ㈠Mâsd_+ý¢4.¢Ô‡;ùiBŠ¿FÖëµMn(7?^¸p§1´«yh'HçQÀ}›’Ñõ½1×3â´y¨hÒ’ÌX“¾³ÒÅd¥ éúcÊKª#ᚌ‹µÚd¤Í¢üˆ+¡ÂÐÔOÿCBòîÊjwëá«qnË/3D˜ƒÝ¤  …<%I5"uÇrI¢Î«ÁdÓ»N'›aˆ£§<Òr,°Tyéþ˜Žo)S¥‘0zæ:∛å„`)~hžÑŸ—ðhàç2=ApwÚK vë¾Îj“‘¶eSÑúBð&=D˜(|V˜$Õ¦åŸo¤ãRÙŒtIë*ñQöÁÐjÃ:‘ ÑU|8˜WA¨~þ´,fŒBÌ#TŸWŸ¯ÜS¦½”èms5¾\ê}3Ž$3«QíÊ>G(“¥®´Ž÷×­>ÓMÒÉÞp‡¦ºG|Ÿêòî2ÝMqz¦ãi¦s¾LsÉtü-›ù†½žÉÇRz&ŸÔë™óÝ›ÒÍA— tÒrYb;[ˆ}l=¿ì×yîy¸:ʵáÙƒ²ËëQ` Yïxî`³èѪ<÷+ÒµN¦uϦµùf½¡?¹ÖºÿŒÏqü,ê7p‹ÂŸEýÎ`%ý³¨ß´ŸFýÎ`üÞÞ9Ã!ð[{ÿÛ‚ökB¬¤oïÿÏ£ù…?¨`üÞÞ9Ã!ð[{ÿ'‡Àw…4¿·÷ÿëh~õé4¿³÷£ÏgR/ù܉‡¨®‹-q¢²‡5²šOçôŹ-·¾SÜ6.¶¶ðÏÖÛ¬ê<~´èåhÚâüd֯㳉5Z+Œ‘Î?ôî”ð¿J`BþuË7È“Å7Ò“RuY!•`H³Y&rêN)à„!ufú6¼õ´áj–Sý‹eJý³…̨³ÙЗ'ˆgc1l]ŒÖ£r3ZÇ!жñûM=°†÷]d?üuËÿA5aH³‚†~¢–ÎuM¯çÓ[ââÌN÷ǧ×ËûW«& WÓS—ÞßïFåŸÚv€½Tv5¹Ìν¡÷3òd™=äLÆ!ç©p÷°ˆDµf¨e‘‘"Ëy~N\>ìÞJ£z·¬öãnÎãߌàjthýjÃÖUïi™Ðæ¨|kñ˜e‘ª§ÈÍÔéoLÕÿaó¿Ê¨ˆZéÜŠýöîÕ´€Sm~ršäÜÃQú‡×ünêåÇÃl¡ý»±$¢wƒ¢çw½ÏÔïÚŽcß3Má³l¿Ëhì,—;Ã÷K`týñåq:Zâ“-&!ê³Õ…¨-DU"Un¸lë Qטûáôz½¼Þ·½õŸµBŸzk½´Ý£´$UÀgÞ ÒGåǨ|Ÿš”žV­õágäqz,'Ó3 ÏÏ: ©ÔÛíýŽ8·ËD߀QŸåEÆÃóBP3Óõ!ŠlãV\÷ ª švÃåÄd1¹WæóÂ{àÙïý óeõí~ƒ¨gù,ÔÝc'#[\¸¹épfåðá¡o·:ÙÅoŠjUŽr䵨JíbÌ·SÉþbŸnŒqþ93GjeæŒÔî~ùßúiÿµÃ=oU÷üF?AèWõV"‡«½¢µŸËáâPZ&‡ƒÞ"ŸžiV´"oôE^50ﳂ¶<ÉÆÞJ ¿úi±ôÑ ìSýOö©*fÃ×µ« ¹kþŒøFéÁ¸©ùîòÞ¹[©²g|$•XùÕv;ímÞ9ÈãÈ~QÀJOc0­Ôiò6œ훦hÇçR6-}%¹ÆÝžô›¼!&#ÈLHÝÍÀ‡æ³ïæt¬Ô’“ÑCyŠ£òs#ÍŠ.k‘éOɾ,VHoÝ”ƒDå‹›CâW¼FÎ6”[PMzáùj¾8Î+¼Þ•­ôX–ÑúÀœ6Õº3Yû+]é U¦o90&§cßëˆcEª‰£Ç-)ޏø4kkJ´?¾|—lìŒîÞÏMït¢›èΚÕKó5¨…Iz'×ËvzÚŠšÒ²õ ÜA©ó&‰’hSÜ'UU8eÊ2I<$>ǯ';9 ÜIqôŒ×„7N†î$ä=þ[åÄü?›7nÙÛh£ÞØÎÅçq¡"\LÏfÚ59ÚÙëðL4~‰‡É0-Žw“º8#q¯|$wÊBÚNIüG¤ñ­}œ„žÁÉæY™ž!Èð䇑„Q]EùŸ‘u?× endstream endobj 81 0 obj<>stream z®ûïWŽ“ Ä„!¬g´ìÎü’8I zümUrùb3ÿ?Äj|üÈ ‹£×ƒ,ª)¿2l 7ÄfÊ õÊUàõ,^í¯²ÑZ¿»½UûôðTëmñe ›ÆWÍümË7Èò¸¼ûKx­˜[/:S¾˜˜ˆ£w\ÐöÈöëÒp‘aWÃV#sPk/˜rôãcí%«i¼+(h´ã÷DGêÌÉN̨¶oMcm%ߥۅ{+Þz𥔠ó]›ùÛ77”o6ÁƒìÌ^ KIÀ#¨ å̸>•ÃŽÿäû;{ õRÒ}Þ‘Þ²­6cÛ–ÁùÇVd`žšoÝÄÊKcîq×FK*‹ÂOÞêË=œõv[Ñêý3òL¦[(›ã“¹å'Ó`ƒÛ«—ú%v73™Yöç[Þ­ÎæâT#¶‹ôœðæ’®çÙkùèÈwïÊÎÁ¾›ý½­¢é=Û'v©=Ú%=[ϸZpað°€¼¹}•`}ó×-ÿ-ÿ„ú œ™ò³¨ß 9šDýÎÀøYÔoà„ÍüæÞÿÞ!ð3!…ÍüæÞÿËÑü¾Þ9ƒf~oÁJú÷öþw Ÿi0~oï9HYï?“Ü>@…ó<¦‘X^0+ùÞÍúTfoÙõu‡¨}b³HߨË\:-ÎŽ¿-ÂÁ?ØRˆýÚÞ.íãëUGK_žN–.î=«Bï?Í´ÖÝhQ%ï"vaH¹ÍᙌsÈBÎM@ÎhÆÝ³j0³q“«­¶³¯Ðî½ÌsË…ç(ÛêÙ~,ü“­¾%xKî-£ø½ŒßÃO[Ú£Wse!ç+ò´u{ø°¬²ç[h®s5ñÓ%|0¦½_ôÕ1Ó{\9¢ò%û>Ëøå³|×Þ;¹ Žëˆ8BzÚ‡C DÝæÿ@ݤ— t1øðPÅ7½œËq6HíÅÞÝû´ê)ïn6o͛ឞ7}=Üô˜kLDgÙlÛ—ïOò4}]vÛi5oó´ðóûåU»À![I„œKÈ}~rÆýÀ@.&$¬>¦Ë±+[ |¤öF÷xºoO=^¿´$H¡3‰Ý!ò£Y¸MMà%û®l¤?Z~ƒ«µØüTºQƒÞß!ݨ¹E/ðP¥Å¤Ìºa¾¬Sfðg¯÷6èƒjÑÆŒøÐ¡Ó+?³:­Up_j&œãÄ-÷7“¶W[þ @ÄñÎ.[ †sÍAõ7©e¢fw\>Á¨ò™Å¼PË@ÔV6b#/j.:9Üèެʳ˥ŒÈzÿÿ´i»¢8»¶‹ó,Îó<3 ‚ˆÈ ÈŒ8Dÿÿ¬ªîݽ«ë]õô~¾\,bÕÁéÉ•;‘•d-ÃdØç}»Ü}Ú0–½iµÎ‰LÈ?N¾*ßQµ{„Zî|ç¼–^¦˜¸TÏåÍi®‘“ÔVݪQ¾ìqu9ä¾2Gjþ˜Ë·2‡²?OîõG+ø¿eÉÊÇë¶ÐI¿èRÀø”Ý[®Tô¯J”¥ú×’ÿ‰J7ºðMÕÓ‚{šbÓF¾{¨lŠT™Ôð¤p Ö—­]"ÚÆ!y¨ñÈC}rûr*`'VÓþx§Ñe#Ù§K?r?o¤gÏ\’®–.ÿ¡@Drº ⬶á³Ý7ÁBJS\_Š‘79ÖÜA›Pƒ+{Tîø>—Å8ø¬åÿ,çwîFÙ“ÅdµÛwût›°eb—9kDÈ="œÏ<‚Õ+ÖŸYª-ùµü@½Ã¿µ§‹Kòi¾k±ÂÙJLJçJ‡À4ψ'©T¶Ž¹çú3…÷Y ßÄ“!×G{›N,ÎÛbL>EkÍE"ä”þ8Ð"Þ/H*¾[.¾_·œß’¥úãR²+PyTÎ|¦ö”`qM>­þ#“Ò‹a¶;Þ\w\š‹óGPó…{´êÜÝ%z¡Î亵´©ïkÍ;v÷ÉlÌ9LÜMl4ålÄ%­ÿP "¿ÕL rzmȹš(AÎQwÐËÅ[¿È«’ºK7†Ç3PÜ0ä}àã“»þgÕ9£5÷ò¶H§ßœ7™<- g°we±ÑöUNÏÉj´ô7‰òÓ~Rü3Õô¢VbÈ;„¨‡•rÍLgÓ~ngçÖKHóÝ­{¨Kbϼº"ÏÉ¥3' ji쬖R¶Žiä|Ëëü±àü QW,L”Aed΢iaµÿ}‰¾Mt|6«Å³±·íQÛÌ~%wbd{Šl^K 8x|Ø¢Öxì¾Yc1Xc“jk*ÛÌ: Ú¼ÖhƼnþC1§${·á¤mÝÁ(‰Ù:øûµËnFÖ˜ Cdw¯DC!^û†Ã~w:–6¬2ºL •Íú5¨lŠÛVmY±ê™^?ižõ)(oižþ•n.·èªõòÉëüÕ?0ŒRÕ¿äk~EyͫîÞ|jn¬!1ž_7ØÌw¨nNô¹,xkBÙ+zÛ¿-Ùéû¾l=oф䂯k¯E÷rˆÍÁ„ŽÍ)"1ìçÉy¬?IÏŽA;3oªÙÿPtäìD/•ïÓb=™œíŒîÒ£o§@œÎ‰.¦ç–K´ä]©5¥Mø%7? ‹¾Õ9ÎGÂ[ž®>K§}ªîsš fÖDgfîd]êz“‚Ýò'¥ucÙRôZ£~þñŠÖJ÷ÍcY<¸ÅmŒo›-“£[õç¤7‚"Œh‚|3Ý/ÚA Œ Y  ÍÒ'­R|ª+¿µvÞÛJï[Êvš6•†jE¹êJƒ4lùúæ Œ#³cÜ“ÙÒÆ—Ù$u“™»N]±{ÿ}ù“óÓ‡þ—¨_àŒ,Õ‹úΙò/Q¿Àôßæÿ°ö?œÑˆà¿[ûΨ üwkÿWAû?¬ýgôLûïÖþ?|HŸþ@UK ¬¾v»™µš·™#¡„†¯Í£ViÅaHí8äôDÈYAN,g) '°ä°&X2{Ä?M€Ýl>¨¾Ü²ÇÜR6÷Ó½·|JƒÓýúû6 CÊ¢³­CN7uÕÞâd¶:|vof}#Sâ.:¢VÙd •²³žZÏè®ÂÄG¶Òì$ åÞ€”oÆ–Û›¥sºÛu(J78݉nxâ³Ý‡40ï·c’¢½D–ê'_H™‚!eW @&¬}çÅ>óõÝ?N“÷ôs¬Šj¸î´ “ÒU:Y²†”¨gÚ‘oå·-ï²}zlfväHCá+Þ©—ͧî«QzwQ¬üÃ*•µ¿*Ÿ,Õ'‘²UBeˆj¨>ã Šë¾évôs>BõͽêšZ‡!liOižÌ¥ÞÎéPöiß8§Ÿw%Àg*â°º†Òa”rVå”#”^úå÷år¢Î‡s÷hX”¨ì¯ŠÛœug êòšÝhøËäU‰kj#Yö6ãò=¾ð#Ý=í Ü9õ“uG:€«+ ‡ç@Š…—Ç1©­n‡U;åÁ ž¬}µHJd ýµäå;ê…øŽŠ¤S»{XÝüÕh9­–¾Š¥ÖQu8Õ;ÆUµQ*{Q¶tdBF Ó‘ƒ¸§þw%‘HFéÜŠ¥G‡ÇÉTzV“x ”³¢Í{·©Á…™æù·$²T£#¤,ü@eý5Î~G]ï³Ö=´ô¼ñXjDÏÙ©^”1y½§¥ÝKÝ£léà$¨Ï rÐýo‰Ò“(;ÕAŠ:P{ûµ÷x?1µ8ÖËé»Gý©ü¾üàDOß9‘, io 9·ûÌgBòÝmèù÷k¡‘7é½SŠ– ®ü¨¦r¯°½}Ë–—Q¢ô%Ê‘^…bV˜¿÷Nuðô­ïpmámìzKcÅòQþ›DCÜŸÿM ev+…Ô)BÔ i/ ©¸O[Ú ®r™FðÎVõkYY ÇeG~ÌËàô*ˆŸ.Glÿ¾e»ˆÚP‰éÞC(ß}ð§;$MgG)AeN üôûòé@]Ë?P¥°ôu¾¸ûzÕÌX~·ªú¯©æ”^uQ8)!Ó€¨|õy êûÛŽ³ûì!æ—§`-û ¾¹Ý‚]ysÙÑD¸DÎíI¥ÎL:·T¶ª1;ý¾üà$à_’CÚÉFœ°öõž™²ä ÚhF_¹ˆ:~‘ª¯VJôlyÏ7ÀiÔ¸%¥Uì^>q(…~òcó²oP{F¯9¼æ6ÇtÏ´QªÈôZÉK?“ÈRý§Ï>) cP‰±Q;xÀvRÌ}—m^}p’ÖC—õuº0Ò)EhµÉä¨Üú+[’È)Ö²GÕ¥¢ Ï£mR|˜Ÿ¼Y‰kÞ™l¼£/5ƧKãIYJþLY|I¥ðjòôû«“ÏTÄ7ÔFuZ`ï»jFU vg‚uýÔœ‘e×jWâ ¶Ê’%?ßÒS’×HV,N2©ývz}îĪêmWs¡càB‘o¤§tmÒ›W¢G'IJRôUú}ˆeÒ<9¯/Òi†´×ƒ\;³¹¼\0r«y䪟ñÎj­yû^eW%딬fCÑXnb©ã€{\'£âÈ™r•h¹ýY!v½ŠCìªc`żI°Cp&ظ'ÿ£|,Õø R6&jÔd0¤X¹‡öú,®•·}sÝŒ¡ÉRC/í¹æ7뻓4Î*¢ñœºäþ~ò·Y2؈G´ízœ¢”Nœi{™Ä ï2Þ/V¼wÎï<õ÷"VaHë‡Ó·&ð*dWfî·éš0Ûl&/ŠÓEtÓ˜å!'ÅË/i\ö.\¹þ•µØôZT¢¼N1ZÏáû±ÃFÓ%B«%*Éhì‰ ŸÞù÷R6 ê@‚M¶‡œ§2ó`rº{…ÆÃõ7˜u±¼Ò{;‘Ë!^.îZ “KnßZwU¾Û­|’;µ­1[?yŸ”N¼`·ŸLLTNÏy4MG4-x:š^Þ/¿– ù¿‹!e¢.ˆÚˆçbV™g½S°ÃSrqõ+÷ûLm-p,PTMh”ò ž/\NxzËÛ:£q™¶Íý¼N‚k•¶ß²9Çqv‹NŸÃ-šÖPn³Ì‡MîzÖ~_ brRÊTV©Ü§ ÄÛ'½Zƒèk]?\N²±ò÷áú‚p‡Ý|²“sr—DW{VIÑÊö’pÄȘÜËëì¶Z4>¨ÜÉ(“DåK¡é'±ÝhËmòy)Úbâsü-aQµ D=² Bñ[¢v"­” 0µ?º J›^¸Q£aã1ˆÞ7gÂ_3«\ŠaòLJø–ÜI…M.Êëd¢M;£lÎÒ÷tÌdáB¢3L¢6šËo7KáÌ}A¢oó×PqQˆú´ âÒ¶ïÛ¯A·¤uw)숴æ'5q‰1úØbóS•všûmßtŒ&f:Cy4É’W ‰ò:-šèÇÏ6¦tŽõ<‰*@¡Ì£7gÄÛþ¾Üâ¢ñ¤‰{z ð¼%øŸ™C£$•Ï%?ºLW zŠíè:OÛT+±N;°¨»Ã¶Oì±Îï vjq#,EÌÆèܯ7z16Þ¬N×ñ¦0õ¦kTS¦ëò€Ÿ­‰^|^æÏ“/ˆýX‚ÛýÁNè«ÖôÌÏÉ$ÖåýP÷†Œu{Ï©q% ±¸’ñɰáãÉ]'Zæƒe–é,šoi¹M);˯ñQ½°r¹XqUsíÒ2X*åeó–· Š,¸Ôªºèì'µùþÝn|U¢¼Î?N¬QŠõí= hS„æi »úûcy–a¤Ü¦ø]0!’ý Žå<šC‹Ó¡ºvŒ×eµííìeÛBìÿ|ºóWÝðçC” æñÎ&‹YÔ‡ž%߃ÇT9vÁtÞª€iÆÎ¿'g¢œü}¹,ÆYÛ(%ç@N±³¢Ð—:2‹Ç?¾õ$ô ‘.$†¨Ù¯6ÕÆZµ®ííb ï·ód¥ÆÎfÃÄ~ª±8Í9Úib,ŽÊ¤xÄÕ±ÕšicÌèc„è^Fn¶nH±äŒj£Jð§ÀËü­äEÇ;]ß-Kàh4ËZÃ$ ':‘>¤c¨µ°ª›š­M—{מÎOda6Õ»ëÙÄ,Ô¢õžcûqCÇÕšAŒè1CŽI†^y|7d«K~ØÒÇÂྋ>Ñ•]¹«ôA·uþ-—ùåã| ×ɵçݱ³3"-ˆ¤\˜ë€h¾—ý§”™§Õrqbáûʘ*L[£æþÝî‚`0Ø+ÜhÐï1Ó¾¸]Îû£ærÕ[ãMï4ëF[èÁãŒêMÀ`ÛKÆ\WmŒ¿/ <¯Õ@yŸâAy±ŽƒÒ[œƒÒÆ4î\‰6hº&Ž)ĵ¦Í¡u›SØe¤Ýy]KÑò¹ØŠŸ5$#^Tgµ¸¨DØ1UâT3Õ*’¶ÔÊ3á¨õí*^ÿæ)^íyU¼|â®x1ä%3¶õøS¢!î_K~&¿Fýgä§ý[Ô/ÈÇ„ü—¨_àŒ¬¡‹úNx™ÿrí­ üß„4jÿÝÚe¢Sÿ45¡.bu?ƒ¨º~¬zòš²ˆ‹wjC‹«.ÑK‚ºpzn¿R5«•55¤«[ªC¯/*ïCÄi.âLXŠ·lÅ[Î@ñê‰û§ äs@¾–‚ç©»_K>¨3Å2¹Žrî´%†”áò‰@6âe·’Nôáȩ^_³ü;orUEC¬—¥ºQTÉÕž‹â(›­Ð}ÃQèœá)õ£vUêã­qJ±YÌÿ™|R{ÿá3PæG Pv²êü Q£Ú?ú—;c•â쿊n¥“î›Â6³2ÒWbw.¾ËªVIfmÕBZkLMÅß!ÑÀC¡ÀThÒ°”úûèÈ× çË×–BJ#òÍ7)6½ûâìJX¿% ¬,šÎoSŒjí¡:õVŠJ.^t¼ò»k br©kÒ„ÕðõCÑ*¥¬¥RÝVk+ÌVüSÍV{Ë’¯oÁ–¯GÆ•ÙÈ̹Ÿ¸×ì½(h¢R§Ã*Õ6K"TÒG†t¿‚!íë°ö R¶X‡œý,älßÚæ€óÈLY²=F÷áI«ŒË¶JÍ|G Óof¿.´o>¿ÜNŽ]¹e/ÃÓ}Ž¿¤v alæbÕJ¾¯ÿ£ÀËü¬”m¬ùUE#Tuþµ‰¼…,}¶ÌÁÌô¥ÔÞj¸JªWJ™j½ë»J°ÂœÈé·å]MˆšÀ7ŸŸŸ—¼_íÂXb—PœÇæÞ!¯ÆÍ½½=yO&Õß’oœHªüóÓ:D Bóή›uŸÍ9žôl˜&zž­Rî‡b”ˆ~Që|ÜW˜é~súÛoæcò;ðcte€˜‘ª®p!BkOŒv:OãŸõžK#§ßP¾o[µÀÂÖJ¼¿s¾SìCN§qüx¢f«18ȸT£´È>ªÇ¾'¢·V;_æ„{Ú3ËOæ¹' öMœçÛWíéö¾ZÄ ¾Ñík\{˜–wüå-ýZàeþVä¾ ru÷Ö~9÷‚µ¯÷ŸšªfÜ*@T"9Ô ±*¦‹¸ zFAW®v!ï«}´ßT¿K]WŠÓ—¨×yœ`Ê[(WE—§åþ…cÏ9mÇ_o ûj;Teñ·äg†ôACNÒ\|š@íeÜÃÞúyM±Ã´[õjˆ)–ê}% QÍ~öªŸ«ž•°ÔdžVo'ᙾJ#»9Òh( ¶yãÂnÎÜícZÙ¡#œ˜SŸ92“7e }Ž_•ÿ k¿Üé÷p¾¾_S×UÊ%ñiÙ7­®®wЕæLÑ3MõÉ¡¦„Ìä*ﳩ×)æÇQ¹ÖÚðÅíp$`ET0˜¹T˜T0¶êq|Ü.Æq›Kv…/HdtýqÒ©v•…­•…¨{g›ÀK{4îûûuºd“®[Ü•ÍwmÓ6reyFòF«MXU¹å_Þ+£˜tš2 qʼn}ý‚UÕ¢&°]¼Çm”J ½¶K'z­”Žtqž?ÐÅ^^ø-ùßœ& ©Šò:Í’x»ÊéKÒC|¾¥[ÛÐæùùGZs½Œ¢2fåªt…jú¸xÊ™}ã©Ü·çëѦË9!¤ð{ˤ*½ŒFºçû‰tiO$Ý•'PÈì?Öþ8ùµ¤¥w2iï`à!ªêúõ±5ü0Lœ@ÜÃ÷©¼Íg¦Í‹Ò—':Ú[RzYmFOh8Wç¸Ü©ágÏÝhš™Ë‰¶w½ì«åì𙦶L0æùH¡-i _•È芎?PìTgtY~ƒø5¯ë1­óg—Ë6¬DÅœêV¾FËbŠæy“T/ysx®›q™…<=}R:1q70ÑŠE™)ØKN𨠹hx9Ë8(GüÞ9~K2vzA{0¤íät|ÈÙ©JÏzº½¤oƒ»øÖ‰nÁ«VÛœÝc¥? gâ%D¡nSÏYõóîȲƶx®‰Ä­c°ÑnÈ S =¢S˜èI»Xœ:«ØpɱÒ=ü)Ñ·ùkÉÏ ?Bmöù|„óh‰Œ*´âÝ{BñÌÙ¯UÑZĸz\ÏFýýõÞZs`w6kŒ2'e6S«ÊŸ5çO…¦…!9‘â&wµõÍâr9£©«¤ “ {ü-ùÌFmXû°ß›`xÍA¥0çž«‡i6å8<è„:ÙXÇ$Íö3B³¶iqCŒí’— õmOÌüè!RÔ)½‹9,GAc!ÇRìÝÓ !1 )ü¸!ØôTÑ…ÍÔ6k±^_c»{}å¸ç檖çÛË-Jt¡:ì-v‹Épþ0†“ù~ƒ®~&ò>•eµ *í1cŸ­T¶¾Tsޤ¸kðÓV~Ê%lMuócšHù¦'&–íôît¬?×½Ÿ r&Zò»d\/±¸ç¥Ô¢;¡3sa?ÉÎÞïv~vd¥Ù¸T­Le¢P›ÎªÎoÉíÐÌ•@åùÙûÁ”O“²Öö÷=HÙóx¹6Î3¤ÖëR=®8Õ~GáPs·Á‘ùi”u¹1}ѯä.óQÌ0g§¶àÌR䯛ÎA0ÍŽ[ádÅçï“B5ù_ülì“×¹Î&G6ŒÉo‰ýÈKŽ%Jw µLçq´­ *C¥ë/ªï«5\ s#+m¢–¶öã€Zòh•šKM’šÍÎÅ-ìĸìÄp´ý¤”ãcëHIcä>“G.1PGTulŒjz×£º=lÊopëV”O^çÿ.6'FÜК.¢I…-çòrVž1TÊÛ‘ïmÏÆ—±wE ­¾ºmǃÅ1ÎÛp8-€õhR›³qU½ÍGôÛXÖý.î°MàØàQÅɯ/éAo4fú¯ÄŒë¸Á¾-±'Ñ-ù·Dó÷ÚAÊïî{þX›GãHI4É7®ðœD6T©f/Ÿ»ãm>K%ŸÓMqS $5b:éÂëß*al4úoEn÷½c¿ŸØâƒž\ÜŒ{Sy6í¥gËeW³MwA°Žv£ 3:k¬Ëþ–H‹çç_[“€ˆ¥ylLÓ˜1~·65ë¸\öŸ1b¦ÍçìG‡ìGßfØy.­èöç÷µ7+<Ÿ] »Ç»9×Ku êšëlê×bÛbm¤·½zy\Û-wﵨ>µê±Ìâ×/ó·P¼Üî ÔxŽ@©) ”Ì! È÷IPìaÖÃM áã–‚iÅéz­9sEXÛb…0ïÂe{“9{UþËƸéGSxFÂrd#Á™ª.Wt]—3¾­OÏ¡§OÅÔí¼0­(ì®_•ŸqF/‚‹úÎhˆûoQ¿À /ó¯Q¿@÷—oó_©ýç§ üÖþõý¥QrŽÔ (•*(*Sê[yë&Âýƒ(éŠßsM­³°ý9‡Y¬U¢Í^]b/ÃÔ„7¤ZY4’£ð¨Ë–)ë³™ªéio¯ŸµÕΆç¯Jtß”Vý7(ù#ˆdac`¦u¼ƒ¨ŒQ_Ø;HlÞ_ÊfÓ¡È÷Ä|êì’øLEr‹çžÇ±{ö«TãcãŸ÷•›¨ðÌZâØUGüª€Òaÿ˜Ylʹ2Œêq ï©@%A¹×~R†‡ç=ãŸßÙŠã…ýÕK2«K[=ßF¾)\T*£ÚÊvšûÌG8rËÞÜŽry5e=yz¶–9–îH»Gw½É[øª|PA¹º]BÎ ©±†!}«8(/³çgUŠƒðÅ•¢ÔÞ «+nõ€u-ÞÐæ—ä-Iêy‰>h¸Q>«ºJsš³OÒØ•€X‡¼ý²yO^h®xÚñÒSd_eW`‡{C`ã}™ÿ›D©½?)þ(©ÄwÔZ†ÔˆfRj&D ꓬ—·~sœ(_qI\mÛtmq9U7¤¾¢.{ÍÞ¯Î*]jŸìn$íJb6æV­—Ï7º5}Ç_Ü{xÈ"_æT&ÅàüVm-w_•ýê›]†Q ¢™”¾‰‚²[UžŽ;yÜö>• ´º‡xˆÑèØ·Õiaޤi,ÖÔáŒ52†ê×ø@¡¨cn—I[ìðÁ(Ì4·‘¶êf l¥n´mÖnq´NTX(õ/ (y\òƒ é0¤¬ý2éo’nËÁØû½s¿¥®³Y7êú%Ôë:×ñ|am•5“B¨«”ªM¢^,îÞ3/[mA™ôÚΜèâ<)RV6)Pæ+ÉCÉp”égvPòìÏ$r9~Rüu~ZCÔ* é‹fQk€tz@L)¼ßcd8~• Ð^5¤PçÖ NVb/øš?ž:ÒÌ/ûæ|öëÔëO‰lÌ6Á„ʉ³HÖã¶@ÖB›'k¦Í‘Tüº#ÉÐc¾* ÈIèP^´ÝoM` Q¯%@vsTvð`;zò6”¶Õ«úЧž—Ôi§7N麹êò1nœUj«°Jj"’L°ÄÔÓ°¡ ß®À•$¼«±‡“<~{>¿ÃÞJK;‚éœÙ¯ (gdHÇ;°Y.”] H|݃Ê8ö–ЇSÉ,ù•£ÍI;{2Nåck§ ì'"ÛǽÖÇ=“7ªÑmué¶2kƒ½è•eeTºÒ"6¬óìP§y Xï.Yö%ʶûk (WŒôwT² Q÷ûr”Õ;•!¿{6†Wý–¨H‰ÅmqÛ©Y+C¦9+½öŒ{Wµ5›e2ÚÀqmÒøYŽAxjm\¥ÃÊrÎçµþ`åÍ"…Šhª½Ú£‹rXŒ³_•ïœ ¼ƒÊû¡ k]-},Õ°1àÑ7Q@ªšÕ«Nõ@^‘£²X-õ*|,iµØÜà2¢MjE†ñ“ ™Wr“§ìÝÊn_ŽK/'i+«OHëõb~Ød÷“h*b£<æÜW”g·,(Û!DU‡N´–+mŠÐy´Mb”ªþ"Nwz=ËÙJ²-ÆE’d>?U ‚$c¸—M©ÕÌœ&DOḴTµ»Ø¬¦öj|eKÞnéí/â‚mÔ%µA¥¬Äu17ÙÿZ"ÏæPÆß9P¾? ª3q¢4ù$¨fØúUk©5{O´ å€VRù»-RìÛáãϔ͠˜{§ëd9MrÝS•èïF]lÚz}]¬Ë‚4ŠLÈ*ŠN—´Co– òL/ÚŒÂÏ{Äá4ç«sqÁ½ýWV|±r ¶ÒÇÄ‚ÑÌ€›Hž£9i§G©¡NÍó Hy EúLÊ|2Nœ¤ñV)Ö)¹Ä¡Ë¾ð£9Ícé (oÖ¯qå³Ì|Äøæ"t&ù#è çûÍd6ï·øLäáËà´æÓSbÍß|Ž_ÍN Öy >?%Z{6Àòê'ò »¸ìCÄISÜÂ^*ŸêåWö<Õ‘–G"n£6ßµ¯h>ðÁÍâ«ú$—­º”YtËDa>Èõʳã¸Q›%øj{:}5PˆÅ4­Ûä$ÇI»/¼Ìç†-¬£œîÃ5'«˜Ýf„2Yæ¯âö¦6ù4#/âZŨ®û¦q™ÉìQ£€Ê$Ÿ2WÛêÖY¶¹¢?ÅŽÁ<öÀï³In¦ód9ê§MνTj’§_¹ñ¥Y¨Œ7·Fk\âV£‘Ý=,¿*aDøü¼T—·¸xh½S&5ž‚ˆóÈ„”³/*)óo]?)†”ˆª^`“Õ6k×›)Ç(x7üšú4×dž¨!ÏÄË4ÄZþLË ½|é8u‹þ`éà‰j»ˆ6²IáÊXþEÚY>{­mù¢X Õ3¬†V¹^`§í¦ŸÖWÓÓT1t­A@a_‚°Ž 9]jóiÂÛ…3UÅjÅÞâü4õ5¸7®‡tØ;*ÁdHv¼ó21‚}SyáàëúÚv¹$nׄ em/®PL1È¢Š¹ŠD‡E~g<­ªø¾7^öú:–«‘™’Zí{Þj™ž¸%…[:•u µëÈ´˜ºÄ˜»Çdgv½Ãåñž(Øá3 (¡­nšþt<ÅMÕ.rs«i§ŽŒ+?“Èük hËÅÈ‚"¢á j>(΂&(Þ1:²¥!êüôº7»¾sú¯®ö}¯@!s‡˜Sk›N”p‹Ñì­É¡({y’íè}sé ’ñ.•ÏÆ; ›ò¨·zhFÚôòQ´N·õQ—ú^I>Žc×ãFs`CÄd;¬ëL'øLE(‰&(•¶4UZŠîMÌ^¹vÅW=sàšj•àPë*gH“±Û ˆf&ÞFV4ŽÅ—bŒø”i$ªðœÃ›RSÞö©s[êÇ÷9ùâ¬}Ú~uø‚ÀhÎH™ÏƒâÔ%@±2 A)YkG^/ Jçü´“>¸·ºùôõHÎ+þ|FÒÑäÄÒöy·X«)%‚½Äúå½1n†’.wõ³>=;Îy­Bµ‹žô´Æ—ãxpUÅL™•#(„Ò8%ü£|R{œ€byãBÊDÅn°eÎÖ7H9í€ÒñD€’ñÐ@éRw61N‡±2‹øv\< Ÿ1AÒ%ÌWÚ^Íã .|›âI{§ÏÃf7oŠ+5¯Òó6¶Dù"i‡|¿! ¥Mü¸¯p¦ÀS`ÇA 熫@q÷¦@‘ÛBNfÑþ¸êŠr>®@i<îWK‡Ã˜‡øçRªåZ&9³ƒÍ›0Ÿ‰{^ø½‘ RÇó9³×Îù8éhÅçH 1°Å™ÄŸ…K­ªì‰„säéÊþÀ±Qä§qíøˆû‚€b‡!Ýu‹ (§átS0X ”s‘4H@yÙ»=„› ^ æýUË+ô¨gc×4j>·8{‰_¥½>ß¾¤sþ@êÚÃÂÓ=+âìÂBI|)<Ý݉;ìïww³ÆïzÇ‚gb÷k‰,ÕèŠÆûŽj· TôŸ‘1ÙåEäå#(»høØ¶‹©[?Á Ú¶Ûª”ÇÝ!Q«KXÌ%AÝ={L´RØ7¢Ôý‘Ž…{¢¨ËÜõ¼wü.·g_©7ÏÖŽ× –‘™ù‚|çÍÒõŠà»Xm7Î5Ê£‹5l¼âëëâÝï/ÙÇ—n²Ê­WFy qçý…Ž =>†K 1lОE@ñê^A©q¬‚ÒšÜÃ;~„}d@…æ»öé¼¼.SDÔ Ýëý Ù‰"H ÖáámæE{츷ý.l1uXÄ_ªQ\›]Y°zØ›ü81Û¶°zYfU¾èua\ ×çc™ØÌÞUl£ÔÚÿC>–ê_JþPŠÝà‹~¨ATQ`ÅÏ£=ú É'MjáTjt¼F²<µÒˆ¹Ó©ZÇVÞdx4Oâ{ß“³q6cR$ŸÌFskèr|Ì­j‚‚Ìïj{6ªfçÓÓ–ßÏbV•›sëìv±=¿È%Yyá«2Ç`£×_PÊ¿áÛ“vkß&$} Ö‚mÛË-§<:±M›ªÛlŸߥ•ñä.‘pkðïuÅaÌ—ûþæ†Í§=°¶«›ä²•?äæý Q™%æ…ÞTÎòèd!+‡iªÛ‹nÏYl–¢gÏÓƒ˜ß !ºhœõV|†ôün|[qˆ\¤ó#Œg\ßòSUÅðÌl YA½è×ãDo¸çøãkpd¬GY#Ÿ¬e`*l›òXõ—W9÷Œ¶¾ŒÏÆ›rv:ëe+“å¨ÑŸä6.ï0Ö(7™¯²ät¬½°éQ0דÈèúI1(­;(½ŠŸÕ<Ûhþc˜—wVÊÉÑgæp å9{hŠ´§.ø “Œ}¥÷$X!LãcÒÓÚúªñÂÌEO¢i¢™¤nnÓy©ôšäõxfŒ& •‘Ým÷FD悽Qr?BÌÃndîÚäxu*à_Í|Î÷ú€H½¨Aß“9jIʲyfèñVÎN*7±YQ«ütlŒ’²1ò…ï)<Pì?ñûåMÑ‹¾Ü‘g§‹¥O5Üž”z0.o3ÏQ'‡ô9[6VóÎ ,\²8ã×Y’Ö‘ ó%° ¬ìú " Ss–NÅÎÛT¼pÒ“öÀeˆ;Ÿf´"SÓìùf Ñeðì3±ÙzžXµóz.×Ô,Sï&Æ^ÆÖf#Üù@Õ¶-wØÄKá`w®Æá0×ߟÐ*”ë°ßŸÍˆþwÅŸIäþµ”gr Æ£cNsCW»÷¤5Ò™CG{±ÜâŽ\¶Árù"Mµ€ÓZgCÞåùòážçóS?¾˜ê™ÅzR.ßÐqå}$Gu{™Ã–>ØGëàO0u½?XUì~¬0¾õÆÓy¬—L³¹^âyotåCeøe+ˆ[2uÖš W:e|&ßÒ±Äå8Ý2ù˜HŽnÛ¤œ÷¦fãÅeÿy©ÎÓj»9±º»Ö˜4;ýQ³ ;pø?ègñe_lŽÑ~P½É¹ËuÕxKìÎwµ›íl¬ÎÙe¢4¸ÎŠºÄ:…¼—þ‚8­’)jt0`¥e‡ß í*ìàmV¦o›Õ€;ŽZ‹þaÝôÜËb+9³œ~ˆ\õ â5ž#¦}‹;o9Ý+x¡?ÎâÕÞ¬8nt5|Üëæ¼ñ¸³)tçدÄÚØs@·j̵Ü:.µÈ §·jèÑúG‰ò:ÿ89µBƒÇ¶HñE§_ ¼Ìçr·‚r\Ï9ÜIƒÜ|¾€â) ç  (—Èíïdà¿ËwÝgÁÉ<e1Lß«ø©x£Ûjx5§ÍN{×»Ð]ùzgvåcýh|síJ "mrÀž¯ZÜò“cÇu.ÍŽiÑuM7ÙöRýµüš3ê ü[Ô/pF뾎ÚÖAN~å@ŽXAT5yùò!òXäÓä„Êä–Kÿa:¥÷lš™Û6³-F–jØX×Ãö´Ó¾ÞŸÁµ—Ï Á¡]DƒC¹¿ êB{QõÇGÝq—¯µkW\÷réÕ2ªqØzò¯% Z>Q…òFÕNåAŽ'V Ÿªè ^2 ¿ƒÝüt@AÞ™ü4³à9娽Ötr·Ø"aÛìׯüé¯|b¤Ä,–ž« ¦¼q_êç¢a”/ÕúG_ÊíM÷Ü[¸6Ñy:žÌŸõÉluÒS•ùÿG@¾Ø€œÖür÷Bäv ò“ñûö‰>߯¤ÈËhOCÀ¯Ä©ÆoAÑ̇;z\÷ÓZ3xQé^ Æ“ ^rç¾Ä[R è(ƒ÷“ð ç)-ÌuJ·„w¹?ê]²EÓcQ[IN´<îsüGùf¢ÞVÈ'Ëõ®  álPhÀiaÈLá_É]ã¹Ñ˜ðî:ä­i©…°C¯«×~‰¬¡`”{üSI›ø^^yŠ/àÞ|$l½9|–z;­»yñMVš9F¼Éëçì*~RËûµ ï&ÿkùÑDú­Èš ßê•@¾dc ×P8,K à¹ PÐÓ(Œæ³ä ·;õh'ÃÛÍ,]…Æ´ˆÏ\×?­‘ŸR„¹7÷ñ—á”{¶(Þ]ÍdÅ]õrÑ.#-0¾Ѻ¦×}YqàËOnÜ\îrÚî×òë¹ãÊCÎñ¤ òl’êÙÒнô «ÍÃÇU÷ûγŒ=a·"5L…|Â/_Ãu3H‰žŸnÇÞ¢G­\}½$ÜÞÚ:088(Í6±ÓBc¨ó¦¦U!ûÍã)´Œ½ÔØã;^ß~^æÏ“¿ ÈoQØZG’ò›ò×:ÙÒ(r·*(Ú£ (*䉽÷Dµ×½Áé°W ËרŠlù²z‹;7ýÌFm»+ÇäJ¤S>$w¶S¨È6q¢|ãEØž¦S¾®Ôr9éÔéRû£hfXqº?Óbº ~- /s­XŸ&À ( "h¶Žì^¤J-rJp,ŠwÝ}b/!~oÖílØ;f‘@¢·m?³x]¾Õ«ÙB¤’ÙÚdþ.X~'c˜m)ž³Ï‡)ûþ3zßH{o,ˆrêÂJ ›dƒŠJùÿ# ¯³2ŒëÅyƒ¯‚‚À1 h‰·o è%f¿Šöàiõžø\}ß™L>öûC$8eôŽŸq‘±»á©…ƒXyÌ® .ŒµmŸOf¸Lg•Ë:r}«Ç÷0/ˆé=¿ŒMo»Ç»‚§†"Ê× ÿS"—ã¯%yÿ ÀÐÚ5j ð4XP*:÷(_¬ƒhk”÷kJׂ JR3~¿&6¹Ph §üj{zº9úÌ Ø®Uúü$Åörà.ûM[6FÙÕU©-ç㱑ËÜd··”ø–§èÉ1' ßÝÓýÍŽÓj«_ È¿$È©_Ÿ?Í;·(­_÷(å¾?åe´WÆrb=«íÂóv·ðôUJIE_Ã_ £Š}+lV&†T}ÌÎË!²V­š±Uj„!ä$ÇÇ»@ÝrŒ¹ˆVáí¸g cÁ ±fÆsÍÆ6îò×òÕ.(äì¼r\äö= ârî_SPv‡Ó¥/÷]/Œ:PaüÐ|û+c•v+¡X6qV×d¼©:ùgGnÙ±4˜¢ QfçŒPj¥xîÚÀ¶;>ì¡öÄØØÑE™Iò¸Ú*sj±UîïYª-…ìY…Mz Póš°Ö ê»zeòí,]¤CïÛKO ß#Õfñîº%:eý?ÆÎ´[UÖ¿E¥±§GDAÅTìE°ÃŒþÿÖ9Uu«ÆYûÞ/ ·c3MBx3ó&H"á7©)½+‚Jv-sHnј}J?3·ª4à•¦u*ñJ†½Q[v†Ûí¨=$ˆzs°÷5sÐl‰ åÿ@Î,MX¨´™â`ÕgåuòÀ^’½…¾ rëí0ÙÂâQïÎüë9—»_í‹Qjw+¢ÈZÙÙè‚<ªä¬X²ÎŒêG«{I6¦fwàZg@·ò-ûÈP¦m~”Á#eØl¯ÿà_RqX¤.Ńlµ3¬Q{€ú¤’üS%¾‡½î+e ÎÆwÛpðî$Ï›#âmŸ^è¾_YìÅ>¾³Òh‘½64ÚÎÑJïîÛ‡Vïæš½›»7 Îö¡qýþOH²Tÿ}hé ¥³°TÃ<,ÕÅ,1üš7ÓÓȧÇR4¥TãÑÆýëeÿ\žeîø‡¸pÙNâîuéÕ>·˜¶_ÎÜgã!µË|û%µ¼=®¿˜³–}BïÈqÍì¸hÃè¼y«Ñ¬1Dm wñüµ?Ðhh¹I9MÙÏq–ìßqýÉë\ÓèûJϹ—jñÕ;“EÛá¨E¸¯RßxÃê1X×4ê4ïN8qKøuè{‹[˜q£Žjl¿müV¥›–8TZf”6Úõ6Q·2÷‚nU¿åšµ,JIœf}eµúÿ@÷S>  ñ˜NW€w|zžìàpNÞ–Žù\#ûØÍhî–çó\¿Œý®¹[y^M‚Û%½ßî§Ñ'ŒñÞöh—PùÜYÒùk«Õ“"³ˆ}±Æó( Æ>æy©7â³Ö2'­åm>Õv=K¨ôïH,Õäè@½ ”zt¡Ô>1¹ñþòóîçµ(±ÈùÒÙK,5”C3.v=.Œ×8úž»#¬¶vt!Øz'u×0¿MÍÀÉx0ì£î®Âd|£kf®¢/Í]³!äÖu£ì¬kf†÷ý¹yT›íýEnðúgzGA»6|z–CÞî¬ò©«×ùĶ{Óíí2½î¿GRq¸ýíµ46k®l/zÚÄ™¦¸x6<Íyï­Ò+‹ÄÃ9ä®AýÓUïµ–Ik͇QÑh=Ý©mGSÿ* ½{ ­1~ÏTcàøÉ^ªÆ ³–ÿ @_ò@Ç“dýœ r¼4„¥‰,Ÿë`°ù<±<´–þsÏeìÂ6Ó«ËκӚÍZ¥þ¸éïÊæÉ’Ó©¿ÓnÓ>ž– wGíkÞ¼w­ž¼VF 7N-åV£jc-­‰µ:?ÓôêjV­Ë¥…R—S}ñÏøyz¢â0ì&ñ&[ È=¬nó½n’‚Ú80ZfèMNØsƒyrunú]dÕ13¶0Ú£9î¶ŠÈzÔøx¯¹N,¹]õÒJÝÔò•@þXK&VþÕv”QxªE…oWYãcT†_Ó¼ÝB­a—™òg†7Ï€¿`#_ywlœü@˜j[ôD§ŒÖÖ͸̓™j·,;:óÞŒÚñ¢l½UR -#Åè]ݴ‰Öå̵z¯fÊ+Ÿå7­²¬¯Yîz9Úsc…K-åöà µÄšz¾?“DåŸã¯Œeé©¥@î–NŸñù韑^´üAX «ñœ_§S´!|F½CêÄN©ã“¹5x>tCÝ¡ÉóFß_å¶vžúÕÒÖt”ˆÉ¯ä7Èe¥¬ÄÒ²3 ¤LñRæúr¤Ï|3–Å'Õ“'µ±)¿¬ñgæütlý„œ§µÚÑÏ•[û-pû—•å§yw¶òcZñ‡wªõ/ï¹\¡u—ºb²@^Ñý×N©±Ïb­:$æÌŽüÉ(c9Ä¥T£•@ÜêíÄqwŽ{5[šé°#Ö+äXª¦7}I]Û½?d•ïý2Êú ߇îæÛSÜ¥u2½Ù×Ò§¼Î°rÈ&yýêkœx¨ñ»5*ˆ¨¡¥š„´Ž´ZÅj%$9ÅE6²¼¸Ù5i½©·ÄÝ\±Eâ¨L…fîø£Ò=óÖ#<ëäî"xUÞêVü¡+Ø?HÜÁŸüëüjPc{¸Y”{ÝEwUèO?_ÕŸT*7˜dǵÞFLb £³lNÊË]c£EΜ¤³V|<ïêD^ù»­']§œñJÂN\^$¯yN`žù*ßÄ&ÚŠÍõYån¹^e„†×JÅ˧*×+–_ÊWþ3³ÛÛ€çy¿ÈõZõi/š£~a¶ÝüézŠ^´rþ«jºBª^÷|³– Ýj%†Š’¹OåÌ~³½Nw'výÀŸÆÊ•ÏÅZÌ¿Rª2Òjdùµµ e‘‹?yþ¡QrÛ©^IÉrÓâ÷<ñ!¼ÓŸ±¦žÚ‚ÝßÅÉòÇ6E.¯ö«ÏtÐ ´Ù½5ÊÝßFõK¤ô6­£ð2Õû( ·ª°P ^=ë! íâJãs‘ÕøË>Ukvùµ©9e¯ÍÿåœZ§¢–?LÓB½t# Ø-ä=GU šÚ/ó?Ÿü`qØ/+“%”7qÎu·Î£fåöîÌøNƒ:éíFš]ÌM•÷|²”3ž¸M9ó§áþÎÙâ8®ŒÔNª<Ñ«Hâ&;‘ÿË>- ›~Ž+`÷¢’8§õ\0Ú¹¶Ô±§ÅpÎv«;ÍgâÍ#èýϘ|‘C~p°¹.Ö^ç|hko™¹¯×r祬 ï+/m ^Úù£Ä…ŽS«Œ”V³,¢B·¤¹aQËb“B=ÿróÞà¾Ê“Ïp—k §€=¹Á™í*÷G6\ÝßÙúH3wO~ ÃQTŽ~8ŽÙºÑÖÿ @˜Â©ª pËð^{£®5@T%­Õ •'„~nü¼RŸNá÷¥íàÄõ°o , €-ËôÛãøÂÛ8ó•7ÙPeˆ©ûŸ}/f¸Ô<ÊIÈî9dždÜî>óq¹è´H+Q·Bԣ܉ï¾Âº5…}ïÜ¿¿ÝÚáZ—v»ó «#××fAª¾ý’ìîŸÂ3 TsKõ1 ¡¶(@J w©€ÿ¿æ¨w[Ä÷ ›Ê*µ_ßûâCë‰ÆÙÉ‘ŽÎø±åÕÿ »$TÙúÍ|Ù";xÞêò1‡[&ºø—l½¸=D2ç©îv²Ç×ìàÏDØbíl‘”Ä~Ár;ý¹o(^ôU[¥á_2 /QꆀLQÔË=Þ´œúÆV+&¢^~òóuùeñUÒµç=ܵŸ#óã<^kÉ¿-WéÓ%™‰ KÞÐÍÑMÚ€rìÔkîߥ=ã§¢Âɧ^åf§ðwªü_S<âAhÝßJZÚ°OïŠ7†—#jž€Ú|gÍfãÍàŒõW±êZËENlþ€ÖPgèCƒôPˆT4%BûÌùgD€Û 'ÁOî]@—Os¨wsx·ó…2šyÝÇß¡õâ#Î ÒçsÝ{ÊÝ›¯§²<ø(®.w¬ÑqÖô—G±k3•Ì­ÍìXÿ3©û°x_V°Ò! Ú½ ÝÑ0¢|ÌäDfJ±A£Øô§¸üËîo¿]¨s÷³ ì5|ùôS õÒCòù®j¯ÆmÕxÛ7dTÜ\²/ìú3M²½õéš¿ºö2"Ö|·Ü6ÝV¯Ñ˜u†„ögüLáuްíåâ5l£ê P÷m0X0Ìɹ‚l–a@–kU“Í™Âû™!YÅóî`¡ËËõ£fsÖñ鯴MLÏ{T‡çíñ$n¡¥àl¯WÈáÝóñ ƒç²ûõæ½æ÷®ïØ]ÑYÍæh·ÝÙ©À6§vúXŸTÂ~Í™”ªÕñ{UIFÒ?Ç_Hç6­õ‹ô4‡R]œKŒIª£v4`É‹ò.dwÖkÚÅF-Öæ7*?Ø^BÙ?gB7ñäÓ{z‡Ôì½ G©Ì¦2˜Ò«™×(/«msn,­î,76'#aØpDª¢>£Ž–Ó»<Òÿ/rýüÙ횬£@1‡' ß ´•x¨ü=Ù°—¬KÈ‘SÏ´voÍ{~|¹>Ë£2xo|ã¼ßï.æú´á+Ám¥¬ñhQ׆)7hÉô¬‹·¤É}í$÷#–rú8•}i#mzR‡›ÏRâÕ®8Ø3öÿ€<~¦°â ¨³"Àu¨s8›VnÜ’}P‰ø\’÷x<¿Œ Þ•× Ãl¶’¾ÇßÛš»³'ôjý.fvK=ÜÙ=O¯ÙÓ‰x1=v%7ZÂñÌp[pµÁ¾j*j#Jö¡^m ÏòvvOq?H\ŽŸüþ–:a·€Z"/ØFmdo—Ä˜ì… ‡~ÐȉfìcÓÍñ×S¼©aßv¡ïõ¢h¼³ÙZ§¹ ±™<Î~<Âóp»iGƒf¹GØVWl6O)ýž‰ýÞ %ö ¥ˆï¨ˆë]×òŸÈWêÜ”^¿K}K1`ްŴ ØËøüshê¥ZÄݼ’…ðz¹+G-äõýÉyY[¡bõW¨\¹çZäL^×›;®2›¿)íûë|핃cºËÇM¡ë°?Ã(xœ‹] Ýq<å æ•îø2/ÿ€Êð¡³)lám/F Kß%Ø6éȱ«c<’ÑJßÛÌ%½À9Ù\Ðl?Õ݃êëÌ Ýž7Ao:zö¸†é£Að±Ý~)uÞvÞmõdU席Ÿ.E+ñ¼Umó¼µIœõ jë³TKéÞü¿ÄÿýÉàmĺð¶çw€î›1ȶ06ÏòäÆgÿ8ërß¿ ¯ðž® Çõ-•Û÷>}a37ê’âwÆlD×[NUb;CzŒ%ö~9;ó¢:oãªï5Ûîînvצ™-ùy¹–WH—ÛXƒ(·õ]j¯·…âŸñ·Î—êú2yÿt>ìºr¨4z‡«ë湚J»[.Oœ.¢Ž~‚6Ö#wÎ$WZ혽ä^—Um¢Ø©úˆ<^šý;±±: kÕkÓ´cö¼ÖªñDK=&ïxcl9Ã~“B3»ÎºÔ̦/¥fÐŒ‹-rçÿ @U .ÔÛôß>€-$nŸÕèG‘¬Žî~óé„£9º96!ÜÛ+6Yò»ÑR»è j•鬑ÆDv_µTGï*]Ól›ÅžeÚéÝ !Œå¹¾¸Ë§Ú Q=ƒvøº´êW<Õ/%oQ4lÏÉ›ùÜî‘üšÿþvNêPÃé0ḛ̈Ӆš“Ö+Í<›×ЙµÏêã6ñ/åð°þü½¢Œ:áršwô5ìà/~OêIYmïŸYͼn¥ÄåhˆïuOGúòL3Ï‚_mÂLµ8’æ[œž¾tÊú‡ïëÓq¿ÐàÃÜŸ%Ö€&®È–•4ÈeoI¨þ.­$ýà ªd” 'ÞíÝ;¥íÖ.=æƒ HOVÚšž©z®/æËeËÓH¾Ù)¹1óku]Wnþ'j_úÊ-(f”aÕÕ·“ªÁÒIºNÍ#‡åš^lô´¡³ üÞ Ð»ü1ÙJ >ÂY:<^ÓN}}/ ;ùþ°ÖäD]ÎïÅþyºX’4¸Ñqh ýX¦ÈNÃú°­<ø– ñ‘ô-3дö‘m«ö*ܬ|ÅÀG$P‹Úò‹mèÊ`{Õ²ãªY¤_¬Y#ÿOH<›Ÿê3]Æ…€¼±ó”•ŽAKôá@·š¾oµ6_Ze…›á¾¾•Édã˜ûQWšÞûïñtŒk/Ý*ޤ!wî9}w+ZgiêЙ'Kåwj>“¾¹ÔYÊ(=LÊ4_=I¸¶ôÞÍuÙé—%ùYxrÊ °(þ€–`ã˪™Ç¥²],:õžïœÀM²T7Hœ9,óo=7‹P›àÇúhxíM7ýyéx÷«Uò²_#Õª¤uó±$µüR,¨c‚’dÐM™’ö#÷òž@=Foþ°I‚9aú¢žs[âÊÄëð2’R\©Ò,àù?Ð1åÝ uxi3Þñ“h°ÆŽggQØç·³tËÎ:´“Õ†åí|ÐOÏÓ«è§Vù¹Læ¤ôöé­|á£bUÄdäE‹«H(ÈkB«“ïðpýñäÄsT¦r»æ î|•» ÑÛ‚a.Âö¯þŠ$K59¾O¶w¬ºfg7Î[­ŸäN÷!]º“ÍråsV”Ûqµ§Ã'ƒu2‰‡zÚ665<ñP›§ê}ß”÷rÉ¿”½.E Ì#Êÿlú“¢¸Â›Uœòkçe‘*~Ëbº¨–c§]¹ÑF‹;ÓÅÆŸqvÒ˳'j}ÕU·r|Wíãe ‡þ#Y\ÞÿŽh×LµÊm› UÓ²d+ÔV-{êk& åïæ>•êôd)¶æñ]¾‹ïK=*¦Ê"Q¦KnËJ s0ŠË>*j…IPÔŠ]¢˜y`Ò;è9ÆŸ±?UújËex·’ksÞÇyû…_åÞ†Ö©aÜš/ûŒÌ’Eô6íPÕûèË*ïŤ,göù$£K4Ù‡’¤ Ö¸âG2*ð?ë–E¼<.)tyY\vjAac7ì±Èä½ñ'—7UÍ“ïm7O‚ú6,²©?#Ik­wÅ-»Taì y›?Š_¤šíâÑœKÉrôÀ¼Ì4»¨¯U¼}YÃFg¨.çOÃGÄÁôS~­LÉ5‹xqi1Ùbæ’+°;#ýئIúh0­vrÌg8ûÛ4EÒ·l¸•SY»1Ëfm£Pý3Üë°cá™~tYÐVëãˆWÚl`k§®…½ÍÏ4‘pUÎì¦5!èÑu>÷¼µ*#eÖ+‹hkTü•iaÓË,òÞàµÉ“Ï—Ÿk ¯3{rßÿrN±ÊŒL*K¿"ÿc‡Rï‹×£Þ!6£\»šloøsüŽ^¡I››¸Å”CÜ”®Å¢^¡Zy²²†´tu‚ Ço²üZN˜’B(¹bæ”-å=;ârÁøœDìi¶R²árPÍ–Aƒ5zMúå÷:´Èô”ÛLÈïuº"µò6 6ÎõNÔEê‹{ó21-ÿÏÚ?k ±©ÝèÇžt±ÜlæfŽUD€ç}ø×ÇØ•6ïÓS×ÀèØè‹ô$ͺ±<€Næ€vá` ­ƒ/@¥ЂUhIÞæP²nClÜxuç;,ÍŸ0œ€c>VߪÅôðWüHØvÒ1™A±§Àâx§£@\àWêôÏÖ“x¾ Þ õÞ€UÓ-€1…1Ô«.¡Þžõ®®Pïõ Њ´Á3s r¾ õvwcé.£cAY>‡¹Ãì>³j“ëzq†»Óðg Vrü'œA©ç¥ °‚;˜ôÝœc?ΪŸÀ'àÝÁŠõóPl¬lHXP,ï@±Í À2ÓŸl;ôux@ÑIn“6 Pô^¨!ö!–ó¸µW¯>ƒ,ïñÚÝ2Äs|ñ`ŸOt¦÷+®¹°`¢ÍÏ ILÚ¸Û€¯s$ h_D¥à"Ó8ü´HA½·À ¨°[¹õªðÇU{°mT¶!Ô{Ž%¥y.ÓPl¯Å^u€Îº“71ê&é£{˯Ž=^Ü2Ògz òÕÑ©¸›t¯v¾õ+Þ^B Á` Ï8« Ä*ˆlk„o¹€ÎÏPññgëIi¨ îjm«d [ðt»0¶¾þkž§@ü=ų­‰oRš7&v^ÅæuwûZìæÒ…ä2È{__K]û¾37׆ oJ>¦ý €¡[ë P-·Ä½B‰4 h× ÆÚPÖä(vKr¶úY*O|§Pêè[0rõ ^pKæOÒoSC©8襸õ)W£SÅê&&ÛûÛnì/ÁÉX€CÆÞ>‡v¶½lË\Õ{m%ål¦ÛŠü$YCÿý Àïw(uœt¨.‰K7@q5a?² K8j-g žY8@ède@†H ¥”«mtÉX—×uÎG¯Òºˆ<93C'y6“1V¹¿/‚~û‹Ih¶úÛh©‰×D?½ |4˜«©3Ñ—i*«Ì·ÑAœÒ”ÿÿ¾;_‘c@”†°š»ÖÏ"Y*˜Ã Û¶û€¾’„þôÜÎCÑ#->›x+*þóU§çÙx·¿«A5¼¡ø÷uÅçtH¹æ’µÜ9oçÛ‡)Yš{°Yõ×ëÝ\ÎC1Yø?ß!{ÅmÞ¬“)pÓ‹þ)ý @_(õÀ@©öz ¨Ìþ èâ#ñzO6`º­#`&a0õw1.æêò‹ß®’ã¡æâömëÃ+yº/.GÙníÃñW¤[0Ÿ£o¿Æ¾ñ}£Tá¼&¬Çû°½XS©šë7êŒ}´ˆÝ¸I…rŠÎóá”þ‰;øïX–”ú(&úíÇð{Ú+ñP`²–?³ƒCA®ˆÄö ̽ÄTždª õê[ÃúåüºwŽ‘|°ƒeóãø˜b,¼"íØÍ&™#ØÜÊ£hýÌíÉU\®×èòZŸ¼:-æ.¢óJõ+ã7+ÇrŸ)Œ¾2™ÿ€PÈ R•¿mi*ÈÆ€É™m1‘ÑG ;BÏï^VH¿¦‚M<Þ!GÜ4w)9åð¹D5X>qÓ³R•ÞÖnuGë ¹+¹¿Ú-ÖSõ4ß -àú“¤ŸÅyQ-~ì¢ÅÊhYø&kqG™á)?Ô_nvXÏx¹_3×ý[jbLÒ¤¥v&ȶœ`Iõ=ñøõL+JúÖ\̉Ëõ穲™Xª>9•¤ÝÅÕk¾e+å±í,ê#zàƒõl–sõíäÎëWç%øømU„Qõs*ëŒ[x;?0Å6ks‘Pþ‰¥šaó¬ô`¡Ô—´´Ñ~æJ‰‡:~_H5xIOç|7jd^^ãôiV4Hߨ]ø<–7Â6”—kó Î›K´1ë©-k2ú¾†°å’ÍLFËI×næ÷ÏÀ;uËJ¬íöœË÷Ït–íw8ÓÏ×à ‚úPg©Ý™Ši$ø¸-%À>ɤW<äÐõ3“Ó½³}_. Ä ÒÞ%;¦6SEϯŒV™·.5qzÛwT'–Ccœúˆ!î]G¶…nWý^*uë]­k¾7`l¯tÙg!L÷Ñß'}Z÷alIˆýï„+À"õ†x/ <À ”:d ÔYaôzã‹Éݳ+ËðZxù§» }fm€íÓ/c«UœIêf~0£ü¬T‰ËŽ›ÃÄ‘ÞÕnÍ~/®õ»ÏlÁíL}õØ‘F ‚h7™Ž¤5éŽÄ5H "Û$~ÅÏóÆ«öám?ƒRýÕ05‚/ˆïËŒí?—e½wkßÑ…¯º‹¾Tžm3¯õW¿¥þp‰Ïnè˜qÀ|˜ÕGnyÀ<#©wç¥Zç¹´¬ôs˜ÔM}ßö-£y$Z»Á‡n×>ծݲ½&XÂJK—ë•ožÙû˜¾ž™Ïx“¿%áààxýò Ïv`Ÿžoø7Ïv¦j”ίN=jgæu1:Fõˆ7¨ÆýÐ!ŒÐ\ÀžÇ^`æñí£æ1Ü!¿ÖºÑÿ™z¡°T/âdíÄ›Ü OD ám$掛NÄíCmne³8]úuÜsË­ø:IíNÑðžú£Æ$ÓY–Vx›¬Ühór¬–w’ôÏpÓ¬­ÅW’y_CŒG¾:­Ï ¬OâÞàøÖ¸ûˆQ<8¿XÇþËëej‰Û‡oxD¹³dmÇ^HÙŸìv½›ÌÚ;ö¼ÿد&Ÿë0ù\÷fÜÆ««2:h›q/c^qŸhLì«k…€×¼ºÛ¨¶éÓX=Mœ[•™êŒfd«T­6’q=¨ ÑAQþITNŽÿØF >0"fáýù' }üÀ×ßíñÏô± â1üâ\©·g¢Ñ˜Ž½Ž¼‡ÙC÷‹ÒW‹¸V’—×7 ùiLŸ‹Œ^W­ÙºWÔóþ¤+ƒÎw¨”ÅÛU~,5Ot˜*#ÉDÕï ˜¶Cd¤†fÿ@vv#@O£dDZøÊ/ÃÓ»’›ÍÔÝõn»ûj ù¸AW·ï’ݺ…Y¬D5§QûÃüý;ïͱÇÖ2‡ÏCÓîׯ{[éá’ÒZ±Aª!'T”ÊB¨ËÂf8’Ü‚š]’¼lR\¹äåGÕa»ejçfàêñ&£¿PéO²’¸¿ ®¯~àÍWæÁ¦:ΪYiïÅf³7`“Èf÷mªÃ¾3k÷åB0î‡ë²yo;C²s'}ë·oÚaOõz¹ ŸÝ•$p»èRá'b­Ÿº‹(E‰¢¦­Dñ‹”K¼+Y™{­)yôâ?H âŸü€ºÕ¦m¼Ö+¤é•ºVs½ÆÒæâ4&zî8̧HJŒÆí6JFÎPê-§¯¦ÕVñ~s¤I“ÆR.tÍxZ—ñ’œ[uTn¿å·ÍcÒ²V+‹u²Y¼Ñc,Pè$ä×ãù ÔÒSNaºÕw•tcÍN˜Ú©mÔ—s-@ðÎ$OëŸ{Vá°BÁ*¥÷6ŠËÖD)Ôóu-O>óõóÆM6÷V¶„\{?ɰÄaDOZåv¹€ØL²_Í,îÍÏ2nVómw ñÞýŠ‘o¶Ò=¥;û´ú ùi Lû]½«ó$¯S‘¿ÑW46æÂñ0.¿–d\üî—q¡ž«òä£bOÓ’-efÃá}‚i¢ÜN5K.íJÌ<*¢Î îͪ:N~ÖÖ†,‹\–h× ’}Ñ<Ùˆ .8š§Ðì¯èõ\¨z6âì»yQ@+Ý @—Ì Á¤ÐCÆèXž”OvD/o€„$•D6ˆ+—b÷«1wM€(O ezG½ ’)Ãïeæyd"^ i·ÂM:±ù[¯^nÛxŒ­ríŸ Ø“ãÿ-u}èB•T4t·ýÊ€‘^`)J=èS¨w}‚zŸ XކzuŠjP¬/mÆC€4Ë €¨–Åî\¤R#Âì+ÉfkPeÝJTöÞõ³Ý‹²¯TûY¦šÆíC\´_Pp…:›W¨óùèA‰u(çz3ìë¿+3åÀ¨¾ ÐÇñ P'ý¨P5‚uD¨wшwƒ52'&HkˆéŠŽb€T{,P :΄°ûÆÑa!öŸeeœL¯Þ¥~Ú¸¢õªö+†GPï 2ai"Pê­;…*1`—M`o†XØjÌ^ÌVz^údÒPl5PÝ‘|èÜVü;†e]€ì½ºdA¤2\ÁÒ¦êíTé91õ©ŸesÞ»} ´îD½qî°õWüZ@©s¥.J}ŸÕ3€Åòáït§%\_wŽÝ–ÛÓ7€©ü élÁë5¬‘ÎÓ¨HŒšW×ÅÇ'€€,ÍOÄ(?M`©tl&ñ~;qŸƒð<º-d¢ñÅæ©HšZ0ÛoÅ_…¥ ÎÞQ·v~%¹òý# ÒåŸuk€È¤ûß°k€‹Ò`F6Ø`]}-ý”†•1)ÏÚµöPt2)‘Oœ~¢I5 FÃ7‘uÏ›ð˜ÜªÄgpah¬}pÎxÍ_¦I¡y^ñ#ü €5px­O¶ÃÞh𷇚òÏ€˜; n´a‘ ±‰Ìô ðÉ‘x>ææÀZüð§n*Ö `™9ìN×'@·,òn|$6neæZÄÎ÷Ýç­sÞªrztî¬^@Þoõ=æ±êŽI²|íV®ò+6Íë?—!òɼ„7øAžC•DÈú'›ì7R‡¸N)§`I©7 8”xÄKï}AjÅÁ‰ÄÌ5=º©÷ 4|M4~WEìñŒ[¥ûlyI&½n™Âs|Îï}©Ž»`y¬nìEQ\E9¯¼œ§ê…_°mIX¡ÔúË–&”ábó(DÍJ‹š€ª‰?®:Ŷ/€œ™ß7“¥©è¢ú•×ÀíhÏ1/´“/9¼»§ïâ¶»[æ^®uìû=U¤/ml£lÖíú™gÃØž¢~uÍ9'a9§´ò™>rsÜ_%±ÀÏñŸ[¦X‡¯µai’#8¦>®yÚ>µLöHq-@SË% á5θ÷kÔ\£7EfïÕ‚ÇßЮY ÷G<él.Vñ08w£©{|0Òúáê9éæ;Háéò¾ÞaÛ|¯ þ°Ë/sTr÷‹qnfuyLÌQêWÀ W Îs÷g·k¢$Œþö&µTè"H²'m@_±u\ØMŽÏ8ž÷•É‚«÷á!sÅóç¢añ‡x¾S‚ù»Z÷k5¬³ÇoáÈ£6Ár—ßÛü†K­ƒS2½ºT)N˜ļ4cë,;¹•.ô¤<†Ñ¿ká¿àH½ð¬kÂ6ư4¥ ‚Rœx½ådo+KßÅó­)Éâ‹ûú8?_[Ùøy)ˆùÔT?hyV³{#J»£¯HÛBø¨­Ÿü´µŠÉÁpùA¦«eês½.Ðì4çÒÕZiZpo¬ã°-j<“+Äè0ø¨Ê¼‘$îà¿Oþ(U«¼íA©a ¨ÊÀ´ÜPe÷gÏëõŠ—ãRÀ×¶YóÎ÷jç|XâÃ'ʵÏî¬ÙȶTI1káÑHœÛå·˜º8«Î‰c«åÒnk4cWkoZð Ôy®œÜX.æèQµú&†zׯX~‰ ŒA7ý+`išPgpïÀaÿî'µ—®@Ï&PêzYŽmïe<•o»wk–¯Îå:.,Ž)*ô|²»?ïúòåµá›ïÏJM©Ø¢¾Ø1n0¯f¹](LîÙIÍqmk<ÛlÜÑ—hÅ£L%L"›‡Ûø€˜¨ÝzŠ›qJéþI`¾¿à\Öþ÷Ûý+±›º]€AO¥Ãrħ<í¾²FxÑçÝÓô¶HÉø®½òòtã°¦Õp•í×Ü'ößÙyN¢ÓÒlB;“m©8ú¯âp£lPÑuhfûd3ÏÞïêÚ w Ó³G "JõŠßüÉÀã¿?“Ý€Óý+µ—–ñ`¬ï÷}.¿JÏùEnðyZ½TLµ~Ðq¦·g9d¶å¼ôn¥U3§yÀâ·Y¿ÎG}Çó-ž·#ä8Ï̇TîŸITí]‘r·û VÛîè¾BºÜhšîDÜ8Õ‰²öbòéLÎ6øëLléŸäNzVúkUÄ1›ŠºË>t’*†ayP>~§kÑo7­]ùº¯Um±\˜ï¥? ýÕi2¡âû¸ª1ÑР§)Û: xïúñó]>?-ptLKÍÓ +õ)§­Ô­œ$ÀX)¿ôµ”ø±”÷†P~¼—& <¡û—‹FÇõK’‰˜zÅ¥q 2+ê ,uÀ¡ì…ývc3[×wp¹“ ×=?Ìí”;õãåι M<|Ø9»zi‡tfu±ÒSi5X­éóΤÙÂöŸ¦Ÿ;Z„p~·èÝÚnRqk;IEÿƒÄRý÷ ÀG®H¬ÕO2—€áí0yáaê¹ÐNßkd?§Ôr˜òÛïwnÇiYmqÙÎüøÂÆÓg_:ê ì ÷m!°óN÷Òã¸ÇÓún¤ä-Xmlü›­`™7s’«E-Ó7Š–—Çôc²ñÛ<šûw“¶÷Q³é]À—ºcº°]fµ¹¾¢»„êלÙ<ž@¿|öûøå ,›Ú(×­¸¤¸£9»Û›¾ó­f#ƒ×öE¼¯””?[ûRü2Ïä(c”$©¿^š ¿×Ñ]?¾×'FãÓ¨ÌjIÂeãŽZ‘Qd{‘Ñç{Ï_ð{¥C@OÁ.ºß³‡ó³…9G ϸÁ~.o÷¡sÝN¿8²jtjåyþÓ×'€7“EKc À,Ìæ=çè­;éì[~]:™þòhŒ·Ð?™,Y[Íóm»µ´F}}©![è©,ëï@ŠêBP~Ö_EõñO€—ù9B~à ¤’ÁÎ)ë]®ƒeç˜Ii}?ˆÍñ¾`LÜÀ…ÁZ¯»`ÁÞãìŒße%Kæàìðý^$ £ŽfvÝV0\­L›¦ý†ó]„úâ&$-­†á8Zmuð¢z G¦Ú,ŽêqXøV÷7ú­m…¸¦MÙWí±÷_ï¥\6PÞyº¥Ûøø!á…«å•6ÛdŸÛ­tÝÛëz¦´Yœ:ø}öj8¸³~•a§~ÕúNñÓì¬3d¿M³ÊØÔÇnc*Ð[];ÃZÙ3ú«šmrˆrÅÄ‚ü – yô¼äQWÏ(ýMá£v6I"¯ÒU:ªî‡èãWÀG“aºÑ›\J¤„¥{%¼Üب쳱"ÉO{‘¯Õ&³ˆk&ˆð£lQcú¯µÅw3Óu2Äm·¼W˼}KýÆl¾šèz‰^j­ÂÎW/Ýá])Í´Û£¼$=±†øÙ”¢º?’xígdW?ò=_ˆ•~~ýŠŸ§gz×½¯o'ã˜:«²b±ºQú†¼lnsŠ{oÉÆTÍ·zÎö¹^ØZçjóâ#Ó­•Êù¶Å´óQ ô†²Í¶ôº3·µöXrU{™Þ)œ_%w}OºNq¹gò"BÏÂæu> 8Ñ$}ÈRbZõq®S’ج½|z¦»çûe«øôú&n\™á–Ô~Tr+XW˜h53ߌ¬¯ÛÜÙܲ?;½/]L}Û9éIšÎ¼ZjTåPщfhì;êªC~5‘ãeo#-ƒ«¨3³´`äoÞ_4M¾Õyú’Å9krJ’/ >ð”¢LSNW}qÍ“s÷þÀ€˜; TåZ+•AÖœVJ³vªü ƒ\ùÞÖ˜JŸ‰ðʹÛHýŠã;"’\u¯ðË+lÏegå˜r° Aì•O÷Ô»_ì4çʨ]0‘…9½M÷Úœ¿étÿùÑ Ó®ò›+/(P‘ÐÙY|mÛäý€ëWËÊPŒNe§•O¥ø4È•d)kAå\\´ï°CˆB²Î#¬4ÙŠ™_±·\½´Úàã–F ÜA#:(Æ2Ò­ÕïH;_íTšÂhž8· ÃOôÖã¶Ðlrá«“‚~“¿›"°Ã‚þ–æ»Ü ÏÁî@¨p™f­,â–•ì/à3áÜ+ÔKà•÷œ•'AJÏ X¦íª—þAÞXÌ’_ósü'¬qÃ@EZg–¶ïÒçÛÙ6[Ÿæ=E~js¨êYmhváÕTеä¥.D¯9B»pXrád°«ŒÔFbÛ•'ºz+)T!.jl.“lÏJ'‰²å\[Òkl·êô³áæ¹Î–õÁÜ"ÏŒ¬ìáØ‰±ôżKªˆ³êô’·.ŠÒ têG&jV²^\¯oêo-ì)u"\‹²†ÖJ¢™Msüip”¹â»_-OjB½¤d³˜9Ý­v=Ùyòé99潜³ù”»É–Ðå‰aDO,ÿI†í‹ò{w r9&'¤ÆûW2ó^‰Í\mýЉrì}}É;õñ÷i>§Ý§n–¶WÕ)Î_²†ÌHž„Ÿ{œ’ΦRùšé’ÛÈ¢ÅÌŽö<{EçڼŲ¹/ŸÏ–¶ÌpÊÓ"K”’»iäÒŽMb3þôqÏE§8•R}¬][EXc)ôäM%ô´ÏZh·y÷~Xªÿ>ùiñêlÆ÷»ù”ÄÛJvÉ{Ѥ?w(°r,¿®_üîÅC»`Ó⬛ûð'æ¾ACzb¯”Âo¤V4’uÒD"Ü”r ù4–Í”´[Y$Ü×+H‰žh.çuÒbé5M½ŸÕ å:‹gʉ_‡æ‚Ñ ÈÀÿctåm€‡!@D| ѽ$ÅBpÈøÝ&È OSá0d²ÕÈ “4HG' ¤c¦Ò½ Ò»E ¤=ô¤Ýé¤çH ÑÀ@z`%³Q?G¾®É?Ø÷ò1¹°JÌ? kö_Rß¼} u:Ñ “Ò ›Í Sœˆ¤ˆP¬ûã düû dFÅÈh­ŠÞÀϲodØ ü5hG‡¢=~KKW¨©œé}†˜²‰D6‘X€)ª“ÇiáÕ5˹§Ý~2?€—ùÏÉr,ó° Yd£O@3Ô¢¾(sáh€l»2@^ El2wù2K@Å!2ì3µª 2üÌüù5ìs2¹Æ*‚ñzWágø*q.%*Ë 3Íó±©^ùW¾T(>¸Þ𽋋óOÈ“‡:…Ô¹7J?~ö@[¢ó·ƒ¾$#€ŽÚY€jA h¦°ˆÑBî¾Ie`>„ È:UˆcdÖ´2ŽGŸê 1¦ ¢uò’©oÏGäçµ$ñ÷)1+^Wu† ¥€þ'4 ;I¤£B锺Èvúé:+¼½óX1È,…é]ÉC€Ö†?ë=QÔ‡-c÷Eâ 9€˜p‹(kX-jþš2?=õÂpˆüJ6/AØFì}òµç€RåÛ¼Õç†ù*œY™cŽƒÓøàeþs‹±¥:ª ÐÁÀµÀ¦Á`—Jpöþ“+_˜gÀ5gð7P· G"hG†ÿÐ/ÛUû¼kÞŒûæòçöÜ_ÏYˆŸ7¾™ç£Cs%¾Îεþ(–~K3}ù|d'僃Oi¡Óø~m‘@Ë –fêüà&À¶£ÀyÒýɇÏN 8ÀŽpçÒxîãìZ8¬©€Ñ}X-OŸ˜_‹ýÒ®7—AtDŸóÈòXÿuIÕÏÁnM=øÑ»KÓOíZÛ´´SŸT’Ã_8<ëí‚5¹=~d›S_é@› bUX£dœ úK@¨èó™$v+€¨–»I €w›—8x–—#êÊ_üjïÂó^Åg¥zÒÎ$´îñõ>ºËôwy[Ôs‡[úzBCC¸.ô#TŽ•,%îõþ'¿=j}×7èjRÒÒË÷ª”ú$öäë| ¥^¯À¢và‡Œ Ûߨ7@6P¢YdanÇÇ®4ÝÐõî9nwnñVùÞS¹ˆ¸!©sáZgbh|WµKÀmÛç1O\õs®z^ïDöq& Ò_¦keϸßÊ»‚±+‘ª‹å4ÊÌë­ÑÇõ^&ø't>•þš<ùIë'aH<½ädþø *¨ìA‹óL³ó|YþèþÍ0ì;BŸªß/–O×ú ;rŽ=ˆf®(|FñµÂ÷ÿÐõžm êl¸öo¡Ø 6PQŠ""EP ˆÑÿ¿aÖzŸõî9fχ30Ã1¹RIîÜ £=WAf»Ýö¶ÁüóÙ`ŸlyM`AmåœsÅeNtSÓ•ÌWźƒEÍ=¼ÿÈìÝ^Ò‚*,Èò—¹ ë'³UðÅ`S}×óz÷±àa”ôS“+/Í3v¨­CÃl§{<‚^|V£_ûÜ'‡ìŠá«´9QnÝ»¶—]¯9ڌքôÒ\R™Ê…²Kîv(Yã\+c^ÝlÜ·úÇh7„X_h­×_øél®›Dê‹dA¾ð“  o‚bYM¤Fä;‡ò³}l5#ö~'pšžTžœ(³nø\uîîDïéoΡ|ñæÅâsÝ^Ü`·K¯ tÔVh8éþïw–` ¥ªc;W°¨CßÎa½«µ>Zß|¿5˜{¿æëÜùùþÑ™#øAR7 (¬?(®PÍâ×|Ȧûî´ý®\Å ×=¿·é9z^ÿÈ’÷ŸuÏ\`s €‰SPÓ­ÇJ%|+s¿3ÅýrÕãã¢5CýÝgŠí°û¶çÇ'ò]V·+—•½hZeÏ0=ï S%îª!v-VwÕLn&pzÜ”rDÙ‚)Ôfª|£×´árRùﲆz7ߨ—ΟY$Yúõcúµ¯t&ÂçÓ|nûfëxnÑÛô\Ž;Ë~ö•g»¼!”AÛu„»*0®d›b>Ú¸atñÝJcáævžÝ3i¡ß•ZyÉÑ~Tž<×VwBÖôå„ìJqüá¢q|ãnc{N]ƶH¦–Û$¤N!y+å’n½R+ššüÒM™<>ìý2¸V+~òæXb{_xi­º{ç×K&ÛXíâbÏ–»ÃÑŸYýs‹ÒI¡–YR U°N®r:ýió™?OÅó{Lm9‰9 Àº¸é¼®*£ 8ô"¡$t’P „ZƒŽ!ió•D§ÿì[+–ÞsPÖ÷¯þ°Ï͇3;¾'ãÍØîîì7/Þ[·7C±e%º¶Ú3ÃT»'hYS“Õrû5WèÐ’ <ã?Ô:”XetóJy3­üXLø±>>ñ‡Ãò,ïË£ ÷  M(ì©ëñ/$Ížì'm©Ì'´¤'£2Ø¡ù×56ÒhNZaHîíC9Ãl#5Ãy SŸºÜ6ã,ååü²0¥+d fµS*}…þ”ßͨVÆsº¯ 8‘` Ad¿á´É~ñ‘î$!cø m£~ëvôÏ©û8<Â^ëúîÜ(”š~qV¨nÚ7³âìZPÑž}õ‚¹Ê÷KIЯ«WX ”Wq,ËNPOOKaë \\ì9"æèG©ÈŽ¢u>ÖGÝ~C.zÏVAéZ—ì’¤uìØXâ·“¥0¢“íÝv!ëÞÛËpí —Ö©ã\àCçûþÿ!5©þï&B/.~``ººU7»Š;P¡‚}‰†Ys¹üd4‘·²3¢'–d÷¤4'ÃäÕ-UûÊŒ@d~ø‰NƒÍ’{2†é:–)VZ½nNLw}w¡õ`ÜÙð£E{?¶‚v1Ήä%@‡UÑÁOqÃk3pÃÔâD”¡n@÷Òþ/œëßLc_q.å5CóK,h!æ²õóA'­th}•çê‹L†%3#^ÈBSÐ`œÙÅ„óòG“¯Ò†¾t¨kw‹ à\×)¿äàzëu Æ™o—íNÈpwϰeŒ7À°‰7>ŽÝÒoú’n ¸7 ¿6ï‡û¡Õt7þ_²q¶ìYQX -Ø-ý£•Æp¬t<ñ5Þw²oaN¼ Ñ²µ¹ á1ì–E¦våÿùÞZ\qzKæåwQs%sÏç}X®sÄi½­ã×]RïîxÜ|Åu«ÙåÇÆòQÍ4ú^qЀëȶÝðs-ŧ:³vŽug­…¿Dón[u¹¸òÏCdaª:ÐéñR:rï1æ·»ˆ7òÄK~¾l8åúæt¿SÊz+å.w³è^ïˆs}ÕÆÈñŽhêÇ'Ów«c™fϵR_õ½Ý’õAôk;–µj…íáŒIÍa«À¶R=rå]õXÂjx‰·)vÁÙŽ§È⩎ßÚ^»=•‰ERqçÑ»uOG6ƒÛ>Ðs¬ŽP6µ¨÷í ùJ‹jçð€˜unN@[¹oçjã(‹rš¸õìMÜ×’)Ä+%®Ö`'u•ýåh?ËD)\–žÇé³dNÝ´B—È1/Æ¡ÿ?aÍúÖsšW ®|“‚€:á&dËÃ÷ž"Üëryt¹ƒý‚àZoWhƹÒpD*íÓê\­Òªñ­\+¿ïTûžØJÝóe"¿™”Lñ¤mù•LWæ¹cyŽ¡# ½ø:“†o´YyWè,ômV1a¦ —1_ ‰±ÿD¨z\Óþ^kÆ^-í¡LqiÕøF^¯&³ÒEeÖ7¬2‘¥íb|(;g¹y7ÝOJ^VêSÛÌqM™Z–:£3ž{ Ú˜0Ùè¢E°å×.Dµy¢:È:‘.}CYÎ&±¿‘Xp0jøkuÒ{ôBå‡)¶&> Më›=€è Àذ xßÐ>'&à -Ÿ#[¡å÷ Uç  ù IU¤õ’GµÛ@zÛJ°Ø%8ÿ‡@îý`¸xp‹¸Ç™I.ú QìÇ@‰ÍDå6‘jgè­@f M}è8lÆ6ôJ"úE¸FŒ˜ ç.[ç± €>ƒw/  /RK RŠ> €îÃÕOjîû@ô–j‹R$W¥Zr%pï8³n¾_bïôø ±æX’›“D§uKtÆU Ù!Ÿ\é‰ÎÝÉÈòÏDP!€´®5€ MÀÇ™`ï²ð¢$dJ'N­o‚gÀ#¬‘`N˜¯ª –›DzIÀÄ©°ªR|Þ[ƒø>ÃhŸº%<Söù²µ’¨G«V"0CtÂ25BruP*§tÎL-ý¯,@>M +‰ˆÌB ëƒ3@*Öû'5èH¦œdü{@$Ø·©ñÕ0 î pj–ÎÆëý&ûlæ‰i>=çÕ÷õ{Y=þ@ΫDçùŒÿØ:'õDêcÊ€Lé € ^Óh)?}€n´ä‘áQh£`ä;Ø$²n n_€¸…B‚A ºÕKðIÊÆê©Yú{¤ÿØ¡ûjæ%aÃü«¼kå×*s³÷÷Âéôë$Ý.Ñ_È{[hûƒƒ  «|k KuX…5Þ²†ç•Õñ]bæ×xa#Ï“¯¥æîg½ìÔW/è<šàÂÞï+lzo#“Õm©ú׫kÄÐe3‹ çýXÎî€>ÜP£]~š9o&°ü…$7oõ¤¬»I–‚}÷ǵwQ€\%5÷ê7Áö rF¹Á¨óü€}•ìø©Eo¾n]‡oý³^¸®nýš‘öäe›tþ—¼Âé§ñË CõùóÙƒC{)ÀAw]‚vùMýá 弯›åÐy¿¼Ý_(ûH¤ Cd¹{÷_wÄ;¦|så¼P½%˜gÞc»S{ªÃ÷Ñû¢ÆqeÔ”ò}Y—ÝÐÝž\?Ž9áq+gV ÞçN'è&#ŸnçÝ}æÛ¾lýM÷³ ÷ŸØ}±ÛêÛ5Ã¥W&|{GBÛ$Ñüwó€†ùÈ\u")î\ï_*?J~o@¡6ÞX§õy‹]!ZqDýº­^©óáÄò§ZøPBB%…Sh¬}GŽü½'Óíqû¬¼w…ÙÙŠ‡Se3¹@¤wiÊÓõüí\*?»?–\™9[}?,އåÞ¼œûÞ_HšQµ²5—9‚ ’‰j,þ¸öÆ– r{÷>ªýóã„÷yâßKÀn 'eSm,¾× àáe¸Ê’¼+>*ÆæÔ»:Þµ²Ù¯ïùÅÙ}>§/—¬¨C•VÕ•#癥·<,íWL?ëfWôj^3ãÐТÒ^ÑŸ­Nzþú/€L¿H5¯ms¤>Èïðq2ý¿¥¶Þéþyo¿ýÈíÒáå0‹îÇ;S‡ƒoL§;½ö»ºÝچ׵©¿—£õƒa§î‡u§ßñW+¶hí—Ü[9Û|4y[ÒIË.Nõ˜XÔ´õÜlnë¾AD­³¼[ AWk7g[#OÝ ç?¤ ùÿ»™å° ²/¨r_“N “rºïxW<Ö»ƒ¯²¾ a´9©o.<À%õµÐÝÖ¸JÕÃßSÂíyŸ¾ƒÀ¿ÜÎhÅÞˆaUÅ fQ'ßlµì›ÑÆœ¯Þ-^+Úrb :îœæ¡:4zû™ŸÅ¶³Ò(^+aá²ú I7“fTì€üè2ø×0I·RËí«Õ<[QÆüçd‚gVÞÆÛû|溭‹´~¹Ë‚ 1ùÆ*OH[*"ÌâR7sn’SÃ*¦Þ}¿Ö¬óÌôôP‡A)7ó+›þ¬di–òÙÔ5=K»íT!6NöÌ_í Ø€NesF÷ÃW4vwmªûóœUžofª– A&ìÁl ª$® ¼½Mç.æòÇ’° Îcaw_zÂ.™Ç&Ñ;W_‰Ùû³uñ@öxÇ“ÎIN¤½áeܽUÃ÷^Äo@7‰=|W{÷úÞbŠO]ÔVK)¨Q8|6¤;½´™+¨";Å”³”!¦­åŠš,v87î'ïPq#îtAÈ9k~ /£GeGÓº(Œ¦–3:X—¯(ý%/mY‹—¬®ù~–"HULòÕ¬ÈÝs¶Ê¤ú-íƒ ªîj§cmÓ#Ò]ÃGiUjs¦¥r‡½Iîª7­+5éµ³ÊeÔ-ËÏÚ¶>é 莴–ž´˜_™<’rjUMCn5TwrÈé‡;̵'ñ€ÓŸï%÷@óΰUÉØC•É/†W)cücŠÈŸ=ò–cáJøV±‚?úz…]ma–7mšK,Ö} áNþ" m¥QÑÌw_õtVºæÅ'þR®ì–_8?`¥*qÅlKº^Çd†Î×E™ëPèbÐk×|veÙ–¦v K÷ûÙßV+wKÛÍà];›\›»!iKDªQïR¹­Jø½ËîŽ'>·ÑEª¸î_@Þ)Tï˜}©za÷²dÛ«¹?]fu;¾É:'Q)wé•éu©®e©=$„&3°­—È2Ä]g¸º£y‚{Ñ…·Ô£yldÐ»Žµd†e±ðÃ2X6´¿tödÚnžÑ´FœZ\/ÉÐHËn›«J’‘³ ê2bÏ*íüÂ…¶Á”Ú¼VÞÆLyv¼ig¼;M´ò”ò$Tå쨵²ËÜâJ6pô˜såi¡{Jפû•çuMM»Ôƒª}“|®ÝqšBʲ/ÍæV?˜‰=ºˆÚ_Hú{®uݽΥñ2;yØD½nçŠ:ùmók+ÏëÇ­UjO3ÐÙ¹¦­3»vçÓ)9ûÚ´ íÅ`y=ó—û>‡Äõ<-Ï®MŒ)4@§ž®JOJÏÝ®!2Q·Cðx·“é¨Ýö{¾ìÞß´ÙSÛtÚ§QµqGý  9vÏSZ)ú‰C7DxGœm•üÚäÌøÁþcRÏ…B~ÖšâmùƒÅÃñ欩âx˜sxuàÃE»ž .î¿Ùœ*!´t©•úµ1ÚêÝó€éšÞ+y‘ù•% •í[Çyy­ÓÍ:HdØÕW4É^¡§‘ï®þ…ˆ)æË‡U{—®ân/·²†‹Sh9¡Oñ¢óh?Ì@³Þ‹ä/Œ}&ë _‘ü7Óί¢0z<:÷¹ ëA&‚F¬­¯ýódSó"‘íµÏ5ŒüHÅ. OI©“™ÏÒvÓ>¿—¤6}ë„_g„ =lB Ö‹vŽ™ëm®Ò›ý…KÅ7Šû B"^7»W%ÿ/L¸õÐsŒu›ÝòE^¹ÞEª dz’…0[1_ž—µ¡êýwï‹l±QÒiÙ|¬ûÍÖöÐ3íIÔ¥Úô—dz|©“Cy¢]Ì›#Bc?žÄ.[J—yaÖºŒY«ÕØæ-ezÖ[纒oøþ¡ÿ¶Ñͽt‡á¶,\è>t/Xßf×ð{’é*wòý0Z`êq°­²·AÞ 3lÉÍ´h%ÿ¡û­ãGî½ÕÇ¢»ê„éñ${·Ž¼5¶KŽ!ª› ×£ì 5'FóžÉ‡ÍÇ¥Tm>ø«Ôx·¯fc±]uðíë 3ʨa'×s°ë¸¯Ý¨Sïnƒiø7µŽ ‰Ê ˆrÍÝ Á¬ºeý¼¿§›hõÑ׆b†"ˬû½NHÒ[O¸Ï&mi,šD’_|æÌO-mcÅÍW=.5Qî4¨ÅD¬»ùO:¬3Ñ!®3!ÄÖQŒ›×¸ä}\ËQÛií/¬ÁnÙgS}No{U§¥ïQî¿ _”s‹ípÙø¬™°Ü°©¤?Zöúb)uçéfj… ™oaÕv˜ÅbzÇh¼e%T;(ÈÍî©`4VÝκ¾¦é°¶•“ÁYþä1‘nÕÐ3ÆU¬^ßTÎßv¡r>Ô’wi•˜V¦ïâ¤R· ùI4ÿÝü`Ò›—ig·yeU>É«*鋨~ºBšï0U¯l÷z£wöŽçµÍmLÌ2‚ã‘Wlu^^½ñõN9šTm§J,0øt[)VŽg³j š-*ÍŒ¶.ïT2Ç9¨DVµFÑV¾\‘j®ìÂ÷ñÈsA'8 ¹þ…Egü¹Í%¿p”?,õÄÔrÎ.­Y»KÅ9q »Ÿ3ëfì™§†#ð×:‡‘ß$V~çá*ö…³åÈ ó¥çÞ¯–ÈRØ,R˜ß)0ÍÍsí›”ã)XÏ¡i Öhê•ËF¶’£¤Ìѯ™c€—Ì[A+ֱ㴫3¾8ê†s™­C7rˆMz8Pñk¶4n|Æð´ÎUûF­U­êÑü¤f»Ê¬¿uÊÚ`µ)‘EqWøžq¿€D…0Ÿ}!—\<£¬ÔÿÆ™£—C2µ\³„6Kd !0‰ÍY¤¦²;È61D‘ ¢º]¢zÜñ?ü˜Tÿ¿›¤vÈx¬é›3Òì8$WæxÓÎŒë,]æ°òÓ˜&²bé¹qE[â„‚3%¤<×IVuN“¬D-åÌÑ]ÌÐËv:™e~>„ðÃÔ‚¾YFC‡ °á&é’QÀØ4ÕÑÀõB’š:}J`½Ä7u7áa‚©–ྎÙu1|·ÿï-Ò…ü4<<«‹ÒîÞzX^ÔÉÜ_HŠ;µÍöè@ÎV Õ[ | ƒé(¹:Íš+º¹ò€,÷0@D4IÎôRv~•äiÅ=¿Äc‚õÀ§ÇÀg¼˜ÀÂãAã1xÚmí%ŽÆë'FLeÚ><ùüá>nÁ­7£w—Á&pÏ£Ûlõ ?K_,‘zž—Êž1€†¥&ÈÀBdZ/ dÊ„Ðçl PïtZÉ´Ë·š÷¹ÅJìIe;Ξðí{7¤Oïd,þx´ò}•=;÷ä$óãÚ›ñŸ>ÈHåÈ0³bœ¯Ëøëà1Ìó¤’Ò³¶&çY̬îwŠßß ?E¯¶ùŒHe ÝìèP¸Qz­}MºêÉ%'íÓ!$ÂŽR6y° Ì÷O»Ù£f¸Ø %ZÛ&eõ’J9*Ô=—•ÕD*Ðq69ÝØJ‚Ô,mõqAê<_Xë ?n»}õn´¨ƒ[ÑO«ÀÕ½ õËæØ_]ò¹þî,ÃÓé°§J<‡S*¬†­lu,ôþÜï7ºîž%JÞnH†îæÒöúV¸n{ÁÍœw—T~!©–ÆÏy6™â'‘zek +Ÿ«È#“¾jj–vÞR„íŸMÁ9ÝÉ&ùº1ùOö²#·µ³¸Û'¬ÙaÃÛ}™o3²üdj½öûáñ°_g£hŸŠ©]`7 åÆVÉ;Ê‹õ­÷]­[ÁeéX]Î\Ááknom}j¨±ü ¯‹ #äK KªµDb­›î”|Ÿ¿ï†õxäÌ´BG}¾¸½æ>îùtêq¨Ev&ˆ?dÕw8ßî{j7:»üVtÔé&|©Æ«ë®×('ªçòþá>nùœó~ºôêóf+¤\Y.“—eÐX[LÎ¥t³©|n³±òÇ¿ÐC˜H½v+ ëmê §q©¹÷Ƀ¼=RŸsÚQ#ºƒj±+,Ž·Ù{|üìgà]¼Šlf[±ª˜w-?R'òu|Ú}†ÆÈ‰wÊtõÕúŠ>‹îÒkXG{Wñc» ŒšV9)¨vn-Ì‹R2 öUÝ”•©f« )…ø I©? [V~Œ)eÐù‚Mƒü®,¼':2޾<]i(5,T:Àì}¡dúÛê½y­Õòã¾stÎY,™·ø’{9}›÷g#ë€hÊâx•Lóò˜mÌ&¤óCSÉ‚n®¿ƒd?Ò4û:Òæ.Œ)ê&s«¹‘-ü…¤àÓ#1dKr³‚'sêýžh÷Ä}npÝm»ÝSS°zó.§[IöÅš§ofTq½6>úÑYí“yþ À¶O0ɬ%_«-¦FÒðUþ@:»ôEc1Ó–•…­AÓûaÎD,¤rï\OÍmwÊl¯Uå ÉeLpÒô´¨¥Ñ¤áè@fYM꨷¨‚\Dï Á·Áë\9×ÈFñÔ\6*‡~!jîÜf7×Isº6_›¥ÃpÕý’ÏëXÁÞ eyGM<«§Vuý­wëÚgT%5˜ÉÔÍõ&ÍöáCŸ•rùR- éé9nOë]HšÖ‡„"«>:–[ÂK˜Ú—Ídæë[XV·žÕœ‰ý ¥L°ÁhZ?t¦ò<3YMŒB˜ºóŒßãUmü6Tal örŠñ¸ë¼ô±ÇÃÜ/€l®_9|SŽ…ˆh^ÄÇã¾Úƒô‹^ߟ缛”¡¢g°§¶K£úÏ÷¤ór~nÞŠcÞÍØ×Á€;kŒŽ¾æÙÏ šò(¯Èp›6”'!ãRÄŽãüq,}‘È”èaç ®ƒrI\ßóÃÉ8л¢8·F‭r)ÒÓy~ÂÿtNÃDª¸/=ëné\Ëúß´Šß{?çÅ»êc6s[ϺߞÚZmomÖžðgeÑŠ:¶ÑUÆòÍ£ºŸîﳊ٧×’îÅ•5+(MHÂlJ_Ÿë‰Gñ®ÏkBÁØíx)gfy)?gx©K|0Ê|ÐýŒø þ¤`!iKãD§ª·l‡Ä˜NÍvþæ¼v“Ö콙µ]­ÂW©×–åðÓ_DmelX'ÄÔÎU“Ñ\ œËÃË´E}“×yý/)/17¢&æ8´Í 0cT^!j=œ­ËéFÌáÌkP VâðŠøÂ¨VÞG5dÅþ=êå¤gªÕ/Ž@êö|îK*ßÜâÚcm‡ÈñV°”–Û¢5³W¤GåÔRGöÁ\ š[9Û)^k'FcX¢ßâ6_Ë‚ñ*óÕâ^·.ÃÝýdðZ€å [pžƒnñH‚( ^Ë Ï{‘ã´ëˆùI4ÿÝ$ÍiQzMÁ¢òSðA žÛóš¼{àzsÑüôº<ý§u ²æ¢ÝiéÌ1bçÅ7™Õ`N dèNz÷Ç^ò ÊY,tË> /i¦šãÖ°6xKl—]åY…ŽŰ'æÆ°g­Í¬1<ù]§1dûlÀ.'eškì7@Žv‹ü!᫊¿÷ÂuöØà34õ³q{[ÍÒÉRÇ듹"Hwo6T­7«‹Â”ø¸ó u­'sÀíz#¯^È×JÑuÙvÌuÞ,Ê~¥z…ñò¥6½CZ#ºÀ-̾è7/}ÑaÒƒ4“ðË÷ý æèQ!f™Ì ¡™Ì(îÿÂO½Ž| \ñòOn®mé­öxÿb]«ƒñÑÊ{=së½æ"ÉfJ‡ ¦í×5mž“þQ¥<{Ó…±&®FW?»¶³»ÓèÒe¢Ää¦ùBÿZÔ)Wô®0«öfÇÊ©7ÛÞlñõfÓ GÉhÄRG4è÷ËÄñÿ‡45iø®rî?Ÿ4víá=)(©™ŸéÕžò·£i:¾6Zz[³í‹_¨K{l‚ˆã®”2¼€õÖʯ7 ΚDî€.Ú>³1WZxSÏ”~ug{7ìSï>ZUºÛžŒgäTäâFÕÈÅê9$ó G¾æ;¶«ùN¿Ýlꢕfe@)¿·çy¬!ô-Çdé¼h[£ÔKUpÑnv™U\Ô_þÄE+ÏqN¬çDiŸiò³í¶?47‘ƒìŒå¨Ý‚)¼g^ÿ¨1!5«×î=ü˜‡ÉXÈT:ßI›êЗ崃¨Œßö’ÆÖ˜Ï´lÚ9´×rÀtúž×ï,õ —@ĤƒwžžÙDï«==¼Z­ñ*4à²WeŒñdÐ],%AÍ/Åê ò·âŒÚŠXä–§NZÓ¼À0Âì(ÒÕª©R×H²{ú”LÆ åÊ™ìך Ã–ú¥öSIBhž$¢ø˜m‰âóXÁ]œÅ¥[a€Wú" ªÓû…$špQ¥ÁV1¨‡Ëlw»N=NÆJÂüyy-o¦æëäŒó¹ü‚o}G·ºá‡ÐÖyå"ˆàDc³AEU“é‘,u­7'é9µê L&hT&Ý·Fˆ†šÅ'ö¾ÕºÀ5¾¥„ñº¥l¥æíf0MéЇYè7[Æ—j¶—Þ/ì}ÒK:vz,ÇrûjZ½Ñaô½ÝôE¼Üq¾VMפùyo¤qˆz™Ó²KÎûM‹[Q÷ÑóÒ{+P(D¹ 9 ÑÙ I¦½I‰8È”ŽŸTÆÅkíÜjÆ»oSïk×z6h,dzÕX |ÌÝ:å­Sÿ:D*T͹ÒT°î/lð ñ\ ¸p[´ÏóP]/{E;äÖã¡Ü¶ùùh¢sÈò8£åCEî‚§.wòVmûáiÝeâÚ.“›ôíI`ýCWŽh§Õjƒæ³OÊÍΚ7½¶«;Í糎d¡Æeƒ^-»5l7w¿Ø®ÒƱ°EUýO†ªŠBØ«–Këî/8›î&-«å†'}°@|åž @Ç›#»äçÊÜxêEí_YhÜísõa»œ9óø,^Ø­;µß¶ˆ½6X4–T?×€Ü1VGÏj»6ìíØÞ¹«‡sάV?ç§U¦ÎîU©³d¥¬ž/l¹eorKýJ÷c‹(ݽ*QÒ¹L»DÄ7â캚¹H f3›ÚL2åñŠŸ[–9à„hÞWÛè„\ç꣟Lë)l“¬gé]Võµ¥ïj[gqª*‡'VîÞ *FŸsåø©–çŸ ^zÒUªË]¡ØºVpú¯]9òï¼·ÈaùìÇævŽåçvú¶’ã3·´yæFçm#7Ú®ê¿`¬œÞA­aÒvŠºÃG™Ðpj¬Q÷7*w¶j•ÇÍÔ¿»[Ë{åV~¾“™8¯*MØ÷ÊDvë—Èâ*µu©ªq-0 å‘÷4ã“Û-´L®ðñ*Y‰ŽˆÌqƒq™Z^™£—  3i £Íê°DÞB4uôIp,þõ¸6w2œ?ü¬°7؇=àVˆN=ª5¥3RÛb áLÍ‹y²r:vYcw£’9Òø"UáǦNÊy¯(9ž„Ôl°„ŒÌѽ[y€®ÑíMGØT ;DÐ÷ÇrKL1ˆjÙG3õ‘MÆW$]„¨nƒ¨å'°o¿ //OPô·=ð>夫sóNAèJMs³Øž¢È²:W›ÅÞóšöi䪓ùì£MdëCd+ÜËÈ̃B›y£‡å“µ Q-l` &X© >KˆÂû©­wÿHÄvó îd"Öž%béädjM‘Vý×Þw÷Tÿ")@æ <Ë$¿“óñw/—ãoIjğУ♕â7Z$3üpºõ(ÁJp+ÅŸ^)y®7LS“„K.Á}¨¦xg„Î+—‹?b!yTõRtÿE2ÌIÑOo“«Õœù…Db'Ñ饮ÂOý±u>S\oWLô:•ø»ôZñWD˜ø‹¦ñYÛñçû „g‚?çR5‹'XÒ î|ü¹T”’â(I˜Ä âbüù ˆŸÔ|Öɿ̟¹ÿa˜b”üÁÅßúCøq½/€‘ô8 ÜCL_².G‰N/ªhŠ‘ª’ÿòÙªq2zý15ö˜àâ¯^-$7ì{ñ×€R3:1I k Žnü5±0ÇßEK°NžÛVÅØUÇ1SÈŒcÄ'XÝ~®äÏÍÓ“,~Âÿ £ %½Dêê’HõSÛ¬“-X£›fŒ>€+ä¹sÕ5Þh´¿ˆ*%õ…šVœÚêÙLò\ßTʦu´„’çéÉ%A ˆ±ð†ì;7K¯¢ÊϹž>¥«"§˜>NýÁôÞWËùГ!ßϺK'õXs9µÏkRn}´“-/‹• caOj`âîi¬Ç =uÓèa}9àðNÍï¶ÇYɵJU™|å[…ÉOy¦>iÓ³þ¸Ëí&ÒÒïm¥¾ÔËJ}íÓNK0qk¤¨Ip%¬þÈìnÿ|(àØÏÜ2°ñ<úµßï*öv3;¾7ë¼ ò_K¡°+XµÕ4‰ uÛR 9Õgê®ÿXÌÄ‹µV0–öåÛ·|™<Žß×ø½¨ôñ t –/QRÌ5^Æ;GÈïˆ÷•–¿Íôò+±ò I}@ WVó?‹ßÖ³vØ3ÂvsÅ?ëõki¹.Oö?þÐïÉÝ:£RÆÔÍ\M_ŽÝ®†jÝ¡Êïß²rŒçÚt6ÆmÿÄ›qlGé+ØwÑËÊ_aM‹¼ÿÖ ¾Ü8 “ù.c°Îà3¸F3ÞM<:C&fMäFù@»ž³·þ=OŠÈ5@ì«¿=5º[¯ÛºnÒ[®òãdPZ Ê—EëV„ôÏìTÑ2#¡­ Ó «L†8mÞ;é¢×d‘Œ1ešŽÄ¨²/æ²ÄE(B­jnxÑZ .š² §ÕÎáwäÍÐ¥ÆiýlƒÓš_Œ‹¤ÊET\þ…Ÿ -¹sêÑuœ/œó~ç.÷•ÈoÜOËpW[*kÛÕf/pÒ9½É.Öcµ ŠL½©œÕ[_~P=nÒ>Çc¸ìiâfÉ/«løJŽ£Úæõäîxˆ ^µ[ZX€ç)–2u•¥»'KY³*k¿ƒ: ªGŒßNy@V½Ò/€¬×Fo™–ñ8Øî¤ótïµ¹÷Æ`#wY&¢D¢YÑÞƒL'ìšÇKO5µ3Ê…|`ò›´'=¶ÌJëùNóW^áÃAÑM¿wgØš.÷\[\Fì'§~Y¶Ê ‡$=ì·ezHK=dÈ2½ÑäƒF&Æ0_-]Âcܬô ñî(ä.b–¾È:l®N{ç®úþfU :®Õðg ý{wgZ®qpUióJFÈõ#¿`£8 NKâêϾp³!/ÃdzöÃ0jÜçœqríA6,MÏLæÑéüe”ï—AM°ŒDMjÄ…šäÑ"Œ »d¥/l˜r¢Š¿pI¥÷IѾ·}q¼I^{‘ß9c½µ±××1IŽ0çûFw:›vÛ–Ò*y¡N_cw†g¤Ü&Æ„1âtF×>à ðPÙȬãO †#ÛÍ·Ú‡~ùRPØ¡“é5ÎJj~èjßÕZ•cW+|WCjÕn„7+½^,ö:Wø…¨Ï½ßçNÛéH Ü•úØ-¥æh³ D{©£îUŸÕÉÛD¶²†:éßýt5Îl?QDÏþLÛ…QkÉ5¸Eœ#}í:`3õ¥Dï‚Ú m›šZû^ ªÞºÄ»“äW©w€[â;ËAÒ1/±W¶³ÌÕª+Ë•H2 ÒsÂÿpñ'ÊÓÏQ ôŒJ?p²ë›oͶٵí K=|Çói^M¤Ñ"àŲøÕlAïGÒ»;{8Y´Äœk“)t—½~øÒS)Em{s£¥w;ÍÒšìU«§ÝèÚƒŠRigÞuŽØÚͱР1|TÊÄ0Ì%XC¥6zåáˆo.·íé¼ ÝÕ§~°OÐ$m7fqœ¹Ÿ¹š žÏÌÆ^—ø&Yc‡¤Q›pˬ¶¸Å d¹sðdŠ’‹ôOu½LÍŽl³§]YªKNªC’šÕ•3®ZmNé/ /\š®‹x¥Ç¦Ö bÖ­cH -¹Ã”[Ø®Xla6Zha£{îüMŽ8{Š®ŠYß_Ÿ¯§máš=kT}BÇÆT8~î•a„M›¡Ç·iêpÙ?Ó/‡º saï!Ö^Ý·ÜBÉÚ*“ð¤ÚêdfÕ~;¯×E¢dµu¼ªõ½ÖôµŒšêç‘i¶œ)ÙxŒµeãÑ™|m~V¨¿îd¾¾sõ‹þƒÔ¤ú¿›m]Ù]äÖ?Yj•Þ0iº*Ö8Y“ïú¦ŠjsÈø Û§ðÁªK:m‘%é·/w<¾ºêpÅiØæÛË'X!а„×Ðw:äh5óº©IõIãyìz|sÃ:Eä¾uÝã5gëé5g¶kˆä0¯:Ëbƒ-“Á²½ú ëÞf|²OÔ:0>øs£†t)Ûb5rˆ‡v/™I\yÍÝ…k’DÞY?‘3¢yÈTS7.R³ÍuwÎÚ7×OTÿÐ8\_!“R–·D½¾Ø–îªXþ¸ßUý)ù®–>×Z% ŽéW°*á8¼UÆ—l¦RíÑò)²‘òT’à_XåÌÑ\ÙíÜ_“I™äYS*æêðÍ9c¶Ð»(üñ :Üâ‹ãÿ‡±;QRÙü, ‚û¾‚ˆ ²ˆ€l¢‚⊊úþ“TwßêùçÞˆ‰¨øÐ*-ŽˆyòÖ“A½‰—zÍ}ÿôjL®;­®æ¢Êá«Z)vüÊùÈ?*‚zƒËR(—Ý/=[.]RÂÆªøž8§¢^g É ‰{óC…¡øÈ†Ô9“ÿ~Lø°šŸ¥®º“ƒBÂF|íTƒ›µ\…ŠVgô›ogòd5 ½¶l QsW­úv©Òh¢£²ìf¥°ËH¥ž¾XüvSø,ÇÂ([xæ7T'MBæsw®€Ò#¿ƒ²M9\NÂó)3íRî\*Îrç2ÿÌñÂÉñƒu6Ç×W™?P' G+=ÖO{ŽÞ"N'Ú!}eq=Óø&šÑµAKk[õÉÚ©U„\,uo×Rß¾ÉÙ¨sùí²" Þ •ÑBR\gÅÎ7-7'L˜Köæ)¯l«¸ÏdºÕw^-C(~ú ÈÔXjÙŸ$$Ö˜@C|q†Cúo,­ìzNÕs+Zãjò¸y\Qt÷„ãÃf\⺵ÂE®•[“{±0Œš¹<Ò»ÖÑBµn§ÉæÎLäêÙp”måãL·lS𠾜Aö$®+hØiìz »¥´Jv߆=‡†}|ŸÎƒ~‡åG Ø® xD¶Ó@ëÂd:…‰2f&‚ˆë¶ÎvO®6nâá¢_åt½Q|/Üb>W@r«tйóZªeo»f9óØ? ðŠ_— akš²¨Ì&Àï¾CgŸþÙhí¥ˆL/u$¯žVõ’à%õk[ÀOò2­BÏþ þ×ÏøëÝÂø{{½âï·ŠëWü™+qœDjºCljû®ÅÉ¢‹ÅÉp5‹"£è-àp‰“Qþ Á­8“¹.€ xÆÕÛSœLÊ@ÿ”÷Ëÿ¡ò³°üíVû“¯y‰õ 5ŽÓxoïøóÜÆ ÞK6þÔÐZüA„aœÜÎlœ°ÖÀvãäßXô³š»–\KqòÈ5X Ž'ÏÁ ð:ÇI8Içbœ¼Æ_|2åÖhÇŸr³ó ÄïÏœ÷С®j¯jïB3ooœÄ_pðŽ¿ð<}ãâPHç­cW€«¨ö &€è\€Ó28NãS‚ñ“‡ž.ñGÞ±ÝAªÑf€´£œ÷j¥´ß.sþ¡óßø;Äs3LàLÿ™@¯tÚU+Y°™·•øûÉ ~òÐvgÙ¥;W+þv{Çø[‘ÁÎS¹Cñ·šæ¦«T`õão/Çß~—,–€—gˆÂ9B&üò[«rxî­;!)°fpçfÒ#tºì=o8Ù}Jßnç—¿£ìàf')ô`$€o!»f½y"t—M V¨‰m¨`]¨ÅñúØÎÅä|–Ζm¯óV4•,ìí=œñ›Q.³—ÿ~K/ΨᥰðŸ‹Ëíó计â]϶ºA2HºÁpéÐl ¬ÎÍåöÜÌþq;ð?ß샃6@º§‰_0)'™¦›vGãvÚBçF´ûR»÷þM^Ç;õ|U;â7Wú ’MõÙ&G‡ø£7ùLîZåîØŒPƒOi—^‘s’Jt¥6½h íÓµ¶N Êhå]?¶Y¼æ«çBÅï­‘À6ûH2  º€]øJ²¹I6MKW“L ÷“Œ‡M#:Ê¥c/þì.ÂæÌ6/DÛÝchy ¾9- F¸ñ¹mÖzC²çꕦn­ËÁ¾ .åL<9óT™?I,n—«kà÷G™ìþ‹"õ}¦x®{“ùªæº×iÕuÝazØhiÇ.“Â/I&¯õà}$Ù9–$Ùã|ªIöDôß•=ŸƒÎèžT_L@r¾tõÊêÂM¹ÍY ˜ã©… ïÇ.ÔMþjLd±øw\߯ÉyOfwSoK%’‡øŒ»óõ[²:ïÒf1ØWœ‡%—…˜•œ.LÖƒZµãëù%ÉP]6z‚ó?óÜæ 9ÍR†h’›U+¯k—­<ô›YÆÒ y-a(~’òØ_ÇüÁâÚêÞ¡ko7*\иºE+ÿÚqaÞ^úͶ¾èÔ7A‹Ç6-uÃ8JœK¯ñXëÅÝÃ^CÄršŸŠ•U%sú^æ0˜O'kíræ—$s Ã$;† D,Lr‹”ä‚<•s6ò0x<¾Ñ %>K3 ñ %L;ìûÍÒî{ù€ŸîN“>¿½›êæÞ+¯°™ñœ‡\×úyÙŸ|¶‰Q½`9ÛaËÊ&aRÄY0ögí¤ƒ/´º¼âª1yåµ;rFS5, éùFUSè°? Ôcéžäêù>]«á}óü}©x7¯ÂœO 4?Ö$yL¹†î„bÜÜ“&ï'V­$zߎtò·¸(aÓ±°ì 8^«×å9v‚ Ž0ž;v¬—Ù.*~˜ý£]dJ] §ÑÊ¢çÒ'äôMIR"ðN»¯_Ò”jºÇ¥yø0‰òé ÝÞ¥NúN jŠ ÑÞ ÁÌäú㙾Pgªö.¨ž å©ûr:m|¾úÈK5QÔ°Çk¯,17nOгGÝVÚÅÑ]qͰ ñHóe9¤®Â¥÷^zWZ«é]-Ül’Qçpä_)á/ 8 Gwrü:£šêxìÒÖ·g¼\¯ýiÚŵŠ3g¦…ÏDÓóI…ô’³¤2¥Ëâ8Œ"©.™9AÙ Êü`„¶¹ïm?`·sy<óèËø]L¦ÏžEÝʽÃôbÉ«ÄgÁ18ìŒãúe9Ž~zÕ÷8nÖ’I_êÇ“>Ý|M4£þAL/œ8@%ÿèÏžíÖVìÊIrç¥=}wEã¢É3í½Ózó%%ƒîò1¾úR£· •›¦Gèyr(9§i°Ó§Ú›iŒ /ÙæÚ¯ÅEnFåú‰`öÛ(åEx‰ŽÐºÿLyüò ôõÜf!×cïwk£Ãݦ¸•bHð[ÔŒq)½\A>˜/L’ o"v¸—ÄÇxÙ™Vßë†ÞsÆ.t˜¾^±u_çkSmpïN°Ð&ÆÄMcÈÜœGyšµˆ)ùùî¾qq”ðyšâÞs‹š’¶lp‘Bü²Y<‡•PyüÁÝ;WÿãéÛÝí¼±èú]Y¥ÝB]…ñ^T6Ÿ+-5]¡/ ²ƒá|½$Yn»]l±´ò˜³'ÜèèÙ¥eׯu.;1×ÒxÝÞ4ÉÉ ìºô‘žeº?ÖȾ†7±‰‡-—Ús¾3…A³ÉA¿ytüÚ SÀ_™ák{Ìã—Û ¿¥Cx{/×v¶Ý½dÙnók’MªêW ²¿5haåOÜô$·fGf7f.ZvAfË¡ºt˜$öû1vû¹kÛȈ¹Ñe‚;âí¡pÅ ¼ÅÕ¬K5—?™ÛQÓ7·Æ½å3hdm¢G’—]¬ÃèÍ>{ëÞàÑ[W[÷?8/óCß=ûð_Ã9?+Ð¥\*h³ÁK2ܙν›Î8Æ4¸OÒ yljTzÌä£ëÚx3²¶¤;ÐÏ#CbSßaÃé£xÛ¨Õ°žRè 0½<é˚ЯFv—’¥Kg¾àÎle:3ñ²îÌh.ì­´ãÑ)ú•{‡ùÖÿÄÏ -w«ŽíšýµþX ºJªŽ¼¸'NÀ¤ï”eá÷`}ÜÚ™õdAcñ‡ÜÓRî’1¼ñ ,鼃Øk^ ±T†û_¥PìgÄL£‡, ÃnA(³²Œ¯Ú|hû­Û ÿiIɵےÕj’£y]©æ}WèÅÛx¼·sˆPKOk¦Pͬ53©¯–Åïx!ö6,ËÑGÒ $÷ÇÛÕ²>\<8{‹JÜÏÄ Ywø‘åõ¾C»Þ޵Ï=ô|xu‹wæíG©-öãN+°j“æs3I‹“šÝØÞ6ôYãÝÀJQ³e+z=Í[Ýü0·úpÙ½Ö‡lýO~Fžì‚ÉïVïÎÊR¨ÞQ•Úû«0Ÿ(_†Y ÐÑdýÈw‰‹VKÛÐFµÐîQ‘ÎIÝ×;|¿8ìÔż-1[µÝl#ÛÖRk‚înŒ‡Í>£€ÚѫֿÕ/V-p®¶yn¬Ò¯UùTªî§µ¬Ò£õ©š)—Êa:Lç¹­ÝÓ¬'›ƒg´¨ØQÇí¢¾*Ä’Ï ûs;'SȘã£*±lcFeUî]®õ óp}½×2õlûPªm_ùnmºOkèô˜HÖP±kW÷˜âW‹¶ÿ¬¹J¦2¯,勸 Ë"Ϋ¥`ý9–äù -ÉÓ¢Tjæ¾ø$”cñÙŽEå4ôÿÀ¬ûàTg,™/XZÚüNlq&ØkfJôŽäˆG£†“·zׯ=ó-….ÁurOÅ•£ñ‰Kí¢û -D_Ðg2ÖQ0޹yW©UþÛÛ¹ùï¤û̯kN.?JZ|ÆòÓÙàÐ-ËoÐi·— h¢ˆ7ݡȼ"^‘;#îsxú-9›ëeÉ tÁ,Eeõ§Ö);ñTuˆáÇr»ËM+åæïåj;yžVt•¯Íû»ØÇØ0Ÿjot×-TPtWk"{‘Å‘YærGû.æŽ>fææŠãg/ïw˜ÝY>ÛXd±Ì}èÉ™eI:áÐ)ÀZ^V ˆk]¡¨[¹Â=²˜~<–¿(ùMÝû‡ªò“ÕŸ~ˆ3âwcrð}â½Î¥Þª6’†Vm .ÝŸ¤€ßù7Š¢™'Rš®à¿5³·Æ¤›mÚ,žQ2|ú’ðª.Í ³Í tU=€Bø»W„†¹, á‘þOOì„+.à–@ÃÂëóRg7_qE•–(lϱ£sWO½°¡¹vÄ)×l±T9ÃÐì~¾ùl™ŽrÇÖã™ÃBœyÈ ¿Nëd.¸ÿ¤O×-À­ Ûå1€ævÚî?U²Té'¥Ú«OÒ™oí2§áâ­ NþÈHÏQó¤P‘àñdÙl‡dG|{LóR¯Ô°P0¯ÙOGq®Ú.DpH›áÏjZYèÿ¥…ü_9ߟ `ýíæôï\o'·Ngp¸ƒx‰BZ‚L¾öúÁjuhˆÉà©ÿ•Uê?ÄŸçà¡®hâšÝÇŸl°ñxŠcÛºÅñè™Ä19.‚A À”_;-Ê=`yBÀçÇÓNÚ)K¾8tâ˜*‘kÇtk0À<”A¡ÿ¾­)ˆ“aŽñw8<€`ë Nòíýdn/'úŒ“æ8ǬuýîDZ: k°VõkƱ†{€åp¡òQÇB3  ‹€M3ŽÅÜ ÎAtE €×EÇé 0ÑW9¢ïúñ¾~Eßg6CP1û'_S9Çß›Bõ8êb ¶ë³èÅŸ1zŒ?Uò'W „íeq²Hw f=‹“¢ü¼ší\ÐÇ}îq¶cŸlŠ€<‰kòHq2_ï#§é?ÞÓ·—¼öÔ1óÚ‹Aö5Ã.?äþ MÛ¥Ëø›§ª­eîrˆ—·†Ê ld?Ž?›l>þLÍøÓ7‰øƒ¼Øøƒâ*ÀÞ>§ø“ï=âp@âO®Ä—K+ºb¸ÒèGc‘G9l'¾YhΕëS¯;ƒ?¯r©– y­_ k}¶õ”L 6‡áìÑá °‡¶äãmsÞ· í¤ck×ÉCþ^eö½x]âóô»ü’@§Ç1K=àìþM§vMà2ýNàŒŸV¡k Du°hºÊŒßÅV̆çëMzÞôãùlu¿›‡büûë[»Ýd3 Ì]ÿ )&w[„Ò\ž;×í;C^QŒ_ž¹³»?.Bã᫈ÞÌä}k¯}2GÂ}B~Ÿð“‡nƒ^"‡¶3^ß›à8ý Qɹüª.¦õ§ìÖ{÷( µO˜›sÎJ×—¨×| ]_J5Ô;ÏÅóITÑû1ˆ*ѱ·Ó¼€¯®‰â!Êʃ~E™=±V/Gmonž]¿v³3nOõîs;*í|Þ·U& ~!¦ÓUš‡$“/ì’Œ(“ÌîúL2z½ý:v<ž‚—Üq–ÈÜ&³Rñr¸åZ'IwÇÎÈûý6;Öf±ÿÂ'c?šÜ·ÞƼ< o.=ßnédw,CW·§£‹oký¹æ< Ç_¿rÇÐŽ óôRyÛðÇwçzõ­T¯¢ì“ Öñ@€#7ÉV—$ÛƒŸcg'Aæ$ú—J®•U”ÌÍ9¿'¿î¡9³ç ëñO1¹žmÊ”67{½Ú´2žã<¶/ßé$¯Ûz5Bb;ÞvQ{ˆ.ÚÖ÷ÐáÍíÊÞž>Œ"¼¹ëþF»éÜ„¿êdrI9ÿBù?%ñ»þ6ÉvÃëÂß6wèL-oTñ#ÙYcu’óMí`Í×Ûyå‡[ª"ß­È>óyÔìôÖzGÚÖЙÙêHíW殹wLT |c_ý¹zÕ(JmHçóÊêÒMH- MKk‘«ªVâ›ò½KÊYÑæñÀ›L’l–÷¢â}´6U½œæWñ ñìØ“·³<$Ó(—-L­­„MN¸%Ã5W!›ˆKE+§Du3/ÞûÆìp'õS9bWWô*­Äu¥É›h«>ø¤öˆÆKÑ7<ª`Sx°$fŽ*;¯ÖQÎ Z—Å.)¦mèty\Pä§~I2o>-e<zÔ²®åRuyìëö™L'žûHH·Ü82›eà,×fí¸³3sçbzM+2Ø‹”Õk£~iÕÔÒC§¶”kU㑱ÝÊœ‚kËå(W0ä ÝñäÜz,èì ’t¦!•ü«(ò½™'V#ý,\ ñ(\]ÕOoíÿì–Ë}Œ¾ÝôÕ›å4W ¶tÈ„[Æå¸÷h{³Çئ“TIû—xk:ïY†ÿhôz#wק𣾼3¢˜c³ºü«ö2£¸ŒˆÓÉ‚>0¼äg8U<£‚#Ö3] mÿ@e¾Ã"³¹öry_‡)‡”}Š—âþ’dɶ™õæê£ªî±&ï ½•óáèHÔ]C=³Pe“&SŒÊý¤®äÁi§uÃÍE±Zü{éä†<]ó F‡j’‡zâù …›w¤…tùnîiÌWCÈãÌqýÁ~yŽ]3$É’¥¦ÅfBÃO9¤¤MŽté¦ì~I²ëðüˆÔÅæR ‰Õ~WŠç;q\§œ(3'Ö0tèZè£ßÕ/÷æxÕžŽ$UéµB,FGyw-Ü{ûKóÁ.+Šm=mu rmÞàÕâ¸?×sؘKp‚ã .¡°¤öûéR¿2Þë3Œ¾0EÚÓéc±vHñ˜"ÓwSv)Û_’TºÝGôÀ9¾¾§4ËáÍúçù¶-e©µ]'‹Š´®QñU{sªð ì!†Lg»EÉö.âu ¼9C¼zk£sýXªr– wXLJlöõafh-˜âécÑóz/ÍÙP—™œPõW£= ô–8{TýýrSv)Û”Í/Q 3N¡kߪØK·:\qNd?){B4ãä:«<-«xkÚ[n®«Ÿ|½öUéôY9¢´â|¡ÓÜçÑ ¹Ï:̲Ì.°9ÛmÎò+cJ²6¡«¼&P ÆÐ§²s=LB¤MzÌ¡>éÍžò¤Ç*^Ên¢ÖÛ”4ý._Âû ã]}!°Ùûh±½Ï9nmŸ÷”Uàs„ÞÔ m_@…åäŠvä‚?œJBc(‰Íiñ/¹µŸã×÷•­÷!‹`òwVèÐiš)×ñ ]+5ÛT©ÓN±ÃM´1ø1pÞ%?ëkHÚc¾BŽY$GhާSÀ`èŸó'ÏÐ|y—:¡[ÞþU–6aĤSÙÛÁŽ6Îîg¤­f·ÖrË] n¤×¥ú „g9Ëó«ÕçP5ز[ß9Îj~g¸Ó “¥íriªÔ2Íɪcc3Óàè‘‘ÉL·³!Ÿæ¡ ÷[.´Ó˜œÝn˜kWœÑDîfõõ/ãè{?ÃO.|%Ç, æ3Si}ñ¸ŽÔáÆo/8{Œˆ‹¤Wºá¬?O<+Ý8gî,Yª Ú³âŽòè˨q¡‚A>œ*Ïûw²ºzÈØôÍ ¹Þ­º£ía=¡™³H’Ør#üŠŸ·7?»9?»õ°½7Ãò5X¹jÈ=­´à2]þlqf÷3ü´k¶nÒšìVæfe#2«^å@.©Óåiá±ñ)?‡›Q‹us%rvhŽEf~éétƒÍo¦aísœDÅk0þäÜx }.]$³ïEi„Þ¹Q¶Y¤“Îõ>ScÒû`c£‰ªÓÇ(ÑîëºlýÁé©É¶Ë¯Fª5•…y¼£âª÷ìÍ–îªCˆ÷CÒà6WajÖ!¡”þ-?]ÍÖ$>MÒÔxm²<¹Uiuäôšð|?<ëý~[ÖÞØC@¡ÁK.–ú1_ìôqo0鎂ÜÝVnwr“’."dz)SvÉVw2š:c󰚟åÏHÙV!ʪMu9Ùh„‰¤Ú×ülqnÅC>ö™¿ÖÐéÀœÄcòZø’T,öܺ?*¾cЍ|3â°‘Et\Æ ¦Ž2þ@Ÿ|ƒ¾5|¥Û>´AÑ^ÖD]ÔéŽ:L$ˆí#þØ€ýjW6ưu©÷´Ö9[­s€™­ó¾müÁÏð“cU¿šy¢E‹[ª°ôØ#>"/½ðŸÛÁbƒ–#tìG¢ºš>ðe[„ñvT1mZÇÑ~JðÒBêÛ¼©÷á›·íåžÛc—éÛ'*·®F}Ðj|¶¹$_V³“[>¡g÷ÓbØp6^64xn5Ôa4ÔMïO¶„5lÊ?¯ô幸T3ÑXXOó' gÕa»1ÅεüˆÅ L ‹~f½õËîzR;-çé¾â ã¯/t‡›Wíóµk´ëMr×Z(ܹùx›ïf Æ€Ì6ëæn:©Cù³Z[ûì¥FÎ¥Fì¥ZÆ›ëÕm«­U·ÅꟀÕ8Ĥcš5ÊÔµ!h)ÊÇÎg.D`Ÿa£,Fi.Ü$½V\Àçê“&¶/lîÜTá³ñs߆¾aË lâvëŸz~R·‚¯–µªÃÄs[oÑ4mWuÑa\¥‚c¹rè´†•ÒÊ”Ê'¬¿/ÏAo·ÍÂÿ¤Ì'ã mÒêoìn±}«6 ÆÅ^Õb“½–Z{ßÏ[fËEÜî{—+7Þ~æÖy_3Íô„Të + ¹½ì} Zqt•t°ŒkÀá øe¬f 4Ð[hà2àxæ]ehÌÜÿ†|jê*ÿíkÂO¾|â¸ÖˆhÂv¯¿Í/ªéi®¾NféÁ¦Ry,ïÅž_ÐÍ‚;æü\ñ­Ýƒ=ôF©øoÎðAÜÑ|¨,„åUÄI7Â<Þ‚° @XrÏCØÇAxaeAxkC8qH¯÷„p=„ð„¸.Ø sS¸z’õÁ™÷·Ýn©N¡žMl¨,~¯ïÎ6ˆ74¯¹Jnx†•×þ yá•á³ÝûÏj*BØÁÞ}£Þ+–!|®ô |ƒPÚêßU²ÝôOUïJJ§½=§“7þ.‹Åðüöþ…=æjüÔ†ëiÍ-qk´GRÅûív)[­¹T-=Š¥ož,ã¯Üòî™@šÞ l°?BØ*¹€×ºxý„opÀªñO®·CýUÚë*鄽ûªzãeO Þò÷l ˜*þÈãàØñ§"›q²#ô8þäVqL„FˆàòŽcËÿdnÉ}'ŽÇ•1@à7ðÐIy˜øí¸‚ÇOÐGRpíÅ1Õ£oðé)x0}~ý·”îÏjþK¦÷³~‚P×G*§ñ'K­â„ªj TWQ6vçB¬fjD ä °]¦ii D×qüùg5“ xü$ŒA€5ð¤)]lZ±™‡G1~Ѻl¢Ñ¥u2"ó~oÃ×üüá—ø[D·ñ·ðq>öÕÜ’35N.mÄ‹œ—÷qlïoò¡ÎÊ€ Ø@ãÖ°þÙ®0:ü³]O¯ØDÂOôeâl4:!¥÷äVn½¼ÖÏÄf¯‚*¡ßÇv!«×°lÎ/Ïóp|þåçw¿ÄßE}ÈZñ¿¬â/.ÿ öS±Ö§Ïz'´˜“æ¥ö“‡.VqqÀã.è±¹éobÁ÷ÉŒÎïíq¼Ñêäõb$úú!V*«Ê³Þðû…2ïϬ»ÞØçèMø >Ÿ.?¤é‡ÿÜù!þÞZk@V¿îS¿à4 ‚~›`sWÜøãtÏñg,¼ãOõ‚Ĥވ¡g¥e£:ùF¿­ÙkF¥ð¸›ja5ÏÙO‘ҙȟòÊÈ‚y}´ëç×]•ßPe*Å@ß‚¶#1‹…knP³Î‡Rçp:õ¾Þ©êÞÜã•öÜ£T0wÎäCÐ2¨–UÔŸ<4Ò´øâ¯¹¾Åßá#Ž‚ ¿Xjœ^·êã¾ïuïá #‚è†QÞÏo¶:“op$ê×a9×Ü×ñ.4¹?Ÿ—äu:=`èT#©šÿhéÁæ°ÊV´½Ùî¼ur¼Œv\»Û¾cÿ7Hc›¡n¡r…œ 07àwÞ>&½íåÅ-“ËãqšA|lG·µÔI;×i·YºóÍæé|.÷· 0ò!BùÊod´< ÚØ›G~³ª‡³·ŽÂÐË›9wz¼ã»¢Ù·g¶ÞÔݪíÈùÈtZ‡ë/éçægùCëu—¦Z·‡Ë–×&à±Ç›í.Ù™qÇróº£ú›ó¼ŽíêëqxãÏÞÚ½Ñ=\ÈV½\í¸”^ÁwûOkº+i¡òö”áämuº06âÞÜn³ÇőϵÄi¯üº:3ë#h†Ë´eŽÃ¦aæ´‚næøÌê˜0-˜ &pâï2žÈþd“¾7w¼8¡ÂÍÐçS©EûZ7Yìm%»ö|Öß^Åç–·²ŸÍ ®"Î)•ΰÔ\kNc`Ç¹ÞØ6Ük} ²l8Ë´2•çÞœH•‡á>dÔ(ŒÉôú›Õ¹°RV5Î45éÂè)+­)µ?HàýÖø;J³®kÓf.þç6:µŠïÞqy·ø®¹Þ´Älϧžºi ±íúÃÒ´{OÊö>Is:ê” o‹· fÊãºoñ½kó•0Ù(ÚÍ»;ÚbÖ¸¨“©Ý:)ƒöN\‚ÍXBÈ~•¢ÉkÏR~Is6éò'Ê$C!ëÇ`II×b4aüwˆöŽÒkx;ôPݾµ‘sìh­“KÁ&Óʾlר[ÚY?jÒsu1ùϪþršÜS*êSRZj÷a¦s )ze=]&âYXï_CvºÍ½L¾í÷b‡šÒž¼³RñÚ^‰G©¤¦(â¼ /Sä_’Ìàk¿êªÙ$/5Ôï'…]wšÒCç¶±(U?Wlëuë[¹e†1XYêÕbkwúå©!÷ºª½Ýë¥`öù»´3º„AUÎAgAiOBÚ'Ù™TjWÀú5Ò.ñú&ˆYàïåNšåàÛ‚¡Íú¤¤È)‹?H2zsóT³‰v9õ6üÁÞ¤[©Þf/kë8{Fmx;È›xÐÔy“#µGUàUí!hŠqÒD×Ò¾s¾¼9“ÁÂÝwß‹܆¤2ÒÈ‹ü°]®1àï6áÛß¹0׺–ÁEzrä \ϰŸãbÌÚ|AaGµŒœ²H‘RÄ_~†"Þ´{·–ºrZrÖó†èh»U»ëø9©YÛ“3üâ%³ºáû²Öy¿Jìg˵X”åi'k.˜Z²“¸bp…Üþ.,ÀY•›,ßÑ7¥yßÞ¤3ÀpÆëD°vpš±™NNMVco† ’„¡íg ÜB˜rÊÏ-‘¡×ká—×9Ì`¼+`g}0n¥r!œwÿÓµÉk³føI%=t®nî4Q_ïq^.åÎ2;ÝMûÒN¸›¥‰ÂQ] -zìñÊz|¯v8(Ûû}5Q6”«³i0OS´¿X.èòñäPgž ©ZBõ©Ú§’^½ –)EL(›þ‹0NÍëAn/dÉc¶AC®-æÚµÐ/RÓëÏ$«¾;ïP–pN¦êÕÆ¢„xñVÇm™Wévšå˜ëdiÇYƒÏ:í{Àfùë{†.Φ8÷Š4çÞÚ”àÇä4È•…i‹fí‰â‡Á¤;Ú“.¿ŸÞbŠ0QÎY>eþËóé ÒÕ\j½páy7†Ú”H ù©L é¤ “§¾ÂÇoÛçÆƒwF']»n4Hk8›!…'p^K™ÿòЯóÔñ—¢{l )G?Ï‹ÎÙ=½¬*ʇ£ 9?ÁÒŽ‡TU«±p—Fy^#¥öÜÝ17*k,› $y–?ÑSòð ]=v|JÊ5ƒ©ü-GõfÇÖª’ŸN·OÇŒœÀ×F¹NçHìÞý*±‹Jô(×ÓÏÍ(WÍGã¹ü÷˸¿ ß;üÏ(ÄOjßd%£¯½`®²œ`•¯T}D7¡Ó8„ó¸üÊp_¬Ó`·™>>óÐͰ§Ž@ó^-ÍrP’“±¦ËÝ×›höí<Ž^·'ù ü/ ‡Aq4©C‚.'ÃÏÈC¶ö= KÁ·4,ÝCjXò«ó![è͇³oƒpì_ÜÜ­£²Ä7ÍCÿŒBü•Ýç¿Ú@ŽJiá—ž¡#Ú×9~ÝØíŒNfž¶-1¾ùèÑg'S7÷;Ÿ>ÖyòÚÝŒqlo7äwµ:K F“p•ôMG‡ìs—Ž­áçê›Äk‹®„IÏ­‹5µ5‚5…%‰IÛÏ<…îo˜M™ýr-˳•7«yBXtØ&õV…,·Ê³(Ց݇ûžûg-úéWR0œ¿èKk€PÁxÑœ>is8ys&=NDSCìB%³Ó©9šî9`6äyÈ™ƒœq»Ebmðøî†ƒn7™÷WãôÃ!Ô_Éô¨¿š¸þkO[6ý—uš :Iø/NÝæu¹»nm¿.´Y©UÇÚêÓìËEÊ*Êsž°Ó v¡/Æâ@µ+‹û´‡m¿Œ}—ÆÖ»Õ#Ï`À†üâ9ůÏdŽÝ£÷ë4ßæ ß}îú†˜\z u7béæîTz©|‡îìéöAomϼÚlé·YHšµ­% È3íDS¿x³mArp¿Î™àsÈ®zjŽZæ™uWXË)ù„n"™€ÜÂàʉmšO«Eó+¾ ÷ öð?yLQÇíÁ+‰ÁWé¾¹vÄÞzg©½ÌDZ»ÓÑñÐa¦Á£íÛ¹Lë¼íÕ[uÔ7o‡–Ö\°ß{s1®õ›Í+Ï4›Æˆn6¥~šhJ.Nýò3 aï²-ÁhðÎ\5ÓE­Êuç_8_`Îè5™ÄŠŒŠµã{Òð¦oM]¯úD·Þ¸Óøôr™e±»Û^ÛÝ|#Gtö÷vÚäè”:8”­f«Ö%Q·Í;l]ší~4T«Q®G°:¬cÓ¬Tû 7вþfZµÄ—˜šÕíOkV¥ È–'¿8¦¤HæñS‘´è9æ–ôk™õ‰G·ËzÒµ@)ûCî«û°QÜûvæºíø‚Ùº¯ÕìõoÍ{´LšK÷Uhv˜Z³ñ*ÒxC{ºL=î]¥ºçÚwˆyµ‘£>«Û\„VfœNlVñŠo¾BŸ¶û ½•Bƒ¦*ùOZ>, ãòÍü‹ŸÔ¾¾äA{r‹çØ…`¦s}v˜úÛ(Nà"û%ª[î90$ñÔ¥÷®Ûj>é0Q}8êêÕmÒK8WÑÙ-ªìËÅ\…y1µJqµî—ƒ×¤<Ï÷Årå`X¥ ŸJõ õ)Ü,¶¾ =N’›ÂSSÊ…ç´3-(Af\P¼`>Ò¼ÀÏò³–gTõëÈ¢|Ì\YA—c¶¤í{SƒåË#ÖÂØª=|õÐÊìÚZļW'ò¦]™-žZñŽÏ´|¤÷¬¼ÍܼAA/ô󘧓™ ¶²o¡£qq„frøÚÈæ¶ ‰\Ë#&s^ÆÒs^.‹"HîF"¹è5E&¹ÇŸüTÃ/÷…¶ ªZŸæòpJÕ¢j: Éå2®f[¹Õʾ[Á ¾Ô q+¥ e—†ª¡_–$<(Ù#ÚÙ í2—RõœNÔ pÊeê«F2Ëù¬·‚=¹B©?#€ºWž†º±z€ºÁ¥uïà Þ=L§òaþ…²«ê²$[67Ͻ×Zi9ØM\U”bò¦ßÖ²C<ê™ÜäXæa[x¹…’úÏ—¢æfð]É\n ¤F´õ Þ†zîiõn;ÔGlê×óe¨?up¨/¶æP_¿­¡¾«…PߛԠ~Ðc¡þ½âA} î>¥àdü’¾št¹w9‘ÏË3¦…fGc*uñk=zrAZ¥Õ¦UûVº%Û}>Yd7EÍ­ì©Ó6áåâªC}gxÞ-h·÷Р4¿@âB¶ ÿä¡m½   Þ†ôÂf¥'àZ†°åž°õÖ…0ÇÌBØ lµó l]~ámoôw¾<ûÀ°a;î·z^gPn¾îŸ4;XÝWïÏRýžó03Øç»§›‘^³ 4(~lh ÷¶Ð ˜{å|±ºãC&c°=aT†ð*׃pa üt0 aF¼Aà –VÉVÆ?)ÕUõ^{Ї,ÀöñËLX®èŸ”ùðnú}ä³n´ºî ­îOXR԰јæ%WŽº'¸+¨Þ_ýÓ*I]ö®?IiïNŸeñõ:‚†P%­ïªÿ”öþÌäÀÎÿ™°÷§ªw\ñ¶¦ ΂óO°Fb3î—Ÿ´Ý{¼ú; )|¤8¶$.Ž žœ´8µ]ÀîÇd#Móêÿ‘>mîì `ß÷(ާ0*üUÚk€gR0x&%òÿTõ®ïåpÍB:Ãný7>J‹?Ù¶'Û'¨Á‚û4ÀX€ó?óÜÆ#õ¢ÌA€y%-@îÿ_éÓ3xId ÀÓ*dépÁ‹›DIl¢…lŒïû¥è;“ÚѺtGÒÞÛúÑ{OîÅûYÓJÈ—×ÿ“ø£È T[€xs<Ø®D‰ŒþÙ®‘ ⤎€ úÉ œˆ.Küµ]Íœ²ø© ¦WZ4òM+ÊpÞö½­ÜïÉ%¾¼¼Æ÷ñ¢µ$ô»ƒ\È¾ÍÆóŒ—©'h«ÏÚúã>Ùèðhî®ûÿIüyèêOzM¤ÿ'çÍÄëÎÀö=‰q,ßÿ³ üdÐK€X¾”ÜyoË3ìåÕgãÐoé EþyîËò“­Õã6tìÇ:îîqŽ­Ý;nr^ ý£S¿™µuÃo«åuÝZ׌ʭþ'ñ·©Ëñ·0@°y&þtN“øÓÍq`÷m€=B§¬8Á¬ÃÏ.ðy>¢õÔ‰ÞSXƒCŸ¡Ñ§PUÍG³qï¼kÝ൛Á OOo&˲·aY“®ëÕF»f’ƒ}™wï̹àätæx?}?Pœß Tù ³ô½9ôJÔâo`Bú%þÇeü•dÄ[šÆŸoÄû xù| ‚VÍhÌ›W ŠöO?\îO]{úhù¹YS%w·¥ ÕÒáÕóÞTº§£#`§jnAEzÅøÁc+ø²òÒÏq=¼ÚG…äÙ9¶ïŽ6³£³Æ|{ hnËæqö_”ÍÙñ7 À&½Šé´ñ×Å&àŽÌ‚ð-1þâúâ]€âã.¾„À@ËëçC¯²=^ÙÄ÷ï:z?„‡J|è—Û™½±½O2«{£™Üõ2¥áN´€Þ¹`ÚˆbÚ)Üú%ÁÝ–ùÛsS³õƒ÷Éu'Ž9{5ôfö2+vô$Ðø-%PÏš[;6Ú5Áî&œúxXGj£»öiõ¯“9Ñ=Õ„O:Rxxñ!·?ªGö«-Vý£÷-g`ïÍ¥ÀÂÁ× NP±kNKt;ë'ö!ÖÝuž¶ß$±°;Ù²¬Fr± Å*˜Y·84P¿Åè³ DéÅó3mC¯ŽÂqò ä¼ùRƒù»Ôí1wÌ ®n)©ŸÇFñt¾³Y¿;+<§…tv{©0ÞV+MaÓÀF+§Í²›uO`}[¤›õ!ì7XEl<ØÜ >j޽oÍpKH×Èó5B?ÔhV/- e5F»UUs¾Zcßëªí“H+ZL)½¸7]F‹<ù W¤näG¿¿LÄ×Â’ë;n£¼ÿÖ;𞉛'»ÐæÊ*ëpOlcÞ‘Ñb%™ÕÔ 7ò6úá»=èeÒ¿®øÝ9\ÕhÒ$EÕG¥^S—;²¯¼òÂXé³Û4µ4Þˆ½ÄõÍS­'ŶrŸ.q3‘¼†6N!%ú@¿$0A.ÃëŽànÛys|TžAgŸ¥Ý1÷€·µsüt–§Ud›-5·Ò>MÛ ù霄r«z’µ…^4UÅF·Ê;Sô•Á x[šV嵄à,¯7³‚œ‰ÅÆb:tpÉsž3©ˆÔ5Ñ÷¼“p•²Pdþ– $¿0ãQJ:koºþ’À{sõx±%îR±oäúÎZ»ù†.:Ï7ýµž ¬õ}ÌáýÑ+»vE –㾪N產ÏD~iñ¢"; eÈÙãl» ªó´ìZÚÓó›Tôå·8¯ØYáB¹ ¢CØååJi2ŠÔb®6{+”Ãr Æ&îbÄZ43ü8ká$öûÜ|.îP-äŽ=¢‹»ª”f96Ëa¹`ìæ×¤ô¦íùyÕ¨Ï_ªz²Q3¯­%< 9'EÌ"¯D¢4»Dª8¿ßMáÚ‰\¡!„G^@Ó?,Ãɼ'Ôò&w¬u¢‡,\Û¤9›™´×³\'1n&è1Ô.K¤ SðŒ¡VÉà‡WM9.n¨³œìh¥ÕÚ÷Æ:îÆÓω^ý8MŽCW1ªa°ýSÐÄÏMÒ¦ú¢PàûâéÂŽ…ëe…fGZðúD›k2msщöØÏmraGE:œmæJf–»z†.¼ôaޜѥ«aP§…SðwÔì¤/6å?í·|¤—é’ýöPzuC»²óg„µ6FuÓÄ ú摘»Œ<«6xmÃÕ%kSsÔÚIJu3lZËI¿knæíÐD?í¹á)áAoóý‡v~¼Öç%UG³t’¬*îA•`·šà%¨a-˧àÔù0ÿà"=„Öfè÷µ¹'4øÉtˆ°8kfR|v`ö¾mmfñÄ;göK·{ºž|}êÒ‰I?£Þ$ÒÖ_ªhY_I7· ïiؘèíiÝ3¹©=)õVãÝ&¤JíQE™lo’¢ºzSž½ yv©¢ "^ñݬçô©¤š¾ž³¹Jk­zmF*,7ž6Zäà°’òÝ‘w~´Wæzë©þ¨ñl«Óú¨fmépù²ç›wÎZaÌÜ^sœqØ¿eÇaK§¨·§õÜw¯ö<ÃéÊåê{û^©2Ÿ“Ñtù+ÏkrIÎ-F¼dá†TÜn–Rq÷(JÅ}+ùÔáR0’õpiiEp´o÷æ 15bö?šM²ïNÍÝ:4ÓÚ4ž')¬gàóÀžs+k]æ¯æNhfŒ£3-ø~KëÔj.jAi«×†ÈÈQ?ÖÜW3µ^_©-¦3yþݤ5|~I%1_ƒŽI§&4íTèšËY^hŽ8.+Î"ýP?ìÃÀ]l¶°:y¿ó|èª÷jm³~>°o^'Ï­ëõ=°óãF×Üõ§3㸺õË£øÖiÝHgXm¸krêxi(*TlX ’•]Ù4ž´žØq7olÄÊgph—å;B–ä©opZqAMÍrûe¸{PHàBOíÐBþìæ7mcŽ ¶Ê$cg…¡Ûéîx2ʶ\ ¿6^heò«YÕÙ®Þ¹Sc­_µ7µPÝÕïô©*’A•™U¢äe#/È…cE“ê…’#zå|K85ñtÀ.kvÁÓ{ãÂõsA†íΊ{Yc¾M8d&…b†ùŠW†ù{Š[æ‰ü¿;Ñí2WG‹éGì_ „ê Mö®ÌëRW–›tº‚éA½Öoý(D 3ÇHÑ•£¼"ì·\ìsRý¹¨ŠáÈŠØø" íÇÅà»ïcƒ{ʯÇ÷³+*fr¯½˜[Th}T’éœ|¨§Óãè\yBÒ9xBÑȳOÐ:3#i½?,­SÛš A-t^w)à©=Ù®+ÈåñõÅ^NûKý–k UõÚj˶€6¥ JÅf¿µqý~üu!Õø;-ùÞÃ%¸ßá9ÁTvt;Ì4·™¬tÑFﳡì°ò w U Q-ŒŒ:ÄὉúއ±G‡Ž…“åäí?˜ã,ù[ª2z7µ!f~Ô®º¬ãÍv|ÉÔ§hp±Ê o¥ ¥Z(ÛsÍ.îÒå¹â¬Ë‰ì~Ì~"éOÚ΃…ÈÄD·G‰A´E/N¤ ’¨SÎÔtÉ}6H¥!âTˆæÑÈ\ñÎÑÌá´ya±àÖlbÁnöÀ‚¾Ža®XÀK8` ö¦¯õÛ Ó¨Ý~¯ûÒ|»†aîóeœ<æ^ ªÎ¯ÔZL¥"¤x¼(].¶&M¹‚:µ9”{Tç'äþîHo|½“X„ˆsÙ*íCHâ7a/âÝ/baO•ncüÜTÃÏâP* *S8"+°ÉÖ+°Õ¾”gw,i+Ï"/Ï‚2Vž¹¹ê?˜@û·3Ä#©Û?ÃZ«•c ù@æ1¨^jß|q-;·Ê„ì¹€™g½yèê8«ÙnõCêè6Wåé;- ª¼V¢ª*µÓªPÉú€(/dI*›™Ð)ç£o€:9e–V—wÉE•j©rȘÅc ;@‹Çb/Œ›[õ„[ÿÜ^½J*wwÌ™Yóè·7e:£÷%ä¦Xîmó“ÌÙéˆR•®êã\fШD›‰¢q½TEíâI¿‹mœZ‰‹},\;ÓW¡«f Xþ1ˆù~+—Pyžhrñ­pÎ…½e!'i®š¹Æ ù®¹œø99q=ÇþÂxTýaÐáV^w–¿[mÏ&j Õîá&9.À5øðxH¸õ

æÅãáLoV¯ ÁL‘¨2÷Ò….B+Ÿ|¿$Ò #[(l ¨jôëàŠêéd?Ðy„=@÷O@Ïém‚áÐG4—`H:¦¬çÐïðèUô—³zÀdz ïá_èX“l£Ùs‰?æí´äšBÙLEa»e˜<½¬ÕÙTŒ‡7)ÙQ½{ Ñî® ×%ÄÉ; ˜uÒTf}òs- ó5g {À’ø °Ò8X_à’Að-•í;öƀ݈ÀnQ<Á§ØØö©³€}¼ÕÖ?hù~àÔMO5 ƒU­•‰ ϧšgì[ù¿–—c¥ \—Ånå9ÊMx* e­Ý‡°‘ü5ã”ìáE´WQ:€cƒ!à¯9à| ¸]óøÌó xÚF_à'ð[mø]öøû‹üãмÜ!{Â@ra÷~Z'6HÙÑú‡†Ælt³+­DuÅI‘,ËŒÓîÁx¬ ÷òfBì OŽœåàƒ?‚wP~îS· ¸Þ°xp^.MoãàGòü'®þv“;Ÿ€ / 4›™d4ñD˜m @ÔˆÁ=âlúâÜÆx´š@<‰; ¾¹"?¬ ¤¿NÐ>ý`µõ²Z3˜<'‚³…~.­:ñ74ÿ”ëßÖ¹0ˆúÄ,¿Ð mDµí׬•±øKîõnÉÁ˜ÃÇ¿ߟY­ßØ “–lá,ŠõÊ_©½¢ÎO‡þ-ÍÆä3¯Ê¶€ÄEW ñnù¯ ä?!¾¿½W3~çûo%²ª%PÒ·c?Ž•R”`pŽc5Ÿùi| n¿ÈÖÿ¿|Ê-nÙÿk•uп¨ä¿™`” }ˆÃÂõ‹›Óç_x}ëË_ZÂ?FÙ?ún*BÆ+"iª‹I+ÑZ‚VÒù“üI¥±Os&â4g¢˜`N%­Ë)ËÒa;Áuð·ùg•íÓO"ãÛëkEñkRׇÍ`¶"ˇYqzHÏMTŽnÚ´0~š”£üä|ƒ¹!þ%-þ\|üY¹ø3ØW”«2¯š ·&v&NoõŽržCo'oÈm­ž ®µ|_•´ê\ÊŒ3]Ô wµÈ懇yºšzrÀvï™Ýÿf£]E£ŠCÓ#êˆS¼YÿýéN¨ñ`7z ¨\øYût¨Ð6=Œúù–%þÁO‡Rµø+fä—ö ×n.¾Z#Uxküç¹=l‰çší–‘¥|ÁðùBÇ„™#óF人7=žêÝÉxᤳ].ÆÊf;æ†Ë(– ñHÜ2©Û.ü6êh¨ûÔp&ž”¡ho°l¬gýMèf‚ýt‡XeMöNÇ1Ñk·:x¯mºX,hÕâïË6âﱦ_oæ†>Á÷9ºÃ>µÏúIrÇUlLR3ì°ýlÑñôÔcó“nË&ǼÚGáaj†“ÏÊ açÖêû÷h°ÂÁl`]Ê›þVá/ý佃ƒ>ÈÍܹÒ;wÊ||$·Å[ÿ1ì<×Ñ+ùr!hj†•÷ÁÂÚSÿTù~’ùýàwäsfÐf¶æ+¿R¤Ë{¾V–‡Ylgf6–ãgÓ>d4a6·F«û‘îï—ܯø¿ÜÁ yǽޅc{=*ÂîÝjλ춷ë +ÓkG8>¿þ˜ÌüLO Ûµ—¯´³aÎo™ÅÇ¥éTÕ¼·k׫žKªå?¨Üô¼ææïQÄ5¨jÊ~_}“«‰×ÉÍë¢O»%i?ÖññHí¦ÃwÜJ·Ï38žˆ\¯3å°î£âò˜pÕŽØíØþøx>$ »mm…mD¹,Zæì³onòùTåh¢—ñܽ[vOØ‚s[ªÑ¸ª¹mƒžÏ³õ~þVþn½-ý…ñ¼øÃcû¬˜g¥‡È›g¶‰/쌘›ÞD<š|ÏÛáÒÞÎRLìAëEÌ{ôÕ¹tâyçë?û’CW²Ë]…–eǵæf÷µ›e ò<Ï/ôÜÓ½:vIŽ^4®±{j0Òø]ï÷öy'Ž ”#IŽá€’Ùª—6Œ5Òa”5;×J)Ša%~¸·ð¼u´„“¼šªÉ8£BÈxtß?‡¶áoúX脽ësÓ鼡ɨŸ¼OÛ¶þ@ž-;Ç#Í¥W¼&§Óî9¬‹?1hëë9õç°Ýªóß~ß©³ÈƒÍÖV?ñÝš«d%§ 3WÆ£f7­±m4^FƒË¢Fùõ*åã%ÿä~¸ÑNÆÞy5í¡—yþUÞ»'d”]výæ_u_YtØ‘L³=·™A«„H‹f…ì^<¼¶üºTëVhôn¯žoÖùˆ@räIΰ#¸Ø°³BÑ·Œ164×´0K|=\n4’ó¥3ﲎ뒨]rߎæo2êŽKU )ò)r¥&5{ŠKÈ­­Ís¸¹[Š*“á|† Q–¼õë¸èd:›~Ûh¿½fc±M½ê>¹M÷¼k°_õUËͬ£àMÔŽ:=ÒÎ>F¼eòSÕ\æ–YºÏ=Ãå¶~lŸ§Ú¥÷ÞiTL¾jÔ,Ô8ðæÕ¡Ön©b®sQÅÑ¡“Š÷#]iç‚®²½ø3Q›5÷²¸‰\¯ߟ4Í-ß³µ·0³¬Róhn‚¤Ë݇»¬KIO:B».>œÆ3J­_˘j¼(µ”ï¦ÔWT˜]È3£™zned}„% .Ra¾²Å¹ß‰«ŸM0C¤B¸Ìþð‡òÑë¹LOù¢Y ‹<“íñzïܶÔjäµµr¯bÛvCÓ²¤qú°Ø¬÷îcã€P;ý\n:Ùke´î+Èמâ¸Zã»cZ Ÿ‘¨a­+jg]—õþ®+-?™H*ÒøQ¬÷“aÓþ}ÁoÜ4Lín¬¦Ã‚×ë")ÒŒ.Ákx°°ßöÿ`{Çúê| ÌDêiØ  žPصS«Ü„¢Æ“¸u¸´³­¢Dk†÷=Ý/8}íÖ],46›9×f%Vß.«ÊeU¦M ÿÉ݇“ ÚU%3-qëwÚby7 ÍêkÇŸ}öÍ“÷a™»õYë êšëÅdtV aîfJ DJ‘ùa#fÔ?Öý1¼ ±>•§®!îVŽÞÙßOë#uյСcØ3®i½Îé æ¯~peªÊãá^‰ õ]ÉêW «8'­Q¨"•<„gTŽÉ¸IÀ]Îåý“;äzÛ`ž*÷4 Œœ´"ó!ï2ó¡‹ æƒ^¿Ì†á+0¹Ì?Xim EŒ—aFy‚À{¯B´KÄqï²ZwâdñfÇÀÙªQ{Ñ]Ecž®h™vZÜÊ w?óïÂRZ¯Ì³„–Z/ÑuCX8ž& —ßéíYîþz¨G|vØ«ö˜ÏËY0 ±¸ÑQÍÓ»él¼ÐÙs?¦³«D×ÞçÌ©¤Z;oÁ‹Mýðǽ?ÜÕQ¢+?™o³»ú˜”Æ–±¾ˆˆ©D#F–Ídè(¡mÌ= w„S­?’µá¯mäÊ3€þp©•ãø¬—ÞoØÐìRÌwÒ^šô̈}ÙÐeÁî‰ÜW˜D7&K¢[H¢‘õ$Ñ` ‘¨;¤Ýï³sÞǵéšü÷kðqï%µŒ8Z ÇwÞ¯‰Ä– QYN›ÀwçSë_V ö­Â}vó3V:ôÌŸÝõ’œC¸[,Ðú«R+g©âØRɺÄA„¶¸ S'ç…ÝZB»Iä»m€Ý€úÅ®7þƒ“¤þýaú|R¸>.ø€Ûµ«­=7Š⾺µ6"ëôíî+³þÕ±6P¹ç !25íÅÓ†ŸO]ªÔ:#x”õTɽ-ÈV<·þ$+£D´2ÓGOïär"v·y cwý :¬Æëªpvß•1 áùqoVäùóR‘[ä·"›åOEsïR\ú:ɬXyXýFb.–ËÞõV{9³åwkbôa\“†‘/W§:ß›¼5&B)‘BÁ˜%³#ãt70°slbÁ+?À¸…±¨ÆæàP ‰Û³*ÞJiL[e²¥Šòòé 4<×Ê:ÀÚè²Ö¡‚>ÐÂrS)mü¨QÚ(ÛsÉ9dAÉéß>%Ç endstream endobj 82 0 obj<>stream ;¼KëýóóèájÿÖ=ª~q~F]þˆ¿ìât¿Õž«^*B*FwØ.Ú¤ÁŽ7ƒrÎ%¿]®*yª¬ïNºâbµÞU-®Ü~ikGQ©QºoKåu/ún¦Øäwå"ö)qßñUÎò·CxÎ÷ZüÏ¥ú¼AzžÍû<³[ƒ<M¿y&|òŒë¿bK\ïÉkWiáέO¯ùظˆáN4c"U…VÀ…Å®G[ÎÙ&È(_«ŽêŽXÎS{¦Ø*ò©Ö™Ü¯s|nØ-+ êNNdfäó|Œñ‚^'ÞÅŒ!*ŠÕltÛ)Y-ý¬ÖÏm³?‡`³#ñðâº^fd²9†²Z1Ý-ðCZu¾y³SÀª²ÇñͲb»X áöA®“µßßk&wìúÄ%©w«ŸvÖ@×kN.íËÅÃ"…ÀІ­ÕV„êÑ@†ÊÚÁÊrp+ãÕœ©öOOkßO@öÉL‚%Èfr˜œo€ §U@ŽN@v.w@v9u¤Šf~èjã…ÑÆ2RŸTùy;7®Ÿ…Û«¶b³#'}îI¶ºÝwÛV¹˜Í8EÒã´Üˆ ¥ì|BòpI¿±ÀmPaSÔrkj•kê\&Ø/õᮀÎï³€.(T‚—èâh è’õ4ʧcO@—é +ƒ  OÀÿÀ¯{éñßP¶+dKzõ¤ hyíu=…qîáýQ¹FÂÝ5r™1²ùoXË?°èÝVøíæþ”ñvË :ë†Æ€QÍ `º÷`¶n0÷<—`TÌCš&Þ€Í"éÂ3w°9þ Ø·^fûÙœ´#¼!–—º[¼WVƇZq§¬° I\_|{Fs¡¼V“ùLªÇsdz(Í–ZŽšYÙ7ùCêRýÏ›âj²ñ{Uã·¶,ÅïdÐÇËIõ9ËŸ‹—«8ÌžbÃ-•½Iï—”(m÷¢mÚð×YÓëksÕGÝeˆ]‡‹¯,”û#]Ðiõ‘Ý\{γ¥Œ>fVFÑF³òºìbS¯¸&'­OˆÓn1¾ŽŒ×˜)-ò£Ç=ÊúÑøßˆ?ŽCÿ£ßvßvzi-p%§ÍËå:¤®GÈEö;tÐ=¯¯ž¯øŒ,¾'»2Ÿõ z¶\4¤Y‘Q½;ªOðª=ÅŒm09`2!»ðb|SùØ™ë÷ÑïðÝ™‘ZN—Ü ÁÜ3‡5‚› æ›W<ȳD®o¾Ù~I¸ÂÿÂ_:´¢Q·ã.œÅÚós0±õqۜԧ›öû=Yñ¡?[ÀC{?³ÿ5=¬[©r;9?ÆåñíQcÖ¿K£Áý£‡>ã„òªÔ 36 k»dD˜u›ËOýµtxöŽ;ׯƒÊi«öŽ£Ù¤Ûé÷Îý­g:ÁJÍt8›IʈšŽü8ƒ|~ˆ¿ù‹øpnt½Uqç]ð×êÍÄ»…†óüóèÏJJ«7¹ØÎtÌ!}ø¹ŸÃ(ù`CDü–õKöcö"] ܯf÷Nu7‹Ûk—ÇA÷Ú\Œ»]1»é<&ø¥Ã—í¯v¨/Ám¸^Z9âšËëìÛ´ºýÏïýÃ_zù·OJ’PX}Ú»×¼äé©ûaJ~3ýq…4FqmÓ ¡É$XÂ~Ñ/Óßs€è»Gv¤Ûƒ¬Jç©{T‡?÷ÿí/k¾œ9Ùí©öh¶k9´ßšÛtÔ2¨àÐ\ëg³ø†¯!ké,¯‚–\ÇÛ†?æ? JÁÞõÛ¼þ…ÇæÝÏA"7Á8B…–ùœ<*·Õ(³ ‚a^ì×ÅyÎ N±Ý£rä¸óÊè[ÿSm§“/üLR µkÛC¾µ¨Ü*­|ÓMä„fiJjž›å÷hª-·ELÂÆ¥{Z5¨t®"÷­³ßeÕÖ8Ýþœð…=noc;s¼þÂÖþ.Ó×;ž1¥ÃzŸ#WЊƒ£3\}ŽT¦± !Ú ¼lwï®­t^ÖÀõ•ì(hg¿‡y«PÇ&*Ÿž»‘“qÙ(ºDÓ®6:—Ý ;±Þ‡Vé Ð‰ùUÝ~@×þ*ØÔVfúΚa³—…tr%sIO³0èLˆß ç‹?S< t’¿h7sûáÊ. i{m4ª kWÍNÔì6,vò³Þ Þ§‹;qt³}eš—Ûˆ˜µš¦Òö¼<;rÛJsÓ¸îW·úã¼z×yùžuÂèƒ:’^"ìɪÂÚp —-ÝL+Wm¶LË ŒÍö¼2ÊÕâU÷Ú DÇärZrhí2ÒH=º$¸‡#F@·¯ í¬¼#÷®¼óú/¤–ø%>VêãUŽüë)7òÒ»“ÁÔ¯y|»¹R†‡Í\±Ñ+U¥:¦¶bÛ®ÕÆË0ksu}]Ì›ya2*"]Л®ª]`…Ö(ÃLSk½uËT_袭 Þk¬ŒÖ•";ƒ<}V¹6Ä:r-„r–D¯¡ˆœåšU½üp(C¿Ìçvå)ϲƒÝàvê /nÜZËpËûÙtºBƒ¥PÞ-–¬]ë^u+o<\Ó¾&¾ +s£rõ¾¸k—Îî«QS¶ð×’úŸ:TP^ùÌ8]‘ßš'Gòp(g£ûF2sl,åWǪ¸véR.¢Sw â›èÀ×Kгh?÷'qÍ<Î;Òϱó5.OD£Ÿí·:ƒC'óEFM·vh6~¡9£×žµŒDšNÞ’ W ½åí»ÚåühtR_¤-˜‰ççµbuxîCÊ— Šâ†9:Íh!OŠdP]\Ç\ :í`)ìn¯‡PåÌ|×êüñ£nÌ®üñžªùÉé‡ ÿ¥}Ú¬Å9èrtøçßn/¡SèæÀ«‹v Y‹n›1v˜Ð[³œ uΘ^{ÈõVÛÍB5¬žÊw5S¸)PDd‘²ÒÒRKRa['ÅzÖKMÂÞœ™Buwøv…›óÄqqçº$Qäè{Öäè=¼LP¿pôL?q]È;s‡uüa)4©¨³4ËáÒàn<Âw­z.6uÃu W«û<–~ˆ¶x­Oh5llåçŠ*1=y¶­Oe½1ÙHË×þ,YÃo,nœ˵bAð†å*ú2,Oª–Æuç³6ûøÄS–WÅó†¯×5&\Òʆ Gä™ ýò‘‰Ï̉‰WØá‡å‚©QSîÆ•‡eò :“égÛÄJÖ Xײ$TծѬñRSAEÀåÙ·&ȹúÀ”¬ç¹-nÍ\(6 |º±|m„&Ó¿ñçÁäÃûÂ!Ë%÷Þ2Ç<ÍLaÞcËedh9¢§z¤kùY–†7-…š×š ð‰†ïcŠ ×n{ZÀaæKädÑTëìŸÙðëë‹õƽU“;9,¿êf¹þUk|8'õEU¥•³.‰ ýŇKEpÅhðhÔãýýsÊÝqxÍõ.ä‰}Ñüƒ<&inž‘GSœŽ2çôÙÕËe¬êrÙlH{¦²Ô$²dʲ$Nd‰XÈRaº'mqþ³væEŽæ"R ˜¯ônmëΪÁßµrwuÝ–Š n#J²;¯ÊÏv}vŠ<µk\Àyöµ¼¬XÊzÌç^0ãÀE;ìèhy»Ðš‹©ÅÏR¦kWÈõiÀ‘(y3 ×-wñã©»Â[>úÆ.÷=]ö¯!v™7Ó» ì=Ž æÆî‡é9R¡ÝùV»rR°4qX:ÓügV¤Ž£±‰*/*=Z8öU.ˆÄ“ÆÉÓ³ BÒÈ“¨¥Ø²(«°k“›ú=ÕÈ:‹ÏIôUÛûaïFxâö‹Ÿ&¯Nf+$v]4UŒ)œÛÕ~ƒŸWâãòQ Ûm¢ÚQ¿*ò¡¢ø®B¥m%V¨Ýô샣·¯úffŽ=]vwšÛƧ×Ó/ ÓQǺ¥HN«Çòôh1«P¢¬f7)ÐÐv?ó] ÷sW'×»u4ëÑAˆ1õ¼úìöU!?*ïµUFκR‡lz÷,×pÛ-×÷5ëŠæ^dÍÌše÷h®ýÙ¡9ëž@:nQ=|í~ÑëA°³Ê-7”ïõñr27w£§ ¥® ¶¤ §nƒc%7À©§~¢éx…ê‹|"ùø¬”# ¦ÊàårvêYè¢6i¢f% ù1/­Ûæ¾äHëW ÍrÅ]Ô¢‹UänŽ«äžÖrr§üe?/æ/󸿴†›¾X¤#é>ï x+Øþ0t¯­¤çÚ<‹^—ÍÞdêÍ6&ªÊêRYc4n€ …%8ó?nÙ\õ€ôŠÔ¾0„¹:~K[Λv>×X_>XÓûpµêãzvÅ]Ì2d ùg•ý³wQåÄo-ÆÍ*&gU‚A,½",ôaî›ùÛž²±+Ö¸s?˪§° ;G¨‰·öK:ßÛ¡áq°­Nw“ ±ˆfëna±^=ê‹ýŠ;,ÎË_?–âåþ]Lè/ò“T:×>5[*šmô ÕóµÕtïÜ>ÓêB§^Y.ÿÙú_ÄïàZŽã¥”ýÓÎá÷ñ}"ö¼t¾Ùëñkwîû%É¥½¶Õñ ^_õsiõ°Ÿä2¬žùÅ„<(ó»ÒçÈpëÌÌï¡mÔC'ªÃïáto‚é´º—“v¹¸Ÿé>îâ 0ztFÅ÷x2a(èÎð;A—ɤUçP…‡ñ@óÖëÄï(®$—@;ÿ°ÖÞçJöìs2,¥g¤¥Ž6팮¸->](×ÌzŽ 2çYaœ§{‚&'*¤(ªãnM…£GåFÜ­*‡qÓCñ¥Ô‡ß¡Û*ß`0˜©Q4Ðá×®¿4K÷~áê"A½‘çƒ2zÞ©»ïaáòÚ=[³k×/ö/ÿà'F?†”>a¿%ð>,ôÝqC5áárÔº» U ë33é¾v&da6=áÓ6|ãñ5õÂg¨°ì`.ð¥An­ã}µ˜~ñÊAƒŸèAù}jôšÔíá(—>,îúž³éÜÞ‹{§7Fÿ 9_húƒö¸P<´3uplEèíð_¨í·ûW„ÄØPÞ…#r~Öýn¼[@¦Ç=dMü&NÈWQ ßg:ÿf8]ýÑ/Gý’mƒÆ]½öš±w/VJ šf¾sïÍ«öµ¢ü×ð&øb1§·?[Þm+¬´¢á$jitl.¶Ú·Y¨\ Ï w¾»/ÕÖn5¨¥âƉc·¡Šo~x¬o{ü,٣¦§óÕLZMzè¸NŽ–1Dú n°ð+\ß©f•Þq[it; !èW;òCØß¶¿Íùµ­|qk¦\R×P ÙòÍe³Ti>,ímƶä•Ñéî÷·¶‹áÅQ£=Ö7 RÙ¿êÝ9_vží9ü丰ßêkkàãÆ–ãÕ?¸Éun[l~•™vÒ zÚaWó°¶«¶û ï©õÎn‰ë^¿.ÞyÌ]Á—Wo«^Ôjåìݰi=2 oË—ö^yÅÞÜ&U{7Î 5|®S¨ß–VïYÖyn?Š3ä†ýŽýô1‘-KÛ…5ŠW«æÎ æüܷͱÿ$må‚)–I޹ôº]³pžŒŒº¼_åÌw¯{^áªckm_‚k×»^¬uƒ>¡>â¨ò2ä(aÄ¥ÊI[¬äɪô’UûEË0úìI³ƒ´ø sföX´#µò|[‰¡±Œ¨çÀ'µÐWãgÃ;ÐC©ÑÝ.I'¾‚’­bFÖÒ©f«£_öC=|ú¡„µt,PZ;¶¦¹œlj½âìXc¶×‡:¨<¾Ê» eD’ôtNV_¡!ÍŇ/å¦ôL\ÕÖwÑF:¸X\õ:ÂÖçÂV~Ï~H…®bD?lúb †8œoáce«ÃÖj:p\_w%ç=ô[íO æªD%­‹…ŠŽmYJóY_­Ý«z-Ü:ê —©KΕO¶¾WdÓû™a§›n,×ê+XšÎ%)OÀ´hwùšX*÷[B£OùÃ×¼ðÍiµÌãÕâqn;û ÕyÄ7µÕ¬z)Eþd íÃáÐùñ ÙXöO‡¶9ÑžNxÜ´KrN? /æ×…ZoðÂÕÁ&/(F0”1M¡:¢úüI6¦|;Ó[sWmÊv\9<Ù‡õʰܮTbÂj¥¿í©I+w8 ¡ »¥f<Ÿ¥´iSÚ5?¡´MvBEßü߸fÆóJà”Æ"A½à\Ú´P™éÖcìbZf7L¿7z+šVU19s²6KZYhG±ˆN¯9¡z|”ù¶Tey²èjI×Ô9&9/ì#΄l?Äç̰[&œÚd{z²8æi¸˜§(½aëäò¸íE’L»Nbs{bó¨šÄf›ÙeBlú»dË[ŒÈÂþ8Ž.K±Z9:ßÞnå4¸ãL¨±a¢sÓè“_•uˆƒÄº´þX2øán…:Ä>¯ÀöŸËÔ8ƼXdF…ªÁHWÓc@7èÑês<¢áyr÷Ÿ›¥#•Û°OrUï dñ°Ã‰QRðC·ÙÆ›,¼ÀÎÃðƒÛ{ ;Û;ËÁ;S­ŽùÃÉÏÒ»gÐè`¿||]t.Cl}‰M?­yV}£*y°^ôå˜+ñbF^ÓÓq.KgQ¦LÍ÷ušÊó¡L®Þ'‹´ÇP“,9\ŸØ¡nD4öQjNÂØî‚7/ù/v¡µ2Fõ#¡zp·ÊŽGÓÊK•ž•aÖS*ƒ˜TK.¬¬¼à¼q‚Vξêglr¿ª 4àŸµðoÉDa4þ)·Åò!Á¢$‘€@ @@»9 à1øëfü´_üŒž’¿†hR¹lÖ™{îE¿ÍnÑó6ujׄnÖˆveÈÿ|Û¨]•Rï`ÁŸJȧŸÏe5i…P“Nv¸ß½ #P±Èr« HfM²–•Ù°m@ö@FÒ,ÁþÈ™šMðe9_49ô·€ k GVúŒãõù/òßp‡T&g¹%ñZSäÃÿ£ë<·UU,üý%Š¢ArAQÅ„bÎ9¾#k¯Þçžqûχ²‹¡Â¬É¬™tû=.­R³8¬oj_F-‘öZcàÏhMf²ÅñG‡þt@WO [Ðnª˜èБôÜS}XWýÊ6St{€žsÀ4Û7À´Ð|Œ¥ ˜çfh3’qÀ„Œ ˜ñø˜n…ŒÑãØp“3—º)kâò­¡QÝOèMkŸôñÇø/´ [¶”^bEœºµ_ º;äs=J€MÝeÀ¢@ù#ýªr°í° Øå³ØŽÚlçÖ¾(À- dŒEp'wx¤ñ|Þâ_(û€gìàÙH<Ç|ZÉ3Éô¤PÎÔÕÄ(Å3(×? ¹b¾—§W…<™0µ4jzRœD‡V1 °#Í\nPû£«6o?&ß ï¾Üèü¸jùM*B¡¶Bíx²–"Uä( Êý9kÛuˆ¾9âØJŒÊâÄ’€)AŒÞÄÚ#BqZ~–7ìw養'|6:ÏòL܃ zÒ‚œ5dƒ¤êÿ)Ó_Ïq¢õÒ™ð×nü ^TfÉaþ¥ùîŠ' Å72êXH—­dºÛ2ÃÍ—»Çû¸[ÈüþþϘ^éžð£&Ši‚9ókïßnþ›Ñúÿȧæ~ŒçàùÔ‰(Fu£|àÍã)Í?ÐãS㱇ºé~ç~ãoïë»~*]“øÛ‰[6Ñwâ3ú#Ÿþˆ»‰|š ‘#¿Åÿ øÓûë>N¸ìµ7 E˜²Oe-?Ôåºü€¬{í®oï;ÜL{·9‰7¤]]WŒ<»¢¹½4^þõB _ðÙ…áLM™öé\™Ì’‚ý$"$ ï7A6q©B½æšXö¯´k~§‰|š¸z²Uÿ]èN\<Ô¾»ÃÜ冸¹×ÕºéKãäÎ ÅέCÎÞ˜)ó=iÇ[E/ù¥^= P«±ÿ8­ö^=ކ»ˆ>-wpÀ=¶ÈðÁlЈ«&jî_¬¨õÉ\”ZNÔÔßÒaé_í4yå|ûOÙ¡ïúÊnHÓ¨\¶Œáœ‚Ý=ù)ctäçÂô ­ÙÕ^Ýw;ýœ=nçlþ¶±^—Çz«\>kbòȬ\ø_žk)bÉl ì" heþtkÖ\º,¾'mòöy A~j¤öð¤È$ø1Ï"³#õ[Àâ[ÚçÒ¸ìÁ‰ ­ôAZ2ù=ä0ÔvNSÂz+=Õ•›>|ÍIKfÖüvàÌÅ7ûxƒîL½Óˆ'Sý¹ZDsù°‹ñí2±3Ÿ×³Ù1±–‰ÐÅitváæÈ/=v#æÚ€†¯§pë62 ­3Þ>Ÿnú)¥nß×1<œÚïîl¯®Ÿ‹õVÌÏ–>¼^/øõâ4û´¯äo2Ñ\œä'+uDLÐhBìLµ™R›™>ò‰emÄNßÓaPzøCþZ<=ëå]_Þ½•7pž“L0¯åýÙøË:þ7Ä÷‡}„éàyqÌλ±næ’™Íìä·‰GÑœ¿µ&èx„‡êv2:Û‡ÕðÖ<‡üéyH·Û§ ÷t¾^¤fñe©`n”øY°JwU³Í.ºñ›‡ˆÿàÞ¦>uE÷íswð}ҫͼtÙ»2¾¨•È q’À}Fä8A|›»È‡ÌÏAñ3‡m¼z³2Û¨Ey]Æ[mÁÎVEòGQﺜ݇J»Ç]™™•¿*G×Fj«ÎÖ®ï;ÄÝ»ø®Øyú¥ÜjûÖ&×fÙLÑ zÖ*µ²;Xöê.`.AKëa³ïRô·¦ñqéfv­67 Bfòoć¹çðRîøØ€÷ºõd6Ó¸ ã‡mÓ-Åe“€ç íkã6ÙËRݵwªÒ).–_ºu½vÇX¼ûñ1óDú½v‡Qî覲¹kk¼ ß­LO7§×Ö×dÑÌñý’³xžd§ äjú¦ì7ðînVo¾J×:9›ޮšVW„ú÷ºõþ…Ë~ôÊíLÍ{Í÷»/hÛ@Ÿ¬ØàQêìÏðWUïŸñ¯ksÝqßæ\ôg«•‰ï¡f5÷œe‡š8…³h4ªê®A Ö¹Þò»¯:ÅÎÓv»w(X7a¬îªZ®=ÙY³&õSCóSíÌ0_þ~›jÄcVÕ€ƒ^ž;A˜Ý¿8 Ù²ºL÷¨î¾¦ÃT ivwÎⳡEz²âf]õqû¸r›³ûs¬sšk8éb¹î’‚mŸGö×¥j³Û·nÛyd Åù¢ö|=÷5Yù\j"Þ¦æhY3]Ucx“+ ˆ°*fÔíqßlcا%¬ïØaEofJw³»z±ŸîüAóåÒÚ73e¡¬[×ðÚ÷&= >7‡eïC4k2;öÝ}7¶'ÔÝ€ËÚþ±IY½ÔPª ‰E¥wÇ,ƒWÛLoJÃj…`£jöi¯+5Ù9T ¼ëõëëU7p"êMWãtRŽÏ­7A|í 7æZg4®-êjï¶è¨½íØÿ'¢^{[ï¤àÙl_½ G»Ü¨Ûêɶ§j'±Yx†xƒì-Òö-~Öý°¸×^ë}ÚÇ £™)ál5WæÔJm_«U ­^˨¦]#½…½f:¹Ç¶åSK¾”éóѺÚ0§ñéWIíWYMy¯ü–2ªÃ‘¢r›—<,¿r·¬+_Öérû ¢—`um· hk£×<Üý ðªµª§ß :fóLªÌõÜpʹZù”? ³²Æ¦7!õýr#èóÖ˧;ùͶ+3ÑÓn¹ZO랆õÉL—jÿv9(Ü•0§dÈêe}{Td¸)8Rõ†â«7qÅUEÑz漸/Z‡\ûæ)o)9*4)·_koÏÖ[}ïóœšÎ6â9;¨bhM=’©ê<Ó¼W–çÌÉhL3O½uBÓeâ1íæ4X?võ9<ÕT9uu”϶ÐQBG)ÐQ™ÊѰ³•³©ñEšOÞ©D¹Í’˜h×ꂈî¶à8ò@(Ÿ'þp†9Þõ—-Þµ7Þh3—?„{o )( ®Î±{ÌS;ÍjÃ]À¬%[÷‚™MeRtE^õƒ³ü&Y”}etÕ‚Æ ¨ƒÁQA "•p#‰JšorôìÛrÖ\zÒ"íIæ&7‘ò n%ÚÏÚIØÉ—ÐÔiŽ/Í;&w©e{» öì݉hö^i|›µxÛ÷âÞjÛMÀ±Í®;›o`h$?…C§ƒ}º­ZF¬ÔÙõ!îå;Ó|ÅÞo€î‹vOU÷êàÉ•1PŸJºîfdãßy‹ê•jyT×þûl”X窎ˆ=ºa7ÛŒ9Íøãº°çiœ»s—}?ÇqÔ•f{Î`EnÝe†yË(ŠA2ŠÊÔ…Ñ]FA¥3´ª.3TÕÖÔÞRƒ©Ùú"¹úÎ4q$gX¯ý€®.†¼QÚ]éŸTùÉì•ô꼑³ä. ˆu_Ë‹8ëSBs:²rÓùEÔyï,y<í7ú\çÞžp\o¹fûHêÊŠ+õÛå`F؈bR­T™.Ÿkm:ÓÉ®K3#J3âi•fY´Uš¾à&ˆ)"ͨø‰RýZo¼i§P§Ý8A›²•¢\ºRŸ”‘ò5]û¨qú(OWŸT›Fß™BoGg¡^ü©`ž>qîÚ6X®«Tއ¶&Û7Î+‘H‡yŸ¤µ[K&u›œh]¸~èÌ[%JUu¢PËi¡EY•Å"õïP ¡ãùuwS…Ë9®ó·Lh;„zø¨¾vgEÁ«w³]-±n-˜C´~Ž~Ë•5r7•h+´mÅ· mÏu=óÆ>S½+5ÖyæS3z±"£ͯ3…”À¦õMäÒpãÖ/͋贄xÒŽZÑý'…vŸy²ñRE’žœ¢ U¦EjZË©¾V)R­À)¶fƒ_ôýFøè¹P·-ä-‹Îº¶Tп T-1OéL>“SU&÷–Ð t(ÕÝrÝcvÉJëËŠQŸàDG&ö¤|9ßV2¹)]B‰Zͱ e›rƒÂòn‡têƒYä>ë¢;`nÅ’~ÛŸÀ!,?š “q{Y˜íÛ»Bµ5¹êúɯ‘Ë[c5nâËmÙf–Ò8äêáV‚\ë2œå¨nö’m?›ßK Ë ó|Sæ@Ýܽïyø–)[Y†«üWj!Z_œ£ŽjÓÂÕ6Ü·+iòºNÊæ­•Jî‡UŒÃ­T;ä$yïlð'”Y Q¾õíCçW-tœsƒç"{ÉAÛ¬¿$ÎYÖÒßðdáàv ààNð°Ð³ŒÌK\¶2ƒOa”‘Co—åB:=ÎL¹´6×h ž‹tZUÉ´æãV: I;ýùˆßK ý9Ó¶7ˆÇ$'Ü,À3[ç[V3™ %6‡R.yL›®ÒÑl­Ó'üÙ®lÑhpZæí}u–ó˜Ïî £(£LVëô^íÓåùíšÎÔ0Í ò÷¤A¹†]L-‰¹˜ªalh© ê×Ùàwx/EÄXTÞrÇ7Wy€×º:À• pzf%hááfgM8Я´@Û.‹[G• +’â»q_ø[ÙèS¢ˆgð$„æý‚Nò!_¯ï79:Ô—°”}Î2Pa;‡7Ü€ÆCÞ¢o1‹€˜ƒ4 c%âH™1F@œÈEŒÝ ç$ç­ˆ 2DD €èÑvŒaˆf§› qË5¶5„Üõöx䨰ª"5-Ь&£h kk0q_û,c½ù†R¹doÔþËéî>-ù¯í:eæKP\‡[P¼íÇ, üE‚oW= ˜mu;ºŒÊ2Uu¤Œ•¹¡šáèB™!‹]Ã,`z˜É;bdƒgí™×s÷tŽ\^Aó…••΀*ê@ £wŒsPM¢¨ž·½ŸèÐûœ¨‡çꙞ€<8ƒRV@b|@½g]@}zñ>à‘€ºÞF€Úö¯1–ÏÄ…lU²ÒÁèÓPYìTWàÖX•AŠ™d><‹MSöW¹Í7µE!Û‡ðlfân25SS YW¬Ä")Pò¥ (…: J++ Jç è|Št‰-×5@›»øz ]@ÏK@Ÿª@ŸaП0 øê¼}3y@ß»#@?–ñ¾C¡˜ º×¡ƒ6éz‰U»l4”§Tªøk«‰):ûl¥KÃñŠ©]ù‚šþHÐOšJßïa½É¦Ñáþ¨¿›˜[Þ,dÔË„`}"ìy¹Ð!À2 àè]pL0œÀ€ãZ:àxo 8ãN®âÇo+[ÛòÐwnMÁÜñ’FýÆ?ƒ.ñiŒ›…í{fæÄü§œ™!Ž᯻ð§$›µøG}þj½ìÉ©þWÿ†Mô>Ι•kt_?MñFÜ>>€ÐöP „¬„Õ§ „ËþÄÔ†"zlÛâ·ü5~+TBm†3oñ–ÊžXSÌ­ãú‰°Ú1ßGx6çfæe¥\QKLä?.èo±’ÂüCxþ¯¿‹Éý¾ÆnÄié$lRÇ tE+ % Œ.n@fÇI- sÈ|÷dÁB,Ò¥üøW>MDÓÉÛ¿!“öoL¯·q%ò鯫7Yç,¯% ?Ö^¿cÕùYŸm£Ó§4gV0/êºq¿Gx˜¾ë˜¼ÃîÆ¾Íéæ4Éhøq›Øxƒì¶ú¾{?­Ä]ýÑ¡ ÕDÿ”÷'[8‰éM ÈÊò7û6—ú E ñdq¥»¾ùÛ¼(Ê·ê±¢_Wtż¢ÝÚw±NûB z½óAÞ}›µŸP„³.ÜOÌ|ƒ‚[;ò[xpx:HøW‚NÄÝ$_`ÁŸíW×M §ÙÔ﫤ø‰[Z2ŸÒ¤å=Bxò÷¼ëëÑ솴º›Ë–mϱz=S#ëub"#u¼NöÈ/œÂaPpˆý§áÒ{õà »¨¨;¸™›•4p6h¸ ÖÄ ^¬\䯨uCü >`öÉj¥É6±Ì&jêOÈÀSÎCÿÖP¥q)×—Gôj{ä…èö„35eõÃé¸{¨©øÛ9Cö6Ö+5\;à:^Ê×owpEÍ®«¥<ö‹›ý8/øÝû1Ppjöñ d¦Þùâ4â-k‘™G“U5ÿžØH˜ +ïã­]ÃC—LåG>=Éþ«ˆÉAŸ_—Êñ@Ëã^Ýè—mõ‚>×÷%µr¡¸¯Æ,.Åù³±ffw!ΠÎXê±U?3BÂqcb§Çîx[™vÇÄr1 ÖýëLoG>‰}+›sªCCþÖÃϦ¤÷'ì‡Zãüß\²½¨R½ÿ-åm^xÏTo³Ø«k··:(Á¯öþL=uûS8hG2ì‡Q;µ¼Œ‰ùèRëŒ|<ÌÊÏùsH lXêz!×ŕ܇F[½©»OÑv`æøa€,ÛË®n.m“€;Äé¤ú.ëõ|ê~_&øºT].½ú‹¿¥<1Ëölƒug RyÑŽ4AÇ@ ÝÜ¢~¥¡Žƒ½!ÿÐJå|—ÂñöÙ§é¶ÏÖdïÖë™ÿ^»î@KZŸ©¶m…UiA«ƒÞŒêz'†ü tzN—ŽwÞàˆ=šíÖ·²ïä47ò• 2xºV¡¯>¬‡H©»ªÀbgk¡†pPÛ§Ž”Ûöi>ðn]iäñO)r²´peP_¶N--Ó}4£j˜jÈ9ïÌëpÉ1ñd´ÖXµúõz~ôëWÛ׋p“²Ç|Õv‡BÃvšó׺꽞Nç*\öÓëh%*ÁbÃݵe½;ÛEø.>mæ<ÌyBzý¸2yZšú*7£]¶ÖÌŠ¥–³È]'oƒø"¦ ,–õq8Ö‹‹ÛÝ>ZÅ´]º™¸ÕBÁârH­Ö³¬À|ÝS;3 fŠ›1võêø<ýŠ÷É6Á©«`ŸÕÙ%6'7j ÔÓEî6ö ¼}=j)O|7÷°gw¨±qû*¤š9HDB±B7pº"Ö›O·Opϲ½y<½ÆC=«›J'òk=;­õáÒÚ|›òÉT.îÛLuâ³V~æ™ÊL6ôJ5óeÃZ–Ð&ôͨPÑ㱪ùj®š`I‹w"F‚åö¢&¶ƒ)ômZQÿšH/qPº¹mlte_ßËâÕ>Õ­”uÐÚc5¢j»ÍÑôQ6Õj®VœÉfU÷•Nev/*Õigj¬rãaÁMß²tZ'zu¢|¨¼¾—@™ZÉMíl?çóxæÕÛ|¦«¹¬ª<©üEÓ­`:H?"Û¿R¼›¾†›:ïz©1_ͦ Ÿ(¼b2¦®Ý²åÂrÉàš¬Õ;=~«Á-‡*/£.*Ãì½®ËËcÖÏÊÚCRåt¿Z‘Ó-ÕHð•T¿Ûåý¹¼½‡7î|ÓòÞöŒs6%IôÝÚë¢Íqe¹®NQfZÍ Ò¶’¯éû&‰4á)ÍQöhˆÓ.BÕ:ºTUïsµ®öÜöWUWÅÒ¤¯ ;›HQôÂNÏ•‡œÉ÷sÒôZà¤߬‰‹W~$ÖF$Ô›$lÒˆñƒõÒÅ‹ åÒ½%Ì]*—5ÝÌ[gT&«½ç—ï£$f¦•9Tj‘¾4êî-Òwëçª|ÜßöÚÀ«³iµ÷0QUì%e„D‚¢¬š’ê –\~ M9Ó—ºÒLj„Rn5[‹Ëzæ&ö*,4¤-ñpòkQl•Ç=ž‚£7OeC‘;-ÎwnuîäÍËLâ7ïÏéQ¿-<Ã!æÊ’n¸ŠôkqçLèïËLù¼ŒD»áõgЙðîz¸â.ÜúÈuà$H“½›xšíå•+\:%æÕ™ Ì»”0O[ôØd=ºœw†¥i=Z–²èF-\¡ à#’ëI»IâYnMbïJ‘ÄNG•¬“/¬ç.*¹ïêèŠ߇ý:þýà7íÓ^µ†”\¬¬õLºÜÉ^¯ñOLìälS›‰Xw:âf¹Ïu8rÈÞgå9+RÍ3ô{WFÑN€Ie29º\-àt†R˜ÒôÜ”K\)åÊ Qnk3¬Gªöœ¬¯æçâÇàbsrÄ©DÔ ïòXÞ$o;V‰4U‰ãm¨$jŸ×ÖÞƒ¶S¼õ•ZKãFSZ¦´^msUÒççV\J³Äv/ØG&×cÞä)`RZ*¢Ë»Âª4#éc©ò®?K¹Ñ(MYÐ,O¶’Ü4 <Ù •2‰Ÿ<»ØR~‘Jg'D»b&wIã][¦±Çn[Ãú­î÷™B¬ïîQ¬_«(ØcX‹á•eœ[Täþb:\{ãHvë—WU6sŦ{á(¥*îEα‡­ÐÜfgì£,å}íÑ™m»C-‡­!…úS²Ñ]nH‚|§‰Š‡,ù.¶:\¤jmŒ8f4ÁtO~ U¼û*·°§Ò`lÐa¼Ñ0û"QȲ+…cÆ}¯ç \QˆÇc9 U¤ìQzáæjàûL¡-N±²QÆX™ÛµRJùÙ¾&’9ßÒsfÔ‡4Œ.{ZãýâAG»„_BF ¤9”õ-.àý+öÜo>Ø õ„1¹Dà‡†ã‘†¦3ûo—£Íñn!›¯ÏóóõëžÏ5YÓ‚ÑQÁ˜O±í„¬Â} )æ‘ÕFì\§Y ‰ÏÜhéuT}Ÿ$ #@½ûS¸ãxó2§õUîÛå ìl·W Éb­;Àïñ;ß+äÖCêÇb/·WJ£\+e|Mä9râï²'}~Ͷ‹d㋯žMÁ]z¥ÀÜ ­gA«Ÿé‹™]F|2éwÈñiå¾n¦•'|Oˆ~Œ˜þ® =G¶ôzÔ*©}ånmPÎ乃¦DâÁߨçKÛÑF¸ w•Ô„à}€)þ3(äFf!² •eê ægÇ~f@]ÂŒtÉ.ÒŸ»á?Ò!·N§Õgƒ"™å _Ÿ ?í” ë3°2O€NT n´WZ´Ï¢ÀÚGC¬âÜî¥Ú³x,¶+µ56z.gdOsGh>„ï5¹—QølM?‹؈^àËNcš<\ŽŸÁàù#ø"Ÿ.Ä0Ùç Õ ÐÔ*Æ,Ì‘<€?‰À–ðS¡ÿ·Ü¬òtÑ5N8UՆǸGWß.“PíG›¡«ÞíU<×Óg@q½i^6«Üñ,ÍáÞk5ɤ6îBäâÓE0ŽQZ€bÆÞ">8"w{‚¢Îf@±1 @1GÆhÛ ¾°¿ÏÄÛñû•,(X ÝO½ë mÑÅrzÿl˜À´,¯«_÷’¥TëQ`¼ÁX˜%ÄàÃö(ÔŽµs®ÝÚïaiªoÒQ]':ô<Œ‹uq€,Í×€”·@šŸ ½ïz°ÃÆÇ È7„*§3€O: $ÅTõ>”éÞUcq@)Ÿ* Ôk¼@á/PEh•ÄYþ” ê Ã¾Ú¨-¥£Âî’¦vï9JH-¬X.w½',_ð{ºÒ<Ýâ{ˆ:þÑ¡îýÇxü£úB(a%MG±Ý'@)|° ´&e@ƒ¡hºĈ¿ͨŸß°‰SÄ ÞÐú"haŽÊ\ô‘úÝ« ”Bvø>v7h˽ŠEƒ¾Ïâ¢æ³ˆç®¹«ðN#åvúOal&ý£>ÿCó¤âNñDùl–Âêd§ج¢+ȹärp8º”Òùa%>¾´AJò“}ÑMû#÷&þÞ$g"~“œ‰¿Âob­ímÀãË à»Ü©7Ú£€ÀÊT„ï h ½Ò­b ®ž¸»…Á;w¥Î‚WœnXÚ¯‚.¡Á½f¡8šÕ²Jý\N/}[ýÃ\ÐIq­÷¯µ7I—H߿鿂or˜¿Á‰¿·'?€”>fT@êê- EôH»B¼ïU€ 3 g‘tŒ‡ äÜkôùI6kòöOÈ@"©þC>Mâo×çS+@1*…ãRŒ»ø|–±òo`oÐzJ³À|ªQÿ¡®æãdß–w}nsŠxܪg7wC:ˆxµIrÒÔ¶“o!u‹ŒvîõÖ²ô_q7ÉH”ÓÄŒš¸dÿº“ðrú#K õãf—àÕö_kïn, ·êaIÜ÷D_­Ë‰¿l¹«ri­wz±'$ª¾'èd¥Î¾zÚxkôé1±èó¡[èË¿nÙ™9¼¹ËÆ0¾ÏÚƒ÷ô?ƒÜ¬ÊåC÷Þ=NáÁÜÜÕ³Ÿ`ds>%¶ØŸW6:[×ÞýŸýÑ¢×¥q¡7û9¬JÆšK;¢:…»‘9±SÇõB †# ¦Ã€ ÖƒãúŸ ¸ö¡¡óè)çÓƒ't`Â\€ÌÇX×ÎO©Î¶¾æI•eÿàb¶O]´Nû܉¦mæ Ÿ½@òžê×l±#þß}?EÜ–”íNßÇÕÕWáæ|:>;SÞ'r ]ºßi¢>Ôo =8l—3þýºvnâvtÔõÎdèSÇɤÿhó6sÝl¼€_î=þy½ºùútå’n…:UhAsnÆß^kÂëGÙ7ÊC9ì ›^|;P ôfÔêÛÀqâWAó/n&.`èóùKÕÆ;ä ‚ûê½û Lˆzu¶æ ø‡únŸ[/Ì»ù¯’ûì½WúdË­PË›-hšXFšFs›ð²ÔqL´Ôw­æÚ'ë¢ÎÞ»=õ^ñ‰š¯R2‡*Å›`Ë+Õ±S­TÓ¯†]™G^%—šõŒÅ655 Ez¯¯·Ž+´ÜŒD±L;G;åæ;öý¯r«^Ù3÷/lˆ®µKÄèÞÜi í[pˆëÌÐy4׿În‡£©ÕáÕyáũðÌ|¡™¢ás\…3ïÊŒ0àJεQcY ¾WšQG¼¾)oŸŒòÞ…ëeòB´µSGjô£»T»ÕëUåójVé×'Œü~Ò–<f²jåó2„šÌ?iôâ•Þ®’`㮳)|‡Q®61³ g™½Y÷<¾5?')ªF|دê®àW3kyXÉ=´©"öVoøƒkyÞeªr„µ3Pñó”zcKœ¤MUyVœª2È…ŽüiŸ9d‰ïˆ@†zÖQ2rH‚W%šØ²""{o,¬ã¬`+Yú«a‘V^žžMm>—W¶Ï~Ftâ4¶;úúšˆ»•ÿ™öXëéÛé½­Ëõ7ɢ좗Pó…×B½-±ƒ*0Â]yÞê)E6:9d§¸¦_¢Ý0]Ê‚-.²®/ækQ(¬Qd'`AãÃ;¯3ÁGÕ2wÔÈ!çáå WÚï¾½N®4[”8/s¤9÷±.Euóõg³æ wÕRc]2µwÉ»TsLk¥ï.ѸìIÙxp‡ö<õ.Twz$³yZ+©4Ñ«~ib ߥI¥\úQ¤„Ü™uNÃK¥¹œ/ÖF/[ôtÔnÜm¡Œîù‘ ÓÍ®¸ìŸšBÃnÕùV³ÚäNïnÀ1Ö$d»ÛÍ‚å{™Ó箌´Tý±ßž ¢}ŒVo'¦ o¹¤¿i“š«52¡õ˜\5Ù‰ž†™âÖ/qEâ~h‰gî^$›bÑOäÏMq g}ï#‹ZƒÛ¸)ðë‡Nth9ÁH\ñbG ì¾ÃEÞfoZgžã3rVПEkJkôhCC×ý¹ußÏ’aPéR6«(³f‘T¾0ÈÕõ]!1oamX,*÷¯rK¸Q"JÆÁý¥ÛÀY{tÆýq Ñ-âçK¿H”ò£boÅ«Ýø³9Õ¾ÍX¬jr‹wù¼è”Ïy0Otha;纜/ê V`›‘õCÖÜÏ7 ¬]>ÝRVGCjK Ê<´äºÔ½’öeö&±ñ'[Üé^lÂ:KÍ–Jx¥k¿tÉ>Î>½5v&¦:úŠV¬:”(}ÅŸÅ„™þ}"?ÙEù-³rR¬Á*V0É{iÁFßËÑÝœ‰öd<äÝu¦Ã mÉ¡µù¼V2.N•ªáC®[ƒ6‰}æýâ.¼EE‡VÄqO ¯¥Þ Z ’u£.ŸUï„ {d ëí[5ôMm:¨Ò!hŠ[¼ åM2òÝÌOoЮa>…BƒñBYCðÂØGñŽ?§|EH:sëwÉFçÖ"˜Ð¨cröU+D“NYçñröØ|WáŽuµaKµbpA¦×T½eF$wÇôëœ}¥‡~9—VØq)•¼4¨,Ù^jÞæ©\ÆúNÅ-Å0Õ‹Qéë5;R•Ü¥šVÚhÛdÍDÒSîú׬ó‡H«=w}¥ Dá#Ê:Z]âÜߺØ`*4 ÓÂÑBÖn­š=>R:Ì6ßÉâô;:Õ¡‰7q Ìuä¦fÝMªòï1XsK`)Ê  ©Þ Pá‰McNŒí'(<%ޤ ';~»XŒ|Â4aKÃÙW ®£¸AûTFp’Ê"P£ù•.ÇEÉd3aÑHö²C¯0•šH}>¶³mœ3ažÊTÓæT…àá¬ЃúE£cÒè+5Ž!Ƈ̎/‰r›ËA1¼"À´#p–ç+À)€¥ö@oã@i ûˆèl.$¨e᪡ûcI…Þ“œ„Ñ‹ ÿ@³é’,Oc¼7—¾Z'ši†¤aäÝlû²hf’ROkZÁN™Çe `›Q=ÆÉØ-Ó8$ŽŽvæg.{€kÂ3Æ0 ðržŽ׉NŒÓàÆ(þƒX×XÒ†/Ey€:ÀS]`×VµŠQ]{™ã’’mÏòBißz3cÏ9Q¸Ý[ãÉ~Šê>D4èeYëd†øÅ‡¦¡çMî+Ÿâß ‹íÄAœóú€ ×@H`ˆ–°Dß¿bvOâ a\È/½ˆãiˆ“wĹÿáÂÖ~ÝÇ*ˆ^¹ù×}lx3ÈÐóòíCK¸Ðʳo[ý”PX»·ÊpFóÇ i"Ì4ˇIF¹:!„äÓƒøŒ{ ˜~@±\œ€bGžþÁz°ÅËùÈñ$m@Öæ Ûhâ„$Gý2 Wt;Æzȱñä¤D2@\@öR{@¶RE@ºÆæaHyµÖ»UÔTr!Çw7:JÏ›v¦è_Ì'–Æd_~ïá'fm2Ð’ø·HÐ ä?½ÇqïòGý &O@íà (¥u”°>Jõœ J㎠J“l?F¸û61%â?ôS=P€$ê¸4L  ÔÖç dç>ÉBwš=k¢ëwDV{¶)Š´‚žz Óy§øúd…òÈd2©{ ªç?%‰fÏ?Âsâ9þ±·r€FFùÄAœ¨¿IòD¢þD0ðPŒLÀ¶˜<1ºæa€y’UÀf±)`sX°ª6¯¬s/ æºåõð\çÞÍi¹´Ëïz„,¬â¦¨ß®}”Îet÷šMúS¬$þâ¯í8±O¦Âþ‘3‘H¿}µI¾Cõ7k'~h^WŽ€R0ࣅø]àþÑŠ÷=[$²=¹àä&4š"!mfþÉ×IŽ/Xî-)¹[Çä2SôH§vW…ŒÏ Nþ)Ó5‰ÖÿSŽDsþë3Nb…“o"ü&é_§ï?L¾_ÁWÌ®w@lo e0HøÁ?Éè<€Ôìp@êGIÔ±4Å{¼ ¤vÓÿµÅþÍø¿¥¸ä§ô»ÊYÞdßv¿®Þ$«·‰ÿY—M{I?‹ 2B-ºªBã"fûÙvï®ïÜñmN–7¤½:^W,.[Ñ.^ˆwÎí:KÂn$j¢ðþè”_ õWÜý«I–àI5‘O¿Ù eÄè¶~³o+ë§5O¨V¾ÝõMís«ôôuUÒsW´££—ÆC/ž’NŸ©°*œü´¥ž˜iß<ò˾s Ëîþ㼿ÖÞ=Ô¦;8¸âÛêÛ«þd4|}ƉKv þGCýúPÿ›|ú£RKc³ø€ª{‡m[»Uwûж}÷|œoŒÁÉOiÃ#?/M~×K¯v¶Û9s9l¬×ø´vR½Ûê ß˳ÙO/™õ¬°à÷Kj> ÒìÓáìÔ—CÿH?ø"<4 …ÿù“/0xˆÔ¿JùP§Îãº"v×3ÕoÇ yî?µ´‡ÏüN?¢¥õV è55øÅÍ*Ió§ƒi³—6fê˜Óˆõ)uj¾Úçvj3· âÝ‚+éñïŒàT®ÒúDž× WÔÒrÁ£Ù¾Ô4pÊkÂ{¦¿R» ¾ZçwÏ=Ê ñ ñ“å¹<«&"oèfßùÁ žþ¤$²³mM.tˆ]ò]ÂÛgwPönÀôøÇ á¤Ûú„ƒNKK½4¦‘‹¦Éa–Û•c¢çƒƒìGÃ&Ùt}Û¶ñºÃ$ûÐ#lÛ'#›úLR–_®ˆ1ÕáBt ë5q²ÑCþ)¥{ðˆ¸v¶¦ùutùÔ>»ófwt¥×ðÒ •Å»éËøøó}Á1óW²±ª?غˆu‡z¨u⒩؇nÛÔoZç>ç[ÌGÔ­Õ„ôxg*—‡)#"R íÞwõ¸ª†çkUhˆ*‘{ÎV Zçþ…ýX¨.fåxô<¼/E²» Íe´£ eÖŒ:í¾3¯VÆ1Q}Ûä—ö¡Íïmê¦^-_¨~C€j·¡“© )1Ÿ“7e8 ªŸyÄUµ|$U¡õA¯DõUˆk˜%¦o —îR·¹ÓUGŸR¶¼l¸r1Uij‡È-§f'Dš¸¹¢”¹à¬8ëT4É ë‚U½š——|£Þ¹ý³ˆr­ÁÙà(5µæ(ëǸfã·{8Aë‹Ç)Ë|þ—®÷\T•i»t ¢$çœÅœPÌ9ç„zþ™ÏÛÏÛ_÷þ3ÖrªpK¬º5ʽ+‘»%);r|­äA+—‘ãs•ãUIed´ Jx³’~9>dJ&0OùUž{ç9ÏZ¾‘‚cé‡»Ç +gC—8kÍÊ\ÑBbÍ$>JhlF…¡Áй¾ßOwz-º\´ÓûþÔšk:£I%‹PÃ}ŽSÕZ_W¢÷ÅWŒ‘Ü”‡Pg*ÿ}‘Üu•àùE‰sMŸ‹s‰èˆW­?L´Y©ÝsKbµ^ï€bÁ>+í§ngô޲Ù,[·ác·ha!ê™Á~“5ÊçYN?Èû²ÎwO íì=MJš?_ç­•[«ê=·WžÓîMéåÖÅDˆÆPAÇ;u ÙFèRãÕ·I¹¥Æ‚œ2/Ú±Ük$Fޝ¤ŸÅÀŸÌZ$h[æ¤áۅ«õò”·ÍB=rlÒÉštñШ©úýÈI·É‰Kç×)(«ñ<Ïjœ”•6Ü™yV­+ÌS¶c0éÑoû<¥‡°¦íz¦AµSPpóÉ“ùŒj«\T%Š7Å·ÅÑgö"òH gö/á/¿6_|Ëîÿ¤9c^vY¿Üˆ<}Õ®Á¡Û?dΓH¨©B¡¦Øú&|qÆi™ÜÙÐtV½]ÆDî=l|<\?jÒ¡ª”çy¿ø AêCr¾˜,HœXíˆÕ ¾ÅŽ™Á·¯:Wú7;µ„ Þlˆ^Pë‚¶–1‰ÊÅKM¶Ëm…µz¾F_L ßñ™Z%­ˆÔgîñôó§™ÛÌv¤KåWø2Œ18’ÏïëÛ)R:ýA 5ù¶U2ÿìf‰u¾Ÿ#¨u?Àw¥u ¯Ò¯Î¨vìy+¬aöΘð9¿Ñ¶‹ã¨W~ä>n¡ÖGt’8Á¯í‡-®”tüÉ~õü/¢‚?©ñ¾®þªˆ¥>s{®ÖÆ!7iêá*öC¬IyrP˜ÏÛcïXÑfÌ)ò;¨©5RIü©K8ç&F\½Jm¿"ª  ä‘FH”¹L}Fm}ßyÂ~ ÃÖ… o»çAÎþÝÊÌ„Ú:ƒ†Ð,Õ“‘A«Ô4‘t®ïÌ Â>¤ŸŠz{¨ùŠŽ#Îû>ºYÅ|m­ŸOñګ;²çsu‘ÒjEî¢ÜrL?ëe©iÿb$­²¶†W?œŒ^§±‚D˯n± Û](côGÕ!w ´ Ø.ô3s0Zd0owÁ2ódP yé€,öj€,¹K@ºè7‘ؤ.̹%ŸãJšÏ’»G8;E7³²ö×Ú]jý(‡2üìºÞ‚ê|C´‹¬nl}ÊiIlŽÎ㎆†{HAŒÓU…Áíagò…APŒû“0(õZ”Æu©N¹¥›ïDÖ  3Љ2Þ @™³5 Ä2(ɱ%Ï7€¢+0  ‘JaOŽi%?\ÊÝÒTõ•ôþx9§íëlrš•i—æIR¢\œŸ¯³h§TúÁÄô9š’' ¬c Pß™›ÈÞ4 •-YM@Û£A"¯ ³Ùs"khGfÙ:€vƒ6 =qèJZ¿ä-ð@‹$ hÂNé õUEÿDgt)@ViâÜõ+ì§ŸˆôªqaãԢDzB¹a4ÊGµõÚƒ?û¶ ¡2mz±1}Œ“µÆb0h© ®ßL&Ouv€™½€™çQÀô`ú~0¨—Èî˜á”L»ULy|Œ·W’ep.`tÂñËŸõi6÷•ÂSWÒN BmÆ'wÇ_ߓɪË,î±:v™Ô˨ÞÏ–a—þ3A«¬¦ëø€Íô‹€•׿èŠK °%¡Øv~ØõdØËm 8¸Ng3t"pY± 8yZ9¥õœZQÇÚ-À¡¹;`ß /ù:ÛH½ÇîÔ{U1=ürOy^%‚`² fd;#rýYö°ë ‘ÁkÕ‚áM½ *ëLRΚjNȇéjê½èòá0Éñ?<«.ï…ÀW6WÀO‰7àï5 4$'ÒðÀàDæ[ Eð±‘ü[þbe¿™T?qç©ü,ñ0WÌzKÁÔìÅjÀ\Ø-o)R«.°[´#£Lylì?š…ÇôYÑúãqpÝ¡þЯðV.@ä«O úûLê îÑUHðË[¬‰K$qã+ø2$\@ÒWÙ ˜$î5Í™°×Š¢ëUJq-÷Ô¤'óÅ Þ.¬ÈXP~ ºÍ?e¥¥uøÇ?yÇ)óMÃ&R§o6ñðû¿v È@>u²@áA(µ° ”:·Mä”J¡ñëI%È·Àß Ç—€â¶# hG(œ)š’Z1”¹íð‚\3p+!Q“7šò *^Ö8tZ“ËAÿxŽÿõ÷¢fzzþù|SÈú1ñ¿Óþ‹ù†E ‰Dh‹é$°;ÐÞHÒyÅÎy  Ë Ð­=t;¹èÅÛ èežz ´‘Ðû=X‘¸J_ç¶Ézù@£Ÿ½LÀ¸àú†§e¥QÇ)}þßqÂÀ÷ßLáÿJ—øoà›Z{Sæ›f:¼o`Ö;00û†–t‰¸&0ßÈX8B‹ «À’¸°d"y©°ÕÿdSÿ©„þ‡ú¦.Ùtг4¼¡ßL‘ªƒŒ)îþãêE@"Yâ?![õ/°×Zï5&@á•áÊ3wÀšÿ ÀU'w:²7iöíµ™9c—«¿ .ÊÚž¥Â©¦¡·)CMçàú øg´¦™i½?,ýÞfߣK'­ly÷œQøéQ8¾n÷Òõø¼UŸ‹ßsÏëÉ\f®âh‰^BhIžþ†;ëI'é4 ®æqÌ=r‡™—÷K we ζ5dýÞ4Ɇ±¾VÖ…4!ÍA˜n +!e¨ÿ#dàCÿ[¯Š½ ü“|,é-û joí^º0Þ‹°âBZ㘩„‡ÜÅŒöD„÷wôà3Úr“ãdÓDŽ‹uH¬7«Gyw\é‡Ë}i].?4´p16Ÿ™œ0[:Ž=#fÇæ´ŒîSzSaRúœÚxÓLÙÔ Ûóqëñ?6é_Ò@ãùÚœõY÷ptvâq¿¿×íÞœý¦ÙÙr£3´± ¾Òw-zñmæùùLÄÙÒ•1ÆiFìÉ>xnÆÍ¤1:ºÖØÖH9kýa$ƒÞ:ö¿ƒÃ§ïfd¶ͤzÏÇâ]ZSÊ:×â=uËvj’»ÿ7d õò¦Ôã˜ôÿ\²qÙ Pë[šâeuZËödï]‡nñ]ŒBf¹FÂì0ˆÛ³ËŸUÖyG¿þMo– ¿=?3IX¹ Ë9Û-“+©KoßV§Æ1…ðÔt›¡xŒÛ¡ö=¶ƒoEÙiådÉ6¾Ë˰ᒣ~ê’½ž´Ì&ÙràG ’ gº±æÂèZ<’ƒ¸ÙfûcÍá{3ËQ£¥ëØQ7òÝM¾_íìKífxªU;¡x®öÛ¡\·ÝÒ¬¥Ç¥U34vM´Ï±×}4 Å Ô“ŸM¦HuËɵ€-yÕMò¡jYʯªô½Îüë’ý/©~55Eï —[káœC#%¼ýo¸ûDA&¾v¸mùÚ¾6ŒGëJï–þÌþ—7fžjZŸŽØp¡–V÷±ŠU[+n- :…ê¦Ú*UËܰ^Ù7{­JMZõʧÎv\_çeé:`Î%¸Ÿbä ©¢bF0j•`P,l›np…ïþþƒ)é¿©6“Éž¬åi¸øÖ6Ö(Lº)ä ›,Ø´"Å›5ÆönTGÝYØT—Õ2ÓØUöõþµÂ]¦qùÔ>A¥k´ÁJ¡q¥‹á•/™ë¯ïÄÓX>š-|Wh®0.*å´³šyŸ+õóèi½ò¹ùĽпÊú]Í•y#Gö÷ý Yo?nr©$/ü¦Ù2k“Úf+÷üÃ)Óî êÏjÕ€‹™iu³þ†•ïVËMYm””˜ ‹‘EÁÀƒGH˸`ì ÐÆ¾ägåà™GÁÇ_Ö[°O\êXnÓîѹ²²½}´Õ¼šñvÜÓˆ,ºM'øµlœël6sÂa®,#oßŧãK÷4vnÓ6ÏÎubÞÐË¿iÃÙÇbJf b'Øñ1m›Õ Ö¸Ñj[®t«=ÌY—dLß&& {3ë¿ÓÓÄòwúbÊæn´NºÍ‘åß*ÇÆn^´2ƒn~áΫ>ÕFò¹Êtêz‡e.ë$'çñç»’…p#65,DÙÜgya…éÖ¶/ÇŸÛ.9›^kârÀ‚ç"jÎëUÎÄ.}ÍXµ?yƒ‚³m½’ŸÌu–Úas`´zeSÕ}ºÓ_ˆÿ•QWìŽHoÐz¡.¥î³:+ ¶úÛ7¹ê([vÛƒ~Îéz„•}Õ—Zö%,Íìósrí´ÉÛYÿT±&çoÛòÚtßœ?è±™Ÿ9+÷K{cu¯UÅúŽ:Á:A´v4tE† OmS÷ßMZ¹×Ì™Òå·7ùÕÎRr_õkrßËí™>ä¾Ö¿Ë¯Îâ1pÚ£}¸Z£†§`\¢'>ý|·ÝÐ@JÙæx¶³Þ˜Ötï*VއË{«†¹y;ÅÝS;o”P¿¢ïšµ–^•½¤¥³ŸhÇI¼ÒDä»W/Kúª¶›…¯r¿51Eׯœ£„-[A¡"¶»¡qòQœž.˜ˆÊ«‚ˆ:§µ˜[·T~tpzun½Â[S›.‡eÊáÀ<0ý:öšëy+û–.%&×\Î"ÓØ1Ù(Ý‚AksI¯ö·†v"n®&–ŸõªñuUéómåaÙ}%"š3Eߌ”C0³£l=¿/il‘ä|}Fœ•Ǻˆ¾ˆ…ž@\_{¾¬UažŽ=—g°pÉÓïÇ…/›Ð5•nÍ;Jõå÷JÆßû[{];R¡/Ö*pô-‚ùe—«{å¡còù¦5ï·‹FÅX:Ú¹Ëèê­±’U5ÌrŠÑËÐòàCI2pØßó›äÆ,g%¸–/ˆþ»^±a¯%¬Š‡¾P¤ÞSÜ3¾Â«gžy7ß\=;ÇØóô-²-ß÷˜Ûjßf4Z_ѽÚúM›B_§Mñ0¦{Íò™~.k’¬¦Ýc,¾Êìwa¾m½ÖÂf3²Ð0‹c'ÐëãÞbXWzaK’‡u–“&Å5%λ NLÚаZ~,¢2¿½Ë%¾Òõ<«×»\}ÙqB°ýŠ`/äûÀÊUòÁÜõ Âhƒ9O÷3p–6§a3¹å@ *SlÇä”Ωä”é’J'*;±ÏÔðæž[YàÊwˆŒók¨ºq;_~`#ÕLݨ<¹‚ÖÎ4 0)‚–³ó¼$!Ù;+â¹.%PÍÍWnm‰;z]k ‹,',.y¶-~*¬|£Z̽£õ˜®WŸ1:2ßÑýÂùF[$›¡F Ke^[‹ÌÙRDÁæ×†& 9뉯W„¯“¾žGbÑÀN©4ùÊ–úèí•úÌ z÷-üx¯ë -¨Ý\àÈŸñA—r¸) ëêšå«’Cr ÀÙËÑØäŠðë­1ݱc0º[u阙éþáX§­ú§C¾ÔˆrÆÙ¹3™›¯ÞÄ’ÈDáÚ2ðú®àt¿<Áª×ëã:3㺟«>VGlOo8í$Ë*Æé¢z\£È­³Ž±í™´¸«kía\Pú5+Cð\ %Aâw§Ë^YŽdæ§ãÒ•¦­ÇW¤ÆF¬P.ÎÙ´¶|rV*•I_µˆe´èñJ7ñöx¹TyaûýÃjuVAO—^m†Ò•ÔÓ 5 ›ë.*ñ“*a½#Ú4†Ç\*@‘üÝS*ñÊÎ '½”—«ùZÇ€ÉJh¾÷;o„Ò—’nYƒe}š¢íA¹~ˆ“~kÀ«ÌXJºi3 ßr§,^>}ó8ÓâªØ![è`õLŒžsë5ÚÂð*­J0r+Þ%¤C ð³öìÃ=¡ùãа‘Ü,`c[jÀ=ÊÛÁÏl넨­Î©¢äŸx¾teo©ÏÜ"¦•(EæJÜÝdhÂ8"±®ë|ûHlX©rô› hÊÍ^ÑUK.k¿ÇDèùfHh«ãë‰ \Tö®%䎢M¤³´ˆ´—ð‹<žáÞNЇk°P¶ùr ŒÜ 3^ lÀü<„3ˆð-gq=Ïxu€@¬Ke‚ùÜ#M²ÈŽÃæÂdP/J‘¹üÇ C`G(—ê×¼d&z•xjâB ‰½$^éª&41¹wHÑF„_ I…û׆>›À‡Få¨9Ì>ÌLëñÏs›É‰Ê,ÂêàÏ= ðWIxÌÖy®~žÃ¿|Ë¿—ßR§T‚Ù*‹xájz±ý¹¿ÐÏ’ý7/_À.ÏGž‘Rý߬˜È|³xå^&1!V ä~ƒ ¸ÿÂ8ÈYŸù  @ [r"[ #,Ÿˆ_OdÙĘ^b3zb+€˜¬M@Lë-@ÌŒ æL:Nšè[U@ ²@4{ÏTò[í9ïnél‘k~®Ý:T¤ «.åAÌåæ²Vr¾Ö*¹Pu¯f—,zE‰H‰‚FA0þæit~Î{@ú[9‘›È:ï²×,%²o²Ïéî9@âDÚ ‡B6‘gíÙ aH²Ò¯²z¾'K Tr­° ²^ žŒÃþñ4MÓ¨ž’rÍ?dÞzl=ú3e-r±ékø^eôÚÝH4yØNt™<þ¤mY@1° (U5åY@•Çy@…qP«›Èh¨)’N^OMë_@Í.‘IP󠨾xÔ€ÕbÛ€*ÉGJ7PÎvû‚ùµÖtÒ/>X¨}DHù·ØäEÂ-1ýóܧОÅ÷ó¶ÞQK94«Ðd;ÁZ”@]%Є¯ZŒL@['ÐTô Ù‡ô²ÝtüËþ\Èó; ?’È$ùÆ×(&òúv|ú¾Ö½ß¦hˆ^ð ûc=¢©¯¹;|ϺÂc+yºþ „ên³lT(¿Û+à‡ â¡Q7 jŽ ¡à›”S5@O`8ÔLNüEVè9ÀLÛ¥”Cïv ÀBx°JvX§·lŸ;.Iö;©Ù€íBõDÖ+ÀF#°õŽØB8lÿ =¦FE{é£ÀäôMµÁs-nf÷ßéÉ©¨Cû¥V í6ØÓ—B†¤r¹ÿæÐÙc°#$Y×Gk϶gV:€Ë÷z€ë=§€;ªÀ#Íà½8|7À¹¦´|T(¾‡ô_ŸŸßè0€·ËeÀg«;À«ðð6Jä9´ƒÈBÒ0[¶¼œ=Né©õ ®f„hÔ9·`÷Zi€í©ýù¡•¤:¥Ï)ó­¨3ÀOüÅ?N_r¼ùÇîû~•ÞÝ//ÄzNâüîqQiqI.8X¾Ø U –Ú] –;O j+'ÄÜwFL˜‚L£Ê;=…FùpdÆÜ}EúeŽài5ÿ7‡þ•ó‡ SÏqj7þs^ÿÖ4ÚA%RýoÄß¿ÖÆe êY `X%‘h\9ùóHÞ½N= o‡S w'(£eÈ}ùžÈ…Òú‹/.•©øË¾óï;Eµ3–´2~ —ðl$î@]úå9ÿ¶Í_Y©í8¥Ï)îM™sêïM%5Ô¦éÿßtF¹t¹?Ö;®ÍÒû@ë_~¸hƒÚPSÖ†@ ¡Ð:„´*ÞZÍŽVl›Ð,7Tœ.Œ³<ÜM>ˆWâ õÿÃÆSÖ›Öôó<ÿ¡çéÜø_ÿ;b"-áøŒS曚|Y§ýßþÞtâ¶a}LœySØ2À´B˜AuÌVñ ÌvÝæ8šs¥ûÆÜMsÿëK-³©«7ÍoH]²„›HµšÈ¥÷Ÿ)ÙRWïùÇ. 'â%ßp{BlÍ{ÊkŒ÷ŒTêeŸ3zõ|ñDkÛòƒh­÷ÒýÖ»Uã÷ìÚ̇Kˆúßó£h;§¸zꦉ·‡ÜKíüë’–‰!Ÿ2Ôÿ—ì?Sœý¯gÓ ‰ŒZ±5=_P°˜=–lwu߈íý­útŽ×ÆG¹\®Žò8?|:>ë+œƒÇF¡&Ïï—¦ìJ_ØÞrs,؈k#\+ûýÏ׹Є½"èò¦:-0e¨©õÿUêk ?O´ÔBŒÞ¸®À\OzQ½\íJöXïÕŽù}áÞþM²ÝÛJqsò¸êúZ€êkeµWýí.üc°ø¶âéÂy@ëyî gA†xN79샦0ávP~,ž^›Ñµµ@Gʽ‹õX‡ÒÙ( ¾×.} ÿ‡þ›’ë—4úP36šl÷Æs¼if¶óµ²œoWQ²Ï–öðZ@aï;[š%hºqrØdïëä„[)ÌXÜÑü(äiøhÚP¿Ñ?.0h¢ßÿö­JßùV;=îN¢eþ~Œˆ•é–YÄJ*b¦iöAZÛŸKVùô)Hý×%{QFÕyR˜W]èov¶ÔmJ߿Ռ›ø0;º–V…‘²?׆:ÖX÷C¿ïÄ«qÏ“y´ô&ëˆX wÝäÐ:uöåÞµScæ¯ðTŸCñ²CÛ¡rgZ¢´ôé5N§ÞøÎÞ“†‹7ºm–NÛ€¶í^ê‘­-tXÝ´÷ÍQ]O±Ž×!ÒÏÏ ¯§”ÒÉþX¾£¥ã|»߀;û¢„w¸Í…§jM ÅSh·•[3׊´f"U+(7¾ã Þ»µvš×¢º—µe©6­ô`]ÝÔfÇ*}¾¾*5…D˧ÈËâ{é•®#§[ ]/.©ˆgý—AVE†ùbT(æÎ'÷ë߬•EßìÝ<›BÞî&·<‡âá¶nÆ‘¹hŒ³ì¦>Ë!ûº ×Ú2ÐâZ@–àê¦R%*ûF©pׂP>… µ,>«FéÚkgKʧ+>F£bÑ€¿4¸`àï:#“¸¤í оõÊÏê*^Š–¿ ¥®hAÆ_v9åHjŠNvrëC½ê+%¼M+i÷ÔÑ…Ø©–éq£|j?ª^ºvínI‰íAñ1¨Í‹hn‚x2;62»Æ…Y\p‰C&?+мÏÜÈ.kÍŽ·fζÙNÃúžà©åJå«Ý1Ò‚\Å‚žÚ1‘^ü'®:§0:"GÕßc¢f–žo+õ²ØÞÇw5?¯³¾ÜV®ÜxÈÞ>\ª÷\šnÓLßëh“wBçQqTjf£<ÔÉ8=°%zbÛ´²´¾{ggkIo:Wæ¬5þ=ô2}ùAˈŒÀ¨zúfxlêeÇ[è ô|iûùJÑö‹ïP«¥ƒ¶_¶© MçÚw°yÔ¨jfQìgša>¨”¼#×v\¹ëŽfÖ¤ìs¤¦“ŸD{L²ãåJ´mr¥ZãÊÖ²\ö™³ \4} ®šèiˉÝ3/ë›cs©—ã½Îˆ§›V›`@ã=ŸV›‹¦J]RÂm£¯¨Uü(?¹ËoT„}à†Ü×K¹'<¶ò³í’æmƒjŽDûZ¾„ÕI!'aÍÔ¼›Â]{äø²55o!v‡2çÛ:cÎ+-Áô_ÉXYÍ 7=G¯0=_gžé Yíл5´ºwÕ󆪭²:We&Ø)^xU4sÿ•{c˜”M7ФááZ’2¢5'×ËID´)"ú¼."~m•H¸½(Út«ø«Œí±ãô¯ íoàCÃUš#ß}ö¦¹x“’±ÞY}×½Š¿P½²þ:ë"œVŸgDõ‚#šÚºhŽ*·ó¥óÈ—-j5å—¿êÉ}ì6‘>mx-õ,e"ÿïEï=Ä…Eö) øÌÎókÿñÔÚÙsU¹ª–­sU,¸]—\òÔŽY†íZW÷Të8÷ë0Ç]:õìÀ+ä,tF™|KÚ©à1êU¹ãj;êþ&©KšpH¹Û¤Ò•ÛŒüšŽ$ÙB§ºô9%gѨ•)H™;R§]¡%ærù¾°XV¦B!˜lùõö|ãK] ævqGà8ûí±©ßf®èuÍ´Wc„QJ»_ÿ†io†3æJ¬æ¬X8/ZƒŒ”©ˆ'yW@ãñÀ½>¼Zj26I¾lè<»Õ°ÌÒJä¯q9nà´å'}u‘œ&AH­sbnbÉ"ZiXBáØøù¢1 øu©óeép{q56¿fOÖ™mŠwÀ\;Ã(¯^–Žl¬IÅ“p™\Kì ec¥5Èg'T<¯Ìèä¾3oº(iR´¿å¾½Ùj²Ëßž~U]½‰-áíÚ­>.¹É1,A‹ãGD¯K ,ØˆçƒæËù¯À3­qûbsµ°”gOÏj™möF-VÊßL¸AŒZ6tthýž°SoáHRv¨™PuÒíÛsbö?Ä<£ä‰9”‘îÈœ‘ãKvÖÀˆÍ·8xî6¹Ú‹²CéS1‹ô×K9´ò ‹‚lŸ”w ˜ˆ5!HÆ£ß5/Ïs1wB„ãÛ!Áž•ö “ÌÜü«Át°¯Ã¨1 Ÿí\6Õ.õž­§Ô0ì)°Öž¤Gwqb^Ïèv©T𢠦8ùœÅضõp2Þ¥³Ê¹×„Àö쬶…kïÀ½4ViŽˆ=é\*FÅß»jÒûÖä÷3+Hž¼ D,¶0~î3Ü¡^x³ç÷beHL§fcôóltoXæi3©Ô'³üµl¨á.ÎSÙ]%'g±Mz­ÒˆXd¦ÏÝoøsPœ*®U¬²×Êè‘_Ñú¥öBë›™‹Ö“KÆ—)VܧU~Í¿ y¥°r;í[ך§e½¾šýŽ4U+Ü49#°¼˜ïö)’h”;ÆÂ*z¯Ú¸qsTì4ÎHûµˆ2°øaß °>Í÷¡~ü<¿k–(®¡A+"ˆ¶ âCAÒ>&–Hù—¾nŒÕ/ƒžzymš2‘¹€Jøóˆ‘ë†t‘°l—• ÛðãpJšì qÅ×j Ùê•ÎŒû9'}ï!ðµüøÉÌ¢A=¸qf\ÎM‹™Nñæµ½ÍÜF3^¨7êbQyÅ®#åòõ¼Ö»ÀsdŽb/‡£cº QÎàû!–Þ8ÆË–ÿÄx•¢R]ˆ:`øéh8܃<6f-zûs b7m²–™(~/GÑøïÇ`£à—™°1m,<¶ÖéíÖp«-›«ë³TÒ('&ÊSsƒ²m­}!Šò×V?w9» \c›£™îgQß(€I_†¾9ÞXíüî7¨tbDõ ôXÊð–A¤;æw„¸ŽË‰ä³‰Ì‹7È0‘pp½&2Ænål€ÛBàÒópˆg¸(‘é&•ßݳú8ž³ÎSš5)ÓV#-ýƒÌGE¯¡w‘U^ MÛÊ'ggÁ·ì`üµùAeÆ}#ZÝø@#šÊdå=ùÛi"·¤N"#ð‰µ”Üfæ. ¬’H9úyåW€`J@À_È"ymõþ¶oÿø*À¯ýq² ᜊ«Gñ‰Þ ïme0Kó²SÔ9IZÿ_Ðo‘c(8Z’yWQL°*çüê4I_°D?@´2h"TRåÐd±jI€xß,@|ø|"µz"× ¾Î6‘c HPb™aýC` ˆÇ>Äaoâ$$¿f¹ŠSq†¨x0Ë÷ÃXSçIOäⲸB/EæLOI”çÒA# N<ŽÜ¯o î?W(Š0 âç7]!ÿ`t…dmÂ2:Ë€œÃ: Ÿ® (x\‹†‰”¦€Bv@¡Hä% ù f€üº@Þ»Õ³<šŠ=?~\ÀÐÉXíåסì¡qåÏe®e“šŠ]…(™¨€‰¹&ƒD’Aö†Q¬ÔÓe1@ACPÊ–Tð€ %P›š¨ëÌ4€¶­FJnƒQÐÅÌ2‘Ê Ð¥ –HO´«Öí@k_ÐÜ'ù^~¦žãdA¼`QõñN—ó©òŽ]qMžªœü¸ù´“cmb£vuL¢ÓÈV$Š74©H³’¨1–”õ5$@[5Ðþ ùõ°Ã)yÀè¥2`ª‹&`f™°PeXú|,c oYÀ"¾ ˜ê$r<¥€ø¼ã³^Õ“»Ÿ”I¾NgS²É᳃v_Þ2 M#¾±×ë} HÒ\^îÏ^cÀs6‘H²HË•÷ÉLwY½·™ë€›Ìz€ëÆ0àòr5Y@14NÂõœ†oÿ.ûa£ÇãY‹\Mo•4B±J—|fÙ*ý‡CSÓÒ?•¤:ßêþyŽÿÂ&þ_Ô7e­Eô„U#= Eì1_’yù@´ê] J̈ä "uÍáqLj‡„ßBó±×¢ýì"ßÖŠëLûcjQßD¸¸"Û©):³šËõüÐIM)îN+ú×vœú{ÿËlü¿Áï³þÏiå®} È¥yÐó€¼bš‰,@åb ‡´d÷“вŽÝ€l0*>eòͬx«åƒ¿z{¬—øÙ‰'H²ÏÆ!Ñ[i[^þÕô{ñ£Ïÿ1ñ3ÿgkG§«ù1ßý½itîçÑZ¡1Z€_f/H ÉõÐ { Ô§µŸìCuÙÚuuÅ}wÿaíËáFVîÔï€FI_ZAÄîŸÚÒ­”âÞÿýÿÃÚûo°DZÄ¿IÂÿ²ÞÔÚûËï5À}˜Z{‹Âïç˜xr©3¾˜–HR¾ .¿Ùã.08& Ý€Éqúÿ#kàÿ CHþö²oÓ)ÙðÉŸµ7¿MdrMäýù q°æò?ó9kS|Îè¬öDkYëo¾³Ò=_ºíõzóz²;ýËÕ›/Ï~œâÊY;Ž%¿™¦5¤.ÙÿäÜN¸ƒLÿ¥µþêÿéMýÈÿɾ³´—bé×-´Ÿ¹­Ó q|Û«èüz2âÕ%Ì,7çìOq0øYFŽßJíz„Áó€†îg·1eh[ƒXbÓÄdaRžµÒOõÒÒºƒÉÂ‰ßØ|–õµ”ð¦Õõ¿ãã'…+Møï9ÍÆûO†ðÃÝ¿Qòwº¹z^OZïsi«ÐE/ès_䣳/©»vU·Üx`¬¯ùÀZ=J¶³Ò÷¶¿´Î|a1–“ÎËLÇjst@¶gàûÓ2ÂO'û‚¿ŸÊÍŸçvt­¯°á#$µ¡þǃõz§¦|·ÃÝÔÝ¿I„÷7§Ù}à O)CMÓZ·ÜЬ¯…Ks—wÅ·¾.œË}‘&"$«™Ãõi²ÏõoãSÐxŽ®•Â{øhØ`¨_ x0P ¼ÿí©Tßù|χT%Zú®«fÐ-S›v§Æ}§á©•»„âƒæÚ×^¶û—~ð³Ê6ÆÁú7tño6®4dàØeÓiÍþâd u|ÊãÔHÙÝùAÜœŠë¶ÐúßÎËíuªØCÇ—JDÌÍ.½^„½è…§ÚbôoªìÏ5¤Ü×ÛV¤ïNÍxp¼7mðú6Æ9o@KGªûäÈ«-«H«Fœz›4NößðØòiÈ—ËÍ,V*]'çàr5§Ë=ÑÞ6P«¬®Å5žÆÈ&«é–ÑÁ)l²ü±ŠÌ­•ì¥gK  ÷<¼90[\cìT¤4«ëu«ÛVYbWô«e®X¬ì›Åj¥&µZåS§•Å×p\ ­íºø˜€k1òŠHêR]äÀ&íbá»SÖ…q­*&²³þ:wü¬UÕhƒ ç¹»ªõ“¥„·­\:‹ÆwpÖ–"¬nÊÄ ²¯}Ç•š@,*ÜEÙ•OíÂÏdQ¥WIy;Ÿb”u¡¢‘)ãÁ P6ùÂ8¨I—Œôü¬2Èæ}69J—¸î7®ŸÛtÚ›ýzÅ^Í.°Ÿa÷4«Ý<¶™å70æ—3&_ #ÎÓ¬†òÖˆõ5Ù-¦\R^½|0pµ|á;7Ë×jùYIk%Rïç}z8õ—µÉÊ'ÎÃmnÓZrô}uóöÝÃË«é/®fðBÜf§œë”œ0çÙDz“ÏFÁ»mÇ;{nª×§mó!o}/ëÈú^·¯Dž_Û–ʤ›LDLO—´ÄdË•kÅÈÊç .6ú[ó—UZÉm'ÉÛ‡{ÝãžË=õN®Û4ã‚+~‰ªs‹-G…Ånö1·†Y×'v¼Î-íA©º³mº{¶ÆµþÃrù=°  D˜¾"Š&úèºF`¼~wϤ Y™ë›1ëe6ôrΙ'²>ÿÉfz¹¤0º.à]u+ê½¢q<—óØpçxñ¡¸R^e53IJQ®GÚñrÈÙƒ`"ZßíP±Æ•Õï×X.{ó,èsÖÄ*&zÃƲÄF ©}ƒxùS}Óo®uúµýxÿÔj‰¨§…Ë«ÍÂÞU®[½­„•ãZ «kLQùwMQ…ÙR ëûU*Éj¢àÒø4<>¿*ÝÞÉ.™¼ÀlÑ̾ð²dgõ-myd3çÌ=cúùb¢—fÊ”4ˆÇšÕ7Ñ]ÖËÆG×öíÕ<§ñ¨§™VU%ÌüEO*×U±§„ÅÞT~ìV[9ª›lðyD´V’d+FAü>N}qÜk_E×Z[¢k·ÂDVƒäJ{†ç3ôªQÚeŒP©™«fî¾£Nº5åžœ‰wò?ç½¾Ãpú˜V;̲_íàç`/zºCˆ*é(©\cŽSÂ¥%ËOÒÒåèVud£ÓÍKomQ‘†È«-ÙKv(NHm!ºÛÖI˜kw `ãWöö7†/fÜOvã=·5Q‘Ûæ?5®"š=nÛÈ÷[½WíVÆ¥q~QÞÖÜvPumG “Vg?L½DÕŒr/fb¥s[?”ÎöþQ:•GF~.6l›_‡]z_cFʪ± ªŠ“…b‹^!ç‹Q- ùr»!àê±Ï{Ÿ9OYÚ‘«Œ[öß¶¾¨¸Ì…x¶™Ö6ÚÑw.âé»Ñ¨0rô‰˜Öï¥qÑ¿ç7: |Z¨T½¢;êŠ^]x´ÚÞ/PEϲ_ÙÒÖ/iT(ܤìW¿JÙMî%eÜÜGœÂeHDòeLXà#à¥Hà×Ê^ç‹G–§æ\ÀUqåçUçØu©Ë6èÔv;F¾à/º«T)Z{"Yªo¶ZägLn’‚Ê“£*]&?ÓR›²’3©ŽŸ{ûàKíûÞIÑÊö·fS“±&nXJ‰ø>*}«™_S]‚ ý—ˆªÜUXÌ'¡ÀïÏ~ŽŸüº }xê2\Õ€1ŽÃ$†=®\‰mksÙ5¦ÝÝEÿ6éîPq&·¢¬êâN~y… ÖÔ$¦á÷l@Õ_|n ¾øîK*M"×[ÕÝ=¿+̸¨—ú·­YûdëûÉMRU¡d[. ⬱ûËráÉoòЕ§‡Ë·Ï;Ž«†Wö„FOVl~H•¹J+˜ Á›¢Þ›££ä¦õ¥jQq³Y ¬Û F޵}D:1½ fAõJ Û+Šœ£a›æ±‚•©ÊÝ׊8Fj¬Ì<𨯛q€oòäÿF¯:ÑàU2—¥­‘­¤µ%¹U–×é‡ß¬'W+î/ìiÚ<²b¬î˜Ð–Žôc¢Þè¨âÇT|t¿Ô QG)ÛšÐä÷{Éñ$Ì21;ú¿øv›!„›)NjÜ +/0zŒÖ&£2Êç²3¤¹ÒPäŒû”77M´ÖKnDÊ÷³ñ–ìd·uÑØò¡¥Þ¬ž(Û«5)ú'ÈrÿÃñ×Nc›»Ù… Oþ‘޶`K½Õ玲ûàBNøAºòMÂe"æj‘$°^‘ÅWfOÁƒÏ!‹mË À*ŒÑBõÚ­ Ê_ƒ ÒR¯"½ªEø6 ~ñáN|ᎂ¹ð­=k!ÒzÙ*ÆÏé*Ç7@Çž°ÝÀ`V5+EæÒ$;%…U€Â<3/½Ùs z0·êìJ÷$ãHÙÏó–ôðÞš˜·çG‡¶7¼èϾq ;|°íA±J[ 1VÉŠèáÑ2Ñúì\@…<ÓDZkwˆÈ¥å.9óŬÕÇ<ôõÜÊ‚L?h@½YØJsdÜ[iÞ¶æêïÑ·.P¾¥˜jQçÝÁoÇWˆ«çKVÎÄú¹l^¨÷V:’^þ°#p¥²Æ©Zq‡UÞ­ z,vhƒêŨ°[C¨°ÏH›G8¤m D~sp7{ø=ñ€uˆéA}?Xe>«Í#ãÐ*¦µµd#_²- —Áª`š5šlÆÍç¾×6‹e1¯É9É”³uMq½Aò¬º‡Øó'÷a:Ýëƒ6íò%åÐ,y$øa— ÖcßÙ-*ÊÞ iOó7DÉU^ðm}áîrŠÂzpa þ=#CVW¶3£8d »×¹ÉmМ{¨ã‰ì€ší Vý·o*Ml€Êv3‘ Lç«Ìf[fÓ¨ˆ¼ò €ñ‡Ì©¦Cpõçfå¶õ¡_úõIe·Á•DúØ /)“=Æñù¤Ä¢¹CÂLþ ¨w‡lRHc Æꕎ³†…ôšcú]k¬ŸH§ ° 6MdpäR}¢^"—@Û gÒOdÓèjÓ÷.Z4±‘)ÛÔ…wœ—?›ÛÏõ‡ÌsöR_ÂLW±¾Ôg°y’9Í¿áë+8cÕýüˆŠ«â ³ùläòWH Ìá× `õ×`}$RÂYð F"ÅB"ç4}ºóDw€"`ãRò^Gž¬+gV«•’‰É˼8uu›ëÅ«¡>2K_†˜­‘òrî¸ÕIVÁÇ0ÝÄ/9½Í^ѰïX~^RÍÏψZl`cê3“@¾ìùº¡žgÍÀµ poG¼ÊʉT²‰J¯©ÝD–+€×­H:+<À ë"ÀƒÉàÙ p%Na ®.þ tÖé¡Á…Ӻ羔;lM®~Ä?d®f(åœ@ÚìÕBéJ=pGÔ÷í½ï½kƘg€w¨ À'Ù¤Ä[ì”C“YD±£%róQR«‰Ì€(‹»DÖ_@x999yà ·€`D5J`^’¥ikÙ: µë¼]—¿§(/.ë[‹ß×ð„L‘95Žš(±Êv(Œ¿)-‡_CÙûá Íâ Rñžü’΃KRå IJ|g)@bõŸy%²Nڀ앃äË& É.%ÓB’MdpQYœ'ï9Ñj˜|“CÆ€DoïDÞ_“Éujt)Ôe·DRØÚœÜezHˆ,‰C;Ä0‚Ê›- ÷ë•Lfú€?IMó8Ýhñó›ÃB€¬™Èø%C PЙ”Êk€*6 Æ3Ѐ®%Ríêv\êž½'ò"µo%9¸]@-ôäo]T19(gžÎéE)+JoÙùòU›Ò\оN÷lÆÔÖ ¹€i;&=sT $¶žg<ƒÑù¤œÈC“r:Ä?: 6ŒðõÐ…è羦öQú$€áÚuÀTï]À̼9`¢É0½ä¼aê+0·˜€þ s@¾€Q,``~èW”,ò¸7µÎÖ*ÃuÒK§¼°Äv±–C嬵ž¦œüÎU߈0¨Ø(–ÿ”E®üyÿlÇ…ü?à7Ŭv_¶ØOk8ó¹\ß=n±yniЀìíÔsÛ*4çàÀ)p,(6F÷€=÷d™šÖµç3i5:Ü•(Wh7óÿÑö‹Šë²Op¢•sD€DÎYd9 D øsŸþ¶zÍx¼½½÷±gü£<¬Å¢K_7Rw©TÝË3Gb›¤bBÚ"°6n~«ℬЇzñ[öÅ–G_Ï/Ç1Ò|QØÄ§/JFÖZ¤µ¦¨+P7]4• ÷‘«ÇÆ’U ^{Çÿ-S8/tZˆ<€Ê.áoªFúT[¨ –è‹Ée¾Éî=§Bõ‹L‘À“ü·¯!¹ Déª?œÆ~ú7Á×= ˆð/¹ù{¯+ D’1DÆûˆ´Íˆ”¯.ˆ¤Ç4ˆDëY!Ë  {5èθôÎÝ×ö™ÔJzRE‡ÛNì61K8í/öo:4*’ÂDL HsFq?ö‘û]°D˜$ü#Éi½ÈÚ;±+ß\½ x¶ŒÁU²öòLDïgDîD›nD‹—>ˆò*¥ja/ä¹ÑŠÑýë %Eƒ†øp¾uò£ˆ ÄéGŒÃko½‡náýNóýC¦ ñEIh»6äêE½›áXŒó½—ù”y«¬€9ÏQÀlà…ÝÊèÊš/€\½Èo@Ù·&„ûè{Voûaç'ÿ$žéÍ“y,ø;ÿ êOÅ/zÏÈ}Á¬›ǵçMKÕ«6‹tÎ~Ñšz¯êÐ;M5U8æAý°K/[HCjç;ûµ WhAEòÿa+.ô€<„#xA2´ûŽ5”)MbΞx ¯ùÅ£g߅΢wõÌîèrMU'g?—™{cN\ž¦XêmçýÙá 8ÍÓÎËnÛk©üÞøµ³~µæÚj=¥—‹Dª·Xg3¤ð†’j(ò"}÷Ë‚F¶v®ÃãæGØ­_<œ/èy$¤^µáÛ½“÷ÕÓó»—ØøÀƒ§/Þ-ÂyùÎËÐüÖØìÅMü°T× ožÓVé[3¶Ì=³æbȦì4››W‰ByÖ`²©W©õ&×Foæøíåaüê?ž£“G<ßæù‚"n1´ÒP‘)¼(áÂýÖ&õåW‚ žå <‘fVxÛÍ/sw/ EØ5ìøÓŸW1v:õŠÞbr­º[Ço.`«Áiô4.£tP½óXò1Xç’ï»Îý*W`{n­>éÕ“O3³«]ÏÅN7¦tÛþh°i› IØã\§a'©÷éºHC­ÉYCB*ÊhE{šíeGª"uòG–ì(ýØaCj2¦ëôšGÒîkvÉš=·üJu½ú5×¹Ún©cÜÜZ{Û5í×h×±Ç oÐúL=§•!¼ysQð·Mjû95J¢ü¬ïšyª.\Ö‘Z#*ªÞpåTµÏA’n(?„öØÒ¸Ê§¿’B!õ„×Jƒ/—l¨ú!/Rx;]u¶¶Ç&» ÅlZøœ949Ƀ¤Fx£Äuèú®Öákn«"!«l(©ÚÑ¢Q¹sñJת§Êþ¤ž+Ò£J鵘·JIú2*N+̺ˆ»…[aѸ3êR°òënfœ/ÅÖ|ž}¾ô\5±VQ¾JØøÅb©ä°hÔ ÉݡȋÏZÃú®²³«v„¨Tº±[­ì6Êh…‹Ñ)½fæ²4ÎæwÅϪt*fØÒµ°¨æýu̼òk8•É—Ô^˜4ÐãsUc©~K°@Iª½–ÑñÆ0}]ân:Ê4°”¿‹‡!³=Jø‚ß’æ•ÏPAi í¸›#…·ríK¥$þNñMÇ̯ër4·³…D®ªka39á/dÝ^® aÔÎÊÏQ?ãVNFûÌgénf¾JG‰í.å//§”É\®É׃瑪F$>ÇŸ˜6GÑ~¹ä¬E7ÛµòÑ`oQO‡0×ãkÍ\OÈð6ü¿zÿh<¢žF5D"o!ϧc9á:P2ÞPÒWç̦üù’O™ÔFI¾Ö{=9.cÉq™N%“¼’OLëJ9‘‘£õî%md†Õ“=‹º•ÆæºgÏÍRlºïFëS¼šx=â"ˆ’±F¶¡Äò“zëN/j—U7ª ¼ÕE{Õ%|µkÂRõQ_Wº½G¥@GZ¡r›U2]5õÀ6l2©3X"#ÎkÑluéãæº3¢Ì’1a¿Ë§'-^5Ÿ±¸ðÆ1wÂgc ΢ÞB­Fí¼ÕŠêt¹o\7éå—›ˆï‚ 2Ã6²˜þ:/} ûNOþHû<æwíó’ò‚‰ž4é)‚Îõöu± ç$³L¡˜m&ÙxÊ289AÜ,Ú,3ÃO¼êK˜ûZ]bäèõfýPL‰ÚÙQÕá¬Ü¸®Ö$„oDY_Šø{\ jlLØ„>niY=©¥ËÚçÚjiÓîj¨ebØJ]Œbg5ŸX* b†²žÝjJ)7X)íÉ ÇB]@áX¬£”Š|׃ڦÒkw;ùrû™K÷Žëh";ž &_x’15 Œ;Xݘ”;G#Í‹ ®ø9b׋þrÝ«>n\zRy½µÏ…&´ŒAÐî‹á=iu1Ð5of¢*4’ÊÚ™sònA äj¾¸–ÜÍö.5* NR„{Jô޽žh·l_´íEB´ÛrA“ÁÈeÉñèföe’#©›Ûl6Ô¡cªÛÂŒ>wF¬Uñª§¦øI›ù냖Í]-K=hÛguÉ7®*Ëß•lJÉsp…³7Œ¼O>$¹†ºtÌÁL“2³’â êb[ßõEýΆb ½xå*D_†8ýoúd‹7àÄ-Bç‚Ñ¢Ä+·R—i‘ìnê™ÈÍH¢ ¤C÷M䣿O}_›WÙ³ºÊ/\•qJ;¥ )å¹¾Grw=zTx*z–k%å*Kzò)5{ɤÆÊ¤x!‡¼Ø^mT1R|ąޞȱšYå‡O»Ç[£ë’›ÀÁÃaÙÃfךŒ¥“ͬ°ö),† S8š¡9‰Y¥RµCN~Û¬USÏ'ž°Xý¨Ä´ô…ŽŒØ[ÇÙâ]-6®žR)7r=Çm¤Ó踔Zìl)5?û­¤v÷ñ=žÄÈpîEðú, ±]$TÕùQ4+ñÖ£mpËIr©÷­ÄÎ3\›%—ùSdÖ½­ê$]=“:´rMª®G\ªɪԡCä!Ð…J,xrõŠZN~TÏ2…š#GÅ–Ö§Ò=TnÕµ¨Ý”Êfq’庹—´âm-v¦Ã…hDksá¾LÍ…8“ÝðÏmaÏ*µŸz7n2p^\Ú<àÑ~‡înâc ¸Jg6ì‚æln£z,U¶îÌ:Òü0l¿CÒ»øV¤+¯·A¹åH†jðí:%cÒVÌ©€¸vJÂð_ÜoN–¸ß:q¸o7S„±^†C 8Uûc}(ZëF5ÓÙ¬ô%™SŸI ˆ ~“ì\é(ŸÇV0‰áŠ[©97McŸÆlΘµ}Y3¸ìèÝìy¤«9òJ‹” —^1ôªS »ÏSŠ~Švï$õ\¶Jܨ倈–‰ þàn68o Æ.¯[ –̪6žµó…âMé¦Mn^4w3fTQŸÒ¤ÊEë/¹á¼nH¼eŽÂ`úØñãa{ÅM'‘9GàØ±É˜Þƒú˜kýuŒ­¶”2šì!\Τý¹ûd›30RßYâV©Dô´5ñ‡Íqó–jcNÌ™c`Ì¡-²Àá1Ïä1@ + Z¤ÁÊ¡(™ ‹ùø‘WbÆàÁ‹ÚR6H¥z,¾$û¾»ŠQÛ<òAô¼ãZ[q„!ÍY:wŸ2œ=q¨c­JyÖçd»Õß·kkGôºý#‹®nøãqzáÃN`oV°T5Á0q’Ùæ½H-;¤N\!E@òÝ …ÊÄœ$YÎâÙ+e½÷&¼S˜$Љ|ìœшca"’Ìåc!ýú¦–sú‘wÄÛž›1Í5›÷¥S¦î3Z¼uJ•*²½ê,‰Þ§µÁGbn‹½›é–º$N`n¤o ‡÷ÑÚ“\¸ —²!¬ÏŠl@ι6ï€ÜÐ2 ¯ ÈÉv È©@8—µG=ÓÃÛ¶µ©²¹èmu‹ê³öIP¹Ï‡Î[ã%ƨñU€ ßða?,{vY)¬™²I.èš}™SÍý|FvÈþœè':+<­l±t!±ÿÙÊÐŽà–2æ@eXB%á’T6Õ‚p[*×}ÊLªH‡¶´: 4~†^‹ÂÒ›2Tp¶Z("Üîf†¶¼¯EÊ\ )’–_Âã5½ñNO9q$³Ü3?»¡kgfEµ¸û’ìdW ¢?ê/ðD·î…‡áÍÄÀ9$d¹M»€º´Î€zž€ú°„œa4§æ!Ì:€æ£k@cÞ Ðøãé?k'@y·$ 6Ó>R¤“ÙÞ»ñ="<2{†º$™‹wC „¡·¸ssRôX¦3;ÐuÅÚR­2¿!ìiEÄW+XÈOg ÃÄ Ðjz h«åº¹½zøô}Š| ÔiéОdAh—}&úºð.|וŠz÷ìzv¾zGÓ”§È#mm[‡ò™ë95Qù×H”Õ£GŠ}Áxóiн³Å}¦þ순÷çÂ4îêî[lzoà%–€>v`ƒ• ñ}L6öL­üÌlNæŽ ¬' Ÿ®ÆmŒsÄá_`V 0ë2Ê`œü 0k0ÕÃ0™Ó!‘°Í´Vœ¤ ¥nwD©Óô(!‘—?•í>a ÖÎo¾¤rÜ‘#GŒ¸ÞÓj?êy„t0·ÈåK‡n>›ÜÀ–Þ`Ø §޾Y€côÐ… 'q쇚Cè_{Óï4`· `7ø·£x °ví ?¥íÇŒ‹Vý>A¶kE¶'²ßîh¤Ù2Õ–ý¢ìçÍùާêíëZßÄhÛļó2ÁÀ7Õ7o…–aGœD/ê&ૃ„k )·µÄÂv øœõ|ü"ÞtŠ€W»+À}ðÏo«:ü ~î E ÔôÅ>™Sw“¶)u{…Ÿúk–Ù×i‚jwíñ,˜o»?^H GEC´û¦C»MðÂ’è†Àï…ßd‰icª„W±ÄøeDE]Bp.@d¤0lbµÔÂ>qÂ<-!¸Q°`4´|ä+;¿/äs>e N«®±åÍB .c‘!^Ñ3å,‡ÿK‡FtB&¿|CϱH~R‰€6©û~‘ÒŠ$Í Fׯ@Vk 3g Ãóõ¨dÎÍé^ɵî@Z1 µ2ðeò¥ ˆ #•®·ÕÚÈ,ŠÏr*É3•ТHkW%®$côåö/:ôha~cô#g¢ /5ߜơÉ)¬a‚Âï_´™Ü­j½Â¨ç5º±¢^X¨[x P§R¨Õý¨±TÊ.å\_erÒR#Æ:s6àä)£”Äè }V[ʱƘç ú­THëEœ¤Ê¤¾¶ÜCŽãßñø-]â7“ï—«öG’/²ö†ù½ ziƒ&ˆ¤s„Ð}_úòÔzñxGqòa]Èío®õ„™m0'P(‘£É½€­Öw›6Ò¡CE\‰q³ßY{ÿ¨õ¢` $ø"&ßwû‘ã‹”Ö0ÉáËPŠ«18“±Öh bIæbú®­ïµˆÌˆ’4ˆ²ñ0nÎ]²ìø˜„|—Ôö6^È”íߊöå‡F¥B kóÅ‘ù‘Ú‹üÅð÷"­7´öÆÔEå+µ÷ËÕûCæ Ú¡ X…èXÖŒ––I C`îß>0˜ Ì|߯~þ2ðüdÖïç^“_cPúÍ%‹²oÑ–l«.rõBÈ½ÃókŒoÏ)íO¼<ÁT½CúE¯ÃÞwz_º ½‘~“G#óªM'Ù‹±ÜÖÎñíspú4¥í1ç÷ñC· ¿UÉ¡Ù/ÿi¨N¢€Öÿ wZz<¶?òÐüèyðe<ÓðÜöJÌÆsJ®SÜnZ¸ïÔjå&ôúåš¢í³Ÿ ºÞ˜ÝôOéc{xÌ]ÊÎag2ξî¡Qù{îa¿ˆ§Ëz¬>ß«ôg—¹w<º`¸ÊÙnî_,Ü[DmÀ…$ʯŒV´Y(î^µáaƒTçøB›#qY€~rwGÊÆ/ÇœWùìåÉâ½ñËÑÏz,3ø*}½SËÜãÀ.Šï¹0ߥ'ò\XLôYƒžÄ¦6ßOL®õIÎñíIʼnß.ÝqâEÎG`yÃ<9'‘ÖÉ Ký]}ì"‘é»_ùHC 3Z‘È‹B¹óGRç•Ï1:s3·äÔ+ì3S¯ÈU§6k¶¿IôƯv^¤GÓø~2\$góÁ:Û^ØU{Û¯²ÍCÏ­6½ž|lß»¶Ú ÷›“ÿHß·+TZŸÅqÜ·U¿¹¨^‹ˆÒuËþª/½v‘ RQQÑJëñW$oHi¨ãÄõþA*e¿JMÏ=yßõ»^mú†p#»¶L ®N¨íA40ì×X­Ïä–jeðs¶¹ÈŸ‹Í<ý¨6ÖåG³Áá׳^UÀ¨.œ•E­ɸU¯ß}T®ã#S‰b¦Yä¼VéµeÞ_ânF™[_ù¿ ©(­aIõEcü²ìKáEjŒFÈ%6³«¼úuáˆOjn“šCHìàËy˜)Û÷«šß *FPåA*O|mÊ5ÎU…âg] ­²]£ˆïVaQÛå ÔɯåKº<ø¶W{å„×$œCg©f+«€@¶Ø¯|(?£Sþ¡G¡×P QRýP‚, (½¦j¦8Í’E|sÉåg¹°:„H§@¹ÙQ¾¤dC×Pn×Î.sÕHm—uûe7Ûˆ7Ïoܼgìä0H_g<ÝÍž¸”¿zk©AÉJ%_û^-9®‹³dR^ßÓvIIdŒç¥ X‹aóiå­Â2ò†g¯ÆíQV"ˆ<²yöä‡Þ؆üMCRº›õt×còIƒ|Ê_,*)“žÖ“ãòÔN|ãnbZ‡3ëŒìN¸ç¯¬¼þ ¥!‹º sÝϽMöÕeâ»ñˈWS•R\ÄI'æ.ö~¬Q¤³±F)½)\ÚýÈËûM>…aÑ*ñl#šÿòÆ&Ç%KL«ûPLIàGçmåÕ áÄXÔåÂ[Ô•TÌuW2ÌR4bÆwC5¯ZV..¼³¥˜;©Õc ^³£Þb8ˆÚùý,ª3`gt+ÊÕˆ ="â =2hŽËSK‡'ýuKúë~îè/ßœ#ˆ˜F~%ênTȬü0Å”I¥H¬÷2Ky‹Wã«sÌ·N1Ô/H>ÚÙþ Â@ð©¨Náá£[üHF”£´ˆ¿¢‘œ£ë¯“‘ÑÇ­\IOj¦ö¹nÚ´G.5üiyêb´ÅÕ|2UiŒh(ë¹·WÖËœ¥¬W‘žJ“©¾šÏ–¨šeÿ¹ o¬äö”K ù‡`-£oé»QûVñŒîò³ø—ñ:b Õµþrí½>n N=©¬ïü@›¶o@ËDRÃ}‚UQRófTW© o*¥T5ƒ”[lZ‘wóWW®æ Y¤WÉݦY©Qy§$EÜ %þTR£ !W—z£^í¼ºÅÌ#’Ï´3;#1÷8teŽFôí=2lÉ'=%LwZ–6õ§F”‚™ºØŸj>¶YªÔs¿QÖ£ýÂ㨔’à¢p€öåÝL d‘”0É]Åh©Q,ˆ’Âö"¢·;¦D»ÆUD]*õ„nk½¢zâÉû·—Âú(– –{~0â¢ì<ï?Ç…j[™vòåò%‹LÑ\¨11µa½#Ãgåªc†çª'¹QʽÇBÞŸœ©\K4§rõS›Ëb5»ÜGd!5šÒRRÔÈ6”†¼‹åŠvÅòD](Ü…«Û „ncBQó)òþ[2øÁ¤œáÜ©qã%=æcŸØé”£ØLf—`3ÙÕˆÍäš%è™ÿµO”‡ýh+'åúédjA+Èm½)¤Cë©«|V ½Wø>±’¥–3“ÔnÊÛGf$¶—ÒDl7Õ¹¨¿É¹pk¿B®øGý¾å‡ väÍ@ºrc½8'UÁ¹6â8px†·W٬§Xâ\«1…È~ÄÐ~òHog‚.«¶Is;­Mí³©µÏñ:+^Jµ‚F¦´D‚ï¥X˘‘QvõÐrÂÇS*‘ÌN:µ6 ñÒ-O…{“ ¯žBì|ðÏÔjÈï“?<¬&¼•›L¹75_p©ÒdÍaúáÀÎn÷3›í“–Œ³|Y†)4zË=S4_W«ÔAŽ(©MÉSdF’M?i’jãÞ&"Õ–ô€pWHÕŽYE²:«¥ûâË´˜ÛPŒv-\ŸŒ:¾ÊÒ‹£\¯+[ñ²ëÍ…û16៛ËO`ý7ÉÕû6Ž÷8ÌNÀsž³Ù}bÂ’=´»Sx7 3êémq{§+ìóCjMÕ¥´JI§I’li÷ ©Þ¬qéí÷D'^ÀðûøaàýÔ¸Çñí -=N±üÖJ•S u7©,ýM:LÓæ×Ü]©8ã£ÔZƒhdšsþÅ0÷Áæ./vÙ\Rî°äê0Ũßa˜Ç«Oo‡Ÿ]Iàê0ÅT½ªí TΔ,N^d«¹#H-A‰Äå“ìDg:/à>‰uðx±°Â^`‰ÚPʬ‚É&çtgÁdÒ2ruƒ,&Óð´—‹196^.×ïUW¼&!>LÍøÄs¸t4`s¶ÑA÷nl‡a£¯]îڔˬ»T}ë)¹suÈ–ïÍÈÖƒÚÚP;W+}#ºÌà~eÇâq÷¥acUKa‰Ë¨¦QrÒåà­” p[©¼]A*^1DýXV‹Ÿ ‰Ü"EVsô|#’Ì%¯žw¿»Yóc56ã¦üeÌ.ä΀Ys2¤XÃ!Å£)Z»%o]ÒNï†Äu±Ýü9ˆ£´»Äm›uÆÆù‰%Í<¦Î@ï[€*5@ˆÌ ÄþÒÑþª6l!óKGƒpI «èF4Š¿9?Ý?H/M}:•tSœ­¹ÏV} åÔ¸Øgà¬GW‰W‡r›dù^wH»³ë7|7ÂÊxŒ©†ƒ9XwŽ\w 2ÞÔ„íÝÑÖ1íŽMtFu@tcs@ôèµ³ˆú® ˆù„u"!eR¯^%gŠˆ¦y`5¸Ðÿ É\쎣.ÿz8k$•³‹þÉaÖve@ïàéšr—×6Ò¡U²Üº=â'ø£±aNª:38_ÄËœ@h¬I¹G@Ò¬¡J@ðd@2‰$„Kls H.ù$&Ɖ³}@<*ð(NrÛ§f1™Id‰$9‹\æÒ9r½ ]qùd³·æ2uÎæs‡áôÊcBRš/ØÝo·CÜ:n6Æ}ÌÙ F€Œë'Î@öÇ ¤Cϯ;@.„3„â šú.Kà ¹’lÇ ×H§éwrðƒªµ}Ùs-AW>™è­8Óub^gñØzéåæžs‘]n8"Y0¥õÜ¡Å^zH)'y@¶xŸèu<ÈÒv±ÔÆîCNÈòÞuÅ» @E>@UâGõ„íPU–…P@xçUk¢ ¨º²TîF*…+cë0”gD_Š4f¶Íš2M–˜U5†Ê1Èb.örëÌÄ#7³œ-<¯ò º¦O&T³VwÈö*1&za„[¾>®€aÁ¸iÙ@•×¥ó,/ÆÐLýhur´u:¡Z"8úèd¶á1tª ßg$@‹ZФº‚ËxÍy=@Štx÷‚•’ÌŠ¨*_Š3Ò…©|~Hæìr;ÜÑû€\RÍÛ.פþŒˆk¹)öYäλü w ¨à5t´0b£).çÇo>d)‚\ªL¶ŽAX±€É‘„rŽq¬ÆÌ8€±ð `Ô5vR pv€¾@3øiÅU4æ) ܪš"íeø©“ÜG¾v>—]'d€G:tŠ\#µGK,#&æ°Tlè³6 ·ee iõ·€‰ß…_²¼Õ^€å¶8`SØ6*_y xÅ„yfN¿…‰Ê¡²O!3Aê€MÒ€ß&}Àwxr)UpUCôOqE ß6Ù[šžÆnO$£¢­÷Á7Z¡÷ø+ãwd~Ó|C…õ+g".d~Ÿîz‡ZoÓð î#—¹éº!4‹@ª}©êR}¾’Ò§Ä8e î>>ü ¸¾¡³Ñœ¬;dT;Mfj‡MÝ*i“H?ßÂ9PÏ} ô(êrúaíý3¹E÷"qõÖ^ã€\½õ^웸Šd^Ëo‚ت3±<[Äô:¢w í!íßz ªì|`lq`LOè5F­ÅŠÄÇ8@užÈ}Æ‘=Y¡¿ñ³|þâô%£ÝëŠñ÷Yß­½(=ø7WïW`ï¥÷víÆfÑÃ-€Ëà;°† ¬¢–æ·€¶G`Î'0óÃ&ˆ¿«§?h§°™/ù´èø“&ñL¯8ñ{ö-Ú•­ßúîêU—jîó“/œŸéMáþȬ§¿–­ÏÚ â^¹%˜[ý¯^"­_®™bâ<`Šaj¯—p[ö o¯æn1Pƒ}ƒzgQ$/Êh@»p!q÷Ç>W_ò)²Å†ï£äÀ—êé¾SèÏcÁ<„Gn'Füµh†ç´»Ð¡³×Öë\<ûÙ^Ù³…Ú o2u·x_Õ÷n²ØØyÙ„½½µîƯʣMühÌ׉K|·Jû¹ë’rª`¾ËMå™[– S¯ayŽß¯“ýª<õ»ÿù–/Ð`/~i¨wÁ.Ï<>G!HCEyÇ…”ì»Å«8ÚËŽÂm±¯¿“Ç­±¾yëÄ©}Y.¢Ö}±¶Ôç|—æ?37÷ÁfòúCÁf¦ÚþÊNºÒUtüÖUuâ×Wlœx|Ò£iB«™\°.L6ý]•|õÜæ;Õ“oâ•…Ç¢|¤¡–M6•õÆÔk‚Ä]dîD[†ÁfPR']~ÎLŒÃ¶å"Î@Q“jÅѧ© I²>(—V¿Êl;=·²ôdw5îÚÊjÖ¹¶W«Žq_í¾'"Ü­Ï샷2T\FE+MÒMêÀ‡y›#$hfÈ‹ôݯ|êæKq*‚LÆ( ™;‘ô‡6 Câ2P¶Fo׎ûKÂín¿†J[ª5MK\s‘g¤&µa´F‰'ú®NšuÁÃ’µ†Že«^,Uµ'S¯tj·ìOS“²Iôö¥qáñ*%Ù¶RœÖÄR÷*w|€t]$ †.UR‘È‹Á¶ß©-ç’ “ªÚ-¨Tºp=‹öã‚ÿ*9ð_ö¢l‚ê¦4ÎVÅϪê3lõöµ)W^´C/Ç×¾\%Õas»ÎLÊ þÞȺC"•ßÑjÆNw‡OéëÒcÒÝ⩜ŽòùwòåÅp2€„TÔŠRƒÿ2&Ȇæ¤Pú+P#šÛµ\-WÕ<ØL÷jeÝ•`!TêYùY±3v¢ÒK_§Åaº›iMSþ²¾H ýmòµí»Éqe{K&…ç;1mRT"£æTkÑ™§‘K5i[Ôã¶7×£ k–R‰±Éaï+Êø‘ÑŠ¼¼ˆ%*b9-ÔŒ\j+“É×:‚'“‰%>{‰NLk1B!”†àOfÑDFrÌ~Ú¤­¼¶ÌYÔu_2KÑ}Íd7;g°ýx5!NbîT_Å™ê)ê-ÇϨ]¤¹¨Îv-ãº7ÚF·öv¨bÅQ¾@Ä¿ V‘A§ZÑ 4Q-‹Óü6$hDðK>]w¤{|×?]âÂkäÅÜñä áòŠ5’÷O¬‘Âñ˜ë$ؘ‚%Ĩ7Ï©QJGŒëº7º¥V 5³oå"ƒÚ¤1¥K[·Þ#=©ÇÖÚçæÜ´i_b´L|ŸÔðÀîkø{ôR3µ¡=D× Î¨¹È¨»Q!‘ÂkåÕìû2ò{#ÊLבA¥ºŒ˜Bia°×_îôaZP¯w}Üx½ô¤JmÚ¡•f4ÜWDu1055o–âÊÚi¤•Rj]Q8ïÊ»En!Wó§0þC™:/‹lª ¹{e!¹/&¹n¿‰@…y UIæéëæÁ%bùŽ‹ñÓ‰»z€ç—ÚÔ>:ê¢×ªùXa RÏša8‡€Â³8¾¶Î¥”xx ÀM®f‚‡,’ôGrW*)5Š)^Rئ&z»¥%Ú5Pu)Ó®'w%tíâKˆF]ˆd‹÷5 )¦B4¶. Ýž‡ þa„H®:úI‡j3&7)QýÖ¹èNz±Ó‡[(¥gs,W¯|_Ó—Žä.&m©‘Ÿ÷$…^ !œÏ™èmÞKÑ®`Q˜ƒpuÕ³ÐmXáC²BT)xÿ<¢ùAû¢ð¦!YÜ˯•¸ñàÖç’VõÀ~> ÅN§¯4;ó+vºèénI UÑH.ÓÇ:2EÇš õŽ O#éüF)×ÎáeM:îb#ñ¼¸ô„›S·…^$g Ѿ!'·yÿÅvxßzüÀ¼©Ëcîu3fܸ—XqÉXqÏ~žý ;m_l&ñ!YÄef1%˜|ެ14Õ ¥!z½1ôzËit©ŠÛt©Ö!èR]2èõ!-äƒ{&SKš¹9ad4Rº?ôTçuT¶·’¥bo*¶äPˆ•;~xHÛÜ›b›œ3¦l.Åú6—¼"1…Õ]›·ËÎoÀ…ÝÂgÎ,YjÍäwÆ‘¡«Å;½Ç€.}žæŠZ”Ú³£"UÝKCJÌ.O”or¤{ŽæI÷2¿îµ/S¢¶Ró<†ÎiÉ· *ñÚv…GžÙÑ]#Óƒ|ˆ=–â%c9B/8ôykžks©5Õdg·Î’™EƒY>ÆMfy·˜‚Õ¡Ûfè÷ Go&ã!]N/&4»Kj¿@w£¨ýÒ¸RµBýCIÌŽ#;!J6«"©JÌ8¯œÑ.eY"‚B÷-¡šÐ—99{|“‰Ùk/ÆZxÓߣÊMe6=Ò¡‘Í"£p».õÒl6{uëÌ*:®1L³Z£·jµA—·™ÍW’MšO'[ÔO¶©Ú"Ó£¤|ia<'O´»#›êBªÄ›¸cŽhû/¿[ñ<Þ{o{Ø3c…9P؈Ä(Ì9 ðN0Á8>.eÚ{Ê´VúPˆvë£c; Ž÷{t+^¦Í™§ß#n’ËuØy‰j1«êºNo ¥*]aJuêP1ëTWê”´àBç=% ¸Ù| ²E+RÝDÄ¥]šB˜nˆÈ}}ÄïýÏï›&‰=[ÁF©W¼9¤éû`Û °iÙX¯1X_p9Ý'®qs[+£›^ý2ÿÖráò%™ÑòŒµOC{%:,yõ› óÔèŠZªQ‡N²4Ì%¹ $¦€:©¾‚:q?D§L´ ƒ§{øý Žð~ÝœcÏWi‡Š6ž^Áx0™ëÀ)Û8-7 ¸(œq ðZòa¼®ðÖ €7r-€˜-„7…tèÄ9 ð”|¸!‹r%kMÞŒ>yn_Jå¼ódŽ Û_j9•ÔB•ÜmÒ‚j7¨Ã¶Ú¤dÁl'WMR\? Eý.رWmÓŸ•Ó¶ )ì†]€_oÀo ¤zkx®o€ßó" °O à~Çø#µø3ÆÜSŠß´.Ÿ´t€w&ñ¥ˆz´ãhm¡õØ6Ù-/<Ѹž7|â"M¨åôŽp[´`Mmª>)5H×k¤Ö «DçTq߆ו×lSÓQ»/§½& ŠÇ.„Ç%q ¡´„í^‘rû¥LOe@tŒ *x ®ö\@dk< rÕ ÌËêÝ‹¥ÌþÐ%^]wëO”r" ªû 7­0S6Oõ‡Lñ&„‚¾kS®:‡%OJ°–®R%º&]Åö£ŠgË ˜>‡U@À¹- Vç6 ^Ü”é@¨. ¬€T‚MBøh€d*Y@²LÂÍ$ØK€¸¯ëèhŽê~d”ÍÇr¦F’©:¥ì¹'²˜ó±Üpƒœ²”×2ì^îRnsÝ¢ä÷ IêB¦Ntz œ‰*–ÜoÊ K:°ÏMR`#:§‡Â¯=ä}·„àoéËŒ_A€_ò‘6 \Š€<•‡€ôô 7¢ ȉ`²[ûüP¤£7¶¦èD.N¢T1:Î ?trèl8B`fÌzÝÑ՚ܣËm“övj=¼ÑÂÍ@o`àö¨An›*ü´d9a ÷LPü` ¨òk ¨‰¶Ô¶x‚0ºCð vqéлUPûXP³£¨ù¾a`GU¨w•8`€ŠD¿<Ò†ùˆÈÈg.;ìã+%ÔËÙ%—z\©?¦O¡O¶ÕWˆ ÓöVªáÕÌy¥ȃb Kv•²û€jO‡€:_@3ÂÐVn èáÊô óýŒ¼!´BòI´KAØ7½ÉÀ7Oð' ;~ÐÕ÷Ðq GFeÅíšþLôÙæ-)µ®OHƒ} —ôx0Üìà…ŠYPÇYë›Z›âCl’_@:|py0ø1ZžCN¹Õ7q•˜ìyžÓ‹Üsë}«?iÀFT °|-áV,žéƇcƒ9«³ª'3nNSv(ÀDÓŠÂÐ ÷“ôeÞî¹ø¥²°ËË,¼H#ƒ9Ù‰MæDd—:(²Xþ£–å}Ên/(à,§—oùïth€è Ðcä9þ3ÁwµC²Ý—«ù{‘¤™&Û@º83ÁHÓäHÕ=¤X& $YèÑ{ßè¼c@̈3øÓˆâæ1]4™ÇѧÎÝR@ /ĬÆÍ/:”ì¿thD 1BqHWý÷Xáo‚/R3ÕB÷ßwH{êØ¨í+  U¸TüÒʰ¶J+E…‹|7¶@œRÒ-ù4ø¬ðéS<ÊñÌ‘ëôØ´^$†#:ˆÉ;†Î_Áx¹üòÒþð÷þ{Q’ÃÀ\$®Úªñ-«7´@«.¾` +khïyh»ÙhÙs(?©Ó!ÆÞ”FJ%éÛ–ŠaHô—:ì´¯*!1ÕÑALPZÂñ´^¤°~Oíý‘•‹ÄÕp74”‹mg vºï@¬d½à×í¢‚h¿]Q:¹ÆÖ€1M78öóNQ=#aâ9pý–YbB¾rX,¤C#¹-# ÕæG`/J’@rïWïÚPxCÓ¯ÿ^æuRK`™›=°Ê$ˆ ¬½'EVË­KffyHàÀÌGr ~!ÿþ’㪄=¶­<ѾõFp:·¾0lÍåÙÅà’á“«G_x\ð“Ô,­È‚ÞêVwY³£çé½FE<ú¤{ñxG·,95ß$vÕÍ'•ïŸáäcéײCï½È,÷*xE-U3F©’?¦5ð¨úõeKMCíç[^r6nW+ëK—ͺ7sŸ™¬uè3ÔqìÙ=©N¬äŒÞg:ó™_Ü/d‹XùJ/¾±ãæNlo7ûÍôøq³‡[䔈Q5ÏÏóË‹ÝR^7щª÷Í.]~dï…éóCTïc‹àoÁÿ^8t­ÿ÷ÚýìÂ…’éŸÔîg6ógµû§… - qÐý“ÂÁfþê û'…ƒÍüÕA÷÷ /ª"™‡OxÛï5Oâ¢ÏÆ”äÛGº2ÊcÌ:ehA0ù°|=aXÞmÅ»8zɪW•z'•Rw1¥¥S¾ˆd&—›ádWÌW!#»RÕlÕãŽåªü)É^ßá¼ ô¨§gÖ´yƒV?[dwùNQ OK%ÁõÓåRkkW–‘á2¬ë½n“l£Ÿ–Íæ•Äj¶¼>O`q^g#u‰q.Fú©n¬8ŹÁð Õb¬Mo§‘›È“=ÓÌ„•nϳ mµ˜h¤¿|ÞîÜÚl,XîA}{Ä*Ó=·´Î‡BI"Ý9<éßG¯äÅíùðÜ5Ú‡‹÷̪+÷r†Íú+òZ§žØf¿~%ªãGQš]Kÿùm „–pLþþÿ?jýg…]X?¹ÖVèP×ÿɵþ³BÃf~v­’#Áøe‡aËaA£xôÝÊà·ã³J´÷å.©ŽoSJrK;¸F÷oa}SÜûâù¿7µ¤áøµ½ÿ¿¤°™_Üûÿáh~vïÿÃïÍß*i8~mïÿŸŽæÿXRØÌ/îý?š_Òû¿`üGžhüÒÞÿ»GóOJzÊ~mïÿËÑüºÞÿ¹Cà¿ó„ÍüâÞÿG 2ÕoT¥Û#PÒR-|f&¹ì˰ñÊ}aDçg­s:¹ØN¿okž¿êt‘­p5£êÅÀ‘ÞŠ?Œõ˜{/kÊŸ _¨ê³0 äX©Vh+PGÂ<в/þ¿^+wZÈ,Ϻ¹lõµ9µïE° n3:2?;ò²tÆ“±m/‡k›vmý#ÀfþìÇ ~ϳνe¢'õ_¾º¤Ï?’7\ÜJ~fåu?_Ê$_«~ºÌ–ÃØÞiì¼Õpsf½Ów®;jEÜÞàïlæ¿¿ö¹TûFµ¯²5!Õgzõw¬Ÿ9®ËךÛÝ†ÓØcÛh//‹t<³Ôú£ù(z1ÇýL Ÿ™éì¸Ýºªzc䨟 ˆçרÍù|Ê;Ÿz]žÅÕc¼›²÷BaQ¾´ÓƒK¶'çu´„mglt9GºŸÞxÃf·téTmïÖ-7ã~/_dz‡ÜŸlæ?þî/›‘:äÛžò=óTÕN?}ÍXø³Ì”½:ãÊÙ¡f¶«³×íг‰ÜQ»Cëm7zLL*¶›&›m>t²>ÝĬêz4Iü6󩪵ê,PøÆ'P›ëìcÅçwƪÒmP-?Ï`±¾oÅÉl“ÛõFþö}.Oç;µ÷)Õêí×ñ†Sy„×òwF¯TwõŸœAž±áÍ¡ËKìuiz9?“¿N¯’/âÞÀ1‹Î’†ËɺÝ4³buH-×­Ü– »Ó¨Më9Ðêd~)WËu^*73uñ?læ¿¿á?B ×R°÷³Î~FtŸ öD;Zˆ‡²]ß³ï:[IU9é<Ë—SäUºO.Aq¤_… Æÿ£ùןоo?û|wwŽàËîÓ˜UªÉVfòx1'Üá~ÀW·öÝÖ¯Ílý}­s'ùZUkùÆ×Ò`å\‹ã®u-L›Ø­€o.áýÿ'B 8D÷ºÖz{¡[Ÿ¬œÁ4Ü­b&ÛùÜhªð•¾0ÕÚã¿õ¹‹³ªn‡M¥“¡6åØyº+¾sú¶˜Ó‡B¶»?ä—Çá1Ï0åÓ_€P¼ÿ‹oEðHH›æ¡XðR+'çNgõ1ÍŒ>õ§ÔkàSÍkN¬IM¤\MÞêe¿«uJ‰à^¤‹ø|<.ä^i~­'gy¶&Îs•±Ê E°ý9ð?aö÷‡ü¼F®Íƒ’šÕ[ælœ8lîeún'®Ê£^¥"ŸÊµ¹ Kc3¯Bvº•_—@:·«žó9á¸)fÝæ¾šm¨ûFÆëÌšÛ˜µ„LüöâC YõT 1«V iê6ã6P IªÊÖ;Ê'£>oM®z[Š÷‘çÕÌ©;*]–»‚™œoª-k ÿ6·\Òz5fÄÍ,6î †÷ ]=ÿ;Àfþ»üGª'læSýGóO¨þž£hÿ¤¤hüÒÞÿGóKŠ)¿¶÷¿Í/îýŸ6þÏðÞÚ¯íý¿v4?§¤°™_Üûˆ'¿´÷Æø«% WÒ¿¶÷ÿ×£ù‰_¨ðFþ¯í}Ä _Úûÿpü­’Âf~qïÿ·£ù=ÕDlÈõ(³¨,îjÂÖŸ½a´q+Ä0dz{ùÅarÛ®·[:¹^7>ÒzÙ-›ù+ÑØÎ&Gxomš=Ô.“Â8û·¹ÓÏo<ÕƒHEk‹Ä”~”N¦YÊ—@mgŸhØ7&+Í<}?Øðýi·åƒÌnÕî2»Å“³Ï.ïNsÎÌ›0/ë1j¾+÷Á=þ9þÀfþãïþ#R¡“þFµ•…%× Ïmµ)ƯzrcÏ~fÚ½1·òêÔë!1e¿¸=›ú&ã.ïUÞ;}ö4#ªùËdýߎHm©A¡ù½Él|ü?Bèfüןüžê¨¼äC[”‹ ©®Š÷@#_æ3žY÷®;ÐÛžúÜõ´/ðüeím—e¼»ÎÓ|ç9#ÇQÜ©u,|Ø#¥píÙ›:³K­§ŸßxZ8¥^5|Šhõ4õÙò_W ·cqÝ¿îì³{ЧØ+ìù˜¿nÓëÇ"`÷ïÙ¢üÁ&B`£ˆ·ú©ÊêÙ¥ïò»-VÍÓ„PRý¯oøRs”ùFõÔsáÊ)ªº¶Mš<ž~ñjúŸã¢KÁéørÒ]¥Ý _ÅÊÓÇlÉ0W§ÝyC?¾?öÓÖåØÙ¦ð£ÝüŒï­ö2yù'Jª¿½øFµðì29ƒT#{)P-×~]¥ÕóñÚ­ã>QX .Íq>&z°iyØ}%Gç˜d×ÃA}ʼqGЧ£V'}7F‘Z¸"hŒ*àøsà÷<¥ <–J 6ýpµö2V£Çˆƒèm3 ÎŒ¾è•[Å—‰Ãt«F£žUýRz;UÙo}ɼ‰S¯å´‰]]M/£ÿ¡ù¿¿ A 'ߩƎj@ª+ªó4Ù–ïËAìZC/ž#®ÛãP?,2Øné´ä~˜ 2pú·V—ëÔ«¶Ý«¯A-W[HÛ\e÷ÿi;ïvE‘­os1爂‰  ( Á""¥ßÿ-œ>3gæéžw÷ô™n6ž®ú±*®Å“-jrzaÓ_FŒŽß¤.^€'œ¡òå§ÒBKÖ½»š·Š(Jg=Ù9˜«õJWó1TÚ´š‰Åj¤ö£0/…yóß¼ã.ß™Ìˉî˜-xQòñçøËŽÃé)Mªeà’”íUŸ-Úá|Ò £GxVgêΰâažl÷ñÆMTœ·[âgå×'ÒÛœ÷ë÷ú4£¥*4*ÐÕ1k½k” š_@åøÿÿ(^Nœ¡ (ÅÛpI±µÇ®-̽©v¾:+_¹Æ´†`>ö² ôÜlÓvžä*çæ»,Ö¢O®Ï_W¹<5J{”>¥SȤÜX"ÔŠN #‰8—þ7øl ‚”z-¯àpü§¿ej÷±Ö õªmŸõw9\^…‰®›*¥Ô›äp½7ˆç6/Õ…ÌÍÐá y†Vޙɒ-¦Çõ¤–mê• ¹ÅÂìQê÷“€%Ÿ$K”€<V¬èr‡;yNŸ9ÝæfŸ/íš{¥»+mí–”˜K¡$ŠKé åçIm™fŽè.I—ùÄX`1ªÊÆÈ7¿“‰9•ø*¢»ùÛ€*S#€Ý/rX³O¥¦™3!¦ºvÕ°•½6Z>5¤”A7ŠV(Qβ­“˜˜£ilZp”7½x¦¢…`R£×/*ãáEªÔøMì‡èÿp¸—©Ïê©´UŸ¸÷®—AómÖ º{ü–wlL<Ë2ry® —JÈ,’,L^ôi¶ø“úuêS!“õGï¶ý%j³€$f@&ò_ˆÂv.ù)ìˆOžÍSU¹áK°Ù…æíqEom=m\JXÓo:Zo¸–9>,Ò‰þi:}Rgº6×ÏãÀo\(ey¿R±ÃÞáIîF’·ò°êŸÈÏžŸBt7?ºJæ}~;»'ÒvÄÇ|sioWQcUI¯n›™wX¹rÍÍAgÉ8SCšˆ(¶¥ÞýÝŽJ´}”Σ{’‚È"s©Ø ;—#~â•>«+×ÿ ª88LC%zGsŸª6»ÊNð¡J+ý^‚TrƤ©í-Þõ±Ü–TBŽHsŒÒdL1ÆâçE àór âØ-‡lÝÝAÚ_ð[Hõÿöyß¹ï‡È5·Êr“` {¡bêúBoO÷Sì°¶'-?¼R UŒž°“ãÜ4E —~Êê—‡߬ +rsà‰åÎ@h—ûƒ:(û¥6ê‹ý2õóˆ^IøN1@•°Ð6h}&B…{@·oÒØ£*RB~ìì6‚VžÜ‰øƒsÑ·ºÓ–xêÎÛòAk.¶öˆ¾í¬¼Õ>îo2§´aÌ—º½wvâU÷FCO[ûÖùWðŸ…à¥~AgøU©_Ð¥öþªÔ/àÿÞÍÿºõ?:#àßmýÎ'ý¯¶þ?êÿФ°š¹õÿïÝü+­ÿÑÍÐÿnët~ºÀ¿Úú?Û~Ť°š¹õÿt7ÿ^ëtF)ŠÿËÖ§ëp­¢7ÐQ]JÀf\”Þæ³¬›!(¡ÉV b5úžFÒkg±Šç Ù’7£ØT·¼³ äR5‹ñôÞ(mds_öŽº°hÜÔ®ƒŸv»^óðCDÑÁ¿ý‡þ#µB”ßB©ÆÚPSÛ DÏèS?Þ $´{A›˜,¼1R‘¯7žSNÊQ™Ø%Z=-dpUe!­ï¹`è ck"¸_ÕÁyй‡[ò|ycþ "£¡vJå[°õm[ŧÌ¿tAi+nAÉËÇ!ƃ˜q¬—êµN¯ÔS¼›ÛÛù©¢™˜¾ùs˜÷xQcÚÊWò£ÙiS??2+¹í´þ+øo·« °T êB7SåJ;ùIíí²V…Û!ô˃WcÊK˜Ö´)™{ЖÞÚˆõ W5nÇ;)§%wý>ˆÍ¼®¯ƒ£¬þ=`5ÿP`®ÐívÔ—¯¬ Ôz¬=Gejœo]“|lãwñ6å׿¥M[öÁx#Gsq]ö ‹ŠBªš|}ßÔaC~n)?xÊçØâ½~öÌ㪿éi«8ÕSŸ.I-f_[€ù( 2}Pî¼uP6ÄlÈwÏÔc€$å[Ѷg°—CΫ\ÌJñâì›—r ª2âoótÆ“Kyü&ÕoW5h²ÞòO5’QÚõçøñ_&-VâPç¬G 5z”Õ›{úïC´¹} øöνÞüóYñP×>æÏð´^ m•›·µ“âU.…ÒY :§èƒ(-‡7©ù™CÈ‹ qß}‘·ö£kߤÚÔ»Y(uÝŒÁ±Ô€R7˜Þ®fîÙÚ™”¯zªëPe÷÷Ú¾]¬lû6x;£¯ò•/E]@jNËö:ö íèmÀ‡2äeÉNöÚ’íïÕ_ì›Xã£ó·=tqg¨>ìvo¾n„õ¥ž zI™ò3HOsÙ ~?¥‡¥»É-OSÒu‹Æã¦> ¬õvô4…,—3¸b—µ–·$ë.š¢/kIý Jµúýä§ð©lýMGØ ‡&½‘8lxÂz¶ÉÉÛ۲Ĝ’ǃuãŒîì(ìŠùñš#ùsjÔ]6ïú e¦z'‹½'M­ 6jËl…ì©B‡ŒábÿWŠA ŠÝÒp,ÅlP.7¢¤¾Ç.Óîß.f[º†Sæy&x˺³Ý©–“ü±ÜÜZøÊªÚ¬Àd+óq@Û²r“+›ÊŽkûYfô¬çr¤âœŸÊe"•b+AúNñŠ#ª Š‹+;hãðôùjöžo­ë3øS¾ÄÝì6Àö8MÏJ·Åt<ýž_î“¥…RòsSÓ;§éó6“{ì(A‰Ég‚|×é™È`iÜP9œÂ½ÂÏVóÇ (JË6ܘç äÊçGb¼9«Ë¤| zö´£”Ç(XIz-¥®ÎCúÂnV±ËÜ€›Âi±’‹¬ÐUÀ¸c©¸To·¸v¿“™øõAäÂu€3ÕÙ GîÔ?Et7Ñ`«ì0Ø4ËK\­àVƒG4=«µsŠ˜]µD³9‹¥X¹šäçã®0NÓÐ'ký½§^þÜ âfÕ¥và@Ž‚Ë‰°ËÊ…(Ð ŸêxôÜsxµ;Dóñ+%gO“ý}ÖjLzÍÆÙ=”؉‰9éí¡ùú1È.ôN1éuƒö–bŠC%4f>J›CÌ«"ÁQ…@®¥èÓ™=ŽbæE‚ð¢—Gº?¬æïÿáƒs¢xy˜w»htR*-KÚB•‹‹C{nöû'†EyªK<©„zI“&eaƒ®êø¼/-¬aÅŸ8¡µxöò,Ö{ËT/Té _èÉ8öz)¾Ô}|µ»£ÖÑ;ð¸iþ â“y€h»6@o ª›7v`in°RlÿÙ‚f¹~3X )¸©u†Óu±Î,Oq÷¶[W¥ÒæÔž*ʱWiî»avHÌ}ÛÖ€µÓ…[`œ˜ó釈¢ƒû_ú°š_–ú‘Ñ~Uêtþö¿1é§ ü«­ÿÿíÿ›ÖÿèŒâiÿnët~ºÀ¿Úú_7ÿ“ÂjþåÖÿ»»ù¶þGg”Ÿö¯´>g ßt®ß³O0å?@7ÕÏŒØ6/™k èNÛ'JQ÷¤<\¸L½Æ_—Ó:Tù Å#8îåcŒjnÉÄU³ÉÒÖ´Ì}´rÄÀ50twÕy¾jù7¿Ÿ|-°@N:”zÎÍú.@N<Ýþ;ôÎ=BÍ„NFé?6Ì6ʳñFò\pæçÂúü…Òñe%•¾ln팾U­|¿¾7ÑÔÃ6æ9ý¼‡~÷] 1ÉÚíb¸þU|Bª*ù&Õ?tš¨ÌA±Ò< «!{Ä PN „¸ùm_pÿ=47º:¯\ë%d^WÄJÙZvýô ójFi)DO£öÕFû¨ £êm÷îìmzÓ•ÜÍØýC´&üGg}°„tôy+#ú˜Ÿ‚o^@IÈ£!{AÇþNðù2•ËÊyn*"ª6õœhfÑíª{÷¹3ôš·µ`„º*$e\ž›ó¹µÛ”ÈÁöÀjþRò÷øM*wºPêrrØl„‚Ò 1û–Õëµ±ç}‘ûÃcVtçU! tŸæK;ìEF·Ð\Q7*}ÌÐ}Ã9ëMïüP•Wï¹ÝË’¿)¡&Þ{ÞVlÍO!Jûýä¿¥Ò4ô©ÕöQƒÖ$ œK» \aÊAðŠMüä½¼qKcsÞ€¢uÈ’Œe.rýÃ^P6W­{Ð/;ÍÎ_·YG‰öÐò Ç}±“µ¸2›U¿ËˆÿíËè7ü šôª8Ð^?Á”íxñÉê 9o\: ˜Üüh縬cžv\á`ÓpÔܮԔtÎÞ‘†­ÐÎÔÞ\ƒ×Aâiãºê/;ßUe!5¬®ÿXÍ÷Š¿‡oR ”ºå¡IŸ{(ÕW IoÂò“ÕÖãòcKÇè{ö>RÎJŸŽúÝ& › m}“¹jÒ; £íõ ‹§ö¢ˆÐƺ«TŽBÊkhœ=6]ëŸGRŽ¿K…cÊÞpжP*K ô’ÙOVïsÍåG¢Áûêµy4íC~ÆP{-îÏÔm¡ÓØn¸jSÅÛz»ÚÉï@þ–àÏÑ—ŒÎb}E„8®ÿ!:Ñ‹°«†Ð¤7-Ê뼸 TsË \>D_J•Ôú„qÅ'|ÀÜ0£¸;o—CúìZš¾•ÝŽ’syY$ñ™|Š+•Ä$ÞjÊ2ÇHmé¸`¿ZSi!`Üú{ˆBª?ºö Ôò›Ôbö¥âàJPå‘LJuŠöƒn@Vîã˜:ž}“Æã¾3kóPцûf4<•3s¥µ¹Z­ãÛµÀÛ±³À^¼özÉ’Ê¢‰Ą̈v¤È÷WÿŸÕó©å›g¨¤ÇR¾ Ê›„ðlºÞc8ꕽi)6½Š­t@”…´ßÔDq7éû«Í=Ëðë·Úç„ÙeÙ«Á² _ŠñóÎIZÏúá%êSoÊS¼X[ÿC”3a/$zpÒ¯áô„B·F-ä» !è¡•h²ñ3v£t+³Áô¬rƒ•UÅ ‚¦9 ^¹¶4^çÒr•¡² ®THÌ¡·˜½'GvJ˜‹5C%¦»e…¶»µÍE9þö¾I¥ÓPê¦(ÂaßöA9;¬=[ƒëë®sñf‰FÙi5Õɱ°q–Fû`/w‡UŒÝ¬Õî|’A´³á.›YÆž©å$ÍXéÅ”F›p%)ÁjÆŽ7ݦ³ý‡¨rþL(ôádÚápb!´_ã±+±s︖O®×.a—SÄ­[0fôTg6UؗĬõHrWûÕ[t ±9Ý[JƒžVnõ±;¢TCÏuFm%M`²Œ"·£`¿Ðÿ!jyœI+8ì'()æóÙJ´«wÓo3._[×^q9…‡ó‰jïßë#±›ÍJR”øP@kÉæ²eÑåY:‰"ô,]Ìk ";’4/Gö{"B$Ÿã2>êŠ]"… è¿Ç'¤úƒkuÜ¡ºPêj¯€ræ>ãsÝÃ…¼ lK;\ ý—0fEËãµ¶Ü2z­•Ý¥jìÝ8bóO癃4ÌDyÑw> ߉n’ÐØ0Ósah/Ï•!óšÿï(Ž6Ägõ,$ÕgÓ?J-²—Á Ö=ÌWþÆì4Ö¾>š¹å~æ11“‘¾²HçÛ¡š™Z 9>^¥ƒè#£¹³_1‚$· |\£ÒCkgöó3yŸãÏÎLHƒ'J.£ûÄ}è\^œæø²m(¶ÒèÖù¼åË÷(9I¯f\(9…ØRÖì÷Œz±!ƒõÔ礞‹‡Ô¦= GÛH|cb$p1|²è'‡ÓA63¸è©ÂÝÍwŠAqÑ­ì8a‚ç Uœ»ÞÜæèõn(s¯¥žÌùRim­­D_¶powùZ(·y6¿¾1 dw›~Ò£@náÞA-ºRŸØ>™Ö6‘“‰GVØ{8»f'¤þ!@qO×AÉ æšyŽ?㦑žC•ƒ‡:£5YFðáúÐm…еã–ïUL™çæÍ=³\RædÝ>XÔkÖ;ŒÔwp"÷z!³eÎ!&ôÈÃzÓÇQP†¥»îÔ‹}í÷“¯`»gû1èlj÷¦ý4³T±Š|—»§WzlÏN,º¥…Þ)6gˆ©Ešö–ƒÙXn{•Єõ(m2[2§64‚~æ÷ø¹ L|f‡¡“8ž†Kýâ n`ï xN}|ÑÝü¹ä¹šfÛ49ò÷ïCÙ-·vóžqÇÕy@\X¹Ruæ9­sgXÔxMZa†Æóe¨.Ö&̱Ÿ c7i}d`6¬<¤å'r+Jü@h+â T¥/ö­ßŽ«Æ?Ä¡ÖÖ¾w„›à²¶Å6ƒ«6Õ¬æqg»·=?cRÚŠ®»™ÆÚ™³/~ž_¼![Ûƒ·6’ƒz¨eûÙFûbïTî·c§Z/„{ÞŒ_;½^ê6è¾'ÙÝQÏñø-¤úß%ýÝAÅí5“ÜJzÙC¡D¦»|óµÎôLå:“–_íÒûɪ‹B“Ÿö[o:ÚöäáRéîF´ÞfùC7a¯/ÞÜ:$²¹CÏNúl€¶9?ÄÛãÒ9ñÈþ`5œ¤èÆAÁÉ` 0®ö"V Ë¤<èNßàüUí@Ç:/ªq€¦´Zà•¼žÿ4«Ô=^ž0·}ë4wÇ«ë0e‡¿žë¢xÅH&ò=/K®­_*…ÞáÌÃÛi]m„¶ê¿N?êü!QêtÂj~YêtÂj~YêðŸ»ù÷Zÿ£3êÿnët~ºÀ¿Úú?Ñ~Ù¤°š¹õÿs7ߤ†h Ø”ª×¡T¡pÿ&µ×‡R« ”z<%Ú<5!ãõý [{ê ŸÞFicáæ›ë 7S¸b:#]–VU¹Tú ãÌÏÐ(9é䛨wì–o§ˆÓñçféÌC“:ã!@ôW¼ÎåB‰ýtÙ=ƒb?• Åkëñâ>8Ʀ7 ),œã±Ë]K[‘¿TÛUéôPÊ©e¬ôãÆ›Ø‡w²9l¥EhNî¹ÃþºpŒï!ŠþèÚ!b €¤K%J¬ehÍiŠa§ 0ìëꀢÛGÂò,;ðNªûØZé€R”!ô ¬–ÔJÐNׯwÂî®Ü¢änÎÁ”RŽÃLUµ³^êóbÌÔ¢Mc1«_öUÏ»é½ì÷Ž-3ì s’%V!V?€¬óÉHçç Iäô A1—Ò–o€ŽÝÿ$ {áSjõÑc ã{ú5ƒnÿ"Ø^©zÈTfžë/}Ïi]{6CíböÇ.%¿xÙ+‡Q¸¿×ŸdX"!ü<¾I%†e8ìÓQ^gVÐ;‹RüÞ%{· ]>Ô碅ÀÇcññíˆÔÅ+ÿ:¾±ÐÍd³úƒÖæÊŽ(XŠbW;ª<5R榌l­uÛ ×+¥Ë «˜'²h×ùbØæè¤"9(•ªé°–ã°Í“}Pzvamð~=^…Uõ>ZÅ'nÉ<§·ü\Ù·½2jÈKÐz˃°K[A4 (H¯¼Þ,GÆFª=èØt)KÀ‡™5¿¿ ?’ÚìÏã›ÎÙ¸Ð:ö[^ç²³‡}´¥Ò¥!(—Ús_¾¿ªztÒŸ\ïG†=fRôÒ\®îK½£ðËÝ(9\(hkºÜT.6'¶DŒ_½óž´J¤›¸ªÀ—å v>2ÚçøSøTštP‰ò:q¨Sà´m£¬^-xêàÄ¢z›-NÑÝ\:ËÌÌ>æ*óýƒZÍTÀ¦Êñc6Õcjº†ý~¶æÍov‡[ô[óu÷ýº-òÓê¥Ç%ú6¶ŽGoäë¯Yu¸=®—ƒMƒ†kð xõyZûl%×.š®B̶éÎxŠË Æ€« “yÇ9f”+.¾ XÍ'Pj#õ›Ôbv;ØÔµAIÙ°fËäcW’åû¤à…nm:ªœ2Û2JëjéœÛ•oÕJGìcnGÈÓÛËNÍÎ<ƒî,Aô£ï@1”šÑ´‘šMf‡²8)>^ÂdÄ—?€Æ{Ф'êìœfp,ÅpfB£¼Îàù`†~¦ÀH·E¨×n¥ˆŠL£¾ïí[Ííy1mHaòÝZî«WnÓE'7oΒܱÍäÇÍîd¾ã*í3”p)®©F6+Rü+Åÿ(KõÏ%?@ dÚU®¢ôšÃÚ8…·l;÷HL2Û…ÍóÎúÈx'ÊåLߺ”´lÁ«È«D¹­7:¿«rN·SYl4¬2K]zUúDì›ã[³Ü¦šü­?êÌOÙŸœædŸÆ·¤RoŠ?…(ÐZg Îp3ú„¡ÄÍÏp^Š¥½ÃóÒpZÉûâd’“ƒÍRflŸ`›ùí’•‹RßJ•„))––R²Xœ¥==7qZ\šZïíù:·2„6I ŸôÑÔ¹4´©°5´Ç³ nèÊîçÐþ< ‡}¢;è”åÌùêwáí¬.£(Öy¢œ×Ø®.µ½Ñ³Bw¾Mß™*eV‡æaý“Ÿ«·l†™¢çø¤*&#jÆÉ!¢Å‰´E¥†‡V.;8÷ÒŶÂLÝŽþ‚(4ôâ¿ œ˜Åò  J1Kžëy”‚zwNF¸ÉY÷\w´W­÷VNcYß¼µE^|UÐ’‹]¯…í¦ö#èò³ ÆM} FÊ1|‘É7ó"2A31 ‡I“ƒcF1“—ÞPr”ÅoÄ$Qôq&ôÃKõ†¥©T)!Ývóü÷«ùáµàˆ¯cQ êè¼AÞ®fÆ}Ô]…±R›«!«yB¯p­«ÛZè>1CÌÛœö–³õXn¿e*1c£´„Qº×ÖÉ\3cHöhã³z^Å•3\¶pã¸ç vš¾ûë4‘øyìp’Èω”å[\gê£Ýe¸’]Ò«MGpÈÊ}ùÐçì@ b ‹zÙIë!T¨]ŸìŽÒfž sÇØ„@.÷9>/ßù¡Ã_ÄaåqTžèêƒ:8šý‡âF{¿wÝ^¨ŸÇù•êŸL!]15£X¿(b&;”Ï„Š)KËÁc%OÏÔ62ÚäÁ½ jÉqõ ¶B ÇnÙì­g‹PVª eÅ›}±÷êBMñ!¬!;êÉDîõÒåE÷mvVÝa¾)ýQHõG×Ì%n´L=³‘Üø(RC÷Æèp¡·^CÆ¡C|,·J£Qz/1øy^\ „¦!ôÅ®±ë…»«Ýë%¯×î{ïß?‘ÛÑ+ìsñw7qH';:“ËvH)tÒ k›‹V­=.w[?-ÝÂçòjñŠökºÇ>x!·Ê/Ò2‘c*ç^–Úu'yâ0±Ñaå^)õ[/¯Ñ}ëf¯›°vd'}éö휳ZV[LÕTZÈý 6Ï«³Ñœ7ÏDxnba"ú¶]ÑÓþϺmäßÓÈ3\äù óÁ Éø uþuãbd§°Rx®R ‹í°pØ»`ì‹nz—µ¥÷N¿xoP=‰^\µ·7üºÝßR”qr³ Þ½‘œw ¤»ýCDÙvß)þ)©_Ðå§ýªÔ/茌ö«R¿ óFû)©_Ðù¹›µõÐþ×­ÿÑu±õw Ô鈟¯]#: ¥6°8@­P<7²©Ú Ën¼Vå¹pϽÇݬ¾¨“»Ì÷çÞó—^¢ª­nD“–\ƒênÝÑ›°»A\¨{?Ýïmç ð\ôã'ŸãW TN9. õ^jÁS€&6&@wD ïW Ç([eµp¡X>ž+ô'µ—ït¸S÷Þ ŸzIìºtÍi—ssTbí ˆ._gmQ¿]ýtYÌûiuGï6>[¦Ûª_@èúý–ä*«4DP‡ž8ƒžÿɆ*ù(ŽËCPì-dPŒ©Ô{BžÎê<Ö¾HÞ·Ã sÛkϹ;>8y>éÍ¥2)EÕœùuþpZSÀ=n—ÀÚ‡ëƒ1}"Ú¾|{o  °aØ” (°ùlõôZ3þ™:‹]î\Mœ€°vPôýŠ…lùɾù/ÏØ±G,¤¹;17Ëëeñ.U²E¤/ÛcØîÝaÿtØ.úw+;®÷ב¹×ë v«>ÁPúVóÇÉßã¿¥šÕ&lø P¯pÅå- 0l5Xú®‚¢›ÃòêY V 5ôc­ùçQõš²Nñ=ºZ}¾>I±K”ÎÝÑ Ò6lb²½XÙºé7º´×Z¥Øn·=¥­ž²V_¬æsc¥R*”öZ­,(æšgPtRy€Í¬(Q݇WP}¾a`ξ…ßñ–̺ Ý.^ OÈoj·¶µÉ¹¡[9Ÿ°LÄDozí—ã¨Ýêd·ÕžByå•Ì Eî§ð_:l uÒK¶:~†,>qhÍ…RCóéMÐ×#ìj廦¼‡·ÉÃ-ë“?É#R›oJ˵±Hy’~G™­öxEQýGû¬˜å(ÐÖ›RfËI,§-ÿ@”2òç’ï®ÂŽ*+ ¥ò<~q£ ”ÈD‰Ò¬ñüËß |É£|w–å}R:NÔlsµbÌ™¸™ïk†>×$)³Tcš"l÷U|£XE|£%©Zñ1«,×Rº5ÿ)|Ö›?¤Î8ËÛšŠ†äl=…Rë%&äÂ!hŸÐ÷}Ÿ¤KîY÷.ëÙ‹<Œæm2z$Nîë§}·a²K­§Œ2ž3¹˜ÕøM9±•?ħ„´”Ì®zïÃ|;¥‹ü^BühAÎøl™¡ÿ‚(:øâ?¥ŠÐ¤›#ì¨'³ŠÙÛ `E÷Jq«Jö|›åžÄ¿½u˜öðÕ 8 DŽœóʬÙSÁš±§A~ÊÎ%ú§ðÑù醛hÜëÁáayQ¶l ”³ú2èÆŠ\dà.‘4zŽ'FUëükû–P¨«©¥YWŠñU]º7ŒæZ^‡-AÇÉ.Ÿ£ÁCÈ€f1:í7s2]Üœ= qŸü’Ú…ßtÂ>K¨sÞaÃgªam0Ÿ=¶Ê8 ©z‡jòíÔ[rY)̬*’¶k¥-=$KÎi–×à6¨ûªXçïd‹-•”ÞÂÓ&äüa.æ³pZžBLèy븟|°š^û&õäàš†Ræöц¾T}®ó™¯Hè7ÃâŽw9û4ÝöÒ4@ÔLmY”—¯$"n˜[Z¥foŒ;^«¥%G*õy0+·fJ>5œªÅÍè·3R5z:ìö©Ÿ@Š&€3~,ÿ[^g®ñO|J¨«œ%kÁóÌÎîæº·wÙÀ}žôM)iUºDVw•Ü5s9I\«Ù•^Þäy¤ª–|ý‚Ì7…~yª¾ouf$i]ÚºF“ãùe©Ò“F–¡­amüSHó’NæáôÔ±÷"¥‰„5¾W} ”ÆØcœª ›v=<óe´‚DBͤ\cÎéµÚ›¤ùc‚Ê.=ƒÌλÖ";%6/„¶/›òdFÏZãåœ'¨x²ã²ûœŽ¯åì䇀Õ|¯ø›ÔZ€Ã~Ilª* dŸÁ†Lb÷1‘$]î˜W.q}äY®5ô!·}m±m*&uËl\°‹µ8Ëqéø\id¢Ï‚NÉÓ$C£ÃSnÌòt‘j´‰Æ¨ÝŸá$ˆß£–ÿZŒÖ8óSî@ë6Ô9ÒFŸÕóìBNy<}=,¸® u¯ÝÑE:"¸}26­¼§æÃîc`ûpeα«Ðn8=O¯)• ßt‘m&ƵÅ5;’ÎÅ=¾t<{°¿(þÔ>stream 8$Þ*SüGG]ø­Á”¿oȦ轸²êõµâá†/ŸÇ’f׳;ŽÀïU[%§ÊWòüñ×&÷ó#Üùa?ÿ-«—Ì­ò°€)  {E?e€,³7€äê¹ðÔÀšÏrAÆ«Xrì·Ë æÞ=Þ€½®nÚj³¹¥63Íf'g" ng×ÜOš^Ö¨÷’ÍBÑ¿ ß^ Ôzð„tRø-«Ñ[@ëÏ@  »ÜráÅÝ'ªþlúP/…„Xé<üIøä~rÕËó›>Þr®™j­{*Náì×)x8—òÌ|úõ²ee«ÆÎ(R„¤ß9þ{ˆ²†¾SüMê0Lj·B‚‰8@3ù[¢tîTÅ|™è}²è” ŸÎ)¼k¶ý§Ùˆrº§Óéh 7÷üTs=×eéru{»óM«Î5§÷°Õ“4'ê@ß_»9EóçæJÝôçìWòöý òLzÒ9ù0IhеP¯ÿEêUEv4Åžb=]ƒ†è|y6lß kt=Rsç¸jq×Ò@ÏBþ¾9nvåía+-[ãË®qj& GæŠú´ÚÑæv7 2ì– îó¯Ju¡I™d Ý# }?'ú®½ÅÊâ Šf±°´º —Õ½¬Þµ07 '¼}´ÜÃîA—Íu’Æ*uØÝnc;í¦VnpÆ9牆' Í?·ÕÝv¥¬·Ä’ã”3™Ët0™þQjïŸK@þ@« yhÕ (Âa” z{i ¸T?‰Ò €ÍîYŸ®¬G·‘zÞSk²àxõâ©éÖq+ï;öhktÍi-1Ø»¹qô¦—.,2cMì UnânpÜo¡À8/#ûøRrŸ‘ªòU€ü;æ|Ó½y€"ßò:sY-J@P媲­€ ZÏ©é'æþóF“Ù+§ÙØq÷@Kvn¯W©ë~®×T¥vvjº9Ø’«8¥Œ¯¹|ðj²Äö QX³u€-£9mÝf)ê«ø&uWzý–&ZPì–5hÍÌ'û¸ý¼§÷è-'¦gº×§ã4Ôt4C¿VHÞ¶ÆjÁpÎKT__YLdöåíhóªÊÇý²¹Y •žÄe0J¼÷»pÙ¨èÓUïàЫØ*1T¡þ°š?NàHʸ ¨¾>¹Ò°R4(nFF”ÕûI@îÁø²ôñÜļMã›Çµ‘ÅÇÔKNš—g3­ýtV¢Éü6×*"r1˜%Σ=´ØìÉÍxΫ˜ÇÒü~T¥ùQ‡™ðÙ¬<⬛I~PgÒù¦ó“}l/Øê ã·GxÐI¥>ËKØð½ãÓß¾v?Voóƒ:¹(­“dÏÇ÷þ®UŒ]ÁÚ6ÍNë´N2àÄ£Øëº¬ßÂëìÝoÜã°òé«ö/[aò“ [}ÃÓºª¿©[=NŒËtyøU€Â² wq)ê´‘&ì 8 J { :¡üò.ò¤ÕE"OY¼Ë™«ÔJÖÒWg§Tˆ‘!âo“?¾TkyW7ö¼w>Ÿ3Œ]&çË£<=õ‰½G‚”ñ7B¼Íz‹x;>CnÂ'I†™øðDɰ.ù àÚ»E/H%áX":SW\ÈqòÑOO{¾[K6³gMOõì%íÌö}¦,l/CA–Â{v·ÊɦÎòâ$z§p¾¥f&c×Xk²8ÜÔj;‚;Pxê:‘À÷l¢€gcƒæÐ:>œôS\÷SäW[ô~{1¦ —PiÓ¥^ <^rF»•hëxÖÖ«·í,+M#ì7(Õ¶n¬¼zõÖëQÙ9öIʋޤ¿›æ‚–:a1vO‰©˜Mî’C¤ûýÇÐëñÁ9Öý¼‘?;í¶îÏ3b2œZ8ýU€Âs~hŸÍ¬ñ„®’î¹ýD¸ÄOÙvöÓÝy”¢¨å“ž"T±‰¨…î‚¿ž7Ââµ®§vº¹™¸/bKI¬©“x¥jãÖü~Nk—`P OÉ>×{{w­Ùí­ÖÁ²w'ÑuÏsÜå_ÅÓ¾Sü@ТЙ¥Xl)|rí°ÝT‰‰FÔŸêQàP¥áP5)I“]anŒ¨%ˆ³y&) ¥ñÃèG¾çè­û6IÆ×Wü0&Ãy±,ßùLŸ’ÅÞú«wÃzïnκÛ͘›¯ «sŠ—n”ºò ?'ã èã’ÃŽ3EQzó‡ülñ q´e B_•Ùyë̳ù4ÁÀUg:YÁÙŠR6–ž_Z‡eÞmž…ä£Á¶/ î)×x½?¥k"açkíôµX•Çv¹ÚË_ë•÷ÑïTvÓ× 2ÄRd%áè²Î6£©³LVûÂWrí¸²ná²\ó r‹ ò#ò*)‚B,„Á©—ùõ®ò­9Pùˆs q¹>›¹‚ŽìÉl€ìÚéƒì<1Ù6¶ãŸÇ©.ó7¹~T¥ÆÖoÐ1Õ“MI» ›MÝÕ7퇀Õüqò¥~Agt7¿*õ :?ñ´_”ú2ÚפfÏ kõ¡ÔK yÆ…&½Ï%Pè#Ð#(Ì P¬9ùÙ›ùRË9wöɳÉq"ÔÓ?T@.ît Þ²bb ²$&„…êC .fýp™†ì7”@õ&é·Ý±³wLû¤;yd³û{D»Îèrd J…+*€óy‡Rïù(ôt¬Á³E¿ `k©È·7ohÜsŠ=7@®æ C[óè°`ê‹ç©ª¯žE\ަÎÇ俎ª§` ë–ij¶“¯ÓÆÙ͇ÛÓ½¸Û| 7/ì¡ÄÚ*V^К‹”8ƒÂÿ#í½»TU¶>ÜÏb"0# ¢ ( (ŠJ0` ”~ÿ[ô>÷ì{öØk½kŒûÏCÃèîú1©8k2ÙÅëŸé : bxùP„ò»Ý%Ô;º@½»,ÔBkÞãN< ü~4ÒÅáûj³ú»¼-™áäIÙA£µ÷ž«^c{÷êÁñ*»Å=,Z\û+*eú©ñ%ÙÈÿ9þ7 Pj©¥º—/\ùÛI ´>d‰v9ÞF€TÉ2 Ë= ŠÕÖPìúÅž‘øØz&_ó‰©êŽ‹Š7QzÓ : kåã$˜×VËW$, ÊsxdŸÓUÉÏÇw;åø)s±Ü£§òd·ô?ÀOMs«[X[;7€‡¯/ ð ”»rÓí2Œ ²ƒ ½¥HæàB½§WtEuä}wØÊ»¢£lX§ŽbÐ<(ãW[ ¦Ïµ”^=œÂuûȵÉžôõ¸®=Ž­‡½=d÷k'5N†§#Õ+×£?Àÿ«“¹Â¥¡£PS/C‰ó- ¸ò÷'8I^6U´ø¬ÛHsµW̳٠½ÒkÅ0Ì“ëm¹GïÕ•î-£Þ†¤;»*w}s)÷Äãq¡zÇ}Ÿ=m¶ŠÖ›»“KF³£ÎN¶—éôƒ$´÷¿'ÿ€ŸPªÀ'¿j’j¤ž “* º×= ü!\ ~ƒ Ž…IT™:^hJÅÇëK/2Oþ‘÷½N'¨ÅèÍ‹ŽÜ;'8Ÿëú×éûéÉ|tàƒÓbß¿;O=„ gŽšÓÍgÞRÖŽ˜×¹W¶ÿ€¼ó×x3– Ôg? H„KÛZ+íƒíÀõ•^f£G›„ï³æ)%~<Ïůï4Ò©ýÞ­å¶—†Žyº‘§œpµ*ÛqOjl¾¬Äm2ül´UÕ^ʲ¸Ææsñ¦Q º#ñrüï•¿ò™þÖÖÉíEòÊñ.ÉÖºž‚Â@:ƒBŒ¡Ñ3_m‡íõA}!Õšs/,ò§Kýùxú®.{²Ö¶e{™Th·Q{¥möTÎn²ô_íZÁò§£úò<žò‹Ûd­˜Og.ÎÃÛT˜”ÖYöˆý€<)AáO:]¸òß#€ ’¸Ã4‰ê½€b³½ÃY ¸Úvüsáú:•ö‡#?${Ù{]½§xº;Ëõ7Ø8D%Zíý °ŒL/Kó'n¾ò›âüs›sóVKüÐ3Öøö ;—áŒìa§žaþIÍ“û' ®¯$®óÛ…rd€bîr‹oMã(Ý|¡æ:‰L¹—hwy^Ƽw84Ïûí¤«úÈ Ï·¤ßVÃ÷\jX.0D‹ç ¥’™±€|¥§^_ìMуÌOöS«;ɇ±û'`1ÿväkêä»÷lK)(µ‹C©lŠ÷-zî,Lõ£Æ“@çòõÅéæ®4Öûb~ìºQ©¼³³Óï~å;èq©½?þ´ù|~›­ùÌËàaï;ÅZJvBTUJWœW[»¢YN»–Ø®¦î¹–V–¸æ Ñ M:|=YDñÿÄuv“Ô$Z6êb ²GíQ˜hÃËBe ?_ž/·Ó¨´vº©‡³–„»¼·=¸æž<³M¥vžn?›û„D+v§¾êCOãã`V­ÛKÚ <¾Ùqà”˜ñ¼‰6þК(u“‚&í•ò°‚ø$þô'êýÝz•s/¬{ªÜéôH<9éw2ëÜ«™æÌ×—Åf{®¬k•ÛÀ)ãÌ좶î.·ƒ~6[g¶ïñü9‰FË÷QÖŸSYYVù¶måKïÊ?Öÿ ‰Kõ¯üGê…RLâ:yøà'‹øža‡'2O"<•¯a±)±ÝDÞUÑŒîpcÕX“›š¹n©å¼sH¯¦û#¹Ñ/ÓŸ„çê,õ:À!P¹(CuFid–_Ï÷—¿–æüŽS¦²:ÖêWZmîìDö\—‰ä­ˆQt!æ~ï;½zÙÊðnƒ®ô6ù¨Ûû¦¢¦Ð&Ò?ì}@ÜP¤ Ÿ:#F¯S6‰ë| .{çú¾Kþ Oá©]P±)Çëë+}åuÌ Óíd#;ЂÝg8NcY–æÔX*SêdÐȤMaÅní^v ç(¨¡=8){ËtƒÍIH®Çí¶QÃ#רùùÇåHûûµ[¥ÊL ×í™v¯8í„㎳Öz±×tð…ô’)ö›31Ä“Èýù¹óãríË~ë)I´N)ýS5¡+”çüÖŽlnØ>ºÅìéÙÑH¦CÓËJGÓ•açšoðË«Ðù=`1?G@`ﬣ­(RËZq½½äH¼Rœj\é5\t+ÑÐí4ðé…]ÈNÔ^©g¤ÝiתŒíŸd†ÏåL¶šÿ~FÏUí}­gÎáDö¶ù =gëÞWõè,Óþ|:5ýõ¤‰½·j. NJ1;xHke‚ösÏN±7ìühHp]üˆÝZ%Ò:óynÉÆH5Úß|ãÚîΔ¸iœp¦g Á´µ#ÐÅà~ZF–/¾Ü¹·l½§v¾w_Xo›»:ηž›L ôöã¨qû3>Õ¢%¶cÓí ¹ú±çËè‹—>)Ž®h· “½ÖÙØ:íïö1hsøGmgŽå#A®“KK¤½¨…¿…¦?›µ~‹ùûäßp*²ê-V’¼úÁpùþDú|¸éésð®hÝk(çA±%…“qwÙ\„ž?ì ¹›þQ»µè0ï4¿‡ÄÑŲ٭ßÞô÷væpz3î0N3È%ƒ·Ä2^náf«)×z|®$•ÆÙ<ÍÅOÚ…¨ú€m}E$!#›a¶Ç-[½˜› ùXš˜äû­öânJ¾ åŒh5VYa'|0~\Ô(()³Vׯ·9Ôb0…–XÔ妯z“|óÆyænÅh·«ß–ÏKþÆ,¦ö´ÉoÍàY¬nÅbÕXMŸýlö^¦µlîÆMãøD[¸øêx×vNC£hìÝÏñГ âôã¼7¦W(y´3»ó»%ôOS¦•\c\ïçë:ÃjÏuƒ®Õ3zÕíj å{KâÅ K¨*½Íf4WôÖtæöÚ•…jê A=ÿÆKõ®üå\,UŒ#9£µv¯Z‘în.™ôkÖGœ@ãn®vš@Ÿ@u謅_ìEc\“6uTÝjè¤áBt+,þHæÐôF¾>èÌå–…ò!.#[º$Öι†DÑ_dJE™!k…óšd ãn»1üVé-j÷œ_§í\6饎~Êï«p•½ÌZãÀÛ àù °£<ØÌ߬—¹¬ÙŒ†ˆðÄ&Ð_¨²c UdP¢kDþò›x Þãº;õòxÔΔùŒÅËŸào© óÇ/ðÿSêèL¢T-õ8tú:@©ûQà F|±üš‡R£Í àVŠ8Ûê<¥«PìÍØ¿lÔ…Kºæƒb­Ÿ,Šh|kA½1Pý;hÅù&>‹(üf†7ÏXF·n½šñÛz|mûO0vu¾4`ùG4è2p©‚|ö"|ƒÛ€< A¡H€ïDà¢;…Æ · ŠO€9BêÕIhahM¬v 2"@÷ø8_ßiD ÎËP_VP¯å“¹ÀÓWëWè¯ïÈ·ºúL-¡Ô‘ 0)}¸pÊB‰œ¶*¨ò¶á€ü ‰@~Ä• Xý'ƒ?¾ógPïwðj-„z…Ôk” ^·õÆ}€•H5ÞO2PåÖœ…÷º˜øÍ³ö“eUû‘‰ªîmç§7—3˜/þ °˜\˜®-–šB«î˰>ºQ’l†KÁ«"ï{€¨ÖÈ: õº}/†&ÀïÅÀ%XAñê8Å(ÖíÄÒm“lzÅ»Ó"Eqáݨ,ƒúêUê’ww¯Øî*ë³nÇÖFŸüþ£3?OÜÒ'ÈS…ŸøüóÍ‚Õ5@èß öz ’_D:„5ÂÄW _ª]c_ª}£s1‹GEú]~_ó./ö|89xrX­]fAÝC‰7~GûWÿ2¶bûø¦9óÇ­¦¦û~ÚÿfÍam­¬Ǥò‚ÖdP(±ÄbçO‰¶áŠ ågñÉ41-ŽbeŒ'{‘š:ŸßúÒŒCƒb`¾ÿP¯èt­½˜›Ã>W¯ùàa/ãGÖ-ï¨w¸œ^…–ã³çýbïu¤é.ÃFž*_¥_ó÷ Àvˤa9Pª»€RŸªºP ’ÄtÏÏ€¼  Ýv\¬Çï‡è¯ÂF»u|ñ+|~ƒQúáâ_ì¾]˜Å›–ªWE¿'kÏ‹ÊïûçIû¢9Ô9p jíòÑa‹ŽÜ*S“ìÅ)äÿ»9°UY¸âÏ“¤HÄø N"ݶ ¨Ì δ¹.Cöm4C%ˆ ¢õJ›ûý£ßÌÝnþ»û¾ÜzÆ÷¼™ã²«ap‚MSÞ!«{/®u÷Xe4ÞèöÌ ÐóèÇüéÜädÁ¾ÎÙ­Î`ñJ½EPj÷ ¥j/£sP¤¶H¥ï¹Äûµ®1`]ùé©ÅÎe“M¯«ê‘þiQA/þfÍ܈uv‡¨oO~)ëi-wÓlÅ ÆT׎&c}“¶RÒj+_zÖ°ïu—#8_ަ+æ—€Åüÿ’Š£¹Ä僾“hÙ Oߟd PßÎ#zd‡x¸Ì[/žK÷#ªN¯ôf`?»Òæà=:ÛÝ‘úÛR;sqÖøá4êm·õtú'Zþä×½A®ºÚúRß"Ëþ²Ø-s zŒ1fm•küŽœÖ°-U}XAKQ’¦ù'ª7É)­~B{³×;X Р+ Ç¡]\ï¡XÉ7ofî 7gíU™ÐqZ µÛl¢ýq-pýÛ ?ä‹t3©eq…äzzÐ2⚟›•);‹íykÆ–µ—*<þ/^¡T“ñaåâ$±lPÃî ‰êÝĽx†ËC-÷B¬°v/ÖS½sÔ>(>jÕÇ»q·üyè¹½n±Ëµw­Wù7á-/Uç°ÐwÛYoÐá¼E×33Ë0ʳTöËœ†3S÷‰Ô§‚AÒS´ŽüøoŠWøôÏý# 2HòuþDËJIbÙM4ÝLÁ¦VÌ<ü㎾>… wtÔZ¯ÈoÙ3nÛ‘ý]ïôõöõžY'¹¼X<ˆéÊlTpw»ƒa“z2HO=T¦¨tÏOö]£=É»FC? ›š® »òàÍš4” I—ÆPé]0g ÑÄ~›Ùþ5q¦¸g2u¿46¥K«ª¶}¼óÛÉGí;+¥7Ü %vdж˜îé<ÚÍYdzVS/¬»IÊ&ŸÊ¾4U¬f5u•oiåj©®Þƒ:­Næ\ñ‰wð¿'ÿ†¿¤æÉ 4éÕý&qIêCņm‡–ÊœŸûVîs› ÆÔ‰Ûaõý1Ú^“dx;×Fú+…È&=ôâ•Åäy<侀 çO§x†šë£Êq­•·“­ZÝÌîㆷÿŽ"§Çë½6Š/z‰h1Aá÷x/úÙÅýyñˆÌ]RI\g Ñ0¦·‹M°ùTã=]F ÷÷ò–Þ>_­¦³Ž?ìzHúüòy‚ÙºÄY–þÊSü#jzqw7`!-ÇM®ì(Ÿvú †Í4Þ²ãžH%CI¥ËÙ´Ò­_Š ¿ÇTŸz§¿²ÉS2‰?%䨎KË—7-ïïZ>HVkçµr‡3(x‹Z³‘£Ó²®@fÍÈà»3~4èMók —̬¬ÖyEY1W2ûÓz¸ë9û!n=ž’Lô°!þ¨V‡ƒ_ù7`1ÿ¸ò7>NÃùçãuNòtg`m6@‘ï(ï–Ñ™?¥sνÕfûqÀ©Ê4ƒànêq¤×òvX_Ö‚JkÞU ìô ×’aM/O¹žÚ`÷⨃—Y[]:{¦xÉ÷ÜÁ½0½ *V&+–\¬&–„\I«ÔvO¹ ìž²?Þ$ƒì?ûÃ&('£0u)LÅb°ºXKÍ?œÅ|èEñ±±±DYޤMvù®bõÑÔo|†U›Õ¥¯ROÆÜH’”ÓhÜÆˆë¤Ú2î3]©¸:ƒšÞ–…å™ôÖ>¾æKíÈ#å%àÝܵуuŸî­ Qá€ÅüÛeØCU@D P{EîÚz3xNxŒ‚Qï²NM¿P5–XKg;ߦc«G×¹Xùiá#QZÔFüX®ÈDî’dï*Áôß½%'°vWâÝ/®q¢ù]výOÓïRC'îÊÏkƒËãŸ:7x¥?ló}Šû…Vü³Uʘ 玗ÔE,û£±)ìšyÔp¶%b¿º»çç"%O€AUZY-4ËØ83¨‘2ÙJâãéUúË!ÑÒ»S—ïGÃA÷Ä5ÕΕi/;åõÜg§T:y]6Ò öQ(·:j¨&¨ü ÿñ¶€"7(fÛ作‘Áq‡/ÂÃ5UE¶ñàØuvdG_kÛ©³ø㤦ͤO'Ôg‹/óùOFV²$&¾šÑ·.ûRÏ=35>O¤;ݱvt*”£±õòiÕ6ܱÝâ_&L»•»ðíùvÁ´çËÙ?‘xÿ÷ ¶èP÷áçú´Ëû#&,÷{:˜Ÿ¶LØù8y"bVÏë`´øÞÏ«™Lí·z(n/c7säSœúH5¦›ë¯­M¾·ÕJ%žßIèjÕU·S'R;²Õ)óÙ.l¦‹¿®Lú¥d[ŽÃu˜´sV˜" @Îôó;IÞQ¸ã«Ý”6“wsq=›j"Yë½D =+ÆE¾OõEñc…'îÊ—ª~–êÆ;¤ºÊWö5Œ?æÂ7öýz·¢nºlÒ/´°™¶ÙýmÃp§ï™ÉšÃOËë“IØuKø”j£?@TÙ²‡S7v'»IhŽsšéë‹~´–ÕEMlÂÕŒòæ%hëRZÚíÉð!™æú•µûüÃ>ö-åÉœ*àÊ·6Ö fÅb§Õ,ó­qí.ÕUGÍ™Ücí¶ÝϽ…gÙæáZe›Ã§AìõCâRýïÉ¥X£}©k~yí¯n g¸X“éìœç¦5c_SÝbÔRFßbW2«†8ÈØ©‘€S¾xg¬îs^ÞuB«|cc»ðn·xªÍáŤy2®Ü,3ȥǴIJÖoúÓµÚ”k‘Õ8/ ‡Æ˜™½Åo¿!ÕƒŒÙÇh•6ù²¦]ÙqF1®%w£Çã÷w¼cÛ9Y'uLlG{BØõË%~\ÜÖºF£Ë°ñçÛ_¶3‡ŒÎ §ï¢%–§éOp¿)W›ÆyÞÿJ- ³V±^IÝšµ§ƒ÷jF¯—d†­Õ‘‡ûpY­ÛZ©^3¹Z›j™wKëζÞHÎNÃÚmsdÖ¯[O&:/Ž~>¢Nó£C£¡T.1rù~}—šäóRM2 0uÙsI’±ftZ ½ì¼ÚÂò›J|`ý KÊOú{Þ|èÍø…Ñ\¹DCT*¿DâëLŽ«Ë¼R2» ¯4-Nyìâ­ŒÑ%ÆÆq.ì„ôœ»i]³c¶ž«6‡ˆvk§PÛ&ù¸ûõ›i_kÏÕìY å]m!Ê·b‰Ã ý=¡ˆÂJ<·®6¢ËÈsÚ*‰õ%WÂßW¹(3^$¿„U8oúû?€ùñfÔ´ÄÄØ1¦Ôð±,³ƒ “{äOr,~ t ö­9ÒȈî¤×UÒj1^¡õ÷éêáõ±ÑCº¦ÿø)æ/©; Qq Pûð€*Û9€u5€ Ë"Äj°zþ Ðwƒz½@µDê€5Ú6](vw‚bã@Sõ4@^: ÅžëqðŸ˜[dÞB½½q<Ø5õˆäbý]dÜIHwõiPZÚïкuzç@ µ-ÀRÁ`ÒØþÓØãçc[ðxßlÓ ÆÍòо—@¯ù!@·"üKÍ‚w8¸]Ê"@+pîˆæ"}cE¨·­Æƒ˜žD¤NÃ[Ù4‚iÈÍ^sPš=ãNjò㇆Ç_ ÜMÈ幄¾¥VÓ/€Ý×(ÀËå&ÄLø ï—#€ù{ `JŠX¡2XN_AÅ;ÿçÙ,Ÿ°zèø " Ï4}ë4MâݼmD2ÏÂ[ߘ5·45÷)óñgn´˜ü?:žÍå–xЧ{€­ªÀK' à*ÏÜ»k¿²[€k8ý.ìUâ6t€5 hëÂíÐèûèŽÊÔâ((V‡u™='Nþæ4’a²ï™øÍA-¤–O«â-\n²¸ ´dÞD®<ý=*?¡IßaâCu|ðEŽùìªòTùÆxÿ³(ÌݾßQ4ÀYVHœýÀl>þ|ƒz¿ŸxoeÑXÊ£…èÈ£õH¾–¸ˆŒµðö–­W¦ÖïQÝÜÝeg}ËSéåe¼rfçJ¯©þ Y­ý÷ä¨CÓ6 `âÕ¸0 AžêP o¼9·9ä>ìßRä›\ à·±pÑ2c2'zÑçnï+UIr?¼ËL!Nºi<¬œ1:˜¡D;¨OéÕÍ¬ÇÆî¸7qx²/¥NÓ<¾éãÑÁ.³òïÐÍêœÑÖO»ÙE€Ÿ÷I‡IùŠÄt/!á@tdä«S¢ ½oˬ>kG'î“Ó+U/FÇÀ³S¿e6ãìЭÞÓçnâ43¹R¥1(Ìý”ŠNöýô~´ËßTi[Huú¿¬›¬¯î ÖÍ´\=•dF¸Ó€Ðå n_  wƒðñ?t,4Â×åÝZ&¯=¿ÇÈzfÚóÝ}«’ç›äX«"rÑE-2犟Οê^®rl¼ŸÔéuÚVaÓŠW¦N¢óúLy;ÊtÙ¿‘D©þï•@•$¬n•Ñ.§(uÓH%È@"; Bs HsûŠô´†ó#U­k ÿ̾N£{¾ž1®ã4g§†í£u#ycÅ_#Áù`¿¶Ï½·ƒÝ~c"»üÛ/o©oSr'‹šlGD,l>Í·vò&³ÎÍŒæïuâSXA§PçYúù€ +ɇùؘ2œÚq©ä<ÃwQȽ6}¯üè{+™Áù5§FG¶_Öno=ßã|qµ#±Ðó®cãà>:âÍ šBä4ô b/‚TcÓÙÕÿã‡.qÖAŒE<^õå¨{¯þ°«/B“î¶'gg@ VÉ—¹ŒŸôÇ  †Wçý’¦· [êcOJ‰£ë6.hÍs³Êv|ÞkôöRQn/ÙPõ*a꘩»i/¯öfÓå¤ÝºWî\WÛ¡[‡ñ–°ˆßYk}fA·ª5sºoTæaµZþ`1ÿ¸;'Z5>A©Ã=l7ÛKÕëB©ÃÑ(V»‘.N£Ë+§ ß{-—ºAV}—ö{2}`½õä·[ج½R6™o5é¡W"z˜YÃ`¹^Žv£ÝB³µ›ùÌÝÒfMŸ·æÍãº>³ szÖŽ¶%cÓ^R¿Ç_:ñb`ƒüá}KâOv£¨ô³ ¨ÇVªãí:èÄÍãcØ?G×i*@¶4¦ö²Ú ½g…®;Ë¡ÐÞ8)›[£O¬oÉ`>\ÜR5 ùlÌÍþn=³jîÁøšßÐà0«hd¾?˨©Àá¥)JÕŠ“Ý¥Fþ°-5 €÷>Pê7{$\Ù')Pá2·üPß °\¾ ¹»×np^.§™Ã>þ‰RÝÞ;QÑmQqeãÄïúê U™åµ4í,ªÅŒ0_Ô iÆXÍȶÐù­¢ÎDµ®º_rú±d–uù¾)èÔdGh—ªŸÿ7Àbþ>Û†RMÌMÝ“<˜xòÉx&¾¶ÓjØ–´ù?âÞõyßnû‚¿Ïyâ’€VÖøqA/oäµn'š™3¾Õ5ìG)i7S4Þõãl6Ñ.ÕRï²í«“Bå£Nzù"D‹R«—‡ã¿ÇtžË 4ö È@ÎêÓK¢í¢ÇúªÝ`h<(±/&h]|ü~·÷,ã¬Smt½—òViÐ(˜ájPž}Û;¸:귘ɰèuõŒ﫼0ϼÜ|´8”=åC.ÂÑâ{,@€Ä 9Z¼P|ÄÌòèï{¨Þ 6ûŽ Û’ø¡çAÑØwHn‡/´ØÔn÷Ehlå~ØŸíé5õ»|“$§«œ¼.fµˆ˜³óbÁêcz"§_uí–—Új­õFËñAVºé©.;½“-çöÕ‡ÜcxJvÔqÄe§A~ XÌÏ`úJíJ sf(É%AÁÛÂeqkÔÙŒ|}üÙ£wWÙÑWç¢ÑzxðSËic•JjxZHNäGžÒtkBÃk¡©|ÍåϧÃ\¢×Âé³* íîR<NgIÎ(i6ò’Ÿé£C¼6Éý°'Õæ ¿žmÉûo@ío$(f¯lÀItv}W7·þùŠêAy+ï ÇO[Øí_ÖÍFfL ßY¯ªå&§º…i“ù%?^ð¢b×¶í´[’l!¼X¢žò Bgæ}Ãèíq‹ôU.?¸íËIg#AçÿÀ‘µù—´ã¶ø =™eë…ž2Ì­Vw;Ç]þ.îû“é¦ûæv­ðýë²¾js®^I»Ƶ”öøpÙñR\ ŠC§‰áÕJR¡Yl &ò™í7°$0Ò[©µ]oµ¤3ÂB á=ÏaýºCä~ŸÝ¨Þ N–˜×ÖQ¸P+,h*ŒC²ü(,õÒùû)чóR⽸7œØƒ.g[vùdvøïÝuý˜ãøL¥—WrÃáù€Š·t¯ÐžaEXª?ïôºäfÀçö–Æm§Et£ߣ¯$ïàW¬—¦ä÷¸˜°-QÇä…óO|½´©‡R~eΙf ó:Ÿt;#ŒZŽ»ù*ëâ,Ëóc7Ðçˤ<÷*Ó?ЧÇñPþV¾¢~wr}sGãB*–y¡f68½®\õµÎÙ¥ÎxÅ]*û(týzDpx=J¢†~Ž¿È×Ê âJ›ô%ô‚íÑ OþáÜÇîû*³Íxéô ²QÊVùn,&s¡£­§Å‹¾WãŠr!äm×絸)šd½) Ó~SDGÂïqSÑÍÐÇûv’ÆÀkÙ~sà´žU¯uE“óɬÐF£Élÿ T~F–•B«U—f[¯3H— }k^U^±—&Whn' z'6*wŸíO­ûm§gr’L·ú'«Ó<4Ã$±Y“X“´½4FäoΟV£°(ó¿Ç‘/x/<®ÛI›Ë°h1ó~A禕Ûz¥·¥ãõ8+Ó›ôb{éûH¿QãÏÅS»ûl øNsCÙö¥i´»ÚŠqkÝ}k'ôn-|?Œš2aæçù­Ü(Æ_&É Õ+éé¬ötÓûš!25£_.ýÄ¥ú¿W~°£­S{³/Y•e`U*³ÝÁ¦'Õûª©ö¢ÃA9÷{7)ÔwÏAfƒ†=™˜|8ú…g;&sÆÛA.0®$ÖZ»×nú:›L šä‹“ňÕëz[´êôׂóοUC/ÕžG+±/”+–¼a+lC¼ßã¼ ð{a¶«u_§>›E…Ñnó©É:¡[bû½_ "J¬¹›6µ¡@|ÛÞôvG9ŽoM_cƒÆ¸NºÎäÒµçê¡ó!«-4MW,)פ¿§OsÅF’Z ?- ;ÉpYÚÍ.~IlfŸRº„Ç6ñ{ÀÙ„G̶ç®×·#l„—‹ùaíê ™ÕgÈŸrЭ…ú ýuò2ƒøÞøÇh~R¿™åyÍ褭j+wÚTXÜñhŽšÊ®:=—‘Çô^kÓ°è›óo‘¤0îøêæ„uª‚"ùÜ7‡¤!iY'œÕ?‹ùÇ•y/ýAucÙÎ)Éω­•Ä\\áèG½Ê²)µÌ ‡¨Ô$ïóJŽéZÕäBhªƒÕ¦3g+í&­^ÑŸ—…³•J©T«NéÐɧ÷†:°÷’0‡ïM>¾¤vy¶Œ^ðÍ´à™°þÁ\SÅ1L ¿@0J¹)¥‚ÜG_d‰ü¤iC"í Ð\Šé @nË@ö„‰rˆ¤R+\,µ’ñ  äÞ•È]d¿‚Ü–ü@XDܹ]±rVS€$A §å›‘bD,ν÷‰qù_ åÒ¤"ÌJ½Âm¬_‘(@{Ã:@›'  hu`?rHgîfÊ”2\tÒ½RG§¡Zð·(cìù\%rѦrq†¹݃èÁw£qtPŠ£÷©ïKáuª ¡V{ÿ@âüïɤ®KPªê/Zhï:;=51ˆu óhбd´u„¶Æ >´õÁƒ÷:})‘©9„`„3Pöíõs7J þjç‚´%ˆ‘ì¢ú1çq¨uÇÃ`:®÷ƒZ‰êýШóÑÒr -€*Ã@_ÑÏÇ뱪F@<€‘å@Ã… PÀ{èWá=”UhnìÒÈ3 ÿܯú±=€¬ òó ¥o‰wkéáï5Pâ‹ÔßŲ«PL^]|…hIyÆù{ÿ¹<î…_ ý|r§Ak"+¨r}X§lµ¥v(t¶V4€ /[€Õ+1@ß ÐŪõã‡î¿`Í ó@q6Ù”Ð}(zëÈæùˆ]Ïdf6bNb"Ò¸iá­lAm\7¸þø*ûÑ#£Iƒ»Kw„C²ðHŽð™³Pj¬CƒWp­z…Rïx9]8“¼áͧÇó€ùÂ`²]uïôš…¶^Ö—ñoy±h°çÈ¿°¯Hf¸OD>Tì'$ž\Ñá­Ÿê™R_&æïÌ›ßÝ2¹íŒêè* Á•BÂ/… Ãï&ŽÉÞ`ûô à‚÷¸×(ÿ¬.¶ðkv!Ÿ>°3ûÞ+ñ0{ç#e½PÞw2{—îÊ&ÔƒÎ>x!k`Xüû»™W+7*<­ö©ó辯Ê]ÀÓ³›Èæe¨›ßzÙ_ ž¬”:Oþã˜,U¡œw:òÜ¢ òJV„–»kìo﹨è)¥7ìVÙ ÐI1¯®cžàÙ[<ÙwÍyl>¸wOáíŽÄÏè&æßÈÕÕ«—â‘NÏ«9:šOWóSª(ï½ZŠßIÈŠÙåw“æ/ñ×VÄX¨Of96À]õ– 'Ò¯: òÜ+³ðþžÔ•tð&Ó…Wû5¨?3x†¿o[Æð&Í)ýªÐóRòà¬ôUc¶Ç7¼kÕ$ÔÊgGràÄ ¹œF·ï͆[êÕÜ»±ÎëáÔÙt^ù%þ£óˆp8É ç$ú„Xjb÷ónT|Ò¿›÷´mœfŠŸ|¾‹ÞÅ©Uºž;ÙÖùñä»Çhrèû«x¨ìcs²÷–øb·Æöö(„þ–Z#/OÍ„;)}çõõìŹÉnV€l­Ô-‰„\óö®ôKä­ËË×`=ÒPª‘zbpÁË ›ßqDÏΫÀʶüg¯g‡wB}f.p‘˜+ù§—„#>2ï]Ç%É}TÞc'(\föûë­m¦~÷7«e%^Û}Û«~ÄÖ­!^©,OF©´ÕÑÂ/Ь©üt?Þ)·¥>©·l£];·ðQh.Mó•-S»»œç—©ÙÇŽ_ÍÐSÛQœUðôn¾â„âªi/¯Lw³6rýu=)«mõ0µÅC;hì²,̗貘™ÔtI¡ÍéJ*ÌÃ4O@ô Ø–,VÐá ä3m!‚†¬“€ b6ªè±¤ .ÙÅ}HÕ·sÕ¯¹Ëqû¯Žz`{¥ŸYw6D1° µá˜¨¼FÜyÃò«mv9Zƽ…f„Š9UÃÙ<ðIoÞ¤ÖѼ9;”gVîT˜µ·ÒØÐ"H¦ê?Ç@¹Ý`·éä»êKJ $ ºÅNø¶w8ªk·kÑ[r~8ìž­ë®8oî\í}쎥¦×Þâ“t«¼9$—c;.-*¸Y›‡ ŽÅÃJßø ÕÈtZËiït¾N]§¦B½MN‘wŸˆL3Ñþ5`›÷G°--Þ̯í "@ƒT¬’E6XEÿ–óÊu*ÎG~Ut÷” Ž^îö&ëA#’§÷Wˆ˜õ¯LÌ@?_66§c}*ˆ‹îDl¨¢.·íä£AÚÙF÷:ÕP’|\»7TŸàˆ<>…™_ ›Ûè/Oþq<²àÇ€ªº…¨Ú ›¯α÷¢ôœ—‘lÃõÊm½LV;g•Ÿ7Èͼ[gì.{Ì£Á8=ë¨)dêÍ'ÄDÊ3´N-sM­däµ¢bã±ñPìñK»dÔJ,`ã—%#fÂú °˜¿Oþ€ Þ1ÀçØË¤µ ‹ï†åVŸƒM½u«/þèv—ʾHM7êñ®}´ý•|ä®ËJfòœÇü!œe²ø?m@¬2ú©RÆ4Õ jµæÔFïû´£€ÓRV:¥´¥túùHùP¯œò) Yå“#¿Å_vO¨óôYÀž ýÙ"OøPŸL1øåÒƒ|g«—2kû¢Ð“¶O®e8k½°^KÎw»¼/Ñ“iÞ«×GŸÓ¸½õ3Â}4š ²ãywJŒ˜{»¬¤G4#çĦ8ìjÚ›Ožrî0Ëʹµ–ùÇó þ°{"UØìs‹ÿ¼MÔ¾ñå“¡^n®NÝî¥cñd+éÊþRE¯UN%û76Â=–«B|sée?O?§éž¢oú90_êÓNEãæc™V6h“‘FXâø­.ž<Ÿ‹8©®Ïè$‘“•ÈV?% ÇÆÂüÿó+Óé1löU 9J•ºß¨z²°§X¾ç®j'çﵫævÇNÛÊZ.OgËéQ_Í×ã™g`šsÐ/÷ð¤¾,ö>}/=Îì|†»c Å|-bp[Œéþsjtúµ0T…p1ÝõŸA.;¨¤ ©N´ûkÀî© Mºî¯É7@Ýäå‹p¹keî—®þ99íUt(¸4î-žbËFoüÀº“mÝŒ¯Âr†Lúöddh[­–>G%Qr5õ1”$ì-^–»Ô r1á=l•z@àÚ½”d y»ÖL^Äìí##´né”`ÆÔG0oyðK¼8Ò`[ZÙ€<úàS—ægíž²áöàU⹫UvYÇé§*kåHð‹÷=“ k󬑟M©&±ÔŒ~Û·oæNA˜×qH–ø«Hç®Ïþ¼>ŠæPÏöÒB©Àm‰R“ÃFºÔ=”È5·åÖiž÷?Þ>¦¾¼½à€Åü}›ýv õîFúV¾\æC|~ôØ:(NÆÞ={ÓûÕj`3<ÍH«VÞ2fÚ>‹ÓzÔ´—2Æ b)¨Â9Ò%ãÁq"(û-ü¼ÑÛ0ƒï…­ ‡OJdçܬÔ;EËÙ[§¸êŒ1åÓ%—i¤;T?éîáJd~ '>ìDK»ë}ïnJÔ÷—v+é¡·sª2w7žåÚ¢¹y®*•b~Ý^Õðé1§OÉp¼V—š‚Yç™t¥KÖ @WŽðAÊû_?]¸ýT ºJIHuJG°•›XkÏ*þ ÝHÖíYw‘´¶òläYÝ/#ìíÛø5@þИ±õ™>"%ÈÇEñÞ{Eqz½¾º‘okU-¼ýÅJõ>3)õ¥&•E©¥¦òÕ$J»š,Ýf¾>0©’)loÝCXÆã†‹Ï©sËžìtµþ¶çs—`–Ö­Þú¦i±µ>›Öúüþ2mnA1KÎ&™H^ÿ†ÄAœáƒWç׊S|›Ûº„ NŽ^÷ÖÅÅz¸|>†é,:ÛÙPh„“iÛÅÔNð¢i›c¤;è †ÞÈ_®Lx©x\t/Šdw&tÇgë—B«Î€)ñeRfhq@k6½ÎcØì“ ·ÙÏNÒMÏS­,_/µ²Rá—x B³äýÎö)žX'kÐÌê:‰Ù…eÝ¿À›“ãéÍ:íus°~Ýa*-Ÿ•!ÕÎÛJÿ;jvÄEžœŽÕ®êóNÍÉÛí¸ý>0_<™Ì j!F™jÞR«á3G¹!ã²ÓSBº1|“øÆð„Tó»mwöÅâ•q¸a\[©s®²hÛ¥ú,ïçÙIÝ®™ZžFR5|ï36™Ì)'x£&É0 ¸äJ—í¼\Sd’¬¶W#yÁغ贼™|na¹MÔ$ð}®¡()º~‰8¾®nC£^Ïz¹ÓÌÕî'­T»;Zù—H¦ÒéÚt¾Ó3½ºôЂù¹¬ †lò%-5êã­AÚJ1í¤¹ÒºÒáþÕöª€ÓŒ8×™¯M¢ýE¹r;C°-i B g9¥9´E£qÎv£¨ùÉ ]§[X{6¨\­¶•éj8¸ñÕæ«kT›AáZ‰GË Äù%ܸÒkªñ"ÌOŸÏä-ÊkL[Ë+þ;jb+É7ø.ŽkAD/^~'\ .,›)¾W AK,ì3Mò¹ÀÅ÷¤P×™Y­ö\¯Øjè®úÕºW,é½ ¿çü–ÞŒÅÍ•öé²;MQ:[êݤxÔì_bíÏ^ùS&ƒ׈ºªg²òé´É‰1Lj}!ýùq–»µÐ³lZœ0B7}õ²jŒk+·NeÿAœæÏÕÂ<*lÞþF©~é̵ ˧{TI¬÷ªE1íÉÏA)œ7˜Ysü¶PÊ.®Ôm›KAT‘_bñV6$!;ʨÖyû•GE.5`¯¥\OÆÏµîsÚj°ljUc¿ÜhÊ%¸HÓ›s®VO ú•xKK°ågFewüTK»‰?-á¿(’ñfU³—ºÙî|n7×Ï-~ŽSÙ||-ó–&·ò,í ø÷ùÕðï ™üÆ¡Â|Õø¼raGýMWxs׉’fc«flm’w2ûSÓ"7W59¥¿*_Š¢$V¼b‘ŒTšºmª’­ÖÉ:†µs˜cóñ9Çãß[4À¹J$cî<=Á˜X¢"ÛðßNöïùÕ‘{éB!édOúçøo9bÖÙùL¹.ª‚ÜC_{î‚ÓOûê9óŸ5›5á¯(Îäzpùœ+öß ‡8È¡éÈ‚ê—# dï64Û#e@pDøÙg+ a7d_™Æÿ¢÷ëçÊ/ñ§ÕàÇAüãîÅL(u€ z@Ú. E¡ÔWâ =^-sªgM}ÅA®…Ñ|äJâ29 5!"@ç²›ÂO1x\¹|‘ýAì‘v´¿ìQÖ«¿ÈUWÈ¥ï÷µ¿³²-B×ùþâñ@Øù_ÉG+€¤;;­¾PtD€œY†7b*]Ûðn„»rý¼¥þxrL‚\[Ä |xK,o‰m q߯ùHò|ö­äFx%ëÕ$³Îÿžü ëØPjç.þåCE¼§Pø?Ú8ÅmÒ$@â^ ·Ó «²I½¤zJ„$ŠÉð- gКp†úc4 çÕ7 ·ÐaEYÄÈi2 q®Ç˜qîDÒûÙ+³^‡r7xŒÿºÎsKU¥[Ã×¢ (æœJR’ Š  ˆ((A)½ÿ½öøö8{ôúó 6£ëµrÍšÌ*÷Ö÷jÿÿèT3@¸øc¹ý1÷n×W€:¹OºPé4è<Ç´¶0Œ05ö#Yw¡¹1@ڇ䷖@`x—`t¹—ìÅgîÞ— V~9\¹¹ëZê2>åò"l£(HÂkâïÇÁó›[vþ £ŒDê§Läe¦~¨m5Yºw§ˆl‚Kä'yäK³5@o‡×^”}½:¨cùÌ:±I/gqA_2o»Æ‰ïµÜ½nÙ­þZI†¹Þ=Š­¶«ã¶ÿã$éÅ⩾¹Å"fÓ²)<" ;ÿ"õüÿ߀œhM2èÐíxb¢r¥ü¡èKê&Éô¥Ô‹þc‡î/}PØ%XÁ º ®4(ð™ýÛ‰î×W=\FaجÂÁëW|°6»~¦/Lžp¶O<æÕ&癣²ä–¨ê–ø²}_ùdtkpÇâU†Œ†ØàǤºè ìÌ ß³Œì£f’&…ý g=f…7Ì?žˆÈÇH½#€uÆ€M­Àf(ófÕ»m(Ê ößgêËágŸøçq®Áyšm«nÙîvnds6Îy~••5m+Û•pùºëýeÚ¸X–¾¬“lų,ÏËL·kܗņþØ=K§@]£ÿA’Ì¿7I‹ÏàêËd9§î}]+=Bî0{‡"V¾ï.LGÝÚrdø§öDóCÇ+ rxo4r™ë[œäìƒ/³©V·y²cRÐ(õè:3¤Þ‹MÖ¨­È½.˜š}ê¬ÐÌñµ2ËÇW„·ƒy»ª…oA=6üW$ýgyPí–èŒ% `Ðò’#õ"¼H¼J±CN‡Q¨^Á$Ûâ˜ß»\ïf9}úèØÓlηÎþ*6‹8k¸ø1¯?1ª| ÞÝæñåׇ0’uß8ßâÔã„RƇÅÂ@‹ó<ÝÈW.ÃiI)jed¿‚¢ï_]3‘úW ÐK¤ ‡lzn|³ònÌÐNð/ÇOÂ}Ó.¿®nÁU/†XIc›Œ6t ï`?õ¶ÒcøÑTZBÔSŸ(N©®\ê`ïdªó}¥‹ ;nïš»º`|vuÀå§µ+ÈíÖ’Âpúù éÂ#½ä>Jö¨H•Â]zÚ]"õ¬A ŸW’¥Ë£éÏ©nßc7ê܉… {9ëKÉ\ºªf4mœúJÍÑ´Ýá¡"z=RlÌýì·†ìxfž®Öäõ S—Âõt´}³$µ®«lóì艭»eÞÆEÑh—«»ã§7Ò4øu4dTqö÷ŒêíbÉí[üÙÆã#¼ùVÅâÂÄÖ_^qñl¢‚HW4…¬hrt:ëÉúì›âýW$(3y³Ç¬ÝU“ºY¾ƒÒ μ‚Lõ vPð8÷YuNÔ»`êu~nV.«Óx-ç¿Ò @‡"ÝÒöy2å€o\¥¾lzÛL‘‰ÖºRûˆæ2‡ 6‘«ñ·i~ÀWd©å}‹gW+Àß!âY=ûákxý?ã ³Y$Á%ut¦%ßO¤:åL´+Г²r°Û.ì ö¹I6LŽ]Ntù»¢#ðÚØm÷<þ9ÈRnxÜ~J7s3kM¯kTÉ<„kÙxñ¬Ê§†.NWEv#òíU>«~_ÔØŽ¿Øm“ÿ²[L)¿"iöJ¢³ÇóIIÁ“îa2Hð¨f®i…¾ ¹BöBÏšÕsK¬÷O™{u¡’fµ÷Ô™(GMUÞ~ž_e“;Ì"uÎB¥³»%=Å,`·ý"Xõƒ/²yH96ñ)3 ó»eæIúËù–‡}#íl’k;ü+ê›(¬ö(æ ”fò#®Iäh4pý.å_çYXÉŨïg϶f€xªÜ7€ÚmnNUˆÔ4´ÁoæN¤¥²Ê»ÚAçZÏîeõžg½å!¸¼˜¯@ô‚ÑÊ”åB#ªØX‹tžEô¹mÇ ¢7“£¿Á_òïçÔł㈠8¸&Rú#ziäóy9ݽ[ü ¯Ûì…ÉjZDNþÔT‹Ž6Ú‹†5—€2£PD†šoxö\ÛXWû[Ö\B™½CŸ÷«€¢Ë½´lÈU~„|Ièõ{iE¸×ítÌ›*¡JDâÿ O|©?V´âœ_RpqÅgUv¾½ï>>4¬ã§£§ƒVF3§xEñ¡/¿Uq¶OÔºE+þ±j 쫳“V#º~`tá¬Ó…óäBÞ¦ÕÁ?¾ñb}ƒÑ¹ôè´æ=ñFÍ#¢e/|©ó&ù"Ò45 ý\CÒì«LÒ–ŠÛ¤Ž–MïÞx磰Â9 ÛË2§Îy=MÔò TÜEÇZKšè³ñúræBÝR(®«`©÷Ãj¼à6Ì¢÷ÙQ×ÙJ%k›ÒyÔâû\v¼>"¯ðL;Áõ\Ý,fZšø¡^ó¾ÐL@&=÷ß´ùa¢ó9N_Ç•Ìes{™eÊ>¯¥u»¼8³Õ)oõñ œ5Š¥Ú9y´{Õ6$•ï Óžp=‰\¬&L°dˆö€§VØeK<‡“ý¢Ë~Oø§x»ÎަL³cÚ L¬3¨NŠ9›P¢ªO×5šå*è{6ë¢Á_‘´¥Õ2© KÙõtvíDܺµ“öÛ[¤>vÆËcþJõ{1 ˜±(ôw» E‘ë>[ÜýVS¡?e°ü¤ª ¸"6•“8§= Ÿ¾ÇéÙÓ¬Éåª=Ç+^ûŽÜ SñÛÍlÄŸNI¨‡`Rj``BÑðé¯ùßÍ¿Xö´ ‡•å†^èvkzîdÜééHHSîH‹Cc}Ùì”ìÞ’J!]kœã»¾TYÍNf›)v±!ù¸-gD7›K} æ£¯ÄÎŒzc=%¯2)“ÉlõQñà௠VÈ®>ÈÞå4ì°;”Ë`Ôì`Ñ_°Ãséz3kh/¨wº`?ûØ~pÒìRO½¿¯´WÞd—)BK mÔu­´¹ñý\¯ôAe’©_•ô ™ÎboQ£y6Îâ3¢sb&ÎÆ|­±µÂÒyØõJÞ`ô¾}µ«¤/-õ³JaÖÏ*z_dÂþ‡›~cÿÁgaâΈËv¬Š·ïž¾jÔR¯ãy}*£Ž ¹µÁ¦R®á¢¨N×ü`\6Òv³èˆOú¾ ?ä¶Bæ£Û«ŽÏewzÅ*“Imá£ÚsCÙâårâ¾f~½|{hµPéš±³èšàaöÐ:õмþéÍ&ø©ïàÿÿÆå“Ùæ…Â×-=Î{u k5+û­m•%\åjk,;ü^:Î8¨ˆËË÷x¤“ŠMĘûšŸì9<»X 8­"‡æx½\ F½BýÇúsϯÙgQî確Ñ˃ץÇëLÇq>õÎJ>'›Õpšü'ÿŽ++òn)ÃNü‡æG…ñ9ð£9‰ìéYÕm³“v¯G£¬²èäüØ/¸e³{ÛdnO~ùmÿðx·¢“›mõ‘gZ6Íö¬¥qõW™×çÍ…P3·;µFö2·Z!žª¶T«ÌX£«Ì¤ºû+U»É™“øy.,Üj¼¨'c¦ïâ. ['š±e¥3Ù´û½Ñ(s ænÒ³¹Ñ­FYºí+O®%ÏNë¦BHrCcxµ®s„^Gž´]+D¸[eú«¨ÂŽ…lÙ;é¥r‰»%ߥ µ_ÿq†ýœŠÑmæ%¡¿B( ºœóf§ãjD=ËB0Çãà9ÏÇ0QWAó¼“ï15¼ÐzP©ivµ©,ä?±Jd·Ž<šýZ!ÄÆÕÒL+ÕïcQnÂUÚ,®\1ºÜ7X|»*بö:¦íŒ›×åÈÏû;,€ šjmš€e~C’ÌÏu½¼;/V#õ¸sÜ»?Æ›Ûù2ÀÕì³ÇTU¯Óx÷üVò‚†F±AñšQÕÞfâ ;¸~ÊMHü–:(ûÅ!‚ªÕ|AJż¾…Ò®3¼¡&J‘bk¥)R†{tŽ]Ðë\-Ö`~;°À "¸Yæ³€sŸ.€‘zjë —}± WjÊ 1Æåö¦?l”“OÛðÀ›¸ÑÛ¸°×ô ]gZo”àTJðn(ìŽäp$€n°œ€1Ø€îHòðkÿ‹4™ä ¥Èþp5×p¯›H ȵ3‰Tzº¹‰|Nn#äà> à»ÒðîK˜Ç·&.&€G¹ÇϯÍ>n®‘nÀÅlòhq0N°£\Bå² \îd°É¿, ùБó±þb‘¿â'™©«ñäŠñÃô…݃ÜÓ¿€œVŠ@Žaò ×¹uA.W¥ü^ï솀ÍV’´²J’V.€…wÀÉòÀÔb–ÀX˜Æv?ÉÐúÀL!N0On“Ù<¿ å·5˜ßä§_xcj ý+’ÜÌ':åä¨G¢ó3âR×€ ×+ðc¹ýj»B}Û+[:ëå«ÎRcÿpì– Š?ÒÜ|lÉàKMM`'uÈnfcôÞI4=›•W9ÊT¢û ”"¤¯•Fõê=ÿW/öþûsO˜È‚IÍÒÑ oâžà–Èþ[9¤©rÉ|4sº.ȶ“ÜŸàY96×¹ywr} O`°±ñ¸o“©>vzSlß{-Eæq’˜EE¬!&VƒîvQòßÝæïsݼ¿¯Œ ¿!)õúñ?6Ô&—.tÖ>t{ö*• €âx Èzï-äÐ2R ºŸC5µø¦Gjã] .ƒ×ªrž½*g—ޏ¯ËGõcþ>»³ô5Ÿ`ûÝ}üÁn<ǵü8M.Õ^:—¼³,‰NcN%kÿHùŒd€|+—,²ZDä‹çÖ]À q€Ê])ÆÆãu;¿ÝÈÛ<ã¨axHØ^ëå@Ò•VÐëëC/êóçç¤0Ï boŸÙb<’éDä^H¾;G³xsßvÉñ ê´7søM§é¯×ˆ!³¿äZé‹xв@%*\ä³ä“ùg¾ÓPqñr1WŒZú¼¸¶í+aì?5Åþ>ôÙ6µu>ž«x…é åÒ»Áðî<Çó›{,烒¯ax¿Ù{¼/jØ‚.“p›·ô[óÞ2c¡ù1Msÿ†¤Ôw‰Î]ù' ºÑéDåJ…ZÝöø£ŽÅô§Û}5„ó$ì '+ <ùax££‡Ýç~ooý›`Á5z!;¶o{ÛÕËä©´-½mŽ-„õh“x6Ò^àLߤ»qãŠÀ¨ÕW°þÈó]x.ÞT©èLÆáoH Þž&åúõñi :uX9lº,¾š«g=Hº×´B?ç5s‘¤ZæïõO’KïÑE³ÇÄĺÀwȵЃšØJûœË#.g°[®¤ <Õ<ù¶8:uÊ÷åQæIC‹¿IY2ôGgö@c§—zÜ®ýéJúçú½:ep' Ëdø9¬}¼Ì}Þõ| #©ô\L¢¦W>M'Nô¶ÖÜóÖùoÍâCP ·×4uQ{¤ù§-wô» ÷Ö}Ò2Ž©0>iæ¦4Q¬bNT0ɰ,bB¥ØöÞJq…ûe2„¥p@æ¯!@5yòÞý1¦Du `êãŠCáIÅ0ëã•!â­jZÅy—·m6OÓ~ú„á‰}Voó×íñý¢š:ÉêÌsìÃâ¸÷Ч£ý’™gvwƒÁvµÒ‘Å)”Úl¤À8¥°²õä–S‹ävvHá©éJŽ9¿!©£™Dª¯Íÿ8xaíŠøþv™þ+øVwïý ?÷¶ÔÉÛ'º˜š»­âlØ7Ä>3;Éî•Ò4®Âªxèl…­ì·ªïÜudËëšîIRvmß½´ù4Êf,¡ãõ16åMVw®›É” 6ª}|l&›Ã-…óƒÔÐõ¿›äŽA¾q[$¯ Inri„ÉæýÕž¿žþë>]/ڇׯ}ÌX6r.OÕkv!:Ôfå~°ŠZ)cmn' ¼­¼6i©'öOÛ!^¾n²_ðXçîX$ù‚paÆm¡èfx–ª–X >O‘ø´<±p©;)ìß´¥Úä‰(Ñé¸k€}Ž?»QÅ÷Ü cñp{\áçõö«wtÞf5 P½Ç 5íDº‡K>7ÙßMb! “’äۜێÆèv¹×ÃÑv†`×+ÍBÎCñ,×ï«ìúÖM·¾¹†&œ8O¡]¾V½üÀæ0~È»ñ,¾¶NIOÁÚWx|n[KSêQnØ;i¨«‘—*©<°XJVCss;¯Z¾x«>|{ÜL7½V[\æŸMyë6éæJC¢Õ6góHRøi 3øˆî§è¹y™`Ú(_§÷Âx™3‰ U|*Sô¹½L îzžÁÆÝø ?£g™úGN2”uÌ›4έw¡uÒJzCèy]y˜›éndz¼_Ðãš ¨¿Ñ÷!;ê¡Ù%r§Pº$¹%²±Å éwçþ6ž¤ébJ4›i`³IÑÅvãŠ]>ê÷‘?|rüpݰ#¾ú<Œ+ÑÖ;ë«5vhãü’ :ĽʹմõÓ¤jÖ—Hýô-mª–EKJReâ |¸ 'åäµvzÆŽ¹3;ãÞõíu§ëY" ÏùE?¬àZ·fhqÓŸØæ³³ær$ ;ò°wŒ¼ØøýØÎ  ¾‹A{î‘Å¥.#ÃMÿh¦8ÿ†ðµ ‡·{ªYK ªèouSÖÈ ÀÁçòòáÓÅ66Z¯¯«ÒlÊGÝ ÇNXõÀ\¼Â…â›'!õÑ48ð\íî!<·éaÓK©O*+³7zbÂdæf°³Ùmÿ`lô~6ï={3f„öf[‚èºÒÏf—þx|5ûã–aüÏɵÒ7½l$FJç§—H3È+ž¿@äÃá“zûIˆÐià7Ú­•ñ †9µ×Tsêš^çpø3rxøLn»an,´ ¥Q;Ž[ƒx{õ¿{êC?í:{ÈÒ»Äwòììo¡c/ßT·p:ªÝ‚ _ºÄ 5»„ž9ÿgoe“ëØ¥Sö‘ɪþ–­SfCc“ ­cheŒµÔ.@»ä¦D=—þˆx3:½È® ÏSØiºt_·ñ³¼ FÛËâ;°=t0{õþlÕôBoÑ¥¶Äº³<ïO ™÷Û\°Of4¡Á´9½¦´9™5Û˦£g››“çßpÁ~QÜš…í1€v}ñøÝP×"ࣶô^ÍOÕ˜zNA–ˆÏl}1-³#œlÈ);F…±~ìG2s5‡£ú1õ„@Éü®€5ÔòëR—ÁÕv‡%ÏÓ¶w}³íf¯«¶6ÊöÞêPu¸ù*ƒ¦¬kRSfãSS^ Ö_al/$¦Òü Ý&ÚÉâl¬köÍKú$\šoÛ§ZÜ%èé¿A#ºKhß~lã-ê^|xKó¬<Èívñs°p¦|ñ€£Þ+}§pø‡Ü^Îú…EwY¨ÅwVnÓn‡ùC«gæË9 m™Öu>׿‘«^Ãj•¬‡ÕÒ'd*ì´.WjðᚺÀfÊžY–RaØéÌæçúìýþ!ÞÎýgȇrõ¹4÷ì¶®Nl×ñFW­dœCÈÅÁz¥]îxÒ¤Ñîd flÄÃÆ÷âOë:«%KAQNg6U[Øj)Þl*µ »/ ³Í©´!äk1²oQ±_Á,vÙ¦ð>Žš=¡ð NzA“fq‚ò$xø…5ÔN$dº…Gv‹Æ/tëöH¦JÇ>ô.Ý›°÷Ûþ~µúÐ÷ÕøZ·O]_¡Ù\"ÕÒ{P¨T¿•b¹ 窥únûE·)«ç   δ!•GÞo%G•4(b©+ÂÌî1Âà )#»vîf¾f¹›…‘¿Ax–ÂÏod7{°g—wþ2ê· ÇîuKíM]97•9ª5 ëè‘ .Öª¥×À,{jÞ.mððVìcû6ª¬Ü´1yäçF€š»Æ±ÕÂa&ɸé},WC§5¸Yœ÷ ÍJžgeAg³IZ‡Lâ—Œ"‚îûI2ÿÞü@º âÔPœ¸:ƈLrkld‚€ÄÑ@ã# œ< ‘ìÈÞ9Áä”`á*x§õ¼ø’N’ oìõï;€±J˜€È8#å<Nƒ³•~.vÃ×&Öå¹ù6-!IÚ¢èæÍßQ­Y ÂG¦ì‡Â~¦xü¹—&€Oõî“_îð˜ÿ˜¥ü¡ó¦r_äröärŒ\¹N4¹\;©oéôÊÀÊ XØhžËñüê4ctù¾I¯¸xc%¾ÊË£>†Ö=’$è÷´ÝøÉT:òûÏmRTñù‘{ɸ¾KÏž[œíïÿA’ÌÏÀËO"•ZvR ©÷9 ÐN¼MCx$ëÁ¥ã´‡À‰Ûõ˜ÄðÙëÖ@˜Èƒ!)|>¢Sžn× ëÙO™ñó3³àçxoGßH«ÀcÆ}Ïp1ÒË7„Ýýš¾qÛuZúÍ¿J5ͳßÁ±÷{µ‡Å¹õ’ÆSIt>v‰Î<èT£ôÒ#42,È·’ ˜ÏÈ{Ù,U#ácöƒJ.|eUãžÿµ{àÆU÷z{uéùòywËøæJxÖy ½ü5Ük×®Kôí}ãL_ÔnEµNÄâb徆g›Cz$…Y˜îì³]ÞZgú¾4~CR=»M€ô¯ièóþ ~”ú˦çÈ=ŠWÜë]‰P.ä¼x`‡±?ŽSè\Uîe½=l5ûù%µªkÉr¦Î”6uÈ—cVÁ>öf¿lÛêŽC•³,5W ð[,u¬rq»Ëšøv7Ùo·;mpÚîìÙaûî~°û ™í?[£Áƒ_áä¬SçN5 ‚P{žÑ¯âòMF»Ž-Ê´¨©ú4xô9ÉûzNûÊ犊Ÿz-åbßú{g'Ow|iDÊ"(³Òö 6ÛÝ9P7í‘®=7™x®gÃ,ZÐÀã×9J:¬sGYãõÜ~ŠòoH*è5ÉRŸ%u³M,ûÞì)jáàLKRV8o¥G¼^ˆ^öxæ>½ÛéÙ¼´cÛḬ́WJ_»ºòý¦Ü^½úRodÍ6—"6Y{Æ­s»–$æ×M n‡_>–o¾²Î×øŠ][ò«a,óŽ7Ù %üçàM¡´R¥ß[ÐùÂ&‘Š À&¹M¸;W¹çY6Y·±”­÷ëœykœzAöqìv|5_ÁþÎ{ð®É ’,=Òüí[h߬&7.À¡y'< œkJ;öy=™l;+‰œäW’¸˜³mŽÜ°Ø—Y‰l¹FÐÞü€Â™Èåá1E¢é¨s÷I—/t{·¨Ü:Ê¢5¹`‡>7^é44õ³zVƒ»²Ê¶¢]kÊ¥¢ÛŒ°-®çû|UÄJN[(iÈy±`}²·ZE³¶´Œ‡í´³a¾ÉQ_>ÌLÎÏ ó=½„¥²äeüÑ·«þÂßü†¤-a]ß›I–†ó fãÖ-¼…í«ÖR;¶î\IÎÒ ]¾@éúFÓ·óã¡$®»§>¥÷Ûlς֋Y7/\×n‰çP¾Î5¥víÈ$™”ùó}ÚÝny|ŠlãŠìCmr,m 5‰™Þ˜-sl+©gÊÏõ?(SK¤º·QÀòØå.ÏÚõ[Äk6›ÖµÙkÁ™ž2’Ϊä¹vØ{Öò"÷lÕÝNh$ZMö+8Ãlޝ³RjReÃl¯ºÚñßör ëCV…²$Ka³#Ë+Ù"Øô&jbÔ!Ëçâ’¼nï[Šckʲúâo¨Öé‚B%?æ,}Iö²|ÙÖ«¥ŠÅhqíüØÙ5}ÐWša²Kå¾~È»ŽTÑ·ß}]›øÍn•NÌ7Ú—,+Qt5ˆ¡2s*Ëuz¡N{%÷gd¥ˆÒDÁ¶‹ÖIw<æÛ¥Ì»U¡™Ö®äoüaKpïûšp»/á7$ýý¼ «ÂÄ[Üòõ°Káë•ÎŦ¤¿KÓÒñTìwÔâ¶Lì[s. 1!øPÛÌ?Ãdy;Ú$}XX¹¿ý,¿«jŽÁ5³@êd•tôZ‡àÇ™ñ¢å^‰y×¾‹øàŽ3µ1}ÌÆA³ŠQžÂß÷îz.mDqÑnXÂR¨ÿÝü iNL÷Õ„Éþý ñE?ßò&k°£Ûîc§¬ð@UzhÕ•Fþ8•÷ã.»Í1ûx ƒgs‡Ýµy,ÎbmøÊ66?ÁkP³´ð…Wc.W®C|ÿ=.f“ÝŽ›âªu˜"ÓŽ71spqŠ;íÅ ZgÅ™Vï ³ïŽâCÒ–„ÎeËξ…ä-{󓌬›èi¬\sêå<Î*]·´ëéƒÁVϽ©5ÍÑ[þiÞŽì¾Q»,OèÑ£­¸R•ò•„G¦€ƒåµ:;½©þgRÙ±Yʸ<ÀÒ ÔèöyäÇešO0Ü&V©.NQzÀÿPÈÝ^ù©&¹ÉkˆY[ŒÓ¹ÃZÞd>z|ä8¼ Œ¹íµmïq¡ Ò oee©—3:mg¹+éúŸÑί£ù[eðqðBf9Þ(O.åm{ìäÅɈӹåð‰^•a‹.;ƒ°ô@†-拟؉qVV¹h‘ÿé¯ùßM(·¬Æ-¬õ SžçŒ.ç´sw–Q<蕳÷ÆZf?ëò·QšŸÒŠM-FM3–u ¥{^D¯ð6•VÏ™N•ÞS2÷JãÙLJšUyƒmcè··£AÔ7–ý¸u—ûC¹yí í÷дw/ü · ùäd¹ßð §hŸöJî,\0øxʈÙÊRwž]?;~mÑÍ%žíIÀ½EfÇñ¦¹Ìï;º"ƒö8i1X5üxq¬Y¥ï“ë©޹á÷3j¾îè°óyÔû@¶ýÌ! zÓ“ºÆ|cwùQºGÐ5†“YæC® Y¾75sÜo¸‹:Y¥{Ö½¬Ÿì"jñÚε³/Ö'í«n5±§ì‹¾-®ªq»w‰ž#¦vùäÚbgfþ-MKìé8öŠ+{´6{aoYz†šëO¬ÚÃX¯KÐ}²s¹m¤N©öµ;¥A„vJ…ˬSÊ´øN1øî?H’ù¹Ú8!çŒm)“ÔLûõcù’àÆ3¹uïÁ~®òaÊå;ñZÞâ@>À|VÍ•p4(&èú{1~Èn´mIò°Ó§Á8C8ýé{è÷æß˜.ϱÎ2/tÚwÚ^´k÷¶%ÖùKKòù–ˆgÉÜq»j5·¾Õ\n¹ßpöž(tœm§_¥Ñ_’¶â=™6ÿHL‡µÒ-¸/|iã‹sΙ®´n4á2nÓ|}÷÷ãÁw¬R}‘ÒPuÒ¡kWÖfçÖX»êF}·;i­?ßf3b†x³wß‹˜¯˜ ef öH_’m OåeýÛ« õoãÃ頲Ыï^Òwï>×åg/Qyœ?û^ݘ]ò{}¼Ay{´Ë·>ÃQ4) àð޳ðvê«Þ]6³×mÐmqXZ=9$Uth4uÚmT5®u­ÏÕvÍx®‰Z¾JÕ ,Þª—Ü®Z¥xZ¥FÓU•jŽ–¿!IæàÐ×·¬äÂçšù´]nl•úÝZ!¯ÏŠ*­¤«¾Ì'èção¦ë\¿ùŽëAµözuZ½…7léÞ˜È7º~¾P3‹‘\+¬¾ÇjéPH=º*l¶–=|ƒ”^Ô,ù"¾(mÆ¡Tê@ܽÝ—•b´ã¢Ü(“¿a×[~žl1t¹}F¸þ+qêЄ6Ü¿™ô]ÜiÀÛŽ·%üöfØ{µúpõÛø^`¸Ý2XÍî媽µ•ÛþØ){Ú¶_n»i©“ßE™>²˜ÂRáûxé…i»ùÈ벘ÍÏ™Fù08jªñæÇV;ßQr6„ÃÆ¼ã.÷nn® =þQ¹jãÚàKŒ¶Ýrkɵ¤ÞQj|­Ì©®/«F6Žvµôân•ê‡z”›Ð8u».FVñ…Å×O\øºÏoaÚˆrùyÇÃPsçW[õÛ3-Mr7cÂäjyu{v1u,,s%¸YYô ßµˆßÀo%-ƆîæÙÓt5¡m8•:ìiÌ6 "™¹­m•iŸø²w ÄÒoo‹2‰Hبìí ÐSÞ瑈TÐè«3î¹Û©cåX|zƒ²ÿ€üë4u»ÎFî,“Q643êš™Q·Œ'PÖ™Q¯d$X?„Ÿß²í¸²v£  ßÐðÔI>¹#õß ÝV-·gsÖ dÒ O“+‚Œòè‚Ì¡‰'`— Ì Èˆ‘2몑€pœCÙ ÑÎM9' –Lk @æ ä‘&óçë_e "€ “ €ˆujóu»â?cŠ€0j²×ã d¥Œ²ø,²ÕcdkØdÑyòkPKÿ$“Í7Ž +ÁÉ™OøÙÂIðlƒ,6ž'8&Ï3»55>†e5žIðá,Áþ7€¬VÀ‰«êåöÇ@™zMCq1‘ê-h™– *c¨5ò”=À ë€Èê£$ãe™J‰ »kÐgå¤k÷ ²|1)4~UHðÀý„:Î*`ŸÆMí}Æ1ý?Ç×…¸ª/ºp<üAÑÞ*ÿÈ~‰Ô³TpÅmxUùÇ–®,€ç¨àÚÔÐCþyß:¼PÑÔ‚.ÏR ú @FòkÊÄ1šØrƶÕV¾ ^äæûÉ‚|‚ÞD}ٜןÓ'ÍÓ…‡gdJŠk媺‹ñÈñÎ|"õvŸè»ÉÒoHrS-\6—H=¤¡¡S·I„›Òé)‚@ö%# ‰òHa“y?Ô:rçh3\gÀ8غéï4‹{‚×U~Žë×ããH[æÖ­»·@>—‚*ÅûuNõn5çÀ\庱_××áÞÆîr8¥K¶°­£O ?H}ÿwóƒ$CD*•ÆGÅDªÚÑ—i ä@gô9&“ Ö«–‡^aÛÛAþð<(=¡r®íîØ½¬ÎäÝIÜÍí®¶Žè÷R§¾kXnë×.7¼Ú»Ëäyù”VŸË˜5‹Ölݘ˜ ™^©ÇY2œñik¬ŠªhTÂ=¯»ϦXýÂD§5Ht²F SrúcO³cä1z[Wõ‰lt úñôþ„9ðö°þ:w¯ÆPÉißå†O¦ý‹úÀf( SVîýâL¢lÏ— ÐÎE7c«êé.Óÿèõû±zjùåtr{”™ÓbØ^kû»Ékû×Õ†;ù ×Ê–Rãjì>¨4è<ÙHt*ûý«î#Šÿ9MÕGR'ÏwMÃ/›ø œIº&k®l &V×Î¥o¥kToŸ±Þ°žÄi:«£äÖZܼ(Úp險êåž*„ ¡¾|÷YR ¼Rð^¬R™e ê_$Éü{“´ J"•Ý%R™f/YSû‹4&"û¾eˆM÷…õƒ°õ¿Õ•ë°11¬sK¹L-2êùKæ°tþ¸ËV+šâ~[ªfûCzÝÒ½µòÔ…,éâÞf½Ã¾dÅ—[ê½dêrãCOåf#¿’›Dw)%Ãñ@î1(äfÕê3C7"}ë<]D>ç-ŸúöAºµz…¾Žº„`@SÎÕjêíüÎ;îÑb¤e»vö`h$ªX\³¼¿ÒXkwï½ú»šðÂåæòÁH›s°ÞÊZ n@®vÛ(ç+¼É4…þIUì‘›èÍU‰MR<óß4£Y ¥ òÍ*ñjÜõEŒ¦sñëC§ïáã ºŽ–çZ¯¶9EÆá¨}çÅtf£"9ÞSèNéµ_‚ ³«¯¶ˆÜ"—©Û´¶ƒF}°Ã9|}ä—¢1©H"*ÏÎ ®/»-"”¹@ñ!\’¤SÌ„Kµÿ‹Ô¤š^2«¥Aäym­?å¾g?Õò]D‡å[`u;Wö{fezÇ¿óÇL»µ?˜Ç½¡”´’³ã-í!·{ó÷ö}Íg6Ÿ]˜ßd×—Ê:7—Ò×Äü˜ ÅÞŠà+ÍÏqKUe^ÞcÅC¶Â>k¯ W7˜Ç—œã;ú”ã§öy—èÔàz|áµÁƒ¬¯Ð» ù+xëipàkv¨aVQ%›Fë„N‡»¸TÕ·¤”ùžºköMS’ñþm;´_þìÞâ9³ÂÅjäyG‚ªœËÇöÉDÓU¸ˆ˜U×®î–ûòÚa>ü¤°Üã‹ô Éå;ÊÌW½Im¶’.ÓÉoHꨑ´%­EëƒQsoQ v¶gÚ¾äïäÌÏáêiO$³ÖœÚ"'³w"í¥]‘L-·ÛL\Öó…x Q+HÛÎëšë7”â*‚ÙÆòýa†É8Ä’LÈkÏ4y0}ò?="83ñîSFëgÆÌWÆ&ÿÁO× YÕ¤ŽvOü¾FîMå–µ~'c]88kV[VF—‚-v„:ãÎ^…ø¾îYéÝ×¥m©©ëEÙ8 ×vëʳfèqÍ®®"ÿ.c£‰0_µœÎÓHÆz4"b8UXÕ8’ö6'²$N>¤½X·©Â{0£ÌãvJ£˜5þ mß<Óölº 9ý÷\Ñ÷“HÔ>Æ:ž§Æ”ãw_GTsQl*UEÈ’Ð[•bÅõÂì'¿Ôùzõc±ÁQ½­v‰¿Ћ™L£½k‘šV›,W¬ Q+Ü— aYK†îJ-¼¨Ô X;›Ž7Ľњ̛§ýI[º—_|ÿ^sÙUœ½f U`~ŒO "mN?¡C¹u©î6ËÉ@F±Að'–ʆÄ7 V:Oc%ìl¬{âºÌ– mX^DQ=ùK.›bà*\c!¸Ñ| oiüµxíñ¾Í>ð—p«Í·óÓxÑ‚>ã…ÈT†¿ jžãO¹Íý÷r.ÅñÙ˲/½aÑü`ß4Soo¢ÐÝè™QfÉ uqÃJñg¿üVÖ'椵-š¨EwªèháŽæñB|w‘ùÖo¥UßÝ[ýÙá2 fÙÒAšï#w–í •™šÅ‡øàpá{ô9ÄßóÏÐ/V{˜õ |ç^’›åe´½NtÔ^÷@Ån]o/.?éZÞt;›Üšk,œùÇôN±¯öLXe2ŽÄ̸JÙt&Ù¬~%ÂÜ›G•Ú Eh¦ÊïÒô$¾Û“³\œOò€Z/*zä¿âäl–S_¥g¯NOŽ:ø 1e×^*@v®½Ï¼Ã¼NÊ1ª½|*õQx—öê±}„ÌšdE¨+h}×·óUä– ê®EjYnïìÐ‡è´Øx¬5ï/;w|D”Ã߉):…±½r[ãÒ#ªáXz°GÕWÝ6q\ Úñ­ð?üÁ°á¢·`¤§†.‹®™o=RšI™ïî¡rEO~óôus~ø¶xC¢Hh¬à—æ ‚Æc&„U± ŽXç‘íüÝSüÌõÙŒ¯]§ õ'¸Ç£»tF†ÅM§êÃf˜›¶½?而5è|°Â`;¸u‡Íw{4»“Áox"»f¾…øOnŽŽØëp½Íž;©¢Þ¶8[‚göu.zR?v4]d–óI«D3£w—ôøýlq z>t|‡HEžš¹ùqBo0s¼Ú¡Þ¨Ñz½‡íj˜ô°O½?¬V&=Uà¸Þ¤…™½I©ŒöTÚïö>ZiØ|Ûé@^ûÿ[ÿu™Ûo]:/ }‚ý:ºÒ„é]Å›$œ¹¾qÕ–‹þö³FHÝM!‚³T[ àI?Nù UÌåäÚeÓ½µ1ë÷÷#á^Ó‡uúŽ › û#*›íMW•jw.Œ‡]´ye;fHž;$;E;¦u»(<u‘W¯ÿ®ãaœù:N_¯´Ý(Ü£ò>_ÂY3-Óâ^³Ìi¹`» ¹îBbÂëbØÈÇóì«”Ÿ­¸1-ÆÞpìnµÅÿ1vïm²íÂÀ?K; نȮ²‰’)!J"m¾ÿ[sßkÍZs<ë8Þ~ifLgu]gg—žD‰<Õ:ën7n©þ§j‘£¨ñl³ïVÒš†l©i÷ŽÙFk–õüœphà ÆE §Fµu‰GL“ÿ‰ôÔi|uÅǃÃ\î{ò×QëI>¹.7@Ã\ Í•6­#§£uë»Q¡fÉ”!·"~»ˆûõZ£u£aÕ`†íÀè'ó¥¡Ü.T‡F '˜{“_ˆ_BM¬ñzÃíÆZ—çCšV—Ê×?Þ©Uÿ¨v·.7÷äYJõ¿g~0[9æ«ZêÎß½ow“Û•nbC™œ#épœ.çÞžÑXl=ÄEqMI~ÓUñ†ÖwŠÛÅŸ„< ñRûÂV‰vÑö[åÏ0{ ¬¹ìp"!õy¥ñÖµKý{¾úuŠÀsµø-·j2™Ö üI¯±«êÚ¨ê­6U™ ùŸÐLáùÙK…ØÝ8i‹¢Ëý<æ3RM}ºÜ|FÛ5·ƒÇ„YR;ï)ãé\ls3ÜlÝïC§Uí(Q³Ñ7óDkq+7d×oÕ#Ô:?­ ÏU±j†‡j~£Ü*“ïç[)œ'¥ò¼pÏNeܦEü!÷Ÿøƒ-âø£6mãü¥Oþ'”Ú¡øÜÖ{U¥e‹kOcºÔÁ£™”‡ãvV«ÂXyúË׸"“?¤[Ó€"ð"„UЪSÅLè4Ô—NE O#pD¬#™ëàÜœ8ãQ(B!Ä[ãgmV…~Êpœ"ó)î&$LMœST7ÖHœ¢V#`Sì‡ð¾6þæ¯Ä"˜âÈ<(Ü¿ÜçÆ;³ÿ“Ÿ±ú‚ÓK¹ZRi¨ûY1E­G‚ô#hÒŸGPa#G ïŸ#p[xFàB#¼áØÁÉŽŽÀjÚ;Ó^cÖJûÚHÉJ¼kß,5_Mèk‹j`Å:õ™ß/ã·ð´yß#ö õ^Î}b;æ^o’šþ'"0NÒ8÷d.‚‘%öOЦ‘fÊ4+@?þ<' …‘A‡Æ%‚¦â'‚ˆGº^%<«Açzaz`²é>Ñßqß¾hºãƒy?Å0¹|ìCÅýTÀAøvtó¥IH¾H2ÇxT¯´xªZ²x†¯lhWœgS—”É"h\‚Ó(Çi¨ó=Á·7!Åi'å6ލ°Š`£§E0/ß#¸ê†ß³n"ÁU1ËŸûÆl}*Ž•=ì÷ë±ÿâ ¿ùxJ¯OÚQz‘W@÷B®zó¨ÇÐ&‚‰¸F n9ã¸0zp¥wç«ðÌ{·ñíuÜ0·õh>Êþ!‚êç˜á¹„Dà 2%ªb™T„x…I„\&R„H†þµ"îòyœóî{5‚c¿åy9/âOe¯gÙíçP×{®꬛oèsçì;’S(;û·üšw~g—¶û%¾·µ&á׫w.=Éc¬#ä±̨£³YÝÎÌsÙ;çWcêÜž¥›Ô×Ó8'1šåzëQNÈ÷£ÜŽãÒWçMpÏ·²3ô[ZšÚkϲ”ËO—½y¡S¤Ò«Ê#KöjÖ©Ý6Lµ} ¬ÖðÚãË!=..€ÒY[#€QÏæH±Ïl‹O…W3ñ¯AÂØéÏ—Ñ×Wš–•ÁéÄpÝÉ ÿÁ ŽÞ;!Q»˜•#QneiimöÅŒà¾ÁÖ@ÉÅÎ{õQYÖ­Û'o8WŠd>ð†'²ÿWý̾Àòiz¦]ývÍô|C‚þé^YéÄ´­ßÅ£«}óeTë-U-ÜÞº*¨?;¶Z}ñøKº5Õ4N EJâùU9Êãp++í„S\¿Û…íÁwqæ9š³[ª&^"¾·r¯£yº²ó»¹ø¾±´H—Ž!rÜîÝ¢ö}Ýk…ßIUeÝ¡šž¹ 粋´rb¦‚^¾Ñ~ÖZVvöãÛÙÙ_´³[œÖná›»Êlü!Bvb¾–îøYICl´#Ó†¯øìz:j7ò©*xmÝÝÕ£<³%O+nà5QÒoy5&ÓÏÛ¬0Ëža_.Á]^•¿z`ñbsóó/„׸8ßésý©Ìs`‰²8°E\ÿ†V8µÑ-s±2Ç3ŠHÐ2å¥Gé‰êÒÇ–Q%K?\Œ´csæ¾GÛ|®G7}7+{ì' r[ŸñÝ j4·òͬµ51–r–³¯ärµ\Üê²°Ü%/I/k±å¯Î|?5N%wÐLïñ²yS6¬fMŽ)ªÜõ)jyÉtÜÕñéÉüâ³\¹XšÑs¢ø‡ô­AA DsŽ}¼o½Òı&¾oŸj˜p3Úø|+—ÇazRã}e°màúµŸ<ô~Ú•ò|L‹Üv9]V uí^ë…ÜTös%?Ñ9 ì]gzØò¦'¿O±ò¨8)als¼àLv\)•q…œ…ã{i\š”$ŸÌ<»8™ÅéÕ1#Ktý÷L”»÷‘×ÁDÂÇòVò¯pµñ8ãßãÍØ<ÊÖQ-ª†Š×½³¦>ò¶™G6*p,KìºÖo‡Ë`Yué1¿Ãù¢#)âÈ÷¶ V³”ê,æ­)æî¤ôˆÂqå ¢lÝDê̘æ%Ú2Mû0/%ÁX‘™•X÷¾/f`ˆò¥ê,çkË5ãiYp7=l•ݿѻQ|Ö>*‹eÎÚ5™ÐÛRô\#ßiqU|€Ä²¶]RüæV¢çQlL¹#Ïð3sÚÚL'ß {âaŽù‡ugÅ‹ùaÖÆIû=veAÅþ¨Çì²zèQÕ^£¨­åiùé O˜ÖÆþågVñ‰¾õï5ù0Îy>zÞ-Þ¿¡¢s>Ìn%m·.iÆV!äÇÚè­ãÕìUÎ/—Ö¥ú“‡›­yl¾ ‰ãºj̧EX‰µcŸÁAg6ÒüJïøékt˜.Àá‘^–†ðÙéÌéT˜3þ9Õ¹Üð¸¼FÀ7ÁF}CÉÖ&›~ž›7ì,ús1ó-Çôê;ûÇèE‡ÛÓ^d]u«ªÊÚp×Õõ[ý,ÝOŒðŸ´›8ì’ ’—gÝê”3Drì¾ }v½|²Œ<<Ìi*žJ#H&öÃܪl°EñÑ/MÊa¯2§0jy’ZT}Rœw_ÅŸÒ^jy!ÊE9¬Wa×ùÞÂÔþâ!Ö7º%ñyœÇã˜t»öázV­Ý:N[¶ÇUc/:8! [¨xà»Vû6×+í`v?ð´<в3ôxuLàD]úÀ™£ÑO‡,Ô“ˆûøÕ{U±©Æ º­%‰vä×¶ÕélÊUà[G¾`'(q…nkÀ£¹?¤‹qçY`YSÜ1¶ëÝCcµûþ9¢ÏÛƒ,kÒÔyÈIØÂ\÷—n¼ßÓ;¼w&õ™±Ÿüe(2_¦Á׳5< »Þ`Öœ³ýEµ¿èÕì¢Dg4;ºí#rétOµÙ×H¸­Ã{¢=:Õ¦íѹum”OÒ>>‡ V94#ÿ»Ó}ù'áë;G­Ë>¸xºÊA‚Öì»qXz›=³€”?å¥ë|ìç]™ J˜Å(ÏŠOy`x¾ÞÐÇîª}~¶"{|@µ@bÒíäjËN(ïÉ!BXm:i{­óP‚[˜ùn4¯ãù¤É¸ksöÎecw7¯EË@›Wp’ûÃ%ÿì= ’;8êÄ@ï;ßX›Q$뢓Üö‹ÄþJ3Î)-Ø.Q`h¤ð#vÓ; §{Ñ”‡â»_c7Y–ƒz—æÅî7?ªwâb¿ÛsĈD 5®"åuk:Í9'¸ÄãaƒD­^®6ž/kÜXmÎVcEâÆŠÔ°Æª"竜˜ûéæÙÕó£swÿÇ Î5än„RE›Y•¬£f#È>áîå¡—3ïBk±³…Ö+,ëß@-‚Žÿ°ª„=c1jNï´ÝÒyÐ{¾éÏÉ1ðfˆ&óêVIžÀyµ›~\øv­ÐÃ>6¬,ÊÏIþ¼}p¹«bò98f…c?:n`÷d*p³t¨…[°S³²Ìé#z­.šòh½67Ï dõûô:ãb–æí§ì–àËFÖ]¦™þ=»éÕó¿0Ob 8n|˜¤WÍòÍÒ ª•±Ãf‰¡9½Hä±ï·‘ã(»Ü5‡„]Sí@¯Ë¬Ê|‰1é=¦P“IHqäÿÊõîž?™Û fU½õ4ÞÎ8å³Ï2½”8ËMSè" S #@¦¢0è8}5" ßÃdÕʇI‘©„±­Qa¼M¦aÌ ² Awt#Œ»¨“2 SNéϺq)Œ)¢‘2í„q}7Ly¦ojTW)¢ÆDé™"%a<€Ò?PDÊ ùŸøYÌÿúÉ¿Q~ÆQB‹4Ô˜†*‹p˜D4L,£&Ód&MjÆiÆ÷ï9Œ}/å˜.õ£a|*—SØôŸžvÔÏbNO&ŒÏ…ôMgFJ9kal Ò7Yw(Œ=ªš²ï„à‡nu™üºSiý'"à>#°¹LãHð“RÍÕÀý…G€€¥UÐa«B˜\âC˜¬Û—0áv~–AO·þ¼]LY5RnÝ0meRÓ.}Ç"ËMó¥SÊöjµú5šÍ¬LòõÖç:-u>\"?¥Û§ýÃû>¿·þF¹HCUÕ4JïGàå’¤³Ÿ4XmP‹À¡DE |™D€ƒJ°ì#`||üä¡{À7ÝôUcWIñÛ@àƒ”,7MÈ|8Ü*R“wåkD¹ó7ß'ŸAÖrïGÁ(ûb±ßØ_»¯u²&_-k{ÁpØú%]ÌïLÖ>Œ ÔNézß$‚–tV:­6"¨‡¤]  ½ˆÀã\ŽÀùídþ& G“9úeçóòE6D0¨Ïíz~æÜ-»¬}ÊxÀ¿…%°~×ê-Í_­¹Ûk³s¯ËÁ¥g_À›îÑ+t\„ðÛ»=ÿ€’›Æ"0ÖƒÞßr0‚ Œàö©ô“R%ÑvWX:‚܃AâsæFÏspy°{¿—³Mâ{Æ>ï7ó§òkÛ×ÞW?‘Þžö†Ïøü<EPx‚6!»te~rNbô}Cµ—\œõon’ð&®oO¯]Éæ¢r ¡Yù²7ø"ˆuÒP¿È7 °–†zÜ¢•–Œà·É†&ùÎIoQŽ÷¯ÏÛ6}*4……yýªq'¾þ„Žðѯúåcë`µ À´]q—ÏÈý!‚ËÅ4Î¥!ê@„DD២Ù\ç‘ÝaÿÔ¹wËKòXËSr÷QŽ;ÌmÛ0¹‹ŠõWÖhWÜŸY 1OÓÅ÷fÎ'ÎÓx¯QC>¾¢^èÑ_¿ÒH‚¤¥{’Ö:‰$ª‡z9Çóð'ßl£)ìÐA·sÈÞ .Ð"xÓO£ldßRé¾Á(ǰÅ(g˜µ€'Ñò«¾òÎuœÏÛÍ·P¾he¤u>—.ÃS©¿˜ŽKf—5]&òqÛýèÚWz]Ô˜¿:jߺ¾:xMýÌ+¬âWö&÷Eº3ÞÙ¹ûNvŠ´' ï˜,õüÖã1x+ur`ð‡ŸÏ?M£WAº³1äG:øRž§¯7ÜξîdýùÜ.ðPGN7h\1Ü7F?Wc¨)]n¦îå¶ ²2Þøêþâøç}µì]øò’}þ|C™§¾óÛ&ŒT7[¶ÛÛ´ã#¿¦àÎEŠƒ$”ÔS–T‡%õË)³ø’^CÒ­yü~¯“Gò4‘íàw³};¸Ø­ð˜ÝÈ¿À/âqšÏбA\T‹´IM^ò¤rÍážÛÓ?î ²8$¶Ûu T6ŸxÚwô±¦Î±/i ’HYÂV´2 Ä3 ³âX ãïå•1³þÍòÊ_“åUvãŒð2Y}£\Å_Q~ùtnëõÕn/LãÚ¿ŒËè„ê§ùsoéïÉÂ×T¬Ì((*ÅÊØ £.%7^`Vs» }²Žú[a Tèµ4œÐꊑ'ñ¼'ï"–Œƒe)` ïÊeÞ•^=^î·|£,<ùYHø݈xÑf~øþ!B”Mðs+B®AO³œÜï«Ká|}ÍBcçp²åñÎu]K,7ÜhogõÃÞ-oÛÒ©¹Žó3J:êõÑÊ\&Ñâ^‚X0ÝíWÏšP•5‹ŸFÖ[[¬m#œ•›wV­6.Ï Çæ"nrÑÚ ç$øf|þð³ã?Sʽßö¤eZ'UO‹ûrg¼ˆÜæ¸O~n}«9I¹*¥ÿ–_Ø’]»°VùYMBô\K¼ÔÏÔÒÆeZxÄÌ”~:Ë…ÿ¬Ê‹v±¡Ï»9üÆz­÷ì8Á3øt¬OÍIg:e‹õóÔT‘÷ AÙl¬¡ÙHØï?D¹Ü#úÙño×AoeœKªs0^‡æöžQ5„¡¬pLç´kä`wKV¸ÖJ3du¡’8[žË ËúYY´@Õ:¼ÆÕ¼7e -2Íð¢ÐÀ»Œô‡‰2ȇÀ¥=„ôcöýTçÇ0¹Öߣ^öGÊráýÁ Ç8Ãóã’Û̳±í̆|ÑŽ}º©.-m»ó7~£v±tbì•ho}Y»©6ß¾üù!†b©©uc‹“ù¸\ Ío‹]Uí³)êcz—Û £°Ý µïþ40’SÖä[ Ô?—D¢L¥¾•gnƒô¬ú˜xÝÏxþáÕ{n_övÖ¸ž¹1aèµ×4DÄ¥‚N62Ù[-¤Óg6:µ^qV Ë“Ë5W%—Ë÷ïtÖ[A“²C ¬7‹ËÌ›qšô·¯S£C¸ ‡G<˜½I¯¯c£_„·noξêq¥ê”0¯-©‡_zóéÝïݬ×/¢P¶6?Ó_ž¦>ð®jø´NÕ5jUP:.7è°“>ÕõfðmÏEžÈ „öš.”]¸ž›‰>;¯îö´ä®ý±XîÄlóŠæRöJ£„ØgTYÃ\0„šõl­²êU`úHÕâÙ½+ NqçmV*÷©¸è¼÷ѹ+‘šßõ¶×W†ûgž„®uÞlÎÆFŽM&ÙsJewU¶ŠèKÒDŠ9>H·ÅüØ0\Þ`øémÊ+¡"^XÞq™VøÒ=ã Ž†‡ 6Ì“Ëʠзúx™ê÷ªXsB5àú²ÛB)µÓè©0z6î ÙC›•vrgíD NdXû¤Ò=2çì­:´Ojt>Æ+Û<Ìüúq×jòûµYÞ­Äj¤Î Î÷§vÅêNjÇÛxLœáìÖ7óç´ŠF·ÑèîûCtzŒEZ‚ûåÞ¬Ô«µÓ]KPd·ÛnÕéN·VçÉ~“Ú·GÕñ¥e®NA‹m’x+ “Vþ™-½”µ×2Ûòó‡t1¿3Cô¯ÆÆDNZŽVO{Qøh[`UW·k_ä¿ô`Ê¡ñpÀ’{¤Ak0Ø£!a4å¤Í~ˆÉ‡SÿN÷žK oêÕ`“î§M£°Þ̲êdÒj¶H¨V´sÍ&×óô¶9[IgÂ~¿?ÄBž•ˆJ—`‰J½z"ÊÉÚ#Ê/ñI,êÊ_Îøiu9ª‡ØRî·)wîâa–ÙÃåKâùæô:™LÄ*Ч‡³71À·ƒf¿ªÌÒKYÁ(ºX¶:ѦìtzN- ‡¯ Øf‚Ö²ºõZóÖ¬tš¸<ÕÃBjˆï“Y÷;¨__Gû¬ ]o]æL½µfÒ&1~öjlxµO <ÿ`´ÄETNÖnƒ†ú!ŠX‡GëÅà<[Lù™È2‡ò®7¸Y{¢ûj8©x‚¤¡{öðEû$T„ö¸¶PZin?§¹èxáB°áéa¡ÑÌcúvJ k_[âkT%½âª«¶[N¾ AÇa|ÈzEï~ž•‘wu+£‹ñ?Hó3ÕŒzÛ¯ò´«¢¶*'G™§ÞïÕ gCŽíaz8}»ÔvRª“¹A§D¸G«ÔhQf£@¿.ߘy½37äZDBfM ÉG èƒêвoZªÂóW¹Â¸Y¶ô¤<ñ½=~#Û6>Ͻ!·ÌŽK†Vz@á£ÄË/·Äówç ï/­m\r © ªµÍìÖ¦vgýT/kaHmÝq‹Ì]Ä ñ,¬i]¬‚ö½¾ ßU¼•;x%˜–+JK©sLQìR}Å>Ì¥‡Q/|¨Ü°°M$©@ÞÊL)ï"ŒrGY M¦“=š/MJ¹ªê¯ç䚘ÒeÛP¹Ëþ“Õg¿™^^&CɤÞmŸ=£N4nb Ä‹¹òŒÐáâ«Aç Á?5·…Hô°hÁޱž+ð ÜdtøG¶vÞÜ®ƒ|>¼!9ËjÔsÓÕ™ÉM¥ñ±¡ØAlÜÆ¹³còDLpô”2M× ·Â0)#é1Tî–ÂÁ²[ ¡ú´õÕ_+ê›kíèà<æFÙ=‚Oi8¼ø.Êù¯WóyŸÎõ¶Ñ õHK@Ÿá”Í?•b7÷T@ù%K7gM'¥æ#}UO‘ÒÎ>¹lÕk̨Ø©?ß' °±uB aœ°¾ùZÛIû“Ý÷çzż:CÞ÷§TxW‰mÅwß§¦ß m*=¤bæÕê×OÖWÚ³'úž ·ƒÄa$ÿ˜\mä~÷Ð{,²Qâï¸@ö£ÖN~IÃ"Ó(½Á#‚ЙAµ­Ac0‰ ŠÂ"Ûxµûá(xOƒ ´å?óÃrû®‘cÕ'ôéÕnÓwo·¤½gôšeöça-ƒO PPwÔÕpŽ]Âa!õ°ÌÊäQD—²-ȶ}}ƒ—Ïå[y—®¨&ÖÁŸEV3-°Ý þñ8Ž•R„­óSÄŸ.²/hÜ#Èq_Ì\vÞnê½>ˆÁxÔçž`̈.òaö1Æ£øî\lGÁïvhø7©] ¯ï=^ÛI»ì‡lõBÁ‡®¥²AVÔwÖ×¼~wÇœÍÜȰïÚרT¹î<‡þ"rÿŒ ÇÉ`<Ý*ð¦›%|·PíB0‡›EíòE@£Š›Ï[ÙÕóç„þíuB™«<øÎ/JÇ[YZßÙ[PÚ<Ó¡w9žsÂ6ï·y%ÑÄ,)uÔàAMwGÛž.æjÒ±y,üÞ|Uß>j;ú‡äºñ7Ï>7?Ó_"È<¥fƒ€ÃGä!!ËùÚð·H5¿M×Ã'ì ¿2C·6..ýY;›Óyš|Ý¡É%îÌàƒ³ ?kç­Þ˜Y^฾_ÏZ?ÛZgz©Šý‰Õ_ÅÚsB`âÊ*Œ<ÓöË~ìnÄ×ßqoç¹Ã·''ã±ÃuÛù%‚a;ÝškÇŽFÛ è%[›×÷öº½(äz"`ÙÞ¨x¹Ä²÷:Ÿè´Ac&˜QÓÕã»´µoѨqî6VAà¸8ŒF¦¤˜{SQò/ÓØO[7{w¯îE‰,´jE¹²Çã¶+ª·ÙøW×Ú´Û¥çú‹`NÆ=Ã^ïÌäöK½4^q‚Eíâ<õ®9¥Õ|w¯+ lKÚE¾ dR=]+¥›± Â÷q{?d§N5)²èA?·«Ê¸7÷³šGíì™ÇÈsšÉµƒ¾ÜJàe·y“¶¾i+ïtÑ~ìKÙÜJ‡p_—À>1[lÿ¸Bdæ±B þ!žæ&žxîúCº˜ß™ÖÞ÷tw÷_^R^›Wµ·ObKW¥Ä d¿ø××ú+à M1:zçeR÷ Ý]¢²;W¶¯ÕÚ|е‘p´¦&Pvõ”Ô#´’À/´[!IÎÇ­Ò}yÙ Âå¬{. ¶Öì ‹º*mó&TF¾qͰ„Ê<ºüòÏÖ´Ï}ÒIϰ×nY¾»ãìÖ÷yš;ÏOø¦3Õý¦¿ÐD XÀ²ö\"¸ò³F|·k=7Þ[÷ÚZUb±bà^W!â?<±m%‹öAæÝá»Àõ»—êì¨:äÔ”/£iþéÌ'ÛÙŽçUäÄ>Vý+Ê<囥Tk°¼g…yåÄ ›¦É>ü‘¡ÿòq.ºãž_Üùz¸¡û“-7%}ëp â­±r%Áþ®.PÔ&ì`ìz`×W«ñ59,ïèõ,Ô;û§ìÚ®¾æûqðåÔ¡ ÎFÞ žžšé.¹TÇĤ8÷Æeš³ÂY’8éôy;ôæ<†éö´= ÛRuKoâ»I¿»!öБ!NØÿ {”¤ÉP¶ƒïpó2zx;siaÒQ¡&¼š‹ÌÉž{ý­ÜÛëaá<\÷.¿¼ïY¨8}! —9uòjíüY®6¦X‰‚&¥|½0®K5vIW²¡Y©Wbè÷¦¹}÷´:ê¾¶ö0Þ`ÀP}»C•ö×Ãø¾6FTIÓGûÙõ˜¡ýò Wûþ<†…zªl¬ ‰¤iWFPnÅÍDö[ûìH[k.W[MNCjùÀ™©Ð†ÒB~VÕ9€fh¿xÚ&¼Ývî\;Ý¡¥¬wÚ®¤2AKØ ´0Ýî©¿²æxe)4ƒ6ï_f±ã â¸û“ìôiaÇf#øOp©ë²ÏjÚfñ ï„kn”vuŠ£^K#†ÃšÒ0McÖ?ó¯mó*VkJß^) ë½Ò·¿ì]·…c{·~Pûbø?xæÇFv!¸‚›òÁ«´|Ɔt(¢aGˆ£éœÑý¥ƒ>Ëüæ¹!æ1½észá8Ÿ¡ãÕzbãsm,¨Ä™%ÈØfÚ Ç£»eý;êc24Á6`Q®Ö·bV™Ò»uÄ õèkkªº}Ýg'=.Å«tŤÌwŸÔS£ª ¬Q|ˆ«pæ-îb…ø`´úMY55e½wðr»Ÿ×¦š6Rù-¿ÊÒvóY¬ÌN·"9-ÛãI¥ÕYÏ+ï™í"ÖéýÄ»ŽeÝÒ˜ôŒáqÒ¿t'hÏn+”Sí‘]`˜.±X‹û2È/AúäîâäîÏÉ/~ÌZ66çkjgsþöæý4O÷™}8Èœ|˜ëÍ®I>—¨ûˆ<ðéÍ¡m±8½r[lìªËú¸Qz˜Ïó» •…³i“ËaÈ”Õì©ïÁ[ÞûL{½{—Ž(wÐCº¯N«Ôù&’½I‰â²­ú÷c"ëÏ–¾ -ýùåÚºQRLµ=`)]ëð˦úÏ=t1B…»½sÛ-åo û¨c¡5–).¿UY_*!t¤$xÚm¨“£Qe1²­8(8c¹¿ÆzOÀÇWjU¸ÝM©tvy £i«@t£Ñ†'½l<›sù¦…¸j³0iºÄ­ðÁˆψëGØ7 %SËPÿpæ0P;Foúp˜qEþÈÕÍšYvùå³?`À£Ó–{Dî»nVp9¸Œ™|ßæ¸J¿Ü{½%•›Qéå~Õ}›ÍCç«–L26°9È—¼6 æÂÖ‰®æš—^iL(ŸÖ\CHî»Fí8xÔ½†Ö=¦<­¯ž«]}e²Båúê°QêÏèxøÅlÎQC\JÛ×=y¿M{ëÕüî 1³tØíî[ž /”ZwŒ¨ÚÚéU¢:™<{rHˆ\ÛØjëv.ü¹½ÚšôÜSózüÜ›xúÕ 4Ä^¬¿NL»ö¹Ê“ZåjèÌnUE¬ UeJŒ«Ôû°«R¶¥V)ýxøÃQ-îuå>ÊiÛ¨ÚÈÆ„”¬¥°6ïÅŒ;íÖ£ñ«wèÐÐG­õ«c9 ð-Æ­"ìGÍrÉÛ j­M¯áÁÁ¬±:U¥úë(õÍ•?×¾¸âÔºÂõ[=xQ® ¶õÊh'f_ô\6ãϪÌj3«ŒÎ›`¥û n¹–ŒO{¦‚O‡¿¨cwiîZ3å°67þvé±Èr®ûØt"vòZKÊíþc[©tb´kÍ€FüSA\bßÕ~+F¥WhwY©äD»S>÷‹lyŽ„2f÷øuœp®ÚpñR$'%¾ïã¥*4ìEæ*èÀ,¼^h\xÝÚtaÝ6·…æÉ<šûCö¹É¦‡_ö 6ü¯š}nº^¨áb1­6y–é#‡þ <Ý7»¬à­™¸MÕ «Cñqîº|üKóƒŸfŒí ÅºÌ½ŽÆµRvYK§Ëzˆ5Ú×Ê: r7¯ã1}WõÝç(H‰K@×3i ûâ€( Àz  J£uJt(Ïj¦?2ÚÞp…ÍxÉvÌtp‡ç£n¯·è4̰Z;\ûh¹h/Á·C2J~®P0ž0ÿå\ð½4> ¶ tI…@Ý…”a9Elü,Æõê]§,E G WZ¹@/#)2ö6ý9¾½N)Ái½îqô¨ÂñÎjìWì—ÑæÃÒÚLcÍyƒæã®dõеvÀñ…}Êa¡éÄù|§òAðÛÝýWÇ(¸å½ ü/ªÿð+)Z#åÕù¯\ïOioœ ã <€^« ÿSÚûS…¼NGRV6oøonº£Ö “Fç&½Ž&üÆkßcØ2È=XaèYn΂( ‡£bʃ ÃQú! Gr6}:ýìî›)‹{ŠþJy‡aÈ” ”–²­¦¼;aÈvÇ)AúŽ1sM¹Âp’BêêÆÿ'Ùb~f…»¦0i¨bï&œ†:|aô¸Ya´Çý0¢X(Œ0³†×( õØKC=jË0Ô!%…JãÜ.n)ú3å„¡\Rhôgmx)}'ï´ÂP è”ç6²g}nò ŒZï0è0˜Úääbæ_ò(þ&¡˜nÒpr wh¦Á¶Ì0ö4ØMÕþÉܶ'Ÿ0F,$ŒÜ|-Œ”!F¢1 £¶Nk)§kJü £Y9H%)Û\Š] #i¤Œzaﱚ|µÇ:`‚üùSP î7ªYvÐðø×:…¯_€ÿH²ôú”¾âŒ4Þ†&g. _Ôžé‘îÑØ. a¼èÕØTúa\ ga\lRÔãÏÚäß×°?Ý,?ß_Œ¾Hµ ìŠD”—?Óí¢ñ)’—þ{~@æ~iÞÆ]ŸßvÚ˜ëžæo7|WÅÚ¯è_ËÞ/?™[Ý8G€­™é«µ î[׎¾ò‰€| K,†ÉôÚ “fÚŽ‡òÐ,8ÝÂe€å ùS*@Ú{1Çξã”l¹$½—÷¢‚W³EÅÞ;øyË#»ëÒó»­'5,1.T“v3¤Ÿï3ëô´+Û±s[†õû­®`öõE%·?D`Ñ=G q7SÎzö?éì òˆÀfú9¡óÏh éÑPþæë´—wv|÷•ï¿Ö;xìɰx†ŸÂÚM¢üÞöqÝ…ÁÎÅaèÞãq>_BaÞ¹¹ÛürSº¹‰O^}dÈ_ä—¬Y½r=ÑuVs{†gÃËÉ,µ¬sÇϧ<Ÿ~‰Ài˜ÆvÓP­A(uKY¸?EÉ! iÀgÂO°«œ×eº%÷¨ŠÅûÍt¶0;eÍÜVüiqõŸ—ÕµM8ûËnë­(|Ÿ­ÃyX X~ŸG4œÌ³„ŸØizÍ/’ÂZw€®×æë¸r¦æ‘Xö í]'ô?D W²~òÐ(”FÉVŒ2%û'¥ұ꿗ŽèxûÃÍqsÀÈ¿ÛߚĹ|]¥h©›uý¬ï×3òZOh ŽÍYw½0‹ñyc,WEwä«¡×"7ë­=óÍi[þ\W¿Þx~Pýþå/¦¢[ª®äŠ3õ‡ýÉ~‰ ZåABéAÁøô¤-á·xjoqÞ‰ÕÞ?8ø§œçúQBÓJœsÎçÀ¼ª&dðª‹ýUõ¸&§Mí£=ôç´ª´…™J}«ƒV?Êh}Ó:ðoJnßöãd…ÆH¾/I®$‰¾uµW6ØV^Û¬íÿA;Òü‰2˜ƒ‰ávåX·Ëâ'$w@Ÿé%štgkìM܃OúŠŒœcËj´<&*°ÖÑ,HY­ºÂ\¤Æ~r_»[~1ØqÖ~*?@u)WéôxÏž±ñ‹¨óÿèºÏ-Uµ.\Ôׂ9ƒœ3"’ ˆˆY1£¨÷À¹Öž_[gï?UÕj–}"Ê/¡ëú_ç åz>Û ìtŸNmêØœÙÀ 0±qí¿¼ó³|´mv@_?•Ëø¤Ö‹æþ&Òö³`¹m®s¡WНðaÛ‡ºg>}êmfE­žå×crÈ]¿ã(YG—»WõÐyÛu‡êó>ØLìTÁID³Í‘Û…`ç=íf³5›+@º¹¡ßÎPK¢™¹“pÐöw:¢Ñ§>.¶ïšç·Þê<¬Ôü»ÑP„^‘×#ž“vž>´îÖ£V$øO]OQ¦-&cS<>Ãlœ–m¿<¬óyyÚáKoT0cÝe%x1çÝ6=4bpܪó)Dm»G”©XKyØ'ÆÀês®îJ¨ß' ¹P£Þ×­Ê>VÙP]Y‚‹‡R6w€\ëÏË’v:vĨS"Ôoh‚¹bÆü½³ÝóÎ]/òÎÃàx7ßòwOQYCènµÿáŽÞ½0‚râd#6JƒÐzu³zî }vV-nñIû=o¹ÄÎ-Øé®l˜Ê[DÏñ úý™3µY|«Áe1W–{%oÖüN®×Ô«Ô*’/Ñ Ù‚p™@þ>`<ò %nÂ|³n;Ž(¨v&å¾ìL®Pìû|18*üйɠù?ÜHÔ ˆôq×uð¬/FdMö…›;S|×Í–½˜ €©â¹ª1ì¿:¸›Ëæžýéä!k ¼¨Å‹í(•ƒêÉõ5¹Z¸Wã$X×ï µP#lfgGcsÐÜd8;2Ex‘0EdK0\àêÌØ:›£îzÖ•m\ó’îfMßþ]…¦»²2“s79ÏG„ëñhîê÷1¼O‹zLŽZ}2šbZ^µ9e]–Ty—cLI÷£ôí¶4®¯üš\oÙà–ÇçGBçë+Ï*³]¦¸i2´T— j«ïJ…Ô'¥¶‡(µ]9Yºòšè´Ôšõÿr–›å`ËC;¼c}ÎÄOÅÓt4»`ìDé)œ5)Ð8{V¢¥ }Ÿ`U }¬§ÈFËÍ(IP 4Ä.P ð3žñØurd¦§dh~aÂúøÅ”ôe‰®ÊˆRƒ;IK]eçw«ü¹Þ¹Ãc&A­¢¦ }Rßq?´¿DÇw4ßTTþÏU_îêZ·…þ!‰_­?Qô¥±ÇÕKÙôæyÏ'mɨ%ÙuOÑ*&‚àV“>/×&Gùã1ä½€ ߃5½~]…Õì*9rÐw[„9\øm÷Tp§/L±øŸ±ø’ïât’q'=3dhø-BÿEªÙö€œÑéJÇV@U…Á¬6‹´I¯Û nfK|ƒÇœb¥Þƒ¯’áÁ_ÑÚkuÁ=y?¹…,7{†*\dz<\zs‘gt½.¬¨V ϲ]Cn„ÅQ_Ü•Ä:öœO0Œ(Üet&!c”®ÞÒió>î tΗГÓÑY異o»ø?ìrÍë8¼uk^`)c=6ý]»rþí4Î-UB*Ñ–Ž'þõ<¾¸ÏçYäòM¨Íò†@1’-ˆ´: úÔá"Øäé€Lˆë ¸mq¬X;cS ù >‹VÐÜÒB¾‰ðŠmº°ÔöÊ.–ÜË3ôû*¬P¶SŽ©=áµ–àêÕêõ4ø"t“®ÓçCüÞZ]p¯ó]0Xi]ý¾ý¡þ%k‰7ËähÎUCgz²!kDö ÍÚ o  ׄ J]¿Z`—âúNµk›á—¥*|Ð ö)FK3 vK-6÷&"— ¼Ù^¸Þ²qZ¯Õ.Ü»†ÚNÇfÇ>ÔéAÛví®ÙFáã¶"Iz®tzN·ô.Tè)M•¿,ðEcqÖÑÕZìF\‹g·Z‹G)Í©ú—?Ñ~G¥\wž*--¾j¢³cÕúhƒŠXeÑb¥ ,‘ä%hè§Þ`4ZwWŠÚ“â(nã«8›BolAÔžD À±`€ž4MŠ6Xð¿%ƾ¹á6qS)µ+½ìb~½Öo4Çe=Ÿ+õˆÐ™úàºÒꃭ¯Õ!FWþâ ç,Rý§þ‹†»`dMj Œ»•.X“2wB @ä7?Ĺ=Ù3›Ö —ƒåì`.¼ÖO‹ï·~ ÙZ}(8zºQµëµ!×l[²j0sÈrêhY‰ª˜h•¤ZéT¦·¥\!]Ö/û ø)˪ü¹Øýòg£keŸ&Õ¿ŒãX˜8bqf­ËAïóìY”næžäÂxÛ¥.ÓsÏÕ÷Ù}kpk²ŒÛSyµV·ü¦~VØEïÜev¹Y—–í˱´ì@qI¸)ùRy¾i7\MÑÄ¢RÜ™EdÂôàp+ì-¾Zè÷>T¡Oì|4‘Ïùhêe/Ï|dÂZ¡é1ƒÿà‚‹kQ}¨çk E6…&˳_§Ûz:ÐÍm»UD›ß6¹©ÜZÕ|¨wg]™užAi¹týbÝw—ùS8É^7ùNyrÊ]/÷Wζë…Ì(-`¦ãÌD›˜€­ÀmÊö `ëaÀ.tÀ®µ€ÝÊE0ÀîÓô÷î‡é_¬–#Úº–²OûEæ|04(zØ[ xžpZ½s_,´²øjj7õ\s•ݾ¼j«âv-  ê†9øÝ ¼GlRŒÀéÍÀÕòÀí~ ÀýKÀoÕov º£5@ôZO€ _@¨{ 4s.ÿˆ‰ĸçD,ÿ2˜>CåøÙ)Í]8ú´y8[Hº=3˜U öm}ÑÍ¿W§LþüË¡»Ú¡ØXÕv¹ÛÑ]øŒNÿPy²ýüy±›1±r±ÜWâ…t²èÑɧ{–]€ ­;@Fh _ Š7 Jþ  ©ñ‹TÛ ˆçô/ª¶*õ…Ù£&2 ѦñùžÁzVhBEüZhtj¹wežoÜJrw~.@R÷à—~ºO `—þ×ß@"ÂýXíñË¡53Èù3ÿ'£¦€PÝ8[ΓR6@Á½Õ¿+Nüº °¼ÿëB(¼“õ!OÛI>óhž|œÀK>Hü빈Q’¼_N’Чq’0ô6e' KTR–½$áš\Ê@O9¦¿ÌWƒ&ý=Þ>¥l)ŸO’bŠÚHY¥ÿL¬0)“?±Ô]&^Õ<§ÄÝ×W[¿_ó¦—üßH¾5 H>ßË,-z6I>ÂIÞbÑN’mn’–Ø^¦·´ÄV!Å…þäЕÂ*)s+%ñþ¥¥}Êô’rz¦–€²’¾õš×‡È‹9\…gÑ£'Y®Ÿ%¸ÄÒã~ýCu´¿üȺTÿÏ7?’¯\ž'_ò>Më FÉGít¿¶S&ŠŸ¼‰`—$×KZªSO• :šVñÿî×›Vš§`ëÄ+IÙãõ•¥Ë‹ÙKgØRßñº#äâªcÖêsÝ{4¦Œz׿þøvfOáÍ,¼¶·Îò´¹u¢Çöz3›ÿ|×µYò>Çi±|vâï¹ùÌ'ãäÃîɧ’÷ ‰“÷tVJÞäLÞÝ.‘âH‰· ÐÚ9/vxöžáí¶x–›ÇU\k¯wÍ^G÷c¼»Ý!üœÜºô%uÂZëò,³)îWó<Ëó‹30Ö7'®Ì¬O… ¼:.ä:ZZÕ_Þ@©9M)§¥ž.vò.­äk^ò¥uò¹ §äÓ7ŸÉ½—“\õÒz.—›ìÂJ¬¨ñè–ü=Ú,•{»¾7n–9×ûù2½¢Ý{py> › •ç™×¼sò>qœQ–ëu8!=ý7ÔdgÙö!¼í¨œŽPÐË}ºyYûleØÍKY޼òRºéWèÛz<”~…Q~Zþ`îóðü ‹Ú#Þ>›ïûépÊßàÚ´ry­†­óg7ìsÑ8ñí­l_9nÇ#ýp˜ ³øáæìÑ~¨ûþîz^­v0õ:mG‹V²Åx¿¹þÒ-a‚œµ\w‰Ñ²´ÜpÇÝP+¼œP}^í¿¼Ç`–‚8)õÎÕMïËyÁŸT}¾zÊ'`u7gÄúŠw®û3[]"⟇ßÒ÷ Zi‡´jíxŠtÓƒ‰"6˲ëùRÖ…ŠÜ_…Û±½*Ãko)ÏËp÷)Cmë䃨‘] º>¯ÎݼíøO±||Óþ˜½•¼ñ—wŽv¦)¬ýÎÍœÑ;· §¯Êº;y*{`zsÍ•yfã£qì—äÑî¾B[AëÀ¯e×V˰–,7›z>Ü*•°Ö[ Ãl÷í.M–˱óûKQæîtfúÏïfâ}`=û´äÇŒ6 -¯È ìT\…Ãɶj&Êm0˜ÔAŸÔ5ªÿ#}˜ßöß½ñ«Ê³£k¯¤sØüÒ'I5©“"ä¾7WèÏÐÚj5ãFáaÝž/†noØÃÖi>rZ±?Ô?³Ï,θQåb²íñ8“ 9¦«™ÊL«¹¡<Ù.¶æ¤QzÍÆºÒÛÁúupsíY¤:q=ÒÑa©9˜>Q3”¿¼sïÝôÇ¿þ ‡ÛúiÓ"ŃùFðÝxed×=· ó×üaÔ } ns]Ÿãm}4ûÆjà…¶ž®GX4­žáëDë’Éøè²ù1x¢*#³#€îÍÑ`Ž”ëôQ¯±m{ØTaû°æÒ0[0ÃÊßs‚) Õ,‹J†ü~U>Líé\ ë—~è »¥§t- Öª¦w*‹KaטOòktôÖ‚W^¯“}?êoÂ>² ÚÒ½‹ƒ½ód„³ƒ‡rl{oác´R´Ø…Õ² X€˜‚±ÃMèk<26ö¥õÁhZãú`W©ªr†¤_FÐ/éø]ŠXbámR™ÙÑ¡hk[_ïÒ«í’†Ã!¦6‚Gsœ÷ßq·ì-5hr¨Õȱq‚d÷ ç½Ó'î°÷옾ékÁÖûËÓp³ Ãzuó5úì6»5ˆ–pЮqÝb[Bÿ¾;+Þ—Úó䵉+ ÁEèÇBŸÁý%>®ÙÉ5—ïÛ¿¼|S’ txfн` À ß÷©ìvO‚ܤuëWG¶èÂÎëh1¶oŠÅƒœaJ]z4T[mÏЫÅ`pÒ*ÛA{YŒôÞ6÷èò¹öÀªFÌà¶êçTJ¥]Y”[3…»Üc¥hÿ£—W,+dpÌÿþñ¸t©é¹bÕÍi…âªñ È‚]{þ|’Ô=¹ “tnš¸1ô)8dX­°žÃLéœã‡ í¤ ¸ÍNkƒŽºpuX°§ýÑl¸Ð¦ u£~)RJ•…ëä”âkÝ”%2Á¥mБ%•ó'búò<‰‡M—'+>e.ƒÉ ÿrwÑZv"ˆÁÇÜ„¼&„—ŠEÎßòª7®·Æ$"`Ç›»ý]KèŽjÃÝjÚ3¬M :žïÇ!¦jɬahä£ê¨L’÷”°“JÉÍïd锿H»˜]ú–^õhÐÎí5/tœªÍßÕžwŠÛï”D’¿éK6ƒÎ þr#Ä÷ä`ïT}-Ë¿¸« éî¨çÕóëÆ¸{r¾¥ Yrk•»•çP[5ŠƒK³ÚÒkíã£/­Qf,ªl§*‚䲬9Ž´[šžÔ¬8KqÀŒÂ9 c¡óŽ ¼Ã”Û\R4‡—盞­Ö¬§a6¹×³Ì&݇S}:ã÷ùãJo/“=ÁY‹y&c‚œ­Š6<9Aã†ûª€%¼ÒyAséßìuä½®iïź«òœPÄ¢ÆÈò—Í:ˆ¥=BibDt‡"dC#ÁŒ‘€¿CÈ–G,áÆnŽõΓKYÁÌlŸaGIÈð¤È°Ëư«"ÅÅ™Aüåwagû½þ:ï—Ð àç³w›ôÔ*ÓÛ´Öp|„†û¿ô`øÔŸl:OÖñ¢ZìâM¥‚R°´¿5 1ŠVl·ËŠÐ«ßuÞÕŸ6÷\?=ލ+vÆ—O,°F²C€)ìÅ-]„.¯ µ1ÀRzažÚØC8å@ÒåëƒÈÀÿrRgâh#,vjØ#PZÔTwHx4:ÈM›7ˆÜà*ò»þL²ØN] ë«"~_Ym5I¯¼Ûâ°ñÆ»|¡ùQ=’¸¿Ñؘ,fQÜ„L‘ŒŽ´/J™VÊäþËõÈþ|/‘-NðˆS‰ÿ’-î¦ØÙ!@öCÏÀþr<óçwÁ$x©~&rÔÄ,`È/Œ¶ª~+×Åùº´•¼ÝáGIŸOqè[EÁ'->./.ÉMHö[²²Q'ËP†Â,Ë WSÅ¥+_cN©ìlO&›qòE¢ý¬wðëÄâq¸Zãp LpˆÛ¸Móx†_gúÿ°;Sówµdî'YíiÅ=v&$ö £‡ƒÑ'§å½ãFÖ*o_4¡ËVp`àÆÇ!‘ã’Xg¿±Ã²`g„ÇÐë¾(ÓÕ§Síƒ=#΢²ÁoLÿŠÃá*K9°q%¡ C0¨×xº(ݨWÜA¨Wq4<¤`ô/Û Í C»Åª~ÍÄ)D>˜~…ñ_mtϼ²©Ýö¢yÜøüøaeKOrÔÚØ %laT¯0e¯Ñ ÐC©=Ú£È(}IÈ©«„ùl[¸s­Œ±'Ü[bø€>¡”Õÿ óÇ¡‰°c4=¾—&~ÖW8¼[pxÏãH¡VÊVµÊ¶è_~·mIRgµz_œto/Î _ìFë“û¡ r3?Ù[ìÖzóªléº$>¨þn”#OÈ©A¶S‡°ÒÀö×AÀíÞ$Ñ^Óä™nÔ)]È]˜óuòÚwª¸i#.z‡Æ¯i|S9œn¤Â¤ÆB Ê!Úú¾=¤õ½8Ùàö·ý1Ÿß´áôT¿F$ÚR¬„±†# þ'Œæ¸BS†°ÙqÀÊj=êO/è\‰õ¶cW«÷öCƒ¿íQS«´ÑhA/ã–iДyð3'û ÏÚ#0·<,[Ü7wi®X©Ð” ^c+‰JC­AˆšCª å0GuÞLÁ4ä/3eÂZã‘éêNÉ?ÉÃó£Äê€QΖ4’£Ý§ÅÏ’c>¨ë'¡û"Y£°sCœ1ø=Ý–P‹f­Ò¡°n®Gì¥)cãw³šD¥ÆnV£fÝêÇCl¤£PØ«/ö¾fÚ•oõ³”£êLêb!îAé*U •ذJܧпL;0d»l‘Ö­¦0•D5d”èÂÂTÕÌ®8(±%?Ñr‹ºæšYBÔVž6•nÅvµË­mWQ£>­¼ÚDX™\­c…°7òÉåÊ~n”éå)çÄ;WÎ 5«´èÜÂw—¥â(ß(®0Ÿ+ŠoÑ+ŠW·P\~´¸¼QDq¹CðéÃü¶#ª¶4íš–ë(ŠZÅo’âèTé²r¯T'¨œG—w/‡×¢8lÖgåiÍ–§ü…F‰,ìÂÎó§­» ûk—?ŽÚ·üS¾Y¤ •õÜySGR&R®[:Àí(oÇȤ=ïH•פ«¤.6R.xÊ›ú‹SŠÃa¶ÿiÞ†÷Æ•q»MÞçföòD—‰üí^Uîå^ä®q,k‹j<\NË,QqŠ›ÜÖÊG¦jît´ƒy)z äé rï  ¦_ÐY½ › WÄN9oô6üèÌnÐGQO¹oôYn¥¬y}5ŒpøÃl ¯A1O$éæ](Nˆ¯0Õ~At¥ï‹]{¼ÀžPy¾®â”–"7-Öáú$w¥FÙ¥oãtÀúþÀÜÏÀ½=€úÏÝ?Þ@+ÎlzîP€ÏcÀ÷öÀí/€ÇE4åbøsœþ쥕<ÑEG)­é¬3…‘aU6]Ž/Ü‚²A²‹•¤ÞuÈ" îë^· äP¡ehUªL–‹ü)¦ç¶ß¦£Wœ¸Ò^ü |ñ²Nÿîþ•r ûcSýåЫn ^!o¤Ûä`ùÈI¿ +vkp›rrc÷r+)®óCØc‰¦.M]6‚ ê:'±–hRïX––žy(ª¯æ¿9´…†ÿĽøfƒû –…´À'tÈ&uHD‹R»ä2€²¬×éT/O§¨ý”—÷Ïç²!½RÊ“øåÐèÚùwý†jîßUÝɧɹɧг’÷ø5H’®$ -i)+'I˜Þ*eyO¶]L™´ÿoÙé/RýǧX9Åÿíê¥å$‘ ~âUåcBîÂçs]&2_ÿ!ùhŠó !‘Þ0y_ýä Ò?Dw„”©™VY RÜsZe1‹Oû͔˯9ýÎüKÿŸþZ½ÒèšëÅóõ•ß×¼öÍÌxåõjë‚þäÏŸA¼îÑ~\Y»_ûØaÁù¡&îéÑðúÑH>;ÃN>a$ŸÆGM÷ëBJ’‹$¦uªý”——Ö)î;¹¼þMЃnZ`þíÚ×W¢/fÇÚϰ)Lž|4˜Çëö`K×qZ„žj¼{<ãä{×?ÍêíÌ Ð['üö¯7‘Ÿ^áípy‰U)»­ô2n‹ÿÉ·j™ÉçFëéþÍÉÉ;^ðÉ;<¥E‹¹ô©½V¦I¢ëôz>ñ bóÅlén¼†êèc׫Pƨž nïzÒRngª¥ßLµ®7Ž_á1»ÄRuÁvÖáì5—Ów˜+ž˜›‹G!rW¢Ò´l¥ÏÓ:ì˜åð 5‚7ær]²¯ÿ]QL÷oNJ‹n§•7i'yG†Ÿ¼ý>¡ìèö 7î+–1 ¸¸FñÖ­æk—8<6/8”ôΞõÅOßÇ—>±x^8Êp?xx”õŽ{ÐÌNv›Ï~à«ݥ8ºíº&ÖܺÀŠÞL°¢¾~¯ýõlxí¯éÎVûÉ÷´Oë]jZoK¾’’þ¬c¤ÃÍuÒŠƒÙ³‚}ü{´fÏÍ­×”ö—‰ _Î4>O…Gé{ÜLŸ…CŸÝWöÑòÒÚ·+÷îÎRŸØöþ,0[”(‹›çÑ7Ã:ëÙq¬sø÷¼âüquYÄxX÷ÒB¯Åà¤ï²*‚sþ?¼ôb¼¢!ýC+ÈÊ_ ³ëºÇh×cªgúÑ4¢Š¹û“êÎv½w¹ÅrÆaC‚Öuͤc«Õ"ð³hhU*.ÊËÕéÑZV;¯n¨º9F2àÁ±tìý%)(ç6näÔh_‰Ùí{jeéàj£èÕ0êL¿‹Î;¼Î1yÌòà 0­.‹õñÑnÁ#Sè1éÙ¸';c¾¥Ûž\±¬ï¾>¶ØVkn†R}i–víÃPn¦c¦jÔÿZ{ZíCg>‹ÙÇ!êçIßÐMÚöo{ ÜGZlO‹_èþ‡XŸo†—ùù î] '×â²Þ®¨Á|}*ÁÏž`çISPâ‘ù§lg)ö¬5D¬ c3æI‡Ž›¶¤ k¶jZ¬$yÈÒ—ºù°ý;8½÷shã{R×ðt&¤zÉTV© =W‚Fó«°ñJ¹t2ÚJa¼Éf¿í‡Ù\š§M¨l}0fèô FNRñsqþ3Ý6Ÿ§±ç¶®Û\ì÷÷õ±81®˜•tÚ4¬C1j´z1=hcgA·Ì£Úwݵ¡=Oa6#ЈÎzª¾oñR¥Ñ|¤ÃÆS)ÜØ’,"ãŽ\~åyI‘Fc©^³^R½G´Äýƒƒ2Àÿp‹?ýáј—ÄMñ»ÁÃÎhÛö¿Æ®òË¡ÏçÏøt]ž\4.ì ïLñŠÝ‡õPÈ N–VׯºÜé?LÕ^}œR?CˆSé[WQMh ®#‹WÊ—¶ v-ÕæE<@—œØ²k-Áˆåìå)´Ç_“¿JÅ{ʶÆ_åÈ_Í ˜}ÕüËuÖ ‡ûò+u© A¼ž¶g¡ïU&Ç`üÁGëd3ê̬¼Ï+C×Ï'ýzO2q ÈÂ{mº{6UµÕ|åŽ)¥ü’”%aÃKÛÙR‘¹!ê|4Në÷BèäÊGÞæñ÷X[Un$¿1ëì+Ùד)³Iaf´2š?~‘jº½Þcûyì¼èÜÛK·iŒ«ã ê}w¹6¥ãÑ3@]t8ÀÓóšD]Õ¯3ø*!Ñ/+%»ß”«c¥+5,õA gŒæ…ŽIgY'oßE‹KæÁ–M:ï˜%Ý^‰ñ_VaÖÊ䕯!%)0y›o2ÌUOÙJõ¿œ¶Àu°Y$vá6ê(ßžöq­:r¥A6[³ƒ}6Ž3gª#àiT; Õ||9*åJá)×òÅœÔ,ç*"Tû´“{uøÛêƒñH-Çpcö#²Éª8`©j{ÌÌ5nÅä#÷J‡Æ§@—nD‡Z;—¬ƒ˜’Ñ݆’1/GÉx©A­Ç`ýÿPûéE__˵³@Â6[N±öÄØÈ5wrë–¨£—Aw$L5e¾ïËòÆØJÚ#¸‰ƒd“%·‚y_yçå׸'¹€8ÜñaÖ{.H6’ð ë4:Œ¯]&Š Jöшª1~:!Xæ ²)Z<UåÕ˜/Ù”ãFF=£–Qý‘],†‘ŽºÒ´'3¯_¨·­Â±]§jŽÏ*9³îÕ/}¢V+KµgJ{«8 ¬ –Ü‹øû^|rÏ“”㈎^agšÞbCê2\Û&è¥=âèòq”Ý®@)ÐÊ&÷Ö#û`Îâ0 î_¬E·‚Å{…Ú,“5޸ŭӟ¡óZF5£òc7}ßä%4Ù3ó\÷MN§;-؆½ˆÄüì¶n¿ºpK‡ÒI®­…Ë»7ßç&Ïí–ýH¹KïZfÑ„KLÑ ›´¸ÅÚÔ¶A¢T}ÀÐdÿ"IÄ©®‰¶>õpë|Ýa^û…¡£a }áE ¼£¬|n/trªè«3øKåÇ6ð¤Å};cübpÅ'Ãe©ëz Õ´ä ]8ÍÏM‘ÄËT¸vŸ{íH“õ xÌ,|iÉ”òÓ- ÙJäÔöç)Õ®ÖÈñ’ T…‰¡Røõ‹Øã ö1¬ËŒÐ©;Z#Ÿ×ãø&YAòÀ€ Ëcçäžx ÉEÝJFašTåÇZ^kÙ-XÁ$6o{Zác‡¨Â+#­a”ot\|ÜåÆõéóct1dB<Öi9w¶©PšS ¹'=ýNœG£aòç ~óŽ n]lÌÅ8š¬¾J¥ì]™s°‹äWúª‡[oÍU‹½êi„öªgÅêîöÚ«ú…rJ¹Ò«Ú@é/K#=#Ìsš™:+r4þt0»@ aá•¢¨‡‡í láf|‹Ú×™¸tƒèã î+97ÎØ¤ ?1ü®åÑjÖP`ê€ûõ¤0?3°ð¼É=ù“˜Ý= ÝæÒ>w")_è@;µ×¾ôÛƒö…ÿ}(jû‚E¥öŒÊH¦ð—ÒŨògé‘›tíq3ûSÔ_ÝGQ­ ±ð@ #î¶#²= û1-ôQzW³‘E÷îéí‘âäœÐðŠ,}àʼYìmYªÑ«/…nW¯ ˆÎIõÄNûx¶ívÕ‡*s„F3¾ ¬NÛ œv›'p Epr_–ÁÉ~VúËÜ?nD¯ÉÙŒ`4™L»b®Qãêß¡>ƒJ2ØÓcîÛ†v”m§8æ…RR—R¯1sÝA.p»à±vÎüØ1¡Á£}³œOÛéíËm$_† 8Ä1/Ë<èÑŽþKnÇIk.`‡V~ãšB£5KÇ“Ò,-ßQ³4u‹Í’ä–ÿ4J?fëM O,–#1¦îz˜ž¤VwvIˆÏä“YÇåqo_ÿäÐý¹Õ„@IÇ£œõ‹H·Ð1œŒ° —‡×yÞ[E 4—RmŠ\ÐiVŠO²¡ÈM¹Q¯9£z¿oê-P}× 3kíÞT®µ›c zrÙ}ÒÕ‹Á•«‘ø¦Ñ!ÐFdz¦±våc8¤Œi‚޶þ £[ù'exïóó§°w =·=êÍú­…sꇘ—ë .éµÓ{êÖ†›W¶ u­£¶öÕ[ƒ»Uí£û©Âƒkµ·[Ý æ+L9a.FÙ+°‹2¹ŒÓù¢d6Jó,”˜±+ùÇb¾ä‡½jÉ·þ‡ñˆR4§¤.DªW³+: ˆlh×&O¯wZ‡Ã'>]Í"xW†x)Z¡,êf{+W3aÊÀp.”ØïN+q@É..¹Î,e¸)ŠÅí¥(–Zßby­Ö ù€”z/{³ÉïõÉ(߇ C.²–ùœ‘¾]äŒ&ìäŒýÌEÜ£–oºŸú_Üü´¥YMÜ–ô÷ܤ”CÉè dƒ¯3!›'ð:ûDjíú¡ƒ8ß,ŒËÙÂÍõhÕ3*¯²$—­_”:;1¯c-×iP}À°&ãž—’¬˜`®)k€% LÙÒ,sé¯(…t&D‡_f4€YrÀ¨ò`¬RÏò4{±kÌK/ ½;Za™GúaÜüŸæm1æh„•gL6ñ ž^F”}9é ÉãÔ’ÔóªvCï^ùõÜâú±0ó… ´ªjÄ:€®J€ž˜€€µ^ãÑ€é³ÀÂzÀâð&.§œ³îGí€cXÀ…›òœ¸^|¶ÜÔÕ”ƒý£_|ÎyÉéWo{$êÌÈÖ³òlL?~MÑ5„‡eöixÅz£8ÎÙ€þë ÆPɰ`‘þqà1ðÚÇpº¸Bd¾³À/ï@T@A † §³ %ÛÈrû Ыí%äx H¥QOÙÒ¿ž[5=P2än¹Àpb3‡’9¡Ò±VëŒÕý§¹ïØ—êóàlKép;,è¶µø'‡þÕôË¡ÿ¶öþßì€ù?ïïašÚ Ù(‹{‘@Þǽqð­×êý­-¼ìý»x³ý÷ÓØôfÊù‘¼Ã—ž¼……’$VƒIºÊ¦ò/„¤}+I˜V˜2»& [É¥X`ÊOÿßñéÿo©þoWo‹K¼Êf”»îö×¥ª9ÿÉwó†üü¿'½…bZj¸•“ä ÓIBÝðë¦EПYZg?}hæÏ:µ” œVWfþ´ö jŠg¦Ü&imEâ•àMB®™ãŸVÙyÍ~¾òýÑ÷¶Ž•giømÇÒdâªûr;Œ[ÿ‚Üû‘⎿úCúJȺ~ÛäƒäÔ䯄ä=PÓ½JÍ») ™VÉ(ÿ6J›”ÍãßÝ…r ¯yeϼòj$>ùãE‹×Ð}KWÀ«vÍ{¨qí·\cÜ]ßõ7r¸iövë,Ÿ«SÚׯðFã.ãúÑ<'ƒü,¥:?{à×?“çÛìÇékî¼ÂÝOcÅ¥ûU"“w¹„&‰ci‰ ÿçø› [§W^¡ñ$¾]—)?®Ô¼ƒS¾s~%ôzc%òêlþ‹¶|W|ýœ¨ ëLWãÓ:Ì£°wÚD¥qåvØÑ|ùÐXœ°_¤Z®ˆ{pÓÖvfí£ì:û«ü’Ï®"%uE§ûƒ“÷Q"’÷XgÒ¢U!IU{}yÛ¥èÝÁñyq½ÑÇÝ%æÏ—s"ãôaNßþîsbNQ!âo›Êql‡@û#ãv÷`8ÁvfyFooÊFÚ‡Ë`3†Ê“µ×cwk2®Ws\h¯ò³¶ -_ ôà¿d;íÛi Égëci½jö)‚6žî䛽_½#=šíôx‹ƒ‰túî”A¢{Ø…mo?P*‹9ªo·ŽW¹|Z|çÚ‰:€“*°hý‡äûRÄä»"ø„Æðå =ç|RÉG«}E¢µ}ì®­ÆkCD@iÅ7(ܦïò ]ÒÁ\ç.Ïí œ5õù£àÌ’ja:#æÂû"øÖc&ìÉË‹ãç”ßÀd݈ªéÙìŽwKÛãptÔ¦G×$¾yç¶ÃZŽ£MAM;~æyÜ2»=.ÖÞSúòi:pT7•úÎ=Öß›· žÖß­sX•¬Z´8š…×ü¶Ê•|þ´f@%‡x¸ÎL…q[šÈ›ž>Þ×Qk¬¸ñ(•ù2û+÷ÒÝne´ã?9Y÷êö¤ÖG¬·{‘¬æÌÍ@é¼ÌÂÃk —#³>1¹6,'T5£òã%VEùöà%æT…x›0‹òºÄùɲÏ£Et–AwNdí<³·ß;{…wï=٘ʸo’àÈxĵV<å<ªï šªØ“H7¬O{èX´?õ¬sZ™\ø:W•J<·|ÁØ6F-£>xƒáÚƒÖN¾êÃæ% ºôvt)÷¯Æ¦ô»=+þˆû˺taܽwún{-XL)„Xì5Tä“xÜc:Ÿ¨€´¦öÍ…›ö×ÁÚ^Åúæ=Ðb„6yež]÷®svXCÉPÍußhtoÖ@w¿ž~JªK½CÁQÿ _}˜Û•µ¸Â&ûªšôf{•L%ÊW ŠÊ¼Ü.ü‡GûS”OÕôešõCN \6“|1@ÛdPåh*+ùXß}G.l‡¾íAÇ½Åæâ‡YZß¾ÃêþY64°Ð :ï®~vÓ‘SçU ûYµx^Ó4¼™j²<•ª8Yª®ÌÕõEa›µœBKÚ /­ç×¥$sÆK’ûׂTkmó9©V\?nØâ$ÿú·×èÚZX߸äÓ‡ókº-\¢1”øsçY1Mk>ƒ²”Ã,ƒPhì< NT¬›7è;O®¬= ±©á¾ÒQgù>šŽÖJÉ>]^æ,M.ó3KÚ”žs©¦4¢v^bSßW…(òá™Í‹þ¢ñÙe¢l üK|\ææHÚMúwt©ç¦Íù+š½Õzþš€•M–ðªs+@ÆP~ÖÀhZS½û™­ûh#ºhty©tï(ÁèQ‘—Þ){ë”Ë÷-(mÜ"Õ^/RìS9Aˆ‚Ö@08qÂ_V“5ß«ÞïÜ}O9´µDØg2wÙç{teŸŸ<ÀNfOÆ;ý6÷ùq.sŒ¸Í‘3$ì€z©úþÇ,NwTøÝàÉÉþ¼ø`¸­Ýƒ6KéÎÊÙê*újŽîí”"^dqͽ$eÏäÄC‹/‹­!_Œ›ÔæÓ©Ì[‘MsöBáÒQ³Å¾v6)d‰‰rbfŸ-ÀÐ;®ËäúÍ“ÓÁˆÉVߌOú­ÿÎH~Dýjž_¯X^¤/‹æ,T¥É ï¼ÝñÀ:[a‡\`q9裗“ªÒ‰}гRÜû¹rÚ.¥úípuäq†ÄõÅ_ý8ÇÃù¸Ä„¤Áa•F—ª‚%’ÈøÂÐ`r›•GóÜž.ÆÆ‡ZMŠmJ"öUù®÷TµÆ¿)‰’ÞYЕn“¿¬ñœ]©8À´¼u¬•ÇæI{;ÞÛ¸˜²‡ºýµÒQÏð²Ôo¨’:%dÉô—ꆷ·jÄÅáÃö›^ÆY'$óíyUÆì@&š÷¾,]¢á>%-ô ¹+m·¤ºi¿ˆc}Ú$Ž E"ôHÞÇøÎH2^Ù½h–^ê×6<§8¸5ÝãlÖ/0rIùcJÿ:lNª¡–D„.¯©<-‰£$˜³Á;P<æÆ½o:@Ww,ùÏÌœ†ŸL~}é—Kti­5(¹fv©ê~M‘Z+Vˆ£ ºxW³whüì>b¼“U¼ó®óØÍ¯-ñÎçöJ‰<ÿ²õù&vŸž_V[“hCUÜÉNøZˇr3ÚíÆJeýb_j6wé 'Öxn<²Óë-6 €¡Ï°æyC‡÷8¢Ëè÷N­“ƇªQPÔ‚nlrB‡¬8~©ÎE¼ËžMÌY5"®è³ VÐñýÊ øè¢ãx£ããü™‘ÖÐgc÷ü±)uîäá_ð¬|ý¶Æ×^u>N?gnõþcÐÛ‚y3ºö«=§9ü1L€"Sð ƒ.ȘÚô%U;y{²ß /dóv~òÌÞlèU®âÙ±ûA1´ óèDœ‘·ó‘™&] :à`8L?s6‡¿!ÀfÿÃL~üXíØ 9›Ø«kyhôX 5'ß4²hh¨{ô£Ÿä«[é ‡WÒŸ­öSfùƒp»Ðc&ß¼¹8†=8J&W™+u a뜇#ˇl¹†KÉ=ê­gåG¯–kþVÝ-¸J·Y2 Î@žáíóþ.µMA·s¸…^#ãÇ® ÆñgÆÑ,ãetãÉæö—_ëþôXµÓý2û¶pï‚ÆeÜ.õgÃv¶¤‘¼â#OÔ9®]â>î"°‰÷”¢Dt÷ÑÐíwNƒnó^u¢€^t ÎØµÓÑ¥mIûW;-¸¹ýVB[ N†Ðzß vkæš›ðJ²•úš7†š½pš,›\Þºý!€Ý?ø¥\…š˜Î”téÜ5÷§8pß튺‚?‰xî"vÁ‹s²ýˆÿ?¶ÞsAY íÚ=–9'¢bœ0‹zþéîyæýý¹Ðn»«D„»«Vu„÷üTaÌL œ,^úV6¤˜å bØ(w…ð÷ý8ÃǃÌ×dá‚CqÍ…ÍÖ»V6 ,º8è%ÔèìÂúÂÏ wóÈïž*žßEV7¿[Q»ü®[½þ¢^¼$øÞÅE£”æ=æ^Ñ©.7‚Eds<}gk­Õ"*ûiûP4;•úäpKçP£m}­ª´¡1„°E´f»E4Ïlj…ÍõcÌ™8,`åF?À³}¾½¼}çIçÉ: åìå˜ÖNÎ^I¡™åG« òÐJW¤ipo"’±Þ }ŸºÅןBü‹Z惮Z¨$ Üön;Û}èJ7jô"[¹Gåg ÑøïÄùj¤f‚žÿxL§²5‰×g¦aYvÏç;Û<•Ö'yš@E†YEäC¥ ¿;}Ë÷+â.~œ'œš\ÌLW¸L9³62™eq˜^¨§cÚH5¿5t:H¥tv ÍÓÕcꑎÇgÏôü?ú"É=é®_h±s±LÑ v:a0k"£§Ÿ‡JÕ±x?ÏÙ6†­¦‰GÏ[áRB"+ÍÀ%ô𵦗«¹ mf]2Ëó*„Ávj¿"û©v½€pç€ÝŠ"À¥|Œ» ʳCË+Àä^Àä·`RÑ0wôýøúŽGAߪ“LAډѩÚR{?JïÀîËÚŒŒÖL«é3oJá®’™›ˆ.[œáºØZU1¨Ö~µÛå½ý°cè»0M¼m}b|pÀN->¦('ÆcXol¿"v`ø€µŠQŒ]>Æ KÐÅÈVµõrM¥Þ\V™ò{/æ‹­ $UÌß8¬þÜ’¯NðS˜ø¢ó¬vl"ÅTɹ~ "(Dœ77;ä ÀíK-ÀÝûNŒÐ|š^ž¯ÓiÀ74à[r%Æ£ø¶|ÇÌÞ J‰@\ËŒ_gã—Ö·,àùb‚öcq×õÛI¬ ÏkRCŸ>"½ê“׬6Ïä[ —‰):癞ÝÊfz£DµCUÊ€w¤ç¶ø·[KÄÙe4äA‡@°œÏ¢êˆR*Ä~ü¾Ä¹ÔŒq™ñ8¾1lQ@<É&ÏȈë+â&Tx5Ú ÌìšQ«ý û=Ò´m Åd™B2ÜNù¾÷?¦hñÓÀ•ú±›Æür'îŽ_ÿÑ¡E\s€Øt< ö†ý_q5Q} øHÅÎHÝÃHkò¤÷4 eI²u€¼œÍ¼ÒŸ@>S4?ùvŒû(À@I),P ¼“Àà®=©T;µ(ùÉ»ÍWS”r¯è~m²£Üi’Y©Dù³ÞÿèЉÜûk¯ôê®~5ßÊa÷«ùòß$_ó þJÇ€rÝË¿ë²ý¬#·ºý…7HPEt–X{ÅÝý/¦÷,&ˆ^ˆQŽ¢Ú]Š"5ÿäÈÄ%ët¢HËL/ŠJàó2°å£HÏ—þ´ÓÄÕ›õ&Íü…8X‡‹ë_ˆC|™ýuõ¾•ÈÏ6ÛÏ æÏ V9ÿSxRpÀNþúcŸý:g£WÛ‰ûy‚¿ý ؤuÉýõ71 Ÿ¿ù ú&Æá÷R@~ È¥‡üçêMB–nägÂa¤,¢és’‹Om oå#7mÕÀݸô¿ Ô=ç~„[ãéu®{å9I„Ü+1Å·—PÏl~â’Gÿy½§½$.nUuÉý¸ê^ˆ»È}]½3ç/g"‘Ï3ÉzkÊœÍ?µ5K>Tæp[WïÆI×ï¹n§~kÜ:­ë^ìØ×V4ð.¡:]l°Ÿ/úi{æ–àrêç…T5·\¨„|ý8aìÞQ»ºƒ#Ô3û ¾Zçž$ˆ^w§½úbüÁû.÷ÒÄ~eé"ü•ý[­çvú ?›ß—øîpÛÐÇÛµõX¼.¡¼OŸ/Ú&wæ‚=~ê#{:Œêûïü›PÙíåã„KGÈ«‡òõÞÜ/…Ow×ø\úÛvúlBC;oèÍ]»q…°º[òú´¦¯Ä Wú‡èZr¼_!2zÁv6ŠÂ þsØD²kåM%þpéòÅz!­³›"½“¸Ä&ÇO3½8BØî—Üé¸k¼F§m;Õ»mÂr/ÚÐËajíæ‡ðêÞVâqF.}z',>îM[hÏl’j(Õ~°,= –if‚Üâ@ÍÌ܈œ¡›.ñ?øw_÷\ÜÕY„Gñ ‹;RñQý(œ•£j ;BmÛ7Nݶ>Ÿ¯ª¾¡ç÷ÆêÞØ´—Q;è.•Ó²¿˜°›ñò6Á¼í×ÁR Anz¹ÌÌøÝO÷µ44%¶X~bã*3¾X¾>æ®ttß¾O#IÔRþ‹°ßZˆ¯úåo-lDï±'DoNaÕ©Y¸œæ}zõó©?~ŸŽÐN wèc[_öýÏJb»ÙÅdÙ!ç•fjæ:3'õòô€uS²ÓëLìóÀ_µéwòŘæÓÑ£ýÚŒ¤s:ôGöðA §‡:ÒņésZT5ßé¯åc¿ ‡×ORÞðS½#jƒˆ>Ù³ò0j}áöü1PVï]k–„™lÎ%s¶aÞÈlùòG‹ù|Ø gÛCó9í8VfÂV,t,t=f${Žè"¯è§j³êPß.ÌÁ_[ƒ¬µëõ×ô{Ü/Lñ•×ÊG_t£žEï÷Ü+|O6®£oMdzíu7ŠÏƒ]¥yÙ|Ùãcðü‡gyïHW{0Çy¹™Û\÷©ç ÂÝ·ã`ýx÷fÍ{£7áRÆl4´{Ê·Áâb~ÏýMÚÎöÑj÷Çg{ÖÝ{t£¹.r1œ{ýÞtúhÎéF}qÔU^ÆÒþŒf'»Tx¬ -¢VEº•:ËõvÚÉóêµm¤g“ÉG‚Öþ|GÒÉö¾yYÊi4¯0Ûsç/g=ï´ÈÊvÚ=6'ã"vFÊ3è +˜ëõ7ëÉÜ#%ßcê›»ó ‚#ù'¤;W´ ôe—´`ÍDµ^þ{@wV‚dvòÃJ·ÝÌõGmlsÙ´:xîÚ"Ÿ.ÜŒ«D¡ÉR}³×êhzk üÞõp=íÊê1{OÓ«O»‘™£å1¹{än4~à_/ǰú¼wúÛÖè¼SÇò§Aw4<Ííé¬ù3ï¬>È»S(á™vsŽçZGJ Z”#³Í3W—›l¿£›½×À4…ÑÉm !dZ·Kûú˜\¾ëųô½ãQ›•ˆN­œ>¯k™#{5VáòÅÙ0èÔ)ÁyÈÀÊöÒl‹å MO¯Òç>µô~Xë¾§^X ,×+wôî§êvf‚Ûu‡õÛ-MX´¬¶þ4ϧæ­É±—éyÔxF^¶¡¨ZOÇL]ÓwRm¶¸é5˜Á[ÆâÚ9a¾ª®£ü­ŠÖz¹Ê¾PªTZw%¨ýÙ)A9”¼ð¤õ-nÃÙa#¯ýM VMäâåág±Ã¾ß×S÷A¹v·d½³¾;z›¨7êÍ‹è8æ½67¢æbÙPž·c]û/µ t~Ö*(e, 1r›Vݘâ÷{SEš\iS–Q!ÎÇnÙæ³Ó2“ît·úNë<½RJ÷k0*ÝoJXêÇ£ÜÿÁ1·îË«tÿˆÎº›Mzœj-ƒ]uuèÝÔñÌ÷Ò7ÏÆÊWߥ–]Ì)fßõ†Êß›õ’÷jÁ†žˇ¸2ò²v¨šãò¥r€ÊJ;°Aù„¸H™©û˜~-„œÎ·¡RéAj­’Ôõ†ÚKËî45h~4PÅ“ªX¥aqJ_ö1î‡/ö¿È…»]øÂ„Åj5C§ÂÁ…1ºo9ƒƒ;ìy½JN»Ó8릴˜õiÚTk•¸r6òýv§ÚD‚AåPß ¨ ¹ Wå.qÙëWû~Öùkô(=¼|ª$EdV{-MZ+æ}EÛ¨QÔ Î+¦ÃñZ­³O5›ZSjººÊjÞÞÄpwj6=Ù‘<ÚmúüûÙÌ›»Va¢Èvz¸É»OÏ…zGg’qæV£+¹Í[e¦×§“cÔÙ+_mVÒ¥ Å"r|6íê=Ÿè‚Z™•ÓÚJ{g̽V4Úg-E¯âôrÍ3øÊÝêü) jViW”ÕçÒU :7—wøú&7Ã.ãݦ%㹊¡nÐ<×v Ö#«ÇT¤ÆÚºì{vô+F[Ö¢CÌ0×vï<éZv§*GbÊ•»×ž¬{™yµ4Ì­ZÚÛ<¹Zñðð‹3ê5+f\°Rdµ¥Ïéz¶¥JÊà‰hMáÊMVsõgYiÜñ–‚ö‹®ÜzU}™u)¬¯¶’]xœÅKD¢K²áÞÕ¿uš ÞõAƒW^¥÷YÝܤáÂ\ Ö¹^r}ºþoƒÕ|·NÑÏ¡CóÅÞ@›'SÜ:GÌÙ6e•æ•(ë8I€)Î0÷]ºœP°”ÅËíòX“ÂðÜìnÆ/·B_tgúLäËµð€§¡ ÕVþ•C¼Ú*¸I¨ \É^lpË{l%¾î±HE…˜U¶\e–ŸÂwÀo«+¡ëÿ…ÀºéqZŽÐÁ×oÚ“7T×(LíóÀÚ™©^Þ¯vz¢Qz…/A­C^N&=•?G‰½¼¦f£" „E[žI®:?RÞ#¾ slõ=7mv¯\ú8ú°Uú˜c‘+Î1u¡Y¡·ÃƒC7ÕÒšÆãR‰:ìa:GŸÆìò|‘`Æ;Æ_9¬ï¤ø¯»ÛÕJÝ´–Ï–wnì0Ž+\Fkh3æ%)x{ŒÆ£ÓKžcKœ/v.<ŸRˆ§OÄ:—)5,vÍlõpž±Y+³aê—BÈ\=¢› ¦ñÁùÐDu>T‰<›ƒ.éàØ’dËq³—*q«{âV¼-HvœŠÑ}.LFù!“„…{b™/8åGNÒ˜›*Z>Ô66-‹G«]4vù¢tAvß‹4¯•ú0khRžYïkÓhOd%Ã2ÝCMšÐh‡ ¡²OYûá‚¢ÛÇy¡²’s8ˆ¸sAˆý[¾å®Œö)ÕØ¯‰Ø8{Ø8ÄÉûÀ³E‚q·ØÕ¾S=.áöæ\…Ûîµù2Óírhnz¦ų•Œé¢T¿±’²T¸| äåú@I×ÃX’K*qì*Ñ_î;q3„Tûxø«@Lpµ%®p zglÝ–.¢tžòd)¿›…Ò™jkìVÈ›€)äuÈ-ä…Æ¢ÇËóBM7~à7”ïÝGÆ™çùï†ÕïĘ–,4?õzW%28µAIA½fðT®›ÃâJ G燋V"šUòFaõQ;1üA¡`îƒü‡÷ùæ±üÌãÖ2›ë\áïÕ3Gõ¼z¶eü,ëNÈ­Ø!×ïfÙ:ϲ<ü ëóAh6ÄÞ¨ñÝŽ‘í›$çÌ™R C§Ÿ ‚jôD¥É7؆ÿV(®q§¾bH8!…ÆœJç¬Û3›£ûY<{‘.ë"]-Ë­æ5ä^XH%‡ˆ¸7—pÔ/°/3¬¼'tæ3¡«™ ¿d´gñ˜üB!uùNF…Afü†¿wØ3ãÓg™ ÏÕ™G{Á²è4ÕRŠT¾ŽvRŸ²ÏOÂâÆï.¤~ŸóxDaZ endstream endobj 84 0 obj<>stream Ô?ñÉköôµcÖ…4üZ.2™ioœÏèŽ̤Ÿo!“Žäïe-=÷;fºª®Üt6•žB«Yi`?JmWy4…§LtÊ‘ÈWkÈ·ðä¥Zä5?ä¶¶`þ —ÒõGŒ¾—“ˆÑU¾ì|o¯–§Ê×»2…Ü€¡*×QœÌJhÁ ø{8àð{Ïæ2åÚ- 5†cXsºèªFÅJ1ne@BÐÖÜ´mbøO@wÉøuõÄýèFôIí]ºÅO…ƒhñ24Ich—‰mÑGWú£Ï¬gp4RÎêë(ÌÚ»9c¹®GŒCÝD熞㮶OœÃ÷d“AÈ:‘:àÇ<`&C,Æ‘‰ñ³•ã·¾í5s}8€¹IÀ¦6ÀBâ'ÆžlÚЛÁ€yžN€‰ñ9™UÀœÇ;Àl ¯Æw$lÿb´½L«V¿ÿ!·ºgBŸ˜“ÙÃA±ê­‘}Ô>%X§KrºÞ>ñà,²`#–þwå+pÄ«8‰i'âŠÛ\;šn`œ7ÿ¤wôXÀ…Tüªð:Ü)xîܦwQLÀm‹{Àí¨\Œ^üºÙHhø’\Çk2]÷¹|‘˜ä8Y¼®,9[¦!¦š_8µ$Ùº¢8c¢¸_ô‘díB¶3–OdÊ‚…ãô4HÂ925˜3Sá¡_ýÕ¡ßn Õ°™èÐ?¶cÔú~“ĉDøÝ¥ ¥Š[ ±£3é¼"€L›:U´äÚyäî ²Ó‹æÖF@îÑ·w ÈÞˆñþ~6UqQ`5s¡ÒhôHsøáô$µ¦³/Ø~ŠLæ‚—É{³.¸îM >íßîüÓzko"ø®ª‹ÿ6ù&‚ï &:ô¡;Á@i–( Üà2PÙcÿoU¶o~ƒ.Ƹ þbz•ìßr™¯-vÃÿ)¦ ¾ZïÆ—„ ¼G‰ž¦Õw1®Ñ_ÈÀˆŽñRþ\½òéo.Ä(obxá_‚C.õãêõ‘)ëBõ9AWã'ÔÉ]7næQ>3·H,³‰|z¾TË(ò/üŸhšÀ§ÿú«|v^ÜEaù—3Q€þÂY‰ß’®&FeeQj=?†Ù}jÓ{B¦;zØ$xÀ`}_Ráñn\ ûmÃ3Ð ˜øµõÉWb2\ìôm•ÄÞ&}úÁ7#!qÎþ¸d_Äÿˆm #³º •ÃàzœÐ)ä¹SííýRI;ûÜø`ïLhÐù/ A§½$(îSMBâÞaé¥üßνËÏI&ª>Ê[è넼GtxÛÐÚòÚzˆû =&Îg.@'q¿C¿€@ÇO+Ÿ=ja=Lž<À½<»ÛÈa‡Ž_ê–åEškÅÜÕ½mÎWâýÄ#Š>µTî÷ï…`1‘ùÿ…èÕ ã}èóß^¦Á_kè=×®"×Ö­H\h¿*îz½ú¹jó¨ŠÝý’+x;Ô?·Äô8ÝЋŷN[»¹Åzu7ׇ•xXŸ—>µ¾/>Îî½Ðî—Ì<¢ÂÃt Pyf"F}º¯ßFSbß½Mlò Ol*•ŸÐ§[.ÁøÒÝeüˆ»Qd"É!÷÷Q^“·»±{ÝÎÜøy>~êÞýÛ5°Ý+²¡çi|uoné×ø½2§Ò<¶Õ9<<˜ñ9tf›ÒÁ™¡óÓ`ÚΞƓ°qOèýk;v)ä@;º;d4ã ïKjø}X‚–ã!4çÂAP5ƒJV¹à5}û‡è Ôsªš¹ë!Pß§ÇB>§ˆ¸8À–êoÂâh´êç‹Áâc%^õyùA]ƒÜO÷8= ëp¼ v9bÌ…3ê3àG=Hñ•'¬?C¢6Ô>\{”wÏQ¿–u–ÞÆY‡–Î~zûØê‘FÏrO ¹p™mû;]Á¹öÌ“ÓJá?D)âNÜZ¹t6üd¯ÝîÖØ¯=9?Z¾ Ö^~Ø –^Ôžî·¡7aŒ{0zèðÁÑðm8åá÷`^ÍgÈË÷ë(ö{zÛ>ÏzØ‹{‡QEëQ»æv[ý¶ËaßéÙŸY÷™ÝÁlø²ßŒÛÅî³eÍÐÞÜÊ´§»ÎBí:ÕWwû\>¤Î²ÊíYök²X©óýv^³G£Yëíu&gÛÖÇ×#YõGÁÕfØG¯¿FÀÔkÞÒ›^'J‡î¹F>œ[3ÿv„cêi<Û•?EÜ—tÆNÍë’5«ŽÊVæ|ju >ý´ÔÉ¥k‹v£œÛ(-!­Ö­4C|7jÒ~fm^”çêÎç¸Lp úˆ„ÅìêÍx·y¡on§¬!F¯Ýñ¡RuJòv‹·Ö£…Ôw"¦ã]2n×OS{’¥–VÀ±{ î çŽñ’íMÝm³`Á­}Ë)´ˆpH5Cÿ&7™T¦b^vUËä‰Ñ¨Ñ÷_Û†T4ßõ* uu€öj“wcQ+­¯?­Vkó8ø½u²ãô°”ÛôÂJ»Ñø³ÇÈò¯­î^é1ÛÖ„`—*DÉBXÎìäËe·Ù­q«}uMûÙÚ˜Wà Í^nñ½Þ4æâÕ¨þB…ºúAé:˜”•šŽëƼsvŒ*-ò9ܪ«i‡¨Óªl_ð¢Òô£ù/ìK ÔÇyj­´5(hó¹Û8Šï÷f¸\§¦}bs麞7(wSUé¬ì>ÝÆž5¡yÚ´uóúð›gvé6äÆÞ¯ö— ž’>›š>új ½Õ€ˆªk„‡ªõS»PÙ±¶Ò¼}JåcEù Ë2—©3êgç–Ó¹ôé»@–9‰aÏþCsz@á-¹¬°(”ˆÑ£Òçµ`»Û¬Ç–N·”×Ëõ=KyÌ‚ÙOIT=5{Uje’l‹.ïÙ›êWåZPÙ-Íu…È›ûòqÛ¿”i|éçç Ö95—î &—¼é¦®EÑ׆áp£)# *~4½Rœ`ˆƒ™'iì+Þ'Û[çÉ¢ómæ’š êáÝÏò׃w†óz/{Ö *­p±ˆ›çêPAÇŒE¤³Õ ¨«•=Þ5*„5h•­ÏÊÕ/¥íPwÓYé^}}«ÎR?—?h‘Ëß4Ÿ¯}4å1/'òƒ+–r¥Š˜“®ZÁ‰¥ ?oeéßJÊr5ï+ËÑi¬ÔŠ«ÑÏ£/ÖÑú]:q;.zÁýGŒö˜Ù7§;ã&^§i F“ŸnØ:ôÒ3ÕqÎVÚü™(ÛòSÐ/›B©t?j%‰¢ÚZt.ºšÊéC @ÝY±T¬‹idªÁêõP+NQ–÷.¥ÔúMÞfÕï! ›ëÍLÆÜÖS:–"Äb/Foô ¢ã'XMîÇÂŒ-õS£2ÕQ}á‹,¾w “í²ŠÌ SaÞNùFÍ}xm:ŸæbimÈþ Å•ØF}Fû|)Dçß\J‰Q¦8­ÃX1½£9µJ(ª²²µ²’¿ ¹)m¹©¯û2ž¹}4éâk‰b„P<]»o±;}„Ì Bo9mB—ñO6<óƒ{ÈòƒÇÂâϬÿÅSƒ‹B¡•Ÿ(” WûéñÐôä@ÏÙª³_ùß`³fŸ×[5Ãt…ò¹–A´Ñîü*f˜R³BS Ê’”›“PqÒ¤Î5$Ê[â™n¸b÷3Ž÷Íä¸nzæ GùÉ?­a–—/7–{÷ô*7ÖßrÓ`ûÈ¥N6É¥ÖF+ÆqÈ¥Æë>W|Ÿ ‚#!æÆšS‚m½õ¤öèÜ­Û٠Ʀ?/¶ tPtoòÎ3áð¡â[Æ7|Z²xó+Þ‹çËŠŽ¼T„Ûx_<2#lþyÐüpà¼"ïvÜxü¾qZIɰ³Ã˜fËV¡ÌÂôÀeŒ)¹cŒV`Œ€6£ïõѶ%iìx¨ƒ 4ªÃ5м–:äiÚï“]}?#Y8·'z5åAÌ>· i7­JßÉåÖÁéäZO°†âwq¯²“Ú¦”±3Cù\ž4…”S-2ø¥ˆgAÐE Dy|‡Ÿžáauø€•ìâ+9(››(£!f4l¬g4<ÓΤŽú÷z“žYóu:sMß¡E¯W€²QZM­m×Nnè:Õ@,ÕÀ Fj]¸PÖý 7J]¸n]'É4 M-3NÇrÕÇgd`ˆ~Þm³›ŠþUnÉ»›c±J&+´å @î¡p‡AzwMWœqå%ã•2»•T cÝh{âEdE3b¬@Êø,Æô HEF©̤ HÖØU’ôQ2]lÄØöñ8ù œy¸ä­£…Ñ­ibõƃN•£ÍýR܄ӕԿ7†ÜJQ;ÔÕ+”ñô*äò‡É E·wN1ÍOººH=ÁQr^€Ù_gJ¼ à¨1Çj=,Åx7µÑû1Nk@mK@í@ü’Y?þmPj^8jðÆe绀ªù‹áPêf›ˆÑn’gËáíë¶«òÞ죭µ“Ü K¾ºË i¹¶ñrÚ+x" Ï÷ÏÌ^Ù´¼  ïç7`Ò¹t %£Ç2€Áž `p¶ a`¦ŒŒc¸‡D¹­äAŒ ˜j¹¥0q}F]±€a/À Þ)Æíãýù£ou2£Kóg.RØëõ(ÀänA;ÓõØÌ‡}TCü!ó•†2•`JCØ,‹æãå«ìÐ?ÜÀÖ(°v]¬?*Ǹš€=©=À¾–à²âpÔÝÇà­%àØ-8®/Ž÷†‰@Œ÷^€#2ÀÁ,Õœ"W.þ×GLŸ©AZ¹ æ]ÌúaTb†Ïდ?5fu¤(,µL¶ÄÈ)jVeâ¿•c”;<àfsé»mÜÌí¤$b”©žk·¯]À»°ø³BY£@(Ö5 hyûæ&„æ¸ ¯;B¿a Š1üò­IhN Mˆiåú=§1]q¶Áç{ÕÏw?¸…¤vt-Ýp]ý§3< Š¿êó×vüãïMÂ&ªá¯Âú«ú= êë gÔH©ÞHi}ýº€´±ë@ºŠ ÝRw §ž Ñ«d,Øog€,rRŒ]³üá<.—Ú°8-W^,åÏDfÎóÎbÔ‡ƒâ¸“Ƙœ øu­úÏsœÈ݉ܛÏ×£ÿë8þŸláÿ2ù¾B Ïk/ `¯Pš6”hÊ@E¯/ bs¨B|PEë¬Æ–X{¥uüc™*ÿ¥ üSN¿r¤z—£¨Xnü¹d“ÕØ’d•³þ·tXâêM²zûÖ_‚pËÜâÇÚÛØý…8<_‘ ™ç§®àOm7TžP[ï=òºùwï’—ÄÁ›h¨'qOO“¸?ol¢&H¬œK.iæÇ€ü/gâÓ«½Þq/‹¹YÚOoÅç§zÒž“ì«ú„L`>,o=ʦ÷€;ª7Î¥Ù=ç´×·ÆÝ=^÷Rð¸£|±!ó›/p¡ç„}v³Öì'þ6ɹýfà&ún"©þȧ¿â®7­òÈ˧E¨˜¸dÿbzõÍs‚èçGy'<îF(~OI(Âu/ˆ…+1TÈK¨Ü…žÒÙMÅ37·*§~Öi„QÃë„Ê~ÜKBŽP÷½9À}á¹ÏÎLܪò†Ö³|cÖÜÑùΊXFî7©ãG/M”Óä@ýÔý€MU¹ç:fí†:®}%úþð|)º³S6W¡Ÿ¯í¼t:BVév€])ÚìÐqÚ¶¡ìWëÜ„•º¾Ô3äšÛøUŸ´ed×Kå:÷ZÄæz@æ•ÏÍáÉË2µ̋ù‡(²Ièÿô3 îÆ>]‰Þü[rœ‡Qõ»”jñ‡òÉÒvQ«n‰)ÚX_ªŸöêÞ¸wWâþî-}òî/&ì~²€¼ý|^ŽÂÍö£cPKA·Ù¦œ{ÏÐ%L‰­„OlÜ–Æ+úÞ&s×Åft÷ØW<š!?ò‰TòèßÓ(Zª™¤ƒ¸\¯­+»;sãÖü8)Àë݆¯­76„W÷zú¾ŒZ8´˜0ÙÜ<²D`¼Ÿ_gÊÌ„ÎÂt_¹©SbuÓ'váfŒ/­›9æÂ[gÔgž®y)ßW¢l0œ¨ìnMõë ’Bý¥ñ¦ú¹í¼åmZjà™Ä$ôÐÐ=&èímóàû½ùš£HuÎ×fó|œ’Úrgj'gCÏR­¥9Ö<àD7Èèñt_&–;Æ.Ž^G}}ù>¤†Ÿµw¾04ÀAžé/+ŒØÏ­øožgÔjoߪµzDèö\›YNK/Ú9\$FݾR])5nÙQÙ~%;±ãÃð¿ðL_+¹ ÛE^‡Eew\ßÌx™RÞ9rú”g›ù63 «óâèÞîT}Ÿí´‡ZÔì àiuÔ¯e: Ϥ»»Þ~28õÈôàæÚùÛ¹œÃs ¤ÛŽXWªf8Û?³EpzÍ*#çÛĤƒ8RØ^•À·€jרÞÚ.ZÃVÓrÆ-œnŒþáGŒ†¬í{}ß|¶‰wF¬Îøv­”F²£3>°oÜ1¼×L[z<;¦s œ®# ¿+³³¯©ÏÍvk;–^;ž;óíñÞ©6ßñqåàvA¥±Ö4ø®KÍÎñÖ2Ï >00Ý™ìLÏ4,^])Lþ ç>9ÿŽÖ¶'-óXÌÇþvFáÍñèµ­að!Ë}<™Þ±qɺlÝF»²_¢íT³¦X™¡kt²¿Ýn`ÛÚ Âø­¿ÃYÓÒÂ¥y.;3®Ë/Û}6DŽùN’­GÖ•Ê’¯ÏP¹¦9†mÐ10ÊóæÓ€­®R­¼]ÍmI÷¦[õ1:±‡®0.ZD·W^·GÏØ®Êšß;ìVÙœ¦Ûëw/ßjíGLÓz­Ó-œª{ëÑlˆ¯t·î‘~í3Ëk%‚œ× Pݦð£jMßfªy!*¦]Q*³1Ëíí—ÉÖí¢ŸÈÛ÷z£ÛïQ[gÆóîÿ`ó·Ìb±ÐnS7Åïü@ÎLú{rÜ{ádt‹ï¬âïL‹ÔÈéúÏtCj¾ÑºêgÙZiZPŒ9.T ÄJBN«µ‹nU¶¼îVšéÞ¨|¨öfåNvµÑOÎõ¤wyì¥3f®Ô«n¹’cªÚã²ô4YWöš\6È⛤ÅÑI·ÿ+ÙÚxZ š£â;u1Ñ£‡µqfæ1æ§ç¨â¡në†Ð²$ÛxÂר65ä—Qå•Lµ^5°Êvm±åÃÝSÊþ¢¬Ÿ^ëºÎÖÏÒ MõJB;5Ôž$hƒWs_|ßfŠãÂ;],îuJI«’ª¿[k¢•²0üb³ªbˆK1ðwçV’KÍÂtM°`·wà>æw¯›¶Wö~¯‰f?ûÈÕf½îW¼¯Ö÷ç{?ejvAt6Œð’ÇœöôPE–µJñ½ÔêE-_nS[ËUg½õX- Ï¥²XâñÕ¶Ö|+¹ü•×7]‘QqÕ’öH%öT–Zí;Z‹·ëÎ/6³v‚ePÌ¥¦=$ºûÕÒiï‰ÛÜyËÑÀZ]WÍV—Ôä†ÚxŒÜ°þ(Ólã\ºEÚC‹@%Uüd*Ù¢fÙ„:»ô9µì.¿5´²L‡åø¨ø4”œZò&§ôåÆÅ™I{~±“Ú™ìC"­¬Ú)Q¤¯Õ†p™IŒè#¸•{Qp«Fû‹Ö/d­¹Èã!˜È…åmX?¾ÞK'µ¾;;}ÞjöVeµžNheÿ©G¥>A‹3Bq1¨ÂVji$/oª)›TIöNE•Úœ]‘ˆûÄÃàîˆv‰ ÕX —óú[ª | Íð´Çòý#^ç%kês/Õ}r¯b r/ks/ŽhýÍ96Üÿêæ-y{ì‰êyÙ…¹‹ß>>WsX44cuš£å.¯¿´xl÷½±¢"Y7Tòhû*›mÿ#íOsX"Ù-*Ú³+-\ᇠ\RÜS¥&ðݾÅ?Šá€@è‚—öÖ™‘û§žEŠãc…–ªV¿Û¬NT¤Ÿo©Îêð½ùƒ©5g§IŒô¨ïßÛÐõóϵ]ƒ¢q›^ìÆøÖЫ»ú ×…ŽüVçæf+7!õ µ_äIìø§pmSBèäø‡ÝÅù3ý<èlF f‘—¦ºµÇL¶wßÑõˆþÞ÷¤ ~€R»ºX¤Z…c—Â÷½=yìLi ?šu _Ô~ÑÊØÉ³c¦†&®uxîpqÒú{×9HŸYs{ôêˆèeWœSš¶n¤åÝás<æð½Ãéú†K¹ñÓ›™SÌÂHå#‡LöRèµÛ-Ò ~U£vó‡Eµ rH¹öŠ<^¢;iõÌ0ûIöEÎ]~¾!§piƒðéü©K–^âÿñÄâÔ¯æKèßpâ:÷‹ÖHœ÷ÐuÀÝÛàÑËðfk ø^æøé‚üL¯~OŽ€Ÿ‰@|ˆ8À/ÖñëÃùð§)ø3&ÿˆÑåü$­8§Ú]€òžî"ÀVµ¹“ëõ:¬/‚Ô"_Òo'’ì‹ÛIùµK•I3yÿ-ü.ˆ.3Ã1Ë™5gÝëï:rÜCRib©ÙØÉÓ` õHƒü(Æý¤á’ÒÒª—!$—Sm>ý•í„yîteXb±Å³mu”óJ †E¢ž ;ý× ýíÖÜ›X{3b÷ÿ1ñOðML¾‰à+½’Ô^yÞ@ÁóPša)>_{PúÅ#PæT(GÌJ”›Ç8¾€òj@Ífõ?ù4Mü ¿ÕØ’Á)‘Tò’øÛÄÕû/¡fþŸÜÜ4†²Š|ØØGÊÒ»>'ùñë©mïÈj)ì£>[¸Û›ßÛõüo‰³¯¤úµñ&Á²‡@(yÉ ]¶ØD4M4ÔJá/d ‰éMr&Rã?÷qÞ@e"?­£ÏOµN?µuSxhG}”÷ɺ¸¸=¯ßÓ¼uÛ°sûÖ¸ú×½x_ ÿµ¸„Eæx¡gæëìÂ'ìt¯÷ë'q ÿÅÞ& obMbd õOÜER‰Ú÷cí%ÿ2(èZ=RfžûœÀ»é£¼]¯ïñYÿxCÝÙB6Ð…ï³gÚ£§{eV{6ô {ñøi…Å£^*‡€‰Ì$!nf·Qa»×•í&4îpÜ£†´vñq5éÖO(Â7a¡½úR"©þršà9É€ìn¬ ·ÆiÊ\ oª\hkœ¹ééë #cÛ;~ÌíèPƒé~Éu»ÆK_oÛ)a· ËìqC/ÙËÚÍ ÏÕ½)|VâQƒ—>m ‹ë° hà)óòûÜ–%}äØkfæºØtoÖñq3Ó6VÄ&a§Pø1Êþß^þi¨ÕÓ™›¤®¡²Z<åx´»k<Õì¶õ©z®ò«{ƒQ–Q›ÔŸnÞX@hÌËhK|wZ›off€?CX0mçÈõÄÆÈãøÒ‘îcîÜ„F}nŠùÑ _ô•÷ÅNJåpXJ£!4·ž?~Ùÿàg~JÁëֻdzóö¾w<ŽŸÚÒß¡ýÓpíÂòp5©`¡]2›yùQ8Æfh§¦Ä B&vFÇ.þ!GwëÃŽÄKôµÊÂêUv¢äjChB´•4çö—Õò¸Ÿ[;ëDRE×—^›ü@nè8‚kóõžsl—Ž+Ï—ñ£Ãêžsó¾aðö¾Pgµ3wíf†Õ¥r€ô9ìùÕ:Uë;ÇXãx\Ñ÷#'ÿõ@ùÊY µsTRع¿,c÷~.®ª=3§zû&÷Ú¸PpCK&]úRä—¯«Ýû gtÅ÷ʲ}íå[Ÿ¹´µJÙ姘}µSÁQ+†æuà#÷º˜lÜëÙyê$òyK¹µÉ²èg­`µ†*ÓöåÄ/ éGö‚jOGì/K†æmª­z¯–ÛnØnÅ;¡k îÖ˜vûbcaG~ccûªóÃn}¦ÎÅ*e¼g'0|Ð7Ël»†Ý©ÖÆÊÉ-ô¢Õšm~è6‰'µ1m/˜Œz(™LWm7®,ÓjôRä.ì{ïö)ë°œpéÉl/Ïþ?ºÞsQQ%ÜÚ½‚ï"JÉ9GQ3¢˜sœõþÒk^{Ÿïüymç¤&U55ÞæèŽ·Ò"Ü#)/öæpéWàxû€“ý^‰ ª¼…–©¿õæxC³[iäŠZ«^ZkÚVrµÊ½2­îµÊ²Ê®Â¸ƒKEØ]¾~Gñòch e§ ˜ß1Ö*YZwQÊ }Ô›\ŠŽ—O*^Öéøq´ûÏZ«|w³*èFºßÀžSŒ*"*uxû޶•ÎæÙVÌwcÞ΀z¹ÅjÕ€þ™úª.­TΈnWÄRÞó;Û|ÅWªÕf¹÷ìtK£3(Y›É¬”©\w^þ.ÅÏ~‹ÅK@ÖÎU+øY§âîš—±[.ËdFzþ°{ÿ Y;ü:éôßԊѱ_¦¢ÝŽª{Ê ¯‹§˜Ák"aéQÛÕ’>œ› ÿÖDßåçXÊ•>{ƒ.Ùœ+zÓQM÷¨é³¾WÄØE­à‹ŸÕª@Š·ž[ë~&.SP¶ùæªzËóÁ qÚwŽw¤Ù¼`G(Ûµ#^zX¯ "Y¯m»` ª¾ûëÇqz›íêõ]šÜÛ |Ø9ðrðÙ<Óp`T ‰ZÕ^þ}üÙ•¾’»óf9÷R\еOaã†H\’“VØ.s½¨ùVþk;—Å·à„%²bß·LÓŽ:^ÏÖ”ÑÜ,nË,é_s|Ò¦Ó¥OŽ\j×_~èYW˜Q@µ‰ë7»šÜî˜òh>I7×O¸hÍ–Wv¯hî­a»p³À½þ5ó…bfs+Ò(–·œWY_ÝqK'4ö7a×¶o'iÌjitù»Pwã¬rÑ&«œ‹¶¬´¹gE/“…")ߦu;…"ÞZ0'Cì:ñ¸·õ‰yG¡±^¿áz}ß>8•èPJã? D˜Bwï(gjYÃÓÌÌO÷k£x¼õµðNÐÚÎUrZ É“ê¡TäÔ&(*wÝ:ʹó.+mWk+MänëuU±¤WæÅKý¸û›FIFCŸHF¿ƒIÆ@³$£%ÿ3Fnift´¿£‹Pï#ýZ:ç þ°Ù<<ÿÌä/ÃæÁúÊÂØðÔÆX÷Íò\«åË[õ°hü†ƒj³9*çË(íð–“o')w´ «ž¥K/¾W”ú—SC2&Â@ü棭8fÈh¿f¬ Õ‚0ó³#¡@ÑÙ'M˜Us–0Ë3ÅäÊÞ³µÁ|üÞwÏ…ì²=òÈaÓ·¨ &ÞŸÅòä[‹Ôó;±}2g j¢Å‚8P›‡ÌX¹ôJ‘Æâ^Ž`å"½ŠúS ~F2Î#Lü¶¬8vPUt`åw¦‰Ð¾Wfk$ g- ßøÉ/·%šÇé£Íãê¢ÏmÞ‡ ·ùt×÷&s+#ÅøÄ·´€aWÊeWmˆçǘÂjwž)•³—RàZ™ßÓ({Øm_ŒÒ™š©õŒäûz=”^ñt*™ìz-~Oϣ舟›CÜW˜ÍlD(ÔÛ”c"¿üd,¾4RÊ<î;Ü–‚\åÞÙ½p¶E&Ën_ïɲ»Æ‡ec]bdÇ`PCO1úd6÷Þ®±?tÔ ³13i07­[yõèJÉÛltWü~rÖ”éÞôj[^*òþIæ¬Ù•7æDm!v£_r¿b¦g¾ôº½x|ˆ@ÜÖ’p®JÔxŽÚMuve<¶¡YsZM¦LàSgF”V(}}˜:Ýé}Z)ÑOº3Ì D¾ž”?eÜñÑü'¦ ,t›2×WŽ*€ãj^ʼnͼ:Aq AOíЮlåÞ“è ó¡ÔåË.Òç¶KlÂUKꚣ…Ú‘Ý_G¶Ñ‰˹ÊK’aÄ’­Ð7aôë¤éÎõ™Œ\¦Åõt¯GJ_Y0ù Þ 9’ Òz,®äH±ä§úQSPúÕ‹AôˆøõéÜï²»æÖq—µŽZøÎGië£í &:m–Xè7#Ðøöø úâˆ'vX‡mbË.s®l†L›z-ñ€íè[߸Ð]£ö¦žã¦ú•˜¤ ÉÏAµÈQT%m3Û'¦“â–pkÙ 0=_œä î¼ßå‰/.6/6]™@°©B¸ÆBùÒ"Û×kžr‡Æþá­«½ci”ÚŽ §ý×µ'ù"gTN$¬< åY,ðùÇL™Ý}´:TÿìD”1 'äמýbr ]¤=‡n$ÔÐ1ãêážg¾´ï:^‚¥ŽÍ“{Q…Ï®0òÒ{£qGäPæ¹òrÇÁfƒ2ï#ŽÖ9UBã¢!aäÜ“ÓÄðð=»ÞÔÕëÖê熿­ŒJ•IÉ—Š¡{kbžµÈ6Dítƒ²²Åή>./™«*EàJ!Q¨Ã!¾<Á=¼S·Jl›‰NXeºybTÀè>'(TäÜI\þP¹Ölæ„ÙtŽ\‹Êé g‘7A1Û£ DžF"Ï ïÈDÂ!ü†™"xµH¤x«ÝÑZìÏ’9†W»7¢|ÿ‚•MßkȪšýæ¤ìpó+¹Ç5á`Kë{HÛZ Ý_çAîô섹 ?äDã4CnÞ&0/Hg}¥ºG³Oç³½cÅÎê­cþXîežWØŠj8œÑ š|®}h Ò¹'œfl•b .ïrçi ¡6Âq q,Õ_;¤¶ã¢À–{iÔ±Þrʪ<6!\ §›7¡ÁžœŠÅP©““ªó_ì|±5*ü¥†?K<<Úï×°ÝGâ…'4½T³;Þ³™eÖ3Þ¢äƒ ¶é2Ïì\`@º} Z9¤½i4 ù‚˜"mæH«"¡™z¸-¾*“dÿë=©C¸Î¿§\ÏÜ–—¾ÚÓóº¸ÊC{-¿Ô„ Nxåà-rW-dß.èÂpeØË”ÎzP:H`Íôb@Õ÷W@5¸L‚¨&¬'hýž°ª… ,N€*{ |Ú”ýH~G>¹€)%–¥bÉ{ dµsð k²3úO†jíë?u÷.‡H—_ÎF¨Îsç C[Ï CÃâï¯AÅ¿Aô÷e»ˆ<»Þ|èóp’`»ôìÈ—­O‚ è«&&H:GúÆ·½›Îç€Þ, ç[Ðý0ùƒtÐN#[éò¹š¢UåæD½s"r20š.yÎCÄva4Ï~W±”/Ôñ§Éï!6•"Œ†ªuGLjt„s™ïÄWsؼ¶¬RÚ&ˆŽ –×T¹u¡O I1 ^` ^9Á-l±š|Þ@A‚½ X!lVt7 > ‹UÀ<öýÔxÜ8û+: À(Åìíãð`Æ[ý·6J5‡PG¤f[Ÿyk‰íøDÉë ­Î£+àZ¯=àVØñ_ð—Þ+AwÚ ¾$à>¶”`êã &cÀãÚ9ˆñ øLdîîv÷Ï€;$™;:ÉËåqü6äPW£9[ÞTülA+%sƒmŽ5]ZOÄVo³}F)‘>ñÒÐnqEg§Ëgòvð³Å+ÝMj;¦ ð_È$”ÀÆ€àt Tv":¨„IÙÂõáV_áŽ<Ì( <üžÖ/ö „¬aÍ û{ gÈôZ2S­™5×@æäy2d™ÈflñºVsNñ@¾õîä}’±ázÉiz¥Gniî÷„Õ®G;[tp5ÃÕîŸ&¤ês­£ü#÷¦þÞs&Rõ÷g­ýGõ½7Òt@Í>×@­õž@éP÷°›znqhÙé hH_Z.h -쀆É(ÐpÄÉg·!d´ßõ‡¼Ü[{îÑÁfÏC´ŸkúYçA{ÚSþñ§Zï/bâX{SŸ±òL.ç?ù½©ðû¿4ß?I¾Ð¹Ü è½ ôgr+0²_êyŒÂü ŒÆPF3Š€1¨]€1$1`#íÿü¯|©ù¿BÒ˜Þ´ÊÙéùoé°ÔÕ›†"ÀÖÿHp˜µ_ƒlÜ{‹ûøù-!¿gkO{‹ížPÕ¸>܃ÿ} ͘¼/Ϲc]bpó_Á> jH‘ºdS…w[ÏéÕõ¥ºö’6i迊)ý«¦¦²ô×L3zÿX{Ó*gi~Ãðü@×Ïsœ»eŸPù‰?Ü݇¹/ÙŒxÇ‚ŒzÛˆ„u#»„{U±|eJýr4Ë ?i Ïav¸<ݽýñ¤nEè8`€uø¶ê?uðoòmjãMÕÔ4{ -Óõÿ•OSÍ7=̱òüæïù'T‚ª¤Š…w¬É¯±Œ-.GÛ/6t<ÝÝ×ïÖyR—ß×q@pøVßðaÌàøjáôÞ½RBì=sÊÎÿæ¬mÎ7-”ª¯/~e¸–öÈuq65íþiØ7ŠTÜMcd'Ì^$ÿ£CÿÛÔþ÷þ}¸ëFææŸhøÒ|Þ°³4¾q'uþÑŽÆ&ë úǽۺ¾ÍZssÌ{á†_x½uˆy£Õ½âÍVêÞ[-œ·[|Ûþiaß›¿‘Í|¦E`Ž —Ø ›nØi%‡˜“¸\kL˜Ø:Œ[ì!û'!§¹\²Æ÷ùýmÏëÏ5Ôéúð-óÛØ»Œw[fäü·ëKÁ|®îå<´0:¶°¯=wŸ´0[œ:Ý8¨1%ç¨3‰‹tq¬iÜ"éúèRçÚ#é¤ô‡‘hM¯nu;0^½Klž3ɸId{ÈrïG%¢õSn#lw9w7µÍé?øYfÿèп´†Kóq[åq¸ÛH“æZZêKc_kÎÝ;ÿsÉ2ÃIì’‹ñ±DîF—*yÞ›Øcð ¡ÏÀxÀ¿Š1ý±çúö‡"{3gzÈŒ£RŽR»›²`wÉæuêL©[Q/ä¯ñ¢ªä%¸X ešåÿºd‘Ϩù]ž‡éÖc†j÷ó¥qø Äû]J¾Azê-¾õ1[ª¸<©Ã+}’Esð ”B¬r•Þ̃h™ç¢îÆ£G]rÃÍ;uJ܄dž¸ù3wj_Úú½-Ýõwi6Ôz ]´efj鬱ÛWšÐr—oˆL­¾¬éý:vœÇµŠØ£kä].Tã¨^ÿ_¸Ö_û~>4V«'„s%‹öòVF2±ÆÆ•ÉõÜÏïn ÑoYi‡ÙU„?V´¶t­8ú¬”Z£^k~ÇõVÓëÆ¬Xï7u}\_úÑ¢ŽÅƒm­ÂŽÕ8Ø<ªÌíUZNú—¡£ørfP,G¨SÖr»SiàwMiP!ì?0©Œ•âøá•óú¶w&s¯“ Æíå²8ù ¹Wœxx7™›½Ã–Rº‘ î-ã}ý4¡é![_–ÖDÛ¸yXKÕ:¿Ó«Ìåö§UZò­è_z7ßL£|gòFуҠ¡Ì½ï§qð{þ*ÎöY¬Xh”åÂòs-J›ñ¬€O69w[³UwÛ­nUuõÄhèO&­õúW­t”¨mV–ÚáÇ$<'—W+Cžö\Žk”ÜÞVN\ÿâ_íŧü¨o²eít$JCëÅ•Àô%y“:czð‰ÉçZ*¢·^(»~X ÑÈ­¶Î¿3-¿¿×|£ÛÌ:gä&8Áªì9¢ÏNì΃‚í.|TleÿëûÙͪÂj2Ò Ý°·º”Ê &êÁ»QMä;ûÔâL5®´aoVîM¿á`É*ÍV^¾‹Å~|/¬±7(\έ>qÒ¥û—?Ž’çÆŽá´©ŠëˆûAÅîrËÀV.ÐÈê;öÎ2àõÛ5yÊ´ù…mf®åȘNïáÖ…ŸÕÊp#ML_¤XNŠñn<ƒÉÀýNÄÀ…Jû¹T¬VÖ‡Ø:õ‚Š\Rö¥1q=:×+¿âæ –y±ÓnSWûvg_v7² [-?ŒÕ_´e”'¢9ºmuÓî¾]cúÎU wUêêKb<×½;sÕ±ÙÓ*(©jäùhäªñdË&8ñ±@íÁnôü–§}¬æv;!ªý–+ö–¶~÷ËWÅs*[yîX\1÷‰Ëœ÷]Gê][ÝY#k 6VæwÐÙ›è]Lh»ú1ÃÕK&Jë8Em3)É™Ú)ªñáÔTëó7)TN`pPZ;V„n,ËW­V—;èð*w°2 àþbVÓ*»á˜Ò§¿¾6 £u¡Ñ*T·Î¼¾¿´†NÖ[4é³{›©#Ƕèg;•»ùsdääóX/-2+÷è½VÙp ‹oµþð2*Ûk£ÊIŸÒJ€~ùZAm¹#—«²œÌ9¤ÇÂÜI:¿ùŠï«É‰Ã)â‹Ã™r‡{šL`ýžxˆÃ¹Â¦HuóÁlnÍ»'Aíµ‡’Ól–³z±&\þÞ'hqÃ+·|;¿™[ÃS10r›nSÛ6Ü@£Î~OmH͉ršõWŠ˜Åòuµ»Èòó7#‰¥ÇÝÀ%½PãÅOnª‹Ã3Z­v¹#fì÷ZÈïK/!ÛxÓü˜yüÂ<ïø…µ@|˜Bv„²é¦Åý*λ"°Ádf¶ÒT‰ßó…@Ô2\Ÿã…z…»;Qö²2]«ÚѪ{»¦œ3¯º"Ö‘PîœÈô™©¤wù•øq½ƒ8BšWÑZN?b¦uG„©HÒ‚›ñU!»ÛyͶxôÝù¹í¸õ¿s¾?'9’*¸ìîÙ\³»—‡p¤ºc8’YМ_;0£7BŽm›[t”ª1 ²õB»~0¬r¥Ÿáš[‘n‹OÛ4âµáÝ‘ÊsRUV^³j*wƒ¨!Žòãä-fÁå㙽Ü×ü¢ƒx/où–»=r˜å~&rÒ\¬a”Š*1 =b"Õ>$ð_in’4G_b€:ïC·]7mȳ§Mòõ«÷M¯YžÕj…"3ÂEû‹ú±î0gõ¬>æÒpÔmóålÉgÙúê÷ăiVUú*n[t=ZžQêQÐVT/W9PÚiö ‡â>CZE’`V’‰IýX$òœÑÁçíõ/:ÀÑlVÂV‹G[­ŽæÆ8^Ôf8>â_¾@ŸØ?Žî›Û£¶h°åÁ°ªWíÒ izA¢dÛþtƒì¸wUÒ¨µ8µ§]®z(•éNÐñ(]µJäûU®‘ÃA/$­Ò~Hfð÷œ˜ì¨‘ï~§>Õ?xq°Bq´Œ X2hÈcDíØBwš¿D«Ÿì¥GS>פÜ!?»¢ô´€¡Õ[ézLñ}·J—æªX›IÅ’·þùnGr~$­Ùg‡ëõäï‘_Cj+xñºÏòF½JDP$\œððEõ“[ªØÄÑC¾‹­û1æ'#4Œø>h-Ÿ{  ]Ìæ‡ “k¶rfŽ7£rÉ0s¤=]ÿ]ˆTHn ݳXËޱʑJ,†´Ât/£ë¥=!”Cs»mk[<óóû}äуu-ÿ”BÛ\­?´zí×>’³ÃcžÒ#ú~4Ih×)bøö{XŒ2ë©—;ú»j®E>ƒ¿G{È¥¡L‘+ol¯ˆô%2Ùû¸Le#g¯g5Ú©Á¯ÃeZµô½A$4Ð÷‘‹a“ÚgáA`):ü–’ü)dx¨¬÷Õ~÷¾,{Ç Ø|ZÎ( óFü°Š>v¿Âê•;°Apžþœ,m¼Ì ˹Sñà"ò¬VÈör~)Á´‘ÕNÏ~·Ñ1<”ô5lÞƒŸƒhÿ…œO‡àQQΡy1“›k=PF7{€o Y€o% àÓüà³Ü ”¡F¬¤ ÷¹Wk=í=êíýúX3¯uê9.H×[`--'¯µß‡_·&M%ˆgLöB÷»ç±hl"ôÐZÕ®‘õàO´ö!7ãùQ«t`·ÀÚlö1éOû .› ¶PSÛMàþˆÑ½É(ã/ÈÛ³ØÆ¢“=*#½];6d×ò<ïI"mW¯¿Ýàµaï‘ënFû¬=ü® ¬eN3_õÿAïš¼ìã«ÉaaúÎ!AtÌâ fiR –`V’˜á"ù‰Q>ùÈÍ&<ýq§Fe·vŒ65£ëÍÔ{œ2Wmz‘õ7÷–·×øÆ86ÖÅQJuµ¸<ØX ¨JÍE¯ò+ëì×—L¹l¢5àðñpÂr›nývÃáÇàä8Qz%(eg-qÀÙ8¿é®’mÎ f€ËSÉçòWpê¸8­™¼ÇY_Àa½ä%݄«šQVˆR¬}¾®IÍ~òƒ¹ÇKÕ|K=a¿kŒUi[]’¹\¢sÙìÄúÞ¾žu¯€/4ï€FÏÿf»à÷’@%ÿ¨±@€+õC ʾ µ°ù7l"–€ ÷Õîª1„<±àôv Ïò&l"mྫྷmÄÔtž‰5,ê0£X&jÝ»ž3F^š ´$Íåd,„ÐH¶.MôæûGøÅFø?vßTöδÄeÕâk[+4€TØŒTtÏ@jbX‚¤V/RÞ4j¥i Rèµ€T ’wÜd+ßî]oÚsì$ҕƬ™yD¼îsfSVà•ÖãÿiDºÿŸðüŸˆ‰Ôß›âFLü„ßTný+ü~ŽM Æ(‹Û¨È•Í‹@Õ©*P=h•à…µõ)5ØŽ€Ú¿€FŠƒö±·ÞÝÁgiìVœÖÿB€HêÀÕsÃÉ=—÷9íŸðå´Y#&þìú'7ë›Ê?øOºÄÿ›)üKòýí`  ƒ-ÐQü‘Z{[èýŠ ô£Ýú›;%h``¹j‚×ø, Âþ5Ȧ¢i*¤¦¦Ù_‚ß4¦÷oxCš}û§tØ?¡i©³“ú'we‹Ï¯ÇúÏ1¦5žö¦Ôù€ëî£_n¼»{ç×õŽ…&|óKñFöGík«¿ÕÍÒ †TáMv“ÖåJUÊ¿Ùÿ2ÊÒiLoj@N«œÓ—1ÓwO{e]îNÞ½£ø½m5{#;*v—¾2}—¿šòsóã¦y¾8£ÂYšOýS„îZÇ—ÿì=±8Œ¹êõ… ¿w'ÿOFÃÏdœF!¤­KãÒò\ÿ7—lª¡ÿäîo¾À=ܬܽ½“¿m¸VõZ»×Ûç‹eöNwW_%a~øV©õÁ>Pñ~ÆS§=R·ëÁÏ9||¶õÌÞ Y|ïvŠºŠ+¿|µz?ÏíÒ¸Q‹ÅXÈ|f9ò¼ÑäTäM]²4ÔHuáÿÕÊ'T,Ú´2½Ñê^ª.–º/ìKþ2wÅ÷ ©™)9“r“zN%Ç-‚aF—ÉBFR†÷¯Õ+ÿ[®0xulo`<½ZlÔÚ}hÜö ðn•Ðç¹»©¨P—Ü”dö¶êu˜«¼ [ ¼ ùÇc¢-}z‹—1Ž?©}Š u/yÐ^_ò‹Ÿ€šÖ[›-Õ°8‰óòÏ(Ë6F!%t‡'ÆŸ÷Ç»íÍ,üÐC¦ø%*!ø#–ì§[Á9¨W¹\§NëdxlZ\È_Êj;™sçƒHVZ¯ÑµÛ2av‘JªÅÁ£ mB­1«J­¿ÞØÿ¸d±Úêt|ñ–Ò•¥_̤u°8©Ã:5¼×lÿÛñ¹ÞÌp•¨V—\ó…NT+a‹•~ÁÍíK v‚{—鑪Ž[¯:o™@Z5Çyi×t²î¹1ó¼GÙÔA½D °Ú¦qªqûeVë²]­{ëQ…ÿVŸ~˜×•+Ï—³Ãâ_$»9ËÅÏnË>@´˜„]J½cø°3Tÿî>=dd¿;qéþ ùÃ0ÜÃÚèUª9¶«BcV(« dUµê%¢êÖ6µj©F«ÕjÜ šUæ„•–üâ +ü3¹øCc».ßÇSYËâï’‰)¨÷ÝLdÏ¡a¯8kFÃbAdŠÈ¨ò_ìQQZ-Gj1œ2Rö‹{­·FT—–Z :…Ÿ9)PïäØd¸¸¾ôžÇZ…:ܪuîð©´¤ö/Ñó¥÷….GÖ…/½¦¹”tϺ÷]¾lÏÁ¿EÚ‘Õb‘Ú…e˰k{åV”Ã5H8_7»?Ò9N‰²Ó*P;§UdA§È¿ØHrk6ÛäÑpµî~¹OŒÎÑóè¶j  9%‡z9˜Vë=hä_º•A92ii7WÞØÓbº”~sÏbA®¼ Ëy)à\/çnÎsÒ¥ì-—ßC%ÏÞ¦Ó:Sž#´ M»‡Ö£ðÚZ=ΛïÑ6‡NÓ5-º·23H1“`NüÅr쳿5…“ÖçÖäée¥»v¬v2Øæì˜ƒêäp{ª´RÖk…ÐËëvaeCw[¯]êÝ[äÖdçœvÛ³#2Û»}=^?¶be²Ö3Cà–îÒŒùaŠ¿ŽÀ´ZUËÌ+ßÈwÞ¡¾@œ…^\Æ7-;¸V¾}͇ŕFÌo@#DN#šnÍK¯ÇtÔ›M;½µ1«uÄ]àüÉã%p© ÓíµlrÞOè*.®¹À­AtÕ ¶ýªÝyö[ÖÓ[÷,}s˜˜#ê¼43ÛΘò™“‘ÿŠO}áˆ_݃½œŽÎÛ”æs I#.G­ÉJMeàÕHizø^áù9,Ÿ¯Î/kHnOk#¹—ß ¦Ù¿˜î¯«é0³êv£Z8¨·_¿µ€‹³'ךy ó{ÇÕÝ›ûþÊŸ¹Ž# Öžù¹`ž™¹}#û~5tÏǺ:FJ¿ÚDš_Wç©ù[µ6¬UÆêÞ”#q _»çä K2rûíkÒÝšzRDr]I½¯¶â@g?¢‰^Eỹw…ïõyMÑ…ÿb":Óbõ—g—߇`Ü ŠŠä©Õ0+“eÌŸE"ò6yƒ#kp]— d»š+¸jìÖ}•Y†M¥…G…¿Æ#9Tâ™,=_é¾dNRT2é¸TtÆ?U]4]H⺂ÓZ,êK~ž¹¾øÂ¬Áò¹F«ÅçšÝ Ÿ P²õÍð…#U#˜õ6µZ¯#£V›½R}O¶JÔ×è2Ù ëïìgþå§™Ù좢UNGi pG'  =²°/i^®!¾y­+.¥‘äÒL˜Àƒ­àÌã³7‘7?çÍ_øŽynå\L®L{ ?ܦìvÜY:“%YšÄ(–¦¤c‚`«•8“bdló¥¶¡vƒVnÛ)×NQÓô‡¼Éz¥Î'“¿þÞúRÔÈ@‡ºÊ‰uKêÉ+Sr%‚Ѱ(ä¡IE€gûŸ%ž/æö>w†GܪÍ.¸²]ÚsÝØmü€ØjC XZèÌþ‹T®ÒÑg…»ÐÁs‡Óâ`èÑâêÓm4™ëÿKŸõ ¹ºˆØesØŽá¯[+w†•šXèÚ>øøâ¶Fd“®´{² 9;ÑIãÜ”oÝŠ-ZŽÎÏcÑàQ–³¹r 9BÌWÙj7ßdi·±tí:elnÃ4ÞÎ…á†Q²×òû'ÛÑmÒT¨[4+Q]]êS*z>’ÏM%ûbìwà ù¼«ß”JßA¡—_tƒRsÔÎØƒÎŸŒ®¶pËùKK*Ò®‚:z¦1sº0Ó˜ïç÷(Bz©¡+dÏU#–O•­ýÌT‡ê3Ï4´LŸ[Dn›V‡–@uHKø~EÝvð‘êvÍù|9²¿|‹¤Q.ˆ¯øˆÑ½»' "“ÅgèÇÆg8û3YPéþ&ìô!FoäÓ/£Ö²Ó¹ÖÆK΢Co•WnW,#ØF+4Õ"awÓ›QÖK+5Ü/HäXæ½OOgŽà Ò—ìT§%ojSwìàQjåð3Y/%ý'×#EyF|½áŽóï;a_˜€&Ÿ¹TGŽƒ[Ò+‰Ç †CSÃáÇ+å—olÙÙüA¯ÚÖWásÒž¶÷M¿Þ|ž~gZeÀ~Ê%/¹»¤JÙ™Ýí¥ïôÁN¹âPœWYÏM:¬îTò56dÒ„ øî›.1nŒ|ÂáÖ :?»ølÌMð‚SÜà9j~ÅJÀpÃú-(C7ß•‰Ry¡™ÛÓ—U®~¬}rìÐVsì¨3ÉÕ/æ=·çë/”òZ¯¨ )ëö—nΚ›ÂrP»AX(Qõ*•‹åÊÈ„³ÜYö«3úñ¨¨ 79æ7€bþÞ¡zÊA%œ½¤à…3¢â¹6ca+É(b¥»_Åð¨ßF·…ó¥VŸEn\Cê¼sìý‰#§yUGÔ,²×­úÎvº˜œíDÖ({Ýã?G"Ræ aùÙmGú¶ídGË&¥]Æ5yIE><¢ëÅ}ʧéær¦ÂZË@®Ò7ß›ó~ µ zIë°S°Õ‘Ðjw#çö¯¥–k,“©WÆ~+‹‘3!5`çu¬gˆ¡ûìMË?³ÝÜÏ*kE…Ÿþ¶ ÷©Âú4.7hÄG 4v!ô &X_ÃO¸R¯äµâ ÐŸ® ›§u÷ʨÄýZ‘S˜bš.alë>ª<¤ËU,xÇfŒ.õjÀeñžZaÒnERöv Õl·3¶ܽ¬ê’uø…Ø]¸¿lO`£tØA_‚¸Cv×G H=ÿ䇌;Ô=°ÌlûÀ›•NÓa `_Þ€X'èÜÁâØ»‡f`Zeï׃¿ªØ@¥žãB;ïWì©ëzãäã²U8Þùí8X3Fí‘Î:÷»Cc•ñÇF®Pò•iæF…¾Ïdªá%‚¾¡›)8?“ƒãX.À1~‘ ¸ÀÀ F<À ±˜à‘ü/9¾œªPÏú5Œ:ö{íSï öº~Úy«qiְϱ¦ÚüÆw'…©K½^þe¨sý\ij·+áâ"ˆŸ·ol©‘ ñrœkäÎ4]ÌöbÛ€3deP>4A™?´ 6i $‚FÂî8Áz†~$a€`i¹‰´4ø{$¸p¿š¿½¯‹ÙÕ\à‰«gƒïd/U2âòr-‹‚Öè;0Œün6z«ÒÐdG@¾Î ^ô«]Œ ïÉŒÑæ›j#jߪÀölZ›ìפ÷*Ò„J ’¯4½v‚ÑÂmHQ9&˜|)qt‚‰ HYk¦1õZ’^f‰øIóßù έ .9œmÆîüf`Tœ¸vúã9ºhdVÅ™¯jEñý…d}ÉbN9`솜!=Bˆ`çRýí&ƒe@Mk¥Ó: º» Á­ó¯ YŸ%èì¼€jXH‚­¨¦YHðŠUêîUvQ@Ù´( EË9@ec5ÁëWÿæO óû ¿}”­] µ´ÑpÑÕº¸\’<ä©q4 ¨ì†ý`M5sDúEd »Œ9»^5 jýR Š¿­rП``>M°_ú ¶©r‹™—§„:`2H5Áh è»uôƒf½ø€^,“ŸBLÒñ/¼ÏZí‰àJþ«|‹çÅý踵ÎL¿HR(»ç½ÇóÏîÏ¢HÍj8‡û2g¸`c?‹1>IF:r2Üé˜óÿg‘ Ü%Xž\n€’Ÿ¥`w°±ë&¸µ;¯®»`¿©Qy ÀŽÉÛÁôXÿ Ö™€ÍS“?L¹ÿÌÛyg÷Ÿ±âLf*ç‹t>÷’qâÈp|a”[ßþ±¡àNÌ ð9ã’Z{“ÿ‹Tf›OÀk› à‹ ø†Á¾7Õ¿ýÛà—¥#à‡¹\‚»øÑaøpò|g®¾vœ¾`Ëä^úÇ\Ó9^̽9\«àm„Æ>× §rßÁ“SIDF‡Aë§›ùGnŽwo @Ï/úGðý‹¿‰ÿ¯,bçߺ5 šŠÄVÏâŠj%˜Íxöž@L® ~?>¯§wÛãYò¹gfÄÃ*hKÿmU ÔAýT2 ‘Áfc/‹U¼ÅübÃÚ{ªtÒàæšðÛûÍ9õÿ)j§ÿ›-œ;¤2kj÷M†ÿz~m¹ð§˜œ‚©C ·PÌv(eKJ[褞Û1sÊ„€²#’Æ ÊÐvy½¼kýfc'ƪ:aM›êl{”Œö SƒªA ü·MiK~ûÿkíýã/NêÐÿ;]iü“îj¾©É7­Þ @Gµ/й7tcé½Ô=hC@u ë# OÔ;Ðwýo@k.óþæ ¤ÂoçpÑþ­r–æ7¤Ù·Ááß’l©«·L¾Œy•{~‹ùi¯;úò'ÎcFn½RßVîKöѺcmÝ6’ð›°ßÈÈÙ^kïðv9ZoôÒ‚.Þ…ŸwÇËšýqÉþâÒTCýÿ‘OSYúWBÎbÜ?á ƒÌy:ˆ—‡ù©.6· ßÝßÈpt½Ö£ç娾~4†Ï!4FÏÒlC¢Ü†;¾Ê±|4vó0f^…`µ½{3¢Ø{5—;rr~mc÷lü »ý5ütè_BÚÀ?I¿º\ÿצ<÷p×+ìŽÕ'Ì5'Ê•éžòçLJǗר¾•j°ŸqV7^Jb·ÑˆÑ6¶2¿ƒ¶e&ŸÅ¦•ýlÖï³_KÛÌeÑèkùjòðÒ¸Øäb,7¥ùL9sdL´g¥,|›n¼õÇÁûËCHÞÔ ›fü/#o²›?êQ!âS-އ1‘ÜX‘–ôÜ‘½×ws´¹µ´š+u7ç–Æq(-ìkG›Ï”Ž5Gúwæ}oºq‚Ê”œI Úf=Œ[äv6ºÔ¿½á½ ߆ê]Æ;ø•sjIÎÇ«†EK»¦I²á±CmÿÉ”€£×l•÷4Tï| 6ü”n-_•i°°Ïµî‰¼Ñ ú¿ùÍ$¹oÇãcÉ>.Uã1¼7ù÷P½™Á@ñÐðþX×è>4ÒøÞÌ.(=dV2£R®UìnÊãz—Ü£süÎÖhœCþöÂÛÒ{W î£ê,ˆìbZfGƒôé·ì¸´¤jyªC j)Ú´À³¼_kæ½rɽb>ÔR—ìP=énÿÛý>4›½d.Љ°=èV0nÚ‰+ܲÃìéMØâèŸ&äÏâ¹Jâ=¸Gâ;Pß*ÔX.ÞüNk\ÓA¦FcVz–ÈNìÔKÌp]Û¢V‘ ^¼Gÿ¸dëZ!™‹(™Íiâá*ÂŒ_PõËúWäõ³ý±墥=@»äª@„ǚɵ/-MîÙÔ§é¶Œ¯\jŽ“éxšËÍFÚ dmöê%RÖ6usV«°•M5ZÇ*s?+-õô‹÷C 0åûT3Ê‘»©—^+oU2I—ð¾ñÍü_8ŒßÉêQ#ê³21³G×b‘€AIëä,)µNíÇ/É„kk:™Î³Q@º¿{Z½„·sµ ]#ªq³ÉV™K[ª´’;¬é5M_ú4óåû¨ë•5¨[) ý¦÷]-"o\~N‹³zvWDNú£° ¦h»£Š[Ñz5—üŒOùxìà Z?ko¾î”èôÅæ´‡{óâ¾Y‹[ÁìO™Û­®7pû: “Þóó&4YOk›Š:­Ö9lQáoßmù>ˆ÷e \®%3?½±={d‹³Ê+"ûÇÏ8VX6a¾€]`ÙÝ„¬é’¹¯ë…šs…]G€â¹ɳ-£ÄŠ*˜bi4ÑOð¾Y“‡Í×QR,Gµ ;iƤ?9;"'¾}gÃßwÓ²1çZ_gèeµA~»¾ŒÀ­ÒÀ¶<­†E$¶z…[œ¸ÑZ¸ä­¼Í×ÕêÑ9ʧeOû2 ¾v˜Ÿ"Ö}± , Ûqæk›ÕM“‹Æ¸Ùø­Š0þ1Óg“ÂU/ä߸žcŽž¶Ê=7ÚŠ Þ1/½;ŠVHµWº_ް8HC´¾iP·*ï=Wå¾8îzùʰZÀkëR>¾E§ÕLçžöå+5m¹bw­hïÍ·îÏÌÁ§½6ßßrq1àúú©Ïµ/¤çF®­|WÐð¸k©UíYS©Oy¬ì7à¬pT5'ŸžŽ+Ÿ‘æJNÙgŠŸ¤zfé×´~ £Á¤s¯u¹“Ûî]vJ³X‹ˆ{–_¾Vyn=÷öÜÝH,;ÁÕp¬^{l™[°É°U2²™°¦kã¶¶:Ž#­ÜŠÇa~—juòý¡UÚ%OJcÉ?®U‡å³°¤d±óR¤ÎKõ$eyè‰Ï ¼õÛ>ÑÖ>óïBø,j×¢‘íÞÆ×õ'êŸ÷F§]>[Þi â5¦+7Ûüu¥Iï¶B4Ì U³úó¯ad‡9Y+&Šº3V¦J·®Ò„÷e…›¿r›‡CY¼P}éjS©+—ÖâsÅ~qó ,‡£Ðá[Þ8üt!ýNÞõÖKÊnqSTΛFÜÆÎ1Òg»¨GòÇfe®¥ÒÛµ£1~?.B^ñs;¸Éxb÷X½aB_ÈÖüíUTš]%.û›°KÝ6ªIª$:bf•D£P® ß\§-ØÁ°'@â~ÊOï`û3íÂ#…à¼Ó‰ä°‘c°hYcɽ;câÆçÁÔƒÈÔ-¸ÏÔË›ã?øuk6»îEÌ8nµµS¹Y*ž­š ÄBù; ¢?Μóme6K½¼úª‚¹Êñ9祈ý°¢±›r˜™JÔZè|ì™ÜzÇN«Øz×ë\˜-Vô)¦—PíJ»§MØÀûî œX •Kë‰_7ytº£N1êzoáT'ŠhòñŽx²7\ª¤^¾ÛćDuÇ&î"qÏž¶¤ó¬ö]O[Ô¯ÓO”d»xn÷áÌcOZÈ6k<懑æÑö‘#«,rL¡±KÑ=-ûã¶uNúj’ÀƒšTÑ+>äŽGꂘœ¹Ô³v€ð…üØ?»"Üš•Ù8Ö*â’€DÅ5÷›b‹Ec˜Iñèh*êoëJVÇå\¬¼‚\í•Ì–™AmK·;Ò"láoO={‰‚f6ÔÙUVF™¬ŒcŬ n“lhY»ìeXŽ;7¡; ¦£×ïòlÔnlXœrýÛñY–W5‹›^«ûКvi+ëz  B\eNQÕ _’Âs„ƒ£äw‹æâñžÈÕ›ciJAŽÍBZÍŠ‡ü¸‘½|¿¿ë&NÔeV®N¯Y¹&åàè8R`-«ÐÛzÌ!sVAæ¼¥CÃl·½Uzk]%ŸÛþ¬µ”¾£úqgF•·Üiýñ·ÖÍ1óelZ»B­ß¨S‚0tÈí:q1Ùºšr ÷"ìçD¶ÃMè)+)~ŒÍ"Üs’ÞI‡7ô>0KÈâÝ.1”É+<ŸŸ»(šÖ àªhæ-€¢Cvô—`®7iÁÅäŠ §ua×VÀ¾×þc;¾®#Ë“oP)šV9Ë :fùþ,±ˆ<ŽÁ¶˜kªžíR'ŸÏ‘ ²â¡eê[-3Õa7“Q°° !@gÑ shŸ ]0|‚ÿ‡¯ó\TTY·öœ‹(ÉI¢(Š (&ÌYÌbÖûÿÙ½º÷:û|•É´ T¨ Æ{°¾ìŒ¾2ï)2ÀÇå~ŒëàäЂÙCØ`îÙe-SlƒÍœÂ|Õ-WŸg¯ØÅoÖOºD³z„äIÎ< L™²A´lRV­Y½’£¢ò³ÍÁƒŒÈ§fòœåSD³"Ęh1^E@´´ZŒAˆ6´H”Ûv-Šñ‰Ÿuº ºz¼Bí5„·|¢4ˆÿ³|˜ÂÈbT¯¿‚£{å°šEdzÏñc[…lþXÊnÇ’˜égg°¸æÄ/5ßßkÒôd?nU»j£—uË€_ƒP‚à…)r¶\d@ö`-†b²îVb,}@6ˆaŒÆ&ÆûH¿F²‰gY™4é¸! Mdþúl©æV€ä.O@òð©eúœd`¸ùãqõc;VÀ»•GW¾¥µù·(÷.œn\ȈùpÛé´Ú]¬U­ºH– ¢逊 9†ŸT$ÍPáÒÔxgj‚ÖcäƒÓ9 ¦Ô PÝTâbô €êñ_ÐPå”Ñ/J:í%wP@Ѳ޸°—ø£~<Ç^Ä|'…P5³Þ‘,dŒéBGCØ—~¹Pv§»ÄEÍí!ƒE¯YVüS`84ÿ (gÅÈ;1j ŸÆ/ òó=ôKcÌo€>Sh¢CŸ'  #¥è0z3½zê¤Ä_ºÞŽW-k ³®ì)Uý‘ÔÝûËsLéBCííç¦T™ä>3„Q·:¼æWÈ[ò¾ò¡ÒxØþ^€õþFåZ¬ƒ7cd‚…AŒú$Æ|X>Ű?€5O ` –ãÓ¬ÿ¾YÍIýŠ?&°`šHªÌ•Ó³uJ5½ÐNi·½[W× óeh×ã &—=Ÿ–[^uTé‚|Jê*?½àöûoѹËððkôƒäå`’èÐ~ xÄÞÅhŸb„wÀs c&žWˀǶàñúpŸ xÀ—wùL·ƒ`ÀÍY;ƼçN¿–vAå"³8/ô¨åŠ•%¿—"Òdm0ÖÔäq„@ÈDy\Ç‰ÙØŽv¿„ßÿ†D ^©×µ7HŸ–H¿Qx7 ‚M¼ê±™tï@H‰i @´Ò÷Ô¤ÒG£“äL|WÁL[ûì ¡¦x²k Íf³ÂÌß„FH½ ¦ü)”Ú¶Ö÷Ùÿ矈‰DóýƒŸœ‰¯ç7Ñ“¼ávþ«þ®ùßÃu HÙ‰o°”÷a )ª¤L:GÞ€ÄÃñÀ2-ôX`ïE£ý¹uqª)¾6Ó{Þg‹æÖ"ZSFf¼D¥£ÞÌ­½Ó·%+·ò)½†RÚ¼:ל}Ù©%ï ªíȽÑ9*ìó¼ä§€¼Ë'u6ÿ$Þ&BêKö[…+Pÿç?òþF"Kÿ6 g§BåÙ\ã¶déàêDÐè·yÔx=Ãs;uÜnÅãé¤.×ãÓ~¾ŽÙÍÆì9@×w8¸GÛwnW~ÀÊ–½Œ3vèãFkݦ—ëUn“‰¸›„"$A ?ª|í¢¿Jqýï~Þgx<› y6u©],qRìéf>¤cv½Õ75wåk­´Ù‚ „ ¢¾nDkusÑîJÝ£ƒå NŸºXäoôv>ÓähŽ‹ï™jãS ‚Šãcíú=I}~‘ú“‡ðc”E×Â5Iø——÷²sñÊg‡1­¶¡b,Âc×môu\©›Ëmñiì?ó™2…gK}D̈ÑèûÙLéY‹ŸxXCœp«¾:ö©nvÕºæ¨ÍMËÛ¿® ÕË¡5È>΃þØÀW}h’‹z2‚›dÕ€Øjã?Uÿl’*›¨©¿#&’\ÞHèmWi¨O7[žÏ¤¨2#ƒêdWðý±O¸Á¨Í¸ãa¶ƒlmúcMÛ÷¡¡vîY)íÖC§æ+°Ñè†véºd…ììªÕ¯l×á¥í ó|«­l*Í[n7Õ9÷æîÖø,ŽÙÆØîvЦÕKd=â|kÞÊÛÓù¤Î¸É–ªÞJ s^¼*Ê„›K?.ÙAöÒâfúP?>A.Íl¶–²ÅÎÎQ+í£'{mᤶZmI š·®ìûSsÓOµºk«v•»×Ͼch'šþm”­åJ1QË/ïbÌõ)=®s#yÛB—l`Cܳ㑻w+j4A3P*¨?ÐKTcœÏqõ™¥Kut•Ó<›Ê}Ýݵ0>9×è£^®îü‚[å.…ºëg -'ê—zN;Û™VnãIh?竳mÄèòØÍ±eh?Ï•f «SB/å—µì¢e«¨ôƒe—“·®¼i.Æw®˜èÐÑI¼¸ÞCGܵ³³í}«ž,ýl<ªÏ ïG„‹}uWïžÝc«qs…[ëíÈ/ª9«h©€¶Å€/–m±<¶ÇjÚÄ“‹­ecùU-"Šü¢›A…]?».xÙÅÝ-͜Ӳ„î.[Ëæ/G‹8ƒkÑ•Á·ÄåëSð41Cœ0ýœÄ壩.ç4ž/vÇ6ž›}Ë08f–ý—ì¸)’YèzûÞº¨Ï‚ÇJŸõê?˜—áQmÔ˜fo‰IrGp>„ÿ~ÌõÒ©¾©î£âÐQºpÕ6àŒ]²¨ƒmǾS¤/-¯À=jMSø”»ùhÜæ¸ñ½• JeNÃû[càt†A/®Ù±·~eMþw¢…Ò:z“eÍÖjx=šª›ÏÍU:Ý2»y‡Ïxåq;ãÙÙ0†³Ïðd~7åZåÚ`Ü׊Ý}Šýzn[š÷¡¸n)þÕ¤‰ayJ\<«’ÛšÞ¼ÅÐÈÖr%fA…1³Ÿ-SÊšïê3Ÿ¯ë–¨´tôbö4;cŽ4âá-T7ëo2»p|Îxîí{žr|ð„â÷}Y¾ϲÜÞ8tϼwRðœb’¶Ú»’öÌbD›cÅR½>*¥ŽÄQš?>Y¯ª¬RnûY?Ù¦LL¬Þ7 écËÌ=ðö7Õ*;16¢n-riÍ%IÝ(9]ez¹|f¯WJ~]w•“Ók(MyÈ—`?”;:XH÷5³“zŽu_·!,{pZLá^Q˜„PG@˜Z˜ž?d8]$wz¥K+fÃ\¥˜»s„TçX©õð©lc‘GÓµô|8ºÝ¹”±7/òú©•È®e¤n†¤U9&S”Òvùšê¦åL±¯Ht‘•tû½ë[|‹Š8¼"ž˜Rñ–0EsC¡°l.Ó rrH—¶àůÕÅWž§,·­X ®F=»›öÐ;—8ö1Ÿ̹š ƒÉ•nt:i7?$›«;3ôëU¯Ê¥;^É‹«G‰²Ô•yYß»9£3²uÓ”ÌáƒrWÊ¢â»qCÅ\ÂT¹±Bá‰éEʤ˄Kãa¾Ä¯ÝZ•w˜Q‹ÛöÎ#®–¥Öû©|½êlÃÝ"¬Àê2ÓêïF6ì1}£„ÝÝåóôMÉ ¹Ý›1²ÛœöËêwZgÆiB“´éíAqƒ,FÙÅÍæeqXq“xyy]]i»ìW~?* (ì¥Òø[Iñëµó4mÓÜ6‹sßVØÃ+̱á­Ä ç1]˜Öm1gär¤ÜIÑêú!P¥Z¦²l@~úá…ÛOü¬®Ý¯:hà™I‚žÓxúíÛH¬þd`ð–ª:/‚aÊËÉ}¬{ÈÇ¿ÙQ¶ô8{j½ÙÎÉ=&É0J@¼óÞ×ÞlãyJ±Âà…1mð¢yËOkô­¦eè@õMZ}.깂ZÔ ’S†4ÝQbߤiu9ÆÙ"aµæ)ö _!m…ÀŠ­aMßcbvKýT1l½ ²ÚXer¥_Åì>Ú×2R&»8\ˆ^‹sn¬SÝé¿ýLK¤á¾ Ø’C8o­~˜¶?xÒ·Kð¡µL¢ýcÏR† Ë ù,9¾¸eÒìÌ$\„„u̇æ/¾·Çá«\–ÆÉé6m¬R«¦ùÆD¢€UEÕÇ6þb„“Çø{ ?í–±ã½ùÈ•«—WÙ¨LBS(m¦¬Ðáß·̸ mçSmå&Ee)¯¬Ôtåè|GlÓ‘ß´¶ñ”±Ðžä„P>$ÜÎ!Ä\©„uïðD ¾k¶ øªa×pò3°Íø³ÀªÕÚcÙî]­õ6šÎ½vHs¶gÐt•óÑú¤û°']±ƒv›“@iÔ«‹R¥šYÕò¿lÇÝi>pêi”à`­yÇJ_ ZBUœ)/ƒßÆ¿SæÚ²•ë/b’gà¾Ú³N¥Ó8¶y¾fX¬:jÊ›_åЃ91ÜZ¿çhº¯FH‹XbH‹t²ˆt¥šðµ»ÙÀ]­‡Ã×Þ±ŠHÆ‘Ψ“A  ‰XFÓ;4ª®û8Š?žãÃvømÆÔß™Ov ïvêé8+Ú¹á‹ÖÄ´xîùég>@Èbað©ÝýŽÕ°ÍcO€Z8†6d)Þ7·‚ˆœgCiY‘ÓJ+Æl_?ÜVÍäº'ôD8êõÔG,,RI‡SÙ.CYíAýPµ{¢ï—y«í åžçfWÛ²]þÜ KèÎùü'Ý€³N‡uÜk!Ï‹Ž@>´{12  Ù·(*a³ãzÔ.w$’&¤u]}¹{F9 høf$8À:¬ž.h cM({³Æ©±µÜ§L\I™3º—+ñ&¦¦1.€žàBŒAXXôÕ¡e\¯ìn­]ùÎxøpÊá5‹íî]Ê›øKÒ%27Œ\KEyð‡¬f3½É#Cν™Å bÃÁtþ‚^èð Ž4žwŸ©ÔøŠ|)³+i`ö,µœ×V1Ú;€9 ˆ±“ævk«æ+²)€Yf9Ƴ°’0mN?ܸ¾[Åcú{öÕqà^+3Á*Ü=,“‡Èwâ¡ó™ÚS1À}-„|+àZcÍ¡ó\J'ìÆ¡gá#™R ‚rÅk*…ýÀÙcJÆx ç2zŒ^à3¨3.¹´‘vÌ=¤{Á¾1Ðß|qBP@çB"År1JJŒ¹ «ÆpƒÑpñãIüÑ5þ̵~Âö1^ÀC.îvx^'Štcã:ßDeOª<çnî"lÇçM¿fæy+¯¬)£Œ`î%l¢É†ËpÅ5w°¾7ß&ªt?2lt46…ÉZ•ŽŸMX'cwñuÉâdÞÇ~#ÆsˆOqãü$¨Å[sÅ‹1N@ì‚ æ6ˆþ(Þ¤Aå¿w¯Ìé®ú¸A«_žãü¤_ Ø~=GÔ€¡Þ¨#-ÎÐwœÆ·êõ-“º¨#¢Æ½êh?áÆé©ÒÂå¼8@™˜(…ÏÄÐt@1fî PÚ‰áÌb\O€BPXJä«WäÛš&:tÄÅÝ? §™ ø H/ÿd`|ëîýDû³ÉЄºªû펮˜M <·|3Ÿ›¾#Ýôg„É—“ÚH%e§„< ¡ž Qn³øE#úíB¶Q;†P´QlƘÃÃÍ; å£ÿ‡¢ÔÍ|Ö€F¸ûÏ~¼…§ÍPëš“ŒÄsü?¿£ŽÛ1›;™a+­‰ÕÒŽæôŒý¦(ðÞak9Frè¦*:Rlª_ù É™€¹vãgÛi-ƹãÝÌŽÄ(Íåv·9fŸ€™Ï9À,ŒBŒO0ƒEü‡f‹ŒSŠßÈ´CÀd> =®égeõr"+Óƒ¹Ê½ÑV²,9â4Ã=NI­g—'vúß”x$Ÿ ç)š™€Ó«À•š]ÀÕ{Á/$/ÿÂdã4\^®¡ícwÀù#Ȯ¹1ÀåãÝÌ™U9ˆ3†8.{Ö7ûN7œ…‰¼J21ÛçÇÂD»©7_¶¡ŽÅßBY¡íòžÀµò@Ìzëö¤»øå/žXñ³‹¿ú¥úþÆ·™¿–$ñ?¸@Z ó ®|xvjyv©VŒM¼JµƒtÑ—YΤõܤ…I%þ_kRjÙ«9ËáGß‚•5/ÝQSzÕõ<#ãR¨¦Ÿ ~B¿²_òù—æëuï¿L¾žýDL,ž?Æß¿”`†C’táÄsÛ~«@ìT+@ì’ûˆAÀ±W‹—õë!UˆMÏ¢Ó?Ì’Ìž ¹E¾<»‚ÔºLW ¼[ßsHÑ¿bÛè'b"Qšÿ$ 'âê¿Ò%þ•-œ˜l“`ßb3äo·Ë+ °Jæ¬E]ÅËøYC­¤—2P„Q(âéaÔíýVMYý‰(0V›-nð !_|±¬*÷K‚þc7þ£õþI—øZ‹TßÔÝH¤ß¤™?Âï¿4ß$Ø!ñ÷^3!ÐR«;Ðä4Óv€V-®€Ö-b@ Je Õµ9ÐÌ‘M[{ÿT9Cóÿ‘ß -žÙYaÿ;!s¿-¹ÌûV>ák(ñkzÆÖQ%Å­n5J]©ÇRy™½Ì»‹ü3xÎg9EŒaefÄâ$$½ûÊv‰†úO5®¿k›ÁÁóFÔ6ç ×iÞÏ­Oæy|–hèðq8rú»Ùe½tèæ¼nãš¶ hÞXxÌ\|šXi‘¿Â•Ô%¿ÁÍóâ“ôgKƒéΈ ?œºˆ¶˜ìÊö~|t½ÛXØoБÅÿ@™ÕÏþô”D!$6Þ¿\²ß̿¾êä9ҧˤdXÜÌÖ¹‚P˜–z«€d‡ËìŸ/ Ö;œ•_ÛÃÔM­/]<Ç>ÙÿŒ¢êɇÞcj¨Fcn0P {Õ~þ=3z³|hõÐÙ­Ø8tC§ø½&Ý¥wÓ¨Ãi¢í+iï'á[&¬yÕç?.Y“õj›}½¼IÒÀh¨¦6u–ûø07’wMk¨žšî {mú}hPú:ï{¨)Lºa¹°èºDuÓÙ¹•}‡Û—Nm?]¸´…sýÕjËTóô‰¦úZðþ ÷Ðc /7 U©]·¨ýÊ[zܳÓ3§¶v~Í•gÄ 7ㇼÈÔ&Ñ¡“²f ¨éª‰†úÇ%ÛCGK¢ZmºãQ6ßö9KnµESoÃôŸ}£äg?†Ó›†×€æš_Ÿ•ÌN]›ýÄ¥J›ãZè™ó}²7UOjGî±»ü¸Â+×´s†Z ŠAÅ~®ä©=p* ýË%kòS=ébâå•wqUÖø ]?‰K6‘»7Æ¡%Gàì´IÔ0Sõ[ÝB«oÏ&¸æ²E¼ºk”™*•Ó®¯%'êU§ý­Øs•ÍŠ•KöÀr\ÛÀúÍò¸²è—fµí¼„ž£eKÅïºv×|ÑÕ ¥Ânäî ž©6˜?XGÕ­=³kš:RrWªíû¯.½ô¿ÞçcTGµqÍe¸‰{l§N[/*1ØØƒBâL)í¨lí{ ÇŸ’Å !kYb–žSŰ5çŠôm%â‘§^àÞ húy¾–fv/¯`Ëu.pè‡ñÜŒ1¨×\Ã:GÃýD÷Oò,nfï³å±¤œ2ý‚?¢;û[ùÓ¼/”cÏñ‡æ„¾ëKdµd7õòg^©—fŽä[6´‹aév÷¨À=Þ3ó8Àצm>š°§¼‚P—Üm!}ïÂËi„š2nÏ~ö—5ÓÝL:?Jº¥dZÚ²7\hvV|hÄç%ªá”î«nqqŒ±>%˜V¯‘5µ:™îöP¤[ݦEèu¬UÛ™sYß;‹mÃLJÕÊ]‘˸{”ÏG£Y1w›圆®1¨õìg´²ãÚ¬—…Žã¡>óÙŽ^•¶ìÜöñø\T× Þ™ÝDÁ2^!•ãâVP|ÛùÞŽ-G›óJn×Z@VøIIVÒîHºƒEül¶Ëñw¨·ôêZ; ³¬?î*°çb¯È•ÝþÜ©f«„ëR¹P'žJ¾íi㹜§³ãjUÐg‚¬£Qá{§—f+…œö E•~çʙݨRÍxù¦¯gÍŽâ[“¡­VsY¡N[é¶cn’Æ—qМ ¢!+%ás ÁÔ³{ÁÌÖD/ưŸ`hd¼ïü&`š%½ÕSŠé¶Ñê)n•Á|´*- ³[ähÜÎwáH5Rè†Ñ±Bªá®evCSŽSšTD”få¶M¤e…év)’–)ÄÒuD£Üÿ¦óˆ@8Çi¿'\ÈíÒÖ¢óàWbŠâíKÓàÉ.ésUt¶æ˜U€sÌydsÌ'ÓK0€v¹sº–Œf®Wë”o‘ng‡=íIý°µÜÝ7Ûõµ%ŸôQ×ËäQYgÊ—Í'%Ý ¾\;%ñ¬[½€ ø€àõRN—襖ÆnÏ¿êÑO¾…·Y7KO—ìþÎ^Ù´ÞÀ˜3ÁêŒäö¾¶úÊ* ºsd:3¤-ºóZwè«vîöV¡i·¯µJÞ/ê5%)ç_1µ*Zr ýV«ÏU.µjvtÊÍ~¯d$d¤ÁkK¦—íÚƒ«mÛ'Ff6;ZM÷öÔã<9SYyx%ß·Í›ÍÞ™/±4 ¥K1=sDqôrÔÔ:xy?XàDƒ¾aÎgLcô$[@w…Ç÷¢êq§ê¥á,º«Ïê½ß5ºBݬþdu0ùnÖ½g¡[CÂÚ}*O3(£¸Zõµšé¸J³âdxeÒd{úaýnp¢žõÉ–Cú†„,é;)$Š«ô‘@›¥{Œ>À—¹3ÛÂãÄ® c¡7,côëÞDw#cŠzNtAyÆ%‘ãƒ3¿¿í"¢Ñ‹1·QÔ®#Ç÷¸Ñ‘ßFí'«£N¾CõÛq‰ŸSV]˜SëæÙåð2Ræ¨.?QÛ oIà·€@™Ëôx¥ŒÞiOX–´Ámã½ÁÂÉc¹5ê£ðÆ® »ç–E½¥¢|¥ðý  |óÒDü?AÄÙì _JwÒŸ¬Dý6tн۔`åfVáí7~2®¿Y^Z>œwæ¦Ú¸õâ¬tö ÿU&Îo_[ò ¸ü7‹h©§òY¤˜.-¿ÉÉ>âäŠÝ ûÌbzíåïå—Ò 9ÙEiŠ}‘ÀC/S©wj½:œáÁº¿Ú'HÏÃhê ´T®$4R)üñ½]!•³¥tŒS)õÆÌFëÕrýŸ¬ŽtµœQ‘È–×uF(¶Ä–ÏM7}³Ö–™K‡úVŠC«ÂòòœOv9º?Ó±(ÃGŒmJ[䌜·ˆ”]$º€T~G𕤞pg“…áL§ECÌV†ô%b¦Þv¡–Ê]æƒTªËï@á9Ld¨)A^ŒsIŠ×óO€—žÀË àFu𜿑ìÎäG1¦a}¯}¦ÕûÓþxŽkè£nIµ’/\Nªž®¨¸’–×ô¾ÇÎY-:¶)¬6´±ã»øýl`Ðæ!3=‰ÏŸÇË« ˆ!…Ç(@43 *…tŒaü㫼,@8f#Æn 7{„¹K¢àH€(J5@h`~ÆÝþ\W‰@ 2gWî{Ùž&¶ã2çå:?Eíh¡ªd‡'&®kö…ëR×9ÔÇü«ÑL¾fÀ)0– É· È݆äì$&äD¹M\Èu>ÃsbD@6ò‹‡ í<ÈJJdnÞd¾½¤bÅïÆ:U@¢S…Q뎲ò—Ë ñ0fV»Âvòè)(imýçn" д°a. äODmguÐî¡àÂÎz  [þÂŒ{þ±@EÞ×<ÈÇXm@mèFŒÆP“ëPÓJ<ᛥØÄ¨<~ ÈfP î¨ò‡TiJVž‰÷¸jÈÎÁ±†Ð¶ì}Ĺ9úÍ,¿dŠÊD‰BÖ8ï/$Ó/.Ð^ŠéÂæ8禦$Êm7oýZR ¿  ñKµX‰ÑŠ×çú~Œm0|z£wLš…ƒO$À¦’˜<>ñøf«z·éº£Ièñ÷ì9É/.öfóÙõ\}dT‡/óÖ;y±úàÒ컳‚ÉmN?Çß_hžü°kªØsÚì;Óüɲ£ð½ô?6¿Åïæ³ßuïìGŒØKÛì–ûV»{l;Ûâ€íM,À6‚xe;Þ¹lnj;¸7½Y]F[çÖíCOS ¯*9+ÄàžÖ€£\Xúêi˜N°•ŠV›ÿ1‘<ûoø‰°–€ŸÌ€ß|n€ßšpŒ£øSüžýj6€ŸŸ"À/6iÀ/Ãà‡£=à[Wðî¥[’³Çc~‰ÖgÚ- Û²íœ*|•5j“}ÑXO~àRzýÒ•ÝöïŠv‰àûÿ‹˜Ðœë/ðxöpw¸ç,ñ9@DÅ%1bD:ñsŸý—S¼ÊŽX˜³ÿ½ë[¿àÛ‘‚-ˆRõßKõ}ñ̶vå[ª³¥Û`ãõ <Ö“PX,æë6±W7÷7ö×ïÖ,-òw”œÏô¼2GG {FÌë«©Kð¤ƒãc¢’þ¸d¿ŽÔ{y¿&ÔKí"mÏòèp8fWÎq?ãäËŽè@_K|xÌ?kyU…—ÏZ_|ü ½€:iþwý063#Æ”>ua<7¥çikâáéÊøèHßúaR{$Ÿ £a 5׃:¿ô?C훩I¶7³ÂyÒ±¯Öù}LDÞ!õ£l¢¡&L4Ô$a®Õ倩y ¨%4fKèL]ðL¸E4ÇÖj$ïw»¡zžy·Œ¿¨þX[¾ûÐpžêY©9,‹s2 –+®Úw¥³«¾rîÈ;m_´;­vf0oÞô½©¥8Ãý¤jXðÇ%û«j˜>]îg¬ñ=BÿKC kIªÇƒÔÿtF™>Ôåzè¸ouÃRÃéÒëV½ÃíœfÛçx"Ó,÷[m©1iÞºµyS}:+ÿ9hí|tÏqaôh@‹ðëU¯£aD{6KgjaÃ)×èèT¹GõìÝõs˜ãŠàUùË%ûõCovZ¡ö“Ö@ô÷B¢¡öÇÊô,óò³³³£wÛg' %Gͯe¤©Þëdã3*° *}3eK™:º*e=›*™µ°V°j.W©Tw~©Zå.¥†ëg*'êׇŽüé-*¹9ØÏü* Y»+½  ¿d‰µWûu©~í±? O1éeâåpó4=xútªW|«·Ä%Û¼µªóÆg˜^×-äzD8ÚVwõÚ¡ÊW¸9§­y rzHEK¹¸=(ÚT¢¢>_ÛžX†6^¦4«Æsô0¶,[«Å°}ké7-pŸòÑôÍdŠHYÉ·m½›W(ëxcs·mMDO<¥Â MÄôø-IÑö—µ?ÐqÜÁl·Fï–mW¸šJ`€ŽmÀû^ÙÄçÃ’E§ÖÒ.-â4ÜÃæêX¤¯ó¨°ënîî¹y›¾±;®x¾]x³¹Û—s)}'ìÆ Zu³ŸÃ¦—5E~“….+ Ïºm]·´íBGßú-¶¥¯3rêC]fù RŠàÖe3¸øÀ+-=âµÝc“q+A¶T,›ØÃ²–µ~©èŠÅïLºàeTÇô³\-9?¯À\'”¸~NÃå±1p„™aÐÙuvìewYè”?ë³fí¡£×ÒluI©áࣨL*[Êì¦Ûn†Ç2å¸z#ŠïÆ‘¹}ÃL‘…Âc©ƒé}dyå;4CüQÖºx•kzå6ƒg`¿+§4«8jÑv’éë®’W ^1žË{&ûÙìõ,t˜º%L :mlÍVV®FÜOßÄ1ÕÕOm•~¿ú/ÿgx˜Y)~I9ÈÑÚºË ÝC¤Û%-í–ÄgõÄA{tÌB>Ï^3Æk”`˜ÕOz@wÖé–ú` tì=ªGNúê•~3ŠLÇ-²œcä/ºÆ;‡Ç}KÚ²µ Ô0èR™ÝÐa2|ÊI+ÇiKQD´¡ÉѲŸ—²[”n›…#iìº.>׎hˆ©‘0î¤×‚™©¯x¤gý’Æ@Fæ—“M…·‹ö˜'1õÍ“¸SàÂõµ™ ?söFÇ_,Ä&¨ÌHϽûïŸÊk& -ºÔóÌ–QÎoYLëóNUÝ@údx°~%r÷¢ö’naþ#iŒ‰ƒº‰FÚ¢„qËâSö¤ô,ðÔ´¥ òür8+óvîVçÂÑã\«¼dw«Å…õ•`Ž»u–ñëŸfGG1M_@ôÕ¡éK rz¤54Úb!7æÛ]«÷†)G+翼¼ê¥ee‹/jTÇ”æ0õ”z‚z oyÌœ}J[E-â—KåÆÛ¶ï±sn§þõ§qLaαÞb%±¼ æ$*6#N¼&})'´¨»"”vU3äkúðÈ¡5Y“9|Å9Á6É\véÌk’oéãu¦¾..Ùj+=+¹Kóšy¿¿ñýúíååÍLæH°¤¬‚øð–2Ñ3¿Ú{nÓ¸oÙ½;Ù²ü~x`N½ý•iê÷}=RtÇe :ÃèÕëU3”®Ï 䛈çò9×è“ûò;ê$ }#…Ï?; /MÊŽÓ lÍëdŒWÇëZ¹›nÎ Í<³P봥ݾÇìéfò°jVmkv>üÀ(dÖ®æ¾ü¬…FÊN‘Oz\ %¿_hFªçßïú’zÐÔšêí¤=ùæ¥39|•dnØJÓT' Ûkš@:?µã ’AÓå凊¾µ=糑ÿu eË5©¥6øOIîE+E˜×œgêÙ-Å-•]§§J–‡Øº÷écNa4!,Ðm˜ß¢µv+Šqx£\†À‘#RÆá`"‚ŸöàȘOàvJû [íDAg‹ 5*H½P tó'VëY[•vý‘¯‰C"ã‘È•É)‹ÅrË"\ëa­d"œ®Hïè¥ ¥íšIî4e:\p¦@ºú½ôÛdkŒîÒŸʵn#ä(â£3Ì…1Ê'DØO_pÔû`p;«¦a…å Û©AZ¦2L ú—cʰ{o˜µ]Œç©gŒµH®Ð2Ôý÷Ž•ú&›*T/+U¯LÆZº´ÙæðÂe¯¿rÚéît2Ì´KŽ'}|« 2+r‡Ó5º“…ô$Äâ¹ã9FÐåÏŽîÐn÷èVJÅ3¬ïàÒZK$õ2 >e̳z Ô0#¼âuwîPwã®ÂÝ[À=üã*¸‘)4Í審³nU3ͼñã9®¥:t¡ ·R¹‚¯žtæzÿºí2Ê|Ý’ÆÇ™-ï¡ÎF™¢ÞÇÛ“À[“-zçÅ×6?…îÁm’z —ÓÔ0­S9:žÄN<î š øµdüæ4€àS Dfãr9LêF!”m„–ûaŠ H:^éÙþ|p¯yõˆ-»ýJÍLlÇ%NÚóæã>ErȲqÕ²²RÞ“ vĸZ(ø1îs€Ûw€ZP­Ä8Ï*\Q€Š¯r¢HÿÊêëž3nž+?žã D*¦QͰ†mqÚ¦ƒƒ ì×5”æqyTr9¿£¶_\ ¤£ƒ4D¥°æýÀôî`éþ `ø(Šq~Œà56ÆY©Û16]€QÆ:Æó 0h, ®%÷I£iÐgŽèɪ%ŠtÝ£ŒnõNì[¿lǵTìäí¬ 61ë¾DyaöA$n×&Ú ©é¾]ÝxTúÜQX?3¯bëg€ðŸ$‹ {8›~‘^{äS1údŒ‡°g.cUØKÄ÷{Û0À"BXxnl3—MW<À‚¨ °º:óü«7p_á½ûOÔñAìºÅÌzWüI—2;H†·â!Í#ÆèI’H¦G~v02U¼±vç£÷„¸ˆ_’[`û•hÀ¯£¢ÆØXÉÖÜ”fŒå àw5øþˆüÐÏ|Yê|(^Þe€»å!ÀÍö֙Ž'nªCìõ¨Óý©h÷–V¶fRB’d)l…Ëží‹C §±ïgƒægÑѧÁ}Œd]HOGiI0 5$_ cÔÙ2ñJ1^9@¼ 'F⣮­€¸”Y@lq+ÆkˆYøJtèÞ΄,ãýмUûµã"±Ûôú4,Þ:[?g§S½U¦¼T^£^®÷ö4ÊC¼áŸêHßY!dsT2é¿Ñ œûrëb LFŽa耊¿ù1‚RŒgPl~ã°ç@€Bß" °Uïö ‘ý-ÈW¶9]ã=‘CܱEl*ËËr]òw«‘ +Âל¤ûáÜP`‘cÒþrüfLOÚ¼Q-³ò!K[”ƒ|rÿ}8fáÇ|4½D-@h;F¶£ßôIRFèfýèEÚ™Äë»vÐyh•¦Íã. q礼váÀ9ÙÌcrd÷Û“IAˆ*ÔGŠM Ì“Ø?¦T¯ø#¨Ôî´›;$ùÐßÇ_™Ò%’e ¤µûx‹ß¥ƒ¥qŒÍ°ŠñŽqá›i[€åÔ`yöþ«ÊÝ´¹ûbÁ€Ùªù •“OÅÞk?3¶¥bKͯ’X«6öC‘DRÌíïó¨¼4'¿üŽIïW1»ÿ3b"Fâ þgÉÏZ9<ëîbÌ.€WµoØÄ.x¾á>YžÀ!ONLÀ§ ¸Án_¨Y]×Ûæ ‘iê2lH.Ÿ+pƒ úÞGîî\+dïÐíßfãi¾I’Ä¿‚%~Ò%¾bð7oø?>àÚZ„A—k¯P:€Pî@°#*"„¼P‚™Þ¡á€ ýü²8_j·[>í«ò½ì4GmŽF}s[ª¬§×ŸdæDaNÄåÛùHªâ$þk°Döï`߿ܿ÷×éÛÌø_ÒiùÍn¼3@ºº@N¹ Cž–ÄûÆP¿”SS{ ZéL7gÓŽ éX6_¥¡‰”ÿ8޵Ÿ´š4˜ˆËÿ¸Šÿ3XâOªÄ·™ ¿I ¹Ää[Šj ÓoŒAfÉžAæ…³@Åã‚ÌçI¼¹î—ÿ‡Ì›¤öz줚ä7pÅǧ(Wï3’kÞÊ¢w¥[ÏÑ¥vû|C¢Õ9ÊEÛ³<=Nº;ŸöîvÌnv¯Ã˜Ý§Pã‚ï‹𓈰Ùåï¹Ðû´Žû{)b-ï]h‚‘ä!$‰·IÜÀ†úlýo]M$Ê;êT¡«sbá ×ÅÉsd¤ø“:?+‡1=Ò÷h³œÛ:Oúë³Ùpã[1ô᛽ŽJ‘»–×GoÐ;ùôveö´ë/ÆR4ÏÔãjŽ¡ÓŒ˜Ï)½Ôð‰GŽ3ãc-ï…SåñSÎL}ªPÒ»$n qÉþ‡ýÈϽGR—ëÜzw‡ýœí–‚7ßÔÞð"¦÷ÍJÝ ‹O£y™Ï”Òc¶ÔsŸi˜WáßõÃdj|¬ìXØréQ›£¥áÍç¾ß´¡zárƒAF-÷?ýr½Ÿÿôû½™y^Ë2u ˆpDw]vÓJÄÝŽ'š»$ áGHýºdÿèÐIï 5&{9` ü¼x|/áMCð&":c!ļáÍ{µéÔ뺗x9ØÌzØÄ­V›€XÌ÷ݰ¼9wépsëxÌæÕáöW¨í§ßD+jSéæ­'éMõ]µ}š´ãó½]¡…€¨[,êýè»¶µ’8ÙÄ%{ ¹áñ§jXí•©&Òß4ÌÎÓ?>Ô§_$úPïCË|HwCk™îxÔ@iû\mµEßlÞ:~)‘T¾ã²^ÍÏ~Ú~cl¶; hî÷ê³Ò`\G׃¹gÓ³M-ôvçꮽªÜ']_ó2N;Ú•ÛÌ™V4¼OÛÏP2üå’“ƒþo: lK8•h¨?q²iZm;7ÕÛ>j|†Ã[}V¬>½¥í¤™s©_ ‹ß­éìgê«©½_»:–i ªoÖ*·~Ý*­uÖ²9A+ìÚ·¬éëƒl^,#§aJÞT´Rö³U*ÙqÍô²ÐÑðõ™outôbõµeÇ›üNh(•þ,£ŒgFoå¸ E$lEn»;[VØòP ïH šº!i2ÓaÍ õVA ¨>·ºäóÙ@¼ù®z ãÊýjúe³—2‹ac'˜Çžø½î™ ŠsÆ0È*›…iVG#„׈ÛUP]íª¨ôë­g¼Ü#—á!ÄR|+e+"FÕäv…mJ·­Ô“‚Zi*>Íhˆ««0îâ¨`ª%=ÂNÚÊ¿áYi Ri >Øür!uô‹+v!Aúc$z{Îire¥6µSÆ·*£”e6ÍPÎiÅ&–…ö  Ùr9÷‰N)ÇÉ1%G‹1$+Ä•wÛÒ˜+ê3A4Ò¡"Œ[¡.˜ò­žŸJÚÒŸ_Žò}ž„ZK.œ=.ƒqv·~è¬çvüxägî˜ãÑ—˜ãIvc¨Õ Ì!RëvGé†Õx}/äWO©MTôþ{ïµå:®¤ ÞÏZý›¢ %R)CyC+ï½·”÷ætŸ¼˜g€”•™ûTýóWUg] r‹@|@ "Ábï9¼…Ètcƒ»TÏídʸ×R— ƒÂ•lK§—X.í§y~a;3kº]LîhΓ?Q½jAO‰f6›V[,2qãîÊK&E ´ÐÖÙˆ‰[d¬H,§Ë>‘ϰ;|³Z’x©˜`q¯×Yý¾¸Ñ²?Y| DŠÉ–ÉÖ|F2…#zClÕZmĦ¯5äF–LU9Ë8ù6~¶*[Ý©1ïOs¹ÝÑ…á22Ý.lûT¯Ò؆ð»2V}J&“||JRXviÍD³[«ƒ¨ˆ|²k$jmÅ7 Ü…{]¾e¿)Ç-ï¶b>ű9Ú¢f½>ïÆÚ]<¨Œqbp…qYÚ†qµ²¯õ`žLsa¦’ñ…Ew² ¾õ„ŒªÐ6ɧz³9ì%š#šÉ%Ó¨ã˜f—tçÙâþN¤ÊdËêä‘/æê8ð»av/õZÜ+ÊKuµXZEÃÁÜ4Ú æð,m3ë3²ãu¸ˆ™Z©‚I¢¡É2/#ÆQŽqã®MÂhÝîfFÒ0œ-âËzoÆP·ÙÕÙù½VÈ4Aðã –Í:!_²œ÷›†vΓl!.WÉÛ29P{bC ²±Içã-Â--ê–ÃŒ­X@ U67#æšY?%ZX'íêc¼?:ÅL§âÚÔ.u&œD-ÆÑN€[xÆxeÀÉ3¤F;!%Kˆ΃~á'õÙã`ªÏž*¸~púÔ»:„¨Ë_º½„r昚éUd©3‚u®_ò Ìé¨{Þrxï·sþô¡mcg~bÍÅâMÜ·nŬة`êó9“TÏLx¨Z1Êh¯iŒ÷ \ÄÌ0¥C;CêØ6èú‰Ö/bѰ>g]¤õÎ]¼‹ý‡êAÊ”n×òŠº gƒ»Qº Ou»ŽìΞ,ºüL<‰ÙÎÇŽýÒ.âZ»ä`¨cªûðS=áv¶Ä ³VvRvSÕ¬·%kû•Õµœ÷-õõ ‚ áSÞ˜ iCjHÒ&ŒÖ ôœ«‚¢ÚÑ/²cYŸ ½ åP´˜l¨‡F}ºÝ1—ÐùC»:rÒVH(MjEÔÒk"(>D”pQÙP ¦¬(ë‰mÉ ­œ9æ­é&ðOÌ‚è„iyÇþc–Y¯¬3¤/3ôÀ˜°Øh,t ¶b`ji |mÌ÷®XA?ÄØÃ%¢Ï2((ª$¢ÏPÔ“ˆ¾é ú¦å€è ¢/Vˆ¾T”}ªnCôLKdDH8“õp´îA}ê™ãEÏm ë$Ô›V0Î< ã¨ÅøènÞÑ 4$Šò’ ±¯1‹1’ßšl¦àÐàœæZ¨¯´©#‘„·ŒŒTÑï™ø+ßÅlŠLÄIb Nv å‰b°ë²JÚ^µábpRnÄ€oÒˆ‚Fƒ ÑïR|J6¤¢ñuiÊEQ›-(D;Ãæö)2T?&ôþÁŠ]{mÇÀuL*vœEr•ÅÜxcÓ3c1!“÷Fû<5Ñ{Ò•Ž5훈Q×n"†u¯äaûb»– ÈžŒ7Ä0 1 yÄ0 @qUf=bèÇ|ˆaà¿5œ+ÄPàÁ? ˜JN+Ùxˆ˜$µYåÇ’/²™ÕèP˜îbÊ=Âî—9h«D¥ÍŒHÝ ·3µq5Œ L­¹@s·D1.ìà¯g„ë1æØ™’¹ÍU¶ ØëcÞO‚¢ëCŒ: Š~1ÃSÄX²`ˆ1¹ #F¾^AŒþò1V,btŠù¤½ÒOǪewB2±x†Š”m&Þ9m¾ä¨ ­pšFöè!]"‹½ˆ³þ#å$n(êSZ“k+ÓׇˆiÛ’S§5ALåÁ1¥ä%(ÖÄ$`'PfP ˆI¤Ã ¨ÁK1¨&(ÆÊ›Å¦P’@LŒ‡GLn²…˜l8Š˜La0šÃ¦–È÷ô…RŽgD‰Æ¹…à#åM,Äì$å)øÙƒ“›Ž†”ƒµ‰Fv"š‰IÚctõD«Þ_®!“Ý(¹NKôwå\ ØÈ·F°fd‡`éˆ`ñŠºÁ" +‚±n(š‚qÖ<(Ú}ó¹@e߉F0»G0Kü¦+ƒqm–Ä4Iôâ匆QQ_+€I.OÇú¹7èK›Šì÷ôdé[Ë}Ñ"Ùj’q yõ5$F!}T2" Ó©…y¿=!æÙüˆ˜{;ðϼ#‹›Aá$”ÑH’£ bŽ:â hWsÌ5¾@ι³'’EÌ”cŠ˜1ʆ`Ëh ŸÅêb¬©ž9NlR%ÖÓ&ÑnÇëÞÛlG4‘ÙØ<. îßàÝ(šr¤ø/ãhP‡ ­du<4·"¸kD 8ÑÁ/§áåã<Š<¡K{åD,“"XÊà b©xZ ˜.KFÀK–TÞú¶HÛb ׈…º‹ÍÙ,˜ÔcÇ×á–¾⸙äͧhÆeÒ·1*·® ÎÑêaö9•7ø—dT'¬ à‰Àw#îŠtU9yOy÷Ëyd{ƃæhdžqa1lj–@± „.µGð nÅ„GðIµ‰àÝô Á«‰‚gW2`ÇÈåúæ±@ )è§…›þVÎ7ÏXX&b¬8è,g1Xõ›ò›7lCÕuuŒ_n’ÅórB8-(¢‚òå;%sÛZçkÛÝE†XËn[±¦«IÄšI «tÏ ‚FLf‚XÉžKŒÇ—ãÈפ´Oºƒ‹TÈž¦O©›PsšÅ憺Ôkë¢á¾²ÞÜ}ÊN¹bâ–øÕ¼bâZÜn¡HÍ›ˆ­ÂÈ hì[•![fBlÙ xš‹+ÛD¶oGl.‹Ø<Ñ5b£ä»+[ûABß*yüq&êH¬dÙ†­ÊÇì §Inª‹‰±BE¨Öù,ñSÂW¹Sør¡„¹»XBy¦JZøvóp?´ETx\ XGzØl#t3yBèV&ˆÐí\¡;EBW‰9iy½ÆSÎ+•á([Mos[&±ŽÅ´øöºxÒ6=#ܾgw»]âv“Äí¯ç‹%®©W%õÛ`•Û®Õ+ÌGâ´ðá˵ÂË)â ÄD§»?Bœž‰qz÷iï–HT\’Ù›¢|Â"‚Ç÷I§±ÎL:y°Þß7¾~Ìî¿._SöÞ®“PùÞ.–€‰ßû‹%îyP¿ã¦Þä»É!Ì)ÑEÜß qã´žFR$Í͸öˆÛíñ!n³üþCÕ©ÛÒœ>»*TŒ‰Po™ãcÜÜ.-Âx »-Û:%sˆÙDÙÒO#ÞœƒK†F.¤"ÀÞ3;SÁãÉÙ«iŸ-Øêû‡±þ)Èç®0ÒÙÄ#åٱ͹̖=?sR´ »Ä('ó8²mc†L¹è"—žšÕl,Ú[äM…±¥ÐïÂ%ß)–7˜¾~]e\¦z¬î 4M£p®ÕÜ£ŽßÖw7TÁÓÏø«©¡5;èúÉi‘WΩßmŒÏ6ÞYdÒðþk ½îCÒ6²æ»“>¶>xªVäV˜§_´Šßf «Å»?›qð¤£ïþlÆ-ÞýQÆÁ£Sߺ?Â8˜»ü¦ÐýƘï Ý7 ±XM:¯|r£…Ô4ª_8šU#¹Q®%0E+œë]v‹^q}¢, Öµµ²·Ñ³„•Jä‚Azè¦Òãm;ÃõÅÊU‹t1•‘Ρ󦞚oLãÓ€yyD7'ŽPÓ×àÃG$ Q³îvdÈåÇÑ)ãMHÓƒL´ã,w k× _5`NC6ojiÐÅ3¶Þ¼˜Ûžåúd^_ÐÏg1˜w ¥ŠÇR*¯ûQÕÞµ$[·ÕGX îÇ@Ng[‘¤½Û®Û ›Înµ¶ô\¥¾°»”LtÑÆÈÒñÍe^$ ã¸&ÇÉLœy2­ò<ïÊʋَ;A®Sk)lŽlº†]n§ëz{¬ºÈæfÉ?ƒ)'¶štP&ïÿÏk¾+è³£xÑ0M†&Ân;`Â%ÍU÷YËŒIðC1ܰº}ö9W£Á6m­]”|̲vs“Ë;8ÎÕw6ÍØÎuí·;9 @ÉMy§ëDËO”ƒË€ MÁªwñ]F#>±[e‹DaÂ-¦’N°e½ðÚ;1ÆœÔÛ 1}m2ˆÃ=dkr=`ƒi{Ü™Î$)S;;\lV@š‡X!â­xеSsv9#”k¸8ÝÈøýÝ8 Š><ÔäÇqÖ=NÍ[MôFMÅx?Q±µ™ô,³êäMÍ Y¬›Ë™Š+åY±lÑ€K‡xË@™;@±]×ÄÉ^=„ú³î83´s0E %r¦rÉà)X'ºœÃÄrÌO÷›™÷ëÍÔpáÀË%åN!€iˆe5âòεä:7˜=!Aöe·-g¼¶ ™V}`*¸ù¾²ïFÂõ[ƒ—6#Œ/ÿlFBIÓàåŸÍH¸T=òò÷mï7Šï¹ ?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0ÿ§a*½Å÷ê‰ÎoÃë¥=Õíþs™öóóóóR¸Wñ;õœeÓ±…'»èWõËÆWÅ _o|Ñ/™ÌßÍ®4ì¬à{]ËÿëLûùùùy-œ‹¡e£4`èþ@Hž²æ¯Ì™³W 9»¾âð+üd~å…n—SâræÖ >©ZÎ;ã…6,Œxì3ó_îëÖ|Ž\qŒüÓ*=ºnuãɹùùùù[Á¸uexV~Mê ó· Ãý#‹nXì³zĪGû^«§Cn¿M3(¸íz½Ï62¦ã³—z+† Í!à?ÜŸ7åŸéÞÖP‚U™Õ'ƒ.“q@-Àè¶k»fã\”=˜!j¯C!÷èØ=%‡¾÷ó‚ŸÂAˆ—‚ô mñÛMç-ÝUŠúáÅ®­oL%ùžÐßFÊ~`~`þÀ,eJZÃï†>kIH…Ú&Ðp×·êÓzþØÖ¶€§·D?­ZMRÁ@™M5£VömåÛnÐXÆ00}6’ݤÃë?øÎÛ{\ÇÀ”û:ó`éòÚK(|«äã#4Ù÷òoháqeeÉÄbÈ¥Þ QŽ»„à¡Ò'VØŠìíYo ©V&üÔÃvà ²µiVB >nЏ"Gjȶ M{ÿÓivâb¥«ø?Kh`~`þïÁ̧ú…)Òk•Þé½R…âšÛMÄC4¾€!Âñ•ÓìƒfÉ2œ Ò;’¹DÆÑ¦?œI6Ú~‹]\$ñ¾âQêGeËÛj“™Îl‡¦°P‡Wwi{¨”n¿þø«†å-ƒ ½áÇ‚˜79‹ŠÔ…o è-ÕwÂ7ã™z-'»ƒÌÆæÜ(­UWòãíÒLJÃm¨i:Þ;g×€,ý8Ñ};•åS4TAç%ˆ•x¿è­õ¤/â a$™Uµœýˆé:¯+ô‡Vª£«¦GÿTÙÿùÑ*\åi?á#Ý›Ïê³æ1>ñC2žÉ|Z5žŽâ½Á‡¸ãBöwuÒÊ> rÆbÌûQ»lcÖ—€¾ëšï¼9+ÒO:ÅþøáW5úš Ö‹)ž!Úí1Ú^&ƒ´&ÐܘwÎe4÷¡x Ì{žãñà}æÈÃNcÔGrÜÎ¥ ³½[3Ê w%ÚÝÐI³¶Ò $31¦-¹ççÖV?oÍHDìã³Ê þ¤Ñ•QÇåšùƒ>únÐ)–Z>»3”H†¨¤Po~!tÄqa×U|#˶eûkÈöÌŒfAŒåH-àøfÆ^r‡jèеfi¦åg¦Y3½«“NÌz{§âÝ鎵wôˆQR®æ­Š™ñ¿Å¬ˆG7pÍ|§J¬ø¦çËc,ªúmÜtšt()\‡vDçÌjãÂÊkÉŠ©¡+§¼|x©R©Åà;Ê´¸”_ià'åýeéöfúÜÉ€0Q-jRë¹rM) ?:ј*«ØBBÈ3/íËQ×g5méh WŠ…„ðVMÐøºDË`޹^‚x“ºÅñ\7[ źç5½Ãý÷W˜*Ly6(–ù™L”≷õú±u2£‡šÏ’vìïaˆB¦Ë›GP϶¾7äˆBlíbŽŠÃôiºÊ—œ{C$¯Dv%œÅ N³Å±&–¥¶NÜÛ ¦¸NÞ0° <‡‡^mF±2ƒ6Ã’ôé_é[&Jï g–íkŒ²÷¡šÊÊÒ^–{O”Ͻ}¨™Í“x±È4tÀöh }MT¸J;{3ëgh^6ý’åEâ#h¥õRiû:ä‚> ô ,J±TPcXÕ¢¿+ÈŒ'¹·š¤cµkgðçuó®pû䨯ǚƒ‰sqÚûãÃ_Q ~`þ~0L‚ŒÍ=mÛsNî®pŒVðú'6»D¹PxS•˜ÖÌeÆ uyò.°$Rñ%éÀÅŠÜ’H/°!Uùh( ­Ó/kÑÊj=‹âŠ45GΚ¾«§5Û²êe7™Ð 'DÃ…W_%g¨+¶#Ó«hñ¸$»Tû`£_áñ)¼©ÚŸVx:Þ]ÛR£ØËazç¨XT¼ª†A· WïêÙwS “Ũs~¼ñ¬ôá–âÙá¡9¡%@NR» F6‘ˆ©Ã}ãÕ!dAT,Þgžn^3eWÅÂ1Z Øunuб»õ§Çþ®õóÿ3 QïePc4èÞ] ˜º\ÜÊFúSu ÃýwÇ ‰jN·¬ÏA†_xNÎÀ*q•7õ=º>—…æi¢xLº£ÿM¯ó®ñÒ¬š&üd±û™ŽÞšëC…³'‹/)DÛ2d¸xM†å«u,Öçg]ÕHçÐ#‚šž•©çmP˜úÊöæ@êå`ºûÔÞ©žþ|èE Åvö˜’Z(4çæK ‚ùP^6ÂM¡¦åâ15gý×!M•¶KÇ%¢pHW7Íj°Y›R°-u¼¦þ %å‚99 ºkÌ„”•Œ4ºˆN·ó‹oN%ùì¸i†#>³÷iB÷/¥A?0& 1øû¯ÞÆ­pã8–Ì91Ö®û³ŸÁ´ÊÌ„@b5Œi…™Ø:‡ù(ÇhøD…µÎ\Þ‹õhõFòúSÿ`ˆ…ÜŽÏß]¡DìFmyUÚ»\YµëÙ9¾„qAÉ£H}ܳ#ÙבôÌz‰Q“ÿ™NÙ´CÕ4¯¾óùÃèá’F׳äåTñ4›N>+Œz¶ü,Œ¦ãˉ(‚Ÿ½Ýëõ$‡c%Eìô’ºRš}ÀC={ ÝÕð©ÁÎö%rV«³5ÿi\0eQ¬£ÍŠÖŸs/A¯1¨è5Zx5„ÇÈ´:Ç«I)ÙPHWc‚ËøfZâÏìõm©Ùs‘ÅÔgû2sÒZœ-2¯½aÑõ ‹SX§E4RÏÖ÷@ò„ŽÒ}ósptf³ßB?;Vk òJ¨w7áãë ¶lã™TÓ?b2²b±?ó|é_Cÿ0LkñH\E~¨¡œÕëM¤cgfk1Ä>µCgO]NÑÔ䙦¡šÝœ½œgOEx­)ê0ïŸö˜<ê=zîç:‘W}Ioxrq%[ _yL‚ãn…&Eê믬ϖ\‘ö»Ü5=’gÖ8³CT+ôá? WÏ´‹·€˜&éç3‹.Ê«úœKiT²]¶á^-X•è¸)Ä?VذhÉÕùŒübÖ«ð”ëâÙ:j&ý*]rN1ÉCWóu߬ó~|èö‰m+BT0Í»˜ª8µC³dÀÓÚŠåçdõßCÁ~`~» :ƒx0Îæv1á3—z"áu( öpö¤ÔƒóЃÖ ¢1˜yVuÕ Ö—³ÇçÓpP8§h\|Øh*šÚŽ!ªôŒh]c Hs›8«ø«®åÝ0ûáãèÈ£uÅ ç,,b¬õž·8 s¡º:óËñÇnz>ÃŒàZ,¯lëoTîWÑïôšˆ›WDÿ:;¥.<5ó±&2Ò£gCL}Æ…{s6ô2ô²{OXçjfØ$k¼]â§Ïì{Þ¢» ,[Y+SË8õ/97í‚gÆB½Ш®äG{qÆ àm¢\Ff#ÙQ×~ÐSî¸7=üð½[”ÿÆŠö󦨓ÜjDy-+#žõr|pëõ1Ô=sªá:xÇ–ªÌŸ cÖ”j/»…¥’×@ð“÷i¯:sÉÎ"(ý²A¢ëWKgµ=N’_yuþn çôŒ†Ê÷Ë,™:/å/—܆}ììLObï1ß+Ù^„ˆÏûh‰at¨î››Ò¤»maûyoJ÷š1-ç`VGóP<»h?”ígø"îs[+Ò«I³Èëmåý’øz“æOñ} . –cz9så䫵WÞ'ÅÂCI›£qˆ¥<ÂéM~Ðdã m¤ì›,æÏn0û«iÆÌ_f58„þô8ÇšíÓ©,õ¡iÝ%çZ”ÆcÁšl!ön¾`² ^l­ózDˆ®g"£+3Æwn€nÞV>-þòjEá.;µyÜ"Ts˜BÏyY¸È›Îö` 5ØÜvÛ¾n»ã¢¶µ"0S¶¼x2èê%jχúgKªñ‚XªyY­³¾ë9A§fŽ@[ÝØþòÙ QoئžléJÚ‰g`~:‡øðÓvpè‚‘Ë Uñý4^‚FŸ=4y‰¦•ÂZ_ºý¤Î1ÍLűéé×TÖàý}8oùùëÂ,‡ÃM¤´íô)g¶{„jc×ÑÞK¢ÜÔ e Ogs¼%sk6"]È$óð’v"|ª)zÝÚu×ÉÒõ„òz÷s~¢œÈ»{>¸zX¯ƒë#2ÿΚº–Õ„¶MÀ]çGZ&!ë%øÎ»8Ž65ZWo}õB*>è(}h]x’­ÈFå„˹;`u”}í«‘pñeo tydÖY…{4é.l5OÙ¬j1×Ð̲ðHDÐŒÉz²ÕÈR)}õ”ª ½Ó´´ûŠïïúúË‹õÌ?F¨6—ã‚£`&µ£‰ÛàzæïÍöçËœ7ò µˆ·1¤¼©]Æíh{z1Û yº˜’ˆë²³ñ`3GpÎb½šB2®m3“r¸÷â™{ÏñÞÔœ‹yα †éË’g¯¨W%Ny\ñÇ0ú¼×^÷Š{õ5côùø9“êDξŸÆ‘<éòFÙõœ©/J«‹Gd /q¤cáP-®nZÒ ;PÍÔ‡ill¾»aF”v`^K9Š6›ée°û’ƒ?O««)¤ }Œß¹ðùŸ!ò?0ÿËav~®ÍuvÖ¼‘¨–˜g%_:)—òË본sØñÒØDGÅש­%4ŽêЕÏEÊÑMáaó½èꨶ$ïÝ[ç-Õ<¥º†ýóɧÝ`ÄŸ÷ uo[•Rgo ¾ öâ's£4(m>Ûs߇ÛHÇyñ¦tá™´;e°œcI—°ð¦Idq׫E¾ ®åð.Wï9—lÖ½ÍÆWñ…½‘™Ô+h´[šs=µÕììœ “¦¢4¢BÚ±¡§Ôc˜}³J¹]ùéLÈ« zÛæUYyýùùSaö~&<~}Å•ô±JsŒÀ¤Óá®3Ö4uÊâ°Á&â§Cç1oD |1žªáU´ê³L×õ¡ig”sÒªz+ævoœ¾°#@éoì µv›¥Ó[SØ´cSÂD· ©òÙÓˆOå|UWx{~ 0<”$ƽ¹’Ç<1Ow"íá`©ù"Ù¼oÓ'?ô«H‰fÝ7wzJmÉPG Í/ÈEeH òïnQµ"®.ǹ^âÝÝ[ÿ Ùýùù? cvÄgÅá—ysg>²t‚»™·L¾œ9§‘=´’QÎu²nœ ¶å>ìD¯¯â—¦ËÉÅoÏÛænt~_CõÖÌÌË™rœŽÎ1îëê¡oÌxÌòÌ"Ø÷œðÜ8B×Ðgj›EÒ¹7gb=ÅqϮ4î!%¸emªis•ÓíQâà~Îxn6tÍòap¬öÞ(®7ãÏ=¼ ãÃd9nt}–ÞfÅ¿ŸÄ*IŽvxÓÿÚ•3ÿB÷óóÏ‚!JÃè(oo5ËlÃ’jò­V>ä׺¹Àäë{0ØN¶Þ49‹º‹z*ì_o±‘te¤¥E—_ï(³‘·GõÑU¿¤˜;}…yšôÎwÆelZL(£0­‡VÆé×0½Jôâ3¹6W^ÜÉx½è׺ô`³‰å’@‹²Ü&¯§µo¨ó”ssK³:†Ãé 5Ȇ’ï=Àº±íêÕÒÕÞó½ZSXAÞ}Ÿä-?0?0ÿ8˜Ò휶±ÙUxóy”gAÐQg!ØëiÛÆ¼¯œñ¡oÈÀ7¸ ·¥~Ù rù«¿ž,ï*2šœ†«/ΕíŸV¶“Ço¿Ù ÇotÂñØ ÇW¼ÿv'(²¿<—{ç¥:I3_ñn$¯³ã¿¿Ùq(ßï}îã÷ºo?Ww}I~¼—w'y=ü÷·'é?ŸsÞþ"õ_uȮա/~~¿ÉOú‰Ÿô§¡^†K‘î/ć~Ÿ¯ÕúY¨ËËåæ¿¿´ öß° ô³6|ažæâ«®PÏcùœ½ôoè1ýlL¾0¿1LŠnÖÿ’÷ÇoÖ~bÊçct[À±ã7H?3ð“Eh¸9­¿×eÇóI†þJ«^làw”þÖBÿ¶¡^ŒÈW-¿ivè'}%¸÷“ú•A{‘®ïØcú›ê¾#4éþŠøoM«ýÉX~³ëögC–îO€ÖÿÒ’Ñ÷–ìóÛc¨ßs¾ofOkÏuÀü¿ûë/GKýv›þ怜©¯äó¹òwD‚þ½ê©~9ý+¾^üJÍÇ_Ðÿ¦?Ž5ãËåélÇq³ÿ%Èãþiyl6—׳áf$kq{¸Y.e…jæÆk·Kƒ! [Ô¯ñü"¯åý¯}ÿp”÷ÖÆlÐ_ö×ÃÏ$Ž*'HÝÜ^>ÈûÉw]G³#èßßö³%ø[>\¹´¦æB*ºïÿ[Øü÷úÐ_m—rA>l–'8’‹£F}Ö8½Yo†Óýf%BBËL_ð›Õ¶œ)=þÌ„Â0 Ö/äÔÈh°ž\âóÙ¹´-È ûßÍýé芧ÁA>J›õ±ú¸¹çÈ«4²qï¯ìé¸=”Y}ÀFë_/üx3±÷r1\ζ¿†ÈÎÿùµýÞ¬Ÿ·VF¨âƒÇÀžCQ8ØÜf9ûÜQ¿Œ˜[ÊòˆÛ›Õç“qž¼åfÏõ÷—®9?4(+7)‰¯€µf›]¦Âîb¾R0çrqöñY¤w©.¨ÊƒÊLþïß“•ƒüf µi³Žƒ…ì8Ï®.„¦W~AÍŽÇP^€:°ûãoö‹”<>Þ~ÎG¨ @«59[¾1ÈÒ~¶J÷÷‹ïH† €uPòA°fZÍN«;)ýÂÖ]Y¬ +x®£cæó5õÒ‘óX¡«rxîÌï1·0›L?õv„ún*Þðô^ÿ6§#°/ò¯£ü?Ÿ¹j—Aýõ¨¿Ý\m ‘–Ó¯ìÃgö¯\Ú­üé¸,ìp¿ô©þ¿å«¢~¥iÚ²¨$¼.Úm?ãÞÙRÅ×C°˜=ËÄ×3{/ŸEöž¬Èg«ìãÒøõhÔFP€úG¹4=­ëþlya:Vš‚ùÕß±šÊ¿Fªgñ 5\·¿þ{*¯úÿ‚×_ÿº÷B”œbÿfG›ü ý“Žä/°(B’ |$öïÍé׸¿€”ɪ{ @«ä&ýÙú×ìˆøÀ®M×€¹¿ŽHb(ÿšaåþ¯e<;þbfI•àÃi8…Ý‹¯™™MÖ72*ÚÌß ôn3¾ÁÏ¿NëÅp—üže¤‡ûÙöNO~ˤ¿,Š× ÕîúLÄ.F¶*ÿ–¹)m¶‘´¿ñ5DìeQüLОWü©çD}Ö2 ŒïWqÍ“™vg}ØÙ½EºŸ!¨&xæßb‚2’O¸ð{ëÂõŸ 8ƒßX;µ,â#Ÿ¯o®Õ7üÀË:ôs³ø¦CÿÄÍï./çEH…¼‡œ)=³ï[€¹Š¯Ç›ÿD'¯nÖï5¾óe¾v:®Qœ=öÓÄËgAÍ7ÿïïZTP]%þ.^BE·÷’Wö“›Á¯¬bê¿îÖ*7»„­l‘Ç=.A†ÌRž:ÃYcTƒ&¿F$Ƭ•‹ì£«©o²FB`&~Ö'z¦Ô)GCigØ—j™Ò‘ýiè–D{Úc N”¢Â\˜”>âï–H€Ø"‡¤Ý`"þ²¿ÔJ¹I,ŸŠœr‘ŸCC$M“¬Ô¨Ý‚dð¹Ñ£0osΆ•`W›ÔS<Ä 'Ipê«Ü|iªaL%šÔônïØ]É7[l‰'+ïQïëùÚ‘ÀBjG|r… „á$aÑÑÀ(ü’z@…q»êæ–‘eÍ7æ¦G~ênÐé…!ÚEaSU%:}à;“ÎüeÜ ñQᬞ¹ž-ZѵډZt0Þ9†Å¡+ñSg×` #ÎeˆáMe‰—O–P%NýÃaÿšáâ85U¡iÊÖwïgúžoÖIŒ¸¥!l²îñÖ‰M;8sÄŸ˜: 㯴#ìzhZáÁ´ßæ^µ‚3·Ûv;Øý0Nã }%9‡ àœÛ$»«jä›ñ¶>˜d:Ĭ„Ì-ݹ•:†zÊáã´*^×ÎM¼É !7¿éàʨé³жB7´6€!… §¥ÉT™ü²*Ä-ÌŒõ, •QŠ¢ÛhZ°õF Á{ÃÀ…ŠRÀP]Ü©üIó_ª˜Tëó„ØS©Ùëö8à…‡B"a“à™P5ðæ™Ž2›×zYÎuµ¸Äµ í[h,X€µd§ò› á„®Ân`ÂN¦Á̇lI˜ãÂØ–܉ý¾IÏ1ƒr>º!¶4Ùœ~˜fKvÖÝ®£ Ñ¨!ÖzáÓ•Kªð>Hkgq£æY’ûØeÒêa\G Kݾ¡þª:K2€»4^᜵„Ùï§e§/] +³äqÍö ˜A soç™›C¿gý…UêäBRÆO˜$,iŽJ¸| ˆR3•Pˆl"þÒQÇ–ÇÓ+7ŸfóŽõ—Ù¯íø<ÄâÜ‘3ö™U§‚W–0ãÖÌO™BCP‹ ï÷%ç‚þkOTŽ\Ù‘Š²Ý­È\ÀÚ“ Ê&I!>w÷ÏV@UOq·J²Ù—–øqÂCÑÉÁHâG«ºbI5æ!Ê-™`õFœ9¦‚ .VBƒO0 rVˆ. 2ÀÊ ±qPc_uóÚßçzCðqŒnu¯÷;3O<ñÇ›1?;ÌÅtZ›9»ÇnãòË>ã ètÁ …,ÄuÒ6ÍžR–è±;Z±Å^B°Íœ:Q%06Ŷ”ÞL"•R¼/‰ž<¼ËÄ—Æíw4à<¸.KMA’ºfdznNõ(q|&Åjˆz8ʺ;È¥B'÷­ž8°5õlŽ7Õ.B3 `K}_ÁºLtVcK%#q·ÑÔà$šÖ¹æunV¸X©Å. ŒÅ(ŒY‡|·\ŸB8W§Bboé½6'ÚL•Lº…qiÏ s­5DNJjEðé,f““Ä›c é£¨’­ ß=…£ñ±ò‹„y³h%ÆNK±«ÁÂ}¶½ˆ¸ í‘Èr$ ^„T2‰½üå†Oùü-òð›ÄAÓyßH­zmÉó×–Ê_9¥Ñµùµžt-x X—*n¯ #‰XJ­;B ŒðJãÖý[‹ péŽÚ'^¡r†á®# ]»U¼ü¦Rã¯09 .±ïP wÎLƒ$ùðC󬄿o4ØkåÈ•‘ù&¨,Í\©°w£¹Ÿ­Ïæ÷û“ñ4g˜ÛdD¯ü⯿…®¬zäˆ:®Û?¹ë€¥§Nœa®ú4šoL‹ÒVýKzD½û§ £-_ËFêa\7yy‘\æ-¿Tžs¹uñ_Õ“—îúe¤—Fê_WOÝ‘žD;ôˆªÐ‹œçæÆéujUöñ×^Š”¶Ê¨¬‡Í‚WÝPeSº•î·ÙýM¡Q¸:Ãä®®³רxiù£"Úì½ðWôìõ¯âu J÷3ªžNêBxLų‘ýÑP`‹'ƒîqýØ7ÿ€1•¸‚î ð޶éÆÀP qÇCËo†<¿9·kñÌu}Ð^}$9Æ8sþÎS)%Nøýx_~Ì 8’.í0êÞ‹ 6î½kx¤¬FJ€£E¬ãÀÃ(4R1aÐØ£eª- ®†ý Æío¤$Ö±•…¶FÙd½¸~xÚo1û|¬ XÝ:!£®‡  ÐïzrnAèxÏn0d‹˜z낃x¥´csqsK€@Uƒ€#+Þ4€Qû#.×a]àT¯ó¸%óx¸Òß]Ü\Oÿ¸¹Š×yöt!µ"ðI²üQlŒ {/TϺÛ^@þCÏ]¹:ïWAUwöuéXK诣Uèð.$‘Áb‘ñÚ)zc¤ÜSTlaËÕmz<RæL-ÅpR@l‘W†ü<ûnôI¹Œ»Ü–“Â8(Úf¹&wV8p‡]×ü<¦üV@YÃHú,eÃ✮xŒ ð­¿'aã$ÉRRÃnÖwOðžUÂÄj«R’wì6l²ZÓ5Âáhîæáó˜ã®' 6XA¾êyá<# K«AëM¼ 9É+Æ&=Â¥^7ä¸T}¡ÑUÆLš’9·ô+j|Ëøv+öD÷nÜbse;³TSy†*±èÇì=¿%ŸR¾ÑjIÓI'#ö™~•ܲ®1Ï¹Š€†QKC8Ë££9´àÞ)#^UQ½­ÄNv`Ʊúà*óJ$Mï}Œ Ÿe?ö÷˜u…§Æ^>~Î2œê6»åbœóÄQ4Q>\•·M#Úì°^Òz}Pº¯¡žÛ]²ÈT"¦ó†“¸à›ºh˜OÓ@ÿ³¡•eME?KæsBÆÞX ü´…øðP´Û} N&¹E×ã¡Üø¦Š>8 na"·æš$± 2’ÏpK™£ùÒ4ËåJ?eÅábgTfÄ;ß{%©3M›{Í«qegXãÙV׈’^[ºÐb!eÇCvðUnXúRuîРöM5ŽY!ÌeUüB“½Ki3þŽß÷äâC˜k6€ŽòÉå3É\lY¹×87ã§Mh<“î½Ò=ænjŒ‡êmËen({h·¦`‚Dvá¡|™KÓ‰õ ¶’ŽU( %Î×…1‰¸T–ûoF×Kô%úR5§!&C¬ ¶œöDZ=Ö2±%>[ÈÂÈñe³Ûv“>5 kŒj0tnŠÄ&}b½¶¥åFêœ6„!>–]—”dJÃÚ ×  ˆí·õü\•Û)):zB2¹ñó½ç>“âC<~+ÑgÿàŒOð“©dn¦óýÛ†8°Qèr l™/3ñÏÄAɸ{to5³V2ê‹R5¤nŽ=Â$÷@»ûÃÌ¡W3¦1@OtqKw‡úæõ¨ëÀ"{«÷Äæ-˜³úäíªö É\ÏSE®Rx0™ £•—¸Aƒb”4‰5V:œÏLSÛTîô.4ä»§`£PÏQ'²ãh?°LT´"$ó<¸k=( jÈ7f“É·µ`•8³³ùí/U–EƒÔ]¥Ì5-q6º„d)zs†¹9$RóKæöll^e‰ŸéôÌY}"è·%žä¼Åa›F*ã2§y{ï6žIÁ¹‰¶Ýf늵ãîëyö=3®/v${™Íû«†;ù<‘^LHrpgœ!£†h«Ë®£å¾ˆÒØÔÙOkžeE¼Ó»ê,¤ÙB)²»wËÏ}³¿6eaÝ-?ñUw3wÕáÙ»y<»k±ã\fúÐì:fÙIix¸™PqœéÂú×SùgëATÂqm)aPè„<‰0=ÌryƱ®‰ÒÕÍ :ØR%¼ˆBÛ [¶%âÀäz[¥Öó.ŽìÕ2AnÆP‰gÛPX»0Ÿ&äÒöW"²±–b@yüÓgõx;Öë†Â=•¦Ð‚0Ñ•ìMo,t²ÄO]Çœ`ëm-Üü¸šÝ¯`Á(DÜÂŒï=wPX·]®©èÇ[Ç “½“7—h´ïÆ M²Ã0\17v_Sñ)Åü²Åcs&Œ±¥Çµ÷W•í¿ÜÉM5„J\ÑâÀüXŒÏy-Їˇ݋ý^»ŸÕaä$LÐVÄ&ØP2æK…«'ðËeûPH¤Ë5`XcV ÚÍ(dÚƒ&ù”ô­êz k™1èyô¼ÎZOHv±“´…qiMÞè”°€‚uÁ—8ïŸ@âf-/ñ  Öó²ÙÍpë͸º 0-ëpBÅëö&J9W½#ð×ôêwAè‚u-[X§q0î5a@-'æÍ‚µ…Ê‹ÃjÄó¬lÔh0‚¥ÜSMkÁ`tRÚ'Șzãjœ²ïi„ÊN‘u…Ç) KF½w¡Õ'*{–þ+Ìg pÍÛ7d~ {” “ûM/+²¸V¶·â`âqèÙ¸¥ ::hlrùF8K\ú~ô²+à1TõçH㼩Ù`‹ƒíXÝS²åòC‹»´FØ.ù Ý5ý³ƒW—R廲L•`î]/v·£±Â ûBí| …–÷¨Œn­tžù]¼‰mwWõ¼Äg˜ª#ÐwûóÙpÊöWËïÚ ñÕì ñ2·]\2R/mð¾_ê³¾LBòéQ å3|…~ë@x¼ÛPlbÖ/ꕌÕ6Ð긎[áFm½¹ ç™˜Ú™û}s#a¨l/k¬”à^‘f_w4ÙRÉ¿e9.+Ÿó“s,MŠ»ý°„-Б4±"ÎGüíòRñŽ(‡3ŸO)k-I\nŽÁS7h§âuþ†©v¶tËjs5H¥-·\m<ÑXË!º&gălÖÔ­Œ{£=¶€ìÞøeï°rÞŽfeÜWl FæuÐñBë2T6ò‰í‚底Õý#¸=t77y° ¥%è¥%\/ÁYý~ß#ãý?èÖËxÌ ùÄ9æ”/Ô€‹\&.šš=¸èr-sÎÅhä—úFñ»Í¯:"½-T TÆ™š<-:7?í<ŒFÃ’j¿GG#@Ô{ni¥KÑzwÛ{4gKv5b×Vµ[眲¬1;Ú…›•7_¬õ&)$jÅÈCJ1×p—z" N­ÚYüâ0o>ä5•*1›$œX¸·9WXo¸T¨rM =ˆX|)‹N1gžÂ‰Oƒ¿Âzà‰­Ï¾Ë#IE)…d¢½SÌäÍ<ž‰Î:¼’~9_ô¸ ^*ìGùö%9¨2Aaâàc·èZa3¦0ñLÞâQvtÍë2Y5%¾)±UaâbtÞEdžŠ¸u«êE‰ÈÜ¿NÐåàG^'ërÓ߯næ‚Mœ$ÑSˆÝ[h&†l6ë+q¦b:¡%õ£S¤ÂnØ1ó\9‡2•‹ôE ž’~Í܈ß*Ã=éÉZÁ°~.uClf›¢ZÙo@˜cw°€NlÏÙß{¸)ðQ+åv%Ðå—õæŽÛ“ߟÖóBÖF$æN’yjð¸ÃÁXˆŒ$kªçC*ž;ì&qxÒÍ|r]]Y໸ÕeóÜO‰ñäl5 »ÿí/£0Äñ_BÖö>åÀ Xæ›À°ì¸»D¹ýtDÁ2,êÅ΂ž'™iÝ­ íI›ºöΤP ðÞú ÛvMˆ©b‚­V²©Ô³fu.È’{kš¢ôíÀ”dŒ¦¶8‹"S»w¤í‚¾é£d$t!¼…®zì YÌ\€ ªá‘1Z‹Gc<=¼¶óàÜÔ$áØÐ³… ˆ<X»§w<^ápäîîöìvÞZ=»GÎ7ƒZïîÕ»wý/™ù¡s÷vÅõèrwU~¥é.'Ofë’ü?ÇËÃÿú”#†÷?iŸÄC.aœ^ˆ‹åŸ!oL?¿=pp‡Èýª¡œ„QÂ…»f±®Ìï÷¡à@¬rr!b.±-Ɔ9É‹vS|;aƒ&=2.9MƒmÇÓÖ·Ó`Î;=LÅ l” OÛ¼Ïï—Žœ0öF1´ì;Y]ŸÚñ`™"˜µoF¬ o!ì’ˆXm&7‚É"€AÌ™ú1È´!¦ó‚70 1¹e ÖÍÀ;:ÎÐöCúwGÈ„†´†§™”‘²1¦—ñ×3KÔuŒ†üdzù'д-[àhÀøX„Hר?m ÁKl3‰HÒ{yb*ü’´´i8+â¾Õ Àøê%)ȇ` îõƒÙ ¹“ZàhÀ´$á´á/éHyÁÁ­áŒÆÚš[ÐéÄêÜé~;ÿÕK„•Ѷƒkþ*n_ª€þ¼¤EZ—옷®M+cÈÞºµo&í9á¡(b¼ñÐõDU? MWt Úօ˨S‡ýÞhìÛþ\–²9‹˜êÛ7`Иn9kÓ¡‰Úžp±·¨Œ}nC´P ì;6¼ª¿ f83ZÞ.SZ¨´ÃpïPc¡¼{]QPaª÷y¸Ns ÷³i-Ôý©çÃ,†ÒÓB¥$*ÐB0˜AõÿØ«Ídg½EI%.¯9V´õ²³tA5ŠnR ªbÓž‡Ë ¦DÊ™~7µå}khO@Tóë¼êªƒëhÍœ›ª’}Q¦Ö§‡›3™ž¦ÖYrG— *P¨øˆÚÞ·+ƒÂT_×UMlêÜÜ«¨k)óÕmMÚ¨ļ?øðÃ*„QsîÎEŒ_P¦P~ƒêššMœÕFušÛxÀ¿RNÌh W'õ]èŽ9¥µP))™çÞ 2¨Áåq…ŸP˜³@u)iS*i£FõAcJž–5Q£yOå‡cF+Bª§!°ØZHLÖ™¦¡0Ùò‚ë®\;Ë–¨îí3j*žiŸQëVLA½,ÒÊpÝ.’lh£:•ZåÝÚ¨qÝÉ“ª=š¨Ù¥ î'àj’Üm‰7¨Mœ*¦v'mÔ¤£“’¤0rC…‡toÀ¥ø,þµ˜fJ½w¨U¡:^mÔ”†Þ¥Q×â×n¥<¼E­`rwû5MU­a¾Fqñjijç5QD©óu®+¥¸7¨-¬Rí~×n¦<[ø BµÓ©uߢnä06¹¡*ËÚ=pšê‰)AU*ÓºÚ1×BÝï3VôŒ:p˜Ÿ”Âx-¢CîëŽÑG åÛŸ<Q‰ÔlÛuÄZ ÷O¨¸oS'Ψ /t ž€ ã¦N]Þí\Ž?®<JÌ4£ÕúºÊf¬úµÃŸ¨üñ Î(ÎI8Œ‰Ä“]4ð³…rè}|òÑ.ÊxГiBTÛ+*cÐë±@M JZä±sÙéÕ—'ŸÆ:ßÅ…Š.§RnÅ|ºQVYàYåø'—Ã~\!vßz U<=ÇhµÕ~ê4å ¹äwO÷@"Ò³óB Q¡ž£Ä@VTŸ¾ø •Š8ìÊÓ×U¦¦R…°óöôY ,•%™wÍy*T=Tv/h=U˜ælt©"¿8¾iÞ$¨bEÞ=%©R$½{ê¢ÊÈŽ¼0McQ§ö'ÄMªO_­VŒª”‘ úôYÝœÍU™X÷§ÏLk¦¨ªÞ˾kž¡ªŒÈ¿{𣍻­õTeZsNµk Ë›æ-7Õž‰wO½T§ìw¼{¡ºL×{eÚK…îž&-I×›§}Œööìé7O(Í;Ò{¦ Št2¯K¼i>ÜЙ…}öæéÈL×çIã[¦¹:ë’?plh7·rˆÉœÈ(Oí¦{|Ê"d,RŸ>[Aûq‰œ‰ù…ijÞj)ÜÇhب„s›CF5Ejç$ Т2(Œ ZÚ¨Îzó-*àðÊþè§=W‰ Þ¢ÂØ`ôUÖB0gÊäko™¬8oP=1èhtß¡æÔ;c§õç.(©“ø^D@»žÿm=s_ÕÙJ}‹¤ÓœSë©vÞb³G,Ôôƒ©Éßò9Šs§Ú™ oº¡‰2M\‹æ}LNmﵪ‡¯!Â=Óò ¦3n`ù[Öó?á2”ÎjõÞ-?#d¯Ý`x()Un‘ô%YòFË9ðO£á\ôkwÞôSTn ´Ø>Dï|×ãh8Dz`T©^ýÅ8߯äàá=÷9ÛT °b¦âoûa`·®µÞt‹ µ8³”ÖÊ*\?iq]aÚã•âP#8ìܧûŽáï}¾Dy²ùFn³y-ïì³iq¢Â´…gÿ¹åý®ãª´–)ó=oò6ÉÑgû¼L½Îðýêù8É£(Ý×›b‚SµðÂìàWü °/oµs oB»O 'ÊÜ|¿[èÛ>ݦOkŸ¶WÕi\è?õ6ÐoÏáÕÑ»%ᅵƷü¢ä~·ü¹D˜ïS›Ë•ß’¯©‡t÷™ÚãóG†96íjÓ Ã÷ç1mìÃÓž¬Ûï óœ»älŽ¡ÚÞ˜e™«u4MÒïzΓØS´øâ>EÚkv îÐľézÞ©'W[èþõŒÁ”äç’öNkŠQäÐû“©Ïã0Õ¦}Ơ߈ 5Ý+À.ù¥…¾s4Þæ+óz¢näÑ™ïG5ïza®&á°ÅþyO.^çlùÂ<¾ÝÓ‚us¡Ã'+ Vè®lo>ž_º´°*}ºåÁUj&¡/~áMúÃÞ>¬5ÓgÏFË’¼S”yü+_äµOŠéÔìÖýSLA\1ßÈ |ÇÌ㟛­¼À[ÆqÓïØoóûõÃijð¾qóØp¤-Ü\Ù’r\èÿX´¦_hæE=ï"£7¡;Š¢­Ýȯ‡•_¿©ìŸðëIÓ?_=_ùõ¨ì䓲ƒî¬šîx26¿‘ tè}:Ý7’ÿ{WÚÕ¶®E¿¿µô#“„Ø c„¦2(”–yh¡´LýÿO’ –lI–rï-ýrW/+¶¼u†½Ï9$ãf X<®§„‚:1GËÒ É”ìD.¼9¿~sa2e8-£ò¸ÞhîÈ“Ë4§Ÿ=…”@j"d.søKzKáݨÜoeu’Dñ›Öò׳¼Á³Af<3;ȧKØôó€ä¹Ñ¡Pæ"iÖÓn5wÞ8©Ñ:RÈ?òn¶7O¹slðëøCäë„ {ÃÌ4n/9íµÝÁ Óø´ÁšFCÜ´æJZ'”è›ðÖ½¯€[ËL‹B½ØBý[Š^hôå= 6æ¶7Zφ³|Â=Oº¹ÄOckü$HÉÍ-À¥ áÝlÅ7Þ†?.*$ʳãÜ£$ïFùÚÙòîΣªù£¢5Yz ]M'K+òEˆ/¯–…<¾Ú úÊ¢+õ_|V¢]h$/‚ðU(”‹4/TQý:˜aO¹PU7Âvp¦•Fs\M¨—JIOôh?Ȫ' £ÞѾÔü!®Vdv´ŸÊI™BÙ…_¦žAf%SÉé³C›ñwºá"/+§ÛÞ›ÜÜ-t8ÓO7­ä=ºšÙé&°7èjN·×‡†SñúʇRÚ)T˜~*Ÿ4½PÆ1¢Äââ Õ¤áíÛ¯ò\ô"‰ý&Ýö­œF+Q dó]‚K†:²2("IfÕÑU6#›ÊmÃ_¬½d¹êÙÛѡ։inåWSôùÓOÜà„FWË-¨è?I#n’OË6Ú9V0¥|<$_<Ž?u6Ü“¦†²/¤vKRªøBY ¼4»âÖ¬%¹ Ðw˼q¼èß|Ž%Š9íã§t㨢(,Oò‹{ÐÕòzÿäRÄ8Ʋkƒ×Íïæg´ÍÚEÿ f ^%Az™^Ȇ8 _(Wf/ qñ…ü<ö‘Ý´jzZß>6‹^P Æ»ìÑ©cá79ySÒeÁÿ¡²ô4‹Â¨5ù4 2S(<KXJrãK± —œŸ½(9ÁŒº;å¡Mä@£nè¡z8+9¦¤9ïHj¥ ÿc^²CÅ×"v9Ò,U}éè¸ÊYª„#ÓLÉ]GÇi–JEÇæàwû&Í`ó8Ëz_Ú£ ÑÓ4’ö¢«)™š8ÄÆ{#¡ÐÕò¿Ëä¡÷k )»)QúJv ì/_Ó”¾ôkÁ}'!¿–8¡¬%‹eÒv^måLè…ûôŽÙþÖýqxq¶ûå,çK¯åK$SLËù¸ªÎO:·¬:¥ÉH"cVy//Fz–F Zß §»3´â~)Õ*² )V<jY€“eÖ7ÎxTé âBŸGERR ”ê£âŒRdž#2*ÄM)JS’üQ*q)ßÀ«e½£Êw˜¨à£ëo¨›T¸C­¤bòläÁ«bf%ºR•rñ^šJí½=í(èK°‘Î(ãÚ–ÆåÊú’йíØI7ã›…½"\ÆÍ}Ð×—ð‚KTv—&1Q-»ãÒÌF bTv§Âû’„{²ewòˆ@‘­€&Ö—E)Šøj™Ubè_+¥¸¬ÿâ< œdNÝUOèËúïô}PˆŒ£H~­3©&ÅfË”³+"bœ>¡õr(mYWM´Q-%׈üà ›Qé¢gÓ‘úz¤×u7ÅÔÅY¼ìT^ ~˜zËò1”k Og)ïÕëÑR}²@ÑE%’áw’)ï s7Ò"Í:Çtåýöž fT¾‡ Ê{õšÂÌ:GšB.ë™ç8å}\W“óïDy¯~µŒ‚͇&ç>´o³nõ¡5r>46_4¼dtTw«YŽ|¼Ïö¾W³K‰#ØKÊÒÂtwZé^æ5²ÏLCœû™8¿[5ŒEôê[K¹žY|P¼µ†3Íd^cþÕËèã‡ì3¡*V²«öv‰#V„ö&ФÅv™¸•<âªÃ'¢çÉÞiÑr&OâÏ [ÓÉðYu®„ ¸üÂy˜õ¯¯wo¡¨ü…†öT+Á¡\¨' <ؘV^–•…}u?í~-öY? >*!tõ+Nªsî Ö£RËe'ºØ2=•”DÊw ³7ô+ üzòß)Õ@µØO+{#—Ä *ôt›½™{ã²7ø¡ùë™aŸJöæq]š½ÑÁ5›ÅAÃìMBy¿n-{ó¸nCœon¬¨š¡3ìëù³7¸A¦" ëá„”z²H6³V0wöæq-cV $z@Òê î…V’Ö’ŽôÓ†¨4– UÒØy¤óä°iîf(ÕTãFë`’/fMdÕU3@Z*]âÙ$ʽJ6ÊØBHìa‰ŸZÛ3–.Ên©ÏFIæÐ¸‰â†B øŸ¢ìÕùÉ3§Y0³Às²ðgoDºå£âº8Ï\I.®Ìã8eÙžfeHíŸf­2φV¡2OM ›»2/ÒrÅy9îK¨9fvÅ T扉•¶íʼ(¥ÊçÙ®Ìc3·Æ®_Ve ÚÐÆÌre“îæ‹Œ*ó„²H–Ð=ü•ÛÊ {GÝ5—U×–^«Ée±¬×™Ýy]MN éHâG?êõ'¼nê‚Ëì ¥´ßP&‹ñ…X„é}Ñ~B¥s!õþªÑ›&Åczƒc…:ÂIÇxì|™áñØùÒN†*‚Ž@ýpü”·…”/nԥЅg%±`”Pxèj*1eF¡K,•È媣úE+­Žñ…LðÈ]%zr_(=âªÝyð…T*×…^â°9LôÄÉj”•¦—€wˆS^\‚ý85òV »QÔÞ«…3í“Õ"ÙOV‹d?Ù(’ýòl§HÖï¯Ú)’…²P$‹®b¥H]ÈJ‘,ª¤Skt-.£c7 çÓä­`³ÕP<Ï^Bø3{ÚÀczQNBjÕ åÉ2P–‹ò'm«ø6¥(O-×É>4ƒB&Iìi»(Oì X/Ê£äa¤yÍEŽ?Ò59ÅOSÕ‘¡«=§óGC´g“žxFW{Ó*ßOh\ eCf"¨¥‹ ¡JU©ó0:Øk)6±2%$÷µ¸–æzÊYh+=1ýk ·!,HY/î NÆ#Õ7ûªSÕ³¾‘¿¯²¼÷©¯rxú±¯rv½ß7²¿8þ…j<П¶ûªgã^íèa2´Os¿è/å§Ø²»bʽšÇ‰a™¸×Âà/zL,[vW¼Ü{”Ý•¾¤ûõ¯œ²[Ù²»¥‰mɪLm_ìwš^ì×í—¯Úí¾Ç«òaÒê7Tz}M)EÛ]Ø£VåÊîf~lIVÿ6²ðiäIZì7v|œVvwçIWõV¾®¦û =Ô/ep)«v½¦tÕ—×»õ¼*ûõ}˜8Ì)쫤ÝëÚ0·¯·Õ€#Ƨq5ª ü}-úÓÄßmܨü]ÿö\'¸”üéËﳇ!ʘ¢»N¸¨‚ág+EÎÀ‚ônpÙú^ιÝ~äÅù( Ø0Æ…BEW¾ñz¢\T¼7æãõ”Óv;…~;JÚ,]ª4š¬'NÛÁKIbO…ÉzÊwˆú=Ë•÷zw8š‰õ¯•5cEþ˜ôƒÂP=õï´9ö…c •¤µ¹¦ò‘±µÂ¾ÌœÂ>QU£¼·SØ'º9"K°VØ'ªêSá=5 ûD· 15 ûD[,cµ°O›€° Ïba_z3k…} FÚFaŸ¨ª/%ÝmZØ'JÉD+ ûÔTC¹ ûDYzJ5d«°OTÕ½rö‰ÎÙè°±XØ'úNA¢ËjaŸÜ²ZØ'ÚCi‚ؼ°/¹‡‡‰vº ûD—Ò%‹ ûD—’xy û—JèÓ,öÙzh…}™ÍNa_Ê g›…}¢ª>êè´UØ'ªê¢Žcù ûè?Žªú@j½§QaŸèÒÃÆ¼°z_âª>bo¬ö‰ªúd§@ŽÂ>QUÈl›#}":1"H4kdoÉ °Oô0‹Ë„‰F1bó•Qu/ê3¯écÇxJ}¬è’W_©§e~0½jwŠ_zÎÆÚ?QE˜˜^]Ëšê©ö¨Ð¤¼šÆ™–~sÙ{G¢Â˜ì¯•1À/ý;QöÜË׫ú¨xT‹\uÅG•9¦—?lR¾Ö„ÁùÉÆKÁé‡àG ­ó!SRÛ¤’Êã†ÿ™J­4‡ÿ/tÖü?-Õ£ä°Q˜ÿ§pséÃÿˆ–#«¦ÏF‹ðŒùª·$þÇ™õŽfÃÿxJçÿ)ÖBȇÿ¥¼ÐJZGÅáÀ¨·4Zo„ØÞlX«ñxÚÀî8ýÐŒåOðælTm(é;ÒÞRüК»}† Gvãå j†)̬é3VSÖ•óÉ•!ŠFãú²ËãÔDjèMjÁðö¸ª¦b2œFEº–O¦ë¼¹8³R_6ölMj…#kR+Üž ÿ›Ÿy^b½¿¨ÂžK?¨^H­Ð—\ˆJ°à…rÌÀ¥¯á0]8¦p!µ2{ẚyµ/É jßû›b¢Ú÷þ&ƒRÈŨ^MÉER©>»¿á6©ˆœ2fÒ§ùñ§ÒÓäæâ¦ª¶“ì0ú™¢d;Ø¥U¼Ũ,,CΣWBz`u¸ã~ …ð8ü•{¸7DG `ÜÌ_Hµ„"ú.d£À´ øá¦J™3VY*†²kÅ* ³ )Y }²$áÏÌJ(É{~ôŸq}F‘ÈBÊsÿè3MŠÇüsÿ@X…—©sÿ¸â‹ìA{f%MlJ0úÏð¾80JÍZæ…´æþ¥eÕƒ«Y™û¢¹¸²Ñ¹«}£, ›á÷gÔËõ^ªèjJõ¹燓ö†WË=_=ð›ÁüÙATˆ©Ví›Ñ£ _(µï'|È•’ÙÊQ…ÑZö…ä½íT ©è T;©Ú1©¾§ ©bɳ üñAºESÄãÙKz½gf-U¢2M­*Ô§eÕRæ.¥³ÒT¢{þ¡}SÐ$*RæÔà©0’ìHµJ%ö<{Qj¦—VH‚¦s£ªµT*ßI.£Òúu·— îÿLà1rù4źۥ£ëß²WEØ ?ÝH·GsIùx?íòÕZÝ-¼” èV”„T©»½|U†©ôÐôRšSÏÔ{>I€zœjùrììº[ø_ ÚV4PÉóã~  ÷aóõå¥þ6V ®O£:Ã}ôŸ…¾òÕè:*1lã:C¸Ìhcsz0ÞÁaî †ÿbjä^^ý¡¨ìhºþzsš«ÌÃoZ8šnXZøòû|T^Xž­ßÉÇðᑃL>­Vûœ2†oåÞ—®ê­Ün}äV δh4¿~v%[õ:m4ÝÒGjU¶FîuàÛMTV*,Dœ|Œ',r•y%y= |Âsü¾ /ßî´'+DœÜ{¬ŸÊêSjûW^ÇXš+DìVÎ¥«nŠ“ßdõ€£ÜªaaL¼ðfAºêËëÁ|ŸtÕ¾…¯Õ}f_o¦£õo¦©W`jµÔþ|ý(ýSêïN?þÌü»‰çÓÎÑ6ÃHþtü[øö…†•è|YäÜÑ({S|LÓ•ß/¼†9œbã'¯XGV@',s­OK3×Ë([‘$¤dÉ””aŠÂ-éw õËšÂ-yÍ׊°0L³,nI“Àò ðdYO¸%Ý>äÿFYõœjfD}i—ÇeŒxH<*êR€ë–€®–)S¼Cªˆ’D1­ØNMìi_+SŸù*}- Xêwjh#Ò+üFÉìÑUJ]§…Ü4P™ÓÉÝg¿Ç•·tçV¹"ªóåPqÓ‡j˜Ü±CWõ´:âÇ̤ÁLói¨$Qƒÿ–jÕQIbÞ$(ªGL¨T ŸzÝZVTÓIô»ÓlLôĺƒ«ç~’º¬?g½îЇÍÅŠ­Hú²Ñ/úN1îá£,¢^£®àe`àó’öþWÊñEé—ØO›˜zâçêð9Icuy7”öÊ\:Í‚6©?GØ(õºÄŒV z•^—:­äÓóúÓ´ê ®:ó¾I+˜ùžJu‰ìñ¯S[Ê;P×]éàí=|Ièò]-«È,¼©xµÌAB)_ŒKÞ£«eÅ2ê·©RM¤~µ,Tï¡eŽÒzh)•q‰*f©ÛÈ×#öƸ$‘…–¼z¦h”$ŠÝl©$Þ´$1yL‹ë óкƒE^§FI¢äK$êEz’DÕ]J`ôJUëAJ™ô‰èä fI¢j=¢R$-/IL«GÜ>`µƒò’kà /´‹a…Ši»¼Ã q:ãü°0¬0>lÜ+L%$í +”Åž–‡­npÆÃ Art˜‹a…ì sX!ûnÞ¸ôãZß(«b91ð0}ÚaT“{à¡VA™ùÀCö¡ñÓE‚K£‡æÒ^­‡Òob¥«U<ð0ý–@VW+Õ‡éÓ®V¨82­ 'Sl íи”„xh\J’x¨[rÁH{í <¤ð(˜vˆý4Ë©Ó !©TF–Q±-õõ9†ýÂxà¡ì‹5,¸êmÕÒ®ºúÀÃô«!®…‡é=H€ÖœB㈛rnµF¦M;L$ºL2JL;L%VÒKõÙ‡yÊãl•ê‡ó©ÓF»©Ô‡Zµ¸æ¹«pÉ/Ñ+ x!\¢åÐx(½ =SX­¯5ð0½Tdw‰Wx˜ž$ïͦO;™5£‡’§N;¤÷&×ÀÃôèžõ²ü”‡j¹Nö¡ <”ìf8íP1ö”bG©–WW¢¨2ð0ÝcÄñ‡é#a síPÊFé~hL{ûkßQ|ã¼~»õ½·ÞáéÜoïSõ°è}®”¼¯—ýÛÞééÑ­w¶×xóÎGïüCq÷åå¥S{yýòkæå·ÿóðå÷ÙTñµ09Œœ„½7TjZ¨~¿^Ý^Ýš¾]8üúù1#ÃCG;ƒS3?–†v>vׇ¿= õ÷O×¶Š?®†ÖƦ‡·/ï–gG¢ºÄ¾ß•§±­s¼-AÞâÊþþ7xs ¶óKt–P{ƒK^__Qëf_uéxŒNXl.IžWs >ŽßÏÞùìiéåe«Zæî.CßîXé¨<Û(,x+KKÞÊíÕº×ÝÞz|8¸DÅ´}á‚óÏòÜÔÖ‰W[9ëC’»^çpò Ï?ôjÛ7U¡ËAÄL3’,-usÄÑOâm¸¯4»5ÖW­QðrßàòT­¯RZ@Œúñz_y· •o¡ßµúª‹ë¾Ê‡£Õ¾‘çx¯ÏSá«UàÃõ2:Dý‘¶?Óþ~QóÑ}-Ìlö½à ZéÔ?LÁ}|ò+wwóÁ }øŒÃ¯öÐ?Š?Þœ~|ó¼âh ÿ/:!‹á¿îoFà'VKÁ@ÓÛÂsýo9üßf±Šþ·þïæXpôÐà‘ðÖ¹zxžöjãkÞâã¯Í×ÅOŸ¾Âóàm:üªó“%ò úæçÊÔ/.ÛsÑ/ÚUò $NZú|Њ~·V#¿ƒ>ÙÝbô‹m?þÅ)Ü´¡^­;7B~F/ÝmW¨_ ¥á2ÑïÖFá3¯Œ@Ûö¥ /4Pª}½ÿ ±çãÿm´úàÿî,‹Ÿaßþl¥‚þdúß7KøTA‡âÜ‚ÙôÛ2\aôÑ«o’gs-swâsu¹v1;ܼûY@ꇕÙÎØ}üBGõ¡Ý£]:ºE¦õÍéèM\—»h$²P½.>o£ë–Ö§v§§º+ …›ýåµë¹¾_ÇG~ôBï×ËË•!4âu¥¸º¶V/ý8_·ã‹±ø9\ЯÛåv=¯ |“?áÿÔB\yþåæZ þëÄãÚåi}~z­wîò{èX«Ø¦Í |«è£ ªÆQ0 ‚aÂëè?­à<¨4¥W™èÀ k2œ‚õ0î¯.Vð»U©¯?&!‹w¤‚öüuÅï¶·Ë~uðµëw7O—Å.2+‰<ñ/ïfà÷íLÁ¯ÐØŒÅpÊ.t¤¯—(² jèð¾.ùÝÓ»ø~7àmî-øWí¯’”ªèNµo³Z/Þ,ˆnS”¢’:9n³}:מmuðmâHZr§önÅ endstream endobj 85 0 obj<>stream 7Å‘é5­ Õ¿MF–àWЧ ª›Á›&ºÓ’ߺîkÛ¹M¶˜HßPïö°°L6Tÿ6 àYªùå‡í¥^ÂFÁ×ó=†g© —žœí%<½ÛâÝRáYBð„Ñ}§—ðôn¶g{ Ï"t½öZ½„gcq«± oóš÷¯~Þç­Èjg¶ýh¤oÛOk8Ä­—ðüô°pþýÜñÇÐåai‡VijLÿ<@'´ñ45^û^iÎ{ëÛ_Fà÷œX…_ÿ—)º(md½4Ÿ’?W_þqÐÄï~˜rÊòJFêg«òˆKw[1œW+ÜFF+ª{©·‘óÇç%¼‘A¢Ë*FDH­*#ª{i¸‘ ê=éÑÛg–ŒHö¶c¡KkJ²‘¡*s/fGðŽ |Fÿ¹¢7M#ýÐ¥=YÒºÍPeþÊ,UãHC~› YPf~ôûW{#ÂÛknm s`£Bv3pní…»Mô œ=ö-Ûyo¥·IÉàNwk ª›‘´Wt§ÅïK·©O´‡ƒzgöª¥ ¡½Ñ¶(ðzki=ܘ)ÌñÁ?Þœ†_vu¯Ñ:(Έl #Q´àaž½ ù—O'³Ü–:¶žðÄ­/WOq|c¶«Z[Šö&ØÕýÑE'‰$Šâ]ý0¸œ¾«Z[.³vµ1ü²ßÍTmçv~ 5ìwývKkKsÆžµ_‡š½7k•æÉœhK%ú4+@F™ÈÞRl\Y¶îj>îâ¬; Æ±'½«c³¶¾i»z÷ÔÊ TO]…a„·¨ Ô5¾¼lEß·9U_n]Ì(®Z†Çïcoicñec®:½&ÚÒ ð°’Ü<lG±oÝã.H H·’Ü…·y½ˆÃï¾´hoœY™ð67ïð2Aö$q§o3Ø›àN+ðä=j“;µx›‘õLÜ©½(ÝP'fí¼R‚GÁÈržÛ ’):Y¿³FW7sålJ¡XÒoÓ<á2÷­ó4ê—æz Oï¶y2Û{x–Ê„bé<‘"s®Çð,•gÖ+xÞ\®4{ ÏÅzíûñQ¥áJõ³µÁç)ÕJcèÚ[•>W)Õz§1¥T»·Õ^…?J>ÞÈ ¥ê™TJ-£¶—¶RªEøÉ•EÛGAZJZêö ·—Žs6ÝÝáï #Þ8ë×TÝÈ0Ä5O×4÷¢ÄIÚs| VŽÄI«‡EümÒ±§Íä& ;—Ém¢½qvÂÛìx7ºª›€šPÖ__Þ}œWØPýÛ$(þN·ªÒ Õ¿M5ÕŠ8WòܦAjh¿Þ{xÞ\´Ð÷ý€ú³LõB–O!ïöô¾#z¸Ù"<ì'q85·v=L‘MA¸ù°_œqŒÑ„õD‡îý¢Â®jmi¤î*|@^7÷ɰQÊ»Z´oïªÖ–"_À4›º?¶¢º¥¶œÛ~¿RÜlJ·ÔIìyö‚ä<+­›µVïÍæIGWÍå<µðI:jSèW.fí„Sv%A ŠN“]EZ´…%Õ-ìMNÚ£¹˜¾¥€i›CíjiªÃÉ‘µ û;܇wPÉ—¹êÖø^œ oÎb¹1z¡udžrcœ³!S½xw·ìŽÍíM¡^:)´ÃéáÊwÏxà¼q2Í—íE¡;(yowÎkqì[í<Ï+#$ ¦¿‘&:›‚·Ñ¾XÔÚÈÜbX*_œ²‘ƒÂî÷ éF:ÊÜR"c¼‘øèt)±F±YH¬8eR/€³Å¶AI6’Èy¨½ü{)Cçj­¾—v%ŠtF؆gÂŽc)‘d÷dÁ”Ƨ%#Öz®;h–‚~8Yˆæ¬ÛTÛKÉ`ÑmJóyˆ0ÿh–ÛÍ+ˆ{“èG_uIuCíDLØÎmf*!½ÛC¯ÛcxÒâáÁÓ¯ø{3=†g«Hò¿=‚§_ißñ‡­kx†¢áÃÓ¯œÞÍõžtö·Gðô+Ï…%mx®qzaœO3’ £Z§ŽT2lb$ÃÃåÚ÷¹N½´»y*r¾3ÉŠd¸¶UkÖ;Ým·Õ«tê7¼M´7²;µr›^8ʪ‹îÔA>‘ gm¨þm‚xD2lç63[&l|›ZuŒdXë6ÍáÉH†{OZ2Ü#x2IàÁ3Ô ÷žŒd¸Gð¤%ý‚' î<)É04ºÕ hÖ¶v§]:·”dXá¹Úà¤iÉðÀFZï‘MÎ+¡%#63ÂÜFgUx´^x;P{i¶‘ÅàX‘û$N4ɰd/mç¡©´°…³G¡\– On$NJ†5žk@¯æ— gܦ=E•NÞ¦6j ãq»‰k<\"3Ð „¤æ†êß&Á -6}oó$ˆmܦMDK†{OJ2¼ÿ³¡z ÕDœd8íáÚ¬# ³ÄœMqÇßÐzá‰ÞXÏ~ü ɰƮjm)åÜ $ÃÖN†tE“*Îã)2ÄAO2¬Ô<™["ÎÜR;±''î•Y£óÅxK±½q ½0Í{Z·2’úZ2l¨@Öw“ ç*PmiD'õj¤b%Ã*[ â–F–$Ãc¢ÅÀrK#¦C1:žfð–:fFÁàл=¸^èEJ•N7†®^;ÎÝÁ\ð(’GÌV{­1âa²«ŽëÖv>Õã–‹Ê[jSAœ²¥Vå<ÃáOK¢-u˜L¡eÄ”™ìª¾¨¯{åéïjN?›F¶Ô,¦pmÆZn jR” XkKód9ºû£ª[ ¬õLaÉü–7娣2øá¢½q ,-Æ!nÈ X·2bw°LúµÛ>¤IH:¡œÿ6J9vÉ-yÌ%2V¿M«»àÅýÚÓoÓfa •Rî<ûƒa¿¾GðDZ8&Zsçz2 (ü¨[éþÏQ‹‡H++¥SËù\O \VZ„7÷´LvUkKMEäTc•-µAáÁhme&}KèÓ˜är¸¥Žö³4Þå`1Ò§9v=©ä=­Bî™Y˜†ßX·³ªr–ƒI2÷ 7³%è"5çUWµ%»ôÈÒUÝdg)U^í ªŠ 2ÍÎÀþÇ-\užŒ¬:­L㪦ºWÝ30:ùÈb:ÝÜ+?m U’‚¸k›C76îeúa UÉs.Ú*ÛYU…Åmš‡R+#ÜähpŒfP¬*¨•s¦íXµ2²|å9çi;¦QÅÀR¡'i;z4ÆÍmq¼¸¡V aäŠu!T2mÇJ–å»j5mÇt­`vÕeÚΧó-[š+mGµ®ÈØR{i;F·Ìo©£¼@п‚l)fØèØ-­4QœwqTÎO£›XØ*HirÊŠ—s˜u²Ðj”³ÑÞUjRžÂ–Z‰oèvâ‡k?/@+˜ãÛtÌâF=-n1aë¼Ïª[£&æ9Á¨È¤[ôʬQóܦVEu·Ð¼Mcq53¯Wð¤Z\ìÿôzOVËž}ÎÓvAŸ ’¶sêzRi;jvÞ„m×3®¿‘÷»ìª}6ŠéläzƒÞÝTÇ Õ-¹Ç!RÓóä[J´ƒV”uTÛ fKqJÕ•–¨šq$mã]Rì–@µ¿p°ªD«NOÑënèF«“1¢¬´YeU"êËsò“.½´7dŽ^´ªûÜ #¤",ĪbXZâlsÕTz•j‰‘sUõ0Š™§§»j9é‹‘¹*°VňœùU]ÉèÎpÕ ÑåÒàU1E†ê¹Ht‰§;dh­š¦tÙ]­(±syZ$v¶ž¶cÅοƦz‘¶‹ÄÎA‚çò ×uÚŽU:#Žw®å7¬Ò¹3Ò“´]e$qc±³Æ®æIÛ1bçô]µ—¶cÄÎü®ºJÛ1bçÎHoÒv5Z¹™¹¥vòŒÒY´¥nœ5̶ԹŸ(AÜZwW'û1bg»@•Êy±sn ‚°?´ŽØÙ¨&ñͨd¬äè>Ê)·i•Åe”ÎÌmºS?ÐJçÂMŽ“Wñ6Ñ2îÐ"5k´Ø9—Q£±sÎÛTUÛÑbçÁ“;÷žLoå éÙg9mÇ(}òp¦íˆÒ9P ¹´h^<“;;À¨PœD‹í¸ž*Ñ%vö O Ùb‚;«o)ÈÕb";+l©MQ«tî‘Yc”ÎXœäÊÊð¢>VìÜ+ܰbg«ªˆúX±³Ñª@†$+v¡{jÈV¥³ƒv^ãª<ŽÕ‘ҙЫNÁCÑ«¬Ø¹Ga'vƉuW5­Š ÅÎ=K?pJçäªnª"X¥3\µ'U­Qœ~ bgõ­å[3§+ßkˆ;W6–T[3ç)N‹G Œ¶§íX±óª^íŸiÚŽ;×¶zRMÄ(ë¥Õ'¾öÏAÚŽU:[êP)³&;[jv|ÈM®f^€i׬q›yX\j€_ÖmÚR?ÐJgÁm:qi¥sÌZ tqûv»FFÑbg뇂XmG‹{OFì\ï Vé̯êJÔÇ*{ˆVìlzëŠúX±³¥UAö,ä‹ :0ìY€_mÞï>5¿(ùÄ·£MìCW *Ì}™ å©^Lý|ëëN̺/zëo§áúÊ*ÕbíûΑ¡{4š™ËŸ™ŽoiÒ[X‹|øÃýÊñÍØÜß5ôF,Çq¿’¡Z_þ¾¿ç|Í¿<ÝžVÍÂm„ž`³‚æwýîÙàV¦ë{Y?Ÿ^‚oépo‹²æöó(~†Zkù•ööܪÇzc:èñÞªjn‘—|^? ÌÚrë±–MÅÌ2'4\¸±¾nŠšÛ:g sg£*õh炽IÙÝÖ°/°µÔ±ì`xLªeëùñ"‘ÅDG¥ÑÌýE}ùz0œ« W uüjˆ÷«C#x'ƒ +F:O+­ŸºÝGûPÅØƒ?;ZVH!YÚ´Ã@ÞXªUoh¦Pr°|ú´Echû©ÄJ{XG£½„÷0 <”À>üi¿KÚ¥½¾%ŒU_àò‡¯sœMÑÇÙåæŒÞÑ9_û0áÔߚ‹ÚXìÌ.Åoi]j!€¸_'40m‹«*2…Õ¡Á…<«.GÊí W½¼ŸÓZ5t9àktþymßnŒ´í~!°ûË?j±»5ëþ¯ÜÝ-†çxc©«LnØïG7·…]ɘ€8È<rä¢JäøÇ^™µ7ûÙd"3O.ªŽm:¡¡yk¢ôÒ<|T³]§3‹k[ã'‘dá`hþ¬¹äW6/2d.Lcq¶ oï~­Ö¾o·ýË'ÿ³a. dÏ,>{7¾ãÏæY´ÓBfeQkÕÜD>\Õ¯œ^̧¯j7Cþj©Y™U±Ò|kUV½Úé)UÍ­…Ö{w{ ~wóº¥Aä×ÏV_}Š4g°{‘uÀÏ®vÑ9[‡H;ZTmÿq^ª!$P©ü”µs ,Dí7†& ùÙ\v Ô;ÙµhÓνޜe’ނȼ˜Çg»ÖÁnدÆT:½¦10ìt)€‘SëÉ8DSÐÛ{ZÝ—Ýâ Æ!º gp6@qˆpêÃಾOdÀF1>Ñy§Õµm®Ab€ ïYYdö¶ã|"³UuŰÄ'ÒZ5·×É:D²Um{¬C¯ªâuŠ}"5‡è°†óX.áYb¨\Öx†é(ü@Ã/ûë=€'“‹š†ß·ºžÛ\ƒ¬šB&õ}Ú0 :ƒø\”úª W ;›‹JYÕ¢VÏEÑ«ºÄ •‹ Iã­ÕlÙ¤£ô·¶~þiƒb’º§Gó"NGF¯¶ff1 0¶‚@ ‚Ùªªj»î×Z|ÞÏBOl:üÒjœÂ­Óñ>!.ýîæÞtüÙ,*âñký¼¯°ðψlÑâ"áb:Q,ÓoãøŒôÖ.3™BèænL!bà ïÍ©ßðÙKÁ»=¸naʘG¹ÕS–î\ Òœ«Cåʼ7{M«V9êU"²ØÚFŸ¬4_>wUo.ÌuRmLýÊÓ£œ\NØ›§“d½'p4¡.ê Tqp÷ Lmÿ1<:{éÔUlÖ"Çd[q ¼øôF°K•Íë ­`ÇS=7Vð;>‚Œ»®A§b­-z£C1jŠ>ô×ò$&u³ßÐz7/Z˜`ô¯ÖTûrœ—ª‘ f®œy7õ& Ï®+ð%/,kíÍmÿ8J<—•ú}÷fð m•º‘lI|cz5#týqE1Âpý|¤ºV•í\•ÑÁλ|¬s;?ÞýÁÁ#ú_ÿÉ«}Ü‹îkóõå¥þº0ÚØœú]žÛ›øÖ7<þk…z¸øgýíÅ~ø±½7¸ úûCø÷·³ì5Jô5*ß;Ü5ÊíÁV±ÑÚëøj½8}Ü O ÿ¬¿¾Õõ®‡~.ãeæ~Ð8?»i¿ö¯¬ ‘kx7ýã5îGG;‹Á5à¾ñ‚—} Þÿ@±Ÿ«“k/÷¾È®A?W|ëá— / úT$]ªˆ¾‡Î—¨J/ìÊ5Fó<ÍÐð$×€7B¯UQ|+îï¦PxÉøëCŒLî•¶ðßAðÜyìßùò¯ß&\&í½©ÔÉZdÏ_û»mæïj#Ôwú٘ى¾Óc=ñ ÙÍ(±ÿ[cÿ—{JìWFØÿ­FÑZüöj/:‡»£d…ð–†Ç~¡=…«ŽhS;wü£sõð©ãíÆ>Vm«2¶P_>™Ý ½îÝ Rº~Ä7̯úõñllnO¼¿´ƒ\ûðåyúÆË4Pßl"/j mÚL£µÿ¶‚Ñ˃ÌíÅ_v†âí¿2ýVÅß3¿OÎñ[ÿþºÀÇÕ.¶ûAh±:Ù·æ_ÞASƒh¨W¼¥½BeºÐsÞ\ònîoü ׯrἯéuÏ+Ž~RnC×õ0m7ÒaÐÝî"iE{h kàë˨Âçë[q‡1ä¡ë>â×¾_c%úiޝŽPO3~݉;8VÙ#¯gæÉèBúN—{þÒäø”é¸Éåˆ*(É•á2º œ|R%A$a£bP~}k®›‚òëëeU[³J‚Hìܺ%ôÅV’ñMíïbÓ¿:A‘(à¿î·P³"?þÆ"*âd~Ë/O~çëk׫½1°êËÕ§výìqI†ªÂ:|wꪭí ô‰µÚ÷ø‰êàZØ no>–‰Ux“Ç «®Bì{öcHó°P?‡wÚ¶âÞñÊYédûy}@bØ×5øÇK3ð›D 2 ?æ ¨OAì‰C«Bqày³ƒ#RgâáÍ× "XþîÕŽ&CÈì ÁŽÌÏ= ‘h1@+Ù¯ì‹ÇW.î`ŒäóÑ_ç˜ itMÒ ¯â‹`_?ˆ¯h\s;0ÜŠÒvþêÄæ~rAR‡BËNÿ1þFøëD1Ú9 Ù&ê|  Ïúéˆ*òƒ/}ôPM^ípJT!‚G6á{Ø_bÞ¹ À“ýÂ×#Élßvw­ƒ~t°U õ‘¾ý½À˜ðÿþ{á{šÝÜ1Ö˜h ¢Þv¨ýDm8ÎÔ,qŸ¼/¬Î# .üsü}ýËÍƒÅÆâVkŒ|côö¡?^n 6ûûÃñI”¹†¾Š¨›æ4J.ø«C}A]mÙ»yh ùRûvÛìD8Guš© ØîJ«~¾|?Ç[ÛÚ¸_ŒÂôÕý4÷ß<èîHø4CoKA <“)§ óqæGbE‡]]„`ÞÐÞÃ7íâ¹’âWÆFOáâ(Áï°Ü‰¨Î—yhwýßU&Eí^ðÊ„·¹„ ×Xø.]Öù#í“ÏètûœH+QæºÖˆ ÝÊõÛ»7ƒóá7b_·­‹Ö\ðq5ÆŸLÓAº;aüUÜb—Þņlã£ì/6лQæÞ ¸Öq%|7ŽŽ«¡¢‹‡6œ, ŽÙ‹£„ã*qƣͥˆ-4ÑnÆ¿ZÀ/tX5¹CÌ93^•œ £uÿj´ÌÚ|‰>ŽáÓ¹|á,$ ò>%®çÉ|È:º¾ÌHnÔ¾_^´±‘NXȉÇe¤8ŠÄ°–Œ¤®€õ%²¶§­úÙõĪ(­Ÿ­ºáÙ­fÒÔ®ËãÕÅOŸ¾yèZ…Nwž«qžjQÕH ƒˆ A¯À¬·9“žxÍM…0i»¬‹›S!•’xe}è}*½QâµÂ±!©IìÉ%^sg]™Ã†O¼Ú£Bp¢K†°TÈ—.¿¢ TȤ°'D¡5Òõ+…oÖH¦¹žƒ­Æbg¢-² .]LKÚ¢yg‹þêèÄTº‘”ZÈ^µd$½ó£>€R7Y ŒüJ(É•Y‚(1{&%A$ñ¡… ¼y6åͳjõjNPD¸qJ‚È`oF @ù1¶rePÂ8d¼±}Qü‘Ÿ–e>¥…g&Ñ“æz"TÕK×ÓãÒ,.%¼ï qÁëk»ÚS­"Z«™‡ Q× ¤S!Çé%kÔcJÍ,OâjÆ”ºY¡]¯ªÆ”‚€²* (p@ºrL©P’”ªQL©šåIø*‰ý,^&ˆ)õ©&zô³<"½@f¢§§z*äÕ \ NΚêàg«õ6õ˜ y×zݾáíÏ—úüdL¬HAÉø•¦üdä@É@9’”"+þ,æ=Í@ ?žJ‚Èи%“RµJ‚ðüdg[¹ 9UÐ%c¿Õî¬NŠ@êâ£,ˆ ÿÓ\OŒªÅúÙÍ)©æ5MšwŒCœÝúÐlúS¹5¯êð”'z¼ÎÌNÝ0õJ •-h^¥©×€÷´¥ye‡"I½â»ÑÔ¼Žè§^1n¬i^¥©×HgcGó*¼’7͆æ5¼vð,N¦XÓ¼J¯ÿ9ÏÅíõ{–óTîææsÈyàÇkå<6å<ð®OÞÞµœgï}Ëy*~.9.ü+ç)[”óÿú+çñß·œ§RÏ%çÁ¸å<ÒÔ«¡œ§=T{ßrïüÓcUDVZd*±/ !+-2• ïÉ‘•)Låñ—_ZLeˆ›ˆ¬„w"§†¬Êp2EBVZd*Áÿäd¥€©AÁô™Ê0¥*ña­1• •Û‡8°‡ØV†¯€=s)v`i?͆¹”8°ø„V¯Û*2•Á)P+Û6—œ­L8·–Ì%g+ÃÃÆ’+u`ñ2>ìÍkn¦2L¦Xòa¥,äöa#võŒËò€äœÂìD~–Gâf&zô³<‘R·µ{°hÌTîÔí •=úYt h'zô³< ÒK%Ñ£ŸåI„¸1/2úË"S‰å<º‰žNΓ‘åyržZÅ\ÎS«ü•óØ—ó¨'zþH9F–‡Åb¢G?ËCr‰ý,UJRË¡±« 5vâÞÝÖAI ð`ë ä³<¡­—èÑÏò ‡¦èÑÏòà½ÑMôègyRá)—¤ëfy?Í–$]šå¡}èü’ti–ßÍñ·WcI:ü¬B–üoH?Ñ£Ÿå‰ÕÝV$éÒ,ÖZ“¤K³<¼Ú.Ÿ$]šå SC–$é¶Ôv‡ï¼;O-òÓÌÌ¥^ãð·;~–¼³î<Õ›õÝw,çAÈ´¹œ}|äÝÉy¼`"“àaYÜ”ÏZIÛÙÀ1cï–ˆ·‘0k]êГ p“ú“„Y=é4;I©³ —1ôWµœU¸Lä¯>ºc%#"ß1+ ÂŽÊ&¬d÷‹rýd˜„düUøqÛ¬d €1ñWµœÕ¨þÆ€•üöklÎïÞ©5 4·ÐÇñ¼õ‡“u™¿ZN&\/¼õö|ÓÞ&¨šÇðü~5›â¯VŸZhoÚbVr~­%B5'@géUGÞŽà2öA™ì4@8{ tˆ–ÑåÙ‹~,ƒAyöâ®Ó€7ö; PFš¥ÕNXD5Hé4p:YÏÓi-“ÈìØï4€3·ô;\tL};hÇÃÅmŒÎÆb;® .“]RÈ1™ „ Bè ”Ív<\¤ ‚qïÖÛñp!8së ׋§TÅíx-N&ƒBëíx8 QߌäÂô²ÔB‚Ä$Y;íx8 ™5Ûíx8 ‚šB‘¼y3N³ÂÏr2ÐC»ìü-d²Þùon¬ æŒd4QM¿OIdÑa³¸|4ÆšFyèwýv+<ñdóAðèíðP Íj ²8‹ð‰|Ýv’ š 9ªŸW¥ u’äUc¯Ó ½i%œiyÕ’rïÈ0ÄuCC’¼*V»¢!#r³0…ž! éwÛGËð_EO,6Úb!xF \‡>d?ÄT{tB]„F¯*šíñE!EílõµƒÜ‹q'dy”ÈŽOy*@è7dF$^Æ ÙQ¢Ê²òQP”eDM¡m²##^’‘ˆÜ.ÙñíM¤ÖÒ)XV˲QŸK²ƒÀSj)Wö/r“˜éˆ—qFvÄ“dmÖ.¾MŠ$­X>ªP»\øV4$;¸”ª+²ƒRw»¬]Öc<Òúï$:Ô%²1ŒÎÆIí2õ9­]Ž•)´‘|k;(“ûÅøÐŽÊ$áûBû†e’# nkÒ¬Åe’#úFRj!ibÅa™$„43’“Ó ÉÑzâP@¦±5SKô¥€q^u.:ñ&V°/ BáBa)>ùz"›ûoè¨ì7Êád?ý^;úv’©!ó¼jJ£|¦©õÚ‰M¸~^×ß@ çU{ã.¯ —Qìµ3Y/M¼v ‡Kbµ]ÅŸ­wf§Ä½v’SA`|w=mÛc]ˆªîæýǾ+-]ìÀ‹ßûúV|7vÉŽúçíæ4,UÃ1ÌQÎÆÙéPFÒP"Ã]¢µƒÉŽ7ŽÉ¦ç½ã1Ìô M@ùÙöæ µ­1Ìq$ÏR~ÛO—0L¡²#"V“˜éQ±Evì\(B²~V$Àé§dǰ»";¢Þ¶gˆä˜÷ÄŠ€Ä€ÓÙjͳrÏYÈlxÊŒdwwÊg 7Ô&—Û0’R ‚.Š–Œ¤ÔB†f­`N{ÿà±<'ÌÜÚ$EÌ#`ÊJ­"æñ_‘R[«ÙIáD¹N‹ä£(…ÃzÈÇàMãMbëT°ŠÃnJ5­{²¨u²ZJ5»{òHÂOeª¤ÜXíž,jÅž»'‹üÔd´öò2ßl[¹ ÍÈÉAÔ¸9Gù#Aµ´u‡P>ñqè˜;nd^èÜ“¥q#`æß¤7NÎ7-+tÄ'ZqcÊ sÇãaI¯†ŽŽ•äÀUÓ9ŒÀ¬éÜe£¤ÕJ'0ká2#N’«àÎüô®gH2¢Uâ‹Tif"~n% 7Š'sÔͱ$ܸô]"ýq nGui »Œ ÁsvbÑ»yØl¡ÊÇñúòîã’a=GvJUÉH>ÒåPÖÓV=‡ÈB†¯€ÍzŽD´<³\ŒY\}#‰>ÎIôú¼lÕ;}«{è<žª/·.fþ³msä:Ð my¤Ž¨9~¡%˜ŠUò3ÃãìÍ}Q4Ê¡ÔôW_èüì2^Ä?ÀxJäwÉxÔ`øÐ\'’ŽeI¿þõõ²ªFÆFZ»èQ+Œäœ[¢G­02*´ ’é–g˜º3lÒ\/ÖÍ%æð³,Mä@¿Ã%\ƒ7;~‡K¸v¾§«æä…¦r®—/¶g˜c#­Ö9Oÿ-½€ÌHŠwéuX”Y³`$¥ :ikFRj!£Hš6’ËG-C#‰>ë‰,$zÓìI©…¤(—¬$ë@9c%Cí â*úûsI©…Âö¦FRj!3á™R©Ñ§œÆ›âH¦a†»âH¦Nº±8³7o Ê™½ZºÛŠOhW $ˆ Þ4Ë L6ÕÁ-­¯Ž(³›ê¯@Z_;MuB½€¼¯Î?¦¸Ü{×zúb.½üøß I»’Ñ„w[!YøYœÌ“uýoëFáÉØÞ0Ö xÁé‡Ñ¿z‹z£÷®˜úü®õõ™\zøñ¿z»z§6W0ùÞôÞùQŸg¿ýŒC=ÿÆMû9²‚ÿ åå”ŠÛ øÒÅ”SC¹AI°ÈHqGµË|»©tPŽþ€òclåÊfÌ-ÿ÷xc©ö}Gæ¹–“³¯R*ÑÝ `ÕK×Óã)‰ž”xÂþøhÕ_ØLt^޳4’‹% ±bwh$—z3P‚ìkŽ¡‘712|ΧéWôB»OíEÍ«T𠸎ÊXózöl¨y• ^1YlMóêVΓÝVù—ó —¶•ð³BåÀ_9O9>o߯œçP+Ë—±¨y•fy=.$·æUšå |ùŒÎ‘išWøÙì, vØd€Ä7N› /´-Í«´ÉÎZÓ¼J³<ènìi^µä<)$«†©WN¨¬ÖHR?õ8Pš$5R¯3“¤ÞÓ”3“Z©W .Á²Øù#2´7Öp]$Ñ+àbw{º@1•¡œÇú®‹$^ÆÁÃöGƒ~¦2Ô§ ÉJ‹L%zh2²2SYš¢ä€kuœ­±ƒ×g*T„›®çØÈ¥±Sb*£7MYc§ÀTv¾¬½pL%ò¤À²ÇT‚dãæ>l&¬%¦’ÏuæóaUG¼æôa‘½9° èA¬`.Çó0•€ê/`Ó\r¶2Ž=í5Ê9°ü™fèÃf1•8gc͇•:°¡åfî2q`A¢t‘•™JÀÏ^Õ+QÍò°¾€v‰þWý|æzÉ|Ä+úxÃS)ÃÚ›»L²<€-]Ôè&©•åËv“Ôb*Ñ›¦èÑÏòôVÎ#$+-2•±PÙ()Ú%|hF ¬Ÿ*Ë(\ Êú©uù&$]’ $Çìä†.J½†š[º-¦;·v‡¡ÿÃÝyòNÒR`*Á¿·;O5_wžÚßî<.ºó3•)j»ÿPwž¨Æùݪíêg¿÷Làú÷ž°÷À_µ©Ú.)IWj»Oï¾;ÏŒgÎTÂÏþíÎc½;Ï··÷Ügxlm4=õ*ÃM(5™Jt7öFÞIS¯Bz&‡|`F(Àa”+PDbnÍ( Sɾ!Y¹‰f\x†L¥ßm-Ã=.Ä%#ï˜ÞXëÐö7ƒù ‚A’²U‘ë3• ÞúNwKX:z›H•«¯äŒÛáC@ÔÉÂÄR¾µUù7Î4= ž½êTÓCÅž3ütfPަó!8ðpJòn<É:(y3Ò«ÈRN dÂ}F8lÍÔú¸q!éã\/æ¢Ø@–p](,ÅဢDZÃÓr;,–ev¾íç.jîÆ~;®¨™’öÚñÌÿç; P)Õìwðã†EÍàï€t±T`úmTÚi¼‡éª3îþÐé®—fÔÈ=QMȨa;.{ƒÏ4íx¸4k¹µßއK³†" Ãv<ŸU'j;ûíx8 Âa¶Ûñp„3$1ý‘{¦–”ûŽÇ…„1*Qt’›©%å>Ø\g JÙZRîü«Æ…H¸Éziâµc<.dÂÈŸ­wf§$ÜŒ 9îãlõz"ó±.BÖ lÞo»$³“€® vàÅïýt™k €qÔ“‡˜I¸Lwwʲ JÞLº!$fÒ„¬ÄѸ!9Š¢µŠEPþ»I‰¥Ó¯šÄf É„ûŒ¡ø”œÜ#OæâØ€wVÃw?xA$ÈŽÊÚZO£öll‘¥)Sè"…+ÎȦ·]ò(˜Ê1Š`ªÎ½ ¡åìÀ)Àö³q”W-—ÃÙA^hŠìHÌë±S–žÉÖ4%;îÜ(¨ç‚t·ËÚe|å0Ýí°v¹VzQŠ€å«mSEú¬\ÀÓeíò{n½v[Hœ³qZ»œ Ï”þ;Ñ-MÜ8EÀ9·®FDð¬/^3m(€>›1Š#’ØW£ðûîÆí(,iÅ¹Îæéô—×KFýwú •m5e£JØm <›Øs­>µP»-q=ÇÃîfå’VYŠïÆ¿[¬—ÖE¥–ÿ@sõf}×PgÄ7V-¥ÈL†™[›–’6“»í¹ˆÅ5ån{TK8',%±J‚H¼Œ]KIÌ$¼Êð#ˆ‹d•äZIÅdc:ú|_Ž.HüÕMêOdÇI§±ØéL Õv.ÉŽdW+œÅq¡)OÔF9Ą̃ óªðBÇËé)·¥pàÇ+úºæ)6™â,¯ èÖúîÆ0G»6ÙñIk 3¦W’ø "—d†@%XóýÇöÛœó­ŽÝ´9gåÌa£®xûùÂ)Òå!·)àÇ ér€0"pÓæœÈWYlaö€Hþ§¡¸›k(ÌÉëiuö€ÈB†©!7<‡wþ鵆‰©o»³D&™’”²vwQTåšéÈ,làÇ€’ ’ÇUP’+ã»±;{@d®±•ÙÑ#鹦õÉ´ó t6¶fˆÒ:÷²Z¬,’¯ªŒÃBTbÅ÷—Éìè1®7{€á>ÆÇ¢SÀ°£‡÷i›³Dܽ7²B òU–ñ`¬å«aº[¨`µ(_¥UªÚ…ɪÎ*\ÆÐ_ÕrV¯ÓÄ_ÕrVcÞsþGiÀÐ4âϦÛEô ä5 v‘•Á9›&èlLüUugµ=T‹TCúþª–³jÕ üU-gUO™¿Zÿ}ßnêgt@؃XU—c˜ÑÁËhèr´3:eì`D¯€vKóª–('ÃZhižžÑ’ñT–§IÆ™[Ý–æé.£ƒ cÒ’:v2:hoR“:½«ñ¸Üó‡Ÿ/Çò¤Y£ä½áœÕ4+xUŸ3 ea¾¸J ôF¼VáowÊúiVV û¯ñªØºèxÍnÝ‘h?‡[w Üä˜3 Úº#‘rÓ~D¥ò–HŽ~ÿsÃ@rô#aØ­0¥Õ¡& $ü¸Š,@ª ’)öH.xñ§’£#I¼mRÀx¸` Ëÿ”ˆÜ ùß‘—ã­‘ˆ¼ŠrL¥÷&"Wa ËòBL› $笢½qÁ@rÎj¨pÐjŽ¡£ Ð6Éet¢el3\FÄc«ÓÉŽ‡Ÿ¯ÆøYÀw²°NvðuҎȜщݶH.£ƒ R^ãa•ä,dH¬Xg ¹4k&n Hî Õ%’K³Òέ”z²””&€¼@IàÆ( "ƒ½±Ï@rô#«²Ç@rÜN 9` 9úÄ“–ì2–ºZi6Ðf]­tè}èñJ²ÂyvTW«"éýà€äèG̰;` …"rû ¤R‡,¹úóÐP.öHÎ.FJHÛ dˆÖî×yh(,U½JS-¯Œ¬Õ;³W­ÆpÒ0fœ–wD#)œÔ\qW˜XqPs·oï5¶‹k>íǦU}]F-Å'ë¥Öý|hK3“ð<˜[ ŠŠ7Š'sÔÍ$ܸô]¢ðq îH©ÐGQs¼!ˆôÙ‰EïæaOó ¯/ï>.ýӌǻîjÕýÊW%ªÝ”(ÍzüGÅ´Ž&㑞ÖÙ—¦uB"ß IÒ:Œm”‘ÁC³j)EfD#Å]€’ 2²žV@éKU¸Œ (ÍhHŽXqJ.;è ”‘ô™fÊ#…\+ *‹¶¶B{ã ”‘$Œ Ò­CŸT{ÐFÚ:( "I$m J•få Ñ Ž€ÒâXð· 2ÙOç•`!ÁÎÒäÃxÙ.+™Oå²ß‰ÖL;ÿjprÖ| êìR³Í‚½€Ó:¬horqMO¸‚p³Þ×Äl¬„+::­ qMO¸‚DK#%¯È³±3Ä5=á«».ž#áJDäÊC\¡½‹Âéç ùž„œ'× ei¾‡a sZ–ŽèÊÔ§ô0ùžDç"Ï¢¦sêSzTGô€pˆƒ»Î¤a†”·×v:¤¨Tmvþ rK <•&a#¯3”ÓÏ’°pw d§ù8eY¤2åÍ«ÂÜ,äu:%A$NÞ»¥€ñ@9¶Vu î™|저̊JÎúÉŒæV¡¢RÀY–Ô=¯“Ж݃¢%! ”Ä…º‡Pßæ£z"TM¤œ%\&mT·Õî¬NJÔ=%?¡ˆ•hæB6 óŽ‹õ³›SòQ=)NðÝ"bF> R±©Ëf}zþC˜ ~w³Z!é¸Nä$ï³]±¨ˆ¥ìKE, -Â]*b¤Ã¥‚"¶óeíEU‹î&» AnEl°7&ãí´$X«^Ýs¬ˆegŠX\cd3µt>hÞf.=—l‹ï@TéåV+Ê@9ßa•ªFýs²/ˆ’Î'´žÊ3' u>€îýàB{ˆ ˜’αt®Ó¡"Ÿiê ;½¹©/¾ OJîùî±"Ü8ßŇ[El ƒË%¼ñ“·<â; â@|œŒ Aâ»òÒ)AZBc÷|Ò‡Úå}Äwp•¼ÏÍÛiÝ\|÷©±¸yò> I@U;œúi4IåB|‡í £¿ãÄwÞíéE`Šï@Ðæ‹‚œG|‡|ë#¶Ž}޽JS°²*¡3ÙK"êsÚà.“I`~’·'Èf/Gp:Ým³,c¶:¶Ý –c/=oMµKº>{‰ìM yö,ê’®Ï^¢‡¦Ý%]Ÿ½Œˆ•xN@IÉãÆÑ8Ùà°qJnøI:(O'ë¹øðj;Gãd¨í>=¾{µÝ~-‡Ú®„Çs½CµÝd½4ñÚ1VÛU|­Õ;3Sµ '9µÝÙêõ ë"µßݼß9°´Ú.ˆFÅ¡èÚ`^üÞÿW zîîNùC"Ð}-šKîKA‡KM(ãØSh.›Åc’òa{”Y¸0—ÿä g‰¹„2ëªU’´žl,.q’ty(èwýv+<ödóØy´7LB>‘¯Û¶;ö$%%OZ“fQ&0•^öäu\š•²žVåuI#ƉVÍåuûU…4+‘ZÙ•×qiV"µ+¯ãÒ¬A´f_^¥YÃ6ZøMs ¯ãì"–Ä;×¥ö¶ËåýCî#Œ8%A$ºó¸%DäZ%~hF Ž[—rÁCsJ‚ÈÐH»%A$›Ùå··do;w $ˆÿšÞvck£¹¹PgIó*å>hz5¿æ•pœx‡a U¸¸UÝøœ#îü/§T@Ò±þÉéŒe×K˜q÷QeÍkßv«)éØS)%¯Õ§V@ä´Åte :¡îfåš×”Pôn±^Z\gnÝ4¸# »™Õ›õ]; îÀÿ\w$úlšË6/ ’*æÒT*Àäl7¸aá¿5s9Y0ïm—8‘lÍÔúøª6ä¼ÎÁ‹¹èä“©v Kñá˜HÁDZˆþ“dœŒwfÚæ¸ïLÒ¬LJ£+ó~„eµ4kL}Ç™Vô}‡m§YAÐzÒÍxg6™âl¼3I+á½QïüIk¼3™í,ÁÙïL ¨Q.ÖAùò2ߌɤ»mƒ’ RX1%“¹Õå®i§à(ÑŸÖÜqIÜ8á>b#픑!ÞÊCPD‚h¦— PD²õ7–@‰ ´†Ÿ/ÇÒ@X*ŸW*Q •N¬Í\q ì×™!Øhú¦RïærÏ|ɯîƒrI0÷ÂBLi–-| ¤Õh%Eu&Z€$kcæzO&ÉŠÅ­à]M’-Âc²¹nX åmøåª÷'ÉJõ­ZâÖPgc oÕ·Ñ,<%}kfá9*`þ/ÍÂó6ŠCæÚ€ËÍÑtãþËÌÿÈ,¼öP ¼ëYxõß÷í¦*(ÿÀYxÞúë[˜Ï»¹\Ëè*ðwž.(ïæï}Þ§×Úûž…·[! `0 ¯ˆÖÑJð€¿³ð2gá%ºÖw6 Ï + þ»³ðn.Ûå\Ì»eî½ý£ ˜•YI^ýàˆ•¸;O`$²’ çÓ|\²’Äz:e%#¹™}!ö1Ý82¸¡ì#JÑ"Bë²’Q´æ˜• bOÞ>Zg%±P™á@œ €­÷tÅJÂeK˜®VŽYÉ8ÄÕ¥žT 냚ÜJÁ"( "%bXÛ¬$k¤±’è…Ve.V0}9œ±’Á›æ” + l0ËYI`±€9…•Ìë+‡ãy ˜/›Å?¸€Ù>+ ‚Æf#s³’@0ÍÇ+ œLóI°’t–Ã!+ Äó¤m³’p™Låùâ´yóâtÄê[µÂHäܺä+fúV­02ÖÙhë[µÂH šÃ®¤oÕ #eŒ‡’}T#á2¹¥t k çÉ'¥SðX õÝý1™£€ÛÐF·4Õ‚þÑÈZ½3{Õ¯@%1!ÿ©†çŒ0†çƃîúD¾£ò´ì?6ý«êë2jG>Y/µîçCÓXš™„çÁÜJÐ`£x2GÝ\à±ÂKßµ!Çàv4®`×{BPB°ÏN,¢rÙåx}y÷qÉN¯si…d¦ÓªFR^§}PD†¯€Pƈœ Í ”…¹²B'ºrôöP#C?-Wo…0¿ÐFúÖì0rŸ„‘AjÈDߪFâ‡f¤oÕ # ã‘ÊŸ‡NI Ì&$m€r<!éÿÙ„dvnÇ„Lå‘(·ƒNg $ˆÄ˸eb\ˆ,ç:ôÙN•ZÆ>( "¼Ó”c"3FkJ „!nÉ0á âÑÈ@I âj" $ˆLœi† ü’žp¸²Ø( "#šÈ ( "#Ž€Ï¹Znã ‚¾¹Fõ($\Ñ2yGõà„kcñÃé‚4á ‚^C)¢ºÛ³¾Fî„+Í#°ÛÆQyGõ($\ãÃ&Ǩ2DšpÅ2¸œ£z®AÀî¨Í9I¸Rù´h½6ç$á è™^¶Ûœ“L'º [}ød*ˆ´ DàuÆ• ¨§Z®6ç$Õï‹6ç$ÕØÙ«9§‚HS=ˆÅ5Ëöàó€› "•ªâkSA¤,HHHº%A$@ýê¯N@ÉT¬¸%ÓÆÀ”Ø +ÖfC@@9³W³J®Ë(¹Ù«®@IiõùYý{¯ª $ˆ G $ˆôø]Ôäë1F$`zB:£&yϼÔ$>ÓÔAéI‚¤L†§@)ì,ƒ’ R„“$ÄuÊd tP6›ýýú L× X¥k½žÅtuÙ(³¦XªÃ³SÀ¬ÝK"JhÏ‘^@A~~{Xâäçeuíù÷).`w%éUÓ¦Xª¢ÐOËžŸ¢ÊH9МÀöæåeZŲx~VbHHZQnÙ|\ɘG¦:[+tÑ|ææ¿dÁáqƒË÷(ÈàlT6'3PNºž³ bQÊgøìuÙ´ˆòöî zicY‚Û®ç Îeçly“œ´¨Ž2w%ø_"-¥|¸¡v¹Š(‘!p6$„ RIΣTÙ<ð³8)MÂJqc·Ý@T±ânAÔÛN ÊÃǶ9( \ÝGŽ"ÀˆL”+XEÀpÒN@)¨X @¹Yöœ´À¤—+P*ÉyT@Ù˜õ6g˜7®z€ ˆÀ( "ixP‡Þ%sPŽK™ɺe¢\Á ( "£Úq¬zj9e±â¤Ý@BΣæ¾õyZBð?fÈù8­t!›\ã´Ò…ønºß…ZE!§ îÁ‡qZéB:¾±%¹´@˰´øò„“)ì8-í@\'upÒn€a •f†Ìmë·|c373C­ºËA>ÞíÁk#~hF)Ÿ†j¾åØùâ §ƒ|ðÌôB;äC÷‰]·3C‚ØÓå Ÿˆ)TåÅíuž á›æpFdHz¹åS p¥‹* ¬ë'aA²¹‹ I¦Ðö Ÿh³]PÞ¼ò5\‘7NùükÆ… ­Uí ¢W\„lMHÀin- òñDêöåPèóÚ.m› iähG}[ä¡jª@8Ëäa“6ÈÇÛj wV'%êž’ŸPÄFš¹Èz xÇÅúÙÍ)ù Ÿ'øn1#P©Ø†6~œÊÔ‰º[Ö…@§÷kzÒ'‚§cElœ´£ˆú½&lŒŽu6 yŸƒû\3ÔCI¼Í6“¢¨.` õó>šŠXV;˜GËÔYò¤#uT¶¯ˆq9¶SE,àžª‚=Ûâ»@D®Ô=ÎÄ1óÙÌZºÎ‡N mfýüSßDnHÎã@|ìÆõϪ:ŸÈå0UÄ&ú‚¤wTv¬ˆ•)n±Î&å¡;E,±žN±±õ4å`³½¡ ¾ã 凧ñÜ ”Uz9SÄCàT ÄkÓA ïúäMK|‡•Neê‘€ïéH‹œÛ¾áòÒ©‰”Rñ˜È·.¾£—ÑÈû|œÐÊĆ^gœ÷¹ÐÏû($}"6ÊÎDJiÒ‡*‹ò>–ÄwÜ }МHßy·§ {©"¾‹­§˜À´%¾T§>ƒ~éjìå šìg¿õd’½$œ´½Ö“ö2ZF£ú–jO`Òz²–häóGµžÌî—nÒz2›À<{6d/A¢¿€V¿tU¢$RÞçIË*°—šf-Ëfʈz™Ü6SN”ðT´™›¯c†ìe K¸sb3‰ÁL˜57‚õÐ0àJ´ˆ’@§N`²—‘¨OŸ+Ñ"JbÅ2(“ì¥nLAI®,Ê@Y%A$Ï߈@ùÔ0—Ü’ðîZOƒ’ ½Ð:¦!{ ²‡™ƒ’™ìg ”i쥞êyuö2†§AÞGƒ½áx*QÞ'v† ¦TÖÏ~ïQ½ @Ô¦ÍÙ”Jœô $ñ.§T‰¢iÈ^¢ ”iÈ^‚ô¡A Ó½™£*U{¨§²—Æ¥$zì¥i)‰&{))%A:o¬Zß¼÷ÿàR’ѨŒõÉÎ{É•’d˜†ì%Þ“¹œ,P¯ô’¥e?*%³fÖ¨ (Ë8™ìÌ%€›*_ª)´ôI±™W+£"¢ÐÎl&1˜TúÁe÷föLsÖ½9Œ¤—“}¶4¤%€o¡gÚ¨ (‰Â(mP~Òb/cܸ%A$æÖ\’ 2`ØK5­–> P~^¨¦³—8 é ”‘LúÁIKõ8ýà¶¥: ¯ƒ ¿€PD±§#PfVz¥t[=sQJ’Ú=ÄV)IF÷¥Lìòàd®R’«IÕLì±”DÆ^n†ƒ.<Ãî!~·}´ ÿUôÄ­C¢.7¹×ß f$7‹¨ ŒˆâˆÙË‹o}§=LI´Ð«Ÿ­¾vБ4î™çV‚ÌÄ -±-ç±i.9[ ‚NÖÍ%²•£D샳ƒÚæ²S¿ÓûYgX» <¼Œs‰m%¼Êð6“ n­¯l)×J#¹‘ÔÝÝ-‘ð<áuv©“OÂTnR’EO:ÅNg’3°ÁÞX¹.Òö†–Øîٌ٠ևvѳYÔ€ÖH¡^ï”.2ÚqçxÚ¯òÎZ À”ÙïÙŒ<€ª“ÖëL'xTÚ 7ͬ3 «–œÐ@ð4ëL Õ–.ã”Lò>èáóy»9m”¬í ”LY©)(ã§©u¤‹€òiÌ(ùæYŽ@I)è¹¾|µÝÊ1èù¶}_·m.ÿEƒž%æ^hȬ«VP|‘4’hL'I—‡‚~×o·ÂcO®HI;ñ¸ŸÈ×íÜÍA2%%Ó¤Y” ¥Ø(«ò:.·Ðtò:.Íš4Ò-w~Ž4«/J³"CàB^Ç¥YÝZߢ¼Žc·ÓTÛž¼ŽÓÖ ƒÿ!î¤eQ^Çy½øèt ¯Sc<”@yÿãF•û qc”‘\ìéªVOÊk/(½tîù®@É´ÖwJö„vÊ‘ßÞ@¢·“6Z îmç”yzÛ­ês"¡²¹æUÊ}ÄA¡Í«”û¸[‚¹~gyu.C*€¹B¹’ 0òQ[R‰àÛ›æé g×KFš×¾ˆêVSÒ±§R‚×àˆ5¯Õ§ ÚbÍkel5ö•wì‘…¢òn±^ZäG"Xì¥%rneȬެï:ƒ¸/‡Ów ˜ˆéªëdût4~hFær4Ý\r¶R’³±Ýàˆ ÿ­5¸›,˜÷¶Kœ ÈH¶fj}¼…Œã@‘×9x1|2ÕÎBa)> !ø86ÑÀ¿b’ìÃí4+§ƒñÎé˜ÈÏ?Þù|"=ÍŠï&¥+sýi-wš[OZïLÒ¬‚dнñΉ‚2ÃñΟÒÇ;'dpnÆ;DÂeÜ’<ܨøâåe¾ÿØ>÷Á·ÍqJ‚ÈPŸfJåN G@rpúaÔ"÷ÂvSN@)(¾pJ‚Hœ Öå‰*( "Ñ í ”‘‰ú› $ZÈÞ ?_Ž•íJø--bż@‹"V4¤¥«#e©ÅÄRæ£u©émçT* $V,Ì\ ì Ýa2)ªS*Щ“df®ÿ“dCq+xÏ“d«ñÓ4›$[/}Þó-6³ûoL’%úV­Ü&òô­ZâÖž&úÖò?2 ÏQói^½´»iª €ïë/ Pó?5 ¯=T{dzðê¿ïÛM•ÃÍŸ4 ¯^Z]1ï*Ð¼æ» ü…—ÞÝ\ã]ÏÂûôZ{÷³ðÎ=}}+Ið —º”žàgáéÎÂ;þ•Ô ¼«Yxf¬$øsfá5Ok Oóy{oÿ¨f9+Õx8f%ÑݪvYIðOOó±ÊJFT„cV„M笰’£Rã—Q°Ý•Bº}L7Žè…¶bÓ#ˆ ˜²’á nó³’ž â„ ‰‡R2Û}Ô)+Ig ²’ÄU7eUÁcMù(á÷¶ÃJ2¼§;V’1îXÉèètÌJbWÝ©T#§»J0"±ˆuŽtËJr"rW¬$0.`ö¯>Ÿdt 0û–º ü+ ˜-°’ YÀì‚•DG§å¹wÿØ4Ÿ7ôÐÜØ"¬d{ºe%Iˆ«ÎJVTGlq,"å¹µ{PwÂJyhG#¶+çÓܲ’ ìp阕ȇy×Õ\+ö¡­U,K[îº;;V’ñ¡Ý±’qˆ›´Eÿj¢mJ€@ß.WÕkhZÔDáê:̧êË­‹‹eY!ãápA¬p;Š—e¡:Q™ÅÖJ–¦ _Y½kC7óq¬1Ü×@(m!¯:³Õù¨øxxœ½¹/Ñvü@ý:ý«êë2ji>Y/µîçCP–f&QýsÂùµ/Ž"SÊ‘Ö$@¤)U-äð¸‘p〕„Ë8– ÐoÊêœpX³($Ö 8• `ŸÐN¥øY3'´;V2 ‰§µâŽ•âA϶YI9@*øYœT # n\I0"Cá˜C©cà®NΚƒò:c|:À-&\JÊј·Rè„v,€´ìErwRfг;©@ê<(³ÞæŒ~n'Òr8%+†uÊ‘—OþLôÐŒ@yQSÍíD" ' dõiÎ@I‰´P>µ©¾; { –Ž‘8ÄuJ™ÚNî¾õyy¨—`ÙÕïpTÚúøZ\Qü$-‰WÔïT øI‘ˆÜ?)ÈuZÑïpâš²§ßItàéS°Œõ;œx'²žNº ˆÔvò~&8ñ>¡]u âlÖìêw ½;©râŠñÈÖïì\U¹÷Vuêd‚´ÙU€¤z‚Ú¶~'‘ê+†Mx# ÁZOKMx¤x5rÏ:( "iù(Ê£ó«Ü $ˆël,’ í?l€²ý4.UÔE^g(ÏÇ AI —qJ¦6Ê(Ë"×”—/ m±°VÝ( "ÑCsJ@©ë+î,‚²,ÔÙX%A$ ` Aù¨24=áÜPÚšNëÓ¬ƒ’ ’6ÖAIÚ ü•м¦öªÃA¡+PDbµ+PD"½ÀðØšç@4ÐÙäգЫ•ÅÚíê*•ú׷溪hD%¿‘h`Ä_­®xžeÑ@,†u+…¸jíê´æ3#\êˆfA»º²þ|ftؤŽh¶3Ÿô¬ý‡»ž<$ßenôäÉ3`ç¼®_¯È<lhŸ*´CðGÍ#ÈÛ“G< ]ýº¯ß“‡H_Ñaã¬'O¢zÕ(DjàF”äÊÑ2N@I‰–Q¥o^DY©28GCB$©!Û dC\g $ˆÄðLåQPDbÏÆ( "c¿%PÎ}™ÉLÜä%¹2#± J‚Ȉ&’2Ges¥‚ÖáTC@ÉàÆ( "yNÚ*( "7r/å; dÇ…8%Ad¶œGÑ}M=ÉÁÓ¼{]ºvçIt¯KÐyhZKÐ=1´Oy!øƒºóŒFó=ów¯K/‰ä<¤N>¥…gýîuéE"xolt¯K/‘ÉyÔëD^÷ò=Læ6O÷ºô|\ÆN÷ºô|>˜”OlwõÇŒÀ¤Xå{sk¥{]z¾'*¾Èݽ.½H„=ÓPˆ_iž ÔgmX¿…¹y°ØXÜjqùž0ݽœ¬IQèø]mÙ»yh¤€’±·€ôŒ3F­úùòýœÅy鬜G”‡ZIØ7.@I‰^hg ä c*•3C (7ûGÒ“°ØOsJ‚ÈàMsJ¶ã˜3PbD»>yÃî +P&úª»efó,(wû†ËK§.ºó0‚8WÝyXWÙ³<¨€ÝyvÎ+ªœ%øvç) 9K„*¬¼‡À2ªåjN r·}ï”Eêïöta,®Œdêi²9Ì;6E“x¾(8Á˜XY+tCÒt§ˆÉJ¯Eì oH¸qÔÑŽ¼‘jÈ•"öë ØMò>e­9"@VÀlW‹•)®:ÚE,ˆšÙWÄž=IA¨RuÓÑŽ(bƒˆÀQG;i¥—T;·užGç‡s¶°Á 9iëí Cv× pülæ×†ªÍ$§ùXß%‰|'â;`2l+MçsüK¤óÁ9»c)E:Ÿ "p)S'””·×vÄwñ2n±4ãa”×u‘‹ (ëú Oóq¨ˆSCn±ü™fÊ›×tñØÊÔñÓ (‡2uš[ãfÅVm‹ï°ecVlzÒã&ÿ¬ØJ9}Ž Ú·‹ó>•ÓÉÑÜâ;‘ Îø.Lt埛.¾‹›´Y±éâ»’¯ ¾TëÉ@çD|þ‘Ö“ˆÀL/bÈ^² bg]î˜HÚ´ºràgô&¢¢¥˜Àlžf´'Pe/y{ã¨ËOä;êr‡^h“g/;_Ö^ØK@÷p×å.“;-«“ ¬§:iÈ^¯Ó‰`Ÿˆih3ý‹þ·®QSx¼ÍÜ,W, ÖcI¼[Ázâšp%ZD Ï“NçJôÙKlÖŒ¸-¢ô¢õäë!xï­'+å8¥kÔzryBBUÁÝzRŸ½t9¶iÈ^âD—+P’§ ‚±ÕN@I±—b}šqÑ¥Œ½¤—É]t)g/¯S5ïsÀ·'PÍÄ5_MÛ¨fb_èR”ô ß4eÓ½Á:eÓ½TY© iÈ^â±nK}öÒb)I{i¯”$•½T.%ùZÉ¡Z/‰®|#GþÕ¥$Ù-}ôÙKâj˜†ìe¤¹Õjé£Ï^2R+;5Ñ}Ã+ûQ¢dÖT¤%±×™·QA:Q…¸i6s»l®øùZæòilf¬¹±™Ä`Ò¯€ÃîÍè…s%‰>[é Ò‰ÝBO­QA:Q"ó˜‚òþÇ”½LÁM~PŠ2P@Éó7Pú× sP~æ%¡àÒ ( "“éÛ-Õ1"IÚÎUKu.€òÛ›EPDâ½qJ©œG”ck£nJILØKýR#ö2QJ2¢?r„$}¼ÛƒfíÏ-%‰ØK¾”¤3ŒÆ~.AGz½¤¯Z‡ ë[€¨n5e¥$ð[–fõ©…è§¶8qS[l ¸›•³—g«×spoC­z‚À¬—ÖÿÏÞ•¶µ­sÛïïóèG¤…@Èä!d"! IH”e¦eZ -eøÿWƒmÙ²ìȲtÏi{¾ô´§4N/mi¯µ×âékeuZuÕ™²ezi(—L­t™BÕå’©•î–ËS3E¹4ã›>7Ê%S+IçV}¹dj¥ƒ+«/SÖÃâXY}™²DàïÄÊêË”¾Ą!读© |ȧ‘q&HÔàq¶êÎq žcÖ–øLçz< ’> ¡+Sü/B]ЖÀÓC'v&à4xö#m \x&w&HdKþé ç×ÿ:èyë¸ÙuAÏ”i |ÀAÏAPÿíAÏíË„®?Zm‡eÍ4j;s¯ô÷©í¾þ¬´ÍÑ]%:tdšÚÎ0Ö¾Ÿ¬EgÊ¢K4]cm«ß&{LžÚîdÙÎ~»jÅìacŽ¢ëðžL:¼0L KxÍÈ Øæª @ÖV÷Ý›&Uû¹D¹i êc|q$¢¾ÔõqH*IÂú˜˜•Ä›ÛHÇeÑrè” 7·zYÉ‘¯•t…ê@9‡Vò³c¥êî© 4nϪMIV’m©jb%ñ­U*@Õvj@ÇJâ]§V©F$æ=µJܛƥjVxÌZYIWD®€•=4R 0çL{¦ñ½ôÇ0'f%ÈszV0i>šXIð¥ùè`%½Í­^V2¨”c%a½3êñ¬$Ù D)ÏGu湕d%¹j;õ¬$øŸ’ˆ­i¬$~Òä]wDYIî®S=+ITCê'–Ý^ëÍ'\ÑetL,3ÅÐQy¬¤Ã ªvž«’gÁ ±’¹zÇž½^˜XÃÖUÇÎf(éq+iG‡³Ô1+I·êº¢¨$ù XQ6`1} Ä«š•ëÜ/;»ÎÜR ®íU2²>ÒZO~#ðêw}ˆÂÇ üFlÔ*¡–YöVµgÜ|ßè P.ZƒíÇQ$¨RÊËfÇ*†›Ô¬$­œ•„—™ÊŬ¤…YI†XÑÅJÇ_@3+X¡õ±’XÇ— ì*d%ëm§—• îÓÒòÇ~ä127j¤ÞSŸT€¶ø ¬¤%ÜOÎSD:€F©F$Ù è” °]uMRüŽ}ÍÊCÕR)AϪ¤¢–­Sô;³Ç½0n‚’¾2¹Œ&PRDúOk”vPFF‚à'M()"= ¤ˆþtÕ ¤ˆ$üÍIØzG(£ƒž•‚R|€9F¿³Rû¾(J…ÀËhÑï0TˆsŒR®ßaLN£kÞî-í,Ëêwг3V<‚p£C¿ÃP!Áó:ýC…ܨ×ï0âR¤ú˜ g•ú(B2‘ßGâÔIÿ1J¹«ïx‚K®žxÇ8oMÚU€Ôªé¶XTs«ÁU€¶zÜ-®´Õƒ…ÊLxÂñéŽc$ þ Lx"xHõTeÂ#dxʽ4Q°ôIÓJŠH|] ¤‘ x…NÊo3ÕD^u€ç « ”‘”ÔJŠH"QT J¸Aßyal±ð–C()"‰PY(ÃöQ ŸYKA¡+ÅAûpD³š|fðÏÙ¨Ï#él´äTÜi¢T’t”†¶’&àW±úç$ôä jeÕ¯!ÉèWT=µyòPDbê[(ý4"Iÿc¾¦”AþF(.iP.z¢MX_!  \XTJŠ |] ¤ˆä.6ª@IéiqPnä QPRDºd±PRDúþÊA‰i·Œ%wŸ¦”‘€]T JŠH²HÊ¥“nrfÄ] (ç*ªAIÉÅ*Prõ ¤ˆ¤òÑxP>õ+ÉA9%.D()"qkH(óÃŒ¡Å'nHĽLzÉ]ìuçù™FH`nÍ/ðùÃÜyäÜëâ‡DH½‰Ÿùü$à^?$âèlÒ»×ʼnþ’s"ìH¶½yÎô{ü„d*÷ºø~¯%å^ßïaļ–OÆŠŸ‰í÷Xî‰ õœˆ@¿³Æôîuñý'ÍΉ´—Ì«îœ%™Ïl^•° ~¾å\¸åÞŠ²ž´á6P[xdò&·È(IlÉÅí¢ù‹IrPÒ»9MΓ”·×‘MØܨÌK':M ¤ˆØÆ€ʧ—yé?Ù¼tòh%E$Þrè%“ÖJŠHJEPÞ¼(¥€¯º PŠÉy„@Y™õ¸óqºÜy[eiw#ºÇ:?Èp…àpçÁw˜ãÎ3̺ÀªÏ%@›vv8®1œ¥#çàò"6,› òŽ=ëìa£©ˆ¥›`§zÑ}×CäÈ4-VW£ˆ Ëy’)b{@ÐtN—"=ÐÚíø[õyëüÃÓ@ÚÑî«QlúwšH¯"ÖáÖô8ÚѦm?hUÄbQßÜ×<\’'Ïú±äP¨ÉÑ.*Í'"v'‘ÎÇ+kz±xg£5gË×¹-<©xÍÜWâu>¸Ë¡5g c)Ð~Чˆ%{h¥±”¼ágÀxÛiRÄ:•±”Qi> @¹/)¾s‡/4+bŽ Ñ(S7ðÝtÛv2 \º¶EÅw€¤.j”©»íÍ2uŒHr`WJø©O^)"1¡U¦Ž‰‰­2õð¤WôìH6¿ršF|ˆyVú¬Øø¦ ö†é³bCMŸ¯s‹´éÃêlú>‹LßG é–jß97-}Vl¼øüO"+6^|gÜžvö’ÌxDRÊÄwà_b=iœΘ©]îð“–€À”d/©V]ŒÀc/Xoà³i 0 Élv:ž½ÿK7 -È^z+´ 9•½<ûÅc/Ñ“–„À”d/ɉ ][V '‹oZS’½ô.“˜+ID”Ðæ}R®$¢fflQBdp"5ÓN^3Ãî<šë^ç61W’ˆ(a·â\I"ö0þâ\I"¢ücÖ“±¦${ ~ëI³p÷2ERb­'·¬4 ü]­'§±—dM“¥8{‰Ïžº@I /£9¥ß\tÓ’˜’ì%-kʆ.yûdàÓÈõ}D³E‚»NÚ÷9»Z-I]òš>Àó„T6tÉkúP"_ŒÀ”d/ÅF˜À”d/Iõ'0%ÙK¢‡Nh铜½„—ID`J²—GIüì¥ü(‰uvÜåf®‹Ž’Ü=¦Ê\ÿ—’„,}’³—œQ’é–>ÉÙK´Ø$¶ôIÎ^†¥V©g¢9=Y$íÕP3CD‰§RY3ÃD‰w™5³œ\ñƒž4Z3‡K²FñD Yhª™´`2(]îÍx”DÐ=$d²%N”€¨ ç¤FñD‰#TÖÊŠÈ$¸I!)`5·JAI‰¸‚ ô,}’³—XmgÝMQ¤–0¸Ñ`©NÃO´Zª»n SÌ•Ãë·Ô’²ÐJŠHô¨å6<_ŽÏtŒ’Lg/Œ’ˆ°—£$gsUyÕú·ª«~øCGI¢Ì paH©Ö›UsÔ?àO³7oðÝCBFkqïš$Ó Ü¸ Õ~‘7 õP ½‹®±¶Õo“ –À¿ Ñz´(©+ ú45ȌɔåÀSG¦,G¯#S8^C¼réÝM±f /Uõå’©•¤ ©¾\2µß´ˆri¨Ë”up³ŽwVš)‹i"ßiTS¦l„ÚnJ¦lÏf*"—r&HÔࡇ¤Î‰<€žK88 ž³Œˆ-O£É³÷J0ï©R¡Î·%À½N)g![×U }9g‚D¶=Ë8è z¶Ž?6’]Wð=[ƒ«4Aϧ/v¢®+ø/èy(Okãþ® gãüà©ôw«í¾YéÔveœÐõ·©íjV®ú2L£¶+˜-Ô¯®G¨íàY’QÛ¯Û¸5t÷hqÃ(G÷ë±{ظ£èdf_ùÞävn5™Pº]2GÛuS‘µV´ N)Iéé•Ëí~›·ÅMH‘rùh¦!)žÆvhªr _…[&=õC\¥ÌñФÝ2’tö(Øuš#³ßqV¾¨ èHÚêcÞŽ/ã}Чѫäq'$U›4ç9‚WkH¥¼Ži³ú/“@^wzo$j³:¸¡Vƒ©jÚ¬ÀñT-¯cÚ¬!QŸ"yÓfeö)òº–¨9®žäuŒ¶Pïõ ÌdïnBi>ÊA™XIïØChQPÞ•%¹Ò„üVÖJŠÈnôpÎb£” Ã>”__S;öÖÛNÐámW™”îÃÿ¤×¼Fr±ÄŠ:ÇGA/(¥rìɽ]W€ßŒ^÷AŰº¤˜ûÀÄÊTÍ+ü‘Óxœ]ËI9öd0qÕí4#4¯…\HóZ|ê Ã@ŸÏõ*=dßb6°ø¦yšWt8ŠÞõ¬Üd†7’)2ZEÈ,Þ¬mó6°ÁQuå’#‰×Q.™Zé;{rÊåþL ©Àm•ÖJàxti6¸#{Rÿ#U.ks’ÞvÌʈ)Ã~¾³TΰE2ú(8sÑv—½(qkwnÅ[9I²èŽlÑÀ?Ÿ$û}/Q›Õ=ß0ç}5ñÎô™JFÇ;‹4DÒ"ÓiMÒf-Y_^.‹ñmVÌâêŠw¦mVà‹ Qï0ÒÔïŒÚ¬¸.’'MS¼3;é¥)Þ™Ãxˆ€rùÝ‘$÷Aöiš@Iéêl´€!²Boš(a!*ă’"2RD®–ûÀ,®.PRD7S-(O˜Í*i¦h%E$ún´’o=ã0™ýuYIÃ}gÌGÃd$÷AV¥™ë„ûÈmot(÷Á0…ÜÇÞS2©¿g£‡ûÀ7Mmæ:o@‹’^Ê2×ʺSìj¥8s7 þI²1úÖD VÝýÛ$É–`åy1  ž$k寫eÉøm“dyâVà?I¤oM$nut6úÖDâVðÿ›…§c€ùwʳr.W :À¼wŸJð/`þG²ðú³å¿8 Ïz»ï7™žÍ_–…gåªMaWŠHw€ ¼Sî*ð·gáݵí¿: ïà¥ü×gáÝ–Ót]‰$¾0'Úãù/ O0 /d\÷WeáqXI!ÍŸ”…·wQJÁJ–ÜÁ:À¬‘•°-m¬$à¥ù¨g%Aš4qVÒ9{ŠÕGy¸fzYIoXÞºª¦¨EôsåÈâˆw6*êc|qtt6éëc<â<4³’xÅv4 ¨¬9-ˆ[4³’´he%ɈF©Bä"½ir œi|/ ìX]ÕfVŸÖ´J0"ñ­ ”>V¸¦ zYI|Ó´JøþzXI=À¬’•‘Ì XIójü±›f€yãIÄUàw`žÆJ©æÄ¬$Ùr(ͽ㱒X– 6÷nªÚN+‰h][”•ô ²’EÆr'ÐL`%Í«ÎÄHÎJÆÁ_+ ˜Ù(M¬$eia%qY“wÝe%iwP++éö:vëþ‘­…þ¤%}¬$•ŒÈÔÇüÍ%„Å[Gw÷* F/ ‹•t6·é >â‹c¤¨/ž ¹ÑM!@PÏF‰ÁG<Bv6:¥‘è»yÿc¾¦”(ÍR ß7 (ïòÍD¬$!ò)(ïÊZXIU©”•dM¬$ø_Pnä IV°)XzXI@Lô€ÒnKLÏF—TÀ#Ð,Àˆt…b õ+’  ¥`i” `Dúço”I3Óuõ=š¤îe4K¨D1¾ñzt›‚ )*ÄOáé‘ 4·ú¤¸ë ¶ :¤X'€Ö´©@Èï#¹TÀ³žÔ+Ð1ÀÌñ:ÿÛ˜Gg_XsB©ÀÑ­/©üMÌÒ~ŒÙðüƒ^çiý>³k=)ï÷ÁˆwbÉ <<¿Š·ÅâãF(é+”é¥ ”‘aí 9:}©¤e…©$‘˜#ÐJŠH:ã¡”LW](9þË[—ϪAIIˆM Œ!$ÅA97ÿþNÔ«Îå ¤ˆdFIÔ‚’"Ò…'å7¢Y”Sò™1é¥ ”‘xש ”ÁZ(]DþÌ ›¦ ”‘ø2º@)`ÿãŒe$ç'yJȤÎXü¤‡›ÎXSùÉr‘£æÇrÎXysôÔ‰‚¥üŠTH~Ò=ߨI‰´Å‡B±4Øg¬ø(ØBžgÿ—›& WO±4Øÿ7ûöåÎ_mÿqtk¦²ÿ(ѵþ³ÿP(´Ûýëí?~ìkÉ#PJŠHÎ#PJƒi‚Dy”tA,(¥óâAy©Gd€Y()"¤”‘ä¦ñ$é³Ç©AIé|7z@IéVO% Œ¢„—%<ûͧaFPYÓJ†)ÔJŠHÿš& ÊÏC"AµbPˆ} ¤ˆ¤L¡'IOt7]H°lk’ÜÕž'iYÉÝhãÝ!ÛâKîN/ xbX ê?õ­È(‹'$@t Iz84¯Gwª§J£,ž^FµQONÚÝ$¢yGQV¼JU™QoŸì’r-‚øéýžà®Ó×òYù•“4Êâõ{€gx®Ì(‹×ïÞd±”$]44ÝéÜrté1¡éaqú´Ðt\Ö¹éyÅ¡éŒÀ_-(=DîÃËè%E$p'‹u€’"Ò»LP’ÇàBà²831‚’"2²5¤6ž€9âª%E$ÞuŠ~ê“×D ¤ˆLHRP2á'š@¹ÉæWNu¤ùqºÒ|‚£›²i>£½'Y!¾ÌÑWKð§¤ùä¸êU²i>Í*ÜU?ïÂòVž§î1nO»Œ"6N3‡IÇæ£/ôð̳âæ2Ï&s#D4ÿ%æY‡3æßnžute§PÄpW}jjÁæY‰Í³Î~ýÍæYÙöæù_nž5Ú»·äu>WÓOû[̳è|]äI}BŽvit>€˜géIÀ£w3RΓ”·×‘â»ܨßÑ”VE,fع ¼3S€Òd* ytÊÔ1"Ãí-â;Ú¶Óªˆo»å­›-â;@&$5ÊÔcä<‰ÄwE¦Ou±”¼·/£:–’×ôqg€† «Š¥ä‰ï‚í¤¿Ó"¾sNÒH—3C¦2ñàYOªß4Ö“—;¢1øN@`J²—¤ )N`J²—þ'-‡¾›dö~örï"Ú›ÀU¦¤ž„Žg/É]Á$t<{IÛb¦${‰L`?OžLIö’ Å LIö2Hä'hË&c/½²–˜+ID”àW’ˆ(!Ò^X3Ý·TÍl¼.Ä%¸Ë¡«fÒ‚h?¨ª™a¢„ì¡e¸’Dì¥#T–àJ%ÎÁC‚+ID”þ¤W$)É^‚à¬.—;2£ ”‘ðÍ ܶ (Â’éΣÔå_F()"É]=(öSº@I‰‰] Lf=é'0%ÙKO¨,H`J²—€¸ ˜ ØËÃmú°28‘¾O!9{ Bf©‡.yM禥éûˆ°—à‰û>2ì%Þr$ 0%ÙK§z&³ôIÎ^z7MÀ”d/y£$S-}”Œ’L·ô™Ê^žWÒ’äãÓ ~÷QAö2á(IW’½DOZbKŸäì%`-ôÒÏDGNzE¶eWw/ÒÔLZ0½Ë¤5*ˆ'Jhó>¥QS37î¹.ø%R3ϧÄ%À1ÏÒR3iÁô:·i â‰vË!iT2Ùbˆ\=UÄ%ÎW()"AÀš…€òþáF ()"{ ”‘ìÄŠ$(ï¦H €›MJ+ ()"Cj;• ¤ˆ ´†Tƒ’]Ó$AùõU”½ÄgO] ¤ˆD£$Ú@´fq Ì’ÕºC^h%q÷ÉéFIòLºAÒQã¶_*þ¹£$î!ðGNWàFz-'5Jq–éB`wšQî!¹{Y|ê ú©ÏkÜàêY¨ôì쇻V4y6¾nÃïæÑâ±—Vn2Ã;žúj%žXÑŠL—ñà%XªVà%”ÄËŠ}ü—IR./ŒDbGGË¥¡¦\2µ8!ܪË%S+CEZ°\&Œ¯žS_ ÁRu|%¹i¡KÕñ•Àµ1H1Ð|Ýå5x¦ŠÈ§)ÔÅl ÈvP^¡.hKà?{òz<)âËyjàãœ4z6»"rÍžÍq…äÎÓ<>[ÀŒc“ϾêøJ„9g‚DÂQµÝP¾Æw]#p£”ô•?°V5()"AxÞ‚²” ”¼³ÑJŠH2|¡ ”‘Ì ­+SÖÝ PëË”åªíÔgʦTÛ‰ÆsýÁj;t6¨K«í6‹¥ÚîëÏJÛÝU$rGP_À0Ö¾Ÿ¬Å©íðÕž‹®±¶Õo“mf8÷nÙÎ~»jÅhGQžÚnyÒáåî¥qñ™6JÌncˆ¤t×4Õå’©•Ü(,—L­ÄŸæè¼¦\Âå¡0Ç”K¦VâÅFk;®•þí Æ´gtX.+²•2´2à ùÄjâvuûðÿŒòm' 6ƒ¶¯¾‡«"üFzÏëcXïîÇèAZ¼~ ãÑ:?Ø^ƒU~~É,œÖjÆúüI›IWЀGŒ¾zCðøI‹YšÎérÐòoÕei-@b«¹rWô˜ڃ#çÑA{€`ÌŽ.-xI¹kØÖ.F늪§¹k¼ÖÕ9h´µ3¼¸ëå@³ƒ–ó@k´µó˜¥@¹ÈAËc )(×ûµ²j-à:ÃêuÐâ,6:´ÂšÛ)ô•Ãë·äS!\•ªz-àOZÒä UŸvKƒåTq‘\ºs™\dÿZ ÄY:ùE‘t‡§Û!(\dHÚ+¨AßèÀ³Ü…!KH6«ðÆàïæ n>^8}n3oß5ñ±£½ Õ~1B¥úY¤5t6~¢õhñ_àm÷Ú§µ’Ã()—L­ŒËˆRÃIZ+ñ-V.­/¯Í5Éy-´ ¬›y•ÒÞ–Ùܪ5œdŠ´X¹„/”•ÕšäB¢>\$×Ãޯѭ™‘oÙ‹ÐáéUúSáíÐ9Ц™ÖRñ±0~_õÔqë‘´¼ŒÂ¸õHÚ#T¤sðD?»$M{ôO íÛÊâÖ#{;èP¨.n=²·à¤SÇ­GövHµwú³å`i”ˆ[ÌZÇgOeq둳YÓõQ ´ÞîûM.’ÁPRDÏžŠAIéÀ3g¬½¼Ê;ôO¢?<Ɉ^.2ïšÎie`…ÖJÚp®'¤PFĨåt½@ôÀäÁK9ùÀ$­žRޝ\d7Ñ\¤‚É/%:J"ÃE.ˆâ¹’xÍx¸zªã"£&Q½Iáø:u`Òq–Ä€¼ã«èÀ$þ4òޝ¢bsú¤M÷±K!6'+´údg¦Áˆ“…òdg·Á³WônšŒ¹ä—b¢¹iê“™OÄð…²IGl’û ȈÍ' =BožO!6w‹´æÄ-F¢HTtß÷Æàá2Eá©+/ÏÄ”¬S„:øÓÄÖÇ´1x^\ˆÞ<ŒˆàæVN«# kuš’1x¢ºV‡ñЃ‡ /£9/ R}~^~w¤”á,- ¤ˆN"¦(ó¢;Và   Ð%RÏŸ¿€rPÒgÈ-Z@IIΞÉ@y’\lH†¤PRD‚ gŠZPR±9ª7Ù_—Ñ¤Øøüz<’bsßW<›ÒX[Ý_LÔà!j;ÚãÙXˆïñH6x@¤·]ºlJ¦Á_UÙ”Lƒ'ø@OϦ S!BÖ®ñzùlÊÿg½€ÃJ:€Æ<ïì©MÄCYIŒaOÁJƒ‡YIG5´€T+ÉÓÙh`%=q’^VDLjf% <á×ËJFµT³’á³§'½t±’þQZçá2]\•%@г­&SÉ‚ú_C(=¬¤{ðÐÌJz{h½¬$ ‘{ÜòªáµT5°’ Ù„¤,+ MHJ³’~xBPfç†ò l4þà I?+é®ÐšYIT=ƒ“ ZXIt½R8ÃsÕ¬$œLÉJúq£‘•$MÈçº<+Y°ÙPˆoð€ßwB’ÃJ¢Ë¤Í¡`%nÒæP °’ø2)s(XÉHµZVÒS©êe%‰¢KUä—•,ÎÚ5ï¦I°’[Ï5æ¹d%±¢È»HV+Ê"ï"YIôÝÈ¥Ý%b%±ú! V^Ž•®«•^V’<üv«BÄ¥"4³’¤H+pÈ/¿gmÎiq„—™®Ú±S ÀÁÒËJ⛦ÂA žñ’H²’»†§”áN"Ä!V4Jò!9å}-¬¤¿¥‘•¤[uiPŠ$§‡‰|(áûͪa%¼§>V2Pô±’îÒ™”‡‰XI¼U×*ÀˆÄín­RWDþü¼<{¬O*àÎh– ¸-U)©ÀÛR¢c¤Kä{ ´$Aâ‘ð2š¥Þð…^©F$é ƒ’uÝõ¥aÛÅRÐü©€¹Rû¾Èôl4Hè¡P«TÀwö— ØÙo3]W²t–æà#ÓaÙ…TùntJ|®½:¥ÁzºT ì÷!ž‹ª§^©€îæ—íÿ˜­”ÌvöìeÑÐ&ø—0§I%z¸ ØY¤Là$ž+óû`Ä;À³4RÊ=žÏtܤ%}e RJŠHàÏôâ‚R0„J;»ÿXa)<õ dp£ ”‘¡®ºJPRD®¿ÀnÐw^F3cBR()"c É <Š·ÅŠÂP†Cƒ´€20JÂåÜòüX”îl¦LâB  ”‘x;¨ ”‘NW](yÒ”öLóÝ;-yé®–C (Å•§:c‰ÅLx¦sÆà'Ím*g,~Ò'»†°×ìª4?yôVä'‰8)3–?éžoÒ8c ØbùÏ7l:³Âhf¢å@ÎX×RPÓ—ßš4š„í?¼tæ…ý‡hÁlÿag—Nº²B»qÍXüÏþC­ýÇÜׂ+†ý;í?¬÷?ækÉ›°î1J (ƒ£$Ú@é ÒÚë¸7M ”ÅŠhÖmwkePÝ­ ”‘x­”yƒ"Ò™ñÐJŠH|öÔÊ(­z(í–±±”†q›÷Z@II Ì}\¦ˆdz" \°EAI x Ìê“ BL¡žd÷ISʧ~…W&IWÐJŠH–XQ Ê V=zûz˜1Ô @0ÇC…QOHh©ª0Êz³xBç´&`”e¥Q÷€@³6É¥¾•eñôè¡Å&…$ýóS¤D†ÔIeñôèè¦)6ÊâéÑýÃ~Iz¶½y®Ð ¯RMe”Åë÷bž¥@’>.µš‘ýw××òynF¶|Dû=ŽœG¥QVS¨L’Þ^2¯ºs¯ßã“%ÄèÒÍ«’`´œ ;¡;îu>q:Gžƒv^°¼Éj Ì(PÆm‚q»hþ‚—̵‹nš6PR0xý4Ê‹Ûk-Qé~•ªrPRDêŸ& ÊFC  *”Ô ¤ˆô«»•ƒ’"Ò_”ƒ’"ÒY:ƒòæE”‘øP¨ ”‘X«® ”‘ð2™leRÔæãÄ[ª*@ûd ›æc&R÷x»N¶DTWEµºÇ%ùÇÓ|ðMf9ËaÖEU}N*ÍâÌØ´³Ãq-BÝ“3CŠØÍ&QÏÆ:{بG*bãæ2ïzˆù`Ï4Íú¿Æ³‹ÄMZñ]DJµø^F”æÅ»×‘¤øÎ:Ïš€É¿Ñ¤ˆ¥¸ÑªˆE—Ñ+SLjÄ"‹¨XʹöÉ«ñQ?蔩Sï…±”ù•S^Ó'(†MÞ÷ßùà©*–’×ô®M¿ï³P‘ß=WèN8sk c)yMÒëTKÉkú¸(nßGøó¤ÝXJãö´Ë˜©Äw€ä°Ç샕ˆï¢ä<â»Ã3’½ôÖOB'`/]ÕÄ$töÒérÌg{‚(öÒdb \EWêIèxöm ”LBdz—dŸ&N`J²—¾]'%0Ï~©6ÔBGÜ$¦${”óȵeØK~YáJ%¹%Hq%‰ˆwỔ(g¯frsœA ­T›`=Ð~Ð!XŸ§kšW’ˆ(qºÂ¦${ 8¡Ab\I"¢„2…ÉA™€½ôãF9()"]QŸPRDzÒÞq)c¦¥Ï^nMç‰Û~ÐÊà ­ ””½!ëI… äYOje ëI9öÒß³!0%ÙK7‚¦{i`µT’éû —E¼ ¨|TÙÐ%¯éãêT ]F°—èNB`J²—ä'0%ÙK\=˜’ì%àNzÅXúȱ—ÓFI¸–>ÊGIø–>ÉØË¡u×O3J2k×ÿàQ’öËà’Zú$g/"ÌÒ'9{‰ÏžI-}’³—áÖPT[öSÅŽ •QAÓ1J"ç’p”DÖ=Ä߉]XL5Jòs1¾ïó{’D±—x2»0dGIšUsÔ?ÀßÍ<öÙË5·wp{Ù/Uqã+þn*\«ö‹<ŠÃ¿¼èk[ý6É4`ÙËñË­G‹L­ÄOšVdò7ÁRµ/ÐÒ¤ZgíÛ%Ë¥€Ø‡#ƒó•Ë«†±÷Ý(.—L­dˆ|©riL¯t…œJ©4¾Uψ¬ÊøJ@ƱS AGj°g3^…‰Èå |²y…zŒ-Æ`gp{þyI²e¯îÊ 5çªÍ"ÓàC’¬€¾5‘¸=irúÖDâV—ñH®oÕš…§i€ù·É³rÅÊ`==rµÈó?’…ן-ÿÝYxÖÛ}¿™”‘.¥”ú³ð¬ÜL©™" oôt_%E$·¥ú_žÊ»¶ý·gá¼”ÿî,¼o5^ƒgá•ÐÏ•%<à¿,¼ˆ,¼kÝß–…§˜•t7P¿MÞèë\5Õó·*óÜþQ̬$Q?ÄèwÔ°’7ÎY]'+ þ?Ò|¾ïÁ˨©ñˆ{öÔÌJzGÜõq19/Cë£õå岨…‰ê&@‚¢>m¬$ÀvS~D +‰žè\1Bž4  °’ p“†•t/£™•D—¥¬T#sÒ‡G- ŒÃêc%Q‘Ö+ÀˆÄðŒ¥"VŸ´J‚ü^V2Läka%xêb%Á´fóªÚ—u0Gw/öŸ=À¬“• `´±’ÀKóÑÊJ…i>1¬dÄÙS5+é=ÐzYI÷ˆËa%Ki"¶P›¢P?è‹Ø¢¬$Àö†š"¶(+ |SxYI§5$ëº#ÊJbÆCÞuG´×«ˆîµîÙ‰®ÔJ=âÁS/+‰¾›«™ZK¾>>šÁ~Ç¥EmBŽwÐJ^·‹%úÝèŠ"Àà¹ZéŠ"À¢U×Eàxà¶nïäêp_Y¼ëÃmæcÅÎfl„ÂrÅ›…›VqÙ>Î.?Üg÷yØ€ æËù™×¬\ç~ÙAdn©†>ÍÈì7!œ_løâhìÛ@¨"@@Ø_@(ƒÞz¥‘DË¡” æåélýi ¼*>&c%ÉMÓ)È;â$ÍRÌJ‚ÿIz ı’!‹HâD®U*€YIî(‰zV¸y‘R÷?æk’ ¤ˆ ùZ¤øå]zU%(ÇS&)S(ÊÙ¢l|º³Ð(õ:õH(¥”y#Ò pR°ÔJØ gMR÷¦ñ@i·Œ¥Ô ¤ˆä2…ª@IIª§PV7º‘{W@òÖbA¹PMíéj ´€’"Ò)kz@ÉQ?È‚ò©_‰%/K()"ió^(ýN7 6c¨ç'Šó~Í­Jý#ÞñŸÖ¤ô;—"ü$[ë;lˆ¥’Ÿ¬ý‡"ýC…‡/Ôéw*$Fs;]¿2á™’‚¥^¿Ãˆwàeô¹ „‡/T0ì¡3G ÇU Øè’Ôï\ÍÎǧûw®~çò¡Â<·©ãÓQŸWú âd¡È„'²Õx¡ABÝžD©“NûA‘ O¤¢Ž¿Q J‘‡çWð2ú@I X³F• ¤ˆt.“”[”‘Þ*Ai«%E$¿5¤”‘þÅF9(¹¡Añ ¼|NØ ¨eP¢¨”sóïï("Åq“*Ÿ1ƒ’"m9D@9ó"š~ù`1êµ ä·†”ƒ’"ÒYlô€’"Ð$Y(†4¯r’xË¡ ”‘®V]U¥¬L žhÀc ¥EB^u bNZX4 æU% ÷¬’7^’\4P0G§¥BàÀ®Y4€nZڨр,æÛÕ©Ég¬Gµ«Ë‡„vòùÌÀ±ÿˆ<œªÉgv95B;-yS=yø(åž<y—†¼ú¢V´yúЂ?.@›'•¾N2OZoqkH—' œG”?öš°aÜ(%}e˜R JŠHàöà,§%B‰Ÿ4] ¤ˆ^ÞšPRD¿gŠjPRDõÃÉ¡PRDbW(cå…§~²hæH9Úx.S(ã^Ç1 ÍÔú,g±àRbXd¯g÷6;n¿'4.‚]­":æÈœ Œ›ïý…PÆÔ[Ü.êXçƒû6©žš@6ÏŠ徚Ìx•ª²Ì4RJ^fp¬Ž…@y×.'%E$ ¡A:3C|L¡zPRDr4Pr „Ÿúä•%E$žñÐJޝºPRD²Œåv&›_9ÕáÎ0´ÒåÎÜ*K©{ÐOwžËoé…àßëΓãr–ªxœ¥o±‰¤-›U4ñ¶ OÈ[yžºÇ¸=í2ŠXV3‡ûi ïØ|dÃxŠØ¸MðÙdn„è‘&m‡ÅÕ(Sw Ah ëpÆT­ˆ%‡BMŽvÁРôŽv—߬ø¦þ41}Ÿ¢š‘p½Ñ¢ˆáÁŠXG;˜ÂÑîì—€"qu9ÚQIõiÍÙ þg²íÍs-â;¿ˆ\£"ÖktI×ÌGS@çã'V˜ši¦®™´`fÒK“"ø\5*bALØVœÎ'd3¯óAðTKÉÓù O£W¦Ž /“É^Ü^kVÄúŠXÿe’€òÞH$¾s ¥¡”줗N™:Fdh±Ñ£ˆÅŸF”7/’â;O½2u|7ñ* O¦^™qÓ™ÂôY±ñâ» ‘/×÷ßBR¼ï#™#‚—NÜ÷i¼.Hö}š> Có~š>Á:-kZë˜Â“âJ%˜L@`J²—À³žLÊ•ücÖ“1ìe,nÒ‚2¢õOXOZøMolH‚5ô}’ð×XO¦%E¤¿%B`J²—xg£ ”‘a9ObPа—>x&èû$f/áe÷}$ØKW;èïûܽÛ„;±·\o¤èRšÚ¨ ž(ñ”÷—w)Œ n­x¢„pkšjf ý £f²D‰³¦¥7*ˆ#J>cÏ%FñD ð,ôRÄ% jÒ+”÷7ÉÙKïP¨”‘¤™¢ ”."ïMï¦IRXRˆã˜FKuÚ~Ðj©Ž‰hM üúJ - ¤ˆ$ÕS(#'½bÌ’žQ!÷Ô£$bî!±ØÍ‘%Aí—üŸ;JÁ^Â9]wn-'5JA–éBTwšQÖ!9†½Ä[ŽâSÑO}~ã¦PéÙÙw­ÈñKël|ÝÆ[#{iå&3«Î* ™Ìæ6 ™J2e‰|T}¹dj%pÝy”–Ëë2S+}²k‘rY-—L­¬3¬Õ:¸(jË”eéUM™²ÀgÜÜÖ—) /“zZ@C€×4"#øº«/SÖÙjòlf håê·Â¶ÜÐãá“ÚÀ8eú<›½9i9g‚D¶€~ïL°ŸÜ+K­¤œ Ù€ÿ çW”PöW=_Þ“w] z¶ ‘>ÿ=K=ÿÕAÏíËÏõתíÐy°šFmwwRøûÔv_VÚæè®ÂÍRÛÆÚ÷“µèLYt逆à¢k¬mõÛd›RÛ,ÛÙoW­xµ]ÌQtÞ–I‡†ïâãqŠÙm ˜Zé{4E°3¤—®v\+áe¦–Ë«ìVý\™ŒÑeBénnõE°ãZ xi¥l¹¬Èºjy+`¬'Ÿ>‡ŠdôQð¤í-{Qz'Öí܆B“ üRU9H$ã!¤äù$ÚfN*‰jyÓfÞd±ZyÓfõ­IžiD›u½i–Œ¨6+&ò5Èë˜6+Þ h×1Ú:àZë+–×1mVÜîv´Êë˜]/^4È넼íâAyœûðå ¤ˆô…:@I‰¾Ži8(Í|Q€û 4‘PRDºòQ- ¤ˆD¸ÑJ¸Ñº~c½íÔƒ’"quRÆÛn;M—_¨œ^óÉ}2îHóâ>NïLO¢(#¸Jæ>ѳQÍ}8´"ÍkXðº¢Ï/jHRójŽú‡ø»yƒ›ÇL{v¶kqïšÎ63D÷õj¿ÈSÅ}9Šž_†Î`Ì¢fƒ»Àæ6™¯ýÔw€Ìâjtĵҭ7ªË%<4Íi­ 4!EÊåÚËk2©·g£ÉàüOO¹„¯’•õ¶›ä8Er=<ªåù»Î‘oå‹Pílø~$ÜÚ½á°öoI’¥sÍêÚ¬!ÛõñÎét;(åÊl¬Ýÿh´YYÜx®Ì§e…mVŸ,A}¼3·™¢>Þ™¶YÑ -ïÜŸ-gAâdp3èÖïLIޏš@I‰¾›·û~S (Z} ¤ˆôõl’€òâk2§ÂPPžêqdhI()"ÙÅF)()"†=”wm;()"ÎôÒJŠH:£”ÆùÁKsv·šÌu÷!F¬¤Ð8žJT*p%!ÀÜ‘Ä[yÕú†ûoµpžjH]æ:oypèé“!3»DZ€›$›*sýÿ5I6(nõÚ݉õ­¿q’ìåéaA~äªàžT›Ù1µüË’dCúÖDâV´ØÈé[‰[Ñeäô­ÿÏYxß÷þú,¼«|m€»þ„æ( ïàïÎÂ{wô·gá¿oɃ²lcÁNüŽü—…—Dq~ò_ÞŽ™ýuYIÞàñˆüß< /g¯”‹«@> oÜ.‰6xÜ5í¿,¼©V’” ñéþ¦,¼t¬$¥"~×,¼²M<@b€9Ÿª¹êŸ;À<••ÞžVV’´TER+ þ©4-¬¤ Oͬd`«.[{Ï™A|qäâ†ÖÇNC ÂÓ h @ü›[¬$zÒ"ë£:VÁ3Èh!@ð¸‚V©€{`Ç ÔÌJº´fV’ô¡å@ùõ©/ºcõù”­ºjV’ðž:¥¾B S*€éªí4³’€ëË¡œ•¾yO¬$Ð1Àf%ݳ§fVÒ;â ³’Çïk©˜Ë6ºÖÂ;À¬Ž•ô?ÐYI棒•ZÓ|Òö}8B€Ào^ú®!øXÁ,nÆF ¡ša™…`oU{ÆÍ÷å¢5Ø~\IM€„[ª XÉÙcÑk7úXI² è” ø0¨#ûÓH!(‡,wà#@IM üƒ˜!öÞ½ÓJŠH@‚žõ€R( ”÷¿¬ãó²¹RÉ}m7æÆû`£‘>Ÿ6O‡+7;ƒ·‹ÑF¯ð£ô9ߨn_öÆU}šÕÆLåÿÀØúµ±ß+<žmU¿ÎœÃŸªu˯+øoGÛu3 .HÐ="Ê{>åéÅì¤ÄœdsoÂXØ;;½”ìÊb³+ŽÔ*ùˆtѸݨ} î/ŒÛ½ëeôD¶Ñôî²9zj~¦.e°G­©1@¬cÌÃÅ~A¹nµ˜æÝ¼•ÛYX³g?Ð4÷rÑÊÕfVá n÷Ã4Ø¿Ïi!m! ‘ðžÍ½DŠÔoÙèÚÙo3 ë<374¯Js#DYfaï~ö‘¬\±R†8üA¦W¿ýe^mïÕq‘F‡M¸²êpM={Y†wékþ±üå[ÖàRd•P»äüáü‹ù×üsè$[…_‹5c÷ö¯›ðP†fáþœY% {ñü¤uôâKYd6»kÖ»Z@°twØ3ë|xü}É-ø%ïàsðd[çç[ð¾×Cm°\ŽáÉ|óx—Ük´ áU gµP3c¾Æfý£ð}—¿ÜaÃî=¬kG«]X½Î–¬³«§¡•{ÜÞã¯B£Õ®•+Í} «w#c›ÄC3í|£²•ƒ¿ÌÿÒâ5ôÚÉ«õ2n.+è º[òC¶üþ¥•ß[znÞý˜Û[m +?I_`îi/›)|½ß…—ÉÌ êd›m•ìú«ïdè<ƇÛ³H9{Ëû:ðª&³åpÏãÝãqyôÔäÇã °î˜Iœ‰Ý¶VÌÑéj©f-fÕŠ_²¼.‡èª—©5cm4)“ÊÈ\]¶ÎNŒÅÀ’µ½`å®7wá£ò‰0Ëóx±ÙxX_ÞVÖ§­Zøb­lùÛ{xt>Ü/&b£–»ìßö`ÿ’ƒ`[X‡çòµ¼ÿíà3½e½GQFkÊ{šèµì®±n^ã3½E>ÍÞ \®çðÞ¥wB‡#s´woÁIq —Iô·W‡Þ)ÿþ. µ\5WÖÑ·dÂq:4Gw÷ð¦Àe§€–‚‡Ó–±v¹· —Œê§9oÕmÐû{TôGi,mÐÛCtåLá×Ӈ̗Q9õ\9–o¸¸aà”^ÁÓ𞌶³x©‰VóòÉ\b ¼àÍéÚ*¸á5Ã4ÕEÇln© YYœø|q6™›˜W'›- YÔ4^·†öq›.ßÌÁj·¹í¤^ÃëÁ'ójÏžYZ߃ìêk µ´qOtÇ/ç‰X-6‘Ý{kBñË<\lÚ}x^ÈÛþ·ƒ!›{÷jg—NŸà›xË’®Þ@¹9ø’%¸×»œÑ*°[þ¶¸1¶rÕfž4Nañ?}\‡•úþÜ(,&à†(Ð ïCd6[ÈÀ¶WÊëæÕdå£ÛU·†cO0U¤ÅÊ–áµæ¿‡&·Gî|­*nÓï!¨¼½@T\^gÇ«G»pSÏç‡Æi`Ï’ÿá<Ë£õl~¹ðá§Ë{Â}Z)ëëþ’§ïèÐ ¶Ûeõ^€7òk•=N&=øj¦VdN$¸mw=3„ÜHÂ' Œº¢5^tµNZ©d-ðþ'-\Ñìãà Ñnz³ˆÌŸË(µ¢ß6~Ç覡7í5$VC݈ƒqßÊÍ\¬"î£b^u^VÝŠ^oÁW3Æfa~£€Z œŠ~a :]ü¤mí äÄ,&äFNQß<ßDÎM-ô-ÕŒµ×»\Ô%+ºPw0Þ¹éZ ŽƒpÊ/§”§Vb¢&d¤EŒSÊߣö›÷YέշõÑjo»2XŸd>Á/­=~~^n_:ùO»ƒÎüõ±õþ'ÜÇþüž Rßx‹€ºÄè‘y÷ió èÇíàñŸü‚Ÿ Ú›ÒP¢R…‹Rµ¿œB¥z/Ê6V²ßÖQÛ°ŒV††è¢à‡çt[9éEÁ_¤%"uàö®ÖÃ:ëøEm©Òj{ Ã/[ðÃõB‹Âå×ࢰ Oí']¼ ¡Ež ›pQøpÚ€·ùaÃÀ`ª~­ Ëð´°0 , ·;xW`ghQXm˜—_3›¨›Ù°gß^–­áÂxË]|«¦oQ@Ÿ&¸.hYP?-¸.hYÊydà -E(T- lû!dß#³(t&4í‡Ò¢ä¢|i>‰½&Å|™¸Í‚šEm¦„6 j,ê ¬ ZGý½YP³(‹4Ù,TožU/ !©¤Ë¹(ÀË$è2¿Ä- ˆ6.¬ã•~®Âà¶ðMSÖeàµÒñžójüÑ v.ÍBÿc5ÄPÛ€µm´7B¯wKÛvêÈON‹ÁÝ ¨é2D´Vfq3eü¸*Ùe°ÎÆ÷]ãv©*ÜbRÞÀQB"rfsl=Çdíí4íìÁ&Ö ”ÃEáßóÕò·Ëþ±>?{ìã nOïW½£‚…¨tx¾k­×ÐÁo/6ôñ}§/ØFÌ{JóáöCT—áñ7™÷LÛe°g_ç|Z¥`‹þ³O D•Ë‹UÙ.Cd‹!Pˆž&¸üøBô4A&V¤¢§ ¬~?PˆnüÄBtãÇ1ÍH·«.y =MàžüBô4öj³%ëP†¼øÒ€’"8 eZ@©ŽÈÏæWN "?=()"ß-Áʯ‹ò |(2 ¤ˆ$&P҇ܩžz@Ié'V”ƒ’"’(ºB®|J@I‰µƒº@)j ÊÕÝ‹D}/7z@p²P«®™;áõ½È#€Z_^œüRØzRØ÷òuÕùD::X Mc^@ðG¼ò2’P@Òüp$vDøfwÖììþcþîcÏ¡"LïMŸä]ÿÜý  Ð%ò˜Y²rµ…qØcw.ÄóKfá´V£nä LM€–êèpÜ1 _3¨«¾0ôŽ{Ãux~>ÿˆ}ÎÝRŸRm! z7±™{7Ý ÎÅ"5*g®óƒ»|ùêó6òRïv=Úÿ2ìÖ|ãh&ŠaŸ þò×!†}>u¬jj5xî…N‘004B±j¹zg¡ØY{¼o\<Ï{:þÈ.9é@%n”;ÏëƒÐ×B™jì@0óùj•¿ÞæÛˆ[ /÷gØ] ~¹Ý_Æíiׂwâä¥:-X_^¾DZ«÷%x 6úÖ¹¢_ìáºjË>ß®Y¹ÎË /ÚÙÍÖ Dµmo"‡’‘•¯ÖÑÒ‚Ö4m«Ã-ÊöÞîUd7PhXów‡]5T›Ü–îd™Â‡ÃL~û]¹oåà/µg|jÏ?u6ÑßndòÇóEü·{t¡€'ˆLn¡WÏÌm´r™ìËó­4g‡·+\"݇zhIŒ^Îfb—³Ìº¢Ý²DŒëÐê–à-Šî–#ͺH]$==aº€ô7Ó[w£ž Þ„L–ùª˜Ö\¦Ù;ú5Žvñ»8¯;ÈläZqq1 ww=gg¯ŒyÉþË”î’,ÌJæfÛpu}\ÅÛ,Qôö‹Ø/rhݵá#¢ ëì¸kÃzòŒ¼:ʤ Z0~i4 \+·?z¶Ux?í·gÕ \ù¬³If‹a¿÷Ðí^ ,ðŽKàéŒükõ·Ý!Zv'è¤W±Ç/]úŽ™ Œ‰ÚÃ…VR²Ñ(™ÒœqóÚ­O'–Šþ>´\1:˜§qš zÀÒ]5ÅwßÈd«³Cž†u ~¯l¨:‡üV–à*¸l’ˆIÊ+.ª!o{¸êšj¨¬¶áûý¶„œuváIþc'˜Â"9×÷m&\¯àºu6~\Á4ÑS³÷òO]_}{h9›C»ÿB=uõúi áR°€7aNhüZà9`fDÚ%ôk †H¿¥°±·D×OŒ*ô¤¥”$ ؘzëK.,÷c¸j*„9C´rlÁõG&ê;D·ù´ã~‡h«÷qÙ¹ÂÃÖ/{5òkt¾CôM{ß!<é]/Ãuöq@öBgãû•Ø-!gÎ~¦213ïzO Þžè ý±‰¶C‘[é$“;8Ûvÿ¶ž™.KÈÒÉâʧþ³Ÿ!%a”$x2ïÒÝ'qgÌU#—ª·!ð2ZŽg´× ¶ù±ÃIËϾÿ´¶!¤åî":óûõ¼Îš?‚;ÁS6)îÛ®J Kðvoåýï×*TœCaf¦ó ›+\¡êDm×îÙ½çݧHs8ÿnƒI'´ct¿ ðߎÝUhËF¾|#óêdŒ]]ËYÍ@ƒ¯v€ºT³{ÃbßÙ§À²†\æÖìÞÁj~ͬ6)lüYÉû4$„{îWÉûù³`1ÉXHçƒÌ83Ó¾ ?‰æÖ›,¶owØÜû‹-yço?>Û®öL7ä;îšãÙ™Uv?C Ç«Md~ù å—ݾÇÏæèî´åèÓÊt+v}ð¼½µ3„Eª´h¬m­.…j2+Þ± w°B. qŽs>›;m¯m—¤Í'°E${à­œ]bh‹¸u•O³EtÄÌ.Qj‹Ø†ÕûéÅæ oŒ?M³ÔÁ»D;kíÕñúßþÙ/º½€ öÎ ðuQµ\Fw¿ã¡ ¹1_ŒðµPcvLKrÄ%±Kä¡@O„A7&¨Y¶]þvt=6Ö/McíhgÙ¿(‰)ñ1JÕÔ ê²,e ¹În¦Xž;Ì?®P¿=i™ÂÙõúúÝ!ÚJ|`÷³“W¼Çø’)®5> ^Ìff®iÌ»7ùLöãñ[fnoe„~x\üvõÒ+»è´¶¼÷åÈùøVákÌm¹?Z{A;›"¼à·òVá«u2Åzñ‹óB×rq®w]Á—:ü嵆3ù«"|‹7f–´†ê;èã2€[©vmª¾dæ¯vföóÂc¦` Q÷¨¿™ýQ[uþß`ûm¹òèÿá÷ô¾¤ñ½Ê–çc½”Yøù ­Ð™ìê^.³p÷skyo÷Ó-ºúüãóvááîz}Ö¹ÌÂÊb½Úú—¥â·›÷gøf;‘;8Ÿ2–F¨o¯ TùT$zèÈ=YgÉz÷w´†`•o¼6x]9÷2Qñóùñ4€Ü4Õñõ£+ðï¡…‡í`{,»ºÁˆ÷®ð&\gyÇ9ÉO–ãöškvà½%×+ü,‡5·¨ âç–sg óº°À\ Ó°’½€>V^†©hî=®h5;û¼»J(DΆļ<5²†bKÊ(]ਆÛ[voiÇv’M¬½’ ÔòËoÖ,ê´Ð«¨Þ½E–Dœ}‹['x&‡\&ßvÑávsíܦÚBo¹D:/^ؼàR®—/¸dÉr+ï'ø¼ZóoÖÙÕ*1n>ºñzrŒ ÉÀ\hŸ싳pûöº7Ä­4ã¶Ø#=ŸÒ‚>Hó±ÈânÌðÏ#Æch vŠøºöØ{>ÇovÇê;~ƒì·ÌlvÇXÑålóð¶\¯£øœë©äž%Щ¡Ï<þn¶®¬ò·B·lDí0£#è9p¾Uøô¡'bcj8ŽþÅ _~(Ï"Uà¦æÌF=˜,ÚíÁ¥ÕCj;÷©j§*7û†þ‘Ižáçý y¾³îjø…У²¼_#»WÅv¼.Ü gàïn,¬ÛA9LÜÀþjÀ?ž=£c|µÙÐ{”›£P÷]pòL·ƒ(( ¶ƒ&zÈú™²å/,Ú½……UxPkTÑ1nµüõg¾‡¿²¦ñ6rŸJNØÒr0wßßÕ?9DNì+øÅ4¤ï9ÈãF×Ñé*:7ØvoÓCX_¿Yð<úmßwŒ8«‘¹üúúŠÖƒ&¼}ŸáýÚúü„žê HZ _Ëm¿dà'7ß1×gˆ‚x ~ƒ£Ï¿¬ÜÄÞÅ»ð´g¬Ávß@Îõοÿx±W+ÃnkÓ{êpu?YöYÅ„äÝ^ÛΞ_µ™êÛ\_C+wÒ@çâ‚EŒÑáR°hg‡cô⓱5Ì]´àþ¤eܼ^¬;Áî *`Ê‘¶|ë§×éc sÛ±;½¿7|¥Š¦‰v~“i¢ŽùVThCèStY¦wÒ‘Ñ;ÁGÀêñ=\K8 ×Ѫo”¿µ/TøýÁ©‹ðukO¾uñvþþüùøZµhįë¤."ÙâÈœ š,"Ÿ^53_Ë N·áU']¼ëÜ™³Ð?š éàJfjÃ[{Ø2Ös"FüüzpÔ©Ypî&êWOùåvrÃÞŒ‡B凜‘d;(/B„¾ JŠHªÒJŠH¼ÔJŠH€ã5oÇý¶ z@I‰·º@)c ºõ›Ø‚j¥—ªÚÇû´ä \z\%E$àͨ%E$¾Œ.PRD’í JP2‰á‘héÔJŠHÌßèe8:, ”‡z’ý”‚’"ÒÙª«%é¢ˤÛå`Ü.&%E$§&PRDâ=´.PRDbWE¥ *HØ2‰éU] ¤ˆÞ°ŸPRD^ðæËj¿;r"ÐJŠHàź¥%=âóÊ$øÇ‚r»_’%E$>­é%E$.kº@fqeA¹rxý&p $ »&PRD×eD(yÓ«Ö˾>JÿæV9()"ê) JA7§H=ôñ¤œ”Rzèä ¤ˆ¤…@(#œa…A‰ÆQuy¨Z(YgXM ô‰ßÁVð@é]&(/Þ½ŽuyÐ#àåÕGC!()"I‘ÖJŠÈàb£”gXQP2 ¥D]¬¶ÓÊðà¿PîRD&ÁMŠÖ+»‡V JŠHܳ%VK¶^ñ“ö°gj%E$ƒµ  .6Ú@ào¦€’á‰åZ¯~í rPRD¢G@-(?ñÊätÜ(áC@(=N!(ÅMLïnÊð!ðÛ·XSõ dp£ ”‘tË¡”‘žd~îT,|ó}œù›ðüsÐðˆØ oA."übdùYÜ«÷Ï£@`…t9,¢÷Yÿ8J D,dJv¶Õ˜h+kg“¹‰yuÒª†Ä\>mæììææ6|,ëÈ7µžwÔ"X”2­¬‰£ä=Ð"|'KVîq½Iߎ‡u¤Ä’¥rõ³F¢n²&ëý‹eø¤—-{öM@ì,XðMÙ‚P|m"ÑYÂè¢mg«[äƒ8Suô®W×Søq`劕ŠÝû¶90ÖFý!ò(¨"ËåU(…&›=+7i­; žœ‰ƒˆi:›ã’nc0xsóy¹:Û[~8jùŸyVë·ž„ÿü%óenà­íuw±Ë>" UŽã Æ*x#å»^3…ën;)ÚÒÎ`Wïmz\ üV··ˆ@r´qÝQcýCÅd蕽ÇÓD¶í‰«~Á!ýÎ1n‚¶i“Åd!šæøE¡Ø³¼gy) ÄzÆ'¤gœ}µ{ƒÃüáA5¿ü–Í`í ?NË÷°ûŸôóÝ|Ò»¨¹ùZgžt×øÞ»ëýë.Òø!dêhÖ«†Öç‘÷WÕ§Õ¾â÷—ª-PÄ Ô æyŸÊ?ãÿÍó¾ È@™"C¾æ ŸE&``D`Ǻd Xd†I¯4†|‘n|ÎMSdÈç•uÖÏ{Ò”òÁôýçÆ‡©oe†|‘n|dשÊ/^ Êû‡5é4ójPRDR*B(m®™4̺z¿˜”ŠÂëÅ}kÉÁC(…]­DAùõ5Þ"“l5’"ðÃëÕ€26¼>{q{ýï¯çúÖºðL Êj5~wJNkÑ ¬¦%E$`ÓT‚’"2Ô~P JvM“åÍ‹¨o-Ži%E$bص2<‘Éž_©%E¤·¹ÕJú1IwP” á¼và‹F¦ d#ÛS;¼;4‘P‚ô’"’«Rååsr3i"µÒJŠÈ!©”"?_w¸\()"½Á ¤ˆt.“”­zò>Ž· @PÖUƒ’"’l94’"Ò¿Ø(%W¥J4“,ïðŽOº@É”éeÀá]7©Þƒ{hÅ ¤ˆ‚Ña“N#EsµáRxšŠü¸ÑPä,6z@I‰›P~~R»€·º@I œ2U Œ(š†E± >¦Pg@ÑÆc¥™”Í0ã¡9 ÈÁÆÔ0ÿ# 15 #’JF´áÖÖÔ°€Zu”Ÿn”g¡ÀËhN ȤÊ(‡K)@¹Ä+“˜ŠÐšÆlµWhÅ ¤ˆ$fGy”S&qkHkj˜×åЛÂÆ€"à ÉêK ó û!Pî)´Y›JŠHLEhM È$ên©aÞ ­ ”"G¬^@CjF$¾ŒÖÔ°xM(‹7ëŸÑ/k™ùÇÅG*:uÉíÜrÕœØ$Ð1Üê@Ñõ‹F]¯øsæ“Qn=`uQp¦0 ç;›û¸Œ?.úGŸüÚ—­wG´Ô«@¼T¯vìJpÙGžÝkGÈ<ÊÂe´‰SåaËb"èÆp4fïe‚¨Z=îA}X<‚Š´¬Å»†QÏÑÏ’«‚ùaú%oH~fϾMêð›ëùåË_oÔ* }Ä!“AOú²±öz·ÆÑÈ`_ä‰ï®¯7OúæU­¸Š$;-ãf«T…?¼ÙÀ7­Õ•¿½_]uå?¬ó[Ñ/]šûezZ¡¡¨NÓS? ?prbÆÖÛ}¿™÷…Å„Åg!å›x†Y\ ŠpY‰Q¶M“µ~ E©„_ÞÝCóµÚSaÇÇœµ×a0¼)<ØU{i¸Äš{KnO²ìö ïND5S¶ÃW@²P®^»'£Ø…B>–'­m‚–å­íYµêÌ|¾9ºXE w=Ðsåoˇk®Î8Þ®Ï Bc2ªàCk¶‘K@‰z­ À“¾ßË/E´Œ}oš:LîÚ¶ßµmêvpæ¢c÷†Õ>§ò|Pa[ów×=s\ªÖ© Sä± ,xw³†ý*½»Ù%E$ÕuAyü±ÙH JŠH@Òô€2~"_”K'ÝÈBü¹¸ lT%AIé€’"Ò‘Áé%g²X”§5+”¼í PRD¢ïF(ùÆÍc«S1ë AI(ª%o"_”ƒ‹žÀî”UtQP¶j©AI±‚F3jAIé+êAI‰—Îä Ü3MPRDâ.PRDW()"ÑwóþÇ|M (E} ¤ˆôí’€òÃÝJ¢##QtQPvê AIéi= ¤ˆd¥ d¢ÃDA¹‘7’"2¤îV JŠH|öÔJóËÎk5ïh9ô’ëÚ«”‘øåþc_²ƒ9镆PRD²¸Q Jv±ÑJúfñeâAÉÄ^%eHÝ­”‘øÀ®”+µï‹L™À<(Ã{h- ¤ˆE.(Ï^òÍÕa#øì?”ƒ’Å&PRDúõ ¤ˆÄŸ†ÊÆk)5()"IkH()"Al¤xPf]V"÷®‘¸QJúʸs« ”Œ‡ÛË–åx‰)“dŽ@()"™í ZPRDzâ$ ¤ïØ¡¾]Pâ¨Sƒ’"Ëàt2l, Jã|ÿÈ8P2¸Q JúÊÀg ª”|_ŽtWåA¹ÞŠÜ»b¤©”ÌvP()"©8I()"щ 0÷µ ”‘Xd¡ ”‚:›HP—¶¬D]Œ] ¤ˆô¶ƒ:@I‰ÛvK;òÚ€“jEà@éëC«%E¤7® ”‘ø¥ ”Æíi7¨ÐJŠHô@ke¬Î& ”£í¥Ï£í毵ª=ßø>[ÙlSµ Ulrþí/²tÆå`ºrAˆ’:p»²kÏ0­ÂsÆ5LC†,A_QǬˆ”µ²m Š÷†z¹ªZÖñskÆÚhR&æÈ\]¶ÎNŒÅ÷² ?æõæ.|T>çá *ÏCT? ¬/o+뼉1Ó:ß\ÿ༤{‰ÞìÄ^)ÿDõÆš¿»ÂËœ–é›ö© :tKmðâr°àÛß[±rݹ!"[êÖ xÚ†€~±íl¦8†‹ úÛ«Cg±q§žác¼dåj côµ˜æåÆéÐÝݣąÝ-¸jÝ­ÜÃiËX»Ü[¶r‰sƒXö’ÞÍ£"|;kˆ)tn(¥Ó‰ï¸:¯¬éUÄèxE¬“èñ>ÿx³â>˹µúv£>Zím÷Oë“Ì'ø·ÇÏÏËíËA'ÿiwЙ¿FZuëýÏŽeÍ7Žf|E'… =2³Á_ÞãõÞtÃZ9Y8õ 8æ$ Es͘‹nÄ&0_>³±èèI[‡u¬¹Œ²y*p8„+Ã飥Ÿy¹Ûx˜A,˜W“…I°\ ZvÖ™¹ˆîð|ùÛûîÜ®›ù“ð‹ ÚQn] ¬ó¥ëJ"ãfø~á ú¶7kWeX©!ºé›ö™lü|Ð-EˆßèYgo; cíh²dÛ+(ÜçC·´‰Pùp€Wcä316Ö^¯mäHÜêW-cÓ,ìÏT™Õ%Ï5n.y7´‚ÜCJø†¢»ÙRfÜô—ò·Õ¯‡ÚVîøS†Ù xº ŸâD’«º|^¤ç à›&4ÌÂÝ\’® βÃfzùn.Îôò>˜*M$m¬ªFÅI‚öèÒB$h¬ŒòÑÇ}´«{íf¿·—]úÑ]2ögðSWÃŇËëìàxõh7ߨÔ3ÆùáÜIàCT[ð‰­g½'Í÷Ka뉮·ðª‡fpk tÌg±(`­“„ådóûÚÛùÕÞE ú4t¶Zºƒ.~ÆzÓ,¡‚áÕ¶"¿Žã;,á²ÝÁ%øár EþîcÏÊU›&n¦8oúÄkDì±â¯¸£ÂfùëÏù%êRc ®ü £Ö+³ð5c‡V—áúÈÎ>Ÿ´gšfY]Bz7q#»› »ƒ—;¿GwPM#Â?±2¯¯Anš°Oa‚zòF>­ÁkZ¹â}Y_#‚0…1:P5¦Ë¡«Aš÷NÉÒˆ@uI²A¨zZÐÔˆÀÚA·¡¶ñZÎ~=­"-5RÃÿ~YM¾‹ˆßBÅÓM?<“í"¼jÏËê-ù>?:žû/#Ü€ {2E[~%¤Ûøþ`2µÍζÖ7pÍFƒ]øï´™í¾À^ß¹ŒHf¯Yø5÷oòЗeójvn-ÔÁß_A†8øüÿ¸Øíã˜j4ãjµƒmåàkÔà1æ®"â&Jª'á4‹áöGx ~–!¦Œ‰ÝÙ3mò¦½–€uvµZC„U¨ÙWëìa£Äíš9úUÚ½ƒt,¸´ÍâÌ ¶i»:é ×rÓ:›Ì¬Zƒ“"‚®Ñ‡åút@·ûðM ?–¿]ž® °S´Ý?„_Õ÷ë¼×[è¼`áAb”fmøÞ›}øAં /à ?Я¾é­"ù4êä£ÝÆ ³Ù~ê÷ÆÕí‰u÷k'¯DÝ=Iú ¿€¬ôa ?MÝ] ËcÊ RGÇÝ!Ú“Gnàú@IH¼(Úd–ÅöV!0tŸ¾n£æâV´ÓžunN·ÿ­=sx[èd\3nϪ¼xm_2”°í>Ú[&’¨#/Ó*]?h„0â—àU— Ù@Úv¹nÜlÕZ¸«>¿Q@Ûç5xÔί Ã|ÅתCtÜY'H¾<ýØE Àg·À>~±ã»üáÃ.°hÞÃá"ZKÖáö½Ô!kÄÚ÷ j¦XçÃq5"kÛ¹µø\îÝWui¥Ýòë ÿe­·Ó½Ýݳ–:ÆÖOx’ÝÊÁ_Ì×YìVw;µ£îzãeyxеOáa··‘oTW¾¬î.ýÐ+<oÂ?.ì¹]uûb»{»g¬ä‹øË݇áA?¯µ½ _÷Óî.ïí~e²ïÚåÌÂÝóvéö¬9?kâà¸ÿøåz ¾Ê\gø|Zû_åð)³°RÙʬUôÝ”ŒùÉýêÏ£_›ðí:ìí¯Ûåq·›…o&³ßåÍ!¾~ewý®\3fæÎêWûÆaus°Y+g®WÎ7ÏÆ°uºP¾ú¼½šoد?ÊãÎãjŽ /Ónäö ËÕlwiùá¨ußë$L|T€gåFè¸s>ûàÖö¥2í°Î7ô5¬A§¶¤pŠëÔR©¼ã ù4‰N0VŽ,¶É{6þ¡¸]Ïf´õOÓc™;®À=™ÝöK-çdÆ©2äçàMð Ñ<éòî¦ ßN&ë]fùòûKhÏí"yÝòWMÔW&ß ¬^ž”Ì­^Ù²u6¾†kjkœÞ{âä¤GGO‰gk!ÓØ=xRäqJÖкká=ô^­ ïR!cwm´×„÷áût´*#:ãë ³6ZmȆ 3ð-žUqà ÂSÝÕÌ‹…î5Ü;nípÓÉÇI?Ãÿ³×B%¯kËã~†o¸Ñµ ë~~ )ÚÖp¡:¡ïW´?äJý¥‰¬†”$,Í7¯Ýút*À¯|"_ßè`¶gª²ÿçP®3µ¯³ç“Œ°Í½*üV;;kWWy_­Í}¬ãF[~ùm1‹ë>6¦Dáõul¼… ÏÑ hß´Ü»Wôºp9ÉY3èŸÛðw³oøA;=¯xÂý¿6¢ráí͚œ§ðoož]ÚáÓójüц·ôµÿ¸ÿ¤ä¶»¹üº×ÝǨ`ÂP¥kš‡h˜t}‡>Fœg¨Ï0 «Î3d«¤×¹ÚCwe´ÆÖùÂXXÕÕIøtrØë9ÿj„6­Ëï3è‘©ào-‹îöµ>Kžôu[¹·ë*|"¾6ðךDKä_œd:ð!+ÕÑãóDz6gÔxΠŸ‚fkqÑ\þB{þ:ö;µâ×J@vD¸èΞáÏí×ðÏ¡0 bô+ÜV\½ÿb`¹|Á[j|`'»jºò£ÇèòpŒžÖ&|´Ðq~p¼ØØ½oÃ!Í#à‘Stžš> €Î{ú{ô®2&þÕ‚Î8+¡ª± ¡U©ø¿k÷ЀÛvo“:|µž¿‘ò,:×ß?ý[68FÐA|‚âzÆ}ê¯3+p÷ˆÏþ(2ápèˆvxÏ5æÞÀw´¾é!³^¼ÿ:UlrÆsÜ}ÈB`ÓÝæl=z)&‹„Q˜–† Òâ­ç«›O¹™w'x:«ÌðV3«çî)åì3ÜÜo^ Ÿ¿üøni.àï~¢›ÖXlw–Ž×¯áOµNo£áÁʇ5øïvñ†oø|Ò:s¶~ÕƒëÁû››Ïôð²Úxÿú ¿ xð8øˆ-ð4³»†ßÎÊù‡74é_÷ó'ÜÛpþîýÙ½‚ý|·2GOðÐð6o¿µ†_·ŸýÖÛ‡šæ)>¥ƒWùu¨¶/áëÙøRtŒ‚W/}._d~âCÑÊÐÚŒž2¯9ø‘ŽÐ‰Ë>„ÿ2Óë϶ड़8ïró=úÛê<·UÉsÞñÕG|czW›¿vÌ/ŸÞPk}füÏWr»«ødß`þþèú9¼ê¸‹_w´øf~‚wøñ#¼ª±Ê¼_øžnvÆÖ¯}÷­lÀ¿=''Ct(D×t^£º{…_¾îÏð|y‡¯0xý6=|z¾Á¿ë¯”~ŽðÁg9|ûàù~ÝgäøÒÎ×—¿<"gÏst|¶ãMç§ð· ?}o\A'Iò¹ž7á šý´24vÎÉ=Í/›ÃOÍÖÎsãüSýü‹'ts—ׇϟð «¼¢OŸÖ|3ðwNŽ©+¯ð ®V»øÕºëÍÖ^aãܹiðYÆß!þHð[²>áO¯zþ~÷Mø¬ þ4«­Áh=øi¥x¸Ýk­âÓ5>ˆ»Ÿë|³·¾ÿíÿp·ükð?Uä–:gu †¯øFb@ÁímÂßí\cÜÐ3÷[íîÐç›"~›³G»£—Y£øõ:þdL¶îáøÿš{Ïí8rmôÿ^Ë÷ §±b«rdIV°$»Ç3ã Û²ÆIÎgûϹöC¬"@RW±ú[gíwÍkBE6TA>äѧƒEžñ¿óG; /‹óA“·7S«ó’Cñ~&y=÷dó¬9x|Òó„#—¶#ÇŽÍ~]ì>»>uNmÐÌýÁ–í8vö&ÄyØ·5Á¦=)<ã|¥%w ¡´(ažk¬©§óóÒTMÍAíü3;)ÿL–C_¥¿´æÊ¨“X ½þ4"¼ ÈN^Óü×¶îáðqÈc¡ž¯ª)ãVa–WõÉP×7ã½ão Ixªˆe³9Xíõâµxñøçm›ë<;DÝûsÑ­‚ø3i~­ZÝúõæ7TðôÞ6Ä=*®¾¼¹ G¤¿i62¼{¥§*ÑûÇßÔ´óÎñªž­ê),T˜+)ž.þ†8ÖJVÿ€Pâ:7`óš™Ál$ë× äXƒíOê¹¹Eˆ+©Q2ûÛNr>ýúÌíßÌôDãbÒTG±Üê™Ñ‹_WWõtZ« /éÐêÝÝøž+›ßRÿºÕV4h2¶êÜ9^ƒ¸:7JüñêgmfkjަbBXþùËT‚bpPÐ$5Jû÷lIMpï,§O³‚/MͯëÖàg2c*¤„?¬k¥!uP+ôë'è¶¿_èN½g %ºùBÏB}WòrézW¯ÿš÷[Ç{ß¾¬Ã’½øðʵý–æb:|ýû*¤ýv>Ù nô=zË6è´’Ì-½¼ž¼¾XÓ¬ù  Ã¥ùª,Ãe.yõeëîY5#¸·WºVM+ð«ÍvçÎô·¬k6±®·ä¨TRo$¶¢OûŒ ã¡×ó³×Y7ºÿ~yùÃâæu˜­•B7úG½áåË+¨Õ‹\M̦>x¡ö£\±sºÕw«æ[†¯ºýз Ú•ö{yõó:ü¡ÒE“ˆhz„IDèí«Ëæ»}¼„¯ð~­; 3›¸€ƒ§Ldž&¯]?Zi¾ÍRÔoÌ·¬óÉYøA8v½ÐýFwõ«!ôRMpév `‹æ;L6—.›¯ýWåºbÉ.Å²ç ˜ÄØÒËõôÆë?Çz²«g›ð`5fW}î{OvÓ?VŸ¿ZpGÍ5Ý£„… ­ø­úÚa’õ`ùٖ߯fsÅ{ߣ›Éîüî=·¯“Ÿ2×8çÅY}ÊœuÎöJŠÓ3Ê9¿]Ôi0³ß&tO}‡¡!àÙO&ã95e{òëÏhL4V\8í®ˆ&àšü#ú>ÞvòúηŠ|äfïàá³æ»yš –^C‡lW“®0Ÿq¬};|F©vlf MÍŒÛnñ´Öß•INÀ·¡}Zû-5Ÿ}eW² úÃ÷¢IpØ?4]k´¢‹zß¡ýJuÒåÓ'Óo^–¹ªþoº°þöËб+›ÊƒÞ¥~¾à !s¬ m½îh3.”MF'×y?Xˆ›saÝõ›W6ôi Ì¦Cj̧<ƒ=WÍyJvu™¿XßJoüý ›¾4XhÜRÞx­„äñ}Øg¬‚ãë/¤>’Þ˜/îÆû›k•?Ü’R~ÚC‡ô‘ûïÍÕm‘:ˆ·¶ÖfýT¹tÿÏž}ä´SâÁMNv†¦ îâÅX…ï»óûjôžðo锟õŸ¥vñú•»yñóß²ù TÏP iCƒØÿÈ×H<ÓD«IÓ€þ´.]ÒÙA¢évyª z‹ ¼éKº+@ºyÕÆDJ7øÈÖ6V“K64±Ž½$NŸz|×tOhÃtX?Ì[µ^^5n¢|‹6œz´³d>²÷¯®íëC “¹ÛÉ«wõ=½UBÙúø¦îž¯®äøºÞöÛßM×캌^çÓ?îª)ðk·ï)ÿ5Þ:ýš^ôÍ]ûnˆÿö³Û&I0²µÖ›–€'2OÂ}ëãý”úóíÜ÷¶Ÿ/‹/èõZ½§œÓŸ÷Lè©ZÃ<,kݽ«‚Õw{Ñ­Ÿ¿žžý‚À ˜«”OyA=ÉP«¿¥&ËôçÆŠ¾ÿæÏƒW6 T\y¤ó:©µûãåè™Néçuh¡Î?ÞÕù–Íå_»wtB¨ÉOA¦(ÏÖ’gã7+[ÙÜ¿×ëkû;ºšÉußQî¾TÕ?@bì¯Û›·WÒ]ÕøòúæûÇ»:'¦S„ê_ù­Ý¿7ÿþ¨“oªñ×ûÍ6Ÿ§5¤u†UýŒNéé ãîÚì‹­×wþÞÞÞZ^¾«!ÝxûàõØl _ØË¼~»sùèÖ£‹ß¢Íí·îüÕ¤‹’½—D)ûõ‘F¨s¢[sŸooë$äÅÝ×&?£óªvïÇó÷_ÎÝBæ2:6—¶e4Kx04oŸ•ʽ­šÙg¼{ -mg©Iu{ÿŸ§ñRa!_à§>$´3‰sEdÃlKx¹¹Ñe[¢É#¹-áóòÙY¡9ŸðÓo[<ºL6Õ©(&RAþüîÃàŒÎ)ÛÎðò½"i[ÂçÅ+"5p^¼Ë»°gnE Ÿ/_ÔëžÉË;ãS¡'„U‚7ÑÉÜ“;4±ÀÓJÇ í²uÔÎLWMÜÑ&,t†Äe9XXžê »‰°?%^„ Kä:WñT+m !òÖ““U³ê®Â›u à¾(À¬IÀ;hàtrXËWÕ´o{CÇ °½£ÆøíÒu¼Çïõß·oÁT»Š þV1Ãúö®žþó4‹nÝ+) 2LÄ$SÎHƒ “¹`O"?+€È»æ@ö>d°©r ~Áä@ô¥A>>E¹»¿.­µ;"J›05tPŸŠÎ†Ø K]†‚Ê6Åð´4¡º™­¹ôìá„@:¹ Ï:L!ÑVégÓ¤ã€jÙæ% ôÞQ÷êÂo3ƒ5ûvÞÞ,4ÓÌÖª«.¤5¿€¢#½&|ýM/ÎÞ¬`›çX+˜ì<û¹¿½ºd¶`(ϔގ÷˰헫Äê#«›GŽ¿Û¶ Ž4ºå%8΋aO.°#ôÚTÃâéÞ C!†ý®H¥OÐ k=cØÅ…I?Am4ø 7f/Â&©-Ø!³LÝŸyiŸÇµM2¿ú¹ffU:!¦0 ×|&sÝä%v–ñ—V•{ƒpÒûn;ý†éôÐ"5NÓ[ÂÜ»õ=úÛ(àì‡fú}ûìÐÙ4)ªÅøpóÔéw—¹7YÈïpŽÈ ,p=ƒ-»ÛÞ.=¸¸t#}tQùó1l).ν½~º¿Å;Àº×4UÈõßê×v xOUí_\¼óä/óèÒòµ»ð¯Gæ_K'_\xví>üàsø™?௯/.Îmî\\ª–îAñüa ÿ¹?³T-¾R•fo]\|}òS‰•ÏT?ó'èûÈÕ¿îšTÿYƒßßc¾Cñøé'>g7áû¯žÿ{. šÏ„"CCzdt^ 1Gæ£Ó*N+˜d#ëÆj~Y¿ëfSßÙAã©#QN@1ÔÙA~ÜQ2W|ùîDMW>ÞÐÙAÕoL‹´ä:Šê²Oí¢È¥½… fÆ6ä8ûŒ‚e³bÊ\#84šä°5/Þ€%›Uý[༉8ìcZY±¹|;4F(!ÔdÚ•©ž]¾ ¡ ìš›o²B±I`6KØJøàqfRC0>ÛÌõ@gWš ¯^™˜ð_“ÂqÁ¢·Z¡s¢, kV •ª:½ä- ”fx·y¯Ùfµ€hg«†ŽÊ¦>mV ç–`ï$8çÊe æî%v!dõùŠvɪ¡¹‹Úh&J]ß;ò)"sú‚å¡ëÛËò‡7ÍØ›ï·¢÷-\¿-¾ì¶«QˆË5¯*é¬ÈâöGW>ß:€ÜU ¤°¸¤x™‹y2{|¼¯'§PCÜx[Î{ŸÀÄi³lXØû~×:ÅõO7•‹½ÎnݸΥ—Ögßyr œîð•‚¿Õ¾ý±õ®ëŸV/.<¸´5^wºð»~d‚·£ëÎáá¥?.¾€kP„kì)Týïžš`[†ú™î;3ºoËp®3{´,%)Î;ÊFáš “ûÓ:'ºgÚdЦ6À]0—mygòLa€3Îæ÷¥I³"g põ¯úÔ΢9ýÊÐ+CGî,²¥Õ7x»©ôn𦧾Ü7ááßñ•Ÿß± û’Ôl"ºu{@ë„3úpÚþ v`F“ßµ‡€Û„öÜ»½—£Õ³OÕÒë78Q@êSÍÆ–Žwéoy.G³=ÆÎùÌÆ“©›»WéM°_³`Ô,ðúªÙf©çÅí`®ZµyB˜Ý&‘¿×òeòzwcÛòŸæï¶ tÈñæÝ !¥r°†8»×2Y±¤©‹Wnº½–ÉÜ—µíäuz÷¡¾H]wÐå멦´×R·bwÞOy¯%lšHÜ4jâu†ËpøË† –âHˆ"_›-3êm6¹’äåŠËr˜/è¯ íÑm¶ÂTv{2T²´ÎO+möd­Yqxd7\B:€Ì-7¸]°KE¨O«Ïb³†`ü dx‹Ýèöìóæä¦ç7ãÅïKŠÞlìAÀ» ŸÅ† v÷ÍÏäkê[ú¨ìð½^±GÂí=ÙtÍaHÀOê›ÊÊ€ûhìÒw§•¹Žͯúbš?^¿¸'oͺÿ× |P˰Æh¶?5ù)õÑì®~Y·;gí²OÞ|É•&Çõ*׎ ÔWèC¹lVÿ.lDzúî 9DmŽõ»–Kï\ŸÖ¬%äpŽÉ¦ò/ÛÍU•p:#,'4G³ô~çýÉ~{Vgïî\>Z<عüæùS» ¦¨Ÿ©êÓ3ý/½Fóµô®MB²Ü¿üÈMËcõ3[sŸßõ>MYSáØÝ»–5¨¹‚{Ÿ8:áãéSåt§™vö˜M­ÆÐ¨€&½~2Ÿ.ïoåÏ÷>ÿõí‰-Ýk噊k¯¬i¥5†å·ÏÖ£³Ã0ç:#±³Ã°&² ŽÄlöã⎆éŸé‰^úµ×ýDRˆàPRõÅ/,zÓï/Ïárñ=îðć›/'›Ó¥ˆöpóÓÜû uÚhÔkÝ(ºÒ ~d$Œaš¾È‡ºošY¼þ{ñrKQ‰½Md7éS{ð™0Û3þ­cLjÌxƒb¢Q³ãce³i¼½q×l2‘ˆ1  qZ¿q ºç{rK¾˜Ä™/8†Mû ªñn{ÇF}»[í JÔ˜òE¹âÝ»cM¯¹€ï[³ ›ž÷V”¿¶§÷˪×òq»ûÖ’&€êxÔ›Mi63­OÕ7x¯ :‡«zz¼ºýápYÅW7_½Ú\_üaœÍý¯Í‚³ê{‹ÇÇëú³7YÚåO—L 8½RùÐõ±‰W WÏÚ}<š·¹8È~«!iÁf,uqevÉüÌþ’•Œ3ÛÆûÇ+¿cD7¾|ÿ„QN9ÂÃ_µUu½œsÀÖ¯/ ?^Ù†ÍIÍß¶—ÜßÔ„æñFó‡ƒe÷Åßhþp/nÿðRÏÕ£å½ëóNæ~ZÏÖö¶Ñßà×mC{#ÈDÎ7GR\žK^üüø[ýáa¬‹ª]TÅû›®ñWúxX%»¹¨ÙÿzèhØ{RÁŒ«RÝãÞõÔ½eðpÜ÷+ªøX·;o^ÐòýçéòGŸRXI¤ñÚe=©_}‰–ŸŽa^£ŸÑ^óÙÒÎòáÚí:ËljÀÕK,ÞšŠÒód›4Š×oú¶ÛÌB½uóÚÑŸ;ï®_l"´~ L,ì,^ý}svÿà ™ûüê²ýÜžf­ñçöæž½³Pž¨âãeÛÞ<‰T´w0§þõBÏ8'ÕŸÓc´Ì^nþ£ÏÙBÿѱÀâµ—•Š·çœ™auÀí,/X/pÛxØ'x¤}ÈTå_ûÛ¯?Ýx„ªÏ[Ÿ/ÜŒ—®üÛSeu9³üð÷ç£÷~|8þp2£& * Y¾qÇOÞ}½ùãèèÏ£ÿókçëÛß_ŽN~ͬÌ,ßx´}pPå;Go¿¾;šY¤i&™UmÎ1{V|y¶¶ôúæ×òï4zG2w*Ò;ãp=3X/®nÿÖ§˜ã ‚/în¿»¤ªzã¼Þ)®öÍôåê³ñɺþäg_|ã­0‚…cÐ`…aëeó²ïœ8ר~öj*tÿóÈdÝÚ#ßò§ö;^þ5;Ò[¯lƒS«ì¿âY³4dz4ê&ßt §‹úüRUÜ5Õn.k'bÇ®Ì×þ}Õ~ºäË?lÿ@>ÿ·í–ðš^`;Ç2þÛ·íã¶RŒþ°·õÜ»óXöxöMÛWñ޳wíôeë7Ž÷¯lFÆí/Ý„ÁânlúåþÆC(>À¿9^ã>X4¼½R®ØcñŽõwo—®CÎóÁ²NPB0övã<ðÛîÛu»)“Tì}Õ®//eÉÿ¹„Ý5^s~¸õyt¬â»·ïÇzþtÆ\‰L“þ`s¥ý›kg·K•wñóvŒ¯ó5òêøÆ£ßW>ì>{w&˜íáŠêƒN^ü~¹iǧ/aìj‡­ Ùag£l?ž¿÷Lvlƒßý{Ù:äüoÕø›p‚äßq3”ü­36_á_©ù—"q´kLþÉP*Nu+/î}Õl3+ÿq_ù…bk7ýÉ];Eظ‚k6P½Q]Ó¡RäþWÛ)Ÿ|2±¬ê­/êØT§g/Ýÿ£ O6Þèš>¤Ì†V*Ø6ƒåî?›_õänTX7óÂvdU5þ‚·´¯§Ÿ›ªÑï#‰À½÷R…ýêoËm Ïŵð¦ë4¸­Âœ_ëßãÅèäuÛ¡çí0¸}µí··Íx£Åcèq·GØ__Þ¹µö5RÑê8Šò7·7ÏP¨OðøžqëO¿j‡ Ðÿ¹á¶S\hŽiý%*·[oNW»À§¢­>zø¹²ûŽo|øKßN§~F 5ï×üͦK°]ç·½næmumJÕ²‹¿f¶mÜg dó{£lÿÆ—èÝÕ“?®oæJx´][º£CKý¡ÂÝq©[òQ²âòÅ«[Wvš6ÞþÁØZF Ä7ŸìÅÐ%ž[6œ¾þtVWp”Ý®þPõ1ÏúÓnd}odO,¸w²^Y[{­·ˆéf^x÷N(sÿ˜A,²°¶úå!„ŒáOà—ÍV??¾‹ÌŽÝ@úýz3Õá&¨ÿïüóéõá/ÜTˆÍæ æçf7žv¶1Nnn÷Â'¿Õ¯>}î½{R­6ä•òáÜ]UíÒîÏK7#/¥ë»BÍ»Ìæ^bHÉñ¬¹ž© š_]»øÕi§;´m`çç£F»¹è—vg©}yº×ZAÕøõD¿/ý‡Ù7Wþ£Â€lϘk~ý—¤6|iæ‡íËxzúËØX¹ÿkÒ—AÞD3¬Aþa®ic%Fmlþ=Ø´1Z’Ú0 è«€l:nÀ°_ÎÐö_ZQ>5Y ²=Z:ÛšÐoÎòxeYlC)ñ uÅÍŸú1j/àݾº0Q“c£¾ê#ï–›çTçyø%y‰Ÿû¶éç Úäáï fM±ý­½ý-÷[`ªïè95VÀªc£ÖÇØ= »!^#˾*pñãQ‰í:Î®ã¢æ:H×þ-‰Ñ¢“ Ç «¸ø²¼Ž‹Ç××m¤¢ysÞè)Í!´³é:è>‡höSušFtŸCØA·iD÷9üLçiD÷98›ÎÓˆîsc´ŽÓˆîsÈiwžFtŸC@¨ÞyÑ}¡Öuc`îmzÖLØË³Mµ;'¶ Ü;š×/肾êѼí{ê ‚C2–À@‘n#Ýø{÷Ðî?|ŸÊþ¬Ù: +% &C®3Èñ¥e›ÿQ¯í_KúC2Ýs{´^ïÝ{Òæ«æšÓn.7Ç‹à á:íí·ÙGkg³wŒ¢w³³+M¶xeþ‚¹}6Þ}¹²Öˆ7µ˜µËaë7G( ýâç›O&¯^¾ äIÚY}4Ƹ{×çõÅ|ÐwÚì—I A– -Ëzµ{òç±”øª=:úõû›~$µutüád|ø¿#åUâó¿Hýþ[Ö3qRÍ$y® 9HÇo.ügöÎᇓ™÷Žÿ8š›ƒÓ{µ|ãǯo}øzrøã3+ZöäÎøñÁÎÌÊŒ®ñª©±:3«t‹^©*êÏs:•ö 4~uá?ÑÌ øÏ“ÿ‚27¾Á¿ï©ÿŒr«Ñ'<Ä’Û 1*«zÿƒÒ-õ¯Jöß™læÎÌóÑÌ» êoªZ%£¬®ó™,‰GU¬ð}¹ðŸ¼$²1’¥Næ*‹BTû haþ÷©ùg¬5Ujÿ÷BQ«§“Q’fæ÷+W›¢ú¦“"zøMZÂK«G3Ë»„&ØU¿œ¼;ú? Hëdfùѯ¯?þ׊”åÁØÿ½  øNýÄÌìÜÌ“¿Ûc 4Uä¡! õáaR B“¦Ž=4DA¢>鄸÷¶ÕE¡Ø¥G©Ø©ã¸EQ”{öŽqylËØÂm%Qdûbð))„’²2¬¶º( ÂZŽ5­¬’²2¬¶º( ÂZ ŽU}﫤¬ «­. ƒ°ÖýG™Ï˜ÿxÁ–‚ר Ákä±à5Z!vmuQ8y ©`ù<,ß ±‘Ûê¢0ÀòY þ••™€URV†ÕV…AXãÁ±V¹€URV†ÕV…AXÿà»çX%eeXµ4T°6{aíž=ÍH²Tðu%xVˆ„«. '÷I ¯‡ë„ȸ®º( ²øàl¢Ì°ŠÊʰÚê¢0kçØö\¬)uü_NQV†• Co³ÖÁcIøî9VIYV& ¼Í^X;Ç’]ç,Iq?’d9wNˆ]F[]vð#¹Ï'™àz›;_Þf¯w0xŒ›BåmNà7r!¢O3Áå:!6n.„¾¼Í^<ÊM !¢••aBèËÛì…uðŒiZ ½¨¬ «” Öf/¬ƒG“ðÝs¬’²2¬J$X›½°vϘvœ½€ÎĉTBæÓ ‘¿°u¹¤ƒû¨+ßê•àl¸®x9ÄÖÉàÑ,L]Ƭ ^²èàY¶¼ö£Rª"ƒP—¼iðdZù1)U‘BÐÏÓr¤ž‘ÔYY}«(ª$×¼ªC,õ0Kš =C(Fi‘'&Î¥iš;™Rî‘g—¬’G£¢Î!Ø*GiÅ&žEY¢EUU«ï´ÕE Ϩ63£ÖAPUq5óf$,Ui™Í|†YÈ(ŽsÐ+E…j i8S¨ßr?ž«è¢Ž¡<eEViYU¨WžCÝ:Õ@’¤Îgò|GumåêP =”ÕQ2ãš)F•š2œªÒû ÿy ƈí4Å5$›“/Ç£vèU ìŒ8+ÌZ¯eÙ¨T:ËË|”Ù¥x”—QYsðüøpr<3»µuãíÛß_~ýuS6ŠÿÕ;ÈâJ™#KFiUè—¯du\åZƒv]'õ(-+PI/ÎRÔq¤^¥zoì‘z ;*”ÅU­ì3ì<Eª)]±.ràÝ({êŸkš†·P¢ß‡–”ÑëZWfÕ—©,’äÄðꈓiUÃPW—º–Šu÷rÏT¼Ã¶ ռġ,;ÀÇPFÙ(.*ƒ!U°ÔË(ce *²2¹'–jÔŒõ' KLyQ˜ºÊ&™‘å¹B ©É?%VVR¡F«W ëD É3eä·P¯¦ÅHMžjx— TvL´°„®Ô6¯×ÚÕO:%à½Ôªã@cI¤Þ=¼ˆ´å©šŠ•Êã)Û¦Z.¢T½¾ˆ# 2)2S¯}Jµš«ˆZR!B’ä3u‡Ž‹Î0¯ìb¹êù¸‹Ìlêrű)¦I[Ô‰Q¿ˆþÙÕÃg¦– vÝ%­â˜^Q͹clŒd±“¹Ê¢Õž€;G(Öqű-ÖnĬy1ê=~¦Ùà“àS!4DA¢¾~˜CÐ žñ:BC$êë‡I1ÍàÉ^ÍþBpˆ†Dó4-‡êUË’ÂX%eeX®º( Á:x2Ùñ¼0VIY–«. °æ³Ì]¹cØk´41ì5Z!vmuQ8y àXRØò-M [Þ ‘‘]uQbùáùT-K c•”•a¹ê¢0ëð|ª–%…±JÊʰ\uQ‚uððÏñ¼0VIYV- ¬Í^X;‡“rǰ×hibØk´Bä \uQ8¹×p,)lñZp¸H茋ª‹Â‹ϧjYR«¨¬ ËU…!X‡çS¥Ôñ9EYV* ¼Í^X%Ï c•”•aeÂÁÛì…µs,ÙŸ;†üˆ£‰EØ;ä‚Ëh«‹Â~$âyGÃï œ4ª. CÞÁð|ªBˆçEeeX…øò6û`-†çS•BU,Äó¢²2¬X|y›½°žu)ŒURV†•Co³ÖžÑådÜ1ŒVRW– ƒo³Úî¹Ó ¹cÈo8šX„½uÕEa¿‘ ½£‰a‹g‚sFÕEaˆÅ‡çSBD/*+Ã*„З·Ù ëð|ªRˆèEeeX¥4H°6{a<štw QîXœî˜xܱçÔ(*QåQTšâ˜1V'×w§¨¤u‡¶7E%­KFQiecL[q2ÄF„¸öù•´®Kuű¡¨¨h;fM‹øá®Ý4þ 5‰Âhˆ‚D}àxøÅ04ƒ'–Ôׇщú@ñð‹ah†¿‘Fy ‡hHô×”R4õ£Â[: îÐ-÷IÄ[ABÇF„r—>¢‚íãòØRT°…[.‡$ ³ý𴆌á!””•aµ\I†uxÚFCÆð°JÊʰZ.‡$ ÁšNá♆Nâa•”•aµlI†uJG„·tÏk4lÏk8Þ :6Š ì´d Ïò ų|KQÁFn¹’0ÌòÃÓ62†‡URV†Õr9$aÖái ÃÃ*)+Ãj¹’0 ëð7(ÖÒ¸')+ꥡ‚µÙ ëÀ„·tÏk4lÏk8ÞŠ"6Š ìà5Z2†gñZp¸Ž¢‚Œë¸’0ÌâÃÓ62Æ**+Ãj¹’0 ëð´”:þ/§(+ÃJ…!‚·Ù ëð×ÍdÂÈ'*+ÃÊ„!‚·Ù ëÔoé$Ø´lìo Evñ#¹Ï·lïd‚“v\Iô¦p N!Äó¢²2¬B|y›½°OÛ(…x^TV†UJƒk³ÖÁ£Ê–Nâa•”•aÕÒ ÁÚì…uJ'·tÏ{ÔBñVœ±QaïÑ’1<Ëׂ vddÇå„a–ž¶ ñ¼¨¬ +_Þf/¬ƒ'@[*†‡URV†•Co³Ö)œmÞÒI<´’º2°T,x›½Ð|èyK'Á~£e£àŽx+HX éSÞæ~#"ú–âY<œ³ãrHÂ0‹OÛ(„ˆ^TV†U¡/o³Öái¥Ñ‹ÊʰJi`möÁ:ü54-ÄÃ*)+ê¤A‚µÙ ëÔOY7¤ωTBæñVœ°!¤PI÷QW¾Õ+ÁÙ:Š 6p]±r˜­‡çsDþÊ0U‘BÐüRƒ4x*ØU‘AH"Vƒ4…S×bâ" endstream endobj 86 0 obj<>stream J2iÌÊa ¦t꺡–àÎm)¸ƒ6¤$±„*éЭ¯áY4Í|‹E[0ËY9Ì¢ƒ§ó€¯áA"*2Àï å0HƒÇ3ÀÖð ØËEÊa¦°s(&(¢$QV¬ªûu/“PT¼N¬ )^'¶¤´ãÉR¨¤K'®ýÝ&@Iñ,Y7X'¬fÉÁsiÀ×ð )Íï å0HÃ_íg$ª"ƒg¬i ¤Q ˜x ˆ’ D’³r¨î¤Ñ^oã¢&¤xÛ-iodLDI‡n | ϶ Ù°˜øQó;H9̶ƒ'¹€¯áA"*2yÄÊa†¿ä¥ðcRª"ƒPĬi ôQ ˜x ˆ’ D™°r¨îôÑrF;³%­8ICH¡’.¹ò£R ¤x-‰c¬ V³èð4ÒÚJ©Š B]²r¤.—*LNQñ )Íî å0HS ‘Ń¢J2qÍÊa :ÄRçRT¢„STÙølŠJ”2ŠŠù•(#% •´®9E%Š<ŠŠ*ú•(æ%ó)* ˆOQ‰NQÑÌLQQ¢ÒàœE%­ LQi‹cÆX!œ\wÜ¢’t¹K¢?E¥Ê9E¥‘1mÅÉE¢ÚPTª¹TW[ÆJî:fÍŠèáλ¹»_lqž;BC$êkʇ_ B3xb H Q¨¯~1Í𬠙 8DC¢¿¡¤r ©o÷rtÔ¡E¥Â5z¯c£HB±KŸKQAöŽqyÜPV…ÁC†Ø¾û ç~L-C#””•a9‚‡$ Â:ü-Cc•”•a9‚‡$ Â:oÅ B “tpuå[½œ-â­ ×/ÙzðhVó708¢"…`ø¤iø»$y˜ªÈ $/Aš±USL0(¢$‘Ƽª{j³ EunKQ©p—Mi'¶„&™¼[kþ¶(PT°E5eY0Ëy9È¢Ãó9€¿!Í÷ å Hƒg(5{C"*2šíAÊ!úÞ)q.Eƒ"J2eÅËA ºg'¡¨àNl(*¸[Ò Úñd )LÒ¡×þnMQÁ–¬ˆ¬^²äð|ào`HDE Áð=H9Òð7HÄ™‰ªÈ Ä/AšiTSL0(¢$‘伪{º¯Eo\4¼mÑ’VðFÆD–LÞ­5Û6!ß!¾)Ùvx>GîG¥TE!x9ÒðwI~LJUdŠ˜—ƒ M!=§)&Q’(^Õ= ×…¢âíBÎhg¶¤'i)LÒ¡3W~Tª)*Ø¢%qŒUÁË!ír•EŠ †DTdê’—ƒ žLÓì ‰¨H!¶)AêIKQA ¨’ D\ór¨±Ôy•´ŽE¥•Ϥ¨¤uL)* ò(*iø0ŠJU2ŠJZU˜¢E¢’V5£¨€Ì£¨¢¢‘ŠJª· Š 0E¥Å95ŠJ•y•¦8fŒÂIÁuÇÝ)*q—»$úSTÊ”STÙÓVœ ±Q$!ª=EE ?Î¥ºâØ2VR×1kVDwí¦q÷‹-Îs§@Û@hˆ‚D}Mùð‹AhO,k¡! õ5ãÃ/¡þ2 ™ 8DC¢¿¡¤r ¤ûý)*¨C;6J‰;j&ô^ÇF‘„b—>—¢‚ìãò¸¡¬ ;‚‡$ ²ýð´–ŒJÊʰÁCaž¶Ñ’10VIY–#xH ¬ÃßùÐÒI0VIY–c£H ¬SºÏÞÑI°×hÙ(Øk8Þ :6Š$œ<pd lù–‚-ïx+ÈÈŽà! ƒ,?ð50$¢"…`ø¤iðô fkàígDE!Îx9Rϸé\Š E”d ’œ—ƒ@uO÷õ£¨à‹†‚·-ZÒ ÞȘȒɻµæk`Û&dÃbâ;DÃ÷ å ÛÏçÈý¨”ªÈ ä/AQYV& ¼Í^X§~±£“ ?âØ(ö¹à2Evð#¹Ï;6 ~™à¤ÁC½ƒái…Ï‹Êʰ !ðåmöÂ:ð50$¢"…`ø¤iðô fkàígDE!Îx9Òî5Ó Š(É@$9/êžîëGQÁ !o[´¤¼‘1‘%“wkÍ×À¶MȆÅÄwˆ†ïAÊA¶žÏ‘ûQ)U‘AÈ#^‚4xÞN³50$¢"ƒPļ©ïõçRT0(¢$Q&¼ª{® EÅÛ…œÑÎlI+NÒR˜¤Cg®ü¨TSR°EKâ«‚—ƒ,:üMgµ•R„ºäå Hƒ'Ó4[C"*R†íAÊA¦pÓ™¦˜ PTI"®y9T‡Xê\ŠJQpŠJ#ŸMQ)ÊQ |DQQ"Ÿ¢RT„¢¢Œ¢R¤£*-j¢RƒD)Ó¶œŽJ‘sŽŠ’UE–:ŽŠBâsT4´(ó8*EA8*JPåE6ÃN¤RDI¥)Žg…°RpÝqw’J—«1úsTÔ+d•F6F²ÜÉ\eQˆjOÀQQ¯ÑùTWÛbízfÍ‹Qï~:üM@Û@`ˆ~D{ý0)öw¿¦ã<4ÀÚ@hˆ‚D}ý0)† þâ ™ 8DC¢¿yš–CMýDbG'AýÙ±Q2ÜO3¡ó¶ÕE¡Ø£Ï¥¨ {ǸêÊ·z%8[$D®+¡bëáù‘¿0LU¤Ìó´iðT¨fk HTE!‰„r¤)î¬)&Q’Hc¡ªû(*¨s[BJ†»lJ;±©Å%“wkÍ×ÀJ ¶¨.# f¹P±èð|àk`HDEA?OË!ÏPj¶†DTdôó´i ‡;kŠ E”d ÊJ(‡€êžqœ„¢‚;±!¤àNl$¨ËÚZ\Ò¡×þnMIÁ–¬ˆ¬¡bÉáùÀ×ÀˆŠ‚yž–C žÔl ¼ûŒ¨È Ä™P4…{Í4Ń"J2I.”C@uO÷õ£¨à}‹†‚w- îĦ—LÞ­5_Û6!ûß!šçi9ĶÃó9r?*¥*2y$” u¿ã\H…“R„"Ê!¦žÓ Š(É@”‰PÕ= ×…¢âmBÎhg6Ôum-.éЙ+?*Õ”lÑ’8ƪÊ!þ¦³ÚJ©Š B] åHƒ'Ó4[C"*RæyZ4…›Î4Å¢J2q-”C@uˆ¥Î¥¨ä§¨4²ñÙ•P>|ØqH°Çh)(Øc8²Š" Š$œÜc86x-øZ'D¶uÕEaˆÁ‡§j´ UÔUFÕV…!P‡gj¤Ôå9EWU* ¼Í>P‡¿Ç"†P§~ð°ã âè')ö ¹à.ýDvð!¹Ä;ú ~™àŸ]uQò †§iB/ê*£*„p—·Ùêð,RâE]eT¥4\°6û@<–tä UÒUFUKÃk³Ô)jì¸#ØsÔBÆ‘TœQO$áäžÃ1/°ákÁû:!²±«.  ß÷fIè(ª¨«Œ*Â]Þf¨ƒ';ëC•t•Q% ÁÛìu ‡%;â+i+ãJ…a‚·ÙìÀ‡(;ÞòŽv’bO $@íDvð¹Æ;Ú 6x&øeW]†|xzF!„ñ¢®2ªBxy›} ÏÎ(…0^ÔUFUJÃk³ÔÁcHGÁP%]eT•4<°6û@ú‰Í–9‚H%d99Å Ö “tpuå½ü¬bûÖ/‡˜zxÎFä/þR )ý<-‡ <í© Õ!H"^@Ô÷ŒsI(Ñ‘aHc^Á4¥Ó›-wulË8IqwMi¶Œ&™¼KkB6(pN°A¡Œ ˜å¼bÐáùÀÇÀˆˆ† £ÂxQWU!¼¼Í>P§xã †*é*£*¥áµÙêðIV 'ê*£ª¤áµÙjwÑçH%l/@äo'lXÝLÒÁuÔ•oôJð³ˆüì[W¼bêáo(‹ü —TCŠÀ°¦I9Ñàs-ÍyFˆ¨† AñrÈìqZ— bLDG†!y9Ó”.2·ülÔ±-«;ÁÝ5¥زº™dò.­YÏØ ÀëÆÕ¼odÀ,çåƒo(°ž1"¢!C YÓ¤‚hð}šóŒ Í™&åDS¸ÿDó´1&¢#ÃPV¼‚i:÷ âlXݸ[æ7bXV7“tèÀµ¿…[óº±!+âë„—Cö×ÏŠÖ3FD4¤ kš”CMç–ALæ 2qÆË!ˆ¦Ð5Oc":2 IÎË!˜ºwà~æP}óô˜CH)yǦ 9æP Ø1‡*.`Ç&•Ì¡*ûÇ&5?æPÉücÿ˜C s˜Fä˜C%ð9lv8æðìëÇ·~#;Çú*–¡Ö‡Ì•gý$"ÖWf}O2ëÃ!ZØúªì[?.¹õ•Ì·¾Bâ[_C#Ö+b}%ð­ß ÌúqQbeþZ¶æ+õé‚ý[¡lÕ«F1¨•€qí ˆ+å/”m_%ƒÖ2xÀßÓ¯ V‘u öIóœPؼðePýÚæÁÂðœ`Qûà´›,Bý"âJ¹:02`Òo"®ªQ¯Â 4¯Â{L¿ ÔTm^‡=µ#?“Ì;ò³)ŽÙ  äŒO\wÜýÈÏ´ËÆ*L`þ}Î"ƒG2Q_sâÁkŠc†–àÁuÇŒEýÛ<E^ãMqÌ~‹´†ëžÖxRU¸ñ¶8f¿EZÃuOÕ| ³t>èµËB7V»ã¯ÈØ/t;eñ¦ì¥.˜”0©n®¸Hõæàˆ2'“ý „vÚ=kÚn^¦.ŒF–ƒ,©ôP¿Ž¢8‰w -ɳJûA'LàƒTûA¨ÇE¢…%x¯¶ùüT¡>«V %©AòÖRâ´ó‚ÓÒHýµVƒM ÿ€‘½.TKµ’T°fP&Ef*¶Å#¥+Tl›R¡W’ä3ö¤~°ã«•¢‰Ï úì”-N¡­Ê›ÁB[•sh«v Ž»áä}&¡ºÊ›-B[=í; ³€¼Ã+´Õi8Ñ,—€ÐV§ò½æSé[ù„~ÀÛ8Q¸¨¦ŒÌÌE©§Få]¿˜0Ùša¤£ì´ SÖ.Q³c¦¬  ^§Œ²z©š÷0õ²¢Ðcp˜v6%vtÓèÞù)dúÐV'ì2§½Ÿ¬NýW¡÷;•Á¯'+:ìFìØòTÙ¯p‹„Äk#»C_cv +“ Z·èö½óñÜ#^8®¦Åž”Ê$Aà†?HÊœpŠÁ15(ö¤T& 7üÑQæhV Ž©)@±º2I¸®Ûá':âõzwšk”G¼âîNs•„z}{¤)¶°9Ð[ØúŠìéH•„Avœ¥ì3Å(%eeXî€TI‚µ|÷¼;Ìc•”•a¹R%aÖá¿jcÅX%eeXî4WI„µëŽû‰Žxž¢=Íû wîk"æ* ;øŠö(Slíö4Wlmwî+2¬;UY{ ÷عÃT1ZI]: UúhÝaªè·Ä‡åfÝ­’üV*x|ña¹ÙTp¼Í±”â7ùgx+íâL¢Øâ[#Ÿ³ø¦lÁß”Œ,¾E5]|ƒ­ülñ-ʄŷ('‹oQNߢBX|SB²ø¦0‘Å7’.¾E%]|ƒ-÷þâ[{*Iç¬Ýñ:x[]vèõmx-l&7ØÂF‚íÙV…Avžât£””•aµÕEaÖ¬žâtc•”•aµÕEaÖ)Nw0VIYV[]aÊtûŠvºƒ}E+DnÁU…|EÖck·3líVˆ ÛV…AÖžêt£•Ô¹ê¢ÐGë&è·Ä‡åfÛê¢üV*x|ña¹ÙTp¼ÍI§;ª³ñéN#ÇÔ ØY“>¢1Ó Ž©)@±“& —ÇS™î ^ïf6E!Lwpw3Iء׷á=¶°™Ü` Û ²§›,H ;OqºƒQJÊʰÜdA†`¦8ÝÁX%eeXn² ƒ°Nqºƒ±JÊʰÜÌFaÊtûŠvfƒ}…› w8˾¢ ë±µÛ™ ¶¶›!ú©‚$ ²öT§;­¤® MV$¡ÖM,Ðo‰ËͺɊ$$¿• _|Xn6$osÒéN ÓFxÞtGõi6Ý):Ý)S:Ý#5Ùt§¨„éŽRÓŸî(™î‹Mw”Lw&2ÝÑ(étG Ét޾ô§; ìé0¨£^ÓŽ#ü„œÜñÖ…ÿ\½q¿Ú=y7>üßÑ¥%+Ø::þp¢EðA5ÿ%Ó™²†ÿKr8h>‡6ÇêSœ½qròõ×á¯_O~ÎÍŒOT;¯–oüøµóá-Èü4W²'wÆvfVfü«ª|G¯Tõç9Ðùê«Uøþ®á?OþÛÕ§ÜNm}Ký룒ýw&›¹3óüE4óNùµ'ƒßÃ)I‡¶: ]~Êë¡­Nƒñ–Ÿr3Ó„ß÷Õû‡ÇGþ8üð¾î㟇ÿÏÑÌ¡ù¾©?Íÿ8ú©Z?šùùï×ÿ‚*µ®^ݽwóÂþ?>fS endstream endobj 87 0 obj<> endobj 103 0 obj[/ICCBased 104 0 R] endobj 104 0 obj<>stream €pADBEprtrCMYKLab Ð)5acspAPPLADBEöÖÓ-ADBE descütcprtp+wtptœA2B0°¢A2B2°¢A2B1£¸¢B2A0EÀ8´B2A1~t8´B2A2·(8´gamtïÜ‘descU.S. Web Coated (SWOP) v2textCopyright 2000 Adobe Systems, Inc.XYZ µZ¼g’0mft2 $ÚiÙ 6 … Ç ÿ1^‹·â 2Wy˜µÒï%Y ‡!²"Ú#ÿ%#&D'f(†)§*Ç+è-.(/H0i1‰2¦3Â4Þ5û7859Q:m;‰<¥=Â>Þ?øAB)CBD\EuFG©HÃIÝJ÷LM,NCOYPoQ†RœS²TÉUßVöX Y#Z:[Q\f]x^Š_›`­a¾bÏcàdñfgh#i3jBkRl^mgnqozpƒqŒr”sœt£uªv±w·x½yÃzÈ{Í|Î}Í~ÌË€Éǂф¿…»†·‡³ˆ®‰©Š¤‹žŒ˜‘ކ{p‘d’X“L”@•3–&—˜ ˜ÿ™òšä›ÖœÈ»ž­ŸŸ Ž¡|¢j£W¤E¥3¦ §§ü¨ê©×ªÅ«³¬¡­®}¯k°Y±G²6³$´µµí¶Ú·È¸µ¹£º»~¼k½Y¾G¿5À"ÁÁþÂìÃÚÄÇŵƣǑÈ~ÉlÊYËDÌ.ÍÎÎëÏÕоѧÒÓyÔaÕIÖ1×ØØæÙÍÚ²Û˜Ü}ÝbÞGß,ààôáØâ»ãžä{åWæ3ççèèÁéšêqëHììðíÃî–ïvðUñ3òòêóÃôœõsöI÷÷óøÆù•úaû)ûëü§ý\þ þ´ÿZÿÿè§,„¿ç     üóæØÌÖÞááßÛÖ Ñ!Ë"Ä#¾$¸%³&®'ª(¦)¢* +ž,-š.•/‘01‰2†3ƒ45678€9‚:;~<|=|>|?}@A‚B…C‰DE’F˜GšH›IJŸK£L¦MªN¯O´PºQÀRÇSÎTÕU×VÙWÛXÞYàZã[ç\ê]í^ñ_õ`øaücdeeÿfügúhøiõjókðlîmënèoåpáqÞrÚsÖtÍuÃv¹w¯x¥y›z{…|z}o~dX€MA‚5ƒ)„……þ†í‡ÛˆÊ‰¸Š¦‹•ŒƒqŽ`N=‘,’“ “ú”é•Ù–É—º˜§™“š€›mœZHž6Ÿ% ¡¡õ¢æ£Ø¤Ê¥½¦±§¦¨›©‘ª‡«¬w­o®g¯`°Z±T²O³L´IµF¶E·D¸E¹FºH»J¼N½R¾W¿]ÀcÁjÂrÃ{ĄŊÆÇ–Èɥʭ˶̿ÍÈÎÒÏÜÐæÑñÒûÔÕÖ×*Ø7ÙDÚQÛ^ÜkÝyކߔàœá¢â¨ã­ä²å¶æºç½èÀéÃêÔëåìõîïð ñ,ò8óCôNõYöc÷jønùoúlûdüVýDþ/ÿÿÿØhÆ 2 R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$ù%î&ã'Ø(Ì)Á*¶+«,Ÿ-“.‡/|0p1d2Y3M4A566+7!89 ::ö;í<ã=Û>Ó?Ë@ÄA½B·C²D¬E¦F¡GœH—I”JKŽL‹MŠN‰OˆPˆQ‰RˆSˆTˆUˆV‰WŠX‹YZ[‘\“]–^˜_›`aŸb c¡d£e¤f¦g§h¨i©jªkªl«m«n«o«p©q¨r¥s£t uv™w•x‘yŒz‡{‚||}v~oi€aZ‚QƒH„>…5†+‡!ˆ‰ ŠŠ÷‹íŒâØŽÍù‘¯’¥“œ”’•‰–€—x˜p™jšc›^œYUžRŸP O¡O¢P£R¤U¥Y¦_§f¨n©xª‚«Ž¬œ­«®»¯Ì°ß±ó³ ´ µ8¶Q·l¸‡¹¤ºÂ»á½¾!¿CÀeÁ‡ÂªÃÎÄñÆÇ9È^ɂʦËÊÌíÎÏ2ÐTÑtÒ”Ó²ÔÏÕëרÙ6ÚLÛaÜt݇ޘߧà³á¾âÇãÍäÑåÒæÐçÌèÄéºê¬ë›ì‡íoîXï\ð[ñVòLó=ô*õõööÖ÷³øùbú/úôû±üfýý³þMþáÿqÿÿÙ T– ¡ ¤ Ÿ “ ‚p_L7! ðÖ»Ÿƒ}tfUA, ê!Ó"½#¦$%z&d'N(9)%**ý+ê,×-Ä.±/ž0Œ1y2g3U4D526"788ñ9â:Ó;Ä<µ=¦>˜?Š@}AoBbCUDIE~% ô€Û‚¨ƒ„r…W†;‡ ˆˆê‰Ïг‹˜Œ}bŽG-ø‘Þ’Ä“ª”‘•x–`—G˜/™ššê›Ôœ¿ªž–Ÿƒ q¡_¢O£?¤0¥"¦§§ý¨ó©êªâ«Û¬Õ­Ð®Ë¯Ç°Ä±Â²Á³Á´ÂµÅ¶È·Í¸Ó¹Ûºã»í¼ø¾¿À Á0Â@ÃRÄfÅzÆÇ¦È¾ÉÖÊñÌ Í*ÎGÏcЀџҿÓàÕÖ'×LØsÙ›ÚÄÛïÝÞFßsà¡áÏãäM噿çè6é†êØì+í€î×ð1ñòïôMõª÷øZù«úöü:ý{þ»ÿÿÿ€€å´ÍTÌ?¥~òŒ”~i˜ž~L}ãÁ~cbAþ~’Da€dþ€ü¸~t‹yä~W‰²ÊÛ~Oˆ±>~\†´—/~‚…›|“~¾„º`éƒôC–ƒx¢€äƒßú£}%—âH}”1ÉX}%‘z¯Î}K•Ö}† {N}׋<_´~7‰‰AË~Àˆ-ψø¿|¢°à‚|žÉDz|+›®E|[—£”s|«”¦z} ‘æ^•}wO@¶}ÿ-Œ~Ä‹É÷ {G®uÞÚ{D©zÆ{]¤Ä¬Ò{– f“{êœZxÚ|[˜»]ˆ|Ï•M?¹}R’‹<}ÆŽðõ…zªº]ÝYzŸ´Hħz³®‹«|zð©=‘â{L¤Nw²{ÀŸº\‹|=›>Ó|¼˜v|ÛIô8z/ÆrÜ z¿;Ãbz'¸sªMzd²6ßzɬqvÒ{D§[®{À¢0> |;Ÿ| óyÑÒÈÚñy´ÊaÂIy¸Â©?yð»açzY´ÎvzÝ®Æ[{^©‡=c{ФÓI{Rò*yŒß„ÙýyfÕÓÁUy`Ìî¨Vy”Äâyþ½’uKz†·Zi{ ±Ü<Ú{z©%žzÈŽíí‰~+Ö~ˆ}±¾Í‡}W¦µ†0}3Ž…„}HtЄü}ŒZk„›}è=Ž„Ÿ~‹‹†z€ëɇ®‰Õ†£‡}½…¹†!¥~„ø…ŒÐ„d„*s}ƒôƒˆYƒ¨ƒ<9ƒ¸‚àù…w„éû†p“øÓS…w‘u¼„œ¤ƒõ‹‰ƒu‹VrUƒ‰ÕWÿ‚؈|;,‚뇔ˆ„{‡¨èR…sžøÑ²„ƒ›ºƒ²˜;¢¡ƒ•:Š8‚ ’¡q)‚PCV÷‚Ž:4‚.Œ–8ƒ‰ŠÉæÈ„ªªÐ2ƒ»¥­¹‚ñ¡‚¡?‚U¤ˆîãšp £–çVu“ÿ9S†’ ‚šŒçåc„ µbÎÖƒ°·µ‚Rªê ¹¦.‡ÕN¡Æný ¼U€ãš38‰€ó˜8¼ŒAä/ƒ‹ÀÚͬ‚œº‚¶’δzžô6®ß†è€Ó©°n1€“¤íT\€e Ø7Ý€tžXT‹·ã)ƒ$̯̕‚6Å;µ˜e¾Cž€Ê·Ë† €i±Ýmw€3¬SÆ€¨V7M€ £\®€l‹GâN‚ÐØ»ËÚæÐN´ÄÈa5€tÁ…N€ºzlÕß´ÍS<º°H6Ѽ¥*ôŠîÝ<’a|˜Çkz|C±V޲|šÇ|ƒ—‹·|IkžŠ‚|±Ru‰ˆ}26މ'~2‹ÖÞÛF‘-†ËÆB…„°*ƒ„o™²‹üƒ‚ƒŠ­‚òjŒ‰‚ˆQ^ˆ£‚@5zˆI‚`Š˜ƒ†Ù³‘$ÄŽ"Ží®ýŒcŒß˜€Šñ‹&U‰³‰²ijˆ¦ˆ|PJ‡Ë‡v4v‡y‡ú‰V†»ØG›’Ã.2˜{­‹†•——Š’ý€ˆè¾hS‡æŽ¼O[‡Œÿ3†ÂŒˆ(‰„ÖéŽJ¦ÁÑŒx¢&¬$ŠÔžs•Ò‰h› ~æˆ2—êgK‡>•-N}†o’Ì2Ù†‘Á N‡%ˆÿÕ§±°ÇÀ›‹â¬ªöŠ>§w”´ˆÖ£A}⇤Ÿ\fX†§›ÚMµ…ݘù2,…Š—ò ¨†KˆÔ3»¥¿’‹g¶©ò‰Â°¦“¾ˆ[«¤} ‡0§ež†6¢çM …_Ÿ¯1… ? …—ˆ1Ó£ŒËÆÇ¾³‹ÀI©‰^º’ç‡ô´I|B†Ì¯dö…ܪwL‡…§e1$„¢¡: ®…‡æÒàŒrÒW½ûаÊñ¨]‰ Ãá’1‡£½S{†z·|di…‹²ÇL „½®g0·„\ ð U„އ©Ìû›ò{[¸“™G{!£ö–¸{ ŽÞ”`{&y’E{xbie{ùJrŽÚ|“/cŽ5}~ ~ÀË:šâ„ý·f˜#ƒç£•™‚üú“M‚Kx+‘CØa|ušI~÷.yWã ÏŽ›ƒÉәߎ­¶—%ŒÂ¡å”˜ŠøŒá’[‰‰w!^ˆT`ƒŽž‡^H˜*† -§ŒŒ† 5G…èȨ˜ç˜Ž´ã–=•Π§“½“4‹»‘rív†Žÿ_ÒRG±Œf‹û,ދ̋ͯŒ…ßÇ|˜,¢†³Æ•„žúŸ{“ ›¬Š„Ò˜ªtìŽÙ•ô^1“ Fî‹Å‘Ä,;‹'‘¾<‹!…‘Æ_—›¬¥²²”õ¨Yžl’~¤J‰„J tŽS#]¸Œš'FA‹4—÷+®Š”—;ÛŠL…PÅf—&¶ì±É”€±Þ‰’­ˆªÕ¨šs@å¤]Œ0¡E±Š´žÓ+:Š›È‹‰›…Ä’–ÃÁx±”»¥œÉ‘§¶‡îr°îr…¬U\}‹Ú¨™E>Š\¦A*Ù‰¨œùJ‰ „îÃâ–nÌy°g“ÊÅØœ(‘V¿…‡N#¹³qþ6´ª\‹±DÕŠ¬B*|‰iœºˆ™„˽?¥Ðzzª¢hzM–ÑŸzEƒœzrn™8zÔY,–²{dBS”¢| 'ó“ó|ýª“¦»³¤âƒ”©*¡Z‚œ–ž Ђ`šý>mÛ˜:€ëXc•€ÎA‚“¼€Û'4“ uh’‚šºˆ£ëŒÂ¨ h‹•$‰nkšˆ)lñ—]‡'WŠ”ï†f@¼’î…è&Ž’8†[/´‚Ô¹|£•õ¦ýŸ£“z“ÿœY‘9€_™N3kõ–‘V­”4Œ1@’4‹9%ù‘w‹Ùý’‚²¸–¢UŸh¦ žéœ3’þ›ª™?V˜¦–‹k•Ø”.UÙ“|’??R‘~ì%n¿‘VÓŽ™‚–·£¡È©¥5žU¥’.›¡k~‚˜žj9•V›"U"’똬>Ãì—?%'– ¯È‚}¶Ë¡W²½¤mᮑlš©Æ}Ê— ¥Ñi–”ë¢RT–’€Ÿƒ>OlžT$¬ ˜Ì‘‚i¶ þ¼¶£Æ‚·aÊš=²\},—?­Ìi”Ž©àT’-§ =ï¤Ã$e0˜›yŒ‚Yµq ¯Ç,£<-ÁA™ê»_|¥–ð¶?hˆ”@²S³‘à¯G=›Ò©¨$Žô˜leŒ‚L®¯þyäœ)«Þy¶Š§Þy²wФyædG ˜zPOùszæ:šö{ )š˜|q•Óʬί(‚ƒ›hªä™‰~¦Ú€àvû£€cc¨Ÿ›€&OSœ€#9tš€L¡™–”Ž€«ß®=‹.šŠ©þ‰ˆ½¥íˆv1¢0†ûbäž¼† NŸ›¦…Ž8Õ™,…K.˜«†F“p€«­j“癪©7‘š‡Ì¥0„uP¡h½büŒQMèšè‹88A˜jŠ¢ʗ׋³’x€ªA¬Êœ´˜Ú¨˜™Â†ó¤”—tu Ï”ÀaMK’°MBš=‘(7¿—¸ku—a ‘’€©¬,¥Ì˜/§ü¢1†H£ùžâsÊ 5›ï`ªœ²™\L¯™—k7M— –å(–_”XÄ€¨â«¹¯—¢§}ª¸…£r¦Ãs@Ÿ¬£C`)œ6 OLA™ž;6ö–€}ó•È”@(€¨B«a¸t—§³{…C£ ®çrÈŸHªä_»›Ö§©Ká˜Å¥ã6°–#¢ëÌ•O”&3€"§¹«Â^–¦¦Ä¼«„Ö¢¶·qrbžö²ú_c›†¯ºKœ˜u­6{•ݤÖ§• ” < €(Ÿ°º„ytŽÕµ«y:}Ѱüy2ld¬‹ygZ8¨dyÔF冷zj1ë¡æ{ð¢r{¾‘(€ž¦¹¶¤ŽB´Â€½}b°€ k󫌞Y¸§drFl£®ƒ1l ÞÁ°¡;€ºn€÷¸Ë‰Õš³ÞˆI|ϯ†îkUª£…íY¦z…4Eá¢Æ„Ì0úŸì„Ä †Ë€h·ó’Œø³ç|®Rûjª©ÎŒcX}¥«‹-EY¡öŠW0•ŸŠ,\Ÿа>€œÕ·FšiŒb²a—¦{{­¦•4j©$“Wí¤ð‘]Dá¡?50>žR*>ž6ޏŽÄ€œ;¶¿¢î‹Ù±ÑŸ’zú­œi‹¨™øWy¤Z—ÖD} ’–p/øž–¤'g¨Ž^€›È¶6« ‹p±D§¥z˜¬‚¤i/¨¡W%£Ôž—D9 I/Äœðœ'œ¨›Ž €›Jµ×´Œ‹"°Ô¯ÛzW¬««hé§y¨1VߣK¥°CüŸ•¤ž/œœ† 1œ›Å€šÙµ†½ëŠË°t¸ƒz«¡³¶h¬§¯ãV²¢ï­ Cߟ8ª§/‘œ/ )›¶¢Ž€‘óÅcy‚¿ÒxËrº|x¹a£µixêPq°§yS> ¬syä)¦©–zjf«Y{ C€‘7Ä‹€æ¶¾óøq¹JaJ´m~âP ¯ž~Ä=­«_~å)]¨f2…©Ã€DŒþ€ÍÃ’ˆ¨G¾‡'q^¸ž…Ü`Û³u„óO¡®Ÿ„Y=RªZ„)#§J„N¯¨O„îŒÁ€Â©k€è½#Ž_pé·¼Œ•`k²†‹&O:­²Š%=©j‰“(ö¦H‰ãÚ§‰ŒŒ€,Áè˜O€”¼[•µp’¶ð“t` ±»‘•Nè¬Ö&<è’i(×¥c¥áŠÔŒ^€ÇÁP b€B»µ7pM¶@šs_ϱ ˜,N®¬&–q<•§Ð•²(¤–•¼+¤ãŠîŒ8€fÀÕ¨”ü»*¤Ðpµª¡‡_¢°ožßN‰«“<}§:œ¬(¸£àšnN¤‹Œ€&ÀQ°õ̺¡¬“oöµ¨Ë_¯ã¥ØNw« ¤—}g€Ôu~_€Ûîjx&t×hx¬ŽQ¿×y7ŒQ§’yÌŠŸŽ¼zi‰%u7{‡ÕZ‘{º†•=v|k…‰ö|ï…ì˜vøœÕŸw…˜Ó¾ x•Ѧx¼“ Ryo¦sõz'ŽkYuzÛŒM¯1—<}ª €#}¥oha}?¡'O|}gŒ3¸}™›f Ø}É\Ø}…ÅYÂë}¿¬ò|ȸזP|™²ãD| ­mg|˨•NÚ|÷¤Ù3,} X S}(‰×d}5ÑÂ<|ÐÉç¬0|nÂÆ•‚|4»÷~„|8µÍf÷|e°—NT|—¬–2º|·¢L è|­ˆºÑÁQv’½µ‹ëw©Š©w~“~‰Žx }1ˆ—x²f‡ÅyzMž‡(zI28‡%{1 Ö‰$|yÐ<‹ñ€Ç¼|Š™€>§Ú‰cÎ’hˆU~|‡nWdû†®QL”†\15†˜ 쇋€ZÎ⊩‹»!‰_‰œ¦¬ˆ+ˆ7‘/‡0‡ zò†X†câ…©…FK…&„–0D…!„D †$ƒÂÍ~‰•u¹±ˆI“¥&‡%Ú͆.ŽÏy±…l bDŽ̋vJœ„QŠ/n„F‰Y k„솷Ì&ˆ°ŸÚ¸W‡lœ«£Î†N™žŽ…]–Âx„„˜”a„‘ÑIÀƒ“Ð.¯ƒ~Žñ ҃ᆤÊöˆªh·/†½¦j¢ª…ž¢ˆh„°žÚw‚ƒï›o`ÓƒX˜^Hû‚ê•ã.‚Е Qƒ†LÉù‡rµ¶7†1°N¡±…«—Œu„ §v§ƒf¢÷`‚ÒŸGHU‚Xœu-{‚8šIæ‚F†É,‡¿ÿµm…źg ß„Ÿ´Þ‹¡ƒ©¯’uÞ‚ïªÂ_g‚f¦¤GÇí£ù-ºžp®…ÉÈ‘†®Ë=´Í…tÄØ /„I¾zŠêƒK¸hu5‚޳^Õ‚®µGJ“ªÖ,—^ž&J5…›Â–½u„¯Y”Šv œ ’ƒv—‡ð®w6røwó]”xËE¹Œry¦+ŒNzŒ©Œÿ|œÀ¼•},®S“P~Ë›‘S~~‡ˆ~Sr í~O\Œˆ~mD΋o~™*'‹C~ú,‹l€¿Ž”WˆØ­’4‡™û6†u…äŽx…‰pÿŒê„Æ[(‹’„/CñŠƒº)cŠMƒ¹¾Š ƒ&¾o“A’§«ä‘(™˜¹7Ž¡„ÈpŒãoë‹ô‹fZ0ЍŠC‰ž‰(ª‰eˆç_ˆ×ƒ¡½G’gœ…ªÏN™²—™Ža—ƒ•Œª”…nÙ‹(’AY@‰ëRBSˆäŽÇ(ˆ ŽÊ ‡Ðƒj¼<‘¿¦†©Å©¢ø–¼Ÿ‡‚—ŒœJmðŠ‡™QXm‰@–»A§ˆ<”ß'|‡ð”;Ȇóƒ<»[‘9°§¨é%¬_•´5¨,À‹~¤4m,Š ˜Wƈ½ƒA‡©›•' ‡U˜¾†<ƒº¤Ï»¨6޽¶”ùŒÊ±‹¬^ly‰”¨0W(ˆW¤×@‡@¢Ü&ª†Öš$`…¦‚öº|ź§§ŽmÀ”[ŒxºR€`ж´òkâ‰7°NV§‡û­@-†ì¨Ä&H†™â;…/‚ݲàztáHˆuN<šÇuâ|h˜=vŒh±•éwSSè“Úx2=¡’Ey #g’IyÔJY|º±°Ÿ`}æ }œk}˜Ž|™¬}c{ª—$}Qgì”Ø}fS$’Ò}<Û‘@}á"¹‘3~T,ŽÌݰ»žF‡Ÿy›\…ô˜›„ùz¶– „3g“݃œRP‘áƒ1<S‚î"5ƒ;o€¹¯¼S1žhšmŽ`Œn—´Œ¶y·•0‹3f’ú‰úQ~‘ˆó;nxˆ9!•Jˆ³úŒ@€©®Õœp™Šv™“—‹r–â”§x³”e’se1’‚P¶3Žî:ÊŽ§Ü!ŽmŽ/æ‹=€œ­ó›Ì£œ¬˜îŸÑŠ©–8œ¾wà“¼™ådc‘}—WOÿŠ•=:8þ” ©·’àÖŠc€‘­2›M¬ ›ì˜o¨Á‰è•·¤þw%“:¡~cºÿžfOn ›ñ9Âj› U•Üȉ®€‡¬šë¶j›P˜ ±ã‰H•Q­uv…’ΩVc “¥ËN控£J9Y¡[ Œ•«½‰€€¬šœÀšÓ—¾»oˆ¾•¶Vu÷’x±¢bŸ9­ÍNzŽL«]8üŒ®¦e¾Œ>•v´ˆ¥€z¤ ª‘t9“Ÿ¦ìt¼‚±£|uOq Euü^sJvÅJ¼š¨w¢5W˜¾xk@™kx잣0©–|ã“ ¥ç|›‚$¢p|spvŸ4|p]Úœ9|—J"™›|Þ4¿—­}-И5}˜Œl€¢s¨Š…ˆ’?¤ä„…l¡fƒ¤o²ž1‚þ]›<‚ˆIy˜£‚D4,–²‚+m—‚Æ‹`€¡°§•Ž/‘c£öŒƒ€} €ŠþnÛD‰²\UšYˆ«H˗Ňá3¡•чx–ˆ8Šw€ ã¦Ô–æ—£5”š©ŸÂ’nœˆŸ[œ™‰ŽöH,–ý¿3&•/È•-Œí‰¯€ :¦"ŸÞí¢‰œó~üŸš5mV›Ú—¶Zø˜Ú•†G –9“å2»”;“‰„”VꉀŸ¥¡¨òg¢¥g~wžŠ¢lÈ›FžóZn˜Nœ[G*•²š“2b“šP“¢‘ˆ|€Ÿ¥C²4Žæ¡¤®}ôž#ªlHšÚ¦zYõ—ࣔF¾•L¢2“.Ÿt&“‘ˆ €žª¤ù»ÞŽ}¡T·!}„в‹kךƒ®zY—†«ƒFl”ï©B1Î’Ø¡¬÷’µá‡°€•ñµsĆ}°¸t7v¬¢tÂeï¨ÅulTg¥+v1A¢¢w,ðŸøw¬n¢w¬‰~€•U´"|†¯Å{´v4«ž{eާ²{–Sû¤{ÈA8 é|,žÉ|iT |¯ˆÄ€”Õ³„,…Œ®Ãƒ4u°ª“‚edü¦©ØSo£@½Ÿà[,/´g?Ÿ?‚ ˆ!€”N²ŒS„ì­ÏŠÂtû©¤‰`dY¥±ˆ?RÖ¢‡h@=žò†Ø+Òœº†Á+ž†Ê‡“€“»±S”’„T­’ptY¨Üˆc²¤éŽßRJ¡@„?ÈžŒ¡+›ÛŒ¨œîŠâ‡€“*°·œùƒË¬fšKsÔ¨8—Õc/¤A•­QΠ”“å?fY’Ã+@› “›òŒ6†³€’¾°%¥…ƒ`«Õ¢Ksh§¥ŸJbÆ£­œ§Qn šŽ?œ¿™z+šF˜” › Œ2†^€’S¯Å®Eƒ«lªxs&§,¦ãbx££ÉQŸm¡>Μ= º*ڙʜùš]Œ1†€‘û¯z·l‚Ê«³rզЮñb*¢¿«|PÜŸ ©s>ž›Ô¦Í*¼™dœå™æŒ0… v¿åsQyáºõs­jÙ¶Ct+['±ÊtÌJŠ­žu‡8“ªvF$R¨+v· Xªw† €ˆ¿{.y¹ºzÔj®µ¼ ’`x¥·bi„²AަYÀ­ž3I?©NŒ7¥¬‹–#×£VŒ> J£¹‡¢„ñ€†ß»bšSxP¶g—Öi5±ˆ•œYu¬ß“½Hù¨Œ’U7]¤Ó‘Æ#âk‘è t¢”‡¿„€†‡ºÞ¢_x µÚŸdhõ°ïœ®Y9¬>škH§ì˜Û79¤,˜ª#º¡˜–£ œ¡”‡Ù„š€†Mºbª•wÕµZ§hưk£öY«³¡eHš§^Ÿå7£¦Ÿ #ª ü˜ À ´‡ò„{€† º³>wÀ´ø¯9h·¯ó«ƒXõ«#¨¨Hˆ¦½§97¢ý¤# `˜- ñ ˆ„a€{nË1rým™Å¶s7_XÀsšPs»‚t'@ž¶ßtË/E³!ud±øuko°Mw‰ƒ$€{hÊ@zˆm«ÄÂz_^¿kyÙPpºIyÚ@™µ‡z /R±¨zVG°1z_ ®/|Fƒ"€{rÉÙm—Þ€Ø_G¾=€PN¹  @}´:m/P°Gw}®’«—¬I€uƒ!€{pÇè‰m}Âs‡ž_½†gP%·Ô……@^³…/J¯„ß­­…„ª›ƒnƒ€{[ÆìemeÁpŽ€^þ¼ŒèP¶Â‹¥@O±ßŠÏ/P­ÜЬ߫Ћ0©$ƒ¹ƒ€{9Æ%—ämTÀš•^÷»“ŽPµÕ‘ö@O°îì/a¬Ò‘ª¦ ä§áƒûƒ€{Å„ŸumG¿êœ³^÷º`šGP µ ˜f@[°%—]/y¬—yK©£“!;¦Î„7ƒ€zöŧ0m?¿[£ý^ü¹Á¡,P´aŸ@g¯užY/«VœÓx¨à“@‡¥ë„jƒ€zÜį>m>¾á«“_ ¹8¨[P*³Ì¦3@…®×¤Î/¹ª° E³¨1“gÈ¥F„–ƒ€ævpsÐwKsñ¹€xtÌ¢*xêu¯Š$y²v¡qczw£W†{OxŸ;/|1y–}!yèät‡~hÎku‰~·úv|}å Ëwe}ʈÝxK}Íp.y3}äV[z}ù:zï~ {T}Áâ1rð‰ÒÌštˆd¶_u ‡ŸFv …ý‡~w…nóx„BU>xöƒy8ùyÄ‚ÄÄyÕ‚ àiq“•8ÊÍr®’¿´œsÀl±tÑŽL†uæŒvm²vöŠÂT*wò‰!7þx²‡·”x‹…ìÞÉpu É2q’/³r«™çœ+sÅ–Õ„®t哸l|v‘iS#w Žú7w»Œþwq‰?Ýlo˜¬ ÇÙp´§º±ªqË£šÛrèŸzƒwt›´kXu5˜3R.vA•6Bvá’Å´v„‹KÜNnë·ŒÆÁp²[°‹q­1™¾r0¨<‚rs]£šjrtŠŸLQZu”›u5v%™%þu¿ŠÐÛonmÃÅåo½¯£pˆ·˜Ëq›±#…rÉ«¬i¤sý¦¶P¯u ¢{4ôu…žµjuŠlÚËnÎÆÅDo)Çä®ëp!Àó—ÿq'º6€»rO³ühësƒ®}P tŽªI4ctý£(ôtŸŠÖq¶ÁårʬôsÏ—5tÑ€uVuÝhîˆvöP1Ïx4š€YyXòy<ÔŒ}Q|À²}s|z«Î}—||•þ}À|S}ó|¹gÓ~7|÷O~}43}rA€H}ƒÓ{Ò‡P¿|†BªA|3…D”|q„o}þ|»ƒ½f¢}ƒ&N }v‚˜2“}í‚% L~ÒƒÑnz†’½ez¼¨¡z÷Ž0“ {@Œi|ª{¡ŠÝex| ‰rM |vˆ!1­|Þ‡ x}„üÏóyrœé»ïyªš §-yí—A‘¤z?”˜{fz¥’d[{"çL{“á0Ü{êŒ Â|w‡óγx›§Òº³xÔ¤¥òy qryjœæzJyÖ™‘cVzS–„K>zÌ“æ0!{’‚ ){‡‹Í®wñ²Ó¹°x*®N¤êxe©¿lx¹¥TyZy,¡4b…y®qJ„z!šK/ƒz\˜r ªzˇ6Ìäws½ñ¸ãwª¸ ¤wܳ5Ž‹x'­ëxx›© aÄy'¤·Iåyœ¡k.üyÁN Bz-†ðÌUwÉ>¸JwQÃ#£_ww¼àËwµ¶ÂwÈx$±/a x°¬{ITy'¨ò.}yAŸo ðy¯†¸Æ~ˆpгü‡3q¾ ’†rrÚŒ…Ñsîv·…Gu `\„Üv5H´„žwU-Å„ôxR܆Oy`ÅF†€z¸²ê…»zêŸs… {‹„u{Wuªƒù{§_[ƒœ| Gºƒh|i,؃²|À/„ª}uÄ…„ù±¨„\„1ž_ƒ³ƒr‰Ùƒ,‚Òt‡‚º‚T^Q‚kóFÇ‚DŸ+û‚…n˜ƒ9 ­ƒÇ*°1ƒœÉ‚|‹÷ˆq‚Š|sB¨‰6]5kˆEÕJ‡+,x†~ø„(ÁT‚½™a®Ø‚ –ý›uz”‡)’Qr€°-\5€„ŽTE€hŒ¼*x€„Œ £€æ„}À0í£¾­¸@ –šW€«d†€8šEqç—Z[Q¶”ÂDD¡’´)×°’Dþ„=¿DI®7¬Ë€ŸªN™d€¦K… Ž¢[p=Dž¸Z’›‚C¦~ö™")Q~ø—Bö?„¾€Î¸Ú¬€&´2˜™„¯`„NªŸos~·¦NYØ~•¢©C ~w p(ß~^›‚¶~£ƒÜ¾€xÃÁ«‚Ó¾c—ì$¸Áƒ“~“³5nÆ~@®IYE~ ªsB“~§0(y}æ›^ƒ~&ƒº·\‘Wo±¦5žpí”!Žr€ôŒÉs.lË‹˜tTW“Š•u†@ï‰àv¤&Š;w*Š$y½¶XáyS¥CŽGyž“ŒÔyéù‹‡z?kÖŠ_z©Vª‰f{$@ ˆµ{˜%²ˆú{ôÛˆ„}iµIŽ‹‚ê¤ ‚]’‹’Ó~׊Sij̉7U»ˆJ€ã?6‡ž€º$ú‡Î€¸•‡€¢´,MŒ•¢Ô‹Ë‹>¶Šj‰è}¹‰*ˆ´i½ˆ‡¬T·>†Ç>k†˜† $P†¶…æY…Ù–³ŒK–I¡ÂŠË”8œ‰o’-|‹ˆ:7h°‡1ŽkS߆aŒå=¥…½‹¯#³…Ä‹¹%„Ês²‹…  ¾Š YŽ˜ˆ¬š{’‡y—Úgʆq•[S…˜“1<þ„÷‘®#,„ì‘!ùƒåV±5ŠéªŸë‰q¦–Àˆ£ z¼†ÙŸg…Õœ{Rj„ý™Ô"À„0•Õƒ'=°’Šr´'Ÿ@ˆþ° ‡–«¾z†V§—fQ…P£áQÆ„ƒ ô;ðƒÎŸ_"aƒ”—?¸‚)° о‹ž¼ˆª¹ÂŒn‡;´Æy]…ï¯îe¹„â«ÀQD„¨æ;ƒd¥1!ÿƒ"–ü ‚¨›šéo˜Ž˜spA‡¥–„€ƒ(€—~ |݈C|BxGš¡½gt—÷ŒXUÑ•‹Bü“{Š5.l’ ‰ÑÊ“‰@‚l€–ן°™«‡—œ¹—zw—™ß•WfÉ—/“SU/”·‘B{’›@. ‘'’’F΀–FŸ¢‡œ(ŸÏw™D f9–ŠštT”˜AAÿ‘ü–É-´m–…a‘8ÈK€•Ξ±«—†›½¨Nv’˜Ò¤ùe¶–¡×T“•ŸQA‡‘‚ž-Xé›à9„¬€à€•užb´ð†;›k±)v"˜x­FeA•ª©®S´“*§A/‘¥:-}žv ‡€‹€Œœ¯4n~W«{oo]¨p/_y¤ÀqKNŒ¡»rh‰°SU©7ˆ­Ct¥†‡ð21¢“‡ž¡4ˆ+ñŸú„±€€}ð´þ”pO°­’@b¬q—S¨b&C%¤ªŽ1þ¡µ #à!ž£„Ò€€}Ÿ´i›æp °™¶aƫɗ™R¾§¯•ÄBâ£ö”‚1Ò Þ”z~Ÿ.’§Nx„ñ€€}j³é£åoØ¯Ž¡Pa«=žÍR†§œ©B¬£\›p1œ Jšâfž|”yœv…€€}6³›¬GoЯ+©Va„ªÁ¦]Rd¦‚£ëB¢­¢Ã1”ŸŸóvÉ”™ ›Å…(€€r¯ÅHlÞe¥À¬m´X¼9nŸIÓ·ìo•:u´p)S±4q-–±ép¸«)t{€€r¢Äwtpeÿ±t‹X:»tÕIñ¶†u@:–²vu¿)¯v!¯Äu»©éx瀀r£Ã:{¸eª¾r{EX&¹µzýIÖµ$z÷:ˆ±{)ž­ò{8n­Þ{£§Ó}.€€r•Áí‚Úe€½&øWç¸jBI¨³Ò€Ì:f¯­€–)œ¬Š€¯¬0€Ì!¥ø€Ä€€rvÀÒŠ e_¼ˆÈWÀ·E‡¶Iu²¨†Ú:Q®s†Q)ž«G†Iíª¯†‘¤U€€rQ¿ù‘heJ»ËW²¶NŽTIg±¨":A­lŒ^)¨ª!Œ…'©X‹ƒñ¢êP€€r0¿P˜Óe?ºb–àW®µ• Ic°Ï“:?¬’Â)¶©8“`¨-!G¡´Š€€r¾Ó `e=¹ÌžW±´Õ›îId°š:::«Ò™¶)·¨}˜y…§M: ³º€€qþ¾v¨6eC¹P¥¢W»´C£(Ik¯w¡k:E«) Q)ЧʜE¨¦RºŸóØ€€ÙµqlªÅr×n7¯¿to·™›uIq-‚¬vkr£jëwŠtRx u‚6zy vÀzyv­×·oWwÞÃppÜxG®IrAx·˜Ksy4ttÒy¾iÇvzQPëw4zÖ5hx!{>ÎxÂz­Õâm„ƒÁ¤o‚g¬µp™Â–ÌrI€s^€êh“t²€œOÙuå€J4lv¼ïÀwA"ÔkêŽJ¿ÕmŽŒªîoŠð•:p—‰u~°rˆ1gWsv‡NÌt´…â3€ur„ÛÖuóƒ0Òzj”™o¾;l@–Ì©TmÖ”?“®o^‘Õ}Rpâ”f%r^‘MÎs¤‹¨2¥tGŠtÔ†¨Ñ&iФ¼ëk8¡#¨lϪ’an\šQ|oè—*e qh”?Lãr¶‘¦1às?Î esã‰Ðh¹¯Ô»Ýjg«Š¦ëkù§+‘Im…¢ç{ožæd&pŸ›3Lqè—ï1:rZ– Ùsˆ°ÏGh»»i˶¦ kS°Ã^lÖ«˜z/nj¦ÆcWoø¢mKpqCžÈ0ªq—› gryˆbιg¼Æ`º€iaÀ}¥ajÚºcœlM´`ymmÚ®Ïb§oh©ïJÎp®¦P0pëŸî q÷ˆ%ÊZyäk‹·}zdmK£Ázænë{hptyU{îqúbµ||sJÒ}tî/á}Ðv 9dv7Èéwèv<¶Wx‘v䢤y-wƒìyÄx"xBz]xÊa¯zÿyzIÙ{¢z.õ|Iz k}±z¨Çev*€ä´®v怇¡w•€,ŒsxCèvòxõ¹`…y­˜HÏzZs.zå@ ¶|3~ÖÅÓt¥‹z³ ukŠ3Ÿxv'ˆò‹vä‡Äu¢w®†¿__xx…ÐGÕy-„ï-0yœ„4 zè‚wÄ[s]–±—t*“öžtð‘Ù‰—u·Ítev‰á^HwfŒ-Fíx Š,lxr‰Š“yÌ…“Ã$r[ Â°bs,לÎsòšÞˆht¾—ôsJu—•3]Kvt’®Fw4‹+½wkz"xÝ…€Â+q«~¯fra§Ì›Ís#£ù‡hsî 3r]tÏœ¬\}u±™vEjvi–Ñ+,v‡•WÄx…@Ánpø¶M®¤qDZٚúr­1†ŽsD¨“q‡t&¤M[½u ŒDÎuÉÀ*®uÇš#xwv… Àðp”Á6®q^¼šRr ¶‰…Ör¾±pÕs™¬+[t„¨D;u;¥**u#œ‚;vö„ä»n‚”jœª1‚8lx—ëùn*„yÑo¿oü¹qMZp¸rÙC€ÝtG)‚uS<ƒ»vºL€½t³©€u–³€evVƒO€Kwnå€BwÝYp€Px¦B“€xyZ(.€üyÈÈ‚ zÒ¹~ͧÂ~ù~·•˜~ß~œ‚$~Ø~†mÏ~Ü~ƒXy~ø~Aº'~’'nŽ~|b€‘~’·¼}”ˆÕ¦\}†‡î”}|†þ€É}†l}Ÿ…LWa}Ì„˜@Ì}ÿƒö&¨~Dƒ„ HÔ¶m|Y’ᥠ|P‘8’¿|P„|]Èkw|€Œ-Vh|¾ŠÇ?þ|ô‰%ÿ}‰¾~/‚ˆµU{b £ó{^𣑍{^˜~u{n•›jy{•“¬{>•Æ$ì{*” I|}‚9³Ìz ± ¢Xz ­Æøyÿ©¯|Âz¥™hÜz1¡ÝTzyžº>z£œä$zj˜R{Ý‚³\y§¼ ¡Òy§·˜Vy²¾|yƒ­éh9y¨©—SŒyî¦A=—z£|$ y͘_ü{^‚¬Ø‹½iÚœùŠ€k»‹ý‰~mpyÀˆ©ofi‡ñp˜Qì‡br$;è‡ s…!±‡õtN‡w$«óŠseœˆøtUŠîˆ u2x¹‡?veq†vâQ†w¼;…Àxx ö†jxÇ…•{ªðˆj|ÛšÕ‡{|ù‰Ù†˜} w…Ú}!dq…4}FP)„¸}u:Q„r}™ U„ô}ƒæ~Š©Ñ†ö†Z™¤†…·ˆ…>…v‹„†„ScyƒíƒÃO\ƒyƒI9¦ƒ8‚ãƃ˜‚¸‚o€¨¥…ÃÛ˜˜„àŽŠ‡ƒ„"ubƒg‹¶bo‚ÖŠdNk‚u‰J8á‚2ˆn2‚fˆ{.€§«„×™~—–ƒú—~†ƒ0•\to‚€“3aŒñ‘0Mª†x8EEŽRµXÝ€ €¦â„£2–ȃE ˆ…­‚v¬s™ÂšÊ`Ä7˜&M€Í•ò7Ç€v”ºQ€l’W€€¦Jƒ­–#‚¾©º„øç¦&rá&¢Œ`€—ŸVLS€9œÙ77ß›µø§”D€€¥ãƒ-·•¤‚`³3„^|®ër<€©ª _|€¦ïKׯ¤z6ÍX¡yž ”€€ž¦•iNÔ“&k#î‘ylÔnÌnj\ްoöIqt3Ör²‡Ž¢röƒz¼ì“”rZ‘ÈsM't3múެu[ÄXuùHUŒEvÙ3(‹­wŠýwƒ¡~’{NŽb{}~!ŽÆ{§mX{ØZàŒ |GŽ‹|_2~Šc|‘~‹||l€Z€œ·„+Œý ƒ³|ö~ƒ5l Œ‚¸YúŠÖ‚XFΉӂ 1å‰0ÍŠÙ€€›&„,ŒâŒ{øŒ^ŠékŠö‰¿Y-‰µˆ²Fˆ¾‡Ü1Yˆ‡P°ˆÆ‡X€€šRŽ –Q‹?”˜{7‹~’Äj5ŠðX^ˆÕFEm‡Ôñ0ˇ)MI‡¬Œ€€™¤ïŸ‚ЇŒZ0zyŠÍšµiz‰^˜=W­ˆ!– DÕ‡”[0^†W“ôÿ†²€€™h¨Ì‰õ‹Ø¥éyÜŠD¢Íh܈ɟ·W‡ˆD@†‹›I/æ…½š)¾…áa€€˜½²V‰„‹{®ñyV‰Ü«9hNˆR§V‘‡¤”CÕ†¢ö/†…8Ÿk…H(€€ØžáĥלLjsßšl4cÄ—ïmÅR‡– oI?씆p±+J“èq³l–Þq/€}Ð@qc‚H›rQs<˜Ãs:c&–£t"Qð”¶u ?e“*ué*Ó’uvz8”õuò€€˜œ!yÙu™ºzr}—mzMb`•Sz•Q=“jzé>Ë‘á{@*Y‘{q“/{%€€ŽÏšÌ‚=€’˜nÛq„–-ya”&P{’7€ê>*³€Â)Þ
Ò‘’€ª€€Ž™´Š¨Æ—Y‰¹p´•ˆÇ`´“‡ÞOÖ‘‡ =› †z)wŽÁ†>­…{€€U˜Æ“G–x‘Ëp”<@` ’ŽºO33`=%ŽŸŒj)"¶Œ]‹ŽÀ‰‘€€ŒÆ˜›÷~š•Ï™øo‚“‰—Ô_z‘`•¹Nžu“ñ<¥â’Í(όؒÅiŠk€€ŒU—™¤¿~"•R¢Co“Ÿ“^öÍœñNŽÜšÔ<&O™Ü(kŒ8˜KŒ¬ŠW€€Œ—=­Ä}ÔôªÜn‘’š§¨^‚V¤‘M´Ž[¢Q;όƠõ(‹¯›!‹ùŠ7€€ƒ‰©h7v<¥öiàh£kxXâ xlþH‹žnr6²œ5o·"^›ãpZX¯p €€ƒ§òpguÞ¤ÖqGg­¡çr,XŸ'sH0œ«sþ6gšÃtË"+šGu€›tu1€€‚–¦–xhu?£ˆx¢g" “xåWïÒy=G°›Ty 6™gyþ!ë˜Ìz™gz§€€‚¥B€Pt¢:€f_ŸN¶WNœŒ‚Gši5‹˜)_!¡—uX®—‹“€€d¤%ˆGsð¡$‡xeµž<†­VŸ›y…ñF–˜ú…\5—…!Z–B…¼•߃р€€Ø£K_sh Ne.aËVš˜ŒF˜‹ˆ4È–Šñ!+•$‹bÌ”`…ó€€€m¢˜‡r÷Ÿ™–Îd¸œ¨•U™Ú“ME¦—Q‘ò4w•<‘[!”èⓆ€€€¢ Órßž¹d~œœmUQ™,š8EP–•˜¦4”Ž˜a Æ“o•è’†€€Ñ¡¼©\r}ž·¦ìd.›¦¤2Tú˜­¡¥E–  -3Ù“üž| ™’Ø– ã‘;†€€v´³Ágiõ°8i\€¬åjŒN©¼l>‡¦âm\-=¤ënk¹¥—nl‰¢ªp€€vZ²ÐoRiʯ(p\W«¦pùMù¨TqÝ>p¥^r¼-:£Isj㣧sFþ 7ua€€v ±|vèi`­Øw\ªGw`M ¦ëwÃ>(£ìx--¡Çx„î¡éxT^ùzX€€u¬°~]hé¬}~[w¨ó}ÝM4¥”}Ã=Ç¢™}Æ,Рj}Ñç Z}¼¬›ú~¯€€uD®ô…áh«X….[§Ï„‡L·¤mƒó=r¡dƒ,Ÿ2ƒkÙž÷ƒ¿íš;û€€t䮊h(ªuŒrZ¯¦ã‹XL_£yŠX= h‰š,_ž‰hÒ¶‰ƒ#˜¶‚€€t”­e•=gæ©Á“ÊZn¦#’CL¢­Þ<ÔŸšî,0;Úœ•ŽYV—j‚B€€t]¬×g±©-›;Z2¥†™VKØ¢—£<”žì–µ+뜓–v»›Æ¹‰–S‚d€€t.¬~¥g´¨¾£Z.¤ü ÐK¸¡]žÉ<{ž)ó+뛾›“ÑšòȬ•Œ‚|€€j2¿f´]λ@hPã·–ipC#´jÆ4*°èkô#¯>l¢!±HkãŸs°€€ií¾=n2]Ϻ9nØPõ¶BoœCE²wpn4[¯.q1#s­Jqœµ®èpæÀx)€€iͼçud]¸Úu€PÕ´Ïu¸C&°ív4Q­v|#‘«ˆv®¬Èv&œ‰|"€€i¨»r|k]a·f|P‡³]{éBò¯w{Þ4-¬{ð#“©ò{øgªâ{Ø›h¡€€izº1ƒ]5¶#‚ÚPV²‚KB´®+×4ª·š#”¨…ž©©0®šl€€€iN¹<Š»]µ‰ÉPD±ˆÜBž­ ˆ3ü©‘‡’#§:‡Àæ§«†¸™€€€i)¸‘þ]´GÈP?°‚B”¬Žl3ñ¨›á#§¦2ŽE"¦YŠé˜ß€€€i ·ó™Y]³ž—æPD¯Y–UB’«M•3ä§Ç”¶#œ¥^“Ì?¥YŠü˜H€€€hú· ë]#³ŸIPQ®µ|B–ª›œ%3é§ ›n#±¤”˜"V¤ƒ‹ —²€€€ÍPlmfD¹çn0hu¥ÓoØjàqcl”{rßndUtOp}Llu¤rP1­v©sÖ Çx1s¶Ë\iîqT¸Xkçrg¤mm¶swŸogt†yãqu—c>r–v¥Kasúw›0±tÜxU ævtwåɈgÉ|`¶‘iÜ|\¢ákË|_Ž&m™|}x‘oV|ªbpÿ|ÞJYro}/Æs+} !tî|ƒÇ»eâ‡P´Âh †P¡j …`Œškò„‡w*m̓Ó`ÛoŒƒ/ITq‚.éq™ë vs›€¸ÆdF’4³)f|TŸƒhŽ~‹jƒŒ»u×ln‹_²nC‰¢H`oˆA.p+‡ ärx„RÄÅc!±Ýe?špž8gU—µ‰ÊiS• t¦kG’…^¥m!3G‚n¦Ž)-inæŒÅ hq„‡ öaý¨°Ôd@¤—*fU úˆ»hTks©jRš]Èl3–ÿFÇm±”T,ÒmË’ó p¹†ÄÂía<³ ° c®ÄœSeªL‡Ûg…¥ÛrÊi„¡¸\ÿkmžF$lêšý,OlÙ˜\ ¯p†ŒÂj`»½þ¯…bú¸ç›²dø³“‡%fâ®NrhÚ©s\]jÂ¥>E‹l7¢>+Ælœ¨ mp†_¾¯tŽe`­u‚g¾šlvqiwZkýrxBmû\Zy,oîESzq»+zßs€}s}½Fr=oð«ésfq;™Zturp…¶uvs˜qvst½[jwqußDvx]vä*8ywõ{[x»Àp.zkª>qrz¶—Óršzù„?s¶{BoÁtÏ{•ZDuä{ìCsvÖ|2)XwN|?zyÖ|lº)n]„ʨšo²„3–1p샖‚×r‚þnxsO‚€Y'tx‚B…unŸ(‘u·.x…€1¸®lÑ)§'n2Ô¿o|ŒPlp¸ŠßmFq÷‰„Xs4ˆRA¨t-‡;'ÞtD†y´wdƒl·xk–™š¥ôlÿ—m“nM•#€Co‘’Úl0pÙ¯W)rŽ·@âs'>rûŒVgvÞƒ§¶‚j›¤¤ül¡$’’mTžInššækGoë—ùV`q.•V@>r“8&¼qÞ’#'wJƒ|µËiß®—¤>kLªç‘Ål‘¦ø~vmÏ£jwo"ŸaU£pnœ7?¦q]™ó&Ipê–âôw¡ƒYµVib¹$£¸jÉ´·‘#kþ¯ø}Æm/«>iÏnz¦òUoÅ£g?p®¡ %Çp™‹Êwçƒ=°p|ÿd¬ M}g}TiW|–}œkghþ}ñmeTD~VoS>~Õq$«r&÷gt¯SzÑn Ÿ3{'pß{zqh{u{Õr©gó|:sãSS|¯u=8},v#C}ÉvŸ¶®xq®xÕx‘àyMyŒ¾y¶y‘zKz&zfäzœzvRf{zí¹²–ô*ð:–F²‹÷€€Ž¾…Eª÷€—„e¨Wqcƒb¥Ea?‚b¢!PX—Ÿ˜>V že*›€Ž›5q€E‹Ë€€‡|˜czi–˜eYlD”ãgx\á“dirLI’kM:6‘ lõ%Ù‘8n <“•mt€}F†Õ–ýkŠyÏ•mk™“ing\E‘Ûo¿K¼{q9¾r'%xvrÈ .‘rE€€† •HsÛxt¥jÒ‘Ùud[{QvK ŽõvÔ9.úwt%Ôw» ŽÈw}€€…H“°|wþ‘ü|LiÌ]|sZ¦ŽÚ|—JKŒ|À8‘Œ”|å$œŒX|æ Œ¼} €€„o’]„Yw*±„høƒ¡YÆšƒ1I¨ŒA‚É8‹Q‚‡$8Šþ‚g íŠñƒº‘GŒÈvr¨‹ïh?ŽŠôYŒ‰‰ëI‹.ˆý7œŠ%ˆ[#ë‰Àˆk Ù‰g†€€ƒ&t•DuñŽÝ“ðg¼;’bX†‹¨ÅHkŠMh7‰BŽ˜#žˆ²ŽÆ ƈ‡I€€‚±ÖÎuvŽBœg:Œ—™ïXŠö—ÌGꉓ–6ˆŒ•k#4‡é” ¶‡‡>€€‚Zd¦„uΤ[fËŒ¡ÇW‘ŠgŸ/G„ˆ÷R6<‡åœp"î‡9—ž •†F‡(€€z¢¥bpn &d•`«îf R ›çhŠBXšjN0â˜þkÙÁl?ߘ¡l¾€Ðyü¡Aj{m žÌkâ`4œmAQ¹š]n•B˜€oÒ0£—JpÔf—Ïq –qÒ€€ykŸ¢rXlîBs!_šôsæQ!˜Ñt¬A‚–òuh0D•±uþ6–uûR“ÅwM€€xÄžzl2›»za^Í™xzœP|—XzÜ@ì•{/Ó”<{O÷”g{1t‘À|L€€xœ¿ïkˆšr¹^˜5vOÈ–-@h”4€ø/d’ï€Üµ’õ€ØŽý€€€w†›º‰ßjú™s‰8]“—0ˆuO:• ‡­?â“"‡/‘¹†±‘‡¨Žvƒ&€€wšÝ‘×j€˜žÄ]–X†Nº”+ŽH?m’@N.ÄÊŒô†eŒ¤Ç)ƒ;€€v³šE™ëjK˜˜ƒ\Ý•®–ËNs“a• ?‘e“Ö.cû“Ò0Œ‘=ÕŒƒE€€vk™Ö¢+j— {\‹•'ž\N’ÌœD>ÒÄ›.'K™ðŽÍ’FØ‹RƒF€€n­9a“bª]c’U:§·eƒGi¥;gW8M£h÷'6¢j*¤i§˜Ónb€€mƒ¬i?aº©jTý¦FkáG@£ m*87¡`nS'? 1oq¢-nŠ—-si€€mªp³a9§“qsT˜¤´r7FÞ¢s7ퟹsº'žrt.’ s˜• x0€€l¡¨êx`¯¦xSSý£,xœFj zxï7‰ž3yA&ÝœÜyl—ž2xõ”0|c€€l(§l`8¤¯PS¡Ù+EãŸ&71œÐ~ô&›p~ò’œ†~ã’耀€k½¦‡†ò_Ù£¥†wS% Ç…äE…ž …P6Ø›«„å&oš(„Õ’›„¸‘Æ€€€kd¥·Ž}_‘¢Ò¯Rߟ猲E:‹»6†š¼‹&;™%‹J¥™¨‰¡Û€€€k$¥–_T¢&”õRœŸ3“ŸDóœ_’Y6@™ô‘³%é˜a‘¼‚˜­Œƒ'€€€jð¤¡ã_V¡¤œ¨R™ž˜š÷DØ›¢™V63™˜Ï%ü—j–窗©Œž Š€€€a³¸|`‰Uôµ|bRI¡²de`ˆ"m$gîsinøji]·p¹lÑFÇrEo,Ïs&pÝ v*q¿ d%jÑ­KfŠl…šŽh¿n,†èjÒoËrFlÏq`\¨n±rëEÉpItS+èpñu] mthuk½Ia•u§«†d vN™f}vó…sh³w¥pøjÒx\[lÐyDÊnpy¯+nÙz érÜz-»w_K€]©¸aõ€—CdlȃîfÁo—iiZRkMCÏl¾)*Blä~ívq³~†¹Ì]U‹¨ `‰Ü•²b¦ˆµ‚ie ‡—nRgb†ŽY5i…§Bçk9„Í)‰k„rY‚?¸q[À•³¦Ô^’“»”pa-‘µ1c¢¶m-fÔX·\Zy c¥Ì]Vž“j_õšº€1bp—Þl=dÞ•1Wjg’ÀAqh»¯(`hÊ|sY…¶ŽY«¥\b§|’œ^þ£¾_av knc眙V­f,™@ÖgÉ—''ìfâ•"Ds¸„ê¶ XÔµ¬¤~[µ±?’^D¬¥~º`±¨!jÏc¤Ve` ~@Mfðž'neÈ™_t„̳7nì_G¢™pOb1‘q§dé~hrögwj´t?iíUéulM?¼v¤nw&wZoü2{ q±Âl,i«¡{mÏkŒoPmP}kp½nÿiÃr pŸUsxr2>øt sš%Wutxáyruɰ1iµsôŸÍk~tߎ{m u¸{ön­vŒhzp0w`Síq¡x.=þrÉxÜ$‡ræy&™yëzF®’g‚~ž&if~-ŒÚk!~.z•lÇ~)g8ni~0RÙoî~;=q~<#Òpá~[zS~+­eŸˆGœ³g˜‡‹‹lii†ºy.k …áflÑ…Q×nl„gøoŒ÷nÍp,‹\½qEŠUIrL‰64ÛròˆcïqˈK€€žmk€™UÜH‚ûH;ŽÊ‚¡9„†‚V)0Œ¾‚7vd‚hà‰'€—€€m¬’O‹'aõÕŠ¡UTE‰äG³¿‰9Œvˆv(Ï‹ˆQu‹ãˆ‡ß€¯€€mB‘‹“ a±’5UŽy‘GiŒÓ±8¼‹tŽÓ(pŠžŠÇŒ †Ñ€¾€€lïø›a_}™øT¹Ô˜_GŒ –±8rб•Ñ(9‰Å•'ü‰ÉŽ0'†€È€€eb¦W[°Z¤^Mð¢#`e@« [b1òŸdh çŸeŠ û¡»e”mÒ€€d³¤Ìc'Y¦¢ŽdñM“ mf°@lž{hV1Òœÿi¿ óœÕjŠ Ožúiý‹ûrÌ€€d+¢èjuY  ¸k¸Mž”lñ?øœšn1›o КÁo• }œloŠ{w¢€€c¡q«XkžârzLhœÉsã™?yì0´—©z' M—-z1 Ž˜z*‡Ñœ€€bž,€VWqœ€aKu™ø€H>|—ó€0U–Nú %•¢ø •–€†´€€€b&-‡¿W›‡yK$˜ð†ø>(–܆f/ú•2†æ”m†D ¬”t… …΀€€aÕœ^+VÌšJŽ›JÓ˜¾=Ø•ýŒÛ/®”DŒv‹“~Œ¯ ‰“%ˆz…!€€€a•›Ë–ÍV¿™®–$JÅ—l”ï=½•(“¬/«“J“g±’[‘ï ¿‘숟„œ€€€Y#±­ZdN¯R\Bd­^ª5œ«`ž',©ãb#“«abhE©¶cZˆçqý€€Xp°ga}Mº­âcB#«jd¹5©.f:':§½g`ê¨ÏgpÒ¦¿hQ‡ v²€€X®’hhMJ¬ iAЩ‰j´58§8kÎ'¥¬lš ¦sl|9£ómx†gzÝ€€W®¬§o:Lߪ&oýAW§¨p¹4ç¥Uqm&ߣ¼qì ¤Nq«„¡\rü…A~Š€€WRªývLЍ‚vŠA¥ÿvê4Š£¦w3&º¡õwm ¢]w)Ÿxá„>€€€Vÿ©­}#LP§*}J@Õ¤}N4^¢7}?&’ t}3 —}ÿœï~ƒ^€€€Vº¨ „-L)¦„@¹£uƒÇ4A¡ƒl&tŸ4ƒGŸ-ƒ‡>›!‚z‚­€€€V…§Ò‹CL¥2Šý@ª¢ƒŠg42Ÿþ‰Ï&]ž!‰Êÿž‰6M™«ƒ–‚€€€Vb§4’~L ¤z’"@§¡º‘U4.Ÿ#¤&g/™&œöäj˜pƒ©€€€€µ&aSY²£þcÑ]’6f/`7†hqcLkÞjŸfFW(l®i%A*nbkÏ'ënÚmݹt£nų*]Îda¢q`šf¬Ôc6hæ~Ke®kjºh m(Vj@o.@5küq'lr^cu5sA±NZ±o ª]³pJM`ƒqŒ|Öc&rÎine¬t TûgþuC?>i»vV&Qiew uµx"¯tWåyžÝ[yÜŒ^ z9{Y`Òz—hc{SÔeê{k>Ng¨{Ä%—fÝ{ëÕv$|š­¾UxƒòFX΃uŒ[ã‚öyÞ^Å‚yfâaŒ‚RÈd¯=veÊX$òd„vƒ€m¬RSvŽf›÷VéŠÌZ‹Àx¸] ŠjeÎ_ä‰(Qçbpˆ <¾d%‡$bbu†nvÓƒ¦«-QϘ՚êUX–¶‰ÐX‘”ƒwÊ[˜’Ydï^€TQ$aŽ…<)b¸ #ð`ÈŒ¢Fwƒ‘ªPP„£6šT C‰ WZ7w Zdš;d7]T—€Px_ñ•;œaŠ“V#Ž_l‘ì&wLƒ{©ÁO˜­u™’S4© ˆxVl¥¹vyYp¡øc°\^ž™P^ú›Å;(`š#"^E– wwƒj¨hÛYI˜cj©\¯‡Ïlk_æv%nbðceoÊeÜOq_h§:"r¯k* èrñlÌL}Ïnó¦eˆcw—4g¥e䆽išh1u-kvjcb€mBl}N³nñn9tp>pE [pqL.~sǤÞbˆmŽ•dÙo…7fûpxs¸hÿqÔa8jïs&M–l¸ti8mýu|m.uù~-xe£4_×wˆ“ÕbPx0ƒ–d”xÇr_f¸yQ_þhÍyÜLŒjªzc7«kæzÏújzáý~T|f¡¨]}’``]‚-b|&pþd¸€â^èfဤK—hÔ€w6èj€Kkht€ê~uÔ c[‹{‘+^BŠ– `¸‰’oéc ˆƒ]æe@‡‚JÉg5†£6ChX…øîf«…ÚÙ~‘€“Ÿ_Yù•t2\¼“Ì€_>‘ûoa›$]câŽoJeÜŒó5¿få‹áe3‹ŒÌ~¨€ŠžX»Ÿas[ˆœ÷Y^ š[nJ`l—¿\Zb¸•aIhd¹“i57e²’7:d6Á~º€‚žWØ©6ŽêZ¥¦ ~Ã]#¢§m²_{ŸN[ÐaÄœXHõcš4Ãd¢˜åËc “x¸~É€|›6p²X÷ŒÕqÌ\`}grñ_l¼tbŒZáuDedGÁvgh2òwhj`^wÍkZ€r™ám‡b‹£nîe|1pAgik£qŒi¡YårÑk¾Fætmº28tõo`ÒtÉoÜ€vȘ…j¡l Š?l@mÇ{m½oUj…o&pÆXîpƒr(FqÉst1™r¥t|cr&t“€zâ—hu™ˆÁiËv~yƒkgwFi:lìwùW¾nlx£EoÂyA0Çp‰y·ÊoìyŒ€~q• eƇgg¦Ýy•lÓ*ŸzGn@ˆ{…mö€zŒsjµ~½t lyp{tãn`åu»o¢P2vq>w]r]* wísE=yrË€}µŠÕp“s²}kq¨tÀo)r¡u­_èsv‡OOtzwK=guOwû)Žu½xivìwð€€‰“nk|®|Po™}n p©}W^¸q¥}zN]rž}š<Šs}}º(ÝsÆ}áu%}ž€€ˆ‰l¤…¶{Gmã…zmnÿ… ]Çp „‚Mqƒÿ;ãqÛƒ™([qÿƒeZs¡‚ú€€‡²k,ŽºzulyÞlAmœŒÃ]n«‹‘LÆo°Š{;Hp~‰¦'úpp‰i.rY‡p€€‡ j—¹yÍkX–Dk•l|”\]m‰’©L#nŽ‘:ªo[ö'€o'ìqPŠ%€€†—i$ ³yOjž´k kžœQ[Ðl¡™ÞK§m—Ò:En_–®'n •e§p‘‰è€€×‹X]uXX[—gÆZ^¡Xì}awHÁ¸d7‚'fq"уgø焤g߀ys€Ë~¶`âth~Êc_fÔ~íeµXgçH `iò6pÊk¹"g€„lÉßélš€}º| i]s9|Vk)eÍ|—lØW|ÜnfG2}-oØ5¾}–q!æ~q¶Å†q›€€~˜y¦qÊrz r÷d–zhtV.z»t÷F[{ uÓ5{‡vˆ!t{Ôvв}pw €€}€w‰zKpùx zÜcŒxy{IU,xÚ{™E´y?{á4‹y©|!yÀ| ª{¡|–€€|uׂÞp,vk‚ßbÍvá‚­T_wF‚\Dåw¬‚3òxß ŸwãÕƒz\€€{Ëtq‹jofuŠÞb u‰ŠS¥uñ‰(D4vXˆ]3\v ‡Ù Jv;ˆrxØ…U€€{1sR“ðnÎsû’àasts‘StÕC£u9ŽÌ2ËuzŽ+ÜtàŽ cwÎ…«€€z¾rxœ|nWs'šý`ós›™R“sò—C5tI•2ttz•s¶’Ö,w …†€€uNŠ·WÚi€‰ûZð\²‰|]ÞN¤‰'`›?4ˆþc-ó‰Je)ŠùeóõŠg€|_tXˆ_çh³‡™bS[è‡.džMø†ÙfÅ>©†«h¹-ކâjKOˆ0j»,‡lkú€ƒsj…‘gçg¬…>i³[ „ékfM#„¡lù=ø„xnd-„¡o}…™o N…q6€€rpƒ?oßf¡ƒqYö‚Çr8LJ‚Œs>=4‚pt#,m‚ŽtÊœƒ6t²]ƒ vÍ€€q}Bwàe¹x‘Y€êy"K]€·y˜<™€“yü+耩zBH€ÿznD{À€€p¦òdï€#XRU€'Jµ!€ <~øð+³~éå3~óè½ø€€oö~9ˆ da~:‡ÆWÏ~ ‡=J+}ʆ”;r}›† +)}}…Ô÷}*†–~vÀ€€oi}&$c×}/rWE}ŽgIª|µ<:õ||Œ`*¤|QŒ<{´‹[Ÿ}jÆ€€ný|S˜Kcj|`—BVÓ|,•¿I;{Ö”":—{“*[{I’ÿQzu| ¼€€i”W ]ГHY÷Q®’U\ÅDQ‘•_b5y‘%a°$r‘¢cUO”Œc'ˆ iš€~Ôh’#^¨]‘`ýQ !c8CÌQeN5ŽÌg$>h[i‘mgú†"nd€€gQ¶f7\@ŽÌgýPPçi­Ck=4Œ‘l•#âŒÂmn^Ž‚lé„^s§€€f~qm¼[^ŒžnÿOb‹Ép*Be‹q<3슀r #oŠ˜r7‹Ïr‚¼xš€€e¯‹}uLZ–мvN›‰ñvÂAž‰.wP3fˆŸwÈ#ˆ¢wý ‰Sw”N|倀d÷‰â|ðYî‰0}KNˆg}{A ‡Ÿ}2Þ‡}™"Ù†Ì}£ ‡}µ€€€€dZˆˆ„‹YR‡æ„wMh‡ „/@v†TƒÐ2Z…°ƒŠ"€…Xƒ‰3…!ƒG€€€€cÞ‡€ŒEY †ï‹åM/†‹$@?…,Š;2/„g‰°"6„Š僠‡ò€€€€c|†±”X­†!“|LË…M’S?á„O‘1ãƒsn"‚í*Û‚]Š €€€€\àžñUßRBYXŸFÀœ[E9ùšû]¸+‰š}_¾I›Í`¸„œJaƒ£mI€€\œÝ]Q¬›Y_UF7™ôay9•˜Àcr+Q˜e P™e´ߘÝeã‚r1€€[_š…dCPõ™eüEŸ—½g¢9–„i&*ê•ÅjV&–‡jµ•œj䀗w€€Z¶˜@kZP8–çlžDÑ•—mÎ8j”anã*j“Ÿo±Ý”3oÎ.’±p#€{e€€Z –LrO’•s[D0“·t7Æ’|t·*‘«u-”’u!1*uÞ€.€€Ys”·yÈO“}zCC±’.z•7QézÃ)˜zßq-zÌ;ø{Ñ€€€€Xð“kN–’>;CLê#6í—€ì).Ž¥€Î Ž©€ëPŒ€à€€€€Xˆ’\ˆ`N/‘:ˆ;Bçæ‡Ä6ކ‡6(Ü~‡·s‡G+Š£„Ù€€€€X7‘ŽåN r£BÃŽÎ6oÛ(âŒWÂùŒŒ¡r‰T… €€€€P¦ªaTMFb¨˜VÒ;M§ Y=.ì¥ä[i †¥Ù\÷—¨£] `|€q.€€Oƨ”[*EĦÌ]7:¿¥_2.…£Á`÷ [£mb+Ç¥²ble€uø€€O=¦SaïE-¤–cŽ:A¢ëe.¡~fy ¡gVÑ¢ág šÞiî€z<€€NǤ h§D£¢YiÞ9¤ ¶k-¡ŸIlÀž¿l‘Æ ?l(˜wo+€}ÿ€€NK¢ oqD+ kpN93žÅq-+Lq¤Œœ¥qöÀÙqŽ5–u €€€€M× jv`CÊžÓvð8ä(wU,뛞w‘Xš×wœØ›©w^q“ÚzT€€€€MsŸ}UCƒ}¢8«›Ï}°,·š7}ž&™]}ŒÑ™å}µ°’ ~΀€€€M$ž„YCJœs„q8š¶„2,™™ƒß ˜ƒäª˜wƒ{µ™€{€€€€Lñ)‹C(›”‹†8d™Ð‹,†˜ŠŽ–óНÙ—ˆDÝg€–€€€€©ÎZêS©™­]ÇW|ˆó`†[5wPc,^Ìd¨eºbCPáhe•;ÂiÝh£#%ipjéçygl˧ÂV£^ ˜Yà`þ‡‡\îcÆv _Øfxc€bŸiOÖe"k:ÓfçmÐ"eeØolÈyœqg¥ÜRÌh–GVUjs…ûY§lLt•\Ænb2_»oßN¶b^q9åds!±b±t­yÊvb£ùOSrÝ”zS sÚ„| X_ê|VEŽb(|¤1­c|å°cD|dQ‚„µ‡Gg{Q*Ðgh{4jz{o€€ŠY ‚|Ò\j‚n¢^òß_eaF O'cgd=e ;*Me$,æh÷;€€‰W™‹O{çZ}ŠžmÅ]‰¼^–_ˆÈNda®‡í<úcK‡B)éc'†ÿ³g°†C€€ˆ\Uö”‚{1Xí“'m[•‘Ž]ì^êM¿`6Ž{<[aÎq)oanI‚fªŠb€€‡ÙTº™zªW½›Ÿl‚Zg™V]^\Ò—ME_•;ú`“Ó) _ï“h$eï‹—€€…0q’S@xjr–Vój¥s³Zx[¥tØ]ÉK^u÷`ç9—wc»%™wùe× ºzÄf€uƒÇmÒ\w7o0_ip„aÎZ¥qÍdsJ‚sfí8át"i$% tÈj¶ w÷jª€yá‚pj]dÝuÒlghXmƒi2Ynîk)I˜p@lÿ8#q^nž$‚q¼o² eu‚oŠ€}€g3m°tpi o7gj¶p¡X•l@qòH½m®s"7}nÌt+$nátË Ns^t³€€ºdrv€sHfswceÜh>x"W`iÝxÁGÏkZyT6¤lxyÓ#ml9z q›ze€€~ bYr7d9šdÜf­VpgУFôiT˜6j_˜"÷iÊ£ ßpÇ€€}¼`(ˆ&q^bZ‡ÊddL‡4U®f ††F=g˜…ë5ph“…‚"¤g¤…Š ËnÏ„C€€} ^‘åp³`ÔöcdbÐŽ»U d”kEŸfŒP4Ôg ‹¥".eØ‹é ³mê‡<€€|‹]W™’p2_¨˜ bÛa¥–JT„cd”aE)då’Ö4xe¾’!Édb‘Q knd‡ €€xýyîRþmzbV` {YöQ×{°])BG|h`0ÿ}Ab®â~ld#„€édí€y w³v`[Hkõw(^/_wò`ïPÿx¸c…A”y}eæ0tzGgêˆ{hñ›~)i²€|Àv}s c—j°teÔ]üu góOüuêië@¹v¿k¸/Åw}m5wËmÖœ{Ån¹€ïuDpkßisq:m}\ºrOnþOsEp`?ât.qš/!tßr–¦tºrâŸy±t(€€tmWt7hKn°u:[¢oÞvNpçvÞ?joÎ}œ.pR}½áoˆ}˜x<~‚€€r:i3„ùf¡j¾„äZl „‘Lxm%„"=ºnƒÄ-nnuƒ—˜mˆƒÞšx8‚ƒ€€q’g§FfiCŒ±Yxj–‹ÍKäk°ŠÎ=(l“Š,Ül߉º+kö‰Ì™x:ƒ€€qfq•e„h”ŽX÷ip“"Kejƒ‘ž<½kX€,Šk…_Ðj´Žˆlx‡‚ý€€lÅ‚ÙR{a‚‚ÍUçUH‚ôY,G˃9\=8Öƒ¡_'Ù„xa,ô†»a•ƒ:e®€|k–„ZN`Á]!Tf€_ÐG€UbS8C€¹d'tkfDׂûf_ jb€6j„|Sb#_o|Ëd^Sv}2f|F.}hn7‹}øj'&ê~Škg”‰k?€oz€€imyfiø^Nzk¡RQz…m-EKz÷n˜6¿{hoÎ&L{Ûp¡9|pH€tþ€€hcvÕqÓ]TwrõQ]x%sõDQx¢tÑ6#y u%Èy`võyøuž€y gst yÅ\puxzbPˆvzÕCšv{%5vÿ{d%}w{’×w¹{`€~ €€f®rȳ[Ës½ÛOötkÅC tãŒ4éu9c$÷u/d©uÚ‰€€€€fqI‰š[4rM‰UObsˆ½B‚stˆ4gs»‡‹$rs‰‡›Ktj†Á€€€€e˜p‘†Z¾q(êNëqàÛBrK޳4 r~Ž$/r!Ž6s?Šð€€€€`¦ŒoQ˜V‹íTÜJw‹©Wý=œ‹•Zä/‹×]e)^ú €Žj_)€ii€~p_‰RXþU+‰[»IªˆÞ^U<õˆÄ`¼.¡ˆîbÆɉùcø ¤Š¨cý€n)€€^Ÿ†A`cT-†1b˜H׆d¯Å’§\]2ˆ’D^›$g’ˆ`OØ”ç`™Ô‘ bi€qø€€RË‘ ^?HÜy`g> ìbm1؇d9#ä¯e‡›‘¤eŽËgg€v䀀RŽBe@HÈfñ=(Kh1/Œéiá#TjÐJŽ“jŠðl¤€{<€€Q9‹ÈlUGD‹im–ß¡Œ;MÀd¹|ïQœg"lŠUAi{[ X¨k¾H[Šmè4š\óoÚ]Jq$š}Ktâ˜èEE÷RÞ€C2‘S €X«W)€¨º}€å” :–Šq†J@‰ˆw±Eˆ§hI‰‡ÔW;M“‡E\P­†{2.Q5†!gUʆ’Â}0’õ8”?…e=À’vvùBíÄgnG˜5V¹K»ÖDÜNÔŒ¶1ÃOŒ1T¯‹ËÈ|ý4’36´„¾;ò›vqAB˜†gF –KVlJ?”cD¥MY’ã1‰M^’P÷SÏðÍ|õ8“ƒZ¾Mî…C]aR v[_ýV9f}bŠZ/Udù]ûC=ga/Oh@d±ªiufT€mÒ‘yU™W™ƒÕX»Zþu-[¶^Je^avT£a1dxB€cjgJ.¹d]i·Nf`jÚ€r°šPäaI‚Tmc×s™W¹fPdZÏh¯SV]¥jòAc_ñm-Ñ`nÚ±càoŠ€wbÊL“jë€GPsl§qõTnVb´WRoòR)ZYqx@j\¯rç-] t8a¸ts€{vŒH®t†~ÅLÛu{p’P­vca`T,wôW~Ô+õVÀ ‡^dX€€‰ˆB[‡ž|~G‡ n—KD†m_žO…ÍO”R~…C>XTÔ„ß+›TL„ÄU]¢„ú€€ˆ¡?ðÿ{²DÊ­mâI0ŽJ_M&ŒóOP•‹Ð=ËRÜŠù+-RGŠÆ*]뉛€€‡ÿ>š{C ˜mVGŠ•õ^†K’“òN O ’E=‚QE‘*áP­‘ß^i@€€ˆaìN zÃdRl±f&V]›h9YìMVj.]‘;¤kÚ`ï'òl˜c©“pëdh€q´†'\ùWyH_‹Zwkcaþ]¶\{dQ`ÓLYfrcÃ:Ìh)fu'Bh‡h”Cnhÿ€vh„nXb`Fw´[[bßj-^ec[\`£gÅKibèj: d¡l &¹d’m™k‡mÅ€z‹‚»T0iivWykBh•Ztm Z]0nºJ?_ pJ9aUq´%ù`Èr½ ¸ixrÏ€~#2PkrˆtªSôsªgAW)t¹XÔZu²I\\Ÿv8L^Kwq%g]ƒx ~i1x:€€ëM!{§s€Pá|f6TG|oWßWV|µH{Yö|ù7²[}C$öZÌ}‰ Ri|~ €€~áJM„´rŽN<„xe[QÊ„WTøƒ°GÀW¥ƒY7Y&ƒ)$¦X‘ƒD ˜YaÒ.ŠY”y@[žtÓ„y€€pÑqsMâer“Q¤XxsÍUUJÑuXÞ;Ív-\ *çwC^Ùx0`§~æbZ€xÚolëUÜc»njYW_oÜ\.Iéq6_!; rjaÐ*RsZdCt d×Î~¤g!€|„m–h§]÷bRjx`‘V6l#cHØmei:&nÝgˆ)šoŸi7Çp}i­à~†l*€¼l5d´f`øfÄhTâhœi÷GÞj6k½9Fk„mM(ðln‚]mnn©ó~eq–€€jãa#nF_¸cfo¤S»edpíFÊgr8£hns"(mhÃsçjÉsÚ~.w€€iÅ^v€^È`vwPRçb–wÿEôd\x7Íe£y'Ùeªyx®hšyg~0{ô€€hÜ[K~«]í]ã~ôR` E6aò 7c+'GbÞ/qf»f$~ú€€h%Y†À]D[»†Qy^ †D _ã…‰6‰a…)&´`a…&eT…D0}þ€Î€€gžW-ŽÆ\ÅZŽ3P÷\^6D"^2Œ"6 _?‹j&g^a‹‰°d8‰ó~5€¸€€dãz MZYÜz¸PøN{ˆT‚A|dWÝ2t}LZÛ!”~€] Ì€ ]x€e€{´cEuÂTßX¨vÁXLýwº[@*x¤]Ø1Èy‚`S!zgb ´|¬b=€jH€~ôañq§\ƒW]rî_Kîta?/uc×0úuæeÐ vxg |yAg€oV€€`°mÕd2VoQf4J°p—h>7q¬iß0r~kYÕr³l? 0vXl €tÑ€€_„j\kèUlm_I¤min¼=,n‹oó/xoOpùKoqˆ þsÐqn€y²€€^vgFs²Tit¤H¾jœut†ª€€€€Xóƒ\L`N«ƒ–OÝC„„S>7 „šVa(¼…€YV‡‰Z\q‡Õ[¢€i5€~WxNS|M„ÕVŠBy€`Yq6,€ñ\(±^Iñƒ3_C„`n€mñ€€VH{ZZ³LT|]@A{|É_ª5>}_a×'S~c‘k~ûd/Š€¶eV€s$€€U+w¢aõK1x’cý@VyUeä4Xy÷gš&ˆzhæÓzøi/s}Üjo€x €€Tt9iGJ)uRjÎ?Uv/l63bvÐml%âw7nXGw„n^Z{ioã€|r€€S&q,p«ICroq»>„sdr¦2¡tsg%7t=sët‡sÓbyCu߀€€€RQnwx Hsoçx©=Äpöy1õq–yk$¡q›yŸ¢r&y€xJ{s€€€€Q¦l'tGïm̸=Xn÷±1¨o‰$eoR‰Bp:°\x¢€'€€€€Q%j?†òGol†é<ÜmA†x19mÎ…ó$md…Ûn¤…¸Qxµ‚뀀€€Lï J×C`jN68ÕƒQi,½ÿTDU_VW €‘ÝVö‰Š\4€l­€€K“‰ËQ”B8‰æT‹7µŠWP+ÅŠY¾™‹˜[l 9[Ö†N`߀qŽ€€J……úXgA†KZé6¼†”]<*׆ó_;܇Ô`„ 䈞`¿ƒTeº€vˆ€€I‚T_G@‚ÈaO5«ƒ#c+*ƒd¿ „1e« ˆ„·e€ªjÞ€z뀀H›~ñfM|°np3þ}6oh(q}}p"û}¦pl ~†p‡€vU€€€€Føy1t]=•z-u3\zËu§'æ{vrzçv Ô|6vl€{G€€€€FOvÐ{l<ëx{Ð2½x¼{ø']xí|úx„{û mzo|­€x€€€€EÓtÛ‚¼<‡vD‚à2ow ‚Ÿ':w9‚K$vr‚[ Îxµ‚€€€€€€@™™EH«7²˜­Kå-£˜”NÔ!ª™QQ;yœ2RSR™¾T`„²_Š€p €€?7•¼O6T•ŽQÙ,,•™Tb K–@Vfn˜¡W/ •Y?®d@€u€€>A’Ux5:’Wá+’>Z:’×[  ”Ã\ÒÏ^.€i#€yt€€=oŽ}[ý4PŽŸ]ö*ŽÕ_©gd`èÿ×a*ªc:€nV€}X€€<š‹bš3t‹id&)D‹­et™Œ"fK§fg™‰Åh‡€t€€€€;ˇòi]2¦ˆ‡j(ˆåkk‰Bkñ?‰¤kÖ¦‡n0€y;€€€€;…)p)1ô…þpï'ø†wqy†¿q´熮q†–„ÅtS€}˜€€€€:|‚»w 1]ƒÏw|'v„ew®.„—w¨£„Iw’nƒz+€€€€€€: €ª~'0çö~O' ‚¬~1ã‚Ì~‘‚\~.‰ˆ~ÿ€€€€€€ÿÿÿÿÿÿmft2 $ÚiÙ 6 … Ç ÿ1^‹·â 2Wy˜µÒï%Y ‡!²"Ú#ÿ%#&D'f(†)§*Ç+è-.(/H0i1‰2¦3Â4Þ5û7859Q:m;‰<¥=Â>Þ?øAB)CBD\EuFG©HÃIÝJ÷LM,NCOYPoQ†RœS²TÉUßVöX Y#Z:[Q\f]x^Š_›`­a¾bÏcàdñfgh#i3jBkRl^mgnqozpƒqŒr”sœt£uªv±w·x½yÃzÈ{Í|Î}Í~ÌË€Éǂф¿…»†·‡³ˆ®‰©Š¤‹žŒ˜‘ކ{p‘d’X“L”@•3–&—˜ ˜ÿ™òšä›ÖœÈ»ž­ŸŸ Ž¡|¢j£W¤E¥3¦ §§ü¨ê©×ªÅ«³¬¡­®}¯k°Y±G²6³$´µµí¶Ú·È¸µ¹£º»~¼k½Y¾G¿5À"ÁÁþÂìÃÚÄÇŵƣǑÈ~ÉlÊYËDÌ.ÍÎÎëÏÕоѧÒÓyÔaÕIÖ1×ØØæÙÍÚ²Û˜Ü}ÝbÞGß,ààôáØâ»ãžä{åWæ3ççèèÁéšêqëHììðíÃî–ïvðUñ3òòêóÃôœõsöI÷÷óøÆù•úaû)ûëü§ý\þ þ´ÿZÿÿè§,„¿ç     üóæØÌÖÞááßÛÖ Ñ!Ë"Ä#¾$¸%³&®'ª(¦)¢* +ž,-š.•/‘01‰2†3ƒ45678€9‚:;~<|=|>|?}@A‚B…C‰DE’F˜GšH›IJŸK£L¦MªN¯O´PºQÀRÇSÎTÕU×VÙWÛXÞYàZã[ç\ê]í^ñ_õ`øaücdeeÿfügúhøiõjókðlîmënèoåpáqÞrÚsÖtÍuÃv¹w¯x¥y›z{…|z}o~dX€MA‚5ƒ)„……þ†í‡ÛˆÊ‰¸Š¦‹•ŒƒqŽ`N=‘,’“ “ú”é•Ù–É—º˜§™“š€›mœZHž6Ÿ% ¡¡õ¢æ£Ø¤Ê¥½¦±§¦¨›©‘ª‡«¬w­o®g¯`°Z±T²O³L´IµF¶E·D¸E¹FºH»J¼N½R¾W¿]ÀcÁjÂrÃ{ĄŊÆÇ–Èɥʭ˶̿ÍÈÎÒÏÜÐæÑñÒûÔÕÖ×*Ø7ÙDÚQÛ^ÜkÝyކߔàœá¢â¨ã­ä²å¶æºç½èÀéÃêÔëåìõîïð ñ,ò8óCôNõYöc÷jønùoúlûdüVýDþ/ÿÿÿØhÆ 2 R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$ù%î&ã'Ø(Ì)Á*¶+«,Ÿ-“.‡/|0p1d2Y3M4A566+7!89 ::ö;í<ã=Û>Ó?Ë@ÄA½B·C²D¬E¦F¡GœH—I”JKŽL‹MŠN‰OˆPˆQ‰RˆSˆTˆUˆV‰WŠX‹YZ[‘\“]–^˜_›`aŸb c¡d£e¤f¦g§h¨i©jªkªl«m«n«o«p©q¨r¥s£t uv™w•x‘yŒz‡{‚||}v~oi€aZ‚QƒH„>…5†+‡!ˆ‰ ŠŠ÷‹íŒâØŽÍù‘¯’¥“œ”’•‰–€—x˜p™jšc›^œYUžRŸP O¡O¢P£R¤U¥Y¦_§f¨n©xª‚«Ž¬œ­«®»¯Ì°ß±ó³ ´ µ8¶Q·l¸‡¹¤ºÂ»á½¾!¿CÀeÁ‡ÂªÃÎÄñÆÇ9È^ɂʦËÊÌíÎÏ2ÐTÑtÒ”Ó²ÔÏÕëרÙ6ÚLÛaÜt݇ޘߧà³á¾âÇãÍäÑåÒæÐçÌèÄéºê¬ë›ì‡íoîXï\ð[ñVòLó=ô*õõööÖ÷³øùbú/úôû±üfýý³þMþáÿqÿÿÙ T– ¡ ¤ Ÿ “ ‚p_L7! ðÖ»Ÿƒ}tfUA, ê!Ó"½#¦$%z&d'N(9)%**ý+ê,×-Ä.±/ž0Œ1y2g3U4D526"788ñ9â:Ó;Ä<µ=¦>˜?Š@}AoBbCUDIE~% ô€Û‚¨ƒ„r…W†;‡ ˆˆê‰Ïг‹˜Œ}bŽG-ø‘Þ’Ä“ª”‘•x–`—G˜/™ššê›Ôœ¿ªž–Ÿƒ q¡_¢O£?¤0¥"¦§§ý¨ó©êªâ«Û¬Õ­Ð®Ë¯Ç°Ä±Â²Á³Á´ÂµÅ¶È·Í¸Ó¹Ûºã»í¼ø¾¿À Á0Â@ÃRÄfÅzÆÇ¦È¾ÉÖÊñÌ Í*ÎGÏcЀџҿÓàÕÖ'×LØsÙ›ÚÄÛïÝÞFßsà¡áÏãäM噿çè6é†êØì+í€î×ð1ñòïôMõª÷øZù«úöü:ý{þ»ÿÿÿ€€æOÎXÍ™¨~Í´Ú™~yœ£~eƒLÆ~…j…þ~ÀQ¿€c=9€üÅ~|‹4äµ~c‰lÌ@~]‡Ì³š~n†fšØ~˜…C‚~Ù„OiZ/ƒgP®¯‚¡8€væú¼}6–qâû}0“’ÊË}>ϲ:}iŽ^™“}¬Œ,€ï~Š"hN~uˆOÁ †7A胬øã|.¡·áA|3¿É3|M™ð°Â|…–W˜E|ß“Ë}OógV}ÑŒµNï~|‰M6‡g…\÷7{c­ߥ{f§ëǪ{‡£ ¯`{Éži–ø|+™ø~²|¯•·fn}C‘AN.}ýŒ{5å~ô†ïõ¼zʸUÞ/zDzÆCz䬮{,¦a•Ü{™ Ú}¤|$›Ye•|È•¨M‚}‘5[~‘ˆ_ôwzRêÜìzF¼2Å z]µ ¬ùz§®;”é{§›|Ù{¶ èdØ|`™ÝLí}5’P4è~=‰§ócy÷ÏÛØyãÆ@Ãúyò½ä«÷z:µì”z¸®$| {[¦@dH|åLo|ê”ã4‰}÷ŠÅòuy´ÚZÚëy—Ð2ÃyŸÆ”«yã½j“;zd´j{w{ «@cÂ{Ì¡–L |¯—34=}¾‹¶îSˆÛ~6׆‡Ä}ÂÀŸ†Ã}p©Œ…æ}U’R…*}u{„†}Æcăñ~5Lƒx~é5’ƒ(€ì=‡}ˆËÖ†p‡@¿k…ƒ…ã¨c„»„Á‘„ƒßyÔƒ”ƒ-bœƒ‚K’‚Â4Ø‚Áêz†G“eÔt…MÚ½ü„oŽs§ ƒÄŒXíƒ9Šwxʂʈ½a¶‚i‡JÍ‚&…L43‚ƒoèÛ…OþÒà„_št¼zƒŽ—¥«‚ç“莴‚r‘ w»‚ŽA`ÖÇ‹dJ—ˆh3¢‹…ç\„‹¨ Ñlƒ¤»‚ÔŸº¤[‚7›”€Â—•vºx“»`9²Iu‹e3$†{æƒñ³KЃ­º¹Í‚:¨X£2££-Œ{6ž uÈ€î™_J€¾“ÛH䀯Ž:2¹€Á‡ÏäÕƒs½øÎú‚‡·V¸µ¼°â¢/&ª¨‹Ÿ€Ä¤Šu€ƒžU^§€T—ÑHi€SÙ2`€rˆûãփȥ΂$Àâ·ÆW¹S¡J€¿±úŠÐ€aª»tk€.£\^)€›•H€“;2€0‰þソÓTÍ7ÖÊY¶úÁš ˆ€n¹Š#€°¢sÚâ¨]·ÆžýG«ЕV1ÜûŠ×Þ‘â|°Èîñ|c³±Ž|:ž;Œh|GˆŠÞ|rʼni} ]‡ü}¨G{†™~“2Q…9ñÜ*´†—Ç”ŽÁ…R²’Œô„<6‹Wƒ[‡Ž‰ä‚¶qÒˆˆ‚=\+‡3ØF¹…é¢1Ë„¢Ú£Ž•Æ9¨ŽW±r‹ÝŒ>œŠWŠp†xˆøˆÙpЇµ‡h[H†w…üF…F„Ÿ1T„ƒ4ÙBŽ›š—ÄØŒ¿—l°‹”kšÈ‰‚‘¤…Rˆ9oÙ‡Œ¨Zƒ…ØŠ&Eo„º‡0샠„¯×îᤔÇŒ  ®ºŠ[œ›™ˆÞ˜ä„:‡•Onð†k‘ÕYÎ…JŽ4Dè„=Š[0‘ƒ5† ÖµK®œÂ\‹w©­™‰Ê¤Ä˜‚ˆR ƒL‡›~n…á–âY+„Î’DsƒÐŒÿ0E‚Ú‡DÕ§ŒÐ¸£Á\Šÿ²°¬¡‰Q¬Ú—›‡Ý§*‚††›¡Šmw…z›ÐX¡„b•ÐDƒsl0‚ˆVÔÂŒj¦À†Š»²«Ïˆñ´Ô–ч{®Ά=§[lã…) ‚X6„™NCÁƒ'‘œ/Ñ‚N‰AԌ̩¿ÕŠMÄ «ˆ£¼¥–'‡-´¾7…ñ¬Þlg„à¤ÕWÔƒÙœmCx‚ô“…/§‚ŠÎO›{€º¢˜Y{Q¦ï•¬{F“ “'{s~èÆ{Új¨Žu|wVˆŒ"}9B–‰Â~P/B‡BâÌš„Ò¹—<ƒ¾¦”—‚Õ’4’ ‚$~Ó­iÚ˜cUÆ‹Y1Aü‰7.zËB™Ž!¸D–EŒ.¤ù“ŠZ‘.‘7ˆÕ} Žú‡}iŒÑ†JUŠ¥…Atˆp„ .¥†‚úÊ!˜—Ž·•c”¹£Ë’É’WŒ|Ž-Qh Œ‹)TX‰ùˆù@ò‡Û†Á.e…Ÿ„^Èÿ—f ö¶”­D¢¯’™¿Žú½–i{ ‰“3gQ‹S¾‰mŒÍ@Ї]‰a..…4…¡Çì–Øª`´þ”"¥×¡®‘’¡pŽ 91zL ™f—Šø”ÎS6ˆðt@0†ï‹Ó-ÿ„؆ÁÆû–d³¿´ “®®V ×‘©AŽÈ£ÑyžŒ¡ž§f Š“™cRƈ‚“â?熎 -Ø„Œ‡»Æ.–½³e“N¶Ä !À°|Œ’ŽiªDxþŒF¤e‰ŠDºRkˆ6—?ª†A -¸„LˆÅ…•¯Æq²Í’ü¿Ÿ‰r·Æ‹þްwx{‹û©(e ‰þ¡²R‡ý™ì?p†‘Â-Ÿ„‰@¿ ¤‡z­¬É úzš|z–ˆšzØur–Þ{Vb´“¥| P*[|é=áŒî~ ,j‰;Ó½¢£œƒp«âŸò‚|™Îœsµ‡n™%tÅ•ï€Òb ’Ç€®O‰€¦=nŒ5€Ü,Iˆ—Y¼ƒ¢©Œ6ªÜŸŠn˜ì›…ˆÏ†Œ˜A‡usó•†PaR’…PNóŽÙ„[= ‹ƒ…,,ˆ‚Ä»‚¡Ý”ì©ÐžD’[—ÙšÌù…•—~Âs”d‹Í`˜‘T‰æNfŽ4‡ú<²Šû†,‡„„º¥¡è鎚e–çš!—4„¡–Ú”&r<“©‘?_橎kMᔋ}›Ù¹Þ”V˜j³‚)•0¬Jp’ ¥‰^*ž¤L™Œ —;Ÿ‰+Å…ôˆ‰°®(z&ŸŠ©Íz ŽŽ¥~z}€¡HzjlJ!zø[˜ð{ÀJ ” |±9j}ÿ)Ћį\­R‚fžÔ¨Ù‚ޤ„€Ð|þ P€Zk¿œ2€"Z}˜€I“Ê€69!K€“)àŠk9®w¬kŠŸž§÷ˆ÷R£‡{|GŸs†Gk›]…HYé—E„sI“ ƒ®8䎛ƒ)î‰Ï‚‘­´«›’Ï.§4jŒs¢ãŽ2{{ž±Œ5j\š£ŠpYT–’ˆÁH°’`‡8¯þ…n)ú‰GƒÉ¬íªýšõœj¦–—Ô‹ª¢I”çz´ž’,i°™ùƒXÍ•òŒøHT‘ÅŠV8‚q‡¥*ˆÑ„à¬Dªb£7›É¥ýŸR‹ ¡°›™z„˜i#™f”…XV•Q‘H‘0k8ZŒð‰¯* ˆn…Ô«ž©ï«^›D¥€¦¨ŠŽ¡-¢y¯h³˜ï™TWý”æ”åGÅ»M8>Œˆ‹‡*ˆ†¥«©—³hšÃ¥­ÚŠ Ê¨ly1œž£hT˜“ÛW°”•˜|G“j’ì8*Œ5%*‡Ø‡Tªƒ©L»dšW¤É´è‰´ u®…xÕœM¨Ah˜F¢ Wx”K›µGn/•38ŒŽ‚*‡£‡ã¢á·üyÇ“²Ìy£ƒ<­ªy¸su¨–zc™£}z¬S¿žH{ƒDF˜ß|†5J“}ç'ŒÙ¶¡ä·-’w±è€°‚Ö¬¼€ s§£¨c+¢Œ‡SX]žCñ—úÖ5,’D€U'¼Œ¡?¶F‰B‘Û± ‡°‚O«Ø†Mr„¦Â…9b¨¡®„\R뜆ƒ®C¥—*ƒ5‘ƒ‚¨'ò‹p‚b ·µræ‘D°>Ž¥©«Œ•qì¥òŠÄb  ç‰-R›Æ‡±C`–q†:5Ù„Ú(!ŠÞƒˆ ,´Ç˜‡·¯’•”ªi’Ùq[¥LOa¦ 3éR#›‹›C'•Ή@4øC†ä(HŠa„Ÿ›´B %7¯œy€£©Ö™p•¼aDŸ¤’‰QÕš~UBù•8Œ4í¿ˆÁ(i‰÷…nŸ.³º§°Ö®z£@€I©LŸpœ¤5šò`ýŸ%–îQ¡š’ÛBÖ”«Žª4åFŠf(…‰ †/ž·³\¯® ©Í€¨Ò¤´p^£±ŸÍ`ž¥šúQq™š–B¼”T‘4åŽî‹Ú(›‰Y†ÏžM³ ¶g<­®°4˨sª0p(£W¤d`œžPž´Q[™H˜ïB´”“ 4ꎶ(­‰ ‡Q•ìÁýy‡2»òyPx‘µøybiü¯ÿyÂ[g©ëzhL죡{O>ë|b1…–}Ó%tŽo©•<Á&€Ø†Ñ»ùxEµ\i®¯[¨ó~üL¦¢§,>½œ€1“•€%Ü”ÙÀ2ˆ†kº3†‹wë´+…;iM®"„AZ¼¨ƒ„Lb¡¼‚ú>š›-‚‰1¥”@‚K&6Œæ‚8”‘¿P.†¹Tw‚³O‹hí­<‰mZh§%ˆL% å†µ>~š_…t1¸“„„S&„ŒHƒN”B¾“–H…Ƹ’“yw3²Šêh™¬zŽ“Z%¦XŒeKø 'ŠT>k™¬ˆ<1Ë’â†3&Nj„B“ä½ý]…{·ð™Üvõ±á–›hf«Ò“’Yö¥µ¥KÖŸ}Á>_™ ŠÓ1Ý’U‡æ&þ‹R…“‰½ƒ¤N…:·h vıQœh?«A˜KYØ¥/”¢KÄžüñ>X˜ƒ-1ì‘܉e',Šõ…Æ“M½«…¶å¦ v§°Í¡Fh,ª¿œ¿Yɤ³˜RKºž‘“Õ>U˜D1ú‘qН'QŠ©†Z“¼¢±µ„ò¶t«¿vŸ°Q¦h'ª9 ¹Y̤,›ŽKÇž–W>n—º‘2‘0‹Æ'oŠn†Ñ‰•Ì$yp{õÅ6y(nf¾hy/`ì·ŽyS°xzND~Ù}46Ëé~}ð²y¹„ÏÚ-z4ƒÊÃ*z³‚è«Ï{;‚2”4{Ъ|ˆ|vBdá}.€ãMU~€Ÿ6:€hîÌxYØjxåÚÁŸyx‹Òª^zŠ’êzɈ}{d{‹‡cä|_…†L}}[ƒþ5L~›‚?íw3›1Ö®wÈ—ï¿øxh”بày‘ò‘˜yáTzAz»ŒÃbò{§ŠK¸|¹‡G4­~ ƒýëivG¦UÕvÞ¢¾rw…Þ§wxA™ìMy–y(z’rb {Ž–K|,Šo4$}…êu“±oÓ¿v'¬½vͦצ7w¡Ï/xnœæxyi—ýa9z|’ëJ_{²m3¯}‡èÚu¼{Òu•¶»ÿv7¯º¥$vû©”Ž=wä£wQxês`z— IÔ{K33M|ˆhççtœÇqѰu'¿î»u¸{¤7v‚±+`wq©øv›xƒ¢®_òyªšüI^zö’»2ü|t‰Œç'tUÒAÐötÙÉ›ºLujÀÿ£nv$¸€Œ¢w°uôx+§ˆ_jy[žŽHùz±”ú2¼|6Šâ™„x̓…xx¸ƒxá¢8‚«ydŒ ‚\z u¼‚zÙ_€ð{ÃIUâ|ì3|‚~uàႎ‚©Ì\‚æ·³?¡(e€ÁŠé+€kt  €9^s€þ€Hu€2àZ€IßQAAÊÁ€Ù‹nµ–€‚‰¸ŸÅ€Mˆ>‰²€.†ðs”€)…¾]€5„ŠGº€dƒX2V€¿‚Ý¿€(—ÅÉ%Ç”ô´|’Bž\P¹ˆtKnr‡\‹1\·ˆãGņt1Ý€4ƒ¬ÜDB¢Adz~âž{²š~ šÒ~€—J‡A~‚“Ýq‰~ª“[ï~à F{9‰m1tº…0Úú~¬¾Æt~1¨±c}î£X›ã}Ӟņ=}ßšHpž~ •Ð[9~V‘6Eô~ÂŒ;1Q†ŽÙè~·2Ål}¤±~°\}^«Çšä}C¦!…^}Z ‘oæ}’šòZž}á•E~\ŽÑ0Ð~ù‡ÃÙ }—Á˜Ä–}:ºâ¯|í´š|Í­M„‘|禛o9}-Ÿ×Z}‡˜ÃE!~‘+0“~¯ˆÎØf}JËîÃî|îÄ'®Å|˜¼5™D|o´;ƒà|ˆ¬Xn¦|Õ¤`Y¬};œDÓ}È“=0c~t‰­ÒïŒëvÙ¿’‹|wW«½Š-wÝ—_ˆþx|‚©‡æyCmцÞz4Y…Þ{FD{„ñ|¡0Z„~kÑu‹”€Á¾dŠ5€<ª£ˆôÑ–Z‡Õ†¯†Òelè…ãgX@„ý{CÌ„,º/îƒn€*Ð&ŠTй½‰‰5©ƒ‡É‡Ê•4†¿†“€›…Ð…ƒkñ„ù„‘Wm„,ƒ¢C+ƒw‚¿/‚ÔÒÎΉB”¥»´‡ø’7¨†Îâ“é…˳v„õ‹´jú„3‰ÂVªƒ|‡ÃB‚Û…¯/9‚Kƒ]͈iž„ºh‡"›4¦É†—ú’²…”Ù~d„1‘Îjƒ…ŽÚUú‚Þ‹ÄB‚Pˆy.ñÓ„ÆÌ[‡¾¨i¹L†z¤6¥´…W  ‘¬„b›í}yƒ•—ßiG‚é“ÎU]‚TœA²Ø‹.³l† Ëf‡3²D¸^…ò­'¤Ç„ΧÿɃڢß|²ƒÊh¤‚s˜ TÙÝ“=AWr~.€‡'Ê †Ç¼·œ…椄c¯Õƒj©¡{ü‚ª£wh ‚2Ti‡–¥A §.V€ÎˆÊ †uÅÍ·…<¾À£Y„·}Yƒ°%{b‚Q¨ÔgÀ¡hT?™°@ŀᑈ.4€•ˆäû•øuޱʓ²vrŸo‘wŒ”‘wÉy\©xªeþ‹Ëy¸Rˉëzê?Ĉ |k-i†$~`Â|”Á4°Ð’ƒ~Øž„m~“‹¶Žz~rx…Œ¢~ye5ŠÙ~¥R‰~ç?;‡G[-+…t€ ÁY“¢ˆ¯¢‘o‡@{Z†Нw…w–‹°„Dde‰üƒŠQhˆF‚×>Á†”‚6,ô„×ÀE’“‘Ø®|lºœKŽeª‰§Œ}‹ÇvžŠÌŠ c‘‰)ˆbP‡‡†¯>P…ï„ò,Å„Kƒ¿'‘¾›&­t˜˜1›<—•Qˆ‹‹À’‰u¨Š×bň€5P)†íŠv=í…d‡,œƒÒ„b¾'‘¤s¬vŽø «šBŒøœè‡¡‹%™5t׉x•‹b‡ç‘ÜO¦†bŽ=™„ë‰þ,yƒk…޽N˜­®«¥Žx© ™sŒv¤`†ÚФŸ¶t(ˆþ›a…‡s–XO9…é‘l=U„‚Œ5,\ƒ†’¼Ÿ1¶ÙªúޱW˜ÃŒ«µ†-Š9¦sˆˆ– Z`ÿ‡š”NÛ…””Ž=„,Ž.,E‚·p¼ß¿÷ªrƹ†˜.‹À²Û…–‰å¬sˆA¥S`“†ÆžtN†…O—U<áƒóß,2‚•ˆ'µŸ=u2¤cœ(uΓb™7vzñ–ewEp,“£x:^Fáy^LŽz¨;6‹,|D*­ˆ~T´ž)}ü££›}·’®˜'}ŽD•[}Šo~’¤}²]£ò~L 2~j:ÔŠ` *‡e¼¢­š … ‘Ñ— „ €d”bƒÑn²‘¹ƒ)\ó‚ŸK~Œi‚:}‰©»*†Ák²)œ)b¡ª™%–A‹¼{“~ŠmÝ䈜\EŽQ‡-Jý‹±…¼:1‰„J*ƒ†1‚ȱL›K˜ Å˜Q•tוv’â~’»bmû[ ”‹¥J…‹‰89ìˆl†²*y…´„°tš« Ú —°e”Ò™ú}Î’–¡lb€“R[ ŒüÿJŠwŒ‘9°‡ïˆò*p…J…¯»š.©yŸQ—5¥:Ži”U ó}%‘œ²kÎ ˜uZ“Œ‰”&Iʼný¬9‚‡„Šù*i„ò†¯!™Î±þž½–Ô¬ëÔ“ò§¾|“‘6¢ˆkHޤTZ#Œ.˜Iz‰¥’‡9[‡+ŒÄ*c„ª†Ò®ª™ºvžF–ˆ´T“£®Y|ã¨j׎P¡áYˋݛŽI6‰a• 90†òŽI*^„p‡x§¨ºtÁ—~¤Üu[‡¸¡v w›uvâg9™ÎwæVÄ–yF¡’Ezx6àŽD|*(/‰þ~H¦2§Ä} –ó£à|χ6 |·wœs|Éfµ˜Ñ} VI•'}xF7‘^~6¨m~È(K‰8Ñ¥¦¿…=–3¢ä„:†ŸƒXvj›|‚¬f—ã‚*UÁ”GÊEÑŒz6xŒ«L(dˆŠ;¤Æ¥Ï[•f¡ü‹ž…±ž>Šuªš™ˆŽeg—‡FU7“}†EqЄÛ6L‹ÿƒ¯(z‡ò‚…¤¥•j”¦¡?’ø„î…¥tç™ãŽqdÈ–JŒJT¹’ÈŠ;E%ˆ6(‹d…ê(‡pƒ«£c¤c” ˜š`„OœÞ—CtN™<”9d<•¦‘7TJ’Ž8DÔŽƒ‹'6ŠÙ‡õ(œ‡„¬¢Ï£å¥–“Š ¡¤ƒÔœV´sϘ¯™ÎcÆ•"•òS푟’ D—ŽŽ5ïŠg‰Ï(©†¦…‰¢N£ˆ­z“Ÿ·¨Àƒ]›ò£õs]˜FŸ+c_”ºšgS˜‘A•D`§–5ÛŠ ‹n(´†[†B¡è£?µH’®Ÿj¯¸‚ö›¡©ÿrø—ò¤>c ”ež‡SWD3_’×5ĉόÊ(¼††Ù™¬²lti‹<­Çtú|©:u­m¾¤³vŒ^° wO¢›`xâ@þ–vzO2Ü‘D|%ö‹·~<™±‹|<Šå¬Ü||J¨B{ômi£±|^VŸ|rOQšc|û@¿•€}£2Ñ[~Œ&<Šã¶˜¡°‰ƒêŠ]«â‚ö{Ò§B‚*l袴]áž >Nó™w@‚”Ÿ€â2ÇŠ€ç&zŠ)˜"¯–‹{‰Éªô‰Û{.¦ZˆblY¡Ç‡]b?†N’˜¡…@G“Ô„2¿ŽÒƒ&¯‰ˆ‚G—˜®Î“‰<ª/ºzœ¥—Ž—kÇ¡Œ–\íœuбN:—äˆá@“!‡2¸Ž.…/&܈þƒ[—®5š†ˆ¾©“—z#¤÷”´kU e‘ô\‡›ÔBMð—5Œ‘?ê’}‰Ø2³ž‡'ˆŠ„K–«­¥¡ðˆZ©žEy¤jš¨jùŸØ—\8›J“™M¸–® ?Í‘æŒj2°ˆº'!ˆ*…–G­F©7ˆ¨ ¤Ìy†£õ YjµŸQ›ñ[õšÂ—™M~–:“8?«‘ƒŽÁ2¯Œ»Š2';‡Ü…•ô¬ü°a‡Ð¨M«)y=£œ¥Ôjqžõ †[¿še›QMZ•Þ–?˜‘4Ç2¯Œy‹l'O‡†L¼Rt¢¶ãt r±„uQdd¬v7Vœ¦wTHë ®x«;¼š˜z*/0”#|$I~0Œ¿»x{‚}¶{Bqð°{;d9« {oVm¥l{ßHÆŸ|…;«™‹}L/R“#~W$nŒdžŒ„ºn‚².´ÿÇq©¯„ c骀šV&¤c€]H”žœ€M;˜˜•€T/p’?€Œ$Í‹€éŒA¹l‰¾~Õ´ˆ5q?®Š†ÚcŽ©…ºU×£n„ÐH_²„;…—·ƒ?/Š‘u‚œ%Šñ‚‹ï¸•¾~‚³*Ž˜pç­²Œ c2¨+ŠÒU”¢‰(H1œã‡˜;v–ô†/¢Æ„ƒ%dŠ_ƒ‹—·ñ—¸~4²”ðp¡­’Kbó§xÉU[¡Þ^Hœ)Šÿ;j–Gˆœ/¶-†<%Ÿ‰äƒö‹E·pžŒ}ó±÷›pi¬o—¾b¿¦à”U0¡L‘VGô›œŽ+;e•¯Š÷/Ȩ‡Ã%Ή„´‹¶ö¥2}ű|¡p?«ñœöb›¦_˜óU Í•GÚ›)‘ ;\•</Ù5‰%õ‰-…RŠÔ¶¦«½}±±¦Óp1«¡Úb…¥ÛœúU ?˜CGÙš¡“;j”ÓŽÞ/ðŽëŠ/&ˆë…Ñ ÆdsötŠÀ4tdgþºu [i³¬uóNÜ­wB‚¦ x6Þ´z+Ê–å{õ"E޶~%Åzùt™¿Oz§h¹zž[g²‘zÛNØ«Ü{^B‹¤Ü|6ã‡},•É~*"×À‡Ä`°t‡¾;€Ágð·ì€ [J±m±Nê¶B‰£¾¥6þœtÖ,`”Í€;#UŒê€ÅÃDˆ7tp½ †ºgƶ҅t[)°P„tN¬©¢ƒ´B…¢·ƒ7›}‚Š,ž“ð‚%#ÀŒ3߀ûÂSޝt[¼*Œ£g°µ×ŠÏ[ ¯V‰-N ¨¦‡¹B‰¡Í†e7/š¤…,Ö“0ƒæ$‹˜‚Ö€ÜÁ”•tK»`’~gªµ [ ®ÂN §Ö‹˜B” ü‰ƒ7J™æ‡u-’Œ…{$h‹ƒª€½Àù›bt@ºº˜#gª´S•[­Î’N©§+5B¤ ZŒd7e™C‰—-3’†Ý$§Š¬„\€ŸÀ~¡rt9º3Œg¯³Â™»[­5–N³¦—’B²Ÿ×Žú7|˜Ê‹y-X‘ˆ$ÚŠU„À§Pt8¹À¢³gº³Dž[-¬²™´Nɦ•rBÏŸ]‘=7š˜c-x‘=‰%Š…eæ·v±shÑUw“tK»†xpu4¥:yHv*Ž¡z$w9wï{xeaO|yªJÏ}={(4¯~»|ÿäµt×~sϳuá~+ºvà}ú£íwÛ}çpxÛ}ôvÚyê~`S{~JI÷|_~–4}û~üâåsM‰ŠÍñtiˆ¸…u†Ä¢}v•…¨Œ+w³„¯u¿xâƒË_dz&‚âI4{•õ3p}L€äá(qü”Ì3s#’¶ÔtF¥ ýuqkŠØv¬‹jt w÷‰s^}yW‡iH€zá…<2ì|¯‚²ß”pèŸzʦr›óµKsA˜ˆŸŒtx•B‰uÄ’s‹w* ]¢x¢‹ÕGÛzCˆ_2z|$„^ÞApªUÉYq?¥×´rn¡ažNs¬ˆpu˜Àr‡vw”|\×xGFy¼‹V2{­…ãÝ+omµÈJp˜¯¥²ïqª As¤©‡teŸGq»uæ™Õ\'w”%FÈyJŽ1É{G‡;ÜRnó¿ºÇvp¹M²q>²¶œ\ry¬†¤s᥎qupžò[šw˜F\xë”1†zóˆfÛ³n¥Ê#ÆÚoÆÂ²±apÝ»›œr³;…êsu«~p`u £§[v½›wE÷xœ’Æ1Qz¯‰a× rÚs9¯€(tNšÉ@uh…ªdv—pb–wå[3ØyNF€>zõ1~€Þ|ýÕ£}f|™Âr}‹|š®h}³|£™¸}â|Á„ž~|ûoi~m}OZQ~Ñ}²Ef]~71€!~äÔ#{ó‡À×|(†¬í|`…˜R|©„(ƒe}ƒkn\}p‚ÂYq}ñ‚D¸~˜p0‘u€´Òžz²‘t¿Dzïi«`{5n–õ{Œ‹Œ‚.|‰ÔmU|‰ˆ%XŸ}%†fD}ç„‹0/~Ü‚gÑ.y¨›Æ½Ýyê˜Í©þz9•Ý•¢z’ü{-l[{ÀtWÝ|sŠ—C}L‡/Ú~Uƒ÷ÏùxÙ¦¼¬y¢0¨ÒymžB”ƒyØšZ€zd–}kw{’œW-{ÙŽžC|ÈŠI/’}â…aÎýx5°L»³xz«}§×xǦŒ“Žy4¡”'yËœ¦jÁz„—¥V˜{V’mB«|WŒÙ/W}†ŸÎ9w¼ºhºïx´ª§xG®®’¼x¯¨›~ayK¢ŽjzœmVzñ–BR{ú)/&}0‡±Í¯wjÄ^º\w¬½¦¦_wè¶”’xE¯Z}¹xà¨$i‰y¯ ÖU¤zš™·^‹- † Àd€Æµ*®¦€%° œ-‹ª¡‰6¥ v2~ÙŸxcG~Ì™×P¸~Ò”>pÂ,ðQ‡¿í€t¾¡®Õ¸˜›Š1²ˆ‰~¯«_u–~o¤¯bÊ~iòP[~}–ü>2~»,ׇչw®pF©Žæq’—øLrІ‹ÔtsÑŠiunaZ‰vòO‡¥x›=†Pz+¦…|ó¸~Dy•¨,œyê—ŒzC…7Чz®r÷‰J{6`•‡ü{ÝNl†°|š<‰…u}ˆ+~„C~²·zù‚˧Œc‚?•ûŠá¶„,‰…Kr ˆ;€ù_͇€¾M̅ЀŒ<„®€j+Zƒ“€T¶hŒÅŒ¥Û‹9Š”Ã‰È‰6ƒ&ˆp‡éq‡=†¶_†…M4„ÿ„b;»ƒùƒ,+:‚ù×µN‹Ì•&¤×ŠC’ö“»ˆÙÁ‚‡Žp,†dŒh^>…[ŠOL „Rˆ;aƒ^…È+ ‚sƒ6´Z‹ žI£à‰‰›M’Ȉ ˜9-†Û•o`…¶’]”„­ŽáL$ƒ·‹©;‚Ùˆ4+ ‚„m³’Šv§U£ˆ÷£‡‘ÿ‡ŒŸŒ€j†F›|n²…)—j] „)“FK¿ƒ2Žú:Ø‚fŠh*ö¡…|²öаH¢wˆˆ«¤‘T‡¦¹À…Ì¡¦n„±œ‘\€ƒÀ—gK]‚Ò’ :¢‚Œ^*çR†b²ˆ‰®¹!¡úˆ8³ŸÂ†Â­³)…l§mŽ„N¡j\ƒa›0K ‚”Ä:kÄŽ *Ú‡«Z™Ào»œ#—+q ŒN”ÇrQ{Ò’s¢jëCuYߎv©I‹¶xf8š‰dzs)‡|쪓˜x›q–xç‹“§yX{‘eyÞj:/z„YAŒþ{KH”ŠÂ|,8Hˆ„}B)†5~™©Ã—C,𔨀¾Š²’‚€^z:O€irŽ)óX™Œ åH‰ãâ7þ‡ºù)…€'¨Õ–+‰´™€“ň‡‰¥‘z‡ey[H†Oh§6…YW÷‹*„kGž‰ƒ}7¿‡‚Ž) „ß“§ö•+’K˜›’Ð]ˆ½ŽqxtŽfŒ„gïŒOЦW`ŠYˆÕG5ˆX†ò7ˆ†]„ù) „U‚ܧ*”ršß—å’˜1ˆ וpw·°’©g<‹£äVЉ­Fχ¼ŠA7Q…Ô‡8) ƒàƒþ¦“á£S—6‘Ÿã‡ZIœIw ˜f§‹”îVX‰)‘1F~‡5R7(…^‰>) ƒ„÷¥÷“t«¥–ª‘%§l†ÇŽÛ¢òv}Œ«žTf Ц™²UåˆÁ”üF/†Ò 7„ý‹) ƒ/…Ê¥•“#³Þ–<×®Ö†Iއ©juüŒN£Êe¯ŠDž'Uˆb˜sE높™6Û„¹Œ‹) ‚ï†wÍ£ o[¥Ÿµp£€ùœ‹qîq™ssJb4–StÇR‘“#vpCJØx>4hŒqz_&¢ˆá|ä6¡ôw£'žªx€p›}xq<˜`y'a³•ByæR’zËBïŽÝ{Ì4A‹†}&ˈ~€œ™ ÉÄŽjŽiÇš`"pŽ—La”:~ÿQ¢‘$B•öF4в’&ð‡Hû›âŸ²‡Æœ~†·~ê™[…¸oÕ–I„Ô`s“H„Q CƒXB>&‚¤3û‰õû'†¡T›"žÏ´Œá›žù~,˜€ŒHo•sŠ£_ß’k‰P«x‡xAôŒi…Þ3à‰L„9'*†‚‰š…ž—±ŒBšâ•D}—Æ’În~”·T_W‘²ÝPHޏ‹hAµ‹ºˆç3Ɉµ†H'@…˜ƒ—™üyŸ‹ÌšVœn}—2™)mÿ”•Ô^Ý‘’ƒOéŽ.)A|‹,‹¸3´ˆ9ˆ#'S…3„~™Œ§D‹Z™ï£i|Ÿ–ÅŸPm‹“¦›^s¨–äOŽÂ’¢AAŠÅŽG3¢‡Ô‰Ä'b„á…@™8œÄ®ÚŠÿ™Ÿª<|9–n¥@m$“H ^FšõOJa•ÆAŠq‚3‹‡Ž‹!'n„ …ßoƒ·¨~pBv¤qŽh šrôYÚœŠtK˜˜Wv9=Ê“ùx0ƒezN$Š™|Û…«›vÚƒl§‰wCuÊ£‡wËgÉŸ…xxYŠ›qyPKW—DzR=’ï{r0ˆŽj|Ð$Љ±~hªy~y‚æ¦r~)uU¢k}ögMžl}óYš`~K–A~Z=m‘ú~²0‹ˆ3%ˆæÓš©`…ð‚P¥^„ût¯¡_„fÄaƒdX¦™e‚ÏJ¬•T‚M=;‘Õ0ŠŒ¿q%Qˆ6¨vX¤y‹Ãt Š?f1œƒˆÍX7˜ƒ‡qJY”ƒ†%=Y„Ô0ŠŒƒ†%„‡Ÿ‚=ŽŽ§Ã”¹G£É’ƒs¤ŸËKe½›ÍŽWЗ͋òJ“‰Ì<즇£0Œ‹r…l%®‡!ƒ:Ž-§$›û€â£0™s>Ÿ1–+e[›2“2W|—5:IÝ“-<<׊30Šç‡%Ò†¸„צ½£€­¢ÇŸ‘sž¸›Òeš¢—ûW7– ”.I’¬_<¯Ž•Œ†0Š|ˆ˜%î†c„Å“¦rª€j¢r¥Õr¾žY¡?dΚ=œ‡Vú–7—ßIq’D“7<–Ž:ŽŠ0ŒŠ1‰Ô&†…W„»¶Fnªxa±ƒoÚkƬÈq&^é§ïr–Që¢ßt1E“uÿ8§˜ wõ,ô’8z="¢Œ'|Ò„µnvxJ°™vxk««¾w^ͦÍwÇQС³x¸DõœkyÙ8¬–ë{-%‘'|#‹0~S„L´M};wú¯}|ñkhªš|Î^…¥¥|èQ” }/DЛU}ž8¦•â~&-N3~Û#xŠX¯„³(„.w›®\ƒMjù©~‚^-¤‹üQJŸƒ˜D¢šVM8›”ô-o[€ò#͉ž€çƒ­²0‹wC­h‰žjœ¨ˆF]Ì£š‡Qž…çDv™t„Þ8” ƒØ-ŒŽž‚à$ˆÿûƒY±u‘ìv÷¬«æjS§Êå]†¢Ô‹óPËËŠDS˜©ˆ@8ˆ“d†o-¤ø„¡$Rˆz‚胰嘞vº¬–j§+“P]N¢/¢P—*ŽD6˜ ‹h8‡’¿ˆÌ-ºi†/$„ˆ ƒ²‚Þ°iŸvŒ«˜›ái릧˜|] ¡¦• Pnœ ‘ªD—ŽF8z’BŠæ-ό$­‡´„Y‚®°¥‚v…«;¡ ià¦5i]¡™PXœ ”ëD –ýÊ8ƒ‘ÏŒµ-⌛ˆ¦$͇m„áyÀ0nem}ºËo€aεJpÇV ¯€r=JG©\sæ>¸¢áuÉ3ÊœwÔ)¨”íz1 ú‘|Éy¿iuom—¹äuÁaç´3vQV"®GwJ_¨x'>Û¡›yg4šØzË*“Â|q!Œˆ~>y¾>|m¸¹{ÏaÖ²ÿ{µV ­ {éJU¦Ø|R>æ j|ì4(™µ}£*U’¹~‹" ‹£Žy½‚m\·¹a¡±ÉUç«×€¢J<¥±€m>åŸR€X4E˜°€Y*˜‘Ï€~"yŠß€¹xç»õˆím?¶s‡•a€°º†aU¿ªÉ…QJ-¤¥„k>æžYƒ¦4`—É‚ê*Ò‘‚H"ÖŠ8¿xÆ»&Dm-µ™gat¯Ø‹™U´©å‰ãJ"£ÅˆG>ìy†Ã4z–ý…K+Rƒå##‰¬‚ x¨º…•lm$´é“ap¯–U°©%Ž2J £ ‹å>ôœÊ‰¦4“–N‡q+2½…Q#b‰:ƒ]xŽº ›am"´]˜jas®•PU±¨ƒ’6J¢n4>õœ;Œ?4¤•ɉY+VB†‰#•ˆÝƒúx{¹´¡&m'³ê‘a|­þ™ÀU¶§ø•èJ$¡ã’/?›¸Ž‰4´•YŠ÷+mŽè‡‰#¾ˆ“„yÚ¥qðm*ƦsQnIJ+t¤pW uêq釴w0s‰r&x…uB\µyówGm{”y#2­}Š{“ضoÛxÅqkx‰°Ærãy›ätOy’†”u¾z4q"w=zë[ÌxÔ{¯F­zž|”2%|¹}¤ÖïnƒÃ[o¿‚Q¯DqT®š{rÞ5…Wto€×pv€ŠZêwÑ€=Eýy¿ô1­{ûÕ4lÏÁnEŒ ­’oìŠc™q‘ˆÖ„ sC‡unûu †Zvé„¶EZxøƒ81D{QzÓ¢kG˜}Àm•Ŭ n½“—Œpr…‚Èr;Žmít!‹œY?v‰DÅxJ†X0éz¼ƒ2ÒXjI£¾ÏlŸvªÈmɛȖToˆ˜#«q_”ŒlôsVöX€uoGD?wµ‰J0œz;„ÁÑPi­—½ËkI© ©¿m¤X•MnÅŸ€¾pªšîl-r²–2WÝtÚ‘CCÏw6Œ0[yφ"Јhï·ì½j¶²w¨ëlh¬¹”qn'¦Þép¡ kxr+›-WUtd•CovÎŽ{0'yu‡SÏþh¼|jS»”¨Hk÷´Ä“»m­­Ç8o˜¦ÍjÞq¸Ÿ¿VÒsý˜gCvv¢/ýy,ˆSËÄzl$¹—zžmò¦½{(o¨“,{¶qT"|Ls jê|ñtßVÖ}«vÐBé~y/š·{˜Ê`x/v‹¸}xàw<¥­yˆwé’'z0x~(zâydj{©zBV|‰{2BN}—|I/9~ç}“Èèv‚€Ý¶åwI€¤9x€*ÇxÌê|öyŸ¿iz‹¦U:{A²|¼ƒ.ã~+sÇdu ‹ µSuቼ¢«v°ˆppw‰‡0{Åx}†hy‡„öTtz©ƒÓA&{ù‚.˜}„5ÅùsÓ•'³ðt°’ò¡Ku޶ŽvwŽ}z¦w{ŒOgx¤Š1S½yá‡÷@©{M….X|ò‚ÒÄÎrÜŸ9²Çs¿œ$ &t¡˜ñu”•¶y§v§’~f:wÝCSy5‹ð@:zºˆU.!|u„FÃÝr©2±×s¥:Ÿ3sá¡ ŒtØœÇxÑuø˜„e‰w>”0RŽx¢®?Þz>Šà-ô| …Ã'q‰³±ro®(žksK¨ø‹Lt?£ŸxufžFdåv½˜ÚRx1“1?yØ*-Î{´†¦Â®q*¼¥°–r ¶ÙÍrܰœŠ¡sƪ'wotí£®d]vL!Q¢wΖS?=y…$-±{n‡½`‚{kR¬Ý‚m?›‰Üo ‰^®pÈv­Œr”cÈxtQrv‹>‡xÝ,³Ø{›¼I€¶u«É€‡všc€_vÚˆK€Fw¶u²€;x¢bî€Dy§P[€]zÁ>€š|,y}€»&~ÙªŒ~Æ™X~ñ~°‡6~ï~£t¹~û~«b ~ÅO´Z~æ=¼,F€II¹Ó}­ˆt©6}¥‡…—æ}¤†Š…÷}´…‘s}ᄯa0~%ƒÔNÿ~{‚ô=~ú‚,¢€ò¸’|‘ü§ö|9–«|‹Ž`„Ì|ªŒ{r¢|䊜`^}EˆÈNb}µ†Þ<¶~O„Ì+ò‚v·†{“›¦ì{š˜ê•¦{©–'ƒÒ{ГOqÁ|s_£|€’MØ} Š›<]}¼‡c+Ò~•ƒÐ¶¯zؤî¦zä¡”ÉzòÍ‚û{™÷q{n–_{æ’1Me|xŽ<}@‰Â+·~-„þ¶ zK®8¥fzZ©í”zd¥D‚Czˆ fpSzᛂ^p{k–ŠLö| ‘`;Ö|Û‹à+ }׆µ¡yì·W¤æyü²*“zyú¬}¤z¦ŒoÂzk ”]ùzûšˆL–{ª”F;“|‹±+}“†×¯f‹;j² N‰ôl¨Yˆàn~ƒ‡îpGn)‡r#\ †)t#KW…QvI:@„x»)ûƒì{œ®Š‰’sêŸjˆté]‡„uÜ~”†ŸvÔmO…Èwá[ã…y J¹„AzJ9Ùƒ{»)çƒ}m­“ˆ |ÿžH‡}#Ž[†%}>}‘…V}blo„”}™[,ƒæ}åJ-ƒD~;9‚‚¿~¤)Ö‚R ¬‚†¥† (…º…`)„á„¡|˜„ƒçk–ƒqƒDZ„‚Û‚©I±‚X‚ 95öi)ƨ€±«c…Žþœ,„š”Œ/ƒÍŒ {ŒƒŠqj­‚zˆÜY¿‚‡UI#–…¼8æJ„)¹‚ªv„—ñ›9ƒÀ•À‹?‚õ“^z¯‚CÝi豎XY">‹ÓH³€é‰=8¤€¶†o)®€˜ƒ_©¶ƒê ÇšvƒÍŠ{‚HšŠyî——i9“£X˜€§"HY€TŒƒ8o€8ˆ¢)¥€0„w©%ƒd©€™Û‚•¥¸‰ÔáŠyH hŸ€ƒ˜ªX €.”(Góé†8AÒŠ—)žÛ…e¨Äƒ²™d‚<­}‰E`¨Ux³€˜¢Üh€bW¨¾—ÝG¨‰’48ƒŒC)˜–†)¡å”jN“ï’l?…--nuœŽvoìe—ŒÁqÕUm‹ sæE–‰Lv6 ‡—x¦'v…é{›¡5’šs“>µt„eŽîu tà:vdê‹w?TÚ‰æx…Eˆ=yæ5džŸ{~'ˆ…}Y l‘){’I`{ц£{þt‹ÿ|Ed(Šd|£T<ˆÕ}Dª‡D}œ5Œ…À~<'—„@~÷ŸzÛƒï‘HŽƒr‚tŒn‚îs$ŠÒ‚jcd‰PûS¥‡Ø–DC†_45Y„÷€Õ'¤ƒ‘€rž•Ž´ŒX\Œÿ‹#‹‹_‰Ûr@‰Ïˆ…bµˆP‡6S†ñ…óCä…‘„¤5,„CƒC'°‚úÈÍÚ”¿¨Œ.’Ó€ÚŠŽ½q…‰ŽŽb‡‹Œ\R†0Š*C…„ä‡ê4ýƒ¬…‚'º‚z‚õ)/Žü‹Šš[€-‰è—rpÞˆY”bap†ì‘LR…™Ž+C<„MŠò4Ûƒ+‡‰'‚ƒøœ©Œ¯¥Žu‹¡¶‰hôpR‡Ñ™ù`í†f•õQ¦…"‘âBìƒß¶4¾‚Á‰S'ȹ„ÓœOŒS­Ž Š·¨ì#‰¤AoÕ‡eŸL`…ôšQQS„´•IB­ƒ€&4˜‚sŠÖ'Ís…‡”ã$iý‡Ûš]käz-—Èm¿kוCož] ’²q–NUs¸?ñ[v1ùŠ™x›%+‡É{—”U›Ýr3‡X™0s=y™–œtNkM”up\¤‘ƒv¯MïŽíx?¦ŒFy’1≗{L%a†Û}E“·šz8†•—ëz‚xî•[zÓj ’Ü{;\[{¾M|Ù|\?Z‹G} 1̈¯}ß%† ~Ð’û™:‚…Ä–®µx ”-Si둵€ÿ[pJ€ÀMŒÝ€‘? Ša€h1µ‡à€L%¹…T€8’:˜,‰à… •¦ˆÚwR“-‡Êi,½†¶ZèŽP…¦L˜‹ù„¦>͉‘ƒž1¤‡(‚%Û„·y‘š—H‘³„g”Ðv±’YŽ4h˜éŒPZcŠkLA‹'ˆŠ>™ˆÔ†¢1•††„¢%ù„3‚“‘–¡™cƒõ”0— v?‘²”th:‘¹YéŒÙŽýK⊋Œ=>gˆ8‰o1†…þ†€&ƒÆƒ„«–' æƒ†“¸ßuÊ‘4š|gªŽ²–äY€ŒR“JK„Ч>)‡Ä‹ö1y…ˆ"&$ƒl„O]•Ψ?ƒ/“^¤†ugÑ KgFŽE›ËY*‹à—IKD‰¡’Á=û‡cŽ-1c…@‰€&4ƒ%„ôˆ€¦li§|Q¢øko£Ÿ¥m]bvœIoGU˜ÊqPG••)s…:¡‘fuâ.;x#!‰€{“ˆ¥Wql{ü¡èrsoGž‚sb#›tÃT¼—”vG_“ûw:„Cy>.OŒo{#yˆ„}1‡ ¤ xò{k ªyEnÌDy«a¨™Ýz2TW–fzÙG’Þ{¢:`8|€.\‹z}‡#Ƈ¨~¬‡¢Ä€JzÍŸl€n œ¿a ˜²–Sâ•MˆFÆ‘Ø:7ŽG£.eŠ Ë$†é€†…¡³‡‘z<žc†¯m‹›…Ë`Œ—³„ëSy”Q„Fwðƒ^:q‚ .l‰àæ$@†F2† áŽÎy—TmšA‹Ã`–äŠ(S“ƒˆF=†þ9÷Œ¯…m.s‰8ƒÒ$o…¼‚;…¢ -•æy\œë“Ïl¬™”‘‰_³–6*R¼’ÙŒÉFxŠe9ꌇý.~ˆ¥…ˆ$–…Kƒ…PŸ¶œ×y,œtš)lz™— _t•˜“åRz’6°EÃŽé9¿‹…ŠM.ˆ0‡$µ„ïƒÙ…Ÿa£œxKl4˜£œw_+•$˜bR=‘¾”WE˜ŽsR9§‹ŒO.~‡ÛˆF$΄¥„r|¾¯ëi?qK«×k e‹§ÂlèY|£‚nßMHŸpüA/šLsI5§•cu¿*ÎDx„!W‹ {|m¯pq%ªØqeh¦rÁYb¢Bt M7»uA-™ w%5»”,xë+ zî!Ί}|%­¿w¬pÈ©™xe¥Xx|Y üy$Mœ}yòA—Üzè5À“{ù+=Ž}5"6‰~‹{άq~„p^¨Q~Md¨¤~*XŸÄ~,L¹›U~S@é–Æ~“5½’ ~å+f2T"ˆPÒ{p«U…Ip§<„ŠdG£ƒÓX]ž¶ƒ'LzšJ‚˜@À•Ï‚5·‘)¬+‡ŒgI"Û‡¥€ó{ª~Œo³¦eоcþ¢,‰dX؈ L;™o†»@¡”ò…}5³^„E+£‹¶ƒ#‡ízЩג–oy¥»ÃcÆ¡zŽÁWÜŒ­L˜»Š£@ƒ”Eˆ¢5·¬†¥+½‹„¦#N†¡‚ÁzŸ©O˜ïoK¥/–Šc“ è“ÝW©œˆ‘ KÕ˜$ŽB@W“¼‹|5¨%ˆÀ+׊œ†#x†Aƒqzt¨ùŸ&oM¤Éœ9c l˜ÇWŽ›ò•Kׂ‘‚@V“Ž5³Ž¨Š‘+éŠ@‡)#š…õ„q¹£hÜf«µj’[Ű1lmPʪÿnpEÐ¥ip¢; Ÿs 0ò™Xuœ'£’éxzÂŒr{‡qD¸äo×f«´pÈ[Ô¯qñP䩪sNEñ¤tã;=ž%v¬15˜x™( ‘®zÄ W‹W} q(·¢vsf€²ÊvÉ[º­°wLP̨OxE뢳y ;NœÞz11c–Ò{v(_•|è ׊b~mq¶C|ÏfL±o|¢[y¬[|™P£§|ÃEÒ¡t};O›²}›1…•¼~/(¦~ä!E‰§pÞµƒf&°B‚p[Q«/àPt¥ÛgEÁ S;Pš¦€è1£”Æ€Ã(ãŽÄ€·!£ˆÞ€ºp¸´,‰Rf¯Oˆ6[Bª5‡Pc¤á…õE°Ÿ`„ð;U™·„1¾“ëƒ*)Ž‚^!ðˆH§p—³y`f ®‹È[>©fŒ P[¤ŠAE©ž—ˆŒ;Z˜ø†é1Ù“0…U)FjƒÒ"0‡Î‚op~²õ•7f ­ð“![B¨¼ÀPY£_ŽEEŸé‹Ü;T˜\‰…1æ’ ‡C)kŒç…"d‡jƒpm²–šÙf­r˜=[M¨,•1P\¢Ç‘üE£SŽÜ;`—ЋÔ1ð’'ˆå)}Œ„†"‡ƒ›Î¡mfú»ènìi=¨µp­kq”êr^mœ€µtoÎlVuÚrX w¿tDyßw'0É|Yz>̾j´qźjlÁrä§`n­t“¾p‹u0¤rnvgkbtgw³WIv~yCtxÏz›0b{x|bÊùh§|~¸´jÒ|¥èlä|’^næ|¶~ppò|ój\s}AVtu[}–B×wÚ}û0z¬~lÉ;fׇ ¶øi† ¤9kD…ëmh„5})oœƒviNqê‚¿U¥tX‚BEvÿ=/·y÷€VǧeP‘{µqg¦‹¢¶iåž|l‹»{õno‰èhLpãˆ(Tâsu†SAÁv@„Z/ryX‚Æ_d›Ö´2f}™¡}hÆ–ŽMk“/zámtLgdoþjT3r²ŠxAKuœ‡I/8xσ´Å[c&¦³5e¢[ }gÜžrQj.šxyýl¥–†f¥oD’ˆSŸr Žd@êu‰þ/x\…Ä™bp° ²vdÜ«Ÿ²g%¦”Œ€iw¡„y3køœyeøn¬—bSq‰’@—t Œo.àwý†UÄa÷¹ë±ôd`´RŸfŸ®W‹Øhè¨-x‘kk¢emn)›ÐR§q•\@?t@ŽŒ.Àw°‡ZÀ‚tÿf4¯uþh¦åvÿjõ‹xxm0xŠyosekz.qÐR|{itP?Ä|Öw-Ó~zK¿'rÈp{®sÿqÔœãu#sŠ„vFtgw£wtu½dx¾w*QÏz%x®?E{Äzb-Ž}¯|X½¯pÑzŸ¬êr'zò›ssj{@‰(t¯{™vxv|c£wy|Qy }>ºzÓ}œ-R|ä~H¼(o„™«Yp‚ƒþ™éq݃^‡Ûs=‚ÁuPtº‚;b°vS¼PPx <>Ayû€¶-|0€º»mŸŽ{©øo˜p‹‹z†r‰èt?s“ˆ^aÌuQ†âO¦w+…T=Ôy>ƒ¨,ï{“¹’lu˜S¨Ômü–—oou“†…{púùsGr Žlatq‹ÝOvk‰?=tx†j,É{ ƒ@¸¦kˆ¢ §èmžÜ–‚n’›l„–p—ÝrxqØ”M`Ws¼¯N“uÈŒï=&xˆñ,©z„·÷j׫˜§4lg§ˆ•ÁmᣃÔomž‚q¿q0™å_¹s*•9N uI_<âw¥‹6,z@…¯·†ja´è¦³kí¯í•)m\ª|ƒ2nà¤Ïq)p¥Ÿ _|2s§o„|­u]Ê}@v¬LO}êxT;"~Âz-*æÕ|L°œy(xá¡*y«yr‘ z$yù€z«z~n•{D{]{ú{¼Kº|Ë|r:Ã}Í}?*È ~%¯Fwz‚KŸÐx‚¡x¥®~ÏyDQm…z\'zÝ€¼K{Ò€w:^|ø€0*®~TÛ®v‹¡žvºŠŽŽfw`‰\}¤xˆl•xä†Õ[^yá…œJƒzõ„V:|<‚ö*—}·k¬útø”ðˆu¨“fvVø|°wŽÆk¸wøŒŽZ°yŠRJz7ˆ9¼{›…Œ*„}1‚Ь&tžœ±tÌ›kŒu}˜l{ávD•Ejþw7’ZxUŽØIy”‹|9€{‡ç*u|Á„«‡sh§$œ t$£™‹ÝtÓŸ«{2u™›…jYv–—VY‹wÉ“I7yŽ®9Kz¤Š*h|e…«rò¯ñ›Žs®«‰‹MtT¦¢zœu¡uiÒvœ>YwK–öHÛx­‘‚9 zL‹Ì*^|…쥋…|e;—„ÈgȈ„Dj,x¶ƒÞl{hQƒƒnØW½ƒ3qWGr‚ðsþ7r‚Ìvô(j‚Ôz\¤¯ƒˆnS–•ƒo‚¯qtwÆ‚\rög~‚tˆW åv4FêÁwü7#Àyù(kè|>£°ÀwE•hpx †#x»vÀ€éyofŸ€¿z/VZ€­{Fh€ª{æ6Û€Í|ä(k~¢›€€#”H߀ …S®€u܇âeÚzËUdž¾F¦µ6¦ñ¬(k€^ ¡~ˆï“K~–ˆ/„Y~s‡ItÌ~]†Jdú~d…MU ~’„XE}~σY6_5‚G(k¿ –}²‘³’\}‘1ƒq}uŽvsô}jŒ—d9}~бTv}·ˆÇE~†Ñ6(~“„±(k8‚eŸÙ|ÙšR‘ž|˜ ‚µ|§•vs>| ’±c•|ÂàSõ} DÅ}kŠ 5þ~ †â(k~ǃ†ŸJ|4¢È‘|$Ÿ»‚|œCr¢{ü˜Œc|$”ÈSs|€òDj|ñ5Ø}˜ˆÔ(k~k„{žè{À« ‘{³§4Ž{¢Ñr{yžb{¡™_S|”ŽD|‡ž5§}BŠy(k~!…E˜Ž1dé‹©Œ®gl}Ý‹hiÐo:ŠAl(`‰n‘PÞ‡ùq Aú†×sÙ3r…Évæ%ÿ„Õza—èŒjmyŠð‹!o}‰òp®nˆÓrE_z‡¼sïPY†¯u¹A˜…¨w¡3F„¸yÅ&!ƒà|0—Š´u߉õ‰’v¹|1ˆtwŠm¦‡kx_^ÆkyFOË…zzDA6„‘{U3ƒÁ|‡&>ƒ}Ý–"‰#~ˆùˆ~G{&‡ ~_lÙ†~q^….~OJ„[~¸@惑~ê2ý‚ã%&X‚If•5‡Ë†Wˆ†È…ÒzG…Ò…+l„å„n]|„ ƒ±NÛƒVƒ@ž‚«‚P2à‚“&n¦€È”k†Éއc…ÑZy „Þ‹ìkIƒöŠV\σ)ˆ¼NZ‚|‡)@Gê…Ž2¹yƒÔ&€‚“Ç…û–Ÿ†·… ”¶xõ„’zj¦ƒ3 \7‚q“MãЋ@Cˆ2 €ì…Ý&€©ƒ “G…_ž†2„y›âxhƒ˜Ój‚“•~[¹Ô’!MnF޼?¸€Æ‹J2Š€x‡©&œ€Kƒï’ì„ï¦:…É„¢åwïƒ ž÷i¥‚š¯[SO–dM#€Ç’?ƒ€Yµ2m€‰-&¦€„©Œ(—d­€”Ðg sY’ÔiƒeßèkãXŽënWJŒápö< ŠÍsÀ/œˆ¼vß#̆·zc‹Ž•xl‘“nn`rÁ‘woýeY‡q¦W’sgI‹—uL‰c{å"Œ†r}œ~ž›µz›sI™zóg‡–h{L[p“°{µOò|4BàŽ+|É7;‹S}o,Oˆx~0"Õ…¤~ÿ~švÁr±—àˆfï•=BZÜ’€öN³Ù€»B–*€7Ši€j,\‡©€P#„õ€;}}™~ˆÝr4–ñˆfx”O‡"Zh‘ †NMŽð…BeŒ@„(7‰—ƒ8,i†õ‚A#F„aN}˜®ÎqÇ–*Žlf “‰ŒÍZÛ‹ MõŽ2‰HB-‹Œ‡†7ˆß…Ç,y†Yƒý#pƒç‚9|½˜–•q—•ž”¨eÛ’ï’NYÆ*µMº}"AîŠíŠ˜6؈Uˆ,€…Û…#’ƒ„‚ý||—´(qW•,š¦e•’s—ŒY¦”!MŒö¾AÇŠje6ÇâŠ,…}†Ã#®ƒ5ƒtë©PcèjO¥ãf=_`¢rh¡TžÐkH¹šîm¾=o–Ùp2¾’ŸsŒ(ÀŽHvÙ "‰øzbtu¨5k#j¤¸lº_-¡$nnSÿjpDH©™ƒrB=t•ytn2Ý‘Ov½)yL žˆÛ|t¦¼riŸ£Is ^ÙŸµtS±›ýuSHt˜#v­=_”.x02ëyÎ)B‹ö{›! ‡â}~s¬¥Ùt(‚o.wþº]^”«©©`c’—˜CcHl†Vf+Ž;t)i0Œaèld‰çOþȯµ>tsw…[-òwn‚¿¹w\-ž¦¨®_A›®—Mb0˜‰…ke#•SsShA’!a7k‘ŽçO|o‹’>#rሠ-Ðvö„0¸±[D¨n§ð^a¤Œ–‹aS h„ªdLœ%r›g{—ç`˜j哟On‚-=ÜrfŠv-µv’…m¸3Z¤±ê§p]­ •û`®§Ü„c¤¢r fØC` jR—ëNŸn’b=‘qþŒŽ-ŸvB†wµ~o®`^¥£q&cc•rfBƒÇti qõu£kÚ_ôwInÅN1yqØ<¸{u8,-}py´mjy¤”nÎlp”ptnR‚Þrp/qsÏr_;u¨tMžw§v2uŠŽË6£x‰ü)Gz³…›è_ÑŽÃzb〾ƒeÌqÚ©hŸbmÞk~RÖ€$nC—€q±4¹u7&øÄy7šú}Gh¿Ó}kjé¿}Ÿlúpó}âoa¦~8qR7~¥sTC#*u«4€ÞxA' €Æ{*™ð{&q‡Œ¤{{rà~¼{Ît&oú|2ug`Ù|«v´Q˜}AxB¸}ñy4N~Ò{.'å|û˜Ïy6z?‹wy­zÓ}Œz!{LozŸ{Á`{?|9Q{ü|ÀBZ|Õ}R4%}ã}õ',~¦—¯w˜‚ÝŠ|x%‚º|’x±‚nnyH‚ _Jz¦P]zæLAæ{å€ñ3î}€’'9~u€)–¿vN‹o‰‹vêŠ{ªwƒ‰qm9x+ˆ2^Šxø†ìOÒyñ…§Aˆ{„^3Á|f‚ü'C}䀕ÿuA“؈Ìuê’5zñvŠElŠw>Ž&]íx‹ýOXy,‰ÌABz\‡3£{Ð…+'L}l‚©•ltqœˆ5u#™©zUuÅ–Þköv{“×]cwhÅNÞx¦@ðyÒŠv3…{U‡'S} ƒ¥•sÚ¤‡Át’ ÞyÔu01kvuâ™:\övÒ•8N‹x‘*@©y\3Wz÷ˆ½'Y|º„u—‡ï_©ƒw‡b¯vˆ†ie–hÍ…ÛhoZ˜…RkXLE„Ïni>[„Wq¦0åƒýu<$¥ƒËyBŽË…Éh‚²….j@u¸„¦l^h„,n{YÿƒºpªKуXrú>ƒul0ЂÑx $Ö‚Ã{!éƒÀpQ¬ƒVqÀtÕ‚ës!g<‚tYM‚;uñKKýwy=ºÏy0¶Äzå%Ú|ÜŒíïxp€¢žy.sÁPyØfjzyX˜€Ú{%JÆ€Á{Þ=i€¸|¦0œ€Ô}ƒ%'~r‹ú€P€»€€”rå e•³€^X”€;Jm €!=9¼€ 0“ÿõ%F€_ß‹(ˆ~ò‡õr:~Ç#dé~›†+Wl~‘….Ið~®„8<æ~èƒ@0sL‚6%aË Š~n~Z}ÿ%q”}Ô‹dN}µ‹ÁVÝ}»‰îIƒ}éˆ<°~1†90c~²„?%wP‚5‰ú}T˜}Õ}B–q}“¸cÐ|ø‘Vh}ŽbI}L‹ª"‰…¯yK‚펭gXw¼Oi„kÇŒk­_EЏmßRe‰kp'Eˆ$r”9†ßu&-J…°wý"Ö„›{‚1Œ¾ovå‹‹pkŠTr ^›‰!s‰Qà‡ïuE"†ÈvÏ8è…¦x-P„›zš#ƒ¨|¿`Šöv®v‰Ûwˆj/ˆ¾xV]ô‡ y'QT†zDÄ…Šzñ8¹„Œ{ò-Sƒ¦}#U‚Õ~A€“‰q~0uQˆh~riƒ‡\~™]B†R~®Pí…M~ÇDz„k~ò8—ƒŽ"-Z‚Ì\#‡‚ ™Þˆ9…­t¦‡C…Lhá†?„½\º…8„ Py„BƒXDKƒh‚µ8‚¬‚-]‚r#°ˆ€ÇL‡Ft5†^Œ hw…ZŠ¿\?„O‰@Oýƒg‡ÁCé‚¡†N8Zï„ß-ZqƒW#Ó Ê~؆Œ”'sÁ…«’h„¥…[Ôƒ—Ž4Oœ‚³‹æC‹‚‰ž8 ^‡^-Y€î…#‚£~†›se…"˜ägŸ„–[uƒ’æOO‚ÁCWqŒ¥8€à‰-S€ˆ†f$€QƒUx3™f_)m¿—2bbÁ•!déW:“gÖKoÄjÞ?¯Žln4}Œq})鉪u= ª‡hyPwŽ—¸fŸmF•¥hÅbN“j÷Vâ‘mm͉/}Ä4<‡F~=*f…n~È!þƒ±Zu‘~‚üj¹¾‚Ï_éã‚{TÅ‹ö‚I™Šª>¢ˆ/U4+†d *u„®€À"5ƒ€wt›†‰ÊjCŽÔ‰ _wŒýˆ TY‹†çI=‰6…Ã>g‡g„ª4+…Ÿƒ›*ˆ„ ‚"c‚’jt<ÑljŽ)(_?ŒJtTŠO‹}I ˆo‰’>-†·‡¶4……é*”ƒ„ "ˆ‚(‚5sòI–ÖiÁž•^õ‹¹’šSÙ‰¹×HÓ‡Ø"> †%Š3ö„†‡ì*›ƒ…R"¦Ó‚ÛmB¢o^°cxŸ¤a€YZœÖdcNæ™ÚgbDL–¢j‡9Ñ“Amâ/õÉqi&ÏŒKuBˆòyTl© üe½cž4gâY›Pj#N¶˜DlƒD6• o 9Ø‘¼qÁ0Ž[tž'Šûw¾ˆ‡Â{l1Ÿ:lb™œ…nX¬™¬oÂN^–©q‰Cþ“…sp9ÅOu01 w±'a‰Ïz÷†¹|Škµ|s0bšØt9X˜uLMü•"vwC´’w¾9¢y#09‹Þz '•ˆÅ|A W…Õ}êk8œyÃaœ™lzJW­–¯zÌM“Ë{PCvÓ{î9~Ú|¥09ŠÕ}j'½‡Þ~E ©…"jÊšÖ€Ka=˜L€RWX•’€:M@’²€C6Äü9hŒÓü0<‰ë€'Þ‡€ í„p€0jm™é†¤`ó—f†,W”ª…tM‘É„žBùŽåƒÓ9FŒƒ0G‰!‚n'þ†k¿!%ƒéj'™*Œ¿`²–¬‹ÃVÖ“ðŠiLÆ‘ ˆßBÇŽ-‡^9‹]…ë07ˆ„„Ž(…݃+!Rƒ|Ôi’²`§–"‘IVË“Y;L²`ŒÜBÅuŠ™9*Š­ˆs0P‡ô†g(6…o„Z!vƒ%‚pb¬«Ê^Y}¨s`×P7¤ãc½FÑ ñfÐ=iœ¥j48˜m+µ“wqM#úŽÇuE•ŠTyUbªdÁY/§"fáP£gi0F½Ÿ\k¯=q› nb4_–ŽqK+ü‘ûtZ$hhw£-‰zøa½¨Þk$XÔ¥tl¼OÅ¡ÀnxF‹¸pj=]™wr‡4m•tÕ,1œw@$ÅŒ,yÙ°ˆ|sap§qVX}£¼rsOi s©FSœ#u =;—úv’4m“µx=,W_z%‹{æ ‡}Åa#¥’wxX8¢Ax!O)ž¢xÓFš¹y”=%–¥z~4l’}{†,vŽG|%QŠ#}ʆK~ï`ݤ]}’X ¡}ÊOq}íEô™~= •„~J4u‘i~¤,•Q%ˆ‰R‚Ï…£ð`££fƒzWê ƒANðœu‚ÑEà˜”‚O<û”–á4u‹‰,´Œ~E%¹ˆ¢ …€Ê`v¢¨‰*WØŸOˆ€N囨‡xE֗ĆJ<î“Ì…/4hׄ*,¼‹Ûƒ>%àˆ‚W D„¨`Y¢ޤWÓž¯‡Nâšÿ‹áEÓ—Š<ó“!ˆ44y7†ƒ,Ê‹P„í%õ‡Ÿƒi n„N‚·Yb·Zé¦÷e^^X–+göa¹„Îje rþm:hgap kÛOFs oy=Üv[sh-qz wãµr_jeT¥~bdg¹”àeCjƒ¬hluqûknÛ`n-q[NŒqxsû=]uvà-Fyz,³©\o¤£Î_¹q“qbÕr\‚VeësÅpÓiu<_+lzvÈMÒp xl<çsíz@-!x+|U±äYéyÆ¢]Vz+‘Í`¡z•€ùcë{o¢gZ{^6jö|#MnÆ|Åp?†|sk2}üvŸ%ϳz0xtkã„umÇwvo›iVw(qh[3xVsCL÷y«u7?){#wI1å|Ùy%ð~Ã|Eq´tr‚Þríu•uïtv¡h{uUw¨Zyvµx³LrxÜyé{1Ë{Ö|U& }ñ}ÆŽo½|çÛq}Stðrh}gtsÄ}ÐY³uH~KÎw~M>oxà~š1Ÿzù~ó&%}=T"n!…H€éo“„út pü„yf¤ruƒØXÿtƒ4KSu> wõÿ1z:^&9|£€³ŒZlÎ|€)nTŒrsVoÍ‹!eûqZ‰§Xisˆ(Jáu†§=åw-…$1ky—ƒ&J|$ä‹Ák•vmW“¯r½nÚ‘Šempr/WårFŒÏJntYŠl=›v’ˆ1Wy…{&X{¼‚æ‹Tjú&l™š¦rAn—¨dôo»”gWq—‘"J$s¼Ú=[vІ1/x¬‡&c{iƒ»†ðmZ„{‚8]üo\2a\b~DdµU/^h GΈk¶:áÇo~.€‚2s¦#l‚ÏxA…ù~Ðb¸z©~èein‡h aÉAj®TŸ‚mcGfÚp=:¦€Js@.|€êvŽ#¬µz.„þ|`jÒy—|³lÈm }n´`ó}\pSó}Èr™Fé~Qt±:^~ôvè.pÅyU#〽{öƒóz.rËx‰z¨tl{uM`.{˜v~SK|4wºFt|ìy :}¿zn.g~Á{õ$ä}—‚òxDz½wxà{Yk¦yu{Ø_Uz|ERÈzÇ|ºF{®};9í|­}È.c}Ý~f$<*‚v¼‚žvØwq‚‘kx‚S^©xÉõR&yœ˜E©zF9ª{Àù.P}€ª$_~€XauzŠNv&vA‰•jWvöˆ”^w¸‡jQœx£†ô@3Pï5i„õ+UÝü"µ€M€v§~h‡"la~s†´a~[†VP~<…"K~A„G?Ü~oƒy5L~µ‚³+Z3á"ÜÇ v)}rŽkè}‹a}z‹¢Ué}b‰úJ¥}tˆW?‰}º†½5~…,+_~§ƒ‹"üZìuÈ|¶”Ëkˆ|ד/`¸|Ê‘U|´ŽJ`|ËŒ?[}‰´5}އU+W~;„î#‚£pu’^Zf¬Ú]p\ms`ÊQ³Žd6F¹ŒzgÄ;ÏŠãk†1z‰Mox'Ù‡ËsÅ™†qxZo©4a`fŽàd [ä‰fÆQLŒ$i’FtŠ®l};±‰9o—1†‡ÈrÙ(†pve …>z#nöþh€eUŒ×j’[L‹œl¬PÄŠQnØFˆýq;|‡¯sŒ1†gv(B…;xâ j„1{Æn;‹ðo‚d“ŠæqZ‰‰ÉrP7ˆt E¥‡ou©;:†Jwd1o…-y9(b„+{5 ¾ƒH}@m…Š,vpcè‰=w^Yæˆ6xAOŸ‡y EI† z:ý…{1\„|0(}ƒ=}_!‚~‘l䈺}McY‡â}¯Yh†é}ïO-…á~Dì„á~U:æƒñ~¢1\ƒ~ü(—‚nZ!@Ú¶lZ‡…ƒòbԆƒÀXì…׃YN½„Ú‚ÖD’ƒì‚X:³ƒæ1n‚Fƒ(²½!qQ€°kŠubš…ì‰ÄX¾…ˆªN”ƒô‡UDuƒ†:Š‚I„ç1KžƒÒ(Ã*‚«!™€à‚k˜…á¿bI…9ŠXm„SºNMƒH‹œDA‚[‰˜:m¦‡­1F…×(Ñ€¸ƒö!¸€‡‚-eÞ›1Y¡\ç™\åS™–ç`AI픟c¿@’"gh6f‰kL-WŒço_%ŠWsLJüxbe"™G`}\k—?c)S.•eñI¥’ÌhÚ?õXké6jÙo+-„‹Wr—%[ˆîvJŒ†»zd”—'g,[Ô•?iLR·“3k€I=ùmÖ?´Ž¡pJ6VŒDrê-Ÿ‰éu¬%¤‡¬x¦…£{°d•m·[8“KoPR‘Yp÷HÍ=rµ?d tŽ62ŠÕv‡-ªˆ¤xš%܆‘zØc„²}cs“Wt3Z°‘¢uIQšÀv`HX¶wz?$‹ x°6‰‘z-¬‡‡{d&…œ|â·ƒä~[bð‘êz¥Z=K{:Q7Žu{¸HŒw|+>âŠp|°5ÿˆr}T-°†‹~&(„È~¿ýƒ8rb‚Á€éYâ5Pég€ßG¾‹m€¦>¡‰v€~5؇€n-»…³€n&H„€i 7‚©€_b*φðYŽŽS†„P›ŒŽ…ÁG}Š˜„×>nˆ¨„5¦†Õƒ=-©… ‚’&hƒ}Ý f‚6$aåŒÓYo§‹øP‹ãŠ„Gf‰ÝˆË>r‡ä‡85Ɔ…Ç-Ì„l„q&…ƒƒ ‹ÚÅ[“¤\XùSP¡”\1J垦_‘BH›ic&9œ—àfø1'”,k )_koL"^Œ½sÓ¥‰^xhZÚ¢¬_pRÔŸôbJ}œödúB™«h9…– kG1=’|nÀ)¤ŽÓr`"Ï‹Gv:>ˆzZk ¢eµR^ýgæJ!›j8A¸—Öl¾9^”dom1AàrM)×ZuK#-‰øxw†ì{œZ ž–kÕQóœm‹I¯™1o[Ap–qR91’Âsq1Â&ƒÙ€Xµ™/ƒzPç–çƒ[HÞ”8‚î@Å‘=‚e8ÐŽ1õ10‹8ž*_ˆK_$J…¥[ƒc€ÑX‹˜oˆõPÍ–)ˆaHÉ“~‡S@¹…†8Öz„ü1EŠƒý*t‡¶ƒ$c…,‚4…ƒi¬\ãU+2_ýY&…c]}Lf0`ûlŸitdç[ÄlêhïK;p•m(;t™q»,xúv媋Xí_a›°\ob`Œ3_ßeW|'cWhLkœfôkIZèjÆnaJŒnÐq¢:¥s4u4+÷wòy>¨½Ugi€™ýY>k€ŠÄ\ÿm~zÑ`Ãoƒjxd¯q–YühÕsÁIÞm7v :@qõx–+êw{v¦òR=ss˜KVct‚‰&Zdu”y€^lv«iSb¦wÒYgy I:kÎz]9åpÞ{Ù+Þv7}ˆ¥BOw}B–ËSà}n‡ÅX"}™x4\d}Äh[`Ü}øXIe›~>H«j–~Ž9–oì~ô+Óuƒn£ÔM †ñ•‹Q†=†¯V8…w=Z±„»g}_]ƒûW¨dQƒEH8i‚’9To Ý+Êté"¢©K)s”‰OûŽ×…ÏT›*vzY@‹ufÍ^‰ÄWcCˆGÞh­†V9"nt„‡+Ãti‚¡¡ÄI—™°“ÂNŽ—$…!SM”‚uâX‘ÚfD]7VŸbeŒG„gû‰Ï8ùmæ†ë+½tƒé¡+Hp¢“7M{ž÷„ RK›\upW!—Åeç\;”8VXaªGDgbŒä8Êmrˆú+¹s«„û ÕcóU5’ÔfiY:„Ihç]'ukxaeqn,dîU¢qhùF/t(m77+w•qÖ)[{Xw Ÿ+`0^å‘£caûƒEeàetc0ˆQ•g®†Cnll…05Çq€ƒ³)|v·‚#—bQ…–1ŠMU°”"|•Y·‘ÞnM]Ѓ_³b,,QfÖŠÓCk½ˆp5§pó…î)vMƒU–ÝPjž‰ÊT§›£|X½˜smÓ\ç•*_OaZ‘êPÐf!ަBÙk)‹O5zpƒ‡Ô)uù„R•[k5UVˆ”mYV{'nê]=mpça^gsdûO©uLiASwÄmI3vzqñ&Ù}¢w+“æg£^j‡bi×azl d£lnLg°]™p±jÉOsIn@ãvqk3Fy/u'&ø|yQ’dagx† fêiÆxþialkkänB\ÓnpŠNuqprî@ˆtˆut3#wòx<'{˜{S‘atpa„Ÿd@qãw”fôsWiùi´tÂ[Ül¨v5M·oÓw¿@ s4yb2ëvã{1'*zÁ}.­^éy.ƒ[aêyëvfdÕzhãgÌ{%[j÷{ÀMng|l?¤r }&2Ãuõ}ø'>z~ÞŽ\Æä‚R_òÛuwc ¬h f1gZYiŒ"L™m+€é?Rq€¹2 u)€‹'Oyk€]©ZþŠi{^M‰˜t±a†ˆ‘gWdÔ‡mYºh]†IL!l(…)?p*„ 2Št}‚â']x諌ùY’¬€Ô\ú‘t`L/fÄcµ'Y3g`‹!K«kU‰>Éo}‡2tsï„õ'ix}‚ÆŒX|š•€Y[ù˜7s_Y•vfJbÒ’†XÐf’›Kdj¢Œ²>Šnì‰À2Ks‚†¶'rx'ƒ±Šr¶U€~LsÞYqqçu)]OdÐvŽa#WFx eI¦y¬i‚Or£7²‚)tð.Ì‚wY&§‚yìß‚=|ˆeÇ€Çq,\ñ€ãr S€àt JW€Êuz@߀¾w7s€Ëxž.»€æzN&Å | *l}áe~õwò\M5xÖS3Oy£IÙXzf@{j{77R”|.·Ü}&á€E~ i€¼ dv}d~}[»}Ë~ÒR²~~ûIm~!@$~P07(~˜_.Ð~ôŸ'‰Ü €+€cû|(„ß[j|´„¯Rq|û„*I>}ƒ{@}U‚á7}¿‚[.´~=ê'~ïk ǵ€åcš{*‹[{ÊŠOR|#‰Hù|Q‡¬?Û|•†U6ð}….±}¦ƒê'$~x‚· èW”^㓈TÙVž’X“N ª\fE%`a<~dŽ3‹Èhú*ËŠm˜#Mˆr…&‡w^û[ƒU÷Æ^·MwŽvbD±ep;È‹yi 3 ‰êlØ*öˆdpÒ#ª†þu ¯…ËyU]XŽgbUEddÃLëŒ=gƒD:Šïjb;}‰md2ðˆ.p•+†Ùsç#õ…§wl&„¥zò\±‹ûh’T›‹ j¸LCŠlëCȈûo6;+‡Èq¡2̆›t.+…zvÖ$0„{y£ƒ¨|e\ ‰ÚoT‰&p¢K·ˆErECK‡Asñ:ë†5u¾2«…8w§+$„Fy $aƒw{°ã‚Ð}®[uˆ uaS{‡~v|KG†ºwˆBï…Ðx•:¦„ày¶2Ÿƒÿzö+1ƒ7|@$‰‚—}+‚~ÌZò†‡{S †|'Jí…s|˜B©„›|þ:nƒÃ}w2…‚þ~+G‚M~§$°Ø<g…¿Z‡…FpR¥„ýJ„hTB\ƒ¢:4‚Ý€å2P‚7€Ê+?“€Ä$Û2€°— €ŠZ3„H‡HR„'†ëJyƒ¦† B_‚Ï„ô:bû„2 ZƒM+|€ß‚¥$ý€²ê½€¬/TÜœ†T#M‹šZW×Eû˜ [¯>•®_À6&’þd.`5h±'Emm| ïŠÌrŠÒˆ~wšTš‡Éo‘R†ÑaX1…ÜRƒ^•„êDteAƒ÷6ólC‚ü*ìsJþ–ß>’³Š9DzÆ|ýJ–ŽàoP«`¢Vú‹+R]™‰LD,d}‡b6Øk­…^*ïrÞƒK–(f—9k'„y7oÔƒ-}t²‚ $ºys­yT´JnÖXíŽýcþ]EX¾a@‹`MUe«‰‰Bj]‡Á7`o7†-ct@„>$Îy‚ŠwlsQlñtWU+buÌYdVÕwU]±KBxðb?²z±f½4¯|˜k˜*W~Äpà!dv™uØoX½kÏpÕ\La.rž_âVtsc…J¶vbgC?Vx~k04†zÁoO*l}DsË!½Úxt‡kq`‚j”m’cj`4o­fVUAqÑiKJtlX>ãv†oŒ4Oy!rì*u{òv–" ~Èz{sLhh9igj’ju_lùlµT|odnûIlqüqS>{tÂsË4!w®ve*zÉy8"M}Ù|/re)oãhRgåqs^ jsS¢mBt‹Höpv)>*s2wá4vfy°*yÄ{©"…} }·q!bœwvg‚e—xa]phy7RúkpzH^n‰zÞ=ÑqØ{Ò3ÕuK|Ø*xæ}ò"µ|`pS`k~ÒfÅcœ\Çf¹5Reià@Gßm1W=ypµ‚3ºtW½*™x(ý"Ü{Ñ€8o°^™…åf4a÷…\AeA„ïQðh“„3Gxlƒ„=!oÉ‚ç3s•‚Y* wŠÇ"ü{]2o9]$ŒªeÇ`ª‹¿[ÖdŠeQŽgˆˆÛG.k%‡`<óo…ù3grø„Ÿ*ŽwƒF#{ÿlÒzÍQcJ{‡U.Ym|bY`O)}E]¯D¤~-b%:0-fÕ0U€Jk¾'8šq€ƒv²khwXUbDx<[åX•y^_ƒN„z‚c5D/{³g 9î}k0J~roG'h€sÖì¿x¢j@s§_ a-ub—W»v‹e˜MÆwôh¨C¥ypkÖ9š{o/00|Ðr²'Š~¹v{ I€¡zki(pzfß`r=i8V»sík—M užnCwhp‰9=yWs10 {auú'¡}xø ™ª| h$m¤n _3o©oÆUäq™q‚LFsŒsCB¤u•u8ówÎw/özy'º|†{H Þ~×}|g;k*u&^_mmvDU-o™wTK·qÄxaB5ty}8Ívrz¹/òxú|'Ô{ }f!~%~Áf|i|]Ãk‡|˜T«mç|øKFpA}KAÎrµ}°8„uT~./äx~¾'çzÞO!F}’×eäg=‚¹]9iT/l|‚\JÞnþòAvqœœ8:tj\/ÀwB.'õz?€û!l}€Áereˉ\Ðh¤ˆƒSËkX‡€J‡mû†SA8p·…;8s¥„;/©v¥ƒL'ñyÈ‚_!‹|º€b„‚ÜPáYô‚ñT÷Qƒ Y*GÓƒK]ƒ>[ƒnb 5ƒ›fÖ,MƒÛkØ$b„Cq5Õ„ÄvÇaCjW·YÝ[OPG€J^ûG6€ªbÄ=ôf¶4Õ{jß,[‚o8$ª‚±sÞRƒqx¥`C|^X |áažO„}d¹F~.gì=€~ÐkC4˜ŒnÉ,Z€\rv$âOva¾‚Iz[_Tye^W"zgÙN¥{j_Eð{älú=|Îo²4T}Òr‘,N~éu% €x»I{ç^pvOlVNw˜nMãxÁoóEFyÜqê<¥{t4|Nv6,B}£x%0zêk€n}G]¥särËU—ult!MGvÎunDÂx!vÁ†âb.8†XfH0…×jž(¿…fo "5…sâí„ñx§V˜„Õ]IO;„Ø`uGœ„¸c³?¨„vg7¯„(jœ/êƒènX(Õƒ¹r6"ƒ¯vFgƒ¾zLUÒÝc¯Nv‚fSFÜ‚7i?#‚4kØ7P‚(nÏ/¿‚,qì(à‚?u%"¾‚rxЂ¶{ÇU)j MÁ«l&F9þnL>—€1p‚7 €ará/›€¤u_(è€ôwî"ñ`z‘)Ô}T_|Äp[M}ŠqêE±~sz>-~|u6¾~ÜvÍ/ˆMx§(óÒz‹#€t|ts~;SÅz³vyL”{¸w€EB|{xt=Ù} yn6{}—zƒ/k~2{²)~Ö|î#Dª~!°€{3SAxç|YLz/|ÖDÕ{&}-=†{à}‚6@|Œ}ò/:}R~x)~#o~ÿ–áý€Ràwq‚KÌxö‚D z¿=qzíX6U{£/h||€ø)'}c€è#Š~~€Î˜€¬NØ“ýO£HJ’„SÒAq‘X:=…\¤2áÙav+»Œ#f“%AŠzk䔈öqo‡´vçMÌúU¹GRíY}@€Ž¯]_9}?aq2l‹­eÁ+–ŠjO%lˆŸo ‡Rs嵆Gx§Mø[ËFŒ,_?ÕŒ)b„8êŠèf2‰‰iã+yˆ1mà%†íq÷ […Ýv/;… z>Lx‹aÐEêŠ|d¤?1‰¯g8{ˆ¬jŸ1ɇ‰mà+e†oqF%¯…jtÀ ¨„—xM¯ƒø{ªKÚˆ^gÎESˆj!>®‡{lˆ8†¨o1¢…¿q¹+\„âtŠ%Ï„wb ìƒ}zAƒ|ìKA…ïmÇDÆ…ño•>@…™qn7Ä„ös^1s„9up+cƒ‰w¤%ð‚ñyÚ!&‚Œ| a‚N~J¼ƒÐs“DL„ tÜ=ä„v"7†ƒ‹w{1L‚õxò+Z‚mz‚&÷|![À}œ¤®~ïJL‚y/Cç‚—yò=•‚¯zŸ7V‚^{X1-ê|2+E‹} &2~!„~ùÚ,´Iû€|~¥C—R~Û=U~æ71l~ù1$0+T€Ê|&(€–Ñ!š€ž€€Ä€Tÿÿÿÿÿÿmft1!  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ƒ†‰‹Ž’•—™›Ÿ¡£¥§¨ª¬­¯°²³µ¶·¹º»¼½¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÍÎÏÐÑÒÒÓÔÕÖÖרÙÙÚÛÛÜÝÝÞßßàááâããäååææçèèééêëëììíîîïïððñòòóóôôõöö÷÷øøùùúûûüüýýþþÿ  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ƒ†‰‹Ž’•—™›Ÿ¡£¥§¨ª¬­¯°²³µ¶·¹º»¼½¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÍÎÏÐÑÒÒÓÔÕÖÖרÙÙÚÛÛÜÝÝÞßßàááâããäååææçèèééêëëììíîîïïððñòòóóôôõöö÷÷øøùùúûûüüýýþþÿÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢FJý M`ñ¤Lræ§L„Ú¨P–ϦY¦Ç¥d±Ä§o¶Á§x»½§Àº¥‡Æ¶£‡Ë³ ‡Ð¯ˆÖ«š‹Ý¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦92ÿ¢EJý¡L`ò¥Kqæ©JƒÚªM•Ï©V¥È¨a°ÅªkµÂ¬uº¾«}¿ºªƒÅ¶¨‡Ê²¦‡Ð«¢‡Ö¤ž‰Üššáššáššáššáššáššáššáššáššáššáššáššáššáššáššáššáššáÿ¦82ÿ£EJý¢K`ò¦IqæªH‚Û­J“ЬR£É¬]¯Æ¯g³Ã±q¸¿³y½¸¯Ä²ª‡Ë¬¦†Ð¥£†ÕŸ†Ú“‹Þ“‹Þ“‹Þ“‹Þ“‹Þ“‹Þ“‹Þ“‹Þ“‹Þ“‹Þ“‹Þ“‹Þ“‹Þ“‹Þ“‹Þ“‹Þ“‹Þÿ§82ÿ£EJý¢J_ò§Hpç¬FܯG’Ò°N¡Ê±W­È¶b°Åºlµº³x¾²®Å­ª‡Ë§§…Ï ¤„Ó˜¡…ןˆÚŸˆÚŸˆÚŸˆÚŸˆÚŸˆÚŸˆÚŸˆÚŸˆÚŸˆÚŸˆÚŸˆÚŸˆÚŸˆÚŸˆÚŸˆÚŸˆÚÿ§82ÿ£DKþ£I_ó©Foè®D€Ý³CÓ¶HŸÌ·QªÊÀ\¬½¸l·³²xÀ­®Æ©ª†Ê¢¨„Λ¥„Ñ”£„ÔŒ¡‡×Œ¡‡×Œ¡‡×Œ¡‡×Œ¡‡×Œ¡‡×Œ¡‡×Œ¡‡×Œ¡‡×Œ¡‡×Œ¡‡×Œ¡‡×Œ¡‡×Œ¡‡×Œ¡‡×Œ¡‡×Œ¡‡×ÿ§72ÿ£DKþ¥G^óªDné±A߸>ŽÖ½B›ÏÃJ¤Â¾\¯¶·l¹®±xÁ©®Æ¥«…Éž©„̘§ƒÏ‘¥„ÒŠ£†ÔŠ£†ÔŠ£†ÔŠ£†ÔŠ£†ÔŠ£†ÔŠ£†ÔŠ£†ÔŠ£†ÔŠ£†ÔŠ£†ÔŠ£†ÔŠ£†ÔŠ£†ÔŠ£†ÔŠ£†ÔŠ£†Ôÿ¨72ÿ¤DKþ¦F^ô­Bmê´>}á½;‹ÚÆ<–ÊÆH¤¹¼\²¯¶m»©±yÁ¥®‚Å¡¬„È›ªƒË•©ƒÍ§„ω¦†Ñ‰¦†Ñ‰¦†Ñ‰¦†Ñ‰¦†Ñ‰¦†Ñ‰¦†Ñ‰¦†Ñ‰¦†Ñ‰¦†Ñ‰¦†Ñ‰¦†Ñ‰¦†Ñ‰¦†Ñ‰¦†Ñ‰¦†Ñ‰¦†Ñÿ¨72ÿ¤CKÿ¨C]õ¯?lì¸:zäÃ7‡ÝÓ5ÁÄI§±º^µ©µn¼¤±zÀ¢¯‚Ä­„ǘ¬„É’ª„Ë©…͈¨†Îˆ¨†Îˆ¨†Îˆ¨†Îˆ¨†Îˆ¨†Îˆ¨†Îˆ¨†Îˆ¨†Îˆ¨†Îˆ¨†Îˆ¨†Îˆ¨†Îˆ¨†Îˆ¨†Îˆ¨†Îˆ¨†Îÿ©62ÿ¥BKÿªA\ö²;jî½6wèË3€ÐÒ3“¸ÃK¨ª¹`¶¤µp¼¡²{Àž°ƒÃš®„Å•­„Ǭ„É‹«…ʇª†Ì‡ª†Ì‡ª†Ì‡ª†Ì‡ª†Ì‡ª†Ì‡ª†Ì‡ª†Ì‡ª†Ì‡ª†Ì‡ª†Ì‡ª†Ì‡ª†Ì‡ª†Ì‡ª†Ì‡ª†Ì‡ª†Ìÿ©52ÿ¥BKÿ¬=Zø·7gñÄ1qß×,{ÅÐ5•°ÂN©¤¸c·Ÿµr¼³|¿›±ƒÁ—¯„Ã’®„ÅŽ­…ÆŠ¬†È‡¬‡É‡¬‡É‡¬‡É‡¬‡É‡¬‡É‡¬‡É‡¬‡É‡¬‡É‡¬‡É‡¬‡É‡¬‡É‡¬‡É‡¬‡É‡¬‡É‡¬‡É‡¬‡É‡¬‡Éÿª42ÿ¦@Kÿ°9Xù½1bçÎ-iÐà$¹Ï7—§ÂR©žºfµšµs»˜³}¾—²ƒÀ”±…Á°…ï…ĉ®†Å†®‡Æ†®‡Æ†®‡Æ†®‡Æ†®‡Æ†®‡Æ†®‡Æ†®‡Æ†®‡Æ†®‡Æ†®‡Æ†®‡Æ†®‡Æ†®‡Æ†®‡Æ†®‡Æ†®‡Æÿ«32ÿª;Iÿ¶2SðÇ*ZØÞ!fÂß$‚­Î<˜ŸÃV§™¼h²–·u¸”´}½“³ƒ¾‘²…¿Ž²†À‹±†Áˆ°‡Â†°ˆÃ†°ˆÃ†°ˆÃ†°ˆÃ†°ˆÃ†°ˆÃ†°ˆÃ†°ˆÃ†°ˆÃ†°ˆÃ†°ˆÃ†°ˆÃ†°ˆÃ†°ˆÃ†°ˆÃ†°ˆÃ†°ˆÃÿ­12ÿ°3EøÀ)LßÖ#MÇè j³Þ&„¡ÏA–—ÆY¤“Àj¬¼u²¹}¶·ƒ¸Œ¶„ºŠµ…¼ˆ´†½†³‡¾„³ˆ¿„³ˆ¿„³ˆ¿„³ˆ¿„³ˆ¿„³ˆ¿„³ˆ¿„³ˆ¿„³ˆ¿„³ˆ¿„³ˆ¿„³ˆ¿„³ˆ¿„³ˆ¿„³ˆ¿„³ˆ¿„³ˆ¿ÿ¯/2ÿ¹)?èÎ?ÌæR·î!m¥Þ,ƒ—ÒE’Ë[ŒÅk¥‹ÂuªŠ¿|­‡¾°„¼€±ƒ¼‚²»ƒ³º„´~º†µ~º†µ~º†µ~º†µ~º†µ~º†µ~º†µ~º†µ~º†µ~º†µ~º†µ~º†µ~º†µ~º†µ~º†µ~º†µ~º†µÿ²*2ñÆ3Ñâ:¼óV¨î&m˜á5ŽØJŒˆÐ]•†Ìk›„Ét Çx£~Å{¥|Ä}¦{Ä~§yÀ¨x‚©wƒªwƒªwƒªwƒªwƒªwƒªwƒªwƒªwƒªwƒªwƒªwƒªwƒªwƒªwƒªwƒªwƒªú¾(ÖÝ#Àð?¬ýWœð-jå>y†ÞNƒØ_‹ÔkzÑp”wÏt—uÎw˜sÍyšrÍ{›qÌ}›pËœoË€oË€oË€oË€oË€oË€oË€oË€oË€oË€oË€oË€oË€oË€oË€oË€oË€ÙÒ Äí)°ýAŸÿ$U‘ô5e‡ëFpåTy{áavÝh„rÛn‡oÙq‰mØt‹kØwŒjÖyiÖzŽhÕ|ŽgÕ~gÕ~gÕ~gÕ~gÕ~gÕ~gÕ~gÕ~gÕ~gÕ~gÕ~gÕ~gÕ~gÕ~gÕ~gÕ~gÕ~ÿ£9*ÿŸF@ÿPUú Peï£Quä¤S†Ú¢[–Рe¤Èp°Åœ{µÂœƒ¹¿š‰¾¼•‹ÂºŒÅ¸ŒÉ¶ˆ’̳„—ϲŸÒ­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Óÿ£9*ÿŸF@ÿPUú Peï£Quä¤S†Ú¢[–Рe¤Èp°Åœ{µÂœƒ¹¿š‰¾¼•‹ÂºŒÅ¸ŒÉ¶ˆ’̳„—ϲŸÒ­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Óÿ£9*ÿŸF@ÿPUú Peï£Quä¤S†Ú¢[–Рe¤Èp°Åœ{µÂœƒ¹¿š‰¾¼•‹ÂºŒÅ¸ŒÉ¶ˆ’̳„—ϲŸÒ­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Óÿ£9*ÿŸF@ÿPUú Peï£Quä¤S†Ú¢[–Рe¤Èp°Åœ{µÂœƒ¹¿š‰¾¼•‹ÂºŒÅ¸ŒÉ¶ˆ’̳„—ϲŸÒ­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Óÿ£9*ÿŸF@ÿPUú Peï£Quä¤S†Ú¢[–Рe¤Èp°Åœ{µÂœƒ¹¿š‰¾¼•‹ÂºŒÅ¸ŒÉ¶ˆ’̳„—ϲŸÒ­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Óÿ£9*ÿŸF@ÿPUú Peï£Quä¤S†Ú¢[–Рe¤Èp°Åœ{µÂœƒ¹¿š‰¾¼•‹ÂºŒÅ¸ŒÉ¶ˆ’̳„—ϲŸÒ­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Óÿ£9*ÿŸF@ÿPUú Peï£Quä¤S†Ú¢[–Рe¤Èp°Åœ{µÂœƒ¹¿š‰¾¼•‹ÂºŒÅ¸ŒÉ¶ˆ’̳„—ϲŸÒ­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Óÿ£9*ÿŸF@ÿPUú Peï£Quä¤S†Ú¢[–Рe¤Èp°Åœ{µÂœƒ¹¿š‰¾¼•‹ÂºŒÅ¸ŒÉ¶ˆ’̳„—ϲŸÒ­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Óÿ£9*ÿŸF@ÿPUú Peï£Quä¤S†Ú¢[–Рe¤Èp°Åœ{µÂœƒ¹¿š‰¾¼•‹ÂºŒÅ¸ŒÉ¶ˆ’̳„—ϲŸÒ­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Óÿ£9*ÿŸF@ÿPUú Peï£Quä¤S†Ú¢[–Рe¤Èp°Åœ{µÂœƒ¹¿š‰¾¼•‹ÂºŒÅ¸ŒÉ¶ˆ’̳„—ϲŸÒ­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Óÿ£9*ÿŸF@ÿPUú Peï£Quä¤S†Ú¢[–Рe¤Èp°Åœ{µÂœƒ¹¿š‰¾¼•‹ÂºŒÅ¸ŒÉ¶ˆ’̳„—ϲŸÒ­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Óÿ£9*ÿŸF@ÿPUú Peï£Quä¤S†Ú¢[–Рe¤Èp°Åœ{µÂœƒ¹¿š‰¾¼•‹ÂºŒÅ¸ŒÉ¶ˆ’̳„—ϲŸÒ­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Óÿ£9*ÿŸF@ÿPUú Peï£Quä¤S†Ú¢[–Рe¤Èp°Åœ{µÂœƒ¹¿š‰¾¼•‹ÂºŒÅ¸ŒÉ¶ˆ’̳„—ϲŸÒ­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Ó­¢Óÿ£9*ÿŸF@ÿžOTú¡Ndï¤Ouå¦Q…Ú¥X•Ñ¢b£ÉŸm¯ÅŸwµÂž€¹¿ˆ¾¼™‰Ã¹”‹Ç¶Ë³ŠÏ±†–Ô®ƒ ×§¡Õ§¡Õ§¡Õ§¡Õ§¡Õ§¡Õ§¡Õ§¡Õ§¡Õ§¡Õ§¡Õ§¡Õ§¡Õ§¡Õ§¡Õÿ£9*ÿ F@ÿžNTú¢Mdð¥Ntå¨O„Û§U”Ò¥_¡Ê£i­Å¢t´Â¡}¹¿ …¾»ˆÃ¸˜‰Èµ“‹Í±ŽŽÓ®‰–ا…Ú¡… Ö¡… Ö¡… Ö¡… Ö¡… Ö¡… Ö¡… Ö¡… Ö¡… Ö¡… Ö¡… Ö¡… Ö¡… Ö¡… Ö¡… Öÿ£9*ÿ F@ÿŸMTû£Ldð§Ltæ©NƒÜªS’Ò©[ Ë¦f«Æ¥p³Ã¥z¸¿¤‚½»¢‡Ã¸‡É³˜‰Ï°”ŽÕ«’—Ú ŠœÜ›‰ŸØ›‰ŸØ›‰ŸØ›‰ŸØ›‰ŸØ›‰ŸØ›‰ŸØ›‰ŸØ›‰ŸØ›‰ŸØ›‰ŸØ›‰ŸØ›‰ŸØ›‰ŸØ›‰ŸØÿ£8*ÿ E@ÿ LTû¤Kcñ¨Ksæ«LƒÝ­P‘Ô¬XžÌªb©Çªl±Äªv¶Àª~¼¼¨„¸¤†É³¡ˆÏ¬œÕ£–”Úš‘œÜ–ŽžØ–ŽžØ–ŽžØ–ŽžØ–ŽžØ–ŽžØ–ŽžØ–ŽžØ–ŽžØ–ŽžØ–ŽžØ–ŽžØ–ŽžØ–ŽžØ–ŽžØÿ¤8*ÿ E@ÿ KSû¥Jcñ©Irç­JÞ°MÕ°UœÎ°^§É°h¯Æ²s³Ã²|¸½°€Á¶¬‚É®§…Ï¥¡ŠÕœœ‘Ú•™œÜ‘”žÙ‘”žÙ‘”žÙ‘”žÙ‘”žÙ‘”žÙ‘”žÙ‘”žÙ‘”žÙ‘”žÙ‘”žÙ‘”žÙ‘”žÙ‘”žÙ‘”žÙÿ¤8*ÿ E@ÿ¡JSû¦Hbò«Hqè¯H€ß³JŽÖµQšÐ¶Z¤Ì¸e«Ê½q®Á¹{¶·²€À®¬„Ȧ¨…Τ‡Ô” ŽØŽŸ™ÛŒ›žÙŒ›žÙŒ›žÙŒ›žÙŒ›žÙŒ›žÙŒ›žÙŒ›žÙŒ›žÙŒ›žÙŒ›žÙŒ›žÙŒ›žÙŒ›žÙŒ›žÙÿ¤8*ÿ¡E@ÿ¢ISü§Gaò­Fpé²Fà·GŒÙ»N—Ó¿WŸÐÅc¤ÅÀp­º¸y·°²€À©­…Ç ¨„Í—¥…ÒŽ¡‰×‡ ’Ù‡¡œØ‡¡œØ‡¡œØ‡¡œØ‡¡œØ‡¡œØ‡¡œØ‡¡œØ‡¡œØ‡¡œØ‡¡œØ‡¡œØ‡¡œØ‡¡œØ‡¡œØÿ¤7*ÿ¡D@ÿ£HRü©Eaó®DoêµC}â¼D‰ÜÂJ“ØÊT™ÊÆb¤¼½n°²¶x¹ª±€Á¤­…Ç›©„Ì“¦„Њ£‡Ôƒ¢ŽÖ‚¢–Ö‚¢–Ö‚¢–Ö‚¢–Ö‚¢–Ö‚¢–Ö‚¢–Ö‚¢–Ö‚¢–Ö‚¢–Ö‚¢–Ö‚¢–Ö‚¢–Ö‚¢–Ö‚¢–Öÿ¥7*ÿ¡DAÿ¤FRýªD`ô±Bnë¸A{äÁB†ßÌFÓÏR—ÁÄa§³»m³«µx»¥±€ÁŸ®„Ƙ«„ʨ„Έ¦†Ñ‚¤ŒÓ€¤’Ó€¤’Ó€¤’Ó€¤’Ó€¤’Ó€¤’Ó€¤’Ó€¤’Ó€¤’Ó€¤’Ó€¤’Ó€¤’Ó€¤’Ó€¤’Ó€¤’Óÿ¥7*ÿ¡DAÿ¥EQþ¬B_õ´?lí¼>xçÇ@àÖF‡ÉÍQš¸Â`ª¬ºmµ¥µx¼ ±€Á›®„Å•¬„ÈŽª„ˇ¨†Î‚§‹Ï¦Ð¦Ð¦Ð¦Ð¦Ð¦Ð¦Ð¦Ð¦Ð¦Ð¦Ð¦Ð¦Ð¦Ð¦Ðÿ¥6*ÿ¢CAÿ§CPÿ®?]÷·Ž³ÉR §Àc­Ÿ¹p¶šµz¼˜²¿”±…¯…Ä‹®†Å†­‡Ç‚¬ŠÈ«É«É«É«É«É«É«É«É«É«É«É«É«É«É«Éÿ§5*ÿ£BAÿ¬?ÿ±7Jù¾0RçÏ/UÑâ,hÀá0­ÒB“ ÈW¡˜Ág«”¼s²’¸|·¶‚ºŽ´…¼‹³†¾ˆ²‡À…±‰Áƒ±ŠÁ°ŒÂ°ŒÂ°ŒÂ°ŒÂ°ŒÂ°ŒÂ°ŒÂ°ŒÂ°ŒÂ°ŒÂ°ŒÂ°ŒÂ°ŒÂ°ŒÂ°ŒÂÿ©2*ÿ«8=ÿ¸/EîÈ)HÖß%RÃì)l±ß1‚¡ÒE’—ÊZŸ‘Ãi§Ž¿t­¼|±‹º´ˆ¹ƒ¶…¸„¸ƒ·†¹¶‡ºµ‰»~µ‹¼~µ‹¼~µ‹¼~µ‹¼~µ‹¼~µ‹¼~µ‹¼~µ‹¼~µ‹¼~µ‹¼~µ‹¼~µ‹¼~µ‹¼~µ‹¼~µ‹¼ÿ«0*ÿ±/8öÂ&<ÜÚ;Æë#W³ì*o£ß5‚–ÔJÍ]š‹Èk¡‰Äu¦†Â{ªƒÀ~¬¿€®¾‚°}½ƒ±{¼…²z»‡³y»ˆ³y»ˆ³y»ˆ³y»ˆ³y»ˆ³y»ˆ³y»ˆ³y»ˆ³y»ˆ³y»ˆ³y»ˆ³y»ˆ³y»ˆ³y»ˆ³y»ˆ³ÿ­.*þ»%0ãÒ-ÉèA¶÷#Z¥ì.o–á<ŒØO‹‡Ò_“„Íl™Êtž~Èx¡{Ç{£yÆ}¤xÅ¥vĦuçtĨs†©s†©s†©s†©s†©s†©s†©s†©s†©s†©s†©s†©s†©s†©s†©ÿ´$%ìÊ#Íå,¹öF§ú&[˜î5lŒåDz„ÞSƒ€ÙbŠ|ÕlxÒq“uÐu•sÏx—qÎz˜pÍ|™oÍ~šnÌ€›mÌ‚œlË„œlË„œlË„œlË„œlË„œlË„œlË„œlË„œlË„œlË„œlË„œlË„œlË„œlË„œlË„œõÁÑß ¼ó1ªÿGšü,YŽò]ù½?fîÈCmãÖMoÕÝNÄÓY‘µÉfŸ©Áq« »y³™¶€º”²…ÀŒ¯†Ä†­ˆÇ€«ŒÉ|ª’Êz«œÊy«ŸÊy«ŸÊy«ŸÊy«ŸÊy«ŸÊy«ŸÊy«ŸÊy«ŸÊy«ŸÊy«ŸÊy«ŸÊy«ŸÊy«ŸÊÿ£5"ÿ B7ÿ¦AEÿ¯=Pþ¸;YóÄ6ÿ­9Aÿ¸4HðÆ3MßÙ6PÍå6g¾ä;{­×HŒ ÍX™—Æg¤’Ár«Ž½{°Œº´ˆ¸ƒ·„·…¹‚µˆ»´Š½|³¾z³‘¿z³“¿z³“¿z³“¿z³“¿z³“¿z³“¿z³“¿z³“¿z³“¿z³“¿z³“¿z³“¿z³“¿ÿ¦2"ÿ¦:4ÿ²3=÷À.BäÒ/AÏä.U¿ï3k¯á;~ ÖJ–Î[™Èi¡ŒÃs¨‰À{¬†¾¯‚¼²€»„³}º†µ{¹ˆ¶y¸‹·w·¸w·¹w·¹w·¹w·¹w·¹w·¹w·¹w·¹w·¹w·¹w·¹w·¹w·¹ÿ§1"ÿ¬31ÿ¹+6êÌ&6Òá&AÁï,Z°í3n¡á=•×MŒÐ^–‰Ëk†Çt¢ƒÄz¦Ã}©|Á€«zÀ‚¬y¿„­w¾†¯u¾‰°s½Œ±s½±s½±s½±s½±s½±s½±s½±s½±s½±s½±s½±s½±s½±ÿ©.!ÿ³*+òÅ",ÖÞ-Ãí#G²ù+]¢ì6o•âB}‹ÚRˆ…Ô`‚Ðl–~Ìs›{ÊwžxÉ{ vÈ~¢tÇ€£sÆ‚¤qÅ„¥pć¦nÄŠ§n˧n˧n˧n˧n˧n˧n˧n˧n˧n˧n˧n˧n˧ÿ¬* ú½"ÜÙÅë3´ú#J£ù.^•îÿ¤FJÿªFVü®Hbô³Kmî¸Owè½UáÁ^†ÖÀlŽÈ·q½®wª²§}´©¡‚»¡œˆÁš˜Æ”––É”ŸËŒ’¨ÌŠªÉŠŽ¬ÆŠŽ¬ÆŠŽ¬ÆŠŽ¬ÆŠŽ¬ÆŠŽ¬ÆŠŽ¬ÆŠŽ¬ÆŠŽ¬ÆŠŽ¬ÆŠŽ¬ÆŠŽ¬ÆÿŸ6ÿœC.ÿŸF>ÿ¥EJÿ«EUü°Faö¶Ikð¼NtçÂU{ßÈa€ÑÃjĺp¸²u©­«{³£¥€»›¡†Á”ÅŽ›”ÈŠ™Ê†™¨Ë†”ªÉ†’«Æ†’«Æ†’«Æ†’«Æ†’«Æ†’«Æ†’«Æ†’«Æ†’«Æ†’«Æ†’«Æ†’«ÆÿŸ5ÿB.ÿ E=ÿ§DIÿ­CTþ³D_÷ºGhïÁMpåÉVuÜÎdzÌÆi¾¾nœ²¶t¨§°y²ž«~º•¦„ÀŽ£‹Äˆ¡’Ç„ŸšÉ€Ÿ§ÊšªÈ‚˜«Æ‚˜«Æ‚˜«Æ‚˜«Æ‚˜«Æ‚˜«Æ‚˜«Æ‚˜«Æ‚˜«Æ‚˜«Æ‚˜«Æ‚˜«Æÿ 5ÿB.ÿ¡D=ÿ¨BHÿ¯ASÿ¶B]÷¾FeìÇMkãÒXmÖÓazÇÊgŒ¹Âm›¬¼r§¡¶w±˜±}¹­‚¾ˆª‰Ã‚¨Æ}§™Èz§¥É{¢«È}ž¬Æ}ž¬Æ}ž¬Æ}ž¬Æ}ž¬Æ}ž¬Æ}ž¬Æ}ž¬Æ}ž¬Æ}ž¬Æ}ž¬Æ}ž¬Æÿ 5ÿB.ÿ¢B<ÿª@Gÿ²>Qýº@YóÃD`èÏNcßÜYgÏØ`yÀÏfвÈkš¦Âp¦›¼v¯‘¸{·‰µ¼‚²‡À}°ŽÃx®–Åv­¡Æu¬¬Æw¦­Åw¦­Åw¦­Åw¦­Åw¦­Åw¦­Åw¦­Åw¦­Åw¦­Åw¦­Åw¦­Åw¦­Åÿ 4ÿžA.ÿ¤@;ÿ¬=Eÿµ;N÷¿>UìËDYáÚOZÔßQlÆÚZ}¸Ób‹«Îi˜ŸÆq¤•Àw­Ž»~´‡·ƒ¹´‡½|²Œ¿y±“Áv°›Ât°¦Âr°­Âr°­Âr°­Âr°­Âr°­Âr°­Âr°­Âr°­Âr°­Âr°­Âr°­Âr°­Âÿ¡3ÿžA/ÿ§=:ÿ°:Cýº8JðÆ;OãÕENÕáF_ÈâKqºÝR¬Õ[ŸÌf›–Æp¤Àx«Š¼±„¹ƒµ€·‡¸|¶‹»y´¼w´—½v´¡½t³¥¾t³¥¾t³¥¾t³¥¾t³¥¾t³¥¾t³¥¾t³¥¾t³¥¾t³¥¾t³¥¾t³¥¾ÿ¢3ÿ >.ÿª97ÿ´5?öÀ5DçÏ9E×ßÿ«BHÿ±DRú·HZð½NaæÄVgÞÉbmÎÁgÁ¹m޶±r›«ªx¦¢¥~®™ „µ’‹ºŒš“¾‡˜›À„—¤Â‚–¯Âƒ“°À„‘²¾„‘²¾„‘²¾„‘²¾„‘²¾„‘²¾„‘²¾„‘²¾„‘²¾„‘²¾„‘²¾ÿ›3ÿšA&ÿŸB3ÿ¦@=ÿ­@Gÿ´BO÷»GWíÃM]äÌX`ÙÍ`lÉÅf~¼½k°µqš¥¯v¥œª|­“¦‚´Œ¢‰¹† ½ž™¿}ž¢Á{ž¯Á}™°À–²¾–²¾–²¾–²¾–²¾–²¾–²¾–²¾–²¾–²¾–²¾ÿœ3ÿšA&ÿ A2ÿ¨?<ÿ°>Eÿ·AMôÀESêÉNVâÕZWÒÑ^kÄÉd}¶ÁjŒª»o™Ÿµt¤–°z¬¬€²†©‡·§Ž»z¦–¾w¥ ¿t¦­¿w¡±¿z²¾z²¾z²¾z²¾z²¾z²¾z²¾z²¾z²¾z²¾z²¾ÿ3ÿ›A&ÿ¢?1ÿª<:ÿ³IðÆDMæÒOMÜÜWVÌÕ]j¾Íc{°Çh‹¤Ám—™¼s¢¸xª†´~°²…µy°Œ¸t¯•»q®Ÿ¼n¯«½qª³¼t¥³¼t¥³¼t¥³¼t¥³¼t¥³¼t¥³¼t¥³¼t¥³¼t¥³¼t¥³¼t¥³¼ÿ3ÿ›@&ÿ¤<0ÿ­98ÿ¶9?õÁ%ÿ§9.ÿ±65û¼6:íÉ:<àÚD:ÒâGLÇâM^¹ÞTn¬Ù[|ŸÔbˆ”Ðh“ŠÌo›‚Çw¢|Ã~¨vÀ„¬r¾Š¯o¼‘±m¼˜²k»¡³j»­²gº¶´gº¶´gº¶´gº¶´gº¶´gº¶´gº¶´gº¶´gº¶´gº¶´gº¶´ÿŸ2ÿ :$ÿª4,ÿµ21óÃ23ãÔ80ÓáW¬éEgžçKu’àS€‰Ù^‰‚Ôh‘|Ðq–xÌw›tÊ}žpÈ‚¡nLJ£kÅ‹¥iĦhÄ–§fÞ¨eÃ¥¨eÃ¥¨eÃ¥¨eÃ¥¨eÃ¥¨eÃ¥¨eÃ¥¨eÃ¥¨eÃ¥¨eÃ¥¨eÃ¥¨ÿ¡/ÿ¨/ÿµ*"ðÆ$!ØÝ# Èé-5ºò5I¬ñžÿ4N’ú?\ˆòJfìUoyè^uräd{nák~jßphÞu„eÜy…cÛ}‡bÚˆ`Ú„‰_Ù‡Š]Ø‹‹\׌[Ö”[Ö”[Ö”[Ö”[Ö”[Ö”[Ö”[Ö”[Ö”[Ö”[Ö”ÿ° íÆÍÛ »ó¬ÿ!.žÿ,?’ÿ7M‡ýDXöOaxñYhqí_mjëdqgèjtdçowbåty`äxz_ã{{]ã~|\â}[á„~ZáˆYàŒ€XàXàXàXàXàXàXàXàXàXàXàó½ ÌÏ ½å ¬ÿžÿ$/’ÿ/=‡ÿ=IÿIRxüTZpøZ_iô_ddòegaðji^ïnk\îrm[ívnZìyoXì|pWë~pVëqUê„rTêˆsSé‹tSé‹tSé‹tSé‹tSé‹tSé‹tSé‹tSé‹tSé‹tSé‹tSé‹tÌÆ½Ô­õŸÿ“ÿ'-ˆÿ49~ÿBCwÿMJnÿSPgÿYUbü^X^ûd[[ùh]Yøl^W÷p`V÷saUövbTõxbSõ{cRô}dQô€dPóƒeOó†fOó†fOó†fOó†fOó†fOó†fOó†fOó†fOó†fOó†fOó†f½Ë®ÛŸÿ“ÿˆÿ*(~ÿ82vÿD:mÿKAeÿQF_ÿWI[ÿ]LXÿbNUÿfPSÿjQRÿmRPÿpSOÿrTNÿuTMÿwUMÿyULþ{VKþ~WJýWJýWJýWJýWJýWJýWJýWJýWJýWJýWJýWÿ-ÿŒ>ÿŠL.ÿ’S;ÿ”WHÿ•\Tý“b`õ‘jkïrvé‰|ä…„†à€‹Ü|‘’Úy—–Øvœ™Õs ›Ôq¥Óo©ŸÒn® Òm³¡Ñl¹¢ÑkÀ£ÍlÅ£ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÿ-ÿŒ>ÿŠL.ÿ’S;ÿ”WHÿ•\Tý“b`õ‘jkïrvé‰|ä…„†à€‹Ü|‘’Úy—–Øvœ™Õs ›Ôq¥Óo©ŸÒn® Òm³¡Ñl¹¢ÑkÀ£ÍlÅ£ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÿ-ÿŒ>ÿŠL.ÿ’S;ÿ”WHÿ•\Tý“b`õ‘jkïrvé‰|ä…„†à€‹Ü|‘’Úy—–Øvœ™Õs ›Ôq¥Óo©ŸÒn® Òm³¡Ñl¹¢ÑkÀ£ÍlÅ£ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÿ-ÿŒ>ÿŠL.ÿ’S;ÿ”WHÿ•\Tý“b`õ‘jkïrvé‰|ä…„†à€‹Ü|‘’Úy—–Øvœ™Õs ›Ôq¥Óo©ŸÒn® Òm³¡Ñl¹¢ÑkÀ£ÍlÅ£ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÿ-ÿŒ>ÿŠL.ÿ’S;ÿ”WHÿ•\Tý“b`õ‘jkïrvé‰|ä…„†à€‹Ü|‘’Úy—–Øvœ™Õs ›Ôq¥Óo©ŸÒn® Òm³¡Ñl¹¢ÑkÀ£ÍlÅ£ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÈnÆ¢ÿ-ÿ>ÿŒL.ÿ”S;ÿ•VGÿ–[Tý•a`ö’hkïpué‹z䇃‡ß‚ŠÜ~’Ùz–—Öw›šÕt Ór¥ŸÒp©¡Ñn®¢Ðm´£Ðlº¤Ðl¤ÊnĤÄoĤÄoĤÄoĤÄoĤÄoĤÄoĤÄoĤÄoĤÄoĤÄoĤÿŽ-ÿŽ>ÿŽK.ÿ•Q:ÿ˜TGÿ˜XSþ˜^_ö•djï’luéŽv~䊀‡ß…‡ŽÛ€Ž”Ø|”˜ÕyšœÓvŸŸÑs¤¢Ðqª¤Ïo¯¥În¶¦Îm½§Ên§Ãp§½q§½q§½q§½q§½q§½q§½q§½q§½q§½q§ÿ-ÿŽ>ÿJ-ÿ—O:ÿ™QFÿ›VRþš[^÷˜aið•htê‘q~äŽ|†ß‰„ŽÛƒ‹”×’šÔ{˜žÒwž¡Ðt¤¤Îrª¦Íp±¨Ío¹©ËoÁ©ÃqÁ©¼rÀª·sÀª·sÀª·sÀª·sÀª·sÀª·sÀª·sÀª·sÀª·sÀª·sÀªÿ-ÿ>ÿ’J-ÿ˜M9ÿ›OEÿSQÿX\ø›^hñ™erê•m|ä‘w†ßŒŽÛ‡‰•ÖšÓ}–ŸÐy£Îu£¦Ír«©Ìp³ªËo½«År¿«½s¿¬¶t¾¬±u¾­±u¾­±u¾­±u¾­±u¾­±u¾­±u¾­±u¾­±u¾­±u¾­ÿ-ÿ>ÿ“I-ÿ™L9ÿNDÿŸQPÿŸV[ùž\fòœbqë˜i{å”s„à}ÛŠ†”Ö„›Ò• Ïzœ¥Ív£¨Ës««Êqµ­Æq¾­¾t½®¶u½®°v½®¬w½®¬w½®¬w½®¬w½®¬w½®¬w½®¬w½®¬w½®¬w½®¬w½®ÿ-ÿ>ÿ•I,ÿ›J8ÿžLCÿ¡OOÿ¢TZú¡Yeó _oìfyæ˜oƒà“yŒÛŽ‚“Ö‡Š›Ò’¡Ï|š¦Êx¢ªÇu«­Ãs´¯¿s¼°·u¼°°w»°ªx»°§y¼°§y¼°§y¼°§y¼°§y¼°§y¼°§y¼°§y¼°§y¼°§y¼°ÿ‘-ÿ‘>ÿ–H,ÿœH7ÿ JBÿ£MMÿ¤RXû¥Wcô¤]mî¡cwèžk€â˜u‰Ü’~’ÓŒ‡šÌ†¡Æ€—§Á|ž¬½y¦¯¹v¯±·vº²¯wº²ªyº²¥zº²¢{»±¢{»±¢{»±¢{»±¢{»±¢{»±¢{»±¢{»±¢{»±¢{»±ÿ‘-ÿ‘>ÿ˜G,ÿG7ÿ¡HAÿ¥KLÿ§PVü¨Uaõ¨[kí§atå¤i~ÞŸs‡Ô˜}Ë‘„šÄŠŒ¢¾„“¨¸€š­´|¢°°z«³­yµ´¨z¹´¤{¹´ }¹³}º³}º³}º³}º³}º³}º³}º³}º³}º³}º³ÿ’-ÿ’>ÿ˜F+ÿžF6ÿ£GAÿ§IKÿªNUú«S^ò¬Yhé¬`qâ©hzÙ¥sƒÍœzÅ•š½Žˆ¢·ˆ©±„—®¬€Ÿ±¨~§´¥}±µ¡}¸¶~¸µš¹´™€º³™€º³™€º³™€º³™€º³™€º³™€º³™€º³™€º³™€º³ÿ’-ÿ’>ÿ™E+ÿŸD5ÿ¤E@ÿ©HIÿ¬LSø®R\ï°Xeæ±_mÞ°ivÒ©q‚È x¿˜~š·’…¢°ŒŒ©ªˆ”®¤…œ² ‚¤µ®¶š€··—·¶•‚¹´”‚¹³”‚¹³”‚¹³”‚¹³”‚¹³”‚¹³”‚¹³”‚¹³”‚¹³”‚¹³ÿ“-ÿ’=ÿšD*ÿ C5ÿ¦D>ÿ«FHÿ®KQõ²PYìµWaä·^iÚ´isͬo‚¤v¹œ|™±–ƒ¢ª‘Š©£Œ‘®ž‰™²™‡¡µ–…«·“…¶·‘„··…¸µ…¹´…¹´…¹´…¹´…¹´…¹´…¹´…¹´…¹´…¹´ÿ“-ÿ“=ÿ›C*ÿ¢B4ÿ¨B=ÿ­EFü±JOòµOVéºV]á½`dÔ¸grȯm½§tŽ´ z™«š€¢¤•‡©‘Ž®—Ž–²’‹ŸµŠ¨·ŒŠ³¸‹‰··‹ˆ¸µ‹ˆ¹´‹ˆ¹´‹ˆ¹´‹ˆ¹´‹ˆ¹´‹ˆ¹´‹ˆ¹´‹ˆ¹´‹ˆ¹´‹ˆ¹´ÿ“-ÿ“=ÿœA*ÿ£@3ÿ©A<ÿ¯DEú´HLðºNSç¿VYÞÂ``Ï»fqól¸«rŽ®¤x˜¥ž~¡žš„¨—–Œ®‘“”²Œ‘œµˆ¦·…±¸…޶·†¸¶‡Œ¸µ‡Œ¸µ‡Œ¸µ‡Œ¸µ‡Œ¸µ‡Œ¸µ‡Œ¸µ‡Œ¸µ‡Œ¸µ‡Œ¸µÿ”,ÿ”=ÿ@)ÿ¤>2ÿ«?;ÿ±BBø¸GIí¾NOåÆWSÚÆ^_˾dq¾¶j€³¯p©©v˜ £|¡˜Ÿ‚¨‘›‰­Š™’²…–𵕤·•®·~”··‘·¶‚¸µ‚¸µ‚¸µ‚¸µ‚¸µ‚¸µ‚¸µ‚¸µ‚¸µ‚¸µÿ”,ÿ”=ÿž?(ÿ¦=1ÿ­>9ÿ´A@ô¼FEëÄMIâÎXKÓÊ\^ÆÂcp¹ºh®´nŒ£®t—š©zŸ’¥€§Š¡‡¬„Ÿ±—´{œ¡¶x›¬·w›·¶z—¸µ|•¹´|•¹´|•¹´|•¹´|•¹´|•¹´|•¹´|•¹´|•¹´|•¹´ÿ•,ÿ•=ÿ ='ÿ¨;0ÿ°<7ý¸?<ñÁD@èËNBÞÓUJÎÍ[]ÀÆan´¿g~¨¹mŠ´r•”¯xž‹«~¥„¨…ª}¦Œ¯x¤•²t£Ÿ´q£ªµp£¸µsž¹´v›¹³v›¹³v›¹³v›¹³v›¹³v›¹³v›¹³v›¹³v›¹³v›¹³ÿ–,ÿ—<ÿ¢:&ÿª9.ÿ³:4ù½<8îÈC9ãÕP7×ÚRHÈÒY\ºË_m­Åe|¡Àk‰—ºp“¶vœ„³|¢}°ƒ¨w®Š¬r­“¯n¬±k¬¨²i­¶²l¨»±o£»±o£»±o£»±o£»±o£»±o£»±o£»±o£»±o£»±o£»±ÿ—,ÿš;ÿ¤7%ÿ­6+ÿ·70óÃ:1æÐC0ÜßJ5ÏßRGÁØXZ³Ñ^k¦ËczšÇi†Ân†¿t˜}¼zŸvº¤p¸‰¨k·’«h·œ­e·§®d·´®e³½®h­½®h­½®h­½®h­½®h­½®h­½®h­½®h­½®h­½®h­½®ÿ˜,ÿ9ÿ§4#ÿ±3(ù½2*êË7)ÜÝ>)ÐãF:ÅâMK¸ÞUZ¬Ù\hžÓbw’Ïg‚ˆËmŒ~És”vÇyšpÅŸjĉ¢fÃ’¥bܧ`æ¨_ô¨_Á¨aºÁ©aºÁ©aºÁ©aºÁ©aºÁ©aºÁ©aºÁ©aºÁ©aºÁ©aºÁ©ÿ™,ÿ 5ÿª1 ÿ¶.#ðÅ-"ߨ3Ðã:.ÄèB@¸åIP«áN_žÞUl’Û\w‡Øc~Õj‰vÔqoÑy”k΀˜g̈›dÊbɘŸ`É¡ _É« _ɹŸ\Èâ\Èâ\Èâ\Èâ\Èâ\Èâ\Èâ\Èâ\Èâ\Èâÿ›,ÿ¤0ÿ¯,ø¾'äÑ&Ñâ- Äë73·ë>EªéETžçLb’åRn†ãXx}à`vÜi†pØq‹kÕxhÓ’eц”bÏ–`Δ˜^Λ™]Í£š\Í­š[Í·š[Í·š[Í·š[Í·š[Í·š[Í·š[Í·š[Í·š[Í·š[Í·šÿ,ÿ¨+ÿ·$ëÊÓàÄë+&·ñ48ªðÿ>K†þGV}øQ^vóYenð_jhíendêkraéqt_çvv]æ{x[åyYä„zXãˆ|WãŒ}Vâ‘~Tá—SáœSáœSáœSáœSáœSáœSáœSáœSáœSáœÿ±ÔÇ ÆÖ ¶÷¨ÿ ›ÿ+0ÿ6=…ÿ@H}ÿKQuýTXmùZ]gö`bcófe_òkg\ðpiZïtkXîxlWí|nUì€oTì„pSëˆqRëŒqQê‘rPé•sPé•sPé•sPé•sPé•sPé•sPé•sPé•sPé•sPé•sÖ¾ÅË·Û ¨ÿ›ÿ"!ÿ..…ÿ9:|ÿDCtÿNJlÿTPeÿZT`ý_X]ûeZZúj\Wùn^Uør_T÷v`RöyaQö}bPõ€cOô„dNô‡dMóŒeLófLófLófLófLófLófLófLófLófLófÄÂ¶Ñ¨í ›ÿÿ%…ÿ1*|ÿ<4sÿF;jÿLAcÿSF^ÿYIZÿ^LVÿcNTÿhPRÿlQPÿoROÿrSNÿvTLÿyUKÿ|UJþVIþ‚WHý†XGýŠXGýŠXGýŠXGýŠXGýŠXGýŠXGýŠXGýŠXGýŠXGýŠX¶É¨Ù›ÿÿ…ÿ'{ÿ3$qÿ<,hÿC2aÿJ7[ÿP;VÿV=Sÿ\@Pÿ`ANÿdCLÿhDJÿkEIÿnFHÿqFGÿtGFÿvHEÿyHDÿ|ICÿ€IBÿƒJBÿƒJBÿƒJBÿƒJBÿƒJBÿƒJBÿƒJBÿƒJBÿƒJBÿƒJÿ‚( ÿ‚9ÿH%ÿŠO1ÿŽV=ÿ\IÿŽcTþŠj^ø…qhò€zpî|ƒwêx‹}çt’‚äq˜…âoˆám¢‹àk§ßi¬ŽÞh±Ýg·‘Ýf½‘ÜeÅ’ÜeÍ’ÔfÑ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÿ‚( ÿ‚9ÿH%ÿŠO1ÿŽV=ÿ\IÿŽcTþŠj^ø…qhò€zpî|ƒwêx‹}çt’‚äq˜…âoˆám¢‹àk§ßi¬ŽÞh±Ýg·‘Ýf½‘ÜeÅ’ÜeÍ’ÔfÑ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÿ‚( ÿ‚9ÿH%ÿŠO1ÿŽV=ÿ\IÿŽcTþŠj^ø…qhò€zpî|ƒwêx‹}çt’‚äq˜…âoˆám¢‹àk§ßi¬ŽÞh±Ýg·‘Ýf½‘ÜeÅ’ÜeÍ’ÔfÑ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÿ‚( ÿ‚9ÿH%ÿŠO1ÿŽV=ÿ\IÿŽcTþŠj^ø…qhò€zpî|ƒwêx‹}çt’‚äq˜…âoˆám¢‹àk§ßi¬ŽÞh±Ýg·‘Ýf½‘ÜeÅ’ÜeÍ’ÔfÑ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÏhÒ’ÿ‚( ÿƒ9ÿƒG%ÿŒN1ÿU=ÿ‘[HÿaSþh^øˆohòƒxpí~‚xézŠ~æv‘ƒäs—‡âpŠàn¢Œßk§ŽÝj¬Ýh²‘Üg¸“Ûf¿“ÛfÇ”ÙfДÏhГËiДËiДËiДËiДËiДËiДËiДËiДËiДÿƒ( ÿƒ9ÿ†F$ÿŽM0ÿ“T<ÿ”XGÿ’^Sÿe]øŒmgò†upíxé}‡~åy„âu•ˆàr›ŒÞo¡Ýl§‘Ük¬“Ûi³”Úhº–ÙgÖÙfÍ—ÐiΖÈjΗÄkÍ—ÄkÍ—ÄkÍ—ÄkÍ—ÄkÍ—ÄkÍ—ÄkÍ—ÄkÍ—ÄkÍ—ÿ„( ÿ„9ÿˆE$ÿ‘L0ÿ•Q;ÿ–VGÿ•\Rÿ“b\ùjfóŠrpí…{x逄å{Œ…âw“ŠßsšŽÝp ‘Ûm¦”Úk­–Ùi´—Øh½˜ØgÈ™ÑiÌ™ÉkÌ™ÂlÌš½mËš½mËš½mËš½mËš½mËš½mËš½mËš½mËš½mËšÿ…( ÿ…9ÿŠD$ÿ“K/ÿ—O:ÿ˜TFÿ—YPÿ–`[ù’geóŽooî‰xwéƒä~Š…áy‘‹Þu˜ÜqŸ“Ún¦–Øl®˜×j¶šÖhÁ›ÓiË›ÊkË›ÂmÊœ»nʸoʸoʸoʸoʸoʸoʸoʸoʸoÊÿ…( ÿ†9ÿŒD#ÿ•J/ÿ™M:ÿšQDÿšVOÿ™]Zú–ddô’knîtvé‡~~䇅à|‹Ýw—Ûsž•Øo¦˜Öl¯šÕj¹œÔiÆËlÉÃmÉž¼oÈŸµpÈŸ²qÈŸ²qÈŸ²qÈŸ²qÈŸ²qÈŸ²qÈŸ²qÈŸ²qÈŸ²qÈŸÿ†' ÿ†9ÿŽC#ÿ—I.ÿšK9ÿœOCÿTNÿœZXûš`bõ–hlï‘ouê‹y~å…ƒ…àŒŒÝy•‘Ùt–Ôp¥šÐn®Íl·ŸËkàÃnÇ »oÇ¡µqÆ¡¯rÆ¡¬sÆ¡¬sÆ¡¬sÆ¡¬sÆ¡¬sÆ¡¬sÆ¡¬sÆ¡¬sÆ¡¬sÆ¡ÿ‡' ÿ‡9ÿB#ÿ˜G-ÿœI8ÿŸLBÿ QLÿ WVûž^`ô›ejí–lsçv|ኀ„Û„‰‹Ó~‘’Îx™˜Ét¡œÆq©ŸÂp²¢Ào½£ºpÅ£³rŤ®sŤ©tÅ£¦uÅ£¦uÅ£¦uÅ£¦uÅ£¦uÅ£¦uÅ£¦uÅ£¦uÅ£¦uÅ£ÿ‡' ÿˆ8ÿ‘A"ÿšE,ÿžG6ÿ¡J@ÿ£PJþ£UTö¢\]ï bgèœipá–tyÚ}‚щ†‹Ê‚“Å}•™Àyž¼v¥¡¸s­¤µr¸¥²ræ¬tæ§væ£wÄ¥¡xÄ¥¡xÄ¥¡xÄ¥¡xÄ¥¡xÄ¥¡xÄ¥¡xÄ¥¡xÄ¥¡xÄ¥ÿˆ' ÿˆ8ÿ“A"ÿ›D,ÿ E5ÿ£I?ÿ¥NHû§TQó¦Z[ë¥`dã¢hmÜsvÑ•z‚É‚‹Â‡Š“¼‚‘š·}™Ÿ²z¡£¯w©¦«v³§©vÀ¨¤w¨¡y§zç›zæ›zæ›zæ›zæ›zæ›zæ›zæ›zæ›zæÿˆ' ÿ‰8ÿ•@!ÿB+ÿ¢D4ÿ¥H=ÿ¨LFøªROï«XWç«_`à¨iiÔ¡puË™xÂ’‹»‹†”µ†Žš¯‚• ª~¤¦{¦§£z°© y¼ªzÁ©š|Á©˜}¨–}§–}§–}§–}§–}§–}§–}§–}§–}§ÿ‰' ÿ‰8ÿ–?!ÿžA*ÿ£B3ÿ§F;þ«KDõ®QLì°WTä±^\Û­hfÏ¥nuÅu¼–|‹µƒ”®Š‹›¨†’ £‚š¥ž€¢¨›~¬ª˜~¸«–~À«”Àª“€Á¨’€Â¨’€Â¨’€Â¨’€Â¨’€Â¨’€Â¨’€Â¨’€Â¨’€Â¨ÿ‰' ÿŠ8ÿ˜? ÿŸ?)ÿ¥A2ÿªE:ü®IAò±OIéµVPá·_WÕ±eeʨltÀ¡s€·šz‹¯””¨ˆ›¢Š œ‡—¥—„ ¨”‚©ª‘‚µ«‚¿«ŽƒÀªƒÁ©ƒÁ¨ƒÁ¨ƒÁ¨ƒÁ¨ƒÁ¨ƒÁ¨ƒÁ¨ƒÁ¨ƒÁ¨ÿŠ' ÿ‹8ÿ™> ÿ¡>(ÿ¦@0ÿ¬C8ù±H?ðµNEçºUKÞ»^TдdeŬks»¤q€±žxŠ©˜~“¢“…š› –Œ•¥‘‰¨‡§«Š‡²¬ˆ‡¿¬ˆ‡À«ˆ†À©ˆ†Á¨ˆ†Á¨ˆ†Á¨ˆ†Á¨ˆ†Á¨ˆ†Á¨ˆ†Á¨ˆ†Á¨ˆ†Á¨ÿŠ' ÿŒ7ÿ›=ÿ¢='ÿ¨?/ÿ®B6÷´G<íºMAäÀVFÙ¿\SË·cdÀ¯is¶¨o¬¢uФœ|“œ˜ƒš•”Š ‘’¥ŠŽ›¨†¤«ƒŒ¯¬½¬‚Œ¿«ƒŠÀ©ƒŠÁ©ƒŠÁ©ƒŠÁ©ƒŠÁ©ƒŠÁ©ƒŠÁ©ƒŠÁ©ƒŠÁ©ƒŠÁ©ÿ‹' ÿŽ7ÿœ<ÿ£;&ÿª=-ÿ±@3ô¸E8ê¿L<âÇU@ÓÂZRǺac»³gr°­m~§§s‰ž¡z’–€™šˆŸ‰—¤„”˜¨“¢ª|’­«z’º¬{‘À«}Á©~ŽÁ¨~ŽÁ¨~ŽÁ¨~ŽÁ¨~ŽÁ¨~ŽÁ¨~ŽÁ¨~ŽÁ¨~ŽÁ¨ÿŒ' ÿ6ÿ:ÿ¥:%ÿ­;+ü´>0ñ¼C4çÅL6ÞËR?ÎÆYQ¾`b¶¸fp«±l}¡¬rˆ˜§x‘£~˜‰ …ž‚£}›–§x™Ÿ©u˜ªªs™·«t˜Àªw”Á©x“¨x“¨x“¨x“¨x“¨x“¨x“¨x“¨x“¨ÿŒ' ÿ‘5ÿŸ8ÿ§8#ÿ¯9(ù¸<,îÂB.åÍL-ØÐO=ÉÉWP¼Ã^`°¼do¥·j|›²p†’­vŠ©|–‚¦ƒœ|¤‹¡v¢“¥r¡§o ¨©m µ©m Á¨p›Â§r™Â§r™Â§r™Â§r™Â§r™Â§r™Â§r™Â§r™Â§r™Â§ÿ& ÿ”4ÿ¡6ÿª6!ÿ³6%õ¾9'êÉ@&àÖI(ÑÕN<ÃÎVN¶È\_ªÂcmŸ½hz”¸n„‹´tƒ±z”|®šu¬ˆžp«‘¢k©›¤h©¦¦f©³¦fªÃ¥i¤Ä¥k¡Ä¥k¡Ä¥k¡Ä¥k¡Ä¥k¡Ä¥k¡Ä¥k¡Ä¥k¡Ä¥k¡Ä¥ÿŽ& ÿ—3ÿ£4ÿ­3þ¸2 ðÅ5 ãÓ?ØÞE&ÊÛM:½ÓTL°Î[]£Éak˜ÄgwÀl„½r‰|ºxu¸–o¶‡šjµe´š b³¥¡a´±¢`µÂ¡b¯Æ¢d«Æ¢d«Æ¢d«Æ¢d«Æ¢d«Æ¢d«Æ¢d«Æ¢d«Æ¢d«Æ¢ÿ& ÿ›1ÿ¦1ÿ±.÷¾-çÎ1ÙÞ9ÍãD(ÂàM8µÛSJ¨ÕYZœÐ_hÌes†Ék}}Æq…uÄw‹nÃ~iÁ†”dÀ—`Àšš]À¥›[À±›ZÁÁ›[¼Êœ]·Ê]·Ê]·Ê]·Ê]·Ê]·Ê]·Ê]·Ê]·Êÿ‘& ÿŸ/ÿª-ÿ·(íÈ&ÚÜ)Ìä6Áæ@.¶ãH>ªàNLžÝVY’Ú]eˆÖco~ÔjxvÒpnÐw…hωc·_Î[Íš’YÍ¥“Wβ“VÏ“VËДWÅÏ•WÅÏ•WÅÏ•WÅÏ•WÅÏ•WÅÏ•WÅÏ•WÅÏ•WÅÏ•ÿ“& ÿ£,ÿ°&õÀ ßÕÍä'Áë4#µê=3©çEBåKP‘ãR\†âXf|à_ntßfulÞmzfÞuaÝ}‚]܆…ZÛˆXÙ˜ŠVØ¡‹Tج‹TØ·ŒSØÉ‹SÖÖ‹SÖÖ‹SÖÖ‹SÖÖ‹SÖÖ‹SÖÖ‹SÖÖ‹SÖÖ‹SÖÖ‹ÿ—$ ÿ©& þ¸ æÎÎãÀî&´ð2(¨î;8œíCF‘ìKR†ìR\|ëYdsë^kjêdpeèluaætx^ä|{[âƒ}Yà‹Vß’UÞšƒSÞ¢ƒRݪ„Qݶ„QÝ¿„QÝ¿„QÝ¿„QÝ¿„QÝ¿„QÝ¿„QÝ¿„QÝ¿„QÝ¿„ÿŸ!ÿ°éÅ ÐÙ Àî ³ö&§õ1,›õ;:õDG…õLQ|õSZsõY`kó_feðfjaímm]ëtpZêzsXètVç‡vTæxSå”yQä›zPä¡{Oãª|Nã°|Nã°|Nã°|Nã°|Nã°|Nã°|Nã°|Nã°|Nã°|ÿ¨ë¼ ÍÌ Áà ²ú¥ü' šý2.ý=;…þEE{ÿMNrÿTUkûZZdø`_`ögb\ômeYòrgWñxiUð~jSïƒlQî‰mPínNì”oMëšpLë¡qKê¦rKê¦rKê¦rKê¦rKê¦rKê¦rKê¦rKê¦rKê¦r÷³ Ìÿѱï¤ÿ™ÿ)!Žÿ4.„ÿ?9{ÿGAqÿNHjÿTNcÿZR^þ`VZüfXWûlZUúq\Sùv^Qøz_O÷`Nö„aLõ‰bKõŽcJô”dIóšeHóžfHóžfHóžfHóžfHóžfHóžfHóžfHóžfHóžfÍ»½Ç±Ø£ÿ˜ÿÿ, ƒÿ7+zÿA4pÿG;hÿMAaÿTE\ÿZIXÿ_KUÿeMRÿjOPÿnQNÿrRLÿwSKÿ{TIÿUHþ„VGþˆWFýWDý“XDü–YDü–YDü–YDü–YDü–YDü–YDü–YDü–YDü–Y½¿°Î¢à—ÿŒÿ"ƒÿ.yÿ8%nÿ>-fÿE2_ÿL7YÿR;UÿX>Qÿ]@OÿbBLÿfCJÿjDIÿnEGÿrFFÿvGEÿzHCÿ~HBÿ‚IAÿ†J@ÿ‹K?ÿK?ÿK?ÿK?ÿK?ÿK?ÿK?ÿK?ÿK?ÿK¯Æ¢Ö–÷ ‹ÿ‚ÿ$wÿ-lÿ3cÿ:$\ÿB(VÿI,QÿO/NÿU1KÿZ3Hÿ^5Fÿb6Dÿf7Cÿi8Aÿl8@ÿp9?ÿs:>ÿw:=ÿ{;<ÿ~<:ÿƒ<:ÿ†=:ÿ†=:ÿ†=:ÿ†=:ÿ†=:ÿ†=:ÿ†=:ÿ†=:ÿ†=ÿu$ÿv5ÿwCÿ€J'ÿ…R3ÿ†Y>ÿ…`HÿhRÿ|oZüwyb÷sƒhôoŒnñl“rïjšuíg xìe¥zëdª|êb¯}éaµ~è`»è_Àç_Ëæ^Õà`Û×bÞÔcßÔcßÔcßÔcßÔcßÔcßÔcßÔcßÿu$ÿv5ÿwCÿ€J'ÿ…R3ÿ†Y>ÿ…`HÿhRÿ|oZüwyb÷sƒhôoŒnñl“rïjšuíg xìe¥zëdª|êb¯}éaµ~è`»è_Àç_Ëæ^Õà`Û×bÞÔcßÔcßÔcßÔcßÔcßÔcßÔcßÔcßÿu$ÿv5ÿwCÿ€J'ÿ…R3ÿ†Y>ÿ…`HÿhRÿ|oZüwyb÷sƒhôoŒnñl“rïjšuíg xìe¥zëdª|êb¯}éaµ~è`»è_Àç_Ëæ^Õà`Û×bÞÔcßÔcßÔcßÔcßÔcßÔcßÔcßÔcßÿv$ÿw5ÿyBÿ‚I'ÿ‡Q2ÿˆX=ÿ‡_HÿƒfQÿ~nZûywb÷u‚iôqŠnñm’sîk™vìhŸyëf¤{êdª}éc¯èbµ€ça¼ç`Ä‚æ_΂ã_׃ÜaÛƒÒc݃Ïd݃Ïd݃Ïd݃Ïd݃Ïd݃Ïd݃Ïd݃Ïd݃ÿw$ÿx5ÿ|Aÿ…H'ÿŠO2ÿŒV=ÿ‹]Gÿ‡dQÿ‚lZû|tb÷xiótˆoðptíl—xëjž{ég¤~èfª€çd°‚æb¶ƒåa¾„å`Ç…å`Ó…ÝbÙ…ÓdÜ…ÌeÛ†ÉeÛ†ÉeÛ†ÉeÛ†ÉeÛ†ÉeÛ†ÉeÛ†ÉeÛ†ÉeÛ†ÿx$ÿx5ÿ~@ÿˆG&ÿN1ÿU<ÿŽ[Fÿ‹bPÿ†iYü€qb÷{{ióv…pïrŽuìn•yêkœ}èi£€çf©‚åe°„äc·…äbÀ‡ãaˇßbÕ‡ÕdÚ‡ÍeÙˆÆgÙ‰Äg؉Äg؉Äg؉Äg؉Äg؉Äg؉Äg؉Äg؉ÿy#ÿy4ÿ€?ÿŠF&ÿM0ÿ’S;ÿ‘ZEÿ`OÿŠgYü„na÷~xiòy‚pït‹vëp“{ém›çj¢‚åg©„äe°†ãd¹ˆâbÉâbЊØdØŠÎfØŠÇg׋ÀhÖŒ¾iÖŒ¾iÖŒ¾iÖŒ¾iÖŒ¾iÖŒ¾iÖŒ¾iÖŒ¾iÖŒÿy#ÿz4ÿƒ>ÿE%ÿ“L/ÿ•Q:ÿ”WDÿ’]NÿŽeXüˆka÷‚tiò|pîwˆvës‘|èo™€æk¡„äh©‡âf±‰ád»‹àcÇŒÜcÔŒÏfÖŒÇhÕÀiÔŽºjÔŽ¸kÔŽ¸kÔŽ¸kÔŽ¸kÔŽ¸kÔŽ¸kÔŽ¸kÔŽ¸kÔŽÿz#ÿ{4ÿ…=ÿD$ÿ–J.ÿ—N8ÿ—TBÿ•ZLÿ’aVüŽi_ö‡phòzpí{…wêvŽ|æq—ãmŸ†àj¨‰Ýg°ŒÚf»ÖeÇŽÑfÔÇhÓ¿jÓ¹kÒ‘³lÒ‘²mÒ‘²mÒ‘²mÒ‘²mÒ‘²mÒ‘²mÒ‘²mÒ‘²mÒ‘ÿ{#ÿ|4ÿˆ<ÿ’C$ÿ˜H-ÿšL7ÿšRAÿ™XJü—_Tö“f]ðnfë‡woæ€vá{‹}Üu“ƒ×qœ‡Òn¤‹Ïk¬ŽÌiµ‘ÉhÀ’ÇhÏ“¿kÑ“¸lГ²mД­oГ«oÑ“«oÑ“«oÑ“«oÑ“«oÑ“«oÑ“«oÑ“«oÑ“ÿ|#ÿ}4ÿŠ;ÿ”A#ÿšF,ÿœK5ÿP?ÿVHø›]Qñ˜c[ë“kdäumÞ†~uØ€‡|ÑzƒÌv—‰ÇrŸÄo§‘Àm°“¾l»•»kÈ–¶mÏ–°oΖ«pÏ–¦qÏ•¥rÏ•¥rÏ•¥rÏ•¥rÏ•¥rÏ•¥rÏ•¥rÏ•¥rÏ•ÿ|#ÿ}4ÿŒ:ÿ—@"ÿœE+ÿŸI4ÿ N<û¡TEô ZNìaXå™iaÞ“sjÕŒ{tÎ…ƒ}È‹„Âz“оv›ºs£“¶q«–³o¶˜±o˜­p͘¨r͘¤s͘ tΗŸtΗŸtΗŸtΗŸtΗŸtΗŸtΗŸtΗŸtΗÿ}#ÿ3ÿŽ9ÿ™?!ÿžC)ÿ¡G2ÿ£L:ø¥RCð¤XKè£_TáŸh]טphΑxtÆŠ€}À„ˆ…º‹µ{—±wŸ”­u§—ªs±™§s½›¥sË› uËšvÌššwÍ™™w͘™w͘™w͘™w͘™w͘™w͘™w͘™w͘ÿ~"ÿ€2ÿ8ÿ›? ÿ B(ÿ¤F0þ¦K8ô¨P@ì©WGä©]PÜ¥fZÐnhÇ•us¿Ž}}¹‰„…³ƒŒŒ­“‘©|›•¤y¤™¡w­›žw¹œœwÈœ™xÊœ—yË›•zÌš”zÌ™”zÌ™”zÌ™”zÌ™”zÌ™”zÌ™”zÌ™”zÌ™ÿ~"ÿ‚2ÿ’7ÿœ=ÿ¡@'ÿ¦D.û©I5ñ¬O<é®UCá¯]KÕ¨dYË¡kg™ss¹“z}²…¬ˆ‰Œ¦„‘¡€˜–} š™|ªœ–{¶”{Äž’|Ê‘}Êœ}Ë›}Ìš}Ìš}Ìš}Ìš}Ìš}Ìš}Ìš}Ìšÿ"ÿ„1ÿ“6ÿž<ÿ£?%ÿ¨B,ø­G2ï°M9æ´T?ݳ[IЬbYƤjf¼qr´—w|¬‘~…¦Œ†Œ ˆ‘š…•––‚žš’€§²ž€ÁžŒ€Éž‹€ÊŠ€Ë›Š€Ë›Š€Ë›Š€Ë›Š€Ë›Š€Ë›Š€Ë›Š€Ë›Š€Ë›ÿ"ÿ…0ÿ•6ÿŸ;ÿ¥=$ÿ«A*õ°E/ìµL4ãºT9Ø·YH˯aXÁ¨hf·¡or¯›u|§•|„ ‘ƒ‹š‹‘”Š“–‡›š‹…¥ˆ„°Ÿ†„¾Ÿ……Éž…„É…„Êœ…„Ë›…„Ë›…„Ë›…„Ë›…„Ë›…„Ë›…„Ë›…„Ë›ÿ€"ÿ‡/ÿ—5ÿ :ÿ§<"þ­?'ó³D,éºK0á¿R5ÓºXGdz_W¼¬fe²¥mq©Ÿs{¡šz„š–‹”’ˆ‘Ž–‰Œ™š„ТЭŸŠ»Ÿ~ŠÈž‰É€ˆÊœ€ˆË›€ˆË›€ˆË›€ˆË›€ˆË›€ˆË›€ˆË›€ˆË›ÿ"ÿ‰.ÿ™5ÿ¢8ÿ©: û°=$ð¸B(æ¿J*ÝÃO4νVF¶^V·°ed­©kp¤¤qzœŸxƒ”›~ŠŽ—†ˆ•Ž•‚’–™~ œz«žx¸ŸwÉžyŽÊzŒË›{ŒË›{ŒË›{ŒË›{ŒË›{ŒË›{ŒË›{ŒË›{ŒË›ÿ"ÿ‹-ÿ›4ÿ¤7ÿ¬8ø´:!í½@#äÆI#×ÇL3ÉÁUE½º\U²´cc¨®ioŸ©oy–¥v‚Ž¡|‰‡ƒ›‹”|˜”˜w—›s–¨q–µžp–Ær”Êœt’Ë›u‘Ëšu‘Ëšu‘Ëšu‘Ëšu‘Ëšu‘Ëšu‘Ëšu‘Ëšÿ‚"ÿ, ÿ4ÿ¦4ÿ¯5ô¸7éÃ>àÍEÑËK2ÄÅTC¸¿[S­¹aa¢´hm™¯nw«t€ˆ§z‡¤{¢‰’u ‘–pž›™m¦›j³œižÃœkœË›n˜Ìšo—Ì™o—Ì™o—Ì™o—Ì™o—Ì™o—Ì™o—Ì™o—Ì™ÿƒ!ÿ+ ÿ 3ÿ©2ý³1ð¾4åË;ÚÔ?ËÏI0¾ÉRB²ÄYQ§¿`_œºfk’¶lu‰²r~¯x…z¬‹tª‡o¨“j§™–g¦¤˜d¦±™c§Á™d¥Í˜g Í˜hŸÍ—hŸÍ—hŸÍ—hŸÍ—hŸÍ—hŸÍ—hŸÍ—hŸÍ—ÿ„!ÿ“) ÿ¢0ÿ­.ø¸,ëÆ/àÕ8 ÒÚ=ÅÔH.¸ÏP@¬ÊXO Å^]•Ádh‹½jrƒºpz{·vtµ}‡n³…‹h²Žd±˜’a°£”^°°•]±¿•]±Ð”`ªÐ”a¨Ð”a¨Ð”a¨Ð”a¨Ð”a¨Ð”a¨Ð”a¨Ð”a¨Ð”ÿ†!ÿ—( ÿ¦, ÿ±(òÀ& ãÐ(Ôß2 Éß>½ÛG,±ÖO=¤ÑVL™Í\YŽÉbe„Æhn{ÄovtÁu|mÀ|‚h¾„†c½‰_¼—Œ[¼¢ŽY¼¯X½¾ŽW¾ÔŽY¶ÓZ´ÓZ´ÓZ´ÓZ´ÓZ´ÓZ´ÓZ´ÓZ´Óÿˆ!ÿœ'ÿª' ü¸! éÊÕÞ Éå0¾ã=´áF,¨ÞN:œÚUH‘Ö[U†Óa`|ÐgitÎnpmÍuvgË|{bË„~^Ê‚ZÊ—„WÊ£†Uʯ†T˾†SÌÕ†TÄÙˆUÁÙ‰UÁÙ‰UÁÙ‰UÁÙ‰UÁÙ‰UÁÙ‰UÁÙ‰UÁÙ‰ÿÿ¢%ÿ°òÂÙÛÉæ ½è/²ç:"§åC1›ãJ>áPJ†ßWT|Þ^]tÝedlÛljfÛtoaÚ|s\Ù„vYÙŽyUÙ˜{SÚ£|QÚ°}PÛ¾}PÜÓ|PÔà~QÐàQÐàQÐàQÐàQÐàQÐàQÐàQÐàÿ•ÿ©ûºÔÍ Éæ¼í °í.¥ì9'šëB5êIA…éPK{èWSrè]Zjçc`dçje_çri[çzlWç‚nSç‹qPç•rNèŸtLèªuKèµvJçÃvJèÝvKäàuKäàuKäàuKäàuKäàuKäàuKäàuKäàuÿÿ±Óà ÇÑ »ò¯ó!£ó.™ó9*ŽóB6„óJA{óRIróWPió\VcócZ]ói^YópaUówcRófOò‡gMðiKï˜kJï lIî©mHî³mGíÀnFíÇnFíÇnFíÇnFíÇnFíÇnFíÇnFíÇnFíÇnÿ§ÓºÅÇºÖ ­ú¢ú"—ú/û:+ƒüC5zýL>qýQEhýVKaþ[O\þbSWþhVTýoXQûuZNú|\Lùƒ]JøŠ_H÷‘`Gö™aFö bEõ§cDô±dCôµdCôµdCôµdCôµdCôµdCôµdCôµdCôµdÖ²ľ·Ì¬Ü  ÿ•ÿ%‹ÿ2‚ÿ<)yÿE2oÿJ9gÿO?_ÿUCZÿ[GUÿaJRÿgLOÿlNMÿrOKÿxQIÿ~RGÿ„SEÿ‹TCÿ‘UBþ˜VAýžW@ý¦X@ü©X@ü©X@ü©X@ü©X@ü©X@ü©X@ü©X@ü©XƸ¶ÄªÓžò ”ÿ Šÿ(ÿ4wÿ<%mÿB,eÿG2]ÿM6WÿS:SÿY=Oÿ_?LÿdAJÿiCHÿnDFÿsEDÿyFBÿ~GAÿ„H?ÿŠI>ÿJ=ÿ•K<ÿœL<ÿŸL<ÿŸL<ÿŸL<ÿŸL<ÿŸL<ÿŸL<ÿŸL<ÿŸL·¼©ËœÛ’ÿ‰ÿ€ÿ*uÿ1kÿ8bÿ>$[ÿD)TÿJ,PÿQ/LÿW2Iÿ\3Fÿ`5Dÿe6Bÿi7Aÿn8?ÿs9=ÿw:<ÿ|;;ÿ‚<9ÿ‡=8ÿŒ=7ÿ“>6ÿ•>6ÿ•>6ÿ•>6ÿ•>6ÿ•>6ÿ•>6ÿ•>6ÿ•>ªÄœÒç†ÿ|ÿqÿ$ hÿ+_ÿ2Wÿ9Qÿ?LÿF!HÿM#EÿR%BÿW'@ÿ[(>ÿ_)<ÿc*:ÿg+9ÿk,7ÿo,6ÿt-5ÿx.4ÿ}.2ÿ‚/1ÿˆ01ÿŠ01ÿŠ01ÿŠ01ÿŠ01ÿŠ01ÿŠ01ÿŠ01ÿŠ0ÿj$ÿi2 ÿl>ÿvFÿ{M)ÿ|U3ÿz]=ÿvfFÿqnMÿmyTÿj„Zþf_ûc•bùaœeø_¢h÷^¨jö\­kõ[³lôZ¹nóYÁnóXÉoòXÔpïXàpéYäpãZæpÜ]èpÜ]èpÜ]èpÜ]èpÜ]èpÜ]èpÜ]èpÜ]èpÿj$ÿi2 ÿl>ÿvFÿ{M)ÿ|U3ÿz]=ÿvfFÿqnMÿmyTÿj„Zþf_ûc•bùaœeø_¢h÷^¨jö\­kõ[³lôZ¹nóYÁnóXÉoòXÔpïXàpéYäpãZæpÜ]èpÜ]èpÜ]èpÜ]èpÜ]èpÜ]èpÜ]èpÜ]èpÿj#ÿi1 ÿn>ÿwEÿ|M(ÿ~T3ÿ|\<ÿydEÿsmNÿoxUÿk‚Zýh‹_ûe”cùb›f÷`¡iö^§kõ]­lô\³nóZºoòYÁpòYÊqñXØqìYáqæZäqà\çqØ]èqØ^èqØ^èqØ^èqØ^èqØ^èqØ^èqØ^èqÿk#ÿj1 ÿq<ÿzCÿ€K(ÿS2ÿ€Z<ÿ|bEÿwjNÿqtUÿn[ýj‰`úf’død™höa kõ_§mó^­oò\³pò[ºqñZÃrðYÍsîYÝsèZâtá\åsÙ^æsÐ_çtÐ_çtÐ_çtÐ_çtÐ_çtÐ_çtÐ_çtÐ_çtÿl#ÿk1 ÿs;ÿ}Bÿ‚J'ÿ„Q2ÿƒY;ÿ€`Eÿ{hMÿtqUÿp|[ül‡aùhf÷e˜iõcŸlóa¦oò_¬qñ]³rð\»tï[ÅuïZÐuêZßvâ\âvÛ_åuÑ`ævÊaåwÊaåwÊaåwÊaåwÊaåwÊaåwÊaåwÊaåwÿm"ÿl1 ÿv:ÿ€Aÿ…H'ÿˆO1ÿ‡W;ÿ„^DÿfMÿxnUÿsy\ün„bùjgög–kôdžnòb¥qñ`¬sï^´uî]¼vî[Çwí[Öxå\àxÜ_ãxÒ`äxËaäyÄcãzÄcãzÄcãzÄcãzÄcãzÄcãzÄcãzÄcãzÿn"ÿm1 ÿx8ÿƒ?ÿ‰G&ÿ‹N0ÿ‹U9ÿˆ\CÿƒcLÿ}kTÿvu\ür€bømŠgõi”lófœpñc¤sïa¬uî_´wí]¾yì\Ëzè\ÜzÞ_ázÒaã{Êbâ|Äcâ}¾eá}½eá}½eá}½eá}½eá}½eá}½eá}½eá}ÿn"ÿn0 ÿ{7ÿ†>ÿŒE%ÿL.ÿS8ÿZAÿˆaKÿƒiSú|q[÷v|bóq‡hðmmíi™qêf¡uèc©xæa²zä`»{â_Ç|à_Ú}Ôbá}Êcà~Ãdà½f߀·g߀·g߀·g߀·g߀·g߀·g߀·g߀·g߀ÿo!ÿo0 ÿ~6ÿ‰<ÿD$ÿ“L-ÿ“R6ÿ’Y@ÿŽ`IùˆfRô‚nZï|yaëwƒhçrŒnäm•sàjwÝg¦zÚe®|Öc¸~ÓbÀÑbÓÊdßÁeÞ‚»gÝ‚µh݃°i݃°i݃°i݃°i݃°i݃°i݃°i݃°i݃ÿp!ÿr/ ÿ4ÿŒ;ÿ“C"ÿ—K+ÿ—Q4ÿ–W=ú“]FóŽdOîˆkXè‚u`ã|hÞw‰nÙr‘tÓn™yÐk¡}Ìh©€Éf²‚Çe½ƒÅeË„ÁfÜ„¹hÛ…³iÛ…®kÛ…©lÛ…©lÛ…©lÛ…©lÛ…©lÛ…©lÛ…©lÛ…©lÛ…ÿq!ÿt. ÿ„3ÿ:ÿ–C!ÿšI)ÿšN2üšT;õ˜[Dî”bMçiUá‰s^Û‚|fÓ|…oÍwuÉr•zÅoÁl¥‚¾j­…»i¸‡¹iĈ·i؈°kÙˆ«lÙˆ§mÙˆ£oÚ‡£oÚ‡£oÚ‡£oÚ‡£oÚ‡£oÚ‡£oÚ‡£oÚ‡ÿq ÿv, ÿ†2ÿ’:ÿ™B ÿœG'ÿžL/øžR8ðX@éš_Iâ•gRÚp\чxfÊoÅ|‰vÀw|»t˜€·q „´o©‡±m³‰®l¿Š¬lÏ‹¨n׋¤oØŠ pØŠqÙ‰qÙ‰qÙ‰qÙ‰qÙ‰qÙ‰qÙ‰qÙ‰ÿr ÿx+ ÿˆ0ÿ”9ÿ›AÿŸE%ý¡J-ô¢P4ì¢V<ä \EÜ›eOÒ“m\ÊŒufÆ}o½…v·|}³x”®uœ†«s¥‰§q®‹¥pº£pÉ qÕœsÖŒštÖ‹—tØŠ—tØŠ—tØŠ—tØŠ—tØŠ—tØŠ—tØŠ—tØŠÿs ÿz* ÿ‹/ÿ–9ÿ?ÿ¡C#ú¤H*ñ¦N1è§T8á§\@ÕŸbN˘k[Ñrf¼‹zo¶…‚w°‰}«}‘‚¦y™†¢w¡ŠŸu«œt¶ŽštŘuÔŽ•vÕ“wÕ’wÖ‹’wÖ‹’wÖ‹’wÖ‹’wÖ‹’wÖ‹’wÖ‹’wÖ‹ÿs ÿ|) ÿ/ÿ˜8ÿŸ=ÿ¤A!÷¨F'í«L-å­R3ܪY?УaMÆœiZ¾•pe¶wo¯Šv©…†}¤Ž‚Ÿ~–‡›{ž‹—y¨Ž”x³’xÁyÓzÔŽzÕŒ{ÖŒŒ{ÖŒŒ{ÖŒŒ{ÖŒŒ{ÖŒŒ{ÖŒŒ{ÖŒŒ{ÖŒÿtÿ~( ÿŽ.ÿ›8ÿ¡<ÿ§?ô«D$ê¯J)â³Q.Ö®W>˧_MÁ gZ¹™ne±“unªŽ|v£Šƒ}ž†‹‚™ƒ“‡”€›‹~¥Ž}°Š}½‘‰~Бˆ~Óˆ~ÔŽ‡~Õ‡~Õ‡~Õ‡~Õ‡~Õ‡~Õ‡~Õ‡~Õÿtÿ€'ÿ.ÿ7ÿ£:ü©=ñ¯B ç´H$ß·N,ѱU=Ǫ^L½£eY´ld«—sn¤“zvžŽ|˜‹ˆ‚’‡‡Ž…™‹‰ƒ¢Ž†‚­ƒ‚»‘‚‚Ì‘‚‚Ó‚‚Ô‚Õ‚Õ‚Õ‚Õ‚Õ‚Õ‚Õ‚Õÿuÿ‚&ÿ’- ÿŸ6ÿ¥8ù¬;î³?å¹FÚ»K+Í´T<®\K¸§cX¯¡jc¦œqmŸ—wu˜“~|’†‚ŒŽ‡‡Š–‹ƒˆ Ž‡«}‡¸‘{‡É‘|‡Ó|†Ô}…Õ}…Õ}…Õ}…Õ}…Õ}…Õ}…Õ}…Õÿuÿ„%ÿ”- ÿ 5ÿ¨6ö¯8ë·=â¿EÕ¾I*ȸS;½±[J³«bWª¦hb¡¡ol™œut’˜|{Œ•ƒ†’‹†”‹|ŽžŽy¨vŒµ‘tÆ‘uÓv‹Ôx‰Õx‰Õx‰Õx‰Õx‰Õx‰Õx‰Õx‰Õÿvÿ†$ÿ—, ÿ¢2ÿ«3ò³5è¼:ÞÅ?ÐÁH)Ä»Q9¹µYH®°`U¥ªgaœ¦mk”¢tsžzz†›€€˜‰…{–’‰v”›r“¦o“³n“Ãn“Óp‘ÔŽrŽÕrŽÕrŽÕrŽÕrŽÕrŽÕrŽÕrŽÕÿwÿ‰"ÿ™, ÿ¥0 ü®/ï¸1äÃ7 ÙÊ;ËÅF'¿¿P8³ºXG©µ_TŸ°e_–¬kiލrq†¥xx€¢~zŸ‡ƒtˆo›™‹lš¤iš°Žg›ÀŽg›ÕŽi˜Õl”ÖŒl”ÖŒl”ÖŒl”ÖŒl”ÖŒl”ÖŒl”ÖŒl”ÖŒÿxÿŒ!ÿ+ÿ¨, ø³* ê¿+ àÌ2ÑÎ9ÅÉE%¹ÄN6®¿VE£»]R™¶c]²ig‡¯po€¬vvy©}|s§„n¥…i¤—ˆe£¢Šc£®Œa£¾Œ`¤Ò‹c ×‹eœØŠeœØŠeœØŠeœØŠeœØŠeœØŠeœØŠeœØŠÿzÿ ÿ )ÿ¬'ò¸$åÇ$ÙÕ'ËÓ7¿ÎC#³ÊL4§ÅTBœÁ[O’½bZ‰ºhd·nly´trs²{xm°ƒ}h¯‹c®•„_­ †]­­‡[­¼‡Z®Ð‡\ªÚ‡_¥Ú‡_¥Ú‡_¥Ú‡_¥Ú‡_¥Ú‡_¥Ú‡_¥Ú‡_¥Ú‡ÿ~ÿ”ÿ¥&ý± ìÁßÓÐÜ%ÄÙ5¸ÕA!¬ÐK1 ÌR?•ÉYL‹Å`W‚Ãf`zÀlgs¾sml¼zsg»‚wbºŠ{^¹”~Z¸Ÿ€X¸¬V¹»UºÏV¶Þ‚X°Ý‚X¯Ý‚X¯Ý‚X¯Ý‚X¯Ý‚X¯Ý‚X¯Ý‚X¯Ý‚ÿ„ÿ™ÿªõ¹ÞÍ ÐßÅà&»ß6°Ý@¤ÙI-˜ÕQ;ÑXHƒÏ^R{ÌeZsËkalÉrgfÈylaÇp]ÆŠtYÆ”vVÅŸxSƬyRÆ»zQÇÏyQÄãzS¼â|S¼â|S¼â|S¼â|S¼â|S¼â|S¼â|S¼â|ÿŠÿŸÿ°ØÃ ÎÑ Äå¹ä&®ä4¤â? ™àG-ÞO9…ÜVD{Ú]LsÙdTl×kZfÖr_aÕyd\Ô‚gXÔ‹jUÔ•mRÔ nPÔ­oNÕ¼pMÖÐoMÕèpNÌérNÌérNÌérNÌérNÌérNÌérNÌérNÌérÿ’ÿ§ع ËÆÂÕ ·ê¬ê' ¢é4˜è>$çG0ƒæN:zåTCqäZJiäaPdãhU_ãpYZãx\Vã€_Sã‰bPã“dMäeKä©gJå¶gIåÆgHæßgJàìgJßìgJßìgJßìgJßìgJßìgJßìgJßìgÿœ Û±ʽ¿ÊµÚ ªï ð(–ð5Œð?&‚ðG1yðN9pïT@hïZFaï`K]ïgOXïnRTïuUQð}WNð…YKð[Hñ™\Fñ£^Dò¯_Cò»_BóÌ`Aóç`Aóè`Aóè`Aóè`Aóè`Aóè`Aóè`Aóè`Þ§˶½Á²Ï§ê ÷”ø+Šø6ù@&xúH/oúM6gúS<`úX@[û_DVûeGRûlIOürKKüyMHüOEýŠQCý“RAþœS?þ¦T=ÿ±U=þ¼V<þÍV<þÎV<þÎV<þÎV<þÎV<þÎV<þÎV<þÎVΰ½º±Ç¥Ö›ý‘ÿ ˆÿ-€ÿ9vÿ?#mÿE*eÿK0^ÿQ5XÿW8Sÿ];Oÿc>Lÿh@IÿnAFÿuCCÿ|D@ÿ„F=ÿŒG<ÿ”H;ÿI:ÿ¥J9ÿ­K8ÿ¹K8ÿ¹K8ÿ¹K8ÿ¹K8ÿ¹K8ÿ¹K8ÿ¹K8ÿ¹K¾µ°À¤Î—Þÿ†ÿ#}ÿ.sÿ5jÿ<bÿB$[ÿH(UÿN,PÿT/LÿZ1Hÿ_3Eÿd5Bÿj6?ÿp7=ÿv9;ÿ|:9ÿƒ;8ÿ‹<6ÿ“=5ÿš>4ÿ¡>3ÿª?3ÿª?3ÿª?3ÿª?3ÿª?3ÿª?3ÿª?3ÿª?±º£È–Ö‹ô ƒÿyÿ oÿ( gÿ0_ÿ7Xÿ>RÿDLÿJ"HÿP$DÿU&AÿZ'>ÿ_);ÿd*:ÿi+8ÿn,6ÿt-4ÿz.3ÿ/1ÿˆ00ÿ0.ÿ–1-ÿž2-ÿž2-ÿž2-ÿž2-ÿž2-ÿž2-ÿž2-ÿž2¤Â–ψ߀ÿ uÿjÿbÿ!Zÿ) Sÿ1Mÿ8Hÿ>CÿD?ÿJ<ÿO9ÿS7ÿX5ÿ\3ÿa1ÿe0ÿj .ÿp -ÿv!+ÿ|"*ÿ‚#(ÿˆ#'ÿ$'ÿ$'ÿ$'ÿ$'ÿ$'ÿ$'ÿ$'ÿ$ÿ`%ÿ[0ÿa: ÿjAÿoJÿqR)ÿo[2ÿkd:ÿgnAÿdzGÿ`„Lÿ]ŽPÿZ–SÿXžVÿW¥XÿU«ZÿT±[ÿS·\ÿR¾]þQÇ^üQÑ_ûPà_øPé_óQí_îSð_èTñ_äVò_äVò_äVò_äVò_äVò_äVò_äVò_ÿ`%ÿ[0ÿb9 ÿl@ÿqIÿrQ)ÿqZ2ÿmc:ÿhmAÿexGÿaƒMÿ^Qÿ[–TÿYWÿW¤YÿVª[ÿU±\ÿT·]þS¿^ýRÇ_üQÓ`úPâ`öQé`ñRî`ëTï`åVñ`áWò`áWò`áWò`áWò`áWò`áWò`áWò`ÿa%ÿ\0ÿe8 ÿn?ÿtGÿuP(ÿtX1ÿpa:ÿkjAÿgvHÿcMÿ`‹Rÿ]”UÿZœXÿX£ZÿWª\þV°^ýT·_ýS¿`üSÉaúRÖbøQäbóRêbíTîbæVïbàXðbÛXñcÛXñcÛXñcÛXñcÛXñcÛXñcÛXñcÿb%ÿ]/ÿg6 ÿq>ÿwFÿxN(ÿwV1ÿt_:ÿnhAÿjsHÿf~Nÿb‰Sÿ_’Vÿ\›ZÿZ¢\þX©^ýW°`üU·aûTÀbûSÊcùSÚdõRædïTëdèVîdáXïdÙYðeÓZðfÓZðfÓZðfÓZðfÓZðfÓZðfÓZðfÿb$ÿ^/ÿj5 ÿt<ÿzDÿ|L'ÿ{T0ÿw\9ÿreAÿloHÿh{Nÿd†Sÿ`Xÿ]™[þ[¡^ýY¨`üX°bûV¸cúUÁdùTÍe÷SÞfòTçfêVëfâYîfÚZîgÑ[ïhÌ\ðhÌ\ðhÌ\ðhÌ\ðhÌ\ðhÌ\ðhÌ\ðhÿc$ÿ_.ÿm3 ÿw:ÿ}Bÿ€J&ÿR0ÿ|[8ÿwcAÿplHÿlwOÿg‚TÿcYý`–\ü]Ÿ_ú[§bøY®d÷X¶fõWÀgôVËhñUÝhíVéiãYìhÚ[íiÐ\îjÉ]îkÅ^îkÅ^îkÅ^îkÅ^îkÅ^îkÅ^îkÅ^îkÿd#ÿa-ÿp2 ÿ{8ÿ@ÿ„I%ÿ„Q.ÿY7ÿ|a@ÿviHÿpsOûlUøh‰Zöd’^óa›añ_£dð]«fî[³hìZ¼jêYÇkèYØkäYèkÚ[ëlÏ]ímÈ^ìnÂ_ìn¾`ìo¾`ìo¾`ìo¾`ìo¾`ìo¾`ìo¾`ìoÿe#ÿd+ÿs0 ÿ~6ÿ…?ÿ‰H$ÿ‰O-ÿ†W6ÿ‚^>ü|fFøvpNôq{Uðm…ZíiŽ_êe—cèbŸfæ`§iã^¯ká]¹là\ÄmÞ\ÓnÙ]ænÎ^ëoÆ_êq¿aêqºbér¶cér¶cér¶cér¶cér¶cér¶cér¶cérÿf#ÿg)ÿw. ÿ‚5ÿ‰>ÿG"ÿN+ÿŒU3üˆ\<öƒdEñ|lMìwwTèrZänŠ`áj“dÝf›hÚd£kÖb¬nÓ`µpÐ_¿qÎ_ÍrË_âsÄaès½bèt·dçt²eçt¯fçt¯fçt¯fçt¯fçt¯fçt¯fçt¯fçtÿg"ÿj'ÿz, ÿ†4ÿ=ÿ‘E ÿ’M(ý‘S1öŽZ:ð‰aBêƒiKå~tSàx}ZÚs†`ÔnfÐk—jÌhŸnÉf§qÇd¯sÄc¹uÂbÆvÀbÚwºdæw³eåw®fåwªhåw¨hæw¨hæw¨hæw¨hæw¨hæw¨hæw¨hæwÿg"ÿm&ÿ}* ÿ‰4ÿ‘<ÿ•Dÿ—K&ø–R.ñ”X6ê^?äŠgHÝ„qPÕ}yZÏx‚aÊsŠgÆo’lÂlšp¿j¢s¼hªv¹g´x¶fÀy´fÐz±gãz«hãz§jãz£käy¡käy¡käy¡käy¡käy¡käy¡käy¡käyÿh!ÿo$ÿ€) ÿŒ3ÿ”;ÿ™Cý›I#ô›O*ì™U3å–\;Þ‘eEÔ‰mP̃vZÇ}~aÁx†h½tŽm¸q–rµnu±l¦x®k¯{¬j»|ªiÊ}¨já}£lâ|Ÿmâ|œnâ{šnã{šnã{šnã{šnã{šnã{šnã{šnã{ÿi!ÿq#ÿ‚( ÿ2ÿ—;ÿœBùžF ðŸL'èŸR.àZ6Ö•aDÍŽjOƈrY¿‚zb¹}‚h´yŠn°v’s¬sšw¨p¢z¥o«}¢n¶~ mÅžnÛ›oà~˜pá~–qá}”qâ|”qâ|”qâ|”qâ|”qâ|”qâ|”qâ|ÿi!ÿt"ÿ…(ÿ‘1 ÿš:ÿŸ?õ¢Dì¤J#ä¤P)Û¡W5Ïš_CÇ“hO¿ŒpY¸‡wa²‚h­~†n©zŽs¤w–x už{s¨~šr³€—qÀ–rÓ“s߀‘tàtà~tá}tá}tá}tá}tá}tá}tá}ÿj!ÿv ÿ‡'ÿ”0 ÿ9ý¢=ò¥Aé¨GàªM%Ô¤T4Ê]BÁ—eNº‘mX²‹ua¬†|h§‚ƒn¢‹t|“x™y›|•w¥’v¯v½‚Žv΂wÞ‹w߀ŠxàŠxà~Šxà~Šxà~Šxà~Šxà~Šxà~Šxà~ÿj ÿxÿ‰&ÿ–0 ÿŸ7ú¤:ï©?æ­EÜ®J$ϨS3Æ¡\A½›dM´•kX­r`§‹yh¡‡n›ƒˆt—€x’~™|Ž|¢‹z­‚ˆzºƒ‡z˃†{Þ‚…{Þ…{߀…{à…{à…{à…{à…{à…{à…{àÿk ÿzÿ‹&ÿ˜/ ÿ¡5 ÷§8ì­<ã²B×±G#Ë«R2Á¥Z@¸ŸbL°™iW¨”p`¡wg›‹~n–ˆ†s‘…ŽxŒ‚–|ˆ€Ÿ€„ª‚·ƒ€È„€ÝƒÞ߀€~à€~à€~à€~à€~à€~à€~àÿl ÿ|ÿ%ÿš. ÿ£3 ôª4 é±9ß·?Ò´F"Ç®P1½¨Y?³¢`K«gV£˜n_œ”ug–|mƒs‹Š‹x†ˆ”|†€~„¨‚{„µƒy„Å„x…݃y„Þzƒß€z‚àz‚àz‚àz‚àz‚àz‚àz‚àÿmÿ~ÿ$ÿ,þ¦0 ð®1 å¶5 Û¼9ηE òO0¸¬W>¯§_J¦¡eUžl^—™sf•zlŠ’r…‰w€‘|{‹›wŠ¥‚t‰²ƒr‰ÂƒrŠÚƒs‰Þt‡ß€u†àu†àu†àu†àu†àu†àu†àÿoÿ€ÿ’#ÿ +ú©,í²,â¼1ÕÀ6É»C¾¶M.´°V<ª«]I¡¦dT™¢j]‘žqeŠ›xk„˜q–†vy“zu‘˜~q£n¯‚l¿ƒk‘Õ‚mÞo߀p‹àp‹àp‹àp‹àp‹àp‹àp‹àÿqÿƒÿ•!ÿ£)ö­'è·&ÞÃ*ÐÃ5Ä¿A¹ºL-®µT;¥°[G›¬bR“¨i[‹¥oc…¢vj~Ÿ|oxœ„tsšŒyo™–|k—¡h—­€f—¼e˜Ñ€f–ßh“à~j‘á~j‘á~j‘á~j‘á~j‘á~j‘á~j‘á~ÿuÿ‡ÿ˜ ÿ¦%ò² ä¾×É"ÊÇ3 ¾Ã@³¿J+©ºS9Ÿ¶ZE–²aP¯gY…¬m`~©tgx¦zmr¤‚rm¢Švh¡”yd Ÿ|aŸ«~_ º~_ Î~_Ÿá}b›á}c˜â|c˜â|c˜â|c˜â|c˜â|c˜â|c˜â|ÿxÿ‹ÿý«ì¸ÞÈÏÍÄÌ0 ¸È>­ÅH(£ÁQ6˜½XB¹_M†¶eV³k]x±rdr¯yil­€ng¬‰rbª’u_©x\©ªzZ©¹zYªÌzX©äz[¤äz]¡äy]¡äy]¡äy]¡äy]¡äy]¡äy]¡äyÿ}ÿÿ¡ö±ÙÁ ÒÏ ÈÒ¼Ñ. ±Î;¦ËF%œÈO3‘ÄV?ˆÁ]I€¿cRx¼jYqºp_k¹wdf·ia¶‡m]µ‘pYµœrV´©tT´¸tSµËtSµätT°çuV¬çuV¬çuV¬çuV¬çuV¬çuV¬çuV¬çuÿƒÿ–ÿ¨Ù¸ ÎÄ ÇÒ ¿Ù´Ø+©Ö9ŸÓD"”ÐM/ŠÍT;Ê[DxÈbMqÇiSkÅoYeÄv^`Ã~b\‡fXÁ‘hUÁœkRÁ¨lPÁ·mOÂÊmOÂälO½ìnP¹ìoP¹ìoP¹ìoP¹ìoP¹ìoP¹ìoP¹ìoÿ‰ÿگͻÄÇ¼Ö ³ßªß+ Þ9–ÝCŒÚK*‚ØS5yÕZ?qÓaFjÒhLeÑoR`ÐvV[Ð~ZWχ]SÏ‘_PÏœaNÏ©cLϸcKÐËcLÐåbJÎòeKÈòfKÈòfKÈòfKÈòfKÈòfKÈòfKÈòfÿ’ Þ¦δ¿¹Ì°Ý §åžå- ”å9ŠäB ãJ*wâP3oáX;ià_AcàfF^ßnJZßuNVß}QR߆SOßVMß›WKà§XIàµYHáÆYHáßYGßðYFÜõ[FÜõ[FÜõ[FÜõ[FÜõ[FÜõ[FÜõ[íœÑ­¸·Ã­Ñ¤í›í ’í.‰ì:€ìC!vìJ*nìP1fëV7`ë\<[ëd@WëkCSërFPëzIMìƒKJìŒMHì–NEí¡PCí®QBî¼QAïÌRAïåR@íñQ@íñQ@íñQ@íñQ@íñQ@íñQ@íñQԥIJ¶¼«É Ø—ôõ$‡õ1~ö;töB löH'eöO-^÷U1Y÷[5U÷b8Q÷h;Møo=Jøv?Gø~ADù‡CBù‘E@ú›F>ú¦G<û±H;û¾I:üÏI9üãI9üãI9üãI9üãI9üãI9üãI9üãIÇ­··ªÃžÐ“ã Œý„þ'{ÿ1rÿ8iÿ@bÿF"\ÿM&VÿS*RÿY-Nÿ_0Jÿe2Gÿk4Dÿq5Aÿy7?ÿ8<ÿŠ::ÿ“;8ÿ<6ÿ§=5ÿ±>4ÿ¾>3ÿÊ?3ÿÊ?3ÿÊ?3ÿÊ?3ÿÊ?3ÿÊ?3ÿÊ?¸²ª½Ê‘؈û ÿvÿ$nÿ- fÿ5_ÿ<XÿCSÿINÿO!JÿU$Fÿ[&Cÿ`'@ÿf)>ÿk*;ÿr+9ÿy-6ÿ.4ÿŠ/1ÿ”00ÿœ1.ÿ¥2-ÿ¯3,ÿ·3,ÿ·3,ÿ·3,ÿ·3,ÿ·3,ÿ·3,ÿ·3«¸žÅÒƒà}ÿrÿhÿaÿ'Zÿ/ Tÿ7Nÿ>IÿDEÿJAÿO>ÿU;ÿY9ÿ_6ÿd4ÿi2ÿp /ÿw!-ÿ"+ÿ‡#(ÿ$'ÿ™%&ÿ¡&%ÿ§&%ÿ§&%ÿ§&%ÿ§&%ÿ§&%ÿ§&%ÿ§&ŸÀ‘̓Ûxöoÿ dÿ\ÿTÿ Nÿ'Hÿ/Cÿ6 ?ÿ< <ÿB8ÿG5ÿL3ÿQ0ÿV.ÿZ,ÿ_*ÿe(ÿk&ÿq#ÿy"ÿ ÿ‰ÿ‘ÿ—ÿ—ÿ—ÿ—ÿ—ÿ—ÿ—ÿV'ÿQ2ÿV5ÿ_=ÿdEÿfNÿdX'ÿab/ÿ^n5ÿZy;ÿW„?ÿTCÿQ˜FÿO HÿN§JÿM®KÿLµLÿK¼MÿJÄNÿIÎOÿIÞOÿHéPÿHòPüIöP÷KùPñLúOëNûPêOûPêOûPêOûPêOûPêOûPêOûPÿV'ÿQ2ÿX4ÿb;ÿgDÿiMÿgV'ÿc`/ÿ`k5ÿ\w;ÿX‚@ÿUDÿS–GÿPŸIÿO¦KÿN­MÿM´NÿL¼OÿKÅPÿJÏQÿIàQÿIëQþIòRùK÷RóMùQíOúQæPúRåPúRåPúRåPúRåPúRåPúRåPúRÿW'ÿR1ÿZ2ÿd:ÿjBÿlKÿjT'ÿg^/ÿbh6ÿ^t<ÿZ€AÿW‹EÿT•HÿRJÿP¥LÿO­NÿN´OÿM¼QÿLÅQÿKÑRÿJâSÿIíSûKóSõL÷SîOøSèPùSáRúTàRúUàRúUàRúUàRúUàRúUàRúUÿX&ÿT0ÿ]1ÿg8ÿm@ÿoIÿnR'ÿj\/ÿef6ÿaq<ÿ]}AÿYˆFÿV’IÿTœLÿR¤NÿP«PÿO³QÿN»RÿMÄSÿMÏTþLàUûLëUøLôUðO÷UéQøUâRøVÛTùWÙTùWÙTùWÙTùWÙTùWÙTùWÙTùWÿY&ÿW.ÿ`/ÿj6 ÿq>ÿsHÿrQ&ÿoZ.ÿjc6ÿen<ÿazBÿ]…GÿZJÿW˜MÿU PÿT¨RþR¯SýQ·UüPÀVúOËVøOÜWõOéWòOóWêRöWáS÷XÚUøYÑVøZÏVøZÏVøZÏVøZÏVøZÏVøZÏVøZÿY&ÿZ,ÿd-ÿn3 ÿu=ÿxFÿwO%ÿtX-ÿp`5ÿjj<ÿfvBÿbGþ^‹Kû[”OùYRøW¤TöV¬VõT´WóS¼XòSÇYðRÕZìRæZéSòYáTõ[×Vö\ÏW÷]ÈYø]ÇYø]ÇYø]ÇYø]ÇYø]ÇYø]ÇYø]ÿZ%ÿ]*ÿg*ÿr2 ÿy;ÿ|Eÿ|M$ÿzU,ÿu^4ÿog<üjrBùf}Höc‡Ló_Pñ]™Sï[¡VíY¨XëX°ZêW¹[èVÃ\æVÑ\ãVä\ßVð]ÕWõ_ÌYö`ÆZö`À[öa¾\öa¾\öa¾\öa¾\öa¾\öa¾\öaÿ[%ÿ`(ÿk(ÿw0 ÿ~:ÿCÿ‚K"ÿS*ÿ{[3ùvd:õpnAñlyHíhƒMêdŒQça•Uå_Xã]¥Zá[­\ÞZ¶^ÜYÀ_ÚYÎ`ÕYâ`ÑYïaÊZôbÂ\ôc¼]ôd·^ód¶_ód¶_ód¶_ód¶_ód¶_ód¶_ódÿ\$ÿc&ÿo&ÿ{/ ÿ‚9ÿ†Aÿ‡I ÿ…Q(ø‚Y0ò}`8íwj@èruGänMáiˆRÝf‘WÙc™ZÕ`¡]Ò_¨`Ï]±bÍ\»cË\ÇdÉ\ÛeÅ]ëe¿]òf¸_ñg³`ñg¯añg®bñg®bñg®bñg®bñg®bñg®bñgÿ]$ÿf$ÿr$ÿ~. ÿ‡7ÿ‹?ÿŒGù‹O%òˆV-ìƒ]6æ~g>àxqFÛs{MÕnƒSÐjŒXÌg”]Éeœ`Æc£cÃa¬eÁ`µg¿_Áh½_Ðiº`æiµaïj¯bïj«cïj§dïi¦eði¦eði¦eði¦eði¦eði¦eðiÿ^#ÿi"ÿv#ÿ‚, ÿ‹6ÿ>ý‘Eô‘L"íŽS*æŠZ2ß…e;×~mEÐxvMËtTÆp‡ZÂl^¿i—b»gŸe¸e§h¶d°j³c»k±cÊl¯cál«dím¦fíl£gíl hîkŸhîkŸhîkŸhîkŸhîkŸhîkŸhîkÿ_#ÿk ÿy"ÿ…+ÿŽ4 ÿ“<ø–Cï–Jç•P&à‘X.׊a:΄jEÈ~sMÂy{U¾uƒ[¹q‹`µn’d²lšg¯j£j¬h¬l©g¶n§gÄo¥gÚo¢hëožiìo›jìn™kím˜kím˜kím˜kím˜kím˜kím˜kímÿ_#ÿnÿ{!ÿˆ*ÿ‘2 ÿ—:ôšAë›Gã›M!Ú–U-Ï^9ȉgDÁƒoM»~wU¶y[±v‡`­se©p–h¦nŸl£l¨n k²pkÀqœkÒršléq—mêp”mëp’nìo’nìn’nìn’nìn’nìn’nìn’nìnÿa!ÿpÿ~ ÿ‹)ÿ•1 û›8 ðž>ç Dß JÓšR+Ê“\8ÂdC»‡mM´‚tT¯~|[ªz„a¦w‹e¢t“ižr›mšp¤p—o¯r•o¼s“oÍs’pæspérŽqêqqëpŒqëpŒqëpŒqëpŒqëpŒqëpŒqëpÿc ÿrÿ€ÿŽ'ÿ—/øž6 í¢;ä¥@Ú¤FΞQ*Å—Z7½‘bBµŒjL¯‡rT©‚y[¤€`Ÿ|ˆe›yj—w˜m“u¡ps¬ss¸t‹sÉuŠtât‰tèsˆuér‡uêq‡uêp‡uêp‡uêp‡uêp‡uêp‡uêpÿeÿtÿƒÿ&ÿš-ô¡4 é¦7 àª=Ô§DÉ¡O)À›X6¸•`B°hK©‹oS£‡vZžƒ~`™€…e”}j{–nŒyŸq‰x©s†wµu„wÅvƒxßuƒxèt‚xés‚xêq‚xêq‚xêq‚xêq‚xêq‚xêq‚xêqÿgÿwÿ…ÿ“$ÿ+ñ¤0æª3Ü®7 ϪCÅ¥N(¼ŸW5³™_A«”fJ¤mSž‹tZ˜ˆ{`“…ƒeŽ‚‹jŠ€“n†~œq‚}§t|³u}|Ãv|}Ûv|}èt}|ès}|ér}|êq}|êq}|êq}|êq}|êq}|êqÿiÿyÿ‡ÿ•#û )î¨,ã¯/ײ4 Ë­AÁ¨L'·£U4¯]@§™dIŸ”kR™rY“y_ŽŠ€d‰‡ˆi„…‘m€ƒšq|‚¤ty±vwÀvvÖvvçtwèsx€érxêqxêqxêqxêqxêqxêqÿkÿ{ÿŠÿ˜!ø£&ê¬'ß´)Òµ2 ǰ@¼¬K&³§S3ª¢[>¢cHš™iQ”•pXŽ’w^ˆ~dƒ†i~ŠŽmz‰˜qv‡¢ss†®uq†½vo‡Òvp‡ètq…èsr„érs„êqs„êqs„êqs„êqs„êqs„êqÿmÿ~ÿÿ›ô§"æ° Úº!͸1 ´>¸°I$®«R1¥¦Z=¢aG•žhOŽ›nWˆ˜u]‚•|c}“„hxŒlt•pp rmŒ¬tjŒ»uiÎuiètk‹ésm‰êqmˆêqmˆêqmˆêqmˆêqmˆêqmˆêqÿpÿÿÿžð«â¶Ó½È»/½¸<³´G#©°P0 «X;˜¨_E¤fN‰¡lU‚žs[}œzaw™fr—Šjn–“nj”žqf”ªsd“¸sc”Ësc”ære’êqgêpgŽêpgŽêpgŽêpgŽêpgŽêpgŽêpÿsÿ…ÿ”ü£ê°Ù¾ ÍÁÂÀ-¸½:®¹F!¤µO-š±V9’®^CŠ«dLƒ¨jS|¥qYv£x_q¡clŸ‡hhž‘kdœn`œ¨p^œ¶q]œÉq]œäp^šëp`–ëoa•ìoa•ìoa•ìoa•ìoa•ìoa•ìoÿwÿ‰ÿ™ó¨×µ ÏÁ ÆÅ¼Ä*²Â8§¿Dž»M+”¸U6‹µ\@„²bI|¯iPv­oVp«v[kª}`f¨†db§g^¦šj[¥¦lX¥µmW¦ÇmW¦âlW¤ílZŸílZžílZžílZžílZžílZžílZžílÿ|ÿŽöž Ø­ ͸ ÇľʵÊ'«È6¡ÅA—ÂK(¿S3…½Z<}ºaEv¸gKp·mQjµtVe´|[`²„_\±ŽbX±™eU°¥fS°³gR±ÆgR±ágQ¯ñhSªðhT©ðhT©ðhT©ðhT©ðhT©ðhT©ðhÿ‚ÿ” Û¥αÅ»½ÇµÐ¬Ð#£Ï3 ™Í?ÊH$†ÈQ.}ÆX8vÄ_?oÂfFiÁlKdÀsP_¿{T[¾„XW½[T½˜]Q¼¤_O¼³`M½Å`M½à_L¼ðaM·õbM¶õbM¶õbM¶õbM¶õbM¶õbM¶õbÿ‰ áœЪŵ»¿²Ë«Ø £Ù šØ/ Ö<‡ÔF~ÒO)vÐV2oÏ^9hÍd?cÌkD^ÌsIZËzLVʃORÊROʘTMÊ¥VKʳWJËÅWIËàVIÉðXGÇúYHÅûZHÅûZHÅûZHÅûZHÅûZHÅûZ÷‘Ô¢ǯº¹°Ä§Ð Ÿá˜á!à0 †à;}ßDuÞM$nÝU+gÜ\2bÛd7]Ûk;YÚr?UÚzCRÚƒENÚHLÚ˜JIÚ¥KHÛ³LGÜÄLFÜÞLFÚíLDØùOCØûOCØûOCØûOCØûOCØûOCØûOۚʩ»³°½¥É›Ö ”èŒé%„è3 {è<sèDkèK"dçR(^çY-Yç`2Uçh5Rço8Oçw;Lç€=Iç‰?Gè”ADèŸBBé¬CAéºD@êÍD@êäD@èõD@çøC@çøC@çøC@çøC@çøC@çøCÍ£½®°¸¤Ä™Ðá ‰ññ(xò2 pò;iòCbòJ\óP#VóW'Ró^+Oóe-Lôl0Iôs2Fô{4Cô„6AõŽ7>õ™9=ö¤:;ö°;:÷¿<9øÏ<8÷è<8÷ì<8÷ì<8÷ì<8÷ì<8÷ì<8÷ì<¿ª±³¤¿˜ÊŒØ„ú|ûtû&lü0 eü8^ý@XþGSþMOÿT KÿZ"Hÿa%Eÿg&Bÿm(@ÿu*=ÿ}+:ÿ†-8ÿ‘.6ÿ›/4ÿ¦03ÿ²12ÿ¾21ÿÐ21ÿÖ21ÿÖ21ÿÖ21ÿÖ21ÿÖ21ÿÖ2²¯¥º˜Æ‹Òßyÿoÿgÿ"`ÿ,Zÿ4 Tÿ<OÿCJÿIGÿOCÿU@ÿ[>ÿa;ÿf9ÿm6ÿt 4ÿ}!1ÿ†#/ÿ‘$-ÿ›%,ÿ¥&+ÿ¯&*ÿ»')ÿ¾')ÿ¾')ÿ¾')ÿ¾')ÿ¾')ÿ¾'¦¶˜Â‹Î~Ûuùkÿbÿ[ÿTÿ&Nÿ.Iÿ5Eÿ< AÿC >ÿH;ÿN8ÿS5ÿX3ÿ^1ÿd.ÿj,ÿr*ÿz'ÿƒ%ÿŽ$ÿ˜#ÿ "ÿª!ÿ­!ÿ­!ÿ­!ÿ­!ÿ­!ÿ­š¾‹Ê~×pãgÿ^ÿ VÿOÿIÿ Cÿ'?ÿ.:ÿ47ÿ:3ÿ?0ÿD.ÿI ,ÿN )ÿS 'ÿX %ÿ^ #ÿd !ÿl ÿt ÿ}ÿ‡ÿÿ™ÿ›ÿ›ÿ›ÿ›ÿ›ÿ›ÿL*ÿH3ÿO4ÿT7ÿZAÿ\JÿZTÿW`$ÿTk*ÿPx/ÿM„3ÿJ6ÿG™9ÿF¡;ÿE©<ÿD°>ÿC·?ÿBÀ?ÿBÉ@ÿAÕAÿAäAÿAîBÿAöBÿAýBÿBÿAùDÿAôFÿBïGÿBïGÿBïGÿBïGÿBïGÿBïGÿBÿM)ÿJ2ÿQ2ÿW6ÿ\?ÿ^Iÿ]SÿZ^$ÿWi*ÿSu/ÿP4ÿM7ÿJ—:ÿHŸ<ÿG§=ÿF®?ÿEµ@ÿD½AÿDÆBÿCÑBÿCâCÿCìCÿCõCÿCüCüDÿCõGÿCïHÿDëIÿDëIÿDëIÿDëIÿDëIÿDëIÿDÿM)ÿL0ÿT1ÿY4ÿ_=ÿaGÿ`Rÿ]\$ÿZg+ÿVs0ÿS4ÿOŠ8ÿM”;ÿK=ÿJ¤?ÿH¬@ÿH³AÿG»BÿFÃCÿFÎDÿEßDÿEêEýEóEûEûE÷FÿDðIÿEêJÿFåKÿGåKÿGåKÿGåKÿGåKÿGåKÿGÿN)ÿO.ÿW.ÿ]2ÿc;ÿeFÿePÿaY$ÿ]d+ÿZp0ÿV|5ÿS‡9ÿP‘<ÿNš?ÿM¢@ÿK©BÿJ°CÿJ·DÿIÀEÿHÊFýHÛFúHçGøHòGõHúFñIÿGêKÿHãLÿIÞMÿJÞMÿJÞMÿJÞMÿJÞMÿJÞMÿJÿO(ÿR,ÿZ,ÿa/ÿg:ÿjDÿjNÿgW$ÿba+ÿ^m1ÿ[x6ÿWƒ:ÿT=ÿR–@ÿPžBþO¥DüN­EûM´GúL¼HùLÇHöKÔIóKåIðKðIíLùHéLÿJáNÿKÚOÿLÓPÿMÓPÿMÓPÿMÓPÿMÓPÿMÓPÿMÿP(ÿU*ÿ])ÿe-ÿl8 ÿoBÿoKÿlU#ÿh^*ÿci1ÿ_t6ý\;ûY‰?ùV’B÷TšDõS¢FôR©HòQ±IñP¹JïOÃKîOÏKëOâKçOîKäOøMßOþNÕQÿOÎRÿPÉSÿPÉSÿPÉSÿPÉSÿPÉSÿPÉSÿPÿQ'ÿX'ÿa'ÿj,ÿq6 ÿt@ÿtIÿrR"ÿn[)ýhd0ùep6öa{;ó^…@ð[ŽCîY–FìWžHêU¦JèT­LçSµMåS¿NãSÌNáSßNÝSíOØR÷QÑSýRÊTþSÄVÿS¿WÿS¿WÿS¿WÿS¿WÿS¿WÿS¿WÿSÿR'ÿ[%ÿe$ÿn*ÿv4 ÿz=ÿzFÿxO ûtX(öoa/ñkl6ígv<éc€@æ`ŠEä]’Há[šJßY¢MÝXªOÚW²PØV¼QÕUÈRÒUÛSÎVëSËVöUÆVýV¿XýVºYýW¶ZýW¶ZýW¶ZýW¶ZýW¶ZýW¶ZýWÿS&ÿ_"ÿi!ÿs(ÿ{2 ÿ;ÿ€Dû~Lô{T%îv]-éqh4ämr;ài|AÜe…FØbŽJÔ_–MÑ]PÎ\¥RÌZ­TÉY¶VÇYÂWÆYÐWÂYæX¿YóY»ZûYµ[ûZ°]ûZ­]ûY­]ûY­]ûY­]ûY­]ûY­]ûYÿV$ÿb ÿm ÿw&ÿ0ÿ„9 ý†Aõ…Iî‚Q"ç}Z*áxd2Üsn:ÔnwAÐj€GÌf‰LÈd‘PÅb˜SÃ` UÀ^¨X¾]±Y»]¼[¹\É\·\à\´]ï\°^ù]«_ù]¨`ù\¥aù\¥aù\¥aù\¥aù\¥aù\¥aù\ÿX"ÿeÿqÿ{$ÿ„.ÿ‰6 ø‹>ï‹FèˆNá„W&Ù~a1Ñxj:ËssBÆo|HÂl„M¾iŒQ»f“U¸d›Xµc£Z³a¬\°`·^®`Ä_¬`Ø_©aë_§a÷_¢c÷_Ÿd÷_dø^dø^dø^dø^dø^dø^ÿ[ ÿhÿtÿ~#ÿˆ+ý4 ó;êCâJÚŠT%Ѓ]0É~g:ÃxoB¾txH¹q€NµnˆR²kV¯i—Z¬gŸ\©e¨_¦d²a¤d¿b¢dÐb dçbžeõbšfõa˜gö`–hö`–hö`–hö`–hö`–hö`–hö`ÿ]ÿjÿwÿ‚!ÿ‹)ù‘1ï•8 æ–?Ý”GÒŽQ$ʈ[/ƒd9¼~lA·ytH²u|N®r„Sªo‹W¦m“[£k›^ j¤`h®c›hºd™hËe—hãd•iód“jôc‘kõbkõakõakõakõakõakõaÿ_ÿmÿzÿ…ÿŽ'õ•.ë™5áœ; Ö˜CÌ“O"ÄX.½‡a8¶‚iA°~qH«zyN§w€S£tˆXŸq[›o˜_˜n¡b•m«d’l·flÆflßfŽmñeŒnód‹nôcŠnôbŠnôbŠnôbŠnôbŠnôbŠnôbÿaÿoÿ|ÿˆÿ‘$ò™+çž1Ý 6 ÑœAÇ—M!¿‘V-·Œ_7±‡g@«‚nH¥~vN {}Sœx…X˜v\”t•_‘ržbŽq¨e‹p´g‰pÃh‡pÛg†qîf†ròe…ród„rôc„rôc„rôc„rôc„rôc„rôcÿcÿqÿÿŠü”!îœ'ã¢,ؤ2ÌŸ@ÚK º•U,³]7¬‹e?¥‡lG ƒsM›€{S–}‚W’zŠ\Žx’`Šv›c‡u¥f„t±g‚tÀh€tÕh€uìgvòfuóeuóduóduóduóduóduódÿeÿtÿÿù—ë #ߦ&Ò§0È£>¿žI¶™S+®”[6§c? ‹jF›‡qM•„xRWŒ‡\ˆ}`„{™c€z£f~y¯h{y½izyÑiyzêhzzòfzyòezyódzyódzyódzyódzyódzyódÿgÿvÿ„ÿõ›ç¤Û«Ϊ/Ħ=º¡H²Q*ª˜Y4¢”a>œhE–ŒoL‰vR‹†}W†„…[‚‚_~€—cz¡fw~¬hu}»is~Îis~èht~ñft}òeu|ódu|ódu|ódu|ódu|ódu|ódÿiÿxÿ‡ÿ“ñžã¨Õ®Ê­-À©;¶¥F­¡P)¥œX3ž˜_<—”fD‘mK‹ŽtQ†Œ{V‰ƒ[|‡‹_x†”bt„Ÿeqƒªgoƒ¸imƒËimƒæhnƒòfo‚òepódpódpódpódpódpódÿkÿ{ÿŠÿ–í¢Þ­бŰ+»­9²©D©¥N' ¡V2™^;’šdC‹—kJ†”rP€’yU{€Zw‰^rŒ’anŠœdk‰¨gi‰¶hg‰Èhg‰ãgh‰òfi‡óej†ódj†ódj†ódj†ódj†ódj†ódÿnÿ~ÿ÷šÛ§ Ó° Ê´À´)¶±7­®C¤ªL%›¦U0“£\9Œ cA†iH€špN{˜wSv–~Xq”†\l’`h‘šce¦ec´faÆfaáfaòecŽóddŒôcdŒôcdŒôcdŒôcdŒôcdŒôcÿqÿ‚ÿ‘ ÞŸ Óª ̳ ĸº¸&±¶5 §³Až¯J#–¬S.Ž©Z7‡¦a?€¤gFz¡nLuŸuQp|Ukœ„ZfšŽ]c™˜`_˜¤b]˜²d[˜Ãd[˜Þc[˜ðc\•õb^“õb^“õb^“õb^“õb^“õb^“õbÿuÿ† ë–գ̭Ŷ½¼´½#«»2 ¡¹?˜¶H ³Q+ˆ°X4€®_b»pC^ºwGZ¹€KV¹‰NS¸”PP¸ RM¸®TL¸¿TK¹ØTK·íTJ¶ùUJ³þVJ³þVJ³þVJ³þVJ³þVJ³þVú‡֘ɥ½¯³¸©Â¡ÍšÐ’Ð(ŠÏ6 ÎAyÌJrËR&lÊZ-fÉa2aÈh7\ÇoqØHj×PdÖX%_Õ_*[Ôg/WÔn3SÓv6PÓ9LÓˆ;JÓ”>GÓ ?EÔ®@DÔ¿ACÕØ@DÓì@BÒöBAÑþDAÑþDAÑþDAÑþDAÑþDAÑþDјåµ®©¸žÃ”ÍŠÙ „ã}ä&uä2nã<gãEaãM\ãU Wã]$Tãd'Pâk*Mâs-Jã|0Hã†2Eã4Cãœ5Aä©6@ä¸7?åË7?åä7?ãó6=âû8=âû8=âû8=âû8=âû8=âû8Æ¡·«ª´ž¾“ɈÔîyíqí'jî2dî; ^îCXîKSîRPïYLï` Iïg#Gïo%Dðw'Að€)?ðŠ*=ñ•,;ñ¡-9ò®.8ò¾/7óÐ/7óç/6ñó/6ñó/6ñó/6ñó/6ñó/6ñó/¹§«°Ÿ»’ƆÐ{Ýt÷m÷fø&_ø/Zù8 Tù@PúGLúNHûUEû[Bûb@üh=üp:ýx8ý‚ 6ý"4þ˜#2þ¤$1ÿ±%0ÿ¿&/ÿÏ&.ÿã&.ÿã&.ÿã&.ÿã&.ÿã&.ÿã&­­Ÿ·’†ÍyÚpòhÿaÿZÿ#Tÿ+Oÿ3Jÿ;FÿB CÿI @ÿO=ÿU:ÿ[8ÿa5ÿh3ÿo0ÿx.ÿ‚,ÿ*ÿ™)ÿ¤(ÿ¯'ÿº&ÿÇ&ÿÇ&ÿÇ&ÿÇ&ÿÇ&ÿÇ¡´“¿†ÊxÖlâcü\ÿUÿOÿIÿ&Dÿ.@ÿ4<ÿ;9ÿA6ÿF3ÿL1ÿQ .ÿW ,ÿ] *ÿd (ÿl %ÿu #ÿ!ÿŠ ÿ•ÿ ÿ¨ÿ±ÿ±ÿ±ÿ±ÿ±ÿ±•¼†ÇyÓkà^íVÿOÿ IÿCÿ>ÿ 9ÿ'5ÿ-2ÿ3.ÿ8+ÿ=(ÿB&ÿG$ÿL"ÿQ ÿWÿ^ÿeÿnÿxÿƒÿ ÿ– ÿž ÿž ÿž ÿž ÿž ÿž ÿB-ÿB2ÿH2ÿL6ÿN<ÿPGÿPRÿN_ÿKkÿHw$ÿEƒ'ÿBŽ*ÿA—,ÿ? .ÿ?§/ÿ>®0ÿ=µ1ÿ=¼2ÿ<Å2ÿ<Î3ÿ;ß3ÿ;ê4ÿ;ó4ÿ;û4ÿ<ÿ3þ<ÿ3ü=ÿ4ö?ÿ5õ?ÿ5õ?ÿ5õ?ÿ5õ?ÿ5õ?ÿ5ÿC,ÿD0ÿJ0ÿN4ÿQ:ÿSFÿRQÿQ]ÿNi ÿKt$ÿH€(ÿE‹+ÿC•-ÿB/ÿA¥0ÿ@¬1ÿ?³2ÿ?º3ÿ>Â4ÿ>Ì4ÿ>Ü5ÿ=è5ÿ=ñ5ÿ>ú5ý>ÿ5û?ÿ4ø?ÿ6òAÿ7ðAÿ7ðAÿ7ðAÿ7ðAÿ7ðAÿ7ÿD,ÿG.ÿM.ÿQ2ÿT9ÿWDÿVOÿTZÿQf ÿNr%ÿK})ÿHˆ,ÿF’.ÿE›0ÿD¢2ÿC©3ÿB°4ÿB·5ÿA¿6ÿAÉ6ÿ@×7ÿ@å7ý@ð7ú@ø7÷Aÿ6öAÿ7òAÿ8ìCÿ9êDÿ9êDÿ9êDÿ9êDÿ9êDÿ9ÿE+ÿI,ÿP,ÿU/ÿY7ÿ\Bÿ[MÿXWÿVc ÿRo%ÿOz*ÿL…-ÿJ0ÿH˜2ÿGŸ4ÿF¦5ÿE­6ÿE´7ÿD¼8þDÆ8üDÒ9ùCâ9öDî9óD÷9ñDÿ9ïDÿ:ëEÿ;äFÿ<ãFÿ<ãFÿ<ãFÿ<ãFÿ<ãFÿ<ÿF+ÿM)ÿT)ÿY,ÿ^5ÿa@ ÿaJÿ^TÿZ_ ÿWk&ÿTv*ÿQ.ÿN‹1þL”4üKœ5ûJ£7úIª8øH±9÷H¹:öGÂ;õGÍ;òGß;îGì;ëHö;éGÿ=çGÿ>áHÿ?ÚJÿ@ØJÿ@ØJÿ@ØJÿ@ØJÿ@ØJÿ@ÿG*ÿP'ÿX&ÿ^*ÿc3ÿf= ÿfGÿdQÿ`[ ÿ\g&ýYr+úV}/øS‡3öQ5ôP˜7òNŸ9ñM¦;ïL­<îLµ=ìK¾=ëKÊ>éKÜ>åLê=âKõ?ßKþAÜJÿBÔLÿCÍMÿCËNÿCËNÿCËNÿCËNÿCËNÿCÿJ(ÿT$ÿ\#ÿc(ÿh0ÿl; ÿlDÿjNþfXùab%õ^m+ò[x0ïX‚4ìV‹7êT”9èS›;æQ£=åQª>ãP²?áO»@àOÇ@ÞOØAÙOèAÔOôCÐNþEÎNÿFÈPÿFÂQÿGÀQÿGÀQÿGÀQÿGÀQÿGÀQÿGÿM%ÿW!ÿ` ÿh&ÿn.ÿr8 ÿrAýpK÷mTòh^$ídi*éat0å^~4â[‡8àY;ÝW—>ÛUŸ@ØT¦BÕS®CÒR·DÐRÂEÎRÐFËRåFÈRòHÅRýIÂRÿJ¼TÿJ·UÿJ¶UÿJ¶UÿJ¶UÿJ¶UÿJ¶UÿJÿP#ÿ[ÿdÿm$ÿs+ÿw5þx>öwGðtPêoZ"äke)àgo/Ûcy5Ö`‚:Ò]Š>Ï[’AÌYšCÊX¡EÈW©GÆV²IÄV¼JÂUÉK¿UßK¼VîL¹VúM·VÿM²XÿM®YÿM¬YÿM¬YÿM¬YÿM¬YÿM¬YÿMÿS ÿ^ÿhÿq"ÿx(ÿ|1ø~: ð}CézLâvWÜra(Ômk/Ïit6Ëe};Çb…@Ä`CÁ^•F¿]œH¼[¤KºZ­L¸Y·N¶YÃO´YÕO±ZêP®Z÷P¬ZÿP¨[ÿP¤\ÿP¤]ÿO¤]ÿO¤]ÿO¤]ÿO¤]ÿOÿVÿaÿlÿu ÿ|%ý.ó„7 ê„?âHÛ}SÑw]'Ërg0Ænp7Âjx<¾g€AºeˆE·cH´a˜K²_ŸM¯^¨O­]²Q«]¾R©]ÎS¦]åS¤^ôS¢^ÿSŸ_ÿRœ`ÿR›`ÿR›`ÿR›`ÿR›`ÿR›`ÿRÿXÿdÿpÿyÿ€#ø†*í‰2äŠ; ܈EÑ‚PÊ}Z&Äxc/¾sl7¹ot=µl|B²j„F®gŒJ«e“M¨d›O¥b¤R£a®T¡a¹UŸaÈVaáV›bñU™býU—cÿT•dÿT”dÿS”dÿS”dÿS”dÿS”dÿSÿZÿgÿsÿ}ÿ„ óŠ&èŽ.ß6ÔŒAˇMÄ‚W&½}`/·xi6²tq=®qxBªn€G¦lˆJ£jN h˜Qg SšfªU˜eµW•eÄX”eÛX’fïW‘füWgþVŽgþUhþUhþUhþUhþUhþUÿ\ÿiÿvÿ€ýˆïŽ"ä“)Ú”1Î?Æ‹K¾†U%·^.±}f6¬yn<§vuB£s}GŸp„KœnŒN˜l”R•kT’j§Wi²YiÀZŒiÕZŠjìYŠjúX‰kýW‡kýV‡kþV‡kþV‡kþV‡kþV‡kþVÿ^ÿlÿxÿƒù‹ë’à˜#Ó˜/Ê”=ÁI¹ŠS$²†[-¬d5¦~k<¡zrBwzG™uK•s‰O‘q‘RŽošU‹n¤Xˆm¯Z†m½[„mÐ[ƒnéZƒnøY‚oüX‚oýW‚oýW‚oýW‚oýW‚oýW‚oýWÿ`ÿnÿ{ÿ†öç–ۜϛ-Å—; ¼“G´ŽQ#­ŠY,§†a4¡‚i;œpA—|wF“y~Kw†O‹uŽRˆs—U„r¡X‚q¬Zqº\~qÌ\}rç[}röZ|rüY|rüW|rýW|rýW|rýW|rýW|rýWÿbÿqÿ}ÿˆò’ãšÕŸÊž+Á›9 ¸—E°’O"©ŽX+¢Š_3œ†g:—ƒn@’€uE~|J‰|„N…zŒR‚x•V~wŸX{vª[yu¸\wuÊ\wvå\wwõZwvûYwvüXwvüWwvüWwvüWwvüWwvüWÿdÿsÿ€ÿ‹ï•ßž ТÆ¡)½ž7 ´šC¬–M ¤’V*Ž^2—‹e9’ˆl@…sEˆƒzJ„€N€ŠR|}“Ux|Xu{¨[sz¶\qzÇ\qzâ\q{óZq{ûYrzüXrzüXrzüXrzüXrzüXrzüXÿgÿuÿƒôŽ Û™ Ô¡ ̤¤'¸¢6 °žB§šL —T)™“\1“c8j?ˆŠqDƒˆxI~†Mz„ˆQv‚‘Us›Xo€¦Zm´\kÅ\k€ß\k€òZk€ûYl~üXm~üXm~üXm~üXm~üXm~üXÿiÿxÿ… â’Õ› Σ Ǩ½¨%´¦4 «¢@£ŸJ››R'”˜Z0Ž•a7ˆ’h=‚oC~ŽvHyŒ}LuŠ…PqˆŽTm‡™Wj†¤Yg…±[e…Â[e…Ü[e…ðZf…ûYgƒüXgƒüWgƒüWgƒüWgƒüWgƒüWÿlÿ{ ò‰ Ù•ÏžɦÁ«¸«"¯ª2¦§>ž¤H–¡Q%žX.ˆ›_5‚™f<}–mAx”tFs’{KoƒOkŒRgŽ–Ud¢XaŒ¯Y_ŒÀZ_ŒÙY_ŒîY_ŒûXaŠýWa‰ýWa‰ýWa‰ýWa‰ýWa‰ýWÿo ÿ ßҘʢ©º¯²° ©®/¡¬<˜©F‘§O#‰¤V,ƒ¢]3}Ÿd9wk?r›qDnšyHi˜Le—ŠPa•”S^• U[”­WZ”½XY”ÔWY”ìWY“ùV[‘þU[þU[þU[þU[þU[þUÿs õ„̜ؑå»­³³ «µ£´,›²9’°DŠ­M ƒ«T)}©\0w§b6q¥i|½Hu¼P!oºX'j¹_-e¸e2`·l6\¶t:Xµ|>U´…AQ´DN³œFL³©HJ³¹HI´ÎHI³éHH±öIH°ÿJH°ÿJH°ÿJH°ÿJH°ÿJH°ÿJâ†Î”¡¶©«±¡º˜ÃÉŠÉ ƒÉ/{È; tÇEnÆNhÅV!cÄ]'^Ãd+ZÂk/VÁr3SÁ{6OÀ„9LÀGÀ¨?FÀ¸@EÀÍ@EÀè?D¾öAC½ÿBC¼ÿCC¼ÿCC¼ÿCC¼ÿCC¼ÿCÖÆ›¸¥­®¢¶˜¿ÈƒÑ ÒyÒ*rÒ7lÑBfÑKaÐS\Ï[XÏb#TÎi'QÎq*MÎz-J΃0HÎŽ2EΚ4CΨ5Bθ6AÏÍ5AÎè5@Íõ7?Ëþ9>Ëÿ9>Ëÿ9>Ëÿ9>Ëÿ9>Ëÿ9Ê–¼¢¯ª£³˜¼Æ‚ÏxÙ sÞnÞ&hÞ3bÞ> ]ÞHYÞPUÞXQÞ`NÞgKÝo HÞx#FÞ%CÞŒ'AÞ˜)?Þ¦*>ßµ*=àÈ*=ßã*<Ýñ+;Üû-:Üý.:Üý.:Üý.:Üý.:Üý.ÀŸ±§¤°˜ºÃÍv×nèiècè'^é2Xé;TéD OêLLêSIê[FêbDëjAër?ë{<ë†:ì‘ 8ìž!7í¬"6í»#5îÏ#4îæ#4ëõ#4ëø#4ëø#4ëø#4ëø#4ëø#³¥¦­™·Á€ËuÕiádó^óYô&Tô0Oõ8Kõ@GöG DöN A÷U?÷\<÷c:øj7øs5ø}3ùˆ1ù”/ú¡.ú¯-û¾,ûÏ+ûç+ûë+ûë+ûë+ûë+ûë¨ªš´¿€ÉtÓgÞ^òYþSÿNÿ#Iÿ+Eÿ3Aÿ:>ÿA;ÿG8ÿN5ÿT 3ÿZ 1ÿa /ÿi ,ÿr *ÿ} (ÿˆ&ÿ•%ÿ¡$ÿ®#ÿº"ÿÊ"ÿÐ"ÿÐ"ÿÐ"ÿÐ"ÿМ²Ž¼ÇsÑgÝYãSýMÿHÿCÿ?ÿ&:ÿ-7ÿ33ÿ90ÿ?.ÿD+ÿJ)ÿP'ÿV$ÿ]"ÿe ÿnÿyÿ…ÿ’ ÿž ÿ¨ ÿ³ ÿ· ÿ· ÿ· ÿ· ÿ· º‚ÅtÐgÜXãMðGÿBÿ <ÿ8ÿ4ÿ0ÿ%,ÿ+)ÿ0%ÿ5#ÿ: ÿ?ÿDÿIÿOÿVÿ^ÿhÿrÿ~ÿŠÿ” ÿž ÿ¢ ÿ¢ ÿ¢ ÿ¢ ÿ¢ÿ9/ÿ<0ÿA1ÿD4ÿD:ÿDEÿEQ ÿC]ÿAiÿ>vÿ<ÿ:Œÿ9– ÿ8ž!ÿ7¥#ÿ7«#ÿ6²$ÿ6¹%ÿ6À%ÿ5Ê&ÿ5×&ÿ5å&ÿ5ï&ÿ5ø&ÿ6ÿ&þ6ÿ&ü6ÿ&ü6ÿ'ú6ÿ(ú6ÿ(ú6ÿ(ú6ÿ(ú6ÿ(ÿ9/ÿ>/ÿD/ÿF2ÿH8ÿHCÿHO ÿG[ÿDgÿBsÿ?ÿ=Šÿ<“!ÿ;›#ÿ:¢$ÿ9©%ÿ9°&ÿ8¶&ÿ8¾'ÿ8Ç'ÿ8Ó(ÿ8ã(ÿ8í(þ8÷(û8þ'ù9ÿ'ø8ÿ)ø8ÿ*ö8ÿ*ö8ÿ*ö8ÿ*ö8ÿ*ö8ÿ*ÿ:/ÿA,ÿF,ÿJ/ÿL7ÿMAÿLL ÿKXÿHdÿFpÿC|ÿA‡ ÿ?#ÿ>˜$ÿ= %ÿ=¦&ÿ<­'ÿ<´(ÿ;»)ÿ;Ä)ÿ;Ï)þ;à*û;ë*ø;õ)ö<þ)ô<ÿ*ó;ÿ+ò;ÿ,ï;ÿ-ï;ÿ-ï;ÿ-ï;ÿ-ï;ÿ-ÿ<-ÿD)ÿJ)ÿN,ÿQ4ÿR>ÿRJ ÿPUÿMaÿJmÿHxÿEƒ"ÿC$ÿB•&ÿA'ÿ@£(ÿ@ª)þ?±*ý?¸+ü?Á+ú?Ë+÷?Ü,õ?é,ñ?ô+ï?ý,í?ÿ-ì>ÿ/ë>ÿ0ç?ÿ0ç?ÿ0ç?ÿ0ç?ÿ0ç?ÿ0ÿ@*ÿH&ÿN&ÿR)ÿV2ÿW<ÿWG ÿUQÿR]ÿPiÿMt ÿJ#ýH‰&ûG‘(úF™)øE *÷D§+õD­,ôCµ-óC½-òCÈ.ðC×.ìCç.éDó-æCü0äBÿ1ãBÿ2áBÿ3ÜCÿ4ÜCÿ4ÜCÿ4ÜCÿ4ÜCÿ4ÿC'ÿK#ÿR"ÿX'ÿ\/ÿ]9ÿ^C ÿ[NÿXXþUdúRo ÷Pz$ôM„'òL)ðJ•+ïIœ-íI£.ìHª/êG±/éGº0çGÅ0æGÒ0âHå0ßGò2ÛGû4ØFÿ5ÕFÿ6ÒFÿ7ÍHÿ7ÍHÿ7ÍHÿ7ÍHÿ7ÍHÿ7ÿF$ÿO ÿVÿ]$ÿa,ÿc5ÿd@ ÿbJú^Tõ[_ñXk îUu%ëS(èQˆ+æO‘-äN˜/âM 0áL§1ßL®2ÝK·3ÛKÂ4ÙJÏ5ÕKä5ÐKð6ÍJû8ÊJÿ:ÈJÿ:ÆKÿ;ÁLÿ;ÁLÿ;ÁLÿ;ÁLÿ;ÁLÿ;ÿJ!ÿSÿ[ÿb"ÿg)ÿi2ÿj< ùhFòePía[è^f ä[q%áX{)ÞV„,ÛTŒ/ØR”2ÔQ›4ÒP£5ÐOª7ÎN²8ÌN¼9ÊNÉ:ÈNÝ:ÄOí;ÁNù=¾Nÿ=¼Nÿ>ºOÿ>¶Pÿ>¶Pÿ>¶Pÿ>¶Pÿ>¶Pÿ>ÿMÿVÿ_ÿg ÿl&ÿo.ùp8òoB ëlKåiWßebÚal%Ô]v*Ð[~/ÍY‡2ÊW5ÈV–7ÆT9ÄS¥;ÁS­<¿R·>½RÃ?¼RÓ?¹Rè?µRöA³RÿA±SÿA¯SÿA¬TÿA¬TÿA¬TÿA¬TÿA¬TÿAÿPÿZÿdÿlÿq#ýu*óv3ëv= ãsGÜoSÔk^Îfg&Êcq+Æ`y0Â^4¿\‰7½Z‘:ºY˜<¸X >¶W¨@´V²B²V½C°UÌC­VãD«VóD¨WþD§WÿD¥XÿD¢XÿD¢XÿD¢XÿD¢XÿD¢XÿDÿSÿ]ÿhÿpÿv ÷z&í|.ä|8ÜzD ÒuOËpZÆlc&Áhl,½fu1¹c}5¶a„9³_Œ<°]”?®\›A«[¤C©Z­E§Z¸F¥YÇG£ZÞG¡ZïGŸ[üG[ÿG›\ÿFš\ÿFš\ÿFš\ÿFš\ÿFš\ÿFÿUÿ`ÿkÿtÿzò"ç)Þ‚3Ó@ ËzLÄvV¾q`%¹nh,´kq2±hy6­f€:ªdˆ=§b@¥`—C¢_ EŸ^©G^´I›]ÂJ™]ÖJ—^ìJ–_úI•_ÿI“`ÿH’`ÿG’`ÿG’`ÿG’`ÿG’`ÿGÿXÿcÿnÿwû~íƒâ‡#Ö‡.̃= ÅI½{S·v]%²se,­om2©mu7¦j|;¢h„>ŸfŒAœe”D™cœG—b¦I”b°K’a¾LaÐLbèLŽcøKcÿJŒdÿI‹dÿI‹dÿI‹dÿI‹dÿI‹dÿIÿZÿfÿqÿz÷‚è‡Ý‹Ћ,Lj; ¿„G¸Q±{Z$¬wb+§tj1£qr6Ÿoy;›m€?˜kˆB•iE’h™Hf¢JŒf­LŠeºMˆeÌN‡fæN†göL†gÿK…hÿK„hÿJ„hÿJ„hÿJ„hÿJ„hÿJÿ\ÿhÿtÿ}ó…ä‹ÖËŽ*ÂŒ8 ºˆD³„O¬X#§|`+¡xh1uo6™sv;•q}?’o…BŽmE‹l–Hˆk K…jªMƒi·NiÈO€jãO€kôNkÿLkÿKkÿKkÿKkÿKkÿKkÿKÿ^ÿkÿvû€ êˆ Û Ð’Ç’'¾6¶ŒB®ˆM¨„V"¢€^*œ}e0—zl5“ws:u{>Œs‚Bˆr‹F…p“I‚oLn¨N}nµO{mÆPznàPyoòNyoþMyoÿLyoÿKyoÿKyoÿKyoÿKyoÿKÿ`ÿm ÿy îƒ Û‹ Ô‘ Ì••%¹“4±AªŒK£ˆT!„\)—c/’~j5Ž|q9Šzx=†x€BƒvˆEu‘I|s›Lyr¦Nvr³PurÃPsrÝPtsðOtsýMtsÿLtsÿLtsÿLtsÿLtsÿLtsÿLÿbÿo ü{ Þ†ÕŽÏ” ǘ¾˜#µ–2­“?¦IŸŒR ˜‰Z(“†a.Žƒh4‰o9…v=}~A}{†EzyIvx™Lsw¤Nqw±PovÁPnwÙPnwïOnwüNnwÿMowÿLowÿLowÿLowÿLowÿLÿd ÿr ð~ÚˆÐÊ—›¹›!±š0©—=¡”Gš‘P”X'Ž‹_-‰ˆf3„†m8€„t={‚{Ax€„EtHq}—Km|¢Nk|¯Oi{¾Ph|ÕPh|íOi|ûNi|ÿMj{ÿLj{ÿLj{ÿLj{ÿLj{ÿLÿf ÿuáԋ˓Ě½žµŸ¬ž.¤›; ˜E–•N“V%‰],„Žd2‹k7zŠrmBi‹ˆFeŠ’Ib‰žK_ˆªM^ˆºN\ˆÎN]ˆéM]‡øL]‡ÿK^†ÿK^†ÿK^†ÿK^†ÿK^†ÿKÿmê|ՈʒÁš¹ ±¦ ©§¢§)š¥6 ’£A‹¡J„ŸR!~Z(y›`.t™g3o—n8k–uQ£˜@O£¥BM£´CL£ÈCL£äCK¡ôCK ÿDK ÿDK ÿDK ÿDK ÿDK ÿDã}ϋ–·Ÿ­¦£­™µ¹‹º„º-}¹9 w¸Cq¶LkµSf´Z"b³a&^²h+Z±o.V°w2S°5O¯‹8L¯—:J®¤E«ÿ?E«ÿ?E«ÿ?E«ÿ?E«ÿ?ڃǑ»œ¯¤¥«š²º†Á Â{Â(uÂ5oÁ@ iÀId¿Q_¾X[¾_ W½f$T¼n'Q¼v*M»-J»Š0H»–2E»£4C»²4B»Å5C»â4B¹ó5A¸ý7@·ÿ7@·ÿ7@·ÿ7@·ÿ7@·ÿ7΋¿˜²¡§©œ°‘¸†À{ÈtËpÌ"kË0fË<aËE \ÊNXÊVTÊ]QÉdNÉlKÉt"HÈ~$EȈ'CÈ•(AÈ¢*?ȱ+>ÉÄ+>Éá*>Çò+=Æü-<Åÿ.<Åÿ.<Åÿ.<Åÿ.<Åÿ.Ä“¶Ÿ©¦®’·†¿{ÇpÏgÖ d×`Ø*\Ø6XØATØJ PØR MØZJ×bG×iE×rB×|@؇=Ø“<Ø¡:Ù° 9Ùà 9Ùß 9×ï 8Õù"7Ôÿ#7Ôÿ#7Ôÿ#7Ôÿ#7Ôÿ#¹œ«¤Ÿ¬“µ‡¾{ÆpÎeÖ]ãZãVã'Rä2Nä<JäDGåMEåU Bå\ @åd>æl;æv9æ€7çŒ5ç™4ç¨2è¸2èÌ1èå1æô1åü1åü1åü1åü1åü®¢¡ª”³ˆ½{ÆoÎcÖXÞTîQïMï&Ið/Eð8Añ?>ñG<òN:òU7ò\5ód 3óm 1ôw /ô‚ -ô+õ*ö«)ö¼(öÎ'÷æ'õñ'õñ'õñ'õñ'õñ£¨–²ˆ»{ÅoÎb×VÞNðJúFûBû"?ü*;ý28ý95þ?2þF0ÿL.ÿS+ÿZ)ÿb'ÿk$ÿv#ÿ‚!ÿ ÿ ÿ« ÿº ÿÉ ÿÝ ÿÝ ÿÝ ÿÝ ÿÝ ˜°Šº|ÄoÍbØUÞIäDû?ÿ;ÿ8ÿ4ÿ$1ÿ+-ÿ1*ÿ6'ÿ<%ÿB#ÿH ÿNÿUÿ]ÿgÿrÿÿŒÿšÿ¦ÿ²ÿ¼ÿ¼ÿ¼ÿ¼ÿ¼Œ¸}ÂoÌbØTßGå>ñ9ÿ4ÿ 0ÿ,ÿ)ÿ&ÿ""ÿ'ÿ,ÿ1ÿ6ÿ<ÿAÿHÿOÿW ÿa ÿl ÿy ÿ†ÿ’ÿÿ¥ÿ¥ÿ¥ÿ¥ÿ¥ÿ11ÿ6.ÿ:/ÿ;2ÿ;9ÿ;Cÿ9Oÿ8\ ÿ6h ÿ4tÿ2€ÿ1‹ÿ0”ÿ0›ÿ/¢ÿ/¨ÿ.¯ÿ.µÿ.¼ÿ.Åÿ.Ïÿ.àÿ.ëÿ.ôÿ.üü/ÿû/ÿú.ÿú.ÿú.ÿú.ÿú.ÿú.ÿÿ3/ÿ9,ÿ=-ÿ>0ÿ?6ÿ?Aÿ=Mÿ€ÿ<Šÿ<’ÿ;šý: ü:§û9­ú9´ù9¼ø9Æö9Óò9äï9ðì:úê9ÿ!é9ÿ#è9ÿ$ç9ÿ$ç9ÿ%ç9ÿ%ç9ÿ%ç9ÿ%ÿ<'ÿC#ÿH"ÿL&ÿO/ÿP9ÿNCÿLO ÿJ[ÿHfÿEqüC|úB†øAŽö@–õ?ó?£ ò>ª ñ>±!ð>¹!î>Ã!í>Ï!ê>â!æ?ï!ã>ù#á=ÿ%ß=ÿ'Þ=ÿ(Ü=ÿ(Ü=ÿ(Ü=ÿ(Ü=ÿ(Ü=ÿ(ÿ?#ÿG ÿLÿQ$ÿU,ÿV5ÿU?ÿSJ þPVúNböKmóIwðGîFŠìE’ ëD™!éC "èC§#æC®#åB¶$äBÀ$âCÌ$ßCà$ÛCí%ÖBø(ÓBÿ*ÑBÿ+ÏAÿ+ÎAÿ,ÎAÿ,ÎAÿ,ÎAÿ,ÎAÿ,ÿC ÿJÿPÿW!ÿ[(ÿ\2ÿ[;üYF öVQñT]íQhéOræM|äK… âJŽ!àI•#ÞHœ$ÜG£&ÚG«'ØF³(ÕF¼(ÓFÈ)ÑFÜ*ÍGì*ÉF÷,ÇFÿ.ÄFÿ/ÃFÿ/ÂFÿ/ÁFÿ/ÁFÿ/ÁFÿ/ÁFÿ/ÿFÿNÿVÿ\ÿ`%ÿb-üb7ô`Aî]L èZXãXcßUnÛRwØP€"ÔO‰$ÑM'ÏL—(ÍLž*ËK¦+ÉJ­,ÇJ·-ÆJÂ.ÄJÑ/ÁKç/½Jô1»Jÿ2¸Jÿ2·Kÿ3¶Kÿ3¶Kÿ3¶Kÿ3¶Kÿ3¶Kÿ3ÿJÿRÿZÿaÿf!þh)ôh2ìg<ådH ßaTÙ^^Ò[iÎXr ËV{$ÈTƒ'ÅR‹*ÃQ’,ÁP™.¿O¡/½O¨1»N±2¹N¼3·NÊ4µNá4²Nñ5¯Oý6­Oÿ6¬Oÿ6«Oÿ6«Oÿ6«Oÿ6«Oÿ6«Oÿ6ÿMÿUÿ_ÿfÿkøm$ín,åm6ÝkCÔgOÍdZÈ`dÄ]m"Á[v&½Y~)»W…,¸V/¶U”1´Tœ3²S¤4°R­6­R·7¬RÅ8ªRÚ8§Rí9¥Sú9£Sÿ9¢Sÿ9¡Tÿ8¡Tÿ8¡Tÿ8¡Tÿ8¡Tÿ8ÿOÿYÿcÿjÿoòræt&Ýt1Óq?ËmKÅiVÀf`»ci"·`q'´^y+±\€.®[ˆ1¬Y3ªX—5§WŸ7¥W¨9£V³:¡VÀ;ŸVÒ–ZÌ?”Zå?’[õ>‘[ÿ>\ÿ=\ÿ<\ÿ<\ÿ<\ÿ<\ÿ<ÿUÿ_ ÿiÿqõwæ{Ù}Î}*Å{9¾wE·tP±pY­mb"¨ji'¥hq,¡fx/žd€3›b‡6˜a8–`˜;“_¡=‘^«?^¸@^ÈA‹^áAŠ_ó@‰_ÿ?‰`ÿ>ˆ`ÿ>ˆ`ÿ=ˆ`ÿ=ˆ`ÿ=ˆ`ÿ=ÿWÿb ÿl øt éz Þ~ ÒÈ'À6¸|B ²xM¬uV§r_"¢of'žln,›ju0—h|3”g„6‘eŒ9Žd•<Œcž>‰b¨@‡bµB…bÅB„bÞCƒcñB‚cýA‚dÿ@‚dÿ?‚dÿ?‚dÿ?‚dÿ?‚dÿ?ÿYÿd ÿn êwÛ}Ô‚ ̄Å$»ƒ4³€@ ­|K¦yT¡v\!œsd&˜qk+”or/‘my3Žk6‹j‰9ˆh’<…g›?‚f¦A€f²C~fÁD}fÙD|gïC|güA|hÿ@|hÿ@|hÿ?|hÿ?|hÿ?|hÿ?ÿ[ ÿg ÷qÞzԀ΅ LJ¾ˆ"¶‡1¯„> ¨I¢}RœzZ —wa&“uh+so/‹qw3ˆo~6…n†:‚m=k™?|k£Byj°Cxj¿DvjÔEvkíCvkûBvkÿAvlÿ@vlÿ@vlÿ@vlÿ@vlÿ@ÿ] ÿiìtÚ|ЃɈʺ‹ ²Š/«ˆ< ¤…GP˜~X“|_%Žyf*Šwm.†ut2‚t|6r„9|q=yp–@vo¡Btn®Drn½EpnÑEpoëDpoúCqoÿAqoÿ@qpÿ@qpÿ@qpÿ@qpÿ@ÿ_ÿkávԈŋ¾ µ®Ž-¦Œ: Ÿ‰E™†N“ƒVŽ€]$‰~d)…|k-zr2}xy5zw‚9wv‹f~›Ac~¨Ca}¶D`}ÉD_}åC`}öB`}ÿAa}ÿ@a}ÿ@a}ÿ@a}ÿ@a}ÿ@ÿgãtÒLj¾¶•®˜¦šŸš&˜™3‘—? ‹•H…“P‘X z_%ve*r‹l.nŠs2jˆ{6f‡„9c†Ž<`…™?]„¦A[„´BZ„ÇCZ„ãBZƒôA[ƒÿ@[ƒÿ@[ƒÿ?[ƒÿ?[ƒÿ?[ƒÿ?ÿjÞx̓Œ¹“°˜§ Ÿ™Ÿ#“ž1Œ< …›F™Nz—Vu–]#p”c(l’j,h‘q0ey4aŽ‚7^Œ:ZŒ—=XŒ¤?V‹²@T‹Å@T‹á@TŠó?UŠþ?U‰ÿ>U‰ÿ>U‰ÿ>U‰ÿ>U‰ÿ>ïoÖ|ȇ½‘´˜ªœ ¢™¤“¥ Œ¤.…£9 ¢Cy LtŸSoZ jœa%fšh)c™o-_˜w0[—€4X–Š7U••9R•¢;P”°=O”Ã=O”ß³ú,=²ÿ-=±ÿ-=±ÿ-=±ÿ-=±ÿ-lj¹•¬¡¤–«Š²¸s¿jÄ gÅcÅ(_Å5[Å?WÅH TÄP PÄXMÄ_JÃfHÃnEÃxBÂ@ÃŽ>Ü<ë ;ü!:ÃÕ!;Âî!9Àù"8¿ÿ$8¿ÿ$8¿ÿ$8¿ÿ$8¿ÿ$½‘°›¤¢˜ªŒ±€¹u¿jÆ^ÌYÏWÐ!UÐ.QÐ9NÐCKÐLIÐSFÐ[ CÐc AÐk>Ðu<Ñ€:ÑŒ8Ñš6Ñ©5Ñ»4ÒÒ5Ðì4Ï÷3Îÿ3Îÿ3Îÿ3Îÿ3Îÿ³™¦¡š©Ž±¹uÀjÇ^ÍTÔLÝ JÝHÞ&FÞ2Dß<BßE?ßM=àU;à]9àf7ào 5áz 3ᆠ1á” 0â£.â³.ãÇ-ãã-àò,ßû,ßý,ßý,ßý,ßý¨ œ§°ƒ¸vÁjÉ^ÏSÕIÜEéBé@ê$=ê.:ë68ì>6ìF3íM1íU/î]-îe+îp)ï{(ï‰&ð—%ð§$ñ¸#ñÌ"òå"ðó"ïõ"ïõ"ïõ"ïõž¦‘¯„¸wÁjÉ]ÐQ×FÝ?ê<ö9ö6÷ 3÷(1ø0.ù6+ù=)úD'úJ%ûR#ûZ ücüný{þ‰þ˜ÿ¨ÿ·ÿÈÿàÿäÿäÿäÿä“®…·xÀjÉ]ÒPÙDß:ä5÷2ÿ .ÿ+ÿ(ÿ!&ÿ'#ÿ- ÿ3ÿ9ÿ?ÿEÿMÿUÿ_ÿjÿxÿ‡ÿ– ÿ¤ ÿ° ÿ¾ ÿ ÿ ÿ ÿ‡¶y¿kÉ^ÓPÛCà8å/ð+ÿ'ÿ$ÿ!ÿÿÿÿ#ÿ(ÿ-ÿ2ÿ8ÿ? ÿF ÿOÿYÿeÿrÿÿÿ›ÿ§ÿ©ÿ©ÿ©ÿ©ÿ,/ÿ0,ÿ2,ÿ30ÿ16ÿ0Aÿ/Mÿ-Zÿ+fÿ)sÿ(~ ÿ'ˆ ÿ'‘ ÿ'™ ÿ&Ÿ ÿ&¥ÿ&«ÿ&±ÿ&¸ÿ&Àÿ&Éÿ&×ÿ&æÿ&ðþ&ùû'ÿù'ÿù&ÿø&ÿø&ÿø&ÿø&ÿø&ÿÿ.,ÿ3)ÿ5*ÿ6-ÿ64ÿ5?ÿ3Kÿ2Wÿ0dÿ.p ÿ,{ ÿ,… ÿ+Ž ÿ+–ÿ*ÿ*£ÿ*©ÿ*¯ÿ)¶ÿ)½ÿ)Çÿ)Óþ)ãû*ïø*øö+ÿô*ÿô*ÿó*ÿó)ÿó)ÿó)ÿó)ÿÿ1)ÿ6&ÿ9&ÿ:)ÿ;2ÿ;=ÿ9Hÿ7Tÿ5`ÿ3l ÿ2w ÿ0‚ ÿ0‹ÿ/“ÿ/šÿ. ÿ.¦ÿ.¬ÿ.³þ.ºý.Äû.Ïø.áõ.íñ/÷ï/ÿî.ÿí.ÿì.ÿì.ÿì.ÿì.ÿì.ÿÿ4&ÿ9#ÿ=#ÿ>&ÿA/ÿA9ÿ?Eÿ=Pÿ;\ÿ9h ÿ7s ÿ6~ÿ5‡ý4ü4–ú3ù3£ø3©÷3°ö3·ô3Àó3Ìð3Þí3ëé4öç3ÿæ3ÿä2ÿä3ÿã2ÿã2ÿã2ÿã2ÿÿ8#ÿ= ÿAÿE#ÿG,ÿG6ÿF@ÿDLÿAXÿ?d û>où–å>œã=£â=ªà=²ß=»Ý=ÆÛ=ØÖ=éÒ=õÎ=þÌ<ÿ Ë<ÿ!É<ÿ!É<ÿ!É<ÿ!É<ÿ!É<ÿ!ÿ?ÿEÿKÿPÿS$ÿT-ÿS7÷QBñNMìLZ èJeåHoâGyßE‚ÝDŠÚC‘ØB™ÕBŸÓA¦ÑA®ÏA·ÎAÁÌAÐÉBåÅBó!ÂAþ#ÀAÿ$¾Aÿ$½Aÿ%½Aÿ%½Aÿ%½Aÿ%½Aÿ%ÿBÿIÿPÿVÿY ÿZ(÷Z2ïX=èUIãSU ÞQ`ÙNjÔLtÐK|ÎI„ÌHŒÊG“ÈGšÆF¡!ÄF©"ÂE±#ÁE¼#¿EÉ$½Fß%¹Fï&¶Fû'´Fÿ(³Fÿ(²Fÿ(±Fÿ(±Fÿ(±Fÿ(±Fÿ(ÿFÿMÿUÿ[ÿ^ù`#ï`,æ^6ß\DØYP ÑW[ÌTeÈRnÅPwÃOÀN†¾MŽ!¼L•#ºKœ$¸J¤&¶J¬'´J¶(³IÃ)±IÖ)®Jê*«Jø+©Jÿ+¨Kÿ+§Kÿ+§Kÿ+§Kÿ+§Kÿ+§Kÿ+ÿIÿPÿYÿ_ÿcòeçe%Þd1Ôb?Í`K Ç]VÂZ`¾Xi»Vq¸Ty¶S"³Rˆ$±P&¯P—(­OŸ)«N¨+©N²,§N¾-¦NÎ.£Næ.¡Oõ.ŸOÿ.žOÿ.Oÿ.Pÿ.Pÿ.Pÿ.Pÿ.ÿLÿT ÿ]ÿcùgëißjÓj,Ëh;ÅeG ¿bRº`\¶]e²[m¯Yu!¬X|#ªVƒ&§U‹(¥T“*£S›,¡S£.ŸR­/R¹0›RÉ1™Râ1—Sò1–Sÿ1•Tÿ1”Tÿ0”Tÿ0”Tÿ0”Tÿ0”Tÿ0ÿOÿX ÿ` ûf ðk ämÖnÌo(Äm7½kD ·hO²eX®baª`i§^p!¤]x%¡['ŸZ‡*œYŽ,šX—.˜W 0•Vª2“Vµ3‘VÅ4VÝ4ŽWð4Wý3ŒXÿ3ŒXÿ2ŒXÿ1ŒXÿ1ŒXÿ1ŒXÿ1ÿQ ÿ[ ÿcëjÝnØq ÏrÆs%¾r4·pA±mL¬jU§g^£ee cm"œat%š`{(—^ƒ+”]‹-’\“0[œ2Z¦4‹Z²5‰ZÁ6‡ZÖ6†[í6…[û5…\ÿ4„\ÿ3„\ÿ3„\ÿ3„\ÿ3„\ÿ3ÿS ÿ]õfßmÕrÐu ÉvÀw"¸v1±t>«qI¦nR¡l[ib™gj"–fq%“dx(c+a‡.Š`0ˆ_™3…_£5ƒ^¯6^¾8€^Ñ8_ê7~_ú6~`ÿ5~`ÿ4~`ÿ4~`ÿ4~`ÿ4~`ÿ4ÿUÿ`èiÚpÐuÊxÃz»{³z/¬x<¦uF ¡sPœpX—n`“kg!jn%hu(Šg|+‡f„.„d1c–4c¡6|b­7zb»9ybÎ9xcè8xcø7xdÿ6xdÿ5xdÿ5xdÿ5xdÿ5xdÿ5ÿWÿbálÔsËxÅ{¾} ¶~¯~,¨|9¡yD œwN—tV’r]Žpd Šnk$‡lr(„kz+j‚.~iŠ1{h”4xgŸ6vfª8tf¹9sfË:rfæ9rg÷8rgÿ7rhÿ6rhÿ5rhÿ5rhÿ5rhÿ5ÿYöeÝnÏvÇ{À¹€ ±‚ª‚*£€7}B —{K’xTv[‰tb …ri$qp'~ow+{n.xmˆ1vl’4skœ6pj¨8nj·:mjÉ:ljä:mkõ8mkÿ7mkÿ6mkÿ6mkÿ6mkÿ6mkÿ6ÿ[ëgÙqÌyÃ~»‚´„ ­…¦…(Ÿ„5™‚@ “I}R‰{Y„y`€wg#|un'ytu*vs}.sr†1pq4mp›6ko§8ioµ:hoÇ:goâ:goô8hoÿ7hoÿ6hoÿ6hoÿ6hoÿ6hoÿ6ÿ^äjÓtÈ|¿·…¯‡¨‰¡‰%›ˆ3”†> Ž„G‰P„W~^{|e"xzl&tys*qx{-nw„0kvŽ3hu™6ft¥8ds³9bsÄ:bsà:bsó8csÿ7csÿ6csÿ6csÿ6csÿ6csÿ6ÿaàmÏwÄ»…³‰ª‹£Œœ#–Œ0‹<ЉE„‡N…U{ƒ\w‚c!s€j%oq)l}y,i|‚/f{‹2cz—5`y£7^y±8]yÂ9\yÝ9]yñ8]xþ7^xÿ6^xÿ5^xÿ5^xÿ5^xÿ5õdÜpÊzÀƒ¶‰®¤‘—’ ‘‘.Š9„ŽC Lz‹Su‰Zqˆa n†h#j…o'g„w+cƒ.`‚‰1]”3[€¡6Y¯7WÀ8WÚ7Wð7X~ý6X~ÿ5X~ÿ5X~ÿ5X~ÿ5X~ÿ5éhÔtÆ~»‡²¨‘ž”––‘—‹—+…–7”A y“It’QpXl_hŽf!eŒm%a‹t(^Š},[‰‡/Xˆ’1U‡Ÿ3S‡­5R‡¾5Q‡Ö5Q†î5R…û4R…ÿ4R…ÿ3R…ÿ3R…ÿ3R…ÿ3ãlÎyÁƒ¶‹¬‘¢•—™› Š„'~œ4y›>sšG o™Oj˜Vf—]c•c_”j"\“r%Y’{(U‘…+R‘.P0N«1L¼2LÓ2Lí2LŽú2Lÿ1LŒÿ1LŒÿ1LŒÿ1LŒÿ1ÜqÈ~»ˆ±‘¦–œšŸ‡¢£|¤#w¤0r£;m¢D h¡Ld T`ŸZ]žaYhVp!Sœy$P›ƒ'MšŽ)Jš›,Hš©-G™º-FšÐ-F˜ë-F—ù.F–ÿ.F–ÿ.F–ÿ.F–ÿ.F–ÿ.ÑwÁ„¶Žª• ›•ŸŠ¤}©w«s«o¬,j«7e«AaªI ]©QZ©XW¨_S§fP§nM¦vJ¥!H¥Œ$E¥™&C¤¨'B¤¸(A¤Î'A£ê'@¢ø(@¡ÿ)@ ÿ)@ ÿ)@ ÿ)@ ÿ)É~º‹¯”£š˜ ¥‚ªu°l³ i´e´'a´3^´=Z´FV³N S³U P³\M²cJ²kG±tE±~B°Š@°—>°¦ <°· <°Ì <¯è ;®÷!:­ÿ":¬ÿ#:¬ÿ#:¬ÿ#:¬ÿ#À†³’§™œŸ¦„¬y±m·a¼]½Z¾ X¾-T¾8Q¾BN¾JL¾RI¾Y F¾` D¾hA½q?½|<½ˆ:½•8½¤7½µ6½Ê7¼ç5»ö5ºÿ4¹ÿ4¹ÿ4¹ÿ4¹ÿ¸ª˜ŸŸ“¦‡¬{³o¹c¾XÄPÈ MÈLÉ%JÊ1GÊ;EÊDCÊLAÊT>Ê\<Êd:Ën 8Ëx 6Ë… 4Ë’ 2Ë¢1˲0ÌÇ0Ëå/Éõ.Èý.Çÿ.Çÿ.Çÿ.Çÿ®—¡ž•¥‰­|´p»dÁYÆNËEÐ>Õ=Õ<Ö&;×19Ø;8ÙE6ÙM5ÙV3Ú^1Úh0Ûs.Û,Û*Ü)Ü­(ÝÁ(ÝÞ'Ûï&Ùù&Øþ &Øþ &Øþ &Øþ ¤˜¥‹­~´q¼eÃYÉMÍCÓ:Ù5ä 3ä1ä 0å*.æ3-æ<+çD*çL(èT'è]%ég#és"ê ê‘ë¡ë²ìÇìáêñéùéùéùéù𤬵r½eÅYËLÐAÕ8Ü/á-ñ +ñ(ò&ò$$ó+"ô2!ô9õAõIöQ÷Z÷eørùù’ú¢ú³ûÆûÝûéûéûéûé«´s½fÆYÍKÓ@Ù5Þ,ã&ñ$þ !ÿÿÿÿ"ÿ(ÿ.ÿ5ÿ<ÿCÿL ÿV ÿb ÿoÿÿÿ ÿ®ÿ¼ÿÇÿÇÿÇÿǃ´u½gÆZÏKÕ?Ü3á)å!ìýÿÿ ÿÿÿÿ ÿ# ÿ(ÿ.ÿ5ÿ=ÿFÿQÿ]ÿkÿ{ÿ‹ÿ™ÿ¥ÿ¬ÿ¬ÿ¬ÿ¬ÿ',ÿ**ÿ+*ÿ*.ÿ&4ÿ%?ÿ#Kÿ!Xÿ dÿpÿ{ÿ…ÿŽÿ–ÿœÿ¢ÿ¨ÿ®ÿ´ÿ»ÿÃÿÎÿßÿëüõùþ÷ÿ÷ÿöÿ öÿ öÿ öÿ öÿ ÿ)*ÿ,'ÿ.'ÿ-*ÿ,2ÿ+=ÿ)Iÿ'Uÿ%aÿ#mÿ"xÿ"‚ÿ!‹ÿ!“ÿ!šÿ! ÿ!¥ÿ!«ÿ!±ÿ!¸ÿ!Áÿ!Ëü!Üù!éö!ôó"ýò"ÿ ñ"ÿ ñ!ÿ ð!ÿ ð!ÿ ð!ÿ ð!ÿ ÿ,&ÿ0$ÿ1#ÿ1&ÿ2/ÿ1:ÿ/Fÿ-Rÿ+^ÿ)iÿ(uÿ'ÿ'ˆÿ&ÿ&–ÿ&þ&£ ý&© ü&¯ û&¶ ú&¾ ø&È ö&Ù ò&è ï'ó í'ý ë&ÿ ê&ÿ é&ÿ è&ÿè&ÿè&ÿè&ÿÿ/#ÿ3 ÿ5ÿ7#ÿ8,ÿ87ÿ6Bÿ4Nÿ2Zÿ0eÿ.pþ-{ü-„ú,Œ ø,“ ÷,™ ö+  ô+¦ ó+¬ ò+³ ñ+» ï+Æ î,Ô ê,æ æ,ò ä,ü â,ÿá,ÿà,ÿß,ÿß,ÿß,ÿß,ÿÿ3ÿ7ÿ:ÿ= ÿ?(ÿ?2ÿ=>ÿ;Iÿ9Uû7a÷5lõ4vò3 ð2‡ ï2 í2– ì1œ ê1¢ é1© è1° æ1¹ å1à ã2Ñ ß2å Ü2ñØ1üÕ1ÿÒ1ÿÑ1ÿÐ1ÿÐ1ÿÐ1ÿÐ1ÿÿ7ÿ;ÿ?ÿCÿF$ÿF.ÿD9üBDö?Pñ=\íìFJçDVãCbßAl Ü@u Ù?~ Õ>†Ó=Ñ=”Ï<›Í<¢Ì<©Ê;±È;»Ç;ÈÅ<ÜÁ<í¾<ù»<ÿº<ÿ¹<ÿ¸<ÿ¸<ÿ¸<ÿ¸<ÿÿ>ÿDÿJÿOÿQûR#ñQ-éO8âMEÜKQÖI\ÑGf ÎFpËExÈD€ÆC‡ÄBŽÃB•ÁAœ¿A¤½@¬¼@¶º@¸@ÒµAè²Aö°Aÿ®Aÿ­Aÿ¬Aÿ¬Aÿ¬Aÿ¬AÿÿBÿG ÿOÿSÿVóWèV%àU1×S?ÏRLÊPW ÆNa ÃLjÀJr½Iz»H‚¹G‰·GµF—³FŸ±E§°E±®E¼¬E̪Eã §Fó!¥Fÿ!£Fÿ"¢Fÿ!¢Fÿ!¢Fÿ!¢Fÿ!¢Fÿ!ÿEÿK ÿS ÿW ùZë[ßZÔZ+ÌZ;ÆXHÁVS ¼T\ ¹ReµPm³Ou°N|®M„¬L‹ªK’¨Jš¦J£!¤I¬"£I¸#¡IÆ$ŸJÞ$Jð$›Jý%™Kÿ$™Kÿ$˜Kÿ$˜Kÿ$˜Kÿ$˜Kÿ$ÿH ÿOÿVõ[ é^ ä^ Õ_Ë`'Ä_6¾^C¸[N ´YX°Wa¬UiªTp§Sx¥R¢Q† PŽ žO–"œNŸ#šN¨%˜N³&—NÂ'•NÖ'“Nì'‘Oû'Oÿ'Pÿ&Pÿ&Pÿ&Pÿ&Pÿ&ÿJ ÿSøZâ_ÚbÔc ÍcÄe#¼e2¶c@±aK ¬^T¨\]¥[e¡YlŸXsœVzšU‚ ˜TŠ"•T’$“S›&‘R¥'R°)R¾*ŒRÐ*ŠSé*‰Sù)ˆTÿ)‡Tÿ(‡Tÿ(‡Tÿ(‡Tÿ(‡Tÿ(ÿLÿVé]ÜcÑgÌhÆh½j ¶i/°h<ªeG ¥cQ ¡aZ_aš^i—\p•[w’Z~!Y†#XŽ%‹W—'‰W¡)†V­+…Vº,ƒVÌ,‚Wæ,W÷+€Xÿ*€Xÿ*€Xÿ)€Xÿ)€Xÿ)€Xÿ)ÿOýYâ`ÕgÌjÆlÀl·m°n,ªl9¥jD hN ›fW—d^”be‘`lŽ_s‹^{!‰]‚$†\‹&„[”([ž*Zª,}Z·-|ZÉ.zZã.z[õ-z\ÿ,y\ÿ+z\ÿ*z\ÿ*z\ÿ*z\ÿ*ÿQò[ÞdÏjÇnÀpºp ²q«q)¥p7ŸnBšlK –jT’h\Žfc‹eiˆcp…bx!‚a$€`ˆ&}_‘){_œ+x^§-v^µ.u^Æ/t^á/t_ó.t_ÿ,t`ÿ+t`ÿ+t`ÿ+t`ÿ+t`ÿ+ÿSè^ÙgËmÃq»sµs ­u§u'¡t4›r?•pI ‘nRŒlY‰j`…ig‚hnfu!}e}$zd…&wd)ucš+rb¥-pb³/obÄ/nbÞ/ncò.ncþ-ncÿ,ncÿ+ncÿ+ncÿ+ncÿ+ÿUå`ÓiÈp¿t·w°w¨x¢y$œx2–v=‘tG ŒrOˆpW„o^€md}lkzks wjz#tiƒ&rh)og—,mg£.kf±/ifÁ0ifÛ0igð/igý-igÿ,jgÿ+jgÿ+jgÿ+jgÿ+þXácÏlÄs»x³z«z¤{ž|"˜|/’z;ŒxE ‡wMƒuUs\{rbxpiuop rnx#om&ml‹)jl–+hk¡.fk¯/dj¿0ckØ0ckï/dkü-dkÿ-ekÿ,ekÿ,ekÿ,ekÿ,ô[ÝfËoÀv·{¯~¦~Ÿ™€“€-9ˆ}C ƒ{K ~zSzxZvwasugptnmsv"jr&hq‰(ep”+bp -`o­/_o½/^oÔ/^oí/_oû-_oÿ,`oÿ,`oÿ,`oÿ,`oÿ,ë^ØiÇr¼y³«‚¡‚™ƒ”„Ž„+ˆƒ6ƒ‚@~€I yQu}Xr|_n{ekzlhyt"ex}%bw‡'`v’*]už,[u«.Zt»/YuÑ/Ytì.Ytú-Ztÿ,Ztÿ+Ztÿ+Ztÿ+Ztÿ+æaÑmÃv¹}¯ƒ¦†œ†”ˆ މ‰‰(ƒ‰4~‡>y†G t…Op„Vm‚]icf€jcr `~z#]}„&Z|)X{œ+V{©,T{¹-S{Î-Tzê-Tzù,Tyÿ+Uyÿ*Uyÿ*Uyÿ*Uyÿ*áeÌq¿z´‚«‡¡Š•‹ ‡Ž‚$}1xŽ;sD oŒL kŠTg‰Zdˆaa‡h^†p[…x!X„‚$U„&Rƒš)P‚§*O‚·+N‚Ì+N‚è+Nø*O€ÿ*O€ÿ)O€ÿ)O€ÿ)O€ÿ)ÛjÇuº°‡¦Œœ‘†“€”{•!w•-r•8m”Bi“J e’Qb‘X^_[fXŽmUŽvR€!OŒ‹#M‹˜%K‹¥'I‹µ(H‹Ê(HŠç'I‰÷(Iˆÿ'I‡ÿ'I‡ÿ'I‡ÿ'I‡ÿ'ÑoÁ{µ„«Œ •”‰—~šw›sœo)kœ5fœ?b›G_šO \šVX™\U˜cS˜kP—sM–}J•‰G••!E•¤#D”³#C”È#C”å#C’õ$C‘ÿ$Cÿ$Cÿ$Cÿ$Cÿ$Êu»°‹¤‘š•™ƒt¢n£ j¤f¥%c¥1_¤;[¤DX¤KU£S R£Z O¢aM¢hJ¡qG {D †BŸ“@Ÿ¢>Ÿ²=ŸÆ=Ÿã=ô=œÿ<›ÿ<›ÿ <›ÿ <›ÿ Â|µˆ©ž–“›‡Ÿ{¤o¨c¬_­\­Z®+W®6T®@Q­HN­OK­W I­^ F¬f D¬nA¬x?«„<«‘:« 9«°8«Ã8ªá7©ó7§þ6¦ÿ6¦ÿ6¦ÿ6¦ÿº„®¢–—›‹¡¦s«g¯Z´S¶ Q·O·$M¸0J¸:H¸CF¸KD¸RA¸Z?¸b=¸k :¸u 8· 6·Ž4·3·­2·Á1·Þ1¶ò0´ü0³ÿ0³ÿ0³ÿ0³ÿ²Ž¥•š›Ž¢‚¨u­i³^·S»GÀCÂBÂ@Ã'?Ã2>Ä<<ÄD:ÄM8ÄU6Ä]5Äf3Åp1Å|/ÅŠ-Åš+Ū*ž*ÅÚ*Äð)Âû (Áÿ (Áÿ (Áÿ (Áÿ ¨•›‘¢„©x¯kµ_»T¿IÃ?È6Í 3Î2Ï1Ï'0Ð1/Ð:.ÑC-ÑL+ÒU*Ò_(Ói'Óv%Ó„$Ô”"Ô¦!Õ¹!ÕÒ Óë ÒöÑÿÑÿÑÿÑÿŸ›”¢‡©y±m¸`¾TÃIÇ>Ë5Ð-Õ%Û $Þ#Þ"ß%!à. à7á@áJâSã^ãjäxäˆå𿬿ÀçÝåïãúãúãúãú–¢‰©{±n¹aÀTÆHÊ=Ï3Ó*Ù"Þë ìííî&î-ï5ð=ðFñPò[òi óx ôŠ õœ õ® ö öÙõíõíõíõí‹©}²oºbÂUÉGÎ;Ò1Ø'Ýáèøú ûüü ý# ý) þ0ÿ8ÿAÿLÿXÿfÿwÿ‰ÿ›ÿ«ÿ»ÿÎÿÏÿÏÿϲqºcÃVËHÑ:Ö/Ý%áåé÷ÿ ÿ ÿ ÿÿÿÿÿ#ÿ*ÿ2ÿ<ÿGÿTÿcÿsÿ…ÿ—ÿ¤ÿ²ÿ²ÿ²ÿ²ÿ")ÿ#'ÿ#(ÿ +ÿ1ÿ=ÿIÿVÿbÿnÿxÿ‚ÿ‹ÿ’ÿ™ÿžÿ¤ÿ©ÿ¯ÿ¶ÿ½ÿÇÿÔýåúñ÷úõÿôÿôÿôÿôÿôÿôÿÿ$'ÿ&$ÿ&$ÿ$'ÿ"/ÿ :ÿFÿSÿ_ÿjÿuÿÿˆÿÿ–ÿœÿ¡ÿ§ÿ­ÿ³þ»ýÅúÑ÷äôïñúïÿîÿîÿíÿíÿíÿíÿÿ'#ÿ) ÿ) ÿ(#ÿ)-ÿ'7ÿ%Cÿ#Oÿ![ÿfÿqÿ{ÿ„ÿŒþ“ü™ûŸú¤ùª÷±ö¹õÂóÎðáìîéùèÿæÿåÿåÿåÿåÿåÿÿ+ÿ-ÿ-ÿ. ÿ/)ÿ/4ÿ,?ÿ*Kÿ(Wÿ&bý%mú$wø#€ö#ˆõ#ó#•ò#›ñ#¡ï#¨î#®í#¶ë#¿ê#Ìç#àã$íà$ùÞ$ÿÜ$ÿÛ$ÿ Ú$ÿ Ú$ÿ Ú$ÿ Ú$ÿ ÿ.ÿ1ÿ2ÿ5ÿ6%ÿ6/ÿ4:ÿ1Fû/R÷-]ó,hð+rî*{ì*„ê*‹è*’ç)˜æ)žä)¥ã)¬á)´à*½Þ*ÊÛ*ÞÖ*íÒ*ø Ï+ÿ Í*ÿ Ì*ÿ Ë*ÿ Ë*ÿ Ë*ÿ Ë*ÿ ÿ2ÿ5ÿ8ÿ;ÿ= ÿ<*þ;5÷9Añ6Mì4Xè3cå2mã2và1Þ1‡Ü0ŽÚ0•Ø0›Ö/¢Ô/©Ò/±Ð/º Ï0Æ Í0Ø É1ê Æ1÷ Ã1ÿÁ1ÿÀ1ÿ¿1ÿ¿1ÿ¿1ÿ¿1ÿÿ6ÿ9ÿ>ÿAÿCÿB#õA.í>:ç=Fát Ã={ Á=ƒ ¿<Š ½<»<—º;Ÿ¸;§¶;°µ;»³;ɱ;à®<ñ«<ý©<ÿ¨<ÿ¨<ÿ§<ÿ§<ÿ§<ÿÿ= ÿBÿH ÿK úLìLáJÖJ,ÎK;ÉJHÄHSÀG]¼Ff ºDn ·Cv µC}³B„±A‹°A’®@š¬@¢ª@«©@¶§@Ħ@Ù£Aí AûŸAÿžAÿAÿBÿBÿBÿÿ@ ÿFÿLñOæP ãO ÕOÌQ'ÅQ6¿PCºON¶MX³La °Ji ­Ip«Hx©G§G†¥F£F•¡EžŸE§žE²œE¿šEјEé–Fø•Fÿ”Fÿ“Fÿ“Gÿ“Gÿ“GÿÿBÿJòPáTÙVÓU ÌUÃV"¼W2·V?²TJ­STªQ] §Pd¤Nl¢MsŸLzL›K‰™J‘—J™•I£“I®’I»IÌŽJåJö‹Kÿ‹KÿŠKÿŠKÿŠKÿŠKÿÿEÿMåTÙYÏ[Ê[ÄZ»[µ\.¯[;ªZF¦XP¢VY ŸU`œSh™Ro—Qv•P}“P„OŽN–ŒNŸŠNªˆN· ‡NÈ!…Nâ!„Oó ƒOÿ ƒOÿ‚Pÿ‚Pÿ‚Pÿ‚PÿÿGóQßXÑ]É`Ã`½^ µ`®a*©`7¤^CŸ]M›[U ˜Y]•Xd’WkVrUy‹TˆS‰†S’„Rœ‚R§!€R´"RÄ#}RÞ#|Sñ"|Sþ!{Tÿ!{Tÿ {Tÿ {Tÿ {Tÿ ÿJéTÚ\ÌaÃd¼d¶c ¯d©e'£d4žc@™aJ•_R ‘^ZŽ]a‹[h‰Zo†Yv„X}X†W}V™ {V¤"yV±#wVÁ$vVÚ$uWï$uWý#uXÿ"uXÿ!uXÿ!uXÿ!uXÿ!ÿMåWÓ_Èd¿g·h±g©h£i$žh2™g=”eGdO ŒbW ˆa^…_eƒ^l€]s}]z{\ƒy[Œv[—!tZ¢#rZ¯$qZ¿%pZÕ%o[í%o[ü#o[ÿ"o[ÿ"o[ÿ!o[ÿ!o[ÿ!úOáZÏbÄg»k³l¬j¤kžl!™l/”k:iDŠhM †fU ƒe\€db}bizbpxaxu`€s_Šp_”!n^ #l^­%k^¼&j^Ñ&i^ì%j_û$j_ÿ#j_ÿ"j_ÿ"j_ÿ"j_ÿ"ðRÝ]ËeÀk·n¯o§n ošp”p,o8ŠmB†lK ‚jR ~iY{h`wffufnreupd~mcˆkc’"ibž$gb«%ebº&dbÏ&dbê&ebú$ecÿ#ecÿ"ecÿ"ecÿ"ecÿ"ëUØ`Èh¼n³q«s¢q›r•st*Šs6…r@pH}oP ymWvl^skdpjlmiski|hh†fg!dgœ#bf©%`f¹&_fÍ&_fè&`fù$`fÿ#`fÿ#afÿ"afÿ"afÿ"èXÓcÄk¹q°u§wžu–v w‹x'†w3v=|uFxsN urUqq\npckojinqfnzcmƒalŽ!_kš#]k§%[k·&ZkÊ&Zkç%[k÷$[jÿ#\jÿ"\jÿ"\jÿ"\jÿ"ã[ÎfÀn¶t¬y£{˜yz Š{…|$|1|{;wzDsyL pxS lwZivaguhdtoasx^r\qŒ Zq˜"Xp¦$Vpµ%UpÈ%Upå%Upö$Voÿ#Voÿ"Woÿ"Woÿ"Woÿ"ß_Êi¼r²x©}Ÿ’~Š„€€!{.w€9r€BnJk~Q h}Xd|_b{f_zm\yuYxWxŠTw–!Rv¤"Qv³#PvÆ$Pvã#Puõ#Quÿ"Qtÿ!Qtÿ!Qtÿ!Qtÿ!ØcÅm¸v®}¥‚šƒƒ„„}…y†u‡+q‡6m†?i…Ge„O bƒV _ƒ\\‚cZkW€sT}QˆO~”M~¢ K}±!J}Ä"J}á!K|ô!K{ÿ K{ÿ K{ÿ K{ÿ K{ÿ ÐgÀr´{ª‚ †•ˆ‡ˆ|ŠvŒrnŽ'jŽ2f<cD`ŒL\‹S Z‹Z WŠaT‰hQˆqOˆzL‡…J†’H† F†¯E…ÂE…ßE„òEƒþE‚ÿE‚ÿE‚ÿE‚ÿÊmºx¯¥‡š‹Žt‘n“ i”f•"c•.`•8\•AY”IV”PT“W Q“^ N’fL’nI‘xFƒDBž@­?À?Ü?ñ?Œý?‹ÿ?‹ÿ?‹ÿ?‹ÿÂsµ~ª‡ŸŒ”ˆ“{•l™e›`œ][ž)Xž4Už=REPMMTKœ[ Hœc Fœk C›uA›€>š<š›:š«9š½9šÙ9˜ï9—ü8–ÿ8•ÿ8•ÿ8•ÿ»z¯…¤Œ˜‘•šuh [¤V¥ S¦Q§#O§/L§8J§AH§IF§PC§XA§_?¦h=¦r :¦} 8¦Š 6¥™4¥©3¥»3¥Ô3¤î2¢û2¡ÿ2¡ÿ2¡ÿ2¡ÿ´‚¨Œ’’—†œy¡m¥a©U¬K¯G°E°D±'B±2A²;?²C=²K;²S9²[7²d5²n3²y1²‡/±–.²¦-²¸ ,²Ð,°ì +¯ù +®ÿ *­ÿ *­ÿ *­ÿ ­‹ ’•˜‰}£q¨d­Y±M´B¸;º 8»7¼5¼)4½23½;2½D1¾L/¾U.¾^,¾h*¾t)¾‚'¿‘&¿¢$¿´#¿Ë#¾è#¼÷"»ÿ"»ÿ"»ÿ"»ÿ¤’˜˜Œž€¥s«g°[µO¹D¼:À0Ä*Ç (È'É&É'%É0$Ê9#ÊB"ËK!ËU Ì_ÌlÍzÍŠÍœήÎÅÍäÌôÊüÊÿÊÿÊÿ›™Ÿ‚¦u­h³\¹P½DÁ9Ä0È(Ì ÐÕ ×ØÙ"Ù+Ú4Ú=ÛHÜSÝ_ÝmÞ~ß‘ठภàÒ ßí Þ÷ Ýû Ýû Ýû’Ÿ…§w®jµ]¼PÁDÅ8É.Í%ÑÕÚÞç ç è è! é) ê1 ê;ëEëQë^ënë€ê”ê§ë¼ëÒëéìïìïìy¯k·^¾QÅCÉ7Í-Ñ#ÖÛßã î ö öööõõ%õ.õ7öBöNö]önöö•÷§÷·øÇøÐøÐøÐ{¯m¸`ÀRÈDÍ7Ñ+×!Üàä çïúÿÿÿ þþÿÿ!ÿ)ÿ3ÿ>ÿKÿ[ÿlÿ€ÿ’ÿ¡ÿ­ÿ³ÿ³ÿ³ÿ&ÿ$ÿ%ÿ'ÿ.ÿ:ÿGÿ Sÿ _ÿ kÿ uÿ ÿ ‡ÿ Žÿ •ÿ ›ÿ  ÿ ¥ÿ «ÿ ±ÿ ¸ÿ Áþ Ìü Þù ëõ öó ÿò ÿñ ÿñ ÿñ ÿñ ÿñ ÿÿ#ÿ!ÿ!ÿ$ÿ,ÿ7ÿDÿPÿ\ÿgÿrÿ{ÿ„ÿ‹ÿ’ÿ˜ÿÿ£þ¨ü®ûµú¾øÉõÛòêîõìÿëÿêÿêÿéÿéÿéÿÿ"ÿ"ÿ!ÿ ÿ)ÿ4ÿ@ÿLÿXÿcÿnÿwþ€üˆúŽù•øšö õ¦ô¬ó³ñ¼ðÇíØéèæõäÿâÿáÿáÿàÿàÿàÿÿ%ÿ&ÿ$ÿ%ÿ&%ÿ$0ÿ!;ÿHÿTý_ùi÷sô|ò„ñ‹ï‘î—ìë£éªè±çºåÅãÕßèÜõØÿÕÿÔÿÓÿÒÿÒÿÒÿÿ)ÿ*ÿ)ÿ,ÿ,!ÿ,+ÿ)7ý'C÷%Oó#Zï"dì!né!wç!å!†ä!â ”á šß  Þ §Ü!¯Ú!¸Ø!ÃÕ!ÓÑ"çÍ"ôÊ#ÿÈ#ÿÇ#ÿÆ#ÿÆ#ÿÆ#ÿÆ#ÿÿ,ÿ.ÿ0ÿ3ÿ3ÿ2%ú00ò.<ì,Iç*Uã*_à)iÝ)rÚ(z×(‚Õ(‰Ó(Ñ(–Ï(œÎ(£Ì(«Ê(³É(¾Ç(ÌÅ)âÁ*ñ¾*þ¼*ÿº*ÿº*ÿ¹*ÿ ¹*ÿ ¹*ÿ ÿ0ÿ2 ÿ6 ÿ8ÿ9ù7ï5(ç35à2BÛ2OÕ1ZÐ1dÍ0mË0uÉ0|Ç/ƒÅ/ŠÄ/‘Â/—Á/ž¿/¦½/¯¼/¹º/Ǹ0ݵ0î ²0û °0ÿ ®0ÿ ®0ÿ ­0ÿ ­0ÿ ­0ÿ ÿ3 ÿ6ÿ< ÿ> ý=ï<ä9Û9-Ò:<Í:IÈ9TÄ9^Á8g¿7o½7v»6}¹6„·6‹¶5’´5š ³5¡ ±5ª ¯5´ ®5Á ¬5Ô ©6ê ¦6ø ¥6ÿ£7ÿ¢7ÿ¢7ÿ¢7ÿ¢7ÿÿ7ÿ;ÿ@òBéB å?Ø>Î@'ÇA6ÂAD½AO¹@Y¶?a´>i±=q¯=x®< ¬<† ª; ©;• §; ¥;¦ £:°¢;¼ ;Íž;æ›<õš<ÿ™<ÿ˜<ÿ˜<ÿ˜<ÿ˜<ÿÿ:ÿ@ïEáHÙHÓF ÌEÄG"½H1¸H?³GJ°FT¬E]ªDd§Cl¥Bs £Bz ¡A  Aˆ ž@œ@˜š@¡˜@¬—@¸•@È“@á‘AóAÿAÿŽBÿŽBÿŽBÿŽBÿÿ<ùDäJØNÎOÉMÃK»MµN-¯N:«MF§LO¤KX¡J`žIg œHn šGu ˜F|–Fƒ”E‹’E”EŽE¨ŒE´‹EÄŠE܈Fð†Fý†Fÿ…Gÿ…Gÿ…Gÿ…Gÿÿ?ìHÝOÏSÆUÀS»Q ³R­S)¨S6£RBŸQKœPT™O\–Nc ”Mj ‘LqKxK‹J‡‰J‡Iš…I¥ƒI±‚IÀJÖJí~Kü~Kÿ}Kÿ}Kÿ}Kÿ}KÿÿCæLÖSÉXÀYºX´V ¬W¦X%¡X2W>˜VH•UQ’TXR_ ŒRf ŠQmˆPt…O{ƒO„NN—}N¡{M®zN½xNÑwNëwOúvOÿvOÿvOÿvOÿvOÿøFâPÐWÄ\»^´]®Z¦[ \"›\/—[;’ZEYM‹XUˆW\ †Vc ƒUjTq~Tx|S€zR‰xR”vRŸtR«rRºqRÍpRèpSùpSÿpSÿpSÿpSÿpSÿïIÝSËZÀ_·b¯a¨^¡_›`–`,‘`8^B‰]K…\R‚[Y €Z` }Yg{XnxXuvW}tW‡rV‘oVœnV©lV¸kVËjVæjW÷jWÿjWÿkWÿkWÿkWÿëLØVÈ^¼b³e«e£bœb–c‘d)Œc5ˆb?„aH€`P}_W z^] w]d u\ks\rp[{n[„lZjZšhZ§fZ¶eZÈeZäeZöeZÿeZÿeZÿeZÿeZÿèOÓYÄa¹f°h§iže—f ‘gŒh'‡g2ƒf=eF{dMxcT ub[ raa paim`pk_yi_‚g^e^˜c^¥a^´`^Ç`^ã`^õ`^ÿ`^ÿa^ÿa^ÿa^ÿäRÏ\Àd¶i¬l£l™i’j Œj‡k$‚k0~j:ziCvhKsgRpgY mf` kefhdnfdvdc€bc‹`b—^b¤\b²[bÅ[bá[bô[bÿ\bÿ\bÿ\bÿ\bÿàUË_½g²l©pŸo”lŒm†n‚o!}o-yo8unArmInlPkkW ik^ fjedilait_h~]g‰[g•Yf¢Wf°VfÃVfßVfóWfÿWfÿWfÿWfÿWfÿÛYÇbºj¯p¦sšsp‡qr|sxs*ts5ps?mrGjqNgqU dp\ boc_oj]nrZm|Xm†Vl“Tl Rk¯QkÁQkÜQkñRkþRjÿRjÿRjÿRjÿÔ\Ãf¶n¬t¢w–v‰uvzwvxry'oy2kx<hxDewLbwS_vZ ]ua ZuhXtpUsySs„QrOržMq­Lq¿KqÙLqðLpýMpÿMoÿMoÿMoÿÎ`¾j²r¨x{z„zz{t| o~l~$i/f9bB_~I]}PZ}W W|^ U|e R{nPzwNz‚KyŽIyœHx«Fx½FxÕFwïGvüGvÿGuÿGuÿGuÿÉeºo®w¤}˜‹~slƒ h„e… b†,_†6\†?Y…FW…NT…UR„\ Oƒc Mƒk K‚tH‚FŒDšB€©A€º@€ÒAíA~ûA}ÿA}ÿA}ÿA}ÿÂjµuª}Ÿ‚’ƒ…„y…j‰dŠ`Œ][Ž'XŽ2UŽ;SŽCPŽJNRLYIŒ`GŒh E‹r B‹}@Љ>Š˜<Ч;Џ:ŠÏ;ˆë;‡ú;†ÿ;†ÿ;†ÿ;†ÿ¼q¯{¥ƒ™‡Œˆ‰sŒe\“W• T–R–"P—-M—6K—?I—GG—NE–UC–]A–e>•o<•z :•‡ 8•• 6”¥ 5”¶4”Ì 4“é 4’ø4ÿ4ÿ4ÿ4ÿµxª‚žˆ“†Žym“a—U›MžIŸGŸF &D 0C¡:A¡B?¡I=¡Q;¡Y9¡a7 k5 v3 ƒ1 ’0 ¢. ³. É.Ÿç-÷ -œÿ -›ÿ -›ÿ -›ÿ ¯€£‰—Ž“•r˜fœ[ O¤E§>© <ª:ª9ª)8«27«;5«C4¬K2¬S1¬\/¬f-¬q+¬*¬Ž(¬ž'¬°&¬Å&«ä%©õ%¨ÿ%§ÿ%§ÿ%§ÿ§‰›‘”„™xžk¢_¦SªH­=°4³/µ-µ,µ +¶)*¶2)·:(·C'·L&¸U$¸_#¸k"¸x ¸ˆ¸™¹«¹À¸ß¶òµü´ÿ´ÿ´ÿŸ”•ˆ›{¡n¦b«V°J³?¶5¹,¼$¿ ÂÂÃ&Ã/Ä8ÄAÄJÅUÅaÆoÆÆ‘ǤǹÇÔÆîÄúÃÿÃÿÃÿ—–‹œ~¢q©d¯X´K¸@»5¾+Á#ÅÉÌÐ Ñ Ñ Ñ! Ñ* Ñ4 Ò> ÒI ÓU ÓbÓrÔ„Ô˜Ô«ÕÀÕÜÕíÕöÕöÕöŽ€¤s«f±Y¸L½?À4Ã*Ç!ÊÎÒ Ö ÛÜ ÜÝÞ Þ(ß1à<áGâTãcãtäˆä›å®åÁåÕæçæçæçƒ¤u¬h³Z»MÁ@Ä3È(ÌÐÔÙ Ýáäåæ çèéê%ë.í9ïEðSñdñvòŠóœó­ô»ôÈôÈôÈw­jµ\½OÄ@É3Í'ÑÖÜàãæêîîïð ñóôö ø*ú5ýCþRÿcÿvÿ‰ÿšÿ¦ÿ°ÿ°ÿ°ÿ#ÿ!ÿ!ÿ $ÿ +ÿ7ÿDÿQÿ]ÿhÿrÿ{ÿƒÿŠÿ‘ÿ–ÿœÿ¡ý¦û¬ù³÷»õÅóÑòäññïúîÿîÿíÿíÿíÿíÿÿ ÿÿÿÿ)ÿ 4ÿ AÿMÿYÿdÿnÿwÿ€ÿ‡ÿý“û™ùž÷¤õªó°ñ¸ïÂíÏëãêïèûçÿæÿæÿæÿæÿæÿÿÿÿÿÿ%ÿ0ÿ=ÿIÿ Uÿ `ÿ jý sû |ù ƒ÷ Šõ ô –ó ›ñ ¡ï §í ®ë ¶è Àæ Íä ââ ðß ûÞ ÿÜ ÿÜ ÿÛ ÿÛ ÿÛ ÿÿÿÿÿÿ"ÿ,ÿ8ÿDþPù[õfóoðwîì†êŒé’è˜æžå¥ã¬á´à¾ÞÌÚáÕðÒûÏÿÎÿÍÿÍÿÌÿÌÿÿ"ÿ"ÿ!ÿ"ÿ"ÿ 'ÿ2ø>òKîVê`çjärâzà‚ÞˆÜە֢ٛԩұлÎÉÌÞÈîÅûÃÿÁÿÀÿÀÿÀÿÀÿÿ&ÿ% ÿ( ÿ)ÿ(þ& ô$+ì!8æ DáPÝ[ÙeÕmÒuÐ}΃̊ËɗȞƥŠ­à ·Á ÄÀ!Ö¼"ê¹"ø¶"ÿµ#ÿ´#ÿ³#ÿ³#ÿ³#ÿÿ) ÿ*ÿ.ÿ/ ÿ-ó+è("à&/Ù&=Ò'JÍ'UÊ(_Ç(hÅ(oÃ'wÁ'~¿'„¾'‹¼'’»'™¹' ·'©¶(³´(¿³(ϰ)æ­)ö«*ÿ©*ÿ¨*ÿ¨*ÿ¨*ÿ¨*ÿÿ-ÿ0ÿ3ö4ï2 è.Ü,Ñ.(Ë/7Æ0DÁ0O¾0Y»0b¸0j¶/qµ/x³/±/†°/®.”­.œ«.¤©/®¨/º¦/ʤ0â¡0óŸ0ÿž1ÿ1ÿœ1ÿœ1ÿœ1ÿÿ0ÿ5ï8â:Û9Ö5 Î4Æ6"¿81º8?¶8J³8T°7]­7d«6l©6s¨6y¦5€¤5‡£5¡5—Ÿ5 ž5ªœ5¶›5Å ™5Ý –6ï ”6ý “7ÿ ’7ÿ ’7ÿ ’7ÿ ’7ÿ ÿ3ö:ä?ØBÎBÉ>Ä;»>µ?,±?:­?E©?O¦>X£=_¡=gŸ^qF\pMYpTWp[UobSoj Pns Nn~LmŠJm˜Il§Hl¸GlÍGlêHkúHkÿHjÿHjÿHjÿÇ^¸g¬n¡r“r‡qzqqrktfucv`w(^w3[x<YwCVwKTwRRvYPv`NuhKuq It| GtˆEs–Cs¥Bs¶AsËBrèBrøBqÿCpÿCpÿCpÿÁc³l¨s›vŽuvuvixcz^|\}Y~$W/U8S@PHN~OL~VJ~]H}eF}nC|y A|† ?{” >{£<{³<{È…v;…ƒ9…‘ 8„  6„± 6„Æ 6ƒä 6‚ö 6ÿ 6€ÿ 6€ÿ 6€ÿ ¶oªxŸ~ƒw€k‚^‡UŠNŒJŽHG%E/D8B@@G?O=V;_9h7s5€3Ž1ž0ޝ/ŽÃ/Žá/Œô/‹ÿ/Šÿ/Šÿ /Šÿ °v¥˜„Š„}…p‡eŠZŽO’F•A˜ >˜=™;™(:š19š:7šB6šJ5šR3šZ1šd/šo-š{,šŠ*šš)š¬(šÀ'™Þ'—ò'–ý'•ÿ'•ÿ'•ÿ©~ž…’‰„ŠvŒj^“T—I›@Ÿ7¢2£1£0¤!.¤*-¤2,¥:+¥C*¥K)¥T(¥^&¥i%¥v#¥…"¥– ¦¨¥»¥×¤ï¢û¡ÿ¡ÿ¡ÿ¢†—Œ‹}‘o”c˜WM¡C¥8¨0«(®$¯#¯!¯! °)°1°:±B±L±V±a²o²~²²¢²¶²Î±ë¯ù®ÿ®ÿ®ÿš’„—ušhŸ[£P¨E¬;°1²'µ ¸º¼¼¼½&½.½7¾A¾L¾W ¾e ¿t ¿† ¾™¾¬¾Â¾ß¾ð½ú½ü½ü“”‡™zŸl¥`ªS¯G³<¶1¸'»¾ÁÄ ÈÉÉÉÉ$Ê,Ê6Ê@ËLËYËhËy̌˟˳ËÈÌâÌïÌñÌñŠš|¡o§b­U³H¸;»0¾&ÁÄÈË ÎÒÓ ÓÔÕÖ"×*Ù4Ú?ÜKÜZÝjÝ}ݑݤ޶ÞÈÞÞÞâÞâ¢q©d°V·I¼<À/Ä$ÇËÏ ÒÖÛÞßà áâãåæ'è1ê=ìKìZílî€î”î¥î´îÂîÆîÆtªf²X¹KÀ=Å/É$ÍÑÖ ÛÞáåèéêëí ïðòô#÷.ù;ûJü[ýmý€þ“þ¢þ­þ¯þ¯ÿÿÿ ÿ ÿ(ÿ5ÿAÿNÿZÿeÿnÿwÿþ†üŒû’ù—øœ÷¢ö§õ­óµò½ñÉïÜîëí÷ìÿëÿêÿêÿêÿêÿÿÿÿ ÿÿ%ÿ1ÿ>ÿJÿVÿaÿkýsú{÷ƒõ‰ôò”ñ™ðŸî¤í«ì²êºèÆçÖåèäõãþâÿáÿáÿáÿáÿÿÿÿÿ ÿ "ÿ-ÿ9ÿFÿQþ\úföoòwï~í…ë‹ê‘è–çœæ¡ä¨ã¯á¸ßÃÝÑÛæÙó×ýÕÿÔÿÔÿÔÿÔÿÿÿÿÿÿÿ(ÿ 4ÿ AùLõWñaíjéræzäâ‡àߒݘ۞٥׭ԵÒÀÐÏÎåÌ ôÊ ÿÈ ÿÇ ÿÇ ÿÆ ÿÆ ÿÿÿ ÿ ÿÿÿ"û.ó:íFè Rå \á eÞ mÛ uØ |Õ ‚Ó ‰Ñ Ð •Î œÍ£Ë«É´ÈÀÆÏÃæÀõ½ÿ¼ÿ»ÿºÿºÿºÿÿ ÿÿÿ ÿøî&æ3à?ÚKÔVÐ_ÎhËoÉwÇ}ƄĊÑÁ˜ÀŸ¾§¼°»¼¹Ë·â³ò±ÿ¯ÿ®ÿ®ÿ­ÿ­ÿÿ"ÿ"ÿ%ü$÷! ìáØ*Ð8ËEÇPÃZÀb¾j¼qºx¹~·…¶Œ´“³š± £° ¬® ·¬!Æ«!ݧ"ï¥"ý£#ÿ¢#ÿ¢#ÿ¡#ÿ¡#ÿÿ%ÿ(ò*å+ß(Ü! Ò!É$$Ã%2¾&?º'J·'T´']²'d°'l®'r­'y«'ª'†¨'ާ'–¥'ž£(¨¢(³ (ÁŸ(Õœ)ìš*ú˜*ÿ—*ÿ—*ÿ–*ÿ–*ÿÿ(õ.å3Ú5Ð3Ì-Æ*¾-¸.,³/:¯/E¬0O©/X§/_¥/f£/m¡/s .zž..‰›.‘™.š˜.¤–/¯•/½“/Ï‘0è0ø1ÿ1ÿŒ1ÿŒ1ÿŒ1ÿÿ-ê5Ü:Î=Æ<À7»3 ³4®6'©74¥7@¢7JŸ7S6Z›6a™6h—5o•5u”5|’5„55–5 ‹5«Š5¹ˆ5ʇ6å…6ö„7ÿƒ7ÿƒ7ÿ‚7ÿ‚7ÿô2ã;ÒAÆD½C·?±; ª;¥<" =0=;™=E–=N”kÿ >kÿ º`­i n‘m„mxmlnap[rVt RuPvNw'Lw1Kx9IxAHxIFxPDwWBw_@wh>ws³<¬8§3¢24™5*•55’5@5I5P‹5W‰5^‡5d…4k„4r‚4y€4‚~4‹}4–{5¡y5®x5¾w6Ôv6ít7üt7ÿt7ÿt7ÿt7ÿç5Ò=ÃB¸D¬B¤>Ÿ9š8”::&;1Š;;‡;D„;L‚;S€:Z~:`}:g{:ny:uw:~v:ˆt:“r:žq:«o;»n;Ïm;êm<úl<ÿl<ÿl<ÿl<ÿâ9ÌB¾G±H¥FC—?’> ?‰?!…@-‚@7@@}@H{@Oy@Vw?]u?cs?jq?rp?zn?„l?k?œi?©h?¸g@Ìf@èf@ùe@ÿe@ÿe@ÿe@ÿÜ>ÇF¹K¬L J—G‘C‹C†C‚D~D){E4yE=vEEtDLrDSpDYnD`lCgkCoiCwgCfCdC™bC§aD¶`DÊ`Dæ_Eø_Eÿ`Eÿ`Dÿ`DÿÖAÃI¶N§O›M’KŒG…G€G|HxH&uI0sI:pIBnIIlHPjHVhH]fHdeHlcHuaG`GŠ^H—]H¥[H´[HÇ ZHäZIöZIÿZHÿZHÿZHÿÑE¿L²R£Q—PN†J€JzKvLrL#oL-mM6jL?hLFfLMdLSbLZaLa_Li^Lr\L|ZLˆYL•WL£VL²ULÆ ULâ ULõULÿULÿVLÿVLÿÌH¼P¯U T“S‰QMzNuO pOmP jP*gP3eP<cPCaPJ_PQ]PX\P_ZPgYPpWPzUP†TP“RP¡QP± PPÄ PPá PPôQPÿQOÿQOÿQOÿÉK¹S«WœVU…T|PuQpR kShTeT'bT1`T9^TA\THZTOYTVWT]VTeTTnRTxQT„OT‘NT LT¯LT KTß LTóLSÿLSÿMSÿMSÿÅN¶V§Z˜Y‹XWwTpUjVfWbW`X$]X.[Y7YY?WYFVYMTYTSY[QYcOXlNXvLX‚JXIXžHX®GXÀGXÝGXòGWÿHWÿHWÿHWÿÁQ²Y£\”[‡[}ZrXkYeZ`[]\Z\!X]+V]4T^<S^DQ^KP^RN^YL^aK]jI]tG]€E]D]œC]¬B]¾B]ÚB\ñB\þC[ÿC[ÿC[ÿ½U¯]Ÿ_^ƒ^x]m\e]__Z` WaUbRb(Qc1Oc9NcALcHKcOIcVGc^EcgDcqBc}@b‹?bš>bª=b¼`ÿ>`ÿ>`ÿ¹Y«aša‹aataia_bYdTf QgNgLh$Ki-Ii6Hi>FjEEjLCjTBj\@ie>io¬=¡:š7•31 Œ1‡2 „3+353>}3F{3My3Tw3Zv3at3gr4oq4wo4n4Œl4˜j5¥i5³h5Æg6âf6õf6ÿf6ÿf6ÿf6ÿØ7Ä>µB¦A›?“<8ˆ6„7€7|8'z81w9:u9Bs9Iq9Pp9Wn9]l9dk9ki9th9~f9‰d9•c:¢b:±a:Ã`;à_;ó_;ÿ_;ÿ_;ÿ_;ÿÑ;ÀB°E¡D•C@‡=‚;};y<u=#s=-p=6n=?l=Fk=Mi=Sg=Zf=ad=hc=qa>{_>†^>“\> [?¯Z?ÁZ?ÝY?òY?ÿY?ÿY?ÿY?ÿÌ?¼F«HœG‘FˆD‚@|?w@ s@oA lA*jA3hA;fBCdBJcAPaAW`B^^Be]Bn[BxZB„XBWBžVC­UC¿TCÚTCñTCþTCÿTCÿTCÿÈB¸I§K˜JIƒG}CvCqD mDjEgE'dE0bE8`E?_EG]EM[ETZF[YFcWFlVFvTFSFŽRGœPG«PG½OGÖOGïOGýOGÿOGÿPGÿÄEµM£M•L‰KJxFqGlGhHdHaI$_I-]I5[I=YIDWIJVIQUJYTJaRJiQJtOJNJŒMJ›LKªKK¼JKÓJKîKKýKJÿKJÿKJÿÁH²P O‘O…N{MsIlJgKbL_L\M!ZM*XM2VM:TMASNHRNOPNWON_NNgLNrKN}IN‹HN™GO¨FOºFOÑFOíFNüFNÿGNÿGNÿ½L®RœQQQwPnLgNbO]P ZPWQUQ'SQ0QR8PR?NRFMRMLSUJS]ISeHSoFS{ES‰CS—BS§AS¸ASÏASìARûBRÿBRÿBQÿºOªT˜T‰T}SsSiQbR\SXT TURUOV$NV-LW5KW<JWDHWKGXRFXZDXcCXmAXy@X†>X•=X¥c>=cEg”4™*ž!¢¦© ¬¯²³³ ³´´µ"¶+·5·@¸N¸]¸n¸‚¸—¸ª·¾·Ò·æ·êvˆg‹ZN–Bœ7¢,§"«¯³ ¶¹¼¾¾¿À ÁÂÃÄ Å)Ç4ÈBÉQÉbÉuɊɟʱÊÁÉÑÉÙn“`˜SžF¤:«/°$µ¸¼ ¿ÁÄÈÊÊÌÍÎÐ ÑÓÖÚ(Ý4ÞCßTßgà|à‘à¤à²à¾àÃfŸY¦L­?´2¸$¼¿ÃÇÊÍÑÕØÙÛÝßáã åçêí'ð5ñFòXókó€ô”ô£ô®ô²ÿÿÿÿÿÿ,ÿ9ÿEÿPÿZþcûkùr÷xõ~ô„ò‰ñŽð“î™íŸì¦ê®è¸æÅåÛãíâûâÿáÿáÿáÿáÿÿÿÿ ÿÿÿ(ÿ4þAûL÷Vô_ñfïmìtêzéç…æŠåã•á›à¢ÞªÛ´ÙÀÖÐÓèÒ÷ÑÿÑÿÐÿÐÿÐÿÿ ÿ ÿ ÿÿû"÷/ô;ðGíQéZåbâiàoÞuÜzڀ؅ՋӑїϞͦ˯ɺÇÉÅâÄòÃþÂÿÁÿÂÿÂÿÿÿÿÿ ùñë)ç6ãAßKÛTÕ\ÒcÏjÍpËuÉ{ȀƆŌÓÁš¿¢½«»¶¹Ä·Ú¶í´ú´ÿ´ÿ´ÿ´ÿÿÿÿÿì åÞ"×/Ñ;ÍEÊNÆWÄ^Ád¿j½p¼uº{¹·‡µŽ³•²ž°§®²¬¿ªÑ¨è¨÷§ÿ§ÿ¦ÿ¦ÿÿÿñèáÕÍÇ'Ã3¿>¼H¹Q¶X´_²e°j¯p­v¬|ª‚©‰§‘¥š£¤¡® »žÍæœô›ÿšÿšÿ™ÿÿ ñäÙÎ È Â¼·,³7°B­JªR¨Y¦_¥e£k¢q wŸ~…› Žš —˜ ¡– ¬• º“ Ì’ å öÿŽÿŽÿÿöæÖǾ¹· ± ¬ $¨0¥;¢DŸLS›Zš`˜f—l•r“y’Š”Ÿ‹ªŠ¸ˆˆæ…÷ƒÿƒÿ‚ÿ‚ÿíÜ!Ê%»"±«©¥ œ*™5–>”G’NUŽ[Œa‹g‰mˆt†|…†ƒ›€§~µ}Ç|âzõyÿxÿxÿxÿå"Ð)¿,°*§' #š•‘$Ž/Œ9‰A‡I…PƒV‚\€bi} p| xz y!Œw!—u"¤t"²s#Ãr#ßp$óo$ÿo$ÿn$ÿn$ÿÝ)È0·2¨0ž.—*“'# Œ#ˆ$„%*‚%4€&=}&D|&Kz&Rx&Xw&^u&et'lr'tq'}o(ˆn(”l(¡k)¯j)Ài*Ûg*ñg+ÿf+ÿf*ÿf*ÿÔ/Â6¯6¡5–40Š-‡*ƒ)*|+%y+/w,8u,@s,Gq,Mp,Tn,Zm,ak-hj-ph-zg.…e.‘d.žb/¬a/½a0Õ`0ï_0ý_0ÿ_0ÿ_0ÿÍ4¼;©:›:8‰5ƒ20{/w0t0!q1+o14m1<k1Cj1Jh2Pg2We2]d2eb2ma3w_3‚^3Ž]4œ[4ªZ5»Z5ÒY5íY5üX5ÿX5ÿY5ÿÈ8·>¤>–=‹<ƒ:}7x4t4 p5m5j5'h60f68d6?c6Fa6M`6S^7Z]7b\7jZ8tY8W8ŒV9™U9¨T9¹S:ÏS:ëS:ûS:ÿS9ÿS9ÿÄ<²A @’@†?~=x:s8n9j9g9d:$b:,`:4^:<];C[;JZ;PX;WW;_V·N>ÍN>éM>úN>ÿN=ÿN=ÿÀ?®CœCŽC‚Bz@s=m<h=d=a>^>!\>)Z>1X>9W>@U?FT?MS?UR@\P@eO@oNAzMA‡KA–JA¥IBµIBËIBèIBùIAÿIAÿIAÿ½CªE˜EŠEEvCo@h@cA_A \AYBWB&UB.SB6QB=OBCOCKNCRMDZLDcJDmIExHE…GE”EE£EF´DFÉDFçDEøDEÿEEÿEEÿºF¦H”H†H{GrFjBcC^DZE VETFQF#OF+NF3LG:KGAJGIIHPHHXGHaFIkDIvCIƒBI’AI¢@I³?JÇ?Jå?I÷@Iÿ@Hÿ@Hÿ¶I¢J‘JƒJwJnIeE^GYHUIQJOJLJ!JK)IK1GK8FL?ELFDLNCMVBM_AMh@Mt>M=MQS=R\U+=V24\F3]N1]W0]a/]l.]z,]‰+]š*]«*]¿)]Þ*\ò*[þ+[ÿ+Zÿ£UUUrUgV^VTWLYE[?]:_6` 4a2b1b#0b+/c2.c:-cB,cJ*dS)d](di'dv&d†%d—$d©#d½"dÚ#cñ#bý$aÿ$aÿœX‰XzYnYcYZZP\H^A`:c4f/h ,i*i)j(j&'j.&k5%k=$kF#kO"lY lelrl‚l”l¦kºkÔjîiühÿhÿ•\ƒ\u\i]_]V^LaCdk7n0q)u"x{}}}~"~*~1~:~DNZh x Š ~ ~° }Æ }ä |ô {ý zÿ†ewejeafVhLkBo9s1w*z#~„‡ ‰ ‰ ‰ ‰# ‰+ ‰3‰=‰H‰T‰a‰q‰ƒ‰–ˆ©‡¾‡Ú†ì†õ†ú~jqjgk[lPpFtíQîeïzïðŸð«ð³ÿÿÿÿÿÿ)ÿ5ÿAÿMþVû_øfömôtòyñð„î‰íë•ê›è¢æªå³ãÀáÒàêßùÝÿÝÿÝÿÞÿÞÿÿ ÿ ÿ ÿÿÿ$þ1û=øHôRðZíbëiéoçuåzãâ…àŠÞÜ–ÚØ¥Õ¯ÒºÐÊÎãÍôËÿËÿËÿËÿËÿÿÿÿÿ ü÷ò+ï7ëBçLäUà]ÝdÚjØpÕuÒzЀυ͋˒əǡŪõÁÿھî½ü¼ÿ¼ÿ¼ÿ¼ÿÿÿÿùñêä%ß1Û<×GÒPÎWË^ÉeÆjÅpÃuÁzÀ€¾†¼º”¹œ·¥µ°³½±Ï¯è®ø®ÿ­ÿ­ÿ­ÿÿÿýîã ÚÑÌ+È6Å@ÂJ¿R¼Yº_¸e¶j´o³u±z°®ˆ­«˜©¡§«¥¸£È¢â¡ó þ ÿ ÿ ÿÿöêàÓɽ$¹/¶:´C±L®S¬Yª_©d§j¦o¤u£{¡‚ Šž“œš§˜´–Õܔï“û“ÿ“ÿ’ÿùê Ü Ë Â¼ ¶±®(ª3§=¤E¢M SžYœ_›dšj˜p—v•~“†’™Ž¤Œ±‹À‰Öˆíˆú‡ÿ†ÿ†ÿïÞʼ³® « §¢ Ÿ,œ6™?— G• N“ T‘ Z _Ž e k‹ rŠ yˆ ‚‡ Œ… —ƒ ¢ °€ À Ø}ï|ý{ÿ{ÿ{ÿæÑ½¯¦¡ž ˜”%‘/9ŒAŠHˆO‡U…[„a‚g€nu}~|ˆz”x w®u¾tÕsîqýqÿqÿpÿÜÆ%³%¥#œ!–’‘ ‰†)ƒ3<€C~J|PzVy\wbvitqszq„onl«k»jÐiìhûhÿgÿgÿÑ&½*«**“(%ˆ"†ƒ|$z.w6v>tErKqQoXn^lek mi vh!f!e"šc"¨b#¸a#Í`$é`$ú_$ÿ_$ÿ_$ÿÊ,¶/¤/–/Œ-…*€(}$z" v#s# q$)o$2m$:k%Aj%Gh%Mf%Te%Zd&ab&ia&r_'}^'Š](—[)¥Z)µZ*ÊY*çX*øX*ÿX*ÿX*ÿÅ1¯3ž33†2/y-u*r( o(k)i)%g*-e*5c*=b*C`*J_+P^+W\+^[,fY,oX-zW-‡V.•T.£S/³S/ÇR/åR/÷R/ÿR/ÿR/ÿÁ6ª6™6‹65y3s1o/k.h-d.b.!`/*^/1\/9[/@Y/FX/MW0SV0[T1cS1lR2wQ2„O3’N3¡M3±M4ÅL4ãL4öL4ÿL4ÿL3ÿ»9¦9•9‡9|9t7n4i3e2a2 ^2\3Z3&X3.V35U4<S4CR4JQ4PP5XN5`M6jL6uK7‚J7I8ŸH8°G8ÃG8áG8õG8ÿG8ÿG8ÿ·;¢<‘<ƒ<x<p:j7d6`6\6 Y7V7T7#R7+P72O89M8@L8GK8NJ9UI9^H:hG:sF;€E;ŽD<žC<®B<ÂB=ßB<óB<ÿB<ÿB;ÿ³=ž>>>u>l=f:`9[:W:S;Q;N; L;(K;/I<6G<=G\C>fB?qA?~@??@œ>@­=@À=@Ý=@ò=@ÿ>?ÿ>?ÿ®@š@‰A|AqAh@a<[=V>R>N?L?I?G@%F@,D@3C@:BABAAI@AQ?BZ>Bc=CoE8=E?*VF)VO(WY'Wd&Wr%W$W’#W¤"W·"WÏ"Wì#Vú#Uÿ$Uÿ–M„NuNiN_OVOMPER?S9V3X/Z+[*[(\'\$&\+%\3$]:#]C"]L!]V ^a^n^~^^¡^´]Ì]é\ù[ÿ[ÿQ~QpQdR[RRSJTAW;Y5[.^(`$b "c!cd d'd.d6e>eGeQe]ejeze‹eže±eÈdçc÷bÿbÿ‰TxUkU`VWVOWFY=\6_0b)d#gjllmm!m)m0m9nBnLnXnenu n‡ nš m­ m là kó ký jÿ‚YrYfY\ZTZJ\A_9c1f*i$loru www w# w* w3 w< wGwRw_wow€w”v§v»uÕtëtötü{]m]b^Y^N`Ec¬M¬]¬p¬…¬›«¯«Ã«ÙªèduWyK~?„4Š)–›Ÿ £§ª®°°±²´µ ¶·¹»&¼3½A½R½d¾y¾½¤½·½Æ½×\P…D‹8’,™!Ÿ¤© ®²¶¹½¿¿ÀÁÃÄÆ ÇÉËÎ&Ð5ÑEÒWÒkÓ‚Ó—Ó©Ò¸ÒÄUŒI“=š0¢%¨®´ ¹½ÁÄÈËÍÍÏÐÒÔØÚÝ àãæ'ç8èJé]êrëˆë›ì¨ì²ÿ ÿ ÿ ÿÿÿ&ÿ2ÿ=ÿHûRøZöbóiñoðuîzìë„éŠèæ–äâ¥á¯ß»ÝËÛæÙ÷ØÿØÿ×ÿ×ÿÔÿÿÿÿÿ ÿþ!ú,÷8ôCðMíUê]çdäjâpàuÞzÝۅًՑәѠϪ͵ËÄÉÝÈñÇÿÆÿÆÿÆÿÇÿÿÿÿÿ øñì'é2æ=âGÝPÙXÕ_ÒeÐjÎpÌuÊzÉDžŌÔÁœ¿¥½°»½ºÐ¸ë·û¶ÿ¶ÿ¶ÿ¶ÿÿÿýóéáÛ!Õ-Ñ7ÎAÊJÇRÄYÂ_Àe¾j¼o»t¹z·€¶‡´Ž²—° ®ª­·«È©ã¨õ§ÿ§ÿ§ÿ¦ÿÿþñå× ÍÇÂ&¿1¼;ºD·L´S²Y±_¯d­i¬oªt©z§¦‰¤‘¢› ¥ž²Á›Úšï™ý˜ÿ˜ÿ˜ÿýðáÑÆ½ ·³ °+­5«>¨F¦M¤T£Y¡_ džin›uš{˜ƒ–Œ•–“¡‘­»ÏŒé‹øŒÿŒÿŒÿóâÌ¿·±«§¤$ .ž7œ@šG˜N–T•Y“^’diov‹~Šˆˆ’†…©ƒ¸Ê€å€õÿÿÿè о±¨ £  œ˜•'’19ŽAŒHŠN‰T‡Y†_„dƒkr€z~„}Ž{šy§xµvÈuãu ôt ÿs ÿs ÿÝı¥œ–” “ Ž‹ ˆ *… 3ƒ ; B€ I~ O} T{ Zz `x gw nu vt €r Œp ™o¦mµlÉkæj÷iÿiÿiÿй¨›’‹ˆ‡…~${-y6w=vDtJsPqVp\nbmjksi}h‰f–e£c³bÆbãaö`ÿ`ÿ`ÿÇ"°#Ÿ$’#‰"‚ ~|z wtq(o0n8l?kEiKhQfXe^cfbo`y_…]’\¡[°ZÃYàXôXÿXÿXÿ¿'©(™(‹(‚'{%v#s q nki#g,e3c:bA`G_M^T\[[bY kX vV!‚U!T"žS"®R#ÀQ#ÝQ$òQ$ÿQ$ÿQ#ÿ¹+£,“,†-|,t*o(k%i"f!c"a"_#']#/\#6Z#=Y$CW$JV$PU$WS%_R%hQ&sO&N'M(œL(¬K)¾K)ÚJ)ñJ)ÿK)ÿK)ÿ³.ž/Ž00w/o.j+e*c'_' \'Z'X($V(+U(2S(9R)@P)FO)MN)TM*\L*eJ+pI+|H,‹G-šF-ªE.¼E.ÖE.ïE.þE.ÿE-ÿ®1š2‰3|3r3k1e/`-],Y, V,T,R, P,(N-/M-6L-<J-CI-JH.QG.YF/cE0mC0zB1‰A1˜A2¨@2»?2Ó?2î@2ý@2ÿ@2ÿª3–5†5y6n5f5a2\0W0T0Q0N0L1J1%H1,G12F19D1@C2GB2OA3W@3`?4k>5x=5‡<6–;6§;6¹:6Ñ:6í;6ü;6ÿ;6ÿ¦6’7‚8u8k8c7]6W3S4O4K4 I4F5E5"C5)A5/@56?6=>6D=7L<7U;8^:8i99v89…7:•7:¥6:¸5:Ï6:ì6:û69ÿ79ÿ¢8Ž9~:r;h;_:Y9S6N7J8F8 D9A9?9>9&<9-;:4::;9;B8;J7;S6<\5“2>¤1>¶1>Í1>ê1>ú2=ÿ2=ÿž;‹<{<n=d=\=U<N:I;E<A=>=<=:>9>#7>*6?15?84?@3@H2@P1@Z0Ae/Ar.B-B‘-B¢,Bµ+BË,Bé,Bù-Aÿ-Aÿ™=‡>w?k?a@Y?R?I>D?@@K9L3N.P(S$T "U UVV$V,V3W;WDWNWYXfXuX‡XšW¬WÂWáVôUÿUÿ„ItJfK\KSKKLDM[6_.b&fjmps vx xyyyz&z/z9zDzPz_zpzƒz˜z¬yÂxßxïw÷j[_[V[L\B`9c0h(l ptw{ ~‚ƒ ƒ„…† †(‡1‡<‡I‡W‡h‡{‡†¥…º…Ó„ê„ôe`\`QaFdÌPÌdÍz͑ͤʹÍÀMƒAŠ5‘)™ ¦ ¬±¶º¾ÂÆÈÈÊËÍÎÐÒÕÙÝá!â1äCåVækæ‚ç–ç¥æ°ÿ ÿÿÿÿÿ!ÿ-ÿ8ýCùMõUò]ðcîiìoêtézçæ…ä‹ã‘á™ß¡ÜªÚ¶×ÆÕáÓôÒÿÑÿÑÿÏÿÊÿÿÿÿÿ ÿúö(ó3ð>ìHèPåXâ^ßdÝjÛoÙtÖzÔ҅ЌΓ̜ɥǰƾÄÔÂîÁþÀÿÀÿ¿ÿ¾ÿÿÿÿúñëæ#â.à8ÛBÕKÑRÎYË_ÉeÇjÆoÄtÂzÁ€¿†½Ž»–¹ ·ª¶·´Ê²æ±ø°ÿ¯ÿ¯ÿ°ÿÿÿ÷êá ×ÐÌ(É2Æ<ÂE¿M¼SºY¸_·dµi´n²t±z¯€­ˆ¬‘ªš¨¥¦±¤Á£Ü¡ò¡ÿ ÿ ÿ¡ÿÿ÷èÙËý¹"¶,´6²?¯G¬M«T©Y§^¦c¥h£n¢t zž‚œ‹›•™Ÿ˜¬–º”Ï“ë’û’ÿ’ÿ‘ÿ÷çÓÆ»³ ­ª§&¤0£8 @žGœNšS™X—]–c•h“n’t|…‹šŠ§ˆµ†Ç…ä„õ„ÿƒÿƒÿìÓÁ´¬¦ š —)•2“:‘AHMŒS‹X‰]ˆc‡i…oƒw‚€€Š~–}£{°zÂyÝxñwýxÿxÿÞ Ä ² ¦ ™• ‘Ž‹#‰,‡4…;ƒB‚H€NS}X|^{dyjxrv{t†s’qŸp­n¾mÖmílúlÿlÿη¦š‘‹‰ ‡ „~%|.z6x<wCuHtNsTqYp_nfmnkxjƒhg e ¬d ¼c Ôc ìb úb ÿb ÿí‡}|| x u r (p 0o 7m >l Dk Ji Oh Ug \e cckbu`_Ž]œ\«[½ZÖYðYýYÿYÿ¹¥”ˆ~xtqq oli"g*f2d9c?bE`K_Q]X\_ZhYrW}V‹T™S©RºQÒQíQýQÿQÿ² ž"Ž"#w"p!ligfca_&]-\4Z;YAXGVMUTS\RdQnOzNˆM—K¦J¸JÏIëIûIÿJÿ¬$˜%ˆ&{'q&j%f#b!`^ [YW"U)T0S7Q=PCOJMQLXKaIkH wG …F!”D"¤D"¶C"ÌC#éC#úC#ÿC"ÿ¦'“)ƒ*v*m*e)`'\%Y#W!U!R!P!N!%M",L"3J"9I"@H"FG#ME#UD$^C$iB%u@&ƒ?&’>'£>'´='Ê=(è=(ù='ÿ>'ÿ¢*Ž+-r-h-a,\+X(T&Q&N% L%J&H&"G&)E&/D&6C'<A'C@'K?(S>)\=)f<*r;*:+9+¡8,²7,È7,æ8,ø8,ÿ8,ÿ,Š.{/o0e0]/X.S+P*L*I* F*D*B*A*%?*,>+3=+9<+@;,H:,P9-Y8.d7.p6/5/40Ÿ30±20Ç20å30÷30ÿ4/ÿ™/‡1w2k2b2Z2T1O/K-G.D.A.?.=.;."9/)8//7/660>50F51N41W32b22n13}03/4ž.4°-4Å-4ã.4ö/3ÿ/3ÿ•1ƒ3t4h5^5W4Q4K2F1B2?2<2 938363 43&33-24414;05C05L/6U.6`-7l,7{+7‹*8œ)8®(8Ã(8â)8õ*7ÿ*7ÿ’45q6e7[7T7M6G6B5=6:677 472718/8$.8+-92,99+9A*:I*:S);^(;j';y&<‰%<›$<­#<Â#<à$<ô%;ÿ%;ÿ6|8m9b9X:Q9J9D9=99:5;2;/<-=,=*=!)=((>/'>6&>>%?G$?P#@["@h!@v @‡A™A«AÀAÞ@ó@þ ?ÿ‰9x:i;^<U<M<G<@<8=4>0@-A*B 'B&C$C#C%"C,!D3 D;DDENEYEeEtE…F—F©F¾EÜEñDýDÿ„<s=f>[?R?J?D?=@6A1C,D'F$G !H III"I)J0J8JAJKKUKbKqK‚K”K§K¼KÙJðJüIÿ?o@aAWBNBGBAB:C2E-G(I#KMO PPPP%P,Q4Q=QGQRQ_RmR~ Q‘ Q¤ Q¸ QÑ Pì PúOÿyCjD]DSEKEDE>F6H/J)L$OQSV WXXX X( X0 X9 XC XN XZXhXyXŒXŸX³WÊWæWóVüsFdGYHPHHHAI:J2M+P%R UXZ] ` ` ```#`+`4`=`I`U`c`s`†_š_®_Ä^â^ð^ølJ_KUKLLEL=N5P.S'V Y\_b eg ghhhi&i.i8iCiOi]imi€i”h©h¿gÜfîf÷fOZOQOJOAQ8T0W([!^beh knp p qqrs!s(s1s<tHsVsfsysŽs£r¹qÒqëpôaSVSOSEU;X2\*`"dhlo rvyzz {|}~"€*€5€A€O€_€q€†€²~Ê~å}ñ\XTXIZ?]5a,e#josw {‚„††ˆ ‰ Š‹ŒŽ",8FVh~•Ž«ÁÜŒëY]N_Cb8f.l$qw|…‰’“”–—˜ š›Ÿ# . < L ^ tŸŒŸ¢Ÿ·žËžàSdGh÷HóPðWí^ëdèiçoåtãyâà…ތܓٜ֦ӱÑÀÏÚÎñÌÿËÿËÿÆÿÁÿÿÿÿÿûöò$ï.í9èBãKàRÝYÙ_ÖdÓiÑnÏtÎyÌʆȎƖĠ«À¹¾Í¼ê»üºÿºÿºÿ¶ÿÿÿþôë äßÛ)Ø3Ó=ÎEÊMÇSÅYÃ_Ád¿i½n»sºy¸€¶ˆ´²š±¥¯²­Ä¬á«öªÿªÿªÿªÿÿýîâÕ ÍÇÄ#Á-¿7»?·GµN²S°Y¯^­c¬h«m©s¨z¦¤Š£”¡ŸŸ¬ž»œÒ›îšÿšÿ™ÿ™ÿþîÞËÁ¹ ´±®'«0ª9§A¤H¢M¡SŸXž]b›gšm˜s—{•„”Ž’™¦Ž´ÈŒæ‹ùŠÿŠÿ‹ÿðÛǺ°¨ ¤ !›*š3˜;–A”H’M‘RWŽ\Œa‹gŠnˆu‡~…ˆƒ”‚ €¯À~Ý}ò}ÿ}ÿ}ÿàÆµª¢›• ’$‹-Š4ˆ;†B…GƒM‚RW\~b}h{pzyxƒvuœtªrºqÑpìpûpÿpÿÍ·§›“ŽŠ†„'}.|6z<yBwGvLuRsWr]qcokntl~kŠi˜h¦g¶fËeçe÷eÿeÿÀ « ›† ~| ywu!s)q0o6n<lBkGjMiRhXf_egcpbz`‡_•^£\³\Ç[ä[ô[þ[ÿµ¡‘…|vsr q nli#g*f1d7c=bCaI_N^U]\[ cZ mX xW …V “T ¢S ³R ÇR äQ õQ ÿQ ÿ­™‰}tmjggf c a _ %] ,\ 3[ 9Z ?X EW KVQUYSaRkPvNƒM’L¢K²JÈIåI÷IÿIÿ¥’ƒvmfb_^^ [YW U'T.S4Q;PAOGNNLUK^IgHsF€EDŸC°BÅBãBöBÿBÿŸŒ }!q"h"a!\YWUTQON#L*K0J7I=GCFJERCZBdAp?}>=<®;Ã;á;õ;ÿ<ÿš!‡#x$l%c%\$W#S QOM KHG E&D-C3B9@@?G>O=X<b:m9{8 ‹7!›6!­5!Á5!ß5!ó6!ÿ6!ÿ–#ƒ&t'h(_(X'S&O$L"I G DB@ ? #> )< /;!6:!=9!D8"L7"U6#_4#k3$y2%‰1%š0%«0&¿/&Ü0&ò0&ÿ1%ÿ‘&(q*e*\*U*O)K(H%D$A$?$ =$;$9$7$&6$,5%34%:3&A2&J1'S0']/(i.)w-)‡,)˜+*ª**½**Ú+*ñ+*þ,)ÿ(|*m,b-Y-Q-L,G+C(?(<(9( 7(5(3(2(#0()/)0/*7.*?-+G,+Q+,[*,g)-u(-…'-—&.¨%.¼%.Ø&.ð&.ý'-ÿŠ+x-j._/V/N/H.C-?,;,7,4, 2,0-.--- +-'*.-*.5)/=(/E'0N&0Y%1e$1s#1ƒ"2•!2§!2» 2Ô!2ï"1ü"1ÿ†-u/g0\1S1K1E1@0;0603001-1 +1)2(2'2$%3+%32$3:#4C"4L!5W 5c5q66“6¥6¹6Ò6í6û5ÿ‚0q2c3Y4P4I4B3=37314.5+5(6 %7$7"7!8" 8(80879@9I:T:`:n:;‘;¤;·;Ð:ì:ú9ÿ}2m4`5U6M6F6@6:646.8*9&:#; <===>%>->4>=?G?Q?^?l@|@@¢@¶@Î?ë?ù>ÿy5i7\8R9J9C9=9791:+<'="?AB CCDD"D)D1D:ECENE[EiEy EŒ EŸ E² EÉ Eå Dö Dÿt9e:X;O;G<@<:<4<.>(@#BDFHJ JJKK% K- K6 K@ KJ KV KdKtK‡KšK®JÄJàJðIún<`=T>K>D>=>7?1@*B$EGILNQ Q Q QQ"Q)Q2R;RFRRR_RoRQ–Q©Q¿PÜPîP÷h@[APAHAAA;B4C-E&H KMPSU X XXYYY%Y-Y6YAYMZZZiY|YY¥XºXÕWìWöcDVEMEEE?E7G/I(L"ORUX Z ]_ ` `aab b'b1b;bGbUcdbvb‹b a¶aÏ`ê`õ]HRIJHCH:J2M*P#SWZ] `cfgh ijklm"m*m4m@mNm]mom„lšl°kÈkæjóXMNMHL>N5Q,T$X\`d gknprrs uvwxy#z-z9zGzVyhz|y”xªxÁwßwïTQLQBR8U/Y&^bgk oswz|~€ ƒ „†ˆ‰%Š0Š>‰M‰_‰sˆ‹ˆ¢‡¹‡Ñ†èRVGWr2x'€ˆ —£¨­²¶¹»¼¾ÀÂÄÆÈËÎÑ Ö×#Ø5ÙIÚ^Ûuیܟܫÿÿÿÿ ÿÿþ$ü/ù9ôCðKíRêYç_ädâiànÞsÜyÚ׆Ԏіϡ̬ʻÈÒÆîÆÿÅÿÅÿ¿ÿºÿÿÿÿþ÷òîë*é4ã=ÞEÙMÔSÑYÎ^ÌcÊhÉmÇsÅyÀÁˆ¿½›»¦¹´·È¶æµû´ÿ´ÿ³ÿ®ÿÿÿøíå Ý×Ò$Ï.Ë7Ç@ÃGÀN¾S¼Yº^¸c¶hµm³s±y¯­Š«”© ¨­¦¾¥Û¤ô¤ÿ£ÿ£ÿ¢ÿÿöæ×Ëľ»¹(·1´:°A­H«N©S§X¦\¤a£g¡l sžzƒ›Ž™™—¦–¶•Ì”ë“ý“ÿ“ÿ“ÿ÷äÐÁ·¯ «§¥"£+¢3Ÿ;œB›H™M—R–W•[“a’fmt}Œ‡Š“ˆ ‡¯…Â…â„÷„ÿ„ÿ„ÿåͼ¯¦žš–”’%‘-5<ŒBŠGˆL‡Q†V„[ƒ`g€n~w}{zšx©wºvÓvïvþuÿuÿл«Ÿ—‹ ˆ†„ ‚'/5}<|A{FyKxPwUv[tasiqqp{n‡m•k£j´jÉièiùiÿiÿÀ¬œˆƒ{ ywv"t)s0q6p<oAmFlKkPjVh\gdeldvc‚a`Ÿ_¯^Ã^á^ô]ÿ]ÿ´  „ | wtq omki#h*g1e6d<cAbF`L_R^X]_[hZrX~WŒV›U«T¾TÚSïTûTÿ© –‡zrli g f db`^%]+\1Z7Y<XBWGVNUTS\ReQoO{NŠM™L©K¼JÔJíJùJÿ¡Ž~sjd`^] ] ZXV U'S-R3Q8P>O DN JL QK YJ bH mG zF ˆD ˜C ©B ¼B ÕB îB ûB ÿš‡xlc]YVTTS Q O M "L (K .J 4I :GAFGEODWBaAl?y>ˆ=˜;©;¼:Ö:ð:ý;ÿ“sg^XSPNLL JHFE$D*B0A7@=?D=L<T;^9i8v7…6–4§4º3Ó3î4ü4ÿŽ|nc Z S NJHFECA?> =';-:39:8A7I5Q4[3f2s0ƒ/”.¥-¸-Ð-ì.û.ÿŠx j"_#V#O"J!F CA?= ;976#5)40361>0F/O.Y-d,q+*’)¤( ·' Î' ë( ú)ÿ† t#g$\%S%L%G$B#?!=:7 5310 /&.--3, ;+ C*!L)!V("b&"o%#$###¢"$µ"$Ì"$é#$ù$#ÿ‚#q%c&Y'P(I'C'?&;$8"5"2"0" .","*")"#(#*'#1&$8%%A$%J#&T"&`!'m '}'(¡(´(Ê(è(ø'ÿ~%n'`)V)M*F*A)<(7'4&0&-&+' ('''%'$'!#('"(.!)6 )>*H*R+^+k+{,,Ÿ,²,É,ç+÷+ÿz'j*]+S,J,C,>+9+4*0*+*)+&+#,", ,,-%-,-3.<.E/P/\/i0y0‹0ž0±0Ç0å0ö/ÿv*g,Z-P.H.A.;.6-1-,-'/$/!01 1222"2)31393C4M4Y4g5w5‰5œ5°5Æ4ä4õ4ÿr,c.W0M0E0>08030/0)1$2!356 77888&8.969@9K9W:d :t :† :™ 9¬ 9Á 9Þ 9ñ 8ün/_1S2J3B3;36312,3'4!689;= >>>># >* >3 >< ?G ?R?`?o??”?¨>¼>×>ì>÷i3[4P5G5?59545.5)7#8;<?AC D D DD D'D/D8EBENE[EjE|ED¤D¹DÑDêCõd6W7L8C8<87818+9%; =@BDG I J KKKK#K+K4K>LILWLfLwKŒK¡KµJÎJéJõ_:R;H;@;:;4;.<'>"ACFIK NPQ QRSSS&S/S9SESRSaSrS‡RœR±QÊQçQôY>N>E>>>8>0@)B#DGJMP SUWX YZZ[\!\*\4\?\M\[\l\[—[­ZÅZäYóTBJBBB^2c'jpx …‹‘–›Ÿ¢¤¥§©«­°²µ· »¾¾&¾8¾K½a¼z»”º©º¹7j+p x€ ˆ–œ¢§¬°³¶·¹»½¿ÂÅÈÊÎÒÕÕ,Ô@ÔWÓnÔ†Ô›Ó«ÿÿÿÿÿÿü ù*ö4ñ=íFéMæSäYá^ÞcÜhÙnÕsÓyЀΈˑɜƧķÂÌÀì¿ÿ¾ÿ½ÿ·ÿ²ÿÿÿÿúó íèå%ä.ß8Ø@ÒGÎNËTÈYÆ^ÄcÂgÀm¿s½z»¹‹¶•´¡²¯°Â®ã®ú¬ÿ­ÿ©ÿ¦ÿÿÿòæÝÒÍÊ È)Å2À:¼B¹H·NµS³X±]°b®g¬lªs©{§„¥Ž£š¡¨Ÿ¹žÒòœÿÿœÿ™ÿüîÝÌÁº ¶²°#¯,­4©<¦B¤H¢M RžW[œ`šf™l—t•}“‡‘“¡Ž±ÆŒè‹ýŒÿŒÿŒÿíØÅ·¬¦¡Ÿ›&š.—5•<“B‘GLŽQU‹ZŠ`‰f‡m…v„€‚Œ€š©}¼|Ü|õ|ÿ|ÿ|ÿÙÁ±¤œ” ‹‰ ‰(‡/…6ƒ<‚A€FK}O|T{Zy`xgvpuzs†q“p¢o´nÌnínþnÿnÿį ”Œ†~|{y"x)w0u6t;r@qEpJoOmTl[kbijhtf€eŽcb­aÂaäaøaÿaÿ´ ‘†~yuq omlk$k*i0h6f;e@dEcJaO`V_]]e\oZzYˆX˜W¨V»VØVñVÿVÿ¨”…zrligd ca`_%^+]0[6Z;Y@XEWKVQUXSaRjPvO„N“M¤L¶LÍLëLúLÿ ‹ | p h b _ ]\ ZXWV U&S+R1Q6P;OANGMMKUJ]IgGsF€ED¡C²CÈCæCõCÿ• ƒti`ZVT S S QONL!K'J,I2H7G=ECDJCQBZ@d?p>~=Ž<Ÿ;±:Æ:ã:ó:üŽ|nbZTPMKK J IGED#B(A .@ 3? 9> @= G< O: X9 c8 o6 ~5 Ž4 Ÿ3 ±2 Ç2 ã2 ô2 þˆwi^UOJGECCB @ ? = < $; *9 0877=6E5M3W2b1n/}.Ž- ,²+È+æ+ö,ÿƒrdYQKFB?><; :875!4'3-230:/B.K-T+_*l){(Œ'ž&°%Æ%ä%ö&ÿ~n`VMGB>:8754 20/-#,*+0*7)?(H'R&]$j#y"Š!œ ¯Äâ ô ÿzj]S J D >:7420. ,*)' &&%-$5#="F!P [hwˆ›­Ãàóÿwg Z!P"H"A";"7!3 0-+(&%#!!$ *2:C M!Y!f!u"‡"™"¬"Á"ß!ò!þs d"W#M$E%>$9$4#0",")!&!$!"! !!""!"(#/#8$A$K%W%d&s&…&˜&«&À&Ý%ñ%ýp"a$T&J&B'<&6&1%-%)$&$"%%& &''''%(-(5)>)I)U*b*q*ƒ*–*© *½ *× *î)ûl$]&Q(H(@)9(4(/(+'''"()*++ ,,,-#-*-2.<.F .R ._ /n / /’ /¥ .¹.Ð .é .÷h'Z)N*E+=+7+1*-*)*$* +-./1 222 2 2' 2/ 38 3B 3N3[4j4{3Ž3¢3¶3Í3ç2ód*V,K-B-:-4-/,+,&,"-/1246 8 8 888$8,848>9J9W9e9w9‹8Ÿ8³8Ê8æ7ò_-R.H/?08/2/-/)/$013579 ;= >>>>!>(>1?;?F?S?a?s?‡>œ>°=Ç=ä=òZ0N2D2<25201+1&2 468;= ?AC CDEEE$E-F6FBFNF]FnE‚E˜D­DÄCãCòU4J5A59534.4(5"7:<?A DFHI J KLMN N(N2M=NJNXMiM}L”LªKÁKáJòP8F8=87817*9$;=@CF IKNPQR STUVW#W,W8WDWRVcVwVŽU¥T½SÝSðK<B<;;5;-<&?BEHK OQTWXZ[\ ]_`bb&b1b>aLa]ap`ˆ` _·^Ô]îG@??:?1@)C!FJNQ UX[^acdegh jlno o*o6nEnUnhmm˜l°kÊjèDD>C5D+G#KOTX\`dgkmoprtuw y|~".=~M}a}w|{¨zÀyßCG9I/L%PU[`ejnrvy|~ƒ…‡ŠŒ ’’%’3’D‘Wm†ŽŸµŒÍ=N2Q(V\bhnty~‚†‰ŒŽ’”–˜›ž¡ ¤¦¦)¦:¥M¥b¤{£”¡«¡¿6W,\!bipw~„Š”˜›žŸ¢¤¦¨«­°³· »»»0»CºX¹p·‹·¡·³0b%ipx €ˆ–›¡¦ª®°±´¶¸»½ÀÃÇËÏ ÓÒ%Ò8ÑNÐeÏ~Í–Ì©ÿÿÿÿÿ üù÷%ó/î8é@æHâNßTÜYÙ^ÕcÓhÐmÎsËzȂƌ×À£¾²¼Èºê¹ÿ¸ÿ±ÿªÿ§ÿÿÿûöíçâß Þ)Ù3Ñ;ÌBÈHÅNÂSÀX¾]¼bºg¹m·tµ{²…°®œ¬ª©½§Þ¦ù¥ÿ£ÿÿ›ÿýöëßÑÊ ÅÃÀ$¾,¹5¶<³C°H®N¬R«W©\§a¦g¤m¢t }žˆœ•š£˜´–Í•ñ”ÿ•ÿÿŽÿóæÑ¸±­ª¨¨'¦/¢6Ÿ<B›G™L—Q–U”Z“`‘fnŽvŒŠˆ›†¬…Á„æƒý„ÿƒÿÿä˺¬¢œ˜ –”“!’(06‹<‰AˆF†K…O„T‚Z`g~o|zz†x”w¤u·tÔsôtÿtÿtÿ˶¦š’Іƒ€#*}0{6z;x@wEuItNsTqZpanimskihg®fÇeêfÿfÿgÿ¸¤•Š|vt rqpp$n*m0k5j:i?hDgIeNdTc[ac`m^y]‡[–Z¨Y½YßYøZÿZÿ¨•‡{snjgedccb%a*_0^5]:\>[DYIXOWVV^ThSsQP‘O¢NµNÐNðNÿOÿœ‰{phb_][ YXWW V%U*S0R4Q9P?ODNKMRKZJcIoG|FŒEE°DÇDèDúEÿ’€q f ^ Y UTRP ONML K&J+I0H5G:F@EFCNBVA_@k>x=ˆ<™<«<Á;à;ô;ÿ‰ x j_WQM K JI H FEDC!B&A+?1>6=<<C;J:R9\8h6u5…4–4¨3¼3Ø3ï3û‚ qdYQKGDB A A ?><;:"9(8-72695?4G3P1Z0f/s.ƒ-•,§+º+Ò+ë+÷}l_TLFB><:: : 8 654 2 $1 )0 // 6. =- E, N+ Y) e( s' ƒ& •% §$ »# Ò# ë# ÷xh[QHB=975332 0 / - , !+ '* -)4(;'D%N$Y#e!s „–©½ØîùsdWME?:520.-, +)(&%$$*#1"9!B KVcq‚•§»Ôîúp`TJB<62/,*(&% #" !'.6?ITap“¦ºÒìúl]QG?94/+(&$"  $,4=GR_n’¥¹ÐêøiZNE= 61-)%#  ")1:EP ] l | ¢ µ Ê å ôeWL!B!:!4!/!* &#    !!"""&#/#7 #A $M $Y $g $x$‹$ž$±$Ç#ã#ñbT!I#@#8#2#,#("$!!!!!#$%& ' ' ' '# '+ (4(>(I(U)d)t)‡)›(¯(Å(á'ð^"Q$F%=%5%/%*$&$"##$%&() , ,,,,!,(-0-:-E-R.`.q-„-™-­,Â,à,ðZ$M&C':'3'-'(&$&!&&')+, . 0 11222%2-263B3N3]3m32–2«1Á1ß1ðV'J)?*7*0*+)'(#()*,.0 1 45 67888"8*939>9J9Y9i9}8“8¨7¿7Þ6ðQ+F,<,4,.,*+%+ ,-/13 5 7:; < =>?@@%@/@:@F@T@e?x?>¦>½=Ü=ðM.B/9/2/-.(."/0257 : <>ABC D FGHH!H*H5HAHOH`GsGŠF¢E¹EÙDðH2>26201+1%2469< ?BDFHJKL NOQRR%R0R<QJQZQmP„ONµMÒMîC6;645/4'5!8;>A DGJMOQSTUW Y[]]]*]6\D\T[g[~Z—Y¯XËWê?98938+9#<?CG JNQTWZ\]_`bd fhkk#j.j<jMi_hugf¨eÂdã==7<.=%@DIM QUZ]`cfhjkmoqt vy{{'z5yExYxmw†vŸu·tÒ_C^H]N[UZ]XgWrUT‘S£R¸QÜQùRÿRÿ‹|qid`^\ [[ZZY%W*V/U4T8S=RCPIOPNXMbKmJzI‹HG±GÌFðGÿGÿ~pf^YVSRP OONN M%L*J.I3H8G>FDEKDSC]Ah@u?…>—=«=Ã=æ=û>ÿ‡uh]UPLJIG FEEDC B%A*@/?4>:=@;G:O9Y8d7q65“4¦4»4Ý4õ5ÿ~m ` V N H D B@?> =<;;:!9%7*60554<3C2L1U0`/m.}-,¢,¶,Ð,î,üw g ZPIC> ; 9 8 76 54321"0'/,.2-8,@+I*R)](k'z&Œ%Ÿ%²%Ê%è%÷r bVLD>9631 0 0 / .,+*)#()'/&5%=$F#P"\!i y‹°Æãóm^RH@:51.,** ) ( ' %$# " &! , 3 ; D O [ i y ‹ ž ° Å á ðiZNE=71-*(&$## "     # * 2:DP\j{ ³ÉäòeWKB:4/*'$"   !(09CNZiyŒž ± Å á ñbTI?71,($! &-6ALW e u ‡ š ­ÁÝ î_QF=5/*%"  # * 3 < G S aqƒ—ª¿Úì\NC:3,'#      '/9CP^n€•©½ØìXKA80*%!   !!!$","5"@#M#Z#k#~#“"§"¼!×!íUH> 5 . ( #   " $ % %&&&!')'2'='I(W(g'{''¥&»&Ö%íQ E!;"2","&!"!   "# % &( ) +,,,,&-/-9-F-T-d-w,,¤+º+Ö*îM"A$8$0$)$$#!"""#$& ( *,. / 02333"3+363B3P3`3s2Š2¡1¸0Ö0ïI%>&4'-'(&#%$%&(* , .0245 7 8::::':2:>:L:\:o9†8ž8¶7Ô6ïD):)1)+)&("'()+. 0 2579;<> ? ACCC#C.C9CGBWBjA@š?²>Ï>ï?,6,/,*+%*+-/2 58:<?ACEFH JLMMM(M4LBLQKdK{J”I­HÊGì;03/-/(-"/147 :=@CFHJLNOQS UXYX"X.W<WKV^VsUT§RÂRæ8312,1%258< @DGJMPSUWYZ\^a dfgf'f4eDdWdkb…aŸ`¹^Ü5705(7 :=B FJOSVY\_adegilnq tww v-v=uOtcs{r•p¯oÉ5:+;"?CH MRW\`dhknqsuwz|‚† ŠŒ‹$Š3‰E‡[†r…‹ƒ¥‚¼/@%DIN TZafkoty}€ƒ…‡ŠŒ’–™ž ¢¢¡) ;ŸPgšš™™¯)INT[bipw}‚†‹“•—𠣦ª®²· »º¹0·Eµ\´t±Ž¯¤"T[bjs{‚‰•šŸ£¦¨«®°³¶º½ÂÇÌÓ ÔÓ&Ñ:ÐQÍhËÊ–üöòñóô òðí%è.â6Þ>ÙDÔJÑOÎTËYÉ^ÆcÄiÁp¾x¼¹¶š³«±À¯æ®ÿ¥ÿšÿ”ÿÿôìèçßÙ ÒÏÏ Ì(Æ0À7¼>¹D·IµN³S±W¯]­b«i©q§z¥…¢“ ¢¶›Ô™ù–ÿÿˆÿ„ÿèßÙÉ¿¸µ ³±°"­*©1¦8¤=¢C HžLœQ›V™\—b•i“r‘}‹š‹¬‰Åˆî†ÿÿzÿxÿÙÍ»®¥Ÿœ ™™™˜$”+‘1Ž7Œ<‹A‰FˆK†P…Uƒ[‚b€k~u|‚z’x£w¹vàuÿrÿnÿlÿǵ¥™‰…„ ‚‚‚€%~+|1z6y;w@vDuIsOrUp\odmnlzjŠh›g¯fÌeõdÿaÿ`ÿ´ …}wspoooom%k*i0h4g9f>eCcHbNaU_^^g\s[‚Y“X¦W¿WêWÿVÿTÿ¡Žulhda` ____]%\*[/Y3X8W=VCUISPRXQaPmN{MŒLŸKµJÜJúJÿJÿ’€rg_ZWUSR RRRQO$N)M.L3K8J=ICHJFRE\DgCuB†A˜@®@Ë?ò@ÿ@ÿ…tg]UOLJHG G FFFED$C)B-A3?8>>=E<N;W:b9o8€7“6§6À6è6þ6ÿ|k^TMGCA?>= =<<<:9$8)7.635:4A3I2S1^0k/{.Ž-¢-¸-Ý-ø.ÿsdWMF@;87654 44321 0$/)./-6,=+E*O)Z(g'w&‰&%³%Ï%ð&ÿm^ R H @ : 6 2 0..- , ,+*)( '%&+%2$9#B"K"W!d s…™®Çéúh Y M C<61 - * ( ' && %$$"!!" (.6?ITap‚–ªÁáôc UI@82-)&# "    %+3<FR_n€”§¼Ùï_QF<5/*&"          " ) 1 : E Q _ n € ” § º Ò ê\NC:2,'#        ( 0; F Q ^ m  “ ¦¹ÐèXK@70)%!      % - 6 A MZj|¤¸ÏèUI>5-'"       "*3>JXgzŽ£·ÏéRF;2+%!   '0;GUdwŒ¢·ÏêOC90)#    $-8DRbuŠ ¶ÐëL@6-&!      !!"!*!5"A"O"_"r!ˆ!Ÿ ¶ÑíH=3+$   !" $ &&&''''2'>'K'\'n&…&%´$Ñ#îD90(#  !"$&(* + ----$...:.H-X-j-,š+²*Ð)ï@ 6!-!&!! ! " $&(+-/0 2 4555 5*565C5S4f4|3–2¯1Í0ï<#2$*$$# "!!#% ' )+.02468: < >>>>&>1>?=N=a@BD F IIH!H,G:GIF[EqD‹C¥BÃAè4*,*'("'(*- 0 369<>ACFHJLNP STTS'S4SCRUQjPƒOžM¹Là0-+,&+,.2 59=@CFILNQSUWY\_ bccb,a<`N_b^{\–[°YÏ/0*/"037;?DHLORUX[]`bdfimp tts%r4rEpYoqm‹k¦jÀ.3%58<AGLQUY]aehkmortwz~‚† Љˆ+†=„Rƒg›~²): =BHNTZ`dinrvz}€‚…ˆ‹Ž’–›  ¢ !Ÿ3Gš^˜w—•§#CHN U\cjqv{€†ŠŽ‘“–™œ £§«°¶¼ º¹(·<´R²j¯…­œNT \dlt|ƒ‰”šŸ¢¤§ª®±´¸¼ÁÇÍÔØÕÓ1ÐHÍ_ËvÈŽ  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~€‚ƒ…†‡ˆŠ‹ŒŽ‘“”•–˜™šœžŸ¡¢£¤¦§¨ª«¬­¯°±³´µ¶¸¹º»½¾¿ÁÂÃÄÆÇÈÉËÌÍÏÐÑÒÔÕÖ×ÙÚÛÝÞßàâãäæçèéëìíîðñòôõö÷ùúûüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~€‚ƒ…†‡ˆŠ‹ŒŽ‘“”•–˜™šœžŸ¡¢£¤¦§¨ª«¬­¯°±³´µ¶¸¹º»½¾¿ÁÂÃÄÆÇÈÉËÌÍÏÐÑÒÔÕÖ×ÙÚÛÝÞßàâãäæçèéëìíîðñòôõö÷ùúûüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~€‚ƒ…†‡ˆŠ‹ŒŽ‘“”•–˜™šœžŸ¡¢£¤¦§¨ª«¬­¯°±³´µ¶¸¹º»½¾¿ÁÂÃÄÆÇÈÉËÌÍÏÐÑÒÔÕÖ×ÙÚÛÝÞßàâãäæçèéëìíîðñòôõö÷ùúûüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿmft1!  !"#$%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïñòóôõö÷øùúûüýþÿ  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ƒ†‰‹Ž’•—™›Ÿ¡£¥§¨ª¬­¯°²³µ¶·¹º»¼½¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÍÎÏÐÑÒÒÓÔÕÖÖרÙÙÚÛÛÜÝÝÞßßàááâããäååææçèèééêëëììíîîïïððñòòóóôôõöö÷÷øøùùúûûüüýýþþÿ  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ƒ†‰‹Ž’•—™›Ÿ¡£¥§¨ª¬­¯°²³µ¶·¹º»¼½¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÍÎÏÐÑÒÒÓÔÕÖÖרÙÙÚÛÛÜÝÝÞßßàááâããäååææçèèééêëëììíîîïïððñòòóóôôõöö÷÷øøùùúûûüüýýþþÿÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÚË èÍ:éÌ`ÜÈ’˺2¬Æ·P´À³h¼»®{ĵ¨ˆË³¥‡Ñ°¢‡Õ­ŸˆÙ«‰Üªœ‹Þ¨šá§™ã¥—’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’楗’æÙË çÎ 9èÍ`ÜÉ ’Ë»0«Æ¸O´À³g½»®{ĵ©ˆË²¦‡Ñ¯£‡Õ­ ˆÙ«ž‰Ü©œŠÞ§›Œà¥™ã¡˜ä¡˜ä¡˜ä¡˜ä¡˜ä¡˜ä¡˜ä¡˜ä¡˜ä¡˜ä¡˜ä¡˜ä¡˜ä¡˜ä¡˜ä¡˜ä¡˜äÙË äÎ 9çÎ`ÚÊ ’˼.«Å¹M´À´f½º®zŵ©‡Ë±¦‡Ñ®£‡Õ¬ ˆÙªž‰Ü§œŠÞ¥›‹à¢šâž™ãž™ãž™ãž™ãž™ãž™ãž™ãž™ãž™ãž™ãž™ãž™ãž™ãž™ãž™ãž™ãž™ãØË áÏ 9åÏ`ÙÊ ‘˾,«Å¹Lµ¾´g½¹®{Å´ª‡Ì°¦‡Ñ­£‡Õ« ˆÙ¨žˆÛ¥‰Ý£œŠßŸš‹á›™Žâ›™Žâ›™Žâ›™Žâ›™Žâ›™Žâ›™Žâ›™Žâ›™Žâ›™Žâ›™Žâ›™Žâ›™Žâ›™Žâ›™Žâ›™Žâ›™ŽâØË ÜÐ 9ãÐ `ØË ‘Ë¿+«ÄºLµ½³g¾¸®{Å´©‡Ì°¦‡Ñ¬£‡Õ© ‡Ø¦ŸˆÛ£ˆÝ œ‰Þ›Šà˜šá˜šá˜šá˜šá˜šá˜šá˜šá˜šá˜šá˜šá˜šá˜šá˜šá˜šá˜šá˜šá˜šá×Ì ÚÑ 8ÞÑ _ÖË ‘ËÀ)¬Â¹M¶¼³h¾·®{Ƴ©‡Ì¯¦‡Ñª£†Õ§¡‡Ø¤Ÿ‡Ú¡ž‡ÜžˆÝšœ‰Þ•›Œà•›Œà•›Œà•›Œà•›Œà•›Œà•›Œà•›Œà•›Œà•›Œà•›Œà•›Œà•›Œà•›Œà•›Œà•›Œà•›ŒàÖÌ ÙÑ 8ÚÓ _ÔÌ ‘ÉÀ)­À¹N¶º³i¿µ®|Ʋ©‡Ì­¦†Ñ©£†Ô¥¡†×¢ †ÙŸŸ†Ú›ž‡Ü—ˆÝ“œ‹Þ“œ‹Þ“œ‹Þ“œ‹Þ“œ‹Þ“œ‹Þ“œ‹Þ“œ‹Þ“œ‹Þ“œ‹Þ“œ‹Þ“œ‹Þ“œ‹Þ“œ‹Þ“œ‹Þ“œ‹Þ“œ‹ÞÕÌ ØÒ 7ØÓ ^ÒÌ “Ç¿+­¾¸P·¹²j¿´­|ư©‡Ì«¦†Ð§¤…Ô£¢…ÖŸ¡…Øœ …Ù˜Ÿ†Ú”ž‡ÜŠÝŠÝŠÝŠÝŠÝŠÝŠÝŠÝŠÝŠÝŠÝŠÝŠÝŠÝŠÝŠÝŠÝÔÍ ÖÒ 7ÖÔ ^ÐË •ľ-®¼¸Q¸·²jÀ³­|Æ®©‡Ì©¦†Ð¥¤…Ó £„Õ¢„Ö™¡…Ø• …Ù‘Ÿ‡ÚŽž‰ÛŽž‰ÛŽž‰ÛŽž‰ÛŽž‰ÛŽž‰ÛŽž‰ÛŽž‰ÛŽž‰ÛŽž‰ÛŽž‰ÛŽž‰ÛŽž‰ÛŽž‰ÛŽž‰ÛŽž‰ÛŽž‰ÛÓÍ ÕÓ 6ÔÔ _ÎË —Á¾0¯º·S¸µ²lÀ°­}Ǭª†Ë§§…Ï¢¥„Ñž¤„Óš£„Õ–¢„Ö“¡…× †Ø‹ ‰Ù‹ ‰Ù‹ ‰Ù‹ ‰Ù‹ ‰Ù‹ ‰Ù‹ ‰Ù‹ ‰Ù‹ ‰Ù‹ ‰Ù‹ ‰Ù‹ ‰Ù‹ ‰Ù‹ ‰Ù‹ ‰Ù‹ ‰Ù‹ ‰ÙÒÎ ÓÔ 5ÑÓ bËÌ ™¾½3±··U¹²±mÁ­­}ƪª†Ë¤¨„Ο§„Л¥ƒÒ—¤ƒÓ“£„Ô£…ÕŒ¢†Ö‰¡ˆ×‰¡ˆ×‰¡ˆ×‰¡ˆ×‰¡ˆ×‰¡ˆ×‰¡ˆ×‰¡ˆ×‰¡ˆ×‰¡ˆ×‰¡ˆ×‰¡ˆ×‰¡ˆ×‰¡ˆ×‰¡ˆ×‰¡ˆ×‰¡ˆ×ÐÏ ÑÔ 7ÎÓ eÆÊ ¹¼8²´¶Xº­±nÁª®}Ƨ«…É¡©„Ìœ¨ƒÎ—§ƒÏ“¦ƒÑ¥„Ò¥…ÓŠ¤†Ó‡£ˆÔ‡£ˆÔ‡£ˆÔ‡£ˆÔ‡£ˆÔ‡£ˆÔ‡£ˆÔ‡£ˆÔ‡£ˆÔ‡£ˆÔ‡£ˆÔ‡£ˆÔ‡£ˆÔ‡£ˆÔ‡£ˆÔ‡£ˆÔ‡£ˆÔÎÐ ÎÔ :ÊÓ hÀÈ¡µ»>´­µ[»©±oÁ¦¯}Ä£­„Ç«ƒÊ˜ªƒË“©ƒÍ¨„Χ„ÏŠ§…χ¦‡Ð…¦ˆÑ…¦ˆÑ…¦ˆÑ…¦ˆÑ…¦ˆÑ…¦ˆÑ…¦ˆÑ…¦ˆÑ…¦ˆÑ…¦ˆÑ…¦ˆÑ…¦ˆÑ…¦ˆÑ…¦ˆÑ…¦ˆÑ…¦ˆÑ…¦ˆÑÌÐ ÊÔ >ÅÓ m¸Å¥®¹Dµ§µ^»£²pÀ¡°}ß®„Å™­ƒÇ”¬„É«„ʪ…ËŠª…ˈ©†Ì…©‡Íƒ¨‰Íƒ¨‰Íƒ¨‰Íƒ¨‰Íƒ¨‰Íƒ¨‰Íƒ¨‰Íƒ¨‰Íƒ¨‰Íƒ¨‰Íƒ¨‰Íƒ¨‰Íƒ¨‰Íƒ¨‰Íƒ¨‰Íƒ¨‰Íƒ¨‰ÍÈÑ ÅÕ B¿Ó r±Ä§¥¹I¶¡¶`»ž³p¾±}Á›°„Õ¯„Ä‘®„Æ­…ÇŠ­†Çˆ¬†È†¬‡È„«‰É‚«ŠÉ‚«ŠÉ‚«ŠÉ‚«ŠÉ‚«ŠÉ‚«ŠÉ‚«ŠÉ‚«ŠÉ‚«ŠÉ‚«ŠÉ‚«ŠÉ‚«ŠÉ‚«ŠÉ‚«ŠÉ‚«ŠÉ‚«ŠÉ‚«ŠÉÄÒ ÀÖ H¸Ô x©Ï˜ž¾G®š¶bº˜µq¼—³|¾—²„À’±…°…ʯ†Äˆ¯‡Ä†¯ˆÅ„®‰Åƒ®ŠÅ®‹Å®‹Å®‹Å®‹Å®‹Å®‹Å®‹Å®‹Å®‹Å®‹Å®‹Å®‹Å®‹Å®‹Å®‹Å®‹Å®‹Å¿Ô%º× N®Ú p Û‡—Í9š’ÃX¨‘¼l²‘·z¹’´ƒ½Ž³†¿‹²‡Àˆ±‡À†±ˆÁ„±‰Áƒ±ŠÁ‚±‹Â€°ŒÂ€°ŒÂ€°ŒÂ€°ŒÂ€°ŒÂ€°ŒÂ€°ŒÂ€°ŒÂ€°ŒÂ€°ŒÂ€°ŒÂ€°ŒÂ€°ŒÂ€°ŒÂ€°ŒÂ€°ŒÂ€°ŒÂ÷ÀøÀ1ù½ Sê·(|̨DªÆ¥]´Â£pº¾¢¿¼ ˆÃ¹›ˆÆ·˜ˆÊµ•‰Í³’ŠÐ±‹Ò°ŒÔ¯ŠÖ®ˆ“Ø­†˜Ù¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú÷ÀøÀ1ù½ Sê·(|̨DªÆ¥]´Â£pº¾¢¿¼ ˆÃ¹›ˆÆ·˜ˆÊµ•‰Í³’ŠÐ±‹Ò°ŒÔ¯ŠÖ®ˆ“Ø­†˜Ù¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú÷ÀøÀ1ù½ Sê·(|̨DªÆ¥]´Â£pº¾¢¿¼ ˆÃ¹›ˆÆ·˜ˆÊµ•‰Í³’ŠÐ±‹Ò°ŒÔ¯ŠÖ®ˆ“Ø­†˜Ù¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú÷ÀøÀ1ù½ Sê·(|̨DªÆ¥]´Â£pº¾¢¿¼ ˆÃ¹›ˆÆ·˜ˆÊµ•‰Í³’ŠÐ±‹Ò°ŒÔ¯ŠÖ®ˆ“Ø­†˜Ù¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú÷ÀøÀ1ù½ Sê·(|̨DªÆ¥]´Â£pº¾¢¿¼ ˆÃ¹›ˆÆ·˜ˆÊµ•‰Í³’ŠÐ±‹Ò°ŒÔ¯ŠÖ®ˆ“Ø­†˜Ù¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú÷ÀøÀ1ù½ Sê·(|̨DªÆ¥]´Â£pº¾¢¿¼ ˆÃ¹›ˆÆ·˜ˆÊµ•‰Í³’ŠÐ±‹Ò°ŒÔ¯ŠÖ®ˆ“Ø­†˜Ù¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú÷ÀøÀ1ù½ Sê·(|̨DªÆ¥]´Â£pº¾¢¿¼ ˆÃ¹›ˆÆ·˜ˆÊµ•‰Í³’ŠÐ±‹Ò°ŒÔ¯ŠÖ®ˆ“Ø­†˜Ù¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú÷ÀøÀ1ù½ Sê·(|̨DªÆ¥]´Â£pº¾¢¿¼ ˆÃ¹›ˆÆ·˜ˆÊµ•‰Í³’ŠÐ±‹Ò°ŒÔ¯ŠÖ®ˆ“Ø­†˜Ù¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú÷ÀøÀ1ù½ Sê·(|̨DªÆ¥]´Â£pº¾¢¿¼ ˆÃ¹›ˆÆ·˜ˆÊµ•‰Í³’ŠÐ±‹Ò°ŒÔ¯ŠÖ®ˆ“Ø­†˜Ù¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú÷ÀøÀ1ù½ Sê·(|̨DªÆ¥]´Â£pº¾¢¿¼ ˆÃ¹›ˆÆ·˜ˆÊµ•‰Í³’ŠÐ±‹Ò°ŒÔ¯ŠÖ®ˆ“Ø­†˜Ù¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú÷ÀøÀ1ù½ Sê·(|̨DªÆ¥]´Â£pº¾¢¿¼ ˆÃ¹›ˆÆ·˜ˆÊµ•‰Í³’ŠÐ±‹Ò°ŒÔ¯ŠÖ®ˆ“Ø­†˜Ù¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú÷ÀøÀ1ù½ Sê·(|̨DªÆ¥]´Â£pº¾¢¿¼ ˆÃ¹›ˆÆ·˜ˆÊµ•‰Í³’ŠÐ±‹Ò°ŒÔ¯ŠÖ®ˆ“Ø­†˜Ù¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú¬…Ú÷ÀøÀ0ù½ Sê¸'|̨D«Æ¥]´Â¤pº¾¢¿¼ ˆÃ¹›ˆÇ·˜ˆÊµ•‰Î³’ŠÐ±‹Ó°Õ¯Š×­ˆ“Ù­†˜Ú«†Ú«†Ú«†Ú«†Ú«†Ú«†Ú«†Ú«†Ú«†Ú«†Ú«†Ú«†Ú«†Ú«†Ú«†Ú÷Á÷Á0ø¾Sê¸&|Ë©C«Æ¦\´Â¤oº¾¢~¿» ˆÃ¹‡È¶š‡Ì³—ˆÏ±”‰Ò°’ŠÕ®Œ×­ŽÙ¬Š’Ü«‰™Ý§ˆœÛ§ˆœÛ§ˆœÛ§ˆœÛ§ˆœÛ§ˆœÛ§ˆœÛ§ˆœÛ§ˆœÛ§ˆœÛ§ˆœÛ§ˆœÛ§ˆœÛ§ˆœÛ§ˆœÛöÁ÷Á0ø¿Sê¹%|Ë©B«Æ§[³Â¥nº¾£~¿»¡ˆÄ¸ž‡Éµœ‡Í²™‡Ñ°–ˆÔ®”‰×­’‹Ú«Ü©’ߨšß£‹œÜ£‹œÜ£‹œÜ£‹œÜ£‹œÜ£‹œÜ£‹œÜ£‹œÜ£‹œÜ£‹œÜ£‹œÜ£‹œÜ£‹œÜ£‹œÜ£‹œÜöÁöÂ0÷¿Sêº$|Ë©A¬Æ§Z³Â¥mº¾£}¿»£ˆÄ· ‡É´‡Î±›‡Ó¯™ˆÖ­—‰Ú«•ŠÜ©“ß§’‘⤑™à ŽœÜ ŽœÜ ŽœÜ ŽœÜ ŽœÜ ŽœÜ ŽœÜ ŽœÜ ŽœÜ ŽœÜ ŽœÜ ŽœÜ ŽœÜ ŽœÜ ŽœÜõÂõÂ0öÀSêº#|˪A¬Æ¨Y³Â¦mº¾¤}¿º¤‡Å·¡‡Ê³Ÿ‡Ï°‡Ô®›ˆØ«™‰Ü©˜‹ß§˜Žâ¥—’æ –™àœ“›Ýœ“›Ýœ“›Ýœ“›Ýœ“›Ýœ“›Ýœ“›Ýœ“›Ýœ“›Ýœ“›Ýœ“›Ýœ“›Ýœ“›Ýœ“›Ýœ“›Ýô õÃ0öÀSê»"|ʪ@¬Æ¨X³Â¦lº¾¤|¿º¥…Ŷ£‡Ë³¡‡Ð°Ÿ‡Õ­ˆÚªŠÝ§›Œà¤šŽâŸ˜ãš˜á™—›Ý™—›Ý™—›Ý™—›Ý™—›Ý™—›Ý™—›Ý™—›Ý™—›Ý™—›Ý™—›Ý™—›Ý™—›Ý™—›Ý™—›Ýòà ôÃ0õÁSê¼!|Ê«?­Æ©W³Â§kº¾¥{¿º¦„Ŷ¥‡Ë²£‡Ñ¯¡‡Ö«ŸˆÚ§‰Ý¤œŠß ›‹à›šâ—š“á—œ›Þ—œ›Þ—œ›Þ—œ›Þ—œ›Þ—œ›Þ—œ›Þ—œ›Þ—œ›Þ—œ›Þ—œ›Þ—œ›Þ—œ›Þ—œ›Þ—œ›Þðà ôÄ/õÂRê½ |Ê«>¬ÆªV³Â¨kº¾§y¿º¨ƒÅ¶§‡Ì²¥‡Ñ¬¢‡Ö¨ ‡Ù¤žˆÜ¡ˆÝœœ‰Þ—›‹à“›à’—Þ’—Þ’—Þ’—Þ’—Þ’—Þ’—Þ’—Þ’—Þ’—Þ’—Þ’—Þ’—Þ’—Þ’—ÞíÄ óÅ/ôÂRê½|ʬ<¬Æ«U³Â¨j¹¾©w¿ºª€Åµ©‡Ì¯¥‡Òª¢‡Ö¥ †Ø¡Ÿ†Úž‡Û™‡Ý”‰ÞœÞŽ“ÝŽ“ÝŽ“ÝŽ“ÝŽ“ÝŽ“ÝŽ“ÝŽ“ÝŽ“ÝŽ“ÝŽ“ÝŽ“ÝŽ“ÝŽ“ÝŽ“ÝêÅ òÅ/óÃRê¾|Ë­:¬Æ¬T³Â©i¹¾¬s¿º­~Ų©‡Ì¬¥†Ñ§£†Õ¢¡…מ …Øš …Ú–Ÿ†Û‘žˆÜž‹Ü‹žÜ‹žÜ‹žÜ‹žÜ‹žÜ‹žÜ‹žÜ‹žÜ‹žÜ‹žÜ‹žÜ‹žÜ‹žÜ‹žÜ‹žÜæÅ ñÆ/òÄRêÀ|˯8¬Æ­R²Â«f¹¿°o¾·­~ư©‡Íª¦†Ñ¤¤…ÓŸ£„Õ›¢„Ö—¡…Ø“ …Ù ‡Ù‹ŸŠÚˆŸÚˆŸÚˆŸÚˆŸÚˆŸÚˆŸÚˆŸÚˆŸÚˆŸÚˆŸÚˆŸÚˆŸÚˆŸÚˆŸÚˆŸÚáÆ ðÇ.ðÆQêÁ|˰5«Ç¯O²Ã°`¸¼²l¿²­~Ç­©†Ì§§…Ï¡¥„Òœ¤„Ó˜£„Ô”£„Õ¢…Ö¡†×‰¡ˆØ‡¡‹Ø‡¡‹Ø‡¡‹Ø‡¡‹Ø‡¡‹Ø‡¡‹Ø‡¡‹Ø‡¡‹Ø‡¡‹Ø‡¡‹Ø‡¡‹Ø‡¡‹Ø‡¡‹Ø‡¡‹Ø‡¡‹ØÛÇ îÉ.îÈQëÄ|̳0«Ç±L±Ä¸V·¶±nÁ®­Ç©ª†Ë£¨„Ξ§ƒÏ™¦ƒÑ•¥ƒÒ‘¤„ÓŽ¤…Ô‹£†Ôˆ£ˆÕ…£ŠÕ…£ŠÕ…£ŠÕ…£ŠÕ…£ŠÕ…£ŠÕ…£ŠÕ…£ŠÕ…£ŠÕ…£ŠÕ…£ŠÕ…£ŠÕ…£ŠÕ…£ŠÕ…£ŠÕÚÈ ëË -ëÊPëÇ|̶*ªÈ·D°º¶Yº¯±pª­Ǧ«…Ê ª„Ìš¨ƒÍ–¨ƒÎ’§ƒÏ¦„ÐŒ¦…щ¥†Ñ‡¥‡Ò…¥‰Ò…¥‰Ò…¥‰Ò…¥‰Ò…¥‰Ò…¥‰Ò…¥‰Ò…¥‰Ò…¥‰Ò…¥‰Ò…¥‰Ò…¥‰Ò…¥‰Ò…¥‰Ò…¥‰ÒØÉ ßÍ ,çÍOèË{ͼ"¨Â¼<±±µ^¼©±r¦®Å¢­„Çœ«ƒÉ—ªƒÊ“ª„Ë©„Ì©„Í‹¨…͈¨†Î†§‡Î„§‰Ï„§‰Ï„§‰Ï„§‰Ï„§‰Ï„§‰Ï„§‰Ï„§‰Ï„§‰Ï„§‰Ï„§‰Ï„§‰Ï„§‰Ï„§‰Ï„§‰ÏÕÉ ØÏ +ÚÓ NØÐ zÍ賺Fµ©´b½¤±tÁ¡°Þ®„Å™­„Ç”¬„È«„ÉŽ«„Ê‹ª…ˉª†Ë‡©‡Ì…©ˆÌƒ©‰Ìƒ©‰Ìƒ©‰Ìƒ©‰Ìƒ©‰Ìƒ©‰Ìƒ©‰Ìƒ©‰Ìƒ©‰Ìƒ©‰Ìƒ©‰Ìƒ©‰Ìƒ©‰Ìƒ©‰Ìƒ©‰ÌÒË ÔÑ )ÕÕ LÐÐ ~¸¿%®¨¸O¸¡´f¼ž²u¿±Á›°„Ö®„Å‘®„ÆŽ­…Ç‹¬…lj¬†È‡¬‡É†«‡É„«‰É‚«ŠÊ‚«ŠÊ‚«ŠÊ‚«ŠÊ‚«ŠÊ‚«ŠÊ‚«ŠÊ‚«ŠÊ‚«ŠÊ‚«ŠÊ‚«ŠÊ‚«ŠÊ‚«ŠÊ‚«ŠÊ‚«ŠÊÏÌ ÐÒ (ÎÔ RÅÑ ƒªÃ-¨ž·W¸›µh»š´u¾™²¿—±„Á“°…¯…ÃŒ¯…ÄŠ®†Åˆ®‡Å†®ˆÆ„­ˆÆƒ­ŠÆ­‹Ç­‹Ç­‹Ç­‹Ç­‹Ç­‹Ç­‹Ç­‹Ç­‹Ç­‹Ç­‹Ç­‹Ç­‹Ç­‹Ç­‹ÇÌÍ ËÓ -ÇÔ Y²Ø €žÍ+š˜ÁP«–¸g·•µu¼”´~¾”³…¿²…ÀŒ±†Áб‡Âˆ°‡Â†°ˆÂ…°‰Ãƒ°ŠÃ‚¯‹Ã¯ŒÃ¯ŒÃ¯ŒÃ¯ŒÃ¯ŒÃ¯ŒÃ¯ŒÃ¯ŒÃ¯ŒÃ¯ŒÃ¯ŒÃ¯ŒÃ¯ŒÃ¯ŒÃ¯ŒÃÇÏÅÔ 4¸Ù [¢çv—Ú%‰ÏE˜ŽÇ]£Án«½y±Œº´‰¸ƒ·†·…¹„¶†ºƒµ‡»‚µˆ¼´‰½€´Š½´‹¾~³Œ¾~³Œ¾~³Œ¾~³Œ¾~³Œ¾~³Œ¾~³Œ¾~³Œ¾~³Œ¾~³Œ¾~³Œ¾~³Œ¾~³Œ¾~³Œ¾~³Œ¾ÂѽÖ:§ñU›ñh‘æ-x‰Ý@……ÕVƒÏg—‚Ës~Èx¡{Æ|¤yĦw¨u„©tÂ…ªsÁ‡«rÁˆ«rÀЬqÀ‹¬qÀ‹¬qÀ‹¬qÀ‹¬qÀ‹¬qÀ‹¬qÀ‹¬qÀ‹¬qÀ‹¬qÀ‹¬qÀ‹¬qÀ‹¬qÀ‹¬qÀ‹¬qÀ‹¬ÿ¸ÿ¸'ÿ´*F÷¯6iÞ§BÇ›b±Ä›r¶Â›¹À›ˆ½¾™‰À¼•ŠÃº‘‹Æ¸È·ŠÊ¶ˆ‘̵…“Í´ƒ–ϳ™Ð³€Ñ²£Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñÿ¸ÿ¸'ÿ´*F÷¯6iÞ§BÇ›b±Ä›r¶Â›¹À›ˆ½¾™‰À¼•ŠÃº‘‹Æ¸È·ŠÊ¶ˆ‘̵…“Í´ƒ–ϳ™Ð³€Ñ²£Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñÿ¸ÿ¸'ÿ´*F÷¯6iÞ§BÇ›b±Ä›r¶Â›¹À›ˆ½¾™‰À¼•ŠÃº‘‹Æ¸È·ŠÊ¶ˆ‘̵…“Í´ƒ–ϳ™Ð³€Ñ²£Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñÿ¸ÿ¸'ÿ´*F÷¯6iÞ§BÇ›b±Ä›r¶Â›¹À›ˆ½¾™‰À¼•ŠÃº‘‹Æ¸È·ŠÊ¶ˆ‘̵…“Í´ƒ–ϳ™Ð³€Ñ²£Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñÿ¸ÿ¸'ÿ´*F÷¯6iÞ§BÇ›b±Ä›r¶Â›¹À›ˆ½¾™‰À¼•ŠÃº‘‹Æ¸È·ŠÊ¶ˆ‘̵…“Í´ƒ–ϳ™Ð³€Ñ²£Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñÿ¸ÿ¸'ÿ´*F÷¯6iÞ§BÇ›b±Ä›r¶Â›¹À›ˆ½¾™‰À¼•ŠÃº‘‹Æ¸È·ŠÊ¶ˆ‘̵…“Í´ƒ–ϳ™Ð³€Ñ²£Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñÿ¸ÿ¸'ÿ´*F÷¯6iÞ§BÇ›b±Ä›r¶Â›¹À›ˆ½¾™‰À¼•ŠÃº‘‹Æ¸È·ŠÊ¶ˆ‘̵…“Í´ƒ–ϳ™Ð³€Ñ²£Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñÿ¸ÿ¸'ÿ´*F÷¯6iÞ§BÇ›b±Ä›r¶Â›¹À›ˆ½¾™‰À¼•ŠÃº‘‹Æ¸È·ŠÊ¶ˆ‘̵…“Í´ƒ–ϳ™Ð³€Ñ²£Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñÿ¸ÿ¸'ÿ´*F÷¯6iÞ§BÇ›b±Ä›r¶Â›¹À›ˆ½¾™‰À¼•ŠÃº‘‹Æ¸È·ŠÊ¶ˆ‘̵…“Í´ƒ–ϳ™Ð³€Ñ²£Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñÿ¸ÿ¸'ÿ´*F÷¯6iÞ§BÇ›b±Ä›r¶Â›¹À›ˆ½¾™‰À¼•ŠÃº‘‹Æ¸È·ŠÊ¶ˆ‘̵…“Í´ƒ–ϳ™Ð³€Ñ²£Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñ°~¤Ñÿ¸ÿ¸'ÿµ)F÷°5iÞ¨AÇœa±Äœq¶Â›~¹¿†½½š‰Á»—‰Ä¹“ŠÇ·ŒÊµŒŽÌ´‰Î³‡’в„•Ò±‚™Ó±žÔ®€¢Ô¬€£Ò¬€£Ò¬€£Ò¬€£Ò¬€£Ò¬€£Ò¬€£Ò¬€£Ò¬€£Ò¬€£Ò¬€£Ò¬€£Ò¬€£Òÿ¹ÿ¹'ÿ¶(F÷°4jݨ@Ç`±Äœq¶Âœ|º¿ž…¾¼œˆÂº™ˆÅ¸•‰É¶‘ŠÌ´ŽŒÏ²‹ŽÑ±ˆ‘Ó°†”Õ¯„™Ö¯ƒŸ×ª‚¡Õ§‚¢Ó§‚¢Ó§‚¢Ó§‚¢Ó§‚¢Ó§‚¢Ó§‚¢Ó§‚¢Ó§‚¢Ó§‚¢Ó§‚¢Ó§‚¢Ó§‚¢Óÿ¹ÿ¹'ÿ¶(F÷±3jÝ©?‘Ç`±Äp¶Âž{º¿Ÿƒ¾¼žˆÂ¹›ˆÇ·—ˆÊµ”‰Î³‹Ñ±Ó¯ŠÖ®ˆ“Ø­†™Ùª…žÙ¥„¡Õ¤„¢Ô¤„¢Ô¤„¢Ô¤„¢Ô¤„¢Ô¤„¢Ô¤„¢Ô¤„¢Ô¤„¢Ô¤„¢Ô¤„¢Ô¤„¢Ô¤„¢Ôÿºÿº'ÿ·'F÷±2jÝ©>‘Çž_±Äo¶ÁŸyº¾ ‚¿» ˆÃ¸œ‡È¶™ˆÌ³–ˆÐ±’ŠÓ¯ŒÖ®ŒŽØ¬Š“Û«‰™Ü¦‡Ú¢† Ö †¢Ô †¢Ô †¢Ô †¢Ô †¢Ô †¢Ô †¢Ô †¢Ô †¢Ô †¢Ô †¢Ô †¢Ô †¢Ôÿºÿº&ÿ·&Fö²1jݪ=‘Çž^±Äo¶Á xº¾¡¿»¡ˆÄ¸ž‡Éµ›‡Í²˜ˆÑ°•‰Õ®’‹Ø¬Ûª’Þ¨Œšß¢ŠÚž‰ Öœ‰¡Ôœ‰¡Ôœ‰¡Ôœ‰¡Ôœ‰¡Ôœ‰¡Ôœ‰¡Ôœ‰¡Ôœ‰¡Ôœ‰¡Ôœ‰¡Ôœ‰¡Ôœ‰¡Ôþºÿ»&ÿ¸&Fö²0jݪ<‘Çž]±Äžn¶Á¡vº¾¢¿»£ˆÄ· ‡Ê´‡Ï±š‡Ó®˜ˆ×¬•ŠÛª“Þ¨‘’⤙àžÛšŒ ×™‹¡Õ™‹¡Õ™‹¡Õ™‹¡Õ™‹¡Õ™‹¡Õ™‹¡Õ™‹¡Õ™‹¡Õ™‹¡Õ™‹¡Õ™‹¡Õ™‹¡Õþ»þ»&ÿ¸%Fö³0jÜ«;’ÇŸ]±ÄŸl¶Á¢tº¾¤~¿º¤‡Å·¢‡Ê³Ÿ‡Ð°œ‡Õ­šˆÙª™ŠÞ¨˜Žâ¥—“柕™àš‘œÛ—Ÿ×–ޡՖޡՖޡՖޡՖޡՖޡՖޡՖޡՖޡՖޡՖޡՖޡՖޡÕý»þ»&ÿ¹%Fö³/jÜ«:’ÇŸ\±Ä j¶Á£sº¾¥|Àº¥…Ŷ£‡Ë³¡‡Ñ¯Ÿ‡Ö¬ž‰Û¨œ‹ß¤šáŸ™ãœš˜á—–œÜ”“ŸØ“’ Ö“’ Ö“’ Ö“’ Ö“’ Ö“’ Ö“’ Ö“’ Ö“’ Ö“’ Ö“’ Ö“’ Ö“’ Öý» ý¼&þ¹$Fö´.jÜ«:’Ç \±Ä¡h¶Á¥qº¾§zÀº§„Ŷ¦‡Ì²¤‡Ñ®¢‡×©ŸˆÛ¤‰Þ ›ŠàššŒá–›“á•››Ý’—žØ‘• ×‘• ×‘• ×‘• ×‘• ×‘• ×‘• ×‘• ×‘• ×‘• ×‘• ×‘• ×‘• ×ü¼ ý¼&þº#Fö´-jܬ9’Ç [±Ä£fµÁ¦nº¾©xÀº©‚Ŷ¨ˆÌ°¥‡Òª¢‡×¦Ÿ‡Ú¡ž‡Ü›ˆÞ–œŠß‘›ß‘™Ý›žÙ™Ÿ×™Ÿ×™Ÿ×™Ÿ×™Ÿ×™Ÿ×™Ÿ×™Ÿ×™Ÿ×™Ÿ×™Ÿ×™Ÿ×™Ÿ×ü¼ ü¼&ýº"Eöµ,jÜ­7“Ç¡Z±Å¥cµÂ©kº¾¬u¿º­ų©‡Ì­¥†Ò§¢†Ö¢¡†ØŸ†Ú˜ž‡Û’‰ÝŽÝŒž”Ü žÙŒžŸ×ŒžŸ×ŒžŸ×ŒžŸ×ŒžŸ×ŒžŸ×ŒžŸ×ŒžŸ×ŒžŸ×ŒžŸ×ŒžŸ×ŒžŸ×ŒžŸ×û½ û½%ý»"Eö¶+jÛ­6“Ç¢Y±Å§_µÂ­f¹¿±p¾·­~ư©‡Íª¦†Ñ¤¤…Ôž¢…Ö™¡…Ø” †ÙŸ‡Ú‹Ÿ‹ÛˆŸÛˆ ˜Øˆ¡×ˆ¡×ˆ¡×ˆ¡×ˆ¡×ˆ¡×ˆ¡×ˆ¡×ˆ¡×ˆ¡×ˆ¡×ˆ¡×ˆ¡×ú½ ú¾%ü¼ Eö·*jÛ¯4”ȤU±Æ«X´Ã³_·»²n¿²­~Ǭ©†Ì¦§…Р¥„Ò›¤„Ô–£„Õ‘¢…Ö¡†×‰¡‰Ø†¡Ø„¡“ׄ¢—Ö„¢—Ö„¢—Ö„¢—Ö„¢—Ö„¢—Ö„¢—Ö„¢—Ö„¢—Ö„¢—Ö„¢—Ö„¢—Ö„¢—Öù¾ ù¿%ú½Eö¸'jÛ°1”ȨM¯Ç²N²Á¸X¸´±pÁ­­Ç©ª…Ë¢¨„ΧƒÐ—¦ƒÑ’¥„ÒŽ¤…Ó‹£†Ôˆ£ˆÕ„£‹Õ‚£Õ£“Õ£“Õ£“Õ£“Õ£“Õ£“Õ£“Õ£“Õ£“Õ£“Õ£“Õ£“Õ£“ÕôÀ ÷À$ù¿Döº%jÚ².•ʯ@­È½=¯·¶]º®±r©­Æ¥«…ÉŸªƒË™©ƒÍ”¨ƒÎ§„ÏŒ¦…Љ¦†Ñ†¥‡Ò„¥ŠÒ¥Ò€¥Ò€¥Ò€¥Ò€¥Ò€¥Ò€¥Ò€¥Ò€¥Ò€¥Ò€¥Ò€¥Ò€¥Ò€¥ÒìÁ õÂ$öÁD÷½!jÚ´)–ͼ(©»»C³®µa¼¨±sÁ¥®Å¡­„Ç›¬ƒÉ–«ƒÊ‘ª„ËŽ©„Ì‹©…͈¨†Î†¨‡Îƒ¨‰Î§ŒÏ€§Ï€§Ï€§Ï€§Ï€§Ï€§Ï€§Ï€§Ï€§Ï€§Ï€§Ï€§Ï€§ÏßÄ òÅ#óÄCôÁiÞÂÁÀ#¬¯¹L¶¦´e½¢²uÀ °€Ã®„Å—­„Æ“­„Ǭ„ÈŒ«…ɉ«†Ê‡«†Ê…ªˆÊƒª‰Ëª‹Ë€ªŒË€ªŒË€ªŒË€ªŒË€ªŒË€ªŒË€ªŒË€ªŒË€ªŒË€ªŒË€ªŒË€ªŒË€ªŒËÚÅ ëÉ "îÈBïÆhÐÒ ‡±¾/®¥¸T¸Ÿµh¼³v¿›±Á™°„”¯„ï…Ä®…ÅŠ®†Æˆ­†Æ‡­‡Æ…­ˆÇƒ­‰Ç­‹Ç€¬‹Ç€¬‹Ç€¬‹Ç€¬‹Ç€¬‹Ç€¬‹Ç€¬‹Ç€¬‹Ç€¬‹Ç€¬‹Ç€¬‹Ç€¬‹Ç€¬‹ÇÕÆ ÙÌ åÏ @ØÕ _½Ö ˆ¥Ä4¦œ·Z¸™µk»—´w½–³¾•²…À‘±…Áޱ…Á‹°†Â‰°‡Âˆ°‡Ã†°ˆÃ…¯‰Ãƒ¯ŠÄ‚¯‹Ä¯‹Ä¯‹Ä¯‹Ä¯‹Ä¯‹Ä¯‹Ä¯‹Ä¯‹Ä¯‹Ä¯‹Ä¯‹Ä¯‹Ä¯‹ÄÒÈÓÏ ÕÔ =ÂÙ c«Þƒ›Î3™”ÄS¦‘¾g¯ºt´·}¹‘µ„¼Ž³†¾Œ²†¿Š²‡Àˆ²ˆÀ†±ˆÁ…±‰Á„±ŠÁ‚±‹Á±ŒÂ€±ŒÂ€±ŒÂ€±ŒÂ€±ŒÂ€±ŒÂ€±ŒÂ€±ŒÂ€±ŒÂ€±ŒÂ€±ŒÂ€±ŒÂ€±ŒÂ€±ŒÂÎÊÎÑ Æ× A¯êaæxÚ2ˆ‹ÒL”‰Ë_œˆÆn£ˆÃx¨…À|«ƒ¿®€½°¼ƒ±}¼„²|»†³{»‡´zºˆ´yº‰µx¹‹µx¹Œ¶x¹Œ¶x¹Œ¶x¹Œ¶x¹Œ¶x¹Œ¶x¹Œ¶x¹Œ¶x¹Œ¶x¹Œ¶x¹Œ¶x¹Œ¶x¹Œ¶ÉËÈÒ "³ß B üZ“ð(j‹æ9w„ßI‚Ø[‹€Ói‘|Ðq–yÍvšvËztÊ}žrÉ qÈ¡pǃ¢oÇ…£nƆ£mƈ¤lÅŠ¥lÅ‹¥lÅ‹¥lÅ‹¥lÅ‹¥lÅ‹¥lÅ‹¥lÅ‹¥lÅ‹¥lÅ‹¥lÅ‹¥lÅ‹¥lÅ‹¥lÅ‹¥ÄÎ ·Ù&£û=–ÿNú/[†ò?g€ëNq{å[yvàe€qÝl„nÚrˆkÙw‹i×zgÖ~ŽfÕ€eÔ‚dÔ„‘cÓ†‘bÓ‰’aÒ‹“aÒŒ“aÒŒ“aÒŒ“aÒŒ“aÒŒ“aÒŒ“aÒŒ“aÒŒ“aÒŒ“aÒŒ“aÒŒ“aÒŒ“aÒŒ“ÿ± ÿ±#ÿ®1:ÿ©>Yí¢KyÙš\—È•r°Å•}µÃ—…¸Á—‹»¿“Œ½¾ŽÀ¼ŒÂ»‰’ĺ†”Źƒ–ƹ™Ç¸€›È¸~žÉ·}¢Ê·|§Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Êÿ± ÿ±#ÿ®1:ÿ©>Yí¢KyÙš\—È•r°Å•}µÃ—…¸Á—‹»¿“Œ½¾ŽÀ¼ŒÂ»‰’ĺ†”Źƒ–ƹ™Ç¸€›È¸~žÉ·}¢Ê·|§Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Êÿ± ÿ±#ÿ®1:ÿ©>Yí¢KyÙš\—È•r°Å•}µÃ—…¸Á—‹»¿“Œ½¾ŽÀ¼ŒÂ»‰’ĺ†”Źƒ–ƹ™Ç¸€›È¸~žÉ·}¢Ê·|§Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Êÿ± ÿ±#ÿ®1:ÿ©>Yí¢KyÙš\—È•r°Å•}µÃ—…¸Á—‹»¿“Œ½¾ŽÀ¼ŒÂ»‰’ĺ†”Źƒ–ƹ™Ç¸€›È¸~žÉ·}¢Ê·|§Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Êÿ± ÿ±#ÿ®1:ÿ©>Yí¢KyÙš\—È•r°Å•}µÃ—…¸Á—‹»¿“Œ½¾ŽÀ¼ŒÂ»‰’ĺ†”Źƒ–ƹ™Ç¸€›È¸~žÉ·}¢Ê·|§Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Êÿ± ÿ±#ÿ®1:ÿ©>Yí¢KyÙš\—È•r°Å•}µÃ—…¸Á—‹»¿“Œ½¾ŽÀ¼ŒÂ»‰’ĺ†”Źƒ–ƹ™Ç¸€›È¸~žÉ·}¢Ê·|§Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Êÿ± ÿ±#ÿ®1:ÿ©>Yí¢KyÙš\—È•r°Å•}µÃ—…¸Á—‹»¿“Œ½¾ŽÀ¼ŒÂ»‰’ĺ†”Źƒ–ƹ™Ç¸€›È¸~žÉ·}¢Ê·|§Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Êÿ± ÿ±#ÿ®1:ÿ©>Yí¢KyÙš\—È•r°Å•}µÃ—…¸Á—‹»¿“Œ½¾ŽÀ¼ŒÂ»‰’ĺ†”Źƒ–ƹ™Ç¸€›È¸~žÉ·}¢Ê·|§Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Ê´{©Êÿ± ÿ²"ÿ®0:ÿ©=Yì£JyØ›[˜Ç•r±Å—{µÃ˜ƒ¸Á™Š»¿•‹¾½‘ŒÁ»ŽŽÃºŠÅ¹‡’Ǹ„•É·‚˜Ê¶€›Ë¶~žÌµ}£Ì³|§Í¯|¨Ë¯|¨Ë¯|¨Ë¯|¨Ë¯|¨Ë¯|¨Ë¯|¨Ë¯|¨Ë¯|¨Ë¯|¨Ë¯|¨Ë¯|¨Ëÿ² ÿ²!ÿ¯/:ÿª}Ö¨D›É¨O¯Ç°S²Å¸Yµ¹³m¿±­}Ƭª†Ë¥§…ÏŸ¦„ј¤„Ó’£„ÕŒ¢†×ˆ¡Š×…¡Ž×ƒ¢–Ö„¤ŸÔ„¢£Ñ„¢£Ñ„¢£Ñ„¢£Ñ„¢£Ñ„¢£Ñ„¢£Ñ„¢£Ñ„¢£Ñ„¢£Ñ„¢£Ñ„¢£Ñÿ·ÿ¸ÿ¶%9ÿ±1Zê«<~׬;™Ê­D­É¹E®½¸Y¸²²oÀ¬®~ƨ«…Ê¡©„Í›§ƒÏ•¦ƒÐ¥„ÒŠ¤†Ó†£ˆÔƒ£ŒÔ£‘Ô€¤™Ó€¦¡Ñ€¦¡Ñ€¦¡Ñ€¦¡Ñ€¦¡Ñ€¦¡Ñ€¦¡Ñ€¦¡Ñ€¦¡Ñ€¦¡Ñ€¦¡Ñ€¦¡Ñÿ¸ÿ¹ÿ·$9ÿ³/Zé­9~Ù´/–̸2©Â½@°³¶]º¬±qÁ§®~Ť¬…È«ƒÊ—©ƒÌ’¨„Χ„ω§†Ð…¦ˆÐ‚¦‹Ñ€¦ŽÑ~¦”Ð}§šÏ}§šÏ}§šÏ}§šÏ}§šÏ}§šÏ}§šÏ}§šÏ}§šÏ}§šÏ}§šÏ}§šÏÿ¹ÿºÿ¹"9ÿµ-Zì³0zÝÀÉÃ!¨µºH´«µb¼¦²sÀ£¯~஄ƙ¬ƒÈ”«„ɪ„Ê‹ª…ˈ©†Ì…©ˆÍ‚¨ŠÍ€¨Î~¨‘Í|©–Í|©–Í|©–Í|©–Í|©–Í|©–Í|©–Í|©–Í|©–Í|©–Í|©–Í|©–Íü»ü¼þ»8ÿ·)Zð½$tßÓ†¹Á*ªª¹O¶¤µe¼ ²t¿ž±›¯„Ö®„Å‘­„Æ­…ÇŠ¬†È‡¬‡É…«ˆÉ‚«ŠÊ€«ŒÊ~«Ê|«’Ê|«’Ê|«’Ê|«’Ê|«’Ê|«’Ê|«’Ê|«’Ê|«’Ê|«’Ê|«’Ê|«’Êñ½ ù¾ú¾7üº%ZçÎhÈÙ ‰­Ã2§¡¸V¸µh»›³u¾™²À˜±„Á“°…¯…ÃŒ¯†Ä‰®†Å†®‡Å„®ˆÆƒ­ŠÆ­‹Æ­ŽÇ}­Ç}­Ç}­Ç}­Ç}­Ç}­Ç}­Ç}­Ç}­Ç}­Ç}­Ç}­ÇßÀõÂöÂ6îÈPÍÜ fµÚˆ¢É6 š¾V°—·j¹•µv¼”´~¾”³„¿²…À±†Áб†Áˆ±‡Â†°ˆÂ„°‰Âƒ°ŠÃ°‹Ã€¯Ã~¯Ã~¯Ã~¯Ã~¯Ã~¯Ã~¯Ã~¯Ã~¯Ã~¯Ã~¯Ã~¯Ã~¯ÃÙÂäÇ ïÈ4ÑÚ Eºéh¦Þ‚˜Ñ7•‘ÈS¡Âe©Ž¾r®¼{²Œºµ‰¸‚·‡¸„¸…·…¹ƒ¶†º‚¶‡ºµˆ»€µ‰»~µŠ¼}´Œ¼|´½|´½|´½|´½|´½|´½|´½|´½|´½|´½|´½|´½ÔÄÖË ÓÔ '½â I©ôe™æ%xŽÜ9†ˆÔO†Ï`—„ÌmœƒÉu Çx¢}Æ{¤zÅ}¦yÄ€§wèvƒ©u„ªtÁ†«sÁ‡«rÀ‰¬q¿‹­q¿‹­q¿‹­q¿‹­q¿‹­q¿‹­q¿‹­q¿‹­q¿‹­q¿‹­q¿‹­q¿‹­ÏÆÐÍ ÀÙ ,¬÷H›ú\ï1k†çBv€âP~~Ý_…{ÙiŠwÕntÓs’qÑw”pÐz–nÏ}—mΙlÍ™k̓šjÌ…›i̇œhˉgÊŒgÊŒgÊŒgÊŒgÊŒgÊŒgÊŒgÊŒgÊŒgÊŒgÊŒgÊŒÊÈÂÒ®æ -ÿA‘ÿ(P‡ú9\óHf|íTnwè^uqäezmák~jßphÞu„fÜx…eÛ{‡cÚ~ˆbÚ‰aÙƒŠ`Ù…Š`؇‹^ØŠŒ^Ö^Ö^Ö^Ö^Ö^Ö^Ö^Ö^Ö^Ö^Ö^ÖÄʱڟÿ (’ÿ7‰ÿ.C‚ÿ=N|ýKWwøV_oó]ehðbjdíinaëoq_éss]èwu\ç{v[æ~wZæ€xYåƒyXå…zXäˆzWä‹{VãŽ|VãŽ|VãŽ|VãŽ|VãŽ|VãŽ|VãŽ|VãŽ|VãŽ|VãŽ|VãŽ|VãŽ|ÿªÿª'ÿ§6/ÿ¢DJúReê—_~Ü“n“Ï’x¥Æ’‚´Ä’‰¶Ã‘ޏÁŽºÀŠ’¼¿‡”½¾„–¿¾‚™À½€›Á½~žÁ¼}¡Â¼{¤Â¼z¨Ã¼y­Ã¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Âÿªÿª'ÿ§6/ÿ¢DJúReê—_~Ü“n“Ï’x¥Æ’‚´Ä’‰¶Ã‘ޏÁŽºÀŠ’¼¿‡”½¾„–¿¾‚™À½€›Á½~žÁ¼}¡Â¼{¤Â¼z¨Ã¼y­Ã¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Âÿªÿª'ÿ§6/ÿ¢DJúReê—_~Ü“n“Ï’x¥Æ’‚´Ä’‰¶Ã‘ޏÁŽºÀŠ’¼¿‡”½¾„–¿¾‚™À½€›Á½~žÁ¼}¡Â¼{¤Â¼z¨Ã¼y­Ã¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Âÿªÿª'ÿ§6/ÿ¢DJúReê—_~Ü“n“Ï’x¥Æ’‚´Ä’‰¶Ã‘ޏÁŽºÀŠ’¼¿‡”½¾„–¿¾‚™À½€›Á½~žÁ¼}¡Â¼{¤Â¼z¨Ã¼y­Ã¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Âÿªÿª'ÿ§6/ÿ¢DJúReê—_~Ü“n“Ï’x¥Æ’‚´Ä’‰¶Ã‘ޏÁŽºÀŠ’¼¿‡”½¾„–¿¾‚™À½€›Á½~žÁ¼}¡Â¼{¤Â¼z¨Ã¼y­Ã¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Âÿªÿª'ÿ§6/ÿ¢DJúReê—_~Ü“n“Ï’x¥Æ’‚´Ä’‰¶Ã‘ޏÁŽºÀŠ’¼¿‡”½¾„–¿¾‚™À½€›Á½~žÁ¼}¡Â¼{¤Â¼z¨Ã¼y­Ã¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Â¸y¯Âÿªÿª'ÿ§5/ÿ£DJúQeé—^~Û”m”Ï’w¦Å’´Ä“ˆ¶Ã’¸ÁºÀ‹‘¼¿ˆ“¾¾…–¿½‚˜Á¼€›Â¼~žÂ¼}¡Ã»{¤Ä»z©Äºy­Äµy®Ãµy®Ãµy®Ãµy®Ãµy®Ãµy®Ãµy®Ãµy®Ãµy®Ãµy®Ãµy®Ãÿ«ÿ«&ÿ¨4/ÿ¤CJùžPeé˜]Ú•i•Í”t¨Å”~´Ä•†¶Â•Œ¹Á‘Ž»¿½¾‰’¿½†”Á¼ƒ—ûšÄº~ź}¡Æº{¥Æ¹zªÆµz¬Æ±z­Ä±z­Ä±z­Ä±z­Ä±z­Ä±z­Ä±z­Ä±z­Ä±z­Ä±z­Ä±z­Äÿ«ÿ«%ÿ©4/ÿ¤BJùŸOfè™\€Ú–f–Ì•q©Å•|´Ä–ƒ·Â—‹ºÀ“Œ¼¾Ž¿½‹Á¼‡“ú„–Ź™Æ¹Ǹ}¡È¸|¦ÉµzªÉ°{«Ç¬{­Å¬{­Å¬{­Å¬{­Å¬{­Å¬{­Å¬{­Å¬{­Å¬{­Å¬{­Å¬{­Åÿ¬ÿ¬$ÿ©3/ÿ¥AJùŸOfè™[Ù˜c–Ì–oªÅ–y´Ã—·Á˜‰º¿•‹½¾‘À¼Âºˆ’Ź…•Ǹ‚˜É·ʶ}¢Ë¶|¨Ë°{©Ê¬|ªÈ¨}¬Å¨}¬Å¨}¬Å¨}¬Å¨}¬Å¨}¬Å¨}¬Å¨}¬Å¨}¬Å¨}¬Å¨}¬Åÿ¬ÿ¬$ÿª2/ÿ¥AKù NgçšYÙ™a—Ë—m«Å—w´Ã™·Áš‡»¿—о½“ŒÁ»ŽŽÄ¹ŠÇ¸†“ɶ‚˜ËµÍ´~£Î±|¦Î¬}¨Ë¨}ªÉ¥~¬Æ¥~¬Æ¥~¬Æ¥~¬Æ¥~¬Æ¥~¬Æ¥~¬Æ¥~¬Æ¥~¬Æ¥~¬Æ¥~¬Æÿ¬ÿ­#ÿª2/ÿ¦@Kø MgçœWÙš^—˘j¬Å™t´Ãš}·Á›…»¾™‰¿¼•ŠÂºŒÅ¸ŒÈ¶‡’Ë´ƒ—γ€Ð²¤Ñ¬~¥Ï¨~§Ì¤©É¡€¬Æ¡€¬Æ¡€¬Æ¡€¬Æ¡€¬Æ¡€¬Æ¡€¬Æ¡€¬Æ¡€¬Æ¡€¬Æ¡€¬Æÿ­ÿ­#ÿ«1/ÿ¦?Kø MgçUÙœ\—Ê™h¬Åšr´Ãœz¸Àœƒ»¾œ‰¿»—‰Ã¹“‹Ç·ŽË´‰Î²„–ѱӬ€¢Ó§€¥Ð¤€§Í ©Êž«Æž«Æž«Æž«Æž«Æž«Æž«Æž«Æž«Æž«Æž«Æÿ­ÿ­"ÿ«1/ÿ§?Kø¡LgçžSÙY—Ê›e¬Åœo´Ãx¸Àž¼½žˆÀ»šˆÄ¸•‰Éµ‹Í²‹Ñ°†•Õ®„ž×§‚¡Ô£‚¤ÑŸ‚§Íœƒ©Êšƒ«Çšƒ«Çšƒ«Çšƒ«Çšƒ«Çšƒ«Çšƒ«Çšƒ«Çšƒ«Çšƒ«Çšƒ«Çÿ­ÿ®"ÿ«0/ÿ§>Kø¡KhçŸQÙŸV—Êœb¬Ål´ÃŸu¸À ~¼½ ‡ÁºˆÆ·˜ˆË³“‰Ï°ŽÔ­‰”Ù¨†Ú¢…¡Õž…¤Ñ›…¦Î™…©Ê—…«Ç—…«Ç—…«Ç—…«Ç—…«Ç—…«Ç—…«Ç—…«Ç—…«Ç—…«Ç—…«Çÿ®ÿ®"ÿ¬0/ÿ§>Kø¢Khè¡OÙ S—Êž_¬ÆŸi´Ã¡r¸À¢|¼½¢„Á¹ ‡Çµœ‡Í²—ˆÒ®“‹ØªŽ“ߢ‹œÜœ‰ Ö™ˆ£Ò—ˆ¦Î•ˆ©Ê”ˆ«Ç”ˆ«Ç”ˆ«Ç”ˆ«Ç”ˆ«Ç”ˆ«Ç”ˆ«Ç”ˆ«Ç”ˆ«Ç”ˆ«Ç”ˆ«Çÿ®ÿ®!ÿ¬//ÿ¨=Kø¢Jhè¢M€Ù¢P—Ë \¬Æ¡e³Ã¤n·À¥x¼¼¥‚¸¤‡È´ ‡Î°ˆÕ«™ŠÝ¥—“曑›Ý– ×”£Ó’Œ¦Ï‘‹¨ËŠ«ÈŠ«ÈŠ«ÈŠ«ÈŠ«ÈŠ«ÈŠ«ÈŠ«ÈŠ«ÈŠ«ÈŠ«Èÿ®ÿ¯!ÿ­//ÿ¨ÿPU÷ŸQhë S{à WÔž_žÊ›k¬Å›u´Ã›~¸À›‡¼½—ŠÀº‘ŒÅ·ŠÊ´„—ϲ€£Ò¨¥Ï£€¨Ë €«Ç­Å›¯Â™‚±¿™‚±¿™‚±¿™‚±¿™‚±¿™‚±¿™‚±¿™‚±¿™‚±¿™‚±¿ÿ¦ÿ§%ÿ¥4%ÿ¡C>ÿžNUø¡Nhì¢Pzà£RŒÕ¡[Ëžf¬Æq´Ãžz¸Àž„¼¼›ˆÂ¹•ŠÇµÎ°†–Ô©‚ Ö¡‚¤Ð‚¨ËšƒªÈ™ƒ­Å—„¯Â–„°À–„°À–„°À–„°À–„°À–„°À–„°À–„°À–„°À–„°Àÿ¦ÿ§%ÿ¥4%ÿ¡B>ÿŸLUø¢Lgì¥Myá¦N‹Õ¤VœÌ¡aªÆ¡l³Ã¢v·À¢€½¼ ‡Ã·šˆÊ²“ŠÒ¬‹”Û ‡ŸØš†¤Ñ—†§Ì•†ªÈ”‡¬Å“‡®Ã’‡°À’‡°À’‡°À’‡°À’‡°À’‡°À’‡°À’‡°À’‡°À’‡°Àÿ§ÿ¨$ÿ¦3%ÿ¢B>ÿ JTù¤Jfí§Jxâ©KŠÖ¨QšÍ¦[©Ç¥e²Ä§p¶À§z¼¼¦ƒÃ¶¢‡Ë¯ˆÖ¥—•æ—žÚ“£Ò‘‹§Í‹ªÉŠ¬ÆŠ®Ã‰°Á‰°Á‰°Á‰°Á‰°Á‰°Á‰°Á‰°Á‰°Á‰°Áÿ§ÿ¨$ÿ¦3%ÿ¢A>ÿ¢HTù¦GfîªGwã­GˆÙ­K˜Ï¬T¦È¬^¯Æ¯h³Â±s¹¾²}À²ª‡Ë¥¢†Õ”œ‹ÞšÚ•¢ÓŒ’¦Î‹©Ê‹Ž«Ç‹­ÄŒŒ¯ÁŒŒ¯ÁŒŒ¯ÁŒŒ¯ÁŒŒ¯ÁŒŒ¯ÁŒŒ¯ÁŒŒ¯ÁŒŒ¯ÁŒŒ¯Áÿ¨ÿ©$ÿ§2%ÿ£A>ÿ¤FSú©Ddï­Cuä±B…Û´D”ÒµJ¡Ë·S«Ê¾_­½·n¸²°|©ª†Ëœ¥„Ò ‡Ø† —Ù‡ž¢Ó‡˜¥Ï‡•¨Ë‡“ªÈˆ‘­Åˆ¯Âˆ¯Âˆ¯Âˆ¯Âˆ¯Âˆ¯Âˆ¯Âˆ¯Âˆ¯Âˆ¯Âÿ¨ÿ©#ÿ§2%ÿ£@>ÿ¦CRû«Acð±?sç·=‚Þ¾;ÖÄ?šÌÅJ¦¼¼]²±µo»ª°}ã«„É–§ƒÎФ†Ó£Õ¥ŸÒ‚¡¥Ï‚œ¨Ìƒ™ªÉ„–¬Æ…”®Ã…”®Ã…”®Ã…”®Ã…”®Ã…”®Ã…”®Ã…”®Ã…”®Ã…”®Ãÿ©ÿª#ÿ¨1%ÿ¤?>ÿ¨@Qü¯>ÿ«;Oÿ´7]ö½3jëÊ1uÜÚ)‚ÄÎ8™²ÁO«§¸c·¡´s¼ž±Á˜¯„Ĭ„ȇª‡Ê€©ŒÌ|©“ÌzªœËy«¦Êz§ªÈ|¢«Ç}ž­Ä}ž­Ä}ž­Ä}ž­Ä}ž­Ä}ž­Ä}ž­Ä}ž­Ä}ž­Ä}ž­Äÿªÿ«!ÿ©.%ÿ§<>ÿ°6Lüº0YïÈ,bÞÙ'mËÜ&†¶Ì<›¨ÁT«Ÿ¹f¶›µt¼™²¿•°„¯…Ć­‡Æ¬‹È}¬È{¬˜Èy­ŸÇw­§Çwª¬Æy¥­Äy¥­Äy¥­Äy¥­Äy¥­Äy¥­Äy¥­Äy¥­Äy¥­Äy¥­Äÿ«ÿ¬ ÿ«-$ÿ«6;ÿ¶/HóÄ(QàÖ&VÌä"q»Ú(ˆªÌA›ŸÃW©™¼i²–·v¹”´€½‘²…À‹±†Á†°ˆÃ¯‹Ä~®Å{®”Åz¯šÄx¯ Äu¯§Ät­®Ãt­®Ãt­®Ãt­®Ãt­®Ãt­®Ãt­®Ãt­®Ãt­®Ãt­®Ãÿ¬ÿ­ÿ¬+$ÿ°/7ú¿%AäÑ EÎä[½é"t­Ú,‰ŸÎE™—ÆZ¤“Àj­‘»v³¸·¶„»‰´†½…²ˆ¿‚±‹Á±ŽÁ|±’Âz±–Áy±›Áx²¡Àt±§Át±§Át±§Át±§Át±§Át±§Át±§Át±§Át±§Át±§Áÿ®ÿ¯ ÿ®($ÿ¸$1êË5ÐâC¿ð^¯è%u Û1‡–ÑH”Ê\žÅj¥‹Ávª‰¾}¯…¼€²‚ºƒ´~¹†¶|¸‰·y·Œ¸w·¹v¶“ºu¶—ºt¶ºs·¤¹s·¤¹s·¤¹s·¤¹s·¤¹s·¤¹s·¤¹s·¤¹s·¤¹s·¤¹ÿ°ÿ± ÿ±%#óÄ'Ôß+ÁïH°÷ `¡ê+s•ß9‚×LˆÑ]•†Ìj›„Ét €Æy¤}Ä}¦z€©wÁƒªuÀ†¬s¿Š­q¿®o¾¯n¾”¯l¾™¯k¾ ¯k¾ ¯k¾ ¯k¾ ¯k¾ ¯k¾ ¯k¾ ¯k¾ ¯k¾ ¯k¾ ¯ÿ³ÿ´ ü¼ÖÖ Ãí0²üJ¢ù%^–í3nŒåAz…ÞOƒÙ^ŠÕjzÒp“vÏu—sÎy™qÌ}›oË€mÊ„žkɇŸiÉŠ hÈŽ¡gÇ’¢eÇ–¢dÇœ£dÇœ£dÇœ£dÇœ£dÇœ£dÇœ£dÇœ£dÇœ£dÇœ£dÇœ£ô¶ ÿ¸ ÕÌ ÄÛ ²ü3£ÿH–ü,XŒó;e„ìIo~çUvzã`|ußgqÝm„mÛr‡jÙv‰hØz‹f×}dÖŽcÕ„aÔˆ`Ó‹‘_Ó’^Ò”’\Ò™“\Ò™“\Ò™“\Ò™“\Ò™“\Ò™“\Ò™“\Ò™“\Ò™“\Ò™“Ü»ØÃÄÑ³è £ÿ1–ÿ$CŒÿ4P„ûBZ}öObxñZhqî_mkëdqgéitdçnvbæsx`åwy_äz{]ã~|\â}[â…~ZáˆYà‹€Wà€Vß•Vß•Vß•Vß•Vß•Vß•Vß•Vß•Vß•VߕԽÄÈ´Ù £þ –ÿ,‹ÿ+:ƒÿ:D|ÿHMuÿRSnýWXgú]\c÷b_`ögb]ôkd[óoeYòsgWñwhVñziUð}jTï€kSï„kRî‡lPî‹mOínOínOínOínOínOínOínOínOínOínÆÀ´Ð£ã –ÿ‹ÿ $‚ÿ0/zÿ?7rÿH>jÿNCdÿTH^ÿYL[ÿ_OXÿdRUÿiTSÿmURþqWPýtXOüxYNû{ZMû[Lúƒ\Kù†]Iù‹^Hø_Hø_Hø_Hø_Hø_Hø_Hø_Hø_Hø_Hø_µÇ¤Ú–ÿŠÿÿ$yÿ3"pÿ;*hÿB1aÿJ6\ÿQ;WÿW?Sÿ]BPÿbDNÿgFLÿlHJÿpIIÿtJHÿwKFÿ{LEÿMDÿƒNCÿ‡NBÿ‹OAÿ‘PAÿ‘PAÿ‘PAÿ‘PAÿ‘PAÿ‘PAÿ‘PAÿ‘PAÿ‘PAÿ‘Pÿ‘ÿ•' ÿ•;ÿ“K/ÿYCÿŒdTûŒkcòŠrqêˆ|}ㆄ‡Þ‚ŠÚ–Ö}”›Óz˜ŸÑxœ¢ÐwŸ¤Îu¢¦Ít¦¨Ír©©Ìq­ªÌp²«Ëp¶«Ëo¼«ÈpÀ«ÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÿ‘ÿ•' ÿ•;ÿ“K/ÿYCÿŒdTûŒkcòŠrqêˆ|}ㆄ‡Þ‚ŠÚ–Ö}”›Óz˜ŸÑxœ¢ÐwŸ¤Îu¢¦Ít¦¨Ír©©Ìq­ªÌp²«Ëp¶«Ëo¼«ÈpÀ«ÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÿ‘ÿ•' ÿ•;ÿ“K/ÿYCÿŒdTûŒkcòŠrqêˆ|}ㆄ‡Þ‚ŠÚ–Ö}”›Óz˜ŸÑxœ¢ÐwŸ¤Îu¢¦Ít¦¨Ír©©Ìq­ªÌp²«Ëp¶«Ëo¼«ÈpÀ«ÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÿ‘ÿ•' ÿ•;ÿ“K/ÿYCÿŒdTûŒkcòŠrqêˆ|}ㆄ‡Þ‚ŠÚ–Ö}”›Óz˜ŸÑxœ¢ÐwŸ¤Îu¢¦Ít¦¨Ír©©Ìq­ªÌp²«Ëp¶«Ëo¼«ÈpÀ«ÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÄqÀªÿ’ÿ–' ÿ–;ÿ”K0ÿYCÿcTúŽidñpré‹z~≂‰Ü…‰’Ø‚Ž™Ô“žÑ}—¢Ï{›¦Íyž¨Ìw¢ªËv¥¬Êt©­És­®Ér²¯Éq·¯Èq¼¯Âs½®¾t½¯¾t½¯¾t½¯¾t½¯¾t½¯¾t½¯¾t½¯¾t½¯¾t½¯ÿ“ÿ—' ÿ˜;ÿ•K0ÿ‘YDÿ‘`Uúfdðmsèw€áŒ€‹Ûˆ‡”Õ…œÒ‚‘¡Ï–¦Ì}™©Ë{¬Éy¡®Èw¥°Çv©±Æu­²Æt²³Æs¹³Âuº³¼uº³¸vº³¸vº³¸vº³¸vº³¸vº³¸vº³¸vº³¸vº³¸vº³ÿ”ÿ˜' ÿ™;ÿ–K0ÿ’YDÿ’^Uú’deð‘jtçsàŽ}ŒÙ‹…–Ôˆ‹žÐ…¤Í‚”©Ê˜­È}œ°Ç{ ²Æy¤´Åx¨µÄv®¶Äu´¶Áv·¶¼w·¶·w·¶³x·¶³x·¶³x·¶³x·¶³x·¶³x·¶³x·¶³x·¶³x·¶ÿ•ÿ™' ÿ™;ÿ—J0ÿ“XDÿ”\Uú”aeð“gtç‘p‚ßzŽØƒ˜Ò‹Š Î‡§Ë„“¬È—°Æ›³Ä}ŸµÃ{¤·Ây©¹Âw¯¹Âvµ¹¼x¶¸¸x¶¸³x¶·°y··°y··°y··°y··°y··°y··°y··°y··°y··ÿ–ÿš' ÿš;ÿ—J1ÿ”UDÿ–YUú–^eð•dtç“l‚Þ‘vŽØ™Ñˆ¢ÍŠŽ©É‡’®Æ„–³Äš¶Â~Ÿ¹Â{¤ºÁyªºÁw±º½xµº·xµ¹³yµ¹¯y¶¸¬z¶·¬z¶·¬z¶·¬z¶·¬z¶·¬z¶·¬z¶·¬z¶·¬z¶·ÿ—ÿ›& ÿ›;ÿ˜I1ÿ–SDÿ˜WUú˜[eð—atç–h‚Þ“rÖ‘{šÐ„£ËŒ«ÇŠ‘±Ä†•¶Ãƒ™¸ÁžºÁ{¤»Ày«¼¿w³¼¸x³»²y´»®yµº«zµ¹¨{¶¸¨{¶¸¨{¶¸¨{¶¸¨{¶¸¨{¶¸¨{¶¸¨{¶¸¨{¶¸ÿ—ÿ›& ÿœ:ÿ˜I1ÿ˜QDÿšTTú›Xdðš]tç˜c‚Þ–mÖ“wšÐ‘€¤Ê‰¬Æ³Ã‰”·Â„˜ºÀž¼¿{¥¾¿y®¾¹x²¾²y²½­z³¼©{´º¦{µ¹¤|¶¸¤|¶¸¤|¶¸¤|¶¸¤|¶¸¤|¶¸¤|¶¸¤|¶¸¤|¶¸ÿ˜ÿœ& ÿœ9ÿ™H1ÿ™ODÿœRTûUcñZsç›_Þ™iÖ–ršÏ“|¥Ê‘…­Å´Ã‹’¸Á…–»¿€¾½{¥Á»y¯Á²z°À¬{±¾¨{³½¥|´»¢}µ¹ }¶¸ }¶¸ }¶¸ }¶¸ }¶¸ }¶¸ }¶¸ }¶¸ }¶¸ÿ™ÿ& ÿ9ÿ™G1ÿ›MCÿžOSûŸRcñ VrèŸ[€ßdŽ×šmšÐ—w¤Ê”­Å’ŠµÂŽ¹¿‡•½½€œÁ»{§Ä³z­Ä«{¯Â¦|±¿£}²½ ~´»žµ¹œ¶¸œ¶¸œ¶¸œ¶¸œ¶¸œ¶¸œ¶¸œ¶¸œ¶¸ÿ™ÿž& ÿ8ÿšG1ÿœKBÿ MRü¢Pbò£Sqé£Wà¡^ŒØžg˜Ð›q£Ê˜{­Å•…´Â’º¾Š’¿º›Å·|©É«|«Ç¤}®Ã ~°À²½›€³»™µº˜¶¸˜¶¸˜¶¸˜¶¸˜¶¸˜¶¸˜¶¸˜¶¸˜¶¸ÿšÿž& ÿž8ÿšF2ÿžIBÿ¢JQý¤M`ó¦Poê§T}á¦XŠÚ¤b–Ò¡k¡Ëu«Æš€³Â˜Šº¼ŽÂ¶ƒ™Ë¬}¦Î¢ªÉ€­Äš°À˜‚²¾—ƒ³¼•ƒµº”ƒ¶¸”ƒ¶¸”ƒ¶¸”ƒ¶¸”ƒ¶¸”ƒ¶¸”ƒ¶¸”ƒ¶¸”ƒ¶¸ÿšÿŸ& ÿž7ÿ›F2ÿŸGAÿ¤HPþ§J_ô©Lmë«P{ã¬T‡Ü«\“Ô©eΦo§È£z°ÃŸ„¸»–‹Ä°Œ™Î ƒ¤Ñ™„©Ê–…­Å”…¯Á“…±¾’…³¼‘…´º‘…µ¹‘…µ¹‘…µ¹‘…µ¹‘…µ¹‘…µ¹‘…µ¹‘…µ¹‘…µ¹ÿ›ÿŸ& ÿŸ7ÿ›E2ÿ¡E@ÿ¦FOÿªG]ö­Ikí°Lxæ³Oƒß´UŽÙµ_—Óµi Îµv§Á«|¶°Ÿ…Ä¡•’Î”Ž£Ò‹¨ËŠ¬ÆŽŠ¯ÂŽ‰±¿Ž‰²½Žˆ´»Žˆµ¹Žˆµ¹Žˆµ¹Žˆµ¹Žˆµ¹Žˆµ¹Žˆµ¹Žˆµ¹Žˆµ¹ÿ›ÿ & ÿŸ6ÿœD1ÿ£C?ÿ¨CNÿ­D[ø±Ehð¶Hté»L~ãÀQ‡ßÆ[ŽÖÈk”ƽq¦µ³xµ¥¨Ã”ŸÍ‰œ¢Ò‡”§Ìˆ‘«Ç‰®Ã‰Ž°À‰²¾ŠŒ³¼Š‹´ºŠ‹´ºŠ‹´ºŠ‹´ºŠ‹´ºŠ‹´ºŠ‹´ºŠ‹´ºŠ‹´ºÿœÿ¡& ÿ 6ÿžB1ÿ¥@>ÿ«@Lÿ±@Yú·Adó½DoîÅIwåÎR|ÝÖbÌÎh’¼Ån¤«»v´š±ÁŠªŠË§Ï€Ÿ¨Ì‚™«Çƒ•­Ä„“¯Á…‘±¿†³½‡Ž´»‡Ž´»‡Ž´»‡Ž´»‡Ž´»‡Ž´»‡Ž´»‡Ž´»‡Ž´»ÿÿ¢& ÿ 5ÿ ?0ÿ§==ÿ®hÿOCbÿUG]ÿZKYÿ`MVÿePSÿjQQÿnSOÿrTNÿvULþ{VKýWIý„XHüˆYGûZFû“[Eú˜\Eú˜\Eú˜\Eú˜\Eú˜\Eú˜\Eú˜\Eú˜\Eú˜\½½­Ížß’ÿ ‡ÿ~ÿ)uÿ5#lÿ<*dÿC/^ÿJ4XÿP7TÿV:Qÿ[Kÿd@JÿhAHÿlBFÿpCEÿtDDÿxEBÿ}FAÿG@ÿ†H?ÿŒI=ÿ‘J=ÿ‘J=ÿ‘J=ÿ‘J=ÿ‘J=ÿ‘J=ÿ‘J=ÿ‘J=ÿ‘J®Åž×õ†ÿ|ÿ qÿ$gÿ,_ÿ5Yÿ=!TÿE&OÿK)LÿR,HÿW/Fÿ]0Dÿa2Bÿf3@ÿj5?ÿn6=ÿs7<ÿw8;ÿ|9:ÿ:8ÿ†:7ÿŒ;6ÿ’<6ÿ’<6ÿ’<6ÿ’<6ÿ’<6ÿ’<6ÿ’<6ÿ’<6ÿ’<ÿƒÿ„"ÿ…5ÿƒF$ÿU4ÿ^BÿfPÿn\ù|wfóz€oîwˆwêu}çr•‚äpš…ãnžˆál¢‹àk§ßi«ŽÞh¯Ýg´‘Ýfº‘ÜeÁ’ÜeÉ’ÛeÐ’ÒgÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÿƒÿ„"ÿ…5ÿƒF$ÿU4ÿ^BÿfPÿn\ù|wfóz€oîwˆwêu}çr•‚äpš…ãnžˆál¢‹àk§ßi«ŽÞh¯Ýg´‘Ýfº‘ÜeÁ’ÜeÉ’ÛeÐ’ÒgÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÿƒÿ„"ÿ…5ÿƒF$ÿU4ÿ^BÿfPÿn\ù|wfóz€oîwˆwêu}çr•‚äpš…ãnžˆál¢‹àk§ßi«ŽÞh¯Ýg´‘Ýfº‘ÜeÁ’ÜeÉ’ÛeÐ’ÒgÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÎhÒ‘ÿ„ÿ…"ÿ†5ÿ„F$ÿ€U4ÿ„]Cÿ…ePÿƒm]ø€uhò}~qìz†yèwåu“…âr˜‰àpŒßn¢ŽÝl¦Ük«’Ûi¯”Úhµ•Úg»•ÚfÖÚfÌ–ÓhÏ–ÌiÏ•ÈjÏ–ÈjÏ–ÈjÏ–ÈjÏ–ÈjÏ–ÈjÏ–ÈjÏ–ÈjÏ–ÿ…ÿ‡"ÿ‡5ÿ…F$ÿ„T5ÿˆ\CÿˆdQþ‡k^÷ƒriñ€|së}…{çzŒ‚ãw’‡àt—ŒÞrœÜp¡’Ûn¦”Ùlª–Ùj°˜Øi¶™×h½™×hÆšÓhÌšÌjÌ™ÆkÌšÂlÌšÂlÌšÂlÌšÂlÌšÂlÌšÂlÌšÂlÌšÂlÌšÿ†ÿˆ!ÿˆ5ÿ†F%ÿ‡S5ÿ‹[CÿŒbQþŠj^ö‡qjð„ztꀃ}å}Š„âzŠÞv–Üt›’Úq •Øo¥˜Öm«šÕk°›Õj·œÔi¿ÔiÉÌkÊÆlÉÀmɽnɽnɽnɽnɽnɽnɽnɽnÉÿ‡ÿ‰!ÿŠ5ÿˆF%ÿŠR5ÿŽZCÿaQþŽh^ö‹ojï‡xué„~䀈†à|ŒÝy”‘Úvš•ØsŸ™Õp¥›ÔnªžÓm±ŸÒk¸ Òk¡ÍlÇ¡ÆnÇ¡ÀnÇ¡»oÇ¡¸pÇ¡¸pÇ¡¸pÇ¡¸pÇ¡¸pÇ¡¸pÇ¡¸pÇ¡¸pÇ¡ÿˆÿŠ!ÿ‹5ÿ‰F%ÿQ5ÿ’XCÿ’^Qþe^öŽlkï‹uvè‡~€ã„†ˆÞÛ{“”Øx™™ÕužœÓr¤ŸÑpª¢Ðn²£Ðmº¤ÎlÄ¥ÆoĤ¿pÄ¥ºqÄ¥µqÄ¥²rĤ²rĤ²rĤ²rĤ²rĤ²rĤ²rĤ²rĤÿ‰ÿ‹!ÿŒ4ÿŠF%ÿO4ÿ”VCÿ”[Qþ“a^ö‘hkîŽpvè‹{€â‡ƒ‰ÝƒŠ‘Ù~‘—Õz—œÓw Ðt¤£Ïqª¦Îo³§Ín½¨Çp¨¾qÁ©¸rÁ©´sÁ©¯t¨­t§­t§­t§­t§­t§­t§­t§­t§ÿŠÿŒ!ÿ4ÿ‹F&ÿ“N4ÿ–SBÿ—XPþ–^^ö”djî’lvçvጀŠÜ‡ˆ’Ø‚™Ó}•ŸÐyœ£Îu£§Ìr«ªËp´«Èp¿¬¿s¾¬·t¾­²u¾¬®v¿¬ªv¿«¨wÀª¨wÀª¨wÀª¨wÀª¨wÀª¨wÀª¨wÀª¨wÀªÿ‹ÿ ÿŽ4ÿE&ÿ–M3ÿ™PAÿšUOÿšZ]÷˜`iï•huè’p€á{ŠÜ‹„“Ö†ŒšÒ€“¡Î{š¦Ìw¢ªÊt«®Èr¸¯Àt¼¯·u¼°°v¼°«w¼¯¨x½¯¥y¾­£y¾­£y¾­£y¾­£y¾­£y¾­£y¾­£y¾­£y¾­ÿ‹ÿŽ ÿ4ÿD%ÿ˜J3ÿ›M@ÿQNÿW[øœ\hðšctè—jâ“uŠÜ€“ÖŠ‰›Ñ„£Í~˜©Éy¢®Çu­±Ätº³·v¹³¯x¹³ªyº³¦zº²£{»± {¼°Ÿ|½®Ÿ|½®Ÿ|½®Ÿ|½®Ÿ|½®Ÿ|½®Ÿ|½®Ÿ|½®ÿŒÿ ÿ4ÿ’C%ÿšH2ÿJ?ÿŸNMÿ SZù XfñŸ_rêœe}ã˜oˆÜ“z’Ö„›Ðˆ£Ë–«Ç{¡±Åv°µºw·¶¯y·¶¨z¸¶£|¸´ |¹³ž}º²œ~»±›~¼°›~¼°›~¼°›~¼°›~¼°›~¼°›~¼°›~¼°ÿÿ ÿ‘4ÿ”C$ÿ›F1ÿ H>ÿ¢KKÿ¤PXú¤Udó¤Zpë¢a{äŸi…Þšsו~™ÐŽˆ£Ê…“¬Ä} ´½x°¹¯yµ¹¦{¶¸¡}·¶~¸µ›¹´™º³˜€º²—€»±—€»±—€»±—€»±—€»±—€»±—€»±—€»±ÿÿ ÿ‘4ÿ—B$ÿC0ÿ¢E=ÿ¥HIÿ¨LUü©QaõªWlî©]wç¨cá¤m‹Öžy–Ë•ƒ¢À‹Ž­¶ƒš¶®~ª»¤|³¼ž~µºš€··˜¸µ–¹´•‚º³”‚º²“‚»±“‚»±“‚»±“‚»±“‚»±“‚»±“‚»±“‚»±ÿŽÿ‘ ÿ’4ÿ™A#ÿŸA/ÿ¤B;ÿ¨EGÿ¬ISþ®N^õ°Shì²Zrä³a{Û¯n„̦v”Àœ~¢´’ˆ®©Š”· …¤½™‚±¾•ƒ´»“„¶¸’„¸¶‘„¹´„¹³„º²„º²„º²„º²„º²„º²„º²„º²„º²ÿÿ’ ÿ“4ÿš?"ÿ¡?.ÿ§@:ÿ¬BEÿ°FPù³KZð·Rcè»Ykß½drѶl‚Ĭs“¶£z¡ª™ƒ®ž’·”Ÿ¾Ž‹±¿Œ‰³¼Œ‰µ¹Œˆ·¶Œˆ¸µŒ‡¹´Œ‡º³Œ‡º²Œ‡º²Œ‡º²Œ‡º²Œ‡º²Œ‡º²Œ‡º²Œ‡º²ÿÿ’ÿ”4ÿœ=!ÿ£<-ÿª=8ÿ¯@Bÿ´DLõºIUì¿Q\äÆZaØÅboɼi»²p’­ªw  ¡€­“›‹·‰–›½ƒ•¯¿„‘³¼†Žµ¹‡¶·‡Œ·¶ˆ‹¸µ‰Š¹´‰Šº²‰Šº²‰Šº²‰Šº²‰Šº²‰Šº²‰Šº²‰Šº²ÿÿ“ÿ•4ÿž; ÿ¥9+ÿ¬:5ÿ³=?ûºBGñÁHNèÉQRßÑ[YÏÊ`mÁÂg€²¹m¤±tŸ—ª}«Š¤ˆµ —»xŸ¬¾|𳼕´º’¶¸ƒ··„¸µ„¹³…º²…º²…º²…º²…º²…º²…º²…º²ÿ‘ÿ”ÿ–3ÿ 8ÿ¨6)ÿ°82ÿ¸:;öÀ?AìÊGEãÖTEÖÙWXÇÐ^k¸Èd~ªÁkŽœºrœŽ´z¨€®…²v«”¸o«©ºr¥µºwµ¹z™¶·}–·¶~“¹´‘º²€»±€»±€»±€»±€»±€»±€»±€»±ÿ’ÿ•ÿ—3ÿ¢5ÿ«3'ÿ´4/ù¾65íÉ=8âÖH8ÙàMEÍßVV¿Ø\i°Ðb{¡Éh‹“Ão™…¾w¤xºƒ­n¸“³h¸¨¶i²¸¶o§·¶s¡¸µvœ¹´x™º³z–»±{•¼°{•¼°{•¼°{•¼°{•¼°{•¼°{•¼°{•¼°ÿ“ÿ–ÿ™3ÿ¥0ÿ¯0#ýº/)ðÆ2-ãÔ;,Öà@:ËåHLÀáN\³ÝVl¥Ø]z˜ÒeˆŠÎm”}ÉvŸsă§lÀ‘¬g¾¡¯e¾¶¯f´»±k«»±n¥»±q ¼°s½¯tš½®tš½®tš½®tš½®tš½®tš½®tš½®tš½®ÿ”ÿ˜ÿ1ÿ©-ÿ´*õÂ)"äÑ-!Õà3,ÉèX—ñFe‹ëOpåXzzßd‚sÚmˆmÖvhÓ’dЈ•`Ï’˜^Ι\Í©š[ι™YÍÈšZÅÊœ\½É^¸Éž^¸Éž^¸Éž^¸Éž^¸Éž^¸Éž^¸Éž^¸Éžÿš ÿŸÿ¬ø¾ØÖ Èèºô"'®ú-9¢ú6J–ú?X‹õHc‚îRmzè\uräd{màm€hÝu…dÚ~ˆ`؆‹]ÖZÕ˜XÔ¢WÔ®‘VÔ¼VÔÍVÍÑ’WÈÑ“WÈÑ“WÈÑ“WÈÑ“WÈÑ“WÈÑ“WÈÑ“WÈÑ“ÿœ ÿ£ÿµÔÉ ÈÚ ¹ô¬ÿ#*¡ÿ.;•ÿ8I‹ÿBU‚øL_zòVgsî^mkêdrfçlwbätz_â|}\áƒZß‹‚WÞ“ƒUÝœ…TÜ¥†Rܯ†RÜ»†QÜÌ…RÚÚ…RÚÚ…RÚÚ…RÚÚ…RÚÚ…RÚÚ…RÚÚ…RÚÚ…ÿ  ÿ­ÔÀÆÎ¹ã «ÿŸÿ$*”ÿ09Šÿ:EÿFOzýQXrøX^kõ^ceòeh`ïlk]írnZëypWê€rUé‡tSçvQæ–wPæžxNå§yMå¯zMä»zLäÅzLäÅzLäÅzLäÅzLäÅzLäÅzLäÅzLäÅzÿ¤ظÄÄ·Óªó žÿ“ÿ'(‰ÿ35€ÿ??yÿJGpÿQNiÿWSbý]W^ûd[Zùj^W÷p`TövbRô|dPóƒeNòŠgLñ‘hKð˜iJðŸjIï§kHï°lGî·lGî·lGî·lGî·lGî·lGî·lGî·lGî·lݯżµÊ¨Ûœÿ ‘ÿ‡ÿ*#~ÿ6-vÿA6mÿHÿk2<ÿp3:ÿu49ÿz57ÿ€66ÿ†75ÿŒ83ÿ”83ÿ˜93ÿ˜93ÿ˜93ÿ˜93ÿ˜93ÿ˜93ÿ˜93ÿ˜9§Ã—Ôˆä€ÿ rÿgÿ_ÿ Wÿ& Qÿ/Lÿ7Gÿ>CÿE@ÿK=ÿP;ÿU9ÿY7ÿ^!5ÿb"4ÿg#2ÿl$1ÿr%/ÿw&.ÿ}'-ÿ„(+ÿ‹)+ÿ‘)+ÿ‘)+ÿ‘)+ÿ‘)+ÿ‘)+ÿ‘)+ÿ‘)+ÿ‘)ÿvÿs ÿr1 ÿqCÿqP&ÿuY3ÿub?ÿsjIÿptSÿn~[ük‡aùigög–kôeœnòc¡qñb¦sïa«uî`°vî^µwí^»xì]Ãyì\Ëzë[Øzæ]Þzß^áyØ`ãyÕ`ãyÕ`ãyÕ`ãyÕ`ãyÕ`ãyÕ`ãyÕ`ãyÿvÿs ÿr1 ÿqCÿqP&ÿuY3ÿub?ÿsjIÿptSÿn~[ük‡aùigög–kôeœnòc¡qñb¦sïa«uî`°vî^µwí^»xì]Ãyì\Ëzë[Øzæ]Þzß^áyØ`ãyÕ`ãyÕ`ãyÕ`ãyÕ`ãyÕ`ãyÕ`ãyÕ`ãyÿvÿsÿt1 ÿrBÿtO'ÿxX3ÿy`?ÿwiJÿsqTÿq|\ûn†c÷kŽiôi”mòg›qðe tïd¥víbªxìa°yë`µ{ë_¼|ê^Ä}ê]Í}ç]Ù}á_Þ}Ú`à|Ñbá}Ïbá}Ïbá}Ïbá}Ïbá}Ïbá}Ïbá}Ïbá}ÿwÿtÿu1 ÿsBÿwM'ÿ{V4ÿ|_@ÿzgKÿwoUþsz^úqƒeönŒkók“pði™sîgŸwìe¥yëdª{êb¯}éaµ~è`½è_Å€è^Ðâ_Ú€ÛaÞ€Òb߀ËcßÊdßÊdßÊdßÊdßÊdßÊdßÊdßÿxÿuÿv1 ÿtBÿzL'ÿU4ÿ€]@ÿ~eLÿznVþvw_ùtfõpŠmñm‘rîk˜vìižyëg¤|ée©~èc¯€çb¶‚æa½ƒæ`Ç„å_Ó„ÝaÚ„Óc݃ÌdÜ„ÆeÜ„ÅeÜ„ÅeÜ„ÅeÜ„ÅeÜ„ÅeÜ„ÅeÜ„ÅeÜ„ÿyÿvÿw0 ÿvBÿ~K'ÿ‚S4ÿƒ\@ÿ‚dLÿlVýzt`øwhósˆoðptím–yêk|èh£çf©‚åe¯„äc¶…äb¿‡ãaɇàaÕ‡ÕdÚ‡ÍeÚˆÇfÙˆÁgÙˆ¿gÙˆ¿gÙˆ¿gÙˆ¿gÙˆ¿gÙˆ¿gÙˆ¿gÙˆÿzÿxÿy0 ÿxAÿI'ÿ†R3ÿˆZ@ÿ‡bLÿƒiWü~qa÷{{iòw…qîswëp”|èm›€æj¢ƒäh¨†ãf¯ˆâd·ŠácÁ‹áb΋ØdÖ‹ÍfÖ‹ÆgÖŒÀhÖŒ»iÖŒºiÖŒºiÖŒºiÖŒºiÖŒºiÖŒºiÖŒºiÖŒÿ{ÿyÿz0 ÿ|?ÿ…H&ÿŠP3ÿŒX@ÿ‹_LÿˆgWü„naöxjñ{‚ríwŠyés’~æo™ƒäl¡‡âj¨Šàg¯Œße¸ŽÞdÄÛdÒÎgÓÆhÓ¿jÓºkÓµlÓ´lÓ´lÓ´lÓ´lÓ´lÓ´lÓ´lÓÿ|ÿzÿ{0 ÿ>ÿ‰F&ÿN2ÿ‘V?ÿ]KÿŽdVü‰kaö„skð~sì{‡zèvär—†ánŸŠßk§ŽÝh°Üf»’ÛeÊ“ÐhÑ“ÆjД¾kД¸lД³mД¯nÑ“®nÑ“®nÑ“®nÑ“®nÑ“®nÑ“®nÑ“®nÑ“ÿ}ÿ{ÿ|/ ÿƒ<ÿE%ÿ“M1ÿ•S>ÿ”YJÿ’`Uýh`öŠpjð„ytëƒ|æzŒƒâu•ˆßqžÝm§‘Ûi±”Ùg¿–ÔgΗÇk͘½l͘¶n͘°o͘¬pΗ©qΖ¨qÏ–¨qÏ–¨qÏ–¨qÏ–¨qÏ–¨qÏ–¨qÏ–ÿ~ÿ|ÿ~/ ÿ†;ÿ‘C$ÿ–K0ÿ˜P<ÿ˜UHÿ–\Tý“c_÷kiðŠtsë„|æ~‰„áx’‹ÝsœÚn¦•Øj³™ÖhÅ›ÉkË›½nÊœ´oÊœ®qÊœªrË›¦sËš£sÌ™¢t͘¢t͘¢t͘¢t͘¢t͘¢t͘¢t͘ÿÿ}ÿ/ ÿ‰:ÿ”B#ÿ™G/ÿ›L;ÿœRFÿ›XRÿ™_]ø•fhñnrëŠy{僄„à|ŒÜvš“Øo¦™ÒkµÎjÈŸ¾nÈŸ³qÇ ¬rÇ §tÈŸ£uÉž vÊžvË›vËšvËšvËšvËšvËšvËšvËšÿ€ÿ~ÿ€/ ÿŒ8ÿ—@"ÿœD-ÿŸI9ÿ NDÿ UOüž[Zõœbeî—joè‘tyáŠƒÙƒŠŒÏ{••Èu œÃp®¡¾o¿£³rÅ£ªtÅ£¤vÅ£ wÆ¡xÇ ›xÈž™yʘyÊœ˜yÊœ˜yÊœ˜yÊœ˜yÊœ˜yÊœ˜yÊœÿ€ÿÿ/ ÿ7ÿš?!ÿŸB,ÿ¢F7ÿ¤LBÿ¤RL÷¤XWï£_aç fkàšquÕ“|ËŠ…–»{šžµv§¤°t¸§¨v§¡xæyÄ¥šzÅ£˜{Æ¢–{Ç ”{Éž”|É”|É”|É”|É”|É”|É”|Éÿÿ€ÿ‚.ÿ‘6ÿœ< ÿ¡@*ÿ¥D4ÿ¨J?ú©PIòªVRêª]\â©ff×¢orË™xÁ¸ˆŠ—¯• ¨|¢¦£z²©žzÁ©™|Á¨–}æ”~Ĥ’~Å£‘~Ç¡~ÈŸ~Éž~Éž~Éž~Éž~Éž~Éž~Éžÿ‚ÿÿ„. ÿ”5ÿž:ÿ¤>(ÿ¨B2ÿ¬G;ö¯MDí±TMå³[UܰeaΨlqßt€¸–|®†˜¥ˆ‘¡ƒ§—€­«“€¿«‘Á©Â§ŽÃ¥Å£Æ¢ŒÈŸŒÈŸŒÈŸŒÈŸŒÈŸŒÈŸŒÈŸŒÈŸÿ‚ÿÿ†- ÿ–4ÿ 9ÿ¦<&ÿ«@/û°E8ò´K?é¹SFá½\MÓ¶b`Æ­ip»¥q°yŒ¥•‚—›¡“Š™§Œ‡©«ˆ‡¿¬ˆ‡Àªˆ†Â¨ˆ…戅Ťˆ„Æ¢ˆ„È ˆ„ÈŸˆ„ÈŸˆ„ÈŸˆ„ÈŸˆ„ÈŸˆ„ÈŸˆ„ÈŸÿƒÿ‚ÿˆ+ ÿ™2ÿ¢7ÿ©9$ÿ¯=,÷µB3í»I9åÂR>ÚÂXL̺`_¿²go³«n~¨£v‹œ~—’—‰ ‰’–§‚¥«~º¬€Àª‹Â¨‚ŠÃ¦ƒ‰Å¤ƒˆÆ¢„‡È „‡ÈŸ„‡ÈŸ„‡ÈŸ„‡ÈŸ„‡ÈŸ„‡ÈŸ„‡ÈŸÿ„ÿƒÿ‹* ÿœ1ÿ¥4ÿ¬6!þ³:(ó»@-éÃH1áËQ7ÒÇVKÅÀ^]¸¸en¬±l} ªsŠ”¤{•ŠŸ†ž€›’¥y˜¢ªt˜·«w•Á©z‘§|Ã¥}Å£~ŒÆ¡ŠÈŸŠÈŸŠÈŸŠÈŸŠÈŸŠÈŸŠÈŸŠÈŸÿ…ÿ„ÿŽ( ÿŸ1ÿ§2ÿ°3ù¹6"îÂ=&æÍG&ÛÓL5ËÌTI¾Å\[±¾cl¤¸jz˜²q‡Œ¬y“¨‚œw¤£p¢Ÿ§l¢´¨nŸÂ§r™Ã¦u•Ĥw’Æ¢xÇ¡zŽÈŸzŽÉžzŽÉžzŽÉžzŽÉžzŽÉžzŽÉžzŽÉžÿ†ÿ…ÿ‘& ÿ¡/ÿ«.ÿµ/ô¿2éË:ßÙDÑÚJ3ÄÒRG·ËZY©ÆaiœÀgxºn„„¶vy²€˜o¯Ÿh­£d­²¤eªÅ¤j¢Å£mÆ¢p™Ç¡r–ÈŸt“Éu“Êu“Êu“Êu“Êu“Êu“Êu“Êÿ‡ÿ‡ÿ•$ ÿ¤+ ÿ¯)ú»)ìÈ,ÞØ7ÓáAÉßI0¼ÚQD¯ÓXV¡Í_f”ÈetˆÄl€|ÀtŠq½“i»Œ™b¹œ^º±ž]¸Éžb®ÈŸf¦ÈŸi¡ÉžkÊnšË›n™Ë›n™Ë›n™Ë›n™Ë›n™Ë›n™Ë›n™Ë›ÿˆÿ‰ÿš#ÿ¨' ÿµ" ñÄ àÕ$ Ñá0Çæ=$½ãF4²àND¦ÜVR™×]aŒÒco€ÏkztÌs„kÊ~‹bÈŒ‘\Èœ•Yȱ–WÈΖ[»Í˜^²Ì™a«Ì™d¦Í™g¢Í˜g Í—g Í—g Í—g Í—g Í—g Í—g Í—ÿŠÿ‹ÿŸ!ÿ® ø½ãÑÐá Åê.ºé:)°çC9¤äJH˜âPVŒàWb€Ý_lvÛhulÚr}cØ~ƒ\ØŒˆWØ‹T×°TØÍŒUËÓWÀÒ‘Z¸Ñ“\²Ñ“_¬Ñ“`ªÑ“`ªÑ“`ªÑ“`ªÑ“`ªÑ“`ªÑ“`ªÑ“ÿŒÿÿ¥ÿµÚÊ ÐáÄë ¸ï,­î7.¢ì@=—ëHJŒéOVèV`vç^ilçepdæpw^ã||Yà‰€VÞ—ƒSݦ„Qܸ…QÝÔ„SÐÚ‡TÆØ‰V¿×ŠX¸Ö‹Y¶Ö‹Y¶Ö‹Y¶Ö‹Y¶Ö‹Y¶Ö‹Y¶Ö‹Y¶Ö‹ÿŽ ÿ—ÿ­Ù¿ ÌÎ Ãë¶õ«õ,!¡ô70–ó@>‹óHJóPTwóW]mó]deðfj_ípnZêzrVç…vSå‘yQäž{Oã¬|Mã½|MãÙ|PØà|QÎàRÆÞSÄÞSÄÞSÄÞSÄÞSÄÞSÄÞSÄÞÿ’ ÿ  Û·ÊÃÀÒ µô©ûŸü,#”ü71ŠüA=ýIGxýQPnýWWeú^\`öfa[ôoeVñxhSï‚kPîŒmNì—oLë£qJê°rIêÁrHêØrKãärNØæsNÕçtNÕçtNÕçtNÕçtNÕçtNÕçtNÕçtÿ– Þ¬˺½Ç²Ø§ÿœÿ!’ÿ.#‰ÿ9/€ÿB9wÿJBmÿPIeÿVN_ÿ^SZþeVUümZRúu\Oø~_L÷‡aJõ‘bHôœdFó¦eEò³fDòÁgCòÔgEîçgFëègFëègFëègFëègFëègFëègFëègî¢Í´¼¾¯Í¤Þšÿ ÿ$‡ÿ0 ~ÿ;*tÿB2kÿH9cÿN?]ÿUCXÿ]GSÿdJPÿkMMÿrOJÿyQGÿ‚SEÿ‹TCþ”VAýžW@ý¨X?ü³Y>ü¿Z>ûÑZ=ûÛZ=ûÛZ=ûÛZ=ûÛZ=ûÛZ=ûÛZ=ûÛZÒ­½¸®Å¡Õ–÷ ÿ„ÿ&|ÿ1qÿ8"hÿ>)`ÿE/ZÿL3TÿS7PÿZ:Lÿ`Fÿm@DÿtBAÿ{C?ÿƒE=ÿŒF;ÿ•G:ÿžI9ÿ§J8ÿ±J7ÿ¾K7ÿÂK7ÿÂK7ÿÂK7ÿÂK7ÿÂK7ÿÂK7ÿÂK¿³®¾ Í’Þ‰ÿ ÿwÿ# mÿ*dÿ1\ÿ8Uÿ@"PÿH&LÿO)HÿU+Dÿ[-Bÿa/?ÿg1=ÿm2;ÿs39ÿz57ÿ‚65ÿ‹73ÿ”82ÿœ91ÿ¤:0ÿ¯;0ÿ²;0ÿ²;0ÿ²;0ÿ²;0ÿ²;0ÿ²;0ÿ²;°¸ Ç‘Ø„ï|ÿ oÿfÿ^ÿ! Vÿ)Pÿ2Kÿ:FÿABÿH?ÿN<ÿS9ÿY 7ÿ^!5ÿd"3ÿi#1ÿp$/ÿw%-ÿ~&,ÿ‡'*ÿ()ÿ—)(ÿ *(ÿ£*(ÿ£*(ÿ£*(ÿ£*(ÿ£*(ÿ£*(ÿ£*¡Â‘Ñ‚áxÿlÿ`ÿ WÿOÿHÿ Cÿ)?ÿ1 ;ÿ8 8ÿ>5ÿD2ÿI0ÿN.ÿS,ÿX*ÿ])ÿc'ÿi%ÿo$ÿw"ÿ~!ÿ…ÿÿ‘ÿ‘ÿ‘ÿ‘ÿ‘ÿ‘ÿ‘ÿhÿd#ÿ_/ÿ^@ÿcKÿgT%ÿh]/ÿfg9ÿdrAÿb}Hÿ`‡Nÿ]Rÿ[˜VÿZžYÿX¤[ÿWª]þV°_ýUµ`üT¼aüTÄbûSÍcùRÜcöRæcñSêcìTícæVïbàWðcàWðcàWðcàWðcàWðcàWðcàWðcÿiÿe#ÿ`.ÿ_@ÿfIÿjS%ÿk\0ÿie:ÿgpBÿd{Iÿb…Oÿ_ŽTÿ]–Xÿ[[ÿZ£]ýX©_üW¯aûVµbúU¼dúUÄeùTÎe÷SÝfóSæfîUêfçVíeáXîeÛYïfÛYïfÛYïfÛYïfÛYïfÛYïfÛYïfÿjÿf"ÿa.ÿ`?ÿiHÿmQ&ÿn[0ÿld:ÿinCÿgyKÿdƒQÿaŒVÿ_•Zÿ]œ]ý[¢`ûZ©búY¯dùXµeùW¼gøVÅh÷UÏhõTàiðUæiéWêhâYìhÛZíiÓ[îiÓ[îiÓ[îiÓ[îiÓ[îiÓ[îiÓ[îiÿjÿg"ÿb.ÿc>ÿlFÿqP&ÿrY1ÿpb;ÿlkDÿivLÿgRÿd‹Xÿa“\ý_›`û]¡bú[¨eùZ®gøYµh÷X¼iöWÆjõVÑkòUálìWçläYékÜ[ëkÔ\ìlÍ]ílÍ]ílÍ]ílÍ]ílÍ]ílÍ]ílÍ]ílÿkÿh!ÿc-ÿg<ÿpEÿtN&ÿvW1ÿt`;ÿpiEÿmsMÿj~TÿfˆZþc‘^ûa™bù_ eø]§hö\­jõZ´lôY½môXÇnòWÔoîWâoæYæoÝ\énÓ]êoÍ^ëpÇ_ëpÇ_ëpÇ_ëpÇ_ëpÇ_ëpÇ_ëpÇ_ëpÿlÿi!ÿe-ÿk:ÿtCÿyL&ÿzU1ÿy]<ÿufEÿppNÿm{Vÿj…\üfaúd—e÷aŸhö_¦kô]­mó\´oòZ½qñYÉrïXÚsèZãsÞ]ærÓ^èsË_ètÆ`ètÁaètÁaètÁaètÁaètÁaètÁaètÁaètÿmÿj ÿf-ÿo8ÿxAÿ}J%ÿR1ÿ~[<ÿ{cFÿvlOÿqwWþm‚^ûjŒcøf•hõdlóa¤oò_¬qð]´sï\¿uî[Ëvê[Ýwà]ãvÓ`åwÊaåxÄbåx¾cåxºdåxºdåxºdåxºdåxºdåxºdåxºdåxÿnÿk ÿh,ÿs6ÿ}?ÿ‚G%ÿ„P0ÿ„X;ÿ`Eÿ|iOÿvrWþq}_ùmˆeöj’jóf›oñc£rïa«uí_µxì]Áyì\Ðzã]ß{Ôaâ{Êbâ|Âdá}¼eá}·fâ|³gâ|³gâ|³gâ|³gâ|³gâ|³gâ|³gâ|ÿpÿlÿi,ÿw4ÿ<ÿ‡E$ÿŠM/ÿ‰U:ÿ‡]Eÿ‚eOÿ|nXývx`ør„gõmŽmñi˜rïf¡vìc«yë`¶|é^Ä~ç^ØØaß~Êc߀ÁeÞ¹gÞ´hÞ°i߀¬i߬i߬i߬i߬i߬i߬ißÿqÿmÿk+ÿ{2ÿ†:ÿŒC"ÿK-ÿS8ÿZCÿ‰bMÿƒiWý|r`øvgôqŠnðl•tíhŸyêdª}èa·€æ_È‚ÝaÛƒÌdÜ„ÀfÜ…¸hÛ…±jÛ…­kÜ„©l݃¦lÝ‚¦lÝ‚¦lÝ‚¦lÝ‚¦lÝ‚¦lÝ‚¦lÝ‚ÿrÿoÿo)ÿ0ÿŠ8ÿ‘A!ÿ”J,ÿ•Q6ÿ“XAÿ`Kû‹gUõ„o_ð}zgëw…oçrvãm›|Þh¦Úe³„ÕcĆÏdÚ‡ÁgÙˆ·i؉¯k؉ªmÙˆ¦nÚ‡£nÚ† oÛ… oÛ… oÛ… oÛ… oÛ… oÛ… oÛ…ÿrÿpÿr(ÿ‚. ÿŽ6ÿ•@ÿ™H)ÿ™O4ÿ˜U>ú–\Iô’dSíŒk]ç…vfáoÛxŒwÓr–~Ím¡„Éj­‰Åh»‹ÁhÐŒ¶kÕ®mÕ§oÖŒ£pÖ‹ŸqØŠqÙ‰›rÚ‡›rÚ‡›rÚ‡›rÚ‡›rÚ‡›rÚ‡›rÚ‡ÿsÿpÿu&ÿ†, ÿ‘6ÿ™@ÿœF'ÿL1üR;ôœYEí™`Oæ”hYߎscÕ†}n͇xÆx‘€Às›‡»o§Œ¶m´³lÈ‘¬nÒ‘¥pÓ rÔœsÕ™tÖŒ—tØŠ–uÙ‰–uÙ‰–uÙ‰–uÙ‰–uÙ‰–uÙ‰–uÙ‰ÿtÿqÿx$ÿ‰+ ÿ•5ÿœ>ÿ C$ÿ¢I.÷£P7ï¢VAç¡]JßgTÔ•obËxnÃ…‚y»Œ‚µy–‰¯u¡Žªr¯’¦qÁ”¡sДœtÑ’˜vÒ‘–wÓ”wÕ’wÖŒ‘xØŠ‘xØŠ‘xØŠ‘xØŠ‘xØŠ‘xØŠ‘xØŠÿuÿrÿ{#ÿŒ) ÿ˜4ÿŸ<ÿ£A"û¦F*ò¨M3ê©T<â©[D×£cSÌšlb“unº‹~y²…‡ƒª‘Ф{œžxª”šv»–—wÏ–”yД‘zÑ’zÓŽzÔzÕŒz׋Œz׋Œz׋Œz׋Œz׋Œz׋Œz׋ÿuÿsÿ}!ÿŽ) ÿ›4ÿ¢9ÿ¦>÷ªD&î®J.å±R5ܯYAϨaRÅ ia»˜rn±‘zy©‹ƒƒ¡…‹š˜‘”~¥–|¶˜}Í—Œ~Ï•Š~ГŠ~Ò‘‰~Ó‰}Õˆ}Ö‹ˆ}Ö‹ˆ}Ö‹ˆ}Ö‹ˆ}Ö‹ˆ}Ö‹ˆ}Ö‹ÿvÿtÿ€ ÿ‘( ÿž3ÿ¤7þª;ó¯A"ê´H(â¹P.Ô´V@É­_Q¾¥g`´žomª—wx¡‘€‚™ŒŠ‹‘‡•‘‹„¢–†ƒ²™ƒ„˘„ƒÎ–„ƒÐ”„‚Ò’„Ó„ÔŽ„€ÖŒ„€ÖŒ„€ÖŒ„€ÖŒ„€ÖŒ„€ÖŒ„€ÖŒÿwÿtÿ‚ÿ”'ÿ 2 ÿ§4ú®8ïµ=æ¼F!Ü¿L,ιT?ñ]P·ªe_­¤ll£tw™˜|‘“†Š‰’‘‚ŒŸ–}Н˜z‹Ç˜|‰Î–}ˆÐ”~†Ò’…Ó„ÔŽ€ƒÖŒ€ƒÖŒ€ƒÖŒ€ƒÖŒ€ƒÖŒ€ƒÖŒ€ƒÖŒÿxÿuÿ…ÿ—&ÿ£/ ÿ«0õ³4ë»:âÄDÕÄH+ȽS=¼¶[N±°c]¦ªjjœ¤qv’Ÿz€‰šƒ‰–Žy“œ•t’¬—q’Øs‘Ï–vŽÐ”x‹Ò‘yŠÓzˆÕŽ{‡ÖŒ{‡ÖŒ{‡ÖŒ{‡ÖŒ{‡ÖŒ{‡ÖŒ{‡ÖŒÿxÿvÿˆÿš%ÿ¦+ þ¯, ñ¹/æÃ6ÝÍ<ÎÈG)ÂÂQ;¶¼YLª¶a[Ÿ°hh•«ot‹¦w~¢€†yŸ‹qœ™’l›©•i›¿–k™Ð”n”Ñ’q‘Ò‘sÔuÕv‹Ö‹v‹Ö‹v‹Ö‹v‹Ö‹v‹Ö‹v‹Ö‹v‹Ö‹ÿyÿxÿŒÿž#ÿª&ø´%ëÀ(áÍ0ÔÒ7ÈÍE'»ÈO9¯ÂWJ£½_X˜¸fe³mqƒ¯u{z«~ƒq¨‰Šj¦–e¥§’b¦½’c£Ò‘gÓj˜Ôm•Õn’ÖŒpØŠpØŠpØŠpØŠpØŠpØŠpØŠÿ{ÿ|ÿÿ¢!ÿ® ò»åÊÚÛ$ÌÙ5ÀÓC$´ÎM6¨ÉUGœÄ]U‘Àdb†¼km{¸svrµ|~j³‡…c±•Š^°¥Œ[±¼[¯Õ_§Õc¡ÖŒfœ×‹h™ØŠj–Ùˆj–Ùˆj–Ùˆj–Ùˆj–Ùˆj–Ùˆj–Ùˆÿ|ÿÿ•ÿ§üµëÆÚÛÍà%Ãß6¸ÛA!¬ÕK3 ÑSC”ÍZQ‰Éb]~ÆigtÃqpkÁ{xd¿†~]¾”‚X½¥…V¾»†U½Û†X³Ú‡\«Ú‡_¦Ú‡a¡Û†cÛ…cÛ…cÛ…cÛ…cÛ…cÛ…cÛ…ÿ~ÿ‡ÿšÿ­Ú¾ ÑÍ ËäÁä%·ã5­á@!£ÞI/—ÛR>‹×YK€Ô`WvÑhamÏpieÍzp^̆uXÌ•yȚ{Qͼ|PÌâ|SÁàU·ß€X±ÞZ«Þ\¦ß\¦ß\¦ß\¦ß\¦ß\¦ß\¦ßÿ€ÿŽÿ¢ ÛµÎÁÆÐ ¾é´é% ªè3 æ>%–åG2‹ãN?€áUIvà]SmÞf[eÝoa^ÝzgX܆kSÜ•oPݦqMÞ»rMßáqNÑçtPÆæwR¾äxS¸äyU²ãzU²ãzU²ãzU²ãzU²ãzU²ãzU²ãzÿƒÿ– Ý«͸ÂÄºÔ ±ï§î% žî3”í='ŠìF3€ëN>vëUGlê[NdêcU]êmZXêw^SêƒbNê‘eJë¡gGì³iFíÐiHæèiKÙëjLÏìmNÇëoOÀêpOÀêpOÀêpOÀêpOÀêpOÀêpOÀêpÿ‰ é бÁ¼·É®Ú ¤õ›õ'’õ4ˆö>'öG2vöN;löTBdöZH]öbMWökQRöuUM÷€XHøZEø›\Bø«^A÷¾_@÷ß`Cîì`Gãñ_HÛñaIÒòcIÒòcIÒòcIÒòcIÒòcIÒòcIÒòcþ•ԩµµÁªÏ ç ˜ýþ)†ÿ5~ÿ@%tÿF-kÿL5cÿR:\ÿY?Vÿ`CPÿhGLÿqJGÿ{LCÿ‡N@ÿ”P>ÿ¡R=ÿ°T;ÿÃU;þáU<ùðU@ðôUCç÷TCç÷TCç÷TCç÷TCç÷TCç÷TCç÷Tۡ۵º¨ÇÖ“ü‹ÿƒÿ+zÿ5qÿ<hÿB&`ÿI,YÿO1SÿV5Nÿ]8Iÿe;Eÿm=Aÿv?>ÿ€A;ÿ‹C9ÿ˜E8ÿ¤F6ÿ²G5ÿÄH5ÿÝI4ÿðI7þøI7þøI7þøI7þøI7þøI7þøI7þøIÉ«¶´¨Á›ÏŽß‡ÿ~ÿuÿ' lÿ/dÿ7\ÿ>VÿE"PÿK%KÿR(FÿX+Aÿ_->ÿg/;ÿo18ÿx36ÿ‚43ÿ61ÿ™70ÿ¥8/ÿ²:.ÿÀ;.ÿÓ;-ÿë<-ÿë<-ÿë<-ÿë<-ÿë<-ÿë<-ÿë<¸°¨¼šÉŒÙõyÿnÿeÿ^ÿ' Wÿ0Qÿ7Kÿ>FÿEAÿL=ÿR9ÿX6ÿ_!4ÿf"1ÿn$/ÿw%-ÿ€&+ÿŒ()ÿ—)(ÿ¢*'ÿ­+&ÿ¹,&ÿÉ-&ÿÉ-&ÿÉ-&ÿÉ-&ÿÉ-&ÿÉ-&ÿÉ-ª·šÅ‹Ó}âuÿiÿ _ÿWÿPÿIÿ&Dÿ. ?ÿ6 ;ÿ= 7ÿC3ÿI0ÿO.ÿU,ÿ[*ÿb'ÿi%ÿr#ÿ{!ÿ†ÿ‘ÿœÿ¥ÿ°ÿ°ÿ°ÿ°ÿ°ÿ°ÿ°œÀŒÎ|ÞpõeÿZÿQÿ IÿCÿ=ÿ8ÿ&4ÿ-0ÿ3-ÿ9*ÿ>'ÿC%ÿI #ÿN !ÿT ÿZ ÿa ÿi ÿr ÿ| ÿ† ÿÿšÿšÿšÿšÿšÿšÿšÿ\ÿW&ÿQ2ÿN<ÿWEÿ[Nÿ\X"ÿ[c+ÿYo2ÿWz8ÿT…=ÿRAÿP™EÿO GÿN§IÿM®KÿL´LÿK»MÿJÃNÿIÍOÿIÝPÿHéPÿHòPûIöPöKùPðMûOêOûPçOüPçOüPçOüPçOüPçOüPçOüPÿ\ÿX&ÿR2ÿQ:ÿZCÿ_Mÿ_W#ÿ^a+ÿ\m3ÿYy:ÿW„?ÿTŽCÿR—GÿPŸIÿO¦KÿN­MÿM´OÿL»PÿKÃQÿKÎRÿJßRÿIêSýJòSøKöSñMøRëOúRåPúSâQúSâQúSâQúSâQúSâQúSâQúSÿ]ÿY&ÿS1ÿT9ÿ]BÿbKÿbU#ÿ`_,ÿ_k4ÿ\w;ÿY‚@ÿVŒEÿT•HÿRžKÿQ¥NÿP¬OÿO³QÿN»RÿMÄSÿLÏTÿKàUÿKëUúLòUôMöUìPøTæQøUßRùVÜSùVÜSùVÜSùVÜSùVÜSùVÜSùVÿ^ÿZ%ÿT1ÿX7ÿa@ÿeIÿfS#ÿd]-ÿbh5ÿ_t<ÿ\BÿYŠGÿV“KÿTœNÿS¤PÿQ«RÿP³TÿOºUÿNÄVÿMÐWÿMâXüLíXöNòXîPõXæSöXßT÷Y×UøYÓUøYÓUøYÓUøYÓUøYÓUøYÓUøYÿ_ÿ[%ÿU0ÿ\4ÿe=ÿjGÿkQ$ÿiZ-ÿfd6ÿcp=ÿ_|Cÿ\‡IÿY‘MÿWšPÿU¢SÿSªUÿR²WÿQºYÿPÅZÿOÒ[üNä[øOí\ðQò[çTô[ÞUõ\ÕVö]ÎX÷]ËX÷]ËX÷]ËX÷]ËX÷]ËX÷]ËX÷]ÿ`ÿ\$ÿV/ÿ`2ÿj;ÿoDÿpN#ÿoW-ÿka6ÿgl>ÿcxEÿ`ƒKÿ\ŽOÿZ˜SÿW VÿV©YÿT±[ÿSº\þQÆ^üPÖ_ùPç_òRî_çUñ_ÝWò`ÒXóaËYõbÅ[õbÃ[õbÃ[õbÃ[õbÃ[õbÃ[õbÃ[õbÿaÿ]#ÿZ-ÿe/ÿo8ÿtAÿvK#ÿuT-ÿq]6ÿlg?ÿhsFÿdLÿ`ŠRÿ]•VÿZžYÿX§\þV°_ýTº`üSÇbùRÜcóSècéUîcÞXðdÐZñeÈ\òfÂ]òf½^òf»^òf»^òf»^òf»^òf»^òf»^òfÿbÿ^#ÿ^*ÿi-ÿt5ÿz>ÿ|H"ÿ{Q,ÿxZ6ÿsc?ÿmmGÿizNÿd†Tÿ`‘Xÿ]œ\ýZ¥`ûX°búV»eøUÊfõTàgìVêgßZígÐ\ïiÆ]ïj¿_ïj¹`ïjµaïj³aïj³aïj³aïj³aïj³aïj³aïjÿcÿ`"ÿb'ÿn*ÿy2ÿ<ÿ‚F!ÿ‚O+ÿX5ÿ{`>ÿuiGÿotNûjUøfŒ[õb—_ó_¡cð\«fîZ¶iìYÄjéXÚkáZêkÐ]ìmÅ_ìn¼aëo¶bìo±cìn­dìn«dím«dím«dím«dím«dím«dímÿdÿa"ÿf%ÿr'ÿ~0 ÿ…;ÿˆEÿˆM)ÿ†U3ÿ‚^=û}fFövpNòr|Uîm‡\êh’bædœfãa¦jà_²mÝ]¿oÚ]ÓpÒ^êpÄ`érºbès³dès­eés©fér¦gêq¤gêp¤gêp¤gêp¤gêp¤gêp¤gêpÿeÿb!ÿi#ÿw%ÿ‚/ ÿŠ9ÿŽCÿL&ÿS0ùŠ[:ó…cDílMèywUãt‚]ÞncÙi—iÓf¡nÏc¬qËa¹tÈaÊuÅaåv¹dæw°fåwªhæw¥iæv¢jçuŸjèsžkésžkésžkésžkésžkésžkésÿfÿc!ÿm ÿ{#ÿ‡. ÿ8ÿ“Aÿ•J#ú”Q-ó‘Y7ì`Aå‡iJßtSÖz~]ÏtˆeÊo‘lÅk›qÁh¦u½f²xºeÂz·eÝ{®hã{§jã{¢käzžlåx›måw™mçv˜nçu˜nçu˜nçu˜nçu˜nçu˜nçuÿgÿd ÿpÿ~"ÿ‹, ÿ“7ÿ˜@ýšH ôšN)ì˜U3å•]<ÝfGÓˆoSËy^Å{ƒf¿uŒn¹q–tµn¡x°k¬|­j»~ªjÒ¤là~žmá}šoâ|—pãz•päy“påw“qæw“qæw“qæw“qæw“qæw“qæwÿhÿd ÿsÿ ÿŽ+ÿ—5ÿ>øŸDï K%çŸR-ßZ7Ó•cFÊŽlSÇu^»~gµ{ˆo¯w‘uªsœz¥p¨~¡o¶žoÊ‚›pÞ–q߀“rá~‘sâ|sãzŽsäyŽsåxŽsåxŽsåxŽsåxŽsåxŽsåxÿiÿfÿvÿ„ÿ’*ÿ›4 þ ;ó£Aê¦H â§O'Ø¢V6Ìš`EÓiR»r^³†zg¬„o¦}v y˜|›v£€—t±ƒ”tÅ„‘u݃vÞvà‹wá}Šwâ{‰väz‰väy‰väy‰väy‰väy‰väy‰väyÿiÿiÿxÿ‡ÿ•(ÿž2 ú¤7ï¨=æ¬DÝ­K$ЦT5ÆŸ^D¼™fR´’o]¬Œwg¤‡€ož‚Šw˜~”}’{ z­„ŠyÀ…ˆzÜ„‡zÝ‚†z߀†zà~…zâ|…yãz…yäy…yäy…yäy…yäy…yäy…yäyÿjÿkÿ{ÿŠÿ˜&ÿ¢0õ¨3 ë®9â³AÖ±G#Ê«R4À¤\C¶ždQ­˜l\¥’tf}o–ˆ†v…‘}Š‚œ‚…€ª…¼†€€Û…€€Ýƒ€Þ€~à€}á}€}ã{€|äz€|äz€|äz€|äz€|äz€|äzÿkÿmÿ~ÿÿ›$þ¥,ñ¬/ç³4 ݺ:еF!ůQ2º©ZB°£bO§j[ž˜re–“znƒvˆ‹Ž|‚ˆ™|†§…y†¹†w‡×…x…݃zƒÞz‚à{á}|€ã{|ãz|ãz|ãz|ãz|ãz|ãzÿkÿpÿÿÿŸ"ú©&í±)âº/Ö¿6ʺD ¿´O1´®X@ª¨`N¡£gZ˜žodšwmˆ–€u€’‹{z–€tޤ„q¶…oŽÑ…q‹Ýƒs‰ßu‡à~v…á}w„ã{wƒäzwƒäzwƒäzwƒäzwƒäzwƒäzÿlÿsÿ…ÿ”ÿ¢õ­ ç¸!ÝÃ&ÐÃ4 ľB¹¹M/®³V>¤®^Lš©eW‘¥mb‰¡uk€~ryšˆyr—”~m–¢‚i•³„g–̓i“Þ‚l߀oŒá~pŠâ|rˆãzr‡äyr‡äyr‡äyr‡äyr‡äyr‡äyÿmÿvÿˆÿ˜ÿ§ï³âÀÕÊÉÇ2 ¾Ã@³¾K,¨ºT<žµ\I”°cUЬk_©rhy¥{or£…vk ‘{fŸŸbŸ±`ŸÊ€bœàe—á~h“â|jã{läymŒåxmŒåxmŒåxmŒåxmŒåxmŒåxÿnÿ{ÿÿú¬Ú» ÕÉ ÍÎÂÌ/ ·É=¬ÅI)¡ÀR8—¼ZF¸aQƒµh[z²pdr¯ykk¬ƒqd«v_©žz[©¯|YªÉ|Z§â{^ ã{a›ãzc—äyf”åwf’æwf’æwf’æwf’æwf’æwf’æwÿpÿ€ÿ’ò£ Ù³ Ͼ ËÌ ÄÓºÒ,°Ï;¥ÌF&šÈP5ÄXA…Á_M|¾gVs¼o^k¹wed¸‚k^¶ŽpYµsUµ®uT¶ÈuS³çvW«ævZ¤æv\ çu_œçt`šèt`šèt`šèt`šèt`šèt`šètÿrÿ† û˜ Ù©εÆÁÀÏ ºÛ±Ú)§Ø7œÔD!’ÑM0‡ÎU<}Ë]GtÉePlÇmWeÅv^^ÄcYÃŽhTÃkQîlOÄÈmNÂímP¸ëoS°ëpU«êpX¦ëpY£ëpY£ëpY£ëpY£ëpY£ëpY£ëpÿwÿÞ Ï®Ĺ»ÅµÓ ®á¦á)à7“ÞB‰ÜL)ÚT5u×\?mÕdHeÓlO_ÒvTYÒYTÑŽ]PÑ`MÒ°bKÓÉbJÒíbKÈòfM¿ñhO¸ðiQ²ðiR¯ïiR¯ïiR¯ïiR¯ïiR¯ïiR¯ïiÿ í–Ò¦IJ¹¼°É©Ø ¡ç™ç* ç7‡æB}åJ)täQ3kãY:dâaA^âkGXâuKSá€OOâSKâ›UIã¬WGäÄWFãéWFÝöYGÐ÷\IÈ÷^JÁö`K½ö`K½ö`K½ö`K½ö`K½ö`K½ö`ÿ‰ÙžÇ¬¹¶®Á¥Îœä •ïï, …ï9|ïAsïI'jîP/bîW5\î_:Vîh?RîqBMï|FIï‰IFð–KCð¦M@ñ¹N?òÛO>ð÷NBæûOCÝûQDÔüSEÏüTEÏüTEÏüTEÏüTEÏüTEÏüTá•˦»°®»¢È˜Õø‰ø ‚ø. yù7pù?hùF"`úM(ZúT-Tú\1Oûe5Kûm8Güw;Cüƒ=?ý?<ýŸA:þ¯C8ÿÆD7ÿêE6üýE;òÿD>êÿD>æÿF>æÿF>æÿF>æÿF>æÿF>æÿFП½¬®µ¢Â•ÏŠÝ„ÿ{ÿtÿ* lÿ3dÿ;]ÿCWÿJ QÿQ$LÿX'Hÿ`*Dÿh,@ÿq.<ÿ{19ÿˆ25ÿ–43ÿ¤61ÿ¶7/ÿÐ8.ÿï9-ÿÿ91ÿÿ93üÿ93üÿ93üÿ93üÿ93üÿ93üÿ9Á¨¯±¢½”ʇØ}óvÿmÿeÿ$^ÿ- Xÿ6Rÿ=LÿEHÿLCÿS?ÿZ<ÿa 8ÿi!5ÿr#1ÿ}%.ÿŠ&+ÿ™()ÿ§)'ÿ¹+&ÿÒ,%ÿï,$ÿÿ-$ÿÿ-$ÿÿ-$ÿÿ-$ÿÿ-$ÿÿ-$ÿÿ-±®£¹”ƆÓyáqÿgÿ_ÿWÿQÿ&Kÿ.Fÿ6 Aÿ= =ÿD9ÿK6ÿQ2ÿX/ÿ_,ÿg)ÿq&ÿ|#ÿ‰ ÿ˜ÿ¦ÿ·ÿÊÿæÿðÿðÿðÿðÿðÿ𤵕†ÏwÞkôbÿYÿ QÿJÿDÿ?ÿ&:ÿ-6ÿ42ÿ:.ÿ@+ÿF(ÿL %ÿR "ÿY ÿb ÿk ÿv ÿ„ÿ’ÿ ÿ­ÿºÿÃÿÃÿÃÿÃÿÃÿ×¾†ÌwÛiç\ýTÿKÿCÿ =ÿ7ÿ2ÿ.ÿ$*ÿ*%ÿ/"ÿ5ÿ:ÿ?ÿEÿKÿRÿZÿbÿlÿw ÿ„ ÿ ÿœ ÿ¢ ÿ¢ ÿ¢ ÿ¢ ÿ¢ ÿ¢ÿP ÿK*ÿD6ÿG:ÿJ?ÿNIÿOTÿO`ÿMl$ÿJy*ÿH….ÿF2ÿDš4ÿC¢7ÿBª8ÿA±:ÿ@¹;ÿ@Á<ÿ?Ë=ÿ>Ü>ÿ>è>ÿ=ó>ÿ=û?ÿ>ÿ>ÿ@ÿ>úCÿ=ôDÿ>îFÿ?îFÿ?îFÿ?îFÿ?îFÿ?îFÿ?ÿP ÿK*ÿE5ÿJ8ÿM=ÿQHÿRRÿQ^ÿOj%ÿMw+ÿJƒ/ÿHŽ3ÿF˜6ÿD¡8ÿC©:ÿB°<ÿB¸=ÿAÁ>ÿ@Ë?ÿ@Ü@ÿ?é@ÿ?ô@ÿ>ýAÿ@ÿ@ýBÿ@öEÿ@ðFÿAéHÿAéHÿAéHÿAéHÿAéHÿAéHÿAÿQÿL)ÿG4ÿM6ÿQ;ÿUFÿVPÿU\ÿRh&ÿPt,ÿM€1ÿJŒ5ÿH—8ÿF ;ÿE¨<ÿD°>ÿC¸?ÿCÁAÿBÌAÿAÞBÿAëCÿ@õCÿ@ýCÿCÿCøFÿBðHÿCêIÿDãJÿEãJÿEãJÿEãJÿEãJÿEãJÿEÿRÿM)ÿJ2ÿP3ÿU9ÿYCÿZMÿYX ÿVd'ÿSq-ÿP}3ÿM‰7ÿK”:ÿIž=ÿG¦?ÿF®AÿE·BÿDÁDÿDÌEÿCßEÿBíFÿB÷FÿCýFùFÿFðIÿFéKÿGâLÿHÛMÿHÛMÿHÛMÿHÛMÿHÛMÿHÛMÿHÿSÿN(ÿN/ÿT0ÿZ6ÿ^@ÿ`Jÿ^U ÿ[`(ÿXm/ÿTy4ÿQ…9ÿN‘=ÿL›@ÿJ¤BÿI­DÿH¶FÿGÁGÿFÍHÿEáIÿDïJÿEøJûGýJñJÿIèMÿKßNÿL×OÿLÏQÿLÏQÿLÏQÿLÏQÿLÏQÿLÏQÿLÿTÿP'ÿR,ÿY-ÿ_2ÿd<ÿfGÿdR ÿa\(ÿ]h0ÿZu6ÿV;ÿR?ÿO˜CÿM¢EÿL«HÿJµIÿI¿KÿHÌLÿHáMÿHîMüHùNòKüMçNýOÝPýPÒRþPÌSÿQÆTÿQÆTÿQÆTÿQÆTÿQÆTÿQÆTÿQÿUÿQ'ÿV)ÿ^*ÿd/ÿj:ÿlEÿlO ÿhY(ÿdc0ÿ`p7ÿ\|=ÿXˆBÿU“FÿSIÿQ¦KÿO°MÿNºOýMÆPúMÙQöLêQòM÷QçPúRÛRûTÎTüUÇVýUÁWþU¼XþU¼XþU¼XþU¼XþU¼XþU¼XþUÿWÿR&ÿZ&ÿb&ÿj,ÿq7ÿsBÿsLÿpV(ÿk`0ÿfk8ÿcw>þ_ƒDû[ŽHùX˜L÷V¡OõU«QóSµSñRÁTïQÐUëQçUæRöVÚTùXÌVúYÃXûZ¼ZûZ·[ûY³\ûY³\ûY³\ûY³\ûY³\ûY³\ûYÿXÿS%ÿ^#ÿg#ÿp*ÿw5 ÿz@ÿzJÿxS&ÿs\/ünf7øir?ôe~Eña‰Jî^“Në\RèY¦UæX°WäW¼XâVÌYÞVäYØVô[ÊX÷]ÀZø^¸\ø^³]ø^®^ø]«_ù\«_ù\«_ù\«_ù\«_ù\«_ù\ÿYÿV#ÿb ÿl ÿu(ÿ}3 ÿ€=ÿGÿP$ù{Y-ôvb6îqm>êlyEæh„KâdŽQÞa˜UÛ^¢YÖ\¬[Ó[¸^ÐZÆ_ÍZß`ÈZòa¾\õbµ^ôb®`õbªaõa¦böa£c÷_£c÷_£c÷_£c÷_£c÷_£c÷_ÿZÿY!ÿfÿpÿz&ÿ‚1 ÿ†;ÿˆDù†M!òƒV+ë~^4åyi=àttEÚoLÓj‰SÏf’XËcœ]Ça¦`Ä_±cÁ^¿d¾^Òeº_ìf²`òf«bòf¥dòe¡eódŸeôcœfõbœfõbœfõbœfõbœfõbœfõbÿ[ÿ\ÿiÿuÿ~$ÿ‡.ÿŒ8ûŽBòŽJë‹R'ä‡[0Ýf:ÓzpEÍuzNÈpƒUÃl[¾i–`ºf d·d«g´c¸i±bÊj®cæj¨dïj¢fïigðhšhñg˜iòf–iód–iód–iód–iód–iód–iódÿ[ÿ_ÿlÿyÿƒ!ÿŒ,ÿ‘6 õ”?ì•Gä“O"ÜŽX-Ò‡b:ÊlEÃ{uN¾vV¸rˆ]´n‘b¯k›f«i¦j¨g³l¥gÃn¢gànžiím™jîl–kïj“lði’lñglòflòflòflòflòflòfÿ\ÿbÿpÿ|ÿ†ÿ)ú–3 ðš<ç›DßšKÓ”U,Ê_9‡iE»qOµ|{W¯x„^ªtc¥q—h¡n¢ll®ošl¾p˜lÙq•mëo‘nìnoíloïjŒoði‹oñg‹oñg‹oñg‹oñg‹oñg‹oñgÿ]ÿdÿrÿÿŠÿ”&ö›0ëŸ8 â¢?ØŸGÍ™R+Ä’]9»ŒfD´‡nN­‚wW§}€^¢y‰dv“i˜sžm”qªqqºrŽqÑsŒrêqŠsëoˆsím‡sîk‡sïj†rðh†rðh†rðh†rðh†rðh†rðhÿ^ÿgÿuÿƒÿŽþ˜#ñŸ,ç¥3ݨ9 Ñ£EÇP*¾—Z8µ’cD­ŒlN¦‡tW ƒ|^š†d•|jyšn‹w¦rˆv¶t…vÌt„wérƒwêp‚wìn‚víl‚vïjvðivðivðivðivðivðiÿ^ÿiÿxÿ†ÿ‘úœí¤'âª,Ö¬4 ˧CÁ¢N)¸œX6¯—aC§‘iM qV™ˆy^“…‚dŒjˆ—oƒ}¤r|³t}|Èu|}ès||êq|{ìo}zím}yîk}yði}yði}yði}yði}yði}yðiÿ_ÿkÿ{ÿ‰ÿ•õ è© ݰ$а2 ƬA¼¦L'³¡V5ªœ_A¢—gLš’oU“Žw]Œ‹€d†ˆŠi…•n|ƒ¡rw‚°tu‚Åutƒçsuêqvëow~ímx}îkx|ðix|ðix|ðix|ðix|ðix|ðiÿ`ÿnÿ~ÿŒÿ™ñ¤ã®Ö¶Ë´0Á°?·«K%­¦T3¤¡]@œeJ”˜lSŒ•t[†‘}bއhyŒ’mtŠžqpˆ­tmˆÁtm‰äso‡êqp„ìorƒímsîkt€ðit€ðit€ðit€ðit€ðit€ðiÿaÿqÿ‚ÿõ ã© Ùµ ϹŸ.»´=±°I#§«R1ž§[>–£cHŽŸjQ†›rY˜z`x•„fr“lm‘œoiªrf¾se‘árhŽëpjŠìnlˆílm†ïkn„ðin„ðin„ðin„ðin„ðin„ðiÿcÿuÿ† ø” Ü¢Ô­ ϸ ɽ¿¼+µ¹;«¶G!¡±P/˜­Y;ªaF‡¦hO£pWx x^rždk›Œifš™mb™¨o_™¼p^™ßo`–ìnc‘ímfŽîkg‹ïji‰ðhi‰ðhi‰ðhi‰ðhi‰ðhi‰ðhÿgÿy ÿŠ ßšÓ¦̱Ç»Á¸Â(®¿8¥¼D›¸N,‘µW8ˆ±^B€®fKx«mSq©vZk§`e¥Šd`£—h[£¦kY£ºlX£ÜkY îk\šïj_–ðia’ñhcñfcñfcñfcñfcñfcñfÿkÿ~ ñÖž̪Ä´¾¾¸È°È$§Æ5 ÃB“ÀL(нT3º\>y·dFqµkNk³tTd±~Z_°‰_Z¯–bV®¥eS®¹fR¯ÛeR«òfU¤òfXŸòfZ›óe\—ód\—ód\—ód\—ód\—ód\—ódÿp ÿ„ݖΣÄ®»·´Â®Í §Î žÍ1 •Ë>‹ÈI#‚ÆR.zÃZ8rÁb@kÀjGd¾sM^½|SY¼ˆWT»•[P»¥]N»¹^M¼Û]K¹÷_N±ö`Qªö`S¥ö`U¡ö`U¡ö`U¡ö`U¡ö`U¡ö`U¡ö`ÿwëŒÓ›Æ¨»±²»ªÇ¢Ó Ö•Ö,ŒÔ:ƒÒFzÐO'rÎX1jÍ`8dËh?^ÊrEXÊ|ITɈMOÉ•QLÉ¥SJɹTIÊÜSGÈ÷UHÀüXJ¸ûYL²ûZN­úZN­úZN­úZN­úZN­úZN­úZÿܓʢ¼¬±µ¨ÀŸË–Ù ‘àŠß,‚ß9yÞCqÝM jÜV(cÛ_/]Úg5XÙq:SÙ{>OÙˆBKÙ–EHÙ¦GFÚºHEÛÛGDØôIBÓÿMDÉÿOEÂÿPG»ÿRG»ÿRG»ÿRG»ÿRG»ÿRG»ÿRæŠÏ›¿§²°§»œÆ“Ñ‹ê…è~è-vè8nèAfçJ_çR#Yç[)Uçd-Pçm1Lçx5Iç„8Fè‘:Cè <@é²>?êË>>èï>=æÿ?=àÿB?×ÿD@ÎÿF@ÎÿF@ÎÿF@ÎÿF@ÎÿF@ÎÿFÖ“Ä£´¬§¶›Á̆ـòyòqò+jò6 có?]óGWóORóW!Mô`$Iôi(Fôs*Bõ~-?õ‹/<ö™1:ö©38÷¾46øá56õù55óÿ47ìÿ69åÿ89åÿ89åÿ89åÿ89åÿ89åÿ8Èž¶©¨²›½ÈƒÔyèsükýdý'^þ1Xþ; SÿCMÿKIÿSEÿZAÿc>ÿl;ÿv!7ÿ‚#4ÿ%2ÿŸ'0ÿ°(.ÿÈ)-ÿê*,ÿÿ*,ÿÿ*/ùÿ*/ùÿ*/ùÿ*/ùÿ*/ùÿ*/ùÿ*¹¦ª®œ¹ŽÅÑuÞmú eÿ^ÿWÿ#Rÿ,Lÿ4Hÿ< CÿD ?ÿL<ÿS8ÿ[5ÿc2ÿl/ÿw,ÿ„)ÿ“'ÿ¢%ÿ´$ÿÌ#ÿí"ÿý"ÿÿ"ÿÿ"ÿÿ"ÿÿ"ÿÿ"ÿÿ¬«¶Â€ÎsÜgé_ÿXÿQÿKÿFÿ&Aÿ-<ÿ58ÿ<4ÿB1ÿI.ÿP +ÿW (ÿ_ %ÿi #ÿt ÿ‚ÿ’ÿ¢ÿ²ÿÈÿåÿúÿúÿúÿúÿúÿúŸ³¿€ÌrÚdäXõQÿJÿ Dÿ>ÿ9ÿ4ÿ%0ÿ,,ÿ2(ÿ8%ÿ>"ÿDÿJÿQÿYÿcÿnÿ|ÿŒÿœÿ¬ ÿ» ÿÓ ÿÓ ÿÓ ÿÓ ÿÓ ÿÓ ‘¼Ér×däTëKÿDÿ=ÿ7ÿ 1ÿ,ÿ(ÿ$ÿ" ÿ'ÿ,ÿ1ÿ6ÿ<ÿBÿI ÿQ ÿZ ÿfÿsÿÿÿœÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿD$ÿ?.ÿ<6ÿ@8ÿA=ÿAEÿAQ ÿ@]ÿ?jÿ4ÿB6ÿD;ÿDCÿEO ÿD[ÿAhÿ?uÿ<‚!ÿ:$ÿ8š'ÿ7£)ÿ6¬*ÿ6´,ÿ5½-ÿ4È.ÿ4Ö.ÿ3æ/ÿ3ò/ÿ2ü0ÿ2ÿ0ÿ3ÿ/ÿ6ÿ/ÿ9ÿ/ù;ÿ0ô=ÿ1ñ=ÿ1ñ=ÿ1ñ=ÿ1ñ=ÿ1ñ=ÿ1ÿF#ÿ@-ÿA2ÿF3ÿH8ÿH@ÿILÿHXÿEeÿBrÿ@#ÿ=Œ&ÿ;˜)ÿ:¡+ÿ9ª-ÿ8³.ÿ7½/ÿ6Ç0ÿ6Õ1ÿ6æ2ÿ5ñ2ÿ5û2ÿ5ÿ2ÿ6ÿ2ÿ:ÿ1ú=ÿ3ó>ÿ4í@ÿ4êAÿ4êAÿ4êAÿ4êAÿ4êAÿ4ÿG"ÿA,ÿE/ÿI0ÿL5ÿM=ÿNHÿMTÿKaÿHn ÿE{%ÿBˆ(ÿ?”+ÿ>ž.ÿ=§/ÿ<¯1ÿ<¸2ÿ;Ã3ÿ:Ï4ÿ:á5ÿ:î5ÿ:ø5ÿ:ÿ5ÿ:ÿ5û>ÿ5òAÿ7ëBÿ8åDÿ8áEÿ8áEÿ8áEÿ8áEÿ8áEÿ8ÿH"ÿC,ÿH,ÿN-ÿQ1ÿS9ÿUEÿSQÿQ]ÿNj!ÿKw&ÿHƒ+ÿE.ÿD™0ÿB¢3ÿA«4ÿA´6ÿ@½7ÿ?É8ÿ?Û8ÿ?ê9ÿ?õ9ÿ?ÿ9û@ÿ8ñCÿ:èEÿ<áGÿ<ÚHÿ=ÕIÿ=ÕIÿ=ÕIÿ=ÕIÿ=ÕIÿ=ÿI!ÿD*ÿM(ÿS)ÿW-ÿY6ÿ\Bÿ[NÿXYÿUe"ÿRr(ÿO~-ÿLŠ0ÿJ”3ÿHž6ÿG¦8ÿF¯9ÿE¸;ÿEÄ<ÿDÒ<üDå=øDò=õEþ<ñEÿ>æHÿ@ÜJÿAÒKÿAÌMÿAÉMÿAÉMÿAÉMÿAÉMÿAÉMÿAÿJ ÿH'ÿQ%ÿX%ÿ]*ÿ`3ÿc?ÿbJÿ`Uÿ\a#ÿYm)ÿUy.ÿR„3ÿP6ýN™9ûL¢;úKª=øJ´?÷J¾@õIÌ@ñIáAíJðAêJüBäJÿDØLÿEÌOÿFÆPÿFÀQÿF¾QÿF¾QÿF¾QÿF¾QÿF¾QÿFÿL ÿL$ÿU!ÿ]!ÿc'ÿg1ÿj< ÿjGÿgRÿc\#ÿ_h*û\t0÷Y5õVŠ9òT”<ðR?îQ¦AìP¯CêOºDèNÇDæOÝEáOîEÝNûHÔOÿIÈQÿJÀSÿJºTÿJ¶UÿJ´VÿJ´VÿJ´VÿJ´VÿJ´VÿJÿMÿP!ÿZÿbÿi%ÿm-ÿq9 ÿqDÿoNûkX"õfc)ñco0í`z6é\…;æZ?äX˜BáV¢DßU«FÜS¶HÚRÃJÖRØJÑSìKÌSúMÅTÿN¼VÿOµWÿO°XÿN¬YÿMªZÿMªZÿMªZÿMªZÿMªZÿMÿNÿSÿ^ÿgÿn"ÿs*ÿw5 ÿx@ùwJòsT ìo^(çkj0âgu6Þc€<Ù_ŠAÔ]“FÑ[IÎY¦LËX°NÈW¼PÆVÍQÃWæQ¾W÷R¸XÿS°ZÿS«\ÿR§]ÿR£]ÿQ¢]ÿP¢]ÿP¢]ÿP¢]ÿP¢]ÿPÿOÿWÿbÿlÿt ÿy'ÿ~2ù€< ñFê{Päw[&Ýsf.Õmp7Ðiz>Ëe„DÇbŽIÄ`—MÀ^ P½]ªS»[¶U¸[ÅVµ[ßV²\óW¬]ýW¦^ýV¡`þUž`ÿTœaÿSšaÿSšaÿSšaÿSšaÿSšaÿSÿPÿZÿeÿpÿxÿ$ý„.ó†8 ê†Bã„KÛW#Ñyb/Ëtl8Åov@ÀlF¼hˆK¸f‘Pµc›S±a¥V®`°Y«_¿Z©_Ô[¦`ï[¢aúZcûY™düX–dýW•eþU”eþU”eþU”eþU”eþU”eþUÿPÿ]ÿiÿtÿ}ÿ„!÷‰*í4ä= Ü‹HÑ…T#É^.Âzh8¼uq@·qzG²n„M®kRªh–V§f Y£e«\ d¹^ždÍ^›dê^˜fø]”gù\’hûZhüYŽhýWŽhýVŽhýVŽhýVŽhýVŽhýVÿRÿ_ÿlÿxÿÿˆò%ç“/Þ•8 ÓEÊ‹Q"Â…[.»€e8´{nA¯wwHªtN¥pˆS¡n’Wkœ[™j§^–iµ`”hÈa’iæ`j÷_kø]‹kù\‰lûZˆlüXˆküXˆküXˆküXˆküXˆküXÿTÿbÿoÿ{ÿ…úí“â™(Ø™3Ì•BÄN!¼‹Y-´…b7®k@¨|sH¢y|Nv…T™sŽX•q˜\‘o¤`n±b‹mÃc‰nâb‡oöa†o÷_…où]„oú[ƒoûYƒoüXƒoüXƒoüXƒoüXƒoüXÿVÿdÿrÿ~ÿˆõ‘è˜Ýž Ñž1Çš@¾•L ¶V,®‹`7§†h@¡‚pHœ~yN–{‚T’x‹Yv•]‰t a…s®c‚r¿d€sÞd€tõbtö`sø^~sù\~rúZ~rûY~rûY~rûY~rûY~rûYÿXÿgÿuÿÿŒñ•ã֣ˡ/ž>¹™J°”T+©]6¢‹f?›‡nG•„vN€T‹~ˆY†{’]yža}x«dzx¼eyxÙexyôbyxö`ywø^yvù\yuúZyuûZyuûZyuûZyuûZyuûZÿZÿiÿx ÿ„ ï Ýš Ù¢ ЦÆ¥,½¢<´žH«™R)£•[4œ‘c>•kF‰sM‰†|S„„…X]z›av~¨ds}¹eq~Óeq~òcr}ö`s{÷^tzù\tyú[uyûZuyûZuyûZuyûZuyûZÿ]ÿl ÿ{ öˆ Ü“Õ Ñ¥ ʪÁ©*·¦:®¢F¦žP(žšY3––a<“iD‰qLƒyR}ŠƒWxˆ\s†™`o„¦cl„·dj„Ïdj„ðbl‚ö`m€÷^où\o}ú[p|ûZp|ûZp|ûZp|ûZp|ûZÿ_ÿo ÿ~ãŒÖ—Ï ʨÄ®»­'²«7 ©§D ¤N&˜ W1‘œ_:Š™gCƒ–oJ}“wPw‘€VrŠZm–^h‹£ae‹´cc‹Ìcc‹îae‰÷_g†ø^i„ù\j‚úZkûZkûZkûZkûZkûZÿbÿrø‚ÛϚɣ콲µ²$¬°5 £­B›ªL#’¦U.Š£]8ƒ e@}lGv›tMp™}Sk–ˆXf•”\b”¡__“²`]“É`]“í_^ø^aŒù\cŠú[d‡ûZe†ûYe†ûYe†ûYe†ûYe†ûYÿf ÿwã‡Ó“Êž§»¯µ¶ ®·!¥¶2 ³?”°J Œ­S+„ª[4}¨c]¶xCXµ‚GT´KP´NM³®PK´ÅPK³êPJ±ÿQL«ÿRN¥ÿRP¡ÿRQžÿQQžÿQQžÿQQžÿQQžÿQÿv݉ʗ¾¢³ª©³ ¼˜Æ‘Ì‹Ì%„Ë4 |É@uÈJmÇS#gÅ\*aÄd0\Ãm6WÂv:SÂ?OÁŽBKÁEHÁ®FGÁÅFGÁêFD¾ÿIE¹ÿJG³ÿKI­ÿLJ«ÿLJ«ÿLJ«ÿLJ«ÿLJ«ÿLéÑžµ§ª¯ ¸–ÁŒË„Õ €ÕyÕ.rÔ< lÓGeÒP_ÑY!ZÑb'UÐk,QÐu0MÏ4IÏŽ7FÏ9DЮ;BÐÆ;CÐê:@Íý>>Ëÿ@@ÃÿBA½ÿCB¹ÿDB¹ÿDB¹ÿDB¹ÿDB¹ÿD݈ǘ¸£«« ´•¾‹È€Ñxá táná+hà7aàB\àMWàVSà_Oài"Kàs%Gà~(Dà‹+Bàš-?á«/>âÁ/>âå/<ßú19Þÿ49Ùÿ6:Ðÿ8;Ìÿ9;Ìÿ9;Ìÿ9;Ìÿ9;Ìÿ9Í’¼ ­¨¡±•»‰Å~ÏtÚnëhëbë*]ì5Wì? RìHMìQJíZFícCím@íx=î…!:î“#8ï£$6ð¶&5ñÒ&4ïó&4ìÿ&2ëÿ(2çÿ+3äÿ,3äÿ,3äÿ,3äÿ,3äÿ,Áœ°¦£®–¸‰Ã}ÍqØgæbö\÷W÷'R÷1Mø:HùB DùK AúT>ú\;ûe8ûo5û{2ü‰0ý˜.ýª,þ¿+ÿã*üú*úÿ*÷ÿ*÷ÿ*÷ÿ*÷ÿ*÷ÿ*÷ÿ³£¤«—¶‰Á{ËoÖcß[õUÿPÿKÿ#Fÿ,Bÿ4>ÿ<:ÿC7ÿK4ÿS1ÿ[ .ÿd +ÿo (ÿ| &ÿ‹$ÿœ"ÿ®!ÿÅ ÿéÿüÿÿÿÿÿÿÿÿÿÿÿÿ¦©˜³Š¿{ÊnÕ`ßTçNÿIÿCÿ?ÿ:ÿ%6ÿ,2ÿ3/ÿ:+ÿA(ÿH%ÿO"ÿW ÿ`ÿlÿyÿŠÿ›ÿ­ ÿà ÿã ÿø ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ 𱋽|ÈmÔ_àQæGõAÿ<ÿ 7ÿ2ÿ.ÿ*ÿ#&ÿ)"ÿ/ÿ5ÿ;ÿBÿIÿQÿZÿf ÿt ÿ… ÿ– ÿ¨ÿ¹ÿÐÿãÿãÿãÿãÿãº}ÇmÓ_àPçBí:ÿ5ÿ/ÿ*ÿ &ÿ"ÿÿÿÿ#ÿ(ÿ-ÿ3 ÿ9 ÿAÿIÿSÿ^ÿlÿ|ÿÿÿ¬ÿµÿµÿµÿµÿµÿ9'ÿ32ÿ54ÿ86ÿ8;ÿ6Cÿ3Nÿ1[ ÿ/h ÿ-vÿ+„ÿ)‘ÿ)›ÿ(¤ÿ(­ÿ(µÿ'¾ÿ'Èÿ'Ôÿ'äÿ'ïÿ'ùÿ'ÿÿ'ÿÿ'ÿÿ(ÿÿ+ÿÿ-ÿü/ÿü/ÿü/ÿü/ÿü/ÿÿ:'ÿ41ÿ81ÿ;4ÿ;9ÿ:Aÿ7Kÿ5X ÿ3eÿ1sÿ/ÿ-Žÿ-˜ÿ,¡ÿ,ªÿ+²ÿ+»ÿ+Äÿ+Ðÿ*á ÿ*í ÿ*÷ ÿ*ÿ ÿ+ÿ ÿ+ÿÿ,ÿÿ/ÿ!ü1ÿ"÷3ÿ"÷3ÿ"÷3ÿ"÷3ÿ"÷3ÿ"ÿ;&ÿ50ÿ;/ÿ>1ÿ?6ÿ>=ÿkÿ;xÿ9…ÿ7ÿ7š ÿ6£!ÿ5«"ÿ5³#ÿ4¼$ÿ4Æ%ÿ4Ô%ÿ4æ&ÿ4ñ&ÿ4û&ÿ5ÿ%þ5ÿ&ú6ÿ(ó8ÿ)ì:ÿ)æ<ÿ*æ<ÿ*æ<ÿ*æ<ÿ*æ<ÿ*ÿ=%ÿ=*ÿC(ÿG)ÿI-ÿJ6ÿJAÿIM ÿGZÿEgÿBtÿ@€ÿ>Œ ÿ=•"ÿ<ž$ÿ;¦&ÿ;®'ÿ:·(ÿ:Á(ÿ:Í)ÿ:á)þ:î)û:ù)÷;ÿ)ö:ÿ+ð;ÿ-è=ÿ.á?ÿ.ÛAÿ.ÛAÿ.ÛAÿ.ÛAÿ.ÛAÿ.ÿ>%ÿA&ÿH$ÿL%ÿO)ÿR3ÿQ>ÿQI ÿOVÿLbÿJoÿG{ ÿE†#ÿC‘%ÿBš'ÿA¢)ÿAª*ý@²+ü@¼,û?È-ø?Û-ô@ë-ð@÷-í@ÿ/ë?ÿ1äAÿ2ÛCÿ3ÑDÿ3ËFÿ3ËFÿ3ËFÿ3ËFÿ3ËFÿ3ÿ@$ÿE#ÿL ÿR!ÿV&ÿY/ÿY:ÿYF ÿVQÿT]ÿQjþNu!üL%ùJ‹(÷I•+õG,óG¦.òF®/ðE¸0ïEÄ1íEÓ1èFè1åFö2âEÿ5ßDÿ6ÓGÿ7ÊHÿ8ÄJÿ8¿Kÿ7¿Kÿ7¿Kÿ7¿Kÿ7¿Kÿ7ÿA#ÿIÿQÿWÿ\#ÿ`,ÿ`6ÿ`A ÿ^Mý[XøXdôUp#ñS|'îP†+ëO.éM™0çL¡2åLª3ãK´4âKÀ5àKÏ5ÛKæ6ÕJô8ÑJÿ:ÎJÿ<ÄLÿ<½Mÿ<¸Oÿ<´Oÿ;´Oÿ;´Oÿ;´Oÿ;´Oÿ;ÿB"ÿLÿUÿ\ÿc ÿf(ÿh2ÿh= úfHôcSî`_ê]k#æZv(âW-ßU‹0ÜS”3ÙQ6ÕP¦8ÓO¯:ÐO»;ÎNÉ<ËOá=ÇOò>ÃOÿ@ÀOÿA·QÿA±Rÿ@­Sÿ@ªTÿ?ªTÿ?ªTÿ?ªTÿ?ªTÿ?ÿFÿPÿYÿbÿhÿl$ÿo.ùo8ñnDëkNåh[ßdg#Ú`q*Ô]{/Ð[…4ÌXŽ8ÉW—;ÇU =ÄT©?ÂS´A¿SÂB½SÖC¹SíD¶SýE³TÿE¬VÿD§WÿD¤XÿC¡XÿB¡XÿB¡XÿB¡XÿB¡XÿBÿHÿSÿ]ÿfÿmÿr!ûu)òv3év> âsJÛoWÒkb#Ígl+Èdv1Äa7À^‰;½\’>º[šA·Y¤DµX®F²W»G°WÍH­XèHªXúI§YÿH¡ZÿH[ÿG›\ÿF™\ÿE™\ÿE™\ÿE™\ÿE™\ÿEÿKÿWÿaÿkÿrÿxõ{$ë}-â~9Ù{FÐvSÉq^$Ãmh,¾jq3ºg{8¶dƒ=²bŒA¯`•E¬^ŸG©]©J¦\¶K¤\ÇL¢\âMŸ]÷Lœ^ÿL˜_ÿJ•`ÿI“`ÿH‘`ÿG‘`ÿG‘`ÿG‘`ÿG‘`ÿGÿNÿZÿdÿoÿvü}ïä„'Û„4ÐCÈ|OÁxZ#»sd,µpm3±lv:­j?©gˆC¥e‘G¢c›JŸb¥Mœa±O™`ÁP—`ÜP•aóO“bÿNcÿLŽdÿKŒdÿJ‹dÿH‹dÿH‹dÿH‹dÿH‹dÿHÿPÿ\ÿh ÿrÿzöé†ÞŠ ÒŠ0Ɇ@Á‚Mº}W#´ya,®uj4©rr:¤o{@ l„DjH™h—L•g¡O’f­Qe½RŽeÔSŒfðQ‹gÿPˆgÿN‡hÿL†hÿK…gÿI…gÿI…gÿI…gÿI…gÿIÿRÿ_ÿk ÿu ù~ ð…ã‹ÖÌŽ.Ë= »‡J´ƒU"­~^+§{g3¢wo:tx@™r€E•o‰I‘m“MlžPŠjªS‡j¹T…jÏT„kîSƒlÿQ‚lÿOkÿM€kÿL€kÿJ€kÿJ€kÿJ€kÿJ€kÿJÿTÿa ÿn ýx è‚܉ Ø Ð“Æ“+¾; ¶ŒH®ˆR!§„\+¡€d3œ|m:—yu@’w}EŽu†JŠrN†q›Q‚o§To¶U}oËV|oëT|pÿR{pÿP{oÿN{oÿM{nÿK{nÿK{nÿK{nÿK{nÿKÿWÿc ÿpð|Ü…ÔŒГ Ê–Á—)¹”9 ±F©P ¢‰Z*œ…b2–‚j9‘r?Œ|zE‡zƒJƒxNv˜Q{u¤Txt³VvtÈVutèUuuýSutÿQusÿOvrÿMvqÿLvqÿLvqÿLvqÿLvqÿLÿYÿfÿsáÖˆÏÊ–Äš¼›&´˜7 ¬•D¤‘NŽW(–Š`1‡h8‹„p?†‚xDI}}‹Mx{–Qtz¢Tqy±VoyÅVnzæUnzüSoyÿQpwÿOqvÿMquÿLquÿLquÿLquÿLquÿLÿ[ÿiöw݂ЋÉ“Ä™¾ž¶Ÿ$®4¦šAŸ–L˜“U'‘^/‹e7…Šm=€ˆuC{…~HvƒˆLr‚“Pn€ Sk®UhÂVgãUh€úSi~ÿQj|ÿOk{ÿMlyÿLlyÿLlyÿLlyÿLlyÿLÿ^ ÿlæzÖ†ËÄ—¾¸¢±£!©¢2¡Ÿ?™œJ’™S%‹–\-…“c5‘k;zŽsAuŒ|FpŠ…Kkˆ‘Og‡Rd†¬Tb†¿Ua†áTa†ùRc„ÿPeÿOfÿMg~ÿLg~ÿLg~ÿLg~ÿLg~ÿLÿa ÿoà~ЉƓ¿›¸¡±¦ ª¨£§/›¥=”¢HŒŸQ"…œY+ša2y˜i9t•q?o“yDj’ƒHeŽLa›O^ŽªR[޽RZŽÞR[øP\‹ÿO^ˆÿN`…ÿLaƒÿKaƒÿKaƒÿKaƒÿKaƒÿKÿdõtÚ‚ËŽÁ—¸ž±¥©«£­œ¬,•«: ¨E†¦O¤W(y¢_/s f5mžn;hœw@cšE_™ŒI[˜™LW—¨NU—»OT—ÜNT–öNU”ÿMXÿLYÿK[ŠÿJ[ŠÿJ[ŠÿJ[ŠÿJ[ŠÿJÿhåyчŒ»œ±¢©©¡±›³•³(޲6 †°B®Lx¬T#rª\*l¨d1g§l6b¥u;]¤@Y£ŠCU¢—GQ¡§IO¡ºJN¢ÙIN õINŸÿIP™ÿIR–ÿHT’ÿGT’ÿGT’ÿGT’ÿGT’ÿGÿnÞʾ˜³ ª§¡®—¶‘ºŒº#…¹2~¸>w¶IqµRk³Z%e²b+`±j0[°s5W¯}9S®‰=O­–@L­¥BJ­¹CI®ØBH«õCGªÿDI¥ÿDK ÿDMœÿDMœÿDMœÿDMœÿDMœÿDêu҆Ó·¬¤¢«˜³Ž»…Á Â{Â-uÁ: oÀEi¿Oc¾W^½_#Y¼h(U»q-Q»{0Mº‡4Jº•7Gº¥9Eº¸:Dº×9C¸õ;B¶ÿ=B³ÿ>D®ÿ>E©ÿ>E©ÿ>E©ÿ>E©ÿ>E©ÿ>à}ɻ𮢣©˜±Ž¹„ÁyÉtËpÌ&kË5eË@ `ÊK[ÊTWÉ]RÉeNÈo#KÈz&GȆ)DÈ”,BȤ.@ȸ/?É×/?Çõ0=Äÿ3;Ãÿ5<¾ÿ6=¸ÿ7=¸ÿ7=¸ÿ7=¸ÿ7=¸ÿ7цÀ•²Ÿ¥§š¯Ž·ƒ¿xÇnÏe× cØ`Ø-[Ø:WØF SØP OØYK×bG×lD×wAׄ>Ø“ <Ø£!;Ù·":ÚÕ":Öò#7Ôÿ'6Òÿ)4Ñÿ+6Êÿ-6Êÿ-6Êÿ-6Êÿ-6Êÿ-Ŷ¨¥œ­¶ƒ¾wÇlÏbÖZäXäTä)Pä5Lå?HåIEåS Bæ\ ?æf<æq:ç~7çŒ5çœ3è®2éÆ2èê1åþ/äÿ.äÿ-âÿ -âÿ -âÿ -âÿ -âÿ ºšª£«´ƒ½wÆkÏ_ÖTÞQðMðJð&Fñ0Bò:>òC;óK8óT6ô]3ôh 0õt .õ ,ö‘*ö¢(÷·'øÖ'öô&óÿ&ñÿ%ñÿ%ñÿ%ñÿ%ñÿ%ñÿ­¡ ©’³„¼vÆiÏ]ØQßIîFüBý>þ!;þ*7ÿ34ÿ:0ÿB-ÿJ+ÿS(ÿ\%ÿf"ÿs ÿƒÿ”ÿ¦ÿ¼ÿâ ÿù ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ¢§“±…»vÆiÐ[ÚNàCå>û:ÿ 6ÿ2ÿ/ÿ#+ÿ*(ÿ1$ÿ7!ÿ?ÿFÿNÿXÿcÿpÿÿ“ÿ§ÿ½ÿàÿöÿÿÿÿÿÿÿÿÿÿ•¯†ºwÅhÐZÛLá@ç7ó2ÿ.ÿ*ÿ&ÿ#ÿÿ ÿ&ÿ+ÿ2ÿ8ÿ@ÿH ÿR ÿ]ÿkÿ}ÿÿ£ÿ¶ÿÍÿìÿìÿìÿìÿ숹xÄiÐ[ÝKã>é2î+ÿ&ÿ!ÿÿÿ ÿÿÿÿ ÿ$ ÿ*ÿ0ÿ7ÿ@ÿJÿVÿdÿuÿˆÿšÿªÿ»ÿ»ÿ»ÿ»ÿ»ÿ/+ÿ+2ÿ/1ÿ04ÿ/9ÿ+Aÿ'Lÿ#Xÿ!fÿ tÿ‚ ÿŽ ÿ˜ ÿ¡ ÿ©ÿ°ÿ¸ÿÁÿËÿÛÿèÿòÿüÿÿÿÿÿÿÿÿÿÿÿ!ÿÿ"ÿÿ"ÿÿ"ÿÿ"ÿÿ/+ÿ.0ÿ2/ÿ31ÿ26ÿ/>ÿ+Iÿ)Vÿ'cÿ%qÿ$~ ÿ#Š ÿ#•ÿ"žÿ"¦ÿ"­ÿ"µÿ"½ÿ"Çÿ"Ôÿ"åÿ"ðÿ"úÿ"ÿÿ#ÿÿ#ÿÿ#ÿÿ$ÿþ&ÿü'ÿü'ÿü'ÿü'ÿÿ0*ÿ1-ÿ5+ÿ7-ÿ62ÿ4:ÿ2Eÿ/Rÿ-`ÿ,m ÿ*z ÿ)†ÿ(‘ÿ(šÿ(¢ÿ'ªÿ'±ÿ'¹ÿ'Ãÿ'Ïÿ'áÿ'íÿ'øÿ(ÿÿ(ÿÿ(ÿÿ'ÿü)ÿö+ÿô,ÿô,ÿô,ÿô,ÿÿ1)ÿ4)ÿ9(ÿ;*ÿ<.ÿ:6ÿ9Bÿ7Oÿ5\ÿ3i ÿ1vÿ0‚ÿ/ÿ.–ÿ.žÿ-¦ÿ-­ÿ-µÿ-¾ÿ-Êÿ-Üÿ-êÿ-õý.ÿú.ÿù-ÿù-ÿó/ÿí1ÿê2ÿê2ÿê2ÿê2ÿÿ3)ÿ8&ÿ=$ÿ@%ÿA)ÿB3ÿA>ÿ?Jÿ=W ÿ;d ÿ9pÿ7}ÿ6ˆÿ5‘ÿ5šÿ4¢ÿ4©ÿ3±ÿ3ºÿ3Åý3Óú3æ÷4óó5þñ4ÿð3ÿî3ÿ ç6ÿ!á7ÿ!Þ8ÿ!Þ8ÿ!Þ8ÿ!Þ8ÿ!ÿ5'ÿ="ÿB ÿF ÿH%ÿJ/ÿI:ÿGFÿER ÿC_ ÿAkÿ?wÿ=‚þ<Œü<•û;ù;¥ø:­ö:¶õ:Àó:Îð:ãë;ñè:ý!æ:ÿ#ä:ÿ%á:ÿ%Ø<ÿ&Ð=ÿ&Í>ÿ&Í>ÿ&Í>ÿ&Í>ÿ&ÿ9$ÿAÿGÿKÿO"ÿQ+ÿQ6ÿOAÿLM ÿKZüIføGrõE}óC‡ñB‘ïB™íA¡ ìA©!ê@²"è@¼"ç@Ê#äAß#àAï$Ü@ü'Ø@ÿ)Ô?ÿ*Ï@ÿ*ÇBÿ*ÂCÿ*ÀCÿ*ÀCÿ*ÀCÿ*ÀCÿ*ÿ< ÿEÿKÿQÿVÿX'ÿX1ÿW<üUH öRTòPaîNmêLxçJ‚åIŒ âH•"àG$ÞG¥%ÜF®&ÚE¹'ØEÆ(ÔEÜ)ÏFî*ËEû-ÈEÿ.ÅEÿ/ÀFÿ/ºHÿ/µIÿ.´Iÿ.´Iÿ.´Iÿ.´Iÿ.ÿ@ÿIÿPÿVÿ\ÿ_#ÿ`,ú_7ó]BíZO çX\âVhÞSrÚQ} ÖO†$ÒN'ÐM˜)ÍL +ËK©-ÉJ³.ÇJ¿/ÅJÐ0ÂKè0½Kø2ºJÿ3¸Kÿ3³Lÿ3®Mÿ3ªNÿ2©Nÿ2©Nÿ2©Nÿ2©Nÿ2ÿCÿLÿTÿ\ÿaÿeûf'òf1êe=ãcJ Ü`WÕ]bÐZmÌWw#ÈU€'ÅT‰+ÂR’.ÀQš0¾P£2»O­4¹O¹5·OÈ6´Oâ6±Oô7®Pÿ8¬Pÿ8§Qÿ7£Rÿ6 Sÿ5ŸSÿ5ŸSÿ5ŸSÿ5ŸSÿ5ÿFÿPÿX ÿ`ÿfÿjôl!êm+ál7ÙjE ÐgRÊc^Å`h Á^r&½\{*ºZ„.·XŒ1´W•4±Už6¯T¨8­T³:ªSÂ;¨SÚ;¥Tð<¢Uÿ<¡Uÿ;Vÿ:šWÿ9—Wÿ8—Wÿ7—Wÿ7—Wÿ7—Wÿ7ÿIÿSÿ\ ÿe ÿkúoìrât#Øs2ÎqB ÇmOÁjZ»gd!·dm'³bv,¯_0¬^‡4©\7§[™:¤Y£<¡Y®>ŸX½?XÑ@šYì?˜Yþ?—Zÿ>”[ÿ<‘[ÿ;[ÿ:[ÿ:[ÿ:[ÿ:[ÿ:ÿLÿV ÿ` ÿh úo ósåwÚyÏy.Çw> ¿tK¹pV³m`!¯ji(ªgr-§ez2£cƒ6 aŒ9`•<š^Ÿ?—]ªA•]¸B“]ËC]èC^üAŽ_ÿ@‹_ÿ>Š_ÿ=ˆ_ÿ<ˆ_ÿ;ˆ_ÿ;ˆ_ÿ;ˆ_ÿ;ÿNÿX ÿcúlçsÝxÚ{ Ñ~È~+À|;¹yH²vS¬r]!§of(£mn.Ÿjw3›h7˜fˆ;•e‘>‘c›AŽb§CŒa´E‰aÇEˆbåE†búC†cÿB„cÿ@ƒcÿ>‚cÿ=‚cÿ<‚cÿ<‚cÿ<‚cÿ<ÿPÿ[ÿfìoÜvÔ|Ñ€ Ê‚ƒ(º9³~F¬{Q¦wZ!¡tc(œrk.˜os3”m|7‘k„;jŽ?Šh˜B†g£D„f±FfÃGfáGgøE~hÿC~hÿA}gÿ?|gÿ>|gÿ=|gÿ=|gÿ=|gÿ=ÿRÿ]ýiárÖzÎʃņ¼‡&µ†6®ƒC§€N¡|X ›y`'–wi-’tp3Žry7Šp<†n‹?ƒm•Cl¡E|k®Gzk¿HxkÝHxlöFxlÿDwlÿBwkÿ@wjÿ?wjÿ>wjÿ>wjÿ>wjÿ>ÿT ÿ_òlÝvÐ}Ƀć¿Š·Œ#°Š4©ˆA¢…LœU–^&‘|f-Œyn2ˆwv7„u;€tˆ?|r’CxqžFup¬Hso½IqpÙIqpôGqqÿDrpÿBroÿArnÿ?rnÿ>rnÿ>rnÿ>rnÿ>ÿV ÿbæo×yÌŇ¿‹¹Ž² «1¤Œ? ŠJ–‡S‘„\%‹d,†k1‚}s6~{|;zy†?vwBrvœEou©HluºIkuÔIkuòGkuÿEluÿCmsÿAmrÿ?mrÿ?mrÿ?mrÿ?mrÿ?ÿYÿeârÑ|Ç„Àй³’ ¬”¦“/ž‘< ˜H‘ŒQ‹‰Z$†‡b*…i0|‚q5xz:tƒ>p}ŽBl|šEi{§Gfz¸Hd{ÐHd{ðGe{ÿDfzÿCgxÿAhvÿ?hvÿ?hvÿ?hvÿ?hvÿ?ÿ[÷iÝv̀È»Ž´“­— §˜ ˜,™–: ’”EŒ’O†W"€_({‹g.v‰o3r‡w8m…_Š•A\‰£DZ‰´EX‰ËEXˆíDXˆÿCY†ÿA[ƒÿ@]ÿ>]€ÿ>]€ÿ>]€ÿ>]€ÿ>ÿbäqÏ~ȹ‘°—§›ž¡˜£“£%¢4†¡@ €ŸJySt›Z#o™b(j˜j.f–r2a•|7]”†:Y’“>V’¡@S‘²AR’ÉBR‘ëARÿ@Rÿ?U‹ÿ>Vˆÿ=W‡ÿ=W‡ÿ=W‡ÿ=W‡ÿ=ùgÝvɃ½³•©›  –§©‹ª!…©0¨< x§Gs¥Pm£Xh¢`$d¡g)_ p.[žy2W„6Sœ‘9PœŸ;N›°=LœÇ=L›ê­ÿ2@¨ÿ2A¦ÿ2A¦ÿ2A¦ÿ2A¦ÿ2Õ|е–¨£’ª‡±|·p¾hÂfÃcÃ-^Ã9ZÃDVÂN RÂWOÁ_KÁiHÁsEÀ~BÀŒ ?À›"=À­#<ÁÄ#<Àé#:¾þ&8¼ÿ(7»ÿ)8¸ÿ*8¶ÿ+8¶ÿ+8¶ÿ+8¶ÿ+É…¹“¬œ ¢”ªˆ±|¸q¾fÅ[ËWÍVÎ#SÎ2PÎ>MÏHIÏRFÏ[ CÏe@Ïo>Ï{;ω9Ï™7Ï«6ÐÃ6Ïè4Íû2Ëÿ1Êÿ0Éÿ!/Èÿ!/Èÿ!/Èÿ!/Èÿ!¾¯š¢¡–©Š°}¸q¿fÆ[ÌPÒGÚ FÜEÜ'DÝ5AÝ@?ÞK=ÞU:ß_8ßi5ßv 3à„ 1à” /ᦠ.á¼-âà-Þø+Ýÿ*Üÿ)Úÿ(Úÿ(Úÿ(Úÿ(Úÿ³˜¥ ™§‹°~¸qÀeÈYÎNÓDÛ?é =é;ê#9ê.6ë84ëB1ìK/íU-í_*îk(îx&ïˆ%ïš#ð®"ñÈ"ðí!ìÿ!ëÿ ëÿ êÿ êÿ êÿ êÿ ¨Ÿ›¦¯¸qÁdÊXÐLÖAÝ8ä5ö 3÷0÷.ø'+ù0(ù8&ú@#ûI!ûRü]ýiýyþ‹ÿžÿ³ÿÓþôüÿúÿùÿùÿùÿùÿ¥®€¸rÂdËVÓIÚ>ß4ä.ô+ÿ (ÿ%ÿ"ÿÿ&ÿ-ÿ4ÿ<ÿDÿNÿYÿg ÿw ÿŠ ÿŸ ÿµÿÕÿôÿÿÿÿÿÿÿÿÿÿ‘­‚¸sÂdÌVÕHÝ;â0ç'î#ÿ ÿÿ ÿÿÿÿ!ÿ' ÿ. ÿ6ÿ>ÿHÿTÿbÿsÿ‡ÿÿ²ÿÊÿêÿóÿóÿóÿó„·tÁeÌVØGß9å-ê#îýÿÿÿÿ ÿ ÿÿÿÿ ÿ&ÿ.ÿ7ÿAÿMÿ\ÿmÿ‚ÿ–ÿ¨ÿºÿÃÿÃÿÃÿÃÿ$/ÿ%/ÿ(/ÿ'1ÿ$6ÿ >ÿIÿVÿdÿrÿÿŠÿ”ÿÿ¤ÿ¬ÿ³ÿºÿÃÿÎÿßÿëÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿ ÿÿ ÿ%.ÿ)-ÿ+,ÿ+.ÿ)3ÿ$;ÿFÿSÿaÿnÿ{ÿ‡ÿ‘ÿšÿ¡ÿ©ÿ°ÿ·ÿÀÿÊÿÛÿèÿôÿýÿÿÿÿÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿ&-ÿ,)ÿ.(ÿ/*ÿ-/ÿ)7ÿ'Cÿ$Pÿ"]ÿ jÿwÿƒÿÿ–ÿžÿ¥ ÿ¬ ÿ³ ÿ¼ ÿÆ ÿÓ ÿå ÿñ ÿü þÿ ýÿ üÿ üÿ üÿ÷!ÿ÷!ÿ÷!ÿ÷!ÿÿ**ÿ/&ÿ2$ÿ3%ÿ2*ÿ14ÿ/?ÿ-Lÿ*Yÿ(fÿ&rÿ%~ÿ%‰ÿ%’ ÿ%š ÿ%¡ ÿ%¨ ÿ$° ÿ$¸ ÿ%Á ÿ%Î ÿ%á ü%ï ù&ú ö&ÿ õ&ÿô%ÿô%ÿò&ÿí'ÿí'ÿí'ÿí'ÿÿ.&ÿ4"ÿ7 ÿ9!ÿ8%ÿ9/ÿ8;ÿ5Gÿ3Tÿ1aÿ/mÿ.y ÿ-„ ÿ- ÿ,– ÿ, ÿ,¥ý,¬ü,´û,½ù,Éö,Ýó-ìï-øí-ÿë,ÿê,ÿé,ÿå-ÿà.ÿà.ÿà.ÿà.ÿÿ2#ÿ8ÿ<ÿ>ÿ@"ÿA+ÿ@6ÿ>Bÿ ŸxJšuS•s\‘qd"ol'‰mt+…l|/‚j…2i5|h›8yg§:vf¶;tfÌ­¹#=­Ø"=«õ#<©ÿ%;§ÿ&;¦ÿ&;¤ÿ&;¤ÿ&;¤ÿ&;¤ÿ&Ìz»ˆ®’¢™—žŒ¤€ªu¯i´^¹[ºY»$V»1S»=P»GM»PJºY Gºb DºlAºw>¹„<¹“9¹£8¹·7ºÖ7¸ô5¶ÿ4´ÿ3³ÿ3²ÿ 3²ÿ 3²ÿ 3²ÿ Áƒ´‘¦˜›ž¥‚«v±k¶_¼TÁLÅ KÅIÆ(HÆ5EÇ@CÇJ@ÇS>Ç];Çg9Çs 7Ç€ 4Ç 2Ç¡1ȵ0ÈÓ0Æô.Äÿ-Âÿ,Áÿ+Àÿ+Àÿ+Àÿ+Àÿ¸ª—žž‘¥„¬x²k¹`¿TÃJÈ@Í:Ò9Ò8Ó(7Ó56Ô@4ÕK3ÕU1Ö`/Öl-×z+Ø‹*Ø(Ù±'ÚÍ'×ï&Ôÿ %Òÿ $Ñÿ #Ðÿ #Ðÿ #Ðÿ #Ðÿ ®– ”¤†¬y´l»`ÂTÆHË>Ð5Õ-Ý ,á+â)ã*(ä5'ä?&åJ$æU#æa!çn ç~èé¤é¼êâæüåÿäÿãÿãÿãÿãÿ£–¤ˆ¬zµl½_ÄSÊGÎ<Ó2Ú*ß%î #ð!ññ"ò+ó4ô>ôHõRö_ön÷€ø”ùªùÆùí öÿ ôÿ óÿ óÿ óÿ óÿ™£‹¬|µm¾_ÆRÍEÒ9Ø/Þ&âêûÿÿÿÿ!ÿ(ÿ0 ÿ9 ÿC ÿNÿ\ÿlÿ€ÿ–ÿ­ÿÊÿðÿÿÿÿÿÿÿÿÿÿ«}µn¿`ÈRÐC×7Ý+â"æêùÿÿÿ ÿ ÿÿÿ"ÿ*ÿ3ÿ=ÿIÿWÿiÿ~ÿ•ÿ¬ÿÇÿèÿúÿúÿúÿú€µp¿aÉRÓCÛ5á)æêîøÿ ÿÿÿÿ ÿÿÿÿÿ#ÿ+ÿ6ÿCÿSÿeÿzÿ‘ÿ¦ÿ¸ÿÏÿÏÿÏÿÏÿ/ÿ ,ÿ!,ÿ.ÿ3ÿ<ÿFÿ Tÿ aÿ oÿ {ÿ †ÿ ÿ ™ÿ  ÿ §ÿ ­ÿ ´ÿ ¼ÿ Åÿ Ñÿ ãÿ ïÿ ùÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ-ÿ#)ÿ$)ÿ"+ÿ0ÿ8ÿCÿPÿ^ÿkÿwÿƒÿÿ•ÿÿ¤ÿªÿ±ÿ¹ÿÁÿÍÿßÿìÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#*ÿ&&ÿ(%ÿ''ÿ#+ÿ3ÿ@ÿMÿZÿgÿsÿ~ÿ‰ÿ‘ÿ™ÿ ÿ§ÿ®ÿµÿ¾ÿÉÿÚÿéþöûÿùÿùÿøÿøÿøÿøÿøÿøÿÿ&&ÿ*"ÿ, ÿ+"ÿ(&ÿ'0ÿ$<ÿ"IÿUÿbÿnÿzÿ„ÿÿ•ÿœÿ£ÿªÿ²ÿºÿÅüÓùçõôòÿñÿðÿïÿïÿ ïÿ îÿ îÿ îÿ ÿ*"ÿ.ÿ0ÿ0ÿ0"ÿ0,ÿ.7ÿ+Dÿ(Qÿ&]ÿ$iÿ#uÿ#þ#ˆý#‘û#˜ú# ø#§÷#®õ#·ô#Áò$Ïî$äê%òè%þæ$ÿ ä%ÿ ã%ÿ ã$ÿ â$ÿ á$ÿ á$ÿ á$ÿ ÿ.ÿ3ÿ5ÿ5ÿ8ÿ8'ÿ73ÿ4?ÿ2Kÿ/Xû.dø-oõ,zó,ƒñ,Œï,”í,œì,£ê,«é,³ç,¾ æ,Ì â-âÞ-ñ Û,þ Ö-ÿÔ,ÿÒ,ÿÑ,ÿÏ,ÿÎ-ÿÎ-ÿÎ-ÿÿ2ÿ7ÿ:ÿ<ÿ?ÿ@"ÿ>-ÿ<9ú:Eô8Rð7^ì6jé5tæ5~ä4‡â4 à4˜ Þ4Ÿ Ü3§ Ú3° Ø3» Õ3É Ò4ß Î4ðÊ4ýÇ4ÿÅ4ÿÃ4ÿÃ3ÿÀ4ÿ¿4ÿ¿4ÿ¿4ÿÿ6ÿ;ÿ> ÿCÿFÿFÿF&öD2ïB?é@Lä?Yß>dÛ=oØ„}H |Q{zYwy`swhovp!lux%it‚(fsŽ+crš.`q¨/^qº0]qÔ0]qò.^qÿ,^pÿ+_pÿ)`oÿ(`nÿ(`nÿ(`nÿ(ñUÞbÊm½u³{«€¢‚˜‘ƒ…ˆ….ƒ„;~ƒE zNu€Vq^n}fj|m g{v#cz€'`y‹*]x˜,Zw¦.Xw¸/WwÑ/Wwñ.Xvÿ,Xvÿ*Yuÿ)Ztÿ(Ztÿ'Ztÿ'Ztÿ'íY×fÅq¹z¯€¦„†‘‡Š‰ †Š‚‹+}Š8x‰BtˆL o‡Tl…[h„cdƒka‚t!]}$Z€‰(W–*U~¤,R~¶-Q~Î-Q}ï,R}ÿ+R|ÿ)S{ÿ(Tzÿ'Tzÿ'Tzÿ'Tzÿ'è^ÐkÀv´~«…¡‰—‹‰ƒ~{‘'v‘4r?mI iŽQeYbŒ`^‹h[ŠqW‰{!Tˆ†$Q‡”'O†¢)M†´*K†Ì*K…î)L„ÿ)Lƒÿ(Lƒÿ'Mÿ&Nÿ&Nÿ&Nÿ&ácÉp»{°„¦Š›Ž‘‘„“z•u—r˜"o˜0j—;f—Eb–N _•V[”]X“eU“nQ’xN‘„ K‘#I¡$G²&EÊ&Eí%Eÿ%EŒÿ%F‹ÿ$FŠÿ$FŠÿ$FŠÿ$FŠÿ$ØiÃvµ«ŠŸ•“Š–~špkŸhŸf *b 7_ŸA[ŸJXžR TžZQbNœkKœuH›E›BšŸ@š° ?šÈ ?™ë?˜ÿ >–ÿ!>•ÿ!?”ÿ!?”ÿ!?”ÿ!?”ÿ!Íp¼}°ˆ¤™”Ž˜ƒw i¤`§]¨[©$Y©1V©<S©EP¨NM¨W J¨_ G§hD§sA¦>¦<¦:¦¯9¦Ç9¥ê8£ÿ7¡ÿ7 ÿ7Ÿÿ7Ÿÿ7Ÿÿ7ŸÿÄxµ…©•’š†Ÿz£n¨b¬U°P²N²M³(K³5I³?F³ID³RA³[?³d<³o :³{ 7³Š5²š3³­2³Å2²é1°þ0®ÿ/­ÿ/¬ÿ/¬ÿ/¬ÿ/¬ÿ»®Ž¡•–š‰ }¦q«e¯Y´N·C¼@½?½>¾+<¾6;¿A9¿K7¿T5À_3Àj1Àw/À†-À—+Àª*ÁÂ*Àç)½ý (¼ÿ 'ºÿ '¹ÿ'¹ÿ'¹ÿ'¹ÿ²Œ¥”™š¡§r­f³Z¸O»D¿:Ä0É.Ê-Ê,Ë)+Ë5+Ì@*ÍJ(ÍV'Îa&Îo$Î#Ï‘!Ï¥ н ÏäÍúËÿÊÿÉÿÉÿÉÿÉÿ¨”œš¡‚¨t¯g¶[¼NÀCÃ9Ç/Ì'ÐÖ ÚÛÛ&Ü1Ý<ÝHÞUßbàrà…ášâ±ãÏàôÞÿÝÿÛÿÛÿÛÿÛÿžš’¡„©v±h¸[¿NÄBÈ7Ì-Ð$ÕÛßéêëë&ì0í: îF îS ïb ðtñ‰ò òºñäñýïÿíÿíÿíÿíÿ•¡†©x²iº[ÂMÈ@Ì4Ñ*Ö!Ûàäð ù ú ûûü$ü,ü7üBüPüaýuüŒü¤üÁüëüÿýÿýÿýÿýÿ‰©y²j»\ÄNÌ?Ñ2×'Ýáåè ñýÿÿ ÿÿÿÿÿ'ÿ1ÿ>ÿMÿ_ÿuÿÿ¦ÿÂÿçÿüÿÿÿÿÿÿ|³l¼]ÆNÏ?Ö1Ý%âæê îòÿÿÿÿÿÿ ÿÿÿÿ!ÿ+ÿ9ÿJÿ]ÿsÿŒÿ¤ÿ¹ÿÔÿÞÿÞÿÞÿ,ÿ)ÿ(ÿ+ÿ0ÿ 8ÿDÿQÿ^ÿlÿxÿ‚ÿŒÿ”ÿœÿ¢ÿ¨ÿ¯ÿ¶ÿ¾ÿÈÿ×ÿçÿóÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)ÿ&ÿ%ÿ'ÿ,ÿ4ÿ @ÿNÿ[ÿhÿtÿÿˆÿ‘ÿ˜ÿŸÿ¥ÿ¬ÿ²ÿºÿÄÿÑÿäÿñÿüüÿüÿüÿüÿüÿüÿüÿüÿÿ&ÿ!"ÿ !ÿ#ÿ'ÿ0ÿ<ÿJÿ Wÿ cÿ oÿ zÿ „ÿ ÿ ”ÿ ›ÿ ¢ÿ ¨ÿ ¯ÿ ·ÿ Àÿ Ìÿ àû ï÷ úõ ÿõ ÿô ÿô ÿô ÿô ÿô ÿô ÿÿ""ÿ$ÿ$ÿ"ÿ"ÿ,ÿ8ÿEÿRÿ^ÿjÿuÿÿˆÿÿ—ÿžÿ¥ý¬ü³ú½ùÉõÝñíîùìÿëÿêÿéÿéÿéÿéÿéÿÿ&ÿ(ÿ(ÿ&ÿ&ÿ&(ÿ#4ÿ @ÿMÿYÿeþpüzùƒ÷Œö“ôšó¡ñ¨ð°îºíÆêÙæëâùàÿÞÿÝÿÜÿÜÿÛÿÛÿÛÿÿ*ÿ-ÿ-ÿ-ÿ.ÿ-"ÿ,.ÿ):ÿ&Gú$Tö#`ò"kï"uí"~ë"‡é"ç"–å"žä"¥â"­á#·ß#ÃÝ#ÖØ$êÒ$ùÏ%ÿÍ%ÿË%ÿÊ%ÿÊ$ÿÊ$ÿÊ$ÿÊ$ÿÿ.ÿ1ÿ2 ÿ4ÿ5ÿ5ÿ3'ú14ó/Aî-Né,Zå,eâ,pß+yÝ+‚Ú+‹Ø+’Õ+šÓ+¢Ñ+ªÏ+³Í+¿Ì,ÏÈ-çÄ-÷ Á-ÿ ¿-ÿ ½-ÿ ¼-ÿ ¼,ÿ »,ÿ »,ÿ »,ÿ ÿ1ÿ5 ÿ6ÿ: ÿ<ÿ;ø9ï7+ç69á5GÜ5TÕ5`Ñ5jÎ4sÌ4|Ê4…È4Æ3”Ä3œ Â3¥ Á3® ¿3¹ ½3È »4á ·4ó ´4ÿ±4ÿ°4ÿ¯4ÿ®4ÿ®4ÿ®4ÿ®4ÿÿ5ÿ8ÿ<ÿ@ÿA úAí?ã<"Ú=1Ò>AÌ>OÈ>ZÄ=dÁ=n¿ÿCëKÝQÑTÊTÆRÁQ¹S"³U3®TAªTL¦SV¢Q_ ŸPgOošNw˜N–Mˆ“L‘‘L›K¦K³‹KʼnKâ‡L÷†Lÿ…Lÿ…Mÿ…Lÿ…Lÿ…Lÿ…Lÿÿ@üGåPÕVÊYÂZ½X¸W±Y¬Z/§Z=¢YIžXS ›W[ —Vd•Uk’TsS{R„‹QˆQ—†P£„P° ‚PÁ!€PÝ!~Qô }Qÿ}Qÿ}Qÿ}Qÿ}Qÿ}Qÿ}QÿÿBðJßTÎZÄ^¼_¶^±\ «^¥`+ `:œ_E—^P ”\X [`Zh‹YpˆXw…W€ƒV‰€V”~UŸ!{U­"yT½#xU×#wUò"vVÿ vVÿvVÿvVÿvVÿvVÿvVÿÿEìNÚXÉ^¿b·d±c«a¤cŸd(še7–dC‘cMŽaU Š`]‡_e„^l]t~\}|[†yZ‘ wZ"tYª$rYº%qYÒ%pZð#oZÿ"oZÿ pZÿpZÿpZÿpZÿpZÿÿHçRÓ[Åb»f³h¬h¥fŸgši%•i4h@ŒgJˆfS „e[db~cj{brxazv`„s_Ž!p^š#n^¨%l]¸%j^Î&i^î$i^ÿ"j^ÿ j^ÿj^ÿj^ÿj^ÿj^ÿùJãUÏ_Áe·j¯l§lŸj™k”m"n1‹m=‡lGƒkP jX|h`xggvgosfxpemdŒ!jc˜#hb¦%fb¶&dbÌ&dbì%dbÿ#dbÿ!ebÿebÿebÿebÿebÿòLßXÊb½i³n«p¢p™n“prŠr.†r;‚qE}pN znVvm^slepkmmjujigiŠ!eh–#bg¤%`g´&_gÉ&^gê%^gþ#_gÿ!_fÿ`fÿ`fÿ`fÿ`fÿïOÚ\Æeºm°r§ut”st ‰v…w+w8|vCxuL ttT qs[nrckqkhpseo|bn‡ _m”"]l¢$Zl²%YlÇ%Xlè%Ylý#Ykÿ!Zkÿ[kÿ[jÿ[jÿ[jÿëSÓ`Âi¶q¬v£y™yw‡y ƒ{|({|5w{@szIoyQ lxYhwaevhbup_tz\t…Zs‘!Wr #Ur°$SrÅ$Srç$Sqü"Tqÿ TpÿUpÿUoÿUoÿUoÿåWÍd¾m²u¨{Ÿ~“}‡}€|€x$u‚2q=m€Fi€O fV c~^`}f]|nZ{wWz‚TzQy!Oy®"NyÃ"Mxå"Mwû!NwÿNvÿOuÿOuÿOuÿOuÿß\Èh¹r®z¥€š‚Ž‚€ƒy…t†qˆ nˆ.jˆ9g‡Cc‡L`†S ]…[Z„cW„kTƒuQ‚€NK›I¬H€Á G€ãGúH~ÿH}ÿI|ÿI|ÿI|ÿI|ÿÖaÂn´xª€Ÿ…”‡ˆ‡{‰pŒkŽ hf)b5_?\HYŽPVŽX S`PŒhMŒrJ‹}HŠŠEŠ™CŠªBŠ¿AŠáAˆùA†ÿA…ÿB…ÿB„ÿB„ÿB„ÿÍg¼t¯~¥†šŠŽŒ‚ug”a•^—\—#Z˜/W˜:T˜DR—LO—TL—\ I–e G–oD•zA•ˆ?”—=”¨;”½;”ß:’ø:ÿ:ÿ:Žÿ:Žÿ:Žÿ:ŽÿÅn¶{ª…ž‹”ˆ’{”n—b›WžR Q O¡(M¡4K¡>I¡GG¡PD¡XB¡a? k = w : … 8 ”6 ¦5 »4 Ý4÷3œÿ3šÿ3™ÿ3™ÿ3™ÿ3™ÿ½w¯ƒ£‹˜‘•™sœgŸ[¢O¦G©DªCªA«+@«7?¬A=¬J;¬S9¬\7¬g5¬s2¬0¬‘.¬£-¬¸ ,¬Ù,ªõ +¨ÿ *¦ÿ *¥ÿ *¥ÿ *¥ÿ *¥ÿ µ€¨‹œ‘‘–…œx k¥_¨S¬H¯=²6µ 4µ3¶!2¶,1·70·A/¸K.¸U,¸`*¸m)¹{'¹%¹Ÿ$¹´#¹Ò#·ô"µÿ!´ÿ!³ÿ!²ÿ!²ÿ!²ÿ­Š ‘•—ˆ{£n¨a­U±J´?·4»+¾$ "Â"Ã!Ã* Ä4Ä?ÅJÆVÆcÇsDžǙȮÈËÆñÄÿÃÿÁÿÁÿÁÿÁÿ£‘˜˜‹ž}¥p«b±V¶J¹>½4À*Ä"ÈÌÐ ÒÒÓ%Ó0Ô<ÔH ÕV Õe Öx Ö Ø¤ ؾ Ùæ Öþ Ôÿ Òÿ Òÿ Òÿ Òÿš˜ŽŸ€¦r­d´WºI¿=Â2Æ(ÉÍÑÖ ÛÞ ßßà$á.â:ãGäVägå{æ’æªçÈçðèÿèÿèÿèÿèÿ‘Ÿ‚§t¯e·W¾IÃ<Ç0Ë%ÏÔÙÝ áåéé éêë!í+ï7ñEòVóhó~ô—õ°öÐ÷ó÷ÿ÷ÿ÷ÿ÷ÿ…§v°f¸XÁJÈ;Ì.Ñ#ÖÜà ãçêõôõõ ööøú'ü4ÿCÿUÿiÿÿšÿ²ÿÏÿíÿùÿùÿùx°hºYÃKË;Ñ-Ø!Ýâæêíðøÿÿÿÿÿÿ ÿÿÿ"ÿ0ÿ@ÿSÿiÿÿ™ÿ¯ÿÃÿÕÿÕÿÕÿ(ÿ%ÿ%ÿ 'ÿ-ÿ5ÿAÿOÿ\ÿiÿtÿ~ÿˆÿÿ—ÿÿ¤ÿªÿ°ÿ·ÿÀÿÌÿßÿìÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ%ÿ"ÿ!ÿ#ÿ (ÿ0ÿ=ÿKÿXÿdÿpÿzÿ„ÿŒÿ“ÿšÿ ÿ¦ÿ­ÿ´ÿ¼þÈýÙûéúöùÿøÿøÿøÿøÿùÿùÿùÿÿ"ÿÿÿÿ"ÿ ,ÿ9ÿFÿSÿ`ÿkÿvÿÿˆÿÿ–ÿÿ£þ©ü°ú¹÷ÄõÒóæòôñÿðÿïÿïÿïÿðÿðÿðÿÿÿÿÿÿÿ(ÿ4ÿ Aÿ Nÿ[ÿfÿqÿzÿƒþ‹ü’ú™øŸö¦ô­òµðÀíÎëäéóæÿå ÿä ÿä ÿä ÿä ÿä ÿä ÿÿ!ÿ!ÿ ÿÿÿ$ÿ/ÿ<ÿIÿUüaùköuô~ò†ðŽî•í›ë¢êªè³æ½åÌáãÝóÙÿÖÿÔÿÓÿÒÿÒÿÒÿÒÿÿ%ÿ%ÿ$ ÿ#ÿ#ÿ"ÿ)ÿ5ùCôOï[ìfépæyäâ‰à‘ߘݟۧٱֻÔÊÐáÌóÉÿÆÿÄÿÃÿÃÿÃÿÃÿÃÿÿ(ÿ) ÿ(ÿ+ ÿ+ÿ)ý&"ô#.ì!;æ Iâ UÞ `Ú!jÖ!tÓ!|Ð!„Ï"ŒÍ"“Ë"›É"£È#¬Æ#¶Ä#ÄÂ$Û¾%î»%þ¸%ÿ¶%ÿµ%ÿµ%ÿµ%ÿµ%ÿµ%ÿÿ, ÿ-ÿ.ÿ1ÿ1 ý/ñ+ç)%ß(3Ø(BÑ*OÍ+ZÉ+eÇ+nÄ,vÂ,~À,†¾,޽,–»,ž¹,§¸,±¶,¿µ-ѱ-ê®.û«.ÿ©.ÿ¨.ÿ¨-ÿ¨-ÿ¨-ÿ¨-ÿÿ/ÿ1ÿ5ö7ê6ç3ä/Ù.Ï1,É3<Ä4IÀ5U¼5_º5h·5pµ4x³4€±4ˆ°4®4™¬4¢«4¬ ©4¹ §4Ê ¥5å ¡5ø Ÿ5ÿ 5ÿ 5ÿ œ5ÿ œ5ÿ œ5ÿ œ5ÿ ÿ3ÿ5ö:å>Ü@Ô=Ò7 Ë8Ã:&½=6¸>D´>P±=Z®=c¬=k©èGÕPÆV¼X´Y­V§S¡TœV%˜W4”W@WJVSŠU[ ‡Tc „Tj‚Sr€Rz}Rƒ{QŽxP™vP¦tPµsPÉqPèpQüpQÿpQÿpQÿqPÿqPÿqPÿõ@äKÏTÁZ·]¯^§[¡X›Y–["’\1Ž\=Š\G‡[PƒZX Y` ~Yg{XoyWwvV€tV‹rU–oU£mT²lTÆjUæjUûjUÿjUÿjUÿkUÿkUÿkUÿòCßOËX½]³a«b¢`›\•^`Œa.ˆa:„`E`N~_V {^] x]ev\ls\tp[}nZˆkZ”iY¡gY°eYÃdYãdYúdYÿdYÿeYÿeYÿeYÿeYÿïFÚRÆ[ºa°e¦fc•ab‹d‡e+ƒe7eB|dKxcSuc[ sbbpajm`rk`{h_†f^‘c^Ÿa]®`]Á_]á_]ø_]ÿ_]ÿ`]ÿ`]ÿ`]ÿ`]ÿëJÔVÃ^¶e¬i¢i˜ge‰f …hi(~j5zi?viIshQpgY mg` kfghepedycdƒ`c^b\b¬Zb¿YbßYb÷ZbÿZaÿ[aÿ[aÿ[aÿ[aÿçMÏY¿b³h©mžm“k‰iƒk m|n%xn2un=qnFnmOklV hl^ ekecjm`iv]i[hXg›VgªUg½TgÜTgöTfÿUfÿUeÿVeÿVeÿVeÿâQÊ]»f¯l¦q™pŽoƒn}pxrus!rs/os:lsDirLfrTcq[ `pc ]pk[otXnUn‹Sm™Qm¨Om»NmÙNlôOkÿOkÿPjÿPjÿPjÿPjÿÝUÅa·j¬q¢u”t‰t|svuqwoxly+iy7fy@cyI`xQ]wX [w` XvhUuqRu|PtˆMt—Ks¦Is¹HsÕIróIqÿJqÿJpÿKpÿKpÿKpÿÔZÀf³o¨vyx„xwyo|j} g~d&b€2_€=\€FZNWUT~] R}e O}oL|yJ|†G{”E{¤D{·C{ÒCzòCyÿCxÿDwÿDvÿDvÿDvÿÍ_»k®t¤|—~Š}~rfƒa„^†\‡!Z‡.X‡8U‡BS‡JP‡RN†ZK†b I…l F…w C„ƒA„’?„¢=„µ<„Ï<‚ð<ÿ=€ÿ=ÿ=~ÿ=~ÿ=~ÿÅfµqª{Ÿ‚’‚…‚yƒm†_ŠXTŽRP'O3M=KEINFVD_Bh?s =Ž€ :Ž 8Ž  7޳6ŽÌ6ï5‹ÿ5‰ÿ5ˆÿ6‡ÿ6‡ÿ6‡ÿ¾m°y¥‚™‡ŒˆˆrŠfZ‘P•I— G˜E˜ D™+C™6Aš@@šH>šQ<šZ:šd7šo5™}3™Œ1™/™°.™Ê.˜í.–ÿ -”ÿ -“ÿ -’ÿ -’ÿ -’ÿ ¶uªžˆ“†Žxk’_•T™I@ :¢ 8£7£"6¤-5¤74¤A3¥K1¥T0¥^.¥j,¥x*¥ˆ(¥š'¥­&¥Æ&¤ë%¢ÿ% ÿ$Ÿÿ$žÿ$žÿ$žÿ¯~£ˆ—Ž“~•p˜c›WŸL¢B¦8©/¬*®)®(¯#'¯-&°7%°A$°K#±V"±c!±q±‚²”²©²Á±ç¯þ­ÿ¬ÿ«ÿ«ÿ«ÿ¨ˆ›‘”„švŸh¢[¥O©D­9°/³&¶¹»»¼ ¼*½5½@¾K¾X¾g¿x¿ŒÀ¢ÀºÀá½û¼ÿºÿºÿºÿºÿŸ”•‡›y¡k§^¬R±E´:¶/¹%¼¿ÃÆ Ê ÊÊÊ'Ê2Ë>ËKÌZÌjÌ~̫̔ÍÈÌíÌÿËÿÊÿÊÿÊÿ—–Šœ|£nª`°R¶E¹9¼.¿#ÃÆÊ ÍÑÔ ÔÕÖØ'Ù1Û>ÜKÝ[ÞnބߛߴÞÙß÷ßÿßÿßÿßÿ¥p¬a³SºE¿8Â,Æ!ÉÍÑ ÕÚÞàá âäåç$é/ë<íKî]îqï‰ð¢ð¼ðãïùðÿðÿðÿ¥r­cµT½FÄ7È*ÌÐÕÚÞâæéêìîï ñóõ ø+û9ýJþ^ÿtÿÿ¦ÿÀÿáÿõÿõÿõt®e·VÀGÈ8Í*ÒØÝ âæéìðóôöøúýÿ ÿÿÿ(ÿ7ÿJÿ^ÿvÿÿ¦ÿºÿÑÿÑÿÑÿ$ÿ"ÿ !ÿ$ÿ)ÿ2ÿ>ÿLÿYÿeÿpÿzÿ„ÿŒÿ’ÿ™ÿŸÿ¥ÿ«ÿ²ÿºÿÅÿÓÿçÿôÿÿþÿÿÿþÿþÿþÿþÿþÿÿ!ÿÿ ÿÿ#ÿ-ÿ:ÿHÿUÿaÿlÿvÿÿ‡ÿŽÿ•ÿ›ÿ¡ÿ§þ®ý¶üÀûÍùâøð÷üöÿõÿõÿõÿõÿõÿõÿÿÿÿÿ ÿÿ)ÿ6ÿCÿPÿ\ÿgÿqÿzþƒüŠú‘ù—ø÷£õªô²ò»ñÈïÜîìíúëÿêÿêÿêÿêÿêÿêÿÿÿÿÿÿ ÿ$ÿ0ÿ>ÿKÿWÿbüløuõ~ò…ñŒï“î™ì ë¦é®ç·æÃäÔâéá÷ßÿÝÿÝÿÝÿÝÿÝÿÝÿÿÿÿÿÿÿÿ +ÿ 8ÿEûQ÷\òfîpêxç€æ‡äŽâ•áœß£Ý«Û´ØÀÖÐÓçÐøÎ ÿÌ ÿË ÿË ÿË ÿË ÿË ÿÿÿ ÿÿ ÿÿÿ$ú0ó>î Jé Vå aâ jÞ sÛ {Ù ƒÖ ŠÔ ‘Ò ™Ð Ï©Í³Ë¿ÊÐÆéÂù¿ÿ½ÿ¼ÿ¼ÿ¼ÿ»ÿ»ÿÿ" ÿ!ÿ ÿ!ÿ ÿöì(å6ßCÙOÓZÐdÍmËuÉ}DžŌĔœÀ¥¾¯½»»˸å´ö²ÿ°ÿ¯ÿ®ÿ®ÿ®ÿ®ÿÿ&ÿ%ÿ&û'ñ%ð! èÞÔ-Í<ÈIÅ UÁ!_¿"h¼"pº#x¹#·#‡µ#´$—²$ ±$ª¯$¶­%Æ«%ߨ&ó¥&ÿ£&ÿ¢&ÿ¡&ÿ¡&ÿ¡&ÿ¡&ÿÿ)ÿ(ö-ç0ß/Ù+Ö" Î#Æ&'À(6»*D¸+Oµ,Y²,b°,j®-r¬-zª-©-Ч-’¥-›¤-¥¢-± -ÀŸ-Øœ.ï™.ÿ—/ÿ–/ÿ•.ÿ•.ÿ•.ÿ•.ÿÿ,ÿ.ê5Ý9Ñ9Ê6Ç/Á-º0!´21°4>¬5J©5T§5]¤5e¢5m 5tŸ5|5„›5š4—˜4¡–4­”5»“5Ð5ìŽ6þŒ6ÿ‹6ÿ‹6ÿŠ5ÿŠ5ÿŠ5ÿÿ/ò4â<ÒAÇBÀ@»:¶6°9ª;,¦<:£=FŸ=P=Yš=a˜=h– ¦@¢B'žC5šDB—DL”DU‘C]CdCk‹Bs‰B{‡B„ …AŽ ƒA™ A¥ A³~AÆ|AäzBù yBÿ xBÿ xBÿ xBÿ xAÿ xAÿ ö6æ@ÑHÃM¹N±M©I¤EŸFšH#–I2’J>JHŒJQŠIY‡I`…IhƒHoHw G€ }GŠ zG•xF¢vF°uFÂsFàrG÷qGÿqGÿ qGÿ qGÿ qFÿ qFÿ ó9àDÌL¾Q´SªR¢NJ—K“M O.ŒO:ˆOE…ONƒOV€N]~Nd|Ml yMt wL} uL‡sL’qKŸoK­mK¿lKÜkLõjLÿjLÿjKÿ jKÿ jKÿ jKÿ ð=ÛHÇPºU°X¥VœS—O‘PŒR‰T+…T7‚TBTK|TSzSZxSbuRi sRq qQz nQ„lPjPœhP«fP¼ePØdPódPÿdPÿdPÿeOÿ eOÿ eOÿ ìAÔLÃT¶Y¬\ Z—W‘T‹U †WƒX'€Y4}Y?zYHwXPtXXrW_oWf mVn kVw hUfUdTšbT©`Tº_TÓ^Tò^Tÿ_Tÿ_Tÿ_Sÿ _Sÿ _Sÿ çDÏP¿X³]¨_œ]’[‹X…Z [}\$z]1w]<t]Fq]No\Ul\]j\d h[l eZu cZaY‹^Y˜\X§[X¸YYÐYXðYXÿZXÿZXÿZWÿ ZWÿ ZWÿ ãHËS»[°a¤b—aŽ_…\^{_xa!ub.rb9obClaKjaSgaZe`b c`j `_s ^^}[^‰Y]–W]¥U]¶T]ÎT]îT]ÿU\ÿU\ÿU[ÿV[ÿ V[ÿ ÞLÇV¸_­d e“d‰caybudreof+lg7jg@gfIefQbeX`e`]dg [dp Yc{Vc†Tb”Rb£Pb´ObÌObíOaÿOaÿP`ÿP`ÿP`ÿ P`ÿ ÙOÃZ´c©i›hg„gyesgoiljik(gl4dl=blF_kN]kVZj]Xje Vin Six Qh„Nh’Lg¡Kg²IgÉIgëIfÿJfÿJeÿKeÿ Kdÿ Kdÿ ÑT¾^±g¦m—lŠkkskmmhn epbq$`q0^q:\qCYqKWqSUpZRpbPpk Nou Ko‚ InGnŸEn°DnÇCmêDlÿDkÿEkÿ Ejÿ Ejÿ Ejÿ ËXºc­l¡q’p…ozonpes`u]v[wYx+Wx6Ux?SxHQxOOwWLw_JwhHvs Ev Cu Au?u®>uÅ=uè>sý >rÿ >qÿ ?qÿ ?pÿ ?pÿ Å^µi©qœut€tutiv^yX|T}R~Q&O1M€;L€CJ€KHTF\CeAp?~|<~Š :~š 9~¬ 7~à 7}æ 7{ü 7zÿ 7yÿ 8xÿ 8xÿ 8xÿ ¾d°o¥x–y‡y{ypzd|X€PƒK… H†G‡ Eˆ+Dˆ5Cˆ>A‰G@‰O>ˆX<ˆa:ˆl7ˆx5ˆ‡3ˆ˜2‡ª0ˆÀ0‡ä0…û0ƒÿ0‚ÿ0ÿ0ÿ0ÿ·kªv ~‚~vj€^ƒS‡J‹AŽ=;:‘#9‘-8’77’@6’I4“R3“\1“g/“t-’ƒ+’”*’§(’½(’á'ú'Žÿ'ÿ'Œÿ'Œÿ'Œÿ±t¥~™…Š„}„o…cˆX‹MC“:—2š.›-›,œ$+œ.*8)A(K'žU&ža%žn#ž~"ž ž£ž¹žÝœøšÿ™ÿ—ÿ—ÿ—ÿª}ž…“‹…Šu‹hŽ[‘P•F™;2 *£"¦ §§¨$¨-¨7©A©L©Xªfªvª‰ªž«´«Ó¨õ§ÿ¥ÿ¥ÿ¤ÿ¤ÿ£†—Œ‘}’m•`˜TœH >¤4§*«!®±³µµµ! µ+ µ6 ¶A ¶N ¶\ ¶l¶¶”¶ª¶Å¶êµÿ´ÿ³ÿ ²ÿ ²ÿš“„˜tœe W¤K¨@¬5°*³!µ¸» ¾À ÀÁÁ"Â+Â6ÃBÃPÄ_ÄqćÄĵÄÚÄöÃÿÃÿÃÿÃÿ“”‡šx j¦\¬O±Aµ5·)º½Àà ÆÊÌÌ ÍÎÎ!Ð*Ñ5ÓCÔRÔcÕxÕÕ§ÖÂÖéÖýÖÿÖÿÖÿŠ›{¢l©^°P¶Bº4½(ÁÄÇ ËÎÒ×ÙÚÜ Ýßáã'å3çBèTègé~é—ê¯êÎëïëþëÿëÿ}£n«_²QºBÀ4Ã'ÇËÏ ÓØÝáäåçéëí ïñô$÷1ùAúUújû„ûü¶üÒýíýôýôq¬aµR½DÄ4É&ÍÒØÝáåèìïñóõ÷ùûþÿÿ!ÿ/ÿAÿVÿmÿ‡ÿ ÿ¶ÿÊÿÔÿÔÿ ÿÿÿ ÿ%ÿ.ÿ;ÿIÿVÿbÿmÿvÿÿ‡ÿŽÿ”ÿšÿ ÿ¦ÿ­ÿµÿ¾ÿËÿáÿðþýýÿýÿýÿýÿüÿùÿùÿÿ ÿ ÿÿÿÿ*ÿ7ÿEÿQÿ^ÿhÿrÿzÿ‚ÿ‰ÿÿ–ÿœþ¢ü©û°ù¹øÆöÙõëôùóÿòÿóÿóÿóÿóÿóÿÿÿÿÿÿÿ%ÿ2ÿ@ÿLÿYÿcþmüuú}ù„÷‹ö‘ô—óžò¤ð¬î´íÀëÏéæèõæÿçÿæÿåÿåÿåÿåÿÿÿÿ ÿÿÿ ÿ,ÿ:ÿGúS÷^ôgñpïxíë†êŒè“ç™å ã§á°ßºÝÉÛàØð×þÕÿÔÿÓÿÓÿÓÿÓÿÿÿ ÿ ÿ ÿ ÿÿ&ý3ô@ïMëXèaåjâràzހ܇ڎؕԜңЬζÌÄÊÙÈíÇûÅÿÄÿÃÿÄÿÄÿÄÿÿ ÿÿÿÿ ÿ üñ+ç9âFÞQÚ[ÕdÒlÏtÍ{Ë‚Ê‰ÈÆ˜Ä Â©Á´¿Á½Õ» ì¸ ý¶ ÿµ ÿ´ ÿ´ ÿ´ ÿ´ ÿÿÿÿÿûúî ã "Ú 0Ó >Î JÊ UÇ ^Å gÂoÁv¿~½…¼º•¸·§µ²³À²Õ®î«þ©ÿ§ÿ§ÿ¦ÿ¦ÿ¦ÿÿÿúëãßÞ ÓË(Å7ÀD¼O¹Y·a´i³q±x¯€®ˆ¬«™©£§®¦¼¤Ï¡êžüœÿ›ÿšÿšÿ™ÿ™ÿÿ"ÿ!ì'à*Ô)Í$ÊĽ"·1³ >¯!I­"Sª#\¨$d¦$l¤$s£$z¡%‚ %‹ž%”%ž›&ª™&·˜&É•'æ’'ù(ÿ(ÿŽ'ÿŽ'ÿŽ'ÿŽ'ÿÿ&ò)ã1Ò4È4À0»)¸#±&¬(+¨*8¤+D¡,NŸ-W-_›-g™-n˜.u–.}”.†“.‘.š.¦.³Œ.ÅŠ/á‡/ö…/ÿ„/ÿ„/ÿƒ/ÿƒ/ÿƒ/ÿû)ë1Ù8É<¿<¶9°2¬- §/¢1&ž34š4@˜5J•5S“5[‘5b5i5qŒ5yŠ5‚ˆ5‹†5–„5¢‚5¯5À6Ü}6ô{6ÿ{6ÿz6ÿz6ÿz5ÿz5ÿõ-ä7Ð?ÂC·D­@§:£67™9"•:/’<;hÞ >g÷ >fÿ?eÿ?eÿ?dÿ?dÿÃW³a§i–h‡g{gqgeh\jXlTnRoPo$Np.Mp8KqAJqIHqQFqYDpbBpl@px>p†¶0¹$¼¿ ÅÉÌÐÑÒÓÕ ×ÚÜ!ß,á:âJã]ärä‹å¥åÀåæåøåÿåÿz¡k©\¯M¶?¼0¿#ÃÇÊÎÑÖÜßàâäæè éìîñ+ô:õMöa÷yø“ø­ùÆùäùóùómª^²Oº@Á1Å"ÉÎ ÒØÝáäèëíïñóöøú ýÿÿ)ÿ;ÿOÿfÿÿ™ÿ¯ÿÃÿÖÿÖÿÿÿÿÿ"ÿ+ÿ8ÿFÿSÿ^ÿiÿrÿzÿ‚ÿ‰ÿÿ•ÿ›ÿ¡ÿ¨ÿ¯ÿ¹ÿÅÿÙþìýûûÿûÿûÿúÿôÿðÿðÿÿÿÿÿÿÿ&ÿ4ÿBÿNÿZÿdÿmÿuÿ}ÿ„ÿŠýü–úù£ø«÷´õ¿ôÎóæñöðÿïÿïÿîÿîÿêÿêÿÿ ÿÿÿÿÿ"ÿ.ÿ<ÿIÿTþ_ûhùp÷xõó…ò‹ð’ï˜íŸì¦ê®è¹çÇåÞãðâþàÿàÿáÿáÿáÿáÿÿ ÿ ÿ ÿ ÿÿÿ(ü6ùCöNòYïbìkêrèyæ€ä†âŒá“ߚݡ۪شÕÀÒÓÐêÎúÍÿÍÿÍÿÌÿÌÿÌÿÿ ÿ ÿÿÿÿö"ð/ì<éHåSá\ÞeÛl×sÔzҀЇΎ̕ÊȥƯĻÂËÀå¾õ½ÿ¼ÿ¼ÿ¼ÿ¼ÿ¼ÿÿÿÿ ÿÿ øéã(Þ5ÙAÓLÏVË_ÉfÆnÄtÂ{Á‚¿‰½¼˜º¡¸«¶·´Ç²à±ò¯ÿ®ÿ­ÿ­ÿ­ÿ­ÿÿÿÿò ê é ÝÔÍ-È:ÄEÀP½Y»a¹h·oµv´}²„±Œ¯•­ ž« ¨ª µ¨ Ŧ ߤ ô¢ÿ ÿŸÿŸÿŸÿŸÿÿÿïäÛÒÏ ÈÁ $¼ 2· >´I±S¯[­c«j©q¨x¦€¥ˆ£‘¡› ¦ž³œÛÞ—ô•ÿ”ÿ“ÿ’ÿ’ÿ’ÿÿôå#Õ%Ê$¾»´¯+«8§C¥M¢V ]žel›sš{˜ƒ—•—“¢’¯¿ØŒ ñ‰ ÿˆ ÿ‡ ÿ‡ ÿ† ÿ† ÿúë&Ú-Ê0¾.µ(°"® ¨£&Ÿ!3œ">™#H—$Q•$Y“%`’%g&nŽ&v&‹&ˆŠ'“ˆ'ž†'«„'»ƒ(Ñ€(î~)ÿ})ÿ|(ÿ|(ÿ|(ÿ|(ÿõ$ã.Ï5Á8´6«1¥,¢&ž&™(!•*.’+9,D-L‹-T‰.\‡.c†.j„.r‚.z/„/}/š{/§z/·x/Ìv0êu0þs0ÿs0ÿs/ÿs/ÿs/ÿð*Ü5Ç;º?¬<¢8œ3˜/•.0Œ2)‰35†4?„5I‚5Q€5X~5_}5f{6ny5vx5€v5‹t5—r6¤p6´o6Èm6çl6ük6ÿk6ÿj6ÿj5ÿj5ÿê0Ó:ÂA³C¥A›>•:6Œ5 ˆ7„8%:1;<|;Ez"z?.x@8uABsAJrAQpAYnA`lAgjAphAygA„eA‘cAŸaA®`AÂ^Aâ^Aù]Aÿ]@ÿ]@ÿ]@ÿ]@ÿß9ÈC¹J©K›IGˆDƒA~AzBvCtE*qE5oF?mFGkFOjFVhF]fFedFmbFv`F‚^FŽ\Eœ[E¬YF¿XFßXF÷WEÿWEÿWDÿXDÿXDÿÚ=ÄGµN¤N–L‹KƒI}ExFtGpHnI'kJ2jK<hKDfKLdKSbKZ`Kb_Kj]Kt[JYJŒWJšUJªTJ½SJÜRJöRJÿRIÿRIÿRHÿSHÿÔAÀK²Q P’O‡N~LxHrJnK kMhN$fN/dO9bOBaPI_PQ]PX[O`YOhWOrUO}SOŠRN˜PN¨NN»MNÙMNõMNÿMMÿMMÿNLÿNLÿÎD¼N®TœSŽRƒQzPrMlOhP eQcR!aS,_S6]T?[TGZTNXTVVT]TTfRSoPS{NSˆLS—KS§ISºHSÕHRóHRÿHQÿIQÿIPÿIPÿÊH¹RªW˜VŠUTvSlQgSbT_V]W[W)YX3XX<VYDUYLSYSQY[OXdMXmKXxIX†GW•EW¥DW¸CXÒCWòCVÿCUÿDUÿDTÿDTÿÆLµV¥Z”Y†X{XqWfVaX]YYZW[U\&S]0R]9Q^AO^IM^QL^XJ^aH]kF]vD]ƒB]’@]£?]¶>]Ð=\ñ>[ÿ>Zÿ>Zÿ>Yÿ?YÿÁP±Z¡]\‚[v[m[a[[]V^R` PaNb"Mb,Lc5Jc>IcFGcNFcVDc^Bch@cs>co=o"ÿJÿVÿ`ÿhÿpÿxý~ü…ú‹ù‘ø˜÷žõ¦ô®ò¹ñÇïàîòìÿìÿìÿëÿåÿàÿÞÿÿÿÿ ÿ ÿÿÿ+ÿ8ÿEþPûZøcõkórñyïî†ìŒê’é™ç æ©ä³áÀàÓÞëÜûÛÿÚÿÚÿÙÿÔÿÒÿÿ ÿ ÿÿ ÿÿû%ø2õ?òJíTê]çeälâsàzހ܆ÚהԛҤϭ͹ËÉÉäÈöÆÿÅÿÆÿÇÿÇÿÇÿÿ ÿÿÿÿ ôïê,å8âCÝNÙWÔ_ÑgÎmÌtÊzȀƇŎÖÁž¿¨½³ºÂ¹Û·ðµÿ¶ÿµÿµÿµÿµÿÿ ÿÿþöè àÙ$Ñ1Í<ÊGÆQÃYÀ`¾g¼nºt¹{·‚µ‰³‘²š°¤®¯¬½ªÐ¨ë§û¦ÿ¦ÿ¥ÿ¥ÿ¥ÿÿ ÿô ê âÚÏÈÂ)¾5»@·J´S²[°b®h¬o«u©}¨„¦¤–£ ¡«Ÿ¹Ìœèšù™ÿ˜ÿ—ÿ—ÿ—ÿÿ÷èÜÎÆ  ¼·!².®:«D¨M¦U¤ \¢ c  jŸ q xœ €š ‰™ “— ž• ª” ¸’ ÌêŽüŒÿ‹ÿ‹ÿ‹ÿŠÿûíÝ Ì!¿·³² « §&£3Ÿ>GšP˜W–^•e“l’s|…‹šŠ§ˆµ†É„ç‚û€ÿÿÿÿÿõä#Ï)À*³&ª"¥¤ ›!—-”8‘BKR‹Y‰`ˆg†o…wƒ€‚‹€—~ £} ²{ Åy!äw"ùv"ÿu"ÿt!ÿt!ÿt!ÿï!Û+Ç1¶1©. *›&˜!• !(‰#3‡$=…$Fƒ%N&U&\~&c|'k{'sy'|x(‡v(“t( r(¯q)Áo)àm)÷l)ÿk)ÿk)ÿk(ÿk(ÿè(Ð2À8®7¡5˜2’-Ž)‹' ‡(ƒ*#€+/~,9|,Bz-Jx.Qw.Xu.`s/gr/op/yo/ƒm/k/i/¬h0¾g0Ûe0õd0ÿc0ÿc/ÿc/ÿc/ÿâ.Ê8º=¨<š:‘7Š3†0ƒ. /{0x2+v35t3>r4Fp4No5Um5\l5dj5lh5ug5€e5Œc5ša6©`6»_6Ö]6ó]6ÿ\6ÿ\5ÿ\5ÿ\4ÿÜ3Å<´A¢@•>‹<„96{4w5t7q8'o92m9;k:Cj:Kh;Rg;Ye;ac;ib;r`;}^;Š\;—[;§Y;¸X;ÒW;ñV;ÿV;ÿV:ÿV:ÿV9ÿÔ7ÀA¯DCB…@~>y;t:q:m<k=$i>/g?8e?@d@Hb@Oa@W_@^]@f\@oZ@zX@‡V@•T@¤S@¶R@ÏQ@ïP@ÿP?ÿP?ÿQ>ÿQ>ÿÏ;½EªG™F‹EDyBt>o?k@ gAeB!cC+aC5_D>^DE]EM[ETYE\XEdVEmTExRE…QD“OD£ME´LEÌKEíKDÿKDÿKCÿLBÿLBÿÊ?¹H¦J•I‡H}GuEnBiCeD bE_F]G(\H2ZH;YICWIJVIRTIYSIaQIkOIvMI‚KI‘JI¡HI³GIÊFIìFHÿFHÿGGÿGFÿGFÿÆC¶L¢L‘L„KyJpIiFdG_I\JZKXL%VL/UM8SM@RMHQNOONWNN_LNiJNsHM€FMEMŸCM±BMÈAMêALÿALÿBKÿBJÿBJÿÂG³OžON€NuMlLcJ^LZMVNTORP"QQ,OQ5NR=MRELRMJRTIR]GRfERqCR~AR?R>R¯=RÆW{?\F>]O=]W;]a:]l8]y6]ˆ4]™3]«1]Â1\å1[ü1Zÿ1Yÿ2Yÿ2Xÿ¶T¤YX€XsWiW`XTYN[H]C_@`>a=a ;b):b29b:8cB7cK6cT4c]3ch1cv/c….c–,c©+c¿*cã*bû*`ÿ+_ÿ+_ÿ+^ÿ±Yž\‹\{[o[e[\\Q^I`Cb“K“Y“i“{’’¦‘¿‘åúÿÿÿw}uptbuUxI|?€4„+‰"‘”— ›žž"Ÿ+Ÿ5 B P _ q ‡ŸŸµžÚöÿœÿœÿ†}x|i|[NƒAˆ6Œ,‘#–šž ¡¤§©© ª«¬­"®+¯7¯E¯T¯f¯{®”®«®É®ï­ÿ­ÿ­ÿ„q„a‡S‹F9–.›# ¤¨ ¬¯²¶··¸¹ º»½!¾+À8ÀHÀZÁnÁ†Á ÁºÁãÀùÀÿÀÿyhY”Kš= 1¥%«¯³ ¸»¾ÁÄÅÆÇÈÊ ÌÎÐÓ+Õ:ÕLÖ`ØwؒجÙÉÙìÙûØÿp™`žQ¤Cª5°(¶º¾ ÁÅÈËÏÒÓÖØÛÝßâ åèì*í<íQîgïïœð·ðÓðìðôg¦X­I´:º*¾ÂÆÊÎÒÖÜàãäæèëíïòõ øüÿ,ÿ?ÿUÿnÿŠÿ¤ÿºÿÑÿáÿÿÿÿÿÿ%ÿ2ÿ?ÿKÿVÿ`ÿhÿpÿxÿÿ…ÿ‹ÿ‘ÿ˜ÿžþ¦ý®ü¹úÈùâøô÷ÿöÿöÿïÿçÿâÿÞÿÿÿÿÿÿÿ ÿ-ÿ:ÿFÿQÿ[ÿcþküsúyù€÷†öŒõ’ó™ò ð©î³íÁëÖêîéþçÿçÿåÿÝÿÕÿÑÿÿ ÿ ÿÿ ÿÿÿ(ÿ5ÿ@úKöUó^ñfîmìtëzé€ç†æä“â›à£Þ­Ü¹ÚÊ×æÔøÒÿÒÿÒÿÎÿÉÿÆÿÿÿÿÿÿ ü÷"ó.ï:ìEèOäXá`ÞgÛmÙtÕzӀчώ͕˞ɧdzÅÂÃÜÁñ¿ÿ¿ÿ¾ÿ¾ÿ½ÿ»ÿÿÿÿÿöîçá'Ý3Ù>ÓIÏRËYÈaÆgÄmÂsÀz¿€½ˆ»¹˜¸¢µ­³»±Î°ê¯ü­ÿ­ÿ®ÿ®ÿ®ÿÿÿýòèÞ ÓÌ!È,Ä8ÁB½KºS¸Z¶a´g²m°t¯z­‚¬Šª“¨¦¨¤µ¢Æ¡ãŸöžÿžÿžÿžÿžÿÿûîâÕËý¸%´1±;®E¬M©U§[¥b¤h¢n¡uŸ|ž…œŽš˜˜¤–°•Á“Ü’ò‘ÿÿÿÿÿý ðáΠ»· ±¬¨)¥4¢>ŸGO›V™\—c–i”p“x‘€ŠŽ•Œ¡Š®‰¾‡؆ ð„ ÿƒ ÿƒ ÿƒ ÿƒ ÿöæÒÀ³¬¨ ¦ ¢"™ .– 8” A’ J QŽ XŒ ^‹ e‰ lˆt†}…‡ƒ“Ÿ€­~¾}ÛzôxÿwÿwÿwÿwÿïÛ!Æ$´#¨  ›™˜“'Œ2‰<‡D…LƒSZ€`~h}o{xyƒxvœtªs»rÔoñnÿmÿmÿmÿmÿç Ð)¼+«*ž(–$ Œ ˆ„"-~7|@zHyOwUv\tcskq tp n!‹l!˜k!§i"¸h"Ïf"îe#ÿd#ÿd"ÿd"ÿd!ÿà&È/´1£0–.+‡(„$‚ ~ {"x#)u$3s%<q%Cp&Kn&Rm'Yk'`j'hi(qg({e(ˆd)•b)¤`)µ_)Ë^*ì\*ÿ\)ÿ\)ÿ\)ÿ\(ÿØ,Ã5­543†1€-|+y(v'r)p*%m+/k,8j,@h-Gg-Ne.Ud.]c.ea/n_/x^/„\/’Z/¡Y/²X0ÈV0éU0þU/ÿU/ÿU.ÿU.ÿÐ1½:¨9—8Š7€6z2u0r.n. k/i0!f1+d24c2=a3D`3K_4R]4Z\4bZ4kY5uW5‚U5T5ŸR5°Q5ÆP5çO5ýO5ÿO4ÿO4ÿO3ÿË6¸=£<’<…;{:t7o5l3h4 e5b6`7(^71]8:[8AZ9HY9PW9WV:_T:hS:sQ:O:N:L:®K:ÃJ:åI:üI9ÿI9ÿI8ÿJ8ÿÇ:³@ž?Ž?>w=p;j8f8b9_:\;Z;%Y<.W=7V=>T>FS>MR>UQ>]O?fM?pL?}J?‹H?›G?¬E?ÁD?ãD>ûD>ÿD=ÿD=ÿE<ÿÃ>¯CšBŠB}As@k?e<`<\>Y>W?U@"SA+RA4PB<OBCNBKMCRKCZJCdHCnGC{EC‰CC™BC«@CÀ?Cá?Cù?Bÿ?Aÿ@Aÿ@@ÿ¿AªE–E†EyDoDgB`?[AWBTC QDOENE(LF1KF9JGAIGHHGPFGXEGaCHlBHx@H‡>H—CKFBLMALV@L_>LjPC%cG#cQ"d\!didydŠdžd³dÎcñaÿ`ÿ`ÿ_ÿ¡YŒX{XmXbXYXPYG[>^7`1c*f$i !j jj k(k0k9kBlLlXleltl†lšl¯lÊkïiÿhÿhÿgÿ™]…]u\h\^\U\K^Ba9d2g+j$mps ttt!u)u2u;uFuRu_ un u u• uªtà tç sý qÿ qÿ pÿ‘bapadaZaObEe‡2'’—œ ¤¨«®¯°±³ ´µ¶¸$º1º@ºR»e»}º—º±ºÒºó¹ÿ¹ÿoƒ_†Q‹C6—*¢§ ¬°´·»¾¿ÀÁÃÄÅ ÇÊÍ$Î3ÏDÐXÐnшФÐÁÑæÑøÑÿgW”Iš;¡.§!­³¸¼ÀÃÆËÍÎÐÑÔÖÚÜ ßãæ$ç6èIé_êxë”ë¯ëÌìèìö_žP¤B«4²&¹¾ÂÅÊÍÑØÛßàâäæéëîñõ ùü%ý9þOÿgÿ‚ÿÿµÿËÿäÿÿÿÿÿÿ"ÿ/ÿ;ÿGÿRÿ[ÿdÿlÿsÿzÿ€ÿ†ÿŒþ“ý™û¡ú©ø´÷ÂöÚõñôÿóÿóÿéÿàÿØÿÓÿÿÿ ÿ ÿ ÿÿÿ*ÿ6ÿAÿLÿVþ_ûfùm÷tõzô€ò†ðï”í›ì¤ê®éºçÍåéäûãÿâÿÞÿÑÿÌÿÈÿÿ ÿÿÿÿÿÿ$ý0û;÷FóPïYì`êgçnætäzâ€à‡ÞŽÜ•ÚžÖ¨Ô³ÑÃÏßÎôÌÿËÿËÿÅÿ¿ÿ¼ÿÿÿÿÿý ÷ñí*ê5ç@âJÝRÙZÕaÒgÐmÎsÌzʀȇÆÄ˜Â¡À­¾»¼Ðºí¹þ¸ÿ¸ÿ·ÿ³ÿ°ÿÿÿÿùîåÞØ#Ò.Ï9ËCÇLÄTÁ[¿a¼g»m¹s·zµ´‰²’°›¯§¬´«Æ©ä§ø¦ÿ¦ÿ¥ÿ¥ÿ¤ÿÿÿõêÞРȾ(»3¹=µF²M°U­[¬aªg¨m§s¥z¤‚¢Œ –Ÿ¡®›¾™Ø—ñ–ÿ–ÿ—ÿ—ÿ—ÿÿõçÔÉÀ¸³¯!«,¨6¦?£G¡OŸU[›ašg˜n—u•}”†’‘œŽ©Œ¸‹Í‰ëˆýˆÿˆÿˆÿˆÿùé Ôà · °« ¦¢ž%›0˜9–A”I’PVŽ\b‹iŠpˆx‡…Œ„˜‚¥€´~È}ç|ù{ÿ{ÿ{ÿ{ÿñÞÅ´©¡ž › —“)3Š<ˆC†K…QƒW‚^€dl}t|~z ‰x –w £u ³s Çr æp ûp ÿo ÿo ÿo ÿèй©•Ž ‰ † #ƒ -€ 6~>|F{MySxZvauhsqq{p‡n”l¢k²iÇhçfýeÿeÿeÿeÿ߯$°$ #”!‹†ƒ‚|y(v1t:rAqHoOnVl]kdimhwfƒdcŸa¯`Ä^ä]û\ÿ\ÿ\ÿ\ÿÕ%½*¨)˜)Œ(ƒ%}"yxvro#m-k5i=hDfKeRc Yb aa i_!s]!\!Z"œY"¬W"ÀV#áU#ùT#ÿT"ÿT"ÿT"ÿÍ+¶.¢.’.…-|+v(r&o#m! j"g#e$)c$1b%9`&A_&H]&O\'V[']Y'fX(pV(|T(ŠS)™Q)ªP)¾O)ÞN)÷M)ÿM)ÿM(ÿN(ÿÈ0°2œ2Œ2€1v0p-k+h)f( c(`)^*%\+.[+6Y,=X,DW-LU-ST-[S-cQ.nP.zN.ˆL/—K/¨I/»H/ÛH/öG/ÿG.ÿG-ÿH-ÿÄ4«5—5‡5{5r4k2f/b._-\.Z/X0"V0+U13S1:R2BQ2IP2PN3XM3aK3kJ3wH4…G4•E4¦C4¹B4ÖB4ôB4ÿB3ÿB2ÿB2ÿÀ8§8“8ƒ8w8m7f6a3]2Y2W3 T4R5Q5(O60N68L7?K7FJ7NI8VG8_F8iD8uC8ƒA9“@9¤>9¸=9Ó<9ó<8ÿ=7ÿ=7ÿ=6ÿ»;¢;;;s;j:b9]7X6T7Q8 O9M9K:%J:-H;5G;<F=<=‘:=£9=¶8=Ñ7=ò7<ÿ8;ÿ8;ÿ8:ÿ¶=ž>‹>|>o>f=^=X;S:O;L<I=G>F?"D?*C?2B@:A@A@@I>AQ=AZÿ±@š@‡@xAlAb@[@T?N?J@FADBBC@C?D'>D/:EF9EN8FX6Fb5Fn3F|1F0FŸ.F³-FÌ-Fï-Eÿ.Dÿ.Cÿ.Cÿ¬C–CƒCtChC_CWCPCHCDEAF>G nJnWnenvnŠmŸm¶lÖlókÿjÿjÿ…ZtZfZ\YSYHZ?]6`.c&gjmqt w wwww$x-x7xCxPx^xox„x™w°vÍuðuÿtÿtÿ~_n_b^Y^M_Bb9e0h'lptw {~€ ‚ƒƒ&„0„;„H„W„h„|„“ƒª‚Åëþ€ÿ€ÿweid_cRdGgÀG¼NºU·[µa³g²m°s®z¬‚ª‹¨•§ ¥­£¾¡Û ôŸÿžÿŸÿÿ›ÿÿüîàО¹µ#³.°7­@ªH¨O¥U£[¢` fŸls›{š„˜Ž–š•§“·‘ÌìÿŽÿŽÿŽÿÿüïÛɽµ® ©¥¢' 1:šB˜I–O”U“[‘`gŽmu‹~‰‰ˆ•†¢…±ƒÄä€ùÿ€ÿ€ÿ€ÿôà Ç·¬¦ ›˜•!’*3<‹C‰I‡P†U„[ƒah€p~y|„{yx¬v¾uÝsôsÿsÿsÿsÿé Ϲ©ž— “ Œ‰†$ƒ.6>}D|KzQyWw]vdtlsuq€onšlªk»iÖhñhÿgÿgÿgÿßîž“‹†„ ƒ €|y(w0u8s @r Fp Lo Sm Yl aj ii rg ~f ‹d ™b ©a »` Ø^ó]ÿ]ÿ]ÿ]ÿÔ¹¤•‰{xxw sp"n+l3j;iBgIfOdVc]af`o^{\ˆ[—Y§WºVÕUóTÿTÿTÿTÿÊ"°"##"y!sonm jge'c/a7`>^E]K\RZZYbWlVwT…R”Q¤O·NÐMñLÿLÿMÿMÿÃ&ª'–'‡({'r&l$h!fdb_]#[+Z3X:WAV HT OS WQ!_P!iN!tM!‚K"‘I"¢H"´G"ÍF#ïE#ÿE"ÿF"ÿF!ÿ¼*¤+‘+‚,v+m*f)b&_$]"[!X"V#T$(S$0R%7P%>O&EN&LL&TK'\I'fH'qF'E(C( A(²@(Ë?(í?(ÿ?(ÿ@'ÿ@'ÿ·-Ÿ.Œ/}/q/h.a-]+Z(W'T' R(P)N)%M*,K*4J+;I+BH,IF,QE,ZD,dB-o@-}?-=-ž<-°:-È:-ë:-ÿ:-ÿ:,ÿ:,ÿ²0›1ˆ2y2m2d2]1X/U,Q,O- L-J.I/"G/*F01E08C0?B1GA1O@1W>1a=2m;2{92‹82œ62¯52Ç42é42ÿ51ÿ51ÿ50ÿ­3–4„5u5i5`5Y4T3P0L1I1G2E3C3B4'@4.?56>5==5D<6L:6U96_76k66x47‰27š17­/7Å/7è/6þ05ÿ05ÿ04ÿ©6’6€7r8f8]7V7P6K4G5D6A7 ?8>8<9$;9,:939::8:B6:J5:S4;]2;h0;v/;‡-;™,;¬*;Ã);æ*:ý*:ÿ+9ÿ,8ÿ¤8Ž9|:n:c:Z:S:M:F8B:?;<< :<8=7=!6>)4>03>72??1?G0?P.?Z-@f+@t)@„(@—&@ª%@Á$@å$?ü%>ÿ&=ÿ&=ÿŸ;Š<x=j=_=V=O=I=B=<>9?6A4A2B1B/C%.C--C4,D<+DD*DM(DX'Ec%Eq#E‚"E• E¨E¿DãDûCÿ Bÿ!Aÿš>…?t@g@\@S@L@F@>A8C4E0F-G +H*H)H"(I)'I1%I9$IA#JJ"JU JaJoJJ’J¦J½JàIúHÿGÿGÿ•B€BpCcCXCPCICBD;E5G0I+K&M $N"N!O O%O,O5O=PGPQP]PkP|PP¤PºPÞOøNÿMÿMÿE{FkF_GUGMGFG?G7J1L+N&P SU VVV V'V0V9WBWMWYWhWyWŒ W  W¶ VÔ Vô Uÿ TÿSÿˆIvJgJ[JQJJJCJ;L3N,Q&T!VY\^ ^^^"^* ^3 ^= ^H ^T^b^s^†^›^±]Ì]î\ÿ[ÿ[ÿNpNbNWNNNGN>O6Q.T'W!Z]`c f gggg$g-g7gBgNg\gmg€f•f¬eÇeëdüdÿcÿzRjS]RTRKRBS9U0X([!_beh kn ooopp'q0q;qHqVqfqyqp§oÁoçnümÿmÿsXeWZWQVFWÿHÿRÿZÿbÿiÿoÿuþ{üûˆù÷—õ óªò·ïÉíæìûëÿëÿÝÿÎÿÆÿÂÿÿÿÿÿÿ ÿÿ!ÿ,ÿ8ÿCýLùT÷\ôcòiðoîuì{ê‚è‰ç‘äšâ¤à°ÝÀÚÜØôÕÿÓÿËÿÁÿ»ÿ·ÿÿÿÿÿÿ ýùö'ô2ð<ìFèNäVá\ÞcÜhÙnÕtÒ{Ð‚ÍŠË“ÈÆ¨Ä·ÁÌÀë¾ÿ½ÿ½ÿ´ÿ®ÿ«ÿÿÿÿúòêåà!Ý+Û6Ó?ÎHÊOÇVÄ\ÂaÀg¾m¼sºz¸‚¶‹´–²¡°¯®Á­à«÷ªÿ©ÿ¦ÿ¡ÿŸÿÿÿ÷èÜÐ ÊÅÂ%¿/¼8¸AµH²O°U®[¬aªf¨l§s¥{£„¡ŽŸš§›¸šÐ™ï˜ÿ—ÿ–ÿ”ÿ’ÿÿöäÒÅ»µ°¬ª)¨2¥:¢B IžOœUšZ˜`–f•l“t’}‡Ž“Œ¡‹°ŠÅˆæ‡û†ÿ‡ÿ‡ÿ†ÿøåͽ³ª£ Ÿ›™#—,•4’<CŽIŒOŠT‰Z‡`†f„nƒw~›|ª{¼zÛxõxÿxÿxÿxÿíÑ»¬¢›–‘ ‹ˆ&†.„6‚=€C~I}O|Uz[yawiuqt|rˆq–o¥n¶mÎlîkÿkÿkÿkÿß Â ® ž “ Œˆ… | z(x0v8t>sDqJpPnVm]ldjmhwg„e’d¡c²aÉ`é`ü`ÿ`ÿ`ÿж¢“ˆ€| y x usp#n+l3j9i@gFfLeRcYba`j_t]\ZŸY°WÆV çV ûU ÿU ÿV ÿÆ­™Švqnm m j g e &c .b 5` <_ B^ H\ O[ VY ^XhVsU€SQŸP±NÈMêMýMÿMÿMÿ¼¥’ƒwoifddb_]![)Z1X8W>VETLSSQ[PeNpL}KŒIœG®FÅEèEþEÿEÿEÿµž!‹"|"q"h!b_\[Z WUT%R-Q4O;NBMHKPJXHbGmEzC‰Bš@¬?Â>å=ü>ÿ>ÿ>ÿ¯#˜$†%w&l&c%]$Y"VTS QNM"K)J1I7G>F EE MC UB _@!j?!w=!‡;!˜9!ª8"À7"ã7"û7"ÿ8!ÿ8!ÿª&”')s)g)_)X(T&Q#O"L"J"H"G#E$&D$.B$4A%;@%C?%J=&S<&\:&g9&u7'„5'–4'¨2'¾1'á1'ù2&ÿ2&ÿ3%ÿ¥)*},o,d-[,U+P*L(J&G'D' B(A(?)#>)+=)2<*9;*@9*H8+P6+Z5+e3+r1+‚0,”.,§,,¼+,Þ,,ø,+ÿ-*ÿ-*ÿ¡,‹-y.k/`/X/Q.L.H,E+A+?, =,;-:.!9.(7./6/65/>4/E3/N10X00c.0p,0€*0’)0¥'0º&0Ü&0÷'/ÿ(/ÿ(.ÿœ.‡0v1h2]2U2N1H1D0@/<0:1 71625233%23,13304;/4C-4L,4V*5a)5n'5~%5#5£"5¹!5Ù!4ö"4ÿ#3ÿ#2ÿ˜1ƒ3r4e4Z5Q5K4E4@4:374452607/7.7"-8)+81*88)9@(9I&9S%9_#9l!:| :Ž:¢:·9Õ9õ8ÿ8ÿ7ÿ“46n7a7W7N7H7B7<75829/:,; *<)<(=&=&%=.$=5#>=">F >P>\?i?y?Œ? ?µ>Ò>ó=ÿ<ÿ<ÿŽ7z8j9^:S:K:E:?:9:2<.>)@&A$B"B!B C#C*C2C:DCDMDYDgDwDŠDžD³DÐCòBÿBÿAÿ‰;v<f=Z=P=H=B=<=6>/@*B%D!FH IIII&I.J6J@JJJVJdJtJ‡ J› J° JÊ Iì Hÿ Gÿ Gÿƒ>q?b@V@M@E@?@9A2B+E&G!IKNPPPP!P)P1 P; QF QQ Q_ QoPP–P«PÅOèOûNÿMÿ}BkC]DRDJDCCüGøOôWñ]îcìiêoèuæ|äƒâ‹ß•ÜŸÙ«Õ»ÒÔÏòÍÿÌÿÅÿºÿ´ÿ°ÿÿÿÿÿÿùõó"ñ-í7ç@âIßPÛW×]ÔcÑhÏnÌuÊ|ȄŘÀ¤½²»Æ¹è¸ý·ÿ¶ÿ­ÿ§ÿ£ÿÿÿÿõëä ÞÙÓ&Ñ0Ì:ÈBÄJÀP½V»\¹a·gµm³t±|¯…­ªœ¨ª¦»¥Ú£õ£ÿ¢ÿžÿšÿ—ÿÿþïßÐÇÁ¼¹ ·*µ3°;­C«I¨O¦U¤Z£`¡fŸmtœ}šˆ˜”–¢”²’É‘ë‘ÿÿÿŒÿŠÿüìÙǺ±« §¤¡$ ,ž5›<˜C–I”O’TZ_f‹m‰vˆ€†Œ„š‚ª¾€à€ùÿÿÿ~ÿñØÂ³¨ ™•’Ž&.Š6‡=…C„I‚NTY~`|gzoyzw†u”t£rµrÏqñpÿpÿpÿqÿáİ¢—‘‹† ƒ!})|0y7x=vCtIsNrTpZobmjktj€hŽge¯eÆdèdýcÿcÿdÿ϶£”‰‚~{wurq#o+m2l8j>iDgIfOeVc]be`o_{]‰\™[ªY¿YáXøXÿXÿYÿ ª —‰}v q om kige&c-a3`9_?]E\K[RZYXbWlUxS†R–Q§P»OÛNôNÿNÿNÿ¸¡Žtlgec c a^\![(Y/X5V;UBTHSOQVP _N iM vK „I ”H ¦G ºF ØE óE ÿE ÿE ÿ°™‡xme_\ZZZ W U S $R +P 1O8N>MEKMJUH^GhEuC„A•@¦>»=Ü=ö=ÿ=ÿ>ÿ©’rg_YUSRR PNL J'I.H4G;EBDICRA[?e>r<:’8¤7¹5Ø5õ6ÿ6ÿ7ÿ£{ m!b!Z!TPMLKIGED$B*A1@8??=F<O:X9c7o5~32¢0·/Ó/ó/ÿ0ÿ0ÿˆ"w#i$^$V$P#K"H FEC A?>!<';.:59<7D6L4 V3 `1 m/ |-!Ž,! *!µ)!Ð)!ò)!ÿ* ÿ+ ÿ™"„%s&e'['S'L&G%D$B!?!=! ;!9"8"6#%5#+4$23$92$A0$J/%S-%^+%k*%z(%Œ&%Ÿ$%³#%Î#%ð$%ÿ%$ÿ%$ÿ”%€'o)b*W*O*I)D(@'=&:%7&5&4'2'1("0()/(0-)7,)?+)G))Q(*\&*i$*x#*Š!**²*Ì*ï)ÿ )ÿ!(ÿ(|*l+_,T,L,F,A+<+8*5*2+0+ .,-,,,*-&)--(-4'.<&.E$.O#.Z!/g/v/ˆ/›/°/Ê.í.ÿ-ÿ-ÿŒ+x-h.[/Q/I/C/>.9.4.0.-/+0 )1'1&1%2#$2*#21!39 3B3L3W3d4t4†4š3®3È3ì3ÿ2ÿ1ÿ‡.t/e1X1N2F2@1;16111+3(4%5#6 !6 77 7'8.868?8I9U9b9q9„9˜9­8Ç8ë8ÿ7ÿ6ÿƒ1p2a4U4K4D4=48434-5(7$9 :; <===#=+>3><>F>R>_>o> >• >© >Á =ä =û <ÿ ;ÿ}4k6]7Q7H7A7;75707*9%; =?AC CCCD'D/D9 DC DN D[ DjD|DC¥C½CàCöBÿAÿx8g9Y:N:E:>:8:3:-;'=!@BDFI J J J J#J+J4J>JIJVJeJwJ‹J¡I¹IÝIõHÿHÿr<b=U>J>B=<=6=/>)@#BEGJL O P QQQQ&Q/Q9QDRQR`QrQ‡QQµPØPõOÿOÿl@]AQAGA@@9@2A*C$FHKNQ SVW XXYZ!Z)Z3Z?ZLZZZlZY™Y±XÑXôWÿWÿeEXEMEED>D5E-G%JMPSV Y\^_ ` abcd#d-d8dEdTdfd{c“c­bÌaòaÿ`ÿ_JSJJICH9I/L'ORUY ]`cfhij k mnpq&q1p>pNp_psoo§nÆmïlÿlÿZOPNHM=N3Q)T X\` dhkortuwx z |}€(€5€EVk„~ }¾|é{ÿzÿVTNSBT7V,Z"_ch mrvz}€ƒ„†‡‰‹ ’’,’;’M‘b‘z—´ŽáŒûŒÿUYHZ;]/a$flr w}‚†‹Ž‘“•—™›Ÿ ¢¤¦!¦1¦C¥W¤p£Ž£«¡Ð õŸÿNa@d3i'nu| ƒ‰Ž“˜¡¤¥§©«­°²µ¸¼¼%¼7»Lºd¹·¢·À·ê·üFk9p+w† Ž•›¡¦«°³··º¼¿ÁÄÇÊÍÑÔÔ+Ô@ÓXÓtÓ’Ò°ÒÓÒò>y1€#ˆ‘ ™ §®³¸½ÂÆÊÊÍÏÒÕÙÝßãçëìí3îKïdï‚ðŸñ¹ñØÿÿÿÿ ÿÿÿÿ)ÿ4ÿ?ÿHÿPÿXÿ^ÿeýkûqùwø~ö…óñ—î¢ë¯èÀæàãøâÿÛÿËÿÁÿ¹ÿ´ÿÿÿÿÿÿ ÿÿÿ#ÿ.ý9ùBõJòRîXë^édæjäpâvß}݆Ù՚ѧζËÎÉðÇÿÅÿ»ÿ´ÿ­ÿ©ÿÿÿÿÿûö ñíì(é2ã;ÝDØKÓQÐXÍ]ËcÉhÆoÄvÂ~¿‡¼’ºŸ·­µÁ²ä±ý¯ÿ¬ÿ¥ÿ ÿœÿÿÿûîäÜÓÏË"É+Æ4Á=½DºK·QµV²\°a®g¬nªv¨¦Š£–¡¥Ÿ¶Ñœó›ÿœÿ–ÿ“ÿÿÿöçÓÆ½¸ ³±¯%®.©6¦=£D¡JŸOU›Zš`˜f–n”w’ŽŽœŒ­ŠÃ‰èˆÿ‰ÿ‡ÿ…ÿ‚ÿóã̼°§¡ž›™˜'–/“7‘=ŽCŒI‹N‰T‡Y…`„g‚o€z~†|”z¤y¸xØw÷xÿxÿwÿuÿæË·¨ž–‹ ˆ‡…!„)‚07}=|CzHyMwSvYtariqsomlj¯iÈhíiÿiÿiÿiÿÒ¸¥—†|ywvt#s+q1o7n=lCkHjNhTg[eccmbx`‡_–]¨]¾\ä\û\ÿ\ÿ\ÿª˜‰xtpm kihf%e,c2b8`=_C^I\O[VZ^XhWsUT‘R£Q·QÖQõQÿQÿRÿ¶Ÿ ~ s l heca _]\!['Y-X3V9U?TESKQRPZOdMoL}JIŸH²GÌGïFÿGÿGÿ¬ •ƒukc^[ Z Y WUSR#Q)O/N5M;LAJHIOHWFaEmCzB‹@œ?¯>È=ê=ü=ÿ>ÿ¤Ž|nd\VSQP P OMKI%H +G 1F 8D >C EB M@ U? _= k< y: Š8 œ7 ¯5 Ç5 é5 ý5 ÿ6 ÿ‡vi^VPMJIIH F D C!B(@.?5><=C;K:T8^6k4y2Š1œ/°-É-ì-ÿ.ÿ/ÿ—‚qdYQLGDCBA @><;%:+82796@4H3Q1\0h.w,ˆ*š(®'Ç&ê'ÿ(ÿ)ÿ‘}m`VNHC@>=;9865"3(2/160=.F-O+Y*f(t&†$™"­!Å è!þ"ÿ#ÿyi!\"R"J"D!?!< 9854 20/.%-,+3*;)C'M&W$d"r „—«Ãçýÿÿ‰ u"e#Y$O%G%A$<#8#5"3 0 .! ,!+!*"("#'")�%#8##A"$J!$U$a$p$‚$•$ª$Á$å$ü#ÿ#ÿ…"q$b&V'L'D'>'9&5&1%.$+%)%'&%&$'#' "''!(. (6(>(H)S)_)n)€)”)¨)À(ä(û(ÿ'ÿ€%n'_(S)I*B);)6)2(.(*(&)$*"+ +,,,$-+-3-<-E.P.].l.~.’.§ -½ -ß -ù,ÿ,ÿ|(j*[+P,F,?,9,4+/+++&,"./0 1112!2(20293C3N3[3i 3z 3Ž 3¢2¹2Ù2ô 1ÿ 1ÿw+f-X.M/C/<.6.1.-.).#02356 7778$8,85 8? 8J 8W 8e8v8Š8Ÿ7µ7Ó7ñ6ÿ6ÿs.b0T1I1A19141/0+0%2 368:< = = = =! =)=1>;>F>R>a>r>†=œ=²=Ð<ð<ÿ<ÿm2]3P4F4>47423-3'4"68:=? A C DDDD$D-D6DADND\DmDD˜C¯CÍBðBÿBÿh6X7L8C8;75606)7#9;=@B EGI IJKK K(K2K=LILWKhK}K”J¬JÊIïIÿIÿb:T;I;@;9:39,:%<?ADG ILOP P QRTT#T,T7TDTRTcTwTS¨RÆRíQÿQÿ\?O?E?>>7=/>'@ CFIL ORTWXY Z[]^_&_1^=^L^]^q]‰]£\Á[ëZÿZÿVDKCCBÑFÍLÊRÈXÅ]ÃcÀi¾p¼x¹·´š±©®¼¬áªü¨ÿ ÿ™ÿ–ÿ”ÿÿùòçÛÑÊ ÇÄÂ&¿/»7·?´E±K®Q¬Vª\¨a¦h£p¡yŸ„‘š ˜±–Ì•ñ”ÿ‘ÿ‹ÿˆÿ†ÿ÷ìÞɼ´¯ «©¨ §(¢0Ÿ8œ>šD˜J–O”U“Z‘ahq‹{‰ˆ‡—…¨ƒ¾ä€ÿ€ÿ|ÿ{ÿyÿé×Á±¦—” ’"Ž*‹1‰8‡>…CƒHNT~Z|azixsvuŽsŸq³pÐoöoÿoÿmÿlÿÚ¿¬ž“Œ…‚ ~}|$z+w1u7t=rBqHoMnSlZkbilgxf†d—bªaÂ`ëaÿaÿaÿ`ÿÅ­›ƒ|wrp nllk%i,g1f7d=cBbH`N_U]]\fZrY€WV£U¹TÞTûTÿUÿUÿ¶Ÿunifc a`_^ ]&[,Z2X7W=VCUISPRXQaOlNzLŠKœJ±IÎIóIÿIÿJÿª”‚tjc^[YW VTSR"Q(P-N3M8L>KEJLHTG]FhDuC…A˜@«@Å?ê?ÿ@ÿ@ÿ Š y l a Z U R PON LKJI#G)F/E4D:BAAH@P>Z=d<r:‚9”8§7¾6ã6ù6ÿ7ÿ˜ ƒre[SNJH G G EDBA @%>+=1<7;>:E9N7W6b4p2€1’0¥/».Ý.õ-ÿ.ÿ‘}l_UNHDA@@ @ > < ; 9 "8 (7 .6 55 ;3 C2 L0 V/ a- o+ * ’( ¥' »% Ý% õ& ÿ' ÿ‹wg[QIC?<:998 7542%1,02/:-B,K*U(a&o$€#“!§½à÷ÿ ÿ†scWME@;85432 1/-,"+)*0(7'?&H$S"_ m~‘¥»Þøÿÿ‚o_SJB<741/.,+)(' %&$-#4"= FQ]k|£ºÛöÿÿ}k\P G ? 941-+)'% $"! #*2:DN[iz¢¸ØõÿÿzgY!M"D"<"6"2!.!* ' $"  !!!"!"'"/"8#A#L#X#g#x#‹ #Ÿ #´ #Ð "ð "ÿ !ÿvd"V#K$A$:$4$/#+#(#$# #$%& &&''%','5(?(J(V (d (t (‡ (›'±'Ì'ì&þ&ÿq"`$S&H'?'7&1&-&)%%%"%'(*+ ,,,,",)-2 -; -F -R-`-p-ƒ-˜,®,É,ë+ü+ÿm%]'O(E)<)5)/(+(''#'(*,.01 1 1 1 1&2.272B2N2\2l22•1¬1Ç0ê0ü0ÿh)X*L+A,9,2+-+)*%* +,.024 7 7777"7*838>8J8X8h8|7’7©6Å6ê6ý5ÿc,T.H/>/6.0.+-'-"-/1357 :; <=>>>&>/>:>F>T>d>w>=§=Ã<é<ý;ÿ^0P1D2;241.0)/$02469 ; =@A B CDEF"F+F5FAFOF_FsEŠE¤DÀCèCþBÿX4K5A59524-3&4 58:= @ BEGHJ KLNOO%O/O<OJOZNmN…M L¼KçKþJÿS9G9>97817)7!9<?B EHJMOQRT UWYZY)Y6YDYTXgXWšV·UãTýTÿN=C=<<5;,<$>ADH KNQTWY[]^` bdgg"f.f<fMe`ewd“c±aÝ`ü_ÿIBAA:?0@&CFJN RVZ]`cegikmo ruwv&v5uFtYtos‹r©pÍo÷nÿFF@E5F*H LQV Z_chkoruwy{}€ƒ† ‰ŠŠ+‰<ˆO†f…„ ‚ÂðÿFK:L.O#SX^ diotx|„‡ˆ‹Ž“–™ ¡ ! 1žD[œv™–™µ–å•þ?R2U&Z`g mt{†‹”—™œŸ¡¤§ª­±µ ¸·&¶9µP´j²‰°ª®Ï­õ7\+ahp x€‡Ž•šŸ¤¨¬­°³µ¸»¿ÃÇËÑÑÐ.ÏEÍ_Ë~ɞȾÅé/i#py ‹“›¢¨®´¸½ÀÂÅÈËÎÑÖÛßäèëê#ê:éTçrå“ã³ãÔÿÿÿÿÿ ÿÿÿ!ÿ+ÿ5ÿ>ÿGÿNÿUü[úaøfömôsò{ï„íŽê™æ§ã¹ßÕÛ÷ÖÿÀÿ²ÿªÿ¥ÿ¢ÿÿÿþüüþ ÿÿý$ù.ô8ð@ìHéNæTâZß_ÜeØkÔrÐ{ͅʑǞîÀŽë»ÿ°ÿ¤ÿœÿ˜ÿ•ÿÿúôñòêçâáá(Ø1Ð9Ë@ÈGÅMÂS¿X½^»d¹k¶s´|±ˆ®•«¤¨¸¦Ü£ûŸÿ•ÿÿ‹ÿ‰ÿùïçßÏÈÁ ¿¼»!¹*´2±:®@«F¨L¦Q£V¡\Ÿcj›s™~–Œ”›’­ÇŽðÿ†ÿ€ÿ}ÿ|ÿíàÑ¿³ª¦¢ ¡ Ÿ#›+˜2•9“?‘DJŽOŒUŠ[ˆc†k„v‚‚€’~£|ºzáyÿwÿrÿpÿoÿÝ˶§”Ž‹ ‰ˆ‡‡%„,‚28}={CyHxNvTu[scqnozm‰lšj®iÌhögÿeÿdÿcÿÊ´¡“‰‚{xv utsr%p,n2l7j<iBhHfNeUc]bf`r^€]’[¥Z¾YéYÿYÿXÿXÿ¹¢ƒyqmif edcc a&`,^1\7[<ZBXHWOVWT`SlQyPŠOžN´MÚMûMÿMÿMÿª”‚ukd`]ZX WVVU!S'R,Q1O7N=MCLJJRI[HfFsE„D—C¬BÉBñBÿCÿCÿž‰xjaZURPN M LKJI"H'G-E2D8C>BEAM?V>a=n;~:‘9¦8¿8è8ÿ9ÿ9ÿ•€o b X Q LIGFD CBAA?#>)=.;4::9A8I7R6]4j3z2Œ1¡0¸/Þ/ù/ÿ0ÿŒ x h \RKE A ? >=< ;:98 6%5+40372>1F/P.Z-g+w*‰)(³'Ñ'ò'ÿ'ÿ† rcVME@<97 6 6 54210"/(..-4+<*D)N'Y&e$u#‡"› ° Ëíþÿ€m^RHA;74200 0 / - , * ) %( +' 2& :$ C# M! X e u ˆ œ ± Ê ë ü ÿ{iZNE=830-+**) (&%$##)!1 9BLXfv‰ž³ÎîþÿweWKB:40,)'&%# "!  '.6@JVdt‡œ± Ê ëþÿsaSH?72-)&$"  $+4=HTbr „ ˜ ­ Æ ç ú ÿo^PE<5/*&#! ")1;E Q ^ m €”ªÂæøÿk[MB:2-($! !!!!"& ". "7 "A "M"Z"i"|"‘"¨!À!å ø ÿgWJ!@!7"0!*!& "  !#$& & & & &"&*'3'='I'V'f'y'&¦&¿%ä%ù$ÿc T"G#=$4$.#(#$"!"!"#$&( * ++++,',0,:,E,S,c,v,Œ+¤+¾*ä*ú)ÿ_#P%D&:&2&+&&%#$$$%')+ -/ 00111#2,262B2O2_2r1‰1¢0¼0ä/û/ÿZ'L(@)7)/))(%'!&'(*,. 024 5 6788 8(829=9K9[8n8…7Ÿ7º6ä5ü5ÿU*H,=,4,-+(*$)*+-/ 1 468:; = >@@@$@.@9@G@V@i@€?›>·=ã<ü<ÿP/C/9/2/,-', -/13 6 8;=@ACE FHJJJ(J4IBIQIdH{H—G´FàEüDÿJ3?36301*0#1358 ;>ACFHJLNO QTUU"T.T<TKS^StRQ®P×OûNÿE7<756/4&57:= ADHJMPSUWX[] _bbb'b4aE`W`m_‰]§\ÌZøYÿA<:;49*:!<@C GKOSVY\_acegjm psr r-q=pOoen€mŸkÁiñhÿ?@9>.?$BFJ OTX]aehknqsux{~ …‡†$…4„F‚]v–~¶|çzÿ?D3E(HLR W]chmqvz~ƒ†‰‹Ž’•™ žž)œ<šR˜l–‹”ª’Ôú8K,N SY `gntz€„ŠŽ’•—š £§«¯´ ¸·µ0³F±`¯~¬ «Á©î1U$[aiqyˆ”šŸ¤¨©¬¯³µ¹½ÁÆËÑ ÓÑ%Ð;ÍTÊqȒųÃÞ)biq{„•£©¯´¹¼¾ÂÅÈÌÐÔÚßäêî íì/êIèeæ†ä¥âÆÿÿÿüüþÿÿÿ&ÿ0ÿ:ÿBÿIþPûVù\öbôhòoðvíê‰ç•ä£àµÛÐÕöÊÿ¶ÿ¨ÿŸÿšÿ–ÿÿûöóóö úýû ÷*ò3í;éCæIâOÞUÛ[Ö`ÒgÏnÌvɀƌš¿ª»Á¸é¶ÿ§ÿšÿ’ÿÿŠÿúñêççäà ÛÚÛ#Ñ,Ê4Æ;ÂB¿H¼NºS¸Y¶_³f±n®w¬ƒ©‘¦¡£µ Øžû•ÿ‹ÿ…ÿ€ÿ~ÿïãÚÓÆ¿¹·´´³%®-«4§;¤A¡FŸLQ›W™^—e•n“y‡Ž—Œ©‰Äˆï…ÿ|ÿvÿsÿrÿàÐÆ¶©¡™ ˜˜—”&‘-4Œ:Š?ˆE‡J…PƒV^€f~q|}yw u¶sßrÿnÿiÿgÿeÿ̾«“Š…‚€ € }&z-w3u8t>rCpIoOmVl^jhhug„e–d«bÉaö`ÿ\ÿ[ÿZÿ½©—‰~xsom lkkj h&f,e2c7b<`B_H]O\WZaYmW{VŽU¢S»RéRÿPÿOÿOÿ­˜†xngc`]\ [[[Z!X&V,T1S6R<QBOINQM[KfJtI…H™G±FØFüEÿEÿEÿŸ‰xlb[VSQOO NNML!J&I,H1G7E=DDCLBU@`?n>~=’<©;Ç;ó;ÿ;ÿ<ÿ“~naXQLIGED CCCB@"?'>,=2;8:?9G8P7[5h4x3Œ2¢1¼1ç1ÿ2ÿ3ÿ‰vfYPIC@><;: :9976#5(4.342;0C/L.W-d,s+‡*œ)µ)Ü)û)ÿ*ÿn_ S J B = 9 6543 2110/.$,*+0*7)?(I'T&`$o#‚"—!®!Ì!ó!ÿ"ÿ{ h Z NE=8 3 0 . - -, +*)('!&'%-$4#="F!Q]l”ªÅëÿÿu dUJ@93/,)' ' ' & %$"! $+2:DO\k}‘§¿äúÿq_QF=60+(%#"! !     " ) 1 9 C O \ k ~ ’ § ¾ à õ ÿm\NC:2-(%"  !(09DP] k |  ¥¼ßôÿiXK@70*&" %.7 @ K X gx£»ÝôÿeUH=4-(#   " ) 2 <GTcu‹¡¹ÝõÿaRE;2+%!   &/8DQ`rˆ ¹Þöÿ^OB8/)#     !#!+!5!@!N!]!o!† ž ¸ÞøÿZK?5-'" ! " # $%%& &(&2&=&J&Z&l&ƒ%œ%·$ß#ù#ÿUG ;N;`:w9’8°7Û6ü5ÿG);*2*+)%'!&'(*, /1468;=?A CEEE!E,D9DHD[CqBA«@Ò?ú>ÿB-8./-)+$**,. 1 47:<?ADFHJL NPPP'O4OCOUNjM†L¤JÊIøHÿ>251./). .137 :=@DGILOQSUXZ ]_^ ^,]<\N[cZ~XWÀUòTÿ:634-2$369=AEILPSVY[]`behk oon%m4mFk[juh”f¶débÿ8927(9;?DIMRVZ^behkmpsvy} …„‚,€>~T~k{ŠzªwÖuý8=,>"AFKQW\bfkotx{~€ƒ†Š‘–› ›!š3—I”b“ ŽÅŒó1D%HMSZahnty„‰‘“–™ ¤¨¬²· ·µ(²>°V¬sª”©´¥å*OT[ bjs{‚‰Ž”šŸ¤¦©­°³·»ÀÅËÑÕÓÐ2ÍKÊfƇ©ÁË"[b kt}‡—ž¤«±¶º¼ÀÄÈËÏÔÚàæëñðî'ì?ê[çzä›à»ÿûöóôö úÿÿ"ÿ,ÿ5ÿ=ÿEüLúR÷Xõ^ódñjîrìzé…å‘á Ý²ØÎÒöÁÿ­ÿžÿ–ÿÿŒÿúòìééìò ø÷õ%ð.ë7æ>âEÝKØPÓVÐ\ÍbÊjÈrÅ|ˆ¾–º¨·¿´è®ÿÿÿˆÿƒÿ€ÿðåÞÚÛÜØÑÑÒË'Å/À7½=ºD·IµO²U°[®a¬i©s§¤¡žž²›Õ™üŒÿ‚ÿ{ÿvÿtÿâÓÊǼ¶°¯ ¬­­ ¨(¤/ 6<›B™G—M•S“Y‘ajŒuŠƒˆ”†§ƒÂ‚ð|ÿsÿmÿjÿhÿÏÁ¹­ ˜”‘ Ž!‹(ˆ/†5„:‚@€E~K|RzYxbvltyr‰qo´mßlÿeÿ`ÿ^ÿ\ÿ¾± ’‰‚|zx wxwt!r'p-n3l8k>iDhJfQdZcdap_^“]©\È[÷WÿTÿRÿQÿ°Ÿtnjfec ccca!_'],\2Z7Y=WCVKUSS\RhPwO‰NŸMºLéKÿIÿGÿGÿ¢|ne^YWUTS STRQ!O&N+L1K7J=IDGLFVDaCpBA—@¯?×?ÿ>ÿ=ÿ>ÿ”ocYQMJHGG FFGED!B&A+@1>7=><G:P9[8i7z65§5Æ4õ4ÿ4ÿ5ÿˆteXOHC?=<<; ;;:97!6&5,42391A0K/V.c-s,ˆ, +»+ê+ÿ+ÿ,ÿl]QH@;74322 2 110/-",(+.*5)=(F'Q&^%n$‚#™#³"Þ"ÿ#ÿ$ÿweVKB:50-,+*) ))('&%$$*#1"9!C NZi|“¬Íöÿÿp_Q F = 5 0 + ( %$## " "!  &.6?JWfx¦Ãîÿÿk[ M B 9 1 , ' # !     #+3<GTcuŠ¢¼åþÿg W I>5.($           ! ( 0 : E R a s ˆ Ÿ · Û ö ÿc SF;2+%!        ' / 9 E Q ` q †  ´ Ò ñ ÿ_PC8/(#      $ , 6AN]o„œ´Ôóÿ\M@6-&!      !)3>KZl‚›´×õÿXI=3+$     '0;HXj€™´Ù÷ÿUF:0("     $-8FUg}—³ÛùÿQC7.&         !!*!5!B!R d z•±ÛúÿM?4+$  !# %&&&'''2'?&N&`&w%’$¯#Ú"û!ÿH<1("  !#%') , ....#...;.J-\-r,Ž+¬*Ô)û(ÿD 8!.!&!  !#%'),.03 5 6666)666E5W5m4‰2¨1Ï0ú/ÿ?$4$+$$#!  !# %(*-/2479;> @AA@%@1@@?R>g=‚<¢:Ç9ø8ÿ:(0()'#%#$%( *-0368;>@BEGJ MMLL+K:JLIaH|G›E¿CóBÿ6,-+')#'(*- 037:=@CFHKMPSVY [[Z%Y4XFWZUtT“RµPêOÿ30,.',-/2 6:?BFILORUXZ]`cgk lkk,i=gRfjd‰a«_Ü]ÿ13,1"259 =BGLPTX[_behknquy}‚ ‚€$~5|I{axvŸsÆp÷16&8;@ EKQV[`einrvy|~‚…‰Ž“˜œ›˜+–@’Y‘s•‹µˆè+> AG MT[ahnsy~ƒˆŒ’•™¡¥ª°·¸µ!²5¯Mªi¨ˆ¦¨¢Ñ#HNT\dmu|ƒ‰•› £¦©­±µ¹¾ÄÊÒÚ ÖÒ)ÎAÊ\Å|ÂÁ½U\enwˆ˜Ÿ¥­³¸º¾ÂÆÊÎÓÚàçíóôòï6ìQènäß±  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~€‚ƒ…†‡ˆŠ‹ŒŽ‘“”•–˜™šœžŸ¡¢£¤¦§¨ª«¬­¯°±³´µ¶¸¹º»½¾¿ÁÂÃÄÆÇÈÉËÌÍÏÐÑÒÔÕÖ×ÙÚÛÝÞßàâãäæçèéëìíîðñòôõö÷ùúûüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~€‚ƒ…†‡ˆŠ‹ŒŽ‘“”•–˜™šœžŸ¡¢£¤¦§¨ª«¬­¯°±³´µ¶¸¹º»½¾¿ÁÂÃÄÆÇÈÉËÌÍÏÐÑÒÔÕÖ×ÙÚÛÝÞßàâãäæçèéëìíîðñòôõö÷ùúûüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~€‚ƒ…†‡ˆŠ‹ŒŽ‘“”•–˜™šœžŸ¡¢£¤¦§¨ª«¬­¯°±³´µ¶¸¹º»½¾¿ÁÂÃÄÆÇÈÉËÌÍÏÐÑÒÔÕÖ×ÙÚÛÝÞßàâãäæçèéëìíîðñòôõö÷ùúûüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿmft1!  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ƒ†‰‹Ž’•—™›Ÿ¡£¥§¨ª¬­¯°²³µ¶·¹º»¼½¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÍÎÏÐÑÒÒÓÔÕÖÖרÙÙÚÛÛÜÝÝÞßßàááâããäååææçèèééêëëììíîîïïððñòòóóôôõöö÷÷øøùùúûûüüýýþþÿ  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ƒ†‰‹Ž’•—™›Ÿ¡£¥§¨ª¬­¯°²³µ¶·¹º»¼½¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÍÎÏÐÑÒÒÓÔÕÖÖרÙÙÚÛÛÜÝÝÞßßàááâããäååææçèèééêëëììíîîïïððñòòóóôôõöö÷÷øøùùúûûüüýýþþÿÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¥%ÿ¤0ÿ¦:ÿ±C#ÿ»K2ÿÁUEþÃ^ZòÄepäÂl†×ºp™Ì²tªÃ«v·½¦y·¡}˱‚Ó«š‰Ü¥—•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•楗•æÿ¦%ÿ¤0ÿ§:ÿ²C"ÿ¼K2ÿÃTEüÆ]ZñÈdqãÆj‡ÖÀo›Ë¸r¬Â±tº»­wÄ´©{Í«£Ô¢ž…Û™šŽá™šŽá™šŽá™šŽá™šŽá™šŽá™šŽá™šŽá™šŽá™šŽá™šŽá™šŽá™šŽá™šŽá™šŽá™šŽá™šŽáÿ¦%ÿ¥0ÿ¨:ÿ³C"ÿ¾K1ÿÅTEùÉ\[ïÍcqãÌiˆÕÆmœÉ¿p®½¶rº´°uëªxÊ¢¥|Ñ™¡Ø‰Ý‰Ý‰Ý‰Ý‰Ý‰Ý‰Ý‰Ý‰Ý‰Ý‰Ý‰Ý‰Ý‰Ý‰Ý‰Ý‰Ýÿ¦%ÿ¥0ÿª:ÿµC"ÿÀK1ýÈSEöÍ[[íÑaráÐg‰ÑËkÂÀn­¶·q¸¬±sÁ£¬vÈš¨yÎ’¤~Ô‰ …؉ …؉ …؉ …؉ …؉ …؉ …؉ …؉ …؉ …؉ …؉ …؉ …؉ …؉ …؉ …؉ …Øÿ§%ÿ¥0ÿ«:ÿ¶C!ÿÁK1úËRDóÑZZêÙ`rÞÖe‰ËÌjœ»Ám«¯¹p¶¥´r¾œ¯tÄ”«wÊ‹§{Ï„¤Ô„¤Ô„¤Ô„¤Ô„¤Ô„¤Ô„¤Ô„¤Ô„¤Ô„¤Ô„¤Ô„¤Ô„¤Ô„¤Ô„¤Ô„¤Ô„¤Ôÿ§%ÿ¦0ÿ­:ÿ¸B!þÄJ0÷ÎRDðÖXZçà^rÖÚdˆÄÍiš´Ãl¨¨»o²ž¶pº–²rÀŽ®vƆªzʧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧΧÎÿ¨%ÿ§0ÿ®9ÿºB ûÆJ/ôÓQCëÝWZãæ\qÎÛd‡½Ïi˜®Åk¥¢¾n¯˜¹o¶µq¼ˆ±tÁ®xÅ{¬}É{¬}É{¬}É{¬}É{¬}É{¬}É{¬}É{¬}É{¬}É{¬}É{¬}É{¬}É{¬}É{¬}É{¬}É{¬}É{¬}Éÿ¨$ÿ§0 ÿ°9ÿ½B÷ÉJ/ïØPBæãUYÜè[pÆÝc…¶Ñh•§Èk¡œÁmª“¼o±Š¹q¶„µt»}²w¿w°|Âw°|Âw°|Âw°|Âw°|Âw°|Âw°|Âw°|Âw°|Âw°|Âw°|Âw°|Âw°|Âw°|Âw°|Âw°|Âw°|Âÿ©$ÿ¨0 ÿ³9þÀBóÍJ-éÝO@áéSYÓê[o¿ßc‚¯Óg‘¡Ëj–Åm¥Ào«†½q°ºsµz·w¸tµ{»tµ{»tµ{»tµ{»tµ{»tµ{»tµ{»tµ{»tµ{»tµ{»tµ{»tµ{»tµ{»tµ{»tµ{»tµ{»tµ{»ÿª$ÿ©/ ÿ¶8ùÄAíÒI+âãM@ÛïRXÊíZm·áb¨Ög›Ïj—‘ÉmŸˆÅo¥‚Âq©{¿t­v½w°q»{³q»{³q»{³q»{³q»{³q»{³q»{³q»{³q»{³q»{³q»{³q»{³q»{³q»{³q»{³q»{³q»{³ÿ«$ÿ«/ ÿº8óÉAäÚI(ØèL@ÎóQWÀïYk®äaz Üg†”Ôk‹Ïn—„Ìpœ}És xÆu£sÄx¦nÂ|©nÂ|©nÂ|©nÂ|©nÂ|©nÂ|©nÂ|©nÂ|©nÂ|©nÂ|©nÂ|©nÂ|©nÂ|©nÂ|©nÂ|©nÂ|©nÂ|©ÿ­$ÿ°/ ûÀ8êÐAÚâF(ÌîLAÃùPUµóXf¥éat—ág~Ûk†…×oŒÔr‘zÑu”uÏx—qÍ{šlÌ~œlÌ~œlÌ~œlÌ~œlÌ~œlÌ~œlÌ~œlÌ~œlÌ~œlÌ~œlÌ~œlÌ~œlÌ~œlÌ~œlÌ~œlÌ~œlÌ~œÿ¯#ÿ¶- ñÈ6 ÝÜ=ÍêF*ÁöK@¶ÿOQª÷X`›ïakèht…äm{àq€yÞtƒuÜx†rÚ{‰nØ~‹kÖ‚kÖ‚kÖ‚kÖ‚kÖ‚kÖ‚kÖ‚kÖ‚kÖ‚kÖ‚kÖ‚kÖ‚kÖ‚kÖ‚kÖ‚kÖ‚kÖ‚ÿ±#ú¿,ãÔ/Îæ;ÁóE+´ÿI=¨ÿNLžýWX‘öaa†ñiiíonyêtruèwuqçzwnå}ykä€{iã„|iã„|iã„|iã„|iã„|iã„|iã„|iã„|iã„|iã„|iã„|iã„|iã„|iã„|iã„|iã„|iã„|ÿµ"ëË"Ðã'Âñ:´þB*¦ÿF9›ÿME’ÿVO†þbV~új\w÷p`sõucoóxemò|gjñhhð‚jfï…kfï…kfï…kfï…kfï…kfï…kfï…kfï…kfï…kfï…kfï…kfï…kfï…kfï…kfï…kfï…kfï…köÂÔßÂï& µü:§ÿ>'™ÿD3ÿK=…ÿUE|ÿaKuÿjOpÿpRlÿuTjþyVhý|WfüXdü‚Zcû†[cû†[cû†[cû†[cû†[cû†[cû†[cû†[cû†[cû†[cû†[cû†[cû†[cû†[cû†[cû†[cû†[ÔÏ Äíµû& ¨ÿ6™ÿ;#ŒÿA,€ÿJ4xÿS:qÿ_?lÿiChÿoEeÿtGcÿwHbÿ{Iaÿ~J_ÿJ^ÿ„K^ÿ„K^ÿ„K^ÿ„K^ÿ„K^ÿ„K^ÿ„K^ÿ„K^ÿ„K^ÿ„K^ÿ„K^ÿ„K^ÿ„K^ÿ„K^ÿ„K^ÿ„K^ÿ„KÿŸ"ÿ- ÿž8ÿ¨Aÿ±I+ÿ¶S<ÿ¸]Oû¶fcî´owâ¬u‰Ø¤{™Î›¦È“„±Âˆ¹¾ˆŒ¿ºƒ‘Å·—Ë´} Ï®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤ÑÿŸ"ÿ- ÿž8ÿ¨Aÿ±I+ÿ¶S<ÿ¸]Oû¶fcî´owâ¬u‰Ø¤{™Î›¦È“„±Âˆ¹¾ˆŒ¿ºƒ‘Å·—Ë´} Ï®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤ÑÿŸ"ÿ- ÿž8ÿ¨Aÿ±I+ÿ¶S<ÿ¸]Oû¶fcî´owâ¬u‰Ø¤{™Î›¦È“„±Âˆ¹¾ˆŒ¿ºƒ‘Å·—Ë´} Ï®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤ÑÿŸ"ÿ- ÿž8ÿ¨Aÿ±I+ÿ¶S<ÿ¸]Oû¶fcî´owâ¬u‰Ø¤{™Î›¦È“„±Âˆ¹¾ˆŒ¿ºƒ‘Å·—Ë´} Ï®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤ÑÿŸ"ÿ- ÿž8ÿ¨Aÿ±I+ÿ¶S<ÿ¸]Oû¶fcî´owâ¬u‰Ø¤{™Î›¦È“„±Âˆ¹¾ˆŒ¿ºƒ‘Å·—Ë´} Ï®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤ÑÿŸ"ÿ- ÿž8ÿ¨Aÿ±I+ÿ¶S<ÿ¸]Oû¶fcî´owâ¬u‰Ø¤{™Î›¦È“„±Âˆ¹¾ˆŒ¿ºƒ‘Å·—Ë´} Ï®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤ÑÿŸ"ÿ- ÿž8ÿ¨Aÿ±I+ÿ¶S<ÿ¸]Oû¶fcî´owâ¬u‰Ø¤{™Î›¦È“„±Âˆ¹¾ˆŒ¿ºƒ‘Å·—Ë´} Ï®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤ÑÿŸ"ÿ- ÿž8ÿ¨Aÿ±I+ÿ¶S<ÿ¸]Oû¶fcî´owâ¬u‰Ø¤{™Î›¦È“„±Âˆ¹¾ˆŒ¿ºƒ‘Å·—Ë´} Ï®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤ÑÿŸ"ÿ- ÿž8ÿ¨Aÿ±I+ÿ¶S<ÿ¸]Oû¶fcî´owâ¬u‰Ø¤{™Î›¦È“„±Âˆ¹¾ˆŒ¿ºƒ‘Å·—Ë´} Ï®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤ÑÿŸ"ÿ- ÿž8ÿ¨Aÿ±I+ÿ¶S<ÿ¸]Oû¶fcî´owâ¬u‰Ø¤{™Î›¦È“„±Âˆ¹¾ˆŒ¿ºƒ‘Å·—Ë´} Ï®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤ÑÿŸ"ÿ- ÿž8ÿ¨Aÿ±I+ÿ¶S<ÿ¸]Oû¶fcî´owâ¬u‰Ø¤{™Î›¦È“„±Âˆ¹¾ˆŒ¿ºƒ‘Å·—Ë´} Ï®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤ÑÿŸ"ÿ- ÿž8ÿ¨Aÿ±I+ÿ¶S<ÿ¸]Oû¶fcî´owâ¬u‰Ø¤{™Î›¦È“„±Âˆ¹¾ˆŒ¿ºƒ‘Å·—Ë´} Ï®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤ÑÿŸ"ÿ- ÿž8ÿ¨Aÿ±I+ÿ¶S<ÿ¸]Oû¶fcî´owâ¬u‰Ø¤{™Î›¦È“„±Âˆ¹¾ˆŒ¿ºƒ‘Å·—Ë´} Ï®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤Ñ®y¤ÑÿŸ"ÿ- ÿŸ8ÿª@ÿ³I+ÿ¹R<ÿ»\Oúºedí¸mxá°s‹Õ¨yœÌŸ}ªÅ—µ¿‘…¾ºŒ‰Å¶‡Ì²ƒ–Ò¯ Ö§~¢Ó§~¢Ó§~¢Ó§~¢Ó§~¢Ó§~¢Ó§~¢Ó§~¢Ó§~¢Ó§~¢Ó§~¢Ó§~¢Ó§~¢Ó§~¢Ó§~¢ÓÿŸ"ÿž- ÿ 7ÿ«@ÿ´I+ÿ»R<ÿ½[Pú¾ddì¼lyàµrÓ­wžÊ¤z­Âœ~¹¼–‚÷‡Ê²‹ŒÒ®‡•ئƒÚ¡‚¡Õ¡‚¡Õ¡‚¡Õ¡‚¡Õ¡‚¡Õ¡‚¡Õ¡‚¡Õ¡‚¡Õ¡‚¡Õ¡‚¡Õ¡‚¡Õ¡‚¡Õ¡‚¡Õ¡‚¡Õ¡‚¡Õÿ "ÿž- ÿ¡7ÿ¬@ÿ¶H+ÿ½Q<ÿÀZPúÁceìÁjzÞ¹pÒ±u¡È¨x°À¡{¼¹›Ç´–„ϰ”Õ«‘—Ú ‰œÜšˆ ×šˆ ×šˆ ×šˆ ×šˆ ×šˆ ×šˆ ×šˆ ×šˆ ×šˆ ×šˆ ×šˆ ×šˆ ×šˆ ×šˆ ×ÿ "ÿž- ÿ¢7ÿ­@ÿ·H*ÿ¿Q<ÿÂZPùÄbeëÅi{Þ¾nѶs£Æ®v³¾§yÀ¸£É´¡†Ï¬œÕ£–”Úš‘œÜ•ŽŸØ•ŽŸØ•ŽŸØ•ŽŸØ•ŽŸØ•ŽŸØ•ŽŸØ•ŽŸØ•ŽŸØ•ŽŸØ•ŽŸØ•ŽŸØ•ŽŸØ•ŽŸØ•ŽŸØÿ "ÿŸ- ÿ£7ÿ®@ÿ¸H*ÿÁP<þÅYP÷È`fëÊg|ÝÃm‘ϼq¥Å´tµ½°yÀ¶¬È®§…Ï¥¡ŠÕœœ‘Ú•™œÜ”ŸØ”ŸØ”ŸØ”ŸØ”ŸØ”ŸØ”ŸØ”ŸØ”ŸØ”ŸØ”ŸØ”ŸØ”ŸØ”ŸØ”ŸØÿ¡"ÿŸ- ÿ¤7ÿ°?ÿºH*ÿÃP;ûÈXPõË_féÏf|ÜÉk’ÎÃo¦Áºrµ¶²vÀ¬¬{Ȥ¨Μ¤…Ô” ØŸ™ÛŠœŸØŠœŸØŠœŸØŠœŸØŠœŸØŠœŸØŠœŸØŠœŸØŠœŸØŠœŸØŠœŸØŠœŸØŠœŸØŠœŸØŠœŸØÿ¡"ÿ - ÿ¦6ÿ±?ÿ»H)þÆO;øËWPòÐ^fçÔd}ÚÏi“ÈÅm¦º»p´­³s¿£­vÇš¨zÍ’¥ÒŠ¢†×„ ‘Ù„¢œ×„¢œ×„¢œ×„¢œ×„¢œ×„¢œ×„¢œ×„¢œ×„¢œ×„¢œ×„¢œ×„¢œ×„¢œ×„¢œ×„¢œ×ÿ¡"ÿ - ÿ§6ÿ³?ÿ½G)üÈN;õÎVOîÕ]fäÚb}ÓÒh’ÁÆl¤³¼o±¦µr¼œ¯tÄ“«wÊ‹§{σ¤Ô}¢‹Ö{£•Õ{£•Õ{£•Õ{£•Õ{£•Õ{£•Õ{£•Õ{£•Õ{£•Õ{£•Õ{£•Õ{£•Õ{£•Õ{£•Õ{£•Õÿ¢!ÿ - ÿ¨6ÿ´?ÿ¿G(ùËN:òÓUOêÜ[fààa}ÌÓg‘»Èk¢¬¾n¯ ·p¸•²sÀ®vÅ…ªzÊ~¨Îx¦‡Ñu¥Òu¥Òu¥Òu¥Òu¥Òu¥Òu¥Òu¥Òu¥Òu¥Òu¥Òu¥Òu¥Òu¥Òu¥Òÿ¢!ÿ¡, ÿª6ÿ¶>ýÂG(õÍN9îÙTNæãYeØâ`{ÅÕf´ÊjŸ¥Ám«™ºo´µr»ˆ±uÀ®xÅz¬}Étª„Ëq©‹Ìq©‹Ìq©‹Ìq©‹Ìq©‹Ìq©‹Ìq©‹Ìq©‹Ìq©‹Ìq©‹Ìq©‹Ìq©‹Ìq©‹Ìq©‹Ìq©‹Ìÿ£!ÿ¢, ÿ¬5ÿ¹>ùÅG'ðÑM8éàRLâéWdÎä_z½×fŒ­Ìj›ŸÄl§“¾o¯Š¹qµƒ¶tº|³w¾v±|Âq¯‚Än®‡Æn®‡Æn®‡Æn®‡Æn®‡Æn®‡Æn®‡Æn®‡Æn®‡Æn®‡Æn®‡Æn®‡Æn®‡Æn®‡Æn®‡Æÿ¤!ÿ£, ÿ¯5ÿ¼>ôÉF%êØM6âçOLÜïUcÆæ_x´Úe‰¥Ði–˜Èl¡Ão¨…¿q®~»t²x¹w¶s·{¹nµ€¼k´…¾k´…¾k´…¾k´…¾k´…¾k´…¾k´…¾k´…¾k´…¾k´…¾k´…¾k´…¾k´…¾k´…¾k´…¾ÿ¥!ÿ¤, ÿ³5ûÁ>íÏF"áßK4ØëOLÏóTb¼è^t«Þd„Ôi‘Îm™‡Éo €År¥zÂt©tÀx¬p¾{¯k¼€²h»„³h»„³h»„³h»„³h»„³h»„³h»„³h»„³h»„³h»„³h»„³h»„³h»„³h»„³h»„³ÿ¦!ÿ¨+ ÿ¸4 óÇ=äØEÖæI5ËñNLÄ÷S_±ì]p¡âd}•Ûi‡ŠÕn‚Ðq•{ÍtšvËwqÉy mÇ}¢iÅ¥fÄ…¦fÄ…¦fÄ…¦fÄ…¦fÄ…¦fÄ…¦fÄ…¦fÄ…¦fÄ…¦fÄ…¦fÄ…¦fÄ…¦fÄ…¦fÄ…¦fÄ…¦ÿ¨ ÿ®*ü¿3 éÏ<×áBÊíI5¿øMJ·ûR[¦ñ]i˜éetŒâj}ƒÝo„|Ús‰w×wŒsÕzoÓ}‘lÑ€”hЄ–eχ—eχ—eχ—eχ—eχ—eχ—eχ—eχ—eχ—eχ—eχ—eχ—eχ—eχ—eχ—ÿª ÿµ)ðÈ1ÚÝ3 ËêB!¾öH5²ÿLF©ÿQU›÷]`Žðej…ëlq}çqvwävzsây}oá|l߀iÞƒƒg݇…e܉†e܉†e܉†e܉†e܉†e܉†e܉†e܉†e܉†e܉†e܉†e܉†e܉†e܉†e܉†ÿ­ù¿%ßÖ"Ëè2¾ôA"°ÿE3¤ÿJAœÿQMþ]V…ùf^}ôndvòshrïxknî|mlíojì‚pgê…reê‰scéŒtcéŒtcéŒtcéŒtcéŒtcéŒtcéŒtcéŒtcéŒtcéŒtcéŒtcéŒtcéŒtcéŒtcéŒtÿ¶èÍÌæ¾ó1±ÿ>"£ÿB/–ÿH:ÿPD„ÿ\K{ÿgQtþnVoüsYlûx[iù|]gø^føƒ_d÷†`bö‰aaöŒbaöŒbaöŒbaöŒbaöŒbaöŒbaöŒbaöŒbaöŒbaöŒbaöŒbaöŒbaöŒbaöŒbaöŒbóÄÎÚ ½ó±ÿ2£ÿ:•ÿ?*‰ÿF3€ÿO:xÿ[@qÿfElÿmHhÿsJfÿwLdÿ{MbÿNaÿ‚O`ÿ…P^ÿ‰Q^ÿ‹Q^ÿ‹Q^ÿ‹Q^ÿ‹Q^ÿ‹Q^ÿ‹Q^ÿ‹Q^ÿ‹Q^ÿ‹Q^ÿ‹Q^ÿ‹Q^ÿ‹Q^ÿ‹Q^ÿ‹Q^ÿ‹QÌË ¾æ ¯ÿ ¤ÿ0•ÿ5‡ÿ<$|ÿD+sÿM1lÿX5gÿc9cÿk;aÿq=_ÿu>]ÿy?\ÿ|@[ÿAZÿ‚AYÿ†BXÿˆBXÿˆBXÿˆBXÿˆBXÿˆBXÿˆBXÿˆBXÿˆBXÿˆBXÿˆBXÿˆBXÿˆBXÿˆBXÿˆBXÿˆBÿ™ÿ–+ ÿ•6ÿ >ÿ¨G&ÿ®Q4ÿ¯[Eÿ­eWø©ohí£xy㛇ے…”Ô‹ŒžÏ…‘¦Ë€•¬Ç|™±ÅyžµÂv£¹Àtª¼½q²¾¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿ÿ™ÿ–+ ÿ•6ÿ >ÿ¨G&ÿ®Q4ÿ¯[Eÿ­eWø©ohí£xy㛇ے…”Ô‹ŒžÏ…‘¦Ë€•¬Ç|™±ÅyžµÂv£¹Àtª¼½q²¾¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿ÿ™ÿ–+ ÿ•6ÿ >ÿ¨G&ÿ®Q4ÿ¯[Eÿ­eWø©ohí£xy㛇ے…”Ô‹ŒžÏ…‘¦Ë€•¬Ç|™±ÅyžµÂv£¹Àtª¼½q²¾¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿ÿ™ÿ–+ ÿ•6ÿ >ÿ¨G&ÿ®Q4ÿ¯[Eÿ­eWø©ohí£xy㛇ے…”Ô‹ŒžÏ…‘¦Ë€•¬Ç|™±ÅyžµÂv£¹Àtª¼½q²¾¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿ÿ™ÿ–+ ÿ•6ÿ >ÿ¨G&ÿ®Q4ÿ¯[Eÿ­eWø©ohí£xy㛇ے…”Ô‹ŒžÏ…‘¦Ë€•¬Ç|™±ÅyžµÂv£¹Àtª¼½q²¾¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿ÿ™ÿ–+ ÿ•6ÿ >ÿ¨G&ÿ®Q4ÿ¯[Eÿ­eWø©ohí£xy㛇ے…”Ô‹ŒžÏ…‘¦Ë€•¬Ç|™±ÅyžµÂv£¹Àtª¼½q²¾¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿ÿ™ÿ–+ ÿ•6ÿ >ÿ¨G&ÿ®Q4ÿ¯[Eÿ­eWø©ohí£xy㛇ے…”Ô‹ŒžÏ…‘¦Ë€•¬Ç|™±ÅyžµÂv£¹Àtª¼½q²¾¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿ÿ™ÿ–+ ÿ•6ÿ >ÿ¨G&ÿ®Q4ÿ¯[Eÿ­eWø©ohí£xy㛇ے…”Ô‹ŒžÏ…‘¦Ë€•¬Ç|™±ÅyžµÂv£¹Àtª¼½q²¾¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿ÿ™ÿ–+ ÿ•6ÿ >ÿ¨G&ÿ®Q4ÿ¯[Eÿ­eWø©ohí£xy㛇ے…”Ô‹ŒžÏ…‘¦Ë€•¬Ç|™±ÅyžµÂv£¹Àtª¼½q²¾¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿ÿ™ÿ–+ ÿ•6ÿ >ÿ¨G&ÿ®Q4ÿ¯[Eÿ­eWø©ohí£xy㛇ے…”Ô‹ŒžÏ…‘¦Ë€•¬Ç|™±ÅyžµÂv£¹Àtª¼½q²¾¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿¹o±¿ÿ™ÿ—+ ÿ—6ÿ¡>ÿªF%ÿ°P4ÿ±ZEÿ°dW÷¬miì§w{áž}ŠÙ–ƒ—ÑŽ‰¢ËˆŽ«Ç‚“±Ä~—·Ázœ»¾w¢¿¼uªÂµq®Ã³r¯Á³r¯Á³r¯Á³r¯Á³r¯Á³r¯Á³r¯Á³r¯Á³r¯Á³r¯Á³r¯Á³r¯Á³r¯Áÿ™ÿ—* ÿ˜5ÿ£=ÿ¬F%ÿ³O4ÿ´YFÿ´cXö±lkê­u}ߣ{Õ›œÍ’†¨Ç‹Š±Â…¹¿€”¾»|šÃ¹y¡Çµv©Ê­u¬Æ«v­Ä«v­Ä«v­Ä«v­Ä«v­Ä«v­Ä«v­Ä«v­Ä«v­Ä«v­Ä«v­Ä«v­Ä«v­Äÿšÿ˜* ÿš4ÿ¥=ÿ®F%ÿµN4ÿ·XFÿ·aYõµjlé²sݨxÓŸ~ Ê–‚¬Äއ·¾ˆŒ¿ºƒ‘Å·˜Ë´|¡Ï«x¥Ï¥yªÈ¤y¬Æ¤y¬Æ¤y¬Æ¤y¬Æ¤y¬Æ¤y¬Æ¤y¬Æ¤y¬Æ¤y¬Æ¤y¬Æ¤y¬Æ¤y¬Æ¤y¬Æÿšÿ˜* ÿ›4ÿ¦=ÿ¯E%ÿ·N4ÿºWFÿ»`Yô¹imç¶qܬv“Ф{£Èš±À“„¼»Œ‰Å·ˆË´†™Î²†¤Ñ¤|¤ÑŸ}©Êž}ªÈž}ªÈž}ªÈž}ªÈž}ªÈž}ªÈž}ªÈž}ªÈž}ªÈž}ªÈž}ªÈž}ªÈž}ªÈÿ›ÿ™* ÿœ4ÿ§<ÿ±E$ÿ¹M4ÿ¼WFþ¾_Yô½gnçºo‚Ú±t•Ϩy¦ÅŸ}´¾—À¹”ŠÆµ‘’˯˜ÏªŠ¡Òž‚£Ó™¨Ì˜‚©Ê˜‚©Ê˜‚©Ê˜‚©Ê˜‚©Ê˜‚©Ê˜‚©Ê˜‚©Ê˜‚©Ê˜‚©Ê˜‚©Ê˜‚©Ê˜‚©Êÿ›ÿ™* ÿ4ÿ©<ÿ²E$ÿ»M3ÿ¿VFýÁ^ZóÁfoæ¿mƒÙ¶s—Í­w¨Ä¥{·¾¡ƒÀ¶›‰Æ®•̨‘•Ï¢ŽžÒ™‡¢Ó”†§Í“†¨Ë“†¨Ë“†¨Ë“†¨Ë“†¨Ë“†¨Ë“†¨Ë“†¨Ë“†¨Ë“†¨Ë“†¨Ë“†¨Ë“†¨Ëÿ›ÿ™* ÿž3ÿª<ÿ³E$ÿ¼L3ÿÁUFûÄ]ZóÅeoåÃl„Ø»q˜Ì²u«Ã­|¶¹¥¿°ž†Æ¨™ŒË¡•’Л’›Ó”Ž¢ÔŠ¦ÎŠ¨ËŠ¨ËŠ¨ËŠ¨ËŠ¨ËŠ¨ËŠ¨ËŠ¨ËŠ¨ËŠ¨ËŠ¨ËŠ¨ËЍËÿ›ÿš* ÿŸ3ÿ«<ÿµD#ÿ¾L3þÃUEùÇ\ZñÉdoåÈj…ÖÁošÊ¹tª¾°z¶³©¿ª¢„Æ¢ŠË›šÏ•—™Ò”¢ÔŠ¦ÎŠ¨ÌŠ¨ÌŠ¨ÌŠ¨ÌŠ¨ÌŠ¨ÌŠ¨ÌŠ¨ÌŠ¨ÌŠ¨ÌŠ¨ÌŠ¨ÌŠ¨Ìÿœÿš* ÿ 3ÿ¬<ÿ¶D#ÿ¿L2üÆTEöÊ\ZïÍbpäÍh†ÓÅmšÅ¼sª¹´xµ®­}¾¥§‚Å¢ˆË•ŸŽÏœ–Ò‹œ¢Ó†•¦Î†”§Ì†”§Ì†”§Ì†”§Ì†”§Ì†”§Ì†”§Ì†”§Ì†”§Ì†”§Ì†”§Ì†”§Ì†”§Ìÿœÿš) ÿ¢3ÿ­;ÿ·D#ÿÁL2ùÉSEóÍZZìÒ`pàÐf†ÎÈlšÀ¿q©´¸wµ©±|¾Ÿ¬Å—¨†Ê¤ŒÎŠ¢•Ñ…¢¡Òœ¦Îš§Ìš§Ìš§Ìš§Ìš§Ìš§Ìš§Ìš§Ìš§Ìš§Ìš§Ìš§Ìš§Ìÿœÿ›) ÿ£3ÿ¯;ÿ¹D"ýÃK1öÌRDðÒYYèÚ_pÛÕd†ÉÌj™ºÃo¨­»t´¢´y½˜¯}ìƒÈ‰©‰Ìƒ§‘Ï~¦œÐ}¤¦Í|¢¨Ë|¢¨Ë|¢¨Ë|¢¨Ë|¢¨Ë|¢¨Ë|¢¨Ë|¢¨Ë|¢¨Ë|¢¨Ë|¢¨Ë|¢¨Ë|¢¨Ëÿÿ›) ÿ¥2ÿ±;ÿ¼D!úÆK1óÑQCëÚWYãß]oÓÛc…ÂÏi—±Äm§¤¼p²˜µt»Ž±x†­}Æ€«‚Êz©ŠÍv¨”Îv©£Ìw«¨Êw«¨Êw«¨Êw«¨Êw«¨Êw«¨Êw«¨Êw«¨Êw«¨Êw«¨Êw«¨Êw«¨Êw«¨Êÿÿœ) ÿ§2ÿ³;ÿ¾C õÊK/îÖPBæáVWÜä[nËÞcƒºÑh”©Çl£›¾n®¸q·†´t½~°xÂw®|Ær¬ƒÉm«ŒÊm«™Én¬ŸÇn¬ŸÇn¬ŸÇn¬ŸÇn¬ŸÇn¬ŸÇn¬ŸÇn¬ŸÇn¬ŸÇn¬ŸÇn¬ŸÇn¬ŸÇn¬ŸÇÿžÿ) ÿ©2ÿ¶:úÂCðÎJ.çÝO@âéRWÒèZmÁàb€±Ôg‘¡Êkž”Ãn¨‰½q°€¹t¶y¶wºt´{½n²Àj°ˆÂg°’Ãf°–Ãf°–Ãf°–Ãf°–Ãf°–Ãf°–Ãf°–Ãf°–Ãf°–Ãf°–Ãf°–Ãf°–Ãf°–ÃÿŸÿž) ÿ­1 ÿº:ôÇBèÕJ+ßäL?×ìQVÉîYk·ãa|¨Øg‹šÏk—Én ƒÄq§{Àt¬u½x°p»{³l¹€¶h¸†¸d·¹c¶‘ºc¶‘ºc¶‘ºc¶‘ºc¶‘ºc¶‘ºc¶‘ºc¶‘ºc¶‘ºc¶‘ºc¶‘ºc¶‘ºc¶‘ºÿ ÿ¡(ÿ±0 ûÀ9ìÎBßßG(ÓéL@ÊñQU¾òXh­æawžÝg„’Õl‡Ïo–~ËsœxÈv¡rÆy¤nÄ|§i©fÀ†¬b¿­a¿®a¿®a¿®a¿®a¿®a¿®a¿®a¿®a¿®a¿®a¿®a¿®a¿®ÿ¢ÿ¦'ÿ·/ òÇ8 áØAÒæF*ÇðL@¾øPS²õWc¢ëap•ãg{ŠÝm„Øq‹zÔutÒy“pÐ|–lΙh̃›dˈaÊŸ`ÉŸ`ÉŸ`ÉŸ`ÉŸ`ÉŸ`ÉŸ`ÉŸ`ÉŸ`ÉŸ`ÉŸ`ÉŸ`ÉŸ`ÉŸÿ¤ÿ­&û¾-æÐ4Óâ<ÇîF+»ùJ>°þOO¦úW\˜ñahŒëhqƒænx{âs}ußxqÝ{„mÛ‡jÚƒ‰gÙ†Šd׋ŒaÖŽ`Õ‘Ž`Õ‘Ž`Õ‘Ž`Õ‘Ž`Õ‘Ž`Õ‘Ž`Õ‘Ž`Õ‘Ž`Õ‘Ž`Õ‘Ž`Õ‘Ž`Õ‘Ž`Õ‘Žÿ§ÿµ#îÉ&Õß)Çì<ºøD+­ÿH;£ÿMIšÿWTùa]„ôje|ðpjvívnqëzqmé~tkè‚vhæ…wfåˆycäŒzaã‘|`ã’|`ã’|`ã’|`ã’|`ã’|`ã’|`ã’|`ã’|`ã’|`ã’|`ã’|`ã’|`ã’|ÿ«÷ÀÙÜÇë( º÷;¬ÿA) ÿF6•ÿLAÿVKƒÿaR{ýkWtúq\oøv_lö{aiõcgôƒdeó†fcòŠgañŽh_ð’i_ð“j_ð“j_ð“j_ð“j_ð“j_ð“j_ð“j_ð“j_ð“j_ð“j_ð“j_ð“j_ð“jÿ·ÖÏ Çê¹÷) ¬ÿ9žÿ>&’ÿD0‡ÿK9€ÿT@xÿaFrÿjJlÿpMiÿvPfÿ{QdÿScÿƒTaÿ†U`þ‰V^þW]ý’X\ý“X\ý“X\ý“X\ý“X\ý“X\ý“X\ý“X\ý“X\ý“X\ý“X\ý“X\ý“X\ý“XÖÄÆÔ ¸÷«ÿ)žÿ4ÿ:!„ÿA)zÿI0rÿR6lÿ^:hÿh=dÿo@aÿtA_ÿyC^ÿ}D]ÿ€E\ÿ„E[ÿ‡FZÿŠGXÿGXÿHXÿHXÿHXÿHXÿHXÿHXÿHXÿHXÿHXÿHXÿHXÿHXÿHÄÇ·Û©ÿŸÿ* ÿ0ƒÿ6wÿ>"nÿG(fÿP,aÿZ/]ÿd1[ÿl3Yÿq5Xÿu6Vÿy6Vÿ|7Uÿ7Tÿ‚8Sÿ…9Rÿ‰9RÿŠ9RÿŠ9RÿŠ9RÿŠ9RÿŠ9RÿŠ9RÿŠ9RÿŠ9RÿŠ9RÿŠ9RÿŠ9RÿŠ9RÿŠ9ÿ’ÿ) ÿ5ÿ˜;ÿ D!ÿ¦N-ÿ§Y<ÿ¥dLÿ¡n[÷›xjî•w玉‚ᆋ܀•“Ø|›™Ôx žÑu¤¢Ïs©¥Íq®¨ÌoµªÊm¾­Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®ÿ’ÿ) ÿ5ÿ˜;ÿ D!ÿ¦N-ÿ§Y<ÿ¥dLÿ¡n[÷›xjî•w玉‚ᆋ܀•“Ø|›™Ôx žÑu¤¢Ïs©¥Íq®¨ÌoµªÊm¾­Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®ÿ’ÿ) ÿ5ÿ˜;ÿ D!ÿ¦N-ÿ§Y<ÿ¥dLÿ¡n[÷›xjî•w玉‚ᆋ܀•“Ø|›™Ôx žÑu¤¢Ïs©¥Íq®¨ÌoµªÊm¾­Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®ÿ’ÿ) ÿ5ÿ˜;ÿ D!ÿ¦N-ÿ§Y<ÿ¥dLÿ¡n[÷›xjî•w玉‚ᆋ܀•“Ø|›™Ôx žÑu¤¢Ïs©¥Íq®¨ÌoµªÊm¾­Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®ÿ’ÿ) ÿ5ÿ˜;ÿ D!ÿ¦N-ÿ§Y<ÿ¥dLÿ¡n[÷›xjî•w玉‚ᆋ܀•“Ø|›™Ôx žÑu¤¢Ïs©¥Íq®¨ÌoµªÊm¾­Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®ÿ’ÿ) ÿ5ÿ˜;ÿ D!ÿ¦N-ÿ§Y<ÿ¥dLÿ¡n[÷›xjî•w玉‚ᆋ܀•“Ø|›™Ôx žÑu¤¢Ïs©¥Íq®¨ÌoµªÊm¾­Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®ÿ’ÿ) ÿ5ÿ˜;ÿ D!ÿ¦N-ÿ§Y<ÿ¥dLÿ¡n[÷›xjî•w玉‚ᆋ܀•“Ø|›™Ôx žÑu¤¢Ïs©¥Íq®¨ÌoµªÊm¾­Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®ÿ’ÿ) ÿ5ÿ˜;ÿ D!ÿ¦N-ÿ§Y<ÿ¥dLÿ¡n[÷›xjî•w玉‚ᆋ܀•“Ø|›™Ôx žÑu¤¢Ïs©¥Íq®¨ÌoµªÊm¾­Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®Ãi½®ÿ“ÿ) ÿ4ÿš;ÿ¢D ÿ©M-ÿªX<ÿ¨bLÿ¤l\õŸvlì™z䑇†Þ‰Øƒ“˜Ó~™ŸÐz¤Ív¢©Ët§¬Éq­¯Ço´²Ál¹´¼l»±¼l»±¼l»±¼l»±¼l»±¼l»±¼l»±¼l»±¼l»±¼l»±¼l»±¼l»±ÿ”ÿ‘( ÿ‘3ÿœ:ÿ¤C ÿ¬L-ÿ­V=ÿ­`Mþ©j^ô¥tnêŸ}}á–ƒ‹ÙŽŠ–Ó‡ Î•§Ê|š­ÇxŸ²Äu¥¶Âr«¹Àp´»·nµ¹³o¸µ³o¸µ³o¸µ³o¸µ³o¸µ³o¸µ³o¸µ³o¸µ³o¸µ³o¸µ³o¸µ³o¸µÿ”ÿ’( ÿ“2ÿž:ÿ§C ÿ®K-ÿ±U=ÿ°_Ný®h_òªrpç¤zÞš€Õ’‡œÎ‹Œ¦É„‘¯Ä~—µÁyœ»¾v£¿¼t«Â´o®Ã®r³¼«s¶¸«s¶¸«s¶¸«s¶¸«s¶¸«s¶¸«s¶¸«s¶¸«s¶¸«s¶¸«s¶¸«s¶¸ÿ•ÿ’( ÿ•2ÿ :ÿ©Bÿ°J-ÿ´T=ÿ´^Ný³g`ñ¯præ©xƒÛŸ~“Ò—ƒ¡Ëމ¬Ä†ŽµÀ€”½¼{šÃºz£Å·y«Ç¬s¬Æ§u±¿¥wµº¥wµº¥wµº¥wµº¥wµº¥wµº¥wµº¥wµº¥wµº¥wµº¥wµº¥wµºÿ•ÿ“( ÿ–1ÿ¡9ÿªBÿ²J,ÿ¶S<ÿ·]Nû¶eað´ntä­u†Ù¤{–Ï›€¥Ç’…±ÁŠ‹»½‡”À»…Ķ‚¤Ç°~ªÈ¥wªÈ¡y°ÁŸz³¼Ÿz³¼Ÿz³¼Ÿz³¼Ÿz³¼Ÿz³¼Ÿz³¼Ÿz³¼Ÿz³¼Ÿz³¼Ÿz³¼Ÿz³¼ÿ•ÿ“( ÿ—1ÿ£9ÿ¬Bÿ´J,ÿ¹S<ÿº\Nøºdbï¸luã²sˆØ©y™ÍŸ~©Å˜„´¿“Œ¼¸“Á³‰™Å®†¡Èª„©ÉŸ|©Ê›}®Â™~²½™~²½™~²½™~²½™~²½™~²½™~²½™~²½™~²½™~²½™~²½™~²½ÿ–ÿ“( ÿ˜0ÿ¤9ÿ­AÿµI,ÿ»R<ý½[Nö½cbî½kvâ¶q‰Õ®w›Ë¥|ªÂƒ´¹–‰¼²‘Á¬Œ–Ƨ‰È£‡¦Ê™€¨Ë–®Ä•±¾•±¾•±¾•±¾•±¾•±¾•±¾•±¾•±¾•±¾•±¾•±¾ÿ–ÿ”' ÿ™0ÿ¥9ÿ®Aÿ·I+ÿ½Q<ü¿ZNôÁbbìÁiwá»p‹Ò±tǨ{ª¼ ´´š‡¼¬”¦”Æ ›Éœ‹¤Ë•†¨Ë‘…­Å…±¿…±¿…±¿…±¿…±¿…±¿…±¿…±¿…±¿…±¿…±¿…±¿ÿ–ÿ”'ÿš0ÿ¦8ÿ°Aÿ¸I+ÿ¿Q<úÂYNòÄacéÅhwݾmŒÍ´s«yª·¤~´®„¼¦˜ŠÁ ”‘Æš‘˜É–¡Ë‹¨ÌŒ‰¬ÅŒ‰°ÀŒ‰°ÀŒ‰°ÀŒ‰°ÀŒ‰°ÀŒ‰°ÀŒ‰°ÀŒ‰°ÀŒ‰°ÀŒ‰°ÀŒ‰°ÀŒ‰°Àÿ—ÿ•'ÿ›0ÿ§8ÿ±AÿºI+ÿÂP;øÆXNðÈ_cæÈfxØÁkÉ·q½¯w©²§|³©¡‚»¡œˆÁš˜Æ”––É”ŸË‹‘¨Ì‡Ž¬Æ‡°Á‡°Á‡°Á‡°Á‡°Á‡°Á‡°Á‡°Á‡°Á‡°Á‡°Á‡°Áÿ—ÿ•'ÿ/ ÿ©8ÿ³@ÿ¼H*üÅO;öÉWNíÍ^câËdxÒÄjŒÄ»oœ¸²u©­«{³£¦€»›¡†Á”ÅŽ›”ÈŠ™Ê†™¨Ë‚“¬Æ‚’¯Á‚’¯Á‚’¯Á‚’¯Á‚’¯Á‚’¯Á‚’¯Á‚’¯Á‚’¯Á‚’¯Á‚’¯Á‚’¯Áÿ—ÿ•'ÿž/ ÿª8ÿµ@ÿ¾H)ùÈN:óÍVMêÓ\bÞÏbxÍÇh‹¿¾n›²·s¨§°y²ž«~º•§„ÀŽ£‹Äˆ¡’ǃŸšÉ€ §Ê}š¬Æ}˜¯Á}˜¯Á}˜¯Á}˜¯Á}˜¯Á}˜¯Á}˜¯Á}˜¯Á}˜¯Á}˜¯Á}˜¯Á}˜¯Áÿ˜ÿ–'ÿ / ÿ¬7ÿ·@ýÁH(öËN9ïÓTLæÙZbØÔawÇËgйÃlš­¼r§¡¶w±˜±}¸­‚¾ˆª‰Ã‚¨Æ}§™Èz§¥Éw¢¬ÅxŸ°ÁxŸ°ÁxŸ°ÁxŸ°ÁxŸ°ÁxŸ°ÁxŸ°ÁxŸ°ÁxŸ°ÁxŸ°ÁxŸ°ÁxŸ°Áÿ˜ÿ—&ÿ¢/ ÿ®7ÿ¹?ùÄG'ñÎM8êÛSKàßY`ÐÚ_vÁÐe‰³Ék™¦Âp¥›½u¯‘¸{¶ˆµ€¼²†À{°Ãv®–Ås®¡Ær­­Är©°Àr©°Àr©°Àr©°Àr©°Àr©°Àr©°Àr©°Àr©°Àr©°Àr©°Àr©°Àÿ™ÿ˜&ÿ¤. ÿ±6þ½?ôÈG%ëÔM6åãPIÙãW_Éß^tº×d†¬Ïi–Çm£‘Àq¬†»u³~·z¹w´½r²…¿m±Áj°—Âi±¥Ál´²½l´²½l´²½l´²½l´²½l´²½l´²½l´²½l´²½l´²½l´²½l´²½ÿšÿ™&ÿ§- ÿµ6ùÁ?îÎF#äÜL2ÝçOIÏèV^Àä]r²Þd‚£Ôi‘•Ëmœ‰Åp¥Às¬w¼w±p¹|µk·¸g¶‡ºcµ»aµ›¼c·¦¹c·¦¹c·¦¹c·¦¹c·¦¹c·¦¹c·¦¹c·¦¹c·¦¹c·¦¹c·¦¹c·¦¹ÿ›ÿ›%ÿ«- ÿ¹5 òÇ>åÕFÚãI3ÏëNIÆíT]·ê\n¨âc}šÙiŠŽÒm”„Ìq›{Èu¡sÄx¦nÂ|©iÀ¬e¾‡®b½Ž°_½—±^¼ž±^¼ž±^¼ž±^¼ž±^¼ž±^¼ž±^¼ž±^¼ž±^¼ž±^¼ž±^¼ž±^¼ž±ÿœÿ $ÿ°,ùÀ4 éÏ=ÚßBÎéI3ÄñNH»òRZ­ð[ižçcv’ài‡Úo‰~ÔswÑw•qÎ{™lÌœhʃždɈ aÇŽ¢^Æ•¤\Æ›¤\Æ›¤\Æ›¤\Æ›¤\Æ›¤\Æ›¤\Æ›¤\Æ›¤\Æ›¤\Æ›¤\Æ›¤\Æ›¤ÿžÿ¥#ÿ·*ðÈ2ÜÛ5 ÎçBÂñH4¸ùLF¯÷QU¢õ[b•ídmŠçkv€âp}yÞu‚sÛz‡nÙ~ŠkׂŒgÕ†ŽdÔ‹aÓ’^Ñ–”\Ñ›•\Ñ›•\Ñ›•\Ñ›•\Ñ›•\Ñ›•\Ñ›•\Ñ›•\Ñ›•\Ñ›•\Ñ›•\Ñ›•ÿ¡ÿ­!ø¿&âÔ%Îå3ÂðB!¶úG3«þKB¢þPO—û[Z‹õec‚ðljzìrptéxtoç|wlåzhã„|fâˆ}cáŒ`à‘^ß–‚\Þšƒ\Þšƒ\Þšƒ\Þšƒ\Þšƒ\Þšƒ\Þšƒ\Þšƒ\Þšƒ\Þšƒ\Þšƒ\Þšƒÿ£ÿ¶éÌÏãÂð3µú@"©ÿD0ÿI=•ÿPH‹ÿ[P‚ýeWzùm]tösaoôydkò~ghñ‚ifð†jdïŠlbîŽm`í’n]ì—p\ë›q\ë›q\ë›q\ë›q\ë›q\ë›q\ë›q\ë›q\ë›q\ë›q\ë›q\ë›qÿ¬óÃÑÚ Áï´û3¨ÿ< ›ÿB,ÿH6‡ÿO?ÿZFxÿeKqÿmOlÿsRiÿyUfþ~Wdý‚Xbü†YaûŠZ_úŽ[^ú’\\ù—][ø›^[ø›^[ø›^[ø›^[ø›^[ø›^[ø›^[ø›^[ø›^[ø›^[ø›^[ø›^ú¹ÍË Àæ ²ü §ÿ3šÿ9ÿ?&‚ÿF.zÿN5sÿX:mÿc?iÿlBeÿrDbÿwF`ÿ|G_ÿH]ÿ…I\ÿˆJ[ÿŒKZÿLXÿ•MWÿ™MWÿ™MWÿ™MWÿ™MWÿ™MWÿ™MWÿ™MWÿ™MWÿ™MWÿ™MWÿ™MWÿ™MÍÁ¾Ð±ö¥ÿ! ™ÿ.Œÿ4€ÿ; vÿC'mÿL,fÿT0bÿ`3^ÿi5\ÿo7Zÿt8Yÿy9Xÿ}:Wÿ€;Vÿ„;Uÿ‡Rÿ“>Rÿ“>Rÿ“>Rÿ“>Rÿ“>Rÿ“>Rÿ“>Rÿ“>Rÿ“>Rÿ“>Rÿ“>½Å°×£ÿ™ÿ" ‹ÿ)~ÿ0sÿ8iÿ@bÿI#[ÿQ&WÿZ(Uÿb*Rÿi+Qÿo,Pÿs-Oÿw.Nÿz.Nÿ}/Mÿ€/Lÿ„0Kÿˆ0Kÿ‹0Kÿ‹0Kÿ‹0Kÿ‹0Kÿ‹0Kÿ‹0Kÿ‹0Kÿ‹0Kÿ‹0Kÿ‹0Kÿ‹0Kÿ‹0ÿ‹ÿˆ(ÿ„4ÿ:ÿ—BÿžK'ÿžW4ÿbBÿ™mOÿ“x\ø‚gòˆ‹qì‚“yè|™€äxž†át£Šßq¨ŽÝo®‘Ûm³”Úl¹–Øk˜ÕiÌšÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÿ‹ÿˆ(ÿ„4ÿ:ÿ—BÿžK'ÿžW4ÿbBÿ™mOÿ“x\ø‚gòˆ‹qì‚“yè|™€äxž†át£Šßq¨ŽÝo®‘Ûm³”Úl¹–Øk˜ÕiÌšÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÿ‹ÿˆ(ÿ„4ÿ:ÿ—BÿžK'ÿžW4ÿbBÿ™mOÿ“x\ø‚gòˆ‹qì‚“yè|™€äxž†át£Šßq¨ŽÝo®‘Ûm³”Úl¹–Øk˜ÕiÌšÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÿ‹ÿˆ(ÿ„4ÿ:ÿ—BÿžK'ÿžW4ÿbBÿ™mOÿ“x\ø‚gòˆ‹qì‚“yè|™€äxž†át£Šßq¨ŽÝo®‘Ûm³”Úl¹–Øk˜ÕiÌšÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÿ‹ÿˆ(ÿ„4ÿ:ÿ—BÿžK'ÿžW4ÿbBÿ™mOÿ“x\ø‚gòˆ‹qì‚“yè|™€äxž†át£Šßq¨ŽÝo®‘Ûm³”Úl¹–Øk˜ÕiÌšÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÿ‹ÿˆ(ÿ„4ÿ:ÿ—BÿžK'ÿžW4ÿbBÿ™mOÿ“x\ø‚gòˆ‹qì‚“yè|™€äxž†át£Šßq¨ŽÝo®‘Ûm³”Úl¹–Øk˜ÕiÌšÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÌeË›ÿ‹ÿ‰(ÿ…3ÿ9ÿ˜BÿžK'ÿŸV4ÿžaBÿšmPÿ•w]÷hñ‰‹r냒{ç}˜‚ãxˆàt£ŒÝr¨Ûo­“Ún³–Ølº˜Ök›ÑiÊœÊfÊœÊfÊœÊfÊœÊfÊœÊfÊœÊfÊœÊfÊœÊfÊœÊfÊœÊfÊœÊfÊœÿŒÿ‰'ÿˆ2ÿ“8ÿ›Aÿ¢J'ÿ¤T4ÿ¢_CÿŸjQýšt_õ”~l펈xç‡â€•ŠÝ{šÚw –Öt¦šÔq¬žÒo²¡Ðm¹£ÏlæÅgæÀiÇ¡ÀiÇ¡ÀiÇ¡ÀiÇ¡ÀiÇ¡ÀiÇ¡ÀiÇ¡ÀiÇ¡ÀiÇ¡ÀiÇ¡ÀiÇ¡ÿÿŠ'ÿŠ1 ÿ–7ÿž@ÿ¥I'ÿ§S4ÿ§]Cÿ¤hSü rbòš|pê”…}ã‹‹ˆÝ„’‘Ø~˜˜ÓzžŸÐu¤¤Írª¨Ëo°«Ém¸®Âi¼°¼kÀª·mÄ¥·mÄ¥·mÄ¥·mÄ¥·mÄ¥·mÄ¥·mÄ¥·mÄ¥·mÄ¥·mÄ¥·mÄ¥ÿÿ‹'ÿŒ0 ÿ˜7ÿ @ÿ§H&ÿ«R4ÿ«\Dÿ©fTú¥pdðŸys瘂߈و—Ò• Î{›§Êv¡­Çs¨±Åp¯µÁm··¹k¸µ³n½®°pÁ¨°pÁ¨°pÁ¨°pÁ¨°pÁ¨°pÁ¨°pÁ¨°pÁ¨°pÁ¨°pÁ¨°pÁ¨ÿŽÿ‹&ÿŽ0 ÿš6ÿ¢?ÿ©H&ÿ®Q4ÿ®[Dÿ¬dUùªneï¥wvå…Ü”…’ÔŒŒÎ„’§É}˜¯ÄxžµÂu§¹Át±»¸p³»±o¶¸¬q»±©s¿«©s¿«©s¿«©s¿«©s¿«©s¿«©s¿«©s¿«©s¿«©s¿«©s¿«ÿŽÿŒ&ÿ/ ÿ›6ÿ¤?ÿ«G&ÿ±P4ÿ±YDü°cUö®lgíªuxã¡|ˆÙ˜ƒ–щ£Ê‡­Å‚—´Â ¸¾|¨»»z°½±t²½©r´»¦t¹³£v¾­£v¾­£v¾­£v¾­£v¾­£v¾­£v¾­£v¾­£v¾­£v¾­£v¾­ÿÿŒ&ÿ‘. ÿ6ÿ¦>ÿ­G%ÿ³O4ÿ´XDú´aVó²jhì¯szá¦z‹Ö€šÍ”†§Æ¯¿‡”µº‚œ¹µ¤¼²}¬¾«y±¿£v²½ x¸µžy½¯žy½¯žy½¯žy½¯žy½¯žy½¯žy½¯žy½¯žy½¯žy½¯žy½¯ÿÿ&ÿ“. ÿž5ÿ¨>ÿ¯F%ÿ¶N3þ·WD÷·`Vð¶hiè³p{ÞªwП|Ç—ƒ§¿Š¯¸‹‘¶²†˜º­ƒ ½©©¿¥~°Àœy±¿š{··˜}»°˜}»°˜}»°˜}»°˜}»°˜}»°˜}»°˜}»°˜}»°˜}»°˜}»°ÿÿ&ÿ”- ÿ 5ÿ©>ÿ±F$ÿ¸M3ü»VDõ»_Ví»giãµn}Ö¬sÊ£zÁ›€§¸”‡°±Ž¶«Š•»¦‡¾¢…¥ÀŸ„¯Á–~°Á”¶¸“€»²“€»²“€»²“€»²“€»²“€»²“€»²“€»²“€»²“€»²“€»²ÿÿŽ&ÿ•- ÿ¡5ÿ«=ÿ³F$ÿºM3ú¾UDó¿]Vê¿ej߸k~ЯqŦxœ»Ÿ~§²˜…¯«“‹¶¥Ž“»Ÿ‹š¾›‰¢Á˜ˆ¬Â‚¯Âƒµ¹„º³„º³„º³„º³„º³„º³„º³„º³„º³„º³„º³ÿÿŽ%ÿ–, ÿ¢5ÿ¬=ÿµE#ÿ¼L2øÁTCðÃ\VçÃcjÚ»i~̲pÀªvœ¶¢|§­œ‚¯¥—‰¶ž“»™˜¾” Á‘Œ©Â‹ˆ®ÂŠˆ´ºŠˆ¹´Šˆ¹´Šˆ¹´Šˆ¹´Šˆ¹´Šˆ¹´Šˆ¹´Šˆ¹´Šˆ¹´Šˆ¹´Šˆ¹´ÿ‘ÿ%ÿ˜, ÿ¤4ÿ®=ÿ·E#ÿ¿L2öÅSCîÈ[VãÆajÔ¿h~ǶnŽ»­tœ±¦z¦§ €¯Ÿ›†µ˜—Ž»“••¾Ž’ÁŠ’§Â†Ž®Â„´»…Œ¹´…Œ¹´…Œ¹´…Œ¹´…Œ¹´…Œ¹´…Œ¹´…Œ¹´…Œ¹´…Œ¹´…Œ¹´ÿ‘ÿ%ÿ™, ÿ¦4ÿ°<ÿ¹D"üÁK1ôÉRBëÍYUßÉ`jÏÂf}¹l¶±r›««x¦¢¥~®™ „µ’‹ºŒš“¾‡˜›À„—¥Â€–¯Â’³¼€‘¸µ€‘¸µ€‘¸µ€‘¸µ€‘¸µ€‘¸µ€‘¸µ€‘¸µ€‘¸µ€‘¸µ€‘¸µÿ’ÿ%ÿ›, ÿ§4ÿ²<ÿ»D!ùÅK0ñÎQAçÒXTÚÎ^iÊÆe|½½kŒ°¶pš¥°v¥œª|­“¦‚´Œ£‰¹† ½ž™¿}ž¢Á{ž¯Áy™³¼z—¸µz—¸µz—¸µz—¸µz—¸µz—¸µz—¸µz—¸µz—¸µz—¸µz—¸µÿ’ÿ%ÿ+ ÿª3ÿµ<ü¿D ôÈJ.íÓP?ãØVSÓÒ]hÅÊc{·Âi‹ª»o˜Ÿ¶t£•±z¬­€²…ª‡·§Ž»z¦—¾w¦ ¿t¦­¿s¡´»tž¸µtž¸µtž¸µtž¸µtž¸µtž¸µtž¸µtž¸µtž¸µtž¸µtž¸µÿ“ÿ‘$ÿŸ+ ÿ¬3 ÿ¸;øÃCïÍJ,çÚO=ÝÞUQÍØ[g¾Ïbz°Èg‰¤Âm—™¼r¡¸x©†µ~°²…µy°Œ¸t¯•»p¯Ÿ¼n¯¬¼m«µ¹n§¹´n§¹´n§¹´n§¹´n§¹´n§¹´n§¹´n§¹´n§¹´n§¹´n§¹´ÿ”ÿ’$ÿ¢*ÿ°2 þ¼:òÇBèÓI)ááL;ÔãSQÆÝZe·Õ`x©Ïf‡Ék”‘Åpž‡Áv¦¾|¬x¼„±rº‹´m¹“¶j¸œ¸g·§¸g··¶h²»±h²»±h²»±h²»±h²»±h²»±h²»±h²»±h²»±h²»±h²»±ÿ•ÿ•#ÿ¥)ÿ´1 øÁ:ëÎBàÝG%ÕåK;ËçQP½ãYc¯Þ_t¢Øeƒ–ÓjŠÎo™Ès¡uÄx§nÁ}«i¾„®e½‹±a¼“²_¼²_¼¬±b¿¾­b¿¾­b¿¾­b¿¾­b¿¾­b¿¾­b¿¾­b¿¾­b¿¾­b¿¾­b¿¾­ÿ–ÿ™!ÿª(ÿ¹0ðÈ8 áØ@ÔãE&ÊëK;ÁìOO³èW`¦å_ošâf|ŽÜl†„ÕqzÐu•sÍz›lÊŸgÇ„¢cÆŠ¤_Ä‘¦\Ä™§Zä§ZݧZݧZݧZݧZݧZݧZݧZݧZݧZݧZݧÿ˜ÿž ÿ¯&øÀ.æÐ3Õá<ÉêE(¿òJ;µñNL©ïV[í_h’êgs‡ãm|~Þr‚vÚxˆp×}ŒkÔ‚fÒ‡’cÑŒ•_Ï’–\Ι˜Y΢™XÍ«šXÍ«šXÍ«šXÍ«šXÍ«šXÍ«šXÍ«šXÍ«šXÍ«šXÍ«šXÍ«šÿšÿ¥ÿ·#íÉ&ÖÞ)Éé;¾óD)³øI:¨÷MHŸöUU”õ_`‰ñhh€ìopxèuuråzymâ}ià„€e߉‚bÝŽ„_Ü“†]Û™‡ZÚ¡‰XÙ¨‰XÙ¨‰XÙ¨‰XÙ¨‰XÙ¨‰XÙ¨‰XÙ¨‰XÙ¨‰XÙ¨‰XÙ¨‰XÙ¨‰ÿœÿ­öÁÛÚÉè) ½ó;²ýC(¦þG6œýLC“ýUMŠý_Vùi]yõpbsòvgnð|jjîmgì†odë‹qaêr_é”t]è™uZç wXæ¦xXæ¦xXæ¦xXæ¦xXæ¦xXæ¦xXæ¦xXæ¦xXæ¦xXæ¦xXæ¦xÿ¢ÿ·ØÏ Êç¼ó) ±ý;¤ÿ@&™ÿE2ÿK<‡ÿTDÿ_KxÿiPqÿpTlývXiû|Zfú\cø†^a÷‹__öa^ö•b\õšcZô dXó¥eXó¥eXó¥eXó¥eXó¥eXó¥eXó¥eXó¥eXó¥eXó¥eXó¥eÿ­ÖÃÈÓ »ô¯ÿ* £ÿ7—ÿ="‹ÿC,ÿJ4zÿR:sÿ^?nÿhCiÿoGfÿuIcÿ{KaÿL_ÿ…N]ÿŠO\ÿPZÿ“QYÿ˜RWÿžSVÿ£TVÿ£TVÿ£TVÿ£TVÿ£TVÿ£TVÿ£TVÿ£TVÿ£TVÿ£TVÿ£TÙºÅǹ٬ÿ¢ÿ+ •ÿ3‰ÿ9~ÿ@%uÿH+mÿP0gÿZ4cÿe7`ÿm9^ÿs;\ÿx=Zÿ}>Xÿ‚?Wÿ†@Vÿ‹@UÿATÿ”BSÿšCQÿŸCQÿŸCQÿŸCQÿŸCQÿŸCQÿŸCQÿŸCQÿŸCQÿŸCQÿŸCQÿŸCƾ·ÍªäŸÿ”ÿ( ‡ÿ.{ÿ5qÿ=iÿE#bÿM&[ÿV)Xÿ_,Vÿh-Tÿn/Sÿs0Rÿx1Qÿ|1Pÿ€2Oÿ„3Nÿˆ3MÿŒ4Lÿ’4Kÿ–5Kÿ–5Kÿ–5Kÿ–5Kÿ–5Kÿ–5Kÿ–5Kÿ–5Kÿ–5Kÿ–5Kÿ–5·Ä©Ôœù “ÿ…ÿ# yÿ)nÿ1eÿ9]ÿAWÿJSÿR PÿY"Mÿ`#Kÿf$Jÿk%Iÿo%Hÿs&Gÿw&Fÿ{'Eÿ~'Eÿ‚(Dÿ‡(Cÿ‹)Cÿ‹)Cÿ‹)Cÿ‹)Cÿ‹)Cÿ‹)Cÿ‹)Cÿ‹)Cÿ‹)Cÿ‹)Cÿ‹)ÿƒÿ€'ÿ{3 ÿ†8ÿŽ@ÿ“I"ÿ•U-ÿ“a9ÿmEÿ‹xOÿ†„Yü‚Ža÷}–hôxnñt£sîq©wìn®zêl³}éj¹çhÀægǃãeÏ…Ýc؆Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡ÿƒÿ€'ÿ{3 ÿ†8ÿŽ@ÿ“I"ÿ•U-ÿ“a9ÿmEÿ‹xOÿ†„Yü‚Ža÷}–hôxnñt£sîq©wìn®zêl³}éj¹çhÀægǃãeÏ…Ýc؆Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡ÿƒÿ€'ÿ{3 ÿ†8ÿŽ@ÿ“I"ÿ•U-ÿ“a9ÿmEÿ‹xOÿ†„Yü‚Ža÷}–hôxnñt£sîq©wìn®zêl³}éj¹çhÀægǃãeÏ…Ýc؆Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡ÿƒÿ€'ÿ{3 ÿ†8ÿŽ@ÿ“I"ÿ•U-ÿ“a9ÿmEÿ‹xOÿ†„Yü‚Ža÷}–hôxnñt£sîq©wìn®zêl³}éj¹çhÀægǃãeÏ…Ýc؆Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡ÿƒÿ€'ÿ{3 ÿ†8ÿŽ@ÿ“I"ÿ•U-ÿ“a9ÿmEÿ‹xOÿ†„Yü‚Ža÷}–hôxnñt£sîq©wìn®zêl³}éj¹çhÀægǃãeÏ…Ýc؆Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡Ó`Ú‡ÿƒÿ€'ÿ}2 ÿˆ7ÿ?ÿ•I"ÿ—T-ÿ–_9ÿ“kEÿŽwQÿˆ‚[ú„Œdõ”kñz›rîv¢wër§{éo­çl²‚åj¸„äi¿‡âhljàfÏŠÖcÖŒÏbØŠÏbØŠÏbØŠÏbØŠÏbØŠÏbØŠÏbØŠÏbØŠÏbØŠÏbØŠÿ„ÿ'ÿ€1 ÿ‹6ÿ“>ÿ™G"ÿœR-ÿš]:ÿ˜iGÿ“tSþŽ~_÷ˆ‰iñ‚‘rí}˜yéxŸåt¤„ãpªˆàm°ŒÞk·Ýj¿‘ÛiÈ“ÕfÏ•ËdÑ“ÆeÔŽÆeÔŽÆeÔŽÆeÔŽÆeÔŽÆeÔŽÆeÔŽÆeÔŽÆeÔŽÆeÔŽÿ…ÿ‚&ÿ‚0 ÿŽ5ÿ–=ÿœF!ÿ P-ÿŸ[;ÿœfHÿ˜qVû“|bô†mw耕€äzœ‡àu¢ŒÝr¨‘Úo¯•Øm·™ÕkÀœÒiÉžÉeÉžÂg͘¾iÑ“¾iÑ“¾iÑ“¾iÑ“¾iÑ“¾iÑ“¾iÑ“¾iÑ“¾iÑ“¾iÑ“ÿ†ÿƒ&ÿ…/ ÿ4ÿ™=ÿŸF!ÿ£O-ÿ£Z;ÿ dIÿoXú˜yeñ’ƒqꋌ|䃒†ß}™ŽÚx •Öt§šÓp®ŸÑm¶£ÏkÀ¥Çf§ÀhÆ¢»jË›·lΖ·lΖ·lΖ·lΖ·lΖ·lΖ·lΖ·lΖ·lΖ·lΖÿ†ÿƒ&ÿ‡. ÿ“4ÿ›<ÿ¡E ÿ§M-ÿ¦X;ÿ¤bJü¡lY÷œvhï–€uç‰à‡ŒÚ€–•ÕzžÑu¥£Íp¬¨Ëmµ¬Çk¾­½h¿¬¸kæ³mÈŸ°oÌ™°oÌ™°oÌ™°oÌ™°oÌ™°oÌ™°oÌ™°oÌ™°oÌ™°oÌ™ÿ‡ÿ„%ÿ‰- ÿ•3ÿ<ÿ¤D ÿªL-ÿªW;þ¨`Kø¥jZó¡tjíœ~y䓆†Ü‹’Õƒ”œÏ|›¥Ëw£ªÇt«­Äsµ¯¿p¼°µk¼°°nÁ©¬pÆ¢©rÊœ©rÊœ©rÊœ©rÊœ©rÊœ©rÊœ©rÊœ©rÊœ©rÊœ©rÊœÿ‡ÿ„%ÿ‹, ÿ—3ÿŸ;ÿ¦Dÿ¬K,ÿ®U;û¬_Kõªh\î¦qlç z|ß—‚ŠÕŽˆ˜Í…¡Ç€—§Â{ž¬½x§¯ºv°±·uº²­pº²©q¿¬¥tĤ£uÉž£uÉž£uÉž£uÉž£uÉž£uÉž£uÉž£uÉž£uÉž£uÉžÿˆÿ…%ÿŒ+ ÿ˜2ÿ¡;ÿ©Cÿ¯K,ÿ±T;ø±]Kñ¯f\ê«oná£vÕ™}Ì‘„™ÅŠŒ¢¾„“¨¹š­´|£°°z«³­y¶´¦t¹´¢u½¯ŸwæyÇ yÇ yÇ yÇ yÇ yÇ yÇ yÇ yÇ yÇ ÿˆÿ…%ÿŽ* ÿš2ÿ£:ÿ«Bÿ±J+ýµS;öµ\Kî³d]å®loÛ¥sÎzÅ•™¾Žˆ¢·ˆ©±„—®¬€Ÿ±¨~¨´¥}²µŸz¸¶›y»±™{Á¨˜|Æ¢˜|Æ¢˜|Æ¢˜|Æ¢˜|Æ¢˜|Æ¢˜|Æ¢˜|Æ¢˜|Æ¢˜|Æ¢ÿ‰ÿ†%ÿ* ÿœ1 ÿ¥:ÿ­Bÿ´J+û¸R:ó¹ZKê¸b^á±jpÓ©pÈ w¿™~™·’…¢°ŒŒ©ªˆ”®¥„œ² ‚¤µ®¶™··”}º³“Àª’Å£’Å£’Å£’Å£’Å£’Å£’Å£’Å£’Å£’Å£ÿ‰ÿ†$ÿ‘) ÿ1 ÿ§9ÿ¯Bÿ¶I*ø¼P:ð½YKç¼a^ܵgqάoäu޹œ|™±–‚¢ª‘Š©£Œ‘®ž‰™²™†¡µ–…«·“…¶·Ž¹´Žƒ¿«ƒÄ¥ƒÄ¥ƒÄ¥ƒÄ¥ƒÄ¥ƒÄ¥ƒÄ¥ƒÄ¥ƒÄ¥ƒÄ¥ÿ‰ÿ‡$ÿ“) ÿŸ1 ÿ©9ÿ±Aÿ¹I)öÀO9íÂWJä¿_]Ö¹fpɰm€¾¨sŽ´ z™«š€¢¤•‡©‘Ž®—Ž–²’‹ŸµŠ©·ŒŠ´¸ˆ†¸µˆ‡¾¬ˆ‡Ã¦ˆ‡Ã¦ˆ‡Ã¦ˆ‡Ã¦ˆ‡Ã¦ˆ‡Ã¦ˆ‡Ã¦ˆ‡Ã¦ˆ‡Ã¦ˆ‡Ã¦ÿŠÿ‡$ÿ”) ÿ¡0 ÿ«9ÿ´Aü»H(ôÃN8ëÇVJàÃ^]Ѽeoijk€¹«q¯¤w˜¦ž~¡žš„¨—–Œ®‘“”²Œ‘œµˆ¦·…±¸‚Œ·¶‚Œ¾­ƒŒÃ¦ƒŒÃ¦ƒŒÃ¦ƒŒÃ¦ƒŒÃ¦ƒŒÃ¦ƒŒÃ¦ƒŒÃ¦ƒŒÃ¦ƒŒÃ¦ÿŠÿˆ$ÿ–(ÿ£0 ÿ­8ÿ¶@ú¾H'ñÇN7çÌUHÜÇ\\Ì¿co¿·i´°pŒ©©u— £{ ˜Ÿ‚¨‘›‰­Š™’²…–𵕤·~•¯·{’·¶}‘½®}§}§}§}§}§}§}§}§}§}§ÿ‹ÿ‰$ÿ˜(ÿ¥/ ÿ°8ÿ¹@øÂG&îËM5äÐTFÕË[[ÇÃbnº»h~®´n‹£®s–š©zŸ’¥€¦Š¡‡¬„Ÿ±~˜´zœ¡¶x›¬¶uš·¶w˜½®x–§x–§x–§x–§x–§x–§x–§x–§x–§x–§ÿŒÿŠ#ÿš'ÿ§/ ÿ³7ü½?óÆF#êÐL2àÕREÏÏYZÁÈ`l´Àf|¨ºlŠ´r•”°xž‹¬~¥ƒ¨…ª}¦Œ¯x¤•²t£Ÿ´q£ªµo¤¹´p ¾­r§r§r§r§r§r§r§r§r§r§ÿŒÿŒ"ÿ'ÿª. ÿ¶6÷Á>íÌF äØK.ÙÜPDÉÔXX»Í^k®Æez¢Àjˆ—»p’·u›„³|¢}±ƒ¨v¯Š¬q­“¯m­±j­©²i­·±j©¿¬k¦Ã¦k¦Ã¦k¦Ã¦k¦Ã¦k¦Ã¦k¦Ã¦k¦Ã¦k¦Ã¦k¦Ã¦k¦Ã¦ÿÿ ÿ &ÿ®-ý»5 ñÇ=åÓDÝàH-ÐáOBÂÛVV´Ó]h§ÍcxšÈh…Ãn…Àt˜}½zžvº¤p¹‰¨k¸’ªg·œ¬e¸¨­c¸¶­dµÁ©e°Å¤e°Å¤e°Å¤e°Å¤e°Å¤e°Å¤e°Å¤e°Å¤e°Å¤e°Å¤ÿŽÿ“ÿ¤%ÿ³,÷Á3 èÎ<ÜÞ@ÐåH.ÇåMB¹àUT¬Û[eŸÕat’Ðf‡Íl‹~Êr“vÈy™oÆžjʼn¢eÅ’¤bĦ_ħ§]Ä´§^ÃĤ_½È _½È _½È _½È _½È _½È _½È _½È _½È _½È ÿÿ˜ÿ©#ÿ¹)îÈ1ÝÚ4 ÐäAÆëG.¼êLA°æSR£ãZa—àanŒÝhy‚Ûn‚zÙu‰rÕ|kÒ‚“eψ—`Íš\Ì—œZË XË«W˺YÌÌ™YÌÌ™YÌÌ™YÌÌ™YÌÌ™YÌÌ™YÌÌ™YÌÌ™YÌÌ™YÌÌ™ÿ’ÿÿ¯ öÀ%âÓ$Ðã2 Åì@ºñG/°ïK?¥íQNšëZZêbe…èjn}çruuãx{oà~€iÝ„„dÛŠ‡`Ù‘‰]ؘ‹ZÖ XÖ¨ŽVÕ´ŽTÕÁŽTÕÁŽTÕÁŽTÕÁŽTÕÁŽTÕÁŽTÕÁŽTÕÁŽTÕÁŽTÕÁŽÿ”ÿ¤ÿ·éËÑáÅì1ºõ@®÷E.£õJ<šôPHóZS†óc[~òlbwñshqîzmlë€pgé†scçŒv`æ’x]ä˜zZãž{Xã¥}Vâ¯~Tá¸~Tá¸~Tá¸~Tá¸~Tá¸~Tá¸~Tá¸~Tá¸~Tá¸~Tá¸~ÿ˜ÿ­óÃÒØ Äì¸ö1­ý>¢ýC+—üH7ŽüOA…üYI}ücPwümVpûtZkùz^h÷adõ‡caóe_ò“g]ñ™hZðžiXï¥kVï­lTî´mTî´mTî´mTî´mTî´mTî´mTî´mTî´mTî´mTî´mÿ£ñ¹ ÎÉ Äß ¶÷¬ÿ2 ÿ;”ÿA'ŠÿG1ÿN9zÿX?sÿbEnÿlIiÿsLfÿzOcÿ€Q`ÿ†S^ÿŒT\ÿ’UZþ˜WYýXWü¤YUû«ZTû±[Tû±[Tû±[Tû±[Tû±[Tû±[Tû±[Tû±[Tû±[Tû±[ð¯Í¿ÀÍ´î©ÿ!Ÿÿ1’ÿ7‡ÿ>"}ÿE)uÿM0nÿU5iÿ`9eÿj_ÿw@\ÿ~BZÿ„CYÿ‰DWÿEVÿ”FUÿšGSÿ HRÿ§IQÿ­JQÿ­JQÿ­JQÿ­JQÿ­JQÿ­JQÿ­JQÿ­JQÿ­JQÿ­Jϸ¾Ã²Ô¦þœÿ#ÿ-„ÿ3yÿ;pÿC"iÿJ'bÿR*]ÿ\-Zÿe0Xÿm1Vÿs3Tÿy4Sÿ~5Rÿ„6Pÿ‰7OÿŽ8Nÿ“8Mÿ™9Lÿ :Kÿ¦:Kÿ¦:Kÿ¦:Kÿ¦:Kÿ¦:Kÿ¦:Kÿ¦:Kÿ¦:Kÿ¦:Kÿ¦:¿¼°Ê£Ü™ÿÿ"‚ÿ( vÿ/mÿ7eÿ?^ÿGXÿN!TÿW#Qÿ_%Nÿe&Mÿl'Kÿq(Jÿv)Iÿ{*Hÿ€*Gÿ…+Fÿ‰+EÿŽ,Dÿ”,Cÿš-Cÿš-Cÿš-Cÿš-Cÿš-Cÿš-Cÿš-Cÿš-Cÿš-Cÿš-±Â£Ò•ëŒÿ€ÿtÿ# iÿ*`ÿ2Yÿ:SÿBNÿIKÿQHÿXFÿ]DÿcCÿgAÿl@ÿp?ÿt >ÿx =ÿ| <ÿ!;ÿ‡!;ÿŒ";ÿŒ";ÿŒ";ÿŒ";ÿŒ";ÿŒ";ÿŒ";ÿŒ";ÿŒ";ÿŒ"ÿzÿv(ÿr3 ÿ|7ÿ„?ÿˆHÿ‹S'ÿ‰`1ÿ†m;ÿ‚yDÿ~†Lÿ{‘SÿwšXÿt¢]üq¨aún®døk´g÷iºiõhÁkófÈmïcÍoìaÓpç_Ýqâ]åsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÿzÿv(ÿr3 ÿ|7ÿ„?ÿˆHÿ‹S'ÿ‰`1ÿ†m;ÿ‚yDÿ~†Lÿ{‘SÿwšXÿt¢]üq¨aún®døk´g÷iºiõhÁkófÈmïcÍoìaÓpç_Ýqâ]åsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÿzÿv(ÿr3 ÿ|7ÿ„?ÿˆHÿ‹S'ÿ‰`1ÿ†m;ÿ‚yDÿ~†Lÿ{‘SÿwšXÿt¢]üq¨aún®døk´g÷iºiõhÁkófÈmïcÍoìaÓpç_Ýqâ]åsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÿzÿv(ÿr3 ÿ|7ÿ„?ÿˆHÿ‹S'ÿ‰`1ÿ†m;ÿ‚yDÿ~†Lÿ{‘SÿwšXÿt¢]üq¨aún®døk´g÷iºiõhÁkófÈmïcÍoìaÓpç_Ýqâ]åsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÝ[æsÿzÿw'ÿt2 ÿ6ÿ†=ÿ‹GÿŽQ'ÿŒ^1ÿ‰k<ÿ…wFÿƒNÿ}Vÿy˜\üu aùr¦e÷o­iõl³lój¹oòhÀqðfÈsìdÍuèaÔvã_ÞwÛ]ãyÕ]åvÕ]åvÕ]åvÕ]åvÕ]åvÕ]åvÕ]åvÕ]åvÕ]åvÿ{ÿw'ÿw0 ÿ‚5ÿŠ<ÿFÿ’O'ÿ‘\2ÿŽh=ÿŠtHÿ†€Rÿ‹Zü}•aøxgõt¤mòqªqðn°tîk¶wìi¾zêgÇ}çeÎâbÖ€Ù_ÝÐ_à~Ì`ã{Ì`ã{Ì`ã{Ì`ã{Ì`ã{Ì`ã{Ì`ã{Ì`ã{Ì`ã{ÿ|ÿx&ÿz/ ÿ…3ÿ;ÿ’Dÿ–N'ÿ•Z2ÿ’e>ÿŽqJÿŠ}Uþ…ˆ^ù€’gô{šnðv¡sír§xêo®}èl´€æi¼ƒägƆáeψÙb׊ÏaÙˆÈbÝ‚ÄcàÄcàÄcàÄcàÄcàÄcàÄcàÄcàÄcàÿ}ÿy&ÿ|. ÿˆ2ÿ:ÿ•CÿšL'ÿ™X3ÿ–c?ÿ’nLÿŽzWü‰…bõ„kð~—sìyžzèt¥€åp«…âl³‰àj»ŒÞhÆÚfÑ’ÎbÑ’ÇdÕŒÁeÛ†½fÝ‚½fÝ‚½fÝ‚½fÝ‚½fÝ‚½fÝ‚½fÝ‚½fÝ‚½fÝ‚ÿ}ÿz&ÿ, ÿ‹1 ÿ“:ÿ˜BÿK&ÿV3ÿ›a@ÿ—lMû’vZ÷fòˆŒpì‚”yç{›ãu¢ˆßq©ŽÜm±’Ùk»–×iÈ™ÌdË›ÅeΗÀgÒ‘ºhØŠ¶iÛ†¶iÛ†¶iÛ†¶iÛ†¶iÛ†¶iÛ†¶iÛ†¶iÛ†¶iÛ†ÿ~ÿ{&ÿ+ ÿ1 ÿ•9ÿ›Bÿ J&ÿ¡T3ÿŸ_AûœiOö—s]ñ’~j쌈uç…‘€â~˜‰Ýx ‘Ør§—Òm¯Ïl¹ŸÌkÅ ÃgÇ ¼hË›·jД²lÕ¯lÙ‰¯lÙ‰¯lÙ‰¯lÙ‰¯lÙ‰¯lÙ‰¯lÙ‰¯lÙ‰¯lÙ‰ÿ~ÿ{%ÿƒ* ÿ0 ÿ˜8ÿžAÿ£I&ÿ¦R3ý¤]A÷¡gPñœq_ë—{måƒzÞ‡‹†Õ~’‘Ïx™—Êt¡œÇqªŸÃo³¡Án¿£ºkÅ£³kÈŸ¯m͘«oÒ‘©pÖŒ©pÖŒ©pÖŒ©pÖŒ©pÖŒ©pÖŒ©pÖŒ©pÖŒ©pÖŒÿÿ|%ÿ†)ÿ’/ ÿ›8ÿ¡@ÿ§H%ÿªQ2ù©[Aó¦dQì¢naåšvpÜ‘~Ò‰†‹Ë‚“Å}•™Àxž¼u¥¡¹s®¤¶r¹¥²pæ«oÆ¢¨qË›¤sГ¢tÔŽ¢tÔŽ¢tÔŽ¢tÔŽ¢tÔŽ¢tÔŽ¢tÔŽ¢tÔŽ¢tÔŽÿ€ÿ|%ÿˆ(ÿ”/ ÿ7ÿ¤?ÿªG$ý®O2ö­YAï«bRç¦kbÞžrsÒ•zÊ‚‹Ã‡Š“½‘š·}™Ÿ³y¡£¯wª¦¬v´§ªvÁ¨£sÃ¥ uÉžžwÏ–œwÒ‘œwÒ‘œwÒ‘œwÒ‘œwÒ‘œwÒ‘œwÒ‘œwÒ‘œwÒ‘ÿ€ÿ}%ÿŠ'ÿ–. ÿŸ6ÿ§?ÿ­G#û²N1ó²WAë±`RâªhdÖ¢ptÌ™wÃ’‹¼‹†”µ†Žš¯• ª~¤¦{¦§£z°©¡y¼©›wÁ¨™yÇ ˜z͘—{Ñ“—{Ñ“—{Ñ“—{Ñ“—{Ñ“—{Ñ“—{Ñ“—{Ñ“—{Ñ“ÿÿ~$ÿŒ&ÿ˜. ÿ¢6ÿ©>ÿ¯F#øµM0ð·V@çµ^RÝ®fdÐ¥nsÆu€½–|‹µƒ”®Š‹›¨†’ £‚š¥Ÿ£¨›~­ª˜}¹«”{Àª“}Æ¢’~Ì™‘Д‘Д‘Д‘Д‘Д‘Д‘Д‘Д‘Дÿÿ~$ÿ&ÿš- ÿ¤5ÿ¬=þ²E"ö¸L0í¼T@ä¸]QײdcË©lsÀ¡s€·šz‹¯”€“¨ˆ›¢Š œ‡—¥—„ ¨”‚©ª‘‚µ«¿«Å¤Œ‚Ë›Œ‚Ï•Œ‚Ï•Œ‚Ï•Œ‚Ï•Œ‚Ï•Œ‚Ï•Œ‚Ï•Œ‚Ï•Œ‚Ï•ÿ‚ÿ$ÿ%ÿœ- ÿ¦5ÿ®=üµE!ó¼K.êÁR?à¼[QѵccÆ­jr»¥q²žwŠ©˜~“¢“…š› –Œ•¥‘‰¨‡§«Š‡²¬‡‡¿¬††Ä¥‡†Êœ‡†Î—‡†Î—‡†Î—‡†Î—‡†Î—‡†Î—‡†Î—‡†Î—‡†Î—ÿ‚ÿ€#ÿ‘%ÿž, ÿ¨4 ÿ±<ú¸Dð¿K-çÅQ=ÜÀZP͸abÁ°hq¶©o~¬¢u‰¤|’œ˜‚š•”Š ‘’¥ŠŽ›¨†¥«ƒŒ°¬¾¬€‹Ã¦‹É‹Í˜‹Í˜‹Í˜‹Í˜‹Í˜‹Í˜‹Í˜‹Í˜‹Í˜ÿƒÿ‚"ÿ“$ÿ ,ÿ«3 ÿ´<÷¼CîÄJ+äÉQ;ÕÄXOȼ`a¼´gp±­m}§§s‰ž¢y’–€™šˆŸ‰—¤ƒ”˜¨“¢ª|’­«z’»¬z‘æ{Éž|͘|͘|͘|͘|͘|͘|͘|͘|͘ÿƒÿ„!ÿ•$ÿ¢+ÿ­3 þ·;ôÀBêÉI(àÍO9ÐÇWNÃÀ^`·¸eo«²k|¡¬q‡˜§x£~˜‰ …ž‚£}›–§x™ ©u™«ªs™¸«s˜Ã¦u–Éžv•Í™v•Í™v•Í™v•Í™v•Í™v•Í™v•Í™v•Í™v•Í™ÿ„ÿ‡ ÿ—#ÿ¥*ÿ±2 û»:ñÅAçÏH%ÛÒM8ËËUL½Ä]^±¾cn¥¸j{›²o†’®v‰ª|–‚§ƒœ{¤‹¡v¢”¥q¡§n ©©l¡¶©m¡Ã¦oÉžpœÍ˜pœÍ˜pœÍ˜pœÍ˜pœÍ˜pœÍ˜pœÍ˜pœÍ˜pœÍ˜ÿ…ÿŠÿš"ÿ¨)ÿµ0öÀ8ëË@áØF ÓØK6ÅÐTK·É[\«ÃblŸ¾hx”¹nƒ‹µsŒƒ²z“{¯™u­‰žo«’¢kªœ¤hª§¥fª´¦f«Å¤h¦Êœi¤Í—i¤Í—i¤Í—i¤Í—i¤Í—i¤Í—i¤Í—i¤Í—i¤Í—ÿ†ÿÿž!ÿ¬'ýº/ïÇ6 ãÔ>ØßCËÞJ4¾ÖRH°ÐZZ¤Ê`i˜ÆfvÁl€„¾r‰{»xt¹•n·‡ši¶eµ› b´¦¡`µ³¡_¶Å a±Ìšb®Ï•b®Ï•b®Ï•b®Ï•b®Ï•b®Ï•b®Ï•b®Ï•b®Ï•ÿ‡ÿ‘ÿ¢ ÿ²%õÀ+æÏ1ØÞ8ÌåC ÃâI3¶ÞQF©ØXWœÒ^eÎdr†Ëj||Èp„tÆwŠnÄ~hÇ”c—_Á›™\Á¦š[³›ZÃÅš[¾Ï•\ºÒ‘\ºÒ‘\ºÒ‘\ºÒ‘\ºÒ‘\ºÒ‘\ºÒ‘\ºÒ‘\ºÒ‘ÿ‰ÿ–ÿ¨þ¸!ìÉ"ÙÝ%Ìå7ÂêC"·çH3¬äOD àVS”Ý]`ˆÚck~ÖjuuÔp}nÒwƒgшbЇ‹^БŽZМXЧ‘Vе’UÒÇ‘VÍÔŽVÈÖ‹VÈÖ‹VÈÖ‹VÈÖ‹VÈÖ‹VÈÖ‹VÈÖ‹VÈÖ‹VÈÖ‹ÿ‹ÿÿ¯ôÁÝØÌå&Áî7¶ïB#«íG2¡ëL@–éUM‹ç]X‚æeayälirätolã|tgâ„xbâ{^â•~[àž€Xß§‚UÞ±ƒSÞ¾ƒRÞÒƒQÙÜ‚QÙÜ‚QÙÜ‚QÙÜ‚QÙÜ‚QÙÜ‚QÙÜ‚QÙÜ‚QÙÜ‚ÿÿ¤þ¸ÖÌ ÌäÀï&µõ8ªô@"ŸóF0•òK<ŒñTF‚ð]OzðfVtðn\nïvaiï~deï†haïŽj^î–m[ížoXë¥pVë®qTê¸rRêÇsQéÕsQéÕsQéÕsQéÕsQéÕsQéÕsQéÕsQéÕsQéÕsÿ˜ÿ®ÔÁ ÉÏ ¾ð³ù' ©û8žû>!“ûD,‰úJ5úS>yú]ErúfJmúoNhúvRdú~Uaú†W_ûŽZ\ú–[Zù]Wø¥^U÷¬`S÷µaRöÁaPöÊbPöÊbPöÊbPöÊbPöÊbPöÊbPöÊbPöÊbPöÊbÿ£ Ö¸ÆÄ»Ô °ü¦ÿ) œÿ5ÿ;†ÿB&}ÿI.uÿQ4oÿ[:iÿe>eÿnAbÿuD_ÿ|F\ÿƒHZÿ‹IXÿ“KVÿ›LUÿ¢MSÿ©NQÿ±OPÿ»POÿÃQOÿÃQOÿÃQOÿÃQOÿÃQOÿÃQOÿÃQOÿÃQOÿÃQÚ¯Ƽ¹É­Û£ÿšÿ+ Žÿ1ƒÿ8yÿ@ pÿG&iÿO+cÿX/_ÿb2\ÿk4Zÿr6Xÿx8Vÿ9Tÿ†;RÿNÿ£>Mÿª?Kÿ³@Jÿ¹AJÿ¹AJÿ¹AJÿ¹AJÿ¹AJÿ¹AJÿ¹AJÿ¹AJÿ¹Aȵ¸Á«ÐŸë –ÿ‹ÿ& ÿ-uÿ5lÿ=eÿD^ÿL"XÿT%Uÿ]'Rÿe)Pÿl*Nÿs+Mÿy,Lÿ-Jÿ….IÿŒ/Hÿ’0Gÿ™0Eÿ 1Dÿ©2Cÿ®2Cÿ®2Cÿ®2Cÿ®2Cÿ®2Cÿ®2Cÿ®2Cÿ®2Cÿ®2¸ºªÈÙ’ÿ ‰ÿ}ÿ!rÿ( hÿ0`ÿ8Zÿ@TÿHOÿOLÿWIÿ]Gÿc Eÿi Dÿo!Bÿt"Aÿz"@ÿ€#?ÿ†$>ÿŒ$=ÿ’%<ÿ™%;ÿž&;ÿž&;ÿž&;ÿž&;ÿž&;ÿž&;ÿž&;ÿž&;ÿž&«ÁÐá†ÿzÿnÿdÿ# \ÿ+ Uÿ3Oÿ;IÿBFÿIBÿO@ÿU>ÿZ<ÿ_;ÿd9ÿh8ÿm7ÿr6ÿw5ÿ|4ÿ3ÿˆ2ÿ2ÿ2ÿ2ÿ2ÿ2ÿ2ÿ2ÿ2ÿÿpÿl)ÿi3 ÿr7 ÿy>ÿ}Gÿ€Q!ÿ~_)ÿ|m2ÿy{9ÿvˆ@ÿs“EÿpJÿn¦Nÿk­Qÿi´Sÿh»UÿfÃWÿcÇYûaÌ[÷_Ó\ó^Ý]ð\ã^ë[é_çYï`åYñ_åYñ_åYñ_åYñ_åYñ_åYñ_åYñ_åYñ_ÿpÿl)ÿi3 ÿr7 ÿy>ÿ}Gÿ€Q!ÿ~_)ÿ|m2ÿy{9ÿvˆ@ÿs“EÿpJÿn¦Nÿk­Qÿi´Sÿh»UÿfÃWÿcÇYûaÌ[÷_Ó\ó^Ý]ð\ã^ë[é_çYï`åYñ_åYñ_åYñ_åYñ_åYñ_åYñ_åYñ_åYñ_ÿpÿl)ÿi3 ÿr7 ÿy>ÿ}Gÿ€Q!ÿ~_)ÿ|m2ÿy{9ÿvˆ@ÿs“EÿpJÿn¦Nÿk­Qÿi´Sÿh»UÿfÃWÿcÇYûaÌ[÷_Ó\ó^Ý]ð\ã^ë[é_çYï`åYñ_åYñ_åYñ_åYñ_åYñ_åYñ_åYñ_åYñ_ÿpÿl(ÿk1 ÿu6 ÿ{<ÿFÿƒP!ÿ^*ÿ~k3ÿ{x;ÿx†Bÿu’Hÿr›Mÿp¤Qÿm¬Tÿk²Wÿi¹ZÿgÁ\üeÇ^øbÌ_õ`Óað^Ýbì\äcè[édâZïdàZðbàZðbàZðbàZðbàZðbàZðbàZðbàZðbÿqÿm(ÿn0 ÿx4 ÿ;ÿƒDÿ‡N!ÿ†[+ÿƒh4ÿu=ÿ|‚EÿyŽLÿv™Rÿr¡Vÿo©Zþm°^üj·aûh¾cùfÆeôcÌgðaÓië_Þkæ]ålà[émÙ\îhÖ\ïgÖ\ïgÖ\ïgÖ\ïgÖ\ïgÖ\ïgÖ\ïgÖ\ïgÿrÿn(ÿq. ÿ{2 ÿƒ:ÿ‡CÿŠL!ÿŠY+ÿ‡e5ÿƒr?ÿ~Hÿ|‹Pÿy–VÿuŸ\ýr¦`ún­døl´höi¼kôgÅmðdÌpëaÓrå_ßsÞ\åtÖ\èqÏ^ílÍ^îkÍ^îkÍ^îkÍ^îkÍ^îkÍ^îkÍ^îkÍ^îkÿsÿo'ÿt-ÿ~1 ÿ†9ÿ‹BÿŽK!ÿŽV+ÿ‹c6ÿ‡oAÿƒ{Kÿ‡Sþ|’[üxœaùt¤göp«kóm²oñjºsïhÃvëeÌxæbÕzÞ_ß|Ó]ã{Í_ævÇ`êpÆ`ìnÆ`ìnÆ`ìnÆ`ìnÆ`ìnÆ`ìnÆ`ìnÆ`ìnÿtÿp'ÿv+ÿ/ ÿ‰8ÿŽ@ÿ’I!ÿ“T,ÿ`7ÿŒlCÿ‡wMûƒƒWøŽ`öz—góv nðr¨sín¯xëk¸|èhÂæfÍ‚ßbØ„Ñ_Ü…Ê`àÅaãz¿cèt¾cér¾cér¾cér¾cér¾cér¾cér¾cér¾cérÿtÿp&ÿy*ÿ…. ÿ7ÿ’?ÿ–H ÿ—R,ÿ•^8þ‘iDúŒtPõ‡[ò‚‰eî}“nêw›uçr£|än«áj³†Þg½ŠÚeÊÒbÔŽÈbØŠÂcÜ„¼eà~·fåx¶fæv¶fæv¶fæv¶fæv¶fæv¶fæv¶fæv¶fævÿuÿq&ÿ|(ÿˆ- ÿ6ÿ–>ÿšG ÿœP+ÿš[8ù—fEô’pRïŒ{_ê……jå~tàx•}Ûr…Ôm¤‹Ðj­ŽÍh·ËhÑÈgÑ’¿eÔ¹gÙ‰´hÝ‚°iâ|®jäy®jäy®jäy®jäy®jäy®jäy®jäy®jäyÿvÿr&ÿ'ÿŠ, ÿ“5ÿ™=ÿžFÿ¡N+û Y8õœcFï˜mTèwbâˆoÚ€‡{ÒzƒÍu—‰ÉqŸÅn¨‘Âl±“¿k¼•½kË•¶iД±kÕ¬lÛ†¨mà§mâ|§mâ|§mâ|§mâ|§mâ|§mâ|§mâ|§mâ|ÿvÿs%ÿ&ÿ, ÿ–4ÿ<ÿ¡Dþ¥L*÷¥W8ð¢aGéœjVá”reØŒ{sÏ…ƒ|É‹„Ãz“Š¿v›ºs£“·p¬–´o·—±oʬm͘©oÓ¥p؉¡qÞ‚ qà qà qà qà qà qà qà qàÿwÿt%ÿƒ%ÿ+ ÿ™3 ÿ ;ÿ¥Cû©K)óªT8ì¨^Gã¡gWÚ™ogÏ‘xsÇŠ€}Á„ˆ…»‹µz—±wŸ”­t¨—ªs²™§r¿š¤rËš¡sГžtÖŒ›uÜ„šuÞšuÞšuÞšuÞšuÞšuÞšuÞšuÞÿxÿv$ÿ†#ÿ’*ÿ›2 ÿ£:ÿ¨Bø­J(ð¯R7ç¬\GÞ¥dXÑmfÈ•usÀŽ|}¹‰„…³ƒŒŒ­“‘©{›•¥y¤™¡w®›žvºœwÊœ™wÏ–—xÔŽ•xÛ†”x݃”x݃”x݃”x݃”x݃”x݃”x݃”x݃ÿxÿx#ÿˆ#ÿ”*ÿž1 ÿ¦:þ«Bõ°I'ìµP6ã°ZFØ©cWÌ¡kfšrrº“z|³…¬ˆ‰Œ¦„‘¡€˜–}¡š™{ªœ–{¶”{Æž’{͘‘|Ó|Ùˆ|Ü…|Ü…|Ü…|Ü…|Ü…|Ü…|Ü…|Ü…ÿyÿz"ÿŠ"ÿ–)ÿ 1 ÿ¨9û¯Aò´H&é¹O4ß´YEÒ­aVÇ¥ie½žpr´—w|­‘~…¦Œ†Œ ˆ‘š…•––‚žš’€§³ž€Âž‹€Ìš‹Ò’Š€Ø‰‰€Û†‰€Û†‰€Û†‰€Û†‰€Û†‰€Û†‰€Û†‰€Û†ÿyÿ{!ÿ‹"ÿ˜(ÿ£0 ÿ«8ù²@ï¸G$æ½N3Û¸WDͰ`V©gd¸¢nq¯›u{§–|„ ‘ƒ‹š‹‘”Š“–‡›š‹…¥ˆ„°Ÿ…„¿Ÿ……Ë›……Ñ“……ØŠ„„Ú‡„„Ú‡„„Ú‡„„Ú‡„„Ú‡„„Ú‡„„Ú‡„„Ú‡ÿzÿ} ÿ!ÿ›(ÿ¥/ ÿ®7ö¶?ì¼F"ãÁN0Õ¼VCÈ´^U½¬fc³¦lpªŸs{¡šz„š–‹”’ˆ‘Ž–‰Œ™š„УЮŸ~мŸ~ŠÊœŠÐ”‰Ö‹ˆÙˆˆÙˆˆÙˆˆÙˆˆÙˆˆÙˆˆÙˆˆÙˆÿzÿÿ!ÿ'ÿ¨.þ²6 óº>éÁEßÅL/пTBÄ·]S¸°db®ªjo¤¤qzœŸwƒ”›~ŠŽ˜†‡•Ž•‚’—™} œz«žx¹Ÿw‘ÊyÏ•yŽÖŒy؉y؉y؉y؉y؉y؉y؉y؉ÿ{ÿÿ’ ÿ &ÿ«-ûµ5 ð¾=æÇDÚÉI.ËÃSA¾¼[R³µba¨¯inŸªox–¥uŽ¡|‰‡žƒ›‹”{™”˜w—ž›s–©q–¶žp—Èr–Ï•s”ÕŒt“؉t“؉t“؉t“؉t“؉t“؉t“؉t“؉ÿ|ÿ„ÿ•ÿ£%ÿ¯,÷º3 ìÄ;âÎBÓÎH,ÆÇR@¹ÀZQ­ºa_£´gl™°mw«t€ˆ¨z‡¥z¢‰’u ’–pž›™lž§›jž´œiŸÅ›lžÐ”mšÖŒm™Ø‰m™Ø‰m™Ø‰m™Ø‰m™Ø‰m™Ø‰m™Ø‰m™Ø‰ÿ}ÿ‡ÿ˜ÿ¦#ÿ³)óÀ1çË8 ÝØ:ÍÒF*ÀÌP>³ÆXO§À_]œ»ej’·kt‰³q}¯x„z­Štª‡n©“i§š–f§¥˜c§²™b¨Ã˜e§Ñ“f£Ö‹g¡Ù‰g¡Ù‰g¡Ù‰g¡Ù‰g¡Ù‰g¡Ù‰g¡Ù‰g¡Ù‰ÿ~ÿ‹ÿœÿ«!û¹&íÇ,ßÕ1ÓÞ9ÆØD(¹ÑN;¬ÌVL Ç]Z•Âcg‹¿iq‚»oyz¸v€s¶}†m´…‹h³Žc²˜’`±¤“^²±”\²Â”^²Ó_¬Ù‰`ªÚ†`ªÚ†`ªÚ†`ªÚ†`ªÚ†`ªÚ†`ªÚ†`ªÚ†ÿÿÿ¡ÿ±ôÀ ãÑ Óß,Éâ;¾ßD%²ÙL8¥ÓTI™Ï[WŽËac„Èhl{ÅnusÃu{lÁ|gÀ„…b¿Ž‰^¾˜‹Z¾¤X¾±ŽW¿ÂX¿×‹Y¸Ü…Y¶ÝƒY¶ÝƒY¶ÝƒY¶ÝƒY¶ÝƒY¶ÝƒY¶ÝƒY¶Ýƒÿÿ•ÿ§ý¸éËÓßÈç,¾æ;³äD%¨áK5œÝRD‘ÙYR†Õ`]|ÓfftÑmnlÏttfÎ|yaÍ…}\ÌŽ€YÌ™ƒVÌ¥„T̳…SÍÄ…SÍ݃SÆà~TÃá}TÃá}TÃá}TÃá}TÃá}TÃá}TÃá}TÃá}ÿ‡ÿœÿ®Ú ÐÒ Çè¼ì, ²ë<¨êC%èH3’æP@ˆäYK~â`Tváh\oàobhßwhcÞl^ÞˆpZÞ‘sWÞ›uTÞ§wRß´xPßÄxOàÞxOÖåuOÓçtOÓçtOÓçtOÓçtOÓçtOÓçtOÓçtOÓçtÿÿ¤Û¸ÍÅ ÅÕ ºñ°ò- ¦ñ;›ðA$‘ïG/‡îN:~îXCwíaJpíiPjìqUeìyYaì\]ìŠ_Zì“aWícUí§eRí³fQîÀgOïÔhNëæhMèèhMèèhMèèhMèèhMèèhMèèhMèèhMèèhÿ™ Ý®̼ÁÉ¸Û ­ø¤ø/ ™ø9ø?!…øF*|øM2u÷W9n÷`?i÷iCdøqGaøyJ]øLZø‰OXø’QVù›RSù¥TQú¯UPú»VNúÊWMûãWLûéWLûéWLûéWLûéWLûéWLûéWLûéWLûéWå¥Î´¿¿´Îªë  ÿ—ÿ/ Œÿ6‚ÿ=xÿD$pÿL*jÿT/eÿ^3aÿg7]ÿo9ZÿvVÿ†?SÿŽAQÿ—BPÿ CNÿ©EMÿ³EKÿ¾FJÿÐGIÿÜGIÿÜGIÿÜGIÿÜGIÿÜGIÿÜGIÿÜGIÿÜGÑ®¿¹²Å§Õœý”ÿ"‰ÿ+ ~ÿ2uÿ:lÿBeÿI"_ÿQ%ZÿZ(Wÿc+Tÿk-Rÿr/Pÿy0Oÿ€1Mÿˆ2Kÿ4Jÿ˜5Hÿ¡5Gÿª6Fÿ³7Dÿ¿8DÿÅ8DÿÅ8DÿÅ8DÿÅ8DÿÅ8DÿÅ8DÿÅ8DÿÅ8Á³²¾¥Ì™Ýÿ†ÿ{ÿ' qÿ.hÿ6aÿ>ZÿFUÿMQÿUNÿ] Kÿd"Iÿk#Gÿq$Fÿx%Dÿ&Cÿ†'AÿŽ(@ÿ–(?ÿž)=ÿ§)<ÿ°*<ÿ´*<ÿ´*<ÿ´*<ÿ´*<ÿ´*<ÿ´*<ÿ´*<ÿ´*³¸¥Æ—Õ‹ï„ÿwÿmÿ"dÿ* \ÿ2Uÿ9PÿAKÿHHÿOEÿVBÿ\@ÿa>ÿg<ÿm;ÿs9ÿy8ÿ€6ÿˆ5ÿ4ÿ—2ÿ 2ÿ¤2ÿ¤2ÿ¤2ÿ¤2ÿ¤2ÿ¤2ÿ¤2ÿ¤¦À—ΉÞÿtÿiÿ_ÿWÿ$Pÿ, Jÿ3 Eÿ;AÿA=ÿG:ÿM8ÿR6ÿW4ÿ\2ÿa1ÿf/ÿk.ÿq-ÿw,ÿ}*ÿƒ)ÿ‹)ÿŽ)ÿŽ)ÿŽ)ÿŽ)ÿŽ)ÿŽ)ÿŽ)ÿŽÿf ÿa*ÿa3ÿi6 ÿn=ÿqFÿsQÿs^#ÿpm)ÿn|0ÿk‰5ÿi–9ÿg¡=ÿfª@ÿd²Bÿc¹DÿaÂFÿ`ÈGÿ^ÍHÿ\ÔJÿ[ÞKûYäL÷XêLôWïMðVóMìUøMìUøMìUøMìUøMìUøMìUøMìUøMìUøMÿf ÿa*ÿa3ÿi6 ÿn=ÿqFÿsQÿs^#ÿpm)ÿn|0ÿk‰5ÿi–9ÿg¡=ÿfª@ÿd²Bÿc¹DÿaÂFÿ`ÈGÿ^ÍHÿ\ÔJÿ[ÞKûYäL÷XêLôWïMðVóMìUøMìUøMìUøMìUøMìUøMìUøMìUøMìUøMÿf ÿb*ÿc1ÿk5 ÿp<ÿsEÿuOÿv]#ÿsl*ÿpz1ÿm‡6ÿk”;ÿiŸ?ÿh¨Bÿf°Eÿd¸GÿcÀIÿaÇJÿ_ÌLÿ]ÓMü\ÞNùZäOõYêPñXïQíWôQéWùPéWùPéWùPéWùPéWùPéWùPéWùPéWùPÿgÿc*ÿe0ÿn3 ÿt:ÿwCÿyNÿzZ$ÿwh+ÿtv3ÿq„9ÿn?ÿl›Cÿj¥Gÿh­Jÿg¶Lÿe¾NÿcÅPÿaËRý_ÒTù]ÝUô[äVðZêWëXðXçXõWãYúTãYúTãYúTãYúTãYúTãYúTãYúTãYúTÿhÿc)ÿh.ÿq2 ÿw8ÿ{Bÿ}Lÿ~X$ÿ{f-ÿws5ÿt€<ÿqŒBÿo—Gÿl¡KÿjªOÿh²Rÿg»TÿeÄVþbÊXù`ÑZõ^Ü\ð\ä]êZë^æYñ_âZõ[Ü[ùWÜ[ùWÜ[ùWÜ[ùWÜ[ùWÜ[ùWÜ[ùWÜ[ùWÿiÿd)ÿk-ÿt0 ÿ{7ÿAÿJÿ‚U%ÿc.ÿ{p6ÿx|>ÿu‰Eÿq”KÿožPÿl¦Tÿj®Xýh·[üfÀ]údÉ`õaÐbð^Ücê\åeå[ìfÞZðcØ[ô`Ñ]ø[Ñ]ø[Ñ]ø[Ñ]ø[Ñ]ø[Ñ]ø[Ñ]ø[Ñ]ø[ÿiÿe(ÿn+ÿx. ÿ6ÿƒ?ÿ…Hÿ‡S%ÿ„`/ÿ€l8ÿ|yAÿx…IþtPûq™Vùn¢Zøkª_öh²bôf»eódÅhðbÐkê_Ýmã]çnÛ[êmÓ\ïhÍ^ódÈ_÷_È_÷_È_÷_È_÷_È_÷_È_÷_È_÷_È_÷_ÿjÿf(ÿq)ÿ{, ÿƒ5 ÿ‡>ÿŠGÿŒP%ÿ‰]/ÿ…i:ýuDú|€M÷x‹Uôs•\ñobïl¥gíi­këf¶oècÀræaÌuã`ßwÖ\äxÎ^érÉ_ímÄ`ðh¿bôc¿bôc¿bôc¿bôc¿bôc¿bôc¿bôc¿bôcÿkÿg'ÿt'ÿ+ÿ‡3 ÿŒ<ÿEÿ‘N%ÿZ0ü‹f;ø†qFó|Qï|‡Zìvbèq˜iål páh¨uÞd°zÛbº~ØaÇÔaÚË_á~Äaåw¿bér»cím¶dñg¶dñg¶dñg¶dñg¶dñg¶dñg¶dñg¶dñgÿlÿj&ÿw&ÿ‚*ÿŠ2 ÿ;ÿ“Cÿ–L$ý•W0÷‘b<òŒmIì†xTç_âxŠiÜr’rÖmšxÒj¢|Îg«Ëf´Ée¿ƒÇd΄Ác݃ºdâ|¶fæv²gêq®hïj®hïj®hïj®hïj®hïj®hïj®hïj®hïjÿmÿl$ÿz$ÿ…)ÿŽ1 ÿ”9ÿ˜Bÿ›J$ø›T0ò—_=ë’jKåŠsXÞ‚|dÕ|…nÏvuÊr•zÆn~Ãl¥‚¿j¯„½i¹†ºhLJ·hÚ‡±hÞ­iãz©kèt¦kìm¦lím¦lím¦lím¦lím¦lím¦lím¦límÿmÿn#ÿ}"ÿˆ(ÿ‘0 ÿ˜8ÿœ@ûŸI#ô¡R/í\=å–fLÝŽoZÓ‡xeÌnÆ{‰vÁw‘{¼s™€¸p¡„µnª‡²m´‰¯lÁŠ­lÒŠ¨lÜ…¥má~¢nåwŸoëpŸoëpŸoëpŸoëpŸoëpŸoëpŸoëpŸoëpÿnÿq"ÿ!ÿ‹'ÿ”/ ÿ›7ÿ ?ø¤G!ð§O.è¢Z=ß›cMÔ”lZËŒueĆ}o¾€…v¸||³x•¯u…«r¥‰¨q¯‹¥p»Œ£pË qÙˆqß›räz™sér™sér™sér™sér™sér™sér™sér™sérÿoÿs ÿ‚ ÿŽ&ÿ—.ÿŸ6ý¤>ô¨F ì¬M-ã§X<Ù aL͘jYÅ‘re½‹zn¶…‚v°€‰}«}‘‚§y™†£w¢ŠŸu«œt·ŽštƘuÖ‹–v݃”vâ|“vçt’vèt’vèt’vèt’vèt’vèt’vèt’vètÿoÿuÿ„ÿ%ÿš-ÿ¢5 ú¨=ñ¬Eè°L+ß«W;Ò¤_KÈœhY¿•od·wn°Švª…†}¤Ž‚Ÿ~–‡›{ž‹—y¨Ž”x³’x‘zÕzÛ…Žzá~zævzævzævzævzævzævzævzævÿpÿvÿ†ÿ“%ÿ,ÿ¥4 ÷«<î±Cå´K)Ú¯U:ͨ^J fX¹šmd±“unªŽ|v£Šƒ}ž†‹‚™‚“‡”€›‹~¥Ž}°Š}¾‘ŠÓ‰~Ú‡ˆ~߇~åw‡~åw‡~åw‡~åw‡~åw‡~åw‡~åw‡~åwÿpÿxÿˆÿ•$ÿ +ÿ¨2 ô¯:ëµBá¸J'Ô³S9È«\I¾¤dW´žkc¬˜rm¤“yužŽ|˜‹ˆ‚’‡‡…™‹‰ƒ¢Ž†‚®‘ƒ‚¼‘‚ƒÎ‘ƒƒÙˆ‚‚ß‚‚äy‚‚äx‚‚äx‚‚äx‚‚äx‚‚äx‚‚äx‚‚äxÿqÿzÿŠÿ—#ÿ¢)ü¬1 ñ³9èº@ݼH%϶R8ï[H¹¨bV¯¢jb§œplŸ—wu˜“~|’†‚ŒŽ‡‡Š—‹ƒˆ Ž‡«‘|‡¹‘{‡Ë‘|ˆØ‰}‡Þ‚}†äz}†äy}†äy}†äy}†äy}†äy}†äy}†äyÿqÿ|ÿÿš"ÿ¥(ù¯/î¸7 ä¿?ØÀF$ʺP7¿³YG´¬aUª¦ha¡¡nk™œut’˜|{Œ•ƒ†’‹†”‹|ŽžŽx©vŒ¶‘tÈ‘vŽØŠwŒÝ‚wŠãzwŠãzwŠãzwŠãzwŠãzwŠãzwŠãzwŠãzÿrÿÿÿ ÿ©&ö³-ê½5 àÆ<ÒÄD#ŽO5º·XF¯±_T¥«f`œ¦mj”¢ssŒžzz†›€€˜‰…z–’‰u”›r“¦o“´m”Åp•ØŠp’݃qã{qã{qã{qã{qã{qã{qã{qã{ÿsÿ‚ÿ’ÿ ÿ­$ò¸*æÃ1ÛÌ5ÌÈB!ÀÂM4´¼VD©¶^RŸ±d^–¬khŽ©qq†¥xx¢~y ‡ƒtˆoœ™‹k›¤h›²Žg›ÂŽiØŠj™Ý‚k–ã{k–ã{k–ã{k–ã{k–ã{k–ã{k–ã{k–ã{ÿtÿ…ÿ–ÿ¤û² í¿%áÌ*ÔÑ2 ÇÌAºÇL1®ÁTB£¼\P™·b\³if‡°on€­vuyª}{s¨„€m¦…h¥—ˆe¤£Šb¤°‹`¤Á‹b¦Ùˆc¢Þežãzežãzežãzežãzežãzežãzežãzežãzÿvÿ‰ÿšÿ©ö¸çÇÛÙÍÖ0 ÀÒ?´ÍJ/¨ÈR?ÃZM’¿aX‰»gb€¸mky¶tqr³{wl±ƒ|g°Œ€b¯–ƒ^®¡†\®¯‡Z¯¿‡[°Ú„]¬à^§åx^§åx^§åx^§åx^§åx^§åx^§åx^§åxÿzÿŽÿŸÿ°ïÀÙÔ ÎßÄÝ/ ¹Ù=­ÓH,¡ÏP;•ËXI‹Ç_T‚Äe^yÂlfrÀrlk¾zrf½‚va»‹z\»•}Yº¡Wº¯€U»¿€U¼ÙV¸ãzX²çuX²çtX²çtX²çtX²çtX²çtX²çtX²çtÿ€ÿ”ÿ¦ã¸ ÒÆ Ì× Ãã¹â1 ¯à=¤ÝF'™ÙN7ÔVDƒÑ]OzÏdXrÍj_kËreeÊyj`É‚o[É‹rWÈ–uTÈ¢wRȯxQÉÀxPÊÛwQÆèsRÀëoR¿ìoR¿ìoR¿ìoR¿ìoR¿ìoR¿ìoR¿ìoÿ‡ÿ› ß®мÇÉÁÛ ·è ­ç1 ¤æ=™äD&ŽâL3„àT>{Þ\GsÝcOkÜjVeÚr\`Úz`[ÙƒdWÙŒgSÙ—jPÙ£lNÙ±mMÚÂmLÛÜlMØìjNÏðgNÏðgNÏðgNÏðgNÏðgNÏðgNÏðgNÏðgÿ é¤Ñ´Å¿¼Í´éªî"¢î3—í;ìB$ƒëI.{êS6sé\>lédDgélIbètM^è|QZè…TVèŽVSé˜YQé£ZNé°\Mê¾\LëÒ]Kêé]Jãó\Jãó\Jãó\Jãó\Jãó\Jãó\Jãó\Jãó\ù™Ô¬Å·¹Ã°Ò§öžõ$•õ2Šõ:õA xõH'põP.jôZ4eôc8`ôk<]õt?Yõ|BWõ„DTõFQö—HOö¡JMö¬KK÷¹LJ÷ÈMIøàMH÷óMH÷ôMH÷ôMH÷ôMH÷ôMH÷ôMH÷ôMH÷ôMڣDZ¸»­É£Ùšý’ý'‡þ/ }þ7tÿ?lÿG fÿN%`ÿW)\ÿ`-Yÿi0Vÿq2Sÿx4Qÿ€6Oÿ‰7Mÿ’9Kÿœ:Iÿ¦;Hÿ±Dÿç>Dÿç>Dÿç>Dÿç>Dÿç>Dÿç>Dÿç>ˬ¹¶¬Â Ð•åŽÿ„ÿ$zÿ, pÿ4hÿ<aÿD[ÿKVÿS Sÿ["Pÿc$Mÿk&Kÿs'Iÿz)Hÿ‚*FÿŠ+Dÿ”,Bÿž-Aÿ§.@ÿ±.?ÿ¼/>ÿÍ0>ÿÍ0>ÿÍ0>ÿÍ0>ÿÍ0>ÿÍ0>ÿÍ0>ÿÍ0»±¬¼ŸÉ“Ù‰ü €ÿvÿ lÿ( dÿ0 ]ÿ8Wÿ@QÿGMÿNJÿVGÿ\DÿcBÿi@ÿp?ÿx=ÿ€;ÿˆ :ÿ‘!8ÿ›"7ÿ¤"6ÿ­#5ÿ¸#5ÿ¹#5ÿ¹#5ÿ¹#5ÿ¹#5ÿ¹#5ÿ¹#5ÿ¹#­¶ŸÄ’Ò„á}ÿ rÿhÿ_ÿ#Xÿ+ Qÿ3 Lÿ: GÿACÿH@ÿN=ÿT;ÿZ9ÿ_7ÿe5ÿk3ÿr1ÿz/ÿ‚.ÿ‹,ÿ“+ÿœ*ÿ§*ÿ§*ÿ§*ÿ§*ÿ§*ÿ§*ÿ§*ÿ§¡¿’Ì„Üx÷nÿ cÿZÿRÿKÿ$Fÿ,Aÿ3 <ÿ: 9ÿ@ 5ÿE 2ÿJ 0ÿP .ÿT,ÿY*ÿ^(ÿd&ÿj%ÿq#ÿx"ÿ€ ÿˆÿ‘ÿ‘ÿ‘ÿ‘ÿ‘ÿ‘ÿ‘ÿ‘ÿ\"ÿW-ÿX3ÿ_6 ÿc= ÿeFÿfPÿe^ÿdn"ÿa|'ÿ_Š+ÿ^–.ÿ\¡1ÿ[ª3ÿZ²5ÿYº6ÿXÃ7ÿXÍ9ÿWØ9ÿVà:ÿUæ;ÿTì<ÿSñ<üRõ=øRù=õQý=óQÿ=óQÿ=óQÿ=óQÿ=óQÿ=óQÿ=óQÿ=ÿ\"ÿW,ÿZ2ÿa5 ÿe< ÿgEÿhOÿh\ÿfm"ÿc{(ÿaˆ,ÿ_”/ÿ^Ÿ2ÿ]©5ÿ[±7ÿZ¹8ÿZÁ:ÿYË;ÿXÕ<ÿWß=ÿVæ>ÿUë>ýTð?ùSõ?öRù@óRý@ðRÿ>ðRÿ>ðRÿ>ðRÿ>ðRÿ>ðRÿ>ðRÿ>ÿ]!ÿX,ÿ\0ÿd3 ÿh: ÿkCÿlNÿlZÿjj$ÿgx)ÿd….ÿb‘2ÿaœ6ÿ_¦8ÿ^®:ÿ]¶<ÿ\¾>ÿ[È?ÿZÒAÿYÝBÿWåCýVêDùUðDõTõEñTúEîTþDìTÿBìTÿBìTÿBìTÿBìTÿBìTÿBìTÿBÿ^!ÿY,ÿ_.ÿf2 ÿl8 ÿoAÿoLÿqWÿng%ÿku+ÿh‚0ÿeŽ5ÿd™9ÿb£<ÿ`«>ÿ_³Aÿ^»Bÿ]ÄDÿ\ÎFÿZÜGþYäHúWêIõVðJðUöJíUúJéVþGçVÿEçVÿEçVÿEçVÿEçVÿEçVÿEçVÿEÿ^!ÿY+ÿb-ÿj0ÿo6 ÿr@ÿtJÿuUÿrd&ÿor-ÿl3ÿi‹8ÿf–<ÿe @ÿc¨Cÿa°Fÿ`¸Hÿ^ÁJÿ]ËKÿ\ÚMúZãNõYêOðWñPëVöQçWûNäXÿKáYÿIáYÿIáYÿIáYÿIáYÿIáYÿIáYÿIÿ_ ÿZ+ÿe+ÿm.ÿs5 ÿw>ÿxHÿyRÿw`'ÿtn.ÿp{5ÿm‡;ÿj’Aÿg›Eÿe¤Iþc¬Lýa´Nû`¼Qú^ÆSù]ÔUõ[ãVïZêXéXòYåY÷VàZûSÛ[ÿO×[ÿM×[ÿM×[ÿM×[ÿM×[ÿM×[ÿM×[ÿMÿ` ÿ])ÿh)ÿq+ÿx3 ÿ|<ÿ}Fÿ~Pÿ}](ÿyj0ÿuv8ÿq‚?ümEúj—KøgŸOöe§Sôb¯Vó`¸Yñ_Á\ð]Í^í\à`èZìaáZò`Ú[ö[Ó\úWÏ]ýSÌ^ÿQÌ^ÿQÌ^ÿQÌ^ÿQÌ^ÿQÌ^ÿQÌ^ÿQÿaÿ`'ÿk&ÿu)ÿ|1 ÿ:ÿƒDÿ„MÿƒY(ÿf2üzr;øu~CõqˆKòm’QïišVíf¢[êcª_è`²cæ^¼fä\Èiá[ÚkÝZêkÓ\ðfÍ^õaÈ_ù\Ä`üXÁaþUÁaþUÁaþUÁaþUÁaþUÁaþUÁaþUÿbÿc%ÿo$ÿy(ÿ0 ÿ…9ÿˆBÿ‰Kÿ‰V(ú…b3õ€n=ðzyGìuƒPépŒXåk•^áfdÞc¤iÛ`­m×_·oÔ^ÃpÑ^ÒqÍ]çqÇ_îkÂaòf¾böaºcù\·cüX·cüX·cüX·cüX·cüX·cüX·cüXÿcÿf#ÿr"ÿ}'ÿ…. ÿŠ7ÿ@ÿIúS(ôŒ_4î†j?étKãx~UÞr†^ØmeÓj˜jÏg mÌe¨pÉc±sÆb¼tÄaÉuÁaàv¼cêq·dïj´eóe°fö`®gù\®gù\®gù\®gù\®gù\®gù\®gù\ÿcÿh!ÿu ÿ%ÿ‰-ÿ5 ÿ’>ü”Gõ–O(î‘[4ç‹fAà„oNÙ}yXÑw‚`ÌsŠgÇo“lÄl›pÀi£s½g¬vºf¶x¸eÂy¶eÕy²fæv®hìoªiði¨iôc¦j÷_¦j÷_¦j÷_¦j÷_¦j÷_¦j÷_¦j÷_ÿdÿk ÿxÿ„$ÿ,ÿ“4 ÿ—<ø™Eð›M'è—Y4ábB׉lN΃uXÈ}~aÃx†h¾tŽm¹p–r¶nžu²l§x¯j±{­i½|ªiÍ}¨jãz¥lér¢líl mòfžnõbžnõbžnõbžnõbžnõbžnõbžnõbÿeÿmÿ{ÿ‡#ÿ*ÿ—2 ýœ;ôŸCì¡K%ãœV3Ú–`AÏŽiNLjrXÀ‚zaº}‚hµyŠn±u’s¬ršw©p£z¦n¬}£m¸~¡mÇŸnà~œpçušpëo™qðh—qód—qód—qód—qód—qód—qód—qódÿeÿoÿ~ÿŠ"ÿ“)ÿ›1 ù 9ð£Aç¦I#Þ¡T1Òš^@È“gMÀŒoX¹‡wa³‚h®}‡n©zŽs¤w–x tŸ{s¨~šq´€˜q–rØ•tåx“têq’uïk‘uòf‘uòf‘uòf‘uòf‘uòf‘uòf‘uòfÿfÿqÿ€ÿŒ!ÿ–(ÿž/ö¤7 ì¨?ã«H ئR0Ìž\@×eM»‘mW³‹ta­†|h§‚ƒn¢~‹t{“x™yœ|•w¥’v°u¾‚ŽvÑ‚ŽxãzxèsŒxíl‹xñh‹xñh‹xñh‹xñh‹xñh‹xñh‹xñhÿgÿsÿ‚ÿ ÿ™&þ¢.ó¨5 é­=߯FÒ©Q/Ç¢Z?¾›cLµ•jW®r`§‹yh¡‡nœƒˆt—€x’}™|Ž|¢€‹z­‚ˆz»ƒ‡z̓‡|â|‡|çu†|ìn†|ði†|ði†|ði†|ði†|ði†|ði†|ðiÿgÿuÿ…ÿ’ÿœ%û¥,ð¬4 æ²;Û³DÍ­O.æY>¹ŸaK°™hV¨”p_¡wg›‹~n–ˆ†s…ŽxŒ‚–|ˆ€ €„«‚¸ƒÊ„á}æv€ëo€€ïj€€ïj€€ïj€€ïj€€ïj€€ïj€€ïjÿhÿxÿ‡ÿ”ÿŸ#ø©*ì±1â·9 Õ·BɰN-¾ªW=´£_J«žgU£˜n_œ”uf–|mƒs‹Š‹x†ˆ”|†ž€}„¨‚{„µ„y„Ç„z†à{…æw{…ëp{„îk{„îk{„îk{„îk{„îk{„îk{„îkÿiÿzÿŠÿ—ÿ£!ô­'èµ.Þ½5 к@Ä´L,º®V;¯¨^I¦¢eTžl]—™sf•ylŠ’r…‰w’|{‹›wЦ‚t‰³ƒrŠÄƒtŒàt‹åxu‰êqvˆílvˆílvˆílvˆílvˆílvˆílvˆílÿkÿ}ÿÿšÿ¦ð±#ä»)ÙÂ0 ˽?À¸J*µ²T:ª¬\G¡§cR™£j\‘ŸqdŠ›wk„˜q~–†vy“{t’™~p¤m±‚kÁ‚m’Ýn‘åxoêqpŽílpŽílpŽílpŽílpŽílpŽílpŽílÿnÿ€ÿÿžû«ì·àÃ!ÒÆ-ÆÁ=º¼I(¯·R8¥²ZEœ­aQ“©hZ‹¥ob„¢ui~Ÿ|ox„ts›yn™–|j˜¢g—®€e˜¿e™Øh˜åxi–êqj”ílj”ílj”ílj”ílj”ílj”ílj”ílÿqÿƒÿ”ÿ¢õ°æ¾ÙÌÌÊ+ÀÆ;µÁG&ª¼Q6Ÿ¸XC–³`N°fX…¬m`~ªsgw§zlr¥‚rl£‹vh¢”yd¡ |` ­}_¡½~^¢Ô}a¡ævbëpc›îlc›îlc›îlc›îlc›îlc›îlc›îlÿtÿ‡ÿ˜þ§ç· ÖÅ ÐÐÅÏ(¹Ë9®ÇE#£ÃO3™¿W@»^K†¸dT~µk\w²qcq°xik®€mf­‰ra«“u]«žx[ª¬yY«¼yX¬ÒyZ«ès\§ìn]¤ïj]¤ïj]¤ïj]¤ïj]¤ïj]¤ïj]¤ïjÿyÿŒÿž ܮһ ÌÈ ÇÖ½Õ%²Ò6§ÎB œÊL/’ÇT<ˆÃ\GÁbPw¾iWp¼p^j»wce¹h`¸ˆl\·’oX¶žqU¶«sS·»sR·ÒsT·ëoV²ïjW¯ñgW¯ñgW¯ñgW¯ñgW¯ñgW¯ñgW¯ñgÿÿ“ á¥Ò³ɾÂ˼ݴÝ#ªÚ3 ŸÖ@”ÓJ*ŠÐR7€ÍZAxËaJpÉhQjÈoWdÆv\_Å`ZňdVÄ’gSÄžiPĬjOļkNÅÓjOÅíhPÀódQ½õaQ½õaQ½õaQ½õaQ½õaQ½õaQ½õaÿ† ðšÔªȶ¾Á·Ï °ã¨ã%Ÿâ5 •à>‹ÞH%ÜP0xÚX:pØ_BiÖgIcÕnO^ÔvSYÓWUÓ‰ZRÓ“]OÓ _MÓ­`KÔ¾`JÕØ`KÔí^LÑ÷\LÌùZLÌùZLÌùZLÌùZLÌùZLÌùZLÌùZÿڢʯ½¹´Æ«Ô ¤êœé(“é4‰è=çD"wæN*oæW2iå_8cåg=_äoBZäwEVä€ISäŠKPä”NMäŸPKå¬QIå»RHæÏRHæèRHäøQHáüOHáüOHáüOHáüOHáüOHáüOHáüOá™Í©¾³³¾¨ËŸÚ ˜òò*†ò3|ñ;tñClñK#fñT)añ]-]ñf1Yñn5Vñv7Sñ:PòˆKò@Ió©AGó¶BFôÇCEôßCDôðCDòúBDòúBDòúBDòúBDòúBDòúBDòúBÑ¢À®²¸§ÄœÒ’í Œû‚û(yû1 pü9iüAbüI\üP WüY#Týb&Qýj(Oýs*Lþ{,Jþƒ.Hþ/Fÿ˜1Dÿ¢2Cÿ®3Aÿ»4@ÿË4?ÿã4?ÿï5?ÿï5?ÿï5?ÿï5?ÿï5?ÿï5?ÿï5γ³§¿šËÚ†ÿ~ÿuÿ%lÿ- dÿ6]ÿ>XÿERÿMOÿULÿ\IÿdGÿkDÿs Bÿ|"Aÿ…#?ÿ$=ÿš%;ÿ¤&:ÿ¯&9ÿº'8ÿÊ'8ÿÜ(8ÿÜ(8ÿÜ(8ÿÜ(8ÿÜ(8ÿÜ(8ÿÜ(µ¯§ºšÆÔæzÿpÿgÿ!_ÿ)Xÿ1 Rÿ9 MÿAIÿHEÿOBÿU@ÿ\=ÿb;ÿi9ÿp7ÿy5ÿ‚3ÿŒ2ÿ—0ÿ¡/ÿª/ÿµ.ÿ¿.ÿ¿.ÿ¿.ÿ¿.ÿ¿.ÿ¿.ÿ¿©µšÂŒÏÞvÿlÿbÿZÿSÿ$Mÿ+Gÿ3 Cÿ: ?ÿA ;ÿG 8ÿM 5ÿS3ÿX1ÿ^/ÿd-ÿk+ÿs)ÿ|'ÿ†%ÿ$ÿ™#ÿ£"ÿ«"ÿ«"ÿ«"ÿ«"ÿ«"ÿ«"ÿ«œ¾Ë~Úpægÿ]ÿ TÿMÿGÿAÿ$<ÿ+7ÿ24ÿ80ÿ=-ÿC*ÿH (ÿM &ÿR $ÿW "ÿ] ÿc ÿk ÿs ÿ| ÿ„ ÿŽ ÿ• ÿ• ÿ• ÿ• ÿ• ÿ• ÿ• ÿR%ÿM/ÿQ2ÿW5ÿZ< ÿ[EÿZOÿY]ÿXmÿV{ÿU‰"ÿS•%ÿR 'ÿQ¨)ÿP±*ÿP¸+ÿOÁ,ÿOÊ-ÿNÖ.ÿNä.ÿNí/ÿNó/ÿMø0ÿMü0ÿLÿ0üLÿ0ùLÿ/øLÿ/øLÿ/øLÿ/øLÿ/øLÿ/øLÿ/ÿS$ÿM/ÿT0ÿY4ÿ]: ÿ_Cÿ^Nÿ]Zÿ[jÿZy!ÿX†$ÿV’'ÿU)ÿT¦+ÿS®-ÿR¶.ÿR¾/ÿQÇ0ÿQÒ1ÿPá2ÿPë2ÿOò3ÿO÷3ÿNü4ûNÿ4øMÿ4õNÿ2ôNÿ2ôNÿ2ôNÿ2ôNÿ2ôNÿ2ôNÿ2ÿS$ÿN.ÿV/ÿ\2ÿ`8 ÿbAÿbLÿ`Xÿ_hÿ]v"ÿ[ƒ&ÿY)ÿXš,ÿV£.ÿU¬0ÿU³1ÿT»3ÿSÄ4ÿSÎ5ÿRÞ6ÿRé7ÿQñ7ÿQö8ûPû8÷Oÿ8ôOÿ7ñPÿ5ðPÿ4ðPÿ4ðPÿ4ðPÿ4ðPÿ4ðPÿ4ÿT#ÿP-ÿY-ÿ_0ÿc6 ÿf@ÿfJÿeUÿceÿas#ÿ^€(ÿ\Œ,ÿ[—/ÿY¡1ÿX©4ÿW°5ÿV¸7ÿUÁ8ÿUË9ÿTÚ:ÿTç;ÿSð<ûRö=öQû=òQÿ=ïRÿ;ìRÿ8ëRÿ8ëRÿ8ëRÿ8ëRÿ8ëRÿ8ëRÿ8ÿU#ÿR+ÿ\+ÿc.ÿg4 ÿj>ÿkHÿjSÿhaÿfp%ÿc}*ÿ`ˆ/ÿ^“3ÿ\6ÿ[¥8ÿZ­:ÿXµ<ÿW½>ÿWÇ?ÿVÓAüUäBùUîCõTöDðSüDìTÿAéUÿ?æUÿ<åUÿ;åUÿ;åUÿ;åUÿ;åUÿ;åUÿ;ÿV"ÿU)ÿ_(ÿg+ÿl2 ÿo< ÿpFÿpPÿn] ÿkk'ÿhy-ÿe„2ÿb7ÿ`™;þ^¡>ý\©Aû[±CúY¹EùXÂG÷WÎHõVàJñVìKîUöLéVüJåWÿFâXÿCÞYÿ@ÝYÿ?ÝYÿ?ÝYÿ?ÝYÿ?ÝYÿ?ÝYÿ?ÿW"ÿY'ÿc&ÿk(ÿq0ÿt9 ÿuCÿuMÿuY!ÿqg)ÿmt0ýj€6úfŠ<øc”@öaœDô^¤Hò\¬Kñ[´MïY½PíXÉRëWÚSçVéUäWõTáYýOÛZÿKÕ[ÿHÐ\ÿDÏ\ÿDÏ\ÿDÏ\ÿDÏ\ÿDÏ\ÿDÏ\ÿDÿX"ÿ\$ÿf#ÿo&ÿv.ÿz7 ÿ{Aÿ{Kÿ{U!þwc*ùso2ön{:òj…AïfGìc—Lê`ŸPè]§Tå[¯WãY¸ZáWÃ]ßWÒ^ÚVæ^ÖYóZÒ\üUÍ^ÿPÉ^ÿLÅ_ÿIÄ_ÿHÄ_ÿHÄ_ÿHÄ_ÿHÄ_ÿHÄ_ÿHÿY!ÿ_"ÿj!ÿt$ÿ{,ÿ5 ÿ>ÿ‚Hý‚R!÷~_+òyk5ísu>én€Fåi‰Máe‘TÞa™YÚ_¢\Ö]ª_Ó\³aÐ[¾bÎ[ÌcËZâcÈ\ñ`Æ_úZÁ`þU½aÿQºbÿM¹bÿK¹bÿK¹bÿK¹bÿK¹bÿK¹bÿKÿY!ÿb ÿnÿx#ÿ+ÿ„3 ÿ‡<þˆE÷ˆN!ð„[+ê~f6äxpAßrzKÙmƒRÓiŒXÏf•\Ìd_Éb¥bÆ`®dÃ_¸fÁ^Äg¿^Øh¼_ëfºc÷_¶dûY³eþU°eÿP¯eÿO¯eÿO¯eÿO¯eÿO¯eÿO¯eÿOÿZ ÿeÿqÿ|"ÿ„)ÿ‰1 ÿŒ:ùŽCñŽL êŠX+ã„b7Û~lCÓxvLÍsSÈo‡YÄk^Ài˜b½f eºe¨h·c²jµb¾k³bÎl°båk¯fôd¬gø]©hüX§iÿS¦iÿR¦iÿR¦iÿR¦iÿR¦iÿR¦iÿRÿ[ ÿgÿtÿ ÿˆ'ÿŽ/ý’7 ô”@ì•IäU*ÛŠ_7Ñ„iCÊ}rLÄx{T¿tƒZºq‹_¶n“d³k›g¯i¤j­g­lªf¸n¨fÇo¥fßo¥jñh¢köa lù[žlýVžlþUžlþUžlþUžlþUžlþUžlþUÿ\ÿjÿwÿƒÿŒ%ÿ’-ù—5 ï™>ç›FÞ–R)Ò\7ʉfBÃoL¼~wT·y[²u‡`®reªp—h¦mŸl£l©n k´pžjÂqœj×qœnîkšoód™oø^—püX—pýW—pýW—pýW—pýW—pýW—pýWÿ^ÿlÿzÿ†ÿ#ÿ–+õ›3 ëŸ;â E×›P(Ì”Z6ÄcB¼ˆlLµ‚tT°~|[«z„`¦w‹e¢t“ižrœm›p¥p˜o°r•n½s“oÐs”rën“sòf’sö`súZsûYsûYsûYsûYsûYsûYÿ_ÿnÿ}ÿ‰ÿ’"ýš)ñ 0ç¤9 Þ¥CÑŸN'ǘX5¾’aA¶ŒiK¯‡qT©‚y[¤€`Ÿ|ˆe›yj—v™m“u¢qs¬ssºt‹sËuŒvçpŒwðh‹wõbŠwù\ŠwúZŠwúZŠwúZŠwúZŠwúZŠwúZÿaÿqÿÿ‹ÿ• ùž&í¤.ã©6 Ø©@Ì£L&œV4¹–_@±gJª‹oS¤‡vZžƒ~`™€…e”}j{–nŒyŸq‰xªt†w¶u„wÇv…zär†{ïj…{ôd…{ø]…{ù\…{ù\…{ù\…{ù\…{ù\…{ù\ÿcÿsÿÿŽÿ™ö¡#ê©*à¯2Ò¬>ǦK$½ U3´š^?¬•eJ¥mRžŒtY˜ˆ{`“…ƒeŽ‚‹jŠ€“n†~q‚}§t|´v}|Åv}~àsîkóe~÷^~ø]~ø]~ø]~ø]~ø]~ø]ÿeÿuÿ„ÿ‘ÿœò¥ æ®&Û´.ί=êI#¹¤S1¯ž\>§™dI ”kQ™rY“y_ŽŠ€d‰‡ˆi„…‘n€ƒšq|‚¥ty²vwÂvv‚Ýty„ílyƒòfz‚÷_z‚ø^z‚ø^z‚ø^z‚ø^z‚ø^z‚ø^ÿgÿwÿ‡ÿ”þŸîªâ³!Õ·*ɳ;¾®H"´¨R0«£Z=¢žbG›™iP”•pXŽ’w^ˆ~dƒ†i~‹my‰˜qv‡£sr†¯up†¿vo‡×us‰ímsˆòft‡ö`t‡÷_t‡÷_t‡÷_t‡÷_t‡÷_t‡÷_ÿiÿzÿŠÿ—ù£ê®ݹϺ(Ä·9¹²F ¯¬P/¦§X;£`F•ŸgOŽ›nVˆ˜u]‚•|c}“„hx‘Œls–poŽ rl­tj½uiÒulímmŽñgnŒö`nŒ÷_nŒ÷_nŒ÷_nŒ÷_nŒ÷_nŒ÷_ÿlÿ}ÿÿ›ô¨åµ Õ¿ʾ&¿»7´¶Dª±N-¡­W9˜©^D¥eM‰¢lU‚Ÿs[|œzawšfr˜Šjm–”ni•žqf”«sc”ºsb•Ïsf—ìlg•ñfh“ö`h’÷_h’÷_h’÷_h’÷_h’÷_h’÷_ÿoÿÿ‘ò  Ú­ Ó¸ ÎÃÄÂ#¹¿5¯»B¤·L*›³U7’¯\AЬcJƒ©jR|¦qYv¤x^p¢ck ˆggž‘kcn_©p]¹p\Íp_Ÿëkaòebšö`b™÷^b™÷^b™÷^b™÷^b™÷^b™÷^ÿsÿ… ú– Û¥ѱË»ÆÇ ½Ç ²Å2 ¨Á@ž¾J'”ºS4‹¶Z>ƒ´aG|±hOu¯oUo­vZj«}_e©†ca¨g]§›jY§¨kW§¸lV§ÌlX¨éhZ§ôc[£ø^\£ù]\£ù]\£ù]\£ù]\£ù]\£ù]ÿx ÿ‹ ߜҩɴ¾¼ÌµÍ«Ë/ ¡È=—ÅH#ÂQ/„¿X:|¼_CuºfJo¸mPi·tUdµ|Z_´…^[³aW³šdT²§eR²·fQ³ÌfR³écT²÷_U®ú[V­ûZV­ûZV­ûZV­ûZV­ûZV­ûZÿ~ ò‘Ö¡Ê­À·¸Â²Ï «Ô£Ó+™Ð:ÎE…ËN*}ÉV4uÇ]=nÅeDhÄlIcÂsN^Á{SYÁ„VUÀYR¿›\O¿¨]M¿¸^LÀÍ^LÀê\N¿ùYO¼þUPºþUPºþUPºþUPºþUPºþUPºþUÿ…ݘͦÁ±·º®Æ§Ó  Ý™Ý(Û7†ÙB}ÖK$uÔT-mÒ\5gÑcü«*=ü¹+;ýË+;ýâ+:üô+:ü÷+:ü÷+:ü÷+:ü÷+:ü÷+:ü÷+½¨®°¡¼•ȉÔ~èwÿoÿgÿ&`ÿ/Yÿ7 Tÿ?OÿGKÿNGÿVDÿ]Bÿd@ÿl=ÿu;ÿ~9ÿ‰7ÿ”6ÿ 5ÿ¬3ÿ¹3ÿÈ2ÿâ 2ÿç 2ÿç 2ÿç 2ÿç 2ÿç 2ÿç °­¢·•ćÐ{Ýrý jÿaÿZÿ"Tÿ*Nÿ2Iÿ: EÿA AÿH >ÿN;ÿU8ÿ[6ÿb4ÿi2ÿr/ÿ{-ÿ†+ÿ’*ÿž)ÿ©(ÿ³'ÿÂ'ÿÇ'ÿÇ'ÿÇ'ÿÇ'ÿÇ'ÿǤ´–À‡ÌzÚmëdÿ\ÿTÿMÿHÿ$Bÿ,>ÿ3:ÿ96ÿ@3ÿE0ÿK .ÿQ +ÿW )ÿ] 'ÿd $ÿl "ÿv ÿ€ ÿŒÿ—ÿ¡ÿ¬ÿ®ÿ®ÿ®ÿ®ÿ®ÿ®—¼ˆÉyÖkã_öVÿNÿ GÿAÿ<ÿ7ÿ$2ÿ*/ÿ0+ÿ6'ÿ;%ÿ@"ÿE ÿJÿPÿVÿ\ÿdÿmÿwÿ ÿ‹ ÿ• ÿ˜ ÿ˜ ÿ˜ ÿ˜ ÿ˜ ÿ˜ ÿI'ÿD1ÿK1ÿP4ÿR:ÿRC ÿQNÿO\ÿMkÿLyÿK‡ÿI“ÿHÿH¦ ÿG®!ÿGµ"ÿF½#ÿFÆ#ÿFÐ$ÿFà$ÿFê%ÿFó%ÿFú%ÿFÿ%ÿFÿ%ÿFÿ%ÿFÿ$ýFÿ#ýFÿ#ýFÿ#ýFÿ#ýFÿ#ýFÿ#ÿI'ÿF/ÿM/ÿR2ÿU9ÿUB ÿTMÿRYÿPhÿOwÿN„ÿL‘ÿK›!ÿJ¤"ÿJ¬#ÿI³$ÿI»%ÿHÄ&ÿHÍ&ÿHÝ'ÿHè'ÿHñ(ÿHù(ÿHÿ(ÿHÿ(þHÿ(ûHÿ'ùHÿ&ùHÿ&ùHÿ&ùHÿ&ùHÿ&ùHÿ&ÿJ'ÿH-ÿP-ÿU0ÿX6ÿY@ ÿXKÿUVÿTfÿRtÿQÿOŽ!ÿN˜#ÿM¡%ÿM©&ÿL±'ÿK¸(ÿKÁ)ÿKÊ*ÿJÙ*ÿJæ+ÿJð+ÿJø,ÿJÿ,ýJÿ,úJÿ+÷Jÿ)õJÿ(õJÿ(õJÿ(õJÿ(õJÿ(õJÿ(ÿK&ÿK+ÿR+ÿX.ÿ[4ÿ]> ÿ]IÿZTÿYbÿWqÿU~ ÿSŠ#ÿR•&ÿQž(ÿP¦*ÿO®+ÿNµ,ÿN½-ÿMÇ.ÿMÓ/ÿLã0ÿLí0üLö1úLþ1÷Lÿ1õMÿ/òMÿ-ðMÿ+ðMÿ+ðMÿ+ðMÿ+ðMÿ+ðMÿ+ÿK&ÿN)ÿV)ÿ\+ÿ`1ÿb; ÿbFÿ`Qÿ^_ÿ\mÿZz#ÿX†&ÿV‘)ÿUš,ÿS¢.ÿRª0ÿQ±1ÿQ¹3ÿPÃ4þOÎ5ûOß6øNë7õNõ8òNý8ðOÿ5îPÿ3ëQÿ1éQÿ/éQÿ/éQÿ/éQÿ/éQÿ/éQÿ/ÿL%ÿQ'ÿZ&ÿ`(ÿe/ÿh9 ÿhCÿgNÿeZÿbh ÿ_v%ÿ]*ÿZŒ.þX–1üWž4ûU¦6ùT­8øSµ:÷R¾;õQÉ=óQÚ>ðPè?ìPó@éQý>èSÿ;æTÿ8ãUÿ5áUÿ3áUÿ3áUÿ3áUÿ3áUÿ3áUÿ3ÿM$ÿT$ÿ]#ÿe%ÿj-ÿm6 ÿn@ÿmKÿkVÿhd!þeq(ûb}-ø_‡2ö\‘6óZ™:òX¡=ðW©@îU±BìT¹DëSÄFéRÒHåQåIâRòHßTüDÝVÿ@ÛXÿ=ÖYÿ:ÒYÿ8ÒYÿ8ÒYÿ8ÒYÿ8ÒYÿ8ÒYÿ8ÿN$ÿX!ÿa ÿj#ÿp+ÿs4 ÿt>ÿtHÿrRûo_#ökl*ògw1ïc‚7ì`‹=é]”AæZœEäX¤IâV¬LàT´NÝT¿PÛTÍP×SâQÒTðNÐWûJÎZÿEÍ\ÿBÉ\ÿ>Å\ÿ<Å\ÿ<Å\ÿ<Å\ÿ<Å\ÿ<Å\ÿ<ÿO#ÿ[ÿeÿn!ÿu)ÿy1ÿz; ÿzDúyNôv[#îqg,élr5åh|<ác…CÝ`ŽHÙ]—LÕ\ŸOÒZ§QÏY°SÍXºTËXÆUÉWÚVÅWìUÃ[ùOÂ^ÿJÀ_ÿF½`ÿBº`ÿ@º`ÿ@º`ÿ@º`ÿ@º`ÿ@º`ÿ@ÿR!ÿ^ÿiÿsÿz&ÿ~/ÿ8 ûAó€Kì|W#æwc-àqm8Úmw@Ói€FÏe‰KËc‘OÈ`™RÅ_¡UÂ]ªWÀ\³Y¾\¿Z¼[Î[¸[å[·^õU·bÿOµcÿJ²dÿF°dÿC°dÿC°dÿC°dÿC°dÿC°dÿCÿUÿaÿmÿwÿ~$ÿ„,þ‡5 õˆ>í‡HåƒT"Þ~_.Ôxi8Îss@Én|GÄk„LÀhŒQ½e”TºcœW·b¥Z´`®\²`¹^°_Ç^­_ß_¬bñY¬eþSªgÿN¨gÿJ¦gÿF¦gÿF¦gÿF¦gÿF¦gÿF¦gÿFÿWÿdÿpÿ{ÿƒ"ÿ‰*ùŒ2ïŽ; çŽDÞŠQ!Ô„\-Ì~f8ÅxoAÀtwH»p€M·mˆR³jV°h˜Y¬f \ªe©_§d´`¥cÂa£cÕb¢eí]¢iûW¡jÿQŸkÿLžkÿIžkÿIžkÿIžkÿIžkÿIžkÿIÿYÿgÿsÿ~ÿ‡ ÿ'ô’/ê”8 á”BÖN ̉Y-Ńc7¾}k@¸ytH³u|N®r„SªoŒW§m”[£kœ^ i¥`žh°c›g½d™gÎd˜ièašmùZ™nÿT—nÿO–nÿK–nÿK–nÿK–nÿK–nÿK–nÿKÿ[ÿiÿvÿÿŠü‘$ð—,åš4Üš?Ï”LÆŽW,¾ˆ`7·‚i@±~qH¬zyN§w€S£tˆXŸq\›o˜_˜m¡b•l¬d“l¹f‘kÉfmäd‘qö\‘rþVrÿQrÿMrÿMrÿMrÿMrÿMrÿMÿ]ÿkÿyÿ„ÿŽø•!ë›(á 0Õž=ʘJÁ’T+¹Œ^6±‡f?«‚nG¦~vN¡{}Sœx…X˜v\”t•_‘ržcŽq©e‹pµg‰pÅgˆpàfŠtô^‹vüXŠvÿR‰vÿN‰vÿN‰vÿN‰vÿN‰vÿN‰vÿNÿ_ÿnÿ{ÿ‡ÿ‘ô™ç #Ý¥+Ï¡;ÅœH¼–S*´\5¬‹d?¦‡lG ƒsM›€zS–}‚W’zŠ\Žx’`Švœc‡u¦f„t²h‚tÂh€tÛhƒxò`„zûY„yÿT„yÿO„yÿO„yÿO„yÿO„yÿO„yÿOÿaÿpÿ~ÿŠÿ”ðã¥ר(Ë¥9ÁŸF·šQ)¯•Z4§b>¡‹jF›‡qL•„xRWŒ‡\ˆ}`„{™c€z£f}y°h{y¿izyÖi||ða~~úZ~}þU~}ÿQ~}ÿQ~}ÿQ~}ÿQ~}ÿQ~}ÿQÿcÿrÿÿü˜ì¡ߪѬ&Ǩ7 ¼£D³žO'ª™X3£”`=œhE–ŒoL‰vR‹†}W†„…[‚‚Ž_~€—cz¡fw~­hu~½is~Òivîbx‚ú[x‚þVyÿQyÿQyÿQyÿQyÿQyÿQÿeÿuÿƒÿõ›è¦Ù¯̯$«5 ¸§C®¢N&¦V1ž™^;—•fD‘mK‹ŽtQ†Œ{V‰ƒ[|‡‹_x†•bt„Ÿeqƒ«hnƒºimƒÎio†ëcr‡ù\s†ýVs…ÿRs…ÿRs…ÿRs…ÿRs…ÿRs…ÿRÿhÿx ÿ† ö“ Þ  Ö© Ò² Dz"½¯3 ³«Aª§L$¡¢U0™ž]:’šdB‹—kI…”rP€’yU{Zv‰^rŒ’bnŠek‰©gh‰¸hg‰Ëhi‹éclù\mŒýWmŠÿRmŠÿRmŠÿRmŠÿRmŠÿRmŠÿRÿkÿ{ ÿŠ â˜Ö£Ь ˵ Á¶¸´1 ®°?¤¬J"œ¨S.”¤[8Œ b@†žiH€›pNz™wSu–~Xp”‡\l“`h’›cd‘§eb¶f`‘Éfb’çbe”ø\g’ýWg‘ÿRg‘ÿRg‘ÿRg‘ÿRg‘ÿRg‘ÿRÿnÿ ñŽÙ›ϦɯĹ»º²¸/¨µ=Ÿ±H –®Q+ŽªY5†§`>€¥gEz¢nKt uQož|Ujœ…Yf›Ž]bš™`^™¦b\™´cZ™Çc[šå`_›÷[`šþVa˜ÿRa˜ÿRa˜ÿRa˜ÿRa˜ÿRa˜ÿRÿr ÿƒß“ÑŸɪÁ²»½´¿«¾,¢»:™¸EµO(‡²W2€¯^:y­eBs«lHn©sMi§zQd¦ƒV_¤Y\£˜\X£¤^V£³_U£Æ_U¤ä]X¤öXZ£ÿT[¡ÿP[¡ÿP[¡ÿP[¡ÿP[¡ÿP[¡ÿPÿwð‰Ö˜Ë¤Á­¹¶²À«Å£Å(›Â7‘ÀC‰½L$€ºU.y¸\6r¶c=m´jCg³qHb±yL^°PZ¯‹TV¯—VS®£XP®²YO®ÆYO®äXQ®öTS®ÿPT¬ÿMT¬ÿMT¬ÿMT¬ÿMT¬ÿMT¬ÿMÿ}ßÎè¹°°º¨Ä¡Ì›Ì#’Ê3 ‰È?ÆIyÄR(rÂZ0kÁa7f¿hëÀ.=ìÛ.=êï.=èü.=çÿ-=çÿ-=çÿ-=çÿ-=çÿ-=çÿ-ÅŸµ©¨±œ¼Ç„Òzßtômô fô*_ô4Zõ= TõEOõLLõUIö]FöeDönAöw?÷=÷;÷™ 9ø¦!8øµ"7ùÈ"6ùã"6øó"6÷ü"6÷ü"6÷ü"6÷ü"6÷ü"6÷ü"·¦©®œ¹ÄƒÏwÛoö gÿ`ÿZÿ'Tÿ0Oÿ8Jÿ@ FÿH CÿO@ÿV=ÿ^;ÿe8ÿn6ÿw4ÿ‚2ÿ0ÿ›/ÿ©.ÿ·-ÿÈ,ÿá,ÿï,ÿï,ÿï,ÿï,ÿï,ÿï««žµÁ‚ÌuÙiäaÿ [ÿTÿNÿ"Iÿ+Dÿ2@ÿ:<ÿA9ÿG6ÿN 3ÿT 1ÿ[ .ÿb ,ÿk )ÿu 'ÿ€%ÿ$ÿš#ÿ¦"ÿ³!ÿÁ!ÿÐ!ÿÐ!ÿÐ!ÿÐ!ÿÐ!ÿП²‘¾ƒÊuÖgâ[ñTÿNÿHÿBÿ=ÿ$9ÿ+5ÿ21ÿ8.ÿ>+ÿC(ÿI%ÿO#ÿV!ÿ]ÿeÿoÿz ÿ‡ ÿ” ÿŸ ÿª ÿ³ ÿ³ ÿ³ ÿ³ ÿ³ ÿ³ “»„ÇuÓgáXèNûHÿAÿ ;ÿ6ÿ1ÿ-ÿ")ÿ(%ÿ-"ÿ2ÿ8ÿ=ÿBÿHÿNÿUÿ]ÿg ÿr ÿ} ÿ‰ ÿ“ ÿœ ÿœ ÿœ ÿœ ÿœ ÿœÿ?*ÿ?0ÿD0ÿH3ÿI9ÿHBÿFM ÿE[ÿCiÿAwÿ@…ÿ?‘ÿ>›ÿ>¤ÿ=«ÿ=³ÿ=ºÿ=Ãÿ<Ìÿ<Ûÿ<çÿ<ðÿ<øÿ=ÿÿ=ÿÿ=ÿÿ=ÿÿ=ÿÿ=ÿÿ=ÿÿ=ÿÿ=ÿÿ=ÿÿ@*ÿA.ÿG.ÿJ1ÿL7ÿK@ÿJK ÿHYÿFgÿDuÿC‚ÿBÿA™ÿA¢ÿ@©ÿ@±ÿ?¸ÿ?Àÿ?Éÿ?Öÿ?åÿ?ïÿ?÷ÿ?þÿ?ÿÿ?ÿÿ@ÿþ@ÿþ@ÿþ@ÿþ@ÿþ@ÿþ@ÿÿ@*ÿC,ÿI,ÿM/ÿO5ÿP>ÿNI ÿLVÿJdÿHrÿGÿF‹ÿE–ÿDŸÿD§ÿC®ÿCµÿB½ÿBÆ ÿBÑ ÿBâ!ÿBí!ÿBõ!ÿBý!ýBÿ!ûCÿ úCÿùCÿùCÿùCÿùCÿùCÿùCÿÿA)ÿF*ÿL)ÿQ,ÿS2ÿT<ÿTG ÿQRÿO`ÿMoÿL|ÿJˆÿI’ÿH›ÿG£!ÿG«"ÿF²#ÿFº#ÿFÃ$ÿEÍ%ÿEÞ%ÿEê&üEô&ùEü&öEÿ&õFÿ$ôFÿ#óGÿ!óGÿ!óGÿ!óGÿ!óGÿ!óGÿ!ÿB(ÿI'ÿP&ÿU(ÿX/ÿZ9ÿZD ÿWOÿU\ÿSjÿQwÿOƒÿNŽ!ÿM—#ÿLŸ%ÿK§&ÿJ®'ÿJ¶)þI¾*ýIÉ*úHÙ+÷Hç,ôHò,ñHû,ïIÿ*íJÿ(ìJÿ'ëKÿ%ëLÿ%ëLÿ%ëLÿ%ëLÿ%ëLÿ%ÿC(ÿM$ÿT#ÿZ%ÿ^,ÿ`6ÿ`A ÿ^Lÿ[WÿYfÿWrÿU~"þS‰%üQ“(úP›*ùO£,÷Nª.öM²/ôLº0óLÄ2òKÑ3îKä4êJð4çKú3åMÿ0äNÿ-âOÿ+áPÿ)áPÿ)áPÿ)áPÿ)áPÿ)áPÿ)ÿF%ÿP!ÿX ÿ_!ÿd*ÿf3ÿf= ÿeHÿbSÿ`aü]m øZy%õX„)óV-ðT–0îRž3íQ¥5ëP­7éNµ9çN¿;æMÌ<ãLà=ßMî<ÜOù9ÙQÿ5ÖRÿ2ÔSÿ0ÓTÿ-ÓUÿ-ÓUÿ-ÓUÿ-ÓUÿ-ÓUÿ-ÿJ#ÿTÿ\ÿdÿi'ÿl0ÿm: ÿlDýjOøg\óch"ï`t(ë]~.èZˆ3åW‘7ãU™:àS >ÞR¨@ÜQ±AÙP»BÖPÈCÓPÜDÏPìCÌRø?ËUÿ;ÉWÿ7ÈXÿ4ÇYÿ2ÆYÿ1ÆYÿ1ÆYÿ1ÆYÿ1ÆYÿ1ÿM ÿWÿ`ÿiÿo%ÿr-ÿt7ýsAöqKðnXêjd$åen+àay3Ü^‚8Ø\‹<ÓZ”?ÐXœBÎW£DËU¬FÉUµGÇTÀIÅTÐIÂSæIÀVõE¾Yÿ@½[ÿ<¼\ÿ9»]ÿ5º]ÿ5º]ÿ5º]ÿ5º]ÿ5º]ÿ5ÿPÿ[ÿdÿmÿt"ÿx*ÿz3öz= ïxGçuTáp_%Úkj-Ógt4Îd}:Êa†?Ç_ŽBÄ]–EÁ[žH¿Z¦J¼Y¯LºXºM¸XÈN¶XßN´YðK³\ýE²_ÿ@²`ÿ<°aÿ9°aÿ8°aÿ8°aÿ8°aÿ8°aÿ8ÿRÿ^ÿhÿrÿyÿ~'ù€0ð9 ç€Cà|PÖw[$Ïrf.Émo5Äjx;Àg@¼d‰D¹b‘H¶`™J³_¡M±]ªO®\´Q¬\ÁRª\ÔR¨]ëP¨`úI¨cÿD¨dÿ@¦eÿ<¦eÿ;¦eÿ;¦eÿ;¦eÿ;¦eÿ;ÿUÿaÿlÿvÿ}ÿƒ#ô†,êˆ5á‡@Ö‚LÍ}X$Æwb-Àsk5»ot<·l|A³i„F¯gŒI¬e”L©cœO¦b¥Q¤a¯S¢`¼U `ÍUž`æTžd÷MŸgÿGŸiÿCžiÿ?iÿ=iÿ=iÿ=iÿ=iÿ=ÿWÿcÿoÿyÿû‡ ïŒ'äŽ0Ú= χJÇ‚U#¿}_-¹xh5³tp<¯qxB«n€F§lˆJ¤iN h˜Qf¡S›e«U˜d¸W–dÈX”dáX•hôP–kÿJ—lÿE–mÿA–mÿ@–mÿ@–mÿ@–mÿ@–mÿ@ÿYÿfÿrÿ}ÿ…öŒê‘"ß”+Ó‘: ÉŒGÀ‡S"¹‚\,²}e5­ym<¨uuB£s}G p„KœnŒN™l•R•kžT’i¨Wi´YŽhÃYŒhÜZlòSnÿLpÿGqÿCqÿAqÿAqÿAqÿAqÿAÿ[ÿhÿuÿ€ÿ‰òå–Ù™&Í•8 ÄE»‹Q!³†Z,­‚c4§~k;¡zrAwzF™uK•s‰O’q‘RŽo›U‹n¥Xˆm°Z†l¿[„mÕ[†oïUˆrýN‰tÿI‰tÿDˆtÿCˆtÿCˆtÿCˆtÿCˆtÿCÿ]ÿkÿxÿƒýŒí”àšÓœ$È™6 ¿”C¶O ®ŠX+§†a3¡‚h;œpA—|wF“y~Kw†O‹uRˆs˜V„r¢Xq®Zq¼\}qÐ\sìVvûOƒxÿJƒxÿE‚xÿD‚xÿD‚xÿD‚xÿD‚xÿDÿ_ÿm ÿz ÿ… ò ç˜ ÛŸΟ"Ä4º˜B²“MªV*£Š_2œ†f:—ƒm@’€uE~|J‰|„N…zŒR‚x•V~w Y{v«[yuº\wvÍ\xwêX{zúQ}|ÿK}|ÿF}|ÿE}|ÿE}|ÿE}|ÿE}|ÿEÿaÿo ÿ} õˆ ߓ؛ Ó¢ É£¿ 2¶œ@­—K¥“T(ž]1˜‹d9’ˆk?…rEˆƒzJ„€N€ŠR|}“Ux|Xu{©[rz¸\qzÊ\r|èXu~ùQw€ÿLw€ÿGw€ÿFw€ÿFw€ÿFw€ÿFw€ÿFÿdÿr ÿåŒØ–Ñž Î¥ Ħº¤/± >¨œI ˜S'™”[0“b8i>ˆŠpDƒˆxI~†Mz„ˆQv‚‘Ur›Xo€§Zlµ\k€È\kåYnƒ÷Rq„ÿMr„ÿHr„ÿGr„ÿGr„ÿGr„ÿGr„ÿGÿf ÿuöƒÜҘ̡Ȩ¿©µ¨-¬¤<¤ GœQ%”™Y/Ž–`6ˆ“g=‚nC}ŽvHyŒ}LtŠ…PpˆTl‡™Wi†¥Yf†³[e†Å[e†ãYhˆöRkŠÿMlŠÿHl‰ÿGl‰ÿGl‰ÿGl‰ÿGl‰ÿGÿi ÿxå‡Ö’ÍœƤÁ«¹­°¬+§©:Ÿ¦E–¢O#ŸW-ˆœ_5‚™f;}—lAx•sFs“{Kn‘ƒOjRfŽ—Uc£X`±Y_ÃZ^àXbõRdÿMfÿHfÿGfÿGfÿGfÿGfÿGÿlþ|ފЖÈŸÀ§¹®²²ª±(¡¯7 ™¬C‘¨M!‰¥U*‚£\2| c9wžj>rœqDmšyHh™Ld—‹P`–•S]–¢UZ•°WY•ÁWX•ÞV[–óP]—ÿL_—ÿG`–ÿF`–ÿF`–ÿF`–ÿF`–ÿFÿpëÖÊšÁ£¹ª±²ª·£·$›µ4 “²@НJƒ­S'|«Z.v¨a5p§h;k¥o@g£wDb¢H^¡‰LZ ”OWŸ QTŸ®SSŸÀSRŸÝRUŸóNW ÿJY ÿFYŸÿEYŸÿEYŸÿEYŸÿEYŸÿEÿuà†Ï“ÄŸº§±®©¶¡½ ›½ ”¼1‹º=ƒ·H|µP"u³X*o²_0j°f6e¯m;`­u?\¬~CX«‡GUª“JQªŸLOª®MMªÀMMªÜMNªòIPªþFR©ÿCR©ÿBR©ÿBR©ÿBR©ÿBR©ÿBò|׌ș½£²«©² »—Ä ’Å‹Ä,ƒÂ: {ÁDt¿Nn½V$h¼]*c»d0_ºl4Z¹t9V¸|K´ÿ=K´ÿ=K´ÿ=K´ÿ=K´ÿ=âƒÍ’ÁŸ´§ª¯ ¸–ÀŒÊ†ÍÍ&zÌ5sËAlÊJfÉSaÈ[#\Çb(XÆj,TÆr0PÅ|3Mņ6JÄ’9GÄŸ;EÄ®å›#<åª$;æ¼$:æÓ$9åî$9ãú#9âÿ$9âÿ$9âÿ$9âÿ$9âÿ$9âÿ$¿ž¯¦£®—¸ŠÂ~ÌsÖiå dï_ð Yð+Tð5Oð>KñF GñN DñWBñ_?òg=òp:ò{8ó‡6ó”5ô¢3ô±2õÅ1õâ1ôñ1ñþ1ñÿ1ñÿ1ñÿ1ñÿ1ñÿ²¤¥«˜¶‹À~ÊqÕeÞ^õ YüSüNü'Jý0Eý9Aý@>þH;þO 8ÿW 6ÿ^ 3ÿg 1ÿp .ÿ|,ÿ‰+ÿ–)ÿ¤(ÿ´'ÿÇ'ÿá&ÿò&ÿö&ÿö&ÿö&ÿö&ÿö§©™³‹¾~ÉpÓdÞXçRÿ MÿGÿCÿ">ÿ*:ÿ27ÿ93ÿ?0ÿF-ÿM+ÿT(ÿ[&ÿc#ÿm!ÿy ÿ‡ ÿ• ÿ£ ÿ± ÿÀ ÿÖ ÿß ÿß ÿß ÿß ÿß ›±¼~ÇpÒcÞUäKõFÿ@ÿ;ÿ7ÿ3ÿ#/ÿ)+ÿ0(ÿ5%ÿ;"ÿAÿGÿNÿUÿ^ÿhÿtÿ‚ÿÿÿ©ÿµÿºÿºÿºÿºÿºŽºÅpÑbÞTåFë?þ9ÿ4ÿ /ÿ+ÿ'ÿ#ÿ!ÿ%ÿ*ÿ/ÿ4ÿ:ÿ@ÿFÿN ÿV ÿ`ÿlÿxÿ†ÿ‘ÿÿ¡ÿ¡ÿ¡ÿ¡ÿ¡ÿ6-ÿ9.ÿ>.ÿ@2ÿ@8ÿ>Aÿÿ@Jÿ>W ÿ*ÿC*ÿF-ÿG2ÿF<ÿEHÿCU ÿAb ÿ?pÿ=}ÿ<‰ÿ;“ÿ;œÿ:¤ÿ:«ÿ:²ÿ:¹ÿ9Âÿ9Ìÿ9Ýÿ9éÿ9óÿ:ûü:ÿú:ÿù:ÿø:ÿø:ÿø:ÿø:ÿø:ÿø:ÿÿ9+ÿA'ÿF'ÿJ)ÿK/ÿL9ÿKEÿHQ ÿF^ÿDlÿByÿA…ÿ@ÿ@˜ÿ? ÿ?§ÿ>®ÿ>¶ÿ>¾ÿ>Èÿ=Öþ=æû>ñø>úõ>ÿó>ÿò?ÿñ?ÿñ?ÿñ?ÿñ?ÿñ?ÿñ?ÿÿ=(ÿE$ÿJ#ÿN%ÿQ,ÿR6ÿQAÿOM ÿLZÿJgÿHtÿG€ÿF‹ÿE”ÿDœÿC¤þC«ýB²üBº úBÄ ùBÐ!öAâ!òBî"ïBù"íBÿ ëCÿêCÿéDÿèDÿèDÿèDÿèDÿèDÿÿ@%ÿH!ÿO ÿS!ÿW)ÿY3ÿX>ÿVI ÿRUÿQcÿOoþM{ûK†ùJ÷I˜!öHŸ"ôG¦$óG®%ñF¶&ðF¿'ïEË(ìEÞ)èEì)åFø(âGÿ&áHÿ$ßIÿ"ÞIÿ ÝIÿÝIÿÝIÿÝIÿÝIÿÿC"ÿLÿSÿYÿ]&ÿ_0ÿ_:ÿ]E ÿZPýX^øUjõSvòQ€!ïOŠ$íM“&ëLš)éK¢+çJ©,åI±.äH»/âHÇ1àHÙ1ÜHê1ØIö.ÔKÿ+ÒLÿ)ÐMÿ&ÏNÿ%ÎNÿ#ÎNÿ#ÎNÿ#ÎNÿ#ÎNÿ#ÿGÿPÿWÿ^ÿc#ÿf,ÿf6ÿdA úbLô_Yï\eëYp çV{%äT„)áQ-ÞP•0ÜO2ÙN¥3ÖM­5ÓM·6ÑLÂ7ÏLÑ8ÌLæ8ÉMô5ÇOÿ1ÅQÿ.ÄRÿ+ÃSÿ)ÂSÿ'ÂSÿ'ÂSÿ'ÂSÿ'ÂSÿ'ÿJÿTÿ\ÿcÿi ÿl)ÿm2ùl= òiGëfTåc`à_k"Û\u(ÖY-ÒWˆ0ÏU3ÌT˜6ÊS 8ÇR§:ÅQ°;ÃP»<ÁPÉ=¿Pß=¼Qð;ºSü7¹Uÿ3¸Wÿ/·Xÿ-·Xÿ+·Xÿ+·Xÿ+·Xÿ+·Xÿ+ÿMÿWÿ`ÿhÿnÿr%ûs.òs8éqC ânPÛi\Óef$Îbp*É_z/Æ\‚3Ã[Š6ÀY’9½Xš;»V¢>¸U«?¶UµA´TÂB²TÔB°UêA®Wù<®Yÿ7­[ÿ3­\ÿ0­]ÿ.­]ÿ.­]ÿ.­]ÿ.­]ÿ.ÿPÿZÿdÿmÿsÿw!ôy)êz3âx? ÙtLÏpXÉkb$Ähl+¿eu0»b}5¸`…8µ^<²\•>¯[A­Z¦C«Y¯D©Y¼E§XÌF¤XåF¤[ö@£^ÿ;£_ÿ7£`ÿ3£aÿ1£aÿ1£aÿ1£aÿ1£aÿ1ÿSÿ]ÿhÿpÿwû|î$ä€-Ú;ÏzIÇuTÁq_$»mh+¶jp1²gy6¯e€:«cˆ=¨a@¦`˜C£^¡E ^«Gž]·Hœ]ÆIš\ßIš_òDšbÿ>šcÿ9›eÿ6›eÿ3›eÿ3›eÿ3›eÿ3›eÿ3ÿUÿ`ÿkÿtÿ{õè„Þ‡'Ñ„7ÈFÀ{Q¹v[#´re+¯om1ªlu6§j|:£h„> fŒAd”DšcG—b§I•a²K“aÁL‘aØL‘cïG’eýA’gÿ<“iÿ8“jÿ5“jÿ5“jÿ5“jÿ5“jÿ5ÿWÿc ÿn ÿwÿð…ã‰Ö‹#ˈ5„Cº€O³{Y#­wb*¨tj1£qq6Ÿny;œl?˜jˆB•i‘E’gšHf£Je¯LŠe½M‰eÑN‰gìJŠiûC‹kÿ>Œmÿ:Œnÿ7Œnÿ7Œnÿ7Œnÿ7Œnÿ7ÿYÿe ÿq ÿz ñ‚ è‰ ÝŽÏ Æ2½‰Aµ„M®€V"§|_*¢xg0uo6™sv:•q}?’o…BŽmŽF‹l–Iˆj K…j¬MƒiºOiÌOjèLƒmùE„oÿ?…pÿ;†qÿ8†qÿ8†qÿ8†qÿ8†qÿ8ÿ[ÿgÿsó}Þ†ÙŒ Õ‘ Ê’Á0¸?°ˆJ©„T!¢€])}e0˜zl5“ws:u{>Œs‚Bˆr‹F…p”I‚ožLn©N|m·O{mÉPznæM|qøF~sÿAtÿ=€uÿ:€uÿ:€uÿ:€uÿ:€uÿ:ÿ]ÿjÿvä€Ù‰ÒÏ” Å–¼”.³‘= «H¤ˆR ž…[(˜c/“~j5Ž|q9Šzx=†x€BƒvˆEu‘I|s›Lyr§NvrµPtrÆPtrãOvuöGxwÿBzxÿ>{yÿ:{yÿ:{yÿ:{yÿ:{yÿ:ÿ_ ÿlõyÞƒÓ‹Í’É—À™·˜,¯•; §‘GŸP™‰Y'“†a.Žƒh4‰o9…v=}~A}{†EyzIvx™Lsw¥Npw²PnwÄPmwàOpyõHr{ÿCt|ÿ>u}ÿ;u}ÿ;u}ÿ;u}ÿ;u}ÿ;ÿa ÿoè|نώȕڻœ³œ*ª™9 ¢•E›‘N”ŽW&Ž‹_-‰ˆf3„†m8€„t={‚{Aw€„EtHp}—Km|£Nj|°Oh|ÁPg|ÝPj~óIm€ÿCnÿ?oÿlBhŒ‰FeŠ“Ia‰ŸK^‰¬M]‰½N\‰ÖM^ŠðH`‹þCb‹ÿ?cŒÿ‹£H„ Q ~žY'xœ`-sšg2o˜n7j–u]“ÿ;]“ÿ;]“ÿ;]“ÿ;]“ÿ;ÿnà~΋ĕº±£©©¡® ›¯”®.Œ¬; …ªF~¨Nx¦V#r¤]*m¢d/i¡k4dŸs8`ž{<\…?YœBU›œES›ªGQ›ºGP›ÑGQ›îDS›ü@U›ÿΨ&<κ&<ÏÔ&<Íï%;Ìû%;Ëÿ%;Êÿ%;Êÿ%;Êÿ%;Êÿ%;Êÿ%Óµž¨¦®‘¶…¿yÇoÎdÖ ^Þ[Þ WÞ-Sß:PßDLßN IßW Fß_CßhAßq>ß|<߉:à–8à¥7à·6áÍ6ßì5Þù4Ýÿ4Üÿ4Üÿ4Üÿ4Üÿ4Üÿ¹œª¤ž«’µ…¾yÇmÏbÖXáUêQë Më+Ië5Eì>BìG?ìO=íX :í` 8íj 6ît 3î€2îŽ0ï.ï­-ðÀ-ðÞ,îñ,ìþ,ëÿ,ëÿ,ëÿ,ëÿ,ëÿ­¢ ©“³†½yÆlÏ`ØUÞNó J÷FøCø'?ø0;ù88ù@5úG3úO0ûW.û_+üi)üt'ü‚ %ý $ý  #þ° "þÄ !ÿà !ýò üü üü üü üü üü ¢§•±‡»yÆlÏ_ÙRßHèCÿ?ÿ;ÿ7ÿ!4ÿ)0ÿ0-ÿ7*ÿ>'ÿD%ÿK"ÿS ÿ\ÿfÿrÿ€ÿÿŸÿ¯ÿÀÿÖÿéÿéÿéÿéÿé—¯ˆºzÅlÏ^ÚPàDæ<õ7ÿ3ÿ /ÿ+ÿ(ÿ!%ÿ'!ÿ-ÿ2ÿ8ÿ?ÿFÿMÿVÿ`ÿl ÿ{ ÿ‹ ÿš ÿ¨ ÿµÿÂÿÂÿÂÿÂÿÂЏ{ÃlÎ^ÛOâBç6ì1ÿ,ÿ'ÿ#ÿ ÿÿÿÿ!ÿ&ÿ,ÿ1 ÿ7 ÿ>ÿFÿOÿYÿfÿtÿ‚ÿÿœÿ¦ÿ¦ÿ¦ÿ¦ÿ¦ÿ./ÿ3,ÿ7-ÿ80ÿ76ÿ4?ÿ1Kÿ/Xÿ,fÿ*t ÿ) ÿ( ÿ(— ÿ(Ÿ ÿ(¦ ÿ'­ ÿ'´ ÿ'» ÿ'Ä ÿ'Î ÿ(Þ ÿ(é ÿ(ó ÿ(û ÿ(ÿ ÿ)ÿ ÿ)ÿ ÿ)ÿ ÿ(ÿ ÿ(ÿ ÿ(ÿ ÿ(ÿ ÿ(ÿ ÿ0-ÿ6*ÿ9*ÿ;.ÿ:4ÿ8<ÿ6Iÿ3Vÿ1c ÿ/q ÿ-~ ÿ-Š ÿ,” ÿ,œ ÿ,¤ ÿ,« ÿ,± ÿ,¹ ÿ+Á ÿ,Ë ÿ,Ú ÿ,ç ÿ,ñ ÿ,ú ÿ,ÿ þ-ÿ ý-ÿ ý-ÿ ý,ÿ ý,ÿ ý,ÿ ý,ÿ ý,ÿ ÿ2+ÿ9(ÿ=(ÿ?*ÿ>0ÿ=:ÿ}ÿ=‡ÿ=‘þ<™ý< ü;§ú;®ù;¶ø;¿ö;Êô;Üð;êí;öê;ÿè<ÿç<ÿæ=ÿå=ÿå=ÿå=ÿå=ÿå=ÿÿ="ÿDÿIÿMÿP&ÿQ0ÿP;ÿNFÿKS ÿH`ÿFlûExøD‚öCŒôB”óAœñA£ï@ªî@²í?»ë?Æé?Õå?èâ@ôß@þÝAÿÛBÿÙBÿØBÿØBÿØBÿØBÿØBÿÿ@ÿHÿNÿRÿV#ÿX,ÿW7ÿUBÿRM ùPZõMgñLrîJ}ëH†éGçF—åEž ãD¦"áD®#àC·$ÞCÂ%ÜCÐ&×Cå&ÓDó$ÐEþ"ÍFÿ ÌGÿÊGÿÉHÿÉHÿÉHÿÉHÿÉHÿÿDÿLÿRÿXÿ]ÿ_(ÿ^2ý]=öZI ðWUêUbæRmâPwßNÜLŠ"ÙK’$ÕJš&ÓI¡(ÑI©)ÏH²*ÍH¼+ËHÉ,ÈHß,ÅHï+ÂJü(ÀKÿ%¿Lÿ"¾Mÿ ½Mÿ½Mÿ½Mÿ½Mÿ½MÿÿGÿOÿVÿ^ÿbÿe$þe-ôd8íaC æ_Qà\]ÚXhÔVrÐT{"ÌR„&ÊPŒ(ÇO”*ÅN›,ÃN£.ÁM¬/¿L¶0½LÂ1»LÓ2¸Lé1¶Nø-´Pÿ*³Qÿ'³Rÿ$²Rÿ"²Rÿ"²Rÿ"²Rÿ"²Rÿ"ÿJÿSÿ[ÿbÿhÿjök(ìk2äi>ÜfL ÓbXÍ_cÈ\m ÄZv$ÁX~(¾V†+»UŽ.¹S–0¶Rž2´R¦3²Q°5°Q¼6®PË7¬Pã7ªRô3©Tÿ.¨Vÿ+¨Wÿ(¨Wÿ%¨Wÿ%¨Wÿ%¨Wÿ%¨Wÿ%ÿMÿVÿ_ ÿgÿlûpïq"äq,Ûp:ÑlH ÉhTÃe_¾bh!º_q&¶]y*³[-°Z‰0®X‘3«W™5©V¡7§V«8¥U¶:£UÅ;¡UÝ;ŸVð7ŸXþ2ŸZÿ.ž[ÿ+ž\ÿ(ž\ÿ(ž\ÿ(ž\ÿ(ž\ÿ(ÿPÿY ÿc ÿk ÿpõtèvÝw%Ñv6ÈrD ÁnP»k[¶gd!±em'­bu+ª`|/§_„2¤]Œ4¢\”7Ÿ[9Z¦;šY±=˜Y¿>—YÓ>•Zì;•]û5–^ÿ1–_ÿ-–`ÿ*–`ÿ*–`ÿ*–`ÿ*–`ÿ*ÿRÿ\ ÿf ÿn öt ïxá{Ô| Ê{3ÁwA ºtM´pX®la!©ji'¦gq+¢ex/Ÿd€3œbˆ6™a8–_™;”^¢=‘^­?]»@]ÍAŒ^è?aù8bÿ3Ždÿ0Ždÿ,Žeÿ,Žeÿ,Žeÿ,Žeÿ,ÿUÿ_ÿiôrâxÛ| Ù ÍÄ0»|? ´xK­uU¨q^!£nf&Ÿln+›ju/˜h}3•g„6’eŒ9d•<ŒcŸ>‰bª@‡a·B…aÉB„bäA…d÷;†fÿ5‡gÿ1‡hÿ.‡iÿ-‡iÿ-‡iÿ-‡iÿ-ÿW ÿaþläuÛ{Ó€Ѓ Ç…¾„-¶< ¯}H¨yR¢v[ sc&™pk+•nr/‘my3Žk6‹i‰:ˆh’<…gœ?‚f§A€f´C~fÅD|fáC~hõ<jÿ7€kÿ3lÿ/lÿ/lÿ/lÿ/lÿ/ÿY ÿcôoßxÔ΃ʇˆ¹‡+±…:ªF£~PzY˜wa%“uh*so/‹qw3ˆo~6…n†:‚l=k™@|j¥Byj±DwjÂDvjÝDxló>ynÿ8zoÿ4{pÿ0|pÿ0|pÿ0|pÿ0|pÿ0ÿ[ÿfçrÚ{Ï‚ɇÄŠ¼Œ´‹(¬‰8¥…Dž‚N˜W“|_$Žyf*Šwm.†ut2‚t|6r„9|q=yp—@vo¢Bsn¯DqnÀEpnÙErpñ?srÿ9usÿ5vtÿ1vtÿ1vtÿ1vtÿ1vtÿ1ÿ]ÿiâtÔ}Ë…ÄŠ¿·°&¨5 ŠBš†L“ƒUŽ]$‰~d)…|k-zr2}xy5zw‚9vv‹ HŠŽQ„‹Y!‰`'{‡g+w…n0s„u4o‚}7k‡;h€‘>eœAb~©C`~¹D_~ÏD`ì@b€ü:d€ÿ6eÿ3fÿ2fÿ2fÿ2fÿ2ÿdårÓ~LJ¾¶•®™¦›  œ™›.’™; ‹–F…”O‘Wz^%uŽe*qŒl.mŠs2i‰{6fˆ„9b†=_…š?\…¨AZ…·BY…ÌBZ…ê?\†û:^†ÿ6_‡ÿ2_‡ÿ2_‡ÿ2_‡ÿ2_‡ÿ2ýhàv͂Œ¹“°™¨Ÿ  ™¡“ +ŒŸ8…CšLy˜Tt—\"p•c'k“j,g’q0d‘y3`‚7\Ž:Y™=W¦?T¶@SË@Té=Vú9Wÿ5YŽÿ2YŽÿ1YŽÿ1YŽÿ1YŽÿ1ímÙ{ȇ½´˜ª¡¡—¦‘§Œ§'…¦5¤@ y¢Js RnŸYi`$eœg(a›o,^šw0Z˜€3V—‹6S——9Q–¥;O–´º³&=ºÈ&=ºè&=¸ù%=·ÿ$=¶ÿ#=¶ÿ#=¶ÿ#=¶ÿ#=¶ÿ#Lj¹•¬¡¤–«Š²¹s¿hÆ`Ê^Ê[Ê,WÊ8TÊCPÊLMÉU JÉ]GÉfDÉoAÉy?È…<È“:È¢9ɳ8ÉÉ8Èè7Çù7Åÿ6Äÿ6Äÿ6Äÿ6Äÿ6Äÿ¾‘°›¤£˜ªŒ²€¹tÀhÇ]ÍSÓ O×MØ"KØ0IØ<FØFDÙOAÙX?Ùa<Ùk :Ùv 7Ù‚5Ú4Ú 2Ú±1ÛÇ1Úç0Øö0Öÿ/Ôÿ/Ôÿ/Ôÿ/Ôÿ/Ôÿ³š¦¡š©±€ºtÁhÉ\ÏRÕHÜEåCåAæ*>æ5;ç>9çG7çP4èY2èb0èm.éy,é‡+ê– )ê§ (êº 'ëÖ 'éð 'çý &æÿ &æÿ &æÿ &æÿ &æÿ ¨ œ§°‚¹tÂhÊ[ÑO×EÝ>î <ò9ó6ó%4ô.1ô7.õ?,õG)öO'öW%÷a#÷l!øzø‰ùšù«úÀúÞùò÷ýöÿöÿöÿöÿž¦‘¯ƒ¹uÂgËZÓMÚBß8å5û1ÿ.ÿ+ÿ)ÿ&%ÿ-#ÿ4 ÿ;ÿCÿKÿSÿ]ÿjÿxÿˆÿšÿ«ÿ¾ÿÕÿíÿðÿðÿðÿð“®„¸vÂgÌZÕLÜ?á5æ-ô*ÿ&ÿ #ÿ ÿÿÿ#ÿ)ÿ/ÿ5ÿ=ÿE ÿN ÿXÿeÿtÿ…ÿ–ÿ¦ÿµÿÆÿÊÿÊÿÊÿʆ·wÁhÌZ×KÞ>ä2é'í#ÿÿÿÿ ÿÿÿ ÿ ÿ"ÿ(ÿ.ÿ5ÿ=ÿGÿRÿ^ÿmÿ~ÿŽÿ›ÿ©ÿ«ÿ«ÿ«ÿ«ÿ*-ÿ.+ÿ0+ÿ0.ÿ.5ÿ)=ÿ%Iÿ#Wÿ!dÿrÿÿŠÿ”ÿœÿ£ÿªÿ±ÿ¸ÿ¿ÿÉÿÖÿåÿïÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,+ÿ0(ÿ3(ÿ3+ÿ11ÿ-:ÿ+Gÿ(Tÿ&aÿ$oÿ"|ÿ"‡ÿ"‘ÿ!™ÿ!¡ÿ!§ÿ!®ÿ!µÿ!¼ÿ!Æÿ!Ñÿ!âÿ"íÿ"÷ÿ"ÿý"ÿü"ÿü"ÿü"ÿû"ÿû"ÿû"ÿû"ÿÿ.(ÿ3%ÿ6%ÿ7'ÿ5-ÿ48ÿ2Dÿ/Qÿ,^ÿ*kÿ)wÿ(ƒÿ'ÿ'– ÿ' ÿ'¤ ÿ'« ÿ'² ÿ'¹ ÿ' ÿ'Í ÿ'Þ ÿ'ë ü'öù(þ÷(ÿö(ÿõ(ÿõ(ÿõ(ÿõ(ÿõ(ÿõ(ÿÿ2%ÿ7"ÿ:!ÿ;#ÿ;)ÿ;4ÿ9@ÿ6Mÿ4Zÿ1fÿ0sÿ. ÿ.‰ ÿ.’ ÿ-™ ÿ-¡ ÿ-§ ÿ-® ÿ-µ ÿ-¾ þ-É û-Ù ø-è ô.ô ñ.þ ï.ÿ î.ÿ í.ÿ ì.ÿ ì.ÿ ì.ÿ ì.ÿ ì.ÿ ÿ5"ÿ;ÿ?ÿ@ÿB&ÿB1ÿ@<ÿ>Hÿ;Uÿ9bÿ7n ÿ6y ÿ5„ ý4 ü4• ú4œù3£÷3ªö3²õ3ºó3Åò3Òî3åê4òç4ýå4ÿä4ÿâ5ÿâ5ÿ á5ÿ á5ÿ á5ÿ á5ÿ ÿ9ÿ?ÿCÿFÿI#ÿI-ÿH8ÿEDÿCPÿ@] û>i ø=t õ<ó;ˆñ;ï:˜í:Ÿì9¦ê9®é9¶ç9Áæ9Îâ9ãÞ9ñÛ:üØ:ÿÕ;ÿÓ;ÿÒ;ÿÒ;ÿÒ;ÿÒ;ÿÒ;ÿÿ=ÿCÿHÿLÿOÿP(ÿO3ÿM?ûJJõGW ñFd íDoéCyçBƒäA‹â@“à?›ß?¢Ý>ªÛ>³Ø>½Ö>ÊÒ>ßÎ>ïË?ûÉ@ÿÇ@ÿÆAÿÅAÿÄAÿÄAÿÄAÿÄAÿÿAÿGÿLÿRÿVÿW$ÿV.øT9ñQEëOR æM^ áKiÝItÙH}ÕF†ÒEŽÐE–ÎDÌD¥ÊC­ÈC¶ ÆCÃ!ÅCÓ!ÁCé!¾D÷¼EÿºFÿ¹Gÿ¸Gÿ¸Gÿ¸Gÿ¸Gÿ¸GÿÿDÿKÿQÿWÿ[ÿ]ù](ï[3çY?àWMÚTY ÓRdÎPnÊNwÇL€ÅKˆÂJ ÀJ—!¾IŸ#¼H§$ºH°%¸H¼&·HË'´Gã'²Ió%°Jÿ"®Kÿ®Lÿ­Lÿ­Mÿ­Mÿ­Mÿ­MÿÿGÿO ÿV ÿ\ÿ`ýbðc!æb,Þ`:Ô^HÍ[T ÇX_ÃVi¿Tr¼Rz¹Q‚!¶PŠ#´O‘%²N™'°M¢(®M«*¬L¶+ªLÄ,¨LÛ,¦Mï*¤Oý&¤Pÿ#£Qÿ £Rÿ¢Rÿ¢Rÿ¢Rÿ¢RÿÿJÿR ÿZ ÿ` ÿeõgèhÝg$Òf5ÊdDÃaP ½^[¹\dµZm±Xu ®W}#¬U„%©TŒ(§S”*¥R,£R¦-¡Q±/ŸQ¾0QÑ0›Qê/šSú*šUÿ&™Vÿ#™Vÿ!™Wÿ™Wÿ™Wÿ™WÿÿM ÿUÿ]ûdïi ék álÓmÉl1Âj@»gL µdW°a`¬_i¨]q!¥\x$¢Z€' Y‡*X,›W˜.™V¢0–U¬2”U¹3“UÊ3‘Uå3‘W÷-‘Yÿ)‘Zÿ%‘[ÿ#‘[ÿ!‘[ÿ!‘[ÿ!‘[ÿ!ÿO ÿWÿaêhÞmØpÕp ËrÂq.ºo=´lI ®iT©g]¤de¡bm!at%š_|(˜^ƒ+•]‹-’[”0[ž2Z¨4‹Yµ5ŠYÆ6ˆYá6ˆ\ô0ˆ]ÿ+‰^ÿ(‰_ÿ%‰_ÿ#‰_ÿ#‰_ÿ#‰_ÿ#ÿQ ÿZõdàl×qÐtÍu Äv¼v*´t:®qF §nQ¢kZžibšgi!–eq%“dx(b€+aˆ.‹`‘1ˆ_š3†^¥5ƒ^²7‚^Â7€^Ü8€_ò3aÿ-‚bÿ)‚cÿ&‚dÿ%‚dÿ%‚dÿ%‚dÿ%ÿSÿ]çgÛoÐtÊxÆy¾z¶z(¯x7¨vD ¢sNœpW˜m_”kg!jn%hu(Šg}+‡e….„dŽ1c—4b¢6|b¯8zb¾9ybÕ9ycï4zeþ/{fÿ+|gÿ(|gÿ&|gÿ&|gÿ&|gÿ&ÿUÿ`ãjÕrÌxÅ{À}¹~±~%ª}5£zA wL—tU’r]Žpd Šnk$‡lr(„kz+j‚.~i‹1{g•4xg 6vf¬8tf¼9sfÑ:sgí6tiý0ujÿ,vkÿ)wkÿ'wkÿ'wkÿ'wkÿ'ÿWöcßmÑuÈ{Á»€´¬‚#¥2ž~? ˜{J’ySv[‰tb …ri$qp'~ow+{n.xmˆ1ul’4skž7pjª9nj¹:mjÎ:mkë7omü1pnÿ-qnÿ*qoÿ(qoÿ(qoÿ(qoÿ(ÿYëeÛpÍxÄ~¼‚¶„®…§†  …0š‚=“€HŽ}Q‰{Y„y`€wg#|un'ytu*vs}.sr†1pq4mpœ7jo¨9ho·:goË:gpé7iqú2krÿ-lsÿ*lsÿ(lsÿ(lsÿ(lsÿ(ÿ\çhÕsÉ{À‚¸†±ˆ©‰ ¢Šœ‰.•‡;…E‰‚O„€W~^{|e"x{l&tys*qx{-nw„0kvŽ3huš6et¦8ctµ9atÉ:atç8cvù2evÿ.fwÿ+gwÿ)gwÿ)gwÿ)gwÿ)ÿ_ãlÐvż…´Š¬Œ£Ž Ž—Ž+Œ8ŠŠC „‡L…Uz„\v‚c!s€j%oq)l~y,h}‚/e|Œ2b{˜5_z¤7]z³8\zÇ9\zå7^{ø2_{ÿ.`|ÿ+a|ÿ)a|ÿ)a|ÿ)a|ÿ)õbÞoÌzÀƒ·‰¯Ž¦‘’—“‘“(‹’6…A ŽJzŒRuŠZqˆam‡h#j†o'f„w+cƒ€.`‚Š1]–4Z£6X€²7V€Å7V€ã6X÷1Yÿ-[‚ÿ*[‚ÿ)[‚ÿ)[‚ÿ)[‚ÿ)ìfØsÇ~¼‡³Ž©’ •–˜™Š™$…˜2–> y”Ht“Po‘Wk^hŽe!dm%`Œu(]‹~+ZŠˆ.W‰”1T‰¡3Rˆ°4QˆÃ5Pˆâ4Rˆö0Sˆÿ,Tˆÿ)Uˆÿ(Uˆÿ(Uˆÿ(Uˆÿ(ækÐxƒ·Œ­’£–ššŽž‡ŸƒŸ ~Ÿ/x;sœE n›Mi™Ue˜\a—c^–j![•r%W”|(T“†+Q’’.N’ 0L’¯1K’Â1J‘à1L‘õ-M‘ÿ*Nÿ(Nÿ&Nÿ&Nÿ&Nÿ&ÞpÉ}¼‰²’§—›“Ÿ†¤~¦ z¦u¦*p¦7l¥A g£J c¢R_¡Y[¡aX hTŸp Qžz#N„&K‘)Hœž*Fœ®,EœÁ,Eœß+E›ô)Fšÿ'Gšÿ%Gšÿ$Gšÿ$Gšÿ$Gšÿ$Ôw„¶«–¡œ– ‹¥ªt®o¯l¯$h¯2d®=_­F [¬O X¬VT«^QªfNªnK©xH©ƒ E¨"C¨$A¨­%@¨À%?¨ß%?¦ô#@¥ÿ"@¥ÿ!@¤ÿ @¤ÿ @¤ÿ @¤ÿ Ê~»‹¯•¤›™¡Ž¦‚¬w±j¶c¸a¸^¸,Z¸8W¸BS¸KP·S M·[J¶cG¶kDµuBµ?µŽ=µœ;µ¬:µÀ9µß9³ô9²ÿ9±ÿ9°ÿ9°ÿ9°ÿ9°ÿÁ†´“§šœ ‘§…­y³m¸b½VÂSÃRÃ#PÄ0MÄ;JÄEGÄNEÄWBÃ_ @Ãh =Ãr ;Ã~8ÃŒ6Û5ë3ÃÀ3Ãà3Áõ2Àÿ2¿ÿ1¾ÿ1¾ÿ1¾ÿ1¾ÿ¸«™Ÿ “§‡®{´n»cÀXÅMÊDÏ CÐBÐ%@Ð2?Ñ==ÑG;ÑP9ÒY6Òc4Òn2Òz0Òˆ.Ò˜ -Ó© ,Ó¾ ,Óß +Ñó *Ïþ )Îÿ )Íÿ )Íÿ )Íÿ )Íÿ ®˜¢Ÿ–¦‰®|¶o½cÃWÈLÍBÒ9Ù 5ß4ß2à'1á20á=.âG-âP+âZ*ãe(ãq&ä%ä#å¡"å´!åÍ äì âûáÿàÿàÿàÿàÿ¤ž˜¥‹®}¶p¾cÆVËKÐ@Õ6Ü/å-í+î)î"'ï+%ï4#ð<!ðEñNòXòdóqóô’ô¥õºõÖôïòüðÿðÿðÿðÿ𤭶q¿cÇVÎIÓ=Ú3ß*ã&ô$û !üýý"þ)þ1ÿ9ÿAÿJÿUÿa ÿo ÿ€ ÿ“ ÿ¦ÿºÿÔÿëÿöÿöÿöÿö¬€¶r¿cÉVÑHØ;Ý0â&æðÿÿ ÿÿÿÿ ÿ$ ÿ+ ÿ2ÿ;ÿDÿOÿ\ÿkÿ}ÿÿ£ÿ´ÿÆÿÖÿÖÿÖÿÖ‚µs¿dÉVÓGÛ:à.å#éíýÿÿÿ ÿ ÿÿÿÿÿ$ÿ+ÿ3ÿ=ÿIÿVÿfÿxÿŠÿ›ÿ¨ÿ±ÿ±ÿ±ÿ±ÿ%+ÿ()ÿ))ÿ(,ÿ#2ÿ;ÿGÿUÿbÿpÿ|ÿ‡ÿ‘ÿ™ÿ ÿ§ÿ­ÿ´ÿ»ÿÄÿÎÿßÿëÿöÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ()ÿ+&ÿ,&ÿ+)ÿ(/ÿ"8ÿ DÿRÿ_ÿlÿyÿ„ÿŽÿ–ÿÿ¤ÿªÿ±ÿ¸ÿÀÿÊÿÛÿèÿôÿýüÿûÿûÿúÿúÿúÿúÿúÿÿ*&ÿ.#ÿ/"ÿ/%ÿ,+ÿ*5ÿ'Aÿ$Nÿ"[ÿ hÿtÿ€ÿŠÿ’ÿšÿ¡ÿ§ÿ­ÿ´ÿ½ÿÇÿÔþæûò÷ûõÿôÿóÿóÿòÿòÿòÿòÿÿ."ÿ2ÿ4ÿ3 ÿ2&ÿ22ÿ/>ÿ,Jÿ*Wÿ'dÿ&pÿ%{ÿ$…ÿ$Žÿ$–ÿ$ÿ$£ÿ$ªý$±ü$¹û$Ãù$Ïö$ãò$ðî%úí%ÿë%ÿê%ÿé%ÿé%ÿé%ÿé%ÿé%ÿÿ2ÿ6ÿ8ÿ8ÿ:#ÿ9-ÿ8:ÿ5Fÿ2Rÿ0_ÿ.kÿ-vý,€ú,‰ù+‘÷+™õ+Ÿô+¦ó+­ñ+µð+¿î+Ëë+ßç,îä,úâ,ÿ à,ÿ Þ,ÿÞ,ÿÝ,ÿÝ,ÿÝ,ÿÝ,ÿÿ5ÿ:ÿ=ÿ?ÿAÿA)ÿ@4ÿ=Aÿ:Mü8Zø6eô5qñ4{ï3„ í3 ë2” é2› è2¢ æ2ª ä2² ã2» á2È ß2Ü Ú2ì Õ3ø Ò3ÿ Ð3ÿ Î3ÿ Í4ÿ Ì4ÿ Ì4ÿ Ì4ÿ Ì4ÿ ÿ9ÿ>ÿAÿEÿHÿH$ÿG/þD;÷BGñ?Tì>`è Å>¨Ã>±Á>¼À>˽>âº>ò·?ÿµ@ÿ´@ÿ³Aÿ³Aÿ³Aÿ³Aÿ³Aÿÿ@ÿF ÿK ÿQ ÿSÿTóT"éR-áP;ÚOIÒMUÌK` ÈIjÅHsÂG{¿Fƒ½E‹»E“¹Dš·C¢µC«´C¶²CİCÙ­Cí«Eü©Eÿ¨Fÿ¨Fÿ§Gÿ§Gÿ§Gÿ§GÿÿDÿJÿPÿU ÿX ÷YêXßW$ÔW5ÌUDÆTPÁR[ ½Pe¹Nm¶Mv´L}±K…¯J­I•«I©H¦ §H°!¥H½"¤HÏ"¡Hè" IøŸKÿžKÿLÿLÿLÿLÿLÿÿG ÿMÿT÷Zë]ç] á\Ó]Ê]0Ã\?½ZL·XW ³V`¯Ti¬Sq©Qx§P€¤O‡¢O  N˜!žM¡#œM«$šM¸%™LÈ&–Lâ&•Nõ"”Oÿ”Pÿ”Qÿ”Qÿ”Qÿ”Qÿ”QÿÿIÿPûXå^ÝbÖcÔa ÊbÂc,»b;´`H¯]S ª[\¦Zd£Xl WtU{›Tƒ ™T‹"–S“$”R%’Q§'Q³(ŽQÃ)QÝ*ŒRò&‹Tÿ"‹Uÿ‹Vÿ‹Vÿ‹Vÿ‹Vÿ‹VÿÿLÿSì\ßbÔfÎhËgÂgºh(³g8­eE¨cP £aYŸ_a›]h˜\p•Zw“Y!X‡#ŽW%ŒW™'‰V£)‡V¯*…U¿+„VÕ,ƒWï)ƒXþ$ƒYÿ „Zÿ„Zÿ„Zÿ„Zÿ„ZÿÿNÿWå_ØfÎjÇlÃk¼l´m%­l5§jB¡gM œeV˜c^”be‘`lŽ_tŒ^{!‰]ƒ$†\Œ&„[•(Z *Z¬,}Z»-|ZÏ.{[ì+|\ü&|]ÿ"}^ÿ}^ÿ}^ÿ}^ÿ}^ÿÿPõYácÒjÉnÂp½p¶p®q"¨p2¡n?œlJ —jS’h[Žfb‹eiˆcp…bx!‚a€$€`‰&}_’){^+x^©-v^¸.u^Ì/t^é-u`ú'vaÿ#wbÿ wbÿwbÿwbÿwbÿÿRì\ÜfÎmÄr½t·t°t©u¢t/œr=—pG ‘nQlY‰j`…ig‚hnfu!}e}$zd†'wc)uc›,rb§.pb¶/obÉ/nbæ.odù(peÿ$qfÿ!qfÿqfÿqfÿqfÿÿTè_×iÊpÀu¹x²x«x ¤yžx-—w:’uE ŒrNˆpV„o^€md}lkzks wj{#tiƒ&rh)og™,lf¥.jf³/ifÆ0hfä/jh÷)kiÿ%liÿ"ljÿ ljÿ ljÿ ljÿ ÿWäbÒlÆs½xµ{­|¥| Ÿ}™|*“{8yC ˆwLƒuTs[{rbxpiuop rnx#om&ll‹)jl—,gk£.ek²/dkÄ0bká/dlö*fmÿ&fmÿ#gnÿ gnÿ gnÿ gnÿ öYàeÎoÂv¹|±©€ €™”(Ž€5ˆ~Aƒ|J ~zRzxYvw`svgptnmsv#jr&gq‰)dq•+bp¡-`p°/^pÂ/]pß/_qõ*`qÿ&arÿ#brÿ brÿ brÿ brÿ ï\ÜiÊr¾zµ€­„¤…š…”…ކ%‰„3ƒƒ>~H yPu~Wq}^n{ekzlhyt"ex}%bw‡(_v“*\vŸ,Zu®.YuÀ.XuÝ.Yvó*[vÿ&\wÿ#\wÿ \wÿ \wÿ \wÿ ê`ÕlÅvº~±„¨ˆŸ‰”ŠŠˆ‹!ƒŠ0~‰;y‡E t†Np„Ulƒ\i‚cfjb€r _{#\~…&Y}‘)W|ž+U|¬,S|¾-R|Ú-S|ò)U|ÿ%V|ÿ"W|ÿ W|ÿ W|ÿ W|ÿ ådÏpÁz¶ƒ­‰£Œ™Ž†‘},x8sŽBnK jŒSgŠZc‰a`ˆh]‡pZ†y!V…ƒ$T…&Q„œ(O„ª*M„¼*M„×*Mƒñ'Oƒÿ$Pƒÿ"PƒÿPƒÿPƒÿPƒÿÞiÉu¼€²ˆ¨‘““…–~— y—u—(q—5l–?h•H d”P a“W]’^Z‘fWnTwQŽ NŽ#Kš%I©&H»'GÔ'GŒð$HŒÿ"I‹ÿ J‹ÿJ‹ÿJ‹ÿJ‹ÿÕnÃ{·…¬¢’—–Œ™œužpŸmŸ#iŸ0ež;ažE]M ZœT W›\TšcQškN™tK˜H˜‹E—™ C—¨!B—º"A—Ó"A–ï B•þB•ÿC”ÿC”ÿC”ÿC”ÿÌu¼±Œ¦’›—‘›…Ÿy£j§e§c¨`¨+]¨6Y§@V§IS¦Q P¦Y M¥`J¥iG¤rD¤}B£‰?£—=£§<£¹;£Ò;¢ï; þ;Ÿÿ<Ÿÿ<Ÿÿ<Ÿÿ<ŸÿÄ|¶‰ª’Ÿ—•œ‰¡}¦qªd®Z±W±U²#S²0P²;M²DK±MH±UE±] C±e @°o >°z;°‡9¯–7¯¦6¯¸5°Ñ5®ï4­þ4¬ÿ4«ÿ4«ÿ4«ÿ4«ÿ»…¯£—˜Œ£€¨t­h²\¶PºI¼ H¼F½'E½3C½=A½G?½P=½X:½a8½k6½w4½„ 2½“ 0½¤ /½· .¾Ð .¼î -ºþ ,¹ÿ ,¸ÿ,¸ÿ,¸ÿ,¸ÿ³¦—›£ƒªv°jµ^ºR¾GÂ=Ç8É7É6Ê'5Ê34Ë=3ËG1ËQ0Ë[.Ìe,Ìq*Ì)Ì'Ì¡&Í´%ÍÎ%Ëî$Éü#Èÿ#Çÿ#Çÿ#Çÿ#Çÿ©–ž’£…«x²k¸_¾RÂGÆ=Ê4Ï+Ô &Ù%Ù%Ú%$Ú0#Û;#ÛE"ÜP!Ý[ ÝhÞvއߙ߬ßÄÞçÜøÛÿÚÿÚÿÚÿÚÿ œ”£‡«y³lº_ÁRÆFÊ;Î1Ó)Ù!Þèèéé'ê0ê9ëCìNìZígîwîŠïžð³ ðÍ ïì íü ëÿ ëÿ ëÿ ëÿ—£‰«{´m¼_ÄRÊEÎ9Ó/Ø%Ýáì÷ ÷øøù% ù- ú5 û?ûJüWýfþwý‹ýŸüµüÑüíüüüýüýüý‹«}´n½`ÆRÍDÒ7Ø,Ý"áåêúÿ ÿ ÿÿÿÿ ÿ'ÿ0ÿ:ÿEÿSÿbÿuÿŠÿŸÿ³ÿÇÿåÿåÿåÿå´p½aÇSÐCÖ6Ý*âæêí ú ÿÿÿÿ ÿ ÿÿÿÿ!ÿ)ÿ4ÿ@ÿNÿ^ÿrÿ‡ÿšÿªÿ¹ÿ¹ÿ¹ÿ¹ÿ )ÿ"'ÿ"'ÿ*ÿ0ÿ9ÿEÿ Sÿ `ÿ mÿ yÿ „ÿ Žÿ –ÿ ÿ £ÿ ©ÿ °ÿ·ÿ¾ÿÈÿÖÿæÿñÿûÿÿÿÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ#&ÿ%$ÿ%$ÿ#'ÿ,ÿ5ÿBÿPÿ]ÿjÿvÿ€ÿŠÿ’ÿšÿ ÿ¦ÿ ­ÿ ³ÿ »ÿ Åÿ Ñÿ ãÿ ïþ úú ÿùÿùÿùÿøÿøÿøÿøÿÿ&#ÿ( ÿ( ÿ&"ÿ"(ÿ 2ÿ?ÿLÿYÿeÿqÿ|ÿ†ÿŽÿ–ÿÿ£ÿ©ÿ°ÿ·ÿÁÿÌýßùíõøóÿòÿñÿðÿðÿðÿðÿðÿÿ*ÿ,ÿ,ÿ+ÿ)$ÿ(/ÿ%;ÿ"HÿTÿaÿmÿwÿÿŠÿ’ÿ™ýŸü¦û¬ù´ø½öÈóÛïêì÷éÿèÿçÿæÿåÿåÿåÿåÿÿ-ÿ0ÿ1ÿ0ÿ1 ÿ0*ÿ.6ÿ+Cÿ(Oÿ&\ÿ$gü#rù#|÷"…õ"ó"•ò"›ð"¢ï"©í"±ì"¹ê"Åè"Õä#éà#öÞ#ÿÛ$ÿÙ$ÿØ$ÿ×$ÿÖ$ÿÖ$ÿÖ$ÿÿ1ÿ4ÿ6ÿ7ÿ9ÿ8%ÿ61ÿ3=ý1Jø.Vô-bð,mí+wê+€è*ˆæ*å*—ã*žá*¥à*­Þ*¶Ü*ÂÚ*ÒÕ+çÐ+õÍ,ÿË,ÿÉ,ÿÈ,ÿÇ,ÿÇ,ÿÇ,ÿÇ,ÿÿ5ÿ9ÿ: ÿ>ÿ@ÿ? ÿ=*ù;7ò8Dì6Qç5\ã4gà3rÝ3{Ú2ƒÖ2‹Ô2“Ò1šÐ1¡Î1© Ì1² Ë1¼ É1Ê Æ2á Â2ñ ¿3þ ½3ÿ »3ÿ º3ÿ º3ÿ º3ÿ º3ÿ º3ÿ ÿ9ÿ= ÿ@ ÿD ÿFÿE÷D#îA/æ?<à>JÚ=WÓ•²>°>¦¯>°­>½«>Í©>æ¦?÷¤@ÿ£@ÿ¢@ÿ¢@ÿ¢Aÿ¢Aÿ¢Aÿÿ? ÿDÿJ÷NìPêO ãLÖLÍM0ÆM?ÀLL»KW·Ia ´Hi ±Gq®Fy¬F€ªEˆ¨D¦D˜¤C¡¢C« C·ŸCÇCà›Dó™Eÿ˜Fÿ˜Fÿ˜Fÿ—Fÿ—Fÿ—FÿÿBÿG÷OåSÝU×UÕR ËSÃT+¼T;¶RH±QR­P\ ©Nd ¦Ml¤Lt¡K{ŸJ‚JŠ›I“™Iœ—H¦•H²”HÁ’HØIïJþKÿŽKÿŽLÿŽLÿŽLÿŽLÿÿEÿKéSÞXÓ[Í[ÊXÂXºZ'³Z7®XD©WO¤UX ¡T` žSh›Qo˜Pv–P~”O†’NŽN˜M¢‹M®ŠM¼ ˆMÐ ‡Më†Oü†Pÿ†Pÿ†Pÿ†Qÿ†Qÿ†QÿÿGøOäWÕ]Ì`Å`Á^º]³_#¬_3¦^@¡\KZT ™Y\–Xd“VkUrŽTz‹T‚‰SЇR”…RžƒQª!Q¸"QË"~Rç!~Sù~Tÿ~Uÿ~Uÿ~Uÿ~Uÿ~UÿÿJîRÞ[ÏaÆd¿eºc³b¬c ¦c0 b=›aH–_Q ’^Y \aŒ[h‰Zo†Yv„X~‚W‡W}V›!{V§"yVµ#wVÇ$vVä$vW÷wXÿwYÿwYÿwYÿwYÿwYÿÿLéVÙ_ËeÁhºi´h­g ¦h h-šg:•eEcN ŒbW ‰a^†_eƒ^l€]s~\{{\ƒy[vZ˜!tZ¤#rZ²$qZÄ%oZá%p[ö q\ÿq]ÿq]ÿq]ÿq]ÿq]ÿýOåYÓbÇh½l¶m¯l§k  l›l*•k7iC‹hL ‡fT ƒe[€cb}bizapxaxu`s_‹p^–"n^¢$l^°%k^Á&i^Þ&j_ô!k`ÿkaÿlaÿlaÿlaÿlaÿõQâ\ÏeÃk¹o±qªq¢o›o–p'o5‹n@†lI‚jR ~iY{h`wffufnrevpd~mcˆkc“"ib $fb®%eb¿&dbÚ&dcò"edÿfdÿgdÿgeÿgeÿgeÿðSÝ_Ëh¿o¶s®u¦us–s‘t$‹s2†r>pG}oO ymWvl^skdpjlmjski|hh†fg‘"cgž$af¬%`f½&_gÖ&_gñ"`hÿahÿbhÿbhÿbhÿbhÿìWÙbÇk¼r³wªy¡y—wx‹x!†x/w;|uExtM trUqq\npckojhnqfnzcm„`l!^lœ#\kª%Zk»&YlÓ&Zlï#[lÿ\mÿ]mÿ]mÿ]mÿ]mÿèZÒfÃo¸v¯{¦~~‘|Š|…}}-||9wzCsyK pxS lwZivafuhctoasx^r‚[r Yqš"Wq¨$Uq¹%TqÐ%Tqî"VqþWqÿWqÿXqÿXqÿXqÿã^Íi¿s´z«¢‚˜ƒ‹„ ‚{‚)v6r@nIj~P g}Wd|^a{f^zm[zvYy€Vx‹Sx˜!Qw¦"Pw·#OwÎ#Owì!PwýQwÿRwÿRwÿRwÿRwÿÞbÈn»w°§„‡’‡„‡}‡ xˆtˆ&pˆ2l‡=h†Fe…N a…U ^„\[ƒcY‚kVtS€~P€‰N–L¥ J¶!IÌ!I~ëJ~üK~ÿK~ÿL~ÿL~ÿL~ÿÕgÃs¶|¬„¢‰˜‹|uŽom!i.e9bŽB^ŽK[R XŒY V‹aS‹hPŠqM‰{J‰‡Hˆ•Fˆ£Dˆ´CˆÊC‡êD†ûD†ÿE†ÿE…ÿE…ÿE…ÿÍm½x±‚§ŠœŽ’†“y•l—f—c˜a˜)^˜5Z—>W—GU–OR–V O•^ L”fJ”oG“yD“…B’“@’¢>’³=’É=‘é=ú>ÿ>ÿ>ÿ>ÿ>ÿÅs·¬‰¡–“‹–™sœdŸ\  Y W¡"U¡/R¡9P¡CM KJ SH ZEŸc CŸl @žv>žƒ;ž‘9 8²7žÈ7è6›ú6šÿ6™ÿ7™ÿ7™ÿ7™ÿ¾{±‡¥›”˜„œw k¤_§RªM«K«J«'H«3F«=D«FB«N@«V>«_;«h9ªs7ª€ 4ª 2ªŸ 1ª° 0ªÇ 0©ç /§ú /¦ÿ /¥ÿ /¥ÿ /¥ÿ /¥ÿ ¶„ªŽž””™‡ž{£o¨c¬W¯K²Aµ>¶=¶;¶):·49·>7·G6·P4·Z2·d0·o.·|,·‹*·œ)·®(¸Å(·æ'µù&³ÿ&²ÿ&²ÿ&²ÿ&²ÿ¯¢”—š‹ ~¦q«e°Y´M·B»8¾/ -Ã,Ã+Ã)*Ä3)Ä=(ÅG'ÅQ&Å\%Æh#Æv"Ɔ ƘÆ«ÇÁÆäÄøÂÿÁÿÁÿÁÿÁÿ¥”ššŽ¡§s®g´Z¹N½BÀ8Ã/Ç&ËÐ ÑÒÒ%Ó/Ó:ÔDÔPÕ]ÕkÖ|×ؤÙ»ÙÞÕóÓÿÒÿÑÿÑÿÑÿœš‘¡ƒ¨u°h·[½NÁBÅ7È-Ì$ÐÕÚâ ãää# å- å7 æB æO ç]çmæ€æ•æ«æÄææçùçÿæÿæÿæÿ“¡…©w±i¹[ÀNÆAÊ5Î*Ò!ÖÛß ã ñ óóòò"ò*ò4ò?òLò\òmò‚ò˜ó­óÆôåôöôûôûôû‡©y²jº\ÂNÉ@Î3Ó(ØÝáä èóýüû ûûüü&ü0ý<þIþZþmÿ‚ÿ˜ÿ¬ÿÀÿØÿäÿäÿä{²l»]ÄOÍ@Ò2Ù&Þâæ êíôÿÿÿÿÿ ÿÿÿÿ!ÿ+ÿ7ÿFÿXÿkÿ€ÿ•ÿ¦ÿ³ÿ»ÿ»ÿ»ÿ&ÿ$ÿ$ÿ'ÿ-ÿ 6ÿCÿPÿ^ÿkÿvÿÿŠÿ’ÿšÿ ÿ¦ÿ¬ÿ²ÿ¹ÿÂÿÍÿßÿìÿøÿÿýÿýÿýÿýÿýÿýÿýÿÿ#ÿ!ÿ!ÿ#ÿ)ÿ2ÿ @ÿ MÿZÿgÿsÿ}ÿ‡ÿÿ–ÿœÿ¢ÿ¨ÿ¯ÿ¶ÿ¾ÿÉÿÛÿêüöøÿ÷ÿ÷ÿöÿöÿöÿöÿöÿÿ"ÿ"ÿ!ÿÿ$ÿ/ÿ<ÿIÿVÿ bÿ nÿ yÿ ‚ÿ ‹ÿ ’ÿ ™ÿ Ÿÿ ¥ÿ «ÿ ²ÿ »ý Æû Ô÷ çó ôð ÿï ÿî ÿí ÿí ÿí ÿí ÿí ÿÿ%ÿ&ÿ%ÿ!ÿ !ÿ+ÿ7ÿEÿQÿ^ÿiÿtÿ}ÿ†ýŽü•ú›ù¡÷¨ö¯ô·óÂñÐíåèòæþäÿãÿâÿâÿáÿáÿáÿÿ)ÿ*ÿ)ÿ'ÿ(ÿ''ÿ#3ÿ ?ÿLÿXüdønöxóñ‰ïî—ìžê¤é¬ç´æ¿äÍàãÜñØþÔÿÒÿÑÿÐÿÐÿÐÿÐÿÿ-ÿ.ÿ. ÿ/ÿ/ÿ.!ÿ,-ÿ)9ù&Fô$Sï"^ë"iè!sæ!|ã!„á!Œà!“Þ!šÜ!¡Ú!©Ø!±Õ!¼Ó"ÉÐ"ßÌ#ðÈ#ýÆ$ÿÄ$ÿÃ$ÿÂ$ÿÁ$ÿÁ$ÿÁ$ÿÿ0ÿ2 ÿ3ÿ6 ÿ6ÿ5ý2%ô02í-?ç,Lâ+XÝ+cÙ*mÕ*vÒ*Ð*†Î*ŽÌ*•Ê*œÉ*£Ç*¬Å*¶Ã*ÃÂ*Õ¾+ëº+ù¸,ÿ¶,ÿµ,ÿ´,ÿ´,ÿ´,ÿ´,ÿÿ4 ÿ6ÿ9ÿ<ÿ< ý;ñ8è5)à47Ù3FÑ4RÍ3]É3gÆ3pÄ2xÁ2€¿2‡¾2¼2–º1ž¸1¦·1°µ2¼³2Ì ±2å ­3õ «3ÿ ª3ÿ¨3ÿ¨3ÿ§3ÿ§3ÿ§3ÿÿ7ÿ:ÿ>úAñAñ? æ<Û:Ð;1Ê<@Ä÷DæGßHÚFÙ@ ÍBÅD+¾D;¹DHµCS±B\®Be«Al©@t ¦@{ ¤?ƒ £?Š ¡>“Ÿ>œ>¥›>±š>¿˜>Ô–?í”?ü“@ÿ’@ÿ ’Aÿ ’Aÿ ’Aÿ ’Aÿ ÿ=ÿCéIÞNÓOÍNÊIÂI»J&µK6¯KC«JN§IW¤H`¡Gg žFo œFv šE}˜E…–DŽ”D—’C¡C¬CºCÍ‹DèŠEú‰Fÿ‰FÿˆFÿ ˆFÿ ˆFÿ ˆFÿ ÿ@òGãOÔSËUÄTÀP¹O²P"¬Q2§Q?¢PJžOS›N\˜Mc •Lj “Kq ‘JyŽJ€ŒI‰ŠI’ˆHœ†H¨…HµƒHÇHäJ÷€Jÿ€Kÿ€Kÿ€Kÿ€Kÿ€KÿÿCìKÝSÎXÄZ½Z¸W±TªV¥V.ŸV;›UF—TP“SXR_ Qf ‹PmˆOt†O|„N…‚NŽ€M™~M¤|M²zMÃyMßxNôxOÿxOÿxPÿxPÿxPÿxPÿýFçOÖWÈ\¿_·_±\ªY ¤Zž[*™[8”ZCYLŒXU‰W\ †Vc ƒUjTqSy}SzR‹xR•vQ¡tQ¯sQÀqQÛqRòqSÿqTÿrTÿrTÿrTÿrTÿóHãSÐ[Ä`ºc³c¬a¤^ _˜_'“_5Ž^@Š]J†\Rƒ[Y €Z` }Yg{XnxXuvW~tVˆrV“oVŸnU¬lU½kVÕkVðkWÿkXÿlXÿlXÿlXÿlXÿñKßVÌ^Àd·g®h§fŸb˜c’d$c2‰b=„aG`O}_V z^] w]d u\ks\sp[{n[…lZjZœhYªfZºeZÑeZîe[þf[ÿf\ÿg\ÿg\ÿg\ÿíNÚYÈa¼g³j«l¢j™g’gg!ˆg/„f;eD{dMxcT ub[ raa paim`pk_yi_ƒf^Žd^šb^¨a^¸_^Î_^ì`_ýa_ÿa_ÿb_ÿb_ÿb_ÿêQÔ\Äd¹j°n§pžn”kj‡kƒk,~k8zjBviJshRpgY mf` keghdnfdwdcacŒ_b˜]b¦[b¶ZbÌZbê[cü\cÿ\cÿ]cÿ]cÿ]cÿæUÏ_Áh¶n¬r¤tšsŽo‡o ‚o}p)yo5un?rmHnlPklW ik^ fjedilaiu_h\hŠZg–Xg¤Vg´UgÊUgèVgûWgÿWhÿXgÿXgÿXgÿáXËc½k²r©v x–wˆss |txt&tt2ps=msFjrNgqU dp\ apc_oj\nsZn|WmˆUl”Sl£Ql³PlÈOlçQlúQlÿRlÿRlÿRlÿRlÿÜ\Çg¹o¯v¥{œ|‘|‚xzyuyrz#nz/ky:hyCdxKawR_wY \v` YuhWtpTtzRs†Os“Mr¡Lr±JrÆJråKrùLrÿLrÿMrÿMrÿMrÿÔ`Âkµt«{¢—Œz~snk€h€,e€7b€@_H\~PY~WW}^ T|f Q|nO{xL{ƒJz‘HzŸFz¯EzÄDzäEyøFyÿFxÿGxÿGxÿGxÿÍe½p±y§€œ„’†††w†k†f‡ c‡`ˆ'^ˆ3[ˆ<X‡EV‡MS†TP†[N…c K„l I„vFƒDƒBƒ@‚®?ƒÂ>‚â?÷?ÿ@€ÿ@€ÿ@€ÿ@€ÿÆk·v¬¢…—‰Œ‹sŽe] ZX!V‘-S8QANILPJXG`EŽi BŽs @ ><œ:¬9Á8á8‹ö8Šÿ9‰ÿ9‰ÿ9‰ÿ9‰ÿ¿r²}§†œŠ‘ކ‘z“m•_—T™O™NšLš'Jš2Hš<FšDDšLBšT@™\>™f;™p9˜|7˜Š 5˜š 3˜« 2˜¿ 2˜ß 1–õ 1•ÿ 1”ÿ 1“ÿ 1“ÿ 1“ÿ ¸z¬…¡‹–‹”—r›fZ N¢E¤ B¤@¤?¤*>¥4<¥>;¥G9¥O7¥X5¥a3¥l1¥y/¤‡-¤—,¤©+¤½*¤Þ*¢õ)¡ÿ) ÿ)Ÿÿ)Ÿÿ)Ÿÿ±‚¥‹š‘–ƒšvŸj¢^¦R©F«<­5¯ 3°2°!1°+/°5.±>-±H,±Q+±[)±g'±t&±ƒ$±”#±¦"²»!²Û!¯ó ®ÿ ­ÿ¬ÿ¬ÿ¬ÿª‹‘“—‡œz¢m§`«U¯I±>´3·*º$¼ "½!½ !½* ½3¾=¾G¾R¿^¿l¿|¿ŽÀ¡À¶ÀÓ¾ñ¼ÿ»ÿºÿºÿºÿ¡’–˜Šž}¤oªb¯V´J·>º3½*À!ÄÇË ÌÌÌ%Í/Í:ÍF ÍR Î` Îp ΃ Η άÎÆÎèÍû Ëÿ Ëÿ Ëÿ Ëÿ˜˜ž¥q¬d³W¹J½>À2Ã(ÆÊÍÑ ÖÙ ÙÚÚ$Û.Û9ÜEÝRÞbÞsÞˆßß³ßÎàîßúßÿßÿßÿŸ¦s®eµX½JÂ=Å1É&ÌÐÔÙ Ýáãã äåæ"ç+é6ëCìRìbívîŒî¡ï·ïÑïëðöðöðö„§u¯g·Y¿KÆ<Ê/Î$ÒØÜ àãçëëíî ðñóô'÷3ù@úQûcüwýý£þ¶þÉÿßÿßÿßw°h¹ZÁLÊ<Ï.Ô"ÚÞâ æéìðöö÷øúû ýÿÿ#ÿ/ÿ>ÿOÿbÿwÿÿŸÿ®ÿºÿºÿºÿ#ÿ!ÿ!ÿ$ÿ*ÿ3ÿAÿNÿ\ÿhÿtÿ~ÿ‡ÿÿ–ÿœÿ¢ÿ¨ÿ®ÿµÿ½ÿÇÿÖÿçþóþþýÿüÿûÿûÿûÿûÿûÿÿ ÿÿÿ ÿ %ÿ0ÿ=ÿKÿXÿdÿpÿzÿƒÿ‹ÿ’ÿ˜ÿžÿ¤ÿªÿ±ý¹ûÃúÐøã÷ñöüôÿôÿóÿóÿóÿóÿóÿÿÿÿÿÿ!ÿ ,ÿ 9ÿFÿSÿ_ÿkÿuÿ~ÿ†ÿŽÿ”þ›ü¡ú§ø®õµó¿ñËðßîîìùëÿêÿêÿéÿéÿéÿéÿÿ ÿÿÿÿÿ(ÿ4ÿ Aÿ Nÿ Zÿfÿpþyüú‰øö–óñ£ïªí²ê»èÈæÜäìâúà ÿÞ ÿÝ ÿÝ ÿÜ ÿÜ ÿÜ ÿÿ#ÿ#ÿ!ÿÿÿ#ÿ/ÿ;ÿIüUø`ôjñtï|í„ë‹é’ç™æ ä§â¯à¸ÞÅÜÚÖìÒúÏÿÍÿÌÿËÿÊÿÊÿÊÿÿ'ÿ' ÿ% ÿ& ÿ%ÿ#ÿ (û5õBïOêZæeãnàwÞ܇َ֕ԜңЫεÌÁËÒÇèÃøÀÿ¾ÿ½ÿ¼ÿ¼ÿ¼ÿ¼ÿÿ+ ÿ+ÿ+ÿ- ÿ,ÿ)÷& î#-ç!:áHÛTÕ _Ñ hÎ qÌ!yÊ!È!ˆÆ!Ä!–Ã!žÁ"¦¿"¯½"»¼#ʹ#ãµ$ô³$ÿ±$ÿ¯$ÿ¯$ÿ®$ÿ®$ÿ®$ÿÿ/ÿ/ÿ2ÿ3ù2÷/ë+á'"Ø'2Ð)AË*NÆ*YÃ*bÀ*k½*s»*z¹*‚¸*‰¶*´*˜³*¡±*ª¯+µ®+Ĭ+Û¨,ï¦,þ¤,ÿ£-ÿ¢-ÿ¢,ÿ¢,ÿ¢,ÿÿ2ÿ3ù8é9â9Þ5Þ. Ñ/É1,Ã3;½3H¹4S¶3\³3e°3m®3t¬2{«2ƒ©2Ч2“¥2›¤2¥¢2° 2¾Ÿ2Ñœ3êš3û˜4ÿ—4ÿ–4ÿ–4ÿ–4ÿ–4ÿÿ5ÿ8ê>ßBÕBÏ?Í8Å8½:&·;6²ãEÔIËJÅGÁAº?³A!­B1¨C>¤CI BSA[›Ab˜@j–@q”?x’??ˆ >‘ >› ‹>¦ ‰>³ ˆ>Ć?à„?ô ƒ@ÿ ƒ@ÿ ‚@ÿ ‚Aÿ‚Aÿ‚Aÿÿ<ëCÜJÌOÃP¼N·I±FªH¤I, I:›IE˜HN”GW’G^FeFl‹Es ‰E{ ‡Dƒ …D ƒD—C¢C¯~CÀ|DÚ{DñzEÿ zFÿ zFÿ zFÿ zFÿ zFÿ õ>æHÓOÇT½U¶T°P©L ¢MN(˜N6”NAMKMSŠLZ‡Ka…KhƒJo €Jw ~I |I‰zH“xHŸwH¬uH¼tIÒsIîrJÿrJÿ rJÿ rJÿ rJÿ rJÿ òBàLÎSÁX¸Z°Y©V¢R›R–S$‘S2S>‰RG†QPƒQW€P^~Oe{Ol yNs wN{ uM…sMqMœoM©nM¹lMÎlMëlNýlOÿlOÿ lOÿ lOÿ lOÿ îEÜPÉW½\´^¬^¤[œV•VW!‹X/‡W;ƒVDVM|UTzT[wTbuSh sSp qRx oR‚mQkQ™iQ¦gQ¶fQËeRéeRûfSÿfSÿ fSÿ fSÿ fSÿ êIÕSÅZº_°b¨bŸ_–ZZŠ[…[,[8}[AzZJwYQtXXqX_oWf mWm kVv iVgUŠeU—cU¤aU´`UÈ_Uç`Vú`VÿaWÿaWÿ aWÿ aWÿ çLÑVÁ^¶c­f¤f›d^‰^„_€_)|_5x_?t^Gq]Oo\Vl\\j[c h[k fZs dZ}bZˆ_Y”^Y¢\Y²[YÆZYå[Zù[Zÿ\Zÿ\Zÿ \Zÿ \Zÿ ãOÍY¾a³f©i j—h‹bƒb ~czc&vc2sc<obElaLjaTg`Ze`ac_i a_q _^{]^†Z^“X] W]°V^ÄU^ãV^÷V^ÿW^ÿW^ÿ W^ÿ W^ÿ ÞSÈ]»d°j¦mn“m…g~g xgtg#qh/ng9kgBhfJefRceX`e_^dg \do ZcyXc„Ub‘SbŸRb®QbÂPbáQböQbÿRbÿRbÿ Rbÿ Rbÿ ÙVÄ`·h¬n£qšsqkxkrknlkl,hl7fl@ckH`kO^jV\j]Yie Wim Uiw Sh‚PhNgMg¬KhÀKhÞKgõLgÿLgÿMgÿ Mgÿ Mgÿ ÒZÀd³l©r v–wŠvyqqqkqhqfr(cr4`r=^rE[qMYqTWp[TpcRok Pot Mn€KnIn›Gm«Fn¾EnÜFmôFmÿGmÿGlÿ Glÿ Glÿ Ì_¼i°q¥wœ{‘|†{uxkwew ax_x$]y0Zy:XyBVxJSxQQwXOw`LvhJvr Hu} EuŠCu™Bu©@u¼@uÙ@tó@tÿAsÿ Asÿ Asÿ Asÿ Æd·n«v¢|—Œr€e]YW€ U€+S6Q€>O€FM€NKUI]FfD~pB~{ ?~ˆ =}— <}§ :}º:~Ö :|ñ :{ÿ :{ÿ :zÿ :zÿ :zÿ Ài²t§|’„‡†{‡n‡`‡U‡PˆNˆM‰&K‰0I‰:H‰BF‰JD‰RB‰Z@ˆc=ˆm;ˆx9‡†7‡• 5‡¦ 4‡¹ 3‡Ó 3†ð 3…ÿ 3„ÿ 3ƒÿ 3ƒÿ 3ƒÿ ¹p­z¢‚—‡ŠŒuŽhZO‘G’ D’C“A“*@“4?“==“E;“M:“V8“_6“i4“u2’ƒ0’“.’¤-’·,’Ñ,‘ï+ÿ+Žÿ+ÿ+ÿ+ÿ³x§‚œˆ‘Œ‡z“m•a—U™I›?œ976ž"4ž,3ž52ž>1žG0ŸP.ŸZ-Ÿd+Ÿq)ž'ž&ž¡$žµ#žÎ#î#›þ"šÿ"™ÿ"™ÿ"™ÿ¬ ˆ•Ž‹’–ršeY N£B¤7¦.¨)©(©'ª"&ª,%ª5$ª?#ªH"«S!«^ «j«y«‹««±«Êªì¨ý§ÿ¦ÿ¦ÿ¦ÿ¥‰™”ƒ™užh¢\¦P©D¬9®/°&³µ···!·*·4¸>¸I¸T¹b¹q¹ƒ¹—¹¬ ¹Ä ¸ç¶ûµÿ´ÿ´ÿ´ÿœ’•†›y k¦^«R¯F²:µ/·%º½ÀÃ Æ Å ÅÅ(Å2Æ=ÆIÆWÆfÆwƋƠŶÆÒÅïÅüÅÿÅÿÅÿ•–‰œ{£m©`¯S´F¸:».¾$ÁÄÇÊÎÐ ÐÐÑÒ'Ó1Ô<ÕIÖXÖiÖ|Ö’Ö§Ö¿ÖàÖóÖþÖÿÖÿŒ~¤o«a²T¹F½9Á-Ä"ÇËÎ ÒÕÛÜÝ Þßáâ$ä.æ:çIèYèkéé˜é­éÅéâéòéõéõ€¥q­cµU¼GÂ9Æ,Ê ÎÒÖÛßãåçèêë íïñ!ó+ö8÷HøZùmú„ú›ú¯úÂúÚúßúßt®e¶V¾HÆ9Ë+ÐÔÚ ßãæéíïñóõöø úýÿÿ(ÿ6ÿGÿZÿnÿ…ÿšÿ«ÿ¹ÿ¼ÿ¼ÿ ÿÿ ÿ!ÿ'ÿ0ÿ>ÿLÿYÿeÿpÿzÿƒÿ‹ÿ’ÿ˜ÿžÿ¤ÿªÿ°ÿ¸ÿÂÿÎÿâþðýûûÿûÿûÿúÿúÿúÿúÿÿÿÿÿÿ!ÿ-ÿ:ÿHÿUÿaÿlÿvÿÿ‡ÿŽÿ”ÿšþ ý¦ü¬û´ù½øÉ÷Üõìóøóÿòÿñÿðÿðÿðÿðÿÿÿÿÿ ÿÿ(ÿ6ÿCÿPÿ\ÿgÿqÿzü‚ú‰ø÷–õœô¢ó¨ñ°ð¸îÃìÓêçéõçÿæÿåÿåÿåÿåÿåÿÿÿÿÿÿ ÿ $ÿ0ÿ>ÿKÿWþbúlõuò}ð„î‹ì‘ë—éžç¤æ¬ä´â¿àÍÞãÜòÚýØÿÖÿÕÿÕÿÕÿÕÿÿÿ ÿ ÿÿÿÿ*ÿ 8ýEøQô\îfêoæwäâ†àŒÞ“ݚ۠بձһÐÉÎàÌñÉ ÿÇ ÿÆ ÿÅ ÿÅ ÿÅ ÿÅ ÿÿ! ÿ ÿÿ ÿÿÿ#ö0ï>êJå Vá `Ý iÙ qÕ yÓ Ñ ˆÏ Í–ËʥȮƹÄÈÂß¾ò»ÿ¹ÿ·ÿ¶ÿ¶ÿ¶ÿ¶ÿÿ%ÿ#ÿ#ÿ$ÿ! ýñè'á5ÚCÓOÎYËcÈkÅsÃ{Á‚À‰¾¼˜» ¹©·´µ´Ö°í­ü«ÿ©ÿ©ÿ¨ÿ¨ÿ¨ÿÿ(ÿ'þ*ï*ç'ç" äÙÏ-É<Ä I¿ S¼!]¹!e·"mµ"t³"|±"ƒ°"Š®"’¬#›«#¤©#¯§#¼¦$Σ$è %ùž%ÿ%ÿœ%ÿ›%ÿ›%ÿ›%ÿÿ,ÿ-í2â4Ú3Ó.Ò% É%Á''»)6¶*C²+N¯+W¬+`ª+g¨+o¦+v¤+}£+„¡+Ÿ+•ž+Ÿœ+ªš+¶™,Ç—,â”-õ’-ÿ‘-ÿ.ÿ-ÿ-ÿ-ÿÿ0ò3ä:Ö=Ì<Ç9Ã1½.µ0!°20«3=§3I¤3R¡3ZŸ3bœ3iš3p™3w—2•2‡“2’2š2¥Ž2±3‹3܉4ò‡4ÿ†4ÿ†4ÿ…4ÿ…4ÿ…4ÿü3ë:ÜAÍDÃD½A¸;²7«8¥9+¡:8;Dš;M—:V”:]’:d:kŽ9rŒ9zŠ9‚‰9‹‡9•…9 ƒ9­‚9¼9Ó:î}:þ|;ÿ|;ÿ|;ÿ|;ÿ|;ÿô7å@ÒGÅJ¼KµI¯C©> ¢?@&˜A4”A?‘AIŽAQ‹@Y‰@`‡@g…?mƒ?u?}>‡}>‘{>œ z>© x>¸ w?Í u?ê t@üt@ÿt@ÿs@ÿs@ÿs@ÿñ;ßEÌL¿O¶P®O§J DšE•F"F0ŒG<‰FE†FNƒFUE\~Ec|DjzDqyDywD‚uC sC™ qC¦ pCµ nDÉ mDç mEú lEÿlEÿlEÿlEÿlEÿì?ØIÇP»T±U©T¡P™J’IJ‰K,…L8‚KBKJ|JRyJXwJ_uIfsImqIvoHmHŠ lH– jH£ hH² gHÅ fIä fIø fIÿ fJÿfIÿfIÿfIÿèCÒMÂS·X­Y¤XœU“NŒN‡O‚O)P5{P?xOGvOOsNUqN\oMcmMjkMriM|gL‡ eL“ cL  bL¯aMÂ`Má`Mö `Nÿ `Nÿ `Nÿ`Nÿ`NÿãGÍP¾W³[ª]¡]˜ZS†R €S|S%yT1uT<sSDpSLmRSkRYiR`gQheQpcQyaQ„ `P‘ ^Pž \P­[QÀZQÞZQõ ZRÿ [Rÿ [Qÿ[Qÿ[QÿßJÉS»Z°_¦aa”^ˆW€V zWvW"sX.pW9mWAjWIhVPfVWdV^bUe`Um^Uw\U‚ ZUŽ YUœ WU«VU¾UUÛUUó UUÿ VUÿ VUÿ VUÿVUÿÛMÅW¸^­b£ešecƒ\{[u[q[n\+k\6h[?e[Gc[NaZU_Z\]Zc[ZkYYuWY€ UYŒ TYš RYªQY¼PYØPYò QYÿ QYÿ QYÿ QYÿQYÿÔQÂZ´aªf h—iŒg}`u_o_k_h`(f`3c`<a`D__L\_S[_ZY_aW^iU^sS^~ Q]Š O]™ M]¨ L^ºK^ÔK^ñ L^ÿ L]ÿ L]ÿ L]ÿL]ÿÏT¾^±e§jm”m‰lxeodidedbd%`e0^e:\eBZeJXdQVdXTd_RdgPcqNc{ Lcˆ Jc— Hc¦ Gc¸ FcÑ Fcï Fbÿ Gbÿ Gbÿ GbÿGbÿÊXºb®i£nšqr„qtkiici _i\j!Zj-Xk6Vk?UkGSjNQjUOj]MjeJinHiyFi† Di• Ch¥ Ai· @iÏ @hî Ahÿ Agÿ AgÿBgÿBgÿÅ]¶fªm s–v‹w€vpreq\pXpVpTq(Rq3Pq<OrDMqKKqSIqZGqbEplCpwAp„?p“=o£ ;pµ ;pÍ :oì ;nþ;nÿ;mÿ;mÿ;mÿ¿b±k¦sy’{‡|{|mz`xVwPwNxLx$Ky.Iy7Hy@FyHDyOByWAy`?xi‚C=‚K;‚S9‚\7‚f5‚q3‚1Ž0Ÿ.±-È-é-ü-~ÿ-}ÿ-}ÿ-}ÿ³n¨x’ƒˆ†}‡pˆc‰UŠKŠAŠ;‹9‹8Œ"7Œ,6Œ54Œ=3ŒF2O1X/b-Œn+Œ{*Œ‹(Œœ&Œ¯%ŒÆ%‹è%Šû%ˆÿ%ˆÿ%‡ÿ%‡ÿ­v£€—…‰‚ŒvŽi\’P“D”:•1–-—,—+—$*—-)—6(˜?'˜H&˜R%˜\#˜h"˜w ˜‡˜™˜¬˜Ã—å•ú”ÿ“ÿ“ÿ“ÿ§œ†‘‹‡z’m•a˜U›I=ž3Ÿ*¡!£ ££¤$¤-¤6¤?¤J¤U¥a¥p¥¥”¥¨¥¿¤â¢ø¡ÿ ÿ ÿ ÿ †•ŒŒ‘•qšdžX¡L¤@¦5§*©"¬®° ±±±"±+ ±5 ±@ ±K ±X ±g±x±‹± °µ°Ð°ï¯þ®ÿ®ÿ®ÿ˜Ž“‚˜ug¢Z§N«A­5¯+±!´¶¹ ¼¾ ½½¾"¾+¾6¾A¿N¿\¿m¿€¾•¾ª¾Â½ä½ö½ÿ½ÿ½ÿ’”…šx j¦\«O°B³5¶*¸ »¾Á ÄÇÉÉ ÉÊË"Ë+Í5ÎAÎPÏ`ÏrχÏϳÏÎÏëÎøÎþÎþˆ›z¢l¨^¯PµB¹5¼)¿ÂÆÉÌÐÓÕÖØ ÙÛÜÞ(à4âAâQãcãwäŽä¤äºåÔåêåóåó|£nª`²Q¹C¾5Â(ÆÉÍ ÑÕÚÞáâäåç éëíï$ò1ôAôSõfõ|ö“ö©÷¼÷Î÷ß÷ßp¬a´S»EÃ6Ç'ÌÐÕ Ûßâåéìíðñóõ÷ úüÿ!ÿ.ÿ@ÿSÿhÿ€ÿ–ÿ¨ÿ¶ÿ¿ÿ¿ÿ ÿ ÿÿÿ$ÿ.ÿ<ÿJÿVÿcÿmÿwÿÿ‡ÿŽÿ”ÿšÿ ÿ¦ÿ¬ÿ´ÿ½ÿÉþÝýíüúûÿúÿùÿúÿúÿúÿúÿÿÿ ÿÿÿÿ*ÿ7ÿEÿRÿ^ÿiÿrÿ{ÿ‚ÿ‰ÿþ–ýœü¡û¨ù¯ø¸öÃôÒóçòöðÿïÿðÿïÿïÿîÿîÿÿÿÿ ÿÿÿ%ÿ3ÿ@ÿMÿYÿdýmûvù}÷„õ‹ô‘ó—ñð£îªì³ê½èËçáåñãýãÿâÿáÿáÿàÿàÿÿÿÿ ÿÿÿ ÿ-ÿ:ÿGùSõ^òhðpíxëé…èŒæ’å˜ãŸá¦ß®Ü¸ÚÅÖÙÔìÒùÑÿÏÿÎÿÎÿÎÿÎÿÿ ÿÿÿ ÿ ÿÿ&ü4ôAíMéXæbãjàrÞyÛ€Ù†Öӓњϡͪ˳ɿÆÐÅèÃöÁÿÀÿ¿ÿ¿ÿ¿ÿ¿ÿÿÿÿÿÿ ÿù ð,æ9àFÜQÖ[ÒdÏlÌsÊzÈÆ‡ÅŽÃ–Á¿¦½°»¼¹͸ åµ ÷³ ÿ± ÿ° ÿ°ÿ¯ÿ¯ÿÿÿÿúõö ëâ "Ø 1Ð >Ë JÇ UÄ^Áf¿m½t»{¹‚·ж‘´š²£°­¯º­ʪå§÷¥ÿ£ÿ¢ÿ¢ÿ¢ÿ¢ÿÿ"ÿ ð#æ$à!ÜÛ ÐÈ)Â7½D¹NµW³`°g®n¬u«|©„¨Œ¦”¤ž£¨¡´ŸÅžßšó˜ÿ—ÿ–ÿ•ÿ•ÿ•ÿÿ&ô'æ-Ú/Ï-Ê'ÇÁº"´1¯ =«!H¨"R¦"Z£#b¡#i #ož#wœ#~›#†™$—$™–$£”$°’%¿‘%ÖŽ&ïŒ'ÿ‹'ÿŠ'ÿ‰'ÿ‰'ÿ‰'ÿú)ì0Ý6Í8Ä7¾2º+µ%®'¨)+¤*8 *C+Lš+U˜+\–+c”+j’+q,x,,Š‹,”Š,Ÿˆ,«†,º…-΃.ê.ü€.ÿ.ÿ.ÿ~.ÿ~.ÿô.ä7Ò=Å?»?´<¯5©/ £/ž1&™23–2>’3H3P3X‹3^‰3e‡3l†3s„3|‚3…€33š}3§|3µz3Éy4æw5ùv5ÿu5ÿu5ÿu5ÿu5ÿð3Ý=ÊC¾EµF­C¦= 6™6”8!9.Œ99‰9C‡9L„9S‚9Z€9a~9h|9oz9wy9€w9‹u9–t9£r9±q9Äo:ân:÷n;ÿm;ÿm;ÿm:ÿm:ÿê9ÕBÄH¹K¯K§IŸD˜>‘<Œ=ˆ>*„?5??~?H|?Oz?Vx?]v>dt>kr>sp>|o>‡m>“k> j>®i?Àg?Þg?õf@ÿf@ÿf@ÿf?ÿf?ÿå=ÏF¿L´OªP¢O™J‘DŠA „B€C&}D2zD<wDDuDLrDSpCYoC`mCgkCoiCyhCƒfCdCcC«aC½`DÙ`Dó`Dÿ_Dÿ_Dÿ`Dÿ`DÿàAÊJ»P°S§UžS•O‹IƒG }GyG"vH.sH8qHAnHIlHPjHVhH]fGdeGlcGvaG€`G^Gš\G©[H»ZHÔZHñZIÿZIÿZHÿZHÿZHÿÛDÆM¸S­W£YšX‘T†N}KwKsLpL+mL5kL>hLFfLMdLSbLZaLb_Lj^Ls\K~ZKŠXK˜WL§VL¹ ULÑ TLïTMÿULÿULÿULÿULÿÕHÂQµWª[ \—\YSwOqOnPjP(hP2eP;cPCaPJ_PQ]PX\P_ZPgXPqWP{UPˆSP–RP¥PP· PPÎ OPíPPÿPPÿPPÿPPÿPPÿÐK¿T²Z§^`”`‰]|WrTlShTeT$bT/`T8^T@\THZTOYTVWT]UTeTTnRTyPT†NT”MT¤KTµKTÌ JTëKTþKTÿKTÿKTÿKTÿÌN»W®^¤bšd‘d†bw[mXfX bX_X"]Y,[Y6YY>WYFVYMTYTRY[QYcOYlMYwKX„IX’HX¢GY³FYÊEYêFYýFXÿFXÿGXÿGXÿÇR¸[«a¡f˜hŽiƒgr`h^a] \]Z]W])V^3T^;R^CQ^JO^RN^YL^aJ^jH^uF^‚D]C^ A^±@^È@^è@]üA]ÿA]ÿA\ÿA\ÿÃV´_¨fžj•mŠmlogdd[bVbTbRc%Pc/Nd8Md@KdHJdOHdWFd_EdhCdsAc?cŽ=cžr@=rH;rP:rY8rc6rm4rz3r‰1rš/r¬.rÁ.rã.qø.pÿ.oÿ.oÿ.oÿ³f§ov“zˆ|~}r}d|W{LzBy)…G(†P'†Z&†f$†s#†ƒ!†• †§†¼†Þ„õ‚ÿ‚ÿÿÿ¨tž}“‚‰…~ˆqŠe‹XŒL@Ž6Ž,% #"!% ‘.‘6‘@‘I‘T‘`‘n‘~’’¤‘¹‘ØôŽÿÿŒÿŒÿ£}˜ƒŽˆ„Œwi‘]“P•E—9˜.™%š› $-ž7žAžLžXžg žw žŠ ž ² Ì œì ›þ šÿ ™ÿ ™ÿœ„‘ŠˆŽ{’m–`™TœHŸ< 0¡&£¥§© « ªªª$ª.ª8ªDªPª^ªnªª•©ª©Á¨ä¨ö§ÿ§ÿ§ÿ•‹Œ•qšcžV¢J¦=¨1ª&«­°² µ¶ ¶¶··%·/¸9¸F¸T¸d¸v¸‹· ·¶·Ó¶ï¶ü¶ÿ¶ÿ’‚—tf¢X§K¬>¯1±&³¶¸ »¾Á ÃÄÄÅ$Æ.È:ÉGÉWÉiÉ}ɔȪÈÃÈäÈôÈýÈý…™wŸh¦Z«M±?µ1¸%º½À ÃÇÊÍÎÏÐ ÑÓÕ×"Ú-Ý9ÞIÞZßn߅ߜ߲ÞËÞæßôßôy¡k¨\¯Nµ@»1¾$ÁÅÈ ÌÏÓÙÜÝßáâä æèê í+ð:ñKñ^òsó‹ó¢ó¶óÉóáóámª^±P¹A¿2Ä$ÈÌÐÕÚÞâæéêìîðòôö ùüÿ)ÿ:ÿMÿbÿxÿÿ£ÿ³ÿÁÿÁÿÿÿÿÿ!ÿ+ÿ9ÿGÿTÿ_ÿjÿsÿ{ÿƒÿŠÿÿ–ÿ›ÿ¡ÿ¨ÿ¯ÿ¸ÿÄþÕüêûøúÿùÿøÿøÿöÿóÿñÿÿ ÿÿÿÿÿ'ÿ4ÿBÿOÿ[ÿeÿnÿvÿ~ÿ…þ‹ý‘û—úø£÷«ö³ô¾óÌñãïóîÿíÿìÿëÿìÿìÿëÿÿ ÿ ÿÿÿÿ"ÿ/ÿ=ÿJÿUý`úiøqöyôó†ñŒï’î˜ìŸë¦é®ç¸åÅãÚáíßûÞÿÝÿÝÿÝÿÝÿÝÿÿ ÿ ÿ ÿ ÿÿÿ)û7øDõPòZîcìkésçzå€ã†áŒß“ݙۡ٩ղҾÐÎÎæÌöÊÿÊÿÉÿÈÿÈÿÈÿÿÿ ÿÿÿÿ÷"ï0ë=èIäTà]ÝeÙmÕsÒzЀ·ÌʔțƤĭ¸Àǽ߼ñ»þ¹ÿ¸ÿ¸ÿ¸ÿ¸ÿÿÿÿ ÿ ÿ øèã(Ý6ØBÒMÎWÊ_ÇfÅmÃtÁz¿½ˆ»¹—·Ÿµ¨³³±Â¯Ø®í¬û«ÿªÿ©ÿ©ÿ©ÿÿÿ÷ìæåÝÔ Í-È:ÃF¿P¼X¹`·gµn³u±{¯‚® Ь ’ª ›¨ ¥¦ °¥ ¿£ Ô¡ íŸþÿœÿ›ÿ›ÿ›ÿÿ÷êßÕÐÎ Ç À %º2¶?²I¯R¬Zªa¨h¦o¤v¢}¡…ŸŽ—œ¢š­˜¼—Дì’ýÿÿŽÿŽÿŽÿúî#ß(Ð*Ç'Á!½¹²­,¨8¤C¡LŸTœ\šb™i—p•w”’ˆ’©‹·Šʈç† ú„ ÿƒ ÿƒ ÿ‚ ÿ‚ ÿõ$å,Ó1Æ3¼1¶-°%¬ ¦¡ &œ!2™"=•"G“#O‘#V#]$d‹$k‰$rˆ$z†$ƒ„%ƒ%˜%¤€&²~&Å}'â{'÷y(ÿx(ÿx(ÿx(ÿx(ÿï+Ý3Ê9¾;´:­6¦/¡(›'–( ‘)-Ž*8‹+Bˆ+J†+R„+X‚,_€,f,m},u{,~z,ˆx,”v- u-®t-Àr.Ýq.ôp/ÿo/ÿo/ÿn/ÿn/ÿè1Ó:Ã?·A®A¦>ž8—1‘.Œ/ˆ0(„132=2F}2M{2Ty2[w2au2it2pr2yp3„o3m3l3«j4¼i4Õh5ñg5ÿg5ÿf5ÿf5ÿf4ÿâ6Ì?½D²G¨G D˜?9ˆ4 ƒ56$|7/y79w8Bt8Ir8Pq8Wo8^m8el8mj8uh8€g8Œe8™d9¨b9¹a:Ð`:î`:ÿ_:ÿ_:ÿ_:ÿ_:ÿÝ;ÇC¹I®K¤L›J’E‰?: {:w; t<+r<5o=>m=Fk=Mi=Sh=Zf=ad=ic=ra=}`=‰^=–]>¥[>¶Z>ÌZ?ìY?þY?ÿY?ÿY?ÿY>ÿÖ?ÃGµLªP P—OŽK„Ez@u?q@m@(kA2iA;gABeAIcAPaAW`A^^Af]Bo[BzZB†XB”WB£UC³TCÉTCéSCýSCÿTCÿTCÿTCÿÐB¿J²P§ST”SŠPJuEnCkDgE$eE.bE7aE?_EF]EM[ETZF[YFcWFlVFwTFƒSF‘QF¡PG±OGÇNGçNGûNGÿNGÿOGÿOGÿÌF»N¯T¤WšX‘W†T{NpJiH eHbI!_I+]I4[I<YICWIJVIRUJYTJaRJjQJuOJNJLKŸKK°JKÅIKæIKúIKÿJKÿJKÿJKÿÈI¸Q¬W¡[˜\Ž\ƒYvSkNdM _L\MZM(XM1VM:TMASNHRNOPNWON_MNhLNsJOIOGOFO®EOÃDPäDOùEOÿEOÿENÿENÿÄLµU©[Ÿ^•`‹`€^rWgS^QYQWQTQ%RR/QR7OR?NRFMSMLSUJS]ISfGSpES}DS‹BS›AT¬@TÁ?Tâ?Tø@Sÿ@Sÿ@Sÿ@RÿÀP²X¦^œb’eˆe}bn\cYYVTVQVOV"MW,LW4JW<IXDHXKGXSEX[DXdBXn@X{?X‰=X™^a<^l;^x9^‡7^—6^©5^½4_Ý4^õ5]ÿ5]ÿ5\ÿ5\ÿ¸Yªa g–lŒnnvlgi\fQdHb DbBbAc$?c->c5=d=s4r 1s0s/s#.s+-t4,t<+tD)tM(uW'uc%uo$u"u!u¢ u·uÒtñsÿrÿ qÿ qÿ©kžs”yŠ|€~tgZM~C~8}/}(} &}$}#~%"~-!~6!~?HR^kzŒŸ³Î~ï|ÿ{ÿ{ÿ{ÿ¤ršz…‚{„m†`‡T‡Hˆ<ˆ2ˆ(ˆ ˆ‰‰‰Š&Š.Š7ŠAŠL‹X‹e‹u‹‡Š› Н ŠÈ ‰ê ‡ü‡ÿ†ÿ†ÿŸ{”Š…€ˆs‹eYLA’4’*’!“”–— — — —& —/ —9 —D—P—^—n–€–”•¨•¾”à”ô“ÿ’ÿ’ÿ˜‚Žˆ…Œwj’]•P˜Dš8›,œ"ž  ¢£ ££££'£1¤<¤H¤V¤e£w£‹£ ¢¶¡Ò¡ð û ÿ ÿ‘ЉŽ{’m—`›SžF¡9£-¤#¦¨ª ¬®¯¯ ¯°° ±(±2²>²L²[²l²±—±¬°Æ°è¯÷¯ÿ¯ÿŒ•qšcŸU¤G¨:ª-¬"®°³ µ¸»»¼¼ ½¾¿À'Á2Â@ÃOÃ`ÃtËáøÂ×ÂïÂúÁþ—se£W¨I­;±-³!¶¹»¾ÁÅÇÈÉÊË ÍÎÐÓ&Ö2ØAØSÙfÙ|Ù”Ù«ÙÃÙáÙðÙôvŸg¦Y¬K²<·.º!½À ÄÇÊÎÒÕÖÙÛÝßá ãæé$ì2íCîVïkï„ïœï²ïÆïÝïäj¨[¯L¶>¼/À ÄÈ ÌÐÔÙÞâåæèéìîðò õøü#ÿ3ÿFÿZÿqÿ‰ÿŸÿ±ÿÀÿÆÿÿÿÿÿÿ(ÿ7ÿDÿQÿ\ÿfÿoÿwÿ~ÿ…ÿ‹ÿ‘ÿ—ÿÿ¤ÿ«ÿ´þ¿ýÎûæùöøÿ÷ÿ÷ÿ÷ÿðÿìÿéÿÿÿÿÿÿÿ$ÿ2ÿ?ÿLÿWÿaÿjÿrÿyý€ü†úŒù’ø˜öŸõ¦ô®ò¹ðÆîÞíðëþêÿéÿéÿçÿãÿàÿÿÿ ÿ ÿ ÿÿÿ,ÿ:ÿFþRû\øeõlótñzïî‡ìê“éšç¡æ©ã³á¿ßÐÝéÚùÙÿ×ÿÕÿÕÿÕÿÔÿÿ ÿÿÿ ÿÿû&÷4ô@òLîVê_çgänâtà{Þ܇Ú֔ԛѣϭ̸ÊÇÈàÆóÅÿÃÿÃÿÃÿÃÿÃÿÿ ÿÿÿÿ óîê-æ:âEÞOÙXÔ`ÑhÎnÌtÊ{ÈÆ‡ÄŽÂ–Àž¾§»²¹À·Ôµì³û³ÿ²ÿ²ÿ±ÿ±ÿÿ ÿÿ÷ôç àÚ%Ó2Î>ÊIÆRÃZÀa¾h¼nºt¸{¶´ˆ²°™®¢¬­ªº¨Ë¦æ¥÷¤ÿ£ÿ¢ÿ¢ÿ¢ÿÿû ïæ ß ÚÐÉÄ*¿7»B·K´T²[¯b­h«n©u¨{¦ƒ¤‹¢” žž¨œµ›Æ™â˜ô–ÿ• ÿ” ÿ” ÿ” ÿüñãÖÌÇÄ ½·!².®:ª D§ M¤ U¢ \  bž iœ o› v™ ~— †– ” š’ ¦‘ ³ Åâ‹ö‰ÿˆÿ‡ÿ‡ÿ‡ÿöç Ö$È%¿"¹´± ª¥'¡3>šG˜O•V“\‘ciŽpŒx‹‰‹‡–†¢„°ƒÁÝô}ÿ|ÿ|ÿ{ÿ{ÿï!Ý)Ê-¾/µ,®'¨ £ž™!”-‘8ŽA‹I‰P‡W…^„d‚k€s|}†|‘zžx«w¼v Ôt!ðr!ÿq"ÿq!ÿq!ÿq!ÿè(Ò0Â5·7­5¥1ž+˜#’ ‰!'†"2ƒ#<#D~#K|$R{$Yy$_w$fv%nt%ws%q&o&™n&§m'¸l'Îj(íi)ÿh)ÿh)ÿh(ÿh(ÿá.Ë6¼;±=§=Ÿ9—3-ˆ' ƒ'("|)-y*7w*?u*Gs+Nq+Tp+[n+bl+jk,ri,}h,‰f-–e-¤d.´c.Êa/é`/ý`/ÿ`/ÿ`/ÿ`.ÿÚ4Å<·A¬C¢C™@:ˆ4€.z-w.s/)q03o0;m0Ck1Ji1Qg1Wf1^d1fc2oa2y`2…_2’]3¡\3±[4ÆZ4æY5ûY5ÿY4ÿY4ÿY4ÿÒ8À@³E¨HžH•F‹@‚;y5s3o4l4%i5/g57e6?c6Fb6M`6T_6[]7c\7k[7vY7‚X8V8žU8¯T9ÃS9äS:ùS9ÿR9ÿS9ÿS9ÿÍ<¼D¯I¤LšL‘K‡F}@s;l8 h9e9"c:+`:4^:<]:C[:JZ;PX;XW;`V;hUÁM>áM>øM>ÿM>ÿM=ÿM=ÿÉ@¸H¬M¡P—QŽO„KyEn@f= b=_=\>(Z>1X>8W>@U?FT?MS?UR@]P@fO@pN@|LAŠKAšJA«IB¾HBÞHBöHBÿHBÿHAÿHAÿÅDµK©PžT•T‹S€PuJjFaB\AYBWB%UB.SB5QB=OBCOCKNCRMDZKDcJDnIEzGEˆFE˜EF©DF½CFÜCFõCFÿCFÿCEÿCEÿÁG²O¦TœW’XˆX~UqOfJ\FWFTFQF"OF+NF3LG:KGAJGIIHPHHXGHaEIlDIxBI†AI–@J§?J»>KØ>Jó>Jÿ>Iÿ?Iÿ?Iÿ½J¯R£X™[]†\{YmSbOWLQJ NJLKJK(IK0GK8FL?ELFDLNCMVBM_@Mj?Mv=N„RT2]F1^N0^W/^b-^n,_}*_Ž)_ (_³'_Ì'_í'^ÿ']ÿ(]ÿ(\ÿ­\¢d˜jŽnƒoyonn`kTiIg?e5c 2c0c/d!.d)-d1,d9+eB*eJ(eT'e_&fk$fz#f‹"f f±fÉfë eþ dÿ cÿ!cÿ©bžj•pŠs€uuuit\rOqDo:n0m)l 'l&l%m$$m,#m4"m=!nF nPn[ngnvn‡ošo®oÆnémülÿkÿkÿ¤išqv†y|{q{d{WzJy?x5x+w"vvwww&w.w7x@xJxVxcxrxƒx—x«xÃwævúuÿuÿtÿŸq•x‹|‚wj‚]‚P‚D‚8‚.‚$‚‚‚ ƒƒƒƒ'ƒ0 ƒ9 ƒD ƒP ƒ] ƒlƒ~ƒ‘‚¥‚»Ûò€ÿÿÿšy~†ƒ}…o‡b‰UŠI‹=Œ1Œ&ŒŽ  )2=IVevŠŽŸŽ´ÏŒîŒû‹ÿ‹ÿ”€‹…‚‰tŒfY‘L“@•4–(–—˜š ›œ œœœœ"+5@N\nœœ—œ¬›Æšè™ù™ÿ˜ÿŽˆ†Œxj”\—OšB6ž)Ÿ¡¢¤¦¨©© ©©ªª"«+¬6¬D¬S¬c¬w«Ž«¤«¼ªÞ©ô©ý©ÿ‰Ž{“m—_œQ D¤6¦*¨©« ®°²µµµ¶ ·¸¸º!»+¼8½G½X½k½½™½°½Ì¼ê¼÷»þ~•p›b S¥Fª8­*¯±´ ·¹¼¿ÂÂÃÄÆÇ ÈÊÌ Ï+Ð:ÑKÑ^ÒsÒ‹Ò¤Ó»ÓØÓíÓösd£V©G¯9³*¶¹¼ ¿ÃÆÉÍÏÐÒÔÖÙÛÞáäè*è<éOédê|ë•ë¬ëÂìÕìåf¦X¬I³;¹+¼ÀÄ ÈÌÏÓÙÝàáãåçêìîñ õøû+ý>þSþjÿƒÿ›ÿ®ÿ¾ÿÊÿÿÿÿÿÿ&ÿ4ÿAÿMÿXÿbÿkÿsÿzÿÿ‡ÿÿ“ÿ™ÿ ÿ§þ¯üºúÉùáøó÷ÿöÿõÿñÿéÿäÿáÿÿÿ ÿ ÿÿÿ!ÿ.ÿ<ÿHÿSÿ]ÿfþmüuû{ù‚øˆ÷Žö”ô›ó¢ñªï´íÁëÕêìèüçÿåÿæÿàÿÙÿÔÿÿ ÿÿÿ ÿÿÿ)ÿ6ÿBûN÷Wô`òhïoívì|ê‚èˆçŽå•ãœá¤ß®Ý¹ÚÊ×äÔöÑÿÐÿÐÿÏÿËÿÇÿÿÿÿÿÿ úö#ó0ð<íGéQåZâbßiÝoÚvØ|Ô‚ÒˆÐ͖˞ɨdzÅÁÂØÀï¿þ¾ÿ½ÿ¼ÿ¼ÿ¼ÿÿÿÿÿôíèã)ß5ÛAÖKÑTÍ\ÊcÈiÆoÃuÁ{¿‚¾ˆ¼º˜¸¢µ¬³¹±Ë¯ç®ø¬ÿ«ÿ¬ÿ¬ÿ«ÿÿÿöîçß ÖÏ"Ê.Ç:ÃDÀM¼U¹\·cµi³o±u¯{­‚«Š©’§œ¥¦£³¡ÃŸÞžòÿœÿœÿ›ÿ›ÿÿö é ß ÕÎÆÀ»'·2³=°F­OªV¨\¦c¤h¢o¡uŸ|„›™——¢•®“½‘ÓíüŽÿÿÿÿùêÜÍľ º ´®ª*¦5¢? HP›V™\—c•i“o‘vŽˆŒ’Šžˆª†º…Ï„ ë‚ ü ÿ€ ÿ€ ÿ€ ÿñàÍ Á!¸±¬¨ ¢ #™ .• 8“ A IŽ PŒ WŠ ]ˆ c‡ j…qƒz‚„€~›|¨{¸zÎxìvÿuÿtÿtÿtÿèÓ&Ã*¸*®(§# ›–Œ'‰2†;„C‚K€Q~W|^{eylwtv~tŠr–q¤o´nÉmèküjÿjÿjÿjÿà&Ê-¼1°3§1Ÿ,—&Š …"~,{6y>wEuLsSqYp`ngmpkzj…h’g e °d!Åc!äb"úa"ÿa"ÿa"ÿa"ÿ×,Ã4¶8ª9¡8˜5/ˆ(€!{ w!t"'q"1o#9m#Ak#Hi#Nh$Uf$[e$cc%kb%ua%_&Ž^&]'­[(Á[(àZ)÷Y)ÿY)ÿY)ÿY(ÿÏ2¾9±=¦?œ?“<Š60y*r&n'k(#i(,f)5e)<c)Ca*J`*Q^*W]*_\+hZ+rY,}X,‹V-šU-ªT.½S.ÜR/õR/ÿR.ÿR.ÿR.ÿÊ6º=­B¢D˜DA…<{7r1k, g-d-a.(_.1].9\/@Z/FX/MW/TV0\U0dS1nR1zQ1ˆP2—N2¨M3»M4ØL4óL4ÿL4ÿL3ÿL3ÿÆ:¶B©FžI•I‹GBw=m7d2 `2]2Z2%X3-V35U3<S4CR4JQ4QP4YO5aM5lL6wK6…J7•H7¦G8¸G8ÓF8ñF8ÿF8ÿF8ÿF7ÿÁ>²E¦JœM’MˆK~GsBi=_7Z6W7T7"R7*P72O89M8@L8GK8NJ9VI9_H:iG:uE;ƒD;“C<¤B<¶A=ÐA=ðA=ÿA<ÿA<ÿA<ÿ¾B¯I£N™PQ…P{LoFeBZ=T;Q;O;M;'K;/I<6G<=G\C>gB?s@???‘>@¢=@µCe=Cq;C:D9D 8E³7EË7Eì7Eÿ7Dÿ8Dÿ8Cÿ·I©PžU”X‹Y€XvVhP]LSHJE FDDDBD"AE)?E1>E8=E?I=I;J&:J.9J58K=7KD6KM4LV3L`2Ll1Mz0M‹.Mœ-N¯,NÇ,Né,Mý-Mÿ-Lÿ-Lÿ°P¤X™]a†b{ap_b[XXNUCQ;O 8O6O5O#4P+3P22P:1PB0QJ.QS-R],Ri+Rx)Rˆ(Sš'S­&SÅ&Sç&Sü'Rÿ'Qÿ'Qÿ¬U \–bfƒgxfme`aU^J[?X5V1U0V.V-V',V/+W6*W>)WG(WP&XZ%Xg$Xu#Y†!Y˜ Y«YÂYåXú Xÿ Wÿ!Wÿ¨Zb“gŠkluljk]hQeFc;`1^*] (]&]%^#$^*#^2"^:!^C _L_W_c`q`‚`•`©`À`â_ù^ÿ^ÿ]ÿ¤`™hn†p|rrrfqXnLlAk6i-g#fffff%f-g5g>gHgSh_hnhh’h¦h½hàg÷fÿeÿeÿŸg–oŒs‚vxxmx`wSvFt;s1r'qqp pppq'q/q8qBqN q[ qi qz qq¡q¶pÒpïoÿ nÿ nÿ›o‘u‡y~|t~f~Y~M~@}5}*|!||| | | ||!|)|2|=|H|U|c|t|‡{œ{±zËyëyúyÿxÿ–wŒ|ƒ€yƒl„^…Q†E‡9‡-‡#‡‡‡ ˆ‰ ‰‰ˆˆ#‰,‰6‰BˆNˆ]ˆmˆ‡•‡«†Ä…æ„ø„ÿ„ÿ~‡ƒ~‡q‰c‹VI<‘0‘$‘’“ ”•–– •–––$–.–9–F–U–e–x•Ž•¤”¼“ß“õ’ÿ’ÿ‹†ƒŠugY”L—?™2š&›œ Ÿ ¢£££ £¤¤¥%¦/¦<¦K¦[¦n¥„¥›¤³£Ð£ï¢ü¢ÿ†x‘j•\™NA 3¢&£¥§ ©«­¯°°°± ²³´µ$·0·?·P·b·x·¶©¶Â¶ä¶õµþ{“m˜_P¢B¦4©&«­¯ ²´·º¼½¾¾ÀÁ ÄÆÉ$Ê2ËCËUÌj̜̃˵ÌÎÌéÌöp›a¡R¦D«6°'²µ¸»¾ÁÄÈËËÍÎÐÒÕØ ÛÞâ$ã5äHå\æsææ¥æ¼æÓççc¤UªF°8µ(¹¼ÀÄÇËÏÔØÜÝßáãåèêíñõø%ù8ùMúcû|ü•üªü»ýËÿÿÿÿÿÿ#ÿ0ÿ=ÿIÿTÿ^ÿfÿnÿvÿ|ÿ‚ÿ‰ÿÿ•þ›ý£û«úµùÃ÷ÛöðôÿóÿòÿìÿâÿÜÿÖÿÿ ÿ ÿÿ ÿÿÿ+ÿ8ÿDÿOÿYþaüiúpøw÷}öƒô‰òñ–ïí¥ì¯ê¼èÍæèäúãÿâÿàÿÕÿÎÿËÿÿÿÿÿÿÿÿ%ý2û>÷IóSð\îcìjêqèwæ}äƒâ‰àÞ—ÜŸÙ©Ö´ÓÄÐÞÎóÌÿËÿÊÿÈÿÂÿ¾ÿÿÿÿÿû öñ í,ê8çCãMàVÜ]ÙdÕkÒqÐvÎ|̃ʉȑƙģÁ­¿»½Ï»ë¹ü·ÿ·ÿ¶ÿ´ÿ±ÿÿÿÿöîçáÛ%Õ1Ò<ÎFÊOÇWÄ^Ád¿j½p»v¹|¸ƒ¶Š³“±œ¯§­³«Å©á§õ¦ÿ¥ÿ¤ÿ¤ÿ¤ÿÿüñèàÔ ÌÇÂ*¿5¼?¸HµP³W°^®d¬i«o©u§|¥„£Œ¡–Ÿ¡­š¼˜Ò—î•þ”ÿ•ÿ•ÿ•ÿüðãÕÌž¸³#¯.«8©A¦J£Q¡WŸ]c›išo˜v–}”†’›Ž§Œ¶ŠÉˆç‡ù‡ÿ†ÿ†ÿ†ÿô äÑŽ¶±«¦¡&ž1š:˜C•J“Q‘W]ŽcŒiŠpˆw†€„‹‚–€£~±}Ä{ázõzÿyÿxÿxÿêÖÆº±ª¤ Ÿ ™•‘)3‹<ˆD†K„Q‚W]c}j{rz|x †v ’t  s ¯q Áp ßo önÿmÿmÿmÿáË#¼&±&¨$ ™“Ž ˆ „ " ,~ 5|=zExKwQuXs^qepnnwl‚kih­fÀeßdöcÿcÿbÿbÿÖ$Ã*µ.ª/ -˜("‰‚}yv's0q8o?mFlLjShYgaeidrb~a‹_™^©\¼\ØZóZÿYÿYÿYÿÍ*½1¯5¤6›4’1‰+%ysol"i+g3e;dAbH`N_U]\\d[nYyX‡V –U ¦T!¸S!ÒR"ñR#ÿR#ÿR"ÿR"ÿÈ/¸6«: <–;8ƒ2z-r&j f c!a!&_"/]"6["=Z#DX#JW#QU#XT$aS$jQ%vP%ƒO&“N'£L'µL(ÎK(îK)ÿK(ÿK(ÿK(ÿÃ4³;§?œA’@‰>9u3l-c'^&\&Y'"W'+U(2T(9R(@Q(FP)MN)UM)]L*gK*sI+€H+G,¡F-³E-ËE.ìD.ÿD.ÿE-ÿE-ÿ¾8°?¤C™EE…C{>q9g4^.X+U+R,P,'O,/M-6L-<J-CI-JH.RG.ZF/dE/pC0~B0A1ž@2±?2È?3ê?3þ?2ÿ?2ÿ?2ÿ»<­C¡G–IŒIƒHxDm>c9Z4R0 O0L0J0$I1+G12F19D1@C2GB2OA3X@3b?4m>4{=5‹<6œ;6¯:7Æ97è97ü:7ÿ:6ÿ:6ÿ·@ªFžK”MŠN€LuHjC`>V9M5 I4G5E5!C5(A5/@56?6=>6E=7M<7U;8`:8k99y89‰7:›5:­5;Ä4;æ4;û5;ÿ5:ÿ5:ÿ´C§JœN’QˆR~PsMgH\DR?H:D9A9?9>9&<9-;:4::;9;B8;J7‡1>™0?«/?Â/?ä/?ú0?ÿ0>ÿ0>ÿ±G¤M™RU†V|UqRdLYIOEE@?> <>:>9>#7>*6?15?84?@3@H2@Q1A[0Ag.Bu-B…,C—+Cª*CÀ)Dâ*Cù*Cÿ+Bÿ+Bÿ®J¡Q—VYƒZyZnWaRWNMKCG:C 6C4C3C 2D'1D/0D6/E=-EF,EO+FY*Fd)Gr(Gƒ&G•%H¨$H¾#Hà$H÷%Gÿ%Gÿ&GÿªOŸU”Z‹^_w^k\_XUUKQ@M5J0I.I-I,I$+J+*J3(J;'KC&KL%KV$Lb#Lp!L€ M“M¦M»NÝMöLÿLÿ Kÿ§SœZ’_ˆc~dtcia\^R[GXf3e)c a` ````&`.a7a@aKaX af bv b‰ a a²aËaë `ý _ÿ _ÿ›f’mˆq~suujt\sOrCp8o-n$lkkj j j j! j) j2j<kGkSkakqj„j˜j­iÆiçiøhÿhÿ—ms„w{zp{c{VzIz=y1x'wvvv v vvvv$u,u6uAuNu\ulu~t“t¨sÀsãr÷rÿqÿ’u‰z€~v€i[‚N‚A‚5ƒ)‚‚ ‚ƒ‚ ‚‚‚‚&‚/‚;‚G‚Uex€¢ºÝ~ô}ÿ}ÿ|„{„n†`ˆRŠE‹9Œ,Œ!ŒŒ Ž (2?M]p…ŽœŽ³ÐŒð‹þ‹ÿˆ„€ˆr‹dVH“;•.–"–—˜™› žžŸŸ) 5 C T fŸ{ž“ž«Æéœùœÿƒ‹uŽg’Y–K™=œ0ž#Ÿ ¢¤¦¨ªªª««¬ ­®¯±)±8±H±Z±o±ˆ± °º¯Ý¯ò¯ýx‘j–\šMŸ?£1¦#§©«®°²µ··¸¹º¼½ ¾ÀÃÅ+Å<ÆNÆbÆzƔƭÆÈÅåÅól™^žO¤A¨2¬$¯± ´·º½ÀÄÆÆÈÉËÌÎÐÓ ØÜÞ-ß@àTáká…áŸá·áÏáæ`¡R§C­4²%µ¹ ¼¿ÃÇÊÏÓÖ×ÚÜßáãæéì ðóô1öF÷\øtøù¦ù¸øÉÿ ÿ ÿ ÿÿÿÿ,ÿ9ÿEÿPÿYÿbÿjÿqÿwÿ~ÿ„þŠýü—úžù§÷±ö¾õÒóìñþðÿðÿæÿÜÿÒÿÍÿÿÿÿÿÿÿÿ'ÿ3ÿ?ÿJþTû]ùd÷kõróxò~ð„ïŠí‘ì™ê¡è«æ¶äÇâãà÷ÞÿÝÿÙÿÌÿÅÿÁÿÿÿÿÿÿ ÿü"ù.ö9óEïNìWé^æeälâràwß~݄ۋؒ՛Ҥϯ;ËÕÉïÇÿÅÿÄÿ¾ÿ¸ÿµÿÿÿÿþ÷ ñëç(ä3á>ÝHØQÓXÐ_ÎeÌkÊqÈwÆ}ĄŒÀ”¾ž»¨¹¶·Èµæ³ú±ÿ°ÿ°ÿ¬ÿ©ÿÿÿúñèà ØÑ"Í-Ê7ÆAÂJ¿R½Yº_¸e·jµp³v±}¯…­«—©¡§®¥¾¢Ø òŸÿžÿžÿžÿœÿÿ÷ëáÖË Å¿»&·1´:±C®K«R©X§^¦d¤i¢p vž~œ†š˜›–§”¶’ÊéüŽÿÿŒÿÿøéÛÌĽ¶ °« §*¤4¡<žDœKšR˜X–]•c“i‘pw€‹Š‰•‡¡…¯ƒÁà€õÿÿÿÿî Üʾµ ¯©£ž™#–,“5>ŽEŒKŠQˆW†]…cƒjqz}„{yœwªu»tÔrðrÿrÿqÿqÿãÍ¿³ª£ — ‘‰%…/ƒ7€>~E}K{QyWx]vdtkrtpn‹l˜k¦i·hÎgìfýf ÿe ÿe ÿÖÄ ¶#«#¡ ™’Œ† €|y(v0t8r ?p Eo Lm Rl Xj _h gg pe zc ‡b •` ¤_ ¶^ Î\í\ÿ[ÿ[ÿ[ÿÍ!¼(¯+¤+š)’$‰‚{u q n!k*i2g9e@dFcMaS_Z^b\k[vYƒX’V¢U´TËSìRÿRÿRÿRÿÆ(¶.©2Ÿ2•1Œ-ƒ'z!rk gda%_-]4\;[BYHXOVVU^SgRrPOŽNŸL°KÇKéJýJÿJÿJÿÁ-±4¥7š87‡4}/t)l#d^[Y!W)U0T7R=QDOKNRMZKcJnI|G‹F œE!®D!ÄC"æC"üC"ÿC"ÿC"ÿ¼2­8¡<—>=ƒ:y5o0f*^$W T Q O!%N!,L!3K":I"@H"GG"NF#WD#`C$kB$yA%ˆ?&™>&«='Á='ã=(ú=(ÿ='ÿ='ÿ¸6ª=ž@”BŠB€?v;l6b0Y*Q% M%K%I%!G&(E&/D&6C&=B'DA'K?(T>(]=)i<)v;*†9+—8+©7,¿7,à7,ø7,ÿ7,ÿ8,ÿµ:§@œD‘F‡F}Ds@h;_6U1L+G)E*C*A*%?*,>+3=+9<+A;,H:,Q9-[8.f6.s5/ƒ4/•30§20½11Þ11÷21ÿ20ÿ30ÿ±>¤D™HJ…J{IpEe@[;R6H1B. ?.=.;."9/)8//7/660>50F41O31Y22d12q03/4“.4¦,5»,5Û,5õ-5ÿ-4ÿ.4ÿ®A¢H—LNƒNyMnJbEX@N<E7=3 93736343&33-24414<05D/5L.6V-6b,7o+7*8‘(8¤'9¹&9Ø'9ô(9ÿ(8ÿ)8ÿ«EŸK”O‹RSwRlO_IVFLBB=88482818/8$.8+-92,99+:A*:J);T(;_'Ô!>ó"=ÿ#=ÿ#<ÿ¨IO’S‰VWuVjS]OSLJH@D6@/= -=+=*>!)>((>/'>7&??$?H#@R"@]!Aj AzAB BµBÑBñBÿAÿAÿ¥MšSX†[}\r[gX[TQRHN=J3G*C &C%C$C#D%"D,!D4 E<EEEOFZFhFxGŠGžG³HÎGïGÿFÿFÿ¢R—X]„`zap`e^YZOXDT9Q/N&K JJJJ!K(K0K8KBLLLWLeMuMˆMœM±NÌMîMÿLÿLÿžW”]‹bewfmfcdVaJ^?[5X+V"TR RRRR$R,R4R>SHSTSb Tr T„ T˜ T­TÅ Tç Sû Rÿ Rÿ›]‘dˆh~ktlkl_jRgEd:b0`&^][Z ZZ [ [' [0 [: [E[Q[^[m[€[”[¨[ÀZâZöZÿYÿ—dŽk„n{prrgqYpLn@l5k*i!gff e eedd#d,d5d@dLdZdid{dc¤c»bÝbôbÿaÿ“l‰q€uxwmx`wRvFu9t.t#rqq qqp ppoo&o0o;oGoTodounŠm m¶lÖkòkÿkÿŽs…x}{s}e~X~K~>~2~&}|| |}}| ||||!|)|4{@{N{^{oz„zšy±xÎwïvþvÿ‰zx‚kƒ]…O†B‡5ˆ)‡‡‡ ˆ‰ŠŠ‰‰ ‰‰‰Š"Š,Š8ŠF‰V‰h‰|ˆ”‡«†Æ…ê…û„ÿ…‚}†oˆa‹SE8‘+‘’’ “”–—˜——— ˜˜™™"š.š=™M™^™s˜‹˜£—¼–â–÷•ÿ€‰rŒdV“H–:™,š›œ žŸ¡£¥¥¥¥¦§§ ¨©«#«1«A¬S¬g«€ªšª³ªÐ©ï©ûug”Y˜Jœ<Ÿ-¢ £¥ §©«®±²²³´µ¶¸¹ »½¿$¿5ÀGÀ[ÀrÀÁ¦ÀÁ¿ã¾ój—[œM¡>¥/©!«­ °³µ¸¼¿ÁÁÃÄÆÇÉËÎÑÕØ'Ù9ÚMÛdÛ~ܙܰÜÉÜã]ŸO¥@ª2¯"²µ ¸»¿ÃÆËÎÑÑÔÖÙÛÞàäçëïð*ò?óUômôˆô¡ô¶ôÇÿ ÿÿÿ ÿÿÿ(ÿ4ÿAÿLÿUÿ]ÿeÿlÿrþxü~û„ú‹ù’÷™ö¢ô¬ó¹ñËðèîûíÿìÿáÿÒÿÉÿÄÿÿÿÿÿÿÿÿ#ÿ/ÿ;ýFúP÷Xô_òfðlïríxì~ê…éŒç“åœã¦á±ßÁÝÝÛôÙÿÖÿÏÿÄÿ½ÿ¹ÿÿÿÿÿÿ ü÷ô*ò5î@éJæRãYà`ÞfÜlÚr×xÔ~Ò…ÐΕ̟ɪǸÅÍÃëÀþ¿ÿ¾ÿ¶ÿ°ÿ­ÿÿÿÿùòëæá$Þ/Ú9ÓCÏLÌSÉZÇ`ÅfÃkÁq¿w½~»†¹Ž·˜µ£³°±Â®à¬÷«ÿªÿ¨ÿ£ÿ ÿÿÿõëáÖ ÏÊÆ)Â3¿=»E¸M¶T³Z±_°e®j¬p«w©§‡¥‘£œ ©ž¸œÎšî™ÿ—ÿ–ÿ–ÿ“ÿýñåÙÍĽ·³"°,­6©>§F¤M¢S YŸ^d›jšp˜w–€”Š‘•¢°‹Ã‰ãˆù†ÿ†ÿ†ÿ†ÿóãÑŽ¶® ¨¤ &œ/š7—?•F’L‘RX]‹cŠjˆq†y„ƒ‚›~©|»zÕxòxÿwÿwÿwÿçÑ Ã ¸ ®¨¢›–’Ž(‹1ˆ9†@„F‚L€RW}]{czkxsv}tˆq•p¤n´lÊkêjüjÿjÿjÿÚÆ¸­¤œ– Š…!~*{2y9w@uFsLrQpWn^mekniwgƒe‘cŸb¯`Ä_ä_ø^ÿ^ÿ^ÿν° ¥›“‹„ ~ yur#o+m3k:i@gFfLdRcYa`_i^s\ZYœW­VÁU áT öT ÿT ÿT ÿƶ%©(ž(”%‹!ƒ{tn if d %b -` 4^ :] @[ GZ MX TW \U dT oR {PŠOšN¬LÂLãKùKÿKÿKÿ¿&°+¤/™/-†)}$tle_\ZX'V.T5S;RBPHOPNWL`KkIxH‡F—E©D¾CßCøCÿCÿCÿº+«1 4•5‹41x+o&f ^W TQO#N*L1K7I>HDGLETD]CgAt@ƒ?”=¦<»;Û;ö<ÿ<ÿ<ÿµ0¨6œ9‘;‡:~7s2j-a'Y!Q LJHF&E-C3B:AA@H>P=Y<d;q9€8’7 ¤6 ¸5!Ö5!ô5"ÿ5!ÿ6!ÿ²4¤:™>?…?{<p8g2]-T(L"FCA?"> )= 0; 6:!=9!E8"M7"W6#b4#n3$~2$1%¢/%¶/&Ò/&ò/&ÿ0&ÿ0&ÿ¯8¢>–BŒC‚CxAn=c8Z3Q.H(@$ =#;$9$8$&6$,5%34%:3&B2&J1'T0'_/(l.({,)+* **´)*Ï)+ð*+ÿ**ÿ+*ÿ¬<ŸB”FŠG€GvElBa=W8N3D.<) 7(5(3(2(#0()/)0/*7.*?-+H,+R+,]*,j(-y'-‹&.ž%.³$/Í$/î%/ÿ%/ÿ&.ÿ©?E’IˆK~LtJjG^BT=K9A48/2- 0-.--- +-'*..).5)/=(/F'0O%0[$1h#1w"2‰!23±3Ë3í3ÿ 3ÿ!2ÿ¦CšIM†O|PsOhL\FRCI??;66.2 +2)2(2&2$%3+$32#4:"4C!5M 5X6e6u7‡7›7¯8È8ë8ÿ7ÿ7ÿ£G˜MŽQ„S{TqSfPZLPIGE=A3=*9 %7#7"8!8" 8(80989A:K:V;c;r;…<™<­=Æ=é<ý<ÿ;ÿ K•Q‹U‚XyYnXdVXQNOEK:G0C'@ > >>>>%>-?5?>?H@S@`ApA‚A—A¬BÄBçAüAÿ@ÿP“V‰Z€]v^l]b[VWLUAQ6N,K#HE DDEE"E)E1E;FEFPG^ Gm G G“ G§G¾Gà Gö Fÿ FÿšU[‡`}bscjb`aS^GZUJVWVeUwU‹U U¶TÔTñSýSÿ“bŠh€lwnoocnVlIj=h2f'ecba `` ____&_/_:_E_S_a^r^‡]œ]²\Ï\ï[ý[ÿj†o}rutju]tOsBr6p+o nml lkk jjjj!i*i4i@iNi\imh‚h˜g®fÊeíeüdÿ‹q‚vzyp{b{U{Hz;z/z#yxw wwwwv vvvv#v.u:uGuVuht|t’sªrÄqépûpÿ†y}vhZ‚L‚?ƒ2„%ƒƒƒ ƒƒ„…„ƒƒ ƒƒ„„&„2„?ƒOƒ`‚u‚Œ¤€½ã~ù~ÿ‚€z„l†^ˆPŠB‹5'Ž Ž‘’’’’’’ ’““”(”6”E“W“k“‚’œ‘¶Øóÿ~‡pŠaSE“7•)–—˜ ™›œž    ¡¡¢ £¤¥¦*¦:¦L¥`¥x¥’¤¬¤É£ë¢úsŽd‘V•G™9œ*ž ¡£¥§©¬®®®¯°±²³µ ·¹¹.º@ºT»jº…¹¡¹»ºÞ¹òg•X™Jž;¢,¦¨ª¬¯±´¸»¼¼¾¿ÀÂÄÆÈË ÏÑ Ñ2ÒFÓ]ÔvÔ’Õ«ÕÄÔâ[L¢=§/¬¯±µ¸»¾ÂÇÊÌÌÎÐÒÕØÛßâæ ëì$í8îNïgð‚ðœð²ñÅÿÿÿÿ ÿÿÿ$ÿ0ÿ<ÿGÿQÿYÿ`ýgümúsùyøö…õŒó”òð§î³ìÄëáêøéÿçÿÙÿËÿÂÿ½ÿÿÿÿÿÿ ÿÿ ÿ+þ7úBöKòSð[îaìgêmèsçyåã†áŽß–ݠ۬ػÔÑÓðÐÿÎÿÈÿ½ÿ¶ÿ²ÿÿÿÿÿý÷óï&í1è;ãEàMÜUÙ[ÖaÓgÑlÏrÍxËɇÇŚåÀ²¾Å¼åºû¸ÿ·ÿ°ÿ©ÿ¥ÿÿÿþõìå ßÚ Ô*Ð5Ë>ÈGÅNÂUÀ[¾a¼fºl¸r¶xµ€³ˆ±’®ž¬ª©»¨Õ¦ó¤ÿ£ÿ¡ÿ›ÿ˜ÿÿûðåØÎ Ǿ$».·8´@±H®N¬TªZ©_§e¥k¤q¢x ž‹œ–™£—²–Ç“è’þ‘ÿÿÿ‹ÿùëÝÏÆ¼µ °¬¨(¥1¢9ŸAH›N™S—Y–^”d’jqŽzŒƒŠˆœ†ª„¼‚Üö€ÿÿÿ~ÿìÚɾ¶®§ ¡œ˜"•*’2:A‹G‰M‡R†X„]‚dks}}{ˆx•v£u´sÌqípÿpÿpÿpÿßÊ ¼ ± ¨¡›” Ї$„,3:}A{GyLwRvWt]rdpmovl‚jig®eÃdäcúcÿbÿcÿп²§• ‰‚~zv%t-q4o:n@lFjLiRgXf_dgbq`|^‰\˜[©Y¼XÜXôXÿWÿWÿƶªŸ•…~ w rnjh'e.d4b;`@_F]L\SZZXbWlUwS…R”P¥O¸NÒMðMÿMÿMÿ¿°"£%™%"…}un g c_]![(Y/W5V;TASGQNPUN^MgKsI H ’G £E ¶D ÐD ïC ÿC ÿD ÿ¹$ª)ž,”,Š*€&w!nf_Y U S Q "O )M /L 6K <I BH IF QEZDdBp@?>¢<¶;Ñ;ñ;ÿ;ÿ<ÿ´)¦/š22†1|-r(i#aYQLJHF$E+C1B7A>@E>M=V<a:m9|76Ÿ5³4Í3î4ÿ4ÿ4ÿ¯.¢4—7Œ8‚6x4n.e*\$TLF B@? ='<-;49:8B7J6S5^3j2y0Š/.±-Ê-ì-ÿ.ÿ.ÿ¬2Ÿ8”;Š<€<v9k4b/Y*P%G@ <:86#5)40372>1G/P.[-g,v*ˆ)›(®' Ç& ê' þ( ÿ( ÿ©6<’?‡A}@t>i:_5V0M+D%; 6320 /&.--4, ;+ D*!N)!X'"e&"t%#…##™"$­!$Å!%è"%ý"$ÿ#$ÿ¦:š?C…E{DrCg?]:S6J1A,8&1# .","*")"#(#*'#1&$9%%A$%K#&V"&c!'r'ƒ(—(«)Ã)æ)û)ÿ(ÿ£>˜CGƒIzIpGfDZ?Q;G7>25-,( ('''%'$'!#('"(.!)6 )?*I*T+`+o,,•-©-Á-ä-ú-ÿ-ÿ¡A•G‹K‚MxMnLdIXDO@F==834*/$, !, ,--%-,.4.</F/Q0^0m11“1¨2¿2â2ù1ÿ1ÿžE“K‰O€QvRmPbNVIMFDC;?1:'62 2222"3)314:4D4O5\5k6}6‘6¦ 7¼ 7Ý 6ö6ÿ6ÿ›I‘O‡S~VuVjU`SUOLLBI8E.A$=:88899&9.97:A:L ;Y ;h ;z ; <¢<¸<Õ<ð ;ÿ ;ÿ˜NŽT…X|[r[hZ^XSUIR>N4K*G!DB@ ??? @# @+ @4 @> AJAVAeAvAŠAŸA´AÐAîAü@ÿ•TŒYƒ^y`p`f`]^Q[EW:T/Q%OLJH GGGG H(H1H;HGHSHbHsH†H›H±GÌGíGûGÿ’Z‰`€cwenfefYdL`@]5[*Y WUS RQ PPPP%P.P8PCPPP^PoPƒO˜O®NÉNëMûMÿa†f}itllmakSiFg:d/c$a_^ \\[ ZZZY!Y)Y3Y?YLYZYkX~X”W«WÅVéUûUÿŒh‚mzprrgrZqLp?n3m(kjh ggff e eddd$d.d:cGcUcfczba§`Á_æ_ú^ÿ‡otxwnx`xRwEw8v+v tssrrrqq qpppp'p3o@oPo`ntn‹m¢l¼kâjøiÿƒw|{s}e~WI</€"~~~~~~ ~ ~~~ ~+}9}H}Y|m|„{œz¶yÚxõwÿ€w‚iƒ[…M†?ˆ2‰$‰‰‰Š‹ŒŒŒŒŒ Ž"Ž/Ž?PdŒ{Œ•‹®ŠÍ‰ï‰ÿ{…mˆ^ŠPB4‘&’“”•–˜š›››››œ žŸ $ 4 F YŸpŸŠž¥žÂèœùpŒaS’D–6™'›œŸ¡£¥¨©©©ª«¬­®° ²³´'´9µM´d´~³š³´³Õ³ðd“U—G›8Ÿ)¢¤¦¨«­°´¶¸¸¹º¼½¿ÀÃÅÉÊË,Ì@ÍVÎǫ͋ÌÂÌâX›I :¥,©«®±´·º¾ÃÆÈÈÊËÍÏÒÕÙÝáæçè2éHê`ë{ë—ì®ìÂÿÿÿÿÿ ÿÿ!ÿ,ÿ8ÿCÿLþTû[úbøhönõtôzò€ñ‡ïí—ë¡é­ç½åØäóâÿàÿÐÿÄÿ¼ÿ¶ÿÿÿÿÿÿ ÿÿý'ù2õ=ñFíOëVè\æbähãnásßy݀ڈؑԛҦϴÌÉÉéÈÿÇÿÁÿ·ÿ¯ÿ«ÿÿÿÿÿøòîê"æ,á7Ý@ØIÓPÐVÎ\ÌbÊgÈmÆsÄyÂÀо”¼Ÿ¹¬¶¾´Ý³÷±ÿ°ÿ¨ÿ¢ÿžÿÿÿùïæß ÖÐÌ&È0Ä:ÀB½J»P¸V¶[µa³f±l°r®z¬‚©Œ§˜¥¥£´ ËŸîÿœÿ™ÿ”ÿ‘ÿÿöêÝÏÇÀ»· ³*°3­;ªC§I¥O£U¢Z _žek›r™{—…”’¬Ž¿Œâ‹ú‰ÿ‰ÿ†ÿƒÿôäÔÈ¿µ® ©¥¡#ž,›4˜<–C”I’NSŽY^‹d‰k‡s…}ƒˆ•¤}µ{ÏyñxÿwÿwÿuÿåÑø¯¨ š•‘Ž&‹-ˆ5†<„B‚G€MR}X{^yexmvvsqŽom®lÄjçiýhÿhÿiÿÕö«¢›” ˆƒ |'z.w5u;tArGpLoRmXk_ifgpe{cˆb—`§^»]Ü\ö\ÿ[ÿ[ÿÉ ¹¬¡— ˆ‚{ wso!l(j/h5g;eAcFbL`R_Y]a[jYuW‚U‘T¢SµQÏPïPÿPÿPÿ¿°¤™‡ wqkgda"^)]/[5Y;XAVFUMSTR\PeNpL}KIžH°GÇFéFûFÿEÿ¸ª ž"“"‰€woh a ]YVT#R*P0O5N;LAKHIOGWFaDlCyA‰@š>­=Ä<å<ø<ÿ<ÿ²"¥'™)Ž)„'{#qiaZ S OLJH$G*E0D6C=AC@K> S= ]; h: v8 ‡7 ™5 ¬4 Â3 ä3 ù3 ÿ4 ÿ­' ,•/‹/€.w*m%d \TLF C A ? > %< +; 2: 88 ?7G6P4Z3f1t0….˜-«,Ã+å,ú,ÿ-ÿª,1’4‡5}4t1j+`'X!OG@ ;976!4'3-241;0C.M-W,c*q)‚'•&©%À$ã%ú&ÿ&ÿ¦1š69…:{9q6g1]-T(L"C;5 21/.$,*+1*8)@(J'T&`$o#€!“ §¾àø ÿ ÿ£4˜:=ƒ>y=o;e7[2R-I(@#80 ,*)' &'%-$5#>"G!R ^l~‘¥¼Ýöÿÿ¡8•=‹ABwBm@c<Y7O3F.=)5$- ' %#!!$ +2;E O!\!j"{""£#º#Ú#õ#ÿ#ÿž<“A‰DFuFlDbAW<M8D4<03+*&#" !!""!"(#0#8$B%M%Y&h&y&'¢'¸'Ö(ô'ÿ'ÿœ@‘E‡H}JtJjI`FUAL>C::612(- ) ''''(%(-(6)@)K*W*f+w+‹ ,Ÿ ,µ ,Ï ,ï ,ÿ +ÿ™DI…L|NsOiN^KSGJDB@9=/8%40- ,---#-*.3.= /H /U 0c 0t 0ˆ1œ1±1Ë1ë0ü0ÿ—HMƒQzSqTgR]PRLIJ@F5B+>":74 33 3 3 4( 41 5;5F5R6`6q6„6™6¯6È6è6ù5ÿ”MŠRVxXoYeX[UQRGOýHúP÷Wõ]ôcòiðoïtí{ëé‰è’æœä¨â·ßÍÜîÙÿÙÿÊÿ¾ÿµÿ°ÿÿÿÿÿÿÿüø#ô.ð8ëBèJåQâXà]ÞcÜhÙnÖtÔ{тϋ͕ʡȯÅÁÂãÀûÀÿ»ÿ°ÿ¨ÿ¤ÿÿÿÿûóí èãà(Ú2Ó<ÏDÌKÉQÆWÄ]ÂbÁg¿m½t»{¹„·Ž´™²§¯·­Ð«òªÿ©ÿ¡ÿ›ÿ—ÿÿÿôéàÕÎÉÅ"Á+¼5¹=¶E³K±Q¯V®[¬aªf©m¦t¤|¢† ’žŸœ®™Ã—ç–ÿ•ÿ’ÿÿŠÿüðãÔÈ¿¹ ³¯¬%©.¥6£> DžJP›U™Z—_–f”l’u~ŽŠ‹—‰¦‡¸…Ö„ö‚ÿÿ~ÿ|ÿíÝÌÁ¸®§ ¢žš—'”/‘7=C‹I‰NˆS†Y„_‚e€m~w|‚zxžu¯sÇrìqÿpÿpÿnÿÝɼ±©¡™“ ŽŠ‡!„)07}={ByHxMvRtXr_qgopl{jˆh—f¨e¼cábúaÿaÿaÿͼ¯¥œ”†|xu#r)p0n6m<kAiGhLfRdYc`ai_t][Y¡W´VÐUòUÿTÿUÿÁ ²¦›’ ‰‚{u plhf#c*a0`6^;]A[FZLXSV[TdRnQ{OŠM›L®KÆJêIþIÿIÿ¹ªž”Šy qke a]ZX$V*T0S6Q;PANGMNKVI_GiFvD…C—A©@¿?â?ø>ÿ?ÿ²¤˜Ž„zrjb\WSPNL%J+H0G6F<DBCIAQ?Z>e<r:9“8¥6º6Û5ô5ÿ5ÿ¬ Ÿ$”&‰&$u ld\T N JGDB @%?+>1<7;>9E8M6V5a3n1~0/£-¸,Ô,ð,ÿ,ÿ¨%›*,†-{+r'h"_WOHA >;98!6&5,322 91 A/ I. S, ^+ l) |( & ¢% ·$ Ó# ð$ ÿ% ÿ¤*˜/2ƒ2y1o.e)\$SKC<5 3 1 / . "- (+ .* 5) ='F&P$\#j"{ Ž¢·Ôòÿÿ¡/•3Š6€7v6m3c/Y*P%H ?80,*('%$$*#2":!C NZhx‹ µÑñÿÿž3“7ˆ:~;t;k8a4W/N+E&=!4-& #" !'/7AKWev‰ž³Îïÿÿœ6‘;†>|?s?i=_9U5L0C,:'2"*" $,4>IUct‡œ± Ë ìÿÿ™:?„B{DqChB^>S:J6A29-1)(%  ")2<F S a !q !… "™ "® "Ç "ç "û !ÿ—>ŒCƒFyHpHgF\DR?I;@884/0','# !!"" "'#/ $9 $D %P %^ &o&‚&–&¬&Ä&å&÷&ÿ•BŠGJxLoLeK[HPDGA?>7;-6$1-*( ' ( ( (% )- )7*B*N+\+l++”+©+Á+ã+ö*ÿ’FˆKOvQmQcPZMOJGG>D3@)< 841 / ..//#/+050?0L1Y1i1|1‘1§0¿0á0õ/ÿK†P}TuVkVbUXSNPEM:I/E%B>;9 7 6666 6)627=7I7W7g7y76¥6½6à5õ5ÿP„V|Zr[i[`[WYLV@R5N*K HFC A@ ?>>>>&>/>:>F>T>d>v=Œ=£<»<Þ;õ;ÿŠW‚\y_paha_aT^G[:W/U%RPM KJI H GGFF"F,F7FCFQF`EsE‰D D¸CÜBõBÿˆ]bwenggh[fNcAa4^)\ZWVTSRQ QPOOO'O2O?OMN]NoN…MLµKØJõJÿ…e|itlmnbmTkGi:g-e"db` _^^]\[ ZZYY"Y-Y:YHXXXkWW™V²UÒTôSÿlypsshsZrLq?p2o%nlk jjiihgff feee'd4dCdSdec{b”a­`Í_ñ^ÿ}twwny_yQyCy6x)xwv uuuvuttsss rrr r,r;qLq_qtpŽo¨nÆlíkÿ{{r~d~UG€9+‚ ‚ƒƒƒ‚‚‚‚‚‚ ‚‚‚#‚2‚CVl€†¡~½}æ|üv‚hƒY…K‡<‰.Š ‹‹ ‹Œ‘’‘‘‘‘‘’’“ ”””'”8”L“b“|“˜’³‘Øöjˆ\ŠM?0’!”• –—™›Ÿ    ¡¢£¤¥¦¨¨¨-©@©V©o©‹¨¨§Ç¦ì_P’A–3™#œ Ÿ¡£¦¨¬®¯¯°°²³´¶·º½¿¿À3ÀIÀbÀ~À›À·¿ØS—D›5Ÿ&£¥ §ª­°³¶»½À¿ÁÂÄÆÈÊÌÏÓÚÛÝ%Þ;ßSànߌݩÝÂÿÿÿÿÿÿÿÿ$ÿ/ü:ùCõKóRñYï^ídëiéoçuæ|ä„âà—Ý¢Ú±ÕÅÒèÐÿÏÿÄÿ¸ÿ¯ÿ©ÿÿÿÿÿÿû ÷óï)ê4æ=âEÞLÛSØXÔ^ÒcÐiÎnÌuÊ}È…ÆÂ›À©¾º»Ù¹÷¸ÿ´ÿ©ÿ¢ÿÿÿÿÿöîç áÜ×#Ð.Ë7Ç?ÄFÁM¿R½X»]¹b¸h¶n´u±~¯ˆ­“ª¡¨±¦È¤í¢ÿ¢ÿ›ÿ•ÿ‘ÿÿüîãØÍÆÁ½¹'µ0²8¯@¬FªL¨Q§V¥[£a¡gŸnžv›€™Œ—™”¨’¼ßŽûŽÿ‹ÿ†ÿƒÿøéÜÌÁ¸² ¬¨¥!¢)ž2œ9™?—E•J”P’UZ`g‹o‰x†„„‘‚ €²}Ì|ñ{ÿzÿwÿuÿæÓÆ»±§¡› —“#Œ+Š2ˆ8†>„D‚INS}Y{`yhwqu|s‰p˜o©m¿kæjÿiÿiÿgÿÓõ«£›’Œ ‡ƒ}$z+x2v8t=rBqHoMmSlYjahjftda‘_¢^¶\Õ[÷[ÿZÿZÿŶ©Ÿ–އ€z uqnk%i+g1f7d<cAaG_M^S\[ZdXnV{TŠR›Q®PÈOîNÿNÿMÿ» ¬   • Œƒ|unieb_]%[+Y1X6V;UASGQNPUN^LhJuH„G•E¨D¿CäBüBÿBÿ²¥™Ž„{ sle_ [WTQO%N+L0K6I<HBFHEPCYAc?o>~<;£:¸9Ù8õ8ÿ8ÿ¬Ÿ“‰uld ]VQ MJGE D&B+A1?6>=<D;K9T7_6k4z2Œ1ž0³/Î/ï.ÿ.ÿ§š"$„$z!qg_WP IE A><:!9&7,62483?1G0P.[-g+v*ˆ(œ'°&É%ê%û%ÿ¢#–(‹**w(m%d [RKC = 96310"/'--,4*;)C(M&X%e#t"† š®Æçø ÿŸ(“-ˆ/~/t.j+a&X!OG?81 .+)('#%)$ 0# 7! @ J U b r … ™ ­ Æ æ ù ÿœ-1†4|4r3h1_,U'L#D<4-& $ " !   % , 4=GSaq„˜®Æèûÿ™1Ž5„8z9p8g6]2S-J(B$91*# !)1:EQ_o‚– «  ã ú ÿ—5Œ9‚<x=o=e:[7R2I.@*7%/!(  &.8BO \ l  “¨¿àõ ÿ•8Š=€@wAmAd?Z<P8G3>06+.''# # , 5 @ L Zi|‘¦¼Ýòÿ“<ˆADuElEcDYAO=F9>652..%*%!    "*3 > J!W!g!y!Ž!¤!º!Û!ò þ@†E}HtJkJbIXFNBE?=<59+4"/+( $ ###$ $(%1%<%H&U&e&w&Œ&¢&¹&Ù%ò%þŽE„I{MsOjO`NWKMHDEO2L(HEB@=<; :999 9)949@9N9]9o8…8œ7³7Ò6ò5ÿ‡UZv]m_e_]_R\DX8U-R"OLJ HFED C BAAA&A1A=AJAZAl@?™?±>Ð=ò<ÿ„\|`scledfYdKa>^2[&YVT RQONML KKJJ"J,J9JGJVIhI~H–G¯FÍEñDÿcygrjkl`kRiDf7d*b`^ ][ZYXWVV UTTT'T4TBSRSdRyR’Q«PÊOïNÿ~jwnpqfqXpJoK=S;]9i7x6‰4œ3±2Î2ñ1ÿ1ÿ¦šŽ„zph_ XQL HDA?=!<&:,91776>4F3O1Y/e.s,…+˜*­)Æ(ê(þ(ÿ¡• Š!!ulcZR KD@ <8643!1'0,.3-:+B*K(U&a%p$"•!© Á äùÿ"‘&†(|'r%i"_WNF? 84 1.,*)"'(&.$6#>"G R^m~’§½ßõÿš'Ž+„-y-p+f(]$TKC;4 - ) &$"! $*2:DO\j|¥»Ûò ÿ—+Œ/1w2n1d.[*Q%I @81)#    ' . 7 A M Z i { ¥ » Ù ñ ÿ•/Š36v6l5c3Y/P+G&>!6.'       # + 4? J X g y¢¸Ôïÿ’3ˆ7~:t;k:a8X5N0E,='5#-&    ( 2 <HUev‹ ¶Ñîû6†;|>s?j?`=W9M6D1<.4*,&%"   &/:FSbt‰ŸµÐíûŽ:„?{BrChC_BV?L;C7;430,,$)$   $-8DQ`r‡³ÎíüŒ>‚CyFpHhH^FUDK@C=;:37*2 -)% "   " +!6!A!O!^"p"…!›!²!Í íüŠC€HxKoLfM]KTIJFBC:@/;%73/ ,)' &%&&!&)&3'?'M'\'m'‚'™&°%Ì%î$ýˆHLvPnQeR\QSOJLAI5D+@!<96 20/ .----'-1-=-J-Y-k-€,—,¯+Ë*î*þ…M}RuUlWcW[VSUGQ;M0I%FC? =:87 6 5444$4.4:4G4W4h4}3•2­1Ê1î0ÿƒS{Xs[j]b][]OZBV6R*O LIGDBA?> ==<s0r#qo nmmmmlkjiiih hhg!g/g?fRffedšc·báaüwxmz_zPzBz3{%{zyyyyzzzxxwwwwwwww&v6vIu_uwt“s¯rÓq÷q~cT€E‚6ƒ(„„ƒ„„…†ˆ‰ˆ‡‡‡‡‡ˆˆˆ‰‰‰,ˆ?ˆUˆm‡‰†§…Ç„ïf„W†Hˆ9Š*ŒŽ‘“•—˜–———˜˜™š›!3Iœbœœœœ¹›âZ‹KŽ<‘-“•–˜šœž¡¤¦§¦§§¨©ª¬­¯±³ ³´'´=µUµp´Ž´¬´ÌM’?–/š Ÿ¡£¦©¬¯³µ·¶·¸º»½¿ÁÄÇËÍ ÎÏ/ÏHÐbЀÐи  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~€‚ƒ…†‡ˆŠ‹ŒŽ‘“”•–˜™šœžŸ¡¢£¤¦§¨ª«¬­¯°±³´µ¶¸¹º»½¾¿ÁÂÃÄÆÇÈÉËÌÍÏÐÑÒÔÕÖ×ÙÚÛÝÞßàâãäæçèéëìíîðñòôõö÷ùúûüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~€‚ƒ…†‡ˆŠ‹ŒŽ‘“”•–˜™šœžŸ¡¢£¤¦§¨ª«¬­¯°±³´µ¶¸¹º»½¾¿ÁÂÃÄÆÇÈÉËÌÍÏÐÑÒÔÕÖ×ÙÚÛÝÞßàâãäæçèéëìíîðñòôõö÷ùúûüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~€‚ƒ…†‡ˆŠ‹ŒŽ‘“”•–˜™šœžŸ¡¢£¤¦§¨ª«¬­¯°±³´µ¶¸¹º»½¾¿ÁÂÃÄÆÇÈÉËÌÍÏÐÑÒÔÕÖ×ÙÚÛÝÞßàâãäæçèéëìíîðñòôõö÷ùúûüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿmft1!  !"#$%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïñòóôõö÷øùúûüýþÿ  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ƒ†‰‹Ž’•—™›Ÿ¡£¥§¨ª¬­¯°²³µ¶·¹º»¼½¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÍÎÏÐÑÒÒÓÔÕÖÖרÙÙÚÛÛÜÝÝÞßßàááâããäååææçèèééêëëììíîîïïððñòòóóôôõöö÷÷øøùùúûûüüýýþþÿ  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ƒ†‰‹Ž’•—™›Ÿ¡£¥§¨ª¬­¯°²³µ¶·¹º»¼½¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÍÎÏÐÑÒÒÓÔÕÖÖרÙÙÚÛÛÜÝÝÞßßàááâããäååææçèèééêëëììíîîïïððñòòóóôôõöö÷÷øøùùúûûüüýýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷éþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáÍ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿݯ–·ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅŒh§çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌœ‰¤çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúλÆõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜŽõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿“z…ÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ[=e¨öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ¼u4T›ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ”~I,NšìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØÔʳ~em¥ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÅ®¯ÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÖÆìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ滑tc«÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÄšsE&4}Ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ€U0 `²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏt5 R§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–4O§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöi  R±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿË;5L[ML^Ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©`6`†Ÿ¶¬©¸Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà—¾åÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÙʼÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏšmZFˆêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄ|>&T°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàƒ<.‡íÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬SmÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû€1 aÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒZ]Ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨5\Óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ} TÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿî}EDÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüªd/"7IXÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿé¤kA(?c•§ºÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕ²¬²Ìäúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿå»—wbÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛžg6 ŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ?^ÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ9<ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžL#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜo}ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Hoîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„dæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìQWÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸HÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿt8Ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù¢Z#Åÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß›\, ºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï±}U9""²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß¿¥™˜š ¬½Úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿã¾€|ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò·„W0¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒŠLróÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖ6KÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú‘>/«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀZ•ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç^wÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´%jÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}[ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý+Lëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥<áÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0 -Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™Ša''×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿí¾‰U'%ÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÊv]J<2-,09GÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýæÝÖÒÐÓÙäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÔ»Öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç¸jK/oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä¡g4<ÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖ‚;—ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿí…1oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦BPáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìi7Éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³/"¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿy§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò4™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©ŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ—jÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎcÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)"aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹£€W7hÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÓ®”†|uqprw”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛº‚iiÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ“e=žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛŽLnÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ|,E×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹*"´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂD—ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç6jÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿFGøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿé5éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–%Ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼ÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ' µÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿp ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàœŒpUB3& &¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùäØÒÎÌËÌÏÖàüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÓ¼ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ©…eH,…ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ«q<OàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕ5²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãu‰ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#gÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕCHöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠ.Ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8Èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœ¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿº“ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜ‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿhÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑaÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿɬ™‰}vqligfgkpzŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâŪ‘yawÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿݦwP, 1Äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà’NÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒp`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîo7âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–Àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®‰ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžrÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ*ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ^ÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+Èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€Ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ ËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüëáØÏÌÍÏÐÒÔ×ÜâêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÚÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÆ£„hM2«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹|Fqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×|/;ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßd µÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™Kÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶0ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×çÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ/¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿyŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6mÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|iÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ× hÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpaÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPlÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿiZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™IÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿX)ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»/øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«)ÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉG .>Rh„íÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÕÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÒ°’w]B( JÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅ}EØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄPŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ hÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿH¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿuƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿiÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃRÿÿÿÿÿÿÿÿÿÿÿÿÿÿç>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞ"òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèJ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz Lÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢Wht€œ«¼ÐçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ£zX:)#Ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬RiÿÿÿÿÿÿÿÿÿÿÿÿÿÿäC4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿyãÿÿÿÿÿÿÿÿÿÿÿÿÿͲÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ÿÿÿÿÿÿÿÿÿÿÿÿÿÿO]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒ:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ*ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿOçÿÿÿÿÿÿÿÿÿÿÿÿÿÿtÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›ÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄ­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿð3šÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãD\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘Aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊKÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËW $1?N`t‹§Çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×çòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÔÍǾº·³°­©¨¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ~S?0# Ûÿÿÿÿÿÿÿÿÿÿÿÿÿv§ÿÿÿÿÿÿÿÿÿÿÿÿÿºuÿÿÿÿÿÿÿÿÿÿÿÿÿÿFÿÿÿÿÿÿÿÿÿÿÿÿÿÿNÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒýÿÿÿÿÿÿÿÿÿÿÿÿÿÁÛÿÿÿÿÿÿÿÿÿÿÿÿÿñ¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿD¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿkÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘yÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞ!SÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿw+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖMýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§.Õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜*-E`àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨ctœ«»ÍâúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçË·©•މ„€|xtplheÿÿÿÿÿÿÿÿÿÿÿÿÿ¼jH- 1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBÜÿÿÿÿÿÿÿÿÿÿÿÿÿ޲ÿÿÿÿÿÿÿÿÿÿÿÿÿÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)kÿÿÿÿÿÿÿÿÿÿÿÿÿÿZNÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿú=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿeÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿñNØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌC¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòt _ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèt,8ESbr…›´Òõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×èôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû÷óñîìëëìñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ²™‡ymd]VQKFA<82-(#ÄÿÿÿÿÿÿÿÿÿÿÿÿÿK% ’ÿÿÿÿÿÿÿÿÿÿÿÿÿˆfÿÿÿÿÿÿÿÿÿÿÿÿÿ×=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿlÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉ öÿÿÿÿÿÿÿÿÿÿÿÿÿñ5ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[Ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ^wÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍC@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿N,>Rj†¥ÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ|Œš§¶ÅÖèýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîá×ÏÉþº¶±­©§¦¦§®ÿÿÿÿÿÿÿÿÿÿÿÿÿ¾†m[L@7/(" ÿÿÿÿÿÿÿÿÿÿÿÿÿ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ4öÿÿÿÿÿÿÿÿÿÿÿÿÿvÒÿÿÿÿÿÿÿÿÿÿÿÿÿ°²ÿÿÿÿÿÿÿÿÿÿÿÿÿá$–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿQ|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿyfÿÿÿÿÿÿÿÿÿÿÿÿÿÿ QÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇ#<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿîK'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØLÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥8 4NkŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™9CQ_n}Ž µËåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë̹¬¡™‘‹†|xtpkhffhñÿÿÿÿÿÿÿÿÿÿÿÿÿaE2#žÿÿÿÿÿÿÿÿÿÿÿÿÿ~uÿÿÿÿÿÿÿÿÿÿÿÿÿÃRÿÿÿÿÿÿÿÿÿÿÿÿÿû72ÿÿÿÿÿÿÿÿÿÿÿÿÿÿjÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿæBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿiÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹,ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿè\Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜.)FfÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿî (7FWi~•¯Ìîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç ª¹ÈØéüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýõðëæâßÛØÔÒÑÐÒ×àÿÿÿÿÿÿÿÿÿÿÿÿÿΞŠ|qia[VQLHC>:62/.1ÿÿÿÿÿÿÿÿÿÿÿÿÿÒ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿBÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ° öÿÿÿÿÿÿÿÿÿÿÿÿÿÝ9ÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿbÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‰¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯"™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖH‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿriÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡(NÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ\3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–.2Rwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàr/BXp‹¨ÈìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊon~Žž°ÃØïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùàÒÈÀºµ°¬¨¥¢Ÿ››œ §ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚dVKC<60+'" Ôÿÿÿÿÿÿÿÿÿÿÿÿÿ’­ÿÿÿÿÿÿÿÿÿÿÿÿÿÌ‹ÿÿÿÿÿÿÿÿÿÿÿÿÿûRmÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€Qÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐB#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿõh ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸ7/PtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝr*AZu”¶Úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼XDTdu†š¯ÈãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÍáñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüûúûýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–І‚{xvtrsuxÿÿÿÿÿÿÿÿÿÿÿÿÿëO:0(! #ÿÿÿÿÿÿÿÿÿÿÿÿÿÿiÿÿÿÿÿÿÿÿÿÿÿÿÿÿ› ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿðcÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕ[ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±I9]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿå{ !8Ro³Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»X)9IZl€—°Ííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³ž´Å×ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúïçáÜÙÖÔÒÐÐÐÑÓÙàë÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸Š~wqlhda^[YXWWY^eqÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿1 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿíVèÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚Ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«/³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒW›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷|…ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢7+”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËa ,PvžÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ0 #;Wv™¾åÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃc*;L_t§Æçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨–¨»ÐçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÎÅ¿¼¹¶´³±²²µ¹ÀÉÕãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ—ld^YUQOLJHGFHKPYf¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§&VÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎP:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿôy !ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸ2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄX1Z„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿé'KqšÂéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§I/JhŠ®ÕüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓu&8J^u«Ëïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®r…˜¬ÂÛöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿²ª¦£¡ ŸŸ¡£¦¬´ÀÍÝìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠZSOKHFDCBABCGNYi}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿž.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃVAÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç{ 4`‹´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸ?%Jq™ÂëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆf*Dbƒ§ÍõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëŽ5+>Qh¼Þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾v”©ÁÜùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒØóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöòðïïïñóøýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø°Ÿš—–––˜›Ÿ¤¬¶ÂÑáîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþŽPJGEDDDEFGKQZhƒ©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦A6cºáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆe 'LsœÄìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåˆ/*Db‚¦Ìôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«P6Ja{–´ÖúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ‡|˜±ËéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔÎíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíåããäæèíñùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý±”’’•™£©²¼ÐíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSGIMQV`sНÖüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²V5Pm‹®Ò÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍo>_{™·×ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦ÂáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÎëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ endstream endobj 105 0 obj<> endobj 106 0 obj<> endobj 107 0 obj<> endobj 108 0 obj<> endobj 109 0 obj<> endobj 110 0 obj<> endobj 111 0 obj<> endobj 112 0 obj<> endobj 113 0 obj<>stream H‰œ—OܸÅïý)tL–Åÿäu'A#›CÜ@ 'ñb¸‹Œñ&Ÿ>ER-U•ªÛ*Ãð̼ê’ô#›z|ûçÿûñuzûýÓ2}÷‡§éòïË2Ec§Tìô¦ýñúñò·éçËÛ§÷ËôüyZæ0-“ÿÓç矡ùÓtyû×/?þúé?Ÿ~yùåõSýøëë§çéõÓåíŸà¢~¾˜ÅÂeÞš9›<½ña2K»ñ?ÆmŸÞãÛ¾úËÅL_&?}ò'øÿnúáÃ2ý}b÷©—|Y¥»Éµ›ë­ý_—÷À?þõÁÄŸÚÙº0½1f*q4˜Ö8¿L¸(ò&^º€'ÑÚˆØÚög›ñìï®—·×k“×öÈë3|týÒÈ®Ÿa¶ÚïÿµÒë”ûeyŠËœ’o7usŠ)N×zùùýõ§Ë¯t\y‘Æ…ª•ÂìÖFÄÉ1Ü0´0ƒ„YŒ„‰ª•>Ÿµ6"”˜Ù ˜E„e$qâr¥„­÷Q¥D-faqì‹w7ÖÙY°“‡nø~ØÛ—;”®¸™]VØ­z7ÙèçZ2ÝìV2Ïú·6–€&¯«}b['UÊi6K:k0c“¸$P¹2Æ×:©ÒÒšrÖgÆe‘•+c`|.s¥¥uËi»yqWÆåÊŸ/\©iócÇ¥0t‰wÍFšwŸ‘+`DÁPŸ ½ûjôs}ÿåf¢;í2ÔÚHðÕÕ>›­“*íÜÚeÉ‹+•+c`|­“*-mŒ§]–ƒH‹Ê•10¾¸ÒÒ¦tÚeE܃q¹2ÆW"WZÚ»ŒOëÝ]‡¢$놑”LÝ5ô榵Ÿëûî²FÌX’»pk#ÁûQWÛ,öNª”sj#¸ËJ+ÀZ1~áre ŒÏ®´´F aQ¤ubÃåÊŸ³\ii¡9®×EÄõâæ‹Ë•A0@ï¸Òâ:+ÙË%6Ú²|Kl¤—ÁØ| Zõn°ÑÏõÃ1r‰† 8†Y·¦®öy ‰+í,û|ÚpQŒa¸\ã‹™+-m”b˜l¸$Æ0\®Œñ¥Â•š¶œ7\÷c\® ‚–…+-n* wHÎ%ej¤WÀˆŠ¥6z³ÕÚÏõ}›¹EÌ\’Ípk#Á[TWÛlöNª´s[ÂY›9#æ0\®Œñ™À•’Ö-Rm欘Ãp¹2Æg#WZZOØlvÛšÞs)Ct‰+-°F‚£Ë^i7ŒÄb˜Uï†ý\?0Xc—h°€£˜óxKêjŸÅ`¸ÒΩ·‚Áœ¸d£Åp¹2Æ-WZZ8D –DÚ$&1\®Œñ%Ç•–6ºÙùd ípæM~|¸¾;BgqÆåÊPfö\i¡S˜K)Nño_Ií™ßée0´©ë†Þ\¶ösýÀuEÌ^¢ë Îc.ãý©«}ZKæJ;ɹœu_Ä<†Ë•1P¾ÞI•’ÖÃáò¤ë¼ã.WÆÀøì•–Ö,§]w{¹ÁEl‡7b Ã@áJ‹ ý|w‘>eeˆ¤WÀ€œ#îYõî®ÑÏõ}·y/F0Ém¸µ‘ફ}2}àJ;µ.žv[c.WÆÀøBäJK '˳n‹b&ÃåÊ_L\iiCÒ»-‰›2.WÃ@SæJ‹ GÌGn#I2Ø H’´’겡7W­ý\?pYs˜è²‚³™Ïx[êjŸÄb¹ÒNiv‚˼´nG†?Œ—+c |½“*--,.Ë"­C.WÆÀøŒçJI/Õ¬|Tƒ$[¼åR †hWZ`8[êSdHö[R$½ †fqЪw‡~®ï;.81ƒIŽÃ­oM]íÓê WÚIvËiÇ1—áre Œ/,\iiá¤yÖqQŒc¸\㋆+-m0Ç%qKÆåÊ0b²\iá°©ÊÑe~¤WÀ€’§>zóÕÚÏõŸe1}‰>Ë8‘…„·¨®öÉÌ‘+íÔ¦tÚgELd¸\ã+‰+--œ-Oú,.bÃåÊ(_ï¤JK[²Âg°‚D`ƒ7]ŠÁMáJ áxyßgÝ'.̱§×8»8‚×ìœÛ /ð °Ì±ßâséig^¼í:TšK¿\MqŽÞt•³ž/[ÁÍÙ¥gcÚ¢‚˜áA·›yø|Úà%Zàò`gG!G3\T:…ÏC€{­¬­yÿÖÔviœ3œ$è(žá«èù~,ð¦ýVð~N>÷±Ã8|›yx!8XüµŠÉ½gñ“-³k‘Þ7.K‚A{ÏhƒŠñ¦_.0Š¥…Ch/Poƒ e»Œ"äíQp5€˜!ä&M@gÛçfÌØ&]›~óŸÚL·äЗÌöyÎa¿š¤?AR3q½#d–zI…r?ÑŽJ›;¡)ãFKH½ žäX€™mWùvï!Ó4ÌFûNA˜ÇçËVÓ-äC¸o«Ä¶ Úy¾Éíž0¾ÝžÚ†Wo²°˜Û÷éòÜ”À !u•áóë«¿¥ÜŽöõs¸üÞ¯†}ÝÚ‰êy=!5K´6m­[·‰—.œ]Ek#bkkæýË!¥àûb·6;.òAÎ,=è-åÔAŽv·— ’/«47¹vs½µ^vÍT°—œxסÎöòØÄËå¶›.ÝÎvK“ÆÀÆ–×XzoäEBGÕJŸOÈz:Ìt‹‘3H˜ÅH˜¨Zéó Yo#B‡™€Y$LX)'.WJ@ØFU:Ô[J“/Þ}å°f|¹k¦‡5zY`O|²êÝG£ŸkÉW·”Ð_…笅[K@“7Ô6±½“*Ý4›%5˜±I\¨\ãëT)iM9ë3ã²H‹Ê•10>—JIë–ÓvóâÆ‹Ë•10>_JK›;îpX3%Þ5›|X£WÀˆà@K|6ôî«ÑÏõý÷—iAó¤ËPk#Á[ÔPÛlöNª”süi—%/®T®ŒñõNª”´1žvY"-*WÆÀør8(%mJ§]VÄ=—+c`|%”’6‡Ç.#ÙÐz§È†´FÇX⮡77­ý\ßw—5bÆ’Ü…[ Þ†ºÍâè¤J7§v1‚»¬´¬ã.WÆÀø¬9(%­‘BXiÂp¹2ÆçìA)iátµ×ë"âzqóÅåÊ  w¥Ä…ƒš`/ÿ•ØhËò-±‘^cóhÕ»ÁF?× ÄÈ%.àf=Þš†Úæ5¤ƒRβϧ ņ˕10¾˜JI¥&.‰1 —+c`|©”–¶œ7\÷c\® ‚–å ”¸©<6Ü!5:—”©‘^#*–ÚlèÍVk?×÷mæ1sI6íoQCÝfstR¥œÛÎÚÌ1‡áre ŒÏ„ƒÒѺEÊa¢Íœs.WÆÀøl<(%­‰'l6»mÍŠÀ﹃!ºtPJ`G—½"8Òn‰+Ä0«Þ 5ú¹~`° Æ.Ñ`G1çñ–4Ô6‹Á”rN½ æÄ%Å(†Ë•10¾hJI ‡È£Á’H›Ä$†Ë•10¾äJIÝì|²„ö8ó&?>\ß¡³¸ ãre( 3ûƒRB§0—Râß¾’½3ß’ée0´©ë†Þ\¶ösýÀuEÌ^¢ë Îc.ãýi¨mZK>(å$çrÖu08i¸\åTéh=.OºÎ[1Žáre ŒÏ.¥¤…þ³®»½Ü`‰ØoĆ:sPÿç¼Ü‘#Gb êï)æŒú®°özk«ò÷ø‹")HBTAÎD$v?b*ÑYFlºe¾ùî"SmÆ)Ÿ ŠQ¸çÔ·»Ž~Ô_»-%5‚inã­“„/ªC]ÃLù¡Œ£eÙmYe¼<€øry(#-Ý,WÝVÔLÆË€¯Ô‡2Òæjw[U—2/€ÐÚʈMWÌ7·‰$™C6$IÙM/ÒœtÙ¡/Wý¨_\ÖÕ¦º¬ól–_K‡º†ØÃCGڢⲤÛ#Ã?Þ€—0H¾£S*#-],Ÿ.k*­WC/`>ŸÊF›]Ò®jA¿ªÑ R_¹C~(#0Ý-í)2×ð“)£W U8èÔ·ÃŽ~Ô_;.G5ƒiŽã­“„¯¦C]cý¡ŒCŽnÙqYÍe¼<€ø²{(#-Ý4WWÔ8ÆË€¯ø‡2Òfoq\UW2/ÀÄÊL—MS~,ôu¶ü(Ÿ ªIúìЗ¯Î~Ô/>kjúR}Öx"Ë•¯¨C]Ãl塌£­uÙg]Md¼<€øz}(#-Ý-}VœÄxyƒä;:¥2Òöfð Øó¥+1Ñ÷‡²êÿÚg»ObÞÊžWÓ˼¶ãUø /Ên+û‡äöìL;›Ka× êÖ÷O(¡¥²•äwÕZøõ篫à·ë7ïç1 ›+ôEŸèï¿®¯Šô#Úéñ¶TŽB+‰3=Ôwº@Ï™>ëdÍ÷_éL]¦­ÑMB¾ÅŸ3ÏÐ'8zë<ß-ÄK|ì"¸SÌ6!®¶ùŸ¡Î?$òbNûË…PÎó¢wïæ{ìu)¸Ëî¹T˜ü8drŸòèF}·?– 1Òa_Øm¬s.‹KÌ]±ãyz»wÛâI>ÓCì9OÛÍiè¬:ä÷ 2jŠYÏØ 0³†Ù½†ÉªC~¿ ë^ +&Ý~ž˜]ä“¢qòò‚möIeEí~ËsåÊÿøøM8÷©i¦—p.œ„OÍ|”º¢U_}þ*ÌÕ·h-Þ:Y2ÞTl°sŸ e³wuÕ`>TõH°òà£N©Ì´¾¯úÌǦҲòà‹ ”™–®>«vKêâåå À—:(;m{wÜ#œû^¾4›ÎåôFt>Û5óÕÞúå÷Ë—¸ì2Ö:IøŠšŠMs¦¡Ì³ÍiÙe5©'•0uJe¦-eÙe-«´¬<€øZe¦¥‹ÏªËººƒyyðõÊLÛò»ËD6 )²¡ì¦7!6á®]ßn:úQ¿¸+x5ciîâ­“„î)ÎN©¬3 Î+î Ú A_¼<€ø‚e¦õZ+*mTC/`¾@™iÝÖžçÕ©¸I]¾¼<SeÆA³Wú&6†î~åcôn) šlïGýf¸¬F.Õp™Ç°øjšŠÍ5WPæ)§¶l¸¢Æ0^À|¥2Ó-†é†«j ãå ÀW;(;m_7\W÷1/€Àî@™qk7Ü#5ÆX©Q>AoÔƒ´Ù®o[ý¨_lš¹4›ñÖIÂWÔT÷4g§TæÙö¼j³èÕÆË€ÏgPVÚè´¦Ú,5‡ñòà ”™Ö—›mñ:³*pä;Wbb¬ ÌÀ¡¼MÇØ’!8Ênz“Ø…aÍ µ÷£~3XVc—j°Ì£XL|%MŦ˜=(óLSP Õ#[Ô(ÆË€¯PfZºD> VUÚª&1^À|5‚2Ó–¸ÅTƒ ýMwÞšèŸÿùû ÝÔ-ÌËP³%Pfèš·Þ{–#þï›ô˜¢ÿIz”Ñ«µ"]·ëÛeG?ê7×u5{©®ë<ÅÆ÷ÓTl¬½2¹õU×%§æ1^À ùf§TVÚD—ËE×¥ Æ1^À|Á2Óz·ìºÏ7:G*vä‹XÂhô ÌØtË|óÝ#D¦ÚŒ!R>A/£pÏ¡™»ö~Ô/nKI`šÛxë$á‹j*6Ì”A™G˲۲ËxyðåÊLK7ËU·5“ñòà+”™6W»Ûªº”yy €ÖÊŒMWÌ7·‰$™C6$IÙM/ÒœtÙ®oWý¨ß\ÖÕ¦º¬ól–_KS±!öÊ<Ò—%íÜþñ¼<€AòÍN©Ì´t±|º¬©´^ e¼<€ø|e¥Í.iWµ _Õè©À¯\‰ˆ!ƒ2ÓÝÒž"s ?I‘ò1zµP…ƒÍ¶÷£~q\ŽjÓÇ[' _MS±±ÆÊ<äè–—Õ\ÆË€/;PfZºi®:®¨qŒ—0_ñ Ì´Ù[WÕ•ÌË0±Pf`ºlšòcñݘåôB5IŸíúöÕÑúÍgMM_ªÏOd¹ò5f+ Ì£­uÙg]Md¼<€øze¦¥»å¢ÏŠSƒ/`|³S*3-õ¯ûŒN ìùÒ•€è;(+p¡ëå×>Û}óVö¼¶XŽàµÅ¯Â}Qv[éó˜ÆöìL;›Ka×ëÖ÷OH¡¥²•äwÕZøõ篳0 Z¬{Þ¼ŸÇÈm®Ð}~˜£¿ÿº¾ÊÓh§ÇsØR9 ­$ZÌôPßéý=gú¬“u6ߥ3u=¶F7 ùÎD«vKêâåå À—:*3m{wÜ#œ{ú!üÊlz8—OÐÑFøìз¯Ž~Ô_ÿ~ù—]ÆZ' _Q»º§9;¥²Î6§e—Õ¤žVÀ|³S*+m)Ë.kY¥eå À×2*+-]|V]ÖÕÌË€¯TVZ:»¯.Ù0¤hȆ²›Þ„n Â]‡¾Ütö£þÚ]Á«Kso$|íêšâÞ)•q¦îOwí„ Æ/^À|Á£²Òz-„•6ª!Œ—0_ ¨¬´!lîy^Š›ÔåËË 0ETVÜ4{¥obcèî'±Q>Fï–²0Щoƒý¨_ —ÕÈ¥.ó_M»ºçš+*ë”S[6\Qc/`¾ÒPYi‹ÃtÃU5†ñòà«•™¶¯®«û˜—@`w¨¬¸µ¿î‘c¬ÆÔ(Ÿ 7êAÚìЗ­Î~Ô_Û,:5si6ã­“„¯¨]]ÓÜ;¥²Î–ž^´Yôjãå Àç3*#mtZSmƒšÃxyð…‚ÊJë˂ͶxY8ò+11VTVàPÞ&‚clÉe7½IìÂ0§¾ uô£~1XVc—j°Ì£XL|%íêžbö¨¬3MA1XTlQ£/`¾PYiéù4XUi«šÄxyðÕˆÊJ[âS ‚ö7Ýyk¢þýçï'tS·0/@Ì–PY¡kÞzïYŽø¿oÒcŠþ'éQ>F¯F°Âu‡¾\vö£~q]W³—êºÎó½=r»«7TÖ!·¾êºäÔ<ÆË$ßÞ)•‘6ÑårÑu)¨qŒ—0_p¨¬´Þ-»îóÇÎÑÿœ—=’丄ý=EŸ@!þ“WXûykÛô÷ø¤T…RíLD¢¡ªO&*©b¾ˆ% €‡ÊŠM·Ì'ß½…ÈXª1DÊ'è…Bî9õí®£õg·Å¨F0Ím¼uðE5Õ=̘PYGò²Û’Ëx¹ð¥ŒÊJK7ËU·e5“ñràË••6»ÛŠº”y¹ €–ŠÊŠMWÌ'·‰$™|2$IÙM/Rwé²C_®:ûQ?¸¬©9LuYãÙ,V¾–¦º‡Ø<*ëHkP\µs{dø·7àå ’ovJe¥O¿ÑV•Ö©¡Œ—;0Ÿ‹¨Œ´iÚUÍëW5:A*°ç+Wb¢O¨¬Àt·´§ÈTüoR¤|Œ^Íá Sß;úQv\ jÓÇ[ _MSÝc •uÈa_v\Rs/w`¾´£²ÒÒMsÕqYc¼Üø²Ce¥MÎ⸢®d^ţ²ÓeÓ”³kÆü(Ÿ *QúìЗ¯Î~Ô>«júR}Vy"K…¯¨©îaÖŒÊ:ÚR–}ÖÔDÆË€¯TVZº[.ú,ïjãå ’ovJe¥mÕà3:A*°ãKWb¢k¨ŒÀ™®—Ÿ}6}Ò–g^%î|¯-„p¾é‹Ò¾åñ!Ím´gGÚÙöè§®í+–­ÍOð¡Å¼å親ÕýùëU ‚ÊŒÀ›sãPÑ0søz}ɾ^_Eç"øF'¿Å|jŽ´˜é¡6é<ý=%ú¬“u4ߥ3õz”T¥›„|‹?g"#t‘àÇ»ùp‰ï)Z>Åhâjÿêü}$/¦8_Îû w9ÜÝ>ØKX î²{,&¿OY_òìF}µ¿-·1DZ »uŽeq‰ï)èÏÓÛ@\m‹'ù•JbÎÓöDÝ5tVíòûÙhˆY^±c& ³9 “U»ü~A6Ú„0bŽgß0›†I'Eãäå. Ûì“ʈJnMsåŠÿøðC8w±}4ÓC8—uŽÂ'§¾}tô£Ö|õúU˜«oÍZ¼u°$6¼©îÁÎ}*”qÌn/«s¾¨G‚•;0ßè”ÊJëÚªÏ\¨*-+w`¾PQYiéê³j·¨.^^îÀ|±¡2ÓÖgǽ…sG¿ŠŸÌ¦‡sù½]`„Ï}ûêèGýù÷Ëå°ì2Ö:HøŠšêžæè”Ê:Û—]V¢zX¹ðN©¬´9/»¬&•–•;0_M¨¬´tñYuYSw0/w`¾–QYiébùè2‘ } †l(»éMèÚ"ÜuèËMg?êÏîòNÍXš»xë áûhªkгS*ãLýîwyíx¯Æ/^îÀ|Þ¡²Ò:-„e•6¨!Œ—;0_𨬴ÞoûûyÝUܨ._^î€1 ²â¯Ù+þ}Ûåcôn1 ú6ØÑúÁpI\ªáa>òÕ4Õ=×TPY§ë²á²Ãx¹ðåŠÊJ›µ¦®¨1Œ—;0_i¨Ì´mÝpMÝǼÜÛŽÊŠ[Ú³áÞRcŘåôFÍK›ú²ÕÙú³Í®f.Íf¼uð5Õ5ÍÙ)•u¶-­Ú,85‡ñràs •‘6ìZSm¼šÃx¹ðùŒÊJëò‚ͶpY8ð+11TV`ŸŸ&‚c¨Ñe7½IhÂ0§¾ uô£~0XRc—j°Ä£Xˆ|%MuO19TÖ™F¯,¨G6«QŒ—;0_ö¨¬´t‰|7XQi‹šÄx¹ð•€ÊJ›Ãbñ‚öºó–Hÿüû¿¿ß¡«º…y¹ `ÖˆÊ M¬­µ$Güßé1÷›ô(£W«YºîЗËÎ~Ô®kjöR]×x •ï§©î±¶ŠÊ:äÚV]w5ñrÉ7;¥2ÒFº\.º.z5Žñràó;*+­Û—]÷úq£s¤b¾ˆ% €‡ÊŠM·Ì'ß½…ÈXª1DÊ'è…Bî9õí®£õg·Å¨F0Ím¼uðE5Õ=̘PYGò²Û’Ëx¹ð¥ŒÊJK7ËU·e5“ñràË••6»ÛŠº”y¹ €–ŠÊŠMWÌ'·‰$™|2$IÙM/Rwé²C_®:ûQ?¸¬©9LuYãÙ,V¾–¦º‡Ø<*ëHééw—EíÜþí x¹ƒä›RYiébùÒ:5”ñràs•‘6íQ»ªyýªF'Hö|åJ @ô •˜î–ö™ŠÿMŠ”Ñ«ù"têÛaG?êÏŽKAÍ`šãxë á«iª{¬¡¡²9ìËŽKj.ãå À—vTVZºi®:.«qŒ—;0_v¨¬´ÉYWÔ•ÌË0±xTV`ºlšòcv͘åôB„(|vèËWg?êŸU5}©>«<‘¥ÂWÔT÷0kFem)Ë>kj"ãå À× *+-Ý-}–w5ˆñrÉ7;¥²Ò¶jð Øñ¥+1Ñ5TFàL×ËÏ>›> iË3½Ö-ä#xm!„«ðM_”ö-ÏiíÙ‘v¶=ú©kûŠek3ñÒ›' «[ŽnªZýן¿^"¨¡Ì¼97UÞö¾®Ëô÷¯ë«(©ûF'¿Å|jŽ´˜é¡6é<ý=%ú¬“u4ߥ3u=Z·J7 ùÎDÁüx7.ñ=E§mB\mã?C¿äÅçËyŸÁ‹2¸»}þ°gG §üÜe÷X*L~Ÿ²¼äÙúj[ncˆÙ¯ì6Ö9–Å%¾§ oFï“0Щoƒý¨ —ÔÈ¥.ñæ#_MSÝsM•uʱ..«1Œ—;0_®¨¬´Y‹aºáŠÃx¹ð•†ÊLÛÖ ×Ô}ÌË °í¨¬¸¥=î-5†PŒ©Q>AoÔ¼´Ù¡/[ý¨?Û,ìjæÒlÆ[ _QS]ÓœRYgÛҪ͂Ss/w`>—Piîå0ÕfÁ«9Œ—;0ŸÏ¨¬´./Øl ×™Uß¹CAeöùÙh"8† ÁQvÓ›„& sêÛPG?êƒ%5v©K<Š…ÈWÒT÷“CeiôŠÁ‚zd³Åx¹ðeÊJK—Èwƒ•¶¨IŒ—;0_ ¨¬´bñ‚öºó–Hÿüû¿¿ß¡«º…y¹ `ÖˆÊ ]ÒÖZKrÄÿýcp¿Iò1zµš¥ë}¹ììGý຦f/Õuç±Pù~šêk«¨¬C®mÕuqWó/w`|³S*#m¤Ëå¢ë¢Wã/w`>¿£²Òº}Ùu¯7:G*öÿ9/{$Éqû{Š>Bü'¯°öó6Ö·éïñDªT@¥Ú™ˆDCUŸ0LT2ðE,a48TVlºeÞùn ‘±Tcˆ”OÐ … Üsê·»f?êÏn‹Q`šÛxëAÂÕPïaÆ„Ê:Ú»-©±Œ—;0_ʨ¬´t³|궬f2^îÀ|¹ ²Ò¦bw[Q—2/w€ÐRQY±éŠyç6‘$“O†$)»éEê.]6õ媳õËššÃT—5žÍbåki¨÷›Gei ŠË¢vng†_Þ€—;0H¾Ñ)••–.–«ËªJëÔPÆË€ÏETFÚ´Gíªæõ« Øó•+1Ñ'TV`º[ÚSd*þ7)R>F¯æ‹pЩß›ý¨?;.5ƒiŽã­ _MC½Ç*ëÃþØqIÍe¼ÜøÒŽÊJK7ͧŽËjãå À—*+mrÇu%ór @,•˜8Mù1»fÌò z¡¥Ï¦¾|uö£¾ñYUÓ—ê³ÊY*|E õfͨ¬£-å±ÏššÈx¹ðµ‚ÊJKwˇ>Ë»Äx¹ƒäRYi[5øŒN ìøÒ•€è*#p¦ëågŸ Ÿ„´å‘^óò ^[á*|Ó¥}ËãC(>·‘v¶=ú¡kûŠekãèÁDauËÑ U«ÿúó×U[ óf¶9w*Š 9|]éï_×W%úmôxò[̳Ps¤ÅLµAçéï)Ñg¬Góû¯t¦®GóVé&!ßâÏ™ˆŸ@ÿméx7.ñ=ýÞNq´ qµÿêü}$/¦8^Îû<ÇŸôàîöñÃNãxÜe÷±T˜ü>ezɳõÕ¾,·cˆ4¯»uËâßS´×ém(vÛI~¥ú©{;OÛu×ÐYµËïd£MfyÅŽ™4Ìæ4LVíòûÙh†I·Ÿ³i˜tR4N^î’@°Í>©l¨Ími¬\ñ~ç.¶fº çò±NÀQøäÔoÍ~Ôš¯^¿ cõ=³o=XÞT×`G§T¶1»½<5˜óE=¬ÜøF§TFZמúÌ…ªÒ²rà uQFZºú<µ[T//w`¾Øe¥­÷Ž[¹kù£Ùôp.Ÿ 7¢¯>›úí«Ùúóï—Ëá±ËXëAÂWÔT×4G§TÆÙ¦øØe%ª'•;0ßè”ÊH{„¬‡.«I¥eå ÀWÓ¢Œ´tñy겦î`^îÀ|-/ÊH[Ó½ËD6ô1²¡ì¦7¡k‹p×Ô—›Î~ÔŸÝåš±4wñÖƒ„^SœRÙfêw§¸Ëk'À{5~ñràónQFZ§…°¬Ò5„ñrà ~QFZï·}=¯»ŠÕåËË 0†Eqƒ×ìˆ¾í¿‰ò1z·˜„Ný6ØìG}c¸¤F.Õp‰Ç0ùjšêšk*‹2N9ÖdžËj ãå À—뢌´Y‹aºáŠÃx¹ð•¶(+m{n¸¦îc^î€m_”·´{Ã-©1„bLò z£æ¥Í¦¾luö£þl³°«™K³o=HøŠšê5ÍÙ)•q¶-=µYpjãå ÀçÒ¢l´a×r˜j³àÕÆË€ÏçEi]~`³-\gV|çJ @ eQF`Ÿï&‚c¨Ñe7½IhÂ0§~jö£¾1XRc—j°Ä£Xˆ|%MuM1¹Eg½b° Ù¬F1^îÀ|Ù/ÊHK—ÈÕ`E¥-jãå ÀW¢Œ´9l!/hÿ¡;o‰ôÏ¿ÿû{…®êæå(€Y㢌Ð%m­µ$Güßé1÷›ô(£W«YºnêËeg?ê×55{©®k<…Ê÷ÓT×X[]”qȵ=u]ÜÕ<ÆË$ßì”ÊFérùÐuÑ«qŒ—;0Ÿße¤uûc×½~Üè©Ø/b  Á-ʈM·Ì;ß-!2–j ‘ò z¡„{Nýv×ìGýÙm1ªLso=Hø¢šêfL‹2Ž6äÇnKj,ãå À—ò¢Œ´t³|궬f2^îÀ|¹,ÊH›ŠÝmE]ʼÜ@K]”›®˜wnI2ùdH’²›^¤îÒeS_®:ûQ߸¬©9LuYãÙ,V¾–¦º†Øü¢Œ#­AqYÔÎíÌðËðrÉ7;¥2ÒÒÅruYUiÊx¹ð¹¸(mÚ£vUóúUN ìùÊ•€èÓ¢ŒÀt·´§ÈTüoR¤|Œ^Íá S¿6ûQv\ jÓÇ[¾š¦ºÆÚ¢ŒCûcÇ%5—ñràKû¢Œ´tÓ|긬Æ1^îÀ|Ù-ÊHKÇu%ór @,~QF`ºlšòcv͘åôB%JŸM}ùêìG}㳪¦/Õg•'²TøŠšêfÍ‹2޶”Ç>kj"ãå À×Ê¢Œ´t·|è³¼«AŒ—;0H¾Ù)•‘¶UƒÏè©ÀŽ/]‰ˆ®-ÊœézùÙgÃ'!myäÕ¸…<ƒ×B¸ ßôEô­y|HÚhÏigÛ£º¶¯X¶6>!o„󖣪Vÿõ篫à¶æÍlsî8F~Ûsøº>ÌÓß¿®¯ ô#Úèq*Ç< 5GZÌôPtžþNάGóû¯t¦®GãVé&!ßâÏ™ˆÐ'oŽwóáßCäýG›WÛñŸ¡ÎßGòbŠãå¼ÏsüYîn?ì¡< î²ûX*L~Ÿ2¾äÙúj_–Û1ÄPŸì6Öy,‹K|AßxžÞâj{x’_é!4ævY‰êI`å ÀwtJe¥Íù±ËjRiY¹ðÕ„ÊJKŸ§.kêæå À×2*+mM÷.ÙÐÇ`Ȇ²›Þ„®-Â]S_n:ûQv—wjÆÒÜÅ[¾†º¦8:¥2ÎÔïNq—×N€÷jüâå Àç*+­ÓBXViƒÂx¹ðÊJëé¶¶ž×]Åêòåå*+nðš½â±Ñ·ý7±Q>Fï“0Щß›ý¨o —ÔÈ¥.ñæ#_MC½çš *ë”c}l¸¬Æ0^îÀ|¹¢²Òf-†é†+j ãå ÀW*3m{n¸¦îc^î€mGeÅ-íÞpKj<Ž»-5Ê'èš—6›ú²ÕÙú³Í®f.Íf¼õ á+j¨kš£S*ël[zj³àÔÆË€Ï%TFÚ°k9LµYðjãå Àç3*+­Ël¶…ë̪Àï\‰ˆ¡ ²û|o4C†à(»éMè+¸aNý6ÔìG}c°¤Æ.Õ`‰G±ùJê=ÅäPYg½b° Ù¬F1^îÀ|Ù£²ÒÒ%r5XQi‹šÄx¹ð•€ÊJ›ÃFŸàí?tç-‘þù÷¯ÐUݼÜ0kDe….ik­%9âÿ~H1¸ß¤Gù½ZÍÒuS_.;ûQ߸®©ÙKu]ãy,T¾Ÿ†zµUTÖ!×öÔuqWó/w`|£S*#m¤ËåC×E¯Æ1^îÀ|~Ge¥uûc×½~Üè©Ø/b  Á¡ú?çemÉjCá¼GÑ¡œU ~§àØ™—£—^rßPP íR.^Ò«7è”>tÙ v±ë+ó›ïnM¤‹i³‰”¿¨ "îz¹«Ç£~v›sj ¦¹‡6~PjÓyT»¥¥ðÚm^mËøpàóÕ.m}Y¾u[P{2>\€øBDµKëã¾Û¢z(óá0ª]ìúÄüæ6ÑIzë7:I]’é²®§«F<ê/.Ëj¦º,óÞÌ%~,j1[T»%M¤¸Ìiû¶÷ð·ðá ’j—¶>,ï.K*­Q›2>\€øŒCµIë§=Õ¬þT«;H¶üÈ•€h=ª]àú¶Üï"}´§‹”?«K³Q8hèå°úÙqžÔLsm$üh:Õ*+eT»E¦ãµã¼Ú—ñá ÀçT»´õ¥ùÖqAmÇøpà Õ.­7;Ž‹ê‘̇ `b´¨vëcs« &oöòuAÑIŸu=}5âQñYR»/Õg‰wd>ò#êT«˜) Ú-mŒ¯}–ÕŽŒ`¾QíÒÖ·åKŸ…CmÄøpÉwFJµK›Ó†ÏêR ?t% šŒj8Ôçå³ÏNŸÿ„³_µ ½ñúÑø©‰üñ í#Ž>õœmÝÎçpöÔ)ÿ®„ùü‚ûT4>Á™S¥dÿõ먉úËìcLÛFÇçô{~ì¨ó¿g*S/Ñ\îíÇ…>‚«sýQ>él÷¾~k°¶à5[÷Ôü©ý¤ú’«øktÄ­.Tø¶6KSüœ¢Õã-LˆÖþjý­«^ôî\œµ^G²q7Çy±×†úMã.£Û¡ÂäÏtÉz†ß·VDÞœm,²Süœ¢f»7ƒ˜a/wòÕ=Ôöh9O;'Ò¡¡³Ñ"ó ²&Ä&f¼ÚŽé5Ìl4L6Zd~AÖ„ØÄ¬¯Ÿ;fÖ0ëNÑ8ùp‘‚팓j5›?\ñ‡§?4çÆåG3}iÎåÏJvÂ'C/õxÔš¯®[á<úÞY‹‡6ÏŠwªUØ)Õf™ÍßÌØ¨n 6\€øZ¤T»´&¿õ™¡¤Ò²á ÀG Õ.m}ú¼µ›S^>\€ø\FµM›¾;îÖœ›ͦ7çòuEõ#|ÖõòUGý|™@¯]ÆB ?¢NµªÙ"¥Ú­­w¯]ºØpàk‘RíÒ†ðÚeÉ«´l¸ð%j—¶>|Þº,«g0.À|9 Ú¥Mþ›Ë ǵµm¶¦µ¶Ò]3húŠGÖd;ÕOWöRg¤T3òæ&{PõJ pé~’Á'Ó?—¶4ôˆG=ã_Ö3ûþ×·&|{=í¯ß>­®FN”É´Ç£Þ$·Gèg‚ WÏ[<\L”É´Ç£Þ%7Q!·*9…r1Qn$7Òz—Ü&e·èæKî­ùXd{Gff©S-»µH©¾˜ÏæÁ'…,g׫|=õn9UÊéÔÌÃFåFr#íñ¨wÉ=)[X½âl´äb¢ÜHn¤Ñjz—<8…<¨äéáø–åFr#M¤é]ò¨ÕQ3‘yi>YRïSf¾¦¦ÝÎH©¾˜/Ç ó‰à“B–3ÁÙÕãQï–3e¥œIn„ëõIGÒ×#'ÊYGN‡¦!YÛC¡ïK¢¹/Yµåα­®iªŸ®(ð½(ÕŒ<÷ÂÇŸ{áÚ›ŽŸ]3°aÈÀÖ‘%ùÚêz¾®F<êç×–­‰_¾¶xh#áïÓSÍ®úŒ”j³Ç¶‡Q^[zb¶>\€øZ¤T»´†”÷‹~ “UiÙpà#‹j—ÖÚÏq¿è ·#— €@G¨vqÉjÏ­Ù¢|j¾£¼þSÐãc¯ãÿx´Øý«?«ks^hèe°ú‹á||m8ÚHøSõT«®-RªÝ*»ôÚp!©{‚ `¾)Õ.m8^.f•– `¾˜QmÓæ÷†Ëêẏ @`>PíâÆüÝpÑÿîÿ¬^/>zM³›5J›e+mÖõ´ÕˆGýl3:Ü[›ñÐF¨SÍjž‘RíÖ6û·6#ãµðá Àg<ªMZ:â[›ÕO«´l¸ðÙ€j—¶5Ñ´Ùl§I=‡ùp @¤ˆj¸Æ5šè)¹w=c7˜ˆ®+¡, 3ô2TGýÅ`^m»TƒyÞŠ‘ãGÒ©V½Aµ[Sgƒ‘ºeƒÚŠñá À,ª]ZïƒE•6ª.À|‘PíÒú‹VÐþçæŸÑÕþûïÝ¡“z óá(€™ª]èè?9g/Kü¿?tŽÌßéåÏêÒR®ëzºlÄ£þ⺬ö^ªë2ïÇ(ñóéT«¬9¡Ú-rÊo]çµãÃ$ß)Õ&­«Ë—®sVmÇøp೪]Zs¼vÝu¹Õ}¤b?ˆ% €’Aµ‹]_™ß|wk"]L›M¤üE]‘pÏÐË]=õ³ÛœS[0Ím<´‘ðƒêT«˜Î£Ú--…×nój[Ƈ 0Ÿ¨viëËò­Û‚Ú“ñá À"ª]Z÷ÝÕC™€ИPíb×'æ7·‰NÒ×ÿ¾“”Ñu!é.ëzºjÄ£þⲬöaªË2ïÍ\âÇÒ©V³Eµ[ÒDŠËœ¶o{[.À ùÎH©viëÃòÒµ)ãÀÏ8T›´þpÚSÍêOµºƒT`Ë\‰ˆÖ£Ú®oËý.ÒGûwºHù³º´š“;hèå°úÙqžÔLsm$üh:Õ*+eT»E¦ãµã¼Ú—ñá ÀçT»´õ¥ùÖqAmÇøpà Õ.­7;Ž‹ê‘̇ `b´¨vëcs« &oöòuAÑIŸu=}5âQñYR»/Õg‰wd>ò#êT«˜) Ú-mŒ¯}–ÕŽŒ`¾QíÒÖ·åKŸ…CmÄøpÉwFJµK›Ó†ÏêR ?t% šŒj8ÔçåŸou»:kêŽOÒc+pùKD×…Ôÿ-ýsišºÇ£žñmAÑМ©ÙB’Ùºž_ñ¨e¶p*Zdë ÷SYÎÌJyãP4P9Ðá~ãhÙä̬d7ÎúúU9Ðá~ã¨ÙÄ̬d7ûú¨èp¿qÈ=Ý8×̬¤“7yyÃÜ´»ß8Z693+éä³¾>âQ»û£f3³’NÞ8ìë=µSnz¼qn’79¸aP“rã(Ùä̬$Ég}ýªhRn-›˜™•$yã°¯Ê&寱7Ž…ÇÂCpà¶Ê£d“3³’n‚µUn-›˜™•´pãÜ0¨­rã˜ÇÇÀcàÆ±pà6Ê£d“3³’n 7 j£Ü8Z613+iàÆ±pàÙ¼õÙäLùå’üõÐóë#µÌíS61Sß²õÍÆ=ôúzG-²ÕGãÓ.35[t2[×kWôxÔ"%÷MΔ_Dò×CϯxÔ"[{oéÙäLÍ–äŽz~}Ä£–ÙbzÊ&fê.!¹£‡^_IÓ"›uO~“3å—Éò×CϯxÔ2[~ò›œ)õ×rG½¾žMË]Bñi—ˆ™š-Ë=ôÚ5-²™ãÉor¦9 ¾=¢ÿÏzµõæÑwÿ ¾°·¶Â›(ªEú°Mv±ÙnZ?°…a;¨›Oñn¼—`‹þ÷Îð&IÉb8Žq8Ãá™gtTbz–^ê6j§Æé}xŽ®Ç¦§KojÓzzŸž£¦…3ï²;Méb&G Ìdi2|ˆXÓ\aEîˆïw^+ejI“„‹t|¥“£À®`ö&·€4PÆÈ÷hŒß7Pâ\@Â}ÒŠKK€+j !+¬AŠˆY" 'b^® ÂöPd¿‚ez2EžXa- ´ÿl×hŽÛGWŠ"%¬N¹ßÙ‘ÂG§!LTª(ºܰӾ>?zq~Ž­sþþȺ.² <†¡×î’Ki ;ŸŽŽíÉùŽ^Ÿ‡V2¾Ù0¢.â™eB†á:¯zn(QB'Ûf7,pÞ V}èô-Û“BKxuè¸êBGp çhÙž™õ§NæÙú3‚›šžÑž‘ß!üÈΓ Ðz€ö‚)ç½ÛóÃðã?Þ¼ca¿|ºÿéîö”ývwóËçû?înÙ«Øt ëŸI`I©˜AtÒÀ]ÕðJä1îíO?NwSØ'ðÂÊP‡‘Æ!e(Vtb\9}€Í/a$ó~p^8w”[éaEZcGu[ÓâÜ’÷{$­Àî¹ÆÚ[?Êpe€.L1%v¬ÇS#ö%¾ÿq&I˜Ç=8Ž0°‡¬ówãÌ—Þ=ØE'z´ÇÝðö“’•Ya7‹)a¨ c‘TËÏY)É.. üSÀ{€g`°È&>ƒ÷W±oajàâK5‡à6õÒ=I£¼I\¥NÕN‚WÚj( zC6¸X¯R¬¡gþ¿'‰n­á6rra¾Ù•ÎêçÊJýYá—Óf¥zûlYi˜Ï•†·úf¥ÇñÙ²êAÐe¢ë¾[ßJéH#SׇÃÃÍ?!€x¢ÜqoÏÓÞß®÷·nï%{•{/Ž¿;QÃ1ìµ'Wçß®ì50ÿP½kœîPS×åx¦^?3ísuõûÞ¾­Û´MÛ\ÞjØÜ?‘§5Ìk?A^_ßü›}zøÝ<|üåúþã# ¡¾Rìç_¯oÿØß^²Ëã7gâòä…f×oqá©'‚§O»8>?B?°ë››»ÇGˆ÷îôþôÃå ƒõë;;cï>±w/ÿûæÕ7ÿ;e÷/9ܘSöá%Üœ7hfôYTÒAã'fŸ*Ù±N:Ü_]¨¯./?`z{yòçwWݧ‹°ðâí‚D®6 (!÷a4ÍôùâõUÒ‡|Ã>¼p p r¦{ÜìäyrÂAëeæ 3v” <9OŠ’ç,¸#®*8hÛ³3èÉÑ3Hyf£ž:;>D 3Úãà_âä¿MþÃ'a'»’ƒîƒ)qúR ÙÝΆ¦ŠIÅÔû—x's Cw¨˜‹&sxµ™ÃT1©˜zÿïe2²f.›Ì•Y`N SŤbêýK¼—9|õÔ·E5›Ïê­Í—yâ—”Cs»¡'E+Í×óÍGœ ZNçòyÿï-§–rêæE0bá"ÃT1©˜zÿïeB§¾Â}“ù ˜ÃT1©˜²…÷2‡ï®š¹i2· 㛦ŠIÅÔªÞË|hê¡Õ|J‰Í—{B"¨ææC”ÚÍyR´Ò|ã°£ùˆ³cAËi‹ÙåýK¼·œvl”ÓŸc*”Ûv>Ô0U\J®Á¿Ä„»ãÂaÄ0U›«àblaz˜Z“Ô0U›«àŠ·09Ì]9aÆN ÞÇÏ ã¤ŽNUÇ•Cùñ«” 8€ìÝè0-Ý‚Ð.ä  ï„Z+ÙÍѼ¢á$'ë`żî=\bÅæˆ=x°ùDøL•£ Ñw£ñ+D®°ðdÍèHK‰, 98ÿٮѷí +RºŠ¯ ^®3Áûý¢à#_oûÜÉk݈‚Ö在ÛÍž Z6kÝèµnć„G¢ kÌwu|Òº~‹ÖmdC SŤbüK¼yÒº„ùŠÖm1'†©bR1 þ%ÞÉÔ0U\J®Á¿Ä„{P‘Èaª6WÁÅØÂô0µ0&©aª6WÁoarÕºÐ…Ö +ËZþR­ ¹ÖA™k]€…Ö…¿…Ö…­Dë:.³…åBë Ѻ@:׺.‡\ëÂB®u­ëSzZëZžiݯ—µ®1´np Z7  uCÔ-AÉsIë‚Ãv­œ“Ö 8i]xTÛ8ùïÕºÆnÓºu6Ô0UL*¦AQx'óYëæÌ×´nƒ91L“ŠiP”ÞË/ñ66qNZw.§-fWГÞ[Τuór®kÝ:j˜*.%×(O L¸Ù8Œ¦js\Œ-LS c’¦js\ñ&‡Q­;ˆR놕e­ Eµ.,üŸñªëM[ ¢ïHùóhtø ŠrJ£*UÒ6 R‘BT-ö{»Þuvסôêþ÷ÎÚ&šKò„?سg朙ïκI´7ëÒíÁ¬KZ̺ÄfoÖ¥ûÝY7ñg]z²7ëéÝY·ŠawÖ¥»³.ÝîͺuH¯Ïºƒáά;¾?ðéà§?CDqLóR½œ ¡Òé×8‡íÁ}dU0ŠªU²Ìç¨A-à¡d™.Yº‚)0­Ùþ>‡™wuÏÚo@õΛ´ƒ ð°4EcbÚá³6<2Q"t»°P¦çÿ^|úønü_ø¹ßë]µ£Äs/Û÷“Ïý‘·~?éùQlw«7½¿ãÛÜ]\¡uzÅ6Øéõ8€wïéÁMë²:BHhòïº ª‡o [§ã[R{­ÖN _Q0Ëq¬„Ò/-0¹½ÔF5ÜÓ 2æÈ„;ËÌXxIާ5Î…Q<ÜYÃÄ’B°«¸itár v…90SËß;†IEίqXÞyßÚÁÐÃY†A*Š$µ%ínà‰ ”¼ îööTš2©¤%sN£½!-µFiç…Àœ®ª¹¿ÜÝÃì„ö?%…»ŠYxÄÔ*mz&y™j÷üÑhÐXr…›†«`<E©çÒ‘…¼–ÓöÆÕAL´T¹\uÀ(º¤=×Ä’ÉfkþË­·d-¾poÖLÚÞ[ÈÐàžø~Xiqi!§âÊÙ„\#ƒÒ XEŒZ {D—ƒ'6¤Ñ—äû‡ë)d Í\º`f'9¤J¦¨%fÀæ.¨”ê—`¹1h:o”¾ZÂÑhXg‰É ¸uÐN\SÉšíèh|~Á@Ð+Ê—* ¥m)¹ÝTe½MS¥£ÓÍ6í$öŽ'©Ÿ¸S%òë®DZA)KC1-]2KÑùvŽ)+M•—Ï” çfªäÒ°¹ÀcáÖ[„#úô{2åÎ2.Q·û}¯ë§ÞçÄž#a;£ÊàéQ'qM‚e(hS™½!"7ã„[ÙÝjËô- þP"év¼äj޼OÊòkK¾ŸyõS§ÖåÌ»¦Ë…#E^ZjÜ`åï³ÚC`¨¨ÈÜ™’µg,àOnœý)u_“ Z-¸À£lÉè4nèdÅ÷«fR(KuË颪—Lð%™ñu¤> ¾l¯JÓ¬XPÕª*ƒ:œÚÆëˆþs‰ƒî|c¨$dÆ4%Ó a8ܶ¶ŸÛØœÿ%ºfÉ\«Ðœblu êÞ óº_ýs8d3;q|ûTçÕMë·l#ˆ endstream endobj 114 0 obj<> endobj 115 0 obj<>stream H‰ì—ypUÆO÷éïBÈú=èg"K‚ Æ`@GdtÔHÈf@6¢ ‹!‚ ˆŠ\""bÜAö]! ‹5@Xß#oÎë¤^1S53LÕTÍÔtW÷œÛ·O÷ûÝs»Ï#ˆšR1%öüpï½5‡·HÏ¢ÆKÜ%2¨2r4Q`‰ô MÎLÊ9—-¾œo™žü„JÃIü‚ßq—à†W± PMÔMêfÕRÝ*l»«hõ¸JT#þް“ù+wçZžÅsx>¿Î¥ü—ñ'ü¯æµ¼Žà-¼ƒ÷ð~>ÄU|œ«ùŒìµB¸îǃxâ $!iÈÄ“x ñ,–à]¼ñ1>Å—2r ¾ÅzlÂ6Þ#í8ˆ Å œÆo8‡‹¸Š:¥+¥US!Ü‚ª­ÊPPw«a*Yüï$¬9©Måî̑܃Ÿç|~‘ xr¿Â%¼€òb~‡—ò2^Î+¸œ?㕼†¿åõ¼‰·ñ.þ‘rå|Zö߸†ÏñE¾ÌWÙcÿ®»Ñ ñèƒ?¢?îÅ}xƒñg<†aHÆHŒF6Æ`<žÆ<‡0Ó03ñfãeÌE1æáU¼†7ð&ám¼‡ð‘ÌÙçÂa5Öb~ÀìÀ.ìÁ~RcpÕ8ƒÔâ2<Š”¡© u£ VÍU+ÕZ…Ô¯dÕAYê6¦:©ÛUÕME©;Ôê.ÕKÅ«>ê •¤R„R¡=«æõ9~§ò4™ß—d†ç^7Çïñûüø/çúWþÏò¾ÄWØmó‰A,âÐ}Ñ÷ü“,˜Œ<<|¼ˆÌÀ,¢sð J0 ð:þ[yÒÌŸ)íø8UGåR¡*\E¨Îª«Š” ê)9«âTïÿýLBÕÿ3é?˜I5¶3IÓt©ZS•ÓjZO;è §ßè²ô¶ rQERO©4úÒÄSˆå­º¾Uíùé’{—DóùŠh»E ÕÒÑKMWψöQ¢wÛUA+‰Û‘©+õ ¾hG¸lG¸jGðØ&Úž¶#v<Ã瘊/ñ¾Æ7˜†®øÿÀw˜Ž•…+bJ…bŠ˜4dC9('åÂ*”›l)å¥|dGù©¤BX• S¬†Õ©(Ù“9R1*N%¨$•¢Ò´€œÈݰ•ÁšT–ÊQyª@É…*‘+Í%Om§óÓBZD‹i yÑRZFËi­”}­&oò!_ò#  5ôäÿ÷~”ò‘û{ïýè)=£ç”J/è%½¢×ús]WAo(ÞÒôŽÒÉn "aÓC¥ß»Äz|bÝ¿;EU*«WTþÝ-*×ó‹ªÊÿ£rû'Ϩ|Ú5ªÚùÆf*‡ÑÜha´4¾2Z_­6F[£ÑÞè`t4:.â ºÝFO£—\éýçܨ\*·²Íœ›Lÿiüh æ@ÞÀyoæ-¼•·qoªîä`ÞÅ»Å}„ð^å}ÂÙ0/r€ò!>ÌÉGø(Gq4Çð1Žåã|‚Oò)Žãx>Ígø,ŸãóœÀø"_J_æ+la+_åDNâk|oðM¾Å·ù'ó]¾Ç÷ù?äGü˜Ÿp ?ågüœSùÞÄ[ü’_ñk~ÃiüvÁnš‡µ`/„ÂQ¼ { ¢`:DÂÕNµWTÕQuUÝTwÕCuV]à&SOwí dµÛK±!,ÆÆ8½„¥Ëp,ìljøóÉÓx”ê©z©ÞB…¾<“=x,Ïâ1<›ÇóžËž<çóÇËy!/âÅâH¼Þ{_öß îm5{ó$^Ãky8•õÆhÃÃ+Î&‘’è]§t“nÑmºCɢ΢ÆÎº‹î*‰©´rR΢Éþz€(:m¯;莢Ò~ú[ý(·µn£ÛŠÖ¢t´Ž½Òq:^´;Jâ!*v×ÃõÉ]•‹ª$jž 'êI¢dOÑóÑó|Ñ÷Ie•EÕ^’ͪªjªº$´ª¦ª%*MÕ/ôKQìCýH?Ú‰R dŒ):-i ­5~’4v_ê¡è²±(³©(ýš¾®oˆz]DÃD$7Ñt9ÑsQq=£¾Ñ@’`õ\¥ ¿ È4βIX:¹¨X69ræÊm›'o>»ü *\¤¨½ƒc±â%J–*íä\¦l¹ò*ºTr­\¥jµên5jÖª]ç³Ïë~Q¯~ƒ/6jܤi³æ-Z~ÕêëÖmÚ¶kß¡c§Î]ºvëÞ£g¯Þ}ú~ÓïÛïàûþþ0èÇÁC†þôó0÷á#FŽí1fì¸ñ¿L˜8iò”©Ó¦Ï˜9köœ¹žóæ/X¸hñ¯¥Ë–¯X¹jµ·¯ŸÀšµë~]¸aã¦Í[¶nSAÛwì Þµ{OÈÞÐ}ûÃÂ;pðÐáˆÈ#G£¢cŽÅ?qòT\üé3pöÜù„ /ý~ùŠÅz51);)d'…줲“BvRÈN ÙI!;)d'…ì¤5)èpprÔ›À˃=€™,u7ã˜>ؼ›q=ãH÷…gû?ÀfØŽƒ…L‡á¦@Æ*&ï?ŠB3ð–,‡9`@/ùÆ:É®åûåè`†@5¡Œ’Š“¶Ý…6áPíÍ{BžYê¼ôšyÀCáÕBlcz@Hâð™ø¨a0§š=ÌEæR3Pô¦bÍw…ý!Î|¬7­PEz¬%áÒœ{¡‘Œ2UZú ù|DGh2Óä œ„qÀÐâ0‚\åî!íq¢j*wYo›QÒª8ôšújcKrÒ}̶f‘1ÆÉ]½a·¨?Tæä \A[bš)à•¡•üžˆÇ•þnZzà { ³äuåŠ;ŠŸE’»¶Õ5dMüÅL€Bà]åi7IÏ;øŠ&Ë>EÅp ³ ä•yñʘmˆ": 1Úc7á€;¨‘CFt“}€ðÞVËÝ…I¡Â›Óâ×·ñ[£Dú53¯¼‘òà+$R8k/\…Óñ"ÞüãUÜÄqÅßîžtB¶å“¿m¥ñ‰Ã6A6_lŒ1²c‚°ÝJ.ÛÅ&…~$Úð1‡iÒLqK&ÚéІ¡'bR‘À”¡3$@IÓ:ÃWa’vp @iÁRw²œ?:½•nß¾·{ûöíÛ÷{Ë|%pâ²ø>âϹ «^¬a½ Ïaµ,̾Ìúp2·ãœîzžfó…¼? LéëÅ1©¥Uú†ôx÷NûÇÉHò7É?$ÿ•š™ÚFaøÃh¿¹Í üä0õ,õ2³![p¡˜ÝΞFy–íBö`æ ƒ˜å4»Ìþ´½ÉîU hê1Eã_çOë^á§PNóküߢPLÄyš-ê5¾­¶‹Q‹KR ba vž ìØ ¼xÝv¼©ÈßvãÝ»?ž2|>IÉÉä¡ä`êåcK`…Rª‡ö](k±ßð¸_ÐûÈoаSX[ ˬdkÙz¶–|¹Ñ>K÷ƒÈVÞc²ëÐ9 xnê<•Ïæü”¼—¯^¿ÄùŸø„ LÈùbŠxPtŠ^ñM±Q C¼ Ô½,n‰»()É)•J¥rÉ'=ˆ›é·Ý>’>²-Gä¹jwÚ³o³'ìÿçÈ òR9,wÊ/ÈoÊtÄÌèŒýË{ÓRv™@P¦ïòj©˜Ÿä'áÏ+©G´px*ßÏvðgØ ŸdÛ`ŸÇç±%tC*‡­‡âŸ'ZX3k¥µ|Fúkö<ÉÌzë¥_Ótk;‰/o°g²gùu{&bÄçbÎߊé’O¼CçÄ&K?¡¿HNäoCü5±^pLj@>í¯ÐA±ž=C‡yÈyÇÑ?^Â~Ž¸ÐÆf²Û"E‚/Õˆ¿"{~”ÿHò$rç°i5òëj¶ Yñ«8ØGôËg¿çk$ç²AâÒϰº¹Èû„-žgâeûu~Ùð)ÉIçÅhŠ-Ò Û2Ö‡ð röõ©-´Ñ‘ΰՀí/R™tÑm“˜)yQ?‡¨²1íMœî·ŠpŠà9‹áíˆ/£üqB‚­Áÿ¢ØI´·ñ­¶¹¢n;ï$—QGêUÚ“ZM§^¢*ăí©Møâ~ºJ/Ð~¶5ù4²÷ûqrγŶ?e ¥ª¸ÎÏòV>0~aí2dÆGÁí‰lo“.}H­´ ÕŸúÞ=vn#Ï} ÷†«´H§êäO…Ä:¬÷…S¯¥J™“úR_¥G€ÙûduÉ> ½m¡AÃüúyuskkfϪž9cú´©U•¾)L®(/›¤Môª¥÷á>OIqQaA~^nŽ[Éveef8'8d»MœQeP ÅT£‘àš¶NQQÁ|´¶íŠÖMƒù½^sƒw&ü´ cs8’n«´ÊsˆüÓ|QƒÇLÉñQI~»)Ù<*ÓàɃÄò GùØ/[)È öÕ¬àˆ{ÓòæV­9ÜQƒzlĶÍmãZiyí˜l„2ráá#÷K §\>ÖÙlD2 © ?»åÔ= Ù¯´8L JlQúuz½ÿç Dê†9ʪ>6¢¦Qçßž7®=N½L]@aÀ`s[‡®;ÇÉàjé ©àñÔñªƒÚq2ËðK¤Ž×šÿ¨ÇðÃd³ü/ÍiŽëè¡£xLשׁ !ÐézHSCzLïJ¤6¯ÒTEÓðü„¾.uœDê­#Ô…­úX§Æ¸Æv„ã~¶£µ#rD!Rw´EqƱÆh|d‘#*‘ßâr“k2͆j6¨™a‘‡¸Ãêï9â'ÚlI%‹aµ»Œ,žc”Ǩ;ÁÓ”:yp8à°ß4~Éòmd»´Ý~ÕÆYÉCf9ç¸g{¿W0ϹȽÈû\A“Ð$-v®p7yQ°Žü†o•ÖÛÛøƒÂ~õªçr¿.}j÷= ·ÅjK*§Y1²ªVbí(ÒZì† ÎµÚýÊΜy€o$šÃé‡aâD3J júÁp448UGU¤"/Ï&—?rªy‘Š*M • |}ÓHgkÏšg—½¶nï…® ºº^Ù0;AF0‹Ÿ9Ýx.;þI6›ý°û`?~;{à‹ûx^~ïÅm”+ÿ¿ìDtÆ0†¢U6±›H;9daO³ØŠxŽ0VË‹fô"]ÂÔO“ã7M—„Î]C3õ›€ÚL@!ˆ—Â5‰‰Oæ Å^ÉMdb‡œÁÎ+ à8~å¤Ñ†¼„sø¯!ÖPsŠÑü D8X¢ñ¼FÈW½3Gæøgùöåïn(z÷Ãtmqà²kÓñ•‡\²jªâq:ùz…RIÓÌÎ=êªÐÓ]œN)šOoÐuzU÷ÛàŠ.ÓÈõ$4d"æçŠT@¸AùµmS¨….ûm¢îvûÔ*$;Ëê~ņ‘àý¬ÌŽ©2êiT%”G@¢±!PF©Ãô^»ÙþØ·®pGá~ç;Îåëò§«Óc›ìc¬Ó¸iÒøêP¢ÛátÛì.›Óe³+ ÃI1lP°Ûì†? ªßÎâ*p5#@ÃÓÕUê&µ]eU‰Ç‰#ê!ž ‘x:Ž‹8ŠìxªºÇÖ÷mb)ú¦XË%A+JЈ¹Ð„ØÂh›¥,ÌŠÈ4>Óóp3T[ß hÅ 5/zAn—•@¨þ=÷¡[z»w-Øõd×òñXÝÖ½—°eÍîÌ߯ðfuÇΡc‡{êjòÈ¿Ng[e|teoÏMZµÕrnð¼B4ÿñjn⺢ïíOiW¶V²l­W–?2ø¶‘1a3PBŒ=ÌØA8bS Áh>ágH§˜2I(¤HêPÀÌ íO3!mó#i @G mÒ#zïJ2Nf2Ó­öißjßçž{Î¹Õ ÖËtÐLÚ@Yšž«h6j³T¥óYJªÍ¬P’-¢ˆéNTÜ"FЭsž[wpî„Ýêû O|;ÉHT<ÁHmN£ã šk\Ú8µÞ9Umfçæç9程Œ‹3Ö×eüÅø,TÜâœxNÓ:áa˯w°#G ¨~ìp–56æ™N/6` ôLÉ9ƒŸ©9ÉÑìvQ$Ôz"d)¬âæëèHÄ®3FN¡aMãnp/t¯psnûÜ2ç>Î 9Š›4ÈÄè@Œ§3¬11Ld»: 5’nÍ h‚`9Q YDË‘êhê ²wŽx &6×>8íqæÁSM½wþ^ÇßcW~³þ«žKwË«9¹í•ÝK—ìç¦ØçU=ðÏOg?ûöý ѧé$ºŒî;Ó}¶ÿRdÝñ[„ ˜|'ó{‰´hös6ÊÁ‡1r&à2ÌÂ"†r&«­eÜ’j]¢YÆë0¶›þAª!ö ;. é 0iöбk­¬º,ÞF7†•ªwX Ç¥ÀŠŒ@XÁ(s:Ëg±G;cÑIeŽìêoÖsßõt>sÆîÿ¤‡Þ ç_"XÓn E ‰c°×JÒ•aÈ‘àØiÆ9ýŠÀç*N›b²"ذ 8¦W!DR'GÒ8aCïtxXìDRf“O±ðe‡¸¬ø¸K£K‡¯ë~µðýRW4¨H^×'"$'"Ä'rE¯LIOŒ÷ Ñ¯eáMÿéÒéÌ¥¯ôþú’ƒÁX´01ä‰T^*Ó£k¸ 0š¬Õ Û-k,[,/[nZxXoÐ\no®5?a>j¾l6XÌvÇVRC¥ ðvÎr bà+9*pf(Ÿ/*9óHK_Èá•£Ü.Ç®­°HÁ·®€+uþïÞŠú1Š%⑈I[kJép gªî®ËõõõÕL/ —±l]__ÿÞ¾¾ÖÁª´YâìÛè.®‚â&2AËáÊL$›¥Ù,cÈæ8!Dã·ÌŸ†9ͯ‰¦§×£"\¯‘ªh¤5Š3¨Ô'AÀÜö—¢‹ôsý#Ù?àÉÎì¾»2Œ’r™ŽER¯YW2›8ð’Ü7s’©‡nŽ©?Ìkà¨j;ã"„*ËV ÄkTyÊ/6àèâµ(QeU”¤z£px¼‰]À¢ê ZŠnT)KûﱘU±YGèZy$ÖˆÚóèäu¨ $Ýÿ¤œ hËE˜ÆqãµÆ@»©Ã$üÔ»˜o1ADù5!G6±žœ|Eö™L)N%??/dø†2™Š"£'(XQp¨´á˜¤‚T0?#¾]Ð@HE¶¦f­ø«Ÿ³¢>¹ð)«·À§¨T…ýP±ŸÄ©'ÑÀg¡ñ]/¾6ѰqS3ã{I$4jFܲàž¬ÿ¨ŠÞŠß |à.žH•©p¡ƪ-^´‡ —üƒª2; þ’ò2¤Þ`‚[RŽ™†í˜`÷…öƦµ›¦¯<ÓÛBG¯ùФñ«wÄ>¡ fÇÖWL}¾3ÖÿQw≙¯Ï9µ²éÐcÅì#’ÜX5qaÞëÈæñ6_È•ò3ÔÌ ¶ÚÔé®Ú´¹|³o©s£sûkû¶Œnú Ó-ýÙžBR‰WL½”`ŸÎ ëT=47,:åÒS+›®p&1èxˆUàTo¦;¨©Ñг1¦)³gè)©Bß (é› ˆ´Â††hu \ klœsÈðÎm")1®T'Ò×{vtì­«ÑØ_·¤cÏ~J F~v˾/f,¸¶îåË Süõ3ôÉ÷¯Òi‡þvaèÎ_íŽ}½ùdìú†S˜Ç;€:êÑØ»«Z¡šIÇãè”DÅAŒ0eÍÔt礃ÊdFD™<úzº«ñfúÄÿzß&¡÷Ÿ$ô”B/ю܇\qÑØ§´26Ý`Œ¼‘3rBšÇëa‹òÀÌ .9UN‘Y!uû©Ó_c†ŸÊfÉO`C¡|8VÑ"Ô-»e°× à3Û_R(xoÿúßõO×-jŸ¼dsßÚØ!Þ¼§ø'U/ΟÜ{—ÿéÕÅu…ï½3wgvg³/ï쮽žÅÞ±ñ±Álì–QPcá¤Åؘ &ˆ&Mê›6}Ч¡5U ´ Ò†‡è#@¼ŒcLZ¢å‘¦  HZhƒ* MU#”R‚À÷Ü;»È ?R©¶÷Þ33ë™9ç|ç;ß ÍyÊ:{b‡eí\\½gzÕ¬yýãŠx½˜áïGm0ÚeIB‚Èér&$K Ej Fú¢ð˜îÒ=ÄóˆÎÿ£\Ýuí6€rAkâ›mºu5ýÉ:­ª¯ÃÉÜg»X:²EH\VÑ¡=ÖÌÝ–g«¢N¨¢ÃPE)4cñP¡t7¸|ÂD1å™ämÚÅ<ßôözd…P9ã™îK…G%Snò|ÎëÚD^6Jå>a‡äŸ×[IIˆR"à YIe0e÷¾'°‰ ‘e§K özU–§Ž@O€†HòàªT—q•ér;]ºé^©`eœôb®A¬˜NÑ·LÅê iyS§´‡)¾ƒþ:¨(Œ·²õàl8U‡ÁŽÝ?¸šEÚLƒ:îDöp/’î}ñDïmPEû”/4îK<¾ õWÈ=v0x‘±‹0˜µáÆ}n¸V×#ÏØý^; ¤ÂÏ$3ÞIÉŒgÌÚŒ·º–›‡&ÃÙÉ;ämÝ]YÔ•eóÀD¦×⤿ÄK°.Åí•Ñix¦G¬–½V+º÷ѺÏ7ÿT¹;[|çÞ4ñÊ=VŒo€6*†Jqâ÷FŠ®`¸FÖÜdžÀte’Y2>•ä$ÉDÙ)â”dQÐaVË3'epå”JíJdÆ8œ³º‚u¥YéP–)= UdЈ=ÌûN°«‰9¥û ®rÕ£åt–5N 5.˜.à d2lëy†ìò;Œ„±+oºý5² ¸­ª’5FÈA¿lÎ΀ûÇfgd³Ú6«3Ò„h† á(˜Õ¶ÉΖpÓTJ2’7Ÿ ;¾5³È6‹À 3óÎþp.i<®t …S1Ðäî“:9bAÂ^WB²zîõ0»”ËŸéyäEqtÆlŽùpH …â‘x\U1¤D”¸¸32àý­WˆD´8Ñ‹LÿÜà܈k¥­Îùê<ÿ¢à‚È"­%6?þÃÈëD&!PœaC—°ÄúK‚”ï`Üä|,±¢Æ-NKK’SO¬§ù –CÇ8êˆæ•¿-ý³yæn²õ?›¤@ùƒüª(Y-2¡ÊuG­Š¦V# ù–àÕxú;xö®~kàèYk¨ï.zïŽëÃu¿·Þ#gp'Þ|ÜúÅå¬m‡Ná¿¶>¶Îâ?ˆ•Y×lå/Žº=HCÌIKýÏ…H£ÚjWÛC¢âNàˆÆ,’†ÌgMYÍqoNÁÉ1=†á/¦y>µå°êÎaõA=߯rógWÖž@¡WäÔ,³LŽqŸ€!ˆ$“~°ï+x2q}ÓWַݰN[«ñŠ·¶dçT­²~@‡¼¥G¬ÑÑÝ^³rá+aCNëØZzFåøsÃ"c«A¢Zm˜(…b1S”¡âP‰£‚Nޤ:ZyؘCçDŒ,WÒj—é—ÂÏ+Œµ…kKÚe#ªh8 ìv žP7gÄ3¢Ò*èÃT$BA¹ •ZEޤŒQÂ-M$|‘K’3f5–‰`¹Á¼ö 2³\óÈe†™bY >FbzEO©HÀNŠÆG¯øIô6å&Ž^>¾æty$ƒüSÕÓêélnžEÝŒ“»ºS 2Ç8-Í0g§çÀígH¯5ÊÄ÷vg¶lþÙoNZoí݇gf€ÿêèõ¾Î]€ó?ZÅñËÏ,l_º9›îÍü‡ñj⺢óÞ|vfwþ³³;»k¯w½?¯7Æ6ëß‚S&Å@Mb>j>^A1b ˆ*I ÔHTÒ ¡J¥ (Å|,*U$µš¤©H!N%ÒDhR¬ª4xÜûfwS#µRæ½ÃÌØof޹瞳{ÍeÔ÷Ñ8ÚpéMçw>>ÔX<Ž g‘÷ÇÎUnvþ”™‚=?º~˜oQµè¾×}2ÒÛªV×<Î?YêëÜÑãŽIbCÉ'“È—"@¬_è£SŸŽèᘿ©Í´häÿÕ™µ<+å®8R.]‡ûÕòL®ÛÝRòª…±e¾¾ª'«ž¾+ïTöz_TŽI§”Qå–|SQÁáÄ4ůiЦˆ‚ÁñpÀËéš*‰¬%`8 ’ö"› RñZ·†-àÌGÓòqŽP€‚«”'€¿Úµä=8޼1WŒ%ŸN>—¤“µÖÿ[×ÜÿìA‰Ù¿œ–SKAµ,z¡ë°Æ5 åúÎÁµÎB#p‘öË3rìuŒ”|núUN¶—·•‚¢ÎÒôY¤U m®K¡ã„C z’‡lWÔZ?5p|Ýdˆ7˜˜~΂F‚žAB®œ=IÄOàá±÷výáJO݊Ǧ&ÞZ±µ·!þè'èÄÞ£‹ŽtšØK‹ßÙyüƒêTrѳ 5ÿय़grˆÎ·ï\ðÄ>âûû¦n2·Ù+T6íÌzz=3Hog˜T¦•.TÍ¥»=UÏ«éJÎÏ,£Wyúª{ër¼‚Ûn’ª€td* ánEéæHU@º2$­Í'¨NJ'q’Τڔ–DWj^ãêØ·+R[|›¤Íòãþ~k§o—´KÙ£%SûèaßiX9¤îM~?õ#é¨rÔŒ–ÝyC<­GÒa!…8EeÃ:3³9MõCqI ;#"8’ H ÑL ¥ØK„Åuãl´AˆF´Ûçr E8ÊSëÜx§ô/b7¤’²äcãUÕÑïás(•¬…s4„mB»—¡÷Ü P $*Ú®³RQ -AëÐÓè0â 8¾a dI²4<ñB!MeQ–´mYÆ+²äÑ$ò{ÙðLx'”Ö‰e#—ô ÉuÂeÅ­òå¤BÍë׸„.ö\wS"¨à?\5œ(5pïu2L7kÄb\EÒã¶ÿ°´Ðhâ|‰m™t2“N·¶´µå•  „œé˜ KR¢—龋ÒÚwö<õ«eKúf;[–lüÞ—?9yo{I9}ê…4¾ò¹]û¾zímçî«èªºõPï7»æmL¿“k?ÙÿÔ›Þ{^>øÃç×,Îç7×Í>ÿìÐûƒÛÿN˜Ú~ਢ‡:`K,ŽÂ§à»³Œ0ŠGܨŠÐE.†p#hÀç‘+ Äû\yàËÚðe%ª~Z‰ûQpJ¡‰üEþ«ÓS+|Np¤×‹7ˆ”Ú}sS\‹·ÆÍ¸† §šv"¬túô¿î’§ Q”çY¢áè/v:K¥µ¬ž¶ T›VÐÛ¬njÖ­/°VR½ÚJ½×R_á_Qp™ºy…C9³…m»Ø.ñQs9»\\cn`7ˆ›Ííìvq·©°&I…:¯„y¢žsÈÙMÂÒB!bGi²çáyÖ (H²¢ˆ~C×Í@в ewް”#³¨kd¶W›`í)cð÷~„(‹åù¨iùMÓÒEAˆš:@]%¦j~UÕtAä-“U4U¤0<K[ª¢Ïcx&K×5âÃÁ`X}D@K©%ÂhÂaS,Zz!C…B£èà¯K\ ‡z&!ªM†C“Ö¢yý]7¾ÖÞJT#º ï§Uˆ=ÓƒÛƒlÜ~Yƒ¡s¬‚¦äHr$¹³º×‚Š*Å»œ¬wã5u¹cU9 ÊpfD´Yn‚RAÏã(o¸á-oè0yp`<ýÌÙýöÇÉp‡?ûóâDUÃß9[ãü1ã úwÙK÷ç;r;I_› ;Ÿß=xŽ>a¡øR¬ÁW'=8€n`ÏÛY¨ú øpVϨîà;„i–ܪ·^݈éñ 2tɘ¥ò,”gžtÏ-rM†h‡§™¬§ÎW/§õ6f?ËGþâ·øåL‘ïó­–—ëQ?³‰ßìûõ!fO´w‡¾ÃØÇ {†½G˜Qþ¢þ{æ]þ*ó!?. ßdnñ·äúCЮ?³5Q± ÑÇ“$ðŸ#”yî)Ó¯Z^#ýý–-¤r–(Þ‹±ýȃ •(]6 ‚Чi(hC‘% ©ª¤é†áƒo†%-^âTl^ÈQ‚Ÿ¢KRL¤ý¢H{¦16$TŠo4‘ 쌉¶ˆÅQ´öbÌ{Ø{ÙK{GÑèùµøçc@¶—;g«KÔ÷UZ…›loŒ ùÍ·â뀴¹E„³Eëo¡;Å;E.m‹ðv?ûE)ò6…‚¢VvòcÓ§+ÇV¹¢”#PEŒ]ãà#Q5T@Ä4X‘Hÿ5°ÞFibà3^ˆøÚHöþòÙª‚DÚNMUÁƒAÃ!É`§¡‚óàÄ:ixÄkö °ÄµzÁ'VÇFTu¼Óç%$A8gáAÐ^'‡¦ap8Ð5òåQ©0P¥$Üîˆ7‘wY¢y.Ê\™œÄ¹/œ—kâͦsßÇ¿u^š³¤íì¹ûZ—DD”ô 3€-W÷çÛ9†Î!¬²\Žòè°‘î æ ®D߯ ’ÿ:ÿÚD»Á“LOtºŠ ¨$Ú†7ZÞ<ˆ;ž¥Gî!+eœtÎ]iŽdØœ‡SiœåXá3 ò@‹øÜöº«½.üt5,2ñß–@ñÖ¼–h£sÎàø8:ä á2d©Oœh·)šƒ€æP8ÌR!fî#D¯«7¨Æž;ÍM44•æ”3ð $.œºÅT1ß ê¨vÜ`?$HB}H ×g¥úú‚Ôf¶GfÕw×¥bý&i ~]Ó¿™®Öà&®+¼wWÒÊÚ·´Òjå•×É’‘‚_2ØŒˆ—‡ÍÃ6˜‡!$(^&ä Óv0C¡0…v†ü€¦&…ÐBi !„ÒÁm=Ì4 cOÌÄ ÓØ-i1f2à›ÞsƒÇÒîÙëkß½÷;ßw¾ó–°§è°ïHà¤à‚•ã†Ç}B?=¯ÿ>Ú©wEÿæ½uÎô¡p ”@·›Ø b†*@7š 25Ó‹OHTÙªâsl³ãKœËbkœëc[ùóá bÊ䄈lrq(¡•å©þWŠ6ÑEF±X-ÛÄ'¢½MlDFä¡‹`o $‹°°W–M"…WtH¾Š£] O÷R Îü º&â*3®h…¼‚rÚÎ !zjGïZŒ†l€~îÅ›'Ár 8¸ ^Gd¡ÐXå] _²ÄˆEÊ…¹…%…í…ö*èªÀga›zã< JaÌr %UUôÑ*T¥Á»Mƒÿ¨…ýùšˎ.m:ª´C$- Oú?é]xx¸bÅI#ÃâŽÒÊ1›Ke°I‹ÉØ„cëëIpŽÅúúÀ¼õƪû‡{èDžÎÏŒZÔ*bOÁÀJfðÊ„Á”Ë6™üT$"`ÚØÈó4ñp>¯Wõi…Œƒib§‡'1ÉW?in¿4ëÙzÖ¢òš½;¶Ïø7vïÛ{ªQÎÒò/ÚÊÎMËË^_¿î—…Á]Mµ¿Ù=oç}cd`䯻èËMo_ýk÷•«XGŸÜaú±^ЋgiRëâ I²¨Fj3Ö>›ÛàX¿aãèe°{–ìžåa÷¬ »gI†_½ve´géL•Á·´$Ûš•Å#Әᙡ-ò,ÒÒž´v„>ÂŽËǼSÐ]Íôz¦Ù¾…ß,´ 'ø²Î»>ây¿‡ÿŠfÄüW¤MÒ‰‘–k{ /•Ưu:Jݦîcó%Iõì üê!ÑIô)?ï/ÄÅLì±{µ@Ag6Á$@0™cxC],2Ùj–fE˜Äº`Kä•-ÍNt>í-0*£äOµÔ-*¨#žçìoyëo!{ÇdWªŠåT/þ ã¶ iÀmJI¸¡û®ä˜äÙàÀïzFþÛòõ¾ßÞ4Ûõ/î=uüGÍ?A»µ»P¹N#zgû{Ù^ûóç7þDjL-ÆìKÌH3²É:î¢mBXH3{…Za,¥»ª‹Œµô«öÕY«Ô´Ña^³_÷ÜÒû<}ê€ö½0Ïgš±Ðµ.Üe'Ò!a¢o ]!ÔÑ5B­:ÇXêZ"¬úÿò ¡¢Œ¼ŒÈÉf$Ç*¦$ÃùËV¤°,w+HV,%­´*˜š£UÜÀ…- ªâ€ Rañè7x*>qE„ÇÏ÷Kqð?k: £¼é]f»Ø/Ù'¬ šÏ2lI9¢ÓlÎh*ØHYbIõaõœDã8¦¥2 ýÃãI—”ûåád/`–„ï3žeR˜f ÅXŒGÜCê3ž1•«;w\ßÒ|mWúâ‡sOoÙúþ¯¿¿í½=¿Øÿí±6ļµ`-ÕÒîÏ>ý㕞Ï:³:¬¢9˜g^ŒÙ"K3)ÃK71){*«‰[Íl°oÊZÍ9½Pɶq`-„(hÀ5âþÂ>¤l¥î)z©1Íݘf,p/×+ܯVÛÛ¼ƒô _¦|H4­Ñ—ömö1>C:(•iY¶e.–ºHŸ‚ŒS³Ì|î2fÇ!ffazó©XÀÒÔ8RâO³"g$Lüôa¸0wk”Y™¾r9ÄZ¡ ‰1¤rÇ!e¤F fŒ|/ŒÔxMLņ{çÉ™Xl0Ï  „øBör¥’Ù$i2.0ݤ‚¶ŒQL¦ÊË(Eeó|€Ê+$E”yùbüÞ'_ õæu$¢Çw\ì^µ¸‡^ÀW.Ù÷ƒ“h‰vì2±Øó(:ò÷‘GrnûÅuèОëN`ñ`[íŸS¬5 Iz±^¢[úfýÿsá¤à QáŒÞ¡Ût8hÀLÃK† yé˜ê±1ÊÕ¦"õ‰Ç²iaÅÐ?ò‡XZ™€»3ÌÄA éÐD·LJ ¨(ŒPù@*Nœ!)]*œ'5êÑHðORðp0ô1±aÇüú%t‘Ê£‘‹Â]Ð`l °Y‘`;Ü/÷÷ãF¨:™[Ü_¥à³±ÝReÅ‘Å:œØ!ÉYîlJqHÙ·vîD1Ì“0Îå‰É“0M°¬ªy˱aÿ ­Íصµ~yveÙ™]]Ìáý™ ‰Ú¥îw]µé•û¯ÁŒ˜>²€ù7fD5m²ÒgWã\X­çjTGVPƹB5^PÅMRçrµêön7äzè'Ä#Ï<©Œ³“ò&UÇk¹Ú¼š¢Åy‹‹Ö³«òV¥ã­ñžÈ¼{Eó9¼è³ç¢†‡%•DÎ¥JHi¥:¨nÜD\ h•Ù CrÕä¼Ëç-—»Â~·†dÍÒÒZ«f‹ã#§›âDÖ4"kÚw²¦YÓ|äwQYƒYx•5 LÁÜÿ³]-ÀQUgøœ{Ï}œ{÷q÷u÷&KØM ­«!KbÒ´Y+):”€¢N¢l­L°ÅIP¡¡X•б2©Sí´%8uìXBÈ0@™šQ S;­Ž‚Cj¥6L뤨$éÿÿwm÷œ{vïÙ=ç;ß÷úôCQì‚W¢'£g¢ÓQ‘¶FWB¡#ÆD+Ûh ·3EIÛ¢¤mÑŠüÕU£¼A¤½$oŸŽ9W(Üäè±QäÏ(¶˜vJ=P”Òi7È…À%й4ä $™Ðı»ç€½ø†‡zwy¾ið½ñN?u|ëþuï üîïÏíïýþ‹/oÝòbGåÍþâ®;Ÿä-ï?ËùŸÝqqý…“[~­^uz䕯¾ñ*&¶>ÆÔ¡j%ùÝG™ ?•.¨[È^ûb‰Ú¦ jNWÒf,KªgÑyš‘´­/‹õ …iÉG$w©Æ¸E„A~‰®I„@b°ˆáÆIòv²ß£$2‰H,06~®´.øúaÜ[Ùî"Ó…†Â ;î*Ýî€;èN»ÂU’>ñµèÀw‡õ°œœ³L ÕHP±SLK[iâG3Qfèçd ÑR!ËÙžZ¶ªl.ʨaBÅH1Ç!Ò0¨`K`›x<`gD~DexØ^2 fþQ¤æùúÀ%ºn*V#õT¬oxûȦß,~ø¾UOµ€%ü×Ó¥~>y—²¯oÛêݽ“¿Nî à%p}{»ømÙ€+X)û倔#òŒ—“YÙ-wȽ塳rZZY ËŠ*uu;gº¦ K7|‰½b@ ŠqVè#b\(LäÄ)¸"ðÊÊmbvßí›°ðS)›˜Q6&÷L ‰,ÜCÑn^¹{a÷PÆZǨDà?ù=ùÄ’ú” »²kxxX|ròä)Q÷Å» ëÓÏOÝÌ›iÍqöN±Mh¾öUQ¯íÔ´´©i†ŠÐŒ‡mEM†DL³ \¡­óbÑ~PôtXö-«ßæY»Õ^i«6®¨Wd;”L((Ø”)íù”LB¸(Û¤LBܶ+É—«—Íe5±²AK»Ó¶néG=¬ufXU¼iv}±úú>Çl N„éDëLÇÊp12,8¼„kçDiؤß9<õ½š†lcÃpýõ{nçOŸþlÛs‘›žk¾xmEò΂zöÅVî.fôÀ[é·ëwH5þ·6¡«2„è阱pyÖLGÎt€Ê|ð6u³¥Äõ\¢º`B8;_XÒ k4PMÅÇaDBz£\Pè×XÖfõaë]õœnì×y­^gøf“~l ¯ wŠN½Ã蔽âí9ù†þñ'}T?oüGÿÌLÅ-KSU¡èº!¥ 7Ò4}CO†® ákVRÓ, ¬09KM7L`,³Ä-JM 6Z‰wÕ9JÙ–Ê~0@¶Ï²"ã­l%0ŽgqqŸg„8£“Ìâ¤'EV X½ìž¹XÔP‡ÁúLäK çDy~á8·ÄÒM}ÚWò¢×y Z/ް›-*]ê”ÝÂË%ÏÊÇUEzáX´ §Îÿ k:Š–¼ºªIšUU-ØCUMÐüq(GÍÁê&ú à|Áÿ²|ž8Êôé‘¡ê&qdÈÅæƒ!§Iº QsÐÎwÂaËñ÷7“.|Z2ÙBxjbÈÇÿq0¼—:ɺa¯‡ôŠ×s^Ë `(éüÔzþÊSû~ »xœNmšìR²[§îÄsù\‰¯çk$PÚ¨Æë Ô–íµ‹‚¶Æ§¶èC¹‰jYm¯vF+á2®©Y­[Û¡MkÔÜRÔ@àq&ú8›½Œ@ÌTæªý…Kj_5Gí¬?f–ÍX YЙ&Àfµ‹µ‹Ëµ Å+Ÿ䋪ôÆ`wæ±aíØçß,×P½ jð¬ sõ˜´L˰TÝ©‹é‘ Zñ2ÈW=ŠvŽ¡Œ~,}Ä}Ï?üþwö­r¬á«î»ñÁ_‰º=ÚºW,î|PÙùÀ†ëŸ>1y [:ý±X(†Y¿ïpÊÕ$€‰D²(RòAìUÐ qê-Óo4o×;Íïê÷šfÁiŽ7»K¼6gy|¹Ûæ­ÑÖÈ[œR¼äÞâmÐ6È.gC|ƒÛåmæ)©ká;Õ[µ[­;C÷«ë´uÖý!+=O1Œä‚ eŸ SeÃÃQÃ)ŽãþS‡<vêPE üµg†cä ÕXt4Çoš_[¸ú‘,ÁØ':‡ßy„o„ð XKúÃ\B¸S¢(lQe¡ŵt 9§'_š(•æ` ɨu ¤rl–-¹Z[-×jk¥ÀÚ„oI8KQ(bsCÑÒ~ôú{ÜÝöÉ“g¦ÆŽõí:ôDß’à wošúpòíO~Èçóð‰·Nœ~ý­7á õMÝ+ªÁ8›Ï×w‡œkœ¯9ËÑšÌ)ÙÜ—CµU‹S‹«¾QÕëÏ™ÿ%»Šc›¸Îø{Ïgß½çs|Ž;ß9qÛ±&4qÈh}ÚP(‰(++!aÑ(l tmBZ@@TÚÐŽM´R§R@Tk™JJXé$T´«"¢]Ë„@j†Z¶lUÅ,ÉÞ÷³”JñÝgçÞÝ»ï÷}¿ï÷k2šB …¡åÊ µÝhu+kÕ.íicmètäbàjðªu1< _LFô˜”Ñ2%õR“öˆ´PkÓþîþGÙ„æö9ôÒR`y½´ÈŠÌøÃ³Y'ëgRD@prÝvÃv,8õývAÐýK`)”@È ÖblÖ‡ýu¤®¸¡Ó\áøþKå8‡[±ÜlŒcÁÆXTVá–š°— c„U¸1§HŽ+6Ë›‚8Ó¢ÝCÄÚø­ÑÿÛÜŽŽbNhbÁµ¨'êñHU/ 0´IŸcz‡›öþbÇH÷s×6·í®öy~ãûïö­œèržzuÉ’“oš¸ó«ÇšÆï8Ÿùìògþ+tႉ.ÇuŽ¡†Jñ,{—›dH:8›,"›TW®$g.2÷„„Y6” Ï÷Ï-õ/ ­ò¯ u†û×\—‹o¸¾Qoµ$ªfJI½ú(yDm#]äKõoÁ¯ôoÌ¡ÿ/–<«Ô-¹¥Î(ªC•š6âÅš×övzû½RØvót†zÞb`B/0®hF¯ ÒîÕÅÿÄ …Ô{uÈ5P…è@qyN°GŸ/þ‰|A¾&OÊR9¹­¼㢓-X(GEoëyá+úÙ, ÷Ud§MÉŽžÅcã™i8Íá(Íù!0¨ûD'ù²ŽQÏ5ß4TUéýOœšø÷3_8Ûsp¼âèÆõG>xþ¹C]D™Ý‚«±|`âÅ#»nÏsünxøOŸ^úüS˜p/qhÎqT|è¼=»Æ5 Ǥ¬4OZ*­‘ú$õ)T¡¿zCÁnшÑÔ+шûIÔ—~¶vï`˜¦õþcû¦ — ¢ï) QÃÈ5Mä·7Ÿù¾=å“eTë¸Õ;Ê“©iäÂÈ!íü@ÑÖ3¨^ÜQІ y‘ù xéàƒ]¹+|è¡Ù+a)ñNÏ‚¦w“͹ÎÞñK…Üä׎Až…™ÃÞ,EÑ&ºÎ/‹®Žn¡»èöøÿûUtx¨a™‹ª>7œ!ò!Z-fÁv¥¶³vw»ÚîéVºi7ëvw«Ýž¡ÄPÒ›LÄ“ñ³âml¹û©ÄS©¾X_¼?¾½¥îMí¯úõÌÃì·ê¡äáÔñÄÙ„ž*(Ñh!ˆ‚x!HåÝáÔ5Ä A¼”q_a‡Û”d¥Ê$+’(‘ÜÕeÖIòž5« ùåfÎl5j~`^0]^³Ü|ƼfJåæn“˜§86%¼.ÞC˜£€Ë5lc¢ánô°† гXÀ^äËb\Ý^¶®Œ”•–Èlñà†ÛK¥Õîr [qÓö³µ°¼ÚÎ æÐ-¦5bF`¥U¦0ަ.¦ôI²âC9žæKO”6ޤqž+ÒОp›t¡Oypó÷°(m‰GU$ÓÙÎÚÓµ$WÛ_Kj5ŒqózW”\$ŸeNíÀ °MØD$îìÛóF¦â¶¼Q$ˆA¤½V°µæý0I9 ó&Ÿ¢â1þÑø©·EH$ø©'³xš&ãZ.Êõ7Öä 'mqâÅÎÿxÍyõd'ï Çœª„O+ÖüšÃõDBˆ¦ävÞÇáÿZQ ¡hÌ£*3X§’”¹2R•ke ³2Weù8ÐL:³mÛ64ŽpGoO‡¿AÏSM2‘¬&õÙY ùÁ{Lh±€Áµ™&ùaŸÈ}è}eó–õ•ûνÙ:÷Gé×—n=Õæ;¦®ïÚÒ­ë5¡íŸì_Öunë…/ñ¥k{WÏ ¬¬}t[Kó¦TyfÁæŸo¼!VZægñº¹[ÚÛÞþÉQèÓøäw$í|è‹ã5Kd) ;—ý&FXõ0ì@ºF3^ÆG·ÃíÕ¢(Š=Å•*ž”•‡éÃò³r¿¼G–WNäcòiyDvÉ0¬«äü°ÁwCÀYrÞM‚Õó :¯É`öóÈ5%ÍòªRþéFAA ï¹9ùÉ!šÈ’´"×C\²âRœ 7"’BÅB`CÒém|þòµõš$§ÎÇ bÄŽÜ–Ë+µjî!·ï—K–ìš=ôÖЂ§[ëד½ãÇ_»¿yÉÒÝ;Hã+‘ãkŽÃ7 ™÷ã'mé ¦¸°‹!'Uœ˜8ãP~ΚÌÕaíê0/ ˜v°ÕÐGõNŒ¢¾Füîñ5Rn3³ gºãüŒ§ÎüŠ/l®È¢?ÝI£•Y¤óÿvÅ~!UE~ðª3PŠ&X#ªg P3[†—‘åÊ“t ^Cº”.ºmÀÈ&e#ÝÀðyÙñмCy•þ½A_gGÑAv }$²óè,»‚.³¢¯Øt‹Uñ×aA¤³J°ÖŠlFv±žuòRɺĻSþ>ðê$²í ¹€ß„œ…¬ˆ_‰Ó©º9l5W3<7ü3œΠš\N@²˜¬(•”(eÈA&ŒùF—,ŠBvÉŒ:vÖ¨X*¶mÓ~JèI:a;ûÄÉ#›Fˆ£î›j³ÌñŽñ+86ÚRÔFnÐeŽ·î€³:3°õÌ@uN˹Éd¸#šnzQÇò \ç×Y þÿQ]µ±Qgxfön?f?fgnï|ç;ÇgÃÙgŠ­ÚÆ¬ãÀÒ°\C )®%‚H€–.‰”æC©š 4?Z©À>ýD ¥ѤN©JA¥¥¢ªI臫Tr¨(õ¹ï¬Ïxwggfo×»ï<ïóš«NþyºôB¤nbßúÍË·“ï8*BÑ!@‡ˆTM¡ã4Ò™†ì£†B¥–kŒ+ý–Jìm°¨ÐãYkê¹~Ç /€´ÊÂ1å F¸!¬2ˆ†m©2¡,ŽI„F8•>MtTgdĽ:â^)ŒHôÉKÅ)Ë‚L†4d ‡# ”,æ«ø\áÙpý†'o†™îpI;FuM«›©ª—týI0T=³5¢ZFLM) ˆj¦£ ÅOËèi³ *؜֨œVÔ¦uè8) Õ@ëÖ»Ìl!_,V±'ÅFíY}½Ø¡îÔ¶é§Õ3lP|ªÞ3ò&Ï£¼]ïäY½hòæ vñ¢þý€ò¶u&‡ÍŸYhP=ã\Š\Uÿ`ÜŽÜf‹qõ¿FÆTå놭¶,lE¶iê°ˆ@\×ôœÆrŽ,ãM±±•³‡'¯í’¥l@_cX«ÙØ‹©Ôäu´À—Gž¤«ù&ÞÇ_å”Ó`Q.ÇÔÂ<u1´µM…qØåؕ۔úÞ<%ÂÒ¢¥:Ô(Ôåø½ëT ð,‹‚u”9Ù_rMÏj\ˆBTó¢QÍuÎÙŽgÛŽåNêÜŽ¢÷3¬‰ˆÎ¸åØáë àq]×4™:‚1ÇAÔ»ãÚx½ÅÞk+ö0>ÐlÅ›éJè0ùJ`ôp¼™ïá„Ë‘éFñšèH.’ëо»³.´D©îñb1 ¾v™dÅäG÷3Ë-oð鸜uTîwÜ šãvÊCöåÑu¼zÙŠ~;keÉ»“7ÁÓÞDÎäå~Ô̲0Šç”ÿz»Ž·.ƒŒÓ'/ŸÐšq8Q³¬ëxËÒ•áìÍZvjVÀìCá,ñ$šCÎLý§û¿_ExŸ¼yŠf#Y$/mà«Ã§]>š$ø‰˜_Ô[³oH*‘^JÁPB>‰UHR™¡Ô+¸«töÌ‘y‘–#§Øöèà±RÿÙ# ×€`Þåï“&|0BÖÝ»Núþ÷`:ôo`ÿ©¬Cq†M5B •¨6 ’…Žœ5BPòŠP˜À¬6å«R–¤ü•ì­È[úAçì\ôœzNû€,Hø•J̈ەnî0_Âo˜z“øj¤Wë5W8oãô€9D†­KæûίÝëÊïßÚtoQ1\¦…gIŒ…*ÙÍ‘=¦"b#J äˆ$^@Ð<¥ƒuªªhºa`U5¢,=·1c¶k‚© ¶©X.UaÔ½ˆ.ÄÍ!ÃCÈPˆ}ÑÆvÎR<ËR¨a( Q¡°,D{‹ìÝV-ekUcw@A†u‰ºWUÔa² p²ÊnRÛ±\ÄûÂBµ8>% î-w|ì£âçð,µ¢XFkñÛî$_Ÿ±ýzˆÒ©NºzgýN²Ê7e¼Í*ߪ­ð8äødïJާq×ÖøFñ§§·¸@ƒ( 8-RzÚ¡0Á ï+üËÎÌʺVú>~íÆõŽÒßH—î.lžßr¯dM|ˆ÷–Šð]5¥¥Ê¿#•ø?eŒTQ)¦’I1¡šj,,kV¶Œ•TS¡òFer¤2åÊ“ÎX(éS,ƒ™üˆç3~Þ{Š£J`° Ù|s«+Í2DÂNŠz³Þª·g[³í6ç 7ó"{"Ñ+zc½ñ bClC|‡ºÝÞÁwz;ã/Û¯ò×Åë±W¼ô°ù®{–ŸñþN?ö>µ'Ü»Þdæ¡iD%bf&a±}La©û¯¾¬A±Œ£vÆ,¸œCÊ‹År‚z0`aΤžiÒ˜–eªò(ãfHSæ½ É “y bxÃdy`Î O‹÷Ãxþ õèKi*/…Ñ ²V³Õc)K¬I‹Xð‹SM bCæõ§³}@Œ¼‰­P.ˆ ;–tÇGSîhqëXeÒ {() ‡iDé€$8' NRûCüë9À6I`›³Èš¼ÌÉÛø³\ãMþy°Ý§µí¾Y6÷ymÜ/£˜< À'V/=n»ÜX*ðÁ{¼Gfu>QÁë¢féùó7 µÕ…¿ö—6}qfsßS­¥õGÜüÌôFVÉOüÖK}ÛÉÆ{—ŽÍï]&]N¸ç àÊÁÇ[ “_éDà/ˆŠVàÐ:x.¸VC§ä&×Ç>]„'닌w5^N–ë+%î&ü yFÎØ…·é»Œ×ðËú+Æ]¾‡ÚPØòõl;!3ä>;ô;!h²²ƒê`ÌDz˜úèØ\"Úç’öÙ--ñµjÜ…µÕ‰xXÀÉ©ú‡ ªÎï^›%QãÿÜW{P”×?÷{®"º‚hÐ*DEQ² u¨ˆUñXÔàƒ¨éÆÅ´IÇFA¥3MªCT­¬ˆušFÇIÒIœ¤]m§mªÌÔÚÚÖQ[5òõwî~ߺ®™1M§ÿtg~sî=ß}œsîïœ{wlÞø¤¢ñq«s#¢Š—<·BsM.¿|”wA¬¿l–R¦ÌÙ*f{¬œàîÙ0ó•î;S}RG¿sálbnFƒ{ÀªF±zkÂÞ÷ë¥÷•'Iµ®ƒß)'2 1?ïAñkÞ,4 @)BDÆ'&ôíß;òPÔÀì¯%&÷ËŽJ4’³‡Z¶qˆ Dˆų́ÝuÃ%9÷£pù¡(ôu¢Ó[QÌÞŠi êAF{žÈÌÈÈLJò<‘œ”$U†(Qýû+ëÂÐýtaùSº¥ìM¥ ¶û-OáÓÜ 3«îLY»91óø…³IS< îþ«»ëk gÕ+b‚ÞI´Á›ôKó’©5ÏšÊu—xÍÕìRÊ]¯¸”B×Óø[殕\mæ Qà"ÔÛxnFPŽ EÍ!s¼+™(^Û«á%ùt\‚|a§áë=NäÎ_¹ŠS'þ£¬_‡ŸX·.Ú“ÓÏ4Ìd¸ºñLÜÈE£2<ªö¯÷U}nÊôþ¥²¡]ž’÷FiŸœ›®A.â_Ë¥ä,OúÛoÝ9|o•›\½Ðíñ<0'vϦ)nºs¸;ÉX'ägl5l•’Äå=¥•S 0ÃLßÑ‹h¡ØB%J+md¨ƒÉ«¤õÛŠþdÈS<ã ß9@0ÐÖÍ–ó¹±'y.Öxž×‘²œJ\q´V/²îa¿z­ÑnÑ.Ñ#‹Ö ¿óÞÕˆ2y æì4Z©ú=ø¾ºFÈ…è7£½óÒìv³ŽbYô)Xg›ío²z†2´rë3øòM¬™TcÈiÀLŒ‰†|Ø":¨FtX-øIUØ ë\[æaÍø> ó†¡_…ö@Øa@ö€áÊABÕ¢ŸAŽÿÅ¿ZÍ>}‚ý¶M#`ãÌP`Ïw€¡J–ÕÙ#ĶpT…a†šN>`0WùÖhß x½®w‘Êï8N¿&he4};çëí´‹ûÀ,‰rëž¶‡šÔ4ß¾kì„eˆ÷XàQþB©F"m¿r±~%Ј5ÿ$ùPF °ÿhÈt­Kr¨ØŽ½þæÄ‰cƒ~%ÎuöúœóóçÓq.À³löÃ1çsEÝY{c3  ß™“<‡çc­D›‡-÷%µ`LâúH ˆaHžÙÀ·÷±N,`ƒÑ@Ðø€làm`8ö&ì«J¾‚3ÌMÉpCï@ a›älÀ‡Fyžœi¶×â}Œƒä³‘Àkr¾0gaËQgmÎ)æŒ#%¿}Ì{ñö“9”È=í*Mgd‚[Žä¼ƒÍœ;•BªÜW1gÙ>Gr\˜k2&È [æ„øš&sÅm¨Íõ*G:±ÊÕ´k.5–£¦4Qž¶òÔÒrí¦Ðh= :øƒ±G”«4ÏušÒq–sÐ=LÖ3L¿ø–~~¶!ž~j@L×i~åqÍ/t½Íº¢“èÔÛ”—eû!q:ð%#ôÛªÿ*PÎëm¨™mÖŸu¿eÁŸW9'Ì«" ˆw$ôoÀ×HQïò‰f!¹ ¢ÀZÍKÙº—2µÓ8ŸÔyäô…úgô®ZGµšßú¨  ÅOÕf -Sv¢¦a/ålü£û¨Ã8ïbË2¦Yûvë€e0Æ¡ýk@·öÃïƒwêB«Û¾OSœ»4 §çÕÓi]ÏöÊzs~$ïÑ"i_ã0mÒïâÜQ¥½Mv"ž°Û§-EÌwÑvø«nA>B,æ˜È³ zŒï¾Õˆ3ßEuT¥~Š÷ÏM§¾ò¾˜DŰ½Sêp§²d^L-ÆU§¢Öž¦2>+öƒíá³w½@‘®Ô ?Õ~‚11Ôãšd ¼´_ò‚çúˆ8æ 2ÁÙÙÃë5Ë9^вã±WÆBÎÇ[„ùűÀšF ͓ô†^HÅÈ¡f³‚šñ‰°Æ>Ì+d[0o ¼¯wÐ"äW jS jIþ—XwÕ6øó"ê: V Fmô˜^ú¤ï¹Z ÆnáüQ[)‰9bì@æ÷ÄÚª¤©†ê «ÓQ'±ï6è¾üMCîÖb~œ]· {×BÏs'ñ[†ßœ/¦—¢ ù i¿S°¿z…šÕ|ª'»v ›)÷…÷†cý—ml@êÜ)T7}OêÓé¥Uoù=©UÒ3ZSÇR¬Ö—Rµ‘«·i·Ú‡Jµh·v‚¶s_‹¦áêøßŽ·%ëÏáÿôÊ'è×S‰–ƒù5ôœVJåêQpïWÔS[‰³Æ<ýàÉ0Ì¿ŽumˆKT¢!·ªÑ¾mäqrv«˜¡åQªœi«ƒ0›•™ˆ[>Îörû{akÐNÇÆ/°OúÉëbÑvS‘uH HüS«£6 Iù-MQgÑKâ€uJì¡i¢ Øcã§”'åQ`.îxØŒÖ<ô6P‰ö(ÈŸ‡}¼Ý<ô)°kŸ<Æÿ Ê“”ÁºF ø…ó-¼×éC¡²N=Ð?Ž»7àÿÉ=+ñ.÷¬S p1Ÿal¢~æ·©Ÿš ýÌ ëëƒOÇiØ£ìyÄ9J“1 Àê£sý¿.†Èx–öÝð_Ù÷U€óÝ,‘ñ½F1QoqÞºY$Γ[}ÐOE?Ú‰§sNп&õaç®àOªõÏp}x?ü\ÕWŽQi(ùð*Mdh“0ï»:i"ÃxßÞ{¸¯íJh„º‹m“îs(™¡ ƒ­yröÏ¡F¯öÍ€L‚Ì‚œ™ïÈ ¿ízñççøìs-é s?'îçÆ9¾k¾xÍÿ' w>:€÷ÿ×{ W7`\Ä;dÞ‘~¼OQÑ=Ô’ÏÇ?FZy:ÜÞÝ)@$Ú}¡[Ù@t÷&Úë¡÷`)Ú j²ß•±ÿf¿êb㺊ðØ^;Žã?9“&Jr…B*{í8)ù¡J‰òGh“ÛIÓ‚®ïÞݽd÷Þí½w½u¨„Š"@Qõ¡H—"¨D+„”ª)^x!žˆª•’Jó9s¼›dë4¼][³gÎ9sfæÌÌ™™‹µ7ål¯ð›Ñç¯ÿ–è¿W?Ñç¯ÿð%àï¾ ü/ƒñ{ ÿ'Î} ãÛzÿæYÌç¿Äü_˜Wg€_ĸã`5`ç¿«@õ#-ß¡÷}¼ý÷LJѳXÐs3Æ_`<ßü ñ¡ÇÈŸmÆæoÈÿíÆnù–hµðÍôwô}?MûÜí'áÏ[iÈZ¼‰ž²_õѪ—Uý3÷2ò÷÷±Kô@4BŸ•ªU½³ê_1*þ/öt³>§ ×Y/©éÜÚq•^ 6Èx4ÿéܶxµi9õzÍK ¸¶©º@Üÿž÷ÿ´økEƒñ2æ1^‹jZ”[[rl›šv¿çË­‘÷PS§Î6ÁÖ#Ø#pLAs-^.´«Ý÷\ËïP£Óuú£Î£:A»¾´¥h3oÇo¹óæ¾cÙó¦¾$š7CË~sìEýÌzZCÓ»[.¨o‹ÜIïéÐüŽã÷}#¼@‡Ó€<°]jè/&¨Q‹/aí+½7hª÷5šÂü êæ­c,¨=Œßïø&Qç‹71ÿ*æÃ¹ËL{F Ð.ž›ãVõçÜÂfœ/*ýið)Ààu@5òµú†„ì?w¢êªïÜÜÓ‹×rWM=`ÛñazðæC˜‘þ{h€^¡ã$¬v¢?è wÁ޹N¢î_áëçe¢Þwˆú^!Z…z2ðs”„o ï#¹B´¦Sà- £à5úæRXw‚èÁ¯­ÿцokظEÃ&ô3›ÞÓ°ùy¢]"ÚúÃ7[qfûy¨ú¢qè”ÿt“ðåÎ )¸ªa×ohØý ÑÞGˆöÿ#ཎèQèt=ÔÁÏÚOtw>ú.ÑgÐ=¶žèñ¿@l,}îÑ îw¶z÷} =Òç!ï,dÍ­#*ÔˆŠW:­¡|&ƒÿ ÜÈ ƒ 2È ƒ 2È ƒ 2È ƒ 2È ƒ 2È ƒ Ú@QÏüÒ¸ö‘Ƶ4®}¤ð¾Ô}Wñ]Ž2ÞŸZä»?Éø°ºËÚ㫬­3þ@Š~â#øhjýA>û"ãX–æ¹1E³9…oaúï0þã?d|œñ×Þ›Ò¿7%«?µÞÝe–¨F6É$ £A¯f©ÌøqòÈ„BeÐAÌ|àê×ĺÃV*8Ÿvˆ×ÍÈi"ÖÌ ìT¨ÓX;†QËÛA{ñ?Iã‚MñꜨ`œÆ™tùÔ4ø¹Å¦ëàbϦj¬‰¹¨L‘¤éXÈÀ u^qtiŒ¥¨“%YÂËÄŠ>YeŽêeh_eŽvB¦.³,eõP$|C‹Ï†¼ï25*<ÖÁ‘»Ô˜·ÒÈb­–¦v}G­¥,!­•ÃüCì»[´Â畦*:ªr*’`ñùy‘êÈMÕž¶fb…"(7½šØÕëzr‡éëäœmM±¿Å1mHÜG6+°ì¯êó ì8âCESïuŒxø-ao^¬­9$oÙd_éè0؆–Üßa¯U˜¦ÆïLG£Ë'õMÒÑíÄ‘e`ÿ9ñL•µQ±©ýÈK®ÄzTy–DoØ”o‚¦ûY"cŽ9ÔÙÒ…%±iÓ³X,«bÛŠoXäØ68žcÛw!{£{]é®ß»zKcñk $Ê’|¤w«ì“žçóZkÅ×âÝ$Ò´ô[«Æ¯d!¾E$[oð¾É–ðE†zCÚŠ!Ÿ4ޏ×8†ªœC#Ýò-yu߯©|WâøWÞ݇>JË‹ríNp˜Ä¿AÛÁIùÀç÷ ßÑ'R¼Ž#®“Ù9Î}y÷Uæ~.öñ½æ|í—’dB[ò[’§4×S¨äómeyÇñûd9r#‹©Ø ØÚeá–§ ›Eõ88ˆ)ü ¬ªóGðû8¯ÆÊ ~Õ8 +Æÿq^¥êc˜å¨ nÓF¼®5Öž«‰o“·Ðj]ó<ØÀçè(3utŸ(óGñ4Ç»  ¯Ç2­8‡jÛÕùl’ûly*C%ùZç Grs ¹£Ä\ì8÷*Û>%ÒT™—œ=W=-3¼‹e¢ØjÄYЖ—mÇoÇç<JÞ(JÜßÎ^ÑkW³S\’lÑ*¯ ñ¥byŽ3°ÖzN<ã çÛyhßj©¥tæoŠVÉQUÙÒäŽÆ„ÔŠX;\u'ÙyŽ}7•ÏZ|aK7“~9ºJ˜¬Q-«ê–Ãï­½Ï ‰E7•C#¹êõØÒNªZù©Žk,¦öSq›ôw·”Ò®Êü£¸ò–ðk°ÿϱ7ÓÙ$Êà ¥ZgêlqÅ¿ßG땎îªdnmýªjI†_Cw»QÇøî­ž‹zIãÛDâ^枤yøoðžkûÒoqæ»SPØ!~8.tt$Û*¦9CëzBú,O:xõ>u%õyÇaÌà7©*ªÔ—Õ|Y-Oï ¦¯BÖ~CÎÊW\{Îr”è~"SÞ_ î4­}_¤D{Mñóž]¨ÙEÓ²WÙ²m÷\/Ä’qÐókžo†ŽçµŠ•7™¡Ù†hB13f¼J]­Æ1çvìÝ;9ŽŸ©¼q R1¦R9 Œi;°ýy»pÐsC»ª˜ø F`âÖ¢Q°§äŽ|Ǭ¨L›UÏ·r½jºNVÙôM+Ä t¬À˦k`oÁðІ)5ß.Ø–ž¦[0Lð¯[eÃVŽk„u×6NXÆq«^AVxÅ„ œ7¡L´6l7tlP[@êþBÞ`“xó¶oâz¡o›a[ê€UÇ%,ðŠP“U(Ö+ ¬+ÄW=qÜB=ùªA¸P±Ó–PÎ ”Û¯:.SøÞ9°5¡¿U‡ —5+8fÉSû²ƒ–íJ ñŒ’3o3{Ù4*0‡Qµa;×±@nÖjöÿ¯ ð¨®&:ç$…’b-ÅZä!ʼn@ 'Ð ’k‘—ÍK²°› +,Áµ¸)P¥x w× P(Pwwwýç½$Èßþ²ß·»ß»;3wæÌ¹³ç*Œy.K7)„ÛmƒeX£´¯å)0´¶€6ÙcÇðº=¼Á"ÞŠös©G¦e„VV!šÖˆlÈeãodû´d¨Eƒî¼»t¿¥}šØm (dôÑk昣ÝyÚ ºš‚¦îYî@¾Ç,°·°½ó¬p ßÌ×ÔÔ$KS ºv`Û<ßïóúœhÑÅ\M,,­•ò˜þľêg³¶ytl¬Ñ Åíòûì5t¬RÒ¯õFº_{ï5ýÃíŠÿóµ–%¡¥|s8¥¦iF/3hÔ3ÒSŒžÙÙÑNb–'`…sÕ,:µgzr—äNÒ“{¦=»=’;%¥¦%ºöIJJIJM/U&*=W[QŒ´Ý;°§U.\ÉGOž/Çoæç8ûØä·qÊ,0 |!ÛÓe3T³ åe9ìSN(¡^+'ÜÊf57sü–e³7Ú n¹¦RÇ—i=õ ^—ŒVئ ¥Í¶ìîø-WP¹‘­Ø_ÍËn»/ÇrLZ\ñÓv*ã3CA ­iúô^SPý@qRJþ+P\q¶jŒ4=!3SYi”U×zGyÏ Š«ÐšŠš£GÂ4ù–Ëívý½rCQÌsjûšYYn»ÇÊ¿3¸šØË~[g"ü[R·×m¤›8vaŸx Ø‡E_X9Êô¸¹ö>«n¯’[ó×Vå…„/Bèú<’³¯gO¼!+àl£³ÒeùóŠ*ðåír}!O–ru¤Û ޏ¿•oÛi'-YWÇâ•5-g»‚W{lfeýÏa”¯8ÍŠ¢@ºL´ 2Ò:M­â q­šÆÆÇÆ–*•Ñ]cãââãõ3¡y‚‘вEë­ËDåƒù‰11áp8Ú[Üx—Ï{í™°ŒÎ~3lc¡GP“ÒH}|™zBSufùtÀ7±©ßír›Fšéœ€þcµjöbÇ佞o0ÏôZ1ÞÀÓžÑöâÿé¶<ºjýoû)¦GÇZÅ-:½ŽÉs„®^QFÿ̇éó'Ž(þ=Í‹¶$²EKVÄŠˆ­#ë{oľˆ×Ä2aPüüŽÛºn/ëºhN¼È‘q‘Ý#»F¶ÑÏÖjm:WĬ"9’‹-X!ŽÄë ö~GžÙ1(Îë¯ú²TþáUb–ˆ‰H¹AJHI¹Qk”Ü$¥Uˆ–•rR^n–[¤‚Ü*¥’T–*RUn“Û¥šT—RSÅ_-©-u¤®Ü!õ¤¾Šá†ÒH«tlª¢'Æ‘¹ÍTæÆ«¸m©B·•JÅD¹Sî’6ÒVÚI{͸£tR¡š$]¤«Ü­W n*˜{¨¬MU¹ÚKz«DMSI›!}¥Ÿô×KØ@¹Gî•A2X%ÜP­2S…–-F³‹Ž[û3\qô:èäë•Éï\˜BŠYXFi'GË+ãd¼L‰2I&Ë™*Óä>™.3d¦Ì’Ù2GæÊ<™/ d¡Ü/‹d±,‘¥ˆ”e²\VàyH–GPB“•ò¸¬’Õ²FÖÊ:Y/ä yR6ÉfyJ¶ÈVÙ&Ûe‡ì”]²[öÈ^Ù'ûåJÊ!9,G䨓ãrBNÊ)9-OË3ò¬<'g䬜“çå¼\‹rI.Ë‹ò’¼,¯È«òš¼.oÈ›ò–¼­üyWÞ“÷åùP>’••ŸÊgò¹|!_ÊWòµ|#ßÊwò½ü ?ÊOò³ü"¿Êoò»ü!Ê_܈RˆÂM(2(‹r(›q *àVTD%TFTÅm¸ÕP5Pj¡6ê .î@=ÔG4D#4F4E4b‹84CsÄ£Z"­Ð‰¸w¡ Ú¢Ú£:¢:# ]Ðw#ÝÐ=‚TôD/ôF¤!è‹~èˆ{p/a0†`(LdÂ…,XÈFráÆ0 ‡^äÁ‡|Œ€ÂH„1 1‹q ˜ˆI˜Œ)˜Ši¸Ó131 ³1s1ó± q?a1–`)À2,Ç <ˆ‡ð0Á£x +ñ8Va5Ö`-Öa=6à <‰Ø„ÍxJÏáVlÃvìÀNìÂnìÁ^ìÃ~ÀAÂaÁQÃqœÀIœÂiÃçø_â+|oð-¾Ã÷ø?â'üŒ_ð+~Ãïøâ/ A2‚‘¼%X’7²£xK³ ˲ËófÞ ¼•åQVbeVaUÞÆÛYÕYƒ5i°k³ëʼƒõXŸ ØØ˜Mؔьa,ãØŒÍÏlɶbk&òNÞÅ6lËvlÏìÈNìÌ$vaWÞÍdvcwö` SÙ“½Ø›}˜Ætf°/û±?p ïá½ÄÁ¡4™I³h1›9Ì¥›Ã8œz™Gó9‚~dˆ#æ(p4Çp,Çq<'p"'q2§p*§ñ>Nç Îä,ÎæÎå<Îç.äýò q1—p)à2.ç >ȇø0á£|Œ+ù8Wq5×p-×q=7ð >ÉÜÄÍ|Š[¸•Û¸;¸“»¸›{¸—û¸Ÿx‡x˜Gx”Çxœ'x’§xšOó>Ëçx†gyŽÏóÃçø_â+,Âb,ÁR|o° ˱+± «ó ÖbÖã;| ¯=`#~ Á//ø ›°¿ãü‰¿°[± Û±;± »ñ7þÁìÅ>ìÇÄ!ÆÅ1Ç œÄ)œÆœÅ9œÇ\Ä%\Æ\Å5\Ç ÜÄ-ÜÆÜÅ=ÜÇ<Ä#<Æ<Å3<Ç ¼Ä+¦cz:IÑÂP†13233 ³2³3s2s3ó2ó³ ² \¤‹²‹³K²K³ ˲˳+²+³ «|¥:k°&k±6ë°.ë±>°aÀ`³ ›2œÍØœŒd‹€×´d+¶¸MÛ2š1lÇöìÀŽìÄÎì®ìÆîìÁžìÅÞìþìGcÇxºÙŸ˜ÀDä z˜D/}Ì!ô3™)Le‡r‡sGrGs ÇrÇs'r's §r§sgrgsßâÛ|‡ïò=¾Ïø!çrçó#.àB~ÌOø)?ãçü‚_ò+.âb.áR~Ío¸ŒË¹‚+¹Š«ù-×p-×q=¿ã÷ÜÀø#7ò'þÌ_ø+ã&næïüƒò/náVnãvîàNîânþ͸‡{¹ûy€yˆ‡y„GyŒÇy‚'yЧy†gyŽçyy‰—y…Wy×yƒ7y‹·y‡wy÷ù€ùˆù„OùŒÏù‚/ùJé”^Ž J2…(TaÊ ŒÊ¤ÌÊ¢¬Ê¦ìÊ¡œÊ¥ÜÊ£¼Ê§ü* ‚*¤ÂzCETTÅT\%TR¥TZeTVåT^TQ•TYUTUÕT]5TSµT[uTWõT_ ÔPÔXMÔTáj¦æŠP¤ZèMµT+µVE©­¢£vj¯ê¨Nê¬.êªnê®ê©^ê­>ê«~r)VqŠ—[ý5@ JÔ@ ’GIòʧÁ"¿’•¢T¥i¨†i¸Fh¤Fi´Æh¬Æi¼&h¢&i²¦hª¦iºfh¦fi¶æè-½­wô®ÞÓûú@j®æi¾>Ò-ÔÇúDŸê3}®/ô¥¾Ò"-Ö-Õ×úFË´\+´R«´ZßjÖjÖë;}¯ úA?j£~ÒÏúE¿ê7mÒfý®?ô§þÒmÕ6m×íÔ.íÖßúG{´Wû´_tP‡tXGtTÇt\'tR§tZgtVçt^tQ—tYWtU×t]7tS·t[wtW÷t_ôPôXOôTÏô\/ôR¯,¥7Ç`4™Yˆ…Z˜e°Œ–É2[ËjÙ,»å°œ–Ër[Ëkù,¿°‚VÈ ÛVÄŠZ1+n%¬¤•²ÒVÆÊZ9+o¬¢U²ÊVŪZ5«n5¬¦Õ²ÚVÇêZ=«o ¬¡5²ÆÖÄšZ¸5³æa‘ÖÂÞ´–ÖÊZ[‹²¶m1ÖÎÚ[ëh¬³u±®Öͺ[ëi½¬·õ±¾ÖÏ\kqonëo,Ám  2%™×|6؆˜ß’-ÅR-͆Ú0n#l¤²Ñ6ÆÆÚ8ol¢M²É6ŦÚ4›n3l¦Í²Ù6G•½©O6¯Ï›äò ,³~wJªß‹¤ÔjœX 1 IŒLõûBâ“\q~Ÿ7Ì—Xcã|~·%%ÆÇûR,<ÖïNs›ë5BÂ}|^÷ Wç ¼²ø "’=®ä„ÈÿŠÜÿE³î ¢\q©)nó z^ƒQŽôü¯mt0í ":Xå}°˜øØàë0ßÿOÖ!ÿ·`½?ˆŽÁ`òk„vŠsÇ'z<®Ð”¹®Òæ¶q$Ze‰:íIfkÿÆT‰ xÕ~r•¨·"(›¡´ÙUsÛ¢ª›~¥Ú¢êO€÷ýâóM¸Q „l"˜ÜÌÜÄÔØîü0g;ŠØyŽœæF˜[ÜŸØIånqäd0ÇΜžÀMqG‚ÔyfN*Çbç™;=q9ÏÜ™Ç~ôÈ|8ÝWÍöaN{¨ÚÀôª½iÛÞöû®,v"ÐÏùîA·Ë=p:]ÍËÊ –v|Þ·²8 'Ó¶¶¿«M[íg[Ùn+±”õÓ=Ñ+dǺ£¤sXl 't&ÝPÏöâHGhªAw"òé¶îƒRD±“ű©wëãÐÙC%~a:õg·¿Éïëº85]ß6§RU Z¿·bK¦Ëb/e2ž9”å³´ãi4ûf17Mê&ŠVÍIÔFÿüÒ·yaÚõ•Šf8î+ñ²Þz<½R/ó–ókk!L;»6UPèfz­Ö z¬ß<FžÞ«z,Þ»rs°`ýadSŽl>Üí´¤Çì¶—ÕN̤næ·V‹´Zni*ò­-¶Ò´ëßFÞ¿{¼øÝéx°àü.QWE½“ÛÅ¿ÝtåÀÔL®ëÃDÔ‡ùG+¨±‚>An:»Öüy$©üEÜ«€ïLÀƒ øÎú¬ÿ;ã0ßÙ€ðב÷çþk„_=¨ºÕ¥ªïº„S-up~ymÚBèvýQ_h7/ uh+!‹ÙW*†¤íÙ4_ÍÝðlV}ÝIÑŠNvËg‡f™…¯º¹xÈŠŠJñnÙ;õBˆ}Â7YÎÃ¥èzÚwzC–¬P¿<ïKÚ8ƒ»õ^>9|Þ‘§ÚMlºŠíVÔý[}ÓŒ‚¾©›î©ҽեº°4<¿6÷•î,®{3º¼m,:ÿx”jgLçn´xõñ(fÑÏ’–ÿ!Ð Ówt¥¿ê{ÑòL¿©K“x¦Š"ø½8 úN8Þÿ g gÿ•sËyöINþ,›à³¾J¿ÃÜòO®J9ùÔÉóÛï;éú«Â)ÆA ¤tAþsø»©œÞ+ñuÕO(Ѫ۫;ª ƒ-½2ÒëáìEÒ[¢uOÚ²™éû?œ[Ï“-)&4*içã|½ù?òófœñaœñ×džn9‡@ ÈÏr (J2 Ü¡dŽÄq„þBx á%„/ ^”2ècðÇ Á3ƒgÏ/Üç ,X$°H`‘BU -)´¤Ð’Âs Ï)<§ðœÂsÏâÍÀ‘#GŽ 82pdàÈÁ‘ƒ#GŽ98rpä>ïÅq pv7Š (G¯9ö± õ¸Ï™(fôí&žŠÕ§b߉CSx¢G¹Öð‘¾`ú.(e+ƒ¾£Úè…^3sÓ  Ùãp?ôÝlWDWGAßíÁ±x,öÓ¶Ø ²èÄã¼+e­~nuºYt ±uÃã”n¡ý„j]pGQ;ê÷g¥˜<OÁâUÖªy“žþ_›Ýb/é'ÅC±ŸÐ@ÜÂÅqBÿ¦Sõ„þégØQ<”Såd®'Nâì$VöUÀ@?' )%éS¥‘~3=-wÍp_Q†žfôO¼v€Ðì Êd¹¤†®èWy¼¨Å3eóQTTrë­·‘^8­:×?¹žÉÜJk×é{ë¡ÉàœÔ)ÍkåÈ:[i¬áÏzH¯´“oG#z`©’ª7j¥¡ÔƒÇâ$—”n³|­“n±N½Á‹R°¤xì´Þ ;Ú»…KJ‰AÐN­u|v”öÈ"Ú ƒÎÍ6™Î…Ý'+õÞ(kIÛeÐJí„…>‹ÞJ^vÖ9Å«Nâœ4©–~ìªF'D‹ûÇA¿]å®/ë¦þÞÈZ´o0dû´¶ï›V}ò‹öáF}£†U_¿[qÙJ§Ü¾Ý ¥@¹C¶¢²7§B ¶öæT(J€à9v¼Q΀" %@)÷¥(Ý„ˆšíœDaâµ8Û˜;q„8¬–„evV!?fô%œÙ )ä8rd#²·šeΪâ Ö%NK”n€GŠ\¥ÈU ÛÔç ñ¦>rë1ä>¶5;a¹SÈæ™PŠu14ç@)÷çÆr—gò’clƒu`K\DqâmmD,²¼ %°õþ¼E „u1l­¿„ù±Ü¡³9âÍÝ^f^³ýâ¡1{—Ñv5·_-jÖù˘GŽ7‹0æOSæÏÎZægý.$°õ(ŸµdviÛw¶ýÕ¶×¶½2mr½0íÍ¿ì€5LÞÙ‰+7¡=Ül6—¶}gÛ+ÛºyÍpsssåÎÿ†Å@ ËcîòHyd.9ÇYŠrŒEÈ·GðÌý¹Æ»Èý w™Ïcðúu¶ª)ä×Ás Í87î\+d½p÷KÈYp÷³àÿž ’„ο«jÌUµ„¥¾Ö†!ÆP­¿Ô×_wi •8äËR Ü ¡;s)Þ^&ƒgÄ‘âæ!ü%^_†1?ë9¼>¨JyâmQífShI¡õ’3?õ)r€ÊÉò—zPš"/ lòÂàÏß7 ±e^ dØKŽÌÏz^r€JœfÞÖëÃlŽˆräÊß‘ƒÒ±áæò—CA¥¸‘y„ ¶ñ¸3üÝ¡¾mPß6Þy‰ü,îáVਾ&ûоcÀ·" ½-öÈßõ¡?“ðb?|íÆ‰Ípî³ûÁ¡',ÃÙÍö•+cÞZöƒƒƒ#õþ°¨zó9€ÒÈÕÁÖï ö<ó»ê÷#‚¾š#¨ŠÀƒƒvëP½žJúq®úöú…­>Âá/ «c Äͧáhm6©ÇùØ_>Âñ3ÏCQ:ÆÈ0êÙZéo¸NF8áx„ÿÇvÕÅÆqUá™qâ&®;nH@ ¬¥[5AµgâÝ‹ ¡-¨ Â&Þ¦nSo•Æ5ån%Þ@õ pÕÞP‹D H. …Vå¡ÿ-O<óÚ§pvæ»ß\o­Õ¹çÜ3sÏùî7÷Ü{Wn}VöȲU…DÖƒ±b‹)e1¥,¦”y;$Ãa`1¥,¦”Å”²˜RSÊbJYL1œ ÆbÆ(°˜RSÊbJYL)‹)e1¥,¦”Å”²˜"’˜œÅÊbJ[Li‹)~aÙÝ•XLi‹)m1¥-¦´Å”¶˜ÒSÌ“ðK&̘$SÚbJ[Li‹)m1¥-¦´Å”¶˜ÒSD";¸±RXþÜ-ŸV@KÑÒ´BZ­˜VB‹9|æð™ÃgŸ9|æð™ÃgŸ9|æð™#`Ž€9æ˜#`î)~µ§è¹ªÅV–­÷vê_^ÙÛ/ÚÅ¢]¶& ÷Ÿ{‡¯"ÜŽ¡Óé ýGÏ/¯,¯\|¨ß¤{¾ÿD¯|äÏA+h—n?<Ì¡W–/-õº.ôV®˜Œš,餴ö-õW.>¾|qe_¥wå¡åËKû¯¬õ ãqà!£!g†x¶€Ä´†Æœ|ÌÉG>?…Æ¿ÿüñL4Àƒ šØÅËÝ'0±ÊÙ½°zNDjâÃ¥þ•ó½Ký5Äy°ÀK€9˜c€¹˜K`¸Ã?œØ`WÀ.'ef2ïïk"ã7èÒœÊ.,_¾°ú胗zß.¦2ÕuXo ØoŽÃÖ |¸»‹ÓŽU,;Vá¸Ãzà ¿£ûqßíÙù˽áׄ·w-»ô¸à/ìÉÒO$“Ý}Œ+0`\a,ý&íÁîŽîþœ}yÅsYUÇÙ²:ž,Ôp““¥ C/”º=íCÐ ZC‡Ðt @§Ðtº…³&HZŠ–¦UÆ×i­ #è:ƒnB· Ëùé ã3ŒÏrèr¾º9íCãý&Þo&Ð)4ò51Ÿ¤Œ„xžãýÜÜRo)Š·Å[Šâ-Eñ–¢xKQAD+¦•ÐbÅŠ9s(æà}E©’ß(TÐþxº<©›¡>£jŒŒ]›±ám…GÇès:…‡³aÜdoáA¯<ÛQ @›ñP-À?m¢5ñ\AkhƒÐ¬BID^™¥m<1Y­æ›ù È!W„\ °…S ºçŒÉ„ß)1Q˜—ÿ(TBÄ 'Àƒ·¼Åæ9°Åæ=Ó7Y¸òøoAóß‚ž»‰‰þ`©Í óY‰ªŠe<™ñøfL“ðš€'2ÐFß<ÏÑÇ*KL„1S"0&ÅjNÀ=÷ ]ÞÅ£èVîIZ™¸!=&nDЦ1=ÀW1ªLd² }ZDdê+%3šy5ó™K[ô0OÈù›*KÛôpž¼ýkSiNg&´ zòmª.c¾ˆÑ#F7õ™·9SVžŽˆÝì?#±òt\ù°ke¦æPcÖN„¹„Yw: ðV„Q¨èë:6ˆÉF¹ÂÅCä©ÁËoZ­­jM¥/¿iµrª“šè曆¬ÁpΧeP£.Úà <™EcEg9G$´ Ï¡ÜMfðZŠp7Q?)xNÁ3Nۨɱ<õBžzaÄMì>)ö‘ûEŠ•ÕÔAÄ<ëBe‡ô0+OºPÄ=•ÓÓMz4q³&Cmp&BÖd¨Áw“Huõ>}¡A,]@ŒšêhòÛ‡ÄÍj CƒÛÔs™¸ ôVc•Vv†šl!k 3maïiqž¦ZX]¹é£fpÏ‹Zø¦¸F-|Ûv }œì¹É`ê%4ûz L´ÁL‹s4;}‹+š'KȽ>L 22»cÔÆ¬s3`Ï·Í/nVbyûž€¥•‹Ûb„Ûpdj­m"aömìà6Ú¨›v<9¾¦a9Çw1¬åÈ›ãûåÈof‚[h”#Žü9òçÈ»`ØX_ï’‘9ïšô(Zš0,´è‰i%´€dÁdÆémöÜ ë$#VVÄÓ.ÒŒÌÚŠX[Ï»(Ä>åcoôs>Á.é/ÐÃ謯ˆ§]2zÄè‘O+ EfxâEg1ï›O½ˆ§žÜºi1Ï=¹iÿêÉìÄØQg[ä–ȘS“vV¤#rNä‘u‘qgž¾ÈS"["ÿ+ž4ÆŽn<«WE}¿P›_ Šn·ì~ýEwó«gKý¥/—º}¦|íÞò5¹#úžf©ïúl©§ï C=q x9;2vÄy]Äs“ÖõþèLº®Ssžû„ó¢ˆ76Oclzód=XßÛã¸cÞ˜ë,9µ[/¹Ù„wËÛv¦š÷_ïÃò‰÷áæÁCÁzöEïç‘-‘1ïù½ï½ï<å½ç¸Î”´ó"ë"["¯‰l‹Œ{ïÉï]ù½ã½ãLzo;³"ó"çDÖE¶D¶EnóÞ–vÊ{K¢9E;´çE<ï-i§¼7eZoJ;é½!ÖÞí_qü¶0NÏÂ¨Ý ãè§aL ®zÿÜøèîÚUïß›3§kÏesÞ çEO’Ýà7œ‘ûE¾%ò˜È¸X7źé D~$òœÈ‹"ã2榌¹)c®‹¼*rÓ™iˆÜ/²Ï{}CÒ\õ^Û¨7kÙïÞŸ£Bêß½¿úUï•BÿÍûS¡ÿ*ú˜èëÞ+ÇjNv»ðotŒ=…ßÝ–‰"qÎÝïçïïs÷óÏŽ…àxެ52 ’з"{Èø¶Ü—…J&Bc£Ò¨ãñ¿^ÄQl>&<öPnÄW¡Ýk¿Ì(>þ¶?PæßÀß 9 »_Gyœ;ƒ<~~ ‰ÙiD„'`§Údº´ó“J³^å%ùUùø¸¿‘åÕâ¶ò3(O:ÊOdWùñª/ò4ïc0=•£]2£|ÈÑÏ!ð¨­l1ÓQ>#eåÂõ p׃3cDYʯ)·`<“l(†cv”9rW¹P×XŸŽò.\‚¸—ábß&<©&ó?,øxÓ˜ŠŽx[|Oœ'Ŭ¨ˆ1-ŽKcRB–.Hƒ’$ HQI4î÷ Á­H03em”û µÐð÷–ô¢¯GlÁ^.a›>«!{C¥.k>¼³F_ÓJ˜ŽÙÈ^)ÑÝöÅþ-è6?rZ?pA¥Â>F+ŽûLÚIÓ±§‹0ݹŸfö­û®‹RÉ{s©¹±ÙÑëï›ç4Õ°ÕÏJê?CÚËý.ãÒ)æô3®M¿^V+N?ÇXf3ã:ÝÈ,~n-1=2kº®íãUÎ!;æ˜s’ŒTÆ!U’îQÀå ?pÌ‹¡çr±碘q-oÂ2[œ¹¨"3ÞEõŸÌa˜\Ž3ÉmtÈ™Ãä6cè,GD&Á—áÁ—8²z†\ ‘ÝSd—gŠà3†Lü脉£ÿßR/é:Þ/ºµŠU׬ªfÕ¡Vé—÷6St{CU[5—TÉW7j›Ì®×©«ÕMZÓLµU¬œ®°pQ3[¨b­8­ŠQ7ÛE£hi릻_^œ.¼’k÷4×ôâ9ƒ-²Á¦Y®ráœp…Ë,Wå*°\e£Ìs!¾Ç–„JîB%°ûÂÐ ì×j:ë–’‰Ogùæ-fS[é|>stream H‰¤W t–Õï»/YD–ˆ!l!@ØÂ"„a‘M›`ÉŸ=­ÂR²«€P-EAEÁ‚ X¥BÕ*¨¢U\J•²•=! Gzßâ„¶§å&ó½¼7ófæÝ™qD$Df$¥÷Ða‰µ}csåŒHÕ„AC[Æ…Œj‘Ю OËóŽ<ðåh~Ï©™˜V\¹üä´OD½/âw&³0+oûÔ DZlå÷ËY¹S3㊢—ˆ´ã™˜³Ùžôûów©}i¯}6O9+øý(¿£²óЦäø'ó{­H•!¹iù:`ŸHn‰HØsyž)…Á™a§Ef>Åý‘ùž¼Œ'W¬?Çïm"uvL,*>½¦£È³´P8!£ððüí_ˆì§ýIbc­"Ñ2NÏOªø‹áŠÜ¸!>üáˆË,ñÉÉÏ)’ȼŒô‰ÎÌÉ÷HLnN–Gâò&fIÝ)*òSÂsz’š+¾ô"õe3Ðò‰ðÙà?%ð‘ÀM‡‚š…, Yò¦žtèÝ•!{ÑMÑmp £‘‚Td!9‡‰˜‚Çñ~ƒgñ<ÖâE¼†7ðÞÆ{øá/ø_àküßâ8K´¸Ñ­ÑÐp?º¢Ð½°‹ñ4~‹•Xƒõ؆ױ»ð.vc/öãü_âo8Šïq¼nš õÐÑh†Vh‹ËxK±Ïa5Öá%lǛ؉wð>ö`>Æg8„opßáÎà2mÔ«t¯ÿõÙÒõ‰(4A b‡öˆdÌÂlÌÅ|,Ä",Á¯ñ V`^ÀlÂï°[ñ*~?àøþŒqñ9¾ÂaÃqœÂYœÇE”¢ ×p¾ZãÖ}›—ß8=1aæñöOòþ˼"؈—±¯ü‡Hþ‰s¸€\ÁUüÀ÷ Q9î;RSZI'é)Óeµ”ËŽ¯êD8QN¬ïôs޹ÆvSÜ î#îž1gT«Fí;ñ“P —ºÒPšH¬´E®C<åyŒ¤\Q”ëðåKmÏ`ŒÚ0|­zýù½(c žDy‘ï9DÂ$B"‰œtTË«Í_¨Í±j3Emzn³9Xm>¨6‡¨Í¡jÓ¢$ÔVªF`cI«ÐÒ+´Œ -³B›ªÚMÕjµZ7Œ•öÒ•™ì'ƒe¸Œ‘T¾™|)’iìqså YŠ`oºÓõç:<ÊŸGøî§UèJùºQn@‚Þ¯»zH´¥qgkÜ9÷8{¼%”³p…r6®RÎg•],òÊG©î(Ó×tÇõÛv䪇<õ¯ îXáªê±‡Þ°§Þ°POþRONГ½ò”¬{†ižl‹ôw•kÛK­%éÎIj­X­MVkS¼¬ ×ºŽ°u¥µšìaMÙ§–²S-¯Ô«>eo:¢Ýé„íO솑è«gE A¬Uöm·¨.®{½)/¢å%ô¥¼Œ~”%x€²”6ˆÕ®Í.…pým-=U›² utg„µP~ß0{ 5­5z†{~¨Á»8åÜÀìFóÅLã YÅÅT'×)vf8 íÎaç¼ëºÉÞ>M;ëÓ´·>MWëÓt³>M‚úôÞ™¢;=º3Uw¦éÎôŸngld¥æ½ÝÍ• ]ÉÔ• [™‘8‰÷~Ûö··@-{ Ô¶·@{ DX«³VQõ(ëâWš£™Ôð¥æQÖø7RÔƒG=¤ª‡4õ®2ÔC¦z¨¯¦©‡Yêa¶z˜¯ì‹›c¿U›[¡-¨Ðªæ9G3çjæªhæ5sA?Ëñ=º³®îŒÒtg´WŽÃ5£µ¼rÜJWZëJol±'H’ô·7`ô®F_E£Ôèƒ4úp¾–F_¢_ш¯jÄw¶xZ¬«£Ôb#µ­[©ÅÖj±T-–©Åkå9 åü™Íù3Ÿóg§ÉYN“‹œ&eœ'×ð{‰OŤìâlQ>"ÌR$ïÀsõæ$õ«ôå_éËΤ7à`„ *ªq FÝ 9 ›ãÍ8 cÉUZq&Æ‘±´ådlO–OžÑ]*˜Fw$’mô$ßHB àŒ„ÁxC0”Óz†cFb"ãÒŽÌ Þ3¹ÈC> È€Š0 ÅäAÓ1ƒ³w®F¿€sþq2›…Åœ÷¶óØiüŒöŸ•ìâϳw­a_ËüEö¯ä›Ùµ^!ØF>ðYËr‚·È\v‘¼Mþò.ùÁ{d1»É> —ÙK®ðÍr­9Ͳ£}Æ™þ9y×!Nö¯È¾¾á|?¬}î(»ç·œßsÚÙŽw’Så4»´­Ô9öT[-ö@2€ÒJUs¥ƒ{/Õq/»%”WÜ2qàk‘ÁJøs>€uaM‚ùB8ýÁÚØ PMçuöLáìx1X—²rOc4£l¶ÜCC½£ÎïÎ:1X®ôfGul¸Â*qe°ÎèdN ØJQ¡Œa X+Û ÒtBgêlš¨SbŠÎ‡éœª.+Å¿'X-‹î…D6X­EÔc)õeXFýi,§\‰u\YMÔ7c+å6lçÊì¤Ü…=\Ù‹}Ôàõ£œ@`~OP?‰“ÔOáõÓœ,`^¯—÷ô›˜%¡FLnãcŒñÃÆ×„˜ê&Ô›j¦ª×îdîŽ0÷™:¦¡i`ê›{Mmiš˜z&Æ43MsÓÔkw4w·5÷›6¦‹éhâMgg:™DÓÁ$™ž¦»éezXÄÚºÚªÚšÚŠ²’ÕY£Þ胾èÇÜ{#6ö®ˆ ¬ôTé+˜ÿ'߯ÍÉ“Âh§ÿ¥c,«Ÿ¥è,TTNfÕ½1y ‹Þ´èóFÝëäáuq]ûYY‹'‹!‹‹ÿ1qî%;ËÝR²»#£g~e40ŠËãË1a9d²=0#–í%’íÁþµD=IQR–É%J (q™©aÔ‡++«|ø&J²”/ŽWNW¨ül’¢dŽN;‹‹€U<ËlQg¾ (7ãU®0[”Ì%3¦hø¿eÖ(™7®0sŠŒcŠŒãÊ ÏS^¸#&Ú LMfjx­Er­¥‰5-¼Ö‚¸Ö×ô1½•/]"{â ³ßÝiß¨Ï Ÿ6"N½›?k¦[ÝÇÇõó p]בiófèS¦-þP_@/‘7®ûTû1YÄwã¿H/ó¨(®,Œßûúvµ" *¸ buCµ .Ž £hÔIf2“L&މ׈KÀ]£ÑŒ¸¡¢†ÅÜEÜqW÷ £vÓ4"Šw±žKëá=Iæy}^UݪW§ªuîw¿+†–••¹ÖÞLV®òЭ G|T%ÈÍ“ŸÉ "ᜄsñ'LÂ4´c™è.މl‘k@C¹Bú±úÄpUH2œ!wêJ_Q/Š£…´ŒVÑ6ÚCWé¶1ÝxØxÇøDqWê) •6ʧÊ`e¨¥ŒT~P¦)‹”ÕÊ%U9¥ä(7”ß©¾%ª‡ê­úªÕª«¡j5Lm«vT'©«ÕujŠÙh®i®e¶˜­æfæÏÍ=Í Ìë-¢X<,5,ÞKCK %Èò¡åK?áçégÖ@𻿩yiu´úš¿ÖDk©…iC´ÉZ´6C›­ÅiIZжUËÐ2µ#ÚIí¬vU»i ³†[;X{[ûZX‹ªÕ,ªSô~±(®\¬ ]Õ[éaz[½½ÞQï¦wׇêõYú½LV–Õd ";Ê®²»ì##d¤%çÊùò¿r­\/“eŠL“9òŠÌ}üªÝ«¯•ÊÒ²2éú6*$ºˆ'b*žÆ—L<‹‰_1@ñh&kXEȺÚzÒ<ЧŴ’6ÓnºBEÆ4ãã9cñâf%\éÍÄ#“x±ïdßDÕ]­©ÖVUñµuñUL<ù-⟙{˜çU¯ÎÄëZ|ßïméç"®þñO*ˆÏÓµä â'˜ø&Þ¦‚xkDºˆ{…c1{èÈÄëï1ñpý½³þ…¡×côX]ÊJ.â-d;ÙE~){2ñ¡r„Œu_ZA<›‰_câa.â“_/+àDˆ+óbÆ™†¦evq Ôƒ3`>w#%9Tž#¥A¥KKøp<Œåþ6°k“¹Ò.ÏÉ“Ò)/ȳå+e‚\ÄÛ8™Ä¿89IFËÿÈA2Tj_\·¿NTçTç‚üÎhgIþzçç.>3gŒsbþ¨¼ˆ¼qÎŒ‚ glÞú¼xG¼c¥c€cmù}yµQŽ^;¡{g{'{˜½µ½•=Ôl´[ìõì^v´Ý·ÝµÙ m×Ëï²eÙöÛöÙø)¶£¶5¶T['[[{›¿Íb3Û|}øHÝç¥O¾ç¾òÕÆ}¦µ¦e¦¥¦%¦Å¦ƒlSºi“)É´‚››‚L&7¥TyªÜSn+×§âP²”£Êa%SÙ£d(éÊNe¹²TY¢|¤´5>3Î1•ÒrÁaðÖà>Æ5ߊ ]*â¥ðƒkán×þÊo^Íây€¦Q -z÷*Í~=oÐèòIcßD#ÿè=Þ¹ócªxî ÿ×ê&ÜQ¾}&âí·ø?†VA4L¥7aÄÂ,X`5xB Ž)ÅðæÀB˜‡À`9$ÃcxO`%¤ÀqÈ‚MÐúÂ<è' ?ƒl8'ᜆ[œçá,œƒÍ0îÃ|¸à"| ·á.Ìä,ƒa( aßAW•á0Fq†1PĹ4ÆÁ÷0&À.H‚IðL†áüé Q   ƒÄE˜€‹q ¼‚RTЄ•  —â2\Ž+X3“°2ºatÇ•¸ žÁs\kp-®Ãõ¸“q#¦à&ÜÌÚš†[p+nƒƒ18 ·ã܉»p7VÅj˜ŽèžXk€ò±&záÌDo¬…³q/îÃýxâ!¬u Ò°.úàa<‚õ°>6@_<ŠYP/á:`CTÑŒ<†Ç1OàI<ÅÚ~ýÐ5´âY<‡çñ^ÄK0±1Ü€BÌËWáØÀ?C.>Àb|ȵø>Æ'ø Ÿã ,Á—„:J|…¥Ø„ë4B±9P„IT•…6U„»¨*ª á)ª‹¢¦ðÂfÂ[ÔÂæ,j‹:¢®ðõD}Ñ@øŠ†B³…YX°†? þBVÑHˆ@ÑX‰b¦±šÑC<0üh˜Â.k:»Ò9ì³Ê{ÃvZIì­66²·Je/ºƒ}Õ^îøŽ²§:-й»ËáŽ.—T!÷÷Ø>t¹÷Ç.ÿþìƒo JÄK¡ ip3T1¸s%Dþc+Ùc¬¦5´–ÖÑzÚ@É´‘RhWÁTJ£-´•ÈvÚA;i×ÅtÊ`?’I{ií§tÑa:BG)‹ŽÑqʦt’NÑi:Cgé§ t‘.Q]¦Ÿ¹ª^¥kd#;å’ƒòÈIùt èÒMºEEt›îÐ]ú…îÑ}z@ÅôÑc,Àô„žÒ3zN/¨¶ÀVƒ-aì„ÃXÛ`;ážé L‡§xK ‰ póp ü„í`.¶ç:4Ÿý@ŽÝ8ïá}Ф(šLÃi d}ЦQ4•ƲÆM§4“•na6›æP,Íe°€Ø!,¡¥ìÌâÙŸ-¢ ´œVP"% ‡ÈN‘/®‹qCŠ›â–¡Á×ÕÁpÀz­Àk“ÈoÄ; à dTL•*»Uq¯ZÍózš^ÞµjשëS¯~߆ªÙâç¯Y6jÒ´Yóà!¡-ÿÔêÏïµnó~Ø_Ú¶ oß჎:ÿõÃþö÷ÿÑ¥ë'Ý>ýìó~ñ¯/»ÿ»ÇW_÷ìÕûèÓ·_ÿ¿1xÈÐaßEF 1rÔè1cÇÿ~¯ìWiXT×þι÷ކEQ—;^Api4R£0Ê `A#ˆÊ(¦ŠKµ­% ⮌¨Q$Æ­ŠVѸÝQL0.Ñj,Q§ZH\ã–Ôš—Ú>Ä>Uîé{G4ÚÿýUæ>3söóï|ßû¾·`v᜹óæ/X¸hñ’"÷ÒâeËW|°rUÉêÒ×|´vÝú ·isÙ–­¿ß¶½|ÇÎwI»÷ìݧ{ö¨8øÉ§•‡>;|äè±ÏŸøÃÉS_œþcÕ—gΞóþéüúsuÍW__¼tùÊÕkß\¿q³A7¨âUÜ ŠTqƒ*nPÅ ª¸Aÿ«bù.h…ã¿”KÀfq³þû­1}w)بƒT¾¬ñÖŸÆ‘—uBÝ|>¢xɉïbẔP_k pÈ‹ì_@«Á þÈ|‰º±,`NÚ¯P4 *­Ay)(TH^ñ˜]2}ã;£m ê§Xâµ=ôºWŽ &äX´ò¡^ÿ)ýë¯Á ÿ\ ¤ ZHLj½I6àÒ, ÖFäz1Y\! µÂÞ±MTQz=ðùiˆ\ 6aæP`Ø*ª`]e—üeÝwÆ|1ET“Pn;0ÇŠ¬#¥‹Am(Ž(é;=Så¨:a\¬Mý±R!v]‰[¾@™ÕÈ‘ àL´gÅUèîxÌ-æI@ ,‰íâ­¥óÒ¿I¡JÆìl`ðx`鯩ÏnXùˆõd½˜Ûùhäd)?)•ÈòlÜL!fôìÂl,• V³jxkºT`ìQqÞDrPÆyWপ|V_¡:Æ`Á86…°õÀV/»ÍOI™rŠüƒ'yÜ øËJ¨VÈÄýîELÂìÛØ1¶¿Ép¾y<çK=¥!Ò(i–ô0á+y„¼×èi< E™8".ŠkâÖ ¤K©ðt&eÀK[°ê `ß?€—Ød6­º›(~„]dðlbµDúŠØ†X?m[Jã‘p§x†óå‚å– Ú¶ÒvD\V»É’YKg#™ +.bE`ˆ“ì>ð2›”"¥_I3¤™À°Z9Bž!­ä£ãè.~‹—ˆ{°ÕŸB©7`&½ Ž› ^Ë—ÍDD"§Á¹¾gN°{~J‡á—[à´Zp”É1mYwª[gp¨ÔÑ¢‘mD²Ø'NŠ+â!2W¥Äå`äÔ,0ùnªÄME^À]ß?bŠñ:‚‘±l6ž^_o`[ñìDäì;VÂëGÀ}_€³.²Kì»æAð‚ºÁâl>ŽÏä;øQ~’Àëp¼³DJ}¥<ø´ü°g¨–KOðöÒBޔߖóäUÀîÀاJ²2Hyßh)¶¬¨Gï«b†9xO¬Ï™ùïÄÛQ,2Âû?xŠØªbÀÂuˆò"ó}¿çÝç¥dêëCÔ‘>ËéËEW°¦´nSx$Œñw¹­âÜÈ¥Ë"ᤔBרRàF ]e­h½˜$z"½Â ;@GSú+í€Æ9|h´o}-=,L™¡ŒU2”T%Qé­ôP¢«ªø+MÁ¿×ÁàÇ æ!w»ÊÁ²Ÿtøé"Y*M‘I RWÄd[I†²xÈÿÆ¿á—ùq¾“2V^Ub­"ú‰Þ¢…aµÆIc¯±Þ(5–ã­qªáª;…w¾šgžgÛØu—_'Øã)8à·b¤H?"ßZŠÑϸÄVàŒЪw •«€@ÐÝÓàñT²ñ@Õ‚íoCåƒïv ÆÞ' ·dÒ;¸ïHdæüúhÌÖ–£&ᮂÀ ðxî$›LuÜ L{Šv‹2iÖðø’¥œŸgª±•:e&ƒŸR¡D㡪ïÁŠŠºuØm‡¥»²ì¤ZËFé©-uÄða™C3Ò‡¼3øâûõ}»ÏÏãz÷êùæÏztïÖ56&ºKTçN‘µVµ}»¶mÂÃBCZ· nÙ"(0Àÿæ~Íš6iÜÈ¢ÈgãÐ’\ªéÒåH-%%Ö¬k9hÈy¥Á¥«hJz}Œ®º|ÃÔ×GÚ0rÜ´=i{9’¨}©olŒêÐTÝk×ÔJ62= åevÍ©ê|åA¾²é«4GÅjÅ Õ2Á®êÌ¥:ô¤ü n‡ËŽõ<Íš&j‰yMccÈÓ´ŠÍPÒ[kS=¬u<óxkG§ÆÍa•¦Ùz¨f7MÐ¥GÎX}Hz–Ãnµ:cct–8FËÕI ûGû†P¢oÝ’¨7òm£N4CKUOÌqwqe庢ýÆjcs²³t)Çiî}ízë ù©ŠÅƒ³¿Ú.¹!U³êv/VõÍéY¯öZÍ_§k`.Hr¹“°u±éÅn0Ä4ß<ÊóCåi³Åõžª7ÑhÜï¹p!an2¦[÷‡…Ù‰[æPÝ™YšUOל9ö6ž–äΘ~ Ô¦†¾Þã |îMÏþõ¿æ¯ò^öùJ¾áf)5ã¥;™i‘6a «cTX’¥á qæO^¹ÇÄa>N†YúX\ÃD½I¢ËÐÇl7çëJD€¦ºkñþæÒܽ%§¾Å€$½ozjáE€¡ÿEYŽÖ»t1ã¢Q".6Æûê½bcò+¹W› âî£!Y˜æìÓ >·ZÍ[]Zi£\Tô9éYÏë*å†ï'[·h§Î]fÏñ=ÁÃÌž9/z^Nwiߊÿ0^½±QW|f÷þÿÛ½óo÷λ>ï¹µ}wËí;vÙŶ €MrGëæDŠUÂ|¨ÔTQ¡J:ªÐ&¡’ŠT•ò¡J£År¦Uì|(RòUPKZ>Dª,Y)âKm_ßìž,¤¶{s¿yóÞ›Ù™7ï½™…¡ˆáJ­Žïìy¥làÎÿ"~Ù’OL&'®J#zÛ¶SZ–|x]Ö¦ŒŽÝU6δ)&ΚRðÄï­+ÓFÕgØ(Ó“5.pE“ƒ¥Qƒ¯ï±°æ‘åÿ³S³µD{™Õ·ÝÚÓ4ÊêÆö¶ í Óó5X˜°-ÅLLn4<§¾O5|ŠáVÀ+ ¿bLºC™í R%#PW pëHó‡ªwârMªJÆT2KEXÊ.UŒýî†W¥h7ÇâLô›ƒF#ª˜¯,WJÛ³ÂÃ%ªæQèë9]ŠÁ+FФ;•Y1Hg4ßZG è™Ð ð•ÿ=Î,QÅñ×2jÏÅ̶Œ¿¿Z©ÑȣŮªÓ¼2M£m{ÌWðf±†‚¸5žS¡@”ÖNY‘)[Ýžz`6…ù±mý}I II©$àP§”ê†Jc8ž”kÍV«N³ªi¦®HTܨ™4&3Tš’âê©tcAwŽ’Fc4)6ê#ÍÖÉ—’ŸḻlgãøH}-H›­gãÆèÏkà—¯à2$ íº’Äg\!øÌäáêtfª: wõÝõ]µ+= «ÎI“ˬsiK¢-4Á³ŒËÅçB'M©Íd˜í£MŒLžk‡ÑÑ&cñx“O?úô2?¸8Ñ6’p8—€g·-±Èã°/±,s;mK‰®‰ ê>þqeïJeÿ¤²—_© ½²R¡ÿ|NÊA#Z–Ø…ebGÿF’m®¿]ý”݃ÃÈTƒÂ]„?CÌÛèOȉ7˜_ þìÊ[‚Ê?™~´È/¢ì #b;’Ý©baˆÄ¡Õ/cé˜âÄá•;ùîƒ[<úukÕ²P:O¼híÎ€Ñ æóóþ'‰qäñz›Ì’¢p0ˆ¼B¡.œÅ þÀí²|Á Ósܽàfܱˆ 9;œ¬S ¿3‡¿ÌõNW`Z•`)‹tÖ>å&±"n¶>%uL¸°®ªj ‚#X* ¨§íoÜTº‡¹‚¢ÁŽöZØòªjì(±¯¯^‹líQ·ó¶•âŽñë·—{vl©¤;s°+·[X–=‹¼(ŠŠÄÇλ‘yÎÃû°¯‰»ˆ'4ÄÃúï8Dá|n X3Ý»8ýxqé‹ú"¼;l½pp«ÖÙñÍâƒ{ö¤f`Ùò¾}eø¯¤Û\Ô7ÇÁkpéß„2è+›“oùn¥ØçåÒgüìêŒ b,¾ v¡mlâOŒ=»Ä—KôE3}N&êêù#SƒÏÝ$S#<ÇAÒ¿À3üç}™ÍMæyÄÈd¢,¼_TÉ›–ýUêq°j…ú†®ª`Ü #°ÿGd°«×ñ|oÀ°9RJZa¡`G0dr·ÔÍ8zÝ=ÜIf°Ø’ÁÝÁD!UŪšçÔ)<¦‡‚)Ó>v­3š`"‘°Ãát$eÓhö­ÚÐà`±XH§RÉäû;wèãøÇæË}/æªçôc—Wë:öß{}ǃJù—?¸{›íÆ¥þ/©¿z÷µ—~zë'‰li ¿Œ“oÍ92vâØ­u,¼ÖØÏ?A/0xÔÕÞ¾‚Öl}}½\Ì å"×É{"§ç À ÚŸµ»kzÅH4.Úbш˜‰*¢-”#½å¢#Ý P9“€à¸/H¾œçйÜÙüYí2ºœ»˜¿¨}Œ>Î}”ÿH›Gó¹‡Â’À¿œUû(¼“¿¤ý.ÿ{í/ù/5Ïèá¾x/ÿ7ÍŽ\n×çpÿôîS‡Øœè’$yIŒ7ñáléÞ-µ¯ ››·¤(ÆZ (ÐZ >ŽùöÊÿôkŸ<÷4wíëA–Ö¸îĘ˜Ë'óÍÖë½Z!OmY([µ> 5sŸlİ ˆQ¤íѰ&šF@G#  QMˆ‚BTÌç´(ΑÉâåÎ!ZC´E󚋺`ŸW´ÐYˆD&ݾ!^ÜçêM§Ýn— öðál½hV“VµßªF­ªbVWwí.К — 6!,Þ® „Ç‚3,ôS›&ã¦pGpõ`P Út °—Yº¬°O§5q‡¼z6«g™,¢°tRþBfÌË’œ“m2ÙR”›øk„1&Ð è‚©¶Èsd×H#™¾Â9wqYŽáÄ­·>´boF¥Ñ§ª4 ªÓ3••i`ˆ¡RöÄ Pæƒ2üVžTôÇA¦œ•J¡Ò  6ÉÒéª:sú›§„5R°¸â`vOUçKñ{ãà·ÈšV!•Í@„ÎXÊ}MÍ«ÉQ x’äzŽ 4„H ? ,DÁbõ†€(˜Æ‰–h³Š|T  ÞP9 ¦†Ÿ£BŽªY©þ™§So¿ä¾è¿Ä]긹':3bqOø¦™Cö)÷w}®íÁ´—¦Yw ÉT¯¢X< 5ñw9Ÿs¾HÅØ¶Z~±w®{ÛgÍ„á‡T<€EwÊ®„<áÄû=¸Ó”ÀÕá ö`ÎqD{ˆ¨¹°e>3c%»Ó© ?ÇbÿÃvùÇ6qžqüÞ‹žíókÇvÛ÷Ã?bÇ?ÎwIœ1wíªjΚ%  RLtS¤Nƒ±5Œµtë$•º¦1´)ÝÔ(´Y€RI¨[¡‘Ø:2E4@#šTHUHœ=ïÅ.Ðqʽw÷¾w§øžçù~¾O.˜¼_Ks›áòØÌ™±>;3ƒÖŸ¹2¼÷Ê•½ÃWèï•o–_=†R(u|´üZù¿ÇîÌONÞ¹ ¿|hëÐÖ•FY­î×ñ±Ú €=OZ¾/ìzŒ}H‰œ°Û`·Ãn%ªÄ­Jõþª.UgÃ|Q ‰i*–‰D3È'` ¥3õ9?2  ò!91¤„´P_hch 4 Y‡Cï…èP@JëåuQXÄ ÖpÞˆðÆ13 œœÂ5"F¸>3ž<üކÁR©âÆJ%Œ®9ufêrÑåÎCñ¥ *¿±]ãIž8‘«1%‰jÃÐLÅPœ‹Åª<ÜE –·åk ZñF2mféhbÒ ñ‰¢[êyûD·ªE‘œ£óSŸ'…‘Ñ}÷¥ß¾ð£ÏÐÁs÷36Ÿ…„ýäëúºž_qfûêoþTÕ‘:‘*ÔœÑzSΆìûÙš/¨»ìü%ÿ¹ô¥lú¨pše¯âOù«Ò¬l•öÉ¡óxš›æÏ æç²/³{ðé—ò>v›ûØ5Î ÒFv‹³_2ahë´·¹†‹apËV™‘m²]vˆ.Ñ-ÖŠÑ+úJì*¼Z*É[ÙÍx³´Už`ÿ"ŸBçþ!œ–ÿV¸ˆ¦¹ÿ— w%ALˆbRL‰i1#+r“Ü,·È9¹Õ®$”F%©¤”´’QµImV[ÔœÚjW­*£ÚT»êP\Š[©U<ŠWñõZ{™^[¯½×¡%´F-©¥´ôãŸ;éŒe¿ë\“}9ûzÖäœXZ8’5`ƒ<¹´ˆ\ÐxÉ@Iœ¸ °¼ÀrrVBœ¬9®€X¢Sö£¹’ÜìC¼¬˜5Žã³ÿ_Æ)†ýåtÀªsEW¡@=rù¾ù;ñÀòePUôhŒ/C\þÁÈ»P;$XK³"ËÙê6¾( ,+nؘqzNcäAH’ žÂ4&ÓNöpœ,H’,2í¹x®­­F™:ŸÏb1[ØwÑ<ä £FèÝš#õ¡hM¡Ëè² h‚r¢ç)‘’)<ª4æJDþ…Iz7…ѼÆPœÂ}ÈÕp_¬œD}BéýËÜíô\:P¿¸Xòß@RËp\ìê‚> ÏÜ^Ô/÷‡{X ¡‘àœùýU˜8a[fâQ§fù,ÄvŽ”ÃØ¨ŽŽ€–¼šÕa¦Cšu¤:g`ÈêÔc\ªSÓoHŸ‡ã}h•`ÓJïàÉ qå…y…NX2+“༠;ÜriçáŽK‡qþA‚U 5ˆOW‘eñhO˜¼lA¨BE]SLæºöxâþ„ÉLÏ¡g µûzQíì<;•ïT»¯»Ðªòñ®j÷‰nÕãN“µûx·Z褷–Ÿ×M¤&§Ëeº3MÎ3èwh7‡† ( ¹üW¯ú]¡˜ñ²>üÐâ>c¼¼(Óf Y$DÙNC=;š¿I”v_£ä®è1q.w]ž|fPlÑ>•!ƒ• AH‰ªÃ%æ@ÿÚäKƒUƒ’­z´J ”ÃRÈ\Õ¼ÑÈ@5¤8¯?ûôÏFýéÔÐÓÊ3ÑT¡ô«òüÍ ØÕ¯Öl‰ªÅ_t¯ô»ûƒÊ›?ÿñ+ܳ2õDaý³/^¿€‘TÒÊ¥ ³Fà!…4™±YX£·æ6‹°Mð "N‰6Ù+‹bêBüBêFüFjÁµ(.Äœ¢ÆØr)=ÓáD‰Sõ+?œµÚHPktD-Ô}“÷5ùÅs¡`€ø½j%úù"ó’ÅWËS‘p­ÙÂ4†6 ‹`…ÊÒœT?@ô{€2 $2÷â ¸ÜÜÇø&^–“ÄÆ¥‹{+N÷ÒËNÐ@¢¤ª­ÑQ†`À÷ÀÒù£ Öu7T‚…!æŠ(îl*fn×.ª¸j»†“)›=ekŒ’v!Šl Â]ЦTWŰÇ+z#QcØ«^ßW«$è%D„¼Z[Q½ ©åàÖµV”¼öA£^ˆ5¨ª'÷}çzùjüWßþoéuß54~ðÕ‘ß]÷Ž“zjN¦íôŠ75-å¥l~aÿ o½µspd¢ý8D{+TGÅÐoÀÙ¸'<ïOÿîjâ8Ã;{ï÷Ýúní½Çî­÷n±}o{‚ÏöyNB ¤25…¢@I±©hHçEÒB ªJC©W* Q© µ ØHi‘¨T‘V„¤b¤D†ˆº Ä¸¡ŠÏýgö 5¶öŸÙݙݽ™ÿÿ!£ x·‡Em#»ÕÿWóÇæÿˆpÝ|ÃCø‚½cþ‚ûÊÿ¥tWñÌ5·™Yn³sÕ–ài“ò ¶_Ú¯ü^:¬üWpD,&ƒ£"&"+ ºFÍJ•“P­õY?´²·­pñ'8Gò´Ú<Xa±Od÷‰HBU8Ï`N!†:á¼Ä ³’¹À¦°Ó£¤• ,Êe™·e¯Cb»˜0­Ä¼Òv™JZx¿Ó®9#¨Æv€èÆþ ¬ä¥Šž ¶ì§V!ÄÛ·ÒtI8þ”$ ìÏŠ êÀ¦ "ú»z‰§ Q"ä"ù ƒþ½…¦­ÂÑv fyÿÝÕ›H@ò•á骀¾ˆm¾Ê¢”„  M_€– '@É!ó´òË…o¼Ÿðx€¼°7u*úÛ=Ûß{D¬'Ö”þ¶o²t?|îï K3ÑO27?y0‹Öu~7çoLÖ„ã ~yÖ4t<µ|ãÓkV¯^Ñ º êßÀ„™³Ã@Ùï:\-,Y¹t:m»°›ÕMWáÌÖ§.ZˬËé°ë¥þ 5–ë;àŸ¹jÛ3l‘]ÉØÓìjØÕ÷±Ë=¿h@ðz³ Lá¸êgXvõÚi¤eDýY·ßà"OÖ‘·i…wj(Àb±ö…Z1¨(¨Î€’¿WVÛ,öøòN’ª™j#qò-RS&ßåË¥]S­3f }Neš¾Ê0&dx‡Y`XùQzÛ|4r4y&2,žI~9Ÿ´r²åAECd½ä€¢qÛ¤méç¥çÓû¤}é~©?=*¦í9ëè¼Ñ"[$£mnm]C`´¼®þ Mï±ý³1²¬í=w«ûÁ{Ä0>888¼d¬Çt_òÿŸ±}™ƒœ‰8€\6“N§NëCé~1 Zq±¥¹©©P¾: ¶{†¡{‡ÅT]Ye{lÜa·,0ç5-Ø!1`ŸNTò¸>Op‡Ô<ÅFí?Êßâ§yc7ßÃ÷ñûy#Ç¡ÛØ'F¥¬ÄJØï,Jd’óOÎáTx€JSó*}€:ªÞR§Uc7oŸºÈ—ÌQÉž4À¤Ò0u É[ Ì£æû ÈSøMa´p­p»`º@;z3 º½€›‹Z·.Ð } Û ·tô–?½ÎU¾Ý¥„…Å2”ÿ¶÷v%–=¶fp[†Ù³Òo-å“I¢Ç:¨˜wÉÇòÚb¼PÅ‚B™æk›Mºš&ÉžL ËU 3x2'yò yò ˪Ÿ¾‚xœ²Û)Iâû¨Â˜¿x|Ù þÅÇkÖ/ZK§ Â.:» 3RÏ!šŸÐÞ#¸hUÄê ÇñMŒ0Ñj•±#†*W0‚(Ñ‘&Ý•Q«H–ÔKu„ ̵ͯäH(R½Éµ”¿›Iè*•|Œ#@Z(˜«ƒþ=€VÛ‹ºP€ÊœJ1|e^ôéŠÔ2ëüþ©^Ö¾²ñ©«4ŸZS—jþö¶u¸¥¥ãlµR‰çiWQbKrŠ~ÌNkkK±Ã°·1O&“‰æÎKùFð7ì«™',.mÐOÒñÔB½¯ÃéÍô-`Ñ]À¢ÀÌ¿àu§Ø!ó%ûe÷î£À¥ª„+¡‘ðu÷Ø»f×9á\ˆåÆ+> Œ 7CÆ+U—Ÿ±×Ícö›îÏ8ËÆª-á·LGlo;~çzÇcÙÌn2Ïþ}÷n#oöËNKl…—è;Ãx™(s12gØ;PÖ•ì7OIÖ¬µÇj°ÕÖ89¨%P¨ÛOìU{lEŽ„Yzhb0¡Õ—tò‚‰QÍßPoä-ÚœtÇ®—JS¯ïfv¿6½g/2¼üAÛú7÷œ~÷'?}xúŸ/½põÇ»Æ_Ûsó¹ ÷ ü¨ûÈ ¶[¥Uư>*£¡œ™’&ª§j§RÙ ÍlÙUö¤|N©ý8u£v,e–B^5ŠªF.ÕR2 ä« 2!Âõ±¤•±‚ÆÔh6ûØšÙÙû"óAöÑ™‡ÀçÌÕ Ø.T1»c 9¼#ìŒXªÌõr ˆË=‡¬²’âhgÔÀD½ÑhôZÔx<Š¢Á¹¡g‚AA`ÔÏ/¡$ÁÇx£Þ¬÷BYtZú‰èÌox¶,:):4Åé%r¢· t(¡*PŸ`¼ÿ¢UU   Á‡¨Ø ÕÔ‰J­Z­Ö‰s$Ô @¨‘xÍúJ*³¬5³¹8ø“zŘ‹gXøYJ”K¦CáT<J(¦dú}]ŒÒ:ÍB}Ú}Å,…$Ðð) giRDÛ§I˜$"]»â_G² ´’¢[à ÒÔ²o$Ù„žÜEx·t £ˆÛÝ'.=ôè?PͱŸŸZyˆõ/zý;¿z¢ùØ /þ¡·tœ2(XÛ¤·$—-}2tþå¤Ñϯ¬ýáÊöÇ~}TáVP0$ÛjÑÎSQ„šGé8ÌÛ½^ö˜÷˜ØÆèÆ6 j;±Ë$Cáˆ(EåêV笌rÀá¼§kŒÁ{Iô`f1µ5st¶¹*ˆíN—•óES͇[Û ÈqÍçRÜËÖSUÚžô ªu;†PËnÙh©5;cBAwZ»¡¨ÍûA+ˆa|É8_5#Gå¬Ü)wË=²Yê†úã³3bˆš›G¼cÛ»¨ Z1>ä;¥GD˜â^¾Q‰7਀TƒLÓÓÃãe ^Ö­˜<ŸÂx},Bùi|%@â÷Žò‘à%å#¡ !½:xWÒt¨ÖZþÖôÂÖëpsB]%'Žö¡UcH|¦ƒDÃÞ¾®–Žz-Ù¼|ëÖÒù‡Dì÷€¾M°ßmìŸqÞÆ™óÇç7ewg™=œþSúlú’í¢ýRnÌv=7áœÌøìÈb²Ø,sk²s3mµK2ÖÉŽ‡\;ãAVåLKíÆœa”XM>³$ÓöjîÜ]f}©Ø9“Ãà´eœÙJ‡ß©’„`–k|ű'û?¶«¶‰ëŒ¿w¶ûι{¶/vìà?gâü»œíž˜ .w Ä   d¡©@¡­€D“†ÐÙ–-ÒØDU1Q¤²u+ B"%À¥ Z‰ÆFZ˜A¢ë”mЮ‰÷½³Ãiw¾ïûÞ{~÷ç½ïû~ßï÷—?¡Ýiÿ*a‰øp²ÎgIÅ,²Ê•u’×éO2ñì}’ '0¬áxkš-k'øv•-)s´M+‚¦£ÃÝ«hÛÔæx¾«4Úœ½˜Î>SRãס&ááÖ”k/?ƒjÃhH·g-N–a^1rɸ˜LÆ-R¦2œÛûý'„â'EÎûOC’átàZIÑ(8›€#„:aJ©ðtÞ/õ?™RûºÊu"Ô oA×›sÑ…¢.-µÝnè†wð wm àpØ+Ð<ávCêã”ÑMî ÑJƒ¸î»±{Eé_Œõì¡ý$Ò°‰¨õ¡!dƒû¾9<{7ºª'0UÔ@¨&~Ó¤df²DhÜÚ€=.Û ÈAטFü\¡™Êà Sê„áãÍ4x0°AÙ„áSÊ]`€&L… "÷·3õï“èC&¤D}ÐKwa&™Zl4õcb‚ 1O´Áôв3ÌÆpFŸô@ô1›ÿºÒת籟îwtzðúô`šØÓ©'kV}…/òáöŠMÍgFKˆ¦…ð ¼â0x…Æ|ç4rï®Uˆèª¥j…Z*2#Å{´p€dsÏÈ€ámù}Ëma¬Åº¤vQ˘mŒ½á¼áv4ÞL~-pK…uÂáCáB‹-Ü­«ACWM²¥«ÚHqÈÐ@ÛWª•ÈÊà-üÞ¶9üz˜©Æþ ?ü¾Éß Þ ¤Ù¯r¸‹[ÏíåŽq£œãø]ÞyÕ¾t"¡ 6<Ýž>Ï›ž!Íã!M 45Axi¤EÆJPóD •0ùp¸oõ†t!ŒÃÜ2¡(Ñ”`v¯ÒI»M$DÃ<2êc5å´|:jUü¿@.Ê—”GüÀŒÿ*ö×äƒÊ ˜œå‡É ù=å2ÿ9/¨8]rH‘丒’³J‡üMeßO~"ÿTq®áב5ò:eÿÙ$¿¤à÷ÖÇ×Q®Uòü"R¡Ø—ªJr±Jìípu¨$²T…7$Ö@›ÜºT ˘·Z£B.¶á¶6+] ÷RÕjDëÓ]VL¬CÖsV í&î´µ„µi«un40ݲ[ÝøUàX`4p5` $ r*áJ%d™â@*Qè¡&»fà­··§‡ÖrSŸ~š ynÀ— òÀ®ó#¦!ÀS5 ÙeÎO•2«"’nü?î˜a¸—> ÉÞR$`ì-yµéÑ™†Êgš8V_Jˆ¦£û2O•„3sæèù¿çu¥áÀ‰¦yù¿åõ9sprúßjFÏŸƒÆ÷v‚ñ»¼žißL?´h2ø}¢.Ãö÷;[Íš;'¬Z3 ´Ì½¸¥!E«I³RlybCØðâ FÝ&öK–©fk½Ì;Á2 ¸œ÷"ºÄYo Ï8ÆíåUiˆÜ[F”«JsˆTÏÎæžGk¼¹^p÷2E|š#æ‘I¾ÊÉ•{O†òœ·”–Y–ãëu8¹w„ùâàmFPI}a8P2våŽjï– "p„ëâ¶AÀ¼Ês•p¿·à#$náÙ¡; G·Ãr2¶ß·»Tþz–Ý…$ø 0•½ [=9A`«ÉÄ$D kÚ@œn2dBظ‚l’4ƒóÖ¢ÎõAÚƒí.k¨[\:G‹ RÀÔ¸>^³nusaªÀ`ÍéQÏÔ"àj=½…˜T®($K¥B^ÍHÕø?x³EkŽkú™YÓµx\Öî+š¦çOaªÅN]ï¼ó2Ž™ØôÂÉÉ®²í;…<ôÖêmó©>y鈭xèë¶ƒŽ ð_\t\ƒS`§¯“¶ƒ%¤|ê°X¯ Mô¼B%>‹íh'zýÝÁw˜ úØ+ñ!t_Eƒè¸¶¢tõ£OÐëÐú_ÁûЍ =®¡Åk¨(@¹ÍG ÌØ = ‹7‹÷á?;Q#ŒíF+‘·øçâgÈ z?žFGÐ:\<†ÖÿzÑ<´ý®€ w9ôƒâ-¨y×?GK€îGûàþ¨øfËè]ü-p»hWñ<Ý@!óI^´ö©³îU:ÿÇnµWU]áµNnÈë’{“ $—4„„$(HaŠò¦iHL‰…òÖ<0ÏBa¤uhmKÚN+jÄb…ÁBaÆ2c)–::E[‘‡ZQ;Ö,¶NgäQñô[kïsIÀÔö_ïÝóó}ö^{­o­½ÏÝj¬…[žm¿á‰ðd6ÕáÐã^EÛÏ{¸JÜÓ°x'U!ÒXs­¥ù4š*(‰3yàýdÚËϺoÐ÷¨³Òbj¦Fõ©Ä=ãžÁÜcô8½ÂŸp1âD}ÿÏàMPçu:%‹é*ÆŒ<Ú^ÛJ´åhÛÊùìç|(ßåÇù!Ï8Ÿ ¦{¡Ìƒô´Ãî9ø*ö7A±*z‰«y Ïqw“ƒK^æÁ¦Œže³ÝƒÎï±æj¢› y%X@ßòeoÀ—UÕª;UȈ 3ðB1ù®¤å¨”ÔK¿¥÷ =ÂøáðrE•”ÐîN³û¡3Î'W¯ñgœŒ6O×ã×oNÖÇ]V§Qh3I¦áÉ\ú5TtÓ.ä´†üîkîkNÏÀnxï˸ŒðT#O9O%ÁÜ(”£vË) :oA;ê9Õ1ÅÓU´Lõô45znkiá^°õþÍÓi­ÈÉü²ô{÷ØMÅú5Ø_¸s/ó%ÞÏ»è$ž¯EÕê×\É.Í…EÙ£-ð£û´>”b—^¡±ôs*BOP'¿HKé=šÄÓùvBOÄ'¹8ÉÛ€|šwñ—8ƒþˆk>½^¥ Ôƒ‘{iü;œE¹ô!½Ãþȧ³þ¡í9>ÊOóJTÁÚ]\Œš_¢½¿‰š‘ßýÔùÒØû ļþîCkBû%ÚStû­Æö7óf¬µƒëx‡™`壘ÿÑæ'õ 'üâ}›¿Ëé:ÎòqõSÞ¼nããv¾-«w“êÎ=ðwÎÆÜ=mÛȨ’Læ/À÷±;e½®Ñç­¨}y~¾Êñh,3PÙò›…/WöcNe€ßG¶QØM}Èæièž‹ ØÆÍ8±s5ë;l66£¦:¸³Úøªà9|ëîç.>†Ó7Å)[Eq’|,§±¶å¨3g'Ú!zžžç6nÃò|QÒñ½ë£þ*ðžM[IíœJé"²ð(N–ñQj{*H¥4Yý$ÚJ´5Øçù8òõCtÉyŠs“ûy-ð0Z?v@?(å Nóµ¼6¡ÿYv»»ùü”¾½ -­”.sð^¸õsÌs¤UòM@©÷ý.b¾CÁûfx_‡ábÀ—#¥‘¦>xö‡Ë¨åS€œ…)8a«PA‚r4ÏŠüƒ+À9]Ž/Ùíð¹ÄTÉÿŒÏŽg‡þiÎèá!aÓ§#éœAòßÖc”sÔdN3ì!ÊúQΞXÜt4¹¯Œ½L”ßh0Ú¾CTä7(.0(mPöAqÄGqÄGqÄGqÄGqü_ƒ‰‹p¹:)‘Ê ›é«DIýÁE”€g¢¯û6áš@òûD¯Â™r8Ãr‡’¹Øòª×QÂ} I¤Ñ¼ÞòTÄžÍ$ú?fy29¯ZžBc“¯Zžêä¥äXžF­iÓ,÷Scš77}Ä!g‘å#ékþ™þîõ¯·œ)ÍÁr‡|þ,O ©þ·-÷QFxL"ùÓƒ– `z¾åIT>Õòdô·<…Ffœ·<•Ge\´<¦g~l¹Ÿn xsÓjÒ·Y>’&à ûDõ‘ý–û¨(ðcå’ÔÀ Ë}T8¬|úGþi¹òg•'I^‚™–#+Ê“ÑïN±ÜG…Á1ÊSl~ 7ù5Üä×p“_ÃM~ 7ù5Üä×p“_ÃM~ 7ù5Üä×p“_ÃM~ 7ù5ÜäWxªh\i9´ ÎRž†þ@ð›–ûhR°N¹_5yÂrø|@ùH©üàŸ,÷Qqðåjç ËÅŽ̓—,‡æÁóʳğ¬lËÅŸkʳџ•u›å>*Ëú¼òßd9ÆgU*£ã°\Æ÷(Ï•È:l9j k·òqêO¦åR&×ù:þ¬å2þ˜òB©¬k–£²ÞU>IôÉo9ôÉNQ^.v²çZ;Ù%“£ôOŽÒ?9*®ä¨¸üQãýQãýQyñ{yYAi5P#ÕRî!Ú¬ fåK©ƒÚn;*DóñÔ .×Zô·èˆzZ12Øí¯ý/-Ýö,DÕxÓJ=á1]è«Àݬ7…¾ˆv •[6U{çbF+îU˜ÓºuVìuÔ‹ký ¯fªW=xߢ£B´ ÷>Üç©õÑ«oºÂþÊz²~ˆŠa¯^uâMл%´ê:ãcW2ëÜXËÃk-…1£Æ¨¢¢W=žÛp碌Ñ'k}v­Cèm€J-ð²[½mBx–1uÚ#õžÅ£vô¯ºÏ2ªÄê´˜í…W¢7„ë"\—hÿBôTã*ÙYŒ\,D[ª½+(RC‹æª{Pezý&Ê ªóëÝÆ° ƒ£7•Ô%ú ˜/£k1ÊDij£G+#DëõíFÒ[SbîR¦Gçš ñü1ʵéxã‰ìV­ˆ­ÚíkR+’½UQªuµ]­ï{u\üð47kvß@¯Úú´"¤§Aãj¶>ÖãIúëÐתñ5ªzmCêÕaãÅ¢¬ôY›C­Wo«Gjb½îUãõz›™vky¨ MÔ¨b•2u5¸*¯lúEë^\在Ū­Ví.µÖ}ݵEý•èiÕ»¢2É…ÉSì¾u̪]j§½Ápr²µØ®{±O‘ueo׫Òf—Öê9ÖuŽ•…GwFÕ­‰¯ûS•ïÚÔ¾WW1öú4ÿwk6£ÏŠF[‘‘kN‘U\ì7‡ã1~EW·œWR F³«6Øúðªt` Ý(¢H}Thìƒ3' ‹ý{Ðß ¶½hêônζö9è wIJÄ'¬U•zõ ì‹:†“}ÏžÙ“²W{m6"{̳78F-A·žÝCîc/cµ´nü¼¨ þQfç–8,uòÂ,7µ[Ø'å5Ûº—Q$Pž&Jû.[<ûtÿ þЋtíåŒRø3Æ=ÃJÖ<ËœøÆ²gf‚B§ –‚½ý­Œ74Ü%M(1)[´J» Ü £ÿgÅŒ|Z¬ÆäšŽ®­ÆÌ¬°[qž*UGÆÄí×ùg}åM¥dÄKé]lNÒo»³/ë$,ÛQsTgÒQí^Æ eIMðü¬ç[¡ëeT6eGÕD+´!ÓÆÔ /•Ó+j͈^]ccm/§5m¯×€ÉeâBˆ¶#àÒ6b©”k;·z|ÇI;™0ªvµ¤Õë(¯[#Íð`4myËw”ãŠ1_Å]ß±ÃTŸJø^ºŒË_^cDò"YÖ‹ =¾Û Å´Àô2ÎÀ€F%PÂU?ýÊòÝR½V*gu§v8á@í¨êʤœ 0Á›($¦b.BOTƒ¬c» ×^8r%,fB7Óct­xÜÕ)µRÊ756J/û†[ñ.*å¦]81ryÏŸ„…ªHfÑËK‰äºSnÔ~ÄVî´Õ§¿¤*Û§‰+3ôGG†ÖD98+Ó§öÌ9qc{©¶L1¿ˆÛI/—ŠKiöº²!t ,¾–“L:®ì£BÆ´\ŒK„––s¬³Š¨nÖ@îW°­ŒêvJ†Ä6i®ͪFm8®¾a¤j¨WS[_[;hPW›,ÖÖÕÕ×˳a“Õ0vLã˜Æ!ƒ“a˜mŠÅòù|4]J¼í¥§x‚4®Úœ0L9þD'p{tùZºd´LÞ—ùÊT±†Þ:¾}”*uмˆéâô-I’”esÜwí$_ºOÖ*(¨NJÊÝ— ’–£÷³RÍÚºkK©$ÜÙâ0ë†vRÅÿQÊ ÔE.] ï蜘¤¬nc"aÚ„Î]VvŸê Uä¤s)K@¸— ³¹Ð ñé9º(C«[ä õf솎Ì0qÏÎé˜"ŒVà,– Ó©X:ÌXi'–v³ tdœ|T¿ù›Zy'%«Î¢Uô±b‘é…Æ¥Žâ€­? é>Ž+I…ÈqˆBó+J$̰Qéí¤â Xá}õÕ·Uß[}‡<ç-©û—H§ÊJáªâÉ\EÉÉfD,]eõTý|9ˆgá[±:_ÞT’›i,Uz;Å A½†©ÊRÛÈzN»‹£Qßßb¤"úÈÐÈ‘M#"c#ã"[E6´E+Zì\džÛt¬™Ê…qqVeL\oU“A¦r=sqµPóóë0<&Ä?‹ —Å*V£,†Å±–”kÎ`,…¥åú² –ÅrX+`E¬„•± VÅjXk`M¬…µ±†Š·u±†a}l€á!W¨‘Ø˘[#WÌ\ŽFËå¨^®Dcåz4N.FMØ›asl-±•\ÆK$Ñ"•2YòÜŠ­……©rèÀ4É趘.׉NÉgb;l°#vÂÎØ»Êø¸»¥ms=H˜±ßÅÂ^JøÉ˜ æžÂM`j¹WØ™-±öÆ>Øûa€qÆ!8‡áp#qŽÆ18Çáxœ€qNÆ)8§1‚ÓqÎäb8 gã.ŽsqÎǸáb\‚K1sq.ǸWa®Æ5¸×ázÜ€qnÆ-¸•KàvÜ;qîÆ=¸÷á~<€ñÆ#xTòõ8žÀ“x Oã<‹çð<^À‹x /㼊×ð:ÞÀ›x o㼋÷ð>>Êûác|‚Oñ>Çø_ák|#»ï;|ð#~ÂÏø¿â7‚Krs).Í!\†Ër9.ϸ"WâÊ\…«r5®Î5¸&×âÚ\‡C©¸.×ã0®Ï 8œ#¸!Gr#nÌQ¬a”1ֲޣ¹ ë9†cÙÀqld7åfÜœ[pKnÅfŽçNd 'q2§°•[³SÙÎNã6Ü–Ó9ƒìâLnÇí¹wäNÜ™»pWîÆÝi±›6ãt˜`“t¹g1Å43ô˜åžô0d޽Ìs6û¸÷æ>Ü—ûqÀyæ!<”‡ñpÁ#yæ1<–ÇñxžÀyOæ)<•§ñ_ÂGùç|’Oñ|šÏðY>Ççù_äK|™¯ðU¾Æ×ùßä[|›ïð]¾Ç÷ùçóC~Äù ?ågüœ_ðK~ůù ¿åwüž?ðGþÄŸù åoU¨bUUUuU¤êwž«;̉*âÌlrwôÞ‹•Ž\°!H± )‚²—,—p¹äH¡«4 Õ (]A©Ò,VzoR•¦‚¬{ÉmòÇ›yïÍ›ßo÷}_¾Y.¸‘‚T¤¡8J $J¡4Ê ,Ê¡<* b±¹¨„ʨ‚ª¨†ê¨š¨…Ú¨ƒ›q nÅmŦãvܺ¨‡úh€†h„Æh‚;ÑéÈ@&²»Ð ÍÑwãÜ‹ûp?Zâ´Bk<ˆ6h‹vh‡ð0Á£è€ÇÐÐ]ÐÝÐ=ð8z¢z£ž@_ôÓx ýa"xaarბ‡òD„0"ˆ"†Á‚¡†á‘xÏàYŒÂhŒÁXŒÃsx/àEŒÇLÄ$LƼ„—ñ ^-6 ¯áuLÅ4Lǘ™˜…71s0oámÌÃ|,ÀB,Âb,Á;xK± ËñV`%ÞÇX…ÕXƒµX‡õø°›°[ð>Æ'ø[ñ¶a;>Çø_ák|ƒ؉]Ø=Ø‹}Ø8ˆC8Œ#8Šc8Žø'q §qgqßá{œÇ\Ä%\Æø?á ®âgü‚_ñ®áwü?q7ðþÆ?øÿÙ÷7$Eƒ.º™ÂT¦±8K°$K±4˰,˱<+°"+±2«°*«±:k°&k±6ëðfÞÂ[yoç¬Ëz¬ÏlÈFlÌ&¼“M™Î f2‹Ù¼‹ÍØœ-x7ïá½¼÷³%`+¶æƒlölÇö|ˆó>Ê|Œىم]ÙÝÙƒ³'{±7ûð öe?>ɧ؟&sè¡—0—>ú9y 0ŸA†XÀA 3Â(cÌ!ÊaÎɧù Ÿå(ŽæŽå8>Ççù‚ŸÆs'r's _âË|…¯ò5¾Î©œÆé|ƒ38“³ø&gsçò-¾ÍyœÏ\ÈE\Ì%|‡ïr)—q9ßã ®äûü€«¸šk¸–븞r7r“жØ9íc~ÂO¹ÕÎlÛ¸Ÿó ~ɯø5¿áîä.îæîå>îçä!æå1ç ~Ë“<ÅÓ<ó<Çïø=Ïó/ò/óþÈŸx…Wù3á¯ü×ø;ÿàŸ¼Îü‹óþËÿTL7 ¢$C.¹•¢T¥©¸J¨¤J©´Ê¨¬Ê©¼*¨¢*©²ª¨ªª©ºj¨¦jÙ‰¨ŽnÖ-ºU·évÝ¡ºª§új †j¤Æj¢;ÕTéÊP¦²”mç¦fvrj¡»íu¯ŸîWK;GµRk;SµQ[µS{=¤‡õˆ¬:è1uT'uVuU7uW=®žê¥Þê£'ÔWýô¤žR™Ê‘G^Y \ùä×@å)Pl³òTH”H8 +¢¨b¬!ªa®ñõ‘zZÏèYŠÏFkŒÆjœžÓózA/j¼&h¢&i²¦è%½¬Wôª^Ó뚪iš®74C35Koj¶æh®ÞÒÛš§ùZ …Z¤ÅZ¢wô®–j™–ë=­ÐJ½¯´J«µFkµNëõ¡6h£6i³¶è#}¬Oô©¶ê3mÓv}®/ô¥¾Ò×úF;´S»´[{´Wû´_tP‡tXGtTÇt\'ô­Nê”NëŒÎꜾÓ÷:¯ º¨Kº¬ô£~Ò]ÕÏúE¿ê7]ÓïúCêºnè/ý­ô¯þ3Š70hÈ0 —áN¦Ã#ÕH3Š%Œ’F)£´QÆ(k”3ÊŒŠF%£²QŨjT3ª5ŒšF-£¶Ñ$ ÊCÁ|3œç憭h,d~,þtvòå«m,r{óMO8L ¶ÂO(l¹òý^o(êj•¶[.3îV¡\û‹4Ïm&ÐÕÆcÚ§\Þ´±¿M#>wÛ"‘U$j›ØµÐÁôÄ¢–+€‰Å@ÔÁ®¨@aÙŽ‰í`:&TÁ8¤vòæ$N§†æêš€pÑ,¡' [b1‡”îËëÌ”hquOÈ¢q0z„í×dÄ ÇÔÉJ±d¥> õ)ìx¸=íÍü|Óèî³¢&;ûü†(ð™†× DM·Uñlïˆ?7ßdÔŒ±Àç/ z‹^¶mžj õÌüBŒÄ ¬°?vXÛ.Õ ‡CCÖ€¨;Îbiq ûs}ÑĦ74$˜`9¡¨/µHæ –H²œˆ• G}…wbJøƒQ»¶å‰úCÁâÖ ˜°°‚Ëð…b«¤}ÙP®ßc‚¡hZ¡87l¢IšMéÖ.½iᯤ‘¦I’é ‡d9¤¹CZ8ä.‡4sHvÉr|2œãÙN‰lÇ9ÓñÉpV2M†ã“í´šåˆ362’Ä©žáô“™$ÎV–S"=YÔqÎpZÍJŠç,§Ÿ¬äs9ÎYÎñìä&}â+îXAN äÉsÛwXˆFbÀp´høL¯eÄG·7/Žÿs]mËmY°J¼“r§ò©â\ ½^ÙV²¥’¸¼Ù7ˆ’°H€"Éò×ï™[Ïd4ærºOÏà ¸ØÑ§ÝÕ~]:t¡Ÿõ—ºÚgw¿øçmãîÇÝtS_6G½¨›§{*º7È·u§šöaµÑ´žð0ê†fºÓ'ÚBcs™tg"oŽÃýä +¢ØÖÕ©m¶«ÓÐùM¥¿K0íú«ÛŸ¯ê/«¦:·]iÏSûÞê M]T»ºÎ—* UN?ÒŠbú‘©Lº[ÆìMˆe{ÖÓ?{ëŠÛ¬r÷Õ;“ÍpÚõ×Õ&âñ;ó2oè2»ñ3´»Oo\Ôö6¾1ã4]V’Hû$Ò3bO—ù‡Pnö¬>&sÉœ÷Õe| Ëô¶¯[=­ímvëµÔ^Ë­ÓR»Š|ë‹mí“è_"žÿtÌoz׺¸m=º¾;ÕfeÜçdðòî¤÷nЛš†ÿabÆÿ #mòO{.zžñÍ¡IéãdKÏýÕAžª§É·ê¥nFTóF=ý^Úí|WÓ_Їj7¢ß„¸µo:éÓˆ~ýèoØI?Æ&ÈÌvœõÕY/-ì;ª€{=¶¤”¤FúÏô´Ø¶Ãý‘zšÒx}¡éÞ”ÉÂntD¿Ô§W~&7õ‘Jn³¤ñ>ÓWA«õú»ðäœ[ZíÖ¾ï#tÎHѼ2|°¥Å¾±Mv¤ïü>i± cª]¨¥AŽÒ6žªsý¸ »Ýð•5Ýck½Ãóƒv`Aùøn»¾µd‰CHÐw­l~¾•ÖÈ#Z ‡®Ý2¹‡W~¼ŒVv¡üLZ.‡–f%<ŒÌ{/yNÚ­­3Ê×ìÄi2wú³knÖ+î‡ošþ»ÖÛþд͗¶nôå5šü3íûöb>yNÕåáµE}kšÍ³}·²BøJ“Ò¿Ý@e@¾¢ò'§AsýÉiP”!rxEÉÊ€r (FÒ5”®²„f&ç‚åQK˜›É  ÈÃkɹò½Å6§/—Ü;dPà(á†ð§éåa.TekŒËƒQ¬G¯ xU`n½B¾EÌÜÇãÞg¾fç¼ômyŸ —As TÅx¡­ >S”mkŒ[2Êò8×gÄ…ç5(ÇÜ/ÎÈ€0.Ã\/'ƒPl+ÊÑ["ß2¬¥Ššýµù³ŒÚ°ª¥ÿj1½!žâ^%Ðw“Š{{MÅÞ¸ 9æFòPþ45êý»jP”#sŒSÇ1NE„ÌKð–È·Œ½AK¹^á­Xs $2 (D.â18΃‚Rb× (À[›"D–ñ €>ß胧É8xšŽCä š±ÃÂ`"Ã÷.¡0C†„ ¹ŽojSxSBýã¡þ弈U™1´¡®Á¿"Vê°c© 5›I´•@Îvg÷\²mˆŒ< ¼û’!^õ)´ÅÞÈõAUÌó8çGo-´ ²JÛ ¾€¨±’ÿ"*€Ò¾p°)øÂ/žL¹©¨ Ö’ƒCÅÞ/ꃨمŠs£>ô–Ȩ„Wñ$± JKä†[ øWBA ¥8»¥@­[Ç8]â).P ר„ë8¾ˆØ‹“)ž[8?$jD¬Þ±¶«ä‹x+‹s±Fñ«€Å=‰È ë«4¼ØI£(Q¥6¤Š¤BÛ y@²Hix+•ZA"¢ –þæìe×ÞX«ÿ9wÎÜûÿ¹3œ]…¨«lÔU6ê*;…¨—lÔ ÿ×äïYÕîæçË[7¿P6æwî=¼sô…]ŠG¥±ÆBuaÆ yž™3¤°dÆŒ²ñ’ÂÅ™^òrfzIañŒ÷:_\ønmA~øp1Ú[:\P˜1.Õ¥/[—qC©^0ûÚ®“ì:/,Õïaf]Öw—GåÚüîÊ>WüëºÅ®®äÚØ]½ÉÅêBwõ®«w½{®]/εëÝÕ»^¬Þõî9v½øÝÚüg+϶·<¬¶¼ {Ë#¿<2åÕ~eµ©tçW?º©.øÕ{aª÷Ÿk/Ì\{áWï…©Þ ޽0sì…üË% Î7•¡T¥©RU† ¥Znb¡™uYZ#ðÒ&¤z–03¯êûË£Ñr?ýÃÑʰ¿ÒÚheØ_ér´Òeÿì.GgwÙ_ér´Òeÿ¬.Ggu9P+w9P1Šn^FµøÞRChEKk Ý‚pKM Q‹¯ƒ5žP¾žÛÍ?Ô´¸­¦lþƒÍoÙüšÍ?·ùE›÷Ø¼Ñæ>›lóÓ6·Ûœµ¹Õæå67Ûœ²9)ù« oå8û7äüKD§£z‰3+ãh½Î£Ë¨‡›â°Ô¹)×™ù×Åáú¬Ê8šDï£óè²s=¨_”Ê真© Šr/ªaÕVaÕV¡¢ˆ(…2(‡zQw®pçŠÒêš3¥n"MmŠÚ³§˜=Åì)^ÞÌ+Çù«T#*é¼­·#I—=xá/< ÷kÎ4^Óâ5×4«§Y=Íêiñª\9ΖÀIžsþtEéÏgÓ#Ɇ|«Ó…}ßLÔÅC¤œN6é<ñÒ|;ÜíĤ“¹¤³„üCòb›“ASgòÃX^oæ-(¾£8»g«âìoœ­‰óžãlOlœ/"Îç;ŠóÅÙÌ8ßQüìÂE‹rçôÅ`ÙʉôuC_ÈõëT:6Q{£VOÔܨÑÎ GOèZR÷É<¬ë¨¬3u§ëj“ó:æ Î3óNÏ«íÐޝ}§&Õ”jNµ¤V¤zj›ÓÍ-+{êó{õ~^â þRÅô—Úܧx¬SúÔRú b†˜CZ Êèq\F“Ä÷et^fGkNÉucy]4ó2º†©ËZý…> ´”¾ å*³¯*G_ÕïJµQ_áNt¢˜A9Ô‹jô}F漫?WçÐUäèÏõ~VR¬jHæÿ«?ÓåúS~ãw‰ßE~ØÐÑ%yª‹ô~QÝEŽê >„¢qtÕ²;—x¶Iý)Ñ%æÐŠæ_R§Ñ'ÈáÞt‰jä5HŒ©“úUu\é¤>ŠŽ¡ãèè¤~¢WЩD‡Ðaô’T ЋÈHeÚ‹ö¡ýT Œ¢0 ÃÀ0Â00 ÃÃÀ00 # ÃÀ00Œ0 ÃÀ0ÂX#F<ŠŽ¡ãè„Ô_F£ètD*Ñ!t½$•èô"2RÙƒö¢}(ò÷ÄßÃßÃßÃßOü=ü=ü=ü=ñ÷ð÷ð÷ð÷´ù ÆËßàðxpàp¸\¸\.W.€ À€ Ààpå\ü]ü]ü]ñÅ?Ä?Ä?Ä?ÿÿÿÿPüCüCüCüCññññÅ?Ä?Ä?Ä?ÿ“z7ÒoÑïø¸NêhÑ.¹?ˆ†P Ke+Ú†¶£RÙ„6£´E*}hêGåÕïVûà…cà8ŽŽcà8F8Žcàá8Žc„cà8ŽÎ œAýžÚ+:,;Ñ*¢]r ¡–ÊV´ mG;¤² mFh‹TúІü]b?ŠH>$Òz!ù|H>$_H>$’É’ɇäCò…äCò!ù|!ù|žÈ‡ã §ŽC3Ú‰FPí’{ƒhаT¶¢mh;Ú!•Mh3@[¤Ò‡6 ~´Q¾»ÝêGÂpa¸0\®0\. †+ † Ã…á Ã…áÂpa¸Âpa¸0\®0BF#„Â…Âa„0Ba„0B!ŒP!ŒF#F#„Â#†~5öŽ>{˜Sr‡Óò-§æMÎÆ$gd‚³2™ÙÄÉèá„tqRÚ91ÎÅ㜜“ÎËrNE3§#Í)IqZšôn˜TI$Ê!Á@mœ€øŠPj¡Ìñp«ýŒ° }!ÆÏ ô$³’ endstream endobj 117 0 obj<>stream H‰œW xÎç?ÿÿïý$rq Ò %â¡AA\ëV·R¬ù¹‘Ûˆ4UªºÏ0m·®#B±Ú†RÝfeÕ­7mÙF©nÕ¡÷Qwêiö{O"¾Ðn{–çÉùÎ{¾óžóžß{ÞsÎ'ŽˆÔ“ùIæ&qÆuTv^QÉÙ1‰ëÅ"cr Ò½ò~F7‘¬ã"׿yK ëÎ *™[DýÈ|o^Fàö®‡¸~Z$lmaÁ¬¢â3eûEžŠ£Ïº…33 ÷–­j)òFOÚÛ)6Ö‰–éâxgzÓÄ_ %RY)~8â#žœüœ"‰Ì˘–#Ñ™9ù^‰ÉÍÉòJ|Þ¬Œ"IRMQêTïîÓä\©Cõ¤…¼íŒt£<áž-þ%köœ L. Þü¦îtèÝ•1{ÑíÑ]q“‘Š4d!9˜ŽY(Áðü ¿Àz<_â%ü¯àUüoá]üGðþâ|3¸L«Ñh‰Öh‹Nè‚ûÐ=‘ˆÞ胾HÆ Ä2¬Â3ø9Öa6c'^ÆìÃkxpÃQ|ˆ8…Ïð.úœ4Yš£¢Ñqè†+X5xkQ†Mx»ñ{ìÅ~¼Ž·ñþŠ÷qá$>Å—8‹+´Ñ¼Ö¹þßSdK´@$¢Ð1ˆE<0ã° ±K±+±Oã§x¥Øˆ-ø~ƒíx»ð[üÄŸð&ÞÁ!Æ1üã4>Ç¿pp å¨À ܤ¯.¸uÞŽÕ'î<'±KxúóüOùD°¿Æ6ìø/‘|󸈫¸†ëø†ùRW£rÜý*q’()2OÊä°\qê8 œp'ʉuz8ÜӮq£ÝTw¦;×ÝÎ=õÄÅYå’ûTü¤„I„´’v+ÝÐÒÓèAzIË0‰t"}“íLQ†Ùª{1œëíAú9FêÎQ¤—˜Ïõ¤±„K$_N zªå©jójóaµ™ª6½wØ­6P›cÔæXµi_IÕVšF`cI¯á¦Õp5\f ÷¨rU6z©Õ$µÂÆJ‚ô!’Ãd´L)’Ɯɗ"™Ã·XVÈ xÒ2ÌÓÏMxœŸ'™½i£}H7¢/é$ëùú©‡þÖ²4îl;Gãž®qϰqã*é\#]ˆë¤KyË.VúàQ®ªqC5nÞ¡‘«òÔC¾z(øÎ®¯è Sô„…ºó‡ºs¦îœåƒÓ8Õ¯8Y ‹ô»Úw;P­ RÍÙj­X­=¢ÖJ|¬MÐ{}ÐÞ+­…²†µgZÃJõl­Zu„µé¤V§/m}b%0ŒD³ž7 â]eßqŠqÝ‹Lz CH/c(é #½ŠûIËYiƒxÛMYe£¦ß6Ñ]MI+ÐL5í…êó6¶»j­Ñ3ÜkðC#žÅ©~[ˆn43f3¤”Â4'×)væ;ËÝÎÇÎ×uÇùú4÷YŸ&Áú4}¬OÓ×ú4ÉêÓW3U5½ª™¦šéª9íö錬Üܯ§«’d¨$S%A·‘xéá›Ûö³§@{ 4µ§@3{ „[«hl­"ÍI#ð˜bôùºx’ÔKHý©êÁ«ÒÔCºz˜¦2ÔC¦zh¡樇êa¡zXªlÆ-²kå×pËj¸åÊù"ç(r®" È*rAwa|jF¨f”j¶QÍhŒÃÑ&>Ç©¤‹J|ß+q² ’áöŒÞÕè4ú@>H£Óè›hôW5âkñuø»-Þ£#Ôb”Zl££ÕbœZì¢ËÕb…Z¼QaöŸ…ì?KÙV²›œc7¹ÄnRÁ~rß°–xj:e‡Î)!¼ÛX‹1¥UÔ¯ÖÊ¿ÖÊö¤Tø£û_$ßu+öÀv|ÝØ8Oôà 1ÃÙuGa Ʋ÷ŽÇÎ-SàE.òN-óÙ'³¯b7¶uáväu¬®ëYS6°¾>Ϫ²•½y«ÈNöæ—8Aìa~…SÄ>véW9K`Ÿ~—Ó„íÔ§X—>aýŠuú ëžý<«”ŸU…=µ¼®tr/òî÷Š{•ôš[!êØ\clþ¬øuÁH¥í¤!¬9ÂX1æpiK´¢N[´%m‡Ôaôä»kO¨5r0k‘C$†SN4HÇh]œ¬Õ«½0W«w‰ÖÎùà”mq!¿œù¢³†”ØP²ëÈ—¢Œül ¿›È%RâDº»)߃½¤û°Ÿ’xô0“Ã1ÒS¬Ñ NgÉÍz bs³ºÒUeÆi`ÄÔE¥ñ7cŒ¾5uL=b˜`ÓÐÔ÷ÑGípÓÚ43­LKÓÂÜkššHÓÎ471¦ƒik:šö>ÚÑÔîfz›®&Éô4=L/oMÓÝ 2)¦ŸhØ<¶wcoÆÞ‹½ÞF‘Œ!ŠaÄÕ7c¾7k­‚j­‚ù_Œ`Þp}4¼+—;rz¼•ÏvBî…¤š)¹úsRN©Îóšé£ñ€O¶?ˆ‰˜„‡4ë§ò¦³0ƒ7]ˆÙ(Æ#¼m›ûö•.óy¾Ù¿™³…ÍüœKmö¿ÌÙÔf¿Í|›õ9Ÿå}žà|j3ÿ3NOÿKÎwq/Ûþæ–³C:Œ=˜9`3ÄÀÎ uZlÄ>x;Ã;ê w‰H"%½t®Jââa' bB>Eg ›ÿ°5€ü(ÍüÑ:ãá|â3µ&ÿ³tbš¡SM¡N(³õ-,ÒÊûØü/%¿¾:ÿ7’'J¤Û°‹"DJŒH‰’fþ;ü–H‘ÕÌ'Zšÿ§)!b:×Yæ%vöpïz Ý&Ô46|d‘”u6±¦“,ˆ²¡fˆ¬ÓÃeÎÜa:«mnzžótåÁæUŸŒ;Ó ñx\fµëz\Ãߘs–Ìצ-þ(È/`?ˆ¬¼i¾øvžH­nV²8•ü*ú[²ê?¢êwf@ WäãÅ4 ŸB.ü¤Pæ9;«œ5ÎçEç#§Òä¾åpOÀ­n­1ø® –‡Le¦˜‡Í¿I/Ó¨(®,ßûúvµ ¸ ¶Õ Õ‚¸ 8N4Œ[ÔIf2IL2™8NŒq¸DÜ5.A1DEeQpDÜqß—¨Ý6 ¸ Fmw±M­Ã9z’Ìy}^u½ZNWuî½ß£å´ŠÒh í¢+t[›¯= ½£}"¹H-¤ÖRwéSiŒ4N ‘&Ks¤R‚”.eI¹Ò é¢t]ªÔ‡ë+eWÙSÖËFÙ$Èrw9Hî!÷•çÊéò:9Ç 5¸šŒ“¡ƒásÃ`Ã2C¦‘%£«±±ÑÓèelmô3úß7~cáͼݼ (LqQÜ¥™ÒRñQÚ)]” e¬ª„)J´§¤(9Êf¥@)T*Ç•ÓÊå¦)ÈÔËÔÇ4Ä4Ì4Ò4¦B[Ѩ½¢YÅ»vf¯kP™*«]Õ µ‡Ú[í«PªãÔÙj”ºL­æuyCÞ˜wæ}ùÇ| ʃù>…/áKùO<ƒgòlžÃóøE~™_« ¨êYQõÈÁÕÕÜùndHvOÆ\<‰/ñbAü²j‰‡ â1š4B‘OÐ`Š¥xZA©´‘vÒeªÐæiwiÏhí¯‰¤^ÒA|Âo·ëCõɲ‹ì.7•e'ñÎr·Zâi‚xöÄ?3 2ÄÖo$ˆ77ê_bî$.ÿñOj‰Ç*ÉJv-ñc‚øeA¼{-ñ¦à t÷¬èlG;Ù]UÄÛªïâ½Ô÷Ôþêj°:STcTÎë8‰wâ=ùGüK>XÇ'ñ'ñ¤ZâGñ«‚x“xè+âÕå"âª=ãBMûj ;àp°T¸y0†ðd±]#G[‡ŸÃWì΄é¢Û †‘Âaƒø5nágøqnãçøéš+y"OÛ8ž">q|.ã?ðÑ<+å_”Y^ª-ܶ¬t-ÌVYši›fÛ!ŽÄŠi›]:¥$¸d†­ ÜßS’Yo·¦Z£¬5÷•4µ†X¿«k/k ÕÇÒßÒÏdéféj ´Xü,FK ‹‡Í÷ÍwÍæ沚»ÌÅæ=æ"³øó!óZs®¹Ÿ¹¹·ÙÇl4Ìz¯½^ÜKõzéUêVTsµ¶H—¡[¥KÒ­Ô­Ð%ŠdpT—¯Û KÑ­ûuþ:_]=É!=•îI·¥2É&Y¥bét@*”vIR¾´]Z-%I+¥¤ÚgÚÅZ ­É18ÞÂêóµ¯Èûÿ]'Á Qw:¿/ÿæÙb1/ÐФ„·ÏRô«ù{ƒ¦ÖLšþz5ùžã­;?¤Úç=Òÿººè¯Þ<üæSüCiá4 âá&,€ˆ‚U颯c>ÄÂbX°,ðVC6<†GðR!Ž@1l€¡0 ba8ƒpŽÂ)8'à$ÜQpNÃØ£à>,… pÎ÷pîÂ"%£a Œƒ±0’á;Ue"L‚)"‚¦Â4¨±4fÀ÷0fÁH¹0BaÜ_ ãq92Ô ¡Tà˜€‰¸WB8PBÖjLÂU¸׈œ™‚u±ÖGLÅ4xÏ1×b®ÃLÌÂl\9¸7ŠÜš‡›p3np#1 ·â6ÜŽ;p'6À†˜èŠn؃ JÑ=p¢'6ÁhÜE¸÷â>ÜM±äB6G/<€±¶ÄV¨ÇCX •ðÊ [£Œ4âa<‚GñÇ"·ŸBoôAMxÏàY<‡çñ`ôE?l ×á^„KPWà*˜Á ?Ã5|€v|(jñ#|ŒOð>ÇX‰/ÑUäX…l'ê40dŒi 9˜ŽÕauY=lÏê3Ö€5d®Ì5b™;óÀÌ“5ÁŽÀš²f¬9ób-XKÖŠéYk&³hf`Fì„™72¦0kÃ|™kËüY[¤m¨ue4óDß.Œt‘è—hâDÇ‘(|+EV–f½0¬\a¡Û„]íÖìÓfu’Ù5g…U]NU*\ê¶pÏš‡Nkìôög¯Í½«d/™Ê¸¦ž¦¾ÆETB,U8F:­¥ ZG™”EÙ´žrhƒ¨‚¹”G›h³0­´¶ÓQó©@øH!í¦"ÚC{ií§tQ1¦#t”ŽÑq:A'é¦3t–ÎÑyº@éý,ªêºJf²Ð5²R Ù¨”ʨœ®Ó ºI·¨‚nÓºK¿Ð=ºOÈNé=Ær¼NOè)=£çô‚*alf‘ضÁv8€7` l…ƒ¢WÚ á)Þb{i6B"Üq¸~Äž°{‹:´Tø@Nƒ8 ïá}š@!Ji>Mù)Œ¦P8M9n!EÐ"‘é¢hšð°hZL1´DøÁ2J†°’’„™Å ?K Y´šÖP2¥0++a6VÊÊX9»În°›ì–¦•Fïì\j|P‚W’(2±aoeqRCZIW§n½ú. ºº5jìîáÙ¤i³æ^-Z¶Ò·– FoÅÔÆ×¯­»ö:têØåO]ÿüN·îïý¥GÏ^½û¼×·_ÿ¿¾ÿÁßþþá?>úø“Ÿ~öù?¿ø×—ÿ=è?_ þzÈ70tØð#G};:xÌØqã¿›2qÒä)S§MŸ1óûY³çÌ ÷Ãü°ð #EFE/ŽY»ôǸŸ–Å/OH\±2iÕê5É)©iék3Öefe¯×älؘ›·ió–­Û¶ïØ™_°«pwÑž½û~e¿úŸ¢º®ø¹÷¾]D×/ˆ€è[ŸeEÅpqYŠ%¤ ‹îR£ +©Sk«¶‹MÕ¤ÖhÚdâÄ6Á&53Z3‰T¬!‚_¿¶Ú4©q’Æv:²ïöó¤Òú»ïÜ{î=÷ÜóåsÎþþDËÉ?œú¨õãÓmígΞ£ó.v\ê¼|åêµë7þø§›]ñ@W<ÐtÅ]ñ@W<ÐtÅ]ñÿwW¬Üí¤¼Ç‰ 6Ë›½ŸOŒ ào„¤ä—5ÞÞOÏŸÏÏÃß^VØó~t vk¼l&;rÑ0ÌwÀ©Ä|” 4zŽ.Q©ü³v`×=rÒlª– 2l=íCoα+(SIÛy¦p(]¨,É,U4²M”)^ ],…Äd‰ñ!Äs&vyé´Xᔩò+v\i•ôËäÊ;À²»l‚BÆeƒÜ+_¥¡ôµH Óe-v•Rˆµl:¶3?ÏâÊŸ@'t¨nf…” Xý#ÚMGéàâd1–LfÍü¶P¨Åh‘óe…|†<ôÑFp9¼L”!S.‡þbÜ’ã Û „ü>ñg@ÞFdÿUºŽÐä^^*~K ”EeÀå°Ù¯`ÉVºÉ"XË`.¶…àkjþ+ 懭¿ƒö¦o±Z€Øç!óKØT½¬”-fëÙfö"{˜y(Ùô¸‚¾óÈ’.£SFÊ=ò-œ›@cѧNgÒéIø³îà~É@ž¹ìPÁ ¸2Œ™ò²^ž”—I£Ç°6‹rqçBZ­×¢òCeiÇs•韰’v€-T ãVž £õ=â£á¿t¾’äÂ!Ú•EÊ;¡ÃFŒqи‡>®Qêò„l û÷qœã†žFYöØ{8ç$ÐôsäCÍ]óYî»òo²n„SßÀp)²ÄvѪÄ)»§ŒZc·qH¦ÉBÄ– ÅQž DS)ù!{¬¹•²yÜœþ‚î§²ùl!ó±«fÏàwT{Y»Õç0*H'»Î¾*[¹<Ëø&þ?Ì[x'ÿÈV"|¢N¼ü<,Ή¿*6ô©J¡PÖ*Ï[È"¬£#Úºc»kC¡=¡ÆT#×ø®Ñ`4Æ'2J~(?#+¥BG?ªñjÔÔúpÍ ññ6tü3êu|þl!P+ã¡ñø°ßÜлš/b~V…§ÝﳈÙFTÉ÷õ®uë*Ï=Ô–>ÏdA)¯ÂöðF®ó«xîó‰$á3ÄL‘-¸ÍVñcÜçâ†øLáJŒ2])Qê•SaYnÙeÙki±|d¹cµY¿Ý‹Þ~íKoV²ÅJôE\ˆ;üÏdëùökžÈšqZ¢(EÜÍç äC”×Ò¨A{ñ«ÇÎG‘mPÀ”Á_á)b‘’$† ç(¸ŒoáÚÏÞ§<‘¶Õèu¾TìUv*Ùì2ÕãLâÑì”C9,¾»HuðPŠxW9cJ´DˆnK-–[•Û..³³2àsªi3›Ã_$ c»‹÷|dàUDþQ¶ˆÒ•[bÿ&¿Ž¹•ôkÆÑJ~Œ½¿¤#¿ÇŠØ«b:m`u°ÆlZÁ_¦ |Ÿ€x.¥¿³M,™û¾™È«HÑ|up?¼~ŽàSÙÄi-5° 9ѧ6¾ƒg•âƒî¸Ðdκï²&‘OMìê^+W ©ÖLz¸!û€¥ÈL»HBÔ¤“…;ÿOŸ¤áü>[ÇWR Û->goòúUŠÕ<í2î+9b&,ö; ‰Û:;‚,™–D% ¿MÙˆÆïY«•›–M&-.Н¥_Ú¥–¡Æ t€Wá»ë¬¹”O×Ðe-aŊ䊔 ©‘¿«Ü±èêìt^"ÃŒ÷X&›(UV'£X1"|‰õ­Ð+¨{›Q ס6=jn¡´•ôzÝqÀŸÙÐßK‹=5¨©4ƒfávÙ4¨4¼"Z< %«Ð«Öy‰î· ªöX‚}UèfëUÏAúäÿVÚ ØEûé<›¿&ìè‡Nò5¼ýÚ5qJ¸ØBê@E®§šHÅl$N~^}ÛäEœ6…€þiÈRĽì’ò7¡³·ºï´Î£.«Û•ãuÍÍÎÊœ“1;ý‰Yi3gLO65ÅéHž2ù±¤Iµ vuü¸Ä± ñqcbGÇŒ9b¸mØÐè!Q‘ƒ#Y-ŠàŒœ-/ êI]IÒòóS̱VމòG&ºŠ©¼þkt5^¦ö_éÂʪÿZéêYéê[Élj&e¦8U¦êí¹šz„•û@ÿ4Wó«úÝ0]¦·‡éhÐv;6¨ž1Õ¹ªÎªGÏ[Sôr!®)*Ò­¹+#SœÔ2 ”«­jb±Ù,LðXOF§ˆh(¥Çk¹=NË55ÐÅ$Oùr½¨ØçÉM°Ûý)N¹—i:ióôaŽðr‡Ñ­n}PøµÆ¼ 5¨MÎãÁmGlTp Y®-/_ìÓE¹ßÍ®ÏMÐüå¹c›FQpÁÚCq.5®?'ÅÙdÞcئ¡Ãz‰!Ñ•}¼0^nR ú,ËL´ù]]¦BŸ†;¥›_•é\–Žeøó3ìÒ—Ã#5ú`w hË0çÍýºe’MSƒ÷ñ«* Ýý[ÿ™òÞë$Û}2I3NúB ü‡´îpèÉÉfˆ rçÐ1;<ž•â\s„×h«l*^0Á¶åþŒi0¿Ýn:¸áˆ‹*0Ð7ûzÆ*U$$×4‡_ç“sü!'¦Ôäl|ÈéÛÐɇÑ:ÅèI}ÿÃl£Gzª3t6ú°+{ø%ZAq™Oõ½¶-ðöõðÓûx½”>Òí ¼—â "ÌEP.î[lþÍxµÇ6uñsîþ×vìû²¯¯m;¾v IHBv‚C.¤‹h©yVƈB%V]ÙD÷ ©ƒf­Öµaô½`4«*%0ÂM(Ò:µÐ‡ú×:iÝ«²(L¸+m@Y‰í}ç:EÛ¤Ýøœóû}çû}»Å5ÎÄàg³@ý¸i畇ƅ«+ý #ù?™åÏÈ)k¸l^ÌñžÆ…óå æ ÄsÐ 0§ÖlÚ:2âX°6hdd Ù1ò˜Y>¼3¢#SPvÄGžúÊŽªEÍòôƒãÏ ‚_Ã=€V ­šˆâc& |lãÖ-SBác›¶œ…‚¦ǪÁ Ö¶L…2,.uKfa2Ck0 ý,Ô‹d)8e tØZe,†5ßebdñ¸*£]&Uá žf¨WH%]íh`Âf7±ë·ÀeBÐÈac˜¤i*ÀÛ o#[÷ãZa&)¦× wÒ¡˜F}ébš´¶ÖˆcÐa(ûçÂôå9ƒEwQ˜¹L^u±|Q˜»È ßF‰úñ*cÍÛ¶Õã½\%…@Záë‘ú¨‹7ð‰Z¦.ú×(vÒõAû@£4^žì,¯L¶x“tÙ“ä]IhX–’6bÔ®°%V¤’ž&ÜT^‘\fR_\x€G-Î]¯úQ_îйB^ÈW$ŠÒ¤î–\A´z,Jj·ÚÝÖÚÿ´±©¹«éŽ ÔÓ•J`£¨UK8)ÜW+ P> ¨Þöå Ü„®¯meõ7C'Ú= \ã„Nf½ ¤bèPãüƒ«Ä‘#x͸oãšñ@ÓàW…zB¾;”^É—ó¨¯|0 Дr>U}ÑþVlÑúxgGWû2Ÿ½#­·y_û².–­ð“]ÉYó*vý?öR×FŸØsüøž=ÇÓ6l8@~xîŽÛîí¬D;ÜœˆºÑ=OŒÂ¦ÑÞê&zvèĉ¡¡ÑÑ¡Ãá}Pd$—Ãa³Í%ahôÄ^²iÓá|sa*Wšƒ:öøŠ[o4,v-(VuËÉg³±‚ꓽ+d6ÃóòÏÝ:B|Ti¡«Ó˜E~¬=C—ËgÒBA€kÐÁº1éÚZqwHR²ª,åU$R‘€Ê q*NåÒ¿ip¹%ÍþäöíOÚ5É튽bàÏ` ?uúE‡ëjÉÕD¿Ç)Ó?Âuu@]éïƒ6Môø¸Áëj¤-ºqc‘&ը׷r^¨ÙXïÔÏô2QÖhÓ²uuqÊ!ËœáûŒž÷a§S¨›ÀòY~/ÿ-|–{–?ŽÊŸÆcü$šÄoá+üð5|ƒ¿ƒgyÕÉc§‰ß>O;W ,oâ³ T–»ÔBcúCÑÄ'^÷7Âý 3…þí¹¡òçFû²ebþ þP¬?õ d;ùAê'ÌKÇS§;š’§Õwäw”÷Ô?ÉVoÊ_ªå‘œ;¯ÔõÑ,ÿű˜ó8"Ý© ø !­6œˆ7i&Ξ ‡¥&?.ÞÛ±èùóR¯-ÚÛeâÃáí¥C¡n:ÐÓ2—Ô‘ N­»µÕܜƇ+WGŠ‚Î|~­p .(#"à²òðƒ)©!¤n±‘H ©Ô¡ŽN=&+ 눤0°Þ7Hñ`z“ª€ÆÆTn ¥öc_%ôÄï¥ÈÔñø| W­äp»­jŠ£Ðòð·o›C×—zTAP^~íÅß?6™« hÚêý/üîæ›Ñ)ú7?}ògïî¤^í8¿óßt—{pÇÇwïd½‘îNç;½–î$ëN/ëe D]0˜ºæa .…\ Ll•¶IhR’áá·5m  ¡Pf -Ó89wàèhõ/}äGØÂÏn{¡ûõÚ¾Ñoc¿ss¶w×#náæŽâ“sÑ!lŸ¾©ú†ê Ü,>aa @/ ›¸f®ŸßÀ®ç6E‡Ù­Ü°õ ¯Ï:3ñn®;³š_ÞÌoLïrŠé“ ³×Ñ©5q|¶Íëw›g’1øÏHŒ5ŒªÜ‚”%U„¤3‰ÚÇ|¢hÏ9Ds“ˆ% UÂÖ1ò_Eè™D虚ÂÇ_À'_;}Lu"DÚëP´¿b@\@\}8§?§YðGÔ®éÏrï´r34 KPªÀ7ψ/ˆ4¦Qã?´„‰¹ J¦Ó)íïâsä-4O4õÿ`ÿºþ¢øµ Rg¶œZB73œ´ìú¦Õk®ÝÓ¶ëîÈ •g6.ɇ»ÕÑ7o@òD¾Y^°êù׫ÿX[næh>¶¦äw,<õ‹•§ž†ä(:ÿUH{1¤½4dŠö²gH½]MÒ“Ä0.C‹Ó“öû]NR§ž˜¾ôšÙ]ÀÏ¢l¶ÔýáÒ±v^²X\öT(‘ÒiW4a*L„%QtE<pK1o' hðD{ˆ‚ƒ0h[D³ÞwN; çSXç –FM.Õ›xçzuqYyseT¥SH%§Q•DðIñéŸÛ-ÛØ=ÄOÉ1Ë^ö3N«# ¬¡™|8¢ù½æ.u‡½Ã©UÔ uŽ:Ǫڴ¢×ŸFvæµyœïY­.ÆÌ *¯‡`•ÎÊ»!ÅYtTá@i=d4¹µZ ~¡Á/žÕ@-xäü[¡JÈRò=(™˪/òˆ«ð]$†$òÿŒª…âu3Ç¢‘n2#33«5’@JÍt ›.©%FJ)\·«R,ƒuž$9XØ Yòôí£åó[ðÙžƒÝËeWWÏcB&ñ1ªæNÙÝZù˜QŽö“®®ûçK‰jêB° Aiá9tÊ2*"s‡:§ÍI¼I@T;s¨ ôñbÑ`jeL& DðÚB0Ô*‡B’ìô*åM’ÔhT¤Kog•5Ò Ï³H*7^·ø’.ŸÏírd »v‚`‘DAp‹1Al;ç`E‡p¢)BFƒ^µ.§"·*:‹BÚ,÷ÊeyH“oÊjÙ%H7ãÀŸ[˜²eÈ2fy`Q™-Ðb‹ä¾×p¹ Ö U \¶p݈/ä'¼ÇÀv‡®(î(hKUA % D¢* ".-„ªâ „FÀùúÏÚ>àhjYóïü;³³ûÏ?ßÿ}W´*ãÕÿ kø#á±yÌV}lUad…Ih…±#÷? ?ÈüuÆs “×tΨø¼€ >Z #T0—™/#ê×U ™×Ê;Ad]‡l´9ŒE8ig9Çb‡É!²«wµ(©P•Þ(7U4|ÍâðØ;ÆŒaãË̯Þ:LÖ¦ÿIX×}oЧKÓ߀q²vGWˆ4k®}§µöô•é»<°¹Øt‚,‰¥ú±¿¦ç&rËh¬¼pâ$ª+ÈÜ{­ŸÇNs6‹²ã#÷‘óßnï4^| .Š'§bG¡î†7¡ ú`ßg2Ïd(p„7}ИÎbš¦°l‹‰‹ gáp0 Ç~¹Í>à¨áU£m —¬.É >†\NÞŠ¸]ÂT‡:R‰!35üÊh{f¨ÿÌÍuãMQ »×E°áƒ0„O/ó3sŸ}ËßÔG£k!’É5%™2 ™$~ÆÁÉO:yyT±%Ŧ^"Ä»•¥EÚ”ÎZAç@˜Ê˜/™©A’•G_ýàkïmÜøÞsç·ýÁ3Û¶Ÿ9³}ÛóåÛ_!{ðËcÇ6¼páÇð9’ wŽ Ÿ??üÆûïCl‡ ¶YÓ‘„Né_vøwTžšG=J­¢Þ¦Þæþ,žcωçÃ^Šßò»ÅH&¢Q³b Ÿ‹/?_~6þbø•ðŽÈŽØ~Úû¼ÿ`äˆé{S¿€½ÇÞÅŽ¥â_¶n=¯ïüS_Á+ú|L~)ß-õoþþ›{~„þ •ì ÈL ÐSºk1=DÛµyæ°kĵ·ýí§Û›×î:Æ0²]ëB3ñÌeއܯ†u=„!s“m2J ¤Q„XIìê Zì6‡ ¹¨;J@È¥ÐI#5·é ƒÂ)Á,ˆÅçàwšzd¡!{™ËV@NôV&.,݇Ó4‰'Ó† 툣öp:ŽÈÍ›1‘~ŸÂG µð7åF" ͱT\tb-iOì#í¾=?ܰ¥ y÷Ú3_Ý€¿gÈA÷ÄÃ-ô¤|Ü´æg~›Ÿe¦À³ó7p™ù;ˆ­Ÿö!Š MzFó¢.>*®׋ß­œ›YÆó²Ûâ²/£iÙåˆÛAŽ˜ŽR5ü“}‹Ûå@ø^ ó)<¦{ÌfZñ˜£lº‹­  P¹9> bïF ""(EnZT­¨P?þæ&¼€¼‰ ƒ >Ž…CqÚwölý‘;×ïùVE’5‡á˶BÖ©Ú”žüÃ(pºt ,ï2¬¾ˆuV¾Äý‚£Žh8ÃgR]éŒÖVœ¬¤æ¤+Ú~â|šÃ Wâ¨v~Qúlê¬v%uE»º­ÙzR=Úšäšân~·bIQ6ŒN:k§i›]¦"2ô÷¢8ŽÇÉ¢ p‰Õ§·_®Äã²"GÔY06—ë×r¹‚&wjEŸÓx'ëðxœÙHŸóãA*ÜÁƒ/‡y®C%þ‡Óéå©tZMÉ©d*™”Š_,j ϱœ„!qÅ$O+X.G"B9lQË…rggGå,³>d+cÊÁ×`÷ìk¬ü4•\R<ˆ‡Q <îAmH£$-§}A3i5j§íæàü`É1h²SŒ]²çàbØþ–ÝbK‡ðëh¨Ö›ÈÒÛur9~xÕÀ8$! 5Hˆ~C fo1w58œ'Ö[á÷‰t7,p$®É‘ˆŽ„To¡Oy€PÑßb@/Ú¦Jĵ,Œ{»Ó•áÿ \èáVÓÛÛÒ$ÜäØh(©ñ5°^Ÿ/56–¼ÔãÊ÷V!ªoKœ¼Ž´É›nm#Ð #`Ôâæ¨OFS¢&·‰b%tlJ˜ÞÅž¦UÿQûíQr@Ö@q¯n7Ž‹›'ë5üÆ“†°½J¼åúkøëõ—ÉÁ1÷Eëî ˆ\×ÿU|Š€='J€uªX?•Ñ{½ÝÞYžÙÞo¯wŽW÷V½óí¬ê*¹ö†G:Ì3p SK"OYŸŠ¬·®Ð%k>2ß:?²ÄJçlÝsŒœ¿Ðƒ{úûzzæôÉÝ‚—¸b‹³§Ø1ö*kF,Ãꬉí÷°¬×# ©¸A<ÌȔܓåxLN•r g)P…þl¡ËÊ¥~8W_¨âj¥ZÕ+rgÖS»:Û¢ ¶fºõ2ê·d¦PÂn7Y»K¥TJp¸=RÀ¯Ç‹9ÿŸòÿ—ñjmòºÂçüŽíÄyø÷oÇÄNœÄqÞÎcI llg^`Àx hX¶.š"Êktš°©ê*$Ö*Ecbbah¢BRDU¨ÖuPP C0­*a•ª´cTH¼ïþ¿ÓîÕ¹÷þÿ}{ιç|÷~¡+;·¨P|vJ…÷ƒT™ †Æ)x6x)¨ :f”þNópìU}ÜÝfo`¼‚ iV&.b…2…Æ0"š'5¯y¼7n‰áÙò},œL¦ZrÂâŒ["ÂOnqI†Ã”’ O.(I(Êa½ÁašÃÅúÒÎHqŠ€„ˆ$¼ˆJ[·Rs3Â~fÌzëLdŠ~N côöºA½ þkxza‚gÐpJ«''P«p³5]à‚ *º²§£.‹ °Œ~úñ˜áÚö|]‹»vÝÔ¥“f̦»nMÅ3uÓÕæ¼ªò²iõ÷(´º–Åëê§O¯÷oÉhŸ0déõð¢úÖÑ+j»+Òà*Y®}<’ˆˆåc/%4ÀÊ $Êá*“yJhbù^,5§.çV©ÕЖºž7•®­H>gxÇtÝx=éFÑõªÛ†aS¢CW¦Ûdܮ۫;ª3سT_î¨t9Y®<»fçÉÊûu]^eÌž9µ¤ÒìOÏò#ø§Uº“M%n~-ÁH9þC¡ÛœÈ‰Îš2JËÍ6»´÷m‚ËQýƒ°œêpœžO;Ý‚‡Õlð`éÇ>~Å)ßêÞ¥òèݓޔÔ\îQUô¯Ç‹<µ±¤º³5ðWœ.´,p ·Xjþ;¼á‡ 5—Î>ºaóGëÆFÏÜÜ®=¬V?ð]º7®tïÜûú ®eïÒﯿ´¶o,úÖ˜A¨LKL}}V[š]ÉŠßט†T`YX¤¡ó'ÁPIúõ¡úÙ[VSšÕãsLÞ–׫ðkU¶Ó‘ó§ý¢Ôµ î^Üê´)zœ=c>U5Še‚ôv†ö*m…FžÓµPDÚÞ“cÉQ$¥ÖÒ`‘2‰eÊÉ{šW)«Ý«=OGÎñ9ùCåC÷Ï…êw}ïF̉”AÝy:ªf%bQ"9Ï#»}5ÕìöU{dEÎåjsµ/¢(J®Ûgs»}:f¿ì7YýŠßíÏõ;«üÕþ|¿Ç_úmÄ?ÑïóûÑH¨¶6äñUT…šô¾S\q27²/$ ”ɬOq»í))z²³Ýîâ}fýj½¤wÖW£¿×³¯HQǹ÷5™]•±k¨w9¾c29M¥¿áv?aS¸â-bõépËq7cÄ!£—Ó1çVTÙl™RéY„ZÑ{Ë9’!ß?ÅXí¤ yé±BÿJ .)Ñ3Šj›#3(ÛäôP5ž ½¨•X9=ß+ÛDì9NEÃ@á{¿‘bЋ«ía§Gœœçj]ãp+™Ôx‘ä­…63Õq;¶Ø®z²/²fk!oûm¾ýÃ9GÎrÎd×rñp½ùüÞØN£=5²¦ŒýA G©v#.ëwÕáã¾`‹¨3¬)öDÜ*¼Ün?³lbððÍ%&%’H‡ üHÔ}<òïèà×zg¢ŸI/f€ GF÷â>^ŒF?J¸§þ}8é.Ò³¢ZLøŒM4@·@c|Sjær¢NöR?_¤Û4Œž:G¦ó¬Ðú;[ù"×R îün8Ëkd¡j§ÔHoâUІ=Ô$ÞTA+¨ÔH§i'-$Ñv>-£«Ò4ú°2ñÛÔIå˜ñf\£-´oÕ“xÕ ‡>O]èë@ï%ÚEKÉOµØuð)À»1Ƃ܎õÅN ±ÒƒÜƒyZîe±ZÎýìçAHï)ìy’¹J#R :J[±úìWí¥ñy1/‹i\èe Ö£ÛqNA/E‡¥óسS¥øÅî*u`å8U@n‚V@j˜'H¬³´R.TjÇ —@^}œIÝt™6E‡YA;$Þ'QÒÈj/uJ.ÕÐ]’K”ÅoA¯­¦'µŸœ¤gã dsŒŽAß…¤C–¸ŽNá”Î÷&›Áwž|ÿ”˜+h}¯ä•t ¶!d—\\Jš¤¶ŒSl·‚ó™G¨öÜ‹Þ5.ÏAž“©&ÏŸŽË2N°w¡Ókêþ ,n>½€[)þÇ ý°¯ýܧ`\2eJ‰°N¤pô>¬¬.ú•FéŽzS[±ãUõ–6A⎾Ý.‡Ýœ˰ƒ‹è]N-ÐÚ6 N éüm£^É K©£E4‹ëÁûà»:¬§ \ŒVhƒjÉíȧU;î!Îi¡T†5Â[Ì¢Æè=ZKÅÈ1"i\´ƒ‹2•&*¡d¡»X·üvBv›`WKPÛð5ùEª¡Ìï OrüoÄ9çÐtr#ÏÆê‡ég”O?Ǭ˜-üÉx„“ˆ^ŸCc/bFvîÆ ¯¢RÏâ™qNœ£ÿ$°©Ä[âè-ñ 輸(þ$²˜lWÄã"-v‰Ñ.6Ñ·¡ýNâ~ñ{qY¤Ä&±•ößùDKB$ZÄ÷Ä÷ÅÄœ˜‚섘¡÷>Ê*]ÔÆš=ˆCýžòjo©þVòõ&å»t ô.´Nb/à@$jNkù1ñ¤x‘ÿPœ‡þÔakýò·à‡ØOðŽh5vy'½ „Ž¡óÏŠ3â=Ž“‡x“ŸxE|¥žk(3¹6\OŠÏ(b µilê×Å¿¤ÁÇ\Åí¨oìb‹î½À×ÓØïêyáë‹âE–¿®V÷—«ú!ÎåUù>=ú}—N`’€ëPmôY´ˆ\Do¤ÐωGIR+êpÇ›¨Æ“xª¼œ âŸâª¸Šý=+~"®ˆ·ÅÆD¨½€}3LÅ_!y[\¿„Ås@á$|ýß oÐëâó"@„¯ÓÄøIôò×Ñ+éºý ŽstóãkâQ¿ÀqF‰Ð®£ :Eá¼ûÄ>Ñeú³xõzƒˆßQ˜›ˆá;ص/‹WÅYÌÁß s_[±3ÖŠÏŠûZ¾H¯ðú§ÅÏÅįyoåc3ÿ­/ø}tì…6¨þþ¼QŠ¿;–¢¿c*©w†Êäfhñ›#NþîФbP>®±F ŠÕt„Yˆù¼sô(Ó,ެWt½³uo±½ˆ¹Ào2õ+_ŸÕˆZú@ j} Ûc¿¡/ƒ^#j?ª©ã MCž’ÛˆRÏkZ1ÕH=?[H½ÏFt[ßµiíÚ×´nµ¡t#ÝþÑúKhÞû#º³OÓ]UM}‡#Ú¸VÓ¦SK“ÚMjR“šÔ¤&5©IMjR“šÔ¤&5©IMjR“HµnwÓ8yÔJ ê¡A:DÔòtç©÷Dc-“8·ú½ÏgÅ Z#z Ÿ nñá[èÖRü²˜N+­9÷ÑâK†o§gÅqÃwÐÆÄk†_Nwt\1|gâÎå¡.*v >I¹®pmªítâS†ï¦ÃIÎŒ'^PWòo†OP{ªÃð-ÔŸ¼høe1VJ¦V¾ºSë ßNÓ©-†ï U©_~9u÷\0|§XÑÚé¢{W^6|’îé צZI}ÁðÝ4Ð{‘ˆe õdï7˜çŠôg¾å§˜ogùO™ï`þ·Ì/75Ò¼®‘æu4¯k¤ùe1]#Íëi^×HóºFš×5Ò¼®‘æu4¯k¤y]#Íë)¾3–oçrùdLÞÍü;Ì÷¨\zÿÅü*𽫖1¿:¦ÛÑüš˜|Z»j óëYGÛÜÓùHŒïcý>æ?Æüæû™ç\:bñwÄ|%còd˜Kšæ©L6åÈ¢ ®’ž¥©Àü¹TFKÒî<ðêlAî°†„¤ˆõàîc¹õZ¬G&iOŠT©ëøãªým§Ý8†¨ßp;Y:ŒE\§°&^5{>È£*ÎÙ†¨öpTª…®ÓÂ}¡ÐÑ^}¶“4ÇÜHÍ¥éÅïÅî"¿jogi½K-ž`^l‚m«k{±¾Õùˆ”ŠnŽí‡}å.°WãúÏr5ã³"gú"Òt¡«§H…Wö õ|t\ñîVóJuƒÆ_者é°K÷Ðõ2Šúcœso¬œBXÙ?¹Í¶Ãl2|Õ³­´¨Þ"¼#Ë*?—çyÖLÍ*ÏÀZlÜHõC{zOª½Z5ÕˆöXh¯±Ž-AÀ3 Xr‡³a»©h#”=daµË톈t>ªƒöÔ-Âü†´ŸÔóxKïÂ[Râ¼wýxî ‘ú†;DÍ!<ÝŽ'; ¿‹î©U÷ÒÇñU¤¬«jˆl¾—:ÇâŸáÉ÷iî_…©ŠóžÏ_/6¿§óõékÕ§Lh§Æ=˜ÙÍâõqÚ ÄÔ^]ü5Q3ÖÂÉ©&AÍà¨*4Ì2Ç`;^õäë¾âÔ—‘ÍqgÌÞÉpר±÷³d«aì×­È–:j2,s6î½l,ÿm¼sC ÃI®¿jÜ»zŸDoTŸ¿wfbQä(úš÷]Ù¼ûÔüõÌ"Õ{ú›)œK!î2*e>G˜xlÙåo=)Ž%ü‹æ[oÀØx„Èd¡•ÁªpD“pà&ûlõç`uç€'º²:Èß Ÿ3ßSaw”8Ïúš[ë«Æ¢uí[â%|6¸h’Ôm§çËvÎÊØò9™.ØrÂ-¹DrÄõÊ®gŽ[’åbf@ÞgÖ( *crÚ-V”Ä—ã%¬Û¾{÷P?N;äp±(§œ|!ðå”íÛ^ÕΆ¦öŒ¸ϱ=9i×öTmÏW&w ì’›'œŒçún.Ø2eç+EË{0öØ,êƒÓiswJ¦=+kÏYÞ¬ts× YzvÞñÛ³³Ò)Ɍ햺º•RSþÀäôøØøÈpzüÀ¤<0&÷ŒNNÊá}S£££“éTgª3]p|„H*.Ëž[†¹yBÝ=róžU.ÌK«—€¢âÛrf^λµ2ãV9˜J) 4”7ç+#–,:»u+ïÙöœ] äÃXV°ª¶tgTäX,FW³<[ÚŒy2ëxv&(ÎËœçÎEq¹ðåæmV©A3Z—<ž3S `aº%;žÐ&? XÕ¡¨/oɪU¬X3E„íûv_= •жïsòœr2µ\,õËvÆÉ9™ÆÌ%P,N)Ïk­lÖQ%µŠÒãÛ¦Äc Á⠊Μ£‚Ö«¹Þ¬è®È º5´He¦èøå¶4ÜsÖ¼Dü(Uy^!´Ðã1ž‹’³JóòHÅöÙMÆ-¡ÛJ&ƒÿ1^ÐQ%K®ÿ¯àîƒ;I Aƒ»»O’ d’0™lqßÅYcqwww×Å]lw]àõ\`÷í“óÞ=gæœ{ouuÝ®¿«¾v}ŽÛ2Ž‹ˆ‰ 3ÒìéH°4ðïŸï±3™tDšMô)c»?¿Ñ„e&pÛCÝåØóaöÏQ‡ÿg·VȵGÛB_™yìî A‹fÁ¶’¶"~þEmþ¾%}ü||’%kQÏ<ôñõõó3ÿþeümþåÊ– L•<ÂíŽ òöNHH(åü’øÐgíi˜­žÃíŽr¸ª;â"»xäk÷HÆc“à2)rÙ,{B¯SµA Û—2‘`Ì<âtÙM’Œ,ƒÃ\‘&Úš.SzºxF}`kæˆ2rw™zãÙÏ6[°Ç{d¨‘JxdO3al¤;4ÂfÍ_ÂfE蹩 ON¬e±\„[e“»X³ûl-â>©Èá4•É#€¿‰wÇÆ»­H\Ss<¢tÛC<ÌÒ›å×툶‚ ‹ ÷¤Àa©ÿ²fÞng”·Ómw:¼qB?-G´#¡”çÍÿ9*Áež:þ÷Ï÷g‘XÖÒÐêÎN« G[œl˜©LGéjî·úÑ—÷ͬ¾ìéáÅéd]©[u»ùmÔMºäŸ|Ù­îôåþË·ãos9þæÍòç•ÛË׫žW-¯Šæ?ÐXÛ­fØçž˜©b‚½‡Ò>‘ź>ä7çVÈ¿\‰ ™‡„ŠŠ—$’Ä’D’ÞM.)$¥áØÔ’FÒJ:I/$£d’Ì’E²J6É.9$§ä’Ü’ÇðI^É'ù¥€”BRذtQ)&Å ï”4×Û¢äÒ†’ý —3œ`9HÊK©(•¤²T1W5\Z]j¾¬eX¸ŽÔ5 \ßðdCi$¥‰45+ÒܰYKi%­Í®­´“öÒA:Žèl1U¨Å‰áÿEšüt3ëè´V'Öœ¸\Öy+Þ¬Y‚aÌ^Ò[úH_ùJúI e –!2T†Ép!#e”|-ßÈh#ceœŒ— 2Q&É·ò¼äùQ&#‘L‘©2 ‰e†Ì”Y2[æÈ\™'óe,”E²X–Ê2Y.+d¥¬’Õ²FÖÊ:Y/d£l’ͲId›l—²SvÉnÙ#{eŸì—rPÉa9"G嘗rRNÉi9#g圜— rQ.Ée¹"Wåš\7úùUnÈM¹%·åŽüfTyWîÉ}y å‘<–'òTžÉsy!/啼–7òVÞÉò^>ÈG’"’#R"R# Ò"Ò#2"2# ²"²#r"r#lÈ‹|È(ˆB(Œ"(Šb(Ž(‰Rð†|Qeà‡²( A( ¨ˆJ¨Œ*FUTCuÔ@MÔBmÔA]ÔC}4@C4Bc4AS4Cs´@K´Bk´A[´C{t@GtBgØ‚P„ÁptA"ÑÝ'¢ƒXt‡ qp#=€žè…Þ胾ø ýÐ0ƒ0C0Ã0#0£ð5¾ÁhŒÁXŒÃxLÀDL·øßãüˆÉø S0Ó030³0s0ó0 °‹°K°˰ÜìÕX…ÕXƒµX‡õØ€Ø„ÍØ‚­Ø†íØØ…ÝØƒ½Ø‡ý8€ƒ8„Ã8‚£8†ã8“ø§pgpçpp—pWp×p¿àWÜÀMÜÂmÜÁoøwq÷ñññOñ Ïñ/ñ ¯ñoñà=>à#… ©ôb"&f&e2&g ¦d*¦f¦e:¦gfd&™ÎÌÌÂ¬ÌÆìÌÁœÌÅÜÌCó2ó³€|Ï‚,ÄÂ,¢,Æâ,Á’,EoúЗ¥Y†~,ËrôgÄò¬ÀЬÄʬÂ`Ve5Vg Öd-ÖfÖe=Ög6d#6f6e36g ¶d+¶f¶e;¶gvd'v¦! e gF0’]ÙQt2š1ŒewºG7ãÙƒ ìÉ^ìÍ>ì˯Øý9€9ˆƒ9„C9ŒÃ9‚#9Š_óŽæŽå8Žçù‰9‰ßò;~Ïø#'ó'NáTNãtÎàLÎâlÎá\Îã|.àB.âb.áR.ãr®àJ®âj®áZ®ãznàFnâfnáVnãvîàNîânîá^îã~àAâaáQãqžàIþÌS<Í3<Ës<Ï ¼ÈK¼Ì+¼Êk¼Î_ø+oð&oñ6ïð7þλ¼Çû|À‡|ÄÇ|§|Æç|Á—|Å×|÷|Ç?øžøÑ”{(UÕKibM¢I5™&ךRSijM£i5¦× šQ3ifÍ¢Y5›fךSsinÍ£6Í«ù4¿ЂZH k-ªÅ´¸–Ð’ZJ½ÕG}µ´–Q?-«åÔ_4Pƒ´¼VЊZI+k ÖªZM«k ­©µ´¶ÖѺZOëkm¨´±6ѦÚL›k m©­´µ¶Ñ¶ÚNÛkí¨´³Ú5DC5L®]4B#µ«vÓ(uj´Æh¬vW—Æ©[ãµÇ?¸®îø6n+œè} E‘^‰³“¦{75É“HµýµUlÅ–ãX®-Õ±;$Džu¼£oH²³÷Þ»Ù{f·ÍÞ{ï½÷Þ w8@Lùǽ¸‡ï{â4N´ŠVÓ6´-mGÛÓ´#íD;Ó.´+íF»Ó´'íE{Ó>´/íGûÓt DÓ!t(F‡Ót$%*úÑt KÇÑñtH'ÑÉt J§ÑétIgÑÙtKçÑùt¨þÒEt1]B—Òety| ¸‚®ç«Å©àº–®£ë麑n¢›éº•n£Û麓麗î£ûéz¢‡éz”£Çé z’ž¢§éz–ž£çéz‘^¢—éz•^£×é z“Þ¢·éz—Þ£÷éú>¢éú”>£Ïé ú’¾¢¯±ÖDC it"ƒ.d‘ÃLÅ4LÇ ¬…µ1ë`]¬‡õ±6ÄFØ›ˆ“Ȧø.¾‡ïãø!~„ã'ø)~†Ÿãø%~…Íðķ•Š0ДPF/~ƒßâwâüò{üD6ÇlÌA?¶§šyÀ|q²Y€­°ƒX„?a1–`Ãø3–bk,ÃrüÅßðwüÿ„‰ ª¨cu4`aFa¯qšpࢅ•ò„>„Ã8&° «±MÜ¿-¶ÃöØ;Æ­°3vÁ®Ø »c쉽°7öÁ¾Øû㈃p0Á¡8 ‡ã‰£ð/cp,ŽÃñ8'â$œŒSp*NÃé8gâ,œsp.ÎÃù¸ÿÆ…¸ã\ŠËp9þƒÿâ \‰«p5þ‡kp-®Ãõ¸7â&ÜŒ[p+nÃí¸wâ.Ü{p/îÃýxâ!<ŒGð(ÃãxOâ)Ãçø_â+|ÍÖ`k²F Œ±KëÓa'˰.–e96…MeÓØt6ƒ­ÅÖf3Ù:l]¶[ŸmÀ6d±Ù&ì;lS¶™ÚötÇuš¦7*n{BÏ¡f˜§–•§ÁFý¡ç¦kM³ê¹NÆãž_u=žjZµš¤ú*â"ÈSflÒ}n]ÜNFÓ¦´©9USŒJÕ¤™#î)~#ÝŸ8ñÄ©_¾åÒ,0«â®š²¥Y ;íØ`P„É.”¯iJ/'6™ÁZEŽÎ¸ ¥Kã%-éïI³Dvú±éªòšeÛfg€Ôt bÆ=1M,Œž™a­j¥åÒ¬Ž –G¯6×l6M6ÔàI‹3íVÃd5nfš·|ËÜâ’×4)0Cj5¬)¡SK&[gøDÕ6›rü°%îz®—jq_ÐeLÏsÇm>¤c¶ºbëE÷Cù²æŽ;UÜ ‘IÜjNN£ŠÏ»Ä-°}ÓÎYޏ$úâr*®{Y¾2´ÆL›‹k%k¸¡Ï§ˆm»õèf(.e]‘sÝ3í ¥a%è\²E~Vô‹@>³4(*PPÀP ¬@¯= ”èN€¡x jx·’èVÌEÅSP=åSP<Ý*TC9U ”zAÅSÔ@½2”D^‹*æ‚ ÕÐΊÙPñ:/Ål¨áÝ:AÍ÷¤ÃVÅv«£iñ #ËdË‘Ö ’và7Ìgñ3]mfD,p±ºÜ‰.‰<ñÅÓg™õ°%­—´kŽ´öHªjyU›g,g¬"6D(éó›–X‡f•‹4¦ä‡Nj„7ÅBô`~Kˆ£j‡ÖনYfÓujÙfè'‹ŠOmÃbÕw Ìï°Vd³åúç¶ÑäÄÿ[^C3æˆeõä FY¡rojžøâ¥bj^¾ÜmHÓM±Øå¶¸#ãO÷ÉÍ-mJ›e6Gl>‘­NbÌŽþÌUñH÷'#¸´©~¹ òØ ?òãâ‘ÛÆTocšyÔÅ£s®Únê ÈÎkÓh3¯bzhˆGj °ìOY±I$±XI,2KîÈÉfkI›ßƾbwn©âM@nTîØ¦S³ª Ôk[… 8  ~§NÜ©§“€Ü$ A›ÎÅjœ§^Ò’ß–ðP”p%<,eÂà ˜ðKþP&<œ$& /mcoÃËÚðªIÌÄ>\÷»ú¢ý=ÞÂÅ^ª`º¯_Z“Ç6;4‰ÝIœ1£EksËL-›¡ˆm\š¥²6ŒK¯¥5‹{Ü·ü̸B©eÒqUl¦¬ O”•ØŠkϬE>¯ðYå^#Ÿá~ ¾»ø‡dD²<Úð¹ !>œÄ~vÄS8ç &G½¨º¢™Õ*w‚éq¥ië`ë¸þUÜêê‹ V sý²^ÅÎþ@öfÜå›Vôedc¸Í¹k°ÉëÒi†%Ü¿¥Àbl.J›×ÅDË£¢)tI°-ÍVËç„f¥fvlv, ;¶¶Ò‰fÇ"‹7\¶$.¥Cf˜NôivâE¾•hÓ–¼Tí.s2IÞž$WIZ*ə᷇ƨDÁ×£RÕQÐQ3ˆj>¢l4Ý–¡;aÇ„%þ%qÜä5ÜT\ÿóé„™ª"b™MZ®}¾¦ýŸxÎmŸñ°}Æ]=ãñ²•¦PT¨;¯QA£É·†FÝõhTÒ¨¬Q¯B=³4Ò=J#oh¾¼fÉk–¼f)h–‚f)èH :¾‚æ+èø š¹ ™ 𹍙‹š¹¨™‹zŠZ£¨5ŠZ£¨5ŠZ£¨5 ­ah CkZÃГóbh CkZØœg=¢GèÑ#zôˆ=¢¤£*éXJ:–’Ž¥¤™K𹤙Kš¹¤™Ëš¹¬ó-k²Ö(k²Ö(k²Ö(k²ÖèÕ½Z£Wkôj^­Ñû ÛU·ÜÆm…i­(‰T%9ާÓôŠgÜ‹tìñ.°¿­‰µ$×éÜ6Jë›ÚKq%²–¸’HÊUnœ{·ãöZºð¤#{ÚÔ¹¨ß }ƒ>‚Á=À|€ 8ßç|ø°–È‘!Gfça£˜„ ¼»¾ " (J#@Ë9²s«F¨ `>gd$èÛ­8Ê›t>åÛƒb§Ü­à>UÝY è f8¨w{‡½ƒúp@gC]w¬ë>S¦¹¤hê`Ô S|§të{}·×÷òƒ|{ò0ß.hÄ 8˜t{}õwk ÍÌ ¤lƒÑÁ$ÝBÛuõÞ^±[ïÐóp¢[xGùQý‹ü¸×÷èÌó†TŽËÎÌvþR<η=*uÊ]°k¯Øó¨TýQߣBÃöŠÇÝIdZ7ìûESÃá€NÀº®½ƒ’˜õIÅ‘þ35:娽K MQ¡¼ì 4µ£ŽÉnƒ ]Ñǽ½¹~ñ„Ô<(véÈí7©?ÏtÎpÕZÏ›§J¹¦æ®å»la¥à4±SœgU ÖÔXÃ÷´K÷äÆËŽG;JT½PM…ª”Ú¹—ï÷$wÕ}V‹ÎXK_á™nQ͇›õb°wh:6H’ a‚Ü4«çÇ^Z#F´@ú^µLÕïÓ0`V/¤åªPS­C+ÁÌ)Ïw-ë4ÍW½‰ÓÄIYú³«ŒD“»òEAÿ]{a·_öÿTöúÅá\üL}‡ÃòP}òìå‡4–Ê­žõÞŠÉ'M”„¼»J€2ƒøD'Ä7§BcùæT(Š92ye&€$PÅ@ ¦>˜úf Î|'Ç2ˆ-36 ƒHbÌ%)·*d}¿8¬B&G5$ߪU˜±`ùè.2ñ0Z%Ð*ÁØÄj…ù&væOhñ™‹Œ} ±Î„ô‹À9J€l<ãËŒÎ%ƒÏG?d‹ÍŒ¢ØŽå ÉyŠ1ÖÆ³#" ô‹0–ãÅ$²¾Ì ­æ›™µL-gþâ!ßeäêfüÕ¢ZM¼TXdò¦>û6¥öÝÀ»–ÚV» 1ÆZdæ‘òmªØó^U(Š1sôKÑO _jfž!o†ùf¶ÕpÉ|»Â@(Š€b 9 /€âÂ0ÈB¼u °k]„È¡ÝàÚ½~ÐÔéMÝ~ˆ3Þ0³â(¡ùÞ%dF„æß!3"ôíŽÂ™¤Ø)æüæü‹EbOå €çôKìImÞXòáÌBø2 ÷G`ÞÎû< bøóH°÷ÃñbË/…϶Ú–X%˜ylÇâ^hMÀ%œ¬¡°>°O ÎØP@¿Ä2ÓºdK¡‹@<{3 Ì-µ\À ÅZ äHm«gùAœÙIjÇZ~hÍ0£ ZÙ›DZ˜f˜nìPB¿ 20ÅÝJœu¾ÛÅÞâ'¡“зc¡‹´­¸™ì½…û#ÄaOo{¶§Îr`W¤‹5²_}'9ÀzØSolŠ÷> °!8ã Kñî¦ë“ 'µÀ=#Ì=£ú!‡@ŽÄÆÃzàÔK…ÕL¥ýþÃX»2XóÔ®ª] ~œ%XIä•È"­ÖÎîñ~—þ†³úJ»%f ›ÐÁÁ-ÞPlÚ“Àé›:8±8sãeŽ,lš¥AÈ(«ŒúîæQúkÏÁ±ƒ¥ƒ# d¤ïC'{ì`i™Ðû`Pâ(%¥¤£”4½#( G)é(%¥¤£”t”’ŽRÒQ yèV0cá(%¥¤£”t”’ŽRÒQJ:JIG)é(& 4K¤£Tè(:Ja…ét7(u” ¥BG©ÐQ*t” ¥BG)äI±’)2¦©£Tè(:J…ŽR¡£Tè(:J…ŽR¡£˜Ð nPÆ(ð} HI (Š 9ä#@Ž9ä#@Ž9äC ‡@9ràL D<=ê÷Ö××ïÔ7ºåa¿^êzS×#UOnû~¬ªDUÙ•­r¯Ýë÷ú;ݲ|œ·Ë£‚ü¯*©ª@U[ªŠ®¢ï°·Û)ò­­¢?¤±5Ó)û;ƒÞN¦ìÃnï°Ó>)5¨4©ª¶U¡ªPUŠD Hª5ÈT•«ª­*ÍBŠŠP,„°vó#&`ùÖhhY÷ÐÒ)‡íb·|¢¢¨Y •M¨lBeŠˆT¥X ÅJ(V¢£*ÅE(.t×´L¨FnP³éš9àåÖVïpk´·½[üY»œ;œz>ní¸êô@à«ùN7–^7–v¼ïô0ÌßÏ¿ë›mµ ¥-1œÍ\ù5/ök¼PùÁd!?ÿÌã4§ñ|å7içós5 øškVgjM‡›ª¢^^¹w¬«^Œ«¾v‘êÅEª¯«^Œ«¾vêÅw}Í{vn=ÀÆ=¨ÐÚ*1zÃŽ.-»ñ©—ãŽq-Êq-6.Ò¢¼H‹q-Êq-6.Т¼@ }ri‚ÍÒBíÕ¤*¯†óÚ óå¹ÇjŒN^ÑpN{M¶¹Ò}jlÀgÓY¸i©,Ü´,G–åæy–£ó,7-Ë‘e¹yŽåèË@Ç`ùÀ<¶»ãAµ;޵QwƒÜYe»Æv½²«>Û€­`+Ù†l#¶1Û„mÊ6cÛbû3¶w´ 3ÁV²Ù&ls¶m¶[l;•Íy|Îãó‚íveÛ>Û€-÷osÿvÊ6cËùÚU¾ ­âˆˆÛ î_d¯kŸ½{ã½9Û”+_“ù‰6/çoˆ/•Óö¬!—[·½7µ}*_Qù–Êdí!ÕOÙãÕ©^¦¢¼Ïuû ï›Ú?¨¼¡ò_*Êóš<¯Éóš<¯É³ì}]»äýËûçÙEJýêå7ÄÛÖ½—µwT&¼¿{Ïj×)öÙ>dûœìÉþí_½gg?]\h5èùRí-Õï¨LÐÜNÏînˆk,ipb<'/ɳØúÀ;%V§Äê”X«·T_¢¨'ä?!ÿ ùO´ÿ¤vI‡ºþ‡bpz¶ð}öh5½Þç5A!þÀö÷Þçgbñ?­GÞ&…þJ×/¼Ï¨~®ë‡ºÞÐõSÝúTãRãRãe—«ú¶S/êzAÕÞo½ßÕ>"Ïo¼Oµ½ï­Õ~Dvƒž•ýµwOÛ_ywµý%ù@öÔï ÙO½uý|žWÉþœž•½ë­Ÿ­.ú­}z~Hm”OùW‰Ã*qZ%‘”ç9•Tþ§=©~Jå[*žîyÉ[¥ßúµ¼X¡+Ô²Ró¼ú-Óïïjù˜ú~LõŠ·¤ç¸D½–(ÓiµD‘—hy–hy–jÓÞÕzQͧ²Bå>•GTêç&»I¼nR†›Þ­Ú Šu}â/µ«d?d»8ñ¬v쵉gg×WZ‰WµûTQÙ§òåÄ«³ú•…ÖUê§úÞþ?cUÓÆ…gf »6Šˆ{í&¶Y(‘”ÿ°’-•4ÐÆ[VÁ&²HO­²‡„¶ŠÔŠ8äÒJ=qªZ¬!ªì´ 9¶§Þ¸ôí¹·z¡ßÌš ª²o¿÷vÞûæÍì›ç50,÷€M` PHÂ$[Y‚%¤6#yÐݱK—F„½0êÚ7û\ÛÖ3Òžº-ÅP¦Ù$l9†-Ç𪇣ÀÐ:² ü¼xÁ#(Fňà#˜¬fÁû 8$4QùOršÄì0|, ÷Fá‰bÅœ(¸Qx_@S1ƒÇ¯Àn#ÍÍB®v; OíÐ)´ÍZÚk¨/}·=5†ºÏ²2ªYFÝʼCÿ#’h06€- IªCb$ A4H‚”úqz ‡2äd§Ñµ¥ïêl!þIü^|#¾ߊïÆåYR`…¤—twB:;”ž”yˆETúСo úl²ÇRÿ°Ô_,õ[KýÚRó–úž¥^±ÔaK­ÑÅäY]ý]Wéꇺ:ª«q]½ «1]MuP“^'*y&tZè¡CB÷ÑëÛ*iù‰ÎMAÇÓÈí³ÀŸZÍC·_h5æsw4ïš îü!ð޶t=ç]ó–ö³Èô{"S=9(ÿ*/ÈIù¢ü¶<$G刖r—Ò©ø”3J›âU¥Yñ(L!JWí`?©œCW³›f×ñìc\CAFF²ÄyCʱÜlšæœç7In1èü=®Qïû9Má4u:s$7—ö;cz®&\sÆõœÓru>_¥ô¡‰‘þ¬Q2—¯ÑîºßëtNåë„ÒÁûåÞ†5M>'_õÐrÙ$ÝwþDç压WŒST¡¡õ£Ë¯`'}Î7¹Ù¼ó]ŸéŒð‡ƒ>3‡ÊÍ­|³ÑŒQgcܘùºwg®q¿wÍ0x$¿Q'7‚G‚œG‚/ñúÙçãÆåõ ^ÿ ^uRËUM;äL ÎäIÎÒIÎ’à,58’ËÑŽqä}¢ Ž&ï¿Âé ιS9ǪYJëÿsÑ:ÉÒ½êÔj¦Î™PpÖïÜò;k‹Á`LÑ= :ÒùÂâÍ[ÜK5º.ÎTØV³«¯ÆUΆ*YÍÌå««É’±Mf3á¢aîL*'–ûêp¹ê@ñ”dEžl€¯5]9%\áái¾V…¯UákM'§ÅZ¢ëÑ– I›S–kwX« \èÕÌt·ïÓË¢›'4ÿÝÞ§B“VÝtÚÂiGxh(5”â!üÊxè Üíÿî„Öû”>n„|pw„ÓÄŸùØÀmۇ׼mÛ^¾aß°¹·½¼ðc"6±— Þ Õ&þßøóoó:ð@|£%Û6—‰8S{…ðlË\%ÿïi™©}¼ ˆýòÅ;C'.Î^¡`qâJ£mlŠ Ò¾I×÷¯õ¯ÿ/ endstream endobj 118 0 obj<>stream H‰t•XWÇÿçžy<DÅyæ) ˆ`ˆ… Ö˜b‹FcCADDì½#6”»¡Ø×(Ñ$ÖµD£±kv5ï ¨1!EÅÛ{áå¢.ߺ»Þï;3ó¿çÞ™ù~3ç@jb=º÷j¶.wù69c‘Ñ'.%6í–÷൅n7ãÆe¨mÎ[BÚð”ÞGR"¯¡ROž˜påbF6Ð Têö‰ñ±Ãú&•Œéò~‰rÂÅÕQ®7n•: 1%c‚K[‡–RŸjU$§ÆÅÂ=¸ÐüÔRb'¤9ä8:ÑEr½:*6%~{T£FR_Ï›–:&#$½è>ÓI¦sÒÒãÓfUÝoÚUÀa*ˆ3):ù.ktáð#ßçþ| ÂÝQ'œ!D ¡Nóñ£kê¨TT»Mw¹²/…ë£hw4èHé“i~õQEz›Tòª†€¢/“´ª„^&¦ÑtZJË)ŸŠÈBvÑOœ§Åu&f®Áþ<³xçs±â¢tW*ƒ•e¥²^)Tö(•kÊ/ºýºãº_uüæú=S]UOÕO5ª&5D UÃÕÖj¤¥vTSÕéêFu‹ºÃ 3Ô1Ô5 &Cˆ¡·!ư°Õ(ŒFW£»ÑÓèclh 4»cñþÂßÍß Aš‹æ¦yhÞZ}-@k¢µÐ"µdm†6GËÔi9Z¾¶CÛ­Ði'´³Úyíšö“)ÒmjobŠ3%˜F–ë*DEs«°ªÖk¤5ÊÚÎÚÑÚÝn³Û«¾ò^È£]ô=—NJWÕæHK¸P!¥–ÒS‰Q²•\eR ìTö)W•r]‘î î‚®Âo†_žê¢ÖQ½TU’ÂÔV¯$I…’Àö×ô2 0dW¨- Ô3ú½"0Ä8ìõ zTÈÖò´íÕÎHW%ÖÕâMIåTAŠ•$ kKI ÚÚÁÚ¹Š€ý íC=é¸ÝBC€JWÉÅgÉÇÁ–'õˆª¨2¸2¨2°²1`w³×²;ÙQi«,«¼d»n³Ø.ØÎÞÜ´¼ü;ËæÊXqc@Ùœ²g7¶–—j¯ YweYeSoŒ-M*XvàÆÑ²%¥[KsKrK J%›«ö–z•Œ.,UhItIxI€¥³¥“%ÒÒÊa ·„Z-F‹¯ÅÃBæ»æßÌåæÛæ›U»Ì'ÍĠÍò)æơ̻ÌÌíÍíÌf£Ù`öó9êvXÖØaýfýzý:ýZýýjý*~Q¨ÄkCì|¯é}¢äßš›à ƒ}dœáb–¸äµÌ2n¾Œ7î>W\üJyóÊÿÙYÀ«¯óÞ¸*ëÿO£s0WØ‹Ÿ0K°ë± á†,‰g6rPûXŒ•ÈÄ×Òwïa¶ã!à °ßâ$>ÃPÄ!Ãpñ8…Ó(ÆYœÃwø ¸ˆó¸€Ž»X†+¸„ËHÄ/ø „‰$còŠÑHC:Æ`,20ãQŽ ˜„‰˜Œ©˜‚½ÈÇtL“Ý`&~ÅïØO¹´’1)¤ƒ6ZE«i ­ÅŸ¨$Ò“#ì´ŽÖÓúTÖx>Õ 'r&* B<ÆÚH›h3m¡­´¶Óßi}F;¥Ñç´›öà)¾§,ZH_Зôí¥}T“jÑ~:@®äFµÉe¸AuȃÒ!ò¤º´ˆþA‡é¥cô5y‘7v¡ˆê‘§äKõ©ùÑ7tÏð7q‹’J2Ò)ú–NÓ:K礓?F&:Oè"]¢Ët¨5¦@ ¸MßãŸ(Å5ü3Jð/\§{²ÔïK/@é=¦'ô”žÑs &+ÙèOª¤&Òç!HöŠÐ ¡޲Ç8QSá,\DMQK¸ 7Q[¸‹:ƒB„§¨KÍ(Tx oQOø_Q_4~¢¡PÅ"aFjNaŸÂE€Ð„I4E Á"S,༉[r+nÍm8’ßá(nËÑÜŽÛsîȸ3¿Ë]ø=~Ÿ?à¹+wãî܃{òGÜ‹{óÇ܇ûò'Üûóȃ8†óŽå¡ÇÃ8žx8'òN⑜Ì)<ŠS9Gs:á ËãxgòºE?Ên·Pºýbé÷Kñ9v‹,j/ñŽÓmìÁ8Y8†ùâwqGTˆ»âžx(‰?Äcq_<Àô³8Êî8„Õ¸#ke–S[,¥v4Ž–É“C㱦кË:v`OÖ‹'â©x&ž +{Ë~ãÌõ؉}¸&ûr}nÀ~ÜUváÆl`£ìF¬q‡p3忯ÁÜ„›rmçüGðÛ²·;àeÓ—ƒ„<ˆÿªx™dEç w¬áäìR³–«[m÷:žu½¼ëùøÖoà×P5ý4S£ÆAÁMš†4 mÞâ­ˆ·[¶jÝ&ò¨¶ÑíÚwèØ©ó»]Þ{ÿƒ»vëÞ£çG½zܧï'ýú8(fðX Ÿ0ÍË/(ܸió–­±_õÁMWüíÞž$Ë6–±ñ' 'I@(ŸÆ€@–Æ`ðØ`Ù!™/hm(&M ´=\ Ít¦M!I˜Rh8Ce¾S’†B¡ á#PÚ&¤¡¡„)Öõwgcp;Óéßk¥Óûؽ}ûö½ß¾ÝþËÒÎ_½±K5ínÞ³÷×ñ–}û<ûѹó.~|©»Êé®rº«œî*羸»Êé®rº«œÿ—*GÞG¹Ö¯‘òDå­ÿ„ßuó?1ϸaê ?r‰ötüÚ?è05`•h1r1l^4X‹ÿ…4äú‹¬™¹Øð:ígù"ªA&f#cÒ`&§€ße©d£ž@€Vz”^4Ö³ J¦\ "«[¤cÒ‡Æ fO¡öʧšJ{¥t– >FΑŸ6ü$Sð¤•O†ÝéÔ‹FÐD*§°il}›Î³B9h\"7hf^ÄÚLÇÙz>‡‡o‘ŽÉÓ— Ì‚79pŠ…/‹`õ3ô2Öñ9²?yyUÊ7w 9ûÓPO!`Î ìð äÓUúŠMgsÁUÒ"!‹:#Ëh†ÍÑš„6…¦Sxô<<¶‰b|³Ôx+qç òÃêT„õ×ÀW­t8‘‹LîÏJÙ468ôOäÜ(¾’oá· …hÃ¥ÍÒé¢tIúB”Š¥âš-Ù(4ÊŒzc©ñªqØø>íC…4ïœAOR-Võ PpP9FÑ6Ñ«ˆ¸½§Ú„½DŸ£o­†°Ñ¬˜Íeß`Km{€b'Ùiþ¯å¯óVDU æÞ"H”ˆ ñ´8 ÄÈDC"–xç|“ñŽñ©ÑoöÏ=ð¨Ÿ"Àø•ô}`ùO1ãßÐöƒ.Õ¿Æ&3}ý€T~`ÇpVú¢†Õ±Ål{­c€Ó²»aÍ! á9f)7á¸8”téË}ÜÏòr^ÇWó |'ßàâgøY~ž_EÖÝAôg¢õ• €"“€ ­lNÚž. ýK…Â'¾'¶Š]â¤ø«¸#'Ëëä—äŸÈWå«6²¹lcl¶zÛmqÛGvÉ^iŸkÎþ¼ýû^9TÇNjBvİÒ>|N£÷Ù!ú˜5J™|«àÛpõrhô3öž\F?àÅ\gSx–ôw`Àê%mg_âÜÜ ä=˼b{ “ø¾T¤±ÇÄvÑÆ‹ÓBâW¨‘ß0ç±eŠm˜m êöo²± êp^¾Â3éß‚]øæ[߀}_O¼”†±‰æÞðÏq®£t`Ð|äIÛ,/æ?gË¥ë<…emü-/¦¹6­d»y¹t‚]Aæ@¼”±z>ŠÍÄ)z 'å5>¦ðU´YÔÉgØEœ%år=âÄeàö\œûÿ£®Ø´”û“¥c4ƒýÙßʽ4‘/¤MÒAögjfÏ à6¬\Ê[…\ØI»¥R‘L¨Yj¦CìÒÌK»ÄRö{ɵ=A·lâ )&½ã‰ 8¹Oûø4Â8.MOÔ±"yù,²÷ÛðP2íÀø@ŒFr€ò ×!^{Û’åa ×dz’ÝDƬ‚—†³B*ç}ioWl™¸ õŒ¯ Œ;¦xtѨ‘#† ýúGè÷y|­°§ŸÚ×­ôyø¡Þùy¹9ÙY½23z¦»Òz¤¦$;“v›Œ=dä ©á¨¢DuQ ––úM^­… öATW wí£+Q«›Òµg=çþ[Ï@{Ï@gOæRŠ©ØïSBª¢·–¨JœÕTF@ÿ°D­VôÏ,zŠE‹‹Iãvc„Ê©/QtUBzxI½Š–à}±dgP Îqú}s&ƒL¥g«‹b,{,³ž*Šqr¤Â*=O- é¹j‰i‚.yBµ³õŠÊH¨$ßí®öûtœ¥ÎÔI §y­.´¦ÑmAÝnM£Ì3—Ck•˜ïˆÖwÑ̨7e¶:»vFD—j«Í9Ò½˜·DÏ^~%ç>‹—÷ FV?¨Í—´PÎ<Åd5mµ¢¿VyPë6ŸÕÕxÆrO8ª…1uƒéÅœA0Ä4ß\Jû¢æ¨!S¯èIêµ^›ņäi:M]ænÊË ´—)/¤hUÕ­ËW«kKzÇ2I›ºlwn@Éíªñûb®ôvoÆz¤u)©s:ueu7©²©îd¦EêD„®ÌR`IDÅBFš9#I›5Ýð©f¥ÏÆ6ÌÓ“‚QÍUdÊÍñºìÁMS»…:5ª~öiWIm‡ÄæqÝ"“4ƒ£3À ¿Gë^¯>`€ö 66޵øa~ß’8®.r)øƒû¨"‚aÕEƒàs·ÛÜÕµñÍ£¯¨Œ´ó ÍÌo¢À oµÎ£¦æÈ=M¯é¦fÅ=Mçð¨Šðm¶®t½tGAç7Í••ª/ÒYÖQÏi×—MSË*k"JH‹vø¶¬ª ×®Ù©ë ôŒ`DÊçÏ—,-"qFgg“‰¤èƒ¯ÍŠäÙq»¡hI˜Ö]ÑÒögµÓíþÅ¿™£¬¿ûÃ:ÌÔ‹¼]ùÑ]ø.æ¥h ¼¬ªFÓœ]taàŽ¦…U%¬EµÚ¸±b¦ª¸T­…oå[µE¡è½ûÖæëá†j,¢ž!Z9Mˆ©lMe,ÀÖL«‰´¸ˆ”5U‘&\?‚Ñ Õ±~ÐEZ¢€%åR“SLŽÊ"½ 7S•ß Zai…%°øYqF–ÌqOÆhVœ·Ë\– ?.=Ø| '“&Å8îlQ­Úùˆ&’Eœ l–Èi7‰=Œr6ÙÔs’XpwÒã‡r¼®·—»¾,žÒVLã@»îâñÈ`wº;݃#AwéÈÝ€yUÄÖTc\ÃÅXT™ÃèÍ@åã~æqz’Õ¯ˆMb¶AŽQŽÇÜun1Ô7 Y *,H•ÒÈó°Zè•2RCò ½^Ÿ35ÓéLÍê×'›eOÍè“g/pé#%gGÒ²XVœýçÕåuÅÏýž».Â>`•7¬Èª(…­(k}LªQÇDÆWñA!¦Å¶FÅŒµk5âcŒÂˆÆVèÔmœ6M1Τmì_ŒZêd&¯¿ûÁ"ÁþÓüöÜï>νçÜß9çû<Ñ©±ŠÃMù愲!A‹öX¬mŽ^-F_6à…ÔßçlóŸsÖ_§¹–ÌêF‹r;ss;»}m5ÁcÁ[Ì ‹Õíæ`ø±XÃÝø?ŽùÈçKR”„xGf†Ë•åJÌrefŒt$Ä+êH—+=×@UTÂBÃ6EQƒ…°P{zšË%š O著ûÓ¥Ùüacs_[ûVÜùì]¸âÏœ0Â~>d¢#¯ôÐë?\¾´àè’7æÎ¥ ÆŒ©<“4 ¡õáÆ?np:7š£\øœ9,µ ð ·S}m©m”ëä|1ó¿îœÜÎòù©£­nóUU6çä¨÷r9üœnKÈJÏš$À©ªî`5]M}͇£ÇD¤û‹§m[4)3+4âZÔµfñíûËK&GŠÈ,^»ý»Rî‘Ù`Ö¦Ç ¦”KFL£vã¤Ø¨ÝòD¢±wèÁ¸ƒñâzqcä>ÓÞ ÉlɈÅè9È8>k*?qÄtt¨4]|Í´Í$¦%ÆÅ'dI±A&1*Þ)±ðDû 6JdlÔ°›*ÇŒ2EÅzÌÌ\ÁF7 »=F–KŒ» ó˜Çp?4ÄR’9IHzhoÔš<–ÄQd7Û…[ tóXo3gê_¹sV—¯»Í‡æÚÎ6sW¹NÖN«;µÍÜÝf C{ÉIå>ŸÓédú¯-+ÔΉÇÙ™8ÒÁéšžf‡'¹+AO;ÿ åTé˜ß0®Ú»aCbRÏ?“§Lý¨þ£O¤÷¥ªu…/‰Þòg—wiKMcu5[išýÊô%“SSR6EŽZó\eý…ýAKʼiiŽa®‚Œy¯Î©]¸p! ôk„Ýò{4Œ¶yRf„”†¬© © >`;f<3¢iÄ=ÛbL¤È²šF[‚”HÄqÈCK#ë9k®°^d=d†Ÿ Í75 ÃÏ­0]†ÓÀ'™GgÑlÜiÂÎsóÏñ¤äsvµuÁü·ûI)×¢‹ó)IÕíÌÌÈ⤲e‰œJŠš¬=zòÄUžqêwFíÌúÓܳÑïo OJÉÙó¶%3yZB¥°|;“·ôTnïn(³ÇÆëÕS¸³LñÖÅ-Éù·!Ò ¿ìÿzíï/sÙpõèþoÿÞ½ÌpLý™Ïˆù| Nê™MS Mi8†/IuàÇ‚xIÑ'B¹»~á3f’ü´X®FQ‹ì¥wY “„::%Ôi{Ä(êN‚Rn¾Åë·V‹ùoI~– ¹(|À›À ààðsÌ_Ç×rýð3ÉCkd¯öö[ ·ÐE`!Ú‹¤/ɧ¸qŽòòµÑTô/„®”:*@ Æ?@_>äoñ¼í]X§¡ý!Ú=êFÐ}í¯ÑŸ=CÓ8÷6±sýZ¥PÇR ³˜Š=ü«€˜ÇíÈäý¬…&²Í€ñéh»°ÿ}¾ŸJ £û >áëgs_â¹ íÃ8ǯ$ÒºÑF­¢d|u­Ä—ä%á¤ö"ì?Òk7ÐB—¸Íý6áü}gz½g\1ØsË@<=Û3¨„‹b:³@¾x€IÂuZ-=ûû’fÈ·i‡XüT;¥Úl íÎyZ®Ç:<÷ÃO3¥ƒ$vQ6Æ6*ûèúI<¡cBíT’èð+ú'¡s½Î…zëÇêznÓ0´ßøÞŽ€Ÿ¸oGÔT ¿Çãëo7X 3„õUØ÷9¿wæí¾=s1g)‡þ5:üd‚¯.à^ß7¡k[=•´¨·ýàg@çYtß×Ñu  ¸ |Ÿ½ <‡ö,à €9Ì€½#À#‡ÎWp~pèü78ÿù]éœíµ!_ç˜3LÆúp詎+'ip8Ž9÷x¼pÎòstó˜âœ Hß+©A¨lÜNΩ~Éc¨¬?Á­€äqǹϥà¡lH¯˜NnÎYη€ä~ÑÏxä1Ñ/ŸÚªá|KuÙJ«û¸^¥¡‡ÎÈٸ˕Z%·Mh§W MÄóä<$k9ÔV¶Bn¢º?[é—åR«/µ2Y>¡Ý—‰]•O•zû9¬©wŒKŽcÿkÿÿá†|‚JÑþJnÕ4س›Ç„ÚÎÆ±‰þ³@bp²ZÃJÖ¨Î'³BÔ¥ðXðÐdeá:W C JBÿ|ù´NÜA¤vz‰U¡´2“†°"ù^ ÚÊÁõC– àÑ÷87˜Kàë`És~§tÙ{[þ‹tƒ“Œ×žŸõú€­Cç«öJ??¯Räüü>Oµ–üì€ÞˆÁ¼,õÚ‚üˆSûy~ä9ŽçHžç7KÌ,Ÿ®g鈓z¾N}±ý6°(Ƙç¼…øßÄsöú«2‡Š•+ô²8‚Š”ì×AK”t»ô×ÔB­£¯ž¦j)÷Æ;uTG=Ÿ}Lyz¾ù˜ÆèugãõSù u+v|¹õ®ýšÇ¡ƒå4×F©”öI»µû°ãØ£_Ê£×õ1¢ñ¡v]*Â;2j¢¸GÏA%Ò^­Ml÷øÚBmµü:¨L ’~}|$ïãçW~Gw%Ø(×kþ®@>æwo¨Ñ¾Rÿû›é¶ts¢è®|Ûdê6-Ð×Ö~Ìu©^í¼tŸŠå èô5›µö>xúBç0÷t*‹ôš}YþcÅô¹ê£<µû–Ó]5}|¯¸ÿ±Ú5½^W¡¾¡ñ1¸µJçâ ¹Z»"6RL ‹-ˆ»­ÚMy3ä2€Û®Ëÿ°_­±q]Exì}Äv'8Á6¤W"-ù'i›”´QˆjBúHœ”Váúî]ï%»{·÷Þµ³´T@TBTJ¤èÚ´ˆB*Ñ´ŠxT‚ªˆG üˆT…„Z•¨IÍ7sæî^{Ý< 6ÖÜóíœ93sfæÌ9AßÇù‘÷j$û ÞgüžøîøUôxöIªe_¡ZúßTËœ€üu´9uç( ¼}ö¤öím©,øo¡ç¢¾Í[ƼgÝ2{<{DìmøÒ¡Ô?éÎö£´½äŽŽ§Q+÷È=ý(êﯠӆè%Ðf¥qCíݘ{5z¿¤–µÝüÍöuô›ö§Ó}à-å;7ýyé½´65Š>ò¼)^¥ï¶¥Ã©¥4›~™§Ÿ§?¶Å=¹œÞL=K»SÏÑ9á¿B>äÆÚK›ÒßBÿÞ„>L'ÓûèþÔéíÔï°‡õ9ð>‹ùçÁã/ñ{ã/ˆÎýÔcèü Œ_}ôuÐv™ñí?foÇxxÐwî1¬y ¿×?: ::zkþ‚ùAÐü>*pm7½k®ø¸ð}v©#÷-öãœÃ“óï¤Kã|^dœwÅù¿Ø˜xƒÎMâ}$îÒ Þ™ñk’„Þ|3zÔ&îËܹK?ÒQÞ¦/žâ;ãCèƒop/æ~ˆ^üsôÃ0V1òôEÈLÇ~é|£%©íx3µŸº|JO¢">Ö¢µ¨E-jQ‹ZÔ¢µ¨E-ú?QQê|6ÓÝ”¡vZF#´ÿc[=D)ü&Ú—>ˆoŠøß;òeÜF]m7+n§îÌiÅ)*f~¦8MÙAÅÈœSœ¥«²cŠѱìgwе‹žUÜI_Yr\qWú%±Ìx1MöL*î¦|Ï1ÅK²Ï-Z¥¸‡îYºšw&ÿî_ú â6Ê,»Fq;e{)NÑõ½yÅiêîý¶â ð—g©§÷ûŠÑdïOwÐòåŸVÜIÛúÅ]íö²ŒâÅ4ÚwTq7­ë;©xIêîåŠ{h¸%ù⃧{©ˆnöȯB±Æ3,Ÿ“Ñø_k–XHzå‰þóeù=#º jÝUY_tÛ1¿(º#ˆƒ_&2óå"èt%*F£ÛQNU"͹jT‰/y $¢EYÏžru”tUlÁ‘õÓjÕÓòœ‰f# yH²6ÃmÄÕÓèúºOä«ò«‘ÕP*¶(Þ-\ñÉ ë{á¹’èkè`g¿zkkü©iKë>ŽYNlO ׬ŸÁŒ§9d™"rojÄÇw sÓm£¡q–mÉ•©Kbèèþ=ÉZQd*rÎL5–e¥ÙI²º½zeY˜? ™)‰7\›&o¡žäbÝ’üjTo4¯ß„óöç¨IÑP•HçæÔ¦K÷‚G–kÛ©ï0/µmI ؆Rw‘dcªžuöÝœw>KƒõÓj•5ú‘™-IFl:(ë׬בÙF¥ë9‰VENI­¾‹Ø6¯Ÿ‘y["¨ >C&Š‘¬=޵W¤†JÒCc߆›úês²ÆýnJêßÏÆeoE‰ö´W­Ç—;'wR‹> ½,Èé0§ê#s4'55øCsø;qs?³h¯(‰GûëuñßÞ&—SÚ=]í‰Þf´îÁbÑí²Þ¢kÅÞN|oƒí¼T{e®çP2TPmÃt+ä&°³í ­ØãÛÀåõÛñý¤ð·³_>7Gä·áo§p'h u MH¥‡ œ«Î7›lW´ç§9>æžôƒ@*ª Òñ~âÛ"®ÁI™­A¾Z·éÔû®‰]UÖ6ú¥«'Š»Z£Ç›Þâi?µßL‰·Þ¯9¶w©5î<ÓÚç'ë7¥±] 2qÎÔ;§«ÝÀ­Ÿ·@z[¤½&¯ge¡xÅ‚#æ&´4:L³½œÖ×ò¤tmãõ¤f¦¬šÊЇdWs#en‹æªh¶÷]î°¶¼‚lX-j´Cíoïf{Xj¿œ¸jM¹põ”<9æf±Å£ŠD–ï:OÎÛÅsni-–}7¶Ë§?'‘ö7\x¥ Ö¥ƒDÝ6ÞŽ{Wýq]ùsôÍHþ÷K6“Ý$îÝ I²¦ÏT%⬿Pßñ+YÝ%íö&þæTU´>·ÂܺЎõ1.{oÎ\ü.äûÐÕ×£Ùy‹:’Õò¼óâÝÐÌûóå¶Èi_–wÛ %_~Ï~¬ÏœIWß'soñX_sM´¯iGt6Ÿã8cö¼Xç/ËÛF”›-Ì}‹ÌõÈÕv„{4ÖÀ·Ìp‡ˆoÐ ´žnÀ­iá;Š_C¸Y׃ÖP'þöЕ\ƒÙQ̬W|­ñªëé:ÜÇL¬½ ï˜ ìàoFþ†å=0÷Ä;ÒùÞíž`4&§s¦^æô´Û²O»¤C›;ôV}›ùúêçóinÒ@f<ÉÀn|÷WÿolÞ—ç÷ˆÈ—`kßH:çjDîž}R%æ=1\—¼²fä `dÝ+b%ž™WuÝµŠ›·×zÊš(¸ÖN¿ìG`Y[ý âväùe«Rt†­1;²/"4ÂʬÝ~±ÊœÐ/cÝèÆk†ðY;lm)­]ÞT! ­]nèÓnn«_ŽÜ+ jVhcø^Þʹ¡7U´¶ž]´HÙ&K~àZ…jÉ.{ad9;° ÂÈsB+*Øe s5ËÏ[¬T7ç:núAhÙåœeCÕ)XžªòÊVT-»ÖŒ°Ü×ÏñjÆE6°Þ†31/šqË‘çBÚ¨µaKBâO»íEkG%Lñ§Š-†l,ôópS\ÈW‹E@ñæK>Œxå\5Œd«aT+ºÉHprB¶â%¯,¿jmøïTaè?ŒWXTkžwÀÂîÖc%¢ &"** vv»G¶Ü`»»»»ûzË«·»»»»½þs΂—ûÿ?Ï{öûfæ›yç÷¸Ì̬ºjsûA».Ú5‡Gq+6½@3 Ì.«ŠCàPœš`çÒ-b®z<šÀè²hrHnÝKÑfI1NÍQ¨Hm>i²ÃˆáÔ&¼þbÞøŠÏ³ˆG®¦|š5„¦63`$°ø+yn)Y"JQ~¿î²¥{5é»ßi´É'™<’¯NÕ¦é. ­ù-‘!ÐÄݪû<µÐ8ÂðviAŸGõHjbb•ýºÏl˜{¼n§ÛŒ]ÂÕ¤Pic4[À¡z•4¿êÐ-IcÅÝ o\tïX¥sºnñºVu ‡ŒÌç¨Ðsz¶ùí„’íV8Uo¾Å› ©Ò&ôÔ„‰&ÛÄ4'K¥ú•ŽJvº’™—m¦¬9|ZÐ.fÑ™ÙiCÒR’³Ó23”Ì!ÊÈ´”ÔŒ¬T%yè˜ÔÔôÔŒìš5#²íÒ¤’ 3KÙ‚‡ßìOi>2“n›WõØ ÍsŒ±0Ì-T ÝÃÓbpW² ¸¬&/…-B5“ñÂ]x.æªÍ«i¯£• âfW…Tî\c(ÅÓ_.À ANMh }ój¿°&Oºr#/ƒn›fš˜„)õ“FË,äüZÒtË|–)¨“¯$)‹R(J î*ª# æ _UŸð­¬w´’ã2' °¤ ©©¸92,ªâóh=O·ü³rEPt™Ü5|U«U7z,4ñšWZ¤±ì5±5’rèNÝ(H1í‚no¾/Dy“Ýæ¢;(œ ä:tŸÝ8Gb…àv í%i•§P B1Bå2ñHË»QœqÎ h>ó¹E-š×U\·8oÓØgwVáj®C—ß?Ê7줓šÜ'Öfi’–yM[ü7zl¦gWqX3åR‡â[¤8œ£ú“ ƒœ¬d%J霟ÐEIèž[­ZÎYŒíÞ=>^þ&ôHPzõìݳwÍ»ßïIЉ ƒÑÎ’Æ[Üβ3¡)ƒ½jÐÀBFP’’Hcܹ2¡r›¹åê4†Ô«[tUÉRÍÙðÉÿ²Ä¸‰c÷;1N¿Kuj1Nß4Õ¸'¢ÅÿÓ!¨9dUûß.Æ·˜bMk~%ÂD¡SfûLá«–ÛÉ7wŠèëÙ ù”]QfÝmÊç@Ùý°aWÂ΄] »v±œ_š)U Áz=(»7£åÓSÎî2çT\&2±¢Ü Mù~óéïËrÑ›…§„ OO « VÈ ¶´’ür£È Õ|IqÝ”±Ë|¹Ñé ó©ìNªÄ*2e½JLtýšüv¢mTÁOØU"0Â(ŒÂ©U¦*TU„{U§"ÈkQmªCu©Õ§ÔQcjBM©5§Ô’ZQk9¯ µ¥vÔž:PGê$/]¨+u %â/Æ”ûq"÷ãEä÷ÁŸ(’9‰úP_êGýi ”Ü þƒ%ï!4”† ®Ã©‘"ï3D¶¢Ñ"Õ³DÚçÐXGãået"M¢É4…¦Š”.UæJ¬fçB˜Ì":]æ+ÓL³§ ¤‡³¤“E4›æÐ\šGói-¤E´˜–ÐRZFËi­¤U´šÖÐZZGëim¤M´™¶ÐVÚ†pÚA;i*ÑÚKûP™ÐA:D‡é¥ctœNÐI:E§é,£ót.Ò-t‰n¥Ûèvºƒî¤Ët]¡«¨B÷нtÝOЃô=LУô=NOГô=MÏгô=O/ÒKô2½B¯Òkô:½AoÒ[ô6½CïÒ{¿èCúˆ>¦OèSúŒ>>|I_ þ¡oé;úž~ éýD?Ó/ô+ýF¿Óô'ýEÓuª¢"P5PµPuPõP ÐÐMÐÍÐ-ЭРڠ-Ú¡=: #:¡3º +º!QˆF bÑqèxôD/$ ½‘„>è‹~èˆd B #C0Æá‘HG21 £1YÈFÆbÆc&b&c ¦b¦CE.,°BCl°CÇ äÃ'\pÙðÂ?(@³Pˆ"ÌÆÌÅ<ÌÇ,Ä",Æ,Å2,Ç ¬Ä*¬Æ¬Å:¬ÇlÄ&lÆlÅ6lÇìÄ.ìÆìÅ>ìÇÄ!ÆÅ1Ç œÄ)œÆœÅ9œÇ\Ä-¸„[qnǸ—q®à*îÆ=¸÷á~<€ñÆ#xáq<'ñžÆ3xÏáy¼€ñ^Æ+x¯áu¼7ñÞÆ;xïá}|€ñ>Æ'øŸás|/ñ¾Æ7øßá{ü€q ?ágü‚_ñ~Çøáo\gb0s‡s%®ÌU¸*Wã®Î5¸&×âÚ\‡ër=®Ï ¸!íçFܘ›pSnÆÍ¹·äVÜšnÃm¹·§íÜ;r'îÌ]¸+wãHŽâhŽáXîÎq܃ã¹'÷âNäÞœÄ}¸/÷ãþ<€r2âÌ©<„‡ò0Nãá<‚Gr:gp&âÑ<†³8›sx,ãñ<'ò$žÌSx*Oãé¬r.[ØÊç±í¬ó Îg;ÙÅnöðLö²ýàò,.ä"žÍsx.Ïãù¼€ò"^ÌKx)/ã异Wò*^Íkx-¯ãõ¼7ò&ÚÍ›y oåm¼wðNÞÅ»yïå}¼ŸðA>ćùåc|œOðI>ŧù Ÿås|ž/ü‡ëê€rÛ8¢É~<’w–”8½÷îˆíH¦Ÿ¥³t’¬S$]d)uI. è@€Gw’RœÞ{ïyéí¥Øq‹§÷Þ{ï½÷>ØÅéð=bþîÎΟÙfwÄEâbñq‰¸T\&.WˆwŠ+ŻĻÅUâ=â½â}âýââƒâCâÃâ#â£âcâãââ“âSâÓâ3â³âsâóâ â‹âKâËâ+â«âkâëââ›â[âÛâ;â»â{âûââ‡âGâÇâ'â§âgâçââ—âWâ×â7â·âwâ÷âââOâÏâ/â¯âoâïââŸâ_âßâ?â¿”î¯y« àÀEs(¡Œ æ±€³° Û±×µõq6®ƒëâz¸>n€âF¸1n‚›âf¸9n[âV¸5nƒÛâv¸=î€;âN¸3î‚spWìD5ÔÑ@‹h¡ã¸'î…{ã>X¹؅ÝXÆy؃½XÁ>ìÇœƒXÅ!܇qG±†ûá.ÀqœÀýñ<ƒñHtÑC  áÁÇI¬#À!"Œ± b$H±‰-œÂiœÁCñ0<À…x$…Gã1x,‡Çã x"ž„'ã)x*ž†§ãx&ž…gã9x.ž‡çãx!^„ã%x)^†—ãt+y%^Å'é«ñ¼¯Ãëñ¼o›éÆò¼oÃÛq.¦ÛË%¸—ár\A÷˜+sÂ4¶‡Q˜wt=œ¨$„¥UŒý*V½Qa9DÅþHR±–²â)îEåŽü~?JÜ¥.Ý¢•+µ(.ECª_Ö‹ÒHwwOÒ,·oÄî˜.š^q9WR¹Ò²UF=ºè»Lg Eá1‚Œö 8h´B-J«ý®™]Š,r1É[FbÄÓk1w´§ú~ȹ$îQ£–há¬Mh™œ4{–Ö˜)e¦FœÑ¢p"óø =œ=r4’ÎQO%‡<ß‘ÁØ“N_‰,ªqìd;ö‡#‰D¦{þ‚¹…g‹MÆKêT/£ …qJu¯Mܱ¢zO–ädmj5JÇe-uÁcûTjÔ¯”«õÃyFÝX•£Iâe{"ƒy?+c*d©’ª¨Ô§SQ=åPå«Úì ú=Ðu½œ)Sµ$c†ÝdîÈyÕÙ/ÕìdP· fA¶ -hYÐÌAÃÚ©ÙéMKÑ´–ëÖNÍöÔ¬NÍÚiZWV¹nݨ1°ì5ëOjXŠ*“ZË5ëjƒ•­å†õ§ÁqYË ;½É²ÝSLÇÝ ê­i3é˜V00r’äí$öd_9úYì¯kYÐ NoWtªl¼I‘Ê@9LÇFNòv?42¸=Ò TÉ7»”æ=ŠËù e¤»l² Ò¢°œé)zTöÌXÎXÚ“i é1·Ç¦›a*{gæx3sövå¤àÑÃ]Iü ¯\_‹âJû²b|ñMF^É“­odeߌõ“S<·ßú±žƒùu: TȰï÷æØáÀ‚ƒ„9Àr8„ ‡ÅÕÜ¡(whÕ8i1wØÎ›Ø€Ì¸Ï|4 8É^3§&àµÜ~šÛ_3öSðZpš|lÆúÖ >>ƒOO±Cyx——²ü®S8åR ‹KËFJ¥eeUhGS\’ÙK(_ºÇ(’o[F3gÖÑ:Ö÷ÕDÅ~\Ú²È=nOk±°‘’,*JÅýÒDö³BÒoøÎv§Q-©8¡}§/¤DÁª,á{ó‰Ggp\ø›ÏÇd)´½ˆÎ#Ùë©0Ù®Oš™'‰Â(^°^éVy);°4œ_6ç•nÌ-'¦·´åh~uäg;ck3ÊåÕ‘¥>©_ÁÑ …séHsvës1ç)œÈMâ)dÎ~9Kº'Œº})ÎOÅÁT\àsNqÈÇa/rŽè£ô¨L‹9?vy>ÅþüÊ ï¶|жËr¤š RÙ }äÙéÕ§êÎB7s~˜õ…3™ÓY3ÉÎüB6ÑY×®Æõ0§|úJ´ß˜x‘«Ïÿj1·ŒyLЉ²E›Ÿ]¯mÿG>Í®x:»â¯¸~m褩Õ-jVÕMGŒšŒµµu,ZÜɈ9-GµÁöªl¥ÊVªl¥ÆVjl¥ÆžÖؿ۫±5¶\cË5¶\gËu¶\gËu^ƒ:sÔ™£Îuæ¨3G9ÌÑ`Žs4˜£ÁÓui0Gƒ9Ìј®3ÏXä‹íBµE«¹¡J¹a™ôóH¬¯z­Ï²-³reí»^¾íShV°HÞe>W2C¹±²ÆîÐ]Z3Ü>Ó£;JÙ¢ê*gÈPêΑû%Zn£^Ñ‹žc½ôÏyʀœëÍÈ{«X¢%1ˆÌUt|y/íQŽhƒ úãUÛÆq…g(Z»$M‘¢U[® U6hJê‡\Y”d»æ¸ÊÓж̂t8¤DÃj\m!“IÜv/FZiYÈ!—kuâ¬$@¥T ε×rêÁ‡œì9õ­úÞÛá.ÉðPRó¾7o¾7ïÛ7¤¸{Ô:&kâ—ç$e´”Ì„ã²Åêd“ý˜ì ÙÙYƒ,ñù_àýgx?ƒ÷Sþ4b“œ œäAÁÓ“<-ø>÷pßÎiñË÷¥çO‹éð’Ð`̆_“€Æ¢/Š)Ñœ˜ç°/ópSÙ‰Œ±Ð°šnñ÷ßwüÿyÇÏ<-žÚ‰¾"2~†¸±\Æ0Ü;ÑMñ d‡iÊXØõpGü{ªÅ¿³#þ%Z*ßÿ-OÿŸ‹¿‹ß‹¿Š—Å¢Å>°>Ø-Ñrë×Ñ–ëa: ~&.¸ÏÅÛâ†ØÓÒ €´O¬BÒ•èQ ·°Ê«aªò‚€mö„‹¹h‹ó=‘?³S”ªaêžHˆM1-¨Ü¤Uî›–¶çöÄ7 Ø×¨Š.Š~ß3ßü“Ò| 4ï+ÍÛJ3£4Ï*ͤҜSšq¥9£4cJó9¥9®Œ¨!5¨©GU¯ªªƒª[u©Li>IÇœÙÈ`aÐÖM~Ð… Xæâª‹½ÌÌcyW~%Ëóæ§«,_ ›[‰´¸÷âóH$ËÍPžå/gGÍ…X¾¥^2çcyS¹ðÝÒ6ç?/CÔtý¤ÅÙåR‹ŸÄÐÝ13´TÚ‡S=y÷Ý1Äûï–Ëìø›©ÑTèüðâr®y]Ú˜óu½òníÃ)—vñ-¦+0mâ´‰ÓÑqóýüJÉüíxÙÔÐ9/çÍ÷V¯•öù#þ¡žÛç!”Kû“ü‘~ 㓹r9GC<øØ?BÞ#੟±òXJýŒxnnñ"ăÅ;fâEއ»x§øGÈ‹"ïÄvŠx§N<éàmDôÜv$ÒÞë€8Ö^æ9¢” Aøª¢î"ʲC™’”i›2M•¸ÃÇnsüX)ö½jÙXL_ÇÏʅҶʲå¥×,<üÁy:wÿÉó¿;`xÆ|±²édM_$ËR©ÑXðŸ>stream 8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn 6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 121 0 obj<>stream 8;Z]";0%=4%#-d]qW&T6R9k[5uAU7I-'b66/9EbFo#Xd4be6c96jo5^a6/[0O4 h<1'HmSm.1]a4_Amua/ZhA1HUETI>a:U>-)"n0?BCB<-O)d,uCTRcA9XZi!SmB7]* 8[ognoB5m3\2NJXP/E\!etT+$C:TH[7^M5+@&&fF'Jc>C$&/!ch^1?G"^6eCr581O N(<)GAD<,oePV.DgG=iA==/t5EcIQ-?:BEcbltU^aDXF&KH_m4G;@!I.e'n8Gn53G1SUrG_aB6Np;L!m0Im-#B:NmtpBTK#gW 6hY_?C`h'LK:YVRVV"'<2hQJJbp.a(]/T,+;K&V\'iO*OXdl``-T0eYgPd_Um`BlG !%]Y3A$OX/-0pF`9(C]3r:aK8WU*5Xc>f=*pT+MO`?sJ-lO>m.nTpZ -+(o"5i))3,@Lgh]*OQ)B-1n56CnVXOC_~> endstream endobj 122 0 obj<>stream application/pdf Adobe Illustrator CS2 2008-07-30T08:39:43-04:00 2008-08-19T10:59:21-04:00 2008-08-19T10:59:21-04:00 256 136 JPEG /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAiAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7fpn5ZjRNOey0y9nuHu7 L9HXt9dTstyIy0jGaKREY+t++oCdhxWg61KrND/KaHSvMVvrX6e1C7+rV9KwmaM26g8/hVAgIHKV m69aeAxtWRa15Zk1PSX05dWv7EyXIuTd2k7RThfV9UwrIN1jI+Cg/ZwKxqb8p7oaULKy81atBLBC sVhcSTNL6DJayWyuE5ICaS89uJ5KKEYqqWH5YX9nf2t//i7WLu4tJWnhjvJVuIA8lubZ6RsOnF2Z asaNvvvyVTTzL5Hl1rUFvYfMOr6S6rEvo2F0Y4T6cnqFjEwdKvQK23Qe7VVSmT8p5TaXEMPm3Xre W5ZZJbqO8b1eaLxqGYNtSgp0p70IVXXf5WXE7XRh82a3Z/Wakm3umVg3pwRBuTcixC2vVqn4m36U VVpvyvgl0K30k65qJNvfNqJvmkR7iR3jeMrIzIVZayc/s/aAxVdqH5ayXOg6TpFp5m1nTF0qKSM3 dnc+nNcGVQC07UIam5Sg+EnalMVUY/ysMcFxD/iTVpEnFSstwXUStMszS8PsEsVIoRShw2rJ/Lmi yaNpUdhJf3OpujOxu72QyzNzYtQs1TRa0HtgVM8VdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirEZfzY8iRvLGNRMssLSJJHHDM7AxJI7HZOnGByD3pt1GKsmsL+2vrf6xbkmMSSxHk pUh4JGikBBodnQjFURirsVcSACSaAbknFVsUsU0ayxOskTiqOhDKQe4I64quxV2KuxV2KtF0DhCw 5kEha7kClTT2qMVbxV2KuxV2KuxVas0TyPGrq0kdPUQEEryFRyHaoxVdirsVdirsVdiqyKaGUMYp FkCMUYqQ1GXYqadxiq/FVDUJp4LC5mt0WSeKJ3hjdgqs6qSoLGgAJ74qlEGs+YJbD6y2mxIXMZhA uUbmJJePEEfDXgQQeW5+7Cqc2b3D2kD3MYiuGjVpogahXKgstQT0OBVG91bTbGe1gu7hYZb2T0bV GrV38BTLceGcwTEWI7lozarHjlGMzRmaHmUtXzz5RdGddVgKovJtzUDkF6U8WGXns/OP4C4g7Y0p F+JHZpvPnk9SQdVgqOtCT1Fewwjs7P8AzCg9s6Qf5SK0+f8AyaIvVOqw8Pi/mr8JoaLSv9cP8m6i 64Cx/lvSVfiD8eX4tFaf5s8uajcpbWN/FcXDglY0JJoNyem2VZdHlxi5RIDfg7S0+WXDCYlJbeto MWr22nXMFv6+sRz0RogzTmBRyVjShAjkavLMZzk1gggt4hFBGsUS1KxooVRU1NANtya4qtnd0o3q xxp/liu4BJ35L2GAkDmruN3/AL8j/wCRbf8ANeFUnv8AQNKlvWuL94WmvHhCJLyAMsKuEMY9QHnx c9MTKlpMbKxks7WO2gdBFEKKGVmO5qSSXrucVVWNwpRWniVpDxQFCCxoWoPj3NATjSq4rQcjU9yN hX8cVUZHkWQL60acvsoykt4fziu+AyAVvjd/78j/AORbf814VQzon6QiLzwC+WKRYkKkP6Tspei+ puKou9MFjktInjd/78j/AORbf814VWhp/U9P14vUADFOB5cSaVpz6bYaVXwKocpvU9MTxc/5OBr9 3P3wcQulXcbv/fkf/Itv+a8KoWCIC+uniuY3uSI1uI6FigVSUHH1PgqGJ9+uNhaRXG7/AN+R/wDI tv8AmvFWomlZ2HrRv6Z4yKqmoNA1D8ZoaMDjSqxrQ8TQ9idxX8MVUFadiQs8TFftAITTcjf4/EHA CCq7jd/78j/5Ft/zXhVB6dBEi3DWVxDIJZ3edlBf99sHB/eGhFAKYAQVIpGcbv8A35H/AMi2/wCa 8Koa7Dz6bdCiX0bwyoII/g9Q0KlOfJgK/Z9sNKxOKx1OKPmPLJW5i9KaO4NyJHZ4mDqrDmpcqWbq 9D1xQn0mo+afqpdNKjWagYBplYg+vx4cF2P7n4uXOlcCVHzpoGq6zaW8Nhci39OSsysQFdGoGBqr /s1271odsz9BqYYpEyFup7W0OXUQEYS4d9/MfI9P1HZjbeVvzEks/QF+sIWP0VAuSpO5IkLxwq1R QfMbHuDnjWaUSvhvr9P2bydSezu0DDh462r6vtsRB/WOfUFM+XfP8FPW1KGMFAip9ZRBxCgEIDbU FMTrNJ/N+z/jyx7O7QH8Y5fzh/1TT9fLsLoofzDchmdZXRJYAOQpRQwQPx+EDr2zB/PC9oR7uv63 a/yXIjfLk53/AA/8TdfFXs/J1xbRIia5fAqpWqC3UDkQWoPSPfxrTGeuEj/dx+39a4uy5QAAy5P9 j/xK3WtYurfzdpdmtnBNA0TObt5FWaN5HEfCNCylua1rQbU3zAduidV8wapZvMF0mZbaO39X9Iu8 BhR6kcHjWX1TsK/CD9GQnKhaCWE6l521TUIIre8srSRGtfrMiBpRxu+MX+j1DqSv76Qep0+HpvlG bHDLGpbhjIA83XH5p+Z4oon+o2g5wq8tS59OVooGMZAf4uLyyJyG3wV/ay0z82Q3KXX35i6tfiOe WztJnsYTe2agyx87uNGdYG/e9C6qAx+GvWlN2QB59GyJIRrfmv5oDXIFjZH00YwNyejuFqqt8ZKh m+Gvbr0ycTZARTWufmTq6XLva29nqH1AfWNPeksPqTEzwMhDS/D+5owJqPjpsRl4iRezBEP+aOvi 5vo4re0uIreGWW1kQSKZWjlkVFKs/wAHNEQ792p2yrIOEKSoav561hrue6j061up9OcDT35yRiYN HK7mhf4eLxIvxjflUdMxZ44SkJHnHkxIBNq5/NHzKtq8sthawyBwsQJZlcEmhqr1XYV3FfbLePfm yjulWo/mLr/6TTUIdMs7m4tpEhgcySRgwvArNLxMlOSPK8fE9t8SBdtgJqkxtvzV8wuALi1s4GMk KggSSL6cno+pJUOPsGSTbqeH+UMuhGwWBQlx+Z2uxerqcVlZvfCQ2gQ+oOVqjRskv97x3Msnw/a+ H3yzhNV0Qr6B+bPmbUHjW8sbS2rLAkxXm4SORaySD4/i9M122JplOT010UlUj87aqdXhvvqdkzyR zrPdBpqxrG5WEenyoxlVAxp9nod8xvDhx8f8TGhdomX8zdbR4FNvaxh6+vzVyUHpSsKUko3xxou3 81e2Wie/NsAsJZN5/wBVsNRa/tbexnlv2kF/ODNSJYWaKGiF/iMiRoSF6V36boABvvZEmqRenfmt rVzJCJ47S2idHaaQxysY2EXNV4iX4qv8Boffpl0BYYHZDH8zNbs4rm6it7FpbgxzzKvrEtM0SoVo Xp8KxopINK/flhiT8EJla/mbrc1vBKLe2b1FcyEK6hWX0uC0MlTyMjivQcPfMeZo1yRaUW/5i67Y f6RFpNtHPfRC5u0DySUnMQlaIVkp/eyMgYfD3ynHjhAkx/i5oAA5JifzT136vcSC3tRJFbySwIVk AlmQoI4d5AV5hmPMigp75aJ31bANkng/MrWtIhKWenWtLmSS4lBMj/vCIxxqZfmPCi++CIEeTKRJ 5phP+bXmIW13Lb2lpPJDGzWyEPGJpAZBwq0nwbIh5H+b2zIENmBQ5/NDWdMeSztLS0NnE7ehJxlP MPIpLUMtV+27EHw2rUZKUSTZQyq089anNaW8xtYy0sSSEqHAq6hjQEnxysjdbVf8a6l/yyJ/w2Cl ti2taVZ3+v6hqxW6t7vUYVsr/wCr3EqJLbx7KnE8uHjyj4sDuCKmqqO0OWLRY7mOyguCt3L9Ym9a 7upT6hFCVLyEqD4DbFVpjs7e2jsLW0eG1tnkMa+rNKfjoD8Uxlb9nxwq1Asfrx/upPtL+0PH/VxV 6fkUsO8wSMnnnTOMMLGS19J52fjMqNcxuY4hzWvqNGpPwmnHqMKFHzDZ8b64u/0XfR8bHh+lGvOU CfvGPpyW3rtz/mrwb6Mry8viPvQWANHT6uvoxjhpIteCt8KUS0H1LtyQcKepT9j/ACsjxeaLSu9t 6W9ofqqJ6dpFFy58jFS2sk9FuvML6Xpl96+nX9rAZct2Ueakw9S1uxxWf1NKkt6V4GX9zIPqh3HH 7XFZexNajLL82deTUtvWTUP9EiPqwypX1Phl5R8fTcb8Q/2OVNuvzYmyOq1sjPNTfW7jVW5Jqf1i 2Ccx/o5uKXNy/pEVX0+Pqeorf5dKimZHD5MF9yPV1LWpKJc+vaXQ9eP92bjlcXDcSu3p8/U5g9jJ /k5XlFAdN/1oK/XLf1zrf+ipd/WJI2r6npC54W90nJenpenz4duQev7OUiXmtqCwelp06/Vfq3qS j4DJ6iS1LGvU8FPUig+WDi35pjzS/WLb13mP1KO95XkEvIy+lz42cUfrgV+Fkp6XHaoHLJX5s68k Zpi+gAOCWdbi0ein1EPD6oPV9vT9KhSnxCPp8eXY9werEhD6gnPSJ4/TWXlfyTehyoW5fVv9JDV2 5en/AHfbh0+LJ8Pkh3kiH0Zrf/RxaeldWcn2/UEXpoB6q/zelSnH9oDpvlWXaunP9CCnEcVb+xn9 GA+il9/pan44fVndvscfjaf7Z3+EfD7ZUZeaLalPCay39L0q/b+Joa29yuxr8ZPqcOv7df2cAlvz bI8kHrY9WbT5f9HuPQe8b6xGOBt/VnlPLjT9403Pkf5eR8N535pryXeX5vSubOT6x9W9KGVfXkX1 Gi5WoThSp58v7smp3+LLcYsd6JKN9vp7/wByf3ECUiFH2U/u60H2a0Zq7sSffLOHyYplYnnZ2Zq0 vCOZeVeITl9VHp0qOXP0+PKm3p9fizGmakd6YpPLa8LSxX6iYuFgsXpxy1KUtI09ANUVIp6aye1a jI8Xmm0dX/QdRStfVsLmH022E3NoT9WG68PV419Snw8eu+CMvNsA2SrUY/3cA9E/YkFEf/JiHE/F 9r4KcvBRvvk+LzWvJXvh6+naqvH6569u8fps3pC4q1yfS6j0x+85cqft0/ZzIAscrYnm1qxrql3L Xl6svL6wm3q/vIjz4V+H7NWHfj+1XHh8kM105a6dZnizVgi+LpX92PbIS5qiOH/Fb/5/RgVfOn7+ T92x+Jv1/LFVnD/it/8AP6MVVLhP38n7t/tN+v5Yq63T9/H+7f7S/r+WKvUMilhXmSJW8+aRIYYn KW9FnaUJKhe4X4I4/UQvzpueJ48e1cKFvmGwpf3F5+irxONjw/Sr3nKJKOzem1t6zc+vKvA5Xk5f EfegsAaOn1dfRjHDSRa8Fb4UoloPqXbkg4U9Sn7H+VkeLzW0svLelvaH6oienaRx8vU5GKltZJ6L deYX0vTL719Ov7WJly3THmpMPUtbscUn9TSpLenLgZf3Mg+qHccftcVl7E1qO8782deTpLasmof6 HCfVhlSpk+GXlHx9NxvxD/Y5U26/MxNkdVrZGeaW+t3GqtWPVPrFsE5g/VzcUubl/SIqvp8fU9RW /wAulRTL+HyYLrkerqWtScUufXtboevGfTNxyuLhuPHb0+fqcgexk/ycryigOm/60Fdrlv651v8A 0RLv6xJG1fU9IXPC3uk5KNvS9Pnw7cg9f2cpEvNbUVt/S024X6oLb1JR8Bl9RJasxr1+BT1IoPlg 4t+aYoDV7X13mb6jFe8ryCXm03pc+NnDH64FfhZKelx2qByyd+bOvJGaWvoKB6cdpW4s3oreoh4/ VB6vXb0/SoVp8Qj6fHluPcHqxKH1FOekTx+kkvK/km9DnQty+rf6SGrty9P+7/yOnxZPh8kNeSIf Rmt/9HW09K6s5Pt+oIvTQD1V3+L0qU4/tAdN8qy7V05/oQU4jirf2M/oW59FL7/S1Pxw+rO7fYp8 bT/bO/wj4fbKjLzW2pfglsukfpV+2eTQ1t7ldt/jJ9Th1/br+zgEt+bOPJCa2PVm0+Wltceg943r x/Abf1Z5Ty40/eNNz5H+XkfDed+aa8m/L83pXNnL64tvThlX13HqPFytQnDjU8+X92TU7/FluMWO 9jJRvt9PfaA/uIEpFs+yn93Xb7NaM1d2JPvk+HyQmViednZneXhHMvKvEJy+qj06chy5+nx5U29O tfizHmalzpik0trwtLFfqJi4WCxenHNUpSzjT0A1RUinprJ7VqMHF5ptMK/6BqCbfvbC5h9NjT1u bwn6t1HD1eNfUp8PHrvgifNmBslOox/u4P3H7Egokn+TEOJ+L7XwU5eCjffJX5rXkiL5fX07VV4C 89e3eP02f0hcVa4Ppfa/dj95y5U/bp+zmQBY5IPNbqxrql3Ls3qycvrCGnq/vYjz4V+H7NWHfj+1 XHh8kM401K6bZn0+VbeL4uVK/ux2yEuaoj0/+Kf+GwKvnj/fyfua/E2/L3xVZ6f/ABT/AMNiq+eP 9/J+5r8R/a98VdBH+/j/AHNPiH7Xvir03IpYL5lQn8xtFf6rE4W0ZfrZm4TJzuYz6ccXqJz9ThUn iePHt1BVU8waeRfXF9+irpOFl6f6WkvOaJR2Pptbes/OleXLieuV5OXxH3sS8/aOn1dfRjHDSRa8 Fb4UoloPqXbkg4U9Sn7H+VkeLzW0svLelvaH6oienaRx8vU5GKltZJ6LdeYX0vTL719Ov7WJly3T HmpMPUtbscUn9TSpLenLgZf3Mg+qHccftcVl7E1qO8782deTpLasmof6HCfVhlSpk+GXlHx9Nxvx D/Y5U26/MxNkdVrZGeaW+t3GqtWPVPrFsE5g/VzcUubl/SIqvp8fU9RW/wAulRTL+HyYLrkerqWt ScUufXtboevGfTNxyuLhuPHb0+fqcgexk/ycryigOm/60Fdrlv651v8A0RLv6xJG1fU9IXPC3uk5 KNvS9Pnw7cg9f2cpEvNbUVt/S024X6oLb1JR8Bl9RJasxr1+BT1IoPlg4t+aYoDV7X13mb6jFe8r yCXm03pc+NnDH64FfhZKelx2qByyd+bOvJGaWvoKB6cdpW4s3oreoh4/VB6vXb0/SoVp8Qj6fHlu PcHqxKH1FOekTx+kkvK/km9DnQty+rf6SGrty9P+7/yOnxZPh8kNeSIfRmt/9HW09K6s5Pt+oIvT QD1V3+L0qU4/tAdN8qy7V05/oQU4jirf2M/oW59FL7/S1Pxw+rO7fYp8bT/bO/wj4fbKjLzW2pfg lsukfpV+2eTQ1t7ldt/jJ9Th1/br+zgEt+bOPJCa2PVm0+Wltceg943rx/Abf1Z5Ty40/eNNz5H+ XkfDed+aa8m/L83pXNnL64tvThlX13HqPFytQnDjU8+X92TU7/FluMWO9jJRvt9PfaA/uIEpFs+y n93Xb7NaM1d2JPvk+HyQmViednZneXhHMvKvEJy+qj06chy5+nx5U29OtfizHmalzpik0trwtLFf qJi4WCxenHNUpSzjT0A1RUinprJ7VqMHF5ptMK/6BqCbfvbC5h9NjT1ubwn6t1HD1eNfUp8PHrvg ifNmBslOox/u4P3H7Egokn+TEOJ+L7XwU5eCjffJX5rXkiL5fX07VV4C89e3eP02f0hcVa4Ppfa/ dj95y5U/bp+zmQBY5IPNbqxrql3Ls3qycvrCGnq/vYjz4V+H7NWHfj+1XHh8kM401K6bZn0+VbeL 4uVK/ux2yEuaoj0/+Kf+GwKvnj/fyfua/E2/L3xVZ6f/ABT/AMNiq+eP9/J+5r8R/a98VdBH+/j/ AHNPiH7Xvir03IpYP5ku/T/MHSYfQt2WS04tcyTKlxHyuoyscMZkQt6pT7QU04+5wqv1/Tm+vz3g 0i4XjZcBq0t4XCHmx9P6t6r8qV5Vp39srycviPvQWAtayUtgLUgJpIteK14p8FoPqX2RyX90R6lP 2K98d+/7EJdc6bcNDacNPYGOzjjrUs0XG2sk9FqL8fH0TGW3r6df2sBv8BI5qUlhdtbXatazTGTS pLfjxKGWsMi/VPs/CTy4rJ25V2ybJp9LuGfUCNNdhLBKtSTxlDRhfTYcPh5/Y5UNN2xHMJRnmm1u Ly41VvRl1T6xbKnMIbc3FLm5f0iOK+mV9T1Fb/LptTLvh9rBddWdxJqGtS/V5LgT2tyv1hVMRuC9 xcMF48F4GT1edexkP8tchk5fH9aC3rljLOdapYtefWJImBDGMXPG3uk5J8P7r0/UCduXOvbKt+/7 FUo9PmTTrlBp8sHOUco1YyLLUsajZuCnqRx+jBvf7ExQGsaXcTvMf0XJe8ryCUsWMXPjZxR+uo4/ CU4+kV7gcskyRml2NzAn+8ktoPrNo54qZFJT6p+9+xsI/R3Wm4i/y97YcigqF/p91JpU8QsppWa/ km+rkEcuX1b/AEkNx2Den/d124f5WS+H2od5N026tJLYy2Elisd3ZyAmr+l6SAGVaj4hD04/tAe+ V5Olbc/PuQU1SzmGoWMzWiViW9pdAEPCZpnb7HD4zPXmd/hG3tle/efkrpLeb1LFlilRYy1CVLtD /o9ynWjc6+pw+T1/ZwC7/YzjyQms2VzNPpzi3+stA94wnSMobf1ZpW5cfTHqNOH5H+Xkfpmq/Qbe 7gubKVxPacIZVWdomkaLla8ODLRufL+7Jr/le+ThyQVC8sbo2LKLdmYwQoFjjIf4UP7uvpr9mtC3 LdjXfrlnw+1CY2lvOLWzEkUzMkUwqQU4Bvqw4cTSpf0uPKm3p1/azHnzQkz6ZcC0skXS5Y/TsFiM UbljHS0jj+rhvhqw4+mr+ArXHfv+xUwa1uRZahG0M3KbT7iERhSFmEjRH6v0+Ay8K+p+zx98EbZj klV/p10yQhbC4YhHBC1oAVhAU7D4zwpy8F675JURqFhdS2GqxtaT3bXFuyekQYhcAtcERdP3dfU5 cv8ALp+zlw5ILWqWV2+qXcqW9xIJJA31hEYer+8iPPjxHH7FXHfj3rjt3fahmNioWwtVeP41giDc m4moQVqD0yJ5qr/u/wDfY/4MYFXz+n68nwA/E37Y8cVWfu/99j/gxiq+f0/Xk+Afab9seOKug9P1 4/gH2l/bHjir0/IpeeebtHsrn8yNEv5HVbm3ihjiFWD8XuSzcaOo34Dqp9qYUMk1jyzpr+vqccEk uqC3NvHIZZnPp1J48C5Xqx7YpYr+h9W/5YJf+AfChtNH1UH/AHglGx/YfwxVr9D6t/ywS/8AAPiq +PSNVCSVsZRVQB8D7/EMVWfofVv+WCX/AIB8VXx6RqoWStjKKrQfA+/xDFVn6H1b/lgl/wCAfFV4 0jVfRYfUZallNOD9g2KrP0Pq3/LBL/wD4qvGkar6Lj6jLUsppwfwbFVn6H1b/lgl/wCAfFWzo+q8 APqEvU7cH9sVa/Q+rf8ALBL/AMA+Krjo+q8APqEtanbg/tiq39D6t/ywS/8AAPiq9tI1X00H1GWo rUcH23xVZ+h9W/5YJf8AgHxVPtJ8q291YpJfJLBOCy+mDx2rUbMCe+C1Rn+CtI/nm/4Jf+acbWm2 8maS1KvNsKD4l/5pxtaa/wAFaR/PN/wS/wDNONrTGpYbaOSSObTZvVR1RBHe2hDoQfjHqGM7U6EZ sBo4kWJ7f1Zfot1B7SnEkSx730nDcd+5HyUJJbGNY2k0m6USkiOt3Z/F8VNqMdtmqT0pkx2eDymP 9LL9TXLteUavEd/6UP8Aivf8l3OyZo/9xN3R1Qk/WrQUDngtKsAQx48T3qMH5Afzx8pfqSO15bfu jvX8UOu387rtXfa547dX4/om5Yl2RVF5Z8vhAPQsP5vHANFH+f8A7GX6mR7Tnf8AdHn/AD4frWtN ZOjytpdwJCwIT67Zbq6liwPLp0+dcP5AX9f+xl+pj/K0qvw/9nD/AIpdcxWkfqLDp8lxKkrKsaXk IrCrMplZynpqdlohau/+ScENFE1cqFfzTz7u/v3/AFpydqTF8OPiPF/PH0gkXfIdPTd7+RbYQCNZ rvTJIZZORdBf2hVZKSNw5niK8UB+nH8lEmhO/wDNl5frX+VJiIM8dH+vDnuaux0F/FpAhmtxbaNc zSuPU9MXlpUUJNAATy2WuP5KAsmdV/Rkv8qZCQI4iSf6cP1vRwagEihPY9vuzWu6Y5rdrCdct7xr e9nkt0iK/VljMRo0jjnyHLYrvxPcbYVRUfmJnsjcmylBW3eYxqGY+ou/pD4a1YbiowKraroek65D bteI7rH+8gZHkhYcxQ/YKNuPHL8Gpnivh6+V/e4mq0WLPXGPp5bkfcgl8i+X1njnVbj1IiPTJurh qBSDx+Jz8NVG2XntDKRW2/8ARH6nGHY+ASEvVY/py/XyWxeQfLkSRxxpOkUP92iTypQ1rXkjKx3N dz8tsJ7SykkmrPkGMexdPEAASAHKpSH3H72h+X/lsXUdyqTpLEiRIUuJloiRmNQCGBHwnscf5Sy0 RtR8h32j+RNPxCVSsAAeqXQV39y+DyL5fgEforcRmJzKhW5n2diCzfb3qV74JdoZTzrf+iP1M4dj 4I1XEKN/VLn82Otpuj2dzcwNpmqz/Vvht2juLh0kMbJ8Roy8S7MD36VHTDLtHKf5v+lH6mMexsA/ n/6eX60S2n+X2uYLI6ZrP7wo6zh5+KtchGPOQS8vh6NyrxocA1+T+j/pR+pmeycJFer/AE8uvxQ9 xZ+XnJlOk62RCpUsJJhRYY1K8R6tSSKADxrXCO0Mo/m/6UfqYy7HwE2eP/Ty6fFcv6CMUtwuja0s 4BIiLXQHK65huH7zbfqeO2R/PZOXp6fwx6fBn/JWG79XX+OXXn1UjHocVsskWiasXZHDxmS65Ves bItGfkTxr8VABv12wnX5T3f6UfqRHsjAOQl/p5dfiqNpnl22E811pF9ARI8cYilmlUNPCxaRFYqq tuabV5EYf5Rzd46dB0Y/yNp7sA9f4pbXsSN6vdGaLc6Hbakn1bStUt2VGCTziajFnIZWEjksfhHG tcpy6qcxRqvcHIwaDFikJRBv+sTz953RsXndpIWk/QuoRnkoj9SFlXi1aO9AzKFCktxVtulcx6c1 G2vmWaeCGU6RfKZmZeHpAFAH48n5lKVry77YFQ483St9ZK6VciO3FTMw4xkVNfip+zT4vDDSr082 H0oXk0nUAZ5CiIsDFlUKjc5A3DgP3lPoOBVWHzJJKkTfou8QSxNN6rx0jjChiFkNS4Y8eio3XFU1 tZjPawzlDGZUVzGeq8gDQ9OmKquKuxV2KsJl/L65diwfSgxYEH9GR+FDUGQ1rXNuO0wP9U/0/wCx 5w9iSPXD/wAqh/xS3/AWotbRqx0kyxqwUHT1ZBVRxC1eo+Pk3Tqa0w/yjC/8pX9df5GyGIB8GwP9 T2+/vs/HkrR+RLoFDKdLerKLgDT1HKFCvGMfGenD/OmQPaI6cfl6+vfybI9jy2vwvP8Ad9BW3Py/ FJ2fKHlUtyOkWhJ6kwp2+jMT87m/ny+bsP5L0v8AqcP9KG18peWVLFdLtlLFWJEaj4lXipHgQDtT E63N/OPzSOzNMOWOPycfKPlY1rpNoa0qTDGSaeO2P53N/Pl8yj+S9L/qcP8AShz+UPKrmraRZk1r X0I/x2xGtzD+OXzKT2Xpf9Th/pQrWfl/QrK4FzaWFvBcAcRLHGqtSlKVAr0yE9TkmKlIke9sxaHB jlxQhGMu8AJhlDlMO8y6rLa67HTX/qSx+mF04WxcsXYBjzJCtVWHXp23woUfLWs/WxHINaupvWnY ENbfDKQpqq7Semop/k79vFVOvJ179c0p5frL3QEpQSyAhvhRQdi0lKnfr3xKU9wK7FXYq7FUnm8t RNeXdzDe3NqbwxtJHA4RA0bKSwAHV+FG8QTiqE/wfNxp+ndTrxZa/WP5lcV6dRzqPkMKqsnlTkLk C/mX63JI8pAWoEodeKntRJTv40PamNqtm8pNLDHH+lr6L0+JpFIFTkleNFIagBoae2Nqi00Clo9r Lf3c6OzMxkdWNGfnSpXoPsj2wKhj5TQwoh1K9aZIvS+sGYl2PMuCxpVutOPSmG1QqeQ7dWuX/SN0 8tynDk7KQh7cBQEL/k17DwxtFI6LyyseopqJvrlrleZZGflDykFGKRMGVP8AY/TgStHlYMIBNqN2 RbRrCgik9HkiU4+rwA59/bfpiqrH5cjTUIr0XtzziiWFYuS+mQlQGK8ftUNK4qh9c0OeX1b0anfR RR27CS2tmqzhI23QDj8ZJr7nJQjxEDva8s+CJluaF7c/gkf1yBy0Yn1dFkWWNWa1uOIMzzIneqkG cfapXgvTMs6GVc4f6YOAO1IXXDk/0ku+u772m1mxit0emuxtcFxzeGY09UOePCtKq1wACK1KgCoG THZ8iSBKG39INZ7YgACYZd/6B/Hl9y9L+L0HQPry+hMZ+T203xg1Xgu1eI9XYE/s17bxOhlt6ob/ ANIMx2rE36Mu39CW/Ll+OhWi/tUmmC3GulWjZAPq8xcEkj4HK8fh5bbfTj+Rl/Oh/pgp7Vh/Nyf6 SX6mrTV7OOC5t45taZZW5GQWkxdGDEmLlxJDVam1NhSuE9nzHWH+mHzYjtfGeUcn+klz7uXNdJqd os0UzT60ojMiiOK2nUMQ8kh5hg1dpB9w+QA0Ez1h/pgk9rYwL4cn+kl+pMtPsDq9jM8d9qFuDKzR i4V4pEYsSKBqEqAxX5fLMfNhOM0SD7jbm6bUDNHiAkP6wIP2shsbZrWzht3kMzRKFMrVq1O+5Y/j lLkK+KuxV2KuxV2KuxVLbnT9SlumkivvQhLxuEEaueKqQ8dXrRW2NVocVVtHsbix02C1uJzdTRKV ecihbckePQGmKotVVfsgCu5pireKuxV2KuxV2KuxVCatqcGmafLfTpI8MPHmsSl3ozBa0HYVqT2G +KpFpv5i6HqetHSbK3vppKyCO7FrL9TkMVT+7uiPRYMFqpDUOKo248zSQ3F3A2lXqfVER/rMiItv Jzp8KSK71IrvtiqC/wAb/wDLg/8Awf8AzbhpFo5/NVnFDA88E4kuFDpFFE8xNWZSF4irFQvJgBsM vxaaUxYI+JpxNRrYYjUhK/IE/Kudcz3BTTzlYursLHUQqLyqbOYVHNU+Hbf7Vfllp0Mh/FD/AEwa B2rA36Mm39CXfXc5vOWnrs1lqAPBXp9TnP2hUDZaV3p88RoZfzof6YKe1YD+HJ/pJfqUj56sPTZ1 07UmIUsEFpIGajBaLyoCasMl/J8r+qH+mDD+WIVfBl/0h9y6Lztp80YeKy1B1KGQf6LIKqK9CaBu nQVwHQSBoyh/pgyj2tjkLEcnK/oP4PwWnzxZ8owNM1NlcVLrZyEL8QX4u/8AlbDoMP8AJ8v50P8A TBj/ACvDb93l3/oH8ebd7550yzXlNZ34j5Ivq/VZAn7whR8TBR36dccfZ858jD/TBc3bGPGLMclb fwS6/j8FtvOtirFf0fqRpUA/UpqGnhUYBoJfzof6YJPa0B/Bl/5Vy/U6Xzvp0UTSvZagERirH6pL 0H7XT7O3XGPZ8yaEof6YLLtfHEWY5P8ASSVofNtlK8aCyv1MvDiWtJgAZHZKNt8PHjU12pkZaKQB 9UNv6QbI9pwJA4cm9fwS6mvhX3KcHnK0kMQfT9QgaWlFktXqtXdPiC8unCpp2Iwy0Mhfqga/pe5h j7VjKrhkjffA95HS+77Qs/xxp/FCbDUgXUMVNlNVa9j8NPurh/k+X86H+mCP5XhQ9GXf+hL8fJMt J1u31MP6UFzAY6cluYXhO/hzArlGbTnHzIPuNuXptXHNdCQr+dEx+9MMocp2KuxV2KuxV2KuxV2K uxV2KqV1/vLN9r7Df3f2+h+z038MVeLfpPjZyP8ApTzhc8VX9zfWvpK9GgPBW4Q/vj+yOXUsOJ6Y UMt8qoX8iXCFdYujHHKnEyiO/SkCfBtNvN/xvXbFUh11fT1zQV9O8g/0GX4NYk9Y/wB3P/vY/qS/ F/vv4vt0y6P09ef6nHmfX05Dn8UpZv3dmKoP3UvwVq+yW3983Ldx0Tc78j7g1/WRfnFD2zfvbT42 3s4dmHWkNpvcH/lo8d/tepluQemP1cv98XGwH15Pp+r/AHkVGA1s2WsjV0FBwfYn+42B/wCW4f8A NWU1/Wcq/OKNu9tYul/dL/o5+AnlZf72w/3bVasv0n93zyyQ5fVyaoHnvHmh4+kP+8P9/L1/56fa /wAn+X6MhXvbL84vVvK179R8lWtwIHuCHkURWy8ql7llBUfyDlWvZcry/V8vubMH0/E/eV8fnG5m gDwaJfCXhyeOaMxgNxJ41ox6rStOtMhTciLHzPc3MZL6TdwycipBQ8UonKrlgp36fAG7e4Cqa6fd Pd2MFy8LQPNGrtC/2kLCvE9OmBURirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiql df7yzfa+w3939vofs9N/DFXjdpqbBFZNX83yuDHxTULURRkiS3IHJo419X+UEmpLDifs4UMo8qOt 15DnKw6xcD05UETyelfJ/o6D0z+93l/43rsMVSPXE4a3oI9C9tq2M37vV5fX/wB1T/72P6k/xf77 +P7dMtj9PXn+pol9fTkOfxSlv7uzFAP3UvwE1fZLb++blu46Jud+R9wfmi/6qhbf3ln9scrKE/EN mpDabzmn9/47/b9TLcnKPPl/vi4+H6p/T9X+8ioQb2bLSZq6Cg4PsT/cbA/8tw/5qyr5uTf9VG3a 01m6Xii/6OfgJ5WX+9sP9229ZfpPwcsnLpza4dfp5oeNdofgs/8AeiXr85PtbfZ/l+jIfNsv+q9L 0q31GXyDbJpxZLpZC6rC/DkBdMWCtVKKVqR7bZDJ9Xy+5nh+n4n70vl0TzMJAy/paRxEtZfr8QPK T03dFHA04tVffjkGxfcWXmq4heltqFpcOEWKUXkchUUoyAgAqGMC8mO1Wr81WjpHmVHkulOpXzxM 8aRPdJCGQxqm6utPiJ5GhpUdcVRdhpGv3HGO6k1S1FqFgWT65G3rBjLzmYAA/DzFN60406YqoW+l +aBYGMW1zDdJElosv1qIuY2dpWdHp8BQhUrv8PbbFUJb2HnmNpn4XskSgxeg93ycAswaRHb0wxFd tvAjtVVE2mleZHvI01AXcVoztC0kchmf06u4Ys5kZatRTtSnftiqt5f0/wAyae4murSZmtoOMEX1 gTKweUs1RVF58T2HYbmuKsi1HVNWt4le10mS7YuymMSxoQoA4tuSPir0wJQi675hZoa6K8QdlE6M /IoGI/aVeJ+jp3phVF2GqancXiQz6e0ELIzGYkkAg9KFR+P0YFTXFXYq7FXYq7FXYq7FXYq7FXYq 7FVsqepE8fIpzUryU0IqKVB8cVYbD+XepxgCTzdrFytVDLNLHTirRmoMaRsH/dGjVpVjsRthVN7D yqtvpE+mXF/c3CzeoqzrLJFIiOgSilXO4pWvj2wKlWr+RbRZrXUTqUyW2lWssciXZlvfVQpIGeZp JDI5X1Cy77EbeGTE9qazDe0hj8taPPdWNlBqrSM6ukbfVZFDc44WV3d5FLkLGOJFd2NfY8SOD3fJ M4/yr9NoWGqsfShSBgYR+8KJEnqyfHUyH0K8vFmPfJSy2AO7z87YQwcJkdvUb5eQH6ENafljFKtz bLq0jehaLpMvOChqqROLgH1P77iB+89zkOL3tnB7vkjJvyvWS8luRqCqssZj+qmDlAv75JuaqZK8 v3fCpP2SfHJHJbGOKu75IOy/Le3uDII72L/RLmVXraqasakj4Zj8I9T5im+DjZcHu+TN9D0oaVpc NgJBKIi55heAPN2fZatQDlTrkZSs2mEeEUj8izdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVcQCKHcHqMVWpFEioiIqrGKRqAAFAFAAO22KsK8zy30WtztDc3kcTxK v+j3sCIjAAgehKpKFv5hX6Bm40gicYsRu+sT945vOdoHIM5IlMCv4ckQP9LIbX3/AHBAvd67Kzr6 +oRyuxb0lvbDkv8AefAoC/Lx/Z+i4QxjpCv6s/L8fNoOTPLa8gJ/p4/Pbl+NvhTNriRh0utTkJhR peN7YmnJzQ/F9luJp8OxqN9sQMZO4hz/AJs2MvGAsSynbf14+/z6+7nt3KVld+Yea+rJqMShnlDf WrAiTjGrMhI4hx8Ozjud+mSnjxdBD/Sz7+f7PJjiy6gkcRyDr9ePegLHny2Pnu531u2uSEvNQNUj K8dRs5iVVV4n05uNPVPMct9174gY5D6Ydf4JD7R3bfNj++hLaWTkP8rjl0HSVfV6t+8dV9rc6zLB zF3qrTT+pGIjdWPJHUK8Y3H25AacaVWvyOCccYPLHQr+Gfx+A7+rPFkzSjfFls2K48e3Ij4y7uY+ RVP0hq9wgkafUoFaWbiyXmnEFjRFiHY/GvEU7nI+HjjtUDsP4Z/P5bsvHyyFk5RvL+PF7uH57Dza l1DWI3hPqakkzmW3itWvdPqSXpWjVJYNIFXvWg+ZGLGb2hWxvhn+OiyzZQRvlBNxA48Xf99kAfAe 8NFq2o1fhd6lNKA3KL9IaafhIKeoOO44s3ToD8smcMO6AH9SfyaYarJe0skj3eJh5cr27j9vyVra XzALiNJLvU1MjBV/0zTmZSzFaNGy7lV4nY71yM44q2EP9LP723HLUcQBll3/AKeL7q7q96L0g6kb /jeanqFrb8BIs1xc2TozUH7tgo5dyKjwyrNwcPpjAnyjL5t2m8TxPXPJGNXcpYyPd3o2XQlNxHXz feKUZlaMzwhixUNSgVRXia/Ep2ykajb+5j8i3z0QMh/hM9unFHu93dvuCiDpSeoWk803XDgqKomg Wh4ABqhd2PHl4ZDxttsUfkW86YXvnn8493u+LbaSnpyIfNN2HV29V/WtwVr+yRwotOP68Rm3vwo/ KX61Ol2I/MT577w/4nyTrSdOmsYXjkvp78u3MSXJQsKgCgKKm2YmbKJmxER9zn6bAcYIM5Tv+dX6 AEblLkuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KsZ1rylc6jqkl4JLMRlQIxLZrLMrrGQ p9YsG2ejbZsMGtGOHDUv9NQ593udPq+zJZcpncPjAE8tvVffug28h3Y/updOjPwkP+joywkX7Lk8 6Ejemw65cO0Y9RP/AE5/U4/8jSHI4h/ySHPv5+9SH5f3YioJdMV3DrLTTYwhUlCuwcGqlCetN+nf D/KUb5T/ANOfPyY/yJKueLrf7oeVdelNjyBeKgEU2mowBqf0dEQeS8WFOQ2NT+rH+Uo9RP8A05X+ RJjkcQ/5JDu36tt5BulmLw/opQyMp/3HoOJag2UMeQKVBBPXf2xHaMa38T/TpPY0gbHhcv8AUx+v u8/1LT5B1JmjD3GnFY6hGXT0VlPCiuPjO6lV+gYf5Sh3T/0/7Pej+Rcm2+Pb/axttsefTb5N3P5f XMrQuJNN9RDzkdtOSrSGtSeLgEGvQ4I9pAWKn/p/2Lk7ElKjeK+v7obn5q1v5M1mKQn69ZBXYtM0 dlwlYuwZ2Eqyh0ZuC/EDUEV6jIS12Mj6Zf6bb5VTZDsrKD9cN+dY6O/PcSsHYbj39EOPIWpohWOT SiGUCSunL+8PLlxc8ztVVyz+UYHmMn+n5fY1DsXIBQOH/lVz9+7I4fK3l2ONUGm2oAYScREvESAU 5qtKA+4zAlrMpP1S+bto9nacCuCPfyHPvaPlHyswQNpNoQgogMMZoCSadPE4fzub+fL5lH8mab/U 4bf0Q0fKHlYqFOk2nFWLKvopxBYAE0pTfiMfzub+fL5r/Jmm5eHD/ShzeUPKzfa0m0Y8QtTChNFF ANx2GP53N/Pl81PZmmP+Th/pQ3J5R8rSMzvpNozOSWb0UqSTUnpiNbmH8cvmsuzNMTZxw/0oTWON I41jQURAFUeAGwzGJs25oAAoN4EuxV2KuxV2KuxV2KuxV//Z uuid:B3844C4C895DDD119FAB811BD235A9FF uuid:4b91fa5b-ebd4-4a7a-be50-c5f8819f9f27 uuid:B2844C4C895DDD119FAB811BD235A9FF uuid:AF844C4C895DDD119FAB811BD235A9FF endstream endobj xref 0 123 0000000003 00000 f 0000000016 00000 n 0000000077 00000 n 0000000004 00001 f 0000000006 00000 f 0000000127 00000 n 0000000007 00001 f 0000000008 00000 f 0000000009 00000 f 0000000010 00000 f 0000000011 00000 f 0000000012 00000 f 0000000013 00000 f 0000000014 00000 f 0000000015 00000 f 0000000016 00000 f 0000000017 00000 f 0000000018 00000 f 0000000019 00000 f 0000000020 00000 f 0000000021 00000 f 0000000022 00000 f 0000000023 00000 f 0000000024 00000 f 0000000025 00000 f 0000000026 00000 f 0000000027 00000 f 0000000028 00000 f 0000000029 00000 f 0000000030 00000 f 0000000031 00000 f 0000000032 00001 f 0000000033 00000 f 0000000034 00000 f 0000000035 00000 f 0000000036 00000 f 0000000037 00000 f 0000000038 00000 f 0000000039 00000 f 0000000040 00001 f 0000000041 00000 f 0000000042 00000 f 0000000043 00000 f 0000000044 00000 f 0000000045 00000 f 0000000046 00000 f 0000000047 00000 f 0000000048 00000 f 0000000049 00000 f 0000000050 00000 f 0000000051 00000 f 0000000052 00000 f 0000000053 00000 f 0000000054 00000 f 0000000055 00000 f 0000000056 00000 f 0000000057 00000 f 0000000058 00000 f 0000000059 00000 f 0000000060 00000 f 0000000061 00000 f 0000000062 00000 f 0000000063 00000 f 0000000064 00000 f 0000000065 00001 f 0000000066 00000 f 0000000067 00000 f 0000000068 00000 f 0000000069 00000 f 0000000070 00000 f 0000000071 00000 f 0000000088 00000 f 0000000799 00000 n 0000000872 00000 n 0000001268 00000 n 0000002443 00000 n 0000013702 00000 n 0000079290 00000 n 0000144878 00000 n 0000210466 00000 n 0000276054 00000 n 0000341642 00000 n 0000407230 00000 n 0000472818 00000 n 0000538406 00000 n 0000603994 00000 n 0000669582 00000 n 0000680866 00000 n 0000000089 00001 f 0000000090 00001 f 0000000091 00001 f 0000000092 00001 f 0000000093 00001 f 0000000094 00001 f 0000000095 00001 f 0000000096 00001 f 0000000097 00001 f 0000000098 00001 f 0000000099 00001 f 0000000100 00001 f 0000000101 00001 f 0000000102 00001 f 0000000000 00001 f 0000680978 00000 n 0000681014 00000 n 0001238240 00000 n 0001238768 00000 n 0001239016 00000 n 0001239412 00000 n 0001239677 00000 n 0001240064 00000 n 0001240323 00000 n 0001240664 00000 n 0001240919 00000 n 0001259470 00000 n 0001259593 00000 n 0001299798 00000 n 0001328187 00000 n 0001354553 00000 n 0001370207 00000 n 0001370256 00000 n 0001370770 00000 n 0001371573 00000 n trailer <<1DE576B4D69E0E4D8B0BC4F75D4B6A9F>]>> startxref 1395446 %%EOF hmmer-3.1b2/src/impl_sse/p7_omx.c0000664361611702660230000005335512473612613016262 0ustar wheelerteddy/* SSE implementation of an optimized profile structure. * * Contents: * 1. The P7_OMX structure: a dynamic programming matrix * 2. Debugging dumps of P7_OMX structures * 3. Copyright and license information * * See also: * p7_omx.ai - figure illustrating the layout of a P7_OMX. * * SRE, Sun Nov 25 11:26:48 2007 [Casa de Gatos] * SVN $Id: p7_omx.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include #include #include #include /* SSE */ #include /* SSE2 */ #include "easel.h" #include "esl_alphabet.h" #include "esl_vectorops.h" #include "esl_sse.h" #include "hmmer.h" #include "impl_sse.h" /***************************************************************** * 1. The P7_OMX structure: a dynamic programming matrix *****************************************************************/ /* Function: p7_omx_Create() * Synopsis: Create an optimized dynamic programming matrix. * Incept: SRE, Tue Nov 27 08:48:20 2007 [Janelia] * * Purpose: Allocates a reusable, resizeable for models up to * size and target sequences up to length * , for use by any of the various optimized * DP routines. * * To allocate the very memory-efficient one-row matrix * used by *Filter() and *Score() functions that only * calculate scores, , , and * . * * To allocate the reasonably memory-efficient linear * arrays used by *Parser() functions that only keep * special (X) state scores, , , * and . * * To allocate a complete matrix suitable for functions * that need the whole DP matrix for traceback, sampling, * posterior decoding, or reestimation, and * . * * Returns: a pointer to the new . * * Throws: on allocation failure. */ P7_OMX * p7_omx_Create(int allocM, int allocL, int allocXL) { P7_OMX *ox = NULL; int i; int status; ESL_ALLOC(ox, sizeof(P7_OMX)); ox->dp_mem = NULL; ox->dpb = NULL; ox->dpw = NULL; ox->dpf = NULL; ox->xmx = NULL; ox->x_mem = NULL; /* DP matrix will be allocated for allocL+1 rows 0,1..L; allocQ4*p7X_NSCELLS columns */ ox->allocR = allocL+1; ox->validR = ox->allocR; ox->allocQ4 = p7O_NQF(allocM); ox->allocQ8 = p7O_NQW(allocM); ox->allocQ16 = p7O_NQB(allocM); ox->ncells = ox->allocR * ox->allocQ4 * 4; /* # of DP cells allocated, where 1 cell contains MDI */ ESL_ALLOC(ox->dp_mem, sizeof(__m128) * ox->allocR * ox->allocQ4 * p7X_NSCELLS + 15); /* floats always dominate; +15 for alignment */ ESL_ALLOC(ox->dpb, sizeof(__m128i *) * ox->allocR); ESL_ALLOC(ox->dpw, sizeof(__m128i *) * ox->allocR); ESL_ALLOC(ox->dpf, sizeof(__m128 *) * ox->allocR); ox->dpb[0] = (__m128i *) ( ( (unsigned long int) ((char *) ox->dp_mem + 15) & (~0xf))); ox->dpw[0] = (__m128i *) ( ( (unsigned long int) ((char *) ox->dp_mem + 15) & (~0xf))); ox->dpf[0] = (__m128 *) ( ( (unsigned long int) ((char *) ox->dp_mem + 15) & (~0xf))); for (i = 1; i <= allocL; i++) { ox->dpf[i] = ox->dpf[0] + i * ox->allocQ4 * p7X_NSCELLS; ox->dpw[i] = ox->dpw[0] + i * ox->allocQ8 * p7X_NSCELLS; ox->dpb[i] = ox->dpb[0] + i * ox->allocQ16; } ox->allocXR = allocXL+1; ESL_ALLOC(ox->x_mem, sizeof(float) * ox->allocXR * p7X_NXCELLS + 15); ox->xmx = (float *) ( ( (unsigned long int) ((char *) ox->x_mem + 15) & (~0xf))); ox->M = 0; ox->L = 0; ox->totscale = 0.0; ox->has_own_scales = TRUE; /* most matrices are Forward, control their own scale factors */ #ifdef p7_DEBUGGING ox->debugging = FALSE; ox->dfp = NULL; #endif return ox; ERROR: p7_omx_Destroy(ox); return NULL; } /* Function: p7_omx_GrowTo() * Synopsis: Assure that a DP matrix is big enough. * Incept: SRE, Thu Dec 20 09:27:07 2007 [Janelia] * * Purpose: Assures that an optimized DP matrix is allocated for * a model up to in length; if not, reallocate to * make it so. * * Because the optimized matrix is one-row, only the model * length matters; the target sequence length isn't * relevant. * * Returns: on success, and may be reallocated upon * return; any data that may have been in must be * assumed to be invalidated. * * Throws: on allocation failure, and any data that may * have been in must be assumed to be invalidated. */ int p7_omx_GrowTo(P7_OMX *ox, int allocM, int allocL, int allocXL) { void *p; int nqf = p7O_NQF(allocM); /* segment length; total # of striped vectors for uchar */ int nqw = p7O_NQW(allocM); /* segment length; total # of striped vectors for float */ int nqb = p7O_NQB(allocM); /* segment length; total # of striped vectors for float */ size_t ncells = (allocL+1) * nqf * 4; int reset_row_pointers = FALSE; int i; int status; /* If all possible dimensions are already satisfied, the matrix is fine */ if (ox->allocQ4*4 >= allocM && ox->validR > allocL && ox->allocXR >= allocXL+1) return eslOK; /* If the main matrix is too small in cells, reallocate it; * and we'll need to realign/reset the row pointers later. */ if (ncells > ox->ncells) { ESL_RALLOC(ox->dp_mem, p, sizeof(__m128) * (allocL+1) * nqf * p7X_NSCELLS + 15); ox->ncells = ncells; reset_row_pointers = TRUE; } /* If the X beams are too small, reallocate them. */ if (allocXL+1 >= ox->allocXR) { ESL_RALLOC(ox->x_mem, p, sizeof(float) * (allocXL+1) * p7X_NXCELLS + 15); ox->allocXR = allocXL+1; ox->xmx = (float *) ( ( (unsigned long int) ((char *) ox->x_mem + 15) & (~0xf))); } /* If there aren't enough rows, reallocate the row pointers; we'll * realign and reset them later. */ if (allocL >= ox->allocR) { ESL_RALLOC(ox->dpb, p, sizeof(__m128i *) * (allocL+1)); ESL_RALLOC(ox->dpw, p, sizeof(__m128i *) * (allocL+1)); ESL_RALLOC(ox->dpf, p, sizeof(__m128 *) * (allocL+1)); ox->allocR = allocL+1; reset_row_pointers = TRUE; } /* must we widen the rows? */ if (allocM > ox->allocQ4*4) reset_row_pointers = TRUE; /* must we set some more valid row pointers? */ if (allocL >= ox->validR) reset_row_pointers = TRUE; /* now reset the row pointers, if needed */ if (reset_row_pointers) { ox->dpb[0] = (__m128i *) ( ( (unsigned long int) ((char *) ox->dp_mem + 15) & (~0xf))); ox->dpw[0] = (__m128i *) ( ( (unsigned long int) ((char *) ox->dp_mem + 15) & (~0xf))); ox->dpf[0] = (__m128 *) ( ( (unsigned long int) ((char *) ox->dp_mem + 15) & (~0xf))); ox->validR = ESL_MIN( ox->ncells / (nqf * 4), ox->allocR); for (i = 1; i < ox->validR; i++) { ox->dpb[i] = ox->dpb[0] + i * nqb; ox->dpw[i] = ox->dpw[0] + i * nqw * p7X_NSCELLS; ox->dpf[i] = ox->dpf[0] + i * nqf * p7X_NSCELLS; } ox->allocQ4 = nqf; ox->allocQ8 = nqw; ox->allocQ16 = nqb; } ox->M = 0; ox->L = 0; return eslOK; ERROR: return status; } /* Function: p7_omx_FDeconvert() * Synopsis: Convert an optimized DP matrix to generic one. * Incept: SRE, Tue Aug 19 17:58:13 2008 [Janelia] * * Purpose: Convert the 32-bit float values in optimized DP matrix * to a generic one . Caller provides with sufficient * space to hold the M> by L> matrix. * * This function is used to gain access to the * somewhat more powerful debugging and display * tools available for generic DP matrices. */ int p7_omx_FDeconvert(P7_OMX *ox, P7_GMX *gx) { int Q = p7O_NQF(ox->M); int i, q, r, k; union { __m128 v; float p[4]; } u; float **dp = gx->dp; float *xmx = gx->xmx; for (i = 0; i <= ox->L; i++) { MMX(i,0) = DMX(i,0) = IMX(i,0) = -eslINFINITY; for (q = 0; q < Q; q++) { u.v = MMO(ox->dpf[i],q); for (r = 0; r < 4; r++) { k = (Q*r)+q+1; if (k <= ox->M) MMX(i, (Q*r)+q+1) = u.p[r]; } u.v = DMO(ox->dpf[i],q); for (r = 0; r < 4; r++) { k = (Q*r)+q+1; if (k <= ox->M) DMX(i, (Q*r)+q+1) = u.p[r]; } u.v = IMO(ox->dpf[i],q); for (r = 0; r < 4; r++) { k = (Q*r)+q+1; if (k <= ox->M) IMX(i, (Q*r)+q+1) = u.p[r]; } } XMX(i,p7G_E) = ox->xmx[i*p7X_NXCELLS+p7X_E]; XMX(i,p7G_N) = ox->xmx[i*p7X_NXCELLS+p7X_N]; XMX(i,p7G_J) = ox->xmx[i*p7X_NXCELLS+p7X_J]; XMX(i,p7G_B) = ox->xmx[i*p7X_NXCELLS+p7X_B]; XMX(i,p7G_C) = ox->xmx[i*p7X_NXCELLS+p7X_C]; } gx->L = ox->L; gx->M = ox->M; return eslOK; } /* Function: p7_omx_Reuse() * Synopsis: Recycle an optimized DP matrix. * Incept: SRE, Wed Oct 22 11:31:00 2008 [Janelia] * * Purpose: Recycles for re-use. * * Returns: on success. */ int p7_omx_Reuse(P7_OMX *ox) { ox->M = 0; ox->L = 0; ox->totscale = 0.0; ox->has_own_scales = TRUE; /* default assumes a Forward matrix, with its own scale factors */ #ifdef p7_DEBUGGING ox->debugging = FALSE; ox->dfp = NULL; #endif return eslOK; } /* Function: p7_omx_Destroy() * Synopsis: Frees an optimized DP matrix. * Incept: SRE, Tue Nov 27 09:11:42 2007 [Janelia] * * Purpose: Frees optimized DP matrix . * * Returns: (void) */ void p7_omx_Destroy(P7_OMX *ox) { if (ox == NULL) return; if (ox->x_mem != NULL) free(ox->x_mem); if (ox->dp_mem != NULL) free(ox->dp_mem); if (ox->dpf != NULL) free(ox->dpf); if (ox->dpw != NULL) free(ox->dpw); if (ox->dpb != NULL) free(ox->dpb); free(ox); return; } /*------------------- end, P7_OMX structure ---------------------*/ /***************************************************************** * 2. Debugging dumps of P7_OMX structures *****************************************************************/ /* Because the P7_OMX may be a one-row DP matrix, we can't just run a * DP calculation and then dump a whole matrix; we have to dump each * row one at a time, as the DP calculation is progressing. Thus we * need to call the dump from *within* some DP routines. We'd rather not * have anything like this in production code - not even a flag check. * So, we use a compile-time debugging idiom, with conditionally * compiled debugging code that's added to the DP routines to check a * debugging flag in the P7_OMX structure; if it's up, we dump a row. * * Therefore, the externally exposed API call is p7_omx_SetDumpMode(), * rather than the dumping routine itself; and all p7_omx_SetDumpMode() * does is sets the debugging flag in . */ /* Function: p7_omx_SetDumpMode() * Synopsis: Set an optimized DP matrix to be dumped for debugging. * Incept: SRE, Thu Dec 13 10:24:38 2007 [Janelia] * * Purpose: Sets debugging mode for DP matrix . If * flag is , then whenever a dynamic programming * calculation is run, dump DP matrix to stream * for diagnostics. * * When the dump mode is on, the DP routine itself actually * does the dumping, because it has to dump after every row * is calculated. (We're doing an optimized one-row * calculation.) * * If the code has not been compiled with the * flag up, this function is a no-op. * * Args: fp - output stream for diagnostics (stdout, perhaps) * ox - DP matrix to set debugging mode * truefalse - TRUE to set dumping, FALSE to unset * * Returns: on success. * * Throws: (no abnormal error conditions) * * Xref: J2/62. */ int p7_omx_SetDumpMode(FILE *fp, P7_OMX *ox, int truefalse) { #if p7_DEBUGGING ox->debugging = truefalse; ox->dfp = fp; #endif return eslOK; } /* Function: p7_omx_DumpMFRow() * Synopsis: Dump one row from MSV uchar version of a DP matrix. * Incept: SRE, Wed Jul 30 16:47:26 2008 [Janelia] * * Purpose: Dump current row of uchar part of DP matrix for diagnostics, * and include the values of specials , etc. The index for * the current row is used as a row label. This routine has to be * specialized for the layout of the MSVFilter() row, because it's * all match scores dp[0..q..Q-1], rather than triplets of M,D,I. * * If is 0, print a header first too. * * The output format is coordinated with to * facilitate comparison to a known answer. * * Returns: on success. * * Throws: on allocation failure. */ int p7_omx_DumpMFRow(P7_OMX *ox, int rowi, uint8_t xE, uint8_t xN, uint8_t xJ, uint8_t xB, uint8_t xC) { __m128i *dp = ox->dpb[0]; int M = ox->M; int Q = p7O_NQB(M); uint8_t *v = NULL; /* array of unstriped scores */ int q,z,k; union { __m128i v; uint8_t i[16]; } tmp; int status; ESL_ALLOC(v, sizeof(unsigned char) * ((Q*16)+1)); v[0] = 0; /* Header (if we're on the 0th row) */ if (rowi == 0) { fprintf(ox->dfp, " "); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%3d ", k); fprintf(ox->dfp, "%3s %3s %3s %3s %3s\n", "E", "N", "J", "B", "C"); fprintf(ox->dfp, " "); for (k = 0; k <= M+5; k++) fprintf(ox->dfp, "%3s ", "---"); fprintf(ox->dfp, "\n"); } /* Unpack and unstripe, then print M's. */ for (q = 0; q < Q; q++) { tmp.v = dp[q]; for (z = 0; z < 16; z++) v[q+Q*z+1] = tmp.i[z]; } fprintf(ox->dfp, "%4d M ", rowi); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%3d ", v[k]); /* The specials */ fprintf(ox->dfp, "%3d %3d %3d %3d %3d\n", xE, xN, xJ, xB, xC); /* I's are all 0's; print just to facilitate comparison. */ fprintf(ox->dfp, "%4d I ", rowi); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%3d ", 0); fprintf(ox->dfp, "\n"); /* D's are all 0's too */ fprintf(ox->dfp, "%4d D ", rowi); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%3d ", 0); fprintf(ox->dfp, "\n\n"); free(v); return eslOK; ERROR: free(v); return status; } /* Function: p7_omx_DumpVFRow() * Synopsis: Dump current row of ViterbiFilter (int16) part of matrix. * Incept: SRE, Wed Jul 30 16:43:21 2008 [Janelia] * * Purpose: Dump current row of ViterbiFilter (int16) part of DP * matrix for diagnostics, and include the values of * specials , etc. The index for the current row * is used as a row label. * * If is 0, print a header first too. * * The output format is coordinated with to * facilitate comparison to a known answer. * * Returns: on success. * * Throws: on allocation failure. */ int p7_omx_DumpVFRow(P7_OMX *ox, int rowi, int16_t xE, int16_t xN, int16_t xJ, int16_t xB, int16_t xC) { __m128i *dp = ox->dpw[0]; /* must set before using {MDI}MX macros */ int M = ox->M; int Q = p7O_NQW(M); int16_t *v = NULL; /* array of unstriped, uninterleaved scores */ int q,z,k; union { __m128i v; int16_t i[8]; } tmp; int status; ESL_ALLOC(v, sizeof(int16_t) * ((Q*8)+1)); v[0] = 0; /* Header (if we're on the 0th row) */ if (rowi == 0) { fprintf(ox->dfp, " "); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%6d ", k); fprintf(ox->dfp, "%6s %6s %6s %6s %6s\n", "E", "N", "J", "B", "C"); fprintf(ox->dfp, " "); for (k = 0; k <= M+5; k++) fprintf(ox->dfp, "%6s ", "------"); fprintf(ox->dfp, "\n"); } /* Unpack and unstripe, then print M's. */ for (q = 0; q < Q; q++) { tmp.v = MMXo(q); for (z = 0; z < 8; z++) v[q+Q*z+1] = tmp.i[z]; } fprintf(ox->dfp, "%4d M ", rowi); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%6d ", v[k]); /* The specials */ fprintf(ox->dfp, "%6d %6d %6d %6d %6d\n", xE, xN, xJ, xB, xC); /* Unpack and unstripe, then print I's. */ for (q = 0; q < Q; q++) { tmp.v = IMXo(q); for (z = 0; z < 8; z++) v[q+Q*z+1] = tmp.i[z]; } fprintf(ox->dfp, "%4d I ", rowi); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%6d ", v[k]); fprintf(ox->dfp, "\n"); /* Unpack, unstripe, then print D's. */ for (q = 0; q < Q; q++) { tmp.v = DMXo(q); for (z = 0; z < 8; z++) v[q+Q*z+1] = tmp.i[z]; } fprintf(ox->dfp, "%4d D ", rowi); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%6d ", v[k]); fprintf(ox->dfp, "\n\n"); free(v); return eslOK; ERROR: free(v); return status; } /* Function: p7_omx_DumpFBRow() * Synopsis: Dump one row from float part of a DP matrix. * Incept: SRE, Wed Jul 30 16:45:16 2008 [Janelia] * * Purpose: Dump current row of Forward/Backward (float) part of DP * matrix for diagnostics, and include the values of * specials , etc. The index for the current row * is used as a row label. * * The output format of the floats is controlled by * , ; 8,5 is good for pspace, 5,2 is * fine for lspace. * * If is 0, print a header first too. * * If is TRUE, then scores are printed as log(score); this is * useful for comparing DP with pspace scores with other DP matrices * (like generic P7_GMX ones) that use log-odds scores. * * The output format is coordinated with to * facilitate comparison to a known answer. * * Returns: on success. * * Throws: on allocation failure. */ int p7_omx_DumpFBRow(P7_OMX *ox, int logify, int rowi, int width, int precision, float xE, float xN, float xJ, float xB, float xC) { __m128 *dp; int M = ox->M; int Q = p7O_NQF(M); float *v = NULL; /* array of uninterleaved, unstriped scores */ int q,z,k; union { __m128 v; float x[4]; } tmp; int status; dp = (ox->allocR == 1) ? ox->dpf[0] : ox->dpf[rowi]; /* must set before using {MDI}MX macros */ ESL_ALLOC(v, sizeof(float) * ((Q*4)+1)); v[0] = 0.; if (rowi == 0) { fprintf(ox->dfp, " "); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%*d ", width, k); fprintf(ox->dfp, "%*s %*s %*s %*s %*s\n", width, "E", width, "N", width, "J", width, "B", width, "C"); fprintf(ox->dfp, " "); for (k = 0; k <= M+5; k++) fprintf(ox->dfp, "%*s ", width, "--------"); fprintf(ox->dfp, "\n"); } /* Unpack, unstripe, then print M's. */ for (q = 0; q < Q; q++) { tmp.v = MMXo(q); for (z = 0; z < 4; z++) v[q+Q*z+1] = tmp.x[z]; } fprintf(ox->dfp, "%3d M ", rowi); if (logify) for (k = 0; k <= M; k++) fprintf(ox->dfp, "%*.*f ", width, precision, v[k] == 0. ? -eslINFINITY : log(v[k])); else for (k = 0; k <= M; k++) fprintf(ox->dfp, "%*.*f ", width, precision, v[k]); /* The specials */ if (logify) fprintf(ox->dfp, "%*.*f %*.*f %*.*f %*.*f %*.*f\n", width, precision, xE == 0. ? -eslINFINITY : log(xE), width, precision, xN == 0. ? -eslINFINITY : log(xN), width, precision, xJ == 0. ? -eslINFINITY : log(xJ), width, precision, xB == 0. ? -eslINFINITY : log(xB), width, precision, xC == 0. ? -eslINFINITY : log(xC)); else fprintf(ox->dfp, "%*.*f %*.*f %*.*f %*.*f %*.*f\n", width, precision, xE, width, precision, xN, width, precision, xJ, width, precision, xB, width, precision, xC); /* Unpack, unstripe, then print I's. */ for (q = 0; q < Q; q++) { tmp.v = IMXo(q); for (z = 0; z < 4; z++) v[q+Q*z+1] = tmp.x[z]; } fprintf(ox->dfp, "%3d I ", rowi); if (logify) for (k = 0; k <= M; k++) fprintf(ox->dfp, "%*.*f ", width, precision, v[k] == 0. ? -eslINFINITY : log(v[k])); else for (k = 0; k <= M; k++) fprintf(ox->dfp, "%*.*f ", width, precision, v[k]); fprintf(ox->dfp, "\n"); /* Unpack, unstripe, then print D's. */ for (q = 0; q < Q; q++) { tmp.v = DMXo(q); for (z = 0; z < 4; z++) v[q+Q*z+1] = tmp.x[z]; } fprintf(ox->dfp, "%3d D ", rowi); if (logify) for (k = 0; k <= M; k++) fprintf(ox->dfp, "%*.*f ", width, precision, v[k] == 0. ? -eslINFINITY : log(v[k])); else for (k = 0; k <= M; k++) fprintf(ox->dfp, "%*.*f ", width, precision, v[k]); fprintf(ox->dfp, "\n\n"); free(v); return eslOK; ERROR: free(v); return status; } /*------------- end, debugging dumps of P7_OMX ------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ /*---------------------- end, test driver -----------------------*/ /***************************************************************** * 13. Example *****************************************************************/ /*------------------------ example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/generic_vtrace.c0000664361611702660230000002636112473612613016213 0ustar wheelerteddy/* Viterbi traceback; generic (non-SIMD) version. * * Contents: * 1. Viterbi traceback * 2. Example. * 3. Copyright and license information. * * SRE, Fri Aug 15 09:17:11 2008 [Janelia] * SVN $Id: generic_vtrace.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "hmmer.h" /***************************************************************** * 1. Viterbi traceback, generic version *****************************************************************/ /* Function: p7_GTrace() * Incept: SRE, Thu Feb 1 10:25:56 2007 [UA 8018 St. Louis to Dulles] * * Purpose: Traceback of a Viterbi matrix: retrieval * of optimum alignment. * * This function is currently implemented as a * reconstruction traceback, rather than using a shadow * matrix. Because H3 uses floating point scores, and we * can't compare floats for equality, we have to compare * floats for near-equality and therefore, formally, we can * only guarantee a near-optimal traceback. However, even in * the unlikely event that a suboptimal is returned, the * score difference from true optimal will be negligible. * * Args: dsq - digital sequence aligned to, 1..L * L - length of * gm - profile * mx - Viterbi matrix to trace, L x M * tr - storage for the recovered traceback. * * Return: on success. * if even the optimal path has zero probability; * in this case, the trace is set blank (N = 0>). * * Note: Care is taken to evaluate the prev+tsc+emission * calculations in exactly the same order that Viterbi did * them, lest you get numerical problems with * a+b+c = d; d-c != a+b because d,c are nearly equal. * (This bug appeared in dev: xref J1/121.) */ int p7_GTrace(const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, const P7_GMX *gx, P7_TRACE *tr) { int i = L; /* position in seq (1..L) */ int k = 0; /* position in model (1..M) */ int M = gm->M; float **dp = gx->dp; /* so {MDI}MX() macros work */ float *xmx = gx->xmx; /* so XMX() macro works */ float tol = 1e-5; /* floating point "equality" test */ float const *tsc = gm->tsc; int sprv, scur; /* previous, current state in trace */ int status; #ifdef p7_DEBUGGING if (tr->N != 0) ESL_EXCEPTION(eslEINVAL, "trace isn't empty: forgot to Reuse()?"); #endif if ((status = p7_trace_Append(tr, p7T_T, k, i)) != eslOK) return status; if ((status = p7_trace_Append(tr, p7T_C, k, i)) != eslOK) return status; sprv = p7T_C; while (sprv != p7T_S) { float const *rsc = (i>0 ? gm->rsc[dsq[i]] : NULL); switch (sprv) { case p7T_C: /* C(i) comes from C(i-1) or E(i) */ if (XMX(i,p7G_C) == -eslINFINITY) ESL_EXCEPTION(eslFAIL, "impossible C reached at i=%d", i); if (esl_FCompare(XMX(i, p7G_C), XMX(i-1, p7G_C) + gm->xsc[p7P_C][p7P_LOOP], tol) == eslOK) scur = p7T_C; else if (esl_FCompare(XMX(i, p7G_C), XMX(i, p7G_E) + gm->xsc[p7P_E][p7P_MOVE], tol) == eslOK) scur = p7T_E; else ESL_EXCEPTION(eslFAIL, "C at i=%d couldn't be traced", i); break; case p7T_E: /* E connects from any M state. k set here */ if (XMX(i, p7G_E) == -eslINFINITY) ESL_EXCEPTION(eslFAIL, "impossible E reached at i=%d", i); if (p7_profile_IsLocal(gm)) { scur = p7T_M; /* can't come from D, in a *local* Viterbi trace. */ for (k = M; k >= 1; k--) if (esl_FCompare(XMX(i, p7G_E), MMX(i,k), tol) == eslOK) break; if (k == 0) ESL_EXCEPTION(eslFAIL, "E at i=%d couldn't be traced", i); } else /* glocal mode: we either come from D_M or M_M */ { if (esl_FCompare(XMX(i, p7G_E), MMX(i,M), tol) == eslOK) { scur = p7T_M; k = M; } else if (esl_FCompare(XMX(i, p7G_E), DMX(i,M), tol) == eslOK) { scur = p7T_D; k = M; } else ESL_EXCEPTION(eslFAIL, "E at i=%d couldn't be traced", i); } break; case p7T_M: /* M connects from i-1,k-1, or B */ if (MMX(i,k) == -eslINFINITY) ESL_EXCEPTION(eslFAIL, "impossible M reached at k=%d,i=%d", k,i); if (esl_FCompare(MMX(i,k), XMX(i-1,p7G_B) + TSC(p7P_BM, k-1) + MSC(k), tol) == eslOK) scur = p7T_B; else if (esl_FCompare(MMX(i,k), MMX(i-1,k-1) + TSC(p7P_MM, k-1) + MSC(k), tol) == eslOK) scur = p7T_M; else if (esl_FCompare(MMX(i,k), IMX(i-1,k-1) + TSC(p7P_IM, k-1) + MSC(k), tol) == eslOK) scur = p7T_I; else if (esl_FCompare(MMX(i,k), DMX(i-1,k-1) + TSC(p7P_DM, k-1) + MSC(k), tol) == eslOK) scur = p7T_D; else ESL_EXCEPTION(eslFAIL, "M at k=%d,i=%d couldn't be traced", k,i); k--; i--; break; case p7T_D: /* D connects from M,D at i,k-1 */ if (DMX(i, k) == -eslINFINITY) ESL_EXCEPTION(eslFAIL, "impossible D reached at k=%d,i=%d", k,i); if (esl_FCompare(DMX(i,k), MMX(i, k-1) + TSC(p7P_MD, k-1), tol) == eslOK) scur = p7T_M; else if (esl_FCompare(DMX(i,k), DMX(i, k-1) + TSC(p7P_DD, k-1), tol) == eslOK) scur = p7T_D; else ESL_EXCEPTION(eslFAIL, "D at k=%d,i=%d couldn't be traced", k,i); k--; break; case p7T_I: /* I connects from M,I at i-1,k*/ if (IMX(i,k) == -eslINFINITY) ESL_EXCEPTION(eslFAIL, "impossible I reached at k=%d,i=%d", k,i); if (esl_FCompare(IMX(i,k), MMX(i-1,k) + TSC(p7P_MI, k) + ISC(k), tol) == eslOK) scur = p7T_M; else if (esl_FCompare(IMX(i,k), IMX(i-1,k) + TSC(p7P_II, k) + ISC(k), tol) == eslOK) scur = p7T_I; else ESL_EXCEPTION(eslFAIL, "I at k=%d,i=%d couldn't be traced", k,i); i--; break; case p7T_N: /* N connects from S, N */ if (XMX(i, p7G_N) == -eslINFINITY) ESL_EXCEPTION(eslFAIL, "impossible N reached at i=%d", i); scur = ( (i == 0) ? p7T_S : p7T_N); break; case p7T_B: /* B connects from N, J */ if (XMX(i,p7G_B) == -eslINFINITY) ESL_EXCEPTION(eslFAIL, "impossible B reached at i=%d", i); if (esl_FCompare(XMX(i,p7G_B), XMX(i, p7G_N) + gm->xsc[p7P_N][p7P_MOVE], tol) == eslOK) scur = p7T_N; else if (esl_FCompare(XMX(i,p7G_B), XMX(i, p7G_J) + gm->xsc[p7P_J][p7P_MOVE], tol) == eslOK) scur = p7T_J; else ESL_EXCEPTION(eslFAIL, "B at i=%d couldn't be traced", i); break; case p7T_J: /* J connects from E(i) or J(i-1) */ if (XMX(i,p7G_J) == -eslINFINITY) ESL_EXCEPTION(eslFAIL, "impossible J reached at i=%d", i); if (esl_FCompare(XMX(i,p7G_J), XMX(i-1,p7G_J) + gm->xsc[p7P_J][p7P_LOOP], tol) == eslOK) scur = p7T_J; else if (esl_FCompare(XMX(i,p7G_J), XMX(i, p7G_E) + gm->xsc[p7P_E][p7P_LOOP], tol) == eslOK) scur = p7T_E; else ESL_EXCEPTION(eslFAIL, "J at i=%d couldn't be traced", i); break; default: ESL_EXCEPTION(eslFAIL, "bogus state in traceback"); } /* end switch over statetype[tpos-1] */ /* Append this state and the current i,k to be explained to the growing trace */ if ((status = p7_trace_Append(tr, scur, k, i)) != eslOK) return status; /* For NCJ, we had to defer i decrement. */ if ( (scur == p7T_N || scur == p7T_J || scur == p7T_C) && scur == sprv) i--; sprv = scur; } /* end traceback, at S state */ tr->M = gm->M; tr->L = L; return p7_trace_Reverse(tr); } /***************************************************************** * 2. Example *****************************************************************/ #ifdef p7GENERIC_VTRACE_EXAMPLE /* gcc -g -O2 -Dp7GENERIC_VTRACE_EXAMPLE -I. -I../easel -L. -L../easel -o generic_vtrace_example generic_vtrace.c -lhmmer -leasel -lm */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of generic Viterbi tracebacks"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *fwd = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; P7_TRACE *tr = NULL; int format = eslSQFILE_UNKNOWN; char errbuf[eslERRBUFSIZE]; float sc; int d; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); esl_sqfile_Close(sqfp); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); /* Allocate matrix and a trace */ fwd = p7_gmx_Create(gm->M, sq->n); tr = p7_trace_Create(); /* Run Viterbi; do traceback */ p7_GViterbi (sq->dsq, sq->n, gm, fwd, &sc); p7_GTrace (sq->dsq, sq->n, gm, fwd, tr); /* Dump and validate the trace. */ p7_trace_Dump(stdout, tr, gm, sq->dsq); if (p7_trace_Validate(tr, abc, sq->dsq, errbuf) != eslOK) p7_Die("trace fails validation:\n%s\n", errbuf); /* Domain info in the trace. */ p7_trace_Index(tr); printf("# Viterbi: %d domains :\n", tr->ndom); for (d = 0; d < tr->ndom; d++) printf("%6d %6d %6d %6d\n", tr->sqfrom[d], tr->sqto[d], tr->hmmfrom[d], tr->hmmto[d]); /* Cleanup */ p7_trace_Destroy(tr); p7_gmx_Destroy(fwd); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_VTRACE_EXAMPLE*/ /*-------------------- end, example -----------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/nhmmer.c0000664361611702660230000024104012473612614014513 0ustar wheelerteddy/* nhmmer: search profile HMM(s) against a nucleotide sequence database. */ #include "p7_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_dmatrix.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_scorematrix.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stopwatch.h" #ifdef HMMER_THREADS #include #include "esl_threads.h" #include "esl_workqueue.h" #endif /*HMMER_THREADS*/ #include "hmmer.h" /* set the max residue count to 1/4 meg when reading a block */ #ifdef P7_IMPL_DUMMY_INCLUDED #include "esl_vectorops.h" #define NHMMER_MAX_RESIDUE_COUNT (1024 * 100) #else #define NHMMER_MAX_RESIDUE_COUNT (1024 * 256) /* 1/4 Mb */ #endif typedef struct { #ifdef HMMER_THREADS ESL_WORK_QUEUE *queue; #endif /*HMMER_THREADS*/ P7_BG *bg; /* null model */ P7_PIPELINE *pli; /* work pipeline */ P7_TOPHITS *th; /* top hit results */ P7_OPROFILE *om; /* optimized query profile */ FM_CFG *fm_cfg; /* global data for FM-index for fast SSV */ P7_SCOREDATA *scoredata; /* hmm-specific data used by nhmmer */ } WORKER_INFO; typedef struct { FM_DATA *fmf; FM_DATA *fmb; int active; //TRUE is worker is supposed to work on the contents, FALSE otherwise } FM_THREAD_INFO; typedef struct { int id; /* internal sequence ID */ int length; /* length of sequence */ } ID_LENGTH; typedef struct { ID_LENGTH *id_lengths; int count; int size; } ID_LENGTH_LIST; static ID_LENGTH_LIST* init_id_length( int size ); static void destroy_id_length( ID_LENGTH_LIST *list ); static int add_id_length(ID_LENGTH_LIST *list, int id, int L); static int assign_Lengths(P7_TOPHITS *th, ID_LENGTH_LIST *id_length_list); #define REPOPTS "-E,-T,--cut_ga,--cut_nc,--cut_tc" #define DOMREPOPTS "--domE,--domT,--cut_ga,--cut_nc,--cut_tc" #define INCOPTS "--incE,--incT,--cut_ga,--cut_nc,--cut_tc" #define INCDOMOPTS "--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #define THRESHOPTS "-E,-T,--domE,--domT,--incE,--incT,--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #define CPUOPTS NULL #define MPIOPTS NULL static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, /* Control of output */ { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "direct output to file , not stdout", 2 }, { "-A", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save multiple alignment of all hits to file ", 2 }, { "--tblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save parseable table of hits to file ", 2 }, { "--dfamtblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save table of hits to file, in Dfam format ", 2 }, { "--aliscoresout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save scores for each position in each alignment to ", 2 }, { "--hmmout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "if input is alignment(s), write produced hmms to file ", 2 }, { "--acc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "prefer accessions over names in output", 2 }, { "--noali", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "don't output alignments, so output is smaller", 2 }, { "--notextw", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--textw", "unlimit ASCII text output line width", 2 }, { "--textw", eslARG_INT, "120", NULL, "n>=120",NULL, NULL, "--notextw", "set max width of ASCII text output lines", 2 }, /* Control of scoring system */ { "--singlemx", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "", "use substitution score matrix w/ single-sequence MSA-format inputs", 3 }, { "--popen", eslARG_REAL, "0.03125",NULL,"0<=x<0.5",NULL, NULL, NULL, "gap open probability", 3 }, { "--pextend", eslARG_REAL, "0.75", NULL, "0<=x<1", NULL, NULL, NULL, "gap extend probability", 3 }, { "--mx", eslARG_STRING, "DNA1", NULL, NULL, NULL, NULL, "--mxfile", "substitution score matrix choice (of some built-in matrices)", 3 }, { "--mxfile", eslARG_INFILE, NULL, NULL, NULL, NULL, NULL, "--mx", "read substitution score matrix from file ", 3 }, /* Control of reporting thresholds */ { "-E", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, REPOPTS, "report sequences <= this E-value threshold in output", 4 }, { "-T", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, REPOPTS, "report sequences >= this score threshold in output", 4 }, /* Control of inclusion (significance) thresholds */ { "--incE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, INCOPTS, "consider sequences <= this E-value threshold as significant", 5 }, { "--incT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCOPTS, "consider sequences >= this score threshold as significant", 5 }, /* Model-specific thresholding for both reporting and inclusion */ { "--cut_ga", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's GA gathering cutoffs to set all thresholding", 6 }, { "--cut_nc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's NC noise cutoffs to set all thresholding", 6 }, { "--cut_tc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's TC trusted cutoffs to set all thresholding", 6 }, /* Control of acceleration pipeline */ { "--max", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--F1,--F2,--F3", "Turn all heuristic filters off (less speed, more power)", 7 }, { "--F1", eslARG_REAL, /*set below*/NULL, NULL, NULL, NULL, NULL, "--max", "Stage 1 (SSV) threshold: promote hits w/ P <= F1", 7 }, { "--F2", eslARG_REAL, "3e-3", NULL, NULL, NULL, NULL, "--max", "Stage 2 (Vit) threshold: promote hits w/ P <= F2", 7 }, { "--F3", eslARG_REAL, "3e-5", NULL, NULL, NULL, NULL, "--max", "Stage 3 (Fwd) threshold: promote hits w/ P <= F3", 7 }, { "--nobias", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--max", "turn off composition bias filter", 7 }, /* Selecting the alphabet rather than autoguessing it */ { "--dna", eslARG_NONE, FALSE, NULL, NULL, "--rna", NULL, NULL, "input alignment is DNA sequence data", 8 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, "--dna", NULL, NULL, "input alignment is RNA sequence data", 8 }, #if defined (p7_IMPL_SSE) /* Control of FM pruning/extension */ { "--seed_max_depth", eslARG_INT, "15", NULL, NULL, NULL, NULL, NULL, "seed length at which bit threshold must be met", 9 }, { "--seed_sc_thresh", eslARG_REAL, "15", NULL, NULL, NULL, NULL, NULL, "Default req. score for FM seed (bits)", 9 }, { "--seed_sc_density", eslARG_REAL, "0.8", NULL, NULL, NULL, NULL, NULL, "seed must maintain this bit density from one of two ends", 9 }, { "--seed_drop_max_len", eslARG_INT, "4", NULL, NULL, NULL, NULL, NULL, "maximum run length with score under (max - [fm_drop_lim])", 9 }, { "--seed_drop_lim", eslARG_REAL, "0.3", NULL, NULL, NULL, NULL, NULL, "in seed, max drop in a run of length [fm_drop_max_len]", 9 }, { "--seed_req_pos", eslARG_INT, "5", NULL, NULL, NULL, NULL, NULL, "minimum number consecutive positive scores in seed" , 9 }, { "--seed_consens_match", eslARG_INT, "11", NULL, NULL, NULL, NULL, NULL, " consecutive matches to consensus will override score threshold" , 9 }, { "--seed_ssv_length", eslARG_INT, "70", NULL, NULL, NULL, NULL, NULL, "length of window around FM seed to get full SSV diagonal", 9 }, #endif /* Other options */ { "--tformat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "assert target is in format ", 12 }, { "--qformat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "assert query is in format ", 12 }, { "--nonull2", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "turn off biased composition score corrections", 12 }, { "-Z", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set database size (Megabases) to for E-value calculations", 12 }, { "--seed", eslARG_INT, "42", NULL, "n>=0", NULL, NULL, NULL, "set RNG seed to (if 0: one-time arbitrary seed)", 12 }, { "--w_beta", eslARG_REAL, NULL, NULL, NULL, NULL, NULL, NULL, "tail mass at which window length is determined", 12 }, { "--w_length", eslARG_INT, NULL, NULL, NULL, NULL, NULL, NULL, "window length - essentially max expected hit length" , 12 }, { "--block_length", eslARG_INT, NULL, NULL, "n>=50000", NULL, NULL, NULL, "length of blocks read from target database (threaded) ", 12 }, { "--toponly", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--bottomonly", "only search the top strand", 12 }, { "--bottomonly", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--toponly", "only search the bottom strand", 12 }, /* Restrict search to subset of database - hidden because these flags are * (a) currently for internal use * (b) probably going to change */ { "--restrictdb_stkey", eslARG_STRING, "0", NULL, NULL, NULL, NULL, NULL, "Search starts at the sequence with name ", 99 }, { "--restrictdb_n",eslARG_INT, "-1", NULL, NULL, NULL, NULL, NULL, "Search target sequences (starting at --restrictdb_stkey)", 99 }, { "--ssifile", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "restrictdb_x values require ssi file. Override default to ", 99 }, /* stage-specific window length used for bias composition estimate, * hidden because they are confusing/expert options. May drag them out * into the daylight eventually */ { "--B1", eslARG_INT, "110", NULL, NULL, NULL, NULL, "--max,--nobias", "window length for biased-composition modifier (SSV)", 99 }, { "--B2", eslARG_INT, "240", NULL, NULL, NULL, NULL, "--max,--nobias", "window length for biased-composition modifier (Vit)", 99 }, { "--B3", eslARG_INT, "1000", NULL, NULL, NULL, NULL, "--max,--nobias", "window length for biased-composition modifier (Fwd)", 99 }, /* expert-only option (for now), hidden from view, for altering bg probs. May not keep. */ { "--bgfile", eslARG_INFILE, NULL, NULL, NULL, NULL, NULL, NULL, "override default background probs with values in file ", 99 }, /* Not used, but retained because esl option-handling code errors if it isn't kept here. Placed in group 99 so it doesn't print to help*/ { "--domZ", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "Not used", 99 }, { "--domE", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, DOMREPOPTS, "Not used", 99 }, { "--domT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, DOMREPOPTS, "Not used", 99 }, { "--incdomE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, INCDOMOPTS, "Not used", 99 }, { "--incdomT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCDOMOPTS, "Not used", 99 }, /* will eventually bring these back, but store in group 99 for now, so they don't print to help*/ #ifdef HMMER_THREADS { "--cpu", eslARG_INT, NULL,"HMMER_NCPU","n>=0",NULL, NULL, CPUOPTS, "number of parallel CPU workers to use for multithreads", 12 }, #endif { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; /* struct cfg_s : "Global" application configuration shared by all threads/processes * * This structure is passed to routines within main.c, as a means of semi-encapsulation * of shared data amongst different parallel processes (threads or MPI processes). */ struct cfg_s { char *dbfile; /* target sequence database file */ char *queryfile; /* query HMM file */ int qfmt; int do_mpi; /* TRUE if we're doing MPI parallelization */ int nproc; /* how many MPI processes, total */ int my_rank; /* who am I, in 0..nproc-1 */ char *firstseq_key; /* name of the first sequence in the restricted db range */ int n_targetseq; /* number of sequences in the restricted range */ }; static char usage[] = "[options] "; static char banner[] = "search a DNA model or alignment against a DNA database"; //static char usage[] = "[options] "; //static char banner[] = "search a DNA model against a DNA database"; static int serial_master (ESL_GETOPTS *go, struct cfg_s *cfg); static int serial_loop (WORKER_INFO *info, ID_LENGTH_LIST *id_length_list, ESL_SQFILE *dbfp, char *firstseq_key, int n_targetseqs /*, ESL_STOPWATCH *ssv_watch_master, ESL_STOPWATCH *postssv_watch_master, ESL_STOPWATCH *watch_slave*/); #if defined (p7_IMPL_SSE) static int serial_loop_FM (WORKER_INFO *info, ESL_SQFILE *dbfp /*, ESL_STOPWATCH *ssv_watch_master, ESL_STOPWATCH *postssv_watch_master, ESL_STOPWATCH *watch_slave*/); #endif #ifdef HMMER_THREADS #define BLOCK_SIZE 1000 static int thread_loop(WORKER_INFO *info, ID_LENGTH_LIST *id_length_list, ESL_THREADS *obj, ESL_WORK_QUEUE *queue, ESL_SQFILE *dbfp, char *firstseq_key, int n_targetseqs); static void pipeline_thread(void *arg); #if defined (p7_IMPL_SSE) static int thread_loop_FM(WORKER_INFO *info, ESL_THREADS *obj, ESL_WORK_QUEUE *queue, ESL_SQFILE *dbfp); static void pipeline_thread_FM(void *arg); #endif #endif /*HMMER_THREADS*/ static int process_commandline(int argc, char **argv, ESL_GETOPTS **ret_go, char **ret_queryfile, char **ret_seqfile) { ESL_GETOPTS *go = esl_getopts_Create(options); int status; if (esl_opt_ProcessEnvironment(go) != eslOK) { if (printf("Failed to process environment: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_VerifyConfig(go) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* help format: */ if (esl_opt_GetBoolean(go, "-h") == TRUE) { p7_banner(stdout, argv[0], banner); esl_usage(stdout, argv[0], usage); if (puts("\nBasic options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 100); /* 1= group; 2 = indentation; 120=textwidth*/ if (puts("\nOptions directing output:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 2, 2, 100); if (puts("\nOptions controlling scoring system:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 3, 2, 100); if (puts("\nOptions controlling reporting thresholds:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 4, 2, 100); if (puts("\nOptions controlling inclusion (significance) thresholds:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 5, 2, 100); if (puts("\nOptions controlling model-specific thresholding:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 6, 2, 80); if (puts("\nOptions controlling acceleration heuristics:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 7, 2, 100); if (puts("\nOptions for selecting query alphabet rather than guessing it:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 8, 2, 80); // if (puts("\nOptions for restricting search to a range of target database sequences:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); // esl_opt_DisplayHelp(stdout, go, 8, 2, 100); if (puts("\nOptions controlling seed search heuristic:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 9, 2, 100); if (puts("\nOther expert options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 12, 2, 100); exit(0); } if (esl_opt_ArgNumber(go) != 2) { if (puts("Incorrect number of command line arguments.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_queryfile = esl_opt_GetArg(go, 1)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_seqfile = esl_opt_GetArg(go, 2)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* Validate any attempted use of stdin streams */ if (strcmp(*ret_queryfile, "-") == 0 && strcmp(*ret_seqfile, "-") == 0) { if (puts("Either or may be '-' (to read from stdin), but not both.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } *ret_go = go; return eslOK; FAILURE: /* all errors handled here are user errors, so be polite. */ esl_usage(stdout, argv[0], usage); if (puts("\nwhere basic options are:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 80=textwidth*/ if (printf("\nTo see more help on available options, do %s -h\n\n", argv[0]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_getopts_Destroy(go); exit(1); ERROR: if (go) esl_getopts_Destroy(go); exit(status); } static int output_header(FILE *ofp, const ESL_GETOPTS *go, char *queryfile, char *seqfile, int ncpus) { p7_banner(ofp, go->argv[0], banner); if (fprintf(ofp, "# query file: %s\n", queryfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# target sequence database: %s\n", seqfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-o") && fprintf(ofp, "# output directed to file: %s\n", esl_opt_GetString(go, "-o")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-A") && fprintf(ofp, "# MSA of all hits saved to file: %s\n", esl_opt_GetString(go, "-A")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--tblout") && fprintf(ofp, "# hits tabular output: %s\n", esl_opt_GetString(go, "--tblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--dfamtblout") && fprintf(ofp, "# hits output in Dfam format: %s\n", esl_opt_GetString(go, "--dfamtblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--aliscoresout") && fprintf(ofp, "# alignment scores output: %s\n", esl_opt_GetString(go, "--aliscoresout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--hmmout") && fprintf(ofp, "# hmm output: %s\n", esl_opt_GetString(go, "--hmmout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--acc") && fprintf(ofp, "# prefer accessions over names: yes\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--noali") && fprintf(ofp, "# show alignments in output: no\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--notextw") && fprintf(ofp, "# max ASCII text line length: unlimited\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--textw") && fprintf(ofp, "# max ASCII text line length: %d\n", esl_opt_GetInteger(go, "--textw")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--singlemx") && fprintf(ofp, "# Use score matrix for 1-seq MSAs: on\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--popen") && fprintf(ofp, "# gap open probability: %f\n", esl_opt_GetReal (go, "--popen")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--pextend") && fprintf(ofp, "# gap extend probability: %f\n", esl_opt_GetReal (go, "--pextend")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--mx") && fprintf(ofp, "# subst score matrix (built-in): %s\n", esl_opt_GetString (go, "--mx")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--mxfile") && fprintf(ofp, "# subst score matrix (file): %s\n", esl_opt_GetString (go, "--mxfile")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-E") && fprintf(ofp, "# sequence reporting threshold: E-value <= %g\n", esl_opt_GetReal (go, "-E")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-T") && fprintf(ofp, "# sequence reporting threshold: score >= %g\n", esl_opt_GetReal (go, "-T")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incE") && fprintf(ofp, "# sequence inclusion threshold: E-value <= %g\n", esl_opt_GetReal (go, "--incE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incT") && fprintf(ofp, "# sequence inclusion threshold: score >= %g\n", esl_opt_GetReal (go, "--incT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--cut_ga") && fprintf(ofp, "# model-specific thresholding: GA cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--cut_nc") && fprintf(ofp, "# model-specific thresholding: NC cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--cut_tc") && fprintf(ofp, "# model-specific thresholding: TC cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--max") && fprintf(ofp, "# Max sensitivity mode: on [all heuristic filters off]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F1") && fprintf(ofp, "# SSV filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F1")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F2") && fprintf(ofp, "# Vit filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F2")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F3") && fprintf(ofp, "# Fwd filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F3")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--nobias") && fprintf(ofp, "# biased composition HMM filter: off\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--B1") && fprintf(ofp, "# biased comp SSV window len: %d\n", esl_opt_GetInteger(go, "--B1")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--B2") && fprintf(ofp, "# biased comp Viterbi window len: %d\n", esl_opt_GetInteger(go, "--B2")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--B3") && fprintf(ofp, "# biased comp Forward window len: %d\n", esl_opt_GetInteger(go, "--B3")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--bgfile") && fprintf(ofp, "# file with custom bg probs: %s\n", esl_opt_GetString(go, "--bgfile")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--dna") && fprintf(ofp, "# input query is asserted as: DNA\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--rna") && fprintf(ofp, "# input query is asserted as: RNA\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #if defined (p7_IMPL_SSE) if (esl_opt_IsUsed(go, "--seed_max_depth") && fprintf(ofp, "# FM Seed length: %d\n", esl_opt_GetInteger(go, "--seed_max_depth")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--seed_sc_thresh") && fprintf(ofp, "# FM score threshhold (bits): %g\n", esl_opt_GetReal(go, "--seed_sc_thresh")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--seed_sc_density") && fprintf(ofp, "# FM score density (bits/pos): %g\n", esl_opt_GetReal(go, "--seed_sc_density")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--seed_drop_max_len") && fprintf(ofp, "# FM max neg-growth length: %d\n", esl_opt_GetInteger(go, "--seed_drop_max_len")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--seed_drop_lim") && fprintf(ofp, "# FM max run drop: %g\n", esl_opt_GetReal(go, "--seed_drop_lim")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--seed_req_pos") && fprintf(ofp, "# FM req positive run length: %d\n", esl_opt_GetInteger(go, "--seed_req_pos")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--seed_consens_match") && fprintf(ofp, "# FM consec consensus match req: %d\n", esl_opt_GetInteger(go, "--seed_consens_match")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--seed_ssv_length") && fprintf(ofp, "# FM len used for Vit window: %d\n", esl_opt_GetInteger(go, "--seed_ssv_length")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #endif if (esl_opt_IsUsed(go, "--restrictdb_stkey") && fprintf(ofp, "# Restrict db to start at seq key: %s\n", esl_opt_GetString(go, "--restrictdb_stkey")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--restrictdb_n") && fprintf(ofp, "# Restrict db to # target seqs: %d\n", esl_opt_GetInteger(go, "--restrictdb_n")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--ssifile") && fprintf(ofp, "# Override ssi file to: %s\n", esl_opt_GetString(go, "--ssifile")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--nonull2") && fprintf(ofp, "# null2 bias corrections: off\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--toponly") && fprintf(ofp, "# search only top strand: on\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--bottomonly") && fprintf(ofp, "# search only bottom strand: on\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-Z") && fprintf(ofp, "# database size is set to: %.1f Mb\n", esl_opt_GetReal(go, "-Z")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--seed")) { if (esl_opt_GetInteger(go, "--seed") == 0 && fprintf(ofp, "# random number seed: one-time arbitrary\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); else if ( fprintf(ofp, "# random number seed set to: %d\n", esl_opt_GetInteger(go, "--seed")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (esl_opt_IsUsed(go, "--qformat") && fprintf(ofp, "# query format asserted: %s\n", esl_opt_GetString(go, "--qformat")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--tformat") && fprintf(ofp, "# targ format asserted: %s\n", esl_opt_GetString(go, "--tformat")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--w_beta") && fprintf(ofp, "# window length beta value: %g\n", esl_opt_GetReal(go, "--w_beta")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--w_length") && fprintf(ofp, "# window length : %d\n", esl_opt_GetInteger(go, "--w_length")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--block_length")&&fprintf(ofp, "# block length : %d\n", esl_opt_GetInteger(go, "--block_length")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #ifdef HMMER_THREADS //if (esl_opt_IsUsed(go, "--cpu") && fprintf(ofp, "# number of worker threads: %d\n", esl_opt_GetInteger(go, "--cpu")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# number of worker threads: %d\n", ncpus) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #endif if (fprintf(ofp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); return eslOK; } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; struct cfg_s cfg; int status = eslOK; impl_Init(); /* processor specific initialization */ p7_FLogsumInit(); /* we're going to use table-driven Logsum() approximations at times */ /* Initialize what we can in the config structure (without knowing the alphabet yet) */ cfg.queryfile = NULL; cfg.dbfile = NULL; cfg.qfmt = eslMSAFILE_UNKNOWN; cfg.do_mpi = FALSE; /* this gets reset below, if we init MPI */ cfg.nproc = 0; /* this gets reset below, if we init MPI */ cfg.my_rank = 0; /* this gets reset below, if we init MPI */ cfg.firstseq_key = NULL; cfg.n_targetseq = -1; process_commandline(argc, argv, &go, &cfg.queryfile, &cfg.dbfile); if (esl_opt_IsOn(go, "--qformat")) { if (strcasecmp("fasta", esl_opt_GetString(go, "--qformat")) == 0) cfg.qfmt = eslSQFILE_FASTA; else cfg.qfmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--qformat")); if (cfg.qfmt == eslMSAFILE_UNKNOWN) p7_Fail("%s is not a recognized input sequence file format\n", esl_opt_GetString(go, "--qformat")); } #ifndef eslAUGMENT_SSI if (esl_opt_IsUsed(go, "--restrictdb_stkey") || esl_opt_IsUsed(go, "--restrictdb_n") || esl_opt_IsUsed(go, "--ssifile") ) p7_Fail("Unable to use range-control options unless an SSI index file is available. See 'esl_sfetch --index'\n"); #else if (esl_opt_IsUsed(go, "--restrictdb_stkey") ) if ((cfg.firstseq_key = esl_opt_GetString(go, "--restrictdb_stkey")) == NULL) p7_Fail("Failure capturing --restrictdb_stkey\n"); if (esl_opt_IsUsed(go, "--restrictdb_n") ) cfg.n_targetseq = esl_opt_GetInteger(go, "--restrictdb_n"); if ( cfg.n_targetseq != -1 && cfg.n_targetseq < 1 ) p7_Fail("--restrictdb_n must be >= 1\n"); #endif status = serial_master(go, &cfg); esl_getopts_Destroy(go); return status; } /* serial_master() * The serial version of hmmsearch. * For each query HMM in search the database for hits. * * A master can only return if it's successful. All errors are handled * immediately and fatally with p7_Fail(). */ static int serial_master(ESL_GETOPTS *go, struct cfg_s *cfg) { FILE *ofp = stdout; /* results output file (-o) */ FILE *afp = NULL; /* alignment output file (-A) */ FILE *tblfp = NULL; /* output stream for tabular (--tblout) */ FILE *dfamtblfp = NULL; /* output stream for tabular Dfam format (--dfamtblout) */ FILE *aliscoresfp = NULL; /* output stream for alignment scores (--aliscoresout) */ /*Some fraction of these will be used, depending on what sort of input is used for the query*/ P7_HMMFILE *hfp = NULL; /* open input HMM file */ P7_HMM *hmm = NULL; /* one HMM query */ ESLX_MSAFILE *qfp_msa = NULL; /* open query alifile */ ESL_SQFILE *qfp_sq = NULL; /* open query seqfile */ ESL_SQ *qsq = NULL; /* query sequence */ FILE *hmmoutfp = NULL; /* output stream for hmms (--hmmout), only if input is an alignment file */ char *hmmfile = NULL; /* file to write HMM to */ int dbformat = eslSQFILE_UNKNOWN; /* format of dbfile */ ESL_SQFILE *dbfp = NULL; /* open input sequence file */ P7_BG *bg_manual = NULL; ESL_ALPHABET *abc = NULL; /* digital alphabet */ ESL_STOPWATCH *w; P7_SCOREDATA *scoredata = NULL; int textw = 0; int nquery = 0; int status = eslOK; int qhstatus = eslOK; int sstatus = eslOK; int i; double resCnt = 0; /* used to keep track of the lengths of the sequences that are processed */ ID_LENGTH_LIST *id_length_list = NULL; /* these variables are only used if db type is FM-index*/ FM_CFG *fm_cfg = NULL; FM_METADATA *fm_meta = NULL; fpos_t fm_basepos; /* end FM-index-specific variables */ int ncpus = 0; int infocnt = 0; WORKER_INFO *info = NULL; #ifdef HMMER_THREADS ESL_SQ_BLOCK *block = NULL; FM_THREAD_INFO *fminfo = NULL; ESL_THREADS *threadObj= NULL; ESL_WORK_QUEUE *queue = NULL; #endif char errbuf[eslERRBUFSIZE]; double window_beta = -1.0 ; int window_length = -1; P7_BUILDER *builder = NULL; ESL_MSA *msa = NULL; int msas_named = 0; int force_single = ( esl_opt_IsOn(go, "--singlemx") ? TRUE : FALSE ); // ESL_STOPWATCH *ssv_watch_master = esl_stopwatch_Create(); // ESL_STOPWATCH *ssv_watch_master_tot = esl_stopwatch_Create(); // ESL_STOPWATCH *postssv_watch_master = esl_stopwatch_Create(); // ESL_STOPWATCH *postssv_watch_master_tot = esl_stopwatch_Create(); // ESL_STOPWATCH *watch_slave = esl_stopwatch_Create(); if (esl_opt_IsUsed(go, "--w_beta")) { if ( ( window_beta = esl_opt_GetReal(go, "--w_beta") ) < 0 || window_beta > 1 ) esl_fatal("Invalid window-length beta value\n"); } if (esl_opt_IsUsed(go, "--w_length")) { if (( window_length = esl_opt_GetInteger(go, "--w_length")) < 4 ) esl_fatal("Invalid window length value\n"); } w = esl_stopwatch_Create(); if (esl_opt_GetBoolean(go, "--notextw")) textw = 0; else textw = esl_opt_GetInteger(go, "--textw"); /* If caller declared target format, decode it */ if (esl_opt_IsOn(go, "--tformat")) { dbformat = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--tformat")); if (dbformat == eslSQFILE_UNKNOWN) p7_Fail("%s is not a recognized sequence database file format\n", esl_opt_GetString(go, "--tformat")); } if (dbformat == eslSQFILE_FMINDEX) { #if !defined (p7_IMPL_SSE) p7_Fail("%s is a valid sequence database file format only on systems supporting SSE vector instructions\n", esl_opt_GetString(go, "--tformat")); #endif //For now, this is a separate path from the typical esl_sqfile_Open() function call //TODO: create esl_sqio_fmindex.c, analogous to esl_sqio_ascii.c, if (esl_opt_IsOn(go, "--max")) { p7_Fail("--max flag is incompatible with the FMINDEX target type\n"); } fm_configAlloc(&fm_cfg); fm_meta = fm_cfg->meta; if((fm_meta->fp = fopen(cfg->dbfile, "rb")) == NULL) p7_Fail("Failed to open target sequence database %s for reading\n", cfg->dbfile); if ( (status = fm_readFMmeta(fm_meta)) != eslOK) p7_Fail("Failed to read FM meta data from target sequence database %s\n", cfg->dbfile); if ( (status = fm_configInit(fm_cfg, go)) != eslOK) p7_Fail("Failed to initialize FM configuration for target sequence database %s\n", cfg->dbfile); if ( (status = fm_alphabetCreate(fm_meta, NULL)) != eslOK) p7_Fail("Failed to create FM alphabet for target sequence database %s\n", cfg->dbfile); fgetpos( fm_meta->fp, &fm_basepos); } else { /* Open the target sequence database */ status = esl_sqfile_Open(cfg->dbfile, dbformat, p7_SEQDBENV, &dbfp); if (status == eslENOTFOUND) p7_Fail("Failed to open target sequence database %s for reading\n", cfg->dbfile); else if (status == eslEFORMAT) p7_Fail("Target sequence database file %s is empty or misformatted\n", cfg->dbfile); else if (status == eslEINVAL) p7_Fail("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) p7_Fail("Unexpected error %d opening target sequence database file %s\n", status, cfg->dbfile); if (esl_opt_IsUsed(go, "--restrictdb_stkey") || esl_opt_IsUsed(go, "--restrictdb_n")) { if (esl_opt_IsUsed(go, "--ssifile")) esl_sqfile_OpenSSI(dbfp, esl_opt_GetString(go, "--ssifile")); else esl_sqfile_OpenSSI(dbfp, NULL); } if (dbfp->format > 100) // breaking the law! That range is reserved for msa, for aligned formats p7_Fail("%s contains a multiple sequence alignment; expect unaligned sequences, like FASTA\n", cfg->dbfile); if ( esl_opt_IsOn(go, "--dna") ) abc = esl_alphabet_Create(eslDNA); else if ( esl_opt_IsOn(go, "--rna") ) abc = esl_alphabet_Create(eslRNA); } /* We're about to see if this is an HMM file. If we already know it isn't, based on --qformat, just skip the test*/ if ( esl_opt_IsOn(go, "--qformat") ) status = eslENORESULT; // so it'll fail into the section that opens an alignment else status = p7_hmmfile_OpenE(cfg->queryfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) { // File just doesn't exist p7_Fail("File existence/permissions problem in trying to open query file %s.\n%s\n", cfg->queryfile, errbuf); } else if (status == eslOK) { //Successfully read HMM file qhstatus = p7_hmmfile_Read(hfp, &abc, &hmm); if (qhstatus != eslOK) p7_Fail("reading hmm from file %s (%d)\n", cfg->queryfile, qhstatus); } else { //It's not an HMM. Maybe an alignment file, or a fasta file if (strcmp(cfg->queryfile, "-") == 0 && ! esl_opt_IsOn(go, "--qformat")) { p7_Fail("Must specify --qformat to read from stdin ('-')"); } /* We're about to test if it's recognized as an MSA. If we know it shouldn't be, * because of --qformat=fasta, skip the attempt */ if (cfg->qfmt == eslSQFILE_FASTA ) { status = eslENORESULT; } else { //Haven't already decided that it's a fasta file; try MSA first status = eslx_msafile_Open(&abc, cfg->queryfile, NULL, cfg->qfmt, NULL, &qfp_msa); } if (status == eslENOTFOUND) { p7_Fail("File existence/permissions problem in trying to open query file %s.\n%s\n", cfg->queryfile, errbuf); } else if (status != eslOK) { // Either we've been told it's expected to be in fasta format, or we just learned //that it's not an MSA, so we should precede assuming it's fasta. cfg->qfmt = eslSQFILE_FASTA; if (abc != NULL) { status = esl_sqfile_OpenDigital(abc, cfg->queryfile, eslSQFILE_FASTA, NULL, &qfp_sq); if (status != eslOK) p7_Fail ("Unexpected error %d opening query file %s\n", status, cfg->queryfile); } else { int q_type = eslUNKNOWN; status = esl_sqfile_Open(cfg->queryfile, eslSQFILE_FASTA, NULL, &qfp_sq); if (status != eslOK) p7_Fail ("Unexpected error %d opening query file %s\n", status, cfg->queryfile); esl_sqfile_GuessAlphabet(qfp_sq, &q_type); if (q_type == eslUNKNOWN) p7_Fail ("Unable to guess alphabet for query file %s\n", cfg->queryfile); abc = esl_alphabet_Create(q_type); esl_sqfile_SetDigital(qfp_sq, abc ); } } qsq = esl_sq_CreateDigital(abc); // only need this in the case of a single sequence ... but that could come from an MSA if (dbformat == eslSQFILE_FMINDEX) { if ( (abc->type == eslDNA || abc->type == eslRNA) && !(fm_meta->alph_type == fm_DNA /*|| fm_meta->alph_type == fm_DNA_full*/) ) p7_Fail("incompatible alphabets - the HMM is a nucleotide alphabet, but the database isn't"); if ( (abc->type == eslAMINO ) && !(fm_meta->alph_type == fm_AMINO ) ) p7_Fail("incompatible alphabets - the HMM is an amino alphabet, but the database isn't"); } builder = p7_builder_Create(NULL, abc); if (builder == NULL) p7_Fail("p7_builder_Create failed"); // special arguments for hmmbuild builder->w_len = (go != NULL && esl_opt_IsOn (go, "--w_length")) ? esl_opt_GetInteger(go, "--w_length"): -1; builder->w_beta = (go != NULL && esl_opt_IsOn (go, "--w_beta")) ? esl_opt_GetReal (go, "--w_beta") : p7_DEFAULT_WINDOW_BETA; if ( builder->w_beta < 0 || builder->w_beta > 1 ) esl_fatal("Invalid window-length beta value\n"); if (qfp_sq != NULL) { // read first sequence qhstatus = esl_sqio_Read(qfp_sq, qsq); if (qhstatus != eslOK) p7_Fail("reading sequence from file %s (%d)\n", cfg->queryfile, qhstatus); } else { // read first sequence alignment qhstatus = eslx_msafile_Read(qfp_msa, &msa); if (qhstatus != eslOK) p7_Fail("reading alignment from file %s (%d)\n", cfg->queryfile, qhstatus); } } /* Open the results output files */ if (esl_opt_IsOn(go, "-o")) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) p7_Fail("Failed to open output file %s for writing\n", esl_opt_GetString(go, "-o")); } if (esl_opt_IsOn(go, "-A")) { if ((afp = fopen(esl_opt_GetString(go, "-A"), "w")) == NULL) p7_Fail("Failed to open alignment file %s for writing\n", esl_opt_GetString(go, "-A")); } if (esl_opt_IsOn(go, "--tblout")) { if ((tblfp = fopen(esl_opt_GetString(go, "--tblout"), "w")) == NULL) esl_fatal("Failed to open tabular output file %s for writing\n", esl_opt_GetString(go, "--tblout")); } if (esl_opt_IsOn(go, "--dfamtblout")) { if ((dfamtblfp = fopen(esl_opt_GetString(go, "--dfamtblout"),"w")) == NULL) esl_fatal("Failed to open tabular dfam output file %s for writing\n", esl_opt_GetString(go, "--dfamtblout")); } if (esl_opt_IsOn(go, "--aliscoresout")) { if ((aliscoresfp = fopen(esl_opt_GetString(go, "--aliscoresout"),"w")) == NULL) esl_fatal("Failed to open alignment scores output file %s for writing\n", esl_opt_GetString(go, "--aliscoresout")); } if (qfp_msa != NULL || qfp_sq != NULL) { if (esl_opt_IsOn(go, "--hmmout")) { hmmfile = esl_opt_GetString(go, "--hmmout"); if ((hmmoutfp = fopen(hmmfile,"w")) == NULL) esl_fatal("Failed to open hmm output file %s for writing\n", hmmfile); } } #ifdef HMMER_THREADS /* initialize thread data */ if (esl_opt_IsOn(go, "--cpu")) ncpus = esl_opt_GetInteger(go, "--cpu"); else esl_threads_CPUCount(&ncpus); if (ncpus > 0) { #if defined (p7_IMPL_SSE) if (dbformat == eslSQFILE_FMINDEX) threadObj = esl_threads_Create(&pipeline_thread_FM); else #endif threadObj = esl_threads_Create(&pipeline_thread); queue = esl_workqueue_Create(ncpus * 2); } #endif if (esl_opt_IsOn(go, "--bgfile")) { bg_manual = p7_bg_Create(abc); status = p7_bg_Read(esl_opt_GetString(go, "--bgfile"), bg_manual, errbuf); if (status != eslOK) p7_Fail("Trouble reading bgfile: %s\n", errbuf); } infocnt = (ncpus == 0) ? 1 : ncpus; ESL_ALLOC(info, sizeof(*info) * infocnt); if (! (abc->type == eslRNA || abc->type == eslDNA)) p7_Fail("Invalid alphabet type in hmm for nhmmer. Expect DNA or RNA\n"); if (qhstatus == eslOK) { /* One-time initializations after alphabet becomes known */ output_header(ofp, go, cfg->queryfile, cfg->dbfile, ncpus); if (dbformat != eslSQFILE_FMINDEX) dbfp->abc = abc; for (i = 0; i < infocnt; ++i) { info[i].pli = NULL; info[i].th = NULL; info[i].om = NULL; if (bg_manual != NULL) info[i].bg = p7_bg_Clone(bg_manual); else info[i].bg = p7_bg_Create(abc); #ifdef HMMER_THREADS info[i].queue = queue; #endif } #ifdef HMMER_THREADS for (i = 0; i < ncpus * 2; ++i) { #if defined (p7_IMPL_SSE) if (dbformat == eslSQFILE_FMINDEX) { ESL_ALLOC(fminfo, sizeof(FM_THREAD_INFO)); if (fminfo == NULL) esl_fatal("Failed to allocate FM thread info"); ESL_ALLOC(fminfo->fmf, sizeof(FM_DATA)); ESL_ALLOC(fminfo->fmb, sizeof(FM_DATA)); if (fminfo->fmf == NULL || fminfo->fmb == NULL) esl_fatal("Failed to allocate FM thread info"); fminfo->active = FALSE; status = esl_workqueue_Init(queue, fminfo); if (status != eslOK) esl_fatal("Failed to add FM info to work queue"); } else #endif { block = esl_sq_CreateDigitalBlock(BLOCK_SIZE, abc); if (block == NULL) esl_fatal("Failed to allocate sequence block"); status = esl_workqueue_Init(queue, block); if (status != eslOK) esl_fatal("Failed to add block to work queue"); } } #endif } if (qfp_sq != NULL || (qfp_msa != NULL && force_single )) { /* We'll use this scoring matrix whenever we have a single sequence (even in MSA format) * Default is stored in the --mx option, so it's always IsOn(). Check --mxfile first; then go to the --mx option and the default. */ if (esl_opt_IsOn(go, "--mxfile")) status = p7_builder_SetScoreSystem (builder, esl_opt_GetString(go, "--mxfile"), NULL, esl_opt_GetReal(go, "--popen"), esl_opt_GetReal(go, "--pextend"), info->bg); else status = p7_builder_LoadScoreSystem(builder, esl_opt_GetString(go, "--mx"), esl_opt_GetReal(go, "--popen"), esl_opt_GetReal(go, "--pextend"), info->bg); if (status != eslOK) p7_Fail("Failed to set single query seq score system:\n%s\n", builder->errbuf); } /* Outer loop: over each query HMM or alignment in . */ while (qhstatus == eslOK) { P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; /* optimized query profile */ if ( qfp_msa != NULL ) { //deal with recently read MSA //if name isn't assigned, give it one (can only do this if there's a single unnamed alignment, so pick it's filename) if (msa->name == NULL) { char *name = NULL; if (msas_named>0) p7_Fail("I need name annotation on each alignment in a multi MSA file; failed on #%d", nquery+1); if (cfg->queryfile != NULL) { if ((status = esl_FileTail(cfg->queryfile, TRUE, &name)) != eslOK) return status; /* TRUE=nosuffix */ } else { name = "Query"; } if ((status = esl_msa_SetName(msa, name, -1)) != eslOK) p7_Fail("Error assigning name to alignment"); msas_named++; free(name); } //Turn sequence alignment into an HMM if (msa->nseq == 1 && force_single) { if (qsq!=NULL) esl_sq_Destroy(qsq); qsq = esl_sq_CreateDigitalFrom(msa->abc, (msa->sqname?msa->sqname[0]:"Query"), msa->ax[0], msa->alen, (msa->sqdesc?msa->sqdesc[0]:NULL), (msa->sqacc?msa->sqacc[0]:NULL), NULL); esl_abc_XDealign(qsq->abc, qsq->dsq, qsq->dsq, &(qsq->n)); if ((qhstatus = p7_SingleBuilder(builder, qsq, info->bg, &hmm, NULL, NULL, NULL)) != eslOK) p7_Fail("build failed: %s", builder->errbuf); } else { if ((qhstatus = p7_Builder(builder, msa, info->bg, &hmm, NULL, NULL, NULL, NULL)) != eslOK) p7_Fail("build failed: %s", builder->errbuf); } } else if ( qfp_sq != NULL) {// FASTA format, so they all have names //Turn sequence into an HMM if ((qhstatus = p7_SingleBuilder(builder, qsq, info->bg, &hmm, NULL, NULL, NULL)) != eslOK) p7_Fail("build failed: %s", builder->errbuf); } // Assign HMM max_length if (window_length > 0) hmm->max_length = window_length; else if (window_beta > 0) p7_Builder_MaxLength(hmm, window_beta); else if (hmm->max_length == -1 ) p7_Builder_MaxLength(hmm, p7_DEFAULT_WINDOW_BETA); if (hmmoutfp != NULL) { // if ((status = p7_hmmfile_WriteASCII(hmmoutfp, -1, hmm)) != eslOK) ESL_FAIL(status, errbuf, "HMM save failed"); fclose(hmmoutfp); } nquery++; resCnt = 0; esl_stopwatch_Start(w); /* seqfile may need to be rewound (multiquery mode) */ if (nquery > 1) { #if defined (p7_IMPL_SSE) if (dbformat == eslSQFILE_FMINDEX) { //rewind if (fsetpos(fm_meta->fp, &fm_basepos) != 0) ESL_EXCEPTION(eslESYS, "rewind via fsetpos() failed"); } else #endif { if (! esl_sqfile_IsRewindable(dbfp)) esl_fatal("Target sequence file %s isn't rewindable; can't search it with multiple queries", cfg->dbfile); if (! esl_opt_IsUsed(go, "--restrictdb_stkey") ) esl_sqfile_Position(dbfp, 0); //only re-set current position to 0 if we're not planning to set it in a moment } } if (dbformat != eslSQFILE_FMINDEX) { if ( cfg->firstseq_key != NULL ) { //it's tempting to want to do this once and capture the offset position for future passes, but ncbi files make this non-trivial, so this keeps it general sstatus = esl_sqfile_PositionByKey(dbfp, cfg->firstseq_key); if (sstatus != eslOK) p7_Fail("Failure setting restrictdb_stkey to %d\n", cfg->firstseq_key); } } if (fprintf(ofp, "Query: %s [M=%d]\n", hmm->name, hmm->M) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (hmm->acc && fprintf(ofp, "Accession: %s\n", hmm->acc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (hmm->desc && fprintf(ofp, "Description: %s\n", hmm->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); /* Convert to an optimized model */ gm = p7_profile_Create (hmm->M, abc); om = p7_oprofile_Create(hmm->M, abc); p7_ProfileConfig(hmm, info->bg, gm, 100, p7_LOCAL); /* 100 is a dummy length for now; and MSVFilter requires local mode */ p7_oprofile_Convert(gm, om); /* is now p7_LOCAL, multihit */ #if defined (p7_IMPL_SSE) if (dbformat == eslSQFILE_FMINDEX) { //capture a measure of score density multiplied by something I conjecture to be related to //the expected longest common subsequence (sqrt(M)). If less than a default target //(7 bits of expected LCS), then the requested score threshold will be shifted down // according to this ratio. // Xref: ~wheelert/notebook/2014/03-04-FM-time-v-len/00NOTES -- Thu Mar 6 14:40:48 EST 2014 float best_sc_avg = 0; int j; for (i = 1; i <= om->M; i++) { float max_score = 0; for (j=0; jabc->K; j++) { if ( esl_abc_XIsResidue(om->abc,j) && gm->rsc[j][(i) * p7P_NR + p7P_MSC] > max_score) max_score = gm->rsc[j][(i) * p7P_NR + p7P_MSC]; } best_sc_avg += max_score; } best_sc_avg /= sqrt((double) hmm->M); //that's dividing by M to get score density, then multiplying by sqrt(M) as a proxy for expected LCS best_sc_avg = ESL_MAX(5.0,best_sc_avg); // don't let it get too low, or run time will dramatically suffer fm_cfg->sc_thresh_ratio = ESL_MIN(best_sc_avg/7.0, 1.0); scoredata = p7_hmm_ScoreDataCreate(om, gm); } else #endif scoredata = p7_hmm_ScoreDataCreate(om, NULL); for (i = 0; i < infocnt; ++i) { /* Create processing pipeline and hit list */ info[i].th = p7_tophits_Create(); info[i].om = p7_oprofile_Copy(om); info[i].pli = p7_pipeline_Create(go, om->M, 100, TRUE, p7_SEARCH_SEQS); /* L_hint = 100 is just a dummy for now */ //set method specific --F1, if it wasn't set at command line if (!esl_opt_IsOn(go, "--F1") ) { #if defined (p7_IMPL_SSE) if (dbformat == eslSQFILE_FMINDEX) info[i].pli->F1 = 0.03; else #endif info[i].pli->F1 = 0.02; } #if defined (p7_IMPL_SSE) info[i].fm_cfg = fm_cfg; #endif p7_pli_NewModel(info[i].pli, info[i].om, info[i].bg); info[i].pli->do_alignment_score_calc = esl_opt_IsOn(go, "--aliscoresout") ; if ( esl_opt_IsUsed(go, "--toponly") ) info[i].pli->strands = p7_STRAND_TOPONLY; else if ( esl_opt_IsUsed(go, "--bottomonly") ) info[i].pli->strands = p7_STRAND_BOTTOMONLY; else info[i].pli->strands = p7_STRAND_BOTH; if (dbformat != eslSQFILE_FMINDEX) { if ( esl_opt_IsUsed(go, "--block_length") ) info[i].pli->block_length = esl_opt_GetInteger(go, "--block_length"); else info[i].pli->block_length = NHMMER_MAX_RESIDUE_COUNT; } info[i].scoredata = p7_hmm_ScoreDataClone(scoredata, om->abc->Kp); #ifdef HMMER_THREADS if (ncpus > 0) esl_threads_AddThread(threadObj, &info[i]); #endif } /* establish the id_lengths data structutre */ id_length_list = init_id_length(1000); #ifdef HMMER_THREADS #if defined (p7_IMPL_SSE) if (dbformat == eslSQFILE_FMINDEX) { for(i=0; imeta->seq_count; i++) add_id_length(id_length_list, fm_cfg->meta->seq_data[i].target_id, fm_cfg->meta->seq_data[i].target_start + fm_cfg->meta->seq_data[i].length - 1); if (ncpus > 0) sstatus = thread_loop_FM (info, threadObj, queue, dbfp); else sstatus = serial_loop_FM (info, dbfp/*, ssv_watch_master, postssv_watch_master, watch_slave*/); } else #endif //defined (p7_IMPL_SSE) { if (ncpus > 0) sstatus = thread_loop (info, id_length_list, threadObj, queue, dbfp, cfg->firstseq_key, cfg->n_targetseq); else sstatus = serial_loop (info, id_length_list, dbfp, cfg->firstseq_key, cfg->n_targetseq/*, ssv_watch_master, postssv_watch_master, watch_slave*/); } #else //HMMER_THREADS #if defined (p7_IMPL_SSE) if (dbformat == eslSQFILE_FMINDEX) sstatus = serial_loop_FM (info, dbfp); else #endif // defined (p7_IMPL_SSE) sstatus = serial_loop (info, id_length_list, dbfp, cfg->firstseq_key, cfg->n_targetseq/*, ssv_watch_master, postssv_watch_master, watch_slave*/); #endif //HMMER_THREADS switch(sstatus) { case eslEFORMAT: esl_fatal("Parse failed (sequence file %s):\n%s\n", dbfp->filename, esl_sqfile_GetErrorBuf(dbfp)); break; case eslEOF: case eslOK: /* do nothing */ break; default: esl_fatal("Unexpected error %d reading sequence file %s", sstatus, dbfp->filename); } //need to re-compute e-values before merging (when list will be sorted) if (esl_opt_IsUsed(go, "-Z")) { resCnt = 1000000*esl_opt_GetReal(go, "-Z"); if ( info[0].pli->strands == p7_STRAND_BOTH) resCnt *= 2; } else { #if defined (p7_IMPL_SSE) if (dbformat == eslSQFILE_FMINDEX) { resCnt = 2 * fm_meta->char_count; } else #endif { for (i = 0; i < infocnt; ++i) resCnt += info[i].pli->nres; } } for (i = 0; i < infocnt; ++i) p7_tophits_ComputeNhmmerEvalues(info[i].th, resCnt, info[i].om->max_length); /* merge the results of the search results */ for (i = 1; i < infocnt; ++i) { p7_tophits_Merge(info[0].th, info[i].th); p7_pipeline_Merge(info[0].pli, info[i].pli); p7_pipeline_Destroy(info[i].pli); p7_tophits_Destroy(info[i].th); p7_oprofile_Destroy(info[i].om); } #if defined (p7_IMPL_SSE) if (dbformat == eslSQFILE_FMINDEX) { info[0].pli->nseqs = fm_meta->seq_data[fm_meta->seq_count-1].target_id + 1; info[0].pli->nres = resCnt; } #endif /* Print the results. */ p7_tophits_SortBySeqidxAndAlipos(info->th); assign_Lengths(info->th, id_length_list); p7_tophits_RemoveDuplicates(info->th, info->pli->use_bit_cutoffs); p7_tophits_SortBySortkey(info->th); p7_tophits_Threshold(info->th, info->pli); //tally up total number of hits and target coverage info->pli->n_output = info->pli->pos_output = 0; for (i = 0; i < info->th->N; i++) { if ( (info->th->hit[i]->flags & p7_IS_REPORTED) || info->th->hit[i]->flags & p7_IS_INCLUDED) { info->pli->n_output++; info->pli->pos_output += abs(info->th->hit[i]->dcl[0].jali - info->th->hit[i]->dcl[0].iali) + 1; } } p7_tophits_Targets(ofp, info->th, info->pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); p7_tophits_Domains(ofp, info->th, info->pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (tblfp) p7_tophits_TabularTargets(tblfp, hmm->name, hmm->acc, info->th, info->pli, (nquery == 1)); if (dfamtblfp) p7_tophits_TabularXfam(dfamtblfp, hmm->name, hmm->acc, info->th, info->pli); if (aliscoresfp) p7_tophits_AliScores(aliscoresfp, hmm->name, info->th ); esl_stopwatch_Stop(w); p7_pli_Statistics(ofp, info->pli, w); // esl_stopwatch_Display(stdout, ssv_watch_master, "# SSV time: "); // esl_stopwatch_Display(stdout, postssv_watch_master, "# POSTSSV time: "); // esl_stopwatch_Include(ssv_watch_master_tot, ssv_watch_master); // esl_stopwatch_Include(postssv_watch_master_tot, postssv_watch_master); //reset the per-query master stopwatches // esl_stopwatch_Start(ssv_watch_master); esl_stopwatch_Stop(ssv_watch_master); // esl_stopwatch_Start(postssv_watch_master); esl_stopwatch_Stop(postssv_watch_master); if (fprintf(ofp, "//\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); /* Output the results in an MSA (-A option) */ if (afp) { ESL_MSA *msa = NULL; if (p7_tophits_Alignment(info->th, abc, NULL, NULL, 0, p7_DEFAULT, &msa) == eslOK) { if (textw > 0) eslx_msafile_Write(afp, msa, eslMSAFILE_STOCKHOLM); else eslx_msafile_Write(afp, msa, eslMSAFILE_PFAM); if (fprintf(ofp, "# Alignment of %d hits satisfying inclusion thresholds saved to: %s\n", msa->nseq, esl_opt_GetString(go, "-A")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } else { if (fprintf(ofp, "# No hits satisfy inclusion thresholds; no alignment saved\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } esl_msa_Destroy(msa); } for (i = 0; i < infocnt; ++i) p7_hmm_ScoreDataDestroy(info[i].scoredata); p7_hmm_ScoreDataDestroy(scoredata); p7_pipeline_Destroy(info->pli); p7_tophits_Destroy(info->th); p7_oprofile_Destroy(info->om); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); destroy_id_length(id_length_list); if (qsq != NULL) esl_sq_Reuse(qsq); if (hfp != NULL) { qhstatus = p7_hmmfile_Read(hfp, &abc, &hmm); } else if (qfp_msa != NULL){ esl_msa_Destroy(msa); qhstatus = eslx_msafile_Read(qfp_msa, &msa); } else { // qfp_sq qhstatus = esl_sqio_Read(qfp_sq, qsq); } } /* end outer loop over queries */ if (hfp != NULL) { switch(qhstatus) { case eslEOD: p7_Fail("read failed, HMM file %s may be truncated?", cfg->queryfile); break; case eslEFORMAT: p7_Fail("bad file format in HMM file %s", cfg->queryfile); break; case eslEINCOMPAT: p7_Fail("HMM file %s contains different alphabets", cfg->queryfile); break; case eslEOF: /* do nothing; EOF is what we expect here */ break; default: p7_Fail("Unexpected error (%d) in reading HMMs from %s", qhstatus, cfg->queryfile); } } else if (qfp_msa != NULL){ if (qhstatus != eslEOF ) eslx_msafile_ReadFailure(qfp_msa, status); } else { // qfp_sq if (qhstatus == eslEFORMAT) p7_Fail("Parse failed (sequence file %s):\n%s\n", qfp_sq->filename, esl_sqfile_GetErrorBuf(qfp_sq)); else if (qhstatus != eslEOF) p7_Fail("Unexpected error %d reading sequence file %s", qhstatus, qfp_sq->filename); } // esl_stopwatch_Display(stdout, ssv_watch_master_tot, "# Total SSV time: "); // esl_stopwatch_Display(stdout, postssv_watch_master_tot, "# Total POSTSSV time: "); /* Terminate outputs - any last words? */ if (tblfp) p7_tophits_TabularTail(tblfp, "nhmmer", p7_SEARCH_SEQS, cfg->queryfile, cfg->dbfile, go); if (ofp) { if (fprintf(ofp, "[ok]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } /* Cleanup - prepare for successful exit */ for (i = 0; i < infocnt; ++i) p7_bg_Destroy(info[i].bg); #ifdef HMMER_THREADS if (ncpus > 0) { esl_workqueue_Reset(queue); #if defined (p7_IMPL_SSE) if (dbformat == eslSQFILE_FMINDEX) { while (esl_workqueue_Remove(queue, (void **) &fminfo) == eslOK) { if (fminfo) { if (fminfo->fmf) free(fminfo->fmf); if (fminfo->fmb) free(fminfo->fmb); free(fminfo); } } } else #endif { while (esl_workqueue_Remove(queue, (void **) &block) == eslOK) { esl_sq_DestroyBlock(block); } } esl_workqueue_Destroy(queue); esl_threads_Destroy(threadObj); } #endif free(info); if (hfp != NULL) p7_hmmfile_Close(hfp); if (qfp_msa != NULL) eslx_msafile_Close(qfp_msa); if (qfp_sq != NULL) esl_sqfile_Close(qfp_sq); if (builder != NULL) p7_builder_Destroy(builder); if (qsq != NULL) esl_sq_Destroy(qsq); esl_sqfile_Close(dbfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); #if defined (p7_IMPL_SSE) if (dbformat == eslSQFILE_FMINDEX) { fclose(fm_meta->fp); fm_configDestroy(fm_cfg); // will cascade to destroy meta and alphabet, too } #endif if (ofp != stdout) fclose(ofp); if (afp) fclose(afp); if (tblfp) fclose(tblfp); if (dfamtblfp) fclose(dfamtblfp); if (aliscoresfp) fclose(aliscoresfp); return eslOK; ERROR: if (hfp != NULL) p7_hmmfile_Close(hfp); if (qfp_msa != NULL) eslx_msafile_Close(qfp_msa); if (qfp_sq != NULL) esl_sqfile_Close(qfp_sq); if (builder != NULL) p7_builder_Destroy(builder); if (qsq != NULL) esl_sq_Destroy(qsq); if (ofp != stdout) fclose(ofp); if (afp) fclose(afp); if (tblfp) fclose(tblfp); if (dfamtblfp) fclose(dfamtblfp); if (aliscoresfp) fclose(aliscoresfp); #if defined (p7_IMPL_SSE) if (dbformat == eslSQFILE_FMINDEX) { fm_configDestroy(fm_cfg); } #endif if (hmmfile != NULL) free (hmmfile); return eslFAIL; } //TODO: MPI code needs to be added here static int serial_loop(WORKER_INFO *info, ID_LENGTH_LIST *id_length_list, ESL_SQFILE *dbfp, char *firstseq_key, int n_targetseqs/*, ESL_STOPWATCH *ssv_watch_master, ESL_STOPWATCH *postssv_watch_master, ESL_STOPWATCH *watch_slave*/) { int wstatus = eslOK; int prev_hit_cnt; int seq_id = 0; ESL_SQ *dbsq = esl_sq_CreateDigital(info->om->abc); #ifdef eslAUGMENT_ALPHABET ESL_SQ *dbsq_revcmp; if (dbsq->abc->complement != NULL) dbsq_revcmp = esl_sq_CreateDigital(info->om->abc); #endif /*eslAUGMENT_ALPHABET*/ wstatus = esl_sqio_ReadWindow(dbfp, 0, info->pli->block_length, dbsq); while (wstatus == eslOK && (n_targetseqs==-1 || seq_id < n_targetseqs) ) { dbsq->idx = seq_id; p7_pli_NewSeq(info->pli, dbsq); if (info->pli->strands != p7_STRAND_BOTTOMONLY) { info->pli->nres -= dbsq->C; // to account for overlapping region of windows prev_hit_cnt = info->th->N; p7_Pipeline_LongTarget(info->pli, info->om, info->scoredata, info->bg, info->th, info->pli->nseqs, dbsq, p7_NOCOMPLEMENT, NULL, NULL, NULL/*, ssv_watch_master, postssv_watch_master, watch_slave*/); p7_pipeline_Reuse(info->pli); // prepare for next search } else { info->pli->nres -= dbsq->n; } #ifdef eslAUGMENT_ALPHABET //reverse complement if (info->pli->strands != p7_STRAND_TOPONLY && dbsq->abc->complement != NULL ) { prev_hit_cnt = info->th->N; esl_sq_Copy(dbsq,dbsq_revcmp); esl_sq_ReverseComplement(dbsq_revcmp); p7_Pipeline_LongTarget(info->pli, info->om, info->scoredata, info->bg, info->th, info->pli->nseqs, dbsq_revcmp, p7_COMPLEMENT, NULL, NULL, NULL/*, ssv_watch_master, postssv_watch_master, watch_slave*/); p7_pipeline_Reuse(info->pli); // prepare for next search info->pli->nres += dbsq_revcmp->W; } #endif /*eslAUGMENT_ALPHABET*/ wstatus = esl_sqio_ReadWindow(dbfp, info->om->max_length, info->pli->block_length, dbsq); if (wstatus == eslEOD) { // no more left of this sequence ... move along to the next sequence. add_id_length(id_length_list, dbsq->idx, dbsq->L); info->pli->nseqs++; esl_sq_Reuse(dbsq); wstatus = esl_sqio_ReadWindow(dbfp, 0, info->pli->block_length, dbsq); seq_id++; } } if (dbsq) esl_sq_Destroy(dbsq); if (dbsq_revcmp) esl_sq_Destroy(dbsq_revcmp); return wstatus; } #if defined (p7_IMPL_SSE) static int serial_loop_FM(WORKER_INFO *info, ESL_SQFILE *dbfp /*, ESL_STOPWATCH *ssv_watch_master, ESL_STOPWATCH *postssv_watch_master, ESL_STOPWATCH *watch_slave*/) { int wstatus = eslOK; int i; FM_DATA fmf; FM_DATA fmb; FM_METADATA *meta = info->fm_cfg->meta; for ( i=0; ifm_cfg->meta->block_count; i++ ) { wstatus = fm_FM_read( &fmf, meta, TRUE ); if (wstatus != eslOK) return wstatus; wstatus = fm_FM_read( &fmb, meta, FALSE ); if (wstatus != eslOK) return wstatus; fmb.SA = fmf.SA; fmb.T = fmf.T; wstatus = p7_Pipeline_LongTarget(info->pli, info->om, info->scoredata, info->bg, info->th, -1, NULL, -1, &fmf, &fmb, info->fm_cfg/*, ssv_watch_master, postssv_watch_master, watch_slave*/); if (wstatus != eslOK) return wstatus; fm_FM_destroy(&fmf, 1); fm_FM_destroy(&fmb, 0); } return wstatus; } #endif //#if defined (p7_IMPL_SSE) #ifdef HMMER_THREADS static int thread_loop(WORKER_INFO *info, ID_LENGTH_LIST *id_length_list, ESL_THREADS *obj, ESL_WORK_QUEUE *queue, ESL_SQFILE *dbfp, char *firstseq_key, int n_targetseqs) { int i; int status = eslOK; int sstatus = eslOK; int eofCount = 0; ESL_SQ_BLOCK *block; void *newBlock; int seqid = -1; ESL_SQ *tmpsq = esl_sq_CreateDigital(info->om->abc); int abort = FALSE; // in the case n_targetseqs != -1, a block may get abbreviated esl_workqueue_Reset(queue); esl_threads_WaitForStart(obj); status = esl_workqueue_ReaderUpdate(queue, NULL, &newBlock); if (status != eslOK) esl_fatal("Work queue reader failed"); ((ESL_SQ_BLOCK *)newBlock)->complete = TRUE; /* Main loop: */ while (sstatus == eslOK ) { block = (ESL_SQ_BLOCK *) newBlock; if (abort) { block->count = 0; sstatus = eslEOF; } else { sstatus = esl_sqio_ReadBlock(dbfp, block, info->pli->block_length, n_targetseqs, TRUE); } block->first_seqidx = info->pli->nseqs; seqid = block->first_seqidx; for (i=0; icount; i++) { block->list[i].idx = seqid; add_id_length(id_length_list, seqid, block->list[i].L); seqid++; if ( seqid == n_targetseqs // hit the sequence target && ( icount-1 || block->complete ) // and either it's not the last sequence (so it's complete), or its complete ) { abort = TRUE; block->count = i+1; break; } } info->pli->nseqs += block->count - ((abort || block->complete) ? 0 : 1);// if there's an incomplete sequence read into the block wait to count it until it's complete. if (sstatus == eslEOF) { if (eofCount < esl_threads_GetWorkerCount(obj)) sstatus = eslOK; ++eofCount; } else if (!block->complete ) { // The final sequence on the block was an incomplete window of the active sequence, // so our next read will need a copy of it to correctly deal with overlapping // regions. We capture a copy of the sequence here before sending it off to the // pipeline to avoid odd race conditions that can occur otherwise. // Copying the entire sequence isn't really necessary, and is a bit heavy- // handed. Could accelerate if this proves to have any notable impact on speed. esl_sq_Copy(block->list + (block->count - 1) , tmpsq); } if (sstatus == eslOK) { status = esl_workqueue_ReaderUpdate(queue, block, &newBlock); if (status != eslOK) esl_fatal("Work queue reader failed"); //newBlock needs all this information so the next ReadBlock call will know what to do ((ESL_SQ_BLOCK *)newBlock)->complete = block->complete; if (!block->complete) { // Push the captured copy of the previously-read sequence into the new block, // in preparation for ReadWindow (double copy ... slower than necessary) esl_sq_Copy(tmpsq, ((ESL_SQ_BLOCK *)newBlock)->list); if ( ((ESL_SQ_BLOCK *)newBlock)->list->n < info->om->max_length ) { //no reason to search the final partial sequence on the block, as the next block will search this whole chunk ((ESL_SQ_BLOCK *)newBlock)->list->C = ((ESL_SQ_BLOCK *)newBlock)->list->n; (((ESL_SQ_BLOCK *)newBlock)->count)--; } else { ((ESL_SQ_BLOCK *)newBlock)->list->C = info->om->max_length; } } } } status = esl_workqueue_ReaderUpdate(queue, block, NULL); if (status != eslOK) esl_fatal("Work queue reader failed"); if (sstatus == eslEOF) { /* wait for all the threads to complete */ esl_threads_WaitForFinish(obj); esl_workqueue_Complete(queue); } esl_sq_Destroy(tmpsq); return sstatus; } static void pipeline_thread(void *arg) { int prev_hit_cnt; int i; int status; int workeridx; WORKER_INFO *info; ESL_THREADS *obj; ESL_SQ_BLOCK *block = NULL; void *newBlock; impl_Init(); obj = (ESL_THREADS *) arg; esl_threads_Started(obj, &workeridx); info = (WORKER_INFO *) esl_threads_GetData(obj, workeridx); status = esl_workqueue_WorkerUpdate(info->queue, NULL, &newBlock); if (status != eslOK) esl_fatal("Work queue worker failed"); /* loop until all blocks have been processed */ block = (ESL_SQ_BLOCK *) newBlock; while (block->count > 0) { /* Main loop: */ for (i = 0; i < block->count; ++i) { ESL_SQ *dbsq = block->list + i; p7_pli_NewSeq(info->pli, dbsq); if (info->pli->strands != p7_STRAND_BOTTOMONLY) { info->pli->nres -= dbsq->C; // to account for overlapping region of windows prev_hit_cnt = info->th->N; p7_Pipeline_LongTarget(info->pli, info->om, info->scoredata, info->bg, info->th, block->first_seqidx + i, dbsq, p7_NOCOMPLEMENT, NULL, NULL, NULL/*, NULL, NULL, NULL*/); p7_pipeline_Reuse(info->pli); // prepare for next search } else { info->pli->nres -= dbsq->n; } #ifdef eslAUGMENT_ALPHABET //reverse complement if (info->pli->strands != p7_STRAND_TOPONLY && dbsq->abc->complement != NULL) { prev_hit_cnt = info->th->N; esl_sq_ReverseComplement(dbsq); p7_Pipeline_LongTarget(info->pli, info->om, info->scoredata, info->bg, info->th, block->first_seqidx + i, dbsq, p7_COMPLEMENT, NULL, NULL, NULL/*, NULL, NULL, NULL*/); p7_pipeline_Reuse(info->pli); // prepare for next search info->pli->nres += dbsq->W; } #endif /*eslAUGMENT_ALPHABET*/ } status = esl_workqueue_WorkerUpdate(info->queue, block, &newBlock); if (status != eslOK) esl_fatal("Work queue worker failed"); block = (ESL_SQ_BLOCK *) newBlock; } status = esl_workqueue_WorkerUpdate(info->queue, block, NULL); if (status != eslOK) esl_fatal("Work queue worker failed"); esl_threads_Finished(obj, workeridx); return; } #if defined (p7_IMPL_SSE) static int thread_loop_FM(WORKER_INFO *info, ESL_THREADS *obj, ESL_WORK_QUEUE *queue, ESL_SQFILE *dbfp) { int status = eslOK; int i; FM_METADATA *meta = info->fm_cfg->meta; FM_THREAD_INFO *fminfo = NULL; void *newFMinfo = NULL; esl_workqueue_Reset(queue); esl_threads_WaitForStart(obj); status = esl_workqueue_ReaderUpdate(queue, NULL, &newFMinfo); if (status != eslOK) esl_fatal("Work queue reader failed"); fminfo = (FM_THREAD_INFO *) newFMinfo; /* Main loop: */ for ( i=0; ifm_cfg->meta->block_count; i++ ) { status = fm_FM_read( fminfo->fmf, meta, TRUE ); if (status != eslOK) return status; status = fm_FM_read( fminfo->fmb, meta, FALSE ); if (status != eslOK) return status; fminfo->fmb->SA = fminfo->fmf->SA; fminfo->fmb->T = fminfo->fmf->T; fminfo->active = TRUE; status = esl_workqueue_ReaderUpdate(queue, fminfo, &newFMinfo); if (status != eslOK) esl_fatal("Work queue reader failed"); fminfo = (FM_THREAD_INFO *) newFMinfo; } /* this part is here to feed the worker threads with new fminfo objects to swap from * the queue while they are confirming completion of earlier fminfo objects (by * returning them). They are labelled inactive, so the worker doesn't bother * computing on them. */ for (i=0; iactive = FALSE; esl_workqueue_ReaderUpdate(queue, fminfo, &newFMinfo); if (status != eslOK) esl_fatal("Work queue reader failed"); fminfo = (FM_THREAD_INFO *) newFMinfo; } fminfo->active = FALSE; esl_workqueue_ReaderUpdate(queue, fminfo, NULL); if (status != eslOK) esl_fatal("Work queue reader failed"); esl_threads_WaitForFinish(obj); esl_workqueue_Complete(queue); return status; } static void pipeline_thread_FM(void *arg) { int status; int workeridx; WORKER_INFO *info; ESL_THREADS *obj; FM_METADATA *meta = NULL; FM_THREAD_INFO *fminfo = NULL; void *newFMinfo = NULL; impl_Init(); obj = (ESL_THREADS *) arg; esl_threads_Started(obj, &workeridx); info = (WORKER_INFO *) esl_threads_GetData(obj, workeridx); meta = info->fm_cfg->meta; status = esl_workqueue_WorkerUpdate(info->queue, NULL, &newFMinfo); if (status != eslOK) esl_fatal("Work queue worker failed"); /* loop until all blocks have been processed */ fminfo = (FM_THREAD_INFO *) newFMinfo; while (fminfo->active) { status = p7_Pipeline_LongTarget(info->pli, info->om, info->scoredata, info->bg, info->th, -1, NULL, -1, fminfo->fmf, fminfo->fmb, info->fm_cfg/*, NULL, NULL, NULL */); if (status != eslOK) esl_fatal ("Work queue worker failed"); fm_FM_destroy(fminfo->fmf, 1); fm_FM_destroy(fminfo->fmb, 0); status = esl_workqueue_WorkerUpdate(info->queue, fminfo, &newFMinfo); if (status != eslOK) esl_fatal("Work queue worker failed"); fminfo = (FM_THREAD_INFO *) newFMinfo; } status = esl_workqueue_WorkerUpdate(info->queue, fminfo, NULL); if (status != eslOK) esl_fatal("Work queue worker failed"); esl_threads_Finished(obj, workeridx); return; } #endif //#if defined (p7_IMPL_SSE) #endif /* HMMER_THREADS */ /* helper functions for tracking id_lengths */ static ID_LENGTH_LIST * init_id_length( int size ) { int status; ID_LENGTH_LIST *list; ESL_ALLOC (list, sizeof(ID_LENGTH_LIST)); list->count = 0; list->size = size; list->id_lengths = NULL; ESL_ALLOC (list->id_lengths, size * sizeof(ID_LENGTH)); return list; ERROR: return NULL; } static void destroy_id_length( ID_LENGTH_LIST *list ) { if (list != NULL) { if (list->id_lengths != NULL) free (list->id_lengths); free (list); } } static int add_id_length(ID_LENGTH_LIST *list, int id, int L) { int status; if (list->count > 0 && list->id_lengths[list->count-1].id == id) { // the last time this gets updated, it'll have the sequence's actual length list->id_lengths[list->count-1].length = L; } else { if (list->count == list->size) { list->size *= 10; ESL_REALLOC(list->id_lengths, list->size * sizeof(ID_LENGTH)); } list->id_lengths[list->count].id = id; list->id_lengths[list->count].length = L; list->count++; } return eslOK; ERROR: return status; } static int assign_Lengths(P7_TOPHITS *th, ID_LENGTH_LIST *id_length_list) { int i; int j = 0; for (i=0; iN; i++) { while (th->hit[i]->seqidx != id_length_list->id_lengths[j].id) { j++; } th->hit[i]->dcl[0].ad->L = id_length_list->id_lengths[j].length; } return eslOK; } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/nhmmer.c $ * SVN $Id: nhmmer.c 4771 2015-02-25 06:53:51Z wheelert $ *****************************************************************/ hmmer-3.1b2/src/p7_spensemble.c0000664361611702660230000005700612473612614015777 0ustar wheelerteddy/* Defining domain number and coordinates in a significant hit by * posterior sampling and clustering. * * SRE, Wed Jan 9 07:26:34 2008 [Janelia] * SVN $Id: p7_spensemble.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include "easel.h" #include "esl_cluster.h" #include "esl_vectorops.h" #include "hmmer.h" /* Function: p7_spensemble_Create() * Synopsis: Allocates a * Incept: SRE, Wed Jan 9 10:00:14 2008 [Janelia] * * Purpose: Create a new with specified initial * allocation sizes: for the number of sampled * segment pairs, for the range over * which one of a domain's (i,j,k,m) sampled endpoints * falls, and for the number of significant * clusters (domains) that will be defined. * * The values of these initial allocations are only * relevant to tuning memory performance, because the * object is reallocated/grown as needed. You can make * guesses, and the better your guess, the fewer * reallocations will be needed; but everything will work * fine regardless of what these initial allocations are. * * A is designed to be reused for many * target sequences and/or models, to minimize alloc/free * calls. * * Args: init_n - initial allocation for # of sampled segment pairs * init_epc - initial allocation for maximum endpoint range * init_sigc - initial allocation for # of significant clusters, domains * * Returns: a pointer to the new . * * Throws: on allocation failure. */ P7_SPENSEMBLE * p7_spensemble_Create(int init_n, int init_epc, int init_sigc) { P7_SPENSEMBLE *sp = NULL; int status; ESL_ALLOC(sp, sizeof(P7_SPENSEMBLE)); sp->sp = NULL; sp->workspace = NULL; sp->assignment = NULL; sp->epc = NULL; sp->sigc = NULL; sp->nalloc = init_n; sp->epc_alloc = init_epc; sp->nsigc_alloc = init_sigc; ESL_ALLOC(sp->sp, sizeof(struct p7_spcoord_s) * sp->nalloc); ESL_ALLOC(sp->workspace, sizeof(int) * sp->nalloc * 2); /* workspace is 2n */ ESL_ALLOC(sp->assignment, sizeof(int) * sp->nalloc); ESL_ALLOC(sp->epc, sizeof(int) * sp->epc_alloc); ESL_ALLOC(sp->sigc, sizeof(struct p7_spcoord_s) * sp->nsigc_alloc); sp->nsamples = 0; sp->n = 0; sp->nc = 0; sp->nsigc = 0; return sp; ERROR: p7_spensemble_Destroy(sp); return NULL; } /* Function: p7_spensemble_Reuse() * Synopsis: Reinitializes a . * Incept: SRE, Wed Jan 9 10:26:36 2008 [Janelia] * * Purpose: Reinitialize so it can be used again to collect * and process a new segment pair ensemble, without * having to free and reallocate. * * Returns: on success. */ int p7_spensemble_Reuse(P7_SPENSEMBLE *sp) { sp->nsamples = 0; sp->n = 0; sp->nc = 0; sp->nsigc = 0; return eslOK; } /* Function: p7_spsensemble_Add() * Synopsis: Add a new segment pair to a growing ensemble. * Incept: SRE, Wed Jan 9 10:28:04 2008 [Janelia] * * Purpose: Adds a new segment pair to a growing ensemble . * The segment pair is defined by start/end positions * , on a target sequence (1..L), and start/end * positions , on a query model (1..M). * * You also provide the index of which sampled * traceback this segment pair came from; each traceback * contains one or more segment pairs. These * indices start at 0 and they must arrive sequentially: * that is, the caller must all the segment pairs * from traceback sample 0, then all the segment * pairs from traceback sample 1, and so on. * * The reason to enforce sequential addition has to do with * the internals of the ensemble clustering algorithm; * specifically with how it calculates the posterior * probability of a cluster in the ensemble. You can't * calculate the posterior probability of a cluster simply * by dividing the number of segment pairs in a cluster by * the total number of traces, because you can get * "probabilities" of greater than one: sometimes more than * one pair from the same trace get clustered together * (because one domain got split into two or more segment * pairs). Rather, what it does is to count the total * number of traces that have one or more segments in the * cluster, divided by the total number of traces. An * efficient way to implement this is, when counting * segments that belong to a cluster, only increment the * numerator if the segment has a different traceback index * than the last segment we counted in this cluster. (We'd * rather not have to keep track of a table of all the * traceback indices we've seen so far.) * * Args: sp - ensemble to add this segment pair to * sampleidx - index of traceback that this seg pair came from (0..nsamples-1) * i,j - start,end position on target sequence (1..L) * k,m - start,end position on query model (1..M) * * Returns: on success. * * Throws: if the is out of order. * if a reallocation fails. */ int p7_spensemble_Add(P7_SPENSEMBLE *sp, int sampleidx, int i, int j, int k, int m) { int status; if (sampleidx > sp->nsamples) ESL_EXCEPTION(eslEINVAL, "seg pair's is out of order"); else if (sampleidx == sp->nsamples) sp->nsamples++; if (sp->n >= sp->nalloc) { void *p; ESL_RALLOC(sp->sp, p, sizeof(struct p7_spcoord_s) * sp->nalloc * 2); ESL_RALLOC(sp->workspace, p, sizeof(int) * sp->nalloc * 4); /* remember, workspace is 2n */ ESL_RALLOC(sp->assignment, p, sizeof(int) * sp->nalloc * 2); sp->nalloc *= 2; } sp->sp[sp->n].idx = sampleidx; sp->sp[sp->n].i = i; sp->sp[sp->n].j = j; sp->sp[sp->n].k = k; sp->sp[sp->n].m = m; sp->n++; return eslOK; ERROR: return status; } /* struct p7_linkparam_s: * used just within this .c, as part of setting up the clustering problem in * the form that Easel's general SLC algorithm will take it. */ struct p7_linkparam_s { float min_overlap; /* 0.8 means >= 80% overlap of (smaller/larger) segment is required, both in seq and hmm */ int of_smaller; /* TRUE means overlap fraction is w.r.t. smaller segment; FALSE means w.r.t. larger segment */ int max_diagdiff; /* 4 means either start or endpoints of two segments must be within <= 4 diagonals of each other */ float min_posterior; /* 0.25 means a cluster must occur w/ >= 25% posterior probability in the sample to be "significant" */ float min_endpointp; /* 0.02 means choose widest endpoint with post. prob. of at least 2% */ }; /* link_spsamples(): * * Defines the rule used for single linkage clustering of sampled * domain coordinates. (API is dictated by Easel's general single * linkage clustering routine.) */ static int link_spsamples(const void *v1, const void *v2, const void *prm, int *ret_link) { struct p7_spcoord_s *h1 = (struct p7_spcoord_s *) v1; struct p7_spcoord_s *h2 = (struct p7_spcoord_s *) v2; struct p7_linkparam_s *param = (struct p7_linkparam_s *) prm; int nov, n; int d1, d2; /* seq overlap test */ nov = ESL_MIN(h1->j, h2->j) - ESL_MAX(h1->i, h2->i) + 1; /* overlap */ n = (param->of_smaller ? ESL_MIN(h1->j - h1->i + 1, h2->j - h2->i + 1) : /* min length of the two hits */ ESL_MAX(h1->j - h1->i + 1, h2->j - h2->i + 1)); /* max length of the two hits */ if ((float) nov / (float) n < param->min_overlap) { *ret_link = FALSE; return eslOK; } /* hmm overlap test */ nov = ESL_MIN(h1->m, h2->m) - ESL_MAX(h1->k, h2->k); n = (param->of_smaller ? ESL_MIN(h1->m - h1->k + 1, h2->m - h2->k + 1) : ESL_MAX(h1->m - h1->k + 1, h2->m - h2->k + 1)); if ((float) nov / (float) n < param->min_overlap) { *ret_link = FALSE; return eslOK; } /* nearby diagonal test */ d1 = (h1->i - h1->k); d2 = (h2->i - h2->k); if (abs(d1-d2) <= param->max_diagdiff) { *ret_link = TRUE; return eslOK; } d1 = (h1->j - h1->m); d2 = (h2->j - h2->m); if (abs(d1-d2) <= param->max_diagdiff) { *ret_link = TRUE; return eslOK; } *ret_link = FALSE; return eslOK; } /* cluster_orderer() * is the routine that gets passed to qsort() to sort * the significant clusters by order of occurrence on * the target sequence */ static int cluster_orderer(const void *v1, const void *v2) { struct p7_spcoord_s *h1 = (struct p7_spcoord_s *) v1; struct p7_spcoord_s *h2 = (struct p7_spcoord_s *) v2; if (h1->i < h2->i) return -1; else if (h1->i > h2->i) return 1; else return 0; } /* Function: p7_spensemble_Cluster() * Synopsis: Cluster a seg pair ensemble and define domains. * Incept: SRE, Wed Jan 9 11:04:07 2008 [Janelia] * * Purpose: Given a collected segment pair ensemble , cluster it; * identify significant clusters with high posterior probability; * and define consensus endpoints for each significant cluster. * * Clustering is single-linkage. The linkage rule is * controlled by the , , and * parameters. To be linked, two segments * must overlap by a fraction $\geq$ , * relative to either the smaller or larger of the two * segments ( or ), in both their * sequence and model coords, and either the start or end of both * segments must lie within $\leq$ diagonals * of each other. * * The threshold for cluster "significance" is controlled * by the parameter. Clusters with * posterior probability $\geq$ this threshold are called * significant. * * Consensus endpoint definition within a cluster is * controlled by the parameter. The widest * endpoint that has a posterior probability of $\geq * min_endpointp> is chosen; this is done independently for * each coordinate (i,j,k,m). * * A reasonable (and tested) parameterization is * , , , , . * * Args: sp - segment pair ensemble to cluster * min_overlap - linkage requires fractional overlap >= this, in both seq and hmm segments * of_smaller - overlap fraction denominators uses either the smaller (if TRUE) or larger (if FALSE) segment * max_diagdiff - linkage requires that start, end points of both seg pairs are <= this * min_posterior - clusters with posterior prob >= this are defined as significant * min_endpointp - widest endpoint with post prob >= this is defined as consensus endpoint coord * * Returns: the number of significant clusters in <*ret_nclusters>. * The caller can then obtain consensus endpoints for each cluster * by making a series of calls. * */ int p7_spensemble_Cluster(P7_SPENSEMBLE *sp, float min_overlap, int of_smaller, int max_diagdiff, float min_posterior, float min_endpointp, int *ret_nclusters) { struct p7_linkparam_s param; int status; int c; int h; int idx_of_last; int *ninc = NULL; int cwindow_width; int epc_threshold; int imin, jmin, kmin, mmin; int imax, jmax, kmax, mmax; int best_i, best_j, best_k, best_m; /* set up a single linkage clustering problem for Easel's general routine */ param.min_overlap = min_overlap; param.of_smaller = of_smaller; param.max_diagdiff = max_diagdiff; param.min_posterior = min_posterior; param.min_endpointp = min_endpointp; if ((status = esl_cluster_SingleLinkage(sp->sp, sp->n, sizeof(struct p7_spcoord_s), link_spsamples, (void *) ¶m, sp->workspace, sp->assignment, &(sp->nc))) != eslOK) goto ERROR; ESL_ALLOC(ninc, sizeof(int) * sp->nc); /* Look at each cluster in turn; most will be too small to worry about. */ for (c = 0; c < sp->nc; c++) { /* Calculate posterior probability of each cluster. * The extra wrinkle here is that this probability is w.r.t the number of sampled traces; * but the clusters might contain more than one seg pair from a given trace. * That's what the idx_of_last logic is doing, avoiding double-counting. */ idx_of_last = -1; for (ninc[c] = 0, h = 0; h < sp->n; h++) { if (sp->assignment[h] == c) { if (sp->sp[h].idx != idx_of_last) ninc[c]++; idx_of_last = sp->sp[h].idx; } } /* Reject low probability clusters: */ if ((float) ninc[c] / (float) sp->nsamples < min_posterior) continue; /* Find the maximum extent of all seg pairs in this cluster in i,j k,m */ for (imin = 0, h = 0; h < sp->n; h++) if (sp->assignment[h] == c) { if (imin == 0) { imin = imax = sp->sp[h].i; jmin = jmax = sp->sp[h].j; kmin = kmax = sp->sp[h].k; mmin = mmax = sp->sp[h].m; } else { imin = ESL_MIN(imin, sp->sp[h].i); imax = ESL_MAX(imax, sp->sp[h].i); jmin = ESL_MIN(jmin, sp->sp[h].j); jmax = ESL_MAX(jmax, sp->sp[h].j); kmin = ESL_MIN(kmin, sp->sp[h].k); kmax = ESL_MAX(kmax, sp->sp[h].k); mmin = ESL_MIN(mmin, sp->sp[h].m); mmax = ESL_MAX(mmax, sp->sp[h].m); } } /* Set up a window in which we can examine the end point distributions for i,j,k,m in turn, independently */ cwindow_width = ESL_MAX(ESL_MAX(imax-imin+1, jmax-jmin+1), ESL_MAX(kmax-kmin+1, mmax-mmin+1)); if (cwindow_width > sp->epc_alloc) { void *p; ESL_RALLOC(sp->epc, p, sizeof(int) * cwindow_width); sp->epc_alloc = cwindow_width; } epc_threshold = (int) ceilf((float) ninc[c] * min_endpointp); /* round up. freq of >= epc_threshold means we're >= min_p */ /* Identify the leftmost i that has enough endpoints. */ esl_vec_ISet(sp->epc, imax-imin+1, 0); for (h = 0; h < sp->n; h++) if (sp->assignment[h] == c) sp->epc[sp->sp[h].i-imin]++; for (best_i = imin; best_i <= imax; best_i++) if (sp->epc[best_i-imin] >= epc_threshold) break; if (best_i > imax) best_i = imin + esl_vec_IArgMax(sp->epc, imax-imin+1); /* Identify the leftmost k that has enough endpoints */ esl_vec_ISet(sp->epc, kmax-kmin+1, 0); for (h = 0; h < sp->n; h++) if (sp->assignment[h] == c) sp->epc[sp->sp[h].k-kmin]++; for (best_k = kmin; best_k <= kmax; best_k++) if (sp->epc[best_k-kmin] >= epc_threshold) break; if (best_k > kmax) best_k = kmin + esl_vec_IArgMax(sp->epc, kmax-kmin+1); /* Identify the rightmost j that has enough endpoints. */ esl_vec_ISet(sp->epc, jmax-jmin+1, 0); for (h = 0; h < sp->n; h++) if (sp->assignment[h] == c) sp->epc[sp->sp[h].j-jmin]++; for (best_j = jmax; best_j >= jmin; best_j--) if (sp->epc[best_j-jmin] >= epc_threshold) break; if (best_j < jmin) best_j = jmin + esl_vec_IArgMax(sp->epc, jmax-jmin+1); /* Identify the rightmost m that has enough endpoints. */ esl_vec_ISet(sp->epc, mmax-mmin+1, 0); for (h = 0; h < sp->n; h++) if (sp->assignment[h] == c) sp->epc[sp->sp[h].m-mmin]++; for (best_m = mmax; best_m >= mmin; best_m--) if (sp->epc[best_m-mmin] >= epc_threshold) break; if (best_m < mmin) best_m = mmin + esl_vec_IArgMax(sp->epc, mmax-mmin+1); /* If there's no well-defined domain (say, a long stretch of biased composition), the coords above might come out inconsistent; in this case, just reject the domain. */ if (best_i > best_j || best_k > best_m) continue; if (sp->nsigc >= sp->nsigc_alloc) { void *p; ESL_RALLOC(sp->sigc, p, sizeof(struct p7_spcoord_s) * sp->nsigc_alloc * 2); sp->nsigc_alloc *= 2; } sp->sigc[sp->nsigc].i = best_i; sp->sigc[sp->nsigc].j = best_j; sp->sigc[sp->nsigc].k = best_k; sp->sigc[sp->nsigc].m = best_m; sp->sigc[sp->nsigc].idx = c; sp->sigc[sp->nsigc].prob = (float) ninc[c] / (float) sp->nsamples; sp->nsigc++; } /* Now we need to make sure those domains are ordered by start point, * because later we're going to calculate overlaps by i_cur - j_prv */ qsort((void *) sp->sigc, sp->nsigc, sizeof(struct p7_spcoord_s), cluster_orderer); free(ninc); *ret_nclusters = sp->nsigc; return eslOK; ERROR: if (ninc != NULL) free(ninc); *ret_nclusters = 0; return status; } /* Function: p7_spensemble_GetClusterCoords() * Synopsis: Retrieve consensus coords of one significant segment pair cluster. * Incept: SRE, Wed Jan 9 11:39:27 2008 [Janelia] * * Purpose: Retrieve the consensus coords of significant segment pair cluster * from the ensemble , which has already been clustered with * . * * Returns: on success, and the consensus coords are in <*opt_i>, <*opt_j>, * <*opt_k>, and <*opt_m>; the (sampled) posterior probability of the * cluster is in <*opt_p>. All of these returned values are optional; * the caller can pass a for any value it's not interested in * retrieving. */ int p7_spensemble_GetClusterCoords(P7_SPENSEMBLE *sp, int which, int *opt_i, int *opt_j, int *opt_k, int *opt_m, float *opt_p) { if (opt_i != NULL) *opt_i = sp->sigc[which].i; if (opt_j != NULL) *opt_j = sp->sigc[which].j; if (opt_k != NULL) *opt_k = sp->sigc[which].k; if (opt_m != NULL) *opt_m = sp->sigc[which].m; if (opt_p != NULL) *opt_p = sp->sigc[which].prob; return eslOK; } /* Function: p7_spensemble_Destroy() * Synopsis: Deallocate a * Incept: SRE, Wed Jan 9 11:42:01 2008 [Janelia] * * Purpose: Destroys a . */ void p7_spensemble_Destroy(P7_SPENSEMBLE *sp) { if (sp == NULL) return; if (sp->sp != NULL) free(sp->sp); if (sp->workspace != NULL) free(sp->workspace); if (sp->assignment != NULL) free(sp->assignment); if (sp->epc != NULL) free(sp->epc); if (sp->sigc != NULL) free(sp->sigc); free(sp); } /***************************************************************** * Benchmark and example. *****************************************************************/ #ifdef p7SPENSEMBLE_EXAMPLE /* gcc -g -I. -L. -I ../easel -L ../easel -Dp7SPENSEMBLE_EXAMPLE -o example p7_spensemble.c -lhmmer -leasel -lm */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_alphabet.h" #include "esl_dmatrix.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_cluster.h" #include "esl_vectorops.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-N", eslARG_INT, "1000", NULL, NULL, NULL, NULL, NULL, "number of trace samples to take", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example, test, benchmark of defining domains by posterior sampling"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); int format = eslSQFILE_FASTA; ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *fwd = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; P7_TRACE *tr = NULL; P7_SPENSEMBLE *sp = NULL; int N = esl_opt_GetInteger(go, "-N"); int t,d,nc; int i,j,k,m; float sc; float prob; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); esl_sqfile_Close(sqfp); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); om = p7_oprofile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, sq->n); /* Allocate DP matrix for Forward, and run a Forward calculation in it */ fwd = p7_omx_Create(gm->M, sq->n, sq->n); p7_Forward (sq->dsq, sq->n, om, fwd, &sc); /* Allocate a trace container, and an spensemble */ tr = p7_trace_Create(); sp = p7_spensemble_Create(1024, 64, 32); /* Start the stopwatch. Now we're in domain processing steps. */ esl_stopwatch_Start(w); /* Collect N traces, add their domain coords to the ensemble, and cluster */ for (t = 0; t < N; t++) { p7_StochasticTrace(r, sq->dsq, sq->n, om, fwd, tr); p7_trace_Index(tr); for (d = 0; d < tr->ndom; d++) p7_spensemble_Add(sp, t, tr->sqfrom[d], tr->sqto[d], tr->hmmfrom[d], tr->hmmto[d]); p7_trace_Reuse(tr); } p7_spensemble_Cluster(sp, 0.8, TRUE, 4, 0.25, 0.02, &nc); for (d = 0; d < nc; d++) { p7_spensemble_GetClusterCoords(sp, d, &i, &j, &k, &m, &prob); printf("domain %-4d : %6d %6d %6d %6d p=%.4f\n", d, i, j, k, m, prob); } /* Done. */ esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); p7_spensemble_Destroy(sp); p7_trace_Destroy(tr); esl_sq_Destroy(sq); p7_omx_Destroy(fwd); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7SPENSEMBLE_EXAMPLE*/ hmmer-3.1b2/src/p7_builder.c0000664361611702660230000012324012473612614015262 0ustar wheelerteddy/* Standardized pipeline for construction of new HMMs. * * Contents: * 1. P7_BUILDER: allocation, initialization, destruction * 2. Standardized model construction API. * 3. Internal functions. * 4. Copyright and license information */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_dmatrix.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msacluster.h" #include "esl_msaweight.h" #include "esl_random.h" #include "esl_vectorops.h" #include "hmmer.h" /***************************************************************** * 1. P7_BUILDER: allocation, initialization, destruction *****************************************************************/ /* Function: p7_builder_Create() * Synopsis: Create a default HMM construction configuration. * * Purpose: Create a construction configuration for building * HMMs in alphabet , and return a pointer to it. * * An application configuration may optionally be * provided. If is , default parameters are * used. If is non-, it must include appropriate * settings for all of the following ``standard build options'': * * Model construction: --fast --hand --symfrac --fragthresh * Relative weighting: --wgsc --wblosum --wpb --wgiven --wid * Effective seq #: --eent --eclust --enone --eset --ere --esigma --eid * Prior scheme: --pnone --plaplace * E-val calibration: --EmL --EmN --EvL --EvN --EfL --EfN --Eft * run-to-run variation: --seed * * See or other big users of the build * pipeline for an example of appropriate * initializations of these 24 options. */ P7_BUILDER * p7_builder_Create(const ESL_GETOPTS *go, const ESL_ALPHABET *abc) { P7_BUILDER *bld = NULL; int seed; int status; ESL_ALLOC(bld, sizeof(P7_BUILDER)); bld->prior = NULL; bld->r = NULL; bld->S = NULL; bld->Q = NULL; bld->eset = -1.0; /* -1.0 = unset; must be set if effn_strategy is p7_EFFN_SET */ bld->re_target = -1.0; if (go == NULL) { bld->arch_strategy = p7_ARCH_FAST; bld->wgt_strategy = p7_WGT_PB; bld->effn_strategy = p7_EFFN_ENTROPY; seed = 42; } else { if (esl_opt_GetBoolean(go, "--fast")) bld->arch_strategy = p7_ARCH_FAST; else if (esl_opt_GetBoolean(go, "--hand")) bld->arch_strategy = p7_ARCH_HAND; if (esl_opt_GetBoolean(go, "--wpb")) bld->wgt_strategy = p7_WGT_PB; else if (esl_opt_GetBoolean(go, "--wgsc")) bld->wgt_strategy = p7_WGT_GSC; else if (esl_opt_GetBoolean(go, "--wblosum")) bld->wgt_strategy = p7_WGT_BLOSUM; else if (esl_opt_GetBoolean(go, "--wnone")) bld->wgt_strategy = p7_WGT_NONE; else if (esl_opt_GetBoolean(go, "--wgiven")) bld->wgt_strategy = p7_WGT_GIVEN; if (esl_opt_GetBoolean(go, "--eent")) bld->effn_strategy = p7_EFFN_ENTROPY; else if (esl_opt_GetBoolean(go, "--eclust")) bld->effn_strategy = p7_EFFN_CLUST; else if (esl_opt_GetBoolean(go, "--enone")) bld->effn_strategy = p7_EFFN_NONE; else if (esl_opt_IsOn (go, "--eset")) { bld->effn_strategy = p7_EFFN_SET; bld->eset = esl_opt_GetReal(go, "--eset"); } seed = esl_opt_GetInteger(go, "--seed"); } bld->max_insert_len = 0; /* The default RE target is alphabet dependent. */ if (go != NULL && esl_opt_IsOn (go, "--ere")) bld->re_target = esl_opt_GetReal(go, "--ere"); else { switch (abc->type) { case eslAMINO: bld->re_target = p7_ETARGET_AMINO; break; case eslDNA: bld->re_target = p7_ETARGET_DNA; break; case eslRNA: bld->re_target = p7_ETARGET_DNA; break; default: bld->re_target = p7_ETARGET_OTHER; break; } } bld->symfrac = (go != NULL) ? esl_opt_GetReal (go, "--symfrac") : 0.5; bld->fragthresh = (go != NULL) ? esl_opt_GetReal (go, "--fragthresh") : 0.5; bld->wid = (go != NULL) ? esl_opt_GetReal (go, "--wid") : 0.62; bld->esigma = (go != NULL) ? esl_opt_GetReal (go, "--esigma") : 45.0; bld->eid = (go != NULL) ? esl_opt_GetReal (go, "--eid") : 0.62; bld->EmL = (go != NULL) ? esl_opt_GetInteger(go, "--EmL") : 200; bld->EmN = (go != NULL) ? esl_opt_GetInteger(go, "--EmN") : 200; bld->EvL = (go != NULL) ? esl_opt_GetInteger(go, "--EvL") : 200; bld->EvN = (go != NULL) ? esl_opt_GetInteger(go, "--EvN") : 200; bld->EfL = (go != NULL) ? esl_opt_GetInteger(go, "--EfL") : 100; bld->EfN = (go != NULL) ? esl_opt_GetInteger(go, "--EfN") : 200; bld->Eft = (go != NULL) ? esl_opt_GetReal (go, "--Eft") : 0.04; /* Normally we reinitialize the RNG to original seed before calibrating each model. * This eliminates run-to-run variation. * As a special case, seed==0 means choose an arbitrary seed and shut off the * reinitialization; this allows run-to-run variation. */ bld->r = esl_randomness_CreateFast(seed); bld->do_reseeding = (seed == 0) ? FALSE : TRUE; if (go && esl_opt_GetBoolean(go, "--pnone") ) bld->prior = NULL; else if (go && esl_opt_GetBoolean(go, "--plaplace") ) bld->prior = p7_prior_CreateLaplace(abc); else { switch (abc->type) { case eslAMINO: bld->prior = p7_prior_CreateAmino(); break; case eslDNA: bld->prior = p7_prior_CreateNucleic(); break; case eslRNA: bld->prior = p7_prior_CreateNucleic(); break; default: bld->prior = p7_prior_CreateLaplace(abc); break; } if (bld->prior == NULL) goto ERROR; } bld->abc = abc; bld->errbuf[0] = '\0'; bld->popen = -1; bld->pextend = -1; return bld; ERROR: p7_builder_Destroy(bld); return NULL; } /* Function: p7_builder_LoadScoreSystem() * Synopsis: Load a standard score system for single sequence queries. * * Purpose: Initialize the builder to be able to parameterize * single sequence queries, using the standard (built-in) score * matrix named . * * Available score matrices include PAM30, 70, 120, and 240; * and BLOSUM45, 50, 62, 80, and 90. See . * * Set the gap-open and gap-extend probabilities to * , , respectively. * * Use background residue frequencies in the null model * to convert substitution matrix scores to * conditional probability parameters. * * Args: bld - to initialize * matrix - score matrix file to use * popen - gap open probability * pextend - gap extend probability * bg - null model, containing background frequencies * * Returns: on success. * * if can't be found or opened, even * in any of the directories specified by the variable. * * if the score matrix can't be converted into * conditional probabilities; for example, if it has no valid * solution for . * * On either error, errbuf> contains a useful error message * for the user. * * Throws: on allocation failure. */ int p7_builder_LoadScoreSystem(P7_BUILDER *bld, const char *matrix, double popen, double pextend, P7_BG *bg) { double *f = NULL; double slambda; int status; bld->errbuf[0] = '\0'; /* If a score system is already set, delete it. */ if (bld->S != NULL) esl_scorematrix_Destroy(bld->S); if (bld->Q != NULL) esl_dmatrix_Destroy(bld->Q); /* Get the scoring matrix */ if ((bld->S = esl_scorematrix_Create(bld->abc)) == NULL) { status = eslEMEM; goto ERROR; } status = esl_scorematrix_Set(matrix, bld->S); if (status == eslENOTFOUND) ESL_XFAIL(status, bld->errbuf, "no matrix named %s is available as a built-in", matrix); else if (status != eslOK) ESL_XFAIL(status, bld->errbuf, "failed to set score matrix %s as a built-in", matrix); /* A wasteful conversion of the HMMER single-precision background probs to Easel double-prec */ ESL_ALLOC(f, sizeof(double) * bg->abc->K); esl_vec_F2D(bg->f, bg->abc->K, f); /* Backcalculate joint probability matrix Q, given scores S and background freqs bg->f. */ /* Failures shouldn't happen here: these are standard matrices. */ status = esl_scorematrix_ProbifyGivenBG(bld->S, f, f, &slambda, &(bld->Q)); if (status == eslEINVAL) ESL_XFAIL(eslEINVAL, bld->errbuf, "built-in score matrix %s has no valid solution for lambda", matrix); else if (status == eslENOHALT) ESL_XFAIL(eslEINVAL, bld->errbuf, "failed to solve score matrix %s for lambda", matrix); else if (status != eslOK) ESL_XFAIL(eslEINVAL, bld->errbuf, "unexpected error in solving score matrix %s for probability parameters", matrix); /* Convert joint probabilities P(ab) to conditionals P(b|a) */ esl_scorematrix_JointToConditionalOnQuery(bld->abc, bld->Q); bld->popen = popen; bld->pextend = pextend; free(f); return eslOK; ERROR: if (f) free(f); return status; } /* Function: p7_builder_SetScoreSystem() * Synopsis: Initialize score system for single sequence queries. * * Purpose: Initialize the builder to be able to parameterize * single sequence queries, using a substitution matrix * from a file. * * Read a standard substitution score matrix from file * . If is , default to BLOSUM62 * scores. If is "-", read score matrix from * stream. If is non- and is * not found in the current working directory, look for * in colon-delimited directory list contained in * environment variable . * * Set the gap-open and gap-extend probabilities to * , , respectively. * * Use background residue frequencies in the null model * to convert substitution matrix scores to * conditional probability parameters. * * Args: bld - to initialize * mxfile - score matrix file to use, or NULL for BLOSUM62 default * env - env variable containing directory list where may reside * popen - gap open probability * pextend - gap extend probability * bg - null model, containing background frequencies * * Returns: on success. * * if can't be found or opened, even * in any of the directories specified by the variable. * * if the score matrix can't be converted into * conditional probabilities; for example, if it has no valid * solution for . * * On either error, errbuf> contains a useful error message * for the user. * * Throws: on allocation failure. */ int p7_builder_SetScoreSystem(P7_BUILDER *bld, const char *mxfile, const char *env, double popen, double pextend, P7_BG *bg) { ESL_FILEPARSER *efp = NULL; double *f = NULL; double slambda; int status; bld->errbuf[0] = '\0'; /* If a score system is already set, delete it. */ if (bld->S != NULL) esl_scorematrix_Destroy(bld->S); if (bld->Q != NULL) esl_dmatrix_Destroy(bld->Q); /* Get the scoring matrix */ if ((bld->S = esl_scorematrix_Create(bld->abc)) == NULL) { status = eslEMEM; goto ERROR; } if (mxfile == NULL) { if (bld->abc->type == eslAMINO) { if ((status = esl_scorematrix_Set("BLOSUM62", bld->S)) != eslOK) goto ERROR; } else { if ((status = esl_scorematrix_Set("DNA1", bld->S)) != eslOK) goto ERROR; } } else { if ((status = esl_fileparser_Open(mxfile, env, &efp)) != eslOK) ESL_XFAIL(status, bld->errbuf, "Failed to find or open matrix file %s", mxfile); if ((status = esl_scorematrix_Read(efp, bld->abc, &(bld->S))) != eslOK) ESL_XFAIL(status, bld->errbuf, "Failed to read matrix from %s:\n%s", mxfile, efp->errbuf); esl_fileparser_Close(efp); efp = NULL; } /* A wasteful conversion of the HMMER single-precision background probs to Easel double-prec */ ESL_ALLOC(f, sizeof(double) * bg->abc->K); esl_vec_F2D(bg->f, bg->abc->K, f); /* Backcalculate joint probability matrix Q, given scores S and background freqs bg->f. */ status = esl_scorematrix_ProbifyGivenBG(bld->S, f, f, &slambda, &(bld->Q)); if (status == eslEINVAL) ESL_XFAIL(eslEINVAL, bld->errbuf, "input score matrix %s has no valid solution for lambda", mxfile); else if (status == eslENOHALT) ESL_XFAIL(eslEINVAL, bld->errbuf, "failed to solve input score matrix %s for lambda: are you sure it's valid?", mxfile); else if (status != eslOK) ESL_XFAIL(eslEINVAL, bld->errbuf, "unexpected error in solving input score matrix %s for probability parameters", mxfile); /* Convert joint probabilities P(ab) to conditionals P(b|a) */ esl_scorematrix_JointToConditionalOnQuery(bld->abc, bld->Q); bld->popen = popen; bld->pextend = pextend; free(f); return eslOK; ERROR: if (efp) esl_fileparser_Close(efp); if (f) free(f); return status; } /* Function: p7_builder_Destroy() * Synopsis: Free a * * Purpose: Frees a object. */ void p7_builder_Destroy(P7_BUILDER *bld) { if (bld == NULL) return; if (bld->prior != NULL) p7_prior_Destroy(bld->prior); if (bld->r != NULL) esl_randomness_Destroy(bld->r); if (bld->Q != NULL) esl_dmatrix_Destroy(bld->Q); if (bld->S != NULL) esl_scorematrix_Destroy(bld->S); free(bld); return; } /*------------------- end, P7_BUILDER ---------------------------*/ /***************************************************************** * 2. Standardized model construction API. *****************************************************************/ static int validate_msa (P7_BUILDER *bld, ESL_MSA *msa); static int relative_weights (P7_BUILDER *bld, ESL_MSA *msa); static int build_model (P7_BUILDER *bld, ESL_MSA *msa, P7_HMM **ret_hmm, P7_TRACE ***opt_tr); static int effective_seqnumber (P7_BUILDER *bld, const ESL_MSA *msa, P7_HMM *hmm, const P7_BG *bg); static int parameterize (P7_BUILDER *bld, P7_HMM *hmm); static int annotate (P7_BUILDER *bld, const ESL_MSA *msa, P7_HMM *hmm); static int calibrate (P7_BUILDER *bld, P7_HMM *hmm, P7_BG *bg, P7_PROFILE **opt_gm, P7_OPROFILE **opt_om); static int make_post_msa (P7_BUILDER *bld, const ESL_MSA *premsa, const P7_HMM *hmm, P7_TRACE **tr, ESL_MSA **opt_postmsa); /* Function: p7_Builder() * Synopsis: Build a new HMM from an MSA. * * Purpose: Take the multiple sequence alignment and a build configuration , * and build a new HMM. * * Effective sequence number determination and calibration steps require * additionally providing a null model . * * Args: bld - build configuration * msa - multiple sequence alignment * bg - null model * opt_hmm - optRETURN: new HMM * opt_trarr - optRETURN: array of faux tracebacks, <0..nseq-1> * opt_gm - optRETURN: profile corresponding to * opt_om - optRETURN: optimized profile corresponding to * opt_postmsa - optRETURN: RF-annotated, possibly modified MSA * * Returns: on success. The new HMM is optionally returned in * <*opt_hmm>, along with optional returns of an array of faux tracebacks * for each sequence in <*opt_trarr>, the annotated MSA used to construct * the model in <*opt_postmsa>, a configured search profile in * <*opt_gm>, and an optimized search profile in <*opt_om>. These are * all optional returns because the caller may, for example, be interested * only in an optimized profile, or may only be interested in the HMM. * * Returns if no consensus columns were annotated. * Returns on MSA format problems, such as a missing RF annotation * line in hand architecture construction. On any returned error, * errbuf> contains an informative error message. * * Throws: on allocation error. * if relative weights couldn't be calculated from . * * Xref: J4/30. */ int p7_Builder(P7_BUILDER *bld, ESL_MSA *msa, P7_BG *bg, P7_HMM **opt_hmm, P7_TRACE ***opt_trarr, P7_PROFILE **opt_gm, P7_OPROFILE **opt_om, ESL_MSA **opt_postmsa) { int i,j; uint32_t checksum = 0; /* checksum calculated for the input MSA. hmmalign --mapali verifies against this. */ P7_HMM *hmm = NULL; P7_TRACE **tr = NULL; P7_TRACE ***tr_ptr = (opt_trarr != NULL || opt_postmsa != NULL) ? &tr : NULL; int status; if ((status = validate_msa (bld, msa)) != eslOK) goto ERROR; if ((status = esl_msa_Checksum (msa, &checksum)) != eslOK) ESL_XFAIL(status, bld->errbuf, "Failed to calculate checksum"); if ((status = relative_weights (bld, msa)) != eslOK) goto ERROR; if ((status = esl_msa_MarkFragments(msa, bld->fragthresh)) != eslOK) goto ERROR; if ((status = build_model (bld, msa, &hmm, tr_ptr)) != eslOK) goto ERROR; //Ensures that the weighted-average I->I count <= bld->max_insert_len //(MI currently contains the number of observed insert-starts) if (bld->max_insert_len>0) for (i=1; iM; i++ ) hmm->t[i][p7H_II] = ESL_MIN(hmm->t[i][p7H_II], bld->max_insert_len*hmm->t[i][p7H_MI]); if ((status = effective_seqnumber (bld, msa, hmm, bg)) != eslOK) goto ERROR; if ((status = parameterize (bld, hmm)) != eslOK) goto ERROR; if ((status = annotate (bld, msa, hmm)) != eslOK) goto ERROR; if ((status = calibrate (bld, hmm, bg, opt_gm, opt_om)) != eslOK) goto ERROR; if ((status = make_post_msa (bld, msa, hmm, tr, opt_postmsa)) != eslOK) goto ERROR; //force masked positions to background (it'll be close already, so no relevant impact on weighting) if (hmm->mm != NULL) for (i=1; iM; i++ ) if (hmm->mm[i] == 'm') for (j=0; jabc->K; j++) hmm->mat[i][j] = bg->f[j]; if ( bld->abc->type == eslDNA || bld->abc->type == eslRNA ) { if (bld->w_len > 0) hmm->max_length = bld->w_len; else if (bld->w_beta == 0.0) hmm->max_length = hmm->M *4; else if ( (status = p7_Builder_MaxLength(hmm, bld->w_beta)) != eslOK) goto ERROR; } hmm->checksum = checksum; hmm->flags |= p7H_CHKSUM; if (opt_hmm != NULL) *opt_hmm = hmm; else p7_hmm_Destroy(hmm); if (opt_trarr != NULL) *opt_trarr = tr; else p7_trace_DestroyArray(tr, msa->nseq); return eslOK; ERROR: p7_hmm_Destroy(hmm); p7_trace_DestroyArray(tr, msa->nseq); if (opt_gm != NULL) p7_profile_Destroy(*opt_gm); if (opt_om != NULL) p7_oprofile_Destroy(*opt_om); return status; } /* Function: p7_SingleBuilder() * Synopsis: Build a new HMM from a single sequence. * * Purpose: Take the sequence and a build configuration , and * build a new HMM. * * The single sequence scoring system in the * configuration must have been previously initialized by * . * * Args: bld - build configuration * sq - query sequence * bg - null model (needed to paramaterize insert emission probs) * opt_hmm - optRETURN: new HMM * opt_gm - optRETURN: profile corresponding to * opt_om - optRETURN: optimized profile corresponding to * * Returns: on success. * * Throws: on allocation error. * if isn't properly configured somehow. */ int p7_SingleBuilder(P7_BUILDER *bld, ESL_SQ *sq, P7_BG *bg, P7_HMM **opt_hmm, P7_TRACE **opt_tr, P7_PROFILE **opt_gm, P7_OPROFILE **opt_om) { P7_HMM *hmm = NULL; P7_TRACE *tr = NULL; int k; int status; bld->errbuf[0] = '\0'; if (! bld->Q) ESL_XEXCEPTION(eslEINVAL, "score system not initialized"); if ((status = p7_Seqmodel(bld->abc, sq->dsq, sq->n, sq->name, bld->Q, bg->f, bld->popen, bld->pextend, &hmm)) != eslOK) goto ERROR; if ((status = p7_hmm_SetComposition(hmm)) != eslOK) goto ERROR; if ((status = p7_hmm_SetConsensus(hmm, sq)) != eslOK) goto ERROR; if ((status = calibrate(bld, hmm, bg, opt_gm, opt_om)) != eslOK) goto ERROR; if ( bld->abc->type == eslDNA || bld->abc->type == eslRNA ) { if (bld->w_len > 0) hmm->max_length = bld->w_len; else if (bld->w_beta == 0.0) hmm->max_length = hmm->M *4; else if ( (status = p7_Builder_MaxLength(hmm, bld->w_beta)) != eslOK) goto ERROR; } /* build a faux trace: relative to core model (B->M_1..M_L->E) */ if (opt_tr != NULL) { if ((tr = p7_trace_Create()) == NULL) goto ERROR; if ((status = p7_trace_Append(tr, p7T_B, 0, 0)) != eslOK) goto ERROR; for (k = 1; k <= sq->n; k++) if ((status = p7_trace_Append(tr, p7T_M, k, k)) != eslOK) goto ERROR; if ((status = p7_trace_Append(tr, p7T_E, 0, 0)) != eslOK) goto ERROR; tr->M = sq->n; tr->L = sq->n; } /* note that and were already set by calibrate() call above. */ if (opt_hmm != NULL) *opt_hmm = hmm; else p7_hmm_Destroy(hmm); if (opt_tr != NULL) *opt_tr = tr; return eslOK; ERROR: p7_hmm_Destroy(hmm); if (tr != NULL) p7_trace_Destroy(tr); if (opt_gm != NULL) p7_profile_Destroy(*opt_gm); if (opt_om != NULL) p7_oprofile_Destroy(*opt_om); return status; } /* Function: p7_Builder_MaxLength() * * Purpose: Compute the maximum likely length of an emitted sequence * * Synopsis: Computes a fairly tight upper bound on domain length, by computing the * probability of the model emitting sequences of all lengths up to some * threshold, based on a dynamic-programming approach. See TJW 01/14/2010 notes (p1) * * The idea is to find the length such that all but e.g. 1e-7 sequences emitted * by the model are at most that long. The method conceptually fills in a table of * length at most length_bound (usually 20 * model_length, up to at most 100,000), * though in practice, only two columns are used to store values; * * Letting i correspond to the ith state of the model, * j to a length j of emitted sequence, and * T[i][P7H_*M] := transition prob from *_i to M_{i+1} * T[i][P7H_*I] := transition prob from *_i to I_i * T[i][P7H_*D] := transition prob from *_i to D_{i+1} * * * in general, * M(i,j) = T[i-1][P7H_MM] * M(i-1,j-1) + T[i-1][P7H_DM] * D(i-1,j-1) + T[i-1][P7H_IM] * I(i-1,j-1); * I(i,j) = T[i][P7H_MI] * M(i,j-1) + T[i][P7H_II] * I(i,j-1); * D(i,j) = T[i-1][P7H_MD] * M(i-1,j) + T[i-1][P7H_DD] * D(i-1,j); * * The process of filling in the dp table is done for only the full core model. * We want to minimize memory consumption, so this is handled column-by-column, * storing only 2 columns at a time. * * Initial values must be set. * This is simple: * M(1,1) = 1; * I(1,1) = 0; * D(1,1) = 0; * D(2,1) = md; * Fill in the remainder of rows * M(r,1) = I(r,1) = 0; * D(r,1) = dd * D(r-1,1) * * * Then the next column: * M(1,2) = D(1,2) = 0; * I(1,2) = mi * M(1,1); * I(2,2) = D(2,2) = 0; * M(2,2) = mm * M(1,1); * D(3,2) = md * M(2,2); * Fill in the remainder of rows r: * M(r,2) = dm * M(r-1,1); * D(r,2) = dd * D(r-1,2); * I(r,2) = 0; * * * * Then for each column c after that, * M(1,c) = D(1,c) = 0; * I(1,c) = ii * I(1,c-1) * Fill in the remainder of rows r based on the default formulas above * Then: * M(i,j) = T[i-1][P7H_MM] * M(i-1,j-1) + T[i-1][P7H_DM] * D(i-1,j-1) + T[i-1][P7H_IM] * I(i-1,j-1); * D(i,j) = T[i-1][P7H_MD] * M(i-1,j) + T[i-1][P7H_DD] * D(i-1,j); * I(i,j) = T[i][P7H_MI] * M(i,j-1) + T[i][P7H_II] * I(i,j-1); * * * We aim to find the length W s.t. nearly all (e.g. all but 1e-7) of the sequences * emitted by the model are at most W long. Ideally, we could track the probability * of emitting each length from 0 up, and accumulate those probabilities until the * threshold is met. The probability of seeing a sequence of a given length emitted * by the full model is simply the sum of the D[m] and M[m] values (for a model of * length m). (I[m] is a false value - see below) * * I say "ideally", because numeric instability can lead the sum of all lengths - up * to infinity - to be <0.99999 or >1.0 ... so instead we keep track of two things for * each length L: * (1) the sum of D[m] and M[m] prob masses for all lengths up to L (call this X), and * (2) the amount of the probability mass that belongs to all L-length-emitting states * except the final M/D states. That's the mass that will end up being spread across * all lengths >L (call this Y). * * If not for numeric instability, X+Y=1, and we'd want to stop when Y <= 1e-7. Because * X+Y might not == 1, instead stop when Y/(X+Y) <= 1e-7. * * A note for computing X: the final position in the model does not actually include an * I-state, so all of the final M state's probability mass should go to the E state. * The value in I[m][] will suggest that some of that probability has gone to that state, * but this will be ignored when tallying X = M[m]+D[m]. * * A note on the calculation of Y: it's not quite as simple as adding up all pre-m * states. For a given length j, the only way a D[i]-state can emit a sequence of length * j is if an M[k] state emitted that sequence, with k on success. The max length is set in hmm->max_length. */ int p7_Builder_MaxLength (P7_HMM *hmm, double emit_thresh) { int col_ptr, prev_col_ptr; // which true column in above 2d-arrays is active int col; // which conceptual column in above 2d-arrays is active (up to table_len) double p_sum; // sum of probabilities for lengths <=L; X from above double surv; // surviving probability mass at length L; Y from above int k; // active state in model int i; double **I = NULL; double **M = NULL; double **D = NULL; int model_len = hmm->M; // model length int length_bound = ESL_MAX(model_len, ESL_MIN(20*model_len, 100000)); // cap on # iterations (aka max model length) int status; if (model_len==1) { hmm->max_length = 1; return eslOK; } hmm->max_length = length_bound; //default, if it never reaches the target surviving density // double I[model_len+1][2], M[model_len+1][2], D[model_len+1][2]; //2 columns for each way of ending a subpath ESL_ALLOC(I, (model_len+1) * sizeof(double*)); ESL_ALLOC(M, (model_len+1) * sizeof(double*)); ESL_ALLOC(D, (model_len+1) * sizeof(double*)); for (i = 0; i <= model_len; i++) { I[i] = M[i] = D[i] = NULL; } for (i=0; i <= model_len; i++) { ESL_ALLOC(I[i], 2 * sizeof(double)); ESL_ALLOC(M[i], 2 * sizeof(double)); ESL_ALLOC(D[i], 2 * sizeof(double)); } /* Compute max length and max prefix lengths*/ // special case for filling in 1st column of DP table, col=1; M[1][0] = 1.0;// 1st match state must emit a character I[1][0] = D[1][0] = M[2][0] = I[2][0] = 0; D[2][0] = hmm->t[1][p7H_MD]; // The 2nd delete state is reached, having emitted only 1 character for (k=3; k<=model_len; k++){ M[k][0] = I[k][0] = 0; D[k][0] = hmm->t[k-1][p7H_DD] * D[k-1][0]; // only way to get to the 3rd or greater state with only 1 character } //special case for 2nd column M[1][1] = D[1][1] = D[2][1] = I[2][1] = 0; //No way any of these states can be responsible for the second emitted character. I[1][1] = hmm->t[1][p7H_MI] * M[1][0]; //1st insert state can emit char #2. M[2][1] = hmm->t[1][p7H_MM] * M[1][0] ; //2nd match state can emit char #2. for (k=3; k<=model_len; k++){ M[k][1] = hmm->t[k-1][p7H_DM] * D[k-1][0] ; //kth match state would have to follow the k-1th delete state, having emitted only 1 char so far I[k][1] = 0; D[k][1] = hmm->t[k-1][p7H_MD] * M[k-1][1] + hmm->t[k-1][p7H_DD] * D[k-1][1]; //in general only by extending a delete. For k=3, this could be a transition from M=2, with 2 chars. } p_sum = M[model_len][0] + M[model_len][1] + D[model_len][0] + D[model_len][1]; //general case for all remaining columns col_ptr = 0; for (col=3; col<=length_bound; col++) { prev_col_ptr = 1-col_ptr; surv = 0.0; M[1][col_ptr] = D[1][col_ptr] = 0; //M[i][prev_col_ptr] is zero : no way the first M state could have emitted >=2 chars I[1][col_ptr] = hmm->t[1][p7H_II] * I[1][prev_col_ptr]; // 1st insert state can emit chars indefinitely surv += I[1][col_ptr]; for (k=2; k<=model_len; k++){ M[k][col_ptr] = hmm->t[k-1][p7H_MM] * M[k-1][prev_col_ptr] + hmm->t[k-1][p7H_DM] * D[k-1][prev_col_ptr] + hmm->t[k-1][p7H_IM] * I[k-1][prev_col_ptr]; I[k][col_ptr] = hmm->t[k][p7H_MI] * M[k][prev_col_ptr] + hmm->t[k][p7H_II] * I[k][prev_col_ptr]; D[k][col_ptr] = hmm->t[k-1][p7H_MD] * M[k-1][col_ptr] + hmm->t[k-1][p7H_DD] * D[k-1][col_ptr]; if (k<=model_len) { surv += I[k][col_ptr] + M[k][col_ptr] * ( 1 - hmm->t[k][p7H_MD] ) + //this much of M[k]'s mass will bleed into D[k+1], and thus be added to surv then D[k][col_ptr] * ( 1 - hmm->t[k][p7H_DD] ) ; //this much of D[k]'s mass will bleed into D[k+1], and thus be added to surv then } } surv += M[model_len][col_ptr] * ( hmm->t[model_len][p7H_MD] ) //the final state doesn't pass on to the next D state + D[model_len][col_ptr] * ( hmm->t[model_len][p7H_DD] ) // the final state doesn't pass on to the next D state - I[model_len][col_ptr] ; // no I state for final position p_sum += M[model_len][col_ptr] + D[model_len][col_ptr]; surv /= surv + p_sum; if (surv < emit_thresh) { hmm->max_length = col; break; } col_ptr = 1-col_ptr; // alternating between 0 and 1 } for (i=0; imax_length > length_bound) return eslERANGE; return eslOK; ERROR: if (I) { for (i = 0; i <= model_len; i++) { if (I[i]) free(I[i]); } free(I); } if (D) { for (i = 0; i <= model_len; i++) { if (D[i]) free(D[i]); } free(D); } if (M) { for (i = 0; i <= model_len; i++) { if (M[i]) free(M[i]); } free(M); } return status; } /*------------- end, model construction API ---------------------*/ /***************************************************************** * 3. Internal functions *****************************************************************/ /* validate_msa: * SRE, Thu Dec 3 16:10:31 2009 [J5/119; bug #h70 fix] * * HMMER uses a convention for missing data characters: they * indicate that a sequence is a fragment. (See * esl_msa_MarkFragments()). * * Because of the way these fragments will be handled in tracebacks, * we reject any alignment that uses missing data characters in any * other way. * * This validation step costs negligible time. */ static int validate_msa(P7_BUILDER *bld, ESL_MSA *msa) { int idx; int64_t apos; for (idx = 0; idx < msa->nseq; idx++) { apos = 1; while ( esl_abc_XIsMissing(msa->abc, msa->ax[idx][apos]) && apos <= msa->alen) apos++; while (! esl_abc_XIsMissing(msa->abc, msa->ax[idx][apos]) && apos <= msa->alen) apos++; while ( esl_abc_XIsMissing(msa->abc, msa->ax[idx][apos]) && apos <= msa->alen) apos++; if (apos != msa->alen+1) ESL_FAIL(eslEINVAL, bld->errbuf, "msa %s; sequence %s\nhas missing data chars (~) other than at fragment edges", msa->name, msa->sqname[idx]); } return eslOK; } /* set_relative_weights(): * Set msa->wgt vector, using user's choice of relative weighting algorithm. */ static int relative_weights(P7_BUILDER *bld, ESL_MSA *msa) { int status = eslOK; if (bld->wgt_strategy == p7_WGT_NONE) { esl_vec_DSet(msa->wgt, msa->nseq, 1.); } else if (bld->wgt_strategy == p7_WGT_GIVEN) ; else if (bld->wgt_strategy == p7_WGT_PB) status = esl_msaweight_PB(msa); else if (bld->wgt_strategy == p7_WGT_GSC) status = esl_msaweight_GSC(msa); else if (bld->wgt_strategy == p7_WGT_BLOSUM) status = esl_msaweight_BLOSUM(msa, bld->wid); else ESL_EXCEPTION(eslEINCONCEIVABLE, "no such weighting strategy"); if (status != eslOK) ESL_FAIL(status, bld->errbuf, "failed to set relative weights in alignment"); return eslOK; } /* build_model(): * Given , choose HMM architecture, collect counts; * upon return, <*ret_hmm> is newly allocated and contains * relative-weighted observed counts. * Optionally, caller can request an array of inferred traces for * the too. */ static int build_model(P7_BUILDER *bld, ESL_MSA *msa, P7_HMM **ret_hmm, P7_TRACE ***opt_tr) { int status; if (bld->arch_strategy == p7_ARCH_FAST) { status = p7_Fastmodelmaker( msa, bld->symfrac, bld, ret_hmm, opt_tr); if (status == eslENORESULT) ESL_XFAIL(status, bld->errbuf, "Alignment %s has no consensus columns w/ > %d%% residues - can't build a model.\n", msa->name != NULL ? msa->name : "", (int) (100 * bld->symfrac)); else if (status == eslEMEM) ESL_XFAIL(status, bld->errbuf, "Memory allocation failure in model construction.\n"); else if (status != eslOK) ESL_XFAIL(status, bld->errbuf, "internal error in model construction.\n"); } else if (bld->arch_strategy == p7_ARCH_HAND) { status = p7_Handmodelmaker( msa, bld, ret_hmm, opt_tr); if (status == eslENORESULT) ESL_XFAIL(status, bld->errbuf, "Alignment %s has no annotated consensus columns - can't build a model.\n", msa->name != NULL ? msa->name : ""); else if (status == eslEFORMAT) ESL_XFAIL(status, bld->errbuf, "Alignment %s has no reference annotation line\n", msa->name != NULL ? msa->name : ""); else if (status == eslEMEM) ESL_XFAIL(status, bld->errbuf, "Memory allocation failure in model construction.\n"); else if (status != eslOK) ESL_XFAIL(status, bld->errbuf, "internal error in model construction.\n"); } return eslOK; ERROR: return status; } /* set_effective_seqnumber() * * comes in with weighted observed counts. It goes out with * those observed counts rescaled to sum to the "effective sequence * number". * * is needed because we may need to see the sequences in order * to determine effective seq #. (for --eclust) * * is needed because we may need to parameterize test models * looking for the right relative entropy. (for --eent, the default) */ static int effective_seqnumber(P7_BUILDER *bld, const ESL_MSA *msa, P7_HMM *hmm, const P7_BG *bg) { int status; if (bld->effn_strategy == p7_EFFN_NONE) hmm->eff_nseq = msa->nseq; else if (bld->effn_strategy == p7_EFFN_SET) hmm->eff_nseq = bld->eset; else if (bld->effn_strategy == p7_EFFN_CLUST) { int nclust; status = esl_msacluster_SingleLinkage(msa, bld->eid, NULL, NULL, &nclust); if (status == eslEMEM) ESL_XFAIL(status, bld->errbuf, "memory allocation failed"); else if (status != eslOK) ESL_XFAIL(status, bld->errbuf, "single linkage clustering algorithm (at %d%% id) failed", (int)(100 * bld->eid)); hmm->eff_nseq = (double) nclust; } else if (bld->effn_strategy == p7_EFFN_ENTROPY) { double etarget; double eff_nseq; etarget = (bld->esigma - eslCONST_LOG2R * log( 2.0 / ((double) hmm->M * (double) (hmm->M+1)))) / (double) hmm->M; /* xref J5/36. */ etarget = ESL_MAX(bld->re_target, etarget); status = p7_EntropyWeight(hmm, bg, bld->prior, etarget, &eff_nseq); if (status == eslEMEM) ESL_XFAIL(status, bld->errbuf, "memory allocation failed"); else if (status != eslOK) ESL_XFAIL(status, bld->errbuf, "internal failure in entropy weighting algorithm"); hmm->eff_nseq = eff_nseq; } p7_hmm_Scale(hmm, hmm->eff_nseq / (double) hmm->nseq); return eslOK; ERROR: return status; } /* parameterize() * Converts counts to probability parameters. */ static int parameterize(P7_BUILDER *bld, P7_HMM *hmm) { int status; if ((status = p7_ParameterEstimation(hmm, bld->prior)) != eslOK) ESL_XFAIL(status, bld->errbuf, "parameter estimation failed"); return eslOK; ERROR: return status; } /* annotate() * Transfer annotation information from MSA to new HMM. * Also sets model-specific residue composition (hmm->compo). */ static int annotate(P7_BUILDER *bld, const ESL_MSA *msa, P7_HMM *hmm) { int status; /* Name. */ if (msa->name) p7_hmm_SetName(hmm, msa->name); else ESL_XFAIL(eslEINVAL, bld->errbuf, "Unable to name the HMM."); if ((status = p7_hmm_SetAccession (hmm, msa->acc)) != eslOK) ESL_XFAIL(status, bld->errbuf, "Failed to record MSA accession"); if ((status = p7_hmm_SetDescription(hmm, msa->desc)) != eslOK) ESL_XFAIL(status, bld->errbuf, "Failed to record MSA description"); // if ((status = p7_hmm_AppendComlog(hmm, go->argc, go->argv)) != eslOK) ESL_XFAIL(status, errbuf, "Failed to record command log"); if ((status = p7_hmm_SetCtime(hmm)) != eslOK) ESL_XFAIL(status, bld->errbuf, "Failed to record timestamp"); if ((status = p7_hmm_SetComposition(hmm)) != eslOK) ESL_XFAIL(status, bld->errbuf, "Failed to determine model composition"); if ((status = p7_hmm_SetConsensus(hmm, NULL)) != eslOK) ESL_XFAIL(status, bld->errbuf, "Failed to set consensus line"); if (msa->cutset[eslMSA_GA1] && msa->cutset[eslMSA_GA2]) { hmm->cutoff[p7_GA1] = msa->cutoff[eslMSA_GA1]; hmm->cutoff[p7_GA2] = msa->cutoff[eslMSA_GA2]; hmm->flags |= p7H_GA; } if (msa->cutset[eslMSA_TC1] && msa->cutset[eslMSA_TC2]) { hmm->cutoff[p7_TC1] = msa->cutoff[eslMSA_TC1]; hmm->cutoff[p7_TC2] = msa->cutoff[eslMSA_TC2]; hmm->flags |= p7H_TC; } if (msa->cutset[eslMSA_NC1] && msa->cutset[eslMSA_NC2]) { hmm->cutoff[p7_NC1] = msa->cutoff[eslMSA_NC1]; hmm->cutoff[p7_NC2] = msa->cutoff[eslMSA_NC2]; hmm->flags |= p7H_NC; } return eslOK; ERROR: return status; } /* calibrate() * * Sets the E value parameters of the model with two short simulations. * A profile and an oprofile are created here. If caller wants to keep either * of them, it can pass non- , pointers. */ static int calibrate(P7_BUILDER *bld, P7_HMM *hmm, P7_BG *bg, P7_PROFILE **opt_gm, P7_OPROFILE **opt_om) { int status; if (opt_gm != NULL) *opt_gm = NULL; if (opt_om != NULL) *opt_om = NULL; if ((status = p7_Calibrate(hmm, bld, &(bld->r), &bg, opt_gm, opt_om)) != eslOK) goto ERROR; return eslOK; ERROR: return status; } /* make_post_msa() * * Optionally, we can return the alignment we actually built the model * from (including RF annotation on assigned consensus columns, and any * trace doctoring to enforce Plan7 consistency). */ static int make_post_msa(P7_BUILDER *bld, const ESL_MSA *premsa, const P7_HMM *hmm, P7_TRACE **tr, ESL_MSA **opt_postmsa) { ESL_MSA *postmsa = NULL; int optflags = p7_DEFAULT; int status; if (opt_postmsa == NULL) return eslOK; /* someday we might want to transfer more info from HMM to postmsa */ if ((status = p7_tracealign_MSA(premsa, tr, hmm->M, optflags, &postmsa)) != eslOK) goto ERROR; *opt_postmsa = postmsa; return eslOK; ERROR: if (postmsa != NULL) esl_msa_Destroy(postmsa); return status; } /*---------------- end, internal functions ----------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: p7_builder.c 4658 2014-05-02 22:05:51Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/p7_builder.c $ *****************************************************************/ hmmer-3.1b2/src/generic_viterbi.c0000664361611702660230000006755712473612613016407 0ustar wheelerteddy/* Viterbi algorithm; generic (non-SIMD) version. * * This implementation is modified from an optimized implementation * contributed by Jeremy D. Buhler (Washington University in * St. Louis). * * Relative to the implementation in HMMER2, Jeremy rearranged data * structures to reduce the number of registers needed in the inner * loop; eliminated branches from the inner loop by unrolling the Mth * iteration in Viterbi and by replacing a bunch of "if" tests with * MAX; and exposed opportunities for hoisting and strength reduction * to the compiler. (The preceding sentence is nearly verbatim from * Jeremy's notes.) I then uplifted the JB code to H3, most notably * involving conversion from H2's scaled integers to H3's floating * point calculations. * * Contents: * 1. Viterbi implementation. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_gumbel.h" #include "hmmer.h" /***************************************************************** * 1. Viterbi implementation. *****************************************************************/ /* Function: p7_GViterbi() * Synopsis: The Viterbi algorithm. * Incept: SRE, Tue Jan 30 10:50:53 2007 [Einstein's, St. Louis] * * Purpose: The standard Viterbi dynamic programming algorithm. * * Given a digital sequence of length , a profile * , and DP matrix allocated for at least * by M> cells; calculate the maximum scoring path by * Viterbi; return the Viterbi score in , and the * Viterbi matrix is in . * * The caller may then retrieve the Viterbi path by calling * . * * The Viterbi lod score is returned in nats. The caller * needs to subtract a null model lod score, then convert * to bits. * * Args: dsq - sequence in digitized form, 1..L * L - length of dsq * gm - profile. * gx - DP matrix with room for an MxL alignment * opt_sc - optRETURN: Viterbi lod score in nats * * Return: on success. */ int p7_GViterbi(const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMX *gx, float *opt_sc) { float const *tsc = gm->tsc; float **dp = gx->dp; float *xmx = gx->xmx; int M = gm->M; int i,k; float esc = p7_profile_IsLocal(gm) ? 0 : -eslINFINITY; /* Initialization of the zero row. */ XMX(0,p7G_N) = 0; /* S->N, p=1 */ XMX(0,p7G_B) = gm->xsc[p7P_N][p7P_MOVE]; /* S->N->B, no N-tail */ XMX(0,p7G_E) = XMX(0,p7G_C) = XMX(0,p7G_J) = -eslINFINITY; /* need seq to get here */ for (k = 0; k <= gm->M; k++) MMX(0,k) = IMX(0,k) = DMX(0,k) = -eslINFINITY; /* need seq to get here */ /* DP recursion */ for (i = 1; i <= L; i++) { float const *rsc = gm->rsc[dsq[i]]; float sc; MMX(i,0) = IMX(i,0) = DMX(i,0) = -eslINFINITY; XMX(i,p7G_E) = -eslINFINITY; for (k = 1; k < gm->M; k++) { /* match state */ sc = ESL_MAX( MMX(i-1,k-1) + TSC(p7P_MM,k-1), IMX(i-1,k-1) + TSC(p7P_IM,k-1)); sc = ESL_MAX(sc, DMX(i-1,k-1) + TSC(p7P_DM,k-1)); sc = ESL_MAX(sc, XMX(i-1,p7G_B) + TSC(p7P_BM,k-1)); MMX(i,k) = sc + MSC(k); /* E state update */ XMX(i,p7G_E) = ESL_MAX(XMX(i,p7G_E), MMX(i,k) + esc); /* in Viterbi alignments, Dk->E can't win in local mode (and * isn't possible in glocal mode), so don't bother * looking. */ /* insert state */ sc = ESL_MAX(MMX(i-1,k) + TSC(p7P_MI,k), IMX(i-1,k) + TSC(p7P_II,k)); IMX(i,k) = sc + ISC(k); /* delete state */ DMX(i,k) = ESL_MAX(MMX(i,k-1) + TSC(p7P_MD,k-1), DMX(i,k-1) + TSC(p7P_DD,k-1)); } /* Unrolled match state M. */ sc = ESL_MAX( MMX(i-1,M-1) + TSC(p7P_MM,M-1), IMX(i-1,M-1) + TSC(p7P_IM,M-1)); sc = ESL_MAX(sc, DMX(i-1,M-1 ) + TSC(p7P_DM,M-1)); sc = ESL_MAX(sc, XMX(i-1,p7G_B) + TSC(p7P_BM,M-1)); MMX(i,M) = sc + MSC(M); /* Unrolled delete state D_M * (Unlike internal Dk->E transitions that can never appear in * Viterbi alignments, D_M->E is possible in glocal mode.) */ DMX(i,M) = ESL_MAX(MMX(i,M-1) + TSC(p7P_MD,M-1), DMX(i,M-1) + TSC(p7P_DD,M-1)); /* E state update; transition from M_M scores 0 by def'n */ sc = ESL_MAX(XMX(i,p7G_E), MMX(i,M)); XMX(i,p7G_E) = ESL_MAX(sc, DMX(i,M)); /* Now the special states. E must already be done, and B must follow N,J. * remember, N, C and J emissions are zero score by definition. */ /* J state */ sc = XMX(i-1,p7G_J) + gm->xsc[p7P_J][p7P_LOOP]; /* J->J */ XMX(i,p7G_J) = ESL_MAX(sc, XMX(i, p7G_E) + gm->xsc[p7P_E][p7P_LOOP]); /* E->J is E's "loop" */ /* C state */ sc = XMX(i-1,p7G_C) + gm->xsc[p7P_C][p7P_LOOP]; XMX(i,p7G_C) = ESL_MAX(sc, XMX(i, p7G_E) + gm->xsc[p7P_E][p7P_MOVE]); /* N state */ XMX(i,p7G_N) = XMX(i-1,p7G_N) + gm->xsc[p7P_N][p7P_LOOP]; /* B state */ sc = XMX(i,p7G_N) + gm->xsc[p7P_N][p7P_MOVE]; /* N->B is N's move */ XMX(i,p7G_B) = ESL_MAX(sc, XMX(i,p7G_J) + gm->xsc[p7P_J][p7P_MOVE]); /* J->B is J's move */ } /* T state (not stored) */ if (opt_sc != NULL) *opt_sc = XMX(L,p7G_C) + gm->xsc[p7P_C][p7P_MOVE]; gx->M = gm->M; gx->L = L; return eslOK; } /*-------------------- end, viterbi -----------------------------*/ /* Function: p7_GViterbi_longtarget() * Synopsis: The Viterbi algorithm. * Incept: SRE, Tue Jan 30 10:50:53 2007 [Einstein's, St. Louis] * * Purpose: Given a digital sequence of length , a profile * , and DP matrix allocated for at least * by M> cells; calculates the Viterbi score for * regions of , and captures the positions at which * such regions exceed the score required to be * significant in the eyes of the calling function * (usually p=0.001). * * Args: dsq - sequence in digitized form, 1..L * L - length of dsq * gm - profile. * gx - DP matrix with room for an MxL alignment * filtersc - null or bias correction, required for translating a P-value threshold into a score threshold * P - p-value below which a region is captured as being above threshold * windowlist - RETURN: array of hit windows (start and end of diagonal) for the above-threshold areas * * Return: on success. */ int p7_GViterbi_longtarget(const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMX *gx, float filtersc, double P, P7_HMM_WINDOWLIST *windowlist) { float const *tsc = gm->tsc; float **dp = gx->dp; float *xmx = gx->xmx; int M = gm->M; int i,k; float esc = p7_profile_IsLocal(gm) ? 0 : -eslINFINITY; int16_t sc_thresh; float invP; /* Initialization of the zero row. */ XMX(0,p7G_N) = 0; /* S->N, p=1 */ XMX(0,p7G_B) = gm->xsc[p7P_N][p7P_MOVE]; /* S->N->B, no N-tail */ XMX(0,p7G_E) = XMX(0,p7G_C) = XMX(0,p7G_J) = -eslINFINITY; /* need seq to get here */ for (k = 0; k <= gm->M; k++) MMX(0,k) = IMX(0,k) = DMX(0,k) = -eslINFINITY; /* need seq to get here */ /* * In p7_ViterbiFilter, converting from a scaled int Viterbi score * S (aka xE the score getting to state E) to a probability * goes like this: * S = XMX(i,p7G_E) * vsc = S + gm->xsc[p7P_E][p7P_MOVE] + gm->xsc[p7P_C][p7P_MOVE]; * P = esl_gumbel_surv((vfsc - filtersc) / eslCONST_LOG2 , gm->evparam[p7_VMU], gm->evparam[p7_VLAMBDA]); * and we're computing the threshold vsc, so invert it: * (vsc - filtersc) / eslCONST_LOG2 = esl_gumbel_invsurv( P, gm->evparam[p7_VMU], gm->evparam[p7_VLAMBDA]) * vsc = filtersc + eslCONST_LOG2 * esl_gumbel_invsurv( P, gm->evparam[p7_VMU], gm->evparam[p7_VLAMBDA]) * S = vsc - gm->xsc[p7P_E][p7P_MOVE] - gm->xsc[p7P_C][p7P_MOVE] */ invP = esl_gumbel_invsurv(P, gm->evparam[p7_VMU], gm->evparam[p7_VLAMBDA]); sc_thresh = (int) ceil (filtersc + (eslCONST_LOG2 * invP) - gm->xsc[p7P_E][p7P_MOVE] - gm->xsc[p7P_C][p7P_MOVE] ); /* DP recursion */ for (i = 1; i <= L; i++) { float const *rsc = gm->rsc[dsq[i]]; float sc; MMX(i,0) = IMX(i,0) = DMX(i,0) = -eslINFINITY; XMX(i,p7G_E) = -eslINFINITY; for (k = 1; k < gm->M; k++) { /* match state */ sc = ESL_MAX( MMX(i-1,k-1) + TSC(p7P_MM,k-1), IMX(i-1,k-1) + TSC(p7P_IM,k-1)); sc = ESL_MAX(sc, DMX(i-1,k-1) + TSC(p7P_DM,k-1)); sc = ESL_MAX(sc, XMX(i-1,p7G_B) + TSC(p7P_BM,k-1)); MMX(i,k) = sc + MSC(k); /* E state update */ XMX(i,p7G_E) = ESL_MAX(XMX(i,p7G_E), MMX(i,k) + esc); /* in Viterbi alignments, Dk->E can't win in local mode (and * isn't possible in glocal mode), so don't bother * looking. */ /* insert state */ sc = ESL_MAX(MMX(i-1,k) + TSC(p7P_MI,k), IMX(i-1,k) + TSC(p7P_II,k)); IMX(i,k) = sc + ISC(k); /* delete state */ DMX(i,k) = ESL_MAX(MMX(i,k-1) + TSC(p7P_MD,k-1), DMX(i,k-1) + TSC(p7P_DD,k-1)); } /* Unrolled match state M. */ sc = ESL_MAX( MMX(i-1,M-1) + TSC(p7P_MM,M-1), IMX(i-1,M-1) + TSC(p7P_IM,M-1)); sc = ESL_MAX(sc, DMX(i-1,M-1 ) + TSC(p7P_DM,M-1)); sc = ESL_MAX(sc, XMX(i-1,p7G_B) + TSC(p7P_BM,M-1)); MMX(i,M) = sc + MSC(M); /* Unrolled delete state D_M * (Unlike internal Dk->E transitions that can never appear in * Viterbi alignments, D_M->E is possible in glocal mode.) */ DMX(i,M) = ESL_MAX(MMX(i,M-1) + TSC(p7P_MD,M-1), DMX(i,M-1) + TSC(p7P_DD,M-1)); /* E state update; transition from M_M scores 0 by def'n */ sc = ESL_MAX(XMX(i,p7G_E), MMX(i,M)); XMX(i,p7G_E) = ESL_MAX(sc, DMX(i,M)); if (XMX(i,p7G_E) >= sc_thresh) { //hit score threshold. Add a window to the list, then reset scores. for (k = 1; k <= gm->M; k++) { if (MMX(i,k) == XMX(i,p7G_E)) { p7_hmmwindow_new(windowlist, 0, i, 0, k, 1, 0.0, p7_NOCOMPLEMENT, L); } MMX(i,0) = IMX(i,0) = DMX(i,0) = -eslINFINITY; } } else { /* Now the special states. E must already be done, and B must follow N,J. * remember, N, C and J emissions are zero score by definition. */ /* J state */ sc = XMX(i-1,p7G_J) + gm->xsc[p7P_J][p7P_LOOP]; /* J->J */ XMX(i,p7G_J) = ESL_MAX(sc, XMX(i, p7G_E) + gm->xsc[p7P_E][p7P_LOOP]); /* E->J is E's "loop" */ /* C state */ sc = XMX(i-1,p7G_C) + gm->xsc[p7P_C][p7P_LOOP]; XMX(i,p7G_C) = ESL_MAX(sc, XMX(i, p7G_E) + gm->xsc[p7P_E][p7P_MOVE]); /* N state */ XMX(i,p7G_N) = XMX(i-1,p7G_N) + gm->xsc[p7P_N][p7P_LOOP]; /* B state */ sc = XMX(i,p7G_N) + gm->xsc[p7P_N][p7P_MOVE]; /* N->B is N's move */ XMX(i,p7G_B) = ESL_MAX(sc, XMX(i,p7G_J) + gm->xsc[p7P_J][p7P_MOVE]); /* J->B is J's move */ } } /* T state (not stored) */ gx->M = gm->M; gx->L = L; return eslOK; } /*-------------------- end, p7_GViterbi_longtarget -----------------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ #ifdef p7GENERIC_VITERBI_BENCHMARK /* gcc -g -O2 -o generic_viterbi_benchmark -I. -L. -I../easel -L../easel -Dp7GENERIC_VITERBI_BENCHMARK generic_viterbi.c -lhmmer -leasel -lm icc -O3 -static -o generic_viterbi_benchmark -I. -L. -I../easel -L../easel -Dp7GENERIC_VITERBI_BENCHMARK generic_viterbi.c -lhmmer -leasel -lm ./benchmark-generic-viterbi */ /* As of Fri Dec 28 14:48:39 2007 * Viterbi = 61.8 Mc/s * Forward = 8.6 Mc/s * Backward = 7.1 Mc/s * MSV = 55.9 Mc/s * (gcc -g -O2, 3.2GHz Xeon, N=50K, L=400, M=72 RRM_1 model) */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "20000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for generic Viterbi"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *gx = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc; double base_time, bench_time, Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_UNILOCAL); gx = p7_gmx_Create(gm->M, L); /* Baseline time. */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; /* Benchmark time. */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_GViterbi (dsq, L, gm, gx, &sc); } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_VITERBI_BENCHMARK*/ /*----------------- end, benchmark ------------------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7GENERIC_VITERBI_TESTDRIVE #include #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_random.h" #include "esl_randomseq.h" /* The "basic" utest is a minimal driver for making a small DNA profile and a small DNA sequence, * then running Viterbi and Forward. It's useful for dumping DP matrices and profiles for debugging. */ static void utest_basic(ESL_GETOPTS *go) { char *query= "# STOCKHOLM 1.0\n\nseq1 GAATTC\nseq2 GAATTC\n//\n"; int fmt = eslMSAFILE_STOCKHOLM; char *targ = "GAATTC"; ESL_ALPHABET *abc = NULL; ESL_MSA *msa = NULL; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_BG *bg = NULL; P7_PRIOR *pri = NULL; ESL_DSQ *dsq = NULL; P7_GMX *gx = NULL; P7_TRACE *tr = NULL; int L = strlen(targ); float vsc, vsc2, fsc; if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((pri = p7_prior_CreateNucleic()) == NULL) esl_fatal("failed to create prior"); if ((msa = esl_msa_CreateFromString(query, fmt)) == NULL) esl_fatal("failed to create MSA"); if (esl_msa_Digitize(abc, msa, NULL) != eslOK) esl_fatal("failed to digitize MSA"); if (p7_Fastmodelmaker(msa, 0.5, NULL, &hmm, NULL) != eslOK) esl_fatal("failed to create GAATTC model"); if (p7_ParameterEstimation(hmm, pri) != eslOK) esl_fatal("failed to parameterize GAATTC model"); if (p7_hmm_SetConsensus(hmm, NULL) != eslOK) esl_fatal("failed to make consensus"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create DNA null model"); if ((gm = p7_profile_Create(hmm->M, abc)) == NULL) esl_fatal("failed to create GAATTC profile"); if (p7_ProfileConfig(hmm, bg, gm, L, p7_UNILOCAL)!= eslOK) esl_fatal("failed to config profile"); if (p7_profile_Validate(gm, NULL, 0.0001) != eslOK) esl_fatal("whoops, profile is bad!"); if (esl_abc_CreateDsq(abc, targ, &dsq) != eslOK) esl_fatal("failed to create GAATTC digital sequence"); if ((gx = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("failed to create DP matrix"); if ((tr = p7_trace_Create()) == NULL) esl_fatal("trace creation failed"); p7_GViterbi (dsq, L, gm, gx, &vsc); if (esl_opt_GetBoolean(go, "-v")) printf("Viterbi score: %.4f\n", vsc); if (esl_opt_GetBoolean(go, "-v")) p7_gmx_Dump(stdout, gx, p7_DEFAULT); p7_GTrace (dsq, L, gm, gx, tr); p7_trace_Score(tr, dsq, gm, &vsc2); if (esl_opt_GetBoolean(go, "-v")) p7_trace_Dump(stdout, tr, gm, dsq); if (esl_FCompare(vsc, vsc2, 1e-5) != eslOK) esl_fatal("trace score and Viterbi score don't agree."); p7_GForward (dsq, L, gm, gx, &fsc); if (esl_opt_GetBoolean(go, "-v")) printf("Forward score: %.4f\n", fsc); if (esl_opt_GetBoolean(go, "-v")) p7_gmx_Dump(stdout, gx, p7_DEFAULT); p7_trace_Destroy(tr); p7_gmx_Destroy(gx); free(dsq); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_msa_Destroy(msa); p7_prior_Destroy(pri); esl_alphabet_Destroy(abc); return; } /* Viterbi validation is done by comparing the returned score * to the score of the optimal trace. Not foolproof, but catches * many kinds of errors. * * Another check is that the average score should be <= 0, * since the random sequences are drawn from the null model. */ static void utest_viterbi(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, P7_PROFILE *gm, int nseq, int L) { float avg_sc = 0.; char errbuf[eslERRBUFSIZE]; ESL_DSQ *dsq = NULL; P7_GMX *gx = NULL; P7_TRACE *tr = NULL; int idx; float sc1, sc2; if ((dsq = malloc(sizeof(ESL_DSQ) *(L+2))) == NULL) esl_fatal("malloc failed"); if ((tr = p7_trace_Create()) == NULL) esl_fatal("trace creation failed"); if ((gx = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("matrix creation failed"); for (idx = 0; idx < nseq; idx++) { if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal("seq generation failed"); if (p7_GViterbi(dsq, L, gm, gx, &sc1) != eslOK) esl_fatal("viterbi failed"); if (p7_GTrace (dsq, L, gm, gx, tr) != eslOK) esl_fatal("trace failed"); if (p7_trace_Validate(tr, abc, dsq, errbuf) != eslOK) esl_fatal("trace invalid:\n%s", errbuf); if (p7_trace_Score(tr, dsq, gm, &sc2) != eslOK) esl_fatal("trace score failed"); if (esl_FCompare(sc1, sc2, 1e-6) != eslOK) esl_fatal("Trace score != Viterbi score"); if (p7_bg_NullOne(bg, dsq, L, &sc2) != eslOK) esl_fatal("null score failed"); avg_sc += (sc1 - sc2); if (esl_opt_GetBoolean(go, "--vv")) printf("utest_viterbi: Viterbi score: %.4f (null %.4f) (total so far: %.4f)\n", sc1, sc2, avg_sc); p7_trace_Reuse(tr); } avg_sc /= (float) nseq; if (avg_sc > 0.) esl_fatal("Viterbi scores have positive expectation (%f nats)", avg_sc); p7_gmx_Destroy(gx); p7_trace_Destroy(tr); free(dsq); return; } #endif /*p7GENERIC_VITERBI_TESTDRIVE*/ /*----------------- end, unit tests -----------------------------*/ /***************************************************************** * 4. Test driver. *****************************************************************/ /* gcc -g -Wall -Dp7GENERIC_VITERBI_TESTDRIVE -I. -I../easel -L. -L../easel -o generic_viterbi_utest generic_viterbi.c -lhmmer -leasel -lm */ #ifdef p7GENERIC_VITERBI_TESTDRIVE #include "easel.h" #include "esl_getopts.h" #include "esl_msa.h" #include "p7_config.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "--vv", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be very verbose", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "unit test driver for the generic Viterbi implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_BG *bg = NULL; int M = 100; int L = 200; int nseq = 20; char errbuf[eslERRBUFSIZE]; if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if (p7_hmm_Sample(r, M, abc, &hmm) != eslOK) esl_fatal("failed to sample an HMM"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if ((gm = p7_profile_Create(hmm->M, abc)) == NULL) esl_fatal("failed to create profile"); if (p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL) != eslOK) esl_fatal("failed to config profile"); if (p7_hmm_Validate (hmm, errbuf, 0.0001) != eslOK) esl_fatal("whoops, HMM is bad!: %s", errbuf); if (p7_profile_Validate(gm, errbuf, 0.0001) != eslOK) esl_fatal("whoops, profile is bad!: %s", errbuf); utest_basic (go); utest_viterbi(go, r, abc, bg, gm, nseq, L); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_VITERBI_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ /* This is essentially identical to the vtrace example. */ #ifdef p7GENERIC_VITERBI_EXAMPLE /* gcc -g -O2 -Dp7GENERIC_VITERBI_EXAMPLE -I. -I../easel -L. -L../easel -o generic_viterbi_example generic_viterbi.c -lhmmer -leasel -lm */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of generic Viterbi"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *fwd = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; P7_TRACE *tr = NULL; int format = eslSQFILE_UNKNOWN; char errbuf[eslERRBUFSIZE]; float sc; int d; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); esl_sqfile_Close(sqfp); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); /* Allocate matrix and a trace */ fwd = p7_gmx_Create(gm->M, sq->n); tr = p7_trace_Create(); /* Run Viterbi; do traceback */ p7_GViterbi (sq->dsq, sq->n, gm, fwd, &sc); p7_GTrace (sq->dsq, sq->n, gm, fwd, tr); /* Dump and validate the trace. */ p7_trace_Dump(stdout, tr, gm, sq->dsq); if (p7_trace_Validate(tr, abc, sq->dsq, errbuf) != eslOK) p7_Die("trace fails validation:\n%s\n", errbuf); /* Domain info in the trace. */ p7_trace_Index(tr); printf("# Viterbi: %d domains : ", tr->ndom); for (d = 0; d < tr->ndom; d++) printf("%6d %6d %6d %6d ", tr->sqfrom[d], tr->sqto[d], tr->hmmfrom[d], tr->hmmto[d]); printf("\n"); /* Cleanup */ p7_trace_Destroy(tr); p7_gmx_Destroy(fwd); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_sq_Destroy(sq); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_VITERBI_EXAMPLE*/ /*-------------------- end, example -----------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/generic_viterbi.c $ * SVN $Id: generic_viterbi.c 3569 2011-06-16 16:16:13Z eddys $ *****************************************************************/ hmmer-3.1b2/src/fm_alphabet.c0000664361611702660230000001131712473612612015467 0ustar wheelerteddy#include "p7_config.h" #include #include "easel.h" #include "esl_mem.h" #include "hmmer.h" /* Function: fm_alphabetCreate() * * Synopsis: Produce an alphabet for FMindex. * * Purpose: Produce an alphabet for FMindex. This may end up being * replaced with easel alphabet functions, but the easel * requirement of having a gap-character between * cannonical and degenerate symbols poses a problem * from a bit-packing perspective * * Args: meta - metadata object already initialized with the alphabet type. * This will hold the alphabet (and corresponding reverse alphabet) * created here. * alph_bits - pointer to an int that this function sets equal to the * number of bits required to store the alphabet (log of alph size) * * Returns: on success. */ int fm_alphabetCreate (FM_METADATA *meta, uint8_t *alph_bits) { int i = 0; int status; if ( meta->alph_type == fm_DNA) { meta->alph_size = 4; if (alph_bits) *alph_bits = 2; /* } else if ( meta->alph_type == fm_DNA_full) { meta->alph_size = 15; if (alph_bits) *alph_bits = 4; */ } else if ( meta->alph_type == fm_AMINO) { meta->alph_size = 26; if (alph_bits) *alph_bits = 5; } else { esl_fatal("Unknown alphabet type\n%s", ""); } ESL_ALLOC(meta->alph, (1+meta->alph_size)*sizeof(char)); ESL_ALLOC(meta->inv_alph, 256*sizeof(char)); if ( meta->alph_type == fm_DNA /*|| meta->alph_type == fm_DNA_full*/) ESL_ALLOC(meta->compl_alph, (1+meta->alph_size)*sizeof(int)); if ( meta->alph_type == fm_DNA) { esl_memstrcpy("ACGT", 4, meta->alph); for (i=0; i<4; i++) meta->compl_alph[i] = 3-i; /* TODO: fm_DNA_full has currently been disabled because of problems with how the * FM index handles very long runs of the same character (in this case, Ns). * See wheelert/notebook/2013/12-11-FM-alphabet-speed notes on 12/12. * } else if ( meta->alph_type == fm_DNA_full) { esl_memstrcpy("ACGTRYMKSWHBVDN", 15, meta->alph); meta->compl_alph[0] = 3; // A->T meta->compl_alph[1] = 2; // C->G meta->compl_alph[2] = 1; // G->C meta->compl_alph[3] = 0; // T->A meta->compl_alph[4] = 5; // R->Y meta->compl_alph[5] = 4; // Y->R meta->compl_alph[6] = 7; // M->K meta->compl_alph[7] = 6; // K->M meta->compl_alph[8] = 8; // S S meta->compl_alph[9] = 9; // W W meta->compl_alph[10]= 13; // H->D meta->compl_alph[11]= 12; // B->V meta->compl_alph[12]= 11; // V->B meta->compl_alph[13]= 10; // D->H meta->compl_alph[14]= 14; // N N */ } else if ( meta->alph_type == fm_AMINO) { esl_memstrcpy("ACDEFGHIKLMNPQRSTVWYBJZOUX", meta->alph_size, meta->alph); } for (i=0; i<256; i++) meta->inv_alph[i] = -1; for (i=0; ialph_size; i++) { meta->inv_alph[tolower(meta->alph[i])] = meta->inv_alph[toupper(meta->alph[i])] = i; //special case for RNA, equate U to T: if ( (meta->alph_type == fm_DNA /*|| meta->alph_type == fm_DNA_full*/) && toupper(meta->alph[i]) == 'T') meta->inv_alph['u'] = meta->inv_alph['U'] = i; } return eslOK; ERROR: esl_fatal("error allocating space for alphabet\n"); return eslFAIL; } /* Function: fm_alphabetDestroy() * * Synopsis: Free the alphabet for an FMindex metadata object * * Purpose: Free both the alphabet and corresponding inverse alphabet * (inv_alph) held within . * * Returns: on success. */ int fm_alphabetDestroy (FM_METADATA *meta) { if (meta != NULL){ if (meta->alph != NULL) free (meta->alph); if (meta->inv_alph != NULL) free (meta->inv_alph); if (meta->compl_alph != NULL) free (meta->compl_alph); } return eslOK; } /* Function: fm_reverseString() * * Synopsis: Take as input a string and its length, and reverse the * string in place. * * Returns: on success. */ int fm_reverseString (char* str, int N) { int end = N-1; int start = 0; while( start on success. */ int fm_getComplement (char c, uint8_t alph_type) { if ( alph_type == fm_DNA ) { return 3-c; /* } else if ( alph_type == fm_DNA_full) { esl_fatal("complement for DNA_full not yet implemented\n"); */ } else if ( alph_type == fm_AMINO) { esl_fatal("complement for amino acids is undefined\n"); } else { esl_fatal("Unknown alphabet type\n%s", ""); } return -1; } hmmer-3.1b2/src/p7_hmmcache.h0000664361611702660230000000300212473612614015377 0ustar wheelerteddy/* A cached profile database. Used by the hmmpgmd daemon. */ #ifndef P7_HMMCACHE_INCLUDED #define P7_HMMCACHE_INCLUDED #include "esl_alphabet.h" #include "hmmer.h" typedef struct { char *name; /* name of the hmm database */ ESL_ALPHABET *abc; /* alphabet for database */ P7_OPROFILE **list; /* list of profiles [0 .. n-1] */ uint32_t lalloc; /* allocated length of */ uint32_t n; /* number of entries in */ } P7_HMMCACHE; extern int p7_hmmcache_Open (char *hmmfile, P7_HMMCACHE **ret_cache, char *errbuf); extern size_t p7_hmmcache_Sizeof (P7_HMMCACHE *cache); extern int p7_hmmcache_SetNumericNames(P7_HMMCACHE *cache); extern void p7_hmmcache_Close (P7_HMMCACHE *cache); #endif /*P7_HMMCACHE_INCLUDED*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: p7_hmmcache.h 3754 2011-11-21 14:25:31Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/p7_hmmcache.h $ *****************************************************************/ hmmer-3.1b2/src/hmmalign.c0000664361611702660230000003136312473612613015025 0ustar wheelerteddy/* hmmalign: align sequences to a profile HMM * */ #include "p7_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_vectorops.h" #include "hmmer.h" static int map_alignment(const char *msafile, const P7_HMM *hmm, ESL_SQ ***ret_sq, P7_TRACE ***ret_tr, int *ret_ntot); #define ALPHOPTS "--amino,--dna,--rna" /* Exclusive options for alphabet choice */ static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "output alignment to file , not stdout", 1 }, { "--mapali", eslARG_INFILE, NULL, NULL, NULL, NULL, NULL, NULL, "include alignment in file (same ali that HMM came from)", 2 }, { "--trim", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "trim terminal tails of nonaligned residues from alignment", 2 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, ALPHOPTS, NULL, NULL, "assert , both protein: no autodetection", 2 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, ALPHOPTS, NULL, NULL, "assert , both DNA: no autodetection", 2 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, ALPHOPTS, NULL, NULL, "assert , both RNA: no autodetection", 2 }, { "--informat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "assert is in format : no autodetection", 2 }, { "--outformat", eslARG_STRING, "Stockholm", NULL, NULL, NULL, NULL, NULL, "output alignment in format ", 2 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "align sequences to a profile HMM"; static void cmdline_failure(char *argv0, char *format, ...) { va_list argp; printf("\nERROR: "); va_start(argp, format); vfprintf(stdout, format, argp); va_end(argp); esl_usage(stdout, argv0, usage); printf("\nTo see more help on available options, do %s -h\n\n", argv0); exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { p7_banner (stdout, argv0, banner); esl_usage (stdout, argv0, usage); puts("\nBasic options:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); puts("\nLess common options:"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); puts("\nSequence input formats include: FASTA, EMBL, GenBank, UniProt"); puts("Alignment output formats include: Stockholm, Pfam, A2M, PSIBLAST\n"); exit(0); } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* application configuration */ char *hmmfile = NULL; /* HMM file name */ char *seqfile = NULL; /* sequence file name */ char *mapfile = NULL; /* optional mapped MSA file name */ int infmt = eslSQFILE_UNKNOWN; int outfmt = eslMSAFILE_STOCKHOLM; P7_HMMFILE *hfp = NULL; /* open HMM file */ ESL_SQFILE *sqfp = NULL; /* open sequence file */ char *outfile = NULL; /* output filename */ FILE *ofp = stdout; /* output stream */ ESL_SQ **sq = NULL; /* array of sequences */ void *p = NULL; /* tmp ptr for reallocation */ int nseq = 0; /* # of sequences in */ int mapseq = 0; /* # of sequences in mapped MSA */ int totseq = 0; /* # of seqs in all sources */ ESL_ALPHABET *abc = NULL; /* alphabet (set from the HMM file)*/ P7_HMM *hmm = NULL; P7_TRACE **tr = NULL; /* array of tracebacks */ ESL_MSA *msa = NULL; /* resulting multiple alignment */ int msaopts = 0; /* flags to p7_tracealign_Seqs() */ int idx; /* counter over seqs, traces */ int status; /* easel/hmmer return code */ char errbuf[eslERRBUFSIZE]; /* Parse the command line */ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], "Error in configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") ) cmdline_help (argv[0], go); if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); hmmfile = esl_opt_GetArg(go, 1); seqfile = esl_opt_GetArg(go, 2); if (strcmp(hmmfile, "-") == 0 && strcmp(seqfile, "-") == 0) cmdline_failure(argv[0], "Either or may be '-' (to read from stdin), but not both.\n"); msaopts |= p7_ALL_CONSENSUS_COLS; /* default as of 3.1 */ if (esl_opt_GetBoolean(go, "--trim")) msaopts |= p7_TRIM; /* If caller declared an input format, decode it */ if (esl_opt_IsOn(go, "--informat")) { infmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat")); if (infmt == eslSQFILE_UNKNOWN) cmdline_failure(argv[0], "%s is not a recognized input sequence file format\n", esl_opt_GetString(go, "--informat")); } /* Determine output alignment file format */ outfmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--outformat")); if (outfmt == eslMSAFILE_UNKNOWN) cmdline_failure(argv[0], "%s is not a recognized output MSA file format\n", esl_opt_GetString(go, "--outformat")); /* Open output stream */ if ( (outfile = esl_opt_GetString(go, "-o")) != NULL) { if ((ofp = fopen(outfile, "w")) == NULL) cmdline_failure(argv[0], "failed to open -o output file %s for writing\n", outfile); } /* If caller forced an alphabet on us, create the one the caller wants */ if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); /* Read one HMM, and make sure there's only one. */ status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); status = p7_hmmfile_Read(hfp, &abc, &hmm); if (status == eslEFORMAT) p7_Fail("Bad file format in HMM file %s:\n%s\n", hfp->fname, hfp->errbuf); else if (status == eslEINCOMPAT) p7_Fail("HMM in %s is not in the expected %s alphabet\n", hfp->fname, esl_abc_DecodeType(abc->type)); else if (status == eslEOF) p7_Fail("Empty HMM file %s? No HMM data found.\n", hfp->fname); else if (status != eslOK) p7_Fail("Unexpected error in reading HMMs from %s\n", hfp->fname); status = p7_hmmfile_Read(hfp, &abc, NULL); if (status != eslEOF) p7_Fail("HMM file %s does not contain just one HMM\n", hfp->fname); p7_hmmfile_Close(hfp); /* We're going to build up two arrays: sequences and traces. * If --mapali option is chosen, the first set of sequences/traces is from the provided alignment */ if ( (mapfile = esl_opt_GetString(go, "--mapali")) != NULL) { map_alignment(mapfile, hmm, &sq, &tr, &mapseq); } totseq = mapseq; /* Read digital sequences into an array (possibly concat'ed onto mapped seqs) */ status = esl_sqfile_OpenDigital(abc, seqfile, infmt, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("Failed to open sequence file %s for reading\n", seqfile); else if (status == eslEFORMAT) p7_Fail("Sequence file %s is empty or misformatted\n", seqfile); else if (status != eslOK) p7_Fail("Unexpected error %d opening sequence file %s\n", status, seqfile); ESL_RALLOC(sq, p, sizeof(ESL_SQ *) * (totseq + 1)); sq[totseq] = esl_sq_CreateDigital(abc); nseq = 0; while ((status = esl_sqio_Read(sqfp, sq[totseq+nseq])) == eslOK) { nseq++; ESL_RALLOC(sq, p, sizeof(ESL_SQ *) * (totseq+nseq+1)); sq[totseq+nseq] = esl_sq_CreateDigital(abc); } if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (status != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", status, sqfp->filename); esl_sqfile_Close(sqfp); totseq += nseq; /* Remaining initializations, including trace array allocation */ ESL_RALLOC(tr, p, sizeof(P7_TRACE *) * totseq); for (idx = mapseq; idx < totseq; idx++) tr[idx] = p7_trace_CreateWithPP(); p7_tracealign_computeTraces(hmm, sq, mapseq, totseq - mapseq, tr); p7_tracealign_Seqs(sq, tr, totseq, hmm->M, msaopts, hmm, &msa); eslx_msafile_Write(ofp, msa, outfmt); for (idx = 0; idx <= totseq; idx++) esl_sq_Destroy(sq[idx]); /* including sq[nseq] because we overallocated */ for (idx = 0; idx < totseq; idx++) p7_trace_Destroy(tr[idx]); free(sq); free(tr); esl_msa_Destroy(msa); p7_hmm_Destroy(hmm); if (ofp != stdout) fclose(ofp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return eslOK; ERROR: return status; } /***************************************************************** * Internal functions used by main and API *****************************************************************/ static int map_alignment(const char *msafile, const P7_HMM *hmm, ESL_SQ ***ret_sq, P7_TRACE ***ret_tr, int *ret_ntot) { ESL_SQ **sq = NULL; P7_TRACE **tr = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; ESL_ALPHABET *abc = (ESL_ALPHABET *) hmm->abc; /* removing const'ness to make compiler happy. Safe. */ int *matassign = NULL; uint32_t chksum = 0; int i,k; int status; status = eslx_msafile_Open(&abc, msafile, NULL, eslMSAFILE_UNKNOWN, NULL, &afp); if (status != eslOK) eslx_msafile_OpenFailure(afp, status); status = eslx_msafile_Read(afp, &msa); if (status != eslOK) eslx_msafile_ReadFailure(afp, status); if (! (hmm->flags & p7H_CHKSUM) ) esl_fatal("HMM has no checksum. --mapali unreliable without it."); if (! (hmm->flags & p7H_MAP) ) esl_fatal("HMM has no map. --mapali can't work without it."); esl_msa_Checksum(msa, &chksum); if (hmm->checksum != chksum) esl_fatal("--mapali MSA %s isn't same as the one HMM came from (checksum mismatch)", msafile); ESL_ALLOC(sq, sizeof(ESL_SQ *) * msa->nseq); ESL_ALLOC(tr, sizeof(P7_TRACE *) * msa->nseq); ESL_ALLOC(matassign, sizeof(int) * (msa->alen + 1)); esl_vec_ISet(matassign, msa->alen+1, 0); for (k = 1; k <= hmm->M; k++) matassign[hmm->map[k]] = 1; p7_trace_FauxFromMSA(msa, matassign, p7_DEFAULT, tr); /* The 'faux' core traces constructed by FauxFromMSA() may contain * D->I and I->D transitions. They may *only* now be passed to * p7_tracealign_Seqs(), which can deal with these 'illegal' * transitions, in order to exactly reproduce the input --mapali * alignment. */ for (i = 0; i < msa->nseq; i++) esl_sq_FetchFromMSA(msa, i, &(sq[i])); *ret_ntot = msa->nseq; *ret_tr = tr; *ret_sq = sq; eslx_msafile_Close(afp); esl_msa_Destroy(msa); free(matassign); return eslOK; ERROR: *ret_ntot = 0; *ret_tr = NULL; *ret_sq = NULL; if (afp != NULL) eslx_msafile_Close(afp); if (msa != NULL) esl_msa_Destroy(msa); if (matassign != NULL) free(matassign); return status; } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/hmmalign.c $ * SVN $Id: hmmalign.c 3619 2011-07-28 11:14:18Z eddys $ *****************************************************************/ hmmer-3.1b2/src/p7_gbands.h0000664361611702660230000000152612473612614015101 0ustar wheelerteddy#ifndef P7_GBANDS_INCLUDED #define P7_GBANDS_INCLUDED typedef struct { int nseg; int nrow; int L; int M; int64_t ncell; int *imem; int *kmem; int segalloc; int rowalloc; } P7_GBANDS; #define p7_GBANDS_NK 2 /* for IK banding. Or 6, for IKS banding */ extern P7_GBANDS *p7_gbands_Create (void); extern int p7_gbands_Reuse (P7_GBANDS *bnd); extern int p7_gbands_Append (P7_GBANDS *bnd, int i, int ka, int kb); extern int p7_gbands_Prepend (P7_GBANDS *bnd, int i, int ka, int kb); extern int p7_gbands_Reverse (P7_GBANDS *bnd); extern int p7_gbands_GrowSegs(P7_GBANDS *bnd); extern int p7_gbands_GrowRows(P7_GBANDS *bnd); extern void p7_gbands_Destroy (P7_GBANDS *bnd); extern int p7_gbands_Dump(FILE *ofp, P7_GBANDS *bnd); #endif /*P7_GBANDS_INCLUDED*/ hmmer-3.1b2/src/modelconfig.c0000664361611702660230000013577412473612614015533 0ustar wheelerteddy/* Model configuration: * Converting a core model to a fully configured Plan7 search profile. * * Contents: * 1. Routines in the exposed API. * 2. Unit tests. * 3. Test driver. * 4. Statistics collection driver. * 5. Copyright and license * * Revised May 2005: xref STL9/77-81. (Uniform fragment distribution) * Again, Sept 2005: xref STL10/24-26. (Inherent target length dependency) * Again, Jan 2007: xref STL11/125,136-137 (HMMER3) * Again, Jul 2007: xref J1/103 (floating point ops) */ #include "p7_config.h" #include #include #include #include #include "easel.h" #include "esl_vectorops.h" #include "hmmer.h" /***************************************************************** * 1. Routines in the exposed API. *****************************************************************/ /* Function: p7_ProfileConfig() * Synopsis: Configure a search profile. * * Purpose: Given a model with core probabilities, the null1 * model , a desired search (one of , * , , or ), and an * expected target sequence length ; configure the * search model in with lod scores relative to the * background frequencies in . * * Returns: on success; the profile now contains * scores and is ready for searching target sequences. * * Throws: on allocation error. */ int p7_ProfileConfig(const P7_HMM *hmm, const P7_BG *bg, P7_PROFILE *gm, int L, int mode) { int k, x, z; /* counters over states, residues, annotation */ int status; float *occ = NULL; float *tp, *rp; float sc[p7_MAXCODE]; float Z; /* Contract checks */ if (gm->abc->type != hmm->abc->type) ESL_XEXCEPTION(eslEINVAL, "HMM and profile alphabet don't match"); if (hmm->M > gm->allocM) ESL_XEXCEPTION(eslEINVAL, "profile too small to hold HMM"); if (! (hmm->flags & p7H_CONS)) ESL_XEXCEPTION(eslEINVAL, "HMM must have a consensus to transfer to the profile"); /* Copy some pointer references and other info across from HMM */ gm->M = hmm->M; gm->max_length = hmm->max_length; gm->mode = mode; gm->roff = -1; gm->eoff = -1; gm->offs[p7_MOFFSET] = -1; gm->offs[p7_FOFFSET] = -1; gm->offs[p7_POFFSET] = -1; if (gm->name != NULL) free(gm->name); if (gm->acc != NULL) free(gm->acc); if (gm->desc != NULL) free(gm->desc); if ((status = esl_strdup(hmm->name, -1, &(gm->name))) != eslOK) goto ERROR; if ((status = esl_strdup(hmm->acc, -1, &(gm->acc))) != eslOK) goto ERROR; if ((status = esl_strdup(hmm->desc, -1, &(gm->desc))) != eslOK) goto ERROR; if (hmm->flags & p7H_RF) strcpy(gm->rf, hmm->rf); if (hmm->flags & p7H_MMASK) strcpy(gm->mm, hmm->mm); if (hmm->flags & p7H_CONS) strcpy(gm->consensus, hmm->consensus); /* must be present, actually, so the flag test is just for symmetry w/ other optional HMM fields */ if (hmm->flags & p7H_CS) strcpy(gm->cs, hmm->cs); for (z = 0; z < p7_NEVPARAM; z++) gm->evparam[z] = hmm->evparam[z]; for (z = 0; z < p7_NCUTOFFS; z++) gm->cutoff[z] = hmm->cutoff[z]; for (z = 0; z < p7_MAXABET; z++) gm->compo[z] = hmm->compo[z]; /* Entry scores. */ if (p7_profile_IsLocal(gm)) { /* Local mode entry: occ[k] /( \sum_i occ[i] * (M-i+1)) * (Reduces to uniform 2/(M(M+1)) for occupancies of 1.0) */ Z = 0.; ESL_ALLOC(occ, sizeof(float) * (hmm->M+1)); if ((status = p7_hmm_CalculateOccupancy(hmm, occ, NULL)) != eslOK) goto ERROR; for (k = 1; k <= hmm->M; k++) Z += occ[k] * (float) (hmm->M-k+1); for (k = 1; k <= hmm->M; k++) p7P_TSC(gm, k-1, p7P_BM) = log(occ[k] / Z); /* note off-by-one: entry at Mk stored as [k-1][BM] */ free(occ); } else /* glocal modes: left wing retraction; must be in log space for precision */ { Z = log(hmm->t[0][p7H_MD]); p7P_TSC(gm, 0, p7P_BM) = log(1.0 - hmm->t[0][p7H_MD]); for (k = 1; k < hmm->M; k++) { p7P_TSC(gm, k, p7P_BM) = Z + log(hmm->t[k][p7H_DM]); Z += log(hmm->t[k][p7H_DD]); } } /* E state loop/move probabilities: nonzero for MOVE allows loops/multihits * N,C,J transitions are set later by length config */ if (p7_profile_IsMultihit(gm)) { gm->xsc[p7P_E][p7P_MOVE] = -eslCONST_LOG2; gm->xsc[p7P_E][p7P_LOOP] = -eslCONST_LOG2; gm->nj = 1.0f; } else { gm->xsc[p7P_E][p7P_MOVE] = 0.0f; gm->xsc[p7P_E][p7P_LOOP] = -eslINFINITY; gm->nj = 0.0f; } /* Transition scores. */ for (k = 1; k < gm->M; k++) { tp = gm->tsc + k * p7P_NTRANS; tp[p7P_MM] = log(hmm->t[k][p7H_MM]); tp[p7P_MI] = log(hmm->t[k][p7H_MI]); tp[p7P_MD] = log(hmm->t[k][p7H_MD]); tp[p7P_IM] = log(hmm->t[k][p7H_IM]); tp[p7P_II] = log(hmm->t[k][p7H_II]); tp[p7P_DM] = log(hmm->t[k][p7H_DM]); tp[p7P_DD] = log(hmm->t[k][p7H_DD]); } /* Match emission scores. */ sc[hmm->abc->K] = -eslINFINITY; /* gap character */ sc[hmm->abc->Kp-2] = -eslINFINITY; /* nonresidue character */ sc[hmm->abc->Kp-1] = -eslINFINITY; /* missing data character */ for (k = 1; k <= hmm->M; k++) { for (x = 0; x < hmm->abc->K; x++) sc[x] = log((double)hmm->mat[k][x] / bg->f[x]); esl_abc_FExpectScVec(hmm->abc, sc, bg->f); for (x = 0; x < hmm->abc->Kp; x++) { rp = gm->rsc[x] + k * p7P_NR; rp[p7P_MSC] = sc[x]; } } /* Insert emission scores */ /* SRE, Fri Dec 5 08:41:08 2008: We currently hardwire insert scores * to 0, i.e. corresponding to the insertion emission probabilities * being equal to the background probabilities. Benchmarking shows * that setting inserts to informative emission distributions causes * more problems than it's worth: polar biased composition hits * driven by stretches of "insertion" occur, and are difficult to * correct for. */ for (x = 0; x < gm->abc->Kp; x++) { for (k = 1; k < hmm->M; k++) p7P_ISC(gm, k, x) = 0.0f; p7P_ISC(gm, hmm->M, x) = -eslINFINITY; /* init I_M to impossible. */ } for (k = 1; k <= hmm->M; k++) p7P_ISC(gm, k, gm->abc->K) = -eslINFINITY; /* gap symbol */ for (k = 1; k <= hmm->M; k++) p7P_ISC(gm, k, gm->abc->Kp-2) = -eslINFINITY; /* nonresidue symbol */ for (k = 1; k <= hmm->M; k++) p7P_ISC(gm, k, gm->abc->Kp-1) = -eslINFINITY; /* missing data symbol */ #if 0 /* original (informative) insert setting: relies on sc[K, Kp-1] initialization to -inf above */ for (k = 1; k < hmm->M; k++) { for (x = 0; x < hmm->abc->K; x++) sc[x] = log(hmm->ins[k][x] / bg->f[x]); esl_abc_FExpectScVec(hmm->abc, sc, bg->f); for (x = 0; x < hmm->abc->Kp; x++) { rp = gm->rsc[x] + k*p7P_NR; rp[p7P_ISC] = sc[x]; } } for (x = 0; x < hmm->abc->Kp; x++) p7P_ISC(gm, hmm->M, x) = -eslINFINITY; /* init I_M to impossible. */ #endif /* Remaining specials, [NCJ][MOVE | LOOP] are set by ReconfigLength() */ gm->L = 0; /* force ReconfigLength to reconfig */ if ((status = p7_ReconfigLength(gm, L)) != eslOK) goto ERROR; return eslOK; ERROR: if (occ != NULL) free(occ); return status; } /* Function: p7_ReconfigLength() * Synopsis: Set the target sequence length of a model. * * Purpose: Given a model already configured for scoring, in some * particular algorithm mode; reset the expected length * distribution of the profile for a new mean of . * * This doesn't affect the length distribution of the null * model. That must also be reset, using . * * We want this routine to run as fast as possible, because * the caller needs to dynamically reconfigure the model * for the length of each target sequence in a database * search. The profile has precalculated nj>, * the number of times the J state is expected to be used, * based on the E state loop transition in the current * configuration. * * Returns: on success; xsc[NCJ] scores are set here. These * control the target length dependence of the model. */ int p7_ReconfigLength(P7_PROFILE *gm, int L) { float ploop, pmove; /* Configure N,J,C transitions so they bear L/(2+nj) of the total * unannotated sequence length L. */ pmove = (2.0f + gm->nj) / ((float) L + 2.0f + gm->nj); /* 2/(L+2) for sw; 3/(L+3) for fs */ ploop = 1.0f - pmove; gm->xsc[p7P_N][p7P_LOOP] = gm->xsc[p7P_C][p7P_LOOP] = gm->xsc[p7P_J][p7P_LOOP] = log(ploop); gm->xsc[p7P_N][p7P_MOVE] = gm->xsc[p7P_C][p7P_MOVE] = gm->xsc[p7P_J][p7P_MOVE] = log(pmove); gm->L = L; return eslOK; } /* Function: p7_ReconfigMultihit() * Synopsis: Quickly reconfig model into multihit mode for target length . * * Purpose: Given a profile that's already been configured once, * quickly reconfigure it into a multihit mode for target * length . * * This gets called in domain definition, when we need to * flip the model in and out of unihit mode to * process individual domains. * * Note: You can't just flip uni/multi mode alone, because that * parameterization also affects target length * modeling. You need to make sure uni vs. multi choice is * made before the length model is set, and you need to * make sure the length model is recalculated if you change * the uni/multi mode. Hence, these functions call * . */ int p7_ReconfigMultihit(P7_PROFILE *gm, int L) { gm->xsc[p7P_E][p7P_MOVE] = -eslCONST_LOG2; gm->xsc[p7P_E][p7P_LOOP] = -eslCONST_LOG2; gm->nj = 1.0f; return p7_ReconfigLength(gm, L); } /* Function: p7_ReconfigUnihit() * Synopsis: Quickly reconfig model into unihit mode for target length . * * Purpose: Given a profile that's already been configured once, * quickly reconfigure it into a unihit mode for target * length . * * This gets called in domain definition, when we need to * flip the model in and out of unihit mode to * process individual domains. */ int p7_ReconfigUnihit(P7_PROFILE *gm, int L) { gm->xsc[p7P_E][p7P_MOVE] = 0.0f; gm->xsc[p7P_E][p7P_LOOP] = -eslINFINITY; gm->nj = 0.0f; return p7_ReconfigLength(gm, L); } /***************************************************************** * 2. Unit tests *****************************************************************/ #ifdef p7MODELCONFIG_TESTDRIVE /* The Config test simply makes sure a random profile passes * a Validate() check. */ static void utest_Config(P7_HMM *hmm, P7_BG *bg) { char *msg = "modelconfig.c::p7_ProfileConfig() unit test failed"; P7_PROFILE *gm = NULL; if ((gm = p7_profile_Create(hmm->M, hmm->abc)) == NULL) esl_fatal(msg); if (p7_ProfileConfig(hmm, bg, gm, 350, p7_LOCAL) != eslOK) esl_fatal(msg); if (p7_profile_Validate(gm, NULL, 0.0001) != eslOK) esl_fatal(msg); p7_profile_Destroy(gm); return; } /* Note that calculate_occupancy has moved to p7_hmm.c, but * unit tests over there aren't hooked up yet; so leave a copy of the unit test * here for now. */ static void utest_occupancy(P7_HMM *hmm) { char *msg = "modelconfig.c::calculate_occupancy() unit test failed"; float *occ; float x; occ = malloc(sizeof(float) * (hmm->M+1)); p7_hmm_CalculateOccupancy(hmm, occ, NULL); x = esl_vec_FSum(occ+1, hmm->M) / (float) hmm->M; if (esl_FCompare(x, 0.6, 0.1) != eslOK) esl_fatal(msg); free(occ); return; } #endif /*p7MODELCONFIG_TESTDRIVE*/ /***************************************************************** * 3. Test driver *****************************************************************/ #ifdef p7MODELCONFIG_TESTDRIVE /* gcc -g -Wall -Dp7MODELCONFIG_TESTDRIVE -I. -I../easel -L. -L../easel -o modelconfig_utest modelconfig.c -lhmmer -leasel -lm * ./modelconfig_utest */ #include "easel.h" #include "p7_config.h" #include "hmmer.h" int main(int argc, char **argv) { ESL_ALPHABET *abc = NULL; ESL_RANDOMNESS *r = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; int M = 10000; if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create amino alphabet"); if ((r = esl_randomness_CreateFast(0)) == NULL) esl_fatal("failed to create randomness"); if (p7_hmm_Sample(r, M, abc, &hmm) != eslOK) esl_fatal("failed to sample random HMM"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to created null model"); utest_Config(hmm, bg); utest_occupancy(hmm); p7_hmm_Destroy(hmm); p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); return eslOK; } #endif /*p7MODELCONFIG_TESTDRIVE*/ /***************************************************************** * 4. Statistics collection driver. *****************************************************************/ #ifdef p7MODELCONFIG_STATS /* gcc -g -Wall -Dp7MODELCONFIG_STATS -I. -I../easel -L. -L../easel -o statprog modelconfig.c -lhmmer -leasel -lm * ./statprog */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_dmatrix.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_sq.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-i", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "sample by two-step ideal rule, not from profile", 0}, { "-m", eslARG_INFILE, NULL, NULL, NULL, NULL, NULL, "-u,-M", "input HMM from file instead of sampling",0 }, { "-n", eslARG_INT, "100000", NULL, "n>0", NULL, NULL, NULL, "number of seqs to sample", 0 }, { "-s", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-m,-u", "make sampled HMM uniform transitions, as S/W", 0}, { "-u", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-m,-s", "make sampled HMM ungapped", 0 }, { "-L", eslARG_INT, "400", NULL,"n>=0", NULL, NULL, NULL, "set expected length from profile to ", 0 }, { "-M", eslARG_INT, "50", NULL, "n>0", NULL, NULL, "-m", "set sampled model length to ", 0 }, { "-2", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "emulate HMMER2 configuration", 0 }, { "--ips", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "output PostScript mx of i endpoints to ", 0 }, { "--kps", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "output PostScript mx of k endpoints to ", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "./statprog [options]"; static int ideal_local_endpoints(ESL_RANDOMNESS *r, P7_HMM *hmm, ESL_SQ *sq, P7_TRACE *tr, int Lbins, int *ret_i1, int *ret_i2, int *ret_k1, int *ret_k2); static int profile_local_endpoints(ESL_RANDOMNESS *r, P7_HMM *core, P7_PROFILE *gm, ESL_SQ *sq, P7_TRACE *tr, int Lbins, int *ret_i1, int *ret_i2, int *ret_k1, int *ret_k2); int main(int argc, char **argv) { ESL_ALPHABET *abc = NULL; /* sequence alphabet */ ESL_GETOPTS *go = NULL; /* command line processing */ ESL_RANDOMNESS *r = NULL; /* source of randomness */ P7_HMM *hmm = NULL; /* sampled HMM to emit from */ P7_HMM *core = NULL; /* safe copy of the HMM, before config */ P7_BG *bg = NULL; /* null model */ ESL_SQ *sq = NULL; /* sampled sequence */ P7_TRACE *tr = NULL; /* sampled trace */ P7_PROFILE *gm = NULL; /* profile */ int i,j; int i1,i2; int k1,k2; int iseq; FILE *fp = NULL; double expected; int do_ilocal; char *hmmfile = NULL; int nseq; int do_swlike; int do_ungapped; int L; int M; int do_h2; char *ipsfile = NULL; char *kpsfile = NULL; ESL_DMATRIX *imx = NULL; ESL_DMATRIX *kmx = NULL; ESL_DMATRIX *iref = NULL; /* reference matrix: expected i distribution under ideality */ int Lbins; int status; char errbuf[eslERRBUFSIZE]; /***************************************************************** * Parse the command line *****************************************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) esl_fatal("Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) esl_fatal("Failed to parse command line: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") == TRUE) { puts(usage); puts("\n where options are:\n"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* 0=all docgroups; 2 = indentation; 80=textwidth*/ return eslOK; } do_ilocal = esl_opt_GetBoolean(go, "-i"); hmmfile = esl_opt_GetString (go, "-m"); nseq = esl_opt_GetInteger(go, "-n"); do_swlike = esl_opt_GetBoolean(go, "-s"); do_ungapped = esl_opt_GetBoolean(go, "-u"); L = esl_opt_GetInteger(go, "-L"); M = esl_opt_GetInteger(go, "-M"); do_h2 = esl_opt_GetBoolean(go, "-2"); ipsfile = esl_opt_GetString (go, "--ips"); kpsfile = esl_opt_GetString (go, "--kps"); if (esl_opt_ArgNumber(go) != 0) { puts("Incorrect number of command line arguments."); printf("Usage: %s [options]\n", argv[0]); return eslFAIL; } r = esl_randomness_CreateFast(0); if (hmmfile != NULL) { /* Read the HMM (and get alphabet from it) */ P7_HMMFILE *hfp = NULL; status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); if ((status = p7_hmmfile_Read(hfp, &abc, &hmm)) != eslOK) { if (status == eslEOD) esl_fatal("read failed, HMM file %s may be truncated?", hmmfile); else if (status == eslEFORMAT) esl_fatal("bad file format in HMM file %s", hmmfile); else if (status == eslEINCOMPAT) esl_fatal("HMM file %s contains different alphabets", hmmfile); else esl_fatal("Unexpected error in reading HMMs"); } M = hmm->M; p7_hmmfile_Close(hfp); } else { /* Or sample the HMM (create alphabet first) */ abc = esl_alphabet_Create(eslAMINO); if (do_ungapped) p7_hmm_SampleUngapped(r, M, abc, &hmm); else if (do_swlike) p7_hmm_SampleUniform (r, M, abc, 0.05, 0.5, 0.05, 0.2, &hmm); /* tmi, tii, tmd, tdd */ else p7_hmm_Sample (r, M, abc, &hmm); } Lbins = M; imx = esl_dmatrix_Create(Lbins, Lbins); iref = esl_dmatrix_Create(Lbins, Lbins); kmx = esl_dmatrix_Create(M, M); esl_dmatrix_SetZero(imx); esl_dmatrix_SetZero(iref); esl_dmatrix_SetZero(kmx); tr = p7_trace_Create(); sq = esl_sq_CreateDigital(abc); bg = p7_bg_Create(abc); core = p7_hmm_Clone(hmm); if (do_h2) { gm = p7_profile_Create(hmm->M, abc); p7_H2_ProfileConfig(hmm, bg, gm, p7_UNILOCAL); } else { gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_UNILOCAL); if (p7_hmm_Validate (hmm, NULL, 0.0001) != eslOK) esl_fatal("whoops, HMM is bad!"); if (p7_profile_Validate(gm, NULL, 0.0001) != eslOK) esl_fatal("whoops, profile is bad!"); } /* Sample endpoints. * Also sample an ideal reference distribution for i endpoints. i * endpoints are prone to discretization artifacts, when emitted * sequences have varying lengths. Taking log odds w.r.t. an ideal * reference that is subject to the same discretization artifacts * cancels out the effect. */ for (iseq = 0; iseq < nseq; iseq++) { if (do_ilocal) ideal_local_endpoints (r, core, sq, tr, Lbins, &i1, &i2, &k1, &k2); else profile_local_endpoints(r, core, gm, sq, tr, Lbins, &i1, &i2, &k1, &k2); imx->mx[i1-1][i2-1] += 1.; kmx->mx[k1-1][k2-1] += 1.; /* reference distribution for i */ ideal_local_endpoints (r, core, sq, tr, Lbins, &i1, &i2, &k1, &k2); iref->mx[i1-1][i2-1] += 1.; } /* Adjust both mx's to log_2(obs/exp) ratio */ printf("Before normalization/log-odds:\n"); printf(" i matrix values range from %f to %f\n", dmx_upper_min(imx), dmx_upper_max(imx)); printf(" k matrix values range from %f to %f\n", dmx_upper_min(kmx), dmx_upper_max(kmx)); printf("iref matrix values range from %f to %f\n", dmx_upper_min(iref), dmx_upper_max(iref)); expected = (double) nseq * 2. / (double) (M*(M+1)); for (i = 0; i < kmx->m; i++) for (j = i; j < kmx->n; j++) kmx->mx[i][j] = log(kmx->mx[i][j] / expected) / log(2.0); for (i = 0; i < imx->m; i++) for (j = i; j < imx->m; j++) if (iref->mx[i][j] == 0. && imx->mx[i][j] == 0.) imx->mx[i][j] = 0.; else if (iref->mx[i][j] == 0.) imx->mx[i][j] = eslINFINITY; else if (imx->mx[i][j] == 0.) imx->mx[i][j] = -eslINFINITY; else imx->mx[i][j] = log(imx->mx[i][j] / iref->mx[i][j]) / log(2.0); /* Print ps files */ if (kpsfile != NULL) { if ((fp = fopen(kpsfile, "w")) == NULL) esl_fatal("Failed to open output postscript file %s", kpsfile); dmx_Visualize(fp, kmx, -4., 5.); fclose(fp); } if (ipsfile != NULL) { if ((fp = fopen(ipsfile, "w")) == NULL) esl_fatal("Failed to open output postscript file %s", ipsfile); dmx_Visualize(fp, imx, -4., 5.); /* dmx_Visualize(fp, imx, dmx_upper_min(imx), dmx_upper_max(imx)); */ fclose(fp); } printf("After normalization/log-odds:\n"); printf("i matrix values range from %f to %f\n", dmx_upper_min(imx), dmx_upper_max(imx)); printf("k matrix values range from %f to %f\n", dmx_upper_min(kmx), dmx_upper_max(kmx)); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(core); p7_hmm_Destroy(hmm); p7_trace_Destroy(tr); esl_sq_Destroy(sq); esl_dmatrix_Destroy(imx); esl_dmatrix_Destroy(kmx); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return eslOK; } /* ideal_local_endpoints() * * Purpose: Implementation of the "two-step" fragment sampling * algorithm, sampling a uniform local fragment w.r.t. * sequence coords, by first sampling a complete * sequence of length L from ; then choosing * a random fragment uniformly from all * possible $\frac{L(L+1)/2}$ fragments; then finding * local alignment coordinates wrt model and sequence, * using convention that local alignment starts/stops * with match states. (Thus, if the initially selected * i1 or i2 were generated by insert states, bounds * are moved to reach first/last match state.) * * The caller also provides an allocated sequence and * traceback

, as storage to be provided to * . They contain the generated global * sequence and trace upon return (not a local trace, note). * * i endpoints are normalized/discretized to 1.., so * we can collate i statistics from sampled sequences of * varying L. Note this causes discretization artifacts, * leading to underrepresentation of j=M and * overrepresentation of i=1. * * This routine is only intended for collecting endpoint * statistics (i1,i2,k1,k2); it does not generate a local * alignment trace. (xref milestone 2, STL11/115). * * Returns: on success; returns normalized/binned sequence * coords in <*ret_i1> and <*ret_i2> in range <1..Lbins> and * the model entry/exit coords in <*ret_k1> and <*ret_k2> in * range <1..M>. By internal def'n of local alignment endpoints, * M_k1 emits residue x_i1, M_k2 emits residue x_i2. * * Xref: STL11/142-143 */ static int ideal_local_endpoints(ESL_RANDOMNESS *r, P7_HMM *hmm, ESL_SQ *sq, P7_TRACE *tr, int Lbins, int *ret_i1, int *ret_i2, int *ret_k1, int *ret_k2) { int status; int tpos; int i1, i2, k1,k2, t1,t2; int all_insert; int failsafe = 0; /* a failsafe timer for rejection sampling */ do { if (failsafe++ == 1000) ESL_XEXCEPTION(eslENOHALT, "failed to obtain local alignment that wasn't all inserts"); if ((status = p7_CoreEmit(r, hmm, sq, tr)) != eslOK) goto ERROR; /* a simple way to sample uniformly from upper triangle is by rejection * this do/while cannot infinite loop, doesn't need failsafe */ do { i1 = 1 + esl_rnd_Roll(r, sq->n); i2 = 1 + esl_rnd_Roll(r, sq->n); } while (i1 > i2); /* Get initial k1,k2 coords: this step must work in a core model, * i1/i2 were generated by an M or I. Also record t1,t2 endpoints * on core's trace. */ for (tpos = 0; tpos < tr->N; tpos++) if (tr->i[tpos] == i1) { t1 = tpos; k1 = tr->k[tpos]; break; } for (tpos = tr->N-1; tpos >= 0; tpos--) if (tr->i[tpos] == i2) { t2 = tpos; k2 = tr->k[tpos]; break; } /* Enforce the definition of local alignment endpoints being * match-delimited - roll up any leading/trailing I states. * Watch out for pathological case of a local fragment that * includes no M state at all. */ all_insert = FALSE; for (; t1 <= t2; t1++) if (tr->st[t1] == p7T_M) break; for (; t2 >= t1; t2--) if (tr->st[t2] == p7T_M) break; if (t2 < t1) all_insert = TRUE; /* sufficient to check both. */ i1 = tr->i[t1]; i2 = tr->i[t2]; k1 = tr->k[t1]; k2 = tr->k[t2]; } while (all_insert); /* Normalize sequence coords. * They're 1..L now; make them 1..Lbins */ *ret_i1 = ((i1-1) * Lbins / sq->n) + 1; *ret_i2 = ((i2-1) * Lbins / sq->n) + 1; *ret_k1 = k1; *ret_k2 = k2; return eslOK; ERROR: *ret_i1 = 0.; *ret_i2 = 0.; *ret_k1 = 0; *ret_k2 = 0; return status; } /* profile_local_endpoints() * * Purpose: Wrapper around , sampling a local * alignment fragment from the profile's probabilistic model * (which may be the implicit model of HMMER3, or the * Plan7 model of HMMER2), and reporting coordinates * of the fragment w.r.t. both model and sequence. * * To simplify the implementation, the profile must be in * mode, not mode, so we know we * only have to deal with a single hit per sampled * sequence. * * We want to be relative to the sequence coords * of a complete (global) sampled sequence that we could * have sampled this local alignment from; but the * we initially get are relative to our profile-sampled * trace, so they are offset both by N-generated residues * that occur in the profile and by residues that the * profile's local entry skipped. To translate from * profile/sequence coords to core model/sequence coords, * we use rejection sampling: sample traces from the core * model until we find one that uses the same statetypes * at *initial* entry/exit points ,, then use * that sample's sequence to determine offsets and correct * reference frame. * * Local alignment endpoints are defined to be * match-delimited. However, an H3 model allows exit on * either a D or M state. Thus, the initially sampled end * point k2 may need to be rolled back to last M state, to * satisfy local alignment endpoint definition. Entries are * not a problem; both H2 and H3 profiles can only enter on * a M state. (This rollback has to occur after we've * matched a core trace to the profile trace to determine * i offsets.) * * Then, sampling from both the core model and the profile * in the same routine introduces a complication: * conceivably, profile configuration alters the transition * probabilities in the core model (by adding E> * transitions and renormalizing the M transition * distributions, for example; H2 configuration does this, * though H3 does not). So you can't the * hmm> safely. To avoid such things, the caller * provides a clean copy of the core model in . * * i endpoints are normalized/discretized to 1.., so * we can collate i statistics from sampled sequences of * varying L. Note this causes discretization artifacts, * leading to underrepresentation of j=M and * overrepresentation of i=1. * * Returns: on success; returns normalized sequence coords in * <*ret_i1> and <*ret_i2>, and the model entry/exit coords * in <*ret_k1> and <*ret_k2>. * * Xref: STL11/142-143 */ static int profile_local_endpoints(ESL_RANDOMNESS *r, P7_HMM *core, P7_PROFILE *gm, ESL_SQ *sq, P7_TRACE *tr, int Lbins, int *ret_i1, int *ret_i2, int *ret_k1, int *ret_k2) { int status; int i1,i2; int k1,k2; int t1,t2; /* entry/exit positions in local trace, tr */ int tg1, tg2; /* entry/exit positions in global trace, tr2 */ int tpos; int nterm, cterm; /* offsets at N, C terminus. */ int L; /* inferred length from 3-part patching */ ESL_SQ *sq2 = NULL; P7_TRACE *tr2 = NULL; int failsafe = 0; if (gm->mode != p7_UNILOCAL) ESL_XEXCEPTION(eslEINVAL, "profile must be unilocal"); if ((sq2 = esl_sq_CreateDigital(gm->abc)) == NULL) { status = eslEMEM; goto ERROR; } if ((tr = p7_trace_Create()) == NULL) { status = eslEMEM; goto ERROR; } /* sample local alignment from the implicit model */ if (gm->h2_mode) { if ((status = p7_H2_ProfileEmit(r, gm, sq, tr)) != eslOK) goto ERROR; } else { if ((status = p7_ProfileEmit(r, gm, sq, tr)) != eslOK) goto ERROR; } /* Get initial trace coords */ for (tpos = 0; tpos < tr->N; tpos++) if (tr->st[tpos] == p7T_B) { t1 = tpos+1; break; } for (tpos = tr->N-1; tpos >= 0; tpos--) if (tr->st[tpos] == p7T_E) { t2 = tpos-1; break; } /* Match a core trace to this local trace by rejection sampling; * this is to let us calculate sequence offsets; see comments above in preamble */ do { if (failsafe++ == 100000) ESL_XEXCEPTION(eslENOHALT, "failed to match core,local traces in %d tries\n", failsafe); if ((status = p7_CoreEmit(r, core, sq2, tr2)) != eslOK) goto ERROR; for (tpos = 0; tpos < tr2->N; tpos++) if (tr2->k[tpos] == tr->k[t1]) { tg1 = tpos; break; } for (tpos = tr2->N-1; tpos >= 0; tpos--) if (tr2->k[tpos] == tr->k[t2]) { tg2 = tpos; break; } } while (tr2->st[tg1] != tr->st[t1] && tr2->st[tg2] != tr->st[t2]); /* tg1..tg2 in core trace is now matched to t1..t2 in the profile trace. * Calculate # of residues preceding tg1 and following tg2 in the core trace. * A core trace can only generate residues from M or I states. */ for (nterm = 0, tpos = 0; tpos < tg1; tpos++) if (tr2->st[tpos] == p7T_M || tr2->st[tpos] == p7T_I) nterm++; for (cterm = 0, tpos = tr2->N-1; tpos > tg2; tpos--) if (tr2->st[tpos] == p7T_M || tr2->st[tpos] == p7T_I) cterm++; /* rectify the t2 endpoint, rolling back any trailing D path */ for (; t2 >= 0; t2--) if (tr->st[t2] == p7T_M) break; if (t2 < t1) ESL_XEXCEPTION(eslEINCONCEIVABLE, "this only happens on an all-D path through profile"); /* determine initial endpoint coords from t1 and t2 */ i1 = tr->i[t1]; i2 = tr->i[t2]; k1 = tr->k[t1]; k2 = tr->k[t2]; /* offset the i coords. */ L = (i2-i1+1) + nterm + cterm; i2 = (i2-i1+1) + nterm; i1 = nterm+1; /* normalize the i coords into range 1..Lbins, instead of 1..L */ i1 = ((i1-1) * Lbins / L) + 1; i2 = ((i2-1) * Lbins / L) + 1; *ret_i1 = i1; *ret_i2 = i2; *ret_k1 = k1; *ret_k2 = k2; p7_trace_Destroy(tr2); esl_sq_Destroy(sq2); return eslOK; ERROR: if (sq2 != NULL) esl_sq_Destroy(sq2); if (tr2 != NULL) p7_trace_Destroy(tr2); *ret_i1 = 0.; *ret_i2 = 0.; *ret_k1 = 0; *ret_k2 = 0; return status; } #endif /*p7MODELCONFIG_STATS*/ /* All the commentary below here is archaic and obsolete. * It is only a shadow of the current truth, and may mislead. * It is of archaeological interest only; needs to be whipped back * into shape in real documentation. */ /*---------------------------------------------------------------------- * Preamble. * * There are four search modes: * single-hit multi-hit * -------------------- ------------------------ * local | sw (p7_UNILOCAL) fs (p7_LOCAL) * glocal | s (p7_UNIGLOCAL) ls (p7_GLOCAL) * * Additionally, each search mode is configured for a particular * target length. Thus "LS/400" means a model configured for glocal, * multihit alignment of a target sequence of length 400. * *----------------------------------------------------------------------- * Exegesis. * * When you enter this module, you've got an HMM (P7_HMM) in "core" * probability form: t[], mat[], ins[] are all valid, normalized * probabilities. The routines here are used to create the "profile" * form (P7_PROFILE) of the model: tsc[], msc[], isc[], bsc[], esc[], * and xsc[] fields as integer log-odds scores. * * Also in the process, xt[] are set to their algorithm-dependent * probabilities, though these probabilities are only for reference. * * The configuration process breaks down into distinct conceptual steps: * * 1. Algorithm configuration. * An "algorithm mode" is chosen. This determines whether * alignments will allow local entry/exit in the model, and sets * the probabilities in xt[XTE], which determine * multi-hit/single-hit behavior. The "nj" value of the HMM is * also set here (the expected # of times the J state will be used; * 0 for single-hit mode and 1 for the default parameterization of * multihit modes). * * 2. Wing retraction. * In a profile, the D_1 and D_M states of the core model are * removed. The probability of the paths B->D1...->Mk ("BMk") that * enter D1 and use all D's before reaching M_k is treated instead * as an additional dollop of B->Mk entry probability, and the * probability of paths Mk->Dk+1...D_M->E ("MkE") is treated * instead as an additional dollop of Mk->E exit probability. The * MkE path probability is subtracted from the Mk->Dk+1 transition. * * In local algorithm modes, these extra dollops are ignored, and * the model is renormalized appropriately. That is, the algorithm * overrides all B->DDDD->M and/or M->DDDD->E path probabilities * with its own internal entry/exit probabilities. * * If the algorithm mode is "global" at either entry or exit, then * the internal entries are set to BMk and internal exits are set * to MkE, and the model is renormalized appropriately. That is, * the algorithm treats B->DDDD->M and/or M->DDDD->E path * probabilities as internal entries/exits, instead of allowing * dynamic programming algorithms to use the D_1 or D_M states. * * These two alternatives are represented differently in traces, * where an X state is used to signal 'missing data' in a local * alignment. Thus B->X->Mk indicates local entry, whereas B->Mk in * a trace indicates a wing-retracted B->DDD->Mk entry with respect * to the core HMM; similarly Mk->X->E indicates local exit, and * Mk->E indicates a Mk->DDDD->E path in the core HMM. * * Wing retraction is a compulsive detail with two purposes. First, * it removes a mute cycle from the model, B->D1 ...D_M->E, which * cannot be correctly and efficiently dealt with by DP * recursions. (A DP algorithm could just *ignore* that path * though, and ignore the negligible amount of probability in it.) * Second, wing retraction reconciles the algorithm-dependent * entry/exit probabilities with the core model. For algorithms * that impose local internal entry/exit, we don't want there to be * any additional probability coming from "internal" B->DDD->M and * M->DDD->E paths, so wing retraction takes it away. * * 3. Local alignment D-path leveling. * For fully local alignments, we want every fragment ij (starting * at match i, ending from match j) to be equiprobable. There are * M(M+1)/2 possible such fragments, so the probability of each * one is 2/M(M+1). * * Notionally, we imagine a "model" consisting of the M(M+1)/2 * possible fragments, with entry probability of 2/M(M+1) for each. * * Operationally, we achieve this by a trick inspired by a * suggestion from Bill Bruno. Bill suggested that for a model with * no delete states, if we set begin[k] = 1/(M-k+1) and end[k] = * (M-k+1) / [M(M+1)/2], all fragments are equiprobable: the prob * of any given fragment is * b_i * e_j * \prod_{k=i}^{j-1} (1-e_k); * that is, the fragment also includes (j-i) penalizing terms for * *not* ending at i..j-1. Remarkably, this gives the result we * want: this product is always 2/M(M+1), for any ij. * * However, D->D transitions throw a wrench into this trick, * though. A local alignment that goes M_i->D...D->M_j, for * example, only gets hit with one not-end penalty (for the * M_i->D). This means that paths including deletions will be * artifactually favored. * * A solution is to subtract log(1-e_k) from the deletion * transition scores as well as the match transition scores. Thus * one log(1-e_k) penalty is always exacted upon transitioning from * any node k->k+1. This is *not* part of the probabilistic model: * it is a score accounting trick that forces the DP algorithms to * associate a log(1-e_k) penalty for each node k->k+1 transition, * which makes the DP calculations give the result desired for our * *notional* probabilistic model with a single 2/M(M+1) transition * for each possible fragment. (A similar accounting trick is the * use of log-odds scoring, where we associate null model * transitions and emissions with appropriate terms in the HMM, to * assure that the final score of any path accounts for all the * desired probability terms in an overall log-odds score). The * overall score of any fragment can be rearranged such that there * is one term consisting of a product of all these penalties * b_i * * e_j = 2/M(M+1), and another term consisting of the actual * model transition path score between i,j. * * 4. Target length dependence. * Given a particular target sequence of length L, we want our HMM score * to be as independent as possible of L. Otherwise, long sequences will * give higher scores, even if they are nonhomologous. * * The traditional solution to this is Karlin/Altschul statistics, * which tells us that E(s=x) = KMNe^-{\lambda x}, so we expect to * have to make a -1 bit score correction for every 2x increase in * target sequence length (ignoring edge correction effects). K/A * statistics have been proven for local Viterbi single-hit * ungapped alignments. There is abundant literature showing they * hold empirically for local Viterbi single-hit gapped * alignments. In my hands the length dependence (though not the * form of the distribution) holds for any single-hit alignment * (local or glocal, Viterbi or forward) but it does not * hold for multihit alignment modes. * * HMMER's solution is to build the length dependence right into * the probabilistic model, so that we have a full probabilistic * model of the target sequence. We match the expected lengths of * the model M and the null model R by setting the p1, N, C, and J * transitions appropriately. R has to emit the whole sequence, so * it has a self-transition of L/(L+1). N, C, and J have to emit * (L-(k+1)x) residues of the sequence, where x is the expected * length of an alignment to the core model, and k is the expected * number of times that we cycle through the J state. k=0 in sw * mode, and k=1 in fs/ls mode w/ the standard [XTE][LOOP] * probability of 0.5. * * 5. Conversion of probabilities to integer log-odds scores. * This step incorporates the contribution of the null model, * and converts floating-point probs to the scaled integer log-odds * score values that are used by the DP alignment routines. * * Step 1 is done by the main p7_ProfileConfig() function, which takes * a choice of algorithm mode as an argument. * * Step 2 is done by the *wing_retraction*() functions, which also * go ahead and convert the affected transitions to log-odds scores; * left wing retraction sets bsc[], right wing retraction sets * esc[] and tsc[TM*]. * * Step 3 is carried out by one of two delete path accounting routines, * which go ahead and set tsc[TD*]. * * Step 4 is carried out by the p7_ReconfigLength() routine. * * Step 5 is carried out for all remaining scores by logoddsify_the_rest(). * * Note that the profile never exists in a configured probability * form. The probability model for the search profile is implicit, not * explicit, because of the handling of local entry/exit transitions. * You can see this in more detail in emit.c:p7_ProfileEmit() * function, which samples sequences from the profile's probabilistic * model. * * So, overall, to find where the various scores and probs are set: * bsc : wing retraction (section 2) * esc : wing retraction (section 2) * tsc[TM*] : wing retraction (section 2) * tsc[TI*] : logoddsify_the_rest() (section 4) * tsc[TD*] : dpath leveling (section 3) * p1 : target_ldependence() (section 4) * xt[NCJ] : target_ldependence() (section 4) * xsc (all): logoddsify_the_rest() (section 4) * msc : logoddsify_the_rest() (section 5) * isc : logoddsify_the_rest() (section 5) */ /***************************************************************** * 2. The four config_*() functions for specific algorithm modes. *****************************************************************/ /***************************************************************** * Exegesis. * * The following functions are the Plan7 equivalent of choosing * different alignment styles (fully local, fully global, * global/local, multihit, etc.) * * When you come into a configuration routine, the following * probabilities are valid in the model: * 1. t[1..M-1][0..6]: all the state transitions. * (Node M is special: it has only a match and a delete state, * no insert state, and M_M->E = 1.0 and D_M->E = 1.0 by def'n.) * 2. mat[1..M][]: all the match emissions. * 3. ins[1..M-1][]: all the insert emissions. Note that there is * no insert state in node M. * 4. tbd1: the B->D1 probability. The B->M1 probability is 1-tbd1. * These are the "data-dependent" probabilities in the model. * * The configuration routine gets to set the "algorithm-dependent" * probabilities: * 1. xt[XTN][MOVE,LOOP] dist controls unaligned N-terminal seq. * The higher xt[XTN][LOOP] is, the more unaligned seq we allow. * Similarly, xt[XTC][MOVE,LOOP] dist controls unaligned C-terminal * seq, and xt[XTJ][MOVE,LOOP] dist controls length of unaligned sequence * between multiple copies of a domain. Normally, if these are nonzero, * they are all set to be equal to hmm->p1, the loop probability * for the null hypothesis (see below). * 2. xt[XTE][MOVE,LOOP] distribution controls multihits. * Setting xt[XTE][LOOP] to 0.0 forces one hit per model. * 3. begin[1..M] controls entry probabilities. An algorithm * mode either imposes internal begin probabilities, or leaves begin[1] * as 1.0 and begin[k] = 0.0 for k>1. * 4. end[1..M] controls exit probabilities. An algorithm mode either * imposes internal exit probabilities, or leaves end[M] = 1.0 * and end[k] = 0.0 for kJ) = 0 * e.g. no multidomain hits * * 2) t(N->N) = t(C->C) = t(J->J) = hmm->p1 * e.g. unmatching sequence scores zero, and * N->B first-model score is equal to J->B another-model score. * * These constraints are obeyed in the default Config() functions below, * but in the future (say, when HMM editing may be allowed) we'll have * to remember this. Non-equality of the summed domain scores and * the total sequence score is a really easy "red flag" for people to * notice and report as a bug, even if it may make probabilistic * sense not to meet either constraint for certain modeling problems. ***************************************************************** */ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/p7_scoredata.c0000664361611702660230000003626712473612614015615 0ustar wheelerteddy/* The Plan7 SCOREDATA data structure, which holds a compact representation * of substitution scores and maximal extensions, used by nhmmer. * * Contents: * 1. The P7_SCOREDATA object: allocation, initialization, destruction. * 2. Unit tests. * 3. Test driver. * 4. Copyright and license. * */ #include "p7_config.h" #include #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_vectorops.h" #include "esl_random.h" #include "esl_dirichlet.h" #include "hmmer.h" /********************************************************************* *# 1. The P7_SCOREDATA object: allocation, initialization, destruction. *********************************************************************/ /* Function: scoredata_GetSSVScoreArrays() * Synopsis: Get compact representation of substitution scores and maximal extensions * * Purpose: Extract 8-bit (MSV-style) substitution scores from optimized * matrix. These scores will be used in both standard MSV diagonal * recovery and FM-MSV diagonal scoring. * * Optionally, for each position in the model, capture the maximum * possible score that can be added to a diagonal's score (in both * directions) by extending lengths 1..10. These extension scores * are used in FM-MSV's pruning step. * * Once a hit passes the SSV filter, and the prefix/suffix * values of P7_SCOREDATA are required (to establish windows * around SSV diagonals), p7_hmm_ScoreDataComputeRest() * must be called. * * * Args: om - P7_OPROFILE containing scores used to produce SCOREDATA contents * data - where scores and will be stored * do_opt_ext - boolean, TRUE if optimal-extension scores are required (for FM-MSV) * scale - used to produce 8-bit extracted scores * bias - used to produce 8-bit extracted scores * * Returns: data->scores and possibly ->opt_ext_(fwd|rev) are filled in; * return eslEMEM on allocation failure, eslOK otherwise. */ static int scoredata_GetSSVScoreArrays(P7_OPROFILE *om, P7_PROFILE *gm, P7_SCOREDATA *data ) { int i, j, status; //gather values from gm->rsc into a succinct 2D array float *max_scores; float sc_fwd, sc_rev; int K = om->abc->Kp; data->M = om->M; if (!gm) { // get values for the standard pipeline data->type = p7_sd_std; ESL_ALLOC(data->ssv_scores, (om->M + 1) * K * sizeof(uint8_t)); p7_oprofile_GetSSVEmissionScoreArray(om, data->ssv_scores); } else {// need float, unscaled scores, and other stuff used in the FMindex-based SSV pipeline, data->type = p7_sd_fm; ESL_ALLOC(data->ssv_scores_f, (om->M + 1) * K * sizeof(float)); ESL_ALLOC(max_scores, (om->M + 1) * sizeof(float)); for (i = 1; i <= om->M; i++) { max_scores[i] = 0; for (j=0; jabc,j)) { data->ssv_scores_f[i*K + j] = gm->rsc[j][(i) * p7P_NR + p7P_MSC]; if (data->ssv_scores_f[i*K + j] > max_scores[i]) max_scores[i] = data->ssv_scores_f[i*K + j]; } } } //for each position in the query, what's the highest possible score achieved by extending X positions, for X=1..10 ESL_ALLOC(data->opt_ext_fwd, (om->M + 1) * sizeof(float*)); ESL_ALLOC(data->opt_ext_rev, (om->M + 1) * sizeof(float*)); for (i=1; iM; i++) { ESL_ALLOC(data->opt_ext_fwd[i], 10 * sizeof(float)); ESL_ALLOC(data->opt_ext_rev[i], 10 * sizeof(float)); } for (i=1; iM; i++) { sc_fwd = 0; sc_rev = 0; for (j=0; j<10 && i+j+1<=om->M; j++) { sc_fwd += max_scores[i+j+1]; data->opt_ext_fwd[i][j] = sc_fwd; sc_rev += max_scores[om->M-i-j]; data->opt_ext_rev[om->M-i][j] = sc_rev; } for ( ; j<10; j++) { //fill in empty values data->opt_ext_fwd[i][j] = data->opt_ext_fwd[i][j-1]; data->opt_ext_rev[om->M-i][j] = data->opt_ext_rev[om->M-i][j-1]; } } free(max_scores); } return eslOK; ERROR: return eslEMEM; } /* Function: p7_hmm_ScoreDataDestroy() * * Synopsis: Destroy a object. */ void p7_hmm_ScoreDataDestroy(P7_SCOREDATA *data ) { int i; if (data != NULL) { if (data->ssv_scores != NULL) free( data->ssv_scores); if (data->prefix_lengths != NULL) free( data->prefix_lengths); if (data->suffix_lengths != NULL) free( data->suffix_lengths); if (data->fwd_scores != NULL) free( data->fwd_scores); if (data->fwd_transitions != NULL) { for (i=0; ifwd_transitions[i]); free(data->fwd_transitions); } if (data->opt_ext_fwd != NULL) { for (i=1; iM; i++) free(data->opt_ext_fwd[i]); free(data->opt_ext_fwd); } if (data->opt_ext_rev != NULL) { for (i=1; iM; i++) free(data->opt_ext_rev[i]); free( data->opt_ext_rev); } free(data); } } /* Function: p7_hmm_ScoreDataCreate() * Synopsis: Create a model object, based on MSV-filter * part of profile * * Purpose: Allocate a object, then populate * it with data based on the given optimized matrix. * * Once a hit passes the MSV filter, and the prefix/suffix * values of P7_SCOREDATA are required, p7_hmm_ScoreDataComputeRest() * must be called. * * Args: om - P7_OPROFILE containing scores used to produce SCOREDATA contents * do_opt_ext - boolean, TRUE if optimal-extension scores are required (for FM-MSV) * * Returns: a pointer to the new object. * * Throws: on allocation failure. */ P7_SCOREDATA * p7_hmm_ScoreDataCreate(P7_OPROFILE *om, P7_PROFILE *gm ) { P7_SCOREDATA *data = NULL; int status; ESL_ALLOC(data, sizeof(P7_SCOREDATA)); data->ssv_scores = NULL; data->ssv_scores_f = NULL; data->opt_ext_fwd = NULL; data->opt_ext_rev = NULL; data->prefix_lengths = NULL; data->suffix_lengths = NULL; data->fwd_scores = NULL; data->fwd_transitions = NULL; scoredata_GetSSVScoreArrays(om, gm, data); return data; ERROR: p7_hmm_ScoreDataDestroy(data); return NULL; } /* Function: p7_hmm_ScoreDataClone() * Synopsis: Clone a model object * * Purpose: Allocate a object used in both FM-MSV and * MSV_LongTarget diagonal recovery/extension, then * copy data into it from another populated instance * * Once a hit passes the MSV filter, and the prefix/suffix * values of P7_SCOREDATA are required, p7_hmm_ScoreDataComputeRest() * must be called. * * Args: src - P7_SCOREDATA upon which clone will be based * Kp - alphabet size, including degeneracy codes, gaps * * Returns: a pointer to the new object. * * Throws: on allocation failure. */ P7_SCOREDATA * p7_hmm_ScoreDataClone(P7_SCOREDATA *src, int Kp) { P7_SCOREDATA *new; int status; int i; if (src == NULL) return NULL; ESL_ALLOC(new, sizeof(P7_SCOREDATA)); new->M = src->M; new->type = src->type; new->ssv_scores = NULL; new->opt_ext_fwd = NULL; new->opt_ext_rev = NULL; new->prefix_lengths = NULL; new->suffix_lengths = NULL; new->fwd_scores = NULL; new->fwd_transitions = NULL; if (new->type == p7_sd_std) { ESL_ALLOC(new->ssv_scores, (src->M + 1) * Kp * sizeof(uint8_t)); memcpy(new->ssv_scores, src->ssv_scores, (src->M + 1) * Kp * sizeof(uint8_t) ); } else { ESL_ALLOC(new->ssv_scores_f, (src->M + 1) * Kp * sizeof(float)); memcpy(new->ssv_scores_f, src->ssv_scores_f, (src->M + 1) * Kp * sizeof(float) ); } if (src->prefix_lengths != NULL) { ESL_ALLOC(new->prefix_lengths, (src->M+1) * sizeof(float)); memcpy(new->prefix_lengths, src->prefix_lengths, (src->M+1) * sizeof(float)); } if (src->suffix_lengths != NULL) { ESL_ALLOC(new->suffix_lengths, (src->M+1) * sizeof(float)); memcpy(new->suffix_lengths, src->suffix_lengths, (src->M+1) * sizeof(float)); } if (src->fwd_scores != NULL) { ESL_ALLOC(new->fwd_scores, (src->M+1) * sizeof(float)); memcpy(new->fwd_scores, src->fwd_scores, (src->M+1) * sizeof(float)); } if (src->opt_ext_fwd != NULL) { ESL_ALLOC(new->opt_ext_fwd, (src->M + 1) * sizeof(float*)); for (i=1; iM; i++) { ESL_ALLOC(new->opt_ext_fwd[i], 10 * sizeof(float)); memcpy(new->opt_ext_fwd[i], src->opt_ext_fwd[i], 10 * sizeof(float)); } } if (src->opt_ext_rev != NULL) { ESL_ALLOC(new->opt_ext_rev, (src->M + 1) * sizeof(float*)); for (i=1; iM; i++) { ESL_ALLOC(new->opt_ext_rev[i], 10 * sizeof(float)); memcpy(new->opt_ext_rev[i], src->opt_ext_rev[i], 10 * sizeof(float)); } } if (src->fwd_transitions != NULL) { ESL_ALLOC(new->fwd_transitions, p7O_NTRANS * sizeof(float*)); for (i=0; ifwd_transitions[i], (src->M+1)* sizeof(float)); memcpy(new->fwd_transitions[i], src->fwd_transitions[i], (src->M+1) * sizeof(float)); } } return new; ERROR: return NULL; } /* Function: p7_hmm_ScoreDataComputeRest() * Synopsis: Using position-specific insert rates, compute MAXL-based prefix and suffix lengths * * Purpose: Using position-specific insert rates, compute MAXL-based prefix * and suffix lengths for each position in the model, used when * establishing windows around SSV diagonals. This fleshes out * the model object that was created by * p7_hmmScoreDataCreate(). * * This approach of computing the prefix/suffix length, used * in establishing windows around a seed diagonal, is fast * because it uses a simple closed-form computation of the * length L_i for each position i at which all but * (1-p7_DEFAULT_WINDOW_BETA) of position i's match- and * insert-state emissions are length L_i or shorter. * * Args: om - P7_OPROFILE containing emission/transition probabilities used to for calculations * data - P7_SCOREDATA into which the computed values are placed * * Returns: eslEMEM on failure, else eslOK * * Throws: on allocation failure. */ int p7_hmm_ScoreDataComputeRest(P7_OPROFILE *om, P7_SCOREDATA *data ) { int status; int i; float sum; float *t_mis; float *t_iis; ESL_ALLOC(data->fwd_scores, sizeof(float) * om->abc->Kp * (om->M+1)); p7_oprofile_GetFwdEmissionScoreArray(om, data->fwd_scores); //2D array, holding all the transition scores/costs ESL_ALLOC(data->fwd_transitions, sizeof(float*) * p7O_NTRANS); for (i=0; ifwd_transitions[i], sizeof(float) * (om->M+1)); p7_oprofile_GetFwdTransitionArray(om, i, data->fwd_transitions[i] ); } t_mis = data->fwd_transitions[p7O_MI]; t_iis = data->fwd_transitions[p7O_II]; ESL_ALLOC(data->prefix_lengths, (om->M+1) * sizeof(float)); ESL_ALLOC(data->suffix_lengths, (om->M+1) * sizeof(float)); sum = 0; for (i=1; i < om->M; i++) { data->prefix_lengths[i] = 2 + (int)(log(p7_DEFAULT_WINDOW_BETA / t_mis[i] )/log(t_iis[i])); sum += data->prefix_lengths[i]; } data->prefix_lengths[0] = data->prefix_lengths[om->M] = 0; for (i=1; i < om->M; i++) data->prefix_lengths[i] /= sum; data->suffix_lengths[om->M] = data->prefix_lengths[om->M-1]; for (i=om->M - 1; i >= 1; i--) data->suffix_lengths[i] = data->suffix_lengths[i+1] + data->prefix_lengths[i-1]; for (i=2; i < om->M; i++) data->prefix_lengths[i] += data->prefix_lengths[i-1]; return eslOK; ERROR: p7_hmm_ScoreDataDestroy(data); return eslEMEM; } /***************************************************************** * 2. Unit tests *****************************************************************/ #ifdef p7SCOREDATA_TESTDRIVE static void utest_createScoreData(ESL_GETOPTS *go, ESL_RANDOMNESS *r ) { char msg[] = "create MSVData unit test failed"; P7_HMM *hmm = NULL; ESL_ALPHABET *abc = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_SCOREDATA *scoredata = NULL; uint8_t scale = 3.0 / eslCONST_LOG2; /* scores in units of third-bits */ uint8_t bias; int x; float max = 0.0; if ( (abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal(msg); if ( p7_hmm_Sample(r, 100, abc, &hmm) != eslOK) esl_fatal(msg); if ( (gm = p7_profile_Create (hmm->M, abc)) == NULL ) esl_fatal(msg); if ( (om = p7_oprofile_Create(hmm->M, abc)) == NULL ) esl_fatal(msg); for (x = 0; x < gm->abc->K; x++) max = ESL_MAX(max, esl_vec_FMax(gm->rsc[x], (gm->M+1)*2)); //based on unbiased_byteify max = -1.0f * roundf(scale * max); bias = (max > 255.) ? 255 : (uint8_t) max; if ( (scoredata = p7_hmm_ScoreDataCreate(om, FALSE)) == NULL ) esl_fatal(msg); p7_hmm_ScoreDataDestroy(scoredata); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); } #endif /*p7BG_TESTDRIVE*/ /***************************************************************** * 3. Test driver *****************************************************************/ #ifdef p7SCOREDATA_TESTDRIVE #include "esl_config.h" #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, {"-s", eslARG_INT, "0", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0}, {"-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show verbose commentary/output", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for p7_bg"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *rng = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); int be_verbose = esl_opt_GetBoolean(go, "-v"); if (be_verbose) printf("p7_scoredata unit test: rng seed %" PRIu32 "\n", esl_randomness_GetSeed(rng)); utest_createScoreData(go, rng); esl_randomness_Destroy(rng); esl_getopts_Destroy(go); return 0; } #endif /* p7BG_TESTDRIVE */ /************************************************************ * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: p7_scoredata.c 3784 2011-12-07 21:51:25Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/trunk/src/p7_scoredata.c $ ************************************************************/ hmmer-3.1b2/src/hmmdmstr.c0000664361611702660230000020373512473612613015070 0ustar wheelerteddy/* master side of the hmmpgmd daemon * * MSF, Thu Aug 12, 2010 [Janelia] * SVN $Id: hmmdmstr.c 4571 2013-12-17 11:27:17Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/hmmdmstr.c $ */ #include "p7_config.h" #ifdef HMMER_THREADS #include #include #include #include #include #include #include #include #include #ifdef HAVE_NETINET_IN_H #include /* On FreeBSD, you need netinet/in.h for struct sockaddr_in */ #endif /* On OpenBSD, netinet/in.h is required for (must precede) arpa/inet.h */ #include #include #include #include #ifndef HMMER_THREADS #error "Program requires pthreads be enabled." #endif /*HMMER_THREADS*/ #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stack.h" #include "esl_stopwatch.h" #include "esl_threads.h" #include "hmmer.h" #include "hmmpgmd.h" #include "cachedb.h" #include "p7_hmmcache.h" #define MAX_WORKERS 64 #define MAX_BUFFER 4096 #define CONF_FILE "/etc/hmmpgmd.conf" typedef struct { uint32_t count; uint32_t data_size; P7_HIT *hit; char *data; } HIT_LIST; typedef struct { HMMD_SEARCH_STATS stats; HMMD_SEARCH_STATUS status; HIT_LIST *hits; int nhits; int db_inx; int db_cnt; int errors; } SEARCH_RESULTS; typedef struct { int sock_fd; char ip_addr[64]; ESL_STACK *cmdstack; /* stack of commands that clients want done */ } CLIENTSIDE_ARGS; typedef struct { int sock_fd; pthread_mutex_t work_mutex; pthread_cond_t start_cond; pthread_cond_t complete_cond; int db_version; P7_SEQCACHE *seq_db; P7_HMMCACHE *hmm_db; int ready; int failed; struct worker_s *head; struct worker_s *tail; int pend_cnt; struct worker_s *pending; int idle_cnt; struct worker_s *idling; RANGE_LIST *range_list; /* (optional) list of ranges searched within the seqdb */ int completed; } WORKERSIDE_ARGS; typedef struct worker_s { int sock_fd; char ip_addr[64]; int completed; int terminated; HMMD_COMMAND *cmd; uint32_t srch_inx; uint32_t srch_cnt; HMMD_SEARCH_STATS stats; HMMD_SEARCH_STATUS status; char *err_buf; P7_HIT *hit; void *hit_data; int total; WORKERSIDE_ARGS *parent; struct worker_s *next; struct worker_s *prev; } WORKER_DATA; static void setup_clientside_comm(ESL_GETOPTS *opts, CLIENTSIDE_ARGS *args); static void setup_workerside_comm(ESL_GETOPTS *opts, WORKERSIDE_ARGS *args); static void destroy_worker(WORKER_DATA *worker); static void init_results(SEARCH_RESULTS *results); static void clear_results(WORKERSIDE_ARGS *comm, SEARCH_RESULTS *results); static void gather_results(QUEUE_DATA *query, WORKERSIDE_ARGS *comm, SEARCH_RESULTS *results); static void forward_results(QUEUE_DATA *query, SEARCH_RESULTS *results); static void print_client_msg(int fd, int status, char *format, va_list ap) { int n; char ebuf[512]; HMMD_SEARCH_STATUS s; memset(&s, 0, sizeof(HMMD_SEARCH_STATUS)); s.status = status; s.msg_size = vsnprintf(ebuf, sizeof(ebuf), format, ap) +1; /* +1 because we send the \0 */ p7_syslog(LOG_ERR, ebuf); /* send back an unsuccessful status message */ n = sizeof(s); if (writen(fd, &s, n) != n) { p7_syslog(LOG_ERR,"[%s:%d] - writing (%d) error %d - %s\n", __FILE__, __LINE__, fd, errno, strerror(errno)); return; } if (writen(fd, ebuf, s.msg_size) != s.msg_size) { p7_syslog(LOG_ERR,"[%s:%d] - writing (%d) error %d - %s\n", __FILE__, __LINE__, fd, errno, strerror(errno)); return; } } static void client_msg(int fd, int status, char *format, ...) { va_list ap; va_start(ap, format); print_client_msg(fd, status, format, ap); va_end(ap); } static void client_msg_longjmp(int fd, int status, jmp_buf *env, char *format, ...) { va_list ap; va_start(ap, format); print_client_msg(fd, status, format, ap); va_end(ap); longjmp(*env, 1); } static int validate_workers(WORKERSIDE_ARGS *args) { int ready = 0; int failed = 0; int pending = 0; int idling = 0; WORKER_DATA *worker = NULL; WORKER_DATA *tail = NULL; /* count the idling workers */ worker = args->idling; while (worker != NULL) { ++idling; if (worker->terminated) ++failed; worker = worker->next; } assert(idling == args->idle_cnt); /* count the pending workers */ worker = args->pending; while (worker != NULL) { ++pending; if (worker->terminated) ++failed; worker = worker->next; } assert(pending == args->pend_cnt); if (args->head == NULL && args->tail == NULL) { assert(failed == args->failed); assert(ready == 0); return 1; } assert(args->head != NULL && args->tail != NULL); assert(args->head->prev == NULL); assert(args->tail->next == NULL); /* count the ready workers */ worker = args->head; while (worker != NULL) { ++ready; assert(worker->prev == tail); assert(ready <= args->ready); tail = worker; if (worker->terminated) ++failed; worker = worker->next; } assert(ready == args->ready); assert(failed == args->failed); assert(tail == args->tail); return 1; } static void update_workers(WORKERSIDE_ARGS *args) { WORKER_DATA *worker = NULL; assert(validate_workers(args)); /* if there are any workers waiting to join, add them */ while (args->pending != NULL) { worker = args->pending; args->pending = worker->next; worker->next = NULL; if (args->head == NULL) { args->head = worker; worker->prev = NULL; } else { args->tail->next = worker; worker->prev = args->tail; } args->tail = worker; args->pend_cnt--; args->ready++; } /* remove any workers who have failed */ worker = args->head; while (args->failed > 0 && worker != NULL) { WORKER_DATA *next = worker->next; if (worker->terminated) { --args->failed; --args->ready; if (args->head == worker && args->tail == worker) { args->head = NULL; args->tail = NULL; } else if (args->head == worker) { args->head = worker->next; worker->next->prev = NULL; } else if (args->tail == worker) { args->tail = worker->prev; worker->prev->next = NULL; } else { worker->next->prev = worker->prev; worker->prev->next = worker->next; } destroy_worker(worker); } worker = next; } assert(validate_workers(args)); } static void process_search(WORKERSIDE_ARGS *args, QUEUE_DATA *query) { ESL_STOPWATCH *w = NULL; /* timer used for profiling statistics */ WORKER_DATA *worker = NULL; SEARCH_RESULTS results; int n; int cnt; int inx; int ready_workers; /* counter variable used to track the number of workers currently available to receive work; short for "remaining", I imagine */ int tries; int i; memset(&results, 0, sizeof(SEARCH_RESULTS)); /* avoid valgrind bitching about uninit bytes; remove, if we ever serialize structs properly */ w = esl_stopwatch_Create(); esl_stopwatch_Start(w); /* figure out the size of the database we are searching */ if (query->cmd_type == HMMD_CMD_SEARCH) { cnt = args->seq_db->db[query->dbx].count; } else { cnt = args->hmm_db->n; } init_results(&results); //if range(s) are given, count how many of the seqdb's sequences are within supplied range(s) if (args->range_list) { // can only happen in HMMD_CMD_SEARCH case int range_cnt = 0; // this will now count how many of the seqs in the db are within the range for (i=0; iseq_db->list[i].idx, args->range_list ) ) range_cnt++; } cnt = range_cnt; } inx = 0; tries = 0; do { /* process any changes to the available workers */ if ((n = pthread_mutex_lock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); /* build a list of the currently available workers */ update_workers(args); /* if there are no workers, report an error */ if (args->ready > 0) { ready_workers = args->ready; /* update the workers search information */ worker = args->head; while (worker != NULL) { worker->cmd = query->cmd; worker->completed = 0; worker->total = 0; /* assign each worker a portion of the database */ worker->srch_inx = inx; if (args->range_list) { // if ranges are given, need to split the db list based on which elements in the list are within the given range(s) int goal = cnt / ready_workers; //how many within-range sequences do I want to ask this worker to handle int curr = 0; //how many within-range sequences have I seen since the start of this full-db range worker->srch_cnt = 0; while (curr < goal) { if ( hmmpgmd_IsWithinRanges (args->seq_db->list[inx].idx, args->range_list ) ) curr++; worker->srch_cnt++; inx++; } cnt -= curr; } else { // default - split evenly among workers worker->srch_cnt = cnt / ready_workers; inx += worker->srch_cnt; cnt -= worker->srch_cnt; } --ready_workers; worker = worker->next; } args->completed = 0; /* notify all the worker threads of the new query */ if ((n = pthread_cond_broadcast(&args->start_cond)) != 0) LOG_FATAL_MSG("cond broadcast", n); } if ((n = pthread_mutex_unlock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); if (args->ready > 0) { /* Wait for all the workers to complete */ if ((n = pthread_mutex_lock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); while (args->completed < args->ready) { if ((n = pthread_cond_wait (&args->complete_cond, &args->work_mutex)) != 0) LOG_FATAL_MSG("cond wait", n); } if ((n = pthread_mutex_unlock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); } /* gather up the results from all the workers */ gather_results(query, args, &results); /* we can recover from one worker crashing. get the block that worker ran on * and redistribute its load to all the remaining workers. */ inx = results.db_inx; cnt = results.db_cnt; ++tries; } while (args->ready > 0 && results.errors == 1 && tries < 2); esl_stopwatch_Stop(w); /* copy the search stats */ results.stats.elapsed = w->elapsed; results.stats.user = w->user; results.stats.sys = w->sys; /* TODO: check for errors */ if (args->ready == 0) { client_msg(query->sock, eslFAIL, "No compute nodes available\n"); } else if (args->failed > 0) { client_msg(query->sock, eslFAIL, "Errors running search\n"); clear_results(args, &results); } else { forward_results(query, &results); } esl_stopwatch_Destroy(w); } static void process_reset(WORKERSIDE_ARGS *args, QUEUE_DATA *query) { int n; int cnt; WORKER_DATA *worker = NULL; /* process any changes to the available workers */ if ((n = pthread_mutex_lock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); /* build a list of the currently available workers */ update_workers(args); cnt = 0; /* look for the active workers to reset */ worker = args->head; while (worker != NULL) { if (strcmp(worker->ip_addr, query->cmd->reset.ip_addr) == 0) { worker->cmd = query->cmd; worker->completed = 0; worker->total = 0; ++cnt; } worker = worker->next; } /* look for the idle workers to reset */ worker = args->idling; while (worker != NULL) { if (strcmp(worker->ip_addr, query->cmd->reset.ip_addr) == 0) { worker->cmd = query->cmd; worker->completed = 0; worker->total = 0; ++cnt; } worker = worker->next; } /* check if there are any worker matching the ip address */ if (cnt > 0) { args->completed = 0; /* notify all the worker threads of the new query */ if ((n = pthread_cond_broadcast(&args->start_cond)) != 0) LOG_FATAL_MSG("cond broadcast", n); if ((n = pthread_mutex_unlock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); /* Wait for all the workers to complete */ if ((n = pthread_mutex_lock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); while (args->completed < cnt) { if ((n = pthread_cond_wait (&args->complete_cond, &args->work_mutex)) != 0) LOG_FATAL_MSG("cond wait", n); } } /* build a list of the currently available workers */ update_workers(args); if ((n = pthread_mutex_unlock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); if (cnt == 0) { client_msg(query->sock, eslFAIL, "No compute nodes found matching ip %s\n", query->cmd->reset.ip_addr); } else { HMMD_SEARCH_STATUS status; status.status = eslOK; status.msg_size = 0; /* send back a successful status message */ n = sizeof(status); if (writen(query->sock, &status, n) != n) { p7_syslog(LOG_ERR,"[%s:%d] - writing %s error %d - %s\n", __FILE__, __LINE__, query->ip_addr, errno, strerror(errno)); } } } static void process_load(WORKERSIDE_ARGS *args, QUEUE_DATA *query) { void *tmp; P7_SEQCACHE *seq_db = NULL; P7_HMMCACHE *hmm_db = NULL; WORKER_DATA *worker = NULL; HMMD_COMMAND cmd; int n, cnt; char errbuf[eslERRBUFSIZE]; int status; client_msg(query->sock, eslOK, "Loading databases...\n"); if (query->cmd->init.seqdb_off) { char *name = (char *)&query->cmd; name += query->cmd->init.seqdb_off; if ((status = p7_seqcache_Open(name, &seq_db, errbuf)) != eslOK) { client_msg(query->sock, status, "Failed to load sequence database %s\n %s", name, errbuf); return; } } if (query->cmd->init.hmmdb_off) { char *name = (char *)&query->cmd; name += query->cmd->init.hmmdb_off; status = p7_hmmcache_Open(name, &hmm_db, errbuf); if (status == eslENOTFOUND) { client_msg(query->sock, status, "Failed to open profile database %s\n %s\n", name, errbuf); goto ERROR; } else if (status == eslEFORMAT) { client_msg(query->sock, status, "Failed to parse profile database %s\n %s\n", name, errbuf); goto ERROR; } else if (status == eslEINCOMPAT) { client_msg(query->sock, status, "Mismatched alphabets in profile db %s\n %s\n", name, errbuf); goto ERROR; } else if (status != eslOK) { client_msg(query->sock, status, "Failed to load profile db %s : code %d\n", name, status); goto ERROR; } if ( (status = p7_hmmcache_SetNumericNames(hmm_db)) != eslOK) goto ERROR; client_msg(query->sock, eslOK, "Loaded profile db %s; models: %d memory: %" PRId64 "\n", name, hmm_db->n, p7_hmmcache_Sizeof(hmm_db)); } /* process any changes to the available workers */ if ((n = pthread_mutex_lock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); /* swap in the new cached databases */ tmp = args->seq_db; args->seq_db = seq_db; seq_db = tmp; tmp = args->seq_db; args->seq_db = seq_db; seq_db = tmp; args->db_version++; /* build a list of the currently available workers */ update_workers(args); /* reset all the idle and active workers */ cnt = 0; /* build a reset command */ cmd.hdr.length = 0; cmd.hdr.command = HMMD_CMD_RESET; /* look for the active workers to reset */ worker = args->head; while (worker != NULL) { worker->cmd = &cmd; worker->completed = 0; worker->total = 0; worker = worker->next; ++cnt; } /* look for the idle workers to reset */ worker = args->idling; while (worker != NULL) { worker->cmd = &cmd; worker->completed = 0; worker->total = 0; worker = worker->next; ++cnt; } /* check if there are any worker matching the ip address */ if (cnt > 0) { args->completed = 0; /* notify all the worker threads of the new query */ if ((n = pthread_cond_broadcast(&args->start_cond)) != 0) LOG_FATAL_MSG("cond broadcast", n); if ((n = pthread_mutex_unlock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); /* Wait for all the workers to complete */ if ((n = pthread_mutex_lock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); while (args->completed < cnt) { if ((n = pthread_cond_wait (&args->complete_cond, &args->work_mutex)) != 0) LOG_FATAL_MSG("cond wait", n); } } /* build a list of the currently available workers */ update_workers(args); if ((n = pthread_mutex_unlock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); /* free up the old copies */ if (seq_db != NULL) p7_seqcache_Close(seq_db); if (hmm_db != NULL) p7_hmmcache_Close(hmm_db); client_msg(query->sock, eslOK, "Load complete\n"); return; ERROR: if (seq_db) p7_seqcache_Close(seq_db); if (hmm_db) p7_hmmcache_Close(hmm_db); return; } static void process_shutdown(WORKERSIDE_ARGS *args, QUEUE_DATA *query) { int n; int cnt; HMMD_COMMAND cmd; WORKER_DATA *worker = NULL; /* process any changes to the available workers */ if ((n = pthread_mutex_lock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); /* build a list of the currently available workers */ update_workers(args); /* reset all the idle and active workers */ cnt = 0; /* build a reset command */ cmd.hdr.length = 0; cmd.hdr.command = HMMD_CMD_SHUTDOWN; /* look for the active workers to shutdown */ worker = args->head; while (worker != NULL) { worker->cmd = &cmd; worker->completed = 0; worker->total = 0; worker = worker->next; ++cnt; } /* look for the idle workers to shutdown */ worker = args->idling; while (worker != NULL) { worker->cmd = &cmd; worker->completed = 0; worker->total = 0; worker = worker->next; ++cnt; } /* check if there are any workers to shutdown */ if (cnt > 0) { args->completed = 0; /* notify all the worker threads of the new query */ if ((n = pthread_cond_broadcast(&args->start_cond)) != 0) LOG_FATAL_MSG("cond broadcast", n); if ((n = pthread_mutex_unlock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); /* Wait for all the workers to complete */ if ((n = pthread_mutex_lock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); while (args->completed < cnt) { if ((n = pthread_cond_wait (&args->complete_cond, &args->work_mutex)) != 0) LOG_FATAL_MSG("cond wait", n); } } /* build a list of the currently available workers */ update_workers(args); if ((n = pthread_mutex_unlock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); } void master_process(ESL_GETOPTS *go) { P7_SEQCACHE *seq_db = NULL; P7_HMMCACHE *hmm_db = NULL; ESL_STACK *cmdstack = NULL; /* stack of commands that clients want done */ QUEUE_DATA *query = NULL; CLIENTSIDE_ARGS client_comm; WORKERSIDE_ARGS worker_comm; int n; int shutdown; char errbuf[eslERRBUFSIZE]; int status = eslOK; impl_Init(); p7_FLogsumInit(); /* we're going to use table-driven Logsum() approximations at times */ if (esl_opt_IsUsed(go, "--seqdb")) { char *name = esl_opt_GetString(go, "--seqdb"); if ((status = p7_seqcache_Open(name, &seq_db, errbuf)) != eslOK) p7_Fail("Failed to cache %s (%d)", name, status); } if (esl_opt_IsUsed(go, "--hmmdb")) { char *name = esl_opt_GetString(go, "--hmmdb"); status = p7_hmmcache_Open(name, &hmm_db, errbuf); if (status == eslENOTFOUND) p7_Fail("Failed to open profile database %s\n %s\n", name, errbuf); else if (status == eslEFORMAT) p7_Fail("Failed to parse profile database %s\n %s\n", name, errbuf); else if (status == eslEINCOMPAT) p7_Fail("Mismatched alphabets in profile db %s\n %s\n", name, errbuf); else if (status != eslOK) p7_Fail("Failed to load profile db %s : code %d\n", name, status); p7_hmmcache_SetNumericNames(hmm_db); printf("Loaded profile db %s; models: %d memory: %" PRId64 "\n", name, hmm_db->n, (uint64_t) p7_hmmcache_Sizeof(hmm_db)); } /* if stdout is redirected at the commandline, it causes printf's to be buffered, * which means status logging isn't printed. This line strongly requests unbuffering, * which should be ok, given the low stdout load of hmmpgmd */ setvbuf (stdout, NULL, _IONBF, BUFSIZ); printf("Data loaded into memory. Master is ready.\n"); setvbuf (stdout, NULL, _IOFBF, BUFSIZ); /* initialize the search stack, set it up for interthread communication */ cmdstack = esl_stack_PCreate(); esl_stack_UseMutex(cmdstack); esl_stack_UseCond(cmdstack); /* start the communications with the web clients */ client_comm.cmdstack = cmdstack; setup_clientside_comm(go, &client_comm); /* initialize the worker structure */ if ((n = pthread_mutex_init(&worker_comm.work_mutex, NULL)) != 0) LOG_FATAL_MSG("mutex init", n); if ((n = pthread_cond_init(&worker_comm.start_cond, NULL)) != 0) LOG_FATAL_MSG("cond init", n); if ((n = pthread_cond_init(&worker_comm.complete_cond, NULL)) != 0) LOG_FATAL_MSG("cond init", n); worker_comm.sock_fd = -1; worker_comm.head = NULL; worker_comm.tail = NULL; worker_comm.pending = NULL; worker_comm.idling = NULL; worker_comm.seq_db = seq_db; worker_comm.hmm_db = hmm_db; worker_comm.db_version = 1; worker_comm.ready = 0; worker_comm.failed = 0; worker_comm.pend_cnt = 0; worker_comm.idle_cnt = 0; setup_workerside_comm(go, &worker_comm); /* read query hmm/sequence * the PPop() will wait until a client pushes a command to the queue */ shutdown = 0; while (!shutdown && esl_stack_PPop(cmdstack, (void **) &query) == eslOK) { printf("Processing command %d from %s\n", query->cmd_type, query->ip_addr); fflush(stdout); worker_comm.range_list = NULL; if (esl_opt_IsUsed(query->opts, "--seqdb_ranges")) { ESL_ALLOC(worker_comm.range_list, sizeof(RANGE_LIST)); hmmpgmd_GetRanges(worker_comm.range_list, esl_opt_GetString(query->opts, "--seqdb_ranges")); } switch(query->cmd_type) { case HMMD_CMD_SEARCH: process_search(&worker_comm, query); break; case HMMD_CMD_SCAN: process_search(&worker_comm, query); break; case HMMD_CMD_INIT: process_load (&worker_comm, query); break; case HMMD_CMD_RESET: process_reset (&worker_comm, query); break; case HMMD_CMD_SHUTDOWN: process_shutdown(&worker_comm, query); p7_syslog(LOG_ERR,"[%s:%d] - shutting down...\n", __FILE__, __LINE__); shutdown = 1; break; default: p7_syslog(LOG_ERR,"[%s:%d] - unknown command %d from %s\n", __FILE__, __LINE__, query->cmd_type, query->ip_addr); break; } free_QueueData(query); } esl_stack_ReleaseCond(cmdstack); if (hmm_db) p7_hmmcache_Close(hmm_db); if (seq_db) p7_seqcache_Close(seq_db); esl_stack_Destroy(cmdstack); pthread_mutex_destroy(&worker_comm.work_mutex); pthread_cond_destroy(&worker_comm.start_cond); pthread_cond_destroy(&worker_comm.complete_cond); if (worker_comm.range_list) { if (worker_comm.range_list->starts) free(worker_comm.range_list->starts); if (worker_comm.range_list->ends) free(worker_comm.range_list->ends); free (worker_comm.range_list); } return; ERROR: p7_Fail("Memory allocation error. Code: %d\n", status); } static int hit_sorter(const void *p1, const void *p2) { int cmp; const P7_HIT *h1 = p1; const P7_HIT *h2 = p2; cmp = (h1->sortkey < h2->sortkey); cmp -= (h1->sortkey > h2->sortkey); return cmp; } static void init_results(SEARCH_RESULTS *results) { results->status.status = eslOK; results->status.msg_size = 0; results->stats.nhits = 0; results->stats.nreported = 0; results->stats.nincluded = 0; results->stats.nmodels = 0; results->stats.nseqs = 0; results->stats.n_past_msv = 0; results->stats.n_past_bias = 0; results->stats.n_past_vit = 0; results->stats.n_past_fwd = 0; results->stats.Z = 0; results->hits = NULL; results->nhits = 0; results->db_inx = 0; results->db_cnt = 0; results->errors = 0; } static void gather_results(QUEUE_DATA *query, WORKERSIDE_ARGS *comm, SEARCH_RESULTS *results) { int cnt; int n; WORKER_DATA *worker; /* allocate spaces to hold all the hits */ cnt = results->nhits + MAX_WORKERS; if ((results->hits = realloc(results->hits, sizeof(HIT_LIST) * cnt)) == NULL) LOG_FATAL_MSG("malloc", errno); /* lock the workers until we have merged the results */ if ((n = pthread_mutex_lock (&comm->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); /* count the number of hits */ cnt = results->nhits; worker = comm->head; while (worker != NULL) { if (worker->completed) { results->stats.nhits += worker->stats.nhits; results->stats.nreported += worker->stats.nreported; results->stats.nincluded += worker->stats.nincluded; results->stats.n_past_msv += worker->stats.n_past_msv; results->stats.n_past_bias += worker->stats.n_past_bias; results->stats.n_past_vit += worker->stats.n_past_vit; results->stats.n_past_fwd += worker->stats.n_past_fwd; results->stats.Z_setby = worker->stats.Z_setby; results->stats.domZ_setby = worker->stats.domZ_setby; results->stats.domZ = worker->stats.domZ; results->stats.Z = worker->stats.Z; results->status.msg_size += worker->status.msg_size - sizeof(HMMD_SEARCH_STATS); results->hits[cnt].count = worker->stats.nhits; results->hits[cnt].data_size = worker->status.msg_size - sizeof(HMMD_SEARCH_STATS) - sizeof(P7_HIT) * worker->stats.nhits; results->hits[cnt].hit = worker->hit; results->hits[cnt].data = worker->hit_data; worker->hit = NULL; worker->hit_data = NULL; worker->completed = 0; ++cnt; } else { results->errors++; results->db_inx = worker->srch_inx; results->db_cnt = worker->srch_cnt; } worker = worker->next; } if ((n = pthread_mutex_unlock (&comm->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); if (query->cmd_type == HMMD_CMD_SEARCH) { results->stats.nmodels = 1; results->stats.nseqs = comm->seq_db->db[query->dbx].K; } else { results->stats.nseqs = 1; results->stats.nmodels = comm->hmm_db->n; } if (results->stats.Z_setby == p7_ZSETBY_NTARGETS) { results->stats.Z = (query->cmd_type == HMMD_CMD_SEARCH) ? results->stats.nseqs : results->stats.nmodels; } results->nhits = cnt; } static void forward_results(QUEUE_DATA *query, SEARCH_RESULTS *results) { uint32_t adj; esl_pos_t offset; P7_TOPHITS th; P7_PIPELINE *pli = NULL; P7_DOMAIN **dcl = NULL; P7_HIT *hits = NULL; HIT_LIST *list = NULL; int fd; int i, j; int n; enum p7_pipemodes_e mode; fd = query->sock; list = results->hits; if (query->cmd_type == HMMD_CMD_SEARCH) mode = p7_SEARCH_SEQS; else mode = p7_SCAN_MODELS; /* sort the hits and apply score and E-value thresholds */ if (results->nhits > 0) { P7_HIT *h1; /* at this point h1->offset's are the offset of the domain structure * in the block of memory pointed to by "list[n]->data". now we will change * that offset to be the true pointers back to the dcl data. */ for (i = 0; i < results->nhits; ++i) { h1 = list[i].hit; for (j = 0; j < list[i].count; ++j) { esl_pos_t off = h1->offset - sizeof(HMMD_SEARCH_STATS) - (sizeof(P7_HIT) * list[i].count); h1->dcl = (P7_DOMAIN *)(list[i].data + off); ++h1; } } /* combine all the hits into a single list */ offset = 0; if ((hits = malloc(sizeof(P7_HIT) * results->stats.nhits)) == NULL) LOG_FATAL_MSG("malloc", errno); memset(hits, 0, sizeof(P7_HIT) * results->stats.nhits); /* avoiding valgrind bitching; remove if structs serialized properly */ for (i = 0; i < results->nhits; ++i) { memcpy(hits + offset, list[i].hit, sizeof(P7_HIT) * list[i].count); offset += list[i].count; } qsort(hits, results->stats.nhits, sizeof(P7_HIT), hit_sorter); th.unsrt = NULL; th.N = results->stats.nhits; th.nreported = 0; th.nincluded = 0; th.is_sorted_by_sortkey = 0; th.is_sorted_by_seqidx = 0; pli = p7_pipeline_Create(query->opts, 100, 100, FALSE, mode); pli->nmodels = results->stats.nmodels; pli->nseqs = results->stats.nseqs; pli->n_past_msv = results->stats.n_past_msv; pli->n_past_bias = results->stats.n_past_bias; pli->n_past_vit = results->stats.n_past_vit; pli->n_past_fwd = results->stats.n_past_fwd; pli->Z = results->stats.Z; pli->domZ = results->stats.domZ; pli->Z_setby = results->stats.Z_setby; pli->domZ_setby = results->stats.domZ_setby; if ((dcl = malloc(sizeof(void *) * results->stats.nhits)) == NULL) LOG_FATAL_MSG("malloc", errno); th.hit = (P7_HIT **)dcl; for (i = 0; i < th.N; ++i) th.hit[i] = hits + i; p7_tophits_Threshold(&th, pli); /* after the top hits thresholds are checked, the number of sequences * and domains to be reported can change. */ results->stats.nreported = th.nreported; results->stats.nincluded = th.nincluded; results->stats.domZ = pli->domZ; results->stats.Z = pli->Z; /* at this point the domain pointers need to be converted back to offsets * within the binary data stream. */ adj = sizeof(HMMD_SEARCH_STATS) + sizeof(P7_HIT) * results->stats.nhits; h1 = hits; for (i = 0; i < results->stats.nhits; ++i) { char *ptr; dcl[i] = h1->dcl; h1->dcl = (P7_DOMAIN *)(((char *)NULL) + adj); /* figure out the size of the domain and alignment info */ adj += sizeof(P7_DOMAIN) * h1->ndom; ptr = (char *)(dcl[i] + h1->ndom); for (j = 0; j < h1->ndom; ++j) { n = sizeof(P7_ALIDISPLAY) + ((P7_ALIDISPLAY *)ptr)->memsize; adj += n; ptr += n; } ++h1; } } /* add the size of the status structure to the message size */ results->status.msg_size += sizeof(HMMD_SEARCH_STATS); /* send back a successful status message */ n = sizeof(HMMD_SEARCH_STATUS); if (writen(fd, &results->status, n) != n) { p7_syslog(LOG_ERR,"[%s:%d] - writing %s error %d - %s\n", __FILE__, __LINE__, query->ip_addr, errno, strerror(errno)); goto CLEAR; } n = sizeof(HMMD_SEARCH_STATS); if (writen(fd, &results->stats, n) != n) { p7_syslog(LOG_ERR,"[%s:%d] - writing %s error %d - %s\n", __FILE__, __LINE__, query->ip_addr, errno, strerror(errno)); goto CLEAR; } if (results->stats.nhits > 0) { /* send all the hit data */ n = sizeof(P7_HIT) * results->stats.nhits; if (writen(fd, hits, n) != n) { p7_syslog(LOG_ERR,"[%s:%d] - writing %s error %d - %s\n", __FILE__, __LINE__, query->ip_addr, errno, strerror(errno)); goto CLEAR; } for (i = 0; i < results->stats.nhits; ++i) { if (i + 1 < results->stats.nhits) { n = (char *)hits[i+1].dcl - (char *)hits[i].dcl; } else { n = ((char *)NULL) + results->status.msg_size - (char *)hits[i].dcl; } if (writen(fd, dcl[i], n) != n) { p7_syslog(LOG_ERR,"[%s:%d] - writing %s error %d - %s\n", __FILE__, __LINE__, query->ip_addr, errno, strerror(errno)); goto CLEAR; } } } printf("Results for %s (%d) sent %" PRId64 " bytes\n", query->ip_addr, fd, results->status.msg_size); printf("Hits:%"PRId64 " reported:%" PRId64 " included:%"PRId64 "\n", results->stats.nhits, results->stats.nreported, results->stats.nincluded); fflush(stdout); CLEAR: /* free all the data */ for (i = 0; i < results->nhits; ++i) { if (list[i].hit != NULL) free(list[i].hit); if (list[i].data != NULL) free(list[i].data); list[i].hit = NULL; list[i].data = NULL; } if (pli) p7_pipeline_Destroy(pli); if (list) free(list); if (hits) free(hits); if (dcl) free(dcl); init_results(results); } static void destroy_worker(WORKER_DATA *worker) { if (worker == NULL) { if (worker->hit != NULL) free(worker->hit); if (worker->hit_data != NULL) free(worker->hit_data); if (worker->err_buf != NULL) free(worker->err_buf); memset(worker, 0, sizeof(WORKER_DATA)); free(worker); } } static void clear_results(WORKERSIDE_ARGS *args, SEARCH_RESULTS *results) { int i; int n; WORKER_DATA *worker; /* lock the workers until we have freed the results */ if ((n = pthread_mutex_lock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); assert(validate_workers(args)); /* free all the results */ worker = args->head; while (worker != NULL) { if (worker->hit != NULL) free(worker->hit); if (worker->hit_data != NULL) free(worker->hit_data); if (worker->err_buf != NULL) free(worker->err_buf); worker->hit = NULL; worker->hit_data = NULL; worker->err_buf = NULL; worker->completed = 0; worker = worker->next; } if ((n = pthread_mutex_unlock (&args->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); for (i = 0; i < results->nhits; ++i) { if (results->hits[i].hit != NULL) free(results->hits[i].hit); if (results->hits[i].data != NULL) free(results->hits[i].data); results->hits[i].hit = NULL; results->hits[i].data = NULL; } if (results->hits != NULL) free(results->hits); init_results(results); } static void process_ServerCmd(char *ptr, CLIENTSIDE_ARGS *data) { QUEUE_DATA *parms = NULL; /* cmd to queue */ HMMD_COMMAND *cmd = NULL; /* parsed cmd to process */ int fd = data->sock_fd; ESL_STACK *cmdstack = data->cmdstack; int n; char *s; time_t date; char timestamp[32]; /* skip leading white spaces */ ++ptr; while (*ptr == ' ' || *ptr == '\t') ++ptr; /* skip to the end of the line */ s = ptr; while (*s && (*s != '\n' && *s != '\r')) ++s; *s = 0; /* process the different commands */ s = strsep(&ptr, " \t"); if (strcmp(s, "shutdown") == 0) { if ((cmd = malloc(sizeof(HMMD_HEADER))) == NULL) LOG_FATAL_MSG("malloc", errno); memset(cmd, 0, sizeof(HMMD_HEADER)); /* avoid uninit bytes & valgrind bitching. Remove, if we ever serialize structs correctly. */ cmd->hdr.length = 0; cmd->hdr.command = HMMD_CMD_SHUTDOWN; } else if (strcmp(s, "load") == 0) { char **db; char *hmmdb = NULL; char *seqdb = NULL; /* skip leading white spaces */ while (*ptr == ' ' || *ptr == '\t') ++ptr; if (!*ptr) { client_msg(fd, eslEINVAL, "Load command missing --seqdb or --hmmdb option\n"); return; } while (*ptr) { s = strsep(&ptr, " \t"); db = NULL; if (strcmp (s, "--seqdb") == 0) db = &seqdb; else if (strcmp (s, "--hmmdb") == 0) db = &hmmdb; if (db == NULL) { client_msg(fd, eslEINVAL, "Unknown option %s for load command\n", s); return; } else if (*db != NULL) { client_msg(fd, eslEINVAL, "Option %s for load command specified twice\n", s); return; } /* skip leading white spaces */ while (*ptr == ' ' || *ptr == '\t') ++ptr; if (!*ptr) { client_msg(fd, eslEINVAL, "Missing file name following options %s\n", s); return; } *db = strsep(&ptr, " \t"); /* skip leading white spaces */ while (*ptr == ' ' || *ptr == '\t') ++ptr; } n = sizeof(HMMD_COMMAND); if (seqdb) n += strlen(seqdb) + 1; if (hmmdb) n += strlen(hmmdb) + 1; if ((cmd = malloc(n)) == NULL) LOG_FATAL_MSG("malloc", errno); memset(cmd, 0, n); /* avoiding valgrind bitching about uninit bytes; remove if we serialize structs correctly */ cmd->hdr.length = n - sizeof(HMMD_HEADER); cmd->hdr.command = HMMD_CMD_INIT; s = cmd->init.data; if (seqdb != NULL) { cmd->init.seqdb_off = s - cmd->init.data; strcpy(s, seqdb); s += strlen(seqdb) + 1; } if (hmmdb != NULL) { cmd->init.hmmdb_off = s - cmd->init.data; strcpy(s, hmmdb); s += strlen(hmmdb) + 1; } } else if (strcmp(s, "reset") == 0) { char *ip_addr = NULL; /* skip leading white spaces */ while (*ptr == ' ' || *ptr == '\t') ++ptr; if (!*ptr) { client_msg(fd, eslEINVAL, "Load command missing ip addres\n"); return; } while (ptr && *ptr) { if (ip_addr != NULL) { client_msg(fd, eslEINVAL, "Multiple ip addresses on command line %s\n", s); return; } ip_addr = strsep(&ptr, " \t"); /* skip leading white spaces */ while (ptr && (*ptr == ' ' || *ptr == '\t')) ++ptr; } n = sizeof(HMMD_COMMAND) + strlen(ip_addr) + 1; if ((cmd = malloc(n)) == NULL) LOG_FATAL_MSG("malloc", errno); memset(cmd, 0, n); /* remove if we ever serialize structs correctly */ cmd->hdr.length = n - sizeof(HMMD_HEADER); cmd->hdr.command = HMMD_CMD_RESET; strcpy(cmd->reset.ip_addr, ip_addr); } else { client_msg(fd, eslEINVAL, "Unknown command %s\n", s); return; } if ((parms = malloc(sizeof(QUEUE_DATA))) == NULL) LOG_FATAL_MSG("malloc", errno); memset(parms, 0, sizeof(QUEUE_DATA)); /* avoid valgrind bitches about uninit bytes; remove if structs are serialized properly */ parms->hmm = NULL; parms->seq = NULL; parms->abc = NULL; parms->opts = NULL; parms->dbx = -1; parms->cmd = cmd; strcpy(parms->ip_addr, data->ip_addr); parms->sock = fd; parms->cmd_type = cmd->hdr.command; parms->query_type = 0; date = time(NULL); ctime_r(&date, timestamp); printf("\n%s", timestamp); /* note ctime_r() leaves \n on end of timestamp */ printf("Queuing command %d from %s (%d)\n", cmd->hdr.command, parms->ip_addr, parms->sock); fflush(stdout); esl_stack_PPush(cmdstack, parms); } static int clientside_loop(CLIENTSIDE_ARGS *data) { int status; char *ptr; char *buffer; char *opt_str; int dbx; int buf_size; int remaining; int amount; int eod; int n; P7_HMM *hmm = NULL; /* query HMM */ ESL_SQ *seq = NULL; /* query sequence */ ESL_SCOREMATRIX *sco = NULL; /* scoring matrix */ P7_HMMFILE *hfp = NULL; ESL_ALPHABET *abc = NULL; /* digital alphabet */ ESL_GETOPTS *opts = NULL; /* search specific options */ HMMD_COMMAND *cmd = NULL; /* search cmd to send to workers */ ESL_STACK *cmdstack = data->cmdstack; QUEUE_DATA *parms; jmp_buf jmp_env; time_t date; char timestamp[32]; buf_size = MAX_BUFFER; if ((buffer = malloc(buf_size)) == NULL) LOG_FATAL_MSG("malloc", errno); if ((opt_str = malloc(MAX_BUFFER)) == NULL) LOG_FATAL_MSG("malloc", errno); ptr = buffer; remaining = buf_size; amount = 0; eod = 0; while (!eod) { int l; char *s; /* Receive message from client */ if ((n = read(data->sock_fd, ptr, remaining)) < 0) { p7_syslog(LOG_ERR,"[%s:%d] - reading %s error %d - %s\n", __FILE__, __LINE__, data->ip_addr, errno, strerror(errno)); return 1; } if (n == 0) return 1; ptr += n; amount += n; remaining -= n; /* scan backwards till we hit the start of the line */ l = amount; s = ptr - 1; while (l-- > 0 && (*s == '\n' || *s == '\r')) --s; while (l-- > 0 && (*s != '\n' && *s != '\r')) --s; eod = (amount > 1 && *(s + 1) == '/' && *(s + 2) == '/' ); /* if the buffer is full, make it larger */ if (!eod && remaining == 0) { if ((buffer = realloc(buffer, buf_size * 2)) == NULL) LOG_FATAL_MSG("realloc", errno); ptr = buffer + buf_size; remaining = buf_size; buf_size *= 2; } } /* zero terminate the buffer */ if (remaining == 0) { if ((buffer = realloc(buffer, buf_size + 1)) == NULL) LOG_FATAL_MSG("realloc", errno); ptr = buffer + buf_size; } *ptr = 0; /* skip all leading white spaces */ ptr = buffer; while (*ptr && isspace(*ptr)) ++ptr; opt_str[0] = 0; if (*ptr == '!') { process_ServerCmd(ptr, data); free(buffer); free(opt_str); return 0; } else if (*ptr == '@') { char *s = ++ptr; /* skip to the end of the line */ while (*ptr && (*ptr != '\n' && *ptr != '\r')) ++ptr; *ptr++ = 0; /* create a commandline string with dummy program name for * the esl_opt_ProcessSpoof() function to parse. */ strncpy(opt_str, "hmmpgmd ", MAX_BUFFER); strncat(opt_str, s, MAX_BUFFER); strncat(opt_str, "\n", MAX_BUFFER); opt_str[MAX_BUFFER-1] = 0; /* skip remaining white spaces */ while (*ptr && isspace(*ptr)) ++ptr; } else { client_msg(data->sock_fd, eslEFORMAT, "Missing options string"); free(buffer); free(opt_str); return 0; } if (strncmp(ptr, "//", 2) == 0) { client_msg(data->sock_fd, eslEFORMAT, "Missing search sequence/hmm"); free(buffer); free(opt_str); return 0; } if (!setjmp(jmp_env)) { dbx = 0; status = process_searchopts(data->sock_fd, opt_str, &opts); if (status != eslOK) { client_msg_longjmp(data->sock_fd, status, &jmp_env, "Failed to parse options string: %s", opts->errbuf); } /* the options string can handle an optional database */ if (esl_opt_ArgNumber(opts) > 0) { client_msg_longjmp(data->sock_fd, status, &jmp_env, "Incorrect number of command line arguments."); } if (esl_opt_IsUsed(opts, "--seqdb")) { dbx = esl_opt_GetInteger(opts, "--seqdb"); } else if (esl_opt_IsUsed(opts, "--hmmdb")) { dbx = esl_opt_GetInteger(opts, "--hmmdb"); } else { client_msg_longjmp(data->sock_fd, eslEINVAL, &jmp_env, "No search database specified, --seqdb or --hmmdb."); } abc = esl_alphabet_Create(eslAMINO); seq = NULL; hmm = NULL; if (*ptr == '>') { /* try to parse the input buffer as a FASTA sequence */ seq = esl_sq_CreateDigital(abc); status = esl_sqio_Parse(ptr, strlen(ptr), seq, eslSQFILE_DAEMON); if (status != eslOK) client_msg_longjmp(data->sock_fd, status, &jmp_env, "Error parsing FASTA sequence"); if (seq->n < 1) client_msg_longjmp(data->sock_fd, eslEFORMAT, &jmp_env, "Error zero length FASTA sequence"); } else if (strncmp(ptr, "HMM", 3) == 0) { if (esl_opt_IsUsed(opts, "--hmmdb")) { client_msg_longjmp(data->sock_fd, status, &jmp_env, "A HMM cannot be used to search a hmm database"); } /* try to parse the buffer as an hmm */ status = p7_hmmfile_OpenBuffer(ptr, strlen(ptr), &hfp); if (status != eslOK) client_msg_longjmp(data->sock_fd, status, &jmp_env, "Failed to open query hmm buffer"); status = p7_hmmfile_Read(hfp, &abc, &hmm); if (status != eslOK) client_msg_longjmp(data->sock_fd, status, &jmp_env, "Error reading query hmm: %s", hfp->errbuf); p7_hmmfile_Close(hfp); } else { /* no idea what we are trying to parse */ client_msg_longjmp(data->sock_fd, eslEFORMAT, &jmp_env, "Unknown query sequence/hmm format"); } } else { /* an error occured some where, so try to clean up */ if (opts != NULL) esl_getopts_Destroy(opts); if (abc != NULL) esl_alphabet_Destroy(abc); if (hmm != NULL) p7_hmm_Destroy(hmm); if (seq != NULL) esl_sq_Destroy(seq); if (sco != NULL) esl_scorematrix_Destroy(sco); free(opt_str); free(buffer); return 0; } if ((parms = malloc(sizeof(QUEUE_DATA))) == NULL) LOG_FATAL_MSG("malloc", errno); /* build the search structure that will be sent to all the workers */ n = sizeof(HMMD_COMMAND); n = n + strlen(opt_str) + 1; if (seq != NULL) { n = n + strlen(seq->name) + 1; n = n + strlen(seq->desc) + 1; n = n + seq->n + 2; } else { n = n + sizeof(P7_HMM); n = n + sizeof(float) * (hmm->M + 1) * p7H_NTRANSITIONS; n = n + sizeof(float) * (hmm->M + 1) * abc->K; n = n + sizeof(float) * (hmm->M + 1) * abc->K; if (hmm->name != NULL) n = n + strlen(hmm->name) + 1; if (hmm->acc != NULL) n = n + strlen(hmm->acc) + 1; if (hmm->desc != NULL) n = n + strlen(hmm->desc) + 1; if (hmm->flags & p7H_RF) n = n + hmm->M + 2; if (hmm->flags & p7H_MMASK) n = n + hmm->M + 2; if (hmm->flags & p7H_CONS) n = n + hmm->M + 2; if (hmm->flags & p7H_CS) n = n + hmm->M + 2; if (hmm->flags & p7H_CA) n = n + hmm->M + 2; if (hmm->flags & p7H_MAP) n = n + sizeof(int) * (hmm->M + 1); } if ((cmd = malloc(n)) == NULL) LOG_FATAL_MSG("malloc", errno); memset(cmd, 0, n); /* silence valgrind bitching about uninit bytes; remove if we ever serialize structs properly */ cmd->hdr.length = n - sizeof(HMMD_HEADER); cmd->hdr.command = (esl_opt_IsUsed(opts, "--seqdb")) ? HMMD_CMD_SEARCH : HMMD_CMD_SCAN; cmd->srch.db_inx = dbx - 1; /* the program indexes databases 0 .. n-1 */ cmd->srch.opts_length = strlen(opt_str) + 1; ptr = cmd->srch.data; memcpy(ptr, opt_str, cmd->srch.opts_length); ptr += cmd->srch.opts_length; if (seq != NULL) { cmd->srch.query_type = HMMD_SEQUENCE; cmd->srch.query_length = seq->n + 2; n = strlen(seq->name) + 1; memcpy(ptr, seq->name, n); ptr += n; n = strlen(seq->desc) + 1; memcpy(ptr, seq->desc, n); ptr += n; n = seq->n + 2; memcpy(ptr, seq->dsq, n); ptr += n; } else { cmd->srch.query_type = HMMD_HMM; cmd->srch.query_length = hmm->M; n = sizeof(P7_HMM); memcpy(ptr, hmm, n); ptr += n; n = sizeof(float) * (hmm->M + 1) * p7H_NTRANSITIONS; memcpy(ptr, *hmm->t, n); ptr += n; n = sizeof(float) * (hmm->M + 1) * abc->K; memcpy(ptr, *hmm->mat, n); ptr += n; memcpy(ptr, *hmm->ins, n); ptr += n; if (hmm->name) { n = strlen(hmm->name) + 1; memcpy(ptr, hmm->name, n); ptr += n; } if (hmm->acc) { n = strlen(hmm->acc) + 1; memcpy(ptr, hmm->acc, n); ptr += n; } if (hmm->desc) { n = strlen(hmm->desc) + 1; memcpy(ptr, hmm->desc, n); ptr += n; } n = hmm->M + 2; if (hmm->flags & p7H_RF) { memcpy(ptr, hmm->rf, n); ptr += n; } if (hmm->flags & p7H_MMASK) { memcpy(ptr, hmm->mm, n); ptr += n; } if (hmm->flags & p7H_CONS) { memcpy(ptr, hmm->consensus, n); ptr += n; } if (hmm->flags & p7H_CS) { memcpy(ptr, hmm->cs, n); ptr += n; } if (hmm->flags & p7H_CA) { memcpy(ptr, hmm->ca, n); ptr += n; } if (hmm->flags & p7H_MAP) { n = sizeof(int) * (hmm->M + 1); memcpy(ptr, hmm->map, n); ptr += n; } } parms->hmm = hmm; parms->seq = seq; parms->abc = abc; parms->opts = opts; parms->dbx = dbx - 1; parms->cmd = cmd; strcpy(parms->ip_addr, data->ip_addr); parms->sock = data->sock_fd; parms->cmd_type = cmd->hdr.command; parms->query_type = (seq != NULL) ? HMMD_SEQUENCE : HMMD_HMM; date = time(NULL); ctime_r(&date, timestamp); printf("\n%s", timestamp); /* note ctime_r() leaves \n on end of timestamp */ if (parms->seq != NULL) { printf("Queuing %s %s from %s (%d)\n", (cmd->hdr.command == HMMD_CMD_SEARCH) ? "search" : "scan", parms->seq->name, parms->ip_addr, parms->sock); } else { printf("Queuing hmm %s from %s (%d)\n", parms->hmm->name, parms->ip_addr, parms->sock); } printf("%s", opt_str); /* note opt_str already has trailing \n */ fflush(stdout); esl_stack_PPush(cmdstack, parms); free(buffer); free(opt_str); return 0; } /* discard_function() * function handed to esl_stack_DiscardSelected() to remove * all commands in the stack that are associated with a * particular client socket, because we're closing that * client down. Prototype to this is dictate by the generalized * interface to esl_stack_DiscardSelected(). */ static int discard_function(void *elemp, void *args) { QUEUE_DATA *elem = (QUEUE_DATA *) elemp; int fd = * (int *) args; if (elem->sock == fd) { free_QueueData(elem); return TRUE; } return FALSE; } static void * clientside_thread(void *arg) { int eof; CLIENTSIDE_ARGS *data = (CLIENTSIDE_ARGS *)arg; /* Guarantees that thread resources are deallocated upon return */ pthread_detach(pthread_self()); eof = 0; while (!eof) { eof = clientside_loop(data); } /* remove any commands in stack associated with this client's socket */ esl_stack_DiscardSelected(data->cmdstack, discard_function, &(data->sock_fd)); printf("Closing %s (%d)\n", data->ip_addr, data->sock_fd); fflush(stdout); close(data->sock_fd); free(data); pthread_exit(NULL); } static void * client_comm_thread(void *arg) { int n; int fd; int addrlen; pthread_t thread_id; struct sockaddr_in addr; CLIENTSIDE_ARGS *targs = NULL; CLIENTSIDE_ARGS *data = (CLIENTSIDE_ARGS *)arg; for ( ;; ) { /* Wait for a client to connect */ n = sizeof(addr); if ((fd = accept(data->sock_fd, (struct sockaddr *)&addr, (unsigned int *)&n)) < 0) LOG_FATAL_MSG("accept", errno); if ((targs = malloc(sizeof(CLIENTSIDE_ARGS))) == NULL) LOG_FATAL_MSG("malloc", errno); targs->cmdstack = data->cmdstack; targs->sock_fd = fd; addrlen = sizeof(targs->ip_addr); strncpy(targs->ip_addr, inet_ntoa(addr.sin_addr), addrlen); targs->ip_addr[addrlen-1] = 0; if ((n = pthread_create(&thread_id, NULL, clientside_thread, targs)) != 0) LOG_FATAL_MSG("thread create", n); } pthread_exit(NULL); } static void setup_clientside_comm(ESL_GETOPTS *opts, CLIENTSIDE_ARGS *args) { int n; int reuse; int sock_fd; pthread_t thread_id; struct linger linger; struct sockaddr_in addr; /* Create socket for incoming connections */ if ((sock_fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) LOG_FATAL_MSG("socket", errno); /* incase the server went down in an ungraceful way, allow the port to be * reused avoiding the timeout. */ reuse = 1; if (setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) < 0) LOG_FATAL_MSG("setsockopt", errno); /* the sockets are never closed, so if the server exits, force the kernel to * close the socket and clear it so the server can be restarted immediately. */ linger.l_onoff = 1; linger.l_linger = 0; if (setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, (char *)&linger, sizeof(linger)) < 0) LOG_FATAL_MSG("setsockopt", errno); /* Construct local address structure */ memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons(esl_opt_GetInteger(opts, "--cport")); /* Bind to the local address */ if (bind(sock_fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) LOG_FATAL_MSG("bind", errno); /* Mark the socket so it will listen for incoming connections */ if (listen(sock_fd, esl_opt_GetInteger(opts, "--ccncts")) < 0) LOG_FATAL_MSG("listen", errno); args->sock_fd = sock_fd; if ((n = pthread_create(&thread_id, NULL, client_comm_thread, (void *)args)) != 0) LOG_FATAL_MSG("socket", n); } static void workerside_loop(WORKERSIDE_ARGS *data, WORKER_DATA *worker) { ESL_STOPWATCH *w = NULL; HMMD_SEARCH_STATS *stats = NULL; HMMD_COMMAND cmd; int n; int size; int total; char *ptr; memset(&cmd, 0, sizeof(HMMD_COMMAND)); /* silence valgrind. if we ever serialize structs properly, remove */ w = esl_stopwatch_Create(); for ( ; ; ) { /* wait for the next search object */ if ((n = pthread_mutex_lock (&data->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); /* wait for the master's signal to start the calculations */ while (worker->cmd == NULL) { if ((n = pthread_cond_wait(&data->start_cond, &data->work_mutex)) != 0) LOG_FATAL_MSG("cond wait", n); } if ((n = pthread_mutex_unlock (&data->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); /* terminate the connection */ if (worker->cmd->hdr.command == HMMD_CMD_RESET) { break; } else if (worker->cmd->hdr.command == HMMD_CMD_SHUTDOWN) { fd_set rset; struct timeval tv; n = MSG_SIZE(worker->cmd); if (writen(worker->sock_fd, worker->cmd, n) != n) { p7_syslog(LOG_ERR,"[%s:%d] - writing %s error %d - %s\n", __FILE__, __LINE__, worker->ip_addr, errno, strerror(errno)); break; } FD_ZERO(&rset); FD_SET(worker->sock_fd, &rset); tv.tv_sec = 2; tv.tv_usec = 0; if ((n = select(worker->sock_fd + 1, &rset, NULL, NULL, &tv)) < 0) { p7_syslog(LOG_ERR,"[%s:%d] - select %s error %d - %s\n", __FILE__, __LINE__, worker->ip_addr, errno, strerror(errno)); } else { if (n == 0) { p7_syslog(LOG_ERR,"[%s:%d] - shutdown %s is not responding\n", __FILE__, __LINE__, worker->ip_addr); } else { n = sizeof(HMMD_HEADER); if ((size = readn(worker->sock_fd, &cmd, n)) == -1) { p7_syslog(LOG_ERR,"[%s:%d] - reading %s error %d - %s\n", __FILE__, __LINE__, worker->ip_addr, errno, strerror(errno)); } if (cmd.hdr.command == HMMD_CMD_SHUTDOWN) { p7_syslog(LOG_ERR,"[%s:%d] - shutting down %s\n", __FILE__, __LINE__, worker->ip_addr); } else { p7_syslog(LOG_ERR,"[%s:%d] - error shutting down %s - received %d\n", __FILE__, __LINE__, worker->ip_addr, cmd.hdr.command); } } } break; } //printf ("Writing %d bytes to %s [MSG = %d/%d]\n", (int)MSG_SIZE(worker->cmd), worker->ip_addr, worker->cmd->hdr.command, worker->cmd->hdr.length); esl_stopwatch_Start(w); /* write search message in two parts */ n = sizeof(HMMD_HEADER) + sizeof(HMMD_SEARCH_CMD); memcpy(&cmd, worker->cmd, n); cmd.srch.inx = worker->srch_inx; cmd.srch.cnt = worker->srch_cnt; if (writen(worker->sock_fd, &cmd, n) != n) { p7_syslog(LOG_ERR,"[%s:%d] - writing %s error %d - %s\n", __FILE__, __LINE__, worker->ip_addr, errno, strerror(errno)); break; } /* write remaining data, i.e. sequence, options etc. */ ptr = (char *)worker->cmd; ptr += n; n = MSG_SIZE(worker->cmd) - n; if (writen(worker->sock_fd, ptr, n) != n) { p7_syslog(LOG_ERR,"[%s:%d] - writing %s error %d - %s\n", __FILE__, __LINE__, worker->ip_addr, errno, strerror(errno)); break; } total = 0; worker->total = 0; n = sizeof(worker->status); total += n; if ((size = readn(worker->sock_fd, &worker->status, n)) == -1) { p7_syslog(LOG_ERR,"[%s:%d] - reading %s error %d - %s\n", __FILE__, __LINE__, worker->ip_addr, errno, strerror(errno)); break; } if (worker->status.status != eslOK) { n = worker->status.msg_size; total += n; if ((worker->err_buf = malloc(n)) == NULL) LOG_FATAL_MSG("malloc", errno); worker->err_buf[0] = 0; if ((size = readn(worker->sock_fd, worker->err_buf, n)) == -1) { p7_syslog(LOG_ERR,"[%s:%d] - reading %s error %d - %s\n", __FILE__, __LINE__, worker->ip_addr, errno, strerror(errno)); break; } } else { n = sizeof(worker->stats); total += n; if ((size = readn(worker->sock_fd, &worker->stats, n)) == -1) { p7_syslog(LOG_ERR,"[%s:%d] - reading %s error %d - %s\n", __FILE__, __LINE__, worker->ip_addr, errno, strerror(errno)); break; } stats = &worker->stats; /* read in the hits */ n = sizeof(P7_HIT) * stats->nhits; if ((worker->hit = malloc(n)) == NULL) LOG_FATAL_MSG("malloc", errno); if ((size = readn(worker->sock_fd, worker->hit, n)) == -1) { p7_syslog(LOG_ERR,"[%s:%d] - reading %s error %d - %s\n", __FILE__, __LINE__, worker->ip_addr, errno, strerror(errno)); break; } /* read in the domain and alignment info */ n = worker->status.msg_size - sizeof(worker->stats) - n; if ((worker->hit_data = malloc(n)) == NULL) LOG_FATAL_MSG("malloc", errno); if ((size = readn(worker->sock_fd, worker->hit_data, n)) == -1) { p7_syslog(LOG_ERR,"[%s:%d] - reading %s error %d - %s\n", __FILE__, __LINE__, worker->ip_addr, errno, strerror(errno)); break; } } esl_stopwatch_Stop(w); if ((n = pthread_mutex_lock (&data->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); /* set the state of the worker to completed */ worker->cmd = NULL; worker->completed = 1; worker->total = total; ++data->completed; /* notify the master that a worker has completed */ if ((n = pthread_cond_broadcast(&data->complete_cond)) != 0) LOG_FATAL_MSG("cond broadcast", n); if ((n = pthread_mutex_unlock (&data->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); printf ("WORKER %s COMPLETED: %.2f sec received %d bytes\n", worker->ip_addr, w->elapsed, total); fflush(stdout); } esl_stopwatch_Destroy(w); return; } static void * workerside_thread(void *arg) { HMMD_COMMAND *cmd = NULL; WORKER_DATA *worker = (WORKER_DATA *)arg; WORKERSIDE_ARGS *parent = (WORKERSIDE_ARGS *)worker->parent; HMMD_HEADER hdr; int n; int fd = 0; int version; int updated; int status = eslOK; char *p; memset(&hdr, 0, sizeof(HMMD_HEADER)); /* silence valgrind; remove if/when we serialize structs properly */ /* Guarantees that thread resources are deallocated upon return */ pthread_detach(pthread_self()); printf("Handling worker %s (%d)\n", worker->ip_addr, worker->sock_fd); fflush(stdout); updated = 0; while (!updated) { /* get the database version to load */ if ((n = pthread_mutex_lock (&parent->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); version = parent->db_version; if ((n = pthread_mutex_unlock (&parent->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); n = sizeof(HMMD_COMMAND); if (parent->seq_db != NULL) n += strlen(parent->seq_db->name) + 1; if (parent->hmm_db != NULL) n += strlen(parent->hmm_db->name) + 1; cmd = malloc(n); if (cmd == NULL) { p7_syslog(LOG_ERR,"[%s:%d] - malloc %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); goto EXIT; } memset(cmd, 0, n); cmd->hdr.length = n - sizeof(HMMD_HEADER); cmd->hdr.command = HMMD_CMD_INIT; p = cmd->init.data; if (parent->seq_db != NULL) { cmd->init.db_cnt = parent->seq_db->db_cnt; cmd->init.seq_cnt = parent->seq_db->count; cmd->init.seqdb_off = p - cmd->init.data; strncpy(cmd->init.sid, parent->seq_db->id, sizeof(cmd->init.sid)); cmd->init.sid[sizeof(cmd->init.sid)-1] = 0; strcpy(p, parent->seq_db->name); p += strlen(parent->seq_db->name) + 1; } if (parent->hmm_db != NULL) { cmd->init.hmm_cnt = 1; cmd->init.model_cnt = parent->hmm_db->n; cmd->init.hmmdb_off = p - cmd->init.data; //strncpy(cmd->init.hid, parent->hmm_db->id, sizeof(cmd->init.hid)); //cmd->init.hid[sizeof(cmd->init.hid)-1] = 0; strcpy(p, parent->hmm_db->name); p += strlen(parent->hmm_db->name) + 1; } if (writen(worker->sock_fd, cmd, n) != n) { p7_syslog(LOG_ERR,"[%s:%d] - writing (%d) error %d - %s\n", __FILE__, __LINE__, worker->sock_fd, errno, strerror(errno)); status = eslFAIL; } /* process the init command first */ if (readn(worker->sock_fd, &hdr, sizeof(hdr)) == -1) { p7_syslog(LOG_ERR,"[%s:%d] - reading (%d) error %d - %s\n", __FILE__, __LINE__, worker->sock_fd, errno, strerror(errno)); status = eslFAIL; } /* cmd is a HMMD_COMMAND. * consists of HMMD_HEADER: length, command, status * and a union of HMMD_INIT_CMD, HMMD_SEARCH_COMMAND, HMMD_INIT_RESET. * we know which is valid, from hdr.command * the total malloc size for an HMMD_COMMAND is calculated from the header, using MSG_SIZE(cmd) */ n = MSG_SIZE(&hdr); if ((cmd = realloc(cmd, n)) == NULL) { p7_syslog(LOG_ERR,"[%s:%d] - realloc error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); status = eslFAIL; } if (readn(worker->sock_fd, &(cmd->init), hdr.length) == -1) { p7_syslog(LOG_ERR,"[%s:%d] - reading (%d) error %d - %s\n", __FILE__, __LINE__, worker->sock_fd, errno, strerror(errno)); status = eslFAIL; } /* validate the database of the worker before adding him to the list */ if (hdr.command != HMMD_CMD_INIT) { p7_syslog(LOG_ERR,"[%s:%d] - expecting HMMD_CMD_INIT %d\n", __FILE__, __LINE__, hdr.command); status = eslFAIL; } if (cmd->hdr.status != eslOK) { p7_syslog(LOG_ERR,"[%s:%d] - workers init status failed %d\n", __FILE__, __LINE__, cmd->hdr.status); status = eslFAIL; } worker->next = NULL; worker->prev = NULL; /* add the worker to the pending list */ if ((n = pthread_mutex_lock (&parent->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); assert(validate_workers(parent)); /* make sure the master has not loaded a new database while we were waiting * for the worker to load and verify the database we started out this. If * the version has changed, force the worker to reload and verify. */ if (version == parent->db_version) { if (status == eslOK) { worker->next = parent->pending; parent->pending = worker; ++parent->pend_cnt; } else { worker->next = parent->idling; parent->idling = worker; ++parent->idle_cnt; } updated = 1; } assert(validate_workers(parent)); if ((n = pthread_mutex_unlock (&parent->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); } printf("Pending worker %s (%d)\n", worker->ip_addr, worker->sock_fd); fflush(stdout); workerside_loop(parent, worker); if ((n = pthread_mutex_lock (&parent->work_mutex)) != 0) LOG_FATAL_MSG("mutex lock", n); fd = worker->sock_fd; ++parent->failed; ++parent->completed; worker->terminated = 1; worker->total = 0; worker->sock_fd = -1; assert(validate_workers(parent)); /* notify the master that a worker has completed */ if ((n = pthread_cond_broadcast(&parent->complete_cond)) != 0) LOG_FATAL_MSG("cond broadcast", n); if ((n = pthread_mutex_unlock (&parent->work_mutex)) != 0) LOG_FATAL_MSG("mutex unlock", n); EXIT: printf("Closing worker %s (%d)\n", worker->ip_addr, fd); fflush(stdout); if (cmd != NULL) free(cmd); close(fd); pthread_exit(NULL); } static void * worker_comm_thread(void *arg) { int n; int fd; int addrlen; pthread_t thread_id; struct sockaddr_in addr; WORKERSIDE_ARGS *data = (WORKERSIDE_ARGS *)arg; WORKER_DATA *worker; for ( ;; ) { /* Wait for a worker to connect */ n = sizeof(addr); if ((fd = accept(data->sock_fd, (struct sockaddr *)&addr, (unsigned int *)&n)) < 0) LOG_FATAL_MSG("accept", errno); if ((worker = malloc(sizeof(WORKER_DATA))) == NULL) LOG_FATAL_MSG("thread create", errno); memset(worker, 0, sizeof(WORKER_DATA)); worker->parent = data; worker->sock_fd = fd; addrlen = sizeof(worker->ip_addr); strncpy(worker->ip_addr, inet_ntoa(addr.sin_addr), addrlen); worker->ip_addr[addrlen-1] = 0; if ((n = pthread_create(&thread_id, NULL, workerside_thread, worker)) != 0) LOG_FATAL_MSG("thread create", n); } pthread_exit(NULL); } static void setup_workerside_comm(ESL_GETOPTS *opts, WORKERSIDE_ARGS *args) { int n; int reuse; int sock_fd; pthread_t thread_id; struct linger linger; struct sockaddr_in addr; /* Create socket for incoming connections */ if ((sock_fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) LOG_FATAL_MSG("socket", errno); /* incase the server went down in an ungraceful way, allow the port to be * reused avoiding the timeout. */ reuse = 1; if (setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) < 0) LOG_FATAL_MSG("setsockopt", errno); /* the sockets are never closed, so if the server exits, force the kernel to * close the socket and clear it so the server can be restarted immediately. */ linger.l_onoff = 1; linger.l_linger = 0; if (setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, (char *)&linger, sizeof(linger)) < 0) LOG_FATAL_MSG("setsockopt", errno); /* Construct local address structure */ memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons(esl_opt_GetInteger(opts, "--wport")); /* Bind to the local address */ if (bind(sock_fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) LOG_FATAL_MSG("bind", errno); /* Mark the socket so it will listen for incoming connections */ if (listen(sock_fd, esl_opt_GetInteger(opts, "--wcncts")) < 0) LOG_FATAL_MSG("listen", errno); args->sock_fd = sock_fd; if ((n = pthread_create(&thread_id, NULL, worker_comm_thread, (void *)args)) != 0) LOG_FATAL_MSG("thread create", n); } #endif /*HMMER_THREADS*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/generic_fwdback_rescaled.c0000664361611702660230000005664112473612613020176 0ustar wheelerteddy/* * gcc -o generic_fwdback_rescaled_example -mssse3 -I. -I../easel -L../easel -L. generic_fwdback_rescaled.c -lhmmer -leasel */ #include "p7_config.h" #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_vectorops.h" #include "hmmer.h" extern int p7_GForwardOdds(const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMX *gx, float *opt_sc); extern int p7_profile_CopyInfoFromHMM(P7_PROFILE *gm, const P7_HMM *hmm); extern int p7_profile_ReconfigLengthInOdds(P7_PROFILE *gm, int L); extern int p7_profile_ConfigInOdds (const P7_HMM *hmm, const P7_BG *bg, P7_PROFILE *gm, int L, int mode); extern int p7_profile_ConfigInOdds_DDScaled(const P7_HMM *hmm, const P7_BG *bg, P7_PROFILE *gm, int L, float *ret_ddscale); extern float p7_gmx_Max(P7_GMX *gx); extern float p7_gmx_Min(P7_GMX *gx); #define STYLES "--dd,--fs,--sw,--ls,--s" /* Exclusive choice for alignment mode */ static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "--dd", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "DD-scaled unihit glocal alignment", 0 }, { "--fs", eslARG_NONE,"default",NULL, NULL, STYLES, NULL, NULL, "multihit local alignment", 0 }, { "--sw", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "unihit local alignment", 0 }, { "--ls", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "multihit glocal alignment", 0 }, { "--s", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "unihit glocal alignment", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "testbed for Farrar DD-scaled Forward, generic implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_PROFILE *gmref = NULL; P7_GMX *fwd = NULL; P7_GMX *fwdref = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float fsc, fscref; float nullsc; float ddscale = 0.0; float min, max; int status; printf("%-30s %-30s %-10s %-10s\n", "# profile name", "# seq name", "fwd (test)", "fwd (ref) "); printf("%-30s %-30s %10s %10s\n", "#--------------", "#--------------", "----------", "----------"); /* Open the HMM file */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); while ( (status = p7_hmmfile_Read(hfp, &abc, &hmm)) != eslEOF) { if (status == eslEOD) p7_Fail("read failed, HMM file %s may be truncated?", hmmfile); else if (status == eslEFORMAT) p7_Fail("bad file format in HMM file %s", hmmfile); else if (status == eslEINCOMPAT) p7_Fail("HMM file %s contains different alphabets", hmmfile); else if (status != eslOK) p7_Fail("Unexpected error in reading HMMs from %s", hmmfile); /* Open the sqfile */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); bg = p7_bg_Create(abc); /* Config the test model however we were asked to */ gm = p7_profile_Create(hmm->M, abc); if (esl_opt_GetBoolean(go, "--dd")) status = p7_profile_ConfigInOdds_DDScaled(hmm, bg, gm, sq->n, &ddscale); else if (esl_opt_GetBoolean(go, "--fs")) status = p7_profile_ConfigInOdds (hmm, bg, gm, sq->n, p7_LOCAL); else if (esl_opt_GetBoolean(go, "--sw")) status = p7_profile_ConfigInOdds (hmm, bg, gm, sq->n, p7_UNILOCAL); else if (esl_opt_GetBoolean(go, "--ls")) status = p7_profile_ConfigInOdds (hmm, bg, gm, sq->n, p7_GLOCAL); else if (esl_opt_GetBoolean(go, "--s")) status = p7_profile_ConfigInOdds (hmm, bg, gm, sq->n, p7_UNIGLOCAL); if (status == eslERANGE) printf("# MODEL ENTRY UNDERFLOW: %s\n", hmm->name); /* Config the reference model the same way */ gmref = p7_profile_Create(hmm->M, abc); if (esl_opt_GetBoolean(go, "--dd")) status = p7_ProfileConfig(hmm, bg, gmref, sq->n, p7_UNIGLOCAL); else if (esl_opt_GetBoolean(go, "--fs")) status = p7_ProfileConfig(hmm, bg, gmref, sq->n, p7_LOCAL); else if (esl_opt_GetBoolean(go, "--sw")) status = p7_ProfileConfig(hmm, bg, gmref, sq->n, p7_UNILOCAL); else if (esl_opt_GetBoolean(go, "--ls")) status = p7_ProfileConfig(hmm, bg, gmref, sq->n, p7_GLOCAL); else if (esl_opt_GetBoolean(go, "--s")) status = p7_ProfileConfig(hmm, bg, gmref, sq->n, p7_UNIGLOCAL); fwd = p7_gmx_Create(gm->M, 400); fwdref = p7_gmx_Create(gmref->M, 400); while ( (status = esl_sqio_Read(sqfp, sq)) != eslEOF) { if (status == eslEFORMAT) p7_Fail("Parse failed (sequence file %s)\n%s\n", sqfp->filename, sqfp->get_error(sqfp)); else if (status != eslOK) p7_Fail("Unexpected error %d reading sequence file %s", status, sqfp->filename); /* Resize DP matrix if necessary */ p7_gmx_GrowTo(fwd, gm->M, sq->n); p7_gmx_GrowTo(fwdref, gmref->M, sq->n); /* Set the profile and null model's target length models */ p7_bg_SetLength(bg, sq->n); p7_profile_ReconfigLengthInOdds(gm, sq->n); p7_ReconfigLength (gmref, sq->n); /* Run Forward test version*/ p7_GForwardOdds (sq->dsq, sq->n, gm, fwd, &fsc); fsc += ddscale; /* Run Forward reference version */ p7_GForward( sq->dsq, sq->n, gmref, fwdref, &fscref); //p7_gmx_Dump(stdout, fwd, p7_SHOW_LOG); /* Those scores are partial log-odds likelihoods in nats. * Subtract off the rest of the null model, convert to bits. */ p7_bg_NullOne(bg, sq->dsq, sq->n, &nullsc); min = p7_gmx_Min(fwd); max = p7_gmx_Max(fwd); fsc = (fsc - nullsc) / eslCONST_LOG2; fscref = (fscref - nullsc) / eslCONST_LOG2; printf("%-30s %-30s %10.4f %10.4f %10.4g %10.4g %4s %9s %9s\n", gm->name, sq->name, fsc, fscref, min, max, (fabs(fsc - fscref) >= 0.5 ? "FAIL" : "pass"), (min == 0.0 ? "UNDERFLOW" : "ok"), ((max > 1e37 || isinf(max))? "OVERFLOW" : "ok")); p7_gmx_Reuse(fwd); p7_gmx_Reuse(fwdref); esl_sq_Reuse(sq); } p7_gmx_Destroy(fwd); p7_gmx_Destroy(fwdref); p7_profile_Destroy(gm); p7_profile_Destroy(gmref); p7_hmm_Destroy(hmm); p7_bg_Destroy(bg); esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); } /* Cleanup */ p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } int p7_GForwardOdds(const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMX *gx, float *opt_sc) { float const *tsc = gm->tsc; float **dp = gx->dp; float *xmx = gx->xmx; int M = gm->M; int i,k; float esc = p7_profile_IsLocal(gm) ? 1.0f : 0.0f; float totscale = 0.0f; float rescale; /* Initialization of the zero row */ XMX(0,p7G_N) = 1.0f; /* S->N, p=1 */ XMX(0,p7G_B) = gm->xsc[p7P_N][p7P_MOVE]; /* S->N->B, 1*t_NB */ XMX(0,p7G_E) = XMX(0,p7G_C) = XMX(0,p7G_J) = 0.0f; /* need seq to get here */ for (k = 0; k <= M; k++) MMX(0,k) = IMX(0,k) = DMX(0,k) = 0.0f; /* Recursion * boundary conditions: tsc[0][] = impossible for all eight transitions (no node 0) * D_1 wastefully calculated (doesn't exist) */ for (i = 1; i <= L; i++) { float const *rsc = gm->rsc[dsq[i]]; float sc; MMX(i,0) = IMX(i,0) = DMX(i,0) = 0.0f; XMX(i, p7G_E) = 0.0f; for (k = 1; k < M; k++) { /* match state */ sc = MMX(i-1,k-1) * TSC(p7P_MM,k-1) + IMX(i-1,k-1) * TSC(p7P_IM,k-1) + XMX(i-1,p7G_B) * TSC(p7P_BM,k-1) + DMX(i-1,k-1) * TSC(p7P_DM,k-1); MMX(i,k) = sc * MSC(k); /* insert state */ sc = MMX(i-1,k) * TSC(p7P_MI,k) + IMX(i-1,k) * TSC(p7P_II,k); IMX(i,k) = sc * ISC(k); /* delete state */ DMX(i,k) = MMX(i,k-1) * TSC(p7P_MD,k-1) + DMX(i,k-1) * TSC(p7P_DD,k-1); /* E state update */ XMX(i,p7G_E) += MMX(i,k) * esc + DMX(i,k) * esc; } /* unrolled match state M_M */ sc = MMX(i-1,M-1) * TSC(p7P_MM,M-1) + IMX(i-1,M-1) * TSC(p7P_IM,M-1) + XMX(i-1,p7G_B) * TSC(p7P_BM,M-1) + DMX(i-1,M-1) * TSC(p7P_DM,M-1); MMX(i,M) = sc * MSC(M); IMX(i,M) = 0.0f; /* unrolled delete state D_M */ DMX(i,M) = MMX(i,M-1) * TSC(p7P_MD,M-1) + DMX(i,M-1) * TSC(p7P_DD,M-1); /* unrolled E state update */ XMX(i,p7G_E) += MMX(i,M) + DMX(i,M); /* J state */ XMX(i,p7G_J) = XMX(i-1,p7G_J) * gm->xsc[p7P_J][p7P_LOOP] + XMX(i, p7G_E) * gm->xsc[p7P_E][p7P_LOOP]; /* C state */ XMX(i,p7G_C) = XMX(i-1,p7G_C) * gm->xsc[p7P_C][p7P_LOOP] + XMX(i, p7G_E) * gm->xsc[p7P_E][p7P_MOVE]; /* N state */ XMX(i,p7G_N) = XMX(i-1,p7G_N) * gm->xsc[p7P_N][p7P_LOOP]; /* B state */ XMX(i,p7G_B) = XMX(i, p7G_N) * gm->xsc[p7P_N][p7P_MOVE] + XMX(i, p7G_J) * gm->xsc[p7P_J][p7P_MOVE]; /* sparse rescaling */ if (XMX(i,p7G_E) > 1.0e4) { rescale = 1.0 / XMX(i,p7G_E); totscale += log(XMX(i,p7G_E)); XMX(i,p7G_N) *= rescale; XMX(i,p7G_B) *= rescale; XMX(i,p7G_E) = 1.0; XMX(i,p7G_J) *= rescale; XMX(i,p7G_C) *= rescale; for (k = 1; k <= M; k++) { MMX(i,k) *= rescale; DMX(i,k) *= rescale; IMX(i,k) *= rescale; } } } if (opt_sc != NULL) *opt_sc = log(XMX(L,p7G_C) * gm->xsc[p7P_C][p7P_MOVE]) + totscale; gx->M = M; gx->L = L; return eslOK; } /* this is a copy of a block of modelconfig.c::p7_ProfileConfig() * ...and could replace it */ int p7_profile_CopyInfoFromHMM(P7_PROFILE *gm, const P7_HMM *hmm) { int z; int status; /* Contract checks */ if (gm->abc->type != hmm->abc->type) ESL_XEXCEPTION(eslEINVAL, "HMM and profile alphabet don't match"); if (hmm->M > gm->allocM) ESL_XEXCEPTION(eslEINVAL, "profile too small to hold HMM"); if (! (hmm->flags & p7H_CONS)) ESL_XEXCEPTION(eslEINVAL, "HMM must have a consensus to transfer to the profile"); /* Copy some pointer references and other info across from HMM */ gm->M = hmm->M; gm->max_length = hmm->max_length; gm->mode = p7_NO_MODE; gm->roff = -1; gm->eoff = -1; gm->offs[p7_MOFFSET] = -1; gm->offs[p7_FOFFSET] = -1; gm->offs[p7_POFFSET] = -1; if (gm->name != NULL) free(gm->name); if (gm->acc != NULL) free(gm->acc); if (gm->desc != NULL) free(gm->desc); if ((status = esl_strdup(hmm->name, -1, &(gm->name))) != eslOK) goto ERROR; if ((status = esl_strdup(hmm->acc, -1, &(gm->acc))) != eslOK) goto ERROR; if ((status = esl_strdup(hmm->desc, -1, &(gm->desc))) != eslOK) goto ERROR; if (hmm->flags & p7H_RF) strcpy(gm->rf, hmm->rf); if (hmm->flags & p7H_MMASK) strcpy(gm->mm, hmm->mm); if (hmm->flags & p7H_CONS) strcpy(gm->consensus, hmm->consensus); /* must be present, actually, so the flag test is just for symmetry w/ other optional HMM fields */ if (hmm->flags & p7H_CS) strcpy(gm->cs, hmm->cs); for (z = 0; z < p7_NEVPARAM; z++) gm->evparam[z] = hmm->evparam[z]; for (z = 0; z < p7_NCUTOFFS; z++) gm->cutoff[z] = hmm->cutoff[z]; for (z = 0; z < p7_MAXABET; z++) gm->compo[z] = hmm->compo[z]; return eslOK; ERROR: return status; } int p7_profile_ReconfigLengthInOdds(P7_PROFILE *gm, int L) { float ploop, pmove; /* Configure N,J,C transitions so they bear L/(2+nj) of the total * unannotated sequence length L. */ pmove = (2.0f + gm->nj) / ((float) L + 2.0f + gm->nj); /* 2/(L+2) for sw; 3/(L+3) for fs */ ploop = 1.0f - pmove; gm->xsc[p7P_N][p7P_LOOP] = gm->xsc[p7P_C][p7P_LOOP] = gm->xsc[p7P_J][p7P_LOOP] = ploop; gm->xsc[p7P_N][p7P_MOVE] = gm->xsc[p7P_C][p7P_MOVE] = gm->xsc[p7P_J][p7P_MOVE] = pmove; gm->L = L; return eslOK; } /* like p7_ProfileConfig(), but in odds ratios rather than log. * This is the "normal" odds ratio version. * See _DDScaled for an experimental version for glocal/global. * * In glocal, because we left-wing-retract the BMk transition, * that transition can underflow. If it does, return . */ int p7_profile_ConfigInOdds(const P7_HMM *hmm, const P7_BG *bg, P7_PROFILE *gm, int L, int mode) { int k,x; float *occ = NULL; float *tp, *rp; float sc[p7_MAXCODE]; float Z; int status; int did_underflow = FALSE; if ( (status = p7_profile_CopyInfoFromHMM(gm, hmm)) != eslOK) return status; gm->mode = mode; /* Some initializations assumed log space. Change them to probspace. */ esl_vec_FSet(gm->tsc, p7P_NTRANS, 0.0f); /* node 0 nonexistent, has no transitions */ if (gm->M > 1) { p7P_TSC(gm, 1, p7P_DM) = 0.0f; /* delete state D_1 is wing-retracted */ p7P_TSC(gm, 1, p7P_DD) = 0.0f; } for (x = 0; x < gm->abc->Kp; x++) { p7P_MSC(gm, 0, x) = 0.0f; /* no emissions from nonexistent M_0... */ p7P_ISC(gm, 0, x) = 0.0f; /* or I_0... */ /* I_M is initialized in profile config, when we know actual M, not just allocated max M */ } x = esl_abc_XGetGap(gm->abc); /* no emission can emit/score gap characters */ esl_vec_FSet(gm->rsc[x], (gm->M+1)*p7P_NR, 0.0f); x = esl_abc_XGetMissing(gm->abc); /* no emission can emit/score missing data characters */ esl_vec_FSet(gm->rsc[x], (gm->M+1)*p7P_NR, 0.0f); /* Entry scores. Recall k-1,k off-by-one storage issue here. * p7P_TSC(gm, k-1, p7P_BM) is the t_BMk transition */ if (p7_profile_IsLocal(gm)) { /* Local mode entry: occ[k] /( \sum_i occ[i] * (M-i+1)) * (Reduces to uniform 2/(M(M+1)) for occupancies of 1.0) */ Z = 0.; ESL_ALLOC(occ, sizeof(float) * (hmm->M+1)); if ((status = p7_hmm_CalculateOccupancy(hmm, occ, NULL)) != eslOK) goto ERROR; for (k = 1; k <= hmm->M; k++) Z += occ[k] * (float) (hmm->M-k+1); for (k = 1; k <= hmm->M; k++) p7P_TSC(gm, k-1, p7P_BM) = occ[k] / Z; /* note off-by-one: entry at Mk stored as [k-1][BM] */ free(occ); } else /* glocal modes: left wing retraction. Check for underflow. */ { Z = hmm->t[0][p7H_MD]; p7P_TSC(gm, 0, p7P_BM) = 1.0 - Z; for (k = 1; k < hmm->M; k++) { p7P_TSC(gm, k, p7P_BM) = Z * hmm->t[k][p7H_DM]; Z *= hmm->t[k][p7H_DD]; } if (p7P_TSC(gm, hmm->M-1, p7P_BM) == 0.0f) did_underflow = TRUE; } /* E state loop/move probabilities: nonzero for MOVE allows loops/multihits * N,C,J transitions are set later by target length model config */ if (p7_profile_IsMultihit(gm)) { gm->xsc[p7P_E][p7P_MOVE] = 0.5f; gm->xsc[p7P_E][p7P_LOOP] = 0.5f; gm->nj = 1.0f; } else { gm->xsc[p7P_E][p7P_MOVE] = 1.0f; gm->xsc[p7P_E][p7P_LOOP] = 0.0f; gm->nj = 0.0f; } /* main profile transition scores */ for (k = 1; k < gm->M; k++) { tp = gm->tsc + k * p7P_NTRANS; tp[p7P_MM] = hmm->t[k][p7H_MM]; tp[p7P_MI] = hmm->t[k][p7H_MI]; tp[p7P_MD] = hmm->t[k][p7H_MD]; tp[p7P_IM] = hmm->t[k][p7H_IM]; tp[p7P_II] = hmm->t[k][p7H_II]; tp[p7P_DM] = hmm->t[k][p7H_DM]; tp[p7P_DD] = hmm->t[k][p7H_DD]; } /* match residue scores */ /* we still compute this in log space, then exp() it back, * because degenerate residue scores are avg log odds. */ sc[hmm->abc->K] = -eslINFINITY; /* gap character */ sc[hmm->abc->Kp-2] = -eslINFINITY; /* nonresidue character */ sc[hmm->abc->Kp-1] = -eslINFINITY; /* missing data character */ for (k = 1; k <= hmm->M; k++) { for (x = 0; x < hmm->abc->K; x++) sc[x] = log(hmm->mat[k][x] / bg->f[x]); esl_abc_FExpectScVec(hmm->abc, sc, bg->f); for (x = 0; x < hmm->abc->Kp; x++) { rp = gm->rsc[x] + k * p7P_NR; rp[p7P_MSC] = exp(sc[x]); } } /* insert residue scores, hardwired to odds ratio of 1.0 */ for (x = 0; x < gm->abc->Kp; x++) { for (k = 1; k < hmm->M; k++) p7P_ISC(gm, k, x) = 1.0f; p7P_ISC(gm, hmm->M, x) = 0.0f; /* init I_M to impossible. */ } for (k = 1; k <= hmm->M; k++) p7P_ISC(gm, k, gm->abc->K) = 0.0f; /* gap symbol */ for (k = 1; k <= hmm->M; k++) p7P_ISC(gm, k, gm->abc->Kp-2) = 0.0f; /* nonresidue symbol */ for (k = 1; k <= hmm->M; k++) p7P_ISC(gm, k, gm->abc->Kp-1) = 0.0f; /* missing data symbol */ /* Remaining specials, [NCJ][MOVE | LOOP] are set by ReconfigLengthInOdds() */ gm->L = 0; /* force ReconfigLengthInOdds to reconfig */ if ((status = p7_profile_ReconfigLengthInOdds(gm, L)) != eslOK) goto ERROR; return (did_underflow ? eslERANGE : eslOK); ERROR: if (occ) free(occ); return status; } /* Experimental version that scales by DD transitions * Model must be unihit glocal (p7_UNILOCAL) */ int p7_profile_ConfigInOdds_DDScaled(const P7_HMM *hmm, const P7_BG *bg, P7_PROFILE *gm, int L, float *ret_ddscale) { int k,x; float *occ = NULL; float ddscale; float *tp, *rp; float sc[p7_MAXCODE]; int status; if ( (status = p7_profile_CopyInfoFromHMM(gm, hmm)) != eslOK) return status; gm->mode = p7_UNIGLOCAL; /* Some initializations assumed log space. * Change them */ esl_vec_FSet(gm->tsc, p7P_NTRANS, 0.0f); /* node 0 nonexistent, has no transitions */ if (gm->M > 1) { p7P_TSC(gm, 1, p7P_DM) = 0.0f; /* delete state D_1 is wing-retracted */ p7P_TSC(gm, 1, p7P_DD) = 0.0f; } for (x = 0; x < gm->abc->Kp; x++) { p7P_MSC(gm, 0, x) = 0.0f; /* no emissions from nonexistent M_0... */ p7P_ISC(gm, 0, x) = 0.0f; /* or I_0... */ /* I_M is initialized in profile config, when we know actual M, not just allocated max M */ } x = esl_abc_XGetGap(gm->abc); /* no emission can emit/score gap characters */ esl_vec_FSet(gm->rsc[x], (gm->M+1)*p7P_NR, 0.0f); x = esl_abc_XGetMissing(gm->abc); /* no emission can emit/score missing data characters */ esl_vec_FSet(gm->rsc[x], (gm->M+1)*p7P_NR, 0.0f); /* glocal mode BMk entries, DD-scaled */ p7P_TSC(gm, 0, p7P_BM) = 1.0 - hmm->t[0][p7H_MD]; for (k = 1; k < hmm->M; k++) p7P_TSC(gm, k, p7P_BM) = hmm->t[0][p7H_MD] * hmm->t[k][p7H_DM] / hmm->t[k][p7H_DD]; /* unihit E state loop/move probabilities */ gm->xsc[p7P_E][p7P_MOVE] = 1.0f; gm->xsc[p7P_E][p7P_LOOP] = 0.0f; gm->nj = 0.0f; /* main profile transition scores, DD-scaled */ for (k = 1; k < gm->M; k++) { tp = gm->tsc + k * p7P_NTRANS; ddscale = 1.0f/hmm->t[k][p7H_DD]; tp[p7P_MM] = hmm->t[k][p7H_MM] * ddscale; tp[p7P_MI] = hmm->t[k][p7H_MI]; tp[p7P_MD] = hmm->t[k][p7H_MD] * ddscale; tp[p7P_IM] = hmm->t[k][p7H_IM] * ddscale; tp[p7P_II] = hmm->t[k][p7H_II]; tp[p7P_DM] = hmm->t[k][p7H_DM] * ddscale; tp[p7P_DD] = 1.0; } /* compute log(\prod_k=1..M-1 t_k(DD), total rescale factor */ ddscale = 0.0f; if (! p7_profile_IsLocal(gm)) /* glocal mode: nonzero ddscale */ { for (k = 1; k < gm->M; k++) ddscale += log(hmm->t[k][p7H_DD]); } /* match residue scores */ /* we still compute this in log space, then exp() it back, * because degenerate residue scores are avg log odds. */ sc[hmm->abc->K] = -eslINFINITY; /* gap character */ sc[hmm->abc->Kp-2] = -eslINFINITY; /* nonresidue character */ sc[hmm->abc->Kp-1] = -eslINFINITY; /* missing data character */ for (k = 1; k <= hmm->M; k++) { for (x = 0; x < hmm->abc->K; x++) sc[x] = log(hmm->mat[k][x] / bg->f[x]); esl_abc_FExpectScVec(hmm->abc, sc, bg->f); for (x = 0; x < hmm->abc->Kp; x++) { rp = gm->rsc[x] + k * p7P_NR; rp[p7P_MSC] = exp(sc[x]); } } /* insert residue scores, hardwired to odds ratio of 1.0 */ for (x = 0; x < gm->abc->Kp; x++) { for (k = 1; k < hmm->M; k++) p7P_ISC(gm, k, x) = 1.0f; p7P_ISC(gm, hmm->M, x) = 0.0f; /* init I_M to impossible. */ } for (k = 1; k <= hmm->M; k++) p7P_ISC(gm, k, gm->abc->K) = 0.0f; /* gap symbol */ for (k = 1; k <= hmm->M; k++) p7P_ISC(gm, k, gm->abc->Kp-2) = 0.0f; /* nonresidue symbol */ for (k = 1; k <= hmm->M; k++) p7P_ISC(gm, k, gm->abc->Kp-1) = 0.0f; /* missing data symbol */ /* Remaining specials, [NCJ][MOVE | LOOP] are set by ReconfigLengthInOdds() */ gm->L = 0; /* force ReconfigLengthInOdds to reconfig */ if ((status = p7_profile_ReconfigLengthInOdds(gm, L)) != eslOK) goto ERROR; *ret_ddscale = ddscale; return eslOK; ERROR: if (occ) free(occ); return status; } float p7_gmx_Max(P7_GMX *gx) { float **dp = gx->dp; float *xmx = gx->xmx; float max; int i,k; /* all k=0 are invalid (-inf or 0 as boundary condition) */ /* all D_1 and I_M are invalid (don't exist in search profile) */ /* on i=0 row, only B, N are valid */ /* on i=1 row, all I_k are invalid */ /* in unihit mode, all J are invalid */ max = ESL_MAX( XMX(0, p7G_N), XMX(0, p7G_B)); for (i = 1; i <= gx->L; i++) { for (k = 1; k <= gx->M; k++) max = ESL_MAX( max, MMX(i,k)); for (k = 2; k <= gx->M; k++) max = ESL_MAX( max, DMX(i,k)); if (i > 1) for (k = 1; k < gx->M; k++) max = ESL_MAX( max, IMX(i,k)); /* we don't have to check J; it's equal to C in multihit mode, for our current multihit parameterization of EJ=EC=0.5 */ max = ESL_MAX(max, XMX(i, p7G_E)); max = ESL_MAX(max, XMX(i, p7G_N)); max = ESL_MAX(max, XMX(i, p7G_B)); max = ESL_MAX(max, XMX(i, p7G_C)); } return max; } float p7_gmx_Min(P7_GMX *gx) { float **dp = gx->dp; float *xmx = gx->xmx; float min; int i,k; /* all k=0 are invalid (-inf or 0 as boundary condition) */ /* all D_1 and I_M are invalid (don't exist in search profile) */ /* on i=0 row, only B, N are valid */ /* on i=1 row, all I_k are invalid */ /* in unihit mode, all J are invalid */ min = ESL_MIN( XMX(0, p7G_N), XMX(0, p7G_B)); for (i = 1; i <= gx->L; i++) { for (k = 1; k <= gx->M; k++) min = ESL_MIN( min, MMX(i,k)); for (k = 2; k <= gx->M; k++) min = ESL_MIN( min, DMX(i,k)); if (i > 1) for (k = 1; k < gx->M; k++) min = ESL_MIN( min, IMX(i,k)); /* we don't have to check J; it's equal to C in multihit mode, for our current multihit parameterization of EJ=EC=0.5 */ min = ESL_MIN(min, XMX(i, p7G_E)); min = ESL_MIN(min, XMX(i, p7G_N)); min = ESL_MIN(min, XMX(i, p7G_B)); min = ESL_MIN(min, XMX(i, p7G_C)); } return min; } hmmer-3.1b2/src/jackhmmer.c0000664361611702660230000026003412473612614015172 0ustar wheelerteddy/* jackhmmer: iterative search of a protein sequence against a protein database */ #include "p7_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_dmatrix.h" #include "esl_getopts.h" #include "esl_keyhash.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_scorematrix.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stopwatch.h" #ifdef HAVE_MPI #include "mpi.h" #include "esl_mpi.h" #endif /*HAVE_MPI*/ #ifdef HMMER_THREADS #include #include "esl_threads.h" #include "esl_workqueue.h" #endif /*HMMER_THREADS*/ #include "hmmer.h" typedef struct { #ifdef HMMER_THREADS ESL_WORK_QUEUE *queue; #endif P7_BG *bg; P7_PIPELINE *pli; P7_TOPHITS *th; P7_OPROFILE *om; } WORKER_INFO; #define REPOPTS "-E,-T,--cut_ga,--cut_nc,--cut_tc" #define DOMREPOPTS "--domE,--domT,--cut_ga,--cut_nc,--cut_tc" #define INCOPTS "--incE,--incT,--cut_ga,--cut_nc,--cut_tc" #define INCDOMOPTS "--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #define THRESHOPTS "-E,-T,--domE,--domT,--incE,--incT,--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #define CONOPTS "--fast,--hand" /* Exclusive options for model construction */ #define EFFOPTS "--eent,--eclust,--eset,--enone" /* Exclusive options for effective sequence number calculation */ #define WGTOPTS "--wgsc,--wblosum,--wpb,--wnone,--wgiven" /* Exclusive options for relative weighting */ #if defined (HMMER_THREADS) && defined (HAVE_MPI) #define CPUOPTS "--mpi" #define MPIOPTS "--cpu" #else #define CPUOPTS NULL #define MPIOPTS NULL #endif static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, { "-N", eslARG_INT, "5", NULL, "n>0", NULL, NULL, NULL, "set maximum number of iterations to ", 1 }, /* Control of output */ { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "direct output to file , not stdout", 2 }, { "-A", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save multiple alignment of hits to file ", 2 }, { "--tblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save parseable table of per-sequence hits to file ", 2 }, { "--domtblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save parseable table of per-domain hits to file ", 2 }, { "--chkhmm", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save HMM checkpoints to files -.hmm", 2 }, { "--chkali", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save alignment checkpoints to files -.sto", 2 }, { "--acc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "prefer accessions over names in output", 2 }, { "--noali", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "don't output alignments, so output is smaller", 2 }, { "--notextw", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--textw", "unlimit ASCII text output line width", 2 }, { "--textw", eslARG_INT, "120", NULL, "n>=120", NULL, NULL, "--notextw", "set max width of ASCII text output lines", 2 }, /* Control of scoring system */ { "--popen", eslARG_REAL, "0.02", NULL, "0<=x<0.5",NULL, NULL, NULL, "gap open probability", 3 }, { "--pextend", eslARG_REAL, "0.4", NULL, "0<=x<1", NULL, NULL, NULL, "gap extend probability", 3 }, { "--mx", eslARG_STRING, "BLOSUM62", NULL, NULL, NULL, NULL, "--mxfile", "substitution score matrix choice (of some built-in matrices)", 3 }, { "--mxfile", eslARG_INFILE, NULL, NULL, NULL, NULL, NULL, "--mx", "read substitution score matrix from file ", 3 }, /* Control of reporting thresholds */ { "-E", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, REPOPTS, "report sequences <= this E-value threshold in output", 4 }, { "-T", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, REPOPTS, "report sequences >= this score threshold in output", 4 }, { "--domE", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, DOMREPOPTS, "report domains <= this E-value threshold in output", 4 }, { "--domT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, DOMREPOPTS, "report domains >= this score cutoff in output", 4 }, /* Control of inclusion (significance) thresholds */ { "--incE", eslARG_REAL, "0.001", NULL, "x>0", NULL, NULL, INCOPTS, "consider sequences <= this E-value threshold as significant", 5 }, { "--incT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCOPTS, "consider sequences >= this score threshold as significant", 5 }, { "--incdomE", eslARG_REAL, "0.001", NULL, "x>0", NULL, NULL, INCDOMOPTS, "consider domains <= this E-value threshold as significant", 5 }, { "--incdomT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCDOMOPTS, "consider domains >= this score threshold as significant", 5 }, /* Model-specific thresholding for both reporting and inclusion (unused in jackhmmer) */ { "--cut_ga", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's GA gathering cutoffs to set all thresholding", 99 }, { "--cut_nc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's NC noise cutoffs to set all thresholding", 99 }, { "--cut_tc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's TC trusted cutoffs to set all thresholding", 99 }, /* Control of acceleration pipeline */ { "--max", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--F1,--F2,--F3", "Turn all heuristic filters off (less speed, more power)", 7 }, { "--F1", eslARG_REAL, "0.02", NULL, NULL, NULL, NULL, "--max", "Stage 1 (MSV) threshold: promote hits w/ P <= F1", 7 }, { "--F2", eslARG_REAL, "1e-3", NULL, NULL, NULL, NULL, "--max", "Stage 2 (Vit) threshold: promote hits w/ P <= F2", 7 }, { "--F3", eslARG_REAL, "1e-5", NULL, NULL, NULL, NULL, "--max", "Stage 3 (Fwd) threshold: promote hits w/ P <= F3", 7 }, { "--nobias", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--max", "turn off composition bias filter", 7 }, /* Alternative model construction strategies */ { "--fast", eslARG_NONE, FALSE, NULL, NULL, CONOPTS, NULL, NULL, "assign cols w/ >= symfrac residues as consensus", 8 }, { "--hand", eslARG_NONE, "default", NULL, NULL, CONOPTS, NULL, NULL, "manual construction (requires reference annotation)", 8 }, { "--symfrac", eslARG_REAL, "0.5", NULL, "0<=x<=1", NULL,"--fast", NULL, "sets sym fraction controlling --fast construction", 8 }, { "--fragthresh", eslARG_REAL, "0.5", NULL, "0<=x<=1", NULL, NULL, NULL, "if L <= x*alen, tag sequence as a fragment", 8 }, /* Alternative relative sequence weighting strategies */ { "--wpb", eslARG_NONE, "default", NULL, NULL, WGTOPTS, NULL, NULL, "Henikoff position-based weights", 9 }, { "--wgsc", eslARG_NONE, NULL, NULL, NULL, WGTOPTS, NULL, NULL, "Gerstein/Sonnhammer/Chothia tree weights", 9 }, { "--wblosum", eslARG_NONE, NULL, NULL, NULL, WGTOPTS, NULL, NULL, "Henikoff simple filter weights", 9 }, { "--wnone", eslARG_NONE, NULL, NULL, NULL, WGTOPTS, NULL, NULL, "don't do any relative weighting; set all to 1", 9 }, { "--wgiven", eslARG_NONE, NULL, NULL, NULL, WGTOPTS, NULL, NULL, "use weights as given in MSA file", 99 }, /* no-op in jackhmmer */ { "--wid", eslARG_REAL, "0.62", NULL,"0<=x<=1", NULL,"--wblosum",NULL, "for --wblosum: set identity cutoff", 9 }, /* Alternative effective sequence weighting strategies */ { "--eent", eslARG_NONE, "default", NULL, NULL, EFFOPTS, NULL, NULL, "adjust eff seq # to achieve relative entropy target", 10 }, { "--eclust", eslARG_NONE, FALSE, NULL, NULL, EFFOPTS, NULL, NULL, "eff seq # is # of single linkage clusters", 10 }, { "--enone", eslARG_NONE, FALSE, NULL, NULL, EFFOPTS, NULL, NULL, "no effective seq # weighting: just use nseq", 10 }, { "--eset", eslARG_REAL, NULL, NULL, NULL, EFFOPTS, NULL, NULL, "set eff seq # for all models to ", 10 }, { "--ere", eslARG_REAL, NULL, NULL,"x>0", NULL, "--eent", NULL, "for --eent: set minimum rel entropy/position to ", 10 }, { "--esigma", eslARG_REAL, "45.0", NULL,"x>0", NULL, "--eent", NULL, "for --eent: set sigma param to ", 10 }, { "--eid", eslARG_REAL, "0.62", NULL,"0<=x<=1", NULL,"--eclust",NULL, "for --eclust: set fractional identity cutoff to ", 10 }, /* Alternative prior strategies */ { "--pnone", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL,"--plaplace", "don't use any prior; parameters are frequencies", 13 }, { "--plaplace", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--pnone", "use a Laplace +1 prior", 13 }, /* Control of E-value calibration */ { "--EmL", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "length of sequences for MSV Gumbel mu fit", 11 }, { "--EmN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for MSV Gumbel mu fit", 11 }, { "--EvL", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "length of sequences for Viterbi Gumbel mu fit", 11 }, { "--EvN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for Viterbi Gumbel mu fit", 11 }, { "--EfL", eslARG_INT, "100", NULL,"n>0", NULL, NULL, NULL, "length of sequences for Forward exp tail tau fit", 11 }, { "--EfN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for Forward exp tail tau fit", 11 }, { "--Eft", eslARG_REAL, "0.04", NULL,"00", NULL, NULL, NULL, "set # of comparisons done, for E-value calculation", 12 }, { "--domZ", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of significant seqs, for domain E-value calculation", 12 }, { "--seed", eslARG_INT, "42", NULL, "n>=0", NULL, NULL, NULL, "set RNG seed to (if 0: one-time arbitrary seed)", 12 }, { "--qformat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "assert query is in format : no autodetection", 12 }, { "--tformat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "assert target is in format >: no autodetection", 12 }, #ifdef HMMER_THREADS { "--cpu", eslARG_INT, NULL,"HMMER_NCPU","n>=0", NULL, NULL, CPUOPTS, "number of parallel CPU workers to use for multithreads", 12 }, #endif #ifdef HAVE_MPI { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL, "--mpi", NULL, "arrest after start: for debugging MPI under gdb", 12 }, { "--mpi", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, MPIOPTS, "run as an MPI parallel program", 12 }, #endif { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "iteratively search a protein sequence against a protein database"; /* struct cfg_s : "Global" application configuration shared by all threads/processes * * This structure is passed to routines within main.c, as a means of semi-encapsulation * of shared data amongst different parallel processes (threads or MPI processes). */ struct cfg_s { char *qfile; /* file to read query sequence from */ char *dbfile; /* file to read sequence(s) from */ int do_mpi; /* TRUE if we're doing MPI parallelization */ int nproc; /* how many MPI processes, total */ int my_rank; /* who am I, in 0..nproc-1 */ }; static int serial_master(ESL_GETOPTS *go, struct cfg_s *cfg); static int serial_loop(WORKER_INFO *info, ESL_SQFILE *dbfp); #ifdef HMMER_THREADS #define BLOCK_SIZE 1000 static int thread_loop(ESL_THREADS *obj, ESL_WORK_QUEUE *queue, ESL_SQFILE *dbfp); static void pipeline_thread(void *arg); #endif /*HMMER_THREADS*/ #ifdef HAVE_MPI static int mpi_master (ESL_GETOPTS *go, struct cfg_s *cfg); static int mpi_worker (ESL_GETOPTS *go, struct cfg_s *cfg); #endif /*HAVE_MPI*/ static void checkpoint_hmm(int nquery, P7_HMM *hmm, char *basename, int iteration); static void checkpoint_msa(int nquery, ESL_MSA *msa, char *basename, int iteration); /* process_commandline() * Take argc, argv, and options; parse the command line; * display help/usage info. */ static int process_commandline(int argc, char **argv, ESL_GETOPTS **ret_go, char **ret_qfile, char **ret_dbfile) { ESL_GETOPTS *go = esl_getopts_Create(options); int status; if (esl_opt_ProcessEnvironment(go) != eslOK) { if (printf("Failed to process environment: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_VerifyConfig(go) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* help format: */ if (esl_opt_GetBoolean(go, "-h") == TRUE) { p7_banner(stdout, argv[0], banner); esl_usage(stdout, argv[0], usage); if (puts("\nBasic options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 120=textwidth*/ if (puts("\nOptions directing output:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); if (puts("\nOptions controlling scoring system in first iteration:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); if (puts("\nOptions controlling reporting thresholds:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); if (puts("\nOptions controlling significance thresholds for inclusion in next round:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 5, 2, 80); if (puts("\nOptions controlling acceleration heuristics:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 7, 2, 80); if (puts("\nOptions controlling model construction after first iteration:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 8, 2, 80); if (puts("\nOptions controlling relative weights in models after first iteration:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 9, 2, 80); if (puts("\nOptions controlling effective seq number in models after first iteration:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 10, 2, 80); if (puts("\nOptions controlling prior strategy in models after first iteration:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 13, 2, 80); if (puts("\nOptions controlling E value calibration:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 11, 2, 80); if (puts("\nOther expert options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 12, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != 2) { if (puts("Incorrect number of command line arguments.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_qfile = esl_opt_GetArg(go, 1)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_dbfile = esl_opt_GetArg(go, 2)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* Validate any attempted use of stdin streams */ if (strcmp(*ret_dbfile, "-") == 0) { if (puts("jackhmmer cannot read from stdin stream") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } *ret_go = go; return eslOK; FAILURE: /* all errors handled here are user errors, so be polite. */ esl_usage(stdout, argv[0], usage); if (puts("\nwhere basic options are:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 120); /* 1= group; 2 = indentation; 120=textwidth*/ if (printf("\nTo see more help on available options, do %s -h\n\n", argv[0]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_getopts_Destroy(go); exit(1); ERROR: if (go) esl_getopts_Destroy(go); exit(status); } static int output_header(FILE *ofp, ESL_GETOPTS *go, char *qfile, char *dbfile) { p7_banner(ofp, go->argv[0], banner); if (fprintf(ofp, "# query sequence file: %s\n", qfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# target sequence database: %s\n", dbfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-N") && fprintf(ofp, "# maximum iterations set to: %d\n", esl_opt_GetInteger(go, "-N")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-o") && fprintf(ofp, "# output directed to file: %s\n", esl_opt_GetString(go, "-o")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-A") && fprintf(ofp, "# MSA of hits saved to file: %s\n", esl_opt_GetString(go, "-A")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--tblout") && fprintf(ofp, "# per-seq hits tabular output: %s\n", esl_opt_GetString(go, "--tblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domtblout") && fprintf(ofp, "# per-dom hits tabular output: %s\n", esl_opt_GetString(go, "--domtblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--chkhmm") && fprintf(ofp, "# HMM checkpoint files output: %s-.hmm\n", esl_opt_GetString(go, "--chkhmm")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--chkali") && fprintf(ofp, "# MSA checkpoint files output: %s-.sto\n", esl_opt_GetString(go, "--chkali")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--acc") && fprintf(ofp, "# prefer accessions over names: yes\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--noali") && fprintf(ofp, "# show alignments in output: no\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--notextw") && fprintf(ofp, "# max ASCII text line length: unlimited\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--textw") && fprintf(ofp, "# max ASCII text line length: %d\n", esl_opt_GetInteger(go, "--textw")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--popen") && fprintf(ofp, "# gap open probability: %f\n", esl_opt_GetReal (go, "--popen")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--pextend") && fprintf(ofp, "# gap extend probability: %f\n", esl_opt_GetReal (go, "--pextend")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--mx") && fprintf(ofp, "# subst score matrix (built-in): %s\n", esl_opt_GetString (go, "--mx")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--mxfile") && fprintf(ofp, "# subst score matrix (file): %s\n", esl_opt_GetString (go, "--mxfile")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-E") && fprintf(ofp, "# sequence reporting threshold: E-value <= %g\n", esl_opt_GetReal (go, "-E")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-T") && fprintf(ofp, "# sequence reporting threshold: score <= %g\n", esl_opt_GetReal (go, "-T")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domE") && fprintf(ofp, "# domain reporting threshold: E-value <= %g\n", esl_opt_GetReal (go, "--domE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domT") && fprintf(ofp, "# domain reporting threshold: score <= %g\n", esl_opt_GetReal (go, "--domT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incE") && fprintf(ofp, "# sequence inclusion threshold: E-value <= %g\n", esl_opt_GetReal (go, "--incE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incT") && fprintf(ofp, "# sequence inclusion threshold: score >= %g\n", esl_opt_GetReal (go, "--incT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incdomE") && fprintf(ofp, "# domain inclusion threshold: E-value <= %g\n", esl_opt_GetReal (go, "--incdomE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incdomT") && fprintf(ofp, "# domain inclusion threshold: score >= %g\n", esl_opt_GetReal (go, "--incdomT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); //if (esl_opt_IsUsed(go, "--cut_ga") && fprintf(ofp, "# model-specific thresholding: GA cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); //if (esl_opt_IsUsed(go, "--cut_nc") && fprintf(ofp, "# model-specific thresholding: NC cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); //if (esl_opt_IsUsed(go, "--cut_tc") && fprintf(ofp, "# model-specific thresholding: TC cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--max") && fprintf(ofp, "# Max sensitivity mode: on [all heuristic filters off]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F1") && fprintf(ofp, "# MSV filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F1")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F2") && fprintf(ofp, "# Vit filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F2")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F3") && fprintf(ofp, "# Fwd filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F3")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--nobias") && fprintf(ofp, "# biased composition HMM filter: off\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--fast") && fprintf(ofp, "# model architecture construction: fast/heuristic\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--hand") && fprintf(ofp, "# model architecture construction: hand-specified by RF annotation\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--symfrac") && fprintf(ofp, "# sym frac for model structure: %.3f\n", esl_opt_GetReal(go, "--symfrac")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--fragthresh") && fprintf(ofp, "# define fragments if <= x*alen: %.3f\n", esl_opt_GetReal(go, "--fragthresh")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wpb") && fprintf(ofp, "# relative weighting scheme: Henikoff PB\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wgsc") && fprintf(ofp, "# relative weighting scheme: G/S/C\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wblosum") && fprintf(ofp, "# relative weighting scheme: BLOSUM filter\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wnone") && fprintf(ofp, "# relative weighting scheme: none\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wid") && fprintf(ofp, "# frac id cutoff for BLOSUM wgts: %f\n", esl_opt_GetReal(go, "--wid")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--eent") && fprintf(ofp, "# effective seq number scheme: entropy weighting\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--eclust") && fprintf(ofp, "# effective seq number scheme: single linkage clusters\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--enone") && fprintf(ofp, "# effective seq number scheme: none\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--eset") && fprintf(ofp, "# effective seq number: set to %f\n", esl_opt_GetReal(go, "--eset")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--ere") && fprintf(ofp, "# minimum rel entropy target: %f bits\n", esl_opt_GetReal(go, "--ere")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--esigma") && fprintf(ofp, "# entropy target sigma parameter: %f bits\n", esl_opt_GetReal(go, "--esigma")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--eid") && fprintf(ofp, "# frac id cutoff for --eclust: %f\n", esl_opt_GetReal(go, "--eid")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--pnone") && fprintf(ofp, "# prior scheme: none\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--plaplace") && fprintf(ofp, "# prior scheme: Laplace +1\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EmL") && fprintf(ofp, "# seq length, MSV Gumbel mu fit: %d\n", esl_opt_GetInteger(go, "--EmL")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EmN") && fprintf(ofp, "# seq number, MSV Gumbel mu fit: %d\n", esl_opt_GetInteger(go, "--EmN")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EvL") && fprintf(ofp, "# seq length, Vit Gumbel mu fit: %d\n", esl_opt_GetInteger(go, "--EvL")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EvN") && fprintf(ofp, "# seq number, Vit Gumbel mu fit: %d\n", esl_opt_GetInteger(go, "--EvN")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EfL") && fprintf(ofp, "# seq length, Fwd exp tau fit: %d\n", esl_opt_GetInteger(go, "--EfL")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EfN") && fprintf(ofp, "# seq number, Fwd exp tau fit: %d\n", esl_opt_GetInteger(go, "--EfN")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--Eft") && fprintf(ofp, "# tail mass for Fwd exp tau fit: %f\n", esl_opt_GetReal (go, "--Eft")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--nonull2") && fprintf(ofp, "# null2 bias corrections: off\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-Z") && fprintf(ofp, "# sequence search space set to: %.0f\n", esl_opt_GetReal(go, "-Z")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domZ") && fprintf(ofp, "# domain search space set to: %.0f\n", esl_opt_GetReal(go, "--domZ")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--seed")) { if (esl_opt_GetInteger(go, "--seed") == 0 && fprintf(ofp, "# random number seed: one-time arbitrary\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); else if (fprintf(ofp, "# random number seed set to: %d\n", esl_opt_GetInteger(go, "--seed")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (esl_opt_IsUsed(go, "--qformat") && fprintf(ofp, "# query format asserted: %s\n", esl_opt_GetString(go, "--qformat")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--tformat") && fprintf(ofp, "# target format asserted: %s\n", esl_opt_GetString(go, "--tformat")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #ifdef HMMER_THREADS if (esl_opt_IsUsed(go, "--cpu") && fprintf(ofp, "# number of worker threads: %d\n", esl_opt_GetInteger(go, "--cpu")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #endif #ifdef HAVE_MPI if (esl_opt_IsUsed(go, "--mpi") && fprintf(ofp, "# MPI: on\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #endif if (fprintf(ofp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); return eslOK; } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* command line processing */ struct cfg_s cfg; /* configuration data */ int status = eslOK; /* Set processor specific flags */ impl_Init(); /* Initialize what we can in the config structure (without knowing the alphabet yet) */ cfg.qfile = NULL; cfg.dbfile = NULL; cfg.do_mpi = FALSE; /* this gets reset below, if we init MPI */ cfg.nproc = 0; /* this gets reset below, if we init MPI */ cfg.my_rank = 0; /* this gets reset below, if we init MPI */ /* Initializations */ p7_FLogsumInit(); /* we're going to use table-driven Logsum() approximations at times */ process_commandline(argc, argv, &go, &cfg.qfile, &cfg.dbfile); /* Figure out who we are, and send control there: * we might be an MPI master, an MPI worker, or a serial program. */ #ifdef HAVE_MPI /* pause the execution of the programs execution until the user has a * chance to attach with a debugger and send a signal to resume execution * i.e. (gdb) signal SIGCONT */ if (esl_opt_GetBoolean(go, "--stall")) pause(); if (esl_opt_GetBoolean(go, "--mpi")) { cfg.do_mpi = TRUE; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &(cfg.my_rank)); MPI_Comm_size(MPI_COMM_WORLD, &(cfg.nproc)); if (cfg.my_rank > 0) status = mpi_worker(go, &cfg); else status = mpi_master(go, &cfg); MPI_Finalize(); } else #endif /*HAVE_MPI*/ { status = serial_master(go, &cfg); } esl_getopts_Destroy(go); return status; } /* serial_master() * The serial version of hmmsearch. * For each query HMM in search the database for hits. * * A master can only return if it's successful. All errors are handled immediately and fatally with p7_Fail(). */ static int serial_master(ESL_GETOPTS *go, struct cfg_s *cfg) { FILE *ofp = stdout; /* output file for results (default stdout) */ FILE *afp = NULL; /* alignment output file (-A option) */ FILE *tblfp = NULL; /* output stream for tabular per-seq (--tblout) */ FILE *domtblfp = NULL; /* output stream for tabular per-seq (--domtblout) */ int qformat = eslSQFILE_UNKNOWN; /* format of qfile */ int dbformat = eslSQFILE_UNKNOWN; /* format of dbfile */ ESL_SQFILE *qfp = NULL; /* open qfile */ ESL_SQFILE *dbfp = NULL; /* open dbfile */ ESL_ALPHABET *abc = NULL; /* sequence alphabet */ P7_BG *bg = NULL; /* null model */ P7_BUILDER *bld = NULL; /* HMM construction configuration */ ESL_SQ *qsq = NULL; /* query sequence */ ESL_KEYHASH *kh = NULL; /* hash of previous top hits' ranks */ ESL_STOPWATCH *w = NULL; /* for timing */ int nquery = 0; int textw; int iteration; int maxiterations; int nnew_targets; int prv_msa_nseq; int status = eslOK; int qstatus = eslOK; int sstatus = eslOK; int i; int ncpus = 0; int infocnt = 0; WORKER_INFO *info = NULL; #ifdef HMMER_THREADS ESL_SQ_BLOCK *block = NULL; ESL_THREADS *threadObj= NULL; ESL_WORK_QUEUE *queue = NULL; #endif /* Initializations */ abc = esl_alphabet_Create(eslAMINO); w = esl_stopwatch_Create(); kh = esl_keyhash_Create(); maxiterations = esl_opt_GetInteger(go, "-N"); textw = (esl_opt_GetBoolean(go, "--notextw") ? 0 : esl_opt_GetInteger(go, "--textw")); esl_stopwatch_Start(w); /* If caller declared input formats, decode them */ if (esl_opt_IsOn(go, "--qformat")) { qformat = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--qformat")); if (qformat == eslSQFILE_UNKNOWN) p7_Fail("%s is not a recognized input sequence file format\n", esl_opt_GetString(go, "--qformat")); } if (esl_opt_IsOn(go, "--tformat")) { dbformat = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--tformat")); if (dbformat == eslSQFILE_UNKNOWN) p7_Fail("%s is not a recognized sequence database file format\n", esl_opt_GetString(go, "--tformat")); } /* Initialize a null model. * The single-sequence P7_BUILDER needs to see this, to construct its probabilities. */ bg = p7_bg_Create(abc); /* Initialize builder configuration * Default matrix is stored in the --mx option, so it's always IsOn(). * Check --mxfile first; then go to the --mx option and the default. */ bld = p7_builder_Create(go, abc); if (esl_opt_IsOn(go, "--mxfile")) status = p7_builder_SetScoreSystem (bld, esl_opt_GetString(go, "--mxfile"), NULL, esl_opt_GetReal(go, "--popen"), esl_opt_GetReal(go, "--pextend"), bg); else status = p7_builder_LoadScoreSystem(bld, esl_opt_GetString(go, "--mx"), esl_opt_GetReal(go, "--popen"), esl_opt_GetReal(go, "--pextend"), bg); if (status != eslOK) p7_Fail("Failed to set single query seq score system:\n%s\n", bld->errbuf); /* Open results output files */ if (esl_opt_IsOn(go, "-o") && (ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) p7_Fail("Failed to open output file %s for writing\n", esl_opt_GetString(go, "-o")); if (esl_opt_IsOn(go, "-A") && (afp = fopen(esl_opt_GetString(go, "-A"), "w")) == NULL) p7_Fail("Failed to open alignment output file %s for writing\n", esl_opt_GetString(go, "-A")); if (esl_opt_IsOn(go, "--tblout") && (tblfp = fopen(esl_opt_GetString(go, "--tblout"), "w")) == NULL) p7_Fail("Failed to open tabular per-seq output file %s for writing\n", esl_opt_GetString(go, "--tblout")); if (esl_opt_IsOn(go, "--domtblout") && (domtblfp = fopen(esl_opt_GetString(go, "--domtblout"), "w")) == NULL) p7_Fail("Failed to open tabular per-dom output file %s for writing\n", esl_opt_GetString(go, "--domtblout")); /* Open the target sequence database for sequential access. */ status = esl_sqfile_OpenDigital(abc, cfg->dbfile, dbformat, p7_SEQDBENV, &dbfp); if (status == eslENOTFOUND) p7_Fail("Failed to open target sequence database %s for reading\n", cfg->dbfile); else if (status == eslEFORMAT) p7_Fail("Target sequence database file %s is empty or misformatted\n", cfg->dbfile); else if (status == eslEINVAL) p7_Fail("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) p7_Fail("Unexpected error %d opening target sequence database file %s\n", status, cfg->dbfile); if (! esl_sqfile_IsRewindable(dbfp)) p7_Fail("Target sequence file %s isn't rewindable; jackhmmer requires that it is", cfg->dbfile); /* Open the query sequence file */ status = esl_sqfile_OpenDigital(abc, cfg->qfile, qformat, NULL, &qfp); if (status == eslENOTFOUND) p7_Fail("Failed to open sequence file %s for reading\n", cfg->qfile); else if (status == eslEFORMAT) p7_Fail("Sequence file %s is empty or misformatted\n", cfg->qfile); else if (status == eslEINVAL) p7_Fail("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) p7_Fail ("Unexpected error %d opening sequence file %s\n", status, cfg->qfile); qsq = esl_sq_CreateDigital(abc); #ifdef HMMER_THREADS /* initialize thread data */ if (esl_opt_IsOn(go, "--cpu")) ncpus = esl_opt_GetInteger(go, "--cpu"); else esl_threads_CPUCount(&ncpus); if (ncpus > 0) { threadObj = esl_threads_Create(&pipeline_thread); queue = esl_workqueue_Create(ncpus * 2); } #endif infocnt = (ncpus == 0) ? 1 : ncpus; ESL_ALLOC(info, sizeof(*info) * infocnt); /* Ready to begin */ output_header(ofp, go, cfg->qfile, cfg->dbfile); for (i = 0; i < infocnt; ++i) { info[i].pli = NULL; info[i].th = NULL; info[i].om = NULL; info[i].bg = p7_bg_Clone(bg); #ifdef HMMER_THREADS info[i].queue = queue; #endif } #ifdef HMMER_THREADS for (i = 0; i < ncpus * 2; ++i) { block = esl_sq_CreateDigitalBlock(BLOCK_SIZE, abc); if (block == NULL) { p7_Fail("Failed to allocate sequence block"); } status = esl_workqueue_Init(queue, block); if (status != eslOK) { p7_Fail("Failed to add block to work queue"); } } #endif /* Outer loop over sequence queries, if more than one */ while ((qstatus = esl_sqio_Read(qfp, qsq)) == eslOK) { P7_HMM *hmm = NULL; /* HMM - only needed if checkpointed */ P7_HMM **ret_hmm = NULL; /* HMM - only needed if checkpointed */ P7_OPROFILE *om = NULL; /* optimized query profile */ P7_TRACE *qtr = NULL; /* faux trace for query sequence */ ESL_MSA *msa = NULL; /* multiple alignment of included hits */ if (esl_opt_IsOn(go, "--chkhmm")) ret_hmm = &hmm; nquery++; if (qsq->n == 0) continue; /* skip zero length queries as if they aren't even present. */ if (fprintf(ofp, "Query: %s [L=%ld]\n", qsq->name, (long) qsq->n) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (qsq->acc[0] != '\0' && fprintf(ofp, "Accession: %s\n", qsq->acc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (qsq->desc[0] != '\0' && fprintf(ofp, "Description: %s\n", qsq->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); for (iteration = 1; iteration <= maxiterations; iteration++) { /* We enter each iteration with an optimized profile. */ esl_stopwatch_Start(w); if (om != NULL) p7_oprofile_Destroy(om); if (info->pli != NULL) p7_pipeline_Destroy(info->pli); if (info->th != NULL) p7_tophits_Destroy(info->th); if (info->om != NULL) p7_oprofile_Destroy(info->om); /* Create the search model: from query alone (round 1) or from MSA (round 2+) */ if (msa == NULL) /* round 1 */ { p7_SingleBuilder(bld, qsq, info[0].bg, ret_hmm, &qtr, NULL, &om); /* bypass HMM - only need model */ prv_msa_nseq = 1; } else { /* Throw away old model. Build new one. */ status = p7_Builder(bld, msa, info[0].bg, ret_hmm, NULL, NULL, &om, NULL); if (status == eslENORESULT) p7_Fail("Failed to construct new model from iteration %d results:\n%s", iteration, bld->errbuf); else if (status == eslEFORMAT) p7_Fail("Failed to construct new model from iteration %d results:\n%s", iteration, bld->errbuf); else if (status != eslOK) p7_Fail("Unexpected error constructing new model at iteration %d:", iteration); if (fprintf(ofp, "@@\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@ Round: %d\n", iteration) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@ Included in MSA: %d subsequences (query + %d subseqs from %d targets)\n", msa->nseq, msa->nseq-1, kh->nkeys) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@ Model size: %d positions\n", om->M) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); prv_msa_nseq = msa->nseq; esl_msa_Destroy(msa); } /* HMM checkpoint output */ if (esl_opt_IsOn(go, "--chkhmm")) { checkpoint_hmm(nquery, hmm, esl_opt_GetString(go, "--chkhmm"), iteration); p7_hmm_Destroy(hmm); hmm = NULL; } /* Create new processing pipeline and top hits list; destroy old. (TODO: reuse rather than recreate) */ for (i = 0; i < infocnt; ++i) { info[i].th = p7_tophits_Create(); info[i].om = p7_oprofile_Clone(om); info[i].pli = p7_pipeline_Create(go, om->M, 400, FALSE, p7_SEARCH_SEQS); /* 400 is a dummy length for now */ p7_pli_NewModel(info[i].pli, info[i].om, info[i].bg); #ifdef HMMER_THREADS if (ncpus > 0) esl_threads_AddThread(threadObj, &info[i]); #endif } #ifdef HMMER_THREADS if (ncpus > 0) sstatus = thread_loop(threadObj, queue, dbfp); else sstatus = serial_loop(info, dbfp); #else sstatus = serial_loop(info, dbfp); #endif switch(sstatus) { case eslEFORMAT: p7_Fail("Parse failed (sequence file %s):\n%s\n", dbfp->filename, esl_sqfile_GetErrorBuf(dbfp)); break; case eslEOF: /* do nothing */ break; default: p7_Fail("Unexpected error %d reading sequence file %s", sstatus, dbfp->filename); } /* merge the results of the search results */ for (i = 1; i < infocnt; ++i) { p7_tophits_Merge(info[0].th, info[i].th); p7_pipeline_Merge(info[0].pli, info[i].pli); p7_pipeline_Destroy(info[i].pli); p7_tophits_Destroy(info[i].th); p7_oprofile_Destroy(info[i].om); } /* Print the results. */ p7_tophits_SortBySortkey(info->th); p7_tophits_Threshold(info->th, info->pli); p7_tophits_CompareRanking(info->th, kh, &nnew_targets); p7_tophits_Targets(ofp, info->th, info->pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); p7_tophits_Domains(ofp, info->th, info->pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); /* Create alignment of the top hits */ /* <&qsq, &qtr, 1> included in p7_tophits_Alignment args here => initial query is added to the msa at each round. */ p7_tophits_Alignment(info->th, abc, &qsq, &qtr, 1, p7_ALL_CONSENSUS_COLS, &msa); esl_msa_Digitize(abc,msa,NULL); esl_msa_FormatName(msa, "%s-i%d", qsq->name, iteration); /* Optional checkpointing */ if (esl_opt_IsOn(go, "--chkali")) checkpoint_msa(nquery, msa, esl_opt_GetString(go, "--chkali"), iteration); esl_stopwatch_Stop(w); p7_pli_Statistics(ofp, info->pli, w); /* Convergence test */ if (fprintf(ofp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@ New targets included: %d\n", nnew_targets) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@ New alignment includes: %d subseqs (was %d), including original query\n", msa->nseq, prv_msa_nseq) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (nnew_targets == 0 && msa->nseq <= prv_msa_nseq) { if (fprintf(ofp, "@@\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@ CONVERGED (in %d rounds). \n", iteration) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); break; } else if (iteration < maxiterations) { if (fprintf(ofp, "@@ Continuing to next round.\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } esl_sqfile_Position(dbfp, 0); } /* end iteration loop */ /* Because we destroy/create the hitlist, om, pipeline, and msa above, rather than create/destroy, * the results of the last iteration have carried through to us now, and we can output * whatever final results we care to. */ if (tblfp) p7_tophits_TabularTargets(tblfp, qsq->name, qsq->acc, info->th, info->pli, (nquery == 1)); if (domtblfp) p7_tophits_TabularDomains(domtblfp, qsq->name, qsq->acc, info->th, info->pli, (nquery == 1)); if (afp) { if (textw > 0) eslx_msafile_Write(afp, msa, eslMSAFILE_STOCKHOLM); else eslx_msafile_Write(afp, msa, eslMSAFILE_PFAM); if (fprintf(ofp, "# Alignment of %d hits satisfying inclusion thresholds saved to: %s\n", msa->nseq, esl_opt_GetString(go, "-A")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (fprintf(ofp, "//\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); p7_pipeline_Destroy(info->pli); p7_tophits_Destroy(info->th); p7_oprofile_Destroy(info->om); info->pli = NULL; info->th = NULL; info->om = NULL; esl_msa_Destroy(msa); p7_oprofile_Destroy(om); p7_trace_Destroy(qtr); esl_sq_Reuse(qsq); esl_keyhash_Reuse(kh); esl_sqfile_Position(dbfp, 0); } if (qstatus == eslEFORMAT) p7_Fail("Parse failed (sequence file %s):\n%s\n", qfp->filename, esl_sqfile_GetErrorBuf(qfp)); else if (qstatus != eslEOF) p7_Fail("Unexpected error %d reading sequence file %s", qstatus, qfp->filename); /* Terminate outputs - any last words? */ if (tblfp) p7_tophits_TabularTail(tblfp, "jackhmmer", p7_SEARCH_SEQS, cfg->qfile, cfg->dbfile, go); if (domtblfp) p7_tophits_TabularTail(domtblfp, "jackhmmer", p7_SEARCH_SEQS, cfg->qfile, cfg->dbfile, go); if (ofp && fprintf(ofp, "[ok]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); /* Cleanup - prepare for successful exit */ for (i = 0; i < infocnt; ++i) p7_bg_Destroy(info[i].bg); #ifdef HMMER_THREADS if (ncpus > 0) { esl_workqueue_Reset(queue); while (esl_workqueue_Remove(queue, (void **) &block) == eslOK) esl_sq_DestroyBlock(block); esl_workqueue_Destroy(queue); esl_threads_Destroy(threadObj); } #endif free(info); esl_keyhash_Destroy(kh); esl_sqfile_Close(qfp); esl_sqfile_Close(dbfp); esl_sq_Destroy(qsq); esl_stopwatch_Destroy(w); p7_builder_Destroy(bld); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); if (ofp != stdout) fclose(ofp); if (afp != NULL) fclose(afp); if (tblfp != NULL) fclose(tblfp); if (domtblfp != NULL) fclose(domtblfp); return eslOK; ERROR: return eslFAIL; } #ifdef HAVE_MPI /* Define common tags used by the MPI master/slave processes */ #define HMMER_ERROR_TAG 1 #define HMMER_HMM_TAG 2 #define HMMER_SEQUENCE_TAG 3 #define HMMER_BLOCK_TAG 4 #define HMMER_PIPELINE_TAG 5 #define HMMER_TOPHITS_TAG 6 #define HMMER_HIT_TAG 7 #define HMMER_TERMINATING_TAG 8 #define HMMER_READY_TAG 9 #define HMMER_SETUP_READY_TAG 10 #define HMMER_OPROFILE_TAG 11 #define HMMER_CONTINUE_TAG 12 char *HMM_TAG_STR[] = { "", "HMMER_ERROR_TAG", "HMMER_HMM_TAG", "HMMER_SEQUENCE_TAG", "HMMER_BLOCK_TAG", "HMMER_PIPELINE_TAG", "HMMER_TOPHITS_TAG", "HMMER_HIT_TAG", "HMMER_TERMINATING_TAG", "HMMER_READY_TAG", "HMMER_SETUP_READY_TAG", "HMMER_OPROFILE_TAG", "HMMER_CONTINUE_TAG", }; /* mpi_failure() * Generate an error message. If the clients rank is not 0, a * message is created with the error message and sent to the * master process for handling. */ static void mpi_failure(char *format, ...) { va_list argp; int status = eslFAIL; int len; int rank; char str[512]; MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* format the error mesg */ va_start(argp, format); len = vsnprintf(str, sizeof(str), format, argp); va_end(argp); /* make sure the error string is terminated */ str[sizeof(str)-1] = '\0'; /* if the caller is the master, print the results and abort */ if (rank == 0) { if (fprintf(stderr, "\nError: ") < 0) exit(eslEWRITE); if (fprintf(stderr, "%s", str) < 0) exit(eslEWRITE); if (fprintf(stderr, "\n") < 0) exit(eslEWRITE); fflush(stderr); MPI_Abort(MPI_COMM_WORLD, status); exit(1); } else { MPI_Send(str, len, MPI_CHAR, 0, HMMER_ERROR_TAG, MPI_COMM_WORLD); pause(); } } #define MAX_BLOCK_SIZE (512*1024) typedef struct { uint64_t offset; uint64_t length; uint64_t count; } SEQ_BLOCK; typedef struct { int complete; int size; int current; int last; SEQ_BLOCK *blocks; } BLOCK_LIST; /* this routine parses the database keeping track of the blocks * offset within the file, number of sequences and the length * of the block. These blocks are passed as work units to the * MPI workers. If multiple hmm's are in the query file, the * blocks are reused without parsing the database a second time. */ int next_block(ESL_SQFILE *sqfp, ESL_SQ *sq, BLOCK_LIST *list, SEQ_BLOCK *block) { int status = eslOK; /* if the list has been calculated, use it instead of parsing the database */ if (list->complete) { if (list->current == list->last) { block->offset = 0; block->length = 0; block->count = 0; status = eslEOF; } else { int inx = list->current++; block->offset = list->blocks[inx].offset; block->length = list->blocks[inx].length; block->count = list->blocks[inx].count; status = eslOK; } return status; } block->offset = 0; block->length = 0; block->count = 0; esl_sq_Reuse(sq); while (block->length < MAX_BLOCK_SIZE && (status = esl_sqio_ReadInfo(sqfp, sq)) == eslOK) { if (block->count == 0) block->offset = sq->roff; block->length = sq->eoff - block->offset + 1; block->count++; esl_sq_Reuse(sq); } if (status == eslEOF && block->count > 0) status = eslOK; if (status == eslEOF) { list->complete = 1; list->current = list->last; } /* add the block to the list of known blocks */ if (status == eslOK) { int inx; if (list->last >= list->size) { void *tmp; list->size += 500; ESL_RALLOC(list->blocks, tmp, sizeof(SEQ_BLOCK) * list->size); } inx = list->last++; list->blocks[inx].offset = block->offset; list->blocks[inx].length = block->length; list->blocks[inx].count = block->count; } return status; ERROR: return eslEMEM; } /* mpi_master() * The MPI version of hmmbuild. * Follows standard pattern for a master/worker load-balanced MPI program (J1/78-79). * * A master can only return if it's successful. * Errors in an MPI master come in two classes: recoverable and nonrecoverable. * * Recoverable errors include all worker-side errors, and any * master-side error that do not affect MPI communication. Error * messages from recoverable messages are delayed until we've cleanly * shut down the workers. * * Unrecoverable errors are master-side errors that may affect MPI * communication, meaning we cannot count on being able to reach the * workers and shut them down. Unrecoverable errors result in immediate * p7_Fail()'s, which will cause MPI to shut down the worker processes * uncleanly. */ static int mpi_master(ESL_GETOPTS *go, struct cfg_s *cfg) { FILE *ofp = stdout; /* output file for results (default stdout) */ FILE *afp = NULL; /* alignment output file (-A option) */ FILE *tblfp = NULL; /* output stream for tabular per-seq (--tblout) */ FILE *domtblfp = NULL; /* output stream for tabular per-seq (--domtblout) */ int qformat = eslSQFILE_UNKNOWN; /* format of qfile */ int dbformat = eslSQFILE_UNKNOWN; /* format of dbfile */ ESL_SQFILE *qfp = NULL; /* open qfile */ ESL_SQFILE *dbfp = NULL; /* open dbfile */ ESL_ALPHABET *abc = NULL; /* sequence alphabet */ P7_BG *bg = NULL; /* null model */ P7_BUILDER *bld = NULL; /* HMM construction configuration */ ESL_SQ *qsq = NULL; /* query sequence */ ESL_SQ *dbsq = NULL; /* target sequence */ ESL_KEYHASH *kh = NULL; /* hash of previous top hits' ranks */ ESL_STOPWATCH *w = NULL; /* for timing */ int nquery = 0; int textw; int iteration; int maxiterations; int nnew_targets; int prv_msa_nseq; int status = eslOK; int qstatus = eslOK; int sstatus = eslOK; int dest; int tag; char *mpi_buf = NULL; /* buffer used to pack/unpack structures */ int mpi_size = 0; /* size of the allocated buffer */ BLOCK_LIST *list = NULL; SEQ_BLOCK block; int i; int size; int done; MPI_Status mpistatus; /* Initializations */ abc = esl_alphabet_Create(eslAMINO); w = esl_stopwatch_Create(); kh = esl_keyhash_Create(); maxiterations = esl_opt_GetInteger(go, "-N"); if (esl_opt_GetBoolean(go, "--notextw")) textw = 0; else textw = esl_opt_GetInteger(go, "--textw"); esl_stopwatch_Start(w); /* If caller declared input formats, decode them */ if (esl_opt_IsOn(go, "--qformat")) { qformat = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--qformat")); if (qformat == eslSQFILE_UNKNOWN) mpi_failure("%s is not a recognized input sequence file format\n", esl_opt_GetString(go, "--qformat")); } if (esl_opt_IsOn(go, "--tformat")) { dbformat = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--tformat")); if (dbformat == eslSQFILE_UNKNOWN) mpi_failure("%s is not a recognized sequence database file format\n", esl_opt_GetString(go, "--tformat")); } bg = p7_bg_Create(abc); /* Initialize builder configuration */ bld = p7_builder_Create(go, abc); /* Default is stored in the --mx option, so it's always IsOn(). Check --mxfile first; then go to the --mx option and the default. */ if (esl_opt_IsOn(go, "--mxfile")) status = p7_builder_SetScoreSystem (bld, esl_opt_GetString(go, "--mxfile"), NULL, esl_opt_GetReal(go, "--popen"), esl_opt_GetReal(go, "--pextend"), bg); else status = p7_builder_LoadScoreSystem(bld, esl_opt_GetString(go, "--mx"), esl_opt_GetReal(go, "--popen"), esl_opt_GetReal(go, "--pextend"), bg); if (status != eslOK) mpi_failure("Failed to set single query seq score system:\n%s\n", bld->errbuf); /* Open results output files */ if (esl_opt_IsOn(go, "-o") && (ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) mpi_failure("Failed to open output file %s for writing\n", esl_opt_GetString(go, "-o")); if (esl_opt_IsOn(go, "-A") && (afp = fopen(esl_opt_GetString(go, "-A"), "w")) == NULL) mpi_failure("Failed to open alignment output file %s for writing\n", esl_opt_GetString(go, "-A")); if (esl_opt_IsOn(go, "--tblout") && (tblfp = fopen(esl_opt_GetString(go, "--tblout"), "w")) == NULL) mpi_failure("Failed to open tabular per-seq output file %s for writing\n", esl_opt_GetString(go, "--tblfp")); if (esl_opt_IsOn(go, "--domtblout") && (domtblfp = fopen(esl_opt_GetString(go, "--domtblout"), "w")) == NULL) mpi_failure("Failed to open tabular per-dom output file %s for writing\n", esl_opt_GetString(go, "--domtblfp")); /* Open the target sequence database for sequential access. */ status = esl_sqfile_OpenDigital(abc, cfg->dbfile, dbformat, p7_SEQDBENV, &dbfp); if (status == eslENOTFOUND) mpi_failure("Failed to open target sequence database %s for reading\n", cfg->dbfile); else if (status == eslEFORMAT) mpi_failure("Target sequence database file %s is empty or misformatted\n", cfg->dbfile); else if (status == eslEINVAL) mpi_failure("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) mpi_failure("Unexpected error %d opening target sequence database file %s\n", status, cfg->dbfile); dbsq = esl_sq_CreateDigital(abc); if (! esl_sqfile_IsRewindable(dbfp)) mpi_failure("Target sequence file %s isn't rewindable; jackhmmer requires that it is", cfg->dbfile); /* Open the query sequence file */ status = esl_sqfile_OpenDigital(abc, cfg->qfile, qformat, NULL, &qfp); if (status == eslENOTFOUND) mpi_failure("Failed to open sequence file %s for reading\n", cfg->qfile); else if (status == eslEFORMAT) mpi_failure("Sequence file %s is empty or misformatted\n", cfg->qfile); else if (status == eslEINVAL) mpi_failure("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) mpi_failure ("Unexpected error %d opening sequence file %s\n", status, cfg->qfile); qsq = esl_sq_CreateDigital(abc); ESL_ALLOC(list, sizeof(SEQ_BLOCK)); list->complete = 0; list->size = 0; list->current = 0; list->last = 0; list->blocks = NULL; /* Ready to begin */ output_header(ofp, go, cfg->qfile, cfg->dbfile); /* Outer loop over sequence queries, if more than one */ while ((qstatus = esl_sqio_Read(qfp, qsq)) == eslOK) { P7_PIPELINE *pli = NULL; /* accelerated HMM/seq comparison pipeline */ P7_TOPHITS *th = NULL; /* top-scoring sequence hits */ P7_HMM *hmm = NULL; /* HMM - only needed if checkpointed */ P7_HMM **ret_hmm = NULL; /* HMM - only needed if checkpointed */ P7_OPROFILE *om = NULL; /* optimized query profile */ P7_TRACE *qtr = NULL; /* faux trace for query sequence */ ESL_MSA *msa = NULL; /* multiple alignment of included hits */ if (esl_opt_IsOn(go, "--chkhmm")) ret_hmm = &hmm; nquery++; if (qsq->n == 0) continue; /* skip zero length queries as if they aren't even present. */ if (fprintf(ofp, "Query: %s [L=%ld]\n", qsq->name, (long) qsq->n) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (qsq->acc[0] != '\0' && fprintf(ofp, "Accession: %s\n", qsq->acc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (qsq->desc[0] != '\0' && fprintf(ofp, "Description: %s\n", qsq->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); for (iteration = 1; iteration <= maxiterations; iteration++) { /* We enter each iteration with an optimized profile. */ esl_stopwatch_Start(w); list->current = 0; if (pli != NULL) p7_pipeline_Destroy(pli); if (th != NULL) p7_tophits_Destroy(th); if (om != NULL) p7_oprofile_Destroy(om); /* Create the search model: from query alone (round 1) or from MSA (round 2+) */ if (msa == NULL) /* round 1 */ { p7_SingleBuilder(bld, qsq, bg, ret_hmm, &qtr, NULL, &om); /* bypass HMM - only need model */ prv_msa_nseq = 1; } else { /* Throw away old model. Build new one. */ status = p7_Builder(bld, msa, bg, ret_hmm, NULL, NULL, &om, NULL); if (status == eslENORESULT) mpi_failure("Failed to construct new model from iteration %d results:\n%s", iteration, bld->errbuf); else if (status == eslEFORMAT) mpi_failure("Failed to construct new model from iteration %d results:\n%s", iteration, bld->errbuf); else if (status != eslOK) mpi_failure("Unexpected error constructing new model at iteration %d:", iteration); if (fprintf(ofp, "@@\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@ Round: %d\n", iteration) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@ Included in MSA: %d subsequences (query + %d subseqs from %d targets)\n", msa->nseq, msa->nseq-1, kh->nkeys) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@ Model size: %d positions\n", om->M) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); prv_msa_nseq = msa->nseq; esl_msa_Destroy(msa); } /* HMM checkpoint output */ if (esl_opt_IsOn(go, "--chkhmm")) { checkpoint_hmm(nquery, hmm, esl_opt_GetString(go, "--chkhmm"), iteration); p7_hmm_Destroy(hmm); hmm = NULL; } /* Create new processing pipeline and top hits list; destroy old. (TODO: reuse rather than recreate) */ th = p7_tophits_Create(); pli = p7_pipeline_Create(go, om->M, 400, FALSE, p7_SEARCH_SEQS); /* 400 is a dummy length for now */ p7_pli_NewModel(pli, om, bg); /* Send to all the workers the optimized model to search with */ done = 1; while (done < cfg->nproc) { P7_PIPELINE *mpi_pli = NULL; P7_TOPHITS *mpi_th = NULL; if (MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &mpistatus) != 0) mpi_failure("MPI error %d receiving message from %d\n", mpistatus.MPI_SOURCE); tag = mpistatus.MPI_TAG; dest = mpistatus.MPI_SOURCE; if (tag == HMMER_TOPHITS_TAG) { status = p7_tophits_MPIRecv(dest, HMMER_TOPHITS_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size, &mpi_th); if (status != eslOK) mpi_failure("Unexpected error %d receiving tophits from %d", status, dest); p7_tophits_Merge(th, mpi_th); p7_tophits_Destroy(mpi_th); } else if (tag == HMMER_PIPELINE_TAG) { status = p7_pipeline_MPIRecv(dest, HMMER_PIPELINE_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size, go, &mpi_pli); if (status != eslOK) mpi_failure("Unexpected error %d receiving pipeline from %d", status, dest); p7_pipeline_Merge(pli, mpi_pli); p7_pipeline_Destroy(mpi_pli); /* after the pipeline message, the worker is done and waiting */ ++done; } else { MPI_Get_count(&mpistatus, MPI_PACKED, &size); if (mpi_buf == NULL || size > mpi_size) { void *tmp; ESL_RALLOC(mpi_buf, tmp, sizeof(char) * size); mpi_size = size; } MPI_Recv(mpi_buf, size, MPI_PACKED, dest, tag, MPI_COMM_WORLD, &mpistatus); switch(tag) { case HMMER_ERROR_TAG: mpi_failure("MPI client %d raised error:\n%s\n", dest, mpi_buf); break; case HMMER_SETUP_READY_TAG: status = p7_oprofile_MPISend(om, dest, HMMER_OPROFILE_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size); if (status != eslOK) mpi_failure("Failed to send optimized model to %d\n", dest); break; case HMMER_READY_TAG: sstatus = next_block(dbfp, dbsq, list, &block); if (sstatus == eslOK || sstatus == eslEOF) { MPI_Send(&block, 3, MPI_LONG_LONG_INT, dest, HMMER_BLOCK_TAG, MPI_COMM_WORLD); } else if (sstatus == eslEFORMAT) { mpi_failure("Parse failed (sequence file %s):\n%s\n", dbfp->filename, esl_sqfile_GetErrorBuf(dbfp)); } else { mpi_failure("Unexpected error %d reading sequence file %s", sstatus, dbfp->filename); } break; default: mpi_failure("Unexpected tag %d from %d\n", tag, dest); break; } } } /* Print the results. */ p7_tophits_SortBySortkey(th); p7_tophits_Threshold(th, pli); p7_tophits_CompareRanking(th, kh, &nnew_targets); p7_tophits_Targets(ofp, th, pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); p7_tophits_Domains(ofp, th, pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); /* Create alignment of the top hits */ p7_tophits_Alignment(th, abc, &qsq, &qtr, 1, p7_ALL_CONSENSUS_COLS, &msa); esl_msa_Digitize(abc,msa,NULL); esl_msa_FormatName(msa, "%s-i%d", qsq->name, iteration); /* Optional checkpointing */ if (esl_opt_IsOn(go, "--chkali")) checkpoint_msa(nquery, msa, esl_opt_GetString(go, "--chkali"), iteration); esl_stopwatch_Stop(w); p7_pli_Statistics(ofp, pli, w); /* Convergence test */ if (fprintf(ofp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@ New targets included: %d\n", nnew_targets) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@ New alignment includes: %d subseqs (was %d), including original query\n", msa->nseq, prv_msa_nseq) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (nnew_targets == 0 && msa->nseq <= prv_msa_nseq) { if (fprintf(ofp, "@@\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@ CONVERGED (in %d rounds). \n", iteration) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "@@\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); break; } else if (iteration < maxiterations) { if (fprintf(ofp, "@@ Continuing to next round.\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); /* send all the workers a CONTINUE signal */ for (dest = 1; dest < cfg->nproc; ++dest) { status = eslOK; MPI_Send(&status, 1, MPI_INT, dest, HMMER_CONTINUE_TAG, MPI_COMM_WORLD); } } } /* end iteration loop */ /* send all the workers a CONTINUE signal */ for (dest = 1; dest < cfg->nproc; ++dest) { status = eslEOD; MPI_Send(&status, 1, MPI_INT, dest, HMMER_CONTINUE_TAG, MPI_COMM_WORLD); } /* Because we destroy/create the hitlist, om, pipeline, and msa above, rather than create/destroy, * the results of the last iteration have carried through to us now, and we can output * whatever final results we care to. */ if (tblfp) p7_tophits_TabularTargets(tblfp, qsq->name, qsq->acc, th, pli, (nquery == 1)); if (domtblfp) p7_tophits_TabularDomains(domtblfp, qsq->name, qsq->acc, th, pli, (nquery == 1)); if (afp) { if (textw > 0) eslx_msafile_Write(afp, msa, eslMSAFILE_STOCKHOLM); else eslx_msafile_Write(afp, msa, eslMSAFILE_PFAM); if (fprintf(ofp, "# Alignment of %d hits satisfying inclusion thresholds saved to: %s\n", msa->nseq, esl_opt_GetString(go, "-A")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (fprintf(ofp, "//\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); p7_pipeline_Destroy(pli); p7_tophits_Destroy(th); p7_oprofile_Destroy(om); esl_msa_Destroy(msa); p7_trace_Destroy(qtr); esl_sq_Reuse(qsq); esl_keyhash_Reuse(kh); esl_sqfile_Position(dbfp, 0); } if (qstatus == eslEFORMAT) mpi_failure("Parse failed (sequence file %s):\n%s\n", qfp->filename, esl_sqfile_GetErrorBuf(qfp)); else if (qstatus != eslEOF) mpi_failure("Unexpected error %d reading sequence file %s", qstatus, qfp->filename); /* monitor all the workers to make sure they have ended */ for (i = 1; i < cfg->nproc; ++i) { if (MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &mpistatus) != 0) mpi_failure("MPI error %d receiving message from %d\n", mpistatus.MPI_SOURCE); MPI_Get_count(&mpistatus, MPI_PACKED, &size); if (mpi_buf == NULL || size > mpi_size) { void *tmp; ESL_RALLOC(mpi_buf, tmp, sizeof(char) * size); mpi_size = size; } dest = mpistatus.MPI_SOURCE; MPI_Recv(mpi_buf, size, MPI_PACKED, dest, mpistatus.MPI_TAG, MPI_COMM_WORLD, &mpistatus); if (mpistatus.MPI_TAG == HMMER_ERROR_TAG) mpi_failure("MPI client %d raised error:\n%s\n", dest, mpi_buf); if (mpistatus.MPI_TAG != HMMER_TERMINATING_TAG) mpi_failure("Unexpected tag %d from %d\n", mpistatus.MPI_TAG, dest); } /* Terminate outputs - any last words? */ if (tblfp) p7_tophits_TabularTail(tblfp, "jackhmmer", p7_SEARCH_SEQS, cfg->qfile, cfg->dbfile, go); if (domtblfp) p7_tophits_TabularTail(domtblfp, "jackhmmer", p7_SEARCH_SEQS, cfg->qfile, cfg->dbfile, go); if (ofp && fprintf(ofp, "[ok]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); /* Cleanup - prepare for successful exit */ free(list); if (mpi_buf != NULL) free(mpi_buf); p7_bg_Destroy(bg); esl_keyhash_Destroy(kh); esl_sqfile_Close(qfp); esl_sqfile_Close(dbfp); esl_sq_Destroy(dbsq); esl_sq_Destroy(qsq); esl_stopwatch_Destroy(w); p7_builder_Destroy(bld); esl_alphabet_Destroy(abc); if (ofp != stdout) fclose(ofp); if (afp != NULL) fclose(afp); if (tblfp != NULL) fclose(tblfp); if (domtblfp != NULL) fclose(domtblfp); return eslOK; ERROR: return eslFAIL; } static int mpi_worker(ESL_GETOPTS *go, struct cfg_s *cfg) { int qformat = eslSQFILE_UNKNOWN; /* format of qfile */ int dbformat = eslSQFILE_UNKNOWN; /* format of dbfile */ ESL_SQFILE *qfp = NULL; /* open qfile */ ESL_SQFILE *dbfp = NULL; /* open dbfile */ ESL_ALPHABET *abc = NULL; /* sequence alphabet */ P7_BG *bg = NULL; /* null model */ P7_BUILDER *bld = NULL; /* HMM construction configuration */ ESL_SQ *qsq = NULL; /* query sequence */ ESL_SQ *dbsq = NULL; /* target sequence */ ESL_KEYHASH *kh = NULL; /* hash of previous top hits' ranks */ ESL_STOPWATCH *w = NULL; /* for timing */ int iteration; int maxiterations; int status = eslOK; int qstatus = eslOK; int sstatus = eslOK; char *mpi_buf = NULL; /* buffer used to pack/unpack structures */ int mpi_size = 0; /* size of the allocated buffer */ MPI_Status mpistatus; /* Initializations */ abc = esl_alphabet_Create(eslAMINO); w = esl_stopwatch_Create(); kh = esl_keyhash_Create(); maxiterations = esl_opt_GetInteger(go, "-N"); esl_stopwatch_Start(w); /* If caller declared input formats, decode them */ if (esl_opt_IsOn(go, "--qformat")) { qformat = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--qformat")); if (qformat == eslSQFILE_UNKNOWN) mpi_failure("%s is not a recognized input sequence file format\n", esl_opt_GetString(go, "--qformat")); } if (esl_opt_IsOn(go, "--tformat")) { dbformat = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--tformat")); if (dbformat == eslSQFILE_UNKNOWN) mpi_failure("%s is not a recognized sequence database file format\n", esl_opt_GetString(go, "--tformat")); } bg = p7_bg_Create(abc); /* Initialize builder configuration */ bld = p7_builder_Create(go, abc); if (esl_opt_IsOn(go, "--mxfile")) status = p7_builder_SetScoreSystem (bld, esl_opt_GetString(go, "--mxfile"), NULL, esl_opt_GetReal(go, "--popen"), esl_opt_GetReal(go, "--pextend"), bg); else status = p7_builder_LoadScoreSystem(bld, esl_opt_GetString(go, "--mx"), esl_opt_GetReal(go, "--popen"), esl_opt_GetReal(go, "--pextend"), bg); if (status != eslOK) mpi_failure("Failed to set single query seq score system:\n%s\n", bld->errbuf); /* Open the target sequence database for sequential access. */ status = esl_sqfile_OpenDigital(abc, cfg->dbfile, dbformat, p7_SEQDBENV, &dbfp); if (status == eslENOTFOUND) mpi_failure("Failed to open target sequence database %s for reading\n", cfg->dbfile); else if (status == eslEFORMAT) mpi_failure("Target sequence database file %s is empty or misformatted\n", cfg->dbfile); else if (status == eslEINVAL) mpi_failure("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) mpi_failure("Unexpected error %d opening target sequence database file %s\n", status, cfg->dbfile); dbsq = esl_sq_CreateDigital(abc); if (! esl_sqfile_IsRewindable(dbfp)) mpi_failure("Target sequence file %s isn't rewindable; jackhmmer requires that it is", cfg->dbfile); /* Open the query sequence file */ status = esl_sqfile_OpenDigital(abc, cfg->qfile, qformat, NULL, &qfp); if (status == eslENOTFOUND) mpi_failure("Failed to open sequence file %s for reading\n", cfg->qfile); else if (status == eslEFORMAT) mpi_failure("Sequence file %s is empty or misformatted\n", cfg->qfile); else if (status == eslEINVAL) mpi_failure("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) mpi_failure ("Unexpected error %d opening sequence file %s\n", status, cfg->qfile); qsq = esl_sq_CreateDigital(abc); /* Outer loop over sequence queries, if more than one */ while ((qstatus = esl_sqio_Read(qfp, qsq)) == eslOK) { P7_PIPELINE *pli = NULL; /* accelerated HMM/seq comparison pipeline */ P7_TOPHITS *th = NULL; /* top-scoring sequence hits */ P7_OPROFILE *om = NULL; /* optimized query profile */ P7_TRACE *qtr = NULL; /* faux trace for query sequence */ SEQ_BLOCK block; if (qsq->n == 0) continue; /* skip zero length queries as if they aren't even present. */ iteration = 1; while (iteration > 0) { /* We enter each iteration with an optimized profile. */ esl_stopwatch_Start(w); status = 0; MPI_Send(&status, 1, MPI_INT, 0, HMMER_SETUP_READY_TAG, MPI_COMM_WORLD); /* Receive the search model from the master */ status = p7_oprofile_MPIRecv(0, HMMER_OPROFILE_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size, &abc, &om); /* check the status of the oprofile */ if (status != eslOK) mpi_failure("Error %d receiving optimized model on iteration %d\n", status, iteration); if (iteration > maxiterations) mpi_failure("Iteration %d exceeds max iterations of %d\n", iteration, maxiterations); status = 0; MPI_Send(&status, 1, MPI_INT, 0, HMMER_READY_TAG, MPI_COMM_WORLD); /* Create new processing pipeline and top hits list; destroy old. (TODO: reuse rather than recreate) */ th = p7_tophits_Create(); pli = p7_pipeline_Create(go, om->M, 400, FALSE, p7_SEARCH_SEQS); /* 400 is a dummy length for now */ p7_pli_NewModel(pli, om, bg); /* receive a sequence block from the master */ MPI_Recv(&block, 3, MPI_LONG_LONG_INT, 0, HMMER_BLOCK_TAG, MPI_COMM_WORLD, &mpistatus); while (block.count > 0) { uint64_t length = 0; uint64_t count = block.count; status = esl_sqfile_Position(dbfp, block.offset); if (status != eslOK) mpi_failure("Cannot position sequence database to %ld\n", block.offset); while (count > 0 && (sstatus = esl_sqio_Read(dbfp, dbsq)) == eslOK) { length = dbsq->eoff - block.offset + 1; p7_pli_NewSeq(pli, dbsq); p7_bg_SetLength(bg, dbsq->n); p7_oprofile_ReconfigLength(om, dbsq->n); p7_Pipeline(pli, om, bg, dbsq, th); esl_sq_Reuse(dbsq); p7_pipeline_Reuse(pli); --count; } /* lets do a little bit of sanity checking here to make sure the blocks are the same */ if (count > 0) mpi_failure("Block count mismatch - expected %ld found %ld at offset %ld\n", block.count, block.count - count, block.offset); if (block.length != length) mpi_failure("Block length mismatch - expected %ld found %ld at offset %ld\n", block.length, length, block.offset); /* inform the master we need another block of sequences */ status = 0; MPI_Send(&status, 1, MPI_INT, 0, HMMER_READY_TAG, MPI_COMM_WORLD); /* wait for the next block of sequences */ MPI_Recv(&block, 3, MPI_LONG_LONG_INT, 0, HMMER_BLOCK_TAG, MPI_COMM_WORLD, &mpistatus); } esl_stopwatch_Stop(w); /* Send the top hits back to the master. */ p7_tophits_MPISend(th, 0, HMMER_TOPHITS_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size); p7_pipeline_MPISend(pli, 0, HMMER_PIPELINE_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size); if (om != NULL) p7_oprofile_Destroy(om); if (pli != NULL) p7_pipeline_Destroy(pli); if (th != NULL) p7_tophits_Destroy(th); /* wait until the master lets us continue */ MPI_Recv(&status, 1, MPI_INT, 0, HMMER_CONTINUE_TAG, MPI_COMM_WORLD, &mpistatus); iteration = (status == eslOK) ? iteration+1 : 0; } /* end iteration loop */ p7_trace_Destroy(qtr); esl_sq_Reuse(qsq); esl_keyhash_Reuse(kh); esl_sqfile_Position(dbfp, 0); } if (qstatus == eslEFORMAT) mpi_failure("Parse failed (sequence file %s):\n%s\n", qfp->filename, esl_sqfile_GetErrorBuf(qfp)); else if (qstatus != eslEOF) mpi_failure("Unexpected error %d reading sequence file %s", qstatus, qfp->filename); status = 0; MPI_Send(&status, 1, MPI_INT, 0, HMMER_TERMINATING_TAG, MPI_COMM_WORLD); if (mpi_buf != NULL) free(mpi_buf); p7_bg_Destroy(bg); esl_keyhash_Destroy(kh); esl_sqfile_Close(qfp); esl_sqfile_Close(dbfp); esl_sq_Destroy(dbsq); esl_sq_Destroy(qsq); esl_stopwatch_Destroy(w); p7_builder_Destroy(bld); esl_alphabet_Destroy(abc); return eslOK; } #endif /*HAVE_MPI*/ /* checkpoint_hmm() * * Purpose: Save to a file -.hmm. * If , start a new checkpoint file; * for 1>, append to existing one. */ static void checkpoint_hmm(int nquery, P7_HMM *hmm, char *basename, int iteration) { FILE *fp = NULL; char *filename = NULL; esl_sprintf(&filename, "%s-%d.hmm", basename, iteration); if (nquery == 1) { if ((fp = fopen(filename, "w")) == NULL) p7_Fail("Failed to open HMM checkpoint file %s for writing\n", filename); } else { if ((fp = fopen(filename, "a")) == NULL) p7_Fail("Failed to open HMM checkpoint file %s for append\n", filename); } p7_hmmfile_WriteASCII(fp, -1, hmm); fclose(fp); free(filename); return; } /* checkpoint_msa() * * Purpose: Save to a file -.sto. * If , start a new checkpoint file; * for 1>, append to existing one. */ static void checkpoint_msa(int nquery, ESL_MSA *msa, char *basename, int iteration) { FILE *fp = NULL; char *filename = NULL; esl_sprintf(&filename, "%s-%d.sto", basename, iteration); if (nquery == 1) { if ((fp = fopen(filename, "w")) == NULL) p7_Fail("Failed to open MSA checkpoint file %s for writing\n", filename); } else { if ((fp = fopen(filename, "a")) == NULL) p7_Fail("Failed to open MSA checkpoint file %s for append\n", filename); } eslx_msafile_Write(fp, msa, eslMSAFILE_PFAM); fclose(fp); free(filename); return; } static int serial_loop(WORKER_INFO *info, ESL_SQFILE *dbfp) { int sstatus; ESL_SQ *dbsq = NULL; /* one target sequence (digital) */ dbsq = esl_sq_CreateDigital(info->om->abc); /* Main loop: */ while ((sstatus = esl_sqio_Read(dbfp, dbsq)) == eslOK) { p7_pli_NewSeq(info->pli, dbsq); p7_bg_SetLength(info->bg, dbsq->n); p7_oprofile_ReconfigLength(info->om, dbsq->n); p7_Pipeline(info->pli, info->om, info->bg, dbsq, info->th); esl_sq_Reuse(dbsq); p7_pipeline_Reuse(info->pli); } esl_sq_Destroy(dbsq); return sstatus; } #ifdef HMMER_THREADS static int thread_loop(ESL_THREADS *obj, ESL_WORK_QUEUE *queue, ESL_SQFILE *dbfp) { int status = eslOK; int sstatus = eslOK; int eofCount = 0; ESL_SQ_BLOCK *block; void *newBlock; esl_workqueue_Reset(queue); esl_threads_WaitForStart(obj); status = esl_workqueue_ReaderUpdate(queue, NULL, &newBlock); if (status != eslOK) p7_Fail("Work queue reader failed"); /* Main loop: */ while (sstatus == eslOK) { block = (ESL_SQ_BLOCK *) newBlock; sstatus = esl_sqio_ReadBlock(dbfp, block, -1, -1, FALSE); if (sstatus == eslEOF) { if (eofCount < esl_threads_GetWorkerCount(obj)) sstatus = eslOK; ++eofCount; } if (sstatus == eslOK) { status = esl_workqueue_ReaderUpdate(queue, block, &newBlock); if (status != eslOK) p7_Fail("Work queue reader failed"); } } status = esl_workqueue_ReaderUpdate(queue, block, NULL); if (status != eslOK) p7_Fail("Work queue reader failed"); if (sstatus == eslEOF) { /* wait for all the threads to complete */ esl_threads_WaitForFinish(obj); esl_workqueue_Complete(queue); } return sstatus; } static void pipeline_thread(void *arg) { int i; int status; int workeridx; WORKER_INFO *info; ESL_THREADS *obj; ESL_SQ_BLOCK *block = NULL; void *newBlock; impl_Init(); obj = (ESL_THREADS *) arg; esl_threads_Started(obj, &workeridx); info = (WORKER_INFO *) esl_threads_GetData(obj, workeridx); status = esl_workqueue_WorkerUpdate(info->queue, NULL, &newBlock); if (status != eslOK) p7_Fail("Work queue worker failed"); /* loop until all blocks have been processed */ block = (ESL_SQ_BLOCK *) newBlock; while (block->count > 0) { /* Main loop: */ for (i = 0; i < block->count; ++i) { ESL_SQ *dbsq = block->list + i; p7_pli_NewSeq(info->pli, dbsq); p7_bg_SetLength(info->bg, dbsq->n); p7_oprofile_ReconfigLength(info->om, dbsq->n); p7_Pipeline(info->pli, info->om, info->bg, dbsq, info->th); esl_sq_Reuse(dbsq); p7_pipeline_Reuse(info->pli); } status = esl_workqueue_WorkerUpdate(info->queue, block, &newBlock); if (status != eslOK) p7_Fail("Work queue worker failed"); block = (ESL_SQ_BLOCK *) newBlock; } status = esl_workqueue_WorkerUpdate(info->queue, block, NULL); if (status != eslOK) p7_Fail("Work queue worker failed"); esl_threads_Finished(obj, workeridx); return; } #endif /* HMMER_THREADS */ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/jackhmmer.c $ * SVN $Id: jackhmmer.c 4583 2013-12-30 18:56:25Z wheelert $ *****************************************************************/ hmmer-3.1b2/src/phmmer.c0000664361611702660230000022726012473612614014525 0ustar wheelerteddy/* phmmer: search a protein sequence against a protein database */ #include "p7_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_dmatrix.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_scorematrix.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stopwatch.h" #ifdef HAVE_MPI #include "mpi.h" #include "esl_mpi.h" #endif /*HAVE_MPI*/ #ifdef HMMER_THREADS #include #include "esl_threads.h" #include "esl_workqueue.h" #endif /*HMMER_THREADS*/ #include "hmmer.h" typedef struct { #ifdef HMMER_THREADS ESL_WORK_QUEUE *queue; #endif /*HMMER_THREADS*/ P7_BG *bg; P7_PIPELINE *pli; P7_TOPHITS *th; P7_OPROFILE *om; } WORKER_INFO; #define REPOPTS "-E,-T,--cut_ga,--cut_nc,--cut_tc" #define DOMREPOPTS "--domE,--domT,--cut_ga,--cut_nc,--cut_tc" #define INCOPTS "--incE,--incT,--cut_ga,--cut_nc,--cut_tc" #define INCDOMOPTS "--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #define THRESHOPTS "-E,-T,--domE,--domT,--incE,--incT,--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #if defined (HMMER_THREADS) && defined (HAVE_MPI) #define CPUOPTS "--mpi" #define MPIOPTS "--cpu" #else #define CPUOPTS NULL #define MPIOPTS NULL #endif #ifdef HAVE_MPI #define DAEMONOPTS "-o,-A,--tblout,--domtblout,--pfamtblout,--mpi,--stall" #else #define DAEMONOPTS "-o,-A,--tblout,--domtblout,--pfamtblout" #endif static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, /* Control of output */ { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "direct output to file , not stdout", 2 }, { "-A", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save multiple alignment of hits to file ", 2 }, { "--tblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save parseable table of per-sequence hits to file ", 2 }, { "--domtblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save parseable table of per-domain hits to file ", 2 }, { "--pfamtblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save table of hits and domains to file, in Pfam format ", 2 }, { "--acc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "prefer accessions over names in output", 2 }, { "--noali", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "don't output alignments, so output is smaller", 2 }, { "--notextw", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--textw", "unlimit ASCII text output line width", 2 }, { "--textw", eslARG_INT, "120", NULL, "n>=120", NULL, NULL, "--notextw", "set max width of ASCII text output lines", 2 }, /* Control of scoring system */ { "--popen", eslARG_REAL, "0.02", NULL, "0<=x<0.5",NULL, NULL, NULL, "gap open probability", 3 }, { "--pextend", eslARG_REAL, "0.4", NULL, "0<=x<1", NULL, NULL, NULL, "gap extend probability", 3 }, { "--mx", eslARG_STRING, "BLOSUM62", NULL, NULL, NULL, NULL, "--mxfile", "substitution score matrix choice (of some built-in matrices)", 3 }, { "--mxfile", eslARG_INFILE, NULL, NULL, NULL, NULL, NULL, "--mx", "read substitution score matrix from file ", 3 }, /* Control of reporting thresholds */ { "-E", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, REPOPTS, "report sequences <= this E-value threshold in output", 4 }, { "-T", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, REPOPTS, "report sequences >= this score threshold in output", 4 }, { "--domE", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, DOMREPOPTS, "report domains <= this E-value threshold in output", 4 }, { "--domT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, DOMREPOPTS, "report domains >= this score cutoff in output", 4 }, /* Control of inclusion thresholds */ { "--incE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, INCOPTS, "consider sequences <= this E-value threshold as significant", 5 }, { "--incT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCOPTS, "consider sequences >= this score threshold as significant", 5 }, { "--incdomE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, INCDOMOPTS, "consider domains <= this E-value threshold as significant", 5 }, { "--incdomT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCDOMOPTS, "consider domains >= this score threshold as significant", 5 }, /* Model-specific thresholding for both reporting and inclusion (unused in phmmer)*/ { "--cut_ga", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's GA gathering cutoffs to set all thresholding", 99 }, { "--cut_nc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's NC noise cutoffs to set all thresholding", 99 }, { "--cut_tc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's TC trusted cutoffs to set all thresholding", 99 }, /* Control of filter pipeline */ { "--max", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--F1,--F2,--F3", "Turn all heuristic filters off (less speed, more power)", 7 }, { "--F1", eslARG_REAL, "0.02", NULL, NULL, NULL, NULL, "--max", "Stage 1 (MSV) threshold: promote hits w/ P <= F1", 7 }, { "--F2", eslARG_REAL, "1e-3", NULL, NULL, NULL, NULL, "--max", "Stage 2 (Vit) threshold: promote hits w/ P <= F2", 7 }, { "--F3", eslARG_REAL, "1e-5", NULL, NULL, NULL, NULL, "--max", "Stage 3 (Fwd) threshold: promote hits w/ P <= F3", 7 }, { "--nobias", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--max", "turn off composition bias filter", 7 }, /* Control of E-value calibration */ { "--EmL", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "length of sequences for MSV Gumbel mu fit", 11 }, { "--EmN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for MSV Gumbel mu fit", 11 }, { "--EvL", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "length of sequences for Viterbi Gumbel mu fit", 11 }, { "--EvN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for Viterbi Gumbel mu fit", 11 }, { "--EfL", eslARG_INT, "100", NULL,"n>0", NULL, NULL, NULL, "length of sequences for Forward exp tail tau fit", 11 }, { "--EfN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for Forward exp tail tau fit", 11 }, { "--Eft", eslARG_REAL, "0.04", NULL,"00", NULL, NULL, NULL, "set # of comparisons done, for E-value calculation", 12 }, { "--domZ", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of significant seqs, for domain E-value calculation", 12 }, { "--seed", eslARG_INT, "42", NULL, "n>=0", NULL, NULL, NULL, "set RNG seed to (if 0: one-time arbitrary seed)", 12 }, { "--qformat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "assert query is in format : no autodetection", 12 }, { "--tformat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "assert target is in format >: no autodetection", 12 }, { "--daemon", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, DAEMONOPTS, "run program as a daemon", 12 }, #ifdef HMMER_THREADS { "--cpu", eslARG_INT, NULL,"HMMER_NCPU", "n>=0",NULL, NULL, CPUOPTS, "number of parallel CPU workers to use for multithreads", 12 }, #endif #ifdef HAVE_MPI { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL,"--mpi", NULL, "arrest after start: for debugging MPI under gdb", 12 }, { "--mpi", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, MPIOPTS, "run as an MPI parallel program", 12 }, #endif /* Restrict search to subset of database - hidden because these flags are * (a) currently for internal use * (b) probably going to change * Doesn't work with MPI */ { "--restrictdb_stkey", eslARG_STRING, "0", NULL, NULL, NULL, NULL, NULL, "Search starts at the sequence with name (not with MPI)", 99 }, { "--restrictdb_n",eslARG_INT, "-1", NULL, NULL, NULL, NULL, NULL, "Search target sequences (starting at --restrictdb_stkey)", 99 }, { "--ssifile", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "restrictdb_x values require ssi file. Override default to ", 99 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "search a protein sequence against a protein database"; /* struct cfg_s : "Global" application configuration shared by all threads/processes * * This structure is passed to routines within main.c, as a means of semi-encapsulation * of shared data amongst different parallel processes (threads or MPI processes). */ struct cfg_s { char *qfile; /* query sequence file */ char *dbfile; /* database file */ int do_mpi; /* TRUE if we're doing MPI parallelization */ int nproc; /* how many MPI processes, total */ int my_rank; /* who am I, in 0..nproc-1 */ char *firstseq_key; /* name of the first sequence in the restricted db range */ int n_targetseq; /* number of sequences in the restricted range */ }; static int serial_master(ESL_GETOPTS *go, struct cfg_s *cfg); static int serial_loop (WORKER_INFO *info, ESL_SQFILE *dbfp, int n_targetseqs); #ifdef HMMER_THREADS #define BLOCK_SIZE 1000 static int thread_loop(ESL_THREADS *obj, ESL_WORK_QUEUE *queue, ESL_SQFILE *dbfp, int n_targetseqs); static void pipeline_thread(void *arg); #endif /*HMMER_THREADS*/ #ifdef HAVE_MPI static int mpi_master (ESL_GETOPTS *go, struct cfg_s *cfg); static int mpi_worker (ESL_GETOPTS *go, struct cfg_s *cfg); #endif /*HAVE_MPI*/ /* process_commandline() * Take argc, argv, and options; parse the command line; * display help/usage info. */ static int process_commandline(int argc, char **argv, ESL_GETOPTS **ret_go, char **ret_qfile, char **ret_dbfile) { ESL_GETOPTS *go = esl_getopts_Create(options); int status; if (esl_opt_ProcessEnvironment(go) != eslOK) { if (printf("Failed to process environment: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_VerifyConfig(go) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* help format: */ if (esl_opt_GetBoolean(go, "-h") == TRUE) { p7_banner(stdout, argv[0], banner); esl_usage(stdout, argv[0], usage); if (puts("\nBasic options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 120=textwidth*/ if (puts("\nOptions directing output:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); if (puts("\nOptions controlling scoring system:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); if (puts("\nOptions controlling reporting thresholds:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); if (puts("\nOptions controlling inclusion (significance) thresholds:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 5, 2, 80); if (puts("\nOptions controlling acceleration heuristics:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 7, 2, 80); if (puts("\nOptions controlling E value calibration:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 11, 2, 80); if (puts("\nOther expert options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 12, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != 2) { if (puts("Incorrect number of command line arguments.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_qfile = esl_opt_GetArg(go, 1)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_dbfile = esl_opt_GetArg(go, 2)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* Validate any attempted use of stdin streams */ if (strcmp(*ret_qfile, "-") == 0 && strcmp(*ret_dbfile, "-") == 0) { if (puts("Either or may be '-' (to read from stdin), but not both.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } *ret_go = go; return eslOK; FAILURE: /* all errors handled here are user errors, so be polite. */ esl_usage(stdout, argv[0], usage); if (puts("\nwhere basic options are:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 120); /* 1= group; 2 = indentation; 120=textwidth*/ if (printf("\nTo see more help on available options, do %s -h\n\n", argv[0]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_getopts_Destroy(go); exit(1); ERROR: if (go) esl_getopts_Destroy(go); exit(status); } static int output_header(FILE *ofp, ESL_GETOPTS *go, char *qfile, char *dbfile) { p7_banner(ofp, go->argv[0], banner); if (fprintf(ofp, "# query sequence file: %s\n", qfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# target sequence database: %s\n", dbfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-o") && fprintf(ofp, "# output directed to file: %s\n", esl_opt_GetString(go, "-o")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-A") && fprintf(ofp, "# MSA of hits saved to file: %s\n", esl_opt_GetString(go, "-A")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--tblout") && fprintf(ofp, "# per-seq hits tabular output: %s\n", esl_opt_GetString(go, "--tblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domtblout") && fprintf(ofp, "# per-dom hits tabular output: %s\n", esl_opt_GetString(go, "--domtblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--pfamtblout")&& fprintf(ofp, "# pfam-style tabular hit output: %s\n", esl_opt_GetString(go, "--pfamtblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--acc") && fprintf(ofp, "# prefer accessions over names: yes\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--noali") && fprintf(ofp, "# show alignments in output: no\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--notextw") && fprintf(ofp, "# max ASCII text line length: unlimited\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--textw") && fprintf(ofp, "# max ASCII text line length: %d\n", esl_opt_GetInteger(go, "--textw")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--popen") && fprintf(ofp, "# gap open probability: %f\n", esl_opt_GetReal (go, "--popen")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--pextend") && fprintf(ofp, "# gap extend probability: %f\n", esl_opt_GetReal (go, "--pextend")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--mx") && fprintf(ofp, "# subst score matrix (built-in): %s\n", esl_opt_GetString(go, "--mx")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--mxfile") && fprintf(ofp, "# subst score matrix (file): %s\n", esl_opt_GetString(go, "--mxfile")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-E") && fprintf(ofp, "# sequence reporting threshold: E-value <= %g\n", esl_opt_GetReal(go, "-E")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-T") && fprintf(ofp, "# sequence reporting threshold: score >= %g\n", esl_opt_GetReal(go, "-T")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domE") && fprintf(ofp, "# domain reporting threshold: E-value <= %g\n", esl_opt_GetReal(go, "--domE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domT") && fprintf(ofp, "# domain reporting threshold: score >= %g\n", esl_opt_GetReal(go, "--domT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incE") && fprintf(ofp, "# sequence inclusion threshold: E-value <= %g\n", esl_opt_GetReal(go, "--incE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incT") && fprintf(ofp, "# sequence inclusion threshold: score >= %g\n", esl_opt_GetReal(go, "--incT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incdomE") && fprintf(ofp, "# domain inclusion threshold: E-value <= %g\n", esl_opt_GetReal(go, "--incdomE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incdomT") && fprintf(ofp, "# domain inclusion threshold: score >= %g\n", esl_opt_GetReal(go, "--incdomT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); //if (esl_opt_IsUsed(go, "--cut_ga") && fprintf(ofp, "# model-specific thresholding: GA cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); //if (esl_opt_IsUsed(go, "--cut_nc") && fprintf(ofp, "# model-specific thresholding: NC cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); //if (esl_opt_IsUsed(go, "--cut_tc") && fprintf(ofp, "# model-specific thresholding: TC cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--max") && fprintf(ofp, "# Max sensitivity mode: on [all heuristic filters off]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F1") && fprintf(ofp, "# MSV filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F1")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F2") && fprintf(ofp, "# Vit filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F2")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F3") && fprintf(ofp, "# Fwd filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F3")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--nobias") && fprintf(ofp, "# biased composition HMM filter: off\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--restrictdb_stkey") && fprintf(ofp, "# Restrict db to start at seq key: %s\n", esl_opt_GetString(go, "--restrictdb_stkey")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--restrictdb_n") && fprintf(ofp, "# Restrict db to # target seqs: %d\n", esl_opt_GetInteger(go, "--restrictdb_n")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--ssifile") && fprintf(ofp, "# Override ssi file to: %s\n", esl_opt_GetString(go, "--ssifile")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--nonull2") && fprintf(ofp, "# null2 bias corrections: off\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EmL") && fprintf(ofp, "# seq length, MSV Gumbel mu fit: %d\n", esl_opt_GetInteger(go, "--EmL")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EmN") && fprintf(ofp, "# seq number, MSV Gumbel mu fit: %d\n", esl_opt_GetInteger(go, "--EmN")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EvL") && fprintf(ofp, "# seq length, Vit Gumbel mu fit: %d\n", esl_opt_GetInteger(go, "--EvL")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EvN") && fprintf(ofp, "# seq number, Vit Gumbel mu fit: %d\n", esl_opt_GetInteger(go, "--EvN")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EfL") && fprintf(ofp, "# seq length, Fwd exp tau fit: %d\n", esl_opt_GetInteger(go, "--EfL")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EfN") && fprintf(ofp, "# seq number, Fwd exp tau fit: %d\n", esl_opt_GetInteger(go, "--EfN")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--Eft") && fprintf(ofp, "# tail mass for Fwd exp tau fit: %f\n", esl_opt_GetReal (go, "--Eft")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-Z") && fprintf(ofp, "# sequence search space set to: %.0f\n", esl_opt_GetReal(go, "-Z")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domZ") && fprintf(ofp, "# domain search space set to: %.0f\n", esl_opt_GetReal(go, "--domZ")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--seed")) { if (esl_opt_GetInteger(go, "--seed") == 0 && fprintf(ofp, "# random number seed: one-time arbitrary\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); else if ( fprintf(ofp, "# random number seed set to: %d\n", esl_opt_GetInteger(go, "--seed")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (esl_opt_IsUsed(go, "--qformat") && fprintf(ofp, "# query format asserted: %s\n", esl_opt_GetString(go, "--qformat")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--tformat") && fprintf(ofp, "# target format asserted: %s\n", esl_opt_GetString(go, "--tformat")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--daemon") && fprintf(ofp, "run as a daemon process\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #ifdef HMMER_THREADS if (esl_opt_IsUsed(go, "--cpu") && fprintf(ofp, "# number of worker threads: %d\n", esl_opt_GetInteger(go, "--cpu")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #endif #ifdef HAVE_MPI if (esl_opt_IsUsed(go, "--mpi") && fprintf(ofp, "# MPI: on\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #endif if (fprintf(ofp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); return eslOK; } int main(int argc, char **argv) { int status = eslOK; ESL_GETOPTS *go = NULL; /* command line processing */ struct cfg_s cfg; /* configuration data */ /* Set processor specific flags */ impl_Init(); /* Initialize what we can in the config structure (without knowing the alphabet yet) */ cfg.qfile = NULL; cfg.dbfile = NULL; cfg.do_mpi = FALSE; /* this gets reset below, if we init MPI */ cfg.nproc = 0; /* this gets reset below, if we init MPI */ cfg.my_rank = 0; /* this gets reset below, if we init MPI */ cfg.firstseq_key = NULL; cfg.n_targetseq = -1; /* Initializations */ p7_FLogsumInit(); /* we're going to use table-driven Logsum() approximations at times */ process_commandline(argc, argv, &go, &cfg.qfile, &cfg.dbfile); /* is the range restricted? */ #ifndef eslAUGMENT_SSI if (esl_opt_IsUsed(go, "--restrictdb_stkey") || esl_opt_IsUsed(go, "--restrictdb_n") || esl_opt_IsUsed(go, "--ssifile") ) p7_Fail("Unable to use range-control options unless an SSI index file is available. See 'esl_sfetch --index'\n"); #else if (esl_opt_IsUsed(go, "--restrictdb_stkey") ) if ((cfg.firstseq_key = esl_opt_GetString(go, "--restrictdb_stkey")) == NULL) p7_Fail("Failure capturing --restrictdb_stkey\n"); if (esl_opt_IsUsed(go, "--restrictdb_n") ) cfg.n_targetseq = esl_opt_GetInteger(go, "--restrictdb_n"); if ( cfg.n_targetseq != -1 && cfg.n_targetseq < 1 ) p7_Fail("--restrictdb_n must be >= 1\n"); #endif /* Figure out who we are, and send control there: * we might be an MPI master, an MPI worker, or a serial program. */ #ifdef HAVE_MPI /* pause the execution of the programs execution until the user has a * chance to attach with a debugger and send a signal to resume execution * i.e. (gdb) signal SIGCONT */ if (esl_opt_GetBoolean(go, "--stall")) pause(); if (esl_opt_GetBoolean(go, "--mpi")) { cfg.do_mpi = TRUE; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &(cfg.my_rank)); MPI_Comm_size(MPI_COMM_WORLD, &(cfg.nproc)); if (cfg.my_rank > 0) status = mpi_worker(go, &cfg); else status = mpi_master(go, &cfg); MPI_Finalize(); } else #endif /*HAVE_MPI*/ { status = serial_master(go, &cfg); } esl_getopts_Destroy(go); return status; } /* serial_master() * For each query sequence in search the database for hits. * * A master can only return if it's successful. All errors are handled * immediately and fatally with p7_Fail(). Where we use the * ESL_EXCEPTION mechanism and ERROR: block, it's for convenience; we * know we're using a fatal exception handler. */ static int serial_master(ESL_GETOPTS *go, struct cfg_s *cfg) { FILE *ofp = stdout; /* output file for results (default stdout) */ FILE *afp = NULL; /* alignment output file (-A option) */ FILE *tblfp = NULL; /* output stream for tabular per-seq (--tblout) */ FILE *domtblfp = NULL; /* output stream for tabular per-seq (--domtblout) */ FILE *pfamtblfp= NULL; /* output stream for pfam tabular output (--pfamtblout) */ int qformat = eslSQFILE_UNKNOWN; /* format of qfile */ ESL_SQFILE *qfp = NULL; /* open qfile */ ESL_SQ *qsq = NULL; /* query sequence */ int dbformat = eslSQFILE_UNKNOWN; /* format of dbfile */ ESL_SQFILE *dbfp = NULL; /* open dbfile */ ESL_ALPHABET *abc = NULL; /* sequence alphabet */ P7_BG *bg = NULL; /* null model (copies made of this into threads) */ P7_BUILDER *bld = NULL; /* HMM construction configuration */ ESL_STOPWATCH *w = NULL; /* for timing */ int nquery = 0; int seed; int textw; int status = eslOK; int qstatus = eslOK; int sstatus = eslOK; int i; int ncpus = 0; int infocnt = 0; WORKER_INFO *info = NULL; #ifdef HMMER_THREADS ESL_SQ_BLOCK *block = NULL; ESL_THREADS *threadObj= NULL; ESL_WORK_QUEUE *queue = NULL; #endif /* Initializations */ abc = esl_alphabet_Create(eslAMINO); w = esl_stopwatch_Create(); textw = (esl_opt_GetBoolean(go, "--notextw") ? 0 : esl_opt_GetInteger(go, "--textw")); bg = p7_bg_Create(abc); /* If caller declared input formats, decode them */ if (esl_opt_IsOn(go, "--qformat")) { qformat = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--qformat")); if (qformat == eslSQFILE_UNKNOWN) p7_Fail("%s is not a recognized input sequence file format\n", esl_opt_GetString(go, "--qformat")); } if (esl_opt_IsOn(go, "--tformat")) { dbformat = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--tformat")); if (dbformat == eslSQFILE_UNKNOWN) p7_Fail("%s is not a recognized sequence database file format\n", esl_opt_GetString(go, "--tformat")); } /* validate options if running as a daemon */ if (esl_opt_IsOn(go, "--daemon")) { /* running as a daemon, the input format must be type daemon */ if (qformat != eslSQFILE_UNKNOWN && qformat != eslSQFILE_DAEMON) p7_Fail("Input format %s not supported. Must be daemon\n", esl_opt_GetString(go, "--qformat")); qformat = eslSQFILE_DAEMON; if (strcmp(cfg->qfile, "-") != 0) p7_Fail("Query sequence file must be '-', in daemon mode\n"); } /* Initialize a default builder configuration, * then set only the options we need for single sequence search */ bld = p7_builder_Create(NULL, abc); if ((seed = esl_opt_GetInteger(go, "--seed")) > 0) { /* a little wasteful - we're blowing a couple of usec by reinitializing */ esl_randomness_Init(bld->r, seed); bld->do_reseeding = TRUE; } bld->EmL = esl_opt_GetInteger(go, "--EmL"); bld->EmN = esl_opt_GetInteger(go, "--EmN"); bld->EvL = esl_opt_GetInteger(go, "--EvL"); bld->EvN = esl_opt_GetInteger(go, "--EvN"); bld->EfL = esl_opt_GetInteger(go, "--EfL"); bld->EfN = esl_opt_GetInteger(go, "--EfN"); bld->Eft = esl_opt_GetReal (go, "--Eft"); /* Default is stored in the --mx option, so it's always IsOn(). Check --mxfile first; then go to the --mx option and the default. */ if (esl_opt_IsOn(go, "--mxfile")) status = p7_builder_SetScoreSystem (bld, esl_opt_GetString(go, "--mxfile"), NULL, esl_opt_GetReal(go, "--popen"), esl_opt_GetReal(go, "--pextend"), bg); else status = p7_builder_LoadScoreSystem(bld, esl_opt_GetString(go, "--mx"), esl_opt_GetReal(go, "--popen"), esl_opt_GetReal(go, "--pextend"), bg); if (status != eslOK) p7_Fail("Failed to set single query seq score system:\n%s\n", bld->errbuf); /* Open results output files */ if (esl_opt_IsOn(go, "-o")) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) p7_Fail("Failed to open output file %s for writing\n", esl_opt_GetString(go, "-o")); } if (esl_opt_IsOn(go, "-A")) { if ((afp = fopen(esl_opt_GetString(go, "-A"), "w")) == NULL) p7_Fail("Failed to open alignment output file %s for writing\n", esl_opt_GetString(go, "-A")); } if (esl_opt_IsOn(go, "--tblout")) { if ((tblfp = fopen(esl_opt_GetString(go, "--tblout"), "w")) == NULL) p7_Fail("Failed to open tabular per-seq output file %s for writing\n", esl_opt_GetString(go, "--tblfp")); } if (esl_opt_IsOn(go, "--domtblout")) { if ((domtblfp = fopen(esl_opt_GetString(go, "--domtblout"), "w")) == NULL) p7_Fail("Failed to open tabular per-dom output file %s for writing\n", esl_opt_GetString(go, "--domtblfp")); } if (esl_opt_IsOn(go, "--pfamtblout")){ if ((pfamtblfp = fopen(esl_opt_GetString(go, "--pfamtblout"), "w")) == NULL) esl_fatal("Failed to open pfam-style tabular output file %s for writing\n", esl_opt_GetString(go, "--pfamtblout")); } /* Open the target sequence database for sequential access. */ status = esl_sqfile_OpenDigital(abc, cfg->dbfile, dbformat, p7_SEQDBENV, &dbfp); if (status == eslENOTFOUND) p7_Fail("Failed to open target sequence database %s for reading\n", cfg->dbfile); else if (status == eslEFORMAT) p7_Fail("Target sequence database file %s is empty or misformatted\n", cfg->dbfile); else if (status == eslEINVAL) p7_Fail("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) p7_Fail("Unexpected error %d opening target sequence database file %s\n", status, cfg->dbfile); if (esl_opt_IsUsed(go, "--restrictdb_stkey") || esl_opt_IsUsed(go, "--restrictdb_n")) { if (esl_opt_IsUsed(go, "--ssifile")) esl_sqfile_OpenSSI(dbfp, esl_opt_GetString(go, "--ssifile")); else esl_sqfile_OpenSSI(dbfp, NULL); } /* Open the query sequence file */ status = esl_sqfile_OpenDigital(abc, cfg->qfile, qformat, NULL, &qfp); if (status == eslENOTFOUND) p7_Fail("Failed to open sequence file %s for reading\n", cfg->qfile); else if (status == eslEFORMAT) p7_Fail("Sequence file %s is empty or misformatted\n", cfg->qfile); else if (status == eslEINVAL) p7_Fail("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) p7_Fail ("Unexpected error %d opening sequence file %s\n", status, cfg->qfile); qsq = esl_sq_CreateDigital(abc); #ifdef HMMER_THREADS /* initialize thread data */ if (esl_opt_IsOn(go, "--cpu")) ncpus = esl_opt_GetInteger(go, "--cpu"); else esl_threads_CPUCount(&ncpus); if (ncpus > 0) { threadObj = esl_threads_Create(&pipeline_thread); queue = esl_workqueue_Create(ncpus * 2); } #endif infocnt = (ncpus == 0) ? 1 : ncpus; ESL_ALLOC(info, sizeof(*info) * infocnt); /* Show header output */ output_header(ofp, go, cfg->qfile, cfg->dbfile); for (i = 0; i < infocnt; ++i) { info[i].pli = NULL; info[i].th = NULL; info[i].om = NULL; info[i].bg = p7_bg_Clone(bg); #ifdef HMMER_THREADS info[i].queue = queue; #endif } #ifdef HMMER_THREADS for (i = 0; i < ncpus * 2; ++i) { block = esl_sq_CreateDigitalBlock(BLOCK_SIZE, abc); if (block == NULL) { p7_Fail("Failed to allocate sequence block"); } status = esl_workqueue_Init(queue, block); if (status != eslOK) { p7_Fail("Failed to add block to work queue"); } } #endif /* Outer loop over sequence queries */ while ((qstatus = esl_sqio_Read(qfp, qsq)) == eslOK) { P7_OPROFILE *om = NULL; /* optimized query profile */ nquery++; if (qsq->n == 0) continue; /* skip zero length seqs as if they aren't even present */ esl_stopwatch_Start(w); /* seqfile may need to be rewound (multiquery mode) */ if (nquery > 1) { if (! esl_sqfile_IsRewindable(dbfp)) p7_Fail("Target sequence file %s isn't rewindable; can't search it with multiple queries", cfg->dbfile); if ( cfg->firstseq_key == NULL ) esl_sqfile_Position(dbfp, 0); //only re-set current position to 0 if we're not planning to set it in a moment } if ( cfg->firstseq_key != NULL ) { //it's tempting to want to do this once and capture the offset position for future passes, but ncbi files make this non-trivial, so this keeps it general sstatus = esl_sqfile_PositionByKey(dbfp, cfg->firstseq_key); if (sstatus != eslOK) p7_Fail("Failure setting restrictdb_stkey to %d\n", cfg->firstseq_key); } if (fprintf(ofp, "Query: %s [L=%ld]\n", qsq->name, (long) qsq->n) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (qsq->acc[0] != '\0' && fprintf(ofp, "Accession: %s\n", qsq->acc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (qsq->desc[0] != '\0' && fprintf(ofp, "Description: %s\n", qsq->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); /* Build the model */ p7_SingleBuilder(bld, qsq, info[0].bg, NULL, NULL, NULL, &om); /* bypass HMM - only need model */ for (i = 0; i < infocnt; ++i) { /* Create processing pipeline and hit list */ info[i].th = p7_tophits_Create(); info[i].om = p7_oprofile_Clone(om); info[i].pli = p7_pipeline_Create(go, om->M, 100, FALSE, p7_SEARCH_SEQS); /* L_hint = 100 is just a dummy for now */ p7_pli_NewModel(info[i].pli, info[i].om, info[i].bg); #ifdef HMMER_THREADS if (ncpus > 0) esl_threads_AddThread(threadObj, &info[i]); #endif } #ifdef HMMER_THREADS if (ncpus > 0) sstatus = thread_loop(threadObj, queue, dbfp, cfg->n_targetseq); else sstatus = serial_loop(info, dbfp, cfg->n_targetseq); #else sstatus = serial_loop(info, dbfp, cfg->n_targetseq); #endif switch(sstatus) { case eslEFORMAT: p7_Fail("Parse failed (sequence file %s):\n%s\n", dbfp->filename, esl_sqfile_GetErrorBuf(dbfp)); break; case eslEOF: /* do nothing */ break; default: p7_Fail("Unexpected error %d reading sequence file %s", sstatus, dbfp->filename); } /* merge the results of the search results */ for (i = 1; i < infocnt; ++i) { p7_tophits_Merge(info[0].th, info[i].th); p7_pipeline_Merge(info[0].pli, info[i].pli); p7_pipeline_Destroy(info[i].pli); p7_tophits_Destroy(info[i].th); p7_oprofile_Destroy(info[i].om); } /* Print the results. */ p7_tophits_SortBySortkey(info->th); p7_tophits_Threshold(info->th, info->pli); p7_tophits_Targets(ofp, info->th, info->pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); p7_tophits_Domains(ofp, info->th, info->pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (tblfp) p7_tophits_TabularTargets(tblfp, qsq->name, qsq->acc, info->th, info->pli, (nquery == 1)); if (domtblfp) p7_tophits_TabularDomains(domtblfp, qsq->name, qsq->acc, info->th, info->pli, (nquery == 1)); if (pfamtblfp) p7_tophits_TabularXfam(pfamtblfp, qsq->name, qsq->acc, info->th, info->pli); esl_stopwatch_Stop(w); p7_pli_Statistics(ofp, info->pli, w); if (fprintf(ofp, "//\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); fflush(ofp); /* Output the results in an MSA (-A option) */ if (afp) { ESL_MSA *msa = NULL; if ( p7_tophits_Alignment(info->th, abc, NULL, NULL, 0, p7_ALL_CONSENSUS_COLS, &msa) == eslOK) { if (textw > 0) eslx_msafile_Write(afp, msa, eslMSAFILE_STOCKHOLM); else eslx_msafile_Write(afp, msa, eslMSAFILE_PFAM); if (fprintf(ofp, "# Alignment of %d hits satisfying inclusion thresholds saved to: %s\n", msa->nseq, esl_opt_GetString(go, "-A")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } else if (fprintf(ofp, "# No hits satisfy inclusion thresholds; no alignment saved\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); esl_msa_Destroy(msa); } p7_tophits_Destroy(info->th); p7_pipeline_Destroy(info->pli); p7_oprofile_Destroy(info->om); p7_oprofile_Destroy(om); esl_sq_Reuse(qsq); } /* end outer loop over query sequences */ if (qstatus == eslEFORMAT) p7_Fail("Parse failed (sequence file %s):\n%s\n", qfp->filename, esl_sqfile_GetErrorBuf(qfp)); else if (qstatus != eslEOF) p7_Fail("Unexpected error %d reading sequence file %s", qstatus, qfp->filename); /* Terminate outputs - any last words? */ if (tblfp) p7_tophits_TabularTail(tblfp, "phmmer", p7_SEARCH_SEQS, cfg->qfile, cfg->dbfile, go); if (domtblfp) p7_tophits_TabularTail(domtblfp, "phmmer", p7_SEARCH_SEQS, cfg->qfile, cfg->dbfile, go); if (pfamtblfp) p7_tophits_TabularTail(pfamtblfp,"phmmer", p7_SEARCH_SEQS, cfg->qfile, cfg->dbfile, go); if (ofp) { if (fprintf(ofp, "[ok]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } /* Cleanup - prepare for successful exit */ for (i = 0; i < infocnt; ++i) p7_bg_Destroy(info[i].bg); #ifdef HMMER_THREADS if (ncpus > 0) { esl_workqueue_Reset(queue); while (esl_workqueue_Remove(queue, (void **) &block) == eslOK) esl_sq_DestroyBlock(block); esl_workqueue_Destroy(queue); esl_threads_Destroy(threadObj); } #endif free(info); esl_sqfile_Close(dbfp); esl_sqfile_Close(qfp); esl_stopwatch_Destroy(w); esl_sq_Destroy(qsq); p7_bg_Destroy(bg); p7_builder_Destroy(bld); esl_alphabet_Destroy(abc); if (ofp != stdout) fclose(ofp); if (afp != NULL) fclose(afp); if (tblfp != NULL) fclose(tblfp); if (domtblfp != NULL) fclose(domtblfp); if (pfamtblfp) fclose(pfamtblfp); return eslOK; ERROR: return status; } #ifdef HAVE_MPI /* Define common tags used by the MPI master/slave processes */ #define HMMER_ERROR_TAG 1 #define HMMER_HMM_TAG 2 #define HMMER_SEQUENCE_TAG 3 #define HMMER_BLOCK_TAG 4 #define HMMER_PIPELINE_TAG 5 #define HMMER_TOPHITS_TAG 6 #define HMMER_HIT_TAG 7 #define HMMER_TERMINATING_TAG 8 #define HMMER_READY_TAG 9 /* mpi_failure() * Generate an error message. If the clients rank is not 0, a * message is created with the error message and sent to the * master process for handling. */ static void mpi_failure(char *format, ...) { va_list argp; int status = eslFAIL; int len; int rank; char str[512]; MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* format the error mesg */ va_start(argp, format); len = vsnprintf(str, sizeof(str), format, argp); va_end(argp); /* make sure the error string is terminated */ str[sizeof(str)-1] = '\0'; /* if the caller is the master, print the results and abort */ if (rank == 0) { if (fprintf(stderr, "\nError: ") < 0) exit(eslEWRITE); if (fprintf(stderr, "%s", str) < 0) exit(eslEWRITE); if (fprintf(stderr, "\n") < 0) exit(eslEWRITE); fflush(stderr); MPI_Abort(MPI_COMM_WORLD, status); exit(1); } else { MPI_Send(str, len, MPI_CHAR, 0, HMMER_ERROR_TAG, MPI_COMM_WORLD); pause(); } } #define MAX_BLOCK_SIZE (512*1024) typedef struct { uint64_t offset; uint64_t length; uint64_t count; } SEQ_BLOCK; typedef struct { int complete; int size; int current; int last; SEQ_BLOCK *blocks; } BLOCK_LIST; /* this routine parses the database keeping track of the blocks * offset within the file, number of sequences and the length * of the block. These blocks are passed as work units to the * MPI workers. If multiple hmm's are in the query file, the * blocks are reused without parsing the database a second time. */ int next_block(ESL_SQFILE *sqfp, ESL_SQ *sq, BLOCK_LIST *list, SEQ_BLOCK *block, int n_targetseqs) { int status = eslOK; /* if the list has been calculated, use it instead of parsing the database */ if (list->complete) { if (list->current == list->last) { block->offset = 0; block->length = 0; block->count = 0; status = eslEOF; } else { int inx = list->current++; block->offset = list->blocks[inx].offset; block->length = list->blocks[inx].length; block->count = list->blocks[inx].count; status = eslOK; } return status; } block->offset = 0; block->length = 0; block->count = 0; esl_sq_Reuse(sq); if (n_targetseqs == 0) status = eslEOF; //this is to handle the end-case of a restrictdb scenario, where no more targets are required, and we want to mark the list as complete while (block->length < MAX_BLOCK_SIZE && (n_targetseqs < 0 || block->count < n_targetseqs) && (status = esl_sqio_ReadInfo(sqfp, sq)) == eslOK) { if (block->count == 0) block->offset = sq->roff; block->length = sq->eoff - block->offset + 1; block->count++; esl_sq_Reuse(sq); } if (block->count > 0) if (status == eslEOF || block->count == n_targetseqs) status = eslOK; if (status == eslEOF) list->complete = 1; /* add the block to the list of known blocks */ if (status == eslOK) { int inx; if (list->last >= list->size) { void *tmp; list->size += 500; ESL_RALLOC(list->blocks, tmp, sizeof(SEQ_BLOCK) * list->size); } inx = list->last++; list->blocks[inx].offset = block->offset; list->blocks[inx].length = block->length; list->blocks[inx].count = block->count; } return status; ERROR: return eslEMEM; } /* mpi_master() * The MPI version of hmmbuild. * Follows standard pattern for a master/worker load-balanced MPI program (J1/78-79). * * A master can only return if it's successful. * Where we use EXCEPTION mechanism and ERROR block, it's for convenience; * we know we're using a fatal exception handler. * * Errors in an MPI master come in two classes: recoverable and nonrecoverable. * * Recoverable errors include all worker-side errors, and any * master-side error that do not affect MPI communication. Error * messages from recoverable messages are delayed until we've cleanly * shut down the workers. * * Unrecoverable errors are master-side errors that may affect MPI * communication, meaning we cannot count on being able to reach the * workers and shut them down. Unrecoverable errors result in immediate * p7_Fail()'s, which will cause MPI to shut down the worker processes * uncleanly. */ static int mpi_master(ESL_GETOPTS *go, struct cfg_s *cfg) { FILE *ofp = stdout; /* output file for results (default stdout) */ FILE *afp = NULL; /* alignment output file (-A option) */ FILE *tblfp = NULL; /* output stream for tabular per-seq (--tblout) */ FILE *domtblfp = NULL; /* output stream for tabular per-seq (--domtblout) */ FILE *pfamtblfp= NULL; /* output stream for pfam-style tabular output (--pfamtblout) */ int qformat = eslSQFILE_UNKNOWN; /* format of qfile */ P7_BG *bg = NULL; /* null model */ ESL_SQFILE *qfp = NULL; /* open qfile */ ESL_SQ *qsq = NULL; /* query sequence */ int dbformat = eslSQFILE_UNKNOWN; /* format of dbfile */ ESL_SQFILE *dbfp = NULL; /* open dbfile */ ESL_SQ *dbsq = NULL; /* target sequence */ ESL_ALPHABET *abc = NULL; /* sequence alphabet */ P7_BUILDER *bld = NULL; /* HMM construction configuration */ ESL_STOPWATCH *w = NULL; /* for timing */ int nquery = 0; int seed; int textw; int status = eslOK; int qstatus = eslOK; int sstatus = eslOK; int dest; char *mpi_buf = NULL; /* buffer used to pack/unpack structures */ int mpi_size = 0; /* size of the allocated buffer */ BLOCK_LIST *list = NULL; SEQ_BLOCK block; int i; int size; MPI_Status mpistatus; int n_targets; /* Initializations */ abc = esl_alphabet_Create(eslAMINO); w = esl_stopwatch_Create(); if (esl_opt_GetBoolean(go, "--notextw")) textw = 0; else textw = esl_opt_GetInteger(go, "--textw"); esl_stopwatch_Start(w); /* If caller declared input formats, decode them */ if (esl_opt_IsOn(go, "--qformat")) { qformat = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--qformat")); if (qformat == eslSQFILE_UNKNOWN) p7_Fail("%s is not a recognized input sequence file format\n", esl_opt_GetString(go, "--qformat")); } if (esl_opt_IsOn(go, "--tformat")) { dbformat = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--tformat")); if (dbformat == eslSQFILE_UNKNOWN) p7_Fail("%s is not a recognized sequence database file format\n", esl_opt_GetString(go, "--tformat")); } bg = p7_bg_Create(abc); /* Initialize a default builder configuration, * then set only the options we need for single sequence search */ bld = p7_builder_Create(NULL, abc); if ((seed = esl_opt_GetInteger(go, "--seed")) > 0) { /* a little wasteful - we're blowing a couple of usec by reinitializing */ esl_randomness_Init(bld->r, seed); bld->do_reseeding = TRUE; } bld->EmL = esl_opt_GetInteger(go, "--EmL"); bld->EmN = esl_opt_GetInteger(go, "--EmN"); bld->EvL = esl_opt_GetInteger(go, "--EvL"); bld->EvN = esl_opt_GetInteger(go, "--EvN"); bld->EfL = esl_opt_GetInteger(go, "--EfL"); bld->EfN = esl_opt_GetInteger(go, "--EfN"); bld->Eft = esl_opt_GetReal (go, "--Eft"); if (esl_opt_IsOn(go, "--mxfile")) status = p7_builder_SetScoreSystem (bld, esl_opt_GetString(go, "--mxfile"), NULL, esl_opt_GetReal(go, "--popen"), esl_opt_GetReal(go, "--pextend"), bg); else status = p7_builder_LoadScoreSystem(bld, esl_opt_GetString(go, "--mx"), esl_opt_GetReal(go, "--popen"), esl_opt_GetReal(go, "--pextend"), bg); if (status != eslOK) mpi_failure("Failed to set single query seq score system:\n%s\n", bld->errbuf); /* Open results output files */ if (esl_opt_IsOn(go, "-o") && (ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) mpi_failure("Failed to open output file %s for writing\n", esl_opt_GetString(go, "-o")); if (esl_opt_IsOn(go, "-A") && (afp = fopen(esl_opt_GetString(go, "-A"), "w")) == NULL) mpi_failure("Failed to open alignment output file %s for writing\n", esl_opt_GetString(go, "-A")); if (esl_opt_IsOn(go, "--tblout") && (tblfp = fopen(esl_opt_GetString(go, "--tblout"), "w")) == NULL) mpi_failure("Failed to open tabular per-seq output file %s for writing\n", esl_opt_GetString(go, "--tblfp")); if (esl_opt_IsOn(go, "--domtblout") && (domtblfp = fopen(esl_opt_GetString(go, "--domtblout"), "w")) == NULL) mpi_failure("Failed to open tabular per-dom output file %s for writing\n", esl_opt_GetString(go, "--domtblfp")); if (esl_opt_IsOn(go, "--pfamtblout") && (pfamtblfp = fopen(esl_opt_GetString(go, "--pfamtblout"), "w")) == NULL) mpi_failure("Failed to open pfam-style tabular output file %s for writing\n", esl_opt_GetString(go, "--pfamtblout")); /* Open the target sequence database for sequential access. */ status = esl_sqfile_OpenDigital(abc, cfg->dbfile, dbformat, p7_SEQDBENV, &dbfp); if (status == eslENOTFOUND) mpi_failure("Failed to open target sequence database %s for reading\n", cfg->dbfile); else if (status == eslEFORMAT) mpi_failure("Target sequence database file %s is empty or misformatted\n", cfg->dbfile); else if (status == eslEINVAL) mpi_failure("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) mpi_failure("Unexpected error %d opening target sequence database file %s\n", status, cfg->dbfile); dbsq = esl_sq_CreateDigital(abc); if (esl_opt_IsUsed(go, "--restrictdb_stkey") || esl_opt_IsUsed(go, "--restrictdb_n")) { if (esl_opt_IsUsed(go, "--ssifile")) esl_sqfile_OpenSSI(dbfp, esl_opt_GetString(go, "--ssifile")); else esl_sqfile_OpenSSI(dbfp, NULL); } /* Open the query sequence file */ status = esl_sqfile_OpenDigital(abc, cfg->qfile, qformat, NULL, &qfp); if (status == eslENOTFOUND) mpi_failure("Failed to open sequence file %s for reading\n", cfg->qfile); else if (status == eslEFORMAT) mpi_failure("Sequence file %s is empty or misformatted\n", cfg->qfile); else if (status == eslEINVAL) mpi_failure("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) mpi_failure ("Unexpected error %d opening sequence file %s\n", status, cfg->qfile); qsq = esl_sq_CreateDigital(abc); ESL_ALLOC(list, sizeof(SEQ_BLOCK)); list->complete = 0; list->size = 0; list->current = 0; list->last = 0; list->blocks = NULL; /* Show header output */ output_header(ofp, go, cfg->qfile, cfg->dbfile); if ( cfg->firstseq_key != NULL ) { //it's tempting to want to do this once and capture the offset position for future passes, but ncbi files make this non-trivial, so this keeps it general sstatus = esl_sqfile_PositionByKey(dbfp, cfg->firstseq_key); if (sstatus != eslOK) p7_Fail("Failure setting restrictdb_stkey to %d\n", cfg->firstseq_key); } /* Outer loop over sequence queries */ while ((qstatus = esl_sqio_Read(qfp, qsq)) == eslOK) { P7_PIPELINE *pli = NULL; /* processing pipeline */ P7_TOPHITS *th = NULL; /* top-scoring sequence hits */ P7_OPROFILE *om = NULL; /* optimized query profile */ int seq_cnt = 0; nquery++; if (qsq->n == 0) continue; /* skip zero length seqs as if they aren't even present */ esl_stopwatch_Start(w); n_targets = cfg->n_targetseq; /* seqfile may need to be rewound (multiquery mode) */ if (nquery > 1) list->current = 0; if (fprintf(ofp, "Query: %s [L=%ld]\n", qsq->name, (long) qsq->n) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (qsq->acc[0] != '\0' && fprintf(ofp, "Accession: %s\n", qsq->acc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (qsq->desc[0] != '\0' && fprintf(ofp, "Description: %s\n", qsq->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); /* Build the model */ p7_SingleBuilder(bld, qsq, bg, NULL, NULL, NULL, &om); /* bypass HMM - only need model */ /* Create processing pipeline and hit list */ th = p7_tophits_Create(); pli = p7_pipeline_Create(go, om->M, 100, FALSE, p7_SEARCH_SEQS); /* L_hint = 100 is just a dummy for now */ p7_pli_NewModel(pli, om, bg); /* Main loop: */ while ((n_targets==-1 || seq_cnt<=n_targets) && (sstatus = next_block(dbfp, dbsq, list, &block, n_targets-seq_cnt)) == eslOK ) { seq_cnt += block.count; if (MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &mpistatus) != 0) mpi_failure("MPI error %d receiving message from %d\n", mpistatus.MPI_SOURCE); MPI_Get_count(&mpistatus, MPI_PACKED, &size); if (mpi_buf == NULL || size > mpi_size) { void *tmp; ESL_RALLOC(mpi_buf, tmp, sizeof(char) * size); mpi_size = size; } dest = mpistatus.MPI_SOURCE; MPI_Recv(mpi_buf, size, MPI_PACKED, dest, mpistatus.MPI_TAG, MPI_COMM_WORLD, &mpistatus); if (mpistatus.MPI_TAG == HMMER_ERROR_TAG) mpi_failure("MPI client %d raised error:\n%s\n", dest, mpi_buf); if (mpistatus.MPI_TAG != HMMER_READY_TAG) mpi_failure("Unexpected tag %d from %d\n", mpistatus.MPI_TAG, dest); MPI_Send(&block, 3, MPI_LONG_LONG_INT, dest, HMMER_BLOCK_TAG, MPI_COMM_WORLD); } if (n_targets!=-1 && seq_cnt==n_targets) sstatus = eslEOF; switch(sstatus) { case eslEFORMAT: mpi_failure("Parse failed (sequence file %s):\n%s\n", dbfp->filename, esl_sqfile_GetErrorBuf(dbfp)); break; case eslEOF: break; default: mpi_failure("Unexpected error %d reading sequence file %s", sstatus, dbfp->filename); } block.offset = 0; block.length = 0; block.count = 0; /* wait for all workers to finish up their work blocks */ for (i = 1; i < cfg->nproc; ++i) { if (MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &mpistatus) != 0) mpi_failure("MPI error %d receiving message from %d\n", mpistatus.MPI_SOURCE); MPI_Get_count(&mpistatus, MPI_PACKED, &size); if (mpi_buf == NULL || size > mpi_size) { void *tmp; ESL_RALLOC(mpi_buf, tmp, sizeof(char) * size); mpi_size = size; } dest = mpistatus.MPI_SOURCE; MPI_Recv(mpi_buf, size, MPI_PACKED, dest, mpistatus.MPI_TAG, MPI_COMM_WORLD, &mpistatus); if (mpistatus.MPI_TAG == HMMER_ERROR_TAG) mpi_failure("MPI client %d raised error:\n%s\n", dest, mpi_buf); if (mpistatus.MPI_TAG != HMMER_READY_TAG) mpi_failure("Unexpected tag %d from %d\n", mpistatus.MPI_TAG, dest); } /* merge the results of the search results */ for (dest = 1; dest < cfg->nproc; ++dest) { P7_PIPELINE *mpi_pli = NULL; P7_TOPHITS *mpi_th = NULL; /* send an empty block to signal the worker they are done */ MPI_Send(&block, 3, MPI_LONG_LONG_INT, dest, HMMER_BLOCK_TAG, MPI_COMM_WORLD); /* wait for the results */ if ((status = p7_tophits_MPIRecv(dest, HMMER_TOPHITS_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size, &mpi_th)) != eslOK) mpi_failure("Unexpected error %d receiving tophits from %d", status, dest); if ((status = p7_pipeline_MPIRecv(dest, HMMER_PIPELINE_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size, go, &mpi_pli)) != eslOK) mpi_failure("Unexpected error %d receiving pipeline from %d", status, dest); p7_tophits_Merge(th, mpi_th); p7_pipeline_Merge(pli, mpi_pli); p7_pipeline_Destroy(mpi_pli); p7_tophits_Destroy(mpi_th); } /* Print the results. */ p7_tophits_SortBySortkey(th); p7_tophits_Threshold(th, pli); p7_tophits_Targets(ofp, th, pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); p7_tophits_Domains(ofp, th, pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (tblfp) p7_tophits_TabularTargets(tblfp, qsq->name, qsq->acc, th, pli, (nquery == 1)); if (domtblfp) p7_tophits_TabularDomains(domtblfp, qsq->name, qsq->acc, th, pli, (nquery == 1)); if (pfamtblfp) p7_tophits_TabularXfam(pfamtblfp, qsq->name, qsq->acc, th, pli); esl_stopwatch_Stop(w); p7_pli_Statistics(ofp, pli, w); if (fprintf(ofp, "//\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); /* Output the results in an MSA (-A option) */ if (afp) { ESL_MSA *msa = NULL; if ( p7_tophits_Alignment(th, abc, NULL, NULL, 0, p7_ALL_CONSENSUS_COLS, &msa) == eslOK) { if (textw > 0) eslx_msafile_Write(afp, msa, eslMSAFILE_STOCKHOLM); else eslx_msafile_Write(afp, msa, eslMSAFILE_PFAM); if (fprintf(ofp, "# Alignment of %d hits satisfying inclusion thresholds saved to: %s\n", msa->nseq, esl_opt_GetString(go, "-A")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } else { if (fprintf(ofp, "# No hits satisfy inclusion thresholds; no alignment saved\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } esl_msa_Destroy(msa); } p7_tophits_Destroy(th); p7_pipeline_Destroy(pli); p7_oprofile_Destroy(om); esl_sq_Reuse(qsq); } /* end outer loop over query sequences */ if (qstatus == eslEFORMAT) mpi_failure("Parse failed (sequence file %s):\n%s\n", qfp->filename, esl_sqfile_GetErrorBuf(qfp)); else if (qstatus != eslEOF) mpi_failure("Unexpected error %d reading sequence file %s", qstatus, qfp->filename); /* monitor all the workers to make sure they have ended */ for (i = 1; i < cfg->nproc; ++i) { if (MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &mpistatus) != 0) mpi_failure("MPI error %d receiving message from %d\n", mpistatus.MPI_SOURCE); MPI_Get_count(&mpistatus, MPI_PACKED, &size); if (mpi_buf == NULL || size > mpi_size) { void *tmp; ESL_RALLOC(mpi_buf, tmp, sizeof(char) * size); mpi_size = size; } dest = mpistatus.MPI_SOURCE; MPI_Recv(mpi_buf, size, MPI_PACKED, dest, mpistatus.MPI_TAG, MPI_COMM_WORLD, &mpistatus); if (mpistatus.MPI_TAG == HMMER_ERROR_TAG) mpi_failure("MPI client %d raised error:\n%s\n", dest, mpi_buf); if (mpistatus.MPI_TAG != HMMER_TERMINATING_TAG) mpi_failure("Unexpected tag %d from %d\n", mpistatus.MPI_TAG, dest); } /* Terminate outputs - any last words? */ if (tblfp) p7_tophits_TabularTail(tblfp, "phmmer", p7_SEARCH_SEQS, cfg->qfile, cfg->dbfile, go); if (domtblfp) p7_tophits_TabularTail(domtblfp, "phmmer", p7_SEARCH_SEQS, cfg->qfile, cfg->dbfile, go); if (pfamtblfp)p7_tophits_TabularTail(pfamtblfp, "phmmer", p7_SEARCH_SEQS, cfg->qfile, cfg->dbfile, go); if (ofp) { if (fprintf(ofp, "[ok]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } /* Cleanup - prepare for successful exit */ free(list); if (mpi_buf != NULL) free(mpi_buf); p7_bg_Destroy(bg); esl_sqfile_Close(dbfp); esl_sqfile_Close(qfp); esl_stopwatch_Destroy(w); esl_sq_Destroy(dbsq); esl_sq_Destroy(qsq); p7_builder_Destroy(bld); esl_alphabet_Destroy(abc); if (ofp != stdout) fclose(ofp); if (afp != NULL) fclose(afp); if (tblfp != NULL) fclose(tblfp); if (domtblfp != NULL) fclose(domtblfp); if (pfamtblfp) fclose(pfamtblfp); return eslOK; ERROR: return status; } static int mpi_worker(ESL_GETOPTS *go, struct cfg_s *cfg) { int qformat = eslSQFILE_UNKNOWN; /* format of qfile */ P7_BG *bg = NULL; /* null model */ ESL_SQFILE *qfp = NULL; /* open qfile */ ESL_SQ *qsq = NULL; /* query sequence */ int dbformat = eslSQFILE_UNKNOWN; /* format of dbfile */ ESL_SQFILE *dbfp = NULL; /* open dbfile */ ESL_SQ *dbsq = NULL; /* target sequence */ ESL_ALPHABET *abc = NULL; /* sequence alphabet */ P7_BUILDER *bld = NULL; /* HMM construction configuration */ ESL_STOPWATCH *w = NULL; /* for timing */ int seed; int status = eslOK; int qstatus = eslOK; int sstatus = eslOK; char *mpi_buf = NULL; /* buffer used to pack/unpack structures */ int mpi_size = 0; /* size of the allocated buffer */ MPI_Status mpistatus; /* Initializations */ abc = esl_alphabet_Create(eslAMINO); w = esl_stopwatch_Create(); bg = p7_bg_Create(abc); /* If caller declared input formats, decode them */ if (esl_opt_IsOn(go, "--qformat")) { qformat = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--qformat")); if (qformat == eslSQFILE_UNKNOWN) p7_Fail("%s is not a recognized input sequence file format\n", esl_opt_GetString(go, "--qformat")); } if (esl_opt_IsOn(go, "--tformat")) { dbformat = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--tformat")); if (dbformat == eslSQFILE_UNKNOWN) p7_Fail("%s is not a recognized sequence database file format\n", esl_opt_GetString(go, "--tformat")); } /* Initialize a default builder configuration, * then set only the options we need for single sequence search */ bld = p7_builder_Create(NULL, abc); if ((seed = esl_opt_GetInteger(go, "--seed")) > 0) { /* a little wasteful - we're blowing a couple of usec by reinitializing */ esl_randomness_Init(bld->r, seed); bld->do_reseeding = TRUE; } bld->EmL = esl_opt_GetInteger(go, "--EmL"); bld->EmN = esl_opt_GetInteger(go, "--EmN"); bld->EvL = esl_opt_GetInteger(go, "--EvL"); bld->EvN = esl_opt_GetInteger(go, "--EvN"); bld->EfL = esl_opt_GetInteger(go, "--EfL"); bld->EfN = esl_opt_GetInteger(go, "--EfN"); bld->Eft = esl_opt_GetReal (go, "--Eft"); if (esl_opt_IsOn(go, "--mxfile")) status = p7_builder_SetScoreSystem (bld, esl_opt_GetString(go, "--mxfile"), NULL, esl_opt_GetReal(go, "--popen"), esl_opt_GetReal(go, "--pextend"), bg); else status = p7_builder_LoadScoreSystem(bld, esl_opt_GetString(go, "--mx"), esl_opt_GetReal(go, "--popen"), esl_opt_GetReal(go, "--pextend"), bg); if (status != eslOK) mpi_failure("Failed to set single query seq score system:\n%s\n", bld->errbuf); /* Open the target sequence database for sequential access. */ status = esl_sqfile_OpenDigital(abc, cfg->dbfile, dbformat, p7_SEQDBENV, &dbfp); if (status == eslENOTFOUND) mpi_failure("Failed to open target sequence database %s for reading\n", cfg->dbfile); else if (status == eslEFORMAT) mpi_failure("Target sequence database file %s is empty or misformatted\n", cfg->dbfile); else if (status == eslEINVAL) mpi_failure("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) mpi_failure("Unexpected error %d opening target sequence database file %s\n", status, cfg->dbfile); dbsq = esl_sq_CreateDigital(abc); /* Open the query sequence file */ status = esl_sqfile_OpenDigital(abc, cfg->qfile, qformat, NULL, &qfp); if (status == eslENOTFOUND) mpi_failure("Failed to open sequence file %s for reading\n", cfg->qfile); else if (status == eslEFORMAT) mpi_failure("Sequence file %s is empty or misformatted\n", cfg->qfile); else if (status == eslEINVAL) mpi_failure("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) mpi_failure ("Unexpected error %d opening sequence file %s\n", status, cfg->qfile); qsq = esl_sq_CreateDigital(abc); /* Outer loop over sequence queries */ while ((qstatus = esl_sqio_Read(qfp, qsq)) == eslOK) { P7_PIPELINE *pli = NULL; /* processing pipeline */ P7_TOPHITS *th = NULL; /* top-scoring sequence hits */ P7_OPROFILE *om = NULL; /* optimized query profile */ SEQ_BLOCK block; status = 0; MPI_Send(&status, 1, MPI_INT, 0, HMMER_READY_TAG, MPI_COMM_WORLD); if (qsq->n == 0) continue; /* skip zero length seqs as if they aren't even present */ esl_stopwatch_Start(w); /* Build the model */ p7_SingleBuilder(bld, qsq, bg, NULL, NULL, NULL, &om); /* bypass HMM - only need model */ /* Create processing pipeline and hit list */ th = p7_tophits_Create(); pli = p7_pipeline_Create(go, om->M, 100, FALSE, p7_SEARCH_SEQS); /* L_hint = 100 is just a dummy for now */ p7_pli_NewModel(pli, om, bg); /* receive a sequence block from the master */ MPI_Recv(&block, 3, MPI_LONG_LONG_INT, 0, HMMER_BLOCK_TAG, MPI_COMM_WORLD, &mpistatus); while (block.count > 0) { uint64_t length = 0; uint64_t count = block.count; status = esl_sqfile_Position(dbfp, block.offset); if (status != eslOK) mpi_failure("Cannot position sequence database to %ld\n", block.offset); while (count > 0 && (sstatus = esl_sqio_Read(dbfp, dbsq)) == eslOK) { length = dbsq->eoff - block.offset + 1; p7_pli_NewSeq(pli, dbsq); p7_bg_SetLength(bg, dbsq->n); p7_oprofile_ReconfigLength(om, dbsq->n); p7_Pipeline(pli, om, bg, dbsq, th); esl_sq_Reuse(dbsq); p7_pipeline_Reuse(pli); --count; } /* lets do a little bit of sanity checking here to make sure the blocks are the same */ if (count > 0) mpi_failure("Block count mismatch - expected %ld found %ld at offset %ld\n", block.count, block.count - count, block.offset); if (block.length != length) mpi_failure("Block length mismatch - expected %ld found %ld at offset %ld\n", block.length, length, block.offset); /* inform the master we need another block of sequences */ status = 0; MPI_Send(&status, 1, MPI_INT, 0, HMMER_READY_TAG, MPI_COMM_WORLD); /* wait for the next block of sequences */ MPI_Recv(&block, 3, MPI_LONG_LONG_INT, 0, HMMER_BLOCK_TAG, MPI_COMM_WORLD, &mpistatus); } esl_stopwatch_Stop(w); /* Send the top hits back to the master. */ p7_tophits_MPISend(th, 0, HMMER_TOPHITS_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size); p7_pipeline_MPISend(pli, 0, HMMER_PIPELINE_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size); p7_tophits_Destroy(th); p7_pipeline_Destroy(pli); p7_oprofile_Destroy(om); esl_sq_Reuse(qsq); } /* end outer loop over query sequences */ if (qstatus == eslEFORMAT) mpi_failure("Parse failed (sequence file %s):\n%s\n", qfp->filename, esl_sqfile_GetErrorBuf(qfp)); else if (qstatus != eslEOF) mpi_failure("Unexpected error %d reading sequence file %s", qstatus, qfp->filename); status = 0; MPI_Send(&status, 1, MPI_INT, 0, HMMER_TERMINATING_TAG, MPI_COMM_WORLD); if (mpi_buf != NULL) free(mpi_buf); p7_bg_Destroy(bg); esl_sqfile_Close(dbfp); esl_sqfile_Close(qfp); esl_stopwatch_Destroy(w); esl_sq_Destroy(dbsq); esl_sq_Destroy(qsq); p7_builder_Destroy(bld); esl_alphabet_Destroy(abc); return eslOK; } #endif /*HAVE_MPI*/ static int serial_loop(WORKER_INFO *info, ESL_SQFILE *dbfp, int n_targetseqs) { int sstatus = eslOK; ESL_SQ *dbsq = NULL; /* one target sequence (digital) */ int seq_cnt = 0; dbsq = esl_sq_CreateDigital(info->om->abc); /* Main loop: */ while ((n_targetseqs==-1 || seq_cntpli, dbsq); p7_bg_SetLength(info->bg, dbsq->n); p7_oprofile_ReconfigLength(info->om, dbsq->n); p7_Pipeline(info->pli, info->om, info->bg, dbsq, info->th); seq_cnt++; esl_sq_Reuse(dbsq); p7_pipeline_Reuse(info->pli); } if (n_targetseqs!=-1 && seq_cnt==n_targetseqs) sstatus = eslEOF; esl_sq_Destroy(dbsq); return sstatus; } #ifdef HMMER_THREADS static int thread_loop(ESL_THREADS *obj, ESL_WORK_QUEUE *queue, ESL_SQFILE *dbfp, int n_targetseqs) { int status = eslOK; int sstatus = eslOK; int eofCount = 0; ESL_SQ_BLOCK *block; void *newBlock; esl_workqueue_Reset(queue); esl_threads_WaitForStart(obj); status = esl_workqueue_ReaderUpdate(queue, NULL, &newBlock); if (status != eslOK) p7_Fail("Work queue reader failed"); /* Main loop: */ while (sstatus == eslOK) { block = (ESL_SQ_BLOCK *) newBlock; if (n_targetseqs == 0) { block->count = 0; sstatus = eslEOF; } else { sstatus = esl_sqio_ReadBlock(dbfp, block, -1, n_targetseqs, FALSE); n_targetseqs -= block->count; } if (sstatus == eslEOF) { if (eofCount < esl_threads_GetWorkerCount(obj)) sstatus = eslOK; ++eofCount; } if (sstatus == eslOK) { status = esl_workqueue_ReaderUpdate(queue, block, &newBlock); if (status != eslOK) p7_Fail("Work queue reader failed"); } } status = esl_workqueue_ReaderUpdate(queue, block, NULL); if (status != eslOK) p7_Fail("Work queue reader failed"); if (sstatus == eslEOF) { /* wait for all the threads to complete */ esl_threads_WaitForFinish(obj); esl_workqueue_Complete(queue); } return sstatus; } static void pipeline_thread(void *arg) { int i; int status; int workeridx; WORKER_INFO *info; ESL_THREADS *obj; ESL_SQ_BLOCK *block = NULL; void *newBlock; impl_Init(); obj = (ESL_THREADS *) arg; esl_threads_Started(obj, &workeridx); info = (WORKER_INFO *) esl_threads_GetData(obj, workeridx); status = esl_workqueue_WorkerUpdate(info->queue, NULL, &newBlock); if (status != eslOK) p7_Fail("Work queue worker failed"); /* loop until all blocks have been processed */ block = (ESL_SQ_BLOCK *) newBlock; while (block->count > 0) { /* Main loop: */ for (i = 0; i < block->count; ++i) { ESL_SQ *dbsq = block->list + i; p7_pli_NewSeq(info->pli, dbsq); p7_bg_SetLength(info->bg, dbsq->n); p7_oprofile_ReconfigLength(info->om, dbsq->n); p7_Pipeline(info->pli, info->om, info->bg, dbsq, info->th); esl_sq_Reuse(dbsq); p7_pipeline_Reuse(info->pli); } status = esl_workqueue_WorkerUpdate(info->queue, block, &newBlock); if (status != eslOK) p7_Fail("Work queue worker failed"); block = (ESL_SQ_BLOCK *) newBlock; } status = esl_workqueue_WorkerUpdate(info->queue, block, NULL); if (status != eslOK) p7_Fail("Work queue worker failed"); esl_threads_Finished(obj, workeridx); return; } #endif /* HMMER_THREADS */ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: phmmer.c 4583 2013-12-30 18:56:25Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/phmmer.c $ *****************************************************************/ hmmer-3.1b2/src/p7_alidisplay.c0000664361611702660230000015405512473612614015777 0ustar wheelerteddy/* Formatting, transmitting, and printing single alignments to a * profile. * * Contents: * 1. The P7_ALIDISPLAY object. * 2. The P7_ALIDISPLAY API. * 3. Debugging/dev code. * 4. Benchmark driver. * 5. Unit tests. * 6. Test driver. * 7. Example. * 8. Copyright and license. */ #include "p7_config.h" #include #include #include #include #include "easel.h" #include "hmmer.h" /***************************************************************** * 1. The P7_ALIDISPLAY object *****************************************************************/ /* Function: p7_alidisplay_Create() * Synopsis: Create an alignment display, from trace and oprofile. * * Purpose: Creates and returns an alignment display for domain number * in traceback , where the traceback * corresponds to an alignment of optimized profile to digital sequence * , and the unique name of that target * sequence is . The index starts at 0. * * It will be a little faster if the trace is indexed with * first. The number of domains is then * in ndom>. If the caller wants to create alidisplays * for all of these, it would loop from * <0..tr->ndom-1>. * * However, even without an index, the routine will work fine. * * Args: tr - traceback * which - domain number, 0..tr->ndom-1 * om - optimized profile (query) * sq - digital sequence (target) * ddef_app - optional posterior prob alignment line; only nhmmer sends a not-NULL value * * Returns: on success. * * Throws: on allocation failure, or if something's internally corrupt * in the data. */ P7_ALIDISPLAY * p7_alidisplay_Create(const P7_TRACE *tr, int which, const P7_OPROFILE *om, const ESL_SQ *sq) { P7_ALIDISPLAY *ad = NULL; char *Alphabet = om->abc->sym; int n, pos, z; int z1,z2; int k,x,i,s; int hmm_namelen, hmm_acclen, hmm_desclen; int sq_namelen, sq_acclen, sq_desclen; int status; /* First figure out which piece of the trace (from first match to last match) * we're going to represent, and how big it is. */ if (tr->ndom > 0) { /* if we have an index, this is a little faster: */ for (z1 = tr->tfrom[which]; z1 < tr->N; z1++) if (tr->st[z1] == p7T_M) break; /* find next M state */ if (z1 == tr->N) return NULL; /* no M? corrupt trace */ for (z2 = tr->tto[which]; z2 >= 0 ; z2--) if (tr->st[z2] == p7T_M) break; /* find prev M state */ if (z2 == -1) return NULL; /* no M? corrupt trace */ } else { /* without an index, we can still do it fine: */ for (z1 = 0; which >= 0 && z1 < tr->N; z1++) if (tr->st[z1] == p7T_B) which--; /* find the right B state */ if (z1 == tr->N) return NULL; /* no such domain */ for (; z1 < tr->N; z1++) if (tr->st[z1] == p7T_M) break; /* find next M state */ if (z1 == tr->N) return NULL; /* no M? corrupt trace */ for (z2 = z1; z2 < tr->N; z2++) if (tr->st[z2] == p7T_E) break; /* find the next E state */ for (; z2 >= 0; z2--) if (tr->st[z2] == p7T_M) break; /* find prev M state */ if (z2 == -1) return NULL; /* no M? corrupt trace */ } /* Now we know that z1..z2 in the trace will be represented in the * alidisplay; that's z2-z1+1 positions. We need a \0 trailer on all * our display lines, so allocate z2-z1+2. We know each position is * M, D, or I, so there's a 1:1 correspondence of trace positions * with alignment display positions. We also know the display * starts and ends with M states. * * So now let's allocate. The alidisplay is packed into a single * memory space, so this appears to be intricate, but it's just * bookkeeping. */ n = (z2-z1+2) * 3; /* model, mline, aseq mandatory */ if (om->rf[0] != 0) n += z2-z1+2; /* optional reference line */ if (om->mm[0] != 0) n += z2-z1+2; /* optional reference line */ if (om->cs[0] != 0) n += z2-z1+2; /* optional structure line */ if (tr->pp != NULL) n += z2-z1+2; /* optional posterior prob line */ hmm_namelen = strlen(om->name); n += hmm_namelen + 1; hmm_acclen = (om->acc != NULL ? strlen(om->acc) : 0); n += hmm_acclen + 1; hmm_desclen = (om->desc != NULL ? strlen(om->desc) : 0); n += hmm_desclen + 1; sq_namelen = strlen(sq->name); n += sq_namelen + 1; sq_acclen = strlen(sq->acc); n += sq_acclen + 1; /* sq->acc is "\0" when unset */ sq_desclen = strlen(sq->desc); n += sq_desclen + 1; /* same for desc */ ESL_ALLOC(ad, sizeof(P7_ALIDISPLAY)); ad->mem = NULL; pos = 0; ad->memsize = sizeof(char) * n; ESL_ALLOC(ad->mem, ad->memsize); if (om->rf[0] != 0) { ad->rfline = ad->mem + pos; pos += z2-z1+2; } else { ad->rfline = NULL; } //if (om->mm[0] != 0) { ad->mmline = ad->mem + pos; pos += z2-z1+2; } else { ad->mmline = NULL; } ad->mmline = NULL; if (om->cs[0] != 0) { ad->csline = ad->mem + pos; pos += z2-z1+2; } else { ad->csline = NULL; } ad->model = ad->mem + pos; pos += z2-z1+2; ad->mline = ad->mem + pos; pos += z2-z1+2; ad->aseq = ad->mem + pos; pos += z2-z1+2; if (tr->pp != NULL) { ad->ppline = ad->mem + pos; pos += z2-z1+2;} else { ad->ppline = NULL; } ad->hmmname = ad->mem + pos; pos += hmm_namelen +1; ad->hmmacc = ad->mem + pos; pos += hmm_acclen +1; ad->hmmdesc = ad->mem + pos; pos += hmm_desclen +1; ad->sqname = ad->mem + pos; pos += sq_namelen +1; ad->sqacc = ad->mem + pos; pos += sq_acclen +1; ad->sqdesc = ad->mem + pos; pos += sq_desclen +1; strcpy(ad->hmmname, om->name); if (om->acc != NULL) strcpy(ad->hmmacc, om->acc); else ad->hmmacc[0] = 0; if (om->desc != NULL) strcpy(ad->hmmdesc, om->desc); else ad->hmmdesc[0] = 0; strcpy(ad->sqname, sq->name); strcpy(ad->sqacc, sq->acc); strcpy(ad->sqdesc, sq->desc); /* Determine hit coords */ ad->hmmfrom = tr->k[z1]; ad->hmmto = tr->k[z2]; ad->M = om->M; ad->sqfrom = tr->i[z1]; ad->sqto = tr->i[z2]; ad->L = sq->n; /* optional rf line */ if (ad->rfline != NULL) { for (z = z1; z <= z2; z++) ad->rfline[z-z1] = ((tr->st[z] == p7T_I) ? '.' : om->rf[tr->k[z]]); ad->rfline[z-z1] = '\0'; } /* optional mm line */ if (ad->mmline != NULL) { for (z = z1; z <= z2; z++) ad->mmline[z-z1] = ((tr->st[z] == p7T_I) ? '.' : om->mm[tr->k[z]]); ad->mmline[z-z1] = '\0'; } /* optional cs line */ if (ad->csline != NULL) { for (z = z1; z <= z2; z++) ad->csline[z-z1] = ((tr->st[z] == p7T_I) ? '.' : om->cs[tr->k[z]]); ad->csline[z-z1] = '\0'; } /* optional pp line */ if (ad->ppline != NULL) { for (z = z1; z <= z2; z++) ad->ppline[z-z1] = ( (tr->st[z] == p7T_D) ? '.' : p7_alidisplay_EncodePostProb(tr->pp[z])); ad->ppline[z-z1] = '\0'; } /* mandatory three alignment display lines: model, mline, aseq */ for (z = z1; z <= z2; z++) { k = tr->k[z]; i = tr->i[z]; x = sq->dsq[i]; s = tr->st[z]; switch (s) { case p7T_M: ad->model[z-z1] = om->consensus[k]; if (x == esl_abc_DigitizeSymbol(om->abc, om->consensus[k])) ad->mline[z-z1] = ad->model[z-z1]; else if (p7_oprofile_FGetEmission(om, k, x) > 1.0) ad->mline[z-z1] = '+'; /* >1 not >0; om has odds ratios, not scores */ else ad->mline[z-z1] = ' '; ad->aseq [z-z1] = toupper(Alphabet[x]); break; case p7T_I: ad->model [z-z1] = '.'; ad->mline [z-z1] = ' '; ad->aseq [z-z1] = tolower(Alphabet[x]); break; case p7T_D: ad->model [z-z1] = om->consensus[k]; ad->mline [z-z1] = ' '; ad->aseq [z-z1] = '-'; break; default: ESL_XEXCEPTION(eslEINVAL, "invalid state in trace: not M,D,I"); } } ad->model [z2-z1+1] = '\0'; ad->mline [z2-z1+1] = '\0'; ad->aseq [z2-z1+1] = '\0'; ad->N = z2-z1+1; return ad; ERROR: p7_alidisplay_Destroy(ad); return NULL; } /* Function: p7_alidisplay_Clone() * Synopsis: Make a duplicate of an ALIDISPLAY. * * Purpose: Create a duplicate of alignment display . * Return a pointer to the duplicate. Caller * is responsible for freeing the new object. * * Returns: pointer to new * * Throws: on allocation failure. */ P7_ALIDISPLAY * p7_alidisplay_Clone(const P7_ALIDISPLAY *ad) { P7_ALIDISPLAY *ad2 = NULL; int status; ESL_ALLOC(ad2, sizeof(P7_ALIDISPLAY)); ad2->rfline = ad2->mmline = ad2->csline = ad2->model = ad2->mline = ad2->aseq = ad2->ppline = NULL; ad2->hmmname = ad2->hmmacc = ad2->hmmdesc = NULL; ad2->sqname = ad2->sqacc = ad2->sqdesc = NULL; ad2->mem = NULL; ad2->memsize = 0; if (ad->memsize) /* serialized */ { ESL_ALLOC(ad2->mem, sizeof(char) * ad->memsize); ad2->memsize = ad->memsize; memcpy(ad2->mem, ad->mem, ad->memsize); ad2->rfline = (ad->rfline ? ad2->mem + (ad->rfline - ad->mem) : NULL ); ad2->mmline = (ad->mmline ? ad2->mem + (ad->mmline - ad->mem) : NULL ); ad2->csline = (ad->csline ? ad2->mem + (ad->csline - ad->mem) : NULL ); ad2->model = ad2->mem + (ad->model - ad->mem); ad2->mline = ad2->mem + (ad->mline - ad->mem); ad2->aseq = ad2->mem + (ad->aseq - ad->mem); ad2->ppline = (ad->ppline ? ad2->mem + (ad->ppline - ad->mem) : NULL ); ad2->N = ad->N; ad2->hmmname = ad2->mem + (ad->hmmname - ad->mem); ad2->hmmacc = ad2->mem + (ad->hmmacc - ad->mem); ad2->hmmdesc = ad2->mem + (ad->hmmdesc - ad->mem); ad2->hmmfrom = ad->hmmfrom; ad2->hmmto = ad->hmmto; ad2->M = ad->M; ad2->sqname = ad2->mem + (ad->sqname - ad->mem); ad2->sqacc = ad2->mem + (ad->sqacc - ad->mem); ad2->sqdesc = ad2->mem + (ad->sqdesc - ad->mem); ad2->sqfrom = ad->sqfrom; ad2->sqto = ad->sqto; ad2->L = ad->L; } else /* deserialized */ { if ( esl_strdup(ad->rfline, -1, &(ad2->rfline)) != eslOK) goto ERROR; if ( esl_strdup(ad->mmline, -1, &(ad2->mmline)) != eslOK) goto ERROR; if ( esl_strdup(ad->csline, -1, &(ad2->csline)) != eslOK) goto ERROR; if ( esl_strdup(ad->model, -1, &(ad2->model)) != eslOK) goto ERROR; if ( esl_strdup(ad->mline, -1, &(ad2->mline)) != eslOK) goto ERROR; if ( esl_strdup(ad->aseq, -1, &(ad2->aseq)) != eslOK) goto ERROR; if ( esl_strdup(ad->ppline, -1, &(ad2->ppline)) != eslOK) goto ERROR; ad2->N = ad->N; if ( esl_strdup(ad->hmmname, -1, &(ad2->hmmname)) != eslOK) goto ERROR; if ( esl_strdup(ad->hmmacc, -1, &(ad2->hmmacc)) != eslOK) goto ERROR; if ( esl_strdup(ad->hmmdesc, -1, &(ad2->hmmdesc)) != eslOK) goto ERROR; ad2->hmmfrom = ad->hmmfrom; ad2->hmmto = ad->hmmto; ad2->M = ad->M; if ( esl_strdup(ad->sqname, -1, &(ad2->sqname)) != eslOK) goto ERROR; if ( esl_strdup(ad->sqacc, -1, &(ad2->sqacc)) != eslOK) goto ERROR; if ( esl_strdup(ad->sqdesc, -1, &(ad2->sqdesc)) != eslOK) goto ERROR; ad2->sqfrom = ad->sqfrom; ad2->sqto = ad->sqto; ad2->L = ad->L; } return ad2; ERROR: if (ad2) p7_alidisplay_Destroy(ad2); return NULL; } /* Function: p7_alidisplay_Sizeof() * Synopsis: Returns the total size of a P7_ALIDISPLAY, in bytes. * * Purpose: Return the total size of , in bytes. * * Note that memsize = p7_alidisplay_Sizeof(ad) - sizeof(P7_ALIDISPLAY)>, * for a serialized object, because memsize> only refers to the sum * of the variable-length allocated fields. * * Args: ad - P7_ALIDISPLAY to get the size of * * Returns: size of in bytes */ size_t p7_alidisplay_Sizeof(const P7_ALIDISPLAY *ad) { size_t n = sizeof(P7_ALIDISPLAY); if (ad->rfline) n += ad->N+1; /* +1 for \0 */ if (ad->mmline) n += ad->N+1; if (ad->csline) n += ad->N+1; if (ad->ppline) n += ad->N+1; n += 3 * (ad->N+1); /* model, mline, aseq */ n += 1 + strlen(ad->hmmname); n += 1 + strlen(ad->hmmacc); /* optional acc, desc fields: when not present, just "" ("\0") */ n += 1 + strlen(ad->hmmdesc); n += 1 + strlen(ad->sqname); n += 1 + strlen(ad->sqacc); n += 1 + strlen(ad->sqdesc); return n; } /* Function: p7_alidisplay_Serialize() * Synopsis: Serialize a P7_ALIDISPLAY, using internal memory. * * Purpose: Serialize the , internally converting * all its variable-length allocations to a single * contiguous memory allocation. Serialization aids * interprocess communication. * * If is already serialized, do nothing. * * Args: ad - alidisplay to serialize * * Returns: on success. * * Throws: on allocation failure, and is restored to * its original (deserialized) state. */ int p7_alidisplay_Serialize(P7_ALIDISPLAY *ad) { int pos; int n; int status; if (ad->mem) return eslOK; /* already serialized, so no-op */ ad->memsize = p7_alidisplay_Sizeof(ad) - sizeof(P7_ALIDISPLAY); ESL_ALLOC(ad->mem, ad->memsize); /* allow no exceptions past this point, because API guarantees restore of original state upon error */ pos = 0; if (ad->rfline) { memcpy(ad->mem+pos, ad->rfline, ad->N+1); free(ad->rfline); ad->rfline = ad->mem+pos; pos += ad->N+1; } if (ad->mmline) { memcpy(ad->mem+pos, ad->mmline, ad->N+1); free(ad->mmline); ad->mmline = ad->mem+pos; pos += ad->N+1; } if (ad->csline) { memcpy(ad->mem+pos, ad->csline, ad->N+1); free(ad->csline); ad->csline = ad->mem+pos; pos += ad->N+1; } memcpy(ad->mem+pos, ad->model, ad->N+1); free(ad->model); ad->model = ad->mem+pos; pos += ad->N+1; memcpy(ad->mem+pos, ad->mline, ad->N+1); free(ad->mline); ad->mline = ad->mem+pos; pos += ad->N+1; memcpy(ad->mem+pos, ad->aseq, ad->N+1); free(ad->aseq); ad->aseq = ad->mem+pos; pos += ad->N+1; if (ad->ppline) { memcpy(ad->mem+pos, ad->ppline, ad->N+1); free(ad->ppline); ad->ppline = ad->mem+pos; pos += ad->N+1; } n = 1 + strlen(ad->hmmname); memcpy(ad->mem + pos, ad->hmmname, n); free(ad->hmmname); ad->hmmname = ad->mem+pos; pos += n; n = 1 + strlen(ad->hmmacc); memcpy(ad->mem + pos, ad->hmmacc, n); free(ad->hmmacc); ad->hmmacc = ad->mem+pos; pos += n; n = 1 + strlen(ad->hmmdesc); memcpy(ad->mem + pos, ad->hmmdesc, n); free(ad->hmmdesc); ad->hmmdesc = ad->mem+pos; pos += n; n = 1 + strlen(ad->sqname); memcpy(ad->mem + pos, ad->sqname, n); free(ad->sqname); ad->sqname = ad->mem+pos; pos += n; n = 1 + strlen(ad->sqacc); memcpy(ad->mem + pos, ad->sqacc, n); free(ad->sqacc); ad->sqacc = ad->mem+pos; pos += n; n = 1 + strlen(ad->sqdesc); memcpy(ad->mem + pos, ad->sqdesc, n); free(ad->sqdesc); ad->sqdesc = ad->mem+pos; pos += n; return eslOK; ERROR: if (ad->mem) free(ad->mem); ad->mem = NULL; return status; } /* Function: p7_alidisplay_Deserialize() * Synopsis: Deserialize a P7_ALIDISPLAY, using internal memory. * * Purpose: Deserialize the , converting its internal * allocations from a single contiguous memory chunk to individual * variable-length allocations. Deserialization facilitates * reallocation/editing of individual elements of the display. * * If is already deserialized, do nothing. * * Args: ad - alidisplay to serialize * * Returns: on success * * Throws: on allocation failure, and is restored to * its original (serialized) state. */ int p7_alidisplay_Deserialize(P7_ALIDISPLAY *ad) { int pos; int n; int status; if (ad->mem == NULL) return eslOK; /* already deserialized, so no-op */ pos = 0; if (ad->rfline) { ESL_ALLOC(ad->rfline, sizeof(char) * ad->N+1); memcpy(ad->rfline, ad->mem+pos, ad->N+1); pos += ad->N+1; } if (ad->mmline) { ESL_ALLOC(ad->mmline, sizeof(char) * ad->N+1); memcpy(ad->mmline, ad->mem+pos, ad->N+1); pos += ad->N+1; } if (ad->csline) { ESL_ALLOC(ad->csline, sizeof(char) * ad->N+1); memcpy(ad->csline, ad->mem+pos, ad->N+1); pos += ad->N+1; } ESL_ALLOC(ad->model, sizeof(char) * ad->N+1); memcpy(ad->model, ad->mem+pos, ad->N+1); pos += ad->N+1; ESL_ALLOC(ad->mline, sizeof(char) * ad->N+1); memcpy(ad->mline, ad->mem+pos, ad->N+1); pos += ad->N+1; ESL_ALLOC(ad->aseq, sizeof(char) * ad->N+1); memcpy(ad->aseq, ad->mem+pos, ad->N+1); pos += ad->N+1; if (ad->ppline) { ESL_ALLOC(ad->ppline, sizeof(char) * ad->N+1); memcpy(ad->ppline, ad->mem+pos, ad->N+1); pos += ad->N+1; } n = 1 + strlen(ad->mem+pos); ESL_ALLOC(ad->hmmname, sizeof(char) * n); memcpy(ad->hmmname, ad->mem+pos, n); pos += n; n = 1 + strlen(ad->mem+pos); ESL_ALLOC(ad->hmmacc, sizeof(char) * n); memcpy(ad->hmmacc, ad->mem+pos, n); pos += n; n = 1 + strlen(ad->mem+pos); ESL_ALLOC(ad->hmmdesc, sizeof(char) * n); memcpy(ad->hmmdesc, ad->mem+pos, n); pos += n; n = 1 + strlen(ad->mem+pos); ESL_ALLOC(ad->sqname, sizeof(char) * n); memcpy(ad->sqname, ad->mem+pos, n); pos += n; n = 1 + strlen(ad->mem+pos); ESL_ALLOC(ad->sqacc, sizeof(char) * n); memcpy(ad->sqacc, ad->mem+pos, n); pos += n; n = 1 + strlen(ad->mem+pos); ESL_ALLOC(ad->sqdesc, sizeof(char) * n); memcpy(ad->sqdesc, ad->mem+pos, n); pos += n; free(ad->mem); ad->mem = NULL; ad->memsize = 0; return eslOK; ERROR: /* restore serialized state, if an alloc fails. tedious, if not nontrivial. */ /* the pointers are non-NULL whether we just allocated them or if they're pointing into mem, so we have to check against mem+pos */ pos = 0; if (ad->rfline) { if (ad->rfline != ad->mem+pos) { free(ad->rfline); ad->rfline = ad->mem+pos; } pos += ad->N+1; } if (ad->mmline) { if (ad->mmline != ad->mem+pos) { free(ad->mmline); ad->mmline = ad->mem+pos; } pos += ad->N+1; } if (ad->csline) { if (ad->csline != ad->mem+pos) { free(ad->csline); ad->csline = ad->mem+pos; } pos += ad->N+1; } if (ad->model != ad->mem+pos) { free(ad->model); ad->model = ad->mem+pos; } pos += ad->N+1; if (ad->mline != ad->mem+pos) { free(ad->mline); ad->mline = ad->mem+pos; } pos += ad->N+1; if (ad->aseq != ad->mem+pos) { free(ad->aseq); ad->aseq = ad->mem+pos; } pos += ad->N+1; if (ad->ppline) { if (ad->ppline != ad->mem+pos) { free(ad->ppline); ad->ppline = ad->mem+pos; } pos += ad->N+1; } n = 1 + strlen(ad->hmmname); if (ad->hmmname != ad->mem+pos) { free(ad->hmmname); ad->hmmname = ad->mem+pos; } pos += n; n = 1 + strlen(ad->hmmacc); if (ad->hmmacc != ad->mem+pos) { free(ad->hmmacc); ad->hmmacc = ad->mem+pos; } pos += n; n = 1 + strlen(ad->hmmname); if (ad->hmmdesc != ad->mem+pos) { free(ad->hmmdesc); ad->hmmdesc = ad->mem+pos; } pos += n; n = 1 + strlen(ad->sqname); if (ad->sqname != ad->mem+pos) { free(ad->sqname); ad->sqname = ad->mem+pos; } pos += n; n = 1 + strlen(ad->sqacc); if (ad->sqacc != ad->mem+pos) { free(ad->sqacc); ad->sqacc = ad->mem+pos; } pos += n; n = 1 + strlen(ad->sqname); if (ad->sqdesc != ad->mem+pos) { free(ad->sqdesc); ad->sqdesc = ad->mem+pos; } pos += n; return status; } /* Function: p7_alidisplay_Destroy() * Synopsis: Frees a */ void p7_alidisplay_Destroy(P7_ALIDISPLAY *ad) { if (ad == NULL) return; if (ad->mem) { /* serialized form */ free(ad->mem); } else { /* deserialized form */ if (ad->rfline) free(ad->rfline); if (ad->mmline) free(ad->mmline); if (ad->csline) free(ad->csline); if (ad->model) free(ad->model); if (ad->mline) free(ad->mline); if (ad->aseq) free(ad->aseq); if (ad->ppline) free(ad->ppline); if (ad->hmmname) free(ad->hmmname); if (ad->hmmacc) free(ad->hmmacc); if (ad->hmmdesc) free(ad->hmmdesc); if (ad->sqname) free(ad->sqname); if (ad->sqacc) free(ad->sqacc); if (ad->sqdesc) free(ad->sqdesc); } free(ad); } /*---------------- end, alidisplay object -----------------------*/ /***************************************************************** * 2. The P7_ALIDISPLAY API *****************************************************************/ static int integer_textwidth(long n) { int w = (n < 0)? 1 : 0; while (n != 0) { n /= 10; w++; } return w; } /* Function: p7_alidisplay_EncodePostProb() * Synopsis: Convert a posterior probability to a char code. * * Purpose: Convert the posterior probability

to * a character code suitable for Stockholm format * <#=GC PP_cons> and <#=GR seqname PP> annotation * lines. HMMER uses the same codes in alignment * output. * * Characters <0-9*> are used; $0.0 \leq p < 0.05$ * is coded as 0, $0.05 \leq p < 0.15$ is coded as * 1, ... and so on ..., $0.85 \leq p < 0.95$ is * coded as 9, and $0.95 \leq p \leq 1.0$ is coded * as '*'. * * Returns: the encoded character. */ char p7_alidisplay_EncodePostProb(float p) { return (p + 0.05 >= 1.0) ? '*' : (char) ((p + 0.05) * 10.0) + '0'; } /* Function: p7_alidisplay_DecodePostProb() * Synopsis: Convert a char code post prob to an approx float. * * Purpose: Convert posterior probability code , which * is [0-9*], to an approximate floating point probability. * * The result is crude, because has already discretized * with loss of precision. We require that * , * and that decodes to a nonzero probability just to * avoid any possible absorbing-zero artifacts. * * Returns: the decoded real-valued approximate probability. */ float p7_alidisplay_DecodePostProb(char pc) { if (pc == '0') return 0.01; else if (pc == '*') return 1.0; else if (pc == '.') return 0.0; else return ((float) (pc - '0') / 10.); } /* Function: p7_alidisplay_Print() * Synopsis: Human readable output of * * Purpose: Prints alignment to stream . * * Put at least alignment characters per * line; try to make lines no longer than * characters, including name, coords, and spacing. The * width of lines may exceed , if that's what it * takes to put a name, coords, and * characters of alignment on a line. * * As a special case, if is negative or 0, then * alignments are formatted in a single block of unlimited * line length. * * Returns: on success. * * Throws: on write error, such as filling the disk. */ int p7_alidisplay_Print(FILE *fp, P7_ALIDISPLAY *ad, int min_aliwidth, int linewidth, int show_accessions) { char *buf = NULL; char *show_hmmname = NULL; char *show_seqname = NULL; int namewidth, coordwidth, aliwidth; int pos; int status; int ni, nk; int z; long i1,i2; int k1,k2; /* implement the --acc option for preferring accessions over names in output */ show_hmmname = (show_accessions && ad->hmmacc[0] != '\0') ? ad->hmmacc : ad->hmmname; show_seqname = (show_accessions && ad->sqacc[0] != '\0') ? ad->sqacc : ad->sqname; /* dynamically size the output lines */ namewidth = ESL_MAX(strlen(show_hmmname), strlen(show_seqname)); coordwidth = ESL_MAX(ESL_MAX(integer_textwidth(ad->hmmfrom), integer_textwidth(ad->hmmto)), ESL_MAX(integer_textwidth(ad->sqfrom), integer_textwidth(ad->sqto))); aliwidth = (linewidth > 0) ? linewidth - namewidth - 2*coordwidth - 5 : ad->N; if (aliwidth < ad->N && aliwidth < min_aliwidth) aliwidth = min_aliwidth; /* at least, regardless of some silly linewidth setting */ ESL_ALLOC(buf, sizeof(char) * (aliwidth+1)); buf[aliwidth] = 0; /* Break the alignment into multiple blocks of width aliwidth for printing */ i1 = ad->sqfrom; k1 = ad->hmmfrom; for (pos = 0; pos < ad->N; pos += aliwidth) { if (pos > 0) { if (fprintf(fp, "\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "alignment display write failed"); } /* blank line betweeen blocks */ ni = nk = 0; for (z = pos; z < pos + aliwidth && z < ad->N; z++) { if (ad->model[z] != '.') nk++; /* k advances except on insert states */ if (ad->aseq[z] != '-') ni++; /* i advances except on delete states */ } k2 = k1+nk-1; if (ad->sqfrom < ad->sqto) i2 = i1+ni-1; else i2 = i1-ni+1; // revcomp hit for DNA if (ad->csline != NULL) { strncpy(buf, ad->csline+pos, aliwidth); if (fprintf(fp, " %*s %s CS\n", namewidth+coordwidth+1, "", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "alignment display write failed"); } if (ad->rfline != NULL) { strncpy(buf, ad->rfline+pos, aliwidth); if (fprintf(fp, " %*s %s RF\n", namewidth+coordwidth+1, "", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "alignment display write failed"); } if (ad->mmline != NULL) { strncpy(buf, ad->mmline+pos, aliwidth); if (fprintf(fp, " %*s %s MM\n", namewidth+coordwidth+1, "", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "alignment display write failed"); } strncpy(buf, ad->model+pos, aliwidth); if (fprintf(fp, " %*s %*d %s %-*d\n", namewidth, show_hmmname, coordwidth, k1, buf, coordwidth, k2) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "alignment display write failed"); strncpy(buf, ad->mline+pos, aliwidth); if (fprintf(fp, " %*s %s\n", namewidth+coordwidth+1, " ", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "alignment display write failed"); if (ni > 0) { strncpy(buf, ad->aseq+pos, aliwidth); if (fprintf(fp, " %*s %*ld %s %-*ld\n", namewidth, show_seqname, coordwidth, i1, buf, coordwidth, i2) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "alignment display write failed"); } else { strncpy(buf, ad->aseq+pos, aliwidth); if (fprintf(fp, " %*s %*s %s %*s\n", namewidth, show_seqname, coordwidth, "-", buf, coordwidth, "-") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "alignment display write failed"); } if (ad->ppline != NULL) { strncpy(buf, ad->ppline+pos, aliwidth); if (fprintf(fp, " %*s %s PP\n", namewidth+coordwidth+1, "", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "alignment display write failed"); } k1 += nk; if (ad->sqfrom < ad->sqto) i1 += ni; else i1 -= ni; // revcomp hit for DNA } fflush(fp); free(buf); return eslOK; ERROR: if (buf) free(buf); return status; } /* Function: p7_alidisplay_Backconvert() * Synopsis: Convert an alidisplay to a faux trace and subsequence. * * Purpose: Convert alignment display object to a faux subsequence * and faux subsequence trace, returning them in and * . * * The subsequence <*ret_sq> is digital; ascii residues in * are digitized using digital alphabet . * * The subsequence and trace are suitable for passing as * array elements to . This is the * main purpose of backconversion. Results of a profile * search are stored in a hit list as a processed * , not as a and , to * reduce space and to reduce communication overhead in * parallelized search implementations. After reduction * to a final hit list, a master may want to construct a * multiple alignment of all the significant hits. * * Returns: on success. * * Throws: on allocation failures. on unexpected internal * data corruption. On any exception, <*ret_sq> and <*ret_tr> are * . * * Xref: SRE:J4/29. */ int p7_alidisplay_Backconvert(const P7_ALIDISPLAY *ad, const ESL_ALPHABET *abc, ESL_SQ **ret_sq, P7_TRACE **ret_tr) { ESL_SQ *sq = NULL; /* RETURN: faux subsequence */ P7_TRACE *tr = NULL; /* RETURN: faux trace */ int subL = 0; /* subsequence length in the */ int a, i, k; /* coords for , dsq>, model */ char cur_st, nxt_st; /* state type: MDI */ int status; /* Make a first pass over just to calculate subseq length */ for (a = 0; a < ad->N; a++) if (! esl_abc_CIsGap(abc, ad->aseq[a])) subL++; /* Allocations */ if ((sq = esl_sq_CreateDigital(abc)) == NULL) { status = eslEMEM; goto ERROR; } if ((status = esl_sq_GrowTo(sq, subL)) != eslOK) goto ERROR; if ((tr = (ad->ppline == NULL) ? p7_trace_Create() : p7_trace_CreateWithPP()) == NULL) { status = eslEMEM; goto ERROR; } if ((status = p7_trace_GrowTo(tr, subL+6)) != eslOK) goto ERROR; /* +6 is for SNB/ECT */ /* Construction of dsq, trace */ sq->dsq[0] = eslDSQ_SENTINEL; if ((status = ((ad->ppline == NULL) ? p7_trace_Append(tr, p7T_S, 0, 0) : p7_trace_AppendWithPP(tr, p7T_S, 0, 0, 0.0))) != eslOK) goto ERROR; if ((status = ((ad->ppline == NULL) ? p7_trace_Append(tr, p7T_N, 0, 0) : p7_trace_AppendWithPP(tr, p7T_N, 0, 0, 0.0))) != eslOK) goto ERROR; if ((status = ((ad->ppline == NULL) ? p7_trace_Append(tr, p7T_B, 0, 0) : p7_trace_AppendWithPP(tr, p7T_B, 0, 0, 0.0))) != eslOK) goto ERROR; k = ad->hmmfrom; i = 1; for (a = 0; a < ad->N; a++) { if (esl_abc_CIsResidue(abc, ad->model[a])) { cur_st = (esl_abc_CIsResidue(abc, ad->aseq[a]) ? p7T_M : p7T_D); } else cur_st = p7T_I; if (esl_abc_CIsResidue(abc, ad->model[a+1])) { nxt_st = (esl_abc_CIsResidue(abc, ad->aseq[a+1]) ? p7T_M : p7T_D); } else nxt_st = p7T_I; /* ad->N pos is \0, nxt_st becomes p7T_I on last step, that's fine. */ if ((status = ((ad->ppline == NULL) ? p7_trace_Append(tr, cur_st, k, i) : p7_trace_AppendWithPP(tr, cur_st, k, i, p7_alidisplay_DecodePostProb(ad->ppline[a])))) != eslOK) goto ERROR; switch (cur_st) { case p7T_M: sq->dsq[i] = esl_abc_DigitizeSymbol(abc, ad->aseq[a]); i++; break; case p7T_I: sq->dsq[i] = esl_abc_DigitizeSymbol(abc, ad->aseq[a]); i++; break; case p7T_D: break; } switch (nxt_st) { case p7T_M: k++; break; case p7T_I: break; case p7T_D: k++; break; case p7T_E: break; } } if ((status = ((ad->ppline == NULL) ? p7_trace_Append(tr, p7T_E, 0, 0) : p7_trace_AppendWithPP(tr, p7T_E, 0, 0, 0.0))) != eslOK) goto ERROR; if ((status = ((ad->ppline == NULL) ? p7_trace_Append(tr, p7T_C, 0, 0) : p7_trace_AppendWithPP(tr, p7T_C, 0, 0, 0.0))) != eslOK) goto ERROR; if ((status = ((ad->ppline == NULL) ? p7_trace_Append(tr, p7T_T, 0, 0) : p7_trace_AppendWithPP(tr, p7T_T, 0, 0, 0.0))) != eslOK) goto ERROR; sq->dsq[i] = eslDSQ_SENTINEL; /* some sanity checks */ if (tr->N != ad->N + 6) ESL_XEXCEPTION(eslECORRUPT, "backconverted trace ended up with unexpected size (%s/%s)", ad->sqname, ad->hmmname); if (k != ad->hmmto) ESL_XEXCEPTION(eslECORRUPT, "backconverted trace didn't end at expected place on model (%s/%s)", ad->sqname, ad->hmmname); if (i != subL+1) ESL_XEXCEPTION(eslECORRUPT, "backconverted subseq didn't end at expected length (%s/%s)", ad->sqname, ad->hmmname); /* Set up annotation as a subseq of a source sequence */ if ((status = esl_sq_FormatName(sq, "%s/%ld-%ld", ad->sqname, ad->sqfrom, ad->sqto)) != eslOK) goto ERROR; if ((status = esl_sq_FormatDesc(sq, "[subseq from] %s", ad->sqdesc[0] != '\0' ? ad->sqdesc : ad->sqname)) != eslOK) goto ERROR; if ((status = esl_sq_SetSource (sq, ad->sqname)) != eslOK) goto ERROR; if (ad->sqacc[0] != '\0') { if ((status = esl_sq_SetAccession (sq, ad->sqacc)) != eslOK) goto ERROR; } sq->n = subL; sq->start = ad->sqfrom; sq->end = ad->sqto; sq->C = 0; sq->W = subL; sq->L = ad->L; tr->M = ad->M; tr->L = ad->L; *ret_sq = sq; *ret_tr = tr; return eslOK; ERROR: if (sq != NULL) esl_sq_Destroy(sq); if (tr != NULL) p7_trace_Destroy(tr); *ret_sq = NULL; *ret_tr = NULL; return status; } /*------------------- end, alidisplay API -----------------------*/ /***************************************************************** * 3. Debugging/dev code *****************************************************************/ /* Function: p7_alidisplay_Dump() * Synopsis: Print contents of P7_ALIDISPLAY for inspection. * * Purpose: Print contents of the to * stream for inspection. Includes all elements * of the structure, whether the object is allocated * in serialized or deserialized form, and the total * size of the object in bytes. * * Returns: */ int p7_alidisplay_Dump(FILE *fp, const P7_ALIDISPLAY *ad) { fprintf(fp, "P7_ALIDISPLAY dump\n"); fprintf(fp, "------------------\n"); fprintf(fp, "rfline = %s\n", ad->rfline ? ad->rfline : "[none]"); fprintf(fp, "mmline = %s\n", ad->mmline ? ad->mmline : "[none]"); fprintf(fp, "csline = %s\n", ad->csline ? ad->csline : "[none]"); fprintf(fp, "model = %s\n", ad->model); fprintf(fp, "mline = %s\n", ad->mline); fprintf(fp, "aseq = %s\n", ad->aseq); fprintf(fp, "N = %d\n", ad->N); fprintf(fp, "\n"); fprintf(fp, "hmmname = %s\n", ad->hmmname); fprintf(fp, "hmmacc = %s\n", ad->hmmacc[0] == '\0' ? "[none]" : ad->hmmacc); fprintf(fp, "hmmdesc = %s\n", ad->hmmdesc[0] == '\0' ? "[none]" : ad->hmmdesc); fprintf(fp, "hmmfrom = %d\n", ad->hmmfrom); fprintf(fp, "hmmto = %d\n", ad->hmmto); fprintf(fp, "M = %d\n", ad->M); fprintf(fp, "\n"); fprintf(fp, "sqname = %s\n", ad->sqname); fprintf(fp, "sqacc = %s\n", ad->sqacc[0] == '\0' ? "[none]" : ad->sqacc); fprintf(fp, "sqdesc = %s\n", ad->sqdesc[0] == '\0' ? "[none]" : ad->sqdesc); fprintf(fp, "sqfrom = %ld\n", ad->sqfrom); fprintf(fp, "sqto = %ld\n", ad->sqto); fprintf(fp, "L = %ld\n", ad->L); fprintf(fp, "\n"); fprintf(fp, "size = %d bytes\n", (int) p7_alidisplay_Sizeof(ad)); fprintf(fp, "%s\n", ad->mem ? "serialized" : "not serialized"); return eslOK; } /* Function: p7_alidisplay_Compare() * Synopsis: Compare two objects for equality * * Purpose: Compare alignment displays and for * equality. Return if they have identical * contents; if not. * * Only contents matter, not serialization status; * a serialized and deserialized version of the same * alidisplay will compare identical. */ int p7_alidisplay_Compare(const P7_ALIDISPLAY *ad1, const P7_ALIDISPLAY *ad2) { if (ad1->mem && ad2->mem) /* both objects serialized */ { if (ad1->memsize != ad2->memsize) return eslFAIL; if (memcmp(ad1->mem, ad2->mem, ad1->memsize) != 0) return eslFAIL; } if (esl_strcmp(ad1->rfline, ad2->rfline) != eslOK) return eslFAIL; if (esl_strcmp(ad1->mmline, ad2->mmline) != eslOK) return eslFAIL; if (esl_strcmp(ad1->csline, ad2->csline) != eslOK) return eslFAIL; if (esl_strcmp(ad1->model, ad2->model) != eslOK) return eslFAIL; if (esl_strcmp(ad1->mline, ad2->mline) != eslOK) return eslFAIL; if (esl_strcmp(ad1->aseq, ad2->aseq) != eslOK) return eslFAIL; if (esl_strcmp(ad1->ppline, ad2->ppline) != eslOK) return eslFAIL; if (ad1->N != ad2->N) return eslFAIL; if (esl_strcmp(ad1->hmmname, ad2->hmmname) != eslOK) return eslFAIL; if (esl_strcmp(ad1->hmmacc, ad2->hmmacc) != eslOK) return eslFAIL; if (esl_strcmp(ad1->hmmdesc, ad2->hmmdesc) != eslOK) return eslFAIL; if (ad1->hmmfrom != ad2->hmmfrom) return eslFAIL; if (ad1->hmmto != ad2->hmmto) return eslFAIL; if (ad1->M != ad2->M) return eslFAIL; if (esl_strcmp(ad1->sqname, ad2->sqname) != eslOK) return eslFAIL; if (esl_strcmp(ad1->sqacc, ad2->sqacc) != eslOK) return eslFAIL; if (esl_strcmp(ad1->sqdesc, ad2->sqdesc) != eslOK) return eslFAIL; if (ad1->sqfrom != ad2->sqfrom) return eslFAIL; if (ad1->sqto != ad2->sqto) return eslFAIL; if (ad1->M != ad2->M) return eslFAIL; return eslOK; } /*-------------- end, debugging/dev code ------------------------*/ /***************************************************************** * 4. Benchmark driver. *****************************************************************/ #ifdef p7ALIDISPLAY_BENCHMARK /* gcc -o benchmark-alidisplay -std=gnu99 -g -Wall -O2 -I. -L. -I../easel -L../easel -Dp7ALIDISPLAY_BENCHMARK p7_alidisplay.c -lhmmer -leasel -lm ./benchmark-alidisplay runs benchmark ./benchmark-alidisplay -b gets baseline time to subtract: just random trace generation */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-b", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "baseline timing", 0 }, { "-p", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "include fake PP line, just to see how it looks", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of traces to generate", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for P7_ALIDISPLAY"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); int N = esl_opt_GetInteger(go, "-N"); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_TRACE *tr = NULL; ESL_SQ *sq = NULL; P7_ALIDISPLAY *ad = NULL; int i,z; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, 0); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 0, p7_UNIGLOCAL); /* that sets N,C,J to generate nothing */ om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); if (esl_opt_GetBoolean(go, "-p")) tr = p7_trace_CreateWithPP(); else tr = p7_trace_Create(); sq = esl_sq_CreateDigital(abc); esl_stopwatch_Start(w); for (i = 0; i < N; i++) { p7_ProfileEmit(r, hmm, gm, bg, sq, tr); esl_sq_SetName(sq, "random"); if (! esl_opt_GetBoolean(go, "-b")) { if (esl_opt_GetBoolean(go, "-p")) for (z = 0; z < tr->N; z++) if (tr->i[z] > 0) tr->pp[z] = esl_random(r); ad = p7_alidisplay_Create(tr, 0, om, sq, NULL); p7_alidisplay_Print(stdout, ad, 40, 80, FALSE); p7_alidisplay_Destroy(ad); } p7_trace_Reuse(tr); esl_sq_Reuse(sq); } esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); esl_sq_Destroy(sq); p7_trace_Destroy(tr); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*p7ALIDISPLAY_BENCHMARK*/ /*--------------------- end, benchmark driver -------------------*/ /**************************************************************** * 5. Unit tests. ****************************************************************/ #ifdef p7ALIDISPLAY_TESTDRIVE /* create_faux_alidisplay() * * Create a fake P7_ALIDISPLAY of length for testing purposes, * randomizing it to try to exercise many possible combos of * optional annotation, etc. Return it in ; caller frees. */ static int create_faux_alidisplay(ESL_RANDOMNESS *rng, int N, P7_ALIDISPLAY **ret_ad) { P7_ALIDISPLAY *ad = NULL; char *guidestring = NULL; /* string [0..N-1] composed of MDI */ int nM = 0; int nD = 0; int nI = 0; enum p7t_statetype_e last_st; int pos; int status; ESL_ALLOC(guidestring, sizeof(char) * (N+1)); guidestring[0] = 'M'; nM++; last_st = p7T_M; /* local alignments must start with M */ for (pos = 1; pos < N-1; pos++) { switch (last_st) { case p7T_M: switch (esl_rnd_Roll(rng, 3)) { case 0: guidestring[pos] = 'M'; nM++; last_st = p7T_M; break; case 1: guidestring[pos] = 'D'; nD++; last_st = p7T_D; break; case 2: guidestring[pos] = 'I'; nI++; last_st = p7T_I; break; } break; case p7T_I: switch (esl_rnd_Roll(rng, 2)) { case 0: guidestring[pos] = 'M'; nM++; last_st = p7T_M; break; case 1: guidestring[pos] = 'I'; nI++; last_st = p7T_I; break; } break; case p7T_D: switch (esl_rnd_Roll(rng, 2)) { case 0: guidestring[pos] = 'M'; nM++; last_st = p7T_M; break; case 1: guidestring[pos] = 'D'; nD++; last_st = p7T_D; break; } break; default: break; } } /* local alignments can end on M or D. (optimal local alignments can only end on M) */ switch (last_st) { case p7T_I: guidestring[N-1] = 'M'; nM++; break; default: switch (esl_rnd_Roll(rng, 2)) { case 0: guidestring[N-1] = 'M'; nM++; break; case 1: guidestring[N-1] = 'D'; nD++; break; } break; } guidestring[N] = '\0'; ESL_ALLOC(ad, sizeof(P7_ALIDISPLAY)); ad->rfline = ad->mmline = ad->csline = ad->model = ad->mline = ad->aseq = ad->ppline = NULL; ad->hmmname = ad->hmmacc = ad->hmmdesc = NULL; ad->sqname = ad->sqacc = ad->sqdesc = NULL; ad->mem = NULL; ad->memsize = 0; /* Optional lines are added w/ 50% chance */ if (esl_rnd_Roll(rng, 2) == 0) ESL_ALLOC(ad->rfline, sizeof(char) * (N+1)); if (esl_rnd_Roll(rng, 2) == 0) ESL_ALLOC(ad->mmline, sizeof(char) * (N+1)); if (esl_rnd_Roll(rng, 2) == 0) ESL_ALLOC(ad->csline, sizeof(char) * (N+1)); if (esl_rnd_Roll(rng, 2) == 0) ESL_ALLOC(ad->ppline, sizeof(char) * (N+1)); ESL_ALLOC(ad->model, sizeof(char) * (N+1)); ESL_ALLOC(ad->mline, sizeof(char) * (N+1)); ESL_ALLOC(ad->aseq, sizeof(char) * (N+1)); ad->N = N; esl_strdup("my_hmm", -1, &(ad->hmmname)); if (esl_rnd_Roll(rng, 2) == 0) esl_strdup("PF000007", -1, &(ad->hmmacc)); else esl_strdup("", -1, &(ad->hmmacc)); if (esl_rnd_Roll(rng, 2) == 0) esl_strdup("(hmm description)", -1, &(ad->hmmdesc)); else esl_strdup("", -1, &(ad->hmmdesc)); esl_strdup("my_seq", -1, &(ad->sqname)); if (esl_rnd_Roll(rng, 2) == 0) esl_strdup("ABC000001.42", -1, &(ad->sqacc)); else esl_strdup("", -1, &(ad->sqacc)); if (esl_rnd_Roll(rng, 2) == 0) esl_strdup("(sequence description)", -1, &(ad->sqdesc)); else esl_strdup("", -1, &(ad->sqdesc)); /* model, seq coords must look valid. */ ad->hmmfrom = 100; ad->hmmto = ad->hmmfrom + nM + nD - 1; ad->M = ad->hmmto + esl_rnd_Roll(rng, 2); ad->sqfrom = 1000; ad->sqto = ad->sqfrom + nM + nI - 1; ad->L = ad->sqto + esl_rnd_Roll(rng, 2); /* rfline is free-char "reference annotation" on consensus; H3 puts '.' for inserts. */ if (ad->rfline) { for (pos = 0; pos < N; pos++) ad->rfline[pos] = (guidestring[pos] == 'I' ? '.' : 'x'); ad->rfline[pos] = '\0'; } /* mmline indicates which columns should be masked (assigned background distribution), '.' indicates no mask; H3 puts '.' for inserts. */ if (ad->mmline) { for (pos = 0; pos < N; pos++) ad->mmline[pos] = (guidestring[pos] == 'I' ? '.' : '.'); ad->mmline[pos] = '\0'; } /* csline is optional. It has free-char "consensus structure annotation" on consensus positions. H3 puts '.' on inserts. */ if (ad->csline) { for (pos = 0; pos < N; pos++) ad->csline[pos] = (guidestring[pos] == 'I' ? '.' : 'X'); ad->csline[pos] = '\0'; } /* the mandatory three-line alignment display: * * guidestring: MMMDI * model: XXXX. * mline: A+ * aseq: AAA-a */ for (pos = 0; pos < N; pos++) { switch (guidestring[pos]) { case 'M': ad->model[pos] = 'X'; switch (esl_rnd_Roll(rng, 3)) { case 0: ad->mline[pos] = 'A'; case 1: ad->mline[pos] = '+'; case 2: ad->mline[pos] = ' '; } ad->aseq[pos] = 'A'; break; case 'D': ad->model[pos] = 'X'; ad->mline[pos] = ' '; ad->aseq[pos] = '-'; break; case 'I': ad->model[pos] = '.'; ad->mline[pos] = ' '; ad->aseq[pos] = 'a'; break; } } ad->model[pos] = '\0'; ad->mline[pos] = '\0'; ad->aseq[pos] = '\0'; /* ppline is optional */ if (ad->ppline) { for (pos = 0; pos < N; pos++) ad->ppline[pos] = (guidestring[pos] == 'D' ? '.' : p7_alidisplay_EncodePostProb(esl_random(rng))); ad->ppline[pos] = '\0'; } free(guidestring); *ret_ad = ad; return eslOK; ERROR: if (guidestring) free(guidestring); if (ad) p7_alidisplay_Destroy(ad); *ret_ad = NULL; return status; } static void utest_Serialize(ESL_RANDOMNESS *rng, int ntrials, int N) { char msg[] = "utest_Serialize failed"; P7_ALIDISPLAY *ad = NULL; P7_ALIDISPLAY *ad2 = NULL; int trial; for (trial = 0; trial < ntrials; trial++) { if ( create_faux_alidisplay(rng, N, &ad) != eslOK) esl_fatal(msg); if ( (ad2 = p7_alidisplay_Clone(ad)) == NULL) esl_fatal(msg); if ( p7_alidisplay_Compare(ad, ad2) != eslOK) esl_fatal(msg); if ( p7_alidisplay_Serialize(ad) != eslOK) esl_fatal(msg); if ( p7_alidisplay_Compare(ad, ad2) != eslOK) esl_fatal(msg); if ( p7_alidisplay_Deserialize(ad) != eslOK) esl_fatal(msg); if ( p7_alidisplay_Compare(ad, ad2) != eslOK) esl_fatal(msg); p7_alidisplay_Destroy(ad); p7_alidisplay_Destroy(ad2); } return; } static void utest_Backconvert(int be_verbose, ESL_RANDOMNESS *rng, ESL_ALPHABET *abc, int ntrials, int N) { char msg[] = "utest_Backconvert failed"; P7_ALIDISPLAY *ad = NULL; ESL_SQ *sq = NULL; P7_TRACE *tr = NULL; int trial; for (trial = 0; trial < ntrials; trial++) { if ( create_faux_alidisplay(rng, N, &ad) != eslOK) esl_fatal(msg); if ( p7_alidisplay_Serialize(ad) != eslOK) esl_fatal(msg); if (be_verbose && p7_alidisplay_Dump(stdout, ad) != eslOK) esl_fatal(msg); if ( p7_alidisplay_Backconvert(ad, abc, &sq, &tr) != eslOK) esl_fatal(msg); if (be_verbose && p7_trace_Dump(stdout, tr, NULL, sq->dsq) != eslOK) esl_fatal(msg); if ( p7_trace_Validate(tr, abc, sq->dsq, NULL) != eslOK) esl_fatal(msg); p7_alidisplay_Destroy(ad); esl_sq_Destroy(sq); p7_trace_Destroy(tr); } return; } #endif /*p7ALIDISPLAY_TESTDRIVE*/ /*------------------- end, unit tests ---------------------------*/ /***************************************************************** * 6. Test driver. *****************************************************************/ #ifdef p7ALIDISPLAY_TESTDRIVE #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, {"-N", eslARG_INT, "10", NULL, NULL, NULL, NULL, NULL, "number of random-sampled alidisplays to test", 0}, {"-L", eslARG_INT, "20", NULL, NULL, NULL, NULL, NULL, "length of random-sampled alidisplays to test", 0}, {"-s", eslARG_INT, "0", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0}, {"-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show verbose commentary/output", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for p7_alidisplay.c"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *rng = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); int N = esl_opt_GetInteger(go, "-N"); int L = esl_opt_GetInteger(go, "-L"); int be_verbose = esl_opt_GetBoolean(go, "-v"); utest_Serialize ( rng, N, L); utest_Backconvert(be_verbose, rng, abc, N, L); esl_alphabet_Destroy(abc); esl_randomness_Destroy(rng); esl_getopts_Destroy(go); return 0; } #endif /*p7ALIDISPLAY_TESTDRIVE*/ /*------------------- end, test driver --------------------------*/ /***************************************************************** * 7. Example. *****************************************************************/ /* gcc -o p7_alidisplay_example -std=gnu99 -g -Wall -I. -L. -I../easel -L../easel -Dp7ALIDISPLAY_EXAMPLE p7_alidisplay.c -lhmmer -leasel -lm */ #ifdef p7ALIDISPLAY_EXAMPLE #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example driver for P7_ALIDISPLAY"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_TRACE *tr1 = NULL; P7_TRACE *tr2 = NULL; ESL_SQFILE *sqfp = NULL; ESL_SQ *sq = NULL; ESL_SQ *sq2 = NULL; P7_ALIDISPLAY *ad = NULL; P7_PIPELINE *pli = NULL; P7_TOPHITS *hitlist = NULL; p7_FLogsumInit(); /* Read a single HMM from a file */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Read a single sequence from a file */ if (esl_sqfile_Open(seqfile, eslSQFILE_UNKNOWN, NULL, &sqfp) != eslOK) p7_Fail("Failed to open sequence file %s", seqfile); sq = esl_sq_CreateDigital(abc); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, 0); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 0, p7_UNILOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); /* Create a pipeline and a top hits list */ pli = p7_pipeline_Create(NULL/*=default*/, hmm->M, 400, FALSE, p7_SEARCH_SEQS); hitlist = p7_tophits_Create(); /* Run the pipeline */ p7_pli_NewSeq(pli, sq); p7_bg_SetLength(bg, sq->n); p7_oprofile_ReconfigLength(om, sq->n); p7_Pipeline(pli, om, bg, sq, hitlist); if (hitlist->N == 0) { p7_Fail("target sequence doesn't hit"); } if (p7_alidisplay_Backconvert(hitlist->hit[0]->dcl[0].ad, abc, &sq2, &tr2) != eslOK) p7_Fail("backconvert failed"); p7_trace_Dump(stdout, tr2, gm, sq2->dsq); p7_tophits_Destroy(hitlist); p7_alidisplay_Destroy(ad); esl_sq_Destroy(sq); esl_sq_Destroy(sq2); p7_trace_Destroy(tr2); p7_trace_Destroy(tr1); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7ALIDISPLAY_EXAMPLE*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/generic_null2.c0000664361611702660230000004177512473612613015771 0ustar wheelerteddy/* "null2" model: biased composition correction * * Contents: * 1. Null2 estimation algorithms. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * See p7_domaindef.c -- null2 correction of per-seq and per-domain * scores is embedded within p7_domaindef's logic; we split it out * to a separate file because it's so important. * * SRE, Thu Feb 28 09:51:27 2008 [Janelia] * SVN $Id: generic_null2.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include "easel.h" #include "esl_vectorops.h" #include "hmmer.h" #define MMX(i,k) (dp[(i)][(k) * p7G_NSCELLS + p7G_M]) #define IMX(i,k) (dp[(i)][(k) * p7G_NSCELLS + p7G_I]) #define DMX(i,k) (dp[(i)][(k) * p7G_NSCELLS + p7G_D]) #define XMX(i,s) (xmx[(i) * p7G_NXCELLS + (s)]) /***************************************************************** * 1. Null2 estimation algorithms. *****************************************************************/ /* Function: p7_GNull2_ByExpectation() * Synopsis: Calculate null2 model from posterior probabilities. * Incept: SRE, Thu Feb 28 09:52:28 2008 [Janelia] * * Purpose: Calculate the "null2" model for the envelope encompassed * by a posterior probability calculation for model * . Return the null2 odds emission probabilities * $\frac{f'{x}}{f{x}}$ in , which caller * provides as space for at least Kp> residues. * * The expectation method is applied to envelopes in * simple, well resolved regions (regions containing just a * single envelope, where no stochastic traceback * clustering was required). * * Make sure that the posterior probability matrix has * been calculated by the caller for only the envelope; thus * its rows are numbered <1..Ld>, for envelope * of length . * * Args: gm - profile, in any mode, target length model set to * pp - posterior prob matrix, for against domain envelope (offset) * null2 - RETURN: null2 odds ratios per residue; <0..Kp-1>; caller allocated space * * Returns: on success; contains the null2 scores. The 0 * row of has been used as temp space, and happens to contain * the expected frequency that each M,I,N,C,J state is used in this * matrix to generate residues. * * Throws: (no abnormal error conditions) */ int p7_GNull2_ByExpectation(const P7_PROFILE *gm, P7_GMX *pp, float *null2) { int M = gm->M; int Ld = pp->L; float **dp = pp->dp; float *xmx = pp->xmx; float xfactor; int x; /* over symbols 0..K-1 */ int i; /* over offset envelope dsq positions 1..Ld */ int k; /* over model M states 1..M, I states 1..M-1 */ /* Calculate expected # of times that each emitting state was used * in generating the Ld residues in this domain. * The 0 row in is used to hold these numbers. */ esl_vec_FCopy(pp->dp[1], (M+1)*p7G_NSCELLS, pp->dp[0]); esl_vec_FCopy(pp->xmx+p7G_NXCELLS, p7G_NXCELLS, pp->xmx); for (i = 2; i <= Ld; i++) { esl_vec_FAdd(pp->dp[0], pp->dp[i], (M+1)*p7G_NSCELLS); esl_vec_FAdd(pp->xmx, pp->xmx+i*p7G_NXCELLS, p7G_NXCELLS); } /* Convert those expected #'s to log frequencies; these we'll use as * the log posterior weights. */ esl_vec_FLog(pp->dp[0], (M+1)*p7G_NSCELLS); esl_vec_FLog(pp->xmx, p7G_NXCELLS); esl_vec_FIncrement(pp->dp[0], (M+1)*p7G_NSCELLS, -log((float)Ld)); esl_vec_FIncrement(pp->xmx, p7G_NXCELLS, -log((float)Ld)); /* Calculate null2's log odds emission probabilities, by taking * posterior weighted sum over all emission vectors used in paths * explaining the domain. * This is dog-slow; a point for future optimization. */ xfactor = XMX(0,p7G_N); xfactor = p7_FLogsum(xfactor, XMX(0,p7G_C)); xfactor = p7_FLogsum(xfactor, XMX(0,p7G_J)); esl_vec_FSet(null2, gm->abc->K, -eslINFINITY); for (x = 0; x < gm->abc->K; x++) { for (k = 1; k < M; k++) { null2[x] = p7_FLogsum(null2[x], MMX(0,k) + p7P_MSC(gm, k, x)); null2[x] = p7_FLogsum(null2[x], IMX(0,k) + p7P_ISC(gm, k, x)); } null2[x] = p7_FLogsum(null2[x], MMX(0,M) + p7P_MSC(gm, k, x)); null2[x] = p7_FLogsum(null2[x], xfactor); } esl_vec_FExp (null2, gm->abc->K); /* now null2[x] = \frac{f_d(x)}{f_0(x)} for all x in alphabet, * 0..K-1, where f_d(x) are the ad hoc "null2" residue frequencies * for this envelope. */ /* make valid scores for all degeneracies, by averaging the odds ratios. */ esl_abc_FAvgScVec(gm->abc, null2); /* does not set gap, nonres, missing */ null2[gm->abc->K] = 1.0; /* gap character */ null2[gm->abc->Kp-2] = 1.0; /* nonresidue "*" */ null2[gm->abc->Kp-1] = 1.0; /* missing data "~" */ return eslOK; } /* Function: p7_GNull2_ByTrace() * Synopsis: Assign null2 scores to an envelope by the sampling method. * Incept: SRE, Thu May 1 10:00:43 2008 [Janelia] * * Purpose: Given a traceback

for an alignment of model to * some target sequence; calculate null2 odds ratios $\frac{f'{x}}{f{x}}$ * as the state-usage-weighted emission probabilities, * with state usages calculated by counting emissions used * at positions in the trace. * * Because we only need to collect state usages from the * trace , the target sequence is irrelevant. Because * we are only averaging emission odds ratios from model * , the configuration of is irrelevant (uni * vs. multihit, or length config). * * Args: gm - model, in any configuration; only emission odds are used * tr - traceback for any region (or all) of a target sequence * zstart - first elem in to collect from; use 0 for complete * zend - last elem in to collect from; use tr->N-1 for complete * wrk - DP matrix w/ at least one row, for workspace * null2 - RESULT: odds ratios f'(x)/f(x) for all Kp residues * * Returns: on success, and the n2sc> scores are set * for region . * * Throws: on allocation error. */ int p7_GNull2_ByTrace(const P7_PROFILE *gm, const P7_TRACE *tr, int zstart, int zend, P7_GMX *wrk, float *null2) { float **dp = wrk->dp; /* so that {MDI}MX() macros work */ float *xmx = wrk->xmx; /* so that XMX() macro works */ int Ld = 0; int M = gm->M; int k; /* index over model position */ int x; /* index over residues */ int z; /* index over trace position */ float xfactor; /* We'll use the i=0 row in wrk for working space: dp[0][] and xmx[0..4]. */ esl_vec_FSet(wrk->dp[0], (M+1)*p7G_NSCELLS, 0.0); esl_vec_FSet(wrk->xmx, p7G_NXCELLS, 0.0); /* Calculate emitting state usage in this particular trace segment: */ for (z = zstart; z <= zend; z++) { switch (tr->st[z]) { case p7T_M: Ld++; MMX(0,tr->k[z]) += 1.0; break; case p7T_I: Ld++; IMX(0,tr->k[z]) += 1.0; break; case p7T_N: if (tr->st[z-1] == p7T_N) { Ld++; XMX(0,p7G_N) += 1.0; } break; case p7T_C: if (tr->st[z-1] == p7T_C) { Ld++; XMX(0,p7G_C) += 1.0; } break; case p7T_J: if (tr->st[z-1] == p7T_J) { Ld++; XMX(0,p7G_J) += 1.0; } break; } } esl_vec_FScale(wrk->dp[0], (M+1)*p7G_NSCELLS, (1.0 / (float) Ld)); esl_vec_FScale(wrk->xmx, p7G_NXCELLS, (1.0 / (float) Ld)); /* Calculate null2's odds ratio emission probabilities, by taking * posterior weighted sum over all emission vectors used in paths * explaining the domain. */ esl_vec_FSet(null2, gm->abc->K, 0.0); xfactor = XMX(0,p7G_N) + XMX(0,p7G_C) + XMX(0,p7G_J); for (x = 0; x < gm->abc->K; x++) { for (k = 1; k < M; k++) { null2[x] += MMX(0,k) * expf(p7P_MSC(gm, k, x)); null2[x] += IMX(0,k) * expf(p7P_ISC(gm, k, x)); } null2[x] += MMX(0,M) * expf(p7P_MSC(gm, M, x)); null2[x] += xfactor; } /* now null2[x] = \frac{f_d(x)}{f_0(x)} odds ratios for all x in alphabet, * 0..K-1, where f_d(x) are the ad hoc "null2" residue frequencies * for this envelope. */ /* make valid scores for all degeneracies, by averaging the odds ratios. */ esl_abc_FAvgScVec(gm->abc, null2); null2[gm->abc->K] = 1.0; /* gap character */ null2[gm->abc->Kp-2] = 1.0; /* nonresidue "*" */ null2[gm->abc->Kp-1] = 1.0; /* missing data "~" */ return eslOK; } /***************************************************************** * 2. Benchmark driver *****************************************************************/ #ifdef p7GENERIC_NULL2_BENCHMARK /* icc -O3 -static -o generic_null2_benchmark -I. -L. -I../easel -L../easel -Dp7GENERIC_NULL2_BENCHMARK generic_null2.c -lhmmer -leasel -lm ./benchmark-generic-null2 RRM_1 (M=72) Caudal_act (M=136) SMC_N (M=1151) ----------------- ------------------ ------------------- 21 Aug 2008 7.77u (185 Mc/s) 14.13u (192 Mc/s) 139.03u (165.6 Mc/s) */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for posterior residue null2, generic version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *gx1 = NULL; P7_GMX *gx2 = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); float null2[p7_MAXCODE]; int i; float fsc, bsc; double Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); gx1 = p7_gmx_Create(gm->M, L); gx2 = p7_gmx_Create(gm->M, L); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_GForward (dsq, L, gm, gx1, &fsc); p7_GBackward(dsq, L, gm, gx2, &bsc); p7_GDecoding(gm, gx1, gx2, gx2); esl_stopwatch_Start(w); for (i = 0; i < N; i++) p7_GNull2_ByExpectation(gm, gx2, null2); esl_stopwatch_Stop(w); Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / w->user; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_gmx_Destroy(gx1); p7_gmx_Destroy(gx2); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_NULL2_BENCHMARK*/ /*------------------ end, benchmark driver ----------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7GENERIC_NULL2_TESTDRIVE static void utest_correct_normalization(ESL_RANDOMNESS *r, P7_PROFILE *gm, P7_BG *bg, ESL_DSQ *dsq, int L, P7_GMX *fwd, P7_GMX *bck) { char *msg = "normalization unit test failed"; float null2[p7_MAXABET]; float sum; int x; esl_rsq_xfIID(r, bg->f, gm->abc->K, L, dsq); /* sample a random digital seq of length L */ p7_GForward (dsq, L, gm, fwd, NULL); p7_GBackward(dsq, L, gm, bck, NULL); p7_PosteriorNull2(L, gm, fwd, bck, bck); /* now contains posterior probs */ p7_Null2Corrections(gm, dsq, L, 0, bck, fwd, null2, NULL, NULL); /* use as workspace */ /* Convert null2 from lod score to frequencies f_d */ for (x = 0; x < gm->abc->K; x++) null2[x] = exp(null2[x]) * bg->f[x]; sum = esl_vec_FSum(null2, gm->abc->K); if (sum < 0.99 || sum > 1.01) esl_fatal(msg); } #endif /*p7GENERIC_NULL2_TESTDRIVE*/ /*--------------------- end, unit tests -------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7GENERIC_NULL2_TESTDRIVE /* gcc -o null2_utest -g -Wall -I../easel -L../easel -I. -L. -Dp7NULL2_TESTDRIVE null2.c -lhmmer -leasel -lm * ./null2_utest */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_alphabet.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-L", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "length of sampled sequences", 0 }, { "-M", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "length of sampled HMM", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "unit test driver for the null2 correction calculation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *fwd = NULL; P7_GMX *bck = NULL; ESL_DSQ *dsq = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); /* Sample a random HMM */ p7_hmm_Sample(r, M, abc, &hmm); /* Configure a profile from the sampled HMM */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); /* Other initial allocations */ dsq = malloc(sizeof(ESL_DSQ) * (L+2)); fwd = p7_gmx_Create(gm->M, L); bck = p7_gmx_Create(gm->M, L); p7_FLogsumInit(); utest_correct_normalization(r, gm, bg, dsq, L, fwd, bck); free(dsq); p7_gmx_Destroy(fwd); p7_gmx_Destroy(bck); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_NULL2_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7GENERIC_NULL2_EXAMPLE #endif /*p7GENERIC_NULL2_EXAMPLE*/ /*------------------------ example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/logsum.c0000664361611702660230000003520612473612614014540 0ustar wheelerteddy/* p7_FLogsum() function used in the Forward() algorithm. * * Contents: * 1. Floating point log sum. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * Exegesis: * * Internally, HMMER3 profile scores are in nats: floating point * log-odds probabilities, with the log odds taken relative to * background residue frequencies, and the log to the base e. * * The Forward algorithm needs to calculate sums of probabilities. * Given two log probabilities A and B, where s1 = \log * \frac{a}{f}, and s2 = \log \frac{b}{g}, we need to * calculate C = \log \frac{a + b}{h}. * * The Forward algorithm guarantees that the null model denominator * terms f = g = h, because it is always concerned with summing terms * that describe different parses of the same target sequence prefix, * and the product of the background frequencies for the same sequence * prefix is a constant. * * The naive solution is C = log(e^{A} + e^{B}), but this requires * expensive calls to log() and exp(). * * A better solution is C = A + log(1 + e^{-(A-B)}), for A >= B. For * sufficiently small B << A, e^-{A-B} becomes less than the * machine's FLT_EPSILON, and C ~= A. (This is at about (A-B) > * -15.9, for the typical FLT_EPSILON of 1.2e-7.) * * With some loss of accuracy [1], we can precalculate log(1 + * e^{-(A-B)}) for a discretized range of differences (A-B), and * compute C = A + table_lookup(A-B). This is what HMMER's * p7_FLogsum() function does. * * This only applies to the generic (serial) implementation. * See footnote [2] for discussion of why we remain unable to * implement an efficient log-space SIMD vector implementation of * Forward. */ #include "p7_config.h" #include #include "hmmer.h" /* p7_LOGSUM_SCALE defines the precision of the calculation; the * default of 1000.0 means rounding differences to the nearest 0.001 * nat. p7_LOGSUM_TBL defines the size of the lookup table; the * default of 16000 means entries are calculated for differences of 0 * to 16.000 nats (when p7_LOGSUM_SCALE is 1000.0). e^{-p7_LOGSUM_TBL / * p7_LOGSUM_SCALE} should be on the order of the machine FLT_EPSILON, * typically 1.2e-7. */ #define p7_LOGSUM_SCALE 1000.f #define p7_LOGSUM_TBL 16000 static float flogsum_lookup[p7_LOGSUM_TBL]; /* p7_LOGSUM_TBL=16000: (A-B) = 0..16 nats, steps of 0.001 */ /***************************************************************** *# 1. floating point log sum *****************************************************************/ /* Function: p7_FLogsumInit() * Synopsis: Initialize the p7_Logsum() function. * * Purpose: Initialize the lookup table for . * This function must be called once before any * call to . * * The precision of the lookup table is determined * by the compile-time constant. * * Returns: on success. */ int p7_FLogsumInit(void) { static int firsttime = TRUE; if (!firsttime) return eslOK; firsttime = FALSE; int i; for (i = 0; i < p7_LOGSUM_TBL; i++) flogsum_lookup[i] = log(1. + exp((double) -i / p7_LOGSUM_SCALE)); return eslOK; } /* Function: p7_FLogsum() * Synopsis: Approximate $\log(e^a + e^b)$. * * Purpose: Returns a fast table-driven approximation to * $\log(e^a + e^b)$. * * Either or (or both) may be $-\infty$, * but neither may be $+\infty$ or . * * Note: This function is a critical optimization target, because * it's in the inner loop of generic Forward() algorithms. */ float p7_FLogsum(float a, float b) { const float max = ESL_MAX(a, b); const float min = ESL_MIN(a, b); //return (min == -eslINFINITY || (max-min) >= 15.7f) ? max : max + log(1.0 + exp(min-max)); /* SRE: While debugging SSE impl. Remember to remove! */ return (min == -eslINFINITY || (max-min) >= 15.7f) ? max : max + flogsum_lookup[(int)((max-min)*p7_LOGSUM_SCALE)]; } /* Function: p7_FLogsumError() * Synopsis: Compute absolute error in probability from Logsum. * * Purpose: Compute the absolute error in probability space * resulting from 's table lookup * approximation: approximation result - exact result. * * This is of course computable analytically for * any given ; but the function * is useful for some routines that want to determine * if has been compiled in its * exact slow mode for debugging purposes. Testing * 0.0001> * for example, suffices to detect that the function * is compiled in its fast approximation mode given * the defaults. */ float p7_FLogsumError(float a, float b) { float approx = p7_FLogsum(a,b); float exact = log(exp(a) + exp(b)); return (exp(approx) - exp(exact)); } /***************************************************************** * 2. Benchmark driver. *****************************************************************/ #ifdef p7LOGSUM_BENCHMARK /* gcc -o logsum_benchmark -g -O2 -I. -L. -I../easel -L../easel -Dp7LOGSUM_BENCHMARK logsum.c -leasel -lm * ./logsum_benchmark */ /* A table-driven FLogsum() is about 20x faster than a direct * C = A + log(1+e^{-(A-B)}) implementation, "naive2()": * time/call clocks/call * naive1: 110 nsec 250 SRE:J8/71 10 Aug 2011 * naive2: 87 nsec 200 MacOS/X desktop, default build (gcc -O3), 2.26 GHz Xeon * FLogsum(): 4 nsec 9 * * Times in units of nanoseconds/iteration: cpu time * 10 * based on default 1e8 iterations (-N 100000000). * Clocks based on 2.26GHz = 2.26 clocks/nsec */ #include "p7_config.h" #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-n", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "naive time: A + log(1+exp(-(A-B)))", 0 }, { "-r", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "really naive time: log(exp(A)+exp(B))", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "be verbose: show individual results", 0 }, { "-N", eslARG_INT,"100000000",NULL,"n>0", NULL, NULL, NULL, "number of trials", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "benchmark driver for logsum functions()"; static float naive1(float s1, float s2) { return log(exp(s1) + exp(s2)); } static float naive2(float s1, float s2) { if (s1 > s2) return s1 + log(1 + exp(s2-s1)); else return s2 + log(1 + exp(s1-s2)); } int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_STOPWATCH *w = esl_stopwatch_Create(); int N = esl_opt_GetInteger(go, "-N"); int i; float *A, *B, *C; p7_FLogsumInit(); /* Create the problem: sample N values A,B on interval -1000,1000: about the range of H3 scores */ A = malloc(sizeof(float) * N); B = malloc(sizeof(float) * N); C = malloc(sizeof(float) * N); for (i = 0; i < N; i++) { A[i] = esl_random(r) * 2000. - 1000.; B[i] = esl_random(r) * 2000. - 1000.; } /* Run */ esl_stopwatch_Start(w); if (esl_opt_GetBoolean(go, "-n")) { for (i = 0; i < N; i++) C[i] = naive2(A[i], B[i]); } else if (esl_opt_GetBoolean(go, "-r")) { for (i = 0; i < N; i++) C[i] = naive1(A[i], B[i]); } else { for (i = 0; i < N; i++) C[i] = p7_FLogsum(A[i], B[i]); } esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7LOGSUM_BENCHMARK*/ /*-------------------- end, benchmark ---------------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7LOGSUM_TESTDRIVE #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" static void utest_FLogsumError(ESL_GETOPTS *go, ESL_RANDOMNESS *r) { int N = esl_opt_GetInteger(go, "-N"); float maxval = esl_opt_GetReal(go, "-S"); int be_verbose = esl_opt_GetBoolean(go, "-v"); float maxerr = 0.0; float avgerr = 0.0; int i; float a,b,result,exact,err; for (i = 0; i < N; i++) { a = (esl_random(r) - 0.5) * maxval * 2.; /* uniform draws on -maxval..maxval */ b = (esl_random(r) - 0.5) * maxval * 2.; exact = log(exp(a) + exp(b)); result = p7_FLogsum(a,b); err = fabs(exact-result) / maxval; avgerr += err; maxerr = ESL_MAX(maxerr, err); if (be_verbose) printf("%8.4f %8.4f %8.4f %8.4f %8.4f\n", a, b, exact, result, err); } avgerr /= (float) N; if (be_verbose) { printf("average error = %f\n", avgerr); printf("max error = %f\n", maxerr); } if (maxerr > 0.0001) esl_fatal("maximum error of %f is too high: logsum unit test fails", maxerr); if (avgerr > 0.0001) esl_fatal("average error of %f is too high: logsum unit test fails", avgerr); } static void utest_FLogsumSpecials(void) { char *msg = "logsum specials unit test failed"; if (p7_FLogsum(0.0, -eslINFINITY) != 0.0) esl_fatal(msg); if (p7_FLogsum(-eslINFINITY, 0.0) != 0.0) esl_fatal(msg); if (p7_FLogsum(-eslINFINITY, -eslINFINITY) != -eslINFINITY) esl_fatal(msg); } #endif /*p7LOGSUM_TESTDRIVE*/ /*------------------- end, unit tests ---------------------------*/ /***************************************************************** * 4. Test driver. *****************************************************************/ #ifdef p7LOGSUM_TESTDRIVE /* gcc -o logsum_utest -msse2 -g -Wall -I. -L. -I../easel -L../easel -Dp7LOGSUM_TESTDRIVE logsum.c -leasel -lm ./logsum_utest */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, {"-N", eslARG_INT, "1000", NULL, "n>0",NULL, NULL, NULL, "number of samples", 0}, {"-S", eslARG_REAL, "20.0", NULL, "x>0",NULL, NULL, NULL, "maximum operand value", 0}, {"-s", eslARG_INT, "42", NULL,"n>=0",NULL, NULL, NULL, "random number seed", 0}, {"-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show verbose output", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for logsum.c"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); p7_FLogsumInit(); utest_FLogsumError(go, r); utest_FLogsumSpecials(); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return eslOK; } #endif /*p7LOGSUM_TESTDRIVE*/ /*------------------ end, test driver ---------------------------*/ /***************************************************************** * 5. Example. *****************************************************************/ #ifdef p7LOGSUM_EXAMPLE /* gcc -o example -g -O2 -I. -L. -I../easel -L../easel -Dp7LOGSUM_EXAMPLE logsum.c -leasel -lm * ./example -0.5 -0.5 */ #include "p7_config.h" #include "easel.h" #include "hmmer.h" int main(int argc, char **argv) { float a = atof(argv[1]); float b = atof(argv[2]); float result; p7_FLogsumInit(); result = p7_FLogsum(a, b); printf("p7_FLogsum(%f,%f) = %f\n", a, b, result); result = log(exp(a) + exp(b)); printf("log(e^%f + e^%f) = %f\n", a, b, result); printf("Absolute error in probability: %f\n", p7_FLogsumError(a,b)); return eslOK; } #endif /*p7LOGSUM_EXAMPLE*/ /*--------------------- end, example ----------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/logsum.c $ * SVN $Id: logsum.c 3474 2011-01-17 13:25:32Z eddys $ *****************************************************************/ /* Footnotes. * * [1] The maximum relative error is on the order of 1/SCALE, or 0.001. * [xref SRE:J8/71]. * * [2] SIMD vectorization of a log-space Forward remains vexing. * Sparse-rescaled probability-space Forward vector * implemementation only works for local; glocal or global may * underflow long delete paths. Would be desirable to use a * log-space implementation if we could make it fast. Problem is * implementing the p7_FLogsum() lookup table in SIMD; lookup * tables of this size in current SSE, Altivec appear to be * infeasible. I considered the possibility of using a functional * fit to f(x) = log(1+e^{-x}) for x >=0, for example with a * Chebyshev polynomial, because a numerical f(x) would vectorize. * Decided that this computation would necessarily be expensive on * the order of log(x) or exp(x), so replacing log(1+exp(-x)) with * f(x) doesn't look like compelling -- might as well compute * log(1+exp(-x)) directly! The table-driven approach is about 20x * faster (about 9 clocks, compared to about 200 for the direct * log,exp calculation), and even if we could get an f(x) * calculation to be as efficient as log(x) -- say 100 clocks -- * the 4x SIMD vectorization does not compensate for the 10x hit * in speed. [xref SRE:J8/71] */ hmmer-3.1b2/src/p7_hmmcache.c0000664361611702660230000001671012473612614015404 0ustar wheelerteddy/* A cached profile database. Used by the hmmpgmd daemon. * * Contents: * x. P7_HMMCACHE : a daemon's cached profile database. * x. Benchmark driver. * x. Unit tests. * x. License and copyright information */ #include "p7_config.h" #include #include #include "easel.h" #include "hmmer.h" #include "p7_hmmcache.h" /***************************************************************** * 1. P7_HMMCACHE: a daemon's cached profile database *****************************************************************/ /* Function: p7_hmmcache_Open() * Synopsis: Cache a profile database. * * Purpose: Open and read all of its contents, creating * a cached profile database in memory. Return a ptr to the * cached profile database in <*ret_cache>. * * Caller may optionally provide an ptr to * at least bytes, to capture an * informative error message on failure. * * Args: hmmfile - (base) name of profile file to open * ret_cache - RETURN: cached profile database * errbuf - optRETURN: error message for a failure * * Returns: on success. <*ret_cache> points to the * cached db. is unchanged. * * Failure codes: * : couldn't be opened for reading * : isn't in recognized HMMER file format * : profiles in have different alphabets * * On any failure, <*ret_cache> is and contains * an informative error message for the user. * * Throws: : memory allocation error. */ int p7_hmmcache_Open(char *hmmfile, P7_HMMCACHE **ret_cache, char *errbuf) { P7_HMMCACHE *cache = NULL; P7_HMMFILE *hfp = NULL; /* open HMM database file */ P7_OPROFILE *om = NULL; /* target profile */ int status; ESL_ALLOC(cache, sizeof(P7_HMMCACHE)); cache->name = NULL; cache->abc = NULL; cache->list = NULL; cache->lalloc = 4096; /* allocation chunk size for of ptrs */ cache->n = 0; if ( ( status = esl_strdup(hmmfile, -1, &cache->name) != eslOK)) goto ERROR; ESL_ALLOC(cache->list, sizeof(P7_OPROFILE *) * cache->lalloc); if ( (status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf)) != eslOK) goto ERROR; // eslENOTFOUND | eslEFORMAT while ((status = p7_oprofile_ReadMSV(hfp, &(cache->abc), &om)) == eslOK) /* eslEFORMAT | eslEINCOMPAT */ { if (( status = p7_oprofile_ReadRest(hfp, om)) != eslOK) break; /* eslEFORMAT */ if (cache->n >= cache->lalloc) { ESL_REALLOC(cache->list, sizeof(char *) * cache->lalloc * 2); cache->lalloc *= 2; } cache->list[cache->n++] = om; om = NULL; } if (status != eslEOF) { strncpy(errbuf, hfp->errbuf, eslERRBUFSIZE); goto ERROR; } //printf("\nfinal:: %d memory %" PRId64 "\n", inx, total_mem); p7_hmmfile_Close(hfp); *ret_cache = cache; return eslOK; ERROR: if (cache) p7_hmmcache_Close(cache); if (om) p7_oprofile_Destroy(om); if (hfp) p7_hmmfile_Close(hfp); return status; } /* Function: p7_hmmcache_Sizeof() * Synopsis: Returns total size of a profile cache, in bytes. */ size_t p7_hmmcache_Sizeof(P7_HMMCACHE *cache) { size_t n = sizeof(P7_HMMCACHE); int i; n += sizeof(char) * (strlen(cache->name) + 1); n += esl_alphabet_Sizeof(cache->abc); n += sizeof(P7_OPROFILE *) * cache->lalloc; /* cache->list */ for (i = 0; i < cache->n; i++) n += p7_oprofile_Sizeof(cache->list[i]); return n; } /* Function: p7_hmmcache_SetNumericNames() * Synopsis: Rename each profile in cache with a numeric name. * * Purpose: Rename every profile in profile cache * with a numeric code, starting from "000000001". * * The code is nine digits long, left padded with * 0's. * * Returns: on success. * * Throws: on allocation failure. */ int p7_hmmcache_SetNumericNames(P7_HMMCACHE *cache) { int namelen = 9; /* 9 digit numeric code: 000000001, 000000002... */ P7_OPROFILE *om; int i; int status; for (i = 0; i < cache->n; i++) { om = cache->list[i]; if (om->name) free(om->name); if (( status = esl_sprintf(&(om->name), "%0*d", namelen, i+1)) != eslOK) return status; } return eslOK; } /* Function: p7_hmmcache_Close() * Synopsis: Free a profile cache. */ void p7_hmmcache_Close(P7_HMMCACHE *cache) { int i; if (! cache) return; if (cache->name) free(cache->name); if (cache->abc) esl_alphabet_Destroy(cache->abc); if (cache->list) { for (i = 0; i < cache->n; i++) p7_oprofile_Destroy(cache->list[i]); free(cache->list); } free(cache); } /***************************************************************** * 2. Benchmark driver *****************************************************************/ #ifdef p7HMMCACHE_BENCHMARK #include "p7_config.h" #include "easel.h" #include "esl_getopts.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "p7_hmmcache.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for profile database cache"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_STOPWATCH *w = esl_stopwatch_Create(); char *hmmfile = esl_opt_GetArg(go, 1); P7_HMMCACHE *hcache = NULL; char errbuf[eslERRBUFSIZE]; size_t tot_mem; int status; esl_stopwatch_Start(w); status = p7_hmmcache_Open(hmmfile, &hcache, errbuf); if (status == eslENOTFOUND) p7_Fail("Failed to read %s\n %s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("Failed to parse %s\n %s\n", hmmfile, errbuf); else if (status == eslEINCOMPAT) p7_Fail("Mixed profile types in %s\n %s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Failed to cache %s: error code %d\n", hmmfile, status); p7_hmmcache_SetNumericNames(hcache); tot_mem = p7_hmmcache_Sizeof(hcache); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("tot memory = %" PRIu64 "\n", (uint64_t) tot_mem); p7_hmmcache_Close(hcache); esl_getopts_Destroy(go); esl_stopwatch_Destroy(w); return 0; } #endif /*p7HMMCACHE_BENCHMARK*/ /*--------------- end, benchmark driver -------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: p7_hmmcache.c 3754 2011-11-21 14:25:31Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/p7_hmmcache.c $ *****************************************************************/ hmmer-3.1b2/src/.dropbox.attr0000775361611702660230000000000212473610422015475 0ustar wheelerteddy{}hmmer-3.1b2/src/p7_gmxchk.c0000664361611702660230000007172112473612614015123 0ustar wheelerteddy/* P7_GMXCHK implementation * * Checkpointed forward/backward dynamic programming matrix. * Derived from P7_GMX structure; see p7_gmx.[ch] * * Contents: * 1. The object. * 2. Debugging and testing tools. * 3. Internal (static) routines. * 4. Unit tests. * 5. Test driver. * 6. References. * 7. Copyright and license information. */ #include "p7_config.h" #include #include #include "hmmer.h" #include "p7_gmxchk.h" static int set_row_layout (P7_GMXCHK *gxc, int allocL, int maxR); static void set_full (P7_GMXCHK *gxc, int L); static void set_checkpointed(P7_GMXCHK *gxc, int L, int R); static void set_redlined (P7_GMXCHK *gxc, int L, double minR); static double minimum_rows (int L); static double checkpointed_rows(int L, int R); /***************************************************************** *= 1. The object *****************************************************************/ /* Function: p7_gmxchk_Create() * Synopsis: Allocate a new matrix. * * Purpose: Allocate a new matrix sufficient to * hold the checkpointed forward and two-row backwards * DP matrices for a comparison of a query model of * length and a target sequence of length . * * Try to keep allocation within bytes in * memory. , for example, means * a recommended RAM limit of 128 MiB. The allocation can * exceed this, if the comparison requires it (if so, * the matrix is fully checkpointed, minimizing the * allocation); but any subsequent * call attempting to reuse the matrix will try to * reallocate it back downwards to the . * * Your choice for should take into account how * many parallel threads there are, each with its own * matrix allocation. * * By design spec, and are $\leq$ 100000. * * Args: M - query profile size in consensus positions (<=100000) * L - target sequence length in residues (<=100000) * ramlimit - recommended memory limit in bytes * * Returns: ptr to new object on success. * * Throws: on allocation failure. */ P7_GMXCHK * p7_gmxchk_Create(int M, int L, int64_t ramlimit) { P7_GMXCHK *gxc = NULL; int maxR; int r; int status; /* Validity of integer variable ranges may depend on design spec: */ ESL_DASSERT1( (M <= 100000) ); /* design spec says, model length M <= 100000 */ ESL_DASSERT1( (L <= 100000) ); /* ... and, seq length L <= 100000 */ /* Level 1 allocation: the structure itself */ ESL_ALLOC(gxc, sizeof(P7_GMXCHK)); gxc->dp = NULL; gxc->dp_mem = NULL; /* Set allocR, R{abc}, L{abc} fields: row layout, full vs. checkpointed */ gxc->R0 = 3; /* fwd[0]; bck[prv,cur] */ gxc->allocW = (M+1) * p7G_NSCELLS + p7GC_NXCELLS; /* M+1 because we're [0..M] in DP columns in generic mx. */ gxc->ncell_limit = ramlimit / sizeof(float); maxR = (int) (gxc->ncell_limit / (int64_t) gxc->allocW); set_row_layout(gxc, L, maxR); gxc->allocR = gxc->R0 + gxc->Ra + gxc->Rb + gxc->Rc; gxc->validR = gxc->allocR; /* Level 2 allocations: row pointers and dp cell memory */ gxc->ncells = gxc->allocR * gxc->allocW; ESL_ALLOC( gxc->dp_mem, sizeof(float) * gxc->ncells); ESL_ALLOC( gxc->dp, sizeof(float *) * gxc->allocR); for (r = 0; r < gxc->allocR; r++) gxc->dp[r] = gxc->dp_mem + (r * gxc->allocW); #ifdef p7_DEBUGGING gxc->do_debugging = FALSE; gxc->dfp = NULL; gxc->dbg_width = 9; gxc->dbg_precision = 4; gxc->dbg_flags = p7_DEFAULT; #endif gxc->M = 0; gxc->L = 0; gxc->R = 0; return gxc; ERROR: if (gxc) p7_gmxchk_Destroy(gxc); return NULL; } /* Function: p7_gmxchk_GrowTo() * Synopsis: Resize checkpointed matrix structure for new comparison. * * Purpose: Given an existing checkpointed matrix structure , * and the dimensions and of a new comparison, * reallocate and reinitialize . * * Essentially the same as free'ing the previous matrix * and creating a new one -- but trying to minimize * expensive memory allocation/reallocation calls. * * If is redlined (over its recommended allocation) * and the new problem size can fit in the recommended * allocation, is reallocated to the smaller size. * * Args: gxc - existing checkpointed matrix * M - new query profile length * L - new target sequence length * * Returns: on success. * * Throws: if an allocation fails. The state of is * now undefined, and the caller should not use it. */ int p7_gmxchk_GrowTo(P7_GMXCHK *gxc, int M, int L) { int W = (M+1)*p7G_NSCELLS + p7GC_NXCELLS; /* actual row width in cells; <= allocW */ int minR_chk = (int) ceil(minimum_rows(L)) + gxc->R0; /* minimum number of DP rows needed */ int reset_dp_ptrs = FALSE; int maxR; int r; int status; /* Are the current allocations satisfactory ? */ if (W <= gxc->allocW && gxc->ncells <= gxc->ncell_limit) { if (L + gxc->R0 <= gxc->validR) { set_full (gxc, L); return eslOK; } else if (minR_chk <= gxc->validR) { set_checkpointed(gxc, L, gxc->validR); return eslOK; } } /* Do individual matrix rows need to expand? */ if ( W > gxc->allocW) { gxc->allocW = W; gxc->validR = (int) (gxc->ncells / (int64_t) gxc->allocW); /* validR must be <= allocR */ reset_dp_ptrs = TRUE; } /* Does matrix dp_mem need reallocation, either up or down? */ maxR = (int) (gxc->ncell_limit / (int64_t) gxc->allocW); /* max rows if we use up to the recommended allocation size. */ if ( (gxc->ncells > gxc->ncell_limit && minR_chk <= maxR) || /* we were redlined, and recommended alloc will work: so downsize */ minR_chk > gxc->validR) /* not enough memory for needed rows: so upsize */ { set_row_layout(gxc, L, maxR); gxc->validR = gxc->R0 + gxc->Ra + gxc->Rb + gxc->Rc; /* this may be > allocR now; we'll reallocate dp[] next, if so */ gxc->ncells = gxc->validR * gxc->allocW; ESL_REALLOC(gxc->dp_mem, sizeof(float) * gxc->ncells); reset_dp_ptrs = TRUE; } else /* current validR will suffice, either full or checkpointed; we still need to calculate a layout */ { if (L+gxc->R0 <= gxc->validR) set_full(gxc, L); else set_checkpointed(gxc, L, gxc->validR); } /* Does the array of row ptrs need reallocation? */ if (gxc->validR > gxc->allocR) { ESL_REALLOC(gxc->dp, sizeof(float *) * gxc->validR); gxc->allocR = gxc->validR; reset_dp_ptrs = TRUE; } /* Do the row ptrs need to be reset? */ if (reset_dp_ptrs) for (r = 0; r < gxc->validR; r++) gxc->dp[r] = gxc->dp_mem + (r * gxc->allocW); gxc->M = 0; gxc->L = 0; gxc->R = 0; return eslOK; ERROR: return status; } /* Function: p7_gmxchk_Sizeof() * Synopsis: Returns the size of a checkpointed generic DP matrix, in bytes. */ size_t p7_gmxchk_Sizeof(const P7_GMXCHK *gxc) { size_t n = 0; n += sizeof(P7_GMXCHK); n += gxc->ncells * sizeof(float); /* main DP cells */ n += gxc->allocR * sizeof(float *); /* row ptrs */ return n; } /* Function: p7_gmxchk_Reuse() * Synopsis: Recycle a checkpointed generic DP matrix. * * Purpose: Resets the checkpointed generic DP matrix for reuse, * minimizing free/malloc wastefulness. All information * specific to the DP problem we just computed is * reinitialized. All allocations (and information about * those allocations) are preserved. * * Caller will still need to call * before each new DP, to be sure that the allocations are * sufficient, and checkpointed rows are laid out. * * Returns: on success. */ int p7_gmxchk_Reuse(P7_GMXCHK *gxc) { gxc->M = 0; gxc->L = 0; gxc->R = 0; /* the following aren't strictly necessary, in correct code, because * GrowTo() will reset them */ gxc->R0 = 3; gxc->Ra = 0; gxc->Rb = 0; gxc->Rc = 0; gxc->La = 0; gxc->Lb = 0; gxc->Lc = 0; return eslOK; } /* Function: p7_gmxchk_Destroy() * Synopsis: Frees a checkpointed generic DP matrix. * * Purpose: Free the checkpointed generic DP matrix . * may be or incompletely allocated. */ void p7_gmxchk_Destroy(P7_GMXCHK *gxc) { if (gxc) { if (gxc->dp_mem) free(gxc->dp_mem); if (gxc->dp) free(gxc->dp); free(gxc); } } /*-------------- end, P7_GMXCHK object --------------------------*/ /***************************************************************** *= 2. Debugging and testing tools *****************************************************************/ #if p7_DEBUGGING /* Function: p7_gmxchk_Dump() * Synopsis: Dump a checkpointed DP matrix to a stream. * * Purpose: Dump checkpointed DP Forward matrix to stream * for diagnostics. * * Caller first calls to create * the checkpointed matrix ; then * to dump all or part of it. * * control some optional output behavior, as follows: * | | don't show scores for states | * | | is in probs; show as log probs | * Or, passing means no flags. * * Returns: on success. */ int p7_gmxchk_Dump(FILE *ofp, P7_GMXCHK *gxc, int flags) { int kstart = 0; /* kstart,kend: make it easy to convert to a DumpWindow() sometime */ int kend = gxc->M; int i, r, b, w; int status; p7_gmxchk_DumpHeader(ofp, gxc, kstart, kend, flags); for (i = 0, r = gxc->R0-1; i <= gxc->La; i++, r++) if ((status = p7_gmxchk_DumpRow(ofp, gxc, gxc->dp[r], i, kstart, kend, flags)) != eslOK) return status; for (b = gxc->Rb + gxc->Rc, w = gxc->Lb; i <= gxc->L; i++) { if (!(--w)) { w = b--; if ((status = p7_gmxchk_DumpRow(ofp, gxc, gxc->dp[r], i, kstart, kend, flags)) != eslOK) return status; r++; } } return eslOK; } /* Function: p7_gmxchk_SetDumpMode() * Synopsis: Set matrix to be dumped one row at a time in Backwards pass. * * Purpose: Set matrix so that Backwards pass will dump it one * row at a time, in reverse order. (The Backwards pass only * keeps two rows of the Backward matrix in memory at any * time, so you can't calculate first then dump the whole thing, * as you can with the Forward matrix.) * * Caller first calls , then calls the * calculation. * will then dump the header and each row to . * * If is , dumping is turned off. * * control some optional output behavior, as follows: * | | don't show scores for states | * | | is in probs; show as log probs | * Or, passing means no flags. * If is , has no effect. * * Args: gxc - checkpointed dp matrix we want to be dumping * ofp - open stream for diagnostics, to set; * or , to unset dumping. * flags - see above. * * Returns: on success. */ int p7_gmxchk_SetDumpMode(P7_GMXCHK *gxc, FILE *ofp, int flags) { if (ofp) { gxc->do_debugging = TRUE; gxc->dfp = ofp; gxc->dbg_flags = flags; } else { gxc->do_debugging = FALSE; gxc->dfp = NULL; gxc->dbg_flags = 0; } return eslOK; } /* Function: p7_gmxchk_DumpHeader() * Synopsis: Dump the header for a dumped checkpointed DP mx to stream. * * Purpose: Write the header (matrix column labels) for checkpointed * DP matrix to stream for diagnostics. * * This either gets called by for a Forward * matrix, or by when debugging * and about to start dumping a backwards matrix one row at a * time. * * control some optional output behavior, as follows: * | | don't show scores for states | * | | is in probs; show as log probs | * * Args: ofp - stream we're dumping diagnostics to (typically stdout) * gxc - checkpointed matrix we're dumping * kstart - start on profile columns 0..M (typically 0) * kend - end on profile columns 0..M (typically M) * flags - see above (typically ) * * Returns: on success. */ int p7_gmxchk_DumpHeader(FILE *ofp, P7_GMXCHK *gxc, int kstart, int kend, int flags) { int width = gxc->dbg_width; int k,x; fprintf(ofp, " "); for (k = kstart; k <= kend; k++) fprintf(ofp, "%*d ", width, k); if (! (flags & p7_HIDE_SPECIALS)) fprintf(ofp, "%*s %*s %*s %*s %*s %*s %*s\n", width, "E", width, "N", width, "JJ", width, "J", width, "B", width, "CC", width, "C"); fprintf(ofp, " "); for (k = kstart; k <= kend; k++) fprintf(ofp, "%*.*s ", width, width, "----------"); if (! (flags & p7_HIDE_SPECIALS)) for (x = 0; x < 5; x++) fprintf(ofp, "%*.*s ", width, width, "----------"); fprintf(ofp, "\n"); return eslOK; } /* Function: p7_gmxchk_DumpRow() * Synopsis: Dump one row of a checkpointed DP matrix for diagnostics. * * Purpose: Dump the row that points to, from checkpointed * matrix , to stream for debugging/diagnostics. * Label the row by position (typically 0..L+1) in * the target. * * The meaning of is the same as in . * * Args: ofp - stream to dump output to * gxc - checkpointed DP matrix * dpc - ptr to DP matrix row: gxc->dp[r] or gxc->dp[0|1] * i - position on target sequence (0,1..L,L+1) * kstart - start of dump window on query profile coords: 1..gxc->M * kend - end of dump window on query profile coords: 1..gxc->M * flags - option flags passed in from * * Returns: on success. */ int p7_gmxchk_DumpRow(FILE *ofp, P7_GMXCHK *gxc, float *dpc, int i, int kstart, int kend, int flags) { int width = gxc->dbg_width; int precision = gxc->dbg_precision; float val; int k, x; int xoffset = (gxc->M+1)*p7G_NSCELLS; /* [ENJBC] cells start at this offset on each row. */ fprintf(ofp, "%3d M ", i); for (k = kstart; k <= kend; k++) { val = dpc[k * p7G_NSCELLS + p7G_M]; if (flags & p7_SHOW_LOG) val = log(val); fprintf(ofp, "%*.*f ", width, precision, val); } if (! (flags & p7_HIDE_SPECIALS)) { for (x = 0; x < p7GC_NXCELLS; x++) { val = dpc[xoffset + x]; if (flags & p7_SHOW_LOG) val = log(val); fprintf(ofp, "%*.*f ", width, precision, val); } } fprintf(ofp, "\n"); fprintf(ofp, "%3d I ", i); for (k = kstart; k <= kend; k++) { val = dpc[k * p7G_NSCELLS + p7G_I]; if (flags & p7_SHOW_LOG) val = log(val); fprintf(ofp, "%*.*f ", width, precision, val); } fprintf(ofp, "\n"); fprintf(ofp, "%3d D ", i); for (k = kstart; k <= kend; k++) { val = dpc[k * p7G_NSCELLS + p7G_D]; if (flags & p7_SHOW_LOG) val = log(val); fprintf(ofp, "%*.*f ", width, precision, val); } fprintf(ofp, "\n\n"); return eslOK; } #endif /* p7_DEBUGGING */ /*------------- end, debugging and testing tools ----------------*/ /***************************************************************** * 3. Internal routines *****************************************************************/ /* set_row_layout() * * Determines the size of the a,b,c regions ("all", "between", * "checkpointed") of rows in the DP matrix. * * Caller has already set allocW> and R0>. allocW>, * the row width, is something $\geq$ +1. R0> is the number * of extra rows needed: here 3, (two bck[cur,prv], one boundary * fwd[0]). * * Upon return, we've set the R{0abc} and L{abc} fields in the * structure. * * Design spec says <= 100000, <= 100000. * * is the maximum number of rows the caller wants to use. * We will exceed this for one comparison if absolutely necessary, but * the next <_Reuse()> call will bring the allocation * back down. * * So there's three possibilities: * 1. A full matrix fits into our recommended max memory use. * 2. A checkpointed matrix fits into our recommended memory. * Make as much of the matrix uncheckpointed as we can, * using every row in maxR. * 3. We can't satisfy the recommended max memory, even fully * checkpointed. Make a fully checkpointed matrix, in which * R0+Ra+Rb+Rc will exceed maxR, and caller will have to * allocate ("redlined"). */ static int set_row_layout(P7_GMXCHK *gxc, int allocL, int maxR) { double Rbc = minimum_rows(allocL); int minR_chk = gxc->R0 + (int) ceil(Rbc); /* min # rows we need for checkpointing */ int minR_all = gxc->R0 + allocL; /* min # rows we need for full matrix */ if (minR_all <= maxR) set_full (gxc, allocL); else if (minR_chk <= maxR) set_checkpointed(gxc, allocL, maxR); else set_redlined (gxc, allocL, Rbc); return eslOK; } /* A "full" matrix is easy: Ra = La = L, using Ra+R0 <= maxR rows total. */ static void set_full(P7_GMXCHK *gxc, int L) { gxc->Ra = L; gxc->Rb = 0; gxc->Rc = 0; gxc->La = L; gxc->Lb = 0; gxc->Lc = 0; } /* If we can fit a checkpointed matrix into maxR rows, * then the trick is to use all maxR rows, and make the * "a" region (all rows kept) as large as possible, to * minimize computation. This means solving a little * quadratic equation for Rb+Rc given L and maxR: see * for that solution. */ static void set_checkpointed(P7_GMXCHK *gxc, int L, int R) { double Rbc = checkpointed_rows(L, R-gxc->R0); double Rc = floor(Rbc); gxc->Rc = (int) Rc; gxc->Rb = (Rbc > Rc ? 1 : 0); gxc->Ra = R - gxc->Rb - gxc->Rc - gxc->R0; gxc->Lc = ((gxc->Rc + 2) * (gxc->Rc + 1)) / 2 - 1; gxc->La = gxc->Ra; gxc->Lb = L - gxc->La - gxc->Lc; } /* If we can't fit in maxR rows, then we checkpoint * the entire matrix; R0+Ra+Rb+Rc > maxR. */ static void set_redlined(P7_GMXCHK *gxc, int L, double minR) { double Rc = floor(minR); gxc->Rc = (int) Rc; gxc->Rb = (minR > Rc ? 1 : 0); gxc->Ra = 0; gxc->Lc = ((gxc->Rc + 2) * (gxc->Rc + 1)) / 2 - 1; gxc->La = 0; gxc->Lb = L - gxc->La - gxc->Lc; } /* minimum_rows() * * Calculate the minimum number of rows needed to checkpoint a * forward matrix for a sequence of length L, exclusive of * other constant row overhead (R0: two backwards rows, fwd[0] * initial row). * * This value is a double; if it has a fraction, a partial checkpoint * block ("b" region) is needed, as in this typical code: * Rbc = minimum_rows(L); * Rc = floor(Rbc); * Rb = (Rbc > Rc ? 1 : 0); * minR = (int) ceil(Rbc); // or, Rc+Rb */ static double minimum_rows(int L) { return (sqrt(9. + 8. * (double) L) - 3.) / 2.; } /* checkpointed_rows() * * Given L and maxR, solve for the number of checkpointed * rows (Rb+Rc) we need. The value is a double; if it has * a fractional part, then a partial checkpoint block is * needed, Rb==1. * * This equation is obtained by solving * L = Ra + (Rbc +2)(Rbc+1)/2 - 1 * for Rbc (i.e. Rb+Rc) using the quadratic equation, * after substitution Ra = (maxR - Rbc - R0) to get * Rbc in terms of L,maxR. */ static double checkpointed_rows(int L, int R) { return (sqrt(1. + 8. * (double) (L - R)) - 1.) / 2.; } /*----------------- end, internals ------------------------------*/ /***************************************************************** * 4. Unit tests. *****************************************************************/ #ifdef p7GMXCHK_TESTDRIVE /* Use the "idiomatic" traversal patterns for Forward and Backward to * write a test pattern into a DP matrix on the Forward pass, then * read it back in the Backwards pass. The test pattern numbers each * cell 0..ntot-1, for total cells used in the DP matrix. * * This test pattern can catch a variety of bad layout issues in * p7_gmxchk_GrowTo() and p7_gmxchk_Create(), and also serves as * a partial example of the "idiomatic traversal patterns" for * a checkpointed data structure. */ static void utest_testpattern(P7_GMXCHK *gxc, int M, int L) { char msg[] = "testpattern failed"; int n; int ntot; int b, w, i, k, s, r; float *dpc; if (L != gxc->La + gxc->Lb + gxc->Lc) esl_fatal(msg); /* The test pattern will count cells in the checkpointed matrix, * including bck rows 0,1 and row 0/col 0 boundary conditions */ ntot = (gxc->R0+gxc->Ra+gxc->Rb+gxc->Rc) * ( (M+1)*p7G_NSCELLS + p7GC_NXCELLS); n = 0; /* Write a test pattern, via idiomatic forward traversal */ /* The Backwards and initialization rows 0..2 */ for (r = 0; r < gxc->R0; r++) { dpc = gxc->dp[r]; for (k = 0; k <= M; k++) for (s = 0; s < p7G_NSCELLS; s++) { *dpc = n++; dpc++; } for (s = 0; s < p7GC_NXCELLS; s++) { *dpc = n++; dpc++; } } /* Phase one: "a" region; uncheckpointed rows of the matrix */ for (i = 1, gxc->R = 0; i <= gxc->La; i++) { dpc = gxc->dp[gxc->R0+gxc->R]; gxc->R++; for (k = 0; k <= M; k++) for (s = 0; s < p7G_NSCELLS; s++) { *dpc = n++; dpc++; } for (s = 0; s < p7GC_NXCELLS; s++) { *dpc = n++; dpc++; } } if (gxc->R != gxc->Ra) esl_fatal(msg); /* Phase two: "b" and "c" regions: partially and fully checkpointed */ for (b = gxc->Rb + gxc->Rc, w = (gxc->Rb ? gxc->Lb : gxc->Rc+1); i <= L; i++) { if (! (--w)) { dpc = gxc->dp[gxc->R0+gxc->R]; gxc->R++; w = b--; /* A checkpointed row: write test pattern */ for (k = 0; k <= M; k++) for (s = 0; s < p7G_NSCELLS; s++) { *dpc = n++; dpc++; } for (s = 0; s < p7GC_NXCELLS; s++) { *dpc = n++; dpc++; } } } if (i != L+1) esl_fatal(msg); if (gxc->R != gxc->Ra+gxc->Rb+gxc->Rc) esl_fatal(msg); if (n != ntot) esl_fatal(msg); /* Now read the test pattern back, using idiomatic Backward traversal */ n = ntot; for (i = L, b = 1; b <= gxc->Rb + gxc->Rc; b++) { w = (b <= gxc->Rc ? b+1 : gxc->Lb); /* The current row ends a block and is checkpointed: * read backwards in both xmx and the checkpointed row */ gxc->R--; dpc = gxc->dp[gxc->R0+gxc->R] + (M+1)*p7G_NSCELLS + p7GC_NXCELLS - 1; /* dpc now on last cell in row */ for (s = p7GC_NXCELLS-1; s >= 0; s--) { if (*dpc != --n) esl_fatal(msg); dpc--; } for (k = M; k >= 0; k--) for (s = p7G_NSCELLS-1; s >= 0; s--) { if (*dpc != --n) esl_fatal(msg); dpc--; } /* in most backwards traversals, now we'd compute * Forwards rows from i2=i-w+1..i-1... */ /* and then we'd compute a Backwards pass from rows * i-1 up to i-w+1. */ i -= w; /* a checkpointed block of width is done. */ } if (i != gxc->La) esl_fatal(msg); /* The "a" region of the backwards traversal: every row is saved. */ for ( ; i >= 1; i--) { gxc->R--; dpc = gxc->dp[gxc->R0+gxc->R] + (M+1)*p7G_NSCELLS + p7GC_NXCELLS - 1; /* dpc now on last cell in row */ for (s = p7GC_NXCELLS-1; s >= 0; s--) { if (*dpc != --n) esl_fatal(msg); dpc--; } for (k = M; k >= 0; k--) for (s = p7G_NSCELLS-1; s >= 0; s--) { if (*dpc != --n) esl_fatal(msg); dpc--; } } /* The R0 rows, boundary condition. */ for (r = gxc->R0-1; r >= 0; r--) { dpc = gxc->dp[r] + (M+1)*p7G_NSCELLS + p7GC_NXCELLS - 1; /* dpc now on last cell in row */ for (s = p7GC_NXCELLS-1; s >= 0; s--) { if (*dpc != --n) esl_fatal(msg); dpc--; } for (k = M; k >= 0; k--) for (s = p7G_NSCELLS-1; s >= 0; s--) { if (*dpc != --n) esl_fatal(msg); dpc--; } } } /* utest_GrowTo() * * Exercises a variety of matrix expansion/contraction, * writing the test pattern each time. */ static void utest_GrowTo(void) { int M, L; P7_GMXCHK *gxc = NULL; M = 20; L = 20; gxc = p7_gmxchk_Create(M, L, 0); utest_testpattern(gxc, M, L); M = 40; L = 20; p7_gmxchk_GrowTo(gxc, M, L); utest_testpattern(gxc, M, L); M = 40; L = 40; p7_gmxchk_GrowTo(gxc, M, L); utest_testpattern(gxc, M, L); M = 80; L = 10; p7_gmxchk_GrowTo(gxc, M, L); utest_testpattern(gxc, M, L); M = 10; L = 80; p7_gmxchk_GrowTo(gxc, M, L); utest_testpattern(gxc, M, L); M = 100; L = 100; p7_gmxchk_GrowTo(gxc, M, L); utest_testpattern(gxc, M, L); p7_gmxchk_Destroy(gxc); M = 20; L = 20; gxc = p7_gmxchk_Create(M, L, ESL_MBYTES(32)); utest_testpattern(gxc, M, L); M = 40; L = 20; p7_gmxchk_GrowTo(gxc, M, L); utest_testpattern(gxc, M, L); M = 40; L = 40; p7_gmxchk_GrowTo(gxc, M, L); utest_testpattern(gxc, M, L); M = 80; L = 10; p7_gmxchk_GrowTo(gxc, M, L); utest_testpattern(gxc, M, L); M = 10; L = 80; p7_gmxchk_GrowTo(gxc, M, L); utest_testpattern(gxc, M, L); M = 100; L = 100; p7_gmxchk_GrowTo(gxc, M, L); utest_testpattern(gxc, M, L); p7_gmxchk_Destroy(gxc); } #endif /*p7GMXCHK_TESTDRIVE*/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 5. Test driver. *****************************************************************/ #ifdef p7GMXCHK_TESTDRIVE /* gcc -o p7_gmxchk_utest -msse2 -g -Wall -I. -L. -I../easel -L../easel -Dp7GMXCHK_TESTDRIVE p7_gmxchk.c -lhmmer -leasel -lm ./p7_gmxchk_utest */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "hmmer.h" #include "p7_gmxchk.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "40", NULL, NULL, NULL, NULL, NULL, "length of sampled sequences", 0 }, { "-M", eslARG_INT, "40", NULL, NULL, NULL, NULL, NULL, "length of sampled test profile", 0 }, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for p7_gmxchk.c"; int main(int argc, char **argv) { char *msg = "p7_gmxchk unit test driver failed"; ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_BG *bg = p7_bg_Create(abc); P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); p7_FLogsumInit(); if (p7_hmm_Sample(r, M, abc, &hmm) != eslOK) esl_fatal(msg); if ((gm = p7_profile_Create(hmm->M, abc)) == NULL) esl_fatal(msg); if (p7_bg_SetLength(bg, L) != eslOK) esl_fatal(msg); if (p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL) != eslOK) esl_fatal(msg); utest_GrowTo(); esl_getopts_Destroy(go); esl_randomness_Destroy(r); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_profile_Destroy(gm); return eslOK; } #endif /*p7GMXCHK_TESTDRIVE*/ /*---------------------- end, test driver ----------------------*/ /* * References: * SRE J8/109-112, Oct 2011: implementation plan. */ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id$ * SVN $URL$ *****************************************************************/ hmmer-3.1b2/src/impl_vmx/0000775361611702660230000000000012473610532014710 5ustar wheelerteddyhmmer-3.1b2/src/impl_vmx/mpi.c0000664361611702660230000011075012473612614015650 0ustar wheelerteddy/* Optional support for MPI parallelization. * * Contents: * 1. Communicating P7_OPROFILE, a score profile. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Copyright and license information. * * SRE, Thu Jun 14 09:59:20 2007 [Janelia] [Tom Waits, Orphans] * SVN $Id: mpi.c 4452 2013-05-05 01:44:04Z wheelert $ */ #include "p7_config.h" #ifdef HAVE_MPI #include #include #include #include "mpi.h" #ifndef __APPLE_ALTIVEC__ #include #endif #include "easel.h" #include "esl_mpi.h" #include "esl_getopts.h" #include "hmmer.h" /***************************************************************** * 1. Communicating P7_OPROFILE, an optimized model. *****************************************************************/ /* Function: p7_oprofile_MPISend() * Synopsis: Send an OPROFILE as an MPI work unit. * Incept: MSF, Wed Oct 21, 2009 [Janelia] * * Purpose: Sends an OPROFILE as a work unit to MPI process * (where ranges from 0..), tagged * with MPI tag , for MPI communicator , as * the sole workunit or result. * * Work units are prefixed by a status code. If is * , the work unit is an code followed by * the packed HMM. If is NULL, the work unit is an * code, which knows how to * interpret; this is typically used for an end-of-data * signal to cleanly shut down worker processes. * * In order to minimize alloc/free cycles in this routine, * caller passes a pointer to a working buffer <*buf> of * size <*nalloc> characters. If necessary (i.e. if is * too big to fit), <*buf> will be reallocated and <*nalloc> * increased to the new size. As a special case, if <*buf> * is and <*nalloc> is 0, the buffer will be * allocated appropriately, but the caller is still * responsible for free'ing it. * * Returns: on success; <*buf> may have been reallocated and * <*nalloc> may have been increased. * * Throws: if an MPI call fails; if a malloc/realloc * fails. In either case, <*buf> and <*nalloc> remain valid and useful * memory (though the contents of <*buf> are undefined). * * Note: Compare to p7_hmmfile_WriteBinary(). The two operations (sending * an HMM via MPI, or saving it as a binary file to disk) are * similar. */ int p7_oprofile_MPISend(P7_OPROFILE *om, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc) { int status; int code; int sz, n, pos; /* Figure out size */ if (MPI_Pack_size(1, MPI_INT, comm, &n) != 0) ESL_XEXCEPTION(eslESYS, "mpi pack size failed"); if (om != NULL) { if ((status = p7_oprofile_MPIPackSize(om, comm, &sz)) != eslOK) return status; n += sz; } /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* Pack the status code and OPROFILE into the buffer */ pos = 0; code = (om == NULL) ? eslEOD : eslOK; if (MPI_Pack(&code, 1, MPI_INT, *buf, n, &pos, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi pack failed"); if (om != NULL) { if ((status = p7_oprofile_MPIPack(om, *buf, n, &pos, comm)) != eslOK) return status; } /* Send the packed OPROFILE to the destination. */ if (MPI_Send(*buf, n, MPI_PACKED, dest, tag, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi send failed"); return eslOK; ERROR: return status; } /* Function: p7_oprofile_MPIPackSize() * Synopsis: Calculates size needed to pack an OPROFILE. * Incept: MSF, Wed Oct 21, 2009 [Janelia] * * Purpose: Calculate an upper bound on the number of bytes * that will need to pack an * OPROFILE in a packed MPI message for MPI * communicator ; return that number of bytes * in <*ret_n>. * * Returns: on success, and <*ret_n> contains the answer. * * Throws: if an MPI call fails, and <*ret_n> is 0. */ int p7_oprofile_MPIPackSize(P7_OPROFILE *om, MPI_Comm comm, int *ret_n) { int status; int n = 0; int K = om->abc->Kp; int len = 0; int cnt; int sz; int Q4 = p7O_NQF(om->M); int Q8 = p7O_NQW(om->M); int Q16 = p7O_NQB(om->M); int vsz = sizeof(vector float); /* MSV Filter information */ if (MPI_Pack_size(5, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(1, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(vsz*Q16, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += (K*sz); /* Viterbi Filter information */ if (MPI_Pack_size(1, MPI_SHORT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += ((p7O_NXSTATES*p7O_NXTRANS+2)*sz); if (MPI_Pack_size(2, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(K*vsz*Q8, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(8*vsz*Q8, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* Forward/Backward information */ if (MPI_Pack_size(1, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += (p7O_NXSTATES*p7O_NXTRANS*sz); if (MPI_Pack_size(K*vsz*Q4, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(8*vsz*Q4, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* disk offsets */ if (MPI_Pack_size(1, MPI_LONG_LONG_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += ((p7_NOFFSETS+2)*sz); /* annotation info */ if (om->name != NULL) len += strlen(om->name) + 1; if (om->acc != NULL) len += strlen(om->acc) + 1; if (om->desc != NULL) len += strlen(om->desc) + 1; if (om->rf != NULL) len += strlen(om->rf) + 1; if (om->mm != NULL) len += strlen(om->mm) + 1; if (om->cs != NULL) len += strlen(om->cs) + 1; if (om->consensus != NULL) len += strlen(om->consensus) + 1; if (MPI_Pack_size(7, MPI_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(len, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; cnt = p7_NEVPARAM + p7_NCUTOFFS + p7_MAXABET; if (MPI_Pack_size(cnt, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* current model size */ if (MPI_Pack_size(4, MPI_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(1, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; *ret_n = n; return eslOK; ERROR: *ret_n = 0; return status; } /* Function: p7_oprofile_MPIPack() * Synopsis: Packs an OPROFILE into MPI buffer. * Incept: MSF, Wed Oct 21, 2009 [Janelia] * * Purpose: Packs OPROFILE into an MPI packed message buffer * of length bytes, starting at byte position <*position>, * for MPI communicator . * * The caller must know that 's allocation of * bytes is large enough to append the packed OPROFILE at * position <*pos>. This typically requires a call to * first, and reallocation if * needed. * * Returns: on success; now contains the * packed , and <*position> is set to the byte * immediately following the last byte of the OPROFILE * in . * * Throws: if an MPI call fails; or if the * buffer's length was overflowed in trying to pack * into . In either case, the state of * and <*position> is undefined, and both should * be considered to be corrupted. */ int p7_oprofile_MPIPack(P7_OPROFILE *om, char *buf, int n, int *pos, MPI_Comm comm) { int K = om->abc->Kp; int atype = om->abc->type; int len; int x; int Q4 = p7O_NQF(om->M); int Q8 = p7O_NQW(om->M); int Q16 = p7O_NQB(om->M); int vsz = sizeof(vector float); /* model configuration */ if (MPI_Pack(&om->M, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&atype, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->L, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->mode, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->nj, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); /* MSV Filter information */ if (MPI_Pack(&om->tbm_b, 1, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->tec_b, 1, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->tjb_b, 1, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->scale_b, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->base_b, 1, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->bias_b, 1, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); for (x = 0; x < K; x++) if (MPI_Pack( om->rbv[x], vsz*Q16, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); /* Viterbi Filter information */ if (MPI_Pack(&om->scale_w, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->base_w, 1, MPI_SHORT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->ddbound_w, 1, MPI_SHORT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->ncj_roundoff, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( om->twv, 8*vsz*Q8, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); for (x = 0; x < p7O_NXSTATES; x++) if (MPI_Pack( om->xw[x], p7O_NXTRANS, MPI_SHORT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); for (x = 0; x < K; x++) if (MPI_Pack( om->rwv[x], vsz*Q8, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); /* Forward/Backward information */ if (MPI_Pack( om->tfv, 8*vsz*Q4, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); for (x = 0; x < p7O_NXSTATES; x++) if (MPI_Pack( om->xf[x], p7O_NXTRANS, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); for (x = 0; x < K; x++) if (MPI_Pack( om->rfv[x], vsz*Q4, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); /* Forward/Backward information */ if (MPI_Pack( om->offs, p7_NOFFSETS, MPI_LONG_LONG_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->roff, 1, MPI_LONG_LONG_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->eoff, 1, MPI_LONG_LONG_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); /* Annotation information */ len = (om->name != NULL) ? strlen(om->name)+1 : 0; if (MPI_Pack(&len, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (len > 0) if (MPI_Pack( om->name, len, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); len = (om->acc != NULL) ? strlen(om->acc)+1 : 0; if (MPI_Pack(&len, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (len > 0) if (MPI_Pack( om->acc, len, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); len = (om->desc != NULL) ? strlen(om->desc)+1 : 0; if (MPI_Pack(&len, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (len > 0) if (MPI_Pack( om->desc, len, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); len = (om->rf != NULL) ? strlen(om->rf)+1 : 0; if (MPI_Pack(&len, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (len > 0) if (MPI_Pack( om->rf, len, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); len = (om->mm != NULL) ? strlen(om->mm)+1 : 0; if (MPI_Pack(&len, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (len > 0) if (MPI_Pack( om->mm, len, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); len = (om->cs != NULL) ? strlen(om->cs)+1 : 0; if (MPI_Pack(&len, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (len > 0) if (MPI_Pack( om->cs, len, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); len = (om->consensus != NULL) ? strlen(om->consensus)+1 : 0; if (MPI_Pack(&len, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (len > 0) if (MPI_Pack( om->consensus, len, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( om->evparam, p7_NEVPARAM, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( om->cutoff, p7_NCUTOFFS, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( om->compo, p7_MAXABET, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (*pos > n) ESL_EXCEPTION(eslEMEM, "buffer overflow"); return eslOK; } /* Function: p7_oprofile_MPIUnpack() * Synopsis: Unpacks an OPROFILE from an MPI buffer. * Incept: MSF, Wed Oct 21, 2009 [Janelia] * * Purpose: Unpack a newly allocated OPROFILE from MPI packed buffer * , starting from position <*pos>, where the total length * of the buffer in bytes is . * * Caller may or may not already know what alphabet the OPROFILE * is expected to be in. A reference to the current * alphabet is passed in . If the alphabet is unknown, * pass <*abc = NULL>, and when the OPROFILE is received, an * appropriate new alphabet object is allocated and passed * back to the caller via <*abc>. If the alphabet is * already known, <*abc> is that alphabet, and the new * OPROFILE's alphabet type is verified to agree with it. This * mechanism allows an application to let the first OPROFILE * determine the alphabet type for the application, while * still keeping the alphabet under the application's scope * of control. * * Returns: on success. <*pos> is updated to the position of * the next element in to unpack (if any). <*ret_om> * contains a newly allocated OPROFILE, which the caller is * responsible for free'ing. If <*abc> was passed as * , it now points to an object that * was allocated here; caller is responsible for free'ing * this. * * Returns if the OPROFILE is in a different * alphabet than <*abc> said to expect. In this case, * <*abc> is unchanged, <*buf> and <*nalloc> may have been * changed, and <*ret_om> is . * * Throws: on an MPI call failure. on allocation failure. * In either case, <*ret_om> is , and the state of * and <*pos> is undefined and should be considered to be corrupted. */ int p7_oprofile_MPIUnpack(char *buf, int n, int *pos, MPI_Comm comm, ESL_ALPHABET **abc, P7_OPROFILE **ret_om) { int status; int M, K, atype; int len; int x; int Q4, Q8, Q16; int vsz = sizeof(vector float); P7_OPROFILE *om = NULL; if (MPI_Unpack(buf, n, pos, &M, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &atype, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); /* Set or verify the alphabet */ if (*abc == NULL) { /* still unknown: set it, pass control of it back to caller */ if ((*abc = esl_alphabet_Create(atype)) == NULL) { status = eslEMEM; goto ERROR; } } else { /* already known: check it */ if ((*abc)->type != atype) { status = eslEINCOMPAT; goto ERROR; } } Q4 = p7O_NQF(M); Q8 = p7O_NQW(M); Q16 = p7O_NQB(M); if ((om = p7_oprofile_Create(M, *abc)) == NULL) { status = eslEMEM; goto ERROR; } om->M = M; K = (*abc)->Kp; /* model configuration */ if (MPI_Unpack(buf, n, pos, &om->L, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->mode, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->nj, 1, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); /* MSV Filter information */ if (MPI_Unpack(buf, n, pos, &om->tbm_b, 1, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->tec_b, 1, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->tjb_b, 1, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->scale_b, 1, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->base_b, 1, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->bias_b, 1, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); for (x = 0; x < K; x++) if (MPI_Unpack(buf, n, pos, om->rbv[x], vsz*Q16, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); /* Viterbi Filter information */ if (MPI_Unpack(buf, n, pos, &om->scale_w, 1, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->base_w, 1, MPI_SHORT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->ddbound_w, 1, MPI_SHORT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->ncj_roundoff, 1, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, om->twv, 8*vsz*Q8, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); for (x = 0; x < p7O_NXSTATES; x++) if (MPI_Unpack(buf, n, pos, om->xw[x], p7O_NXTRANS, MPI_SHORT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); for (x = 0; x < K; x++) if (MPI_Unpack(buf, n, pos, om->rwv[x], vsz*Q8, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); /* Forward/Backward information */ if (MPI_Unpack(buf, n, pos, om->tfv, 8*vsz*Q4, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); for (x = 0; x < p7O_NXSTATES; x++) if (MPI_Unpack(buf, n, pos, om->xf[x], p7O_NXTRANS, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); for (x = 0; x < K; x++) if (MPI_Unpack(buf, n, pos, om->rfv[x], vsz*Q4, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); /* Forward/Backward information */ if (MPI_Unpack(buf, n, pos, om->offs, p7_NOFFSETS, MPI_LONG_LONG_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->roff, 1, MPI_LONG_LONG_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->eoff, 1, MPI_LONG_LONG_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); /* Annotation information */ if (MPI_Unpack(buf, n, pos, &len, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (len > 0) { ESL_ALLOC(om->name, len); if (MPI_Unpack(buf, n, pos, om->name, len, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); om->name[len-1] = '\0'; } if (MPI_Unpack(buf, n, pos, &len, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (len > 0) { ESL_ALLOC(om->acc, len); if (MPI_Unpack(buf, n, pos, om->acc, len, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); om->acc[len-1] = '\0'; } if (MPI_Unpack(buf, n, pos, &len, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (len > 0) { ESL_ALLOC(om->desc, len); if (MPI_Unpack(buf, n, pos, om->desc, len, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); om->desc[len-1] = '\0'; } if (MPI_Unpack(buf, n, pos, &len, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (len > 0) { ESL_ALLOC(om->rf, len); if (MPI_Unpack(buf, n, pos, om->rf, len, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); om->rf[len-1] = '\0'; } if (MPI_Unpack(buf, n, pos, &len, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (len > 0) { ESL_ALLOC(om->mm, len); if (MPI_Unpack(buf, n, pos, om->mm, len, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); om->mm[len-1] = '\0'; } if (MPI_Unpack(buf, n, pos, &len, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (len > 0) { ESL_ALLOC(om->cs, len); if (MPI_Unpack(buf, n, pos, om->cs, len, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); om->cs[len-1] = '\0'; } if (MPI_Unpack(buf, n, pos, &len, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (len > 0) { ESL_ALLOC(om->consensus, len); if (MPI_Unpack(buf, n, pos, om->consensus, len, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); om->consensus[len-1] = '\0'; } if (MPI_Unpack(buf, n, pos, om->evparam, p7_NEVPARAM, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, om->cutoff, p7_NCUTOFFS, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, om->compo, p7_MAXABET, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); *ret_om = om; return eslOK; ERROR: if (om != NULL) p7_oprofile_Destroy(om); return status; } /* Function: p7_oprofile_MPIRecv() * Synopsis: Receives an OPROFILE as a work unit from an MPI sender. * Incept: MSF, Wed Oct 21, 2009 [Janelia] * * Purpose: Receive a work unit that consists of a single OPROFILE * sent by MPI (<0..nproc-1>, or * ) tagged as for MPI communicator . * * Work units are prefixed by a status code. If the unit's * code is and no errors are encountered, this * routine will return and a non- <*ret_om>. * If the unit's code is (a shutdown signal), * this routine returns and <*ret_om> is . * * Caller provides a working buffer <*buf> of size * <*nalloc> characters. These are passed by reference, so * that <*buf> can be reallocated and <*nalloc> increased * if necessary. As a special case, if <*buf> is and * <*nalloc> is 0, the buffer will be allocated * appropriately, but the caller is still responsible for * free'ing it. * * Caller may or may not already know what alphabet the OPROFILE * is expected to be in. A reference to the current * alphabet is passed in . If the alphabet is unknown, * pass <*abc = NULL>, and when the OPROFILE is received, an * appropriate new alphabet object is allocated and passed * back to the caller via <*abc>. If the alphabet is * already known, <*ret_abc> is that alphabet, and the new * OPROFILE's alphabet type is verified to agree with it. This * mechanism allows an application to let the first OPROFILE * determine the alphabet type for the application, while * still keeping the alphabet under the application's scope * of control. * * Returns: on success. <*ret_om> contains the received OPROFILE; * it is allocated here, and the caller is responsible for * free'ing it. <*buf> may have been reallocated to a * larger size, and <*nalloc> may have been increased. If * <*abc> was passed as , it now points to an * object that was allocated here; caller is * responsible for free'ing this. * * Returns if an end-of-data signal was received. * In this case, <*buf>, <*nalloc>, and <*abc> are left unchanged, * and <*ret_om> is . * * Returns if the OPROFILE is in a different alphabet * than <*abc> said to expect. In this case, <*abc> is unchanged, * <*buf> and <*nalloc> may have been changed, and <*ret_om> is * . * * Throws: on allocation error, in which case <*ret_om> is * . */ int p7_oprofile_MPIRecv(int source, int tag, MPI_Comm comm, char **buf, int *nalloc, ESL_ALPHABET **abc, P7_OPROFILE **ret_om) { int status; int code; P7_OPROFILE *om = NULL; int n; int pos; MPI_Status mpistatus; /* Probe first, because we need to know if our buffer is big enough. */ MPI_Probe(source, tag, comm, &mpistatus); MPI_Get_count(&mpistatus, MPI_PACKED, &n); /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* Receive the packed work unit */ MPI_Recv(*buf, n, MPI_PACKED, source, tag, comm, &mpistatus); /* Unpack it, looking at the status code prefix for EOD/EOK */ pos = 0; if (MPI_Unpack(*buf, n, &pos, &code, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (code == eslEOD) { *ret_om = NULL; return eslEOD; } return p7_oprofile_MPIUnpack(*buf, *nalloc, &pos, comm, abc, ret_om); ERROR: if (om != NULL) p7_oprofile_Destroy(om); return status; } /*----------------- end, P7_OPROFILE communication -------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ #ifdef p7MPI_BENCHMARK /* mpicc -g -Wall -L. -I. -L ../easel -I ../easel -D p7MPI_BENCHMARK -o benchmark-mpi mpi.c -lhmmer -leasel -lm qsub -N benchmark-mpi -j y -R y -b y -cwd -V -pe lam-mpi-tight 2 'mpirun C ./benchmark-mpi ~/notebook/1227-msp-statistics/Pfam.hmm > bench.out' qsub -N benchmark-mpi -j y -R y -b y -cwd -V -pe lam-mpi-tight 2 'mpirun C ./benchmark-mpi -b ~/notebook/1227-msp-statistics/Pfam.hmm > bench.out' */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_alphabet.h" #include "esl_random.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-b", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "baseline timing: don't send any HMMs", 0 }, { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "arrest after start: for debugging MPI under gdb", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for MPI communication"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_BG *bg = p7_bg_Create(abc); int my_rank; int nproc; char *buf = NULL; int nbuf = 0; int subtotalM = 0; int allM = 0; int stalling = esl_opt_GetBoolean(go, "--stall"); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &nproc); while (stalling); /* Master MPI process: */ if (my_rank == 0) { ESL_STOPWATCH *w = esl_stopwatch_Create(); P7_HMMFILE *hfp = NULL; P7_OPROFILE *om = NULL; P7_HMM *hmm = NULL; /* Read HMMs from a file. */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); esl_stopwatch_Start(w); while (p7_oprofile_ReadMSV(hfp, &abc, &om) == eslOK && p7_oprofile_ReadRest(hfp, om) == eslOK) { if (!esl_opt_GetBoolean(go, "-b")) p7_oprofile_MPISend(om, 1, 0, MPI_COMM_WORLD, &buf, &nbuf); /* 1 = dest; 0 = tag */ p7_hmm_Destroy(hmm); p7_oprofile_Destroy(om); } p7_oprofile_MPISend(NULL, 1, 0, MPI_COMM_WORLD, &buf, &nbuf); /* send the "no more HMMs" sign */ MPI_Reduce(&subtotalM, &allM, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); printf("total: %d\n", allM); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "CPU Time: "); esl_stopwatch_Destroy(w); } /* Worker MPI process: */ else { P7_OPROFILE *om_recd = NULL; while (p7_oprofile_MPIRecv(0, 0, MPI_COMM_WORLD, &buf, &nbuf, &abc, &om_recd) == eslOK) { subtotalM += om_recd->M; p7_oprofile_Destroy(om_recd); } MPI_Reduce(&subtotalM, &allM, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); } free(buf); p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); MPI_Finalize(); exit(0); } #endif /*p7MPI_BENCHMARK*/ /*---------------------- end, benchmark -------------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7MPI_TESTDRIVE static void utest_oprofileSendRecv(int my_rank, int nproc) { ESL_RANDOMNESS *r = esl_randomness_CreateFast(42); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OPROFILE *om2 = NULL; int M = 200; int L = 400; char *wbuf = NULL; int wn = 0; int i; char errbuf[eslERRBUFSIZE]; p7_hmm_Sample(r, M, abc, &hmm); /* master and worker's sampled profiles are identical */ bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); om = p7_oprofile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); p7_oprofile_Convert(gm, om); p7_bg_SetLength (bg, L); if (my_rank == 0) { for (i = 1; i < nproc; i++) { ESL_DPRINTF1(("Master: receiving test profile\n")); p7_oprofile_MPIRecv(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &wbuf, &wn, &abc, &om2); ESL_DPRINTF1(("Master: test profile received\n")); if (p7_oprofile_Compare(om, om2, 0.001, errbuf) != eslOK) p7_Die("Received profile not identical to what was sent\n%s", errbuf); p7_oprofile_Destroy(om2); } } else { ESL_DPRINTF1(("Worker %d: sending test profile\n", my_rank)); p7_oprofile_MPISend(om, 0, 0, MPI_COMM_WORLD, &wbuf, &wn); ESL_DPRINTF1(("Worker %d: test profile sent\n", my_rank)); } free(wbuf); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); return; } #endif /*p7MPI_TESTDRIVE*/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 4. Test driver. *****************************************************************/ #ifdef p7MPI_TESTDRIVE /* mpicc -o mpi_utest -g -Wall -I../easel -L../easel -I. -L. -Dp7MPI_TESTDRIVE mpi.c -lhmmer -leasel -lm * In an MPI environment: (qlogin -pe lam-mpi-tight 2; setenv JOB_ID ; setenv TMPDIR /tmp/.... * mpirun C ./mpi_utest */ #include "esl_getopts.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "arrest after start: for debugging MPI under gdb", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for mpi.c"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); int my_rank; int nproc; /* For debugging: stall until GDB can be attached */ if (esl_opt_GetBoolean(go, "--stall")) pause(); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &nproc); utest_oprofileSendRecv(my_rank, nproc); MPI_Finalize(); return 0; } #endif /*p7MPI_TESTDRIVE*/ /*---------------------- end, test driver -----------------------*/ #else /*!HAVE_MPI*/ /* If we don't have MPI compiled in, provide some nothingness to: * a. prevent Mac OS/X ranlib from bitching about .o file that "has no symbols" * b. prevent compiler from bitching about "empty compilation unit" * c. automatically pass the automated tests. */ void p7_mpi_DoAbsolutelyNothing(void) { return; } #if defined p7MPI_TESTDRIVE || p7MPI_BENCHMARK || p7MPI_EXAMPLE int main(void) { return 0; } #endif #endif /*HAVE_MPI*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_vmx/00MANIFEST0000664361611702660230000000274712473612613016215 0ustar wheelerteddy ================================================================ = Overall structure (P7_OPROFILE, P7_OMX) ================================================================ impl_vmx.h : declarations, including P7_OPROFILE, P7_OMX, macros, functions p7_oprofile.c : vectorized profile structure p7_omx.c : vectorized DP matrix io.c : i/o of vectorized profiles ================================================================ = Dynamic programming routines for scoring target sequences ================================================================ msvfilter.c : p7_MSVFilter() - main acceleration routine vitfilter.c : p7_ViterbiFilter() - secondary acceleration routine fwdback.c : p7_Forward() - Forward algorithm p7_Backward() - Backward algorithm p7_ForwardParser() - streamlined Forward used for first pass domain definition p7_BackwardParser() - streamlined Backward used for first pass domain definition ================================================================ = Postprocessing domains, alignments, and null2 model ================================================================ decoding.c : posterior decoding of Forward/Backward matrices stotrace.c : stochastic traceback, sampling paths from Forward matrices optacc.c : "optimal accuracy" alignment algorithm, using posterior decoding null2.c : null2 model for biased composition corrections hmmer-3.1b2/src/impl_vmx/impl_vmx.h0000664361611702660230000005137312473612613016727 0ustar wheelerteddy/* VMX optimized implementation of various MSV, Viterbi, and Forward * routines: structures, declarations, and macros. * * SRE, Sun Nov 25 11:23:02 2007 * SVN $Id: impl_vmx.h 4511 2013-07-08 19:05:40Z wheelert $ */ #ifndef P7_IMPL_VMX_INCLUDED #define P7_IMPL_VMX_INCLUDED #ifndef __APPLE_ALTIVEC__ #include #endif #include "p7_config.h" #include "esl_alphabet.h" #include "esl_random.h" #include "hmmer.h" /* In calculating Q, the number of vectors we need in a row, we have * to make sure there's at least 2, or a striped implementation fails. */ #define p7O_NQB(M) ( ESL_MAX(2, ((((M)-1) / 16) + 1))) /* 16 uchars */ #define p7O_NQW(M) ( ESL_MAX(2, ((((M)-1) / 8) + 1))) /* 8 words */ #define p7O_NQF(M) ( ESL_MAX(2, ((((M)-1) / 4) + 1))) /* 4 floats */ /***************************************************************** * 1. P7_OPROFILE: an optimized score profile *****************************************************************/ /* The OPROFILE is striped [Farrar07] and interleaved, as is the DP matrix. * For example, the layout of a profile for an M=14 model (xref J2/46): * * rsc[x] : striped blocks of M emissions, starting with q=0 * 1 11 1 1 * 1593 2604 371x 482x * * tsc: grouped in order of accession in DP for 7 transition scores; * starting at q=0 for all but the three transitions to M, which * are rotated by -1 and rightshifted. DD's follow separately, * starting at q=0. * * { 1 1 1 1 1 1 1 } * { 1593 x482 x482 x482 1593 1593 1593 } * { [tBMk] [tMM] [tIM] [tDM] [tMD] [tMI] [tII] } * * { 11 1 1 1 11 11 11 } * { 2604 1593 1593 1593 2604 2604 2604 } * { [tBMk] [tMM] [tIM] [tDM] [tMD] [tMI] [tII] } * * { 1 11 11 11 1 1 1 } * { 371x 2604 2604 2604 371x 371x 371x } * { [tBMk] [tMM] [tIM] [tDM] [tMD] [tMI] [tII] } * * { 1 1 1 1 1 1 1 } * { 482x 371x 371x 371x 482x 482x 482x } * { [tBMk] [tMM] [tIM] [tDM] [tMD] [tMI] [tII] } * * { 1 11 1 1 } * { 1593 2604 371x 482x } * { [TDD] [TDD] [TDD] [TDD] } * */ #define p7O_NXSTATES 4 /* special states stored: ENJC */ #define p7O_NXTRANS 2 /* special states all have 2 transitions: move, loop */ #define p7O_NTRANS 8 /* 7 core transitions + BMk entry */ enum p7o_xstates_e { p7O_E = 0, p7O_N = 1, p7O_J = 2, p7O_C = 3 }; enum p7o_xtransitions_e { p7O_MOVE = 0, p7O_LOOP = 1 }; enum p7o_tsc_e { p7O_BM = 0, p7O_MM = 1, p7O_IM = 2, p7O_DM = 3, p7O_MD = 4, p7O_MI = 5, p7O_II = 6, p7O_DD = 7 }; typedef struct p7_oprofile_s { /* MSVFilter uses scaled, biased uchars: 16x unsigned byte vectors */ vector unsigned char **rbv; /* match scores [x][q]: rm, rm[0] are allocated */ uint8_t tbm_b; /* constant B->Mk cost: scaled log 2/M(M+1) */ uint8_t tec_b; /* constant E->C cost: scaled log 0.5 */ uint8_t tjb_b; /* constant NCJ move cost: scaled log 3/(L+3) */ float scale_b; /* typically 3 / log2: scores scale to 1/3 bits */ uint8_t base_b; /* typically +190: offset of uchar scores */ uint8_t bias_b; /* positive bias to emission scores, make them >=0 */ /* ViterbiFilter uses scaled swords: 8x signed 16-bit integer vectors */ vector signed short **rwv; /* [x][q]: rw, rw[0] are allocated [Kp][Q8] */ vector signed short *twv; /* transition score blocks [8*Q8] */ int16_t xw[p7O_NXSTATES][p7O_NXTRANS]; /* NECJ state transition costs */ float scale_w; /* score units: typically 500 / log(2), 1/500 bits */ int16_t base_w; /* offset of sword scores: typically +12000 */ int16_t ddbound_w; /* threshold precalculated for lazy DD evaluation */ float ncj_roundoff; /* missing precision on NN,CC,JJ after rounding */ /* Forward, Backward use IEEE754 single-precision floats: 4x vectors */ vector float **rfv; /* [x][q]: rf, rf[0] are allocated [Kp][Q4] */ vector float *tfv; /* transition probability blocks [8*Q4] */ float xf[p7O_NXSTATES][p7O_NXTRANS]; /* NECJ transition costs */ /* Our actual vector mallocs, before we align the memory */ vector unsigned char *rbv_mem; vector signed short *rwv_mem; vector signed short *twv_mem; vector float *tfv_mem; vector float *rfv_mem; /* Disk offset information for hmmpfam's fast model retrieval */ off_t offs[p7_NOFFSETS]; /* p7_{MFP}OFFSET, or -1 */ /* Disk offset bookkeeping for h3f: */ off_t roff; /* record offset (start of record); -1 if none */ off_t eoff; /* offset to last byte of record; -1 if unknown */ /* Information, annotation copied from parent profile: */ char *name; /* unique name of model */ char *acc; /* unique accession of model, or NULL */ char *desc; /* brief (1-line) description of model, or NULL */ char *rf; /* reference line 1..M; *ref=0: unused */ char *mm; /* modelmask line 1..M; *ref=0: unused */ char *cs; /* consensus structure line 1..M, *cs=0: unused */ char *consensus; /* consensus residues for ali display, 1..M */ float evparam[p7_NEVPARAM]; /* parameters for determining E-values, or UNSET */ float cutoff[p7_NCUTOFFS]; /* per-seq/per-dom bit cutoffs, or UNSET */ float compo[p7_MAXABET]; /* per-model HMM filter composition, or UNSET */ const ESL_ALPHABET *abc; /* copy of ptr to alphabet information */ /* Information about current configuration, size, allocation */ int L; /* current configured target seq length */ int M; /* model length */ int max_length; /* upper bound on emitted seq length */ int allocM; /* maximum model length currently allocated for */ int allocQ4; /* p7_NQF(allocM): alloc size for tf, rf */ int allocQ8; /* p7_NQW(allocM): alloc size for tw, rw */ int allocQ16; /* p7_NQB(allocM): alloc size for rb */ int mode; /* currently must be p7_LOCAL */ float nj; /* expected # of J's: 0 or 1, uni vs. multihit */ int clone; /* this optimized profile structure is just a copy */ /* of another profile structre. all pointers of */ /* this structure should not be freed. */ } P7_OPROFILE; typedef struct { int count; /* number of objects in the block */ int listSize; /* maximum number elements in the list */ P7_OPROFILE **list; /* array of objects */ } P7_OM_BLOCK; /* retrieve match odds ratio [k][x] * this gets used in p7_alidisplay.c, when we're deciding if a residue is conserved or not */ static inline float p7_oprofile_FGetEmission(const P7_OPROFILE *om, int k, int x) { union { vector float v; float p[4]; } u; int Q = p7O_NQF(om->M); int q = ((k-1) % Q); int r = (k-1)/Q; u.v = om->rfv[x][q]; return u.p[r]; } /***************************************************************** * 2. P7_OMX: a one-row dynamic programming matrix *****************************************************************/ enum p7x_scells_e { p7X_M = 0, p7X_D = 1, p7X_I = 2 }; #define p7X_NSCELLS 3 /* Besides ENJBC states, we may also store a rescaling factor on each row */ enum p7x_xcells_e { p7X_E = 0, p7X_N = 1, p7X_J = 2, p7X_B = 3, p7X_C = 4, p7X_SCALE = 5 }; #define p7X_NXCELLS 6 /* * * dpf[][] * to access M(i,k) for i=0,1..L; k=1..M: dpf[i][(k-1)/4 + p7X_M].element[(k-1)%4] * * xmx[] arrays for individual special states: * xmx[ENJBC] = [0 1 2 3][4 5 6 7]..[L-2 L-1 L x] XRQ >= (L/4)+1 * to access B[i] for example, for i=0..L: xmx[B][i/4].x[i%4] (quad i/4; element i%4). */ typedef struct p7_omx_s { int M; /* current actual model dimension */ int L; /* current actual sequence dimension */ /* The main dynamic programming matrix for M,D,I states */ vector float **dpf; /* striped DP matrix for [0,1..L][0..Q-1][MDI], float vectors */ vector signed short **dpw; /* striped DP matrix for [0,1..L][0..Q-1][MDI], sword vectors */ vector unsigned char **dpb; /* striped DP matrix for [0,1..L][0..Q-1] uchar vectors */ void *dp_mem; /* DP memory shared by , , */ int allocR; /* current allocated # rows in dp{uf}. allocR >= validR >= L+1 */ int validR; /* current # of rows actually pointing at DP memory */ int allocQ4; /* current set row width in quads: allocQ4*4 >= M */ int allocQ8; /* current set row width in octets: allocQ8*8 >= M */ int allocQ16; /* current set row width in 16-mers: allocQ16*16 >= M */ size_t ncells; /* current allocation size of , in accessible cells */ /* The X states (for full,parser; or NULL, for scorer) */ float *xmx; /* logically [0.1..L][ENJBCS]; indexed [i*p7X_NXCELLS+s] */ void *x_mem; /* X memory before 16-byte alignment */ int allocXR; /* # of rows allocated in each xmx[] array; allocXR >= L+1 */ float totscale; /* log of the product of all scale factors (0.0 if unscaled) */ int has_own_scales; /* TRUE to use own scale factors; FALSE if scales provided */ /* Parsers,scorers only hold a row at a time, so to get them to dump full matrix, it * must be done during a DP calculation, after each row is calculated */ int debugging; /* TRUE if we're in debugging mode */ FILE *dfp; /* output stream for diagnostics */ } P7_OMX; /* ?MXo(q) access macros work for either uchar or float, so long as you * init your "dp" to point to the appropriate array. */ #define MMXo(q) (dp[(q) * p7X_NSCELLS + p7X_M]) #define DMXo(q) (dp[(q) * p7X_NSCELLS + p7X_D]) #define IMXo(q) (dp[(q) * p7X_NSCELLS + p7X_I]) #define XMXo(i,s) (xmx[(i) * p7X_NXCELLS + s]) /* and this version works with a ptr to the approp DP row. */ #define MMO(dp,q) ((dp)[(q) * p7X_NSCELLS + p7X_M]) #define DMO(dp,q) ((dp)[(q) * p7X_NSCELLS + p7X_D]) #define IMO(dp,q) ((dp)[(q) * p7X_NSCELLS + p7X_I]) static inline float p7_omx_FGetMDI(const P7_OMX *ox, int s, int i, int k) { union { vector float v; float p[4]; } u; int Q = p7O_NQF(ox->M); int q = p7X_NSCELLS * ((k-1) % Q) + s; int r = (k-1)/Q; u.v = ox->dpf[i][q]; return u.p[r]; } static inline void p7_omx_FSetMDI(const P7_OMX *ox, int s, int i, int k, float val) { union { vector float v; float p[4]; } u; int Q = p7O_NQF(ox->M); int q = p7X_NSCELLS * ((k-1) % Q) + s; int r = (k-1)/Q; u.v = ox->dpf[i][q]; u.p[r] = val; ox->dpf[i][q] = u.v; } /***************************************************************** * 3. Declarations of the external API. *****************************************************************/ /* p7_omx.c */ extern P7_OMX *p7_omx_Create(int allocM, int allocL, int allocXL); extern int p7_omx_GrowTo(P7_OMX *ox, int allocM, int allocL, int allocXL); extern int p7_omx_FDeconvert(P7_OMX *ox, P7_GMX *gx); extern int p7_omx_Reuse (P7_OMX *ox); extern void p7_omx_Destroy(P7_OMX *ox); extern int p7_omx_SetDumpMode(FILE *fp, P7_OMX *ox, int truefalse); extern int p7_omx_DumpMFRow(P7_OMX *ox, int rowi, uint8_t xE, uint8_t xN, uint8_t xJ, uint8_t xB, uint8_t xC); extern int p7_omx_DumpVFRow(P7_OMX *ox, int rowi, int16_t xE, int16_t xN, int16_t xJ, int16_t xB, int16_t xC); extern int p7_omx_DumpFBRow(P7_OMX *ox, int logify, int rowi, int width, int precision, float xE, float xN, float xJ, float xB, float xC); /* p7_oprofile.c */ extern P7_OPROFILE *p7_oprofile_Create(int M, const ESL_ALPHABET *abc); extern int p7_oprofile_IsLocal(const P7_OPROFILE *om); extern void p7_oprofile_Destroy(P7_OPROFILE *om); extern size_t p7_oprofile_Sizeof(P7_OPROFILE *om); extern P7_OPROFILE *p7_oprofile_Copy(P7_OPROFILE *om); extern P7_OPROFILE *p7_oprofile_Clone(const P7_OPROFILE *om); extern int p7_oprofile_UpdateFwdEmissionScores(P7_OPROFILE *om, P7_BG *bg, float *fwd_emissions, float *sc_arr); extern int p7_oprofile_Convert(const P7_PROFILE *gm, P7_OPROFILE *om); extern int p7_oprofile_ReconfigLength (P7_OPROFILE *om, int L); extern int p7_oprofile_ReconfigMSVLength (P7_OPROFILE *om, int L); extern int p7_oprofile_ReconfigRestLength(P7_OPROFILE *om, int L); extern int p7_oprofile_ReconfigMultihit (P7_OPROFILE *om, int L); extern int p7_oprofile_ReconfigUnihit (P7_OPROFILE *om, int L); extern int p7_oprofile_Dump(FILE *fp, const P7_OPROFILE *om); extern int p7_oprofile_Sample(ESL_RANDOMNESS *r, const ESL_ALPHABET *abc, const P7_BG *bg, int M, int L, P7_HMM **opt_hmm, P7_PROFILE **opt_gm, P7_OPROFILE **ret_om); extern int p7_oprofile_Compare(const P7_OPROFILE *om1, const P7_OPROFILE *om2, float tol, char *errmsg); extern int p7_profile_SameAsMF(const P7_OPROFILE *om, P7_PROFILE *gm); extern int p7_profile_SameAsVF(const P7_OPROFILE *om, P7_PROFILE *gm); extern int p7_oprofile_GetFwdTransitionArray(const P7_OPROFILE *om, int type, float *arr ); extern int p7_oprofile_GetSSVEmissionScoreArray(const P7_OPROFILE *om, uint8_t *arr ); extern int p7_oprofile_GetFwdEmissionScoreArray(const P7_OPROFILE *om, float *arr ); extern int p7_oprofile_GetFwdEmissionArray(const P7_OPROFILE *om, P7_BG *bg, float *arr ); /* decoding.c */ extern int p7_Decoding (const P7_OPROFILE *om, const P7_OMX *oxf, P7_OMX *oxb, P7_OMX *pp); extern int p7_DomainDecoding(const P7_OPROFILE *om, const P7_OMX *oxf, const P7_OMX *oxb, P7_DOMAINDEF *ddef); /* fwdback.c */ extern int p7_Forward (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *fwd, float *opt_sc); extern int p7_ForwardParser (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *fwd, float *opt_sc); extern int p7_Backward (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc); extern int p7_BackwardParser(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc); /* io.c */ extern int p7_oprofile_Write(FILE *ffp, FILE *pfp, P7_OPROFILE *om); extern int p7_oprofile_ReadMSV (P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OPROFILE **ret_om); extern int p7_oprofile_ReadInfoMSV(P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OPROFILE **ret_om); extern int p7_oprofile_ReadBlockMSV(P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OM_BLOCK *hmmBlock); extern int p7_oprofile_ReadRest(P7_HMMFILE *hfp, P7_OPROFILE *om); extern int p7_oprofile_Position(P7_HMMFILE *hfp, off_t offset); extern P7_OM_BLOCK *p7_oprofile_CreateBlock(int size); extern void p7_oprofile_DestroyBlock(P7_OM_BLOCK *block); /* msvfilter.c */ extern int p7_MSVFilter (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc); extern int p7_SSVFilter_longtarget(const ESL_DSQ *dsq, int L, P7_OPROFILE *om, P7_OMX *ox, const P7_SCOREDATA *msvdata, P7_BG *bg, double P, P7_HMM_WINDOWLIST *windowlist); /* null2.c */ extern int p7_Null2_ByExpectation(const P7_OPROFILE *om, const P7_OMX *pp, float *null2); extern int p7_Null2_ByTrace (const P7_OPROFILE *om, const P7_TRACE *tr, int zstart, int zend, P7_OMX *wrk, float *null2); /* optacc.c */ extern int p7_OptimalAccuracy(const P7_OPROFILE *om, const P7_OMX *pp, P7_OMX *ox, float *ret_e); extern int p7_OATrace (const P7_OPROFILE *om, const P7_OMX *pp, const P7_OMX *ox, P7_TRACE *tr); /* stotrace.c */ extern int p7_StochasticTrace(ESL_RANDOMNESS *rng, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *ox, P7_TRACE *tr); /* vitfilter.c */ extern int p7_ViterbiFilter(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc); extern int p7_ViterbiFilter_longtarget(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float filtersc, double P, P7_HMM_WINDOWLIST *windowlist); /* vitscore.c */ extern int p7_ViterbiScore (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc); /***************************************************************** * 3. Implementation specific initialization *****************************************************************/ static inline void impl_Init(void) { } static inline void impl_ThreadInit(void) { } #endif /* P7_IMPL_VMX_INCLUDED */ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ /* * Currently (and this remains in flux as of 14 Dec 07) an optimized * implementation is required to provide an MSVFilter(), * ViterbiFilter() and a ForwardFilter() implementation. A call to * p7_oprofile_Convert() makes an optimized profile that works for * all filters. * * Any "Filter" returns a score may be an approximation (with * characterized or at least characterizable error), and which may * have limited upper range, such that high scores are returned as * eslINFINITY. Additionally, Filters might only work on local * alignment modes, because they are allowed to make assumptions about * the range of scores. * * Here, MSVFilter() and ViterbiFilter() are 8-bit lspace * implementations with limited precision and limited range (max 20 * bits); ForwardFilter() is a pspace float implementation with * correct precision and limited range (max ~127 bits). Both require * local mode models. * * An optimized implementation may also provide other optimized * routines. It provides specialized Convert*() functions for these, * which may no-op (if the OPROFILE already suffices), or may * overwrite parts of the OPROFILE that Filters or other routines * might need. Therefore, after using a "bonus" function, a fresh * Convert() will be needed before a Filter() is called again. This * API is tentative. * * For example, here, ViterbiScore() is a 32-bit lspace float VMX * implementation of the Viterbi algorithm. * * A "Score" function might be an additional target for optimization, * for example. A "Score" function returns a correct score with full * floating-point precision and range, and works for any mode model. * * In the generic implementation, profile scores are 32-bit floating * point log-odds scores. In an optimized implementation, internally, * profile scores can be of any type, and may be in log space (lspace) * or probability space (pspace). (Calculations in probability space * are useful in the Forward algorithm, but always limit range.) A * shorthand of "lspace uchar" means log-odds scores stored as * unsigned chars, for example; "pspace float" means odds ratios * stored as floats. * * A note on memory alignment: malloc() is required to return a * pointer "suitably aligned so that it may be aligned to a pointer of * any type of object" (C99 7.20.3). vectors are 128-bits wide, * so malloc() ought to return a pointer aligned on a 16-byte * boundary. However, this is not the case for glibc, and apparently * other system libraries. Google turns up threads of arguments * between glibc and gcc developers over whose problem this is; this * argument has apparently not been resolved, and is of no help. * Here, we manually align the relevant pointers by overallocating in * *_mem with malloc, then arithmetically manipulating the address to * mask off (~0xf). */ hmmer-3.1b2/src/impl_vmx/msvfilter.c0000664361611702660230000010416412473612614017100 0ustar wheelerteddy/* The MSV filter implementation; VMX version. * * A "filter" is a one-row, O(M), DP implementation that calculates an * approximated nat score (i.e. in limited precision - here, uchar) * and may have limited numeric range. It will return if * its numeric range is exceeded, in which case the caller will have * to obtain the score by another (probably slower) method. * * Contents: * 1. p7_MSVFilter() implementation * 2. Benchmark driver * 3. Unit tests * 4. Test driver * 5. Example * 6. Copyright and license information * * SRE, Sun Nov 25 11:26:48 2007 [Casa de Gatos] * SVN $Id: msvfilter.c 4699 2014-07-03 14:54:25Z wheelert $ */ #include "p7_config.h" #include #include #ifndef __APPLE_ALTIVEC__ #include #endif #include "easel.h" #include "esl_vmx.h" #include "esl_gumbel.h" #include "hmmer.h" #include "impl_vmx.h" /***************************************************************** * 1. The p7_MSVFilter() DP implementation. *****************************************************************/ /* Function: p7_MSVFilter() * Synopsis: Calculates MSV score, vewy vewy fast, in limited precision. * Incept: SRE, Wed Dec 26 15:12:25 2007 [Janelia] * * Purpose: Calculates an approximation of the MSV score for sequence * of length residues, using optimized profile , * and a preallocated one-row DP matrix . Return the * estimated MSV score (in nats) in . * * Score may overflow (and will, on high-scoring * sequences), but will not underflow. * * The model may be in any mode, because only its match * emission scores will be used. The MSV filter inherently * assumes a multihit local mode, and uses its own special * state transition scores, not the scores in the profile. * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * ret_sc - RETURN: MSV score (in nats) * * Note: We misuse the matrix here, using only a third of the * first dp row, accessing it as rather than * in triplets via <{MDI}MX(q)> macros, since we only need * to store M state values. We know that if was big * enough for normal DP calculations, it must be big enough * to hold the MSVFilter calculation. * * Returns: on success. * if the score overflows the limited range; in * this case, this is a high-scoring hit. * * Throws: if allocation is too small. */ int p7_MSVFilter(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc) { vector unsigned char mpv; /* previous row values */ vector unsigned char xEv; /* E state: keeps max for Mk->E as we go */ vector unsigned char xBv; /* B state: splatted vector of B[i-1] for B->Mk calculations */ vector unsigned char sv; /* temp storage of 1 curr row value in progress */ vector unsigned char biasv; /* emission bias in a vector */ uint8_t xJ; /* special states' scores */ int i; /* counter over sequence positions 1..L */ int q; /* counter over vectors 0..nq-1 */ int Q = p7O_NQB(om->M); /* segment length: # of vectors */ vector unsigned char *dp; /* we're going to use dp[0][0..q..Q-1], not {MDI}MX(q) macros*/ vector unsigned char *rsc; /* will point at om->rbv[x] for residue x[i] */ vector unsigned char zerov; /* vector of zeros */ vector unsigned char xJv; /* vector for states score */ vector unsigned char tjbmv; /* vector for B->Mk cost */ vector unsigned char tecv; /* vector for E->C cost */ vector unsigned char basev; /* offset for scores */ vector unsigned char ceilingv; /* saturateed simd value used to test for overflow */ vector unsigned char tempv; /* Check that the DP matrix is ok for us. */ if (Q > ox->allocQ16) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small"); ox->M = om->M; /* Initialization. In offset unsigned arithmetic, -infinity is 0, and 0 is om->base. */ dp = ox->dpb[0]; for (q = 0; q < Q; q++) dp[q] = vec_splat_u8(0); xJ = 0; biasv = esl_vmx_set_u8(om->bias_b); zerov = vec_splat_u8(0); /* saturate simd register for overflow test */ tempv = vec_splat_u8(1); ceilingv = (vector unsigned char)vec_cmpeq(biasv, biasv); ceilingv = vec_subs(ceilingv, biasv); ceilingv = vec_subs(ceilingv, tempv); basev = esl_vmx_set_u8((int8_t) om->base_b); tecv = esl_vmx_set_u8((int8_t) om->tec_b); tjbmv = esl_vmx_set_u8((int8_t) om->tjb_b + (int8_t) om->tbm_b); xJv = vec_subs(biasv, biasv); xBv = vec_subs(basev, tjbmv); #if p7_DEBUGGING if (ox->debugging) { unsigned char xB; vec_ste(xBv, 0, &xB); vec_ste(xJv, 0, &xJ); p7_omx_DumpMFRow(ox, 0, 0, 0, xJ, xB, xJ); } #endif for (i = 1; i <= L; i++) { rsc = om->rbv[dsq[i]]; xEv = vec_splat_u8(0); // xBv = vec_sub(xBv, tbmv); /* Right shifts by 1 byte. 4,8,12,x becomes x,4,8,12. * Because ia32 is littlendian, this means a left bit shift. * Zeros shift on automatically, which is our -infinity. */ mpv = vec_sld(zerov, dp[Q-1], 15); for (q = 0; q < Q; q++) { /* Calculate new MMXo(i,q); don't store it yet, hold it in sv. */ sv = vec_max(mpv, xBv); sv = vec_adds(sv, biasv); sv = vec_subs(sv, *rsc); rsc++; xEv = vec_max(xEv, sv); mpv = dp[q]; /* Load {MDI}(i-1,q) into mpv */ dp[q] = sv; /* Do delayed store of M(i,q) now that memory is usable */ } /* Now the "special" states, which start from Mk->E (->C, ->J->B) * Use rotates instead of shifts so when the last max has completed, * all elements of the simd register will contain the max value. */ tempv = vec_sld(xEv, xEv, 1); xEv = vec_max(xEv, tempv); tempv = vec_sld(xEv, xEv, 2); xEv = vec_max(xEv, tempv); tempv = vec_sld(xEv, xEv, 4); xEv = vec_max(xEv, tempv); tempv = vec_sld(xEv, xEv, 8); xEv = vec_max(xEv, tempv); /* immediately detect overflow */ if (vec_any_gt(xEv, ceilingv)) { *ret_sc = eslINFINITY; return eslERANGE; } xEv = vec_subs(xEv, tecv); xJv = vec_max(xJv,xEv); xBv = vec_max(basev, xJv); xBv = vec_subs(xBv, tjbmv); #if p7_DEBUGGING if (ox->debugging) { unsigned char xB, xE; vec_ste(xBv, 0, &xB); vec_ste(xEv, 0, &xE); vec_ste(xJv, 0, &xJ); p7_omx_DumpMFRow(ox, i, xE, 0, xJ, xB, xJ); } #endif } /* end loop over sequence residues 1..L */ /* finally C->T, and add our missing precision on the NN,CC,JJ back */ vec_ste(xJv, 0, &xJ); *ret_sc = ((float) (xJ - om->tjb_b) - (float) om->base_b); *ret_sc /= om->scale_b; *ret_sc -= 3.0; /* that's ~ L \log \frac{L}{L+3}, for our NN,CC,JJ */ return eslOK; } /*------------------ end, p7_MSVFilter() ------------------------*/ /* Function: p7_SSVFilter_longtarget() * Synopsis: Finds windows with SSV scores above some threshold (vewy vewy fast, in limited precision) * * Purpose: Calculates an approximation of the SSV (single ungapped diagonal) * score for regions of sequence of length residues, using * optimized profile , and a preallocated one-row DP matrix , * and captures the positions at which such regions exceed the score * required to be significant in the eyes of the calling function, * which depends on the and

(usually p=0.02 for nhmmer). * Note that this variant performs only SSV computations, never * passing through the J state - the score required to pass SSV at * the default threshold (or less restrictive) is sufficient to * pass MSV in essentially all DNA models we've tested. * * Above-threshold diagonals are captured into a preallocated list * . Rather than simply capturing positions at which a * score threshold is reached, this function establishes windows * around those high-scoring positions, using scores in . * These windows can be merged by the calling function. * * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * msvdata - compact representation of substitution scores, for backtracking diagonals * bg - the background model, required for translating a P-value threshold into a score threshold * P - p-value below which a region is captured as being above threshold * windowlist - preallocated container for all hits (resized if necessary) * * * Note: We misuse the matrix here, using only a third of the * first dp row, accessing it as rather than * in triplets via <{MDI}MX(q)> macros, since we only need * to store M state values. We know that if was big * enough for normal DP calculations, it must be big enough * to hold the MSVFilter calculation. * * Returns: on success. * * Throws: if allocation is too small. */ int p7_SSVFilter_longtarget(const ESL_DSQ *dsq, int L, P7_OPROFILE *om, P7_OMX *ox, const P7_SCOREDATA *ssvdata, P7_BG *bg, double P, P7_HMM_WINDOWLIST *windowlist) { vector unsigned char mpv; /* previous row values */ vector unsigned char xEv; /* E state: keeps max for Mk->E as we go */ vector unsigned char xBv; /* B state: splatted vector of B[i-1] for B->Mk calculations */ vector unsigned char sv; /* temp storage of 1 curr row value in progress */ vector unsigned char biasv; /* emission bias in a vector */ uint8_t xJ; /* special states' scores */ int i; /* counter over sequence positions 1..L */ int q; /* counter over vectors 0..nq-1 */ int Q = p7O_NQB(om->M); /* segment length: # of vectors */ vector unsigned char *dp = ox->dpb[0]; /* we're going to use dp[0][0..q..Q-1], not {MDI}MX(q) macros*/ vector unsigned char *rsc; /* will point at om->rbv[x] for residue x[i] */ vector unsigned char zerov; /* vector of zeros */ vector unsigned char tecv; /* vector for E->C cost */ vector unsigned char tjbmv; /* vector for [JN]->B->M move cost */ vector unsigned char basev; /* offset for scores */ int status; int k; int n; int end; int rem_sc; int start; int target_end; int target_start; int max_end; int max_sc; int sc; int pos_since_max; float ret_sc; union { vector unsigned char v; uint8_t b[16]; } u; /* * Computing the score required to let P meet the F1 prob threshold * In original code, converting from a scaled int MSV * score S (the score getting to state E) to a probability goes like this: * usc = S - om->tec_b - om->tjb_b - om->base_b; * usc /= om->scale_b; * usc -= 3.0; * P = f ( (usc - nullsc) / eslCONST_LOG2 , mu, lambda) * and we're computing the threshold usc, so reverse it: * (usc - nullsc) / eslCONST_LOG2 = inv_f( P, mu, lambda) * usc = nullsc + eslCONST_LOG2 * inv_f( P, mu, lambda) * usc += 3 * usc *= om->scale_b * S = usc + om->tec_b + om->tjb_b + om->base_b * * Here, I compute threshold with length model based on max_length. Doesn't * matter much - in any case, both the bg and om models will change with roughly * 1 bit for each doubling of the length model, so they offset. */ float nullsc; float invP = esl_gumbel_invsurv(P, om->evparam[p7_MMU], om->evparam[p7_MLAMBDA]); vector unsigned char sc_threshv; /* pushes value to saturation if it's above pthresh */ int sc_thresh; /* Check that the DP matrix is ok for us. */ if (Q > ox->allocQ16) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small"); ox->M = om->M; p7_bg_SetLength(bg, om->max_length); p7_oprofile_ReconfigMSVLength(om, om->max_length); p7_bg_NullOne (bg, dsq, om->max_length, &nullsc); sc_thresh = (int) ceil( ( ( nullsc + (invP * eslCONST_LOG2) + 3.0 ) * om->scale_b ) + om->base_b + om->tec_b + om->tjb_b ); sc_threshv = esl_vmx_set_u8( (int8_t)sc_thresh - 1); /* Initialization. In offset unsigned arithmetic, -infinity is 0, and 0 is om->base. */ biasv = esl_vmx_set_u8(om->bias_b); for (q = 0; q < Q; q++) dp[q] = vec_splat_u8(0); xJ = 0; zerov = vec_splat_u8(0); basev = esl_vmx_set_u8((int8_t) om->base_b); tecv = esl_vmx_set_u8((int8_t) om->tec_b); tjbmv = esl_vmx_set_u8((int8_t) om->tjb_b + (int8_t) om->tbm_b); xBv = vec_subs(basev, tjbmv); for (i = 1; i <= L; i++) { rsc = om->rbv[dsq[i]]; xEv = vec_splat_u8(0); /* Right shifts by 1 byte. 4,8,12,x becomes x,4,8,12. * Because ia32 is littlendian, this means a left bit shift. * Zeros shift on automatically, which is our -infinity. */ mpv = vec_sld(zerov, dp[Q-1], 15); for (q = 0; q < Q; q++) { /* Calculate new MMXo(i,q); don't store it yet, hold it in sv. */ sv = vec_max(mpv, xBv); sv = vec_adds(sv, biasv); sv = vec_subs(sv, *rsc); rsc++; xEv = vec_max(xEv, sv); mpv = dp[q]; /* Load {MDI}(i-1,q) into mpv */ dp[q] = sv; /* Do delayed store of M(i,q) now that memory is usable */ } if (vec_any_gt(xEv, sc_threshv) ) { //hit pthresh, so add position to list and reset values //figure out which model state hit threshold end = -1; rem_sc = -1; for (q = 0; q < Q; q++) { /// Unpack and unstripe, so we can find the state that exceeded pthresh u.v = dp[q]; for (k = 0; k < 16; k++) { // unstripe //(q+Q*k+1) is the model position k at which the xE score is found if (u.b[k] >= sc_thresh && u.b[k] > rem_sc && (q+Q*k+1) <= om->M) { end = (q+Q*k+1); rem_sc = u.b[k]; } } dp[q] = vec_splat_u8(0); // while we're here ... this will cause values to get reset to xB in next dp iteration } //recover the diagonal that hit threshold start = end; target_end = target_start = i; sc = rem_sc; while (rem_sc > om->base_b - om->tjb_b - om->tbm_b) { rem_sc -= om->bias_b - ssvdata->ssv_scores[start*om->abc->Kp + dsq[target_start]]; --start; --target_start; //if ( start == 0 || target_start==0) break; } start++; target_start++; //extend diagonal further with single diagonal extension k = end+1; n = target_end+1; max_end = target_end; max_sc = sc; pos_since_max = 0; while (kM && n<=L) { sc += om->bias_b - ssvdata->ssv_scores[k*om->abc->Kp + dsq[n]]; if (sc >= max_sc) { max_sc = sc; max_end = n; pos_since_max=0; } else { pos_since_max++; if (pos_since_max == 5) break; } k++; n++; } end += (max_end - target_end); target_end = max_end; ret_sc = ((float) (max_sc - om->tjb_b) - (float) om->base_b); ret_sc /= om->scale_b; ret_sc -= 3.0; // that's ~ L \log \frac{L}{L+3}, for our NN,CC,JJ p7_hmmwindow_new( windowlist, 0, // sequence_id; used in the FM-based filter, but not here target_start, // position in the target at which the diagonal starts 0, // position in the target fm_index at which diagonal starts; not used here, just in FM-based filter end, // position in the model at which the diagonal ends end-start+1 , // length of diagonal ret_sc, // score of diagonal p7_NOCOMPLEMENT, // always p7_NOCOMPLEMENT here; varies in FM-based filter L ); i = target_end; // skip forward } } /* end loop over sequence residues 1..L */ return eslOK; ERROR: ESL_EXCEPTION(eslEMEM, "Error allocating memory for hit list\n"); } /*------------------ end, p7_SSVFilter_longtarget() ------------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ /* The benchmark driver has some additional non-benchmarking options * to facilitate small-scale (by-eye) comparison of MSV scores against * other implementations, for debugging purposes. * * The -c option compares against p7_GMSV() scores. This allows * measuring the error inherent in the VMX implementation's reduced * precision (p7_MSVFilter() runs in uint8_t; p7_GMSV() uses floats). * * The -x option compares against an emulation that should give * exactly the same scores. The emulation is achieved by jiggering the * fp scores in a generic profile to disallow gaps, have the same * rounding and precision as the uint8_t's MSVFilter() is using, and * to make the same post-hoc corrections for the NN, CC, JJ * contributions to the final nat score; under these contrived * circumstances, p7_GViterbi() gives the same scores as * p7_MSVFilter(). * * For using either -c or -x, you probably also want to limit the * number of generated target sequences, using -N10 or -N100 for * example. */ #ifdef p7MSVFILTER_BENCHMARK /* gcc -o msvfilter-benchmark -std=gnu99 -g -Wall -maltivec -I.. -L.. -I../../easel -L../../easel -Dp7MSVFILTER_BENCHMARK msvfilter.c -lhmmer -leasel -lm icc -o msvfilter-benchmark -O3 -static -I.. -L.. -I../../easel -L../../easel -Dp7MSVFILTER_BENCHMARK msvfilter.c -lhmmer -leasel -lm ./benchmark-msvfilter runs benchmark ./benchmark-msvfilter -N100 -c compare scores to generic impl ./benchmark-msvfilter -N100 -x compare scores to exact emulation */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for MSVFilter() implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc1, sc2; double base_time, bench_time, Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); if (esl_opt_GetBoolean(go, "-x")) p7_profile_SameAsMF(om, gm); ox = p7_omx_Create(gm->M, 0, 0); gx = p7_gmx_Create(gm->M, L); /* Get a baseline time: how long it takes just to generate the sequences */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_MSVFilter (dsq, L, om, ox, &sc1); /* -c option: compare generic to fast score */ if (esl_opt_GetBoolean(go, "-c")) { p7_GMSV (dsq, L, gm, gx, 2.0, &sc2); printf("%.4f %.4f\n", sc1, sc2); } /* -x option: compare generic to fast score in a way that should give exactly the same result */ if (esl_opt_GetBoolean(go, "-x")) { p7_GViterbi(dsq, L, gm, gx, &sc2); sc2 /= om->scale_b; if (om->mode == p7_UNILOCAL) sc2 -= 2.0; /* that's ~ L \log \frac{L}{L+2}, for our NN,CC,JJ */ else if (om->mode == p7_LOCAL) sc2 -= 3.0; /* that's ~ L \log \frac{L}{L+3}, for our NN,CC,JJ */ printf("%.4f %.4f\n", sc1, sc2); } } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7MSVFILTER_BENCHMARK*/ /*------------------ end, benchmark driver ----------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7MSVFILTER_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" /* * We can check that scores are identical (within machine error) to * scores of generic DP with scores rounded the same way. Do this for * a random model of length , for test sequences of length . * * We assume that we don't accidentally generate a high-scoring random * sequence that overflows MSVFilter()'s limited range. * */ static void utest_msv_filter(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *ox = p7_omx_Create(M, 0, 0); P7_GMX *gx = p7_gmx_Create(M, L); float sc1, sc2; p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om); p7_profile_SameAsMF(om, gm); #if 0 p7_oprofile_Dump(stdout, om); //dumps the optimized profile p7_omx_SetDumpMode(stdout, ox, TRUE); //makes the fast DP algorithms dump their matrices #endif while (N--) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_MSVFilter(dsq, L, om, ox, &sc1); p7_GViterbi (dsq, L, gm, gx, &sc2); #if 0 p7_gmx_Dump(stdout, gx, p7_DEFAULT); //dumps a generic DP matrix #endif sc2 = sc2 / om->scale_b - 3.0f; if (fabs(sc1-sc2) > 0.001) esl_fatal("msv filter unit test failed: scores differ (%.2f, %.2f)", sc1, sc2); } free(dsq); p7_hmm_Destroy(hmm); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); } #endif /*p7MSVFILTER_TESTDRIVE*/ /*-------------------- end, unit tests --------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7MSVFILTER_TESTDRIVE /* gcc -g -Wall -maltivec -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o msvfilter_utest -Dp7MSVFILTER_TESTDRIVE msvfilter.c -lhmmer -leasel -lm ./msvfilter_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "-L", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "145", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for the VMX MSVFilter() implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* First round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (esl_opt_GetBoolean(go, "-v")) printf("MSVFilter() tests, DNA\n"); utest_msv_filter(r, abc, bg, M, L, N); /* normal sized models */ utest_msv_filter(r, abc, bg, 1, L, 10); /* size 1 models */ utest_msv_filter(r, abc, bg, M, 1, 10); /* size 1 sequences */ esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (esl_opt_GetBoolean(go, "-v")) printf("MSVFilter() tests, protein\n"); utest_msv_filter(r, abc, bg, M, L, N); utest_msv_filter(r, abc, bg, 1, L, 10); utest_msv_filter(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*VITFILTER_TESTDRIVE*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7MSVFILTER_EXAMPLE /* A minimal example. Also useful for debugging on small HMMs and sequences. gcc -g -Wall -maltivec -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o msvfilter_example -Dp7MSVFILTER_EXAMPLE msvfilter.c -lhmmer -leasel -lm ./msvfilter_example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_gumbel.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in one line awkable format", 0 }, { "-P", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in profmark format", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of MSV filter algorithm"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float msvraw, nullsc, msvscore; float graw, gscore; double P, gP; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Open sequence file for reading */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); /* allocate DP matrices, both a generic and an optimized one */ ox = p7_omx_Create(gm->M, 0, 0); /* one row version */ gx = p7_gmx_Create(gm->M, sq->n); /* Useful to place and compile in for debugging: p7_oprofile_Dump(stdout, om); dumps the optimized profile p7_omx_SetDumpMode(stdout, ox, TRUE); makes the fast DP algorithms dump their matrices p7_gmx_Dump(stdout, gx, p7_DEFAULT); dumps a generic DP matrix p7_oprofile_SameMSV(om, gm); */ p7_omx_SetDumpMode(stdout, ox, TRUE); while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { p7_oprofile_ReconfigLength(om, sq->n); p7_ReconfigLength(gm, sq->n); p7_bg_SetLength(bg, sq->n); p7_omx_GrowTo(ox, om->M, 0, sq->n); p7_gmx_GrowTo(gx, gm->M, sq->n); p7_MSVFilter (sq->dsq, sq->n, om, ox, &msvraw); p7_bg_NullOne (bg, sq->dsq, sq->n, &nullsc); msvscore = (msvraw - nullsc) / eslCONST_LOG2; P = esl_gumbel_surv(msvscore, om->evparam[p7_MMU], om->evparam[p7_MLAMBDA]); p7_GMSV(sq->dsq, sq->n, gm, gx, 2.0, &graw); gscore = (graw - nullsc) / eslCONST_LOG2; gP = esl_gumbel_surv(gscore, gm->evparam[p7_MMU], gm->evparam[p7_MLAMBDA]); if (esl_opt_GetBoolean(go, "-1")) { printf("%-30s %-20s %9.2g %7.2f %9.2g %7.2f\n", sq->name, hmm->name, P, msvscore, gP, gscore); } else if (esl_opt_GetBoolean(go, "-P")) { /* output suitable for direct use in profmark benchmark postprocessors: */ printf("%g %.2f %s %s\n", P, msvscore, sq->name, hmm->name); } else { printf("target sequence: %s\n", sq->name); printf("msv filter raw score: %.2f nats\n", msvraw); printf("null score: %.2f nats\n", nullsc); printf("per-seq score: %.2f bits\n", msvscore); printf("P-value: %g\n", P); printf("GMSV raw score: %.2f nats\n", graw); printf("GSMV per-seq score: %.2f bits\n", gscore); printf("GSMV P-value: %g\n", gP); } esl_sq_Reuse(sq); } /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7MSVFILTER_EXAMPLE*/ /*---------------------- end, example ---------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_vmx/optacc.c0000664361611702660230000011323512473612614016335 0ustar wheelerteddy/* Optimal accuracy alignment; VMX version. * * Contents: * 1. Optimal accuracy alignment, DP fill * 2. OA traceback * 3. Benchmark driver * 4. Unit tests * 5. Test driver * 6. Example * 7. Copyright and license information. * * SRE, Mon Aug 18 20:01:01 2008 [Casa de Gatos] * SVN $Id: optacc.c 3991 2012-04-17 21:08:00Z eddys $ */ #include "p7_config.h" #include #ifndef __APPLE_ALTIVEC__ #include #endif #include "easel.h" #include "esl_vmx.h" #include "esl_vectorops.h" #include "hmmer.h" /***************************************************************** * 1. Optimal accuracy alignment, DP fill *****************************************************************/ /* Function: p7_OptimalAccuracy() * Synopsis: DP fill of an optimal accuracy alignment calculation. * Incept: SRE, Mon Aug 18 11:04:48 2008 [Janelia] * * Purpose: Calculates the fill step of the optimal accuracy decoding * algorithm \citep{Kall05}. * * Caller provides the posterior decoding matrix , * which was calculated by Forward/Backward on a target sequence * of length L> using the query model . * * Caller also provides a DP matrix , allocated for a full * M> by comparison. The routine fills this in * with OA scores. * * Args: gm - query profile * pp - posterior decoding matrix created by * gx - RESULT: caller provided DP matrix for M> by * ret_e - RETURN: expected number of correctly decoded positions * * Returns: on success, and <*ret_e> contains the final OA * score, which is the expected number of correctly decoded * positions in the target sequence (up to ). * * Throws: (no abnormal error conditions) */ int p7_OptimalAccuracy(const P7_OPROFILE *om, const P7_OMX *pp, P7_OMX *ox, float *ret_e) { vector float mpv, dpv, ipv; /* previous row values */ vector float sv; /* temp storage of 1 curr row value in progress */ vector float xEv; /* E state: keeps max for Mk->E as we go */ vector float xBv; /* B state: splatted vector of B[i-1] for B->Mk calculations */ vector float dcv; float *xmx = ox->xmx; vector float *dpc = ox->dpf[0]; /* current row, for use in {MDI}MO(dpp,q) access macro */ vector float *dpp; /* previous row, for use in {MDI}MO(dpp,q) access macro */ vector float *ppp; /* quads in the posterior probability matrix */ vector float *tp; /* quads in the tfv> transition scores */ vector float zerov; vector float infv; int M = om->M; int Q = p7O_NQF(M); int q; int j; int i; float t1, t2; zerov = (vector float) vec_splat_u32(0); infv = esl_vmx_set_float(-eslINFINITY); ox->M = om->M; ox->L = pp->L; for (q = 0; q < Q; q++) MMO(dpc, q) = IMO(dpc,q) = DMO(dpc,q) = infv; XMXo(0, p7X_E) = -eslINFINITY; XMXo(0, p7X_N) = 0.; XMXo(0, p7X_J) = -eslINFINITY; XMXo(0, p7X_B) = 0.; XMXo(0, p7X_C) = -eslINFINITY; for (i = 1; i <= pp->L; i++) { dpp = dpc; /* previous DP row in OA matrix */ dpc = ox->dpf[i]; /* current DP row in OA matrix */ ppp = pp->dpf[i]; /* current row in the posterior probabilities per position */ tp = om->tfv; /* transition probabilities */ dcv = infv; xEv = infv; xBv = esl_vmx_set_float(XMXo(i-1, p7X_B)); mpv = vec_sld(infv, MMO(dpp,Q-1), 12); /* Right shifts by 4 bytes. 4,8,12,x becomes x,4,8,12. */ dpv = vec_sld(infv, DMO(dpp,Q-1), 12); ipv = vec_sld(infv, IMO(dpp,Q-1), 12); for (q = 0; q < Q; q++) { sv = vec_and(vec_cmpgt(*tp, zerov), xBv); tp++; sv = vec_max(sv, vec_and(vec_cmpgt(*tp, zerov), mpv)); tp++; sv = vec_max(sv, vec_and(vec_cmpgt(*tp, zerov), ipv)); tp++; sv = vec_max(sv, vec_and(vec_cmpgt(*tp, zerov), dpv)); tp++; sv = vec_add(sv, *ppp); ppp += 2; xEv = vec_max(xEv, sv); mpv = MMO(dpp,q); dpv = DMO(dpp,q); ipv = IMO(dpp,q); MMO(dpc,q) = sv; DMO(dpc,q) = dcv; dcv = vec_and(vec_cmpgt(*tp, zerov), sv); tp++; sv = vec_and(vec_cmpgt(*tp, zerov), mpv); tp++; sv = vec_max(sv, vec_and(vec_cmpgt(*tp, zerov), ipv)); tp++; IMO(dpc,q) = vec_add(sv, *ppp); ppp++; } /* dcv has carried through from end of q loop above; store it * in first pass, we add M->D and D->D path into DMX */ dcv = vec_sld(infv, dcv, 12); tp = om->tfv + 7*Q; /* set tp to start of the DD's */ for (q = 0; q < Q; q++) { DMO(dpc, q) = vec_max(dcv, DMO(dpc, q)); dcv = vec_and(vec_cmpgt(*tp, zerov), DMO(dpc,q)); tp++; } /* fully serialized D->D; can optimize later */ for (j = 1; j < 4; j++) { dcv = vec_sld(infv, dcv, 12); tp = om->tfv + 7*Q; for (q = 0; q < Q; q++) { DMO(dpc, q) = vec_max(dcv, DMO(dpc, q)); dcv = vec_and(vec_cmpgt(*tp, zerov), dcv); tp++; } } /* D->E paths */ for (q = 0; q < Q; q++) xEv = vec_max(xEv, DMO(dpc,q)); /* Specials */ XMXo(i,p7X_E) = esl_vmx_hmax_float(xEv); t1 = ( (om->xf[p7O_J][p7O_LOOP] == 0.0) ? 0.0 : ox->xmx[(i-1)*p7X_NXCELLS+p7X_J] + pp->xmx[i*p7X_NXCELLS+p7X_J]); t2 = ( (om->xf[p7O_E][p7O_LOOP] == 0.0) ? 0.0 : ox->xmx[ i *p7X_NXCELLS+p7X_E]); ox->xmx[i*p7X_NXCELLS+p7X_J] = ESL_MAX(t1, t2); t1 = ( (om->xf[p7O_C][p7O_LOOP] == 0.0) ? 0.0 : ox->xmx[(i-1)*p7X_NXCELLS+p7X_C] + pp->xmx[i*p7X_NXCELLS+p7X_C]); t2 = ( (om->xf[p7O_E][p7O_MOVE] == 0.0) ? 0.0 : ox->xmx[ i *p7X_NXCELLS+p7X_E]); ox->xmx[i*p7X_NXCELLS+p7X_C] = ESL_MAX(t1, t2); ox->xmx[i*p7X_NXCELLS+p7X_N] = ((om->xf[p7O_N][p7O_LOOP] == 0.0) ? 0.0 : ox->xmx[(i-1)*p7X_NXCELLS+p7X_N] + pp->xmx[i*p7X_NXCELLS+p7X_N]); t1 = ( (om->xf[p7O_N][p7O_MOVE] == 0.0) ? 0.0 : ox->xmx[i*p7X_NXCELLS+p7X_N]); t2 = ( (om->xf[p7O_J][p7O_MOVE] == 0.0) ? 0.0 : ox->xmx[i*p7X_NXCELLS+p7X_J]); ox->xmx[i*p7X_NXCELLS+p7X_B] = ESL_MAX(t1, t2); } *ret_e = ox->xmx[pp->L*p7X_NXCELLS+p7X_C]; return eslOK; } /*------------------- end, OA DP fill ---------------------------*/ /***************************************************************** * 2. OA traceback *****************************************************************/ static inline float get_postprob(const P7_OMX *pp, int scur, int sprv, int k, int i); static inline int select_m(const P7_OPROFILE *om, const P7_OMX *ox, int i, int k); static inline int select_d(const P7_OPROFILE *om, const P7_OMX *ox, int i, int k); static inline int select_i(const P7_OPROFILE *om, const P7_OMX *ox, int i, int k); static inline int select_n(int i); static inline int select_c(const P7_OPROFILE *om, const P7_OMX *pp, const P7_OMX *ox, int i); static inline int select_j(const P7_OPROFILE *om, const P7_OMX *pp, const P7_OMX *ox, int i); static inline int select_e(const P7_OPROFILE *om, const P7_OMX *ox, int i, int *ret_k); static inline int select_b(const P7_OPROFILE *om, const P7_OMX *ox, int i); /* Function: p7_OATrace() * Synopsis: Optimal accuracy decoding: traceback. * Incept: SRE, Mon Aug 18 13:53:33 2008 [Janelia] * * Purpose: The traceback stage of the optimal accuracy decoding algorithm * \citep{Kall05}. * * Caller provides the OA DP matrix that was just * calculated by , as well as the * posterior decoding matrix , which was calculated by * Forward/Backward on a target sequence using the query * model . Because the calculation depends only on * , the target sequence itself need not be provided. * * The resulting optimal accuracy decoding traceback is put * in a caller-provided traceback structure

, which the * caller has allocated for optional posterior probability * annotation on residues (with , * generally). This structure will be reallocated * internally if necessary. * * Args: om - profile * pp - posterior probability matrix * ox - OA matrix to trace, LxM * tr - storage for the recovered traceback * * Returns: on success. * * Throws: on allocation error. * if the trace isn't empty (needs to be Reuse()'d). */ int p7_OATrace(const P7_OPROFILE *om, const P7_OMX *pp, const P7_OMX *ox, P7_TRACE *tr) { int i = ox->L; /* position in sequence 1..L */ int k = 0; /* position in model 1..M */ int s0, s1; /* choice of a state */ float postprob; int status; if (tr->N != 0) ESL_EXCEPTION(eslEINVAL, "trace not empty; needs to be Reuse()'d?"); if ((status = p7_trace_AppendWithPP(tr, p7T_T, k, i, 0.0)) != eslOK) return status; if ((status = p7_trace_AppendWithPP(tr, p7T_C, k, i, 0.0)) != eslOK) return status; s0 = tr->st[tr->N-1]; while (s0 != p7T_S) { switch (s0) { case p7T_M: s1 = select_m(om, ox, i, k); k--; i--; break; case p7T_D: s1 = select_d(om, ox, i, k); k--; break; case p7T_I: s1 = select_i(om, ox, i, k); i--; break; case p7T_N: s1 = select_n(i); break; case p7T_C: s1 = select_c(om, pp, ox, i); break; case p7T_J: s1 = select_j(om, pp, ox, i); break; case p7T_E: s1 = select_e(om, ox, i, &k); break; case p7T_B: s1 = select_b(om, ox, i); break; default: ESL_EXCEPTION(eslEINVAL, "bogus state in traceback"); } if (s1 == -1) ESL_EXCEPTION(eslEINVAL, "OA traceback choice failed"); postprob = get_postprob(pp, s1, s0, k, i); if ((status = p7_trace_AppendWithPP(tr, s1, k, i, postprob)) != eslOK) return status; if ( (s1 == p7T_N || s1 == p7T_J || s1 == p7T_C) && s1 == s0) i--; s0 = s1; } /* end traceback, at S state */ tr->M = om->M; tr->L = ox->L; return p7_trace_Reverse(tr); } static inline float get_postprob(const P7_OMX *pp, int scur, int sprv, int k, int i) { int Q = p7O_NQF(pp->M); int q = (k-1) % Q; /* (q,r) is position of the current DP cell M(i,k) */ int r = (k-1) / Q; union { vector float v; float p[4]; } u; switch (scur) { case p7T_M: u.v = MMO(pp->dpf[i], q); return u.p[r]; case p7T_I: u.v = IMO(pp->dpf[i], q); return u.p[r]; case p7T_N: if (sprv == scur) return pp->xmx[i*p7X_NXCELLS+p7X_N]; case p7T_C: if (sprv == scur) return pp->xmx[i*p7X_NXCELLS+p7X_C]; case p7T_J: if (sprv == scur) return pp->xmx[i*p7X_NXCELLS+p7X_J]; default: return 0.0; } } /* M(i,k) is reached from B(i-1), M(i-1,k-1), D(i-1,k-1), or I(i-1,k-1). */ static inline int select_m(const P7_OPROFILE *om, const P7_OMX *ox, int i, int k) { int Q = p7O_NQF(ox->M); int q = (k-1) % Q; /* (q,r) is position of the current DP cell M(i,k) */ int r = (k-1) / Q; vector float *tp = om->tfv + 7*q; /* *tp now at start of transitions to cur cell M(i,k) */ vector float xBv; vector float zerov; vector float mpv, dpv, ipv; union { vector float v; float p[4]; } u, tv; float path[4]; int state[4] = { p7T_M, p7T_I, p7T_D, p7T_B }; xBv = esl_vmx_set_float(ox->xmx[(i-1)*p7X_NXCELLS+p7X_B]); zerov = (vector float) vec_splat_u32(0); if (q > 0) { mpv = ox->dpf[i-1][(q-1)*3 + p7X_M]; dpv = ox->dpf[i-1][(q-1)*3 + p7X_D]; ipv = ox->dpf[i-1][(q-1)*3 + p7X_I]; } else { mpv = vec_sld(zerov, ox->dpf[i-1][(Q-1)*3 + p7X_M], 12); dpv = vec_sld(zerov, ox->dpf[i-1][(Q-1)*3 + p7X_D], 12); ipv = vec_sld(zerov, ox->dpf[i-1][(Q-1)*3 + p7X_I], 12); } /* paths are numbered so that most desirable choice in case of tie is first. */ u.v = xBv; tv.v = *tp; path[3] = ((tv.p[r] == 0.0) ? -eslINFINITY : u.p[r]); tp++; u.v = mpv; tv.v = *tp; path[0] = ((tv.p[r] == 0.0) ? -eslINFINITY : u.p[r]); tp++; u.v = ipv; tv.v = *tp; path[1] = ((tv.p[r] == 0.0) ? -eslINFINITY : u.p[r]); tp++; u.v = dpv; tv.v = *tp; path[2] = ((tv.p[r] == 0.0) ? -eslINFINITY : u.p[r]); return state[esl_vec_FArgMax(path, 4)]; } /* D(i,k) is reached from M(i, k-1) or D(i,k-1). */ static inline int select_d(const P7_OPROFILE *om, const P7_OMX *ox, int i, int k) { int Q = p7O_NQF(ox->M); int q = (k-1) % Q; /* (q,r) is position of the current DP cell D(i,k) */ int r = (k-1) / Q; vector float zerov; union { vector float v; float p[4]; } mpv, dpv, tmdv, tddv; float path[2]; zerov = (vector float) vec_splat_u32(0); if (q > 0) { mpv.v = ox->dpf[i][(q-1)*3 + p7X_M]; dpv.v = ox->dpf[i][(q-1)*3 + p7X_D]; tmdv.v = om->tfv[7*(q-1) + p7O_MD]; tddv.v = om->tfv[7*Q + (q-1)]; } else { mpv.v = vec_sld(zerov, ox->dpf[i][(Q-1)*3 + p7X_M], 12); dpv.v = vec_sld(zerov, ox->dpf[i][(Q-1)*3 + p7X_D], 12); tmdv.v = vec_sld(zerov, om->tfv[7*(Q-1) + p7O_MD], 12); tddv.v = vec_sld(zerov, om->tfv[8*Q-1], 12); } path[0] = ((tmdv.p[r] == 0.0) ? -eslINFINITY : mpv.p[r]); path[1] = ((tddv.p[r] == 0.0) ? -eslINFINITY : dpv.p[r]); return ((path[0] >= path[1]) ? p7T_M : p7T_D); } /* I(i,k) is reached from M(i-1, k) or I(i-1,k). */ static inline int select_i(const P7_OPROFILE *om, const P7_OMX *ox, int i, int k) { int Q = p7O_NQF(ox->M); int q = (k-1) % Q; /* (q,r) is position of the current DP cell D(i,k) */ int r = (k-1) / Q; vector float *tp = om->tfv + 7*q + p7O_MI; union { vector float v; float p[4]; } tv, mpv, ipv; float path[2]; mpv.v = ox->dpf[i-1][q*3 + p7X_M]; tv.v = *tp; path[0] = ((tv.p[r] == 0.0) ? -eslINFINITY : mpv.p[r]); tp++; ipv.v = ox->dpf[i-1][q*3 + p7X_I]; tv.v = *tp; path[1] = ((tv.p[r] == 0.0) ? -eslINFINITY : ipv.p[r]); return ((path[0] >= path[1]) ? p7T_M : p7T_I); } /* N(i) must come from N(i-1) for i>0; else it comes from S */ static inline int select_n(int i) { return ((i==0) ? p7T_S : p7T_N); } /* C(i) is reached from E(i) or C(i-1). */ static inline int select_c(const P7_OPROFILE *om, const P7_OMX *pp, const P7_OMX *ox, int i) { float path[2]; path[0] = ( (om->xf[p7O_C][p7O_LOOP] == 0.0) ? -eslINFINITY : ox->xmx[(i-1)*p7X_NXCELLS+p7X_C] + pp->xmx[i*p7X_NXCELLS+p7X_C]); path[1] = ( (om->xf[p7O_E][p7O_MOVE] == 0.0) ? -eslINFINITY : ox->xmx[ i *p7X_NXCELLS+p7X_E]); return ((path[0] > path[1]) ? p7T_C : p7T_E); } /* J(i) is reached from E(i) or J(i-1). */ static inline int select_j(const P7_OPROFILE *om, const P7_OMX *pp, const P7_OMX *ox, int i) { float path[2]; path[0] = ( (om->xf[p7O_J][p7O_LOOP] == 0.0) ? -eslINFINITY : ox->xmx[(i-1)*p7X_NXCELLS+p7X_J] + pp->xmx[i*p7X_NXCELLS+p7X_J]); path[1] = ( (om->xf[p7O_E][p7O_LOOP] == 0.0) ? -eslINFINITY : ox->xmx[ i *p7X_NXCELLS+p7X_E]); return ((path[0] > path[1]) ? p7T_J : p7T_E); } /* E(i) is reached from any M(i, k=1..M) or D(i, k=2..M). */ /* This assumes all M_k->E, D_k->E are 1.0 */ static inline int select_e(const P7_OPROFILE *om, const P7_OMX *ox, int i, int *ret_k) { int Q = p7O_NQF(ox->M); vector float *dp = ox->dpf[i]; union { vector float v; float p[4]; } u; float max = -eslINFINITY; int smax, kmax; int q,r; /* precedence rules in case of ties here are a little tricky: M beats D: note the >= max! */ for (q = 0; q < Q; q++) { u.v = *dp; dp++; for (r = 0; r < 4; r++) if (u.p[r] >= max) { max = u.p[r]; smax = p7T_M; kmax = r*Q + q + 1; } u.v = *dp; dp+=2; for (r = 0; r < 4; r++) if (u.p[r] > max) { max = u.p[r]; smax = p7T_D; kmax = r*Q + q + 1; } } *ret_k = kmax; return smax; } /* B(i) is reached from N(i) or J(i). */ static inline int select_b(const P7_OPROFILE *om, const P7_OMX *ox, int i) { float path[2]; path[0] = ( (om->xf[p7O_N][p7O_MOVE] == 0.0) ? -eslINFINITY : ox->xmx[i*p7X_NXCELLS+p7X_N]); path[1] = ( (om->xf[p7O_J][p7O_MOVE] == 0.0) ? -eslINFINITY : ox->xmx[i*p7X_NXCELLS+p7X_J]); return ((path[0] > path[1]) ? p7T_N : p7T_J); } /*---------------------- end, OA traceback ----------------------*/ /***************************************************************** * 3. Benchmark driver *****************************************************************/ #ifdef p7OPTACC_BENCHMARK /* icc -O3 -static -o optacc_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7OPTACC_BENCHMARK optacc.c -lhmmer -leasel -lm ./optacc_benchmark runs benchmark on optimal accuracy fill and trace ./optacc_benchmark -c -N1 compare scores of VMX version to generic impl ./optacc_benchmark -x -N1 test that scores match trusted implementation. RRM_1 (M=72) Caudal_act (M=136) SMC_N (M=1151) ----------------- ------------------ --------------- 20 Aug 08: 13.11u (110 Mc/s) 23.39u (116 Mc/s) 332.62u (69 Mc/s) */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { "--notrace", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "only benchmark the DP fill stage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for optimal accuracy alignment, VMX version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx1 = NULL; P7_GMX *gx2 = NULL; P7_OMX *ox1 = NULL; P7_OMX *ox2 = NULL; P7_TRACE *tr = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float fsc, bsc, accscore; float fsc_g, bsc_g, accscore_g; double Mcs; p7_FLogsumInit(); if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); if (esl_opt_GetBoolean(go, "-x") && p7_FLogsumError(-0.4, -0.5) > 0.0001) p7_Fail("-x here requires p7_Logsum() recompiled in slow exact mode"); ox1 = p7_omx_Create(gm->M, L, L); ox2 = p7_omx_Create(gm->M, L, L); tr = p7_trace_CreateWithPP(); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_Forward (dsq, L, om, ox1, &fsc); p7_Backward(dsq, L, om, ox1, ox2, &bsc); p7_Decoding(om, ox1, ox2, ox2); esl_stopwatch_Start(w); for (i = 0; i < N; i++) { p7_OptimalAccuracy(om, ox2, ox1, &accscore); if (! esl_opt_GetBoolean(go, "--notrace")) { p7_OATrace(om, ox2, ox1, tr); p7_trace_Reuse(tr); } } esl_stopwatch_Stop(w); Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) w->user; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); if (esl_opt_GetBoolean(go, "-c") || esl_opt_GetBoolean(go, "-x") ) { gx1 = p7_gmx_Create(gm->M, L); gx2 = p7_gmx_Create(gm->M, L); p7_GForward (dsq, L, gm, gx1, &fsc_g); p7_GBackward(dsq, L, gm, gx2, &bsc_g); p7_GDecoding(gm, gx1, gx2, gx2); p7_GOptimalAccuracy(gm, gx2, gx1, &accscore_g); printf("generic: fwd=%8.4f bck=%8.4f acc=%8.4f\n", fsc_g, bsc_g, accscore_g); printf("VMX: fwd=%8.4f bck=%8.4f acc=%8.4f\n", fsc, bsc, accscore); p7_gmx_Destroy(gx1); p7_gmx_Destroy(gx2); } free(dsq); p7_omx_Destroy(ox1); p7_omx_Destroy(ox2); p7_trace_Destroy(tr); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7OPTACC_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 4. Unit tests *****************************************************************/ #ifdef p7OPTACC_TESTDRIVE #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" /* * 1. Compare accscore to GOptimalAccuracy(). * 2. Compare trace to GOATrace(). * * Note: This test is subject to some expected noise and can fail * for entirely innocent reasons. Generic Forward/Backward calculations with * p7_GForward(), p7_GBackward() use coarse-grain table lookups to sum * log probabilities, and sufficient roundoff error can accumulate to * change the optimal accuracy traceback, causing this test to fail. * So, if optacc_utest fails, before you go looking for bugs, first * go to ../logsum.c, change the #ifdef to activate the slow/accurate * version, recompile and rerun optacc_utest. If the failure goes away, * you can ignore it. - SRE, Wed Dec 17 09:45:31 2008 */ static void utest_optacc(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { char *msg = "optimal accuracy unit test failed"; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_SQ *sq = esl_sq_CreateDigital(abc); P7_OMX *ox1 = p7_omx_Create(M, L, L); P7_OMX *ox2 = p7_omx_Create(M, L, L); P7_GMX *gx1 = p7_gmx_Create(M, L); P7_GMX *gx2 = p7_gmx_Create(M, L); P7_TRACE *tr = p7_trace_CreateWithPP(); P7_TRACE *trg = p7_trace_CreateWithPP(); P7_TRACE *tro = p7_trace_CreateWithPP(); float accscore_o; float fsc, bsc, accscore; float fsc_g, bsc_g, accscore_g, accscore_g2; float pptol = 0.01; float sctol = 0.001; float gtol; p7_FLogsumInit(); gtol = ( (p7_FLogsumError(-0.4, -0.5) > 0.0001) ? 0.1 : 0.001); if (p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om)!= eslOK) esl_fatal(msg); while (N--) { if (p7_ProfileEmit(r, hmm, gm, bg, sq, tro) != eslOK) esl_fatal(msg); if (p7_omx_GrowTo(ox1, M, sq->n, sq->n) != eslOK) esl_fatal(msg); if (p7_omx_GrowTo(ox2, M, sq->n, sq->n) != eslOK) esl_fatal(msg); if (p7_gmx_GrowTo(gx1, M, sq->n) != eslOK) esl_fatal(msg); if (p7_gmx_GrowTo(gx2, M, sq->n) != eslOK) esl_fatal(msg); if (p7_Forward (sq->dsq, sq->n, om, ox1, &fsc) != eslOK) esl_fatal(msg); if (p7_Backward(sq->dsq, sq->n, om, ox1, ox2, &bsc) != eslOK) esl_fatal(msg); if (p7_Decoding(om, ox1, ox2, ox2) != eslOK) esl_fatal(msg); if (p7_OptimalAccuracy(om, ox2, ox1, &accscore) != eslOK) esl_fatal(msg); #if 0 p7_omx_FDeconvert(ox1, gx1); p7_gmx_Dump(stdout, gx1, p7_DEFAULT); p7_omx_FDeconvert(ox2, gx1); p7_gmx_Dump(stdout, gx1, p7_DEFAULT); #endif if (p7_OATrace(om, ox2, ox1, tr) != eslOK) esl_fatal(msg); if (p7_GForward (sq->dsq, sq->n, gm, gx1, &fsc_g) != eslOK) esl_fatal(msg); if (p7_GBackward(sq->dsq, sq->n, gm, gx2, &bsc_g) != eslOK) esl_fatal(msg); #if 0 p7_gmx_Dump(stdout, gx1, p7_DEFAULT); /* fwd */ p7_gmx_Dump(stdout, gx2, p7_DEFAULT); /* bck */ #endif if (p7_GDecoding(gm, gx1, gx2, gx2) != eslOK) esl_fatal(msg); if (p7_GOptimalAccuracy(gm, gx2, gx1, &accscore_g) != eslOK) esl_fatal(msg); #if 0 p7_gmx_Dump(stdout, gx1, p7_DEFAULT); /* oa */ p7_gmx_Dump(stdout, gx2, p7_DEFAULT); /* pp */ #endif if (p7_GOATrace(gm, gx2, gx1, trg) != eslOK) esl_fatal(msg); if (p7_trace_SetPP(tro, gx2) != eslOK) esl_fatal(msg); if (esl_opt_GetBoolean(go, "--traces")) { p7_trace_Dump(stdout, tro, gm, sq->dsq); p7_trace_Dump(stdout, tr, gm, sq->dsq); p7_trace_Dump(stdout, trg, gm, sq->dsq); } if (p7_trace_Validate(tr, abc, sq->dsq, NULL) != eslOK) esl_fatal(msg); if (p7_trace_Validate(trg, abc, sq->dsq, NULL) != eslOK) esl_fatal(msg); if (p7_trace_Compare(tr, trg, pptol) != eslOK) esl_fatal(msg); accscore_o = p7_trace_GetExpectedAccuracy(tro); /* according to gx2; see p7_trace_SetPP() call above */ accscore_g2 = p7_trace_GetExpectedAccuracy(trg); #if 0 printf("%f %f %f %f\n", accscore, accscore_g, accscore_g2, accscore_o); #endif if (esl_FCompare(fsc, bsc, sctol) != eslOK) esl_fatal(msg); if (esl_FCompare(fsc_g, bsc_g, gtol) != eslOK) esl_fatal(msg); if (esl_FCompare(fsc, fsc_g, gtol) != eslOK) esl_fatal(msg); if (esl_FCompare(accscore, accscore_g, gtol) != eslOK) esl_fatal(msg); if (esl_FCompare(accscore_g, accscore_g2, gtol) != eslOK) esl_fatal(msg); if (accscore_g2 < accscore_o) esl_fatal(msg); /* the above deserves explanation: * - accscore_o is the accuracy of the originally emitted trace, according * to the generic posterior decoding matrix . This is a lower bound * on the expected # of accurately aligned residues found by a DP * optimization. * - accscore is the accuracy found by the fast (vector) code DP implementation. * - accscore_g is the accuracy found by the generic DP implementation. * accscore and accscore_g should be nearly identical, * within tolerance of roundoff error accumulation and * the imprecision of Logsum() tables. * - accscore_g2 is the accuracy of the traceback identified by the generic * DP implementation. It should be identical (within order-of-evaluation * roundoff error) to accscore_g. * * the "accscore_g2 < accscore_o" test is carefully contrived. * accscore_o is a theoretical lower bound but because of fp error, * accscore and (much more rarely) even accscore_g can exceed accscore_o. * accscore_g2, however, is calculated with identical order of evaluation * as accscore_o if the optimal trace does turn out to be identical to * the originally emitted trace. It should be extremely unlikely (though * not impossible) for accscore_o to exceed accscore_g2. (The DP algorithm * would have to identify a trace that was different than the original trace, * which the DP algorithm, by order-of-evaluation, assigned higher accuracy, * but order-of-evaluation in traceback dependent code assigned lower accuracy. * [xref J5/29] */ esl_sq_Reuse(sq); p7_trace_Reuse(tr); p7_trace_Reuse(trg); p7_trace_Reuse(tro); } p7_trace_Destroy(tro); p7_trace_Destroy(trg); p7_trace_Destroy(tr); p7_gmx_Destroy(gx2); p7_gmx_Destroy(gx1); p7_omx_Destroy(ox2); p7_omx_Destroy(ox1); esl_sq_Destroy(sq); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); } #endif /*p7OPTACC_TESTDRIVE*/ /*------------------- end, unit tests ---------------------------*/ /***************************************************************** * 5. Test driver *****************************************************************/ #ifdef p7OPTACC_TESTDRIVE /* Failures in this test are to be expected, if you change the defaults. * The default RNG seed of 41 is very carefully chosen! Most seeds will * cause this test to fail. (Only 13 and 41 work for seeds 1..50.) * * The generic fwd/bck algorithms work in log space and suffer from a * small amount of imprecision, not only from the use of FLogsum()'s * table-driven approximation, but even (apparently) inherent in log() * and exp(). To minimize this, the generic decoding algorithm burns * time renormalizing each row. Still, it's a problem. See notes at * the header of utest_optacc() for more info. * * Another expected failure mode is when a fwd, bck nat score are close to * 0.0; FCompare() can evaluate two close-to-zero numbers as "different" * even if their absolute diff is negligible. (I suppose I could fix this.) */ /* gcc -g -Wall -maltivec -std=gnu99 -o optacc_utest -I.. -L.. -I../../easel -L../../easel -Dp7OPTACC_TESTDRIVE optacc.c -lhmmer -leasel -lm ./optacc_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "41", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "50", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "45", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "20", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { "--traces", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump all tracebacks", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for VMX Forward, Backward implementations"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* first round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_optacc(go, r, abc, bg, M, L, N); /* normal sized models */ utest_optacc(go, r, abc, bg, 1, L, 10); /* size 1 models */ utest_optacc(go, r, abc, bg, M, 1, 10); /* size 1 sequences */ esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); /* Second round of tests for amino alphabets. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_optacc(go, r, abc, bg, M, L, N); utest_optacc(go, r, abc, bg, 1, L, 10); utest_optacc(go, r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*p7OPTACC_TESTDRIVE*/ /*------------------ end, test driver ---------------------------*/ /***************************************************************** * 6. Example *****************************************************************/ #ifdef p7OPTACC_EXAMPLE /* gcc -g -Wall -o optacc_example -Dp7OPTACC_EXAMPLE -I.. -I../../easel -L.. -L../../easel optacc.c -lhmmer -leasel -lm ./optacc_example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-d", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump posterior residue decoding matrix", 0 }, { "-m", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump OA matrix", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of optimal accuracy alignment, VMX implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox1 = NULL; P7_OMX *ox2 = NULL; P7_GMX *gx = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; P7_TRACE *tr = NULL; int format = eslSQFILE_UNKNOWN; char errbuf[eslERRBUFSIZE]; float fsc, bsc; float accscore; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_OpenDigital(abc, seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); esl_sqfile_Close(sqfp); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); /* multihit local: H3 default */ om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); /* Allocations */ ox1 = p7_omx_Create(gm->M, sq->n, sq->n); ox2 = p7_omx_Create(gm->M, sq->n, sq->n); gx = p7_gmx_Create(gm->M, sq->n); tr = p7_trace_CreateWithPP(); p7_FLogsumInit(); /* Run Forward, Backward; do OA fill and trace */ p7_Forward (sq->dsq, sq->n, om, ox1, &fsc); p7_Backward(sq->dsq, sq->n, om, ox1, ox2, &bsc); p7_Decoding(om, ox1, ox2, ox2); /* is now the posterior decoding matrix */ p7_OptimalAccuracy(om, ox2, ox1, &accscore); /* is now the OA matrix */ p7_OATrace(om, ox2, ox1, tr); if (esl_opt_GetBoolean(go, "-d")) { p7_omx_FDeconvert(ox2, gx); p7_gmx_Dump(stdout, gx, p7_DEFAULT); } if (esl_opt_GetBoolean(go, "-m")) { p7_omx_FDeconvert(ox1, gx); p7_gmx_Dump(stdout, gx, p7_DEFAULT); } p7_trace_Dump(stdout, tr, gm, sq->dsq); if (p7_trace_Validate(tr, abc, sq->dsq, errbuf) != eslOK) p7_Die("trace fails validation:\n%s\n", errbuf); printf("fwd = %.4f nats\n", fsc); printf("bck = %.4f nats\n", bsc); printf("acc = %.4f (%.2f%%)\n", accscore, accscore * 100. / (float) sq->n); /* Cleanup */ esl_sq_Destroy(sq); p7_trace_Destroy(tr); p7_omx_Destroy(ox1); p7_omx_Destroy(ox2); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7OPTACC_EXAMPLE*/ /*-------------------- end, example -----------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_vmx/.dropbox.attr0000775361611702660230000000000212473271741017337 0ustar wheelerteddy{}hmmer-3.1b2/src/impl_vmx/decoding.c0000664361611702660230000004026112473612613016635 0ustar wheelerteddy/* Posterior decoding algorithms; VMX versions. * * Contents: * 1. Posterior decoding algorithms. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * SRE, Mon Aug 18 08:15:50 2008 [Janelia] * SVN $Id: decoding.c 3665 2011-08-25 13:45:55Z eddys $ */ #include "p7_config.h" #include #include #ifndef __APPLE_ALTIVEC__ #include #endif #include "easel.h" #include "esl_vmx.h" #include "hmmer.h" #include "impl_vmx.h" /***************************************************************** * 1. Posterior decoding algorithms. *****************************************************************/ /* Function: p7_Decoding() * Synopsis: Posterior decoding of residue assignment. * Incept: SRE, Fri Aug 8 14:29:42 2008 [UA217 to SFO] * * Purpose: Identical to except that , , * are VMX optimized versions. See * documentation for more info. * * Args: om - profile (must be the same that was used to fill , ). * oxf - filled Forward matrix * oxb - filled Backward matrix * pp - RESULT: posterior decoding matrix. * * Returns: on success. * * Returns if numeric range of floating-point * values is exceeded during posterior probability * calculations. In this case, the matrix must not be * used by the caller; it will contain values. To be * safe, the caller should recalculate a generic posterior * decoding matrix instead -- generic calculations are done * in log probability space and are robust. * * However, I currently believe that this overflow only * occurs on an unusual and ignorable situation: when a * model is used on a region that contains * two or more high scoring distinct alignments to the * model. And that only happens if domain definition fails, * after stochastic clustering, and an envelope that we * pass to p7_domaindef.c::rescore_isolated_domain() * erroneously contains 2+ distinct domains. (Note that * this is different from having 2+ expected B states: that * can happen normally, if a single consistent domain is * better described by 2+ passes through the model). And I * strongly believe all this only can happen on repetitive * or biased-composition junk that we want to ignore anyway. * Therefore the caller should be safe in ignoring any domain * for which returns . * * Throws: (no abnormal error conditions) * * Xref: [J3/119-121]: for analysis of numeric range issues when * overflows. */ int p7_Decoding(const P7_OPROFILE *om, const P7_OMX *oxf, P7_OMX *oxb, P7_OMX *pp) { vector float *ppv; vector float *fv; vector float *bv; vector float totrv; vector float zerov; int L = oxf->L; int M = om->M; int Q = p7O_NQF(M); int i,q; float scaleproduct = 1.0 / oxb->xmx[p7X_N]; pp->M = M; pp->L = L; zerov = (vector float) vec_splat_u32(0); ppv = pp->dpf[0]; for (q = 0; q < Q; q++) { *ppv = (vector float) vec_splat_u32(0); ppv++; *ppv = (vector float) vec_splat_u32(0); ppv++; *ppv = (vector float) vec_splat_u32(0); ppv++; } pp->xmx[p7X_E] = 0.0; pp->xmx[p7X_N] = 0.0; pp->xmx[p7X_J] = 0.0; pp->xmx[p7X_C] = 0.0; pp->xmx[p7X_B] = 0.0; for (i = 1; i <= L; i++) { ppv = pp->dpf[i]; fv = oxf->dpf[i]; bv = oxb->dpf[i]; totrv = esl_vmx_set_float(scaleproduct * oxf->xmx[i*p7X_NXCELLS+p7X_SCALE]); for (q = 0; q < Q; q++) { /* M */ *ppv = vec_madd(*fv, *bv, zerov); *ppv = vec_madd(*ppv, totrv, zerov); ppv++; fv++; bv++; /* D */ *ppv = (vector float) vec_splat_u32(0); ppv++; fv++; bv++; /* I */ *ppv = vec_madd(*fv, *bv, zerov); *ppv = vec_madd(*ppv, totrv, zerov); ppv++; fv++; bv++; } pp->xmx[i*p7X_NXCELLS+p7X_E] = 0.0; pp->xmx[i*p7X_NXCELLS+p7X_N] = oxf->xmx[(i-1)*p7X_NXCELLS+p7X_N] * oxb->xmx[i*p7X_NXCELLS+p7X_N] * om->xf[p7O_N][p7O_LOOP] * scaleproduct; pp->xmx[i*p7X_NXCELLS+p7X_J] = oxf->xmx[(i-1)*p7X_NXCELLS+p7X_J] * oxb->xmx[i*p7X_NXCELLS+p7X_J] * om->xf[p7O_J][p7O_LOOP] * scaleproduct; pp->xmx[i*p7X_NXCELLS+p7X_C] = oxf->xmx[(i-1)*p7X_NXCELLS+p7X_C] * oxb->xmx[i*p7X_NXCELLS+p7X_C] * om->xf[p7O_C][p7O_LOOP] * scaleproduct; pp->xmx[i*p7X_NXCELLS+p7X_B] = 0.0; if (oxb->has_own_scales) scaleproduct *= oxf->xmx[i*p7X_NXCELLS+p7X_SCALE] / oxb->xmx[i*p7X_NXCELLS+p7X_SCALE]; } if (isinf(scaleproduct)) return eslERANGE; else return eslOK; } /* Function: p7_DomainDecoding() * Synopsis: Posterior decoding of domain location. * Incept: SRE, Tue Aug 5 08:39:07 2008 [Janelia] * * Purpose: Identical to except that , , * are VMX optimized versions. See * documentation for more info. * * Args: gm - profile * oxf - filled Forward matrix * oxb - filled Backward matrix * ddef - container for the results. * * Returns: on success. * * on numeric overflow. See commentary in * . * * Throws: (no abnormal error conditions) */ int p7_DomainDecoding(const P7_OPROFILE *om, const P7_OMX *oxf, const P7_OMX *oxb, P7_DOMAINDEF *ddef) { int L = oxf->L; float scaleproduct = 1.0 / oxb->xmx[p7X_N]; float njcp; int i; ddef->btot[0] = 0.0; ddef->etot[0] = 0.0; ddef->mocc[0] = 0.0; for (i = 1; i <= L; i++) { /* scaleproduct is prod_j=0^i-2 now */ ddef->btot[i] = ddef->btot[i-1] + (oxf->xmx[(i-1)*p7X_NXCELLS+p7X_B] * oxb->xmx[(i-1)*p7X_NXCELLS+p7X_B] * oxf->xmx[(i-1)*p7X_NXCELLS+p7X_SCALE] * scaleproduct); if (oxb->has_own_scales) scaleproduct *= oxf->xmx[(i-1)*p7X_NXCELLS+p7X_SCALE] / oxb->xmx[(i-1)*p7X_NXCELLS+p7X_SCALE]; /* scaleproduct is prod_j=0^i-1 now */ ddef->etot[i] = ddef->etot[i-1] + (oxf->xmx[i*p7X_NXCELLS+p7X_E] * oxb->xmx[i*p7X_NXCELLS+p7X_E] * oxf->xmx[i*p7X_NXCELLS+p7X_SCALE] * scaleproduct); njcp = oxf->xmx[(i-1)*p7X_NXCELLS+p7X_N] * oxb->xmx[i*p7X_NXCELLS+p7X_N] * om->xf[p7O_N][p7O_LOOP] * scaleproduct; njcp += oxf->xmx[(i-1)*p7X_NXCELLS+p7X_J] * oxb->xmx[i*p7X_NXCELLS+p7X_J] * om->xf[p7O_J][p7O_LOOP] * scaleproduct; njcp += oxf->xmx[(i-1)*p7X_NXCELLS+p7X_C] * oxb->xmx[i*p7X_NXCELLS+p7X_C] * om->xf[p7O_C][p7O_LOOP] * scaleproduct; ddef->mocc[i] = 1. - njcp; } ddef->L = oxf->L; if (isinf(scaleproduct)) return eslERANGE; else return eslOK; } /*------------------ end, posterior decoding --------------------*/ /***************************************************************** * 2. Benchmark driver *****************************************************************/ #ifdef p7DECODING_BENCHMARK /* icc -O3 -static -o decoding_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7DECODING_BENCHMARK decoding.c -lhmmer -leasel -lm ./decoding_benchmark RRM_1 (M=72) Caudal_act (M=136) SMC_N (M=1151) ----------------- ------------------ --------------- 21 Aug 08 3.52u (409 Mc/s) 15.36u (177 Mc/s) 318.78u (72.2 Mc/s) The length dependency probably indicates L1 cache missing; because we're manipulating 3 matrices at the same time, we can't fit the calculation in cache. */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for posterior residue decoding, VMX version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *fwd = NULL; P7_OMX *bck = NULL; P7_OMX *pp = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float fsc, bsc; double Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); fwd = p7_omx_Create(gm->M, L, L); bck = p7_omx_Create(gm->M, L, L); pp = p7_omx_Create(gm->M, L, L); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_Forward (dsq, L, om, fwd, &fsc); p7_Backward(dsq, L, om, fwd, bck, &bsc); esl_stopwatch_Start(w); for (i = 0; i < N; i++) p7_Decoding(om, fwd, bck, pp); esl_stopwatch_Stop(w); Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) w->user; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(fwd); p7_omx_Destroy(bck); p7_omx_Destroy(pp); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return eslOK; } #endif /*p7DECODING_BENCHMARK*/ /*------------------ end, benchmark driver ----------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7DECODING_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" /* compare results to GDecoding(). */ static void utest_decoding(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N, float tolerance) { char *msg = "decoding unit test failed"; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *fwd = p7_omx_Create(M, L, L); P7_OMX *bck = p7_omx_Create(M, L, L); P7_OMX *pp = p7_omx_Create(M, L, L); P7_GMX *gxf = p7_gmx_Create(M, L); P7_GMX *gxb = p7_gmx_Create(M, L); P7_GMX *gxp1 = p7_gmx_Create(M, L); P7_GMX *gxp2 = p7_gmx_Create(M, L); float fsc1, fsc2; float bsc1, bsc2; if (p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om) != eslOK) esl_fatal(msg); while (N--) { if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal(msg); if (p7_Forward (dsq, L, om, fwd, &fsc1) != eslOK) esl_fatal(msg); if (p7_Backward (dsq, L, om, fwd, bck, &bsc1) != eslOK) esl_fatal(msg); if (p7_Decoding(om, fwd, bck, pp) != eslOK) esl_fatal(msg); if (p7_omx_FDeconvert(pp, gxp1) != eslOK) esl_fatal(msg); if (p7_GForward (dsq, L, gm, gxf, &fsc2) != eslOK) esl_fatal(msg); if (p7_GBackward(dsq, L, gm, gxb, &bsc2) != eslOK) esl_fatal(msg); if (p7_GDecoding(gm, gxf, gxb, gxp2) != eslOK) esl_fatal(msg); //p7_gmx_Dump(stdout, gxp1, p7_DEFAULT); //p7_gmx_Dump(stdout, gxp2, p7_DEFAULT); if (p7_gmx_Compare(gxp1, gxp2, tolerance) != eslOK) esl_fatal(msg); } p7_gmx_Destroy(gxp1); p7_gmx_Destroy(gxp2); p7_gmx_Destroy(gxf); p7_gmx_Destroy(gxb); p7_omx_Destroy(fwd); p7_omx_Destroy(bck); p7_omx_Destroy(pp); free(dsq); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); } #endif /*p7DECODING_TESTDRIVE*/ /*--------------------- end, unit tests -------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7DECODING_TESTDRIVE /* gcc -o decoding_utest -maltivec -g -Wall -I.. -L.. -I../../easel -L../../easel -Dp7DECODING_TESTDRIVE decoding.c -lhmmer -leasel -lm ./decoding_utest */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-t", eslARG_REAL, "0.01", NULL, NULL, NULL, NULL, NULL, "floating point comparison tolerance", 0 }, { "-L", eslARG_INT, "40", NULL, NULL, NULL, NULL, NULL, "length of sampled sequences", 0 }, { "-M", eslARG_INT, "40", NULL, NULL, NULL, NULL, NULL, "length of sampled test profile", 0 }, { "-N", eslARG_INT, "10", NULL, NULL, NULL, NULL, NULL, "number of sampled test sequences", 0 }, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for VMX posterior decoding"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_BG *bg = p7_bg_Create(abc); int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); float tol = esl_opt_GetReal (go, "-t"); p7_FLogsumInit(); utest_decoding(r, abc, bg, M, L, N, tol); esl_getopts_Destroy(go); esl_randomness_Destroy(r); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); return eslOK; } #endif /*p7DECODING_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7DECODING_EXAMPLE #endif /*p7DECODING_EXAMPLE*/ /*------------------------ example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_vmx/vitfilter.c0000664361611702660230000010757112473612614017102 0ustar wheelerteddy/* Viterbi filter implementation; VMX version. * * This is a SIMD vectorized, striped, interleaved, one-row, reduced * precision (epi16) implementation of the Viterbi algorithm. * * It calculates a close approximation of the Viterbi score, in * limited precision (signed words: 16 bits) and range. It may overflow on * high scoring sequences, but this indicates that the sequence is a * high-scoring hit worth examining more closely anyway. It will not * underflow, in local alignment mode. * * Contents: * 1. Viterbi filter implementation. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information * * SRE, Thu Jul 31 20:32:25 2008 [Casa de Gatos] * SVN $Id: vitfilter.c 4699 2014-07-03 14:54:25Z wheelert $ */ #include "p7_config.h" #include #include #ifndef __APPLE_ALTIVEC__ #include #endif #include "easel.h" #include "esl_vmx.h" #include "esl_gumbel.h" #include "hmmer.h" #include "impl_vmx.h" /***************************************************************** * 1. Viterbi filter implementation. *****************************************************************/ /* Function: p7_ViterbiFilter() * Synopsis: Calculates Viterbi score, vewy vewy fast, in limited precision. * Incept: SRE, Tue Nov 27 09:15:24 2007 [Janelia] * * Purpose: Calculates an approximation of the Viterbi score for sequence * of length residues, using optimized profile , * and a preallocated one-row DP matrix . Return the * estimated Viterbi score (in nats) in . * * Score may overflow (and will, on high-scoring * sequences), but will not underflow. * * The model must be in a local alignment mode; other modes * cannot provide the necessary guarantee of no underflow. * * This is a striped SIMD Viterbi implementation using Intel * VMX integer intrinsics \citep{Farrar07}, in reduced * precision (signed words, 16 bits). * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * ret_sc - RETURN: Viterbi score (in nats) * * Returns: on success; * if the score overflows; in this case * <*ret_sc> is , and the sequence can * be treated as a high-scoring hit. * * Throws: if allocation is too small, or if * profile isn't in a local alignment mode. (Must be in local * alignment mode because that's what helps us guarantee * limited dynamic range.) * * Xref: [Farrar07] for ideas behind striped SIMD DP. * J2/46-47 for layout of HMMER's striped SIMD DP. * J2/50 for single row DP. * J2/60 for reduced precision (epu8) * J2/65 for initial benchmarking * J2/66 for precision maximization * J4/138-140 for reimplementation in 16-bit precision */ int p7_ViterbiFilter(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc) { vector signed short mpv, dpv, ipv; /* previous row values */ vector signed short sv; /* temp storage of 1 curr row value in progress */ vector signed short dcv; /* delayed storage of D(i,q+1) */ vector signed short xEv; /* E state: keeps max for Mk->E as we go */ vector signed short xBv; /* B state: splatted vector of B[i-1] for B->Mk calculations */ vector signed short Dmaxv; /* keeps track of maximum D cell on row */ int16_t xE, xB, xC, xJ, xN; /* special states' scores */ int16_t Dmax; /* maximum D cell score on row */ int i; /* counter over sequence positions 1..L */ int q; /* counter over vectors 0..nq-1 */ int Q; /* segment length: # of vectors */ vector signed short *dp; /* using {MDI}MX(q) macro requires initialization of */ vector signed short *rsc; /* will point at om->ru[x] for residue x[i] */ vector signed short *tsc; /* will point into (and step thru) om->tu */ vector signed short negInfv; Q = p7O_NQW(om->M); dp = ox->dpw[0]; /* Check that the DP matrix is ok for us. */ if (Q > ox->allocQ8) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small"); if (om->mode != p7_LOCAL && om->mode != p7_UNILOCAL) ESL_EXCEPTION(eslEINVAL, "Fast filter only works for local alignment"); ox->M = om->M; negInfv = esl_vmx_set_s16((signed short)-32768); /* Initialization. In unsigned arithmetic, -infinity is -32768 */ for (q = 0; q < Q; q++) MMXo(q) = IMXo(q) = DMXo(q) = negInfv; xN = om->base_w; xB = xN + om->xw[p7O_N][p7O_MOVE]; xJ = -32768; xC = -32768; xE = -32768; #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpVFRow(ox, 0, xE, 0, xJ, xB, xC); /* first 0 is : do header. second 0 is xN: always 0 here. */ #endif for (i = 1; i <= L; i++) { rsc = om->rwv[dsq[i]]; tsc = om->twv; dcv = negInfv; /* "-infinity" */ xEv = negInfv; Dmaxv = negInfv; xBv = esl_vmx_set_s16(xB); /* Right shifts by 1 value (2 bytes). 4,8,12,x becomes x,4,8,12. * Because ia32 is littlendian, this means a left bit shift. * Zeros shift on automatically; replace it with -32768. */ mpv = MMXo(Q-1); mpv = vec_sld(negInfv, mpv, 14); dpv = DMXo(Q-1); dpv = vec_sld(negInfv, dpv, 14); ipv = IMXo(Q-1); ipv = vec_sld(negInfv, ipv, 14); for (q = 0; q < Q; q++) { /* Calculate new MMXo(i,q); don't store it yet, hold it in sv. */ sv = vec_adds(xBv, *tsc); tsc++; sv = vec_max (sv, vec_adds(mpv, *tsc)); tsc++; sv = vec_max (sv, vec_adds(ipv, *tsc)); tsc++; sv = vec_max (sv, vec_adds(dpv, *tsc)); tsc++; sv = vec_adds(sv, *rsc); rsc++; xEv = vec_max(xEv, sv); /* Load {MDI}(i-1,q) into mpv, dpv, ipv; * {MDI}MX(q) is then the current, not the prev row */ mpv = MMXo(q); dpv = DMXo(q); ipv = IMXo(q); /* Do the delayed stores of {MD}(i,q) now that memory is usable */ MMXo(q) = sv; DMXo(q) = dcv; /* Calculate the next D(i,q+1) partially: M->D only; * delay storage, holding it in dcv */ dcv = vec_adds(sv, *tsc); tsc++; Dmaxv = vec_max(dcv, Dmaxv); /* Calculate and store I(i,q) */ sv = vec_adds(mpv, *tsc); tsc++; IMXo(q)= vec_max(sv, vec_adds(ipv, *tsc)); tsc++; } /* Now the "special" states, which start from Mk->E (->C, ->J->B) */ xE = esl_vmx_hmax_s16(xEv); if (xE >= 32767) { *ret_sc = eslINFINITY; return eslERANGE; } /* immediately detect overflow */ xN = xN + om->xw[p7O_N][p7O_LOOP]; xC = ESL_MAX(xC + om->xw[p7O_C][p7O_LOOP], xE + om->xw[p7O_E][p7O_MOVE]); xJ = ESL_MAX(xJ + om->xw[p7O_J][p7O_LOOP], xE + om->xw[p7O_E][p7O_LOOP]); xB = ESL_MAX(xJ + om->xw[p7O_J][p7O_MOVE], xN + om->xw[p7O_N][p7O_MOVE]); /* and now xB will carry over into next i, and xC carries over after i=L */ /* Finally the "lazy F" loop (sensu [Farrar07]). We can often * prove that we don't need to evaluate any D->D paths at all. * * The observation is that if we can show that on the next row, * B->M(i+1,k) paths always dominate M->D->...->D->M(i+1,k) paths * for all k, then we don't need any D->D calculations. * * The test condition is: * max_k D(i,k) + max_k ( TDD(k-2) + TDM(k-1) - TBM(k) ) < xB(i) * So: * max_k (TDD(k-2) + TDM(k-1) - TBM(k)) is precalc'ed in om->dd_bound; * max_k D(i,k) is why we tracked Dmaxv; * xB(i) was just calculated above. */ Dmax = esl_vmx_hmax_s16(Dmaxv); if (Dmax + om->ddbound_w > xB) { /* Now we're obligated to do at least one complete DD path to be sure. */ /* dcv has carried through from end of q loop above */ dcv = vec_sld(negInfv, dcv, 14); tsc = om->twv + 7*Q; /* set tsc to start of the DD's */ for (q = 0; q < Q; q++) { DMXo(q) = vec_max(dcv, DMXo(q)); dcv = vec_adds(DMXo(q), *tsc); tsc++; } /* We may have to do up to three more passes; the check * is for whether crossing a segment boundary can improve * our score. */ do { dcv = vec_sld(negInfv, dcv, 14); tsc = om->twv + 7*Q; /* set tsc to start of the DD's */ for (q = 0; q < Q; q++) { if (! vec_any_gt(dcv, DMXo(q))) break; DMXo(q) = vec_max(dcv, DMXo(q)); dcv = vec_adds(DMXo(q), *tsc); tsc++; } } while (q == Q); } else /* not calculating DD? then just store the last M->D vector calc'ed.*/ DMXo(0) = vec_sld(negInfv, dcv, 14); #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpVFRow(ox, i, xE, 0, xJ, xB, xC); #endif } /* end loop over sequence residues 1..L */ /* finally C->T */ if (xC > -32768) { *ret_sc = (float) xC + (float) om->xw[p7O_C][p7O_MOVE] - (float) om->base_w; /* *ret_sc += L * om->ncj_roundoff; see J4/150 for rationale: superceded by -3.0nat approximation*/ *ret_sc /= om->scale_w; *ret_sc -= 3.0; /* the NN/CC/JJ=0,-3nat approximation: see J5/36. That's ~ L \log \frac{L}{L+3}, for our NN,CC,JJ contrib */ } else *ret_sc = -eslINFINITY; return eslOK; } /*---------------- end, p7_ViterbiFilter() ----------------------*/ /* Function: p7_ViterbiFilter_longtarget() * Synopsis: Finds windows within potentially long sequence blocks with Viterbi * scores above threshold (vewy vewy fast, in limited precision) * * Purpose: Calculates an approximation of the Viterbi score for regions * of sequence , using optimized profile , and a pre- * allocated one-row DP matrix , and captures the positions * at which such regions exceed the score required to be * significant in the eyes of the calling function (usually * p=0.001). * * The resulting landmarks are converted to subsequence * windows by the calling function * * The model must be in a local alignment mode; other modes * cannot provide the necessary guarantee of no underflow. * * This is a striped SIMD Viterbi implementation using Intel * VMX integer intrinsics \citep{Farrar07}, in reduced * precision (signed words, 16 bits). * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * filtersc - null or bias correction, required for translating a P-value threshold into a score threshold * P - p-value below which a region is captured as being above threshold * windowlist - RETURN: array of hit windows (start and end of diagonal) for the above-threshold areas * * Returns: on success; * * Throws: if allocation is too small, or if * profile isn't in a local alignment mode. (Must be in local * alignment mode because that's what helps us guarantee * limited dynamic range.) * * Xref: See p7_ViterbiFilter() */ int p7_ViterbiFilter_longtarget(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float filtersc, double P, P7_HMM_WINDOWLIST *windowlist) { vector signed short mpv, dpv, ipv; /* previous row values */ vector signed short sv; /* temp storage of 1 curr row value in progress */ vector signed short dcv; /* delayed storage of D(i,q+1) */ vector signed short xEv; /* E state: keeps max for Mk->E as we go */ vector signed short xBv; /* B state: splatted vector of B[i-1] for B->Mk calculations */ vector signed short Dmaxv; /* keeps track of maximum D cell on row */ int16_t xE, xB, xC, xJ, xN; /* special states' scores */ int16_t Dmax; /* maximum D cell score on row */ int i; /* counter over sequence positions 1..L */ int q; /* counter over vectors 0..nq-1 */ int Q = p7O_NQW(om->M); /* segment length: # of vectors */ vector signed short *dp = ox->dpw[0]; /* using {MDI}MX(q) macro requires initialization of */ vector signed short *rsc; /* will point at om->ru[x] for residue x[i] */ vector signed short *tsc; /* will point into (and step thru) om->tu */ vector signed short negInfv; int16_t sc_thresh; float invP; int z; union { vector signed short v; int16_t i[8]; } tmp; windowlist->count = 0; /* * In p7_ViterbiFilter, converting from a scaled int Viterbi score * S (aka xE the score getting to state E) to a probability * goes like this: * vsc = S + om->xw[p7O_E][p7O_MOVE] + om->xw[p7O_C][p7O_MOVE] - om->base_w * ret_sc /= om->scale_w; * vsc -= 3.0; * P = esl_gumbel_surv((vfsc - filtersc) / eslCONST_LOG2 , om->evparam[p7_VMU], om->evparam[p7_VLAMBDA]); * and we're computing the threshold vsc, so invert it: * (vsc - filtersc) / eslCONST_LOG2 = esl_gumbel_invsurv( P, om->evparam[p7_VMU], om->evparam[p7_VLAMBDA]) * vsc = filtersc + eslCONST_LOG2 * esl_gumbel_invsurv( P, om->evparam[p7_VMU], om->evparam[p7_VLAMBDA]) * vsc += 3.0 * vsc *= om->scale_w * S = vsc - (float)om->xw[p7O_E][p7O_MOVE] - (float)om->xw[p7O_C][p7O_MOVE] + (float)om->base_w */ invP = esl_gumbel_invsurv(P, om->evparam[p7_VMU], om->evparam[p7_VLAMBDA]); sc_thresh = (int) ceil ( ( (filtersc + (eslCONST_LOG2 * invP) + 3.0) * om->scale_w ) - (float)om->xw[p7O_E][p7O_MOVE] - (float)om->xw[p7O_C][p7O_MOVE] + (float)om->base_w ); /* Check that the DP matrix is ok for us. */ if (Q > ox->allocQ8) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small"); if (om->mode != p7_LOCAL && om->mode != p7_UNILOCAL) ESL_EXCEPTION(eslEINVAL, "Fast filter only works for local alignment"); ox->M = om->M; negInfv = esl_vmx_set_s16((signed short)-32768); /* Initialization. In unsigned arithmetic, -infinity is -32768 */ for (q = 0; q < Q; q++) MMXo(q) = IMXo(q) = DMXo(q) = negInfv; xN = om->base_w; xB = xN + om->xw[p7O_N][p7O_MOVE]; xJ = -32768; xC = -32768; xE = -32768; #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpVFRow(ox, 0, xE, 0, xJ, xB, xC); /* first 0 is : do header. second 0 is xN: always 0 here. */ #endif for (i = 1; i <= L; i++) { rsc = om->rwv[dsq[i]]; tsc = om->twv; dcv = negInfv; /* "-infinity" */ xEv = negInfv; Dmaxv = negInfv; xBv = esl_vmx_set_s16(xB); /* Right shifts by 1 value (2 bytes). 4,8,12,x becomes x,4,8,12. * Because ia32 is littlendian, this means a left bit shift. * Zeros shift on automatically; replace it with -32768. */ mpv = MMXo(Q-1); mpv = vec_sld(negInfv, mpv, 14); dpv = DMXo(Q-1); dpv = vec_sld(negInfv, dpv, 14); ipv = IMXo(Q-1); ipv = vec_sld(negInfv, ipv, 14); for (q = 0; q < Q; q++) { /* Calculate new MMXo(i,q); don't store it yet, hold it in sv. */ sv = vec_adds(xBv, *tsc); tsc++; sv = vec_max (sv, vec_adds(mpv, *tsc)); tsc++; sv = vec_max (sv, vec_adds(ipv, *tsc)); tsc++; sv = vec_max (sv, vec_adds(dpv, *tsc)); tsc++; sv = vec_adds(sv, *rsc); rsc++; xEv = vec_max(xEv, sv); /* Load {MDI}(i-1,q) into mpv, dpv, ipv; * {MDI}MX(q) is then the current, not the prev row */ mpv = MMXo(q); dpv = DMXo(q); ipv = IMXo(q); /* Do the delayed stores of {MD}(i,q) now that memory is usable */ MMXo(q) = sv; DMXo(q) = dcv; /* Calculate the next D(i,q+1) partially: M->D only; * delay storage, holding it in dcv */ dcv = vec_adds(sv, *tsc); tsc++; Dmaxv = vec_max(dcv, Dmaxv); /* Calculate and store I(i,q) */ sv = vec_adds(mpv, *tsc); tsc++; IMXo(q)= vec_max(sv, vec_adds(ipv, *tsc)); tsc++; } /* Now the "special" states, which start from Mk->E (->C, ->J->B) */ xE = esl_vmx_hmax_s16(xEv); if (xE >= sc_thresh) { //hit score threshold. Add a window to the list, then reset scores. /* Unpack and unstripe, then find the position responsible for the hit */ for (q = 0; q < Q; q++) { tmp.v = MMXo(q); for (z = 0; z < 8; z++) { // unstripe if ( tmp.i[z] == xE && (q+Q*z+1) <= om->M) { // (q+Q*z+1) is the model position k at which the xE score is found p7_hmmwindow_new(windowlist, 0, i, i-1, (q+Q*z+1), 1, 0.0, p7_NOCOMPLEMENT, L ); } } MMXo(q) = IMXo(q) = DMXo(q) = negInfv; //reset score to start search for next vit window. } } else { xN = xN + om->xw[p7O_N][p7O_LOOP]; xC = ESL_MAX(xC + om->xw[p7O_C][p7O_LOOP], xE + om->xw[p7O_E][p7O_MOVE]); xJ = ESL_MAX(xJ + om->xw[p7O_J][p7O_LOOP], xE + om->xw[p7O_E][p7O_LOOP]); xB = ESL_MAX(xJ + om->xw[p7O_J][p7O_MOVE], xN + om->xw[p7O_N][p7O_MOVE]); /* and now xB will carry over into next i, and xC carries over after i=L */ /* Finally the "lazy F" loop (sensu [Farrar07]). We can often * prove that we don't need to evaluate any D->D paths at all. * * The observation is that if we can show that on the next row, * B->M(i+1,k) paths always dominate M->D->...->D->M(i+1,k) paths * for all k, then we don't need any D->D calculations. * * The test condition is: * max_k D(i,k) + max_k ( TDD(k-2) + TDM(k-1) - TBM(k) ) < xB(i) * So: * max_k (TDD(k-2) + TDM(k-1) - TBM(k)) is precalc'ed in om->dd_bound; * max_k D(i,k) is why we tracked Dmaxv; * xB(i) was just calculated above. */ Dmax = esl_vmx_hmax_s16(Dmaxv); if (Dmax + om->ddbound_w > xB) { /* Now we're obligated to do at least one complete DD path to be sure. */ /* dcv has carried through from end of q loop above */ dcv = vec_sld(negInfv, dcv, 14); tsc = om->twv + 7*Q; /* set tsc to start of the DD's */ for (q = 0; q < Q; q++) { DMXo(q) = vec_max(dcv, DMXo(q)); dcv = vec_adds(DMXo(q), *tsc); tsc++; } /* We may have to do up to three more passes; the check * is for whether crossing a segment boundary can improve * our score. */ do { dcv = vec_sld(negInfv, dcv, 14); tsc = om->twv + 7*Q; /* set tsc to start of the DD's */ for (q = 0; q < Q; q++) { if (! vec_any_gt(dcv, DMXo(q))) break; DMXo(q) = vec_max(dcv, DMXo(q)); dcv = vec_adds(DMXo(q), *tsc); tsc++; } } while (q == Q); } else /* not calculating DD? then just store the last M->D vector calc'ed.*/ DMXo(0) = vec_sld(negInfv, dcv, 14); #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpVFRow(ox, i, xE, 0, xJ, xB, xC); #endif } } /* end loop over sequence residues 1..L */ return eslOK; } /*---------------- end, p7_ViterbiFilter() ----------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ #ifdef p7VITFILTER_BENCHMARK /* -c, -x are used for debugging, testing; see msvfilter.c for explanation */ /* gcc -o vitfilter_benchmark -std=gnu99 -g -Wall -maltivec -I.. -L.. -I../../easel -L../../easel -Dp7VITFILTER_BENCHMARK vitfilter.c -lhmmer -leasel -lm icc -o vitfilter_benchmark -O3 -static -I.. -L.. -I../../easel -L../../easel -Dp7VITFILTER_BENCHMARK vitfilter.c -lhmmer -leasel -lm ./benchmark-vitfilter runs benchmark ./benchmark-vitfilter -N100 -c compare scores to generic impl ./benchmark-vitfilter -N100 -x compare scores to exact emulation */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for Viterbi filter"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc1, sc2; double base_time, bench_time, Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); if (esl_opt_GetBoolean(go, "-x")) p7_profile_SameAsVF(om, gm); ox = p7_omx_Create(gm->M, 0, 0); gx = p7_gmx_Create(gm->M, L); /* Get a baseline time: how long it takes just to generate the sequences */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; /* Run the benchmark */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_ViterbiFilter(dsq, L, om, ox, &sc1); if (esl_opt_GetBoolean(go, "-c")) { p7_GViterbi(dsq, L, gm, gx, &sc2); printf("%.4f %.4f\n", sc1, sc2); } if (esl_opt_GetBoolean(go, "-x")) { p7_GViterbi(dsq, L, gm, gx, &sc2); sc2 /= om->scale_w; if (om->mode == p7_UNILOCAL) sc2 -= 2.0; /* that's ~ L \log \frac{L}{L+2}, for our NN,CC,JJ */ else if (om->mode == p7_LOCAL) sc2 -= 3.0; /* that's ~ L \log \frac{L}{L+3}, for our NN,CC,JJ */ printf("%.4f %.4f\n", sc1, sc2); } } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7VITFILTER_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 3. Unit tests. *****************************************************************/ #ifdef p7VITFILTER_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" /* ViterbiFilter() unit test * * We can check that scores are identical (within machine error) to * scores of generic DP with scores rounded the same way. Do this for * a random model of length , for test sequences of length . * * We assume that we don't accidentally generate a high-scoring random * sequence that overflows ViterbiFilter()'s limited range. * */ static void utest_viterbi_filter(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *ox = p7_omx_Create(M, 0, 0); P7_GMX *gx = p7_gmx_Create(M, L); float sc1, sc2; p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om); p7_profile_SameAsVF(om, gm); /* round and scale the scores in the same as in */ #if 0 p7_oprofile_Dump(stdout, om); // dumps the optimized profile p7_omx_SetDumpMode(stdout, ox, TRUE); // makes the fast DP algorithms dump their matrices #endif while (N--) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_ViterbiFilter(dsq, L, om, ox, &sc1); p7_GViterbi (dsq, L, gm, gx, &sc2); #if 0 p7_gmx_Dump(stdout, gx, p7_DEFAULT); // dumps a generic DP matrix #endif sc2 /= om->scale_w; sc2 -= 3.0; if (fabs(sc1-sc2) > 0.001) esl_fatal("viterbi filter unit test failed: scores differ (%.2f, %.2f)", sc1, sc2); } free(dsq); p7_hmm_Destroy(hmm); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); } #endif /*p7VITFILTER_TESTDRIVE*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7VITFILTER_TESTDRIVE /* gcc -g -Wall -maltivec -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o vitfilter_utest -Dp7VITFILTER_TESTDRIVE vitfilter.c -lhmmer -leasel -lm ./vitfilter_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "-L", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "145", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for the VMX implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* First round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (esl_opt_GetBoolean(go, "-v")) printf("ViterbiFilter() tests, DNA\n"); utest_viterbi_filter(r, abc, bg, M, L, N); utest_viterbi_filter(r, abc, bg, 1, L, 10); utest_viterbi_filter(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); /* Second round of tests for amino alphabets. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (esl_opt_GetBoolean(go, "-v")) printf("ViterbiFilter() tests, protein\n"); utest_viterbi_filter(r, abc, bg, M, L, N); utest_viterbi_filter(r, abc, bg, 1, L, 10); utest_viterbi_filter(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*VITFILTER_TESTDRIVE*/ /*---------------- end, test driver -----------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7VITFILTER_EXAMPLE /* A minimal example. Also useful for debugging on small HMMs and sequences. gcc -g -Wall -maltivec -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o vitfilter_example -Dp7VITFILTER_EXAMPLE vitfilter.c -lhmmer -leasel -lm ./vitfilter_example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_gumbel.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in one line awkable format", 0 }, { "-P", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in profmark format", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of Viterbi filter algorithm"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float vfraw, nullsc, vfscore; float graw, gscore; double P, gP; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); /* allocate DP matrices, both a generic and an optimized one */ ox = p7_omx_Create(gm->M, 0, sq->n); gx = p7_gmx_Create(gm->M, sq->n); /* Useful to place and compile in for debugging: p7_oprofile_Dump(stdout, om); dumps the optimized profile p7_omx_SetDumpMode(ox, TRUE); makes the fast DP algorithms dump their matrices p7_gmx_Dump(stdout, gx, p7_DEFAULT); dumps a generic DP matrix */ while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { p7_oprofile_ReconfigLength(om, sq->n); p7_ReconfigLength(gm, sq->n); p7_bg_SetLength(bg, sq->n); p7_omx_GrowTo(ox, om->M, 0, sq->n); p7_gmx_GrowTo(gx, gm->M, sq->n); p7_ViterbiFilter (sq->dsq, sq->n, om, ox, &vfraw); p7_bg_NullOne (bg, sq->dsq, sq->n, &nullsc); vfscore = (vfraw - nullsc) / eslCONST_LOG2; P = esl_gumbel_surv(vfscore, om->evparam[p7_VMU], om->evparam[p7_VLAMBDA]); p7_GViterbi (sq->dsq, sq->n, gm, gx, &graw); gscore = (graw - nullsc) / eslCONST_LOG2; gP = esl_gumbel_surv(gscore, gm->evparam[p7_VMU], gm->evparam[p7_VLAMBDA]); if (esl_opt_GetBoolean(go, "-1")) { printf("%-30s\t%-20s\t%9.2g\t%7.2f\t%9.2g\t%7.2f\n", sq->name, hmm->name, P, vfscore, gP, gscore); } else if (esl_opt_GetBoolean(go, "-P")) { /* output suitable for direct use in profmark benchmark postprocessors: */ printf("%g\t%.2f\t%s\t%s\n", P, vfscore, sq->name, hmm->name); } else { printf("target sequence: %s\n", sq->name); printf("vit filter raw score: %.2f nats\n", vfraw); printf("null score: %.2f nats\n", nullsc); printf("per-seq score: %.2f bits\n", vfscore); printf("P-value: %g\n", P); printf("GViterbi raw score: %.2f nats\n", graw); printf("GViterbi seq score: %.2f bits\n", gscore); printf("GViterbi P-value: %g\n", gP); } esl_sq_Reuse(sq); } /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7VITFILTER_EXAMPLE*/ /*-------------------- end, example -----------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_vmx/Makefile.in0000664361611702660230000001271012473612613016760 0ustar wheelerteddytop_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ SHELL = /bin/sh prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ CC = @CC@ CFLAGS = @CFLAGS@ @PTHREAD_CFLAGS@ @PIC_FLAGS@ SIMDFLAGS = @SIMD_CFLAGS@ CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ DEFS = @DEFS@ LIBS = -lhmmer -leasel @LIBS@ -lm AR = @AR@ RANLIB = @RANLIB@ INSTALL = @INSTALL@ ESLDIR = @HMMER_ESLDIR@ MYLIBDIRS = -L../../${ESLDIR} -L.. MYINCDIRS = -I../../${ESLDIR} \ -I${top_srcdir}/easel \ -I. \ -I.. \ -I${srcdir} \ -I${top_srcdir}/src \ -I${srcdir}/.. OBJS = decoding.o\ fwdback.o\ io.o\ msvfilter.o\ null2.o\ optacc.o\ stotrace.o\ vitfilter.o\ p7_omx.o\ p7_oprofile.o\ mpi.o HDRS = impl_vmx.h UTESTS = @MPI_UTESTS@\ decoding_utest\ fwdback_utest\ io_utest\ msvfilter_utest\ null2_utest\ optacc_utest\ stotrace_utest\ vitfilter_utest BENCHMARKS = @MPI_BENCHMARKS@\ decoding_benchmark\ fwdback_benchmark\ msvfilter_benchmark\ null2_benchmark\ optacc_benchmark\ stotrace_benchmark\ vitfilter_benchmark EXAMPLES =\ fwdback_example\ io_example\ msvfilter_example\ optacc_example\ p7_oprofile_example\ stotrace_example\ vitfilter_example # beautification magic stolen from git QUIET_SUBDIR0 = +${MAKE} -C #space separator after -c QUIET_SUBDIR1 = ifndef V QUIET_CC = @echo ' ' CC $@; QUIET_GEN = @echo ' ' GEN $@; QUIET_AR = @echo ' ' AR $@; QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR1 = ; echo ' ' SUBDIR $$subdir; \ ${MAKE} -C $$subdir endif .PHONY: all dev check tests install uninstall distclean clean all: libhmmer-impl.stamp dev: ${UTESTS} ${BENCHMARKS} ${EXAMPLES} check: ${UTESTS} tests: ${UTESTS} libhmmer-impl.stamp: ${OBJS} ${QUIET_AR}${AR} -r ../libhmmer.a $? > /dev/null 2>&1 @${RANLIB} ../libhmmer.a @echo "impl_lib objects compiled:\c" > $@ @date >> $@ .FORCE: ${OBJS}: ${HDRS} ../hmmer.h .c.o: ${QUIET_CC}${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${DEFS} ${PTHREAD_CFLAGS} ${MYINCDIRS} -c $< ${UTESTS}: libhmmer-impl.stamp ../libhmmer.a ${HDRS} ../hmmer.h @BASENAME=`echo $@ | sed -e 's/_utest//'| sed -e 's/^p7_//'` ;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=p7$${DFLAG}_TESTDRIVE ;\ if test -e ${srcdir}/p7_$${BASENAME}.c; then \ DFILE=${srcdir}/p7_$${BASENAME}.c ;\ else \ DFILE=${srcdir}/$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS} ${BENCHMARKS}: libhmmer-impl.stamp ../libhmmer.a ${HDRS} ../hmmer.h @BASENAME=`echo $@ | sed -e 's/_benchmark//' | sed -e 's/^p7_//'`;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=p7$${DFLAG}_BENCHMARK ;\ if test -e ${srcdir}/p7_$${BASENAME}.c; then \ DFILE=${srcdir}/p7_$${BASENAME}.c ;\ else \ DFILE=${srcdir}/$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS} ${EXAMPLES}: libhmmer-impl.stamp ../libhmmer.a ${HDRS} ../hmmer.h @BASENAME=`echo $@ | sed -e 's/_example//'| sed -e 's/^p7_//'` ;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=p7$${DFLAG}_EXAMPLE ;\ if test -e ${srcdir}/p7_$${BASENAME}.c; then \ DFILE=${srcdir}/p7_$${BASENAME}.c ;\ else \ DFILE=${srcdir}/$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS} install: for file in ${HDRS}; do \ ${INSTALL} -m 0644 ${srcdir}/$$file ${DESTDIR}${includedir}/ ;\ done uninstall: for file in ${HDRS}; do \ rm -f ${DESTDIR}${includedir}/$$file ;\ done distclean: clean -rm -f Makefile clean: -rm -f impl_lib.stamp -rm -f ${UTESTS} -rm -f ${BENCHMARKS} -rm -f ${EXAMPLES} -rm -f *.o *~ Makefile.bak core TAGS gmon.out cscope.out -rm -f *.gcno for prog in ${UTESTS} ${BENCHMARKS} ${EXAMPLES}; do \ if test -d $$prog.dSYM; then rm -rf $$prog.dSYM ; fi ;\ done ################################################################ # HMMER - Biological sequence analysis with profile HMMs # Version 3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # HMMER is distributed under the terms of the GNU General Public License # (GPLv3). See the LICENSE file for details. # # SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/impl_vmx/Makefile.in $ # SVN $Id: Makefile.in 4321 2012-11-27 16:15:47Z wheelert $ ################################################################ hmmer-3.1b2/src/impl_vmx/fwdback.c0000664361611702660230000014053512473612613016467 0ustar wheelerteddy/* VMX implementation of Forward and Backward algorithms. * * Both profile and DP matrix are striped and interleaved, for fast * SIMD vector operations. Calculations are in probability space * (scaled odds ratios, actually) rather than log probabilities, * allowing fast multiply/add operations rather than slow Logsum() * calculations. Sparse rescaling is used to achieve full dynamic * range of scores. * * The Forward and Backward implementations may be used either in a * full O(ML) mode that keeps an entire DP matrix, or in a O(M+L) * linear memory "parsing" mode that only keeps one row of memory for * the main MDI states and one column 0..L for the special states * B,E,N,C,J. Keeping a full matrix allows subsequent stochastic * traceback or posterior decoding of any state. In parsing mode, we * can do posterior decoding on the special states and determine * regions of the target sequence that are generated by the * nonhomology states (NCJ) versus not -- thus, identifying where * high-probability "regions" are, the first step of identifying the * domain structure of a target sequence. * * Contents: * 1. Forward/Backward wrapper API * 2. Forward and Backward engine implementations * 4. Benchmark driver. * 5. Unit tests. * 6. Test driver. * 7. Example. * 8. Copyright and license information. * * SRE, Thu Jul 31 08:43:20 2008 [Janelia] * SVN $Id: fwdback.c 3665 2011-08-25 13:45:55Z eddys $ */ #include "p7_config.h" #include #include #ifndef __APPLE_ALTIVEC__ #include #endif #include "easel.h" #include "esl_vmx.h" #include "hmmer.h" #include "impl_vmx.h" static int forward_engine (int do_full, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *fwd, float *opt_sc); static int backward_engine(int do_full, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc); /***************************************************************** * 1. Forward/Backward API. *****************************************************************/ /* Function: p7_Forward() * Synopsis: The Forward algorithm, full matrix fill version. * Incept: SRE, Fri Aug 15 18:59:43 2008 [Casa de Gatos] * * Purpose: Calculates the Forward algorithm for sequence of * length residues, using optimized profile , and a * preallocated DP matrix . Upon successful return, * contains the filled Forward matrix, and <*opt_sc> * optionally contains the raw Forward score in nats. * * This calculation requires $O(ML)$ memory and time. * The caller must provide a suitably allocated full * by calling or * . * * The model must be configured in local alignment * mode. The sparse rescaling method used to keep * probability values within single-precision floating * point dynamic range cannot be safely applied to models in * glocal or global mode. * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - RETURN: Forward DP matrix * opt_sc - RETURN: Forward score (in nats) * * Returns: on success. * * Throws: if allocation is too small, or if the profile * isn't in local alignment mode. * if the score exceeds the limited range of * a probability-space odds ratio. * In either case, <*opt_sc> is undefined. */ int p7_Forward(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *opt_sc) { #ifdef p7_DEBUGGING if (om->M > ox->allocQ4*4) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few columns)"); if (L >= ox->validR) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few MDI rows)"); if (L >= ox->allocXR) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few X rows)"); if (! p7_oprofile_IsLocal(om)) ESL_EXCEPTION(eslEINVAL, "Forward implementation makes assumptions that only work for local alignment"); #endif return forward_engine(TRUE, dsq, L, om, ox, opt_sc); } /* Function: p7_ForwardParser() * Synopsis: The Forward algorithm, linear memory parsing version. * Incept: SRE, Fri Aug 15 19:05:26 2008 [Casa de Gatos] * * Purpose: Same as by calling or * . * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - RETURN: Forward DP matrix * ret_sc - RETURN: Forward score (in nats) * * Returns: on success. * * Throws: if allocation is too small, or if the profile * isn't in local alignment mode. * if the score exceeds the limited range of * a probability-space odds ratio. * In either case, <*opt_sc> is undefined. */ int p7_ForwardParser(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *opt_sc) { #ifdef p7_DEBUGGING if (om->M > ox->allocQ4*4) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few columns)"); if (ox->validR < 1) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few MDI rows)"); if (L >= ox->allocXR) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few X rows)"); if (! p7_oprofile_IsLocal(om)) ESL_EXCEPTION(eslEINVAL, "Forward implementation makes assumptions that only work for local alignment"); #endif return forward_engine(FALSE, dsq, L, om, ox, opt_sc); } /* Function: p7_Backward() * Synopsis: The Backward algorithm; full matrix fill version. * Incept: SRE, Sat Aug 16 08:34:22 2008 [Janelia] * * Purpose: Calculates the Backward algorithm for sequence of * length residues, using optimized profile , and a * preallocated DP matrix . A filled Forward matrix * must also be provided in , because we need to use * the same sparse scaling factors that Forward used. The * matrix is filled in, and the Backward score (in * nats) is optionally returned in . * * This calculation requires $O(ML)$ memory and time. The * caller must provide a suitably allocated full by * calling or * . * * Because only the sparse scaling factors are needed from * the matrix, the caller may have this matrix * calculated either in full or parsing mode. * * The model must be configured in local alignment * mode. The sparse rescaling method used to keep * probability values within single-precision floating * point dynamic range cannot be safely applied to models in * glocal or global mode. * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * fwd - filled Forward DP matrix, for scale factors * do_full - TRUE=full matrix; FALSE=linear memory parse mode * bck - RETURN: filled Backward matrix * opt_sc - optRETURN: Backward score (in nats) * * Returns: on success. * * Throws: if allocation is too small, or if the profile * isn't in local alignment mode. * if the score exceeds the limited range of * a probability-space odds ratio. * In either case, <*opt_sc> is undefined. */ int p7_Backward(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc) { #ifdef p7_DEBUGGING if (om->M > bck->allocQ4*4) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few columns)"); if (L >= bck->validR) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few MDI rows)"); if (L >= bck->allocXR) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few X rows)"); if (L != fwd->L) ESL_EXCEPTION(eslEINVAL, "fwd matrix size doesn't agree with length L"); if (! p7_oprofile_IsLocal(om)) ESL_EXCEPTION(eslEINVAL, "Forward implementation makes assumptions that only work for local alignment"); #endif return backward_engine(TRUE, dsq, L, om, fwd, bck, opt_sc); } /* Function: p7_BackwardParser() * Synopsis: The Backward algorithm, linear memory parsing version. * Incept: SRE, Sat Aug 16 08:34:13 2008 [Janelia] * * Purpose: Same as except that the full matrix isn't * kept. Instead, a linear $O(M+L)$ memory algorithm is * used, keeping only the DP matrix values for the special * (BENCJ) states. These are sufficient to do posterior * decoding to identify high-probability regions where * domains are. * * The caller must provide a suitably allocated "parsing" * by calling or * . * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * fwd - filled Forward DP matrix, for scale factors * bck - RETURN: filled Backward matrix * opt_sc - optRETURN: Backward score (in nats) * * Returns: on success. * * Throws: if allocation is too small, or if the profile * isn't in local alignment mode. * if the score exceeds the limited range of * a probability-space odds ratio. * In either case, <*opt_sc> is undefined. */ int p7_BackwardParser(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc) { #ifdef p7_DEBUGGING if (om->M > bck->allocQ4*4) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few columns)"); if (bck->validR < 1) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few MDI rows)"); if (L >= bck->allocXR) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small (too few X rows)"); if (L != fwd->L) ESL_EXCEPTION(eslEINVAL, "fwd matrix size doesn't agree with length L"); if (! p7_oprofile_IsLocal(om)) ESL_EXCEPTION(eslEINVAL, "Forward implementation makes assumptions that only work for local alignment"); #endif return backward_engine(FALSE, dsq, L, om, fwd, bck, opt_sc); } /***************************************************************** * 2. Forward/Backward engine implementations (called thru API) *****************************************************************/ static int forward_engine(int do_full, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *opt_sc) { vector float mpv, dpv, ipv; /* previous row values */ vector float sv; /* temp storage of 1 curr row value in progress */ vector float dcv; /* delayed storage of D(i,q+1) */ vector float xEv; /* E state: keeps max for Mk->E as we go */ vector float xBv; /* B state: splatted vector of B[i-1] for B->Mk calculations */ vector float zerov; /* splatted 0.0's in a vector */ float xN, xE, xB, xC, xJ; /* special states' scores */ int i; /* counter over sequence positions 1..L */ int q; /* counter over quads 0..nq-1 */ int j; /* counter over DD iterations (4 is full serialization) */ int Q = p7O_NQF(om->M); /* segment length: # of vectors */ vector float *dpc = ox->dpf[0]; /* current row, for use in {MDI}MO(dpp,q) access macro */ vector float *dpp; /* previous row, for use in {MDI}MO(dpp,q) access macro */ vector float *rp; /* will point at om->rfv[x] for residue x[i] */ vector float *tp; /* will point into (and step thru) om->tfv */ /* Initialization. */ ox->M = om->M; ox->L = L; ox->has_own_scales = TRUE; /* all forward matrices control their own scalefactors */ zerov = (vector float) vec_splat_u32(0); for (q = 0; q < Q; q++) MMO(dpc,q) = IMO(dpc,q) = DMO(dpc,q) = zerov; xE = ox->xmx[p7X_E] = 0.; xN = ox->xmx[p7X_N] = 1.; xJ = ox->xmx[p7X_J] = 0.; xB = ox->xmx[p7X_B] = om->xf[p7O_N][p7O_MOVE]; xC = ox->xmx[p7X_C] = 0.; ox->xmx[p7X_SCALE] = 1.0; ox->totscale = 0.0; #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpFBRow(ox, TRUE, 0, 9, 5, xE, xN, xJ, xB, xC); /* logify=TRUE, =0, width=8, precision=5*/ #endif for (i = 1; i <= L; i++) { dpp = dpc; dpc = ox->dpf[do_full * i]; /* avoid conditional, use do_full as kronecker delta */ rp = om->rfv[dsq[i]]; tp = om->tfv; dcv = (vector float) vec_splat_u32(0); xEv = (vector float) vec_splat_u32(0); xBv = esl_vmx_set_float(xB); /* Right shifts by 4 bytes. 4,8,12,x becomes x,4,8,12. Shift zeros on. */ mpv = vec_sld(zerov, MMO(dpp,Q-1), 12); dpv = vec_sld(zerov, DMO(dpp,Q-1), 12); ipv = vec_sld(zerov, IMO(dpp,Q-1), 12); for (q = 0; q < Q; q++) { /* Calculate new MMO(i,q); don't store it yet, hold it in sv. */ sv = (vector float) vec_splat_u32(0); sv = vec_madd(xBv, *tp, sv); tp++; sv = vec_madd(mpv, *tp, sv); tp++; sv = vec_madd(ipv, *tp, sv); tp++; sv = vec_madd(dpv, *tp, sv); tp++; sv = vec_madd(sv, *rp, zerov); rp++; xEv = vec_add(xEv, sv); /* Load {MDI}(i-1,q) into mpv, dpv, ipv; * {MDI}MX(q) is then the current, not the prev row */ mpv = MMO(dpp,q); dpv = DMO(dpp,q); ipv = IMO(dpp,q); /* Do the delayed stores of {MD}(i,q) now that memory is usable */ MMO(dpc,q) = sv; DMO(dpc,q) = dcv; /* Calculate the next D(i,q+1) partially: M->D only; * delay storage, holding it in dcv */ dcv = vec_madd(sv, *tp, zerov); tp++; /* Calculate and store I(i,q); assumes odds ratio for emission is 1.0 */ sv = vec_madd(mpv, *tp, zerov); tp++; IMO(dpc,q) = vec_madd(ipv, *tp, sv); tp++; } /* Now the DD paths. We would rather not serialize them but * in an accurate Forward calculation, we have few options. */ /* dcv has carried through from end of q loop above; store it * in first pass, we add M->D and D->D path into DMX */ /* We're almost certainly're obligated to do at least one complete * DD path to be sure: */ dcv = vec_sld(zerov, dcv, 12); DMO(dpc,0) = (vector float) vec_splat_u32(0); tp = om->tfv + 7*Q; /* set tp to start of the DD's */ for (q = 0; q < Q; q++) { DMO(dpc,q) = vec_add(dcv, DMO(dpc,q)); dcv = vec_madd(DMO(dpc,q), *tp, zerov); tp++; /* extend DMO(q), so we include M->D and D->D paths */ } /* now. on small models, it seems best (empirically) to just go * ahead and serialize. on large models, we can do a bit better, * by testing for when dcv (DD path) accrued to DMO(q) is below * machine epsilon for all q, in which case we know DMO(q) are all * at their final values. The tradeoff point is (empirically) somewhere around M=100, * at least on my desktop. We don't worry about the conditional here; * it's outside any inner loops. */ if (om->M < 100) { /* Fully serialized version */ for (j = 1; j < 4; j++) { dcv = vec_sld(zerov, dcv, 12); tp = om->tfv + 7*Q; /* set tp to start of the DD's */ for (q = 0; q < Q; q++) { /* note, extend dcv, not DMO(q); only adding DD paths now */ DMO(dpc,q) = vec_add(dcv, DMO(dpc,q)); dcv = vec_madd(dcv, *tp, zerov); tp++; } } } else { /* Slightly parallelized version, but which incurs some overhead */ for (j = 1; j < 4; j++) { vector bool int cv; /* keeps track of whether any DD's change DMO(q) */ dcv = vec_sld(zerov, dcv, 12); tp = om->tfv + 7*Q; /* set tp to start of the DD's */ cv = (vector bool int) vec_splat_u32(0); for (q = 0; q < Q; q++) { /* using cmpgt below tests if DD changed any DMO(q) *without* conditional branch */ sv = vec_add(dcv, DMO(dpc,q)); cv = vec_or(cv, vec_cmpgt(sv, DMO(dpc,q))); DMO(dpc,q) = sv; /* store new DMO(q) */ dcv = vec_madd(dcv, *tp, zerov); tp++; /* note, extend dcv, not DMO(q) */ } /* DD's didn't change any DMO(q)? Then done, break out. */ if (vec_all_eq(cv, (vector bool int)zerov)) break; } } /* Add D's to xEv */ for (q = 0; q < Q; q++) xEv = vec_add(DMO(dpc,q), xEv); /* Finally the "special" states, which start from Mk->E (->C, ->J->B) */ /* The following incantation is a horizontal sum of xEv's elements */ /* These must follow DD calculations, because D's contribute to E in Forward * (as opposed to Viterbi) */ xE = esl_vmx_hsum_float(xEv); xN = xN * om->xf[p7O_N][p7O_LOOP]; xC = (xC * om->xf[p7O_C][p7O_LOOP]) + (xE * om->xf[p7O_E][p7O_MOVE]); xJ = (xJ * om->xf[p7O_J][p7O_LOOP]) + (xE * om->xf[p7O_E][p7O_LOOP]); xB = (xJ * om->xf[p7O_J][p7O_MOVE]) + (xN * om->xf[p7O_N][p7O_MOVE]); /* and now xB will carry over into next i, and xC carries over after i=L */ /* Sparse rescaling. xE above threshold? trigger a rescaling event. */ if (xE > 1.0e4) /* that's a little less than e^10, ~10% of our dynamic range */ { xN = xN / xE; xC = xC / xE; xJ = xJ / xE; xB = xB / xE; xEv = esl_vmx_set_float(1.0 / xE); for (q = 0; q < Q; q++) { MMO(dpc,q) = vec_madd(MMO(dpc,q), xEv, zerov); DMO(dpc,q) = vec_madd(DMO(dpc,q), xEv, zerov); IMO(dpc,q) = vec_madd(IMO(dpc,q), xEv, zerov); } ox->xmx[i*p7X_NXCELLS+p7X_SCALE] = xE; ox->totscale += log(xE); xE = 1.0; } else ox->xmx[i*p7X_NXCELLS+p7X_SCALE] = 1.0; /* Storage of the specials. We could've stored these already * but using xE, etc. variables makes it easy to convert this * code to O(M) memory versions just by deleting storage steps. */ ox->xmx[i*p7X_NXCELLS+p7X_E] = xE; ox->xmx[i*p7X_NXCELLS+p7X_N] = xN; ox->xmx[i*p7X_NXCELLS+p7X_J] = xJ; ox->xmx[i*p7X_NXCELLS+p7X_B] = xB; ox->xmx[i*p7X_NXCELLS+p7X_C] = xC; #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpFBRow(ox, TRUE, i, 9, 5, xE, xN, xJ, xB, xC); /* logify=TRUE, =i, width=8, precision=5*/ #endif } /* end loop over sequence residues 1..L */ /* finally C->T, and flip total score back to log space (nats) */ /* On overflow, xC is inf or nan (nan arises because inf*0 = nan). */ /* On an underflow (which shouldn't happen), we counterintuitively return infinity: * the effect of this is to force the caller to rescore us with full range. */ if (isnan(xC)) ESL_EXCEPTION(eslERANGE, "forward score is NaN"); else if (L>0 && xC == 0.0) ESL_EXCEPTION(eslERANGE, "forward score underflow (is 0.0)"); /* [J5/118] */ else if (isinf(xC) == 1) ESL_EXCEPTION(eslERANGE, "forward score overflow (is infinity)"); if (opt_sc != NULL) *opt_sc = ox->totscale + log(xC * om->xf[p7O_C][p7O_MOVE]); return eslOK; } static int backward_engine(int do_full, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc) { vector float mpv, ipv, dpv; /* previous row values */ vector float mcv, dcv; /* current row values */ vector float tmmv, timv, tdmv; /* tmp vars for accessing rotated transition scores */ vector float xBv; /* collects B->Mk components of B(i) */ vector float xEv; /* splatted E(i) */ vector float zerov; /* splatted 0.0's in a vector */ float xN, xE, xB, xC, xJ; /* special states' scores */ int i; /* counter over sequence positions 0,1..L */ int q; /* counter over quads 0..Q-1 */ int Q = p7O_NQF(om->M); /* segment length: # of vectors */ int j; /* DD segment iteration counter (4 = full serialization) */ vector float *dpc; /* current DP row */ vector float *dpp; /* next ("previous") DP row */ vector float *rp; /* will point into om->rfv[x] for residue x[i+1] */ vector float *tp; /* will point into (and step thru) om->tfv transition scores */ /* initialize the L row. */ bck->M = om->M; bck->L = L; bck->has_own_scales = FALSE; /* backwards scale factors are *usually* given by */ dpc = bck->dpf[L * do_full]; xJ = 0.0; xB = 0.0; xN = 0.0; xC = om->xf[p7O_C][p7O_MOVE]; /* C<-T */ xE = xC * om->xf[p7O_E][p7O_MOVE]; /* E<-C, no tail */ xEv = esl_vmx_set_float(xE); zerov = (vector float) vec_splat_u32(0); dcv = (vector float) vec_splat_u32(0);; /* solely to silence a compiler warning */ for (q = 0; q < Q; q++) MMO(dpc,q) = DMO(dpc,q) = xEv; for (q = 0; q < Q; q++) IMO(dpc,q) = zerov; /* init row L's DD paths, 1) first segment includes xE, from DMO(q) */ tp = om->tfv + 8*Q - 1; /* <*tp> now the [4 8 12 x] TDD quad */ dpv = vec_sld(DMO(dpc,Q-1), zerov, 4); for (q = Q-1; q >= 1; q--) { DMO(dpc,q) = vec_madd(dpv, *tp, DMO(dpc,q)); tp--; dpv = DMO(dpc,q); } dcv = vec_madd(dpv, *tp, zerov); DMO(dpc,q) = vec_add(DMO(dpc,q), dcv); /* 2) three more passes, only extending DD component (dcv only; no xE contrib from DMO(q)) */ for (j = 1; j < 4; j++) { tp = om->tfv + 8*Q - 1; /* <*tp> now the [4 8 12 x] TDD quad */ dcv = vec_sld(dcv, zerov, 4); for (q = Q-1; q >= 0; q--) { dcv = vec_madd(dcv, *tp, zerov); tp--; DMO(dpc,q) = vec_add(DMO(dpc,q), dcv); } } /* now MD init */ tp = om->tfv + 7*Q - 3; /* <*tp> now the [4 8 12 x] Mk->Dk+1 quad */ dcv = vec_sld(DMO(dpc,0), zerov, 4); for (q = Q-1; q >= 0; q--) { MMO(dpc,q) = vec_madd(dcv, *tp, MMO(dpc,q)); tp -= 7; dcv = DMO(dpc,q); } /* Sparse rescaling: same scale factors as fwd matrix */ if (fwd->xmx[L*p7X_NXCELLS+p7X_SCALE] > 1.0) { xE = xE / fwd->xmx[L*p7X_NXCELLS+p7X_SCALE]; xN = xN / fwd->xmx[L*p7X_NXCELLS+p7X_SCALE]; xC = xC / fwd->xmx[L*p7X_NXCELLS+p7X_SCALE]; xJ = xJ / fwd->xmx[L*p7X_NXCELLS+p7X_SCALE]; xB = xB / fwd->xmx[L*p7X_NXCELLS+p7X_SCALE]; xEv = esl_vmx_set_float(1.0 / fwd->xmx[L*p7X_NXCELLS+p7X_SCALE]); for (q = 0; q < Q; q++) { MMO(dpc,q) = vec_madd(MMO(dpc,q), xEv, zerov); DMO(dpc,q) = vec_madd(DMO(dpc,q), xEv, zerov); IMO(dpc,q) = vec_madd(IMO(dpc,q), xEv, zerov); } } bck->xmx[L*p7X_NXCELLS+p7X_SCALE] = fwd->xmx[L*p7X_NXCELLS+p7X_SCALE]; bck->totscale = log(bck->xmx[L*p7X_NXCELLS+p7X_SCALE]); /* Stores */ bck->xmx[L*p7X_NXCELLS+p7X_E] = xE; bck->xmx[L*p7X_NXCELLS+p7X_N] = xN; bck->xmx[L*p7X_NXCELLS+p7X_J] = xJ; bck->xmx[L*p7X_NXCELLS+p7X_B] = xB; bck->xmx[L*p7X_NXCELLS+p7X_C] = xC; #if p7_DEBUGGING if (bck->debugging) p7_omx_DumpFBRow(bck, TRUE, L, 9, 4, xE, xN, xJ, xB, xC); /* logify=TRUE, =L, width=9, precision=4*/ #endif /* main recursion */ for (i = L-1; i >= 1; i--) /* backwards stride */ { /* phase 1. B(i) collected. Old row destroyed, new row contains * complete I(i,k), partial {MD}(i,k) w/ no {MD}->{DE} paths yet. */ dpc = bck->dpf[i * do_full]; dpp = bck->dpf[(i+1) * do_full]; rp = om->rfv[dsq[i+1]] + Q-1; /* <*rp> is now the [4 8 12 x] match emission quad */ tp = om->tfv + 7*Q - 1; /* <*tp> is now the [4 8 12 x] TII transition quad */ /* leftshift the first transition quads */ tmmv = vec_sld(om->tfv[1], zerov, 4); timv = vec_sld(om->tfv[2], zerov, 4); tdmv = vec_sld(om->tfv[3], zerov, 4); mpv = vec_madd(MMO(dpp,0), om->rfv[dsq[i+1]][0], zerov); /* precalc M(i+1,k+1)*e(M_k+1,x_{i+1}) */ mpv = vec_sld(mpv, zerov, 4); xBv = zerov; for (q = Q-1; q >= 0; q--) /* backwards stride */ { vector float t1; ipv = IMO(dpp,q); /* assumes emission odds ratio of 1.0; i+1's IMO(q) now free */ t1 = vec_madd(mpv, timv, zerov); IMO(dpc,q) = vec_madd(ipv, *tp, t1); tp--; DMO(dpc,q) = vec_madd(mpv, tdmv, zerov); t1 = vec_madd(mpv, tmmv, zerov); mcv = vec_madd(ipv, *tp, t1); tp -= 2; /* obtain mpv for next q. i+1's MMO(q) is freed */ mpv = vec_madd(MMO(dpp,q), *rp, zerov); rp--; MMO(dpc,q) = mcv; tdmv = *tp; tp--; timv = *tp; tp--; tmmv = *tp; tp--; xBv = vec_madd(mpv, *tp, xBv); tp--; } /* phase 2: now that we have accumulated the B->Mk transitions in xBv, we can do the specials */ xB = esl_vmx_hsum_float(xBv); xC = xC * om->xf[p7O_C][p7O_LOOP]; xJ = (xB * om->xf[p7O_J][p7O_MOVE]) + (xJ * om->xf[p7O_J][p7O_LOOP]); /* must come after xB */ xN = (xB * om->xf[p7O_N][p7O_MOVE]) + (xN * om->xf[p7O_N][p7O_LOOP]); /* must come after xB */ xE = (xC * om->xf[p7O_E][p7O_MOVE]) + (xJ * om->xf[p7O_E][p7O_LOOP]); /* must come after xJ, xC */ xEv = esl_vmx_set_float(xE); /* splat */ /* phase 3: {MD}->E paths and one step of the D->D paths */ tp = om->tfv + 8*Q - 1; /* <*tp> now the [4 8 12 x] TDD quad */ dpv = vec_add(DMO(dpc,0), xEv); dpv = vec_sld(dpv, zerov, 4); for (q = Q-1; q >= 1; q--) { dcv = vec_madd(dpv, *tp, xEv); tp--; DMO(dpc,q) = vec_add(DMO(dpc,q), dcv); dpv = DMO(dpc,q); MMO(dpc,q) = vec_add(MMO(dpc,q), xEv); } dcv = vec_madd(dpv, *tp, zerov); DMO(dpc,q) = vec_add(DMO(dpc,q), vec_add(dcv, xEv)); MMO(dpc,q) = vec_add(MMO(dpc,q), xEv); /* phase 4: finish extending the DD paths */ /* fully serialized for now */ for (j = 1; j < 4; j++) /* three passes: we've already done 1 segment, we need 4 total */ { dcv = vec_sld(dcv, zerov, 4); tp = om->tfv + 8*Q - 1; /* <*tp> now the [4 8 12 x] TDD quad */ for (q = Q-1; q >= 0; q--) { dcv = vec_madd(dcv, *tp, zerov); tp--; DMO(dpc,q) = vec_add(DMO(dpc,q), dcv); } } /* phase 5: add M->D paths */ dcv = vec_sld(DMO(dpc,0), zerov, 4); tp = om->tfv + 7*Q - 3; /* <*tp> is now the [4 8 12 x] Mk->Dk+1 quad */ for (q = Q-1; q >= 0; q--) { MMO(dpc,q) = vec_madd(dcv, *tp, MMO(dpc,q)); tp -= 7; dcv = DMO(dpc,q); } /* Sparse rescaling */ /* In rare cases [J3/119] scale factors from are * insufficient and backwards will overflow. In this case, we * switch on the fly to using our own scale factors, different * from those in . This will complicate subsequent * posterior decoding routines. */ if (xB > 1.0e16) bck->has_own_scales = TRUE; if (bck->has_own_scales) bck->xmx[i*p7X_NXCELLS+p7X_SCALE] = (xB > 1.0e4) ? xB : 1.0; else bck->xmx[i*p7X_NXCELLS+p7X_SCALE] = fwd->xmx[i*p7X_NXCELLS+p7X_SCALE]; if (bck->xmx[i*p7X_NXCELLS+p7X_SCALE] > 1.0) { xE /= bck->xmx[i*p7X_NXCELLS+p7X_SCALE]; xN /= bck->xmx[i*p7X_NXCELLS+p7X_SCALE]; xJ /= bck->xmx[i*p7X_NXCELLS+p7X_SCALE]; xB /= bck->xmx[i*p7X_NXCELLS+p7X_SCALE]; xC /= bck->xmx[i*p7X_NXCELLS+p7X_SCALE]; xBv = esl_vmx_set_float(1.0 / bck->xmx[i*p7X_NXCELLS+p7X_SCALE]); for (q = 0; q < Q; q++) { MMO(dpc,q) = vec_madd(MMO(dpc,q), xBv, zerov); DMO(dpc,q) = vec_madd(DMO(dpc,q), xBv, zerov); IMO(dpc,q) = vec_madd(IMO(dpc,q), xBv, zerov); } bck->totscale += log(bck->xmx[i*p7X_NXCELLS+p7X_SCALE]); } /* Stores are separate only for pedagogical reasons: easy to * turn this into a more memory efficient version just by * deleting the stores. */ bck->xmx[i*p7X_NXCELLS+p7X_E] = xE; bck->xmx[i*p7X_NXCELLS+p7X_N] = xN; bck->xmx[i*p7X_NXCELLS+p7X_J] = xJ; bck->xmx[i*p7X_NXCELLS+p7X_B] = xB; bck->xmx[i*p7X_NXCELLS+p7X_C] = xC; #if p7_DEBUGGING if (bck->debugging) p7_omx_DumpFBRow(bck, TRUE, i, 9, 4, xE, xN, xJ, xB, xC); /* logify=TRUE, =i, width=9, precision=4*/ #endif } /* thus ends the loop over sequence positions i */ /* Termination at i=0, where we can only reach N,B states. */ dpp = bck->dpf[1 * do_full]; tp = om->tfv; /* <*tp> is now the [1 5 9 13] TBMk transition quad */ rp = om->rfv[dsq[1]]; /* <*rp> is now the [1 5 9 13] match emission quad */ xBv = (vector float) vec_splat_u32(0); for (q = 0; q < Q; q++) { mpv = vec_madd(MMO(dpp,q), *rp, zerov); rp++; xBv = vec_madd(mpv, *tp, xBv); tp += 7; } /* horizontal sum of xBv */ xB = esl_vmx_hsum_float(xBv); xN = (xB * om->xf[p7O_N][p7O_MOVE]) + (xN * om->xf[p7O_N][p7O_LOOP]); bck->xmx[p7X_B] = xB; bck->xmx[p7X_C] = 0.0; bck->xmx[p7X_J] = 0.0; bck->xmx[p7X_N] = xN; bck->xmx[p7X_E] = 0.0; bck->xmx[p7X_SCALE] = 1.0; #if p7_DEBUGGING dpc = bck->dpf[0]; for (q = 0; q < Q; q++) /* Not strictly necessary, but if someone's looking at DP matrices, this is nice to do: */ MMO(dpc,q) = DMO(dpc,q) = IMO(dpc,q) = zerov; if (bck->debugging) p7_omx_DumpFBRow(bck, TRUE, 0, 9, 4, bck->xmx[p7X_E], bck->xmx[p7X_N], bck->xmx[p7X_J], bck->xmx[p7X_B], bck->xmx[p7X_C]); /* logify=TRUE, =0, width=9, precision=4*/ #endif if (isnan(xN)) ESL_EXCEPTION(eslERANGE, "backward score is NaN"); else if (L>0 && xN == 0.0) ESL_EXCEPTION(eslERANGE, "backward score underflow (is 0.0)"); /* [J5/118] */ else if (isinf(xN) == 1) ESL_EXCEPTION(eslERANGE, "backward score overflow (is infinity)"); if (opt_sc != NULL) *opt_sc = bck->totscale + log(xN); return eslOK; } /*-------------- end, forward/backward engines -----------------*/ /***************************************************************** * 4. Benchmark driver. *****************************************************************/ #ifdef p7FWDBACK_BENCHMARK /* -c, -x options are for debugging and testing: see fwdfilter.c for explanation */ /* icc -O3 -static -o fwdback_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7FWDBACK_BENCHMARK fwdback.c -lhmmer -leasel -lm ./fwdback_benchmark runs benchmark on both Forward and Backward parser ./fwdback_benchmark -c -N100 compare scores of VMX to generic impl ./fwdback_benchmark -x -N100 test that scores match trusted implementation. */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { "-F", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-B", "only benchmark Forward", 0 }, { "-B", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-F", "only benchmark Backward", 0 }, { "-P", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "benchmark parsing version, not full version", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for Forward, Backward implementations"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx = NULL; P7_OMX *fwd = NULL; P7_OMX *bck = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float fsc, bsc; float fsc2, bsc2; double base_time, bench_time, Mcs; p7_FLogsumInit(); if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); if (esl_opt_GetBoolean(go, "-x") && p7_FLogsumError(-0.4, -0.5) > 0.0001) p7_Fail("-x here requires p7_Logsum() recompiled in slow exact mode"); if (esl_opt_GetBoolean(go, "-P")) { fwd = p7_omx_Create(gm->M, 0, L); bck = p7_omx_Create(gm->M, 0, L); } else { fwd = p7_omx_Create(gm->M, L, L); bck = p7_omx_Create(gm->M, L, L); } gx = p7_gmx_Create(gm->M, L); /* Get a baseline time: how long it takes just to generate the sequences */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); if (esl_opt_GetBoolean(go, "-P")) { if (! esl_opt_GetBoolean(go, "-B")) p7_ForwardParser (dsq, L, om, fwd, &fsc); if (! esl_opt_GetBoolean(go, "-F")) p7_BackwardParser(dsq, L, om, fwd, bck, &bsc); } else { if (! esl_opt_GetBoolean(go, "-B")) p7_Forward (dsq, L, om, fwd, &fsc); if (! esl_opt_GetBoolean(go, "-F")) p7_Backward(dsq, L, om, fwd, bck, &bsc); } if (esl_opt_GetBoolean(go, "-c") || esl_opt_GetBoolean(go, "-x")) { p7_GForward (dsq, L, gm, gx, &fsc2); p7_GBackward(dsq, L, gm, gx, &bsc2); printf("%.4f %.4f %.4f %.4f\n", fsc, bsc, fsc2, bsc2); } } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(bck); p7_omx_Destroy(fwd); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7FWDBACK_BENCHMARK*/ /*------------------- end, benchmark driver ---------------------*/ /***************************************************************** * 5. Unit tests. *****************************************************************/ #ifdef p7FWDBACK_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" /* * compare to GForward() scores. */ static void utest_fwdback(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { char *msg = "forward/backward unit test failed"; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *fwd = p7_omx_Create(M, 0, L); P7_OMX *bck = p7_omx_Create(M, 0, L); P7_OMX *oxf = p7_omx_Create(M, L, L); P7_OMX *oxb = p7_omx_Create(M, L, L); P7_GMX *gx = p7_gmx_Create(M, L); float tolerance; float fsc1, fsc2; float bsc1, bsc2; float generic_sc; p7_FLogsumInit(); if (p7_FLogsumError(-0.4, -0.5) > 0.0001) tolerance = 1.0; /* weaker test against GForward() */ else tolerance = 0.0001; /* stronger test: FLogsum() is in slow exact mode. */ p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om); while (N--) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_Forward (dsq, L, om, oxf, &fsc1); p7_Backward (dsq, L, om, oxf, oxb, &bsc1); p7_ForwardParser (dsq, L, om, fwd, &fsc2); p7_BackwardParser(dsq, L, om, fwd, bck, &bsc2); p7_GForward (dsq, L, gm, gx, &generic_sc); /* Forward and Backward scores should agree with high tolerance */ if (fabs(fsc1-bsc1) > 0.0001) esl_fatal(msg); if (fabs(fsc2-bsc2) > 0.0001) esl_fatal(msg); if (fabs(fsc1-fsc2) > 0.0001) esl_fatal(msg); /* GForward scores should approximate Forward scores, * with tolerance that depends on how logsum.c was compiled */ if (fabs(fsc1-generic_sc) > tolerance) esl_fatal(msg); } free(dsq); p7_hmm_Destroy(hmm); p7_omx_Destroy(oxb); p7_omx_Destroy(oxf); p7_omx_Destroy(bck); p7_omx_Destroy(fwd); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); } #endif /*p7FWDBACK_TESTDRIVE*/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 6. Test driver *****************************************************************/ #ifdef p7FWDBACK_TESTDRIVE /* gcc -g -Wall -maltivec -std=gnu99 -o fwdback_utest -I.. -L.. -I../../easel -L../../easel -Dp7FWDBACK_TESTDRIVE fwdback.c -lhmmer -leasel -lm ./fwdback_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "145", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for VMX Forward, Backward implementations"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* First round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_fwdback(r, abc, bg, M, L, N); /* normal sized models */ utest_fwdback(r, abc, bg, 1, L, 10); /* size 1 models */ utest_fwdback(r, abc, bg, M, 1, 10); /* size 1 sequences */ esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); /* Second round of tests for amino alphabets. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_fwdback(r, abc, bg, M, L, N); utest_fwdback(r, abc, bg, 1, L, 10); utest_fwdback(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*p7FWDBACK_TESTDRIVE*/ /*--------------------- end, test driver ------------------------*/ /***************************************************************** * 7. Example *****************************************************************/ #ifdef p7FWDBACK_EXAMPLE /* Useful for debugging on small HMMs and sequences. * * Compares to GForward(). * gcc -g -Wall -maltivec -std=gnu99 -o fwdback_example -I.. -L.. -I../../easel -L../../easel -Dp7FWDBACK_EXAMPLE fwdback.c -lhmmer -leasel -lm ./fwdback_example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_exponential.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in one line awkable format", 0 }, { "-P", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in profmark format", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of Forward/Backward (VMX versions)"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx = NULL; P7_OMX *fwd = NULL; P7_OMX *bck = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float fraw, braw, nullsc, fsc; float gfraw, gbraw, gfsc; double P, gP; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Open sequence file for reading */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_UNILOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); /* p7_oprofile_Dump(stdout, om); */ /* allocate DP matrices for O(M+L) parsers */ fwd = p7_omx_Create(gm->M, 0, sq->n); bck = p7_omx_Create(gm->M, 0, sq->n); gx = p7_gmx_Create(gm->M, sq->n); /* allocate DP matrices for O(ML) fills */ /* fwd = p7_omx_Create(gm->M, sq->n, sq->n); */ /* bck = p7_omx_Create(gm->M, sq->n, sq->n); */ /* p7_omx_SetDumpMode(stdout, fwd, TRUE); */ /* makes the fast DP algorithms dump their matrices */ /* p7_omx_SetDumpMode(stdout, bck, TRUE); */ while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { p7_oprofile_ReconfigLength(om, sq->n); p7_ReconfigLength(gm, sq->n); p7_bg_SetLength(bg, sq->n); p7_omx_GrowTo(fwd, om->M, 0, sq->n); p7_omx_GrowTo(bck, om->M, 0, sq->n); p7_gmx_GrowTo(gx, gm->M, sq->n); p7_bg_NullOne (bg, sq->dsq, sq->n, &nullsc); p7_ForwardParser (sq->dsq, sq->n, om, fwd, &fraw); p7_BackwardParser(sq->dsq, sq->n, om, fwd, bck, &braw); /* p7_Forward (sq->dsq, sq->n, om, fwd, &fsc); printf("forward: %.2f nats\n", fsc); */ /* p7_Backward(sq->dsq, sq->n, om, fwd, bck, &bsc); printf("backward: %.2f nats\n", bsc); */ /* Comparison to other F/B implementations */ p7_GForward (sq->dsq, sq->n, gm, gx, &gfraw); p7_GBackward (sq->dsq, sq->n, gm, gx, &gbraw); /* p7_gmx_Dump(stdout, gx, p7_DEFAULT); */ fsc = (fraw-nullsc) / eslCONST_LOG2; gfsc = (gfraw-nullsc) / eslCONST_LOG2; P = esl_exp_surv(fsc, om->evparam[p7_FTAU], om->evparam[p7_FLAMBDA]); gP = esl_exp_surv(gfsc, gm->evparam[p7_FTAU], gm->evparam[p7_FLAMBDA]); if (esl_opt_GetBoolean(go, "-1")) { printf("%-30s\t%-20s\t%9.2g\t%6.1f\t%9.2g\t%6.1f\n", sq->name, hmm->name, P, fsc, gP, gfsc); } else if (esl_opt_GetBoolean(go, "-P")) { /* output suitable for direct use in profmark benchmark postprocessors: */ printf("%g\t%.2f\t%s\t%s\n", P, fsc, sq->name, hmm->name); } else { printf("target sequence: %s\n", sq->name); printf("fwd filter raw score: %.2f nats\n", fraw); printf("bck filter raw score: %.2f nats\n", braw); printf("null score: %.2f nats\n", nullsc); printf("per-seq score: %.2f bits\n", fsc); printf("P-value: %g\n", P); printf("GForward raw score: %.2f nats\n", gfraw); printf("GBackward raw score: %.2f nats\n", gbraw); printf("GForward seq score: %.2f bits\n", gfsc); printf("GForward P-value: %g\n", gP); } esl_sq_Reuse(sq); } /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_omx_Destroy(bck); p7_omx_Destroy(fwd); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7FWDBACK_EXAMPLE*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_vmx/null2.c0000664361611702660230000004406312473612614016122 0ustar wheelerteddy/* "null2" model, biased composition correction; VMX implementations. * * Contents: * 1. Null2 estimation algorithms. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * SRE, Mon Aug 18 08:31:11 2008 [Janelia] * SVN $Id: null2.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include #include #ifndef __APPLE_ALTIVEC__ #include #endif #include "easel.h" #include "esl_vmx.h" #include "esl_vectorops.h" #include "hmmer.h" #include "impl_vmx.h" /***************************************************************** * 1. Null2 estimation algorithms. *****************************************************************/ /* Function: p7_Null2_ByExpectation() * Synopsis: Calculate null2 model from posterior probabilities. * Incept: SRE, Mon Aug 18 08:32:55 2008 [Janelia] * * Purpose: Identical to except that * , are VMX optimized versions of the profile * and the residue posterior probability matrix. See * documentation. * * Args: om - profile, in any mode, target length model set to * pp - posterior prob matrix, for against domain envelope (offset) * null2 - RETURN: null2 log odds scores per residue; <0..Kp-1>; caller allocated space */ int p7_Null2_ByExpectation(const P7_OPROFILE *om, const P7_OMX *pp, float *null2) { int M = om->M; int Ld = pp->L; int Q = p7O_NQF(M); float *xmx = pp->xmx; /* enables use of XMXo(i,s) macro */ float norm; float xfactor; int i,q,x; vector float *rp; vector float sv; vector float zerov; zerov = (vector float) vec_splat_u32(0); /* Calculate expected # of times that each emitting state was used * in generating the Ld residues in this domain. * The 0 row in is used to hold these numbers. */ memcpy(pp->dpf[0], pp->dpf[1], sizeof(vector float) * 3 * Q); XMXo(0,p7X_N) = XMXo(1,p7X_N); XMXo(0,p7X_C) = XMXo(1,p7X_C); /* 0.0 */ XMXo(0,p7X_J) = XMXo(1,p7X_J); /* 0.0 */ for (i = 2; i <= Ld; i++) { for (q = 0; q < Q; q++) { pp->dpf[0][q*3 + p7X_M] = vec_add(pp->dpf[i][q*3 + p7X_M], pp->dpf[0][q*3 + p7X_M]); pp->dpf[0][q*3 + p7X_I] = vec_add(pp->dpf[i][q*3 + p7X_I], pp->dpf[0][q*3 + p7X_I]); } XMXo(0,p7X_N) += XMXo(i,p7X_N); XMXo(0,p7X_C) += XMXo(i,p7X_C); XMXo(0,p7X_J) += XMXo(i,p7X_J); } /* Convert those expected #'s to frequencies, to use as posterior weights. */ norm = 1.0 / (float) Ld; sv = esl_vmx_set_float(norm); for (q = 0; q < Q; q++) { pp->dpf[0][q*3 + p7X_M] = vec_madd(pp->dpf[0][q*3 + p7X_M], sv, zerov); pp->dpf[0][q*3 + p7X_I] = vec_madd(pp->dpf[0][q*3 + p7X_I], sv, zerov); } XMXo(0,p7X_N) *= norm; XMXo(0,p7X_C) *= norm; XMXo(0,p7X_J) *= norm; /* Calculate null2's emission odds, by taking posterior weighted sum * over all emission vectors used in paths explaining the domain. */ xfactor = XMXo(0, p7X_N) + XMXo(0, p7X_C) + XMXo(0, p7X_J); for (x = 0; x < om->abc->K; x++) { sv = (vector float) vec_splat_u32(0); rp = om->rfv[x]; for (q = 0; q < Q; q++) { sv = vec_madd(pp->dpf[0][q*3 + p7X_M], *rp, sv); rp++; sv = vec_add(sv, pp->dpf[0][q*3 + p7X_I]); /* insert odds implicitly 1.0 */ } null2[x] = esl_vmx_hsum_float(sv); null2[x] += xfactor; } /* now null2[x] = \frac{f_d(x)}{f_0(x)} for all x in alphabet, * 0..K-1, where f_d(x) are the ad hoc "null2" residue frequencies * for this envelope. */ /* make valid scores for all degeneracies, by averaging the odds ratios. */ esl_abc_FAvgScVec(om->abc, null2); null2[om->abc->K] = 1.0; /* gap character */ null2[om->abc->Kp-2] = 1.0; /* nonresidue "*" */ null2[om->abc->Kp-1] = 1.0; /* missing data "~" */ /* ta-da */ return eslOK; } /* Function: p7_Null2_ByTrace() * Synopsis: Assign null2 scores to an envelope by the sampling method. * Incept: SRE, Mon Aug 18 10:22:49 2008 [Janelia] * * Purpose: Identical to except that * , are VMX optimized versions of the profile * and the residue posterior probability matrix. See * documentation. */ int p7_Null2_ByTrace(const P7_OPROFILE *om, const P7_TRACE *tr, int zstart, int zend, P7_OMX *wrk, float *null2) { union { vector float v; float p[4]; } u; int Q = p7O_NQF(om->M); int Ld = 0; float *xmx = wrk->xmx; /* enables use of XMXo macro */ float norm; float xfactor; int q, r, s; int x; int z; vector float sv; vector float *rp; vector float zerov; zerov = (vector float) vec_splat_u32(0); /* We'll use the i=0 row in wrk for working space: dp[0][] and xmx[][0]. */ for (q = 0; q < Q; q++) { wrk->dpf[0][q*3 + p7X_M] = (vector float) vec_splat_u32(0); wrk->dpf[0][q*3 + p7X_I] = (vector float) vec_splat_u32(0); } XMXo(0,p7X_N) = 0.0; XMXo(0,p7X_C) = 0.0; XMXo(0,p7X_J) = 0.0; /* Calculate emitting state usage in this particular trace segment */ for (z = zstart; z <= zend; z++) { if (tr->i[z] == 0) continue; /* quick test for whether this trace elem emitted or not */ Ld++; if (tr->k[z] > 0) /* must be an M or I */ { /* surely there's an easier way? but our workspace is striped, interleaved quads... */ s = ( (tr->st[z] == p7T_M) ? p7X_M : p7X_I); q = p7X_NSCELLS * ( (tr->k[z] - 1) % Q) + p7X_M; r = (tr->k[z] - 1) / Q; u.v = wrk->dpf[0][q]; u.p[r] += 1.0; /* all this to increment a count by one! */ wrk->dpf[0][q] = u.v; } else /* emitted an x_i with no k; must be an N,C,J */ { switch (tr->st[z]) { case p7T_N: XMXo(0,p7X_N) += 1.0; break; case p7T_C: XMXo(0,p7X_C) += 1.0; break; case p7T_J: XMXo(0,p7X_J) += 1.0; break; } } } norm = 1.0 / (float) Ld; sv = esl_vmx_set_float(norm); for (q = 0; q < Q; q++) { wrk->dpf[0][q*3 + p7X_M] = vec_madd(wrk->dpf[0][q*3 + p7X_M], sv, zerov); wrk->dpf[0][q*3 + p7X_I] = vec_madd(wrk->dpf[0][q*3 + p7X_I], sv, zerov); } XMXo(0,p7X_N) *= norm; XMXo(0,p7X_C) *= norm; XMXo(0,p7X_J) *= norm; /* Calculate null2's emission odds, by taking posterior weighted sum * over all emission vectors used in paths explaining the domain. */ xfactor = XMXo(0,p7X_N) + XMXo(0,p7X_C) + XMXo(0,p7X_J); for (x = 0; x < om->abc->K; x++) { sv = (vector float) vec_splat_u32(0); rp = om->rfv[x]; for (q = 0; q < Q; q++) { sv = vec_madd(wrk->dpf[0][q*3 + p7X_M], *rp, sv); rp++; sv = vec_add(sv, wrk->dpf[0][q*3 + p7X_I]); /* insert emission odds implicitly 1.0 */ // sv = _mm_add_ps(sv, _mm_mul_ps(wrk->dpf[0][q*3 + p7X_I], *rp)); rp++; } null2[x] = esl_vmx_hsum_float(sv); null2[x] += xfactor; } /* now null2[x] = \frac{f_d(x)}{f_0(x)} for all x in alphabet, * 0..K-1, where f_d(x) are the ad hoc "null2" residue frequencies * for this envelope. */ /* make valid scores for all degeneracies, by averaging the odds ratios. */ esl_abc_FAvgScVec(om->abc, null2); null2[om->abc->K] = 1.0; /* gap character */ null2[om->abc->Kp-2] = 1.0; /* nonresidue "*" */ null2[om->abc->Kp-1] = 1.0; /* missing data "~" */ return eslOK; } /***************************************************************** * 2. Benchmark driver *****************************************************************/ #ifdef p7NULL2_BENCHMARK /* icc -O3 -static -o null2_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7NULL2_BENCHMARK null2.c -lhmmer -leasel -lm ./null2_benchmark Does the expectation version. ./null2_benchmark -t Does the stochastic-traceback-dependent version. (This version isn't really dependent on M, so Mc/s may not be an appropriate measure.) RRM_1 (M=72) Caudal_act (M=136) SMC_N (M=1151) ----------------- ------------------ --------------- 21 Aug 2008 3.00u (480 Mc/s) 5.45u (499 Mc/s) 77.56u (297 Mc/s) -t 21 Aug 2008 30.50u (47 Mc/s) 44.96u (61 Mc/s) 32.03u*10 ( 72 Mc/s) */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-t", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "benchmark the trace-dependent version of null2", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for null2 estimation, VMX version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox1 = NULL; P7_OMX *ox2 = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); float null2[p7_MAXCODE]; int i,j,d,pos; int nsamples = 200; float fsc, bsc; double Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); ox1 = p7_omx_Create(gm->M, L, L); ox2 = p7_omx_Create(gm->M, L, L); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_Forward (dsq, L, om, ox1, &fsc); if (esl_opt_GetBoolean(go, "-t")) { P7_TRACE *tr = p7_trace_Create(); float *n2sc = malloc(sizeof(float) * (L+1)); esl_stopwatch_Start(w); for (i = 0; i < N; i++) { /* This is approximately what p7_domaindef.c::region_trace_ensemble() is doing: */ for (j = 0; j < nsamples; j++) { p7_StochasticTrace(r, dsq, L, om, ox1, tr); p7_trace_Index(tr); pos = 1; for (d = 0; d < tr->ndom; d++) { p7_Null2_ByTrace(om, tr, tr->tfrom[d], tr->tto[d], ox2, null2); for (; pos <= tr->sqfrom[d]; pos++) n2sc[pos] += 1.0; for (; pos < tr->sqto[d]; pos++) n2sc[pos] += null2[dsq[pos]]; } for (; pos <= L; pos++) n2sc[pos] += 1.0; p7_trace_Reuse(tr); } for (pos = 1; pos <= L; pos++) n2sc[pos] = logf(n2sc[pos] / nsamples); } esl_stopwatch_Stop(w); free(n2sc); p7_trace_Destroy(tr); } else { p7_Backward(dsq, L, om, ox1, ox2, &bsc); p7_Decoding(om, ox1, ox2, ox2); esl_stopwatch_Start(w); for (i = 0; i < N; i++) p7_Null2_ByExpectation(om, ox2, null2); esl_stopwatch_Stop(w); } Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) w->user; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(ox1); p7_omx_Destroy(ox2); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7NULL2_BENCHMARK*/ /*------------------ end, benchmark driver ----------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7NULL2_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" #include "esl_vectorops.h" /* compare results to GDecoding(). */ static void utest_null2_expectation(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N, float tolerance) { char *msg = "null2 unit test failed"; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *fwd = p7_omx_Create(M, L, L); P7_OMX *bck = p7_omx_Create(M, L, L); P7_OMX *pp = p7_omx_Create(M, L, L); P7_GMX *gxf = p7_gmx_Create(M, L); P7_GMX *gxb = p7_gmx_Create(M, L); P7_GMX *gpp = p7_gmx_Create(M, L); float *on2 = malloc(sizeof(float) * abc->Kp); float *gn2 = malloc(sizeof(float) * abc->Kp); float fsc1, fsc2; float bsc1, bsc2; if (!gn2 || !on2) esl_fatal(msg); if (p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om) != eslOK) esl_fatal(msg); while (N--) { if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal(msg); if (p7_Forward (dsq, L, om, fwd, &fsc1) != eslOK) esl_fatal(msg); if (p7_Backward (dsq, L, om, fwd, bck, &bsc1) != eslOK) esl_fatal(msg); if (p7_Decoding(om, fwd, bck, pp) != eslOK) esl_fatal(msg); if (p7_Null2_ByExpectation(om, pp, on2) != eslOK) esl_fatal(msg); if (p7_GForward (dsq, L, gm, gxf, &fsc2) != eslOK) esl_fatal(msg); if (p7_GBackward(dsq, L, gm, gxb, &bsc2) != eslOK) esl_fatal(msg); if (p7_GDecoding(gm, gxf, gxb, gpp) != eslOK) esl_fatal(msg); if (p7_GNull2_ByExpectation(gm, gpp, gn2) != eslOK) esl_fatal(msg); if (esl_vec_FCompare(gn2, on2, abc->Kp, tolerance) != eslOK) esl_fatal(msg); } p7_gmx_Destroy(gpp); p7_gmx_Destroy(gxf); p7_gmx_Destroy(gxb); p7_omx_Destroy(pp); p7_omx_Destroy(fwd); p7_omx_Destroy(bck); free(on2); free(gn2); free(dsq); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); } #endif /*p7NULL2_TESTDRIVE*/ /*--------------------- end, unit tests -------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7NULL2_TESTDRIVE /* gcc -g -Wall -maltivec -std=gnu99 -o null2_utest -I.. -L.. -I../../easel -L../../easel -Dp7NULL2_TESTDRIVE null2.c -lhmmer -leasel -lm ./null2_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-t", eslARG_REAL, "0.01", NULL, NULL, NULL, NULL, NULL, "floating point comparison tolerance", 0 }, { "-L", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "72", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "10", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for VMX implementation of null2 model"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_BG *bg = p7_bg_Create(abc); int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); float tol = esl_opt_GetReal (go, "-t"); p7_FLogsumInit(); utest_null2_expectation(r, abc, bg, M, L, N, tol); esl_getopts_Destroy(go); esl_randomness_Destroy(r); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); return eslOK; } #endif /*p7NULL2_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7NULL2_EXAMPLE #endif /*p7NULL2_EXAMPLE*/ /*------------------------ example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_vmx/stotrace.c0000664361611702660230000006206112473612614016710 0ustar wheelerteddy/* VMX implementation of stochastic backtrace of a Forward matrix. * (Compare generic version, p7_GStochasticTrace().) * * Contents: * 1. Stochastic trace implementation. * 2. Selection of steps in the traceback. * 3. Benchmark driver. * 4. Unit tests. * 5. Test driver. * 6. Example. * 7. Copyright and license information. * * SRE, Fri Aug 15 08:02:43 2008 [Janelia] * SVN $Id: stotrace.c 3497 2011-03-02 23:18:03Z eddys $ */ #include "p7_config.h" #include #include #ifndef __APPLE_ALTIVEC__ #include #endif #include "easel.h" #include "esl_random.h" #include "esl_vmx.h" #include "esl_vectorops.h" #include "hmmer.h" #include "impl_vmx.h" static inline int select_m(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int k); static inline int select_d(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int k); static inline int select_i(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int k); static inline int select_n(int i); static inline int select_c(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i); static inline int select_j(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i); static inline int select_e(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int *ret_k); static inline int select_b(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i); /***************************************************************** * 1. Stochastic trace implementation. *****************************************************************/ /* Function: p7_StochasticTrace() * Synopsis: Sample a traceback from a Forward matrix * Incept: SRE, Fri Aug 8 17:40:18 2008 [UA217, IAD-SFO] * * Purpose: Perform a stochastic traceback from Forward matrix , * using random number generator , in order to sample an * alignment of model to digital sequence of * length . * * The sampled traceback is returned in , which the * caller provides with at least an initial allocation; * the allocation will be grown as needed here. * * Args: r - source of random numbers * dsq - digital sequence being aligned, 1..L * L - length of dsq * om - profile * ox - Forward matrix to trace, LxM * tr - storage for the recovered traceback * * Returns: on success * * Throws: on allocation error. * on several types of problems, including: * the trace isn't empty (wasn't Reuse()'d); */ int p7_StochasticTrace(ESL_RANDOMNESS *rng, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *ox, P7_TRACE *tr) { int i; /* position in sequence 1..L */ int k; /* position in model 1..M */ int s0, s1; /* choice of a state */ int status; if (tr->N != 0) ESL_EXCEPTION(eslEINVAL, "trace not empty; needs to be Reuse()'d?"); i = L; k = 0; if ((status = p7_trace_Append(tr, p7T_T, k, i)) != eslOK) return status; if ((status = p7_trace_Append(tr, p7T_C, k, i)) != eslOK) return status; s0 = tr->st[tr->N-1]; while (s0 != p7T_S) { switch (s0) { case p7T_M: s1 = select_m(rng, om, ox, i, k); k--; i--; break; case p7T_D: s1 = select_d(rng, om, ox, i, k); k--; break; case p7T_I: s1 = select_i(rng, om, ox, i, k); i--; break; case p7T_N: s1 = select_n(i); break; case p7T_C: s1 = select_c(rng, om, ox, i); break; case p7T_J: s1 = select_j(rng, om, ox, i); break; case p7T_E: s1 = select_e(rng, om, ox, i, &k); break; case p7T_B: s1 = select_b(rng, om, ox, i); break; default: ESL_EXCEPTION(eslEINVAL, "bogus state in traceback"); } if (s1 == -1) ESL_EXCEPTION(eslEINVAL, "Stochastic traceback choice failed"); if ((status = p7_trace_Append(tr, s1, k, i)) != eslOK) return status; if ( (s1 == p7T_N || s1 == p7T_J || s1 == p7T_C) && s1 == s0) i--; s0 = s1; } /* end traceback, at S state */ tr->M = om->M; tr->L = L; return p7_trace_Reverse(tr); } /*------------------ end, stochastic traceback ------------------*/ /***************************************************************** * 2. Selection of steps in the traceback *****************************************************************/ /* The guts of the stochastic backtrace function is broken out in * pieces: each select_?() function randomly selects one of the * possible paths, according to their probability, and returns the * index of the state we move to next. */ /* M(i,k) is reached from B(i-1), M(i-1,k-1), D(i-1,k-1), or I(i-1,k-1). */ static inline int select_m(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int k) { int Q = p7O_NQF(ox->M); int q = (k-1) % Q; /* (q,r) is position of the current DP cell M(i,k) */ int r = (k-1) / Q; vector float *tp = om->tfv + 7*q; /* *tp now at start of transitions to cur cell M(i,k) */ vector float xBv; vector float zerov; vector float mpv, dpv, ipv; union { vector float v; float p[4]; } u; float path[4]; int state[4] = { p7T_B, p7T_M, p7T_I, p7T_D }; xBv = esl_vmx_set_float(ox->xmx[(i-1)*p7X_NXCELLS+p7X_B]); zerov = (vector float) vec_splat_u32(0); if (q > 0) { mpv = ox->dpf[i-1][(q-1)*3 + p7X_M]; dpv = ox->dpf[i-1][(q-1)*3 + p7X_D]; ipv = ox->dpf[i-1][(q-1)*3 + p7X_I]; } else { mpv = vec_sld(zerov, ox->dpf[i-1][(Q-1)*3 + p7X_M], 12); dpv = vec_sld(zerov, ox->dpf[i-1][(Q-1)*3 + p7X_D], 12); ipv = vec_sld(zerov, ox->dpf[i-1][(Q-1)*3 + p7X_I], 12); } u.v = vec_madd(xBv, *tp, zerov); tp++; path[0] = u.p[r]; u.v = vec_madd(mpv, *tp, zerov); tp++; path[1] = u.p[r]; u.v = vec_madd(ipv, *tp, zerov); tp++; path[2] = u.p[r]; u.v = vec_madd(dpv, *tp, zerov); path[3] = u.p[r]; esl_vec_FNorm(path, 4); return state[esl_rnd_FChoose(rng, path, 4)]; } /* D(i,k) is reached from M(i, k-1) or D(i,k-1). */ static inline int select_d(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int k) { int Q = p7O_NQF(ox->M); int q = (k-1) % Q; /* (q,r) is position of the current DP cell D(i,k) */ int r = (k-1) / Q; vector float zerov; vector float mpv, dpv; vector float tmdv, tddv; union { vector float v; float p[4]; } u; float path[2]; int state[2] = { p7T_M, p7T_D }; zerov = (vector float) vec_splat_u32(0); if (q > 0) { mpv = ox->dpf[i][(q-1)*3 + p7X_M]; dpv = ox->dpf[i][(q-1)*3 + p7X_D]; tmdv = om->tfv[7*(q-1) + p7O_MD]; tddv = om->tfv[7*Q + (q-1)]; } else { mpv = vec_sld(zerov, ox->dpf[i][(Q-1)*3 + p7X_M], 12); dpv = vec_sld(zerov, ox->dpf[i][(Q-1)*3 + p7X_D], 12); tmdv = vec_sld(zerov, om->tfv[7*(Q-1) + p7O_MD], 12); tddv = vec_sld(zerov, om->tfv[8*Q-1], 12); } u.v = vec_madd(mpv, tmdv, zerov); path[0] = u.p[r]; u.v = vec_madd(dpv, tddv, zerov); path[1] = u.p[r]; esl_vec_FNorm(path, 2); return state[esl_rnd_FChoose(rng, path, 2)]; } /* I(i,k) is reached from M(i-1, k) or I(i-1,k). */ static inline int select_i(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int k) { int Q = p7O_NQF(ox->M); int q = (k-1) % Q; /* (q,r) is position of the current DP cell D(i,k) */ int r = (k-1) / Q; vector float zerov; vector float mpv = ox->dpf[i-1][q*3 + p7X_M]; vector float ipv = ox->dpf[i-1][q*3 + p7X_I]; vector float *tp = om->tfv + 7*q + p7O_MI; union { vector float v; float p[4]; } u; float path[2]; int state[2] = { p7T_M, p7T_I }; zerov = (vector float) vec_splat_u32(0); u.v = vec_madd(mpv, *tp, zerov); tp++; path[0] = u.p[r]; u.v = vec_madd(ipv, *tp, zerov); path[1] = u.p[r]; esl_vec_FNorm(path, 2); return state[esl_rnd_FChoose(rng, path, 2)]; } /* N(i) must come from N(i-1) for i>0; else it comes from S */ static inline int select_n(int i) { if (i == 0) return p7T_S; else return p7T_N; } /* C(i) is reached from E(i) or C(i-1). */ static inline int select_c(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i) { float path[2]; int state[2] = { p7T_C, p7T_E }; path[0] = ox->xmx[(i-1)*p7X_NXCELLS+p7X_C] * om->xf[p7O_C][p7O_LOOP]; path[1] = ox->xmx[ i*p7X_NXCELLS+p7X_E] * om->xf[p7O_E][p7O_MOVE] * ox->xmx[i*p7X_NXCELLS+p7X_SCALE]; esl_vec_FNorm(path, 2); return state[esl_rnd_FChoose(rng, path, 2)]; } /* J(i) is reached from E(i) or J(i-1). */ static inline int select_j(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i) { float path[2]; int state[2] = { p7T_J, p7T_E }; path[0] = ox->xmx[(i-1)*p7X_NXCELLS+p7X_J] * om->xf[p7O_J][p7O_LOOP]; path[1] = ox->xmx[ i*p7X_NXCELLS+p7X_E] * om->xf[p7O_E][p7O_LOOP] * ox->xmx[i*p7X_NXCELLS+p7X_SCALE]; esl_vec_FNorm(path, 2); return state[esl_rnd_FChoose(rng, path, 2)]; } /* E(i) is reached from any M(i, k=1..M) or D(i, k=2..M). */ /* Using FChoose() here would mean allocating tmp space for 2M-1 paths; * instead we use the fact that E(i) is itself the necessary normalization * factor, and implement FChoose's algorithm here for an on-the-fly * calculation. */ static inline int select_e(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i, int *ret_k) { int Q = p7O_NQF(ox->M); double sum = 0.0; double roll = esl_random(rng); double norm = 1.0 / ox->xmx[i*p7X_NXCELLS+p7X_E]; /* all M, D already scaled exactly the same */ vector float xEv = esl_vmx_set_float(norm); vector float zerov = (vector float) vec_splat_u32(0); union { vector float v; float p[4]; } u; int q,r; while (1) { for (q = 0; q < Q; q++) { u.v = vec_madd(ox->dpf[i][q*3 + p7X_M], xEv, zerov); for (r = 0; r < 4; r++) { sum += u.p[r]; if (roll < sum) { *ret_k = r*Q + q + 1; return p7T_M;} } u.v = vec_madd(ox->dpf[i][q*3 + p7X_D], xEv, zerov); for (r = 0; r < 4; r++) { sum += u.p[r]; if (roll < sum) { *ret_k = r*Q + q + 1; return p7T_D;} } } ESL_DASSERT1(sum > 0.99); } /*UNREACHED*/ ESL_EXCEPTION(-1, "unreached code was reached. universe collapses."); } /* B(i) is reached from N(i) or J(i). */ static inline int select_b(ESL_RANDOMNESS *rng, const P7_OPROFILE *om, const P7_OMX *ox, int i) { float path[2]; int state[2] = { p7T_N, p7T_J }; path[0] = ox->xmx[i*p7X_NXCELLS+p7X_N] * om->xf[p7O_N][p7O_MOVE]; path[1] = ox->xmx[i*p7X_NXCELLS+p7X_J] * om->xf[p7O_J][p7O_MOVE]; esl_vec_FNorm(path, 2); return state[esl_rnd_FChoose(rng, path, 2)]; } /*---------------------- end, step selection --------------------*/ /***************************************************************** * 3. Benchmark *****************************************************************/ #ifdef p7STOTRACE_BENCHMARK /* gcc -g -O2 -o stotrace_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7STOTRACE_BENCHMARK stotrace.c -lhmmer -leasel -lm icc -O3 -static -o stotrace_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7STOTRACE_BENCHMARK stotrace.c -lhmmer -leasel -lm ./stotrace_benchmark */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seq" , 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of sampled tracebacks", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for stochastic traceback, VMX version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx = NULL; P7_OMX *fwd = NULL; P7_TRACE *tr = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc, fsc, vsc; float bestsc = -eslINFINITY; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_UNILOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); fwd = p7_omx_Create(gm->M, L, L); gx = p7_gmx_Create(gm->M, L); tr = p7_trace_Create(); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_GViterbi(dsq, L, gm, gx, &vsc); p7_Forward (dsq, L, om, fwd, &fsc); esl_stopwatch_Start(w); for (i = 0; i < N; i++) { p7_StochasticTrace(r, dsq, L, om, fwd, tr); p7_trace_Score(tr, dsq, gm, &sc); bestsc = ESL_MAX(bestsc, sc); p7_trace_Reuse(tr); } esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("forward sc = %.4f nats\n", fsc); printf("viterbi sc = %.4f nats\n", vsc); printf("max trace sc = %.4f nats\n", bestsc); free(dsq); p7_trace_Destroy(tr); p7_gmx_Destroy(gx); p7_omx_Destroy(fwd); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7STOTRACE_BENCHMARK*/ /*----------------- end, benchmark ------------------------------*/ /***************************************************************** * 4. Unit tests *****************************************************************/ #ifdef p7STOTRACE_TESTDRIVE #include "esl_getopts.h" /* tests: * 1. each sampled trace must validate. * 2. each trace must be <= viterbi trace score * 3. in a large # of traces, one is "equal" to the viterbi trace score. * (this of course is stochastic; but it's true for the particular * choice of RNG seed used in tests here.) */ static void utest_stotrace(ESL_GETOPTS *go, ESL_RANDOMNESS *rng, ESL_ALPHABET *abc, P7_PROFILE *gm, P7_OPROFILE *om, ESL_DSQ *dsq, int L, int ntrace) { P7_GMX *gx = NULL; P7_OMX *ox = NULL; P7_TRACE *tr = NULL; char errbuf[eslERRBUFSIZE]; int idx; float maxsc = -eslINFINITY; float vsc, sc; if ((gx = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("generic DP matrix creation failed"); if ((ox = p7_omx_Create(gm->M, L, L)) == NULL) esl_fatal("optimized DP matrix create failed"); if ((tr = p7_trace_Create()) == NULL) esl_fatal("trace creation failed"); if (p7_GViterbi(dsq, L, gm, gx, &vsc) != eslOK) esl_fatal("viterbi failed"); if (p7_Forward (dsq, L, om, ox, NULL) != eslOK) esl_fatal("forward failed"); for (idx = 0; idx < ntrace; idx++) { if (p7_StochasticTrace(rng, dsq, L, om, ox, tr) != eslOK) esl_fatal("stochastic trace failed"); if (p7_trace_Validate(tr, abc, dsq, errbuf) != eslOK) esl_fatal("trace invalid:\n%s", errbuf); if (p7_trace_Score(tr, dsq, gm, &sc) != eslOK) esl_fatal("trace scoring failed"); maxsc = ESL_MAX(sc, maxsc); if (sc > vsc) esl_fatal("sampled trace has score > optimal Viterbi path; not possible"); p7_trace_Reuse(tr); } if (esl_FCompare(maxsc, vsc, 0.1) != eslOK) esl_fatal("stochastic trace failed to sample the Viterbi path"); p7_trace_Destroy(tr); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); } #endif /*p7STOTRACE_TESTDRIVE*/ /*----------------- end, unit tests -----------------------------*/ /***************************************************************** * 5. Test driver *****************************************************************/ #ifdef p7STOTRACE_TESTDRIVE /* gcc -g -Wall -o stotrace_utest -Dp7STOTRACE_TESTDRIVE -I.. -L.. -I../../easel -L../../easel stotrace.c -lhmmer -leasel -lm */ #include "easel.h" #include "esl_getopts.h" #include "esl_randomseq.h" #include "p7_config.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "--vv", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be very verbose", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "unit test driver for stochastic Viterbi traceback (generic version)"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_BG *bg = NULL; ESL_DSQ *dsq = NULL; ESL_SQ *sq = NULL; int M = 6; int L = 10; int ntrace = 1000; if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if (p7_hmm_Sample(r, M, abc, &hmm) != eslOK) esl_fatal("failed to sample an HMM"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if ((gm = p7_profile_Create(hmm->M, abc)) == NULL) esl_fatal("failed to create profile"); if (p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL) != eslOK) esl_fatal("failed to config profile"); if ((om = p7_oprofile_Create(gm->M, abc)) == NULL) esl_fatal("failed to create optimized profile"); if (p7_oprofile_Convert(gm, om) != eslOK) esl_fatal("failed to convert profile"); /* Test with randomly generated (iid) sequence */ if ((dsq = malloc(sizeof(ESL_DSQ) *(L+2))) == NULL) esl_fatal("malloc failed"); if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal("seq generation failed"); utest_stotrace(go, r, abc, gm, om, dsq, L, ntrace); /* Test with seq sampled from profile */ if ((sq = esl_sq_CreateDigital(abc)) == NULL) esl_fatal("sequence allocation failed"); if (p7_ProfileEmit(r, hmm, gm, bg, sq, NULL) != eslOK) esl_fatal("profile emission failed"); utest_stotrace(go, r, abc, gm, om, sq->dsq, sq->n, ntrace); esl_sq_Destroy(sq); free(dsq); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7STOTRACE_TESTDRIVE*/ /*---------------- end, test driver -----------------------------*/ /***************************************************************** * 6. Example. *****************************************************************/ #ifdef p7STOTRACE_EXAMPLE /* gcc -g -Wall -maltivec -std=gnu99 -o stotrace_example -I.. -L.. -I../../easel -L../../easel -Dp7STOTRACE_EXAMPLE stotrace.c -lhmmer -leasel -lm ./example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-m", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump the DP matrix to stdout", 0 }, { "-p", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump the profile to stdout", 0 }, { "-t", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump the sampled trace to stdout", 0 }, { "-N", eslARG_INT, "1", NULL, NULL, NULL, NULL, NULL, "number of traces to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of stochastic backtrace (VMX version)"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; ESL_RANDOMNESS *rng = esl_randomness_CreateFast(0); P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx = NULL; P7_OMX *fwd = NULL; P7_TRACE *tr = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; int N = esl_opt_GetInteger(go, "-N"); int i; float vsc, fsc, tsc; char errbuf[eslERRBUFSIZE]; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); if (esl_opt_GetBoolean(go, "-p")) p7_oprofile_Dump(stdout, om); fwd = p7_omx_Create(gm->M, sq->n, sq->n); gx = p7_gmx_Create(gm->M, sq->n); tr = p7_trace_Create(); if (esl_opt_GetBoolean(go, "-m") == TRUE) p7_omx_SetDumpMode(stdout, fwd, TRUE); p7_GViterbi(sq->dsq, sq->n, gm, gx, &vsc); p7_Forward (sq->dsq, sq->n, om, fwd, &fsc); for (i = 0; i < N; i++) { p7_StochasticTrace(rng, sq->dsq, sq->n, om, fwd, tr); p7_trace_Score(tr, sq->dsq, gm, &tsc); if (esl_opt_GetBoolean(go, "-t") == TRUE) p7_trace_Dump(stdout, tr, gm, sq->dsq); if (p7_trace_Validate(tr, abc, sq->dsq, errbuf) != eslOK) p7_Die("trace %d fails validation:\n%s\n", i, errbuf); printf("Sampled trace: %.4f nats\n", tsc); p7_trace_Reuse(tr); } printf("Forward score: %.4f nats\n", fsc); printf("Viterbi score: %.4f nats\n", vsc); /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_trace_Destroy(tr); p7_omx_Destroy(fwd); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_randomness_Destroy(rng); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7STOTRACE_EXAMPLE*/ /*------------------------ end, example -------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_vmx/vitscore.c0000664361611702660230000005130512473612614016721 0ustar wheelerteddy/* Viterbi score implementation; VMX version. * * This is a SIMD vectorized, striped, interleaved, one-row O(M) * memory implementation of the Viterbi algorithm, for calculating an * accurate Viterbi score, without traceback. * * This implementation has full range and precision, so it may be used * in any alignment mode (not just local), and on any target sequence * (not excluding high-scoring ones). * * The optimized profile must be configured to contain lspace float * scores, not its normal pspace float scores. * * Contents: * 1. Viterbi score implementation. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * SRE, Sun Aug 3 13:10:24 2008 [St. Louis] * SVN $Id: vitscore.c 3665 2011-08-25 13:45:55Z eddys $ */ #include "p7_config.h" #include #include #ifndef __APPLE_ALTIVEC__ #include #endif #include "easel.h" #include "esl_vmx.h" #include "hmmer.h" #include "impl_vmx.h" /***************************************************************** * 1. Viterbi score implementation *****************************************************************/ /* Function: p7_ViterbiScore() * Synopsis: Calculates Viterbi score, correctly, and vewy vewy fast. * Incept: SRE, Tue Nov 27 09:15:24 2007 [Janelia] * * Purpose: Calculates the Viterbi score for sequence of length * residues, using optimized profile , and a preallocated * one-row DP matrix . Return the Viterbi score (in nats) * in . * * The model must be configured specially to have * lspace float scores, not its usual pspace float scores for * . * * As with all <*Score()> implementations, the score is * accurate (full range and precision) and can be * calculated on models in any mode, not only local modes. * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * ret_sc - RETURN: Viterbi score (in nats) * * Returns: on success. * * Throws: if allocation is too small. */ int p7_ViterbiScore(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc) { vector float mpv, dpv, ipv; /* previous row values */ vector float sv; /* temp storage of 1 curr row value in progress */ vector float dcv; /* delayed storage of D(i,q+1) */ vector float xEv; /* E state: keeps max for Mk->E as we go */ vector float xBv; /* B state: splatted vector of B[i-1] for B->Mk calculations */ vector float Dmaxv; /* keeps track of maximum D cell on row */ vector float infv; /* -eslINFINITY in a vector */ float xN, xE, xB, xC, xJ; /* special states' scores */ float Dmax; /* maximum D cell on row */ int i; /* counter over sequence positions 1..L */ int q; /* counter over vectors 0..nq-1 */ int Q = p7O_NQF(om->M); /* segment length: # of vectors */ vector float *dp = ox->dpf[0]; /* using {MDI}MX(q) macro requires initialization of */ vector float *rsc; /* will point at om->rf[x] for residue x[i] */ vector float *tsc; /* will point into (and step thru) om->tf */ /* Check that the DP matrix is ok for us. */ if (Q > ox->allocQ4) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small"); ox->M = om->M; /* Initialization. */ infv = esl_vmx_set_float(-eslINFINITY); for (q = 0; q < Q; q++) MMXo(q) = IMXo(q) = DMXo(q) = infv; xN = 0.; xB = om->xf[p7O_N][p7O_MOVE]; xE = -eslINFINITY; xJ = -eslINFINITY; xC = -eslINFINITY; #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpFloatRow(ox, FALSE, 0, 5, 2, xE, xN, xJ, xB, xC); /* logify=FALSE, =0, width=5, precision=2*/ #endif for (i = 1; i <= L; i++) { rsc = om->rf[dsq[i]]; tsc = om->tf; dcv = infv; xEv = infv; Dmaxv = infv; xBv = esl_vmx_set_float(xB); mpv = vec_sld(infv, MMXo(Q-1), 12); /* Right shifts by 4 bytes. 4,8,12,x becomes x,4,8,12. */ dpv = vec_sld(infv, DMXo(Q-1), 12); ipv = vec_sld(infv, IMXo(Q-1), 12); for (q = 0; q < Q; q++) { /* Calculate new MMXo(i,q); don't store it yet, hold it in sv. */ sv = vec_add(xBv, *tsc); tsc++; sv = vec_max(sv, vec_add(mpv, *tsc)); tsc++; sv = vec_max(sv, vec_add(ipv, *tsc)); tsc++; sv = vec_max(sv, vec_add(dpv, *tsc)); tsc++; sv = vec_add(sv, *rsc); rsc++; xEv = vec_max(xEv, sv); /* Load {MDI}(i-1,q) into mpv, dpv, ipv; * {MDI}MX(q) is then the current, not the prev row */ mpv = MMXo(q); dpv = DMXo(q); ipv = IMXo(q); /* Do the delayed stores of {MD}(i,q) now that memory is usable */ MMXo(q) = sv; DMXo(q) = dcv; /* Calculate the next D(i,q+1) partially: M->D only; * delay storage, holding it in dcv */ dcv = vec_add(sv, *tsc); tsc++; Dmaxv = vec_max(dcv, Dmaxv); /* Calculate and store I(i,q) */ sv = vec_add(mpv, *tsc); tsc++; sv = vec_max(sv, vec_add(ipv, *tsc)); tsc++; IMXo(q) = vec_add(sv, *rsc); rsc++; } /* Now the "special" states, which start from Mk->E (->C, ->J->B) */ xE = esl_vmx_hmax_float(xEv); xN = xN + om->xf[p7O_N][p7O_LOOP]; xC = ESL_MAX(xC + om->xf[p7O_C][p7O_LOOP], xE + om->xf[p7O_E][p7O_MOVE]); xJ = ESL_MAX(xJ + om->xf[p7O_J][p7O_LOOP], xE + om->xf[p7O_E][p7O_LOOP]); xB = ESL_MAX(xJ + om->xf[p7O_J][p7O_MOVE], xN + om->xf[p7O_N][p7O_MOVE]); /* and now xB will carry over into next i, and xC carries over after i=L */ /* Finally the "lazy F" loop (sensu [Farrar07]). We can often * prove that we don't need to evaluate any D->D paths at all. * * The observation is that if we can show that on the next row, * B->M(i+1,k) paths always dominate M->D->...->D->M(i+1,k) paths * for all k, then we don't need any D->D calculations. * * The test condition is: * max_k D(i,k) + max_k ( TDD(k-2) + TDM(k-1) - TBM(k) ) < xB(i) * So: * max_k (TDD(k-2) + TDM(k-1) - TBM(k)) is precalc'ed in om->dd_bound; * max_k D(i,k) is why we tracked Dmaxv; * xB(i) was just calculated above. */ Dmax = esl_vmx_hmax_float(Dmaxv); if (Dmax + om->ddbound_f > xB) { /* Now we're obligated to do at least one complete DD path to be sure. */ /* dcv has carried through from end of q loop above */ dcv = vec_sld(infv, dcv, 12); tsc = om->tf + 7*Q; /* set tsc to start of the DD's */ for (q = 0; q < Q; q++) { DMXo(q) = vec_max(dcv, DMXo(q)); dcv = vec_add(DMXo(q), *tsc); tsc++; } /* We may have to do up to three more passes; the check * is for whether crossing a segment boundary can improve * our score. */ do { dcv = vec_sld(infv, dcv, 12); tsc = om->tf + 7*Q; /* set tsc to start of the DD's */ for (q = 0; q < Q; q++) { if (! vec_any_gt(dcv, DMXo(q))) break; DMXo(q) = vec_max(dcv, DMXo(q)); dcv = vec_add(DMXo(q), *tsc); tsc++; } } while (q == Q); } else { /* not calculating DD? then just store that last MD vector we calc'ed. */ dcv = vec_sld(infv, dcv, 12); DMXo(0) = dcv; } #if p7_DEBUGGING if (ox->debugging) p7_omx_DumpFloatRow(ox, FALSE, i, 5, 2, xE, xN, xJ, xB, xC); /* logify=FALSE, =i, width=5, precision=2*/ #endif } /* end loop over sequence residues 1..L */ /* finally C->T */ *ret_sc = xC + om->xf[p7O_C][p7O_MOVE]; return eslOK; } /*------------------ end, p7_ViterbiScore() ---------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ #ifdef p7VITSCORE_BENCHMARK /* -c, -x are used for debugging, testing. See msvfilter.c for * an explanation. Here -c and -x are the same: both compare * to p7_GViterbi() scores. */ /* gcc -o benchmark-vitscore -std=gnu99 -g -Wall -maltivec -I.. -L.. -I../../easel -L../../easel -Dp7VITSCORE_BENCHMARK vitscore.c -lhmmer -leasel -lm icc -o benchmark-vitscore -O3 -static -I.. -L.. -I../../easel -L../../easel -Dp7VITSCORE_BENCHMARK vitscore.c -lhmmer -leasel -lm ./benchmark-vitscore runs benchmark ./benchmark-vitscore -N100 -c compare scores to generic impl ./benchmark-vitscore -N100 -x equate scores to exact emulation */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for VMX ViterbiScore()"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc1, sc2; double base_time, bench_time, Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); p7_oprofile_Logify(om); ox = p7_omx_Create(gm->M, 0, 0); gx = p7_gmx_Create(gm->M, L); /* Get a baseline time: how long it takes just to generate the sequences */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; /* Run the benchmark */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_ViterbiScore (dsq, L, om, ox, &sc1); if (esl_opt_GetBoolean(go, "-c") || esl_opt_GetBoolean(go, "-x")) { p7_GViterbi(dsq, L, gm, gx, &sc2); printf("%.4f %.4f\n", sc1, sc2); } } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7VITSCORE_BENCHMARK*/ /*------------------- end, benchmark driver ---------------------*/ /***************************************************************** * 3. Unit tests. *****************************************************************/ #ifdef p7VITSCORE_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" /* ViterbiScore() unit test * * We can compare these scores to GViterbi() almost exactly; the only * differences should be negligible roundoff errors. Must convert * the optimized profile to lspace, though, rather than pspace. */ static void utest_viterbi_score(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *ox = p7_omx_Create(M, 0, 0); P7_GMX *gx = p7_gmx_Create(M, L); float sc1, sc2; p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om); p7_oprofile_Logify(om); while (N--) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_ViterbiScore(dsq, L, om, ox, &sc1); p7_GViterbi (dsq, L, gm, gx, &sc2); if (fabs(sc1-sc2) > 0.001) esl_fatal("viterbi score unit test failed: scores differ"); } free(dsq); p7_hmm_Destroy(hmm); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); } #endif /*p7VITSCORE_TESTDRIVE*/ /*-------------------- end, unit tests --------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7VITSCORE_TESTDRIVE /* gcc -g -Wall -maltivec -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o vitscore_utest -Dp7VITSCORE_TESTDRIVE vitscore.c -lhmmer -leasel -lm ./vitscore_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "145", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for the VMX implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* First round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_viterbi_score(r, abc, bg, M, L, N); utest_viterbi_score(r, abc, bg, 1, L, 10); utest_viterbi_score(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); /* Second round of tests for amino alphabets. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_viterbi_score(r, abc, bg, M, L, N); utest_viterbi_score(r, abc, bg, 1, L, 10); utest_viterbi_score(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*VITSCORE_TESTDRIVE*/ /*--------------------- end, test driver ------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7VITSCORE_EXAMPLE /* A minimal example. Also useful for debugging on small HMMs and sequences. gcc -g -Wall -maltivec -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o example -Dp7VITSCORE_EXAMPLE vitscore.c -lhmmer -leasel -lm ./example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_vmx.h" int main(int argc, char **argv) { char *hmmfile = argv[1]; char *seqfile = argv[2]; ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float sc; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_Logify(om); /* allocate DP matrices, both a generic and an optimized one */ ox = p7_omx_Create(gm->M, 0, sq->n); gx = p7_gmx_Create(gm->M, sq->n); /* Useful to place and compile in for debugging: p7_oprofile_Dump(stdout, om); dumps the optimized profile p7_omx_SetDumpMode(ox, TRUE); makes the fast DP algorithms dump their matrices p7_gmx_Dump(stdout, gx, p7_DEFAULT); dumps a generic DP matrix */ p7_ViterbiScore(sq->dsq, sq->n, om, ox, &sc); printf("viterbi score (VMX): %.2f nats\n", sc); p7_GViterbi (sq->dsq, sq->n, gm, gx, &sc); printf("viterbi (generic): %.2f nats\n", sc); /* now in a real app, you'd need to convert raw nat scores to final bit * scores, by subtracting the null model score and rescaling. */ /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); return 0; } #endif /*p7VITSCORE_EXAMPLE*/ /*-------------------------- end, example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_vmx/p7_oprofile.c0000664361611702660230000023406112473612614017312 0ustar wheelerteddy/* Routines for the P7_OPROFILE structure: * a search profile in an optimized implementation. * * Contents: * 1. The P7_OPROFILE object: allocation, initialization, destruction. * 2. Conversion from generic P7_PROFILE to optimized P7_OPROFILE * 3. Conversion from optimized P7_OPROFILE to compact score arrays * 4. Debugging and development utilities. * 5. Benchmark driver. * 6. Unit tests. * 7. Test driver. * 8. Example. * 9. Copyright and license information. * * SRE, Wed Jul 30 11:00:04 2008 [Janelia] * SVN $Id: p7_oprofile.c 4699 2014-07-03 14:54:25Z wheelert $ */ #include "p7_config.h" #include #include #include /* roundf() */ #ifndef __APPLE_ALTIVEC__ #include #endif #include "easel.h" #include "esl_random.h" #include "esl_vmx.h" #include "esl_vectorops.h" #include "hmmer.h" #include "impl_vmx.h" static uint8_t unbiased_byteify(P7_OPROFILE *om, float sc); static uint8_t biased_byteify(P7_OPROFILE *om, float sc); static int16_t wordify(P7_OPROFILE *om, float sc); /***************************************************************** * 1. The P7_OPROFILE structure: a score profile. *****************************************************************/ /* Function: p7_oprofile_Create() * Synopsis: Allocate an optimized profile structure. * Incept: SRE, Sun Nov 25 12:03:19 2007 [Casa de Gatos] * * Purpose: Allocate for profiles of up to nodes for digital alphabet . * * Throws: on allocation error. */ P7_OPROFILE * p7_oprofile_Create(int allocM, const ESL_ALPHABET *abc) { int status; P7_OPROFILE *om = NULL; int nqb = p7O_NQB(allocM); /* # of uchar vectors needed for query */ int nqw = p7O_NQW(allocM); /* # of sword vectors needed for query */ int nqf = p7O_NQF(allocM); /* # of float vectors needed for query */ int x; /* level 0 */ ESL_ALLOC(om, sizeof(P7_OPROFILE)); om->rbv_mem = NULL; om->rwv_mem = NULL; om->twv_mem = NULL; om->rfv_mem = NULL; om->tfv_mem = NULL; om->rbv = NULL; om->rwv = NULL; om->twv = NULL; om->rfv = NULL; om->tfv = NULL; om->clone = 0; /* level 1 */ /* +15 is for manual 16-byte alignment */ ESL_ALLOC(om->rbv_mem, sizeof(vector unsigned char) * nqb * abc->Kp +15); ESL_ALLOC(om->rwv_mem, sizeof(vector signed short) * nqw * abc->Kp +15); ESL_ALLOC(om->twv_mem, sizeof(vector signed short) * nqw * p7O_NTRANS +15); ESL_ALLOC(om->rfv_mem, sizeof(vector float) * nqf * abc->Kp +15); ESL_ALLOC(om->tfv_mem, sizeof(vector float) * nqf * p7O_NTRANS +15); ESL_ALLOC(om->rbv, sizeof(vector unsigned char *) * abc->Kp); ESL_ALLOC(om->rwv, sizeof(vector signed short *) * abc->Kp); ESL_ALLOC(om->rfv, sizeof(vector float *) * abc->Kp); /* align vector memory on 16-byte boundaries */ om->rbv[0] = (vector unsigned char *) (((unsigned long int) om->rbv_mem + 15) & (~0xf)); om->rwv[0] = (vector signed short *) (((unsigned long int) om->rwv_mem + 15) & (~0xf)); om->twv = (vector signed short *) (((unsigned long int) om->twv_mem + 15) & (~0xf)); om->rfv[0] = (vector float *) (((unsigned long int) om->rfv_mem + 15) & (~0xf)); om->tfv = (vector float *) (((unsigned long int) om->tfv_mem + 15) & (~0xf)); /* set the rest of the row pointers for match emissions */ for (x = 1; x < abc->Kp; x++) { om->rbv[x] = om->rbv[0] + (x * nqb); om->rwv[x] = om->rwv[0] + (x * nqw); om->rfv[x] = om->rfv[0] + (x * nqf); } om->allocQ16 = nqb; om->allocQ8 = nqw; om->allocQ4 = nqf; /* Remaining initializations */ om->tbm_b = 0; om->tec_b = 0; om->tjb_b = 0; om->scale_b = 0.0f; om->base_b = 0; om->bias_b = 0; om->scale_w = 0.0f; om->base_w = 0; om->ddbound_w = 0; om->ncj_roundoff = 0.0f; for (x = 0; x < p7_NOFFSETS; x++) om->offs[x] = -1; for (x = 0; x < p7_NEVPARAM; x++) om->evparam[x] = p7_EVPARAM_UNSET; for (x = 0; x < p7_NCUTOFFS; x++) om->cutoff[x] = p7_CUTOFF_UNSET; for (x = 0; x < p7_MAXABET; x++) om->compo[x] = p7_COMPO_UNSET; om->name = NULL; om->acc = NULL; om->desc = NULL; /* in a P7_OPROFILE, we always allocate for the optional RF, CS annotation. * we only rely on the leading \0 to signal that it's unused, but * we initialize all this memory to zeros to shut valgrind up about * fwrite'ing uninitialized memory in the io functions. */ ESL_ALLOC(om->rf, sizeof(char) * (allocM+2)); ESL_ALLOC(om->mm, sizeof(char) * (allocM+2)); ESL_ALLOC(om->cs, sizeof(char) * (allocM+2)); ESL_ALLOC(om->consensus, sizeof(char) * (allocM+2)); memset(om->rf, '\0', sizeof(char) * (allocM+2)); memset(om->mm, '\0', sizeof(char) * (allocM+2)); memset(om->cs, '\0', sizeof(char) * (allocM+2)); memset(om->consensus,'\0', sizeof(char) * (allocM+2)); om->abc = abc; om->L = 0; om->M = 0; om->max_length = -1; om->allocM = allocM; om->mode = p7_NO_MODE; om->nj = 0.0f; return om; ERROR: p7_oprofile_Destroy(om); return NULL; } /* Function: p7_oprofile_IsLocal() * Synopsis: Returns TRUE if profile is in local alignment mode. * Incept: SRE, Sat Aug 16 08:46:00 2008 [Janelia] */ int p7_oprofile_IsLocal(const P7_OPROFILE *om) { if (om->mode == p7_LOCAL || om->mode == p7_UNILOCAL) return TRUE; return FALSE; } /* Function: p7_oprofile_Destroy() * Synopsis: Frees an optimized profile structure. * Incept: SRE, Sun Nov 25 12:22:21 2007 [Casa de Gatos] */ void p7_oprofile_Destroy(P7_OPROFILE *om) { if (om == NULL) return; if (om->clone == 0) { if (om->rbv_mem != NULL) free(om->rbv_mem); if (om->rwv_mem != NULL) free(om->rwv_mem); if (om->twv_mem != NULL) free(om->twv_mem); if (om->rfv_mem != NULL) free(om->rfv_mem); if (om->tfv_mem != NULL) free(om->tfv_mem); if (om->rbv != NULL) free(om->rbv); if (om->rwv != NULL) free(om->rwv); if (om->rfv != NULL) free(om->rfv); if (om->name != NULL) free(om->name); if (om->acc != NULL) free(om->acc); if (om->desc != NULL) free(om->desc); if (om->rf != NULL) free(om->rf); if (om->mm != NULL) free(om->mm); if (om->cs != NULL) free(om->cs); if (om->consensus != NULL) free(om->consensus); } free(om); } /* Function: p7_oprofile_Sizeof() * Synopsis: Return the allocated size of a . * Incept: SRE, Wed Mar 2 10:52:47 2011 [Janelia] * * Purpose: Returns the allocated size of a , * in bytes. */ size_t p7_oprofile_Sizeof(P7_OPROFILE *om) { size_t n = 0; int nqb = om->allocQ16; /* # of uchar vectors needed for query */ int nqw = om->allocQ8; /* # of sword vectors needed for query */ int nqf = om->allocQ4; /* # of float vectors needed for query */ n += sizeof(P7_OPROFILE); n += sizeof(vector unsigned char) * nqb * om->abc->Kp +15; /* om->rbv_mem */ n += sizeof(vector signed short) * nqw * om->abc->Kp +15; /* om->rwv_mem */ n += sizeof(vector signed short) * nqw * p7O_NTRANS +15; /* om->twv_mem */ n += sizeof(vector float) * nqf * om->abc->Kp +15; /* om->rfv_mem */ n += sizeof(vector float) * nqf * p7O_NTRANS +15; /* om->tfv_mem */ n += sizeof(vector unsigned char *) * om->abc->Kp; /* om->rbv */ n += sizeof(vector signed short *) * om->abc->Kp; /* om->rwv */ n += sizeof(vector float *) * om->abc->Kp; /* om->rfv */ n += sizeof(char) * (om->allocM+2); /* om->rf */ n += sizeof(char) * (om->allocM+2); /* om->mm */ n += sizeof(char) * (om->allocM+2); /* om->cs */ n += sizeof(char) * (om->allocM+2); /* om->consensus */ return n; } /* Function: p7_oprofile_Copy() * Synopsis: Allocate an optimized profile structure. * Incept: SRE, Sun Nov 25 12:03:19 2007 [Casa de Gatos] * * Purpose: Allocate for profiles of up to nodes for digital alphabet . * * Throws: on allocation error. */ P7_OPROFILE * p7_oprofile_Copy(P7_OPROFILE *om1) { int x, y; int status; int nqb = p7O_NQB(om1->allocM); /* # of uchar vectors needed for query */ int nqw = p7O_NQW(om1->allocM); /* # of sword vectors needed for query */ int nqf = p7O_NQF(om1->allocM); /* # of float vectors needed for query */ size_t size = sizeof(char) * (om1->allocM+2); P7_OPROFILE *om2 = NULL; const ESL_ALPHABET *abc = om1->abc; /* level 0 */ ESL_ALLOC(om2, sizeof(P7_OPROFILE)); om2->rbv_mem = NULL; om2->rwv_mem = NULL; om2->twv_mem = NULL; om2->rfv_mem = NULL; om2->tfv_mem = NULL; om2->rbv = NULL; om2->rwv = NULL; om2->twv = NULL; om2->rfv = NULL; om2->tfv = NULL; /* level 1 */ /* +15 is for manual 16-byte alignment */ ESL_ALLOC(om2->rbv_mem, sizeof(vector unsigned char) * nqb * abc->Kp +15); ESL_ALLOC(om2->rwv_mem, sizeof(vector signed short) * nqw * abc->Kp +15); ESL_ALLOC(om2->twv_mem, sizeof(vector signed short) * nqw * p7O_NTRANS +15); ESL_ALLOC(om2->rfv_mem, sizeof(vector float) * nqf * abc->Kp +15); ESL_ALLOC(om2->tfv_mem, sizeof(vector float) * nqf * p7O_NTRANS +15); ESL_ALLOC(om2->rbv, sizeof(vector unsigned char *) * abc->Kp); ESL_ALLOC(om2->rwv, sizeof(vector signed short *) * abc->Kp); ESL_ALLOC(om2->rfv, sizeof(vector float *) * abc->Kp); /* align vector memory on 16-byte boundaries */ om2->rbv[0] = (vector unsigned char *) (((unsigned long int) om2->rbv_mem + 15) & (~0xf)); om2->rwv[0] = (vector signed short *) (((unsigned long int) om2->rwv_mem + 15) & (~0xf)); om2->twv = (vector signed short *) (((unsigned long int) om2->twv_mem + 15) & (~0xf)); om2->rfv[0] = (vector float *) (((unsigned long int) om2->rfv_mem + 15) & (~0xf)); om2->tfv = (vector float *) (((unsigned long int) om2->tfv_mem + 15) & (~0xf)); /* copy the vector data */ memcpy(om2->rbv[0], om1->rbv[0], sizeof(vector unsigned char) * nqb * abc->Kp); memcpy(om2->rwv[0], om1->rwv[0], sizeof(vector signed short) * nqw * abc->Kp); memcpy(om2->rfv[0], om1->rfv[0], sizeof(vector float) * nqf * abc->Kp); /* set the rest of the row pointers for match emissions */ for (x = 1; x < abc->Kp; x++) { om2->rbv[x] = om2->rbv[0] + (x * nqb); om2->rwv[x] = om2->rwv[0] + (x * nqw); om2->rfv[x] = om2->rfv[0] + (x * nqf); } om2->allocQ16 = nqb; om2->allocQ8 = nqw; om2->allocQ4 = nqf; /* Remaining initializations */ om2->tbm_b = om1->tbm_b; om2->tec_b = om1->tec_b; om2->tjb_b = om1->tjb_b; om2->scale_b = om1->scale_b; om2->base_b = om1->base_b; om2->bias_b = om1->bias_b; om2->scale_w = om1->scale_w; om2->base_w = om1->base_w; om2->ddbound_w = om1->ddbound_w; om2->ncj_roundoff = om1->ncj_roundoff; for (x = 0; x < p7_NOFFSETS; x++) om2->offs[x] = om1->offs[x]; for (x = 0; x < p7_NEVPARAM; x++) om2->evparam[x] = om1->evparam[x]; for (x = 0; x < p7_NCUTOFFS; x++) om2->cutoff[x] = om1->cutoff[x]; for (x = 0; x < p7_MAXABET; x++) om2->compo[x] = om1->compo[x]; for (x = 0; x < nqw * p7O_NTRANS; ++x) om2->twv[x] = om1->twv[x]; for (x = 0; x < nqf * p7O_NTRANS; ++x) om2->tfv[x] = om1->tfv[x]; for (x = 0; x < p7O_NXSTATES; x++) for (y = 0; y < p7O_NXTRANS; y++) { om2->xw[x][y] = om1->xw[x][y]; om2->xf[x][y] = om1->xf[x][y]; } if ((status = esl_strdup(om1->name, -1, &om2->name)) != eslOK) goto ERROR; if ((status = esl_strdup(om1->acc, -1, &om2->acc)) != eslOK) goto ERROR; if ((status = esl_strdup(om1->desc, -1, &om2->desc)) != eslOK) goto ERROR; /* in a P7_OPROFILE, we always allocate for the optional RF, CS annotation. * we only rely on the leading \0 to signal that it's unused, but * we initialize all this memory to zeros to shut valgrind up about * fwrite'ing uninitialized memory in the io functions. */ ESL_ALLOC(om2->rf, size); ESL_ALLOC(om2->mm, size); ESL_ALLOC(om2->cs, size); ESL_ALLOC(om2->consensus, size); memcpy(om2->rf, om1->rf, size); memcpy(om2->mm, om1->mm, size); memcpy(om2->cs, om1->cs, size); memcpy(om2->consensus, om1->consensus, size); om2->abc = om1->abc; om2->L = om1->L; om2->M = om1->M; om2->allocM = om1->allocM; om2->mode = om1->mode; om2->nj = om1->nj; om2->max_length = om1->max_length; om2->clone = om1->clone; return om2; ERROR: p7_oprofile_Destroy(om2); return NULL; } /* Function: p7_oprofile_Clone() * Synopsis: Allocate a cloned copy of the optimized profile structure. All * allocated memory from the original profile is not reallocated. * The cloned copy will point to the same memory as the original. * Incept: SRE, Sun Nov 25 12:03:19 2007 [Casa de Gatos] * * Purpose: Quick copy of an optimized profile used in mutiple threads. * * Throws: on allocation error. */ P7_OPROFILE * p7_oprofile_Clone(const P7_OPROFILE *om1) { int status; P7_OPROFILE *om2 = NULL; ESL_ALLOC(om2, sizeof(P7_OPROFILE)); memcpy(om2, om1, sizeof(P7_OPROFILE)); om2->clone = 1; return om2; ERROR: p7_oprofile_Destroy(om2); return NULL; } /* Function: p7_oprofile_UpdateFwdEmissionScores() * Synopsis: Update the Forward/Backward part of the optimized profile * match emissions to account for new background distribution. * * Purpose: This implementation re-orders the loops used to access/modify * the rfv array relative to how it's accessed for example in * fb_conversion(), to minimize the required size of sc_arr. * * Args: om - optimized profile to be updated. * bg - the new bg distribution * fwd_emissions - precomputed Fwd (float) residue emission * probabilities in serial order (gathered from * the optimized striped with * p7_oprofile_GetFwdEmissionArray() ). * sc_arr Preallocated array of at least Kp*4 floats */ int p7_oprofile_UpdateFwdEmissionScores(P7_OPROFILE *om, P7_BG *bg, float *fwd_emissions, float *sc_arr) { int M = om->M; /* length of the query */ int k, q, x, z; int nq = p7O_NQF(M); /* segment length; total # of striped vectors needed */ int K = om->abc->K; int Kp = om->abc->Kp; union { vector float v; float x[4]; } tmp; for (k = 1, q = 0; q < nq; q++, k++) { //First compute the core characters of the alphabet for (x = 0; x < K; x++) { for (z = 0; z < 4; z++) { if (k+ z*nq <= M) sc_arr[z*Kp + x] = (om->mm && om->mm[(k+z*nq)]=='m') ? 0 : log(fwd_emissions[Kp * (k+z*nq) + x]/bg->f[x]); else sc_arr[z*Kp + x] = -eslINFINITY; tmp.x[z] = sc_arr[z*Kp + x]; } om->rfv[x][q] = esl_vmx_expf(tmp.v); } // Then compute corresponding scores for ambiguity codes. for (z = 0; z < 4; z++) esl_abc_FExpectScVec(om->abc, sc_arr+(z*Kp), bg->f); //finish off the interleaved values for (x = K; x < Kp; x++) { for (z = 0; z < 4; z++) tmp.x[z] = sc_arr[z*Kp + x]; // computed in FExpectScVec call above om->rfv[x][q] = esl_vmx_expf(tmp.v); } } return eslOK; } /* Function: p7_oprofile_UpdateVitEmissionScores() * Synopsis: Update the Viterbi part of the optimized profile match * emissions to account for new background distribution. *. * Purpose: This implementation re-orders the loops used to access/modify * the rmv array relative to how it's accessed for example in * vf_conversion(), to minimize the required size of sc_arr. * * Args: om - optimized profile to be updated. * bg - the new bg distribution * fwd_emissions - precomputed Fwd (float) residue emission * probabilities in serial order (gathered from * the optimized striped with * p7_oprofile_GetFwdEmissionArray() ). * sc_arr Preallocated array of at least Kp*8 floats */ int p7_oprofile_UpdateVitEmissionScores(P7_OPROFILE *om, P7_BG *bg, float *fwd_emissions, float *sc_arr) { int M = om->M; /* length of the query */ int k, q, x, z; int nq = p7O_NQW(M); /* segment length; total # of striped vectors needed */ int K = om->abc->K; int Kp = om->abc->Kp; int idx; union { vector signed short v; int16_t i[8]; } tmp; /* used to align and load simd minivectors */ for (k = 1, q = 0; q < nq; q++, k++) { //First compute the core characters of the alphabet for (x = 0; x < K; x++) { for (z = 0; z < 8; z++) { idx = z*Kp + x; if (k+ z*nq <= M) { sc_arr[idx] = (om->mm && om->mm[(k+z*nq)]=='m') ? 0 : log( (double)(fwd_emissions[Kp * (k+z*nq) + x])/bg->f[x]); tmp.i[z] = wordify(om, sc_arr[idx]); } else { sc_arr[idx] = -eslINFINITY; tmp.i[z] = -32768; } } om->rwv[x][q] = tmp.v; } // Then compute corresponding scores for ambiguity codes. for (z = 0; z < 8; z++) esl_abc_FExpectScVec(om->abc, sc_arr+(z*Kp), bg->f); //finish off the interleaved values for (x = K; x < Kp; x++) { for (z = 0; z < 8; z++) { idx = z*Kp + x; if (x==K || x>Kp-3 || sc_arr[idx] == -eslINFINITY) tmp.i[z] = -32768; else tmp.i[z] = wordify(om, sc_arr[idx]); } om->rwv[x][q] = tmp.v; } } return eslOK; } /* Function: p7_oprofile_UpdateMSVEmissionScores() * Synopsis: Update the MSV part of the optimized profile match * emissions to account for new background distribution. *. * Purpose: This implementation re-orders the loops used to access/modify * the rbv array relative to how it's accessed for example in * mf_conversion(), to minimize the required size of sc_arr. * * Args: om - optimized profile to be updated. * bg - the new bg distribution * fwd_emissions - precomputed Fwd (float) residue emission * probabilities in serial order (gathered from * the optimized striped with * p7_oprofile_GetFwdEmissionArray() ). * sc_arr Preallocated array of at least Kp*16 floats */ int p7_oprofile_UpdateMSVEmissionScores(P7_OPROFILE *om, P7_BG *bg, float *fwd_emissions, float *sc_arr) { int M = om->M; /* length of the query */ int k, q, x, z; int nq = p7O_NQB(M); /* segment length; total # of striped vectors needed */ int K = om->abc->K; int Kp = om->abc->Kp; int idx; float max = 0.0; /* maximum residue score: used for unsigned emission score bias */ union { vector unsigned char v; uint8_t i[16]; } tmp; /* used to align and load simd minivectors */ /* First we determine the basis for the limited-precision MSVFilter scoring system. * Default: 1/3 bit units, base offset 190: range 0..255 => -190..65 => -63.3..21.7 bits * See J2/66, J4/138 for analysis. * This depends on having computed scores. I do this in a first pass, to get the max * score ... then re-compute those scores so they can be converted to 8bit scores */ for (k = 1, q = 0; q < nq; q++, k++) { for (x = 0; x < K; x++) { for (z = 0; z < 16; z++) { idx = z*Kp + x; if (k+ z*nq <= M && !(om->mm && om->mm[(k+z*nq)]=='m')) max = ESL_MAX(max, log( (double)(fwd_emissions[Kp * (k+z*nq) + x])/bg->f[x])); } } } om->scale_b = 3.0 / eslCONST_LOG2; /* scores in units of third-bits */ om->base_b = 190; om->bias_b = unbiased_byteify(om, -1.0 * max); for (k = 1, q = 0; q < nq; q++, k++) { //First compute the core characters of the alphabet for (x = 0; x < K; x++) { for (z = 0; z < 16; z++) { idx = z*Kp + x; if (k+ z*nq <= M) { sc_arr[idx] = (om->mm && om->mm[(k+z*nq)]=='m') ? 0 : log( (double)(fwd_emissions[Kp * (k+z*nq) + x])/bg->f[x]); tmp.i[z] = biased_byteify(om, sc_arr[idx]); } else { sc_arr[idx] = -eslINFINITY; tmp.i[z] = 255; } } om->rbv[x][q] = tmp.v; } // Then compute corresponding scores for ambiguity codes. for (z = 0; z < 16; z++) esl_abc_FExpectScVec(om->abc, sc_arr+(z*Kp), bg->f); //finish off the interleaved values for (x = K; x < Kp; x++) { for (z = 0; z < 16; z++) { idx = z*Kp + x; if (x==K || x>Kp-3 || sc_arr[idx] == -eslINFINITY) tmp.i[z] = 255; else tmp.i[z] = biased_byteify(om, sc_arr[idx]); } om->rbv[x][q] = tmp.v; } } return eslOK; } /*----------------- end, P7_OPROFILE structure ------------------*/ /***************************************************************** * 2. Conversion from generic P7_PROFILE to optimized P7_OPROFILE *****************************************************************/ /* biased_byteify() * Converts original log-odds residue score to a rounded biased uchar cost. * Match emission scores for MSVFilter get this treatment. * e.g. a score of +3.2, with scale 3.0 and bias 12, becomes 2. * 3.2*3 = 9.6; rounded = 10; bias-10 = 2. * When used, we add the bias, then subtract this cost. * (A cost of +255 is our -infinity "prohibited event") */ /* The (uint8_t) (int) cast is to fix an issue with the ibm's * xlc compiler. The C standard says the results are undefined * when casting from a float to an integral type and the value * is not is range. So, if the float has a value of -6.0 and * is cast to an unsigned char, whose range is 0..255, the * result is undefined. The xlc compiler sets the result to 0. * With gcc and msvc compilers the result is 250. * * This double cast gives the same result on the different compilers. */ static uint8_t biased_byteify(P7_OPROFILE *om, float sc) { uint8_t b; sc = -1.0f * roundf(om->scale_b * sc); /* ugh. sc is now an integer cost represented in a float... */ b = (sc > 255 - om->bias_b) ? 255 : (uint8_t) (int) sc + om->bias_b; /* and now we cast, saturate, and bias it to an unsigned char cost... */ return b; } /* unbiased_byteify() * Convert original transition score to a rounded uchar cost * Transition scores for MSVFilter get this treatment. * e.g. a score of -2.1, with scale 3.0, becomes a cost of 6. * (A cost of +255 is our -infinity "prohibited event") * * See comment above explaining the double cast. */ static uint8_t unbiased_byteify(P7_OPROFILE *om, float sc) { uint8_t b; sc = -1.0f * roundf(om->scale_b * sc); /* ugh. sc is now an integer cost represented in a float... */ b = (sc > 255.) ? 255 : (uint8_t) (int) sc; /* and now we cast and saturate it to an unsigned char cost... */ return b; } /* wordify() * Converts log probability score to a rounded signed 16-bit integer cost. * Both emissions and transitions for ViterbiFilter get this treatment. * No bias term needed, because we use signed words. * e.g. a score of +3.2, with scale 500.0, becomes +1600. */ static int16_t wordify(P7_OPROFILE *om, float sc) { sc = roundf(om->scale_w * sc); if (sc >= 32767.0) return 32767; else if (sc <= -32768.0) return -32768; else return (int16_t) sc; } /* mf_conversion(): * * This builds the MSVFilter() parts of the profile , scores * in lspace uchars (16-way parallel), by rescaling, rounding, and * casting the scores in . * * Returns on success; * throws if hasn't been allocated properly. */ static int mf_conversion(const P7_PROFILE *gm, P7_OPROFILE *om) { int M = gm->M; /* length of the query */ int nq = p7O_NQB(M); /* segment length; total # of striped vectors needed */ float max = 0.0; /* maximum residue score: used for unsigned emission score bias */ int x; /* counter over residues */ int q; /* q counts over total # of striped vectors, 0..nq-1 */ int k; /* the usual counter over model nodes 1..M */ int z; /* counter within elements of one SIMD minivector */ /* used to align and load simd minivectors */ union { vector unsigned char v; uint8_t i[16]; } tmp; if (nq > om->allocQ16) ESL_EXCEPTION(eslEINVAL, "optimized profile is too small to hold conversion"); /* First we determine the basis for the limited-precision MSVFilter scoring system. * Default: 1/3 bit units, base offset 190: range 0..255 => -190..65 => -63.3..21.7 bits * See J2/66, J4/138 for analysis. */ for (x = 0; x < gm->abc->K; x++) max = ESL_MAX(max, esl_vec_FMax(gm->rsc[x], (M+1)*2)); om->scale_b = 3.0 / eslCONST_LOG2; /* scores in units of third-bits */ om->base_b = 190; om->bias_b = unbiased_byteify(om, -1.0 * max); /* striped match costs: start at k=1. */ for (x = 0; x < gm->abc->Kp; x++) for (q = 0, k = 1; q < nq; q++, k++) { for (z = 0; z < 16; z++) tmp.i[z] = ((k+ z*nq <= M) ? biased_byteify(om, p7P_MSC(gm, k+z*nq, x)) : 255); om->rbv[x][q] = tmp.v; } /* transition costs */ om->tbm_b = unbiased_byteify(om, logf(2.0f / ((float) gm->M * (float) (gm->M+1)))); /* constant B->Mk penalty */ om->tec_b = unbiased_byteify(om, logf(0.5f)); /* constant multihit E->C = E->J */ om->tjb_b = unbiased_byteify(om, logf(3.0f / (float) (gm->L+3))); /* this adopts the L setting of the parent profile */ return eslOK; } /* vf_conversion(): * * This builds the ViterbiFilter() parts of the profile , scores * in lspace swords (8-way parallel), by rescaling, rounding, and * casting the scores in . * * Returns on success; * throws if hasn't been allocated properly. */ static int vf_conversion(const P7_PROFILE *gm, P7_OPROFILE *om) { int M = gm->M; /* length of the query */ int nq = p7O_NQW(M); /* segment length; total # of striped vectors needed */ int x; /* counter over residues */ int q; /* q counts over total # of striped vectors, 0..nq-1 */ int k; /* the usual counter over model nodes 1..M */ int kb; /* possibly offset base k for loading om's TSC vectors */ int z; /* counter within elements of one SIMD minivector */ int t; /* counter over transitions 0..7 = p7O_{BM,MM,IM,DM,MD,MI,II,DD}*/ int tg; /* transition index in gm */ int j; /* counter in interleaved vector arrays in the profile */ int ddtmp; /* used in finding worst DD transition bound */ int16_t maxval; /* used to prevent zero cost II */ int16_t val; /* used to align and load simd minivectors */ union { vector signed short v; int16_t i[8]; } tmp; if (nq > om->allocQ8) ESL_EXCEPTION(eslEINVAL, "optimized profile is too small to hold conversion"); /* First set the basis for the limited-precision scoring system. * Default: 1/500 bit units, base offset 12000: range -32768..32767 => -44768..20767 => -89.54..41.53 bits * See J4/138 for analysis. */ om->scale_w = 500.0 / eslCONST_LOG2; om->base_w = 12000; /* striped match scores */ for (x = 0; x < gm->abc->Kp; x++) for (k = 1, q = 0; q < nq; q++, k++) { for (z = 0; z < 8; z++) tmp.i[z] = ((k+ z*nq <= M) ? wordify(om, p7P_MSC(gm, k+z*nq, x)) : -32768); om->rwv[x][q] = tmp.v; } /* Transition costs, all but the DD's. */ for (j = 0, k = 1, q = 0; q < nq; q++, k++) { for (t = p7O_BM; t <= p7O_II; t++) /* this loop of 7 transitions depends on the order in p7o_tsc_e */ { switch (t) { case p7O_BM: tg = p7P_BM; kb = k-1; maxval = 0; break; /* gm has tBMk stored off by one! start from k=0 not 1 */ case p7O_MM: tg = p7P_MM; kb = k-1; maxval = 0; break; /* MM, DM, IM vectors are rotated by -1, start from k=0 */ case p7O_IM: tg = p7P_IM; kb = k-1; maxval = 0; break; case p7O_DM: tg = p7P_DM; kb = k-1; maxval = 0; break; case p7O_MD: tg = p7P_MD; kb = k; maxval = 0; break; /* the remaining ones are straight up */ case p7O_MI: tg = p7P_MI; kb = k; maxval = 0; break; case p7O_II: tg = p7P_II; kb = k; maxval = -1; break; } for (z = 0; z < 8; z++) { val = ((kb+ z*nq < M) ? wordify(om, p7P_TSC(gm, kb+ z*nq, tg)) : -32768); tmp.i[z] = (val <= maxval) ? val : maxval; /* do not allow an II transition cost of 0, or hell may occur. */ } om->twv[j++] = tmp.v; } } /* Finally the DD's, which are at the end of the optimized tsc vector; (j is already sitting there) */ for (k = 1, q = 0; q < nq; q++, k++) { for (z = 0; z < 8; z++) tmp.i[z] = ((k+ z*nq < M) ? wordify(om, p7P_TSC(gm, k+ z*nq, p7P_DD)) : -32768); om->twv[j++] = tmp.v; } /* Specials. (Actually in same order in om and gm, but we copy in general form anyway.) */ /* VF CC,NN,JJ transitions hardcoded zero; -3.0 nat approximation used instead; this papers * over a length independence problem, where the approximation weirdly outperforms the * exact solution, probably indicating that the model's Pascal distribution is problematic, * and the "approximation" is in fact closer to the One True Model, the mythic H4 supermodel. * [xref J5/36] */ om->xw[p7O_E][p7O_LOOP] = wordify(om, gm->xsc[p7P_E][p7P_LOOP]); om->xw[p7O_E][p7O_MOVE] = wordify(om, gm->xsc[p7P_E][p7P_MOVE]); om->xw[p7O_N][p7O_MOVE] = wordify(om, gm->xsc[p7P_N][p7P_MOVE]); om->xw[p7O_N][p7O_LOOP] = 0; /* was wordify(om, gm->xsc[p7P_N][p7P_LOOP]); */ om->xw[p7O_C][p7O_MOVE] = wordify(om, gm->xsc[p7P_C][p7P_MOVE]); om->xw[p7O_C][p7O_LOOP] = 0; /* was wordify(om, gm->xsc[p7P_C][p7P_LOOP]); */ om->xw[p7O_J][p7O_MOVE] = wordify(om, gm->xsc[p7P_J][p7P_MOVE]); om->xw[p7O_J][p7O_LOOP] = 0; /* was wordify(om, gm->xsc[p7P_J][p7P_LOOP]); */ om->ncj_roundoff = 0.0; /* goes along with NN=CC=JJ=0, -3.0 nat approximation */ /* otherwise, would be = om->scale_w * gm->xsc[p7P_N][p7P_LOOP] - om->xw[p7O_N][p7O_LOOP]; */ /* see J4/150 for discussion of VF error suppression, superceded by the -3.0 nat approximation */ /* Transition score bound for "lazy F" DD path evaluation (xref J2/52) */ om->ddbound_w = -32768; for (k = 2; k < M-1; k++) { ddtmp = (int) wordify(om, p7P_TSC(gm, k, p7P_DD)); ddtmp += (int) wordify(om, p7P_TSC(gm, k+1, p7P_DM)); ddtmp -= (int) wordify(om, p7P_TSC(gm, k+1, p7P_BM)); om->ddbound_w = ESL_MAX(om->ddbound_w, ddtmp); } return eslOK; } /* fb_conversion() * This builds the Forward/Backward part of the optimized profile , * where we use odds ratios (not log-odds scores). */ static int fb_conversion(const P7_PROFILE *gm, P7_OPROFILE *om) { int M = gm->M; /* length of the query */ int nq = p7O_NQF(M); /* segment length; total # of striped vectors needed */ int x; /* counter over residues */ int q; /* q counts over total # of striped vectors, 0..nq-1 */ int k; /* the usual counter over model nodes 1..M */ int kb; /* possibly offset base k for loading om's TSC vectors */ int z; /* counter within elements of one SIMD minivector */ int t; /* counter over transitions 0..7 = p7O_{BM,MM,IM,DM,MD,MI,II,DD}*/ int tg; /* transition index in gm */ int j; /* counter in interleaved vector arrays in the profile */ /* used to align and load simd minivectors */ union { vector float v; float x[4]; } tmp; if (nq > om->allocQ4) ESL_EXCEPTION(eslEINVAL, "optimized profile is too small to hold conversion"); /* striped match scores: start at k=1 */ for (x = 0; x < gm->abc->Kp; x++) for (k = 1, q = 0; q < nq; q++, k++) { for (z = 0; z < 4; z++) tmp.x[z] = (k+ z*nq <= M) ? p7P_MSC(gm, k+z*nq, x) : -eslINFINITY; om->rfv[x][q] = esl_vmx_expf(tmp.v); } /* Transition scores, all but the DD's. */ for (j = 0, k = 1, q = 0; q < nq; q++, k++) { for (t = p7O_BM; t <= p7O_II; t++) /* this loop of 7 transitions depends on the order in the definition of p7o_tsc_e */ { switch (t) { case p7O_BM: tg = p7P_BM; kb = k-1; break; /* gm has tBMk stored off by one! start from k=0 not 1 */ case p7O_MM: tg = p7P_MM; kb = k-1; break; /* MM, DM, IM quads are rotated by -1, start from k=0 */ case p7O_IM: tg = p7P_IM; kb = k-1; break; case p7O_DM: tg = p7P_DM; kb = k-1; break; case p7O_MD: tg = p7P_MD; kb = k; break; /* the remaining ones are straight up */ case p7O_MI: tg = p7P_MI; kb = k; break; case p7O_II: tg = p7P_II; kb = k; break; } for (z = 0; z < 4; z++) tmp.x[z] = (kb+z*nq < M) ? p7P_TSC(gm, kb+z*nq, tg) : -eslINFINITY; om->tfv[j++] = esl_vmx_expf(tmp.v); } } /* And finally the DD's, which are at the end of the optimized tsc vector; (j is already there) */ for (k = 1, q = 0; q < nq; q++, k++) { for (z = 0; z < 4; z++) tmp.x[z] = (k+z*nq < M) ? p7P_TSC(gm, k+z*nq, p7P_DD) : -eslINFINITY; om->tfv[j++] = esl_vmx_expf(tmp.v); } /* Specials. (These are actually in exactly the same order in om and * gm, but we copy in general form anyway.) */ om->xf[p7O_E][p7O_LOOP] = expf(gm->xsc[p7P_E][p7P_LOOP]); om->xf[p7O_E][p7O_MOVE] = expf(gm->xsc[p7P_E][p7P_MOVE]); om->xf[p7O_N][p7O_LOOP] = expf(gm->xsc[p7P_N][p7P_LOOP]); om->xf[p7O_N][p7O_MOVE] = expf(gm->xsc[p7P_N][p7P_MOVE]); om->xf[p7O_C][p7O_LOOP] = expf(gm->xsc[p7P_C][p7P_LOOP]); om->xf[p7O_C][p7O_MOVE] = expf(gm->xsc[p7P_C][p7P_MOVE]); om->xf[p7O_J][p7O_LOOP] = expf(gm->xsc[p7P_J][p7P_LOOP]); om->xf[p7O_J][p7O_MOVE] = expf(gm->xsc[p7P_J][p7P_MOVE]); return eslOK; } /* Function: p7_oprofile_Convert() * Synopsis: Converts standard profile to an optimized one. * Incept: SRE, Mon Nov 26 07:38:57 2007 [Janelia] * * Purpose: Convert a standard profile to an optimized profile , * where has already been allocated for a profile of at * least M> nodes and the same emission alphabet abc>. * * Args: gm - profile to optimize * om - allocated optimized profile for holding the result. * * Returns: on success. * * Throws: if , aren't compatible. * on allocation failure. */ int p7_oprofile_Convert(const P7_PROFILE *gm, P7_OPROFILE *om) { int status, z; if (gm->abc->type != om->abc->type) ESL_EXCEPTION(eslEINVAL, "alphabets of the two profiles don't match"); if (gm->M > om->allocM) ESL_EXCEPTION(eslEINVAL, "oprofile is too small"); if ((status = mf_conversion(gm, om)) != eslOK) return status; /* MSVFilter()'s information */ if ((status = vf_conversion(gm, om)) != eslOK) return status; /* ViterbiFilter()'s information */ if ((status = fb_conversion(gm, om)) != eslOK) return status; /* ForwardFilter()'s information */ if (om->name != NULL) free(om->name); if (om->acc != NULL) free(om->acc); if (om->desc != NULL) free(om->desc); if ((status = esl_strdup(gm->name, -1, &(om->name))) != eslOK) goto ERROR; if ((status = esl_strdup(gm->acc, -1, &(om->acc))) != eslOK) goto ERROR; if ((status = esl_strdup(gm->desc, -1, &(om->desc))) != eslOK) goto ERROR; strcpy(om->rf, gm->rf); strcpy(om->mm, gm->mm); strcpy(om->cs, gm->cs); strcpy(om->consensus, gm->consensus); for (z = 0; z < p7_NEVPARAM; z++) om->evparam[z] = gm->evparam[z]; for (z = 0; z < p7_NCUTOFFS; z++) om->cutoff[z] = gm->cutoff[z]; for (z = 0; z < p7_MAXABET; z++) om->compo[z] = gm->compo[z]; om->mode = gm->mode; om->L = gm->L; om->M = gm->M; om->max_length = gm->max_length; om->nj = gm->nj; return eslOK; ERROR: return status; } /* Function: p7_oprofile_ReconfigLength() * Synopsis: Set the target sequence length of a model. * Incept: SRE, Thu Dec 20 09:56:40 2007 [Janelia] * * Purpose: Given an already configured model , quickly reset its * expected length distribution for a new mean target sequence * length of . * * This doesn't affect the length distribution of the null * model. That must also be reset, using . * * We want this routine to run as fast as possible, because * this call is in the critical path: it must be called at * each new target sequence in a database search. * * Returns: on success. Costs/scores for N,C,J transitions are set * here. */ int p7_oprofile_ReconfigLength(P7_OPROFILE *om, int L) { int status; if ((status = p7_oprofile_ReconfigMSVLength (om, L)) != eslOK) return status; if ((status = p7_oprofile_ReconfigRestLength(om, L)) != eslOK) return status; return eslOK; } /* Function: p7_oprofile_ReconfigMSVLength() * Synopsis: Set the target sequence length of the MSVFilter part of the model. * Incept: SRE, Tue Dec 16 13:39:17 2008 [Janelia] * * Purpose: Given an already configured model , quickly reset its * expected length distribution for a new mean target sequence * length of , only for the part of the model that's used * for the accelerated MSV filter. * * The acceleration pipeline uses this to defer reconfiguring the * length distribution of the main model, mostly because hmmscan * reads the model in two pieces, MSV part first, then the rest. * * Returns: on success. */ int p7_oprofile_ReconfigMSVLength(P7_OPROFILE *om, int L) { om->tjb_b = unbiased_byteify(om, logf(3.0f / (float) (L+3))); return eslOK; } /* Function: p7_oprofile_ReconfigRestLength() * Synopsis: Set the target sequence length of the main profile. * Incept: SRE, Tue Dec 16 13:41:30 2008 [Janelia] * * Purpose: Given an already configured model , quickly reset its * expected length distribution for a new mean target sequence * length of , for everything except the MSV filter part * of the model. * * Calling then * is equivalent to * just calling . The two * part version is used in the acceleration pipeline. * * Returns: on success. */ int p7_oprofile_ReconfigRestLength(P7_OPROFILE *om, int L) { float pmove, ploop; pmove = (2.0f + om->nj) / ((float) L + 2.0f + om->nj); /* 2/(L+2) for sw; 3/(L+3) for fs */ ploop = 1.0f - pmove; /* ForwardFilter() parameters: pspace floats */ om->xf[p7O_N][p7O_LOOP] = om->xf[p7O_C][p7O_LOOP] = om->xf[p7O_J][p7O_LOOP] = ploop; om->xf[p7O_N][p7O_MOVE] = om->xf[p7O_C][p7O_MOVE] = om->xf[p7O_J][p7O_MOVE] = pmove; /* ViterbiFilter() parameters: lspace signed 16-bit ints */ om->xw[p7O_N][p7O_MOVE] = om->xw[p7O_C][p7O_MOVE] = om->xw[p7O_J][p7O_MOVE] = wordify(om, logf(pmove)); /* om->xw[p7O_N][p7O_LOOP] = om->xw[p7O_C][p7O_LOOP] = om->xw[p7O_J][p7O_LOOP] = wordify(om, logf(ploop)); */ /* 3nat approx in force: these stay 0 */ /* om->ncj_roundoff = (om->scale_w * logf(ploop)) - om->xw[p7O_N][p7O_LOOP]; */ /* and this does too */ om->L = L; return eslOK; } /* Function: p7_oprofile_ReconfigMultihit() * Synopsis: Quickly reconfig model into multihit mode for target length . * Incept: SRE, Thu Aug 21 10:04:07 2008 [Janelia] * * Purpose: Given a profile that's already been configured once, * quickly reconfigure it into a multihit mode for target * length . * * This gets called in domain definition, when we need to * flip the model in and out of unihit mode to * process individual domains. * * Note: You can't just flip uni/multi mode alone, because that * parameterization also affects target length * modeling. You need to make sure uni vs. multi choice is * made before the length model is set, and you need to * make sure the length model is recalculated if you change * the uni/multi mode. Hence, these functions call * . */ int p7_oprofile_ReconfigMultihit(P7_OPROFILE *om, int L) { om->xf[p7O_E][p7O_MOVE] = 0.5; om->xf[p7O_E][p7O_LOOP] = 0.5; om->nj = 1.0f; om->xw[p7O_E][p7O_MOVE] = wordify(om, -eslCONST_LOG2); om->xw[p7O_E][p7O_LOOP] = wordify(om, -eslCONST_LOG2); return p7_oprofile_ReconfigLength(om, L); } /* Function: p7_oprofile_ReconfigUnihit() * Synopsis: Quickly reconfig model into unihit mode for target length . * Incept: SRE, Thu Aug 21 10:10:32 2008 [Janelia] * * Purpose: Given a profile that's already been configured once, * quickly reconfigure it into a unihit mode for target * length . * * This gets called in domain definition, when we need to * flip the model in and out of unihit mode to * process individual domains. */ int p7_oprofile_ReconfigUnihit(P7_OPROFILE *om, int L) { om->xf[p7O_E][p7O_MOVE] = 1.0f; om->xf[p7O_E][p7O_LOOP] = 0.0f; om->nj = 0.0f; om->xw[p7O_E][p7O_MOVE] = 0; om->xw[p7O_E][p7O_LOOP] = -32768; return p7_oprofile_ReconfigLength(om, L); } /*------------ end, conversions to P7_OPROFILE ------------------*/ /******************************************************************* * 3. Conversion from optimized P7_OPROFILE to compact score arrays *******************************************************************/ /* Function: p7_oprofile_GetFwdTransitionArray() * Synopsis: Retrieve full 32-bit float transition probabilities from an * optimized profile into a flat array * * Purpose: Extract an array of (e.g. p7O_II) transition probabilities * from the underlying profile. In SIMD implementations, * these are striped and interleaved, making them difficult to * directly access. * * Args: - optimized profile, containing transition information * - transition type (e.g. p7O_II) * - preallocated array into which floats will be placed * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_GetFwdTransitionArray(const P7_OPROFILE *om, int type, float *arr ) { int nq = p7O_NQF(om->M); /* # of striped vectors needed */ int i, j; union { vector float v; float x[4]; } tmp; for (i=0; itfv[ (type==p7O_DD ? nq*7+i : type+7*i) ]; for (j=0; j<4; j++) if ( i+1+ j*nq < om->M+1) arr[i+1+ j*nq] = tmp.x[j]; } return eslOK; } /* Function: p7_oprofile_GetMSVEmissionArray() * Synopsis: Retrieve MSV residue emission scores from an optimized * profile into an array * * Purpose: Extract an implicitly 2D array of 8-bit int MSV residue * emission scores from an optimized profile . must * be allocated by the calling function to be of size * ( om->abc->Kp * ( om->M + 1 )), and indexing into the array * is done as [om->abc->Kp * i + c ] for character c at * position i. * * In SIMD implementations, the residue scores are striped * and interleaved, making them somewhat difficult to * directly access. Faster access is desired, for example, * in SSV back-tracking of a high-scoring diagonal * * Args: - optimized profile, containing transition information * - preallocated array into which scores will be placed * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_GetSSVEmissionScoreArray(const P7_OPROFILE *om, uint8_t *arr ) { int x, q, z, k; union { vector unsigned char v; uint8_t i[16]; } tmp; /* used to align and read simd minivectors */ int M = om->M; /* length of the query */ int K = om->abc->Kp; int nq = p7O_NQB(M); /* segment length; total # of striped vectors needed */ int cell_cnt = (om->M + 1) * K; for (x = 0; x < K ; x++) { for (q = 0, k = 1; q < nq; q++, k++) { tmp.v = om->rbv[x][q]; for (z=0; z<16; z++) if ( (K * (k+z*nq) + x) < cell_cnt) arr[ K * (k+z*nq) + x ] = tmp.i[z]; } } return eslOK; } /* Function: p7_oprofile_GetFwdEmissionScoreArray() * Synopsis: Retrieve Fwd (float) residue emission scores from an optimized * profile into an array * * Purpose: Extract an implicitly 2D array of 32-bit float Fwd residue * emission scores from an optimized profile . must * be allocated by the calling function to be of size * ( om->abc->Kp * ( om->M + 1 )), and indexing into the array * is done as [om->abc->Kp * i + c ] for character c at * position i. * * In SIMD implementations, the residue scores are striped * and interleaved, making them somewhat difficult to * directly access. * * Args: - optimized profile, containing transition information * - preallocated array into which scores will be placed * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_GetFwdEmissionScoreArray(const P7_OPROFILE *om, float *arr ) { int x, q, z, k; union { vector float v; float f[4]; } tmp; /* used to align and read simd minivectors */ int M = om->M; /* length of the query */ int K = om->abc->Kp; int nq = p7O_NQF(M); /* segment length; total # of striped vectors needed */ int cell_cnt = (om->M + 1) * K; for (x = 0; x < K; x++) { for (q = 0, k = 1; q < nq; q++, k++) { tmp.v = esl_vmx_logf(om->rfv[x][q]); for (z = 0; z < 4; z++) if ( (K * (k+z*nq) + x) < cell_cnt) arr[ K * (k+z*nq) + x ] = tmp.f[z]; } } return eslOK; } /* Function: p7_oprofile_GetFwdEmissionArray() * Synopsis: Retrieve Fwd (float) residue emission values from an optimized * profile into an array * * Purpose: Extract an implicitly 2D array of 32-bit float Fwd residue * emission values from an optimized profile , converting * back to emission values based on the background. must * be allocated by the calling function to be of size * ( om->abc->Kp * ( om->M + 1 )), and indexing into the array * is done as [om->abc->Kp * i + c ] for character c at * position i. * * In SIMD implementations, the residue scores are striped * and interleaved, making them somewhat difficult to * directly access. * * Args: - optimized profile, containing transition information * - background frequencies * - preallocated array into which scores will be placed * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_GetFwdEmissionArray(const P7_OPROFILE *om, P7_BG *bg, float *arr ) { int x, q, z, k; union { vector float v; float f[4]; } tmp; /* used to align and read simd minivectors */ int M = om->M; /* length of the query */ int Kp = om->abc->Kp; int K = om->abc->K; int nq = p7O_NQF(M); /* segment length; total # of striped vectors needed */ int cell_cnt = (om->M + 1) * Kp; for (x = 0; x < K; x++) { for (q = 0, k = 1; q < nq; q++, k++) { tmp.v = om->rfv[x][q]; for (z = 0; z < 4; z++) if ( (Kp * (k+z*nq) + x) < cell_cnt) arr[ Kp * (k+z*nq) + x ] = tmp.f[z] * bg->f[x]; } } //degeneracy emissions for each position for (x = 0; x <= M; x++) esl_abc_FExpectScVec(om->abc, arr+Kp*x, bg->f); return eslOK; } /*------------ end, conversions from P7_OPROFILE ------------------*/ /***************************************************************** * 4. Debugging and development utilities. *****************************************************************/ /* oprofile_dump_mf() * * Dump the MSVFilter part of a profile to . */ static int oprofile_dump_mf(FILE *fp, const P7_OPROFILE *om) { int M = om->M; /* length of the query */ int nq = p7O_NQB(M); /* segment length; total # of striped vectors needed */ int x; /* counter over residues */ int q; /* q counts over total # of striped vectors, 0..nq-1 */ int k; /* counter over nodes 1..M */ int z; /* counter within elements of one SIMD minivector */ /* used to align and read simd minivectors */ union { vector unsigned char v; uint8_t i[16]; } tmp; /* Header (rearranged column numbers, in the vectors) */ fprintf(fp, " "); for (k =1, q = 0; q < nq; q++, k++) { fprintf(fp, "[ "); for (z = 0; z < 16; z++) if (k+z*nq <= M) fprintf(fp, "%4d ", k+z*nq); else fprintf(fp, "%4s ", "xx"); fprintf(fp, "]"); } fprintf(fp, "\n"); /* Table of residue emissions */ for (x = 0; x < om->abc->Kp; x++) { fprintf(fp, "(%c): ", om->abc->sym[x]); for (q = 0; q < nq; q++) { fprintf(fp, "[ "); tmp.v = om->rbv[x][q]; for (z = 0; z < 16; z++) fprintf(fp, "%4d ", tmp.i[z]); fprintf(fp, "]"); } fprintf(fp, "\n"); } fprintf(fp, "\n"); fprintf(fp, "t_EC,EJ: %4d\n", om->tec_b); fprintf(fp, "t_NB,JB,CT: %4d\n", om->tjb_b); fprintf(fp, "t_BMk: %4d\n", om->tbm_b); fprintf(fp, "scale: %.2f\n", om->scale_b); fprintf(fp, "base: %4d\n", om->base_b); fprintf(fp, "bias: %4d\n", om->bias_b); fprintf(fp, "Q: %4d\n", nq); fprintf(fp, "M: %4d\n", M); return eslOK; } /* oprofile_dump_vf() * * Dump the ViterbiFilter part of a profile to . */ static int oprofile_dump_vf(FILE *fp, const P7_OPROFILE *om) { int M = om->M; /* length of the query */ int nq = p7O_NQW(M); /* segment length; total # of striped vectors needed */ int x; /* counter over residues */ int q; /* q counts over total # of striped vectors, 0..nq-1 */ int k; /* the usual counter over model nodes 1..M */ int kb; /* possibly offset base k for loading om's TSC vectors */ int z; /* counter within elements of one SIMD minivector */ int t; /* counter over transitions 0..7 = p7O_{BM,MM,IM,DM,MD,MI,II,DD}*/ int j; /* counter in interleaved vector arrays in the profile */ /* used to align and read simd minivectors */ union { vector signed short v; int16_t i[8]; } tmp; /* Emission score header (rearranged column numbers, in the vectors) */ fprintf(fp, " "); for (k =1, q = 0; q < nq; q++, k++) { fprintf(fp, "[ "); for (z = 0; z < 8; z++) if (k+z*nq <= M) fprintf(fp, "%6d ", k+z*nq); else fprintf(fp, "%6s ", "xx"); fprintf(fp, "]"); } fprintf(fp, "\n"); /* Table of residue emissions */ for (x = 0; x < om->abc->Kp; x++) { fprintf(fp, "(%c): ", om->abc->sym[x]); /* Match emission scores (insert emissions are assumed zero by design) */ for (q = 0; q < nq; q++) { fprintf(fp, "[ "); tmp.v = om->rwv[x][q]; for (z = 0; z < 8; z++) fprintf(fp, "%6d ", tmp.i[z]); fprintf(fp, "]"); } fprintf(fp, "\n"); } fprintf(fp, "\n"); /* Transitions */ for (t = p7O_BM; t <= p7O_II; t++) { switch (t) { case p7O_BM: fprintf(fp, "\ntBM: "); break; case p7O_MM: fprintf(fp, "\ntMM: "); break; case p7O_IM: fprintf(fp, "\ntIM: "); break; case p7O_DM: fprintf(fp, "\ntDM: "); break; case p7O_MD: fprintf(fp, "\ntMD: "); break; case p7O_MI: fprintf(fp, "\ntMI: "); break; case p7O_II: fprintf(fp, "\ntII: "); break; } for (k = 1, q = 0; q < nq; q++, k++) { switch (t) { case p7O_BM: kb = k; break; case p7O_MM: kb = (1 + (nq+k-2)) % nq; break; /* MM, DM, IM quads rotated by +1 */ case p7O_IM: kb = (1 + (nq+k-2)) % nq; break; case p7O_DM: kb = (1 + (nq+k-2)) % nq; break; case p7O_MD: kb = k; break; /* the remaining ones are straight up */ case p7O_MI: kb = k; break; case p7O_II: kb = k; break; } fprintf(fp, "[ "); for (z = 0; z < 8; z++) if (kb+z*nq <= M) fprintf(fp, "%6d ", kb+z*nq); else fprintf(fp, "%6s ", "xx"); fprintf(fp, "]"); } fprintf(fp, "\n "); for (q = 0; q < nq; q++) { fprintf(fp, "[ "); tmp.v = om->twv[q*7 + t]; for (z = 0; z < 8; z++) fprintf(fp, "%6d ", tmp.i[z]); fprintf(fp, "]"); } fprintf(fp, "\n"); } /* DD transitions */ fprintf(fp, "\ntDD: "); for (k =1, q = 0; q < nq; q++, k++) { fprintf(fp, "[ "); for (z = 0; z < 8; z++) if (k+z*nq <= M) fprintf(fp, "%6d ", k+z*nq); else fprintf(fp, "%6s ", "xx"); fprintf(fp, "]"); } fprintf(fp, "\n "); for (j = nq*7, q = 0; q < nq; q++, j++) { fprintf(fp, "[ "); tmp.v = om->twv[j]; for (z = 0; z < 8; z++) fprintf(fp, "%6d ", tmp.i[z]); fprintf(fp, "]"); } fprintf(fp, "\n"); fprintf(fp, "E->C: %6d E->J: %6d\n", om->xw[p7O_E][p7O_MOVE], om->xw[p7O_E][p7O_LOOP]); fprintf(fp, "N->B: %6d N->N: %6d\n", om->xw[p7O_N][p7O_MOVE], om->xw[p7O_N][p7O_LOOP]); fprintf(fp, "J->B: %6d J->J: %6d\n", om->xw[p7O_J][p7O_MOVE], om->xw[p7O_J][p7O_LOOP]); fprintf(fp, "C->T: %6d C->C: %6d\n", om->xw[p7O_C][p7O_MOVE], om->xw[p7O_C][p7O_LOOP]); fprintf(fp, "scale: %6.2f\n", om->scale_w); fprintf(fp, "base: %6d\n", om->base_w); fprintf(fp, "bound: %6d\n", om->ddbound_w); fprintf(fp, "Q: %6d\n", nq); fprintf(fp, "M: %6d\n", M); return eslOK; } /* oprofile_dump_fb() * * Dump the Forward/Backward part of a profile to . * , control the floating point output: * 8,5 is a reasonable choice for prob space, * 5,2 is reasonable for log space. */ static int oprofile_dump_fb(FILE *fp, const P7_OPROFILE *om, int width, int precision) { int M = om->M; /* length of the query */ int nq = p7O_NQF(M); /* segment length; total # of striped vectors needed */ int x; /* counter over residues */ int q; /* q counts over total # of striped vectors, 0..nq-1 */ int k; /* the usual counter over model nodes 1..M */ int kb; /* possibly offset base k for loading om's TSC vectors */ int z; /* counter within elements of one SIMD minivector */ int t; /* counter over transitions 0..7 = p7O_{BM,MM,IM,DM,MD,MI,II,DD}*/ int j; /* counter in interleaved vector arrays in the profile */ /* used to align and read simd minivectors */ union { vector float v; float x[4]; } tmp; /* Residue emissions */ for (x = 0; x < om->abc->Kp; x++) { fprintf(fp, "(%c): ", om->abc->sym[x]); for (k =1, q = 0; q < nq; q++, k++) { fprintf(fp, "[ "); for (z = 0; z < 4; z++) if (k+z*nq <= M) fprintf(fp, "%*d ", width, k+z*nq); else fprintf(fp, "%*s ", width, "xx"); fprintf(fp, "]"); } fprintf(fp, "\nmat: "); for (q = 0; q < nq; q++) { fprintf(fp, "[ "); tmp.v = om->rfv[x][q]; for (z = 0; z < 4; z++) fprintf(fp, "%*.*f ", width, precision, tmp.x[z]); fprintf(fp, "]"); } fprintf(fp, "\n\n"); } /* Transitions */ for (t = p7O_BM; t <= p7O_II; t++) { switch (t) { case p7O_BM: fprintf(fp, "\ntBM: "); break; case p7O_MM: fprintf(fp, "\ntMM: "); break; case p7O_IM: fprintf(fp, "\ntIM: "); break; case p7O_DM: fprintf(fp, "\ntDM: "); break; case p7O_MD: fprintf(fp, "\ntMD: "); break; case p7O_MI: fprintf(fp, "\ntMI: "); break; case p7O_II: fprintf(fp, "\ntII: "); break; } for (k = 1, q = 0; q < nq; q++, k++) { switch (t) { case p7O_MM:/* MM, DM, IM quads rotated by +1 */ case p7O_IM: case p7O_DM: kb = (1 + (nq+k-2)) % nq; break; case p7O_BM:/* the remaining ones are straight up */ case p7O_MD: case p7O_MI: case p7O_II: kb = k; break; } fprintf(fp, "[ "); for (z = 0; z < 4; z++) if (kb+z*nq <= M) fprintf(fp, "%*d ", width, kb+z*nq); else fprintf(fp, "%*s ", width, "xx"); fprintf(fp, "]"); } fprintf(fp, "\n "); for (q = 0; q < nq; q++) { fprintf(fp, "[ "); tmp.v = om->tfv[q*7 + t]; for (z = 0; z < 4; z++) fprintf(fp, "%*.*f ", width, precision, tmp.x[z]); fprintf(fp, "]"); } fprintf(fp, "\n"); } /* DD transitions */ fprintf(fp, "\ntDD: "); for (k =1, q = 0; q < nq; q++, k++) { fprintf(fp, "[ "); for (z = 0; z < 4; z++) if (k+z*nq <= M) fprintf(fp, "%*d ", width, k+z*nq); else fprintf(fp, "%*s ", width, "xx"); fprintf(fp, "]"); } fprintf(fp, "\n "); for (j = nq*7, q = 0; q < nq; q++, j++) { fprintf(fp, "[ "); tmp.v = om->tfv[j]; for (z = 0; z < 4; z++) fprintf(fp, "%*.*f ", width, precision, tmp.x[z]); fprintf(fp, "]"); } fprintf(fp, "\n"); /* Specials */ fprintf(fp, "E->C: %*.*f E->J: %*.*f\n", width, precision, om->xf[p7O_E][p7O_MOVE], width, precision, om->xf[p7O_E][p7O_LOOP]); fprintf(fp, "N->B: %*.*f N->N: %*.*f\n", width, precision, om->xf[p7O_N][p7O_MOVE], width, precision, om->xf[p7O_N][p7O_LOOP]); fprintf(fp, "J->B: %*.*f J->J: %*.*f\n", width, precision, om->xf[p7O_J][p7O_MOVE], width, precision, om->xf[p7O_J][p7O_LOOP]); fprintf(fp, "C->T: %*.*f C->C: %*.*f\n", width, precision, om->xf[p7O_C][p7O_MOVE], width, precision, om->xf[p7O_C][p7O_LOOP]); fprintf(fp, "Q: %d\n", nq); fprintf(fp, "M: %d\n", M); return eslOK; } /* Function: p7_oprofile_Dump() * Synopsis: Dump internals of a * Incept: SRE, Thu Dec 13 08:49:30 2007 [Janelia] * * Purpose: Dump the internals of structure * to stream ; generally for testing or debugging * purposes. * * Args: fp - output stream (often stdout) * om - optimized profile to dump * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_Dump(FILE *fp, const P7_OPROFILE *om) { int status; fprintf(fp, "Dump of a ::\n"); fprintf(fp, "\n -- float part, odds ratios for Forward/Backward:\n"); if ((status = oprofile_dump_fb(fp, om, 8, 5)) != eslOK) return status; fprintf(fp, "\n -- sword part, log odds for ViterbiFilter(): \n"); if ((status = oprofile_dump_vf(fp, om)) != eslOK) return status; fprintf(fp, "\n -- uchar part, log odds for MSVFilter(): \n"); if ((status = oprofile_dump_mf(fp, om)) != eslOK) return status; return eslOK; } /* Function: p7_oprofile_Sample() * Synopsis: Sample a random profile. * Incept: SRE, Wed Jul 30 13:11:52 2008 [Janelia] * * Purpose: Sample a random profile of nodes for alphabet , * using as the source of random numbers. Parameterize * it for generation of target sequences of mean length * . Calculate its log-odds scores using background * model . * * Args: r - random number generator * abc - emission alphabet * bg - background frequency model * M - size of sampled profile, in nodes * L - configured target seq mean length * opt_hmm - optRETURN: sampled HMM * opt_gm - optRETURN: sampled normal profile * opt_om - RETURN: optimized profile * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_Sample(ESL_RANDOMNESS *r, const ESL_ALPHABET *abc, const P7_BG *bg, int M, int L, P7_HMM **opt_hmm, P7_PROFILE **opt_gm, P7_OPROFILE **ret_om) { P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; int status; if ((gm = p7_profile_Create (M, abc)) == NULL) { status = eslEMEM; goto ERROR; } if ((om = p7_oprofile_Create(M, abc)) == NULL) { status = eslEMEM; goto ERROR; } if ((status = p7_hmm_Sample(r, M, abc, &hmm)) != eslOK) goto ERROR; if ((status = p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL)) != eslOK) goto ERROR; if ((status = p7_oprofile_Convert(gm, om)) != eslOK) goto ERROR; if ((status = p7_oprofile_ReconfigLength(om, L)) != eslOK) goto ERROR; if (opt_hmm != NULL) *opt_hmm = hmm; else p7_hmm_Destroy(hmm); if (opt_gm != NULL) *opt_gm = gm; else p7_profile_Destroy(gm); *ret_om = om; return eslOK; ERROR: if (opt_hmm != NULL) *opt_hmm = NULL; if (opt_gm != NULL) *opt_gm = NULL; *ret_om = NULL; return status; } /* Function: p7_oprofile_Compare() * Synopsis: Compare two optimized profiles for equality. * Incept: SRE, Wed Jan 21 13:29:10 2009 [Janelia] * * Purpose: Compare the contents of and ; return * if they are effectively identical profiles, * or if not. * * Floating point comparisons are done to a tolerance * of using . * * If a comparison fails, an informative error message is * left in to indicate why. * * Internal allocation sizes are not compared, only the * data. * * Args: om1 - one optimized profile to compare * om2 - the other * tol - floating point comparison tolerance; see * errmsg - ptr to array of at least characters. * * Returns: on effective equality; on difference. */ int p7_oprofile_Compare(const P7_OPROFILE *om1, const P7_OPROFILE *om2, float tol, char *errmsg) { int Q4 = p7O_NQF(om1->M); int Q8 = p7O_NQW(om1->M); int Q16 = p7O_NQB(om1->M); int q, r, x, y; union { vector unsigned char v; uint8_t c[16]; } a16, b16; union { vector signed short v; int16_t w[8]; } a8, b8; union { vector float v; float x[4]; } a4, b4; if (om1->mode != om2->mode) ESL_FAIL(eslFAIL, errmsg, "comparison failed: mode"); if (om1->L != om2->L) ESL_FAIL(eslFAIL, errmsg, "comparison failed: L"); if (om1->M != om2->M) ESL_FAIL(eslFAIL, errmsg, "comparison failed: M"); if (om1->nj != om2->nj) ESL_FAIL(eslFAIL, errmsg, "comparison failed: nj"); if (om1->abc->type != om2->abc->type) ESL_FAIL(eslFAIL, errmsg, "comparison failed: alphabet type"); /* MSVFilter part */ for (x = 0; x < om1->abc->Kp; x++) for (q = 0; q < Q16; q++) { a16.v = om1->rbv[x][q]; b16.v = om2->rbv[x][q]; for (r = 0; r < 16; r++) if (a16.c[r] != b16.c[r]) ESL_FAIL(eslFAIL, errmsg, "comparison failed: rb[%d] elem %d", q, r); } if (om1->tbm_b != om2->tbm_b) ESL_FAIL(eslFAIL, errmsg, "comparison failed: tbm_b"); if (om1->tec_b != om2->tec_b) ESL_FAIL(eslFAIL, errmsg, "comparison failed: tec_b"); if (om1->tjb_b != om2->tjb_b) ESL_FAIL(eslFAIL, errmsg, "comparison failed: tjb_b"); if (om1->scale_b != om2->scale_b) ESL_FAIL(eslFAIL, errmsg, "comparison failed: scale_b"); if (om1->base_b != om2->base_b) ESL_FAIL(eslFAIL, errmsg, "comparison failed: base_b"); if (om1->bias_b != om2->bias_b) ESL_FAIL(eslFAIL, errmsg, "comparison failed: bias_b"); /* ViterbiFilter() part */ for (x = 0; x < om1->abc->Kp; x++) for (q = 0; q < Q8; q++) { a8.v = om1->rwv[x][q]; b8.v = om2->rwv[x][q]; for (r = 0; r < 8; r++) if (a8.w[r] != b8.w[r]) ESL_FAIL(eslFAIL, errmsg, "comparison failed: rw[%d] elem %d", q, r); } for (q = 0; q < 8*Q16; q++) { a8.v = om1->twv[q]; b8.v = om2->twv[q]; for (r = 0; r < 8; r++) if (a8.w[r] != b8.w[r]) ESL_FAIL(eslFAIL, errmsg, "comparison failed: tw[%d] elem %d", q, r); } for (x = 0; x < p7O_NXSTATES; x++) for (y = 0; y < p7O_NXTRANS; y++) if (om1->xw[x][y] != om2->xw[x][y]) ESL_FAIL(eslFAIL, errmsg, "comparison failed: xw[%d][%d]", x, y); if (om1->scale_w != om2->scale_w) ESL_FAIL(eslFAIL, errmsg, "comparison failed: scale"); if (om1->base_w != om2->base_w) ESL_FAIL(eslFAIL, errmsg, "comparison failed: base"); if (om1->ddbound_w != om2->ddbound_w) ESL_FAIL(eslFAIL, errmsg, "comparison failed: ddbound_w"); /* Forward/Backward part */ for (x = 0; x < om1->abc->Kp; x++) for (q = 0; q < Q4; q++) { a4.v = om1->rfv[x][q]; b4.v = om2->rfv[x][q]; for (r = 0; r < 4; r++) if (esl_FCompare(a4.x[r], b4.x[r], tol) != eslOK) ESL_FAIL(eslFAIL, errmsg, "comparison failed: rf[%d] elem %d", q, r); } for (q = 0; q < 8*Q4; q++) { a4.v = om1->tfv[q]; b4.v = om2->tfv[q]; for (r = 0; r < 4; r++) if (a4.x[r] != b4.x[r]) ESL_FAIL(eslFAIL, errmsg, "comparison failed: tf[%d] elem %d", q, r); } for (x = 0; x < p7O_NXSTATES; x++) if (esl_vec_FCompare(om1->xf[x], om2->xf[x], p7O_NXTRANS, tol) != eslOK) ESL_FAIL(eslFAIL, errmsg, "comparison failed: xf[%d] vector", x); for (x = 0; x < p7_NOFFSETS; x++) if (om1->offs[x] != om2->offs[x]) ESL_FAIL(eslFAIL, errmsg, "comparison failed: offs[%d]", x); if (esl_strcmp(om1->name, om2->name) != 0) ESL_FAIL(eslFAIL, errmsg, "comparison failed: name"); if (esl_strcmp(om1->acc, om2->acc) != 0) ESL_FAIL(eslFAIL, errmsg, "comparison failed: acc"); if (esl_strcmp(om1->desc, om2->desc) != 0) ESL_FAIL(eslFAIL, errmsg, "comparison failed: desc"); if (esl_strcmp(om1->rf, om2->rf) != 0) ESL_FAIL(eslFAIL, errmsg, "comparison failed: ref"); if (esl_strcmp(om1->mm, om2->mm) != 0) ESL_FAIL(eslFAIL, errmsg, "comparison failed: mm"); if (esl_strcmp(om1->cs, om2->cs) != 0) ESL_FAIL(eslFAIL, errmsg, "comparison failed: cs"); if (esl_strcmp(om1->consensus, om2->consensus) != 0) ESL_FAIL(eslFAIL, errmsg, "comparison failed: consensus"); if (esl_vec_FCompare(om1->evparam, om2->evparam, p7_NEVPARAM, tol) != eslOK) ESL_FAIL(eslFAIL, errmsg, "comparison failed: evparam vector"); if (esl_vec_FCompare(om1->cutoff, om2->cutoff, p7_NCUTOFFS, tol) != eslOK) ESL_FAIL(eslFAIL, errmsg, "comparison failed: cutoff vector"); if (esl_vec_FCompare(om1->compo, om2->compo, p7_MAXABET, tol) != eslOK) ESL_FAIL(eslFAIL, errmsg, "comparison failed: compo vector"); return eslOK; } /* Function: p7_profile_SameAsMF() * Synopsis: Set a generic profile's scores to give MSV scores. * Incept: SRE, Wed Jul 30 13:42:49 2008 [Janelia] * * Purpose: Set a generic profile's scores so that the normal DP * algorithms will give the same score as : * all t_MM scores = 0; all other core transitions = -inf; * multihit local mode; all entries uniformly ; * scores 0; total approximated later as -3; * rounded in the same way as the 8-bit limited precision. * * Returns: on success. */ int p7_profile_SameAsMF(const P7_OPROFILE *om, P7_PROFILE *gm) { int k,x; float tbm = roundf(om->scale_b * (log(2.0f / ((float) gm->M * (float) (gm->M+1))))); /* Transitions */ esl_vec_FSet(gm->tsc, p7P_NTRANS * gm->M, -eslINFINITY); for (k = 1; k < gm->M; k++) p7P_TSC(gm, k, p7P_MM) = 0.0f; for (k = 0; k < gm->M; k++) p7P_TSC(gm, k, p7P_BM) = tbm; /* Emissions */ for (x = 0; x < gm->abc->Kp; x++) for (k = 0; k <= gm->M; k++) { gm->rsc[x][k*2] = (gm->rsc[x][k*2] <= -eslINFINITY) ? -eslINFINITY : roundf(om->scale_b * gm->rsc[x][k*2]); gm->rsc[x][k*2+1] = 0; /* insert score: VF makes it zero no matter what. */ } /* Specials */ for (k = 0; k < p7P_NXSTATES; k++) for (x = 0; x < p7P_NXTRANS; x++) gm->xsc[k][x] = (gm->xsc[k][x] <= -eslINFINITY) ? -eslINFINITY : roundf(om->scale_b * gm->xsc[k][x]); /* NN, CC, JJ hardcoded 0 in limited precision */ gm->xsc[p7P_N][p7P_LOOP] = gm->xsc[p7P_J][p7P_LOOP] = gm->xsc[p7P_C][p7P_LOOP] = 0; return eslOK; } /* Function: p7_profile_SameAsVF() * Synopsis: Round a generic profile to match ViterbiFilter scores. * Incept: SRE, Wed Jul 30 13:37:48 2008 [Janelia] * * Purpose: Round all the scores in a generic (lspace) in * exactly the same way that the scores in the * were rounded. Then we can test that two profiles * give identical internal scores in testing, say, * against . * * The 3nat approximation is used; NN=CC=JJ=0, and 3 nats are * subtracted at the end to account for their contribution. * * To convert a generic Viterbi score calculated with this profile * to a nat score that should match ViterbiFilter() exactly, * do <(gsc / om->scale_w) - 3.0>. * * must be the same profile that was constructed from. * * is irrevocably altered by this call. * * Do not call this more than once on any given ! * * Args: - optimized profile, containing scale information. * - generic profile that was built from. * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_profile_SameAsVF(const P7_OPROFILE *om, P7_PROFILE *gm) { int k; int x; /* Transitions */ /* <= -eslINFINITY test is used solely to silence compiler. really testing == -eslINFINITY */ for (x = 0; x < gm->M*p7P_NTRANS; x++) gm->tsc[x] = (gm->tsc[x] <= -eslINFINITY) ? -eslINFINITY : roundf(om->scale_w * gm->tsc[x]); /* Enforce the rule that no II can be 0; max of -1 */ for (x = p7P_II; x < gm->M*p7P_NTRANS; x += p7P_NTRANS) if (gm->tsc[x] == 0.0) gm->tsc[x] = -1.0; /* Emissions */ for (x = 0; x < gm->abc->Kp; x++) for (k = 0; k <= gm->M; k++) { gm->rsc[x][k*2] = (gm->rsc[x][k*2] <= -eslINFINITY) ? -eslINFINITY : roundf(om->scale_w * gm->rsc[x][k*2]); gm->rsc[x][k*2+1] = 0.0; /* insert score: VF makes it zero no matter what. */ } /* Specials */ for (k = 0; k < p7P_NXSTATES; k++) for (x = 0; x < p7P_NXTRANS; x++) gm->xsc[k][x] = (gm->xsc[k][x] <= -eslINFINITY) ? -eslINFINITY : roundf(om->scale_w * gm->xsc[k][x]); /* 3nat approximation: NN, CC, JJ hardcoded 0 in limited precision */ gm->xsc[p7P_N][p7P_LOOP] = gm->xsc[p7P_J][p7P_LOOP] = gm->xsc[p7P_C][p7P_LOOP] = 0.0; return eslOK; } /*------------ end, P7_OPROFILE debugging tools ----------------*/ /***************************************************************** * 5. Benchmark driver. *****************************************************************/ #ifdef p7OPROFILE_BENCHMARK /* Timing profile conversion. gcc -o benchmark-oprofile -std=gnu99 -g -Wall -maltivec -I.. -L.. -I../../easel -L../../easel -Dp7OPROFILE_BENCHMARK\ p7_oprofile.c -lhmmer -leasel -lm icc -o benchmark-oprofile -O3 -static -I.. -L.. -I../../easel -L../../easel -Dp7OPROFILE_BENCHMARK p7_oprofile.c -lhmmer -leasel -lm ./benchmark-vmx runs benchmark */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-L", eslARG_INT, "400", NULL, NULL, NULL, NULL, NULL, "length of target sequence", 0 }, { "-N", eslARG_INT, "100000", NULL, NULL, NULL, NULL, NULL, "number of conversions to time", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for the generic implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); int i; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); esl_stopwatch_Start(w); for (i = 0; i < N; i++) p7_oprofile_Convert(gm, om); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*p7OPROFILE_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 6. Unit tests *****************************************************************/ #ifdef p7OPROFILE_TESTDRIVE #endif /*p7OPROFILE_TESTDRIVE*/ /*------------------- end, unit tests ---------------------------*/ /***************************************************************** * 7. Test driver *****************************************************************/ #ifdef p7OPROFILE_TESTDRIVE #endif /*p7OPROFILE_TESTDRIVE*/ /*------------------- end, test driver --------------------------*/ /***************************************************************** * 8. Example *****************************************************************/ #ifdef p7OPROFILE_EXAMPLE /* gcc -std=gnu99 -g -Wall -Dp7OPROFILE_EXAMPLE -I.. -I../../easel -L.. -L../../easel -o p7_oprofile_example p7_oprofile.c -lhmmer -leasel -lm * ./p7_oprofile_example */ #include "p7_config.h" #include #include "easel.h" #include "hmmer.h" int main(int argc, char **argv) { char *hmmfile = argv[1]; ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om1 = NULL; P7_OPROFILE *om2 = NULL; int status; char errbuf[eslERRBUFSIZE]; status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); status = p7_hmmfile_Read(hfp, &abc, &hmm); if (status == eslEFORMAT) p7_Fail("Bad file format in HMM file %s:\n%s\n", hfp->fname, hfp->errbuf); else if (status == eslEINCOMPAT) p7_Fail("HMM in %s is not in the expected %s alphabet\n", hfp->fname, esl_abc_DecodeType(abc->type)); else if (status == eslEOF) p7_Fail("Empty HMM file %s? No HMM data found.\n", hfp->fname); else if (status != eslOK) p7_Fail("Unexpected error in reading HMMs from %s\n", hfp->fname); bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); om1 = p7_oprofile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 400, p7_LOCAL); p7_oprofile_Convert(gm, om1); p7_oprofile_Dump(stdout, om1); om2 = p7_oprofile_Copy(om1); if (p7_oprofile_Compare(om1, om2, 0.001f, errbuf) != eslOK) printf ("ERROR %s\n", errbuf); p7_oprofile_Destroy(om1); p7_oprofile_Destroy(om2); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); return eslOK; } #endif /*p7OPROFILE_EXAMPLE*/ /*----------------------- end, example --------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_vmx/io.c0000664361611702660230000014205612473612613015475 0ustar wheelerteddy/* Saving optimized profiles in two pieces: MSV part and the rest. * * To accelerate hmmscan, which is limited by speed of HMM input, * hmmpress saves an optimized profile in two pieces. One file gets * a bare minimum of information needed to run the MSV filter. * The other file gets the rest of the profile. Both files are binary, * stored exactly as the has the information internally. * * By convention, hmmpress calls the two files .h3f and * .h3p, which nominally stand for "H3 filter" and "H3 * profile". * * Contents: * 1. Writing optimized profiles to two files. * 2. Reading optimized profiles in two stages. * 3. Utility routines. * 4. Benchmark driver. * 5. Unit tests. * 6. Test driver. * 7. Example. * 8. Copyright and license information. * * TODO: * - crossplatform binary compatibility (endedness and off_t) * - Write() could save a tag (model #) instead of name for verifying * that MSV and Rest parts match, saving a malloc for var-lengthed name * in ReadRest(). * */ #include "p7_config.h" #include #include #include #ifdef HMMER_THREADS #include #endif #ifndef __APPLE_ALTIVEC__ #include #endif #include "easel.h" #include "hmmer.h" #include "impl_vmx.h" static uint32_t v3f_fmagic = 0xb3e6e6f6; /* 3/f binary MSV file, VMX: "3ffv" = 0x 33 66 66 76 + 0x80808080 */ static uint32_t v3f_pmagic = 0xb3e6f0f6; /* 3/f binary profile file, VMX: "3fpv" = 0x 33 66 70 76 + 0x80808080 */ static uint32_t v3e_fmagic = 0xb3e5e6f6; /* 3/e binary MSV file, VMX: "3efv" = 0x 33 65 66 76 + 0x80808080 */ static uint32_t v3e_pmagic = 0xb3e5f0f6; /* 3/e binary profile file, VMX: "3epv" = 0x 33 65 70 76 + 0x80808080 */ static uint32_t v3d_fmagic = 0xb3e4e6f6; /* 3/d binary MSV file, VMX: "3dfv" = 0x 33 64 66 76 + 0x80808080 */ static uint32_t v3d_pmagic = 0xb3e4f0f6; /* 3/d binary profile file, VMX: "3dpv" = 0x 33 64 70 76 + 0x80808080 */ static uint32_t v3c_fmagic = 0xb3e3e6f6; /* 3/c binary MSV file, VMX: "3cfv" = 0x 33 63 66 76 + 0x80808080 */ static uint32_t v3c_pmagic = 0xb3e3f0f6; /* 3/c binary profile file, VMX: "3cpv" = 0x 33 63 70 76 + 0x80808080 */ static uint32_t v3b_fmagic = 0xb3e2e6f3; /* 3/b binary MSV file, VMX: "3bfs" = 0x 33 62 66 73 + 0x80808080 */ static uint32_t v3b_pmagic = 0xb3e2f0f3; /* 3/b binary profile file, VMX: "3bps" = 0x 33 62 70 73 + 0x80808080 */ static uint32_t v3a_fmagic = 0xe8b3e6f3; /* 3/a binary MSV file, VMX: "h3fs" = 0x 68 33 66 73 + 0x80808080 */ static uint32_t v3a_pmagic = 0xe8b3f0f3; /* 3/a binary profile file, VMX: "h3ps" = 0x 68 33 70 73 + 0x80808080 */ /* the 3/a and 3/b codes should have ended in v not s, to * distinguish VMX from SSE binary files. caught too late, now * legacied. (SRE, 27 Oct 10) */ /***************************************************************** *# 1. Writing optimized profiles to two files. *****************************************************************/ /* Function: p7_oprofile_Write() * Synopsis: Write an optimized profile in two files. * * Purpose: Write the MSV filter part of to open binary stream * , and the rest of the model to . These two * streams will typically be <.h3f> and <.h3p> files * being created by hmmpress. * * Args: ffp - open binary stream for saving MSV filter part * pfp - open binary stream for saving rest of profile * om - optimized profile to save * * Returns: on success. * * Throws: on any write failure; for example, * if disk is full. */ int p7_oprofile_Write(FILE *ffp, FILE *pfp, P7_OPROFILE *om) { int Q4 = p7O_NQF(om->M); int Q8 = p7O_NQW(om->M); int Q16 = p7O_NQB(om->M); int n = strlen(om->name); int x; /* is the part of the oprofile that MSVFilter() needs */ if (fwrite((char *) &(v3f_fmagic), sizeof(uint32_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->M), sizeof(int), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->abc->type), sizeof(int), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &n, sizeof(int), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->name, sizeof(char), n+1, ffp) != n+1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->max_length),sizeof(int), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->tbm_b), sizeof(uint8_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->tec_b), sizeof(uint8_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->tjb_b), sizeof(uint8_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->scale_b), sizeof(float), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->base_b), sizeof(uint8_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->bias_b), sizeof(uint8_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); for (x = 0; x < om->abc->Kp; x++) if (fwrite( (char *) om->rbv[x], sizeof(vector unsigned char), Q16, ffp) != Q16) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->evparam, sizeof(float), p7_NEVPARAM, ffp) != p7_NEVPARAM) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->offs, sizeof(off_t), p7_NOFFSETS, ffp) != p7_NOFFSETS) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->compo, sizeof(float), p7_MAXABET, ffp) != p7_MAXABET) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(v3f_fmagic), sizeof(uint32_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); /* gets the rest of the oprofile */ if (fwrite((char *) &(v3f_pmagic), sizeof(uint32_t), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->M), sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->abc->type), sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &n, sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->name, sizeof(char), n+1, pfp) != n+1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (om->acc == NULL) { n = 0; if (fwrite((char *) &n, sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); } else { n = strlen(om->acc); if (fwrite((char *) &n, sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->acc, sizeof(char), n+1, pfp) != n+1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); } if (om->desc == NULL) { n = 0; if (fwrite((char *) &n, sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); } else { n = strlen(om->desc); if (fwrite((char *) &n, sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->desc, sizeof(char), n+1, pfp) != n+1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); } if (fwrite((char *) om->rf, sizeof(char), om->M+2, pfp) != om->M+2) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->mm, sizeof(char), om->M+2, pfp) != om->M+2) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->cs, sizeof(char), om->M+2, pfp) != om->M+2) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->consensus, sizeof(char), om->M+2, pfp) != om->M+2) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); /* ViterbiFilter part */ if (fwrite((char *) om->twv, sizeof(vector signed short), 8*Q8, pfp) != 8*Q8) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); for (x = 0; x < om->abc->Kp; x++) if (fwrite( (char *) om->rwv[x], sizeof(vector signed short), Q8, pfp) != Q8) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); for (x = 0; x < p7O_NXSTATES; x++) if (fwrite( (char *) om->xw[x], sizeof(int16_t), p7O_NXTRANS, pfp) != p7O_NXTRANS) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->scale_w), sizeof(float), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->base_w), sizeof(int16_t), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->ddbound_w), sizeof(int16_t), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->ncj_roundoff), sizeof(float), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); /* Forward/Backward part */ if (fwrite((char *) om->tfv, sizeof(vector float), 8*Q4, pfp) != 8*Q4) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); for (x = 0; x < om->abc->Kp; x++) if (fwrite( (char *) om->rfv[x], sizeof(vector float), Q4, pfp) != Q4) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); for (x = 0; x < p7O_NXSTATES; x++) if (fwrite( (char *) om->xf[x], sizeof(float), p7O_NXTRANS, pfp) != p7O_NXTRANS) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->cutoff, sizeof(float), p7_NCUTOFFS, pfp) != p7_NCUTOFFS) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->nj), sizeof(float), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->mode), sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->L) , sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(v3f_pmagic), sizeof(uint32_t), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); return eslOK; } /*---------------- end, writing oprofile ------------------------*/ /***************************************************************** * 2. Reading optimized profiles in two stages. *****************************************************************/ /* Function: p7_oprofile_ReadMSV() * Synopsis: Read MSV filter part of an optimized profile. * * Purpose: Read the MSV filter part of a profile from the * <.h3f> file associated with an open HMM file . * Allocate a new model, populate it with this minimal * MSV filter information, and return a pointer to it * in <*ret_om>. * * Our alphabet may get set by the first HMM we read. If * <*byp_abc> is at start, create a new alphabet and * return a pointer to it in <*byp_abc>. If <*byp_abc> is * non-, it is assumed to be a pointer to an existing * alphabet; we verify that the HMM's alphabet matches it * and <*ret_abc> isn't changed. This is the same * convention used by . * * The <.h3f> file was opened automatically, if it existed, * when the HMM file was opened with . * * When no more HMMs remain in the file, return . * * Args: hfp - open HMM file, with associated .h3p file * byp_abc - BYPASS: <*byp_abc == ESL_ALPHABET *> if known; * <*byp_abc == NULL> if desired; * if unwanted. * ret_om - RETURN: newly allocated with MSV filter * data filled in. * * Returns: on success. <*ret_om> is allocated here; * caller free's with . * <*byp_abc> is allocated here if it was requested; * caller free's with . * * Returns if has no <.h3f> file open, * or on any parsing error. * * Returns if the HMM we read is incompatible * with the existing alphabet <*byp_abc> led us to expect. * * On any returned error, errbuf> contains an * informative error message. * * Throws: on allocation error. */ int p7_oprofile_ReadMSV(P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OPROFILE **ret_om) { P7_OPROFILE *om = NULL; ESL_ALPHABET *abc = NULL; uint32_t magic; off_t roff; int M, Q16; int x,n; int alphatype; int status; if (hfp->errbuf != NULL) hfp->errbuf[0] = '\0'; if (hfp->ffp == NULL) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no MSV profile file; hmmpress probably wasn't run"); if (feof(hfp->ffp)) { status = eslEOF; goto ERROR; } /* normal EOF: no more profiles */ /* keep track of the starting offset of the MSV model */ roff = ftello(hfp->ffp); if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->ffp)) { status = eslEOF; goto ERROR; } if (magic == v3a_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/a); please hmmpress your HMM file again"); if (magic == v3b_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/b); please hmmpress your HMM file again"); if (magic == v3c_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/c); please hmmpress your HMM file again"); if (magic == v3d_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/d); please hmmpress your HMM file again"); if (magic == v3e_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/e); please hmmpress your HMM file again"); if (magic != v3f_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic; not an HMM database?"); if (! fread( (char *) &M, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read model size M"); if (! fread( (char *) &alphatype, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read alphabet type"); Q16 = p7O_NQB(M); /* Set or verify alphabet. */ if (byp_abc == NULL || *byp_abc == NULL) { /* alphabet unknown: whether wanted or unwanted, make a new one */ if ((abc = esl_alphabet_Create(alphatype)) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failed: alphabet"); } else { /* alphabet already known: verify it against what we see in the HMM */ abc = *byp_abc; if (abc->type != alphatype) ESL_XFAIL(eslEINCOMPAT, hfp->errbuf, "Alphabet type mismatch: was %s, but current profile says %s", esl_abc_DecodeType(abc->type), esl_abc_DecodeType(alphatype)); } /* Now we know the sizes of things, so we can allocate. */ if ((om = p7_oprofile_Create(M, abc)) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failed: oprofile"); om->M = M; om->roff = roff; if (! fread((char *) &n, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read name length"); ESL_ALLOC(om->name, sizeof(char) * (n+1)); if (! fread((char *) om->name, sizeof(char), n+1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read name"); if (! fread((char *) &(om->max_length), sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read max_length"); if (! fread((char *) &(om->tbm_b), sizeof(uint8_t), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read tbm"); if (! fread((char *) &(om->tec_b), sizeof(uint8_t), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read tec"); if (! fread((char *) &(om->tjb_b), sizeof(uint8_t), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read tjb"); if (! fread((char *) &(om->scale_b), sizeof(float), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read scale"); if (! fread((char *) &(om->base_b), sizeof(uint8_t), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read base"); if (! fread((char *) &(om->bias_b), sizeof(uint8_t), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read bias"); for (x = 0; x < abc->Kp; x++) if (! fread((char *) om->rbv[x], sizeof(vector unsigned char), Q16, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read msv scores at %d [residue %c]", x, abc->sym[x]); if (! fread((char *) om->evparam, sizeof(float), p7_NEVPARAM, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read stat params"); if (! fread((char *) om->offs, sizeof(off_t), p7_NOFFSETS, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read hmmpfam offsets"); if (! fread((char *) om->compo, sizeof(float), p7_MAXABET, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read model composition"); if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no sentinel magic: .h3f file corrupted?"); if (magic != v3f_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad sentinel magic; .h3f file corrupted?"); /* keep track of the ending offset of the MSV model */ om->eoff = ftello(hfp->ffp) - 1;; if (byp_abc != NULL) *byp_abc = abc; /* pass alphabet (whether new or not) back to caller, if caller wanted it */ *ret_om = om; return eslOK; ERROR: if (abc != NULL && (byp_abc == NULL || *byp_abc == NULL)) esl_alphabet_Destroy(abc); /* destroy alphabet if we created it here */ if (om != NULL) p7_oprofile_Destroy(om); *ret_om = NULL; return status; } /* Function: p7_oprofile_ReadMSVInfo() * Synopsis: Read MSV filter info, but not the scores. * * Purpose: Read just enough of the MSV filter header from the * <.h3f> file associated with an open HMM file * to skip ahead to the next MSV filter. Allocate a new * model, populate it with just the file offsets of this * model and return a pointer to it in <*ret_om>. * * The <.h3f> file was opened automatically, if it existed, * when the HMM file was opened with . * * When no more HMMs remain in the file, return . * * Args: hfp - open HMM file, with associated .h3p file * byp_abc - BYPASS: <*byp_abc == ESL_ALPHABET *> if known; * <*byp_abc == NULL> if desired; * if unwanted. * ret_om - RETURN: newly allocated with partial MSV * filter data filled in. * * Returns: on success. <*ret_om> is allocated here; * caller free's with . * <*byp_abc> is allocated here if it was requested; * caller free's with . * * Returns if has no <.h3f> file open, * or on any parsing error. * * Returns if the HMM we read is incompatible * with the existing alphabet <*byp_abc> led us to expect. * * On any returned error, errbuf> contains an * informative error message. * * Throws: on allocation error. */ int p7_oprofile_ReadInfoMSV(P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OPROFILE **ret_om) { P7_OPROFILE *om = NULL; ESL_ALPHABET *abc = NULL; uint32_t magic; off_t roff; int M, Q16; int n; int alphatype; int status; if (hfp->errbuf != NULL) hfp->errbuf[0] = '\0'; if (hfp->ffp == NULL) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no MSV profile file; hmmpress probably wasn't run"); if (feof(hfp->ffp)) { status = eslEOF; goto ERROR; } /* normal EOF: no more profiles */ /* keep track of the starting offset of the MSV model */ roff = ftello(hfp->ffp); if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->ffp)) { status = eslEOF; goto ERROR; } if (magic == v3a_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/a); please hmmpress your HMM file again"); if (magic == v3b_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/b); please hmmpress your HMM file again"); if (magic == v3c_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/c); please hmmpress your HMM file again"); if (magic == v3d_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/d); please hmmpress your HMM file again"); if (magic == v3e_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/e); please hmmpress your HMM file again"); if (magic != v3f_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic; not an HMM database?"); if (! fread( (char *) &M, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read model size M"); if (! fread( (char *) &alphatype, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read alphabet type"); Q16 = p7O_NQB(M); /* Set or verify alphabet. */ if (byp_abc == NULL || *byp_abc == NULL) { /* alphabet unknown: whether wanted or unwanted, make a new one */ if ((abc = esl_alphabet_Create(alphatype)) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failed: alphabet"); } else { /* alphabet already known: verify it against what we see in the HMM */ abc = *byp_abc; if (abc->type != alphatype) ESL_XFAIL(eslEINCOMPAT, hfp->errbuf, "Alphabet type mismatch: was %s, but current profile says %s", esl_abc_DecodeType(abc->type), esl_abc_DecodeType(alphatype)); } /* Now we know the sizes of things, so we can allocate. */ if ((om = p7_oprofile_Create(M, abc)) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failed: oprofile"); om->M = M; om->roff = roff; /* calculate the remaining length of the msv model */ om->name = NULL; if (!fread((char *) &n, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read name length"); roff += (sizeof(int) * 3); /* magic, model size, and alphabet type */ roff += sizeof(int) + n + 1; /* length, name string and terminator '\0' */ roff += (sizeof(float) + sizeof(uint8_t) * 5); /* transition costs, bias, scale and base */ roff += (sizeof(vector signed char) * abc->Kp * Q16); /* msv scores */ roff += (sizeof(float) * p7_NEVPARAM); /* stat params */ roff += (sizeof(off_t) * p7_NOFFSETS); /* hmmpfam offsets */ roff += (sizeof(float) * p7_MAXABET); /* model composition */ roff += sizeof(uint32_t); /* sentinel magic */ /* keep track of the ending offset of the MSV model */ p7_oprofile_Position(hfp, roff); om->eoff = ftello(hfp->ffp) - 1; if (byp_abc != NULL) *byp_abc = abc; /* pass alphabet (whether new or not) back to caller, if caller wanted it */ *ret_om = om; return eslOK; ERROR: if (abc != NULL && (byp_abc == NULL || *byp_abc == NULL)) esl_alphabet_Destroy(abc); /* destroy alphabet if we created it here */ if (om != NULL) p7_oprofile_Destroy(om); *ret_om = NULL; return status; } /* Function: p7_oprofile_ReadBlockMSV() * Synopsis: Read the next block of optimized profiles from a hmm file. * * Purpose: Reads a block of optimized profiles from open hmm file into * . * * Returns: on success; the new sequence is stored in . * * Returns when there is no profiles left in the * file (including first attempt to read an empty file). * * Otherwise return the status of the p7_oprofile_ReadMSV function. */ int p7_oprofile_ReadBlockMSV(P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OM_BLOCK *hmmBlock) { int i; int size = 0; int status = eslOK; hmmBlock->count = 0; for (i = 0; i < hmmBlock->listSize; ++i) { status = p7_oprofile_ReadMSV(hfp, byp_abc, &hmmBlock->list[i]); if (status != eslOK) break; size += hmmBlock->list[i]->M; ++hmmBlock->count; } /* EOF will be returned only in the case were no profiles were read */ if (status == eslEOF && i > 0) status = eslOK; return status; } /* Function: p7_oprofile_ReadRest() * Synopsis: Read the rest of an optimized profile. * * Purpose: Read the rest of an optimized profile from * the <.h3p> file associated with an open HMM * file . * * This is the second part of a two-part calling sequence. * The here must be the result of a previous * successful call on the same * open . * * Args: hfp - open HMM file, from which we've previously * called . * om - optimized profile that was successfully * returned by . * * Returns: on success, and is now a complete * optimized profile. * * Returns if has no <.h3p> file open, * or on any parsing error, and set errbuf> to * an informative error message. * * Throws: if an fails to reposition the * binary <.h3p> file. * * on allocation error. */ int p7_oprofile_ReadRest(P7_HMMFILE *hfp, P7_OPROFILE *om) { uint32_t magic; int M, Q4, Q8; int x,n; char *name = NULL; int alphatype; int status; #ifdef HMMER_THREADS /* lock the mutex to prevent other threads from reading from the optimized * profile at the same time. */ if (hfp->syncRead) { if (pthread_mutex_lock (&hfp->readMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex lock failed"); } #endif if (hfp->errbuf != NULL) hfp->errbuf[0] = '\0'; if (hfp->pfp == NULL) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no MSV profile file; hmmpress probably wasn't run"); /* Position the pfp> using offset stored in */ if (fseeko(hfp->pfp, om->offs[p7_POFFSET], SEEK_SET) != 0) ESL_EXCEPTION(eslESYS, "fseeko() failed"); if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read magic"); if (magic == v3a_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/a); please hmmpress your HMM file again"); if (magic == v3b_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/b); please hmmpress your HMM file again"); if (magic == v3c_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/c); please hmmpress your HMM file again"); if (magic == v3d_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/d); please hmmpress your HMM file again"); if (magic == v3e_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "this is an outdated HMM database format (3/e); please hmmpress your HMM file again"); if (magic != v3f_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic; not an HMM database file?"); if (! fread( (char *) &M, sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read model size M"); if (! fread( (char *) &alphatype, sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read alphabet type"); if (! fread( (char *) &n, sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read name length"); if (M != om->M) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "p/f model length mismatch"); if (alphatype != om->abc->type) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "p/f alphabet type mismatch"); ESL_ALLOC(name, sizeof(char) * (n+1)); if (! fread( (char *) name, sizeof(char), n+1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read name"); if (strcmp(name, om->name) != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "p/f name mismatch"); if (! fread((char *) &n, sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read accession length"); if (n > 0) { ESL_ALLOC(om->acc, sizeof(char) * (n+1)); if (! fread( (char *) om->acc, sizeof(char), n+1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read accession"); } if (! fread((char *) &n, sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read description length"); if (n > 0) { ESL_ALLOC(om->desc, sizeof(char) * (n+1)); if (! fread( (char *) om->desc, sizeof(char), n+1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read description"); } if (! fread((char *) om->rf, sizeof(char), M+2, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read rf annotation"); if (! fread((char *) om->mm, sizeof(char), M+2, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read mm annotation"); if (! fread((char *) om->cs, sizeof(char), M+2, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read cs annotation"); if (! fread((char *) om->consensus, sizeof(char), M+2, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read consensus annotation"); Q4 = p7O_NQF(om->M); Q8 = p7O_NQW(om->M); if (! fread((char *) om->twv, sizeof(vector signed short), 8*Q8, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read , vitfilter transitions"); for (x = 0; x < om->abc->Kp; x++) if (! fread( (char *) om->rwv[x], sizeof(vector signed short), Q8, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read [%d], vitfilter emissions for sym %c", x, om->abc->sym[x]); for (x = 0; x < p7O_NXSTATES; x++) if (! fread( (char *) om->xw[x], sizeof(int16_t), p7O_NXTRANS, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read [%d], vitfilter special transitions", x); if (! fread((char *) &(om->scale_w), sizeof(float), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read scale_w"); if (! fread((char *) &(om->base_w), sizeof(int16_t), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read base_w"); if (! fread((char *) &(om->ddbound_w), sizeof(int16_t), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read ddbound_w"); if (! fread((char *) &(om->ncj_roundoff), sizeof(float), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read ddbound_w"); if (! fread((char *) om->tfv, sizeof(vector float), 8*Q4, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read transitions"); for (x = 0; x < om->abc->Kp; x++) if (! fread( (char *) om->rfv[x], sizeof(vector float), Q4, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read [%d] emissions for sym %c", x, om->abc->sym[x]); for (x = 0; x < p7O_NXSTATES; x++) if (! fread( (char *) om->xf[x], sizeof(float), p7O_NXTRANS, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read [%d] special transitions", x); if (! fread((char *) om->cutoff, sizeof(float), p7_NCUTOFFS, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read Pfam score cutoffs"); if (! fread((char *) &(om->nj), sizeof(float), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read nj"); if (! fread((char *) &(om->mode), sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read mode"); if (! fread((char *) &(om->L) , sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read L"); if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no sentinel magic: .h3p file corrupted?"); if (magic != v3f_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad sentinel magic; .h3p file corrupted?"); #ifdef HMMER_THREADS if (hfp->syncRead) { if (pthread_mutex_unlock (&hfp->readMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed"); } #endif free(name); return eslOK; ERROR: #ifdef HMMER_THREADS if (hfp->syncRead) { if (pthread_mutex_unlock (&hfp->readMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed"); } #endif if (name != NULL) free(name); return status; } /*----------- end, reading optimized profiles -------------------*/ /***************************************************************** * 3. Utility routines *****************************************************************/ /* Function: p7_oprofile_CreateBlock() * Synopsis: Create a new block of empty . * * Purpose: Creates a block of empty profile objects. * * Returns: a pointer to the new . Caller frees this * with . * * Throws: if allocation fails. */ P7_OM_BLOCK * p7_oprofile_CreateBlock(int count) { int i = 0; P7_OM_BLOCK *block = NULL; int status = eslOK; ESL_ALLOC(block, sizeof(*block)); block->count = 0; block->listSize = 0; block->list = NULL; ESL_ALLOC(block->list, sizeof(P7_OPROFILE *) * count); block->listSize = count; for (i = 0; i < count; ++i) { block->list[i] = NULL; } return block; ERROR: if (block != NULL) { if (block->list != NULL) free(block->list); free(block); } return NULL; } /* Function: p7_oprofile_DestroyBlock() * Synopsis: Frees an . * * Purpose: Free a Create()'d block of profiles. */ void p7_oprofile_DestroyBlock(P7_OM_BLOCK *block) { int i; if (block == NULL) return; if (block->list != NULL) { for (i = 0; i < block->listSize; ++i) { if (block->list[i] != NULL) p7_oprofile_Destroy(block->list[i]); } free(block->list); } free(block); return; } /* Function: p7_oprofile_Position() * Synopsis: Reposition an open hmm file to an offset. * * Purpose: Reposition an open to offset . * would usually be the first byte of a * desired hmm record. * * Returns: on success; * if no data can be read from this position. * * Throws: if the is not positionable. * if no msv profile opened. * if the fseeko() call fails. */ int p7_oprofile_Position(P7_HMMFILE *hfp, off_t offset) { if (hfp->ffp == NULL) ESL_EXCEPTION(eslEFORMAT, hfp->errbuf, "no MSV profile file; hmmpress probably wasn't run"); if (hfp->do_stdin) ESL_EXCEPTION(eslEINVAL, "can't Position() in standard input"); if (hfp->do_gzip) ESL_EXCEPTION(eslEINVAL, "can't Position() in a gzipped file"); if (offset < 0) ESL_EXCEPTION(eslEINVAL, "bad offset"); if (fseeko(hfp->ffp, offset, SEEK_SET) != 0) ESL_EXCEPTION(eslESYS, "fseeko() failed"); return eslOK; } /*-------------------- end, utility routines ---------------------*/ /***************************************************************** * 4. Benchmark driver. *****************************************************************/ #ifdef p7IO_BENCHMARK /* gcc -g -Wall -o benchmark-io -I.. -L.. -I../../easel -L../../easel -Dp7IO_BENCHMARK io.c -lhmmer -leasel -lm icc -O3 -static -o benchmark-io -I.. -L.. -I../../easel -L../../easel -Dp7IO_BENCHMARK io.c -lhmmer -leasel -lm ./benchmark-io Pfam.msv */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for profile input"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_ALPHABET *abc = NULL; char *msvfile = esl_opt_GetArg(go, 1); FILE *msvfp = NULL; P7_OPROFILE *om = NULL; int nmodel = 0; uint64_t totM = 0; int status; esl_stopwatch_Start(w); if ((msvfp = fopen(msvfile, "r")) == NULL) p7_Fail("Failed to open MSV file %s for reading.\n", msvfile); while ((status = p7_oprofile_ReadMSV(msvfp, &abc, NULL, &om)) == eslOK) { nmodel++; totM += om->M; p7_oprofile_Destroy(om); } if (status == eslEFORMAT) p7_Fail("bad file format in profile file %s", msvfile); else if (status == eslEINCOMPAT) p7_Fail("profile file %s contains different alphabets", msvfile); else if (status != eslEOF) p7_Fail("Unexpected error in reading profiles from %s", msvfile); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# number of models: %d\n", nmodel); printf("# total M: %" PRId64 "\n", totM); fclose(msvfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*IO_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 5. Unit tests. *****************************************************************/ #ifdef p7IO_TESTDRIVE static void utest_ReadWrite(P7_HMM *hmm, P7_OPROFILE *om) { char *msg = "oprofile read/write unit test failure"; ESL_ALPHABET *abc = NULL; P7_OPROFILE *om2 = NULL; char tmpfile[16] = "esltmpXXXXXX"; char *mfile = NULL; char *ffile = NULL; char *pfile = NULL; char *ssifile = NULL; FILE *fp = NULL; FILE *mfp = NULL; FILE *ffp = NULL; FILE *pfp = NULL; ESL_NEWSSI *nssi = NULL; P7_HMMFILE *hfp = NULL; uint16_t fh = 0; float tolerance = 0.001; char errbuf[eslERRBUFSIZE]; /* 1. A mini version of hmmpress: save the test HMM to a file along with its associated .h3{mfpi} files */ if ( esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg); if ( esl_sprintf(&mfile, "%s.h3m", tmpfile) != eslOK) esl_fatal(msg); if ( esl_sprintf(&ffile, "%s.h3f", tmpfile) != eslOK) esl_fatal(msg); if ( esl_sprintf(&pfile, "%s.h3p", tmpfile) != eslOK) esl_fatal(msg); if ( esl_sprintf(&ssifile, "%s.h3i", tmpfile) != eslOK) esl_fatal(msg); if ( esl_newssi_Open(ssifile, TRUE, &nssi) != eslOK) esl_fatal(msg); if (( mfp = fopen(mfile, "wb")) == NULL) esl_fatal(msg); if (( ffp = fopen(ffile, "wb")) == NULL) esl_fatal(msg); if (( pfp = fopen(pfile, "wb")) == NULL) esl_fatal(msg); /* the disk offsets are all 0 by construction, if there's only one * HMM in the file - but don't want to forget them, if we change the * unit test in the future to be multi HMM */ if ((om->offs[p7_MOFFSET] = ftello(mfp)) == -1) esl_fatal(msg); if ((om->offs[p7_FOFFSET] = ftello(ffp)) == -1) esl_fatal(msg); if ((om->offs[p7_POFFSET] = ftello(pfp)) == -1) esl_fatal(msg); if ( p7_hmmfile_WriteASCII(fp, -1, hmm) != eslOK) esl_fatal(msg); if ( p7_hmmfile_WriteBinary(mfp, -1, hmm) != eslOK) esl_fatal(msg); if ( p7_oprofile_Write(ffp, pfp, om) != eslOK) esl_fatal(msg); if ( esl_newssi_AddFile(nssi, tmpfile, 0, &fh) != eslOK) esl_fatal(msg); if ( esl_newssi_AddKey (nssi, hmm->name, fh, om->offs[p7_MOFFSET], 0, 0) != eslOK) esl_fatal(msg); if ( esl_newssi_Write(nssi) != eslOK) esl_fatal(msg); fclose(fp); fclose(mfp); fclose(ffp); fclose(pfp); esl_newssi_Close(nssi); /* 2. read the optimized profile back in */ if ( p7_hmmfile_OpenE(tmpfile, NULL, &hfp, NULL) != eslOK) esl_fatal(msg); if ( p7_oprofile_ReadMSV(hfp, &abc, &om2) != eslOK) esl_fatal(msg); if ( p7_oprofile_ReadRest(hfp, om2) != eslOK) esl_fatal(msg); /* 3. it should be identical to the original */ if ( p7_oprofile_Compare(om, om2, tolerance, errbuf) != eslOK) esl_fatal("%s\n%s", msg, errbuf); p7_oprofile_Destroy(om2); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); remove(ssifile); remove(ffile); remove(pfile); remove(mfile); remove(tmpfile); free(ssifile); free(mfile); free(ffile); free(pfile); } #endif /*p7IO_TESTDRIVE*/ /*------------------ end, unit tests ----------------------------*/ /***************************************************************** * 6. Test driver *****************************************************************/ #ifdef p7IO_TESTDRIVE /* gcc -g -Wall -maltivec -std=gnu99 -o io_utest -I.. -L.. -I../../easel -L../../easel -Dp7IO_TESTDRIVE io.c -lhmmer -leasel -lm ./io_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "hmmer.h" #include "impl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-M", eslARG_INT, "45", NULL, NULL, NULL, NULL, NULL, "size of random model to sample", 0 }, { "-L", eslARG_INT, "45", NULL, NULL, NULL, NULL, NULL, "configure model for length ", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for VMX Forward, Backward implementations"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; P7_HMM *hmm = NULL; P7_OPROFILE *om = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); /* Sample a random HMM and optimized profile, in amino acid alphabet. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (( p7_oprofile_Sample(r, abc, bg, M, L, &hmm, NULL, &om)) != eslOK) esl_fatal("failed to sample HMM and profile"); /* unit test(s) */ utest_ReadWrite(hmm, om); p7_oprofile_Destroy(om); p7_hmm_Destroy(hmm); p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return eslOK; } #endif /*p7IO_TESTDRIVE*/ /*------------------- end, test driver --------------------------*/ /***************************************************************** * 7. Example. *****************************************************************/ #ifdef p7IO_EXAMPLE /* gcc -g -Wall -Dp7IO_EXAMPLE -I.. -I../../easel -L.. -L../../easel -o io_example io.c -lhmmer -leasel -lm * ./io_example */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "verbose: print model info as they're read", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of writing MSV profile part"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_ALPHABET *abc = NULL; char *hmmfile = esl_opt_GetArg(go, 1); P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; char *fname = NULL; char *pname = NULL; FILE *ffp = NULL; FILE *pfp = NULL; int nmodel = 0; uint64_t totM = 0; int status; char errbuf[eslERRBUFSIZE]; status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); esl_sprintf(&fname, "%s.h3f", hmmfile); esl_sprintf(&pname, "%s.h3f", hmmfile); if ((ffp = fopen(fname, "wb")) == NULL) p7_Fail("failed to open %s\n", fname); if ((pfp = fopen(pname, "wb")) == NULL) p7_Fail("failed to open %s\n", pname); free(fname); free(pname); while ((status = p7_hmmfile_Read(hfp, &abc, &hmm)) == eslOK) { if (nmodel == 0) { /* first time initialization, now that alphabet known */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, 400); } if (esl_opt_GetBoolean(go, "-v")) printf("%s\n", hmm->name); nmodel++; totM += hmm->M; gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 400, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_Write(ffp, pfp, om); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); p7_hmm_Destroy(hmm); } if (status == eslEFORMAT) p7_Fail("bad file format in HMM file %s", hmmfile); else if (status == eslEINCOMPAT) p7_Fail("HMM file %s contains different alphabets", hmmfile); else if (status != eslEOF) p7_Fail("Unexpected error in reading HMMs from %s", hmmfile); fclose(ffp); fclose(pfp); p7_bg_Destroy(bg); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*IO_EXAMPLE*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/impl_vmx/io.c $ * SVN $Id: io.c 3960 2012-03-22 21:42:50Z wheelert $ *****************************************************************/ hmmer-3.1b2/src/impl_vmx/p7_omx.c0000664361611702660230000005356712473612614016310 0ustar wheelerteddy/* VMX implementation of an optimized profile structure. * * Contents: * 1. The P7_OMX structure: a dynamic programming matrix * 2. Debugging dumps of P7_OMX structures * 3. Copyright and license information * * See also: * p7_omx.ai - figure illustrating the layout of a P7_OMX. * * SRE, Sun Nov 25 11:26:48 2007 [Casa de Gatos] * SVN $Id: p7_omx.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include #include #include #ifndef __APPLE_ALTIVEC__ #include #endif #include "easel.h" #include "esl_alphabet.h" #include "esl_vectorops.h" #include "esl_vmx.h" #include "hmmer.h" #include "impl_vmx.h" /***************************************************************** * 1. The P7_OMX structure: a dynamic programming matrix *****************************************************************/ /* Function: p7_omx_Create() * Synopsis: Create an optimized dynamic programming matrix. * Incept: SRE, Tue Nov 27 08:48:20 2007 [Janelia] * * Purpose: Allocates a reusable, resizeable for models up to * size and target sequences up to length * , for use by any of the various optimized * DP routines. * * To allocate the very memory-efficient one-row matrix * used by *Filter() and *Score() functions that only * calculate scores, , , and * . * * To allocate the reasonably memory-efficient linear * arrays used by *Parser() functions that only keep * special (X) state scores, , , * and . * * To allocate a complete matrix suitable for functions * that need the whole DP matrix for traceback, sampling, * posterior decoding, or reestimation, and * . * * Returns: a pointer to the new . * * Throws: on allocation failure. */ P7_OMX * p7_omx_Create(int allocM, int allocL, int allocXL) { P7_OMX *ox = NULL; int i; int status; ESL_ALLOC(ox, sizeof(P7_OMX)); ox->dp_mem = NULL; ox->dpb = NULL; ox->dpw = NULL; ox->dpf = NULL; ox->xmx = NULL; ox->x_mem = NULL; /* DP matrix will be allocated for allocL+1 rows 0,1..L; allocQ4*p7X_NSCELLS columns */ ox->allocR = allocL+1; ox->validR = ox->allocR; ox->allocQ4 = p7O_NQF(allocM); ox->allocQ8 = p7O_NQW(allocM); ox->allocQ16 = p7O_NQB(allocM); ox->ncells = ox->allocR * ox->allocQ4 * 4; /* # of DP cells allocated, where 1 cell contains MDI */ /* floats always dominate; +15 for alignment */ ESL_ALLOC(ox->dp_mem, sizeof(vector float) * ox->allocR * ox->allocQ4 * p7X_NSCELLS + 15); ESL_ALLOC(ox->dpb, sizeof(vector unsigned char *) * ox->allocR); ESL_ALLOC(ox->dpw, sizeof(vector signed short *) * ox->allocR); ESL_ALLOC(ox->dpf, sizeof(vector float *) * ox->allocR); /* DP memory shared by , , */ ox->dpb[0] = (vector unsigned char *) ((unsigned long int) ((char *) ox->dp_mem + 15) & (~0xf)); ox->dpw[0] = (vector signed short *) ox->dpb[0]; ox->dpf[0] = (vector float *) ox->dpb[0]; for (i = 1; i <= allocL; i++) { ox->dpf[i] = ox->dpf[0] + i * ox->allocQ4 * p7X_NSCELLS; ox->dpw[i] = ox->dpw[0] + i * ox->allocQ8 * p7X_NSCELLS; ox->dpb[i] = ox->dpb[0] + i * ox->allocQ16; } ox->allocXR = allocXL+1; ESL_ALLOC(ox->x_mem, sizeof(float) * ox->allocXR * p7X_NXCELLS + 15); ox->xmx = (float *) ((unsigned long int) ((char *) ox->x_mem + 15) & (~0xf)); ox->M = 0; ox->L = 0; ox->totscale = 0.0; ox->has_own_scales = TRUE; /* most matrices are Forward, control their own scale factors */ #ifdef p7_DEBUGGING ox->debugging = FALSE; ox->dfp = NULL; #endif return ox; ERROR: p7_omx_Destroy(ox); return NULL; } /* Function: p7_omx_GrowTo() * Synopsis: Assure that a DP matrix is big enough. * Incept: SRE, Thu Dec 20 09:27:07 2007 [Janelia] * * Purpose: Assures that an optimized DP matrix is allocated for * a model up to in length; if not, reallocate to * make it so. * * Because the optimized matrix is one-row, only the model * length matters; the target sequence length isn't * relevant. * * Returns: on success, and may be reallocated upon * return; any data that may have been in must be * assumed to be invalidated. * * Throws: on allocation failure, and any data that may * have been in must be assumed to be invalidated. */ int p7_omx_GrowTo(P7_OMX *ox, int allocM, int allocL, int allocXL) { void *p; int nqf = p7O_NQF(allocM); /* segment length; total # of striped vectors for uchar */ int nqw = p7O_NQW(allocM); /* segment length; total # of striped vectors for float */ int nqb = p7O_NQB(allocM); /* segment length; total # of striped vectors for float */ size_t ncells = (allocL+1) * nqf * 4; int reset_row_pointers = FALSE; int i; int status; /* If all possible dimensions are already satisfied, the matrix is fine */ if (ox->allocQ4*4 >= allocM && ox->validR > allocL && ox->allocXR >= allocXL+1) return eslOK; /* If the main matrix is too small in cells, reallocate it; * and we'll need to realign/reset the row pointers later. */ if (ncells > ox->ncells) { ESL_RALLOC(ox->dp_mem, p, sizeof(vector float) * (allocL+1) * nqf * p7X_NSCELLS + 15); ox->ncells = ncells; reset_row_pointers = TRUE; } /* If the X beams are too small, reallocate them. */ if (allocXL+1 >= ox->allocXR) { ESL_RALLOC(ox->x_mem, p, sizeof(float) * (allocXL+1) * p7X_NXCELLS + 15); ox->allocXR = allocXL+1; ox->xmx = (float *) ((unsigned long int) ((char *) ox->x_mem + 15) & (~0xf)); } /* If there aren't enough rows, reallocate the row pointers; we'll * realign and reset them later. */ if (allocL >= ox->allocR) { ESL_RALLOC(ox->dpb, p, sizeof(vector unsigned char *) * (allocL+1)); ESL_RALLOC(ox->dpw, p, sizeof(vector signed short * ) * (allocL+1)); ESL_RALLOC(ox->dpf, p, sizeof(vector float *) * (allocL+1)); ox->allocR = allocL+1; reset_row_pointers = TRUE; } /* must we widen the rows? */ if (allocM > ox->allocQ4*4) reset_row_pointers = TRUE; /* must we set some more valid row pointers? */ if (allocL >= ox->validR) reset_row_pointers = TRUE; /* now reset the row pointers, if needed */ if (reset_row_pointers) { ox->dpb[0] = (vector unsigned char *) ((unsigned long int) ((char *) ox->dp_mem + 15) & (~0xf)); ox->dpw[0] = (vector signed short *) ox->dpb[0]; ox->dpf[0] = (vector float *) ox->dpb[0]; ox->validR = ESL_MIN( ox->ncells / (nqf * 4), ox->allocR); for (i = 1; i < ox->validR; i++) { ox->dpb[i] = ox->dpb[0] + i * nqb; ox->dpw[i] = ox->dpw[0] + i * nqw * p7X_NSCELLS; ox->dpf[i] = ox->dpf[0] + i * nqf * p7X_NSCELLS; } ox->allocQ4 = nqf; ox->allocQ8 = nqw; ox->allocQ16 = nqb; } ox->M = 0; ox->L = 0; return eslOK; ERROR: return status; } /* Function: p7_omx_FDeconvert() * Synopsis: Convert an optimized DP matrix to generic one. * Incept: SRE, Tue Aug 19 17:58:13 2008 [Janelia] * * Purpose: Convert the 32-bit float values in optimized DP matrix * to a generic one . Caller provides with sufficient * space to hold the M> by L> matrix. * * This function is used to gain access to the * somewhat more powerful debugging and display * tools available for generic DP matrices. */ int p7_omx_FDeconvert(P7_OMX *ox, P7_GMX *gx) { int Q = p7O_NQF(ox->M); int i, q, r, k; union { vector float v; float p[4]; } u; float **dp = gx->dp; float *xmx = gx->xmx; for (i = 0; i <= ox->L; i++) { MMX(i,0) = DMX(i,0) = IMX(i,0) = -eslINFINITY; for (q = 0; q < Q; q++) { u.v = MMO(ox->dpf[i],q); for (r = 0; r < 4; r++) { k = (Q*r)+q+1; if (k <= ox->M) MMX(i, (Q*r)+q+1) = u.p[r]; } u.v = DMO(ox->dpf[i],q); for (r = 0; r < 4; r++) { k = (Q*r)+q+1; if (k <= ox->M) DMX(i, (Q*r)+q+1) = u.p[r]; } u.v = IMO(ox->dpf[i],q); for (r = 0; r < 4; r++) { k = (Q*r)+q+1; if (k <= ox->M) IMX(i, (Q*r)+q+1) = u.p[r]; } } XMX(i,p7G_E) = ox->xmx[i*p7X_NXCELLS+p7X_E]; XMX(i,p7G_N) = ox->xmx[i*p7X_NXCELLS+p7X_N]; XMX(i,p7G_J) = ox->xmx[i*p7X_NXCELLS+p7X_J]; XMX(i,p7G_B) = ox->xmx[i*p7X_NXCELLS+p7X_B]; XMX(i,p7G_C) = ox->xmx[i*p7X_NXCELLS+p7X_C]; } gx->L = ox->L; gx->M = ox->M; return eslOK; } /* Function: p7_omx_Reuse() * Synopsis: Recycle an optimized DP matrix. * Incept: SRE, Wed Oct 22 11:31:00 2008 [Janelia] * * Purpose: Recycles for re-use. * * Returns: on success. */ int p7_omx_Reuse(P7_OMX *ox) { ox->M = 0; ox->L = 0; ox->totscale = 0.0; ox->has_own_scales = TRUE; /* default assumes a Forward matrix, with its own scale factors */ #ifdef p7_DEBUGGING ox->debugging = FALSE; ox->dfp = NULL; #endif return eslOK; } /* Function: p7_omx_Destroy() * Synopsis: Frees an optimized DP matrix. * Incept: SRE, Tue Nov 27 09:11:42 2007 [Janelia] * * Purpose: Frees optimized DP matrix . * * Returns: (void) */ void p7_omx_Destroy(P7_OMX *ox) { if (ox == NULL) return; if (ox->x_mem != NULL) free(ox->x_mem); if (ox->dp_mem != NULL) free(ox->dp_mem); if (ox->dpf != NULL) free(ox->dpf); if (ox->dpw != NULL) free(ox->dpw); if (ox->dpb != NULL) free(ox->dpb); free(ox); return; } /*------------------- end, P7_OMX structure ---------------------*/ /***************************************************************** * 2. Debugging dumps of P7_OMX structures *****************************************************************/ /* Because the P7_OMX may be a one-row DP matrix, we can't just run a * DP calculation and then dump a whole matrix; we have to dump each * row one at a time, as the DP calculation is progressing. Thus we * need to call the dump from *within* some DP routines. We'd rather not * have anything like this in production code - not even a flag check. * So, we use a compile-time debugging idiom, with conditionally * compiled debugging code that's added to the DP routines to check a * debugging flag in the P7_OMX structure; if it's up, we dump a row. * * Therefore, the externally exposed API call is p7_omx_SetDumpMode(), * rather than the dumping routine itself; and all p7_omx_SetDumpMode() * does is sets the debugging flag in . */ /* Function: p7_omx_SetDumpMode() * Synopsis: Set an optimized DP matrix to be dumped for debugging. * Incept: SRE, Thu Dec 13 10:24:38 2007 [Janelia] * * Purpose: Sets debugging mode for DP matrix . If * flag is , then whenever a dynamic programming * calculation is run, dump DP matrix to stream * for diagnostics. * * When the dump mode is on, the DP routine itself actually * does the dumping, because it has to dump after every row * is calculated. (We're doing an optimized one-row * calculation.) * * If the code has not been compiled with the * flag up, this function is a no-op. * * Args: fp - output stream for diagnostics (stdout, perhaps) * ox - DP matrix to set debugging mode * truefalse - TRUE to set dumping, FALSE to unset * * Returns: on success. * * Throws: (no abnormal error conditions) * * Xref: J2/62. */ int p7_omx_SetDumpMode(FILE *fp, P7_OMX *ox, int truefalse) { #if p7_DEBUGGING ox->debugging = truefalse; ox->dfp = fp; #endif return eslOK; } /* Function: p7_omx_DumpMFRow() * Synopsis: Dump one row from MSV uchar version of a DP matrix. * Incept: SRE, Wed Jul 30 16:47:26 2008 [Janelia] * * Purpose: Dump current row of uchar part of DP matrix for diagnostics, * and include the values of specials , etc. The index for * the current row is used as a row label. This routine has to be * specialized for the layout of the MSVFilter() row, because it's * all match scores dp[0..q..Q-1], rather than triplets of M,D,I. * * If is 0, print a header first too. * * The output format is coordinated with to * facilitate comparison to a known answer. * * Returns: on success. * * Throws: on allocation failure. */ int p7_omx_DumpMFRow(P7_OMX *ox, int rowi, uint8_t xE, uint8_t xN, uint8_t xJ, uint8_t xB, uint8_t xC) { vector unsigned char *dp = ox->dpb[0]; int M = ox->M; int Q = p7O_NQB(M); uint8_t *v = NULL; /* array of unstriped scores */ int q,z,k; union { vector unsigned char v; uint8_t i[16]; } tmp; int status; ESL_ALLOC(v, sizeof(unsigned char) * ((Q*16)+1)); v[0] = 0; /* Header (if we're on the 0th row) */ if (rowi == 0) { fprintf(ox->dfp, " "); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%3d ", k); fprintf(ox->dfp, "%3s %3s %3s %3s %3s\n", "E", "N", "J", "B", "C"); fprintf(ox->dfp, " "); for (k = 0; k <= M+5; k++) fprintf(ox->dfp, "%3s ", "---"); fprintf(ox->dfp, "\n"); } /* Unpack and unstripe, then print M's. */ for (q = 0; q < Q; q++) { tmp.v = dp[q]; for (z = 0; z < 16; z++) v[q+Q*z+1] = tmp.i[z]; } fprintf(ox->dfp, "%4d M ", rowi); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%3d ", v[k]); /* The specials */ fprintf(ox->dfp, "%3d %3d %3d %3d %3d\n", xE, xN, xJ, xB, xC); /* I's are all 0's; print just to facilitate comparison. */ fprintf(ox->dfp, "%4d I ", rowi); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%3d ", 0); fprintf(ox->dfp, "\n"); /* D's are all 0's too */ fprintf(ox->dfp, "%4d D ", rowi); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%3d ", 0); fprintf(ox->dfp, "\n\n"); free(v); return eslOK; ERROR: free(v); return status; } /* Function: p7_omx_DumpVFRow() * Synopsis: Dump current row of ViterbiFilter (int16) part of matrix. * Incept: SRE, Wed Jul 30 16:43:21 2008 [Janelia] * * Purpose: Dump current row of ViterbiFilter (int16) part of DP * matrix for diagnostics, and include the values of * specials , etc. The index for the current row * is used as a row label. * * If is 0, print a header first too. * * The output format is coordinated with to * facilitate comparison to a known answer. * * Returns: on success. * * Throws: on allocation failure. */ int p7_omx_DumpVFRow(P7_OMX *ox, int rowi, int16_t xE, int16_t xN, int16_t xJ, int16_t xB, int16_t xC) { vector signed short *dp = ox->dpw[0]; /* must set before using {MDI}MX macros */ int M = ox->M; int Q = p7O_NQW(M); int16_t *v = NULL; /* array of unstriped, uninterleaved scores */ int q,z,k; union { vector signed short v; int16_t i[8]; } tmp; int status; ESL_ALLOC(v, sizeof(int16_t) * ((Q*8)+1)); v[0] = 0; /* Header (if we're on the 0th row) */ if (rowi == 0) { fprintf(ox->dfp, " "); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%6d ", k); fprintf(ox->dfp, "%6s %6s %6s %6s %6s\n", "E", "N", "J", "B", "C"); fprintf(ox->dfp, " "); for (k = 0; k <= M+5; k++) fprintf(ox->dfp, "%6s ", "------"); fprintf(ox->dfp, "\n"); } /* Unpack and unstripe, then print M's. */ for (q = 0; q < Q; q++) { tmp.v = MMXo(q); for (z = 0; z < 8; z++) v[q+Q*z+1] = tmp.i[z]; } fprintf(ox->dfp, "%4d M ", rowi); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%6d ", v[k]); /* The specials */ fprintf(ox->dfp, "%6d %6d %6d %6d %6d\n", xE, xN, xJ, xB, xC); /* Unpack and unstripe, then print I's. */ for (q = 0; q < Q; q++) { tmp.v = IMXo(q); for (z = 0; z < 8; z++) v[q+Q*z+1] = tmp.i[z]; } fprintf(ox->dfp, "%4d I ", rowi); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%6d ", v[k]); fprintf(ox->dfp, "\n"); /* Unpack, unstripe, then print D's. */ for (q = 0; q < Q; q++) { tmp.v = DMXo(q); for (z = 0; z < 8; z++) v[q+Q*z+1] = tmp.i[z]; } fprintf(ox->dfp, "%4d D ", rowi); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%6d ", v[k]); fprintf(ox->dfp, "\n\n"); free(v); return eslOK; ERROR: free(v); return status; } /* Function: p7_omx_DumpFBRow() * Synopsis: Dump one row from float part of a DP matrix. * Incept: SRE, Wed Jul 30 16:45:16 2008 [Janelia] * * Purpose: Dump current row of Forward/Backward (float) part of DP * matrix for diagnostics, and include the values of * specials , etc. The index for the current row * is used as a row label. * * The output format of the floats is controlled by * , ; 8,5 is good for pspace, 5,2 is * fine for lspace. * * If is 0, print a header first too. * * If is TRUE, then scores are printed as log(score); this is * useful for comparing DP with pspace scores with other DP matrices * (like generic P7_GMX ones) that use log-odds scores. * * The output format is coordinated with to * facilitate comparison to a known answer. * * Returns: on success. * * Throws: on allocation failure. */ int p7_omx_DumpFBRow(P7_OMX *ox, int logify, int rowi, int width, int precision, float xE, float xN, float xJ, float xB, float xC) { vector float *dp; int M = ox->M; int Q = p7O_NQF(M); float *v = NULL; /* array of uninterleaved, unstriped scores */ int q,z,k; union { vector float v; float x[4]; } tmp; int status; dp = (ox->allocR == 1) ? ox->dpf[0] : ox->dpf[rowi]; /* must set before using {MDI}MX macros */ ESL_ALLOC(v, sizeof(float) * ((Q*4)+1)); v[0] = 0.; if (rowi == 0) { fprintf(ox->dfp, " "); for (k = 0; k <= M; k++) fprintf(ox->dfp, "%*d ", width, k); fprintf(ox->dfp, "%*s %*s %*s %*s %*s\n", width, "E", width, "N", width, "J", width, "B", width, "C"); fprintf(ox->dfp, " "); for (k = 0; k <= M+5; k++) fprintf(ox->dfp, "%*s ", width, "--------"); fprintf(ox->dfp, "\n"); } /* Unpack, unstripe, then print M's. */ for (q = 0; q < Q; q++) { tmp.v = MMXo(q); for (z = 0; z < 4; z++) v[q+Q*z+1] = tmp.x[z]; } fprintf(ox->dfp, "%3d M ", rowi); if (logify) for (k = 0; k <= M; k++) fprintf(ox->dfp, "%*.*f ", width, precision, v[k] == 0. ? -eslINFINITY : log(v[k])); else for (k = 0; k <= M; k++) fprintf(ox->dfp, "%*.*f ", width, precision, v[k]); /* The specials */ if (logify) fprintf(ox->dfp, "%*.*f %*.*f %*.*f %*.*f %*.*f\n", width, precision, xE == 0. ? -eslINFINITY : log(xE), width, precision, xN == 0. ? -eslINFINITY : log(xN), width, precision, xJ == 0. ? -eslINFINITY : log(xJ), width, precision, xB == 0. ? -eslINFINITY : log(xB), width, precision, xC == 0. ? -eslINFINITY : log(xC)); else fprintf(ox->dfp, "%*.*f %*.*f %*.*f %*.*f %*.*f\n", width, precision, xE, width, precision, xN, width, precision, xJ, width, precision, xB, width, precision, xC); /* Unpack, unstripe, then print I's. */ for (q = 0; q < Q; q++) { tmp.v = IMXo(q); for (z = 0; z < 4; z++) v[q+Q*z+1] = tmp.x[z]; } fprintf(ox->dfp, "%3d I ", rowi); if (logify) for (k = 0; k <= M; k++) fprintf(ox->dfp, "%*.*f ", width, precision, v[k] == 0. ? -eslINFINITY : log(v[k])); else for (k = 0; k <= M; k++) fprintf(ox->dfp, "%*.*f ", width, precision, v[k]); fprintf(ox->dfp, "\n"); /* Unpack, unstripe, then print D's. */ for (q = 0; q < Q; q++) { tmp.v = DMXo(q); for (z = 0; z < 4; z++) v[q+Q*z+1] = tmp.x[z]; } fprintf(ox->dfp, "%3d D ", rowi); if (logify) for (k = 0; k <= M; k++) fprintf(ox->dfp, "%*.*f ", width, precision, v[k] == 0. ? -eslINFINITY : log(v[k])); else for (k = 0; k <= M; k++) fprintf(ox->dfp, "%*.*f ", width, precision, v[k]); fprintf(ox->dfp, "\n\n"); free(v); return eslOK; ERROR: free(v); return status; } /*------------- end, debugging dumps of P7_OMX ------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ /*---------------------- end, test driver -----------------------*/ /***************************************************************** * 13. Example *****************************************************************/ /*------------------------ example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/p7_hmm.c0000664361611702660230000014132112473612614014415 0ustar wheelerteddy/* The Plan7 core HMM data structure. * * Contents: * 1. The P7_HMM object: allocation, initialization, destruction. * 2. Convenience routines for setting fields in an HMM. * 3. Renormalization and rescaling counts in core HMMs. * 4. Debugging and development code. * 5. Other routines in the API. * 6. Unit tests. * 7. Test driver. * 8. Copyright and license. * */ #include "p7_config.h" #include #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_vectorops.h" #include "esl_random.h" #include "esl_dirichlet.h" #include "hmmer.h" /***************************************************************** *# 1. The P7_HMM object: allocation, initialization, destruction. *****************************************************************/ /* Function: p7_hmm_Create() * Synopsis: Allocate a new . * * Purpose: Allocate a of nodes, for symbol * alphabet , and return a pointer to it. * * The HMM only keeps a copy of the alphabet * pointer. The caller is responsible for providing the * alphabet, keeping it around while the HMM is in use, * and (eventually) free'ing the alphabet when it's * not needed any more. (Basically, just a step removed * from keeping the alphabet as a global.) * * Throws: on allocation failure. */ P7_HMM * p7_hmm_Create(int M, const ESL_ALPHABET *abc) { P7_HMM *hmm = NULL; if ((hmm = p7_hmm_CreateShell()) == NULL) return NULL; p7_hmm_CreateBody(hmm, M, abc); return hmm; } /* Function: p7_hmm_CreateShell() * Synopsis: Allocate the ``shell'' of a . * * Purpose: Allocate the shell of a : everything that * doesn't depend on knowing the number of nodes M. * * HMM input () uses two-step shell/body * allocation because it has to read for a ways from the * HMM file before it reads the model size M or the * alphabet type. * * Returns: a pointer to the new on success. * * Throws: on allocation failure. */ P7_HMM * p7_hmm_CreateShell(void) { P7_HMM *hmm = NULL; int z; int status; ESL_ALLOC(hmm, sizeof(P7_HMM)); hmm->M = 0; hmm->t = NULL; hmm->mat = NULL; hmm->ins = NULL; hmm->name = NULL; hmm->acc = NULL; hmm->desc = NULL; hmm->rf = NULL; hmm->mm = NULL; hmm->consensus = NULL; hmm->cs = NULL; hmm->ca = NULL; hmm->comlog = NULL; hmm->nseq = -1; hmm->eff_nseq = -1.0; hmm->max_length = -1; hmm->ctime = NULL; hmm->map = NULL; hmm->checksum = 0; for (z = 0; z < p7_NCUTOFFS; z++) hmm->cutoff[z] = p7_CUTOFF_UNSET; for (z = 0; z < p7_NEVPARAM; z++) hmm->evparam[z] = p7_EVPARAM_UNSET; for (z = 0; z < p7_MAXABET; z++) hmm->compo[z] = p7_COMPO_UNSET; hmm->offset = 0; hmm->flags = 0; hmm->abc = NULL; return hmm; ERROR: return NULL; } /* Function: p7_hmm_CreateBody() * Synopsis: Allocate the ``body'' of a . * * Purpose: Given an allocated shell , and a now-known number * of nodes and alphabet , allocate * the remainder of it for that many nodes. * * Returns: on success. * * Throws: on allocation failure; in this case, the HMM * is likely corrupted, and the caller should destroy it. */ int p7_hmm_CreateBody(P7_HMM *hmm, int M, const ESL_ALPHABET *abc) { int k; int status; hmm->abc = abc; hmm->M = M; /* level 1 */ ESL_ALLOC(hmm->t, (M+1) * sizeof(float *)); ESL_ALLOC(hmm->mat, (M+1) * sizeof(float *)); ESL_ALLOC(hmm->ins, (M+1) * sizeof(float *)); hmm->t[0] = NULL; hmm->mat[0] = NULL; hmm->ins[0] = NULL; /* level 2 */ ESL_ALLOC(hmm->t[0], (p7H_NTRANSITIONS*(M+1)) * sizeof(float)); ESL_ALLOC(hmm->mat[0], (abc->K*(M+1)) * sizeof(float)); ESL_ALLOC(hmm->ins[0], (abc->K*(M+1)) * sizeof(float)); for (k = 1; k <= M; k++) { hmm->mat[k] = hmm->mat[0] + k * hmm->abc->K; hmm->ins[k] = hmm->ins[0] + k * hmm->abc->K; hmm->t[k] = hmm->t[0] + k * p7H_NTRANSITIONS; } /* Enforce conventions on unused but allocated distributions, so * Compare() tests succeed unless memory was corrupted. */ if ((status = p7_hmm_Zero(hmm)) != eslOK) goto ERROR; hmm->mat[0][0] = 1.0; hmm->t[0][p7H_DM] = 1.0; /* Optional allocation, status flag dependent */ if (hmm->flags & p7H_RF) ESL_ALLOC(hmm->rf, (M+2) * sizeof(char)); if (hmm->flags & p7H_MMASK) ESL_ALLOC(hmm->mm, (M+2) * sizeof(char)); if (hmm->flags & p7H_CONS) ESL_ALLOC(hmm->consensus, (M+2) * sizeof(char)); if (hmm->flags & p7H_CS) ESL_ALLOC(hmm->cs, (M+2) * sizeof(char)); if (hmm->flags & p7H_CA) ESL_ALLOC(hmm->ca, (M+2) * sizeof(char)); if (hmm->flags & p7H_MAP) ESL_ALLOC(hmm->map, (M+1) * sizeof(int)); return eslOK; ERROR: return status; } /* Function: p7_hmm_Destroy() * Synopsis: Free a . * * Purpose: Frees both the shell and body of an . * Works even if the is damaged (incompletely allocated) * or even . * * Note: Remember, leave reference pointers like abc, gm, and * bg alone. These are under the application's control not ours. * * Returns: (void). */ void p7_hmm_Destroy(P7_HMM *hmm) { if (hmm == NULL) return; if (hmm->mat) { if (hmm->mat[0]) free(hmm->mat[0]); free(hmm->mat); } if (hmm->ins) { if (hmm->ins[0]) free(hmm->ins[0]); free(hmm->ins); } if (hmm->t) { if (hmm->t[0]) free(hmm->t[0]); free(hmm->t); } if (hmm->name) free(hmm->name); if (hmm->acc) free(hmm->acc); if (hmm->desc) free(hmm->desc); if (hmm->rf) free(hmm->rf); if (hmm->mm) free(hmm->mm); if (hmm->consensus) free(hmm->consensus); if (hmm->cs) free(hmm->cs); if (hmm->ca) free(hmm->ca); if (hmm->comlog) free(hmm->comlog); if (hmm->ctime) free(hmm->ctime); if (hmm->map) free(hmm->map); free(hmm); return; } /* Function: p7_hmm_CopyParameters() * Synopsis: Copy parameters from one HMM to another. * * Purpose: Copy parameters of to . The HMM must * be allocated by the caller for the same * alphabet and M as . * * Both core and search model parameters are copied. * * No annotation is copied. This is because several * annotation fields are variable-length strings that * require individual allocations. The * function is for cases where we * have to repeatedly reset the parameters of a model - for * example, in entropy weighting. * * Returns: on success. */ int p7_hmm_CopyParameters(const P7_HMM *src, P7_HMM *dest) { int k; for (k = 0; k <= src->M; k++) { esl_vec_FCopy(src->t[k], p7H_NTRANSITIONS, dest->t[k]); esl_vec_FCopy(src->mat[k], src->abc->K, dest->mat[k]); esl_vec_FCopy(src->ins[k], src->abc->K, dest->ins[k]); } return eslOK; } /* Function: p7_hmm_Clone() * Synopsis: Make an exact duplicate of an HMM. * * Purpose: Duplicates an hmm. * * Note: does not duplicate the objects the HMM refers to, * if any (profile, null model, or alphabet); only copies * the reference pointers. * * Returns: a pointer to the duplicate. * * Throws: on allocation failure. */ P7_HMM * p7_hmm_Clone(const P7_HMM *hmm) { int status; P7_HMM *new = NULL; int z; if ((new = p7_hmm_Create(hmm->M, hmm->abc)) == NULL) goto ERROR; p7_hmm_CopyParameters(hmm, new); if ((status = esl_strdup(hmm->name, -1, &(new->name))) != eslOK) goto ERROR; if ((status = esl_strdup(hmm->acc, -1, &(new->acc))) != eslOK) goto ERROR; if ((status = esl_strdup(hmm->desc, -1, &(new->desc))) != eslOK) goto ERROR; if ((hmm->flags & p7H_RF) && (status = esl_strdup(hmm->rf, -1, &(new->rf))) != eslOK) goto ERROR; if ((hmm->flags & p7H_MMASK) && (status = esl_strdup(hmm->mm, -1, &(new->mm))) != eslOK) goto ERROR; if ((hmm->flags & p7H_CONS) && (status = esl_strdup(hmm->consensus, -1, &(new->consensus))) != eslOK) goto ERROR; if ((hmm->flags & p7H_CS) && (status = esl_strdup(hmm->cs, -1, &(new->cs))) != eslOK) goto ERROR; if ((hmm->flags & p7H_CA) && (status = esl_strdup(hmm->ca, -1, &(new->ca))) != eslOK) goto ERROR; if ((hmm->comlog != NULL) && (status = esl_strdup(hmm->comlog, -1, &(new->comlog))) != eslOK) goto ERROR; if ((hmm->ctime != NULL) && (status = esl_strdup(hmm->ctime, -1, &(new->ctime))) != eslOK) goto ERROR; if (hmm->flags & p7H_MAP) { ESL_ALLOC(new->map, sizeof(int) * (hmm->M+1)); esl_vec_ICopy(hmm->map, hmm->M+1, new->map); } new->nseq = hmm->nseq; new->eff_nseq = hmm->eff_nseq; new->max_length = hmm->max_length; new->checksum = hmm->checksum; for (z = 0; z < p7_NEVPARAM; z++) new->evparam[z] = hmm->evparam[z]; for (z = 0; z < p7_NCUTOFFS; z++) new->cutoff[z] = hmm->cutoff[z]; for (z = 0; z < p7_MAXABET; z++) new->compo[z] = hmm->compo[z]; new->offset = hmm->offset; new->flags = hmm->flags; new->abc = hmm->abc; return new; ERROR: if (new != NULL) p7_hmm_Destroy(new); return NULL; } /* Function: p7_hmm_Zero() * Synopsis: Set all parameters to zero (including model composition). * * Purpose: Zeroes all counts/probabilities fields in core model, * including emissions, transitions, and model * composition. * * Returns: on success. */ int p7_hmm_Zero(P7_HMM *hmm) { int k; for (k = 0; k <= hmm->M; k++) { esl_vec_FSet(hmm->t[k], p7H_NTRANSITIONS, 0.); esl_vec_FSet(hmm->mat[k], hmm->abc->K, 0.); esl_vec_FSet(hmm->ins[k], hmm->abc->K, 0.); } esl_vec_FSet(hmm->compo, p7_MAXABET, 0.); return eslOK; } /* Function: p7_hmm_EncodeStatetype() * Synopsis: Convert a state type string to internal code. * * Purpose: Converts state type string case insensitively to * an internal code, and returns the code. For example, * returns . * * If the string isn't recognized, returns . */ char p7_hmm_EncodeStatetype(char *typestring) { if (strcasecmp(typestring, "M") == 0) return p7T_M; else if (strcasecmp(typestring, "D") == 0) return p7T_D; else if (strcasecmp(typestring, "I") == 0) return p7T_I; else if (strcasecmp(typestring, "S") == 0) return p7T_S; else if (strcasecmp(typestring, "N") == 0) return p7T_N; else if (strcasecmp(typestring, "B") == 0) return p7T_B; else if (strcasecmp(typestring, "E") == 0) return p7T_E; else if (strcasecmp(typestring, "C") == 0) return p7T_C; else if (strcasecmp(typestring, "T") == 0) return p7T_T; else if (strcasecmp(typestring, "J") == 0) return p7T_J; else if (strcasecmp(typestring, "X") == 0) return p7T_X; else return p7T_BOGUS; } /* Function: p7_hmm_DecodeStatetype() * Synopsis: Convert an internal state type code to a string. * * Purpose: Returns the state type in text, as a string of length 1 * (2 if you count ). For example, * returns "S". * * Throws: an internal exception if the code doesn't * exist, and returns . */ char * p7_hmm_DecodeStatetype(char st) { switch (st) { case p7T_M: return "M"; case p7T_D: return "D"; case p7T_I: return "I"; case p7T_S: return "S"; case p7T_N: return "N"; case p7T_B: return "B"; case p7T_E: return "E"; case p7T_C: return "C"; case p7T_T: return "T"; case p7T_J: return "J"; case p7T_X: return "X"; default: break; } esl_exception(eslEINVAL, FALSE, __FILE__, __LINE__, "no such statetype code %d", st); return NULL; } /***************************************************************** * 2. Convenience routines for setting fields in an HMM. *****************************************************************/ /* Function: p7_hmm_SetName() * Synopsis: Set or change the name of an HMM. * * Purpose: Set or change the name of a Plan7 HMM to . * Any trailing whitespace (including newline) is chopped off. * * Returns: on success. * * Throws: on allocation error, and original name (if any) * remains. */ int p7_hmm_SetName(P7_HMM *hmm, char *name) { int status; void *tmp; int n; if (name == NULL) { if (hmm->name != NULL) free(hmm->name); hmm->name = NULL; } else { n = strlen(name); ESL_RALLOC(hmm->name, tmp, sizeof(char)*(n+1)); strcpy(hmm->name, name); if ((status = esl_strchop(hmm->name, n)) != eslOK) goto ERROR; } return eslOK; ERROR: return status; } /* Function: p7_hmm_SetAccession() * Synopsis: Set or change the accession of an HMM. * * Purpose: Set or change the accession number of a Plan7 HMM to , * and raise the flag. Trailing whitespace (including newline) * is chopped. * * If is , unset the HMM's accession (if any) and drop * the flag. * * Returns: on success. * * Throws: on allocation error, and original name (if any) * remains. */ int p7_hmm_SetAccession(P7_HMM *hmm, char *acc) { int status; void *tmp; int n; if (acc == NULL) { if (hmm->acc != NULL) free(hmm->acc); hmm->acc = NULL; hmm->flags &= ~p7H_ACC; /* legacy */ } else { n = strlen(acc); ESL_RALLOC(hmm->acc, tmp, sizeof(char)*(n+1)); strcpy(hmm->acc, acc); if ((status = esl_strchop(hmm->acc, n)) != eslOK) goto ERROR; hmm->flags |= p7H_ACC; /* legacy */ } return eslOK; ERROR: return status; } /* Function: p7_hmm_SetDescription() * Synopsis: Set or change the description line of an HMM. * * Purpose: Set or change the description line of a Plan7 HMM. * Trailing whitespace (including newline) is chopped. */ int p7_hmm_SetDescription(P7_HMM *hmm, char *desc) { int status; void *tmp; int n; if (desc == NULL) { if (hmm->desc != NULL) free(hmm->desc); hmm->desc = NULL; hmm->flags &= ~p7H_DESC; /* legacy */ } else { n = strlen(desc); ESL_RALLOC(hmm->desc, tmp, sizeof(char)*(n+1)); strcpy(hmm->desc, desc); if ((status = esl_strchop(hmm->desc, n)) != eslOK) goto ERROR; hmm->flags |= p7H_DESC; /* legacy */ } return eslOK; ERROR: return status; } /* Function: p7_hmm_AppendComlog() * Synopsis: Concatenate and append command line to the command line log. * * Purpose: Concatenate command line options and append as a new line in the * command line log. Command line log is multiline, with each line * ending in newline char, except for last line. * * Returns: on success. * * Throws: on allocation failure. */ int p7_hmm_AppendComlog(P7_HMM *hmm, int argc, char **argv) { int status; void *tmp; int n; int i; /* figure out length of added command line, and (re)allocate comlog */ n = argc-1; /* account for 1 space per arg, except last one */ for (i = 0; i < argc; i++) n += strlen(argv[i]); if (hmm->comlog != NULL) { n += strlen(hmm->comlog) + 1; /* +1 for the \n we're going to add to the old comlog */ ESL_RALLOC(hmm->comlog, tmp, sizeof(char)* (n+1)); strcat(hmm->comlog, "\n"); } else { ESL_ALLOC(hmm->comlog, sizeof(char)* (n+1)); *(hmm->comlog) = '\0'; /* need this to make strcat work */ } for (i = 0; i < argc-1; i++) { strcat(hmm->comlog, argv[i]); strcat(hmm->comlog, " "); } strcat(hmm->comlog, argv[argc-1]); return eslOK; ERROR: return status; } /* Function: p7_hmm_SetCtime() * Synopsis: Timestamp an HMM. * * Purpose: Set the field in a new HMM to the current time. * * Returns: on success. * * Throws: on allocation failure. * if system calls fail to obtain (or format) the time. * * Notes: This function calls , supposedly a part of the * ISO/IEC 9945-1:1996 (POSIX.1) standard, but not ANSI * C99, so we have potential portability problems here. * * A known one: is by default a three-argument * call on Solaris 10 systems. Our autoconf script sets * -D_POSIX_PTHREAD_SEMANTICS on Solaris systems to fix this * issue, requesting Solaris to use a compliant version of * ctime_r(). * * We might want to use strftime() instead; that's what * POSIX 2008 recommends; but we'd still need localtime_r() or * its equivalent, and that has its own portability issues. * * Note to porters: it really doesn't matter what this * timestamp is. HMMER doesn't look at it, it's for human * notetaking. If you have to, set it to an empty string. * * TODO: Oi. Time is complicated. Easel should give us an * easy and portable call to generate time stamps like this; * an esl_time module, perhaps? */ int p7_hmm_SetCtime(P7_HMM *hmm) { char *s = NULL; time_t date; int status; ESL_ALLOC(s, 32); if ((date = time(NULL)) == -1) { status = eslESYS; goto ERROR; } if (ctime_r(&date, s) == NULL) { status = eslESYS; goto ERROR; } if ((status = esl_strchop(s, -1)) != eslOK) { goto ERROR; } if (hmm->ctime != NULL) free(hmm->ctime); hmm->ctime = s; return eslOK; ERROR: if (s) free(s); return status; } /* Function: p7_hmm_SetComposition() * Synopsis: Calculate and set model composition, compo[]> * * Purpose: Calculates the mean residue composition emitted by * model , and set compo[]> to it. * * Returns: on success. * * Throws: on allocation failure, in which case * values in compo[]> are unchanged. * * Note: In principle, you should be able to normalize * hmm->compo[] by dividing thru by the sum of * mocc[] and iocc[] vectors, and that's what the * 3.0 release version did. This allowed p7_hmm_Validate() * to check compo[] for summation to 1.0, as a smoke * check for bugs here. The problem with that * is numerical roundoff error accumulation, when * hmm->M is large [bug #h84]. To fix #h84, we * simply renormalize compo[], rather than the fancier * previous version. This avoids error accumulation, * but it also guarantees that compo[] will trivially * pass the hmm_Validation() step; it's not really * validating the SetComposition() calculation at all. * (For description of #h84, error analysis, and the fix, * xref J7/7; SRE, Tue Nov 2 14:32:29 2010) */ int p7_hmm_SetComposition(P7_HMM *hmm) { float *mocc = NULL; float *iocc = NULL; int k; int status; ESL_ALLOC(mocc, sizeof(float) * (hmm->M+1)); ESL_ALLOC(iocc, sizeof(float) * (hmm->M+1)); p7_hmm_CalculateOccupancy(hmm, mocc, iocc); esl_vec_FSet(hmm->compo, hmm->abc->K, 0.0); esl_vec_FAddScaled(hmm->compo, hmm->ins[0], iocc[0], hmm->abc->K); for (k = 1; k <= hmm->M; k++) { esl_vec_FAddScaled(hmm->compo, hmm->mat[k], mocc[k], hmm->abc->K); esl_vec_FAddScaled(hmm->compo, hmm->ins[k], iocc[k], hmm->abc->K); } esl_vec_FNorm(hmm->compo, hmm->abc->K); hmm->flags |= p7H_COMPO; free(mocc); free(iocc); return eslOK; ERROR: if (mocc != NULL) free(mocc); if (iocc != NULL) free(iocc); return status; } /* Function: p7_hmm_SetConsensus() * Synopsis: Set the consensus residue line of the HMM. * * Purpose: Sets the consensus annotation line of the model . * * Behavior differs, depending on whether this is a * single-sequence model (i.e. phmmer) or a standard * model of a multiple sequence alignment. If is * non- this is a single-sequence model and is * the digital sequence it was built from. If is * this is a standard multiple-sequence model. * * In a standard model, the most likely (highest emission * probability) residue is the consensus at each position. * In a single-sequence model, the consensus is the * sequence itself. * * In both cases, if the emission probability is $\geq$ * certain threshold, the residue is upper cased. The * threshold is arbitrarily set to 0.9 for nucleic acid * alphabets (, ) and 0.5 for amino acid * alphabets () and all other alphabets. * * The special handling of single-sequence models avoids * a counterintuitive case where the most likely residue is * not the original residue. For example, under the * BLOSUM62 matrix, given an observed M, the most likely * aligned residue is an L, not an M. (Because L is so much * more likely a priori than M.) * * Args: hmm - model with valid probability parameters mat[1..M][x] * sq - NULL if a standard model; * or the query sequence for a single-sequence model. * * Returns: on success. The flag on the is raised * if it wasn't already. The consensus> line is set. * * Throws: on allocation error. The is dropped, even * if it was up to begin with, and the consensus> is , * even if we had one to begin with. * * Xref: SRE:J8/26. */ int p7_hmm_SetConsensus(P7_HMM *hmm, ESL_SQ *sq) { int k, x; float mthresh; int status; /* allocation, if needed */ if (! hmm->consensus) ESL_ALLOC(hmm->consensus, sizeof(char) * (hmm->M+2)); /* set our arbitrary threshold for upper/lower casing */ if (hmm->abc->type == eslAMINO) mthresh = 0.5; else if (hmm->abc->type == eslDNA) mthresh = 0.9; else if (hmm->abc->type == eslRNA) mthresh = 0.9; else mthresh = 0.5; hmm->consensus[0] = ' '; for (k = 1; k <= hmm->M; k++) { x = (sq ? sq->dsq[k] : esl_vec_FArgMax(hmm->mat[k], hmm->abc->K)); hmm->consensus[k] = ((hmm->mat[k][x] >= mthresh) ? toupper(hmm->abc->sym[x]) : tolower(hmm->abc->sym[x])); } hmm->consensus[hmm->M+1] = '\0'; hmm->flags |= p7H_CONS; return eslOK; ERROR: if (hmm->consensus) free(hmm->consensus); hmm->consensus = NULL; hmm->flags &= (~p7H_CONS); return status; } /*---------------- end, internal-setting routines ---------------*/ /***************************************************************** * 3. Renormalization and rescaling counts in core HMMs. *****************************************************************/ /* Function: p7_hmm_Scale() * Synopsis: In a model containing counts, rescale counts by a factor. * * Purpose: Given a counts-based model , scale core * by a multiplicative factor of , where is * often for absolute sequence weighting. * Only affects core probability model emissions and * transitions (, , and ). * * Args: hmm - counts based HMM. * scale - scaling factor (e.g. eff_nseq/nseq); 1.0=no scaling. * * Returns: on success. */ int p7_hmm_Scale(P7_HMM *hmm, double scale) { int k; for (k = 0; k <= hmm->M; k++) { esl_vec_FScale(hmm->t[k], p7H_NTRANSITIONS, scale); esl_vec_FScale(hmm->mat[k], hmm->abc->K, scale); esl_vec_FScale(hmm->ins[k], hmm->abc->K, scale); } return eslOK; } /* Function: p7_hmm_Renormalize() * Synopsis: Renormalize all parameter vectors (emissions/transitions). * * Purpose: Take a core HMM in counts form, and renormalize * all probability vectors in the core probability model. Enforces * Plan7 restrictions on nonexistent transitions. * * Leaves other flags (stats and profile) alone, so caller * needs to be wary. Renormalizing a probability model that * has stats and profile scores wouldn't usually invalidate * those data; and if we're renormalizing a counts model, we * shouldn't have stats or profile scores yet anyway. * * Args: hmm - the model to renormalize. * * Return: on success. */ int p7_hmm_Renormalize(P7_HMM *hmm) { int k; /* counter for model position */ for (k = 0; k <= hmm->M; k++) { esl_vec_FNorm(hmm->mat[k], hmm->abc->K); esl_vec_FNorm(hmm->ins[k], hmm->abc->K); esl_vec_FNorm(P7H_TMAT(hmm, k), p7H_NTMAT); /* TMX */ esl_vec_FNorm(P7H_TDEL(hmm, k), p7H_NTDEL); /* TIX */ esl_vec_FNorm(P7H_TINS(hmm, k), p7H_NTINS); /* TDX */ } /* If t[M][TD*] distribution was all zeros, we just made TDD nonzero. Oops. * Re-enforce t's on that final delete state. */ hmm->t[hmm->M][p7H_DM] = 1.0; hmm->t[hmm->M][p7H_DD] = 0.0; /* Rare: if t[M][TM*] distribution was all zeros (all final transitions * were D_M -> E) then we just made nonexistent M_M->D_M+1 transition nonzero. * Fix that too. */ if (hmm->t[hmm->M][p7H_MD] > 0.) { hmm->t[hmm->M][p7H_MD] = 0.; hmm->t[hmm->M][p7H_MM] = 0.5; hmm->t[hmm->M][p7H_MI] = 0.5; } return eslOK; } /***************************************************************** * 4. Debugging and development code *****************************************************************/ /* Function: p7_hmm_Dump() * Synopsis: Dump HMM data structure to a stream. * * Purpose: Debugging: dump the probabilities (or counts) from a core HMM. * * Returns: on success. */ int p7_hmm_Dump(FILE *fp, P7_HMM *hmm) { int k; /* counter for nodes */ int x; /* counter for symbols */ int ts; /* counter for state transitions */ for (k = 0; k <= hmm->M; k++) { /* Line 1: k, match emissions */ fprintf(fp, " %5d ", k); for (x = 0; x < hmm->abc->K; x++) fprintf(fp, "%9.4f ", hmm->mat[k][x]); fputs("\n", fp); /* Line 2: insert emissions */ fprintf(fp, " "); for (x = 0; x < hmm->abc->K; x++) fprintf(fp, "%9.4f ", hmm->ins[k][x]); fputs("\n", fp); /* Line 3: transition probs */ fprintf(fp, " "); for (ts = 0; ts < 7; ts++) fprintf(fp, "%9.4f ", hmm->t[k][ts]); fputs("\n", fp); } fputs("//\n", fp); return eslOK; } /* Function: p7_hmm_Sample() * Synopsis: Sample an HMM at random. * * Purpose: Creates a random HMM of length nodes, * for alphabet , obtaining randomness from * . * * Probably only useful for debugging. * * Note: Compare p7_hmm_Renormalize(), which has a similar * structure, except it normalizes instead of * sampling each probability vector. * * Returns: on success, and the new hmm is returned * through . * * Throws: on allocation error. */ int p7_hmm_Sample(ESL_RANDOMNESS *r, int M, const ESL_ALPHABET *abc, P7_HMM **ret_hmm) { P7_HMM *hmm = NULL; char *logmsg = "[random HMM created by sampling]"; int k; int status; hmm = p7_hmm_Create(M, abc); if (hmm == NULL) { status = eslEMEM; goto ERROR; } for (k = 0; k <= M; k++) { if (k > 0) esl_dirichlet_FSampleUniform(r, abc->K, hmm->mat[k]); esl_dirichlet_FSampleUniform(r, abc->K, hmm->ins[k]); esl_dirichlet_FSampleUniform(r, 3, hmm->t[k]); esl_dirichlet_FSampleUniform(r, 2, hmm->t[k]+3); if (k > 0) esl_dirichlet_FSampleUniform(r, 2, hmm->t[k]+5); } /* Node M is special: no transitions to D, transitions to M * are interpreted as transitions to E. Overwrite a little of * what we did in node M. */ esl_dirichlet_FSampleUniform(r, 2, hmm->t[M]); /* TMM,TMI only */ hmm->t[M][p7H_MD] = 0.; hmm->t[M][p7H_DM] = 1.0; hmm->t[M][p7H_DD] = 0.0; /* Add mandatory annotation, and some relevant optional annotation */ p7_hmm_SetName(hmm, "sampled-hmm"); p7_hmm_AppendComlog(hmm, 1, &logmsg); p7_hmm_SetCtime(hmm); p7_hmm_SetConsensus(hmm, NULL); *ret_hmm = hmm; return eslOK; ERROR: if (hmm != NULL) p7_hmm_Destroy(hmm); *ret_hmm = NULL; return status; } /* Function: p7_hmm_SampleUngapped() * Synopsis: Sample a random HMM with no nonzero indel transitions. * * Purpose: Same as , except all * M $\rightarrow$ M transitions are 1.0: * an ungapped model. Useful for testing * as a limit case. * * Returns: on success, and the new hmm is returned * through . * * Throws: on allocation error. * * Xref: STL11/140 */ int p7_hmm_SampleUngapped(ESL_RANDOMNESS *r, int M, const ESL_ALPHABET *abc, P7_HMM **ret_hmm) { P7_HMM *hmm = NULL; int k; int status; if ((status = p7_hmm_Sample(r, M, abc, &hmm)) != eslOK) goto ERROR; for (k = 0; k <= M; k++) { hmm->t[k][p7H_MM] = 1.0; hmm->t[k][p7H_MD] = 0.0; hmm->t[k][p7H_MI] = 0.0; } *ret_hmm = hmm; return eslOK; ERROR: if (hmm != NULL) p7_hmm_Destroy(hmm); *ret_hmm = NULL; return status; } /* Function: esl_hmm_SampleEnumerable() * Synopsis: Sample an random HMM with no nonzero insertion transitions. * * Purpose: Sample a random HMM with random emission and * transition probabilities with the exception that * all transitions to insert are zero. This makes * it possible to create a model with a finite, * easily enumerable sequence space (all seqs of * length $\leq M). * * To achieve this in the profile as well as the core HMM, * the caller must configure a unihit mode * ( or * ), and a target length of zero * (). * * Useful for debugging and validating Forward/Viterbi * algorithms. * * Returns: on success. The newly allocated hmm is returned through * . The caller is responsible for freeing this object * with . * * Throws: on allocation error. */ int p7_hmm_SampleEnumerable(ESL_RANDOMNESS *r, int M, const ESL_ALPHABET *abc, P7_HMM **ret_hmm) { P7_HMM *hmm = NULL; char *logmsg = "[random enumerable HMM created by sampling]"; int k; float tmp[2]; int status; hmm = p7_hmm_Create(M, abc); if (hmm == NULL) { status = eslEMEM; goto ERROR; } for (k = 0; k <= M; k++) { if (k > 0) esl_dirichlet_FSampleUniform(r, abc->K, hmm->mat[k]); /* match emission probs */ esl_dirichlet_FSampleUniform(r, abc->K, hmm->ins[k]); /* insert emission probs */ esl_dirichlet_FSampleUniform(r, 2, tmp); hmm->t[k][p7H_MM] = tmp[0]; hmm->t[k][p7H_MI] = 0.; hmm->t[k][p7H_MD] = tmp[1]; hmm->t[k][p7H_IM] = 1.; /* I transitions irrelevant since I's are unreached. */ hmm->t[k][p7H_II] = 0.; if (k > 0) esl_dirichlet_FSampleUniform(r, 2, hmm->t[k]+5); /* delete transitions to M,D */ } /* Node M is special: no transitions to D, transitions to M * are interpreted as transitions to E. Overwrite a little of * what we did in node M. */ hmm->t[M][p7H_MM] = 1.; hmm->t[M][p7H_MD] = 0.; hmm->t[M][p7H_DM] = 1.; hmm->t[M][p7H_DD] = 0.; /* Add mandatory annotation */ p7_hmm_SetName(hmm, "sampled-hmm"); p7_hmm_AppendComlog(hmm, 1, &logmsg); p7_hmm_SetCtime(hmm); p7_hmm_SetConsensus(hmm, NULL); /* SRE DEBUGGING */ p7_hmm_Validate(hmm, NULL, 0.0001); *ret_hmm = hmm; return eslOK; ERROR: if (hmm != NULL) p7_hmm_Destroy(hmm); *ret_hmm = NULL; return status; } /* Function: p7_hmm_SampleUniform() * Synopsis: Sample a model that uses fixed (given) transition probs. * * Purpose: Sample a model that uses uniform transition probabilities, * determined by , , , and , * the probabilistic equivalent of gap-open/gap-extend for * inserts, deletes. * * Useful for testing expected behavior on single-sequence * models, where transitions are position-independent. * * Returns: on success, and the new hmm is returned * through . * * Throws: on allocation error. * * Xref: J1/5. */ int p7_hmm_SampleUniform(ESL_RANDOMNESS *r, int M, const ESL_ALPHABET *abc, float tmi, float tii, float tmd, float tdd, P7_HMM **ret_hmm) { int status; P7_HMM *hmm = NULL; char *logmsg = "[HMM with uniform transitions, random emissions]"; int k; hmm = p7_hmm_Create(M, abc); if (hmm == NULL) { status = eslEMEM; goto ERROR; } for (k = 0; k <= M; k++) { if (k > 0) esl_dirichlet_FSampleUniform(r, abc->K, hmm->mat[k]); esl_dirichlet_FSampleUniform(r, abc->K, hmm->ins[k]); hmm->t[k][p7H_MM] = 1.0 - tmi - tmd; hmm->t[k][p7H_MI] = tmi; hmm->t[k][p7H_MD] = tmd; hmm->t[k][p7H_IM] = 1.0 - tii; hmm->t[k][p7H_II] = tii; hmm->t[k][p7H_DM] = 1.0 - tdd; hmm->t[k][p7H_DD] = tdd; } /* Deal w/ special stuff at node 0, M, overwriting some of what we * just did. */ hmm->t[M][p7H_MM] = 1.0 - tmi; hmm->t[M][p7H_MD] = 0.; hmm->t[M][p7H_DM] = 1.0; hmm->t[M][p7H_DD] = 0.; /* Add mandatory annotation */ p7_hmm_SetName(hmm, "sampled-hmm"); p7_hmm_AppendComlog(hmm, 1, &logmsg); p7_hmm_SetCtime(hmm); p7_hmm_SetConsensus(hmm, NULL); *ret_hmm = hmm; return eslOK; ERROR: if (hmm != NULL) p7_hmm_Destroy(hmm); *ret_hmm = NULL; return status; } /* Function: p7_hmm_Compare() * Synopsis: Compare two HMMs for equality. * * Purpose: Compare two HMMs

and

to each other; * return if they're identical, and * if they differ. Floating-point probabilities are * compared for equality within a fractional tolerance * . */ int p7_hmm_Compare(P7_HMM *h1, P7_HMM *h2, float tol) { int k, z; if (h1->abc->type != h2->abc->type) return eslFAIL; if (h1->M != h2->M) return eslFAIL; if (h1->flags != h2->flags) return eslFAIL; for (k = 0; k <= h1->M; k++) /* (it's safe to include 0 here.) */ { if (esl_vec_FCompare(h1->mat[k], h2->mat[k], h1->abc->K, tol) != eslOK) return eslFAIL; if (esl_vec_FCompare(h1->ins[k], h2->ins[k], h1->abc->K, tol) != eslOK) return eslFAIL; if (esl_vec_FCompare(h1->t[k], h2->t[k], 7, tol) != eslOK) return eslFAIL; } if (strcmp(h1->name, h2->name) != 0) return eslFAIL; if (esl_strcmp(h1->comlog, h2->comlog) != 0) return eslFAIL; if (strcmp(h1->ctime, h2->ctime) != 0) return eslFAIL; if (h1->nseq != h2->nseq) return eslFAIL; if (esl_FCompare(h1->eff_nseq, h2->eff_nseq, tol) != eslOK) return eslFAIL; if (h1->checksum != h2->checksum) return eslFAIL; if (esl_strcmp(h1->acc, h2->acc) != 0) return eslFAIL; if (esl_strcmp(h1->desc, h2->desc) != 0) return eslFAIL; if ((h1->flags & p7H_RF) && esl_strcmp(h1->rf, h2->rf) != 0) return eslFAIL; if ((h1->flags & p7H_MMASK) && esl_strcmp(h1->mm, h2->mm) != 0) return eslFAIL; if ((h1->flags & p7H_CONS) && esl_strcmp(h1->consensus, h2->consensus) != 0) return eslFAIL; if ((h1->flags & p7H_CS) && esl_strcmp(h1->cs, h2->cs) != 0) return eslFAIL; if ((h1->flags & p7H_CA) && esl_strcmp(h1->ca, h2->ca) != 0) return eslFAIL; if ((h1->flags & p7H_MAP) && esl_vec_ICompare(h1->map, h2->map, h1->M+1) != 0) return eslFAIL; if (h1->flags & p7H_GA) { if (esl_FCompare(h1->cutoff[p7_GA1], h2->cutoff[p7_GA1], tol) != eslOK) return eslFAIL; if (esl_FCompare(h1->cutoff[p7_GA2], h2->cutoff[p7_GA2], tol) != eslOK) return eslFAIL; } if (h1->flags & p7H_TC) { if (esl_FCompare(h1->cutoff[p7_TC1], h2->cutoff[p7_TC1], tol) != eslOK) return eslFAIL; if (esl_FCompare(h1->cutoff[p7_TC2], h2->cutoff[p7_TC2], tol) != eslOK) return eslFAIL; } if (h1->flags & p7H_NC) { if (esl_FCompare(h1->cutoff[p7_NC1], h2->cutoff[p7_NC1], tol) != eslOK) return eslFAIL; if (esl_FCompare(h1->cutoff[p7_NC2], h2->cutoff[p7_NC2], tol) != eslOK) return eslFAIL; } if (h1->flags & p7H_STATS) { for (z = 0; z < p7_NEVPARAM; z++) if (esl_FCompare(h1->evparam[z], h2->evparam[z], tol) != eslOK) return eslFAIL; } return eslOK; } /* Function: p7_hmm_Validate() * Synopsis: Validate a data structuure. * * Purpose: Validates the internals of the HMM structure . * * Probability vectors are validated to sum up to * within a fractional tolerance of 1.0. * * Probably only useful for debugging and development, * not production code. * * Returns: if internals look fine. * Returns if something is wrong. */ int p7_hmm_Validate(P7_HMM *hmm, char *errbuf, float tol) { int status; int k; if (hmm == NULL) ESL_XFAIL(eslFAIL, errbuf, "HMM is a null pointer"); if (hmm->M < 1) ESL_XFAIL(eslFAIL, errbuf, "HMM has M < 1"); if (hmm->abc == NULL) ESL_XFAIL(eslFAIL, errbuf, "HMM has no alphabet reference"); if (hmm->abc->type == eslUNKNOWN) ESL_XFAIL(eslFAIL, errbuf, "HMM's alphabet is set to unknown"); for (k = 0; k <= hmm->M; k++) { if (esl_vec_FValidate(hmm->mat[k], hmm->abc->K, tol, NULL) != eslOK) ESL_XFAIL(eslFAIL, errbuf, "mat[%d] fails pvector validation", k); if (esl_vec_FValidate(hmm->ins[k], hmm->abc->K, tol, NULL) != eslOK) ESL_XFAIL(eslFAIL, errbuf, "ins[%d] fails pvector validation", k); if (esl_vec_FValidate(hmm->t[k], 3, tol, NULL) != eslOK) ESL_XFAIL(eslFAIL, errbuf, "t_M[%d] fails pvector validation", k); if (esl_vec_FValidate(hmm->t[k]+3, 2, tol, NULL) != eslOK) ESL_XFAIL(eslFAIL, errbuf, "t_I[%d] fails pvector validation", k); if (esl_vec_FValidate(hmm->t[k]+5, 2, tol, NULL) != eslOK) ESL_XFAIL(eslFAIL, errbuf, "t_D[%d] fails pvector validation", k); } if (hmm->t[hmm->M][p7H_MD] != 0.0) ESL_XFAIL(eslFAIL, errbuf, "TMD should be 0 for last node"); if (hmm->t[hmm->M][p7H_DM] != 1.0) ESL_XFAIL(eslFAIL, errbuf, "TDM should be 1 for last node"); if (hmm->t[hmm->M][p7H_DD] != 0.0) ESL_XFAIL(eslFAIL, errbuf, "TDD should be 0 for last node"); if (hmm->name == NULL) ESL_XFAIL(eslFAIL, errbuf, "name is NULL: this field is mandatory"); /* comlog is either NULL or a free text string: hard to validate */ /* ctime, ditto */ if ( (hmm->nseq != -1) && hmm->nseq <= 0) ESL_XFAIL(eslFAIL, errbuf, "invalid nseq"); if ( (hmm->eff_nseq != -1.0f) && hmm->eff_nseq <= 0.0f) ESL_XFAIL(eslFAIL, errbuf, "invalid eff_nseq"); if (!(hmm->flags & p7H_CHKSUM) && hmm->checksum != 0 ) ESL_XFAIL(eslFAIL, errbuf, "p7H_CHKSUM flag down, but nonzero checksum present"); if (hmm->flags & p7H_RF) { if (hmm->rf == NULL || strlen(hmm->rf) != hmm->M+1) ESL_XFAIL(eslFAIL, errbuf, "p7H_RF flag up, but rf string is invalid"); } else if (hmm->rf) { ESL_XFAIL(eslFAIL, errbuf, "p7H_RF flag down, but rf string is present"); } if (hmm->flags & p7H_MMASK) { if (hmm->mm == NULL || strlen(hmm->mm) != hmm->M+1) ESL_XFAIL(eslFAIL, errbuf, "p7H_MMASK flag up, but mm string is invalid"); } else if (hmm->mm) { ESL_XFAIL(eslFAIL, errbuf, "p7H_MMASK flag down, but mm string is present"); } if (hmm->flags & p7H_CONS) { if (hmm->consensus == NULL || strlen(hmm->consensus) != hmm->M+1) ESL_XFAIL(eslFAIL, errbuf, "p7H_CONS flag up, but consensus string is invalid"); } else if (hmm->consensus) { ESL_XFAIL(eslFAIL, errbuf, "p7H_CONS flag down, but consensus string is present"); } if (hmm->flags & p7H_CS) { if (hmm->cs == NULL || strlen(hmm->cs) != hmm->M+1) ESL_XFAIL(eslFAIL, errbuf, "p7H_CS flag up, but cs string is invalid"); } else if (hmm->cs) { ESL_XFAIL(eslFAIL, errbuf, "p7H_CS flag down, but cs string is present"); } if (hmm->flags & p7H_CA) { if (hmm->ca == NULL || strlen(hmm->ca) != hmm->M+1) ESL_XFAIL(eslFAIL, errbuf, "p7H_CA flag up, but ca string is invalid"); } else if (hmm->ca) { ESL_XFAIL(eslFAIL, errbuf, "p7H_CA flag down, but ca string is present"); } if ( (hmm->flags & p7H_MAP) && hmm->map == NULL) ESL_XFAIL(eslFAIL, errbuf, "p7H_MAP flag up, but map string is null"); if (! (hmm->flags & p7H_MAP) && hmm->map != NULL) ESL_XFAIL(eslFAIL, errbuf, "p7H_MAP flag down, but map string is present"); if (hmm->flags & p7H_STATS) { if (hmm->evparam[p7_MLAMBDA] <= 0.) ESL_XFAIL(eslFAIL, errbuf, "lambda parameter can't be negative"); if (hmm->evparam[p7_VLAMBDA] <= 0.) ESL_XFAIL(eslFAIL, errbuf, "lambda parameter can't be negative"); if (hmm->evparam[p7_FLAMBDA] <= 0.) ESL_XFAIL(eslFAIL, errbuf, "lambda parameter can't be negative"); } if (hmm->flags & p7H_COMPO && esl_vec_FValidate(hmm->compo, hmm->abc->K, tol, NULL) != eslOK) ESL_XFAIL(eslFAIL, errbuf, "composition fails pvector validation"); return eslOK; ERROR: return status; } /*------------- end of debugging/development code ----------------*/ /***************************************************************** * 5. Other routines in the API. *****************************************************************/ /* Function: p7_hmm_CalculateOccupancy() * Synopsis: Calculate match occupancy and insert expected use count vectors. * * Purpose: Calculate a vector containing probability * that each match state is used in a sampled path through * the model. Caller provides allocated space ( floats) * for . * * Caller may optionally provide an array as * well, which (if provided) will be set to contain the * expected number of times that a sampled path would contain * each insert state. * * Returns: on success. */ int p7_hmm_CalculateOccupancy(const P7_HMM *hmm, float *mocc, float *iocc) { int k; mocc[0] = 0.; /* no M_0 state */ mocc[1] = hmm->t[0][p7H_MI] + hmm->t[0][p7H_MM]; /* initialize w/ 1 - B->D_1 */ for (k = 2; k <= hmm->M; k++) mocc[k] = mocc[k-1] * (hmm->t[k-1][p7H_MM] + hmm->t[k-1][p7H_MI]) + (1.0-mocc[k-1]) * hmm->t[k-1][p7H_DM]; if (iocc != NULL) { iocc[0] = hmm->t[0][p7H_MI] / hmm->t[0][p7H_IM]; for (k = 1; k <= hmm->M; k++) iocc[k] = mocc[k] * hmm->t[k][p7H_MI] / hmm->t[k][p7H_IM]; } return eslOK; } /*---------------- end of the rest of the API -------------------*/ /***************************************************************** * 6. Unit tests. *****************************************************************/ #ifdef p7HMM_TESTDRIVE /* The occupancy unit test is based on the principle that * the stationary match occupancy probability in a random HMM * converges to 0.6, for long enough M (STL11/138) */ static void utest_occupancy(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc) { char *msg = "p7_hmm.c:: occupancy unit test failed"; P7_HMM *hmm = NULL; int M = 200; float *occ = malloc(sizeof(float) * (M+1)); float x; if (p7_hmm_Sample(r, M, abc, &hmm) != eslOK) esl_fatal(msg); if (p7_hmm_CalculateOccupancy(hmm, occ, NULL) != eslOK) esl_fatal(msg); x = esl_vec_FSum(occ+1, hmm->M) / (float) hmm->M; if (esl_opt_GetBoolean(go, "-v") == TRUE) { printf("occupancy unit test:\n"); printf("expected 0.6; got %.3f\n\n", x); } if (esl_FCompare(x, 0.6, 0.1) != eslOK) esl_fatal(msg); free(occ); p7_hmm_Destroy(hmm); return; } /* The composition unit test validates the SetComposition() * calculation against the composition of a large number of sampled * core HMM traces. This also exercises the correctness of * p7_hmm_Sample() and p7_hmm_SetOccupancy(). * * SRE, Fri Dec 4 13:04:52 2009 [#h71; J5/120] */ static void utest_composition(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc) { char *msg = "p7_hmm.c:: composition unit test failed"; P7_HMM *hmm = NULL; ESL_SQ *sq = esl_sq_CreateDigital(abc); int M = 3; int N = 100000; float *fq = malloc(sizeof(float) * abc->K); int i,pos; if (p7_hmm_Sample(r, M, abc, &hmm) != eslOK) esl_fatal(msg); if (p7_hmm_SetComposition(hmm) != eslOK) esl_fatal(msg); esl_vec_FSet(fq, abc->K, 0.0); for (i = 0; i < N; i++) { p7_CoreEmit(r, hmm, sq, NULL); for (pos = 1; pos <= sq->n; pos++) fq[sq->dsq[pos]] += 1.0; esl_sq_Reuse(sq); } esl_vec_FNorm(fq, abc->K); if (esl_opt_GetBoolean(go, "-v") == TRUE) { printf("composition unit test:\n"); printf(" %6s %6s\n", "calced", "sample"); printf(" %6s %6s\n", "------", "------"); for (i = 0; i < abc->K; i++) printf("%c %6.3f %6.3f\n", abc->sym[i], hmm->compo[i], fq[i]); printf("\n"); } if (esl_vec_FCompare(fq, hmm->compo, abc->K, 0.03) != eslOK) esl_fatal(msg); free(fq); esl_sq_Destroy(sq); p7_hmm_Destroy(hmm); return; } #endif /*p7HMM_TESTDRIVE*/ /*---------------------- end of unit tests -----------------------*/ /***************************************************************** * 7. Test driver. *****************************************************************/ #ifdef p7HMM_TESTDRIVE #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_random.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "unit test driver for p7_hmm.c core model routines"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_Create(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); utest_occupancy (go, r, abc); utest_composition(go, r, abc); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); exit(0); /* success */ } #endif /*p7HMM_TESTDRIVE*/ /*-------------------- end of test driver ---------------------*/ /************************************************************ * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: p7_hmm.c 4396 2013-02-12 00:33:45Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/p7_hmm.c $ ************************************************************/ hmmer-3.1b2/src/hmmscan.c0000664361611702660230000016667512473612613014676 0ustar wheelerteddy/* hmmscan: search sequence(s) against a profile HMM database * * To do: * - in MPI mode, add a check to make sure ncpus >= 2. If 1, then we * only have a master, no workers. See Infernal commit r3972 on the * same point; and same note in hmmsearch.c's to do list. */ #include "p7_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stopwatch.h" #ifdef HAVE_MPI #include "mpi.h" #include "esl_mpi.h" #endif /*HAVE_MPI*/ #ifdef HMMER_THREADS #include #include "esl_threads.h" #include "esl_workqueue.h" #endif /*HMMER_THREADS*/ #include "hmmer.h" typedef struct { #ifdef HMMER_THREADS ESL_WORK_QUEUE *queue; #endif /*HMMER_THREADS*/ ESL_SQ *qsq; P7_BG *bg; /* null model */ P7_PIPELINE *pli; /* work pipeline */ P7_TOPHITS *th; /* top hit results */ } WORKER_INFO; #define REPOPTS "-E,-T,--cut_ga,--cut_nc,--cut_tc" #define DOMREPOPTS "--domE,--domT,--cut_ga,--cut_nc,--cut_tc" #define INCOPTS "--incE,--incT,--cut_ga,--cut_nc,--cut_tc" #define INCDOMOPTS "--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #define THRESHOPTS "-E,-T,--domE,--domT,--incE,--incT,--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #if defined (HMMER_THREADS) && defined (HAVE_MPI) #define CPUOPTS "--mpi" #define MPIOPTS "--cpu" #else #define CPUOPTS NULL #define MPIOPTS NULL #endif #ifdef HAVE_MPI #define DAEMONOPTS "-o,--tblout,--domtblout,--pfamtblout,--mpi,--stall" #else #define DAEMONOPTS "-o,--tblout,--domtblout,--pfamtblout" #endif static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, /* Control of output */ { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "direct output to file , not stdout", 2 }, { "--tblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save parseable table of per-sequence hits to file ", 2 }, { "--domtblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save parseable table of per-domain hits to file ", 2 }, { "--pfamtblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save table of hits and domains to file, in Pfam format ", 2 }, { "--acc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "prefer accessions over names in output", 2 }, { "--noali", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "don't output alignments, so output is smaller", 2 }, { "--notextw", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--textw", "unlimit ASCII text output line width", 2 }, { "--textw", eslARG_INT, "120", NULL, "n>=120",NULL, NULL, "--notextw", "set max width of ASCII text output lines", 2 }, /* Control of reporting thresholds */ { "-E", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, REPOPTS, "report models <= this E-value threshold in output", 4 }, { "-T", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, REPOPTS, "report models >= this score threshold in output", 4 }, { "--domE", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, DOMREPOPTS, "report domains <= this E-value threshold in output", 4 }, { "--domT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, DOMREPOPTS, "report domains >= this score cutoff in output", 4 }, /* Control of inclusion (significance) thresholds: */ { "--incE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, INCOPTS, "consider models <= this E-value threshold as significant", 5 }, { "--incT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCOPTS, "consider models >= this score threshold as significant", 5 }, { "--incdomE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, INCDOMOPTS, "consider domains <= this E-value threshold as significant", 5 }, { "--incdomT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCDOMOPTS, "consider domains >= this score threshold as significant", 5 }, /* Model-specific thresholding for both reporting and inclusion */ { "--cut_ga", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's GA gathering cutoffs to set all thresholding", 6 }, { "--cut_nc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's NC noise cutoffs to set all thresholding", 6 }, { "--cut_tc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's TC trusted cutoffs to set all thresholding", 6 }, /* Control of acceleration pipeline */ { "--max", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--F1,--F2,--F3", "Turn all heuristic filters off (less speed, more power)", 7 }, { "--F1", eslARG_REAL, "0.02", NULL, NULL, NULL, NULL, "--max", "MSV threshold: promote hits w/ P <= F1", 7 }, { "--F2", eslARG_REAL, "1e-3", NULL, NULL, NULL, NULL, "--max", "Vit threshold: promote hits w/ P <= F2", 7 }, { "--F3", eslARG_REAL, "1e-5", NULL, NULL, NULL, NULL, "--max", "Fwd threshold: promote hits w/ P <= F3", 7 }, { "--nobias", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--max", "turn off composition bias filter", 7 }, /* Other options */ { "--nonull2", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "turn off biased composition score corrections", 12 }, { "-Z", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of comparisons done, for E-value calculation", 12 }, { "--domZ", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of significant seqs, for domain E-value calculation", 12 }, { "--seed", eslARG_INT, "42", NULL, "n>=0", NULL, NULL, NULL, "set RNG seed to (if 0: one-time arbitrary seed)", 12 }, { "--qformat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "assert input is in format : no autodetection", 12 }, { "--daemon", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, DAEMONOPTS, "run program as a daemon", 12 }, #ifdef HMMER_THREADS { "--cpu", eslARG_INT, NULL,"HMMER_NCPU","n>=0",NULL, NULL, CPUOPTS, "number of parallel CPU workers to use for multithreads", 12 }, #endif #ifdef HAVE_MPI { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL,"--mpi", NULL, "arrest after start: for debugging MPI under gdb", 12 }, { "--mpi", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, MPIOPTS, "run as an MPI parallel program", 12 }, #endif { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; /* struct cfg_s : "Global" application configuration shared by all threads/processes * * This structure is passed to routines within main.c, as a means of semi-encapsulation * of shared data amongst different parallel processes (threads or MPI processes). */ struct cfg_s { char *seqfile; /* query sequence file */ char *hmmfile; /* database HMM file */ int do_mpi; /* TRUE if we're doing MPI parallelization */ int nproc; /* how many MPI processes, total */ int my_rank; /* who am I, in 0..nproc-1 */ }; static char usage[] = "[-options] "; static char banner[] = "search sequence(s) against a profile database"; static int serial_master(ESL_GETOPTS *go, struct cfg_s *cfg); static int serial_loop (WORKER_INFO *info, P7_HMMFILE *hfp); #ifdef HMMER_THREADS #define BLOCK_SIZE 1000 static int thread_loop(ESL_THREADS *obj, ESL_WORK_QUEUE *queue, P7_HMMFILE *hfp); static void pipeline_thread(void *arg); #endif /*HMMER_THREADS*/ #ifdef HAVE_MPI static int mpi_master (ESL_GETOPTS *go, struct cfg_s *cfg); static int mpi_worker (ESL_GETOPTS *go, struct cfg_s *cfg); #endif /*HAVE_MPI*/ /* process_commandline() * * Processes the commandline, filling in fields in and creating and returning * an options structure. The help page (hmmsearch -h) is formatted * here. */ static int process_commandline(int argc, char **argv, ESL_GETOPTS **ret_go, char **ret_hmmfile, char **ret_seqfile) { ESL_GETOPTS *go = esl_getopts_Create(options); int status; if (esl_opt_ProcessEnvironment(go) != eslOK) { if (printf("Failed to process environment: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_VerifyConfig(go) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* help format: */ if (esl_opt_GetBoolean(go, "-h") == TRUE) { p7_banner(stdout, argv[0], banner); esl_usage(stdout, argv[0], usage); if (puts("\nBasic options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 80=textwidth*/ if (puts("\nOptions controlling output:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); if (puts("\nOptions controlling reporting thresholds:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); if (puts("\nOptions controlling inclusion (significance) thresholds:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 5, 2, 80); if (puts("\nOptions for model-specific thresholding:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 6, 2, 80); if (puts("\nOptions controlling acceleration heuristics:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 7, 2, 80); if (puts("\nOther expert options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 12, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != 2) { if (puts("Incorrect number of command line arguments.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_hmmfile = esl_opt_GetArg(go, 1)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_seqfile = esl_opt_GetArg(go, 2)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* Validate any attempted use of stdin streams */ if (strcmp(*ret_hmmfile, "-") == 0) { if (puts("hmmscan cannot read from stdin stream, because it must have hmmpress'ed auxfiles") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } *ret_go = go; return eslOK; FAILURE: /* all errors handled here are user errors, so be polite. */ esl_usage(stdout, argv[0], usage); if (puts("\nwhere most common options are:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 80=textwidth*/ if (printf("\nTo see more help on available options, do %s -h\n\n", argv[0]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_getopts_Destroy(go); exit(1); ERROR: if (go) esl_getopts_Destroy(go); exit(status); } static int output_header(FILE *ofp, ESL_GETOPTS *go, char *hmmfile, char *seqfile) { p7_banner(ofp, go->argv[0], banner); if (fprintf(ofp, "# query sequence file: %s\n", seqfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# target HMM database: %s\n", hmmfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-o") && fprintf(ofp, "# output directed to file: %s\n", esl_opt_GetString(go, "-o")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--tblout") && fprintf(ofp, "# per-seq hits tabular output: %s\n", esl_opt_GetString(go, "--tblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domtblout") && fprintf(ofp, "# per-dom hits tabular output: %s\n", esl_opt_GetString(go, "--domtblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--pfamtblout")&& fprintf(ofp, "# pfam-style tabular hit output: %s\n", esl_opt_GetString(go, "--pfamtblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--acc") && fprintf(ofp, "# prefer accessions over names: yes\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--noali") && fprintf(ofp, "# show alignments in output: no\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--notextw") && fprintf(ofp, "# max ASCII text line length: unlimited\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--textw") && fprintf(ofp, "# max ASCII text line length: %d\n", esl_opt_GetInteger(go, "--textw")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-E") && fprintf(ofp, "# profile reporting threshold: E-value <= %g\n", esl_opt_GetReal(go, "-E")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-T") && fprintf(ofp, "# profile reporting threshold: score >= %g\n", esl_opt_GetReal(go, "-T")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domE") && fprintf(ofp, "# domain reporting threshold: E-value <= %g\n", esl_opt_GetReal(go, "--domE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domT") && fprintf(ofp, "# domain reporting threshold: score >= %g\n", esl_opt_GetReal(go, "--domT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incE") && fprintf(ofp, "# profile inclusion threshold: E-value <= %g\n", esl_opt_GetReal(go, "--incE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incT") && fprintf(ofp, "# profile inclusion threshold: score >= %g\n", esl_opt_GetReal(go, "--incT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incdomE") && fprintf(ofp, "# domain inclusion threshold: E-value <= %g\n", esl_opt_GetReal(go, "--incdomE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incdomT") && fprintf(ofp, "# domain inclusion threshold: score >= %g\n", esl_opt_GetReal(go, "--incdomT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--cut_ga") && fprintf(ofp, "# model-specific thresholding: GA cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--cut_nc") && fprintf(ofp, "# model-specific thresholding: NC cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--cut_tc") && fprintf(ofp, "# model-specific thresholding: TC cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--max") && fprintf(ofp, "# Max sensitivity mode: on [all heuristic filters off]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F1") && fprintf(ofp, "# MSV filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F1")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F2") && fprintf(ofp, "# Vit filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F2")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F3") && fprintf(ofp, "# Fwd filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F3")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--nobias") && fprintf(ofp, "# biased composition HMM filter: off\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--nonull2") && fprintf(ofp, "# null2 bias corrections: off\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-Z") && fprintf(ofp, "# sequence search space set to: %.0f\n", esl_opt_GetReal(go, "-Z")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domZ") && fprintf(ofp, "# domain search space set to: %.0f\n", esl_opt_GetReal(go, "--domZ")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--seed")) { if (esl_opt_GetInteger(go, "--seed")==0 && fprintf(ofp, "# random number seed: one-time arbitrary\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); else if ( fprintf(ofp, "# random number seed set to: %d\n", esl_opt_GetInteger(go, "--seed")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (esl_opt_IsUsed(go, "--qformat") && fprintf(ofp, "# input seqfile format asserted: %s\n", esl_opt_GetString(go, "--qformat")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--daemon") && fprintf(ofp, "run as a daemon process\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #ifdef HMMER_THREADS if (esl_opt_IsUsed(go, "--cpu") && fprintf(ofp, "# number of worker threads: %d\n", esl_opt_GetInteger(go, "--cpu")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #endif #ifdef HAVE_MPI if (esl_opt_IsUsed(go, "--mpi") && fprintf(ofp, "# MPI: on\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #endif if (fprintf(ofp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); return eslOK; } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; struct cfg_s cfg; int status = eslOK; impl_Init(); /* processor-specific initialization */ p7_FLogsumInit(); /* we're going to use table-driven Logsum() approximations at times */ /* Initialize what we can in the config structure (without knowing the alphabet yet) */ cfg.hmmfile = NULL; cfg.seqfile = NULL; cfg.do_mpi = FALSE; /* this gets reset below, if we init MPI */ cfg.nproc = 0; /* this gets reset below, if we init MPI */ cfg.my_rank = 0; /* this gets reset below, if we init MPI */ process_commandline(argc, argv, &go, &cfg.hmmfile, &cfg.seqfile); /* Figure out who we are, and send control there: * we might be an MPI master, an MPI worker, or a serial program. */ #ifdef HAVE_MPI /* pause the execution of the programs execution until the user has a * chance to attach with a debugger and send a signal to resume execution * i.e. (gdb) signal SIGCONT */ if (esl_opt_GetBoolean(go, "--stall")) pause(); if (esl_opt_GetBoolean(go, "--mpi")) { cfg.do_mpi = TRUE; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &(cfg.my_rank)); MPI_Comm_size(MPI_COMM_WORLD, &(cfg.nproc)); if (cfg.my_rank > 0) status = mpi_worker(go, &cfg); else status = mpi_master(go, &cfg); MPI_Finalize(); } else #endif /*HAVE_MPI*/ { status = serial_master(go, &cfg); } esl_getopts_Destroy(go); return status; } /* serial_master() * The serial version of hmmsearch. * For each query HMM in search the database for hits. * * A master can only return if it's successful. All errors are handled * immediately and fatally with p7_Fail(). */ static int serial_master(ESL_GETOPTS *go, struct cfg_s *cfg) { FILE *ofp = stdout; /* output file for results (default stdout) */ FILE *tblfp = NULL; /* output stream for tabular per-seq (--tblout) */ FILE *domtblfp = NULL; /* output stream for tabular per-seq (--domtblout) */ FILE *pfamtblfp= NULL; /* output stream for pfam tabular output (--pfamtblout) */ int seqfmt = eslSQFILE_UNKNOWN; /* format of seqfile */ ESL_SQFILE *sqfp = NULL; /* open seqfile */ P7_HMMFILE *hfp = NULL; /* open HMM database file */ ESL_ALPHABET *abc = NULL; /* sequence alphabet */ P7_OPROFILE *om = NULL; /* target profile */ ESL_STOPWATCH *w = NULL; /* timing */ ESL_SQ *qsq = NULL; /* query sequence */ int nquery = 0; int textw; int status = eslOK; int hstatus = eslOK; int sstatus = eslOK; int i; int ncpus = 0; int infocnt = 0; WORKER_INFO *info = NULL; #ifdef HMMER_THREADS P7_OM_BLOCK *block = NULL; ESL_THREADS *threadObj= NULL; ESL_WORK_QUEUE *queue = NULL; #endif char errbuf[eslERRBUFSIZE]; w = esl_stopwatch_Create(); if (esl_opt_GetBoolean(go, "--notextw")) textw = 0; else textw = esl_opt_GetInteger(go, "--textw"); /* If caller declared an input format, decode it */ if (esl_opt_IsOn(go, "--qformat")) { seqfmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--qformat")); if (seqfmt == eslSQFILE_UNKNOWN) p7_Fail("%s is not a recognized input sequence file format\n", esl_opt_GetString(go, "--qformat")); } /* validate options if running as a daemon */ if (esl_opt_IsOn(go, "--daemon")) { /* running as a daemon, the input format must be type daemon */ if (seqfmt != eslSQFILE_UNKNOWN && seqfmt != eslSQFILE_DAEMON) esl_fatal("Input format %s not supported. Must be daemon\n", esl_opt_GetString(go, "--qformat")); seqfmt = eslSQFILE_DAEMON; if (strcmp(cfg->seqfile, "-") != 0) esl_fatal("Query sequence file must be '-'\n"); } /* Open the target profile database to get the sequence alphabet */ status = p7_hmmfile_OpenE(cfg->hmmfile, p7_HMMDBENV, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", cfg->hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem, trying to open HMM file %s.\n%s\n", cfg->hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, cfg->hmmfile, errbuf); if (! hfp->is_pressed) p7_Fail("Failed to open binary auxfiles for %s: use hmmpress first\n", hfp->fname); hstatus = p7_oprofile_ReadMSV(hfp, &abc, &om); if (hstatus == eslEFORMAT) p7_Fail("bad format, binary auxfiles, %s:\n%s", cfg->hmmfile, hfp->errbuf); else if (hstatus == eslEINCOMPAT) p7_Fail("HMM file %s contains different alphabets", cfg->hmmfile); else if (hstatus != eslOK) p7_Fail("Unexpected error in reading HMMs from %s", cfg->hmmfile); p7_oprofile_Destroy(om); p7_hmmfile_Close(hfp); /* Open the query sequence database */ status = esl_sqfile_OpenDigital(abc, cfg->seqfile, seqfmt, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("Failed to open sequence file %s for reading\n", cfg->seqfile); else if (status == eslEFORMAT) p7_Fail("Sequence file %s is empty or misformatted\n", cfg->seqfile); else if (status == eslEINVAL) p7_Fail("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) p7_Fail("Unexpected error %d opening sequence file %s\n", status, cfg->seqfile); qsq = esl_sq_CreateDigital(abc); /* Open the results output files */ if (esl_opt_IsOn(go, "-o")) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) esl_fatal("Failed to open output file %s for writing\n", esl_opt_GetString(go, "-o")); } if (esl_opt_IsOn(go, "--tblout")) { if ((tblfp = fopen(esl_opt_GetString(go, "--tblout"), "w")) == NULL) esl_fatal("Failed to open tabular per-seq output file %s for writing\n", esl_opt_GetString(go, "--tblout")); } if (esl_opt_IsOn(go, "--domtblout")) { if ((domtblfp = fopen(esl_opt_GetString(go, "--domtblout"), "w")) == NULL) esl_fatal("Failed to open tabular per-dom output file %s for writing\n", esl_opt_GetString(go, "--domtblout")); } if (esl_opt_IsOn(go, "--pfamtblout")){ if ((pfamtblfp = fopen(esl_opt_GetString(go, "--pfamtblout"), "w")) == NULL) esl_fatal("Failed to open pfam-style tabular output file %s for writing\n", esl_opt_GetString(go, "--pfamtblout")); } output_header(ofp, go, cfg->hmmfile, cfg->seqfile); #ifdef HMMER_THREADS /* initialize thread data */ if (esl_opt_IsOn(go, "--cpu")) ncpus = esl_opt_GetInteger(go, "--cpu"); else esl_threads_CPUCount(&ncpus); if (ncpus > 0) { threadObj = esl_threads_Create(&pipeline_thread); queue = esl_workqueue_Create(ncpus * 2); } #endif infocnt = (ncpus == 0) ? 1 : ncpus; ESL_ALLOC(info, sizeof(*info) * infocnt); for (i = 0; i < infocnt; ++i) { info[i].bg = p7_bg_Create(abc); #ifdef HMMER_THREADS info[i].queue = queue; #endif } #ifdef HMMER_THREADS for (i = 0; i < ncpus * 2; ++i) { block = p7_oprofile_CreateBlock(BLOCK_SIZE); if (block == NULL) esl_fatal("Failed to allocate sequence block"); status = esl_workqueue_Init(queue, block); if (status != eslOK) esl_fatal("Failed to add block to work queue"); } #endif /* Outside loop: over each query sequence in . */ while ((sstatus = esl_sqio_Read(sqfp, qsq)) == eslOK) { nquery++; esl_stopwatch_Start(w); /* Open the target profile database */ status = p7_hmmfile_OpenE(cfg->hmmfile, p7_HMMDBENV, &hfp, NULL); if (status != eslOK) p7_Fail("Unexpected error %d in opening hmm file %s.\n", status, cfg->hmmfile); #ifdef HMMER_THREADS /* if we are threaded, create a lock to prevent multiple readers */ if (ncpus > 0) { status = p7_hmmfile_CreateLock(hfp); if (status != eslOK) p7_Fail("Unexpected error %d creating lock\n", status); } #endif if (fprintf(ofp, "Query: %s [L=%ld]\n", qsq->name, (long) qsq->n) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (qsq->acc[0] != 0 && fprintf(ofp, "Accession: %s\n", qsq->acc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (qsq->desc[0] != 0 && fprintf(ofp, "Description: %s\n", qsq->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); for (i = 0; i < infocnt; ++i) { /* Create processing pipeline and hit list */ info[i].th = p7_tophits_Create(); info[i].pli = p7_pipeline_Create(go, 100, 100, FALSE, p7_SCAN_MODELS); /* M_hint = 100, L_hint = 100 are just dummies for now */ info[i].pli->hfp = hfp; /* for two-stage input, pipeline needs */ p7_pli_NewSeq(info[i].pli, qsq); info[i].qsq = qsq; #ifdef HMMER_THREADS if (ncpus > 0) esl_threads_AddThread(threadObj, &info[i]); #endif } #ifdef HMMER_THREADS if (ncpus > 0) hstatus = thread_loop(threadObj, queue, hfp); else hstatus = serial_loop(info, hfp); #else hstatus = serial_loop(info, hfp); #endif switch(hstatus) { case eslEFORMAT: p7_Fail("bad file format in HMM file %s", cfg->hmmfile); break; case eslEINCOMPAT: p7_Fail("HMM file %s contains different alphabets", cfg->hmmfile); break; case eslEOF: /* do nothing */ break; default: p7_Fail("Unexpected error in reading HMMs from %s", cfg->hmmfile); } /* merge the results of the search results */ for (i = 1; i < infocnt; ++i) { p7_tophits_Merge(info[0].th, info[i].th); p7_pipeline_Merge(info[0].pli, info[i].pli); p7_pipeline_Destroy(info[i].pli); p7_tophits_Destroy(info[i].th); } /* Print results */ p7_tophits_SortBySortkey(info->th); p7_tophits_Threshold(info->th, info->pli); p7_tophits_Targets(ofp, info->th, info->pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); p7_tophits_Domains(ofp, info->th, info->pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (tblfp) p7_tophits_TabularTargets(tblfp, qsq->name, qsq->acc, info->th, info->pli, (nquery == 1)); if (domtblfp) p7_tophits_TabularDomains(domtblfp, qsq->name, qsq->acc, info->th, info->pli, (nquery == 1)); if (pfamtblfp) p7_tophits_TabularXfam(pfamtblfp, qsq->name, qsq->acc, info->th, info->pli); esl_stopwatch_Stop(w); p7_pli_Statistics(ofp, info->pli, w); if (fprintf(ofp, "//\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); fflush(ofp); p7_hmmfile_Close(hfp); p7_pipeline_Destroy(info->pli); p7_tophits_Destroy(info->th); esl_sq_Reuse(qsq); } if (sstatus == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (sstatus != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", sstatus, sqfp->filename); /* Terminate outputs - any last words? */ if (tblfp) p7_tophits_TabularTail(tblfp, "hmmscan", p7_SCAN_MODELS, cfg->seqfile, cfg->hmmfile, go); if (domtblfp) p7_tophits_TabularTail(domtblfp, "hmmscan", p7_SCAN_MODELS, cfg->seqfile, cfg->hmmfile, go); if (pfamtblfp)p7_tophits_TabularTail(pfamtblfp,"hmmscan", p7_SEARCH_SEQS, cfg->seqfile, cfg->hmmfile, go); if (ofp) { if (fprintf(ofp, "[ok]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } /* Cleanup - prepare for successful exit */ for (i = 0; i < infocnt; ++i) p7_bg_Destroy(info[i].bg); #ifdef HMMER_THREADS if (ncpus > 0) { esl_workqueue_Reset(queue); while (esl_workqueue_Remove(queue, (void **) &block) == eslOK) p7_oprofile_DestroyBlock(block); esl_workqueue_Destroy(queue); esl_threads_Destroy(threadObj); } #endif free(info); esl_sq_Destroy(qsq); esl_stopwatch_Destroy(w); esl_alphabet_Destroy(abc); esl_sqfile_Close(sqfp); if (ofp != stdout) fclose(ofp); if (tblfp) fclose(tblfp); if (domtblfp) fclose(domtblfp); if (pfamtblfp) fclose(pfamtblfp); return eslOK; ERROR: return status; } #ifdef HAVE_MPI /* Define common tags used by the MPI master/slave processes */ #define HMMER_ERROR_TAG 1 #define HMMER_HMM_TAG 2 #define HMMER_SEQUENCE_TAG 3 #define HMMER_BLOCK_TAG 4 #define HMMER_PIPELINE_TAG 5 #define HMMER_TOPHITS_TAG 6 #define HMMER_HIT_TAG 7 #define HMMER_TERMINATING_TAG 8 #define HMMER_READY_TAG 9 /* mpi_failure() * Generate an error message. If the clients rank is not 0, a * message is created with the error message and sent to the * master process for handling. */ static void mpi_failure(char *format, ...) { va_list argp; int status = eslFAIL; int len; int rank; char str[512]; MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* format the error mesg */ va_start(argp, format); len = vsnprintf(str, sizeof(str), format, argp); va_end(argp); /* make sure the error string is terminated */ str[sizeof(str)-1] = '\0'; /* if the caller is the master, print the results and abort */ if (rank == 0) { if (fprintf(stderr, "\nError: ") < 0) exit(eslEWRITE); if (fprintf(stderr, "%s", str) < 0) exit(eslEWRITE); if (fprintf(stderr, "\n") < 0) exit(eslEWRITE); fflush(stderr); MPI_Abort(MPI_COMM_WORLD, status); exit(1); } else { MPI_Send(str, len, MPI_CHAR, 0, HMMER_ERROR_TAG, MPI_COMM_WORLD); pause(); } } #define MAX_BLOCK_SIZE (512*1024) typedef struct { uint64_t offset; uint64_t length; uint64_t count; } MSV_BLOCK; typedef struct { int complete; int size; int current; int last; MSV_BLOCK *blocks; } BLOCK_LIST; /* this routine parses the database keeping track of the blocks * offset within the file, number of sequences and the length * of the block. These blocks are passed as work units to the * MPI workers. If multiple hmm's are in the query file, the * blocks are reused without parsing the database a second time. */ int next_block(P7_HMMFILE *hfp, BLOCK_LIST *list, MSV_BLOCK *block) { P7_OPROFILE *om = NULL; ESL_ALPHABET *abc = NULL; int status = eslOK; /* if the list has been calculated, use it instead of parsing the database */ if (list->complete) { if (list->current == list->last) { block->offset = 0; block->length = 0; block->count = 0; status = eslEOF; } else { int inx = list->current++; block->offset = list->blocks[inx].offset; block->length = list->blocks[inx].length; block->count = list->blocks[inx].count; status = eslOK; } return status; } block->offset = 0; block->length = 0; block->count = 0; while (block->length < MAX_BLOCK_SIZE && (status = p7_oprofile_ReadInfoMSV(hfp, &abc, &om)) == eslOK) { if (block->count == 0) block->offset = om->roff; block->length = om->eoff - block->offset + 1; block->count++; p7_oprofile_Destroy(om); } if (status == eslEOF && block->count > 0) status = eslOK; if (status == eslEOF) list->complete = 1; /* add the block to the list of known blocks */ if (status == eslOK) { int inx; if (list->last >= list->size) { void *tmp; list->size += 500; ESL_RALLOC(list->blocks, tmp, sizeof(MSV_BLOCK) * list->size); } inx = list->last++; list->blocks[inx].offset = block->offset; list->blocks[inx].length = block->length; list->blocks[inx].count = block->count; } return status; ERROR: return eslEMEM; } /* mpi_master() * The MPI version of hmmscan * Follows standard pattern for a master/worker load-balanced MPI program (J1/78-79). * * A master can only return if it's successful. * Errors in an MPI master come in two classes: recoverable and nonrecoverable. * * Recoverable errors include all worker-side errors, and any * master-side error that do not affect MPI communication. Error * messages from recoverable messages are delayed until we've cleanly * shut down the workers. * * Unrecoverable errors are master-side errors that may affect MPI * communication, meaning we cannot count on being able to reach the * workers and shut them down. Unrecoverable errors result in immediate * p7_Fail()'s, which will cause MPI to shut down the worker processes * uncleanly. */ static int mpi_master(ESL_GETOPTS *go, struct cfg_s *cfg) { FILE *ofp = stdout; /* output file for results (default stdout) */ FILE *tblfp = NULL; /* output stream for tabular per-seq (--tblout) */ FILE *domtblfp = NULL; /* output stream for tabular per-seq (--domtblout) */ FILE *pfamtblfp= NULL; /* output stream for pfam-style tabular output (--pfamtblout) */ int seqfmt = eslSQFILE_UNKNOWN; /* format of seqfile */ P7_BG *bg = NULL; /* null model */ ESL_SQFILE *sqfp = NULL; /* open seqfile */ P7_HMMFILE *hfp = NULL; /* open HMM database file */ ESL_ALPHABET *abc = NULL; /* sequence alphabet */ P7_OPROFILE *om = NULL; /* target profile */ ESL_STOPWATCH *w = NULL; /* timing */ ESL_SQ *qsq = NULL; /* query sequence */ int nquery = 0; int textw; int status = eslOK; int hstatus = eslOK; int sstatus = eslOK; int dest; char *mpi_buf = NULL; /* buffer used to pack/unpack structures */ int mpi_size = 0; /* size of the allocated buffer */ BLOCK_LIST *list = NULL; MSV_BLOCK block; int i; int size; MPI_Status mpistatus; char errbuf[eslERRBUFSIZE]; w = esl_stopwatch_Create(); if (esl_opt_GetBoolean(go, "--notextw")) textw = 0; else textw = esl_opt_GetInteger(go, "--textw"); /* If caller declared an input format, decode it */ if (esl_opt_IsOn(go, "--qformat")) { seqfmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--qformat")); if (seqfmt == eslSQFILE_UNKNOWN) mpi_failure("%s is not a recognized input sequence file format\n", esl_opt_GetString(go, "--qformat")); } /* Open the target profile database to get the sequence alphabet */ status = p7_hmmfile_OpenE(cfg->hmmfile, p7_HMMDBENV, &hfp, errbuf); if (status == eslENOTFOUND) mpi_failure("File existence/permissions problem in trying to open HMM file %s.\n%s\n", cfg->hmmfile, errbuf); else if (status == eslEFORMAT) mpi_failure("File format problem, trying to open HMM file %s.\n%s\n", cfg->hmmfile, errbuf); else if (status != eslOK) mpi_failure("Unexpected error %d in opening HMM file %s.\n%s\n", status, cfg->hmmfile, errbuf); if (! hfp->is_pressed) mpi_failure("Failed to open binary auxfiles for %s: use hmmpress first\n", hfp->fname); hstatus = p7_oprofile_ReadMSV(hfp, &abc, &om); if (hstatus == eslEFORMAT) mpi_failure("bad format, binary auxfiles, %s", cfg->hmmfile); else if (hstatus == eslEINCOMPAT) mpi_failure("HMM file %s contains different alphabets", cfg->hmmfile); else if (hstatus != eslOK) mpi_failure("Unexpected error in reading HMMs from %s", cfg->hmmfile); p7_oprofile_Destroy(om); p7_hmmfile_Close(hfp); /* Open the query sequence database */ status = esl_sqfile_OpenDigital(abc, cfg->seqfile, seqfmt, NULL, &sqfp); if (status == eslENOTFOUND) mpi_failure("Failed to open sequence file %s for reading\n", cfg->seqfile); else if (status == eslEFORMAT) mpi_failure("Sequence file %s is empty or misformatted\n", cfg->seqfile); else if (status == eslEINVAL) mpi_failure("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) mpi_failure("Unexpected error %d opening sequence file %s\n", status, cfg->seqfile); /* Open the results output files */ if (esl_opt_IsOn(go, "-o") && (ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) mpi_failure("Failed to open output file %s for writing\n", esl_opt_GetString(go, "-o")); if (esl_opt_IsOn(go, "--tblout") && (tblfp = fopen(esl_opt_GetString(go, "--tblout"), "w")) == NULL) mpi_failure("Failed to open tabular per-seq output file %s for writing\n", esl_opt_GetString(go, "--tblfp")); if (esl_opt_IsOn(go, "--domtblout") && (domtblfp = fopen(esl_opt_GetString(go, "--domtblout"), "w")) == NULL) mpi_failure("Failed to open tabular per-dom output file %s for writing\n", esl_opt_GetString(go, "--domtblfp")); if (esl_opt_IsOn(go, "--pfamtblout") && (pfamtblfp = fopen(esl_opt_GetString(go, "--pfamtblout"), "w")) == NULL) mpi_failure("Failed to open pfam-style tabular output file %s for writing\n", esl_opt_GetString(go, "--pfamtblout")); ESL_ALLOC(list, sizeof(MSV_BLOCK)); list->complete = 0; list->size = 0; list->current = 0; list->last = 0; list->blocks = NULL; output_header(ofp, go, cfg->hmmfile, cfg->seqfile); qsq = esl_sq_CreateDigital(abc); bg = p7_bg_Create(abc); /* Outside loop: over each query sequence in . */ while ((sstatus = esl_sqio_Read(sqfp, qsq)) == eslOK) { P7_PIPELINE *pli = NULL; /* processing pipeline */ P7_TOPHITS *th = NULL; /* top-scoring sequence hits */ nquery++; esl_stopwatch_Start(w); /* seqfile may need to be rewound (multiquery mode) */ if (nquery > 1) list->current = 0; /* Open the target profile database */ status = p7_hmmfile_OpenE(cfg->hmmfile, p7_HMMDBENV, &hfp, NULL); if (status != eslOK) mpi_failure("Unexpected error %d in opening hmm file %s.\n", status, cfg->hmmfile); if (fprintf(ofp, "Query: %s [L=%ld]\n", qsq->name, (long) qsq->n) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (qsq->acc[0] != 0 && fprintf(ofp, "Accession: %s\n", qsq->acc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (qsq->desc[0] != 0 && fprintf(ofp, "Description: %s\n", qsq->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); /* Create processing pipeline and hit list */ th = p7_tophits_Create(); pli = p7_pipeline_Create(go, 100, 100, FALSE, p7_SCAN_MODELS); /* M_hint = 100, L_hint = 100 are just dummies for now */ pli->hfp = hfp; /* for two-stage input, pipeline needs */ p7_pli_NewSeq(pli, qsq); /* Main loop: */ while ((hstatus = next_block(hfp, list, &block)) == eslOK) { if (MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &mpistatus) != 0) mpi_failure("MPI error %d receiving message from %d\n", mpistatus.MPI_SOURCE); MPI_Get_count(&mpistatus, MPI_PACKED, &size); if (mpi_buf == NULL || size > mpi_size) { void *tmp; ESL_RALLOC(mpi_buf, tmp, sizeof(char) * size); mpi_size = size; } dest = mpistatus.MPI_SOURCE; MPI_Recv(mpi_buf, size, MPI_PACKED, dest, mpistatus.MPI_TAG, MPI_COMM_WORLD, &mpistatus); if (mpistatus.MPI_TAG == HMMER_ERROR_TAG) mpi_failure("MPI client %d raised error:\n%s\n", dest, mpi_buf); if (mpistatus.MPI_TAG != HMMER_READY_TAG) mpi_failure("Unexpected tag %d from %d\n", mpistatus.MPI_TAG, dest); MPI_Send(&block, 3, MPI_LONG_LONG_INT, dest, HMMER_BLOCK_TAG, MPI_COMM_WORLD); } switch(hstatus) { case eslEFORMAT: mpi_failure("bad file format in HMM file %s", cfg->hmmfile); break; case eslEINCOMPAT: mpi_failure("HMM file %s contains different alphabets", cfg->hmmfile); break; case eslEOF: /* do nothing */ break; default: mpi_failure("Unexpected error %d in reading HMMs from %s", hstatus, cfg->hmmfile); } block.offset = 0; block.length = 0; block.count = 0; /* wait for all workers to finish up their work blocks */ for (i = 1; i < cfg->nproc; ++i) { if (MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &mpistatus) != 0) mpi_failure("MPI error %d receiving message from %d\n", mpistatus.MPI_SOURCE); MPI_Get_count(&mpistatus, MPI_PACKED, &size); if (mpi_buf == NULL || size > mpi_size) { void *tmp; ESL_RALLOC(mpi_buf, tmp, sizeof(char) * size); mpi_size = size; } dest = mpistatus.MPI_SOURCE; MPI_Recv(mpi_buf, size, MPI_PACKED, dest, mpistatus.MPI_TAG, MPI_COMM_WORLD, &mpistatus); if (mpistatus.MPI_TAG == HMMER_ERROR_TAG) mpi_failure("MPI client %d raised error:\n%s\n", dest, mpi_buf); if (mpistatus.MPI_TAG != HMMER_READY_TAG) mpi_failure("Unexpected tag %d from %d\n", mpistatus.MPI_TAG, dest); } /* merge the results of the search results */ for (dest = 1; dest < cfg->nproc; ++dest) { P7_PIPELINE *mpi_pli = NULL; P7_TOPHITS *mpi_th = NULL; /* send an empty block to signal the worker they are done */ MPI_Send(&block, 3, MPI_LONG_LONG_INT, dest, HMMER_BLOCK_TAG, MPI_COMM_WORLD); /* wait for the results */ if ((status = p7_tophits_MPIRecv(dest, HMMER_TOPHITS_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size, &mpi_th)) != eslOK) mpi_failure("Unexpected error %d receiving tophits from %d", status, dest); if ((status = p7_pipeline_MPIRecv(dest, HMMER_PIPELINE_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size, go, &mpi_pli)) != eslOK) mpi_failure("Unexpected error %d receiving pipeline from %d", status, dest); p7_tophits_Merge(th, mpi_th); p7_pipeline_Merge(pli, mpi_pli); p7_pipeline_Destroy(mpi_pli); p7_tophits_Destroy(mpi_th); } /* Print the results. */ p7_tophits_SortBySortkey(th); p7_tophits_Threshold(th, pli); p7_tophits_Targets(ofp, th, pli, textw); fprintf(ofp, "\n\n"); p7_tophits_Domains(ofp, th, pli, textw); fprintf(ofp, "\n\n"); if (tblfp) p7_tophits_TabularTargets(tblfp, qsq->name, qsq->acc, th, pli, (nquery == 1)); if (domtblfp) p7_tophits_TabularDomains(domtblfp, qsq->name, qsq->acc, th, pli, (nquery == 1)); if (pfamtblfp) p7_tophits_TabularXfam(pfamtblfp, qsq->name, qsq->acc, th, pli); esl_stopwatch_Stop(w); p7_pli_Statistics(ofp, pli, w); if (fprintf(ofp, "//\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); p7_hmmfile_Close(hfp); p7_pipeline_Destroy(pli); p7_tophits_Destroy(th); esl_sq_Reuse(qsq); } if (sstatus == eslEFORMAT) mpi_failure("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (sstatus != eslEOF) mpi_failure("Unexpected error %d reading sequence file %s", sstatus, sqfp->filename); /* monitor all the workers to make sure they have ended */ for (i = 1; i < cfg->nproc; ++i) { if (MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &mpistatus) != 0) mpi_failure("MPI error %d receiving message from %d\n", mpistatus.MPI_SOURCE); MPI_Get_count(&mpistatus, MPI_PACKED, &size); if (mpi_buf == NULL || size > mpi_size) { void *tmp; ESL_RALLOC(mpi_buf, tmp, sizeof(char) * size); mpi_size = size; } dest = mpistatus.MPI_SOURCE; MPI_Recv(mpi_buf, size, MPI_PACKED, dest, mpistatus.MPI_TAG, MPI_COMM_WORLD, &mpistatus); if (mpistatus.MPI_TAG == HMMER_ERROR_TAG) mpi_failure("MPI client %d raised error:\n%s\n", dest, mpi_buf); if (mpistatus.MPI_TAG != HMMER_TERMINATING_TAG) mpi_failure("Unexpected tag %d from %d\n", mpistatus.MPI_TAG, dest); } /* Terminate outputs - any last words? */ if (tblfp) p7_tophits_TabularTail(tblfp, "hmmscan", p7_SCAN_MODELS, cfg->seqfile, cfg->hmmfile, go); if (domtblfp) p7_tophits_TabularTail(domtblfp, "hmmscan", p7_SCAN_MODELS, cfg->seqfile, cfg->hmmfile, go); if (pfamtblfp)p7_tophits_TabularTail(pfamtblfp, "hmmscan", p7_SEARCH_SEQS, cfg->seqfile, cfg->hmmfile, go); if (ofp) { if (fprintf(ofp, "[ok]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } /* Cleanup - prepare for successful exit */ free(list); if (mpi_buf != NULL) free(mpi_buf); p7_bg_Destroy(bg); esl_sq_Destroy(qsq); esl_stopwatch_Destroy(w); esl_alphabet_Destroy(abc); esl_sqfile_Close(sqfp); if (ofp != stdout) fclose(ofp); if (tblfp) fclose(tblfp); if (domtblfp) fclose(domtblfp); if (pfamtblfp) fclose(pfamtblfp); return eslOK; ERROR: return status; } static int mpi_worker(ESL_GETOPTS *go, struct cfg_s *cfg) { int seqfmt = eslSQFILE_UNKNOWN; /* format of seqfile */ P7_BG *bg = NULL; /* null model */ ESL_SQFILE *sqfp = NULL; /* open seqfile */ P7_HMMFILE *hfp = NULL; /* open HMM database file */ ESL_ALPHABET *abc = NULL; /* sequence alphabet */ P7_OPROFILE *om = NULL; /* target profile */ ESL_STOPWATCH *w = NULL; /* timing */ ESL_SQ *qsq = NULL; /* query sequence */ int status = eslOK; int hstatus = eslOK; int sstatus = eslOK; char *mpi_buf = NULL; /* buffer used to pack/unpack structures */ int mpi_size = 0; /* size of the allocated buffer */ MPI_Status mpistatus; char errbuf[eslERRBUFSIZE]; w = esl_stopwatch_Create(); /* Open the target profile database to get the sequence alphabet */ status = p7_hmmfile_OpenE(cfg->hmmfile, p7_HMMDBENV, &hfp, errbuf); if (status == eslENOTFOUND) mpi_failure("File existence/permissions problem in trying to open HMM file %s.\n%s\n", cfg->hmmfile, errbuf); else if (status == eslEFORMAT) mpi_failure("File format problem in trying to open HMM file %s.\n%s\n", cfg->hmmfile, errbuf); else if (status != eslOK) mpi_failure("Unexpected error %d in opening HMM file %s.\n%s\n", status, cfg->hmmfile, errbuf); if (! hfp->is_pressed) mpi_failure("Failed to open binary dbs for HMM file %s: use hmmpress first\n", hfp->fname); hstatus = p7_oprofile_ReadMSV(hfp, &abc, &om); if (hstatus == eslEFORMAT) mpi_failure("bad file format in HMM file %s", cfg->hmmfile); else if (hstatus == eslEINCOMPAT) mpi_failure("HMM file %s contains different alphabets", cfg->hmmfile); else if (hstatus != eslOK) mpi_failure("Unexpected error in reading HMMs from %s", cfg->hmmfile); p7_oprofile_Destroy(om); p7_hmmfile_Close(hfp); /* Open the query sequence database */ status = esl_sqfile_OpenDigital(abc, cfg->seqfile, seqfmt, NULL, &sqfp); if (status == eslENOTFOUND) mpi_failure("Failed to open sequence file %s for reading\n", cfg->seqfile); else if (status == eslEFORMAT) mpi_failure("Sequence file %s is empty or misformatted\n", cfg->seqfile); else if (status == eslEINVAL) mpi_failure("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) mpi_failure("Unexpected error %d opening sequence file %s\n", status, cfg->seqfile); qsq = esl_sq_CreateDigital(abc); bg = p7_bg_Create(abc); /* Outside loop: over each query sequence in . */ while ((sstatus = esl_sqio_Read(sqfp, qsq)) == eslOK) { P7_PIPELINE *pli = NULL; /* processing pipeline */ P7_TOPHITS *th = NULL; /* top-scoring sequence hits */ MSV_BLOCK block; esl_stopwatch_Start(w); status = 0; MPI_Send(&status, 1, MPI_INT, 0, HMMER_READY_TAG, MPI_COMM_WORLD); /* Open the target profile database */ status = p7_hmmfile_OpenE(cfg->hmmfile, p7_HMMDBENV, &hfp, NULL); if (status != eslOK) mpi_failure("Unexpected error %d in opening hmm file %s.\n", status, cfg->hmmfile); /* Create processing pipeline and hit list */ th = p7_tophits_Create(); pli = p7_pipeline_Create(go, 100, 100, FALSE, p7_SCAN_MODELS); /* M_hint = 100, L_hint = 100 are just dummies for now */ pli->hfp = hfp; /* for two-stage input, pipeline needs */ p7_pli_NewSeq(pli, qsq); /* receive a sequence block from the master */ MPI_Recv(&block, 3, MPI_LONG_LONG_INT, 0, HMMER_BLOCK_TAG, MPI_COMM_WORLD, &mpistatus); while (block.count > 0) { uint64_t length = 0; uint64_t count = block.count; hstatus = p7_oprofile_Position(hfp, block.offset); if (hstatus != eslOK) mpi_failure("Cannot position optimized model to %ld\n", block.offset); while (count > 0 && (hstatus = p7_oprofile_ReadMSV(hfp, &abc, &om)) == eslOK) { length = om->eoff - block.offset + 1; p7_pli_NewModel(pli, om, bg); p7_bg_SetLength(bg, qsq->n); p7_oprofile_ReconfigLength(om, qsq->n); p7_Pipeline(pli, om, bg, qsq, th); p7_oprofile_Destroy(om); p7_pipeline_Reuse(pli); --count; } /* check the status of reading the hmm */ /* lets do a little bit of sanity checking here to make sure the blocks are the same */ if (count > 0) { switch(hstatus) { case eslEFORMAT: mpi_failure("bad file format in HMM file %s", cfg->hmmfile); break; case eslEINCOMPAT: mpi_failure("HMM file %s contains different alphabets", cfg->hmmfile); break; case eslOK: case eslEOF: mpi_failure("Block count mismatch - expected %ld found %ld at offset %ld\n", block.count, block.count-count, block.offset); break; default: mpi_failure("Unexpected error %d in reading HMMs from %s", hstatus, cfg->hmmfile); } } if (block.length != length) mpi_failure("Block length mismatch - expected %ld found %ld at offset %ld\n", block.length, length, block.offset); /* inform the master we need another block of sequences */ status = 0; MPI_Send(&status, 1, MPI_INT, 0, HMMER_READY_TAG, MPI_COMM_WORLD); /* wait for the next block of sequences */ MPI_Recv(&block, 3, MPI_LONG_LONG_INT, 0, HMMER_BLOCK_TAG, MPI_COMM_WORLD, &mpistatus); } esl_stopwatch_Stop(w); /* Send the top hits back to the master. */ p7_tophits_MPISend(th, 0, HMMER_TOPHITS_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size); p7_pipeline_MPISend(pli, 0, HMMER_PIPELINE_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size); p7_hmmfile_Close(hfp); p7_pipeline_Destroy(pli); p7_tophits_Destroy(th); esl_sq_Reuse(qsq); } /* end outer loop over query HMMs */ if (sstatus == eslEFORMAT) mpi_failure("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (sstatus != eslEOF) mpi_failure("Unexpected error %d reading sequence file %s", sstatus, sqfp->filename); status = 0; MPI_Send(&status, 1, MPI_INT, 0, HMMER_TERMINATING_TAG, MPI_COMM_WORLD); if (mpi_buf != NULL) free(mpi_buf); p7_bg_Destroy(bg); esl_sq_Destroy(qsq); esl_stopwatch_Destroy(w); esl_alphabet_Destroy(abc); esl_sqfile_Close(sqfp); return eslOK; } #endif /*HAVE_MPI*/ static int serial_loop(WORKER_INFO *info, P7_HMMFILE *hfp) { int status; P7_OPROFILE *om; ESL_ALPHABET *abc = NULL; /* Main loop: */ while ((status = p7_oprofile_ReadMSV(hfp, &abc, &om)) == eslOK) { p7_pli_NewModel(info->pli, om, info->bg); p7_bg_SetLength(info->bg, info->qsq->n); p7_oprofile_ReconfigLength(om, info->qsq->n); p7_Pipeline(info->pli, om, info->bg, info->qsq, info->th); p7_oprofile_Destroy(om); p7_pipeline_Reuse(info->pli); } esl_alphabet_Destroy(abc); return status; } #ifdef HMMER_THREADS static int thread_loop(ESL_THREADS *obj, ESL_WORK_QUEUE *queue, P7_HMMFILE *hfp) { int status = eslOK; int sstatus = eslOK; int eofCount = 0; P7_OM_BLOCK *block; ESL_ALPHABET *abc = NULL; void *newBlock; esl_workqueue_Reset(queue); esl_threads_WaitForStart(obj); status = esl_workqueue_ReaderUpdate(queue, NULL, &newBlock); if (status != eslOK) esl_fatal("Work queue reader failed"); /* Main loop: */ while (sstatus == eslOK) { block = (P7_OM_BLOCK *) newBlock; sstatus = p7_oprofile_ReadBlockMSV(hfp, &abc, block); if (sstatus == eslEOF) { if (eofCount < esl_threads_GetWorkerCount(obj)) sstatus = eslOK; ++eofCount; } if (sstatus == eslOK) { status = esl_workqueue_ReaderUpdate(queue, block, &newBlock); if (status != eslOK) esl_fatal("Work queue reader failed"); } } status = esl_workqueue_ReaderUpdate(queue, block, NULL); if (status != eslOK) esl_fatal("Work queue reader failed"); if (sstatus == eslEOF) { /* wait for all the threads to complete */ esl_threads_WaitForFinish(obj); esl_workqueue_Complete(queue); } esl_alphabet_Destroy(abc); return sstatus; } static void pipeline_thread(void *arg) { int i; int status; int workeridx; WORKER_INFO *info; ESL_THREADS *obj; P7_OM_BLOCK *block; void *newBlock; impl_Init(); obj = (ESL_THREADS *) arg; esl_threads_Started(obj, &workeridx); info = (WORKER_INFO *) esl_threads_GetData(obj, workeridx); status = esl_workqueue_WorkerUpdate(info->queue, NULL, &newBlock); if (status != eslOK) esl_fatal("Work queue worker failed"); /* loop until all blocks have been processed */ block = (P7_OM_BLOCK *) newBlock; while (block->count > 0) { /* Main loop: */ for (i = 0; i < block->count; ++i) { P7_OPROFILE *om = block->list[i]; p7_pli_NewModel(info->pli, om, info->bg); p7_bg_SetLength(info->bg, info->qsq->n); p7_oprofile_ReconfigLength(om, info->qsq->n); p7_Pipeline(info->pli, om, info->bg, info->qsq, info->th); p7_oprofile_Destroy(om); p7_pipeline_Reuse(info->pli); block->list[i] = NULL; } status = esl_workqueue_WorkerUpdate(info->queue, block, &newBlock); if (status != eslOK) esl_fatal("Work queue worker failed"); block = (P7_OM_BLOCK *) newBlock; } status = esl_workqueue_WorkerUpdate(info->queue, block, NULL); if (status != eslOK) esl_fatal("Work queue worker failed"); esl_threads_Finished(obj, workeridx); return; } #endif /* HMMER_THREADS */ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: hmmscan.c 4583 2013-12-30 18:56:25Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/hmmscan.c $ *****************************************************************/ hmmer-3.1b2/src/cachedb.h0000664361611702660230000000450412473612612014603 0ustar wheelerteddy#ifndef P7_CACHEDB_INCLUDED #define P7_CACHEDB_INCLUDED typedef struct { char *name; /* name; ("\0" if no name) */ ESL_DSQ *dsq; /* digitized sequence [1..n] */ int64_t n; /* length of dsq */ int64_t idx; /* ctr for this seq */ uint64_t db_key; /* flag for included databases */ char *desc; /* description */ } HMMER_SEQ; typedef struct { uint32_t count; /* number of entries */ uint32_t K; /* original number of entries */ HMMER_SEQ **list; /* list of sequences [0 .. count-1] */ } SEQ_DB; typedef struct { char *name; /* name of the seq database */ char *id; /* unique identifier string */ uint32_t db_cnt; /* number of sub databases */ SEQ_DB *db; /* list of databases [0 .. db_cnt-1] */ ESL_ALPHABET *abc; /* alphabet for database */ uint32_t count; /* total number of sequences */ HMMER_SEQ *list; /* complete list of sequences (count) */ void *residue_mem; /* memory holding the residues */ char *header_mem; /* memory holding the header strings */ uint64_t res_size; /* size of residue memory allocation */ uint64_t hdr_size; /* size of header memory allocation */ } P7_SEQCACHE; extern int p7_seqcache_Open(char *seqfile, P7_SEQCACHE **ret_cache, char *errbuf); extern void p7_seqcache_Close(P7_SEQCACHE *cache); #endif /*P7_CACHEDB_INCLUDED*/ /************************************************************ * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. ************************************************************/ hmmer-3.1b2/src/hmmdutils.c0000664361611702660230000002675212473612613015245 0ustar wheelerteddy/* hmmpgmd: hmmer deamon searchs against a sequence database. * * MSF, Thu Aug 12, 2010 [Janelia] * SVN $Id: hmmdutils.c 4423 2013-04-12 18:56:33Z wheelert $ */ #include "p7_config.h" #ifdef HMMER_THREADS #include #include #include #include #include #include #include #include #include #include #include #include #ifndef HMMER_THREADS #error "Program requires pthreads be enabled." #endif /*HMMER_THREADS*/ #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stopwatch.h" #include "esl_threads.h" #include "esl_regexp.h" #include "hmmer.h" #include "hmmpgmd.h" #include "cachedb.h" #define MAX_WORKERS 64 #define MAX_BUFFER 4096 #define CONF_FILE "/etc/hmmpgmd.conf" #define REPOPTS "-E,-T,--cut_ga,--cut_nc,--cut_tc" #define DOMREPOPTS "--domE,--domT,--cut_ga,--cut_nc,--cut_tc" #define INCOPTS "--incE,--incT,--cut_ga,--cut_nc,--cut_tc" #define INCDOMOPTS "--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #define THRESHOPTS "-E,-T,--domE,--domT,--incE,--incT,--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #define STAGEOPTS "--F1,--F2,--F3" static ESL_OPTIONS searchOpts[] = { /* Control of output */ { "--acc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "prefer accessions over names in output", 2 }, { "--noali", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "don't output alignments, so output is smaller", 2 }, /* Control of scoring system */ { "--popen", eslARG_REAL, "0.02", NULL, "0<=x<0.5",NULL, NULL, NULL, "gap open probability", 3 }, { "--pextend", eslARG_REAL, "0.4", NULL, "0<=x<1", NULL, NULL, NULL, "gap extend probability", 3 }, { "--mx", eslARG_STRING, "BLOSUM62", NULL, NULL, NULL, NULL, "--mxfile", "substitution score matrix choice (of some built-in matrices)", 3 }, { "--mxfile", eslARG_INFILE, NULL, NULL, NULL, NULL, NULL, "--mx", "read substitution score matrix from file ", 3 }, /* Control of reporting thresholds */ { "-E", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, REPOPTS, "report sequences <= this E-value threshold in output", 4 }, { "-T", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, REPOPTS, "report sequences >= this score threshold in output", 4 }, { "--domE", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, DOMREPOPTS, "report domains <= this E-value threshold in output", 4 }, { "--domT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, DOMREPOPTS, "report domains >= this score cutoff in output", 4 }, /* Control of inclusion (significance) thresholds */ { "--incE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, INCOPTS, "consider sequences <= this E-value threshold as significant", 5 }, { "--incT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCOPTS, "consider sequences >= this score threshold as significant", 5 }, { "--incdomE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, INCDOMOPTS, "consider domains <= this E-value threshold as significant", 5 }, { "--incdomT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCDOMOPTS, "consider domains >= this score threshold as significant", 5 }, /* Model-specific thresholding for both reporting and inclusion */ { "--cut_ga", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's GA gathering cutoffs to set all thresholding", 6 }, { "--cut_nc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's NC noise cutoffs to set all thresholding", 6 }, { "--cut_tc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's TC trusted cutoffs to set all thresholding", 6 }, /* Control of acceleration pipeline */ { "--max", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, STAGEOPTS, "Turn all heuristic filters off (less speed, more power)", 7 }, { "--F1", eslARG_REAL, "0.02", NULL, NULL, NULL, NULL, "--max", "Stage 1 (MSV) threshold: promote hits w/ P <= F1", 7 }, { "--F2", eslARG_REAL, "1e-3", NULL, NULL, NULL, NULL, "--max", "Stage 2 (Vit) threshold: promote hits w/ P <= F2", 7 }, { "--F3", eslARG_REAL, "1e-5", NULL, NULL, NULL, NULL, "--max", "Stage 3 (Fwd) threshold: promote hits w/ P <= F3", 7 }, { "--nobias", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--max", "turn off composition bias filter", 7 }, /* Control of E-value calibration */ { "--EmL", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "length of sequences for MSV Gumbel mu fit", 11 }, { "--EmN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for MSV Gumbel mu fit", 11 }, { "--EvL", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "length of sequences for Viterbi Gumbel mu fit", 11 }, { "--EvN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for Viterbi Gumbel mu fit", 11 }, { "--EfL", eslARG_INT, "100", NULL,"n>0", NULL, NULL, NULL, "length of sequences for Forward exp tail tau fit", 11 }, { "--EfN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for Forward exp tail tau fit", 11 }, { "--Eft", eslARG_REAL, "0.04", NULL,"0=0", NULL, NULL, NULL, "set RNG seed to (if 0: one-time arbitrary seed)", 12 }, { "--nonull2", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "turn off biased composition score corrections", 12 }, { "-Z", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of comparisons done, for E-value calculation", 12 }, { "--domZ", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of significant seqs, for domain E-value calculation", 12 }, { "--hmmdb", eslARG_INT, NULL, NULL, "n>0", NULL, NULL, "--seqdb", "hmm database to search", 12 }, { "--seqdb", eslARG_INT, NULL, NULL, "n>0", NULL, NULL, "--hmmdb", "protein database to search", 12 }, { "--seqdb_ranges",eslARG_STRING, NULL, NULL, NULL, NULL, "--seqdb", NULL, "range(s) of sequences within --seqdb that will be searched", 12 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; size_t writen(int fd, const void *vptr, size_t n) { ssize_t remaining; ssize_t outn; const char *ptr; ptr = vptr; remaining = n; while (remaining > 0) { if ((outn = write(fd, ptr, remaining)) <= 0) { if (outn < 0 && errno == EINTR) { outn = 0; } else { return -1; } } remaining -= outn; ptr += outn; } return n; } size_t readn(int fd, void *vptr, size_t n) { size_t remaining; size_t bytes; char *ptr; ptr = vptr; remaining = n; while (remaining > 0) { if ((bytes = read(fd, ptr, remaining)) <= 0) { if (errno == EINTR) { bytes = 0; } else { return -1; } } remaining -= bytes; ptr += bytes; } return n - remaining; } #define LOG_TO_STDOUT #ifdef LOG_TO_STDOUT void p7_openlog(const char *ident, int option, int facility) { /* do nothing */ return; } void p7_syslog(int priority, const char *format, ...) { va_list ap; printf("\n*** ERROR ***\n"); va_start(ap, format); vprintf(format, ap); va_end(ap); printf("\n"); fflush(stdout); return; } void p7_closelog(void) { /* do nothing */ return; } #endif int process_searchopts(int fd, char *cmdstr, ESL_GETOPTS **ret_opts) { int status; ESL_GETOPTS *go = NULL; if ((go = esl_getopts_Create(searchOpts)) == NULL) return eslEMEM; if ((status = esl_opt_ProcessSpoof(go, cmdstr)) != eslOK) return status; if ((status = esl_opt_VerifyConfig(go)) != eslOK) return status; *ret_opts = go; return eslOK; } void free_QueueData(QUEUE_DATA *data) { /* free the query data */ esl_getopts_Destroy(data->opts); if (data->abc != NULL) esl_alphabet_Destroy(data->abc); if (data->hmm != NULL) p7_hmm_Destroy(data->hmm); if (data->seq != NULL) esl_sq_Destroy(data->seq); if (data->cmd != NULL) free(data->cmd); memset(data, 0, sizeof(*data)); free(data); } /* Function: hmmpgmd_IsWithinRanges() * Synopsis: Test if the given id falls within one of a collection of ranges * * Purpose: Given an index and a number of ranges stored in two * parallel arrays of start () and end () * positions, return TRUE if sq_idx falls in one of the ranges. * Otherwise return FALSE; * * Returns: if within range(s), otherwise */ int hmmpgmd_IsWithinRanges (int64_t sq_idx, RANGE_LIST *list ) { int i; for (i=0; iN; i++) { if (sq_idx >= list->starts[i] && sq_idx <= list->ends[i] ) return TRUE; } return FALSE; } /* Function: hmmpgmd_GetRanges() * Synopsis: Parse command flag into range(s) * * Purpose: Given a command flag string of the form * ..,..... * parse the string into a RANGE_LIST * * Returns: on success , on memory allocation failure, * otherwise or on parsing errors. */ int hmmpgmd_GetRanges (RANGE_LIST *list, char *rangestr) { char *range; char *rangestr_cpy; char *rangestr_cpy_ptr; int status; list->N = 0; list->starts = NULL; list->ends = NULL; //first pass to figure out how much to allocate esl_strdup(rangestr, -1, &rangestr_cpy); // do this because esl_strtok modifies the string, and we shouldn't change the opts value rangestr_cpy_ptr = rangestr_cpy; // do this because esl_strtok advances the pointer on the target string, but we need to free it while ( (status = esl_strtok(&rangestr_cpy, ",", &range) ) == eslOK) list->N++; ESL_ALLOC(list->starts, list->N * sizeof(int)); ESL_ALLOC(list->ends, list->N * sizeof(int)); free(rangestr_cpy_ptr); //2nd pass to get the values list->N = 0; esl_strdup(rangestr, -1, &rangestr_cpy); rangestr_cpy_ptr = rangestr_cpy; while ( (status = esl_strtok(&rangestr_cpy, ",", &range) ) == eslOK) { status = esl_regexp_ParseCoordString(range, list->starts + list->N, list->ends + list->N); if (status == eslESYNTAX) esl_fatal("--seqdb_ranges takes coords ..; %s not recognized", range); if (status == eslFAIL) esl_fatal("Failed to find or coord in %s", range); list->N++; } free(rangestr_cpy_ptr); return eslOK; ERROR: return eslEMEM; } #endif /*HMMER_THREADS*/ hmmer-3.1b2/src/p7_gmxchk.h0000664361611702660230000002113012473612614015115 0ustar wheelerteddy/* P7_GMXCHK implementation * * Checkpointed forward/backward dynamic programming matrix. * * Contents: * 1. Exegesis: layout of rows in a checkpointed matrix. * 2. Exegesis: layout of cells in a single DP row. * 3. The P7_GMXCHK data structure. * 4. Declarations for the p7_gmxchk API * 5. References. * 6. Copyright and license. */ #ifndef P7_GMXCHK_INCLUDED #define P7_GMXCHK_INCLUDED #include "p7_config.h" /***************************************************************** * 1. Exegesis: layout of rows in a checkpointed matrix. *****************************************************************/ /* * One P7_GMXCHK data structure is used for both Forward and Backward * computations on a target sequence. The Forward calculation is * checkpointed. The Backward calculation is linear memory in two * rows. The end result is a Forward score and a posterior-decoded set * of DP bands. * * In the diagram below, showing the row layout for the main matrix (MDI states): * O = a checkpointed row; * x = row that isn't checkpointed; * * = boundary row 0, plus row(s) used for Backwards * * i = index of residues in a target sequence of length L * r = index of rows in the DP matrix, R0+R in total * * |------------------------- L -------------------------------| * |-----La----| |-Lb-| |-------------- Lc --------------------| * i = . . 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 * * * * O O O O O x O x x x x O x x x O x x O x O * r = 0 1 2 3 4 5 6 7 . 8 . . . . 9 . . . 10 . . 11 . 12 * |--R0-| |-----Ra----| |-Rb-| |-------------- Rc --------------------| * |------------------------- R -------------------------------| * * There are four regions in the rows: * region 0 (R0) : boundary row 0, and Backwards' two rows * region a ("all"; Ra) : all rows are kept (no checkpointing) * region b ("between"; Rb) : partially checkpointed * region c ("checkpointed; Rc) : fully checkpointed * * In region a, La = Rb * In region b, Rb = 0|1, Lb = 0..Rc+1 * more specificially: (Rb=0 && Lb=0) || (Rb=1 && 1 <= Lb <= Rc+1) * In region c, Lc = {{Rc+2} \choose {2}}-1 = (Rc+2)(Rc+1)/2 - 1 * * In this example: * R0 = 3 * Ra = 5 La = 5 * Rb = 1 La = 2 * Rc = 4 Lc = 14 * * In checkpointed regions, we refer to "blocks", often indexed * . There are Rb+Rc blocks, and each block ends in a checkpointed * row. The "width" of each block, often called , decrements from * Rc+1 down to 2 in the fully checkpointed region. * * The reason to mix checkpointing and non-checkpointing is that we * use as many rows as we can, given a set memory ceiling, to minimize * computation time. * * The special states (ENJBC) are kept in xmx for all rows 1..L, just * as in a normal (uncheckpointed) P7_GMX. */ /***************************************************************** * 2. Exegesis: layout of rows in a checkpointed matrix. *****************************************************************/ /* Layout of memory in a single DP row: * * dpc: [M I D] [M I D] [M I D] ... [M I D] [E N JJ J B CC C] * k: |-- 0 --| |-- 1 --| |-- 2 --| ... |-- M --| * |------------- (M+1)*p7G_NSCELLS -----------| |---- p7GC_NXCELLS ---| * * Row dp[r] = gxc->dp_mem+(r*allocW) = dpc * Main state s={MID} at node k={0..M}: dpc[k*p7G_NSCELLS+s] * Special state s={ENJBC,CC,JJ}: dpc[(M+1)*p7G_NSCELLS+s] * * We need to store "JJ" and "CC" states -- the partial path * probabilities from C(i-1)->C and J(i-1)->J -- because the * checkpointed implementation does not necessarily have access to * values on row i-1 when it does posterior decoding. * from is replaced by in , and * from 0..4 {ENJBC} with from * 0..6 {E,N,JJ,J,B,CC,C}. */ /***************************************************************** * 3. The P7_GMXCHK data structure. *****************************************************************/ /* p7GC_NXCELLS and p7gc_xcells_e * * For main states we share p7G_NSCELLS and p7G_{MID} with P7_GMX. * For special states, we replace with an array * that inserts CC and JJ cells, which the checkpointed implementation * needs. (See note 2 above.) Note that the order of the p7GC_{X} * special states is not the same as p7G_{X}, so they should not be * mixed. */ enum p7gc_xcells_e { p7GC_E = 0, p7GC_N = 1, p7GC_JJ = 2, p7GC_J = 3, p7GC_B = 4, p7GC_CC = 5, p7GC_C = 6 }; #define p7GC_NXCELLS 7 typedef struct p7_gmxchk_s { int M; /* actual query model dimension of current comparison */ int L; /* actual target sequence dimension of current comparison */ int R; /* actual # rows in current fwd matrix (<= Ra+Rb+Rc), excluding R0 */ /* Checkpointed layout, mapping rows 1..R to residues 1..L: */ int R0; /* # of extra rows: one for fwd[0] boundary, two for bck[prv,cur] */ int Ra; /* # of rows used in "all" region (uncheckpointed) */ int Rb; /* # of rows in "between" region (one incomplete checkpoint segment) */ int Rc; /* # of rows in "checkpointed" region */ int La; /* residues 1..La are in "all" region */ int Lb; /* residues La+1..La+Lb are in "between" region */ int Lc; /* residues La+Lb+1..La+Lb+Lc=L are in "checkpointed" region */ float *dp_mem; /* raw memory allocation, that dp[] rows point into */ int allocW; /* allocated width/row, in cells ((M+1)*p7G_NSCELLS+p7G_NXCELLS) <= allocW) */ int64_t ncells; /* total # of alloc'ed cells: ncells >= (validR)(allocW) */ int64_t ncell_limit; /* recommended RAM limit on dp_mem; can temporarily exceed it */ float **dp; /* DP row pointers, dp[0..R0-1,R0..R0+R-1]. See note above for layout. */ int allocR; /* allocated size of dp[]. R+R0 <= R0+Ra+Rb+Rc <= validR <= allocR */ int validR; /* # of rows pointing at DP memory; may be < allocR after a GrowTo() call */ /* Info for debugging mode (conditionally compiled) */ #ifdef p7_DEBUGGING int do_debugging; /* TRUE if we're in debugging mode */ FILE *dfp; /* output stream for debugging diagnostics */ int dbg_width; /* cell values in diagnostic output are fprintf'ed */ int dbg_precision; /* dfp, "%*.*f", dbg_width, dbg_precision, val */ int dbg_flags; /* p7_DEFAULT | p7_HIDE_SPECIALS | p7_SHOW_LOG */ #endif } P7_GMXCHK; #define MMR(p, k) ((p)[(k)* p7G_NSCELLS + p7G_M]) #define IMR(p, k) ((p)[(k)* p7G_NSCELLS + p7G_I]) #define DMR(p, k) ((p)[(k)* p7G_NSCELLS + p7G_D]) #define XMR(p, s) ((p)[(M+1)* p7G_NSCELLS + s]) /***************************************************************** * 4. Declarations of the p7_gmxchk API *****************************************************************/ extern P7_GMXCHK *p7_gmxchk_Create (int M, int L, int64_t ramlimit); extern int p7_gmxchk_GrowTo (P7_GMXCHK *gxc, int M, int L); extern size_t p7_gmxchk_Sizeof (const P7_GMXCHK *gxc); extern int p7_gmxchk_Reuse (P7_GMXCHK *gxc); extern void p7_gmxchk_Destroy(P7_GMXCHK *gxc); extern int p7_gmxchk_Dump(FILE *ofp, P7_GMXCHK *gxc, int flags); extern int p7_gmxchk_SetDumpMode(P7_GMXCHK *gxc, FILE *ofp, int flags); extern int p7_gmxchk_DumpHeader(FILE *ofp, P7_GMXCHK *gxc, int kstart, int kend, int flags); extern int p7_gmxchk_DumpRow(FILE *ofp, P7_GMXCHK *gxc, float *dpc, int i, int kstart, int kend, int flags); /* * References: * SRE:J8/109-112, Oct 2011: Implementation plan */ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id$ * SVN $URL$ *****************************************************************/ #endif /*P7_GMXCHK_INCLUDED*/ hmmer-3.1b2/src/seqmodel.c0000664361611702660230000002700412473612614015040 0ustar wheelerteddy/* Creating profile HMMs from single sequences. * * Contents: * 1. Routines in the exposed API. * 2. Experiment driver: generating HMMs for hmmsim tests * 3. Unit tests. * 4. Test driver. * 5. Copyright and license. */ #include "p7_config.h" #include "easel.h" #include "esl_vectorops.h" #include "hmmer.h" /***************************************************************** * 1. Routines in the exposed API. *****************************************************************/ /* Function: p7_Seqmodel() * Synopsis: Make a profile HMM from a single sequence. * * Purpose: Make a profile HMM from a single sequence, for * probabilistic Smith/Waterman alignment, HMMER3-style. * * The query is digital sequence of length * residues in alphabet , named . * * The scoring system is given by , , , and * . is a $K \times K$ matrix giving * conditional residue probabilities $P(a \mid b)}$; these * are typically obtained by reverse engineering a score * matrix like BLOSUM62. is a vector of $K$ background * frequencies $p_a$. and are the * probabilities assigned to gap-open ($t_{MI}$ and * $t_{MD}$) and gap-extend ($t_{II}$ and $t_{DD}$) * transitions. * * Args: * * Returns: on success, and a newly allocated HMM is returned * in . * * Throws: on allocation error, and <*ret_hmm> is . */ int p7_Seqmodel(const ESL_ALPHABET *abc, ESL_DSQ *dsq, int M, char *name, ESL_DMATRIX *Q, float *f, double popen, double pextend, P7_HMM **ret_hmm) { int status; P7_HMM *hmm = NULL; char *logmsg = "[HMM created from a query sequence]"; int k; if ((hmm = p7_hmm_Create(M, abc)) == NULL) { status = eslEMEM; goto ERROR; } for (k = 0; k <= M; k++) { /* Use rows of P matrix as source of match emission vectors */ if (k > 0) esl_vec_D2F(Q->mx[(int) dsq[k]], abc->K, hmm->mat[k]); /* Set inserts to background for now. This will be improved. */ esl_vec_FCopy(f, abc->K, hmm->ins[k]); hmm->t[k][p7H_MM] = 1.0 - 2 * popen; hmm->t[k][p7H_MI] = popen; hmm->t[k][p7H_MD] = popen; hmm->t[k][p7H_IM] = 1.0 - pextend; hmm->t[k][p7H_II] = pextend; hmm->t[k][p7H_DM] = 1.0 - pextend; hmm->t[k][p7H_DD] = pextend; } /* Deal w/ special stuff at node M, overwriting a little of what we * just did. */ hmm->t[M][p7H_MM] = 1.0 - popen; hmm->t[M][p7H_MD] = 0.; hmm->t[M][p7H_DM] = 1.0; hmm->t[M][p7H_DD] = 0.; /* Add mandatory annotation */ p7_hmm_SetName(hmm, name); p7_hmm_AppendComlog(hmm, 1, &logmsg); hmm->nseq = 1; p7_hmm_SetCtime(hmm); hmm->checksum = 0; *ret_hmm = hmm; return eslOK; ERROR: if (hmm != NULL) p7_hmm_Destroy(hmm); *ret_hmm = NULL; return status; } /***************************************************************** * 2. Experiment driver *****************************************************************/ #ifdef p7EXP_J2_1 /* Asking if single sequence queries (probabilistic Smith/Waterman) * still follow expected score distributions. This program creates * HMMs from one or more random sequences, and the HMMs can then * be tested in hmmsim. * * gcc -o seq2hmm -g -Wall -Dp7EXP_J2_1 -L../easel -I ../easel -L. -I. seqmodel.c -lhmmer -leasel -lm * ./seq2hmm */ #include "p7_config.h" #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_alphabet.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_dmatrix.h" #include "esl_scorematrix.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-m", eslARG_INFILE, NULL, NULL, NULL, NULL, NULL, NULL, "use substitution score matrix file from ", 0 }, { "-q", eslARG_REAL, "0.1", NULL, "0<=x<0.5",NULL, NULL, NULL, "gap open probability", 0 }, { "-r", eslARG_REAL, "0.4", NULL, "0<=x<1", NULL, NULL, NULL, "gap extend probability", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "collect histograms of probabilistic S/W for E-value calculations"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); char *hmmfile = esl_opt_GetArg(go, 1); char *qfile = esl_opt_GetArg(go, 2); ESL_SQ *qsq = esl_sq_CreateDigital(abc); ESL_SQFILE *qfp = NULL; FILE *hmmfp = NULL; ESL_SCOREMATRIX *S = esl_scorematrix_Create(abc); ESL_DMATRIX *Q = NULL; P7_BG *bg = p7_bg_Create(abc); P7_HMM *hmm = NULL; double *fa = NULL; double popen = esl_opt_GetReal (go, "-q"); double pextend = esl_opt_GetReal (go, "-r"); char *mxfile = esl_opt_GetString(go, "-m"); char errbuf[eslERRBUFSIZE]; double slambda; int a,b; int status; /* Reverse engineer a scoring matrix to obtain conditional prob's * that we'll use for the single-seq query HMM. Because score mx is * symmetric, we can set up P[a][b] = P(b | a), so we can use the * matrix rows as HMM match emission vectors. This means dividing * the joint probs through by f_a. */ if (mxfile == NULL) { if (esl_scorematrix_Set("BLOSUM62", S) != eslOK) esl_fatal("failed to set BLOSUM62 scores"); } else { ESL_FILEPARSER *efp = NULL; if ( esl_fileparser_Open(mxfile, NULL, &efp) != eslOK) esl_fatal("failed to open score file %s", mxfile); if ( esl_scorematrix_Read(efp, abc, &S) != eslOK) esl_fatal("failed to read matrix from %s", mxfile); esl_fileparser_Close(efp); } /* A wasteful conversion of the HMMER single-precision background probs to Easel double-prec */ ESL_ALLOC(fa, sizeof(double) * bg->abc->K); esl_vec_F2D(bg->f, bg->abc->K, fa); /* Backcalculate joint probabilities Q, given score matrix S and background frequencies fa */ status = esl_scorematrix_ProbifyGivenBG(S, fa, fa, &slambda, &Q); if (status == eslEINVAL) esl_fatal("built-in score matrix %s has no valid solution for lambda", matrix); else if (status == eslENOHALT) esl_fatal("failed to solve score matrix %s for lambda", matrix); else if (status != eslOK) esl_fatal("unexpected error in solving score matrix %s for probability parameters", matrix); esl_scorematrix_JointToConditionalOnQuery(abc, Q); /* Open the query sequence file in FASTA format */ status = esl_sqfile_Open(qfile, eslSQFILE_FASTA, NULL, &qfp); if (status == eslENOTFOUND) esl_fatal("No such file %s.", qfile); else if (status == eslEFORMAT) esl_fatal("Format of %s unrecognized.", qfile); else if (status == eslEINVAL) esl_fatal("Can't autodetect stdin or .gz."); else if (status != eslOK) esl_fatal("Open of %s failed, code %d.", qfile, status); /* Open the output HMM file */ if ((hmmfp = fopen(hmmfile, "w")) == NULL) esl_fatal("Failed to open output HMM file %s", hmmfile); /* For each sequence, build a model and save it. */ while ((status = esl_sqio_Read(qfp, qsq)) == eslOK) { p7_Seqmodel(abc, qsq->dsq, qsq->n, qsq->name, Q, bg->f, popen, pextend, &hmm); if ( p7_hmm_Validate(hmm, errbuf, 1e-5) != eslOK) esl_fatal("HMM validation failed: %s\n", errbuf); if ( p7_hmmfile_WriteASCII(hmmfp, -1, hmm) != eslOK) esl_fatal("HMM save failed"); p7_hmm_Destroy(hmm); } if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s line %" PRId64 "):\n%s\n", qfp->filename, qfp->linenumber, qfp->errbuf); else if (status != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", status, qfp->filename); esl_dmatrix_Destroy(Q); esl_scorematrix_Destroy(S); free(fa); free(fb); esl_sq_Destroy(qsq); esl_sqfile_Close(qfp); fclose(hmmfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7EXP_J2_1*/ /***************************************************************** * x. Unit tests. *****************************************************************/ #ifdef p7SEQMODEL_TESTDRIVE #include static void utest_normalization(ESL_GETOPTS *go) { char *msg = "seqmodel normalization utest failed"; ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); char *seq = "ACDEFGHIKLMNPQRSTVWYBJZOUX"; int L = strlen(seq); ESL_DSQ *dsq = NULL; float popen = 0.1; float pextend = 0.4; P7_BUILDER *bld = NULL; P7_BG *bg = p7_bg_Create(abc); P7_HMM *hmm = NULL; char errbuf[eslERRBUFSIZE]; if ( esl_abc_CreateDsq(abc, seq, &dsq) != eslOK) esl_fatal(msg); if ( (bld = p7_builder_Create(NULL, abc)) == NULL) esl_fatal(msg); if ( p7_builder_LoadScoreSystem(bld, "BLOSUM62", popen, pextend, bg) != eslOK) esl_fatal(msg); if ( p7_Seqmodel(abc, dsq, L, "aatest", bld->Q, bg->f, bld->popen, bld->pextend, &hmm) != eslOK) esl_fatal(msg); if (p7_hmm_Validate(hmm, errbuf, 0.0001) != eslOK) esl_fatal("normalization utest failed\n%s\n", errbuf); free(dsq); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_builder_Destroy(bld); esl_alphabet_Destroy(abc); } #endif /*p7SEQMODEL_TESTDRIVE*/ /*---------------- end, unit tests ------------------------------*/ /***************************************************************** * x. Test driver *****************************************************************/ #ifdef p7SEQMODEL_TESTDRIVE #include "p7_config.h" #include "easel.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "unit test driver for seqmodel.c: single sequence query construction"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); utest_normalization(go); esl_getopts_Destroy(go); exit(0); /* success */ } #endif /*p7SEQMODEL_TESTDRIVE*/ /*---------------- end, test driver -----------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/seqmodel.c $ * SVN $Id: seqmodel.c 3878 2012-02-26 15:04:16Z eddys $ *****************************************************************/ hmmer-3.1b2/src/itest_brute.c0000664361611702660230000006125512473612614015566 0ustar wheelerteddy/* The "brute" integration test. * * Create an entirely hand-specified profile HMM from given * parameters; enumerate all paths and calculate either the sum * (Forward score) or max (Viterbi score). Compare this to * and results. * * The test exercises all possible transitions in a model. The model * is M=3 because this is the minimum model size that can use a D->D * transition in the search profile (D2->D3; D1 isn't in a profile). * The target sequences go up to L=4 because this is the minimum * length that uses an I->I transition. * * To see the models and paths drawn out by hand, xref J1/106-109. * * Besides the hand-specified model, the integration test samples many * more "brute" HMMs randomly, peppering them with zero probability * transitions where possible. * * Viterbi scores (hand enumerated vs. GViterbi()) should match * exactly (within machine precision). Forward scores should match * "closely", with some error introduced by the discretization in * FLogsum()'s table lookup. * * This is an important test of correctness for the generic Viterbi * and Forward implementations. Optimized implementations (impl_sse, * etc) are then verified against the generic implementations. * * SRE, Tue Jul 17 08:17:36 2007 [Janelia] * SVN $Id: itest_brute.c 3960 2012-03-22 21:42:50Z wheelert $ * xref J1/106-109: original implementation * xref J5/118: revival; brought up to date with H3's assumptions of zero insert scores. */ /* gcc -std=c99 -g -Wall -I. -I../easel -L. -L../easel -o itest_brute itest_brute.c -lhmmer -leasel -lm */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_vectorops.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save each tested HMM to file ", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "-N", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of randomly sampled HMMs", 0 }, { "--vv", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be very verbose", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "the brute force HMM integration test"; struct p7_bruteparam_s { double a; /* hmm->t[0][p7H_MM] */ double b; /* hmm->t[1][p7H_MM] */ double c; /* hmm->t[2][p7H_MM] */ double d; /* hmm->t[3][p7H_MM] */ double e; /* hmm->t[0][p7H_MI] */ double f; /* hmm->t[1][p7H_MI] */ double g; /* hmm->t[2][p7H_MI] */ double h; /* hmm->t[3][p7H_MI] */ double i; /* hmm->t[1][p7H_IM] */ double j; /* hmm->t[2][p7H_IM] */ double k; /* hmm->t[3][p7H_IM] */ double l; /* hmm->t[1][p7H_DD] */ double m; /* hmm->t[2][p7H_DD] */ double n; /* N->B exp(gm->xsc[p7P_N][p7P_MOVE]) */ double p; /* E->C exp(gm->xsc[p7P_E][p7P_MOVE]) */ double q; /* C->T exp(gm->xsc[p7P_C][p7P_MOVE]) */ double r; /* J->B exp(gm->xsc[p7P_J][p7P_MOVE]) */ double alpha; /* hmm->mat[k][A] emission for all match states */ double beta; /* hmm->ins[k][A] emission for all insert states */ double begin[4]; /* constructed from transitions when brute profile is configured. */ double end; /* internal ends, set when profile is configured */ }; static void set_bruteparams(struct p7_bruteparam_s *prm); static void sample_zeropeppered_probvector(ESL_RANDOMNESS *r, double *p, int n); static void sample_bruteparams(ESL_RANDOMNESS *r, struct p7_bruteparam_s *prm); static P7_HMM *create_brute_hmm(ESL_ALPHABET *abc, struct p7_bruteparam_s *prm); static P7_PROFILE *create_brute_profile(struct p7_bruteparam_s *prm, P7_HMM *hmm, P7_BG *bg, int do_local); static double score_brute_profile(struct p7_bruteparam_s *prm, P7_BG *bg, int do_viterbi, double sc[5]); int main(int argc, char **argv) { struct p7_bruteparam_s prm; ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_ALPHABET *abc = esl_alphabet_Create(eslDNA); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); P7_BG *bg = p7_bg_Create(abc); P7_GMX *gx = p7_gmx_Create(3, 4); /* M=3, L up to 4. */ P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; char *hmmfile = esl_opt_GetString (go, "-o"); int N = esl_opt_GetInteger(go, "-N"); int do_local; double brute_fwd[5]; /* lod Forward scores for seqs L=0..4 calculated by brute force path enumeration */ double brute_vit[5]; /* lod Viterbi scores for seqs L=0..4 calculated by brute force path enumeration */ float fsc[5]; /* lod scores for seqs L=0..4 calculated by GForward() DP */ float vsc[5]; /* lod scores for seqs L=0..4 calculated by GViterbi() DP */ ESL_DSQ dsq[6]; int L; int i,j; float vprecision, fprecision; /* expected bound on absolute accuracy for viterbi, forward */ p7_FLogsumInit(); for (do_local = 0; do_local <= 1; do_local++) /* run tests in both glocal and local mode */ for (j = 0; j <= N; j++) /* #0 = fixed params; #1..N = sampled params */ { if (esl_opt_GetBoolean(go, "-v")) printf("%s\n", do_local ? "Local mode (implicit model)" : "Glocal mode (wing retracted)"); if (j == 0) set_bruteparams(&prm); else sample_bruteparams(r, &prm); hmm = create_brute_hmm(abc, &prm); gm = create_brute_profile(&prm, hmm, bg, do_local); score_brute_profile(&prm, bg, TRUE, brute_vit); score_brute_profile(&prm, bg, FALSE, brute_fwd); if (hmmfile) { FILE *ofp = fopen(hmmfile, "w"); p7_hmmfile_WriteASCII(ofp, -1, hmm); fclose(ofp); } for (L = 0; L <= 4; L++) { p7_gmx_GrowTo(gx, 3, L); dsq[0] = dsq[L+1] = eslDSQ_SENTINEL; /* Initialize dsq of length L at 0000... (all A) */ for (i = 1; i <= L; i++) dsq[i] = 0; if (p7_GViterbi(dsq, L, gm, gx, &(vsc[L])) != eslOK) esl_fatal("viterbi failed"); if (esl_opt_GetBoolean(go, "--vv")) p7_gmx_Dump(stdout, gx, p7_DEFAULT); p7_gmx_Reuse(gx); p7_gmx_GrowTo(gx, 3, L); if (p7_GForward(dsq, L, gm, gx, &(fsc[L])) != eslOK) esl_fatal("forward failed"); if (esl_opt_GetBoolean(go, "--vv")) p7_gmx_Dump(stdout, gx, p7_DEFAULT); p7_gmx_Reuse(gx); vprecision = 1e-4; /* default impl uses fp, should be accurate within machine precision */ fprecision = 0.01; /* default impl uses FLogsum, tolerate e^0.1 ~= 1% error in Forward probs */ if (esl_opt_GetBoolean(go, "-v")) printf("%d %-6s %6s %1d %8.4f %8.4f %8.4f %8.4f\n", j, do_local ? "local" : "glocal", (j > 0) ? "random": "fixed", L, brute_fwd[L], fsc[L], brute_vit[L], vsc[L]); if (fabs(vsc[L] - brute_vit[L]) > vprecision) esl_fatal("Viterbi scores mismatched: %-6s %s L=%1d brute=%8.4f GViterbi()=%8.4f (difference %g)", do_local ? "local" : "glocal", (j > 0) ? "random": "fixed", L, brute_vit[L], vsc[L], fabs(brute_vit[L] - vsc[L])); /* verify that Forward scores match closely (within error introduced by FLogsum() */ if (fabs(fsc[L] - brute_fwd[L]) > fprecision) esl_fatal("Forward scores mismatched: %-6s %s L=%1d brute=%8.4f GForward()=%8.4f", do_local ? "local" : "glocal", (j > 0) ? "random": "fixed", L, brute_fwd[L], fsc[L]); } p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); } p7_gmx_Destroy(gx); p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); printf("ok\n"); return 0; } static void set_bruteparams(struct p7_bruteparam_s *prm) { prm->a = 0.8; /* hmm->t[0][p7H_MM] */ prm->b = 0.7; /* hmm->t[1][p7H_MM] */ prm->c = 0.1; /* hmm->t[2][p7H_MM] */ prm->d = 0.6; /* hmm->t[3][p7H_MM] */ prm->e = 0.05; /* hmm->t[0][p7H_MI] */ prm->f = 0.2; /* hmm->t[1][p7H_MI] */ prm->g = 0.88; /* hmm->t[2][p7H_MI] */ prm->h = 0.90; /* hmm->t[0][p7H_IM] */ prm->i = 0.92; /* hmm->t[1][p7H_IM] */ prm->j = 0.94; /* hmm->t[2][p7H_IM] */ prm->k = 0.96; /* hmm->t[3][p7H_IM] */ prm->l = 0.57; /* hmm->t[1][p7H_DD] */ prm->m = 0.59; /* hmm->t[2][p7H_DD] */ #if 0 /* Setting n,p,q,r to 1.0 makes the core model account * for the entire target seq: <= 19 paths are possible, * SNB->core->ECT. */ prm->n = 1.0; /* N->B exp(gm->xsc[p7P_N][p7P_MOVE]) */ prm->p = 1.0; /* E->C exp(gm->xsc[p7P_E][p7P_MOVE]) */ prm->q = 1.0; /* C->T exp(gm->xsc[p7P_C][p7P_MOVE]) */ prm->r = 1.0; /* J->B exp(gm->xsc[p7P_J][p7P_MOVE]) */ #endif prm->n = 0.41; /* N->B exp(gm->xsc[p7P_N][p7P_MOVE]) */ prm->p = 0.43; /* E->C exp(gm->xsc[p7P_E][p7P_MOVE]) */ prm->q = 0.45; /* C->T exp(gm->xsc[p7P_C][p7P_MOVE]) */ prm->r = 0.47; /* J->B exp(gm->xsc[p7P_J][p7P_MOVE]) */ prm->alpha = 0.7; /* hmm->mat[k][A] for all k */ prm->beta = 0.25; /* hmm->ins[k][A] for all k [MUST be 0.25, equal to background; H3 assumes insert score 0; xref J5/118 */ return; } static void sample_zeropeppered_probvector(ESL_RANDOMNESS *r, double *p, int n) { esl_dirichlet_DSampleUniform(r, n, p); if (esl_rnd_Roll(r, 2)) /* coin flip */ { p[esl_rnd_Roll(r, n)] = 0.0; esl_vec_DNorm(p, n); } } static void sample_bruteparams(ESL_RANDOMNESS *r, struct p7_bruteparam_s *prm) { double tmp[3]; /* make sure we can get M->M w/ nonzero prob, but pepper zeros elsewhere */ do { sample_zeropeppered_probvector(r, tmp, 3); prm->a = tmp[0]; prm->e = tmp[1]; } while (prm->a == 0.0); do { sample_zeropeppered_probvector(r, tmp, 3); prm->b = tmp[0]; prm->f = tmp[1]; } while (prm->b == 0.0); do { sample_zeropeppered_probvector(r, tmp, 3); prm->c = tmp[0]; prm->g = tmp[1]; } while (prm->c == 0.0); do { sample_zeropeppered_probvector(r, tmp, 2); prm->d = tmp[0]; } while (prm->d == 0.0); /* pepper any D, I transition. [3][II] cannot be 1.0 (k param)*/ sample_zeropeppered_probvector(r, tmp, 2); prm->h = tmp[0]; sample_zeropeppered_probvector(r, tmp, 2); prm->i = tmp[0]; sample_zeropeppered_probvector(r, tmp, 2); prm->j = tmp[0]; do { sample_zeropeppered_probvector(r, tmp, 2); prm->k = tmp[0]; } while (prm->k == 1.0); sample_zeropeppered_probvector(r, tmp, 2); prm->l = tmp[0]; sample_zeropeppered_probvector(r, tmp, 2); prm->m = tmp[0]; /* make sure N,E,C move probs are nonzero, pepper otherwise */ do { sample_zeropeppered_probvector(r, tmp, 2); prm->n = tmp[0]; } while (prm->n == 0.0); do { sample_zeropeppered_probvector(r, tmp, 2); prm->p = tmp[0]; } while (prm->p == 0.0); do { sample_zeropeppered_probvector(r, tmp, 2); prm->q = tmp[0]; } while (prm->q == 0.0); /* J can be peppered */ sample_zeropeppered_probvector(r, tmp, 2); prm->r = tmp[0]; /* make sure x=A emissions for match, insert are nonzero */ prm->alpha = esl_rnd_UniformPositive(r); prm->beta = 0.25; /* MUST match background; H3 assumes isc=0; xref J5/118 */ return; } /* 1.0-a-b operations below can result in -epsilon or +epsilon. Round these to 0. */ static float zerofy(float p) { return (p < 1e-6) ? 0.0 : p; } static P7_HMM * create_brute_hmm(ESL_ALPHABET *abc, struct p7_bruteparam_s *prm) { P7_HMM *hmm = NULL; int M = 3; int k; char *logmsg = "[test created by create_brute_hmm()]"; if (abc->type != eslDNA) esl_fatal("brute hmm uses DNA alphabet"); hmm = p7_hmm_Create(M, abc); hmm->t[0][p7H_MM] = prm->a; hmm->t[0][p7H_MI] = prm->e; hmm->t[0][p7H_MD] = zerofy(1.0 - (prm->a+prm->e)); hmm->t[0][p7H_IM] = prm->h; hmm->t[0][p7H_II] = zerofy(1.0 - prm->h); hmm->t[0][p7H_DM] = 1.0; /* D0 doesn't exist; 1.0 is a convention */ hmm->t[0][p7H_DD] = 0.0; /* D0 doesn't exist; 0.0 is a convention */ hmm->t[1][p7H_MM] = prm->b; hmm->t[1][p7H_MI] = prm->f; hmm->t[1][p7H_MD] = zerofy(1.0 - (prm->b+prm->f)); hmm->t[1][p7H_IM] = prm->i; hmm->t[1][p7H_II] = zerofy(1.0 - prm->i); hmm->t[1][p7H_DM] = zerofy(1.0 - prm->l); hmm->t[1][p7H_DD] = prm->l; hmm->t[2][p7H_MM] = prm->c; hmm->t[2][p7H_MI] = prm->g; hmm->t[2][p7H_MD] = zerofy(1.0 - (prm->c+prm->g)); hmm->t[2][p7H_IM] = prm->j; hmm->t[2][p7H_II] = zerofy(1.0 - prm->j); hmm->t[2][p7H_DM] = zerofy(1.0 - prm->m); hmm->t[2][p7H_DD] = prm->m; hmm->t[3][p7H_MM] = prm->d; /* M3->E */ hmm->t[3][p7H_MI] = zerofy(1.0 - prm->d); hmm->t[3][p7H_MD] = 0.0; /* no D_M+1 state to move to */ hmm->t[3][p7H_IM] = prm->k; hmm->t[3][p7H_II] = zerofy(1.0 - prm->k); hmm->t[3][p7H_DM] = 1.0; /* forced transition to E */ hmm->t[3][p7H_DD] = 0.0; for (k = 1; k <= M; k++) { esl_vec_FSet(hmm->mat[k], abc->K, (1.0-prm->alpha)/(float)(abc->K-1)); hmm->mat[k][0] = prm->alpha; } for (k = 0; k <= M; k++) { esl_vec_FSet(hmm->ins[k], abc->K, (1.0-prm->beta)/(float)(abc->K-1)); hmm->ins[k][0] = prm->beta; } /* Add mandatory annotation */ p7_hmm_SetName(hmm, "itest-brute"); p7_hmm_AppendComlog(hmm, 1, &logmsg); hmm->nseq = 0; hmm->eff_nseq = 0; p7_hmm_SetCtime(hmm); p7_hmm_SetConsensus(hmm, NULL); hmm->checksum = 0; return hmm; } static P7_PROFILE * create_brute_profile(struct p7_bruteparam_s *prm, P7_HMM *hmm, P7_BG *bg, int do_local) { P7_PROFILE *gm = NULL; double occ[4], Z; gm = p7_profile_Create(hmm->M, hmm->abc); if (do_local) p7_ProfileConfig(hmm, bg, gm, 100, p7_UNILOCAL); /* only local vs. glocal matters... */ else p7_ProfileConfig(hmm, bg, gm, 100, p7_UNIGLOCAL); /* all else will be replaced. */ if (do_local) { /* local modes: uniform but weighted by match occupancy; * occ[k] / \sum_i occ[i] * (M-k+1), which * reduces to uniform 2/(M(M+1)) for uniform match occupancy */ occ[1] = prm->a+prm->e; occ[2] = occ[1] * (prm->b+prm->f) + zerofy(1.0-occ[1]) * zerofy(1.0-prm->l); occ[3] = occ[2] * (prm->c+prm->g) + zerofy(1.0-occ[2]) * zerofy(1.0-prm->m); Z = occ[1] * 3.0 + occ[2] * 2.0 + occ[3]; prm->begin[1] = occ[1] / Z; prm->begin[2] = occ[2] / Z; prm->begin[3] = occ[3] / Z; prm->end = 1.0; } else { /* glocal modes: right wing retraction and no internal exit */ prm->begin[1] = (prm->a + prm->e); prm->begin[2] = zerofy(1. - (prm->a+prm->e)) * zerofy(1.-prm->l); prm->begin[3] = zerofy(1. - (prm->a+prm->e)) * prm->l * zerofy(1.-prm->m); prm->end = 0.0; } /* Replace profile's configured length and multihit modeling. */ gm->xsc[p7P_N][p7P_MOVE] = log(prm->n); gm->xsc[p7P_N][p7P_LOOP] = log(zerofy(1. - prm->n)); gm->xsc[p7P_E][p7P_MOVE] = log(prm->p); gm->xsc[p7P_E][p7P_LOOP] = log(zerofy(1. - prm->p)); gm->xsc[p7P_C][p7P_MOVE] = log(prm->q); gm->xsc[p7P_C][p7P_LOOP] = log(zerofy(1. - prm->q)); gm->xsc[p7P_J][p7P_MOVE] = log(prm->r); gm->xsc[p7P_J][p7P_LOOP] = log(zerofy(1. - prm->r)); return gm; } /* score_brute_profile() enumerates all paths combinatorially, and * calculates their Forward or Viterbi probabilities either by summing * or by max, for A* (polyA) sequences of lengths 0..4. */ static double score_brute_profile(struct p7_bruteparam_s *prm, P7_BG *bg, int do_viterbi, double sc[5]) { double b = prm->b; double c = prm->c; double f = prm->f; double g = prm->g; double i = prm->i; double j = prm->j; double m = prm->m; double n = prm->n; double p = prm->p; double q = prm->q; double r = prm->r; double msc = prm->alpha / (double) bg->f[0]; double isc = prm->beta / (double) bg->f[0]; double cp[19]; /* odds of 19 possible paths through core model */ double cL[5]; /* summed odds of core model accounting for seq of length 0..4 */ double jp[21]; /* odds of 21 possible paths using core model and J state */ double jL[5]; /* summed odds of core+J accounting for seq of length 0..4 */ double ap[10]; /* odds of 10 possible paths through flanking states, accounting for 0..3 residues */ double aL[4]; /* summed odds of flanks accounting for 0..3 residues */ /* 1. There are 19 possible paths that up to L=4 residues can align to the core model. */ cp[0] = msc * prm->begin[1] * prm->end; /* B M1 E (L=1) */ cp[1] = msc * prm->begin[2] * prm->end; /* B M2 E (L=1) */ cp[2] = msc * prm->begin[3]; /* B M3 E (L=1) */ cp[3] = msc * prm->begin[1] * zerofy(1. - (b+f)) * prm->end;/* B M1 D2 E (L=1) */ cp[4] = msc * prm->begin[2] * zerofy(1. - (c+g)); /* B M2 D3 E (L=1) */ cp[5] = msc * prm->begin[1] * zerofy(1. - (b+f)) * m; /* B M1 D2 D3 E (L=1) */ cp[6] = msc * msc * prm->begin[1] * b * prm->end; /* B M1 M2 E (L=2) */ cp[7] = msc * msc * prm->begin[2] * c; /* B M2 M3 E (L=2) */ cp[8] = msc * msc * prm->begin[1] * b * zerofy(1.-(c+g)); /* B M1 M2 D3 E (L=2) */ cp[9] = msc * msc * prm->begin[1] * zerofy(1.-(b+f)) * zerofy(1.-m); /* B M1 D2 M3 E (L=2) */ cp[10]= msc * msc * msc * prm->begin[1] * b * c; /* B M1 M2 M3 E (L=3) */ cp[11]= msc * isc * msc * prm->begin[1] * f * i * zerofy(1.-(c+g)); /* B M1 I1 M2 D3 E (L=3) */ cp[12]= msc * isc * msc * prm->begin[1] * f * i * prm->end; /* B M1 I1 M2 E (L=3) */ cp[13]= msc * isc * msc * prm->begin[2] * g * j; /* B M2 I2 M3 E (L=3) */ cp[14] = msc * isc * msc * msc * prm->begin[1] * f * i * c; /* B M1 I1 M2 M3 E (L=4) */ cp[15] = msc * isc * isc * msc * prm->begin[1] * f * zerofy(1.-i) * i * zerofy(1.-(c+g)); /* B M1 I1 I1 M2 D3 E (L=4) */ cp[16] = msc * msc * isc * msc * prm->begin[1] * b * g * j; /* B M1 M2 I2 M3 E (L=4) */ cp[17] = msc * isc * isc * msc * prm->begin[1] * f * zerofy(1.-i) * i * prm->end; /* B M1 I1 I1 M2 E (L=4) */ cp[18] = msc * isc * isc * msc * prm->begin[2] * g * zerofy(1.-j) * j; /* B M2 I2 I2 M3 E (L=4) */ /* 2. Sum or max the total probability of L={1..4} aligned to one pass through the core model */ if (do_viterbi) { cL[0] = 0.0; cL[1] = esl_vec_DMax(cp, 6); cL[2] = esl_vec_DMax(cp+6, 4); cL[3] = esl_vec_DMax(cp+10, 4); cL[4] = esl_vec_DMax(cp+14, 5); } else { cL[0] = 0.0; cL[1] = esl_vec_DSum(cp, 6); cL[2] = esl_vec_DSum(cp+6, 4); cL[3] = esl_vec_DSum(cp+10, 4); cL[4] = esl_vec_DSum(cp+14, 5); } /* 3. J state introduces a combiexplosion of paths accounting for * jL={1..4} total residues in one or more passes through the * core model: 21 such paths. */ jp[0] = cL[4]; /* B [4] E (jL=4, 0 in J) */ jp[1] = cL[3] * zerofy(1.-p) * r * cL[1]; /* B [3] J [1] E (jL=4, 0 in J) */ jp[2] = cL[2] * zerofy(1.-p) * r * cL[2]; /* B [2] J [2] E (jL=4, 0 in J) */ jp[3] = cL[2] * zerofy(1.-p) * r * cL[1] * zerofy(1.-p) * r * cL[1]; /* B [2] J [1] J [1] E (jL=4, 0 in J) */ jp[4] = cL[1] * zerofy(1.-p) * r * cL[3]; /* B [1] J [3] E (jL=4, 0 in J) */ jp[5] = cL[1] * zerofy(1.-p) * r * cL[2] * zerofy(1.-p) * r * cL[1]; /* B [1] J [2] J [1] E (jL=4, 0 in J) */ jp[6] = cL[1] * zerofy(1.-p) * r * cL[1] * zerofy(1.-p) * r * cL[2]; /* B [1] J [1] J [2] E (jL=4, 0 in J) */ jp[7] = cL[1] * zerofy(1.-p) * r * cL[1] * zerofy(1.-p) * r * cL[1] * zerofy(1.-p) * r * cL[1]; /* B [1] J [1] J [1] J [1] E (jL=4, 0 in J) */ jp[8] = cL[2] * zerofy(1.-p) * zerofy(1.-r) * r * cL[1]; /* B [2] JJ [1] E (jL=4, 1 in J) */ jp[9] = cL[1] * zerofy(1.-p) * zerofy(1.-r) * r * cL[2]; /* B [1] JJ [2] E (jL=4, 1 in J) */ jp[10] = cL[1] * zerofy(1.-p) * zerofy(1.-r) * r * cL[1] * zerofy(1.-p) * r * cL[1]; /* B [1] JJ [1] J [1] E (jL=4, 1 in J) */ jp[11] = cL[1] * zerofy(1.-p) * r * cL[1] * zerofy(1.-p) * zerofy(1.-r) * r * cL[1]; /* B [1] J [1] JJ [1] E (jL=4, 1 in J) */ jp[12] = cL[1] * zerofy(1.-p) * zerofy(1.-r) * zerofy(1.-r) * r * cL[1]; /* B [1] JJJ [1] E (jL=4, 2 in J) */ jp[13] = cL[3]; /* B [3] E (jL=3, 0 in J) */ jp[14] = cL[2] * zerofy(1.-p) * r * cL[1]; /* B [2] J [1] E (jL=3, 0 in J) */ jp[15] = cL[1] * zerofy(1.-p) * r * cL[2]; /* B [1] J [2] E (jL=3, 0 in J) */ jp[16] = cL[1] * zerofy(1.-p) * r * cL[1] * zerofy(1.-p) * r * cL[1]; /* B [1] J [1] J [1] E (jL=3, 0 in J) */ jp[17] = cL[1] * zerofy(1.-p) * zerofy(1.-r) * r * cL[1]; /* B [1] JJ [1] E (jL=3, 1 in J) */ jp[18] = cL[2]; /* B [2] E (jL=2, 0 in J) */ jp[19] = cL[1] * zerofy(1.-p) * r * cL[1]; /* B [1] J [1] E (jL=2, 0 in J) */ jp[20] = cL[1]; /* B [1] E (jL=1, 0 in J) */ /* 4. Sum or max the total path probability of jL={1..4} */ if (do_viterbi) { jL[0] = 0.; jL[1] = jp[20]; jL[2] = esl_vec_DMax(jp + 18, 2); jL[3] = esl_vec_DMax(jp + 13, 5); jL[4] = esl_vec_DMax(jp, 13); } else { jL[0] = 0.; jL[1] = jp[20]; jL[2] = esl_vec_DSum(jp + 18, 2); jL[3] = esl_vec_DSum(jp + 13, 5); jL[4] = esl_vec_DSum(jp, 13); } /* 5. The total probability, including SNB...ECJ flanks, accounts for * 10 possible paths accounting for 0..3 residues in the flanks. */ ap[0] = n * p * q; ap[1] = zerofy(1.-n) * n * p * q; ap[2] = n * p * zerofy(1.-q) * q; ap[3] = zerofy(1.-n) * zerofy(1.-n) * n * p * q; ap[4] = zerofy(1.-n) * n * p * zerofy(1.-q) * q; ap[5] = n * p * zerofy(1.-q) * zerofy(1.-q) * q; ap[6] = zerofy(1.-n) * zerofy(1.-n) * zerofy(1.-n) * n * p * q; ap[7] = zerofy(1.-n) * zerofy(1.-n) * n * p * zerofy(1.-q) * q; ap[8] = zerofy(1.-n) * n * p * zerofy(1.-q) * zerofy(1.-q) * q; ap[9] = n * p * zerofy(1.-q) * zerofy(1.-q) * zerofy(1.-q) * q; /* 6. Sum or max the total path probability for the flanks generating * 0..3 residues */ if (do_viterbi) { aL[0] = ap[0]; aL[1] = esl_vec_DMax(ap+1, 2); aL[2] = esl_vec_DMax(ap+3, 3); aL[3] = esl_vec_DMax(ap+6, 4); } else { aL[0] = ap[0]; aL[1] = esl_vec_DSum(ap+1, 2); aL[2] = esl_vec_DSum(ap+3, 3); aL[3] = esl_vec_DSum(ap+6, 4); } /* 6. The total lod score is then the possible combinations * of flank + (core+J) */ if (do_viterbi) { sc[0] = -eslINFINITY; sc[1] = jL[1] * aL[0]; sc[2] = ESL_MAX(jL[2] * aL[0], jL[1] * aL[1]); sc[3] = ESL_MAX(ESL_MAX(jL[3] * aL[0], jL[2] * aL[1]), jL[1] * aL[2]); sc[4] = ESL_MAX(ESL_MAX(jL[4] * aL[0], jL[3] * aL[1]), ESL_MAX(jL[2] * aL[2], jL[1] * aL[3])); sc[1] = log(sc[1]); sc[2] = log(sc[2]); sc[3] = log(sc[3]); sc[4] = log(sc[4]); } else { sc[0] = -eslINFINITY; sc[1] = log(jL[1] * aL[0]); sc[2] = log(jL[2] * aL[0] + jL[1] * aL[1]); sc[3] = log(jL[3] * aL[0] + jL[2] * aL[1] + jL[1] * aL[2]); sc[4] = log(jL[4] * aL[0] + jL[3] * aL[1] + jL[2] * aL[2] + jL[1] * aL[3]); } return eslOK; } hmmer-3.1b2/src/fm_general.c0000664361611702660230000006627312473612612015337 0ustar wheelerteddy/* Architecture-independent functions used in FM-index range compuations * and list management. * * Contents: * 1. List management * 2. Interval / range computation * 3. Functions related to the original sequence * 4. FM data initialization, configuration, and reading from file * * # 5. Unit tests. * # 6. Test driver. * # 7. Copyright and license. * */ #include "p7_config.h" #include "easel.h" #include "esl_getopts.h" #include "hmmer.h" /* Function: fm_initSeeds() * * Synopsis: initialize the object used to store a list of seed diagonals * * Returns: eslEMEM in event of allocation failure, otherwise eslOK */ int fm_initSeeds (FM_DIAGLIST *list) { int status; list->size = 1000; ESL_ALLOC(list->diags, list->size * sizeof(FM_DIAG)); list->count = 0; return eslOK; ERROR: return eslEMEM; } /* Function: fm_newSeed() * * Synopsis: return a pointer to the next seed element on the list, * increasing the size of the list, if necessary. * * Returns: NULL in event of allocation failure, otherwise pointer to * the next seed diagonal */ FM_DIAG * fm_newSeed (FM_DIAGLIST *list) { int status; if (list->count == list->size) { list->size *= 4; ESL_REALLOC(list->diags, list->size * sizeof(FM_DIAG)); } list->count++; return list->diags + (list->count - 1); ERROR: return NULL; } /* Function: fm_initAmbiguityList() * * Synopsis: initialize the object used to store a list of ambiguity ranges * * Returns: eslEMEM in event of allocation failure, otherwise eslOK */ int fm_initAmbiguityList (FM_AMBIGLIST *list) { int status; list->size = 1000; ESL_ALLOC(list->ranges, list->size * sizeof(FM_INTERVAL)); if (list->ranges == NULL ) esl_fatal("unable to allocate memory to store FM ambiguity data\n"); list->count = 0; return eslOK; ERROR: return eslEMEM; } /* Function: fm_addAmbiguityRange() * * Synopsis: return a pointer to the next seed element on the list, * increasing the size of the list, if necessary. * * Returns: NULL in event of allocation failure, otherwise pointer to * the next seed diagonal */ int fm_addAmbiguityRange (FM_AMBIGLIST *list, uint32_t start, uint32_t stop) { int status; if (list->count == list->size) { list->size *= 4; ESL_REALLOC(list->ranges, list->size * sizeof(FM_INTERVAL)); } list->ranges[list->count].lower = start; list->ranges[list->count].upper = stop; list->count++; return eslOK; ERROR: return eslFAIL; } /********************************************************************* *# 2. Interval / range computation *********************************************************************/ /* Function: fm_updateIntervalForward() * * Synopsis: Implement Algorithm 4 (i371) of Simpson (Bioinformatics 2010) * * Purpose: * * Returns: eslOK */ int fm_updateIntervalForward( const FM_DATA *fm, const FM_CFG *cfg, char c, FM_INTERVAL *interval_bk, FM_INTERVAL *interval_f) { uint32_t occLT_l, occLT_u, occ_l, occ_u; fm_getOccCountLT (fm, cfg, interval_bk->lower - 1, c, &occ_l, &occLT_l); fm_getOccCountLT (fm, cfg, interval_bk->upper, c, &occ_u, &occLT_u); interval_f->lower += (occLT_u - occLT_l); interval_f->upper = interval_f->lower + (occ_u - occ_l) - 1; interval_bk->lower = abs(fm->C[(int)c]) + occ_l; interval_bk->upper = abs(fm->C[(int)c]) + occ_u - 1; return eslOK; } /* Function: getSARangeForward() * Synopsis: For a given query sequence, find its interval in the FM-index, using forward search * Purpose: Implement Algorithm 4 (i371) of Simpson (Bioinformatics 2010). It's the forward * search on a bi-directional BWT, as described by Lam 2009. * All the meat is in the method of counting characters - bwt_getOccCount, which * depends on compilation choices. * * Note: it seems odd, but is correct, that the fm-index passed in to this function * is the backward index corresponding to the forward index into which I want to * do a forward search */ int fm_getSARangeForward( const FM_DATA *fm, FM_CFG *cfg, char *query, char *inv_alph, FM_INTERVAL *interval) { int i=0; FM_INTERVAL interval_bk; uint8_t c = inv_alph[(int)query[0]]; interval->lower = interval_bk.lower = abs(fm->C[c]); interval->upper = interval_bk.upper = abs(fm->C[c+1])-1; while (interval_bk.lower>=0 && interval_bk.lower <= interval_bk.upper) { c = query[++i]; if (c == '\0') // end of query - the current range defines the hits break; c = inv_alph[c]; fm_updateIntervalForward( fm, cfg, c, &interval_bk, interval); cfg->occCallCnt+=2; } return eslOK; } int fm_updateIntervalReverse( const FM_DATA *fm, const FM_CFG *cfg, char c, FM_INTERVAL *interval) { int count1, count2; //TODO: counting in these calls will often overlap // - might get acceleration by merging to a single redundancy-avoiding call count1 = fm_getOccCount (fm, cfg, interval->lower-1, c); count2 = fm_getOccCount (fm, cfg, interval->upper, c); interval->lower = abs(fm->C[(int)c]) + count1; interval->upper = abs(fm->C[(int)c]) + count2 - 1; return eslOK; } /* Function: getSARangeReverse() * Synopsis: For a given query sequence, find its interval in the FM-index, using backward search * Purpose: Implement Algorithm 3.6 (p17) of Firth paper (A Comparison of BWT Approaches * to String Pattern Matching). This is what Simpson and Lam call "Reverse Search". * All the meat is in the method of counting characters - bwt_getOccCount, which * depends on compilation choices. */ int fm_getSARangeReverse( const FM_DATA *fm, FM_CFG *cfg, char *query, char *inv_alph, FM_INTERVAL *interval) { int i=0; char c = inv_alph[(int)query[0]]; interval->lower = abs(fm->C[(int)c]); interval->upper = abs(fm->C[(int)c+1])-1; while (interval->lower>=0 && interval->lower <= interval->upper) { c = query[++i]; if (c == '\0') // end of query - the current range defines the hits break; c = inv_alph[(int)c]; fm_updateIntervalReverse(fm, cfg, c, interval); cfg->occCallCnt+=2; } return eslOK; } /********************************************************************* *# 3. Functions related to the original sequence *********************************************************************/ /* Function: getChar() * Synopsis: Find the character c residing at a given position in the BWT. * Purpose: This method must account for possible string compression, either * 4 characters in one byte for a 4-letter DNA/RNA alphabet, 2 chars * per byte for a 15-letter alphabet of DNA/RNA with ambiguity codes, * or one char per byte for amino acids. */ uint8_t fm_getChar(uint8_t alph_type, int j, const uint8_t *B ) { uint8_t c = -1; if (alph_type == fm_DNA /* || alph_type == fm_RNA */) { /* * B[j/4] is the byte of B in which j is found * * Let j' be the final two bits of j (j&0x2) * The char bits are the two starting at position 2*j'. * Without branching, grab them by shifting B[j/4] right 6-2*j' bits, * then masking to keep the final two bits */ c = (B[j/4] >> ( 0x6 - ((j&0x3)*2) ) & 0x3); /* } else if (alph_type == fm_DNA_full ) { c = (B[j/2] >> (((j&0x1)^0x1)*4) ) & 0xf; //unpack the char: shift 4 bits right if it's odd, then mask off left bits in any case */ } else { // amino c = B[j]; } return c; } /* Function: fm_findOverlappingAmbiguityBlock() * Synopsis: Search in the meta->ambig_list array for the first * ambiguity range starting after . If that index * comes before , return it. Otherwise, return -1. */ int32_t fm_findOverlappingAmbiguityBlock (const FM_DATA *fm, const FM_METADATA *meta, uint32_t start, uint32_t end) { int lo = fm->ambig_offset; int hi = lo + fm->ambig_cnt - 1; int mid; FM_INTERVAL *ranges = meta->ambig_list->ranges; // (1) Search in the meta->ambig_list array for the last ambiguity range // ending before , using binary search, first handling edge cases: if (hi <= lo) return hi; // either 0 or -1 if (ranges[lo].lower > end) return -1; if (ranges[hi].upper < start) return -1; while (lo < hi) { mid = (lo + hi) / 2; // round down if (ranges[mid].lower < start) lo = mid + 1; // too far left else hi = mid; // might be too far right } //the range test above may have pushed the target one too far to the right if (lo>0 && ranges[lo-1].upper >= start && ranges[lo-1].lower <= end) return lo-1; else if ( ranges[lo].upper >= start && ranges[lo].lower <= end) return lo; else return -1; } /* Function: fm_convertRange2DSQ() * Synopsis: Convert the BWT range into a DSQ. * * Purpose: The input value of is the 0-based position at which * the requested range starts on either FM->T or revcomp(FM->T), * depending on . Since only FM->T is stored, * the necessary work is done to correct positions in the case * that the positions are relative to the revcomp. */ int fm_convertRange2DSQ(const FM_DATA *fm, const FM_METADATA *meta, uint64_t first, int length, int complementarity, ESL_SQ *sq, int fix_ambiguities) { uint64_t i, j; if (complementarity == p7_COMPLEMENT) first = fm->N-(first+length)-1; //All the "+1" dsq offsets below are because the dsq characters are 1-based. esl_sq_GrowTo(sq, length); sq->n = length; if (meta->alph_type == fm_DNA ) { /* * B[j>>2] is the byte of B in which j is found (j/4) * * Let j' be the final two bits of j (j&0x2) * The char bits are the two starting at position 2*j'. * Without branching, grab them by shifting B[j/4] right 6-2*j' bits, * then masking to keep the final two bits */ for (i = first; i <= first+length-1; i++) sq->dsq[i-first+1] = (fm->T[i/4] >> ( 0x6 - ((i&0x3)*2) ) & 0x3); sq->dsq[length+1] = eslDSQ_SENTINEL; if (fix_ambiguities) { /* Account for the fact that in the DNA alphabet without ambiguity codes, * makehmmerdb turns ambiguity codes into one of the nucleotides. Need * to replace with an N. */ int32_t pos = fm_findOverlappingAmbiguityBlock (fm, meta, first, first+length-1 ); if (pos != -1) { while (pos <= fm->ambig_offset + fm->ambig_cnt -1 && meta->ambig_list->ranges[pos].lower <= first+length-1) { int start = ESL_MAX(first, meta->ambig_list->ranges[pos].lower); int end = ESL_MIN(first+length-1, meta->ambig_list->ranges[pos].upper); for (j= start; j<=end; j++) sq->dsq[j-first+1] = sq->abc->Kp-3; //'N' pos++; } } } /* } else if (meta->alph_type == fm_DNA_full) { for (i = first; i<= first+length-1; i++) { c = (fm->T[i/2] >> (((i&0x1)^0x1)*4) ) & 0xf; //unpack the char: shift 4 bits right if it's odd, then mask off left bits in any case sq->dsq[i-first+1] = c + (c < 4 ? 0 : 1); //increment by one for ambiguity codes } sq->dsq[length+1] = eslDSQ_SENTINEL; */ } else { // amino for (i = first; i<= first+length-1; i++) sq->dsq[i-first+1] = fm->T[i] + (fm->T[i] < 20 ? 0 : 1); //increment by one for ambiguity codes sq->dsq[length+1] = eslDSQ_SENTINEL; } if (complementarity == p7_COMPLEMENT) esl_sq_ReverseComplement(sq); return eslOK; } /* Function: fm_computeSequenceOffset() * Synopsis: Search in the meta->seq_data array for the sequence id corresponding to the * requested position. The matching entry is the one with the largest index i * such that seq_data[i].offset < pos */ uint64_t fm_computeSequenceOffset (const FM_DATA *fms, const FM_METADATA *meta, int block, uint64_t pos) { uint64_t lo = fms[block].seq_offset; uint64_t hi = lo + fms[block].seq_cnt - 1; uint64_t mid; //binary search, first handling edge cases if (lo==hi) return lo; if (meta->seq_data[hi].fm_start <= pos) return hi; while (1) { mid = (lo + hi + 1) / 2; /* round up */ if (meta->seq_data[mid].fm_start <= pos) lo = mid; /* too far left */ else if (meta->seq_data[mid-1].fm_start > pos) hi = mid; /* too far right */ else return mid-1; /* found it */ } } /* Function: fm_getOriginalPosition() * Synopsis: Find the id of the sequence in the original input corresponding * to a given hit, and the position of that hit in the original * Purpose: Given: * fms - an array of FM-indexes * meta - the fm metadata * fm_id - index of the fm-index in which a hit is sought * length - length of the hit in question * direction - direction of the hit in question * fm_pos - position in the fm-index * * Returns * *segment_id - index of the sequence segment captured in the FM-index * *seg_pos - position in the original sequence, as compressed in the FM binary data structure (zero based) * int - eslERANGE if the range in question crosses the boundary between two target sequences. Otherwise eslOK. */ int fm_getOriginalPosition (const FM_DATA *fms, const FM_METADATA *meta, int fm_id, int length, int complementarity, uint64_t fm_pos, uint32_t *segment_id, uint64_t *seg_pos ) { // if complementarity == p7_NOCOMPLEMENT, the end positions are in context of FM->T // otherwise, they're in context of revcomp(FM->T). if (complementarity == p7_COMPLEMENT) // need location in forward context: fm_pos = fms->N - fm_pos - 1; *segment_id = fm_computeSequenceOffset( fms, meta, fm_id, fm_pos); *seg_pos = ( fm_pos - meta->seq_data[ *segment_id ].fm_start) + 1; if (complementarity == p7_COMPLEMENT) // now reverse orientation *seg_pos = meta->seq_data[ *segment_id ].length - *seg_pos + 1; //verify that the hit doesn't extend beyond the bounds of the target sequence if (*seg_pos + length - 1 > meta->seq_data[ *segment_id ].length ) return eslERANGE; return eslOK; } /********************************************************************* *# 4. FM data initialization, configuration, and reading from file *********************************************************************/ int fm_initConfigGeneric( FM_CFG *cfg, ESL_GETOPTS *go ) { cfg->ssv_length = (go ? esl_opt_GetInteger(go, "--seed_ssv_length") : -1); cfg->max_depth = (go ? esl_opt_GetInteger(go, "--seed_max_depth") : -1); cfg->drop_max_len = (go ? esl_opt_GetInteger(go, "--seed_drop_max_len") : -1); cfg->consec_pos_req = (go ? esl_opt_GetInteger(go, "--seed_req_pos") : -1); cfg->consensus_match_req = (go ? esl_opt_GetInteger(go, "--seed_consens_match") : 10); cfg->drop_lim = eslCONST_LOG2 * (go ? esl_opt_GetReal(go, "--seed_drop_lim") : -1.0); // convert from bits to nats cfg->score_density_req = eslCONST_LOG2 * (go ? esl_opt_GetReal(go, "--seed_sc_density") : -1.0);// convert from bits to nats cfg->scthreshFM = eslCONST_LOG2 * (go ? esl_opt_GetReal(go, "--seed_sc_thresh") : -1.0); // convert from bits to nats return eslOK; } /* Function: fm_FM_free() * Synopsis: release the memory required to store an individual FM-index */ void fm_FM_destroy ( FM_DATA *fm, int isMainFM) { if (fm->BWT_mem) free (fm->BWT_mem); if (fm->C) free (fm->C); if (fm->occCnts_b) free (fm->occCnts_b); if (fm->occCnts_sb) free (fm->occCnts_sb); if (isMainFM && fm->T) free (fm->T); if (isMainFM && fm->SA) free (fm->SA); } /* Function: fm_FM_read() * Synopsis: Read the FM index off disk * Purpose: Read the FM-index as written by fmbuild. * First read the metadata header, then allocate space for the full index, * then read it in. */ int fm_FM_read( FM_DATA *fm, FM_METADATA *meta, int getAll ) { //shortcut variables int64_t *C = NULL; int status; int i; uint16_t *occCnts_b = NULL; //convenience variables, used to simplify macro calls uint32_t *occCnts_sb = NULL; int32_t compressed_bytes; int num_freq_cnts_b; int num_freq_cnts_sb; int num_SA_samples; int64_t prevC; int cnt; int chars_per_byte = 8/meta->charBits; if(fread(&(fm->N), sizeof(uint64_t), 1, meta->fp) != 1) esl_fatal( "%s: Error reading block_length in FM index.\n", __FILE__); if(fread(&(fm->term_loc), sizeof(uint32_t), 1, meta->fp) != 1) esl_fatal( "%s: Error reading terminal location in FM index.\n", __FILE__); if(fread(&(fm->seq_offset), sizeof(uint32_t), 1, meta->fp) != 1) esl_fatal( "%s: Error reading seq_offset in FM index.\n", __FILE__); if(fread(&(fm->ambig_offset), sizeof(uint32_t), 1, meta->fp) != 1) esl_fatal( "%s: Error reading ambig_offset in FM index.\n", __FILE__); if(fread(&(fm->overlap), sizeof(uint32_t), 1, meta->fp) != 1) esl_fatal( "%s: Error reading overlap in FM index.\n", __FILE__); if(fread(&(fm->seq_cnt), sizeof(uint32_t), 1, meta->fp) != 1) esl_fatal( "%s: Error reading seq_cnt in FM index.\n", __FILE__); if(fread(&(fm->ambig_cnt), sizeof(uint32_t), 1, meta->fp) != 1) esl_fatal( "%s: Error reading ambig_cnt in FM index.\n", __FILE__); compressed_bytes = ((chars_per_byte-1+fm->N)/chars_per_byte); num_freq_cnts_b = 1+ceil((double)fm->N/meta->freq_cnt_b); num_freq_cnts_sb = 1+ceil((double)fm->N/meta->freq_cnt_sb); num_SA_samples = 1+floor((double)fm->N/meta->freq_SA); // allocate space, then read the data if (getAll) ESL_ALLOC (fm->T, sizeof(uint8_t) * compressed_bytes ); ESL_ALLOC (fm->BWT_mem, sizeof(uint8_t) * (compressed_bytes + 31) ); // +31 for manual 16-byte alignment ( typically only need +15, but this allows offset in memory, plus offset in case of <16 bytes of characters at the end) fm->BWT = (uint8_t *) (((unsigned long int)fm->BWT_mem + 15) & (~0xf)); // align vector memory on 16-byte boundaries if (getAll) ESL_ALLOC (fm->SA, num_SA_samples * sizeof(uint32_t)); ESL_ALLOC (fm->C, (1+meta->alph_size) * sizeof(int64_t)); ESL_ALLOC (fm->occCnts_b, num_freq_cnts_b * (meta->alph_size ) * sizeof(uint16_t)); // every freq_cnt positions, store an array of ints ESL_ALLOC (fm->occCnts_sb, num_freq_cnts_sb * (meta->alph_size ) * sizeof(uint32_t)); // every freq_cnt positions, store an array of ints if(getAll && fread(fm->T, sizeof(uint8_t), compressed_bytes, meta->fp) != compressed_bytes) esl_fatal( "%s: Error reading T in FM index.\n", __FILE__); if( fread(fm->BWT, sizeof(uint8_t), compressed_bytes, meta->fp) != compressed_bytes) esl_fatal( "%s: Error reading BWT in FM index.\n", __FILE__); if(getAll && fread(fm->SA, sizeof(uint32_t), (size_t)num_SA_samples, meta->fp) != (size_t)num_SA_samples) esl_fatal( "%s: Error reading SA in FM index.\n", __FILE__); if(fread(fm->occCnts_b, sizeof(uint16_t)*(meta->alph_size), (size_t)num_freq_cnts_b, meta->fp) != (size_t)num_freq_cnts_b) esl_fatal( "%s: Error reading occCnts_b in FM index.\n", __FILE__); if(fread(fm->occCnts_sb, sizeof(uint32_t)*(meta->alph_size), (size_t)num_freq_cnts_sb, meta->fp) != (size_t)num_freq_cnts_sb) esl_fatal( "%s: Error reading occCnts_sb in FM index.\n", __FILE__); //shortcut variables C = fm->C; occCnts_b = fm->occCnts_b; occCnts_sb = fm->occCnts_sb; /*compute the first position of each letter in the alphabet in a sorted list * (with an extra value to simplify lookup of the last position for the last letter). * Negative values indicate that there are zero of that character in T, can be * used to establish the end of the prior range*/ C[0] = 0; for (i=0; ialph_size; i++) { prevC = abs(C[i]); cnt = FM_OCC_CNT( sb, num_freq_cnts_sb-1, i); if (cnt==0) {// none of this character C[i+1] = prevC; C[i] *= -1; // use negative to indicate that there's no character of this type, the number gives the end point of the previous } else { C[i+1] = prevC + cnt; } } C[meta->alph_size] *= -1; C[0] = 1; return eslOK; ERROR: fm_FM_destroy(fm, getAll); esl_fatal("Error allocating memory in %s\n", "readFM"); return eslFAIL; } /* Function: readFMmeta() * Synopsis: Read metadata from disk for the set of FM-indexes stored in a HMMER binary file * * Input: file pointer to binary file * Output: return filled meta struct */ int fm_readFMmeta( FM_METADATA *meta) { int status; int i; fm_initAmbiguityList(meta->ambig_list); if( fread(&(meta->fwd_only), sizeof(meta->fwd_only), 1, meta->fp) != 1 || fread(&(meta->alph_type), sizeof(meta->alph_type), 1, meta->fp) != 1 || fread(&(meta->alph_size), sizeof(meta->alph_size), 1, meta->fp) != 1 || fread(&(meta->charBits), sizeof(meta->charBits), 1, meta->fp) != 1 || fread(&(meta->freq_SA), sizeof(meta->freq_SA), 1, meta->fp) != 1 || fread(&(meta->freq_cnt_sb), sizeof(meta->freq_cnt_sb), 1, meta->fp) != 1 || fread(&(meta->freq_cnt_b), sizeof(meta->freq_cnt_b), 1, meta->fp) != 1 || fread(&(meta->block_count), sizeof(meta->block_count), 1, meta->fp) != 1 || fread(&(meta->seq_count), sizeof(meta->seq_count), 1, meta->fp) != 1 || fread(&(meta->ambig_list->count), sizeof(meta->ambig_list->count), 1, meta->fp) != 1 || fread(&(meta->char_count), sizeof(meta->char_count), 1, meta->fp) != 1 ) esl_fatal( "%s: Error reading meta data for FM index.\n", __FILE__); ESL_ALLOC (meta->seq_data, meta->seq_count * sizeof(FM_SEQDATA)); if (meta->seq_data == NULL ) esl_fatal("unable to allocate memory to store FM meta data\n"); for (i=0; iseq_count; i++) { if( fread(&(meta->seq_data[i].target_id), sizeof(meta->seq_data[i].target_id), 1, meta->fp) != 1 || fread(&(meta->seq_data[i].target_start), sizeof(meta->seq_data[i].target_start), 1, meta->fp) != 1 || fread(&(meta->seq_data[i].fm_start), sizeof(meta->seq_data[i].fm_start), 1, meta->fp) != 1 || fread(&(meta->seq_data[i].length), sizeof(meta->seq_data[i].length), 1, meta->fp) != 1 || fread(&(meta->seq_data[i].name_length), sizeof(meta->seq_data[i].name_length), 1, meta->fp) != 1 || fread(&(meta->seq_data[i].acc_length), sizeof(meta->seq_data[i].acc_length), 1, meta->fp) != 1 || fread(&(meta->seq_data[i].source_length),sizeof(meta->seq_data[i].source_length),1, meta->fp) != 1 || fread(&(meta->seq_data[i].desc_length), sizeof(meta->seq_data[i].desc_length), 1, meta->fp) != 1 ) esl_fatal( "%s: Error reading meta data for FM index.\n", __FILE__); ESL_ALLOC (meta->seq_data[i].name, (1+meta->seq_data[i].name_length) * sizeof(char)); ESL_ALLOC (meta->seq_data[i].acc, (1+meta->seq_data[i].acc_length) * sizeof(char)); ESL_ALLOC (meta->seq_data[i].source,(1+meta->seq_data[i].source_length) * sizeof(char)); ESL_ALLOC (meta->seq_data[i].desc, (1+meta->seq_data[i].desc_length) * sizeof(char)); if( fread(meta->seq_data[i].name, sizeof(char), meta->seq_data[i].name_length+1 , meta->fp) != meta->seq_data[i].name_length+1 || fread(meta->seq_data[i].acc, sizeof(char), meta->seq_data[i].acc_length+1 , meta->fp) != meta->seq_data[i].acc_length+1 || fread(meta->seq_data[i].source, sizeof(char), meta->seq_data[i].source_length+1 , meta->fp) != meta->seq_data[i].source_length+1 || fread(meta->seq_data[i].desc, sizeof(char), meta->seq_data[i].desc_length+1 , meta->fp) != meta->seq_data[i].desc_length+1 ) esl_fatal( "%s: Error reading meta data for FM index.\n", __FILE__); } if (meta->ambig_list->count > meta->ambig_list->size) { ESL_REALLOC(meta->ambig_list->ranges, meta->ambig_list->count * sizeof(FM_INTERVAL)); if (meta->ambig_list->ranges == NULL ) esl_fatal("unable to allocate memory to store FM ambiguity data\n"); meta->ambig_list->size = meta->ambig_list->count; } for (i=0; iambig_list->count; i++) { if( fread(&(meta->ambig_list->ranges[i].lower), sizeof(meta->ambig_list->ranges[i].lower), 1, meta->fp) != 1 || fread(&(meta->ambig_list->ranges[i].upper), sizeof(meta->ambig_list->ranges[i].upper), 1, meta->fp) != 1 ) esl_fatal( "%s: Error reading ambiguity data for FM index.\n", __FILE__); } return eslOK; ERROR: if (meta->seq_data) { for (i=0; iseq_count; i++) free(meta->seq_data[i].name); free(meta->seq_data); } free(meta); esl_fatal("Error allocating memory in %s\n", "readFM"); return eslFAIL; } /* Function: fm_configAlloc() * Synopsis: Allocate a model object, and its FM_METADATA */ int fm_configAlloc(FM_CFG **cfg) { int status; if ( cfg == NULL) esl_fatal("null pointer when allocating FM configuration\n"); *cfg = NULL; ESL_ALLOC(*cfg, sizeof(FM_CFG) ); if ((*cfg) == NULL) esl_fatal("unable to allocate memory to store FM config data\n"); ESL_ALLOC((*cfg)->meta, sizeof(FM_METADATA)); if ((*cfg)->meta == NULL) esl_fatal("unable to allocate memory to store FM meta data\n"); ESL_ALLOC ((*cfg)->meta->ambig_list, sizeof(FM_AMBIGLIST)); if ((*cfg)->meta->ambig_list == NULL) esl_fatal("unable to allocate memory to store FM ambiguity data\n"); return eslOK; ERROR: if (*cfg != NULL) { if ((*cfg)->meta != NULL) free ((*cfg)->meta); free (*cfg); } return eslEMEM; } /* Function: fm_configDestroy() * Synopsis: Destroy various memory items used for the FMindex implementation * * Purpose: Destroy the masks used by the FM index, the metadata for * the FM index, and the config itself. */ int fm_configDestroy(FM_CFG *cfg ) { if (cfg) { #if defined (p7_IMPL_SSE) if (cfg->fm_chars_mem) free(cfg->fm_chars_mem); if (cfg->fm_masks_mem) free(cfg->fm_masks_mem); if (cfg->fm_reverse_masks_mem) free(cfg->fm_reverse_masks_mem); #endif fm_metaDestroy(cfg->meta); free(cfg); } return eslOK; } /* Function: fm_metaDestroy() * Synopsis: Destroy various metadata for the FMindex implementation */ int fm_metaDestroy(FM_METADATA *meta ) { int i; if (meta != NULL) { for (i=0; iseq_count; i++) { if(meta->seq_data[i].name) free(meta->seq_data[i].name); if(meta->seq_data[i].acc) free(meta->seq_data[i].acc); if(meta->seq_data[i].source) free(meta->seq_data[i].source); if(meta->seq_data[i].desc) free(meta->seq_data[i].desc); } free(meta->seq_data); if (meta->ambig_list) { if (meta->ambig_list->ranges) free(meta->ambig_list->ranges); free(meta->ambig_list); } fm_alphabetDestroy(meta); free (meta); } return eslOK; } /************************************************************ * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: fm_general.c 3784 2011-12-07 21:51:25Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/trunk/src/fm_general.c $ ************************************************************/ hmmer-3.1b2/src/hmmer.c0000664361611702660230000002125612473612613014341 0ustar wheelerteddy/* General routines used throughout HMMER. * * Contents: * 1. Miscellaneous functions for H3 * 2. Unit tests * 3. Test driver * 4. License and copyright * * SRE, Fri Jan 12 13:19:38 2007 [Janelia] [Franz Ferdinand, eponymous] * SVN $Id: hmmer.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "hmmer.h" /***************************************************************** * 1. Miscellaneous functions for H3 *****************************************************************/ /* Function: p7_banner() * Synopsis: print standard HMMER application output header * Incept: SRE, Wed May 23 10:45:53 2007 [Janelia] * * Purpose: Print the standard HMMER command line application banner * to , constructing it from (the name of the * program) and a short one-line description . * For example, * * might result in: * * \begin{cchunk} * # hmmsim :: collect profile HMM score distributions * # HMMER 3.0 (May 2007) * # Copyright (C) 2004-2007 HHMI Janelia Farm Research Campus * # Freely licensed under the Janelia Software License. * # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * \end{cchunk} * * would typically be an application's * , rather than a fixed string. This allows the * program to be renamed, or called under different names * via symlinks. Any path in the is discarded; * for instance, if is "/usr/local/bin/hmmsim", * "hmmsim" is used as the program name. * * Note: * Needs to pick up preprocessor #define's from p7_config.h, * as set by ./configure: * * symbol example * ------ ---------------- * HMMER_VERSION "3.0" * HMMER_DATE "May 2007" * HMMER_COPYRIGHT "Copyright (C) 2004-2007 HHMI Janelia Farm Research Campus" * HMMER_LICENSE "Freely licensed under the Janelia Software License." * * Returns: (void) */ void p7_banner(FILE *fp, char *progname, char *banner) { char *appname = NULL; if (esl_FileTail(progname, FALSE, &appname) != eslOK) appname = progname; fprintf(fp, "# %s :: %s\n", appname, banner); fprintf(fp, "# HMMER %s (%s); %s\n", HMMER_VERSION, HMMER_DATE, HMMER_URL); fprintf(fp, "# %s\n", HMMER_COPYRIGHT); fprintf(fp, "# %s\n", HMMER_LICENSE); fprintf(fp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n"); if (appname != NULL) free(appname); return; } /* Function: p7_CreateDefaultApp() * Synopsis: Initialize a small/simple/standard HMMER application * Incept: SRE, Thu Oct 28 15:03:21 2010 [Janelia] * * Purpose: Identical to , but * specialized for HMMER. See documentation in * . * * Args: options - array of structures for getopts * nargs - number of cmd line arguments expected (excl. of cmdname) * argc - from main() * argv - from main() * banner - optional one-line description of program (or NULL) * usage - optional one-line usage hint (or NULL) * * Returns: ptr to new object. * * On command line errors, this routine prints an error * message to then calls to halt * execution with abnormal (1) status. * * If the standard <-h> option is seen, the routine prints * the help page (using the data in the structure), * then calls to exit with normal (0) status. * * Xref: J7/3 * * Note: The only difference between this and esl_getopts_CreateDefaultApp() * is to call p7_banner() instead of esl_banner(), to get HMMER * versioning info into the header. There ought to be a better way * (perhaps using PACKAGE_* define's instead of HMMER_* vs. EASEL_* * define's in esl_banner(), thus removing the need for p7_banner). */ ESL_GETOPTS * p7_CreateDefaultApp(ESL_OPTIONS *options, int nargs, int argc, char **argv, char *banner, char *usage) { ESL_GETOPTS *go = NULL; go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); if (usage != NULL) esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "-h") == TRUE) { if (banner != NULL) p7_banner(stdout, argv[0], banner); if (usage != NULL) esl_usage (stdout, argv[0], usage); puts("\nOptions:"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != nargs) { puts("Incorrect number of command line arguments."); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } return go; } /* Function: p7_AminoFrequencies() * Incept: SRE, Fri Jan 12 13:46:41 2007 [Janelia] * * Purpose: Fills a vector with amino acid background frequencies, * in [A..Y] alphabetic order, same order that Easel digital * alphabet uses. Caller must provide allocated for at * least 20 floats. * * These were updated 4 Sept 2007, from Swiss-Prot 50.8, * (Oct 2006), counting over 85956127 (86.0M) residues. * * Returns: on success. */ int p7_AminoFrequencies(float *f) { f[0] = 0.0787945; /* A */ f[1] = 0.0151600; /* C */ f[2] = 0.0535222; /* D */ f[3] = 0.0668298; /* E */ f[4] = 0.0397062; /* F */ f[5] = 0.0695071; /* G */ f[6] = 0.0229198; /* H */ f[7] = 0.0590092; /* I */ f[8] = 0.0594422; /* K */ f[9] = 0.0963728; /* L */ f[10]= 0.0237718; /* M */ f[11]= 0.0414386; /* N */ f[12]= 0.0482904; /* P */ f[13]= 0.0395639; /* Q */ f[14]= 0.0540978; /* R */ f[15]= 0.0683364; /* S */ f[16]= 0.0540687; /* T */ f[17]= 0.0673417; /* V */ f[18]= 0.0114135; /* W */ f[19]= 0.0304133; /* Y */ return eslOK; } /***************************************************************** * 2. Unit tests *****************************************************************/ #ifdef p7HMMER_TESTDRIVE static void utest_alphabet_config(int alphatype) { char *msg = "HMMER alphabet config unit test failed"; ESL_ALPHABET *abc = NULL; if ((abc = esl_alphabet_Create(alphatype)) == NULL) esl_fatal(msg); if (abc->K > p7_MAXABET) esl_fatal(msg); if (abc->Kp > p7_MAXCODE) esl_fatal(msg); esl_alphabet_Destroy(abc); } #endif /*p7HMMER_TESTDRIVE*/ /***************************************************************** * 3. Test driver *****************************************************************/ #ifdef p7HMMER_TESTDRIVE /* gcc -o hmmer_utest -g -Wall -I../easel -L../easel -I. -L. -Dp7HMMER_TESTDRIVE hmmer.c -lhmmer -leasel -lm * ./hmmer_utest */ #include "esl_getopts.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for hmmer.c"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); utest_alphabet_config(eslAMINO); utest_alphabet_config(eslDNA); utest_alphabet_config(eslRNA); utest_alphabet_config(eslCOINS); utest_alphabet_config(eslDICE); esl_getopts_Destroy(go); return 0; } #endif /*p7HMMER_TESTDRIVE*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/p7_null3.c0000664361611702660230000003146512473612614014700 0ustar wheelerteddy/* "null3" model: biased composition correction * * Contents: * 1. Null3 estimation algorithms. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * See p7_domaindef.c -- null3 correction of per-seq and per-domain * scores is embedded within p7_domaindef's logic; we split it out * to a separate file because it's so important. * * Approach is based heavily on the null3 approach used in Infernal, * and described in its user guide, specifically based on * ScoreCorrectionNull3CompUnknown() * * SVN $Id: null3.c 3474 2011-02-17 13:25:32Z wheelert $ */ #include "p7_config.h" #include "easel.h" #include "esl_vectorops.h" #include "hmmer.h" /***************************************************************** * 1. Null3 estimation algorithms. *****************************************************************/ /* Function: p7_null3_score() * * Purpose: Calculate a correction (in log_2 odds) to be applied * to a sequence, using a null model based on the * composition of the target sequence. * The null model is constructed /post hoc/ as the * distribution of the target sequence; if the target * sequence is 40% A, 5% C, 5% G, 40% T, then the null * model is (0.4, 0.05, 0.05, 0.4). This function is * based heavily on Infernal's ScoreCorrectionNull3(), * with two important changes: * - it leaves the log2 conversion from NATS to BITS * for the calling function. * - it doesn't include the omega score modifier * (based on prior probability of using the null3 * model), again leaving this to the calling function. * * Args: abc - alphabet for hit (only used to get alphabet size) * dsq - the sequence the hit resides in * tr - trace of the alignment, used to find the match states * (non-match chars are ignored in computing freq, not used if NULL) * start - start position of hit in dsq * stop - end position of hit in dsq * bg - background, used for the default null model's emission freq * ret_sc - RETURN: the correction to the score (in NATS); * caller subtracts this from hit score to get * corrected score. * Return: void, ret_sc: the log-odds score correction (in NATS). */ void p7_null3_score(const ESL_ALPHABET *abc, const ESL_DSQ *dsq, P7_TRACE *tr, int start, int stop, P7_BG *bg, float *ret_sc) { float score = 0.; int status; int i; float *freq; int dir; int tr_pos; ESL_ALLOC(freq, sizeof(float) * abc->K); esl_vec_FSet(freq, abc->K, 0.0); /* contract check */ if(abc == NULL) esl_exception(eslEINVAL, FALSE, __FILE__, __LINE__, "p7_null3_score() alphabet is NULL.%s\n", ""); if(dsq == NULL) esl_exception(eslEINVAL, FALSE, __FILE__, __LINE__, "p7_null3_score() dsq alphabet is NULL.%s\n", ""); if(abc->type != eslRNA && abc->type != eslDNA) esl_exception(eslEINVAL, FALSE, __FILE__, __LINE__, "p7_null3_score() expects alphabet of RNA or DNA.%s\n", ""); dir = start < stop ? 1 : -1; if (tr != NULL) { /* skip the parts of the trace that precede the first match state */ tr_pos = 2; i = start; while (tr->st[tr_pos] != p7T_M) { if (tr->st[tr_pos] == p7T_N) i += dir; tr_pos++; } /* tally frequencies from characters hitting match state*/ while (tr->st[tr_pos] != p7T_E) { if (tr->st[tr_pos] == p7T_M) { if(esl_abc_XIsGap(abc, dsq[i])) esl_exception(eslEINVAL, FALSE, __FILE__, __LINE__, "in p7_null3_score(), res %d is a gap!%s\n", ""); esl_abc_FCount(abc, freq, dsq[i], 1.); } if (tr->st[tr_pos] != p7T_D ) i += dir; tr_pos++; } } else { /* tally frequencies from the full envelope */ for (i=ESL_MIN(start,stop); i <= ESL_MAX(start,stop); i++) { if(esl_abc_XIsGap(abc, dsq[i])) esl_exception(eslEINVAL, FALSE, __FILE__, __LINE__, "in p7_null3_score(), res %d is a gap!%s\n", ""); esl_abc_FCount(abc, freq, dsq[i], 1.); } } esl_vec_FNorm(freq, abc->K); /* now compute score modifier (nats) - note: even with tr!=NULL, this includes the unmatched characters*/ for (i = 0; i < abc->K; i++) score += freq[i]==0 ? 0.0 : esl_logf( freq[i]/bg->f[i] ) * freq[i] * ( (stop-start)*dir +1) ; /* Return the correction to the bit score. */ score = p7_FLogsum(0., score); *ret_sc = score; return; ERROR: esl_exception(eslEINVAL, FALSE, __FILE__, __LINE__, "p7_null3_score() memory allocation error.%s\n", ""); return; /* never reached */ } /***************************************************************** * 2. Benchmark driver *****************************************************************/ #ifdef p7_NULL3_BENCHMARK /* icc -O3 -static -o generic_null2_benchmark -I. -L. -I../easel -L../easel -Dp7GENERIC_NULL2_BENCHMARK generic_null2.c -lhmmer -leasel -lm ./benchmark-generic-null2 RRM_1 (M=72) Caudal_act (M=136) SMC_N (M=1151) ----------------- ------------------ ------------------- 21 Aug 2008 7.77u (185 Mc/s) 14.13u (192 Mc/s) 139.03u (165.6 Mc/s) */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for posterior residue null2, generic version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *gx1 = NULL; P7_GMX *gx2 = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); float null2[p7_MAXCODE]; int i; float fsc, bsc; double Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); gx1 = p7_gmx_Create(gm->M, L); gx2 = p7_gmx_Create(gm->M, L); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_GForward (dsq, L, gm, gx1, &fsc); p7_GBackward(dsq, L, gm, gx2, &bsc); p7_GDecoding(gm, gx1, gx2, gx2); esl_stopwatch_Start(w); for (i = 0; i < N; i++) p7_GNull2_ByExpectation(gm, gx2, null2); esl_stopwatch_Stop(w); Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / w->user; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_gmx_Destroy(gx1); p7_gmx_Destroy(gx2); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7_NULL3_BENCHMARK*/ /*------------------ end, benchmark driver ----------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7_NULL3_TESTDRIVE static void utest_correct_normalization(ESL_RANDOMNESS *r, P7_PROFILE *gm, P7_BG *bg, ESL_DSQ *dsq, int L, P7_GMX *fwd, P7_GMX *bck) { char *msg = "normalization unit test failed"; float null2[p7_MAXABET]; float sum; int x; esl_rsq_xfIID(r, bg->f, gm->abc->K, L, dsq); /* sample a random digital seq of length L */ p7_GForward (dsq, L, gm, fwd, NULL); p7_GBackward(dsq, L, gm, bck, NULL); p7_PosteriorNull2(L, gm, fwd, bck, bck); /* now contains posterior probs */ p7_Null2Corrections(gm, dsq, L, 0, bck, fwd, null2, NULL, NULL); /* use as workspace */ /* Convert null2 from lod score to frequencies f_d */ for (x = 0; x < gm->abc->K; x++) null2[x] = exp(null2[x]) * bg->f[x]; sum = esl_vec_FSum(null2, gm->abc->K); if (sum < 0.99 || sum > 1.01) esl_fatal(msg); } #endif /*p7_NULL3_TESTDRIVE*/ /*--------------------- end, unit tests -------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7_NULL3_TESTDRIVE /* gcc -o null2_utest -g -Wall -I../easel -L../easel -I. -L. -Dp7NULL2_TESTDRIVE null2.c -lhmmer -leasel -lm * ./null2_utest */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_alphabet.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-L", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "length of sampled sequences", 0 }, { "-M", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "length of sampled HMM", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "unit test driver for the null2 correction calculation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *fwd = NULL; P7_GMX *bck = NULL; ESL_DSQ *dsq = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); /* Sample a random HMM */ p7_hmm_Sample(r, M, abc, &hmm); /* Configure a profile from the sampled HMM */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); /* Other initial allocations */ dsq = malloc(sizeof(ESL_DSQ) * (L+2)); fwd = p7_gmx_Create(gm->M, L); bck = p7_gmx_Create(gm->M, L); p7_FLogsumInit(); utest_correct_normalization(r, gm, bg, dsq, L, fwd, bck); free(dsq); p7_gmx_Destroy(fwd); p7_gmx_Destroy(bck); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7_NULL3_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7_NULL3_EXAMPLE #endif /*p7_NULL3_EXAMPLE*/ /*------------------------ example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/nhmmscan.c0000664361611702660230000013276312473612614015044 0ustar wheelerteddy/* nhmmscan: search sequence(s) against a profile HMM database, using nhmmer pipeline */ #include "p7_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stopwatch.h" #ifdef HMMER_THREADS #include #include "esl_threads.h" #include "esl_workqueue.h" #endif /*HMMER_THREADS*/ #include "hmmer.h" #include "esl_vectorops.h" typedef struct { #ifdef HMMER_THREADS ESL_WORK_QUEUE *queue; #endif /*HMMER_THREADS*/ ESL_SQ *qsq; P7_BG *bg; /* null/background model */ P7_BG *bg_default; /* The default null/bg model. This should only be set (non-NULL) if bg has been overriden by --bgfile */ P7_PIPELINE *pli; /* work pipeline */ P7_TOPHITS *th; /* top hit results */ float *scores; float *fwd_emissions; /* to hold residue emission probabilities in serial order (gathered from the optimized striped with p7_oprofile_GetFwdEmissionArray() ). */ } WORKER_INFO; #define REPOPTS "-E,-T,--cut_ga,--cut_nc,--cut_tc" #define DOMREPOPTS "--domE,--domT,--cut_ga,--cut_nc,--cut_tc" #define INCOPTS "--incE,--incT,--cut_ga,--cut_nc,--cut_tc" #define INCDOMOPTS "--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #define THRESHOPTS "-E,-T,--domE,--domT,--incE,--incT,--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #define CPUOPTS NULL #define MPIOPTS NULL //#define DAEMONOPTS "-o,--tblout,--domtblout" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, /* Control of output */ { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "direct output to file , not stdout", 2 }, { "--tblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save parseable table of per-sequence hits to file ", 2 }, { "--dfamtblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save table of hits to file, in Dfam format ", 2 }, { "--aliscoresout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save of scores for each position in each alignment to ", 2 }, { "--acc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "prefer accessions over names in output", 2 }, { "--noali", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "don't output alignments, so output is smaller", 2 }, { "--notextw", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--textw", "unlimit ASCII text output line width", 2 }, { "--textw", eslARG_INT, "120", NULL, "n>=120",NULL, NULL, "--notextw", "set max width of ASCII text output lines", 2 }, /* Control of reporting thresholds */ { "-E", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, REPOPTS, "report models <= this E-value threshold in output", 4 }, { "-T", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, REPOPTS, "report models >= this score threshold in output", 4 }, /* Control of inclusion (significance) thresholds: */ { "--incE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, INCOPTS, "consider models <= this E-value threshold as significant", 5 }, { "--incT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCOPTS, "consider models >= this score threshold as significant", 5 }, /* Model-specific thresholding for both reporting and inclusion */ { "--cut_ga", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's GA gathering cutoffs to set all thresholding", 6 }, { "--cut_nc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's NC noise cutoffs to set all thresholding", 6 }, { "--cut_tc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's TC trusted cutoffs to set all thresholding", 6 }, /* Control of acceleration pipeline */ { "--max", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--F1,--F2,--F3", "Turn all heuristic filters off (less speed, more power)", 7 }, { "--F1", eslARG_REAL, "0.02", NULL, NULL, NULL, NULL, "--max", "MSV threshold: promote hits w/ P <= F1", 7 }, { "--F2", eslARG_REAL, "3e-3", NULL, NULL, NULL, NULL, "--max", "Vit threshold: promote hits w/ P <= F2", 7 }, { "--F3", eslARG_REAL, "3e-5", NULL, NULL, NULL, NULL, "--max", "Fwd threshold: promote hits w/ P <= F3", 7 }, { "--nobias", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--max", "turn off composition bias filter", 7 }, /* Other options */ { "--qformat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "assert input is in format ", 12 }, { "--nonull2", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "turn off biased composition score corrections", 12 }, { "-Z", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of comparisons done, for E-value calculation", 12 }, { "--seed", eslARG_INT, "42", NULL, "n>=0", NULL, NULL, NULL, "set RNG seed to (if 0: one-time arbitrary seed)", 12 }, { "--w_beta", eslARG_REAL, NULL, NULL, NULL, NULL, NULL, NULL, "tail mass at which window length is determined", 12 }, { "--w_length", eslARG_INT, NULL, NULL, NULL, NULL, NULL, NULL, "window length - essentially max expected hit length ", 12 }, { "--toponly", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--bottomonly", "only search the top strand", 12 }, { "--bottomonly", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--toponly", "only search the bottom strand", 12 }, /* stage-specific window length used for bias composition estimate, * hidden because they are confusing/expert options. May drag them out * into the daylight eventually */ { "--B1", eslARG_INT, "110", NULL, NULL, NULL, NULL, "--max,--nobias", "window length for biased-composition modifier (MSV)", 99 }, { "--B2", eslARG_INT, "240", NULL, NULL, NULL, NULL, "--max,--nobias", "window length for biased-composition modifier (Vit)", 99 }, { "--B3", eslARG_INT, "1000", NULL, NULL, NULL, NULL, "--max,--nobias", "window length for biased-composition modifier (Fwd)", 99 }, /* expert-only option (for now), hidden from view, for altering bg probs. May not keep. */ { "--bgfile", eslARG_INFILE, NULL, NULL, NULL, NULL, NULL, NULL, "override default background probs with values in file ", 99 }, /* Not used, but retained because esl option-handling code errors if it isn't kept here. Placed in group 99 so it doesn't print to help*/ { "--domE", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, DOMREPOPTS, "report domains <= this E-value threshold in output", 99 }, { "--domT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, DOMREPOPTS, "report domains >= this score cutoff in output", 99 }, { "--incdomE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, INCDOMOPTS, "consider domains <= this E-value threshold as significant", 99 }, { "--incdomT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCDOMOPTS, "consider domains >= this score threshold as significant", 99 }, { "--domZ", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of significant seqs, for domain E-value calculation", 99 }, // { "--daemon", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, DAEMONOPTS, "run program as a daemon", 12 }, #ifdef HMMER_THREADS { "--cpu", eslARG_INT, NULL,"HMMER_NCPU","n>=0",NULL, NULL, CPUOPTS, "number of parallel CPU workers to use for multithreads", 12 }, #endif { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; /* struct cfg_s : "Global" application configuration shared by all threads/processes * * This structure is passed to routines within main.c, as a means of semi-encapsulation * of shared data amongst different parallel processes (threads or MPI processes). */ struct cfg_s { char *seqfile; /* query sequence file */ char *hmmfile; /* database HMM file */ int do_mpi; /* TRUE if we're doing MPI parallelization */ int nproc; /* how many MPI processes, total */ int my_rank; /* who am I, in 0..nproc-1 */ }; static char usage[] = "[-options] "; static char banner[] = "search DNA sequence(s) against a DNA profile database"; static int serial_master(ESL_GETOPTS *go, struct cfg_s *cfg); static int serial_loop (WORKER_INFO *info, P7_HMMFILE *hfp); #ifdef HMMER_THREADS #define BLOCK_SIZE 1 static int thread_loop(ESL_THREADS *obj, ESL_WORK_QUEUE *queue, P7_HMMFILE *hfp); static void pipeline_thread(void *arg); #endif /*HMMER_THREADS*/ /* process_commandline() * * Processes the commandline, filling in fields in and creating and returning * an options structure. The help page (hmmsearch -h) is formatted * here. */ static int process_commandline(int argc, char **argv, ESL_GETOPTS **ret_go, char **ret_hmmfile, char **ret_seqfile) { ESL_GETOPTS *go = esl_getopts_Create(options); int status; if (esl_opt_ProcessEnvironment(go) != eslOK) { if (printf("Failed to process environment: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_VerifyConfig(go) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* help format: */ if (esl_opt_GetBoolean(go, "-h") == TRUE) { p7_banner(stdout, argv[0], banner); esl_usage(stdout, argv[0], usage); if (puts("\nBasic options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 80=textwidth*/ if (puts("\nOptions controlling output:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); if (puts("\nOptions controlling reporting thresholds:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); if (puts("\nOptions controlling inclusion (significance) thresholds:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 5, 2, 80); if (puts("\nOptions for model-specific thresholding:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 6, 2, 80); if (puts("\nOptions controlling acceleration heuristics:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 7, 2, 80); if (puts("\nOther expert options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 12, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != 2) { if (puts("Incorrect number of command line arguments.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_hmmfile = esl_opt_GetArg(go, 1)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_seqfile = esl_opt_GetArg(go, 2)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* Validate any attempted use of stdin streams */ if (strcmp(*ret_hmmfile, "-") == 0) { if (puts("nhmmscan cannot read from stdin stream, because it must have hmmpress'ed auxfiles") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } *ret_go = go; return eslOK; FAILURE: /* all errors handled here are user errors, so be polite. */ esl_usage(stdout, argv[0], usage); if (puts("\nwhere most common options are:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 80=textwidth*/ if (printf("\nTo see more help on available options, do %s -h\n\n", argv[0]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_getopts_Destroy(go); exit(1); ERROR: if (go) esl_getopts_Destroy(go); exit(status); } static int output_header(FILE *ofp, ESL_GETOPTS *go, char *hmmfile, char *seqfile) { p7_banner(ofp, go->argv[0], banner); if (fprintf(ofp, "# query sequence file: %s\n", seqfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# target HMM database: %s\n", hmmfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-o") && fprintf(ofp, "# output directed to file: %s\n", esl_opt_GetString(go, "-o")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--tblout") && fprintf(ofp, "# per-seq hits tabular output: %s\n", esl_opt_GetString(go, "--tblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--dfamtblout") && fprintf(ofp, "# hits output in Dfam format: %s\n", esl_opt_GetString(go, "--dfamtblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--aliscoresout") && fprintf(ofp, "# alignment scores output: %s\n", esl_opt_GetString(go, "--aliscoresout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--acc") && fprintf(ofp, "# prefer accessions over names: yes\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--noali") && fprintf(ofp, "# show alignments in output: no\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--notextw") && fprintf(ofp, "# max ASCII text line length: unlimited\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--textw") && fprintf(ofp, "# max ASCII text line length: %d\n", esl_opt_GetInteger(go, "--textw")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-E") && fprintf(ofp, "# profile reporting threshold: E-value <= %g\n", esl_opt_GetReal(go, "-E")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-T") && fprintf(ofp, "# profile reporting threshold: score >= %g\n", esl_opt_GetReal(go, "-T")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incE") && fprintf(ofp, "# profile inclusion threshold: E-value <= %g\n", esl_opt_GetReal(go, "--incE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incT") && fprintf(ofp, "# profile inclusion threshold: score >= %g\n", esl_opt_GetReal(go, "--incT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--cut_ga") && fprintf(ofp, "# model-specific thresholding: GA cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--cut_nc") && fprintf(ofp, "# model-specific thresholding: NC cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--cut_tc") && fprintf(ofp, "# model-specific thresholding: TC cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--max") && fprintf(ofp, "# Max sensitivity mode: on [all heuristic filters off]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F1") && fprintf(ofp, "# MSV filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F1")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F2") && fprintf(ofp, "# Vit filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F2")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F3") && fprintf(ofp, "# Fwd filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F3")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--nobias") && fprintf(ofp, "# biased composition HMM filter: off\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--B1") && fprintf(ofp, "# biased comp MSV window len: %d\n", esl_opt_GetInteger(go, "--B1")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--B2") && fprintf(ofp, "# biased comp Viterbi window len: %d\n", esl_opt_GetInteger(go, "--B2")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--B3") && fprintf(ofp, "# biased comp Forward window len: %d\n", esl_opt_GetInteger(go, "--B3")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--bgfile") && fprintf(ofp, "# file with custom bg probs: %s\n", esl_opt_GetString(go, "--bgfile")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--nonull2") && fprintf(ofp, "# null2 bias corrections: off\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--toponly") && fprintf(ofp, "# search only top strand: on\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--bottomonly") && fprintf(ofp, "# search only bottom strand: on\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-Z") && fprintf(ofp, "# sequence search space set to: %.0f\n", esl_opt_GetReal(go, "-Z")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--seed")) { if (esl_opt_GetInteger(go, "--seed")==0 && fprintf(ofp, "# random number seed: one-time arbitrary\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); else if ( fprintf(ofp, "# random number seed set to: %d\n", esl_opt_GetInteger(go, "--seed")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (esl_opt_IsUsed(go, "--qformat") && fprintf(ofp, "# input seqfile format asserted: %s\n", esl_opt_GetString(go, "--qformat")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--w_beta") && fprintf(ofp, "# window length beta value: %g\n", esl_opt_GetReal(go, "--w_beta")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--w_length") && fprintf(ofp, "# window length : %d\n", esl_opt_GetInteger(go, "--w_length")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); // if (esl_opt_IsUsed(go, "--daemon") && fprintf(ofp, "run as a daemon process\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #ifdef HMMER_THREADS if (esl_opt_IsUsed(go, "--cpu") && fprintf(ofp, "# number of worker threads: %d\n", esl_opt_GetInteger(go, "--cpu")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #endif if (fprintf(ofp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); return eslOK; } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; struct cfg_s cfg; int status = eslOK; impl_Init(); /* processor-specific initialization */ p7_FLogsumInit(); /* we're going to use table-driven Logsum() approximations at times */ /* Initialize what we can in the config structure (without knowing the alphabet yet) */ cfg.hmmfile = NULL; cfg.seqfile = NULL; cfg.do_mpi = FALSE; /* this gets reset below, if we init MPI */ cfg.nproc = 0; /* this gets reset below, if we init MPI */ cfg.my_rank = 0; /* this gets reset below, if we init MPI */ process_commandline(argc, argv, &go, &cfg.hmmfile, &cfg.seqfile); status = serial_master(go, &cfg); esl_getopts_Destroy(go); return status; } /* serial_master() * The serial version of hmmsearch. * For each query HMM in search the database for hits. * * A master can only return if it's successful. All errors are handled * immediately and fatally with p7_Fail(). */ static int serial_master(ESL_GETOPTS *go, struct cfg_s *cfg) { FILE *ofp = stdout; /* output file for results (default stdout) */ FILE *tblfp = NULL; /* output stream for tabular per-seq (--tblout) */ FILE *dfamtblfp = NULL; /* output stream for tabular Dfam format (--dfamtblout) */ FILE *aliscoresfp = NULL; /* output stream for alignment scores (--aliscoresout) */ P7_BG *bg_manual = NULL; int seqfmt = eslSQFILE_UNKNOWN; /* format of seqfile */ ESL_SQFILE *sqfp = NULL; /* open seqfile */ P7_HMMFILE *hfp = NULL; /* open HMM database file */ ESL_ALPHABET *abc = NULL; /* sequence alphabet */ P7_OPROFILE *om = NULL; /* target profile */ ESL_STOPWATCH *w = NULL; /* timing */ ESL_SQ *qsq = NULL; /* query sequence */ int nquery = 0; int textw; int status = eslOK; int hstatus = eslOK; int sstatus = eslOK; int i; int ncpus = 0; int infocnt = 0; WORKER_INFO *info = NULL; #ifdef HMMER_THREADS P7_OM_BLOCK *block = NULL; ESL_THREADS *threadObj= NULL; ESL_WORK_QUEUE *queue = NULL; #endif char errbuf[eslERRBUFSIZE]; double window_beta = -1.0 ; int window_length = -1; if (esl_opt_IsUsed(go, "--w_beta")) { if ( ( window_beta = esl_opt_GetReal(go, "--w_beta") ) < 0 || window_beta > 1 ) esl_fatal("Invalid window-length beta value\n"); } if (esl_opt_IsUsed(go, "--w_length")) { if (( window_length = esl_opt_GetInteger(go, "--w_length")) < 4 ) esl_fatal("Invalid window length value\n"); } w = esl_stopwatch_Create(); if (esl_opt_GetBoolean(go, "--notextw")) textw = 0; else textw = esl_opt_GetInteger(go, "--textw"); /* If caller declared an input format, decode it */ if (esl_opt_IsOn(go, "--qformat")) { seqfmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--qformat")); if (seqfmt == eslSQFILE_UNKNOWN) p7_Fail("%s is not a recognized input sequence file format\n", esl_opt_GetString(go, "--qformat")); } /* validate options if running as a daemon */ // if (esl_opt_IsOn(go, "--daemon")) { /* running as a daemon, the input format must be type daemon */ // if (seqfmt != eslSQFILE_UNKNOWN && seqfmt != eslSQFILE_DAEMON) // esl_fatal("Input format %s not supported. Must be daemon\n", esl_opt_GetString(go, "--qformat")); // seqfmt = eslSQFILE_DAEMON; // if (strcmp(cfg->seqfile, "-") != 0) esl_fatal("Query sequence file must be '-'\n"); // } /* Open the target profile database to get the sequence alphabet */ status = p7_hmmfile_OpenE(cfg->hmmfile, p7_HMMDBENV, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", cfg->hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem, trying to open HMM file %s.\n%s\n", cfg->hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, cfg->hmmfile, errbuf); if (! hfp->is_pressed) p7_Fail("Failed to open binary auxfiles for %s: use hmmpress first\n", hfp->fname); hstatus = p7_oprofile_ReadMSV(hfp, &abc, &om); if (hstatus == eslEFORMAT) p7_Fail("bad format, binary auxfiles, %s:\n%s", cfg->hmmfile, hfp->errbuf); else if (hstatus == eslEINCOMPAT) p7_Fail("HMM file %s contains different alphabets", cfg->hmmfile); else if (hstatus != eslOK) p7_Fail("Unexpected error in reading HMMs from %s", cfg->hmmfile); p7_oprofile_Destroy(om); p7_hmmfile_Close(hfp); /* Open the query sequence database */ status = esl_sqfile_OpenDigital(abc, cfg->seqfile, seqfmt, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("Failed to open sequence file %s for reading\n", cfg->seqfile); else if (status == eslEFORMAT) p7_Fail("Sequence file %s is empty or misformatted\n", cfg->seqfile); else if (status == eslEINVAL) p7_Fail("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) p7_Fail("Unexpected error %d opening sequence file %s\n", status, cfg->seqfile); if (sqfp->format > 100) // breaking the law! That range is reserved for msa, for aligned formats p7_Fail("%s contains a multiple sequence alignment; expect unaligned sequences, like FASTA\n", cfg->seqfile); qsq = esl_sq_CreateDigital(abc); /* Open the results output files */ if (esl_opt_IsOn(go, "-o")) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) esl_fatal("Failed to open output file %s for writing\n", esl_opt_GetString(go, "-o")); } if (esl_opt_IsOn(go, "--tblout")) { if ((tblfp = fopen(esl_opt_GetString(go, "--tblout"), "w")) == NULL) esl_fatal("Failed to open tabular per-seq output file %s for writing\n", esl_opt_GetString(go, "--tblfp")); } if (esl_opt_IsOn(go, "--dfamtblout")) { if ((dfamtblfp = fopen(esl_opt_GetString(go, "--dfamtblout"),"w")) == NULL) esl_fatal("Failed to open tabular dfam output file %s for writing\n", esl_opt_GetString(go, "--dfamtblout")); } if (esl_opt_IsOn(go, "--aliscoresout")) { if ((aliscoresfp = fopen(esl_opt_GetString(go, "--aliscoresout"),"w")) == NULL) esl_fatal("Failed to open alignment scores output file %s for writing\n", esl_opt_GetString(go, "--aliscoresout")); } output_header(ofp, go, cfg->hmmfile, cfg->seqfile); #ifdef HMMER_THREADS /* initialize thread data */ if (esl_opt_IsOn(go, "--cpu")) ncpus = esl_opt_GetInteger(go, "--cpu"); else esl_threads_CPUCount(&ncpus); if (ncpus > 0) { threadObj = esl_threads_Create(&pipeline_thread); queue = esl_workqueue_Create(ncpus * 2); } #endif if (esl_opt_IsOn(go, "--bgfile")) { bg_manual = p7_bg_Create(abc); status = p7_bg_Read(esl_opt_GetString(go, "--bgfile"), bg_manual, errbuf); if (status != eslOK) p7_Fail("Trouble reading bgfile: %s\n", errbuf); } infocnt = (ncpus == 0) ? 1 : ncpus; ESL_ALLOC(info, sizeof(*info) * infocnt); for (i = 0; i < infocnt; ++i) { if (bg_manual != NULL) { info[i].bg = p7_bg_Clone(bg_manual); info[i].bg_default = p7_bg_Create(abc); } else { info[i].bg = p7_bg_Create(abc); info[i].bg_default = NULL; } #ifdef HMMER_THREADS info[i].queue = queue; #endif ESL_ALLOC(info[i].scores, sizeof(float) * abc->Kp * 16); //allocation of space to store scores that will be used in p7_oprofile_Update(Fwd|Vit|MSV)EmissionScores } #ifdef HMMER_THREADS for (i = 0; i < ncpus * 2; ++i) { block = p7_oprofile_CreateBlock(BLOCK_SIZE); if (block == NULL) esl_fatal("Failed to allocate sequence block"); status = esl_workqueue_Init(queue, block); if (status != eslOK) esl_fatal("Failed to add block to work queue"); } #endif /* Outside loop: over each query sequence in . */ while ((sstatus = esl_sqio_Read(sqfp, qsq)) == eslOK) { if (sstatus == eslEMEM) p7_Fail("Memory allocation error reading sequence file\n", status); if (sstatus == eslEINCONCEIVABLE) p7_Fail("Unexpected error %d reading sequence file\n", status); // if (qsq->L > NHMMER_MAX_RESIDUE_COUNT) p7_Fail("Input sequence %s in file %s exceeds maximum length of %d bases.\n", qsq->name, cfg->seqfile, NHMMER_MAX_RESIDUE_COUNT); nquery++; esl_stopwatch_Start(w); /* Open the target profile database */ status = p7_hmmfile_OpenE(cfg->hmmfile, p7_HMMDBENV, &hfp, NULL); if (status != eslOK) p7_Fail("Unexpected error %d in opening hmm file %s.\n", status, cfg->hmmfile); #ifdef HMMER_THREADS /* if we are threaded, create a lock to prevent multiple readers */ if (ncpus > 0) { status = p7_hmmfile_CreateLock(hfp); if (status != eslOK) p7_Fail("Unexpected error %d creating lock\n", status); } #endif if (fprintf(ofp, "Query: %s [L=%ld]\n", qsq->name, (long) qsq->n) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (qsq->acc[0] != 0 && fprintf(ofp, "Accession: %s\n", qsq->acc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (qsq->desc[0] != 0 && fprintf(ofp, "Description: %s\n", qsq->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); for (i = 0; i < infocnt; ++i) { /* Create processing pipeline and hit list */ info[i].th = p7_tophits_Create(); info[i].pli = p7_pipeline_Create(go, 100, 100, TRUE, p7_SCAN_MODELS); /* M_hint = 100, L_hint = 100 are just dummies for now */ info[i].pli->hfp = hfp; /* for two-stage input, pipeline needs */ p7_pli_NewSeq(info[i].pli, qsq); info[i].qsq = qsq; if ( esl_opt_IsUsed(go, "--toponly") ) info[i].pli->strands = p7_STRAND_TOPONLY; else if ( esl_opt_IsUsed(go, "--bottomonly") ) info[i].pli->strands = p7_STRAND_BOTTOMONLY; else info[i].pli->strands = p7_STRAND_BOTH; info[i].fwd_emissions = NULL; #ifdef HMMER_THREADS if (ncpus > 0) esl_threads_AddThread(threadObj, &info[i]); #endif } #ifdef HMMER_THREADS if (ncpus > 0) hstatus = thread_loop(threadObj, queue, hfp); else hstatus = serial_loop(info, hfp); #else hstatus = serial_loop(info, hfp); #endif switch(hstatus) { case eslEFORMAT: p7_Fail("bad file format in HMM file %s", cfg->hmmfile); break; case eslEINCOMPAT: p7_Fail("HMM file %s contains different alphabets", cfg->hmmfile); break; case eslEOF: case eslOK: /* do nothing */ break; default: p7_Fail("Unexpected error in reading HMMs from %s", cfg->hmmfile); } /* merge the results of the search results */ for (i = 1; i < infocnt; ++i) { p7_tophits_Merge(info[0].th, info[i].th); p7_pipeline_Merge(info[0].pli, info[i].pli); p7_pipeline_Destroy(info[i].pli); p7_tophits_Destroy(info[i].th); } /* modify e-value to account for number of models */ for (i = 0; i < info->th->N ; i++) { info->th->unsrt[i].lnP += log((float)info->pli->nmodels); info->th->unsrt[i].dcl[0].lnP = info->th->unsrt[i].lnP; info->th->unsrt[i].sortkey = -1.0 * info->th->unsrt[i].lnP; } /* it's possible to have duplicates based on how viterbi ranges can overlap */ p7_tophits_SortByModelnameAndAlipos(info->th); p7_tophits_RemoveDuplicates(info->th, info->pli->use_bit_cutoffs); /* Print results */ p7_tophits_SortBySortkey(info->th); p7_tophits_Threshold(info->th, info->pli); //tally up total number of hits and target coverage info->pli->n_output = info->pli->pos_output = 0; for (i = 0; i < info->th->N; i++) { if ( (info->th->hit[i]->flags & p7_IS_REPORTED) || info->th->hit[i]->flags & p7_IS_INCLUDED) { info->pli->n_output++; info->pli->pos_output += abs(info->th->hit[i]->dcl[0].jali - info->th->hit[i]->dcl[0].iali) + 1; } } p7_tophits_Targets(ofp, info->th, info->pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); p7_tophits_Domains(ofp, info->th, info->pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (tblfp) p7_tophits_TabularTargets(tblfp, qsq->name, qsq->acc, info->th, info->pli, (nquery == 1)); if (dfamtblfp) p7_tophits_TabularXfam(dfamtblfp, qsq->name, NULL, info->th, info->pli); if (aliscoresfp) p7_tophits_AliScores(aliscoresfp, qsq->name, info->th ); esl_stopwatch_Stop(w); info->pli->nseqs = 1; p7_pli_Statistics(ofp, info->pli, w); if (fprintf(ofp, "//\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); fflush(ofp); p7_hmmfile_Close(hfp); p7_pipeline_Destroy(info->pli); p7_tophits_Destroy(info->th); esl_sq_Reuse(qsq); } if (sstatus == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (sstatus != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", sstatus, sqfp->filename); /* Terminate outputs - any last words? */ if (tblfp) p7_tophits_TabularTail(tblfp, "hmmscan", p7_SCAN_MODELS, cfg->seqfile, cfg->hmmfile, go); if (ofp) { if (fprintf(ofp, "[ok]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } /* Cleanup - prepare for successful exit */ for (i = 0; i < infocnt; ++i) { p7_bg_Destroy(info[i].bg); p7_bg_Destroy(info[i].bg_default); if (info[i].scores != NULL) free(info[i].scores); } #ifdef HMMER_THREADS if (ncpus > 0) { esl_workqueue_Reset(queue); while (esl_workqueue_Remove(queue, (void **) &block) == eslOK) p7_oprofile_DestroyBlock(block); esl_workqueue_Destroy(queue); esl_threads_Destroy(threadObj); } #endif ERROR: p7_bg_Destroy(bg_manual); if (info!=NULL) free(info); if (qsq!=NULL) esl_sq_Destroy(qsq); if (w!=NULL) esl_stopwatch_Destroy(w); if (abc!=NULL) esl_alphabet_Destroy(abc); if (sqfp!=NULL) esl_sqfile_Close(sqfp); if (ofp != stdout) fclose(ofp); if (tblfp) fclose(tblfp); if (dfamtblfp) fclose(dfamtblfp); if (aliscoresfp) fclose(aliscoresfp); return status; } static int serial_loop(WORKER_INFO *info, P7_HMMFILE *hfp) { int status; int i; int seq_len = 0; int prev_hit_cnt = 0; P7_OPROFILE *om = NULL; P7_SCOREDATA *scoredata = NULL; /* hmm-specific data used by nhmmer */ ESL_ALPHABET *abc = NULL; #ifdef eslAUGMENT_ALPHABET ESL_SQ *sq_revcmp = NULL; if (info->pli->strands != p7_STRAND_TOPONLY && info->qsq->abc->complement != NULL ) { sq_revcmp = esl_sq_CreateDigital(info->qsq->abc); esl_sq_Copy(info->qsq,sq_revcmp); esl_sq_ReverseComplement(sq_revcmp); info->pli->nres += info->qsq->n; } #endif /*eslAUGMENT_ALPHABET*/ /* Main loop: */ while ((status = p7_oprofile_ReadMSV(hfp, &abc, &om)) == eslOK) { seq_len = 0; p7_pli_NewModel(info->pli, om, info->bg); p7_bg_SetLength(info->bg, info->qsq->n); p7_oprofile_ReconfigLength(om, info->qsq->n); if (info->bg_default != NULL) { /*bg was overridden by --bgfile; we need to fix all the scores *-First, compute emissions based on bg_default *-Then use those emissions to compute new scores for fwd, vit and msv, based on bg *We need to ReadRest now, so we correctly compute fwd_emissions */ p7_oprofile_ReadRest(info->pli->hfp, om); if ((status = p7_pli_NewModelThresholds(info->pli, om)) != eslOK) return status; ESL_REALLOC(info->fwd_emissions, sizeof(float) * abc->Kp * (om->M+1)); p7_oprofile_GetFwdEmissionArray(om, info->bg_default, info->fwd_emissions); p7_oprofile_UpdateFwdEmissionScores(om, info->bg, info->fwd_emissions, info->scores); p7_oprofile_UpdateVitEmissionScores(om, info->bg, info->fwd_emissions, info->scores); p7_oprofile_UpdateMSVEmissionScores(om, info->bg, info->fwd_emissions, info->scores); } scoredata = p7_hmm_ScoreDataCreate(om, FALSE); #ifdef eslAUGMENT_ALPHABET //reverse complement if (info->pli->strands != p7_STRAND_TOPONLY && info->qsq->abc->complement != NULL ) { p7_Pipeline_LongTarget(info->pli, om, scoredata, info->bg, info->th, 0, sq_revcmp, p7_COMPLEMENT, NULL, NULL, NULL/*, NULL, NULL, NULL*/); p7_pipeline_Reuse(info->pli); // prepare for next search seq_len = info->qsq->n; } #endif if (info->pli->strands != p7_STRAND_BOTTOMONLY) { p7_Pipeline_LongTarget(info->pli, om, scoredata, info->bg, info->th, 0, info->qsq, p7_NOCOMPLEMENT, NULL, NULL, NULL/*, NULL, NULL, NULL*/); p7_pipeline_Reuse(info->pli); seq_len += info->qsq->n; } for (i = prev_hit_cnt; i < info->th->N ; i++) { info->th->unsrt[i].lnP += log((float)seq_len / (float)om->max_length); info->th->unsrt[i].dcl[0].lnP = info->th->unsrt[i].lnP; info->th->unsrt[i].sortkey = -1.0 * info->th->unsrt[i].lnP; info->th->unsrt[i].dcl[0].ad->L = om->M; } prev_hit_cnt = info->th->N; p7_oprofile_Destroy(om); p7_hmm_ScoreDataDestroy(scoredata); } esl_alphabet_Destroy(abc); #ifdef eslAUGMENT_ALPHABET esl_sq_Destroy(sq_revcmp); #endif if (info->fwd_emissions != NULL) free(info->fwd_emissions); ERROR: return status; } #ifdef HMMER_THREADS static int thread_loop(ESL_THREADS *obj, ESL_WORK_QUEUE *queue, P7_HMMFILE *hfp) { int status = eslOK; int sstatus = eslOK; int eofCount = 0; P7_OM_BLOCK *block; ESL_ALPHABET *abc = NULL; void *newBlock; esl_workqueue_Reset(queue); esl_threads_WaitForStart(obj); status = esl_workqueue_ReaderUpdate(queue, NULL, &newBlock); if (status != eslOK) esl_fatal("Work queue reader failed"); /* Main loop: */ while (sstatus == eslOK) { block = (P7_OM_BLOCK *) newBlock; sstatus = p7_oprofile_ReadBlockMSV(hfp, &abc, block); if (sstatus == eslEOF) { if (eofCount < esl_threads_GetWorkerCount(obj)) sstatus = eslOK; ++eofCount; } if (sstatus == eslOK) { status = esl_workqueue_ReaderUpdate(queue, block, &newBlock); if (status != eslOK) esl_fatal("Work queue reader failed"); } } status = esl_workqueue_ReaderUpdate(queue, block, NULL); if (status != eslOK) esl_fatal("Work queue reader failed"); if (sstatus == eslEOF) { /* wait for all the threads to complete */ esl_threads_WaitForFinish(obj); esl_workqueue_Complete(queue); } esl_alphabet_Destroy(abc); return sstatus; } static void pipeline_thread(void *arg) { int i, j; int status; int workeridx; WORKER_INFO *info; ESL_THREADS *obj; P7_OM_BLOCK *block; void *newBlock; P7_OPROFILE *om = NULL; P7_SCOREDATA *scoredata = NULL; /* hmm-specific data used by nhmmer */ int seq_len = 0; int prev_hit_cnt = 0; #ifdef eslAUGMENT_ALPHABET ESL_SQ *sq_revcmp = NULL; #endif /*eslAUGMENT_ALPHABET*/ impl_Init(); obj = (ESL_THREADS *) arg; esl_threads_Started(obj, &workeridx); info = (WORKER_INFO *) esl_threads_GetData(obj, workeridx); status = esl_workqueue_WorkerUpdate(info->queue, NULL, &newBlock); if (status != eslOK) esl_fatal("Work queue worker failed"); #ifdef eslAUGMENT_ALPHABET //reverse complement if (info->pli->strands != p7_STRAND_TOPONLY && info->qsq->abc->complement != NULL ) { sq_revcmp = esl_sq_CreateDigital(info->qsq->abc); esl_sq_Copy(info->qsq,sq_revcmp); esl_sq_ReverseComplement(sq_revcmp); info->pli->nres += info->qsq->n; } #endif /*eslAUGMENT_ALPHABET*/ /* loop until all blocks have been processed */ block = (P7_OM_BLOCK *) newBlock; while (block->count > 0) { /* Main loop: */ for (i = 0; i < block->count; ++i) { om = block->list[i]; seq_len = 0; p7_pli_NewModel(info->pli, om, info->bg); p7_bg_SetLength(info->bg, info->qsq->n); p7_oprofile_ReconfigLength(om, info->qsq->n); if (info->bg_default != NULL) { /*bg was overridden by --bgfile; we need to fix all the scores *-First, compute emissions based on bg_default *-Then use those emissions to compute new scores for fwd, vit and msv, based on bg *We need to ReadRest now, so we correctly compute fwd_emissions */ p7_oprofile_ReadRest(info->pli->hfp, om); if ((status = p7_pli_NewModelThresholds(info->pli, om)) != eslOK) esl_fatal("Error setting thresholds in worker thread"); ESL_REALLOC(info->fwd_emissions, sizeof(float) * info->qsq->abc->Kp * (om->M+1)); p7_oprofile_GetFwdEmissionArray(om, info->bg_default, info->fwd_emissions); p7_oprofile_UpdateFwdEmissionScores(om, info->bg, info->fwd_emissions, info->scores); p7_oprofile_UpdateVitEmissionScores(om, info->bg, info->fwd_emissions, info->scores); p7_oprofile_UpdateMSVEmissionScores(om, info->bg, info->fwd_emissions, info->scores); } scoredata = p7_hmm_ScoreDataCreate(om, FALSE); #ifdef eslAUGMENT_ALPHABET //reverse complement if (info->pli->strands != p7_STRAND_TOPONLY && info->qsq->abc->complement != NULL ) { p7_Pipeline_LongTarget(info->pli, om, scoredata, info->bg, info->th, 0, sq_revcmp, p7_COMPLEMENT, NULL, NULL, NULL/*, NULL, NULL, NULL*/); p7_pipeline_Reuse(info->pli); // prepare for next search seq_len = info->qsq->n; } #endif if (info->pli->strands != p7_STRAND_BOTTOMONLY) { p7_Pipeline_LongTarget(info->pli, om, scoredata, info->bg, info->th, 0, info->qsq, p7_NOCOMPLEMENT, NULL, NULL, NULL/*, NULL, NULL, NULL*/); p7_pipeline_Reuse(info->pli); seq_len += info->qsq->n; } for (j = prev_hit_cnt; j < info->th->N ; j++) { info->th->unsrt[j].lnP += log((float)seq_len / (float)om->max_length); info->th->unsrt[j].dcl[0].lnP = info->th->unsrt[j].lnP; info->th->unsrt[j].sortkey = -1.0 * info->th->unsrt[j].lnP; info->th->unsrt[j].dcl[0].ad->L = om->M; } prev_hit_cnt = info->th->N; p7_hmm_ScoreDataDestroy(scoredata); p7_oprofile_Destroy(om); block->list[i] = NULL; } status = esl_workqueue_WorkerUpdate(info->queue, block, &newBlock); if (status != eslOK) esl_fatal("Work queue worker failed"); block = (P7_OM_BLOCK *) newBlock; } #ifdef eslAUGMENT_ALPHABET esl_sq_Destroy(sq_revcmp); #endif if (info->fwd_emissions != NULL) free(info->fwd_emissions); status = esl_workqueue_WorkerUpdate(info->queue, block, NULL); if (status != eslOK) esl_fatal("Work queue worker failed"); esl_threads_Finished(obj, workeridx); return; ERROR: esl_fatal("Error allocating memory in work queue"); return; } #endif /* HMMER_THREADS */ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: hmmscan.c 3976 2012-04-03 12:09:10Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/trunk/src/nhmmscan.c $ *****************************************************************/ hmmer-3.1b2/src/generic_fwdback.c0000664361611702660230000007747312473612612016341 0ustar wheelerteddy/* Forward/Backward algorithms; generic (non-SIMD) versions. * * Contents: * 1. Forward, Backward, Hybrid implementations. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "hmmer.h" /***************************************************************** * 1. Forward, Backward, Hybrid implementations. *****************************************************************/ /* Function: p7_GForward() * Synopsis: The Forward algorithm. * * Purpose: The Forward dynamic programming algorithm. * * Given a digital sequence of length , a profile * , and DP matrix allocated for at least M> * by cells; calculate the probability of the sequence * given the model using the Forward algorithm; return the * Forward matrix in , and the Forward score in . * * The Forward score is in lod score form. To convert to a * bitscore, the caller needs to subtract a null model lod * score, then convert to bits. * * Caller must have initialized the log-sum calculation * with a call to . * * Args: dsq - sequence in digitized form, 1..L * L - length of dsq * gm - profile. * gx - DP matrix with room for an MxL alignment * opt_sc - optRETURN: Forward lod score in nats * * Return: on success. */ int p7_GForward(const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMX *gx, float *opt_sc) { float const *tsc = gm->tsc; float **dp = gx->dp; float *xmx = gx->xmx; int M = gm->M; int i, k; float esc = p7_profile_IsLocal(gm) ? 0 : -eslINFINITY; p7_FLogsumInit(); /* Would like to get rid of this -- have main()'s all initialize instead, more efficient */ /* Initialization of the zero row. */ XMX(0,p7G_N) = 0; /* S->N, p=1 */ XMX(0,p7G_B) = gm->xsc[p7P_N][p7P_MOVE]; /* S->N->B, no N-tail */ XMX(0,p7G_E) = XMX(0,p7G_C) = XMX(0,p7G_J) = -eslINFINITY; /* need seq to get here */ for (k = 0; k <= M; k++) MMX(0,k) = IMX(0,k) = DMX(0,k) = -eslINFINITY; /* need seq to get here */ /* Recursion. Done as a pull. * Note some slightly wasteful boundary conditions: * tsc[0] = impossible for all eight transitions (no node 0) * D_1 is wastefully calculated (doesn't exist) */ for (i = 1; i <= L; i++) { float const *rsc = gm->rsc[dsq[i]]; float sc; MMX(i,0) = IMX(i,0) = DMX(i,0) = -eslINFINITY; XMX(i, p7G_E) = -eslINFINITY; for (k = 1; k < M; k++) { /* match state */ sc = p7_FLogsum(p7_FLogsum(MMX(i-1,k-1) + TSC(p7P_MM,k-1), IMX(i-1,k-1) + TSC(p7P_IM,k-1)), p7_FLogsum(XMX(i-1,p7G_B) + TSC(p7P_BM,k-1), DMX(i-1,k-1) + TSC(p7P_DM,k-1))); MMX(i,k) = sc + MSC(k); /* insert state */ sc = p7_FLogsum(MMX(i-1,k) + TSC(p7P_MI,k), IMX(i-1,k) + TSC(p7P_II,k)); IMX(i,k) = sc + ISC(k); /* delete state */ DMX(i,k) = p7_FLogsum(MMX(i,k-1) + TSC(p7P_MD,k-1), DMX(i,k-1) + TSC(p7P_DD,k-1)); /* E state update */ XMX(i,p7G_E) = p7_FLogsum(p7_FLogsum(MMX(i,k) + esc, DMX(i,k) + esc), XMX(i,p7G_E)); } /* unrolled match state M_M */ sc = p7_FLogsum(p7_FLogsum(MMX(i-1,M-1) + TSC(p7P_MM,M-1), IMX(i-1,M-1) + TSC(p7P_IM,M-1)), p7_FLogsum(XMX(i-1,p7G_B) + TSC(p7P_BM,M-1), DMX(i-1,M-1) + TSC(p7P_DM,M-1))); MMX(i,M) = sc + MSC(M); IMX(i,M) = -eslINFINITY; /* unrolled delete state D_M */ DMX(i,M) = p7_FLogsum(MMX(i,M-1) + TSC(p7P_MD,M-1), DMX(i,M-1) + TSC(p7P_DD,M-1)); /* unrolled E state update */ XMX(i,p7G_E) = p7_FLogsum(p7_FLogsum(MMX(i,M), DMX(i,M)), XMX(i,p7G_E)); /* J state */ XMX(i,p7G_J) = p7_FLogsum(XMX(i-1,p7G_J) + gm->xsc[p7P_J][p7P_LOOP], XMX(i, p7G_E) + gm->xsc[p7P_E][p7P_LOOP]); /* C state */ XMX(i,p7G_C) = p7_FLogsum(XMX(i-1,p7G_C) + gm->xsc[p7P_C][p7P_LOOP], XMX(i, p7G_E) + gm->xsc[p7P_E][p7P_MOVE]); /* N state */ XMX(i,p7G_N) = XMX(i-1,p7G_N) + gm->xsc[p7P_N][p7P_LOOP]; /* B state */ XMX(i,p7G_B) = p7_FLogsum(XMX(i, p7G_N) + gm->xsc[p7P_N][p7P_MOVE], XMX(i, p7G_J) + gm->xsc[p7P_J][p7P_MOVE]); } if (opt_sc != NULL) *opt_sc = XMX(L,p7G_C) + gm->xsc[p7P_C][p7P_MOVE]; gx->M = M; gx->L = L; return eslOK; } /* Function: p7_GBackward() * Synopsis: The Backward algorithm. * * Purpose: The Backward dynamic programming algorithm. * * Given a digital sequence of length , a profile * , and DP matrix allocated for at least M> * by cells; calculate the probability of the sequence * given the model using the Backward algorithm; return the * Backward matrix in , and the Backward score in . * * The Backward score is in lod score form. To convert to a * bitscore, the caller needs to subtract a null model lod * score, then convert to bits. * * Args: dsq - sequence in digitized form, 1..L * L - length of dsq * gm - profile * gx - DP matrix with room for an MxL alignment * opt_sc - optRETURN: Backward lod score in nats * * Return: on success. */ int p7_GBackward(const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMX *gx, float *opt_sc) { float const *tsc = gm->tsc; float const *rsc = NULL; float **dp = gx->dp; float *xmx = gx->xmx; int M = gm->M; int i, k; float esc = p7_profile_IsLocal(gm) ? 0 : -eslINFINITY; /* Note: backward calculates the probability we can get *out* of * cell i,k; exclusive of emitting residue x_i. */ p7_FLogsumInit(); /* Initialize the L row. */ XMX(L,p7G_J) = XMX(L,p7G_B) = XMX(L,p7G_N) = -eslINFINITY; XMX(L,p7G_C) = gm->xsc[p7P_C][p7P_MOVE]; /* C<-T */ XMX(L,p7G_E) = XMX(L,p7G_C) + gm->xsc[p7P_E][p7P_MOVE]; /* E<-C, no tail */ MMX(L,M) = DMX(L,M) = XMX(L,p7G_E); /* {MD}_M <- E (prob 1.0) */ IMX(L,M) = -eslINFINITY; /* no I_M state */ for (k = M-1; k >= 1; k--) { MMX(L,k) = p7_FLogsum( XMX(L,p7G_E) + esc, DMX(L, k+1) + TSC(p7P_MD,k)); DMX(L,k) = p7_FLogsum( XMX(L,p7G_E) + esc, DMX(L, k+1) + TSC(p7P_DD,k)); IMX(L,k) = -eslINFINITY; } /* Main recursion */ for (i = L-1; i >= 1; i--) { rsc = gm->rsc[dsq[i+1]]; XMX(i,p7G_B) = MMX(i+1,1) + TSC(p7P_BM,0) + MSC(1); /* t_BM index is 0 because it's stored off-by-one. */ for (k = 2; k <= M; k++) XMX(i,p7G_B) = p7_FLogsum(XMX(i, p7G_B), MMX(i+1,k) + TSC(p7P_BM,k-1) + MSC(k)); XMX(i,p7G_J) = p7_FLogsum( XMX(i+1,p7G_J) + gm->xsc[p7P_J][p7P_LOOP], XMX(i, p7G_B) + gm->xsc[p7P_J][p7P_MOVE]); XMX(i,p7G_C) = XMX(i+1,p7G_C) + gm->xsc[p7P_C][p7P_LOOP]; XMX(i,p7G_E) = p7_FLogsum( XMX(i, p7G_J) + gm->xsc[p7P_E][p7P_LOOP], XMX(i, p7G_C) + gm->xsc[p7P_E][p7P_MOVE]); XMX(i,p7G_N) = p7_FLogsum( XMX(i+1,p7G_N) + gm->xsc[p7P_N][p7P_LOOP], XMX(i, p7G_B) + gm->xsc[p7P_N][p7P_MOVE]); MMX(i,M) = DMX(i,M) = XMX(i,p7G_E); IMX(i,M) = -eslINFINITY; for (k = M-1; k >= 1; k--) { MMX(i,k) = p7_FLogsum( p7_FLogsum(MMX(i+1,k+1) + TSC(p7P_MM,k) + MSC(k+1), IMX(i+1,k) + TSC(p7P_MI,k) + ISC(k)), p7_FLogsum(XMX(i,p7G_E) + esc, DMX(i, k+1) + TSC(p7P_MD,k))); IMX(i,k) = p7_FLogsum( MMX(i+1,k+1) + TSC(p7P_IM,k) + MSC(k+1), IMX(i+1,k) + TSC(p7P_II,k) + ISC(k)); DMX(i,k) = p7_FLogsum( MMX(i+1,k+1) + TSC(p7P_DM,k) + MSC(k+1), p7_FLogsum( DMX(i, k+1) + TSC(p7P_DD,k), XMX(i, p7G_E) + esc)); } } /* At i=0, only N,B states are reachable. */ rsc = gm->rsc[dsq[1]]; XMX(0,p7G_B) = MMX(1,1) + TSC(p7P_BM,0) + MSC(1); /* t_BM index is 0 because it's stored off-by-one. */ for (k = 2; k <= M; k++) XMX(0,p7G_B) = p7_FLogsum(XMX(0, p7G_B), MMX(1,k) + TSC(p7P_BM,k-1) + MSC(k)); XMX(i,p7G_J) = -eslINFINITY; XMX(i,p7G_C) = -eslINFINITY; XMX(i,p7G_E) = -eslINFINITY; XMX(i,p7G_N) = p7_FLogsum( XMX(1, p7G_N) + gm->xsc[p7P_N][p7P_LOOP], XMX(0, p7G_B) + gm->xsc[p7P_N][p7P_MOVE]); for (k = M; k >= 1; k--) MMX(i,k) = IMX(i,k) = DMX(i,k) = -eslINFINITY; if (opt_sc != NULL) *opt_sc = XMX(0,p7G_N); gx->M = M; gx->L = L; return eslOK; } /* Function: p7_GHybrid() * Synopsis: The "hybrid" algorithm. * * Purpose: The profile HMM version of the Hwa "hybrid" alignment * algorithm \citep{YuHwa02}. The "hybrid" score is the * maximum score in the Forward matrix. * * Given a digital sequence of length , a profile * , and DP matrix allocated for at least M> * by cells; calculate the probability of the sequence * given the model using the Forward algorithm; return * the calculated Forward matrix in , and optionally * return the Forward score in and/or the * Hybrid score in . * * This is implemented as a wrapper around . * The Forward matrix and the Forward score obtained from * this routine are identical to what would * return. * * The scores are returned in lod form. To convert to a * bitscore, the caller needs to subtract a null model lod * score, then convert to bits. * * Args: dsq - sequence in digitized form, 1..L * L - length of dsq * gm - profile. * gx - DP matrix with room for an MxL alignment * opt_fwdscore - optRETURN: Forward lod score in nats. * opt_hybscore - optRETURN: Hybrid lod score in nats. * * Returns: on success, and results are in , , * and . */ int p7_GHybrid(const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMX *gx, float *opt_fwdscore, float *opt_hybscore) { float F = -eslINFINITY; float H = -eslINFINITY; float **dp = gx->dp; int i,k; int status; if ((status = p7_GForward(dsq, L, gm, gx, &F)) != eslOK) goto ERROR; for (i = 1; i <= L; i++) for (k = 1 ; k <= gm->M; k++) H = ESL_MAX(H, MMX(i,k)); gx->M = gm->M; gx->L = L; if (opt_fwdscore != NULL) *opt_fwdscore = F; if (opt_hybscore != NULL) *opt_hybscore = H; return eslOK; ERROR: if (opt_fwdscore != NULL) *opt_fwdscore = 0; if (opt_hybscore != NULL) *opt_hybscore = 0; return status; } /*------------- end: forward, backward, hybrid ------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ #ifdef p7GENERIC_FWDBACK_BENCHMARK /* gcc -g -O2 -o generic_fwdback_benchmark -I. -L. -I../easel -L../easel -Dp7GENERIC_FWDBACK_BENCHMARK generic_fwdback.c -lhmmer -leasel -lm icc -O3 -static -o generic_fwdback_benchmark -I. -L. -I../easel -L../easel -Dp7GENERIC_FWDBACK_BENCHMARK generic_fwdback.c -lhmmer -leasel -lm ./generic_fwdback_benchmark */ /* As of Fri Dec 28 14:48:39 2007 * Viterbi = 61.8 Mc/s * Forward = 8.6 Mc/s * Backward = 7.1 Mc/s * MSV = 55.9 Mc/s * (gcc -g -O2, 3.2GHz Xeon, N=50K, L=400, M=72 RRM_1 model) */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "2000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { "-B", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "only benchmark GBackward()", 0 }, { "-F", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "only benchmark GForward()", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for generic Forward/Backward"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *fwd = NULL; P7_GMX *bck = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc; double base_time, bench_time, Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_UNILOCAL); fwd = p7_gmx_Create(gm->M, L); bck = p7_gmx_Create(gm->M, L); /* Baseline time. */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; /* Benchmark time. */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); if (! esl_opt_GetBoolean(go, "-B")) p7_GForward (dsq, L, gm, fwd, &sc); if (! esl_opt_GetBoolean(go, "-F")) p7_GBackward(dsq, L, gm, bck, NULL); p7_gmx_Reuse(fwd); p7_gmx_Reuse(bck); } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_gmx_Destroy(bck); p7_gmx_Destroy(fwd); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_FWDBACK_BENCHMARK*/ /*----------------- end, benchmark ------------------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7GENERIC_FWDBACK_TESTDRIVE #include #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" /* Forward is hard to validate. * We do know that the Forward score is >= Viterbi. * We also know that the expected score on random seqs is <= 0 (not * exactly - we'd have to sample the random length from the background * model too, not just use a fixed L - but it's close enough to * being true to be a useful test.) */ static void utest_forward(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, P7_PROFILE *gm, int nseq, int L) { float avg_sc; ESL_DSQ *dsq = NULL; P7_GMX *fwd = NULL; P7_GMX *bck = NULL; int idx; float fsc, bsc; float vsc, nullsc; if ((dsq = malloc(sizeof(ESL_DSQ) *(L+2))) == NULL) esl_fatal("malloc failed"); if ((fwd = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("matrix creation failed"); if ((bck = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("matrix creation failed"); avg_sc = 0.; for (idx = 0; idx < nseq; idx++) { if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal("seq generation failed"); if (p7_GViterbi(dsq, L, gm, fwd, &vsc) != eslOK) esl_fatal("viterbi failed"); if (p7_GForward(dsq, L, gm, fwd, &fsc) != eslOK) esl_fatal("forward failed"); if (p7_GBackward(dsq, L, gm, bck, &bsc) != eslOK) esl_fatal("backward failed"); if (fsc < vsc) esl_fatal("Forward score can't be less than Viterbi score"); if (fabs(fsc-bsc) > 0.001) esl_fatal("Forward/Backward failed: %f %f\n", fsc, bsc); if (p7_bg_NullOne(bg, dsq, L, &nullsc) != eslOK) esl_fatal("null score failed"); avg_sc += fsc - nullsc; if (esl_opt_GetBoolean(go, "--vv")) printf("utest_forward: Forward score: %.4f (total so far: %.4f)\n", fsc, avg_sc); } avg_sc /= (float) nseq; if (avg_sc > 0.) esl_fatal("Forward scores have positive expectation (%f nats)", avg_sc); p7_gmx_Destroy(fwd); p7_gmx_Destroy(bck); free(dsq); return; } /* The "generation" test scores sequences generated by the same profile. * Each Viterbi and Forward score should be >= the trace score of the emitted seq. * The expectation of Forward scores should be positive. */ static void utest_generation(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_PROFILE *gm, P7_HMM *hmm, P7_BG *bg, int nseq) { ESL_SQ *sq = esl_sq_CreateDigital(abc); P7_GMX *gx = p7_gmx_Create(gm->M, 100); P7_TRACE *tr = p7_trace_Create(); float vsc, fsc, nullsc, tracesc; float avg_fsc; int idx; avg_fsc = 0.0; for (idx = 0; idx < nseq; idx++) { if (p7_ProfileEmit(r, hmm, gm, bg, sq, tr) != eslOK) esl_fatal("profile emission failed"); if (p7_gmx_GrowTo(gx, gm->M, sq->n) != eslOK) esl_fatal("failed to reallocate gmx"); if (p7_GViterbi(sq->dsq, sq->n, gm, gx, &vsc) != eslOK) esl_fatal("viterbi failed"); if (p7_GForward(sq->dsq, sq->n, gm, gx, &fsc) != eslOK) esl_fatal("forward failed"); if (p7_trace_Score(tr, sq->dsq, gm, &tracesc) != eslOK) esl_fatal("trace score failed"); if (p7_bg_NullOne(bg, sq->dsq, sq->n, &nullsc) != eslOK) esl_fatal("null score failed"); if (vsc < tracesc) esl_fatal("viterbi score is less than trace"); if (fsc < tracesc) esl_fatal("forward score is less than trace"); if (vsc > fsc) esl_fatal("viterbi score is greater than forward"); if (esl_opt_GetBoolean(go, "--vv")) printf("generated: len=%d v=%8.4f f=%8.4f t=%8.4f\n", (int) sq->n, vsc, fsc, tracesc); avg_fsc += (fsc - nullsc); } avg_fsc /= (float) nseq; if (avg_fsc < 0.) esl_fatal("generation: Forward scores have negative expectation (%f nats)", avg_fsc); p7_gmx_Destroy(gx); p7_trace_Destroy(tr); esl_sq_Destroy(sq); } /* The "enumeration" test samples a random enumerable HMM (transitions to insert are 0, * so the generated seq space only includes seqs of L<=M). * * The test scores all seqs of length <=M by both Viterbi and Forward, verifies that * the two scores are identical, and verifies that the sum of all the probabilities is * 1.0. It also verifies that the score of a sequence of length M+1 is indeed -infinity. * * Because this function is going to work in unscaled probabilities, adding them up, * all P(seq) terms must be >> DBL_EPSILON. That means M must be small; on the order * of <= 10. */ static void utest_enumeration(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc, int M) { char errbuf[eslERRBUFSIZE]; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_BG *bg = NULL; ESL_DSQ *dsq = NULL; P7_GMX *gx = NULL; float vsc, fsc; float bg_ll; /* log P(seq | bg) */ double vp, fp; /* P(seq,\pi | model) and P(seq | model) */ int L; int i; double total_p; char *seq; /* Sample an enumerable HMM & profile of length M. */ if (p7_hmm_SampleEnumerable(r, M, abc, &hmm) != eslOK) esl_fatal("failed to sample an enumerable HMM"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if ((gm = p7_profile_Create(hmm->M, abc)) == NULL) esl_fatal("failed to create profile"); if (p7_ProfileConfig(hmm, bg, gm, 0, p7_UNILOCAL) != eslOK) esl_fatal("failed to config profile"); if (p7_hmm_Validate (hmm, errbuf, 0.0001) != eslOK) esl_fatal("whoops, HMM is bad!: %s", errbuf); if (p7_profile_Validate(gm, errbuf, 0.0001) != eslOK) esl_fatal("whoops, profile is bad!: %s", errbuf); if ( (dsq = malloc(sizeof(ESL_DSQ) * (M+3))) == NULL) esl_fatal("allocation failed"); if ( (seq = malloc(sizeof(char) * (M+2))) == NULL) esl_fatal("allocation failed"); if ((gx = p7_gmx_Create(hmm->M, M+3)) == NULL) esl_fatal("matrix creation failed"); /* Enumerate all sequences of length L <= M */ total_p = 0; for (L = 0; L <= M; L++) { /* Initialize dsq of length L at 0000... */ dsq[0] = dsq[L+1] = eslDSQ_SENTINEL; for (i = 1; i <= L; i++) dsq[i] = 0; while (1) /* enumeration of seqs of length L*/ { if (p7_GViterbi(dsq, L, gm, gx, &vsc) != eslOK) esl_fatal("viterbi failed"); if (p7_GForward(dsq, L, gm, gx, &fsc) != eslOK) esl_fatal("forward failed"); /* calculate bg log likelihood component of the scores */ for (bg_ll = 0., i = 1; i <= L; i++) bg_ll += log(bg->f[dsq[i]]); /* convert to probabilities, adding the bg LL back to the LLR */ vp = exp(vsc + bg_ll); fp = exp(fsc + bg_ll); if (esl_opt_GetBoolean(go, "--vv")) { esl_abc_Textize(abc, dsq, L, seq); printf("probability of sequence: %10s %16g (lod v=%8.4f f=%8.4f)\n", seq, fp, vsc, fsc); } total_p += fp; /* Increment dsq like a reversed odometer */ for (i = 1; i <= L; i++) if (dsq[i] < abc->K-1) { dsq[i]++; break; } else { dsq[i] = 0; } if (i > L) break; /* we're done enumerating sequences */ } } /* That sum is subject to significant numerical error because of * discretization error in FLogsum(); don't expect it to be too close. */ if (total_p < 0.999 || total_p > 1.001) esl_fatal("Enumeration unit test failed: total Forward p isn't near 1.0 (%g)", total_p); if (esl_opt_GetBoolean(go, "-v")) { printf("enumeration test: total p is %g\n", total_p); } p7_gmx_Destroy(gx); p7_bg_Destroy(bg); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); free(dsq); free(seq); } #endif /*p7GENERIC_FWDBACK_TESTDRIVE*/ /*------------------------- end, unit tests ---------------------*/ /***************************************************************** * 4. Test driver. *****************************************************************/ /* gcc -g -Wall -Dp7GENERIC_FWDBACK_TESTDRIVE -I. -I../easel -L. -L../easel -o generic_fwdback_utest generic_fwdback.c -lhmmer -leasel -lm */ #ifdef p7GENERIC_FWDBACK_TESTDRIVE #include "easel.h" #include "esl_getopts.h" #include "esl_msa.h" #include "p7_config.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "--vv", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be very verbose", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "unit test driver for the generic Forward/Backward implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_BG *bg = NULL; int M = 100; int L = 200; int nseq = 20; char errbuf[eslERRBUFSIZE]; p7_FLogsumInit(); if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if (p7_hmm_Sample(r, M, abc, &hmm) != eslOK) esl_fatal("failed to sample an HMM"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if ((gm = p7_profile_Create(hmm->M, abc)) == NULL) esl_fatal("failed to create profile"); if (p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL) != eslOK) esl_fatal("failed to config profile"); if (p7_hmm_Validate (hmm, errbuf, 0.0001) != eslOK) esl_fatal("whoops, HMM is bad!: %s", errbuf); if (p7_profile_Validate(gm, errbuf, 0.0001) != eslOK) esl_fatal("whoops, profile is bad!: %s", errbuf); utest_forward (go, r, abc, bg, gm, nseq, L); utest_generation (go, r, abc, gm, hmm, bg, nseq); utest_enumeration(go, r, abc, 4); /* can't go much higher than 5; enumeration test is cpu-intensive. */ p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_FWDBACK_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7GENERIC_FWDBACK_EXAMPLE /* gcc -g -O2 -o generic_fwdback_example -Dp7GENERIC_FWDBACK_EXAMPLE -I. -I../easel -L. -L../easel generic_fwdback.c -lhmmer -leasel -lm */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #define STYLES "--fs,--sw,--ls,--s" /* Exclusive choice for alignment mode */ static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "--fs", eslARG_NONE,"default",NULL, NULL, STYLES, NULL, NULL, "multihit local alignment", 0 }, { "--sw", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "unihit local alignment", 0 }, { "--ls", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "multihit glocal alignment", 0 }, { "--s", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "unihit glocal alignment", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of Forward/Backward, generic implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *fwd = NULL; P7_GMX *bck = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float fsc, bsc; float nullsc; int status; /* Initialize log-sum calculator */ p7_FLogsumInit(); /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); /* Now reconfig the models however we were asked to */ if (esl_opt_GetBoolean(go, "--fs")) p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); else if (esl_opt_GetBoolean(go, "--sw")) p7_ProfileConfig(hmm, bg, gm, sq->n, p7_UNILOCAL); else if (esl_opt_GetBoolean(go, "--ls")) p7_ProfileConfig(hmm, bg, gm, sq->n, p7_GLOCAL); else if (esl_opt_GetBoolean(go, "--s")) p7_ProfileConfig(hmm, bg, gm, sq->n, p7_UNIGLOCAL); /* Allocate matrices */ fwd = p7_gmx_Create(gm->M, sq->n); bck = p7_gmx_Create(gm->M, sq->n); printf("%-30s %-10s %-10s %-10s %-10s\n", "# seq name", "fwd (raw)", "bck (raw) ", "fwd (bits)", "bck (bits)"); printf("%-30s %10s %10s %10s %10s\n", "#--------------", "----------", "----------", "----------", "----------"); while ( (status = esl_sqio_Read(sqfp, sq)) != eslEOF) { if (status == eslEFORMAT) p7_Fail("Parse failed (sequence file %s)\n%s\n", sqfp->filename, sqfp->get_error(sqfp)); else if (status != eslOK) p7_Fail("Unexpected error %d reading sequence file %s", status, sqfp->filename); /* Resize the DP matrices if necessary */ p7_gmx_GrowTo(fwd, gm->M, sq->n); p7_gmx_GrowTo(bck, gm->M, sq->n); /* Set the profile and null model's target length models */ p7_bg_SetLength(bg, sq->n); p7_ReconfigLength(gm, sq->n); /* Run Forward, Backward */ p7_GForward (sq->dsq, sq->n, gm, fwd, &fsc); p7_GBackward(sq->dsq, sq->n, gm, bck, &bsc); p7_gmx_Dump(stdout, fwd, p7_DEFAULT); /* Those scores are partial log-odds likelihoods in nats. * Subtract off the rest of the null model, convert to bits. */ p7_bg_NullOne(bg, sq->dsq, sq->n, &nullsc); printf("%-30s %10.4f %10.4f %10.4f %10.4f\n", sq->name, fsc, bsc, (fsc - nullsc) / eslCONST_LOG2, (bsc - nullsc) / eslCONST_LOG2); p7_gmx_Reuse(fwd); p7_gmx_Reuse(bck); esl_sq_Reuse(sq); } /* Cleanup */ esl_sqfile_Close(sqfp); esl_sq_Destroy(sq); p7_gmx_Destroy(fwd); p7_gmx_Destroy(bck); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_FWDBACK_EXAMPLE*/ /*-------------------- end, example -----------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/generic_fwdback.c $ * SVN $Id: generic_fwdback.c 3776 2011-12-02 18:38:22Z eddys $ *****************************************************************/ hmmer-3.1b2/src/generic_fwdback_banded.c0000664361611702660230000002267512473612612017630 0ustar wheelerteddy/* Forward/Backward, generic, with bands. */ #include "p7_config.h" #include "easel.h" #include "esl_sq.h" #include "hmmer.h" #include "p7_gbands.h" #include "p7_gmxb.h" int p7_GForwardBanded(const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMXB *gxb, float *opt_sc) { int *bnd_ip = gxb->bnd->imem; /* ptr to current ia, ib segment band in gxb->bnd */ int *bnd_kp = gxb->bnd->kmem; /* ptr to current ka, kb row band in gxb->bnd */ float *dpc = gxb->dp; /* ptr to current DP matrix cell */ float *xpc = gxb->xmx; /* ptr to current special cell */ float const *tsc = gm->tsc; /* sets up TSC() macro, access to profile's transitions */ float const *rsc; /* will be set up for MSC(), ISC() macros for residue scores */ float *dpp; /* ptr to previous DP matrix cell */ float *last_dpc; /* used to reinitialize dpp after each row */ int ia, ib; /* current segment band is rows ia..ib */ int last_ib; /* intersegment interval is last_ib+1..ia-1 */ int kac, kbc; /* current row band is kac..kbc */ int kap, kbp; /* previous row band is kap..kbp */ int kbc2; /* if kbc==M, kbc2=M-1, main loop goes kac..kbc2 and M is unrolled */ float xE, xN, xJ, xB, xC; /* tmp scores on special states. only stored when in row bands */ float mvp, ivp, dvp; /* M,I,D cell values from previous row i-1 */ float dc; /* precalculated D(i,k+1) value on current row */ float sc; /* temporary score calculation M(i,k) */ int g, i, k; /* indices running over segments, residues (rows) x_i, model positions (cols) k */ //float esc = p7_profile_IsLocal(gm) ? 0 : -eslINFINITY; xN = 0.0f; xJ = -eslINFINITY; xC = -eslINFINITY; last_ib = 0; for (g = 0; g < gxb->bnd->nseg; g++) { ia = *bnd_ip++; ib = *bnd_ip++; /* kap,kbp initialization for i=ia: * left overhang dpp advance must always eval to 0, * {m,i,d}vp initialization must always eval to -eslINFINITY. */ kap = kbp = gm->M+1; dpp = dpc; /* re-initialize dpp */ /* re-initialization: specials for previous row ia-1 just outside banded segment: */ xE = -eslINFINITY; xN = xN + (ia - last_ib - 1) * gm->xsc[p7P_N][p7P_LOOP]; xJ = xJ + (ia - last_ib - 1) * gm->xsc[p7P_J][p7P_LOOP]; xB = p7_FLogsum( xN + gm->xsc[p7P_N][p7P_MOVE], xJ + gm->xsc[p7P_J][p7P_MOVE]); xC = xC + (ia - last_ib - 1) * gm->xsc[p7P_C][p7P_LOOP]; for (i = ia; i <= ib; i++) { rsc = gm->rsc[dsq[i]]; /* sets up MSC(k), ISC(k) residue scores for this row i */ dc = -eslINFINITY; xE = -eslINFINITY; last_dpc = dpc; kac = *bnd_kp++; /* current row's band is cells k=kac..kbc */ kbc = *bnd_kp++; kbc2 = (kbc == gm->M ? kbc-1 : kbc); /* a "do_M" flag works too, but this way we avoid an if statement */ /* dpp must advance by any left overhang of previous row; but no more than the entire row */ dpp += (kac-1 > kap ? ESL_MIN(kac-kap-1, kbp-kap+1) : 0); if (kac > kap && kac-1 <= kbp) { mvp = *dpp++; ivp = *dpp++; dvp = *dpp++; } else { mvp = -eslINFINITY; ivp = -eslINFINITY; dvp = -eslINFINITY; } for (k = kac; k <= kbc2; k++) { *dpc++ = sc = MSC(k) + p7_FLogsum( p7_FLogsum(mvp + TSC(p7P_MM, k-1), ivp + TSC(p7P_IM, k-1)), dvp + TSC(p7P_DM, k-1)); //p7_FLogsum(dvp + TSC(p7P_DM, k-1), xB + TSC(p7P_BM, k-1))); if (k >= kap && k <= kbp) { mvp = *dpp++; ivp = *dpp++; dvp = *dpp++; } // an if seems unavoidable. alternatively, might unroll else { mvp = -eslINFINITY; ivp = -eslINFINITY; dvp = -eslINFINITY; } // all possible (kap,kac)..(kbp,kbc) orderings, but this // seems too complex *dpc++ = ISC(k) + p7_FLogsum( mvp + TSC(p7P_MI, k), ivp + TSC(p7P_II, k)); //xE = p7_FLogsum( p7_FLogsum(sc + esc, dc + esc), xE);/* Mk->E accumulation */ /* next D_k+1 */ *dpc++ = dc; dc = p7_FLogsum( sc + TSC(p7P_MD, k), dc + TSC(p7P_DD, k)); } if (kbc2 < kbc) /* i.e., if kbc==M and we need to do the final M column: */ { *dpc++ = sc = MSC(k) + p7_FLogsum( p7_FLogsum(mvp + TSC(p7P_MM, k-1), ivp + TSC(p7P_IM, k-1)), p7_FLogsum(dvp + TSC(p7P_DM, k-1), xB + TSC(p7P_BM, k-1))); *dpc++ = -eslINFINITY; *dpc++ = dc; xE = p7_FLogsum( p7_FLogsum(sc, dc), xE); } *xpc++ = xE; *xpc++ = xN = xN + gm->xsc[p7P_N][p7P_LOOP]; *xpc++ = xJ = p7_FLogsum( xJ + gm->xsc[p7P_J][p7P_LOOP], xE + gm->xsc[p7P_E][p7P_MOVE]); *xpc++ = xB = p7_FLogsum( xJ + gm->xsc[p7P_J][p7P_MOVE], xN + gm->xsc[p7P_N][p7P_MOVE]); *xpc++ = xC = p7_FLogsum( xE + gm->xsc[p7P_E][p7P_MOVE], xC + gm->xsc[p7P_C][p7P_LOOP]); dpp = last_dpc; /* this skips any right overhang on the previous row, so dpp advances (if necessary) to start of curr row */ kap = kac; kbp = kbc; } last_ib = ib; } /* last_ib+1..L is outside any band segment, so it can only run through xC. */ if (opt_sc != NULL) *opt_sc = xC + (L-last_ib) * gm->xsc[p7P_C][p7P_LOOP] + gm->xsc[p7P_C][p7P_MOVE]; return eslOK; } /***************************************************************** * x. Benchmark driver *****************************************************************/ #ifdef p7GENERIC_FWDBACK_BANDED_BENCHMARK #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "hmmer.h" #include "p7_gbands.h" #include "p7_gmxb.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "2000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { "-W", eslARG_INT, "3", NULL,"n>=0", NULL, NULL, NULL, "band halfwidth", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for banded Forward/Backward"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GBANDS *bnd = NULL; P7_GMXB *fwd = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); int W = esl_opt_GetInteger(go, "-W"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int idx, k, base; float sc; double base_time, bench_time, Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_GLOCAL); /* Contrive bands: one length M band of width W */ bnd = p7_gbands_Create(L, gm->M); if (L < gm->M) p7_Fail("for now, L must be >=M, because we make a single band"); base = (L-gm->M) / 2; for (k = 1; k <= gm->M; k++) p7_gbands_Append(bnd, k+base, ESL_MAX(1,k-W), ESL_MIN(gm->M,k+W)); fwd = p7_gmxb_Create(bnd); /* Baseline time. */ esl_stopwatch_Start(w); for (idx = 0; idx < N; idx++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; /* Benchmark time. */ esl_stopwatch_Start(w); for (idx = 0; idx < N; idx++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_gmxb_Reinit(fwd, bnd); p7_GForwardBanded(dsq, L, gm, fwd, &sc); p7_gmxb_Reuse(fwd); } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_gmxb_Destroy(fwd); p7_gbands_Destroy(bnd); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_FWDBACK_BANDED_BENCHMARK*/ /************** end, benchmark driver*****************************/ hmmer-3.1b2/src/p7_gmx.c0000664361611702660230000003777312473612614014446 0ustar wheelerteddy/* P7_GMX implementation: a generic dynamic programming matrix * * Contents: * 1. The object * 2. Debugging aids * 3. Unit tests * 4. Test driver * 5. Copyright and license information */ #include "p7_config.h" #include "hmmer.h" /***************************************************************** *= 1. The object. *****************************************************************/ /* Function: p7_gmx_Create() * Synopsis: Allocate a new . * * Purpose: Allocate a reusable, resizeable for models up to * size and sequences up to length . * * We've set this up so it should be easy to allocate * aligned memory, though we're not doing this yet. * * Returns: a pointer to the new . * * Throws: on allocation error. */ P7_GMX * p7_gmx_Create(int allocM, int allocL) { int status; P7_GMX *gx = NULL; int i; /* level 1: the structure itself */ ESL_ALLOC(gx, sizeof(P7_GMX)); gx->dp = NULL; gx->xmx = NULL; gx->dp_mem = NULL; /* level 2: row pointers, 0.1..L; and dp cell memory */ ESL_ALLOC(gx->dp, sizeof(float *) * (allocL+1)); ESL_ALLOC(gx->xmx, sizeof(float) * (allocL+1) * p7G_NXCELLS); ESL_ALLOC(gx->dp_mem, sizeof(float) * (allocL+1) * (allocM+1) * p7G_NSCELLS); /* Set the row pointers. */ for (i = 0; i <= allocL; i++) gx->dp[i] = gx->dp_mem + i * (allocM+1) * p7G_NSCELLS; /* Initialize memory that's allocated but unused, only to keep * valgrind and friends happy. */ for (i = 0; i <= allocL; i++) { gx->dp[i][0 * p7G_NSCELLS + p7G_M] = -eslINFINITY; /* M_0 */ gx->dp[i][0 * p7G_NSCELLS + p7G_I] = -eslINFINITY; /* I_0 */ gx->dp[i][0 * p7G_NSCELLS + p7G_D] = -eslINFINITY; /* D_0 */ gx->dp[i][1 * p7G_NSCELLS + p7G_D] = -eslINFINITY; /* D_1 */ gx->dp[i][allocM * p7G_NSCELLS + p7G_I] = -eslINFINITY; /* I_M */ } gx->M = 0; gx->L = 0; gx->allocW = allocM+1; gx->allocR = allocL+1; gx->validR = allocL+1; gx->ncells = (uint64_t) (allocM+1)* (uint64_t) (allocL+1); return gx; ERROR: if (gx != NULL) p7_gmx_Destroy(gx); return NULL; } /* Function: p7_gmx_GrowTo() * Synopsis: Assure that DP matrix is big enough. * * Purpose: Assures that a DP matrix is allocated * for a model of size up to and a sequence of * length up to ; reallocates if necessary. * * This function does not respect the configured * ; it will allocate what it's told to * allocate. * * Returns: on success, and may be reallocated upon * return; any data that may have been in must be * assumed to be invalidated. * * Throws: on allocation failure, and any data that may * have been in must be assumed to be invalidated. */ int p7_gmx_GrowTo(P7_GMX *gx, int M, int L) { int status; void *p; int i; uint64_t ncells; int do_reset = FALSE; if (M < gx->allocW && L < gx->validR) return eslOK; /* must we realloc the 2D matrices? (or can we get away with just * jiggering the row pointers, if we are growing in one dimension * while shrinking in another?) */ ncells = (uint64_t) (M+1) * (uint64_t) (L+1); if (ncells > gx->ncells) { ESL_RALLOC(gx->dp_mem, p, sizeof(float) * ncells * p7G_NSCELLS); gx->ncells = ncells; do_reset = TRUE; } /* must we reallocate the row pointers? */ if (L >= gx->allocR) { ESL_RALLOC(gx->xmx, p, sizeof(float) * (L+1) * p7G_NXCELLS); ESL_RALLOC(gx->dp, p, sizeof(float *) * (L+1)); gx->allocR = L+1; /* allocW will also get set, in the do_reset block */ do_reset = TRUE; } /* must we widen the rows? */ if (M >= gx->allocW) do_reset = TRUE; /* must we set some more valid row pointers? */ if (L >= gx->validR) do_reset = TRUE; /* resize the rows and reset all the valid row pointers.*/ if (do_reset) { gx->allocW = M+1; gx->validR = ESL_MIN(gx->ncells / gx->allocW, gx->allocR); for (i = 0; i < gx->validR; i++) gx->dp[i] = gx->dp_mem + i * (gx->allocW) * p7G_NSCELLS; } gx->M = 0; gx->L = 0; return eslOK; ERROR: return status; } /* Function: p7_gmx_Sizeof() * Synopsis: Returns the allocation size of DP matrix, in bytes. */ size_t p7_gmx_Sizeof(P7_GMX *gx) { size_t n = 0; n += sizeof(P7_GMX); n += gx->ncells * p7G_NSCELLS * sizeof(float); /* main dp cells: gx->dp_mem */ n += gx->allocR * sizeof(float *); /* row ptrs: gx->dp[] */ n += gx->allocR * p7G_NXCELLS * sizeof(float); /* specials: gx->xmx */ return n; } /* Function: p7_gmx_Reuse() * Synopsis: Recycle a generic DP matrix. * * Purpose: Recycles for reuse. * * Returns: on success. */ int p7_gmx_Reuse(P7_GMX *gx) { /* not much to do here. The memory rearrangement for a new seq is all in GrowTo(). */ gx->M = 0; gx->L = 0; return eslOK; } /* Function: p7_gmx_Destroy() * Synopsis: Frees a DP matrix. * * Purpose: Frees a . * * Returns: (void) */ void p7_gmx_Destroy(P7_GMX *gx) { if (gx == NULL) return; if (gx->dp != NULL) free(gx->dp); if (gx->xmx != NULL) free(gx->xmx); if (gx->dp_mem != NULL) free(gx->dp_mem); free(gx); return; } /***************************************************************** * 2. Debugging aids *****************************************************************/ /* Function: p7_gmx_Compare() * Synopsis: Compare two DP matrices for equality within given tolerance. * * Purpose: Compare all the values in DP matrices and using * and relative epsilon . If any * value pairs differ by more than the acceptable * return . If all value pairs are identical within * tolerance, return . */ int p7_gmx_Compare(P7_GMX *gx1, P7_GMX *gx2, float tolerance) { int i,k,x; if (gx1->M != gx2->M) return eslFAIL; if (gx1->L != gx2->L) return eslFAIL; for (i = 0; i <= gx1->L; i++) { for (k = 1; k <= gx1->M; k++) /* k=0 is a boundary; doesn't need to be checked */ { if (esl_FCompare(gx1->dp[i][k * p7G_NSCELLS + p7G_M], gx2->dp[i][k * p7G_NSCELLS + p7G_M], tolerance) != eslOK) return eslFAIL; if (esl_FCompare(gx1->dp[i][k * p7G_NSCELLS + p7G_I], gx2->dp[i][k * p7G_NSCELLS + p7G_I], tolerance) != eslOK) return eslFAIL; if (esl_FCompare(gx1->dp[i][k * p7G_NSCELLS + p7G_D], gx2->dp[i][k * p7G_NSCELLS + p7G_D], tolerance) != eslOK) return eslFAIL; } for (x = 0; x < p7G_NXCELLS; x++) if (esl_FCompare(gx1->xmx[i * p7G_NXCELLS + x], gx2->xmx[i * p7G_NXCELLS + x], tolerance) != eslOK) return eslFAIL; } return eslOK; } /* Function: p7_gmx_Dump() * Synopsis: Dump a DP matrix to a stream, for diagnostics. * * Purpose: Dump matrix to stream for diagnostics. * * control some optional output behaviors, as follows: * | | don't show scores for states | * | | is in probs; show as log probs | */ int p7_gmx_Dump(FILE *ofp, P7_GMX *gx, int flags) { return p7_gmx_DumpWindow(ofp, gx, 0, gx->L, 0, gx->M, flags); } /* Function: p7_gmx_DumpWindow() * Synopsis: Dump a window of a DP matrix to a stream for diagnostics. * * Purpose: Dump a window of matrix to stream for diagnostics, * from row to , from column to . * * Asking for <0..L,0..M> with is the * same as . * * control some optional output behaviors, as follows: * | | don't show scores for states | * | | is in probs; show as log probs | * * Returns: on success. */ int p7_gmx_DumpWindow(FILE *ofp, P7_GMX *gx, int istart, int iend, int kstart, int kend, int flags) { int width = 9; int precision = 4; int i, k, x; float val; /* Header */ fprintf(ofp, " "); for (k = kstart; k <= kend; k++) fprintf(ofp, "%*d ", width, k); if (! (flags & p7_HIDE_SPECIALS)) fprintf(ofp, "%*s %*s %*s %*s %*s\n", width, "E", width, "N", width, "J", width, "B", width, "C"); fprintf(ofp, " "); for (k = kstart; k <= kend; k++) fprintf(ofp, "%*.*s ", width, width, "----------"); if (! (flags & p7_HIDE_SPECIALS)) for (x = 0; x < 5; x++) fprintf(ofp, "%*.*s ", width, width, "----------"); fprintf(ofp, "\n"); /* DP matrix data */ for (i = istart; i <= iend; i++) { fprintf(ofp, "%3d M ", i); for (k = kstart; k <= kend; k++) { val = gx->dp[i][k * p7G_NSCELLS + p7G_M]; if (flags & p7_SHOW_LOG) val = log(val); fprintf(ofp, "%*.*f ", width, precision, val); } if (! (flags & p7_HIDE_SPECIALS)) { for (x = 0; x < p7G_NXCELLS; x++) { val = gx->xmx[ i * p7G_NXCELLS + x]; if (flags & p7_SHOW_LOG) val = log(val); fprintf(ofp, "%*.*f ", width, precision, val); } } fprintf(ofp, "\n"); fprintf(ofp, "%3d I ", i); for (k = kstart; k <= kend; k++) { val = gx->dp[i][k * p7G_NSCELLS + p7G_I]; if (flags & p7_SHOW_LOG) val = log(val); fprintf(ofp, "%*.*f ", width, precision, val); } fprintf(ofp, "\n"); fprintf(ofp, "%3d D ", i); for (k = kstart; k <= kend; k++) { val = gx->dp[i][k * p7G_NSCELLS + p7G_D]; if (flags & p7_SHOW_LOG) val = log(val); fprintf(ofp, "%*.*f ", width, precision, val); } fprintf(ofp, "\n\n"); } return eslOK; } /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7GMX_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" static void gmx_testpattern(P7_GMX *gx, int M, int L) { int i,k,s,n, n2; /* Write a test pattern, via the dp[i] pointers */ n = 0; for (i = 0; i <= L; i++) for (k = 0; k <= M; k++) for (s = 0; s < p7G_NSCELLS; s++) gx->dp[i][k*p7G_NSCELLS+s] = n++; /* Read it back, via the dp[i] pointers */ n = 0; for (i = 0; i <= L; i++) for (k = 0; k <= M; k++) for (s = 0; s < p7G_NSCELLS; s++) { if (gx->dp[i][k*p7G_NSCELLS+s] != n) esl_fatal("gmx unit test failed: test pattern corrupted"); n++; } /* Reading it back via the dp_mem vector itself ought to be the same */ if (gx->allocR == gx->validR && gx->ncells == gx->validR*gx->allocW) { n2 = 0; for (i = 0; i < gx->ncells; i++) for (s = 0; s < p7G_NSCELLS; s++) { if (gx->dp_mem[i*p7G_NSCELLS+s] != n2) esl_fatal("gmx unit test failed: test pattern corrupted (2nd test)"); n2++; } /* and the number of cells ought to match too */ if (n != n2) esl_fatal("gmx unit test failed: unexpected # of cells"); } } static void utest_GrowTo(void) { int M, L; P7_GMX *gx = NULL; M = 20; L = 20; gx= p7_gmx_Create(M, L); gmx_testpattern(gx, M, L); M = 40; L = 20; p7_gmx_GrowTo(gx, M, L); gmx_testpattern(gx, M, L); /* grow in M, not L */ M = 40; L = 40; p7_gmx_GrowTo(gx, M, L); gmx_testpattern(gx, M, L); /* grow in L, not M */ M = 80; L = 10; p7_gmx_GrowTo(gx, M, L); gmx_testpattern(gx, M, L); /* grow in M, but with enough ncells */ M = 10; L = 80; p7_gmx_GrowTo(gx, M, L); gmx_testpattern(gx, M, L); /* grow in L, but with enough ncells */ M = 100; L = 100; p7_gmx_GrowTo(gx, M, L); gmx_testpattern(gx, M, L); /* grow in both L and M */ /* The next two calls are carefully constructed to exercise bug #h79. * GrowTo() must shrink allocW, if M shrinks and L grows enough to force increase in allocR, with sufficient ncells. */ M = 179; L = 55; p7_gmx_GrowTo(gx, M, L); gmx_testpattern(gx, M, L); M = 87; L = 57; p7_gmx_GrowTo(gx, M, L); gmx_testpattern(gx, M, L); p7_gmx_Destroy(gx); } static void utest_Compare(ESL_RANDOMNESS *r, P7_PROFILE *gm, P7_BG *bg, int L, float tolerance) { char *msg = "gmx_Compare unit test failure"; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) *(L+2)); P7_GMX *gx1 = p7_gmx_Create(gm->M, L); P7_GMX *gx2 = p7_gmx_Create(5, 4); float fsc; if (!r || !gm || !dsq || !gx1 || !gx2 ) esl_fatal(msg); if (esl_rsq_xfIID(r, bg->f, gm->abc->K, L, dsq) != eslOK) esl_fatal(msg); if (p7_gmx_GrowTo(gx2, gm->M, L) != eslOK) esl_fatal(msg); if (p7_GForward(dsq, L, gm, gx1, &fsc) != eslOK) esl_fatal(msg); if (p7_GForward(dsq, L, gm, gx2, &fsc) != eslOK) esl_fatal(msg); if (p7_gmx_Compare(gx1, gx2, tolerance) != eslOK) esl_fatal(msg); p7_gmx_Destroy(gx1); p7_gmx_Destroy(gx2); free(dsq); } #endif /*p7GMX_TESTDRIVE*/ /*------------------- end, unit tests ---------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7GMX_TESTDRIVE /* gcc -o p7_gmx_utest -msse2 -g -Wall -I. -L. -I../easel -L../easel -Dp7GMX_TESTDRIVE p7_gmx.c -lhmmer -leasel -lm ./p7_gmx_utest */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-t", eslARG_REAL, "1e-5", NULL, NULL, NULL, NULL, NULL, "floating point comparison tolerance", 0 }, { "-L", eslARG_INT, "40", NULL, NULL, NULL, NULL, NULL, "length of sampled sequences", 0 }, { "-M", eslARG_INT, "40", NULL, NULL, NULL, NULL, NULL, "length of sampled test profile", 0 }, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for p7_gmx.c"; int main(int argc, char **argv) { char *msg = "p7_gmx unit test driver failed"; ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_BG *bg = p7_bg_Create(abc); P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); float tol = esl_opt_GetReal (go, "-t"); p7_FLogsumInit(); if (p7_hmm_Sample(r, M, abc, &hmm) != eslOK) esl_fatal(msg); if ((gm = p7_profile_Create(hmm->M, abc)) == NULL) esl_fatal(msg); if (p7_bg_SetLength(bg, L) != eslOK) esl_fatal(msg); if (p7_ProfileConfig(hmm, bg, gm, L, p7_UNILOCAL) != eslOK) esl_fatal(msg); utest_GrowTo(); utest_Compare(r, gm, bg, L, tol); esl_getopts_Destroy(go); esl_randomness_Destroy(r); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_profile_Destroy(gm); return eslOK; } #endif /*p7GMX_TESTDRIVE*/ /*------------------ end, test driver ---------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/p7_gmx.c $ * SVN $Id: p7_gmx.c 3734 2011-11-02 12:45:37Z eddys $ *****************************************************************/ hmmer-3.1b2/src/Makefile.in0000664361611702660230000002316512473612614015134 0ustar wheelerteddy# VPATH and shell configuration top_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ SHELL = /bin/sh # Installation targets # prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ mandir = @mandir@ docdir = @docdir@ pdfdir = @pdfdir@ mandir = @mandir@ man1dir = ${mandir}/man1 man1ext = .1 CC = @CC@ CFLAGS = @CFLAGS@ @PTHREAD_CFLAGS@ @PIC_FLAGS@ SIMDFLAGS = @SIMD_CFLAGS@ CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ DEFS = @DEFS@ LIBS = -lhmmer -leasel -ldivsufsort @LIBS@ @LIBGSL@ @PTHREAD_LIBS@ -lm MPILIBS = @MPILIBS@ AR = @AR@ RANLIB = @RANLIB@ INSTALL = @INSTALL@ IMPLDIR = impl_@IMPL_CHOICE@ ESLDIR = @HMMER_ESLDIR@ SADIR = @HMMER_SADIR@ MYLIBDIRS = -L../${ESLDIR} -L./${IMPLDIR} -L../${SADIR} -L. MYINCDIRS = -I../${ESLDIR} \ -I../${SADIR} \ -I${top_srcdir}/easel \ -I. \ -I${srcdir} PROGS = alimask\ hmmalign\ hmmbuild\ hmmconvert\ hmmemit\ hmmfetch\ hmmlogo\ hmmpress\ hmmscan\ hmmsearch\ hmmsim\ hmmstat\ jackhmmer\ phmmer\ nhmmer\ nhmmscan\ hmmpgmd\ hmmc2\ makehmmerdb\ hmmerfm-exactmatch PROGOBJS =\ alimask.o\ exactmatch.o\ hmmalign.o\ hmmbuild.o\ hmmconvert.o\ hmmemit.o\ hmmfetch.o\ hmmlogo.o\ hmmpress.o\ hmmscan.o\ hmmsearch.o\ hmmsim.o\ hmmstat.o\ jackhmmer.o\ phmmer.o\ nhmmer.o\ nhmmscan.o\ hmmpgmd.o\ hmmc2.o\ makehmmerdb.o\ hmmerfm-exactmatch.o HDRS = hmmer.h \ cachedb.h \ p7_gbands.h \ p7_gmxb.h \ p7_gmxchk.h \ p7_hmmcache.h OBJS = build.o\ cachedb.o\ emit.o\ errors.o\ evalues.o\ eweight.o\ generic_decoding.o\ generic_fwdback.o\ generic_fwdback_chk.o\ generic_fwdback_banded.o\ generic_null2.o\ generic_msv.o\ generic_optacc.o\ generic_stotrace.o\ generic_viterbi.o\ generic_vtrace.o\ h2_io.o\ heatmap.o\ hmmlogo.o\ hmmdmstr.o\ hmmdwrkr.o\ hmmdutils.o\ hmmer.o\ logsum.o\ modelconfig.o\ modelstats.o\ mpisupport.o\ seqmodel.o\ tracealign.o\ p7_alidisplay.o\ p7_bg.o\ p7_builder.o\ p7_domaindef.o\ p7_gbands.o\ p7_gmx.o\ p7_gmxb.o\ p7_gmxchk.o\ p7_hmm.o\ p7_hmmcache.o\ p7_hmmfile.o\ p7_hmmwindow.o\ p7_null3.o\ p7_pipeline.o\ p7_prior.o\ p7_profile.o\ p7_spensemble.o\ p7_tophits.o\ p7_trace.o\ p7_scoredata.o\ hmmpgmd2msa.o\ fm_alphabet.o\ fm_general.o\ fm_sse.o\ fm_ssv.o # island.o\ STATS = \ evalues_stats BENCHMARKS = \ evalues_benchmark\ logsum_benchmark\ generic_decoding_benchmark\ generic_fwdback_benchmark\ generic_fwdback_chk_benchmark\ generic_msv_benchmark\ generic_null2_benchmark\ generic_optacc_benchmark\ generic_stotrace_benchmark\ generic_viterbi_benchmark \ p7_hmmcache_benchmark UTESTS =\ build_utest\ generic_fwdback_utest\ generic_fwdback_chk_utest\ generic_msv_utest\ generic_stotrace_utest\ generic_viterbi_utest\ hmmer_utest\ logsum_utest\ modelconfig_utest\ seqmodel_utest\ p7_alidisplay_utest\ p7_bg_utest\ p7_gmx_utest\ p7_gmxchk_utest\ p7_hmm_utest\ p7_hmmfile_utest\ p7_profile_utest\ p7_tophits_utest\ p7_trace_utest\ p7_scoredata_utest\ hmmpgmd2msa_utest ITESTS = \ itest_brute EXAMPLES = \ build_example\ emit_example\ generic_fwdback_example\ generic_fwdback_chk_example\ generic_msv_example\ generic_decoding_example\ generic_optacc_example\ generic_stotrace_example\ generic_viterbi_example\ generic_vtrace_example\ logsum_example\ p7_alidisplay_example\ p7_bg_example\ p7_bg_example2\ p7_domaindef_example\ p7_hmmfile_example\ p7_pipeline_example\ p7_spensemble_example # beautification magic stolen from git QUIET_SUBDIR0 = +${MAKE} -C #space separator after -c QUIET_SUBDIR1 = ifndef V QUIET_CC = @echo ' ' CC $@; QUIET_GEN = @echo ' ' GEN $@; QUIET_AR = @echo ' ' AR $@; QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR1 = ; echo ' ' SUBDIR $$subdir; \ ${MAKE} -C $$subdir endif .PHONY: all dev tests check install uninstall distclean clean TAGS all: ${PROGS} .FORCE dev: ${PROGS} ${UTESTS} ${ITESTS} ${STATS} ${BENCHMARKS} ${EXAMPLES} .FORCE ${QUIET_SUBDIR0}${IMPLDIR} ${QUIET_SUBDIR1} dev tests: ${PROGS} ${UTESTS} ${ITESTS} .FORCE ${QUIET_SUBDIR0}${IMPLDIR} ${QUIET_SUBDIR1} tests check: ${PROGS} ${UTESTS} ${ITESTS} .FORCE ${QUIET_SUBDIR0}${IMPLDIR} ${QUIET_SUBDIR1} check libhmmer.a: libhmmer-src.stamp .FORCE ${QUIET_SUBDIR0}${IMPLDIR} ${QUIET_SUBDIR1} libhmmer-impl.stamp libhmmer-src.stamp: ${OBJS} ${QUIET_AR}${AR} -r libhmmer.a $? > /dev/null 2>&1 @${RANLIB} libhmmer.a @echo "src_lib objects compiled:\c" > $@ @date >> $@ .FORCE: ${OBJS}: ${HDRS} p7_config.h ${PROGOBJS}: ${HDRS} p7_config.h ${PROGS}: @EXEC_DEPENDENCY@ libhmmer.a ../${ESLDIR}/libeasel.a ${QUIET_GEN}${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} ${MYLIBDIRS} -o $@ $@.o ${MPILIBS} ${LIBS} .c.o: ${QUIET_CC}${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${CPPFLAGS} ${MYINCDIRS} -o $@ -c $< ${ITESTS}: @EXEC_DEPENDENCY@ libhmmer.a ${HDRS} p7_config.h ${QUIET_GEN}${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} ${MYLIBDIRS} -o $@ $@.o ${MPILIBS} ${LIBS} ${UTESTS}: libhmmer.a ${HDRS} p7_config.h @BASENAME=`echo $@ | sed -e 's/_utest//' | sed -e 's/^p7_//'` ;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=p7$${DFLAG}_TESTDRIVE ;\ if test -e ${srcdir}/p7_$${BASENAME}.c; then \ DFILE=${srcdir}/p7_$${BASENAME}.c ;\ else \ DFILE=${srcdir}/$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "{CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS} ${BENCHMARKS}: libhmmer.a ${HDRS} p7_config.h @BASENAME=`echo $@ | sed -e 's/_benchmark//' | sed -e 's/^p7_//'` ;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=p7$${DFLAG}_BENCHMARK ;\ if test -e ${srcdir}/p7_$${BASENAME}.c; then \ DFILE=${srcdir}/p7_$${BASENAME}.c ;\ else \ DFILE=${srcdir}/$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "{CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS} ${STATS}: libhmmer.a ${HDRS} p7_config.h @BASENAME=`echo $@ | sed -e 's/_stats//' | sed -e 's/^p7_//'` ;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=p7$${DFLAG}_STATS ;\ if test -e ${srcdir}/p7_$${BASENAME}.c; then \ DFILE=${srcdir}/p7_$${BASENAME}.c ;\ else \ DFILE=${srcdir}/$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "{CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS} ${EXAMPLES}: libhmmer.a ${HDRS} p7_config.h @BASENAME=`echo $@ | sed -e 's/_example[0-9]*//' | sed -e 's/^p7_//'` ;\ DFLAG=p7`echo $@ | sed -e 's/^p7_//' | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ if test -e ${srcdir}/p7_$${BASENAME}.c; then \ DFILE=${srcdir}/p7_$${BASENAME}.c ;\ else \ DFILE=${srcdir}/$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "{CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS} install: ${QUIET_SUBDIR0}${IMPLDIR} ${QUIET_SUBDIR1} install for file in ${PROGS}; do \ ${INSTALL} -m 0755 $$file ${DESTDIR}${bindir}/ ;\ done ${INSTALL} -m 0755 libhmmer.a ${DESTDIR}${libdir}/ for file in ${HDRS}; do \ ${INSTALL} -m 0644 ${srcdir}/$$file ${DESTDIR}${includedir}/ ;\ done ${INSTALL} -m 0644 p7_config.h ${DESTDIR}${includedir}/ ;\ uninstall: ${QUIET_SUBDIR0}${IMPLDIR} ${QUIET_SUBDIR1} uninstall for file in ${PROGS}; do \ rm -f ${DESTDIR}${bindir}/$$file ;\ done -rm -f ${DESTDIR}${libdir}/libhmmer.a for file in ${HDRS}; do \ rm -f ${DESTDIR}${includedir}/$$file ;\ done -rm -f ${DESTDIR}${includedir}/p7_config.h distclean: clean ${QUIET_SUBDIR0}${IMPLDIR} ${QUIET_SUBDIR1} distclean -rm -f Makefile p7_config.h clean: ${QUIET_SUBDIR0}${IMPLDIR} ${QUIET_SUBDIR1} clean -rm -f *.o *~ Makefile.bak core ${PROGS} TAGS gmon.out -rm -f libhmmer.a libhmmer-src.stamp -rm -f ${UTESTS} -rm -f ${ITESTS} -rm -f ${STATS} -rm -f ${BENCHMARKS} -rm -f ${EXAMPLES} -rm -f *.gcno -rm -f cscope.out for prog in ${PROGS} ${UTESTS} ${STATS} ${BENCHMARKS} ${EXAMPLES}; do \ if test -d $$prog.dSYM; then rm -rf $$prog.dSYM; fi ;\ done ################################################################ # HMMER - Biological sequence analysis with profile HMMs # Version 3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # HMMER is distributed under the terms of the GNU General Public License # (GPLv3). See the LICENSE file for details. # # SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/Makefile.in $ # SVN $Id: Makefile.in 4511 2013-07-08 19:05:40Z wheelert $ ################################################################ hmmer-3.1b2/src/hmmsim.c0000664361611702660230000012030712473612613014520 0ustar wheelerteddy/* hmmsim: scoring profile HMMs against simulated sequences. * * Main testbed for exploring the statistical behavior of HMMER3 * scores on random sequences. */ #include "p7_config.h" #include #include #include #include #ifdef HAVE_MPI #include "mpi.h" #endif #include "easel.h" #include "esl_alphabet.h" #include "esl_stats.h" #include "esl_exponential.h" #include "esl_dmatrix.h" #include "esl_getopts.h" #include "esl_gumbel.h" #include "esl_histogram.h" #include "esl_mpi.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_ratematrix.h" #include "esl_stopwatch.h" #include "esl_vectorops.h" #include "hmmer.h" #define ALGORITHMS "--fwd,--vit,--hyb,--msv" /* Exclusive choice for scoring algorithms */ #define STYLES "--fs,--sw,--ls,--s" /* Exclusive choice for alignment mode */ static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, { "-a", eslARG_NONE, FALSE, NULL, NULL, NULL,"--vit",NULL, "obtain alignment length statistics too", 1 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "verbose: print scores", 1 }, { "-L", eslARG_INT, "100", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 1 }, { "-N", eslARG_INT, "1000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 1 }, #ifdef HAVE_MPI { "--mpi", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "run as an MPI parallel program", 1 }, #endif { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "direct output to file , not stdout", 2 }, { "--afile", eslARG_OUTFILE, NULL, NULL, NULL, NULL, "-a", NULL, "output alignment lengths to file ", 2 }, { "--efile", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "output E vs. E plots to in xy format", 2 }, { "--ffile", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "output filter fraction: # seqs passing P thresh", 2 }, { "--pfile", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "output P(S>x) plots to in xy format", 2 }, { "--xfile", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "output bitscores as binary double vector to ", 2 }, { "--fs", eslARG_NONE,"default",NULL, NULL, STYLES, NULL, NULL, "multihit local alignment", 3 }, { "--sw", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "unihit local alignment", 3 }, { "--ls", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "multihit glocal alignment", 3 }, { "--s", eslARG_NONE, FALSE, NULL, NULL, STYLES, NULL, NULL, "unihit glocal alignment", 3 }, { "--vit", eslARG_NONE,"default",NULL, NULL, ALGORITHMS, NULL, NULL, "score seqs with the Viterbi algorithm", 4 }, { "--fwd", eslARG_NONE, FALSE, NULL, NULL, ALGORITHMS, NULL, NULL, "score seqs with the Forward algorithm", 4 }, { "--hyb", eslARG_NONE, FALSE, NULL, NULL, ALGORITHMS, NULL, NULL, "score seqs with the Hybrid algorithm", 4 }, { "--msv", eslARG_NONE, FALSE, NULL, NULL, ALGORITHMS, NULL, NULL, "score seqs with the MSV algorithm", 4 }, { "--fast", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use the optimized versions of the above", 4 }, { "--tmin", eslARG_REAL, "0.02", NULL, NULL, NULL, NULL, NULL, "set lower bound tail mass for fwd,island", 5 }, { "--tmax", eslARG_REAL, "0.02", NULL, NULL, NULL, NULL, NULL, "set lower bound tail mass for fwd,island", 5 }, { "--tpoints", eslARG_INT, "1", NULL, NULL, NULL, NULL, NULL, "set number of tail probs to try", 5 }, { "--tlinear", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use linear not log spacing of tail probs", 5 }, { "--EmL", eslARG_INT, "200", NULL, "n>0", NULL, NULL, NULL, "length of sequences for MSV Gumbel mu fit", 6 }, { "--EmN", eslARG_INT, "200", NULL, "n>0", NULL, NULL, NULL, "number of sequences for MSV Gumbel mu fit", 6 }, { "--EvL", eslARG_INT, "200", NULL, "n>0", NULL, NULL, NULL, "length of sequences for Viterbi Gumbel mu fit", 6 }, { "--EvN", eslARG_INT, "200", NULL, "n>0", NULL, NULL, NULL, "number of sequences for Viterbi Gumbel mu fit", 6 }, { "--EfL", eslARG_INT, "100", NULL, "n>0", NULL, NULL, NULL, "length of sequences for Forward exp tail tau fit", 6 }, { "--EfN", eslARG_INT, "200", NULL, "n>0", NULL, NULL, NULL, "number of sequences for Forward exp tail tau fit", 6 }, { "--Eft", eslARG_REAL, "0.04", NULL, "0", 7 }, { "--bgflat", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "set uniform background frequencies", 8 }, { "--bgcomp", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "set bg frequencies to model's average composition", 8 }, { "--x-no-lengthmodel", eslARG_NONE, FALSE,NULL,NULL, NULL, NULL, NULL, "turn the H3 length model off", 8 }, { "--nu", eslARG_REAL, "2.0", NULL, NULL, NULL,"--msv","--fast", "set nu parameter (# expected HSPs) for GMSV", 8 }, { "--pthresh", eslARG_REAL, "0.02",NULL, NULL, NULL,"--ffile", NULL, "set P-value threshold for --ffile", 8 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "collect profile HMM score distributions on random sequences"; /* struct cfg_s : "Global" application configuration shared by all threads/processes. * * This structure is passed to routines within main.c, as a means of semi-encapsulation * of shared data amongst different parallel processes (threads or MPI processes). */ struct cfg_s { /* Shared configuration in masters & workers */ char *hmmfile; /* name of input HMM file */ ESL_RANDOMNESS *r; /* randomness source */ ESL_ALPHABET *abc; /* alphabet type, eslAMINO */ P7_BG *bg; /* background model */ int my_rank; /* 0 in masters, >0 in workers */ int nproc; /* 1 in serial mode, >1 in MPI */ int do_mpi; /* TRUE if we're --mpi */ int do_stall; /* TRUE to stall for MPI debugging */ int N; /* number of simulated seqs per HMM */ int L; /* length of simulated seqs */ /* Masters only (i/o streams) */ P7_HMMFILE *hfp; /* open input HMM file stream */ FILE *ofp; /* output file for results (default is stdout) */ FILE *survfp; /* optional output for survival plots */ FILE *efp; /* optional output for E vs. E plots */ FILE *ffp; /* optional output for filter power data */ FILE *xfp; /* optional output for binary score vectors */ FILE *alfp; /* optional output for alignment lengths */ }; static int init_master_cfg(ESL_GETOPTS *go, struct cfg_s *cfg, char *errbuf); static void serial_master (ESL_GETOPTS *go, struct cfg_s *cfg); #ifdef HAVE_MPI static void mpi_master (ESL_GETOPTS *go, struct cfg_s *cfg); static void mpi_worker (ESL_GETOPTS *go, struct cfg_s *cfg); #endif static int process_workunit (ESL_GETOPTS *go, struct cfg_s *cfg, char *errbuf, P7_HMM *hmm, double *scores, int *alilens, double *ret_mu, double *ret_lambda); static int output_result (ESL_GETOPTS *go, struct cfg_s *cfg, char *errbuf, P7_HMM *hmm, double *scores, int *alilens, double mu, double lambda); static int output_filter_power(ESL_GETOPTS *go, struct cfg_s *cfg, char *errbuf, P7_HMM *hmm, double *scores, double mu, double lambda); #ifdef HAVE_MPI static int minimum_mpi_working_buffer(ESL_GETOPTS *go, int N, int *ret_wn); #endif static int elide_length_model(P7_PROFILE *gm, P7_BG *bg); int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; ESL_STOPWATCH *w = esl_stopwatch_Create(); struct cfg_s cfg; /* Process command line options. */ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "-h") == TRUE) { p7_banner(stdout, argv[0], banner); esl_usage(stdout, argv[0], usage); puts("\nCommon options:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1=docgroup, 2 = indentation; 80=textwidth*/ puts("\nOutput options (only in serial mode, for single HMM input):"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); puts("\nAlternative alignment styles :"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); puts("\nAlternative scoring algorithms :"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); puts("\nControlling range of fitted tail masses :"); esl_opt_DisplayHelp(stdout, go, 5, 2, 80); puts("\nControlling E-value calibration :"); esl_opt_DisplayHelp(stdout, go, 6, 2, 80); puts("\nDebugging :"); esl_opt_DisplayHelp(stdout, go, 7, 2, 80); puts("\nExperiments :"); esl_opt_DisplayHelp(stdout, go, 8, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != 1) { puts("Incorrect number of command line arguments."); esl_usage(stdout, argv[0], usage); puts("\nwhere general options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1=docgroup, 2 = indentation; 80=textwidth*/ printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } /* Initialize configuration shared across all kinds of masters * and workers in this .c file. */ cfg.hmmfile = esl_opt_GetArg(go, 1); cfg.r = esl_randomness_Create(esl_opt_GetInteger(go, "--seed")); //cfg.abc = esl_alphabet_Create(eslAMINO); cfg.my_rank = 0; /* MPI init will change this soon, if --mpi was set */ cfg.nproc = 0; /* MPI init will change this soon, if --mpi was set */ cfg.do_mpi = FALSE; /* --mpi will change this soon (below) if necessary */ cfg.do_stall = esl_opt_GetBoolean(go, "--stall"); cfg.N = esl_opt_GetInteger(go, "-N"); cfg.L = esl_opt_GetInteger(go, "-L"); cfg.hfp = NULL; cfg.ofp = NULL; cfg.survfp = NULL; cfg.efp = NULL; cfg.ffp = NULL; cfg.xfp = NULL; cfg.alfp = NULL; cfg.bg = NULL; /* This is our stall point, if we need to wait until we get a * debugger attached to this process for debugging (especially * useful for MPI): */ while (cfg.do_stall); /* Start timing. */ esl_stopwatch_Start(w); /* Main body: * Handed off to serial version or MPI masters and workers as appropriate. */ #ifdef HAVE_MPI if (esl_opt_GetBoolean(go, "--mpi")) { /* Initialize MPI, figure out who we are, and whether we're running * this show (proc 0) or working in it (procs >0). */ cfg.do_mpi = TRUE; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &(cfg.my_rank)); MPI_Comm_size(MPI_COMM_WORLD, &(cfg.nproc)); if (cfg.my_rank == 0 && cfg.nproc < 2) p7_Fail("Need at least 2 MPI processes to run --mpi mode."); if (cfg.my_rank > 0) mpi_worker(go, &cfg); else mpi_master(go, &cfg); esl_stopwatch_Stop(w); esl_stopwatch_MPIReduce(w, 0, MPI_COMM_WORLD); MPI_Finalize(); /* both workers and masters reach this line */ } else #endif /*HAVE_MPI*/ { /* No MPI? Then we're just the serial master. */ serial_master(go, &cfg); esl_stopwatch_Stop(w); } /* Stop timing. */ if (cfg.my_rank == 0) esl_stopwatch_Display(stdout, w, "# CPU time: "); /* Clean up and exit. */ if (cfg.my_rank == 0) { if (cfg.hfp != NULL) p7_hmmfile_Close(cfg.hfp); if (esl_opt_IsOn(go, "-o")) fclose(cfg.ofp); if (cfg.survfp != NULL) fclose(cfg.survfp); if (cfg.efp != NULL) fclose(cfg.efp); if (cfg.ffp != NULL) fclose(cfg.ffp); if (cfg.xfp != NULL) fclose(cfg.xfp); if (cfg.alfp != NULL) fclose(cfg.alfp); } p7_bg_Destroy(cfg.bg); esl_alphabet_Destroy(cfg.abc); esl_randomness_Destroy(cfg.r); esl_getopts_Destroy(go); esl_stopwatch_Destroy(w); return eslOK; } /* init_master_cfg() * Called by either master version, mpi or serial. * Already set: * cfg->hmmfile - command line arg * Sets: * cfg->hfp - open HMM stream * cfg->ofp - open output steam * cfg->survfp - open xmgrace survival plot file * cfg->efp - open E vs. E plot file * cfg->ffp - open filter power data file * cfg->xfp - open binary score file * cfg->alfp - open alignment length file * * Error handling relies on the result pointers being initialized to * NULL by the caller. * * Errors in the MPI master here are considered to be "recoverable", * in the sense that we'll try to delay output of the error message * until we've cleanly shut down the worker processes. Therefore * errors return (code, errmsg) by the ESL_FAIL mech. */ static int init_master_cfg(ESL_GETOPTS *go, struct cfg_s *cfg, char *errbuf) { char *filename; int status; status = p7_hmmfile_OpenE(cfg->hmmfile, NULL, &(cfg->hfp), NULL); if (status == eslENOTFOUND) ESL_FAIL(eslFAIL, errbuf, "Failed to open HMM file %s for reading.\n", cfg->hmmfile); else if (status == eslEFORMAT) ESL_FAIL(eslFAIL, errbuf, "File %s does not appear to be in a recognized HMM format.\n", cfg->hmmfile); else if (status != eslOK) ESL_FAIL(eslFAIL, errbuf, "Unexpected error %d in opening HMM file %s.\n", status, cfg->hmmfile); filename = esl_opt_GetString(go, "-o"); if (filename != NULL) { if ((cfg->ofp = fopen(filename, "w")) == NULL) ESL_FAIL(eslFAIL, errbuf, "Failed to open -o output file %s\n", filename); } else cfg->ofp = stdout; filename = esl_opt_GetString(go, "--pfile"); if (filename != NULL) { if ((cfg->survfp = fopen(filename, "w")) == NULL) ESL_FAIL(eslFAIL, errbuf, "Failed to open --pfile output file %s\n", filename); } filename = esl_opt_GetString(go, "--efile"); if (filename != NULL) { if ((cfg->efp = fopen(filename, "w")) == NULL) ESL_FAIL(eslFAIL, errbuf, "Failed to open --efile output file %s\n", filename); } filename = esl_opt_GetString(go, "--ffile"); if (filename != NULL) { if ((cfg->ffp = fopen(filename, "w")) == NULL) ESL_FAIL(eslFAIL, errbuf, "Failed to open --ffile output file %s\n", filename); } filename = esl_opt_GetString(go, "--xfile"); if (filename != NULL) { if ((cfg->xfp = fopen(filename, "w")) == NULL) ESL_FAIL(eslFAIL, errbuf, "Failed to open --xfile output file %s\n", filename); } filename = esl_opt_GetString(go, "--afile"); if (filename != NULL) { if ((cfg->alfp = fopen(filename, "w")) == NULL) ESL_FAIL(eslFAIL, errbuf, "Failed to open --afile output file %s\n", filename); } return eslOK; } static void serial_master(ESL_GETOPTS *go, struct cfg_s *cfg) { P7_HMM *hmm = NULL; double *xv = NULL; /* results: array of N scores */ int *av = NULL; /* optional results: array of N alignment lengths */ double mu, lambda; char errbuf[eslERRBUFSIZE]; int status; if ((status = init_master_cfg(go, cfg, errbuf)) != eslOK) p7_Fail(errbuf); if ((xv = malloc(sizeof(double) * cfg->N)) == NULL) p7_Fail("allocation failed"); if (esl_opt_GetBoolean(go, "-a") && (av = malloc(sizeof(int) * cfg->N)) == NULL) p7_Fail("allocation failed"); while ((status = p7_hmmfile_Read(cfg->hfp, &(cfg->abc), &hmm)) != eslEOF) { if (status == eslEOD) p7_Fail("read failed, HMM file %s may be truncated?", cfg->hmmfile); else if (status == eslEFORMAT) p7_Fail("bad file format in HMM file %s", cfg->hmmfile); else if (status == eslEINCOMPAT) p7_Fail("HMM file %s contains different alphabets", cfg->hmmfile); else if (status != eslOK) p7_Fail("Unexpected error in reading HMMs from %s", cfg->hmmfile); if (cfg->bg == NULL) { if (esl_opt_GetBoolean(go, "--bgflat")) cfg->bg = p7_bg_CreateUniform(cfg->abc); else cfg->bg = p7_bg_Create(cfg->abc); p7_bg_SetLength(cfg->bg, esl_opt_GetInteger(go, "-L")); /* set the null model background length in both master and workers. */ } if (process_workunit(go, cfg, errbuf, hmm, xv, av, &mu, &lambda) != eslOK) p7_Fail(errbuf); if (output_result (go, cfg, errbuf, hmm, xv, av, mu, lambda) != eslOK) p7_Fail(errbuf); p7_hmm_Destroy(hmm); } free(xv); if (av != NULL) free(av); } #ifdef HAVE_MPI /* mpi_master() * The MPI version of hmmsim. * Follows standard pattern for a master/worker load-balanced MPI program (J1/78-79). * * A master can only return if it's successful. * Errors in an MPI master come in two classes: recoverable and nonrecoverable. * * Recoverable errors include all worker-side errors, and any * master-side error that do not affect MPI communication. Error * messages from recoverable messages are delayed until we've cleanly * shut down the workers. * * Unrecoverable errors are master-side errors that may affect MPI * communication, meaning we cannot count on being able to reach the * workers and shut them down. Unrecoverable errors result in immediate * p7_Fail()'s, which will cause MPI to shut down the worker processes * uncleanly. */ static void mpi_master(ESL_GETOPTS *go, struct cfg_s *cfg) { int xstatus = eslOK; /* changes in the event of a recoverable error */ P7_HMM *hmm = NULL; /* query HMM */ P7_HMM **hmmlist = NULL; /* queue of HMMs being worked on, 1..nproc-1 */ char *wbuf = NULL; /* working buffer for sending packed profiles and receiving packed results. */ int wn = 0; double *xv = NULL; /* results: array of N scores */ int *av = NULL; /* optional results: array of N alignment lengths */ int have_work = TRUE; int nproc_working = 0; int wi; int pos; double mu, lambda; char errbuf[eslERRBUFSIZE]; int status; MPI_Status mpistatus; /* Master initialization. */ if (init_master_cfg(go, cfg, errbuf) != eslOK) p7_Fail(errbuf); if (minimum_mpi_working_buffer(go, cfg->N, &wn) != eslOK) p7_Fail("mpi pack sizes must have failed"); ESL_ALLOC(wbuf, sizeof(char) * wn); ESL_ALLOC(xv, sizeof(double) * cfg->N); if (esl_opt_GetBoolean(go, "-a")) ESL_ALLOC(av, sizeof(int) * cfg->N); ESL_ALLOC(hmmlist, sizeof(P7_HMM *) * cfg->nproc); for (wi = 0; wi < cfg->nproc; wi++) hmmlist[wi] = NULL; /* Standard design pattern for data parallelization in a master/worker model. (J1/78-79). */ wi = 1; while (have_work || nproc_working) { /* Get next work unit: one HMM, */ if (have_work) { if ((status = p7_hmmfile_Read(cfg->hfp, &(cfg->abc), &hmm)) != eslOK) { have_work = FALSE; if (status == eslEOD) { xstatus = status; sprintf(errbuf, "read failed, HMM file %s may be truncated?", cfg->hmmfile); } else if (status == eslEFORMAT) { xstatus = status; sprintf(errbuf, "bad file format in HMM file %s", cfg->hmmfile); } else if (status == eslEINCOMPAT) { xstatus = status; sprintf(errbuf, "HMM file %s contains different alphabets", cfg->hmmfile); } else if (status != eslEOF) { xstatus = status; sprintf(errbuf, "Unexpected error in reading HMMs from %s", cfg->hmmfile); } if (cfg->bg == NULL) { // first time only if (esl_opt_GetBoolean(go, "--bgflat")) cfg->bg = p7_bg_CreateUniform(cfg->abc); else cfg->bg = p7_bg_Create(cfg->abc); } //this next step is redundant, but it avoids a race condition above. p7_bg_SetLength(cfg->bg, esl_opt_GetInteger(go, "-L")); /* set the null model background length in both master and workers. */ } } /* If we have work but no free workers, or we have no work but workers * are still working, then wait for a result to return from any worker. */ if ( (have_work && nproc_working == cfg->nproc-1) || (! have_work && nproc_working > 0)) { if (MPI_Recv(wbuf, wn, MPI_PACKED, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &mpistatus) != 0) p7_Fail("mpi recv failed"); wi = mpistatus.MPI_SOURCE; /* Check the xstatus before printing results. * If we're in a recoverable error state, we're only clearing worker results, prior to a clean failure */ if (xstatus == eslOK) { pos = 0; if (MPI_Unpack(wbuf, wn, &pos, &xstatus, 1, MPI_INT, MPI_COMM_WORLD) != 0) p7_Fail("mpi unpack failed"); if (xstatus == eslOK) /* worker reported success. Get the results. */ { if (MPI_Unpack(wbuf, wn, &pos, xv, cfg->N, MPI_DOUBLE, MPI_COMM_WORLD) != 0) p7_Fail("score vector unpack failed"); if (esl_opt_GetBoolean(go, "-a") && MPI_Unpack(wbuf, wn, &pos, av, cfg->N, MPI_INT, MPI_COMM_WORLD) != 0) p7_Fail("alilen vector unpack failed"); if (MPI_Unpack(wbuf, wn, &pos, &mu, 1, MPI_DOUBLE, MPI_COMM_WORLD) != 0) p7_Fail("mu param unpack failed"); if (MPI_Unpack(wbuf, wn, &pos, &lambda, 1, MPI_DOUBLE, MPI_COMM_WORLD) != 0) p7_Fail("lambda param unpack failed"); if ((status = output_result(go, cfg, errbuf, hmmlist[wi], xv, av, mu, lambda)) != eslOK) xstatus = status; } else /* worker reported a user error. Get the errbuf. */ { if (MPI_Unpack(wbuf, wn, &pos, errbuf, eslERRBUFSIZE, MPI_CHAR, MPI_COMM_WORLD) != 0) p7_Fail("mpi unpack of errbuf failed"); have_work = FALSE; p7_hmm_Destroy(hmm); } } p7_hmm_Destroy(hmmlist[wi]); hmmlist[wi] = NULL; nproc_working--; } /* If we have work, assign it to a free worker; else, terminate the free worker. */ if (have_work) { p7_hmm_MPISend(hmm, wi, 0, MPI_COMM_WORLD, &wbuf, &wn); hmmlist[wi] = hmm; wi++; nproc_working++; } } /* Tell all the workers (1..nproc-1) to shut down by sending them a NULL workunit. */ for (wi = 1; wi < cfg->nproc; wi++) if (p7_hmm_MPISend(NULL, wi, 0, MPI_COMM_WORLD, &wbuf, &wn) != eslOK) p7_Fail("MPI HMM send failed"); free(hmmlist); free(wbuf); free(xv); if (av != NULL) free(av); if (xstatus != eslOK) p7_Fail(errbuf); else return; ERROR: if (hmmlist != NULL) free(hmmlist); if (wbuf != NULL) free(wbuf); if (xv != NULL) free(xv); if (av != NULL) free(av); p7_Fail("Fatal error in mpi_master"); } /* mpi_worker() * The main control for an MPI worker process. */ static void mpi_worker(ESL_GETOPTS *go, struct cfg_s *cfg) { int xstatus = eslOK; int status; P7_HMM *hmm = NULL; char *wbuf = NULL; double *xv = NULL; /* result: array of N scores */ int *av = NULL; /* optional result: array of N alignment lengths */ int wn = 0; char errbuf[eslERRBUFSIZE]; int pos; double mu, lambda; /* Worker initializes */ if ((status = minimum_mpi_working_buffer(go, cfg->N, &wn)) != eslOK) xstatus = status; ESL_ALLOC(wbuf, wn * sizeof(char)); ESL_ALLOC(xv, cfg->N * sizeof(double) + 2); if (esl_opt_GetBoolean(go, "-a")) ESL_ALLOC(av, cfg->N * sizeof(int)); /* Main worker loop */ while (p7_hmm_MPIRecv(0, 0, MPI_COMM_WORLD, &wbuf, &wn, &(cfg->abc), &hmm) == eslOK) { if ((status = process_workunit(go, cfg, errbuf, hmm, xv, av, &mu, &lambda)) != eslOK) goto CLEANERROR; pos = 0; MPI_Pack(&status, 1, MPI_INT, wbuf, wn, &pos, MPI_COMM_WORLD); MPI_Pack(xv, cfg->N, MPI_DOUBLE, wbuf, wn, &pos, MPI_COMM_WORLD); if (esl_opt_GetBoolean(go, "-a")) MPI_Pack(av, cfg->N, MPI_INT, wbuf, wn, &pos, MPI_COMM_WORLD); MPI_Pack(&mu, 1, MPI_DOUBLE, wbuf, wn, &pos, MPI_COMM_WORLD); MPI_Pack(&lambda, 1, MPI_DOUBLE, wbuf, wn, &pos, MPI_COMM_WORLD); MPI_Send(wbuf, pos, MPI_PACKED, 0, 0, MPI_COMM_WORLD); p7_hmm_Destroy(hmm); } free(wbuf); free(xv); if (av != NULL) free(av); return; CLEANERROR: pos = 0; MPI_Pack(&status, 1, MPI_INT, wbuf, wn, &pos, MPI_COMM_WORLD); MPI_Pack(errbuf, eslERRBUFSIZE, MPI_CHAR, wbuf, wn, &pos, MPI_COMM_WORLD); MPI_Send(wbuf, pos, MPI_PACKED, 0, 0, MPI_COMM_WORLD); if (wbuf != NULL) free(wbuf); if (hmm != NULL) p7_hmm_Destroy(hmm); if (xv != NULL) free(xv); if (av != NULL) free(av); return; ERROR: p7_Fail("Allocation error in mpi_worker"); } #endif /*HAVE_MPI*/ /* process_workunit() * * This is the routine that actually does the work. * * A work unit consists of one HMM, . * The result is the array, which contains an array of N scores; * caller provides this memory. * How those scores are generated is controlled by the application configuration in . */ static int process_workunit(ESL_GETOPTS *go, struct cfg_s *cfg, char *errbuf, P7_HMM *hmm, double *scores, int *alilens, double *ret_mu, double *ret_lambda) { int L = esl_opt_GetInteger(go, "-L"); P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx = NULL; P7_OMX *ox = NULL; P7_TRACE *tr = NULL; ESL_DSQ *dsq = NULL; int i; int status; int scounts[p7T_NSTATETYPES]; /* state usage counts from a trace */ float sc; float nullsc; double mu, lambda; int EmL = esl_opt_GetInteger(go, "--EmL"); int EmN = esl_opt_GetInteger(go, "--EmN"); int EvL = esl_opt_GetInteger(go, "--EvL"); int EvN = esl_opt_GetInteger(go, "--EvN"); int EfL = esl_opt_GetInteger(go, "--EfL"); int EfN = esl_opt_GetInteger(go, "--EfN"); double Eft = esl_opt_GetReal (go, "--Eft"); float nu = esl_opt_GetReal (go, "--nu"); /* Optionally set a custom background, determined by model composition; * an experimental hack. */ if (esl_opt_GetBoolean(go, "--bgcomp")) { float *p = NULL; float KL; p7_hmm_CompositionKLDist(hmm, cfg->bg, &KL, &p); esl_vec_FCopy(p, cfg->abc->K, cfg->bg->f); } /* First pass: configure gm, om for local until after we've determined mu, lambda, tau params */ gm = p7_profile_Create(hmm->M, cfg->abc); p7_ProfileConfig(hmm, cfg->bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, cfg->abc); p7_oprofile_Convert(gm, om); /* Determine E-value parameters (in addition to any that are already in the HMM structure) */ p7_Lambda(hmm, cfg->bg, &lambda); if (esl_opt_GetBoolean(go, "--vit")) p7_ViterbiMu(cfg->r, om, cfg->bg, EvL, EvN, lambda, &mu); else if (esl_opt_GetBoolean(go, "--msv")) p7_MSVMu (cfg->r, om, cfg->bg, EmL, EmN, lambda, &mu); else if (esl_opt_GetBoolean(go, "--fwd")) p7_Tau (cfg->r, om, cfg->bg, EfL, EfN, lambda, Eft, &mu); else mu = 0.0; /* undetermined, for Hybrid, at least for now. */ /* Now reconfig the models however we were asked to */ if (esl_opt_GetBoolean(go, "--fs")) p7_ProfileConfig(hmm, cfg->bg, gm, L, p7_LOCAL); else if (esl_opt_GetBoolean(go, "--sw")) p7_ProfileConfig(hmm, cfg->bg, gm, L, p7_UNILOCAL); else if (esl_opt_GetBoolean(go, "--ls")) p7_ProfileConfig(hmm, cfg->bg, gm, L, p7_GLOCAL); else if (esl_opt_GetBoolean(go, "--s")) p7_ProfileConfig(hmm, cfg->bg, gm, L, p7_UNIGLOCAL); if (esl_opt_GetBoolean(go, "--x-no-lengthmodel")) elide_length_model(gm, cfg->bg); p7_oprofile_Convert(gm, om); p7_bg_SetLength (cfg->bg, L); /* Remaining allocations */ gx = p7_gmx_Create(gm->M, L); ox = p7_omx_Create(gm->M, 0, L); ESL_ALLOC(dsq, sizeof(ESL_DSQ) * (L+2)); tr = p7_trace_Create(); /* Collect scores from N random sequences of length L */ for (i = 0; i < cfg->N; i++) { esl_rsq_xfIID(cfg->r, cfg->bg->f, cfg->abc->K, L, dsq); if (esl_opt_GetBoolean(go, "--fast")) { if (esl_opt_GetBoolean(go, "--vit")) p7_ViterbiFilter(dsq, L, om, ox, &sc); else if (esl_opt_GetBoolean(go, "--fwd")) p7_ForwardParser(dsq, L, om, ox, &sc); else if (esl_opt_GetBoolean(go, "--msv")) p7_MSVFilter (dsq, L, om, ox, &sc); } if (! esl_opt_GetBoolean(go, "--fast") || sc == eslINFINITY) /* note, if a filter overflows, failover to slow versions */ { if (esl_opt_GetBoolean(go, "--vit")) p7_GViterbi(dsq, L, gm, gx, &sc); else if (esl_opt_GetBoolean(go, "--fwd")) p7_GForward(dsq, L, gm, gx, &sc); else if (esl_opt_GetBoolean(go, "--hyb")) p7_GHybrid (dsq, L, gm, gx, NULL, &sc); else if (esl_opt_GetBoolean(go, "--msv")) p7_GMSV (dsq, L, gm, gx, nu, &sc); } /* Optional: get Viterbi alignment length too. */ if (esl_opt_GetBoolean(go, "-a")) /* -a only works with Viterbi; getopts has checked this already */ { p7_GTrace(dsq, L, gm, gx, tr); p7_trace_GetStateUseCounts(tr, scounts); /* there's various ways we could counts "alignment length". * Here we'll use the total length of model used, in nodes: M+D states. * score vs al would gives us relative entropy / model position. */ /* alilens[i] = scounts[p7T_D] + scounts[p7T_I]; SRE: temporarily testing this instead */ alilens[i] = scounts[p7T_M] + scounts[p7T_D] + scounts[p7T_I]; p7_trace_Reuse(tr); } p7_bg_NullOne(cfg->bg, dsq, L, &nullsc); scores[i] = (sc - nullsc) / eslCONST_LOG2; } *ret_mu = mu; *ret_lambda = lambda; status = eslOK; ERROR: if (dsq != NULL) free(dsq); p7_omx_Destroy(ox); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_gmx_Destroy(gx); p7_trace_Destroy(tr); if (status == eslEMEM) sprintf(errbuf, "allocation failure"); return status; } static int output_result(ESL_GETOPTS *go, struct cfg_s *cfg, char *errbuf, P7_HMM *hmm, double *scores, int *alilens, double pmu, double plambda) { ESL_HISTOGRAM *h = NULL; int i; double tailp; double x10; double mu, lambda, E10; double mufix, E10fix; double mufix2, E10fix2; double E10p; double almean, alvar; /* alignment length mean and variance (optional output) */ int status; /* Optional output of scores/alignment lengths: */ if (cfg->xfp) fwrite(scores, sizeof(double), cfg->N, cfg->xfp); if (cfg->alfp) for (i = 0; i < cfg->N; i++) fprintf(cfg->alfp, "%d %.3f\n", alilens[i], scores[i]); if (esl_opt_GetBoolean(go, "-v")) for (i = 0; i < cfg->N; i++) printf("%.3f\n", scores[i]); /* optional "filter power" data file: <# seqs <= P threshold> */ if (cfg->ffp) output_filter_power(go, cfg, errbuf, hmm, scores, pmu, plambda); /* Count the scores into a histogram object. */ if ((h = esl_histogram_CreateFull(-50., 50., 0.2)) == NULL) ESL_XFAIL(eslEMEM, errbuf, "allocation failed"); for (i = 0; i < cfg->N; i++) esl_histogram_Add(h, scores[i]); /* For viterbi, MSV, and hybrid, fit data to a Gumbel, either with known lambda or estimated lambda. */ if (esl_opt_GetBoolean(go, "--vit") || esl_opt_GetBoolean(go, "--hyb") || esl_opt_GetBoolean(go, "--msv")) { esl_histogram_GetRank(h, 10, &x10); tailp = 1.0; /* mu, lambda, E10 fields: ML Gumbel fit to the observed data */ esl_gumbel_FitComplete(scores, cfg->N, &mu, &lambda); E10 = cfg->N * esl_gumbel_surv(x10, mu, lambda); /* mufix, E10fix fields: assume lambda = log2; fit an ML mu to the data */ esl_gumbel_FitCompleteLoc(scores, cfg->N, 0.693147, &mufix); E10fix = cfg->N * esl_gumbel_surv(x10, mufix, 0.693147); /* mufix2, E10fix2 fields: assume edge-corrected H3 lambda estimate; fit ML mu */ esl_gumbel_FitCompleteLoc(scores, cfg->N, plambda, &mufix2); E10fix2 = cfg->N * esl_gumbel_surv(x10, mufix2, plambda); /* pmu, plambda, E10p: use H3 estimates (pmu, plambda) */ E10p = cfg->N * esl_gumbel_surv(x10, pmu, plambda); fprintf(cfg->ofp, "%-20s %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f", hmm->name, tailp, mu, lambda, E10, mufix, E10fix, mufix2, E10fix2, pmu, plambda, E10p); if (esl_opt_GetBoolean(go, "-a")) { esl_stats_IMean(alilens, cfg->N, &almean, &alvar); fprintf(cfg->ofp, " %8.4f %8.4f\n", almean, sqrt(alvar)); } else fprintf(cfg->ofp, "\n"); if (cfg->survfp != NULL) { esl_histogram_PlotSurvival(cfg->survfp, h); esl_gumbel_Plot(cfg->survfp, mu, lambda, esl_gumbel_surv, h->xmin - 5., h->xmax + 5., 0.1); esl_gumbel_Plot(cfg->survfp, mufix, 0.693147, esl_gumbel_surv, h->xmin - 5., h->xmax + 5., 0.1); } if (cfg->efp != NULL) { double x; fprintf(cfg->efp, "# %s\n", hmm->name); for (i = 1; i <= 1000 && i <= cfg->N; i++) { esl_histogram_GetRank(h, i, &x); fprintf(cfg->efp, "%d %g\n", i, cfg->N * esl_gumbel_surv(x, pmu, plambda)); } fprintf(cfg->efp, "&\n"); } } /* For Forward, fit tail to exponential tails, for a range of tail mass choices. */ else if (esl_opt_GetBoolean(go, "--fwd")) { double tmin = esl_opt_GetReal(go, "--tmin"); double tmax = esl_opt_GetReal(go, "--tmax"); double tpoints = (double) esl_opt_GetInteger(go, "--tpoints"); int do_linear = esl_opt_GetBoolean(go, "--tlinear"); double *xv; int n; esl_histogram_GetRank(h, 10, &x10); tailp = tmin; do { if (tailp > 1.0) tailp = 1.0; esl_histogram_GetTailByMass(h, tailp, &xv, &n, NULL); esl_exp_FitComplete(xv, n, &mu, &lambda); E10 = cfg->N * tailp * esl_exp_surv(x10, mu, lambda); mufix = mu; E10fix = cfg->N * tailp * esl_exp_surv(x10, mu, 0.693147); E10p = cfg->N * esl_exp_surv(x10, pmu, plambda); /* the pmu is relative to a P=1.0 tail origin. */ fprintf(cfg->ofp, "%-20s %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f\n", hmm->name, tailp, mu, lambda, E10, mufix, E10fix, pmu, plambda, E10p); if (tpoints == 1) break; else if (do_linear) tailp += (tmax-tmin) / (tpoints-1); else tailp *= exp(log(tmax/tmin) / (tpoints-1)); } while (tailp <= tmax+1e-7); if (cfg->survfp) { esl_histogram_PlotSurvival(cfg->survfp, h); esl_exp_Plot(cfg->survfp, mu, lambda, esl_exp_surv, mu, h->xmax + 5., 0.1); esl_exp_Plot(cfg->survfp, mu, 0.693147, esl_exp_surv, mu, h->xmax + 5., 0.1); } if (cfg->efp != NULL) { double x; fprintf(cfg->efp, "# %s\n", hmm->name); for (i = 1; i <= 1000 && i <= cfg->N; i++) { esl_histogram_GetRank(h, i, &x); fprintf(cfg->efp, "%d %g\n", i, cfg->N * esl_exp_surv(x, pmu, plambda)); } fprintf(cfg->efp, "&\n"); } } /* fallthrough: both normal, error cases execute same cleanup code */ status = eslOK; ERROR: esl_histogram_Destroy(h); return status; } /* output_filter_power() * * Used for testing whether the filters (MSV scores, Viterbi scores) * have the power they're supposed to have: for example, if MSV filter * is set at a P-value threshold of 0.02, ~2% of sequences should get * through, regardless of things like model and target sequence * length. * * Output a file suitable for constructing histograms over many HMMs, * for a particular choice of hmmsim'ed L and N targets: * <# of seqs passing threshold> * * SRE, Thu Apr 9 08:57:32 2009 [Janelia] xref J4/133 */ static int output_filter_power(ESL_GETOPTS *go, struct cfg_s *cfg, char *errbuf, P7_HMM *hmm, double *scores, double pmu, double plambda) { double pthresh = esl_opt_GetReal(go, "--pthresh"); /* P-value threshold set for the filter score */ double P; /* calculated P-value (using HMM's own calibration) */ int npass = 0; /* number of scores that pass the P threshold */ double fpass; /* fraction of scores that pass the P threshold */ int i; /* counter over scores */ int do_gumbel; /* flag for how to determine P values */ if (esl_opt_GetBoolean(go, "--vit")) do_gumbel = TRUE; else if (esl_opt_GetBoolean(go, "--msv")) do_gumbel = TRUE; else if (esl_opt_GetBoolean(go, "--hyb")) do_gumbel = FALSE; else ESL_FAIL(eslEINVAL, errbuf, "can only use --ffile with viterbi, msv, or fwd scores"); for (i = 0; i < cfg->N; i++) { P = (do_gumbel ? esl_gumbel_surv(scores[i], pmu, plambda) : esl_exp_surv (scores[i], pmu, plambda)); if (P <= pthresh) npass++; } fpass = (double) npass / (double) cfg->N; fprintf(cfg->ffp, "%s\t%d\t%.4f\n", hmm->name, npass, fpass); return eslOK; } #ifdef HAVE_MPI /* the pack send/recv buffer must be big enough to hold either an error message or a result vector. * it may even grow larger than that, to hold largest HMM we send. */ static int minimum_mpi_working_buffer(ESL_GETOPTS *go, int N, int *ret_wn) { int n; int nerr = 0; int nresult = 0; /* error packet */ if (MPI_Pack_size(eslERRBUFSIZE, MPI_CHAR, MPI_COMM_WORLD, &nerr)!= 0)return eslESYS; /* results packet */ if (MPI_Pack_size(N, MPI_DOUBLE, MPI_COMM_WORLD, &n) != 0) return eslESYS; nresult += n; /* scores */ if (esl_opt_GetBoolean(go, "-a")) { if (MPI_Pack_size(N, MPI_INT, MPI_COMM_WORLD, &n) != 0) return eslESYS; nresult += n; /* alignment lengths */ } if (MPI_Pack_size(1, MPI_DOUBLE, MPI_COMM_WORLD, &n) != 0) return eslESYS; nresult += n*2; /* mu, lambda */ /* add the shared status code to the max of the two possible kinds of packets */ *ret_wn = ESL_MAX(nresult, nerr); if (MPI_Pack_size(1, MPI_INT, MPI_COMM_WORLD, &n) != 0) return eslESYS; *ret_wn += n; /* status code */ return eslOK; } #endif /* elide_length_model() * * Fix bg->p1 to 350/351, * then make the N, C, J transition probabilities p1; * this removes H3's length model, and emulates H2 instead. * * This makes the NN, CC, JJ transitions score 0, and * makes the NB, CE, and JB transitions a fixed penalty * of log(1/351). * * In general this isn't a good idea. This code is only for * experimental purposes, demonstrating the difference between * H3's improved statistics and the old way. */ static int elide_length_model(P7_PROFILE *gm, P7_BG *bg) { bg->p1 = 350./351.; gm->xsc[p7P_N][p7P_LOOP] = gm->xsc[p7P_C][p7P_LOOP] = gm->xsc[p7P_J][p7P_LOOP] = log(bg->p1); gm->xsc[p7P_N][p7P_MOVE] = gm->xsc[p7P_C][p7P_MOVE] = gm->xsc[p7P_J][p7P_MOVE] = log(1.0 - bg->p1); return eslOK; } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/hmmsim.c $ * SVN $Id: hmmsim.c 4601 2014-01-17 02:46:10Z wheelert $ *****************************************************************/ hmmer-3.1b2/src/hmmpress.itest.pl0000775361611702660230000000417712473612613016415 0ustar wheelerteddy#! /usr/bin/perl # Integrated test of hmmpress # # Usage: ./hmmpress.itest.pl # Example: ./hmmpress.itest.pl ./hmmpress ../testsuite/minifam.hmm foo # # SRE, Thu Nov 12 08:47:56 2009 [Janelia] # SVN $Id: hmmpress.itest.pl 3042 2009-11-12 14:44:48Z eddys $ $hmmpress = shift; # The hmmpress executable. example: "./hmmpress" $minifam = shift; # An HMM database. example: "../testsuite/minifam.hmm" $tmppfx = shift; # A tmpfile prefix to use. example: "foo" if (! -x "$hmmpress") { die "FAIL: didn't find hmmpress binary $hmmpress"; } if (! -r "$minifam") { die "FAIL: didn't find hmm file $minifam"; } # Make a copy of minifam, so we can whack on it. system("cp $minifam $tmppfx.hmm 2>&1"); if ($? != 0) { die "failed to copy $minifam"; } # Get the model names from it. We at least need to know how many there are. @output = `grep "^NAME " $tmppfx.hmm 2>&1`; if ($? != 0) { die "failed to grep $minifam for names"; } $nmodels = 0; foreach $line (@output) { $hmmname[$nmodels++] = ($line =~ /^NAME (\S+)/); } # Press it. Creates .h3{mifp} files. # $output = `$hmmpress $tmppfx.hmm 2>&1`; if ($? != 0) { die "failed to press $minifam"; } if ($output !~ /Pressed and indexed (\d+) HMMs/) { die "unexpected hmmpress output"; } if ($1 != $nmodels) { die "unexpected number of models pressed"; } # Try to press it again. # This should issue a normal warning that the files already exist. $output = `$hmmpress $tmppfx.hmm 2>&1`; if ( ($? >> 8) != 1) { die "expected exit code 1 from hmmpress"; } if ($output !~ /Error:.+is already pressed/) { die "second press should have failed"; } # Press it again with -f # Bug #h65 was here. $output = `$hmmpress -f $tmppfx.hmm 2>&1`; if ($? != 0) { die "hmmpress -f failed to press $minifam"; } if ($output !~ /Pressed and indexed (\d+) HMMs/) { die "unexpected hmmpress -f output"; } if ($1 != $nmodels) { die "unexpected number of models after hmmpress -f"; } print "ok\n"; unlink <$tmppfx.hmm*>; exit 0; hmmer-3.1b2/src/hmmconvert.c0000664361611702660230000000760412473612613015414 0ustar wheelerteddy/* hmmconvert: converting profile HMM files to HMMER3 HMM format. * * SRE, Thu Oct 16 08:57:43 2008 [janelia] [Enigma MCMXC a.D.] * SVN $Id: hmmconvert.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-a", eslARG_NONE,"default",NULL, NULL, "-a,-b,-2", NULL, NULL, "ascii: output models in HMMER3 ASCII format", 0 }, { "-b", eslARG_NONE, FALSE, NULL, NULL, "-a,-b,-2", NULL, NULL, "binary: output models in HMMER3 binary format", 0 }, { "-2", eslARG_NONE, FALSE, NULL, NULL, "-a,-b,-2", NULL, NULL, "HMMER2: output backward compatible HMMER2 ASCII format (ls mode)", 0 }, { "--outfmt", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, "-2", "choose output legacy 3.x file formats by name, such as '3/a'", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "convert profile file to a HMMER format"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_ALPHABET *abc = NULL; char *hmmfile = esl_opt_GetArg(go, 1); P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; FILE *ofp = stdout; char *outfmt = esl_opt_GetString(go, "--outfmt"); int fmtcode = -1; /* -1 = write the current default format */ int status; char errbuf[eslERRBUFSIZE]; if (outfmt != NULL) { if (strcmp(outfmt, "3/a") == 0) fmtcode = p7_HMMFILE_3a; else if (strcmp(outfmt, "3/b") == 0) fmtcode = p7_HMMFILE_3b; else if (strcmp(outfmt, "3/c") == 0) fmtcode = p7_HMMFILE_3c; else p7_Fail("No such 3.x output format code %s.\n", outfmt); } status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); while ((status = p7_hmmfile_Read(hfp, &abc, &hmm)) == eslOK) { if (esl_opt_GetBoolean(go, "-a") == TRUE) p7_hmmfile_WriteASCII (ofp, fmtcode, hmm); else if (esl_opt_GetBoolean(go, "-b") == TRUE) p7_hmmfile_WriteBinary(ofp, fmtcode, hmm); else if (esl_opt_GetBoolean(go, "-2") == TRUE) p7_h2io_WriteASCII (ofp, hmm); p7_hmm_Destroy(hmm); } if (status == eslEFORMAT) p7_Fail("bad file format in HMM file %s", hmmfile); else if (status == eslEINCOMPAT) p7_Fail("HMM file %s contains different alphabets", hmmfile); else if (status != eslEOF) p7_Fail("Unexpected error in reading HMMs from %s", hmmfile); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/modelstats.c0000664361611702660230000002127512473612614015412 0ustar wheelerteddy/* Miscellaneous summary statistics calculated for HMMs and profiles. * * SRE, Fri May 4 11:43:20 2007 [Janelia] * SVN $Id: modelstats.c 4385 2013-02-05 14:42:40Z wheelert $ */ #include "p7_config.h" #include "easel.h" #include "esl_vectorops.h" #include "hmmer.h" /* Function: p7_MeanMatchInfo() * Incept: SRE, Fri May 4 11:43:56 2007 [Janelia] * * Purpose: Calculate the mean information content per match state * emission distribution, in bits: * * \[ * \frac{1}{M} \sum_{k=1}^{M} * \left[ * \sum_x p_k(x) \log_2 p_k(x) * - \sum_x f(x) \log_2 f(x) * \right] * \] * * where $p_k(x)$ is emission probability for symbol $x$ * from match state $k$, and $f(x)$ is the null model's * background emission probability for $x$. */ double p7_MeanMatchInfo(const P7_HMM *hmm, const P7_BG *bg) { return esl_vec_FEntropy(bg->f, hmm->abc->K) - p7_MeanMatchEntropy(hmm); } /* Function: p7_MeanMatchEntropy() * Incept: SRE, Fri May 4 13:37:15 2007 [Janelia] * * Purpose: Calculate the mean entropy per match state emission * distribution, in bits: * * \[ * - \frac{1}{M} \sum_{k=1}^{M} \sum_x p_k(x) \log_2 p_k(x) * \] * * where $p_k(x)$ is emission probability for symbol $x$ * from match state $k$. */ double p7_MeanMatchEntropy(const P7_HMM *hmm) { int k; double H = 0.; for (k = 1; k <= hmm->M; k++) H += esl_vec_FEntropy(hmm->mat[k], hmm->abc->K); H /= (double) hmm->M; return H; } /* Function: p7_MeanMatchRelativeEntropy() * Incept: SRE, Fri May 11 09:25:01 2007 [Janelia] * * Purpose: Calculate the mean relative entropy per match state emission * distribution, in bits: * * \[ * \frac{1}{M} \sum_{k=1}^{M} \sum_x p_k(x) \log_2 \frac{p_k(x)}{f(x)} * \] * * where $p_k(x)$ is emission probability for symbol $x$ * from match state $k$, and $f(x)$ is the null model's * background emission probability for $x$. */ double p7_MeanMatchRelativeEntropy(const P7_HMM *hmm, const P7_BG *bg) { int k; double KL = 0.; #if 0 p7_bg_Dump(stdout, hmm->bg); for (k = 1; k <= hmm->M; k++) printf("Match %d : %.2f %.2f\n", k, esl_vec_FRelEntropy(hmm->mat[k], hmm->bg->f, hmm->abc->K), esl_vec_FEntropy(bg->f, hmm->abc->K) - esl_vec_FEntropy(hmm->mat[k], hmm->abc->K)); #endif for (k = 1; k <= hmm->M; k++) KL += esl_vec_FRelEntropy(hmm->mat[k], bg->f, hmm->abc->K); KL /= (double) hmm->M; return KL; } double p7_MeanForwardScore(const P7_HMM *hmm, const P7_BG *bg) { int L = 350; int N = 100; P7_PROFILE *gm = p7_profile_Create(hmm->M, hmm->abc); P7_GMX *gx = p7_gmx_Create(gm->M, L); ESL_SQ *sq = esl_sq_CreateDigital(hmm->abc); ESL_RANDOMNESS *r = esl_randomness_CreateFast(0); float fsc; float nullsc; double bitscore; double sum = 0.; int i; if (p7_ProfileConfig (hmm, bg, gm, L, p7_LOCAL) != eslOK) p7_Die("failed to configure profile"); for (i = 0; i < N; i++) { if (p7_ReconfigLength(gm, L) != eslOK) p7_Die("failed to reconfig profile length"); if (p7_ProfileEmit(r, hmm, gm, bg, sq, NULL) != eslOK) p7_Die("failed to emit sequence"); if (p7_ReconfigLength(gm, sq->n) != eslOK) p7_Die("failed to reconfig profile length"); if (p7_gmx_GrowTo(gx, gm->M, sq->n) != eslOK) p7_Die("failed to grow the matrix"); if (p7_GForward(sq->dsq, sq->n, gm, gx, &fsc) != eslOK) p7_Die("failed to run Forward"); if (p7_bg_NullOne(bg, sq->dsq, sq->n, &nullsc) != eslOK) p7_Die("failed to run bg_NullOne()"); bitscore = (fsc - nullsc) / eslCONST_LOG2; sum += bitscore; } esl_randomness_Destroy(r); esl_sq_Destroy(sq); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); return (sum / (double) N); } /* Function: p7_MeanPositionRelativeEntropy() * Synopsis: Calculate the mean score per match position, including gap cost. * Incept: SRE, Thu Sep 6 10:26:14 2007 [Janelia] * * Purpose: Calculate the mean score (relative entropy) in bits per * match (consensus) position in model , given background * model . * * More specifically: the mean bitscore is weighted by * match state occupancy (match states that aren't used * much are downweighted), and the log transitions into * that match state from the previous M, D, or I are * counted against it, weighted by their probability. * * This isn't a complete accounting of the average score * per model position nor per aligned residue; most * notably, it doesn't include the contribution of * entry/exit probabilities. So don't expect to approximate * average scores by multiplying <*ret_entropy> by . * * Returns: on success, and <*ret_entropy> is the result. * * Throws: on allocation failure, and <*ret_entropy> is 0. */ int p7_MeanPositionRelativeEntropy(const P7_HMM *hmm, const P7_BG *bg, double *ret_entropy) { int status; float *mocc = NULL; int k; double mre, tre; double xm, xi, xd; ESL_ALLOC(mocc, sizeof(float) * (hmm->M+1)); if ((status = p7_hmm_CalculateOccupancy(hmm, mocc, NULL)) != eslOK) goto ERROR; /* mre = the weighted relative entropy per match emission */ for (mre = 0., k = 1; k <= hmm->M; k++) mre += mocc[k] * esl_vec_FRelEntropy(hmm->mat[k], bg->f, hmm->abc->K); mre /= esl_vec_FSum(mocc+1, hmm->M); /* The weighted relative entropy per match entry transition, 2..M */ for (tre = 0., k = 2; k <= hmm->M; k++) { xm = mocc[k-1]*hmm->t[k-1][p7H_MM] * log(hmm->t[k-1][p7H_MM] / bg->p1); xi = mocc[k-1]*hmm->t[k-1][p7H_MI] * (log(hmm->t[k-1][p7H_MM] / bg->p1) + log(hmm->t[k-1][p7H_IM] / bg->p1)); xd = (1.-mocc[k-1])*hmm->t[k-1][p7H_DM] * log(hmm->t[k-1][p7H_DM] / bg->p1); tre += (xm+xi+xd) / eslCONST_LOG2; } tre /= esl_vec_FSum(mocc+2, hmm->M-1); free(mocc); *ret_entropy = mre+tre; return eslOK; ERROR: if (mocc != NULL) free(mocc); *ret_entropy = 0.; return status; } /* Function: p7_hmm_CompositionKLDist() * Synopsis: A statistic of model's composition bias. * Incept: SRE, Mon Jul 2 08:40:12 2007 [Janelia] * * Purpose: Calculates the K-L distance between the average match * state residue composition in model and a * background frequency distribution in , and * return it in . * * Optionally return the average match state residue * composition in . This vector, of length * abc->K> is allocated here and becomes the caller's * responsibility if is non-. * * The average match composition is an occupancy-weighted * average (see . * * The `K-L distance' <*ret_KL> is the symmetricized * Kullback-Leibler distance in bits (log base 2). * * Returns: on success. * * Throws: on allocation error. */ int p7_hmm_CompositionKLDist(P7_HMM *hmm, P7_BG *bg, float *ret_KL, float **opt_avp) { int K = hmm->abc->K; float *occ = NULL; float *p = NULL; int status; int k; ESL_ALLOC(occ, sizeof(float) * (hmm->M+1)); ESL_ALLOC(p, sizeof(float) * K); p7_hmm_CalculateOccupancy(hmm, occ, NULL); esl_vec_FSet(p, K, 0.); for (k = 1; k <= hmm->M; k++) esl_vec_FAddScaled(p, hmm->mat[k], occ[k], K); esl_vec_FNorm(p, K); *ret_KL = (esl_vec_FRelEntropy(p, bg->f, K) + esl_vec_FRelEntropy(bg->f, p, K)) / (2.0 * eslCONST_LOG2); if (opt_avp != NULL) *opt_avp = p; else free(p); free(occ); return eslOK; ERROR: if (occ != NULL) free(occ); if (p != NULL) free(p); *ret_KL = 0.0; if (opt_avp != NULL) *opt_avp = NULL; return status; } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/hmmstat.c0000664361611702660230000002363512473612613014711 0ustar wheelerteddy/* hmmstat: display summary statistics for an HMM database. * * Example: * ./hmmstat Pfam * * SRE, Thu May 24 11:18:20 2007 * SVN $Id: hmmstat.c 4321 2012-11-27 16:15:47Z wheelert $ */ #include "p7_config.h" #include #include #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_exponential.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "--eval2score", eslARG_NONE, FALSE, NULL, NULL, NULL, "-E", NULL, "compute score for E-value (E) for database of (Z) sequences", 0 }, { "--score2eval", eslARG_NONE, FALSE, NULL, NULL, NULL, "-S", NULL, "compute E-value for score (S) for database of (Z) sequences", 0 }, { "-Z", eslARG_INT, "1", NULL, "n>0", NULL, NULL, "--baseZ1,--baseZ", "database size (in seqs) for --eval2score or --score2eval", 0 }, { "--baseZ", eslARG_INT, "0", NULL, NULL, NULL, NULL, "--baseZ1,-Z", "database size (M bases) (DNA only, if search on both strands)", 0 }, { "--baseZ1", eslARG_INT, "0", NULL, NULL, NULL, NULL, "--baseZ,-Z", "database size (M bases) (DNA only, if search on single strand)", 0 }, { "-E", eslARG_REAL, "0.01", NULL, NULL, NULL, "--eval2score", NULL, "E-value threshold, for --eval2score", 0 }, { "-S", eslARG_REAL, "0.01", NULL, NULL, NULL, "--score2eval", NULL, "Score input for --score2eval", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "display summary statistics for a profile file"; static int output_header(FILE *ofp, const ESL_GETOPTS *go) { p7_banner(ofp, go->argv[0], banner); if (esl_opt_IsUsed(go, "--eval2score")) { if ( fprintf(ofp, "# show score required to reach E-value: %.2g\n", esl_opt_GetReal(go, "-E")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (esl_opt_IsUsed(go, "--score2eval")) { if ( fprintf(ofp, "# show E-value corresponding to score: %.2g\n", esl_opt_GetReal(go, "-S")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (esl_opt_IsUsed(go, "--eval2score") || esl_opt_IsUsed(go, "--score2eval")) { if (esl_opt_IsUsed(go, "--baseZ") ) { if ( fprintf(ofp, "# using base count (search both strands): %d Mb\n", esl_opt_GetInteger(go, "--baseZ")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } else if (esl_opt_IsUsed(go, "--baseZ1") ) { if ( fprintf(ofp, "# using base count (search single strand): %d Mb\n", esl_opt_GetInteger(go, "--baseZ1")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } else { if ( fprintf(ofp, "# using database sequence count: %d\n", esl_opt_GetInteger(go, "-Z")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } } if (fprintf(ofp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); return eslOK; } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* command line processing */ ESL_ALPHABET *abc = NULL; char *hmmfile = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; int nhmm; double x; float KL; int status; char errbuf[eslERRBUFSIZE]; int do_eval2score = 0; int do_score2eval = 0; long z_val; float e_val; float s_val; float nseq; /* Process the command line options. */ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "-h") == TRUE) { p7_banner(stdout, argv[0], banner); esl_usage(stdout, argv[0], usage); puts("\nOptions:"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* 0=docgroup, 2 = indentation; 80=textwidth*/ exit(0); } if (esl_opt_ArgNumber(go) != 1) { puts("Incorrect number of command line arguments."); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if ((hmmfile = esl_opt_GetArg(go, 1)) == NULL) { puts("Failed to read argument from command line."); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } output_header(stdout, go); if ( esl_opt_IsOn(go, "--eval2score") ) { do_eval2score = TRUE; e_val = esl_opt_GetReal(go, "-E"); } else if ( esl_opt_IsOn(go, "--score2eval") ) { do_score2eval = TRUE; s_val = esl_opt_GetReal(go, "-S"); } else if ( esl_opt_IsUsed(go, "--baseZ") || esl_opt_IsUsed(go, "--baseZ1") || esl_opt_IsUsed(go, "-Z") ) { puts("The flags -Z, --baseZ, and --baseZ1 are for use with --eval2score and --score2eval."); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_IsUsed(go, "--baseZ") ) { z_val = 1000000 * 2 * (long)(esl_opt_GetInteger(go, "--baseZ")); } else if (esl_opt_IsUsed(go, "--baseZ1") ) { z_val = 1000000 * (long)(esl_opt_GetInteger(go, "--baseZ1")); } else { z_val = esl_opt_GetInteger(go, "-Z"); } /* Initializations: open the HMM file */ status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); /* Main body: read HMMs one at a time, print one line of stats */ printf("#\n"); printf("# %-4s %-20s %-12s %8s %8s %6s %6s %6s %6s %6s", "idx", "name", "accession", "nseq", "eff_nseq", "M", "relent", "info", "p relE", "compKL"); if (do_eval2score) printf (" %6s %6.2g", "sc for", e_val); if (do_score2eval) printf (" %6s %6.2f", "E-val for", s_val); printf("\n"); printf("# %-4s %-20s %-12s %8s %8s %6s %6s %6s %6s %6s", "----", "--------------------", "------------", "--------", "--------", "------", "------", "------", "------", "------"); if (do_eval2score) printf (" %13s", "-------------"); if (do_score2eval) printf (" %13s", "-------------"); printf("\n"); nhmm = 0; while ((status = p7_hmmfile_Read(hfp, &abc, &hmm)) != eslEOF) { if (status == eslEOD) esl_fatal("read failed, HMM file %s may be truncated?", hmmfile); else if (status == eslEFORMAT) esl_fatal("bad file format in HMM file %s", hmmfile); else if (status == eslEINCOMPAT) esl_fatal("HMM file %s contains different alphabets", hmmfile); else if (status != eslOK) esl_fatal("Unexpected error in reading HMMs from %s", hmmfile); nhmm++; if ( esl_opt_IsOn(go, "--eval2score") || esl_opt_IsOn(go, "--score2eval") ) { if (esl_opt_IsUsed(go, "--baseZ") || esl_opt_IsUsed(go, "--baseZ1" ) ) { if ( hmm->abc->type != eslRNA && hmm->abc->type != eslDNA) { puts("The flags --baseZ and --baseZ1 can't be used with non-nucleotide models."); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } } else if ( hmm->abc->type != eslAMINO && hmm->abc->type != eslRNA && hmm->abc->type != eslDNA) { puts("The flags --eval2score and --score2eval can't be used with non-sequence models."); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } } if (esl_opt_IsUsed(go, "--baseZ") ) { nseq = (float)z_val / (float)(hmm->max_length); } else if (esl_opt_IsUsed(go, "--baseZ1") ) { nseq = (float)z_val / (float)(hmm->max_length); } else { nseq = z_val; } if (bg == NULL) bg = p7_bg_Create(abc); p7_MeanPositionRelativeEntropy(hmm, bg, &x); p7_hmm_CompositionKLDist(hmm, bg, &KL, NULL); printf("%-6d %-20s %-12s %8d %8.2f %6d %6.2f %6.2f %6.2f %6.2f", nhmm, hmm->name, hmm->acc == NULL ? "-" : hmm->acc, hmm->nseq, hmm->eff_nseq, hmm->M, p7_MeanMatchRelativeEntropy(hmm, bg), p7_MeanMatchInfo(hmm, bg), x, KL); if ( esl_opt_IsOn(go, "--eval2score") ) { float sc; sc = esl_exp_invsurv( e_val / nseq , hmm->evparam[p7_FTAU], hmm->evparam[p7_FLAMBDA]); printf("%13.2f", sc); } else if ( esl_opt_IsOn(go, "--score2eval") ) { float e; e = nseq * esl_exp_surv( s_val , hmm->evparam[p7_FTAU], hmm->evparam[p7_FLAMBDA]); printf("%13.2g", e); } printf("\n"); /* p7_MeanForwardScore(hmm, bg)); */ p7_hmm_Destroy(hmm); } p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); p7_hmmfile_Close(hfp); esl_getopts_Destroy(go); exit(0); } hmmer-3.1b2/src/p7_domaindef.c0000664361611702660230000013530112473612614015563 0ustar wheelerteddy/* Definition of multidomain structure of a target sequence, and * rescoring as a sum of individual domains, with null2 correction. * * Contents: * 1. The P7_DOMAINDEF object: allocation, reuse, destruction * 2. Routines inferring domain structure of a target sequence * 3. Internal routines * * Exegesis: * * The key function here is . * Everything else is support structure. * * When you call , you have a * per-sequence hit that's judged significant, and you've calculated * Forward/Backward score matrices for the complete sequence. Thus, * the input data are the model , the sequence , and filled-in * forward and backward matrices , . * * The function then chews over this data, using posterior * probabilities and heuristics to define, score, and obtain * display-ready alignments for individual domains. When it's done, * your and matrices have been effectively destroyed (they * get reused for individual domain alignment calculations), and * contains all the per-domain results you need. It returns to * you the number of domains it's defined (in ), and the * total per-sequence score derived by a sum of individual domain * scores (in ). * * The structure is a reusable container that manages * all the necessary working memory and heuristic thresholds. * * SRE, Thu Jan 24 09:28:01 2008 [Janelia] * SVN $Id: p7_domaindef.c 4694 2014-07-01 02:35:31Z wheelert $ */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_random.h" #include "esl_sq.h" #include "esl_vectorops.h" #include "esl_sse.h" #include "hmmer.h" static int is_multidomain_region (P7_DOMAINDEF *ddef, int i, int j); static int region_trace_ensemble (P7_DOMAINDEF *ddef, const P7_OPROFILE *om, const ESL_DSQ *dsq, int ireg, int jreg, const P7_OMX *fwd, P7_OMX *wrk, int *ret_nc); static int rescore_isolated_domain(P7_DOMAINDEF *ddef, P7_OPROFILE *om, const ESL_SQ *sq, P7_OMX *ox1, P7_OMX *ox2, int i, int j, int null2_is_done, P7_BG *bg, int long_target, P7_BG *bg_tmp, float *scores_arr, float *fwd_emissions_arr); /***************************************************************** * 1. The P7_DOMAINDEF object: allocation, reuse, destruction *****************************************************************/ /* Function: p7_domaindef_Create() * Synopsis: Creates a new object. * Incept: SRE, Fri Jan 25 13:21:31 2008 [Janelia] * * Purpose: Creates a new object, with registered * as its random number generator, using default settings * for all thresholds. * * Returns: a pointer to the new object. * * Throws: on allocation failure. */ P7_DOMAINDEF * p7_domaindef_Create(ESL_RANDOMNESS *r) { P7_DOMAINDEF *ddef = NULL; int Lalloc = 512; /* this initial alloc doesn't matter much; space is realloced as needed */ int nalloc = 32; int status; /* level 1 alloc */ ESL_ALLOC(ddef, sizeof(P7_DOMAINDEF)); ddef->mocc = ddef->btot = ddef->etot = NULL; ddef->n2sc = NULL; ddef->sp = NULL; ddef->tr = NULL; ddef->dcl = NULL; /* level 2 alloc: posterior prob arrays */ ESL_ALLOC(ddef->mocc, sizeof(float) * (Lalloc+1)); ESL_ALLOC(ddef->btot, sizeof(float) * (Lalloc+1)); ESL_ALLOC(ddef->etot, sizeof(float) * (Lalloc+1)); ESL_ALLOC(ddef->n2sc, sizeof(float) * (Lalloc+1)); ddef->mocc[0] = ddef->etot[0] = ddef->btot[0] = 0.; ddef->n2sc[0] = 0.; ddef->Lalloc = Lalloc; ddef->L = 0; /* level 2 alloc: results storage */ ESL_ALLOC(ddef->dcl, sizeof(P7_DOMAIN) * nalloc); ddef->nalloc = nalloc; ddef->ndom = 0; ddef->nexpected = 0.0; ddef->nregions = 0; ddef->nclustered = 0; ddef->noverlaps = 0; ddef->nenvelopes = 0; /* default thresholds */ ddef->rt1 = 0.25; ddef->rt2 = 0.10; ddef->rt3 = 0.20; ddef->nsamples = 200; ddef->min_overlap = 0.8; ddef->of_smaller = TRUE; ddef->max_diagdiff = 4; ddef->min_posterior = 0.25; ddef->min_endpointp = 0.02; /* allocate reusable, growable objects that domain def reuses for each seq */ ddef->sp = p7_spensemble_Create(1024, 64, 32); /* init allocs = # sampled pairs; max endpoint range; # of domains */ ddef->tr = p7_trace_CreateWithPP(); ddef->gtr = p7_trace_Create(); /* keep a copy of ptr to the RNG */ ddef->r = r; ddef->do_reseeding = TRUE; return ddef; ERROR: p7_domaindef_Destroy(ddef); return NULL; } /* p7_domaindef_GrowTo() * Synopsis: Reallocates a for new seq length * Incept: SRE, Fri Jan 25 13:27:24 2008 [Janelia] * * Purpose: Reallocates a object so that * it can hold a sequence of up to residues. * * (This might be a no-op, if is already large * enough.) * * Returns: on success. * * Throws: on allocation failure. In this case, the * data in are unaffected. */ int p7_domaindef_GrowTo(P7_DOMAINDEF *ddef, int L) { void *p; int status; if (L <= ddef->Lalloc) return eslOK; ESL_RALLOC(ddef->mocc, p, sizeof(float) * (L+1)); ESL_RALLOC(ddef->btot, p, sizeof(float) * (L+1)); ESL_RALLOC(ddef->etot, p, sizeof(float) * (L+1)); ESL_RALLOC(ddef->n2sc, p, sizeof(float) * (L+1)); ddef->Lalloc = L; return eslOK; ERROR: return status; } /* Function: p7_domaindef_Reuse() * Synopsis: Prepare to reuse a on a new sequence. * Incept: SRE, Fri Jan 25 13:48:36 2008 [Janelia] * * Purpose: Prepare a object to be reused on * a new sequence, reusing as much memory as possible. * * Note: Because of the way we handle alidisplays, handing them off to * the caller, we don't reuse their memory; any unused * alidisplays are destroyed. It's not really possible to * reuse alidisplay memory. We need alidisplays to persist * until all sequences have been processed and we're * writing our final output to the user. * * Returns: on success. */ int p7_domaindef_Reuse(P7_DOMAINDEF *ddef) { int status; int d; /* If ddef->dcl is NULL, we turned the domain list over to a P7_HIT * for permanent storage, and we need to allocate a new one; * else, reuse the one we've got. */ if (ddef->dcl == NULL) ESL_ALLOC(ddef->dcl, sizeof(P7_DOMAIN) * ddef->nalloc); else { for (d = 0; d < ddef->ndom; d++) { p7_alidisplay_Destroy(ddef->dcl[d].ad); ddef->dcl[d].ad = NULL; free(ddef->dcl[d].scores_per_pos); ddef->dcl[d].scores_per_pos = NULL; } } ddef->ndom = 0; ddef->L = 0; ddef->nexpected = 0.0; ddef->nregions = 0; ddef->nclustered = 0; ddef->noverlaps = 0; ddef->nenvelopes = 0; p7_spensemble_Reuse(ddef->sp); p7_trace_Reuse(ddef->tr); /* probable overkill; should already have been called */ p7_trace_Reuse(ddef->gtr); /* likewise */ return eslOK; ERROR: return status; } /* Function: p7_domaindef_DumpPosteriors() * Synopsis: Output posteriors that define domain structure to a stream. * Incept: SRE, Fri Feb 29 08:32:14 2008 [Janelia] * * Purpose: Output the vectors from that are used to * define domain structure to a stream , in xmgrace format. * * There are four vectors. The first set is * , the probability that residue is * emitted by the core model (is in a domain). The second * set is , the cumulative expected number * of times that a domain uses a B state (starts) at or * before position . The third set is , * the cumulative expected number of times that a domain * uses an E state (ends) at or before position . The * fourth set is , the score of residue i * under the ad hoc null2 model; this is a measure of local * biased composition. * * These three fields will only be available after a call * to domain definition by * . * * Returns: on success * * Xref: J2/126 */ int p7_domaindef_DumpPosteriors(FILE *ofp, P7_DOMAINDEF *ddef) { int i; for (i = 1; i <= ddef->L; i++) fprintf(ofp, "%d %f\n", i, ddef->mocc[i]); fprintf(ofp, "&\n"); for (i = 1; i <= ddef->L; i++) fprintf(ofp, "%d %f\n", i, ddef->btot[i]); fprintf(ofp, "&\n"); for (i = 1; i <= ddef->L; i++) fprintf(ofp, "%d %f\n", i, ddef->etot[i]); fprintf(ofp, "&\n"); for (i = 1; i <= ddef->L; i++) fprintf(ofp, "%d %f\n", i, ddef->n2sc[i]); fprintf(ofp, "&\n"); return eslOK; } /* Function: p7_domaindef_Destroy() * Synopsis: Destroys a . * Incept: SRE, Fri Jan 25 13:52:46 2008 [Janelia] * * Purpose: Destroys a . */ void p7_domaindef_Destroy(P7_DOMAINDEF *ddef) { int d; if (ddef == NULL) return; if (ddef->mocc != NULL) free(ddef->mocc); if (ddef->btot != NULL) free(ddef->btot); if (ddef->etot != NULL) free(ddef->etot); if (ddef->n2sc != NULL) free(ddef->n2sc); if (ddef->dcl != NULL) { for (d = 0; d < ddef->ndom; d++) { if (ddef->dcl[d].scores_per_pos) free(ddef->dcl[d].scores_per_pos); p7_alidisplay_Destroy(ddef->dcl[d].ad); } free(ddef->dcl); } p7_spensemble_Destroy(ddef->sp); p7_trace_Destroy(ddef->tr); p7_trace_Destroy(ddef->gtr); free(ddef); return; } /***************************************************************** * 2. Routines inferring domain structure of a target sequence *****************************************************************/ #if 0 /* Function: p7_domaindef_ByViterbi() * Synopsis: Define domains in a sequence by maximum likelihood. * Incept: SRE, Fri Jan 25 15:10:21 2008 [Janelia] * * Purpose: Use a Viterbi (maximum likelihood) parse to determine * the domain structure of sequence aligned to * model . Caller provides a filled Viterbi matrix * in , and a second matrix of at least the same * size for scratch space in . * * Upon return, contains definitions of all the * domains, bounds defined by Viterbi parse, individually * scored by null2-corrected Forward, and aligned by * optimal posterior accuracy. * * Returns: on success. */ int p7_domaindef_ByViterbi(P7_PROFILE *gm, const ESL_SQ *sq, P7_GMX *gx1, P7_GMX *gx2, P7_DOMAINDEF *ddef) { int d; int saveL = gm->L; /* need to be able to restore original config */ int save_mode = gm->mode; p7_domaindef_GrowTo(ddef, sq->n); p7_GTrace (sq->dsq, sq->n, gm, gx1, ddef->gtr); p7_trace_Index(ddef->gtr); p7_ReconfigUnihit(gm, 0); /* process each domain in unihit L=0 mode */ for (d = 0; d < ddef->gtr->ndom; d++) rescore_isolated_domain(ddef, gm, sq, gx1, gx2, ddef->gtr->sqfrom[d], ddef->gtr->sqto[d], FALSE, NULL, FALSE, NULL, NULL, NULL); /* Restore original model configuration, including length */ if (p7_IsMulti(save_mode)) p7_ReconfigMultihit(gm, saveL); else p7_ReconfigUnihit( gm, saveL); return eslOK; } #endif /* Function: p7_domaindef_ByPosteriorHeuristics() * Synopsis: Define domains in a sequence using posterior probs. * Incept: SRE, Sat Feb 23 08:17:44 2008 [Janelia] * * Purpose: Given a sequence and model for which we have * already calculated a Forward and Backward parsing * matrices and ; use posterior probability * heuristics to determine an annotated domain structure; * and for each domain found, score it (with null2 * calculations) and obtain an optimal accuracy alignment, * using and matrices as workspace for the * necessary full-matrix DP calculations. Caller provides a * new or reused object to hold these results. * A is provided for (possible) use * in null3 score correction (used in nhmmer), and a boolean * argument is provided to allow nhmmer- * specific modifications to the behavior of this function * (TRUE -> from nhmmer). * * Upon return, contains the definitions of all the * domains: their bounds, their null-corrected Forward * scores, and their optimal posterior accuracy alignments. * * Returns: on success. * * on numeric overflow in posterior * decoding. This should not be possible for multihit * models. */ int p7_domaindef_ByPosteriorHeuristics(const ESL_SQ *sq, P7_OPROFILE *om, P7_OMX *oxf, P7_OMX *oxb, P7_OMX *fwd, P7_OMX *bck, P7_DOMAINDEF *ddef, P7_BG *bg, int long_target, P7_BG *bg_tmp, float *scores_arr, float *fwd_emissions_arr ) { int i, j; int triggered; int d; int i2,j2; int last_j2; int nc; int saveL = om->L; /* Save the length config of ; will restore upon return */ int save_mode = om->mode; /* Likewise for the mode. */ int status; if ((status = p7_domaindef_GrowTo(ddef, sq->n)) != eslOK) return status; /* ddef's btot,etot,mocc now ready for seq of length n */ if ((status = p7_DomainDecoding(om, oxf, oxb, ddef)) != eslOK) return status; /* ddef->{btot,etot,mocc} now made. */ esl_vec_FSet(ddef->n2sc, sq->n+1, 0.0); /* ddef->n2sc null2 scores are initialized */ ddef->nexpected = ddef->btot[sq->n]; /* posterior expectation for # of domains (same as etot[sq->n]) */ p7_oprofile_ReconfigUnihit(om, saveL); /* process each domain in unihit mode, regardless of om->mode */ i = -1; triggered = FALSE; for (j = 1; j <= sq->n; j++) { if (! triggered) { /* xref J2/101 for what the logic below is: */ if (ddef->mocc[j] - (ddef->btot[j] - ddef->btot[j-1]) < ddef->rt2) i = j; else if (i == -1) i = j; if (ddef->mocc[j] >= ddef->rt1) triggered = TRUE; } else if (ddef->mocc[j] - (ddef->etot[j] - ddef->etot[j-1]) < ddef->rt2) { /* We have a region i..j to evaluate. */ p7_omx_GrowTo(fwd, om->M, j-i+1, j-i+1); p7_omx_GrowTo(bck, om->M, j-i+1, j-i+1); ddef->nregions++; if (is_multidomain_region(ddef, i, j)) { /* This region appears to contain more than one domain, so we have to * resolve it by cluster analysis of posterior trace samples, to define * one or more domain envelopes. */ ddef->nclustered++; /* Resolve the region into domains by stochastic trace * clustering; assign position-specific null2 model by * stochastic trace clustering; there is redundancy * here; we will consolidate later if null2 strategy * works */ p7_oprofile_ReconfigMultihit(om, saveL); p7_Forward(sq->dsq+i-1, j-i+1, om, fwd, NULL); region_trace_ensemble(ddef, om, sq->dsq, i, j, fwd, bck, &nc); p7_oprofile_ReconfigUnihit(om, saveL); /* ddef->n2sc is now set on i..j by the traceback-dependent method */ last_j2 = 0; for (d = 0; d < nc; d++) { p7_spensemble_GetClusterCoords(ddef->sp, d, &i2, &j2, NULL, NULL, NULL); if (i2 <= last_j2) ddef->noverlaps++; /* Note that k..m coords on model are available, but * we're currently ignoring them. This leads to a * rare clustering bug that we eventually need to fix * properly [xref J3/32]: two different regions in one * profile HMM might have hit same seq domain, and * when we now go to calculate an OA trace, nothing * constrains us to find the two different alignments * to the HMM; in fact, because OA is optimal, we'll * find one and the *same* alignment, leading to an * apparent duplicate alignment in the output. * * Registered as #h74, Dec 2009, after EBI finds and * reports it. #h74 is worked around in p7_tophits.c * by hiding all but one envelope with an identical * alignment, in the rare event that this * happens. [xref J5/130]. */ ddef->nenvelopes++; /*the !long_target argument will cause the function to recompute null2 * scores if this is part of a long_target (nhmmer) pipeline */ if (rescore_isolated_domain(ddef, om, sq, fwd, bck, i2, j2, TRUE, bg, long_target, bg_tmp, scores_arr, fwd_emissions_arr) == eslOK) last_j2 = j2; } p7_spensemble_Reuse(ddef->sp); p7_trace_Reuse(ddef->tr); } else { /* The region looks simple, single domain; convert the region to an envelope. */ ddef->nenvelopes++; rescore_isolated_domain(ddef, om, sq, fwd, bck, i, j, FALSE, bg, long_target, bg_tmp, scores_arr, fwd_emissions_arr); } i = -1; triggered = FALSE; } } /* Restore model to uni/multihit mode, and to its original length model */ if (p7_IsMulti(save_mode)) p7_oprofile_ReconfigMultihit(om, saveL); else p7_oprofile_ReconfigUnihit (om, saveL); return eslOK; } /***************************************************************** * 3. Internal routines *****************************************************************/ /* is_multidomain_region() * SRE, Fri Feb 8 11:35:04 2008 [Janelia] * * This defines the trigger for when we need to hand a "region" off to * a deeper analysis (using stochastic tracebacks and clustering) * because there's reason to suspect it may encompass two or more * domains. * * The criterion is to find the split point z at which the expected * number of E occurrences preceding B occurrences is maximized, and * if that number is greater than the heuristic threshold rt3>, * then return TRUE. In other words, we're checking to see if there's * any point in the region at which it looks like an E was followed by * a B, as expected for a multidomain interpretation of the region. * * More precisely: return TRUE if \max_z [ \min (B(z), E(z)) ] >= rt3 * where * E(z) = expected number of E states occurring in region before z is emitted * = \sum_{y=i}^{z} eocc[i] = etot[z] - etot[i-1] * B(z) = expected number of B states occurring in region after z is emitted * = \sum_{y=z}^{j} bocc[i] = btot[j] - btot[z-1] * * * Because this relies on the etot> and btot> arrays, * needs to have been called first. * * Xref: J2/101. */ static int is_multidomain_region(P7_DOMAINDEF *ddef, int i, int j) { int z; float max; float expected_n; max = -1.0; for (z = i; z <= j; z++) { expected_n = ESL_MIN( (ddef->etot[z] - ddef->etot[i-1]), (ddef->btot[j] - ddef->btot[z-1])); max = ESL_MAX(max, expected_n); } return ( (max >= ddef->rt3) ? TRUE : FALSE); } /* region_trace_ensemble() * SRE, Fri Feb 8 11:49:44 2008 [Janelia] * * Here, we've decided that region .. in sequence might be * composed of more than one domain, and we're going to use clustering * of a posterior ensemble of stochastic tracebacks to sort it out. * * Caller provides a filled Forward matrix in for the sequence * region , length , for the model * configured in multihit mode with its target length distribution * set to the total length of : i.e., the same model * configuration used to score the complete sequence (if it weren't * multihit, we wouldn't be worried about multiple domains). * * Caller also provides a DP matrix in containing at least one * row, for use as temporary workspace. (This will typically be the * caller's Backwards matrix, which we haven't yet used at this point * in the processing pipeline.) * * Caller provides , which defines heuristic parameters that * control the clustering, and provides working space for the * calculation and the answers. The sp> object must have been * reused (i.e., it needs to be fresh; we're going to use it here); * the caller needs to Reuse() it specifically, because it can't just * Reuse() the whole , when it's in the process of analyzing * regions. * * Upon return, <*ret_nc> contains the number of clusters that were * defined. * * The caller can retrieve info on each cluster by calling * sp...)> on the * object in . * * Other information on what's happened in working memory: * * n2sc[ireg..jreg]> now contains log f'(x_i) / f(x_i) null2 scores * for each residue. * * sp> gets filled in, and upon return, it's holding the answers * (the cluster definitions). When the caller is done retrieving those * answers, it needs to it before calling * again. * * tr> is used as working memory for sampled traces. * * has had its zero row clobbered as working space for a null2 calculation. */ static int region_trace_ensemble(P7_DOMAINDEF *ddef, const P7_OPROFILE *om, const ESL_DSQ *dsq, int ireg, int jreg, const P7_OMX *fwd, P7_OMX *wrk, int *ret_nc) { int Lr = jreg-ireg+1; int t, d, d2; int nov, n; int nc; int pos; float null2[p7_MAXCODE]; esl_vec_FSet(ddef->n2sc+ireg, Lr, 0.0); /* zero the null2 scores in region */ /* By default, we make results reproducible by forcing a reset of * the RNG to its originally seeded state. */ if (ddef->do_reseeding) esl_randomness_Init(ddef->r, esl_randomness_GetSeed(ddef->r)); /* Collect an ensemble of sampled traces; calculate null2 odds ratios from these */ for (t = 0; t < ddef->nsamples; t++) { p7_StochasticTrace(ddef->r, dsq+ireg-1, Lr, om, fwd, ddef->tr); p7_trace_Index(ddef->tr); pos = 1; for (d = 0; d < ddef->tr->ndom; d++) { p7_spensemble_Add(ddef->sp, t, ddef->tr->sqfrom[d]+ireg-1, ddef->tr->sqto[d]+ireg-1, ddef->tr->hmmfrom[d], ddef->tr->hmmto[d]); p7_Null2_ByTrace(om, ddef->tr, ddef->tr->tfrom[d], ddef->tr->tto[d], wrk, null2); /* residues outside domains get bumped +1: because f'(x) = f(x), so f'(x)/f(x) = 1 in these segments */ for (; pos <= ddef->tr->sqfrom[d]; pos++) ddef->n2sc[ireg+pos-1] += 1.0; /* Residues inside domains get bumped by their null2 ratio */ for (; pos <= ddef->tr->sqto[d]; pos++) ddef->n2sc[ireg+pos-1] += null2[dsq[ireg+pos-1]]; } /* the remaining residues in the region outside any domains get +1 */ for (; pos <= Lr; pos++) ddef->n2sc[ireg+pos-1] += 1.0; p7_trace_Reuse(ddef->tr); } /* Convert the accumulated n2sc[] ratios in this region to log odds null2 scores on each residue. */ for (pos = ireg; pos <= jreg; pos++) ddef->n2sc[pos] = logf(ddef->n2sc[pos] / (float) ddef->nsamples); /* Cluster the ensemble of traces to break region into envelopes. */ p7_spensemble_Cluster(ddef->sp, ddef->min_overlap, ddef->of_smaller, ddef->max_diagdiff, ddef->min_posterior, ddef->min_endpointp, &nc); /* A little hacky now. Remove "dominated" domains relative to seq coords. */ for (d = 0; d < nc; d++) ddef->sp->assignment[d] = 0; /* overload to flag that a domain is dominated */ /* who dominates who? (by post prob) */ for (d = 0; d < nc; d++) { for (d2 = d+1; d2 < nc; d2++) { nov = ESL_MIN(ddef->sp->sigc[d].j, ddef->sp->sigc[d2].j) - ESL_MAX(ddef->sp->sigc[d].i, ddef->sp->sigc[d2].i) + 1; if (nov == 0) break; n = ESL_MIN(ddef->sp->sigc[d].j - ddef->sp->sigc[d].i + 1, ddef->sp->sigc[d2].j - ddef->sp->sigc[d2].i + 1); if ((float) nov / (float) n >= 0.8) /* overlap */ { if (ddef->sp->sigc[d].prob > ddef->sp->sigc[d2].prob) ddef->sp->assignment[d2] = 1; else ddef->sp->assignment[d] = 1; } } } /* shrink the sigc list, removing dominated domains */ d = 0; for (d2 = 0; d2 < nc; d2++) { if (ddef->sp->assignment[d2]) continue; /* skip domain d2, it's dominated. */ if (d != d2) memcpy(ddef->sp->sigc + d, ddef->sp->sigc + d2, sizeof(struct p7_spcoord_s)); d++; } ddef->sp->nc = d; *ret_nc = d; return eslOK; } /* Function: reparameterize_model() * * Synopsis: Establish new background priors based on a sequence window, * and change match state emission log-odds scores accordingly. * * Purpose: Compute new background priors based on a sequence window, * and set match search model's match state emission log-odds * scores accordingly. Used narrowly within the post-fwd * portion of the longtarget pipeline * * If sq != NULL: Given a sequence and and length * , compute the residue frequency, and modify in place * to store a mixture of that frequency with the default (passed * in ). Then update the match emission scores in place in * to account for new values. Prior bg values are * stored for return in . This is called by * rescore_isolated_domain(), which is required to call it again * once complete to return and to original state. * * * If sq == NULL: return and to original state. * * Only used in the longtarget (nhmmer) case. In-place * modification is done to avoid rampant memory allocation. * Doing this requires that (a) each thread has its own * independent copy of and , and (b) those are * returned to their original state before being used * outside the function using the modified structures. * * The pre-allocated array must be passed, for use * in p7_oprofile_UpdateFwdEmissionScores(). * */ static int reparameterize_model (P7_BG *bg, P7_OPROFILE *om, const ESL_SQ *sq, int start, int L, float *fwd_emissions, float *bgf_arr, float *sc_arr) { int K = om->abc->K; int i; float tmp; int status; /* Fraction of new bg frequencies that comes from a prior determined by the sequence block. * This is 25% for long sequences, more for shorter sequences (e.g. 50% for sequences of length 50) */ float bg_smooth = 1.; // will be modified immediately below, if it's used if (sq != NULL) { /* compute new bg->f, capturing original values into a preallocated array */ bg_smooth = 25.0 / (ESL_MIN(100,ESL_MAX(50,sq->n))); esl_vec_FSet (bgf_arr, om->abc->K, 0); status = esl_sq_CountResidues(sq, start, L, bgf_arr); if (status != eslOK) p7_Fail("Invalid sequence range in reparameterize_model()\n"); esl_vec_FNorm(bgf_arr, om->abc->K); for (i=0; if[i]; bg->f[i] = (bg_smooth*bg->f[i]) + ( (1.0-bg_smooth) * bgf_arr[i]) ; bgf_arr[i] = tmp; } } else { /* revert bg->f to the passed in orig_bgf */ esl_vec_FCopy(bgf_arr, K, bg->f); } p7_oprofile_UpdateFwdEmissionScores(om, bg, fwd_emissions, sc_arr); return eslOK; } /* rescore_isolated_domain() * SRE, Fri Feb 8 09:18:33 2008 [Janelia] * * We have isolated a single domain's envelope from .. in * sequence , and now we want to score it in isolation and obtain * an alignment display for it. * * (Later, we can add up all the individual domain scores from this * seq into a new per-seq score, to compare to the original per-seq * score). * * The caller provides model configured in unilocal mode; by * using unilocal (as opposed to multilocal), we're going to force the * identification of a single domain in this envelope now. * * The alignment is an optimal accuracy alignment (sensu IH Holmes), * also obtained in unilocal mode. * * The caller provides DP matrices and with sufficient * space to hold Forward and Backward calculations for this domain * against the model. (The caller will typically already have matrices * sufficient for the complete sequence lying around, and can just use * those.) The caller also provides a object (ddef) * which is (efficiently, we trust) managing any necessary temporary * working space and heuristic thresholds. * * If is TRUE, the calling function optionally * passes in three allocated arrays (bgf_arr, scores_arr, * fwd_emissions_arr) used for temporary storage in * reparameterize_model(), and a previously computed array block_bg * of residue frequencies for the long_target block from which this * envelope came (if scores_arr is NULL, reparameterization is not * done, and the domcorrection, used to determine null2, is not * computed). * * Returns if a domain was successfully identified, scored, * and aligned in the envelope; if so, the per-domain information is * registered in , in dcl>. * * And here's what's happened to our working memory: * * : tr> has been used, and possibly reallocated, for * the OA trace of the domain. Before exit, we called * on it. * * * : happens to be holding OA score matrix for the domain * upon return, but that's not part of the spec; officially * its contents are "undefined". * * : happens to be holding a posterior probability matrix * for the domain upon return, but we're not making that * part of the spec, so caller shouldn't rely on this; * spec just makes its contents "undefined". */ static int rescore_isolated_domain(P7_DOMAINDEF *ddef, P7_OPROFILE *om, const ESL_SQ *sq, P7_OMX *ox1, P7_OMX *ox2, int i, int j, int null2_is_done, P7_BG *bg, int long_target, P7_BG *bg_tmp, float *scores_arr, float *fwd_emissions_arr) { P7_DOMAIN *dom = NULL; int Ld = j-i+1; float domcorrection = 0.0; float envsc, oasc; int z; int pos; float null2[p7_MAXCODE]; int status; int max_env_extra = 20; int orig_L; if (long_target) { //temporarily change model length to env_len. The nhmmer pipeline will tack //on the appropriate cost to account for the longer actual window orig_L = om->L; p7_oprofile_ReconfigRestLength(om, j-i+1); } if (long_target && scores_arr!=NULL) { // Modify bg and om in-place to avoid having to clone (allocate) a massive // number of times when there are many hits reparameterize_model (bg, om, sq, i, j-i+1, fwd_emissions_arr, bg_tmp->f, scores_arr); } p7_Forward (sq->dsq + i-1, Ld, om, ox1, &envsc); p7_Backward(sq->dsq + i-1, Ld, om, ox1, ox2, NULL); status = p7_Decoding(om, ox1, ox2, ox2); /* is now overwritten with post probabilities */ if (status == eslERANGE) return eslFAIL; /* rare: numeric overflow; domain is assumed to be repetitive garbage [J3/119-212] */ /* Find an optimal accuracy alignment */ p7_OptimalAccuracy(om, ox2, ox1, &oasc); /* is now overwritten with OA scores */ p7_OATrace (om, ox2, ox1, ddef->tr); /*

's seq coords are offset by i-1, rel to orig dsq */ /* hack the trace's sq coords to be correct w.r.t. original dsq */ for (z = 0; z < ddef->tr->N; z++) if (ddef->tr->i[z] > 0) ddef->tr->i[z] += i-1; /* get ptr to next empty domain structure in domaindef's results */ if (ddef->ndom == ddef->nalloc) { ESL_REALLOC(ddef->dcl, sizeof(P7_DOMAIN) * (ddef->nalloc*2)); ddef->nalloc *= 2; } dom = &(ddef->dcl[ddef->ndom]); dom->ad = p7_alidisplay_Create(ddef->tr, 0, om, sq); dom->scores_per_pos = NULL; /* For long target DNA, it's common to see a huge envelope (>1Kb longer than alignment), usually * involving simple repeat part of model that attracted similar segments of the repeatedly, to * acquire a large total score. Now that we have alignment boundaries, re-run Fwd/Bkwd to trim away * such a long envelope and estimate the true score of the hit region */ if (long_target) { if ( i < dom->ad->sqfrom-max_env_extra //trim the left side of the envelope || j > dom->ad->sqto+max_env_extra //trim the right side of the envelope ) { //trim in the envelope, and do it again i = ESL_MAX(i,dom->ad->sqfrom-max_env_extra); j = ESL_MIN(j,dom->ad->sqto+max_env_extra); Ld = j - i + 1; //temporarily change model length to env_len. The nhmmer pipeline will tack //on the appropriate cost to account for the longer actual window p7_oprofile_ReconfigRestLength(om, j-i+1); if (scores_arr!=NULL) { //revert bg and om back to original, then forward to new values reparameterize_model (bg, om, NULL, 0, 0, fwd_emissions_arr, bg_tmp->f, scores_arr); reparameterize_model (bg, om, sq, i, Ld, fwd_emissions_arr, bg_tmp->f, scores_arr); } p7_Forward (sq->dsq + i-1, Ld, om, ox1, &envsc); p7_Backward(sq->dsq + i-1, Ld, om, ox1, ox2, NULL); status = p7_Decoding(om, ox1, ox2, ox2); /* is now overwritten with post probabilities */ if (status == eslERANGE) return eslFAIL; /* rare: numeric overflow; domain is assumed to be repetitive garbage [J3/119-212] */ /* Find an optimal accuracy alignment */ p7_OptimalAccuracy(om, ox2, ox1, &oasc); /* is now overwritten with OA scores */ p7_trace_Reuse(ddef->tr); p7_OATrace (om, ox2, ox1, ddef->tr); /* 's seq coords are offset by i-1, rel to orig dsq */ /* re-hack the trace's sq coords to be correct w.r.t. original dsq */ for (z = 0; z < ddef->tr->N; z++) if (ddef->tr->i[z] > 0) ddef->tr->i[z] += i-1; /* store the results in it, first destroying the old alidisplay object */ p7_alidisplay_Destroy(dom->ad); dom->ad = p7_alidisplay_Create(ddef->tr, 0, om, sq); } /* Estimate bias correction, by computing what the score would've been without * reparameterization */ domcorrection = envsc; if (scores_arr!=NULL) { //revert bg and om back to original, //and while I'm at it, capture what the default parameterized score would have been, for "null2" reparameterize_model (bg, om, NULL, 0, 0, fwd_emissions_arr, bg_tmp->f, scores_arr); p7_Forward (sq->dsq + i-1, Ld, om, ox1, &domcorrection); } p7_oprofile_ReconfigRestLength(om, orig_L); if (domcorrection < envsc) //negative bias correction shouldn't happen. Stick with the original score. envsc = domcorrection; dom->domcorrection = domcorrection - envsc; } else { /* Compute bias correction (for non-longtarget case) * * Is null2 set already for this i..j? (It is, if we're in a domain that * was defined by stochastic traceback clustering in a multidomain region; * it isn't yet, if we're in a simple one-domain region). If it isn't, * do it now, by the expectation (posterior decoding) method. */ if (!null2_is_done) { p7_Null2_ByExpectation(om, ox2, null2); for (pos = i; pos <= j; pos++) ddef->n2sc[pos] = logf(null2[sq->dsq[pos]]); } for (pos = i; pos <= j; pos++) domcorrection += ddef->n2sc[pos]; /* domcorrection is in units of NATS */ dom->domcorrection = domcorrection; /* in units of NATS */ } dom->iali = dom->ad->sqfrom; dom->jali = dom->ad->sqto; dom->ienv = i; dom->jenv = j; dom->envsc = envsc; /* in units of NATS */ dom->oasc = oasc; /* in units of expected # of correctly aligned residues */ dom->dombias = 0.0; /* gets set later, using bg->omega and dombias */ dom->bitscore = 0.0; /* gets set later by caller, using envsc, null score, and dombias */ dom->lnP = 0.0; /* gets set later by caller, using bitscore */ dom->is_reported = FALSE; /* gets set later by caller */ dom->is_included = FALSE; /* gets set later by caller */ ddef->ndom++; p7_trace_Reuse(ddef->tr); return eslOK; ERROR: p7_trace_Reuse(ddef->tr); return status; } /***************************************************************** * Example driver. *****************************************************************/ #ifdef p7DOMAINDEF_EXAMPLE /* gcc -o domaindef_example -g -Wall -I../easel -L../easel -I. -L. -Dp7DOMAINDEF_EXAMPLE p7_domaindef.c -lhmmer -leasel -lm * ./domaindef_example */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_alphabet.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-V", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "find domains by Viterbi parsing", 0 }, { "--occp", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "output posterior occupancies for xmgrace to ", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of domain definition by posterior sampling"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(42); char *hmmfile = esl_opt_GetArg(go, 1); P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; char *seqfile = esl_opt_GetArg(go, 2); int format = eslSQFILE_UNKNOWN; ESL_SQFILE *sqfp = NULL; ESL_SQ *sq = NULL; ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *oxf = NULL; /* parsing matrix, passed to PosteriorHeuristics */ P7_OMX *oxb = NULL; P7_OMX *fwd = NULL; /* full LxL matrix workspace passed to PosteriorHeuristics */ P7_OMX *bck = NULL; P7_DOMAINDEF *ddef = NULL; char *ofile = NULL; FILE *ofp = NULL; float overall_sc, sc; int d; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); esl_sqfile_Close(sqfp); /* Configure a profile from the HMM */ p7_FLogsumInit(); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); om = p7_oprofile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, sq->n); /* allocate the domain definition object */ ddef = p7_domaindef_Create(r); /* allocate DP matrices for forward and backward */ fwd = p7_omx_Create(gm->M, sq->n, sq->n); bck = p7_omx_Create(gm->M, sq->n, sq->n); oxf = p7_omx_Create(om->M, 0, sq->n); oxb = p7_omx_Create(om->M, 0, sq->n); /* define domain structure */ p7_Forward (sq->dsq, sq->n, om, fwd, &overall_sc); p7_Backward(sq->dsq, sq->n, om, fwd, bck, &sc); p7_domaindef_ByPosteriorHeuristics(sq, om, oxf, oxb, fwd, bck, ddef, NULL, FALSE, NULL, NULL, NULL); printf("Overall raw likelihood score: %.2f nats\n", overall_sc); /* retrieve and display results */ for (d = 0; d < ddef->ndom; d++) { printf("domain %-4d : %4d %4d %6.2f %6.2f\n", d+1, ddef->dcl[d].ienv, ddef->dcl[d].jenv, ddef->dcl[d].envsc, ddef->dcl[d].domcorrection); p7_alidisplay_Print(stdout, ddef->dcl[d].ad, 50, 120, FALSE); } if ((ofile = esl_opt_GetString(go, "--occp")) != NULL) { if ((ofp = fopen(ofile, "w")) == NULL) p7_Fail("Failed to open output file %s\n", ofile); p7_domaindef_DumpPosteriors(ofp, ddef); fclose(ofp); } p7_domaindef_Destroy(ddef); p7_omx_Destroy(oxf); p7_omx_Destroy(oxb); p7_omx_Destroy(fwd); p7_omx_Destroy(bck); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_sq_Destroy(sq); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7DOMAINDEF_EXAMPLE*/ #ifdef p7DOMAINDEF_EXAMPLE2 /* gcc -o domaindef_example2 -g -Wall -I../easel -L../easel -I. -L. -Dp7DOMAINDEF_EXAMPLE2 p7_domaindef.c -lhmmer -leasel -lm * ./domaindef_example2 */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_alphabet.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-N", eslARG_INT, "1000", NULL, NULL, NULL, NULL, NULL, "number of sampled sequences", 0 }, { "-L", eslARG_INT, "400", NULL, NULL, NULL, NULL, NULL, "length config for the profile", 0 }, { "-V", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "find domains by Viterbi parsing", 0 }, { "-b", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "baseline timing - no domain processing", 0 }, { "-v", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "be more verbose (show per sequence results)", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of domain definition by posterior sampling"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(42); ESL_STOPWATCH *w = esl_stopwatch_Create(); char *hmmfile = esl_opt_GetArg(go, 1); P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; ESL_SQ *sq = NULL; ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_TRACE *tr = NULL; P7_GMX *fwd = NULL; P7_GMX *bck = NULL; P7_OMX *gxf = NULL; /* parsing matrix, passed to PosteriorHeuristics */ P7_OMX *gxb = NULL; P7_DOMAINDEF *ddef = NULL; int N = esl_opt_GetInteger(go, "-N"); int L0 = esl_opt_GetInteger(go, "-L"); int do_vit = esl_opt_GetBoolean(go, "-V"); int do_baseline = esl_opt_GetBoolean(go, "-b"); int be_verbose = esl_opt_GetBoolean(go, "-v"); float overall_sc, sc; int idx; int tot_true, tot_found; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L0); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L0, p7_LOCAL); /* Other initial allocations */ sq = esl_sq_CreateDigital(abc); ddef = p7_domaindef_Create(r); fwd = p7_gmx_Create(gm->M, L0); bck = p7_gmx_Create(gm->M, L0); gxf = p7_gmx_Create(gm->M, L0); gxb = p7_gmx_Create(gm->M, L0); tr = p7_trace_Create(); p7_FLogsumInit(); tot_true = tot_found = 0; esl_stopwatch_Start(w); for (idx = 0; idx < N; idx++) { p7_ReconfigLength(gm, L0); p7_bg_SetLength(bg, L0); p7_ProfileEmit(r, hmm, gm, bg, sq, tr); /* sample a sequence from the profile */ p7_trace_Index(tr); /* tr->ndom is the "true" domain number emitted */ tot_true += tr->ndom; p7_ReconfigLength(gm, sq->n); p7_bg_SetLength(bg, sq->n); p7_gmx_GrowTo(fwd, gm->M, sq->n); p7_gmx_GrowTo(bck, gm->M, sq->n); if (do_vit) { p7_GViterbi (sq->dsq, sq->n, gm, fwd, &overall_sc); if (! do_baseline) p7_domaindef_ByViterbi(gm, sq, fwd, bck, ddef); } else { p7_GForward (sq->dsq, sq->n, gm, fwd, &overall_sc); if (! do_baseline) { p7_GBackward(sq->dsq, sq->n, gm, bck, &sc); p7_domaindef_ByPosteriorHeuristics(sq, gm, fwd, bck, gxf, gxb, ddef, NULL, FALSE, NULL, NULL, NULL); //Is this even being compiled by any tests? Looks like there's a fair amount of bit rot here } } tot_found += ddef->ndom; if (be_verbose) printf("true: %d found: %d\n", tr->ndom, ddef->ndom); p7_trace_Reuse(tr); p7_domaindef_Reuse(ddef); } esl_stopwatch_Stop(w); printf("Total domains: %d\n", tot_true); printf("Total found: %d\n", tot_found); printf("Accuracy: %.2f%%\n", 100. * (double) tot_found / (double) tot_true); esl_stopwatch_Display(stdout, w, "CPU time: "); p7_domaindef_Destroy(ddef); p7_gmx_Destroy(fwd); p7_gmx_Destroy(bck); p7_profile_Destroy(gm); p7_trace_Destroy(tr); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_sq_Destroy(sq); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7DOMAINDEF_EXAMPLE2*/ hmmer-3.1b2/src/errors.c0000664361611702660230000000267412473612612014547 0ustar wheelerteddy/* error handling. * * HMMER's fatal error messages distinguish between user errors * ("failure", with p7_Fail()) and internal faults ("death", with * p7_Die()). For now, though, there is no difference between the two * functions. Someday we might have p7_Die() print a comforting * apology, or provide some help on how to report bugs to us; * p7_Fail() might provide some pointers on where to read more * documentation. * * SRE, Fri Jan 12 08:46:02 2007 * SVN $Id: errors.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include #include #include "hmmer.h" /* Function: p7_Die() * Synopsis: Handle a fatal exception (something that's our fault) * Incept: SRE, Fri Jan 12 08:54:45 2007 [Janelia] */ void p7_Die(char *format, ...) { va_list argp; /* format the error mesg */ fprintf(stderr, "\nFATAL: "); va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); fprintf(stderr, "\n"); fflush(stderr); exit(1); } /* Function: p7_Fail() * Synopsis: Handle a user error (something that's the user's fault). * Incept: SRE, Fri Jan 12 08:54:45 2007 [Janelia] */ void p7_Fail(char *format, ...) { va_list argp; /* format the error mesg */ fprintf(stderr, "\nError: "); va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); fprintf(stderr, "\n"); fflush(stderr); exit(1); } hmmer-3.1b2/src/eweight.c0000664361611702660230000000623212473612612014661 0ustar wheelerteddy/* "Entropy weighting" to determine absolute sequence number to use in hmmbuild. * * Reference: * L. Steven Johnson, "Remote Protein Homology Detection Using Hidden Markov Models", * Ph.D. thesis, Washington University School of Medicine, 2006. * * SRE, Fri May 4 14:01:54 2007 [Janelia] [Tom Waits, Orphans] * SVN $Id: eweight.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include "easel.h" #include "esl_rootfinder.h" #include "hmmer.h" struct ew_param_s { const P7_HMM *hmm; /* ptr to the original count-based HMM, which remains unchanged */ const P7_BG *bg; /* ptr to the null model */ const P7_PRIOR *pri; /* Dirichlet prior used to parameterize from counts */ P7_HMM *h2; /* our working space: a copy of that we can muck with */ double etarget; /* information content target, in bits */ }; /* Evaluate fx = rel entropy - etarget, which we want to be = 0, * for effective sequence number . */ static int eweight_target_f(double Neff, void *params, double *ret_fx) { struct ew_param_s *p = (struct ew_param_s *) params; p7_hmm_CopyParameters(p->hmm, p->h2); p7_hmm_Scale(p->h2, Neff / (double) p->h2->nseq); p7_ParameterEstimation(p->h2, p->pri); *ret_fx = p7_MeanMatchRelativeEntropy(p->h2, p->bg) - p->etarget; return eslOK; } /* Function: p7_EntropyWeight() * Incept: SRE, Fri May 4 15:32:59 2007 [Janelia] * * Purpose: Use the "entropy weighting" algorithm to determine * what effective sequence number we should use, and * return it in . * * Caller provides a count-based , and the * Dirichlet prior that's to be used to parameterize * models; neither of these will be modified. * Caller also provides the relative entropy * target in bits in . * * will range from 0 to the true number of * sequences counted into the model, nseq>. * * Returns: on success. * * Throws: on allocation failure. */ int p7_EntropyWeight(const P7_HMM *hmm, const P7_BG *bg, const P7_PRIOR *pri, double etarget, double *ret_Neff) { int status; ESL_ROOTFINDER *R = NULL; struct ew_param_s p; double Neff; double fx; /* Store parameters in the structure we'll pass to the rootfinder */ p.hmm = hmm; p.bg = bg; p.pri = pri; if ((p.h2 = p7_hmm_Clone(hmm)) == NULL) return eslEMEM; p.etarget = etarget; Neff = (double) hmm->nseq; if ((status = eweight_target_f(Neff, &p, &fx)) != eslOK) goto ERROR; if (fx > 0.) { if ((R = esl_rootfinder_Create(eweight_target_f, &p)) == NULL) {status = eslEMEM; goto ERROR;} esl_rootfinder_SetAbsoluteTolerance(R, 0.01); /* getting Neff to ~2 sig digits is fine */ if ((status = esl_root_Bisection(R, 0., (double) hmm->nseq, &Neff)) != eslOK) goto ERROR; esl_rootfinder_Destroy(R); } p7_hmm_Destroy(p.h2); *ret_Neff = Neff; return eslOK; ERROR: if (p.h2 != NULL) p7_hmm_Destroy(p.h2); if (R != NULL) esl_rootfinder_Destroy(R); *ret_Neff = (double) hmm->nseq; return status; } hmmer-3.1b2/src/hmmbuild.c0000664361611702660230000017643112473612613015040 0ustar wheelerteddy/* Profile HMM construction from a multiple sequence alignment */ #include "p7_config.h" #include #include #include #ifdef HAVE_MPI #include "mpi.h" #endif #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_mpi.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msaweight.h" #include "esl_msacluster.h" #include "esl_stopwatch.h" #include "esl_vectorops.h" #ifdef HMMER_THREADS #include #include "esl_threads.h" #include "esl_workqueue.h" #endif /*HMMER_THREADS*/ #include "hmmer.h" typedef struct { #ifdef HMMER_THREADS ESL_WORK_QUEUE *queue; #endif /*HMMER_THREADS*/ P7_BG *bg; P7_BUILDER *bld; } WORKER_INFO; #ifdef HMMER_THREADS typedef struct { int nali; int processed; ESL_MSA *postmsa; ESL_MSA *msa; P7_HMM *hmm; double entropy; int force_single; /* FALSE by default, TRUE if esl_opt_IsUsed(go, "--singlemx") ; only matters for single sequences */ } WORK_ITEM; typedef struct _pending_s { int nali; ESL_MSA *postmsa; ESL_MSA *msa; P7_HMM *hmm; double entropy; struct _pending_s *next; } PENDING_ITEM; #endif /*HMMER_THREADS*/ #define ALPHOPTS "--amino,--dna,--rna" /* Exclusive options for alphabet choice */ #define CONOPTS "--fast,--hand" /* Exclusive options for model construction */ #define EFFOPTS "--eent,--eclust,--eset,--enone" /* Exclusive options for effective sequence number calculation */ #define WGTOPTS "--wgsc,--wblosum,--wpb,--wnone,--wgiven" /* Exclusive options for relative weighting */ static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, { "-n", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "name the HMM ", 1 }, { "-o", eslARG_OUTFILE,FALSE, NULL, NULL, NULL, NULL, NULL, "direct summary output to file , not stdout", 1 }, { "-O", eslARG_OUTFILE,FALSE, NULL, NULL, NULL, NULL, NULL, "resave annotated, possibly modified MSA to file ", 1 }, /* Selecting the alphabet rather than autoguessing it */ { "--amino", eslARG_NONE, FALSE, NULL, NULL, ALPHOPTS, NULL, NULL, "input alignment is protein sequence data", 2 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, ALPHOPTS, NULL, NULL, "input alignment is DNA sequence data", 2 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, ALPHOPTS, NULL, NULL, "input alignment is RNA sequence data", 2 }, /* Alternate model construction strategies */ { "--fast", eslARG_NONE,"default",NULL, NULL, CONOPTS, NULL, NULL, "assign cols w/ >= symfrac residues as consensus", 3 }, { "--hand", eslARG_NONE, FALSE, NULL, NULL, CONOPTS, NULL, NULL, "manual construction (requires reference annotation)", 3 }, { "--symfrac", eslARG_REAL, "0.5", NULL, "0<=x<=1", NULL, "--fast", NULL, "sets sym fraction controlling --fast construction", 3 }, { "--fragthresh",eslARG_REAL, "0.5", NULL, "0<=x<=1", NULL, NULL, NULL, "if L <= x*alen, tag sequence as a fragment", 3 }, /* Alternate relative sequence weighting strategies */ /* --wme not implemented in HMMER3 yet */ { "--wpb", eslARG_NONE,"default",NULL, NULL, WGTOPTS, NULL, NULL, "Henikoff position-based weights", 4 }, { "--wgsc", eslARG_NONE, NULL, NULL, NULL, WGTOPTS, NULL, NULL, "Gerstein/Sonnhammer/Chothia tree weights", 4 }, { "--wblosum", eslARG_NONE, NULL, NULL, NULL, WGTOPTS, NULL, NULL, "Henikoff simple filter weights", 4 }, { "--wnone", eslARG_NONE, NULL, NULL, NULL, WGTOPTS, NULL, NULL, "don't do any relative weighting; set all to 1", 4 }, { "--wgiven", eslARG_NONE, NULL, NULL, NULL, WGTOPTS, NULL, NULL, "use weights as given in MSA file", 4 }, { "--wid", eslARG_REAL, "0.62", NULL,"0<=x<=1", NULL,"--wblosum", NULL, "for --wblosum: set identity cutoff", 4 }, /* Alternative effective sequence weighting strategies */ { "--eent", eslARG_NONE,"default",NULL, NULL, EFFOPTS, NULL, NULL, "adjust eff seq # to achieve relative entropy target", 5 }, { "--eclust", eslARG_NONE, FALSE, NULL, NULL, EFFOPTS, NULL, NULL, "eff seq # is # of single linkage clusters", 5 }, { "--enone", eslARG_NONE, FALSE, NULL, NULL, EFFOPTS, NULL, NULL, "no effective seq # weighting: just use nseq", 5 }, { "--eset", eslARG_REAL, NULL, NULL, NULL, EFFOPTS, NULL, NULL, "set eff seq # for all models to ", 5 }, { "--ere", eslARG_REAL, NULL, NULL,"x>0", NULL, "--eent", NULL, "for --eent: set minimum rel entropy/position to ", 5 }, { "--esigma", eslARG_REAL, "45.0", NULL,"x>0", NULL, "--eent", NULL, "for --eent: set sigma param to ", 5 }, { "--eid", eslARG_REAL, "0.62", NULL,"0<=x<=1", NULL,"--eclust", NULL, "for --eclust: set fractional identity cutoff to ", 5 }, /* Alternative prior strategies */ { "--pnone", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL,"--plaplace", "don't use any prior; parameters are frequencies", 9 }, { "--plaplace",eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--pnone", "use a Laplace +1 prior", 9 }, { "--popen", eslARG_REAL, NULL, NULL,"0<=x<0.5",NULL, NULL, "", "force gap open prob. (w/ --singlemx, aa default 0.02, nt 0.031)", 9 }, { "--pextend", eslARG_REAL, NULL, NULL, "0<=x<1", NULL, NULL, "", "force gap extend prob. (w/ --singlemx, aa default 0.4, nt 0.75)", 9 }, /* Single sequence methods */ { "--singlemx", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "", "use substitution score matrix for single-sequence inputs", 10 }, // { "--popen", eslARG_REAL, "0.02", NULL,"0<=x<0.5",NULL, NULL, "", "gap open probability (with --singlemx)", 10 }, // { "--pextend", eslARG_REAL, "0.4", NULL, "0<=x<1", NULL, NULL, "", "gap extend probability (with --singlemx)", 10 }, { "--mx", eslARG_STRING, "BLOSUM62", NULL, NULL, NULL, NULL, "--mxfile", "substitution score matrix (built-in matrices, with --singlemx)", 10 }, { "--mxfile", eslARG_INFILE, NULL, NULL, NULL, NULL, NULL, "--mx", "read substitution score matrix from file (with --singlemx)", 10 }, /* Control of E-value calibration */ { "--EmL", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "length of sequences for MSV Gumbel mu fit", 6 }, { "--EmN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for MSV Gumbel mu fit", 6 }, { "--EvL", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "length of sequences for Viterbi Gumbel mu fit", 6 }, { "--EvN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for Viterbi Gumbel mu fit", 6 }, { "--EfL", eslARG_INT, "100", NULL,"n>0", NULL, NULL, NULL, "length of sequences for Forward exp tail tau fit", 6 }, { "--EfN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for Forward exp tail tau fit", 6 }, { "--Eft", eslARG_REAL, "0.04", NULL,"0=0",NULL, NULL, NULL, "number of parallel CPU workers for multithreads", 8 }, #endif #ifdef HAVE_MPI { "--mpi", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "run as an MPI parallel program", 8 }, #endif { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "arrest after start: for attaching debugger to process", 8 }, { "--informat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "assert input alifile is in format (no autodetect)", 8 }, { "--seed", eslARG_INT, "42", NULL, "n>=0", NULL, NULL, NULL, "set RNG seed to (if 0: one-time arbitrary seed)", 8 }, { "--w_beta", eslARG_REAL, NULL, NULL, NULL, NULL, NULL, NULL, "tail mass at which window length is determined", 8 }, { "--w_length", eslARG_INT, NULL, NULL, NULL, NULL, NULL, NULL, "window length ", 8 }, { "--maxinsertlen", eslARG_INT, NULL, NULL, "n>=5", NULL, NULL, NULL, "pretend all inserts are length <= ", 8 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; /* struct cfg_s : "Global" application configuration shared by all threads/processes * * This structure is passed to routines within main.c, as a means of semi-encapsulation * of shared data amongst different parallel processes (threads or MPI processes). */ struct cfg_s { FILE *ofp; /* output file (default is stdout) */ char *alifile; /* name of the alignment file we're building HMMs from */ int fmt; /* format code for alifile */ ESLX_MSAFILE *afp; /* open alifile */ ESL_ALPHABET *abc; /* digital alphabet */ char *hmmName; /* hmm file name supplied from -n */ char *hmmfile; /* file to write HMM to */ FILE *hmmfp; /* HMM output file handle */ char *postmsafile; /* optional file to resave annotated, modified MSAs to */ FILE *postmsafp; /* open , or NULL */ int nali; /* which # alignment this is in file (only valid in serial mode) */ int nnamed; /* number of alignments that had their own names */ int do_mpi; /* TRUE if we're doing MPI parallelization */ int nproc; /* how many MPI processes, total */ int my_rank; /* who am I, in 0..nproc-1 */ int do_stall; /* TRUE to stall the program until gdb attaches */ }; static char usage[] = "[-options] "; static char banner[] = "profile HMM construction from multiple sequence alignments"; static int usual_master(const ESL_GETOPTS *go, struct cfg_s *cfg); static void serial_loop (WORKER_INFO *info, struct cfg_s *cfg, const ESL_GETOPTS *go); #ifdef HMMER_THREADS static void thread_loop(ESL_THREADS *obj, ESL_WORK_QUEUE *queue, struct cfg_s *cfg, const ESL_GETOPTS *go); static void pipeline_thread(void *arg); #endif /*HMMER_THREADS*/ #ifdef HAVE_MPI static void mpi_master (const ESL_GETOPTS *go, struct cfg_s *cfg); static void mpi_worker (const ESL_GETOPTS *go, struct cfg_s *cfg); static void mpi_init_open_failure(ESLX_MSAFILE *afp, int status); static void mpi_init_other_failure(char *format, ...); #endif static int output_header(const ESL_GETOPTS *go, const struct cfg_s *cfg); static int output_result(const struct cfg_s *cfg, char *errbuf, int msaidx, ESL_MSA *msa, P7_HMM *hmm, ESL_MSA *postmsa, double entropy); static int set_msa_name ( struct cfg_s *cfg, char *errbuf, ESL_MSA *msa); static int process_commandline(int argc, char **argv, ESL_GETOPTS **ret_go, char **ret_hmmfile, char **ret_alifile) { ESL_GETOPTS *go = esl_getopts_Create(options); int status; if (esl_opt_ProcessEnvironment(go) != eslOK) { if (printf("Failed to process environment:\n%s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) { if (printf("Failed to parse command line:\n%s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_VerifyConfig(go) != eslOK) { if (printf("Failed to parse command line:\n%s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* help format: */ if (esl_opt_GetBoolean(go, "-h") == TRUE) { p7_banner(stdout, argv[0], banner); esl_usage(stdout, argv[0], usage); if (puts("\nBasic options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); if (puts("\nOptions for selecting alphabet rather than guessing it:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); if (puts("\nAlternative model construction strategies:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); if (puts("\nAlternative relative sequence weighting strategies:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); if (puts("\nAlternative effective sequence weighting strategies:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 5, 2, 80); if (puts("\nAlternative prior strategies:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 9, 2, 80); if (puts("\nHandling single sequence inputs:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 10, 2, 80); if (puts("\nControl of E-value calibration:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 6, 2, 80); if (puts("\nOther options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 8, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != 2) { if (puts("Incorrect number of command line arguments.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_hmmfile = esl_opt_GetArg(go, 1)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_alifile = esl_opt_GetArg(go, 2)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (strcmp(*ret_hmmfile, "-") == 0) { if (puts("Can't write to stdout: don't use '-'") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (strcmp(*ret_alifile, "-") == 0 && ! esl_opt_IsOn(go, "--informat")) { if (puts("Must specify --informat to read from stdin ('-')") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } #ifdef HAVE_MPI if (esl_opt_IsOn(go, "--mpi") && esl_opt_IsOn(go, "--cpu")) { int mpisetby = esl_opt_GetSetter(go, "--mpi"); int cpusetby = esl_opt_GetSetter(go, "--cpu"); if (mpisetby == cpusetby) { if (puts("Options --cpu and --mpi are incompatible. The MPI implementation is not multithreaded.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } } #endif *ret_go = go; return eslOK; FAILURE: /* all errors handled here are user errors, so be polite. */ esl_usage(stdout, argv[0], usage); puts("\nwhere basic options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); printf("\nTo see more help on other available options, do:\n %s -h\n\n", argv[0]); esl_getopts_Destroy(go); exit(1); ERROR: if (go) esl_getopts_Destroy(go); exit(status); } static int output_header(const ESL_GETOPTS *go, const struct cfg_s *cfg) { if (cfg->my_rank > 0) return eslOK; p7_banner(cfg->ofp, go->argv[0], banner); if (fprintf(cfg->ofp, "# input alignment file: %s\n", cfg->alifile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(cfg->ofp, "# output HMM file: %s\n", cfg->hmmfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-n") && fprintf(cfg->ofp, "# name (the single) HMM: %s\n", esl_opt_GetString(go, "-n")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-o") && fprintf(cfg->ofp, "# output directed to file: %s\n", esl_opt_GetString(go, "-o")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-O") && fprintf(cfg->ofp, "# processed alignment resaved to: %s\n", esl_opt_GetString(go, "-O")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--amino") && fprintf(cfg->ofp, "# input alignment is asserted as: protein\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--dna") && fprintf(cfg->ofp, "# input alignment is asserted as: DNA\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--rna") && fprintf(cfg->ofp, "# input alignment is asserted as: RNA\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--fast") && fprintf(cfg->ofp, "# model architecture construction: fast/heuristic\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--hand") && fprintf(cfg->ofp, "# model architecture construction: hand-specified by RF annotation\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--symfrac") && fprintf(cfg->ofp, "# sym fraction for model structure: %.3f\n", esl_opt_GetReal(go, "--symfrac")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--fragthresh") && fprintf(cfg->ofp, "# seq called frag if L <= x*alen: %.3f\n", esl_opt_GetReal(go, "--fragthresh")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wpb") && fprintf(cfg->ofp, "# relative weighting scheme: Henikoff PB\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wgsc") && fprintf(cfg->ofp, "# relative weighting scheme: G/S/C\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wblosum") && fprintf(cfg->ofp, "# relative weighting scheme: BLOSUM filter\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wnone") && fprintf(cfg->ofp, "# relative weighting scheme: none\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wid") && fprintf(cfg->ofp, "# frac id cutoff for BLOSUM wgts: %f\n", esl_opt_GetReal(go, "--wid")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--eent") && fprintf(cfg->ofp, "# effective seq number scheme: entropy weighting\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--eclust") && fprintf(cfg->ofp, "# effective seq number scheme: single linkage clusters\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--enone") && fprintf(cfg->ofp, "# effective seq number scheme: none\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--eset") && fprintf(cfg->ofp, "# effective seq number: set to %f\n", esl_opt_GetReal(go, "--eset")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--ere") && fprintf(cfg->ofp, "# minimum rel entropy target: %f bits\n", esl_opt_GetReal(go, "--ere")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--esigma") && fprintf(cfg->ofp, "# entropy target sigma parameter: %f bits\n", esl_opt_GetReal(go, "--esigma")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--eid") && fprintf(cfg->ofp, "# frac id cutoff for --eclust: %f\n", esl_opt_GetReal(go, "--eid")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--pnone") && fprintf(cfg->ofp, "# prior scheme: none\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--plaplace") && fprintf(cfg->ofp, "# prior scheme: Laplace +1\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EmL") && fprintf(cfg->ofp, "# seq length for MSV Gumbel mu fit: %d\n", esl_opt_GetInteger(go, "--EmL")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EmN") && fprintf(cfg->ofp, "# seq number for MSV Gumbel mu fit: %d\n", esl_opt_GetInteger(go, "--EmN")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EvL") && fprintf(cfg->ofp, "# seq length for Vit Gumbel mu fit: %d\n", esl_opt_GetInteger(go, "--EvL")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EvN") && fprintf(cfg->ofp, "# seq number for Vit Gumbel mu fit: %d\n", esl_opt_GetInteger(go, "--EvN")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EfL") && fprintf(cfg->ofp, "# seq length for Fwd exp tau fit: %d\n", esl_opt_GetInteger(go, "--EfL")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--EfN") && fprintf(cfg->ofp, "# seq number for Fwd exp tau fit: %d\n", esl_opt_GetInteger(go, "--EfN")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--Eft") && fprintf(cfg->ofp, "# tail mass for Fwd exp tau fit: %f\n", esl_opt_GetReal(go, "--Eft")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--singlemx") && fprintf(cfg->ofp, "# use score matrix for 1-seq MSAs: on\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--popen") && fprintf(cfg->ofp, "# gap open probability: %f\n", esl_opt_GetReal (go, "--popen")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--pextend") && fprintf(cfg->ofp, "# gap extend probability: %f\n", esl_opt_GetReal (go, "--pextend")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--mx") && fprintf(cfg->ofp, "# subst score matrix (built-in): %s\n", esl_opt_GetString (go, "--mx")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--mxfile") && fprintf(cfg->ofp, "# subst score matrix (file): %s\n", esl_opt_GetString (go, "--mxfile")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--maxinsertlen") && fprintf(cfg->ofp, "# max insert length: %d\n", esl_opt_GetInteger (go, "--maxinsertlen")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #ifdef HMMER_THREADS if (esl_opt_IsUsed(go, "--cpu") && fprintf(cfg->ofp, "# number of worker threads: %d\n", esl_opt_GetInteger(go, "--cpu")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #endif #ifdef HAVE_MPI if (esl_opt_IsUsed(go, "--mpi") && fprintf(cfg->ofp, "# parallelization mode: MPI\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #endif if (esl_opt_IsUsed(go, "--seed")) { if (esl_opt_GetInteger(go, "--seed") == 0 && fprintf(cfg->ofp,"# random number seed: one-time arbitrary\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); else if ( fprintf(cfg->ofp,"# random number seed set to: %d\n", esl_opt_GetInteger(go, "--seed")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (esl_opt_IsUsed(go, "--w_beta") && fprintf(cfg->ofp, "# window length tail mass: %g bits\n", esl_opt_GetReal(go, "--w_beta")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--w_length") && fprintf(cfg->ofp, "# window length : %d\n", esl_opt_GetInteger(go, "--w_length"))< 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(cfg->ofp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); return eslOK; } void apply_fixed_gap_params(P7_HMM *hmm, double popen, double pextend){ int k; for (k = 0; k <= hmm->M; k++) { if (popen != -1) { hmm->t[k][p7H_MM] = 1.0 - 2 * popen; hmm->t[k][p7H_MI] = popen; hmm->t[k][p7H_MD] = popen; } if (pextend != -1) { hmm->t[k][p7H_IM] = 1.0 - pextend; hmm->t[k][p7H_II] = pextend; hmm->t[k][p7H_DM] = 1.0 - pextend; hmm->t[k][p7H_DD] = pextend; } } /* Deal w/ special stuff at node M, overwriting a little of what we * just did. */ if (popen != -1) { hmm->t[hmm->M][p7H_MM] = 1.0 - popen; } hmm->t[hmm->M][p7H_MD] = 0.; hmm->t[hmm->M][p7H_DM] = 1.0; hmm->t[hmm->M][p7H_DD] = 0.; } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* command line processing */ ESL_STOPWATCH *w = esl_stopwatch_Create(); struct cfg_s cfg; /* Set processor specific flags */ impl_Init(); cfg.alifile = NULL; cfg.hmmfile = NULL; /* Parse the command line */ process_commandline(argc, argv, &go, &cfg.hmmfile, &cfg.alifile); /* Initialize what we can in the config structure (without knowing the alphabet yet). * Fields controlled by masters are set up in usual_master() or mpi_master() * Fields used by workers are set up in mpi_worker() */ cfg.ofp = NULL; cfg.fmt = eslMSAFILE_UNKNOWN; /* autodetect alignment format by default. */ cfg.afp = NULL; cfg.abc = NULL; cfg.hmmfp = NULL; cfg.postmsafile = esl_opt_GetString(go, "-O"); /* NULL by default */ cfg.postmsafp = NULL; cfg.nali = 0; /* this counter is incremented in masters */ cfg.nnamed = 0; /* 0 or 1 if a single MSA; == nali if multiple MSAs */ cfg.do_mpi = FALSE; /* this gets reset below, if we init MPI */ cfg.nproc = 0; /* this gets reset below, if we init MPI */ cfg.my_rank = 0; /* this gets reset below, if we init MPI */ cfg.do_stall = esl_opt_GetBoolean(go, "--stall"); cfg.hmmName = esl_opt_GetString(go, "-n"); /* NULL by default */ if (esl_opt_IsOn(go, "--informat")) { cfg.fmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--informat")); if (cfg.fmt == eslMSAFILE_UNKNOWN) p7_Fail("%s is not a recognized input sequence file format\n", esl_opt_GetString(go, "--informat")); } /* This is our stall point, if we need to wait until we get a * debugger attached to this process for debugging (especially * useful for MPI): */ while (cfg.do_stall); /* Start timing. */ esl_stopwatch_Start(w); /* Figure out who we are, and send control there: * we might be an MPI master, an MPI worker, or a serial program. */ #ifdef HAVE_MPI if (esl_opt_GetBoolean(go, "--mpi")) { cfg.do_mpi = TRUE; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &(cfg.my_rank)); MPI_Comm_size(MPI_COMM_WORLD, &(cfg.nproc)); if (cfg.my_rank > 0) mpi_worker(go, &cfg); else mpi_master(go, &cfg); esl_stopwatch_Stop(w); esl_stopwatch_MPIReduce(w, 0, MPI_COMM_WORLD); MPI_Finalize(); } else #endif /*HAVE_MPI*/ { usual_master(go, &cfg); esl_stopwatch_Stop(w); } if (cfg.my_rank == 0) { fputc('\n', cfg.ofp); esl_stopwatch_Display(cfg.ofp, w, "# CPU time: "); } /* Clean up the shared cfg. */ if (cfg.my_rank == 0) { if (esl_opt_IsOn(go, "-o")) { fclose(cfg.ofp); } if (cfg.afp) eslx_msafile_Close(cfg.afp); if (cfg.abc) esl_alphabet_Destroy(cfg.abc); if (cfg.hmmfp) fclose(cfg.hmmfp); } esl_getopts_Destroy(go); esl_stopwatch_Destroy(w); return 0; } /* usual_master() * The usual version of hmmbuild, serial or threaded * For each MSA, build an HMM and save it. * * A master can only return if it's successful. * All errors are handled immediately and fatally with p7_Fail() or equiv. */ static int usual_master(const ESL_GETOPTS *go, struct cfg_s *cfg) { int ncpus = 0; int infocnt = 0; WORKER_INFO *info = NULL; #ifdef HMMER_THREADS WORK_ITEM *item = NULL; ESL_THREADS *threadObj= NULL; ESL_WORK_QUEUE *queue = NULL; #endif int i; int status; /* Open files, set alphabet. * cfg->afp - open alignment file for input * cfg->abc - alphabet expected or guessed in ali file * cfg->hmmfp - open HMM file for output * cfg->postmsafp - optional open MSA resave file, or NULL * cfp->ofp - optional open output file, or stdout * The mpi_master's version of this is in init_master_cfg(), with * different error handling (necessitated by our MPI design). */ if (esl_opt_GetBoolean(go, "--amino")) cfg->abc = esl_alphabet_Create(eslAMINO); else if (esl_opt_GetBoolean(go, "--dna")) cfg->abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--rna")) cfg->abc = esl_alphabet_Create(eslRNA); else cfg->abc = NULL; status = eslx_msafile_Open(&(cfg->abc), cfg->alifile, NULL, cfg->fmt, NULL, &(cfg->afp)); if (status != eslOK) eslx_msafile_OpenFailure(cfg->afp, status); cfg->hmmfp = fopen(cfg->hmmfile, "w"); if (cfg->hmmfp == NULL) p7_Fail("Failed to open HMM file %s for writing", cfg->hmmfile); if (esl_opt_IsUsed(go, "-o")) { cfg->ofp = fopen(esl_opt_GetString(go, "-o"), "w"); if (cfg->ofp == NULL) p7_Fail("Failed to open -o output file %s\n", esl_opt_GetString(go, "-o")); } else cfg->ofp = stdout; if (cfg->postmsafile) { cfg->postmsafp = fopen(cfg->postmsafile, "w"); if (cfg->postmsafp == NULL) p7_Fail("Failed to MSA resave file %s for writing", cfg->postmsafile); } else cfg->postmsafp = NULL; /* Looks like the i/o is set up successfully... * Initial output to the user */ output_header(go, cfg); /* cheery output header */ output_result(cfg, NULL, 0, NULL, NULL, NULL, 0.0); /* tabular results header (with no args, special-case) */ #ifdef HMMER_THREADS /* initialize thread data */ if (esl_opt_IsOn(go, "--cpu")) ncpus = esl_opt_GetInteger(go, "--cpu"); else esl_threads_CPUCount(&ncpus); if (ncpus > 0) { threadObj = esl_threads_Create(&pipeline_thread); queue = esl_workqueue_Create(ncpus * 2); } #endif infocnt = (ncpus == 0) ? 1 : ncpus; ESL_ALLOC(info, sizeof(*info) * infocnt); for (i = 0; i < infocnt; ++i) { info[i].bg = p7_bg_Create(cfg->abc); info[i].bld = p7_builder_Create(go, cfg->abc); if (info[i].bld == NULL) p7_Fail("p7_builder_Create failed"); //do this here instead of in p7_builder_Create(), because it's an hmmbuild-specific option if ( esl_opt_IsOn(go, "--maxinsertlen") ) info[i].bld->max_insert_len = esl_opt_GetInteger(go, "--maxinsertlen"); double popen ; double pextend ; if ( cfg->abc->type == eslDNA || cfg->abc->type == eslRNA ) { //If user hasn't overridden defaults, assign the nucleotide defaults popen = esl_opt_IsUsed(go, "--popen") ? esl_opt_GetReal(go, "--popen") : 0.03125; pextend = esl_opt_IsUsed(go, "--pextend") ? esl_opt_GetReal(go, "--pextend") : 0.75; } else { //protein defaults popen = esl_opt_IsUsed(go, "--popen") ? esl_opt_GetReal(go, "--popen") : 0.02; pextend = esl_opt_IsUsed(go, "--pextend") ? esl_opt_GetReal(go, "--pextend") : 0.4; } /* Default matrix is stored in the --mx option, so it's always IsOn(). * Check --mxfile first; then go to the --mx option and the default. */ if ( esl_opt_IsUsed(go, "--singlemx") ) { char *mx = esl_opt_GetString(go, "--mx"); if ( cfg->abc->type == eslDNA || cfg->abc->type == eslRNA ) { //If user hasn't overridden defaults, assign the nucleotide defaults if ( !esl_opt_IsUsed(go, "--mx") ) mx = "DNA1"; } if (esl_opt_IsOn(go, "--mxfile")) status = p7_builder_SetScoreSystem (info[i].bld, esl_opt_GetString(go, "--mxfile"), NULL, popen, pextend, info[i].bg); else status = p7_builder_LoadScoreSystem(info[i].bld, mx, popen, pextend, info[i].bg); if (status != eslOK) p7_Fail("Failed to set single query seq score system:\n%s\n", info[i].bld->errbuf); } else { if (esl_opt_IsUsed(go, "--popen") ) info[i].bld->popen = popen; if (esl_opt_IsUsed(go, "--pextend")) info[i].bld->pextend = pextend; } /* special arguments for hmmbuild */ info[i].bld->w_len = (go != NULL && esl_opt_IsOn (go, "--w_length")) ? esl_opt_GetInteger(go, "--w_length"): -1; info[i].bld->w_beta = (go != NULL && esl_opt_IsOn (go, "--w_beta")) ? esl_opt_GetReal (go, "--w_beta") : p7_DEFAULT_WINDOW_BETA; if ( info[i].bld->w_beta < 0 || info[i].bld->w_beta > 1 ) esl_fatal("Invalid window-length beta value\n"); #ifdef HMMER_THREADS info[i].queue = queue; if (ncpus > 0) esl_threads_AddThread(threadObj, &info[i]); #endif } #ifdef HMMER_THREADS for (i = 0; i < ncpus * 2; ++i) { ESL_ALLOC(item, sizeof(*item)); item->nali = 0; item->processed = FALSE; item->postmsa = NULL; item->msa = NULL; item->hmm = NULL; item->entropy = 0.0; status = esl_workqueue_Init(queue, item); if (status != eslOK) esl_fatal("Failed to add block to work queue"); } #endif #ifdef HMMER_THREADS if (ncpus > 0) thread_loop(threadObj, queue, cfg, go); else serial_loop(info, cfg, go); #else serial_loop(info, cfg, go); #endif for (i = 0; i < infocnt; ++i) { p7_bg_Destroy(info[i].bg); p7_builder_Destroy(info[i].bld); } #ifdef HMMER_THREADS if (ncpus > 0) { esl_workqueue_Reset(queue); while (esl_workqueue_Remove(queue, (void **) &item) == eslOK) { free(item); } esl_workqueue_Destroy(queue); esl_threads_Destroy(threadObj); } #endif free(info); return eslOK; ERROR: return eslFAIL; } #ifdef HAVE_MPI /* mpi_master() * The MPI version of hmmbuild. * Follows standard pattern for a master/worker load-balanced MPI program (J1/78-79). * * A master can only return if it's successful. * Errors in an MPI master come in two classes: recoverable and nonrecoverable. * * Recoverable errors include all worker-side errors, and any * master-side error that do not affect MPI communication. Error * messages from recoverable messages are delayed until we've cleanly * shut down the workers. * * Unrecoverable errors are master-side errors that may affect MPI * communication, meaning we cannot count on being able to reach the * workers and shut them down. Unrecoverable errors result in immediate * p7_Fail()'s, which will cause MPI to shut down the worker processes * uncleanly. */ static void mpi_master(const ESL_GETOPTS *go, struct cfg_s *cfg) { int have_work = TRUE; /* TRUE while alignments remain */ int nproc_working = 0; /* number of worker processes working, up to nproc-1 */ int wi; /* rank of next worker to get an alignment to work on */ char *buf = NULL; /* input/output buffer, for packed MPI messages */ int bn = 0; ESL_MSA *msa = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; ESL_MSA **msalist = NULL; ESL_MSA *postmsa = NULL; int *msaidx = NULL; char errmsg[eslERRBUFSIZE]; int n; int pos; double entropy; int status; int xstatus = eslOK; /* changes from OK on recoverable error */ int rstatus; /* status specifically from msa read */ MPI_Status mpistatus; /* Open files, set alphabet. * cfg->abc - alphabet expected or guessed in ali file * cfg->afp - open alignment file for input * cfg->hmmfp - open HMM file for output * cfp->ofp - optional open output file, or stdout * cfg->postmsafp - optional open MSA resave file, or NULL * Error handling requires first broadcasting a non-OK status to workers * to get them to shut down cleanly. */ if (esl_opt_GetBoolean(go, "--amino")) cfg->abc = esl_alphabet_Create(eslAMINO); else if (esl_opt_GetBoolean(go, "--dna")) cfg->abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--rna")) cfg->abc = esl_alphabet_Create(eslRNA); else cfg->abc = NULL; status = eslx_msafile_Open(&(cfg->abc), cfg->alifile, NULL, cfg->fmt, NULL, &(cfg->afp)); if (status != eslOK) mpi_init_open_failure(cfg->afp, status); cfg->hmmfp = fopen(cfg->hmmfile, "w"); if (cfg->hmmfp == NULL) mpi_init_other_failure("Failed to open HMM file %s for writing", cfg->hmmfile); if (esl_opt_IsUsed(go, "-o")) { cfg->ofp = fopen(esl_opt_GetString(go, "-o"), "w"); if (cfg->ofp == NULL) mpi_init_other_failure("Failed to open -o output file %s\n", esl_opt_GetString(go, "-o")); } else cfg->ofp = stdout; if (cfg->postmsafile) { cfg->postmsafp = fopen(cfg->postmsafile, "w"); if (cfg->postmsafp == NULL) mpi_init_other_failure("Failed to MSA resave file %s for writing", cfg->postmsafile); } else cfg->postmsafp = NULL; /* Other initialization in the master */ bn = 4096; if ((buf = malloc(sizeof(char) * bn)) == NULL) mpi_init_other_failure("allocation failed"); if ((msalist = malloc(sizeof(ESL_MSA *) * cfg->nproc)) == NULL) mpi_init_other_failure("allocation failed"); if ((msaidx = malloc(sizeof(int) * cfg->nproc)) == NULL) mpi_init_other_failure("allocation failed"); if ((bg = p7_bg_Create(cfg->abc)) == NULL) mpi_init_other_failure("allocation failed"); for (wi = 0; wi < cfg->nproc; wi++) { msalist[wi] = NULL; msaidx[wi] = 0; } /* Looks like the master is initialized successfully... * Tell the workers we're fine; send initial output to the user */ xstatus = eslOK; MPI_Bcast(&xstatus, 1, MPI_INT, 0, MPI_COMM_WORLD); output_header(go, cfg); /* cheery output header */ output_result(cfg, NULL, 0, NULL, NULL, NULL, 0.0); /* tabular results header (with no args, special-case) */ ESL_DPRINTF1(("MPI master is initialized\n")); /* Worker initialization: * Because we've already successfully initialized the master before we start * initializing the workers, we don't expect worker initialization to fail; * so we just receive a quick OK/error code reply from each worker to be sure, * and don't worry about an informative message. */ MPI_Bcast(&(cfg->abc->type), 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Reduce(&xstatus, &status, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD); if (status != eslOK) { MPI_Finalize(); p7_Fail("One or more MPI worker processes failed to initialize."); } ESL_DPRINTF1(("%d workers are initialized\n", cfg->nproc-1)); /* Main loop: combining load workers, send/receive, clear workers loops; * also, catch error states and die later, after clean shutdown of workers. * * When a recoverable error occurs, have_work = FALSE, xstatus != * eslOK, and errmsg is set to an informative message. No more * errmsg's can be received after the first one. We wait for all the * workers to clear their work units, then send them shutdown signals, * then finally print our errmsg and exit. * * Unrecoverable errors just crash us out with p7_Fail(). */ wi = 1; while (have_work || nproc_working) { if (have_work) { rstatus = eslx_msafile_Read(cfg->afp, &msa); if (rstatus == eslOK) { cfg->nali++; ESL_DPRINTF1(("MPI master read MSA %s\n", msa->name == NULL? "" : msa->name)); } else if (rstatus == eslEOF) { have_work = FALSE; rstatus = eslOK; ESL_DPRINTF1(("MPI master has run out of MSAs (having read %d)\n", cfg->nali)); } else { have_work = FALSE; xstatus = rstatus; ESL_DPRINTF1(("MPI master msa read has failed... start to shut down\n")); } } if ((have_work && nproc_working == cfg->nproc-1) || (!have_work && nproc_working > 0)) { if (MPI_Probe(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &mpistatus) != 0) { MPI_Finalize(); p7_Fail("mpi probe failed"); } if (MPI_Get_count(&mpistatus, MPI_PACKED, &n) != 0) { MPI_Finalize(); p7_Fail("mpi get count failed"); } wi = mpistatus.MPI_SOURCE; ESL_DPRINTF1(("MPI master sees a result of %d bytes from worker %d\n", n, wi)); if (n > bn) { if ((buf = realloc(buf, sizeof(char) * n)) == NULL) p7_Fail("reallocation failed"); bn = n; } if (MPI_Recv(buf, bn, MPI_PACKED, wi, 0, MPI_COMM_WORLD, &mpistatus) != 0) { MPI_Finalize(); p7_Fail("mpi recv failed"); } ESL_DPRINTF1(("MPI master has received the buffer\n")); /* If we're in a recoverable error state, we're only clearing worker results; * just receive them, don't unpack them or print them. * But if our xstatus is OK, go ahead and process the result buffer. */ if (xstatus == eslOK) { pos = 0; if (MPI_Unpack(buf, bn, &pos, &xstatus, 1, MPI_INT, MPI_COMM_WORLD) != 0) { MPI_Finalize(); p7_Fail("mpi unpack failed");} if (xstatus == eslOK) /* worker reported success. Get the HMM. */ { ESL_DPRINTF1(("MPI master sees that the result buffer contains an HMM\n")); if (p7_hmm_MPIUnpack(buf, bn, &pos, MPI_COMM_WORLD, &(cfg->abc), &hmm) != eslOK) { MPI_Finalize(); p7_Fail("HMM unpack failed"); } ESL_DPRINTF1(("MPI master has unpacked the HMM\n")); if (cfg->postmsafile != NULL) { if (esl_msa_MPIUnpack(cfg->abc, buf, bn, &pos, MPI_COMM_WORLD, &postmsa) != eslOK) { MPI_Finalize(); p7_Fail("postmsa unpack failed");} } entropy = p7_MeanMatchRelativeEntropy(hmm, bg); if ((status = output_result(cfg, errmsg, msaidx[wi], msalist[wi], hmm, postmsa, entropy)) != eslOK) xstatus = status; esl_msa_Destroy(postmsa); postmsa = NULL; p7_hmm_Destroy(hmm); hmm = NULL; } else /* worker reported an error. Get the errmsg. */ { if (MPI_Unpack(buf, bn, &pos, errmsg, eslERRBUFSIZE, MPI_CHAR, MPI_COMM_WORLD) != 0) { MPI_Finalize(); p7_Fail("mpi unpack of errmsg failed"); } ESL_DPRINTF1(("MPI master sees that the result buffer contains an error message\n")); } } esl_msa_Destroy(msalist[wi]); msalist[wi] = NULL; msaidx[wi] = 0; nproc_working--; } if (have_work) { ESL_DPRINTF1(("MPI master is sending MSA %s to worker %d\n", msa->name == NULL ? "":msa->name, wi)); if (esl_msa_MPISend(msa, wi, 0, MPI_COMM_WORLD, &buf, &bn) != eslOK) p7_Fail("MPI msa send failed"); msalist[wi] = msa; msaidx[wi] = cfg->nali; /* 1..N for N alignments in the MSA database */ msa = NULL; wi++; nproc_working++; } } /* On success or recoverable errors: * Shut down workers cleanly. */ ESL_DPRINTF1(("MPI master is done. Shutting down all the workers cleanly\n")); for (wi = 1; wi < cfg->nproc; wi++) if (esl_msa_MPISend(NULL, wi, 0, MPI_COMM_WORLD, &buf, &bn) != eslOK) p7_Fail("MPI msa send failed"); free(buf); free(msaidx); free(msalist); p7_bg_Destroy(bg); if (rstatus != eslOK) { MPI_Finalize(); eslx_msafile_ReadFailure(cfg->afp, rstatus); } else if (xstatus != eslOK) { MPI_Finalize(); p7_Fail(errmsg); } else return; } static void mpi_init_open_failure(ESLX_MSAFILE *afp, int status) { MPI_Bcast(&status, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Finalize(); eslx_msafile_OpenFailure(afp, status); } static void mpi_init_other_failure(char *format, ...) { va_list argp; int status = eslFAIL; MPI_Bcast(&status, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Finalize(); if (fprintf(stderr, "\nError: ") < 0) exit(eslEWRITE); va_start(argp, format); if (vfprintf(stderr, format, argp) < 0) exit(eslEWRITE); va_end(argp); if (fprintf(stderr, "\n") < 0) exit(eslEWRITE); fflush(stderr); exit(1); } static void mpi_worker(const ESL_GETOPTS *go, struct cfg_s *cfg) { int xstatus = eslOK; int status; int type; P7_BUILDER *bld = NULL; ESL_MSA *msa = NULL; ESL_MSA *postmsa = NULL; ESL_MSA **postmsa_ptr = (cfg->postmsafile != NULL) ? &postmsa : NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; char *wbuf = NULL; /* packed send/recv buffer */ void *tmp; /* for reallocation of wbuf */ int wn = 0; /* allocation size for wbuf */ int sz, n; /* size of a packed message */ int pos; char errmsg[eslERRBUFSIZE]; ESL_SQ *sq = NULL; /* After master initialization: master broadcasts its status. */ MPI_Bcast(&xstatus, 1, MPI_INT, 0, MPI_COMM_WORLD); if (xstatus != eslOK) return; /* master saw an error code; workers do an immediate normal shutdown. */ ESL_DPRINTF2(("worker %d: sees that master has initialized\n", cfg->my_rank)); /* Master now broadcasts worker initialization information (alphabet type) * Workers returns their status post-initialization. * Initial allocation of wbuf must be large enough to guarantee that * we can pack an error result into it, because after initialization, * errors will be returned as packed (code, errmsg) messages. */ MPI_Bcast(&type, 1, MPI_INT, 0, MPI_COMM_WORLD); if (xstatus == eslOK) { if ((cfg->abc = esl_alphabet_Create(type)) == NULL) xstatus = eslEMEM; } if (xstatus == eslOK) { wn = 4096; if ((wbuf = malloc(wn * sizeof(char))) == NULL) xstatus = eslEMEM; } if (xstatus == eslOK) { if ((bld = p7_builder_Create(go, cfg->abc)) == NULL) xstatus = eslEMEM; } //special arguments for hmmbuild bld->w_len = (go != NULL && esl_opt_IsOn (go, "--w_length")) ? esl_opt_GetInteger(go, "--w_length"): -1; bld->w_beta = (go != NULL && esl_opt_IsOn (go, "--w_beta")) ? esl_opt_GetReal (go, "--w_beta") : p7_DEFAULT_WINDOW_BETA; if ( bld->w_beta < 0 || bld->w_beta > 1 ) goto ERROR; MPI_Reduce(&xstatus, &status, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD); /* everyone sends xstatus back to master */ if (xstatus != eslOK) { if (wbuf != NULL) free(wbuf); if (bld != NULL) p7_builder_Destroy(bld); return; /* shutdown; we passed the error back for the master to deal with. */ } bg = p7_bg_Create(cfg->abc); ESL_DPRINTF2(("worker %d: initialized\n", cfg->my_rank)); /* source = 0 (master); tag = 0 */ while (esl_msa_MPIRecv(0, 0, MPI_COMM_WORLD, cfg->abc, &wbuf, &wn, &msa) == eslOK) { /* Build the HMM */ ESL_DPRINTF2(("worker %d: has received MSA %s (%d columns, %d seqs)\n", cfg->my_rank, msa->name, msa->alen, msa->nseq)); if ( msa->nseq == 1 && esl_opt_IsUsed(go, "--singlemx")) { //for, single sequence, use blosum matrix: sq = esl_sq_CreateDigital(cfg->abc); if ((status = esl_sq_FetchFromMSA(msa, 0, &sq)) != eslOK) { strcpy(errmsg, bld->errbuf); goto ERROR; } if ((status = p7_SingleBuilder(bld, sq, bg, &hmm, NULL, NULL, NULL)) != eslOK) { strcpy(errmsg, bld->errbuf); goto ERROR; } esl_sq_Destroy(sq); sq = NULL; hmm->eff_nseq = 1; } else { if ((status = p7_Builder(bld, msa, bg, &hmm, NULL, NULL, NULL, postmsa_ptr)) != eslOK) { strcpy(errmsg, bld->errbuf); goto ERROR; } } ESL_DPRINTF2(("worker %d: has produced an HMM %s\n", cfg->my_rank, hmm->name)); /* Calculate upper bound on size of sending status, HMM, and optional postmsa; make sure wbuf can hold it. */ n = 0; if (MPI_Pack_size(1, MPI_INT, MPI_COMM_WORLD, &sz) != 0) goto ERROR; n += sz; if (p7_hmm_MPIPackSize( hmm, MPI_COMM_WORLD, &sz) != eslOK) goto ERROR; n += sz; if (esl_msa_MPIPackSize(postmsa, MPI_COMM_WORLD, &sz) != eslOK) goto ERROR; n += sz; if (n > wn) { ESL_RALLOC(wbuf, tmp, sizeof(char) * n); wn = n; } ESL_DPRINTF2(("worker %d: has calculated that HMM will pack into %d bytes\n", cfg->my_rank, n)); /* Send status, HMM, and optional postmsa back to the master */ pos = 0; if (MPI_Pack (&status, 1, MPI_INT, wbuf, wn, &pos, MPI_COMM_WORLD) != 0) goto ERROR; if (p7_hmm_MPIPack (hmm, wbuf, wn, &pos, MPI_COMM_WORLD) != eslOK) goto ERROR; if (esl_msa_MPIPack(postmsa, wbuf, wn, &pos, MPI_COMM_WORLD) != eslOK) goto ERROR; MPI_Send(wbuf, pos, MPI_PACKED, 0, 0, MPI_COMM_WORLD); ESL_DPRINTF2(("worker %d: has sent HMM to master in message of %d bytes\n", cfg->my_rank, pos)); esl_msa_Destroy(msa); msa = NULL; esl_msa_Destroy(postmsa); postmsa = NULL; p7_hmm_Destroy(hmm); hmm = NULL; } if (wbuf != NULL) free(wbuf); p7_builder_Destroy(bld); return; ERROR: ESL_DPRINTF2(("worker %d: fails, is sending an error message, as follows:\n%s\n", cfg->my_rank, errmsg)); pos = 0; MPI_Pack(&status, 1, MPI_INT, wbuf, wn, &pos, MPI_COMM_WORLD); MPI_Pack(errmsg, eslERRBUFSIZE, MPI_CHAR, wbuf, wn, &pos, MPI_COMM_WORLD); MPI_Send(wbuf, pos, MPI_PACKED, 0, 0, MPI_COMM_WORLD); if (wbuf != NULL) free(wbuf); if (msa != NULL) esl_msa_Destroy(msa); if (hmm != NULL) p7_hmm_Destroy(hmm); if (bld != NULL) p7_builder_Destroy(bld); return; } #endif /*HAVE_MPI*/ static void serial_loop(WORKER_INFO *info, struct cfg_s *cfg, const ESL_GETOPTS *go) { P7_BUILDER *bld = NULL; ESL_MSA *msa = NULL; ESL_SQ *sq = NULL; ESL_MSA *postmsa = NULL; ESL_MSA **postmsa_ptr = (cfg->postmsafile != NULL) ? &postmsa : NULL; P7_HMM *hmm = NULL; char errmsg[eslERRBUFSIZE]; int status; double entropy; cfg->nali = 0; while ((status = eslx_msafile_Read(cfg->afp, &msa)) != eslEOF) { if (status != eslOK) eslx_msafile_ReadFailure(cfg->afp, status); cfg->nali++; if ((status = set_msa_name(cfg, errmsg, msa)) != eslOK) p7_Fail("%s\n", errmsg); /* cfg->nnamed gets incremented in this call */ /* bg new-HMM trarr gm om */ if ( msa->nseq == 1 && esl_opt_IsUsed(go, "--singlemx")) { if ((status = esl_sq_FetchFromMSA(msa, 0, &sq)) != eslOK) p7_Fail("build failed: %s", bld->errbuf); if ((status = p7_SingleBuilder(info->bld, sq, info->bg, &hmm, NULL, NULL, NULL)) != eslOK) p7_Fail("build failed: %s", bld->errbuf); esl_sq_Destroy(sq); sq = NULL; hmm->eff_nseq = 1; } else { if ((status = p7_Builder(info->bld, msa, info->bg, &hmm, NULL, NULL, NULL, postmsa_ptr)) != eslOK) p7_Fail("build failed: %s", bld->errbuf); //if not --singlemx, but the user set the popen/pextend flags, override the computed gap params now: if (info->bld->popen != -1 || info->bld->pextend != -1) { apply_fixed_gap_params(hmm, info->bld->popen, info->bld->pextend); } } entropy = p7_MeanMatchRelativeEntropy(hmm, info->bg); if ((status = output_result(cfg, errmsg, cfg->nali, msa, hmm, postmsa, entropy)) != eslOK) p7_Fail(errmsg); p7_hmm_Destroy(hmm); esl_msa_Destroy(msa); esl_msa_Destroy(postmsa); } } #ifdef HMMER_THREADS static void thread_loop(ESL_THREADS *obj, ESL_WORK_QUEUE *queue, struct cfg_s *cfg, const ESL_GETOPTS *go) { int status = eslOK; int sstatus = eslOK; int processed = 0; WORK_ITEM *item; void *newItem; int next = 1; PENDING_ITEM *top = NULL; PENDING_ITEM *empty = NULL; PENDING_ITEM *tmp = NULL; char errmsg[eslERRBUFSIZE]; esl_workqueue_Reset(queue); esl_threads_WaitForStart(obj); status = esl_workqueue_ReaderUpdate(queue, NULL, &newItem); if (status != eslOK) esl_fatal("Work queue reader failed"); /* Main loop: */ item = (WORK_ITEM *) newItem; while (sstatus == eslOK) { sstatus = eslx_msafile_Read(cfg->afp, &item->msa); if (sstatus == eslOK) { item->nali = ++cfg->nali; if (set_msa_name(cfg, errmsg, item->msa) != eslOK) p7_Fail("%s\n", errmsg); } else if (sstatus == eslEOF && processed < cfg->nali) sstatus = eslOK; else if (sstatus != eslEOF) eslx_msafile_ReadFailure(cfg->afp, sstatus); if (sstatus == eslOK) { item->force_single = esl_opt_IsUsed(go, "--singlemx"); status = esl_workqueue_ReaderUpdate(queue, item, &newItem); if (status != eslOK) esl_fatal("Work queue reader failed"); /* process any results */ item = (WORK_ITEM *) newItem; if (item->processed == TRUE) { ++processed; /* try to keep the input output order the same */ if (item->nali == next) { sstatus = output_result(cfg, errmsg, item->nali, item->msa, item->hmm, item->postmsa, item->entropy); if (sstatus != eslOK) p7_Fail(errmsg); p7_hmm_Destroy(item->hmm); esl_msa_Destroy(item->msa); esl_msa_Destroy(item->postmsa); ++next; /* output any pending msa as long as the order * remains the same as read in. */ while (top != NULL && top->nali == next) { sstatus = output_result(cfg, errmsg, top->nali, top->msa, top->hmm, top->postmsa, top->entropy); if (sstatus != eslOK) p7_Fail(errmsg); p7_hmm_Destroy(top->hmm); esl_msa_Destroy(top->msa); esl_msa_Destroy(top->postmsa); tmp = top; top = tmp->next; tmp->next = empty; empty = tmp; ++next; } } else { /* queue up the msa so the sequence order is the same in * the .sto and .hmm */ if (empty != NULL) { tmp = empty; empty = tmp->next; } else { ESL_ALLOC(tmp, sizeof(PENDING_ITEM)); } tmp->nali = item->nali; tmp->hmm = item->hmm; tmp->msa = item->msa; tmp->postmsa = item->postmsa; tmp->entropy = item->entropy; /* add the msa to the pending list */ if (top == NULL || tmp->nali < top->nali) { tmp->next = top; top = tmp; } else { PENDING_ITEM *ptr = top; while (ptr->next != NULL && tmp->nali > ptr->next->nali) { ptr = ptr->next; } tmp->next = ptr->next; ptr->next = tmp; } } item->nali = 0; item->processed = FALSE; item->hmm = NULL; item->msa = NULL; item->postmsa = NULL; item->entropy = 0.0; } } } if (top != NULL) esl_fatal("Top is not empty\n"); while (empty != NULL) { tmp = empty; empty = tmp->next; free(tmp); } status = esl_workqueue_ReaderUpdate(queue, item, NULL); if (status != eslOK) esl_fatal("Work queue reader failed"); if (sstatus == eslEOF) { /* wait for all the threads to complete */ esl_threads_WaitForFinish(obj); esl_workqueue_Complete(queue); } return; ERROR: p7_Fail("thread_loop failed: memory allocation problem"); } static void pipeline_thread(void *arg) { int workeridx; int status; WORK_ITEM *item; void *newItem; WORKER_INFO *info; ESL_THREADS *obj; ESL_SQ *sq = NULL; obj = (ESL_THREADS *) arg; esl_threads_Started(obj, &workeridx); info = (WORKER_INFO *) esl_threads_GetData(obj, workeridx); status = esl_workqueue_WorkerUpdate(info->queue, NULL, &newItem); if (status != eslOK) esl_fatal("Work queue worker failed"); /* loop until all blocks have been processed */ item = (WORK_ITEM *) newItem; while (item->msa != NULL) { if ( item->msa->nseq == 1 && item->force_single) { status = esl_sq_FetchFromMSA(item->msa, 0, &sq); if (status != eslOK) p7_Fail("build failed: %s", info->bld->errbuf); status = p7_SingleBuilder(info->bld, sq, info->bg, &item->hmm, NULL, NULL, NULL); if (status != eslOK) p7_Fail("build failed: %s", info->bld->errbuf); esl_sq_Destroy(sq); sq = NULL; item->hmm->eff_nseq = 1; } else { status = p7_Builder(info->bld, item->msa, info->bg, &item->hmm, NULL, NULL, NULL, &item->postmsa); if (status != eslOK) p7_Fail("build failed: %s", info->bld->errbuf); //if not --singlemx, but the user set the popen/pextend flags, override the computed gap params now: if (info->bld->popen != -1 || info->bld->pextend != -1) { apply_fixed_gap_params(item->hmm, info->bld->popen, info->bld->pextend); } } item->entropy = p7_MeanMatchRelativeEntropy(item->hmm, info->bg); item->processed = TRUE; status = esl_workqueue_WorkerUpdate(info->queue, item, &newItem); if (status != eslOK) esl_fatal("Work queue worker failed"); item = (WORK_ITEM *) newItem; } status = esl_workqueue_WorkerUpdate(info->queue, item, NULL); if (status != eslOK) esl_fatal("Work queue worker failed"); esl_threads_Finished(obj, workeridx); return; } #endif /* HMMER_THREADS */ static int output_result(const struct cfg_s *cfg, char *errbuf, int msaidx, ESL_MSA *msa, P7_HMM *hmm, ESL_MSA *postmsa, double entropy) { int status; /* Special case: output the tabular results header. * Arranged this way to keep the two fprintf()'s close together in the code, * so we can keep the data and labels properly sync'ed. */ if (msa == NULL) { if (cfg->abc->type == eslAMINO) { if (fprintf(cfg->ofp, "#%4s %-20s %5s %5s %5s %8s %6s %s\n", " idx", "name", "nseq", "alen", "mlen", "eff_nseq", "re/pos", "description") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "output_result: write failed"); if (fprintf(cfg->ofp, "#%4s %-20s %5s %5s %5s %8s %6s %s\n", "----", "--------------------", "-----", "-----", "-----", "--------", "------", "-----------") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "output_result: write failed"); } else { if (fprintf(cfg->ofp, "#%4s %-20s %5s %5s %5s %5s %8s %6s %s\n", " idx", "name", "nseq", "alen", "mlen", "W", "eff_nseq", "re/pos", "description") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "output_result: write failed"); if (fprintf(cfg->ofp, "#%4s %-20s %5s %5s %5s %5s %8s %6s %s\n", "----", "--------------------", "-----", "-----", "-----", "-----", "--------", "------", "-----------") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "output_result: write failed"); } return eslOK; } // if ((status = p7_hmm_Validate(hmm, errbuf, 0.0001)) != eslOK) return status; if ((status = p7_hmmfile_WriteASCII(cfg->hmmfp, -1, hmm)) != eslOK) ESL_FAIL(status, errbuf, "HMM save failed"); /* # name nseq alen M max_length eff_nseq re/pos description */ if (cfg->abc->type == eslAMINO) { if (fprintf(cfg->ofp, "%-5d %-20s %5d %5" PRId64 " %5d %8.2f %6.3f %s\n", msaidx, (msa->name != NULL) ? msa->name : "", msa->nseq, msa->alen, hmm->M, hmm->eff_nseq, entropy, (msa->desc != NULL) ? msa->desc : "") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "output_result: write failed"); } else { if (fprintf(cfg->ofp, "%-5d %-20s %5d %5" PRId64 " %5d %5d %8.2f %6.3f %s\n", msaidx, (msa->name != NULL) ? msa->name : "", msa->nseq, msa->alen, hmm->M, hmm->max_length, hmm->eff_nseq, entropy, (msa->desc != NULL) ? msa->desc : "") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "output_result: write failed"); } if (cfg->postmsafp != NULL && postmsa != NULL) { eslx_msafile_Write(cfg->postmsafp, postmsa, eslMSAFILE_STOCKHOLM); } return eslOK; } /* set_msa_name() * Make sure the alignment has a name; this name will * then be transferred to the model. * * We can only do this for a single alignment in a file. For multi-MSA * files, each MSA is required to have a name already. * * Priority is: * 1. Use -n if set, overriding any name the alignment might already have. * 2. Use alignment's existing name, if non-NULL. * 3. Make a name, from alignment file name without path and without filename extension * (e.g. "/usr/foo/globins.slx" gets named "globins") * If none of these succeeds, return . * * If a multiple MSA database (e.g. Stockholm/Pfam), and we encounter * an MSA that doesn't already have a name, return if nali > 1. * (We don't know we're in a multiple MSA database until we're on the second * alignment.) * * If we're in MPI mode, we assume we're in a multiple MSA database, * even on the first alignment. * * Because we can't tell whether we've got more than one * alignment 'til we're on the second one, these fatal errors * only happen after the first HMM has already been built. * Oh well. */ static int set_msa_name(struct cfg_s *cfg, char *errbuf, ESL_MSA *msa) { char *name = NULL; int status; if (cfg->do_mpi == FALSE && cfg->nali == 1) /* first (only?) HMM in file: */ { if (cfg->hmmName != NULL) { if ((status = esl_msa_SetName(msa, cfg->hmmName, -1)) != eslOK) return status; } else if (msa->name != NULL) { cfg->nnamed++; } else if (cfg->afp->bf->filename) { if ((status = esl_FileTail(cfg->afp->bf->filename, TRUE, &name)) != eslOK) return status; /* TRUE=nosuffix */ if ((status = esl_msa_SetName(msa, name, -1)) != eslOK) return status; free(name); } else ESL_FAIL(eslEINVAL, errbuf, "Failed to set model name: msa has no name, no msa filename, and no -n"); } else { if (cfg->hmmName != NULL) ESL_FAIL(eslEINVAL, errbuf, "Oops. Wait. You can't use -n with an alignment database."); else if (msa->name != NULL) cfg->nnamed++; else ESL_FAIL(eslEINVAL, errbuf, "Oops. Wait. I need name annotation on each alignment in a multi MSA file; failed on #%d", cfg->nali+1); /* special kind of failure: the *first* alignment didn't have a name, and we used the filename to * construct one; now that we see a second alignment, we realize this was a boo-boo*/ if (cfg->nnamed != cfg->nali) ESL_FAIL(eslEINVAL, errbuf, "Oops. Wait. I need name annotation on each alignment in a multi MSA file; first MSA didn't have one"); } return eslOK; } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/generic_msv.c0000664361611702660230000005433012473612613015531 0ustar wheelerteddy/* MSV algorithm; generic (non-SIMD) version. * * Contents: * 1. MSV implementation. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * SRE, Fri Aug 15 10:38:21 2008 [Janelia] * SVN $Id: generic_msv.c 4540 2013-10-15 15:45:51Z wheelert $ */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_gumbel.h" #include "hmmer.h" /***************************************************************** * 1. MSV implementation. *****************************************************************/ /* Function: p7_GMSV() * Synopsis: The MSV score algorithm (slow, correct version) * Incept: SRE, Thu Dec 27 08:33:39 2007 [Janelia] * * Purpose: Calculates the maximal score of ungapped local segment * pair alignments, taking advantage of the fact that this * is simply equivalent to setting all MM transitions to 1.0 * in a multihit local profile. * * Args: dsq - sequence in digitized form, 1..L * L - length of dsq * gm - profile (can be in any mode) * gx - DP matrix with room for an MxL alignment * nu - configuration: expected number of hits (use 2.0 as a default) * opt_sc - optRETURN: MSV lod score in nats. * * Returns: on success. * * Note: This is written deliberately as a modified p7_GViterbi * routine. It could be faster -- we don't need the * interleaved dp matrix or residue scores, since we aren't * calculating D or I states, for example, and we could do * without some of the special states -- but speed is the * job of the optimized implementations. Rather, the goal * here is to establish a stable, probabilistically correct * reference calculation. (Thus, the CC, NN, JJ transitions * are real scores here, not fixed to 0 as in the optimized * versions.) */ int p7_GMSV(const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMX *gx, float nu, float *opt_sc) { float **dp = gx->dp; float *xmx = gx->xmx; float tloop = logf((float) L / (float) (L+3)); float tmove = logf( 3.0f / (float) (L+3)); float tbmk = logf( 2.0f / ((float) gm->M * (float) (gm->M+1))); float tej = logf((nu - 1.0f) / nu); float tec = logf(1.0f / nu); int i,k; XMX(0,p7G_N) = 0; XMX(0,p7G_B) = tmove; /* S->N->B, no N-tail */ XMX(0,p7G_E) = XMX(0,p7G_C) = XMX(0,p7G_J) =-eslINFINITY; /* need seq to get here */ for (k = 0; k <= gm->M; k++) MMX(0,k) = -eslINFINITY; /* need seq to get here */ for (i = 1; i <= L; i++) { float const *rsc = gm->rsc[dsq[i]]; MMX(i,0) = -eslINFINITY; XMX(i,p7G_E) = -eslINFINITY; for (k = 1; k <= gm->M; k++) { MMX(i,k) = MSC(k) + ESL_MAX(MMX(i-1,k-1), XMX(i-1,p7G_B) + tbmk); XMX(i,p7G_E) = ESL_MAX(XMX(i,p7G_E), MMX(i,k)); } XMX(i,p7G_J) = ESL_MAX( XMX(i-1,p7G_J) + tloop, XMX(i, p7G_E) + tej); XMX(i,p7G_C) = ESL_MAX( XMX(i-1,p7G_C) + tloop, XMX(i, p7G_E) + tec); XMX(i,p7G_N) = XMX(i-1,p7G_N) + tloop; XMX(i,p7G_B) = ESL_MAX( XMX(i, p7G_N) + tmove, XMX(i, p7G_J) + tmove); } gx->M = gm->M; gx->L = L; if (opt_sc != NULL) *opt_sc = XMX(L,p7G_C) + tmove; return eslOK; } /*---------------------- end, msv -------------------------------*/ /* Function: p7_GMSV_longtarget() * Synopsis: Finds windows with MSV scores above some threshold (slow, correct version) * Incept: TJW, Thu Jun 17 14:32:08 EDT 2010 [Janelia] * * * Purpose: Calculates the MSV score for regions of sequence of length * residues, and captures the positions at which such regions exceed the * score required to be significant in the eyes of the calling function * (usually p=0.02). Note that this variant performs MSV computations, * while the optimized versions typically perform SSV (never passing * through the J state). See comments in impl_sse/p7_MSVFilter_longtarget() * for details * * Rather than simply capturing positions at which a score threshold * is reached, this function establishes windows around those * high-scoring positions, then merges overlapping windows. * * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * gm - profile (can be in any mode) * gx - DP matrix * nu - configuration: expected number of hits (use 2.0 as a default) * bg - the background model, required for translating a P-value threshold into a score threshold * P - p-value below which a region is captured as being above threshold * windowlist - RETURN: array of hit windows (start and end of diagonal) for the above-threshold areas * * * * Note: Not worried about speed here. Based on p7_GMSV * * Returns: on success. * * Throws: if allocation is too small. */ int p7_GMSV_longtarget(const ESL_DSQ *dsq, int L, P7_PROFILE *gm, P7_GMX *gx, float nu, P7_BG *bg, double P, P7_HMM_WINDOWLIST *windowlist) { /* A couple differences between this MSV and the standard one: * * - the transitions are parameterized based on window length (gm->max_length), not target length. * - because we're scanning along a sequence with the implicit assumption that each * point we're inspecting is part of a window, but we don't know where that window starts/ends, * we don't use the tloop cost in its proper form. Instead of incuring the tloop cost for * each pass through the N/C states, we simply build the whole chunk of loop cost into the * threshold (treating it as though it would've been added at the end of computation) * */ float **dp = gx->dp; float *xmx = gx->xmx; float tloop = logf((float) gm->max_length / (float) (gm->max_length+3)); float tmove = logf( 3.0f / (float) (gm->max_length+3)); float tbmk = logf( 2.0f / ((float) gm->M * (float) (gm->M+1))); float tej = logf((nu - 1.0f) / nu); float tec = logf(1.0f / nu); int i,k; float tloop_total = tloop * gm->max_length; //int target_end; int target_start; float sc_thresh; float nullsc; /* * Computing the score required to let P meet the F1 prob threshold * In original code, converting from an MSV score S (the score getting * to state C) to a probability goes like this: * S = XMX(L,p7G_C) * usc = S + tmove + tloop_total * P = f ( (usc - nullsc) / eslCONST_LOG2 , mu, lambda) * and we're computing the threshold score S, so reverse it: * (usc - nullsc) / eslCONST_LOG2 = inv_f( P, mu, lambda) * usc = nullsc + eslCONST_LOG2 * inv_f( P, mu, lambda) * S = usc - tmove - tloop_total * * Here, I compute threshold with length model based on max_length. Usually, the * length of a window returned by this scan will be longer than max_length. Doesn't * really matter - in any case, both the bg and om models will change with roughly * 1 bit for each doubling of the length model, so they offset. */ float invP = esl_gumbel_invsurv(P, gm->evparam[p7_MMU], gm->evparam[p7_MLAMBDA]); p7_bg_SetLength(bg, gm->max_length); p7_ReconfigLength(gm, gm->max_length); p7_bg_NullOne (bg, dsq, gm->max_length, &nullsc); sc_thresh = nullsc + (invP * eslCONST_LOG2) - tmove - tloop_total; XMX(0,p7G_N) = 0; XMX(0,p7G_B) = tmove; /* S->N->B, no N-tail */ XMX(0,p7G_E) = XMX(0,p7G_C) = XMX(0,p7G_J) =-eslINFINITY; /* need seq to get here */ for (k = 0; k <= gm->M; k++) MMX(0,k) = -eslINFINITY; /* need seq to get here */ for (i = 1; i <= L; i++) { float const *rsc = gm->rsc[dsq[i]]; MMX(i,0) = -eslINFINITY; XMX(i,p7G_E) = -eslINFINITY; for (k = 1; k <= gm->M; k++) { MMX(i,k) = MSC(k) + ESL_MAX(MMX(i-1,k-1), XMX(i-1,p7G_B) + tbmk); XMX(i,p7G_E) = ESL_MAX(XMX(i,p7G_E), MMX(i,k)); } XMX(i,p7G_J) = ESL_MAX( XMX(i-1,p7G_J) /*+ tloop*/, XMX(i, p7G_E) + tej); XMX(i,p7G_C) = ESL_MAX( XMX(i-1,p7G_C) /*+ tloop*/, XMX(i, p7G_E) + tec); XMX(i,p7G_N) = XMX(i-1,p7G_N) /*+ tloop*/; XMX(i,p7G_B) = ESL_MAX( XMX(i, p7G_N) + tmove, XMX(i, p7G_J) + tmove); if (XMX(i,p7G_C) > sc_thresh) { target_start = ESL_MAX(1, i - gm->max_length + 1); //target_end = ESL_MIN(L, i + gm->max_length - 1); //TODO: this is wrong - it just pretends the hit was to the middle of the model, to get dummy to // quit crashing. Results are definitely wrong. // Need to get diagonal backtracking implemented in dummy p7_hmmwindow_new(windowlist, 0, target_start, 0, gm->M/2, 1, XMX(i,p7G_C), p7_NOCOMPLEMENT, L); //start the search all over again XMX(i,p7G_N) = 0; XMX(i,p7G_B) = tmove; /* S->N->B, no N-tail */ XMX(i,p7G_E) = XMX(i,p7G_C) = XMX(i,p7G_J) =-eslINFINITY; /* need seq to get here */ for (k = 0; k <= gm->M; k++) MMX(i,k) = -eslINFINITY; } } return eslOK; } /*------------------ end, p7_GMSV_longtarget() ------------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ #ifdef p7GENERIC_MSV_BENCHMARK /* gcc -g -O2 -o generic_msv_benchmark -I. -L. -I../easel -L../easel -Dp7GENERIC_MSV_BENCHMARK generic_msv.c -lhmmer -leasel -lm icc -O3 -static -o generic_msv_benchmark -I. -L. -I../easel -L../easel -Dp7GENERIC_MSV_BENCHMARK generic_msv.c -lhmmer -leasel -lm ./benchmark-generic-msv */ /* As of Fri Dec 28 14:48:39 2007 * Viterbi = 61.8 Mc/s * Forward = 8.6 Mc/s * Backward = 7.1 Mc/s * GMSV = 55.9 Mc/s * (gcc -g -O2, 3.2GHz Xeon, N=50K, L=400, M=72 RRM_1 model) */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "20000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for generic MSV"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *gx = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc; double base_time, bench_time, Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_UNILOCAL); gx = p7_gmx_Create(gm->M, L); /* Baseline time. */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; /* Benchmark time. */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_GMSV (dsq, L, gm, gx, 2.0, &sc); } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_MSV_BENCHMARK*/ /*----------------- end, benchmark ------------------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7GENERIC_MSV_TESTDRIVE #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_vectorops.h" /* The MSV score can be validated against Viterbi (provided we trust * Viterbi), by creating a multihit local profile in which: * 1. All t_MM scores = 0 * 2. All other core transitions = -inf * 3. All t_BMk entries uniformly log 2/(M(M+1)) */ static void utest_msv(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, P7_PROFILE *gm, int nseq, int L) { P7_PROFILE *g2 = NULL; ESL_DSQ *dsq = NULL; P7_GMX *gx = NULL; float sc1, sc2; int k, idx; if ((dsq = malloc(sizeof(ESL_DSQ) *(L+2))) == NULL) esl_fatal("malloc failed"); if ((gx = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("matrix creation failed"); if ((g2 = p7_profile_Clone(gm)) == NULL) esl_fatal("profile clone failed"); /* Make g2's scores appropriate for simulating the MSV algorithm in Viterbi */ esl_vec_FSet(g2->tsc, p7P_NTRANS * g2->M, -eslINFINITY); for (k = 1; k < g2->M; k++) p7P_TSC(g2, k, p7P_MM) = 0.0f; for (k = 0; k < g2->M; k++) p7P_TSC(g2, k, p7P_BM) = log(2.0f / ((float) g2->M * (float) (g2->M+1))); for (idx = 0; idx < nseq; idx++) { if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal("seq generation failed"); if (p7_GMSV (dsq, L, gm, gx, 2.0, &sc1) != eslOK) esl_fatal("MSV failed"); if (p7_GViterbi(dsq, L, g2, gx, &sc2) != eslOK) esl_fatal("viterbi failed"); if (fabs(sc1-sc2) > 0.0001) esl_fatal("MSV score not equal to Viterbi score"); } p7_gmx_Destroy(gx); p7_profile_Destroy(g2); free(dsq); return; } #endif /*p7GENERIC_MSV_TESTDRIVE*/ /*----------------- end, unit tests -----------------------------*/ /***************************************************************** * 4. Test driver. *****************************************************************/ /* gcc -g -Wall -Dp7GENERIC_MSV_TESTDRIVE -I. -I../easel -L. -L../easel -o generic_msv_utest generic_msv.c -lhmmer -leasel -lm */ #ifdef p7GENERIC_MSV_TESTDRIVE #include "easel.h" #include "esl_getopts.h" #include "esl_msa.h" #include "p7_config.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "--vv", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be very verbose", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "unit test driver for the generic Msv implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_BG *bg = NULL; int M = 100; int L = 200; int nseq = 20; char errbuf[eslERRBUFSIZE]; if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if (p7_hmm_Sample(r, M, abc, &hmm) != eslOK) esl_fatal("failed to sample an HMM"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if ((gm = p7_profile_Create(hmm->M, abc)) == NULL) esl_fatal("failed to create profile"); if (p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL) != eslOK) esl_fatal("failed to config profile"); if (p7_hmm_Validate (hmm, errbuf, 0.0001) != eslOK) esl_fatal("whoops, HMM is bad!: %s", errbuf); if (p7_profile_Validate(gm, errbuf, 0.0001) != eslOK) esl_fatal("whoops, profile is bad!: %s", errbuf); utest_msv(go, r, abc, bg, gm, nseq, L); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_MSV_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7GENERIC_MSV_EXAMPLE /* gcc -g -O2 -Dp7GENERIC_MSV_EXAMPLE -I. -I../easel -L. -L../easel -o generic_msv_example generic_msv.c -lhmmer -leasel -lm */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_gumbel.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "--nu", eslARG_REAL, "2.0", NULL, NULL, NULL, NULL, NULL, "set nu param to : expected # MSV diagonals", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of generic MSV algorithm"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); float nu = esl_opt_GetReal(go, "--nu"); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *fwd = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; P7_TRACE *tr = NULL; int format = eslSQFILE_UNKNOWN; float sc, nullsc, seqscore, lnP; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Open sequence file */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); /* Allocate matrix */ fwd = p7_gmx_Create(gm->M, sq->n); while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { p7_ReconfigLength(gm, sq->n); p7_bg_SetLength(bg, sq->n); p7_gmx_GrowTo(fwd, gm->M, sq->n); /* Run MSV */ p7_GMSV(sq->dsq, sq->n, gm, fwd, nu, &sc); /* Calculate bit score and P-value using standard null1 model*/ p7_bg_NullOne (bg, sq->dsq, sq->n, &nullsc); seqscore = (sc - nullsc) / eslCONST_LOG2; lnP = esl_gumbel_logsurv(seqscore, gm->evparam[p7_MMU], gm->evparam[p7_MLAMBDA]); /* output suitable for direct use in profmark benchmark postprocessors: * */ printf("%g\t%.2f\t%s\t%s\n", exp(lnP), seqscore, sq->name, hmm->name); esl_sq_Reuse(sq); } if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (status != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", status, sqfp->filename); /* Cleanup */ esl_sqfile_Close(sqfp); esl_sq_Destroy(sq); p7_trace_Destroy(tr); p7_gmx_Destroy(fwd); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_MSV_EXAMPLE*/ /*-------------------- end, example -----------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/makehmmerdb.c0000664361611702660230000010744312473612614015511 0ustar wheelerteddy#include "p7_config.h" #include "easel.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_mem.h" #include #include "hmmer.h" #include "divsufsort.h" #define FM_BLOCK_COUNT 100000 //max number of SQ objects in a block #define FM_BLOCK_OVERLAP 20000 //20 Kbases of overlap, at most, between adjascent FM-index blocks //#define ALPHOPTS "--amino,--dna,--rna" /* Exclusive options for alphabet choice */ static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, /* Selecting the alphabet rather than autoguessing it */ //TODO: when I make the FM method work for amino acids, re-enable this selection // { "--amino", eslARG_NONE, FALSE, NULL, NULL, ALPHOPTS, NULL, NULL, "input is protein sequence", 2 }, // { "--dna", eslARG_NONE, FALSE, NULL, NULL, ALPHOPTS, NULL, NULL, "input is DNA sequence", 2 }, // { "--rna", eslARG_NONE, FALSE, NULL, NULL, ALPHOPTS, NULL, NULL, "input is RNA sequence", 2 }, /* Other options */ { "--informat", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, NULL, "specify that input file is in format ", 3 }, { "--bin_length", eslARG_INT, "256", NULL, NULL, NULL, NULL, NULL, "bin length (power of 2; 32<=b<=4096)", 3 }, { "--sa_freq", eslARG_INT, "8", NULL, NULL, NULL, NULL, NULL, "suffix array sample rate (power of 2)", 3 }, { "--block_size", eslARG_INT, "50", NULL, NULL, NULL, NULL, NULL, "input sequence broken into chunks this size (Mbases)", 3 }, /* hidden*/ { "--fwd_only", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "build FM-index only for forward search (not for HMMER)", 9 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[options] "; static char banner[] = "build a HMMER binary-formatted database from an input sequence file"; static int process_commandline(int argc, char **argv, ESL_GETOPTS **ret_go, char **ret_seqfile, char **ret_fmfile) { ESL_GETOPTS *go = esl_getopts_Create(options); int status; if (esl_opt_ProcessEnvironment(go) != eslOK) { if (printf("Failed to process environment: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_VerifyConfig(go) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* help format: */ if (esl_opt_GetBoolean(go, "-h") == TRUE) { p7_banner(stdout, argv[0], banner); esl_usage(stdout, argv[0], usage); if (puts("\nBasic options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 120=textwidth*/ // if (puts("\nOptions for selecting alphabet rather than guessing it:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); // esl_opt_DisplayHelp(stdout, go, 2, 2, 80); if (puts("\nSpecial options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); /* 2= group; 2 = indentation; 120=textwidth*/ exit(0); } if (esl_opt_ArgNumber(go) != 2) { if (puts("Incorrect number of command line arguments.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_seqfile = esl_opt_GetArg(go, 1)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_fmfile = esl_opt_GetArg(go, 2)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* Validate any attempted use of stdin streams */ if (esl_strcmp(*ret_seqfile, "-") == 0 && esl_strcmp(*ret_fmfile, "-") == 0) { if (puts("Either or may be '-' (to read from stdin), but not both.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } *ret_go = go; return eslOK; FAILURE: /* all errors handled here are user errors, so be polite. */ esl_usage(stdout, argv[0], usage); puts("\nwhere basic options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 80=textwidth*/ printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); esl_getopts_Destroy(go); exit(1); ERROR: if (go) esl_getopts_Destroy(go); exit(status); } /* Function: output_header() * Synopsis: Print details of FM-index construction */ static int output_header(FILE *ofp, const ESL_GETOPTS *go, char *seqfile, char *fmfile) { p7_banner(ofp, go->argv[0], banner); if ( fprintf(ofp, "# input sequence file: %s\n", seqfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# output binary-formatted HMMER database: %s\n", fmfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# bin_length: %d\n", esl_opt_GetInteger(go, "--bin_length")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# suffix array sample rate: %d\n", esl_opt_GetInteger(go, "--sa_freq")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); // if (esl_opt_IsUsed(go, "--amino") && fprintf(ofp, "# input is asserted to be: protein\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); // if (esl_opt_IsUsed(go, "--dna") && fprintf(ofp, "# input is asserted to be: DNA\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); // if (esl_opt_IsUsed(go, "--rna") && fprintf(ofp, "# input is asserted to be: RNA\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); return eslOK; } /* Function: allocateSeqdata() * Synopsis: ensure that space is allocated for the seqdata object * in the FM-index metadata. */ int allocateSeqdata (FM_METADATA *meta, ESL_SQ *sq, int numseqs, int *allocedseqs) { int length; int status = eslOK; if (numseqs == *allocedseqs) { // either first allocation, or increase in size *allocedseqs *= 4; // we've bumped up against allocation limit, double allocation. ESL_REALLOC (meta->seq_data, *allocedseqs * sizeof(FM_SEQDATA)); if (meta->seq_data == NULL ) esl_fatal("unable to allocate memory to store FM meta data\n"); } //allocate space for the name, source, acc, and desc of the sequence source for the block length = strlen(sq->name); meta->seq_data[numseqs].name_length = length; ESL_ALLOC (meta->seq_data[numseqs].name, (1+length) * sizeof(char)); length = strlen(sq->acc); meta->seq_data[numseqs].acc_length = length; ESL_ALLOC (meta->seq_data[numseqs].acc, (1+length) * sizeof(char)); length = strlen(sq->source); meta->seq_data[numseqs].source_length = length; ESL_ALLOC (meta->seq_data[numseqs].source, (1+length) * sizeof(char)); length = strlen(sq->desc); meta->seq_data[numseqs].desc_length = length; ESL_ALLOC (meta->seq_data[numseqs].desc, (1+length) * sizeof(char)); if (meta->seq_data[numseqs].name == NULL || meta->seq_data[numseqs].acc == NULL || meta->seq_data[numseqs].source == NULL || meta->seq_data[numseqs].desc == NULL) esl_fatal("unable to allocate memory to store FM meta data\n"); return eslOK; ERROR: return status; } /* Function: buildAndWriteFMIndex() * Synopsis: Take text as input, along with several pre-allocated variables, * and produce BWT and corresponding FM-index, then write it all * to the output file. * * if SAsamp == NULL, don't store/write T or SAsamp */ int buildAndWriteFMIndex (FM_METADATA *meta, uint32_t seq_offset, uint32_t ambig_offset, uint32_t seq_cnt, uint32_t ambig_cnt, uint32_t overlap, uint8_t *T, uint8_t *BWT, int *SA, uint32_t *SAsamp, uint32_t *occCnts_sb, uint32_t *cnts_sb, uint16_t *occCnts_b, uint16_t *cnts_b, uint64_t N, FILE *fp ) { int status; uint64_t i,j,c,joffset; int chars_per_byte = 8/meta->charBits; uint32_t compressed_bytes = ((chars_per_byte-1+N)/chars_per_byte); uint32_t term_loc; int num_freq_cnts_b = 1+ceil((double)N/(meta->freq_cnt_b)); int num_freq_cnts_sb = 1+ceil((double)N/meta->freq_cnt_sb); int num_SA_samples = 1+floor((double)N/meta->freq_SA); uint8_t *Tcompressed = NULL; if (SAsamp != NULL) { ESL_ALLOC (Tcompressed, compressed_bytes * sizeof(uint8_t)); // Reverse the text T, so the BWT will be on reversed T. Only used for the 1st pass fm_reverseString ((char*)T, N-1); } // Construct the Suffix Array on text T status = divsufsort(T, SA, N); if ( status < 0 ) esl_fatal("buildAndWriteFMIndex: Error building BWT.\n"); // Construct the BWT, SA landmarks, and FM-index for (c=0; calph_size; c++) { cnts_sb[c] = 0; cnts_b[c] = 0; FM_OCC_CNT(sb, 0, c ) = 0; FM_OCC_CNT(b, 0, c ) = 0; } for(j=0; j < N-1; ++j) { T[j]--; //move values down so 'a'=0...'t'=3; store 'a' in place of '$' } T[N-1]=0; BWT[0] = SA[0]==0 ? 0 /* '$' */ : T[ SA[0]-1] ; cnts_sb[BWT[0]]++; cnts_b[BWT[0]]++; //Scan through SA to build the BWT and FM index structures for(j=1; j < N; ++j) { if (SA[j]==0) { //'$' term_loc = j; BWT[j] = 0; //store 'a' in place of '$' } else { BWT[j] = T[ SA[j]-1] ; } //sample the SA if (SAsamp != NULL) { if ( !(j % meta->freq_SA) ) SAsamp[ j/meta->freq_SA ] = ( SA[j] == N - 1 ? -1 : SA[j] ) ; // handle the wrap-around '$' } cnts_sb[BWT[j]]++; cnts_b[BWT[j]]++; joffset = j+1; if ( !( joffset % meta->freq_cnt_b) ) { // (j+1)%freq_cnt_b==0 , i.e. every freq_cnt_bth position, noting that it's a zero-based count for (c=0; calph_size; c++) FM_OCC_CNT(b, (joffset/meta->freq_cnt_b), c ) = cnts_b[c]; if ( !(joffset % meta->freq_cnt_sb) ) { // j%freq_cnt_sb==0 for (c=0; calph_size; c++) { FM_OCC_CNT(sb, (joffset/meta->freq_cnt_sb), c ) = cnts_sb[c]; cnts_b[c] = 0; } } } } //wrap up the counting; for (c=0; calph_size; c++) { FM_OCC_CNT(b, num_freq_cnts_b-1, c ) = cnts_b[c]; FM_OCC_CNT(sb, num_freq_cnts_sb-1, c ) = cnts_sb[c]; } // Convert BWT and T to packed versions if appropriate. if (meta->alph_type == fm_DNA) { //4 chars per byte. Counting will be done based on quadruples 0..3; 4..7; 8..11; etc. for(i=0; i < N-3; i+=4) BWT[i/4] = BWT[i]<<6 | BWT[i+1]<<4 | BWT[i+2]<<2 | BWT[i+3]; if (i <= N-1) BWT[i/4] = BWT[i]<<6; if (i+1 <= N-1) BWT[i/4] |= BWT[i+1]<<4; if (i+2 <= N-1) BWT[i/4] |= BWT[i+2]<<2; /* } else if (meta->alph_type == fm_DNA_full ) { //2 chars per byte. Counting will be done based on quadruples 0..3; 4..7; 8..11; etc. for(i=0; i < N-1; i+=2) BWT[i/2] = BWT[i]<<4 | BWT[i+1]; if (i==N-1) BWT[i/2] = BWT[i]<<4 ; */ } //If this is the 1st (reversed text) BWT, de-reverse it, then compress it if (SAsamp != NULL) { fm_reverseString ((char*)T, N-1); // Convert BWT and T to packed versions if appropriate. if (meta->alph_type == fm_DNA ) { //4 chars per byte. Counting will be done based on quadruples 0..3; 4..7; 8..11; etc. for(i=0; i < N-3; i+=4) Tcompressed[i/4] = T[i]<<6 | T[i+1]<<4 | T[i+2]<<2 | T[i+3]; if (i <= N-1) Tcompressed[i/4] = T[i]<<6; if (i+1 <= N-1) Tcompressed[i/4] |= T[i+1]<<4; if (i+2 <= N-1) Tcompressed[i/4] |= T[i+2]<<2; /* } else if (meta->alph_type == fm_DNA_full) { //2 chars per byte. Counting will be done based on quadruples 0..3; 4..7; 8..11; etc. for(i=0; i < N-1; i+=2) Tcompressed[i/2] = T[i]<<4 | T[i+1]; if (i==N-1) Tcompressed[i/2] = T[i]<<4 ; */ } else { for(i=0; i < N-1; i++) Tcompressed[i] = T[i]; } } for(j=0; j < N-1; ++j) { T[j]++; //move values back up, in case the reverse FM needs to be built } T[N-1] = 0; // Write the FM-index meta data if(fwrite(&N, sizeof(uint64_t), 1, fp) != 1) esl_fatal( "buildAndWriteFMIndex: Error writing block_length in FM index.\n"); if(fwrite(&term_loc, sizeof(uint32_t), 1, fp) != 1) esl_fatal( "buildAndWriteFMIndex: Error writing terminal location in FM index.\n"); if(fwrite(&seq_offset, sizeof(uint32_t), 1, fp) != 1) esl_fatal( "buildAndWriteFMIndex: Error writing seq_offset in FM index.\n"); if(fwrite(&ambig_offset, sizeof(uint32_t), 1, fp) != 1) esl_fatal( "buildAndWriteFMIndex: Error writing ambig_offset in FM index.\n"); if(fwrite(&overlap, sizeof(uint32_t), 1, fp) != 1) esl_fatal( "buildAndWriteFMIndex: Error writing overlap in FM index.\n"); if(fwrite(&seq_cnt, sizeof(uint32_t), 1, fp) != 1) esl_fatal( "buildAndWriteFMIndex: Error writing seq_cnt in FM index.\n"); if(fwrite(&ambig_cnt, sizeof(uint32_t), 1, fp) != 1) esl_fatal( "buildAndWriteFMIndex: Error writing ambig_cnt in FM index.\n"); // don't write Tcompressed or SAsamp if SAsamp == NULL if(Tcompressed != NULL && fwrite(Tcompressed, sizeof(uint8_t), compressed_bytes, fp) != compressed_bytes) esl_fatal( "buildAndWriteFMIndex: Error writing T in FM index.\n"); if(fwrite(BWT, sizeof(uint8_t), compressed_bytes, fp) != compressed_bytes) esl_fatal( "buildAndWriteFMIndex: Error writing BWT in FM index.\n"); if(SAsamp != NULL && fwrite(SAsamp, sizeof(uint32_t), (size_t)num_SA_samples, fp) != (size_t)num_SA_samples) esl_fatal( "buildAndWriteFMIndex: Error writing SA in FM index.\n"); if(fwrite(occCnts_b, sizeof(uint16_t)*(meta->alph_size), (size_t)num_freq_cnts_b, fp) != (size_t)num_freq_cnts_b) esl_fatal( "buildAndWriteFMIndex: Error writing occCnts_b in FM index.\n"); if(fwrite(occCnts_sb, sizeof(uint32_t)*(meta->alph_size), (size_t)num_freq_cnts_sb, fp) != (size_t)num_freq_cnts_sb) esl_fatal( "buildAndWriteFMIndex: Error writing occCnts_sb in FM index.\n"); if (Tcompressed) free(Tcompressed); return eslOK; ERROR: /* Deallocate memory. */ if (Tcompressed) free(Tcompressed); return eslFAIL; } /* Function: main() * Synopsis: break input sequence set into chunks, for each one building the * Burrows-Wheeler transform and corresponding FM-index. Maintain requisite * meta data. * Notes: Currently depends on the divsufsort-lite code of Yuta Mori, though this * could easily be replaced. */ int main(int argc, char **argv) { char tmp_filename[16] = "fmtmpXXXXXX"; FILE *fptmp = NULL; FILE *fp = NULL; uint8_t *T = NULL; uint8_t *BWT = NULL; int *SA = NULL; //what I write will be 32-bit ints, but I need to keep this as int so it'll work with libdivsufsort uint32_t *SAsamp = NULL; uint32_t *occCnts_sb = NULL; // same indexing as above uint32_t *cnts_sb = NULL; uint16_t *occCnts_b = NULL; // this is logically a 2D array, but will be indexed as occ_cnts[alph_size*index + char] (instead of occ_cnts[index][char]) uint16_t *cnts_b = NULL; FM_METADATA *meta = NULL; clock_t t1, t2; struct tms ts1, ts2; long i,j,c; int status = eslOK; int chars_per_byte; int num_freq_cnts_sb ; int num_freq_cnts_b ; int num_SA_samples ; int infmt = eslSQFILE_UNKNOWN; int alphatype = eslUNKNOWN; ESL_ALPHABET *abc = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; ESL_SQ *tmpsq = NULL; ESL_SQ_BLOCK *block = NULL; char *fname_in = NULL; char *fname_out= NULL; int block_size = 50000000; int sq_cnt = 0; int use_tmpsq = 0; uint64_t block_length; uint64_t total_char_count = 0; int max_block_size; int numblocks = 0; uint32_t numseqs = 0; int allocedseqs = 1000; uint32_t seq_offset = 0; uint32_t ambig_offset = 0; uint32_t overlap = 0; uint32_t seq_cnt; uint32_t ambig_cnt; uint32_t prev_numseqs = 0; int compressed_bytes; uint32_t term_loc; ESL_GETOPTS *go = NULL; /* command line processing */ int in_ambig_run = 0; FM_AMBIGLIST ambig_list; ESL_RANDOMNESS *r = esl_randomness_CreateFast(42); #if !defined (p7_IMPL_SSE) p7_Fail("The hmmerfm sequence database file format is valid only on systems supporting SSE vector instructions\n"); #endif ESL_ALLOC (meta, sizeof(FM_METADATA)); if (meta == NULL) esl_fatal("unable to allocate memory to store FM meta data\n"); meta->alph = NULL; ESL_ALLOC (meta->ambig_list, sizeof(FM_AMBIGLIST)); if (meta->ambig_list == NULL) esl_fatal("unable to allocate memory to store FM ambiguity data\n"); fm_initAmbiguityList(meta->ambig_list); meta->alph_type = fm_DNA; meta->freq_SA = 8; meta->freq_cnt_b = 256; meta->freq_cnt_sb = pow(2,16); //65536 - that's the # values in a short meta->seq_count = 0; ESL_ALLOC (meta->seq_data, allocedseqs * sizeof(FM_SEQDATA)); if (meta->seq_data == NULL ) esl_fatal("unable to allocate memory to store FM sequence data\n"); process_commandline(argc, argv, &go, &fname_in, &fname_out); if (esl_opt_IsOn(go, "--bin_length")) meta->freq_cnt_b = esl_opt_GetInteger(go, "--bin_length"); if ( meta->freq_cnt_b < 32 || meta->freq_cnt_b >4096 || (meta->freq_cnt_b & (meta->freq_cnt_b - 1)) ) // test power of 2 esl_fatal("bin_length must be a power of 2, at least 128, and at most 4096\n"); if (esl_opt_IsOn(go, "--sa_freq")) meta->freq_SA = esl_opt_GetInteger(go, "--sa_freq"); if ( (meta->freq_SA & (meta->freq_SA - 1)) ) // test power of 2 esl_fatal ("SA_freq must be a power of 2\n"); if (esl_opt_IsOn(go, "--block_size")) block_size = 1000000 * esl_opt_GetInteger(go, "--block_size"); if ( block_size <=0 ) esl_fatal ("block_size must be a positive number\n"); //start timer t1 = times(&ts1); output_header(stdout, go, fname_in, fname_out); if (esl_opt_GetString(go, "--informat") != NULL) { infmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat")); if (infmt == eslSQFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat"); } status = esl_sqfile_Open(fname_in, infmt, NULL, &sqfp); if (status == eslENOTFOUND) esl_fatal("No such file %s", fname_in); else if (status == eslEFORMAT) esl_fatal("Format of seqfile %s unrecognized.", fname_in); else if (status != eslOK) esl_fatal("Open failed, code %d.", status); meta->fwd_only = 0; /* TODO: when I make the FM method work for amino acids, re-enable this selection if ( esl_opt_IsUsed(go, "--amino") ) { meta->alph_type = fm_AMINO; alphatype = eslAMINO; meta->fwd_only = 1; } else if (esl_opt_IsUsed(go, "--dna") || esl_opt_IsUsed(go, "--rna") ){ */ //meta->alph = "dna"; //esl_opt_IsUsed(go, "--dna") ? "dna" || "rna"; meta->alph_type = fm_DNA; alphatype = eslDNA; /* } else { esl_sqfile_GuessAlphabet(sqfp, &alphaguess); if (alphaguess == eslDNA || alphaguess == eslRNA) { meta->alph_type = fm_DNA; alphatype = eslDNA; } else if (alphaguess == eslAMINO) { meta->alph_type = fm_AMINO; alphatype = eslAMINO; meta->fwd_only = 1; } else { esl_fatal("Unable to guess alphabet. Try '--dna' or '--amino'\n%s", ""); //'dna_full' } } */ if (esl_opt_IsOn(go, "--fwd_only") ) meta->fwd_only = 1; //getInverseAlphabet fm_alphabetCreate(meta, &(meta->charBits)); chars_per_byte = 8/meta->charBits; //shift inv_alph up one, to make space for '$' at 0 for (i=0; i<256; i++) if ( meta->inv_alph[i] >= 0) meta->inv_alph[i]++; abc = esl_alphabet_Create(alphatype); sq = esl_sq_CreateDigital(abc); tmpsq = esl_sq_CreateDigital(abc); esl_sqfile_SetDigital(sqfp, abc); block = esl_sq_CreateDigitalBlock(FM_BLOCK_COUNT, abc); block->complete = FALSE; // max_block_size = FM_BLOCK_OVERLAP+block_size+1 + block_size*.2; // +1 for the '$' max_block_size = FM_BLOCK_OVERLAP+block_size+1 + block_size; // temporary hack to avoid memory over-runs (see end of 1101_fmindex_benchmarking/00NOTES) if (alphatype == fm_DNA) fm_initAmbiguityList(&ambig_list); /* Allocate BWT, Text, SA, and FM-index data structures, allowing storage of maximally large sequence*/ ESL_ALLOC (T, max_block_size * sizeof(uint8_t)); ESL_ALLOC (BWT, max_block_size * sizeof(uint8_t)); ESL_ALLOC (SA, max_block_size * sizeof(int)); ESL_ALLOC (SAsamp, (1+floor((double)max_block_size/meta->freq_SA) ) * sizeof(uint32_t)); ESL_ALLOC (occCnts_sb, (1+ceil((double)max_block_size/meta->freq_cnt_sb)) * meta->alph_size * sizeof(uint32_t)); // every freq_cnt_sb positions, store an array of ints ESL_ALLOC (cnts_sb, meta->alph_size * sizeof(uint32_t)); ESL_ALLOC (occCnts_b, ( 1+ceil((double)max_block_size/meta->freq_cnt_b)) * meta->alph_size * sizeof(uint16_t)); // every freq_cnt_b positions, store an array of 8-byte ints ESL_ALLOC (cnts_b, meta->alph_size * sizeof(uint16_t)); if((T == NULL) || (BWT == NULL) || (SA==NULL) || (SAsamp==NULL) || (BWT==NULL) || (cnts_b==NULL) || (occCnts_b==NULL) || (cnts_sb==NULL) || (occCnts_sb==NULL) ) { esl_fatal( "%s: Cannot allocate memory.\n", argv[0]); } // Open a temporary file, to which FM-index data will be written if (esl_tmpfile(tmp_filename, &fptmp) != eslOK) esl_fatal("unable to open fm-index tmpfile"); /* Main loop: */ while (status == eslOK ) { //reset block as an empty vessel for (i=0; icount; i++) esl_sq_Reuse(block->list + i); if (use_tmpsq) { esl_sq_Copy(tmpsq , block->list); block->complete = FALSE; //this lets ReadBlock know that it needs to append to a small bit of previously-read seqeunce block->list->C = FM_BLOCK_OVERLAP; // overload the ->C value, which ReadBlock uses to determine how much // overlap should be retained in the ReadWindow step } else { block->complete = TRUE; } status = esl_sqio_ReadBlock(sqfp, block, block_size, -1, alphatype != eslAMINO); if (status == eslEOF) continue; if (status != eslOK) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); seq_offset = numseqs; ambig_offset = meta->ambig_list->count; if (block->complete || block->count == 0) { use_tmpsq = FALSE; } else { /* The final sequence on the block was a probably-incomplete window of the active sequence. * Grab a copy of the end for use in the next pass, to ensure we don't miss hits crossing * the boundary between two blocks. */ esl_sq_Copy(block->list + (block->count - 1) , tmpsq); use_tmpsq = TRUE; } block->first_seqidx = sq_cnt; sq_cnt += block->count - (use_tmpsq ? 1 : 0);// if there's an incomplete sequence read into the block wait to count it until it's complete. /* Read dseqs from block into text element T. * Convert the dsq from esl-alphabet to fm-alphabet (1..k for alphabet of size k). * (a) collapsing upper/lower case for appropriate sorting. * (b) reserving 0 for '$', which must be lexicographically smallest * (these will later be shifted to 0-based alphabet, once SA has been built) * */ block_length = 0; for (i=0; icount; i++) { //start a new block, with space for the name allocateSeqdata(meta, block->list+i, numseqs, &allocedseqs); //meta data meta->seq_data[numseqs].target_id = block->first_seqidx + i ; meta->seq_data[numseqs].target_start = block->list[i].start; meta->seq_data[numseqs].fm_start = block_length; if (block->list[i].name == NULL) meta->seq_data[numseqs].name[0] = '\0'; else strcpy(meta->seq_data[numseqs].name, block->list[i].name ); if (block->list[i].acc == NULL) meta->seq_data[numseqs].acc[0] = '\0'; else strcpy(meta->seq_data[numseqs].acc, block->list[i].acc ); if (block->list[i].source == NULL) meta->seq_data[numseqs].source[0] = '\0'; else strcpy(meta->seq_data[numseqs].source, block->list[i].source ); if (block->list[i].desc == NULL) meta->seq_data[numseqs].desc[0] = '\0'; else strcpy(meta->seq_data[numseqs].desc, block->list[i].desc ); for (j=1; j<=block->list[i].n; j++) { c = abc->sym[block->list[i].dsq[j]]; if ( meta->alph_type == fm_DNA) { if (meta->inv_alph[c] == -1) { // replace ambiguity characters by random choice of A,C,G, and T. c = meta->alph[(int)(esl_random(r)*4)]; if (!in_ambig_run) { fm_addAmbiguityRange(meta->ambig_list, block_length, block_length); in_ambig_run=1; } else { meta->ambig_list->ranges[meta->ambig_list->count - 1].upper = block_length; } } else { in_ambig_run=0; } } else if (meta->inv_alph[c] == -1) { esl_fatal("requested alphabet doesn't match input text\n"); } T[block_length] = meta->inv_alph[c]; block_length++; if (j>block->list[i].C) total_char_count++; // add to total count, only if it's not redundant with earlier read meta->seq_data[numseqs].length++; } numseqs++; in_ambig_run = 0; } T[block_length] = 0; // last character 0 is effectively '$' for suffix array block_length++; seq_cnt = numseqs-seq_offset; ambig_cnt = meta->ambig_list->count - ambig_offset; //build and write FM-index for T. This will be a BWT on the reverse of the sequence, required for reverse-traversal of the BWT buildAndWriteFMIndex(meta, seq_offset, ambig_offset, seq_cnt, ambig_cnt, (uint32_t)block->list[0].C, T, BWT, SA, SAsamp, occCnts_sb, cnts_sb, occCnts_b, cnts_b, block_length, fptmp); if ( ! meta->fwd_only ) { //build and write FM-index for un-reversed T (used to find reverse hits using forward traversal of the BWT buildAndWriteFMIndex(meta, seq_offset, ambig_offset, seq_cnt, ambig_cnt, 0, T, BWT, SA, NULL, occCnts_sb, cnts_sb, occCnts_b, cnts_b, block_length, fptmp); } prev_numseqs = numseqs; numblocks++; } esl_sqfile_Close(sqfp); esl_alphabet_Destroy(abc); esl_sq_Destroy(sq); esl_sq_Destroy(tmpsq); esl_sq_DestroyBlock(block); esl_randomness_Destroy(r); meta->seq_count = numseqs; meta->block_count = numblocks; /* Finished writing the FM-index data to a temporary file. Now write * metadata to fname_out, than append FM-index data from temp file */ if((fp = fopen(fname_out, "wb")) == NULL) esl_fatal( "%s: Cannot open file `%s': ", argv[0], fname_out); //write out meta data if( fwrite(&(meta->fwd_only), sizeof(meta->fwd_only), 1, fp) != 1 || fwrite(&(meta->alph_type), sizeof(meta->alph_type), 1, fp) != 1 || fwrite(&(meta->alph_size), sizeof(meta->alph_size), 1, fp) != 1 || fwrite(&(meta->charBits), sizeof(meta->charBits), 1, fp) != 1 || fwrite(&(meta->freq_SA), sizeof(meta->freq_SA), 1, fp) != 1 || fwrite(&(meta->freq_cnt_sb), sizeof(meta->freq_cnt_sb), 1, fp) != 1 || fwrite(&(meta->freq_cnt_b), sizeof(meta->freq_cnt_b), 1, fp) != 1 || fwrite(&(meta->block_count), sizeof(meta->block_count), 1, fp) != 1 || fwrite(&(meta->seq_count), sizeof(meta->seq_count), 1, fp) != 1 || fwrite(&(meta->ambig_list->count), sizeof(meta->ambig_list->count), 1, fp) != 1 || fwrite(&total_char_count, sizeof(total_char_count), 1, fp) != 1 ) esl_fatal( "%s: Error writing meta data for FM index.\n", argv[0]); for (i=0; iseq_count; i++) { if( fwrite(&(meta->seq_data[i].target_id), sizeof(meta->seq_data[i].target_id), 1, fp) != 1 || fwrite(&(meta->seq_data[i].target_start), sizeof(meta->seq_data[i].target_start), 1, fp) != 1 || fwrite(&(meta->seq_data[i].fm_start), sizeof(meta->seq_data[i].fm_start), 1, fp) != 1 || fwrite(&(meta->seq_data[i].length), sizeof(meta->seq_data[i].length), 1, fp) != 1 || fwrite(&(meta->seq_data[i].name_length), sizeof(meta->seq_data[i].name_length), 1, fp) != 1 || fwrite(&(meta->seq_data[i].acc_length), sizeof(meta->seq_data[i].acc_length), 1, fp) != 1 || fwrite(&(meta->seq_data[i].source_length),sizeof(meta->seq_data[i].source_length), 1, fp) != 1 || fwrite(&(meta->seq_data[i].desc_length), sizeof(meta->seq_data[i].desc_length), 1, fp) != 1 || fwrite(meta->seq_data[i].name, sizeof(char), meta->seq_data[i].name_length+1 , fp) != meta->seq_data[i].name_length+1 || fwrite(meta->seq_data[i].acc, sizeof(char), meta->seq_data[i].acc_length+1 , fp) != meta->seq_data[i].acc_length+1 || fwrite(meta->seq_data[i].source, sizeof(char), meta->seq_data[i].source_length+1, fp) != meta->seq_data[i].source_length+1 || fwrite(meta->seq_data[i].desc, sizeof(char), meta->seq_data[i].desc_length+1 , fp) != meta->seq_data[i].desc_length+1 ) esl_fatal( "%s: Error writing meta data for FM index.\n", argv[0]); } for (i=0; iambig_list->count; i++) { if( fwrite(&(meta->ambig_list->ranges[i].lower), sizeof(meta->ambig_list->ranges[i].lower), 1, fp) != 1 || fwrite(&(meta->ambig_list->ranges[i].upper), sizeof(meta->ambig_list->ranges[i].upper), 1, fp) != 1 ) esl_fatal( "%s: Error writing ambiguity data for FM index.\n", argv[0]); } /* now append the FM-index data in fptmp to the desired output file, fp */ rewind(fptmp); for (i=0; ifwd_only?1:2); j++ ) { //do this once or twice, once for forward-T index, and possibly once for reversed //first, read if(fread(&block_length, sizeof(block_length), 1, fptmp) != 1) esl_fatal( "%s: Error reading block_length in FM index.\n", argv[0]); if(fread(&term_loc, sizeof(term_loc), 1, fptmp) != 1) esl_fatal( "%s: Error reading terminal location in FM index.\n", argv[0]); if(fread(&seq_offset, sizeof(seq_offset), 1, fptmp) != 1) esl_fatal( "%s: Error reading seq_offset in FM index.\n", argv[0]); if(fread(&ambig_offset, sizeof(ambig_offset ), 1, fptmp) != 1) esl_fatal( "%s: Error reading ambig_offset in FM index.\n", argv[0]); if(fread(&overlap, sizeof(overlap), 1, fptmp) != 1) esl_fatal( "%s: Error reading overlap in FM index.\n", argv[0]); if(fread(&seq_cnt, sizeof(seq_cnt), 1, fptmp) != 1) esl_fatal( "%s: Error reading seq_cnt in FM index.\n", argv[0]); if(fread(&ambig_cnt, sizeof(ambig_cnt), 1, fptmp) != 1) esl_fatal( "%s: Error reading ambig_cnt in FM index.\n", argv[0]); compressed_bytes = ((chars_per_byte-1+block_length)/chars_per_byte); num_freq_cnts_b = 1+ceil((double)block_length/meta->freq_cnt_b); num_freq_cnts_sb = 1+ceil((double)block_length/meta->freq_cnt_sb); num_SA_samples = 1+floor((double)block_length/meta->freq_SA); //j==0 test cause T and SA to be written only for forward sequence if(j==0 && fread(T, sizeof(uint8_t), compressed_bytes, fptmp) != compressed_bytes) esl_fatal( "%s: Error reading T in FM index.\n", argv[0]); if(fread(BWT, sizeof(uint8_t), compressed_bytes, fptmp) != compressed_bytes) esl_fatal( "%s: Error reading BWT in FM index.\n", argv[0]); if(j==0 && fread(SAsamp, sizeof(uint32_t), (size_t)num_SA_samples, fptmp) != (size_t)num_SA_samples) esl_fatal( "%s: Error reading SA in FM index.\n", argv[0]); if(fread(occCnts_b, sizeof(uint16_t)*(meta->alph_size), (size_t)num_freq_cnts_b, fptmp) != (size_t)num_freq_cnts_b) esl_fatal( "%s: Error reading occCnts_b in FM index.\n", argv[0]); if(fread(occCnts_sb, sizeof(uint32_t)*(meta->alph_size), (size_t)num_freq_cnts_sb, fptmp) != (size_t)num_freq_cnts_sb) esl_fatal( "%s: Error reading occCnts_sb in FM index.\n", argv[0]); //then, write if(fwrite(&block_length, sizeof(block_length), 1, fp) != 1) esl_fatal( "%s: Error writing block_length in FM index.\n", argv[0]); if(fwrite(&term_loc, sizeof(term_loc), 1, fp) != 1) esl_fatal( "%s: Error writing terminal location in FM index.\n", argv[0]); if(fwrite(&seq_offset, sizeof(seq_offset), 1, fp) != 1) esl_fatal( "%s: Error writing seq_offset in FM index.\n", argv[0]); if(fwrite(&ambig_offset, sizeof(ambig_offset), 1, fp) != 1) esl_fatal( "%s: Error writing ambig_offset in FM index.\n", argv[0]); if(fwrite(&overlap, sizeof(overlap), 1, fp) != 1) esl_fatal( "%s: Error writing overlap in FM index.\n", argv[0]); if(fwrite(&seq_cnt, sizeof(seq_cnt), 1, fp) != 1) esl_fatal( "%s: Error writing seq_cnt in FM index.\n", argv[0]); if(fwrite(&ambig_cnt, sizeof(ambig_cnt), 1, fp) != 1) esl_fatal( "%s: Error writing ambig_cnt in FM index.\n", argv[0]); if(j==0 && fwrite(T, sizeof(uint8_t), compressed_bytes, fp) != compressed_bytes) esl_fatal( "%s: Error writing T in FM index.\n", argv[0]); if(fwrite(BWT, sizeof(uint8_t), compressed_bytes, fp) != compressed_bytes) esl_fatal( "%s: Error writing BWT in FM index.\n", argv[0]); if(j==0 && fwrite(SAsamp, sizeof(uint32_t), (size_t)num_SA_samples, fp) != (size_t)num_SA_samples) esl_fatal( "%s: Error writing SA in FM index.\n", argv[0]); if(fwrite(occCnts_b, sizeof(uint16_t)*(meta->alph_size), (size_t)num_freq_cnts_b, fp) != (size_t)num_freq_cnts_b) esl_fatal( "%s: Error writing occCnts_b in FM index.\n", argv[0]); if(fwrite(occCnts_sb, sizeof(uint32_t)*(meta->alph_size), (size_t)num_freq_cnts_sb, fp) != (size_t)num_freq_cnts_sb) esl_fatal( "%s: Error writing occCnts_sb in FM index.\n", argv[0]); } } fclose(fp); fclose(fptmp); free(T); free(BWT); free(SA); free(SAsamp); free(occCnts_b); free(cnts_b); free(occCnts_sb); free(cnts_sb); fm_metaDestroy(meta); esl_getopts_Destroy(go); // compute and print the elapsed time in millisec t2 = times(&ts2); { double clk_ticks = sysconf(_SC_CLK_TCK); double elapsedTime = (t2-t1)/clk_ticks; fprintf (stderr, "run time: %.2f seconds\n", elapsedTime); } return (eslOK); ERROR: /* Deallocate memory. */ if (fp) fclose(fp); if (T) free(T); if (BWT) free(BWT); if (SA) free(SA); if (SAsamp) free(SAsamp); if (occCnts_b) free(occCnts_b); if (cnts_b) free(cnts_b); if (occCnts_sb) free(occCnts_sb); if (cnts_sb) free(cnts_sb); if (ambig_list.ranges) free(ambig_list.ranges); fm_metaDestroy(meta); esl_getopts_Destroy(go); esl_sqfile_Close(sqfp); esl_alphabet_Destroy(abc); esl_sq_Destroy(sq); if (tmpsq) esl_sq_Destroy(tmpsq); if (block) esl_sq_DestroyBlock(block); fprintf (stderr, "failure during memory allocation\n"); exit(status); } hmmer-3.1b2/src/p7_gbands.c0000664361611702660230000001210312473612614015065 0ustar wheelerteddy#include "p7_config.h" #include "easel.h" #include "esl_vectorops.h" #include "p7_gbands.h" P7_GBANDS * p7_gbands_Create(void) { P7_GBANDS *bnd = NULL; int init_segalloc = 4; int init_rowalloc = 64; int status; ESL_ALLOC(bnd, sizeof(P7_GBANDS)); bnd->nseg = 0; bnd->nrow = 0; bnd->L = 0; bnd->M = 0; bnd->ncell = 0; bnd->imem = NULL; bnd->kmem = NULL; ESL_ALLOC(bnd->imem, sizeof(int) * init_segalloc * 2); /* *2: for ia, ib pairs */ ESL_ALLOC(bnd->kmem, sizeof(int) * init_rowalloc * p7_GBANDS_NK); bnd->segalloc = init_segalloc; bnd->rowalloc = init_rowalloc; return bnd; ERROR: p7_gbands_Destroy(bnd); return NULL; } int p7_gbands_Reuse(P7_GBANDS *bnd) { bnd->nseg = 0; bnd->nrow = 0; bnd->L = 0; bnd->M = 0; bnd->ncell = 0; return eslOK; } /* Function: * Synopsis: * * Purpose: * calls must be made in ascending order, * from . * Args: * * Returns: * * Throws: (no abnormal error conditions) * * Xref: */ int p7_gbands_Append(P7_GBANDS *bnd, int i, int ka, int kb) { int status; if (bnd->nseg == 0 || i > 1 + bnd->imem[(bnd->nseg-1)*2 +1]) /* i > ib[cur_g] + 1; need to start a new segment */ { if (bnd->nseg == bnd->segalloc && (status = p7_gbands_GrowSegs(bnd)) != eslOK) goto ERROR; bnd->imem[bnd->nseg*2] = i; /* ia */ bnd->imem[bnd->nseg*2+1] = i; /* ib */ bnd->nseg++; } else /* else, append i onto previous segment by incrementing ib */ bnd->imem[(bnd->nseg-1)*2+1] += 1; /* equiv to setting = i */ if (bnd->nrow == bnd->rowalloc && (status = p7_gbands_GrowRows(bnd)) != eslOK) goto ERROR; bnd->kmem[bnd->nrow*p7_GBANDS_NK] = ka; bnd->kmem[bnd->nrow*p7_GBANDS_NK+1] = kb; bnd->nrow += 1; bnd->ncell += kb-ka+1; return eslOK; ERROR: return status; } /* * Build the band structure backwards. Caller will need to * call when done. */ int p7_gbands_Prepend(P7_GBANDS *bnd, int i, int ka, int kb) { int status; if (! bnd->nseg || i < bnd->imem[(bnd->nseg-1)*2+1] - 1) /* i < ia[cur_g]-1; start a new segment */ { if (bnd->nseg == bnd->segalloc && (status = p7_gbands_GrowSegs(bnd)) != eslOK) return status; bnd->imem[bnd->nseg*2] = i; /* ib */ bnd->imem[bnd->nseg*2+1] = i; /* ia */ bnd->nseg++; } else /* else, prepend i to prev segment by decrementing its ia */ bnd->imem[(bnd->nseg-1)*2+1] -= 1; /* equiv to setting ia[g] = i */ if (bnd->nrow == bnd->rowalloc && (status = p7_gbands_GrowRows(bnd)) != eslOK) return status; bnd->kmem[bnd->nrow*p7_GBANDS_NK] = kb; bnd->kmem[bnd->nrow*p7_GBANDS_NK+1] = ka; bnd->nrow += 1; bnd->ncell += kb-ka+1; return eslOK; } /* Function: p7_gbands_Reverse() * Synopsis: Reverse the band structure arrays, after a backwards DP pass. * * Purpose: Our checkpointed DP posterior decoding algorithms that make a * band structure work backwards in rows from L..1, and so they * construct a structure that has its data elements * in reversed order. Before we can use that structure, we have * to reverse these arrays. * * Args: bnd - band list to reverse. * * Returns: on success. */ int p7_gbands_Reverse(P7_GBANDS *bnd) { esl_vec_IReverse(bnd->imem, bnd->imem, 2*bnd->nseg); esl_vec_IReverse(bnd->kmem, bnd->kmem, 2*bnd->nrow); return eslOK; } int p7_gbands_GrowSegs(P7_GBANDS *bnd) { int new_segalloc = bnd->segalloc * 2; /* grow by doubling */ int status; ESL_REALLOC(bnd->imem, sizeof(int) * new_segalloc * 2); bnd->segalloc = new_segalloc; return eslOK; ERROR: return status; } int p7_gbands_GrowRows(P7_GBANDS *bnd) { int new_rowalloc = bnd->rowalloc * 2; int status; ESL_REALLOC(bnd->kmem, sizeof(int) * new_rowalloc * p7_GBANDS_NK); bnd->rowalloc = new_rowalloc; return eslOK; ERROR: return status; } void p7_gbands_Destroy(P7_GBANDS *bnd) { if (bnd) { if (bnd->imem) free(bnd->imem); if (bnd->kmem) free(bnd->kmem); free(bnd); } } /* Function: * Synopsis: * * Purpose: * Also serves to demonstrate standard iteration method, * over segments and rows. * Args: * * Returns: * * Throws: (no abnormal error conditions) * * Xref: */ int p7_gbands_Dump(FILE *ofp, P7_GBANDS *bnd) { int g, i; int *bnd_ip = bnd->imem; int *bnd_kp = bnd->kmem; int ia, ib; int ka, kb; i = 0; for (g = 0; g < bnd->nseg; g++) { ia = *bnd_ip; bnd_ip++; ib = *bnd_ip; bnd_ip++; if (ia > i+1) fprintf(ofp, "...\n"); for (i = ia; i <= ib; i++) { ka = *bnd_kp; bnd_kp++; kb = *bnd_kp; bnd_kp++; fprintf(ofp, "%6d %6d %6d\n", i, ka, kb); } } if (i <= bnd->L) fprintf(ofp, "...\n"); printf("%" PRId64 " cells banded, %" PRId64 " total; fraction = %f\n", bnd->ncell, (int64_t) bnd->L * (int64_t) bnd->M, (double) bnd->ncell / ((double) bnd->L * (double) bnd->M)); return eslOK; } hmmer-3.1b2/src/hmmc2.c0000664361611702660230000007545212473612613014246 0ustar wheelerteddy/* hmmd: hmmc2 deamon client. */ #include "p7_config.h" #ifdef HMMER_THREADS #include #include #include #include #include #include #include #include #ifdef HAVE_NETINET_IN_H #include /* On FreeBSD, you need netinet/in.h for struct sockaddr_in */ #endif /* On OpenBSD, netinet/in.h is required for (must precede) arpa/inet.h */ #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "hmmpgmd.h" #define SERVER_PORT 51371 #define MAX_READ_LEN 4096 #define REPOPTS "-E,-T,--cut_ga,--cut_nc,--cut_tc" #define DOMREPOPTS "--domE,--domT,--cut_ga,--cut_nc,--cut_tc" #define INCOPTS "--incE,--incT,--cut_ga,--cut_nc,--cut_tc" #define INCDOMOPTS "--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #define THRESHOPTS "-E,-T,--domE,--domT,--incE,--incT,--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" static ESL_OPTIONS searchOpts[] = { /* Control of output */ { "--acc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "prefer accessions over names in output", 2 }, { "--noali", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "don't output alignments, so output is smaller", 2 }, { "--notextw", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--textw", "unlimit ASCII text output line width", 2 }, { "--textw", eslARG_INT, "120", NULL, "n>=120",NULL, NULL, "--notextw", "set max width of ASCII text output lines", 2 }, /* Control of scoring system */ { "--popen", eslARG_REAL, "0.02", NULL, "0<=x<0.5",NULL, NULL, NULL, "gap open probability", 3 }, { "--pextend", eslARG_REAL, "0.4", NULL, "0<=x<1", NULL, NULL, NULL, "gap extend probability", 3 }, { "--mx", eslARG_STRING, "BLOSUM62", NULL, NULL, NULL, NULL, "--mxfile", "substitution score matrix choice (of some built-in matrices)", 3 }, { "--mxfile", eslARG_INFILE, NULL, NULL, NULL, NULL, NULL, "--mx", "read substitution score matrix from file ", 3 }, /* Control of reporting thresholds */ { "-E", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, REPOPTS, "report sequences <= this E-value threshold in output", 4 }, { "-T", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, REPOPTS, "report sequences >= this score threshold in output", 4 }, { "--domE", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, DOMREPOPTS, "report domains <= this E-value threshold in output", 4 }, { "--domT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, DOMREPOPTS, "report domains >= this score cutoff in output", 4 }, /* Control of inclusion (significance) thresholds */ { "--incE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, INCOPTS, "consider sequences <= this E-value threshold as significant", 5 }, { "--incT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCOPTS, "consider sequences >= this score threshold as significant", 5 }, { "--incdomE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, INCDOMOPTS, "consider domains <= this E-value threshold as significant", 5 }, { "--incdomT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCDOMOPTS, "consider domains >= this score threshold as significant", 5 }, /* Model-specific thresholding for both reporting and inclusion */ { "--cut_ga", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's GA gathering cutoffs to set all thresholding", 6 }, { "--cut_nc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's NC noise cutoffs to set all thresholding", 6 }, { "--cut_tc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's TC trusted cutoffs to set all thresholding", 6 }, /* Control of acceleration pipeline */ { "--max", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--F1,--F2,--F3", "Turn all heuristic filters off (less speed, more power)", 7 }, { "--F1", eslARG_REAL, "0.02", NULL, NULL, NULL, NULL, "--max", "Stage 1 (MSV) threshold: promote hits w/ P <= F1", 7 }, { "--F2", eslARG_REAL, "1e-3", NULL, NULL, NULL, NULL, "--max", "Stage 2 (Vit) threshold: promote hits w/ P <= F2", 7 }, { "--F3", eslARG_REAL, "1e-5", NULL, NULL, NULL, NULL, "--max", "Stage 3 (Fwd) threshold: promote hits w/ P <= F3", 7 }, { "--nobias", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--max", "turn off composition bias filter", 7 }, /* Control of E-value calibration */ { "--EmL", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "length of sequences for MSV Gumbel mu fit", 11 }, { "--EmN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for MSV Gumbel mu fit", 11 }, { "--EvL", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "length of sequences for Viterbi Gumbel mu fit", 11 }, { "--EvN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for Viterbi Gumbel mu fit", 11 }, { "--EfL", eslARG_INT, "100", NULL,"n>0", NULL, NULL, NULL, "length of sequences for Forward exp tail tau fit", 11 }, { "--EfN", eslARG_INT, "200", NULL,"n>0", NULL, NULL, NULL, "number of sequences for Forward exp tail tau fit", 11 }, { "--Eft", eslARG_REAL, "0.04", NULL,"0=0", NULL, NULL, NULL, "set RNG seed to (if 0: one-time arbitrary seed)", 12 }, { "--nonull2", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "turn off biased composition score corrections", 12 }, { "-Z", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of comparisons done, for E-value calculation", 12 }, { "--domZ", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of significant seqs, for domain E-value calculation", 12 }, { "--hmmdb", eslARG_INT, NULL, NULL, "n>0", NULL, NULL, "--seqdb", "hmm database to search", 12 }, { "--seqdb", eslARG_INT, NULL, NULL, "n>0", NULL, NULL, "--hmmdb", "protein database to search", 12 }, { "--seqdb_ranges",eslARG_STRING, NULL, NULL, NULL, NULL, "--seqdb", NULL, "range(s) of sequences within --seqdb that will be searched", 12 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; //static char banner_seq[] = "search a protein sequence against a sequence database"; //static char banner_hmm[] = "search profile(s) against a sequence database"; static void sig_int(int signo) { fprintf(stderr, "Exiting due to ctrl-c\n"); exit(1); } #if 0 static int output_header(FILE *ofp, const ESL_GETOPTS *sopt, char *seqfile, char *banner) { int status; p7_banner(ofp, "hmmpgmd client", banner); if (fprintf(ofp, "# target sequence database: %s\n", seqfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--acc") && fprintf(ofp, "# prefer accessions over names: yes\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--noali") && fprintf(ofp, "# show alignments in output: no\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--notextw") && fprintf(ofp, "# max ASCII text line length: unlimited\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--textw") && fprintf(ofp, "# max ASCII text line length: %d\n", esl_opt_GetInteger(sopt, "--textw")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--popen") && fprintf(ofp, "# gap open probability: %f\n", esl_opt_GetReal (sopt, "--popen")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--pextend") && fprintf(ofp, "# gap extend probability: %f\n", esl_opt_GetReal (sopt, "--pextend")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--mx") && fprintf(ofp, "# subst score matrix (built-in): %s\n", esl_opt_GetString (sopt, "--mx")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--mxfile") && fprintf(ofp, "# subst score matrix (file): %s\n", esl_opt_GetString (sopt, "--mxfile")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "-E") && fprintf(ofp, "# sequence reporting threshold: E-value <= %g\n", esl_opt_GetReal (sopt, "-E")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "-T") && fprintf(ofp, "# sequence reporting threshold: score >= %g\n", esl_opt_GetReal (sopt, "-T")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--domE") && fprintf(ofp, "# domain reporting threshold: E-value <= %g\n", esl_opt_GetReal (sopt, "--domE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--domT") && fprintf(ofp, "# domain reporting threshold: score >= %g\n", esl_opt_GetReal (sopt, "--domT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--incE") && fprintf(ofp, "# sequence inclusion threshold: E-value <= %g\n", esl_opt_GetReal (sopt, "--incE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--incT") && fprintf(ofp, "# sequence inclusion threshold: score >= %g\n", esl_opt_GetReal (sopt, "--incT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--incdomE") && fprintf(ofp, "# domain inclusion threshold: E-value <= %g\n", esl_opt_GetReal (sopt, "--incdomE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--incdomT") && fprintf(ofp, "# domain inclusion threshold: score >= %g\n", esl_opt_GetReal (sopt, "--incdomT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--cut_ga") && fprintf(ofp, "# model-specific thresholding: GA cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--cut_nc") && fprintf(ofp, "# model-specific thresholding: NC cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--cut_tc") && fprintf(ofp, "# model-specific thresholding: TC cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--max") && fprintf(ofp, "# Max sensitivity mode: on [all heuristic filters off]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--F1") && fprintf(ofp, "# MSV filter P threshold: <= %g\n", esl_opt_GetReal(sopt, "--F1")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--F2") && fprintf(ofp, "# Vit filter P threshold: <= %g\n", esl_opt_GetReal(sopt, "--F2")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--F3") && fprintf(ofp, "# Fwd filter P threshold: <= %g\n", esl_opt_GetReal(sopt, "--F3")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--nobias") && fprintf(ofp, "# biased composition HMM filter: off\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--nonull2") && fprintf(ofp, "# null2 bias corrections: off\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--EmL") && fprintf(ofp, "# seq length, MSV Gumbel mu fit: %d\n", esl_opt_GetInteger(sopt, "--EmL")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--EmN") && fprintf(ofp, "# seq number, MSV Gumbel mu fit: %d\n", esl_opt_GetInteger(sopt, "--EmN")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--EvL") && fprintf(ofp, "# seq length, Vit Gumbel mu fit: %d\n", esl_opt_GetInteger(sopt, "--EvL")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--EvN") && fprintf(ofp, "# seq number, Vit Gumbel mu fit: %d\n", esl_opt_GetInteger(sopt, "--EvN")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--EfL") && fprintf(ofp, "# seq length, Fwd exp tau fit: %d\n", esl_opt_GetInteger(sopt, "--EfL")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--EfN") && fprintf(ofp, "# seq number, Fwd exp tau fit: %d\n", esl_opt_GetInteger(sopt, "--EfN")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--Eft") && fprintf(ofp, "# tail mass for Fwd exp tau fit: %f\n", esl_opt_GetReal (sopt, "--Eft")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "-Z") && fprintf(ofp, "# sequence search space set to: %.0f\n", esl_opt_GetReal (sopt, "-Z")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--domZ") && fprintf(ofp, "# domain search space set to: %.0f\n", esl_opt_GetReal (sopt, "--domZ")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(sopt, "--seed")) { if (esl_opt_GetInteger(sopt, "--seed") == 0 && fprintf(ofp, "# random number seed: one-time arbitrary\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); else if ( fprintf(ofp, "# random number seed set to: %d\n", esl_opt_GetInteger(sopt, "--seed")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (fprintf(ofp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); return eslOK; } #endif /*0; SRE removed to silence compiler warning, looks like MSF wasn't using it*/ static int usage(char *pgm) { if (fprintf(stderr, "Usage: %s [-i addr] [-p port] [-A] [-S]\n", pgm) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(stderr, " -S : print sequence scores\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(stderr, " -A : print sequence alignments\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(stderr, " -i addr : ip address running daemon (default: 127.0.0.1)\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(stderr, " -p port : port daemon listens to clients on (default: 51371)\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); exit(1); } int main(int argc, char *argv[]) { int i, j; int n; int eod; int size; char *seq; char *opts; int seqlen; int ali; int scores; char buffer[MAX_READ_LEN]; int status = eslOK; char *data = NULL; char *ptr = NULL; ESL_GETOPTS *go = NULL; ESL_STOPWATCH *w = NULL; P7_PIPELINE *pli = NULL; P7_TOPHITS *th = NULL; P7_DOMAIN *dcl = NULL; HMMD_SEARCH_STATS *stats; HMMD_SEARCH_STATUS sstatus; int sock; char serv_ip[64]; unsigned short serv_port; struct sockaddr_in serv_addr; /* set up defaults */ strcpy(serv_ip, "127.0.0.1"); serv_port = SERVER_PORT; scores = 0; ali = 0; i = 1; while (i < argc) { if (argv[i][0] != '-') usage(argv[0]); if (argv[i][1] == 0 || argv[i][2] != 0) usage(argv[0]); switch (argv[i][1]) { case 'p': if (i + 1 >= argc) { printf("Missing port number\n"); usage(argv[0]); } serv_port = atoi(argv[i+1]); ++i; break; case 'i': if (i + 1 >= argc) { printf("Missing ip address\n"); usage(argv[0]); } strcpy(serv_ip, argv[i+1]); ++i; break; case 'A': ali = 1; scores = 1; break; case 'S': scores = 1; break; default: usage(argv[0]); } ++i; } seqlen = MAX_READ_LEN; if ((seq = malloc(seqlen)) == NULL) { fprintf(stderr, "[%s:%d] malloc error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); exit(1); } if ((opts = malloc(MAX_READ_LEN)) == NULL) { fprintf(stderr, "[%s:%d] malloc error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); exit(1); } /* set up a signal handler for broken pipes */ if (signal(SIGINT, sig_int) == SIG_ERR) { fprintf(stderr, "[%s:%d] signal error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); exit(1); } /* Create a reliable, stream socket using TCP */ if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "[%s:%d] socket error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); exit(1); } /* Construct the server address structure */ memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(serv_ip); serv_addr.sin_port = htons(serv_port); if ((inet_pton(AF_INET, serv_ip, &serv_addr.sin_addr)) < 0) { fprintf(stderr, "[%s:%d] inet_pton error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); exit(1); } /* Establish the connection to the echo server */ if (connect(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { fprintf(stderr, "[%s:%d] connect error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); exit(1); } w = esl_stopwatch_Create(); go = esl_getopts_Create(searchOpts); seq[0] = 0; while (strncmp(seq, "//", 2) != 0) { int rem; int total = 0; eod = 0; seq[0] = 0; rem = seqlen - 1; fprintf(stdout, "\n\nEnter next sequence:\n"); while (!eod) { if (fgets(buffer, MAX_READ_LEN, stdin) != NULL) { int n = strlen(buffer); if (n >= rem) { if ((seq = realloc(seq, seqlen * 2)) == NULL) { fprintf(stderr, "[%s:%d] realloc error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); exit(1); } rem += seqlen; seqlen *= 2; } strcat(seq, buffer); rem -= n; eod = (strncmp(buffer, "//", 2) == 0); } else { eod = 1; } } /* skip all leading white spaces */ ptr = seq; while (*ptr && isspace(*ptr)) ++ptr; /* process server commands */ if (*ptr == '!') { /* Send the string to the server */ n = strlen(seq); printf ("Sending data %d:\n", n); if (writen(sock, seq, n) != n) { fprintf(stderr, "[%s:%d] write (size %d) error %d - %s\n", __FILE__, __LINE__, n, errno, strerror(errno)); exit(1); } n = sizeof(sstatus); total += n; if ((size = readn(sock, &sstatus, n)) == -1) { fprintf(stderr, "[%s:%d] read error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); exit(1); } if (sstatus.status != eslOK) { char *ebuf; n = sstatus.msg_size; total += n; ebuf = malloc(n); if ((size = readn(sock, ebuf, n)) == -1) { fprintf(stderr, "[%s:%d] read error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); exit(1); } fprintf(stderr, "ERROR (%d): %s\n", sstatus.status, ebuf); free(ebuf); } continue; } /* process search specific options */ if (*ptr == '@') { char t; char *s = ++ptr; /* skip to the end of the line */ while (*ptr && (*ptr != '\n' && *ptr != '\r')) ++ptr; t = *ptr; *ptr = 0; /* create a commandline string with dummy program name for * the esl_opt_ProcessSpoof() function to parse. */ strncpy(opts, "X ", MAX_READ_LEN); strncat(opts, s, MAX_READ_LEN); strncat(opts, "\n", MAX_READ_LEN); opts[MAX_READ_LEN-1] = 0; if (esl_getopts_Reuse(go) != eslOK) p7_Die("Internal failure reusing options object"); if (esl_opt_ProcessSpoof(go, opts) != eslOK) { printf("Failed to parse options string: %s\n", go->errbuf); continue; } if (esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse options string: %s\n", go->errbuf); continue; } /* the options string can handle an optional database */ if (esl_opt_ArgNumber(go) != 0) { printf("Incorrect number of command line arguments."); continue; } /* skip remaining white spaces */ *ptr = t; while (*ptr && isspace(*ptr)) ++ptr; } if (*ptr && strncmp(ptr, "//", 2) != 0) { P7_HMM *hmm = NULL; /* query HMM */ // P7_HMMFILE *hfp = NULL; /* open input HMM file */ ESL_SQ *sq = NULL; /* one target sequence (digital) */ ESL_ALPHABET *abc = NULL; /* digital alphabet */ status = eslOK; abc = esl_alphabet_Create(eslAMINO); #if 0 /* try to parse the input buffer as a sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqio_Parse(ptr, strlen(ptr), sq, eslSQFILE_DAEMON); if (status != eslOK) { esl_sq_Destroy(sq); sq = NULL; } #endif #if 0 /* now try to parse the buffer as an hmm */ if (status != eslOK) { status = p7_hmmfile_OpenBuffer(ptr, strlen(ptr), &hfp); if (status == eslOK) { status = p7_hmmfile_Read(hfp, &abc, &hmm); p7_hmmfile_Close(hfp); } } #endif if (status == eslOK) { total = 0; #if 0 if (hmm == NULL) { output_header(stdout, go, argv[0], banner_seq); fprintf(stdout, "Query: %s [L=%ld]\n", sq->name, (long) sq->n); if (sq->acc[0] != '\0') fprintf(stdout, "Accession: %s\n", sq->acc); if (sq->desc[0] != '\0') fprintf(stdout, "Description: %s\n", sq->desc); } else { output_header(stdout, go, argv[0], banner_hmm); fprintf(stdout, "Query: %s [M=%d]\n", hmm->name, hmm->M); if (hmm->acc) fprintf(stdout, "Accession: %s\n", hmm->acc); if (hmm->desc) fprintf(stdout, "Description: %s\n", hmm->desc); } #endif /* Send the string to the server */ n = strlen(seq); printf ("Sending data %d:\n", n); if (writen(sock, seq, n) != n) { fprintf(stderr, "[%s:%d] write (size %d) error %d - %s\n", __FILE__, __LINE__, n, errno, strerror(errno)); exit(1); } n = sizeof(sstatus); total += n; if ((size = readn(sock, &sstatus, n)) == -1) { fprintf(stderr, "[%s:%d] read error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); exit(1); } if (sstatus.status != eslOK) { char *ebuf; n = sstatus.msg_size; total += n; ebuf = malloc(n); if ((size = readn(sock, ebuf, n)) == -1) { fprintf(stderr, "[%s:%d] read error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); exit(1); } fprintf(stderr, "ERROR (%d): %s\n", sstatus.status, ebuf); free(ebuf); goto COMPLETE; } n = sstatus.msg_size; if ((data = malloc(n)) == NULL) { fprintf(stderr, "[%s:%d] malloc error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); exit(1); } if ((size = readn(sock, data, n)) == -1) { fprintf(stderr, "[%s:%d] read error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); exit(1); } pli = p7_pipeline_Create(go, 100, 100, FALSE, (esl_opt_IsUsed(go, "--seqdb")) ? p7_SEARCH_SEQS : p7_SCAN_MODELS); stats = (HMMD_SEARCH_STATS *)data; /* copy the search stats */ w->elapsed = stats->elapsed; w->user = stats->user; w->sys = stats->sys; pli->nmodels = stats->nmodels; pli->nseqs = stats->nseqs; pli->n_past_msv = stats->n_past_msv; pli->n_past_bias = stats->n_past_bias; pli->n_past_vit = stats->n_past_vit; pli->n_past_fwd = stats->n_past_fwd; pli->Z = stats->Z; pli->domZ = stats->domZ; pli->Z_setby = stats->Z_setby; pli->domZ_setby = stats->domZ_setby; th = p7_tophits_Create(); free(th->unsrt); free(th->hit); th->N = stats->nhits; th->unsrt = (P7_HIT *)(data + sizeof(HMMD_SEARCH_STATS)); th->nreported = stats->nreported; th->nincluded = stats->nincluded; th->is_sorted_by_seqidx = FALSE; th->is_sorted_by_sortkey = TRUE; if ((th->hit = malloc(sizeof(void *) * stats->nhits)) == NULL) { fprintf(stderr, "[%s:%d] malloc error %d - %s\n", __FILE__, __LINE__, errno, strerror(errno)); exit(1); } for (i = 0; i < stats->nhits; i++) th->hit[i] = th->unsrt + i; /* loop through the hit list adjusting the pointers */ for (i = 0; i < stats->nhits; ++i) { char *ptr; char *base; P7_HIT *hit = th->unsrt + i; /* Given the sequence header: * >1 000101001 12343829483298 1234 * hmmpgmd hijacks the desc and acc fields to pass back domain * architecture and taxonomy id information to the hmmer webserver. * This means the fields are non-NULL, but don't point to real * addresses, so will break any attempt to print non-NULL desc * or acc fields. So we simply clear them out here */ hit->desc = NULL; hit->acc = NULL; hit->dcl = (P7_DOMAIN *)(data + ((char *)hit->dcl - (char *)NULL)); /* the hit string pointers contain the length of the string including * the null terminator at the end. */ if (hit->name != NULL) { char *name = malloc(16); sprintf(name, "%d", (int)(hit->name - (char *)NULL)); hit->name = name; } /* send the domains for this hit */ dcl = hit->dcl; base = (char *)dcl; ptr = (char *)(dcl + hit->ndom); for (j = 0; j < hit->ndom; ++j) { P7_ALIDISPLAY *ad = (P7_ALIDISPLAY *)ptr; dcl->ad = ad; ad->mem = ptr + sizeof(P7_ALIDISPLAY); /* readjust all the pointers to the new memory block */ if (ad->rfline != NULL) ad->rfline = base + (ad->rfline - (char *)NULL); if (ad->mmline != NULL) ad->mmline = base + (ad->mmline - (char *)NULL); if (ad->csline != NULL) ad->csline = base + (ad->csline - (char *)NULL); if (ad->model != NULL) ad->model = base + (ad->model - (char *)NULL); if (ad->mline != NULL) ad->mline = base + (ad->mline - (char *)NULL); if (ad->aseq != NULL) ad->aseq = base + (ad->aseq - (char *)NULL); if (ad->ppline != NULL) ad->ppline = base + (ad->ppline - (char *)NULL); if (ad->hmmname != NULL) ad->hmmname = base + (ad->hmmname - (char *)NULL); if (ad->hmmacc != NULL) ad->hmmacc = base + (ad->hmmacc - (char *)NULL); if (ad->hmmdesc != NULL) ad->hmmdesc = base + (ad->hmmdesc - (char *)NULL); if (ad->sqname != NULL) ad->sqname = base + (ad->sqname - (char *)NULL); if (ad->sqacc != NULL) ad->sqacc = base + (ad->sqacc - (char *)NULL); if (ad->sqdesc != NULL) ad->sqdesc = base + (ad->sqdesc - (char *)NULL); ptr += sizeof(P7_ALIDISPLAY) + ad->memsize; ++dcl; } } /* adjust the reported and included hits */ //th->is_sorted = FALSE; //p7_tophits_Sort(th); /* Print the results. */ if (scores) p7_tophits_Targets(stdout, th, pli, 120); fprintf(stdout, "\n\n"); if (ali) p7_tophits_Domains(stdout, th, pli, 120); fprintf(stdout, "\n\n"); p7_pli_Statistics(stdout, pli, w); p7_pipeline_Destroy(pli); free(th->hit); free(data); free(th); fprintf(stdout, "//\n"); fflush(stdout); fprintf(stdout, "Total bytes received %" PRId64 "\n", sstatus.msg_size); } else { printf("Error parsing input query\n"); } COMPLETE: if (abc) esl_alphabet_Destroy(abc); if (hmm) p7_hmm_Destroy(hmm); if (sq) esl_sq_Destroy(sq); } } free(seq); free(opts); esl_getopts_Destroy(go); esl_stopwatch_Destroy(w); close(sock); return 0; } #endif /*HMMER_THREADS*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: hmmc2.c 4690 2014-06-26 13:48:10Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/hmmc2.c $ *****************************************************************/ hmmer-3.1b2/src/alimask.c0000664361611702660230000005623512473612612014656 0ustar wheelerteddy/* Add mask line to a multiple sequence alignment */ #include "p7_config.h" #include #include #include #undef HMMER_THREADS #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_mpi.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msaweight.h" #include "esl_msacluster.h" #include "esl_stopwatch.h" #include "esl_vectorops.h" #include "esl_regexp.h" #include "hmmer.h" typedef struct { P7_BG *bg; P7_BUILDER *bld; } WORKER_INFO; #define ALPHOPTS "--amino,--dna,--rna" /* Exclusive options for alphabet choice */ #define CONOPTS "--fast,--hand" /* Exclusive options for model construction */ #define WGTOPTS "--wgsc,--wblosum,--wpb,--wnone,--wgiven" /* Exclusive options for relative weighting */ #define RANGEOPTS "--modelrange,--alirange,--ali2model,--model2ali" /* Exclusive options for relative weighting */ static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, { "-o", eslARG_OUTFILE,FALSE, NULL, NULL, NULL, NULL, NULL, "direct summary output to file , not stdout", 1 }, /* Selecting the alphabet rather than autoguessing it */ { "--amino", eslARG_NONE, FALSE, NULL, NULL, ALPHOPTS, NULL, NULL, "input alignment is protein sequence data", 2 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, ALPHOPTS, NULL, NULL, "input alignment is DNA sequence data", 2 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, ALPHOPTS, NULL, NULL, "input alignment is RNA sequence data", 2 }, /* Alternate model construction strategies */ { "--fast", eslARG_NONE,"default",NULL, NULL, CONOPTS, NULL, NULL, "assign cols w/ >= symfrac residues as consensus", 3 }, { "--hand", eslARG_NONE, FALSE, NULL, NULL, CONOPTS, NULL, NULL, "manual construction (requires reference annotation)", 3 }, { "--symfrac", eslARG_REAL, "0.5", NULL, "0<=x<=1", NULL, "--fast", NULL, "sets sym fraction controlling --fast construction", 3 }, { "--fragthresh",eslARG_REAL, "0.5", NULL, "0<=x<=1", NULL, NULL, NULL, "if L <= x*alen, tag sequence as a fragment", 3 }, /* Alternate relative sequence weighting strategies */ /* --wme not implemented in HMMER3 yet */ { "--wpb", eslARG_NONE,"default",NULL, NULL, WGTOPTS, NULL, NULL, "Henikoff position-based weights", 4 }, { "--wgsc", eslARG_NONE, NULL, NULL, NULL, WGTOPTS, NULL, NULL, "Gerstein/Sonnhammer/Chothia tree weights", 4 }, { "--wblosum", eslARG_NONE, NULL, NULL, NULL, WGTOPTS, NULL, NULL, "Henikoff simple filter weights", 4 }, { "--wnone", eslARG_NONE, NULL, NULL, NULL, WGTOPTS, NULL, NULL, "don't do any relative weighting; set all to 1", 4 }, { "--wgiven", eslARG_NONE, NULL, NULL, NULL, WGTOPTS, NULL, NULL, "use weights as given in MSA file", 4 }, { "--wid", eslARG_REAL, "0.62", NULL,"0<=x<=1", NULL,"--wblosum", NULL, "for --wblosum: set identity cutoff", 4 }, /* mask ranges */ { "--modelrange", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, RANGEOPTS, "range(s) for mask(s) in model coordinates", 5 }, { "--alirange", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, RANGEOPTS, "range(s) for mask(s) in alignment coordinates", 5 }, { "--apendmask", eslARG_NONE, NULL, NULL, NULL, NULL, WGTOPTS, NULL, "add to existing mask (default ignores to existing mask)", 5 }, { "--model2ali", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, RANGEOPTS, "given model ranges, print corresp. input alignment ranges", 5 }, { "--ali2model", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, RANGEOPTS, "given alignment ranges, print corresp. model ranges", 5 }, /* Other options */ { "--informat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "assert input alifile is in format (no autodetect)", 8 }, { "--outformat", eslARG_STRING, "Stockholm", NULL, NULL, NULL, NULL, NULL, "output alignment in format ", 2 }, { "--seed", eslARG_INT, "42", NULL, "n>=0", NULL, NULL, NULL, "set RNG seed to (if 0: one-time arbitrary seed)", 8 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "appending modelmask line to a multiple sequence alignments"; static int output_header(const ESL_GETOPTS *go, FILE *ofp, char *alifile, char *postmsafile); static int process_commandline(int argc, char **argv, ESL_GETOPTS **ret_go, char **ret_alifile, char **ret_postalifile) { ESL_GETOPTS *go = esl_getopts_Create(options); int status; if (esl_opt_ProcessEnvironment(go) != eslOK) { if (printf("Failed to process environment:\n%s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) { if (printf("Failed to parse command line:\n%s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_VerifyConfig(go) != eslOK) { if (printf("Failed to parse command line:\n%s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* help format: */ if (esl_opt_GetBoolean(go, "-h") == TRUE) { p7_banner(stdout, argv[0], banner); esl_usage(stdout, argv[0], usage); if (puts("\nBasic options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); if (puts("\nMask range options (format: --xxx 10-20,30-40 ) :") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 5, 2, 80); if (puts("\nOptions for selecting alphabet rather than guessing it:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); if (puts("\nAlternative model construction strategies:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); if (puts("\nAlternative relative sequence weighting strategies:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); if (puts("\nOther options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 8, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) > 2) { if (puts("Incorrect number of command line arguments.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_alifile = esl_opt_GetArg(go, 1)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_IsUsed(go, "--alirange") || esl_opt_IsUsed(go, "--modelrange") ) { if ((*ret_postalifile = esl_opt_GetArg(go, 2)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } } if (strcmp(*ret_alifile, "-") == 0 && ! esl_opt_IsOn(go, "--informat")) { if (puts("Must specify --informat to read from stdin ('-')") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } *ret_go = go; return eslOK; FAILURE: /* all errors handled here are user errors, so be polite. */ esl_usage(stdout, argv[0], usage); puts("\nwhere basic options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); printf("\nTo see more help on other available options, do:\n %s -h\n\n", argv[0]); esl_getopts_Destroy(go); exit(1); ERROR: if (go) esl_getopts_Destroy(go); exit(status); } static int output_header(const ESL_GETOPTS *go, FILE *ofp, char *alifile, char *postmsafile) { p7_banner(ofp, go->argv[0], banner); if (fprintf(ofp, "# input alignment file: %s\n", alifile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--alirange") || esl_opt_IsUsed(go, "--modelrange") ) { if (fprintf(ofp, "# output alignment file: %s\n", postmsafile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (esl_opt_IsUsed(go, "--alirange") && fprintf(ofp, "# alignment range: %s\n", esl_opt_GetString(go, "--alirange")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--modelrange") && fprintf(ofp, "# model range: %s\n", esl_opt_GetString(go, "--modelrange"))< 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--apendmask") && fprintf(ofp, "# add to existing mask: [on]\n" )< 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--model2ali") && fprintf(ofp, "# ali ranges for model range: %s\n", esl_opt_GetString(go, "--model2ali")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--ali2model") && fprintf(ofp, "# model ranges for ali range: %s\n", esl_opt_GetString(go, "--ali2model")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-o") && fprintf(ofp, "# output directed to file: %s\n", esl_opt_GetString(go, "-o")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--amino") && fprintf(ofp, "# input alignment is asserted as: protein\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--dna") && fprintf(ofp, "# input alignment is asserted as: DNA\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--rna") && fprintf(ofp, "# input alignment is asserted as: RNA\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--fast") && fprintf(ofp, "# model architecture construction: fast/heuristic\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--hand") && fprintf(ofp, "# model architecture construction: hand-specified by RF annotation\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--symfrac") && fprintf(ofp, "# sym fraction for model structure: %.3f\n", esl_opt_GetReal(go, "--symfrac")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--fragthresh") && fprintf(ofp, "# seq called frag if L <= x*alen: %.3f\n", esl_opt_GetReal(go, "--fragthresh")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wpb") && fprintf(ofp, "# relative weighting scheme: Henikoff PB\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wgsc") && fprintf(ofp, "# relative weighting scheme: G/S/C\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wblosum") && fprintf(ofp, "# relative weighting scheme: BLOSUM filter\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wnone") && fprintf(ofp, "# relative weighting scheme: none\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--wid") && fprintf(ofp, "# frac id cutoff for BLOSUM wgts: %f\n", esl_opt_GetReal(go, "--wid")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--seed")) { if (esl_opt_GetInteger(go, "--seed") == 0 && fprintf(ofp,"# random number seed: one-time arbitrary\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); else if ( fprintf(ofp,"# random number seed set to: %d\n", esl_opt_GetInteger(go, "--seed")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (fprintf(ofp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); return eslOK; } /* Function: p7_Alimask_MakeModel2AliMap() * Synopsis: Compute map of coordinate in the alignment corresponding to each model position. * * Args: msa - The alignment for which the mapped model is to be computed. We assume * the MSA has already been manipulated to account for model building * flags (e.g. weighting). * do_hand - TRUE when the model is to follow a hand-build RF line (which must be * part of the file. * symfraq - if weighted occupancy exceeds this value, include the column in the model. * map - int array into which the map values will be stored. Calling function * must allocate (msa->alen+1) ints. * * Returns: The number of mapped model positions. */ int p7_Alimask_MakeModel2AliMap(ESL_MSA *msa, int do_hand, float symfrac, int *map ) { int i = 0; int apos, idx; float r; /* weighted residue count */ float totwgt; /* weighted residue+gap count */ i = 0; if ( do_hand ) { if (msa->rf == NULL) p7_Fail("Model file does not contain an RF line, required for --hand.\n"); /* Watch for off-by-one. rf is [0..alen-1]*/ for (apos = 1; apos <= msa->alen; apos++) { if (!esl_abc_CIsGap(msa->abc, msa->rf[apos-1]) ) { map[i] = apos; i++; } } } else { for (apos = 1; apos <= msa->alen; apos++) { r = totwgt = 0.; for (idx = 0; idx < msa->nseq; idx++) { if (esl_abc_XIsResidue(msa->abc, msa->ax[idx][apos])) { r += msa->wgt[idx]; totwgt += msa->wgt[idx]; } else if (esl_abc_XIsGap(msa->abc, msa->ax[idx][apos])) { totwgt += msa->wgt[idx]; } else if (esl_abc_XIsMissing(msa->abc, msa->ax[idx][apos])) continue; } if (r > 0. && r / totwgt >= symfrac) { map[i] = apos; i++; } } } return i; } int main(int argc, char **argv) { int i,j; ESL_GETOPTS *go = NULL; /* command line processing */ ESL_STOPWATCH *w = esl_stopwatch_Create(); int status; ESL_MSA *msa = NULL; FILE *ofp = NULL; /* output file (default is stdout) */ ESL_ALPHABET *abc = NULL; /* digital alphabet */ char *alifile; /* name of the alignment file we're building HMMs from */ ESLX_MSAFILE *afp = NULL; /* open alifile */ int infmt = eslMSAFILE_UNKNOWN; /* autodetect alignment format by default. */ int outfmt = eslMSAFILE_STOCKHOLM; char *postmsafile; /* optional file to resave annotated, modified MSAs to */ FILE *postmsafp = NULL; /* open , or NULL */ int mask_range_cnt = 0; uint32_t mask_starts[100]; // over-the-top allocation. uint32_t mask_ends[100]; char *rangestr; char *range; int *map = NULL; /* map[i]=j, means model position i comes from column j of the alignment; 1..alen */ int keep_mm; /* Set processor specific flags */ impl_Init(); alifile = NULL; postmsafile = NULL; /* Parse the command line */ process_commandline(argc, argv, &go, &alifile, &postmsafile); keep_mm = esl_opt_IsUsed(go, "--apendmask"); /* Initialize what we can in the config structure (without knowing the alphabet yet). * Fields controlled by masters are set up in usual_master() or mpi_master() * Fields used by workers are set up in mpi_worker() */ ofp = NULL; infmt = eslMSAFILE_UNKNOWN; afp = NULL; abc = NULL; if (esl_opt_IsOn(go, "--informat")) { infmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--informat")); if (infmt == eslMSAFILE_UNKNOWN) p7_Fail("%s is not a recognized input sequence file format\n", esl_opt_GetString(go, "--informat")); } /* Determine output alignment file format */ outfmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--outformat")); if (outfmt == eslMSAFILE_UNKNOWN) p7_Fail(argv[0], "%s is not a recognized output MSA file format\n", esl_opt_GetString(go, "--outformat")); /* Parse the ranges */ if (esl_opt_IsUsed(go, "--alirange")) { esl_strdup(esl_opt_GetString(go, "--alirange"), -1, &rangestr) ; } else if (esl_opt_IsUsed(go, "--modelrange")) { esl_strdup(esl_opt_GetString(go, "--modelrange"), -1, &rangestr) ; } else if (esl_opt_IsUsed(go, "--model2ali")) { esl_strdup(esl_opt_GetString(go, "--model2ali"), -1, &rangestr) ; } else if (esl_opt_IsUsed(go, "--ali2model")) { esl_strdup(esl_opt_GetString(go, "--ali2model"), -1, &rangestr) ; } else { if (puts("Must specify mask range with --modelrange, --alirange, --model2ali, or --ali2model\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto ERROR; } while ( (status = esl_strtok(&rangestr, ",", &range) ) == eslOK) { status = esl_regexp_ParseCoordString(range, mask_starts + mask_range_cnt, mask_ends + mask_range_cnt ); if (status == eslESYNTAX) esl_fatal("range flags take coords ..; %s not recognized", range); if (status == eslFAIL) esl_fatal("Failed to find or coord in %s", range); mask_range_cnt++; } /* Start timing. */ esl_stopwatch_Start(w); /* Open files, set alphabet. * afp - open alignment file for input * abc - alphabet expected or guessed in ali file * postmsafp - open MSA output file * ofp - optional open output file, or stdout */ if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); else abc = NULL; status = eslx_msafile_Open(&abc, alifile, NULL, infmt, NULL, &afp); if (status != eslOK) eslx_msafile_OpenFailure(afp, status); if (esl_opt_IsUsed(go, "--alirange") || esl_opt_IsUsed(go, "--modelrange") ) { postmsafp = fopen(postmsafile, "w"); if (postmsafp == NULL) p7_Fail("Failed to MSA output file %s for writing", postmsafile); } if (esl_opt_IsUsed(go, "-o")) { ofp = fopen(esl_opt_GetString(go, "-o"), "w"); if (ofp == NULL) p7_Fail("Failed to open -o output file %s\n", esl_opt_GetString(go, "-o")); } else ofp = stdout; /* Looks like the i/o is set up successfully... * Initial output to the user */ output_header(go, ofp, alifile, postmsafile); /* cheery output header */ /* read the alignment */ if ((status = eslx_msafile_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); if (esl_opt_IsUsed(go, "--alirange") || esl_opt_IsUsed(go, "--modelrange") ) { /* add/modify mmline for the mask */ if (msa->mm == NULL) { ESL_ALLOC(msa->mm, msa->alen); keep_mm = FALSE; } if (!keep_mm) for (i=0; ialen; i++) msa->mm[i] = '.'; } // convert model coordinates to alignment coordinates, if necessary if (esl_opt_IsUsed(go, "--modelrange") || esl_opt_IsUsed(go, "--model2ali") || esl_opt_IsUsed(go, "--ali2model") ) { float symfrac = esl_opt_GetReal(go, "--symfrac"); int do_hand = esl_opt_IsOn(go, "--hand"); int L; //same as p7_builder relative_weights if (esl_opt_IsOn(go, "--wnone") ) { esl_vec_DSet(msa->wgt, msa->nseq, 1.); } else if (esl_opt_IsOn(go, "--wgiven") ) ; else if (esl_opt_IsOn(go, "--wpb") ) status = esl_msaweight_PB(msa); else if (esl_opt_IsOn(go, "--wgsc") ) status = esl_msaweight_GSC(msa); else if (esl_opt_IsOn(go, "--wblosum")) status = esl_msaweight_BLOSUM(msa, esl_opt_GetReal(go, "--wid")); if ((status = esl_msa_MarkFragments(msa, esl_opt_GetReal(go, "--fragthresh"))) != eslOK) goto ERROR; //build a map of model mask coordinates to alignment coords ESL_ALLOC(map, sizeof(int) * (msa->alen+1)); L = p7_Alimask_MakeModel2AliMap(msa, do_hand, symfrac, map ); if ( esl_opt_IsUsed(go, "--model2ali") ) { //print mapping printf ("model coordinates alignment coordinates\n"); for (i=0; i %8d..%-8d\n", mask_starts[i], mask_ends[i], map[mask_starts[i]-1], map[mask_ends[i]-1]); /* If I wanted to, I could print all the map values independently: printf("\n\n-----------\n"); printf("Map\n"); printf("---\n"); for (i=0; i %d\n", i+1, map[i]); */ } else if ( esl_opt_IsUsed(go, "--ali2model") ) { //print mapping (requires scanning the inverted map int alistart = 0; int aliend = 0; printf ("alignment coordinates model coordinates\n"); for (i=0; i %8d..%-8d\n", map[alistart], map[aliend], alistart+1, aliend+1); } } else { //convert the mask coords based on map for (i=0; imm[j-1] = 'm'; if ((status = eslx_msafile_Write(postmsafp, msa, outfmt)) != eslOK) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); } esl_stopwatch_Stop(w); if (esl_opt_IsOn(go, "-o")) fclose(ofp); if (postmsafp) fclose(postmsafp); if (afp) eslx_msafile_Close(afp); if (abc) esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); esl_stopwatch_Destroy(w); return 0; ERROR: return eslFAIL; } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/p7_profile.c0000664361611702660230000005344212473612614015302 0ustar wheelerteddy/* Routines for the P7_PROFILE structure - Plan 7's search profile * * 1. The P7_PROFILE object: allocation, initialization, destruction. * 2. Access methods. * 3. Debugging and development code. * 4. Unit tests. * 5. Test driver. * * See also: * modelconfig.c : routines that configure a profile given an HMM */ #include "p7_config.h" #include #ifdef HAVE_MPI #include #endif #include "easel.h" #include "esl_vectorops.h" #include "hmmer.h" /***************************************************************** * 1. The P7_PROFILE object: allocation, initialization, destruction. *****************************************************************/ /* Function: p7_profile_Create() * Synopsis: Allocates a profile. * * Purpose: Allocates for a profile of up to nodes, for digital * alphabet . * * Because this function might be in the critical path (in * hmmscan, for example), we leave much of the model * unintialized, including scores and length model * probabilities. The call is what * sets these. * * The alignment mode is set to . The * reference pointer abc> is set to . * * Returns: a pointer to the new profile. * * Throws: on allocation error. * * Xref: STL11/125. */ P7_PROFILE * p7_profile_Create(int allocM, const ESL_ALPHABET *abc) { P7_PROFILE *gm = NULL; int x; int status; /* level 0 */ ESL_ALLOC(gm, sizeof(P7_PROFILE)); gm->tsc = NULL; gm->rsc = NULL; gm->rf = NULL; gm->mm = NULL; gm->cs = NULL; gm->consensus = NULL; /* level 1 */ ESL_ALLOC(gm->tsc, sizeof(float) * allocM * p7P_NTRANS); ESL_ALLOC(gm->rsc, sizeof(float *) * abc->Kp); ESL_ALLOC(gm->rf, sizeof(char) * (allocM+2)); /* yes, +2: each is (0)1..M, +trailing \0 */ ESL_ALLOC(gm->mm, sizeof(char) * (allocM+2)); ESL_ALLOC(gm->cs, sizeof(char) * (allocM+2)); ESL_ALLOC(gm->consensus, sizeof(char) * (allocM+2)); gm->rsc[0] = NULL; /* level 2 */ ESL_ALLOC(gm->rsc[0], sizeof(float) * abc->Kp * (allocM+1) * p7P_NR); for (x = 1; x < abc->Kp; x++) gm->rsc[x] = gm->rsc[0] + x * (allocM+1) * p7P_NR; /* Initialize some edge pieces of memory that are never used, * and are only present for indexing convenience. */ esl_vec_FSet(gm->tsc, p7P_NTRANS, -eslINFINITY); /* node 0 nonexistent, has no transitions */ if (allocM > 1) { p7P_TSC(gm, 1, p7P_DM) = -eslINFINITY; /* delete state D_1 is wing-retracted */ p7P_TSC(gm, 1, p7P_DD) = -eslINFINITY; } for (x = 0; x < abc->Kp; x++) { p7P_MSC(gm, 0, x) = -eslINFINITY; /* no emissions from nonexistent M_0... */ p7P_ISC(gm, 0, x) = -eslINFINITY; /* or I_0... */ /* I_M is initialized in profile config, when we know actual M, not just allocated max M */ } x = esl_abc_XGetGap(abc); /* no emission can emit/score gap characters */ esl_vec_FSet(gm->rsc[x], (allocM+1)*p7P_NR, -eslINFINITY); x = esl_abc_XGetMissing(abc); /* no emission can emit/score missing data characters */ esl_vec_FSet(gm->rsc[x], (allocM+1)*p7P_NR, -eslINFINITY); /* Set remaining info */ gm->mode = p7_NO_MODE; gm->L = 0; gm->allocM = allocM; gm->M = 0; gm->max_length = -1; gm->nj = 0.0f; gm->roff = -1; gm->eoff = -1; gm->offs[p7_MOFFSET] = -1; gm->offs[p7_FOFFSET] = -1; gm->offs[p7_POFFSET] = -1; gm->name = NULL; gm->acc = NULL; gm->desc = NULL; gm->rf[0] = 0; /* RF line is optional annotation; this flags that it's not set yet */ gm->mm[0] = 0; /* likewise for MM annotation line */ gm->cs[0] = 0; /* likewise for CS annotation line */ gm->consensus[0] = 0; for (x = 0; x < p7_NEVPARAM; x++) gm->evparam[x] = p7_EVPARAM_UNSET; for (x = 0; x < p7_NCUTOFFS; x++) gm->cutoff[x] = p7_CUTOFF_UNSET; for (x = 0; x < p7_MAXABET; x++) gm->compo[x] = p7_COMPO_UNSET; gm->abc = abc; return gm; ERROR: p7_profile_Destroy(gm); return NULL; } /* Function: p7_profile_Copy() * Synopsis: Copy a profile. * * Purpose: Copies profile to profile , where * has already been allocated to be of sufficient size. * * Returns: on success. * * Throws: on allocation error; if is too small * to fit . */ int p7_profile_Copy(const P7_PROFILE *src, P7_PROFILE *dst) { int x,z; int status; if (src->M > dst->allocM) ESL_EXCEPTION(eslEINVAL, "destination profile is too small to hold a copy of source profile"); esl_vec_FCopy(src->tsc, src->M*p7P_NTRANS, dst->tsc); for (x = 0; x < src->abc->Kp; x++) esl_vec_FCopy(src->rsc[x], (src->M+1)*p7P_NR, dst->rsc[x]); for (x = 0; x < p7P_NXSTATES; x++) esl_vec_FCopy(src->xsc[x], p7P_NXTRANS, dst->xsc[x]); dst->mode = src->mode; dst->L = src->L; dst->allocM = src->allocM; dst->M = src->M; dst->max_length = src->max_length; dst->nj = src->nj; dst->roff = src->roff; dst->eoff = src->eoff; for (x = 0; x < p7_NOFFSETS; ++x) dst->offs[x] = src->offs[x]; if (dst->name != NULL) free(dst->name); if (dst->acc != NULL) free(dst->acc); if (dst->desc != NULL) free(dst->desc); if ((status = esl_strdup(src->name, -1, &(dst->name))) != eslOK) return status; if ((status = esl_strdup(src->acc, -1, &(dst->acc))) != eslOK) return status; if ((status = esl_strdup(src->desc, -1, &(dst->desc))) != eslOK) return status; strcpy(dst->rf, src->rf); /* RF is optional: if it's not set, *rf=0, and strcpy still works fine */ strcpy(dst->mm, src->mm); /* MM is also optional annotation */ strcpy(dst->cs, src->cs); /* CS is also optional annotation */ strcpy(dst->consensus, src->consensus); /* consensus though is always present on a valid profile */ for (z = 0; z < p7_NEVPARAM; z++) dst->evparam[z] = src->evparam[z]; for (z = 0; z < p7_NCUTOFFS; z++) dst->cutoff[z] = src->cutoff[z]; for (z = 0; z < p7_MAXABET; z++) dst->compo[z] = src->compo[z]; return eslOK; } /* Function: p7_profile_Clone() * Synopsis: Duplicates a profile. * * Purpose: Duplicate profile ; return a pointer * to the newly allocated copy. */ P7_PROFILE * p7_profile_Clone(const P7_PROFILE *gm) { P7_PROFILE *g2 = NULL; int status; if ((g2 = p7_profile_Create(gm->allocM, gm->abc)) == NULL) return NULL; if ((status = p7_profile_Copy(gm, g2)) != eslOK) goto ERROR; return g2; ERROR: p7_profile_Destroy(g2); return NULL; } /* Function: p7_profile_SetNullEmissions() * Synopsis: Set all emission scores to zero (experimental). * * Purpose: Set all emission scores in profile to zero. * This makes the profile a null model, with all the same * length distributions as the original model, but * the emission probabilities of the background. * * Written to test the idea that score statistics will be * even better behaved when using a null model with the * same length distribution as the search model. * * Returns: on success. */ int p7_profile_SetNullEmissions(P7_PROFILE *gm) { int x; for (x = 0; x <= gm->abc->K; x++) esl_vec_FSet(gm->rsc[x], (gm->M+1)*p7P_NR, 0.0); /* canonicals */ for (x = gm->abc->K+1; x <= gm->abc->Kp-3; x++) esl_vec_FSet(gm->rsc[x], (gm->M+1)*p7P_NR, 0.0); /* noncanonicals */ return eslOK; } /* Function: p7_profile_Reuse() * Synopsis: Prepare profile to be re-used for a new HMM. * * Purpose: Prepare profile 's memory to be re-used * for a new HMM. */ int p7_profile_Reuse(P7_PROFILE *gm) { /* name, acc, desc annotation is dynamically allocated for each HMM */ if (gm->name != NULL) { free(gm->name); gm->name = NULL; } if (gm->acc != NULL) { free(gm->acc); gm->acc = NULL; } if (gm->desc != NULL) { free(gm->desc); gm->desc = NULL; } /* set annotations to empty strings */ gm->rf[0] = 0; gm->mm[0] = 0; gm->cs[0] = 0; gm->consensus[0] = 0; /* reset some other things, but leave the rest alone. */ gm->mode = p7_NO_MODE; gm->L = 0; gm->M = 0; gm->nj = 0.0f; gm->roff = -1; gm->eoff = -1; gm->offs[p7_MOFFSET] = -1; gm->offs[p7_FOFFSET] = -1; gm->offs[p7_POFFSET] = -1; return eslOK; } /* Function: p7_profile_Sizeof() * Synopsis: Return the allocated size of a P7_PROFILE. * * Purpose: Return the allocated size of a , in bytes. */ size_t p7_profile_Sizeof(P7_PROFILE *gm) { size_t n = 0; /* these mirror malloc()'s in p7_profile_Create(); maintain one:one correspondence for maintainability */ n += sizeof(P7_PROFILE); n += sizeof(float) * gm->allocM * p7P_NTRANS; /* gm->tsc */ n += sizeof(float *) * gm->abc->Kp; /* gm->rsc */ n += sizeof(char) * (gm->allocM+2); /* gm->rf */ n += sizeof(char) * (gm->allocM+2); /* gm->mm */ n += sizeof(char) * (gm->allocM+2); /* gm->cs */ n += sizeof(char) * (gm->allocM+2); /* gm->consensus */ n += sizeof(float) * gm->abc->Kp * (gm->allocM+1) * p7P_NR; /* gm->rsc[0] */ return n; } /* Function: p7_profile_Destroy() * Synopsis: Frees a profile. * * Purpose: Frees a profile . * * Returns: (void). * * Xref: STL11/125. */ void p7_profile_Destroy(P7_PROFILE *gm) { if (gm != NULL) { if (gm->rsc != NULL && gm->rsc[0] != NULL) free(gm->rsc[0]); if (gm->tsc != NULL) free(gm->tsc); if (gm->rsc != NULL) free(gm->rsc); if (gm->name != NULL) free(gm->name); if (gm->acc != NULL) free(gm->acc); if (gm->desc != NULL) free(gm->desc); if (gm->rf != NULL) free(gm->rf); if (gm->mm != NULL) free(gm->mm); if (gm->cs != NULL) free(gm->cs); if (gm->consensus != NULL) free(gm->consensus); free(gm); } return; } /***************************************************************** * 2. Access methods. *****************************************************************/ /* Function: p7_profile_IsLocal() * Synopsis: Return TRUE if profile is in a local alignment mode. * * Purpose: Return if profile is in a local alignment mode. */ int p7_profile_IsLocal(const P7_PROFILE *gm) { if (gm->mode == p7_UNILOCAL || gm->mode == p7_LOCAL) return TRUE; return FALSE; } /* Function: p7_profile_IsMultihit() * Synopsis: Return TRUE if profile is in a multihit alignment mode. * * Purpose: Return if profile is in a multihit alignment mode. */ int p7_profile_IsMultihit(const P7_PROFILE *gm) { if (gm->mode == p7_LOCAL || gm->mode == p7_GLOCAL) return TRUE; return FALSE; } /* Function: p7_profile_GetT() * * Purpose: Convenience function that looks up a transition score in * profile for a transition from state type in * node to state type in node . For unique * state types that aren't in nodes (, for example), the * value is ignored, though it would be customarily passed as 0. * Return the transition score in . * * This function would almost always be called on profile * traces, of course, but it's possible to call it * on core traces (for example, if you were to try to * trace_Dump() during HMM construction, and you wanted * to see detailed profile scores for that trace). Core traces * can contain "states" used solely to signal * a sequence fragment, treated as missing data. Transitions * involving states are assigned zero score here. * Other transitions that occur only in core traces * (B->I0, B->D1, I_M->E) also silently get a zero score. * This is safe, because we would only ever use this number * for display, not as a log probability somewhere. * * Returns: on success, and <*ret_tsc> contains the requested * transition score. * * Throws: if a nonexistent transition is requested. Now * <*ret_tsc> is set to $-\infty$. * */ int p7_profile_GetT(const P7_PROFILE *gm, char st1, int k1, char st2, int k2, float *ret_tsc) { float tsc = 0.0f; int status; /* Detect transitions that can only come from core traces; * return 0.0 as a special case (this is only done for displaying * "scores" in trace dumps, during debugging.) */ if (st1 == p7T_X || st2 == p7T_X) return eslOK; if (st1 == p7T_B && st2 == p7T_I) return eslOK; if (st1 == p7T_B && st2 == p7T_D) return eslOK; if (st1 == p7T_I && st1 == p7T_E) return eslOK; /* Now we're sure this is a profile trace, as it should usually be. */ switch (st1) { case p7T_S: break; case p7T_T: break; case p7T_N: switch (st2) { case p7T_B: tsc = gm->xsc[p7P_N][p7P_MOVE]; break; case p7T_N: tsc = gm->xsc[p7P_N][p7P_LOOP]; break; default: ESL_XEXCEPTION(eslEINVAL, "bad transition %s->%s", p7_hmm_DecodeStatetype(st1), p7_hmm_DecodeStatetype(st2)); } break; case p7T_B: switch (st2) { case p7T_M: tsc = p7P_TSC(gm, k2-1, p7P_BM); break; /* remember, B->Mk is stored in [k-1][p7P_BM] */ default: ESL_XEXCEPTION(eslEINVAL, "bad transition %s->%s", p7_hmm_DecodeStatetype(st1), p7_hmm_DecodeStatetype(st2)); } break; case p7T_M: switch (st2) { case p7T_M: tsc = p7P_TSC(gm, k1, p7P_MM); break; case p7T_I: tsc = p7P_TSC(gm, k1, p7P_MI); break; case p7T_D: tsc = p7P_TSC(gm, k1, p7P_MD); break; case p7T_E: if (k1 != gm->M && ! p7_profile_IsLocal(gm)) ESL_EXCEPTION(eslEINVAL, "local end transition (M%d of %d) in non-local model", k1, gm->M); tsc = 0.0f; /* by def'n in H3 local alignment */ break; default: ESL_XEXCEPTION(eslEINVAL, "bad transition %s_%d->%s", p7_hmm_DecodeStatetype(st1), k1, p7_hmm_DecodeStatetype(st2)); } break; case p7T_D: switch (st2) { case p7T_M: tsc = p7P_TSC(gm, k1, p7P_DM); break; case p7T_D: tsc = p7P_TSC(gm, k1, p7P_DD); break; case p7T_E: if (k1 != gm->M && ! p7_profile_IsLocal(gm)) ESL_EXCEPTION(eslEINVAL, "local end transition (D%d of %d) in non-local model", k1, gm->M); tsc = 0.0f; /* by def'n in H3 local alignment */ break; default: ESL_XEXCEPTION(eslEINVAL, "bad transition %s_%d->%s", p7_hmm_DecodeStatetype(st1), k1, p7_hmm_DecodeStatetype(st2)); } break; case p7T_I: switch (st2) { case p7T_M: tsc = p7P_TSC(gm, k1, p7P_IM); break; case p7T_I: tsc = p7P_TSC(gm, k1, p7P_II); break; default: ESL_XEXCEPTION(eslEINVAL, "bad transition %s_%d->%s", p7_hmm_DecodeStatetype(st1), k1, p7_hmm_DecodeStatetype(st2)); } break; case p7T_E: switch (st2) { case p7T_C: tsc = gm->xsc[p7P_E][p7P_MOVE]; break; case p7T_J: tsc = gm->xsc[p7P_E][p7P_LOOP]; break; default: ESL_XEXCEPTION(eslEINVAL, "bad transition %s->%s", p7_hmm_DecodeStatetype(st1), p7_hmm_DecodeStatetype(st2)); } break; case p7T_J: switch (st2) { case p7T_B: tsc = gm->xsc[p7P_J][p7P_MOVE]; break; case p7T_J: tsc = gm->xsc[p7P_J][p7P_LOOP]; break; default: ESL_XEXCEPTION(eslEINVAL, "bad transition %s->%s", p7_hmm_DecodeStatetype(st1), p7_hmm_DecodeStatetype(st2)); } break; case p7T_C: switch (st2) { case p7T_T: tsc = gm->xsc[p7P_C][p7P_MOVE]; break; case p7T_C: tsc = gm->xsc[p7P_C][p7P_LOOP]; break; default: ESL_XEXCEPTION(eslEINVAL, "bad transition %s->%s", p7_hmm_DecodeStatetype(st1), p7_hmm_DecodeStatetype(st2)); } break; default: ESL_XEXCEPTION(eslEINVAL, "bad state type %d in traceback", st1); } *ret_tsc = tsc; return eslOK; ERROR: *ret_tsc = -eslINFINITY; return status; } /***************************************************************** * 3. Debugging and development code. *****************************************************************/ /* Function: p7_profile_Validate() * * Purpose: Validates the internals of the generic profile structure * . * * TODO: currently this function is incomplete, and only * validates the entry distribution. * * Returns: if internals look fine. Returns * if something is wrong, and leaves an error message in * if caller passed it non-. */ int p7_profile_Validate(const P7_PROFILE *gm, char *errbuf, float tol) { int status; int k; double *pstart = NULL; ESL_ALLOC(pstart, sizeof(double) * (gm->M+1)); pstart[0] = 0.0; /* Validate the entry distribution. * In a glocal model, this is an explicit probability distribution, * corresponding to left wing retraction. * In a local model, this is an implicit probability distribution, * corresponding to the implicit local alignment model, and we have * to calculate the M(M+1)/2 fragment probabilities accordingly. */ if (p7_profile_IsLocal(gm)) { /* the code block below is also in emit.c:sample_endpoints */ for (k = 1; k <= gm->M; k++) pstart[k] = exp(p7P_TSC(gm, k-1, p7P_BM)) * (gm->M - k + 1); /* multiply p_ij by the number of exits j */ } else { for (k = 1; k <= gm->M; k++) pstart[k] = exp(p7P_TSC(gm, k-1, p7P_BM)); } if (esl_vec_DValidate(pstart, gm->M+1, tol, NULL) != eslOK) ESL_XFAIL(eslFAIL, errbuf, "profile entry distribution is not normalized properly"); free(pstart); return eslOK; ERROR: if (pstart != NULL) free(pstart); return eslFAIL; } /* Function: p7_profile_Compare() * Synopsis: Compare two profiles for equality. * * Purpose: Compare two profiles and to each other. * Return if they're identical, and if * they differ. Floating-point probabilities are * compared for equality within a fractional tolerance * . Only compares the scores, not any annotation * on the profiles. */ int p7_profile_Compare(P7_PROFILE *gm1, P7_PROFILE *gm2, float tol) { int x; if (gm1->mode != gm2->mode) return eslFAIL; if (gm1->M != gm2->M) return eslFAIL; if (esl_vec_FCompare(gm1->tsc, gm2->tsc, gm1->M*p7P_NTRANS, tol) != eslOK) return eslFAIL; for (x = 0; x < gm1->abc->Kp; x++) if (esl_vec_FCompare(gm1->rsc[x], gm2->rsc[x], (gm1->M+1)*p7P_NR, tol) != eslOK) return eslFAIL; for (x = 0; x < p7P_NXSTATES; x++) if (esl_vec_FCompare(gm1->xsc[x], gm2->xsc[x], p7P_NXTRANS, tol) != eslOK) return eslFAIL; return eslOK; } /***************************************************************** * 4. Unit tests *****************************************************************/ #ifdef p7PROFILE_TESTDRIVE #include "esl_alphabet.h" #include "esl_random.h" static void utest_Compare(void) { ESL_RANDOMNESS *r = esl_randomness_CreateFast(42); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_PROFILE *gm2 = NULL; int M = 200; int L = 400; p7_hmm_Sample(r, M, abc, &hmm); /* master and worker's sampled profiles are identical */ bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); gm2 = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 400, p7_LOCAL); p7_ProfileConfig(hmm, bg, gm2, 400, p7_LOCAL); p7_ReconfigLength(gm, L); p7_ReconfigLength(gm2, L); if (p7_profile_Compare(gm, gm2, 0.001) != eslOK) p7_Die("identical profile comparison failed"); p7_profile_Destroy(gm); p7_profile_Destroy(gm2); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); return; } #endif /*p7PROFILE_TESTDRIVE*/ /***************************************************************** * 5. Test driver *****************************************************************/ #ifdef p7PROFILE_TESTDRIVE /* gcc -o profile_utest -g -Wall -I../easel -L../easel -I. -L. -Dp7PROFILE_TESTDRIVE p7_profile.c -lhmmer -leasel -lm * ./profile_utest */ #include "esl_getopts.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for p7_profile.c"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); utest_Compare(); esl_getopts_Destroy(go); return 0; } #endif /*p7PROFILE_TESTDRIVE*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/p7_profile.c $ * SVN $Id: p7_profile.c 3960 2012-03-22 21:42:50Z wheelert $ *****************************************************************/ hmmer-3.1b2/src/generic_fwdback_chk.c0000664361611702660230000010124512473612613017150 0ustar wheelerteddy/* Forward/Backward, checkpointed: generic (non-SIMD) demonstration version. * * Contents: * 1. Forwards: checkpointed fill, Forwards nat score. * 2. Backwards: linear-memory back pass, recovering posterior-decoded bands. * 3. Benchmark driver. * 4. Example main(). * 5. References. * 6. Copyright and license information. */ #include "p7_config.h" #include "easel.h" #include "hmmer.h" #include "p7_gmxchk.h" #include "p7_gbands.h" static inline void posterior_decode_row(int rowi, float *fwd, float *bck, int M, float overall_sc, P7_GBANDS *bnd); /***************************************************************** *= 1. Forwards: checkpointed fill, Forwards nat score *****************************************************************/ /* forward_row() * * inlined function, because we have to call the row calculation in * several places in a checkpointed calculation, including in the Backwards() * routine. * */ static inline void forward_row(const ESL_DSQ *dsq, const P7_PROFILE *gm, P7_GMXCHK *gxc, const float *dpp, float *dpc, int i) { const float *tsc = gm->tsc; const float *rsc = gm->rsc[dsq[i]] + p7P_NR; /* +NR skips _0, ahead to _1 */ int M = gm->M; float esc = p7_profile_IsLocal(gm) ? 0. : -eslINFINITY; int k; float sc, dc; float xB = *(dpp + (M+1)*p7G_NSCELLS + p7GC_B); float xE = -eslINFINITY; float mvp, ivp, dvp; *dpc++ = -eslINFINITY; /* M_0 */ *dpc++ = -eslINFINITY; /* I_0 */ *dpc++ = -eslINFINITY; /* D_0 */ dc = -eslINFINITY; mvp = *dpp++; ivp = *dpp++; dvp = *dpp++; for (k = 1; k < M; k++) { /* match state */ *dpc++ = sc = *rsc++ /* emission(M_k, x_i) */ + p7_FLogsum(p7_FLogsum( mvp + *(tsc+p7P_MM), /* M(i-1,k-1) * t_M(k-1)->M(k) */ ivp + *(tsc+p7P_IM)), /* I(i-1,k-1) * t_I(k-1)->M(k) */ p7_FLogsum( dvp + *(tsc+p7P_DM), /* D(i-1,k-1) * t_D(k-1)->M(k) */ xB + *(tsc+p7P_BM))); /* B(i-1) * t_B->M_k */ tsc += p7P_NTRANS; /* advance to the t_X(k) transitions now */ /* pick up values from prev row, (k)... at next loop iteration they're magically the k-1 values we need for M calc */ mvp = *dpp++; ivp = *dpp++; dvp = *dpp++; /* insert state */ *dpc++ = *rsc++ /* emission(I_k, x_i) */ + p7_FLogsum( mvp + *(tsc+p7P_MI), /* M(i-1,k) * t_M(k)->I(k) */ ivp + *(tsc+p7P_II)); /* I(i-1,k) * t_I(k)->I(k) */ /* E state accumulation */ xE = p7_FLogsum( p7_FLogsum(sc + esc, dc + esc), xE); /* delayed store of delete state; then calculate/push NEXT D_k+1 */ *dpc++ = dc; dc = p7_FLogsum( sc + *(tsc+p7P_MD), /* M(i,k) * t_M(k)->D(k+1) */ dc + *(tsc+p7P_DD)); /* D(i,k) * t_D(k)->D(k+1) */ } /* unrolled match state M_M */ *dpc++ = sc = *rsc++ /* emission(M_M, x_i) */ + p7_FLogsum(p7_FLogsum( mvp + *(tsc + p7P_MM), /* M(i-1,M-1) * t_MM */ ivp + *(tsc + p7P_IM)), /* I(i-1,M-1) * t_IM */ p7_FLogsum( dvp + *(tsc + p7P_DM), /* D(i-1,M-1) * t_DM */ xB + *(tsc + p7P_BM))); /* B(i-1) * t_BM_M */ *dpc++ = -eslINFINITY; /* I_M: no such state */ *dpc++ = dc; /* delayed store of D_M */ dpp += 3; /* now dpc and dpp are sitting on [ENJBC] special state arrays for current, prev row. */ dpc[p7GC_E] = p7_FLogsum( p7_FLogsum(sc, dc), xE); /* E state update += D_M + M_M */ dpc[p7GC_N] = dpp[p7GC_N] + gm->xsc[p7P_N][p7P_LOOP]; /* N state = N(i-1)->N(i) */ dpc[p7GC_JJ] = dpp[p7GC_J] + gm->xsc[p7P_J][p7P_LOOP]; /* J->J emission partial path */ dpc[p7GC_J] = p7_FLogsum( dpc[p7GC_JJ], dpc[p7GC_E] + gm->xsc[p7P_E][p7P_LOOP]); /* J state = JJ + E->J */ dpc[p7GC_B] = p7_FLogsum( dpc[p7GC_N] + gm->xsc[p7P_N][p7P_MOVE], dpc[p7GC_J] + gm->xsc[p7P_J][p7P_MOVE]); /* B state = N->B + J->B */ dpc[p7GC_CC] = dpp[p7GC_C] + gm->xsc[p7P_C][p7P_LOOP]; /* C->C emission partial path */ dpc[p7GC_C] = p7_FLogsum( dpc[p7GC_CC], dpc[p7GC_E] + gm->xsc[p7P_E][p7P_MOVE]); /* C state = CC + E->C */ } /* Function: p7_GForwardCheckpointed() * Synopsis: Forward pass in a checkpointed generic DP matrix * * Purpose: Compute the Forward pass of a comparison of model * against digital sequence of length , resulting * in a filled DP matrix and (optionally) * a Forward score in nats. * * The caller has already allocated and laid out * appropriately for the M> by comparison, either * with or . * * The caller has also already configured the length model * in for the target sequence length , for example * by calling . * * Args: dsq : digital sequence target * L : length of in residues * gm : query profile * gxc : checkpointed DP matrix to fill * opt_sc : optRETURN: Forward raw lod score, in nats * * Returns: on success. contains checkpointed DP * Forward matrix, ready for backwards pass. * is the raw lod score in nats. * * Throws: (no abnormal error conditions) */ int p7_GForwardCheckpointed(const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMXCHK *gxc, float *opt_sc) { float *dpc; /* ptr to current row */ float *dpp; /* ptr to previous row */ int M = gm->M; int w; /* size of a segment of DP rows ended w/ one checkpointed row, inclusive */ int b; /* counts down over segment number (Rb+Rc..1); each segment has r+1 rows */ int i,k; /* Initialization of the zero row, fwd[0], inc. ENJBC */ dpc = dpp = gxc->dp[gxc->R0-1]; /* i.e., dp[2], the reserved fwd[0] row; 0,1 are reserved for tmp space and backwards calculation */ for (k = 0; k < (M+1)*p7G_NSCELLS; k++) /* MID[0..M] are all impossible */ *dpc++ = -eslINFINITY; *dpc++ = -eslINFINITY; /* E; need seq to get here */ *dpc++ = 0; /* N */ *dpc++ = -eslINFINITY; /* JJ; need seq to get here */ *dpc++ = -eslINFINITY; /* J; need seq to get here */ *dpc++ = gm->xsc[p7P_N][p7P_MOVE]; /* B; from N->B only */ *dpc++ = -eslINFINITY; /* CC; need seq to get here */ *dpc = -eslINFINITY; /* C; need seq to get here */ /* Phase one: "a" region: uncheckpointed rows of matrix */ for (i = 1; i <= gxc->La; i++) { dpc = gxc->dp[gxc->R0+gxc->R]; gxc->R++; /* idiomatic for "get next saved row" */ forward_row(dsq, gm, gxc, dpp, dpc, i); dpp = dpc; } /* Phase two: "b" and "c" regions: partially and fully checkpointed */ /* i= gxc->La+1, from previous loop's end */ for (b = gxc->Rb + gxc->Rc, w = (gxc->Rb ? gxc->Lb : gxc->Rc+1); i <= L; i++) { if (! (--w)) { /* we're on the last row in segment: this row is saved */ dpc = gxc->dp[gxc->R0+gxc->R]; gxc->R++; /* idiomatic for "get next saved row" */ w=b; /* next segment has this many rows, ending in a saved row */ b--; /* decrement segment number counter; last segment is r=1 */ } else dpc = gxc->dp[i%2]; /* idiomatic for "get next temp row", 0 or 1; i%2 is to make sure dpp != dpc */ forward_row(dsq, gm, gxc, dpp, dpc, i); dpp = dpc; } gxc->M = M; gxc->L = L; gxc->R = gxc->Ra + gxc->Rb + gxc->Rc; if (opt_sc) *opt_sc = gxc->dp[gxc->R0+gxc->R-1][(M+1)*p7G_NSCELLS + p7GC_C] + gm->xsc[p7P_C][p7P_MOVE]; return eslOK; } /*-------------------- end, forwards ----------------------------*/ /***************************************************************** *= 2. Backwards: linear-memory back pass, recovering posterior-decoded bands *****************************************************************/ static inline void backward_row(const ESL_DSQ *dsq, const P7_PROFILE *gm, P7_GMXCHK *gxc, const float *dpp, float *dpc, int i) { const float * const tsc = gm->tsc; /* both the parameters and the pointer itself are constant */ const float * const rsc = gm->rsc[dsq[i+1]]; int M = gm->M; float esc = p7_profile_IsLocal(gm) ? 0 : -eslINFINITY; int k; XMR(dpc,p7GC_C) = XMR(dpc,p7GC_CC) = XMR(dpp,p7GC_C) + gm->xsc[p7P_C][p7P_LOOP]; XMR(dpc,p7GC_B) = MMR(dpp,1) + TSC(p7P_BM,0) + MSC(1); /* t_BM index = 0 because it's stored off by one */ for (k = 2; k <= M; k++) XMR(dpc,p7GC_B) = p7_FLogsum( XMR(dpc,p7GC_B), MMR(dpp,k) + TSC(p7P_BM,k-1) + MSC(k)); XMR(dpc,p7GC_J) = XMR(dpc,p7GC_JJ) = p7_FLogsum( XMR(dpp,p7GC_J) + gm->xsc[p7P_J][p7P_LOOP], XMR(dpc,p7GC_B) + gm->xsc[p7P_J][p7P_MOVE]); XMR(dpc,p7GC_N) = p7_FLogsum( XMR(dpp,p7GC_N) + gm->xsc[p7P_N][p7P_LOOP], XMR(dpc,p7GC_B) + gm->xsc[p7P_N][p7P_MOVE]); XMR(dpc,p7GC_E) = p7_FLogsum( XMR(dpc,p7GC_J) + gm->xsc[p7P_E][p7P_LOOP], XMR(dpc,p7GC_C) + gm->xsc[p7P_E][p7P_MOVE]); DMR(dpc,M) = XMR(dpc,p7GC_E); IMR(dpc,M) = -eslINFINITY; MMR(dpc,M) = XMR(dpc,p7GC_E); for (k = M-1; k >= 1; k--) { DMR(dpc,k) = p7_FLogsum( p7_FLogsum( DMR(dpc, k+1) + TSC(p7P_DD,k), XMR(dpc, p7GC_E) + esc), MMR(dpp,k+1) + TSC(p7P_DM,k) + MSC(k+1)); IMR(dpc,k) = p7_FLogsum( MMR(dpp,k+1) + TSC(p7P_IM,k) + MSC(k+1), IMR(dpp,k) + TSC(p7P_II,k) + ISC(k)); MMR(dpc,k) = p7_FLogsum( p7_FLogsum(MMR(dpp,k+1) + TSC(p7P_MM,k) + MSC(k+1), IMR(dpp,k) + TSC(p7P_MI,k) + ISC(k)), p7_FLogsum(XMR(dpc,p7GC_E) + esc, DMR(dpc,k+1) + TSC(p7P_MD,k))); } } /* worry about small seq cases: L=0..2 */ int p7_GBackwardCheckpointed(const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMXCHK *gxc, P7_GBANDS *bnd, float *opt_sc) { float const *tsc = gm->tsc; float const *rsc = NULL; int M = gm->M; float esc = p7_profile_IsLocal(gm) ? 0 : -eslINFINITY; float *fwd; float *bck; float *dpp; /* "previous" row (i-1 for forward, i+1 for backward) */ int i,i2,k,b,w,s; float overall_sc = gxc->dp[gxc->R0+gxc->R-1][(M+1)*p7G_NSCELLS + p7GC_C] + gm->xsc[p7P_C][p7P_MOVE]; #ifdef p7_DEBUGGING if (gxc->do_debugging) p7_gmxchk_DumpHeader(gxc->dfp, gxc, 0, gxc->M, gxc->dbg_flags); #endif /* this initialization could be in gmxchk: nothing else touches these boundary cells */ for (s = 0; s < p7G_NSCELLS; s++) gxc->dp[0][s] = gxc->dp[1][s] = -eslINFINITY; /* We have to handle the first block b=1 as a special case (rows L-1, L) * because row L is a special case. */ /* Initialize backwards row L */ i = L; gxc->R--; fwd = gxc->dp[gxc->R0+gxc->R]; /* pop row for fwd[L] off "stack" */ bck = gxc->dp[L%2]; /* get tmp space for bck[L] */ XMR(bck, p7GC_C) = gm->xsc[p7P_C][p7P_MOVE]; /* C<-T */ XMR(bck, p7GC_CC) = gm->xsc[p7P_C][p7P_MOVE]; /* CC<-T */ XMR(bck, p7GC_B) = -eslINFINITY; /* B<-T not possible */ XMR(bck, p7GC_J) = -eslINFINITY; /* J<-T not possible */ XMR(bck, p7GC_JJ) = -eslINFINITY; /* JJ<-T not possible*/ XMR(bck, p7GC_N) = -eslINFINITY; /* N<-T not possible */ XMR(bck, p7GC_E) = XMR(bck, p7GC_C) + gm->xsc[p7P_E][p7P_MOVE]; /* E<-C, no tail */ DMR(bck, M) = XMR(bck, p7GC_E); /* D_M <- E (t = 1.0) */ IMR(bck, M) = -eslINFINITY; /* I_M nonexistent */ MMR(bck, M) = XMR(bck, p7GC_E); /* M_M <- E */ for (k = M-1; k >= 1; k--) { DMR(bck, k) = p7_FLogsum( XMR(bck, p7GC_E) + esc, DMR(bck, k+1) + TSC(p7P_DD, k)); IMR(bck, k) = -eslINFINITY; MMR(bck, k) = p7_FLogsum( XMR(bck, p7GC_E) + esc, DMR(bck, k+1) + TSC(p7P_MD, k)); } #ifdef p7_DEBUGGING if (gxc->do_debugging) p7_gmxchk_DumpRow(gxc->dfp, gxc, bck, i, 0, gxc->M, gxc->dbg_flags); #endif posterior_decode_row(i, fwd, bck, M, overall_sc, bnd); i--; /* i is now L-1 */ dpp = bck; /* If there's any checkpointing at all, there's an L-1 row to fill in */ if (gxc->Rb+gxc->Rc > 0) { /* i=L-1 as we enter */ /* Compute forwards from last checkpoint (which we know is L-2) */ dpp = gxc->dp[gxc->R0+gxc->R-1]; fwd = gxc->dp[gxc->R0+gxc->R]; /* new row, from top of stack */ forward_row(dsq, gm, gxc, dpp, fwd, i); /* Compute backwards: L-1 row from L row */ dpp = bck; bck = gxc->dp[(L-1)%2]; backward_row(dsq, gm, gxc, dpp, bck, i); #ifdef p7_DEBUGGING if (gxc->do_debugging) p7_gmxchk_DumpRow(gxc->dfp, gxc, bck, i, 0, gxc->M, gxc->dbg_flags); #endif posterior_decode_row(i, fwd, bck, M, overall_sc, bnd); dpp = bck; i--; /* i is now L-2 if there was any checkpointing; L-1 if not. */ } /* Checkpointed regions (b,c) */ for (b = 2; b <= gxc->Rb+gxc->Rc; b++) { /* i=L-2 as we enter here. */ w = (b <= gxc->Rc ? b+1 : gxc->Lb); /* current row i (r=R0+R-1) ends a block and is checkpointed. */ gxc->R--; fwd = gxc->dp[gxc->R0+gxc->R]; /* pop last forward row off "stack" */ bck = gxc->dp[i%2]; backward_row(dsq, gm, gxc, dpp, bck, i); #ifdef p7_DEBUGGING if (gxc->do_debugging) p7_gmxchk_DumpRow(gxc->dfp, gxc, bck, i, 0, gxc->M, gxc->dbg_flags); #endif posterior_decode_row(i, fwd, bck, M, overall_sc, bnd); /* compute Forwards from last checkpoint */ dpp = gxc->dp[gxc->R0+gxc->R-1]; for (i2 = i-w+1; i2 <= i-1; i2++) { fwd = gxc->dp[gxc->R0+gxc->R]; gxc->R++; /* push new forward row on "stack" */ forward_row(dsq, gm, gxc, dpp, fwd, i2); dpp = fwd; } /* now compute Backwards over the block we just calculated */ dpp = bck; for (i2 = i-1; i2 >= i-w+1; i2--) { gxc->R--; fwd = gxc->dp[gxc->R0+gxc->R]; /* pop last forward row off "stack" */ bck = gxc->dp[i2%2]; backward_row(dsq, gm, gxc, dpp, bck, i2); #ifdef p7_DEBUGGING if (gxc->do_debugging) p7_gmxchk_DumpRow(gxc->dfp, gxc, bck, i2, 0, gxc->M, gxc->dbg_flags); #endif posterior_decode_row(i2, fwd, bck, M, overall_sc, bnd); dpp = bck; } i -= w; } /* now i=La as we leave the checkpointed regions; or i=L-1 if there was no checkpointing */ /* The uncheckpointed "a" region */ for (; i >= 1; i--) { gxc->R--; fwd = gxc->dp[gxc->R0+gxc->R]; bck = gxc->dp[i%2]; backward_row(dsq, gm, gxc, dpp, bck, i); #ifdef p7_DEBUGGING if (gxc->do_debugging) p7_gmxchk_DumpRow(gxc->dfp, gxc, bck, i, 0, gxc->M, gxc->dbg_flags); #endif posterior_decode_row(i, fwd, bck, M, overall_sc, bnd); dpp = bck; } /* now i=0. At i=0, only N,B states are reachable. */ bck = gxc->dp[0]; rsc = gm->rsc[dsq[1]]; XMR(bck,p7GC_B) = MMR(dpp,1) + TSC(p7P_BM,0) + MSC(1); /* t_BM index is 0 because it's stored off-by-one. */ for (k = 2; k <= M; k++) XMR(bck,p7GC_B) = p7_FLogsum(XMR(bck,p7GC_B), MMR(dpp,k) + TSC(p7P_BM,k-1) + MSC(k)); XMR(bck,p7GC_J) = -eslINFINITY; XMR(bck,p7GC_C) = -eslINFINITY; XMR(bck,p7GC_N) = p7_FLogsum( XMR(dpp, p7GC_N) + gm->xsc[p7P_N][p7P_LOOP], XMR(bck, p7GC_B) + gm->xsc[p7P_N][p7P_MOVE]); XMR(bck,p7GC_E) = -eslINFINITY; for (k = M; k >= 1; k--) MMR(bck,k) = IMR(bck,k) = DMR(bck,k) = -eslINFINITY; #ifdef p7_DEBUGGING if (gxc->do_debugging) p7_gmxchk_DumpRow(gxc->dfp, gxc, bck, i, 0, gxc->M, gxc->dbg_flags); #endif bnd->L = L; bnd->M = M; p7_gbands_Reverse(bnd); if (opt_sc != NULL) *opt_sc = XMR(bck,p7GC_N); return eslOK; } /*--------------------- end, backwards --------------------------*/ /***************************************************************** * x. Posterior decoding in linear memory *****************************************************************/ /* remember, the row layout is (see note 2 in p7_gmxchk.h): * dpc: [M I D] [M I D] [M I D] ... [M I D] [E N JJ J B CC C] * k: |-- 0 --| |-- 1 --| |-- 2 --| ... |-- M --| * |------------- (M+1)*p7G_NSCELLS -----------| |---- p7GC_NXCELLS ---| */ static inline void posterior_decode_row(int rowi, float *fwd, float *bck, int M, float overall_sc, P7_GBANDS *bnd) { int k; int ka, kb; XMR(fwd, p7GC_N) = expf(XMR(fwd, p7GC_N) + XMR(bck, p7GC_N) - overall_sc); XMR(fwd, p7GC_JJ) = expf(XMR(fwd, p7GC_JJ) + XMR(bck, p7GC_JJ) - overall_sc); XMR(fwd, p7GC_CC) = expf(XMR(fwd, p7GC_CC) + XMR(bck, p7GC_CC) - overall_sc); if (XMR(fwd, p7GC_N) + XMR(fwd, p7GC_JJ) + XMR(fwd, p7GC_CC) >= 0.9) return; for (k = 1; k < M; k++) { MMR(fwd, k) = expf(MMR(fwd,k) + MMR(bck,k) - overall_sc); IMR(fwd, k) = expf(IMR(fwd,k) + IMR(bck,k) - overall_sc); } MMR(fwd, M) = expf(MMR(fwd, M) + MMR(bck,M) - overall_sc); IMR(fwd, M) = 0.0f; for (ka = 1; ka <= M; ka++) if (MMR(fwd, ka) + IMR(fwd, ka) >= 0.02) break; if (ka == M+1) return; for (kb = M; kb >= 1; kb--) if (MMR(fwd, kb) + IMR(fwd, kb) >= 0.02) break; p7_gbands_Prepend(bnd, rowi, ka, kb); //printf("%4d %.4f %.4f %.4f %4d %4d\n", rowi, 1-outp, outp, denom, ka, kb); } /***************************************************************** * 3. Benchmark driver. *****************************************************************/ #ifdef p7GENERIC_FWDBACK_CHK_BENCHMARK /* gcc -g -O2 -o generic_fwdback_chk_benchmark -I. -L. -I../easel -L../easel -Dp7GENERIC_FWDBACK_CHK_BENCHMARK generic_fwdback_chk.c -lhmmer -leasel -lm icc -O3 -static -o generic_fwdback_chk_benchmark -I. -L. -I../easel -L../easel -Dp7GENERIC_FWDBACK_CHK_BENCHMARK generic_fwdback_chk.c -lhmmer -leasel -lm ./generic_fwdback_chk_benchmark */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "p7_gmxchk.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "2000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { "-F", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "only benchmark GForwardCheckpointed()", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for checkpointed generic Forward/Backward"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMXCHK *gxc = NULL; P7_GBANDS *bnd = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc; double base_time, bench_time, Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_UNILOCAL); gxc = p7_gmxchk_Create(gm->M, L, ESL_MBYTES(32)); bnd = p7_gbands_Create(); /* Baseline time. */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; /* Benchmark time. */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_GForwardCheckpointed (dsq, L, gm, gxc, &sc); if (! esl_opt_GetBoolean(go, "-F")) p7_GBackwardCheckpointed(dsq, L, gm, gxc, bnd, &sc); p7_gmxchk_Reuse(gxc); p7_gbands_Reuse(bnd); } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_gmxchk_Destroy(gxc); p7_gbands_Destroy(bnd); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_FWDBACK_CHK_BENCHMARK*/ /*----------------- end, benchmark ------------------------------*/ /***************************************************************** * x. Unit tests. *****************************************************************/ #ifdef p7GENERIC_FWDBACK_CHK_TESTDRIVE #include "esl_sq.h" #include "esl_randomseq.h" static void scoring_comparison(ESL_DSQ *dsq, int L, P7_PROFILE *gm, P7_GMX *gx, P7_GMXCHK *gxc, P7_GBANDS *bnd) { char msg[] = "generic_fwdback_chk: score comparison test failure"; float tolerance = 0.01; /* nats (absolute score difference) */ float fsc1, fsc2; float bsc1, bsc2; if ( p7_gmx_GrowTo(gx, gm->M, L) != eslOK) esl_fatal(msg); if ( p7_gmxchk_GrowTo(gxc, gm->M, L) != eslOK) esl_fatal(msg); if ( p7_GForward(dsq, L, gm, gx, &fsc1) != eslOK) esl_fatal(msg); if ( p7_gmx_Reuse(gx) != eslOK) esl_fatal(msg); if ( p7_GBackward(dsq, L, gm, gx, &bsc1) != eslOK) esl_fatal(msg); if ( p7_GForwardCheckpointed (dsq, L, gm, gxc, &fsc2) != eslOK) esl_fatal(msg); if ( p7_GBackwardCheckpointed(dsq, L, gm, gxc, bnd, &bsc2) != eslOK) esl_fatal(msg); if ( fabs(fsc1-bsc1) > tolerance) esl_fatal(msg); if ( fabs(fsc1-fsc2) > tolerance) esl_fatal(msg); if ( fabs(bsc1-bsc2) > tolerance) esl_fatal(msg); if ( p7_gmx_Reuse(gx) != eslOK) esl_fatal(msg); if ( p7_gmxchk_Reuse(gxc) != eslOK) esl_fatal(msg); if ( p7_gbands_Reuse(bnd) != eslOK) esl_fatal(msg); } static void utest_randomseq(ESL_RANDOMNESS *rng, ESL_ALPHABET *abc, P7_PROFILE *gm, P7_BG *bg, int nseq, int L) { char msg[] = "generic_fwdback_chk: random seq test failure"; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_GMX *gx = p7_gmx_Create(gm->M, 100); P7_GMXCHK *gxc = p7_gmxchk_Create(gm->M, 100, ESL_MBYTES(32)); P7_GBANDS *bnd = p7_gbands_Create(); int idx; for (idx = 0; idx < nseq; idx++) { if (esl_rsq_xfIID(rng, bg->f, abc->K, L, dsq) != eslOK) esl_fatal(msg); scoring_comparison(dsq, L, gm, gx, gxc, bnd); } p7_gmxchk_Destroy(gxc); p7_gmx_Destroy(gx); p7_gbands_Destroy(bnd); free(dsq); } static void utest_emitseq(ESL_RANDOMNESS *rng, ESL_ALPHABET *abc, P7_HMM *hmm, P7_PROFILE *gm, P7_BG *bg, int nseq) { char msg[] = "generic_fwdback_chk: emitted seq test failure"; ESL_SQ *sq = esl_sq_CreateDigital(abc); P7_GMX *gx = p7_gmx_Create(gm->M, 100); P7_GMXCHK *gxc = p7_gmxchk_Create(gm->M, 100, ESL_MBYTES(32)); P7_GBANDS *bnd = p7_gbands_Create(); int idx; for (idx = 0; idx < nseq; idx++) { if ( p7_ProfileEmit(rng, hmm, gm, bg, sq, NULL) != eslOK) esl_fatal(msg); scoring_comparison(sq->dsq, sq->n, gm, gx, gxc, bnd); } p7_gmxchk_Destroy(gxc); p7_gmx_Destroy(gx); p7_gbands_Destroy(bnd); esl_sq_Destroy(sq); } #endif /*p7GENERIC_FWDBACK_CHK_TESTDRIVE*/ /*----------------- end, unit tests -----------------------------*/ /***************************************************************** * x. Test driver. *****************************************************************/ #ifdef p7GENERIC_FWDBACK_CHK_TESTDRIVE #include "p7_config.h" #include "easel.h" #include "esl_getopts.h" #include "hmmer.h" #include "p7_gmxchk.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "0", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "--vv", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be very verbose", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "tests for generic checkpointed Forward/Backward implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *rng = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_BG *bg = NULL; int M = 100; int L = 200; int nseq = 20; char errbuf[eslERRBUFSIZE]; p7_FLogsumInit(); if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if (p7_hmm_Sample(rng, M, abc, &hmm) != eslOK) esl_fatal("failed to sample an HMM"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if ((gm = p7_profile_Create(hmm->M, abc)) == NULL) esl_fatal("failed to create profile"); if (p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL) != eslOK) esl_fatal("failed to config profile"); if (p7_hmm_Validate (hmm, errbuf, 0.0001) != eslOK) esl_fatal("whoops, HMM is bad!: %s", errbuf); if (p7_profile_Validate(gm, errbuf, 0.0001) != eslOK) esl_fatal("whoops, profile is bad!: %s", errbuf); utest_randomseq(rng, abc, gm, bg, nseq, L); utest_emitseq (rng, abc, hmm, gm, bg, nseq); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(rng); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_FWDBACK_CHK_TESTDRIVE*/ /*------------------ end, test driver ---------------------------*/ /***************************************************************** * 4. Example main() *****************************************************************/ #ifdef p7GENERIC_FWDBACK_CHK_EXAMPLE /* gcc -g -O2 -o generic_fwdback_chk_example -Dp7GENERIC_FWDBACK_CHK_EXAMPLE -I. -I../easel -L. -L../easel generic_fwdback_chk.c -lhmmer -leasel -lm */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "p7_gmxchk.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of checkpointed Forward/Backward, generic implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *fwd = NULL; P7_GMX *bck = NULL; P7_GMXCHK *gxc = NULL; P7_GBANDS *bnd = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float fsc, fsc2; float bsc, bsc2; float nullsc; int status; /* Initialize log-sum calculator */ p7_FLogsumInit(); /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file, or file open failed"); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 400, p7_LOCAL); /* Allocate matrices */ fwd = p7_gmx_Create(gm->M, 400); bck = p7_gmx_Create(gm->M, 400); gxc = p7_gmxchk_Create(gm->M, 400, ESL_MBYTES(32)); bnd = p7_gbands_Create(); while ( (status = esl_sqio_Read(sqfp, sq)) != eslEOF) { if (status == eslEFORMAT) p7_Fail("Parse failed (sequence file %s)\n%s\n", sqfp->filename, sqfp->get_error(sqfp)); else if (status != eslOK) p7_Fail("Unexpected error %d reading sequence file %s", status, sqfp->filename); /* Resize the DP matrices if necessary */ p7_gmx_GrowTo (fwd, gm->M, sq->n); p7_gmx_GrowTo (bck, gm->M, sq->n); p7_gmxchk_GrowTo(gxc, gm->M, sq->n); //printf("Allocation: %ld\n", p7_gmxchk_Sizeof(fwdc)); /* Set the profile and null model's target length models */ p7_bg_SetLength(bg, sq->n); p7_ReconfigLength(gm, sq->n); /* Run Forward in both modes */ p7_GForward (sq->dsq, sq->n, gm, fwd, &fsc); p7_GForwardCheckpointed(sq->dsq, sq->n, gm, gxc, &fsc2); /* Dump the DP matrices. (Voluminous; only small examples are reasonable) */ //p7_gmx_Dump(stdout, fwd, p7_DEFAULT); //p7_gmxchk_Dump(stdout, gxc, p7_DEFAULT); /* Run Backward in both modes */ p7_GBackward (sq->dsq, sq->n, gm, bck, &bsc); //p7_gmx_Dump(stdout, bck, p7_DEFAULT); //p7_gmxchk_SetDumpMode(gxc, stdout, p7_DEFAULT); p7_GBackwardCheckpointed(sq->dsq, sq->n, gm, gxc, bnd, &bsc2); //p7_gmxchk_SetDumpMode(gxc, NULL, 0); p7_gbands_Dump(stdout, bnd); /* Those scores are partial log-odds likelihoods in nats. * Subtract off the rest of the null model, convert to bits. */ p7_bg_NullOne(bg, sq->dsq, sq->n, &nullsc); printf("%-30s %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f\n", sq->name, fsc, fsc2, (fsc - nullsc) / eslCONST_LOG2, (fsc2 - nullsc) / eslCONST_LOG2, bsc, bsc2, (bsc - nullsc) / eslCONST_LOG2, (bsc2 - nullsc) / eslCONST_LOG2); p7_gmx_Reuse(fwd); p7_gmx_Reuse(bck); p7_gmxchk_Reuse(gxc); p7_gbands_Reuse(bnd); esl_sq_Reuse(sq); } /* Cleanup */ esl_sqfile_Close(sqfp); esl_sq_Destroy(sq); p7_gmx_Destroy(fwd); p7_gmx_Destroy(bck); p7_gmxchk_Destroy(gxc); p7_gbands_Destroy(bnd); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_FWDBACK_CHK_EXAMPLE*/ /*------------------- end, example main() -----------------------*/ /* References: * SRE J8/109-112, Oct 2011: implementation plan. */ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id$ * SVN $URL$ *****************************************************************/ hmmer-3.1b2/src/hmmsearch.c0000664361611702660230000020135612473612613015201 0ustar wheelerteddy/* hmmsearch: search profile HMM(s) against a sequence database. * * To do: * - in MPI mode, add a check to make sure ncpus >= 2. If 1, then we * only have a master, no workers. See Infernal commit r3972 on the * same point; and same note in hmmscan.c's to do list. */ #include "p7_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stopwatch.h" #ifdef HAVE_MPI #include "mpi.h" #include "esl_mpi.h" #endif /*HAVE_MPI*/ #ifdef HMMER_THREADS #include #include "esl_threads.h" #include "esl_workqueue.h" #endif /*HMMER_THREADS*/ #include "hmmer.h" typedef struct { #ifdef HMMER_THREADS ESL_WORK_QUEUE *queue; #endif /*HMMER_THREADS*/ P7_BG *bg; /* null model */ P7_PIPELINE *pli; /* work pipeline */ P7_TOPHITS *th; /* top hit results */ P7_OPROFILE *om; /* optimized query profile */ } WORKER_INFO; #define REPOPTS "-E,-T,--cut_ga,--cut_nc,--cut_tc" #define DOMREPOPTS "--domE,--domT,--cut_ga,--cut_nc,--cut_tc" #define INCOPTS "--incE,--incT,--cut_ga,--cut_nc,--cut_tc" #define INCDOMOPTS "--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #define THRESHOPTS "-E,-T,--domE,--domT,--incE,--incT,--incdomE,--incdomT,--cut_ga,--cut_nc,--cut_tc" #if defined (HMMER_THREADS) && defined (HAVE_MPI) #define CPUOPTS "--mpi" #define MPIOPTS "--cpu" #else #define CPUOPTS NULL #define MPIOPTS NULL #endif static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, /* Control of output */ { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "direct output to file , not stdout", 2 }, { "-A", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save multiple alignment of all hits to file ", 2 }, { "--tblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save parseable table of per-sequence hits to file ", 2 }, { "--domtblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save parseable table of per-domain hits to file ", 2 }, { "--pfamtblout", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save table of hits and domains to file, in Pfam format ", 2 }, { "--acc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "prefer accessions over names in output", 2 }, { "--noali", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "don't output alignments, so output is smaller", 2 }, { "--notextw", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--textw", "unlimit ASCII text output line width", 2 }, { "--textw", eslARG_INT, "120", NULL, "n>=120",NULL, NULL, "--notextw", "set max width of ASCII text output lines", 2 }, /* Control of reporting thresholds */ { "-E", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, REPOPTS, "report sequences <= this E-value threshold in output", 4 }, { "-T", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, REPOPTS, "report sequences >= this score threshold in output", 4 }, { "--domE", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, DOMREPOPTS, "report domains <= this E-value threshold in output", 4 }, { "--domT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, DOMREPOPTS, "report domains >= this score cutoff in output", 4 }, /* Control of inclusion (significance) thresholds */ { "--incE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, INCOPTS, "consider sequences <= this E-value threshold as significant", 5 }, { "--incT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCOPTS, "consider sequences >= this score threshold as significant", 5 }, { "--incdomE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, INCDOMOPTS, "consider domains <= this E-value threshold as significant", 5 }, { "--incdomT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, INCDOMOPTS, "consider domains >= this score threshold as significant", 5 }, /* Model-specific thresholding for both reporting and inclusion */ { "--cut_ga", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's GA gathering cutoffs to set all thresholding", 6 }, { "--cut_nc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's NC noise cutoffs to set all thresholding", 6 }, { "--cut_tc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, THRESHOPTS, "use profile's TC trusted cutoffs to set all thresholding", 6 }, /* Control of acceleration pipeline */ { "--max", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--F1,--F2,--F3", "Turn all heuristic filters off (less speed, more power)", 7 }, { "--F1", eslARG_REAL, "0.02", NULL, NULL, NULL, NULL, "--max", "Stage 1 (MSV) threshold: promote hits w/ P <= F1", 7 }, { "--F2", eslARG_REAL, "1e-3", NULL, NULL, NULL, NULL, "--max", "Stage 2 (Vit) threshold: promote hits w/ P <= F2", 7 }, { "--F3", eslARG_REAL, "1e-5", NULL, NULL, NULL, NULL, "--max", "Stage 3 (Fwd) threshold: promote hits w/ P <= F3", 7 }, { "--nobias", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--max", "turn off composition bias filter", 7 }, /* Other options */ { "--nonull2", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "turn off biased composition score corrections", 12 }, { "-Z", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of comparisons done, for E-value calculation", 12 }, { "--domZ", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of significant seqs, for domain E-value calculation", 12 }, { "--seed", eslARG_INT, "42", NULL, "n>=0", NULL, NULL, NULL, "set RNG seed to (if 0: one-time arbitrary seed)", 12 }, { "--tformat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "assert target is in format : no autodetection", 12 }, #ifdef HMMER_THREADS { "--cpu", eslARG_INT, NULL,"HMMER_NCPU","n>=0",NULL, NULL, CPUOPTS, "number of parallel CPU workers to use for multithreads", 12 }, #endif #ifdef HAVE_MPI { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL,"--mpi", NULL, "arrest after start: for debugging MPI under gdb", 12 }, { "--mpi", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, MPIOPTS, "run as an MPI parallel program", 12 }, #endif /* Restrict search to subset of database - hidden because these flags are * (a) currently for internal use * (b) probably going to change * Doesn't work with MPI */ { "--restrictdb_stkey", eslARG_STRING, "0", NULL, NULL, NULL, NULL, NULL, "Search starts at the sequence with name (not with MPI)", 99 }, { "--restrictdb_n",eslARG_INT, "-1", NULL, NULL, NULL, NULL, NULL, "Search target sequences (starting at --restrictdb_stkey)", 99 }, { "--ssifile", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "restrictdb_x values require ssi file. Override default to ", 99 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[options] "; static char banner[] = "search profile(s) against a sequence database"; /* struct cfg_s : "Global" application configuration shared by all threads/processes * * This structure is passed to routines within main.c, as a means of semi-encapsulation * of shared data amongst different parallel processes (threads or MPI processes). */ struct cfg_s { char *dbfile; /* target sequence database file */ char *hmmfile; /* query HMM file */ int do_mpi; /* TRUE if we're doing MPI parallelization */ int nproc; /* how many MPI processes, total */ int my_rank; /* who am I, in 0..nproc-1 */ char *firstseq_key; /* name of the first sequence in the restricted db range */ int n_targetseq; /* number of sequences in the restricted range */ }; static int serial_master(ESL_GETOPTS *go, struct cfg_s *cfg); static int serial_loop (WORKER_INFO *info, ESL_SQFILE *dbfp, int n_targetseqs); #ifdef HMMER_THREADS #define BLOCK_SIZE 1000 static int thread_loop(ESL_THREADS *obj, ESL_WORK_QUEUE *queue, ESL_SQFILE *dbfp, int n_targetseqs); static void pipeline_thread(void *arg); #endif /*HMMER_THREADS*/ #ifdef HAVE_MPI static int mpi_master (ESL_GETOPTS *go, struct cfg_s *cfg); static int mpi_worker (ESL_GETOPTS *go, struct cfg_s *cfg); #endif /*HAVE_MPI*/ static int process_commandline(int argc, char **argv, ESL_GETOPTS **ret_go, char **ret_hmmfile, char **ret_seqfile) { ESL_GETOPTS *go = esl_getopts_Create(options); int status; if (esl_opt_ProcessEnvironment(go) != eslOK) { if (printf("Failed to process environment: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_VerifyConfig(go) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* help format: */ if (esl_opt_GetBoolean(go, "-h") == TRUE) { p7_banner(stdout, argv[0], banner); esl_usage(stdout, argv[0], usage); if (puts("\nBasic options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 80=textwidth*/ if (puts("\nOptions directing output:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); if (puts("\nOptions controlling reporting thresholds:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); if (puts("\nOptions controlling inclusion (significance) thresholds:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 5, 2, 80); if (puts("\nOptions controlling model-specific thresholding:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 6, 2, 80); if (puts("\nOptions controlling acceleration heuristics:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 7, 2, 80); if (puts("\nOther expert options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 12, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != 2) { if (puts("Incorrect number of command line arguments.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_hmmfile = esl_opt_GetArg(go, 1)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((*ret_seqfile = esl_opt_GetArg(go, 2)) == NULL) { if (puts("Failed to get argument on command line") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* Validate any attempted use of stdin streams */ if (strcmp(*ret_hmmfile, "-") == 0 && strcmp(*ret_seqfile, "-") == 0) { if (puts("Either or may be '-' (to read from stdin), but not both.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } *ret_go = go; return eslOK; FAILURE: /* all errors handled here are user errors, so be polite. */ esl_usage(stdout, argv[0], usage); if (puts("\nwhere most common options are:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 80=textwidth*/ if (printf("\nTo see more help on available options, do %s -h\n\n", argv[0]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_getopts_Destroy(go); exit(1); ERROR: if (go) esl_getopts_Destroy(go); exit(status); } static int output_header(FILE *ofp, const ESL_GETOPTS *go, char *hmmfile, char *seqfile) { p7_banner(ofp, go->argv[0], banner); if (fprintf(ofp, "# query HMM file: %s\n", hmmfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, "# target sequence database: %s\n", seqfile) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-o") && fprintf(ofp, "# output directed to file: %s\n", esl_opt_GetString(go, "-o")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-A") && fprintf(ofp, "# MSA of all hits saved to file: %s\n", esl_opt_GetString(go, "-A")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--tblout") && fprintf(ofp, "# per-seq hits tabular output: %s\n", esl_opt_GetString(go, "--tblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domtblout") && fprintf(ofp, "# per-dom hits tabular output: %s\n", esl_opt_GetString(go, "--domtblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--pfamtblout") && fprintf(ofp, "# pfam-style tabular hit output: %s\n", esl_opt_GetString(go, "--pfamtblout")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--acc") && fprintf(ofp, "# prefer accessions over names: yes\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--noali") && fprintf(ofp, "# show alignments in output: no\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--notextw") && fprintf(ofp, "# max ASCII text line length: unlimited\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--textw") && fprintf(ofp, "# max ASCII text line length: %d\n", esl_opt_GetInteger(go, "--textw")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-E") && fprintf(ofp, "# sequence reporting threshold: E-value <= %g\n", esl_opt_GetReal(go, "-E")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-T") && fprintf(ofp, "# sequence reporting threshold: score >= %g\n", esl_opt_GetReal(go, "-T")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domE") && fprintf(ofp, "# domain reporting threshold: E-value <= %g\n", esl_opt_GetReal(go, "--domE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domT") && fprintf(ofp, "# domain reporting threshold: score >= %g\n", esl_opt_GetReal(go, "--domT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incE") && fprintf(ofp, "# sequence inclusion threshold: E-value <= %g\n", esl_opt_GetReal(go, "--incE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incT") && fprintf(ofp, "# sequence inclusion threshold: score >= %g\n", esl_opt_GetReal(go, "--incT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incdomE") && fprintf(ofp, "# domain inclusion threshold: E-value <= %g\n", esl_opt_GetReal(go, "--incdomE")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--incdomT") && fprintf(ofp, "# domain inclusion threshold: score >= %g\n", esl_opt_GetReal(go, "--incdomT")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--cut_ga") && fprintf(ofp, "# model-specific thresholding: GA cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--cut_nc") && fprintf(ofp, "# model-specific thresholding: NC cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--cut_tc") && fprintf(ofp, "# model-specific thresholding: TC cutoffs\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--max") && fprintf(ofp, "# Max sensitivity mode: on [all heuristic filters off]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F1") && fprintf(ofp, "# MSV filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F1")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F2") && fprintf(ofp, "# Vit filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F2")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--F3") && fprintf(ofp, "# Fwd filter P threshold: <= %g\n", esl_opt_GetReal(go, "--F3")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--nobias") && fprintf(ofp, "# biased composition HMM filter: off\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--restrictdb_stkey") && fprintf(ofp, "# Restrict db to start at seq key: %s\n", esl_opt_GetString(go, "--restrictdb_stkey")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--restrictdb_n") && fprintf(ofp, "# Restrict db to # target seqs: %d\n", esl_opt_GetInteger(go, "--restrictdb_n")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--ssifile") && fprintf(ofp, "# Override ssi file to: %s\n", esl_opt_GetString(go, "--ssifile")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--nonull2") && fprintf(ofp, "# null2 bias corrections: off\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "-Z") && fprintf(ofp, "# sequence search space set to: %.0f\n", esl_opt_GetReal(go, "-Z")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--domZ") && fprintf(ofp, "# domain search space set to: %.0f\n", esl_opt_GetReal(go, "--domZ")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (esl_opt_IsUsed(go, "--seed")) { if (esl_opt_GetInteger(go, "--seed") == 0 && fprintf(ofp, "# random number seed: one-time arbitrary\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); else if ( fprintf(ofp, "# random number seed set to: %d\n", esl_opt_GetInteger(go, "--seed")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (esl_opt_IsUsed(go, "--tformat") && fprintf(ofp, "# targ format asserted: %s\n", esl_opt_GetString(go, "--tformat")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #ifdef HMMER_THREADS if (esl_opt_IsUsed(go, "--cpu") && fprintf(ofp, "# number of worker threads: %d\n", esl_opt_GetInteger(go, "--cpu")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #endif #ifdef HAVE_MPI if (esl_opt_IsUsed(go, "--mpi") && fprintf(ofp, "# MPI: on\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); #endif if (fprintf(ofp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); return eslOK; } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; struct cfg_s cfg; int status = eslOK; impl_Init(); /* processor specific initialization */ p7_FLogsumInit(); /* we're going to use table-driven Logsum() approximations at times */ /* Initialize what we can in the config structure (without knowing the alphabet yet) */ cfg.hmmfile = NULL; cfg.dbfile = NULL; cfg.do_mpi = FALSE; /* this gets reset below, if we init MPI */ cfg.nproc = 0; /* this gets reset below, if we init MPI */ cfg.my_rank = 0; /* this gets reset below, if we init MPI */ cfg.firstseq_key = NULL; cfg.n_targetseq = -1; process_commandline(argc, argv, &go, &cfg.hmmfile, &cfg.dbfile); /* is the range restricted? */ #ifndef eslAUGMENT_SSI if (esl_opt_IsUsed(go, "--restrictdb_stkey") || esl_opt_IsUsed(go, "--restrictdb_n") || esl_opt_IsUsed(go, "--ssifile") ) p7_Fail("Unable to use range-control options unless an SSI index file is available. See 'esl_sfetch --index'\n"); #else if (esl_opt_IsUsed(go, "--restrictdb_stkey") ) if ((cfg.firstseq_key = esl_opt_GetString(go, "--restrictdb_stkey")) == NULL) p7_Fail("Failure capturing --restrictdb_stkey\n"); if (esl_opt_IsUsed(go, "--restrictdb_n") ) cfg.n_targetseq = esl_opt_GetInteger(go, "--restrictdb_n"); if ( cfg.n_targetseq != -1 && cfg.n_targetseq < 1 ) p7_Fail("--restrictdb_n must be >= 1\n"); #endif /* Figure out who we are, and send control there: * we might be an MPI master, an MPI worker, or a serial program. */ #ifdef HAVE_MPI /* pause the execution of the programs execution until the user has a * chance to attach with a debugger and send a signal to resume execution * i.e. (gdb) signal SIGCONT */ if (esl_opt_GetBoolean(go, "--stall")) pause(); if (esl_opt_GetBoolean(go, "--mpi")) { cfg.do_mpi = TRUE; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &(cfg.my_rank)); MPI_Comm_size(MPI_COMM_WORLD, &(cfg.nproc)); if (cfg.my_rank > 0) status = mpi_worker(go, &cfg); else status = mpi_master(go, &cfg); MPI_Finalize(); } else #endif /*HAVE_MPI*/ { status = serial_master(go, &cfg); } esl_getopts_Destroy(go); return status; } /* serial_master() * The serial version of hmmsearch. * For each query HMM in search the database for hits. * * A master can only return if it's successful. All errors are handled * immediately and fatally with p7_Fail(). We also use the * ESL_EXCEPTION and ERROR: mechanisms, but only because we know we're * using a fatal exception handler. */ static int serial_master(ESL_GETOPTS *go, struct cfg_s *cfg) { FILE *ofp = stdout; /* results output file (-o) */ FILE *afp = NULL; /* alignment output file (-A) */ FILE *tblfp = NULL; /* output stream for tabular per-seq (--tblout) */ FILE *domtblfp = NULL; /* output stream for tabular per-dom (--domtblout) */ FILE *pfamtblfp= NULL; /* output stream for pfam tabular output (--pfamtblout) */ P7_HMMFILE *hfp = NULL; /* open input HMM file */ ESL_SQFILE *dbfp = NULL; /* open input sequence file */ P7_HMM *hmm = NULL; /* one HMM query */ ESL_ALPHABET *abc = NULL; /* digital alphabet */ int dbfmt = eslSQFILE_UNKNOWN; /* format code for sequence database file */ ESL_STOPWATCH *w; int textw = 0; int nquery = 0; int status = eslOK; int hstatus = eslOK; int sstatus = eslOK; int i; int ncpus = 0; int infocnt = 0; WORKER_INFO *info = NULL; #ifdef HMMER_THREADS ESL_SQ_BLOCK *block = NULL; ESL_THREADS *threadObj= NULL; ESL_WORK_QUEUE *queue = NULL; #endif char errbuf[eslERRBUFSIZE]; w = esl_stopwatch_Create(); if (esl_opt_GetBoolean(go, "--notextw")) textw = 0; else textw = esl_opt_GetInteger(go, "--textw"); if (esl_opt_IsOn(go, "--tformat")) { dbfmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--tformat")); if (dbfmt == eslSQFILE_UNKNOWN) p7_Fail("%s is not a recognized sequence database file format\n", esl_opt_GetString(go, "--tformat")); } /* Open the target sequence database */ status = esl_sqfile_Open(cfg->dbfile, dbfmt, p7_SEQDBENV, &dbfp); if (status == eslENOTFOUND) p7_Fail("Failed to open sequence file %s for reading\n", cfg->dbfile); else if (status == eslEFORMAT) p7_Fail("Sequence file %s is empty or misformatted\n", cfg->dbfile); else if (status == eslEINVAL) p7_Fail("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) p7_Fail("Unexpected error %d opening sequence file %s\n", status, cfg->dbfile); if (esl_opt_IsUsed(go, "--restrictdb_stkey") || esl_opt_IsUsed(go, "--restrictdb_n")) { if (esl_opt_IsUsed(go, "--ssifile")) esl_sqfile_OpenSSI(dbfp, esl_opt_GetString(go, "--ssifile")); else esl_sqfile_OpenSSI(dbfp, NULL); } /* Open the query profile HMM file */ status = p7_hmmfile_OpenE(cfg->hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", cfg->hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", cfg->hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, cfg->hmmfile, errbuf); /* Open the results output files */ if (esl_opt_IsOn(go, "-o")) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) p7_Fail("Failed to open output file %s for writing\n", esl_opt_GetString(go, "-o")); } if (esl_opt_IsOn(go, "-A")) { if ((afp = fopen(esl_opt_GetString(go, "-A"), "w")) == NULL) p7_Fail("Failed to open alignment file %s for writing\n", esl_opt_GetString(go, "-A")); } if (esl_opt_IsOn(go, "--tblout")) { if ((tblfp = fopen(esl_opt_GetString(go, "--tblout"), "w")) == NULL) esl_fatal("Failed to open tabular per-seq output file %s for writing\n", esl_opt_GetString(go, "--tblout")); } if (esl_opt_IsOn(go, "--domtblout")) { if ((domtblfp = fopen(esl_opt_GetString(go, "--domtblout"), "w")) == NULL) esl_fatal("Failed to open tabular per-dom output file %s for writing\n", esl_opt_GetString(go, "--domtblout")); } if (esl_opt_IsOn(go, "--pfamtblout")){ if ((pfamtblfp = fopen(esl_opt_GetString(go, "--pfamtblout"), "w")) == NULL) esl_fatal("Failed to open pfam-style tabular output file %s for writing\n", esl_opt_GetString(go, "--pfamtblout")); } #ifdef HMMER_THREADS /* initialize thread data */ if (esl_opt_IsOn(go, "--cpu")) ncpus = esl_opt_GetInteger(go, "--cpu"); else esl_threads_CPUCount(&ncpus); if (ncpus > 0) { threadObj = esl_threads_Create(&pipeline_thread); queue = esl_workqueue_Create(ncpus * 2); } #endif infocnt = (ncpus == 0) ? 1 : ncpus; ESL_ALLOC(info, sizeof(*info) * infocnt); /* is not known 'til first HMM is read. */ hstatus = p7_hmmfile_Read(hfp, &abc, &hmm); if (hstatus == eslOK) { /* One-time initializations after alphabet becomes known */ output_header(ofp, go, cfg->hmmfile, cfg->dbfile); esl_sqfile_SetDigital(dbfp, abc); //ReadBlock requires knowledge of the alphabet to decide how best to read blocks for (i = 0; i < infocnt; ++i) { info[i].bg = p7_bg_Create(abc); #ifdef HMMER_THREADS info[i].queue = queue; #endif } #ifdef HMMER_THREADS for (i = 0; i < ncpus * 2; ++i) { block = esl_sq_CreateDigitalBlock(BLOCK_SIZE, abc); if (block == NULL) esl_fatal("Failed to allocate sequence block"); status = esl_workqueue_Init(queue, block); if (status != eslOK) esl_fatal("Failed to add block to work queue"); } #endif } /* Outer loop: over each query HMM in . */ while (hstatus == eslOK) { P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; /* optimized query profile */ nquery++; esl_stopwatch_Start(w); /* seqfile may need to be rewound (multiquery mode) */ if (nquery > 1) { if (! esl_sqfile_IsRewindable(dbfp)) esl_fatal("Target sequence file %s isn't rewindable; can't search it with multiple queries", cfg->dbfile); if (! esl_opt_IsUsed(go, "--restrictdb_stkey") ) esl_sqfile_Position(dbfp, 0); //only re-set current position to 0 if we're not planning to set it in a moment } if ( cfg->firstseq_key != NULL ) { //it's tempting to want to do this once and capture the offset position for future passes, but ncbi files make this non-trivial, so this keeps it general sstatus = esl_sqfile_PositionByKey(dbfp, cfg->firstseq_key); if (sstatus != eslOK) p7_Fail("Failure setting restrictdb_stkey to %d\n", cfg->firstseq_key); } if (fprintf(ofp, "Query: %s [M=%d]\n", hmm->name, hmm->M) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (hmm->acc) { if (fprintf(ofp, "Accession: %s\n", hmm->acc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (hmm->desc) { if (fprintf(ofp, "Description: %s\n", hmm->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } /* Convert to an optimized model */ gm = p7_profile_Create (hmm->M, abc); om = p7_oprofile_Create(hmm->M, abc); p7_ProfileConfig(hmm, info->bg, gm, 100, p7_LOCAL); /* 100 is a dummy length for now; and MSVFilter requires local mode */ p7_oprofile_Convert(gm, om); /* is now p7_LOCAL, multihit */ for (i = 0; i < infocnt; ++i) { /* Create processing pipeline and hit list */ info[i].th = p7_tophits_Create(); info[i].om = p7_oprofile_Clone(om); info[i].pli = p7_pipeline_Create(go, om->M, 100, FALSE, p7_SEARCH_SEQS); /* L_hint = 100 is just a dummy for now */ p7_pli_NewModel(info[i].pli, info[i].om, info[i].bg); #ifdef HMMER_THREADS if (ncpus > 0) esl_threads_AddThread(threadObj, &info[i]); #endif } #ifdef HMMER_THREADS if (ncpus > 0) sstatus = thread_loop(threadObj, queue, dbfp, cfg->n_targetseq); else sstatus = serial_loop(info, dbfp, cfg->n_targetseq); #else sstatus = serial_loop(info, dbfp, cfg->n_targetseq); #endif switch(sstatus) { case eslEFORMAT: esl_fatal("Parse failed (sequence file %s):\n%s\n", dbfp->filename, esl_sqfile_GetErrorBuf(dbfp)); break; case eslEOF: /* do nothing */ break; default: esl_fatal("Unexpected error %d reading sequence file %s", sstatus, dbfp->filename); } /* merge the results of the search results */ for (i = 1; i < infocnt; ++i) { p7_tophits_Merge(info[0].th, info[i].th); p7_pipeline_Merge(info[0].pli, info[i].pli); p7_pipeline_Destroy(info[i].pli); p7_tophits_Destroy(info[i].th); p7_oprofile_Destroy(info[i].om); } /* Print the results. */ p7_tophits_SortBySortkey(info->th); p7_tophits_Threshold(info->th, info->pli); p7_tophits_Targets(ofp, info->th, info->pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); p7_tophits_Domains(ofp, info->th, info->pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (tblfp) p7_tophits_TabularTargets(tblfp, hmm->name, hmm->acc, info->th, info->pli, (nquery == 1)); if (domtblfp) p7_tophits_TabularDomains(domtblfp, hmm->name, hmm->acc, info->th, info->pli, (nquery == 1)); if (pfamtblfp) p7_tophits_TabularXfam(pfamtblfp, hmm->name, hmm->acc, info->th, info->pli); esl_stopwatch_Stop(w); p7_pli_Statistics(ofp, info->pli, w); if (fprintf(ofp, "//\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); /* Output the results in an MSA (-A option) */ if (afp) { ESL_MSA *msa = NULL; if (p7_tophits_Alignment(info->th, abc, NULL, NULL, 0, p7_ALL_CONSENSUS_COLS, &msa) == eslOK) { if (textw > 0) eslx_msafile_Write(afp, msa, eslMSAFILE_STOCKHOLM); else eslx_msafile_Write(afp, msa, eslMSAFILE_PFAM); if (fprintf(ofp, "# Alignment of %d hits satisfying inclusion thresholds saved to: %s\n", msa->nseq, esl_opt_GetString(go, "-A")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } else { if (fprintf(ofp, "# No hits satisfy inclusion thresholds; no alignment saved\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } esl_msa_Destroy(msa); } p7_pipeline_Destroy(info->pli); p7_tophits_Destroy(info->th); p7_oprofile_Destroy(info->om); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); hstatus = p7_hmmfile_Read(hfp, &abc, &hmm); } /* end outer loop over query HMMs */ switch(hstatus) { case eslEOD: p7_Fail("read failed, HMM file %s may be truncated?", cfg->hmmfile); break; case eslEFORMAT: p7_Fail("bad file format in HMM file %s", cfg->hmmfile); break; case eslEINCOMPAT: p7_Fail("HMM file %s contains different alphabets", cfg->hmmfile); break; case eslEOF: /* do nothing. EOF is what we want. */ break; default: p7_Fail("Unexpected error (%d) in reading HMMs from %s", hstatus, cfg->hmmfile); } /* Terminate outputs... any last words? */ if (tblfp) p7_tophits_TabularTail(tblfp, "hmmsearch", p7_SEARCH_SEQS, cfg->hmmfile, cfg->dbfile, go); if (domtblfp) p7_tophits_TabularTail(domtblfp, "hmmsearch", p7_SEARCH_SEQS, cfg->hmmfile, cfg->dbfile, go); if (pfamtblfp) p7_tophits_TabularTail(pfamtblfp,"hmmsearch", p7_SEARCH_SEQS, cfg->hmmfile, cfg->dbfile, go); if (ofp) { if (fprintf(ofp, "[ok]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } /* Cleanup - prepare for exit */ for (i = 0; i < infocnt; ++i) p7_bg_Destroy(info[i].bg); #ifdef HMMER_THREADS if (ncpus > 0) { esl_workqueue_Reset(queue); while (esl_workqueue_Remove(queue, (void **) &block) == eslOK) esl_sq_DestroyBlock(block); esl_workqueue_Destroy(queue); esl_threads_Destroy(threadObj); } #endif free(info); p7_hmmfile_Close(hfp); esl_sqfile_Close(dbfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); if (ofp != stdout) fclose(ofp); if (afp) fclose(afp); if (tblfp) fclose(tblfp); if (domtblfp) fclose(domtblfp); if (pfamtblfp) fclose(pfamtblfp); return eslOK; ERROR: return eslFAIL; } #ifdef HAVE_MPI /* Define common tags used by the MPI master/slave processes */ #define HMMER_ERROR_TAG 1 #define HMMER_HMM_TAG 2 #define HMMER_SEQUENCE_TAG 3 #define HMMER_BLOCK_TAG 4 #define HMMER_PIPELINE_TAG 5 #define HMMER_TOPHITS_TAG 6 #define HMMER_HIT_TAG 7 #define HMMER_TERMINATING_TAG 8 #define HMMER_READY_TAG 9 /* mpi_failure() * Generate an error message. If the clients rank is not 0, a * message is created with the error message and sent to the * master process for handling. */ static void mpi_failure(char *format, ...) { va_list argp; int status = eslFAIL; int len; int rank; char str[512]; MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* format the error mesg */ va_start(argp, format); len = vsnprintf(str, sizeof(str), format, argp); va_end(argp); /* make sure the error string is terminated */ str[sizeof(str)-1] = '\0'; /* if the caller is the master, print the results and abort */ if (rank == 0) { if (fprintf(stderr, "\nError: ") < 0) exit(eslEWRITE); if (fprintf(stderr, "%s", str) < 0) exit(eslEWRITE); if (fprintf(stderr, "\n") < 0) exit(eslEWRITE); fflush(stderr); MPI_Abort(MPI_COMM_WORLD, status); exit(1); } else { MPI_Send(str, len, MPI_CHAR, 0, HMMER_ERROR_TAG, MPI_COMM_WORLD); pause(); } } #define MAX_BLOCK_SIZE (512*1024) typedef struct { uint64_t offset; uint64_t length; uint64_t count; } SEQ_BLOCK; typedef struct { int complete; int size; int current; int last; SEQ_BLOCK *blocks; } BLOCK_LIST; /* this routine parses the database keeping track of the blocks * offset within the file, number of sequences and the length * of the block. These blocks are passed as work units to the * MPI workers. If multiple hmm's are in the query file, the * blocks are reused without parsing the database a second time. */ int next_block(ESL_SQFILE *sqfp, ESL_SQ *sq, BLOCK_LIST *list, SEQ_BLOCK *block, int n_targetseqs) { int status = eslOK; /* if the list has been calculated, use it instead of parsing the database */ if (list->complete) { if (list->current == list->last) { block->offset = 0; block->length = 0; block->count = 0; status = eslEOF; } else { int inx = list->current++; block->offset = list->blocks[inx].offset; block->length = list->blocks[inx].length; block->count = list->blocks[inx].count; status = eslOK; } return status; } block->offset = 0; block->length = 0; block->count = 0; esl_sq_Reuse(sq); if (n_targetseqs == 0) status = eslEOF; //this is to handle the end-case of a restrictdb scenario, where no more targets are required, and we want to mark the list as complete while (block->length < MAX_BLOCK_SIZE && (n_targetseqs <0 || block->count < n_targetseqs) && (status = esl_sqio_ReadInfo(sqfp, sq)) == eslOK) { if (block->count == 0) block->offset = sq->roff; block->length = sq->eoff - block->offset + 1; block->count++; esl_sq_Reuse(sq); } if (block->count > 0) if (status == eslEOF || block->count == n_targetseqs) status = eslOK; if (status == eslEOF) list->complete = 1; /* add the block to the list of known blocks */ if (status == eslOK) { int inx; if (list->last >= list->size) { void *tmp; list->size += 500; ESL_RALLOC(list->blocks, tmp, sizeof(SEQ_BLOCK) * list->size); } inx = list->last++; list->blocks[inx].offset = block->offset; list->blocks[inx].length = block->length; list->blocks[inx].count = block->count; } return status; ERROR: return eslEMEM; } /* mpi_master() * The MPI version of hmmbuild. * Follows standard pattern for a master/worker load-balanced MPI program (J1/78-79). * * A master can only return if it's successful. * Errors in an MPI master come in two classes: recoverable and nonrecoverable. * * Recoverable errors include all worker-side errors, and any * master-side error that do not affect MPI communication. Error * messages from recoverable messages are delayed until we've cleanly * shut down the workers. * * Unrecoverable errors are master-side errors that may affect MPI * communication, meaning we cannot count on being able to reach the * workers and shut them down. Unrecoverable errors result in immediate * p7_Fail()'s, which will cause MPI to shut down the worker processes * uncleanly. */ static int mpi_master(ESL_GETOPTS *go, struct cfg_s *cfg) { FILE *ofp = stdout; /* results output file (-o) */ FILE *afp = NULL; /* alignment output file (-A) */ FILE *tblfp = NULL; /* output stream for tabular per-seq (--tblout) */ FILE *domtblfp = NULL; /* output stream for tabular per-dom (--domtblout) */ FILE *pfamtblfp= NULL; /* output stream for pfam-style tabular output (--pfamtblout) */ P7_BG *bg = NULL; /* null model */ P7_HMMFILE *hfp = NULL; /* open input HMM file */ ESL_SQFILE *dbfp = NULL; /* open input sequence file */ P7_HMM *hmm = NULL; /* one HMM query */ ESL_SQ *dbsq = NULL; /* one target sequence (digital) */ ESL_ALPHABET *abc = NULL; /* digital alphabet */ int dbfmt = eslSQFILE_UNKNOWN; /* format code for sequence database file */ ESL_STOPWATCH *w; int textw = 0; int nquery = 0; int status = eslOK; int hstatus = eslOK; int sstatus = eslOK; int dest; char *mpi_buf = NULL; /* buffer used to pack/unpack structures */ int mpi_size = 0; /* size of the allocated buffer */ BLOCK_LIST *list = NULL; SEQ_BLOCK block; int i; int size; MPI_Status mpistatus; char errbuf[eslERRBUFSIZE]; int n_targets; w = esl_stopwatch_Create(); if (esl_opt_GetBoolean(go, "--notextw")) textw = 0; else textw = esl_opt_GetInteger(go, "--textw"); if (esl_opt_IsOn(go, "--tformat")) { dbfmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--tformat")); if (dbfmt == eslSQFILE_UNKNOWN) mpi_failure("%s is not a recognized sequence database file format\n", esl_opt_GetString(go, "--tformat")); } /* Open the target sequence database */ status = esl_sqfile_Open(cfg->dbfile, dbfmt, p7_SEQDBENV, &dbfp); if (status == eslENOTFOUND) mpi_failure("Failed to open sequence file %s for reading\n", cfg->dbfile); else if (status == eslEFORMAT) mpi_failure("Sequence file %s is empty or misformatted\n", cfg->dbfile); else if (status == eslEINVAL) mpi_failure("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) mpi_failure("Unexpected error %d opening sequence file %s\n", status, cfg->dbfile); if (esl_opt_IsUsed(go, "--restrictdb_stkey") || esl_opt_IsUsed(go, "--restrictdb_n")) { if (esl_opt_IsUsed(go, "--ssifile")) esl_sqfile_OpenSSI(dbfp, esl_opt_GetString(go, "--ssifile")); else esl_sqfile_OpenSSI(dbfp, NULL); } /* Open the query profile HMM file */ status = p7_hmmfile_OpenE(cfg->hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) mpi_failure("File existence/permissions problem in trying to open HMM file %s.\n%s\n", cfg->hmmfile, errbuf); else if (status == eslEFORMAT) mpi_failure("File format problem in trying to open HMM file %s.\n%s\n", cfg->hmmfile, errbuf); else if (status != eslOK) mpi_failure("Unexpected error %d in opening HMM file %s.\n%s\n", status, cfg->hmmfile, errbuf); /* Open the results output files */ if (esl_opt_IsOn(go, "-o") && (ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) mpi_failure("Failed to open output file %s for writing\n", esl_opt_GetString(go, "-o")); if (esl_opt_IsOn(go, "-A") && (afp = fopen(esl_opt_GetString(go, "-A"), "w")) == NULL) mpi_failure("Failed to open alignment file %s for writing\n", esl_opt_GetString(go, "-A")); if (esl_opt_IsOn(go, "--tblout") && (tblfp = fopen(esl_opt_GetString(go, "--tblout"), "w")) == NULL) mpi_failure("Failed to open tabular per-seq output file %s for writing\n", esl_opt_GetString(go, "--tblout")); if (esl_opt_IsOn(go, "--domtblout") && (domtblfp = fopen(esl_opt_GetString(go, "--domtblout"), "w")) == NULL) mpi_failure("Failed to open tabular per-dom output file %s for writing\n", esl_opt_GetString(go, "--domtblout")); if (esl_opt_IsOn(go, "--pfamtblout") && (pfamtblfp = fopen(esl_opt_GetString(go, "--pfamtblout"), "w")) == NULL) mpi_failure("Failed to open pfam-style tabular output file %s for writing\n", esl_opt_GetString(go, "--pfamtblout")); ESL_ALLOC(list, sizeof(BLOCK_LIST)); list->complete = 0; list->size = 0; list->current = 0; list->last = 0; list->blocks = NULL; /* is not known 'til first HMM is read. */ hstatus = p7_hmmfile_Read(hfp, &abc, &hmm); if (hstatus == eslOK) { /* One-time initializations after alphabet becomes known */ output_header(ofp, go, cfg->hmmfile, cfg->dbfile); dbsq = esl_sq_CreateDigital(abc); bg = p7_bg_Create(abc); } if ( cfg->firstseq_key != NULL ) { //it's tempting to want to do this once and capture the offset position for future passes, but ncbi files make this non-trivial, so this keeps it general sstatus = esl_sqfile_PositionByKey(dbfp, cfg->firstseq_key); if (sstatus != eslOK) p7_Fail("Failure setting restrictdb_stkey to %d\n", cfg->firstseq_key); } /* Outer loop: over each query HMM in . */ while (hstatus == eslOK) { P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; /* optimized query profile */ P7_PIPELINE *pli = NULL; P7_TOPHITS *th = NULL; int seq_cnt = 0; nquery++; esl_stopwatch_Start(w); n_targets = cfg->n_targetseq; /* seqfile may need to be rewound (multiquery mode) */ if (nquery > 1) list->current = 0; if (fprintf(ofp, "Query: %s [M=%d]\n", hmm->name, hmm->M) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (hmm->acc) { if (fprintf(ofp, "Accession: %s\n", hmm->acc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (hmm->desc) { if (fprintf(ofp, "Description: %s\n", hmm->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } /* Convert to an optimized model */ gm = p7_profile_Create (hmm->M, abc); om = p7_oprofile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 100, p7_LOCAL); p7_oprofile_Convert(gm, om); /* Create processing pipeline and hit list */ th = p7_tophits_Create(); pli = p7_pipeline_Create(go, hmm->M, 100, FALSE, p7_SEARCH_SEQS); p7_pli_NewModel(pli, om, bg); /* Main loop: */ while ((n_targets==-1 || seq_cnt<=n_targets) && (sstatus = next_block(dbfp, dbsq, list, &block, n_targets-seq_cnt)) == eslOK ) { seq_cnt += block.count; if (MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &mpistatus) != 0) mpi_failure("MPI error %d receiving message from %d\n", mpistatus.MPI_SOURCE); MPI_Get_count(&mpistatus, MPI_PACKED, &size); if (mpi_buf == NULL || size > mpi_size) { void *tmp; ESL_RALLOC(mpi_buf, tmp, sizeof(char) * size); mpi_size = size; } dest = mpistatus.MPI_SOURCE; MPI_Recv(mpi_buf, size, MPI_PACKED, dest, mpistatus.MPI_TAG, MPI_COMM_WORLD, &mpistatus); if (mpistatus.MPI_TAG == HMMER_ERROR_TAG) mpi_failure("MPI client %d raised error:\n%s\n", dest, mpi_buf); if (mpistatus.MPI_TAG != HMMER_READY_TAG) mpi_failure("Unexpected tag %d from %d\n", mpistatus.MPI_TAG, dest); MPI_Send(&block, 3, MPI_LONG_LONG_INT, dest, HMMER_BLOCK_TAG, MPI_COMM_WORLD); } if (n_targets!=-1 && seq_cnt==n_targets) sstatus = eslEOF; switch(sstatus) { case eslEFORMAT: mpi_failure("Parse failed (sequence file %s):\n%s\n", dbfp->filename, esl_sqfile_GetErrorBuf(dbfp)); break; case eslEOF: break; default: mpi_failure("Unexpected error %d reading sequence file %s", sstatus, dbfp->filename); } block.offset = 0; block.length = 0; block.count = 0; /* wait for all workers to finish up their work blocks */ for (i = 1; i < cfg->nproc; ++i) { if (MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &mpistatus) != 0) mpi_failure("MPI error %d receiving message from %d\n", mpistatus.MPI_SOURCE); MPI_Get_count(&mpistatus, MPI_PACKED, &size); if (mpi_buf == NULL || size > mpi_size) { void *tmp; ESL_RALLOC(mpi_buf, tmp, sizeof(char) * size); mpi_size = size; } dest = mpistatus.MPI_SOURCE; MPI_Recv(mpi_buf, size, MPI_PACKED, dest, mpistatus.MPI_TAG, MPI_COMM_WORLD, &mpistatus); if (mpistatus.MPI_TAG == HMMER_ERROR_TAG) mpi_failure("MPI client %d raised error:\n%s\n", dest, mpi_buf); if (mpistatus.MPI_TAG != HMMER_READY_TAG) mpi_failure("Unexpected tag %d from %d\n", mpistatus.MPI_TAG, dest); } /* merge the results of the search results */ for (dest = 1; dest < cfg->nproc; ++dest) { P7_PIPELINE *mpi_pli = NULL; P7_TOPHITS *mpi_th = NULL; /* send an empty block to signal the worker they are done */ MPI_Send(&block, 3, MPI_LONG_LONG_INT, dest, HMMER_BLOCK_TAG, MPI_COMM_WORLD); /* wait for the results */ if ((status = p7_tophits_MPIRecv(dest, HMMER_TOPHITS_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size, &mpi_th)) != eslOK) mpi_failure("Unexpected error %d receiving tophits from %d", status, dest); if ((status = p7_pipeline_MPIRecv(dest, HMMER_PIPELINE_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size, go, &mpi_pli)) != eslOK) mpi_failure("Unexpected error %d receiving pipeline from %d", status, dest); p7_tophits_Merge(th, mpi_th); p7_pipeline_Merge(pli, mpi_pli); p7_pipeline_Destroy(mpi_pli); p7_tophits_Destroy(mpi_th); } /* Print the results. */ p7_tophits_SortBySortkey(th); p7_tophits_Threshold(th, pli); p7_tophits_Targets(ofp, th, pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); p7_tophits_Domains(ofp, th, pli, textw); if (fprintf(ofp, "\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (tblfp) p7_tophits_TabularTargets(tblfp, hmm->name, hmm->acc, th, pli, (nquery == 1)); if (domtblfp) p7_tophits_TabularDomains(domtblfp, hmm->name, hmm->acc, th, pli, (nquery == 1)); if (pfamtblfp) p7_tophits_TabularXfam(pfamtblfp, hmm->name, hmm->acc, th, pli); esl_stopwatch_Stop(w); p7_pli_Statistics(ofp, pli, w); if (fprintf(ofp, "//\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); /* Output the results in an MSA (-A option) */ if (afp) { ESL_MSA *msa = NULL; if (p7_tophits_Alignment(th, abc, NULL, NULL, 0, p7_ALL_CONSENSUS_COLS, &msa) == eslOK) { if (textw > 0) eslx_msafile_Write(afp, msa, eslMSAFILE_STOCKHOLM); else eslx_msafile_Write(afp, msa, eslMSAFILE_PFAM); if (fprintf(ofp, "# Alignment of %d hits satisfying inclusion thresholds saved to: %s\n", msa->nseq, esl_opt_GetString(go, "-A")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } else { if (fprintf(ofp, "# No hits satisfy inclusion thresholds; no alignment saved\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } esl_msa_Destroy(msa); } p7_pipeline_Destroy(pli); p7_tophits_Destroy(th); p7_hmm_Destroy(hmm); hstatus = p7_hmmfile_Read(hfp, &abc, &hmm); } /* end outer loop over query HMMs */ switch(hstatus) { case eslEOD: mpi_failure("read failed, HMM file %s may be truncated?", cfg->hmmfile); break; case eslEFORMAT: mpi_failure("bad file format in HMM file %s", cfg->hmmfile); break; case eslEINCOMPAT: mpi_failure("HMM file %s contains different alphabets", cfg->hmmfile); break; case eslEOF: /* EOF is good, that's what we expect here */ break; default: mpi_failure("Unexpected error (%d) in reading HMMs from %s", hstatus, cfg->hmmfile); } /* monitor all the workers to make sure they have ended */ for (i = 1; i < cfg->nproc; ++i) { if (MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &mpistatus) != 0) mpi_failure("MPI error %d receiving message from %d\n", mpistatus.MPI_SOURCE); MPI_Get_count(&mpistatus, MPI_PACKED, &size); if (mpi_buf == NULL || size > mpi_size) { void *tmp; ESL_RALLOC(mpi_buf, tmp, sizeof(char) * size); mpi_size = size; } dest = mpistatus.MPI_SOURCE; MPI_Recv(mpi_buf, size, MPI_PACKED, dest, mpistatus.MPI_TAG, MPI_COMM_WORLD, &mpistatus); if (mpistatus.MPI_TAG == HMMER_ERROR_TAG) mpi_failure("MPI client %d raised error:\n%s\n", dest, mpi_buf); if (mpistatus.MPI_TAG != HMMER_TERMINATING_TAG) mpi_failure("Unexpected tag %d from %d\n", mpistatus.MPI_TAG, dest); } /* Terminate outputs... any last words? */ if (tblfp) p7_tophits_TabularTail(tblfp, "hmmsearch", p7_SEARCH_SEQS, cfg->hmmfile, cfg->dbfile, go); if (domtblfp) p7_tophits_TabularTail(domtblfp, "hmmsearch", p7_SEARCH_SEQS, cfg->hmmfile, cfg->dbfile, go); if (pfamtblfp)p7_tophits_TabularTail(pfamtblfp, "hmmsearch", p7_SEARCH_SEQS, cfg->hmmfile, cfg->dbfile, go); if (ofp) { if (fprintf(ofp, "[ok]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } /* Cleanup - prepare for exit */ free(list); if (mpi_buf != NULL) free(mpi_buf); p7_hmmfile_Close(hfp); esl_sqfile_Close(dbfp); p7_bg_Destroy(bg); esl_sq_Destroy(dbsq); esl_stopwatch_Destroy(w); if (ofp != stdout) fclose(ofp); if (afp) fclose(afp); if (tblfp) fclose(tblfp); if (domtblfp) fclose(domtblfp); if (pfamtblfp) fclose(pfamtblfp); return eslOK; ERROR: return eslEMEM; } static int mpi_worker(ESL_GETOPTS *go, struct cfg_s *cfg) { P7_HMM *hmm = NULL; /* one HMM query */ ESL_SQ *dbsq = NULL; /* one target sequence (digital) */ ESL_ALPHABET *abc = NULL; /* digital alphabet */ P7_BG *bg = NULL; /* null model */ P7_HMMFILE *hfp = NULL; /* open input HMM file */ ESL_SQFILE *dbfp = NULL; /* open input sequence file */ int dbfmt = eslSQFILE_UNKNOWN; /* format code for sequence database file */ ESL_STOPWATCH *w; int status = eslOK; int hstatus = eslOK; int sstatus = eslOK; char *mpi_buf = NULL; /* buffer used to pack/unpack structures */ int mpi_size = 0; /* size of the allocated buffer */ MPI_Status mpistatus; char errbuf[eslERRBUFSIZE]; w = esl_stopwatch_Create(); /* Open the target sequence database */ status = esl_sqfile_Open(cfg->dbfile, dbfmt, p7_SEQDBENV, &dbfp); if (status == eslENOTFOUND) mpi_failure("Failed to open sequence file %s for reading\n", cfg->dbfile); else if (status == eslEFORMAT) mpi_failure("Sequence file %s is empty or misformatted\n", cfg->dbfile); else if (status == eslEINVAL) mpi_failure("Can't autodetect format of a stdin or .gz seqfile"); else if (status != eslOK) mpi_failure("Unexpected error %d opening sequence file %s\n", status, cfg->dbfile); /* Open the query profile HMM file */ status = p7_hmmfile_OpenE(cfg->hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) mpi_failure("File existence/permissions problem in trying to open HMM file %s.\n%s\n", cfg->hmmfile, errbuf); else if (status == eslEFORMAT) mpi_failure("File format problem in trying to open HMM file %s.\n%s\n", cfg->hmmfile, errbuf); else if (status != eslOK) mpi_failure("Unexpected error %d in opening HMM file %s.\n%s\n", status, cfg->hmmfile, errbuf); /* is not known 'til first HMM is read. */ hstatus = p7_hmmfile_Read(hfp, &abc, &hmm); if (hstatus == eslOK) { /* One-time initializations after alphabet becomes known */ dbsq = esl_sq_CreateDigital(abc); bg = p7_bg_Create(abc); esl_sqfile_SetDigital(dbfp, abc); } /* Outer loop: over each query HMM in . */ while (hstatus == eslOK) { P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; /* optimized query profile */ P7_PIPELINE *pli = NULL; P7_TOPHITS *th = NULL; SEQ_BLOCK block; esl_stopwatch_Start(w); status = 0; MPI_Send(&status, 1, MPI_INT, 0, HMMER_READY_TAG, MPI_COMM_WORLD); /* Convert to an optimized model */ gm = p7_profile_Create (hmm->M, abc); om = p7_oprofile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 100, p7_LOCAL); p7_oprofile_Convert(gm, om); th = p7_tophits_Create(); pli = p7_pipeline_Create(go, om->M, 100, FALSE, p7_SEARCH_SEQS); /* L_hint = 100 is just a dummy for now */ p7_pli_NewModel(pli, om, bg); /* receive a sequence block from the master */ MPI_Recv(&block, 3, MPI_LONG_LONG_INT, 0, HMMER_BLOCK_TAG, MPI_COMM_WORLD, &mpistatus); while (block.count > 0) { uint64_t length = 0; uint64_t count = block.count; status = esl_sqfile_Position(dbfp, block.offset); if (status != eslOK) mpi_failure("Cannot position sequence database to %ld\n", block.offset); while (count > 0 && (sstatus = esl_sqio_Read(dbfp, dbsq)) == eslOK) { length = dbsq->eoff - block.offset + 1; p7_pli_NewSeq(pli, dbsq); p7_bg_SetLength(bg, dbsq->n); p7_oprofile_ReconfigLength(om, dbsq->n); p7_Pipeline(pli, om, bg, dbsq, th); esl_sq_Reuse(dbsq); p7_pipeline_Reuse(pli); --count; } /* lets do a little bit of sanity checking here to make sure the blocks are the same */ if (count > 0) mpi_failure("Block count mismatch - expected %ld found %ld at offset %ld\n", block.count, block.count - count, block.offset); if (block.length != length) mpi_failure("Block length mismatch - expected %ld found %ld at offset %ld\n", block.length, length, block.offset); /* inform the master we need another block of sequences */ status = 0; MPI_Send(&status, 1, MPI_INT, 0, HMMER_READY_TAG, MPI_COMM_WORLD); /* wait for the next block of sequences */ MPI_Recv(&block, 3, MPI_LONG_LONG_INT, 0, HMMER_BLOCK_TAG, MPI_COMM_WORLD, &mpistatus); } esl_stopwatch_Stop(w); /* Send the top hits back to the master. */ p7_tophits_MPISend(th, 0, HMMER_TOPHITS_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size); p7_pipeline_MPISend(pli, 0, HMMER_PIPELINE_TAG, MPI_COMM_WORLD, &mpi_buf, &mpi_size); p7_pipeline_Destroy(pli); p7_tophits_Destroy(th); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); hstatus = p7_hmmfile_Read(hfp, &abc, &hmm); } /* end outer loop over query HMMs */ switch(hstatus) { case eslEOF: /* do nothing */ break; case eslEFORMAT: mpi_failure("bad file format in HMM file %s", cfg->hmmfile); break; case eslEINCOMPAT: mpi_failure("HMM file %s contains different alphabets", cfg->hmmfile); break; default: mpi_failure("Unexpected error (%d) in reading HMMs from %s", hstatus, cfg->hmmfile); } status = 0; MPI_Send(&status, 1, MPI_INT, 0, HMMER_TERMINATING_TAG, MPI_COMM_WORLD); if (mpi_buf != NULL) free(mpi_buf); p7_hmmfile_Close(hfp); esl_sqfile_Close(dbfp); p7_bg_Destroy(bg); esl_sq_Destroy(dbsq); esl_stopwatch_Destroy(w); return eslOK; } #endif /*HAVE_MPI*/ static int serial_loop(WORKER_INFO *info, ESL_SQFILE *dbfp, int n_targetseqs) { int sstatus; ESL_SQ *dbsq = NULL; /* one target sequence (digital) */ int seq_cnt = 0; dbsq = esl_sq_CreateDigital(info->om->abc); /* Main loop: */ while ( (n_targetseqs==-1 || seq_cntpli, dbsq); p7_bg_SetLength(info->bg, dbsq->n); p7_oprofile_ReconfigLength(info->om, dbsq->n); p7_Pipeline(info->pli, info->om, info->bg, dbsq, info->th); seq_cnt++; esl_sq_Reuse(dbsq); p7_pipeline_Reuse(info->pli); } if (n_targetseqs!=-1 && seq_cnt==n_targetseqs) sstatus = eslEOF; esl_sq_Destroy(dbsq); return sstatus; } #ifdef HMMER_THREADS static int thread_loop(ESL_THREADS *obj, ESL_WORK_QUEUE *queue, ESL_SQFILE *dbfp, int n_targetseqs) { int status = eslOK; int sstatus = eslOK; int eofCount = 0; ESL_SQ_BLOCK *block; void *newBlock; esl_workqueue_Reset(queue); esl_threads_WaitForStart(obj); status = esl_workqueue_ReaderUpdate(queue, NULL, &newBlock); if (status != eslOK) esl_fatal("Work queue reader failed"); /* Main loop: */ while (sstatus == eslOK ) { block = (ESL_SQ_BLOCK *) newBlock; if (n_targetseqs == 0) { block->count = 0; sstatus = eslEOF; } else { sstatus = esl_sqio_ReadBlock(dbfp, block, -1, n_targetseqs, FALSE); n_targetseqs -= block->count; } if (sstatus == eslEOF) { if (eofCount < esl_threads_GetWorkerCount(obj)) sstatus = eslOK; ++eofCount; } if (sstatus == eslOK) { status = esl_workqueue_ReaderUpdate(queue, block, &newBlock); if (status != eslOK) esl_fatal("Work queue reader failed"); } } status = esl_workqueue_ReaderUpdate(queue, block, NULL); if (status != eslOK) esl_fatal("Work queue reader failed"); if (sstatus == eslEOF) { /* wait for all the threads to complete */ esl_threads_WaitForFinish(obj); esl_workqueue_Complete(queue); } return sstatus; } static void pipeline_thread(void *arg) { int i; int status; int workeridx; WORKER_INFO *info; ESL_THREADS *obj; ESL_SQ_BLOCK *block = NULL; void *newBlock; impl_Init(); obj = (ESL_THREADS *) arg; esl_threads_Started(obj, &workeridx); info = (WORKER_INFO *) esl_threads_GetData(obj, workeridx); status = esl_workqueue_WorkerUpdate(info->queue, NULL, &newBlock); if (status != eslOK) esl_fatal("Work queue worker failed"); /* loop until all blocks have been processed */ block = (ESL_SQ_BLOCK *) newBlock; while (block->count > 0) { /* Main loop: */ for (i = 0; i < block->count; ++i) { ESL_SQ *dbsq = block->list + i; p7_pli_NewSeq(info->pli, dbsq); p7_bg_SetLength(info->bg, dbsq->n); p7_oprofile_ReconfigLength(info->om, dbsq->n); p7_Pipeline(info->pli, info->om, info->bg, dbsq, info->th); esl_sq_Reuse(dbsq); p7_pipeline_Reuse(info->pli); } status = esl_workqueue_WorkerUpdate(info->queue, block, &newBlock); if (status != eslOK) esl_fatal("Work queue worker failed"); block = (ESL_SQ_BLOCK *) newBlock; } status = esl_workqueue_WorkerUpdate(info->queue, block, NULL); if (status != eslOK) esl_fatal("Work queue worker failed"); esl_threads_Finished(obj, workeridx); return; } #endif /* HMMER_THREADS */ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/hmmsearch.c $ * SVN $Id: hmmsearch.c 3572 2011-06-20 18:06:12Z wheelert $ *****************************************************************/ hmmer-3.1b2/src/p7_gmxb.c0000664361611702660230000000741612473612614014577 0ustar wheelerteddy#include "p7_config.h" #include "easel.h" #include "hmmer.h" #include "p7_gbands.h" #include "p7_gmxb.h" P7_GMXB * p7_gmxb_Create(P7_GBANDS *bnd) { P7_GMXB *gxb = NULL; int status; ESL_ALLOC(gxb, sizeof(P7_GMXB)); gxb->dp = NULL; gxb->xmx = NULL; gxb->bnd = bnd; gxb->dalloc = 0; gxb->xalloc = 0; ESL_ALLOC(gxb->dp, sizeof(float) * bnd->ncell * p7G_NSCELLS); /* i.e. *3, for MID (0..2) */ ESL_ALLOC(gxb->xmx, sizeof(float) * bnd->nrow * p7G_NXCELLS); /* i.e. *5, for ENJBC (0..4) */ gxb->dalloc = bnd->ncell; gxb->xalloc = bnd->nrow; return gxb; ERROR: p7_gmxb_Destroy(gxb); return NULL; } int p7_gmxb_Reinit(P7_GMXB *gxb, P7_GBANDS *bnd) { int status; if (bnd->ncell > gxb->dalloc) { ESL_REALLOC(gxb->dp, sizeof(float) * bnd->ncell * p7G_NSCELLS); gxb->dalloc = bnd->ncell; } if (bnd->nrow > gxb->xalloc) { ESL_REALLOC(gxb->xmx, sizeof(float) * bnd->nrow * p7G_NXCELLS); gxb->xalloc = bnd->nrow; } gxb->bnd = bnd; return eslOK; ERROR: return status; } int p7_gmxb_Reuse(P7_GMXB *gxb) { gxb->bnd = NULL; return eslOK; } void p7_gmxb_Destroy(P7_GMXB *gxb) { if (gxb) { if (gxb->dp) free(gxb->dp); if (gxb->xmx) free(gxb->xmx); /* gxb->bnd is a reference ptr copy; memory remains caller's responsibility */ free(gxb); } } static void print_val(FILE *ofp, float val, int width, int precision, int flags) { if (flags & p7_SHOW_LOG) val = log(val); fprintf(ofp, "%*.*f ", width, precision, val); } int p7_gmxb_Dump(FILE *ofp, P7_GMXB *gxb, int flags) { int g, i, k, x; int *bnd_ip = gxb->bnd->imem; int *bnd_kp = gxb->bnd->kmem; float *dp = gxb->dp; float *xp = gxb->xmx; int M = gxb->bnd->M; int ia, ib; int ka, kb; int width = 9; int precision = 4; /* Header */ fprintf(ofp, " "); for (k = 0; k <= M; k++) fprintf(ofp, "%*d ", width, k); if (! (flags & p7_HIDE_SPECIALS)) fprintf(ofp, "%*s %*s %*s %*s %*s\n", width, "E", width, "N", width, "J", width, "B", width, "C"); fprintf(ofp, " "); for (k = 0; k <= M; k++) fprintf(ofp, "%*.*s ", width, width, "----------"); if (! (flags & p7_HIDE_SPECIALS)) fprintf(ofp, "%*.*s ", width, width, "----------"); fprintf(ofp, "\n"); i = 0; for (g = 0; g < gxb->bnd->nseg; g++) { ia = *bnd_ip; bnd_ip++; ib = *bnd_ip; bnd_ip++; if (ia > i+1) fprintf(ofp, "...\n\n"); for (i = ia; i <= ib; i++) { ka = *bnd_kp; bnd_kp++; kb = *bnd_kp; bnd_kp++; /* match cells */ fprintf(ofp, "%3d M ", i); for (k = 0; k < ka; k++) fprintf (ofp, "%*s ", width, "....."); for ( ; k <= kb; k++) print_val(ofp, dp[(k-ka)*p7G_NSCELLS + p7G_M], width, precision, flags); for ( ; k <= M; k++) fprintf (ofp, "%*s ", width, "....."); /* ENJBC specials */ if (! (flags & p7_HIDE_SPECIALS)) { for (x = 0; x < p7G_NXCELLS; x++) print_val(ofp, xp[x], width, precision, flags); } fprintf(ofp, "\n"); /* insert cells */ fprintf(ofp, "%3d I ", i); for (k = 0; k < ka; k++) fprintf (ofp, "%*s ", width, "....."); for ( ; k <= kb; k++) print_val(ofp, dp[(k-ka)*p7G_NSCELLS + p7G_I], width, precision, flags); for ( ; k <= M; k++) fprintf (ofp, "%*s ", width, "....."); fprintf(ofp, "\n"); /* delete cells */ fprintf(ofp, "%3d D ", i); for (k = 0; k < ka; k++) fprintf(ofp, "%*s ", width, "....."); for ( ; k <= kb; k++) print_val(ofp, dp[(k-ka)*p7G_NSCELLS + p7G_D], width, precision, flags); for ( ; k <= M; k++) fprintf(ofp, "%*s ", width, "....."); fprintf(ofp, "\n\n"); dp += p7G_NSCELLS * (kb-ka+1); /* skip ahead to next dp sparse "row" */ xp += p7G_NXCELLS; } } if (i <= gxb->bnd->L) fprintf(ofp, "...\n"); return eslOK; } hmmer-3.1b2/src/impl_dummy/0000775361611702660230000000000012473272236015236 5ustar wheelerteddyhmmer-3.1b2/src/impl_dummy/mpi.c0000664361611702660230000003371312473612613016173 0ustar wheelerteddy/* Optional support for MPI parallelization. * * Contents: * 1. Communicating P7_OPROFILE, a score profile. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Copyright and license information. * * SRE, Thu Jun 14 09:59:20 2007 [Janelia] [Tom Waits, Orphans] * SVN $Id: mpi.c 4560 2013-11-04 09:24:44Z eddys $ */ #include "p7_config.h" #ifdef HAVE_MPI #include #include #include #include "mpi.h" #include "easel.h" #include "esl_mpi.h" #include "esl_getopts.h" #include "hmmer.h" #include "impl_dummy.h" /***************************************************************** * 1. Communicating P7_OPROFILE, an optimized model. *****************************************************************/ /* Function: p7_oprofile_MPISend() * Synopsis: Send an OPROFILE as an MPI work unit. * Incept: MSF, Wed Oct 21, 2009 [Janelia] * * Purpose: Sends an OPROFILE as a work unit to MPI process * (where ranges from 0..), tagged * with MPI tag , for MPI communicator , as * the sole workunit or result. * * Work units are prefixed by a status code. If is * , the work unit is an code followed by * the packed HMM. If is NULL, the work unit is an * code, which knows how to * interpret; this is typically used for an end-of-data * signal to cleanly shut down worker processes. * * In order to minimize alloc/free cycles in this routine, * caller passes a pointer to a working buffer <*buf> of * size <*nalloc> characters. If necessary (i.e. if is * too big to fit), <*buf> will be reallocated and <*nalloc> * increased to the new size. As a special case, if <*buf> * is and <*nalloc> is 0, the buffer will be * allocated appropriately, but the caller is still * responsible for free'ing it. * * Returns: on success; <*buf> may have been reallocated and * <*nalloc> may have been increased. * * Throws: if an MPI call fails; if a malloc/realloc * fails. In either case, <*buf> and <*nalloc> remain valid and useful * memory (though the contents of <*buf> are undefined). * * Note: Compare to p7_hmmfile_WriteBinary(). The two operations (sending * an HMM via MPI, or saving it as a binary file to disk) are * similar. */ int p7_oprofile_MPISend(P7_OPROFILE *om, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc) { return p7_profile_MPISend(om, dest, tag, comm, buf, nalloc); } /* Function: p7_oprofile_MPIRecv() * Synopsis: Receives an OPROFILE as a work unit from an MPI sender. * Incept: MSF, Wed Oct 21, 2009 [Janelia] * * Purpose: Receive a work unit that consists of a single OPROFILE * sent by MPI (<0..nproc-1>, or * ) tagged as for MPI communicator . * * Work units are prefixed by a status code. If the unit's * code is and no errors are encountered, this * routine will return and a non- <*ret_om>. * If the unit's code is (a shutdown signal), * this routine returns and <*ret_om> is . * * Caller provides a working buffer <*buf> of size * <*nalloc> characters. These are passed by reference, so * that <*buf> can be reallocated and <*nalloc> increased * if necessary. As a special case, if <*buf> is and * <*nalloc> is 0, the buffer will be allocated * appropriately, but the caller is still responsible for * free'ing it. * * Caller may or may not already know what alphabet the OPROFILE * is expected to be in. A reference to the current * alphabet is passed in . If the alphabet is unknown, * pass <*abc = NULL>, and when the OPROFILE is received, an * appropriate new alphabet object is allocated and passed * back to the caller via <*abc>. If the alphabet is * already known, <*ret_abc> is that alphabet, and the new * OPROFILE's alphabet type is verified to agree with it. This * mechanism allows an application to let the first OPROFILE * determine the alphabet type for the application, while * still keeping the alphabet under the application's scope * of control. * * Returns: on success. <*ret_om> contains the received OPROFILE; * it is allocated here, and the caller is responsible for * free'ing it. <*buf> may have been reallocated to a * larger size, and <*nalloc> may have been increased. If * <*abc> was passed as , it now points to an * object that was allocated here; caller is * responsible for free'ing this. * * Returns if an end-of-data signal was received. * In this case, <*buf>, <*nalloc>, and <*abc> are left unchanged, * and <*ret_om> is . * * Returns if the OPROFILE is in a different alphabet * than <*abc> said to expect. In this case, <*abc> is unchanged, * <*buf> and <*nalloc> may have been changed, and <*ret_om> is * . * * Throws: on allocation error, in which case <*ret_om> is * . */ int p7_oprofile_MPIRecv(int source, int tag, MPI_Comm comm, char **buf, int *nalloc, ESL_ALPHABET **abc, P7_OPROFILE **ret_om) { return p7_profile_MPIRecv(source, tag, comm, abc, NULL, buf, nalloc, ret_om); } /*----------------- end, P7_OPROFILE communication -------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ #ifdef p7MPI_BENCHMARK /* mpicc -g -Wall -L. -I. -L ../easel -I ../easel -D p7MPI_BENCHMARK -o benchmark-mpi mpi.c -lhmmer -leasel -lm qsub -N benchmark-mpi -j y -R y -b y -cwd -V -pe lam-mpi-tight 2 'mpirun C ./benchmark-mpi ~/notebook/1227-msp-statistics/Pfam.hmm > bench.out' qsub -N benchmark-mpi -j y -R y -b y -cwd -V -pe lam-mpi-tight 2 'mpirun C ./benchmark-mpi -b ~/notebook/1227-msp-statistics/Pfam.hmm > bench.out' */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_alphabet.h" #include "esl_random.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-b", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "baseline timing: don't send any HMMs", 0 }, { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "arrest after start: for debugging MPI under gdb", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for MPI communication"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_BG *bg = p7_bg_Create(abc); int my_rank; int nproc; char *buf = NULL; int nbuf = 0; int subtotalM = 0; int allM = 0; int stalling = esl_opt_GetBoolean(go, "--stall"); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &nproc); while (stalling); /* Master MPI process: */ if (my_rank == 0) { ESL_STOPWATCH *w = esl_stopwatch_Create(); P7_HMMFILE *hfp = NULL; P7_OPROFILE *om = NULL; P7_HMM *hmm = NULL; /* Read HMMs from a file. */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); esl_stopwatch_Start(w); while (p7_oprofile_ReadMSV(hfp, &abc, &om) == eslOK && p7_oprofile_ReadRest(hfp, om) == eslOK) { if (!esl_opt_GetBoolean(go, "-b")) p7_oprofile_MPISend(om, 1, 0, MPI_COMM_WORLD, &buf, &nbuf); /* 1 = dest; 0 = tag */ p7_hmm_Destroy(hmm); p7_oprofile_Destroy(om); } p7_oprofile_MPISend(NULL, 1, 0, MPI_COMM_WORLD, &buf, &nbuf); /* send the "no more HMMs" sign */ MPI_Reduce(&subtotalM, &allM, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); printf("total: %d\n", allM); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "CPU Time: "); esl_stopwatch_Destroy(w); } /* Worker MPI process: */ else { P7_OPROFILE *om_recd = NULL; while (p7_oprofile_MPIRecv(0, 0, MPI_COMM_WORLD, &buf, &nbuf, &abc, &om_recd) == eslOK) { subtotalM += om_recd->M; p7_oprofile_Destroy(om_recd); } MPI_Reduce(&subtotalM, &allM, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); } free(buf); p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); MPI_Finalize(); exit(0); } #endif /*p7MPI_BENCHMARK*/ /*---------------------- end, benchmark -------------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7MPI_TESTDRIVE static void utest_oprofileSendRecv(int my_rank, int nproc) { ESL_RANDOMNESS *r = esl_randomness_CreateFast(42); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OPROFILE *om2 = NULL; int M = 200; int L = 400; char *wbuf = NULL; int wn = 0; int i; char errbuf[eslERRBUFSIZE]; p7_hmm_Sample(r, M, abc, &hmm); /* master and worker's sampled profiles are identical */ bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); om = p7_oprofile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); p7_oprofile_Convert(gm, om); p7_bg_SetLength (bg, L); if (my_rank == 0) { for (i = 1; i < nproc; i++) { ESL_DPRINTF1(("Master: receiving test profile\n")); p7_oprofile_MPIRecv(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &wbuf, &wn, &abc, &om2); ESL_DPRINTF1(("Master: test profile received\n")); if (p7_oprofile_Compare(om, om2, 0.001, errbuf) != eslOK) p7_Die("Received profile not identical to what was sent\n%s", errbuf); p7_oprofile_Destroy(om2); } } else { ESL_DPRINTF1(("Worker %d: sending test profile\n", my_rank)); p7_oprofile_MPISend(om, 0, 0, MPI_COMM_WORLD, &wbuf, &wn); ESL_DPRINTF1(("Worker %d: test profile sent\n", my_rank)); } free(wbuf); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); return; } #endif /*p7MPI_TESTDRIVE*/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 4. Test driver. *****************************************************************/ #ifdef p7MPI_TESTDRIVE /* mpicc -o mpi_utest -g -Wall -I../easel -L../easel -I. -L. -Dp7MPI_TESTDRIVE mpi.c -lhmmer -leasel -lm * In an MPI environment: (qlogin -pe lam-mpi-tight 2; setenv JOB_ID ; setenv TMPDIR /tmp/.... * mpirun C ./mpi_utest */ #include "esl_getopts.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "arrest after start: for debugging MPI under gdb", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for mpi.c"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); int my_rank; int nproc; /* For debugging: stall until GDB can be attached */ if (esl_opt_GetBoolean(go, "--stall")) pause(); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &nproc); utest_oprofileSendRecv(my_rank, nproc); MPI_Finalize(); return 0; } #endif /*p7MPI_TESTDRIVE*/ /*---------------------- end, test driver -----------------------*/ #else /*!HAVE_MPI*/ /* If we don't have MPI compiled in, provide some nothingness to: * a. prevent Mac OS/X ranlib from bitching about .o file that "has no symbols" * b. prevent compiler from bitching about "empty compilation unit" * c. automatically pass the automated tests. */ void p7_mpi_DoAbsolutelyNothing(void) { return; } #if defined p7MPI_TESTDRIVE || p7MPI_BENCHMARK || p7MPI_EXAMPLE int main(void) { return 0; } #endif #endif /*HAVE_MPI*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_dummy/impl_dummy.h0000664361611702660230000002454512473612613017572 0ustar wheelerteddy/* non-optimized implementation of various MSV, Viterbi, and Forward * routines: structures, declarations, and macros. * * MSF, Oct 27, 2009 [Janelia] * SVN $Id: impl_dummy.h 4511 2013-07-08 19:05:40Z wheelert $ */ #ifndef P7_IMPL_DUMMY_INCLUDED #define P7_IMPL_DUMMY_INCLUDED #include "p7_config.h" #include /* roundf() */ #include "esl_alphabet.h" #include "esl_random.h" //#include /* DENORMAL_MODE */ #include "hmmer.h" /***************************************************************** * 1. P7_OPROFILE: an optimized score profile *****************************************************************/ typedef P7_PROFILE P7_OPROFILE; #define p7O_NTRANS 8 /* 7 core transitions + BMk entry */ enum p7o_tsc_e { p7O_BM = 0, p7O_MM = 1, p7O_IM = 2, p7O_DM = 3, p7O_MD = 4, p7O_MI = 5, p7O_II = 6, p7O_DD = 7 }; typedef struct { int count; /* number of objects in the block */ int listSize; /* maximum number elements in the list */ P7_OPROFILE **list; /* array of objects */ } P7_OM_BLOCK; /* retrieve match odds ratio [k][x] * this gets used in p7_alidisplay.c, when we're deciding if a residue is conserved or not */ static inline float p7_oprofile_FGetEmission(const P7_OPROFILE *om, int k, int x) { return expf(p7P_MSC(om, k, x)); } /***************************************************************** * 2. P7_OMX: a one-row dynamic programming matrix *****************************************************************/ typedef P7_GMX P7_OMX; /***************************************************************** * 3. Declarations of the external API. *****************************************************************/ /* p7_omx.c */ extern P7_OMX *p7_omx_Create(int allocM, int allocL, int allocXL); extern int p7_omx_GrowTo(P7_OMX *ox, int allocM, int allocL, int allocXL); extern int p7_omx_FDeconvert(P7_OMX *ox, P7_GMX *gx); extern int p7_omx_Reuse (P7_OMX *ox); extern void p7_omx_Destroy(P7_OMX *ox); extern int p7_omx_SetDumpMode(FILE *fp, P7_OMX *ox, int truefalse); extern int p7_omx_DumpMFRow(P7_OMX *ox, int rowi, uint8_t xE, uint8_t xN, uint8_t xJ, uint8_t xB, uint8_t xC); extern int p7_omx_DumpVFRow(P7_OMX *ox, int rowi, int16_t xE, int16_t xN, int16_t xJ, int16_t xB, int16_t xC); extern int p7_omx_DumpFBRow(P7_OMX *ox, int logify, int rowi, int width, int precision, float xE, float xN, float xJ, float xB, float xC); /* p7_oprofile.c */ extern P7_OPROFILE *p7_oprofile_Create(int M, const ESL_ALPHABET *abc); extern int p7_oprofile_IsLocal(const P7_OPROFILE *om); extern void p7_oprofile_Destroy(P7_OPROFILE *om); extern size_t p7_oprofile_Sizeof(P7_OPROFILE *om); extern P7_OPROFILE *p7_oprofile_Copy(P7_OPROFILE *om); extern P7_OPROFILE *p7_oprofile_Clone(P7_OPROFILE *om); extern int p7_oprofile_UpdateFwdEmissionScores(P7_OPROFILE *om, P7_BG *bg, float *fwd_emissions, float *sc_arr); extern int p7_oprofile_Convert(const P7_PROFILE *gm, P7_OPROFILE *om); extern int p7_oprofile_ReconfigLength (P7_OPROFILE *om, int L); extern int p7_oprofile_ReconfigMSVLength (P7_OPROFILE *om, int L); extern int p7_oprofile_ReconfigRestLength(P7_OPROFILE *om, int L); extern int p7_oprofile_ReconfigMultihit (P7_OPROFILE *om, int L); extern int p7_oprofile_ReconfigUnihit (P7_OPROFILE *om, int L); extern int p7_oprofile_Dump(FILE *fp, const P7_OPROFILE *om); extern int p7_oprofile_Sample(ESL_RANDOMNESS *r, const ESL_ALPHABET *abc, const P7_BG *bg, int M, int L, P7_HMM **opt_hmm, P7_PROFILE **opt_gm, P7_OPROFILE **ret_om); extern int p7_oprofile_Compare(P7_OPROFILE *om1, P7_OPROFILE *om2, float tol, char *errmsg); extern int p7_profile_SameAsMF(const P7_OPROFILE *om, P7_PROFILE *gm); extern int p7_profile_SameAsVF(const P7_OPROFILE *om, P7_PROFILE *gm); extern int p7_oprofile_GetFwdTransitionArray(const P7_OPROFILE *om, int type, float *arr ); extern int p7_oprofile_GetSSVEmissionScoreArray(const P7_OPROFILE *om, uint8_t *arr ); extern int p7_oprofile_GetFwdEmissionScoreArray(const P7_OPROFILE *om, float *arr ); extern int p7_oprofile_GetFwdEmissionArray(const P7_OPROFILE *om, P7_BG *bg, float *arr ); /* decoding.c */ extern int p7_Decoding (const P7_OPROFILE *om, const P7_OMX *oxf, P7_OMX *oxb, P7_OMX *pp); extern int p7_DomainDecoding(const P7_OPROFILE *om, const P7_OMX *oxf, const P7_OMX *oxb, P7_DOMAINDEF *ddef); /* fwdback.c */ extern int p7_Forward (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *fwd, float *opt_sc); extern int p7_ForwardParser (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *fwd, float *opt_sc); extern int p7_Backward (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc); extern int p7_BackwardParser(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc); /* io.c */ extern int p7_oprofile_Write(FILE *ffp, FILE *pfp, P7_OPROFILE *om); extern int p7_oprofile_ReadMSV (P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OPROFILE **ret_om); extern int p7_oprofile_ReadBlockMSV(P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OM_BLOCK *hmmBlock); extern int p7_oprofile_ReadRest(P7_HMMFILE *hfp, P7_OPROFILE *om); extern P7_OM_BLOCK *p7_oprofile_CreateBlock(int size); extern void p7_oprofile_DestroyBlock(P7_OM_BLOCK *block); /* msvfilter.c */ extern int p7_MSVFilter (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc); extern int p7_SSVFilter_longtarget(const ESL_DSQ *dsq, int L, P7_OPROFILE *om, P7_OMX *ox, const P7_SCOREDATA *msvdata, P7_BG *bg, double P, P7_HMM_WINDOWLIST *windowlist); /* null2.c */ extern int p7_Null2_ByExpectation(const P7_OPROFILE *om, P7_OMX *pp, float *null2); extern int p7_Null2_ByTrace (const P7_OPROFILE *om, const P7_TRACE *tr, int zstart, int zend, P7_OMX *wrk, float *null2); /* optacc.c */ extern int p7_OptimalAccuracy(const P7_OPROFILE *om, const P7_OMX *pp, P7_OMX *ox, float *ret_e); extern int p7_OATrace (const P7_OPROFILE *om, const P7_OMX *pp, const P7_OMX *ox, P7_TRACE *tr); /* stotrace.c */ extern int p7_StochasticTrace(ESL_RANDOMNESS *rng, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *ox, P7_TRACE *tr); /* vitfilter.c */ extern int p7_ViterbiFilter(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc); extern int p7_ViterbiFilter_longtarget(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float filtersc, double P, P7_HMM_WINDOWLIST *windowlist); /* vitscore.c */ extern int p7_ViterbiScore (const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc); /***************************************************************** * 4. Implementation specific initialization *****************************************************************/ static inline void impl_Init(void) { } static inline void impl_ThreadInit(void) { } #endif /* P7_IMPL_DUMMY_INCLUDED */ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ /* * Currently (and this remains in flux as of 14 Dec 07) an optimized * implementation is required to provide an MSVFilter(), * ViterbiFilter() and a ForwardFilter() implementation. A call to * p7_oprofile_Convert() makes an optimized profile that works for * all filters. * * Any "Filter" returns a score may be an approximation (with * characterized or at least characterizable error), and which may * have limited upper range, such that high scores are returned as * eslINFINITY. Additionally, Filters might only work on local * alignment modes, because they are allowed to make assumptions about * the range of scores. * * Here, MSVFilter() and ViterbiFilter() are 8-bit lspace * implementations with limited precision and limited range (max 20 * bits); ForwardFilter() is a pspace float implementation with * correct precision and limited range (max ~127 bits). Both require * local mode models. * * An optimized implementation may also provide other optimized * routines. It provides specialized Convert*() functions for these, * which may no-op (if the OPROFILE already suffices), or may * overwrite parts of the OPROFILE that Filters or other routines * might need. Therefore, after using a "bonus" function, a fresh * Convert() will be needed before a Filter() is called again. This * API is tentative. * * A "Score" function might be an additional target for optimization, * for example. A "Score" function returns a correct score with full * floating-point precision and range, and works for any mode model. * * In the generic implementation, profile scores are 32-bit floating * point log-odds scores. In an optimized implementation, internally, * profile scores can be of any type, and may be in log space (lspace) * or probability space (pspace). (Calculations in probability space * are useful in the Forward algorithm, but always limit range.) A * shorthand of "lspace uchar" means log-odds scores stored as * unsigned chars, for example; "pspace float" means odds ratios * stored as floats. * * A note on memory alignment: malloc() is required to return a * pointer "suitably aligned so that it may be aligned to a pointer of * any type of object" (C99 7.20.3). __m128 vectors are 128-bits wide, * so malloc() ought to return a pointer aligned on a 16-byte * boundary. However, this is not the case for glibc, and apparently * other system libraries. Google turns up threads of arguments * between glibc and gcc developers over whose problem this is; this * argument has apparently not been resolved, and is of no help. * Here, we manually align the relevant pointers by overallocating in * *_mem with malloc, then arithmetically manipulating the address to * mask off (~0xf). */ hmmer-3.1b2/src/impl_dummy/msvfilter.c0000664361611702660230000004722012473612613017417 0ustar wheelerteddy/* Non-optimized MSV filter implementation. * * A "filter" is a one-row, O(M), DP implementation that calculates an * approximated nat score (i.e. in limited precision - here, uchar) * and may have limited numeric range. It will return if * its numeric range is exceeded, in which case the caller will have * to obtain the score by another (probably slower) method. * * Contents: * 1. p7_MSVFilter() implementation * 2. Benchmark driver * 3. Unit tests * 4. Test driver * 5. Example * 6. Copyright and license information * * MSF Tue Nov 3, 2009 [Janelia] * SVN $Id: msvfilter.c 4386 2013-02-06 01:24:42Z wheelert $ */ #include "p7_config.h" #include #include #include "easel.h" #include "hmmer.h" #include "impl_dummy.h" /***************************************************************** * 1. The p7_MSVFilter() DP implementation. *****************************************************************/ /* Function: p7_MSVFilter() * Synopsis: Calculates MSV score. * Incept: MSF, Tue Nov 3, 2009 [Janelia] * * Purpose: Calculates an approximation of the MSV score for sequence * of length residues, using optimized profile , * and a preallocated one-row DP matrix . Return the * estimated MSV score (in nats) in . * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * ret_sc - RETURN: MSV score (in nats) * * Returns: on success. */ int p7_MSVFilter(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc) { int status; if ((status = p7_gmx_GrowTo(ox, om->M, L)) != eslOK) return status; return p7_GMSV(dsq, L, om, ox, 2.0, ret_sc); } /*------------------ end, p7_MSVFilter() ------------------------*/ /* Function: p7_SSVFilter_longtarget() * Synopsis: Finds windows with MSV scores above some threshold (slow, correct version) * * Purpose: Calculates the MSV score for regions of sequence of length * residues, and captures the positions at which such regions exceed the * score required to be significant in the eyes of the calling function * (usually p=0.02). Note - this is out of touch with the vectorized * SSVFilter code. As dummy functions are deprecated, there's no * need to update it. * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * msvdata - compact representation of substitution scores, for backtracking diagonals * bg - the background model, required for translating a P-value threshold into a score threshold * P - p-value below which a region is captured as being above threshold * windowlist - RETURN: array of hit windows (start and end of diagonal) for the above-threshold areas * * Note: Not worried about speed here. Based on p7_GMSV * * Returns: on success. * * Throws: if allocation is too small. */ int p7_SSVFilter_longtarget(const ESL_DSQ *dsq, int L, P7_OPROFILE *om, P7_OMX *ox, const P7_SCOREDATA *msvdata, P7_BG *bg, double P, P7_HMM_WINDOWLIST *windowlist) { int status; if ((status = p7_gmx_GrowTo(ox, om->M, L)) != eslOK) return status; return p7_GMSV_longtarget(dsq, L, om, ox, 2.0, bg, P, windowlist); } /***************************************************************** * 2. Benchmark driver. *****************************************************************/ /* The benchmark driver has some additional non-benchmarking options * to facilitate small-scale (by-eye) comparison of MSV scores against * other implementations, for debugging purposes. * * The -c option compares against p7_GMSV() scores. This allows * measuring the error inherent in the SSE implementation's reduced * precision (p7_MSVFilter() runs in uint8_t; p7_GMSV() uses floats). * * The -x option compares against an emulation that should give * exactly the same scores. The emulation is achieved by jiggering the * fp scores in a generic profile to disallow gaps, have the same * rounding and precision as the uint8_t's MSVFilter() is using, and * to make the same post-hoc corrections for the NN, CC, JJ * contributions to the final nat score; under these contrived * circumstances, p7_GViterbi() gives the same scores as * p7_MSVFilter(). * * For using either -c or -x, you probably also want to limit the * number of generated target sequences, using -N10 or -N100 for * example. */ #ifdef p7MSVFILTER_BENCHMARK /* gcc -o msvfilter-benchmark -std=gnu99 -g -Wall -I.. -L.. -I../../easel -L../../easel -Dp7MSVFILTER_BENCHMARK msvfilter.c -lhmmer -leasel -lm icc -o msvfilter-benchmark -O3 -static -I.. -L.. -I../../easel -L../../easel -Dp7MSVFILTER_BENCHMARK msvfilter.c -lhmmer -leasel -lm ./benchmark-msvfilter runs benchmark ./benchmark-msvfilter -N100 -c compare scores to generic impl ./benchmark-msvfilter -N100 -x compare scores to exact emulation */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for MSVFilter() implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc1, sc2; double base_time, bench_time, Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); if (esl_opt_GetBoolean(go, "-x")) p7_profile_SameAsMF(om, gm); ox = p7_omx_Create(gm->M, 0, 0); gx = p7_gmx_Create(gm->M, L); /* Get a baseline time: how long it takes just to generate the sequences */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_MSVFilter (dsq, L, om, ox, &sc1); /* -c option: compare generic to fast score */ if (esl_opt_GetBoolean(go, "-c")) { p7_GMSV (dsq, L, gm, gx, 2.0, &sc2); printf("%.4f %.4f\n", sc1, sc2); } /* -x option: compare generic to fast score in a way that should give exactly the same result */ if (esl_opt_GetBoolean(go, "-x")) { p7_GViterbi(dsq, L, gm, gx, &sc2); printf("%.4f %.4f\n", sc1, sc2); } } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7MSVFILTER_BENCHMARK*/ /*------------------ end, benchmark driver ----------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7MSVFILTER_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" /* * We can check that scores are identical (within machine error) to * scores of generic DP with scores rounded the same way. Do this for * a random model of length , for test sequences of length . * * We assume that we don't accidentally generate a high-scoring random * sequence that overflows MSVFilter()'s limited range. * */ static void utest_msv_filter(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *ox = p7_omx_Create(M, L, 0); P7_GMX *gx = p7_gmx_Create(M, L); float sc1, sc2; p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om); p7_profile_SameAsMF(om, gm); while (N--) { if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal("seq generation failed"); if (p7_MSVFilter(dsq, L, om, ox, &sc1) != eslOK) esl_fatal("MSV failed"); if (p7_GViterbi (dsq, L, gm, gx, &sc2) != eslOK) esl_fatal("viterbi failed"); if (fabs(sc1-sc2) > 0.0001) esl_fatal("MSV score not equal to Viterbi score"); } free(dsq); p7_hmm_Destroy(hmm); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); } #endif /*p7MSVFILTER_TESTDRIVE*/ /*-------------------- end, unit tests --------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7MSVFILTER_TESTDRIVE /* gcc -g -Wall -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o msvfilter_utest -Dp7MSVFILTER_TESTDRIVE msvfilter.c -lhmmer -leasel -lm ./msvfilter_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "-L", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "145", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for the SSE MSVFilter() implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* First round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (esl_opt_GetBoolean(go, "-v")) printf("MSVFilter() tests, DNA\n"); utest_msv_filter(r, abc, bg, M, L, N); /* normal sized models */ utest_msv_filter(r, abc, bg, 1, L, 10); /* size 1 models */ utest_msv_filter(r, abc, bg, M, 1, 10); /* size 1 sequences */ esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (esl_opt_GetBoolean(go, "-v")) printf("MSVFilter() tests, protein\n"); utest_msv_filter(r, abc, bg, M, L, N); utest_msv_filter(r, abc, bg, 1, L, 10); utest_msv_filter(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*VITFILTER_TESTDRIVE*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7MSVFILTER_EXAMPLE /* A minimal example. Also useful for debugging on small HMMs and sequences. gcc -g -Wall -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o msvfilter_example -Dp7MSVFILTER_EXAMPLE msvfilter.c -lhmmer -leasel -lm ./msvfilter_example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_gumbel.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in one line awkable format", 0 }, { "-P", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in profmark format", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of MSV filter algorithm"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float msvraw, nullsc, msvscore; float graw, gscore; double P, gP; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Open sequence file for reading */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); /* allocate DP matrices, both a generic and an optimized one */ ox = p7_omx_Create(gm->M, 0, 0); /* one row version */ gx = p7_gmx_Create(gm->M, sq->n); /* Useful to place and compile in for debugging: p7_gmx_Dump(stdout, gx, p7_DEFAULT); dumps a generic DP matrix */ while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { p7_oprofile_ReconfigLength(om, sq->n); p7_ReconfigLength(gm, sq->n); p7_bg_SetLength(bg, sq->n); p7_omx_GrowTo(ox, om->M, 0, sq->n); p7_gmx_GrowTo(gx, gm->M, sq->n); p7_MSVFilter (sq->dsq, sq->n, om, ox, &msvraw); p7_bg_NullOne (bg, sq->dsq, sq->n, &nullsc); msvscore = (msvraw - nullsc) / eslCONST_LOG2; P = esl_gumbel_surv(msvscore, om->evparam[p7_MMU], om->evparam[p7_MLAMBDA]); p7_GMSV(sq->dsq, sq->n, gm, gx, 2.0, &graw); gscore = (graw - nullsc) / eslCONST_LOG2; gP = esl_gumbel_surv(gscore, gm->evparam[p7_MMU], gm->evparam[p7_MLAMBDA]); if (esl_opt_GetBoolean(go, "-1")) { printf("%-30s\t%-20s\t%9.2g\t%7.2f\t%9.2g\t%7.2f\n", sq->name, hmm->name, P, msvscore, gP, gscore); } else if (esl_opt_GetBoolean(go, "-P")) { /* output suitable for direct use in profmark benchmark postprocessors: */ printf("%g\t%.2f\t%s\t%s\n", P, msvscore, sq->name, hmm->name); } else { printf("target sequence: %s\n", sq->name); printf("msv filter raw score: %.2f nats\n", msvraw); printf("null score: %.2f nats\n", nullsc); printf("per-seq score: %.2f bits\n", msvscore); printf("P-value: %g\n", P); printf("GMSV raw score: %.2f nats\n", graw); printf("GSMV per-seq score: %.2f bits\n", gscore); printf("GSMV P-value: %g\n", gP); } esl_sq_Reuse(sq); } /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7MSVFILTER_EXAMPLE*/ /*---------------------- end, example ---------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_dummy/optacc.c0000664361611702660230000006014112473612613016652 0ustar wheelerteddy/* Non-optimized optimal accuracy alignment. * * Contents: * 1. Optimal accuracy alignment, DP fill * 2. OA traceback * 3. Benchmark driver * 4. Unit tests * 5. Test driver * 6. Example * 7. Copyright and license information. * * MSF Tue Nov 3, 2009 [Janelia] * SVN $Id: optacc.c 3665 2011-08-25 13:45:55Z eddys $ */ #include "p7_config.h" #include #include "easel.h" #include "hmmer.h" #include "impl_dummy.h" /***************************************************************** * 1. Optimal accuracy alignment, DP fill *****************************************************************/ /* Function: p7_OptimalAccuracy() * Synopsis: DP fill of an optimal accuracy alignment calculation. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Calculates the fill step of the optimal accuracy decoding * algorithm \citep{Kall05}. * * Caller provides the posterior decoding matrix , * which was calculated by Forward/Backward on a target sequence * of length L> using the query model . * * Caller also provides a DP matrix , allocated for a full * M> by comparison. The routine fills this in * with OA scores. * * Args: gm - query profile * pp - posterior decoding matrix created by * gx - RESULT: caller provided DP matrix for M> by * ret_e - RETURN: expected number of correctly decoded positions * * Returns: on success, and <*ret_e> contains the final OA * score, which is the expected number of correctly decoded * positions in the target sequence (up to ). * * Throws: (no abnormal error conditions) */ int p7_OptimalAccuracy(const P7_OPROFILE *om, const P7_OMX *pp, P7_OMX *ox, float *ret_e) { return p7_GOptimalAccuracy(om, pp, ox, ret_e); } /*------------------- end, OA DP fill ---------------------------*/ /***************************************************************** * 2. OA traceback *****************************************************************/ /* Function: p7_OATrace() * Synopsis: Optimal accuracy decoding: traceback. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: The traceback stage of the optimal accuracy decoding algorithm * \citep{Kall05}. * * Caller provides the OA DP matrix that was just * calculated by , as well as the * posterior decoding matrix , which was calculated by * Forward/Backward on a target sequence using the query * model . Because the calculation depends only on * , the target sequence itself need not be provided. * * The resulting optimal accuracy decoding traceback is put * in a caller-provided traceback structure , which the * caller has allocated for optional posterior probability * annotation on residues (with , * generally). This structure will be reallocated * internally if necessary. * * Args: om - profile * pp - posterior probability matrix * ox - OA matrix to trace, LxM * tr - storage for the recovered traceback * * Returns: on success. */ int p7_OATrace(const P7_OPROFILE *om, const P7_OMX *pp, const P7_OMX *ox, P7_TRACE *tr) { return p7_GOATrace((P7_PROFILE *)om, (P7_GMX *)pp, (P7_GMX *)ox, tr); } /*---------------------- end, OA traceback ----------------------*/ /***************************************************************** * 3. Benchmark driver *****************************************************************/ #ifdef p7OPTACC_BENCHMARK /* icc -O3 -static -o optacc_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7OPTACC_BENCHMARK optacc.c -lhmmer -leasel -lm ./optacc_benchmark runs benchmark on optimal accuracy fill and trace ./optacc_benchmark -c -N1 compare scores of non-optimized version to generic impl ./optacc_benchmark -x -N1 test that scores match trusted implementation. */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { "--notrace", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "only benchmark the DP fill stage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for optimal accuracy alignment, non-optimized version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx1 = NULL; P7_GMX *gx2 = NULL; P7_OMX *ox1 = NULL; P7_OMX *ox2 = NULL; P7_TRACE *tr = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float fsc, bsc, accscore; float fsc_g, bsc_g, accscore_g; double Mcs; p7_FLogsumInit(); if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); if (esl_opt_GetBoolean(go, "-x") && p7_FLogsumError(-0.4, -0.5) > 0.0001) p7_Fail("-x here requires p7_Logsum() recompiled in slow exact mode"); ox1 = p7_omx_Create(gm->M, L, L); ox2 = p7_omx_Create(gm->M, L, L); tr = p7_trace_CreateWithPP(); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_Forward (dsq, L, om, ox1, &fsc); p7_Backward(dsq, L, om, ox1, ox2, &bsc); p7_Decoding(om, ox1, ox2, ox2); esl_stopwatch_Start(w); for (i = 0; i < N; i++) { p7_OptimalAccuracy(om, ox2, ox1, &accscore); if (! esl_opt_GetBoolean(go, "--notrace")) { p7_OATrace(om, ox2, ox1, tr); p7_trace_Reuse(tr); } } esl_stopwatch_Stop(w); Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) w->user; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); if (esl_opt_GetBoolean(go, "-c") || esl_opt_GetBoolean(go, "-x") ) { gx1 = p7_gmx_Create(gm->M, L); gx2 = p7_gmx_Create(gm->M, L); p7_GForward (dsq, L, gm, gx1, &fsc_g); p7_GBackward(dsq, L, gm, gx2, &bsc_g); p7_GDecoding(gm, gx1, gx2, gx2); p7_GOptimalAccuracy(gm, gx2, gx1, &accscore_g); printf("generic: fwd=%8.4f bck=%8.4f acc=%8.4f\n", fsc_g, bsc_g, accscore_g); printf("non-optimized: fwd=%8.4f bck=%8.4f acc=%8.4f\n", fsc, bsc, accscore); p7_gmx_Destroy(gx1); p7_gmx_Destroy(gx2); } free(dsq); p7_omx_Destroy(ox1); p7_omx_Destroy(ox2); p7_trace_Destroy(tr); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7OPTACC_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 4. Unit tests *****************************************************************/ #ifdef p7OPTACC_TESTDRIVE #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" /* * 1. Compare accscore to GOptimalAccuracy(). * 2. Compare trace to GOATrace(). * * Note: This test is subject to some expected noise and can fail * for entirely innocent reasons. Generic Forward/Backward calculations with * p7_GForward(), p7_GBackward() use coarse-grain table lookups to sum * log probabilities, and sufficient roundoff error can accumulate to * change the optimal accuracy traceback, causing this test to fail. * So, if optacc_utest fails, before you go looking for bugs, first * go to ../logsum.c, change the #ifdef to activate the slow/accurate * version, recompile and rerun optacc_utest. If the failure goes away, * you can ignore it. - SRE, Wed Dec 17 09:45:31 2008 */ static void utest_optacc(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { char *msg = "optimal accuracy unit test failed"; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_SQ *sq = esl_sq_CreateDigital(abc); P7_OMX *ox1 = p7_omx_Create(M, L, L); P7_OMX *ox2 = p7_omx_Create(M, L, L); P7_GMX *gx1 = p7_gmx_Create(M, L); P7_GMX *gx2 = p7_gmx_Create(M, L); P7_TRACE *tr = p7_trace_CreateWithPP(); P7_TRACE *trg = p7_trace_CreateWithPP(); P7_TRACE *tro = p7_trace_CreateWithPP(); float accscore_o; float fsc, bsc, accscore; float fsc_g, bsc_g, accscore_g, accscore_g2; float pptol = 0.01; float sctol = 0.001; float gtol; p7_FLogsumInit(); gtol = ( (p7_FLogsumError(-0.4, -0.5) > 0.0001) ? 0.1 : 0.001); if (p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om)!= eslOK) esl_fatal(msg); while (N--) { if (p7_ProfileEmit(r, hmm, gm, bg, sq, tro) != eslOK) esl_fatal(msg); if (p7_omx_GrowTo(ox1, M, sq->n, sq->n) != eslOK) esl_fatal(msg); if (p7_omx_GrowTo(ox2, M, sq->n, sq->n) != eslOK) esl_fatal(msg); if (p7_gmx_GrowTo(gx1, M, sq->n) != eslOK) esl_fatal(msg); if (p7_gmx_GrowTo(gx2, M, sq->n) != eslOK) esl_fatal(msg); if (p7_Forward (sq->dsq, sq->n, om, ox1, &fsc) != eslOK) esl_fatal(msg); if (p7_Backward(sq->dsq, sq->n, om, ox1, ox2, &bsc) != eslOK) esl_fatal(msg); if (p7_Decoding(om, ox1, ox2, ox2) != eslOK) esl_fatal(msg); if (p7_OptimalAccuracy(om, ox2, ox1, &accscore) != eslOK) esl_fatal(msg); if (p7_OATrace(om, ox2, ox1, tr) != eslOK) esl_fatal(msg); if (p7_GForward (sq->dsq, sq->n, gm, gx1, &fsc_g) != eslOK) esl_fatal(msg); if (p7_GBackward(sq->dsq, sq->n, gm, gx2, &bsc_g) != eslOK) esl_fatal(msg); if (p7_GDecoding(gm, gx1, gx2, gx2) != eslOK) esl_fatal(msg); if (p7_GOptimalAccuracy(gm, gx2, gx1, &accscore_g) != eslOK) esl_fatal(msg); if (p7_GOATrace(gm, gx2, gx1, trg) != eslOK) esl_fatal(msg); if (p7_trace_SetPP(tro, gx2) != eslOK) esl_fatal(msg); if (esl_opt_GetBoolean(go, "--traces")) { p7_trace_Dump(stdout, tro, gm, sq->dsq); p7_trace_Dump(stdout, tr, gm, sq->dsq); p7_trace_Dump(stdout, trg, gm, sq->dsq); } if (p7_trace_Validate(tr, abc, sq->dsq, NULL) != eslOK) esl_fatal(msg); if (p7_trace_Validate(trg, abc, sq->dsq, NULL) != eslOK) esl_fatal(msg); if (p7_trace_Compare(tr, trg, pptol) != eslOK) esl_fatal(msg); accscore_o = p7_trace_GetExpectedAccuracy(tro); /* according to gx2; see p7_trace_SetPP() call above */ accscore_g2 = p7_trace_GetExpectedAccuracy(trg); if (esl_FCompare(fsc, bsc, sctol) != eslOK) esl_fatal(msg); if (esl_FCompare(fsc_g, bsc_g, gtol) != eslOK) esl_fatal(msg); if (esl_FCompare(fsc, fsc_g, gtol) != eslOK) esl_fatal(msg); if (esl_FCompare(accscore, accscore_g, gtol) != eslOK) esl_fatal(msg); if (esl_FCompare(accscore_g, accscore_g2, gtol) != eslOK) esl_fatal(msg); if (accscore_g2 < accscore_o) esl_fatal(msg); /* the above deserves explanation: * - accscore_o is the accuracy of the originally emitted trace, according * to the generic posterior decoding matrix . This is a lower bound * on the expected # of accurately aligned residues found by a DP * optimization. * - accscore is the accuracy found by the fast (vector) code DP implementation. * - accscore_g is the accuracy found by the generic DP implementation. * accscore and accscore_g should be nearly identical, * within tolerance of roundoff error accumulation and * the imprecision of Logsum() tables. * - accscore_g2 is the accuracy of the traceback identified by the generic * DP implementation. It should be identical (within order-of-evaluation * roundoff error) to accscore_g. * * the "accscore_g2 < accscore_o" test is carefully contrived. * accscore_o is a theoretical lower bound but because of fp error, * accscore and (much more rarely) even accscore_g can exceed accscore_o. * accscore_g2, however, is calculated with identical order of evaluation * as accscore_o if the optimal trace does turn out to be identical to * the originally emitted trace. It should be extremely unlikely (though * not impossible) for accscore_o to exceed accscore_g2. (The DP algorithm * would have to identify a trace that was different than the original trace, * which the DP algorithm, by order-of-evaluation, assigned higher accuracy, * but order-of-evaluation in traceback dependent code assigned lower accuracy. * [xref J5/29] */ esl_sq_Reuse(sq); p7_trace_Reuse(tr); p7_trace_Reuse(trg); p7_trace_Reuse(tro); } p7_trace_Destroy(tro); p7_trace_Destroy(trg); p7_trace_Destroy(tr); p7_gmx_Destroy(gx2); p7_gmx_Destroy(gx1); p7_omx_Destroy(ox2); p7_omx_Destroy(ox1); esl_sq_Destroy(sq); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); } #endif /*p7OPTACC_TESTDRIVE*/ /*------------------- end, unit tests ---------------------------*/ /***************************************************************** * 5. Test driver *****************************************************************/ #ifdef p7OPTACC_TESTDRIVE /* Failures in this test are to be expected, if you change the defaults. * The default RNG seed of 41 is very carefully chosen! Most seeds will * cause this test to fail. (Only 13 and 41 work for seeds 1..50.) * * The generic fwd/bck algorithms work in log space and suffer from a * small amount of imprecision, not only from the use of FLogsum()'s * table-driven approximation, but even (apparently) inherent in log() * and exp(). To minimize this, the generic decoding algorithm burns * time renormalizing each row. Still, it's a problem. See notes at * the header of utest_optacc() for more info. * * Another expected failure mode is when a fwd, bck nat score are close to * 0.0; FCompare() can evaluate two close-to-zero numbers as "different" * even if their absolute diff is negligible. (I suppose I could fix this.) */ /* gcc -g -Wall -std=gnu99 -o optacc_utest -I.. -L.. -I../../easel -L../../easel -Dp7OPTACC_TESTDRIVE optacc.c -lhmmer -leasel -lm ./optacc_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "41", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "50", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "45", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "20", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { "--traces", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump all tracebacks", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for non-optimized Forward, Backward implementations"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* first round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_optacc(go, r, abc, bg, M, L, N); /* normal sized models */ utest_optacc(go, r, abc, bg, 1, L, 10); /* size 1 models */ utest_optacc(go, r, abc, bg, M, 1, 10); /* size 1 sequences */ esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); /* Second round of tests for amino alphabets. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_optacc(go, r, abc, bg, M, L, N); utest_optacc(go, r, abc, bg, 1, L, 10); utest_optacc(go, r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*p7OPTACC_TESTDRIVE*/ /*------------------ end, test driver ---------------------------*/ /***************************************************************** * 6. Example *****************************************************************/ #ifdef p7OPTACC_EXAMPLE /* gcc -g -Wall -o optacc_example -Dp7OPTACC_EXAMPLE -I.. -I../../easel -L.. -L../../easel optacc.c -lhmmer -leasel -lm ./optacc_example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-d", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump posterior residue decoding matrix", 0 }, { "-m", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump OA matrix", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of optimal accuracy alignment, non-optimized implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox1 = NULL; P7_OMX *ox2 = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; P7_TRACE *tr = NULL; int format = eslSQFILE_UNKNOWN; char errbuf[eslERRBUFSIZE]; float fsc, bsc; float accscore; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_OpenDigital(abc, seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); esl_sqfile_Close(sqfp); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); /* multihit local: H3 default */ om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); /* Allocations */ ox1 = p7_omx_Create(gm->M, sq->n, sq->n); ox2 = p7_omx_Create(gm->M, sq->n, sq->n); tr = p7_trace_CreateWithPP(); p7_FLogsumInit(); /* Run Forward, Backward; do OA fill and trace */ p7_Forward (sq->dsq, sq->n, om, ox1, &fsc); p7_Backward(sq->dsq, sq->n, om, ox1, ox2, &bsc); p7_Decoding(om, ox1, ox2, ox2); /* is now the posterior decoding matrix */ p7_OptimalAccuracy(om, ox2, ox1, &accscore); /* is now the OA matrix */ p7_OATrace(om, ox2, ox1, tr); if (esl_opt_GetBoolean(go, "-d")) p7_gmx_Dump(stdout, ox2, p7_DEFAULT); if (esl_opt_GetBoolean(go, "-m")) p7_gmx_Dump(stdout, ox1, p7_DEFAULT); p7_trace_Dump(stdout, tr, gm, sq->dsq); if (p7_trace_Validate(tr, abc, sq->dsq, errbuf) != eslOK) p7_Die("trace fails validation:\n%s\n", errbuf); printf("fwd = %.4f nats\n", fsc); printf("bck = %.4f nats\n", bsc); printf("acc = %.4f (%.2f%%)\n", accscore, accscore * 100. / (float) sq->n); /* Cleanup */ esl_sq_Destroy(sq); p7_trace_Destroy(tr); p7_omx_Destroy(ox1); p7_omx_Destroy(ox2); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7OPTACC_EXAMPLE*/ /*-------------------- end, example -----------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_dummy/.dropbox.attr0000775361611702660230000000000212473271761017662 0ustar wheelerteddy{}hmmer-3.1b2/src/impl_dummy/decoding.c0000664361611702660230000003013112473612613017151 0ustar wheelerteddy/* Non-optimized posterior decoding algorithms * * Contents: * 1. Posterior decoding algorithms. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * MSF Tue Nov 3, 2009 [Janelia] * SVN $Id: decoding.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include #include #include "easel.h" #include "hmmer.h" #include "impl_dummy.h" /***************************************************************** * 1. Posterior decoding algorithms. *****************************************************************/ /* Function: p7_Decoding() * Synopsis: Posterior decoding of residue assignment. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Identical to . See * documentation for more info. * * Args: om - profile (must be the same that was used to fill , ). * oxf - filled Forward matrix * oxb - filled Backward matrix * pp - RESULT: posterior decoding matrix. * * Returns: on success. * * Returns if numeric range of floating-point * values is exceeded during posterior probability * calculations. In this case, the matrix must not be * used by the caller; it will contain values. To be * safe, the caller should recalculate a generic posterior * decoding matrix instead -- generic calculations are done * in log probability space and are robust. * * However, I currently believe that this overflow only * occurs on an unusual and ignorable situation: when a * model is used on a region that contains * two or more high scoring distinct alignments to the * model. And that only happens if domain definition fails, * after stochastic clustering, and an envelope that we * pass to p7_domaindef.c::rescore_isolated_domain() * erroneously contains 2+ distinct domains. (Note that * this is different from having 2+ expected B states: that * can happen normally, if a single consistent domain is * better described by 2+ passes through the model). And I * strongly believe all this only can happen on repetitive * or biased-composition junk that we want to ignore anyway. * Therefore the caller should be safe in ignoring any domain * for which returns . */ int p7_Decoding(const P7_OPROFILE *om, const P7_OMX *oxf, P7_OMX *oxb, P7_OMX *pp) { return p7_GDecoding(om, oxf, oxb, pp); } /* Function: p7_DomainDecoding() * Synopsis: Posterior decoding of domain location. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Identical to . See * documentation for more info. * * Args: gm - profile * oxf - filled Forward matrix * oxb - filled Backward matrix * ddef - container for the results. * * Returns: on success. * * on numeric overflow. See commentary in * . */ int p7_DomainDecoding(const P7_OPROFILE *om, const P7_OMX *oxf, const P7_OMX *oxb, P7_DOMAINDEF *ddef) { return p7_GDomainDecoding(om, oxf, oxb, ddef); } /*------------------ end, posterior decoding --------------------*/ /***************************************************************** * 2. Benchmark driver *****************************************************************/ #ifdef p7DECODING_BENCHMARK /* icc -O3 -static -o decoding_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7DECODING_BENCHMARK decoding.c -lhmmer -leasel -lm */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for non-optimized posterior residue decoding"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *fwd = NULL; P7_OMX *bck = NULL; P7_OMX *pp = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float fsc, bsc; double Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); fwd = p7_omx_Create(gm->M, L, L); bck = p7_omx_Create(gm->M, L, L); pp = p7_omx_Create(gm->M, L, L); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_Forward (dsq, L, om, fwd, &fsc); p7_Backward(dsq, L, om, fwd, bck, &bsc); esl_stopwatch_Start(w); for (i = 0; i < N; i++) p7_Decoding(om, fwd, bck, pp); esl_stopwatch_Stop(w); Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) w->user; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(fwd); p7_omx_Destroy(bck); p7_omx_Destroy(pp); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return eslOK; } #endif /*p7DECODING_BENCHMARK*/ /*------------------ end, benchmark driver ----------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7DECODING_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" #include "hmmer.h" #include "impl_dummy.h" /* compare results to GDecoding(). */ static void utest_decoding(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N, float tolerance) { char *msg = "decoding unit test failed"; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *fwd = p7_omx_Create(M, L, L); P7_OMX *bck = p7_omx_Create(M, L, L); P7_OMX *pp = p7_omx_Create(M, L, L); P7_GMX *gxf = p7_gmx_Create(M, L); P7_GMX *gxb = p7_gmx_Create(M, L); P7_GMX *gxp2 = p7_gmx_Create(M, L); float fsc1, fsc2; float bsc1, bsc2; if (p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om) != eslOK) esl_fatal(msg); while (N--) { if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal(msg); if (p7_Forward (dsq, L, om, fwd, &fsc1) != eslOK) esl_fatal(msg); if (p7_Backward (dsq, L, om, fwd, bck, &bsc1) != eslOK) esl_fatal(msg); if (p7_Decoding(om, fwd, bck, pp) != eslOK) esl_fatal(msg); if (p7_GForward (dsq, L, gm, gxf, &fsc2) != eslOK) esl_fatal(msg); if (p7_GBackward(dsq, L, gm, gxb, &bsc2) != eslOK) esl_fatal(msg); if (p7_GDecoding(gm, gxf, gxb, gxp2) != eslOK) esl_fatal(msg); if (p7_gmx_Compare(pp, gxp2, tolerance) != eslOK) esl_fatal(msg); } p7_gmx_Destroy(gxp2); p7_gmx_Destroy(gxf); p7_gmx_Destroy(gxb); p7_omx_Destroy(fwd); p7_omx_Destroy(bck); p7_omx_Destroy(pp); free(dsq); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); } #endif /*p7DECODING_TESTDRIVE*/ /*--------------------- end, unit tests -------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7DECODING_TESTDRIVE /* gcc -o decoding_utest -g -Wall -I.. -L.. -I../../easel -L../../easel -Dp7DECODING_TESTDRIVE decoding.c -lhmmer -leasel -lm ./decoding_utest */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-t", eslARG_REAL, "0.01", NULL, NULL, NULL, NULL, NULL, "floating point comparison tolerance", 0 }, { "-L", eslARG_INT, "40", NULL, NULL, NULL, NULL, NULL, "length of sampled sequences", 0 }, { "-M", eslARG_INT, "40", NULL, NULL, NULL, NULL, NULL, "length of sampled test profile", 0 }, { "-N", eslARG_INT, "10", NULL, NULL, NULL, NULL, NULL, "number of sampled test sequences", 0 }, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for non-optmized posterior decoding"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_BG *bg = p7_bg_Create(abc); int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); float tol = esl_opt_GetReal (go, "-t"); p7_FLogsumInit(); utest_decoding(r, abc, bg, M, L, N, tol); esl_getopts_Destroy(go); esl_randomness_Destroy(r); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); return eslOK; } #endif /*p7DECODING_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7DECODING_EXAMPLE #endif /*p7DECODING_EXAMPLE*/ /*------------------------ example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_dummy/vitfilter.c0000664361611702660230000004625012473612613017416 0ustar wheelerteddy/* Non-optimized Viterbi filter implementation. * * It calculates a close approximation of the Viterbi score, in * limited precision (signed words: 16 bits) and range. It may overflow on * high scoring sequences, but this indicates that the sequence is a * high-scoring hit worth examining more closely anyway. It will not * underflow, in local alignment mode. * * Contents: * 1. Viterbi filter implementation. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information * * MSF Tue Nov 3, 2009 [Janelia] * SVN $Id: vitfilter.c 4103 2012-06-24 02:09:43Z wheelert $ */ #include "p7_config.h" #include #include #include "easel.h" #include "hmmer.h" #include "impl_dummy.h" /***************************************************************** * 1. Viterbi filter implementation. *****************************************************************/ /* Function: p7_ViterbiFilter() * Synopsis: Calculates Viterbi score, vewy vewy fast, in limited precision. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Calculates an approximation of the Viterbi score for sequence * of length residues, using optimized profile , * and a preallocated one-row DP matrix . Return the * estimated Viterbi score (in nats) in . * * Score may overflow (and will, on high-scoring * sequences), but will not underflow. * * The model must be in a local alignment mode; other modes * cannot provide the necessary guarantee of no underflow. * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * ret_sc - RETURN: Viterbi score (in nats) * * Returns: on success; * if the score overflows; in this case * <*ret_sc> is , and the sequence can * be treated as a high-scoring hit. */ int p7_ViterbiFilter(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc) { int status; if ((status = p7_gmx_GrowTo(ox, om->M, L)) != eslOK) return status; return p7_GViterbi(dsq, L, om, ox, ret_sc); } /*---------------- end, p7_ViterbiFilter() ----------------------*/ /* Function: p7_ViterbiFilter_longtarget() * Synopsis: Finds windows within potentially long sequence blocks with Viterbi * scores above threshold (vewy vewy fast, in limited precision) * * Purpose: Calculates the Viterbi score for regions of sequence , * and captures the positions at which such regions exceed the * score required to be significant in the eyes of the calling * function (usually p=0.001). * * The resulting landmarks are converted to subsequence * windows by the calling function * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * filtersc - null or bias correction, required for translating a P-value threshold into a score threshold * P - p-value below which a region is captured as being above threshold * windowlist - RETURN: array of hit windows (start and end of diagonal) for the above-threshold areas * * Returns: on success; * * Throws: if allocation is too small * * Xref: See p7_ViterbiFilter() */ int p7_ViterbiFilter_longtarget(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float filtersc, double P, P7_HMM_WINDOWLIST *windowlist) { int status; if ((status = p7_gmx_GrowTo(ox, om->M, L)) != eslOK) return status; return p7_GViterbi_longtarget(dsq, L, om, ox, filtersc, P, windowlist); } /*---------------- end, p7_ViterbiFilter() ----------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ #ifdef p7VITFILTER_BENCHMARK /* -c, -x are used for debugging, testing; see msvfilter.c for explanation */ /* gcc -o vitfilter_benchmark -std=gnu99 -g -Wall -I.. -L.. -I../../easel -L../../easel -Dp7VITFILTER_BENCHMARK vitfilter.c -lhmmer -leasel -lm icc -o vitfilter_benchmark -O3 -static -I.. -L.. -I../../easel -L../../easel -Dp7VITFILTER_BENCHMARK vitfilter.c -lhmmer -leasel -lm ./benchmark-vitfilter runs benchmark ./benchmark-vitfilter -N100 -c compare scores to generic impl ./benchmark-vitfilter -N100 -x compare scores to exact emulation */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for Viterbi filter"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc1, sc2; double base_time, bench_time, Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); if (esl_opt_GetBoolean(go, "-x")) p7_profile_SameAsVF(om, gm); ox = p7_omx_Create(gm->M, 0, 0); gx = p7_gmx_Create(gm->M, L); /* Get a baseline time: how long it takes just to generate the sequences */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; /* Run the benchmark */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_ViterbiFilter(dsq, L, om, ox, &sc1); if (esl_opt_GetBoolean(go, "-c")) { p7_GViterbi(dsq, L, gm, gx, &sc2); printf("%.4f %.4f\n", sc1, sc2); } if (esl_opt_GetBoolean(go, "-x")) { p7_GViterbi(dsq, L, gm, gx, &sc2); printf("%.4f %.4f\n", sc1, sc2); } } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7VITFILTER_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 3. Unit tests. *****************************************************************/ #ifdef p7VITFILTER_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" /* ViterbiFilter() unit test * * We can check that scores are identical (within machine error) to * scores of generic DP with scores rounded the same way. Do this for * a random model of length , for test sequences of length . * * We assume that we don't accidentally generate a high-scoring random * sequence that overflows ViterbiFilter()'s limited range. * */ static void utest_viterbi_filter(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *ox = p7_omx_Create(M, L, 0); P7_GMX *gx = p7_gmx_Create(M, L); float sc1, sc2; p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om); p7_profile_SameAsVF(om, gm); /* round and scale the scores in the same as in */ while (N--) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_ViterbiFilter(dsq, L, om, ox, &sc1); p7_GViterbi (dsq, L, gm, gx, &sc2); if (fabs(sc1-sc2) > 0.001) esl_fatal("viterbi filter unit test failed: scores differ (%.2f, %.2f)", sc1, sc2); } free(dsq); p7_hmm_Destroy(hmm); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); } #endif /*p7VITFILTER_TESTDRIVE*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7VITFILTER_TESTDRIVE /* gcc -g -Wall -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o vitfilter_utest -Dp7VITFILTER_TESTDRIVE vitfilter.c -lhmmer -leasel -lm ./vitfilter_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "-L", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "145", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for the non-optimized implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* First round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (esl_opt_GetBoolean(go, "-v")) printf("ViterbiFilter() tests, DNA\n"); utest_viterbi_filter(r, abc, bg, M, L, N); utest_viterbi_filter(r, abc, bg, 1, L, 10); utest_viterbi_filter(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); /* Second round of tests for amino alphabets. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (esl_opt_GetBoolean(go, "-v")) printf("ViterbiFilter() tests, protein\n"); utest_viterbi_filter(r, abc, bg, M, L, N); utest_viterbi_filter(r, abc, bg, 1, L, 10); utest_viterbi_filter(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*VITFILTER_TESTDRIVE*/ /*---------------- end, test driver -----------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7VITFILTER_EXAMPLE /* A minimal example. Also useful for debugging on small HMMs and sequences. gcc -g -Wall -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o vitfilter_example -Dp7VITFILTER_EXAMPLE vitfilter.c -lhmmer -leasel -lm ./vitfilter_example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_gumbel.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in one line awkable format", 0 }, { "-P", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in profmark format", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of Viterbi filter algorithm"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float vfraw, nullsc, vfscore; float graw, gscore; double P, gP; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); /* allocate DP matrices, both a generic and an optimized one */ ox = p7_omx_Create(gm->M, 0, sq->n); gx = p7_gmx_Create(gm->M, sq->n); /* Useful to place and compile in for debugging: p7_oprofile_Dump(stdout, om); dumps the optimized profile p7_omx_SetDumpMode(ox, TRUE); makes the fast DP algorithms dump their matrices p7_gmx_Dump(stdout, gx, p7_DEFAULT); dumps a generic DP matrix */ while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { p7_oprofile_ReconfigLength(om, sq->n); p7_ReconfigLength(gm, sq->n); p7_bg_SetLength(bg, sq->n); p7_omx_GrowTo(ox, om->M, 0, sq->n); p7_gmx_GrowTo(gx, gm->M, sq->n); p7_ViterbiFilter (sq->dsq, sq->n, om, ox, &vfraw); p7_bg_NullOne (bg, sq->dsq, sq->n, &nullsc); vfscore = (vfraw - nullsc) / eslCONST_LOG2; P = esl_gumbel_surv(vfscore, om->evparam[p7_VMU], om->evparam[p7_VLAMBDA]); p7_GViterbi (sq->dsq, sq->n, gm, gx, &graw); gscore = (graw - nullsc) / eslCONST_LOG2; gP = esl_gumbel_surv(gscore, gm->evparam[p7_VMU], gm->evparam[p7_VLAMBDA]); if (esl_opt_GetBoolean(go, "-1")) { printf("%-30s\t%-20s\t%9.2g\t%7.2f\t%9.2g\t%7.2f\n", sq->name, hmm->name, P, vfscore, gP, gscore); } else if (esl_opt_GetBoolean(go, "-P")) { /* output suitable for direct use in profmark benchmark postprocessors: */ printf("%g\t%.2f\t%s\t%s\n", P, vfscore, sq->name, hmm->name); } else { printf("target sequence: %s\n", sq->name); printf("vit filter raw score: %.2f nats\n", vfraw); printf("null score: %.2f nats\n", nullsc); printf("per-seq score: %.2f bits\n", vfscore); printf("P-value: %g\n", P); printf("GViterbi raw score: %.2f nats\n", graw); printf("GViterbi seq score: %.2f bits\n", gscore); printf("GViterbi P-value: %g\n", gP); } esl_sq_Reuse(sq); } /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7VITFILTER_EXAMPLE*/ /*-------------------- end, example -----------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_dummy/Makefile.in0000664361611702660230000001274412473612613017310 0ustar wheelerteddytop_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ SHELL = /bin/sh prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ CC = @CC@ CFLAGS = @CFLAGS@ @PTHREAD_CFLAGS@ @PIC_FLAGS@ SIMDFLAGS = @SIMD_CFLAGS@ CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ DEFS = @DEFS@ LIBS = -lhmmer -leasel @LIBS@ -lm AR = @AR@ RANLIB = @RANLIB@ INSTALL = @INSTALL@ ESLDIR = @HMMER_ESLDIR@ MYLIBDIRS = -L../../${ESLDIR} -L.. MYINCDIRS = -I../../${ESLDIR} \ -I${top_srcdir}/easel \ -I. \ -I.. \ -I${srcdir} \ -I${top_srcdir}/src \ -I${srcdir}/.. OBJS = decoding.o\ fwdback.o\ io.o\ msvfilter.o\ null2.o\ optacc.o\ stotrace.o\ vitfilter.o\ p7_omx.o\ p7_oprofile.o\ mpi.o HDRS = impl_dummy.h UTESTS = @MPI_UTESTS@\ decoding_utest\ fwdback_utest\ io_utest\ msvfilter_utest\ null2_utest\ optacc_utest\ stotrace_utest\ vitfilter_utest BENCHMARKS = @MPI_BENCHMARKS@\ decoding_benchmark\ fwdback_benchmark\ msvfilter_benchmark\ null2_benchmark\ optacc_benchmark\ stotrace_benchmark\ vitfilter_benchmark EXAMPLES =\ fwdback_example\ io_example\ msvfilter_example\ optacc_example\ p7_oprofile_example\ stotrace_example\ vitfilter_example # beautification magic stolen from git QUIET_SUBDIR0 = +${MAKE} -C #space separator after -c QUIET_SUBDIR1 = ifndef V QUIET_CC = @echo ' ' CC $@; QUIET_GEN = @echo ' ' GEN $@; QUIET_AR = @echo ' ' AR $@; QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR1 = ; echo ' ' SUBDIR $$subdir; \ ${MAKE} -C $$subdir endif .PHONY: all dev check tests install uninstall distclean clean all: libhmmer-impl.stamp dev: ${UTESTS} ${BENCHMARKS} ${EXAMPLES} check: ${UTESTS} tests: ${UTESTS} libhmmer-impl.stamp: ${OBJS} ${QUIET_AR}${AR} -r ../libhmmer.a $? > /dev/null 2>&1 @${RANLIB} ../libhmmer.a @echo "impl_lib objects compiled:\c" > $@ @date >> $@ .FORCE: ${OBJS}: ${HDRS} ../hmmer.h .c.o: ${QUIET_CC}${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${DEFS} ${PTHREAD_CFLAGS} ${MYINCDIRS} -c $< ${UTESTS}: libhmmer-impl.stamp ../libhmmer.a ${HDRS} ../hmmer.h @BASENAME=`echo $@ | sed -e 's/_utest//'| sed -e 's/^p7_//'` ;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=p7$${DFLAG}_TESTDRIVE ;\ if test -e ${srcdir}/p7_$${BASENAME}.c; then \ DFILE=${srcdir}/p7_$${BASENAME}.c ;\ else \ DFILE=${srcdir}/$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS} ${BENCHMARKS}: libhmmer-impl.stamp ../libhmmer.a ${HDRS} ../hmmer.h @BASENAME=`echo $@ | sed -e 's/_benchmark//' | sed -e 's/^p7_//'`;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=p7$${DFLAG}_BENCHMARK ;\ if test -e ${srcdir}/p7_$${BASENAME}.c; then \ DFILE=${srcdir}/p7_$${BASENAME}.c ;\ else \ DFILE=${srcdir}/$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS} ${EXAMPLES}: libhmmer-impl.stamp ../libhmmer.a ${HDRS} ../hmmer.h @BASENAME=`echo $@ | sed -e 's/_example//'| sed -e 's/^p7_//'` ;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=p7$${DFLAG}_EXAMPLE ;\ if test -e ${srcdir}/p7_$${BASENAME}.c; then \ DFILE=${srcdir}/p7_$${BASENAME}.c ;\ else \ DFILE=${srcdir}/$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${CPPFLAGS} ${LDFLAGS} ${DEFS} ${MYLIBDIRS} ${MYINCDIRS} -D$${DFLAG} -o $@ $${DFILE} ${LIBS} install: for file in ${HDRS}; do \ ${INSTALL} -m 0644 ${srcdir}/$$file ${DESTDIR}${includedir}/ ;\ done uninstall: for file in ${HDRS}; do \ rm -f ${DESTDIR}${includedir}/$$file ;\ done distclean: clean -rm -f Makefile clean: -rm -f libhmmer-impl.stamp -rm -f ${UTESTS} -rm -f ${BENCHMARKS} -rm -f ${EXAMPLES} -rm -f *.o *~ Makefile.bak core TAGS gmon.out cscope.out -rm -f *.gcno for prog in ${UTESTS} ${BENCHMARKS} ${EXAMPLES}; do\ if test -d $$prog.dSYM; then rm -rf $$prog.dSYM; fi;\ done ################################################################ # HMMER - Biological sequence analysis with profile HMMs # Version 3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # HMMER is distributed under the terms of the GNU General Public License # (GPLv3). See the LICENSE file for details. # # SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/impl_dummy/Makefile.in $ # SVN $Id: Makefile.in 4321 2012-11-27 16:15:47Z wheelert $ ################################################################ hmmer-3.1b2/src/impl_dummy/fwdback.c0000664361611702660230000005724312473612613017013 0ustar wheelerteddy/* Non-optmized implementation of Forward and Backward algorithms. * * Contents: * 1. Forward/Backward wrapper API * 2. Forward and Backward engine implementations * 4. Benchmark driver. * 5. Unit tests. * 6. Test driver. * 7. Example. * 8. Copyright and license information. * * MSF Tue Nov 3, 2009 [Janelia] * SVN $Id: fwdback.c 3665 2011-08-25 13:45:55Z eddys $ */ #include "p7_config.h" #include #include #include "easel.h" #include "hmmer.h" #include "impl_dummy.h" /***************************************************************** * 1. Forward/Backward API. *****************************************************************/ /* Function: p7_Forward() * Synopsis: The Forward algorithm, full matrix fill version. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Calculates the Forward algorithm for sequence of * length residues, using optimized profile , and a * preallocated DP matrix . Upon successful return, * contains the filled Forward matrix, and <*opt_sc> * optionally contains the raw Forward score in nats. * * This calculation requires $O(ML)$ memory and time. * The caller must provide a suitably allocated full * by calling or * . * * The model must be configured in local alignment * mode. The sparse rescaling method used to keep * probability values within single-precision floating * point dynamic range cannot be safely applied to models in * glocal or global mode. * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - RETURN: Forward DP matrix * opt_sc - RETURN: Forward score (in nats) * * Returns: on success. */ int p7_Forward(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *opt_sc) { return p7_GForward(dsq, L, om, ox, opt_sc); } /* Function: p7_ForwardParser() * Synopsis: The Forward algorithm, linear memory parsing version. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Same as by calling or * . * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - RETURN: Forward DP matrix * ret_sc - RETURN: Forward score (in nats) * * Returns: on success. */ int p7_ForwardParser(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *opt_sc) { return p7_GForward(dsq, L, om, ox, opt_sc); } /* Function: p7_Backward() * Synopsis: The Backward algorithm; full matrix fill version. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Calculates the Backward algorithm for sequence of * length residues, using optimized profile , and a * preallocated DP matrix . A filled Forward matrix * must also be provided in , because we need to use * the same sparse scaling factors that Forward used. The * matrix is filled in, and the Backward score (in * nats) is optionally returned in . * * This calculation requires $O(ML)$ memory and time. The * caller must provide a suitably allocated full by * calling or * . * * Because only the sparse scaling factors are needed from * the matrix, the caller may have this matrix * calculated either in full or parsing mode. * * The model must be configured in local alignment * mode. The sparse rescaling method used to keep * probability values within single-precision floating * point dynamic range cannot be safely applied to models in * glocal or global mode. * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * fwd - filled Forward DP matrix, for scale factors * do_full - TRUE=full matrix; FALSE=linear memory parse mode * bck - RETURN: filled Backward matrix * opt_sc - optRETURN: Backward score (in nats) * * Returns: on success. */ int p7_Backward(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc) { return p7_GBackward(dsq, L, om, bck, opt_sc); } /* Function: p7_BackwardParser() * Synopsis: The Backward algorithm, linear memory parsing version. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Same as except that the full matrix isn't * kept. Instead, a linear $O(M+L)$ memory algorithm is * used, keeping only the DP matrix values for the special * (BENCJ) states. These are sufficient to do posterior * decoding to identify high-probability regions where * domains are. * * The caller must provide a suitably allocated "parsing" * by calling or * . * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * fwd - filled Forward DP matrix, for scale factors * bck - RETURN: filled Backward matrix * opt_sc - optRETURN: Backward score (in nats) * * Returns: on success. */ int p7_BackwardParser(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *fwd, P7_OMX *bck, float *opt_sc) { return p7_GBackward(dsq, L, om, bck, opt_sc); } /***************************************************************** * 4. Benchmark driver. *****************************************************************/ #ifdef p7FWDBACK_BENCHMARK /* -c, -x options are for debugging and testing: see fwdfilter.c for explanation */ /* icc -O3 -static -o fwdback_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7FWDBACK_BENCHMARK fwdback.c -lhmmer -leasel -lm ./fwdback_benchmark runs benchmark on both Forward and Backward parser ./fwdback_benchmark -c -N100 compare scores of SSE to generic impl ./fwdback_benchmark -x -N100 test that scores match trusted implementation. */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { "-F", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-B", "only benchmark Forward", 0 }, { "-B", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-F", "only benchmark Backward", 0 }, { "-P", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "benchmark parsing version, not full version", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for non-optimized Forward, Backward implementations"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx = NULL; P7_OMX *fwd = NULL; P7_OMX *bck = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float fsc, bsc; float fsc2, bsc2; double base_time, bench_time, Mcs; p7_FLogsumInit(); if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); if (esl_opt_GetBoolean(go, "-x") && p7_FLogsumError(-0.4, -0.5) > 0.0001) p7_Fail("-x here requires p7_Logsum() recompiled in slow exact mode"); if (esl_opt_GetBoolean(go, "-P")) { fwd = p7_omx_Create(gm->M, 0, L); bck = p7_omx_Create(gm->M, 0, L); } else { fwd = p7_omx_Create(gm->M, L, L); bck = p7_omx_Create(gm->M, L, L); } gx = p7_gmx_Create(gm->M, L); /* Get a baseline time: how long it takes just to generate the sequences */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); if (esl_opt_GetBoolean(go, "-P")) { if (! esl_opt_GetBoolean(go, "-B")) p7_ForwardParser (dsq, L, om, fwd, &fsc); if (! esl_opt_GetBoolean(go, "-F")) p7_BackwardParser(dsq, L, om, fwd, bck, &bsc); } else { if (! esl_opt_GetBoolean(go, "-B")) p7_Forward (dsq, L, om, fwd, &fsc); if (! esl_opt_GetBoolean(go, "-F")) p7_Backward(dsq, L, om, fwd, bck, &bsc); } if (esl_opt_GetBoolean(go, "-c") || esl_opt_GetBoolean(go, "-x")) { p7_GForward (dsq, L, gm, gx, &fsc2); p7_GBackward(dsq, L, gm, gx, &bsc2); printf("%.4f %.4f %.4f %.4f\n", fsc, bsc, fsc2, bsc2); } } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(bck); p7_omx_Destroy(fwd); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7FWDBACK_BENCHMARK*/ /*------------------- end, benchmark driver ---------------------*/ /***************************************************************** * 5. Unit tests. *****************************************************************/ #ifdef p7FWDBACK_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" /* * compare to GForward() scores. */ static void utest_fwdback(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { char *msg = "forward/backward unit test failed"; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *fwd = p7_omx_Create(M, 0, L); P7_OMX *bck = p7_omx_Create(M, 0, L); P7_OMX *oxf = p7_omx_Create(M, L, L); P7_OMX *oxb = p7_omx_Create(M, L, L); P7_GMX *gx = p7_gmx_Create(M, L); float tolerance; float fsc1, fsc2; float bsc1, bsc2; float generic_sc; p7_FLogsumInit(); if (p7_FLogsumError(-0.4, -0.5) > 0.0001) tolerance = 1.0; /* weaker test against GForward() */ else tolerance = 0.001; /* stronger test: FLogsum() is in slow exact mode. */ p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om); while (N--) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_Forward (dsq, L, om, oxf, &fsc1); p7_Backward (dsq, L, om, oxf, oxb, &bsc1); p7_ForwardParser (dsq, L, om, fwd, &fsc2); p7_BackwardParser(dsq, L, om, fwd, bck, &bsc2); p7_GForward (dsq, L, gm, gx, &generic_sc); /* Forward and Backward scores should agree with high tolerance */ if (fabs(fsc1-bsc1) > 0.001) esl_fatal(msg); if (fabs(fsc2-bsc2) > 0.001) esl_fatal(msg); if (fabs(fsc1-fsc2) > 0.001) esl_fatal(msg); /* GForward scores should approximate Forward scores, * with tolerance that depends on how logsum.c was compiled */ if (fabs(fsc1-generic_sc) > tolerance) esl_fatal(msg); } free(dsq); p7_hmm_Destroy(hmm); p7_omx_Destroy(oxb); p7_omx_Destroy(oxf); p7_omx_Destroy(bck); p7_omx_Destroy(fwd); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); } #endif /*p7FWDBACK_TESTDRIVE*/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 6. Test driver *****************************************************************/ #ifdef p7FWDBACK_TESTDRIVE /* gcc -g -Wall -std=gnu99 -o fwdback_utest -I.. -L.. -I../../easel -L../../easel -Dp7FWDBACK_TESTDRIVE fwdback.c -lhmmer -leasel -lm ./fwdback_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "145", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for non-optimized Forward, Backward implementations"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* First round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_fwdback(r, abc, bg, M, L, N); /* normal sized models */ utest_fwdback(r, abc, bg, 1, L, 10); /* size 1 models */ utest_fwdback(r, abc, bg, M, 1, 10); /* size 1 sequences */ esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); /* Second round of tests for amino alphabets. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_fwdback(r, abc, bg, M, L, N); utest_fwdback(r, abc, bg, 1, L, 10); utest_fwdback(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*p7FWDBACK_TESTDRIVE*/ /*--------------------- end, test driver ------------------------*/ /***************************************************************** * 7. Example *****************************************************************/ #ifdef p7FWDBACK_EXAMPLE /* Useful for debugging on small HMMs and sequences. * * Compares to GForward(). * gcc -g -Wall -std=gnu99 -o fwdback_example -I.. -L.. -I../../easel -L../../easel -Dp7FWDBACK_EXAMPLE fwdback.c -lhmmer -leasel -lm ./fwdback_example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_exponential.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in one line awkable format", 0 }, { "-P", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in profmark format", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of Forward/Backward (non-optmized versions)"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx = NULL; P7_OMX *fwd = NULL; P7_OMX *bck = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float fraw, braw, nullsc, fsc; float gfraw, gbraw, gfsc; double P, gP; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Open sequence file for reading */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_UNILOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); /* p7_oprofile_Dump(stdout, om); */ /* allocate DP matrices for O(M+L) parsers */ fwd = p7_omx_Create(gm->M, 0, sq->n); bck = p7_omx_Create(gm->M, 0, sq->n); gx = p7_gmx_Create(gm->M, sq->n); /* allocate DP matrices for O(ML) fills */ /* fwd = p7_omx_Create(gm->M, sq->n, sq->n); */ /* bck = p7_omx_Create(gm->M, sq->n, sq->n); */ /* p7_omx_SetDumpMode(stdout, fwd, TRUE); */ /* makes the fast DP algorithms dump their matrices */ /* p7_omx_SetDumpMode(stdout, bck, TRUE); */ while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { p7_oprofile_ReconfigLength(om, sq->n); p7_ReconfigLength(gm, sq->n); p7_bg_SetLength(bg, sq->n); p7_omx_GrowTo(fwd, om->M, 0, sq->n); p7_omx_GrowTo(bck, om->M, 0, sq->n); p7_gmx_GrowTo(gx, gm->M, sq->n); p7_bg_NullOne (bg, sq->dsq, sq->n, &nullsc); p7_ForwardParser (sq->dsq, sq->n, om, fwd, &fraw); p7_BackwardParser(sq->dsq, sq->n, om, fwd, bck, &braw); /* p7_Forward (sq->dsq, sq->n, om, fwd, &fsc); printf("forward: %.2f nats\n", fsc); */ /* p7_Backward(sq->dsq, sq->n, om, fwd, bck, &bsc); printf("backward: %.2f nats\n", bsc); */ /* Comparison to other F/B implementations */ p7_GForward (sq->dsq, sq->n, gm, gx, &gfraw); p7_GBackward (sq->dsq, sq->n, gm, gx, &gbraw); /* p7_gmx_Dump(stdout, gx, p7_DEFAULT); */ fsc = (fraw-nullsc) / eslCONST_LOG2; gfsc = (gfraw-nullsc) / eslCONST_LOG2; P = esl_exp_surv(fsc, om->evparam[p7_FTAU], om->evparam[p7_FLAMBDA]); gP = esl_exp_surv(gfsc, gm->evparam[p7_FTAU], gm->evparam[p7_FLAMBDA]); if (esl_opt_GetBoolean(go, "-1")) { printf("%-30s\t%-20s\t%9.2g\t%6.1f\t%9.2g\t%6.1f\n", sq->name, hmm->name, P, fsc, gP, gfsc); } else if (esl_opt_GetBoolean(go, "-P")) { /* output suitable for direct use in profmark benchmark postprocessors: */ printf("%g\t%.2f\t%s\t%s\n", P, fsc, sq->name, hmm->name); } else { printf("target sequence: %s\n", sq->name); printf("fwd filter raw score: %.2f nats\n", fraw); printf("bck filter raw score: %.2f nats\n", braw); printf("null score: %.2f nats\n", nullsc); printf("per-seq score: %.2f bits\n", fsc); printf("P-value: %g\n", P); printf("GForward raw score: %.2f nats\n", gfraw); printf("GBackward raw score: %.2f nats\n", gbraw); printf("GForward seq score: %.2f bits\n", gfsc); printf("GForward P-value: %g\n", gP); } esl_sq_Reuse(sq); } /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_omx_Destroy(bck); p7_omx_Destroy(fwd); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7FWDBACK_EXAMPLE*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_dummy/null2.c0000664361611702660230000003011612473612613016434 0ustar wheelerteddy/* Non-optimized "null2" model, biased composition correction * * Contents: * 1. Null2 estimation algorithms. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * MSF Tue Nov 3, 2009 [Janelia] * SVN $Id: null2.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include #include #include "easel.h" #include "hmmer.h" #include "impl_dummy.h" /***************************************************************** * 1. Null2 estimation algorithms. *****************************************************************/ /* Function: p7_Null2_ByExpectation() * Synopsis: Calculate null2 model from posterior probabilities. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Identical to . See * documentation. * * Args: om - profile, in any mode, target length model set to * pp - posterior prob matrix, for against domain envelope (offset) * null2 - RETURN: null2 log odds scores per residue; <0..Kp-1>; caller allocated space */ int p7_Null2_ByExpectation(const P7_OPROFILE *om, P7_OMX *pp, float *null2) { return p7_GNull2_ByExpectation(om, pp, null2); } /* Function: p7_Null2_ByTrace() * Synopsis: Assign null2 scores to an envelope by the sampling method. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Identical to . See * documentation. */ int p7_Null2_ByTrace(const P7_OPROFILE *om, const P7_TRACE *tr, int zstart, int zend, P7_OMX *wrk, float *null2) { return p7_GNull2_ByTrace(om, tr, zstart, zend, wrk, null2); } /***************************************************************** * 2. Benchmark driver *****************************************************************/ #ifdef p7NULL2_BENCHMARK /* icc -O3 -static -o null2_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7NULL2_BENCHMARK null2.c -lhmmer -leasel -lm ./null2_benchmark Does the expectation version. ./null2_benchmark -t Does the stochastic-traceback-dependent version. (This version isn't really dependent on M, so Mc/s may not be an appropriate measure.) */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-t", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "benchmark the trace-dependent version of null2", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for null2 estimation, non-optimized version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox1 = NULL; P7_OMX *ox2 = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); float null2[p7_MAXCODE]; int i,j,d,pos; int nsamples = 200; float fsc, bsc; double Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); ox1 = p7_omx_Create(gm->M, L, L); ox2 = p7_omx_Create(gm->M, L, L); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_Forward (dsq, L, om, ox1, &fsc); if (esl_opt_GetBoolean(go, "-t")) { P7_TRACE *tr = p7_trace_Create(); float *n2sc = malloc(sizeof(float) * (L+1)); esl_stopwatch_Start(w); for (i = 0; i < N; i++) { /* This is approximately what p7_domaindef.c::region_trace_ensemble() is doing: */ for (j = 0; j < nsamples; j++) { p7_StochasticTrace(r, dsq, L, om, ox1, tr); p7_trace_Index(tr); pos = 1; for (d = 0; d < tr->ndom; d++) { p7_Null2_ByTrace(om, tr, tr->tfrom[d], tr->tto[d], ox2, null2); for (; pos <= tr->sqfrom[d]; pos++) n2sc[pos] += 1.0; for (; pos < tr->sqto[d]; pos++) n2sc[pos] += null2[dsq[pos]]; } for (; pos <= L; pos++) n2sc[pos] += 1.0; p7_trace_Reuse(tr); } for (pos = 1; pos <= L; pos++) n2sc[pos] = logf(n2sc[pos] / nsamples); } esl_stopwatch_Stop(w); free(n2sc); p7_trace_Destroy(tr); } else { p7_Backward(dsq, L, om, ox1, ox2, &bsc); p7_Decoding(om, ox1, ox2, ox2); esl_stopwatch_Start(w); for (i = 0; i < N; i++) p7_Null2_ByExpectation(om, ox2, null2); esl_stopwatch_Stop(w); } Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) w->user; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(ox1); p7_omx_Destroy(ox2); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7NULL2_BENCHMARK*/ /*------------------ end, benchmark driver ----------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7NULL2_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" #include "esl_vectorops.h" /* compare results to GDecoding(). */ static void utest_null2_expectation(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N, float tolerance) { char *msg = "decoding unit test failed"; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *fwd = p7_omx_Create(M, L, L); P7_OMX *bck = p7_omx_Create(M, L, L); P7_OMX *pp = p7_omx_Create(M, L, L); P7_GMX *gxf = p7_gmx_Create(M, L); P7_GMX *gxb = p7_gmx_Create(M, L); P7_GMX *gpp = p7_gmx_Create(M, L); float *on2 = malloc(sizeof(float) * abc->Kp); float *gn2 = malloc(sizeof(float) * abc->Kp); float fsc1, fsc2; float bsc1, bsc2; if (!gn2 || !on2) esl_fatal(msg); if (p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om) != eslOK) esl_fatal(msg); while (N--) { if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal(msg); if (p7_Forward (dsq, L, om, fwd, &fsc1) != eslOK) esl_fatal(msg); if (p7_Backward (dsq, L, om, fwd, bck, &bsc1) != eslOK) esl_fatal(msg); if (p7_Decoding(om, fwd, bck, pp) != eslOK) esl_fatal(msg); if (p7_Null2_ByExpectation(om, pp, on2) != eslOK) esl_fatal(msg); if (p7_GForward (dsq, L, gm, gxf, &fsc2) != eslOK) esl_fatal(msg); if (p7_GBackward(dsq, L, gm, gxb, &bsc2) != eslOK) esl_fatal(msg); if (p7_GDecoding(gm, gxf, gxb, gpp) != eslOK) esl_fatal(msg); if (p7_GNull2_ByExpectation(gm, gpp, gn2) != eslOK) esl_fatal(msg); if (esl_vec_FCompare(gn2, on2, abc->Kp, tolerance) != eslOK) esl_fatal(msg); } p7_gmx_Destroy(gpp); p7_gmx_Destroy(gxf); p7_gmx_Destroy(gxb); p7_omx_Destroy(pp); p7_omx_Destroy(fwd); p7_omx_Destroy(bck); free(on2); free(gn2); free(dsq); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); } #endif /*p7NULL2_TESTDRIVE*/ /*--------------------- end, unit tests -------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7NULL2_TESTDRIVE /* gcc -g -Wall -std=gnu99 -o null2_utest -I.. -L.. -I../../easel -L../../easel -Dp7NULL2_TESTDRIVE null2.c -lhmmer -leasel -lm ./null2_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-t", eslARG_REAL, "0.01", NULL, NULL, NULL, NULL, NULL, "floating point comparison tolerance", 0 }, { "-L", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "72", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "10", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for non-optimized implementation of null2 model"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_BG *bg = p7_bg_Create(abc); int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); float tol = esl_opt_GetReal (go, "-t"); p7_FLogsumInit(); utest_null2_expectation(r, abc, bg, M, L, N, tol); esl_getopts_Destroy(go); esl_randomness_Destroy(r); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); return eslOK; } #endif /*p7NULL2_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7NULL2_EXAMPLE #endif /*p7NULL2_EXAMPLE*/ /*------------------------ example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_dummy/stotrace.c0000664361611702660230000004015612473612613017231 0ustar wheelerteddy/* Non-optimized implementation of stochastic backtrace of a Forward matrix. * (Compare generic version, p7_GStochasticTrace().) * * Contents: * 1. Stochastic trace implementation. * 2. Selection of steps in the traceback. * 3. Benchmark driver. * 4. Unit tests. * 5. Test driver. * 6. Example. * 7. Copyright and license information. * * MSF Tue Nov 3, 2009 [Janelia] * SVN $Id: stotrace.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_random.h" #include "hmmer.h" #include "impl_dummy.h" /***************************************************************** * 1. Stochastic trace implementation. *****************************************************************/ /* Function: p7_StochasticTrace() * Synopsis: Sample a traceback from a Forward matrix * Incept: MSF, Tue Nov 3, 2009 [Janelia] * * Purpose: Perform a stochastic traceback from Forward matrix , * using random number generator , in order to sample an * alignment of model to digital sequence of * length . * * The sampled traceback is returned in , which the * caller provides with at least an initial allocation; * the allocation will be grown as needed here. * * Args: r - source of random numbers * dsq - digital sequence being aligned, 1..L * L - length of dsq * om - profile * ox - Forward matrix to trace, LxM * tr - storage for the recovered traceback * * Returns: on success * * Throws: on allocation error. * on several types of problems, including: * the trace isn't empty (wasn't Reuse()'d); */ int p7_StochasticTrace(ESL_RANDOMNESS *rng, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, const P7_OMX *ox, P7_TRACE *tr) { return p7_GStochasticTrace(rng, dsq, L, (P7_PROFILE *)om, (P7_GMX *)ox, tr); } /*------------------ end, stochastic traceback ------------------*/ /***************************************************************** * 3. Benchmark *****************************************************************/ #ifdef p7STOTRACE_BENCHMARK /* gcc -g -O2 -o stotrace_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7STOTRACE_BENCHMARK stotrace.c -lhmmer -leasel -lm icc -O3 -static -o stotrace_benchmark -I.. -L.. -I../../easel -L../../easel -Dp7STOTRACE_BENCHMARK stotrace.c -lhmmer -leasel -lm ./stotrace_benchmark */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seq" , 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of sampled tracebacks", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for stochastic traceback, non-optimized version"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx = NULL; P7_OMX *fwd = NULL; P7_TRACE *tr = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc, fsc, vsc; float bestsc = -eslINFINITY; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_UNILOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); fwd = p7_omx_Create(gm->M, L, L); gx = p7_gmx_Create(gm->M, L); tr = p7_trace_Create(); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_GViterbi(dsq, L, gm, gx, &vsc); p7_Forward (dsq, L, om, fwd, &fsc); esl_stopwatch_Start(w); for (i = 0; i < N; i++) { p7_StochasticTrace(r, dsq, L, om, fwd, tr); p7_trace_Score(tr, dsq, gm, &sc); bestsc = ESL_MAX(bestsc, sc); p7_trace_Reuse(tr); } esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("forward sc = %.4f nats\n", fsc); printf("viterbi sc = %.4f nats\n", vsc); printf("max trace sc = %.4f nats\n", bestsc); free(dsq); p7_trace_Destroy(tr); p7_gmx_Destroy(gx); p7_omx_Destroy(fwd); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7STOTRACE_BENCHMARK*/ /*----------------- end, benchmark ------------------------------*/ /***************************************************************** * 4. Unit tests *****************************************************************/ #ifdef p7STOTRACE_TESTDRIVE #include "esl_getopts.h" /* tests: * 1. each sampled trace must validate. * 2. each trace must be <= viterbi trace score * 3. in a large # of traces, one is "equal" to the viterbi trace score. * (this of course is stochastic; but it's true for the particular * choice of RNG seed used in tests here.) */ static void utest_stotrace(ESL_GETOPTS *go, ESL_RANDOMNESS *rng, ESL_ALPHABET *abc, P7_PROFILE *gm, P7_OPROFILE *om, ESL_DSQ *dsq, int L, int ntrace) { P7_GMX *gx = NULL; P7_OMX *ox = NULL; P7_TRACE *tr = NULL; char errbuf[eslERRBUFSIZE]; int idx; float maxsc = -eslINFINITY; float vsc, sc; if ((gx = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("generic DP matrix creation failed"); if ((ox = p7_omx_Create(gm->M, L, L)) == NULL) esl_fatal("optimized DP matrix create failed"); if ((tr = p7_trace_Create()) == NULL) esl_fatal("trace creation failed"); if (p7_GViterbi(dsq, L, gm, gx, &vsc) != eslOK) esl_fatal("viterbi failed"); if (p7_Forward (dsq, L, om, ox, NULL) != eslOK) esl_fatal("forward failed"); for (idx = 0; idx < ntrace; idx++) { if (p7_StochasticTrace(rng, dsq, L, om, ox, tr) != eslOK) esl_fatal("stochastic trace failed"); if (p7_trace_Validate(tr, abc, dsq, errbuf) != eslOK) esl_fatal("trace invalid:\n%s", errbuf); if (p7_trace_Score(tr, dsq, gm, &sc) != eslOK) esl_fatal("trace scoring failed"); maxsc = ESL_MAX(sc, maxsc); if (sc > vsc) esl_fatal("sampled trace has score > optimal Viterbi path; not possible"); p7_trace_Reuse(tr); } if (esl_FCompare(maxsc, vsc, 0.1) != eslOK) esl_fatal("stochastic trace failed to sample the Viterbi path"); p7_trace_Destroy(tr); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); } #endif /*p7STOTRACE_TESTDRIVE*/ /*----------------- end, unit tests -----------------------------*/ /***************************************************************** * 5. Test driver *****************************************************************/ #ifdef p7STOTRACE_TESTDRIVE /* gcc -g -Wall -o stotrace_utest -Dp7STOTRACE_TESTDRIVE -I.. -L.. -I../../easel -L../../easel stotrace.c -lhmmer -leasel -lm */ #include "p7_config.h" #include "easel.h" #include "esl_getopts.h" #include "esl_randomseq.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "--vv", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be very verbose", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "unit test driver for stochastic Viterbi traceback (non-optimized version)"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_BG *bg = NULL; ESL_DSQ *dsq = NULL; ESL_SQ *sq = NULL; int M = 6; int L = 10; int ntrace = 1000; if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if (p7_hmm_Sample(r, M, abc, &hmm) != eslOK) esl_fatal("failed to sample an HMM"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if ((gm = p7_profile_Create(hmm->M, abc)) == NULL) esl_fatal("failed to create profile"); if (p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL) != eslOK) esl_fatal("failed to config profile"); if ((om = p7_oprofile_Create(gm->M, abc)) == NULL) esl_fatal("failed to create optimized profile"); if (p7_oprofile_Convert(gm, om) != eslOK) esl_fatal("failed to convert profile"); /* Test with randomly generated (iid) sequence */ if ((dsq = malloc(sizeof(ESL_DSQ) *(L+2))) == NULL) esl_fatal("malloc failed"); if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal("seq generation failed"); utest_stotrace(go, r, abc, gm, om, dsq, L, ntrace); /* Test with seq sampled from profile */ if ((sq = esl_sq_CreateDigital(abc)) == NULL) esl_fatal("sequence allocation failed"); if (p7_ProfileEmit(r, hmm, gm, bg, sq, NULL) != eslOK) esl_fatal("profile emission failed"); utest_stotrace(go, r, abc, gm, om, sq->dsq, sq->n, ntrace); esl_sq_Destroy(sq); free(dsq); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7STOTRACE_TESTDRIVE*/ /*---------------- end, test driver -----------------------------*/ /***************************************************************** * 6. Example. *****************************************************************/ #ifdef p7STOTRACE_EXAMPLE /* gcc -g -Wall -std=gnu99 -o stotrace_example -I.. -L.. -I../../easel -L../../easel -Dp7STOTRACE_EXAMPLE stotrace.c -lhmmer -leasel -lm ./example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-t", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump the sampled trace to stdout", 0 }, { "-N", eslARG_INT, "1", NULL, NULL, NULL, NULL, NULL, "number of traces to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of stochastic backtrace (non-optimized version)"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; ESL_RANDOMNESS *rng = esl_randomness_CreateFast(0); P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_GMX *gx = NULL; P7_OMX *fwd = NULL; P7_TRACE *tr = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; int N = esl_opt_GetInteger(go, "-N"); int i; float vsc, fsc, tsc; char errbuf[eslERRBUFSIZE]; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); fwd = p7_omx_Create(gm->M, sq->n, sq->n); gx = p7_gmx_Create(gm->M, sq->n); tr = p7_trace_Create(); p7_GViterbi(sq->dsq, sq->n, gm, gx, &vsc); p7_Forward (sq->dsq, sq->n, om, fwd, &fsc); for (i = 0; i < N; i++) { p7_StochasticTrace(rng, sq->dsq, sq->n, om, fwd, tr); p7_trace_Score(tr, sq->dsq, gm, &tsc); if (esl_opt_GetBoolean(go, "-t") == TRUE) p7_trace_Dump(stdout, tr, gm, sq->dsq); if (p7_trace_Validate(tr, abc, sq->dsq, errbuf) != eslOK) p7_Die("trace %d fails validation:\n%s\n", i, errbuf); printf("Sampled trace: %.4f nats\n", tsc); p7_trace_Reuse(tr); } printf("Forward score: %.4f nats\n", fsc); printf("Viterbi score: %.4f nats\n", vsc); /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_trace_Destroy(tr); p7_omx_Destroy(fwd); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_randomness_Destroy(rng); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7STOTRACE_EXAMPLE*/ /*------------------------ end, example -------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_dummy/vitscore.c0000664361611702660230000003422312473612613017241 0ustar wheelerteddy/* Viterbi score implementation; non-optimized. * * This Viterbi routine is pass through to the generic * Viterbi routine. * * Contents: * 1. Viterbi score implementation. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * MSF, Tue Nov 03, 2009 [Janelia] * SVN $Id: vitscore.c 3665 2011-08-25 13:45:55Z eddys $ */ #include "p7_config.h" #include #include #include "easel.h" #include "hmmer.h" #include "impl_dummy.h" /***************************************************************** * 1. Viterbi score implementation *****************************************************************/ /* Function: p7_ViterbiScore() * Synopsis: Calculates Viterbi score. * Incept: MSF, Tue Nov 03, 2009 [Janelia] * * Purpose: Calculates the Viterbi score for sequence of * length residues, using profile . Return the * Viterbi score (in nats) in . * * The score is calculated using the generic Viterbi * routine. * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * ret_sc - RETURN: Viterbi score (in nats) * * Returns: on success. */ int p7_ViterbiScore(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc) { return p7_GViterbi(dsq, L, om, ox, ret_sc); } /*------------------ end, p7_ViterbiScore() ---------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ #ifdef p7VITSCORE_BENCHMARK /* -c, -x are used for debugging, testing. See msvfilter.c for * an explanation. Here -c and -x are the same: both compare * to p7_GViterbi() scores. */ /* gcc -o benchmark-vitscore -std=gnu99 -g -Wall -I.. -L.. -I../../easel -L../../easel -Dp7VITSCORE_BENCHMARK vitscore.c -lhmmer -leasel -lm icc -o benchmark-vitscore -O3 -static -I.. -L.. -I../../easel -L../../easel -Dp7VITSCORE_BENCHMARK vitscore.c -lhmmer -leasel -lm ./benchmark-vitscore runs benchmark ./benchmark-vitscore -N100 -c compare scores to generic impl ./benchmark-vitscore -N100 -x equate scores to exact emulation */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for non-optimized ViterbiScore()"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc1, sc2; double base_time, bench_time, Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); p7_oprofile_Logify(om); ox = p7_omx_Create(gm->M, 0, 0); gx = p7_gmx_Create(gm->M, L); /* Get a baseline time: how long it takes just to generate the sequences */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; /* Run the benchmark */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_ViterbiScore (dsq, L, om, ox, &sc1); if (esl_opt_GetBoolean(go, "-c") || esl_opt_GetBoolean(go, "-x")) { p7_GViterbi(dsq, L, gm, gx, &sc2); printf("%.4f %.4f\n", sc1, sc2); } } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7VITSCORE_BENCHMARK*/ /*------------------- end, benchmark driver ---------------------*/ /***************************************************************** * 3. Unit tests. *****************************************************************/ #ifdef p7VITSCORE_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" /* ViterbiScore() unit test * * We can compare these scores to GViterbi() almost exactly; the only * differences should be negligible roundoff errors. Must convert * the optimized profile to lspace, though, rather than pspace. */ static void utest_viterbi_score(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *ox = p7_omx_Create(M, 0, 0); P7_GMX *gx = p7_gmx_Create(M, L); float sc1, sc2; p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om); p7_oprofile_Logify(om); while (N--) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_ViterbiScore(dsq, L, om, ox, &sc1); p7_GViterbi (dsq, L, gm, gx, &sc2); if (fabs(sc1-sc2) > 0.001) esl_fatal("viterbi score unit test failed: scores differ"); } free(dsq); p7_hmm_Destroy(hmm); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); } #endif /*p7VITSCORE_TESTDRIVE*/ /*-------------------- end, unit tests --------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7VITSCORE_TESTDRIVE /* gcc -g -Wall -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o vitscore_utest -Dp7VITSCORE_TESTDRIVE vitscore.c -lhmmer -leasel -lm ./vitscore_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "145", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for the non-optimized implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* First round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_viterbi_score(r, abc, bg, M, L, N); utest_viterbi_score(r, abc, bg, 1, L, 10); utest_viterbi_score(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); /* Second round of tests for amino alphabets. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); utest_viterbi_score(r, abc, bg, M, L, N); utest_viterbi_score(r, abc, bg, 1, L, 10); utest_viterbi_score(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*VITSCORE_TESTDRIVE*/ /*--------------------- end, test driver ------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7VITSCORE_EXAMPLE /* A minimal example. Also useful for debugging on small HMMs and sequences. gcc -g -Wall -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o example -Dp7VITSCORE_EXAMPLE vitscore.c -lhmmer -leasel -lm ./example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_dummy.h" int main(int argc, char **argv) { char *hmmfile = argv[1]; char *seqfile = argv[2]; ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float sc; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_Logify(om); /* allocate DP matrices, both a generic and an optimized one */ ox = p7_omx_Create(gm->M, 0, sq->n); gx = p7_gmx_Create(gm->M, sq->n); /* Useful to place and compile in for debugging: p7_oprofile_Dump(stdout, om); dumps the optimized profile p7_omx_SetDumpMode(ox, TRUE); makes the fast DP algorithms dump their matrices p7_gmx_Dump(stdout, gx, p7_DEFAULT); dumps a generic DP matrix */ p7_ViterbiScore(sq->dsq, sq->n, om, ox, &sc); printf("viterbi (non-optimized): %.2f nats\n", sc); p7_GViterbi (sq->dsq, sq->n, gm, gx, &sc); printf("viterbi (generic): %.2f nats\n", sc); /* now in a real app, you'd need to convert raw nat scores to final bit * scores, by subtracting the null model score and rescaling. */ /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); return 0; } #endif /*p7VITSCORE_EXAMPLE*/ /*-------------------------- end, example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_dummy/p7_oprofile.c0000664361611702660230000006530712473612613017637 0ustar wheelerteddy/* Non-optimized routines for the P7_OPROFILE structure: * a search profile in an optimized implementation. * * Contents: * 1. The P7_OPROFILE object: allocation, initialization, destruction. * 2. Conversion from generic P7_PROFILE to optimized P7_OPROFILE * 3. Conversion from optimized P7_OPROFILE to compact score arrays * 4. Debugging and development utilities. * 5. Benchmark driver. * 6. Unit tests. * 7. Test driver. * 8. Example. * 9. Copyright and license information. */ #include "p7_config.h" #include #include #include /* roundf() */ #include "easel.h" #include "esl_random.h" #include "esl_vectorops.h" #include "hmmer.h" #include "impl_dummy.h" /***************************************************************** * 1. The P7_OPROFILE structure: a score profile. *****************************************************************/ /* Function: p7_oprofile_Create() * Synopsis: Allocate an optimized profile structure. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Allocate for profiles of up to nodes for digital alphabet . * * Throws: on allocation error. */ P7_OPROFILE * p7_oprofile_Create(int allocM, const ESL_ALPHABET *abc) { return p7_profile_Create(allocM, abc); } /* Function: p7_oprofile_IsLocal() * Synopsis: Returns TRUE if profile is in local alignment mode. * Incept: MSF Tue Nov 3, 2009 [Janelia] */ int p7_oprofile_IsLocal(const P7_OPROFILE *om) { return p7_profile_IsLocal(om); } /* Function: p7_oprofile_Destroy() * Synopsis: Frees an optimized profile structure. * Incept: MSF Tue Nov 3, 2009 [Janelia] */ void p7_oprofile_Destroy(P7_OPROFILE *om) { p7_profile_Destroy(om); } /* Function: p7_oprofile_Sizeof() * Synopsis: Return the allocated size of a . * Incept: SRE, Wed Mar 2 10:39:54 2011 [Janelia] * * Purpose: Returns the allocated size of a , * in bytes. */ size_t p7_oprofile_Sizeof(P7_OPROFILE *om) { return p7_profile_Sizeof(om); } /* TODO: this is not following the _Copy interface guidelines; it's a _Clone */ /* TODO: its documentation header is a cut/paste of _Create; FIXME */ /* Function: p7_oprofile_Copy() * Synopsis: Allocate an optimized profile structure. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Allocate for profiles of up to nodes for digital alphabet . * * Throws: on allocation error. */ P7_OPROFILE * p7_oprofile_Copy(P7_OPROFILE *om1) { P7_PROFILE *dst = NULL; if ((dst = p7_profile_Create(om1->M, om1->abc)) == NULL) goto ERROR; if ((p7_profile_Copy(om1, dst)) != eslOK) goto ERROR; return dst; ERROR: p7_profile_Destroy(dst); return NULL; } /* Function: p7_oprofile_Clone() * Synopsis: Allocate a cloned copy of the optimized profile structure. All * allocated memory from the original profile is not reallocated. * The cloned copy will point to the same memory as the original. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Quick copy of an optimized profile used in mutiple threads. * * Throws: on allocation error. */ P7_OPROFILE * p7_oprofile_Clone(P7_OPROFILE *om1) { return p7_oprofile_Copy(om1); } /*----------------- end, P7_OPROFILE structure ------------------*/ /* Function: p7_oprofile_Convert() * Synopsis: Converts standard profile to an optimized one. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Convert a standard profile to an optimized profile , * where has already been allocated for a profile of at * least M> nodes and the same emission alphabet abc>. * * Args: gm - profile to optimize * om - allocated optimized profile for holding the result. * * Returns: on success. * * Throws: if , aren't compatible. * on allocation failure. */ int p7_oprofile_Convert(const P7_PROFILE *gm, P7_OPROFILE *om) { return p7_profile_Copy(gm, om); } /* Function: p7_oprofile_ReconfigLength() * Synopsis: Set the target sequence length of a model. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Given an already configured model , quickly reset its * expected length distribution for a new mean target sequence * length of . * * This doesn't affect the length distribution of the null * model. That must also be reset, using . * * We want this routine to run as fast as possible, because * this call is in the critical path: it must be called at * each new target sequence in a database search. * * Returns: on success. Costs/scores for N,C,J transitions are set * here. */ int p7_oprofile_ReconfigLength(P7_OPROFILE *om, int L) { return p7_ReconfigLength(om, L); } /* Function: p7_oprofile_ReconfigMSVLength() * Synopsis: Set the target sequence length of the MSVFilter part of the model. * Incept: SRE, Tue Dec 16 13:39:17 2008 [Janelia] * * Purpose: Given an already configured model , quickly reset its * expected length distribution for a new mean target sequence * length of , only for the part of the model that's used * for the accelerated MSV filter. * * The acceleration pipeline uses this to defer reconfiguring the * length distribution of the main model, mostly because hmmscan * reads the model in two pieces, MSV part first, then the rest. * * Returns: on success. */ int p7_oprofile_ReconfigMSVLength(P7_OPROFILE *om, int L) { return p7_ReconfigLength(om, L); } /* Function: p7_oprofile_ReconfigRestLength() * Synopsis: Set the target sequence length of the main profile. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Given an already configured model , quickly reset its * expected length distribution for a new mean target sequence * length of , for everything except the MSV filter part * of the model. * * Calling then * is equivalent to * just calling . The two * part version is used in the acceleration pipeline. * * Returns: on success. */ int p7_oprofile_ReconfigRestLength(P7_OPROFILE *om, int L) { return p7_ReconfigLength(om, L); } /* Function: p7_oprofile_ReconfigMultihit() * Synopsis: Quickly reconfig model into multihit mode for target length . * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Given a profile that's already been configured once, * quickly reconfigure it into a multihit mode for target * length . * * This gets called in domain definition, when we need to * flip the model in and out of unihit mode to * process individual domains. * * Note: You can't just flip uni/multi mode alone, because that * parameterization also affects target length * modeling. You need to make sure uni vs. multi choice is * made before the length model is set, and you need to * make sure the length model is recalculated if you change * the uni/multi mode. Hence, these functions call * . */ int p7_oprofile_ReconfigMultihit(P7_OPROFILE *om, int L) { return p7_ReconfigMultihit(om, L); } /* Function: p7_oprofile_ReconfigUnihit() * Synopsis: Quickly reconfig model into unihit mode for target length . * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Given a profile that's already been configured once, * quickly reconfigure it into a unihit mode for target * length . * * This gets called in domain definition, when we need to * flip the model in and out of unihit mode to * process individual domains. */ int p7_oprofile_ReconfigUnihit(P7_OPROFILE *om, int L) { return p7_ReconfigUnihit(om, L); } /*------------ end, conversions to P7_OPROFILE ------------------*/ /******************************************************************* * 3. Conversion from optimized P7_OPROFILE to compact score arrays *******************************************************************/ /* Function: p7_oprofile_GetFwdTransitionArray() * Synopsis: Retrieve full 32-bit float transition probabilities from a * profile into a flat array * * Purpose: Extract an array of (e.g. p7O_II) transition probabilities * from the underlying profile. In SIMD implementations, * these are striped and interleaved, making them difficult to * directly access. Here, this is trivial. * * Args: - optimized profile, containing transition information * - transition type (e.g. p7O_II) * - preallocated array into which floats will be placed * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_GetFwdTransitionArray(const P7_OPROFILE *om, int type, float *arr ) { int i; for (i=0; iM; i++) { arr[i] = exp(p7P_TSC(om, i, type)); } return eslOK; } /* Function: p7_oprofile_GetSSVEmissionScoreArray() * Synopsis: Retrieve MSV residue emission scores from a * profile into an array * * Purpose: Extract an implicitly 2D array of 8-bit int MSV residue * emission scores from a profile . must * be allocated by the calling function to be of size * ( om->abc->Kp * ( om->M + 1 )), and indexing into the array * is done as [om->abc->Kp * i + c ] for character c at * position i. * * In the dummy implementation, we need to convert from the * float emission probabilities to 8-bit int scores. Conversion * is based on code from the function mf_conversion in impl_sse's * p7_oprofile.c * * Args: - profile, containing emission information * - preallocated array into which scores will be placed * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_GetSSVEmissionScoreArray(const P7_OPROFILE *om, uint8_t *arr ) { int M = om->M; /* length of the query */ int i, j; float x; float max = 0.0; float scale; uint8_t bias; /* scale and bias required for float->8bit conversion */ scale = 3.0 / eslCONST_LOG2; /* scores in units of third-bits */ for (i = 0; i < om->abc->K; i++) max = ESL_MAX(max, esl_vec_FMax(om->rsc[i], (M+1)*2)); max = -1.0f * roundf(scale * -1.0 * max); //based on unbiased_byteify bias = (max > 255.) ? 255 : (uint8_t) max; for (i = 1; i <= om->M; i++) { for (j=0; jabc->Kp; j++) { //based on p7_oprofile's biased_byteify() x = -1.0f * roundf(scale * om->rsc[j][(i) * p7P_NR + p7P_MSC]); arr[i*om->abc->Kp + j] = (x > 255. - bias) ? 255 : (uint8_t) (x + bias); } } return eslOK; } /* Function: p7_oprofile_GetFwdEmissionArray() * Synopsis: Retrieve Fwd (float) residue emission scores from a * profile into an array * * Purpose: Extract an implicitly 2D array of 32-bit float Fwd residue * emission scores from a profile . must * be allocated by the calling function to be of size * ( om->abc->Kp * ( om->M + 1 )), and indexing into the array * is done as [om->abc->Kp * i + c ] for character c at * position i. * * * Args: - profile * - preallocated array into which scores will be placed * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_GetFwdEmissionScoreArray(const P7_OPROFILE *om, float *arr ) { int i, j; for (i = 1; i <= om->M; i++) { for (j=0; jabc->Kp; j++) { arr[i*om->abc->Kp + j] = om->rsc[j][(i) * p7P_NR + p7P_MSC]; } } return eslOK; } /* Function: p7_oprofile_GetFwdEmissionArray() * Synopsis: Retrieve Fwd (float) residue emission values from an optimized * profile into an array * * Purpose: Extract an implicitly 2D array of 32-bit float Fwd residue * emission values from an optimized profile , converting * back to emission values based on the background. must * be allocated by the calling function to be of size * ( om->abc->Kp * ( om->M + 1 )), and indexing into the array * is done as [om->abc->Kp * i + c ] for character c at * position i. * * Args: - optimized profile, containing transition information * - background frequencies * - preallocated array into which scores will be placed * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_GetFwdEmissionArray(const P7_OPROFILE *om, P7_BG *bg, float *arr ) { int i, j; for (i = 1; i <= om->M; i++) { for (j=0; jabc->Kp; j++) { arr[i*om->abc->Kp + j] = bg->f[j] * exp( om->rsc[j][(i) * p7P_NR + p7P_MSC]); } } return eslOK; } /* Function: p7_oprofile_UpdateFwdEmissionScores() * Synopsis: Update om match emissions to account for new bg, using * preallocated sc_tmp[]. * * Purpose: Change scores based on updated background model * */ int p7_oprofile_UpdateFwdEmissionScores(P7_OPROFILE *om, P7_BG *bg, float *fwd_emissions, float *sc_tmp) { int M = om->M; /* length of the query */ int i, j; int K = om->abc->K; int Kp = om->abc->Kp; for (i = 1; i <= om->M; i++) { for (j=0; jmm && om->mm[i] == 'm') sc_tmp[j] = 0; else sc_tmp[j] = log(fwd_emissions[i*om->abc->Kp + j] / bg->f[j]); } esl_abc_FExpectScVec(bg->abc, sc_tmp, bg->f); for (j=0; jrsc[j][(i) * p7P_NR + p7P_MSC] = sc_tmp[j]; } return eslOK; } /* Function: p7_oprofile_UpdateVitEmissionScores() * Synopsis: Dummy function - no need to update Viterbi-specific scores in dummy * */ int p7_oprofile_UpdateVitEmissionScores(P7_OPROFILE *om, P7_BG *bg, float *fwd_emissions, float *sc_arr) { return eslOK; } /* Function: p7_oprofile_UpdateMSVEmissionScores() * Synopsis: Dummy function - no need to update Viterbi-specific scores in dummy */ int p7_oprofile_UpdateMSVEmissionScores(P7_OPROFILE *om, P7_BG *bg, float *fwd_emissions, float *sc_arr) { return eslOK; } /*------------ end, conversions from P7_OPROFILE ------------------*/ /***************************************************************** * 4. Debugging and development utilities. *****************************************************************/ /* Function: p7_oprofile_Sample() * Synopsis: Sample a random profile. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Sample a random profile of nodes for alphabet , * using as the source of random numbers. Parameterize * it for generation of target sequences of mean length * . Calculate its log-odds scores using background * model . * * Args: r - random number generator * abc - emission alphabet * bg - background frequency model * M - size of sampled profile, in nodes * L - configured target seq mean length * opt_hmm - optRETURN: sampled HMM * opt_gm - optRETURN: sampled normal profile * opt_om - RETURN: optimized profile * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_oprofile_Sample(ESL_RANDOMNESS *r, const ESL_ALPHABET *abc, const P7_BG *bg, int M, int L, P7_HMM **opt_hmm, P7_PROFILE **opt_gm, P7_OPROFILE **ret_om) { P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; int status; if ((gm = p7_profile_Create (M, abc)) == NULL) { status = eslEMEM; goto ERROR; } if ((om = p7_oprofile_Create(M, abc)) == NULL) { status = eslEMEM; goto ERROR; } if ((status = p7_hmm_Sample(r, M, abc, &hmm)) != eslOK) goto ERROR; if ((status = p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL)) != eslOK) goto ERROR; if ((status = p7_oprofile_Convert(gm, om)) != eslOK) goto ERROR; if ((status = p7_oprofile_ReconfigLength(om, L)) != eslOK) goto ERROR; if (opt_hmm != NULL) *opt_hmm = hmm; else p7_hmm_Destroy(hmm); if (opt_gm != NULL) *opt_gm = gm; else p7_profile_Destroy(gm); *ret_om = om; return eslOK; ERROR: if (opt_hmm != NULL) *opt_hmm = NULL; if (opt_gm != NULL) *opt_gm = NULL; *ret_om = NULL; return status; } /* Function: p7_oprofile_Compare() * Synopsis: Compare two optimized profiles for equality. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Compare the contents of and ; return * if they are effectively identical profiles, * or if not. * * Floating point comparisons are done to a tolerance * of using . * * If a comparison fails, an informative error message is * left in to indicate why. * * Internal allocation sizes are not compared, only the * data. * * Args: om1 - one optimized profile to compare * om2 - the other * tol - floating point comparison tolerance; see * errmsg - ptr to array of at least characters. * * Returns: on effective equality; on difference. */ int p7_oprofile_Compare(P7_OPROFILE *om1, P7_OPROFILE *om2, float tol, char *errmsg) { return p7_profile_Compare(om1, om2, tol); } /* Function: p7_profile_SameAsMF() * Synopsis: Set a generic profile's scores to give MSV scores. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Set a generic profile's scores so that the normal DP * algorithms will give the same score as : * all t_MM scores = 0; all other core transitions = -inf; * multihit local mode; all entries uniformly ; * scores 0; total approximated later as -3; * rounded in the same way as the 8-bit limited precision. * * Returns: on success. */ int p7_profile_SameAsMF(const P7_OPROFILE *om, P7_PROFILE *gm) { int k; float tbm = log(2.0f / ((float) gm->M * (float) (gm->M+1))); /* Transitions */ esl_vec_FSet(gm->tsc, p7P_NTRANS * gm->M, -eslINFINITY); for (k = 1; k < gm->M; k++) p7P_TSC(gm, k, p7P_MM) = 0.0f; for (k = 0; k < gm->M; k++) p7P_TSC(gm, k, p7P_BM) = tbm; return eslOK; } /* Function: p7_profile_SameAsVF() * Synopsis: Round a generic profile to match ViterbiFilter scores. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Round all the scores in a generic (lspace) in * exactly the same way that the scores in the * were rounded. Then we can test that two profiles * give identical internal scores in testing, say, * against . * * The 3nat approximation is used; NN=CC=JJ=0, and 3 nats are * subtracted at the end to account for their contribution. * * To convert a generic Viterbi score calculated with this profile * to a nat score that should match ViterbiFilter() exactly, * do <(gsc / om->scale_w) - 3.0>. * * must be the same profile that was constructed from. * * is irrevocably altered by this call. * * Do not call this more than once on any given ! * * Args: - optimized profile, containing scale information. * - generic profile that was built from. * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_profile_SameAsVF(const P7_OPROFILE *om, P7_PROFILE *gm) { return eslOK; } /*------------ end, P7_OPROFILE debugging tools ----------------*/ /***************************************************************** * 5. Benchmark driver. *****************************************************************/ #ifdef p7OPROFILE_BENCHMARK /* Timing profile conversion. gcc -o benchmark-oprofile -std=gnu99 -g -Wall -I.. -L.. -I../../easel -L../../easel -Dp7OPROFILE_BENCHMARK\ p7_oprofile.c -lhmmer -leasel -lm icc -o benchmark-oprofile -O3 -static -I.. -L.. -I../../easel -L../../easel -Dp7OPROFILE_BENCHMARK p7_oprofile.c -lhmmer -leasel -lm ./benchmark-sse runs benchmark */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-L", eslARG_INT, "400", NULL, NULL, NULL, NULL, NULL, "length of target sequence", 0 }, { "-N", eslARG_INT, "100000", NULL, NULL, NULL, NULL, NULL, "number of conversions to time", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for the non-optmized implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); int i; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); esl_stopwatch_Start(w); for (i = 0; i < N; i++) p7_oprofile_Convert(gm, om); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*p7OPROFILE_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 6. Unit tests *****************************************************************/ #ifdef p7OPROFILE_TESTDRIVE #endif /*p7OPROFILE_TESTDRIVE*/ /*------------------- end, unit tests ---------------------------*/ /***************************************************************** * 7. Test driver *****************************************************************/ #ifdef p7OPROFILE_TESTDRIVE #endif /*p7OPROFILE_TESTDRIVE*/ /*------------------- end, test driver --------------------------*/ /***************************************************************** * 8. Example *****************************************************************/ #ifdef p7OPROFILE_EXAMPLE /* gcc -std=gnu99 -g -Wall -Dp7OPROFILE_EXAMPLE -I.. -I../../easel -L.. -L../../easel -o p7_oprofile_example p7_oprofile.c -lhmmer -leasel -lm * ./p7_oprofile_example */ #include "p7_config.h" #include #include "easel.h" #include "hmmer.h" int main(int argc, char **argv) { char *hmmfile = argv[1]; ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om1 = NULL; P7_OPROFILE *om2 = NULL; int status; char errbuf[eslERRBUFSIZE]; status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); status = p7_hmmfile_Read(hfp, &abc, &hmm); if (status == eslEFORMAT) p7_Fail("Bad file format in HMM file %s:\n%s\n", hfp->fname, hfp->errbuf); else if (status == eslEINCOMPAT) p7_Fail("HMM in %s is not in the expected %s alphabet\n", hfp->fname, esl_abc_DecodeType(abc->type)); else if (status == eslEOF) p7_Fail("Empty HMM file %s? No HMM data found.\n", hfp->fname); else if (status != eslOK) p7_Fail("Unexpected error in reading HMMs from %s\n", hfp->fname); bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); om1 = p7_oprofile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 400, p7_LOCAL); p7_oprofile_Convert(gm, om1); om2 = p7_oprofile_Copy(om1); if (p7_oprofile_Compare(om1, om2, 0.001f, errbuf) != eslOK) p7_Fail("Compare failed %s\n", errbuf); p7_oprofile_Destroy(om1); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); return eslOK; } #endif /*p7OPROFILE_EXAMPLE*/ /*----------------------- end, example --------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_dummy/io.c0000664361611702660230000010771212473612613016016 0ustar wheelerteddy/* Saving optimized profiles in two pieces: MSV part and the rest. * * To accelerate hmmscan, which is limited by speed of HMM input, * hmmpress saves an optimized profile in two pieces. One file gets * a bare minimum of information needed to run the MSV filter. * The other file gets the rest of the profile. Both files are binary, * stored exactly as the has the information internally. * * By convention, hmmpress calls the two files .h3f and * .h3p, which nominally stand for "H3 filter" and "H3 * profile". * * Contents: * 1. Writing optimized profiles to two files. * 2. Reading optimized profiles in two stages. * 3. Utility routines. * 4. Benchmark driver. * 5. Unit tests. * 6. Test driver. * 7. Example. * 8. Copyright and license information. * * TODO: * - crossplatform binary compatibility (endedness and off_t) * - Write() could save a tag (model #) instead of name for verifying * that MSV and Rest parts match, saving a malloc for var-lengthed name * in ReadRest(). */ #include "p7_config.h" #include #include #include #include "easel.h" #include "hmmer.h" #include "impl_dummy.h" static uint32_t v3f_fmagic = 0xb3e6e6e4; /* 3/f binary MSV file, dummy: "3ffd" = 0x 33 66 66 64 + 0x80808080 */ static uint32_t v3f_pmagic = 0xb3e6f0e4; /* 3/f binary profile file, dummy: "3fpd" = 0x 33 66 70 64 + 0x80808080 */ static uint32_t v3e_fmagic = 0xb3e5e6e4; /* 3/e binary MSV file, dummy: "3efd" = 0x 33 65 66 64 + 0x80808080 */ static uint32_t v3e_pmagic = 0xb3e5f0e4; /* 3/e binary profile file, dummy: "3epd" = 0x 33 65 70 64 + 0x80808080 */ static uint32_t v3d_fmagic = 0xb3e4e6e4; /* 3/d binary MSV file, dummy: "3dfd" = 0x 33 64 66 64 + 0x80808080 */ static uint32_t v3d_pmagic = 0xb3e4f0e4; /* 3/d binary profile file, dummy: "3dpd" = 0x 33 64 70 64 + 0x80808080 */ static uint32_t v3c_fmagic = 0xb3e3e6e4; /* 3/c binary MSV file, dummy: "3cfd" = 0x 33 63 66 64 + 0x80808080 */ static uint32_t v3c_pmagic = 0xb3e3f0e4; /* 3/c binary profile file, dummy: "3cpd" = 0x 33 63 70 64 + 0x80808080 */ static uint32_t v3b_fmagic = 0xb3e2e6e4; /* 3/b binary MSV file, dummy: "3bfd" = 0x 33 62 66 64 + 0x80808080 */ static uint32_t v3b_pmagic = 0xb3e2f0e4; /* 3/b binary profile file, dummy: "3bpd" = 0x 33 62 70 64 + 0x80808080 */ static uint32_t v3a_fmagic = 0xe8b3e6e4; /* 3/a binary MSV file, dummy: "h3fd" = 0x 68 33 66 64 + 0x80808080 */ static uint32_t v3a_pmagic = 0xe8b3f0e4; /* 3/a binary profile file, dummy: "h3pd" = 0x 68 33 70 64 + 0x80808080 */ /***************************************************************** *# 1. Writing optimized profiles to two files. *****************************************************************/ /* Function: p7_oprofile_Write() * Synopsis: Write an optimized profile in two files. * * Purpose: Write the MSV filter part of to open binary stream * , and the rest of the model to . These two * streams will typically be <.h3f> and <.h3p> files * being created by hmmpress. * * Args: ffp - open binary stream for saving MSV filter part * pfp - open binary stream for saving rest of profile * om - optimized profile to save * * Returns: on success. * * Throws: on any write failure; for example, * if disk is full. */ int p7_oprofile_Write(FILE *ffp, FILE *pfp, P7_OPROFILE *om) { /* is the part of the oprofile that MSVFilter() needs */ if (fwrite((char *) &(v3f_fmagic), sizeof(uint32_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->M), sizeof(int), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->abc->type), sizeof(int), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) om->offs, sizeof(off_t), p7_NOFFSETS, ffp) != p7_NOFFSETS) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(v3f_fmagic), sizeof(uint32_t), 1, ffp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); /* sentinel */ /* gets the rest of the oprofile */ if (fwrite((char *) &(v3f_pmagic), sizeof(uint32_t), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->M), sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(om->abc->type), sizeof(int), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); if (fwrite((char *) &(v3f_pmagic), sizeof(uint32_t), 1, pfp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "oprofile write failed"); /* sentinel */ return eslOK; } /*---------------- end, writing oprofile ------------------------*/ /***************************************************************** * 2. Reading optimized profiles in two stages. *****************************************************************/ /* Function: p7_oprofile_ReadMSV() * Synopsis: Read MSV filter part of an optimized profile. * * Purpose: Read the MSV filter part of a profile from the * <.h3f> file associated with an open HMM file . * Allocate a new model, populate it with this minimal * MSV filter information, and return a pointer to it * in <*ret_om>. * * Our alphabet may get set by the first HMM we read. If * <*byp_abc> is at start, create a new alphabet and * return a pointer to it in <*byp_abc>. If <*byp_abc> is * non-, it is assumed to be a pointer to an existing * alphabet; we verify that the HMM's alphabet matches it * and <*ret_abc> isn't changed. This is the same * convention used by . * * The <.h3f> file was opened automatically, if it existed, * when the HMM file was opened with . * * When no more HMMs remain in the file, return . * * Args: hfp - open HMM file, with associated .h3p file * byp_abc - BYPASS: <*byp_abc == ESL_ALPHABET *> if known; * <*byp_abc == NULL> if desired; * if unwanted. * ret_om - RETURN: newly allocated with MSV filter * data filled in. * * Returns: on success. <*ret_om> is allocated here; * caller free's with . * <*byp_abc> is allocated here if it was requested; * caller free's with . * * Returns if has no <.h3f> file open, * or on any parsing error. * * Returns if the HMM we read is incompatible * with the existing alphabet <*byp_abc> led us to expect. * * On any returned error, errbuf> contains an * informative error message. * * Throws: on allocation error. */ int p7_oprofile_ReadMSV(P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OPROFILE **ret_om) { uint32_t magic; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; int alphatype; off_t offs[p7_NOFFSETS]; off_t roff; int M; int i; int status; if (hfp->errbuf != NULL) hfp->errbuf[0] = '\0'; if (hfp->ffp == NULL) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no MSV profile file; hmmpress probably wasn't run"); if (feof(hfp->ffp)) { status = eslEOF; goto ERROR; } /* normal EOF: no more profiles */ /* keep track of the starting offset of the MSV model */ roff = ftello(hfp->ffp); if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->ffp)) { status = eslEOF; goto ERROR; } if (magic == v3a_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/a); please hmmpress your HMM file again"); if (magic == v3b_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/b); please hmmpress your HMM file again"); if (magic == v3c_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/c); please hmmpress your HMM file again"); if (magic == v3d_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/d); please hmmpress your HMM file again"); if (magic == v3e_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/e); please hmmpress your HMM file again"); if (magic != v3f_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic; not an HMM database?"); if (! fread( (char *) &M, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read model size M"); if (! fread( (char *) &alphatype, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read alpha type"); if (! fread( (char *) offs, sizeof(off_t), p7_NOFFSETS, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read hmmpfam offsets"); if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no sentinel magic: .h3f file corrupted?"); if (magic != v3f_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad sentinel magic; .h3f file corrupted?"); /* Set or verify alphabet. */ if (byp_abc == NULL || *byp_abc == NULL) { /* alphabet unknown: whether wanted or unwanted, make a new one */ if ((abc = esl_alphabet_Create(alphatype)) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failed: alphabet"); } else { /* alphabet already known: verify it against what we see in the HMM */ abc = *byp_abc; if (abc->type != alphatype) ESL_XFAIL(eslEINCOMPAT, hfp->errbuf, "Alphabet type mismatch: was %s, but current profile says %s", esl_abc_DecodeType(abc->type), esl_abc_DecodeType(alphatype)); } if ((status = p7_hmmfile_Position(hfp, offs[p7_MOFFSET])) != eslOK) goto ERROR; if ((status = p7_hmmfile_Read(hfp, &abc, &hmm)) != eslOK) goto ERROR; bg = p7_bg_Create(hmm->abc); gm = p7_profile_Create(hmm->M, hmm->abc); p7_ProfileConfig(hmm, bg, gm, hmm->M, p7_LOCAL); om = p7_oprofile_Create(hmm->M, abc); if ((status = p7_oprofile_Convert(gm, om)) != eslOK) goto ERROR; om->M = M; om->roff = roff; for (i = 0; i < p7_NOFFSETS; ++i) om->offs[i] = offs[i]; /* keep track of the ending offset of the MSV model */ om->eoff = ftello(hfp->ffp) - 1;; if (byp_abc != NULL) *byp_abc = abc; if (gm != NULL) p7_oprofile_Destroy(gm); *ret_om = om; return eslOK; ERROR: if (abc != NULL && (byp_abc == NULL || *byp_abc == NULL)) esl_alphabet_Destroy(abc); /* destroy alphabet if we created it here */ if (gm != NULL) p7_oprofile_Destroy(gm); *ret_om = NULL; return status; } /* Function: p7_oprofile_ReadInfoMSV() * Synopsis: Read MSV filter info, but not the scores. * * Purpose: Read just enough of the MSV filter header from the * <.h3f> file associated with an open HMM file * to skip ahead to the next MSV filter. Allocate a new * model, populate it with just the file offsets of this * model and return a pointer to it in <*ret_om>. * * The <.h3f> file was opened automatically, if it existed, * when the HMM file was opened with . * * When no more HMMs remain in the file, return . * * Args: hfp - open HMM file, with associated .h3p file * byp_abc - BYPASS: <*byp_abc == ESL_ALPHABET *> if known; * <*byp_abc == NULL> if desired; * if unwanted. * ret_om - RETURN: newly allocated with partial MSV * filter data filled in. * * Returns: on success. <*ret_om> is allocated here; * caller free's with . * <*byp_abc> is allocated here if it was requested; * caller free's with . * * Returns if has no <.h3f> file open, * or on any parsing error. * * Returns if the HMM we read is incompatible * with the existing alphabet <*byp_abc> led us to expect. * * On any returned error, errbuf> contains an * informative error message. * * Throws: on allocation error. */ int p7_oprofile_ReadInfoMSV(P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OPROFILE **ret_om) { uint32_t magic; P7_OPROFILE *om = NULL; ESL_ALPHABET *abc = NULL; int alphatype; off_t offs[p7_NOFFSETS]; off_t roff; int M; int i; int status; if (hfp->errbuf != NULL) hfp->errbuf[0] = '\0'; if (hfp->ffp == NULL) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no MSV profile file; hmmpress probably wasn't run"); if (feof(hfp->ffp)) { status = eslEOF; goto ERROR; } /* normal EOF: no more profiles */ /* keep track of the starting offset of the MSV model */ roff = ftello(hfp->ffp); if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->ffp)) { status = eslEOF; goto ERROR; } if (magic == v3a_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/a); please hmmpress your HMM file again"); if (magic == v3b_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/b); please hmmpress your HMM file again"); if (magic == v3c_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/c); please hmmpress your HMM file again"); if (magic == v3d_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/d); please hmmpress your HMM file again"); if (magic == v3e_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/e); please hmmpress your HMM file again"); if (magic != v3f_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic; not an HMM database?"); if (! fread( (char *) &M, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read model size M"); if (! fread( (char *) &alphatype, sizeof(int), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read alpha type"); if (! fread( (char *) offs, sizeof(off_t), p7_NOFFSETS, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read hmmpfam offsets"); if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->ffp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no sentinel magic: .h3f file corrupted?"); if (magic != v3f_fmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad sentinel magic; .h3f file corrupted?"); /* Set or verify alphabet. */ if (byp_abc == NULL || *byp_abc == NULL) { /* alphabet unknown: whether wanted or unwanted, make a new one */ if ((abc = esl_alphabet_Create(alphatype)) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failed: alphabet"); } else { /* alphabet already known: verify it against what we see in the HMM */ abc = *byp_abc; if (abc->type != alphatype) ESL_XFAIL(eslEINCOMPAT, hfp->errbuf, "Alphabet type mismatch: was %s, but current profile says %s", esl_abc_DecodeType(abc->type), esl_abc_DecodeType(alphatype)); } om = p7_oprofile_Create(M, abc); om->M = M; om->roff = roff; for (i = 0; i < p7_NOFFSETS; ++i) om->offs[i] = offs[i]; /* keep track of the ending offset of the MSV model */ om->eoff = ftello(hfp->ffp) - 1;; if (byp_abc != NULL) *byp_abc = abc; *ret_om = om; return eslOK; ERROR: if (abc != NULL && (byp_abc == NULL || *byp_abc == NULL)) esl_alphabet_Destroy(abc); /* destroy alphabet if we created it here */ *ret_om = NULL; return status; } /* Function: p7_oprofile_ReadBlockMSV() * Synopsis: Read the next block of optimized profiles from a hmm file. * * Purpose: Reads a block of optimized profiles from open hmm file into * . * * Returns: on success; the new sequence is stored in . * * Returns when there is no profiles left in the * file (including first attempt to read an empty file). * * Otherwise return the status of the p7_oprofile_ReadMSV function. */ int p7_oprofile_ReadBlockMSV(P7_HMMFILE *hfp, ESL_ALPHABET **byp_abc, P7_OM_BLOCK *hmmBlock) { int i; int size = 0; int status = eslOK; hmmBlock->count = 0; for (i = 0; i < hmmBlock->listSize; ++i) { status = p7_oprofile_ReadMSV(hfp, byp_abc, &hmmBlock->list[i]); if (status != eslOK) break; size += hmmBlock->list[i]->M; ++hmmBlock->count; } /* EOF will be returned only in the case were no profiles were read */ if (status == eslEOF && i > 0) status = eslOK; return status; } /* Function: p7_oprofile_ReadRest() * Synopsis: Read the rest of an optimized profile. * * Purpose: Read the rest of an optimized profile from * the <.h3p> file associated with an open HMM * file . * * This is the second part of a two-part calling sequence. * The here must be the result of a previous * successful call on the same * open . * * Args: hfp - open HMM file, from which we've previously * called . * om - optimized profile that was successfully * returned by . * * Returns: on success, and is now a complete * optimized profile. * * Returns if has no <.h3p> file open, * or on any parsing error, and set errbuf> to * an informative error message. * * Throws: if an fails to reposition the * binary <.h3p> file. * * on allocation error. */ int p7_oprofile_ReadRest(P7_HMMFILE *hfp, P7_OPROFILE *om) { uint32_t magic; int M; int alphatype; int status = eslOK; #ifdef HMMER_THREADS /* lock the mutex to prevent other threads from reading from the optimized * profile at the same time. */ if (hfp->syncRead) { if (pthread_mutex_lock (&hfp->readMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex lock failed"); } #endif if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read magic"); if (magic == v3a_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/a); please hmmpress your HMM file again"); if (magic == v3b_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/b); please hmmpress your HMM file again"); if (magic == v3c_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/c); please hmmpress your HMM file again"); if (magic == v3d_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/d); please hmmpress your HMM file again"); if (magic == v3e_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "binary auxfiles are in an outdated HMMER format (3/e); please hmmpress your HMM file again"); if (magic != v3f_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic; not an HMM database file?"); if (! fread( (char *) &M, sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read model size M"); if (! fread( (char *) &alphatype, sizeof(int), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read alphabet type"); if (! fread( (char *) &magic, sizeof(uint32_t), 1, hfp->pfp)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no sentinel magic: .h3p file corrupted?"); if (magic != v3f_pmagic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad sentinel magic: .h3p file corrupted?"); if (M != om->M) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "p/f model length mismatch"); if (alphatype != om->abc->type) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "p/f alphabet type mismatch"); #ifdef HMMER_THREADS if (hfp->syncRead) { if (pthread_mutex_unlock (&hfp->readMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed"); } #endif return eslOK; ERROR: #ifdef HMMER_THREADS if (hfp->syncRead) { if (pthread_mutex_unlock (&hfp->readMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed"); } #endif return status; } /*----------- end, reading optimized profiles -------------------*/ /***************************************************************** * 3. Utility routines *****************************************************************/ /* Function: p7_oprofile_CreateBlock() * Synopsis: Create a new block of empty . * * Purpose: Creates a block of empty profile objects. * * Returns: a pointer to the new . Caller frees this * with . * * Throws: if allocation fails. */ P7_OM_BLOCK * p7_oprofile_CreateBlock(int count) { int i = 0; P7_OM_BLOCK *block = NULL; int status = eslOK; ESL_ALLOC(block, sizeof(*block)); block->count = 0; block->listSize = 0; block->list = NULL; ESL_ALLOC(block->list, sizeof(P7_OPROFILE *) * count); block->listSize = count; for (i = 0; i < count; ++i) { block->list[i] = NULL; } return block; ERROR: if (block != NULL) { if (block->list != NULL) free(block->list); free(block); } return NULL; } /* Function: p7_oprofile_DestroyBlock() * Synopsis: Frees an . * * Purpose: Free a Create()'d block of profiles. */ void p7_oprofile_DestroyBlock(P7_OM_BLOCK *block) { int i; if (block == NULL) return; if (block->list != NULL) { for (i = 0; i < block->listSize; ++i) { if (block->list[i] != NULL) p7_oprofile_Destroy(block->list[i]); } free(block->list); } free(block); return; } /* Function: p7_oprofile_Position() * Synopsis: Reposition an open hmm file to an offset. * * Purpose: Reposition an open to offset . * would usually be the first byte of a * desired hmm record. * * Returns: on success; * if no data can be read from this position. * * Throws: if the is not positionable. * if no msv profile opened. * if the fseeko() call fails. */ int p7_oprofile_Position(P7_HMMFILE *hfp, off_t offset) { if (hfp->ffp == NULL) ESL_EXCEPTION(eslEFORMAT, hfp->errbuf, "no MSV profile file; hmmpress probably wasn't run"); if (hfp->do_stdin) ESL_EXCEPTION(eslEINVAL, "can't Position() in standard input"); if (hfp->do_gzip) ESL_EXCEPTION(eslEINVAL, "can't Position() in a gzipped file"); if (offset < 0) ESL_EXCEPTION(eslEINVAL, "bad offset"); if (fseeko(hfp->ffp, offset, SEEK_SET) != 0) ESL_EXCEPTION(eslESYS, "fseeko() failed"); return eslOK; } /*-------------------- end, utility routines ---------------------*/ /***************************************************************** * 4. Benchmark driver. *****************************************************************/ #ifdef p7IO_BENCHMARK /* gcc -g -Wall -o benchmark-io -I.. -L.. -I../../easel -L../../easel -Dp7IO_BENCHMARK io.c -lhmmer -leasel -lm icc -O3 -static -o benchmark-io -I.. -L.. -I../../easel -L../../easel -Dp7IO_BENCHMARK io.c -lhmmer -leasel -lm ./benchmark-io Pfam.msv */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for profile input"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_ALPHABET *abc = NULL; char *msvfile = esl_opt_GetArg(go, 1); FILE *msvfp = NULL; P7_OPROFILE *om = NULL; int nmodel = 0; uint64_t totM = 0; int status; esl_stopwatch_Start(w); if ((msvfp = fopen(msvfile, "r")) == NULL) p7_Fail("Failed to open MSV file %s for reading.\n", msvfile); while ((status = p7_oprofile_ReadMSV(msvfp, &abc, NULL, &om)) == eslOK) { nmodel++; totM += om->M; p7_oprofile_Destroy(om); } if (status == eslEFORMAT) p7_Fail("bad file format in profile file %s", msvfile); else if (status == eslEINCOMPAT) p7_Fail("profile file %s contains different alphabets", msvfile); else if (status != eslEOF) p7_Fail("Unexpected error in reading profiles from %s", msvfile); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# number of models: %d\n", nmodel); printf("# total M: %" PRId64 "\n", totM); fclose(msvfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*IO_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 5. Unit tests. *****************************************************************/ #ifdef p7IO_TESTDRIVE static void utest_ReadWrite(P7_HMM *hmm, P7_OPROFILE *om) { char *msg = "oprofile read/write unit test failure"; ESL_ALPHABET *abc = NULL; P7_OPROFILE *om2 = NULL; char tmpfile[16] = "esltmpXXXXXX"; char *mfile = NULL; char *ffile = NULL; char *pfile = NULL; char *ssifile = NULL; FILE *fp = NULL; FILE *mfp = NULL; FILE *ffp = NULL; FILE *pfp = NULL; ESL_NEWSSI *nssi = NULL; P7_HMMFILE *hfp = NULL; uint16_t fh = 0; float tolerance = 0.001; char errbuf[eslERRBUFSIZE]; /* 1. A mini version of hmmpress: save the test HMM to a file along with its associated .h3{mfpi} files */ if ( esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg); if ( esl_sprintf(&mfile, "%s.h3m", tmpfile) != eslOK) esl_fatal(msg); if ( esl_sprintf(&ffile, "%s.h3f", tmpfile) != eslOK) esl_fatal(msg); if ( esl_sprintf(&pfile, "%s.h3p", tmpfile) != eslOK) esl_fatal(msg); if ( esl_sprintf(&ssifile, "%s.h3i", tmpfile) != eslOK) esl_fatal(msg); if ( esl_newssi_Open(ssifile, TRUE, &nssi) != eslOK) esl_fatal(msg); if (( mfp = fopen(mfile, "wb")) == NULL) esl_fatal(msg); if (( ffp = fopen(ffile, "wb")) == NULL) esl_fatal(msg); if (( pfp = fopen(pfile, "wb")) == NULL) esl_fatal(msg); /* the disk offsets are all 0 by construction, if there's only one * HMM in the file - but don't want to forget them, if we change the * unit test in the future to be multi HMM */ if ((om->offs[p7_MOFFSET] = ftello(mfp)) == -1) esl_fatal(msg); if ((om->offs[p7_FOFFSET] = ftello(ffp)) == -1) esl_fatal(msg); if ((om->offs[p7_POFFSET] = ftello(pfp)) == -1) esl_fatal(msg); if ( p7_hmmfile_WriteASCII(fp, -1, hmm) != eslOK) esl_fatal(msg); if ( p7_hmmfile_WriteBinary(mfp, -1, hmm) != eslOK) esl_fatal(msg); if ( p7_oprofile_Write(ffp, pfp, om) != eslOK) esl_fatal(msg); if ( esl_newssi_AddFile(nssi, tmpfile, 0, &fh) != eslOK) esl_fatal(msg); if ( esl_newssi_AddKey (nssi, hmm->name, fh, om->offs[p7_MOFFSET], 0, 0) != eslOK) esl_fatal(msg); if ( esl_newssi_Write(nssi) != eslOK) esl_fatal(msg); fclose(fp); fclose(mfp); fclose(ffp); fclose(pfp); esl_newssi_Close(nssi); /* 2. read the optimized profile back in */ if ( p7_hmmfile_OpenE(tmpfile, NULL, &hfp, NULL) != eslOK) esl_fatal(msg); if ( p7_oprofile_ReadMSV(hfp, &abc, &om2) != eslOK) esl_fatal(msg); if ( p7_oprofile_ReadRest(hfp, om2) != eslOK) esl_fatal(msg); /* 3. it should be identical to the original */ if ( p7_oprofile_Compare(om, om2, tolerance, errbuf) != eslOK) esl_fatal("%s\n%s", msg, errbuf); p7_oprofile_Destroy(om2); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); remove(ssifile); remove(ffile); remove(pfile); remove(mfile); remove(tmpfile); free(ssifile); free(mfile); free(ffile); free(pfile); } #endif /*p7IO_TESTDRIVE*/ /*------------------ end, unit tests ----------------------------*/ /***************************************************************** * 6. Test driver *****************************************************************/ #ifdef p7IO_TESTDRIVE /* gcc -g -Wall -std=gnu99 -o io_utest -I.. -L.. -I../../easel -L../../easel -Dp7IO_TESTDRIVE io.c -lhmmer -leasel -lm ./io_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-M", eslARG_INT, "45", NULL, NULL, NULL, NULL, NULL, "size of random model to sample", 0 }, { "-L", eslARG_INT, "45", NULL, NULL, NULL, NULL, NULL, "configure model for length ", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for non-optimized Forward, Backward implementations"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; P7_HMM *hmm = NULL; P7_OPROFILE *om = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); /* Sample a random HMM and optimized profile, in amino acid alphabet. */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (( p7_oprofile_Sample(r, abc, bg, M, L, &hmm, NULL, &om)) != eslOK) esl_fatal("failed to sample HMM and profile"); /* unit test(s) */ utest_ReadWrite(hmm, om); p7_oprofile_Destroy(om); p7_hmm_Destroy(hmm); p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return eslOK; } #endif /*p7IO_TESTDRIVE*/ /*------------------- end, test driver --------------------------*/ /***************************************************************** * 7. Example. *****************************************************************/ #ifdef p7IO_EXAMPLE /* gcc -g -Wall -Dp7IO_EXAMPLE -I.. -I../../easel -L.. -L../../easel -o io_example io.c -lhmmer -leasel -lm * ./io_example */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "hmmer.h" #include "impl_dummy.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "verbose: print model info as they're read", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of writing MSV profile part"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_ALPHABET *abc = NULL; char *hmmfile = esl_opt_GetArg(go, 1); P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; char *fname = NULL; char *pname = NULL; FILE *ffp = NULL; FILE *pfp = NULL; int nmodel = 0; uint64_t totM = 0; int status; char errbuf[eslERRBUFSIZE]; status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); esl_sprintf(&fname, "%s.h3f", hmmfile); esl_sprintf(&pname, "%s.h3f", hmmfile); if ((ffp = fopen(fname, "wb")) == NULL) p7_Fail("failed to open %s\n", fname); if ((pfp = fopen(pname, "wb")) == NULL) p7_Fail("failed to open %s\n", pname); free(fname); free(pname); while ((status = p7_hmmfile_Read(hfp, &abc, &hmm)) == eslOK) { if (nmodel == 0) { /* first time initialization, now that alphabet known */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, 400); } if (esl_opt_GetBoolean(go, "-v")) printf("%s\n", hmm->name); nmodel++; totM += hmm->M; gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 400, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_Write(ffp, pfp, om); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); p7_hmm_Destroy(hmm); } if (status == eslEFORMAT) p7_Fail("bad file format in HMM file %s", hmmfile); else if (status == eslEINCOMPAT) p7_Fail("HMM file %s contains different alphabets", hmmfile); else if (status != eslEOF) p7_Fail("Unexpected error in reading HMMs from %s", hmmfile); fclose(ffp); fclose(pfp); p7_bg_Destroy(bg); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*IO_EXAMPLE*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/impl_dummy/io.c $ * SVN $Id: io.c 3960 2012-03-22 21:42:50Z wheelert $ *****************************************************************/ hmmer-3.1b2/src/impl_dummy/p7_omx.c0000664361611702660230000000716512473612613016621 0ustar wheelerteddy/* Non-optimized implementation of an optimized profile structure. * * Contents: * 1. The P7_OMX structure: a dynamic programming matrix * 2. Debugging dumps of P7_OMX structures * 3. Copyright and license information * * MSF Tue Nov 3, 2009 [Janelia] * SVN $Id: p7_omx.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "hmmer.h" #include "impl_dummy.h" /***************************************************************** * 1. The P7_OMX structure: a dynamic programming matrix *****************************************************************/ /* Function: p7_omx_Create() * Synopsis: Create an dynamic programming matrix. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Allocates a reusable, resizeable for models up to * size and target sequences up to length * , for use by any of the various optimized * DP routines. * * Returns: a pointer to the new . */ P7_OMX * p7_omx_Create(int allocM, int allocL, int allocXL) { int L = (allocL > allocXL) ? allocL : allocXL; return p7_gmx_Create(allocM, L); } /* Function: p7_omx_GrowTo() * Synopsis: Assure that a DP matrix is big enough. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Assures that an optimized DP matrix is allocated for * a model up to in length; if not, reallocate to * make it so. * * Returns: on success, and may be reallocated upon * return; any data that may have been in must be * assumed to be invalidated. */ int p7_omx_GrowTo(P7_OMX *ox, int allocM, int allocL, int allocXL) { int L = (allocL > allocXL) ? allocL : allocXL; return p7_gmx_GrowTo(ox, allocM, L); } /* Function: p7_omx_Reuse() * Synopsis: Recycle an optimized DP matrix. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Recycles for re-use. * * Returns: on success. */ int p7_omx_Reuse(P7_OMX *ox) { ox->M = 0; ox->L = 0; return eslOK; } /* Function: p7_omx_Destroy() * Synopsis: Frees an optimized DP matrix. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Frees optimized DP matrix . * * Returns: (void) */ void p7_omx_Destroy(P7_OMX *ox) { p7_gmx_Destroy(ox); return; } /*------------------- end, P7_OMX structure ---------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ /*---------------------- end, test driver -----------------------*/ /***************************************************************** * 13. Example *****************************************************************/ /*------------------------ example ------------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/hmmpgmd_client_example.pl0000775361611702660230000005051212473612613020124 0ustar wheelerteddy#!/usr/bin/env perl =head1 SYNOPSIS This script is a very basic version of what is performed by the HMMER website searches. The script will connet to a hmmpgmd client and take the input fasta file (containing one or more sequences) and push each sequence down the socket to be searched by the master. When the results come back, the status is read. If successful, the whole message is read from the socket and written to file in /tmp, as well as being stored in a scalar. The scalar is then unpacked, just to the level of the stats. The sequence is searched against the first database in the hmmpgmd list of databases (whether sequence of HMM). NOTE: The socket call is wrapped up in a sig alarm that will die terminate when it does not response. Under normal website operation, this is set to 30 secs. =cut use strict; use warnings; use Carp; use IO::Socket::INET; use Getopt::Long; #------------------------------------------------------------------------------ #Process the options; #------------------------------------------------------------------------------ my ( $map, $file, $nocleanup, $peerAddr, $peerPort, $proto, $verbose, $help, $timeout ); $timeout = 30; GetOptions( "map=s" => \$map, "file=s" => \$file, "PeerAddr=s" => \$peerAddr, "PeerPort=s" => \$peerPort, "Proto=s" => \$proto, "timeout=i" => \$timeout, "verbose" => \$verbose, "nocleanup" => \$nocleanup, "h|help" => \$help ) or die "Failed to parse options, run -h :[$@]\n"; if ( !defined($map) ) { warn("No accessions will be reported, just hmmpgmd index.\n"); } elsif ( !-s $map ) { warn "A map file [$map] was specified, but it either has no size or does not exist.\n"; $help = 1; } if ( defined($file) ) { unless ( -s $file ) { warn "\n$file either does not exist, or has no size\n\n"; $help = 1; } } else { warn "\nPlease specify a query fasta filename!\n\n"; $help = 1; } help() if ($help); #------------------------------------------------------------------------------ #Now get the socket connection. #------------------------------------------------------------------------------ my $connection; $connection = { PeerAddr => defined($peerAddr) ? $peerAddr : '127.0.0.1', PeerPort => defined($peerPort) ? $peerPort : '51371', Proto => defined($proto) ? $proto : 'tcp' }; $verbose && print STDERR "Getting socket connection"; my $sock = IO::Socket::INET->new(%$connection) or die "Could not connect to socket: [$!] \n"; $sock->autoflush(1); #------------------------------------------------------------------------------ # Read in the mapping file #------------------------------------------------------------------------------ # In this example, the mappings are read into memory. If you have a large #database, you may want to consider a NoSQL alternative such as Redis or #MongoDB my $mappings; if ($map) { $mappings = readMapFile($map); } #------------------------------------------------------------------------------ main(); sub main { #Build up the connection string my ($optStr); #If you are using a hmm database, you would change this to be --hmmdb $optStr = '@--seqdb 1'; #open the input fasta file. my $c = 1; local $/ = "\n>"; open( my $fh, '<', $file ) or die "Could not open $file:[$!]\n"; my @fasta = <$fh>; close($fh); foreach (@fasta) { $verbose && print STDERR "Working on sequence #: $c\n"; my $seq = $_; $seq =~ s/>$//mx; $seq =~ s/^([^>])/>$1/x; my ($query_name) = $seq =~ /^>([^\s]*)/mx; $seq .= "\n//"; #add on the file delimiter required by hmmer; That's all there is ... $verbose && print STDERR "sending |$optStr\n$seq| to the socket\n"; #Print the query to the socket print $sock "$optStr\n$seq"; my ( $stats, $hits ); #Wrap this whole call in a sig alarm. local $SIG{ALRM} = sub { croak "Failed to get response from hmmpgmd" }; alarm $timeout; eval { #open the file where we store the binary data. open( my $outFH, '>', "/tmp/hmmer.$$.$c.out" ) or die "Could not open /tmp/hmmer.$$.c.out:[$!]\n"; ( $stats, $hits ) = &unpackResults( $sock, $outFH, $verbose ); close($outFH) or croak "Could not close tmp file"; }; if ($@) { die "Timeout on the socket:$@\n"; } alarm 0; $verbose && print STDERR "Got " . $stats->{nincluded} . " hits\n"; printHits($hits); $c++; } #------------------------------------------------------------------------------ # Normally we will want to clean up /tmp, but occasionally it will be useful. #------------------------------------------------------------------------------ unless ($nocleanup) { $verbose && print STDERR "Cleaning up /tmp\n"; my @files = glob("/tmp/hmmer.$$.*"); foreach my $f (@files) { unlink($f) if ( -e $f ); } } exit; } #------------------------------------------------------------------------------ #Subroutines #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ =head1 SUBROUTINES =cut =head2 printHits Title : printHits Incept : finnr, Apr 22, 2013 5:16:13 PM Usage : printHits( $hitArrayRef ); Function : Prints out elements form the unpacked data sturcture so that : alignments can be viewed. Args : The array reference containing the unpacked data Returns : 1 =cut sub printHits { my ($hits) = @_; my $ruler = '-' x 80; #Use a flush buffer, so results are written in the entirity. local $/ = 1; foreach my $seq (@$hits) { next if ( !$seq->{nincluded} ); my $str = join( "\t", "Seq hit", $seq->{name}, $seq->{desc}, $seq->{score}, $seq->{evalue} ); print "$str\n\n"; foreach my $dom ( @{ $seq->{domains} } ) { if ( $dom->{is_included} ) { print "Domain hit " . $seq->{name} . "/" . $dom->{ienv} . "-" . $dom->{jenv} . ": score " . sprintf( '%.2f', $dom->{bitscore} ) . ", E-value (individual) " . $dom->{ievalue} . " E-value (conditional) " . $dom->{cevalue} . "\n\n"; print sprintf( "\t%-30s %6d %s %-6d\n", $seq->{name}, $dom->{alisqfrom}, $dom->{aliaseq}, $dom->{alisqto} ); print sprintf( "\t%37s %s\n", '', $dom->{alimline} ); print sprintf( "\t%-30s %6d %s %-6d\n", $dom->{alihmmname}, $dom->{alihmmfrom}, $dom->{alimodel}, $dom->{alihmmto} ); print sprintf( "\t%37s %s\n\n", '', $dom->{alippline} ); } } print "$ruler\n"; } return 1; } #------------------------------------------------------------------------------ =head2 unpackResults Title : unpackResu;ts Incept : finnr, Apr 22, 2013 5:18:15 PM Usage : unpackResults( $socket, $fh) Function : Takes the sockect connection to hmmpgmd and reads the response. If : successful it will unpack the binary data structure and build a : Perl data structure. Args : An IO::Socket::INET to hmmpgmd, filehandle to temp file. Returns : Perl data sturcture of results. Note : Include a data export module such as Data::Priner to reveal : the entirity of the HMMER result data structure. Everything that : is available in the commandline version is present. =cut sub unpackResults { my ( $socket, $fh ) = @_; #Ths is the unpacking template and length. my $statusTemplate = "I x4 Q"; my $STATUS = 16; my $rl = read( $sock, my $statusB, $STATUS ); #Read the status from the socket. unless ( $rl == $STATUS ) { die "Error reading STATUS from socket. Requested " . $STATUS . "bytes, but only read $rl bytes\n"; } #Unpack the status. my ( $status, $messLen ) = unpack( $statusTemplate, $statusB ); if ( $status == 0 ) #Everything was successful { #read the entire results from the socket. We will store this #in a temporary file. This is not entirely necessary. my $binaryData = readAndStore( $socket, $messLen, $fh ); #We now process the binary data structure returned by #hmmpgmd. To make the code more readable, we will #unpack section by section, cutting off the front #of the binary and processing just that bit. my $bit = substr( $binaryData, 0, 120, '' ); #Get a hash reference back containing all the search #stats, such as time, number of hits my $stats = unpackStats($bit); my $hits = []; if ( $stats->{nreported} ) { #We have at least some hits to unpack.... #The first hit section contains all of the sequence matches #but not domain mataches. for ( my $n = 1 ; $n <= $stats->{nreported} ; $n++ ) { $bit = substr( $binaryData, 0, 152, '' ); unpackHit( $bit, $hits, $stats->{Z} ); } #Now, unpack the domain hits for the sequences for ( my $h = 0 ; $h < $stats->{nreported} ; $h++ ) { if ( $hits->[$h]->{ndom} ) { my $dombit = substr( $binaryData, 0, 72 * $hits->[$h]->{ndom}, '' ); #This gets the fixed size fields unpackDomain( $dombit, $hits, $h, $stats ); for ( my $a = 1 ; $a <= $hits->[$h]->{ndom} ; $a++ ) { #Now unpack the variable sized fields. unpackAli( \$binaryData, $hits, $h, $a ); } } } } return ( $stats, $hits ); } else #There was an error, read the message { $rl = read( $sock, my $errorLine, $messLen ); my $errorMessage = unpack( "a$messLen", $errorLine ); die "There was an error reported by HMMER: $errorMessage\n"; } } #------------------------------------------------------------------------------ =head2 unpackAli Title : unpackAli Incept : finnr, Apr 22, 2013 7:53:39 PM Usage : unpackAli( $binaryData, $hits, $hitCount, $domCount); Function : Takes the binary data, gets the alignment data, which in this case : are dynamic fields. This uses the data found within the hit/domain : information to locate and read the appropriate amount of bytes. Args : The binary data stream, the hit data structure and the hit and domain : positions. Returns : 1 =cut sub unpackAli { my ( $binary, $hits, $h, $a ) = @_; my $bit = substr( $$binary, 0, 168, '' ); my @aliKeys = qw(rfline mmline csline model mline aseq ppline N hmmname hmmacc hmmdesc hmmfrom hmmto M sqname sqacc sqdesc sqfrom sqto L memsize mem); my @ali = unpack( "Q7 I x4 Q3 I3 x4 Q6 I x4 Q", $bit ); my %ali = map { $aliKeys[$_] => $ali[$_] } 0 .. $#aliKeys; $bit = substr( $$binary, 0, $ali{memsize}, '' ); my @unpackElements = qw(0 1 2 3 4 5 6 8 9 10 14 15 16 20); my $offset = 0; for ( my $i = 0 ; $i < $#unpackElements ; $i++ ) { my $e = $unpackElements[$i]; next if ( $ali[$e] == 0 ); #Then this element is not defined in the binary my $ne; #Store the next defined element. for ( my $j = $i + 1 ; $j <= $#unpackElements ; $j++ ) { if ( $ali[ $unpackElements[$j] ] > 0 ) { $ne = $unpackElements[$j]; $j = $#unpackElements + 1; #break the loop } } #The number of bytes that we need to unpack is: my $l = ( $ali[$ne] - $ali[$e] ); #Define the unpack template: my $template = $offset > 0 ? "x$offset a$l" : "a$l"; my $s = $ali[$e] == 0 ? '' : unpack( $template, $bit ); chop($s); #This removes the \0 - C string terminator $ali{ $aliKeys[$e] } = $s; #keep a note of what has aready been unpacked. $offset += $l; } foreach my $k (@aliKeys) { next if $k =~ /memsize/; $hits->[$h]->{domains}->[ $a - 1 ]->{ 'ali' . $k } = $ali{$k}; } return 1; } #------------------------------------------------------------------------------ =head2 unpackDomain Title : unpackDomain Incept : finnr, Apr 22, 2013 7:59:59 PM Usage : unpackDomain( $binary, $hits, $h, $stats ); Function : unpack the domain hit from the binary string. Args : binary string, the hit array reference, the sequence position, : stats hash ref. Returns : 1 =cut sub unpackDomain { my ( $binary, $hits, $h, $stats ) = @_; my @dom = unpack( "i4 f5 x4 d i2 Q x8" x $hits->[$h]->{ndom}, $binary ); my $noDomKeys = 13; #*** If the P7_DOMAIN struc changes, modify these numbers for ( my $d = 0 ; $d < $hits->[$h]->{ndom} ; $d++ ) { my $off = ( $d * $noDomKeys ); my $ievalue = sprintf( "%.1e", exp( $dom[ $off + 9 ] ) * $stats->{Z} ); $ievalue = $ievalue < 0.0001 ? $ievalue : sprintf( "%.6g", $ievalue ); my $cevalue = sprintf( "%.1e", exp( $dom[ $off + 9 ] ) * $stats->{domZ} ); $cevalue = $cevalue < 0.0001 ? $cevalue : sprintf( "%.6g", $cevalue ); $hits->[$h]->{domains}->[$d] = { ienv => $dom[$off], jenv => $dom[ $off + 1 ], iali => $dom[ $off + 2 ], jali => $dom[ $off + 3 ], bitscore => $dom[ $off + 8 ], ievalue => $ievalue, cevalue => $cevalue, oasc => sprintf( "%4.2f", ( $dom[ $off + 9 ] / ( 1.0 + abs( $dom[ $off + 1 ] - $dom[$off] ) ) ) ), bias => sprintf( "%.2f", abs( $dom[ $off + 9 ] * 1.442695041 ) ), is_reported => $dom[ $off + 10 ], is_included => $dom[ $off + 11 ], }; } return 1; } #------------------------------------------------------------------------------ =head2 unpackHit Title : unpackHit Incept : finnr, Apr 22, 2013 8:22:55 PM Usage : unpackHit($binary, $hitArray, $dbsize); Function : unpack a single sequence match, pushing the data into the hitArray : reference. The database size is also passed in to correctly set : the e-value. Args : Binary data, hit array, int of the database size Returns : 1 =cut sub unpackHit { my ( $binary, $hits, $z ) = @_; my @hitKeys = qw(name acc desc window_length sort_key score pre_score sum_score pvalue pre_pvalue sum_pvalue nexpected nregions nclustered noverlaps nenvelopes ndom flags nreported nincluded best_domain seqidx subseq_start dcl offset); my $noHitsKeys = scalar(@hitKeys); my $raw_hits = []; @{$raw_hits} = unpack( "Q3 I x4 d f3 x4 d3 f I9 Q4", $binary ); my $evalue = sprintf( "%.1e", exp( $raw_hits->[8] ) * $z ); $evalue = $evalue < 0.0001 ? $evalue : sprintf( "%.6g", $evalue ); my $acc = $raw_hits->[0]; my $desc = $raw_hits->[2]; if ($mappings) { ( $acc, $desc ) = split( /\s+/xm, $mappings->[ $raw_hits->[0] ], 2 ); } push @$hits, { name => $acc, acc => $raw_hits->[1], desc => $desc, score => sprintf( "%.1f", $raw_hits->[5] ), bias => sprintf( "%.1f", abs( $raw_hits->[6] - $raw_hits->[5] ) ), pvalue => $raw_hits->[8], nregions => $raw_hits->[12], ndom => $raw_hits->[16], flags => $raw_hits->[17], nreported => $raw_hits->[18], nincluded => $raw_hits->[19], evalue => $evalue, dcl => $raw_hits->[23] }; return 1; } #------------------------------------------------------------------------------ =head2 readAndStore Title : readAndStore Incept : finnr, Apr 22, 2013 8:13:49 PM Usage : readAndStore($socket, $messageLength, $filehandle) Function : Reads the message (length in bytes) from the socket and : writes the binary response to the temporary file, returning the : binary data in scalar context. Args : IO::Socket::INET, message length, filehandle. Returns : binary data in scalar =cut sub readAndStore { my ( $socket, $messLen, $fh ) = @_; #Read the number of bytes in the messlen, from the socket, into the results #scalar (binary format) my $rl = read( $socket, my $resultsB, $messLen ); #Check that the read length is correct. unless ( $rl == $messLen ) { die "Error reading STATS from socket. Requested " . $messLen . " bytes, but only read $rl bytes\n"; } #Print the results to the file print $fh $resultsB; #return the binary string return $resultsB; } #------------------------------------------------------------------------------ =head2 unpackStats Title : unpackStats Incept : finnr, Apr 22, 2013 8:09:15 PM Usage : unpackStats($binaryData) Function : Unpacks the search stats binary data. Args : The binary data Returns : hashRef containing the search statistics. =cut sub unpackStats { my ($bit) = @_; #The binary template my $statsTemplate = "d5 I2 q9"; #Store how far we have read through the file my @stats = unpack( $statsTemplate, $bit ); #This is the literal mean of each values. Store in a more informative #hash. my @statsKeys = qw(elapsed user sys Z domZ Z_setby domZ_setby nmodels nseqs n_past_msv n_past_bias n_past_vit n_past_fwd nhits nreported nincluded ); unless ( $#stats == $#statsKeys ) { die "Missmatch between the number of stats data elements recieved [" . $#stats . "] and expected [$#statsKeys]\n"; } my %stats = map { $statsKeys[$_] => $stats[$_] } 0 .. $#statsKeys; #Return the hashref containing the stats. return \%stats; } #------------------------------------------------------------------------------ =head2 readMapFile Title : readMapFile Incept : finnr, Apr 22, 2013 8:00:16 PM Usage : readMapFile('/path/to/file'); Function : Reads the map file produced by esl-reformat into an array so that : sequence 'meta' data can be reapplied. Args : Path to file. Returns : ArrayRef containing sequence meta data. The sequence index is : used as the index into the array. =cut sub readMapFile { my ($mapfile) = @_; #Read the file produced by hmmpgmd, using the sequence index/name as the array #index. This will produce an array where the first zeroth element is uninitalized. my @mappings; $verbose && print STDERR "Reading map file, $mapfile\n"; my $M; open( $M, '<', $mapfile ) or die "Could not open map file:[$!]\n"; while (<$M>) { chomp; my ( $idx, $header ) = split( /\s+/xm, $_, 2 ); next if ( !defined($header) ); $mappings[$idx] = $header; } close($M); #Return the array reference to the return ( \@mappings ); } #------------------------------------------------------------------------------ =head2 help Title : help Incept : finnr, Apr 22, 2013 8:03:50 PM Usage : help Function : prints some help Args : none Returns : nothing =cut sub help { print <<'EOF'; Summary: Sample hmmpgmd client Usage: hmmpgmd_client_example.pl [options] -file seq.fa file : The name of the fasta file. The file is not being validated; give it : rubbish and bad things will happen. map : The map file produced by esl-reformat when using hmmpgmd format option. : If this is not provided, then it will just report the index numbers. h|help : Prints this help statement verbose : Prints debug statements/progress reports. nocleanup : When this flag is set, leaves the hmmpgmd binary output files in : /tmp. The files has the format hmmer.#PID.#sequence.out. timeout : Change the default timeout, 30 secs. Time in seconds. #The following options control which hmmpgmd master is linked by the client. They are used #by IO::Socket::INET, see CPAN for more information. PeerAddr : The IP address of the machine where the master is running, default 127.0.0.1 PeerPort : The port number that the master is listening on, default 51371 Proto : The socket protocol - should not change this unless the master : changes its communications protocol, which is tcp Also, you can run: perldoc hmmpgmd_client_example.pl for more information. Details: This example script shows how to search sequences in a FASTA file against an hmmpgmd format database file, using HMMER's hmmpgmd. Steps include: (1) Generate an hmmpgmd format file, including map file, from a FASTA format file, for example using the HMMER/Easel tool esl-reformat: prompt% esl-reformat --id_map my.hmmpgmd.map hmmpgmd my.fasta > my.hmmpgmd (2) Start the hmmpgmd master/worker, run the following commands: prompt% hmmpgmd --master --seqdb my.hmmpgmd prompt% hmmpgmd --worker 127.0.0.1 --cpu 4 (3) Run this client to connect to the master (4) Submit one query to hmmpgmd for each sequence in the query file, retrieve results from the master, then unpack the custom (and undocumented) binary. Examples of unpacking the binary are seen in the unpackXXX() functions. EOF exit 0; } hmmer-3.1b2/src/hmmlogo.c0000664361611702660230000002574412473612613014701 0ustar wheelerteddy/* HMMLOGO, code to print values for building logos, or functions to inline * * Contents: * 1. logo value functions * 2. hmmlogo application * 3. Copyright and license information * */ #include "hmmer.h" /***************************************************************** * 1. logo value functions *****************************************************************/ float hmmlogo_maxHeight (P7_BG *bg) { float min_p = 1; int i; for (i=0; iabc->K; i++) min_p = ESL_MIN(min_p,bg->f[i]); return eslCONST_LOG2R * log(1.0/min_p); //bits } /* assumes rel_ents is allocated with abc->K floats, and heights with hmm->M*abc->K floats*/ int hmmlogo_RelativeEntropy_all (P7_HMM *hmm, P7_BG *bg, float *rel_ents, float **probs, float **heights ) { int K = hmm->abc->K; int M = hmm->M; int i, j; float logodds; for (i = 1; i <= M; i++) { // height of column, to be split among the residues rel_ents[i] = 0; for (j=0; jmat[i][j]; if ( probs[i][j] > 0 ) { logodds = eslCONST_LOG2R * log(probs[i][j] / bg->f[j]); //bits rel_ents[i] += probs[i][j] * logodds ; } } // height of residues for (j=0; jK floats, and heights with hmm->M*abc->K floats*/ int hmmlogo_RelativeEntropy_above_bg (P7_HMM *hmm, P7_BG *bg, float *rel_ents, float **probs, float **heights ) { int K = hmm->abc->K; int M = hmm->M; int i, j; float logodds; float abovebg_prob_sum; for (i = 1; i <= M; i++) { // height of column, to be split among the residues; also sum of of positive scores rel_ents[i] = 0; abovebg_prob_sum = 0.0; for (j=0; jmat[i][j]; if ( probs[i][j] > 0 ) { logodds = eslCONST_LOG2R * log(probs[i][j] / bg->f[j]); //bits rel_ents[i] += probs[i][j] * logodds ; if (logodds > 0) abovebg_prob_sum += probs[i][j]; } } //height of residues for (j=0; j 0 ) { logodds = eslCONST_LOG2R * log(probs[i][j] / bg->f[j]); //bits heights[i][j] = logodds<=0 ? 0.0 : (rel_ents[i] * probs[i][j] / abovebg_prob_sum) ; } } } return eslOK; } /* assumes heights is allocated with hmm->M floats*/ int hmmlogo_ScoreHeights (P7_HMM *hmm, P7_BG *bg, float **heights ) { int K = hmm->abc->K; int M = hmm->M; int i, j; float p; float logodds; float pos_scoresum; for (i = 1; i <= M; i++) { // height of column, to be split among the residues; also sum of of positive scores pos_scoresum = 0.0; for (j=0; jmat[i][j]; logodds = eslCONST_LOG2R * log(p / bg->f[j]); //bits heights[i][j] = logodds; } } return eslOK; } /* assumes heights is allocated with hmm->M floats*/ int hmmlogo_IndelValues (P7_HMM *hmm, float *insert_P, float *insert_expL, float *occupancy ) { int i; if (insert_P != NULL) insert_P[1] = hmm->t[1][p7H_MI]; //probability of inserting after this match if (insert_expL != NULL) insert_expL[1] = 1 / (1 - hmm->t[1][p7H_II]) ; //expected length of the insert, if it happens // if (delete_P != NULL) delete_P[1] = 0.0; //1st match state never deleted for (i = 2; i < hmm->M; i++) { if (insert_P != NULL) insert_P[i] = hmm->t[i][p7H_MI]; //probability of inserting after this match if (insert_expL != NULL) insert_expL[i] = 1 / (1 - hmm->t[i][p7H_II]) ; //expected length of the insert, if it happens // if (delete_P != NULL) delete_P[i] = ( (1.0-delete_P[i-1]) * hmm->t[i-1][p7H_MD] ) + ( delete_P[i-1] * hmm->t[i-1][p7H_DD]) ; //probability of missing this state, either due to DD or MD from previous position } if (insert_P != NULL) insert_P[hmm->M] = 0.0; //no inserts after final position if (insert_expL != NULL) insert_expL[hmm->M] = 0.0; //no inserts after final position // if (delete_P != NULL) delete_P[hmm->M] = ( (1.0-delete_P[hmm->M-1]) * hmm->t[hmm->M-1][p7H_MD] ) + ( delete_P[hmm->M-1] * hmm->t[hmm->M-1][p7H_DD]) ; //probability of missing this state, either due to DD or MD from previous position if (occupancy != NULL) p7_hmm_CalculateOccupancy(hmm, occupancy, NULL); return eslOK; } /*---------------- end, logo value functions ----------------------*/ /***************************************************************** * 2. hmmlogo application *****************************************************************/ #define HMMLOGO_OPTS "--height_relent_all,--height_relent_abovebg,--height_score" #define HMMLOGO_RELENT_ALL 1 #define HMMLOGO_RELENT_ABOVEBG 2 #define HMMLOGO_SCORE 3 static ESL_OPTIONS options[] = { /* name type defaul env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, /* Control of output */ { "--height_relent_all", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, HMMLOGO_OPTS, "total height = relative entropy ; all letters shown (default)", 1 }, { "--height_relent_abovebg", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, HMMLOGO_OPTS, "total height = relative entropy ; only letters >bg shown", 1 }, { "--height_score", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, HMMLOGO_OPTS, "total height = sums of (pos|neg) scores; residue height = score", 1 }, { "--no_indel", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "don't provide indel rate values", 1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[options] "; static char banner[] = "given an hmm, produce data required to build an hmm logo"; int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; int i, j; int status = eslOK; P7_HMMFILE *hfp = NULL; /* open input HMM file */ P7_HMM *hmm = NULL; /* one HMM query */ ESL_ALPHABET *abc = NULL; /* digital alphabet */ P7_BG *bg = NULL; char errbuf[eslERRBUFSIZE]; char* hmmfile; float *rel_ents = NULL; float **heights = NULL; float **probs = NULL; float *ins_P = NULL; float *ins_expL = NULL; float *occupancy = NULL; int mode = HMMLOGO_RELENT_ALL; //default go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) esl_fatal(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) esl_fatal(argv[0], "Error in configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") ) { p7_banner (stdout, argv[0], banner); esl_usage (stdout, argv[0], usage); puts("\nOptions:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 100); exit(0); } if (esl_opt_ArgNumber(go) != 1) esl_fatal(argv[0], "Incorrect number of command line arguments.\n"); hmmfile = esl_opt_GetArg(go, 1); if (esl_opt_IsOn(go, "--height_relent_all")) mode = HMMLOGO_RELENT_ALL; else if (esl_opt_IsOn(go, "--height_relent_abovebg")) mode = HMMLOGO_RELENT_ABOVEBG; else if (esl_opt_IsOn(go, "--height_score")) mode = HMMLOGO_SCORE; else mode = HMMLOGO_RELENT_ALL; //default /* Open the query profile HMM file */ status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); status = p7_hmmfile_Read(hfp, &abc, &hmm); bg = p7_bg_Create(abc); ESL_ALLOC(rel_ents, (hmm->M+1) * sizeof(float)); ESL_ALLOC(heights, (hmm->M+1) * sizeof(float*)); ESL_ALLOC(probs, (hmm->M+1) * sizeof(float*)); for (i = 1; i <= hmm->M; i++) { ESL_ALLOC(heights[i], abc->K * sizeof(float)); ESL_ALLOC(probs[i], abc->K * sizeof(float)); } /* residue heights */ if (mode == HMMLOGO_RELENT_ALL) { printf ("max expected height = %.2f\n", hmmlogo_maxHeight(bg) ); hmmlogo_RelativeEntropy_all(hmm, bg, rel_ents, probs, heights); } else if (mode == HMMLOGO_RELENT_ABOVEBG) { printf ("max expected height = %.2f\n", hmmlogo_maxHeight(bg) ); hmmlogo_RelativeEntropy_above_bg(hmm, bg, rel_ents, probs, heights); } else if (mode == HMMLOGO_SCORE) { hmmlogo_ScoreHeights(hmm, bg, heights ); } printf ("Residue heights\n"); for (i = 1; i <= hmm->M; i++) { printf("%d: ", i); for (j=0; jK; j++) printf("%6.3f ", heights[i][j] ); if (mode != HMMLOGO_SCORE) printf(" (%6.3f)", rel_ents[i]); printf("\n"); } if (rel_ents != NULL) free(rel_ents); if (heights != NULL) { for (i = 1; i <= hmm->M; i++) if (heights[i] != NULL) free(heights[i]); free(heights); } /* indel values */ if (! esl_opt_IsOn(go, "--no_indel")) { ESL_ALLOC(ins_P, (hmm->M+1) * sizeof(float)); ESL_ALLOC(ins_expL, (hmm->M+1) * sizeof(float)); ESL_ALLOC(occupancy, (hmm->M+1) * sizeof(float)); hmmlogo_IndelValues(hmm, ins_P, ins_expL, occupancy); printf ("Indel values\n"); for (i = 1; i <= hmm->M; i++) printf("%d: %6.3f %6.3f %6.3f\n", i, ins_P[i], ins_expL[i], occupancy[i] ); free(ins_P); free(ins_expL); free(occupancy); } p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); exit(0); ERROR: if (rel_ents != NULL) free(rel_ents); if (heights != NULL) { for (i = 1; i <= hmm->M; i++) if (heights[i] != NULL) free(heights[i]); free(heights); } if (hfp != NULL) p7_hmmfile_Close(hfp); if (abc != NULL) esl_alphabet_Destroy(abc); if (ins_P != NULL) free(ins_P); if (ins_expL != NULL) free(ins_expL); if (occupancy != NULL) free(occupancy); } /*---------------- end, hmmlogo application ----------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/p7_pipeline.c0000664361611702660230000026140312473612614015445 0ustar wheelerteddy/* H3's accelerated seq/profile comparison pipeline * * Contents: * 1. P7_PIPELINE: allocation, initialization, destruction * 2. Pipeline API * 3. Example 1: search mode (in a sequence db) * 4. Example 2: scan mode (in an HMM db) * 5. Copyright and license information * */ #include "p7_config.h" #include #include #include #include "easel.h" #include "esl_exponential.h" #include "esl_getopts.h" #include "esl_gumbel.h" #include "esl_vectorops.h" #include "hmmer.h" /* Struct used to pass a collection of useful temporary objects around * within the LongTarget functions * */ typedef struct { ESL_SQ *tmpseq; // - a new or reused digital sequence object used for p7_alidisplay_Create() call P7_BG *bg; P7_OPROFILE *om; float *scores; float *fwd_emissions_arr; } P7_PIPELINE_LONGTARGET_OBJS; /***************************************************************** * 1. The P7_PIPELINE object: allocation, initialization, destruction. *****************************************************************/ /* Function: p7_pipeline_Create() * Synopsis: Create a new accelerated comparison pipeline. * * Purpose: Given an application configuration structure * containing certain standardized options (described * below), some initial guesses at the model size * and sequence length that will be processed, * and a that can be either or * depending on whether we're searching one sequence * against a model database (hmmscan mode) or one model * against a sequence database (hmmsearch mode); create new * pipeline object. * * In search mode, we would generally know the length of * our query profile exactly, and would pass M> as ; * in scan mode, we generally know the length of our query * sequence exactly, and would pass n> as . * Targets will come in various sizes as we read them, * and the pipeline will resize any necessary objects as * needed, so the other (unknown) length is only an * initial allocation. * * The configuration must include settings for the * following options: * * || option || description || usually || * | --noali | don't output alignments (smaller output) | FALSE | * | -E | report hits <= this E-value threshold | 10.0 | * | -T | report hits >= this bit score threshold | NULL | * | -Z | set initial hit search space size | NULL | * | --domZ | set domain search space size | NULL | * | --domE | report domains <= this E-value threshold | 10.0 | * | --domT | report domains <= this bit score threshold | NULL | * | --incE | include hits <= this E-value threshold | 0.01 | * | --incT | include hits >= this bit score threshold | NULL | * | --incdomE | include domains <= this E-value threshold | 0.01 | * | --incdomT | include domains <= this score threshold | NULL | * | --cut_ga | model-specific thresholding using GA | FALSE | * | --cut_nc | model-specific thresholding using NC | FALSE | * | --cut_tc | model-specific thresholding using TC | FALSE | * | --max | turn all heuristic filters off | FALSE | * | --F1 | Stage 1 (MSV) thresh: promote hits P <= F1 | 0.02 | * | --F2 | Stage 2 (Vit) thresh: promote hits P <= F2 | 1e-3 | * | --F3 | Stage 2 (Fwd) thresh: promote hits P <= F3 | 1e-5 | * | --nobias | turn OFF composition bias filter HMM | FALSE | * | --nonull2 | turn OFF biased comp score correction | FALSE | * | --seed | RNG seed (0=use arbitrary seed) | 42 | * | --acc | prefer accessions over names in output | FALSE | * * As a special case, if is , defaults are set as above. * This shortcut is used in simplifying test programs and the like. * * Returns: ptr to new object on success. Caller frees this * with . * * Throws: on allocation failure. */ P7_PIPELINE * p7_pipeline_Create(ESL_GETOPTS *go, int M_hint, int L_hint, int long_targets, enum p7_pipemodes_e mode) { P7_PIPELINE *pli = NULL; int seed = (go ? esl_opt_GetInteger(go, "--seed") : 42); int status; ESL_ALLOC(pli, sizeof(P7_PIPELINE)); pli->do_alignment_score_calc = 0; pli->long_targets = long_targets; if ((pli->fwd = p7_omx_Create(M_hint, L_hint, L_hint)) == NULL) goto ERROR; if ((pli->bck = p7_omx_Create(M_hint, L_hint, L_hint)) == NULL) goto ERROR; if ((pli->oxf = p7_omx_Create(M_hint, 0, L_hint)) == NULL) goto ERROR; if ((pli->oxb = p7_omx_Create(M_hint, 0, L_hint)) == NULL) goto ERROR; /* Normally, we reinitialize the RNG to the original seed every time we're * about to collect a stochastic trace ensemble. This eliminates run-to-run * variability. As a special case, if seed==0, we choose an arbitrary one-time * seed: time() sets the seed, and we turn off the reinitialization. */ pli->r = esl_randomness_CreateFast(seed); pli->do_reseeding = (seed == 0) ? FALSE : TRUE; pli->ddef = p7_domaindef_Create(pli->r); pli->ddef->do_reseeding = pli->do_reseeding; /* Configure reporting thresholds */ pli->by_E = TRUE; pli->E = (go ? esl_opt_GetReal(go, "-E") : 10.0); pli->T = 0.0; pli->dom_by_E = TRUE; pli->domE = (go ? esl_opt_GetReal(go, "--domE") : 10.0); pli->domT = 0.0; pli->use_bit_cutoffs = FALSE; if (go && esl_opt_IsOn(go, "-T")) { pli->T = esl_opt_GetReal(go, "-T"); pli->by_E = FALSE; } if (go && esl_opt_IsOn(go, "--domT")) { pli->domT = esl_opt_GetReal(go, "--domT"); pli->dom_by_E = FALSE; } /* Configure inclusion thresholds */ pli->inc_by_E = TRUE; pli->incE = (go ? esl_opt_GetReal(go, "--incE") : 0.01); pli->incT = 0.0; pli->incdom_by_E = TRUE; pli->incdomE = (go ? esl_opt_GetReal(go, "--incdomE") : 0.01); pli->incdomT = 0.0; if (go && esl_opt_IsOn(go, "--incT")) { pli->incT = esl_opt_GetReal(go, "--incT"); pli->inc_by_E = FALSE; } if (go && esl_opt_IsOn(go, "--incdomT")) { pli->incdomT = esl_opt_GetReal(go, "--incdomT"); pli->incdom_by_E = FALSE; } /* Configure for one of the model-specific thresholding options */ if (go && esl_opt_GetBoolean(go, "--cut_ga")) { pli->T = pli->domT = 0.0; pli->by_E = pli->dom_by_E = FALSE; pli->incT = pli->incdomT = 0.0; pli->inc_by_E = pli->incdom_by_E = FALSE; pli->use_bit_cutoffs = p7H_GA; } if (go && esl_opt_GetBoolean(go, "--cut_nc")) { pli->T = pli->domT = 0.0; pli->by_E = pli->dom_by_E = FALSE; pli->incT = pli->incdomT = 0.0; pli->inc_by_E = pli->incdom_by_E = FALSE; pli->use_bit_cutoffs = p7H_NC; } if (go && esl_opt_GetBoolean(go, "--cut_tc")) { pli->T = pli->domT = 0.0; pli->by_E = pli->dom_by_E = FALSE; pli->incT = pli->incdomT = 0.0; pli->inc_by_E = pli->incdom_by_E = FALSE; pli->use_bit_cutoffs = p7H_TC; } /* Configure search space sizes for E value calculations */ pli->Z = pli->domZ = 0.0; pli->Z_setby = pli->domZ_setby = p7_ZSETBY_NTARGETS; if (go && esl_opt_IsOn(go, "-Z")) { pli->Z_setby = p7_ZSETBY_OPTION; pli->Z = esl_opt_GetReal(go, "-Z"); } if (go && esl_opt_IsOn(go, "--domZ")) { pli->domZ_setby = p7_ZSETBY_OPTION; pli->domZ = esl_opt_GetReal(go, "--domZ"); } /* Configure acceleration pipeline thresholds */ pli->do_max = FALSE; pli->do_biasfilter = TRUE; pli->do_null2 = TRUE; pli->F1 = ((go && esl_opt_IsOn(go, "--F1")) ? ESL_MIN(1.0, esl_opt_GetReal(go, "--F1")) : 0.02); pli->F2 = (go ? ESL_MIN(1.0, esl_opt_GetReal(go, "--F2")) : 1e-3); pli->F3 = (go ? ESL_MIN(1.0, esl_opt_GetReal(go, "--F3")) : 1e-5); if (long_targets) { pli->B1 = (go ? esl_opt_GetInteger(go, "--B1") : 100); pli->B2 = (go ? esl_opt_GetInteger(go, "--B2") : 240); pli->B3 = (go ? esl_opt_GetInteger(go, "--B3") : 1000); } else { pli->B1 = pli->B2 = pli->B3 = -1; } if (go && esl_opt_GetBoolean(go, "--max")) { pli->do_max = TRUE; pli->do_biasfilter = FALSE; pli->F2 = pli->F3 = 1.0; pli->F1 = (pli->long_targets ? 0.3 : 1.0); // need to set some threshold for F1 even on long targets. Should this be tighter? } if (go && esl_opt_GetBoolean(go, "--nonull2")) pli->do_null2 = FALSE; if (go && esl_opt_GetBoolean(go, "--nobias")) pli->do_biasfilter = FALSE; /* Accounting as we collect results */ pli->nmodels = 0; pli->nseqs = 0; pli->nres = 0; pli->nnodes = 0; pli->n_past_msv = 0; pli->n_past_bias = 0; pli->n_past_vit = 0; pli->n_past_fwd = 0; pli->pos_past_msv = 0; pli->pos_past_bias = 0; pli->pos_past_vit = 0; pli->pos_past_fwd = 0; pli->mode = mode; pli->show_accessions = (go && esl_opt_GetBoolean(go, "--acc") ? TRUE : FALSE); pli->show_alignments = (go && esl_opt_GetBoolean(go, "--noali") ? FALSE : TRUE); pli->hfp = NULL; pli->errbuf[0] = '\0'; return pli; ERROR: p7_pipeline_Destroy(pli); return NULL; } /* Function: p7_pipeline_Reuse() * Synopsis: Reuse a pipeline for next target. * * Purpose: Reuse for next target sequence (search mode) * or model (scan mode). * * May eventually need to distinguish from reusing pipeline * for next query, but we're not really focused on multiquery * use of hmmscan/hmmsearch/phmmer for the moment. */ int p7_pipeline_Reuse(P7_PIPELINE *pli) { p7_omx_Reuse(pli->oxf); p7_omx_Reuse(pli->oxb); p7_omx_Reuse(pli->fwd); p7_omx_Reuse(pli->bck); p7_domaindef_Reuse(pli->ddef); return eslOK; } /* Function: p7_pipeline_Destroy() * Synopsis: Free a object. * * Purpose: Free a object. */ void p7_pipeline_Destroy(P7_PIPELINE *pli) { if (pli == NULL) return; p7_omx_Destroy(pli->oxf); p7_omx_Destroy(pli->oxb); p7_omx_Destroy(pli->fwd); p7_omx_Destroy(pli->bck); esl_randomness_Destroy(pli->r); p7_domaindef_Destroy(pli->ddef); free(pli); } /*---------------- end, P7_PIPELINE object ----------------------*/ /***************************************************************** * 2. The pipeline API. *****************************************************************/ /* Function: p7_pli_ExtendAndMergeWindows * Synopsis: Turns a list of ssv diagonals into windows, and merges * overlapping windows. * * Purpose: Accepts a of SSV diagonals, extends those * to windows based on a combination of the max_length * value from and the prefix and suffix lengths stored * in , then merges (in place) windows that overlap * by more than percent, ensuring that windows * stay within the bounds of 1... * * Returns: */ int p7_pli_ExtendAndMergeWindows (P7_OPROFILE *om, const P7_SCOREDATA *data, P7_HMM_WINDOWLIST *windowlist, float pct_overlap) { int i; P7_HMM_WINDOW *prev_window = NULL; P7_HMM_WINDOW *curr_window = NULL; int64_t window_start; int64_t window_end; int32_t window_len; int64_t tmp; int new_hit_cnt = 0; if (windowlist->count == 0) return eslOK; /* extend windows */ for (i=0; icount; i++) { curr_window = windowlist->windows+i; if ( curr_window->complementarity == p7_COMPLEMENT) { //flip for complement (then flip back), so the min and max bounds allow for appropriate overlap into neighboring segments in a multi-segment FM sequence curr_window->n = curr_window->target_len - curr_window->n + 1; window_start = ESL_MAX( 1 , curr_window->n - curr_window->length - (om->max_length * (0.1 + data->suffix_lengths[curr_window->k] ) ) ) ; window_end = ESL_MIN( curr_window->target_len, curr_window->n + (om->max_length * (0.1 + data->prefix_lengths[curr_window->k - curr_window->length + 1] )) ) ; tmp = window_end; window_end = curr_window->target_len - window_start; // + 1; window_start = curr_window->target_len - tmp ; //+ 1; curr_window->n = curr_window->target_len - curr_window->n + 1; } else { // the 0.1 multiplier provides for a small buffer in excess of the predefined prefix/suffix lengths - one proportional to max_length window_start = ESL_MAX( 1 , curr_window->n - (om->max_length * (0.1 + data->prefix_lengths[curr_window->k - curr_window->length + 1] )) ) ; window_end = ESL_MIN( curr_window->target_len, curr_window->n + curr_window->length + (om->max_length * (0.1 + data->suffix_lengths[curr_window->k] ) ) ) ; } curr_window->length = window_end - window_start + 1; curr_window->fm_n -= (curr_window->n - window_start); curr_window->n = window_start; } /* merge overlapping windows, compressing list in place. */ for (i=1; icount; i++) { prev_window = windowlist->windows+new_hit_cnt; curr_window = windowlist->windows+i; window_start = ESL_MAX(prev_window->n, curr_window->n); window_end = ESL_MIN(prev_window->n+prev_window->length-1, curr_window->n+curr_window->length-1); window_len = window_end - window_start + 1; if ( prev_window->complementarity == curr_window->complementarity && prev_window->id == curr_window->id && (float)(window_len)/ESL_MIN(prev_window->length, curr_window->length) > pct_overlap // && //curr_window->n + curr_window->length >= prev_window->n + prev_window->length ) { //merge windows window_start = ESL_MIN(prev_window->n, curr_window->n); window_end = ESL_MAX(prev_window->n+prev_window->length-1, curr_window->n+curr_window->length-1); prev_window->fm_n -= (prev_window->n - window_start); prev_window->n = window_start; prev_window->length = window_end - window_start + 1; } else { new_hit_cnt++; windowlist->windows[new_hit_cnt] = windowlist->windows[i]; } } windowlist->count = new_hit_cnt+1; return eslOK; } /* Function: p7_pli_TargetReportable * Synopsis: Returns TRUE if target score meets reporting threshold. * * Purpose: Returns if the bit score and/or * log P-value meet per-target reporting thresholds * for the processing pipeline. */ int p7_pli_TargetReportable(P7_PIPELINE *pli, float score, double lnP) { if ( pli->by_E ) { if ( !pli->long_targets && exp(lnP) * pli->Z <= pli->E) return TRUE; if ( pli->long_targets && exp(lnP) <= pli->E) return TRUE; // database size is already built into the Pval if pli->targetlength == p7_TARGET_LONG } else if (! pli->by_E && score >= pli->T) return TRUE; return FALSE; } /* Function: p7_pli_DomainReportable * Synopsis: Returns TRUE if domain score meets reporting threshold. * * Purpose: Returns if the bit score and/or * log P-value meet per-domain reporting thresholds * for the processing pipeline. */ int p7_pli_DomainReportable(P7_PIPELINE *pli, float dom_score, double lnP) { if ( pli->dom_by_E ) { if ( !pli->long_targets && exp(lnP) * pli->domZ <= pli->domE) return TRUE; if ( pli->long_targets && exp(lnP) <= pli->domE) return TRUE; } else if (! pli->dom_by_E && dom_score >= pli->domT) return TRUE; return FALSE; } /* Function: p7_pli_TargetIncludable() * Synopsis: Returns TRUE if target score meets inclusion threshold. */ int p7_pli_TargetIncludable(P7_PIPELINE *pli, float score, double lnP) { if ( pli->inc_by_E ) { if ( !pli->long_targets && exp(lnP) * pli->Z <= pli->incE) return TRUE; if ( pli->long_targets && exp(lnP) <= pli->incE) return TRUE; } else if (! pli->inc_by_E && score >= pli->incT) return TRUE; return FALSE; } /* Function: p7_pli_DomainIncludable() * Synopsis: Returns TRUE if domain score meets inclusion threshold. */ int p7_pli_DomainIncludable(P7_PIPELINE *pli, float dom_score, double lnP) { if ( pli->incdom_by_E && exp(lnP) * pli->domZ <= pli->incdomE) return TRUE; else if (! pli->incdom_by_E && dom_score >= pli->incdomT) return TRUE; else return FALSE; } /* Function: p7_pli_NewModel() * Synopsis: Prepare pipeline for a new model (target or query) * * Purpose: Caller has a new model . Prepare the pipeline * to receive this model as either a query or a target. * * If the "experimental" bias filter HMM is in use, this * call resets it to use the new model's composition. This * overwrites the bias filter HMM's expected length! You * need to call after a call. * (Failure to do this is bug #h85, 14 Dec 10.) * * The pipeline may alter the null model in a model-specific * way (if we're using a composition bias filter HMM in the * pipeline). * * Returns: on success. * * if pipeline expects to be able to use a * model's bit score thresholds, but this model does not * have the appropriate ones set. */ int p7_pli_NewModel(P7_PIPELINE *pli, const P7_OPROFILE *om, P7_BG *bg) { int status = eslOK; pli->nmodels++; pli->nnodes += om->M; if (pli->Z_setby == p7_ZSETBY_NTARGETS && pli->mode == p7_SCAN_MODELS) pli->Z = pli->nmodels; if (pli->do_biasfilter) p7_bg_SetFilter(bg, om->M, om->compo); if (pli->mode == p7_SEARCH_SEQS) status = p7_pli_NewModelThresholds(pli, om); pli->W = om->max_length; return status; } /* Function: p7_pli_NewModelThresholds() * Synopsis: Set reporting and inclusion bit score thresholds on a new model. * * Purpose: Set the bit score thresholds on a new model, if we're * using Pfam GA, TC, or NC cutoffs for reporting or * inclusion. * * In a "search" pipeline, this only needs to be done once * per query model, so gets * called by . * * In a "scan" pipeline, this needs to be called for each * model, and it needs to be called after * , because that's when the bit * score thresholds get read. * * Returns: on success. * * if pipeline expects to be able to use a * model's bit score thresholds, but this model does not * have the appropriate ones set. * * Xref: Written to fix bug #h60. */ int p7_pli_NewModelThresholds(P7_PIPELINE *pli, const P7_OPROFILE *om) { if (pli->use_bit_cutoffs) { if (pli->use_bit_cutoffs == p7H_GA) { if (om->cutoff[p7_GA1] == p7_CUTOFF_UNSET) ESL_FAIL(eslEINVAL, pli->errbuf, "GA bit thresholds unavailable on model %s\n", om->name); pli->T = pli->incT = om->cutoff[p7_GA1]; pli->domT = pli->incdomT = om->cutoff[p7_GA2]; } else if (pli->use_bit_cutoffs == p7H_TC) { if (om->cutoff[p7_TC1] == p7_CUTOFF_UNSET) ESL_FAIL(eslEINVAL, pli->errbuf, "TC bit thresholds unavailable on model %s\n", om->name); pli->T = pli->incT = om->cutoff[p7_TC1]; pli->domT = pli->incdomT = om->cutoff[p7_TC2]; } else if (pli->use_bit_cutoffs == p7H_NC) { if (om->cutoff[p7_NC1] == p7_CUTOFF_UNSET) ESL_FAIL(eslEINVAL, pli->errbuf, "NC bit thresholds unavailable on model %s\n", om->name); pli->T = pli->incT = om->cutoff[p7_NC1]; pli->domT = pli->incdomT = om->cutoff[p7_NC2]; } } return eslOK; } /* Function: p7_pli_NewSeq() * Synopsis: Prepare pipeline for a new sequence (target or query) * * Purpose: Caller has a new sequence . Prepare the pipeline * to receive this model as either a query or a target. * * Returns: on success. */ int p7_pli_NewSeq(P7_PIPELINE *pli, const ESL_SQ *sq) { if (!pli->long_targets) pli->nseqs++; // if long_targets, sequence counting happens in the serial loop, which can track multiple windows for a single long sequence pli->nres += sq->n; if (pli->Z_setby == p7_ZSETBY_NTARGETS && pli->mode == p7_SEARCH_SEQS) pli->Z = pli->nseqs; return eslOK; } /* Function: p7_pipeline_Merge() * Synopsis: Merge the pipeline statistics * * Purpose: Caller has a new model . Prepare the pipeline * to receive this model as either a query or a target. * * The pipeline may alter the null model in a model-specific * way (if we're using a composition bias filter HMM in the * pipeline). * * Returns: on success. * * if pipeline expects to be able to use a * model's bit score thresholds, but this model does not * have the appropriate ones set. */ int p7_pipeline_Merge(P7_PIPELINE *p1, P7_PIPELINE *p2) { /* if we are searching a sequence database, we need to keep track of the * number of sequences and residues processed. */ if (p1->mode == p7_SEARCH_SEQS) { p1->nseqs += p2->nseqs; p1->nres += p2->nres; } else { p1->nmodels += p2->nmodels; p1->nnodes += p2->nnodes; } p1->n_past_msv += p2->n_past_msv; p1->n_past_bias += p2->n_past_bias; p1->n_past_vit += p2->n_past_vit; p1->n_past_fwd += p2->n_past_fwd; p1->n_output += p2->n_output; p1->pos_past_msv += p2->pos_past_msv; p1->pos_past_bias += p2->pos_past_bias; p1->pos_past_vit += p2->pos_past_vit; p1->pos_past_fwd += p2->pos_past_fwd; p1->pos_output += p2->pos_output; if (p1->Z_setby == p7_ZSETBY_NTARGETS) { p1->Z += (p1->mode == p7_SCAN_MODELS) ? p2->nmodels : p2->nseqs; } else { p1->Z = p2->Z; } return eslOK; } /* Function: p7_Pipeline() * Synopsis: HMMER3's accelerated seq/profile comparison pipeline. * * Purpose: Run H3's accelerated pipeline to compare profile * against sequence . If a significant hit is found, * information about it is added to the . The pipeline * accumulates beancounting information about how many comparisons * flow through the pipeline while it's active. * * Returns: on success. If a significant hit is obtained, * its information is added to the growing . * * if (in a scan pipeline) we're supposed to * set GA/TC/NC bit score thresholds but the model doesn't * have any. * * on numerical overflow errors in the * optimized vector implementations; particularly in * posterior decoding. I don't believe this is possible for * multihit local models, but I'm set up to catch it * anyway. We may emit a warning to the user, but cleanly * skip the problematic sequence and continue. * * Throws: on allocation failure. * * Xref: J4/25. */ int p7_Pipeline(P7_PIPELINE *pli, P7_OPROFILE *om, P7_BG *bg, const ESL_SQ *sq, P7_TOPHITS *hitlist) { P7_HIT *hit = NULL; /* ptr to the current hit output data */ float usc, vfsc, fwdsc; /* filter scores */ float filtersc; /* HMM null filter score */ float nullsc; /* null model score */ float seqbias; float seq_score; /* the corrected per-seq bit score */ float sum_score; /* the corrected reconstruction score for the seq */ float pre_score, pre2_score; /* uncorrected bit scores for seq */ double P; /* P-value of a hit */ double lnP; /* log P-value of a hit */ int Ld; /* # of residues in envelopes */ int d; int status; if (sq->n == 0) return eslOK; /* silently skip length 0 seqs; they'd cause us all sorts of weird problems */ p7_omx_GrowTo(pli->oxf, om->M, 0, sq->n); /* expand the one-row omx if needed */ /* Base null model score (we could calculate this in NewSeq(), for a scan pipeline) */ p7_bg_NullOne (bg, sq->dsq, sq->n, &nullsc); /* First level filter: the MSV filter, multihit with */ p7_MSVFilter(sq->dsq, sq->n, om, pli->oxf, &usc); seq_score = (usc - nullsc) / eslCONST_LOG2; P = esl_gumbel_surv(seq_score, om->evparam[p7_MMU], om->evparam[p7_MLAMBDA]); if (P > pli->F1) return eslOK; pli->n_past_msv++; /* biased composition HMM filtering */ if (pli->do_biasfilter) { p7_bg_FilterScore(bg, sq->dsq, sq->n, &filtersc); seq_score = (usc - filtersc) / eslCONST_LOG2; P = esl_gumbel_surv(seq_score, om->evparam[p7_MMU], om->evparam[p7_MLAMBDA]); if (P > pli->F1) return eslOK; } else filtersc = nullsc; pli->n_past_bias++; /* In scan mode, if it passes the MSV filter, read the rest of the profile */ if (pli->mode == p7_SCAN_MODELS) { if (pli->hfp) p7_oprofile_ReadRest(pli->hfp, om); p7_oprofile_ReconfigRestLength(om, sq->n); if ((status = p7_pli_NewModelThresholds(pli, om)) != eslOK) return status; /* pli->errbuf has err msg set */ } /* Second level filter: ViterbiFilter(), multihit with */ if (P > pli->F2) { p7_ViterbiFilter(sq->dsq, sq->n, om, pli->oxf, &vfsc); seq_score = (vfsc-filtersc) / eslCONST_LOG2; P = esl_gumbel_surv(seq_score, om->evparam[p7_VMU], om->evparam[p7_VLAMBDA]); if (P > pli->F2) return eslOK; } pli->n_past_vit++; /* Parse it with Forward and obtain its real Forward score. */ p7_ForwardParser(sq->dsq, sq->n, om, pli->oxf, &fwdsc); seq_score = (fwdsc-filtersc) / eslCONST_LOG2; P = esl_exp_surv(seq_score, om->evparam[p7_FTAU], om->evparam[p7_FLAMBDA]); if (P > pli->F3) return eslOK; pli->n_past_fwd++; /* ok, it's for real. Now a Backwards parser pass, and hand it to domain definition workflow */ p7_omx_GrowTo(pli->oxb, om->M, 0, sq->n); p7_BackwardParser(sq->dsq, sq->n, om, pli->oxf, pli->oxb, NULL); status = p7_domaindef_ByPosteriorHeuristics(sq, om, pli->oxf, pli->oxb, pli->fwd, pli->bck, pli->ddef, bg, FALSE, NULL, NULL, NULL); if (status != eslOK) ESL_FAIL(status, pli->errbuf, "domain definition workflow failure"); /* eslERANGE can happen */ if (pli->ddef->nregions == 0) return eslOK; /* score passed threshold but there's no discrete domains here */ if (pli->ddef->nenvelopes == 0) return eslOK; /* rarer: region was found, stochastic clustered, no envelopes found */ /* Calculate the null2-corrected per-seq score */ if (pli->do_null2) { seqbias = esl_vec_FSum(pli->ddef->n2sc, sq->n+1); seqbias = p7_FLogsum(0.0, log(bg->omega) + seqbias); } else seqbias = 0.0; pre_score = (fwdsc - nullsc) / eslCONST_LOG2; seq_score = (fwdsc - (nullsc + seqbias)) / eslCONST_LOG2; /* Calculate the "reconstruction score": estimated * per-sequence score as sum of individual domains, * discounting domains that aren't significant after they're * null-corrected. */ sum_score = 0.0f; seqbias = 0.0f; Ld = 0; if (pli->do_null2) { for (d = 0; d < pli->ddef->ndom; d++) { if (pli->ddef->dcl[d].envsc - pli->ddef->dcl[d].domcorrection > 0.0) { sum_score += pli->ddef->dcl[d].envsc; /* NATS */ Ld += pli->ddef->dcl[d].jenv - pli->ddef->dcl[d].ienv + 1; seqbias += pli->ddef->dcl[d].domcorrection; /* NATS */ } } seqbias = p7_FLogsum(0.0, log(bg->omega) + seqbias); /* NATS */ } else { for (d = 0; d < pli->ddef->ndom; d++) { if (pli->ddef->dcl[d].envsc > 0.0) { sum_score += pli->ddef->dcl[d].envsc; /* NATS */ Ld += pli->ddef->dcl[d].jenv - pli->ddef->dcl[d].ienv + 1; } } seqbias = 0.0; } sum_score += (sq->n-Ld) * log((float) sq->n / (float) (sq->n+3)); /* NATS */ pre2_score = (sum_score - nullsc) / eslCONST_LOG2; /* BITS */ sum_score = (sum_score - (nullsc + seqbias)) / eslCONST_LOG2; /* BITS */ /* A special case: let sum_score override the seq_score when it's better, and it includes at least 1 domain */ if (Ld > 0 && sum_score > seq_score) { seq_score = sum_score; pre_score = pre2_score; } /* Apply thresholding and determine whether to put this * target into the hit list. E-value thresholding may * only be a lower bound for now, so this list may be longer * than eventually reported. */ lnP = esl_exp_logsurv (seq_score, om->evparam[p7_FTAU], om->evparam[p7_FLAMBDA]); if (p7_pli_TargetReportable(pli, seq_score, lnP)) { p7_tophits_CreateNextHit(hitlist, &hit); if (pli->mode == p7_SEARCH_SEQS) { if ( (status = esl_strdup(sq->name, -1, &(hit->name))) != eslOK) ESL_EXCEPTION(eslEMEM, "allocation failure"); if (sq->acc[0] != '\0' && (status = esl_strdup(sq->acc, -1, &(hit->acc))) != eslOK) ESL_EXCEPTION(eslEMEM, "allocation failure"); if (sq->desc[0] != '\0' && (status = esl_strdup(sq->desc, -1, &(hit->desc))) != eslOK) ESL_EXCEPTION(eslEMEM, "allocation failure"); } else { if ((status = esl_strdup(om->name, -1, &(hit->name))) != eslOK) esl_fatal("allocation failure"); if ((status = esl_strdup(om->acc, -1, &(hit->acc))) != eslOK) esl_fatal("allocation failure"); if ((status = esl_strdup(om->desc, -1, &(hit->desc))) != eslOK) esl_fatal("allocation failure"); } hit->ndom = pli->ddef->ndom; hit->nexpected = pli->ddef->nexpected; hit->nregions = pli->ddef->nregions; hit->nclustered = pli->ddef->nclustered; hit->noverlaps = pli->ddef->noverlaps; hit->nenvelopes = pli->ddef->nenvelopes; hit->pre_score = pre_score; /* BITS */ hit->pre_lnP = esl_exp_logsurv (hit->pre_score, om->evparam[p7_FTAU], om->evparam[p7_FLAMBDA]); hit->score = seq_score; /* BITS */ hit->lnP = lnP; hit->sortkey = pli->inc_by_E ? -lnP : seq_score; /* per-seq output sorts on bit score if inclusion is by score */ hit->sum_score = sum_score; /* BITS */ hit->sum_lnP = esl_exp_logsurv (hit->sum_score, om->evparam[p7_FTAU], om->evparam[p7_FLAMBDA]); /* Transfer all domain coordinates (unthresholded for * now) with their alignment displays to the hit list, * associated with the sequence. Domain reporting will * be thresholded after complete hit list is collected, * because we probably need to know # of significant * hits found to set domZ, and thence threshold and * count reported domains. */ hit->dcl = pli->ddef->dcl; pli->ddef->dcl = NULL; hit->best_domain = 0; for (d = 0; d < hit->ndom; d++) { Ld = hit->dcl[d].jenv - hit->dcl[d].ienv + 1; hit->dcl[d].bitscore = hit->dcl[d].envsc + (sq->n-Ld) * log((float) sq->n / (float) (sq->n+3)); /* NATS, for the moment... */ hit->dcl[d].dombias = (pli->do_null2 ? p7_FLogsum(0.0, log(bg->omega) + hit->dcl[d].domcorrection) : 0.0); /* NATS, and will stay so */ hit->dcl[d].bitscore = (hit->dcl[d].bitscore - (nullsc + hit->dcl[d].dombias)) / eslCONST_LOG2; /* now BITS, as it should be */ hit->dcl[d].lnP = esl_exp_logsurv (hit->dcl[d].bitscore, om->evparam[p7_FTAU], om->evparam[p7_FLAMBDA]); if (hit->dcl[d].bitscore > hit->dcl[hit->best_domain].bitscore) hit->best_domain = d; } /* If we're using model-specific bit score thresholds (GA | TC | * NC) and we're in an hmmscan pipeline (mode = p7_SCAN_MODELS), * then we *must* apply those reporting or inclusion thresholds * now, because this model is about to go away; we won't have * its thresholds after all targets have been processed. * * If we're using E-value thresholds and we don't know the * search space size (Z_setby or domZ_setby = * p7_ZSETBY_NTARGETS), we *cannot* apply those thresholds now, * and we *must* wait until all targets have been processed * (see p7_tophits_Threshold()). * * For any other thresholding, it doesn't matter whether we do * it here (model-specifically) or at the end (in * p7_tophits_Threshold()). * * What we actually do, then, is to set the flags if we're using * model-specific score thresholds (regardless of whether we're * in a scan or a search pipeline); otherwise we leave it to * p7_tophits_Threshold(). p7_tophits_Threshold() is always * responsible for *counting* the reported, included sequences. * * [xref J5/92] */ if (pli->use_bit_cutoffs) { if (p7_pli_TargetReportable(pli, hit->score, hit->lnP)) { hit->flags |= p7_IS_REPORTED; if (p7_pli_TargetIncludable(pli, hit->score, hit->lnP)) hit->flags |= p7_IS_INCLUDED; } for (d = 0; d < hit->ndom; d++) { if (p7_pli_DomainReportable(pli, hit->dcl[d].bitscore, hit->dcl[d].lnP)) { hit->dcl[d].is_reported = TRUE; if (p7_pli_DomainIncludable(pli, hit->dcl[d].bitscore, hit->dcl[d].lnP)) hit->dcl[d].is_included = TRUE; } } } } return eslOK; } /* Function: p7_pli_computeAliScores() * Synopsis: Compute per-position scores for the alignment for a domain * * Purpose: Compute per-position (Viterbi) scores for the alignment for a domain, * for the purpose of optionally printing these scores out in association * with each alignment. Such scores can, for example, be used to detangle * overlapping alignments (from different models) * * Args: dom - domain with the alignment for which we wish to compute scores * seq - sequence in which domain resides * data - contains model's emission and transition values in unstriped form * K - alphabet size * * Returns: on success. * * Throws: on allocation failure. */ static int p7_pli_computeAliScores(P7_DOMAIN *dom, ESL_DSQ *seq, const P7_SCOREDATA *data, int K) { int status; int i, j, k; float sc; //Compute score contribution of each position in the alignment to the overall Viterbi score ESL_ALLOC( dom->scores_per_pos, sizeof(float) * dom->ad->N ); for (i=0; iad->N; i++) dom->scores_per_pos[i] = 0.0; i = dom->iali - 1; //sequence position j = dom->ad->hmmfrom - 1; //model position k = 0; while ( kad->N) { if (dom->ad->model[k] != '.' && dom->ad->aseq[k] != '-') { //match i++; j++; // Including the MM cost is a hack. The cost of getting to/from this match // state does matter, but an IM or DM transition would improperly deflate // the score of this column, so just give MM. That amount is offset out of // the score shown for preceding indels dom->scores_per_pos[k] = data->fwd_scores[K * j + seq[i]] + (j==1 ? 0 : log(data->fwd_transitions[p7O_MM][j]) ); k++; } else if (dom->ad->model[k] == '.' ) { // insert //spin through the insert, accumulating cost; only assign to final column in gap dom->scores_per_pos[k] = -eslINFINITY; sc = log(data->fwd_transitions[p7O_MI][j]); i++; k++; while (kad->N && dom->ad->model[k] == '.') { //extend insert dom->scores_per_pos[k] = -eslINFINITY; sc += log(data->fwd_transitions[p7O_II][j]); i++; k++; } sc += log(data->fwd_transitions[p7O_IM][j+1]) - log(data->fwd_transitions[p7O_MM][j+1]); dom->scores_per_pos[k-1] = sc; } else if (dom->ad->aseq[k] == '-' ) { // delete dom->scores_per_pos[k] = -eslINFINITY; sc = log(data->fwd_transitions[p7O_MD][j]); j++; k++; while (kad->N && dom->ad->aseq[k] == '-') { //extend delete dom->scores_per_pos[k] = -eslINFINITY; sc += log(data->fwd_transitions[p7O_DD][j]); j++; k++; } sc += log(data->fwd_transitions[p7O_DM][j+1]) - log(data->fwd_transitions[p7O_MM][j+1]); dom->scores_per_pos[k-1] = sc; } } return eslOK; ERROR: return eslEMEM; } /* Function: p7_pli_postViterbi_LongTarget() * Synopsis: the part of the LongTarget P7 search Pipeline downstream * of the Viterbi filter * * Purpose: This is called by postMSV_LongTarget(), and runs the * post-Viterbi part of HMMER's accelerated pipeline to * compare profile against sequence . If a * significant hit is found, information about it is * added to the . * The pipeline accumulates beancounting information * about how many comparisons (and residues) flow through * the pipeline while it's active. * * Args: pli - the main pipeline object * om - optimized profile (query) * bg - background model * hitlist - pointer to hit storage bin * data - for computing windows based on maximum prefix/suffix extensions * seqidx - the id # of the sequence from which the current window was extracted * window_start - the starting position of the extracted window (offset from the first * position of the block of a possibly longer sequence) * window_len - the length of the extracted window * subseq - digital sequence of the extracted window * seq_start - first position of the sequence block passed in to the calling pipeline function * seq_name - name of the sequence the window comes from * seq_source - source of the sequence the window comes from * seq_acc - acc of the sequence the window comes from * seq_desc - desc of the sequence the window comes from * seq_len - length of the sequence the window comes from (Available from FM; otherwise 0 and to be ignored) * complementarity - boolean; is the passed window sourced from a complementary sequence block * overlap - number of residues in this sequence window that overlap a preceding window. * pli_tmp - a collection of objects used in the long target pipeline that should be * (and are) only allocated once per pipeline to minimize alloc overhead. * Returns: on success. If a significant hit is obtained, * its information is added to the growing . * * on numerical overflow errors in the * optimized vector implementations; particularly in * posterior decoding. I don't believe this is possible for * multihit local models, but I'm set up to catch it * anyway. We may emit a warning to the user, but cleanly * skip the problematic sequence and continue. * * Throws: on allocation failure. * */ static int p7_pli_postViterbi_LongTarget(P7_PIPELINE *pli, P7_OPROFILE *om, P7_BG *bg, P7_TOPHITS *hitlist, const P7_SCOREDATA *data, int64_t seqidx, int window_start, int window_len, ESL_DSQ *subseq, int seq_start, char *seq_name, char *seq_source, char* seq_acc, char* seq_desc, int seq_len, int complementarity, int *overlap, P7_PIPELINE_LONGTARGET_OBJS *pli_tmp ) { P7_DOMAIN *dom = NULL; /* convenience variable, ptr to current domain */ P7_HIT *hit = NULL; /* ptr to the current hit output data */ float fwdsc; /* filter scores */ float nullsc; float filtersc; /* HMM null filter score */ float bias_filtersc; /* HMM null filter score */ float seq_score; /* the corrected per-seq bit score */ double P; /* P-value of a hit */ int d; int status; // int nres; ESL_DSQ *dsq_holder; int env_len; int ali_len; float bitscore; float dom_bias; float dom_score; double dom_lnP; int F3_L = ESL_MIN( window_len, pli->B3); p7_bg_SetLength(bg, window_len); p7_bg_NullOne (bg, subseq, window_len, &nullsc); if (pli->do_biasfilter) { p7_bg_FilterScore(bg, subseq, window_len, &bias_filtersc); bias_filtersc -= nullsc; //remove nullsc, so bias scaling can be done, then add it back on later } else { bias_filtersc = 0; } p7_oprofile_ReconfigRestLength(om, window_len); /* Parse with Forward and obtain its real Forward score. */ p7_ForwardParser(subseq, window_len, om, pli->oxf, &fwdsc); filtersc = nullsc + (bias_filtersc * ( F3_L>window_len ? 1.0 : (float)F3_L/window_len) ); seq_score = (fwdsc - filtersc) / eslCONST_LOG2; P = esl_exp_surv(seq_score, om->evparam[p7_FTAU], om->evparam[p7_FLAMBDA]); if (P > pli->F3 ) return eslOK; pli->pos_past_fwd += window_len - *overlap; *overlap = -1; // overload variable to tell calling function that this window passed fwd /*now that almost everything has been filtered away, set up seq object for domaindef function*/ if ((status = esl_sq_SetName (pli_tmp->tmpseq, seq_name)) != eslOK) goto ERROR; if ((status = esl_sq_SetSource (pli_tmp->tmpseq, seq_source)) != eslOK) goto ERROR; if ((status = esl_sq_SetAccession(pli_tmp->tmpseq, seq_acc)) != eslOK) goto ERROR; if ((status = esl_sq_SetDesc (pli_tmp->tmpseq, seq_desc)) != eslOK) goto ERROR; pli_tmp->tmpseq->L = seq_len; pli_tmp->tmpseq->n = window_len; dsq_holder = pli_tmp->tmpseq->dsq; // will point back to the original at the end pli_tmp->tmpseq->dsq = subseq; /* Now a Backwards parser pass, and hand it to domain definition workflow * In this case "domains" will end up being translated as independent "hits" */ p7_omx_GrowTo(pli->oxb, om->M, 0, window_len); p7_BackwardParser(subseq, window_len, om, pli->oxf, pli->oxb, NULL); //if we're asked to not do null correction, pass a NULL instead of a temp scores variable - domaindef knows what to do status = p7_domaindef_ByPosteriorHeuristics(pli_tmp->tmpseq, om, pli->oxf, pli->oxb, pli->fwd, pli->bck, pli->ddef, bg, TRUE, pli_tmp->bg, (pli->do_null2?pli_tmp->scores:NULL), pli_tmp->fwd_emissions_arr); pli_tmp->tmpseq->dsq = dsq_holder; if (status != eslOK) ESL_FAIL(status, pli->errbuf, "domain definition workflow failure"); /* eslERANGE can happen */ if (pli->ddef->nregions == 0) return eslOK; /* score passed threshold but there's no discrete domains here */ if (pli->ddef->nenvelopes == 0) return eslOK; /* rarer: region was found, stochastic clustered, no envelopes found */ /* Put these hits ("domains") into the hit list. * * Modified original pipeline to create a single hit for each * domain, so the remainder of the typical-case hit-merging * process can remain mostly intact. * * Some of them may not pass eventual E-value thresholds. In * protein context, these would be reported as supplementary * data (domains contributing to a full-sequence score), but * in nhmmer context, they'll just get thrown away later, so * drop them now, if possible. */ for (d = 0; d < pli->ddef->ndom; d++) { dom = pli->ddef->dcl + d; //adjust the score of a hit to account for the full length model - the characters outside the envelope but in the window env_len = dom->jenv - dom->ienv + 1; ali_len = dom->jali - dom->iali + 1; bitscore = dom->envsc ; if (ali_len < 8) { p7_alidisplay_Destroy(dom->ad); continue; // anything less than this is a funny byproduct of the Forward score passing a very low threshold, but no reliable alignment existing that supports it } /* note: this bitscore was computed under a model with length of * env_len (jenv-ienv+1). Here, the score is modified (reduced) by * treating the hit as though it came from a window of length * om->max_length. To do this: */ // (1) the entrance/exit costs are shifted from env_len to max_length: bitscore -= 2 * log(2. / (env_len+2)) ; bitscore += 2 * log(2. / (om->max_length+2)) ; // (2) the extension cost for going from ali bounds to env bounds is removed, // and replaced with the cost of going from ali bounds to max length (or env // bounds in the extremely rare case that the env_len is actually larger than om->max_length). bitscore -= (env_len-ali_len) * log((float)env_len / (env_len+2)); bitscore += (ESL_MAX(om->max_length, env_len) - ali_len) * log((float)om->max_length / (float) (om->max_length+2)); /* Compute scores used to decide if we should keep this "domain" as a hit. * Note that the bias correction was captured in dom->domcorrection during * the p7_domaindef_ByPosteriorHeuristics() call. */ dom_bias = dom->domcorrection; p7_bg_SetLength(bg, ESL_MAX(om->max_length, env_len)); p7_bg_NullOne (bg, subseq, ESL_MAX(om->max_length, env_len), &nullsc); dom_score = (bitscore - (nullsc)) / eslCONST_LOG2; dom_lnP = esl_exp_logsurv(dom_score, om->evparam[p7_FTAU], om->evparam[p7_FLAMBDA]); if (pli->do_alignment_score_calc) p7_pli_computeAliScores(dom, subseq, data, om->abc->Kp); p7_tophits_CreateNextHit(hitlist, &hit); hit->ndom = 1; hit->best_domain = 0; hit->window_length = om->max_length; hit->seqidx = seqidx; hit->subseq_start = seq_start; ESL_ALLOC(hit->dcl, sizeof(P7_DOMAIN) ); hit->dcl[0] = pli->ddef->dcl[d]; hit->dcl[0].ad->L = seq_len; // compute the real positions within the sequence handed to the pipeline if (complementarity == p7_NOCOMPLEMENT) { hit->dcl[0].ienv += seq_start + window_start - 2; hit->dcl[0].jenv += seq_start + window_start - 2; hit->dcl[0].iali += seq_start + window_start - 2; hit->dcl[0].jali += seq_start + window_start - 2; hit->dcl[0].ad->sqfrom += seq_start + window_start - 2; hit->dcl[0].ad->sqto += seq_start + window_start - 2; } else { hit->dcl[0].ienv = seq_start - (window_start + hit->dcl[0].ienv) + 2; hit->dcl[0].jenv = seq_start - (window_start + hit->dcl[0].jenv) + 2; hit->dcl[0].iali = seq_start - (window_start + hit->dcl[0].iali) + 2; hit->dcl[0].jali = seq_start - (window_start + hit->dcl[0].jali) + 2; hit->dcl[0].ad->sqfrom = seq_start - (window_start + hit->dcl[0].ad->sqfrom) + 2; hit->dcl[0].ad->sqto = seq_start - (window_start + hit->dcl[0].ad->sqto) + 2; } hit->pre_score = bitscore / eslCONST_LOG2; hit->pre_lnP = esl_exp_logsurv (hit->pre_score, om->evparam[p7_FTAU], om->evparam[p7_FLAMBDA]); hit->dcl[0].dombias = dom_bias; hit->sum_score = hit->score = hit->dcl[0].bitscore = dom_score; hit->sum_lnP = hit->lnP = hit->dcl[0].lnP = dom_lnP; if (pli->mode == p7_SEARCH_SEQS) { if ( (status = esl_strdup(seq_name, -1, &(hit->name))) != eslOK) ESL_EXCEPTION(eslEMEM, "allocation failure"); if (seq_acc[0] != '\0' && (status = esl_strdup(seq_acc, -1, &(hit->acc))) != eslOK) ESL_EXCEPTION(eslEMEM, "allocation failure"); if (seq_desc[0] != '\0' && (status = esl_strdup(seq_desc, -1, &(hit->desc))) != eslOK) ESL_EXCEPTION(eslEMEM, "allocation failure"); } else { if ((status = esl_strdup(om->name, -1, &(hit->name))) != eslOK) esl_fatal("allocation failure"); if ((status = esl_strdup(om->acc, -1, &(hit->acc))) != eslOK) esl_fatal("allocation failure"); if ((status = esl_strdup(om->desc, -1, &(hit->desc))) != eslOK) esl_fatal("allocation failure"); } /* If using model-specific thresholds, filter now. See notes in front * of the analogous piece of code in p7_Pipeline() for further explanation * of timing. */ if (pli->use_bit_cutoffs) { if (p7_pli_TargetReportable(pli, hit->score, hit->lnP)) { hit->flags |= p7_IS_REPORTED; if (p7_pli_TargetIncludable(pli, hit->score, hit->lnP)) hit->flags |= p7_IS_INCLUDED; } if (p7_pli_DomainReportable(pli, hit->dcl[0].bitscore, hit->dcl[0].lnP)) { hit->dcl[0].is_reported = TRUE; if (p7_pli_DomainIncludable(pli, hit->dcl[0].bitscore, hit->dcl[0].lnP)) hit->dcl[0].is_included = TRUE; } } } return eslOK; ERROR: ESL_EXCEPTION(eslEMEM, "Error in LongTarget pipeline\n"); } /* Function: p7_pli_postSSV_LongTarget() * Synopsis: the part of the LongTarget P7 search Pipeline downstream * of the SSV filter * * Purpose: This is called by either the standard (SIMD-SSV) long-target * pipeline (p7_Pipeline_LongTarget) or the FM-index long-target * pipeline (p7_Pipeline_FM), and runs the post-MSV part of H3's * accelerated pipeline to compare profile against sequence * . If a significant hit is found (within the function * p7_pipeline_postViterbi_LongTarget(), called in this function), * information about it is added to the . The pipeline * accumulates beancounting information about how many comparisons * and residues flow through the pipeline while it's active. * * Args: pli - the main pipeline object * om - optimized profile (query) * bg - background model * hitlist - pointer to hit storage bin * data - for computing windows based on maximum prefix/suffix extensions * seqidx - the id # of the sequence from which the current window was extracted * window_start - the starting position of the extracted window (offset from the first * position of the block of a possibly longer sequence) * window_len - the length of the extracted window * subseq - digital sequence of the extracted window * seq_start - first position of the sequence block passed in to the calling pipeline function * seq_name - name of the sequence the window comes from * seq_source - source of the sequence the window comes from * seq_acc - acc of the sequence the window comes from * seq_desc - desc of the sequence the window comes from * seq_len - length of the sequence the window comes from (only FM will have it; otherwise, 0 and ignored) * nullsc - score of the passed window vs the bg model * usc - msv score of the passed window * complementarity - boolean; is the passed window sourced from a complementary sequence block * vit_windowlist - initialized window list, in which viterbi-passing hits are captured * pli_tmp - a collection of objects used in the long target pipeline that should be * (and are) only allocated once per pipeline to minimize alloc overhead. * * Returns: on success. If a significant hit is obtained, * its information is added to the growing . * * on numerical overflow errors in the * optimized vector implementations; particularly in * posterior decoding. I don't believe this is possible for * multihit local models, but I'm set up to catch it * anyway. We may emit a warning to the user, but cleanly * skip the problematic sequence and continue. * * Throws: on allocation failure. * */ static int p7_pli_postSSV_LongTarget(P7_PIPELINE *pli, P7_OPROFILE *om, P7_BG *bg, P7_TOPHITS *hitlist, const P7_SCOREDATA *data, int64_t seqidx, uint64_t window_start, int window_len, ESL_DSQ *subseq, uint64_t seq_start, char *seq_name, char *seq_source, char* seq_acc, char* seq_desc, int seq_len, float nullsc, float usc, int complementarity, P7_HMM_WINDOWLIST *vit_windowlist, P7_PIPELINE_LONGTARGET_OBJS *pli_tmp ) { float filtersc; /* HMM null filter score */ float bias_filtersc; /* HMM null filter score */ float seq_score; /* the corrected per-seq bit score */ double P; /* P-value of a hit */ int i; int overlap; uint64_t new_n; uint32_t new_len; int loc_window_len; //used to re-parameterize to shorter target windows int max_window_len = 80000; int overlap_len = ESL_MIN(40000, om->max_length); // Won't allow more than 40K overlap - that's an absurdly long MAXL. int F1_L = ESL_MIN( window_len, pli->B1); int F2_L = ESL_MIN( window_len, pli->B2); //initial bias filter, based on the input window_len if (pli->do_biasfilter) { p7_bg_SetLength(bg, window_len); p7_bg_FilterScore(bg, subseq, window_len, &bias_filtersc); bias_filtersc -= nullsc; // doing this because I'll be modifying the bias part of filtersc based on length, then adding nullsc back in. filtersc = nullsc + (bias_filtersc * (float)(( F1_L>window_len ? 1.0 : (float)F1_L/window_len))); seq_score = (usc - filtersc) / eslCONST_LOG2; P = esl_gumbel_surv(seq_score, om->evparam[p7_MMU], om->evparam[p7_MLAMBDA]); if (P > pli->F1) return eslOK; } else { bias_filtersc = 0; // mullsc will be added in later } pli->pos_past_bias += window_len; //establish a possibly shorter target window parameterization loc_window_len = ESL_MIN(window_len,om->max_length); //compute the new nullsc based on possibly shorter window p7_bg_SetLength(bg, loc_window_len); p7_bg_NullOne (bg, subseq, loc_window_len, &nullsc); // bias_filtersc has already been reduced by nullsc based on window_len // We compute a --B2-scaled bias, then tack on the nullsc based on the new, // possibly shorter length model filtersc = nullsc + (bias_filtersc * ( F2_L>window_len ? 1.0 : (float)F2_L/window_len) ); //Then configure the model length based on the possibly shorter window length p7_oprofile_ReconfigRestLength(om, loc_window_len); /* Second level filter: ViterbiFilter(), multihit with */ p7_omx_GrowTo(pli->oxf, om->M, 0, window_len); //use window_len instead of loc_window_len, because length parameterization is done, just need to loop over subseq p7_ViterbiFilter_longtarget(subseq, window_len, om, pli->oxf, filtersc, pli->F2, vit_windowlist); p7_pli_ExtendAndMergeWindows (om, data, vit_windowlist, 0.5); // if a window is still too long (>80Kb), need to split it up to // ensure numeric stability in Fwd. for (i=0; icount; i++) { if (vit_windowlist->windows[i].length > max_window_len) { //modify the current window to restrict length to 40K, then add //new windows with max length 40K, and MAXL overlap w/ preceding window new_n = vit_windowlist->windows[i].n ; new_len = vit_windowlist->windows[i].length ; vit_windowlist->windows[i].length = max_window_len; do { int shift = max_window_len - overlap_len; new_n += shift; new_len -= shift; p7_hmmwindow_new(vit_windowlist, 0, new_n, 0, 0, ESL_MIN(max_window_len,new_len), 0.0, p7_NOCOMPLEMENT, new_len ); } while (new_len > max_window_len); } } overlap = 0; for (i=0; icount; i++) { pli->pos_past_vit += vit_windowlist->windows[i].length; //remove overlap with preceding window if (i>0) pli->pos_past_vit -= ESL_MAX(0, vit_windowlist->windows[i-1].n + vit_windowlist->windows[i-1].length - vit_windowlist->windows[i].n ); p7_pli_postViterbi_LongTarget(pli, om, bg, hitlist, data, seqidx, window_start+vit_windowlist->windows[i].n-1, vit_windowlist->windows[i].length, subseq + vit_windowlist->windows[i].n - 1, seq_start, seq_name, seq_source, seq_acc, seq_desc, seq_len, complementarity, &overlap, pli_tmp ); if (overlap == -1 && icount-1) { overlap = ESL_MAX(0, vit_windowlist->windows[i].n + vit_windowlist->windows[i].length - vit_windowlist->windows[i+1].n ); } else { //that window didn't pass Fwd overlap = 0; } pli->ddef->ndom = 0; } return eslOK; } /* Function: p7_Pipeline_LongTarget() * Synopsis: Accelerated seq/profile comparison pipeline for long target sequences. * * Purpose: Run HMMER's accelerated pipeline to compare profile * against sequence . If a significant hit is found, * information about it is added to the . This is * a variant of p7_Pipeline that runs one of two * alternative SSV filters * (1) the scanning SSV filter (p7_SSVFilter_longtarget) that scans * a long sequence and finds high-scoring regions (windows), or * (2) the FM-index-based SSV filter that finds modest-scoring * diagonals using the FM-index, and extends them to maximum- * scoring diagonals subjected to the SSV filter thresholds * * Windows passing the appropriate SSV filter are then passed * to the remainder of the pipeline. The pipeline accumulates * bean counting information about how many comparisons and * residues flow through the pipeline while it's active. * * Returns: on success. If a significant hit is obtained, * its information is added to the growing . * * if (in a scan pipeline) we're supposed to * set GA/TC/NC bit score thresholds but the model doesn't * have any. * * on numerical overflow errors in the * optimized vector implementations; particularly in * posterior decoding. We don't believe this is possible for * multihit local models, but we're set up to catch it * anyway. We may emit a warning to the user, but cleanly * skip the problematic sequence and continue. * * Args: pli - the main pipeline object * om - optimized profile (query) * data - for computing diagonals, and picking window edges based * on maximum prefix/suffix extensions * bg - background model * hitlist - pointer to hit storage bin (already allocated) * * :: the next three values are assigned if a standard sequence database is being used. If FM database is used, they are ignored * seqidx - the id # of the sequence from which the current window was extracted * sq - digital sequence of the window * complementarity - is from the top strand (p7_NOCOMPLEMENT), or bottom strand (P7_COMPLEMENT) * * :: the next three are assigned if an FM database is being used. If standard sequence is used, they are set to NULL. * fmf - the FM_DATA for forward-strand search * fmb - the FM_DATA for reverse-strand (complement) search * fm_cfg - general FM configuration * * Throws: on allocation failure. */ int p7_Pipeline_LongTarget(P7_PIPELINE *pli, P7_OPROFILE *om, P7_SCOREDATA *data, P7_BG *bg, P7_TOPHITS *hitlist, int64_t seqidx, const ESL_SQ *sq, int complementarity, const FM_DATA *fmf, const FM_DATA *fmb, FM_CFG *fm_cfg /*, ESL_STOPWATCH *ssv_watch_master , ESL_STOPWATCH *postssv_watch_master , ESL_STOPWATCH *watch_slave */ ) { int i; int status; float nullsc; /* null model score */ float usc; /* msv score */ float P; float bias_filtersc; ESL_DSQ *subseq; uint64_t seq_start; P7_HMM_WINDOWLIST msv_windowlist; P7_HMM_WINDOWLIST vit_windowlist; P7_HMM_WINDOW *window; FM_SEQDATA seq_data; P7_PIPELINE_LONGTARGET_OBJS *pli_tmp; if ((sq && (sq->n == 0)) || (fmf && (fmf->N == 0))) return eslOK; /* silently skip length 0 seqs; they'd cause us all sorts of weird problems */ ESL_ALLOC(pli_tmp, sizeof(P7_PIPELINE_LONGTARGET_OBJS)); pli_tmp->bg = p7_bg_Clone(bg); pli_tmp->om = p7_oprofile_Create(om->M, om->abc); ESL_ALLOC(pli_tmp->scores, sizeof(float) * om->abc->Kp * 4); //allocation of space to store scores that will be used in p7_oprofile_Update(Fwd|Vit|MSV)EmissionScores ESL_ALLOC(pli_tmp->fwd_emissions_arr, sizeof(float) * om->abc->Kp * (om->M+1)); msv_windowlist.windows = NULL; vit_windowlist.windows = NULL; p7_hmmwindow_init(&msv_windowlist); p7_omx_GrowTo(pli->oxf, om->M, 0, om->max_length); /* expand the one-row omx if needed */ /* Set false target length. This is a conservative estimate of the length of window that'll * soon be passed on to later phases of the pipeline; used to recover some bits of the score * that we would miss if we left length parameters set to the full target length */ p7_oprofile_ReconfigMSVLength(om, om->max_length); /* First level filter: the SSV filter, with . * This variant of SSV will scan a long sequence and find * short high-scoring regions. */ // if (watch_slave) { // esl_stopwatch_Start(watch_slave); // } if (fmf) // using an FM-index p7_SSVFM_longlarget(om, 2.0, bg, pli->F1, fmf, fmb, fm_cfg, data, pli->strands, &msv_windowlist ); else // compare directly to sequence p7_SSVFilter_longtarget(sq->dsq, sq->n, om, pli->oxf, data, bg, pli->F1, &msv_windowlist); /* if (watch_slave) { esl_stopwatch_Stop(watch_slave); esl_stopwatch_Include(ssv_watch_master, watch_slave); esl_stopwatch_Start(watch_slave); } */ /* convert hits to windows, merging neighboring windows */ if ( msv_windowlist.count > 0 ) { /* In scan mode, if it passes the MSV filter, read the rest of the profile * Not necessary for dummy mode, where the ->base_w variable checks cause compilation failure*/ #ifndef P7_IMPL_DUMMY_INCLUDED if (!fmf && pli->hfp) { if (om->base_w == 0 && om->scale_w == 0) { // we haven't already read this hmm (if we're on the second strand, we would've) p7_oprofile_ReadRest(pli->hfp, om); if ((status = p7_pli_NewModelThresholds(pli, om)) != eslOK) goto ERROR; } } #endif p7_oprofile_GetFwdEmissionArray(om, bg, pli_tmp->fwd_emissions_arr); if (data->prefix_lengths == NULL) //otherwise, already filled in p7_hmm_ScoreDataComputeRest(om, data); p7_pli_ExtendAndMergeWindows (om, data, &msv_windowlist, 0); /* If using FM, it's possible for a seed we just created to span more than one segment * in the target. Check for this, and resolve it, by trimming an over-extended * segment, and tacking it on as a new window (to be dealt with in a later pass) */ if (fmf) { for (i=0; imeta, 0, window->length, window->complementarity, window->fm_n, &seg_id, &seg_pos); if (status == eslERANGE) { int overext; int use_length; int is_compl = (window->complementarity == p7_COMPLEMENT); overext = (seg_pos + window->length) - (fm_cfg->meta->seq_data[ seg_id ].target_start + fm_cfg->meta->seq_data[ seg_id ].length - 1) ; use_length = window->length - overext + 1; if (use_length >= 8 && window->length >= 8) { // if both halves are kinda long, split the first half off as a new window p7_hmmwindow_new(&msv_windowlist, seg_id + (is_compl?-1:1), window->n, window->fm_n, window->k+use_length-1, use_length, window->score, window->complementarity, fm_cfg->meta->seq_data[seg_id].length); window = msv_windowlist.windows + i; // it may have moved due a a realloc window->k += use_length; window->length = overext; again = TRUE; } else if (window->length >= 8) { //if just the right half is long enough, shift numbers over window->k += use_length; window->length = overext; } else { //just limit the length of the left half window->length = use_length; } } } } } /* Pass each remaining window on to the remaining pipeline */ p7_hmmwindow_init(&vit_windowlist); pli_tmp->tmpseq = esl_sq_CreateDigital(om->abc); if (!fmf ) free (pli_tmp->tmpseq->dsq); //this ESL_SQ object is just a container that'll point to a series of other DSQs, so free the one we just created inside the larger SQ object for (i=0; imeta, window->fm_n, window->length, window->complementarity, pli_tmp->tmpseq, TRUE ); subseq = pli_tmp->tmpseq->dsq; } else { subseq = sq->dsq + window->n - 1; } p7_bg_SetLength(bg, window->length); p7_bg_NullOne (bg, subseq, window->length, &nullsc); p7_bg_FilterScore(bg, subseq, window->length, &bias_filtersc); // Compute standard MSV to ensure that bias doesn't overcome SSV score when MSV // would have survived it p7_oprofile_ReconfigMSVLength(om, window->length); p7_MSVFilter(subseq, window->length, om, pli->oxf, &usc); P = esl_gumbel_surv( (usc-nullsc)/eslCONST_LOG2, om->evparam[p7_MMU], om->evparam[p7_MLAMBDA]); if (P > pli->F1 ) continue; pli->pos_past_msv += window->length; if (fmf) { seq_data = fm_cfg->meta->seq_data[window->id]; seq_start = seq_data.target_start; if (window->complementarity == p7_COMPLEMENT) seq_start += seq_data.length - 2; } status = p7_pli_postSSV_LongTarget(pli, om, bg, hitlist, data, (fmf != NULL ? seq_data.target_id : seqidx), window->n, window->length, subseq, (fmf != NULL ? seq_start : sq->start), (fmf != NULL ? seq_data.name : sq->name), (fmf != NULL ? seq_data.source : sq->source), (fmf != NULL ? seq_data.acc : sq->acc), (fmf != NULL ? seq_data.desc : sq->desc), (fmf != NULL ? seq_data.length : -1), nullsc, usc, (fmf != NULL ? window->complementarity : complementarity), &vit_windowlist, pli_tmp ); if (status != eslOK) goto ERROR; } if (fmf) free (pli_tmp->tmpseq->dsq); pli_tmp->tmpseq->dsq = NULL; //it's a pointer to a dsq object belonging to another sequence esl_sq_Destroy(pli_tmp->tmpseq); free (vit_windowlist.windows); } /* if (watch_slave) { esl_stopwatch_Stop(watch_slave); esl_stopwatch_Include(postssv_watch_master, watch_slave); } */ if (msv_windowlist.windows != NULL) free (msv_windowlist.windows); if (pli_tmp != NULL) { if (pli_tmp->bg != NULL) p7_bg_Destroy(pli_tmp->bg); if (pli_tmp->om != NULL) p7_oprofile_Destroy(pli_tmp->om); if (pli_tmp->scores != NULL) free (pli_tmp->scores); if (pli_tmp->fwd_emissions_arr != NULL) free (pli_tmp->fwd_emissions_arr); free(pli_tmp); } return eslOK; ERROR: if (msv_windowlist.windows != NULL) free (msv_windowlist.windows); if (vit_windowlist.windows != NULL) free (vit_windowlist.windows); if (pli_tmp != NULL) { if (pli_tmp->tmpseq != NULL) esl_sq_Destroy(pli_tmp->tmpseq); if (pli_tmp->bg != NULL) p7_bg_Destroy(pli_tmp->bg); if (pli_tmp->om != NULL) p7_oprofile_Destroy(pli_tmp->om); if (pli_tmp->scores != NULL) free (pli_tmp->scores); if (pli_tmp->fwd_emissions_arr != NULL) free (pli_tmp->fwd_emissions_arr); free(pli_tmp); } return status; } /* Function: p7_pli_Statistics() * Synopsis: Final statistics output from a processing pipeline. * * Purpose: Print a standardized report of the internal statistics of * a finished processing pipeline to stream . * * If stopped, non- stopwatch is provided for a * stopwatch that was timing the pipeline, then the report * includes timing information. * * Returns: on success. */ int p7_pli_Statistics(FILE *ofp, P7_PIPELINE *pli, ESL_STOPWATCH *w) { double ntargets; fprintf(ofp, "Internal pipeline statistics summary:\n"); fprintf(ofp, "-------------------------------------\n"); if (pli->mode == p7_SEARCH_SEQS) { fprintf(ofp, "Query model(s): %15" PRId64 " (%" PRId64 " nodes)\n", pli->nmodels, pli->nnodes); fprintf(ofp, "Target sequences: %15" PRId64 " (%" PRId64 " residues searched)\n", pli->nseqs, pli->nres); ntargets = pli->nseqs; } else { fprintf(ofp, "Query sequence(s): %15" PRId64 " (%" PRId64 " residues searched)\n", pli->nseqs, pli->nres); fprintf(ofp, "Target model(s): %15" PRId64 " (%" PRId64 " nodes)\n", pli->nmodels, pli->nnodes); ntargets = pli->nmodels; } if (pli->long_targets) { fprintf(ofp, "Residues passing SSV filter: %15" PRId64 " (%.3g); expected (%.3g)\n", //fprintf(ofp, "Windows passing MSV filter: %15" PRId64 " (%.4g); expected (%.4g)\n", //pli->n_past_msv, pli->pos_past_msv, (double)pli->pos_past_msv / (pli->nres*pli->nmodels) , pli->F1); fprintf(ofp, "Residues passing bias filter: %15" PRId64 " (%.3g); expected (%.3g)\n", //fprintf(ofp, "Windows passing bias filter: %15" PRId64 " (%.4g); expected (%.4g)\n", //pli->n_past_bias, pli->pos_past_bias, (double)pli->pos_past_bias / (pli->nres*pli->nmodels) , pli->F1); fprintf(ofp, "Residues passing Vit filter: %15" PRId64 " (%.3g); expected (%.3g)\n", //fprintf(ofp, "Windows passing Vit filter: %15" PRId64 " (%.4g); expected (%.4g)\n", //pli->n_past_vit, pli->pos_past_vit, (double)pli->pos_past_vit / (pli->nres*pli->nmodels) , pli->F2); fprintf(ofp, "Residues passing Fwd filter: %15" PRId64 " (%.3g); expected (%.3g)\n", //fprintf(ofp, "Windows passing Fwd filter: %15" PRId64 " (%.4g); expected (%.4g)\n", //pli->n_past_fwd, pli->pos_past_fwd, (double)pli->pos_past_fwd / (pli->nres*pli->nmodels) , pli->F3); fprintf(ofp, "Total number of hits: %15d (%.3g)\n", (int)pli->n_output, (double)pli->pos_output / (pli->nres*pli->nmodels) ); } else { // typical case output fprintf(ofp, "Passed MSV filter: %15" PRId64 " (%.6g); expected %.1f (%.6g)\n", pli->n_past_msv, (double) pli->n_past_msv / ntargets, pli->F1 * ntargets, pli->F1); fprintf(ofp, "Passed bias filter: %15" PRId64 " (%.6g); expected %.1f (%.6g)\n", pli->n_past_bias, (double) pli->n_past_bias / ntargets, pli->F1 * ntargets, pli->F1); fprintf(ofp, "Passed Vit filter: %15" PRId64 " (%.6g); expected %.1f (%.6g)\n", pli->n_past_vit, (double) pli->n_past_vit / ntargets, pli->F2 * ntargets, pli->F2); fprintf(ofp, "Passed Fwd filter: %15" PRId64 " (%.6g); expected %.1f (%.6g)\n", pli->n_past_fwd, (double) pli->n_past_fwd / ntargets, pli->F3 * ntargets, pli->F3); fprintf(ofp, "Initial search space (Z): %15.0f %s\n", pli->Z, pli->Z_setby == p7_ZSETBY_OPTION ? "[as set by --Z on cmdline]" : "[actual number of targets]"); fprintf(ofp, "Domain search space (domZ): %15.0f %s\n", pli->domZ, pli->domZ_setby == p7_ZSETBY_OPTION ? "[as set by --domZ on cmdline]" : "[number of targets reported over threshold]"); } if (w != NULL) { esl_stopwatch_Display(ofp, w, "# CPU time: "); fprintf(ofp, "# Mc/sec: %.2f\n", (double) pli->nres * (double) pli->nnodes / (w->elapsed * 1.0e6)); } return eslOK; } /*------------------- end, pipeline API -------------------------*/ /***************************************************************** * 3. Example 1: "search mode" in a sequence db *****************************************************************/ #ifdef p7PIPELINE_EXAMPLE /* gcc -o pipeline_example -g -Wall -I../easel -L../easel -I. -L. -Dp7PIPELINE_EXAMPLE p7_pipeline.c -lhmmer -leasel -lm * ./pipeline_example */ #include "p7_config.h" #include "easel.h" #include "esl_getopts.h" #include "esl_sqio.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-E", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, "--cut_ga,--cut_nc,--cut_tc", "E-value cutoff for reporting significant sequence hits", 0 }, { "-T", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, "--cut_ga,--cut_nc,--cut_tc", "bit score cutoff for reporting significant sequence hits", 0 }, { "-Z", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of comparisons done, for E-value calculation", 0 }, { "--domE", eslARG_REAL,"1000.0", NULL, "x>0", NULL, NULL, "--cut_ga,--cut_nc,--cut_tc", "E-value cutoff for reporting individual domains", 0 }, { "--domT", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, "--cut_ga,--cut_nc,--cut_tc", "bit score cutoff for reporting individual domains", 0 }, { "--domZ", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of significant seqs, for domain E-value calculation", 0 }, { "--cut_ga", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--seqE,--seqT,--domE,--domT", "use GA gathering threshold bit score cutoffs in ", 0 }, { "--cut_nc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--seqE,--seqT,--domE,--domT", "use NC noise threshold bit score cutoffs in ", 0 }, { "--cut_tc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--seqE,--seqT,--domE,--domT", "use TC trusted threshold bit score cutoffs in ", 0 }, { "--max", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--F1,--F2,--F3", "Turn all heuristic filters off (less speed, more power)", 0 }, { "--F1", eslARG_REAL, "0.02", NULL, NULL, NULL, NULL, "--max", "Stage 1 (MSV) threshold: promote hits w/ P <= F1", 0 }, { "--F2", eslARG_REAL, "1e-3", NULL, NULL, NULL, NULL, "--max", "Stage 2 (Vit) threshold: promote hits w/ P <= F2", 0 }, { "--F3", eslARG_REAL, "1e-5", NULL, NULL, NULL, NULL, "--max", "Stage 3 (Fwd) threshold: promote hits w/ P <= F3", 0 }, { "--nobias", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--max", "turn off composition bias filter", 0 }, { "--nonull2", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "turn off biased composition score corrections", 0 }, { "--seed", eslARG_INT, "42", NULL, "n>=0", NULL, NULL, NULL, "set RNG seed to (if 0: one-time arbitrary seed)", 0 }, { "--acc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output target accessions instead of names if possible", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of using acceleration pipeline in search mode (seq targets)"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); int format = eslSQFILE_FASTA; P7_HMMFILE *hfp = NULL; ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_SQFILE *sqfp = NULL; ESL_SQ *sq = NULL; P7_PIPELINE *pli = NULL; P7_TOPHITS *hitlist = NULL; int h,d,namew; /* Don't forget this. Null2 corrections need FLogsum() */ p7_FLogsumInit(); /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Open a sequence file */ if (esl_sqfile_OpenDigital(abc, seqfile, format, NULL, &sqfp) != eslOK) p7_Fail("Failed to open sequence file %s\n", seqfile); sq = esl_sq_CreateDigital(abc); /* Create a pipeline and a top hits list */ pli = p7_pipeline_Create(go, hmm->M, 400, FALSE, p7_SEARCH_SEQS); hitlist = p7_tophits_Create(); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); om = p7_oprofile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 400, p7_LOCAL); p7_oprofile_Convert(gm, om); /* is now p7_LOCAL, multihit */ p7_pli_NewModel(pli, om, bg); /* Run each target sequence through the pipeline */ while (esl_sqio_Read(sqfp, sq) == eslOK) { p7_pli_NewSeq(pli, sq); p7_bg_SetLength(bg, sq->n); p7_oprofile_ReconfigLength(om, sq->n); p7_Pipeline(pli, om, bg, sq, hitlist); esl_sq_Reuse(sq); p7_pipeline_Reuse(pli); } /* Print the results. * This example is a stripped version of hmmsearch's tabular output. */ p7_tophits_SortBySortkey(hitlist); namew = ESL_MAX(8, p7_tophits_GetMaxNameLength(hitlist)); for (h = 0; h < hitlist->N; h++) { d = hitlist->hit[h]->best_domain; printf("%10.2g %7.1f %6.1f %7.1f %6.1f %10.2g %6.1f %5d %-*s %s\n", exp(hitlist->hit[h]->lnP) * (double) pli->Z, hitlist->hit[h]->score, hitlist->hit[h]->pre_score - hitlist->hit[h]->score, /* bias correction */ hitlist->hit[h]->dcl[d].bitscore, eslCONST_LOG2R * p7_FLogsum(0.0, log(bg->omega) + hitlist->hit[h]->dcl[d].domcorrection), /* print in units of bits */ exp(hitlist->hit[h]->dcl[d].lnP) * (double) pli->Z, hitlist->hit[h]->nexpected, hitlist->hit[h]->nreported, namew, hitlist->hit[h]->name, hitlist->hit[h]->desc); } /* Done. */ p7_tophits_Destroy(hitlist); p7_pipeline_Destroy(pli); esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7PIPELINE_EXAMPLE*/ /*----------- end, search mode (seq db) example -----------------*/ /***************************************************************** * 4. Example 2: "scan mode" in an HMM db *****************************************************************/ #ifdef p7PIPELINE_EXAMPLE2 /* gcc -o pipeline_example2 -g -Wall -I../easel -L../easel -I. -L. -Dp7PIPELINE_EXAMPLE2 p7_pipeline.c -lhmmer -leasel -lm * ./pipeline_example2 */ #include "p7_config.h" #include "easel.h" #include "esl_getopts.h" #include "esl_sqio.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-E", eslARG_REAL, "10.0", NULL, "x>0", NULL, NULL, "--cut_ga,--cut_nc,--cut_tc", "E-value cutoff for reporting significant sequence hits", 0 }, { "-T", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, "--cut_ga,--cut_nc,--cut_tc", "bit score cutoff for reporting significant sequence hits", 0 }, { "-Z", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of comparisons done, for E-value calculation", 0 }, { "--domE", eslARG_REAL,"1000.0", NULL, "x>0", NULL, NULL, "--cut_ga,--cut_nc,--cut_tc", "E-value cutoff for reporting individual domains", 0 }, { "--domT", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, "--cut_ga,--cut_nc,--cut_tc", "bit score cutoff for reporting individual domains", 0 }, { "--domZ", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of significant seqs, for domain E-value calculation", 0 }, { "--cut_ga", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--seqE,--seqT,--domE,--domT", "use GA gathering threshold bit score cutoffs in ", 0 }, { "--cut_nc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--seqE,--seqT,--domE,--domT", "use NC noise threshold bit score cutoffs in ", 0 }, { "--cut_tc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--seqE,--seqT,--domE,--domT", "use TC trusted threshold bit score cutoffs in ", 0 }, { "--max", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--F1,--F2,--F3", "Turn all heuristic filters off (less speed, more power)", 0 }, { "--F1", eslARG_REAL, "0.02", NULL, NULL, NULL, NULL, "--max", "Stage 1 (MSV) threshold: promote hits w/ P <= F1", 0 }, { "--F2", eslARG_REAL, "1e-3", NULL, NULL, NULL, NULL, "--max", "Stage 2 (Vit) threshold: promote hits w/ P <= F2", 0 }, { "--F3", eslARG_REAL, "1e-5", NULL, NULL, NULL, NULL, "--max", "Stage 3 (Fwd) threshold: promote hits w/ P <= F3", 0 }, { "--nobias", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--max", "turn off composition bias filter", 0 }, { "--nonull2", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "turn off biased composition score corrections", 0 }, { "--seed", eslARG_INT, "42", NULL, "n>=0", NULL, NULL, NULL, "set RNG seed to (if 0: one-time arbitrary seed)", 0 }, { "--acc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output target accessions instead of names if possible", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of using acceleration pipeline in scan mode (HMM targets)"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); int format = eslSQFILE_FASTA; P7_HMMFILE *hfp = NULL; ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; P7_OPROFILE *om = NULL; ESL_SQFILE *sqfp = NULL; ESL_SQ *sq = NULL; P7_PIPELINE *pli = NULL; P7_TOPHITS *hitlist = p7_tophits_Create(); int h,d,namew; /* Don't forget this. Null2 corrections need FLogsum() */ p7_FLogsumInit(); /* Open a sequence file, read one seq from it. * Convert to digital later, after 1st HMM is input and abc becomes known */ sq = esl_sq_Create(); if (esl_sqfile_Open(seqfile, format, NULL, &sqfp) != eslOK) p7_Fail("Failed to open sequence file %s\n", seqfile); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence from %s\n", seqfile); esl_sqfile_Close(sqfp); /* Open the HMM db */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); /* Create a pipeline for the query sequence in scan mode */ pli = p7_pipeline_Create(go, 100, sq->n, FALSE, p7_SCAN_MODELS); p7_pli_NewSeq(pli, sq); /* Some additional config of the pipeline specific to scan mode */ pli->hfp = hfp; if (! pli->Z_is_fixed && hfp->is_pressed) { pli->Z_is_fixed = TRUE; pli->Z = hfp->ssi->nprimary; } /* Read (partial) of each HMM in file */ while (p7_oprofile_ReadMSV(hfp, &abc, &om) == eslOK) { /* One time only initialization after abc becomes known */ if (bg == NULL) { bg = p7_bg_Create(abc); if (esl_sq_Digitize(abc, sq) != eslOK) p7_Die("alphabet mismatch"); } p7_pli_NewModel(pli, om, bg); p7_bg_SetLength(bg, sq->n); /* SetLength() call MUST follow NewModel() call, because NewModel() resets the filter HMM, including its default expected length; see bug #h85 */ p7_oprofile_ReconfigLength(om, sq->n); p7_Pipeline(pli, om, bg, sq, hitlist); p7_oprofile_Destroy(om); p7_pipeline_Reuse(pli); } /* Print the results. * This example is a stripped version of hmmsearch's tabular output. */ p7_tophits_SortBySortkey(hitlist); namew = ESL_MAX(8, p7_tophits_GetMaxNameLength(hitlist)); for (h = 0; h < hitlist->N; h++) { d = hitlist->hit[h]->best_domain; printf("%10.2g %7.1f %6.1f %7.1f %6.1f %10.2g %6.1f %5d %-*s %s\n", exp(hitlist->hit[h]->lnP) * (double) pli->Z, hitlist->hit[h]->score, hitlist->hit[h]->pre_score - hitlist->hit[h]->score, /* bias correction */ hitlist->hit[h]->dcl[d].bitscore, eslCONST_LOG2R * p7_FLogsum(0.0, log(bg->omega) + hitlist->hit[h]->dcl[d].domcorrection), /* print in units of BITS */ exp(hitlist->hit[h]->dcl[d].lnP) * (double) pli->Z, hitlist->hit[h]->nexpected, hitlist->hit[h]->nreported, namew, hitlist->hit[h]->name, hitlist->hit[h]->desc); } /* Done. */ p7_tophits_Destroy(hitlist); p7_pipeline_Destroy(pli); esl_sq_Destroy(sq); p7_hmmfile_Close(hfp); p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7PIPELINE_EXAMPLE2*/ /*--------------- end, scan mode (HMM db) example ---------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/p7_pipeline.c $ * SVN $Id: p7_pipeline.c 4771 2015-02-25 06:53:51Z wheelert $ *****************************************************************/ hmmer-3.1b2/src/hmmpress.c0000664361611702660230000002004112473612613015056 0ustar wheelerteddy/* hmmpress: prepare an HMM database for faster hmmscan searches. */ #include "p7_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-f", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "force: overwrite any previous pressed files", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "prepare an HMM database for faster hmmscan searches"; static void open_db_files(ESL_GETOPTS *go, char *basename, FILE **ret_mfp, FILE **ret_ffp, FILE **ret_pfp, ESL_NEWSSI **ret_nssi); int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_ALPHABET *abc = NULL; char *hmmfile = esl_opt_GetArg(go, 1); P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; FILE *mfp = NULL; FILE *ffp = NULL; FILE *pfp = NULL; ESL_NEWSSI *nssi = NULL; uint16_t fh = 0; int nmodel = 0; uint64_t totM = 0; int status; char errbuf[eslERRBUFSIZE]; if (strcmp(hmmfile, "-") == 0) p7_Fail("Can't use - for argument: can't index standard input\n"); status = p7_hmmfile_OpenENoDB(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); if (hfp->do_stdin || hfp->do_gzip) p7_Fail("HMM file %s must be a normal file, not gzipped or a stdin pipe", hmmfile); open_db_files(go, hmmfile, &mfp, &ffp, &pfp, &nssi); if (esl_newssi_AddFile(nssi, hfp->fname, 0, &fh) != eslOK) /* 0 = format code (HMMs don't have any yet) */ p7_Die("Failed to add HMM file %s to new SSI index\n", hfp->fname); printf("Working... "); fflush(stdout); while ((status = p7_hmmfile_Read(hfp, &abc, &hmm)) == eslOK) { if (hmm->name == NULL) p7_Fail("Every HMM must have a name to be indexed. Failed to find name of HMM #%d\n", nmodel+1); if (nmodel == 0) { /* first time initialization, now that alphabet known */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, 400); } nmodel++; totM += hmm->M; gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 400, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); if ((om->offs[p7_MOFFSET] = ftello(mfp)) == -1) p7_Fail("Failed to ftello() current disk position of HMM db file"); if ((om->offs[p7_FOFFSET] = ftello(ffp)) == -1) p7_Fail("Failed to ftello() current disk position of MSV db file"); if ((om->offs[p7_POFFSET] = ftello(pfp)) == -1) p7_Fail("Failed to ftello() current disk position of profile db file"); #ifndef p7_IMPL_DUMMY if (esl_newssi_AddKey(nssi, hmm->name, fh, om->offs[p7_MOFFSET], 0, 0) != eslOK) p7_Fail("Failed to add key %s to SSI index", hmm->name); if (hmm->acc) { if (esl_newssi_AddAlias(nssi, hmm->acc, hmm->name) != eslOK) p7_Fail("Failed to add secondary key %s to SSI index", hmm->acc); } #endif p7_hmmfile_WriteBinary(mfp, -1, hmm); p7_oprofile_Write(ffp, pfp, om); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); p7_hmm_Destroy(hmm); } if (status == eslEFORMAT) p7_Fail("bad file format in HMM file %s", hmmfile); else if (status == eslEINCOMPAT) p7_Fail("HMM file %s contains different alphabets", hmmfile); else if (status != eslEOF) p7_Fail("Unexpected error in reading HMMs from %s", hmmfile); if (esl_newssi_Write(nssi) != eslOK) p7_Fail("Failed to write keys to ssi file\n"); printf("done.\n"); if (nssi->nsecondary > 0) printf("Pressed and indexed %d HMMs (%ld names and %ld accessions).\n", nmodel, (long) nssi->nprimary, (long) nssi->nsecondary); else printf("Pressed and indexed %d HMMs (%ld names).\n", nmodel, (long) nssi->nprimary); printf("Models pressed into binary file: %s.h3m\n", hfp->fname); printf("SSI index for binary model file: %s.h3i\n", hfp->fname); printf("Profiles (MSV part) pressed into: %s.h3f\n", hfp->fname); printf("Profiles (remainder) pressed into: %s.h3p\n", hfp->fname); fclose(mfp); fclose(ffp); fclose(pfp); esl_newssi_Close(nssi); p7_bg_Destroy(bg); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } static void open_db_files(ESL_GETOPTS *go, char *basename, FILE **ret_mfp, FILE **ret_ffp, FILE **ret_pfp, ESL_NEWSSI **ret_nssi) { char *mfile = NULL; /* .h3m file: binary core HMMs */ char *ffile = NULL; /* .h3f file: binary optimized profiles, MSV filter part only */ char *pfile = NULL; /* .h3p file: binary optimized profiles, remainder (excluding MSV filter) */ char *ssifile = NULL; FILE *mfp = NULL; FILE *ffp = NULL; FILE *pfp = NULL; ESL_NEWSSI *nssi = NULL; int allow_overwrite = esl_opt_GetBoolean(go, "-f"); int status; if (esl_sprintf(&ssifile, "%s.h3i", basename) != eslOK) p7_Die("esl_sprintf() failed"); status = esl_newssi_Open(ssifile, allow_overwrite, &nssi); if (status == eslENOTFOUND) p7_Fail("failed to open SSI index %s", ssifile); else if (status == eslEOVERWRITE) p7_Fail("Looks like %s is already pressed (.h3i file present, anyway):\nDelete old hmmpress indices first", basename); else if (status != eslOK) p7_Fail("failed to create a new SSI index"); if (esl_sprintf(&mfile, "%s.h3m", basename) != eslOK) p7_Die("esl_sprintf() failed"); if (! allow_overwrite && esl_FileExists(mfile)) p7_Fail("Binary HMM file %s already exists;\nDelete old hmmpress indices first", mfile); if ((mfp = fopen(mfile, "wb")) == NULL) p7_Fail("Failed to open binary HMM file %s for writing", mfile); if (esl_sprintf(&ffile, "%s.h3f", basename) != eslOK) p7_Die("esl_sprintf() failed"); if (! allow_overwrite && esl_FileExists(ffile)) p7_Fail("Binary MSV filter file %s already exists\nDelete old hmmpress indices first", ffile); if ((ffp = fopen(ffile, "wb")) == NULL) p7_Fail("Failed to open binary MSV filter file %s for writing", ffile); if (esl_sprintf(&pfile, "%s.h3p", basename) != eslOK) p7_Die("esl_sprintf() failed"); if (! allow_overwrite && esl_FileExists(pfile)) p7_Fail("Binary profile file %s already exists\nDelete old hmmpress indices first", pfile); if ((pfp = fopen(pfile, "wb")) == NULL) p7_Fail("Failed to open binary profile file %s for writing", pfile); free(mfile); free(ffile); free(pfile); free(ssifile); *ret_mfp = mfp; *ret_ffp = ffp; *ret_pfp = pfp; *ret_nssi = nssi; return; } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/hmmpress.c $ * SVN $Id: hmmpress.c 3630 2011-08-03 14:09:27Z eddys $ *****************************************************************/ hmmer-3.1b2/src/tracealign.c0000664361611702660230000014231112473612614015337 0ustar wheelerteddy/* Construction of multiple alignments from traces. * * Contents: * 1. API for aligning sequence or MSA traces * 2. Internal functions used by the API * 3. Test driver * 4. Copyright and license. * * SRE, Tue Oct 21 19:38:19 2008 [Casa de Gatos] * SVN $Id: tracealign.c 4569 2013-12-12 23:24:37Z wheelert $ */ #include "p7_config.h" #include "easel.h" #include "esl_vectorops.h" #include "hmmer.h" static int map_new_msa(P7_TRACE **tr, int nseq, int M, int optflags, int **ret_inscount, int **ret_matuse, int **ret_matmap, int *ret_alen); static ESL_DSQ get_dsq_z(ESL_SQ **sq, const ESL_MSA *premsa, P7_TRACE **tr, int idx, int z); static int make_digital_msa(ESL_SQ **sq, const ESL_MSA *premsa, P7_TRACE **tr, int nseq, const int *matuse, const int *matmap, int M, int alen, int optflags, ESL_MSA **ret_msa); static int make_text_msa (ESL_SQ **sq, const ESL_MSA *premsa, P7_TRACE **tr, int nseq, const int *matuse, const int *matmap, int M, int alen, int optflags, ESL_MSA **ret_msa); static int annotate_rf(ESL_MSA *msa, int M, const int *matuse, const int *matmap); static int annotate_mm(ESL_MSA *msa, P7_HMM *hmm, const int *matuse, const int *matmap); static int annotate_posterior_probability(ESL_MSA *msa, P7_TRACE **tr, const int *matmap, int M, int optflags); static int rejustify_insertions_digital ( ESL_MSA *msa, const int *inserts, const int *matmap, const int *matuse, int M); static int rejustify_insertions_text (const ESL_ALPHABET *abc, ESL_MSA *msa, const int *inserts, const int *matmap, const int *matuse, int M); /***************************************************************** * 1. API for aligning sequence or MSA traces *****************************************************************/ /* Function: p7_tracealign_Seqs() * Synopsis: Convert array of traces (for a sequence array) to a new MSA. * Incept: SRE, Tue Oct 21 19:40:33 2008 [Janelia] * * Purpose: Convert an array of traces , * corresponding to an array of digital sequences * aligned to a model of * length , to a new multiple sequence alignment. * The new alignment structure is allocated here, and returned * in <*ret_msa>. * * As a special case, the traces may contain I->D and D->I * transitions. This feature is used by * to reconstruct an input alignment without modification * from trace doctoring. * * controls some optional behaviors in producing * the alignment, as follows: * * : creates the MSA in digital mode, as * opposed to a default text mode. * * : create a column for every * consensus column in the model, even if it means having * all gap characters (deletions) in a column; this * guarantees that the alignment will have at least * columns. The default is to only show columns that have * at least one residue in them. * * : trim off any residues that get assigned to * flanking N,C states (in profile traces) or I_0 and I_M * (in core traces). * * The can be combined by logical OR; for * example, . * * Args: sq - array of digital sequences, 0..nseq-1 * tr - array of tracebacks, 0..nseq-1 * nseq - number of sequences * M - length of model sequences were aligned to * optflags - flags controlling optional behaviours. * ret_msa - RETURN: new multiple sequence alignment * * Returns: on success, and <*ret_msa> points to a new * object. Caller is responsible for free'ing * this new MSA with . * * Throws: on allocation failure; <*ret_msa> is . * * Notes: * why a text mode, when most of HMMER works in digital * sequences and alignments? Text mode MSAs are created * for output, whereas digital mode MSAs are created for * internal use. Text mode allows HMMER's output * conventions to be used for match vs. insert columns: * lowercase/. for residues/gaps in inserts, uppercase/- * for residues/gaps in match columns. * * * why not pass HMM as an argument, so we can transfer * column annotation? In , the * HMM is unavailable -- because of constraints of what's * made available to the master process in an MPI * implementation. (We could make the HMM an optional * argument.) */ int p7_tracealign_Seqs(ESL_SQ **sq, P7_TRACE **tr, int nseq, int M, int optflags, P7_HMM *hmm, ESL_MSA **ret_msa) { ESL_MSA *msa = NULL; /* RETURN: new MSA */ const ESL_ALPHABET *abc = sq[0]->abc; int *inscount = NULL; /* array of max gaps between aligned columns */ int *matmap = NULL; /* matmap[k] = apos of match k matmap[1..M] = [1..alen] */ int *matuse = NULL; /* TRUE if an alignment column is associated with match state k [1..M] */ int idx; /* counter over sequences */ int alen; /* width of alignment */ int status; if ((status = map_new_msa(tr, nseq, M, optflags, &inscount, &matuse, &matmap, &alen)) != eslOK) return status; if (optflags & p7_DIGITIZE) { if ((status = make_digital_msa(sq, NULL, tr, nseq, matuse, matmap, M, alen, optflags, &msa)) != eslOK) goto ERROR; } else { if ((status = make_text_msa (sq, NULL, tr, nseq, matuse, matmap, M, alen, optflags, &msa)) != eslOK) goto ERROR; } if ((status = annotate_rf(msa, M, matuse, matmap)) != eslOK) goto ERROR; if (hmm) if ((status = annotate_mm(msa, hmm, matuse, matmap)) != eslOK) goto ERROR; if ((status = annotate_posterior_probability(msa, tr, matmap, M, optflags)) != eslOK) goto ERROR; if (optflags & p7_DIGITIZE) rejustify_insertions_digital( msa, inscount, matmap, matuse, M); else rejustify_insertions_text (abc, msa, inscount, matmap, matuse, M); for (idx = 0; idx < nseq; idx++) { esl_msa_SetSeqName(msa, idx, sq[idx]->name, -1); if (sq[idx]->acc[0] != '\0') esl_msa_SetSeqAccession (msa, idx, sq[idx]->acc, -1); if (sq[idx]->desc[0] != '\0') esl_msa_SetSeqDescription(msa, idx, sq[idx]->desc, -1); msa->wgt[idx] = 1.0; if (msa->sqlen != NULL) msa->sqlen[idx] = sq[idx]->n; } free(inscount); free(matmap); free(matuse); *ret_msa = msa; return eslOK; ERROR: if (msa != NULL) esl_msa_Destroy(msa); if (inscount != NULL) free(inscount); if (matmap != NULL) free(matmap); if (matuse != NULL) free(matuse); *ret_msa = NULL; return status; } /* Function: p7_tracealign_MSA() * Synopsis: Convert array of traces (for a previous MSA) to a new MSA. * Incept: SRE, Mon Mar 2 18:18:22 2009 [Casa de Gatos] * * Purpose: Identical to except that the trace * array accompanies a digital multiple alignment , * rather than an array of digital sequences. * * This gets used in , where we've * constructed an array of faux traces directly from an * input alignment, and we want to reconstruct the * MSA that corresponds to what HMMER actually used * to build its model (after trace doctoring to be * compatible with Plan 7, and with <#=RF> annotation * on assigned consensus columns). * * Xref: J4/102. */ int p7_tracealign_MSA(const ESL_MSA *premsa, P7_TRACE **tr, int M, int optflags, ESL_MSA **ret_postmsa) { const ESL_ALPHABET *abc = premsa->abc; ESL_MSA *msa = NULL; /* RETURN: new MSA */ int *inscount = NULL; /* array of max gaps between aligned columns */ int *matmap = NULL; /* matmap[k] = apos of match k matmap[1..M] = [1..alen] */ int *matuse = NULL; /* TRUE if an alignment column is associated with match state k [1..M] */ int idx; /* counter over sequences */ int alen; /* width of alignment */ int status; if ((status = map_new_msa(tr, premsa->nseq, M, optflags, &inscount, &matuse, &matmap, &alen)) != eslOK) return status; if (optflags & p7_DIGITIZE) { if ((status = make_digital_msa(NULL, premsa, tr, premsa->nseq, matuse, matmap, M, alen, optflags, &msa)) != eslOK) goto ERROR; } else { if ((status = make_text_msa (NULL, premsa, tr, premsa->nseq, matuse, matmap, M, alen, optflags, &msa)) != eslOK) goto ERROR; } if ((status = annotate_rf(msa, M, matuse, matmap)) != eslOK) goto ERROR; if ((status = annotate_posterior_probability(msa, tr, matmap, M, optflags)) != eslOK) goto ERROR; if (optflags & p7_DIGITIZE) rejustify_insertions_digital( msa, inscount, matmap, matuse, M); else rejustify_insertions_text (abc, msa, inscount, matmap, matuse, M); /* Transfer information from old MSA to new */ esl_msa_SetName (msa, premsa->name, -1); esl_msa_SetDesc (msa, premsa->desc, -1); esl_msa_SetAccession(msa, premsa->acc, -1); for (idx = 0; idx < premsa->nseq; idx++) { esl_msa_SetSeqName (msa, idx, premsa->sqname[idx], -1); if (msa->sqacc) esl_msa_SetSeqAccession (msa, idx, premsa->sqacc[idx], -1); if (msa->sqdesc) esl_msa_SetSeqDescription(msa, idx, premsa->sqdesc[idx], -1); msa->wgt[idx] = premsa->wgt[idx]; } if (premsa->flags & eslMSA_HASWGTS) msa->flags |= eslMSA_HASWGTS; free(inscount); free(matmap); free(matuse); *ret_postmsa = msa; return eslOK; ERROR: if (msa != NULL) esl_msa_Destroy(msa); if (inscount != NULL) free(inscount); if (matmap != NULL) free(matmap); if (matuse != NULL) free(matuse); *ret_postmsa = NULL; return status; } /* Function: p7_tracealign_computeTraces() * * Synopsis: Compute traces for a collection of sequences relative to * a given HMM * * Purpose: Given an and a set of sequences (along with * an into the first sequence for which a trace is * desired), calculate the optimal accuracy alignment trace * for each of sequences. The calling function provides * a allocated array of P7_TRACEs () into which the * results are placed. * * Return: eslOK if no errors */ int p7_tracealign_computeTraces(P7_HMM *hmm, ESL_SQ **sq, int offset, int N, P7_TRACE **tr) { P7_OMX *oxf = NULL; /* optimized Forward matrix */ P7_OMX *oxb = NULL; /* optimized Backward matrix */ P7_GMX *gxf = NULL; /* generic Forward mx for failover */ P7_GMX *gxb = NULL; /* generic Backward mx for failover*/ P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_BG *bg = NULL; int tfrom, tto; int idx; float fwdsc; /* Forward score */ float oasc; /* optimal accuracy score */ int status; bg = p7_bg_Create(hmm->abc); gm = p7_profile_Create (hmm->M, hmm->abc); om = p7_oprofile_Create(hmm->M, hmm->abc); p7_ProfileConfig(hmm, bg, gm, sq[offset]->n, p7_UNILOCAL); p7_oprofile_Convert(gm, om); oxf = p7_omx_Create(hmm->M, sq[offset]->n, sq[offset]->n); oxb = p7_omx_Create(hmm->M, sq[offset]->n, sq[offset]->n); /* Collect an OA trace for each sequence that needs to be aligned */ for (idx = offset; idx < offset+ N; idx++) { /* special case: a sequence of length 0. HMMER model can't generate 0 length seq. Set tr->N == 0 as a flag. (bug #h100 fix) */ if (sq[idx]->n == 0) { tr[idx]->N = 0; continue; } p7_omx_GrowTo(oxf, hmm->M, sq[idx]->n, sq[idx]->n); p7_omx_GrowTo(oxb, hmm->M, sq[idx]->n, sq[idx]->n); p7_oprofile_ReconfigLength(om, sq[idx]->n); p7_Forward (sq[idx]->dsq, sq[idx]->n, om, oxf, &fwdsc); p7_Backward(sq[idx]->dsq, sq[idx]->n, om, oxf, oxb, NULL); status = p7_Decoding(om, oxf, oxb, oxb); /* is now overwritten with post probabilities */ if (status == eslOK) { p7_OptimalAccuracy(om, oxb, oxf, &oasc); /* is now overwritten with OA scores */ p7_OATrace (om, oxb, oxf, tr[idx]); /* tr[idx] is now an OA traceback for seq #idx */ } else if (status == eslERANGE) { /* Work around the numeric overflow problem in Decoding() * xref J3/119-121 for commentary; * also the note in impl_sse/decoding.c::p7_Decoding(). * * In short: p7_Decoding() can overflow in cases where the * model is in unilocal mode (expects to see a single * "domain") but the target contains more than one domain. * In searches, I believe this only happens on repetitive * garbage, because the domain postprocessor is very good * about identifying single domains before doing posterior * decoding. But in hmmalign, we're in unilocal mode * to begin with, and the user can definitely give us a * multidomain protein. * * We need to make this far more robust; but that's probably * an issue to deal with when we really spend some time * looking hard at hmmalign performance. For now (Nov 2009; * in beta tests leading up to 3.0 release) I'm more * concerned with stabilizing the search programs. * * The workaround is to detect the overflow and fail over to * slow generic routines. */ if (gxf == NULL) gxf = p7_gmx_Create(hmm->M, sq[idx]->n); else p7_gmx_GrowTo(gxf, hmm->M, sq[idx]->n); if (gxb == NULL) gxb = p7_gmx_Create(hmm->M, sq[idx]->n); else p7_gmx_GrowTo(gxb, hmm->M, sq[idx]->n); p7_ReconfigLength(gm, sq[idx]->n); p7_GForward (sq[idx]->dsq, sq[idx]->n, gm, gxf, &fwdsc); p7_GBackward(sq[idx]->dsq, sq[idx]->n, gm, gxb, NULL); p7_GDecoding(gm, gxf, gxb, gxb); p7_GOptimalAccuracy(gm, gxb, gxf, &oasc); p7_GOATrace (gm, gxb, gxf, tr[idx]); p7_gmx_Reuse(gxf); p7_gmx_Reuse(gxb); } /* the above steps aren't storing the tfrom/tto values in the trace, * which are required for downstream processing in this case, so * hack them here. Note - this treats the whole thing as one domain, * even if there are really multiple domains. */ // skip the parts of the trace that precede the first match state tfrom = 2; while (tr[idx]->st[tfrom] != p7T_M) tfrom++; tto = tfrom + 1; //run until the model is exited while (tr[idx]->st[tto] != p7T_E) tto++; tr[idx]->tfrom[0] = tfrom; tr[idx]->tto[0] = tto - 1; p7_omx_Reuse(oxf); p7_omx_Reuse(oxb); } #if 0 for (idx = 0; idx < nseq; idx++) p7_trace_Dump(stdout, tr[idx], gm, sq[idx]->dsq); #endif p7_omx_Destroy(oxf); p7_omx_Destroy(oxb); p7_gmx_Destroy(gxf); p7_gmx_Destroy(gxb); p7_bg_Destroy(bg); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); return eslOK; } /* Function: p7_tracealign_getTracesAndStats() * * Synopsis: Compute traces and stats for a collection of sequences * relative to a given HMM * * Purpose: Given an and a set of sequences , calculate an * optimal accuracy MSA (returned in ) along with * three arrays mapping values onto positions of the input * sequences. The mapped values are: * - The posterior probability associated with * each residue aligned to the core model * - The relative entropy of the model position * to which each matched residue is aligned * - The bit score of residue vs the model for * each matched residue * * Return: eslOK if no errors */ int p7_tracealign_getMSAandStats(P7_HMM *hmm, ESL_SQ **sq, int N, ESL_MSA **ret_msa, float **ret_pp, float **ret_relent, float **ret_scores ) { P7_TRACE **tr = NULL; /* array of tracebacks */ ESL_MSA *msa = NULL; /* resulting multiple alignment */ P7_BG *bg = NULL; int i; // seq_id int z; // trace position int j; // position in the query seq int k; // positon in the model int x; // counter float p; // temporary probability holder int status; int msaopts = 0; /* flags to p7_tracealign_Seqs() */ msaopts |= p7_ALL_CONSENSUS_COLS; /* default as of 3.1 */ bg = p7_bg_Create(hmm->abc); ESL_ALLOC(tr, sizeof(P7_TRACE *) * N); for (i = 0; i < N; i++) tr[i] = p7_trace_CreateWithPP(); p7_tracealign_computeTraces(hmm, sq, 0, N, tr); p7_tracealign_Seqs(sq, tr, N, hmm->M, msaopts, hmm, &msa); *ret_msa = msa; for (i=0; in; j++) { ret_pp[i][j] = 0.0; ret_relent[i][j] = 0.0; ret_scores[i][j] = 0.0; } j = tr[i]->tfrom[0] - 2; for (z = tr[i]->tfrom[0]; z <= tr[i]->tto[0]; z++) { if (tr[i]->st[z] != p7T_D ) { //M or I ret_pp[i][j] = tr[i]->pp[z]; if (tr[i]->st[z] == p7T_M ) { k = tr[i]->k[z]; for (x=0; xabc->K; x++) { p = hmm->mat[k][x]; ret_relent[i][j] += p * log(p / bg->f[x]) / log(2); } p = hmm->mat[k][sq[i]->dsq[j]]; ret_scores[i][j] = log(p / bg->f[sq[i]->dsq[j]]) / log(2); } j++; } } } for (i = 0; i < N; i++) p7_trace_Destroy(tr[i]); free(tr); return eslOK; ERROR: if (tr != NULL) { for (i = 0; i < N; i++) p7_trace_Destroy(tr[i]); free(tr); } return status; } /*--------------- end, exposed API ------------------------------*/ /***************************************************************** * 2. Internal functions used by the API *****************************************************************/ /* map_new_msa() * * Construct , , and * arrays for mapping model consensus nodes <1..M> onto columns * <1..alen> of a new MSA. * * Here's the problem. We want to align the match states in columns, * but some sequences have inserted symbols in them; we need some * sort of overall knowledge of where the inserts are and how long * they are in order to create the alignment. * * Here's our trick. inscount[] is a 0..M array; inserts[k] stores * the maximum number of times insert substate k was used. This * is the maximum number of gaps to insert between canonical * column k and k+1. inserts[0] is the N-term tail; inserts[M] is * the C-term tail. * * Additionally, matuse[k=1..M] says whether we're going to make an * alignment column for consensus position k. By default this is * only if there is at least one residue in the column. If * the option flag is set, though, all * matuse[1..M] are set . (matuse[0] is unused, always .) * * Then, using these arrays, we construct matmap[] and determine alen. * If match state k is represented as an alignment column, * matmap[1..M] = that position, <1..alen>. * If match state k is not in the alignment (), * matmap[k] = matmap[k-1] = the last alignment column that a match * state did map to; this is a trick to make some apos coordinate setting * work cleanly. * Because of this trick, you can't just assume because matmap[k] is * nonzero that match state k maps somewhere in the alignment; * you have to check matuse[k] == TRUE, then look at what matmap[k] says. * Remember that N and C emit on transition, hence the check for an * N->N or C->C transition before bumping nins. * is unused; by convention, . */ static int map_new_msa(P7_TRACE **tr, int nseq, int M, int optflags, int **ret_inscount, int **ret_matuse, int **ret_matmap, int *ret_alen) { int *inscount = NULL; /* inscount[k=0..M] == max # of inserts in node k */ int *insnum = NULL; /* insct[k=0..M] == # of inserts in node k in current trace */ int *matuse = NULL; /* matuse[k=1..M] == TRUE|FALSE: does node k map to an alignment column */ int *matmap = NULL; /* matmap[k=1..M]: if matuse[k] TRUE, what column 1..alen does node k map to */ int idx; /* counter over sequences */ int z; /* index into trace positions */ int alen; /* length of alignment */ int k; /* counter over nodes 1..M */ int status; ESL_ALLOC(inscount, sizeof(int) * (M+1)); ESL_ALLOC(insnum, sizeof(int) * (M+1)); ESL_ALLOC(matuse, sizeof(int) * (M+1)); matuse[0] = 0; ESL_ALLOC(matmap, sizeof(int) * (M+1)); matmap[0] = 0; esl_vec_ISet(inscount, M+1, 0); if (optflags & p7_ALL_CONSENSUS_COLS) esl_vec_ISet(matuse+1, M, TRUE); else esl_vec_ISet(matuse+1, M, FALSE); /* Collect inscount[], matuse[] in a fairly general way * (either profile or core traces work) */ for (idx = 0; idx < nseq; idx++) { esl_vec_ISet(insnum, M+1, 0); for (z = 1; z < tr[idx]->N; z++) { switch (tr[idx]->st[z]) { case p7T_I: insnum[tr[idx]->k[z]]++; break; case p7T_N: if (tr[idx]->st[z-1] == p7T_N) insnum[0]++; break; case p7T_C: if (tr[idx]->st[z-1] == p7T_C) insnum[M]++; break; case p7T_M: matuse[tr[idx]->k[z]] = TRUE; break; case p7T_J: p7_Die("J state unsupported"); default: break; } } for (k = 0; k <= M; k++) inscount[k] = ESL_MAX(inscount[k], insnum[k]); } /* if we're trimming N and C off, reset inscount[0], inscount[M] to 0. */ if (optflags & p7_TRIM) { inscount[0] = inscount[M] = 0; } /* Use inscount, matuse to set the matmap[] */ alen = inscount[0]; for (k = 1; k <= M; k++) { if (matuse[k]) { matmap[k] = alen+1; alen += 1+inscount[k]; } else { matmap[k] = alen; alen += inscount[k]; } } free(insnum); *ret_inscount = inscount; *ret_matuse = matuse; *ret_matmap = matmap; *ret_alen = alen; return eslOK; ERROR: if (inscount) free(inscount); if (insnum) free(insnum); if (matuse) free(matuse); if (matmap) free(matmap); *ret_inscount = NULL; *ret_matuse = NULL; *ret_matmap = NULL; *ret_alen = 0; return status; } /* get_dsq_z() * this abstracts residue-fetching from either a sq array or a previous MSA; * one and only one of , is non-; * get the digital residue corresponding to tr[idx]->i[z]. */ static ESL_DSQ get_dsq_z(ESL_SQ **sq, const ESL_MSA *premsa, P7_TRACE **tr, int idx, int z) { return ( (premsa == NULL) ? sq[idx]->dsq[tr[idx]->i[z]] : premsa->ax[idx][tr[idx]->i[z]]); } /* make_digital_msa() * Create a new digital MSA, given traces for digital or for * a digital . (One and only one of , are * non-. * The traces may either be profile traces or core traces; * core traces may contain X "states" for fragments. * * matmap[k] = apos of match k, in digital coords: matmap[1..M] = [1..alen] */ static int make_digital_msa(ESL_SQ **sq, const ESL_MSA *premsa, P7_TRACE **tr, int nseq, const int *matuse, const int *matmap, int M, int alen, int optflags, ESL_MSA **ret_msa) { const ESL_ALPHABET *abc = (sq == NULL) ? premsa->abc : sq[0]->abc; ESL_MSA *msa = NULL; int idx; int apos; int z; int status; if ((msa = esl_msa_CreateDigital(abc, nseq, alen)) == NULL) { status = eslEMEM; goto ERROR; } for (idx = 0; idx < nseq; idx++) { msa->ax[idx][0] = eslDSQ_SENTINEL; for (apos = 1; apos <= alen; apos++) msa->ax[idx][apos] = esl_abc_XGetGap(abc); msa->ax[idx][alen+1] = eslDSQ_SENTINEL; apos = 1; for (z = 0; z < tr[idx]->N; z++) { switch (tr[idx]->st[z]) { case p7T_M: msa->ax[idx][matmap[tr[idx]->k[z]]] = get_dsq_z(sq, premsa, tr, idx, z); apos = matmap[tr[idx]->k[z]] + 1; break; case p7T_D: if (matuse[tr[idx]->k[z]]) /* bug h77: if all col is deletes, do nothing; do NOT overwrite a column */ msa->ax[idx][matmap[tr[idx]->k[z]]] = esl_abc_XGetGap(abc); /* overwrites ~ in Dk column on X->Dk */ apos = matmap[tr[idx]->k[z]] + 1; break; case p7T_I: if ( !(optflags & p7_TRIM) || (tr[idx]->k[z] != 0 && tr[idx]->k[z] != M)) { msa->ax[idx][apos] = get_dsq_z(sq, premsa, tr, idx, z); apos++; } break; case p7T_N: case p7T_C: if (! (optflags & p7_TRIM) && tr[idx]->i[z] > 0) { msa->ax[idx][apos] = get_dsq_z(sq, premsa, tr, idx, z); apos++; } break; case p7T_E: apos = matmap[M]+1; /* set position for C-terminal tail */ break; case p7T_X: /* Mark fragments (B->X and X->E containing core traces): * convert flanks from gaps to ~ */ if (tr[idx]->st[z-1] == p7T_B) { /* B->X leader. This is a core trace and a fragment. Convert leading gaps to ~ */ /* to set apos for an initial Ik: peek at next state for B->X->Ik; superfluous for ->{DM}k: */ for (apos = 1; apos <= matmap[tr[idx]->k[z+1]]; apos++) msa->ax[idx][apos] = esl_abc_XGetMissing(abc); /* tricky! apos is now exactly where it needs to be for X->Ik. all other cases except B->X->Ik set their own apos */ } else if (tr[idx]->st[z+1] == p7T_E) { /* X->E trailer. This is a core trace and a fragment. Convert trailing gaps to ~ */ /* don't need to set apos for trailer. There can't be any more residues in a core trace once we hit X->E */ for (; apos <= alen; apos++) msa->ax[idx][apos] = esl_abc_XGetMissing(abc); } else ESL_XEXCEPTION(eslECORRUPT, "make_digital_msa(): X state in unexpected position in trace"); break; default: break; } } } msa->nseq = nseq; msa->alen = alen; *ret_msa = msa; return eslOK; ERROR: if (msa) esl_msa_Destroy(msa); *ret_msa = NULL; return status; } /* make_text_msa() * Create a new text MSA, given traces for digital or for a digital . * (One and only one of , are non-. * * The reason to make a text-mode MSA rather than let Easel handle printing a digital * MSA is to impose HMMER's standard representation on gap characters and insertions: * at inserts, gaps are '.' and residues are lower-case, whereas at matches, gaps are '-' * and residues are upper case. * * Also see comments in make_digital_msa(), above. */ static int make_text_msa(ESL_SQ **sq, const ESL_MSA *premsa, P7_TRACE **tr, int nseq, const int *matuse, const int *matmap, int M, int alen, int optflags, ESL_MSA **ret_msa) { const ESL_ALPHABET *abc = (sq == NULL) ? premsa->abc : sq[0]->abc; ESL_MSA *msa = NULL; int idx; int apos; int z; int k; int status; if ((msa = esl_msa_Create(nseq, alen)) == NULL) { status = eslEMEM; goto ERROR; } for (idx = 0; idx < nseq; idx++) { for (apos = 0; apos < alen; apos++) msa->aseq[idx][apos] = '.'; for (k = 1; k <= M; k++) if (matuse[k]) msa->aseq[idx][-1+matmap[k]] = '-'; msa->aseq[idx][apos] = '\0'; apos = 0; for (z = 0; z < tr[idx]->N; z++) { switch (tr[idx]->st[z]) { case p7T_M: msa->aseq[idx][-1+matmap[tr[idx]->k[z]]] = toupper(abc->sym[get_dsq_z(sq, premsa, tr, idx, z)]); apos = matmap[tr[idx]->k[z]]; /* i.e. one past the match column. remember, text mode is 0..alen-1 */ break; case p7T_D: if (matuse[tr[idx]->k[z]]) /* bug #h77: if all column is deletes, do nothing; do NOT overwrite a column */ msa->aseq[idx][-1+matmap[tr[idx]->k[z]]] = '-'; /* overwrites ~ in Dk column on X->Dk */ apos = matmap[tr[idx]->k[z]]; break; case p7T_I: if ( !(optflags & p7_TRIM) || (tr[idx]->k[z] != 0 && tr[idx]->k[z] != M)) { msa->aseq[idx][apos] = tolower(abc->sym[get_dsq_z(sq, premsa, tr, idx, z)]); apos++; } break; case p7T_N: case p7T_C: if (! (optflags & p7_TRIM) && tr[idx]->i[z] > 0) { msa->aseq[idx][apos] = tolower(abc->sym[get_dsq_z(sq, premsa, tr, idx, z)]); apos++; } break; case p7T_E: apos = matmap[M]; /* set position for C-terminal tail */ break; case p7T_X: /* Mark fragments (B->X and X->E containing core traces): * convert flanks from gaps to ~ */ if (tr[idx]->st[z-1] == p7T_B) { /* B->X leader. This is a core trace and a fragment. Convert leading gaps to ~ */ for (apos = 0; apos < matmap[tr[idx]->k[z+1]]; apos++) msa->aseq[idx][apos] = '~'; /* tricky; apos exactly where it must be for X->Ik; see comments in make_digital_msa() */ } else if (tr[idx]->st[z+1] == p7T_E) { /* X->E trailer. This is a core trace and a fragment. Convert trailing gaps to ~ */ for (; apos < alen; apos++) msa->aseq[idx][apos] = '~'; } else ESL_XEXCEPTION(eslECORRUPT, "make_text_msa(): X state in unexpected position in trace"); break; default: break; } } } msa->nseq = nseq; msa->alen = alen; *ret_msa = msa; return eslOK; ERROR: if (msa != NULL) esl_msa_Destroy(msa); *ret_msa = NULL; return status; } /* annotate_rf() * Synopsis: Add RF reference coordinate annotation line to new MSA. * Incept: SRE, Fri Jan 16 09:30:08 2009 [Janelia] * * Purpose: Create an RF reference coordinate annotation line that annotates the * consensus columns: the columns associated with profile match states. * * Recall that msa->rf is when unset/by default in an MSA; * msa->rf[0..alen-1] = 'x' | '.' is the simplest convention; * msa->rf is a NUL-terminated string (msa->rf[alen] = '\0') * * Args: msa - alignment to annotate (rf> is allocated, set) * M - profile length * matuse - matuse[1..M] == TRUE | FALSE : is this match state represented * by a column in the alignment. * matmap - matmap[1..M] == (1..alen): if matuse[k], then what alignment column * does state k map to. * * Returns: on success; msa->rf is set to an appropriate reference * coordinate string. * * Throws: on allocation failure. */ static int annotate_rf(ESL_MSA *msa, int M, const int *matuse, const int *matmap) { int apos, k; int status; ESL_ALLOC(msa->rf, sizeof(char) * (msa->alen+1)); for (apos = 0; apos < msa->alen; apos++) msa->rf[apos] = '.'; msa->rf[msa->alen] = '\0'; for (k = 1; k <= M; k++) if (matuse[k]) msa->rf[matmap[k]-1] = 'x'; /* watch off by one: rf[0..alen-1]; matmap[] = 1..alen */ return eslOK; ERROR: return status; } /* annotate_mm() * Synopsis: Add MM reference coordinate annotation line to new MSA. * * Purpose: Create an MM Model Mask annotation line that annotates the * consensus columns: the columns associated with profile match states. * * Recall that msa->mm is when unset/by default in an MSA; * msa->mm[0..alen-1] = 'm' | '.' is the simplest convention; * msa->mm is a NUL-terminated string (msa->mm[alen] = '\0') * * Args: msa - alignment to annotate (rf> is allocated, set) * M - profile length * matuse - matuse[1..M] == TRUE | FALSE : is this match state represented * by a column in the alignment. * matmap - matmap[1..M] == (1..alen): if matuse[k], then what alignment column * does state k map to. * * Returns: on success; msa->mm is set to an appropriate model mask * coordinate string. * * Throws: on allocation failure. */ static int annotate_mm(ESL_MSA *msa, P7_HMM * hmm, const int *matuse, const int *matmap) { int apos, k; int status; if (hmm->mm == NULL) return eslOK; //nothing to do ESL_ALLOC(msa->mm, sizeof(char) * (msa->alen+1)); for (apos = 0; apos < msa->alen; apos++) msa->mm[apos] = '.'; msa->mm[msa->alen] = '\0'; for (k = 0; k < hmm->M; k++) if (matuse[k]) msa->mm[matmap[k]-1] = hmm->mm[k]; return eslOK; ERROR: return status; } /* annotate_posterior_probability() * Synopsis: Add posterior probability annotation lines to new MSA. */ static int annotate_posterior_probability(ESL_MSA *msa, P7_TRACE **tr, const int *matmap, int M, int optflags) { double *totp = NULL; /* total posterior probability in column : [0..alen-1] */ int *matuse = NULL; /* #seqs with pp annotation in column : [0..alen-1] */ int idx; /* counter over sequences [0..nseq-1] */ int apos; /* counter for alignment columns: pp's are [0..alen-1] (unlike ax) */ int z; /* counter over trace positions [0..tr->N-1] */ int status; /* Determine if any of the traces have posterior probability annotation. */ for (idx = 0; idx < msa->nseq; idx++) if (tr[idx]->pp != NULL) break; if (idx == msa->nseq) return eslOK; ESL_ALLOC(matuse, sizeof(double) * (msa->alen)); esl_vec_ISet(matuse, msa->alen, 0); ESL_ALLOC(totp, sizeof(double) * (msa->alen)); esl_vec_DSet(totp, msa->alen, 0.0); ESL_ALLOC(msa->pp, sizeof(char *) * msa->sqalloc); for (idx = 0; idx < msa->nseq; idx++) { if (tr[idx]->pp == NULL) { msa->pp[idx] = NULL; continue; } ESL_ALLOC(msa->pp[idx], sizeof(char) * (msa->alen+1)); for (apos = 0; apos < msa->alen; apos++) msa->pp[idx][apos] = '.'; msa->pp[idx][msa->alen] = '\0'; apos = 0; for (z = 0; z < tr[idx]->N; z++) { switch (tr[idx]->st[z]) { case p7T_M: msa->pp[idx][matmap[tr[idx]->k[z]]-1] = p7_alidisplay_EncodePostProb(tr[idx]->pp[z]); totp [matmap[tr[idx]->k[z]]-1]+= tr[idx]->pp[z]; matuse[matmap[tr[idx]->k[z]]-1]++; case p7T_D: apos = matmap[tr[idx]->k[z]]; break; case p7T_I: if ( !(optflags & p7_TRIM) || (tr[idx]->k[z] != 0 && tr[idx]->k[z] != M)) { msa->pp[idx][apos] = p7_alidisplay_EncodePostProb(tr[idx]->pp[z]); apos++; } break; case p7T_N: case p7T_C: if (! (optflags & p7_TRIM) && tr[idx]->i[z] > 0) { msa->pp[idx][apos] = p7_alidisplay_EncodePostProb(tr[idx]->pp[z]); apos++; } break; case p7T_E: apos = matmap[M]; /* set position for C-terminal tail */ break; default: break; } } } for (; idx < msa->sqalloc; idx++) msa->pp[idx] = NULL; /* for completeness, following easel MSA conventions, but should be a no-op: nseq==sqalloc */ /* Consensus posterior probability annotation: only on match columns */ ESL_ALLOC(msa->pp_cons, sizeof(char) * (msa->alen+1)); for (apos = 0; apos < msa->alen; apos++) msa->pp_cons[apos] = '.'; msa->pp_cons[msa->alen] = '\0'; for (apos = 0; apos < msa->alen; apos++) if (matuse[apos]) msa->pp_cons[apos] = p7_alidisplay_EncodePostProb( totp[apos] / (double) matuse[apos]); free(matuse); free(totp); return eslOK; ERROR: if (matuse != NULL) free(matuse); if (totp != NULL) free(totp); if (msa->pp != NULL) esl_Free2D((void **) msa->pp, msa->sqalloc); return status; } /* Function: rejustify_insertions_digital() * Synopsis: * Incept: SRE, Thu Oct 23 13:06:12 2008 [Janelia] * * Purpose: * * Args: msa - alignment to rejustify * digital mode: ax[0..nseq-1][1..alen] and abc is valid * text mode: aseq[0..nseq-1][0..alen-1] * inserts - # of inserted columns following node k, for k=0.1..M * inserts[0] is for N state; inserts[M] is for C state * matmap - index of column associated with node k [k=0.1..M; matmap[0] = 0] * this is an alignment column index 1..alen, same offset as * if applied to text mode aseq or annotation, remember to -1 * if no residues use match state k, matmap[k] is the * index of the last column used before node k's columns * start: thus matmap[k]+1 is always the start of * node k's insertion (if any). * matuse - TRUE if an alignment column is associated with node k: [k=0.1..M; matuse[0] = 0]. * if matuse[k] == 0, every sequence deleted at node k, * and we're collapsing the column rather than showing all * gaps. * * Note: The insertion for node k is of length columns, * and in 1..alen coords it runs from * matmap[k]+1 .. matmap[k+1]-matuse[k+1]. * * * Returns: * * Throws: (no abnormal error conditions) * * Xref: */ static int rejustify_insertions_digital(ESL_MSA *msa, const int *inserts, const int *matmap, const int *matuse, int M) { int idx; int k; int apos; int nins; int npos, opos; for (idx = 0; idx < msa->nseq; idx++) { for (k = 0; k < M; k++) if (inserts[k] > 1) { for (nins = 0, apos = matmap[k]+1; apos <= matmap[k+1]-matuse[k+1]; apos++) if (esl_abc_XIsResidue(msa->abc, msa->ax[idx][apos])) nins++; if (k == 0) nins = 0; /* N-terminus is right justified */ else nins /= 2; /* split in half; nins now = # of residues left left-justified */ opos = npos = matmap[k+1]-matuse[k+1]; while (opos >= matmap[k]+1+nins) { if (esl_abc_XIsGap(msa->abc, msa->ax[idx][opos])) opos--; else { msa->ax[idx][npos] = msa->ax[idx][opos]; if (msa->pp != NULL && msa->pp[idx] != NULL) msa->pp[idx][npos-1] = msa->pp[idx][opos-1]; npos--; opos--; } } while (npos >= matmap[k]+1+nins) { msa->ax[idx][npos] = esl_abc_XGetGap(msa->abc); if (msa->pp != NULL && msa->pp[idx] != NULL) msa->pp[idx][npos-1] = '.'; npos--; } } } return eslOK; } static int rejustify_insertions_text(const ESL_ALPHABET *abc, ESL_MSA *msa, const int *inserts, const int *matmap, const int *matuse, int M) { int idx; int k; int apos; int nins; int npos, opos; for (idx = 0; idx < msa->nseq; idx++) { for (k = 0; k < M; k++) if (inserts[k] > 1) { for (nins = 0, apos = matmap[k]; apos < matmap[k+1]-matuse[k+1]; apos++) if (esl_abc_CIsResidue(abc, msa->aseq[idx][apos])) nins++; if (k == 0) nins = 0; /* N-terminus is right justified */ else nins /= 2; /* split in half; nins now = # of residues left left-justified */ opos = npos = -1+matmap[k+1]-matuse[k+1]; while (opos >= matmap[k]+nins) { if (esl_abc_CIsGap(abc, msa->aseq[idx][opos])) opos--; else { msa->aseq[idx][npos] = msa->aseq[idx][opos]; if (msa->pp != NULL && msa->pp[idx] != NULL) msa->pp[idx][npos] = msa->pp[idx][opos]; npos--; opos--; } } while (npos >= matmap[k]+nins) { msa->aseq[idx][npos] = '.'; if (msa->pp != NULL && msa->pp[idx] != NULL) msa->pp[idx][npos] = '.'; npos--; } } } return eslOK; } /*---------------- end, internal functions ----------------------*/ /***************************************************************** * 3. Test driver *****************************************************************/ #ifdef p7TRACEALIGN_TRACESTATS_TESTDRIVE /* gcc -o p7_tracealign_tracestats_test -msse2 -std=gnu99 -g -O2 -I. -L. -I../easel -L../easel -Dp7TRACEALIGN_TRACESTATS_TESTDRIVE tracealign.c -lhmmer -leasel -lm ./p7_tracealign_tracestats_test ../tutorial/SNORD96.hmm ../tutorial/SNORD96.sto */ #include "p7_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_vectorops.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "output alignment to file , not stdout", 1 }, { "--trim", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "trim terminal tails of nonaligned residues from alignment", 2 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "assert , both protein: no autodetection", 2 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "assert , both DNA: no autodetection", 2 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "assert , both RNA: no autodetection", 2 }, { "--informat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "assert is in format : no autodetection", 2 }, { "--outformat", eslARG_STRING, "Stockholm", NULL, NULL, NULL, NULL, NULL, "output alignment in format ", 2 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "test driver for P7TRACE_SEQALIGNSTATS"; int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; char *hmmfile = NULL; /* HMM file name */ char *seqfile = NULL; /* sequence file name */ int infmt = eslSQFILE_UNKNOWN; int outfmt = eslMSAFILE_STOCKHOLM; P7_HMMFILE *hfp = NULL; /* open HMM file */ ESL_SQFILE *sqfp = NULL; /* open sequence file */ char *outfile = NULL; /* output filename */ FILE *ofp = stdout; /* output stream */ ESL_SQ **sq = NULL; /* array of sequences */ void *p = NULL; /* tmp ptr for reallocation */ int nseq = 0; /* # of sequences in */ int totseq = 0; /* # of seqs in all sources */ ESL_ALPHABET *abc = NULL; /* alphabet (set from the HMM file)*/ P7_HMM *hmm = NULL; ESL_MSA *msa = NULL; /* resulting multiple alignment */ int msaopts = 0; /* flags to p7_tracealign_Seqs() */ int idx; /* counter over seqs, traces */ int status; /* easel/hmmer return code */ char errbuf[eslERRBUFSIZE]; int j; float **pp; float **relent; float **scores; /* Parse the command line */ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) esl_fatal(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) esl_fatal(argv[0], "Error in configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") ) { p7_banner (stdout, argv[0], banner); esl_usage (stdout, argv[0], usage); puts("\nBasic options:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); puts("\nLess common options:"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); } if (esl_opt_ArgNumber(go) != 2) esl_fatal(argv[0], "Incorrect number of command line arguments.\n"); hmmfile = esl_opt_GetArg(go, 1); seqfile = esl_opt_GetArg(go, 2); if (strcmp(hmmfile, "-") == 0 && strcmp(seqfile, "-") == 0) esl_fatal(argv[0], "Either or may be '-' (to read from stdin), but not both.\n"); msaopts |= p7_ALL_CONSENSUS_COLS; /* default as of 3.1 */ if (esl_opt_GetBoolean(go, "--trim")) msaopts |= p7_TRIM; /* If caller declared an input format, decode it */ if (esl_opt_IsOn(go, "--informat")) { infmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat")); if (infmt == eslSQFILE_UNKNOWN) esl_fatal(argv[0], "%s is not a recognized input sequence file format\n", esl_opt_GetString(go, "--informat")); } /* Determine output alignment file format */ outfmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--outformat")); if (outfmt == eslMSAFILE_UNKNOWN) esl_fatal(argv[0], "%s is not a recognized output MSA file format\n", esl_opt_GetString(go, "--outformat")); /* Open output stream */ if ( (outfile = esl_opt_GetString(go, "-o")) != NULL) { if ((ofp = fopen(outfile, "w")) == NULL) esl_fatal(argv[0], "failed to open -o output file %s for writing\n", outfile); } /* If caller forced an alphabet on us, create the one the caller wants */ if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); /* Read one HMM, and make sure there's only one. */ status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); status = p7_hmmfile_Read(hfp, &abc, &hmm); if (status == eslEFORMAT) p7_Fail("Bad file format in HMM file %s:\n%s\n", hfp->fname, hfp->errbuf); else if (status == eslEINCOMPAT) p7_Fail("HMM in %s is not in the expected %s alphabet\n", hfp->fname, esl_abc_DecodeType(abc->type)); else if (status == eslEOF) p7_Fail("Empty HMM file %s? No HMM data found.\n", hfp->fname); else if (status != eslOK) p7_Fail("Unexpected error in reading HMMs from %s\n", hfp->fname); status = p7_hmmfile_Read(hfp, &abc, NULL); if (status != eslEOF) p7_Fail("HMM file %s does not contain just one HMM\n", hfp->fname); p7_hmmfile_Close(hfp); /* Read digital sequences into an array (possibly concat'ed onto mapped seqs) */ status = esl_sqfile_OpenDigital(abc, seqfile, infmt, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("Failed to open sequence file %s for reading\n", seqfile); else if (status == eslEFORMAT) p7_Fail("Sequence file %s is empty or misformatted\n", seqfile); else if (status != eslOK) p7_Fail("Unexpected error %d opening sequence file %s\n", status, seqfile); ESL_RALLOC(sq, p, sizeof(ESL_SQ *) * (totseq + 1)); sq[totseq] = esl_sq_CreateDigital(abc); nseq = 0; while ((status = esl_sqio_Read(sqfp, sq[totseq+nseq])) == eslOK) { nseq++; ESL_RALLOC(sq, p, sizeof(ESL_SQ *) * (totseq+nseq+1)); sq[totseq+nseq] = esl_sq_CreateDigital(abc); } if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (status != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", status, sqfp->filename); esl_sqfile_Close(sqfp); totseq += nseq; /* Remaining initializations, including trace array allocation */ ESL_ALLOC(pp, sizeof(float*) * totseq ); ESL_ALLOC(relent, sizeof(float*) * totseq ); ESL_ALLOC(scores, sizeof(float*) * totseq ); for (idx = 0; idx < totseq; idx++) { ESL_ALLOC(pp[idx], sizeof(float) * (1+sq[idx]->L)); ESL_ALLOC(relent[idx], sizeof(float) * (1+sq[idx]->L)); ESL_ALLOC(scores[idx], sizeof(float) * (1+sq[idx]->L)); } p7_tracealign_getMSAandStats(hmm, sq, totseq, &msa, pp, relent, scores); eslx_msafile_Write(ofp, msa, outfmt); for (idx = 0; idx < totseq; idx++) { printf("%s\n------------------\n", sq[idx]->name); for (j=1; j<=sq[idx]->L; j++) { printf("%d: %.3f %.3f %.3f\n", j, pp[idx][j], relent[idx][j], scores[idx][j]); } printf("\n\n"); } for (idx = 0; idx < totseq; idx++) { free(pp[idx]); free(relent[idx]); free(scores[idx]); } free(pp); free(relent); free(scores); for (idx = 0; idx <= totseq; idx++) esl_sq_Destroy(sq[idx]); /* including sq[nseq] because we overallocated */ free(sq); esl_msa_Destroy(msa); p7_hmm_Destroy(hmm); if (ofp != stdout) fclose(ofp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return eslOK; ERROR: return status; } #endif /*p7TRACE_SEQALIGNSTATS_TESTDRIVE*/ /*--------------------- end, test driver ------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/h2_io.c0000664361611702660230000003211412473612613014224 0ustar wheelerteddy/* Input/output of HMMER3 HMMs in HMMER2 save file formats: * for backwards compatibility. * * Contents: * 1. Writing profiles in HMMER2 format. * 2. Copyright and license information */ #include "p7_config.h" #include #include #include #include "hmmer.h" #include "easel.h" static int h2_multiline(FILE *fp, const char *pfx, char *s); static int printprob(FILE *fp, int fieldwidth, float p, float null); /***************************************************************** *= 1. Writing profiles in HMMER2 format *****************************************************************/ /* Function: p7_h2io_WriteASCII() * Synopsis: Write an H3 HMM in HMMER2 compatible format * * Purpose: Write HMM to stream in HMMER2 ASCII save * file format. * * HMMER2 saved the null model and the search configuration * (local vs. glocal, for example) as part of its HMM file; * H3 only saves the core HMM. The HMMER2 file is created * for HMMER2's default ``ls mode'' (glocal) with default * null model transitions and default special state * transitions (NECJ). * * Optional statistical calibration and alignment checksum * are not written, because for these H3 and H2 differ too * much. * * Args: fp - stream to write save file format to * hmm - HMM to save * * Returns: on success. * * Throws: on allocation error. * * if can't be converted; for example, if * it is not in a protein or nucleic acid alphabet (H2 * requires biosequence in its save files). * * if any write fails; for example, if the * disk fills up. */ int p7_h2io_WriteASCII(FILE *fp, P7_HMM *hmm) { P7_BG *bg; /* H2 saves null model in HMM file */ int k; /* counter for nodes */ int x; /* counter for symbols */ int ts; /* counter for state transitions */ float pmove,ploop; /* default H2 null model transitions */ int status; if ((bg = p7_bg_Create(hmm->abc)) == NULL) { status = eslEMEM; goto ERROR; } /* magic header */ if (fprintf(fp, "HMMER2.0 [converted from %s]\n", HMMER_VERSION) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); if (fprintf(fp, "NAME %s\n", hmm->name) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); if (hmm->acc && fprintf(fp, "ACC %s\n", hmm->acc) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); if (hmm->desc && fprintf(fp, "DESC %s\n", hmm->desc) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); if (fprintf(fp, "LENG %d\n", hmm->M) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); if (hmm->abc->type == eslAMINO) { if (fprintf(fp, "ALPH Amino\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); } else if (hmm->abc->type == eslDNA) { if (fprintf(fp, "ALPH Nucleic\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); } else if (hmm->abc->type == eslRNA) { if (fprintf(fp, "ALPH Nucleic\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); } else ESL_XEXCEPTION(eslEINVAL, "Only protein, DNA, RNA HMMs can be saved in H2 format"); if (fprintf(fp, "RF %s\n", (hmm->flags & p7H_RF) ? "yes" : "no") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); if (fprintf(fp, "CS %s\n", (hmm->flags & p7H_CS) ? "yes" : "no") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); if (fprintf(fp, "MAP %s\n", (hmm->flags & p7H_MAP) ? "yes" : "no") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); /* H3 consensus line has no counterpart in H2 */ if (hmm->comlog != NULL) { if ( (status = h2_multiline(fp, "COM ", hmm->comlog)) != eslOK) goto ERROR; } if (hmm->nseq != -1) { if ( fprintf (fp, "NSEQ %d\n", hmm->nseq) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); } if (hmm->ctime != NULL) { if ( fprintf (fp, "DATE %s\n", hmm->ctime) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); } /* Checksum is not written; H2 and H3 use different checksum algorithms */ if (hmm->flags & p7H_GA) { if (fprintf(fp, "GA %.1f %.1f\n", hmm->cutoff[p7_GA1], hmm->cutoff[p7_GA2]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); } if (hmm->flags & p7H_TC) { if (fprintf(fp, "TC %.1f %.1f\n", hmm->cutoff[p7_TC1], hmm->cutoff[p7_TC2]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); } if (hmm->flags & p7H_NC) { if (fprintf(fp, "NC %.1f %.1f\n", hmm->cutoff[p7_NC1], hmm->cutoff[p7_NC2]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); } /* in H3, the HMM does not include NECJ; these are part of the profile. * for emulating H2 output, assume default LS config */ if (fputs("XT ", fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); pmove = ( (hmm->abc->type == eslAMINO) ? 1./351. : 1./1001.); ploop = ( (hmm->abc->type == eslAMINO) ? 350./351. : 1000./1001.); if ( (status = printprob(fp, 6, pmove, 1.0)) != eslOK) goto ERROR; /* NB */ if ( (status = printprob(fp, 6, ploop, 1.0)) != eslOK) goto ERROR; /* NN */ if ( (status = printprob(fp, 6, 0.5, 1.0)) != eslOK) goto ERROR; /* EC */ if ( (status = printprob(fp, 6, 0.5, 1.0)) != eslOK) goto ERROR; /* EJ */ if ( (status = printprob(fp, 6, pmove, 1.0)) != eslOK) goto ERROR; /* CT */ if ( (status = printprob(fp, 6, ploop, 1.0)) != eslOK) goto ERROR; /* CC */ if ( (status = printprob(fp, 6, pmove, 1.0)) != eslOK) goto ERROR; /* JB */ if ( (status = printprob(fp, 6, ploop, 1.0)) != eslOK) goto ERROR; /* JJ */ if (fputc('\n', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); /* Save the default H2 null model transitions, not H3's null model transitions */ if (fprintf(fp, "NULT ") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); if ( (status = printprob(fp, 6, ploop, 1.0)) != eslOK) goto ERROR; /* 1-p1 */ if ( (status = printprob(fp, 6, pmove, 1.0)) != eslOK) goto ERROR; /* p1 */ if (fputc('\n', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); /* but null emissions really are the H3 null model emissions */ if (fputs("NULE ", fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); for (x = 0; x < hmm->abc->K; x++) { if ( (status = printprob(fp, 6, bg->f[x], 1./(float)hmm->abc->K)) != eslOK) goto ERROR; } if (fputc('\n', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); /* Don't save stats; H3 local alignment stats are different from H2 calibration */ /* The main model section */ if (fprintf(fp, "HMM ") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); for (x = 0; x < hmm->abc->K; x++) { if (fprintf(fp, " %c ", hmm->abc->sym[x]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); } if (fprintf(fp, "\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); if (fprintf(fp, " %6s %6s %6s %6s %6s %6s %6s %6s %6s\n", "m->m", "m->i", "m->d", "i->m", "i->i", "d->m", "d->d", "b->m", "m->e") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); /* Print HMM parameters (main section of the save file) */ if (fprintf(fp, " ") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); if ( (status = printprob(fp, 6, 1.-hmm->t[0][p7H_MD], 1.0)) != eslOK) goto ERROR; if (fprintf(fp, " %6s", "*") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); if ( (status = printprob(fp, 6, hmm->t[0][p7H_MD], 1.0)) != eslOK) goto ERROR; if (fputc('\n', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); for (k = 1; k <= hmm->M; k++) { /* Line 1: k, match emissions, map */ if (fprintf(fp, " %5d ", k) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); for (x = 0; x < hmm->abc->K; x++) if ( (status = printprob(fp, 6, hmm->mat[k][x], bg->f[x])) != eslOK) goto ERROR; if (hmm->flags & p7H_MAP) { if (fprintf(fp, " %5d", hmm->map[k]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); } if (fputc('\n', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); /* Line 2: RF and insert emissions */ if (fprintf(fp, " %5c ", hmm->flags & p7H_RF ? hmm->rf[k] : '-') < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); for (x = 0; x < hmm->abc->K; x++) if ( (status = printprob(fp, 6, ((k < hmm->M) ? hmm->ins[k][x] : 0.0), bg->f[x])) != eslOK) goto ERROR; if (fputc('\n', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); /* Line 3: CS and transition probs */ if (fprintf(fp, " %5c ", hmm->flags & p7H_CS ? hmm->cs[k] : '-') < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); for (ts = 0; ts < 7; ts++) if ( (status = printprob(fp, 6, ((k < hmm->M) ? hmm->t[k][ts] : 0.0), 1.0)) != eslOK) goto ERROR; if ( (status = printprob(fp, 6, ((k==1) ? hmm->t[0][p7H_MM] : 0.0), 1.0)) != eslOK) goto ERROR; if ( (status = printprob(fp, 6, ((kM) ? 0.0: 1.0), 1.0)) != eslOK) goto ERROR; if (fputc('\n', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); } if (fputs("//\n", fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); p7_bg_Destroy(bg); return eslOK; ERROR: p7_bg_Destroy(bg); return status; } /* h2_multiline() * * Used to print the command log to HMMER2 ASCII save files. * H3 records command numbers in brackets, as in "COM [1] hmmbuild ..." * H2 just records commands, as in "COM hmmbuild ...". * Compare p7_hmmfile.c::multiline(). * * Given a record (like the comlog) that contains * multiple lines, print it as multiple lines with * a given prefix. e.g.: * * given: "COM ", "foo\nbar\nbaz" * print: COM foo * COM bar * COM baz * * If is NULL, no-op. Otherwise must be a -terminated * string. It does not matter if it ends in <\n> or not. * must be a valid -terminated string; it may be empty. * * Args: fp: FILE to print to * pfx: prefix for each line * s: line to break up and print; tolerates a NULL * * Returns: on success. * * Throws: on any write error. */ static int h2_multiline(FILE *fp, const char *pfx, char *s) { char *sptr = s; char *end = NULL; int n = 0; do { end = strchr(sptr, '\n'); if (end != NULL) /* if there's no \n left, end == NULL */ { n = end - sptr; /* n chars exclusive of \n */ if (fprintf(fp, "%s ", pfx) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); if (fwrite(sptr, sizeof(char), n, fp) != n) ESL_EXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); /* using fwrite lets us write fixed # of chars */ if (fprintf(fp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); /* while writing \n w/ printf allows newline conversion */ sptr += n + 1; /* +1 to get past \n */ } else { if (fprintf(fp, "%s %s\n", pfx, sptr) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); /* last line */ } } while (end != NULL && *sptr != '\0'); /* *sptr == 0 if terminates with a \n */ return eslOK; } /* printprob() * Print a probability (with a leading space), formatted * for an H2 ASCII save file. * * Returns: on success. * * Throws: on any write failure. */ static int printprob(FILE *fp, int fieldwidth, float p, float null) { if (p == 0.0) { if (fprintf(fp, " %*s", fieldwidth, "*") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); } else if (null == 1.0 && p == 1.0) { if (fprintf(fp, " %*d", fieldwidth, 0) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); } else { if (fprintf(fp, " %*d", fieldwidth, (int) floor(0.5 + 1442.695 * log(p/null))) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "h2 profile write failed"); } return eslOK; } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: h2_io.c 3722 2011-10-24 17:23:02Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/h2_io.c $ *****************************************************************/ hmmer-3.1b2/src/hmmfetch.c0000664361611702660230000003126112473612613015021 0ustar wheelerteddy/* Fetch an HMM from an HMM database (such as Pfam) * * SRE, Mon Jun 18 09:30:06 2007 [Janelia] * SVN $Id: hmmfetch.c 3546 2011-05-23 14:36:44Z eddys $ */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_fileparser.h" #include "esl_getopts.h" #include "esl_keyhash.h" #include "esl_ssi.h" #include "hmmer.h" static char banner[] = "retrieve profile HMM(s) from a file"; static char usage1[] = "[options] (retrieves HMM named )"; static char usage2[] = "[options] -f (retrieves all HMMs in )"; static char usage3[] = "[options] --index (indexes )"; static void cmdline_failure(char *argv0, char *format, ...) { va_list argp; va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); esl_usage(stdout, argv0, usage1); esl_usage(stdout, argv0, usage2); esl_usage(stdout, argv0, usage3); printf("\nTo see more help on available options, do %s -h\n\n", argv0); exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { esl_banner(stdout, argv0, banner); esl_usage (stdout, argv0, usage1); esl_usage (stdout, argv0, usage2); esl_usage (stdout, argv0, usage3); puts("\nOptions:"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); exit(0); } static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "help; show brief info on version and usage", 0 }, { "-f", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL,"--index", "second cmdline arg is a file of names to retrieve", 0 }, { "-o", eslARG_OUTFILE,FALSE,NULL, NULL, NULL, NULL,"-O,--index", "output HMM to file instead of stdout", 0 }, { "-O", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL,"-o,-f,--index","output HMM to file named ", 0 }, { "--index", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "index the , creating .ssi", 0 }, { 0,0,0,0,0,0,0,0,0,0 }, }; static void create_ssi_index(ESL_GETOPTS *go, P7_HMMFILE *hfp); static void multifetch(ESL_GETOPTS *go, FILE *ofp, char *keyfile, P7_HMMFILE *hfp); static void onefetch(ESL_GETOPTS *go, FILE *ofp, char *key, P7_HMMFILE *hfp); int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* application configuration */ char *hmmfile = NULL; /* HMM file name */ char *keyfile = NULL; /* keyfile name */ char *keyname = NULL; /* key name */ P7_HMMFILE *hfp = NULL; /* open HMM file */ FILE *ofp = NULL; /* output stream for HMMs */ int status; /* easel/hmmer return code */ char errbuf[eslERRBUFSIZE]; /*********************************************** * Parse command line ***********************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], "Error in configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") ) cmdline_help (argv[0], go); if (esl_opt_ArgNumber(go) < 1) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); /* Check arguments. Consider three modes separately. */ if (esl_opt_GetBoolean(go, "--index")) { if (esl_opt_ArgNumber(go) != 1) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); hmmfile = esl_opt_GetArg(go, 1); keyfile = NULL; keyname = NULL; if (strcmp(hmmfile, "-") == 0) cmdline_failure(argv[0], "Can't use - with --index, can't index .\n"); } else if (esl_opt_GetBoolean(go, "-f")) { if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); hmmfile = esl_opt_GetArg(go, 1); keyfile = esl_opt_GetArg(go, 2); keyname = NULL; if (strcmp(hmmfile, "-") == 0 && strcmp(keyfile, "-") == 0) cmdline_failure(argv[0], "Either or can be - but not both.\n"); } else { if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); hmmfile = esl_opt_GetArg(go, 1); keyfile = NULL; keyname = esl_opt_GetArg(go, 2); } /* Open the HMM file. */ status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); /* Open the output file, if any */ if (esl_opt_GetBoolean(go, "-O")) { if (! keyname) p7_Fail("No key name? Can't use -O\n"); if ((ofp = fopen(keyname, "w")) == NULL) p7_Fail("Failed to open output file %s\n", keyname); } else if (esl_opt_GetString(go, "-o") != NULL) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) esl_fatal("Failed to open output file %s\n", esl_opt_GetString(go, "-o")); } else ofp = stdout; /* Hand off to the appropriate routine */ if (esl_opt_GetBoolean(go, "--index")) create_ssi_index(go, hfp); else if (esl_opt_GetBoolean(go, "-f")) multifetch(go, ofp, keyfile, hfp); else { onefetch(go, ofp, keyname, hfp); if (ofp != stdout) printf("\n\nRetrieved HMM %s.\n", keyname); } if (esl_opt_GetBoolean(go, "-O") || esl_opt_GetString(go, "-o") != NULL) fclose(ofp); p7_hmmfile_Close(hfp); esl_getopts_Destroy(go); exit(0); } /* Create an SSI index file for open HMM file . * Both name and accession of HMMs are stored as keys. */ static void create_ssi_index(ESL_GETOPTS *go, P7_HMMFILE *hfp) { ESL_NEWSSI *ns = NULL; ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; int nhmm = 0; char *ssifile = NULL; uint16_t fh; int status; if (esl_sprintf(&ssifile, "%s.ssi", hfp->fname) != eslOK) p7_Die("esl_sprintf() failed"); status = esl_newssi_Open(ssifile, FALSE, &ns); if (status == eslENOTFOUND) esl_fatal("failed to open SSI index %s", ssifile); else if (status == eslEOVERWRITE) esl_fatal("SSI index %s already exists; delete or rename it", ssifile); else if (status != eslOK) esl_fatal("failed to create a new SSI index"); if (esl_newssi_AddFile(ns, hfp->fname, 0, &fh) != eslOK) /* 0 = format code (HMMs don't have any yet) */ esl_fatal("Failed to add HMM file %s to new SSI index\n", hfp->fname); printf("Working... "); fflush(stdout); while ((status = p7_hmmfile_Read(hfp, &abc, &hmm)) != eslEOF) { if (status == eslEOD) p7_Fail("read failed, HMM file %s may be truncated?", hfp->fname); else if (status == eslEFORMAT) p7_Fail("bad file format in HMM file %s", hfp->fname); else if (status == eslEINCOMPAT) p7_Fail("HMM file %s contains different alphabets", hfp->fname); else if (status != eslOK) p7_Fail("Unexpected error in reading HMMs from %s", hfp->fname); nhmm++; if (hmm->name == NULL) p7_Fail("Every HMM must have a name to be indexed. Failed to find name of HMM #%d\n", nhmm); if (esl_newssi_AddKey(ns, hmm->name, fh, hmm->offset, 0, 0) != eslOK) p7_Fail("Failed to add key %s to SSI index", hmm->name); if (hmm->acc) { if (esl_newssi_AddAlias(ns, hmm->acc, hmm->name) != eslOK) p7_Fail("Failed to add secondary key %s to SSI index", hmm->acc); } p7_hmm_Destroy(hmm); } if (esl_newssi_Write(ns) != eslOK) p7_Fail("Failed to write keys to ssi file %s\n", ssifile); printf("done.\n"); if (ns->nsecondary > 0) printf("Indexed %d HMMs (%ld names and %ld accessions).\n", nhmm, (long) ns->nprimary, (long) ns->nsecondary); else printf("Indexed %d HMMs (%ld names).\n", nhmm, (long) ns->nprimary); printf("SSI index written to file %s\n", ssifile); free(ssifile); esl_alphabet_Destroy(abc); esl_newssi_Close(ns); return; } /* multifetch: * given a file containing lines with one name or key per line; * parse the file line-by-line; * if we have an SSI index available, retrieve the HMMs by key * as we see each line; * else, without an SSI index, store the keys in a hash, then * read the entire HMM file in a single pass, outputting HMMs * that are in our keylist. * * Note that with an SSI index, you get the HMMs in the order they * appear in the , but without an SSI index, you get HMMs in * the order they occur in the HMM file. */ static void multifetch(ESL_GETOPTS *go, FILE *ofp, char *keyfile, P7_HMMFILE *hfp) { ESL_KEYHASH *keys = esl_keyhash_Create(); ESL_FILEPARSER *efp = NULL; ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; int nhmm = 0; char *key; int keylen; int keyidx; int status; if (esl_fileparser_Open(keyfile, NULL, &efp) != eslOK) p7_Fail("Failed to open key file %s\n", keyfile); esl_fileparser_SetCommentChar(efp, '#'); while (esl_fileparser_NextLine(efp) == eslOK) { if (esl_fileparser_GetTokenOnLine(efp, &key, &keylen) != eslOK) p7_Fail("Failed to read HMM name on line %d of file %s\n", efp->linenumber, keyfile); status = esl_keyhash_Store(keys, key, -1, &keyidx); if (status == eslEDUP) p7_Fail("HMM key %s occurs more than once in file %s\n", key, keyfile); if (hfp->ssi != NULL) { onefetch(go, ofp, key, hfp); nhmm++; } } if (hfp->ssi == NULL) { while ((status = p7_hmmfile_Read(hfp, &abc, &hmm)) != eslEOF) { if (status == eslEOD) p7_Fail("read failed, HMM file %s may be truncated?", hfp->fname); else if (status == eslEFORMAT) p7_Fail("bad file format in HMM file %s", hfp->fname); else if (status == eslEINCOMPAT) p7_Fail("HMM file %s contains different alphabets", hfp->fname); else if (status != eslOK) p7_Fail("Unexpected error in reading HMMs from %s", hfp->fname); if (esl_keyhash_Lookup(keys, hmm->name, -1, &keyidx) == eslOK || ((hmm->acc) && esl_keyhash_Lookup(keys, hmm->acc, -1, &keyidx) == eslOK)) { p7_hmmfile_WriteASCII(ofp, -1, hmm); nhmm++; } p7_hmm_Destroy(hmm); } } if (ofp != stdout) printf("\nRetrieved %d HMMs.\n", nhmm); if (abc != NULL) esl_alphabet_Destroy(abc); esl_keyhash_Destroy(keys); esl_fileparser_Close(efp); return; } /* onefetch(): * Given one (an HMM name or accession), retrieve the corresponding HMM. * In SSI mode, we can do this quickly by positioning the file, then reading * and writing the HMM that's at that position. * Without an SSI index, we have to parse the HMMs sequentially 'til we find * the one we're after. */ static void onefetch(ESL_GETOPTS *go, FILE *ofp, char *key, P7_HMMFILE *hfp) { ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; int status; if (hfp->ssi != NULL) { status = p7_hmmfile_PositionByKey(hfp, key); if (status == eslENOTFOUND) p7_Fail("HMM %s not found in SSI index for file %s\n", key, hfp->fname); else if (status == eslEFORMAT) p7_Fail("Failed to parse SSI index for %s\n", hfp->fname); else if (status != eslOK) p7_Fail("Failed to look up location of HMM %s in SSI index of file %s\n", key, hfp->fname); } while ((status = p7_hmmfile_Read(hfp, &abc, &hmm)) != eslEOF) { if (status == eslEOD) p7_Fail("read failed, HMM file %s may be truncated?", hfp->fname); else if (status == eslEFORMAT) p7_Fail("bad file format in HMM file %s", hfp->fname); else if (status == eslEINCOMPAT) p7_Fail("HMM file %s contains different alphabets", hfp->fname); else if (status != eslOK) p7_Fail("Unexpected error in reading HMMs from %s", hfp->fname); if (strcmp(key, hmm->name) == 0 || (hmm->acc && strcmp(key, hmm->acc) == 0)) break; p7_hmm_Destroy(hmm); hmm = NULL; } if (status == eslOK) { p7_hmmfile_WriteASCII(ofp, -1, hmm); p7_hmm_Destroy(hmm); } else p7_Fail("HMM %s not found in file %s\n", key, hfp->fname); esl_alphabet_Destroy(abc); } hmmer-3.1b2/src/hmmdwrkr.c0000664361611702660230000007462012473612613015067 0ustar wheelerteddy/* worker side of the hmmer daemon */ #include "p7_config.h" #ifdef HMMER_THREADS #include #include #include #include #include #include #include #include #include #ifdef HAVE_NETINET_IN_H #include /* On FreeBSD, you need netinet/in.h for struct sockaddr_in */ #endif /* On OpenBSD, netinet/in.h is required for (must precede) arpa/inet.h */ #include #include #include #ifndef HMMER_THREADS #error "Program requires pthreads be enabled." #endif /*HMMER_THREADS*/ #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stopwatch.h" #include "esl_threads.h" #include "hmmer.h" #include "hmmpgmd.h" #include "cachedb.h" #include "p7_hmmcache.h" #define MAX_WORKERS 64 #define MAX_BUFFER 4096 #define CONF_FILE "/etc/hmmpgmd.conf" typedef struct { HMMER_SEQ **sq_list; /* list of sequences to process */ int sq_cnt; /* number of sequences */ int db_Z; /* true number of sequences */ P7_OPROFILE **om_list; /* list of profiles to process */ int om_cnt; /* number of profiles */ pthread_mutex_t *inx_mutex; /* protect data */ int *blk_size; /* sequences per block */ int *limit; /* point to decrease block size */ int *inx; /* next index to process */ P7_HMM *hmm; /* query HMM */ ESL_SQ *seq; /* query sequence */ ESL_ALPHABET *abc; /* digital alphabet */ ESL_GETOPTS *opts; /* search specific options */ RANGE_LIST *range_list; /* (optional) list of ranges searched within the seqdb */ double elapsed; /* elapsed search time */ /* Structure created and populated by the individual threads. * The main thread is responsible for freeing up the memory. */ P7_PIPELINE *pli; /* work pipeline */ P7_TOPHITS *th; /* top hit results */ } WORKER_INFO; typedef struct { int fd; /* socket connection to server */ int ncpus; /* number of cpus to use */ P7_SEQCACHE *seq_db; /* cached sequence database */ P7_HMMCACHE *hmm_db; /* cached hmm database */ } WORKER_ENV; static void process_InitCmd(HMMD_COMMAND *cmd, WORKER_ENV *env); static void process_SearchCmd(HMMD_COMMAND *cmd, WORKER_ENV *env); static void process_Shutdown(HMMD_COMMAND *cmd, WORKER_ENV *env); static QUEUE_DATA *process_QueryCmd(HMMD_COMMAND *cmd, WORKER_ENV *env); static int setup_masterside_comm(ESL_GETOPTS *opts); static void send_results(int fd, ESL_STOPWATCH *w, WORKER_INFO *info); #define BLOCK_SIZE 1000 static void search_thread(void *arg); static void scan_thread(void *arg); static void print_timings(int i, double elapsed, P7_PIPELINE *pli) { char buf1[16]; int h, m, s, hs; h = (int) (elapsed / 3600.); m = (int) (elapsed / 60.) - h * 60; s = (int) (elapsed) - h * 3600 - m * 60; hs = (int) (elapsed * 100.) - h * 360000 - m * 6000 - s * 100; sprintf(buf1, "%02d:%02d.%02d", m,s,hs); fprintf (stdout, "%2d %9" PRId64 " %9" PRId64 " %7" PRId64 " %7" PRId64 " %6" PRId64 " %5" PRId64 " %s\n", i, pli->nseqs, pli->nres, pli->n_past_msv, pli->n_past_bias, pli->n_past_vit, pli->n_past_fwd, buf1); } static int read_Command(HMMD_COMMAND **ret_cmd, WORKER_ENV *env) { HMMD_HEADER hdr; HMMD_COMMAND *cmd = NULL; int n; /* read the command header */ if (readn(env->fd, &hdr, sizeof(hdr)) == -1) { if (errno && errno != ECONNREFUSED) LOG_FATAL_MSG("read", errno); return eslEOD; } /* read the command data */ n = MSG_SIZE(&hdr); if ((cmd = malloc(n)) == NULL) LOG_FATAL_MSG("malloc", errno); memset(cmd, 0, n); /* avoid uninitialized bytes. remove this, if we ever serialize/deserialize structures properly */ cmd->hdr.command = hdr.command; cmd->hdr.length = hdr.length; if (hdr.length > 0) { if (readn(env->fd, &cmd->init, hdr.length) == -1) { if (errno && errno != ECONNREFUSED) LOG_FATAL_MSG("read", errno); return eslEOD; } } *ret_cmd = cmd; return eslOK; } void worker_process(ESL_GETOPTS *go) { HMMD_COMMAND *cmd = NULL; /* see hmmpgmd.h */ int shutdown = 0; WORKER_ENV env; int status; /* Initializations */ impl_Init(); p7_FLogsumInit(); /* we're going to use table-driven Logsum() approximations at times */ if (esl_opt_IsOn(go, "--cpu")) env.ncpus = esl_opt_GetInteger(go, "--cpu"); else esl_threads_CPUCount(&env.ncpus); env.hmm_db = NULL; env.seq_db = NULL; env.fd = setup_masterside_comm(go); while (!shutdown) { if ((status = read_Command(&cmd, &env)) != eslOK) break; switch (cmd->hdr.command) { case HMMD_CMD_INIT: process_InitCmd (cmd, &env); break; case HMMD_CMD_SCAN: process_SearchCmd(cmd, &env); break; case HMMD_CMD_SEARCH: process_SearchCmd(cmd, &env); break; case HMMD_CMD_SHUTDOWN: process_Shutdown (cmd, &env); shutdown = 1; break; default: p7_syslog(LOG_ERR,"[%s:%d] - unknown command %d (%d)\n", __FILE__, __LINE__, cmd->hdr.command, cmd->hdr.length); } free(cmd); cmd = NULL; } if (env.hmm_db) p7_hmmcache_Close(env.hmm_db); if (env.seq_db) p7_seqcache_Close(env.seq_db); if (env.fd != -1) close(env.fd); return; } static void process_SearchCmd(HMMD_COMMAND *cmd, WORKER_ENV *env) { int i; int cnt; int limit; int status; int blk_size; WORKER_INFO *info = NULL; ESL_ALPHABET *abc; ESL_STOPWATCH *w; ESL_THREADS *threadObj = NULL; pthread_mutex_t inx_mutex; int current_index; QUEUE_DATA *query = NULL; time_t date; char timestamp[32]; w = esl_stopwatch_Create(); abc = esl_alphabet_Create(eslAMINO); if (pthread_mutex_init(&inx_mutex, NULL) != 0) p7_Fail("mutex init failed"); ESL_ALLOC(info, sizeof(*info) * env->ncpus); /* Log the current time (at search start) */ date = time(NULL); ctime_r(&date, timestamp); printf("\n%s", timestamp); /* note that ctime_r() leaves \n on end of timestamp */ /* initialize thread data */ query = process_QueryCmd(cmd, env); esl_stopwatch_Start(w); info->range_list = NULL; if (esl_opt_IsUsed(query->opts, "--seqdb_ranges")) { ESL_ALLOC(info->range_list, sizeof(RANGE_LIST)); hmmpgmd_GetRanges(info->range_list, esl_opt_GetString(query->opts, "--seqdb_ranges")); } if (query->cmd_type == HMMD_CMD_SEARCH) threadObj = esl_threads_Create(&search_thread); else threadObj = esl_threads_Create(&scan_thread); if (query->query_type == HMMD_SEQUENCE) { fprintf(stdout, "Search seq %s [L=%ld]", query->seq->name, (long) query->seq->n); } else { fprintf(stdout, "Search hmm %s [M=%d]", query->hmm->name, query->hmm->M); } fprintf(stdout, " vs %s DB %d [%d - %d]", (query->cmd_type == HMMD_CMD_SEARCH) ? "SEQ" : "HMM", query->dbx, query->inx, query->inx + query->cnt - 1); if (info->range_list) fprintf(stdout, " in range(s) %s", esl_opt_GetString(query->opts, "--seqdb_ranges")); fprintf(stdout, "\n"); /* Create processing pipeline and hit list */ for (i = 0; i < env->ncpus; ++i) { info[i].abc = query->abc; info[i].hmm = query->hmm; info[i].seq = query->seq; info[i].opts = query->opts; info[i].range_list = info[0].range_list; info[i].th = NULL; info[i].pli = NULL; info[i].inx_mutex = &inx_mutex; info[i].inx = ¤t_index;/* this is confusing trickery - to share a single variable across all threads */ info[i].blk_size = &blk_size; /* ditto */ info[i].limit = &limit; /* ditto. TODO: come back and clean this up. */ if (query->cmd_type == HMMD_CMD_SEARCH) { HMMER_SEQ **list = env->seq_db->db[query->dbx].list; info[i].sq_list = &list[query->inx]; info[i].sq_cnt = query->cnt; info[i].db_Z = env->seq_db->db[query->dbx].K; info[i].om_list = NULL; info[i].om_cnt = 0; } else { info[i].sq_list = NULL; info[i].sq_cnt = 0; info[i].db_Z = 0; info[i].om_list = &env->hmm_db->list[query->inx]; info[i].om_cnt = query->cnt; } esl_threads_AddThread(threadObj, &info[i]); } /* try block size of 5000. we will need enough sequences for four * blocks per thread or better. */ blk_size = 5000; cnt = query->cnt / env->ncpus / blk_size; limit = query->cnt * 2 / 3; if (cnt < 4) { /* try block size of 1000 */ blk_size /= 5; cnt = query->cnt / env->ncpus / blk_size; if (cnt < 4) { /* still not enough. just divide it up into one block per thread */ blk_size = query->cnt / env->ncpus + 1; limit = query->cnt * 2; } } current_index = 0; esl_threads_WaitForStart(threadObj); esl_threads_WaitForFinish(threadObj); esl_stopwatch_Stop(w); #if 1 fprintf (stdout, " Sequences Residues Elapsed\n"); for (i = 0; i < env->ncpus; ++i) { print_timings(i, info[i].elapsed, info[i].pli); } #endif /* merge the results of the search results */ for (i = 1; i < env->ncpus; ++i) { p7_tophits_Merge(info[0].th, info[i].th); p7_pipeline_Merge(info[0].pli, info[i].pli); p7_pipeline_Destroy(info[i].pli); p7_tophits_Destroy(info[i].th); } print_timings(99, w->elapsed, info[0].pli); send_results(env->fd, w, info); /* free the last of the pipeline data */ p7_pipeline_Destroy(info->pli); p7_tophits_Destroy(info->th); free_QueueData(query); esl_threads_Destroy(threadObj); pthread_mutex_destroy(&inx_mutex); if (info->range_list) { if (info->range_list->starts) free(info->range_list->starts); if (info->range_list->ends) free(info->range_list->ends); free (info->range_list); } free(info); esl_stopwatch_Destroy(w); esl_alphabet_Destroy(abc); return; ERROR: LOG_FATAL_MSG("malloc", errno); } static QUEUE_DATA * process_QueryCmd(HMMD_COMMAND *cmd, WORKER_ENV *env) { int i; int n; int status; char *p; char *name; char *desc; ESL_DSQ *dsq; QUEUE_DATA *query = NULL; if ((query = malloc(sizeof(QUEUE_DATA))) == NULL) LOG_FATAL_MSG("malloc", errno); memset(query, 0, sizeof(QUEUE_DATA)); /* avoid uninitialized bytes. remove this, if we ever serialize/deserialize structures properly */ printf("CMD: %d %d\n", cmd->hdr.command, cmd->srch.query_type); query->cmd_type = cmd->hdr.command; query->query_type = cmd->srch.query_type; query->dbx = cmd->srch.db_inx; query->inx = cmd->srch.inx; query->cnt = cmd->srch.cnt; query->sock = env->fd; query->cmd = NULL; p = cmd->srch.data; /* process search specific options */ status = process_searchopts(env->fd, p, &query->opts); if (status != eslOK) LOG_FATAL_MSG("esl_getopts_Create", status); query->hmm = NULL; query->seq = NULL; query->abc = esl_alphabet_Create(eslAMINO); /* check if we are processing a sequence or hmm */ if (cmd->srch.query_type == HMMD_SEQUENCE) { n = cmd->srch.query_length - 2; name = p + cmd->srch.opts_length; desc = name + strlen(name) + 1; dsq = (ESL_DSQ *) (desc + strlen(desc) + 1); query->seq = esl_sq_CreateDigitalFrom(query->abc, name, dsq, n, desc, NULL, NULL); } else { P7_HMM thmm; P7_HMM *hmm = p7_hmm_CreateShell(); /* allocate memory for the hmm and initialize */ p += cmd->srch.opts_length; memcpy(&thmm, p, sizeof(P7_HMM)); hmm->flags = thmm.flags; p7_hmm_CreateBody(hmm, cmd->srch.query_length, query->abc); p += sizeof(P7_HMM); /* initialize fields */ hmm->nseq = thmm.nseq; hmm->eff_nseq = thmm.eff_nseq; hmm->max_length = thmm.max_length; hmm->checksum = thmm.checksum; hmm->ctime = NULL; hmm->comlog = NULL; for (i = 0; i < p7_NCUTOFFS; i++) hmm->cutoff[i] = thmm.cutoff[i]; for (i = 0; i < p7_NEVPARAM; i++) hmm->evparam[i] = thmm.evparam[i]; for (i = 0; i < p7_MAXABET; i++) hmm->compo[i] = thmm.compo[i]; /* fill in the hmm pointers */ n = sizeof(float) * (hmm->M + 1) * p7H_NTRANSITIONS; memcpy(*hmm->t, p, n); p += n; n = sizeof(float) * (hmm->M + 1) * query->abc->K; memcpy(*hmm->mat, p, n); p += n; memcpy(*hmm->ins, p, n); p += n; if (thmm.name) { hmm->name = strdup(p); p += strlen(hmm->name) + 1; } if (thmm.acc) { hmm->acc = strdup(p); p += strlen(hmm->acc) + 1; } if (thmm.desc) { hmm->desc = strdup(p); p += strlen(hmm->desc) + 1; } n = hmm->M + 2; if (hmm->flags & p7H_RF) { memcpy(hmm->rf, p, n); p += n; } if (hmm->flags & p7H_MMASK) { memcpy(hmm->mm, p, n); p += n; } if (hmm->flags & p7H_CONS) { memcpy(hmm->consensus, p, n); p += n; } if (hmm->flags & p7H_CS) { memcpy(hmm->cs, p, n); p += n; } if (hmm->flags & p7H_CA) { memcpy(hmm->ca, p, n); p += n; } n = sizeof(int) * (hmm->M + 1); if (hmm->flags & p7H_MAP) { memcpy(hmm->map, p, n); p += n; } query->hmm = hmm; } return query; } static void process_Shutdown(HMMD_COMMAND *cmd, WORKER_ENV *env) { int n; n = MSG_SIZE(cmd); cmd->hdr.status = eslOK; if (writen(env->fd, cmd, n) != n) { LOG_FATAL_MSG("write error", errno); } } static void process_InitCmd(HMMD_COMMAND *cmd, WORKER_ENV *env) { char *p; int n; int status; if (env->hmm_db != NULL) p7_hmmcache_Close(env->hmm_db); if (env->seq_db != NULL) p7_seqcache_Close(env->seq_db); env->hmm_db = NULL; env->seq_db = NULL; /* load the sequence database */ if (cmd->init.db_cnt != 0) { P7_SEQCACHE *sdb = NULL; p = cmd->init.data + cmd->init.seqdb_off; status = p7_seqcache_Open(p, &sdb, NULL); if (status != eslOK) { p7_syslog(LOG_ERR,"[%s:%d] - p7_seqcache_Open %s error %d\n", __FILE__, __LINE__, p, status); LOG_FATAL_MSG("cache seqdb error", status); } /* validate the sequence database */ cmd->init.sid[MAX_INIT_DESC-1] = 0; if (strcmp (cmd->init.sid, sdb->id) != 0 || cmd->init.db_cnt != sdb->db_cnt || cmd->init.seq_cnt != sdb->count) { p7_syslog(LOG_ERR,"[%s:%d] - seq db %s: integrity error %s - %s\n", __FILE__, __LINE__, p, cmd->init.sid, sdb->id); LOG_FATAL_MSG("database integrity error", 0); } env->seq_db = sdb; } /* load the hmm database */ if (cmd->init.hmm_cnt != 0) { P7_HMMCACHE *hcache = NULL; p = cmd->init.data + cmd->init.hmmdb_off; status = p7_hmmcache_Open(p, &hcache, NULL); if (status != eslOK) { p7_syslog(LOG_ERR,"[%s:%d] - p7_hmmcache_Open %s error %d\n", __FILE__, __LINE__, p, status); LOG_FATAL_MSG("cache hmmdb error", status); } if ( (status = p7_hmmcache_SetNumericNames(hcache)) != eslOK){ p7_syslog(LOG_ERR,"[%s:%d] - p7_hmmcache_SetNumericNames %s error %d\n", __FILE__, __LINE__, p, status); LOG_FATAL_MSG("cache hmmdb error", status); } /* validate the hmm database */ cmd->init.hid[MAX_INIT_DESC-1] = 0; /* TODO: come up with a new pressed format with an id to compare - strcmp (cmd->init.hid, hdb->id) != 0 */ if (cmd->init.hmm_cnt != 1 || cmd->init.model_cnt != hcache->n) { p7_syslog(LOG_ERR,"[%s:%d] - hmm db %s: integrity error\n", __FILE__, __LINE__, p); LOG_FATAL_MSG("database integrity error", 0); } env->hmm_db = hcache; printf("Loaded profile db %s; models: %d memory: %" PRId64 "\n", p, hcache->n, (uint64_t) p7_hmmcache_Sizeof(hcache)); } /* if stdout is redirected at the commandline, it causes printf's to be buffered, * which means status logging isn't printed. This line strongly requests unbuffering, * which should be ok, given the low stdout load of hmmpgmd */ setvbuf (stdout, NULL, _IONBF, BUFSIZ); printf("Data loaded into memory. Worker is ready.\n"); setvbuf (stdout, NULL, _IOFBF, BUFSIZ); /* write back to the master that we are on line */ n = MSG_SIZE(cmd); cmd->hdr.status = eslOK; if (writen(env->fd, cmd, n) != n) { LOG_FATAL_MSG("write error", errno); } } static void search_thread(void *arg) { int i; int count; int seed; int status; int workeridx; WORKER_INFO *info; ESL_THREADS *obj; ESL_SQ dbsq; ESL_STOPWATCH *w = NULL; /* timing stopwatch */ P7_BUILDER *bld = NULL; /* HMM construction configuration */ P7_BG *bg = NULL; /* null model */ P7_PIPELINE *pli = NULL; /* work pipeline */ P7_TOPHITS *th = NULL; /* top hit results */ P7_PROFILE *gm = NULL; /* generic model */ P7_OPROFILE *om = NULL; /* optimized query profile */ obj = (ESL_THREADS *) arg; esl_threads_Started(obj, &workeridx); info = (WORKER_INFO *) esl_threads_GetData(obj, workeridx); w = esl_stopwatch_Create(); bg = p7_bg_Create(info->abc); esl_stopwatch_Start(w); /* set up the dummy description and accession fields */ dbsq.desc = ""; dbsq.acc = ""; /* process a query sequence or hmm */ if (info->seq != NULL) { bld = p7_builder_Create(NULL, info->abc); if ((seed = esl_opt_GetInteger(info->opts, "--seed")) > 0) { esl_randomness_Init(bld->r, seed); bld->do_reseeding = TRUE; } bld->EmL = esl_opt_GetInteger(info->opts, "--EmL"); bld->EmN = esl_opt_GetInteger(info->opts, "--EmN"); bld->EvL = esl_opt_GetInteger(info->opts, "--EvL"); bld->EvN = esl_opt_GetInteger(info->opts, "--EvN"); bld->EfL = esl_opt_GetInteger(info->opts, "--EfL"); bld->EfN = esl_opt_GetInteger(info->opts, "--EfN"); bld->Eft = esl_opt_GetReal (info->opts, "--Eft"); if (esl_opt_IsOn(info->opts, "--mxfile")) status = p7_builder_SetScoreSystem (bld, esl_opt_GetString(info->opts, "--mxfile"), NULL, esl_opt_GetReal(info->opts, "--popen"), esl_opt_GetReal(info->opts, "--pextend"), bg); else status = p7_builder_LoadScoreSystem(bld, esl_opt_GetString(info->opts, "--mx"), esl_opt_GetReal(info->opts, "--popen"), esl_opt_GetReal(info->opts, "--pextend"), bg); if (status != eslOK) { //client_error(info->sock, status, "hmmgpmd: failed to set single query sequence score system: %s", bld->errbuf); fprintf(stderr, "hmmpgmd: failed to set single query sequence score system: %s", bld->errbuf); pthread_exit(NULL); return; } p7_SingleBuilder(bld, info->seq, bg, NULL, NULL, NULL, &om); /* bypass HMM - only need model */ p7_builder_Destroy(bld); } else { gm = p7_profile_Create (info->hmm->M, info->abc); om = p7_oprofile_Create(info->hmm->M, info->abc); p7_ProfileConfig(info->hmm, bg, gm, 100, p7_LOCAL); p7_oprofile_Convert(gm, om); } /* Create processing pipeline and hit list */ th = p7_tophits_Create(); pli = p7_pipeline_Create(info->opts, om->M, 100, FALSE, p7_SEARCH_SEQS); p7_pli_NewModel(pli, om, bg); if (pli->Z_setby == p7_ZSETBY_NTARGETS) pli->Z = info->db_Z; /* loop until all sequences have been processed */ count = 1; while (count > 0) { int inx; int blksz; HMMER_SEQ **sq; /* grab the next block of sequences */ if (pthread_mutex_lock(info->inx_mutex) != 0) p7_Fail("mutex lock failed"); inx = *info->inx; blksz = *info->blk_size; if (inx > *info->limit) { blksz /= 5; if (blksz < 1000) { *info->limit = info->sq_cnt * 2; } else { *info->limit = inx + (info->sq_cnt - inx) * 2 / 3; } } *info->blk_size = blksz; *info->inx += blksz; if (pthread_mutex_unlock(info->inx_mutex) != 0) p7_Fail("mutex unlock failed"); sq = info->sq_list + inx; count = info->sq_cnt - inx; if (count > blksz) count = blksz; /* Main loop: */ for (i = 0; i < count; ++i, ++sq) { if ( !(info->range_list) || hmmpgmd_IsWithinRanges ((*sq)->idx, info->range_list)) { dbsq.name = (*sq)->name; dbsq.dsq = (*sq)->dsq; dbsq.n = (*sq)->n; dbsq.idx = (*sq)->idx; if((*sq)->desc != NULL) dbsq.desc = (*sq)->desc; p7_bg_SetLength(bg, dbsq.n); p7_oprofile_ReconfigLength(om, dbsq.n); p7_Pipeline(pli, om, bg, &dbsq, th); p7_pipeline_Reuse(pli); } } } /* make available the pipeline objects to the main thread */ info->th = th; info->pli = pli; /* clean up */ p7_bg_Destroy(bg); p7_oprofile_Destroy(om); if (gm != NULL) p7_profile_Destroy(gm); esl_stopwatch_Stop(w); info->elapsed = w->elapsed; esl_stopwatch_Destroy(w); esl_threads_Finished(obj, workeridx); pthread_exit(NULL); return; } static void scan_thread(void *arg) { int i; int count; int workeridx; WORKER_INFO *info; ESL_THREADS *obj; ESL_STOPWATCH *w; P7_BG *bg = NULL; /* null model */ P7_PIPELINE *pli = NULL; /* work pipeline */ P7_TOPHITS *th = NULL; /* top hit results */ obj = (ESL_THREADS *) arg; esl_threads_Started(obj, &workeridx); info = (WORKER_INFO *) esl_threads_GetData(obj, workeridx); w = esl_stopwatch_Create(); esl_stopwatch_Start(w); /* Convert to an optimized model */ bg = p7_bg_Create(info->abc); /* Create processing pipeline and hit list */ th = p7_tophits_Create(); pli = p7_pipeline_Create(info->opts, 100, 100, FALSE, p7_SCAN_MODELS); p7_pli_NewSeq(pli, info->seq); /* loop until all sequences have been processed */ count = 1; while (count > 0) { int inx; int blksz; P7_OPROFILE **om; /* grab the next block of sequences */ if (pthread_mutex_lock(info->inx_mutex) != 0) p7_Fail("mutex lock failed"); inx = *info->inx; blksz = *info->blk_size; if (inx > *info->limit) { blksz /= 5; if (blksz < 1000) { *info->limit = info->om_cnt * 2; } else { *info->limit = inx + (info->om_cnt - inx) * 2 / 3; } } *info->blk_size = blksz; *info->inx += blksz; if (pthread_mutex_unlock(info->inx_mutex) != 0) p7_Fail("mutex unlock failed"); om = info->om_list + inx; count = info->om_cnt - inx; if (count > blksz) count = blksz; /* Main loop: */ for (i = 0; i < count; ++i, ++om) { p7_pli_NewModel(pli, *om, bg); p7_bg_SetLength(bg, info->seq->n); p7_oprofile_ReconfigLength(*om, info->seq->n); p7_Pipeline(pli, *om, bg, info->seq, th); p7_pipeline_Reuse(pli); } } /* make available the pipeline objects to the main thread */ info->th = th; info->pli = pli; /* clean up */ p7_bg_Destroy(bg); esl_stopwatch_Stop(w); info->elapsed = w->elapsed; esl_stopwatch_Destroy(w); esl_threads_Finished(obj, workeridx); pthread_exit(NULL); return; } static void send_results(int fd, ESL_STOPWATCH *w, WORKER_INFO *info) { HMMD_SEARCH_STATS stats; HMMD_SEARCH_STATUS status; P7_HIT *hit; P7_DOMAIN *dcl; int i, j, n; esl_pos_t offset; char *pEnd; /* pointer used by strtol to locate the taxonomy id on the description line. */ memset(&status, 0, sizeof(HMMD_SEARCH_STATUS)); /* silence valgrind errors - zero out entire structure including its padding */ status.status = eslOK; status.msg_size = sizeof(stats); /* copy the search stats */ stats.elapsed = w->elapsed; stats.user = w->user; stats.sys = w->sys; stats.nmodels = info->pli->nmodels; stats.nseqs = info->pli->nseqs; stats.n_past_msv = info->pli->n_past_msv; stats.n_past_bias = info->pli->n_past_bias; stats.n_past_vit = info->pli->n_past_vit; stats.n_past_fwd = info->pli->n_past_fwd; stats.Z = info->pli->Z; stats.domZ = info->pli->domZ; stats.Z_setby = info->pli->Z_setby; stats.domZ_setby = info->pli->domZ_setby; stats.nhits = info->th->N; stats.nreported = info->th->nreported; stats.nincluded = info->th->nincluded; n = sizeof(P7_HIT) * stats.nhits; status.msg_size += n; offset = status.msg_size; if ((hit = malloc(n)) == NULL) LOG_FATAL_MSG("malloc", errno); /* get the data in the right format before we send it */ for (i = 0; i < stats.nhits; ++i) { P7_HIT *h1 = &hit[i]; P7_HIT *h2 = &info->th->unsrt[i]; memcpy(h1, h2, sizeof(P7_HIT)); /* the name will be an integer value of the sequence index */ h1->name = (char *) strtol(h2->name, NULL, 10); // h1->acc = NULL; /* We want to override the sequence description as a container * for the domain architecture. * We have already assigned the architecture when generating * the sequence database, and comparing it to the latest version * of Pfam. Copying the example above, convert the string to * a long and cast back to a char. Nasty hack, but at least * then it gets written back out to the socket. rdf */ //if(h2->desc != NULL) h1->desc = (char *) strtol(h2->desc, NULL, 10); if (h2->desc != NULL) { h1->desc = (char *) strtol(h2->desc, &pEnd, 10); /* Given the sequence header: * >1 000101001 12343829483298 1234 * This will grab the last value (1234) if present and place it in * the acc entry as it is not being used by hmmpgmd. This is the same * way that we hijacked the desc field to pass the architecture * information back. Currently used to pass the taxonomy id to the * hmmer website. */ h1->acc = (char *) strtol(pEnd, &pEnd, 10); } h1->offset = offset; /* figure out how big the domains are and their offset */ dcl = h2->dcl; for (j = 0; j < h1->ndom; ++j) { n = sizeof(P7_DOMAIN) + sizeof(P7_ALIDISPLAY) + dcl->ad->memsize; status.msg_size += n; offset += n; ++dcl; } } /* send back a successful status message */ n = sizeof(status); if (writen(fd, &status, n) != n) LOG_FATAL_MSG("write", errno); /* send back that search stats */ n = sizeof(stats); if (writen(fd, &stats, n) != n) LOG_FATAL_MSG("write", errno); /* send all the hit data */ n = sizeof(P7_HIT) * stats.nhits; if (writen(fd, hit, n) != n) LOG_FATAL_MSG("write", errno); /* loop through the hit list sending the domains */ for (i = 0; i < stats.nhits; ++i) { char *base; P7_HIT *h2 = &info->th->unsrt[i]; dcl = h2->dcl; n = sizeof(P7_DOMAIN) * h2->ndom; if (writen(fd, dcl, n) != n) LOG_FATAL_MSG("write", errno); base = (char *)NULL + n; for (j = 0; j < h2->ndom; ++j) { P7_ALIDISPLAY *ad = NULL; /* save off the original mem pointer so all the pointers can be adjusted * to the new block of memory. */ base += sizeof(P7_ALIDISPLAY); /* readjust all the pointers to the new memory block */ ad = dcl->ad; if (ad->rfline != NULL) ad->rfline = base + (ad->rfline - ad->mem); if (ad->mmline != NULL) ad->mmline = base + (ad->mmline - ad->mem); if (ad->csline != NULL) ad->csline = base + (ad->csline - ad->mem); if (ad->model != NULL) ad->model = base + (ad->model - ad->mem); if (ad->mline != NULL) ad->mline = base + (ad->mline - ad->mem); if (ad->aseq != NULL) ad->aseq = base + (ad->aseq - ad->mem); if (ad->ppline != NULL) ad->ppline = base + (ad->ppline - ad->mem); if (ad->hmmname != NULL) ad->hmmname = base + (ad->hmmname - ad->mem); if (ad->hmmacc != NULL) ad->hmmacc = base + (ad->hmmacc - ad->mem); if (ad->hmmdesc != NULL) ad->hmmdesc = base + (ad->hmmdesc - ad->mem); if (ad->sqname != NULL) ad->sqname = base + (ad->sqname - ad->mem); if (ad->sqacc != NULL) ad->sqacc = base + (ad->sqacc - ad->mem); if (ad->sqdesc != NULL) ad->sqdesc = base + (ad->sqdesc - ad->mem); n = sizeof(P7_ALIDISPLAY); if (writen(fd, dcl->ad, n) != n) LOG_FATAL_MSG("write", errno); n = dcl->ad->memsize; if (writen(fd, dcl->ad->mem, n) != n) LOG_FATAL_MSG("write", errno); base += ad->memsize; ++dcl; } } free(hit); printf("Bytes: %" PRId64 " hits: %" PRId64 " sent on socket %d\n", status.msg_size, stats.nhits, fd); fflush(stdout); } static int setup_masterside_comm(ESL_GETOPTS *opts) { int fd = -1; int cnt; int sec; int connected; struct sockaddr_in addr; /* create a reliable, stream socket using TCP */ if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) LOG_FATAL_MSG("socket", errno); /* construct the server address structure */ memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(esl_opt_GetInteger(opts, "--wport")); if ((inet_pton(AF_INET, esl_opt_GetString(opts, "--worker"), &addr.sin_addr)) < 0) LOG_FATAL_MSG("inet pton", errno); /* try to connect to the master server */ cnt = 0; sec = 1; connected = -1; while (connected < 0) { /* establish the connection to the master server */ if ((connected = connect(fd, (struct sockaddr *) &addr, sizeof(addr))) < 0) { if (errno != ECONNREFUSED) LOG_FATAL_MSG("connect", errno); /* the master server is not listening. sleep and try again */ sleep(sec); if (++cnt > 10) { cnt = 0; if (sec < 64) sec *= 2; } } } return fd; } #endif /*HMMER_THREADS*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/hmmpgmd.c0000664361611702660230000002136512473612613014663 0ustar wheelerteddy/* HMMER search daemon */ #include "p7_config.h" #ifdef HMMER_THREADS #include #include #include #include #ifndef HMMER_THREADS #error "Program requires pthreads be enabled." #endif /*HMMER_THREADS*/ #include "easel.h" #include "esl_getopts.h" #include "hmmer.h" #include "hmmpgmd.h" #define CONF_FILE "/etc/hmmpgmd.conf" static ESL_OPTIONS cmdlineOpts[] = { /* name type default env range toggles reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, { "--master", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--worker", "run program as the master server", 12 }, { "--worker", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, "--master", "run program as a worker with server at ", 12 }, { "--cport", eslARG_INT, "51371", NULL, "491510", NULL, NULL, "--worker", "maximum number of client side connections to accept", 12 }, { "--wcncts", eslARG_INT, "32", NULL, "n>0", NULL, NULL, "--worker", "maximum number of worker side connections to accept", 12 }, { "--pid", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "file to write process id to", 12 }, { "--daemon", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "run as a daemon using config file: /etc/hmmpgmd.conf", 12 }, { "--seqdb", eslARG_INFILE, NULL, NULL, NULL, NULL, NULL, "--worker", "protein database to cache for searches", 12 }, { "--hmmdb", eslARG_INFILE, NULL, NULL, NULL, NULL, NULL, "--worker", "hmm database to cache for searches", 12 }, { "--cpu", eslARG_INT, NULL,"HMMER_NCPU","n>0", NULL, NULL, "--master", "number of parallel CPU workers to use for multithreads", 12 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[options]"; static char banner[] = "search a query against a database"; typedef void sig_func(int); /* MSF called this . That conflicts with system's . * Unclear what he was doing. This appears to duplicated functionality * of the system's . Revisit later. For now, silence compiler * warning by renaming the function. */ sig_func * our_signal(int signo, sig_func *fn) { struct sigaction act; struct sigaction oact; act.sa_handler = fn; sigemptyset(&act.sa_mask); act.sa_flags = 0; if (signo == SIGALRM) { #ifdef SA_INTERRUPT act.sa_flags |= SA_INTERRUPT; /* SunOS 4.x */ #endif } else { #ifdef SA_RESTART act.sa_flags |= SA_RESTART; /* SVR4, 4.4BSD */ #endif } if (sigaction(signo, &act, &oact) < 0) { return SIG_ERR; } return oact.sa_handler; } /* write_pid() * Log the process id to a file. */ static void write_pid(ESL_GETOPTS *go) { char *pid_file = esl_opt_GetString(go, "--pid"); FILE *fp = fopen(pid_file, "w"); if (!fp) p7_Fail("Unable to open PID file %s for writing.", pid_file); fprintf(fp,"%ld\n", (long)getpid()); fclose(fp); } static int process_commandline(int argc, char **argv, ESL_GETOPTS **ret_go) { ESL_GETOPTS *go = esl_getopts_Create(cmdlineOpts); int status; /* if there are no command line arguments, let's try to read /etc/hmmpgmd.conf * for any configuration data. */ if (argc == 1) { FILE *fp = NULL; if ((fp = fopen(CONF_FILE, "r")) == NULL) { if (puts("Options --master or --worker must be specified.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if ((status = esl_opt_ProcessConfigfile(go, CONF_FILE, fp) ) != eslOK) { if (printf("Failed to parse configuration file %s: %s\n", CONF_FILE, go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } fclose(fp); } else { if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } } if (esl_opt_VerifyConfig(go) != eslOK) { if (printf("Failed to parse command line: %s\n", go->errbuf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } /* help format: */ if (esl_opt_GetBoolean(go, "-h") == TRUE) { p7_banner(stdout, argv[0], banner); esl_usage(stdout, argv[0], usage); if (puts("\nBasic options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 80=textwidth*/ if (puts("\nOther expert options:") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); esl_opt_DisplayHelp(stdout, go, 12, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != 0) { if (puts("Incorrect number of command line arguments.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } if (esl_opt_IsUsed(go, "--master") && !(esl_opt_IsUsed(go, "--seqdb") || esl_opt_IsUsed(go, "--hmmdb"))) { if (puts("At least one --seqdb or --hmmdb must be specified.") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); goto FAILURE; } *ret_go = go; return eslOK; FAILURE: /* all errors handled here are user errors, so be polite. */ esl_usage(stdout, argv[0], usage); puts("\nwhere most common options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 80=textwidth*/ printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); esl_getopts_Destroy(go); exit(0); ERROR: if (go) esl_getopts_Destroy(go); exit(status); } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* command line processing */ process_commandline(argc, argv, &go); /* if we write to a broken socket, ignore the signal and handle the error. */ our_signal(SIGPIPE, SIG_IGN); /* check if we need to write out our pid */ if (esl_opt_IsOn(go, "--pid")) write_pid(go); if (esl_opt_IsUsed(go, "--master")) master_process(go); else if (esl_opt_IsUsed(go, "--worker")) worker_process(go); else { puts("Options --master or --worker must be specified."); } esl_getopts_Destroy(go); return eslOK; } /***************************************************************** * Notes on testing and debugging *****************************************************************/ /* How to run a test: * Need a test sequence database: mine is ~eddys/data/hmmpgmd/hmmpgmd.fa * Need a test profile database: mine is ~eddys/data/hmmpgmd/hmmpgmd.hmm * * src/hmmpgmd --master --seqdb ~/data/hmmpgmd/hmmpgmd.fa --hmmdb ~/data/hmmpgmd/hmmpgmd.hmm & * src/hmmpgmd --worker 127.0.0.1 --cpu 1 & * src/hmmc2 -S * @--seqdb 1 * >foo * ACDEFGH... * // * !shutdown * // * * Or, for hmmscan against the hmm db, replace @--seqdb 1 with @--hmmdb 1. * * For debugging, start two of the three processes on cmdline, and the * one to be debugged under gdb. * in worker: break process_SearchCmd * * * Valgrind debugging * generate a small test seq database: * esl-shuffle -G --amino -N 10 -L 400 > foo.fa * fasta2daemon.pl foo.fa > foo.d * * in three separate terminal windows * valgrind --dsymutil=yes --leak-check=yes --show-reachable=yes src/hmmpgmd --master --seqdb foo.d * valgrind --leak-check=yes --show-reachable=yes src/hmmpgmd --worker 127.0.0.1 --cpu 1 * valgrind --dsymutil=yes --leak-check=yes --show-reachable=yes src/hmmc2 -S * * copy/paste tutorial/M1.hmm as an example hmmsearch * or any HMM. On Mac OS/X, to "copy" a file my.hmm to the clipboard: * cat my.hmm | pbcopy */ #endif /*HMMER_THREADS*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/fm_sse.c0000664361611702660230000006350212473612612014504 0ustar wheelerteddy#include "p7_config.h" #include #if defined (p7_IMPL_SSE) #include /* SSE */ #include /* SSE2 */ #endif #include "easel.h" #include "esl_getopts.h" #include "hmmer.h" #if defined (p7_IMPL_SSE) int fm_getbits_m128 (__m128i in, char *buf, int reverse) { byte_m128 new; new.m128 = in; int i,j; for (i=0; i<16;i++) { for (j=0; j<8; j++) { if (reverse) buf[9*i+j] = (new.bytes[i]>>j)&0x1 ? '1' : '0'; else buf[9*i+(7-j)] = (new.bytes[i]>>j)&0x1 ? '1' : '0'; } buf[9*i + 8] = ' '; } buf[143] = '\0'; return eslOK; } int fm_print_m128 (__m128i in) { char str[144]; fm_getbits_m128(in, str, 0); fprintf (stderr, "%s\n", str); return eslOK; } int fm_print_m128_rev (__m128i in) { char str[144]; fm_getbits_m128(in, str, 1); fprintf (stderr, "%s\n", str); return eslOK; } #endif //#if defined (p7_IMPL_SSE) /* Function: fm_initConfig() * Purpose: Initialize vector masks used in SSE FMindex implementation */ int fm_configInit( FM_CFG *cfg, ESL_GETOPTS *go ) { int status; int i,j; int trim_chunk_count; fm_initConfigGeneric(cfg, go); #if defined (p7_IMPL_SSE) cfg->fm_allones_v = _mm_set1_epi8(0xff); cfg->fm_neg128_v = _mm_set1_epi8((int8_t) -128); cfg->fm_zeros_v = _mm_set1_epi8((int8_t) 0x00); //00 00 00 00 cfg->fm_m0f = _mm_set1_epi8((int8_t) 0x0f); //00 00 11 11 if (cfg->meta->alph_type == fm_DNA) { cfg->fm_m01 = _mm_set1_epi8((int8_t) 0x55); //01 01 01 01 cfg->fm_m11 = _mm_set1_epi8((int8_t) 0x03); //00 00 00 11 } //set up an array of vectors, one for each character in the alphabet cfg->fm_chars_v = NULL; ESL_ALLOC (cfg->fm_chars_mem, cfg->meta->alph_size * sizeof(__m128) + 15 ); // +15 for manual 16-byte alignment, which matters for SIMD stuff cfg->fm_chars_v = (__m128i *) (((unsigned long int)(cfg->fm_chars_mem) + 15) & (~0xf)); /* align vector memory on 16-byte boundaries */ for (i=0; imeta->alph_size; i++) { int8_t c = i; if (cfg->meta->alph_type == fm_DNA) { // need 4 copies per byte c |= i<<2; c |= i<<4; c |= i<<6; } //else, just leave it on the right-most bits cfg->fm_chars_v[i] = _mm_set1_epi8(c); } /* this is a collection of masks used to clear off the left- or right- part * of a register when we shouldn't be counting the whole thing * Incrementally chew off the 1s in chunks of 2 (for DNA) or 4 (for DNA_full) * from the right side, and stick each result into an element of a __m128 array */ //if (cfg->meta->alph_type == fm_DNA) trim_chunk_count = 64; //2-bit steps // else //(meta->alph_type == fm_DNA_full) // trim_chunk_count = 16; //8-bit steps //chars_per_vector = 128/meta->charBits; cfg->fm_masks_v = NULL; cfg->fm_reverse_masks_v = NULL; ESL_ALLOC (cfg->fm_masks_mem, (1+trim_chunk_count) *sizeof(__m128) + 15 ); // +15 for manual 16-byte alignment, which matters for SIMD stuff cfg->fm_masks_v = (__m128i *) (((unsigned long int)(cfg->fm_masks_mem) + 15) & (~0xf)); /* align vector memory on 16-byte boundaries */ ESL_ALLOC (cfg->fm_reverse_masks_mem, (1+trim_chunk_count) *sizeof(__m128) + 15 ); // +15 for manual 16-byte alignment, which matters for SIMD stuff cfg->fm_reverse_masks_v = (__m128i *) (((unsigned long int)(cfg->fm_reverse_masks_mem) + 15) & (~0xf)); /* align vector memory on 16-byte boundaries */ { byte_m128 arr; arr.m128 = cfg->fm_allones_v; for (i=trim_chunk_count-1; i>0; i--) { int byte_mask=0xff; //11 11 11 11 int byte_i = (i-1)/(trim_chunk_count/16); if (cfg->meta->alph_type == fm_DNA) { switch (i&0x03) { case 1: byte_mask = 0xc0; //11 00 00 00 break; case 2: byte_mask = 0xf0; //11 11 00 00 break; case 3: byte_mask = 0xfc; //11 11 11 00 break; default: break; } } arr.bytes[byte_i] = byte_mask; //chew off the appropriate number of bits for (j=byte_i+1; j<16; j++) { arr.bytes[j] = 0x0; } cfg->fm_masks_v[i] = *(__m128i*)(&(arr.m128)); cfg->fm_reverse_masks_v[trim_chunk_count-i] = _mm_andnot_si128(cfg->fm_masks_v[i], cfg->fm_allones_v ); } } #endif //#if defined (p7_IMPL_SSE) /* if (cfg->meta->alph_type == fm_DNA_full) { cfg->fm_masks_v[16] = cfg->fm_allones_v; cfg->fm_reverse_masks_v[16] = cfg->fm_allones_v; } */ return eslOK; ERROR: #if defined (p7_IMPL_SSE) if (cfg->fm_chars_mem) free(cfg->fm_chars_mem); if (cfg->fm_masks_mem) free(cfg->fm_masks_mem); if (cfg->fm_reverse_masks_mem) free(cfg->fm_reverse_masks_mem); #endif esl_fatal("Error allocating memory in initGlobals\n"); return eslFAIL; } /* Function: fm_getOccCount() * Synopsis: Compute number of occurrences of c in BWT[1..pos] * * Purpose: Scan through the BWT to compute number of occurrence of c in BWT[0..pos], * using SSE to scan 16 bytes-at-a-time. * * First, use checkpointed occurrence counts in the arrays occCnts_sb and occCnts_b. * The checkpoint used is the one closest to pos, possibly requiring that counts be * subtracted from the checkpointed total * * The counting method is SIMD, loading 16 bytes (32 or 64 chars, depending on * alphabet) at a time into the vector co-processors, then counting occurrences. One * constraint of this approach is that occCnts_b checkpoints must be spaced at least * every 32 or 64 chars (16 bytes, in pressed format), and in multiples of 64/32, so * that _mm_load_si128 calls appropriately meet 16-byte-alignment requirements. That's * a reasonable expectation, as spacings of 256 or more seem to give the best speed, * and certainly better space-utilization. */ int fm_getOccCount (const FM_DATA *fm, const FM_CFG *cfg, int pos, uint8_t c) { int i; FM_METADATA *meta = cfg->meta; int cnt; const int b_pos = (pos+1) / meta->freq_cnt_b ; //floor(pos/b_size) : the b count element preceding pos const uint16_t * occCnts_b = fm->occCnts_b; const uint32_t * occCnts_sb = fm->occCnts_sb; const int sb_pos = (pos+1) / meta->freq_cnt_sb; //floor(pos/sb_size) : the sb count element preceding pos const int cnt_mod_mask_b = meta->freq_cnt_b - 1; //used to compute the mod function const int b_rel_pos = (pos+1) & cnt_mod_mask_b; // pos % b_size : how close is pos to the boundary corresponding to b_pos int up_b = 2*b_rel_pos/meta->freq_cnt_b; //1 if pos is expected to be closer to the boundary of b_pos+1, 0 otherwise int landmark = ((b_pos+up_b)*meta->freq_cnt_b) - 1 ; if (landmark >= fm->N) { // special case: for a count in the final block, just count from the bottom up_b = 0; landmark = (b_pos*(meta->freq_cnt_b)) - 1 ; } #if defined (p7_IMPL_SSE) // get the cnt stored at the nearest checkpoint cnt = FM_OCC_CNT(sb, sb_pos, c ); if (up_b) cnt += FM_OCC_CNT(b, b_pos + 1, c ) ; else if ( b_pos != sb_pos * (meta->freq_cnt_sb / meta->freq_cnt_b) ) cnt += FM_OCC_CNT(b, b_pos, c ) ;// b_pos has cumulative counts since the prior sb_pos - if sb_pos references the same count as b_pos, it'll doublecount if ( landmark < fm->N || landmark == -1 ) { const uint8_t * BWT = fm->BWT; register __m128i c_v = *(cfg->fm_chars_v + c); register __m128i BWT_v; register __m128i tmp_v; register __m128i tmp2_v; register __m128i counts_v = cfg->fm_neg128_v; // set to -128, offset to allow each 8-bit int to hold up to 255. // so effectively, can guarantee holding 128*16 = 2048. // Since I count from left or right, whichever is closer, this means // we can support an occ_b interval of up to 4096 with guarantee of // correctness. if (meta->alph_type == fm_DNA ) { if (!up_b) { // count forward, adding for (i=1+floor(landmark/4.0) ; i+15<( (pos+1)/4); i+=16) { // keep running until i begins a run that shouldn't all be counted BWT_v = *(__m128i*)(BWT+i); FM_MATCH_2BIT(BWT_v, c_v, tmp_v, tmp2_v, tmp_v); FM_COUNT_2BIT(tmp_v, tmp2_v, counts_v); } int remaining_cnt = pos + 1 - i*4 ; if (remaining_cnt > 0) { BWT_v = *(__m128i*)(BWT+i); FM_MATCH_2BIT(BWT_v, c_v, tmp_v, tmp2_v, tmp_v); tmp_v = _mm_and_si128(tmp_v, *(cfg->fm_masks_v + remaining_cnt)); // leaves only the remaining_cnt chars in the array FM_COUNT_2BIT(tmp_v, tmp2_v, counts_v); } } else { // count backwards, subtracting for (i=(landmark/4)-15 ; i>(pos/4); i-=16) { BWT_v = *(__m128i*)(BWT+i); FM_MATCH_2BIT(BWT_v, c_v, tmp_v, tmp2_v, tmp_v); FM_COUNT_2BIT(tmp_v, tmp2_v, counts_v); } int remaining_cnt = 64 - (pos + 1 - i*4); if (remaining_cnt > 0) { BWT_v = *(__m128i*)(BWT+i); FM_MATCH_2BIT(BWT_v, c_v, tmp_v, tmp2_v, tmp_v); tmp_v = _mm_and_si128(tmp_v, *(cfg->fm_reverse_masks_v + remaining_cnt)); // leaves only the remaining_cnt chars in the array FM_COUNT_2BIT(tmp_v, tmp2_v, counts_v); } } /* } else if ( meta->alph_type == fm_DNA_full ) { if (!up_b) { // count forward, adding for (i=1+floor(landmark/2.0) ; i+15<( (pos+1)/2); i+=16) { // keep running until i begins a run that shouldn't all be counted BWT_v = *(__m128i*)(BWT+i); FM_MATCH_4BIT(BWT_v, c_v, tmp_v, tmp2_v); FM_COUNT_4BIT(tmp_v, tmp2_v, counts_v); } int remaining_cnt = pos + 1 - i*2 ; if (remaining_cnt > 0) { BWT_v = *(__m128i*)(BWT+i); FM_MATCH_4BIT(BWT_v, c_v, tmp_v, tmp2_v); tmp_v = _mm_and_si128(tmp_v, *(cfg->fm_masks_v + (remaining_cnt+1)/2)); // mask characters we don't want to count tmp2_v = _mm_and_si128(tmp2_v, *(cfg->fm_masks_v + remaining_cnt/2)); FM_COUNT_4BIT(tmp_v, tmp2_v, counts_v); } } else { // count backwards, subtracting for (i=(landmark/2)-15 ; i>(pos/2); i-=16) { BWT_v = *(__m128i*)(BWT+i); FM_MATCH_4BIT(BWT_v, c_v, tmp_v, tmp2_v); FM_COUNT_4BIT(tmp_v, tmp2_v, counts_v); } int remaining_cnt = 32 - (pos + 1 - i*2); if (remaining_cnt > 0) { BWT_v = *(__m128i*)(BWT+i); FM_MATCH_4BIT(BWT_v, c_v, tmp_v, tmp2_v); tmp_v = _mm_and_si128(tmp_v, *(cfg->fm_reverse_masks_v + remaining_cnt/2)); // mask characters we don't want to count tmp2_v = _mm_and_si128(tmp2_v, *(cfg->fm_reverse_masks_v + (remaining_cnt+1)/2)); FM_COUNT_4BIT(tmp_v, tmp2_v, counts_v); } } */ } else { //amino if (!up_b) { // count forward, adding for (i=1+landmark ; i+15<(pos+1); i+=16) { // keep running until i begins a run that shouldn't all be counted BWT_v = *(__m128i*)(BWT+i); BWT_v = _mm_cmpeq_epi8(BWT_v, c_v); // each byte is all 1s if matching, all zeros otherwise counts_v = _mm_subs_epi8(counts_v, BWT_v); // adds 1 for each matching byte (subtracting negative 1) } int remaining_cnt = pos + 1 - i ; if (remaining_cnt > 0) { BWT_v = *(__m128i*)(BWT+i); BWT_v = _mm_cmpeq_epi8(BWT_v, c_v); BWT_v = _mm_and_si128(BWT_v, *(cfg->fm_masks_v + remaining_cnt));// mask characters we don't want to count counts_v = _mm_subs_epi8(counts_v, BWT_v); } } else { // count backwards, subtracting for (i=landmark-15 ; i>pos; i-=16) { BWT_v = *(__m128i*)(BWT+i); BWT_v = _mm_cmpeq_epi8(BWT_v, c_v); // each byte is all 1s if matching, all zeros otherwise counts_v = _mm_subs_epi8(counts_v, BWT_v); // adds 1 for each matching byte (subtracting negative 1) } int remaining_cnt = 16 - (pos + 1 - i); if (remaining_cnt > 0) { BWT_v = *(__m128i*)(BWT+i); BWT_v = _mm_cmpeq_epi8(BWT_v, c_v); BWT_v = _mm_and_si128(BWT_v, *(cfg->fm_reverse_masks_v + remaining_cnt));// mask characters we don't want to count //tmp2_v = _mm_and_si128(tmp2_v, *(cfg->fm_reverse_masks_v + (remaining_cnt+1)/2)); counts_v = _mm_subs_epi8(counts_v, BWT_v); } } } counts_v = _mm_xor_si128(counts_v, cfg->fm_neg128_v); //counts are stored in signed bytes, base -128. Move them to unsigned bytes FM_GATHER_8BIT_COUNTS(counts_v,counts_v,counts_v); cnt += ( up_b == 1 ? -1 : 1) * ( _mm_extract_epi16(counts_v, 0) ); } if (c==0 && pos >= fm->term_loc) { // I overcounted 'A' by one, because '$' was replaced with an 'A' cnt--; } #endif //#if defined (p7_IMPL_SSE) return cnt ; } /* Function: fm_getOccCountLT() * Synopsis: Compute number of occurrences of characters with value meta; int i,j; const uint16_t * occCnts_b = fm->occCnts_b; const uint32_t * occCnts_sb = fm->occCnts_sb; const int b_pos = (pos+1) / meta->freq_cnt_b; //floor(pos/b_size) : the b count element preceding pos const int sb_pos = (pos+1) / meta->freq_cnt_sb; //floor(pos/sb_size) : the sb count element preceding pos const int b_rel_pos = (pos+1) % meta->freq_cnt_b; // how close is pos to the boundary corresponding to b_pos int up_b = 2*b_rel_pos/meta->freq_cnt_b; //1 if pos is expected to be closer to the boundary of b_pos+1, 0 otherwise int landmark = ((b_pos+up_b)*(meta->freq_cnt_b)) - 1 ; if (landmark >= fm->N) { // special case: for a count in the final block, just count from the bottom up_b = 0; landmark = (b_pos*(meta->freq_cnt_b)) - 1 ; } // get the cnt stored at the nearest checkpoint *cntlt = 0; *cnteq = FM_OCC_CNT(sb, sb_pos, c ); for (i=0; ifreq_cnt_sb / meta->freq_cnt_b)) { *cnteq += FM_OCC_CNT(b, b_pos, c ) ;// b_pos has cumulative counts since the prior sb_pos - if sb_pos references the same count as b_pos, it'll doublecount for (i=0; iN - 1 || landmark == -1 ) { const uint8_t * BWT = fm->BWT; register __m128i c_v = cfg->fm_zeros_v; register __m128i BWT_v; register __m128i tmp_v; register __m128i tmp2_v; register __m128i counts_v_lt = cfg->fm_neg128_v; register __m128i counts_v_eq = cfg->fm_neg128_v; // set to -128, offset to allow each 8-bit int to hold up to 255. // so effectively, can guarantee holding 128*16 = 2048. // Since I count from left or right, whichever is closer, this means // we can support an occ_b interval of up to 4096 with guarantee of // correctness. if (meta->alph_type == fm_DNA ) { /* TODO: For 4-bit characters, it's easy to develop an alternative SSE function that will count * instances fm_chars_v + j); FM_MATCH_2BIT(BWT_v, c_v, tmp_v, tmp2_v, tmp_v); FM_COUNT_2BIT(tmp_v, tmp2_v, counts_v_lt); } c_v = *(cfg->fm_chars_v + c); FM_MATCH_2BIT(BWT_v, c_v, tmp_v, tmp2_v, tmp_v); FM_COUNT_2BIT(tmp_v, tmp2_v, counts_v_eq); } int remaining_cnt = pos + 1 - i*4 ; if (remaining_cnt > 0) { BWT_v = *(__m128i*)(BWT+i); for (j=0; jfm_chars_v + j); FM_MATCH_2BIT(BWT_v, c_v, tmp_v, tmp2_v, tmp_v); tmp_v = _mm_and_si128(tmp_v, *(cfg->fm_masks_v + remaining_cnt)); // leaves only the remaining_cnt chars in the array FM_COUNT_2BIT(tmp_v, tmp2_v, counts_v_lt); } c_v = *(cfg->fm_chars_v + c); FM_MATCH_2BIT(BWT_v, c_v, tmp_v, tmp2_v, tmp_v); tmp_v = _mm_and_si128(tmp_v, *(cfg->fm_masks_v + remaining_cnt)); // leaves only the remaining_cnt chars in the array FM_COUNT_2BIT(tmp_v, tmp2_v, counts_v_eq); } } else { // count backwards, subtracting for (i=(landmark/4)-15 ; i>(pos/4); i-=16) { BWT_v = *(__m128i*)(BWT+i); for (j=0; jfm_chars_v + j); FM_MATCH_2BIT(BWT_v, c_v, tmp_v, tmp2_v, tmp_v); FM_COUNT_2BIT(tmp_v, tmp2_v, counts_v_lt); } c_v = *(cfg->fm_chars_v + c); FM_MATCH_2BIT(BWT_v, c_v, tmp_v, tmp2_v, tmp_v); FM_COUNT_2BIT(tmp_v, tmp2_v, counts_v_eq); } int remaining_cnt = 64 - (pos + 1 - i*4); if (remaining_cnt > 0) { BWT_v = *(__m128i*)(BWT+i); for (j=0; jfm_chars_v + j); FM_MATCH_2BIT(BWT_v, c_v, tmp_v, tmp2_v, tmp_v); tmp_v = _mm_and_si128(tmp_v, *(cfg->fm_reverse_masks_v + remaining_cnt)); // leaves only the remaining_cnt chars in the array FM_COUNT_2BIT(tmp_v, tmp2_v, counts_v_lt); } c_v = *(cfg->fm_chars_v + c); FM_MATCH_2BIT(BWT_v, c_v, tmp_v, tmp2_v, tmp_v); tmp_v = _mm_and_si128(tmp_v, *(cfg->fm_reverse_masks_v + remaining_cnt)); // leaves only the remaining_cnt chars in the array FM_COUNT_2BIT(tmp_v, tmp2_v, counts_v_eq); } } /* } else if ( meta->alph_type == fm_DNA_full) { c_v = *(cfg->fm_chars_v + c); if (!up_b) { // count forward, adding for (i=1+floor(landmark/2.0) ; i+15<( (pos+1)/2); i+=16) { // keep running until i begins a run that shouldn't all be counted BWT_v = *(__m128i*)(BWT+i); FM_LT_4BIT(BWT_v, c_v, tmp_v, tmp2_v); FM_COUNT_4BIT(tmp_v, tmp2_v, counts_v_lt); FM_MATCH_4BIT(BWT_v, c_v, tmp_v, tmp2_v); FM_COUNT_4BIT(tmp_v, tmp2_v, counts_v_eq); } int remaining_cnt = pos + 1 - i*2 ; if (remaining_cnt > 0) { BWT_v = *(__m128i*)(BWT+i); FM_LT_4BIT(BWT_v, c_v, tmp_v, tmp2_v); tmp_v = _mm_and_si128(tmp_v, *(cfg->fm_masks_v + (remaining_cnt+1)/2)); // mask characters we don't want to count tmp2_v = _mm_and_si128(tmp2_v, *(cfg->fm_masks_v + remaining_cnt/2)); FM_COUNT_4BIT(tmp_v, tmp2_v, counts_v_lt); FM_MATCH_4BIT(BWT_v, c_v, tmp_v, tmp2_v); tmp_v = _mm_and_si128(tmp_v, *(cfg->fm_masks_v + (remaining_cnt+1)/2)); // mask characters we don't want to count tmp2_v = _mm_and_si128(tmp2_v, *(cfg->fm_masks_v + remaining_cnt/2)); FM_COUNT_4BIT(tmp_v, tmp2_v, counts_v_eq); } } else { // count backwards, subtracting for (i=(landmark/2)-15 ; i>(pos/2); i-=16) { BWT_v = *(__m128i*)(BWT+i); FM_LT_4BIT(BWT_v, c_v, tmp_v, tmp2_v); FM_COUNT_4BIT(tmp_v, tmp2_v, counts_v_lt); FM_MATCH_4BIT(BWT_v, c_v, tmp_v, tmp2_v); FM_COUNT_4BIT(tmp_v, tmp2_v, counts_v_eq); } int remaining_cnt = 32 - (pos + 1 - i*2); if (remaining_cnt > 0) { BWT_v = *(__m128i*)(BWT+i); FM_LT_4BIT(BWT_v, c_v, tmp_v, tmp2_v); tmp_v = _mm_and_si128(tmp_v, *(cfg->fm_reverse_masks_v + remaining_cnt/2)); // mask characters we don't want to count tmp2_v = _mm_and_si128(tmp2_v, *(cfg->fm_reverse_masks_v + (remaining_cnt+1)/2)); FM_COUNT_4BIT(tmp_v, tmp2_v, counts_v_lt); FM_MATCH_4BIT(BWT_v, c_v, tmp_v, tmp2_v); tmp_v = _mm_and_si128(tmp_v, *(cfg->fm_reverse_masks_v + remaining_cnt/2)); // mask characters we don't want to count tmp2_v = _mm_and_si128(tmp2_v, *(cfg->fm_reverse_masks_v + (remaining_cnt+1)/2)); FM_COUNT_4BIT(tmp_v, tmp2_v, counts_v_eq); } } */ } else { //amino if (!up_b) { // count forward, adding for (i=1+landmark ; i+15<(pos+1); i+=16) { // keep running until i begins a run that shouldn't all be counted BWT_v = *(__m128i*)(BWT+i); tmp_v = _mm_cmplt_epi8(BWT_v, c_v); // each byte is all 1s if leq, all zeros otherwise counts_v_lt = _mm_subs_epi8(counts_v_lt, tmp_v); // adds 1 for each matching byte (subtracting negative 1) BWT_v = _mm_cmpeq_epi8(BWT_v, c_v); // each byte is all 1s if eq, all zeros otherwise counts_v_eq = _mm_subs_epi8(counts_v_eq, BWT_v); } int remaining_cnt = pos + 1 - i ; if (remaining_cnt > 0) { BWT_v = *(__m128i*)(BWT+i); tmp_v = _mm_cmplt_epi8(BWT_v, c_v); // each byte is all 1s if leq, all zeros otherwise tmp_v = _mm_and_si128(tmp_v, *(cfg->fm_masks_v + remaining_cnt/4)); counts_v_lt = _mm_subs_epi8(counts_v_lt, tmp_v); // adds 1 for each matching byte (subtracting negative 1) BWT_v = _mm_cmpeq_epi8(BWT_v, c_v); BWT_v = _mm_and_si128(BWT_v, *(cfg->fm_masks_v + remaining_cnt/4));// mask characters we don't want to count counts_v_eq = _mm_subs_epi8(counts_v_eq, BWT_v); } } else { // count backwards, subtracting for (i=landmark-15 ; i>pos; i-=16) { BWT_v = *(__m128i*)(BWT+i); tmp_v = _mm_cmplt_epi8(BWT_v, c_v); // each byte is all 1s if leq, all zeros otherwise counts_v_lt = _mm_subs_epi8(counts_v_lt, tmp_v); // adds 1 for each matching byte (subtracting negative 1) BWT_v = _mm_cmpeq_epi8(BWT_v, c_v); // each byte is all 1s if eq, all zeros otherwise counts_v_eq = _mm_subs_epi8(counts_v_eq, BWT_v); } int remaining_cnt = 16 - (pos + 1 - i); if (remaining_cnt > 0) { BWT_v = *(__m128i*)(BWT+i); tmp_v = _mm_cmplt_epi8(BWT_v, c_v); // each byte is all 1s if leq, all zeros otherwise tmp_v = _mm_and_si128(tmp_v, *(cfg->fm_reverse_masks_v + remaining_cnt/4)); counts_v_lt = _mm_subs_epi8(counts_v_lt, tmp_v); // adds 1 for each matching byte (subtracting negative 1) BWT_v = _mm_cmpeq_epi8(BWT_v, c_v); BWT_v = _mm_and_si128(tmp_v, *(cfg->fm_reverse_masks_v + remaining_cnt/4));// mask characters we don't want to count //tmp2_v = _mm_and_si128(tmp2_v, *(cfg->fm_reverse_masks_v + (remaining_cnt+1)/2)); counts_v_eq = _mm_subs_epi8(counts_v_eq, BWT_v); } } } if (c>0) { counts_v_lt = _mm_xor_si128(counts_v_lt, cfg->fm_neg128_v); //counts are stored in signed bytes, base -128. Move them to unsigned bytes FM_GATHER_8BIT_COUNTS(counts_v_lt,counts_v_lt,counts_v_lt); (*cntlt) += ( up_b == 1 ? -1 : 1) * ( _mm_extract_epi16(counts_v_lt, 0) ); } counts_v_eq = _mm_xor_si128(counts_v_eq, cfg->fm_neg128_v); FM_GATHER_8BIT_COUNTS(counts_v_eq,counts_v_eq,counts_v_eq); (*cnteq) += ( up_b == 1 ? -1 : 1) * ( _mm_extract_epi16(counts_v_eq, 0) ); } if ( pos >= fm->term_loc) { if (c == 0) { // deal with the fact that '$' was replaced with an 'A' (*cnteq)--; // I overcounted 'A' by one (*cntlt) = 1; // '$' is lexicographically lower than 'A', but I didn't count it in the method above } } #endif //#if defined (p7_IMPL_SSE) return eslOK ; } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/p7_trace.c0000664361611702660230000015744412473612614014747 0ustar wheelerteddy/* P7_TRACE, the traceback structure. * * Contents: * 1. The P7_TRACE structure * 2. Access routines * 3. Debugging tools * 4. Creating traces by DP traceback * 5. Creating faux traces from existing MSAs * 6. Counting traces into new HMMs * 7. Unit tests * 8. Test driver * 9. Copyright and license information * * Stylistic note: elements in a trace path are usually indexed by z. */ #include "p7_config.h" #include #include #include "easel.h" #include "hmmer.h" /***************************************************************** * 1. The P7_TRACE structure. *****************************************************************/ static P7_TRACE *trace_create_engine(int initial_nalloc, int initial_ndomalloc, int with_posteriors); /* Function: p7_trace_Create() * Synopsis: Allocates a (growable, reusable) traceback. * * Purpose: Allocates a traceback. * * Tracebacks are growable. A reasonable initial internal * allocation is made here, and routines that generate * tracebacks will dynamically grow the trace as needed. * * Tracebacks are reusable. Usually a routine only * allocates one, and reuses its memory over and over as * new target sequences are aligned. * * Returns: a pointer to the new structure on success. * * Throws: on allocation error. */ P7_TRACE * p7_trace_Create(void) { int initial_nalloc = 256; int initial_ndomalloc = 16; int with_posteriors = FALSE; return trace_create_engine(initial_nalloc, initial_ndomalloc, with_posteriors); } /* Function: p7_trace_CreateWithPP() * Synopsis: Allocates a traceback that includes posterior probs. * Incept: SRE, Tue Aug 19 13:08:12 2008 [Janelia] * * Purpose: Allocates a traceback that includes pp[z]> fields * for posterior probabilities of emitted residues; * otherwise identical to . */ P7_TRACE * p7_trace_CreateWithPP(void) { int initial_nalloc = 256; int initial_ndomalloc = 16; int with_posteriors = TRUE; return trace_create_engine(initial_nalloc, initial_ndomalloc, with_posteriors); } static P7_TRACE * trace_create_engine(int initial_nalloc, int initial_ndomalloc, int with_posteriors) { P7_TRACE *tr = NULL; int status; ESL_ALLOC(tr, sizeof(P7_TRACE)); tr->st = NULL; tr->k = NULL; tr->i = NULL; tr->pp = NULL; tr->M = 0; tr->L = 0; tr->tfrom = tr->tto = NULL; tr->sqfrom = tr->sqto = NULL; tr->hmmfrom = tr->hmmto = NULL; /* The trace data itself */ ESL_ALLOC(tr->st, sizeof(char) * initial_nalloc); ESL_ALLOC(tr->k, sizeof(int) * initial_nalloc); ESL_ALLOC(tr->i, sizeof(int) * initial_nalloc); if (with_posteriors) ESL_ALLOC(tr->pp, sizeof(float) * initial_nalloc); tr->N = 0; tr->nalloc = initial_nalloc; /* The trace's index: table of domain start/stop coords */ ESL_ALLOC(tr->tfrom, sizeof(int) * initial_ndomalloc); ESL_ALLOC(tr->tto, sizeof(int) * initial_ndomalloc); ESL_ALLOC(tr->sqfrom, sizeof(int) * initial_ndomalloc); ESL_ALLOC(tr->sqto, sizeof(int) * initial_ndomalloc); ESL_ALLOC(tr->hmmfrom, sizeof(int) * initial_ndomalloc); ESL_ALLOC(tr->hmmto, sizeof(int) * initial_ndomalloc); tr->ndom = 0; tr->ndomalloc = initial_ndomalloc; return tr; ERROR: if (tr != NULL) p7_trace_Destroy(tr); return NULL; } /* Function: p7_trace_Reuse() * Synopsis: Prepare a trace for reuse. * Incept: SRE, Tue Jan 9 13:02:34 2007 [Janelia] * * Purpose: Reinitializes an existing trace object, reusing its * memory. * * Returns: on success. * * Throws: (no abnormal error conditions) * * Xref: STL11/124 */ int p7_trace_Reuse(P7_TRACE *tr) { tr->N = 0; tr->M = 0; tr->L = 0; tr->ndom = 0; return eslOK; } /* Function: p7_trace_Grow() * Synopsis: Grow the allocation for trace data. * * Purpose: If can't fit another state, double its allocation for * traceback data. * * This doesn't reallocate the domain index; see * or for * that. * * Returns: on success. * * Throws: on allocation failure; in this case, the data in * are unaffected. */ int p7_trace_Grow(P7_TRACE *tr) { void *tmp; int status; if (tr->N < tr->nalloc) return eslOK; ESL_RALLOC(tr->st, tmp, sizeof(char) *2*tr->nalloc); ESL_RALLOC(tr->k, tmp, sizeof(int) *2*tr->nalloc); ESL_RALLOC(tr->i, tmp, sizeof(int) *2*tr->nalloc); if (tr->pp != NULL) ESL_RALLOC(tr->pp, tmp, sizeof(float) *2*tr->nalloc); tr->nalloc *= 2; return eslOK; ERROR: return status; } /* Function: p7_trace_GrowIndex() * Synopsis: Grows the allocation of the trace's domain index. * Incept: SRE, Fri Jan 4 10:40:02 2008 [Janelia] * * Purpose: If can't fit another domain in its index, * double the allocation of the index in . * * Returns: on success. * * Throws: on allocation failure; in this case, the * data in are unaffected. */ int p7_trace_GrowIndex(P7_TRACE *tr) { void *p; int status; if (tr->ndom < tr->ndomalloc) return eslOK; ESL_RALLOC(tr->tfrom, p, sizeof(int)*2*tr->ndomalloc); ESL_RALLOC(tr->tto, p, sizeof(int)*2*tr->ndomalloc); ESL_RALLOC(tr->sqfrom, p, sizeof(int)*2*tr->ndomalloc); ESL_RALLOC(tr->sqto, p, sizeof(int)*2*tr->ndomalloc); ESL_RALLOC(tr->hmmfrom, p, sizeof(int)*2*tr->ndomalloc); ESL_RALLOC(tr->hmmto, p, sizeof(int)*2*tr->ndomalloc); tr->ndomalloc *= 2; return eslOK; ERROR: return status; } /* Function: p7_trace_GrowTo() * Synopsis: Reallocates trace to a given minimum size. * * Purpose: Reallocates a trace structure to hold a trace * of at least length states. * * Returns: on success. * * Throws: on allocation failure; the data in * are unaffected by failure. */ int p7_trace_GrowTo(P7_TRACE *tr, int N) { int status; void *tmp; if (N < tr->nalloc) return eslOK; /* no-op */ ESL_RALLOC(tr->st, tmp, sizeof(char) *N); ESL_RALLOC(tr->k, tmp, sizeof(int) *N); ESL_RALLOC(tr->i, tmp, sizeof(int) *N); if (tr->pp != NULL) ESL_RALLOC(tr->pp, tmp, sizeof(float) *N); tr->nalloc = N; return eslOK; ERROR: return status; } /* Function: p7_trace_GrowIndexTo() * Synopsis: Reallocates domain index for a given minimum number. * Incept: SRE, Fri Jan 4 10:47:43 2008 [Janelia] * * Purpose: Reallocates the domain index in to index * at least domains. * * Returns: on success. * * Throws: on allocation failure, in which case * the data in are unaffected. */ int p7_trace_GrowIndexTo(P7_TRACE *tr, int ndom) { void *p; int status; if (ndom < tr->ndomalloc) return eslOK; ESL_RALLOC(tr->tfrom, p, sizeof(int)*ndom); ESL_RALLOC(tr->tto, p, sizeof(int)*ndom); ESL_RALLOC(tr->sqfrom, p, sizeof(int)*ndom); ESL_RALLOC(tr->sqto, p, sizeof(int)*ndom); ESL_RALLOC(tr->hmmfrom, p, sizeof(int)*ndom); ESL_RALLOC(tr->hmmto, p, sizeof(int)*ndom); tr->ndomalloc = ndom; return eslOK; ERROR: return status; } /* Function: p7_trace_Destroy() * Synopsis: Frees a trace. * * Purpose: Frees a trace structure . * * Returns: (void) */ void p7_trace_Destroy(P7_TRACE *tr) { if (tr == NULL) return; if (tr->st != NULL) free(tr->st); if (tr->k != NULL) free(tr->k); if (tr->i != NULL) free(tr->i); if (tr->pp != NULL) free(tr->pp); if (tr->tfrom != NULL) free(tr->tfrom); if (tr->tto != NULL) free(tr->tto); if (tr->sqfrom != NULL) free(tr->sqfrom); if (tr->sqto != NULL) free(tr->sqto); if (tr->hmmfrom != NULL) free(tr->hmmfrom); if (tr->hmmto != NULL) free(tr->hmmto); free(tr); return; } /* Function: p7_trace_DestroyArray() * * Purpose: Frees an array of trace structures, . * * Returns: (void) */ void p7_trace_DestroyArray(P7_TRACE **tr, int N) { int idx; if (tr == NULL) return; for (idx = 0; idx < N; idx++) { if (tr[idx] == NULL) continue; p7_trace_Destroy(tr[idx]); } free(tr); return; } /*---------------------- end, P7_TRACE --------------------------*/ /***************************************************************** * 2. Access routines *****************************************************************/ /* Function: p7_trace_GetDomainCount() * Incept: SRE, Tue Feb 27 13:11:43 2007 [Janelia] * * Purpose: Determine the number of hits in the trace -- that is, * the number of times the trace traverses the model from * B...E. Return that number in . * * Done simply by counting the number of B states used in * the trace. * * Only sensible on profile traces. Core traces have 1 * domain by definition. * * Returns: on success. * * Throws: (no abnormal error conditions) */ int p7_trace_GetDomainCount(const P7_TRACE *tr, int *ret_ndom) { int z; int ndom = 0; if (tr->ndom > 0) ndom = tr->ndom; /* if we already indexed the domains, we know the answer */ else { for (z = 0; z < tr->N; z++) if (tr->st[z] == p7T_B) ndom++; } *ret_ndom = ndom; return eslOK; } /* Function: p7_trace_GetStateUseCounts() * Incept: SRE, Sun May 27 10:30:13 2007 [Janelia] * * Purpose: Accumulate counts of each different state type in trace . * * is allocated for at least * integers, indexed by statetype. Upon return, * contains the number of match states * in the trace, for example. */ int p7_trace_GetStateUseCounts(const P7_TRACE *tr, int *counts) { int x,z; for (x = 0; x < p7T_NSTATETYPES; x++) counts[x] = 0; for (z = 0; z < tr->N; z++) { x = tr->st[z]; if (x < 0 || x >= p7T_NSTATETYPES) ESL_EXCEPTION(eslEINVAL, "bad state type"); counts[x]++; } return eslOK; } /* Function: p7_trace_GetDomainCoords() * Incept: SRE, Tue Feb 27 13:08:32 2007 [Janelia] * * Purpose: Retrieve the bounds of domain alignment number in * traceback . starts from 0. The total number * of domains in a trace can be obtained from * , or caller can just loop * an increasing count until is returned. * * Start/end in the sequence are returned in , * . Start/end in the model are returned in , * . * * It only makes sense to call this function on profile * traces. * * By local alignment bounds convention, the domain * alignment is defined as bounded by match states, so * and are the coords of the first and last match * state (in range 1..M), and and are the coords * of the residues aligned to those match states. Profiles * do allow a Mk->DDD->E trailer; nonetheless, if such a * trailer occurs, the k2 coord still refers to the last * match state's coordinate. Note that such trailers would * only occur in generated or sampled paths, not Viterbi * paths; in Viterbi alignments with exit probabilities of * 1.0, the direct Mk->E path will always have higher * probability than a Mk->DDD->E path. * * Returns: on success, and the coords are returned. * if the trace doesn't contain a 'th * domain, and the coords are all returned as 0. * * Throws: if you stupidly pass a less than 0; * if something is grievously wrong with . */ int p7_trace_GetDomainCoords(const P7_TRACE *tr, int which, int *ret_i1, int *ret_i2, int *ret_k1, int *ret_k2) { int status; int z; if (which < 0) ESL_XEXCEPTION(eslEINVAL, "bad which < 0"); if (tr->ndom) /* do we have an index? then this'll be easy */ { if (which >= tr->ndom) { status = eslEOD; goto ERROR; } *ret_i1 = tr->sqfrom[which]; *ret_i2 = tr->sqto[which]; *ret_k1 = tr->hmmfrom[which]; *ret_k2 = tr->hmmto[which]; return eslOK; } /* else, the hard way. * skip z to one state past the which'th B state. */ for (z = 0; which >= 0 && z < tr->N; z++) if (tr->st[z] == p7T_B) which--; if (z == tr->N) { status = eslEOD; goto ERROR; } /* skip to the first M state and record i1,k1: * in a profile trace, this must be the next state. */ if (tr->st[z] != p7T_M) ESL_XEXCEPTION(eslECORRUPT, "not a profile trace?"); *ret_i1 = tr->i[z]; *ret_k1 = tr->k[z]; /* skip to the end E, then look back at the last M, record i2,k2. */ for (; z < tr->N; z++) if (tr->st[z] == p7T_E) break; if (z == tr->N) ESL_EXCEPTION(eslECORRUPT, "invalid trace: no E for a B"); do { z--; } while (tr->st[z] == p7T_D); /* roll back over any D trailer */ if (tr->st[z] != p7T_M) ESL_EXCEPTION(eslECORRUPT, "invalid trace: no M"); *ret_i2 = tr->i[z]; *ret_k2 = tr->k[z]; return eslOK; ERROR: *ret_i1 = 0; *ret_i2 = 0; *ret_k1 = 0; *ret_k2 = 0; return status; } /*---------------- end, access routines -------------------------*/ /***************************************************************** * 3. Debugging tools. *****************************************************************/ /* Function: p7_trace_Validate() * Incept: SRE, Fri Jan 5 09:17:24 2007 [Janelia] * * Purpose: Validate the internal data in a trace structure * representing an alignment of an HMM to a * digital sequence . The digital sequence may be either * unaligned (usually) or aligned (in the case of "fake" * tracebacks generated from an MSA during a * model construction process). * * We don't pass the HMM that the trace is associated with, * because we might have constructed the trace during * HMM construction when we don't have an HMM yet; but * we always have a digital sequence. * * Intended for debugging, development, and testing * purposes. * * Args: tr - trace to validate * abc - alphabet corresponding to sequence * sq - digital sequence that is explaining * errbuf - NULL, or an error message buffer allocated * for at least eslERRBUFSIZE chars. * * Returns: if trace appears fine. * Returns if a problem is detected; if is * provided (non-), an informative message is formatted * there to indicate the reason for the failure. */ int p7_trace_Validate(const P7_TRACE *tr, const ESL_ALPHABET *abc, const ESL_DSQ *dsq, char *errbuf) { int z; /* position in trace */ int i; /* position in sequence */ int k; /* position in model */ char prv; /* type of the previous state */ int is_core; /* TRUE if trace is a core trace, not profile */ /* minimum trace length is a core's B->Mk->E. If we don't have at least that, * we're definitely in trouble */ if (tr->N < 3) ESL_FAIL(eslFAIL, errbuf, "trace is too short"); if (tr->N > tr->nalloc) ESL_FAIL(eslFAIL, errbuf, "N of %d isn't sensible", tr->N); /* Determine if this is a core trace or a profile trace, so we can * construct validation tests appropriately. */ if (tr->st[0] == p7T_B) is_core = TRUE; else if (tr->st[0] == p7T_S) is_core = FALSE; else ESL_FAIL(eslFAIL, errbuf, "first state neither S nor B"); /* Verify "sentinels", the final states of the trace * (before we start looking backwards and forwards from each state in * our main validation loop) */ if (is_core && tr->st[tr->N-1] != p7T_E) ESL_FAIL(eslFAIL, errbuf, "last state not E"); if (!is_core && tr->st[tr->N-1] != p7T_T) ESL_FAIL(eslFAIL, errbuf, "last state not T"); if (tr->k[0] != 0) ESL_FAIL(eslFAIL, errbuf, "first state shouldn't have k set"); if (tr->i[0] != 0) ESL_FAIL(eslFAIL, errbuf, "first state shouldn't have i set"); if (tr->k[tr->N-1] != 0) ESL_FAIL(eslFAIL, errbuf, "last state shouldn't have k set"); if (tr->i[tr->N-1] != 0) ESL_FAIL(eslFAIL, errbuf, "last state shouldn't have i set"); if (tr->pp != NULL && tr->pp[0] != 0.0) ESL_FAIL(eslFAIL, errbuf, "first state doesn't emit; but post prob isn't 0"); if (tr->pp != NULL && tr->pp[tr->N-1] != 0.0) ESL_FAIL(eslFAIL, errbuf, "last state doesn't emit; but post prob isn't 0"); /* Main validation loop. */ k = 0; i = 1; for (z = 1; z < tr->N-1; z++) { for (; dsq[i] != eslDSQ_SENTINEL; i++) /* find next non-gap residue in dsq */ if (esl_abc_XIsResidue(abc, dsq[i]) || esl_abc_XIsNonresidue(abc, dsq[i])) break; /* '*' included as emitted "residue" */ /* watch out for missing data states X: can only be one. * prv state might have to skip over one (but not more) missing data states */ prv = (tr->st[z-1] == p7T_X)? tr->st[z-2] : tr->st[z-1]; switch (tr->st[z]) { case p7T_S: ESL_FAIL(eslFAIL, errbuf, "S must be first state"); break; case p7T_X: if (! is_core) ESL_FAIL(eslFAIL, errbuf, "X state (missing data) only appears in core traces"); if (prv != p7T_B && tr->st[z+1] != p7T_E) /* only B->X and X->E are possible */ ESL_FAIL(eslFAIL, errbuf, "bad transition involving missing data (X state) not at start/end"); break; case p7T_N: if (is_core) ESL_FAIL(eslFAIL, errbuf, "core trace can't contain N"); if (tr->k[z] != 0) ESL_FAIL(eslFAIL, errbuf, "no N should have k set"); if (prv == p7T_S) { /* 1st N doesn't emit */ if (tr->i[z] != 0) ESL_FAIL(eslFAIL, errbuf, "first N shouldn't have i set"); if (tr->pp != NULL && tr->pp[z] != 0.0) ESL_FAIL(eslFAIL, errbuf, "first N can't have nonzero post prob"); } else if (prv == p7T_N) { /* subsequent N's do */ if (tr->i[z] != i) ESL_FAIL(eslFAIL, errbuf, "expected i doesn't match trace's i"); i++; } else ESL_FAIL(eslFAIL, errbuf, "bad transition to N; expected {S,N}->N"); break; case p7T_B: if (tr->k[z] != 0) ESL_FAIL(eslFAIL, errbuf, "B shouldn't have k set"); if (tr->i[z] != 0) ESL_FAIL(eslFAIL, errbuf, "B shouldn't have i set"); if (tr->pp != NULL && tr->pp[z] != 0.0) ESL_FAIL(eslFAIL, errbuf, "B can't have nonzero post prob"); if (prv != p7T_N && prv != p7T_J) ESL_FAIL(eslFAIL, errbuf, "bad transition to B; expected {N,J}->B"); break; case p7T_M: if (prv == p7T_B) k = tr->k[z]; else k++; /* on a B->Mk entry, trust k; else verify */ if (tr->k[z] != k) ESL_FAIL(eslFAIL, errbuf, "expected k doesn't match trace's k"); if (tr->i[z] != i) ESL_FAIL(eslFAIL, errbuf, "expected i doesn't match trace's i"); if (prv != p7T_B && prv != p7T_M && prv != p7T_D && prv != p7T_I) ESL_FAIL(eslFAIL, errbuf, "bad transition to M; expected {B,M,D,I}->M"); i++; break; case p7T_D: k++; if (tr->st[z-1] == p7T_X) k = tr->k[z]; /* with fragments, a X->Ik case is possible */ if (tr->k[z] != k) ESL_FAIL(eslFAIL, errbuf, "expected k doesn't match trace's k"); if (tr->i[z] != 0) ESL_FAIL(eslFAIL, errbuf, "D shouldn't have i set"); if (tr->pp != NULL && tr->pp[z] != 0.0) ESL_FAIL(eslFAIL, errbuf, "D can't have nonzero post prob"); if (is_core) { if (prv != p7T_M && prv != p7T_D && prv != p7T_B) ESL_FAIL(eslFAIL, errbuf, "bad transition to D; expected {B,M,D}->D"); } else { if (prv != p7T_M && prv != p7T_D) ESL_FAIL(eslFAIL, errbuf, "bad transition to D; expected {M,D}->D"); } break; case p7T_I: if (tr->st[z-1] == p7T_X) k = tr->k[z]; /* with fragments, a X->Ik case is possible */ if (tr->k[z] != k) ESL_FAIL(eslFAIL, errbuf, "expected k doesn't match trace's k"); if (tr->i[z] != i) ESL_FAIL(eslFAIL, errbuf, "expected i doesn't match trace's i"); if (is_core) { if (prv != p7T_B && prv != p7T_M && prv != p7T_I) ESL_FAIL(eslFAIL, errbuf, "bad transition to I; expected {B,M,I}->I"); } else { if (prv != p7T_M && prv != p7T_I) ESL_FAIL(eslFAIL, errbuf, "bad transition to I; expected {M,I}->I"); } i++; break; case p7T_E: if (tr->k[z] != 0) ESL_FAIL(eslFAIL, errbuf, "E shouldn't have k set"); if (tr->i[z] != 0) ESL_FAIL(eslFAIL, errbuf, "E shouldn't have i set"); if (tr->pp != NULL && tr->pp[z] != 0.0) ESL_FAIL(eslFAIL, errbuf, "E can't have nonzero post prob"); if (is_core) { if (prv != p7T_M && prv != p7T_D && prv != p7T_I) ESL_FAIL(eslFAIL, errbuf, "bad transition to E; expected {M,D,I}->E"); } else { if (prv != p7T_M && prv != p7T_D) ESL_FAIL(eslFAIL, errbuf, "bad transition to E; expected {M,D}->E"); } break; case p7T_J: if (tr->k[z] != 0) ESL_FAIL(eslFAIL, errbuf, "no J should have k set"); if (prv == p7T_E) { /* 1st J doesn't emit */ if (tr->i[z] != 0) ESL_FAIL(eslFAIL, errbuf, "first J shouldn't have i set"); if (tr->pp != NULL && tr->pp[z] != 0.0) ESL_FAIL(eslFAIL, errbuf, "first J can't have nonzero post prob"); } else if (prv == p7T_J) { /* subsequent J's do */ if (tr->i[z] != i) ESL_FAIL(eslFAIL, errbuf, "expected i doesn't match trace's i"); i++; } else ESL_FAIL(eslFAIL, errbuf, "bad transition to J; expected {E,J}->J"); break; case p7T_C: if (is_core) ESL_FAIL(eslFAIL, errbuf, "core trace can't contain C"); if (tr->k[z] != 0) ESL_FAIL(eslFAIL, errbuf, "no C should have k set"); if (prv == p7T_E) { /* 1st C doesn't emit */ if (tr->i[z] != 0) ESL_FAIL(eslFAIL, errbuf, "first C shouldn't have i set"); if (tr->pp != NULL && tr->pp[z] != 0.0) ESL_FAIL(eslFAIL, errbuf, "first C can't have nonzero post prob"); } else if (prv == p7T_C) { /* subsequent C's do */ if (tr->i[z] != i) ESL_FAIL(eslFAIL, errbuf, "expected i doesn't match trace's i"); i++; } else ESL_FAIL(eslFAIL, errbuf, "bad transition to C; expected {E,C}->C"); break; case p7T_T: ESL_FAIL(eslFAIL, errbuf, "T must be last state"); break; } } /* Trace should have accounted for all residues in the dsq */ for (; dsq[i] != eslDSQ_SENTINEL; i++) if (esl_abc_XIsResidue(abc, dsq[i])) ESL_FAIL(eslFAIL, errbuf, "trace didn't account for all residues in the sq"); /* No k larger than M; no i-1 larger than L (i is sitting on dsq[n+1] sentinel right now) */ if (k > tr->M) ESL_FAIL(eslFAIL, errbuf, "M=%d, but k went to %d\n", tr->M, k); if (i-1 > tr->L) ESL_FAIL(eslFAIL, errbuf, "L=%d, but i went to %d\n", tr->L, i); return eslOK; } /* Function: p7_trace_Dump() * Incept: SRE, Fri Jan 5 09:26:04 2007 [Janelia] * * Purpose: Dumps internals of a traceback structure to . * If is non-NULL, also prints transition/emission scores. * If is non-NULL, also prints residues (using alphabet * in the ). * * Args: fp - stream to dump to (often stdout) * tr - trace to dump * gm - NULL, or score profile corresponding to trace * dsq - NULL, or digitized seq corresponding to trace * * Returns: on success. * * Throws: if trace contains something corrupt or invalid; * in this case, dump will be aborted, possibly after partial * output. */ int p7_trace_Dump(FILE *fp, const P7_TRACE *tr, const P7_PROFILE *gm, const ESL_DSQ *dsq) /* replace void w/ P7_PROFILE */ { int z; /* counter for trace position */ if (tr == NULL) { fprintf(fp, " [ trace is NULL ]\n"); return eslOK; } if (gm == NULL) { /* Yes, this does get used: during model construction. */ fprintf(fp, "st k i - traceback len %d\n", tr->N); fprintf(fp, "-- ---- ----\n"); for (z = 0; z < tr->N; z++) { fprintf(fp, "%1s %4d %6d\n", p7_hmm_DecodeStatetype(tr->st[z]), tr->k[z], tr->i[z]); } } else { int status; float accuracy = 0.0f; float sc = 0.0f; float tsc; int xi; fprintf(fp, "st k i transit emission postprob - traceback len %d\n", tr->N); fprintf(fp, "-- ---- ------ -------- -------- --------\n"); for (z = 0; z < tr->N; z++) { if (z < tr->N-1) { status = p7_profile_GetT(gm, tr->st[z], tr->k[z], tr->st[z+1], tr->k[z+1], &tsc); if (status != eslOK) return status; } else tsc = 0.0f; fprintf(fp, "%1s %4d %6d %8.4f", p7_hmm_DecodeStatetype(tr->st[z]), tr->k[z], tr->i[z], tsc); sc += tsc; if (dsq != NULL) { xi = dsq[tr->i[z]]; if (tr->st[z] == p7T_M) { fprintf(fp, " %8.4f", p7P_MSC(gm, tr->k[z], xi)); sc += p7P_MSC(gm, tr->k[z], xi); if (tr->pp != NULL) { fprintf(fp, " %8.4f", tr->pp[z]); accuracy += tr->pp[z]; } fprintf(fp, " %c", gm->abc->sym[xi]); } else if (tr->st[z] == p7T_I) { fprintf(fp, " %8.4f", p7P_ISC(gm, tr->k[z], xi)); sc += p7P_ISC(gm, tr->k[z], xi); if (tr->pp != NULL) { fprintf(fp, " %8.4f", tr->pp[z]); accuracy += tr->pp[z]; } fprintf(fp, " %c", (char) tolower((int) gm->abc->sym[xi])); } else if ((tr->st[z] == p7T_N && tr->st[z-1] == p7T_N) || (tr->st[z] == p7T_C && tr->st[z-1] == p7T_C) || (tr->st[z] == p7T_J && tr->st[z-1] == p7T_J)) { fprintf(fp, " %8d", 0); if (tr->pp != NULL) { fprintf(fp, " %8.4f", tr->pp[z]); accuracy += tr->pp[z]; } fprintf(fp, " %c", (char) tolower((int) gm->abc->sym[xi])); } } else fprintf(fp, " %8s %8s %c", "-", "-", '-'); fputs("\n", fp); } fprintf(fp, " -------- -------- --------\n"); fprintf(fp, " total: %8.4f %8.4f\n\n", sc, accuracy); } return eslOK; } /* Function: p7_trace_Compare() * Synopsis: Compare two traces for identity * Incept: SRE, Wed Aug 20 09:05:24 2008 [Janelia] * * Purpose: Compare two tracebacks; return if they * are identical, if not. * * If posterior probability annotation is present in * both traces, they are compared using * and a relative tolerance of . * * If domain indices are present in both traces, * the two indexes are compared. */ int p7_trace_Compare(P7_TRACE *tr1, P7_TRACE *tr2, float pptol) { int z,d; if (tr1->N != tr2->N) esl_fatal("FAIL"); if (tr1->M != tr2->M) esl_fatal("FAIL"); if (tr1->L != tr2->L) esl_fatal("FAIL"); /* Main data in the trace */ for (z = 0; z < tr1->N; z++) { if (tr1->st[z] != tr2->st[z]) esl_fatal("FAIL"); if (tr1->k[z] != tr2->k[z]) esl_fatal("FAIL"); if (tr1->i[z] != tr2->i[z]) esl_fatal("FAIL"); } /* Optional posterior probability annotation */ if (tr1->pp != NULL && tr2->pp != NULL) { for (z = 0; z < tr1->N; z++) if (tr1->i[z] != 0) /* an emission: has a nonzero posterior prob*/ { if (esl_FCompare(tr1->pp[z], tr2->pp[z], pptol) != eslOK) esl_fatal("FAIL"); } else { if (tr1->pp[z] != tr2->pp[z]) esl_fatal("FAIL"); /* both 0.0 */ } } /* Optional domain index */ if (tr1->ndom > 0 && tr2->ndom > 0) { if (tr1->ndom != tr2->ndom) esl_fatal("FAIL"); for (d = 0; d < tr1->ndom; d++) { if (tr1->tfrom[d] != tr2->tfrom[d]) esl_fatal("FAIL"); if (tr1->tto[d] != tr2->tto[d]) esl_fatal("FAIL"); if (tr1->sqfrom[d] != tr2->sqfrom[d]) esl_fatal("FAIL"); if (tr1->sqto[d] != tr2->sqto[d]) esl_fatal("FAIL"); if (tr1->hmmfrom[d] != tr2->hmmfrom[d]) esl_fatal("FAIL"); if (tr1->hmmto[d] != tr2->hmmto[d]) esl_fatal("FAIL"); } } return eslOK; } /* Function: p7_trace_Score() * Incept: SRE, Tue Mar 6 14:40:34 2007 [Janelia] * * Purpose: Score path for digital target sequence * using profile . Return the lod score in * . * * Args: tr - traceback path to score * dsq - digitized sequence * gm - score profile * ret_sc - RETURN: lod score of trace * * Returns: on success, and <*ret_sc> contains the * lod score for the trace. * * Throws: if something's wrong with the trace. * Now <*ret_sc> is returned as $-\infty$. */ int p7_trace_Score(P7_TRACE *tr, ESL_DSQ *dsq, P7_PROFILE *gm, float *ret_sc) { float sc; /* total lod score */ float tsc; /* a transition score */ int z; /* position in tr */ int xi; /* digitized symbol in dsq */ int status; sc = 0.0f; for (z = 0; z < tr->N-1; z++) { xi = dsq[tr->i[z]]; if (tr->st[z] == p7T_M) sc += p7P_MSC(gm, tr->k[z], xi); else if (tr->st[z] == p7T_I) sc += p7P_ISC(gm, tr->k[z], xi); if ((status = p7_profile_GetT(gm, tr->st[z], tr->k[z], tr->st[z+1], tr->k[z+1], &tsc)) != eslOK) goto ERROR; sc += tsc; } *ret_sc = sc; return eslOK; ERROR: *ret_sc = -eslINFINITY; return status; } /* Function: p7_trace_SetPP() * Synopsis: Set posterior probs of an arbitrary trace. * Incept: SRE, Tue Aug 19 14:16:10 2008 [Janelia] * * Purpose: Set the posterior probability fields of an arbitrary * trace , by accessing posterior residue probabilities * in decoding matrix . * * In general, was created by * or converted from the optimized matrix created by * . * * This is classed as a debugging function for the moment, * because in general traces with posterior probabilities are * created directly using optimal accuracy DP routines. * This function allows us to add PP annotation to any * trace. * * Returns: on success. * * Throws: on allocation error. * on internal corruptions. */ int p7_trace_SetPP(P7_TRACE *tr, const P7_GMX *pp) { float **dp = pp->dp; /* so {MDI}MX() macros work */ float *xmx = pp->xmx; /* so XMX() macro works */ int z; int status; if (tr->pp == NULL) ESL_ALLOC(tr->pp, sizeof(float) * tr->nalloc); for (z = 0; z < tr->N; z++) { if (tr->i[z] > 0) /* an emitting state? */ { switch (tr->st[z]) { case p7T_M: tr->pp[z] = MMX(tr->i[z], tr->k[z]); break; case p7T_I: tr->pp[z] = IMX(tr->i[z], tr->k[z]); break; case p7T_N: tr->pp[z] = XMX(tr->i[z], p7G_N); break; case p7T_C: tr->pp[z] = XMX(tr->i[z], p7G_C); break; case p7T_J: tr->pp[z] = XMX(tr->i[z], p7G_J); break; default: ESL_EXCEPTION(eslEINVAL, "no such emitting state"); } } else tr->pp[z] = 0.0; } return eslOK; ERROR: return status; } /* Function: p7_trace_GetExpectedAccuracy() * Synopsis: Returns the sum of the posterior residue decoding probs. * Incept: SRE, Tue Aug 19 15:29:18 2008 [Janelia] */ float p7_trace_GetExpectedAccuracy(const P7_TRACE *tr) { float accuracy = 0.0; int z; for (z = 0; z < tr->N; z++) accuracy += tr->pp[z]; return accuracy; } /*------------------ end, debugging tools -----------------------*/ /***************************************************************** * 4. Creating traces by DP traceback *****************************************************************/ /* Function: p7_trace_Append() * Synopsis: Add an element (state/residue) to a growing trace. * * Purpose: Adds an element to a trace that is growing * left-to-right. The element is defined by a state type * (such as ); a node index (1..M for * M,D,I main states; else 0); and a dsq position (1..L * for emitters, else 0). * * For CNJ states, which emit on transition, by convention * we associate the emission with the downstream state; therefore * the first state in any run of CNJ states has i=0. * * Reallocates the trace (by doubling) if necessary. * * Caller can grow a trace right-to-left too, if it * plans to call . * * Returns: on success. * * Throws: on reallocation failure. The element is successfully * added, but no more elements can be added before this trace is * destroyed. * * if you try to add an element to a trace whose * reallocation has already failed. */ int p7_trace_Append(P7_TRACE *tr, char st, int k, int i) { int status; if ((status = p7_trace_Grow(tr)) != eslOK) return status; switch (st) { /* Emit-on-transition states: */ case p7T_N: case p7T_C: case p7T_J: tr->i[tr->N] = ( (tr->st[tr->N-1] == st) ? i : 0); tr->k[tr->N] = 0; break; /* Nonemitting states, outside main model: */ case p7T_X: case p7T_S: case p7T_B: case p7T_E: case p7T_T: tr->i[tr->N] = 0; tr->k[tr->N] = 0; break; /* Nonemitting, but in main model (k valid) */ case p7T_D: tr->i[tr->N] = 0; tr->k[tr->N] = k; break; /* Emitting states, with valid k position in model: */ case p7T_M: case p7T_I: tr->i[tr->N] = i; tr->k[tr->N] = k; break; default: ESL_EXCEPTION(eslEINVAL, "no such state; can't append"); } tr->st[tr->N] = st; tr->N++; return eslOK; } /* Function: p7_trace_AppendWithPP() * Synopsis: Add element to growing trace, with posterior probability. * * Purpose: Same as , but also records a posterior * probability estimate for emitted residues. is assumed to be * zero for nonemitting states even if a nonzero argument is * mistakenly passed. */ int p7_trace_AppendWithPP(P7_TRACE *tr, char st, int k, int i, float pp) { int status; if ((status = p7_trace_Grow(tr)) != eslOK) return status; switch (st) { /* Emit-on-transition states: */ case p7T_N: case p7T_C: case p7T_J: if (tr->st[tr->N-1] == st) { tr->i[tr->N] = i; tr->pp[tr->N] = pp; } else { tr->i[tr->N] = 0; tr->pp[tr->N] = 0.0; } tr->k[tr->N] = 0; break; /* Nonemitting states, outside main model: */ case p7T_X: case p7T_S: case p7T_B: case p7T_E: case p7T_T: tr->i[tr->N] = 0; tr->pp[tr->N] = 0.0; tr->k[tr->N] = 0; break; /* Nonemitting, but in main model (k valid) */ case p7T_D: tr->i[tr->N] = 0; tr->pp[tr->N] = 0.0; tr->k[tr->N] = k; break; /* Emitting states, with valid k position in model: */ case p7T_M: case p7T_I: tr->i[tr->N] = i; tr->pp[tr->N] = pp; tr->k[tr->N] = k; break; default: ESL_EXCEPTION(eslEINVAL, "no such state; can't append"); } tr->st[tr->N] = st; tr->N++; return eslOK; } /* Function: p7_trace_Reverse() * Synopsis: Reverse the arrays in a traceback structure. * * Purpose: Reverse the arrays in a traceback structure. Tracebacks * from DP algorithms are collected backwards, and they call this * function when they're done. * * At least for now, this invalidates any domain index * table, if it exists. The expectd order of invocation is * to create the traceback backwards, it, then * it. * * Args: tr - the traceback to reverse. tr->N must be set. * * Return: on success; is modified. */ int p7_trace_Reverse(P7_TRACE *tr) { int z; int tmp; float tmpf; /* For emit-on-transition states N,C,J, traces always obey the * C-,Cx,Cx,Cx convention even when they were constructed backwards; * so we make them Cx,Cx,Cx,C- by pulling residues backwards by one, * just before reversing them. (Other ways of doing this would be * fine too. */ for (z = 0; z < tr->N; z++) { if ( (tr->st[z] == p7T_N && tr->st[z+1] == p7T_N) || (tr->st[z] == p7T_C && tr->st[z+1] == p7T_C) || (tr->st[z] == p7T_J && tr->st[z+1] == p7T_J)) { if (tr->i[z] == 0 && tr->i[z+1] > 0) { tr->i[z] = tr->i[z+1]; tr->i[z+1] = 0; if (tr->pp != NULL) { tr->pp[z] = tr->pp[z+1]; tr->pp[z+1] = 0.0; } } } } /* Reverse the trace in place. */ for (z = 0; z < tr->N/2; z++) { tmp = tr->st[tr->N-z-1]; tr->st[tr->N-z-1] = tr->st[z]; tr->st[z] = tmp; tmp = tr->k[tr->N-z-1]; tr->k[tr->N-z-1] = tr->k[z]; tr->k[z] = tmp; tmp = tr->i[tr->N-z-1]; tr->i[tr->N-z-1] = tr->i[z]; tr->i[z] = tmp; if (tr->pp != NULL) { tmpf = tr->pp[tr->N-z-1]; tr->pp[tr->N-z-1] = tr->pp[z]; tr->pp[z] = tmpf; } } /* don't worry about the middle residue in odd-length N, since we're in-place */ return eslOK; } /* Function: p7_trace_Index() * Synopsis: Internally index the domains in a trace. * Incept: SRE, Fri Jan 4 11:12:24 2008 [Janelia] * * Purpose: Create an internal index of the domains in . * This makes calls to and * more efficient, and it is * a necessary prerequisite for creating alignments * of any individual domains in a multidomain trace with * . * * Returns: on success. * * Throws: on allocation failure, in which case the * data in the trace is still fine, but the domain index * table isn't constructed. */ int p7_trace_Index(P7_TRACE *tr) { int z; int status; tr->ndom = 0; for (z = 0; z < tr->N; z++) { switch (tr->st[z]) { case p7T_B: if ((status = p7_trace_GrowIndex(tr)) != eslOK) goto ERROR; tr->tfrom[tr->ndom] = z; tr->sqfrom[tr->ndom] = 0; tr->hmmfrom[tr->ndom] = 0; break; case p7T_M: if (tr->sqfrom[tr->ndom] == 0) tr->sqfrom[tr->ndom] = tr->i[z]; if (tr->hmmfrom[tr->ndom] == 0) tr->hmmfrom[tr->ndom] = tr->k[z]; tr->sqto[tr->ndom] = tr->i[z]; tr->hmmto[tr->ndom] = tr->k[z]; break; case p7T_E: tr->tto[tr->ndom] = z; tr->ndom++; break; } } return eslOK; ERROR: return status; } /*----------- end, creating traces by DP traceback ---------------*/ /***************************************************************** * 5. Creating faux traces from MSAs *****************************************************************/ /* Function: p7_trace_FauxFromMSA() * Synopsis: Create array of faux tracebacks from an existing MSA. * Incept: SRE, Thu May 21 08:07:25 2009 [Janelia] * * Purpose: Given an existing and an array that * flags the alignment columns that are assigned to consensus * match states (matassign[1..alen] = 1|0); create an array * of faux traces nseq-1]>. controls * optional behavior; it can be or , * as explained below. * * The traces are core traces: they start/end with B/E, * they may use I_0,I_M, and D_1 states. Any flanking * insertions (outside the first/last consensus column) are * assigned to I_0 and I_M. * * If the input alignment contains sequence fragments, * caller should first convert leading/trailing gaps to * missing data symbols. This hack causes entry/exit * transitions to be encoded in the trace as B->X->{MDI}k * and {MDI}k->X->E, rather than B->DDDD->Mk, Mk->DDDDD->E * paths involving terminal deletions, and all functions * that use traces, such as , (should) * ignore transitions involving states. * * By default (), the coordinate * in the faux tracebacks is <1..L>, relative to the * unaligned raw sequences in , the way most H3 traces * are supposed to be. In some cases (such as model * construction from an MSA) it is convenient to reference * residues in the MSA cooordinate system directly; setting * makes the traces come out * with coords for residues. * * Important: an MSA may imply DI and ID transitions that * are illegal in a core model. If the only purpose of the * traces is to go straight back into alignment * construction through a function, this * is ok, because the routines can handle * DI and ID transitions (enabling reconstruction of almost * exactly the same input alignment, modulo unaligned * insertions). This is what happens for , for example. However, if the caller wants to * use the traces for anything else, these illegal DI and * ID transitions have to be removed first, and the caller * should use to do it. * * Args: msa - digital alignment * matassign - flag for each alignment column, whether * it is consensus or not. matassign[1..alen] = 1|0; * matassign[0] = 0 * optflags - p7_DEFAULT | p7_MSA_COORDS * tr - RETURN: caller provides 0..nseq-1 pointer * array for holding returned traces. * * Returns: on success, and tr[0..nseq-1] now point to newly * created traces; caller is responsible for freeing these. * * Throws: on allocation error. * * Xref: J5/17: build.c::fake_tracebacks() becomes p7_trace_FauxFromMSA(); * ability to handle MSA or raw coords added. */ int p7_trace_FauxFromMSA(ESL_MSA *msa, int *matassign, int optflags, P7_TRACE **tr) { int idx; /* counter over seqs in MSA */ int k; /* position in HMM */ int apos; /* position in alignment columns 1..alen */ int rpos; /* position in unaligned sequence residues 1..L */ int showpos; /* coord to actually record: apos or rpos */ int status = eslOK; for (idx = 0; idx < msa->nseq; idx++) tr[idx] = NULL; for (idx = 0; idx < msa->nseq; idx++) { if ((tr[idx] = p7_trace_Create()) == NULL) goto ERROR; if ((status = p7_trace_Append(tr[idx], p7T_B, 0, 0)) != eslOK) goto ERROR; for (k = 0, rpos = 1, apos = 1; apos <= msa->alen; apos++) { showpos = (optflags & p7_MSA_COORDS) ? apos : rpos; if (matassign[apos]) { /* match or delete */ k++; if (esl_abc_XIsResidue(msa->abc, msa->ax[idx][apos])) status = p7_trace_Append(tr[idx], p7T_M, k, showpos); else if (esl_abc_XIsGap (msa->abc, msa->ax[idx][apos])) status = p7_trace_Append(tr[idx], p7T_D, k, 0); else if (esl_abc_XIsNonresidue(msa->abc, msa->ax[idx][apos])) status = p7_trace_Append(tr[idx], p7T_M, k, showpos); /* treat * as a residue! */ else if (esl_abc_XIsMissing(msa->abc, msa->ax[idx][apos])) { if (tr[idx]->st[tr[idx]->N-1] != p7T_X) status = p7_trace_Append(tr[idx], p7T_X, k, 0); /* allow only one X in a row */ } else ESL_XEXCEPTION(eslEINCONCEIVABLE, "can't happen"); } else { /* insert or nothing */ if (esl_abc_XIsResidue(msa->abc, msa->ax[idx][apos])) status = p7_trace_Append(tr[idx], p7T_I, k, showpos); else if (esl_abc_XIsNonresidue(msa->abc, msa->ax[idx][apos])) status = p7_trace_Append(tr[idx], p7T_I, k, showpos); /* treat * as a residue! */ else if (esl_abc_XIsMissing(msa->abc, msa->ax[idx][apos])) { if (tr[idx]->st[tr[idx]->N-1] != p7T_X) status = p7_trace_Append(tr[idx], p7T_X, k, 0); } else if (! esl_abc_XIsGap(msa->abc, msa->ax[idx][apos])) ESL_XEXCEPTION(eslEINCONCEIVABLE, "can't happen"); } if (esl_abc_XIsResidue(msa->abc, msa->ax[idx][apos])) rpos++; if (status != eslOK) goto ERROR; } if ((status = p7_trace_Append(tr[idx], p7T_E, 0, 0)) != eslOK) goto ERROR; /* k == M by construction; set tr->L = msa->alen since coords are w.r.t. ax */ tr[idx]->M = k; tr[idx]->L = msa->alen; } return eslOK; ERROR: for (idx = 0; idx < msa->nseq; idx++) { p7_trace_Destroy(tr[idx]); tr[idx] = NULL; } return status; } /* Function: p7_trace_Doctor() * Incept: SRE, Thu May 21 08:45:46 2009 [Janelia] * * Purpose: Plan 7 disallows D->I and I->D "chatter" transitions. * However, these transitions will be implied by many * alignments. trace_doctor() arbitrarily collapses I->D or * D->I into a single M position in the trace. * * trace_doctor does not examine any scores when it does * this. In ambiguous situations (D->I->D) the symbol * will be pulled arbitrarily to the left, regardless * of whether that's the best column to put it in or not. * * Args: tr - trace to doctor * opt_ndi - optRETURN: number of DI transitions doctored * opt_nid - optRETURN: number of ID transitions doctored * * Return: on success, and the trace is modified. */ int p7_trace_Doctor(P7_TRACE *tr, int *opt_ndi, int *opt_nid) { int opos; /* position in old trace */ int npos; /* position in new trace (<= opos) */ int ndi, nid; /* number of DI, ID transitions doctored */ /* overwrite the trace from left to right */ ndi = nid = 0; opos = npos = 0; while (opos < tr->N) { /* fix implied D->I transitions; D transforms to M, I pulled in */ if (tr->st[opos] == p7T_D && tr->st[opos+1] == p7T_I) { tr->st[npos] = p7T_M; tr->k[npos] = tr->k[opos]; /* D transforms to M */ tr->i[npos] = tr->i[opos+1]; /* insert char moves back */ opos += 2; npos += 1; ndi++; } /* fix implied I->D transitions; D transforms to M, I is pushed in */ else if (tr->st[opos]== p7T_I && tr->st[opos+1]== p7T_D) { tr->st[npos] = p7T_M; tr->k[npos] = tr->k[opos+1]; /* D transforms to M */ tr->i[npos] = tr->i[opos]; /* insert char moves up */ opos += 2; npos += 1; nid++; } /* everything else is just copied */ else { tr->st[npos] = tr->st[opos]; tr->k[npos] = tr->k[opos]; tr->i[npos] = tr->i[opos]; opos++; npos++; } } tr->N = npos; if (opt_ndi != NULL) *opt_ndi = ndi; if (opt_nid != NULL) *opt_nid = nid; return eslOK; } /*-------------- end, faux traces from MSAs ---------------------*/ /***************************************************************** * 6. Counting traces into new HMMs. *****************************************************************/ /* Function: p7_trace_Count() * * Purpose: Count a traceback into a count-based core HMM structure. * (Usually as part of a model parameter re-estimation.) * * The traceback may either be a core traceback (as in model * construction) or a profile traceback (as in model * reestimation). * * If it is a profile traceback, we have to be careful how * we translate an internal entry path from a score profile * back to the core model. Sometimes a B->M_k transition is * an internal entry from local alignment, and sometimes it * is a wing-folded B->D_1..DDM_k alignment to the core * model. * * This is one of the purposes of the special p7T_X * 'missing data' state in tracebacks. Local alignment entry * is indicated by a B->X->{MDI}_k 'missing data' path, and * direct B->M_k or M_k->E transitions in a traceback are * interpreted as wing retraction in a glocal model. * * The state is also used in core traces in model * construction literally to mean missing data, in the * treatment of sequence fragments. * * Args: hmm - counts-based HMM to count into * tr - alignment of seq to HMM * dsq - digitized sequence that traceback aligns to the HMM (1..L) * (or can be an ax, aligned digital seq) * wt - weight on this sequence * * Return: on success. * Weighted count events are accumulated in hmm's mat[][], ins[][], * t[][] fields: the core probability model. * * Throws: if something's corrupt in the trace; effect on hmm * counts is undefined, because it may abort at any point in the trace. */ int p7_trace_Count(P7_HMM *hmm, ESL_DSQ *dsq, float wt, P7_TRACE *tr) { int z; /* position in tr */ int i; /* symbol position in seq */ int st,st2; /* state type (cur, nxt) */ int k,k2,ktmp; /* node index (cur, nxt) */ for (z = 0; z < tr->N-1; z++) { if (tr->st[z] == p7T_X) continue; /* skip missing data */ /* pull some info into tmp vars for notational clarity later. */ st = tr->st[z]; st2 = tr->st[z+1]; k = tr->k[z]; k2 = tr->k[z+1]; i = tr->i[z]; /* Emission counts. */ if (st == p7T_M) esl_abc_FCount(hmm->abc, hmm->mat[k], dsq[i], wt); else if (st == p7T_I) esl_abc_FCount(hmm->abc, hmm->ins[k], dsq[i], wt); /* Transition counts */ if (st2 == p7T_X) continue; /* ignore transition to missing data */ if (st == p7T_B) { if (st2 == p7T_M && k2 > 1) /* wing-retracted B->DD->Mk path */ { hmm->t[0][p7H_MD] += wt; for (ktmp = 1; ktmp < k2-1; ktmp++) hmm->t[ktmp][p7H_DD] += wt; hmm->t[ktmp][p7H_DM] += wt; } else { switch (st2) { case p7T_M: hmm->t[0][p7H_MM] += wt; break; case p7T_I: hmm->t[0][p7H_MI] += wt; break; case p7T_D: hmm->t[0][p7H_MD] += wt; break; default: ESL_EXCEPTION(eslEINVAL, "bad transition in trace"); } } } else if (st == p7T_M) { switch (st2) { case p7T_M: hmm->t[k][p7H_MM] += wt; break; case p7T_I: hmm->t[k][p7H_MI] += wt; break; case p7T_D: hmm->t[k][p7H_MD] += wt; break; case p7T_E: hmm->t[k][p7H_MM] += wt; break; /* k==M. A local alignment would've been Mk->X->E. */ default: ESL_EXCEPTION(eslEINVAL, "bad transition in trace"); } } else if (st == p7T_I) { switch (st2) { case p7T_M: hmm->t[k][p7H_IM] += wt; break; case p7T_I: hmm->t[k][p7H_II] += wt; break; case p7T_E: hmm->t[k][p7H_IM] += wt; break; /* k==M. */ default: ESL_EXCEPTION(eslEINVAL, "bad transition in trace"); } } else if (st == p7T_D) { switch (st2) { case p7T_M: hmm->t[k][p7H_DM] += wt; break; case p7T_D: hmm->t[k][p7H_DD] += wt; break; case p7T_E: hmm->t[k][p7H_DM] += wt; break; /* k==M. A local alignment would've been Dk->X->E. */ default: ESL_EXCEPTION(eslEINVAL, "bad transition in trace"); } } } /* end loop over trace position */ return eslOK; } /*--------------------- end, trace counting ---------------------*/ /***************************************************************** * 7. Unit tests *****************************************************************/ #ifdef p7TRACE_TESTDRIVE /* convert an MSA to traces; then traces back to MSA; * starting and ending MSA should be the same, provided * the msa doesn't have any ambiguously aligned insertions. */ static void utest_faux(ESL_MSA *msa, int *matassign, int M) { char *msg = "p7_trace.c:: FauxFromMSA unit test failed"; ESL_MSA *msa2 = NULL; ESL_SQ **sq = malloc(sizeof(ESL_SQ) * msa->nseq); P7_TRACE **tr = malloc(sizeof(P7_TRACE) * msa->nseq); int i; int optflags = p7_DIGITIZE; for (i = 0; i < msa->nseq; i++) if (esl_sq_FetchFromMSA(msa, i, &(sq[i])) != eslOK) esl_fatal(msg); if (p7_trace_FauxFromMSA(msa, matassign, p7_MSA_COORDS, tr) != eslOK) esl_fatal(msg); if (p7_tracealign_MSA(msa, tr, M, optflags, &msa2) != eslOK) esl_fatal(msg); if (esl_msa_Compare(msa, msa2) != eslOK) esl_fatal(msg); esl_msa_Destroy(msa2); for (i = 0; i < msa->nseq; i++) p7_trace_Destroy(tr[i]); if (p7_trace_FauxFromMSA(msa, matassign, p7_DEFAULT, tr) != eslOK) esl_fatal(msg); if (p7_tracealign_Seqs(sq, tr, msa->nseq, M, optflags, NULL, &msa2) != eslOK) esl_fatal(msg); if (esl_msa_Compare(msa, msa2) != eslOK) esl_fatal(msg); esl_msa_Destroy(msa2); for (i = 0; i < msa->nseq; i++) p7_trace_Destroy(tr[i]); for (i = 0; i < msa->nseq; i++) esl_sq_Destroy(sq[i]); free(tr); free(sq); return; } #endif /*p7TRACE_TESTDRIVE*/ /*--------------------- end, unit tests -------------------------*/ /***************************************************************** * 8. Test driver *****************************************************************/ #ifdef p7TRACE_TESTDRIVE /* gcc -o p7_trace_utest -msse2 -std=gnu99 -g -O2 -I. -L. -I../easel -L../easel -Dp7TRACE_TESTDRIVE p7_trace.c -lhmmer -leasel -lm ./p7_trace_utest */ #include "p7_config.h" #include "easel.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_random.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for P7_TRACE"; int main(int argc, char **argv) { char *msg = "p7_trace_utest failed"; ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); ESL_MSA *msa = NULL; int alen = 6; int M = 4; int *matassign = malloc(sizeof(int) * (alen+1)); /* 1..alen */ /* Create a test MSA/matassign/M triplet */ /* missing data ~ doesn't work here yet; tracealign_* doesn't propagate p7T_X in any way */ if ((msa = esl_msa_CreateFromString("# STOCKHOLM 1.0\n#=GC RF .xxxx.\nseq1 AAAAAA\nseq2 -AAA--\nseq3 AA--AA\n//\n", eslMSAFILE_STOCKHOLM)) == NULL) esl_fatal(msg); if (esl_msa_Digitize(abc, msa,NULL) != eslOK) esl_fatal(msg); matassign[0] = 0; matassign[1] = 0; matassign[2] = 1; matassign[3] = 1; matassign[4] = 1; matassign[5] = 1; matassign[6] = 0; utest_faux(msa, matassign, M); free(matassign); esl_msa_Destroy(msa); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return eslOK; } #endif /*p7TRACE_TESTDRIVE*/ /*--------------------- end, test driver ------------------------*/ /************************************************************ * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/p7_trace.c $ * SVN $Id: p7_trace.c 3474 2011-01-17 13:25:32Z eddys $ ************************************************************/ hmmer-3.1b2/src/p7_config.h.in0000664361611702660230000001172512473612614015517 0ustar wheelerteddy/* @configure_input@ * p7config.h.in -> p7config.h * * p7config.h is generated from p7config.h.in by the ./configure script. * DO NOT EDIT p7config.h; only edit p7config.h.in. * * Configuration of HMMER, including both system-dependent configuration * (done by ./configure) and hardcoded configuration that someone might * want to alter someday. * * Because this header may configure the behavior of system headers * (for example, LFS support), it must be included before any other * header file. * * SRE, Mon Jan 1 16:07:28 2007 [Casa de Gatos] [Nirvana, Nevermind] * SVN $Id: p7_config.h.in 4483 2013-06-12 20:20:21Z wheelert $ */ #ifndef P7_CONFIGH_INCLUDED #define P7_CONFIGH_INCLUDED /***************************************************************** * 1. Compile-time constants that control HMMER's computational * behavior (memory and processor use), and output formatting. * It can be edited and configured manually before compilation. *****************************************************************/ /* p7_RAMLIMIT controls the switch from fast full DP to slow * linear-memory divide and conquer. Default devotes 32 MB/thread. */ #ifndef p7_RAMLIMIT #define p7_RAMLIMIT 32 #endif /* p7_ALILENGTH controls length of displayed alignment lines. */ #ifndef p7_ALILENGTH #define p7_ALILENGTH 50 #endif /***************************************************************** * 2. Compile-time constants that control empirically tuned HMMER * default parameters. You can edit it, but you ought not to, * unless you're trying to improve on our empirical data. *****************************************************************/ /* Relative entropy target defaults: * For proteins, hmmbuild's effective sequence number calculation * aims to achieve a certain relative entropy per match emission. * (= average score per match emission). * These are empirically tuned constants, */ #define p7_ETARGET_AMINO 0.59 /* bits, from the work of Steve Johnson. */ #define p7_ETARGET_DNA 0.45 /* bits, from the work of Travis Wheeler. */ #define p7_ETARGET_OTHER 1.0 /* bits */ /* if you define your own alphabet, set this */ #define p7_SEQDBENV "BLASTDB" #define p7_HMMDBENV "PFAMDB" /***************************************************************** * 3. The next section probably shouldn't be edited at all, unless * you really know what you're doing. It controls some fundamental * parameters in HMMER that occasionally get reconfigured in * experimental versions, or for variants of HMMER that work on * non-biological alphabets. *****************************************************************/ /* The symbol alphabet is handled by ESL_ALPHABET objects, which * dynamically allocate; but sometimes HMMER uses statically-allocated * space, and it's useful to know a reasonable maximum for * symbol alphabet size. */ #define p7_MAXABET 20 /* maximum size of alphabet (4 or 20) */ #define p7_MAXCODE 29 /* maximum degenerate alphabet size (18 or 29) */ /* p7_MAX_SC_TXTLEN has to be large enough to represent a score as a * string, including \0 and a sign. */ #define p7_MAX_SC_TXTLEN 11 /* Other stuff. */ #define p7_MAXDCHLET 20 /* maximum # Dirichlet components in mixture prior */ /***************************************************************** * 4. The final section isn't meant to be human editable at all. * It is configured automatically by the ./configure script. *****************************************************************/ /* Version info - set once for whole package in configure.ac */ #undef HMMER_VERSION #undef HMMER_DATE #undef HMMER_COPYRIGHT #undef HMMER_LICENSE #undef HMMER_URL /* Large file support (must precede any header file inclusion.) */ #undef _FILE_OFFSET_BITS #undef _LARGE_FILES #undef _LARGEFILE_SOURCE /* Choice of optimized implementation (one and only one must be set) */ #undef p7_IMPL_SSE #undef p7_IMPL_VMX #undef p7_IMPL_DUMMY /* System headers */ #undef HAVE_NETINET_IN_H /* On FreeBSD, you need netinet/in.h for struct sockaddr_in */ #undef HAVE_SYS_PARAM_H /* On OpenBSD, sys/sysctl.h needs sys/param.h */ #undef HAVE_SYS_SYSCTL_H /* Optional parallel implementations */ #undef HAVE_SSE2 #undef HAVE_MPI #undef HMMER_PVM #undef HMMER_THREADS #undef HAVE_PTHREAD_ATTR_SETSCOPE #undef HAVE_PTHREAD_SETCONCURRENCY /* Optional processor specific support */ #undef HAVE_FLUSH_ZERO_MODE /* Debugging hooks */ #undef p7_DEBUGGING #endif /*P7_CONFIGH_INCLUDED*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/heatmap.c0000664361611702660230000000704412473612613014647 0ustar wheelerteddy/* working version of heat map displays in PostScript * evolving toward eventual inclusion in Easel * * SRE, Thu Jan 25 09:51:18 2007 [Janelia] [Elgar, Enigma Variations] * SVN $Id: heatmap.c 3474 2011-01-17 13:25:32Z eddys $ */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_dmatrix.h" /* dmx_Visualize() * Incept: SRE, Wed Jan 24 11:58:21 2007 [Janelia] * * Purpose: * * Color scheme roughly follows Tufte, Envisioning * Information, p.91, where he shows a beautiful * bathymetric chart. The CMYK values conjoin two * recommendations from ColorBrewer (Cindy Brewer * and Mark Harrower) * [http://www.personal.psu.edu/cab38/ColorBrewer/ColorBrewer.html], * specifically the 9-class sequential2 Blues and * 9-class sequential YlOrBr. * * Might eventually become part of Easel, once mature? * * Note: Binning rules basically follow same convention as * esl_histogram. nb = xmax-xmin/w, so w = xmax-xmin/nb; * picking bin is (int) ceil((x - xmin)/w) - 1. (xref * esl_histogram_Score2Bin()). This makes bin b contain * values bw+min < x <= (b+1)w+min. (Which means that * min itself falls in bin -1, whoops - but we catch * all bin<0 and bin>=nshades and put them in the extremes. * * Args: * * Returns: * * Throws: (no abnormal error conditions) * * Xref: */ int dmx_Visualize(FILE *fp, ESL_DMATRIX *D, double min, double max) { int nshades = 18; double cyan[] = { 1.00, 1.00, 0.90, 0.75, 0.57, 0.38, 0.24, 0.13, 0.03, 0.00, 0.00, 0.00, 0.00, 0.00, 0.07, 0.20, 0.40, 0.60}; double magenta[] = { 0.55, 0.45, 0.34, 0.22, 0.14, 0.08, 0.06, 0.03, 0.01, 0.00, 0.03, 0.11, 0.23, 0.40, 0.55, 0.67, 0.75, 0.80}; double yellow[] = { 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.10, 0.25, 0.40, 0.65, 0.80, 0.90, 1.00, 1.00, 1.00}; double black[] = { 0.30, 0.07, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00}; double w; int i,j; int bin; int boxsize; /* box size in points */ int xcoord, ycoord; /* postscript coords in points */ int leftmargin; int bottommargin; /* Set some defaults that might become arguments later. */ leftmargin = 20; bottommargin = 20; /* Determine some working parameters */ w = (max-min) / (double) nshades; /* w = bin size for assigning values->colors*/ boxsize = ESL_MIN( (792 - bottommargin) / D->n, (612 - leftmargin) / D->m); /* or start from j=i, to do diagonals */ for (i = 0; i < D->n; i++) for (j = 0; j < D->m; j++) { xcoord = j * boxsize + leftmargin; ycoord = (D->n-i+1) * boxsize + bottommargin; if (D->mx[i][j] == -eslINFINITY) bin = 0; else if (D->mx[i][j] == eslINFINITY) bin = nshades-1; else { bin = (int) ceil((D->mx[i][j] - min) / w) - 1; if (bin < 0) bin = 0; if (bin >= nshades) bin = nshades-1; } fprintf(fp, "newpath\n"); fprintf(fp, " %d %d moveto\n", xcoord, ycoord); fprintf(fp, " 0 %d rlineto\n", boxsize); fprintf(fp, " %d 0 rlineto\n", boxsize); fprintf(fp, " 0 -%d rlineto\n", boxsize); fprintf(fp, " closepath\n"); fprintf(fp, " %.2f %.2f %.2f %.2f setcmykcolor\n", cyan[bin], magenta[bin], yellow[bin], black[bin]); fprintf(fp, " fill\n"); } fprintf(fp, "showpage\n"); return eslOK; } hmmer-3.1b2/src/fm_ssv.c0000664361611702660230000010372712473612612014531 0ustar wheelerteddy#include "p7_config.h" #include #include "easel.h" #include "esl_alphabet.h" #include "esl_gumbel.h" #include "esl_sq.h" #include "hmmer.h" /* hit_sorter(): qsort's pawn, below */ static int FM_hit_sorter(const void *a, const void *b) { // return 2 * (((FM_DIAG*)a)->sortkey > ((FM_DIAG*)b)->sortkey) - 1; // same as the test below if ( ((FM_DIAG*)a)->sortkey > ((FM_DIAG*)b)->sortkey) return 1; else return -1; } /* Function: FM_mergeSeeds() * * Synopsis: Given collection of seeds, sort and merge overlapping ones * * Returns: on success. */ static int FM_mergeSeeds(FM_DIAGLIST *seeds, int N, int ssv_length) { int i; int j = 0; FM_DIAG next; int tmp; int next_is_complement; int curr_is_complement; int curr_n; int curr_k; int curr_len; int curr_end; int curr_diagval; FM_DIAG *diags = seeds->diags; if (seeds->count == 0) return eslOK; //sort, first by direction, then N (position on database sequence), then K (model position) qsort(diags, seeds->count, sizeof(FM_DIAG), FM_hit_sorter); next = diags[0]; curr_is_complement = (next.complementarity == p7_COMPLEMENT); curr_n = next.n; curr_k = next.k; curr_len = next.length; curr_end = curr_n + curr_len - 1; curr_diagval = next.n - next.k; for( i=1; icount; i++) { next = diags[i]; next_is_complement = (next.complementarity == p7_COMPLEMENT); if ( next_is_complement == curr_is_complement //same direction && ( next.n - next.k) == curr_diagval //overlapping diagonals will share the same value of (n - k) && next.n + next.length < curr_n + curr_len + ssv_length //overlapping, or close to it ) { //overlapping diags; extend, if appropriate tmp = next.n + next.length - 1; if (tmp > curr_end) { curr_end = tmp; curr_len = curr_end - curr_n + 1; } } else { //doesn't overlap current diagonal, so store current... diags[j].n = curr_n; diags[j].k = curr_k; diags[j].length = curr_end - curr_n + 1; diags[j].complementarity = curr_is_complement; diags[j].score = 0.0; // ... then start up a new one curr_n = next.n; curr_k = next.k; curr_len = next.length; curr_end = curr_n + curr_len - 1; curr_diagval = next.n - next.k; curr_is_complement = next_is_complement; j++; } } // store final entry diags[j].n = curr_n; diags[j].k = curr_k; diags[j].length = curr_end - curr_n + 1; diags[j].score = 0.0; diags[j].complementarity = curr_is_complement; seeds->count = j+1; return eslOK; } /* Function: FM_backtrackSeed() * * Synopsis: Find position(s) in the FM index for a diagonal that meets score threshold * * Details: Follows the BWT/FM-index until finding an entry of the implicit * suffix array that is found in the sampled SA. * * Args: fmf - FM index for finding matches to the input sequence * fm_cfg - FM-index meta data * i - Single position in the BWT * * Returns: on success. */ static uint32_t FM_backtrackSeed(const FM_DATA *fmf, const FM_CFG *fm_cfg, int i) { int j = i; int len = 0; int c; while ( j != fmf->term_loc && (j % fm_cfg->meta->freq_SA)) { //go until we hit a position in the full SA that was sampled during FM index construction c = fm_getChar( fm_cfg->meta->alph_type, j, fmf->BWT); j = fm_getOccCount (fmf, fm_cfg, j-1, c); j += abs(fmf->C[c]); len++; } return len + (j==fmf->term_loc ? 0 : fmf->SA[ j / fm_cfg->meta->freq_SA ]) ; // len is how many backward steps we had to take to find a sampled SA position } /* Function: FM_getPassingDiags() * * Synopsis: Find position(s) in the FM index for a seed that meets score threshold, keep list * * Details: This step determines the location of each instance of the seed * and creates a diagonal for that instance * * Args: fmf - FM index for finding matches to the input sequence * fmb - FM index for finding matches to the reverse of the input sequence * fm_cfg - FM-index meta data * k - Position of the diagonal in the model * M - Length of the model * depth - Length of the diagonal * fm_direction - which FM is in use for this diag * model_direction - forward or reverse path over the model * complementarity - top or bottom strand * interval - FM-index interval * seeds - RETURN: collection of threshold-passing windows * * Returns: on success. */ static int FM_getPassingDiags(const FM_DATA *fmf, const FM_CFG *fm_cfg, int k, int M, float sc, int depth, int fm_direction, int model_direction, int complementarity, FM_INTERVAL *interval, FM_DIAGLIST *seeds ) { int i; FM_DIAG *seed; //iterate over the forward interval, for each entry backtrack until hitting a sampled suffix array entry for (i = interval->lower; i<= interval->upper; i++) { seed = fm_newSeed(seeds); seed->k = k; seed->length = depth; if (complementarity == p7_NOCOMPLEMENT ) seed->n = fmf->N - FM_backtrackSeed(fmf, fm_cfg, i) - depth - 1; else seed->n = FM_backtrackSeed(fmf, fm_cfg, i) ; seed->complementarity = complementarity; /* seed->n corresponds to the start of the seed in terms of the * target sequence, in a forward direction. seed->k holds the * model position at the beginning of that seed. If model_direction * is fm_reverse, the ->n value is from the beginning of the revcomp, */ if (model_direction == fm_forward) seed->k -= (depth - 1) ; seed->sortkey = (int)( complementarity == p7_COMPLEMENT ? fmf->N + 1 : 0) // makes complement seeds cover a different score range than non-complements + ((int)(seed->n) - (int)(seed->k) ) // unique diagonal within the complement/non-complement score range + ((double)(seed->k)/(double)(M+1)) ; // fractional part, used to sort seeds sharing a diagonal } return eslOK; } /* Function: FM_Recurse() * * Synopsis: Recursively traverse/prune a string trie, testing all strings vs the model * * Details: This is the heart of the FM SSV method. Given a path P on the * trie, we keep track of a compact list of all not-yet-pruned * diagonals in the DP table of the string S corresponding to * P against the model. The preserved diagonals might be for * either a forward or backwards pass over the model and a pass * over either the top or bottom (reverse complemented) strand * of the target sequences. * * Args: depth - how long is the current path * Kp - alphabet size (including ambiguity) * fmf - FM index for finding matches to the input sequence * fmb - FM index for finding matches to the reverse of the input sequence * fm_cfg - FM-index meta data * ssvdata - compact data required for computing SSV scores * sc_threshFM - Score that a short diagonal must pass to warrant extension to a full diagonal * dp_pairs - Compact representation of the surviving diagonals in the DP table * first - The index of the first entry in dp_pairs for the current column of the DP table * last - The index of the last entry in dp_pairs for the current column of the DP table * interval_1 - FM-index interval - used for the standard backwards pass along the BWT (fmf) * interval_2 - FM-index interval - used for the forward pass along the BWT (fmb) * seeds - RETURN: collection of threshold-passing windows * seq - preallocated char* used to capture and print the string for the current path - for debugging only * * Returns: on success. */ static int FM_Recurse( int depth, int Kp, int fm_direction, const FM_DATA *fmf, const FM_DATA *fmb, const FM_CFG *fm_cfg, const P7_SCOREDATA *ssvdata, uint8_t *consensus, float sc_threshFM, FM_DP_PAIR *dp_pairs, int first, int last, FM_INTERVAL *interval_1, FM_INTERVAL *interval_2, FM_DIAGLIST *seeds , char *seq ) { float sc, next_score; int c, i, k; FM_INTERVAL interval_1_new, interval_2_new; uint8_t positive_run = 0; uint8_t consec_consensus = 0; for (c=0; c< fm_cfg->meta->alph_size; c++) {//acgt int dppos = last; seq[depth-1] = fm_cfg->meta->alph[c]; seq[depth] = '\0'; for (i=first; i<=last; i++) { // for each surviving diagonal from the previous round if (dp_pairs[i].model_direction == fm_forward) k = dp_pairs[i].pos + 1; else //fm_backward k = dp_pairs[i].pos - 1; if (dp_pairs[i].complementarity == p7_COMPLEMENT) { next_score = ssvdata->ssv_scores_f[k*Kp + fm_cfg->meta->compl_alph[c]]; } else { next_score = ssvdata->ssv_scores_f[k*Kp + c]; } sc = dp_pairs[i].score + next_score; positive_run = (next_score > 0 ? dp_pairs[i].consec_pos + 1 : 0); consec_consensus = (c == consensus[k] ? dp_pairs[i].consec_consensus+1 : 0); if ( sc >= sc_threshFM || (fm_cfg->consensus_match_req > 0 && consec_consensus == fm_cfg->consensus_match_req) ) { // this is a seed I want to extend interval_1_new.lower = interval_1->lower; interval_1_new.upper = interval_1->upper; if (fm_direction == fm_forward) { if ( interval_1_new.lower >= 0 && interval_1_new.lower <= interval_1_new.upper ) //no use extending a non-existent string fm_updateIntervalReverse( fmf, fm_cfg, c, &interval_1_new); if ( interval_1_new.lower >= 0 && interval_1_new.lower <= interval_1_new.upper ) { //no use passing a non-existent string FM_getPassingDiags(fmf, fm_cfg, k, ssvdata->M, sc, depth, fm_forward, dp_pairs[i].model_direction, dp_pairs[i].complementarity, &interval_1_new, seeds); } } else { // fm_direction == fm_reverse //searching for forward matches on the FM-index interval_2_new.lower = interval_2->lower; interval_2_new.upper = interval_2->upper; //searching for reverse matches on the FM-index if ( interval_1_new.lower >= 0 && interval_1_new.lower <= interval_1_new.upper ) //no use extending a non-existent string fm_updateIntervalForward( fmb, fm_cfg, c, &interval_1_new, &interval_2_new); if ( interval_2_new.lower >= 0 && interval_2_new.lower <= interval_2_new.upper ) { //no use passing a non-existent string FM_getPassingDiags(fmf, fm_cfg, k, ssvdata->M, sc, depth, fm_backward, dp_pairs[i].model_direction, dp_pairs[i].complementarity, &interval_2_new, seeds); } } } else if ( sc <= 0 //some other path in the string enumeration tree will do the job || depth == fm_cfg->max_depth //can't extend anymore, 'cause we've reached the pruning length || ( dp_pairs[i].model_direction == fm_forward && k == ssvdata->M) //can't extend anymore, 'cause we're at the end of the model, going forward || ( dp_pairs[i].model_direction == fm_backward && k == 1 ) //can't extend anymore, 'cause we're at the beginning of the model, going backwards || (depth == dp_pairs[i].score_peak_len + fm_cfg->drop_max_len) //too many consecutive positions with a negative total score contribution (sort of like Xdrop) || (depth > 4 && depth > consec_consensus && (float)sc/(float)depth < fm_cfg->score_density_req) //score density is too low (don't bother checking in the first couple slots || (depth >= 0.7*fm_cfg->max_depth && depth > consec_consensus && (float)sc/(float)depth < sc_threshFM/(float)(fm_cfg->max_depth)) // if we're most of the way across the sequence, and score density is too low, abort -- if the density on the other side is high enough, I'll find it on the reverse sweep || (dp_pairs[i].max_consec_pos < fm_cfg->consec_pos_req && //a seed is expected to have at least one run of positive-scoring matches at least length consec_pos_req; if it hasn't, (see Tue Nov 23 09:39:54 EST 2010) (fm_cfg->consec_pos_req - positive_run) == (fm_cfg->max_depth - depth + 1) // if we're close to the end of the sequence, abort -- if that end does have sufficiently long all-positive run, I'll find it on the reverse sweep ) || (dp_pairs[i].model_direction == fm_forward && ( (depth > (fm_cfg->max_depth - 10)) && sc + ssvdata->opt_ext_fwd[k][fm_cfg->max_depth-depth-1] < sc_threshFM) //can't hit threshold, even with best possible forward extension up to length ssv_req ) || (dp_pairs[i].model_direction == fm_backward && ( (depth > (fm_cfg->max_depth - 10)) && sc + ssvdata->opt_ext_rev[k-1][fm_cfg->max_depth-depth-1] < sc_threshFM ) //can't hit threshold, even with best possible extension up to length ssv_req ) ) { //do nothing - it's been pruned } else { // it's possible to extend this diagonal and reach the threshold score dppos++; dp_pairs[dppos].pos = k; dp_pairs[dppos].score = sc; dp_pairs[dppos].model_direction = dp_pairs[i].model_direction; dp_pairs[dppos].complementarity = dp_pairs[i].complementarity; if (sc > dp_pairs[i].max_score) { dp_pairs[dppos].max_score = sc; dp_pairs[dppos].score_peak_len = depth; } else { dp_pairs[dppos].max_score = dp_pairs[i].max_score; if (sc >= dp_pairs[i].max_score - fm_cfg->drop_lim) dp_pairs[dppos].score_peak_len = depth; // close enough to call it a new peak else dp_pairs[dppos].score_peak_len = dp_pairs[i].score_peak_len; } dp_pairs[dppos].consec_pos = positive_run; dp_pairs[dppos].max_consec_pos = ESL_MAX( positive_run, dp_pairs[i].max_consec_pos); dp_pairs[dppos].consec_consensus = consec_consensus; } } if ( dppos > last ){ // at least one diagonal that might reach threshold score, but hasn't yet, so extend interval_1_new.lower = interval_1->lower; interval_1_new.upper = interval_1->upper; if (fm_direction == fm_forward) { if ( interval_1_new.lower >= 0 && interval_1_new.lower <= interval_1_new.upper ) //no use extending a non-existent string fm_updateIntervalReverse( fmf, fm_cfg, c, &interval_1_new); if ( interval_1_new.lower < 0 || interval_1_new.lower > interval_1_new.upper ) { //that string doesn't exist in fwd index continue; } FM_Recurse(depth+1, Kp, fm_direction, fmf, fmb, fm_cfg, ssvdata, consensus, sc_threshFM, dp_pairs, last+1, dppos, &interval_1_new, NULL, seeds , seq ); } else { // fm_direction == fm_reverse interval_2_new.lower = interval_2->lower; interval_2_new.upper = interval_2->upper; if ( interval_1_new.lower >= 0 && interval_1_new.lower <= interval_1_new.upper ) //no use extending a non-existent string fm_updateIntervalForward( fmb, fm_cfg, c, &interval_1_new, &interval_2_new); if ( interval_1_new.lower < 0 || interval_1_new.lower > interval_1_new.upper ) { //that string doesn't exist in reverse index continue; } FM_Recurse(depth+1, Kp, fm_direction, fmf, fmb, fm_cfg, ssvdata, consensus, sc_threshFM, dp_pairs, last+1, dppos, &interval_1_new, &interval_2_new, seeds , seq ); } } } return eslOK; } /* Function: FM_getSeeds() * * Synopsis: Find short diagonal seeds with score above a modest threshold. * * Details: Given FM configuration , model scoring data , * both forward and backward FM indexes (, ), and * a score threshold , find all seeds in the FMs * that meet the threshold, and place them in the container * . * * This involves building diagonals in both forward and reverse * orientation relative to the model, because the pruning method * includes a score density calculation - sometimes that density * is only found on one end of the hit. This function merely * kickstarts the task of traversing over a trie of all strings * up to some fixed length looking for threshold-passing * diagonals - FM_Recurse() does the hard work. * * Args: fmf - FM index for finding matches to the input sequence * fmb - FM index for finding matches to the reverse of the input sequence * fm_cfg - FM-index meta data * ssvdata - compact data required for computing SSV scores * Kp - Alphabet size (including ambiguity chars) * sc_threshFM - Score that a short diagonal must pass to warrant extension to a full diagonal * strands - p7_STRAND_TOPONLY | p7_STRAND_BOTTOMONLY | p7_STRAND_BOTH * seeds - RETURN: collection of threshold-passing windows * * Returns: on success. */ static int FM_getSeeds ( const FM_DATA *fmf, const FM_DATA *fmb, const FM_CFG *fm_cfg, const P7_SCOREDATA *ssvdata, uint8_t *consensus, int Kp, float sc_threshFM, int strands, FM_DIAGLIST *seeds ) { FM_INTERVAL interval_f1, interval_f2, interval_bk; int i, k; int status; float sc; char *seq; FM_DP_PAIR *dp_pairs_fwd; FM_DP_PAIR *dp_pairs_rev; ESL_ALLOC(dp_pairs_fwd, ssvdata->M * fm_cfg->max_depth * sizeof(FM_DP_PAIR)); // guaranteed to be enough to hold all diagonals ESL_ALLOC(dp_pairs_rev, ssvdata->M * fm_cfg->max_depth * sizeof(FM_DP_PAIR)); ESL_ALLOC(seq, 50*sizeof(char)); for (i=0; imeta->alph_size; i++) { int fwd_cnt=0; int rev_cnt=0; interval_f1.lower = interval_f2.lower = interval_bk.lower = fmf->C[i]; interval_f1.upper = interval_f2.upper = interval_bk.upper = abs(fmf->C[i+1])-1; if (interval_f1.lower<0 ) //none of that character found continue; // This is here for debugging purposes only. Feel free to comment out. seq[0] = fm_cfg->meta->alph[i]; seq[1] = '\0'; // Fill in a DP column for the character c, (compressed so that only positive-scoring entries are kept) // There will be 4 DP columns for each character, (1) fwd-std, (2) fwd-complement, (3) rev-std, (4) rev-complement for (k = 1; k <= ssvdata->M; k++) // there's no need to bother keeping an entry starting at the last position (gm->M) { if (strands != p7_STRAND_BOTTOMONLY) { sc = ssvdata->ssv_scores_f[k*Kp + i]; if (sc>0) { // we'll extend any positive-scoring diagonal /* fwd on model, fwd on FM (really, reverse on FM, but the FM is on a reversed string, so its fwd*/ if (k < ssvdata->M-3) { // don't bother starting a forward diagonal so close to the end of the model //Forward pass on the FM-index dp_pairs_fwd[fwd_cnt].pos = k; dp_pairs_fwd[fwd_cnt].score = sc; dp_pairs_fwd[fwd_cnt].max_score = sc; dp_pairs_fwd[fwd_cnt].score_peak_len = 1; dp_pairs_fwd[fwd_cnt].consec_pos = 1; dp_pairs_fwd[fwd_cnt].max_consec_pos = 1; dp_pairs_fwd[fwd_cnt].consec_consensus = (i==consensus[k] ? 1 : 0); dp_pairs_fwd[fwd_cnt].complementarity = p7_NOCOMPLEMENT; dp_pairs_fwd[fwd_cnt].model_direction = fm_forward; fwd_cnt++; } /* rev on model, rev on FM (the FM is on the unreversed string)*/ if (k > 4) { // don't bother starting a reverse diagonal so close to the start of the model dp_pairs_rev[rev_cnt].pos = k; dp_pairs_rev[rev_cnt].score = sc; dp_pairs_rev[rev_cnt].max_score = sc; dp_pairs_rev[rev_cnt].score_peak_len = 1; dp_pairs_rev[rev_cnt].consec_pos = 1; dp_pairs_rev[rev_cnt].max_consec_pos = 1; dp_pairs_rev[rev_cnt].consec_consensus = (i==consensus[k] ? 1: 0); dp_pairs_rev[rev_cnt].complementarity = p7_NOCOMPLEMENT; dp_pairs_rev[rev_cnt].model_direction = fm_backward; rev_cnt++; } } } // Now do the reverse complement if (strands != p7_STRAND_TOPONLY) { sc = ssvdata->ssv_scores_f[k*Kp + fm_cfg->meta->compl_alph[i]]; if (sc>0) { // we'll extend any positive-scoring diagonal /* rev on model, fwd on FM (really, reverse on FM, but the FM is on a reversed string, so its fwd*/ if (k > 4) { // don't bother starting a reverse diagonal so close to the start of the model dp_pairs_fwd[fwd_cnt].pos = k; dp_pairs_fwd[fwd_cnt].score = sc; dp_pairs_fwd[fwd_cnt].max_score = sc; dp_pairs_fwd[fwd_cnt].score_peak_len = 1; dp_pairs_fwd[fwd_cnt].consec_pos = 1; dp_pairs_fwd[fwd_cnt].max_consec_pos = 1; dp_pairs_fwd[fwd_cnt].consec_consensus = (i==consensus[k] ? 1: 0); dp_pairs_fwd[fwd_cnt].complementarity = p7_COMPLEMENT; dp_pairs_fwd[fwd_cnt].model_direction = fm_backward; fwd_cnt++; } /* fwd on model, rev on FM (the FM is on the unreversed string - complemented)*/ if (k < ssvdata->M-3) { // don't bother starting a forward diagonal so close to the end of the model dp_pairs_rev[rev_cnt].pos = k; dp_pairs_rev[rev_cnt].score = sc; dp_pairs_rev[rev_cnt].max_score = sc; dp_pairs_rev[rev_cnt].score_peak_len = 1; dp_pairs_rev[rev_cnt].consec_pos = 1; dp_pairs_rev[rev_cnt].max_consec_pos = 1; dp_pairs_rev[rev_cnt].consec_consensus = (i==consensus[k] ? 1: 0); dp_pairs_rev[rev_cnt].complementarity = p7_COMPLEMENT; dp_pairs_rev[rev_cnt].model_direction = fm_forward; rev_cnt++; } } } } FM_Recurse ( 2, Kp, fm_forward, fmf, fmb, fm_cfg, ssvdata, consensus, sc_threshFM, dp_pairs_fwd, 0, fwd_cnt-1, &interval_f1, NULL, seeds , seq ); FM_Recurse ( 2, Kp, fm_backward, fmf, fmb, fm_cfg, ssvdata, consensus, sc_threshFM, dp_pairs_rev, 0, rev_cnt-1, &interval_bk, &interval_f2, seeds , seq ); } //merge duplicates FM_mergeSeeds(seeds, fmf->N, fm_cfg->ssv_length); free (dp_pairs_fwd); free (dp_pairs_rev); if (seq) free(seq); return eslOK; ERROR: return eslEMEM; } /* Function: FM_window_from_diag() * * Synopsis: Create a hit window, with sequence-based coordinates, from a diagonal * holding FM-based coordinates * * Details: The submitted diagonal is in FM-based coordinates. Since a single * FM index might be the concatenation of many sequences in the * original, this needs to be converted to coordinates in the * original sequence space (get sequence ID and positions). A diag * might span multiple input strings, so it is broken up as * necessary (usually, only one of these will pan out as a legit * diagonal, but we'll let the next stage sort that out). * * Args: diag - The FM-based diagonal * fm - Data for the FM-index. * meta - FM metadata from the config * windowlist - RETURN: collection of SSV-passing windows, with meta data required for downstream stages. * * Returns: on success. */ static int FM_window_from_diag (FM_DIAG *diag, const FM_DATA *fm, const FM_METADATA *meta, P7_HMM_WINDOWLIST *windowlist) { // if diag->complementarity == p7_NOCOMPLEMENT, these positions are in context of FM->T // otherwise, they're in context of revcomp(FM->T). int status; uint32_t seg_id; uint64_t seg_pos; status = fm_getOriginalPosition (fm, meta, 0, diag->length, diag->complementarity, diag->n, &seg_id, &seg_pos); p7_hmmwindow_new(windowlist, seg_id, seg_pos, diag->n, diag->k+diag->length-1, diag->length, diag->score, diag->complementarity, meta->seq_data[seg_id].length); return eslOK; } /* Function: FM_extendSeed() * Synopsis: Extend seed in both diagonal directions, capturing the score * * Details: Given a diagonal seed found using FM-index traversal (typically * around length 16, with a modest score, but not necessarily enough * to pass the SSV threshold), establish a window around that seed, * and extend it to maximize score (with the constraint of not going * through a long negative scoring stretch). Capture the score of * this extended diagonal. * * Args: diag - The initial seed * fm - Data for the FM-index (only need the forward FM from the * calling function). * ssvdata - Compact data required for computing MSV (SSV) scores * cfg - FM-index meta data * tmp_sq - Sequence object that this function uses for calculations. * Must be pre-allocated. * * Returns: on success. */ static int FM_extendSeed(FM_DIAG *diag, const FM_DATA *fm, const P7_SCOREDATA *ssvdata, FM_CFG *cfg, ESL_SQ *tmp_sq) { uint64_t k,n; int32_t model_start, model_end; int64_t target_start, target_end; int64_t hit_start, max_hit_start, max_hit_end; float sc; float max_sc = 0.0; int c; // this will allow a diagonal to be extended at least 10 bases in each direction, an up to as much as required to allow a diag of length cfg->ssv_length int extend = ESL_MAX(10, cfg->ssv_length - diag->length); //this determines the start and end of the window that we think it's possible we'll extend to the window to (which determines the sequence we'll extract) model_start = ESL_MAX ( 1, diag->k - extend + 1) ; model_end = ESL_MIN( ssvdata->M, diag->k + diag->length + extend - 1 ); target_start = diag->n - (diag->k - model_start); target_end = diag->n + (model_end - diag->k); if (target_start < 0) { model_start -= target_start; target_start = 0; } if (target_end > fm->N-2) { model_end -= target_end - (fm->N-2); target_end = fm->N-2; } fm_convertRange2DSQ(fm, cfg->meta, target_start, target_end-target_start+1, diag->complementarity, tmp_sq, FALSE ); //This finds the highest-scoring sub-diag in the just-determined potential diagonal range. k = model_start; n = 1; sc = 0.0; hit_start = n; for ( ; k <= model_end; k++, n++) { c = tmp_sq->dsq[n]; sc += ssvdata->ssv_scores_f[k*tmp_sq->abc->Kp + c]; if (sc < 0) { sc = 0; hit_start = n+1; } else if (sc > max_sc) { max_sc = sc; max_hit_start = hit_start; max_hit_end = n; } } diag->n = target_start + max_hit_start - 1; diag->k = model_start + max_hit_start - 1; diag->length = max_hit_end - max_hit_start + 1; diag->score = max_sc; return eslOK; } /* Function: p7_SSVFM_longlarget() * Synopsis: Finds windows with SSV scores above given threshold, using FM-index * * Details: Uses FM-index to find high-scoring diagonals (seeds), then extends those * seeds to maximal scoring diagonals (no gaps). Windows meeting the SSV * scoring threshold (usually score s.t. p=0.02) are captured, and passed * on to the Viterbi and Forward stages of the pipeline. * * Args: om - optimized profile * nu - configuration: expected number of hits (use 2.0 as a default) * bg - the background model, required for translating a P-value threshold into a score threshold * F1 - p-value below which a window is captured as being above threshold * fmf - data for forward traversal of the FM-index * fmb - data for backward traversal of the FM-index * fm_cfg - FM-index meta data * ssvdata - compact data required for computing SSV scores * strands - p7_STRAND_TOPONLY | p7_STRAND_BOTTOMONLY | p7_STRAND_BOTH * windowlist - RETURN: collection of SSV-passing windows, with meta data required for downstream stages. * * Returns: on success. * * Throws: if trouble allocating memory for seeds */ int p7_SSVFM_longlarget( P7_OPROFILE *om, float nu, P7_BG *bg, double F1, const FM_DATA *fmf, const FM_DATA *fmb, FM_CFG *fm_cfg, const P7_SCOREDATA *ssvdata, int strands, P7_HMM_WINDOWLIST *windowlist) { float sc_thresh, sc_threshFM; float invP; //, invP_FM; float nullsc; int i; float tloop = logf((float) om->max_length / (float) (om->max_length+3)); float tloop_total = tloop * om->max_length; float tmove = logf( 3.0f / (float) (om->max_length+3)); float tbmk = logf( 2.0f / ((float) om->M * (float) (om->M+1))); float tec = logf(1.0f / nu); FM_DIAG *diag; ESL_SQ *tmp_sq; uint8_t *consensus; FM_DIAGLIST seeds; int status; status = fm_initSeeds(&seeds); if (status != eslOK) ESL_EXCEPTION(eslEMEM, "Error allocating memory for seed list\n"); /* convert the consensus to a collection of ints, so I can test for runs of identity to the consensus */ ESL_ALLOC(consensus, (om->M+1)*sizeof(uint8_t) ); for (i=1; i<=om->M; i++) consensus[i] = om->abc->inmap[(int)(om->consensus[i])]; /* Set false target length. This is a conservative estimate of the length of window that'll * soon be passed on to later phases of the pipeline; used to recover some bits of the score * that we would miss if we left length parameters set to the full target length */ p7_oprofile_ReconfigMSVLength(om, om->max_length); p7_bg_SetLength(bg, om->max_length); p7_bg_NullOne (bg, NULL, om->max_length, &nullsc); tmp_sq = esl_sq_CreateDigital(om->abc); /* * Computing the score required to let P meet the F1 prob threshold * In original code, converting from an SSV score S (the score getting * to state C) to a probability goes like this: * S = XMX(L,p7G_C) * usc = S + tmove + tloop_total * P = f ( (usc - nullsc) / eslCONST_LOG2 , mu, lambda) * and XMX(C) was the diagonal score + tmove + tbmk + tec * and we're computing the threshold score S, so reverse it: * (usc - nullsc) / eslCONST_LOG2 = inv_f( P, mu, lambda) * usc = nullsc + eslCONST_LOG2 * inv_f( P, mu, lambda) * S = usc - tmove - tloop_total - tmove - tbmk - tec * * * Here, I compute threshold with length model based on max_length. Usually, the * length of a window returned by this scan will be 2*max_length-1 or longer. Doesn't * really matter - in any case, both the bg and om models will change with roughly * 1 bit for each doubling of the length model, so they offset. */ invP = esl_gumbel_invsurv(F1, om->evparam[p7_MMU], om->evparam[p7_MLAMBDA]); sc_thresh = (invP * eslCONST_LOG2) + nullsc - (tmove + tloop_total + tmove + tbmk + tec); // invP_FM = esl_gumbel_invsurv(0.5, om->evparam[p7_MMU], om->evparam[p7_MLAMBDA]); // sc_threshFM = ESL_MAX(fm_cfg->scthreshFM, (invP_FM * eslCONST_LOG2) + nullsc - (tmove + tloop_total + tmove + tbmk + tec) ) ; sc_threshFM = fm_cfg->scthreshFM * fm_cfg->sc_thresh_ratio; //get diagonals that score above sc_threshFM status = FM_getSeeds(fmf, fmb, fm_cfg, ssvdata, consensus, om->abc->Kp, sc_threshFM, strands, &seeds ); if (status != eslOK) ESL_EXCEPTION(eslEMEM, "Error allocating memory for seed computation\n"); //now extend those diagonals to find ones scoring above sc_thresh for(i=0; iscore >= sc_thresh) FM_window_from_diag(diag, fmf, fm_cfg->meta, windowlist ); } esl_sq_Destroy(tmp_sq); free(seeds.diags); free(consensus); return eslEOF; ERROR: ESL_EXCEPTION(eslEMEM, "Error allocating memory for SSVFM longtarget\n"); } /*------------------ end, FM_MSV() ------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/p7_bg.c0000664361611702660230000006442612473612614014236 0ustar wheelerteddy/* P7_BG: the null (background) model * * Contents: * 1. P7_BG object: allocation, initialization, destruction. * 2. Reading/writing residue backgrounds from files. * 3. Standard iid null model ("null1"). * 4. Filter null model. * 5. Benchmark driver. * 6. Unit tests. * 7. Test driver. * 8. Examples. * 9. Copyright and license. */ #include "p7_config.h" /* must be included first */ #include #include "easel.h" #include "esl_alphabet.h" #include "esl_hmm.h" #include "esl_vectorops.h" #include "hmmer.h" /***************************************************************** * 1. The P7_BG object: allocation, initialization, destruction. *****************************************************************/ /* Function: p7_bg_Create() * Synopsis: Create a null model object. * * Purpose: Allocate a object for digital alphabet , * initializes it to appropriate default values, and * returns a pointer to it. * * For protein models, default iid background frequencies * are set (by ) to average * Swiss-Prot residue composition. For DNA, RNA and other * alphabets, default frequencies are set to a uniform * distribution. * * The model composition mcomp[]> is not initialized * here; neither is the filter null model fhmm>. To * use the filter null model, caller will want to * initialize these fields by calling * . * * Throws: on allocation failure. * * Xref: STL11/125. */ P7_BG * p7_bg_Create(const ESL_ALPHABET *abc) { P7_BG *bg = NULL; int status; ESL_ALLOC(bg, sizeof(P7_BG)); bg->f = NULL; bg->fhmm = NULL; ESL_ALLOC(bg->f, sizeof(float) * abc->K); if ((bg->fhmm = esl_hmm_Create(abc, 2)) == NULL) goto ERROR; if (abc->type == eslAMINO) { if (p7_AminoFrequencies(bg->f) != eslOK) goto ERROR; } else esl_vec_FSet(bg->f, abc->K, 1. / (float) abc->K); bg->p1 = 350./351.; bg->omega = 1./256.; bg->abc = abc; return bg; ERROR: p7_bg_Destroy(bg); return NULL; } /* Function: p7_bg_CreateUniform() * Synopsis: Creates background model with uniform freqs. * * Purpose: Creates a background model for alphabet * with uniform residue frequencies. */ P7_BG * p7_bg_CreateUniform(const ESL_ALPHABET *abc) { P7_BG *bg = NULL; int status; ESL_ALLOC(bg, sizeof(P7_BG)); bg->f = NULL; bg->fhmm = NULL; ESL_ALLOC(bg->f, sizeof(float) * abc->K); if ((bg->fhmm = esl_hmm_Create(abc, 2)) == NULL) goto ERROR; esl_vec_FSet(bg->f, abc->K, 1. / (float) abc->K); bg->p1 = 350./351.; bg->omega = 1./256.; bg->abc = (ESL_ALPHABET *) abc; /* safe: we're just keeping a reference */ return bg; ERROR: p7_bg_Destroy(bg); return NULL; } /* Function: p7_bg_Clone() * Synopsis: Create a duplicate of an existing object. * * Purpose: Creates a duplicate of the existing object . * * Returns: ptr to the duplicate object. * * Throws: on allocation failure. */ P7_BG * p7_bg_Clone(const P7_BG *bg) { P7_BG *dup = NULL; int status; ESL_ALLOC(dup, sizeof(P7_BG)); dup->f = NULL; dup->fhmm = NULL; dup->abc = bg->abc; /* by reference only */ ESL_ALLOC(dup->f, sizeof(float) * bg->abc->K); memcpy(dup->f, bg->f, sizeof(float) * bg->abc->K); if ((dup->fhmm = esl_hmm_Clone(bg->fhmm)) == NULL) goto ERROR; dup->p1 = bg->p1; dup->omega = bg->omega; return dup; ERROR: p7_bg_Destroy(dup); return NULL; } /* Function: p7_bg_Dump() * Synopsis: Outputs object as text, for diagnostics. * * Purpose: Given a null model , dump it as text to stream . */ int p7_bg_Dump(FILE *ofp, const P7_BG *bg) { esl_vec_FDump(ofp, bg->f, bg->abc->K, bg->abc->sym); return eslOK; } /* Function: p7_bg_Destroy() * * Purpose: Frees a object. * * Returns: (void) * * Xref: SRE:STL11/125. */ void p7_bg_Destroy(P7_BG *bg) { if (bg != NULL) { if (bg->f != NULL) free(bg->f); if (bg->fhmm != NULL) esl_hmm_Destroy(bg->fhmm); free(bg); } return; } /* Function: p7_bg_SetLength() * Synopsis: Set the null model length distribution. * * Purpose: Sets the geometric null model length * distribution in to a mean of residues. */ int p7_bg_SetLength(P7_BG *bg, int L) { bg->p1 = (float) L / (float) (L+1); bg->fhmm->t[0][0] = bg->p1; bg->fhmm->t[0][1] = 1.0f - bg->p1; return eslOK; } /***************************************************************** * 2. Reading/writing residue backgrounds from files *****************************************************************/ /* Function: p7_bg_Read() * Synopsis: Read background frequencies from a file. * * Purpose: Read new background frequencies from file , * overwriting the frequencies previously in the * object . * * Note that is already created by the caller, not * created here. Also note that only reads * residue background frequencies used for the "null * model", whereas a object contains additional * information for the bias filter and for the biased * composition correction. * * Args: bgfile - file to read. * bg - existing object provided by the caller. * errbuf - OPTIONAL: space for an error message, upon parse errors; or NULL. * * Returns: on success, and background frequencies in * are overwritten. * * if can't be opened for reading. * if parsing of fails for some * reason. In both cases, contains a * user-directed error message upon return, including (if * relevant) the file name and the line number on * which an error was detected. is unmodified. * * Throws: on allocation failure; is unmodified, * and is empty. */ int p7_bg_Read(char *bgfile, P7_BG *bg, char *errbuf) { ESL_FILEPARSER *efp = NULL; float *fq = NULL; int n = 0; char *tok; int toklen; int alphatype; ESL_DSQ x; int status; if (errbuf) errbuf[0] = '\0'; status = esl_fileparser_Open(bgfile, NULL, &efp); if (status == eslENOTFOUND) ESL_XFAIL(eslENOTFOUND, errbuf, "couldn't open bg file %s for reading", bgfile); else if (status != eslOK) goto ERROR; esl_fileparser_SetCommentChar(efp, '#'); /* First token is alphabet type: amino | DNA | RNA */ status = esl_fileparser_GetToken(efp, &tok, &toklen); if (status == eslEOF) ESL_XFAIL(eslEFORMAT, errbuf, "premature end of file [line %d of bgfile %s]", efp->linenumber, bgfile); else if (status != eslOK) goto ERROR; alphatype = esl_abc_EncodeType(tok); if (alphatype == eslUNKNOWN) ESL_XFAIL(eslEFORMAT, errbuf, "expected alphabet type but saw \"%s\" [line %d of bgfile %s]", tok, efp->linenumber, bgfile); else if (alphatype != bg->abc->type) ESL_XFAIL(eslEFORMAT, errbuf, "bg file's alphabet is %s; expected %s [line %d, %s]", tok, esl_abc_DecodeType(bg->abc->type), efp->linenumber, bgfile); ESL_ALLOC(fq, sizeof(float) * bg->abc->K); esl_vec_FSet(fq, bg->abc->K, -1.0); while ((status = esl_fileparser_NextLine(efp)) == eslOK) { status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen); if (status == eslEOL) ESL_XFAIL(eslEFORMAT, errbuf, "premature end of file [line %d of bgfile %s", efp->linenumber, bgfile); else if (status != eslOK) goto ERROR; if (toklen != 1 || ! esl_abc_CIsCanonical(bg->abc, *tok)) ESL_XFAIL(eslEFORMAT, errbuf, "expected to parse a residue letter; saw %s [line %d of bgfile %s]", tok, efp->linenumber, bgfile); x = esl_abc_DigitizeSymbol(bg->abc, *tok); if (fq[x] != -1.0) ESL_XFAIL(eslEFORMAT, errbuf, "already parsed probability of %c [line %d of bgfile %s]", bg->abc->sym[x], efp->linenumber, bgfile); n++; status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen); if (status == eslEOL) ESL_XFAIL(eslEFORMAT, errbuf, "premature end of file, expected a probability [line %d of bgfile %s]", efp->linenumber, bgfile); else if (status != eslOK) goto ERROR; if (! esl_str_IsReal(tok)) ESL_XFAIL(eslEFORMAT, errbuf, "expected a probability, saw %s [line %d of bgfile %s]", tok, efp->linenumber, bgfile); fq[x] = atof(tok); status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen); if (status == eslOK) ESL_XFAIL(eslEFORMAT, errbuf, "extra unexpected data found [line %d of bgfile %s]", efp->linenumber, bgfile); else if (status != eslEOL) goto ERROR; } if (status != eslEOF) goto ERROR; if ( n != bg->abc->K) ESL_XFAIL(eslEFORMAT, errbuf, "expected %d residue frequencies, but found %d in bgfile %s", bg->abc->K, n, bgfile); if ( esl_FCompare(esl_vec_FSum(fq, bg->abc->K), 1.0, 0.001) != eslOK) ESL_XFAIL(eslEFORMAT, errbuf, "residue frequencies do not sum to 1.0 in bgfile %s", bgfile); /* all checking complete. no more error cases. overwrite bg with the new frequencies */ esl_vec_FNorm(fq, bg->abc->K); esl_vec_FCopy(fq, bg->abc->K, bg->f); free(fq); esl_fileparser_Close(efp); return eslOK; ERROR: if (fq) free(fq); if (efp) esl_fileparser_Close(efp); return status; } /* Function: p7_bg_Write() * Synopsis: Write a object to a stream in its save file format. * * Purpose: Write the residue frequencies of object to * stream in save file format. Only the residue * frequencies are written (there are other parts of a * object, having to do with the bias filter and * biased composition score correction.) * * Returns: on success. * * Throws: on any write error, such as filling the disk. */ int p7_bg_Write(FILE *fp, P7_BG *bg) { int x; if (fprintf(fp, "%s\n", esl_abc_DecodeType(bg->abc->type)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "bg model write failed"); for (x = 0; x < bg->abc->K; x++) { if (fprintf(fp, "%c %.5f\n", bg->abc->sym[x], bg->f[x]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "bg model write failed"); } return eslOK; } /*---------------- end, i/o of P7_BG object ---------------------*/ /***************************************************************** * 3. Standard iid null model ("null1") *****************************************************************/ /* Function: p7_bg_NullOne() * * Purpose: Calculate the null1 lod score, for sequence * of length "aligned" to the base null model . * * Note: Because the residue composition in null1 is the * same as the background used to calculate residue * scores in profiles and null models, all we have to * do here is score null model transitions. * * Can accept a NULL for *dsq, in which case the returned * value will be (float) L * log(bg->p1) + log(1.-bg->p1); */ int p7_bg_NullOne(const P7_BG *bg, const ESL_DSQ *dsq, int L, float *ret_sc) { *ret_sc = (float) L * log(bg->p1) + log(1.-bg->p1); return eslOK; } /***************************************************************** * 4. Filter null model *****************************************************************/ /* Function: p7_bg_SetFilter() * Synopsis: Configure filter HMM with new model composition. * * Purpose: The "filter HMM" is an experimental filter in the * acceleration pipeline for avoiding biased composition * sequences. It has no effect on final scoring, if a * sequence passes all steps of the pipeline; it is only * used to eliminate biased sequences from further * consideration early in the pipeline, before the big guns * of domain postprocessing are applied. * * At least at present, it doesn't actually work as well as * one would hope. This will be an area of future work. * What we really want to do is make a better null model of * real protein sequences (and their biases), and incorporate * that model into the flanks (NCJ states) of the profile. * * is the average model residue composition, from * either the HMM or the copy in a profile or optimized * profile. is the length of the model in nodes. * * The expected length of the filter HMM's generated * sequence is set to a default (about 400). You need a * subsequent call to to set it to the * target sequence length. In hmmscan, this requires a * call after every new model is read and * is called, because is calling * to copy the new model's composition . [Failure to * do this properly was bug #h85, 14 Dec 2010.] * * Returns: on success. * * Throws: (no abnormal error conditions) * * Xref: SRE:J4/25: generalized to use composition vector, not * specifically an HMM. * * Note: This looks like a two-state HMM, but if you start thinking * about its length distribution ("oh my god, L0 assumes a * fixed L=400 expectation, it's all wrong, it's not * conditional on the target sequence length and length * modeling's messed up!"), don't panic. It's set up as a * conditional-on-L model that generates accordint to P(x | * model, L) P(L); the P(L) term is added in * p7_bg_FilterScore() below. * * Additionally, and not to confuse you further, but the * t[0][0] transition is dependent on L. The initial * setting here is just a dummy. When p7_bg_SetLength() * sets p1 for the null1 model length distribution, it sets * t[0][0] to the same thing. This is controlling the * relative expected balance of background sequence to * biased sequence, not the overall length distribution. * * All of this is ad hoc, and little of it has been * optimized against data. */ int p7_bg_SetFilter(P7_BG *bg, int M, const float *compo) { float L0 = 400.0; /* mean length in state 0 of filter HMM (normal background) */ float L1 = (float) M / 8.0; /* mean length in state 1 of filter HMM (biased segment) */ /* State 0 is the normal iid model. */ bg->fhmm->t[0][0] = L0 / (L0+1.0f); bg->fhmm->t[0][1] = 1.0f / (L0+1.0f); bg->fhmm->t[0][2] = 1.0f; /* 1.0 transition to E means we'll set length distribution externally. */ esl_vec_FCopy(bg->f, bg->abc->K, bg->fhmm->e[0]); /* State 1 is the potentially biased model composition. */ bg->fhmm->t[1][0] = 1.0f / (L1+1.0f); bg->fhmm->t[1][1] = L1 / (L1+1.0f); bg->fhmm->t[1][2] = 1.0f; /* 1.0 transition to E means we'll set length distribution externally. */ esl_vec_FCopy(compo, bg->abc->K, bg->fhmm->e[1]); bg->fhmm->pi[0] = 0.999; bg->fhmm->pi[1] = 0.001; esl_hmm_Configure(bg->fhmm, bg->f); return eslOK; } /* Function: p7_bg_FilterScore() * Synopsis: Calculates the filter null model score. * * Purpose: Calculates the filter null model score for sequence * of length , and return it in * <*ret_sc>. * * The score is calculated as an HMM Forward score using * the two-state filter null model. It is a log-odds ratio, * relative to the iid background frequencies, in nats: * same as main model Forward scores. * * The filter null model has no length distribution of its * own; the same geometric length distribution (controlled * by p1>) that the null1 model uses is imposed. */ int p7_bg_FilterScore(P7_BG *bg, const ESL_DSQ *dsq, int L, float *ret_sc) { ESL_HMX *hmx = esl_hmx_Create(L, bg->fhmm->M); /* optimization target: this can be a 2-row matrix, and it can be stored in . */ float nullsc; /* (or it could be passed in as an arg, but for sure it shouldn't be alloc'ed here */ esl_hmm_Forward(dsq, L, bg->fhmm, hmx, &nullsc); /* impose the length distribution */ *ret_sc = nullsc + (float) L * logf(bg->p1) + logf(1.-bg->p1); esl_hmx_Destroy(hmx); return eslOK; } /***************************************************************** * 5. Benchmark driver *****************************************************************/ #ifdef p7BG_BENCHMARK /* gcc -O2 -Wall -msse2 -std=gnu99 -o p7_bg_benchmark -I. -L. -I../easel -L../easel -Dp7BG_BENCHMARK p7_bg.c -lhmmer -leasel -lm ./p7_bg_benchmark */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "100", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark timing for calculating null model scores"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_STOPWATCH *w = esl_stopwatch_Create(); char *hmmfile = esl_opt_GetArg(go, 1); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); int i; /* Read one HMM from */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); bg = p7_bg_Create(abc); esl_stopwatch_Start(w); for (i = 0; i < N; i++) p7_bg_SetFilterByHMM(bg, hmm); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*p7BG_BENCHMARK*/ /***************************************************************** * 6. Unit tests *****************************************************************/ #ifdef p7BG_TESTDRIVE #include "esl_dirichlet.h" #include "esl_random.h" static void utest_ReadWrite(ESL_RANDOMNESS *rng) { char msg[] = "bg Read/Write unit test failed"; char tmpfile[32] = "esltmpXXXXXX"; FILE *fp = NULL; ESL_ALPHABET *abc = NULL; /* random alphabet choice eslRNA..eslDICE */ float *fq = NULL; P7_BG *bg = NULL; if ((abc = esl_alphabet_Create(esl_rnd_Roll(rng, 5) + 1)) == NULL) esl_fatal(msg); if (( bg = p7_bg_Create(abc)) == NULL) esl_fatal(msg); if (( fq = malloc(sizeof(float) * abc->K)) == NULL) esl_fatal(msg); do { if (esl_dirichlet_FSampleUniform(rng, abc->K, fq) != eslOK) esl_fatal(msg); } while (esl_vec_FMin(fq, abc->K) < 0.001); /* small p's will get rounded off and fail FCompare() */ esl_vec_FCopy(fq, abc->K, bg->f); if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg); if ( p7_bg_Write(fp, bg) != eslOK) esl_fatal(msg); fclose(fp); esl_vec_FSet(bg->f, bg->abc->K, 0.0); if ( p7_bg_Read(tmpfile, bg, NULL) != eslOK) esl_fatal(msg); if ( esl_vec_FCompare(fq, bg->f, bg->abc->K, 0.01) != eslOK) esl_fatal(msg); p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); free(fq); remove(tmpfile); } #endif /*p7BG_TESTDRIVE*/ /***************************************************************** * 7. Test driver *****************************************************************/ #ifdef p7BG_TESTDRIVE #include "esl_config.h" #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, {"-s", eslARG_INT, "0", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0}, {"-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show verbose commentary/output", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for p7_bg"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *rng = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); int be_verbose = esl_opt_GetBoolean(go, "-v"); if (be_verbose) printf("p7_bg unit test: rng seed %" PRIu32 "\n", esl_randomness_GetSeed(rng)); utest_ReadWrite(rng); esl_randomness_Destroy(rng); esl_getopts_Destroy(go); return 0; } #endif /* p7BG_TESTDRIVE */ /***************************************************************** * 8. Examples *****************************************************************/ #ifdef p7BG_EXAMPLE /* gcc -O2 -Wall -msse2 -std=gnu99 -o p7_bg_example -I. -L. -I../easel -L../easel -Dp7BG_EXAMPLE p7_bg.c -lhmmer -leasel -lm ./p7_bg_example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of calculating null model scores"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; ESL_SQ *sq = NULL; float nullsc, filtersc, H; int status; /* Read one HMM from */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Open for reading */ status = esl_sqfile_OpenDigital(abc, seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) esl_fatal("No such file."); else if (status == eslEFORMAT) esl_fatal("Format unrecognized."); else if (status != eslOK) esl_fatal("Open failed, code %d.", status); sq = esl_sq_CreateDigital(abc); bg = p7_bg_Create(abc); p7_bg_SetFilter(bg, hmm->M, hmm->compo); H = esl_vec_FEntropy(bg->f, bg->abc->K); printf("bg iid H = %.4f\n", H); H = esl_vec_FEntropy(hmm->compo, bg->abc->K); printf("modelcomp H = %.4f\n", H); while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { p7_bg_SetLength(bg, sq->n); p7_bg_NullOne (bg, sq->dsq, sq->n, &nullsc); p7_bg_FilterScore(bg, sq->dsq, sq->n, &filtersc); printf("%-20s %5d %8.5f %8.5f %8.5f\n", sq->name, (int) sq->n, nullsc, filtersc, filtersc-nullsc); esl_sq_Reuse(sq); } if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s)\n%s\n", sqfp->filename, sqfp->get_error(sqfp)); else if (status != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", status, sqfp->filename); esl_sqfile_Close(sqfp); esl_sq_Destroy(sq); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7BG_EXAMPLE*/ #ifdef p7BG_EXAMPLE2 #include #include "easel.h" #include "esl_alphabet.h" #include "hmmer.h" int main(int argc, char **argv) { char *bgfile = argv[1]; char *alphabet = argv[2]; ESL_ALPHABET *abc = esl_alphabet_Create(esl_abc_EncodeType(alphabet)); P7_BG *bg = p7_bg_Create(abc); char errbuf[eslERRBUFSIZE]; int status; status = p7_bg_Read(bgfile, bg, errbuf); if (status == eslENOTFOUND) esl_fatal("open failed: %s", errbuf); else if (status == eslEFORMAT) esl_fatal("parse failed: %s", errbuf); else if (status != eslOK) esl_fatal("failed to read bg file %s (error %d)\n", bgfile, status); p7_bg_Write(stdout, bg); return 0; } #endif /*p7BG_EXAMPLE2*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: p7_bg.c 3751 2011-11-17 22:46:50Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/p7_bg.c $ *****************************************************************/ hmmer-3.1b2/src/hmmemit.c0000664361611702660230000003223712473612613014672 0ustar wheelerteddy/* hmmemit: sample sequence(s) from a profile HMM. */ #include "p7_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_dmatrix.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_random.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_vectorops.h" #include "hmmer.h" #define EMITOPTS "-a,-c,-C,-p" #define MODEOPTS "--local,--unilocal,--glocal,--uniglocal" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, { "-o", eslARG_OUTFILE,FALSE, NULL, NULL, NULL, NULL, NULL, "send sequence output to file , not stdout", 1 }, { "-N", eslARG_INT, "1", NULL, "n>0", NULL, NULL, "-c,-C", "number of seqs to sample", 1 }, /* options controlling what to emit */ { "-a", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, EMITOPTS, "emit alignment", 2 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, EMITOPTS, "emit simple majority-rule consensus sequence", 2 }, { "-C", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, EMITOPTS, "emit fancier consensus sequence (req's --minl, --minu)", 2 }, { "-p", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, EMITOPTS, "sample sequences from profile, not core model", 2 }, /* options controlling emission from profiles with -p */ { "-L", eslARG_INT, "400", NULL, NULL, NULL, "-p", NULL, "set expected length from profile to ", 3 }, { "--local", eslARG_NONE,"default",NULL, NULL, MODEOPTS, "-p", NULL, "configure profile in multihit local mode", 3 }, { "--unilocal", eslARG_NONE, FALSE, NULL, NULL, MODEOPTS, "-p", NULL, "configure profile in unilocal mode", 3 }, { "--glocal", eslARG_NONE, FALSE, NULL, NULL, MODEOPTS, "-p", NULL, "configure profile in multihit glocal mode", 3 }, { "--uniglocal", eslARG_NONE, FALSE, NULL, NULL, MODEOPTS, "-p", NULL, "configure profile in unihit glocal mode", 3 }, /* options controlling fancy consensus emission with -C */ { "--minl", eslARG_REAL, "0.0", NULL, "0<=x<=1", NULL, "-C", NULL, "show consensus as 'any' (X/N) unless >= this fraction", 4 }, { "--minu", eslARG_REAL, "0.0", NULL, "0<=x<=1", NULL, "-C", NULL, "show consensus as upper case if >= this fraction", 4 }, /* other options */ { "--seed", eslARG_INT, "0", NULL, "n>=0", NULL, NULL, NULL, "set RNG seed to ", 5 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "sample sequence(s) from a profile HMM"; static void cmdline_failure(char *argv0, char *format, ...); static void cmdline_help(char *argv0, ESL_GETOPTS *go); static void emit_consensus(ESL_GETOPTS *go, FILE *ofp, int outfmt, P7_HMM *hmm); static void emit_fancycons(ESL_GETOPTS *go, FILE *ofp, int outfmt, P7_HMM *hmm); static void emit_alignment(ESL_GETOPTS *go, FILE *ofp, int outfmt, ESL_RANDOMNESS *r, P7_HMM *hmm); static void emit_sequences(ESL_GETOPTS *go, FILE *ofp, int outfmt, ESL_RANDOMNESS *r, P7_HMM *hmm); int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* command line processing */ ESL_ALPHABET *abc = NULL; /* sequence alphabet */ ESL_RANDOMNESS *r = NULL; /* source of randomness */ char *hmmfile = NULL; /* file to read HMM(s) from */ P7_HMMFILE *hfp = NULL; /* open hmmfile */ P7_HMM *hmm = NULL; /* HMM to emit from */ FILE *ofp = NULL; /* output stream */ int outfmt = 0; int nhmms = 0; int status; char errbuf[eslERRBUFSIZE]; go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], "Error in configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h")) cmdline_help (argv[0], go); if (esl_opt_ArgNumber(go) != 1) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); if ((hmmfile = esl_opt_GetArg(go, 1)) == NULL) cmdline_failure(argv[0], "Failed to get on cmdline: %s\n", go->errbuf); if ( esl_opt_IsOn(go, "-o") ) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) esl_fatal("Failed to open output file %s", esl_opt_GetString(go, "-o")); } else ofp = stdout; if (esl_opt_GetBoolean(go, "-a")) outfmt = eslMSAFILE_STOCKHOLM; else outfmt = eslSQFILE_FASTA; r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "--seed")); status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); while ((status = p7_hmmfile_Read(hfp, &abc, &hmm)) != eslEOF) { if (status == eslEFORMAT) esl_fatal("Bad file format in HMM file %s:\n%s\n", hfp->fname, hfp->errbuf); else if (status == eslEINCOMPAT) esl_fatal("HMM in %s is not in the expected %s alphabet\n", hfp->fname, esl_abc_DecodeType(abc->type)); else if (status != eslOK) esl_fatal("Unexpected error in reading HMMs from %s\n", hfp->fname); nhmms++; if (esl_opt_GetBoolean(go, "-c")) emit_consensus(go, ofp, outfmt, hmm); else if (esl_opt_GetBoolean(go, "-C")) emit_fancycons(go, ofp, outfmt, hmm); else if (esl_opt_GetBoolean(go, "-a")) emit_alignment(go, ofp, outfmt, r, hmm); else emit_sequences(go, ofp, outfmt, r, hmm); p7_hmm_Destroy(hmm); } if (nhmms == 0) esl_fatal("Empty HMM file %s? No HMM data found.\n"); if (esl_opt_IsOn(go, "-o")) { fclose(ofp); } esl_randomness_Destroy(r); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); p7_hmmfile_Close(hfp); return eslOK; } static void cmdline_failure(char *argv0, char *format, ...) { va_list argp; printf("\nERROR: "); va_start(argp, format); vfprintf(stdout, format, argp); va_end(argp); esl_usage(stdout, argv0, usage); printf("\nTo see more help on available options, do %s -h\n\n", argv0); exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { p7_banner (stdout, argv0, banner); esl_usage (stdout, argv0, usage); puts("\nCommon options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); puts("\nOptions controlling what to emit:"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); puts("\nOptions controlling emission from profiles with -p:"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); puts("\nOptions controlling fancy consensus emission with -C:"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); puts("\nOther options::"); esl_opt_DisplayHelp(stdout, go, 5, 2, 80); exit(0); } static void emit_consensus(ESL_GETOPTS *go, FILE *ofp, int outfmt, P7_HMM *hmm) { ESL_SQ *sq = NULL; if ((sq = esl_sq_CreateDigital(hmm->abc)) == NULL) esl_fatal("failed to allocate sequence"); if (p7_emit_SimpleConsensus(hmm, sq) != eslOK) esl_fatal("failed to create simple consensus seq"); if (esl_sq_FormatName(sq, "%s-consensus", hmm->name) != eslOK) esl_fatal("failed to set sequence name"); if (esl_sqio_Write(ofp, sq, outfmt, FALSE) != eslOK) esl_fatal("failed to write sequence"); esl_sq_Destroy(sq); return; } static void emit_fancycons(ESL_GETOPTS *go, FILE *ofp, int outfmt, P7_HMM *hmm) { ESL_SQ *sq = NULL; float minl = esl_opt_GetReal(go, "--minl"); float minu = esl_opt_GetReal(go, "--minu"); if ((sq = esl_sq_Create()) == NULL) esl_fatal("failed to allocate sequence"); if (p7_emit_FancyConsensus(hmm, minl, minu, sq) != eslOK) esl_fatal("failed to create consensus seq"); if (esl_sq_FormatName(sq, "%s-consensus", hmm->name) != eslOK) esl_fatal("failed to set sequence name"); if (esl_sqio_Write(ofp, sq, outfmt, FALSE) != eslOK) esl_fatal("failed to write sequence"); esl_sq_Destroy(sq); return; } static void emit_alignment(ESL_GETOPTS *go, FILE *ofp, int outfmt, ESL_RANDOMNESS *r, P7_HMM *hmm) { ESL_MSA *msa = NULL; ESL_SQ **sq = NULL; P7_TRACE **tr = NULL; int N = esl_opt_GetInteger(go, "-N"); int optflags = p7_ALL_CONSENSUS_COLS; int i; if ((tr = malloc(sizeof(P7_TRACE *) * N)) == NULL) esl_fatal("failed to allocate trace array"); if ((sq = malloc(sizeof(ESL_SQ *) * N)) == NULL) esl_fatal("failed to allocate seq array"); for (i = 0; i < N; i++) { if ((sq[i] = esl_sq_CreateDigital(hmm->abc)) == NULL) esl_fatal("failed to allocate seq"); if ((tr[i] = p7_trace_Create()) == NULL) esl_fatal("failed to allocate trace"); } for (i = 0; i < N; i++) { if (p7_CoreEmit(r, hmm, sq[i], tr[i]) != eslOK) esl_fatal("Failed to emit sequence"); if (esl_sq_FormatName(sq[i], "%s-sample%d", hmm->name, i+1) != eslOK) esl_fatal("Failed to set sequence name\n"); } p7_tracealign_Seqs(sq, tr, N, hmm->M, optflags, hmm, &msa); eslx_msafile_Write(ofp, msa, outfmt); for (i = 0; i < N; i++) p7_trace_Destroy(tr[i]); free(tr); for (i = 0; i < N; i++) esl_sq_Destroy(sq[i]); free(sq); esl_msa_Destroy(msa); return; } static void emit_sequences(ESL_GETOPTS *go, FILE *ofp, int outfmt, ESL_RANDOMNESS *r, P7_HMM *hmm) { ESL_SQ *sq = NULL; P7_TRACE *tr = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; int do_profile = esl_opt_GetBoolean(go, "-p"); int N = esl_opt_GetInteger(go, "-N"); int L = esl_opt_GetInteger(go, "-L"); int mode = p7_LOCAL; int nseq; int status; if (esl_opt_GetBoolean(go, "--local")) mode = p7_LOCAL; else if (esl_opt_GetBoolean(go, "--unilocal")) mode = p7_UNILOCAL; else if (esl_opt_GetBoolean(go, "--glocal")) mode = p7_GLOCAL; else if (esl_opt_GetBoolean(go, "--uniglocal")) mode = p7_UNIGLOCAL; if ((sq = esl_sq_CreateDigital(hmm->abc)) == NULL) esl_fatal("failed to allocate sequence"); if ((tr = p7_trace_Create()) == NULL) esl_fatal("failed to allocate trace"); if ((bg = p7_bg_Create(hmm->abc)) == NULL) esl_fatal("failed to create null model"); if ((gm = p7_profile_Create(hmm->M, hmm->abc)) == NULL) esl_fatal("failed to create profile"); if (p7_ProfileConfig(hmm, bg, gm, L, mode) != eslOK) esl_fatal("failed to configure profile"); if (p7_bg_SetLength(bg, L) != eslOK) esl_fatal("failed to reconfig null model length"); if (p7_hmm_Validate (hmm, NULL, 0.0001) != eslOK) esl_fatal("whoops, HMM is bad!"); if (p7_profile_Validate(gm, NULL, 0.0001) != eslOK) esl_fatal("whoops, profile is bad!"); for (nseq = 1; nseq <= N; nseq++) { if (do_profile) status = p7_ProfileEmit(r, hmm, gm, bg, sq, tr); else status = p7_CoreEmit (r, hmm, sq, tr); if (status) esl_fatal("Failed to emit sequence\n"); status = esl_sq_FormatName(sq, "%s-sample%d", hmm->name, nseq); if (status) esl_fatal("Failed to set sequence name\n"); status = esl_sqio_Write(ofp, sq, outfmt, FALSE); if (status != eslOK) esl_fatal("Failed to write sequence\n"); p7_trace_Reuse(tr); esl_sq_Reuse(sq); } esl_sq_Destroy(sq); p7_trace_Destroy(tr); p7_bg_Destroy(bg); p7_profile_Destroy(gm); return; } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/hmmemit.c $ * SVN $Id: hmmemit.c 3474 2011-01-17 13:25:32Z eddys $ *****************************************************************/ hmmer-3.1b2/src/generic_stotrace.c0000664361611702660230000004664112473612613016556 0ustar wheelerteddy/* Stochastic traceback of a Forward matrix; generic (non-SIMD) version. * * Contents: * 1. Stochastic traceback implementation. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * SRE, Fri Aug 15 10:50:55 2008 [Janelia] * SVN $Id: generic_stotrace.c 3665 2011-08-25 13:45:55Z eddys $ */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_random.h" #include "esl_vectorops.h" #include "hmmer.h" /***************************************************************** * 1. Stochastic traceback implementation. *****************************************************************/ /* Function: p7_GStochasticTrace() * Synopsis: Stochastic traceback of a Forward matrix. * Incept: SRE, Thu Jan 3 15:39:20 2008 [Janelia] * * Purpose: Stochastic traceback of Forward matrix to * sample an alignment of digital sequence * (of length ) to the profile . * * The sampled traceback is returned in , which the * caller must have at least made an initial allocation of * (the will be grown as needed here). * * Args: r - source of random numbers * dsq - digital sequence aligned to, 1..L * L - length of dsq * gm - profile * mx - Forward matrix to trace, L x M * tr - storage for the recovered traceback. * * Returns: on success. */ int p7_GStochasticTrace(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, const P7_GMX *gx, P7_TRACE *tr) { int status; int i; /* position in seq (1..L) */ int k; /* position in model (1..M) */ int M = gm->M; float **dp = gx->dp; float *xmx = gx->xmx; float const *tsc = gm->tsc; float *sc; /* scores of possible choices: up to 2M-1, in the case of exits to E */ int scur, sprv; /* we'll index M states as 1..M, and D states as 2..M = M+2..2M: M0, D1 are impossibles. */ ESL_ALLOC(sc, sizeof(float) * (2*M+1)); k = 0; i = L; if ((status = p7_trace_Append(tr, p7T_T, k, i)) != eslOK) goto ERROR; if ((status = p7_trace_Append(tr, p7T_C, k, i)) != eslOK) goto ERROR; sprv = p7T_C; while (sprv != p7T_S) { switch (tr->st[tr->N-1]) { /* C(i) comes from C(i-1) or E(i) */ case p7T_C: if (XMX(i,p7G_C) == -eslINFINITY) ESL_XEXCEPTION(eslFAIL, "impossible C reached at i=%d", i); sc[0] = XMX(i-1, p7G_C) + gm->xsc[p7P_C][p7P_LOOP]; sc[1] = XMX(i, p7G_E) + gm->xsc[p7P_E][p7P_MOVE]; esl_vec_FLogNorm(sc, 2); scur = (esl_rnd_FChoose(r, sc, 2) == 0) ? p7T_C : p7T_E; break; /* E connects from any M or D state. k set here */ case p7T_E: if (XMX(i, p7G_E) == -eslINFINITY) ESL_XEXCEPTION(eslFAIL, "impossible E reached at i=%d", i); if (p7_profile_IsLocal(gm)) { /* local models come from any M, D */ sc[0] = sc[M+1] = -eslINFINITY; for (k = 1; k <= M; k++) sc[k] = MMX(i,k); for (k = 2; k <= M; k++) sc[k+M] = DMX(i,k); esl_vec_FLogNorm(sc, 2*M+1); /* now sc is a prob vector */ k = esl_rnd_FChoose(r, sc, 2*M+1); if (k <= M) scur = p7T_M; else { k -= M; scur = p7T_D; } } else { /* glocal models come from M_M or D_M */ k = M; sc[0] = MMX(i,M); sc[1] = DMX(i,M); esl_vec_FLogNorm(sc, 2); /* now sc is a prob vector */ scur = (esl_rnd_FChoose(r, sc, 2) == 0) ? p7T_M : p7T_D; } break; /* M connects from {MDI} i-1,k-1, or B */ case p7T_M: if (MMX(i,k) == -eslINFINITY) ESL_XEXCEPTION(eslFAIL, "impossible M reached at k=%d,i=%d", k,i); sc[0] = XMX(i-1,p7G_B) + TSC(p7P_BM, k-1); sc[1] = MMX(i-1,k-1) + TSC(p7P_MM, k-1); sc[2] = IMX(i-1,k-1) + TSC(p7P_IM, k-1); sc[3] = DMX(i-1,k-1) + TSC(p7P_DM, k-1); esl_vec_FLogNorm(sc, 4); switch (esl_rnd_FChoose(r, sc, 4)) { case 0: scur = p7T_B; break; case 1: scur = p7T_M; break; case 2: scur = p7T_I; break; case 3: scur = p7T_D; break; } k--; i--; break; /* D connects from M,D at i,k-1 */ case p7T_D: if (DMX(i, k) == -eslINFINITY) ESL_XEXCEPTION(eslFAIL, "impossible D reached at k=%d,i=%d", k,i); sc[0] = MMX(i, k-1) + TSC(p7P_MD, k-1); sc[1] = DMX(i, k-1) + TSC(p7P_DD, k-1); esl_vec_FLogNorm(sc, 2); scur = (esl_rnd_FChoose(r, sc, 2) == 0) ? p7T_M : p7T_D; k--; break; /* I connects from M,I at i-1,k */ case p7T_I: if (IMX(i,k) == -eslINFINITY) ESL_XEXCEPTION(eslFAIL, "impossible I reached at k=%d,i=%d", k,i); sc[0] = MMX(i-1,k) + TSC(p7P_MI, k); sc[1] = IMX(i-1,k) + TSC(p7P_II, k); esl_vec_FLogNorm(sc, 2); scur = (esl_rnd_FChoose(r, sc, 2) == 0) ? p7T_M : p7T_I; i--; break; /* N connects from S, N */ case p7T_N: if (XMX(i, p7G_N) == -eslINFINITY) ESL_XEXCEPTION(eslFAIL, "impossible N reached at i=%d", i); scur = (i == 0) ? p7T_S : p7T_N; break; /* B connects from N, J */ case p7T_B: if (XMX(i,p7G_B) == -eslINFINITY) ESL_XEXCEPTION(eslFAIL, "impossible B reached at i=%d", i); sc[0] = XMX(i, p7G_N) + gm->xsc[p7P_N][p7P_MOVE]; sc[1] = XMX(i, p7G_J) + gm->xsc[p7P_J][p7P_MOVE]; esl_vec_FLogNorm(sc, 2); scur = (esl_rnd_FChoose(r, sc, 2) == 0) ? p7T_N : p7T_J; break; /* J connects from E(i) or J(i-1) */ case p7T_J: if (XMX(i,p7G_J) == -eslINFINITY) ESL_XEXCEPTION(eslFAIL, "impossible J reached at i=%d", i); sc[0] = XMX(i-1,p7G_J) + gm->xsc[p7P_J][p7P_LOOP]; sc[1] = XMX(i, p7G_E) + gm->xsc[p7P_E][p7P_LOOP]; esl_vec_FLogNorm(sc, 2); scur = (esl_rnd_FChoose(r, sc, 2) == 0) ? p7T_J : p7T_E; break; default: ESL_XEXCEPTION(eslFAIL, "bogus state in traceback"); } /* end switch over statetype[tpos-1] */ /* Append this state and the current i,k to be explained to the growing trace */ if ((status = p7_trace_Append(tr, scur, k, i)) != eslOK) goto ERROR; /* For NCJ, we had to defer i decrement. */ if ( (scur == p7T_N || scur == p7T_J || scur == p7T_C) && scur == sprv) i--; sprv = scur; } /* end traceback, at S state */ if ((status = p7_trace_Reverse(tr)) != eslOK) goto ERROR; tr->M = gm->M; tr->L = L; free(sc); return eslOK; ERROR: if (sc != NULL) free(sc); return status; } /*------------------- end, stochastic trace ---------------------*/ /***************************************************************** * 2. Benchmark driver *****************************************************************/ #ifdef p7GENERIC_STOTRACE_BENCHMARK /* gcc -g -O2 -o generic_stotrace_benchmark -I. -L. -I../easel -L../easel -Dp7GENERIC_STOTRACE_BENCHMARK generic_stotrace.c -lhmmer -leasel -lm icc -O3 -static -o generic_stotrace_benchmark -I. -L. -I../easel -L../easel -Dp7GENERIC_STOTRACE_BENCHMARK generic_stotrace.c -lhmmer -leasel -lm ./generic_stotrace_benchmark */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seq" , 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of sampled tracebacks", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for generic stochastic trace"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *fwd = NULL; P7_TRACE *tr = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc, fsc, vsc; float bestsc = -eslINFINITY; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_UNILOCAL); fwd = p7_gmx_Create(gm->M, L); tr = p7_trace_Create(); esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_GViterbi(dsq, L, gm, fwd, &vsc); p7_GForward(dsq, L, gm, fwd, &fsc); esl_stopwatch_Start(w); for (i = 0; i < N; i++) { p7_GStochasticTrace(r, dsq, L, gm, fwd, tr); p7_trace_Score(tr, dsq, gm, &sc); /* this doesn't add significantly to benchmark time */ bestsc = ESL_MAX(bestsc, sc); p7_trace_Reuse(tr); } esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("forward sc = %.4f nats\n", fsc); printf("viterbi sc = %.4f nats\n", vsc); printf("max trace sc = %.4f nats\n", bestsc); free(dsq); p7_trace_Destroy(tr); p7_gmx_Destroy(fwd); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_STOTRACE_BENCHMARK*/ /*---------------------- end, benchmark -------------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7GENERIC_STOTRACE_TESTDRIVE #include "esl_getopts.h" /* fairly weak tests: each sampled trace must be <= viterbi trace score, and must pass validation */ static void utest_stotrace(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_PROFILE *gm, ESL_DSQ *dsq, int L, int ntrace) { P7_GMX *gx = NULL; P7_TRACE *tr = NULL; char errbuf[eslERRBUFSIZE]; int idx; float maxsc = -eslINFINITY; float vsc, sc; if ((gx = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("matrix creation failed"); if ((tr = p7_trace_Create()) == NULL) esl_fatal("trace creation failed"); if (p7_GViterbi(dsq, L, gm, gx, &vsc) != eslOK) esl_fatal("viterbi failed"); if (p7_GForward(dsq, L, gm, gx, NULL) != eslOK) esl_fatal("forward failed"); for (idx = 0; idx < ntrace; idx++) { if (p7_GStochasticTrace(r, dsq, L, gm, gx, tr) != eslOK) esl_fatal("stochastic trace failed"); if (p7_trace_Validate(tr, abc, dsq, errbuf) != eslOK) esl_fatal("trace invalid:\n%s", errbuf); if (p7_trace_Score(tr, dsq, gm, &sc) != eslOK) esl_fatal("trace scoring failed"); maxsc = ESL_MAX(sc, maxsc); if (sc > vsc) esl_fatal("sampled trace has score > optimal Viterbi path; not possible"); p7_trace_Reuse(tr); } if (esl_FCompare(maxsc, vsc, 0.001) != eslOK) esl_fatal("stochastic trace failed to sample the Viterbi path"); p7_trace_Destroy(tr); p7_gmx_Destroy(gx); } #endif /*p7GENERIC_STOTRACE_TESTDRIVE*/ /*--------------------- end, unit tests -------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7GENERIC_STOTRACE_TESTDRIVE /* gcc -g -Wall -Dp7GENERIC_STOTRACE_TESTDRIVE -I. -I../easel -L. -L../easel -o generic_stotrace_utest generic_stotrace.c -lhmmer -leasel -lm */ #include "easel.h" #include "esl_getopts.h" #include "esl_randomseq.h" #include "p7_config.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "--vv", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be very verbose", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "unit test driver for stochastic Viterbi traceback (generic version)"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_BG *bg = NULL; ESL_DSQ *dsq = NULL; ESL_SQ *sq = NULL; int M = 5; int L = 10; int ntrace = 1000; if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if (p7_hmm_Sample(r, M, abc, &hmm) != eslOK) esl_fatal("failed to sample an HMM"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if ((gm = p7_profile_Create(hmm->M, abc)) == NULL) esl_fatal("failed to create profile"); if (p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL) != eslOK) esl_fatal("failed to config profile"); /* Test with randomly generated (iid) sequence */ if ((dsq = malloc(sizeof(ESL_DSQ) *(L+2))) == NULL) esl_fatal("malloc failed"); if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal("seq generation failed"); utest_stotrace(go, r, abc, gm, dsq, L, ntrace); /* Test with seq sampled from profile */ if ((sq = esl_sq_CreateDigital(abc)) == NULL) esl_fatal("sequence allocation failed"); if (p7_ProfileEmit(r, hmm, gm, bg, sq, NULL) != eslOK) esl_fatal("profile emission failed"); utest_stotrace(go, r, abc, gm, sq->dsq, sq->n, ntrace); esl_sq_Destroy(sq); free(dsq); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_STOTRACE_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7GENERIC_STOTRACE_EXAMPLE /* gcc -g -Dp7GENERIC_STOTRACE_EXAMPLE -I. -I../easel -L. -L../easel -o generic_stotrace_example generic_stotrace.c -lhmmer -leasel -lm */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-m", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump the DP matrix to stdout", 0 }, { "-s", eslARG_INT, "0", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-t", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump the sampled trace to stdout", 0 }, { "-N", eslARG_INT, "1", NULL, NULL, NULL, NULL, NULL, "number of traces to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of stochastic backtrace"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_GMX *fwd = NULL; P7_TRACE *tr = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; char errbuf[eslERRBUFSIZE]; int N = esl_opt_GetInteger(go, "-N"); int i; float vsc, fsc, tsc; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); p7_hmmfile_Close(hfp); /* Read in one sequence */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); if (esl_sqio_Read(sqfp, sq) != eslOK) p7_Fail("Failed to read sequence"); esl_sqfile_Close(sqfp); /* Configure a profile from the HMM */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); fwd = p7_gmx_Create(gm->M, sq->n); tr = p7_trace_Create(); p7_GViterbi(sq->dsq, sq->n, gm, fwd, &vsc); p7_GForward(sq->dsq, sq->n, gm, fwd, &fsc); if (esl_opt_GetBoolean(go, "-m") == TRUE) p7_gmx_Dump(stdout, fwd, p7_DEFAULT); for (i = 0; i < N; i++) { p7_GStochasticTrace(r, sq->dsq, sq->n, gm, fwd, tr); p7_trace_Score(tr, sq->dsq, gm, &tsc); if (esl_opt_GetBoolean(go, "-t") == TRUE) p7_trace_Dump(stdout, tr, gm, sq->dsq); if (p7_trace_Validate(tr, abc, sq->dsq, errbuf) != eslOK) esl_fatal("trace failed validation: %s\n", errbuf); printf("Sampled trace: %.4f nats\n", tsc); p7_trace_Reuse(tr); } printf("Forward score: %.4f nats\n", fsc); printf("Viterbi score: %.4f nats\n", vsc); /* Cleanup */ p7_gmx_Destroy(fwd); p7_trace_Destroy(tr); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7GENERIC_STOTRACE_EXAMPLE*/ /*----------------------- end, example --------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/hmmpgmd.h0000664361611702660230000001473512473612613014673 0ustar wheelerteddy/* * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/hmmpgmd.h $ * SVN $Id: hmmpgmd.h 4423 2013-04-12 18:56:33Z wheelert $ */ #ifndef P7_HMMPGMD_INCLUDED #define P7_HMMPGMD_INCLUDED typedef struct { uint32_t status; /* error status */ uint64_t msg_size; /* size of the next packet. if status not */ /* zero, the length is for the error string */ /* otherwise it is the length of the data */ /* to follow. */ } HMMD_SEARCH_STATUS; typedef struct { double elapsed; /* elapsed time, seconds */ double user; /* CPU time, seconds */ double sys; /* system time, seconds */ double Z; /* eff # targs searched (per-target E-val) */ double domZ; /* eff # signific targs (per-domain E-val) */ enum p7_zsetby_e Z_setby; /* how Z was set */ enum p7_zsetby_e domZ_setby; /* how domZ was set */ uint64_t nmodels; /* # of HMMs searched */ uint64_t nseqs; /* # of sequences searched */ uint64_t n_past_msv; /* # comparisons that pass MSVFilter() */ uint64_t n_past_bias; /* # comparisons that pass bias filter */ uint64_t n_past_vit; /* # comparisons that pass ViterbiFilter() */ uint64_t n_past_fwd; /* # comparisons that pass ForwardFilter() */ uint64_t nhits; /* number of hits in list now */ uint64_t nreported; /* number of hits that are reportable */ uint64_t nincluded; /* number of hits that are includable */ } HMMD_SEARCH_STATS; #define HMMD_SEQUENCE 101 #define HMMD_HMM 102 /* commands between master and worker */ #define HMMD_CMD_SEARCH 10001 #define HMMD_CMD_SCAN 10002 #define HMMD_CMD_INIT 10003 #define HMMD_CMD_SHUTDOWN 10004 #define HMMD_CMD_RESET 10005 #define MAX_INIT_DESC 32 /* HMMD_CMD_SEARCH or HMMD_CMD_SCAN */ typedef struct { uint32_t db_inx; /* database index to search */ uint32_t db_type; /* database type to search */ uint32_t inx; /* index to begin search */ uint32_t cnt; /* number of sequences to search */ uint32_t query_type; /* sequence / hmm */ uint32_t query_length; /* length of the query data */ uint32_t opts_length; /* length of the options string */ char data[1]; /* search data */ } HMMD_SEARCH_CMD; /* HMMD_CMD_INIT */ typedef struct { char sid[MAX_INIT_DESC]; /* unique id for sequence database */ char hid[MAX_INIT_DESC]; /* unique id for hmm database */ uint32_t seqdb_off; /* offset to seq database name, 0 if none */ uint32_t hmmdb_off; /* offset to hmm database name, 0 if none */ uint32_t db_cnt; /* total number of sequence databases */ uint32_t seq_cnt; /* sequences in database */ uint32_t hmm_cnt; /* total number hmm databases */ uint32_t model_cnt; /* models in hmm database */ char data[1]; /* string data */ } HMMD_INIT_CMD; /* HMMD_CMD_RESET */ typedef struct { char ip_addr[1]; /* ip address */ } HMMD_INIT_RESET; /* HMMD_HEADER */ typedef struct { uint32_t length; /* message length */ uint32_t command; /* message type */ uint32_t status; /* 0 - success */ } HMMD_HEADER; typedef struct { HMMD_HEADER hdr; /* length and type of message */ union { HMMD_INIT_CMD init; HMMD_SEARCH_CMD srch; HMMD_INIT_RESET reset; }; } HMMD_COMMAND; #define MSG_SIZE(x) (sizeof(HMMD_HEADER) + ((HMMD_HEADER *)(x))->length) size_t writen(int fd, const void *vptr, size_t n); size_t readn(int fd, void *vptr, size_t n); typedef struct queue_data_s { uint32_t cmd_type; /* type of command to perform */ uint32_t query_type; /* type of the query */ P7_HMM *hmm; /* query HMM */ ESL_SQ *seq; /* query sequence */ ESL_ALPHABET *abc; /* digital alphabet */ ESL_GETOPTS *opts; /* search specific options */ HMMD_COMMAND *cmd; /* workers search command */ int sock; /* socket descriptor of client */ char ip_addr[64]; int dbx; /* database index to search */ int inx; /* sequence index to start search */ int cnt; /* number of sequences to search */ } QUEUE_DATA; typedef struct { int N; /* number of ranges */ uint32_t *starts; /* 0..N-1 start positions */ uint32_t *ends; /* 0..N-1 start positions */ } RANGE_LIST; extern void free_QueueData(QUEUE_DATA *data); extern int hmmpgmd_IsWithinRanges (int64_t sq_idx, RANGE_LIST *list ); extern int hmmpgmd_GetRanges (RANGE_LIST *list, char *rangestr); extern int process_searchopts(int fd, char *cmdstr, ESL_GETOPTS **ret_opts); extern void worker_process(ESL_GETOPTS *go); extern void master_process(ESL_GETOPTS *go); #define LOG_FATAL_MSG(str, err) { \ p7_syslog(LOG_CRIT,"[%s:%d] - %s error %d - %s\n", __FILE__, __LINE__, str, err, strerror(err)); \ exit(0); \ } #endif /*P7_HMMPGMD_INCLUDED*/ /************************************************************ * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. ************************************************************/ hmmer-3.1b2/src/cachedb.c0000664361611702660230000004530712473612612014604 0ustar wheelerteddy/* Sequence and profile caches, used by the hmmpgmd daemon. * * Contents: * 2. P7_CACHEDB_SEQS: a daemon's cached sequence database * x. Benchmark driver * x. Unit tests * x. License and copyright information. */ #include "p7_config.h" #include #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "cachedb.h" #include "hmmpgmd.h" /* sort routines */ static int sort_seq(const void *p1, const void *p2) { int cmp; cmp = (((HMMER_SEQ *)p1)->idx < ((HMMER_SEQ *)p2)->idx); cmp -= (((HMMER_SEQ *)p1)->idx > ((HMMER_SEQ *)p2)->idx); return cmp; } int p7_seqcache_Open(char *seqfile, P7_SEQCACHE **ret_cache, char *errbuf) { int i; int inx; int val; int status; int32_t seq_cnt; int32_t db_cnt; int32_t db_inx[32]; uint32_t db_key; uint64_t res_cnt; uint64_t res_size; uint64_t hdr_size; char *hdr_ptr; char *res_ptr; char *desc_ptr; char *ptr; char buffer[512]; off_t offset; uint64_t total_mem; SEQ_DB *db = NULL; P7_SEQCACHE *cache = NULL; ESL_RANDOMNESS *rnd = NULL; ESL_SQFILE *sqfp = NULL; ESL_SQ *sq = NULL; ESL_ALPHABET *abc = NULL; ESL_SQASCII_DATA *ascii = NULL; if (errbuf) errbuf[0] = '\0'; /* CURRENTLY UNUSED. FIXME */ /* Open the target sequence database */ if ((status = esl_sqfile_Open(seqfile, eslSQFILE_FASTA, NULL, &sqfp)) != eslOK) return status; /* This is a bit of a hack. The first line contains database information. * * # ... * * The rest of the file is a fasta format. The fasta header is just * sequence number followed by a binary number indicating which * database this sequence occurs in. * * The header line will be read in, parsed and saved. Then the * parser will be repositioned after the line and used normally. */ ascii = &sqfp->data.ascii; fseek(ascii->fp, 0L, SEEK_SET); if (fgets(buffer, sizeof(buffer), ascii->fp) == NULL) return eslEFORMAT; if (buffer[0] != '#') return eslEFORMAT; ptr = buffer + 1; res_cnt = strtoll(ptr, &ptr, 10); seq_cnt = strtol(ptr, &ptr, 10); db_cnt = strtol(ptr, &ptr, 10); if (db_cnt > (sizeof(db_inx)/sizeof(db_inx[0]))) return eslEFORMAT; total_mem = sizeof(P7_SEQCACHE); ESL_ALLOC(cache, sizeof(P7_SEQCACHE)); memset(cache, 0, sizeof(P7_SEQCACHE)); if (esl_strdup(seqfile, -1, &cache->name) != eslOK) goto ERROR; total_mem += (sizeof(HMMER_SEQ) * seq_cnt); ESL_ALLOC(cache->list, sizeof(HMMER_SEQ) * seq_cnt); memset(cache->list, 0, sizeof(HMMER_SEQ) * seq_cnt); total_mem += (sizeof(SEQ_DB) * db_cnt); ESL_ALLOC(db, sizeof(SEQ_DB) * db_cnt); for (i = 0; i < db_cnt; ++i) { db[i].count = strtol(ptr, &ptr, 10); db[i].K = strtol(ptr, &ptr, 10); total_mem += (sizeof(HMMER_SEQ *) * db[i].count); ESL_ALLOC(db[i].list, sizeof(HMMER_SEQ *) * db[i].count); memset(db[i].list, 0, sizeof(HMMER_SEQ *) * db[i].count); } /* grab the unique identifier */ while (*ptr && isspace(*ptr)) ++ptr; i = strlen(ptr); ESL_ALLOC(cache->id, i+1); strcpy(cache->id, ptr); while (--i > 0 && isspace(cache->id[i])) cache->id[i] = 0; res_size = res_cnt + seq_cnt + 1; hdr_size = seq_cnt * 10; total_mem += res_size + hdr_size; ESL_ALLOC(cache->residue_mem, res_size); ESL_ALLOC(cache->header_mem, hdr_size); /* position the sequence file to the start of the first sequence. * this will force any buffers associated with the file to be reset. */ offset = ftell(ascii->fp); if ((status = esl_sqfile_Position(sqfp, offset)) != eslOK) goto ERROR; abc = esl_alphabet_Create(eslAMINO); sq = esl_sq_CreateDigital(abc); cache->db_cnt = db_cnt; cache->db = db; cache->abc = abc; cache->res_size = res_size; cache->hdr_size = hdr_size; cache->count = seq_cnt; hdr_ptr = cache->header_mem; res_ptr = cache->residue_mem; for (i = 0; i < db_cnt; ++i) db_inx[i] = 0; strcpy(buffer, "000000001"); inx = 0; while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { /* sanity checks */ if (inx >= seq_cnt) { printf("inx: %d\n", inx); return eslEFORMAT; } if (sq->n + 1 > res_size) { printf("inx: %d size %d %d\n", inx, (int)sq->n + 1, (int)res_size); return eslEFORMAT; } if (hdr_size <= 0) { printf("inx: %d hdr %d\n", inx, (int)hdr_size); return eslEFORMAT; } /* generate the database key - modified to take the first word in the desc line. * The remaining part of the desc is then cached as the description. */ ptr = sq->desc;; desc_ptr = strchr(sq->desc, ' '); if(desc_ptr != NULL) { *desc_ptr= '\0'; ++desc_ptr; } val = 1; db_key = 0; while (*ptr) { if (*ptr == '1') db_key += val; val <<= 1; ++ptr; } if (db_key >= (1 << (db_cnt + 1))) { printf("inx: %d db %d %s\n", inx, db_key, sq->desc); return eslEFORMAT; } cache->list[inx].name = hdr_ptr; cache->list[inx].dsq = (ESL_DSQ *)res_ptr; cache->list[inx].n = sq->n; cache->list[inx].idx = inx; cache->list[inx].db_key = db_key; if(desc_ptr != NULL) esl_strdup(desc_ptr, -1, &(cache->list[inx].desc)); /* copy the digitized sequence */ memcpy(res_ptr, sq->dsq, sq->n + 1); res_ptr += (sq->n + 1); res_size -= (sq->n + 1); /* copy the index to the header */ strcpy(hdr_ptr, buffer); hdr_ptr += 10; hdr_size -= 10; /* increment the buffer string */ ++buffer[8]; for (i = 8; i > 0; --i) { if (buffer[i] > '9') { buffer[i] = '0'; buffer[i-1]++; } } esl_sq_Reuse(sq); ++inx; } if (status != eslEOF) { printf("Unexpected error %d at %d\n", status, inx); return status; } if (inx != seq_cnt) { printf("inx:: %d %d\n", inx, seq_cnt); return eslEFORMAT; } if (hdr_size != 0) { printf("inx:: %d hdr %d\n", inx, (int)hdr_size); return eslEFORMAT; } if (res_size != 1) { printf("inx:: %d size %d %d\n", inx, (int)sq->n + 1, (int)res_size); return eslEFORMAT; } /* copy the final sentinel character */ *res_ptr++ = eslDSQ_SENTINEL; --res_size; /* sort the order of the database sequences */ rnd = esl_randomness_CreateFast(seq_cnt); for (i = 0 ; i < seq_cnt; ++i) { rnd->x = rnd->x * 69069 + 1; cache->list[i].idx = rnd->x; } esl_randomness_Destroy(rnd); qsort(cache->list, seq_cnt, sizeof(HMMER_SEQ), sort_seq); /* fill in the different databases and fix the index */ for (i = 0 ; i < seq_cnt; ++i) { inx = 0; db_key = cache->list[i].db_key; while (db_key) { if (db_key & 1) { SEQ_DB *db = cache->db + inx; if (db_inx[inx] >= db->count) { printf("sort:: %d %d\n", db_inx[inx], db->count); return eslEFORMAT; } db->list[db_inx[inx]] = &cache->list[i]; ++db_inx[inx]; } db_key >>= 1; ++inx; } cache->list[i].idx = (cache->list[i].name - cache->header_mem) / 10 + 1; } for (i = 0; i < cache->db_cnt; ++i) { printf("sequence database (%d):: %d %d\n", i, cache->db[i].count, db_inx[i]); } printf("\nLoaded sequence db file %s; total memory %" PRId64 "\n", seqfile, total_mem); esl_sqfile_Close(sqfp); esl_sq_Destroy(sq); *ret_cache = cache; return eslOK; ERROR: if (sq != NULL) esl_sq_Destroy(sq); if (abc != NULL) esl_alphabet_Destroy(abc); if (cache != NULL) { if (cache->header_mem != NULL) free(cache->header_mem); if (cache->residue_mem != NULL) free(cache->residue_mem); if (cache->name != NULL) free(cache->name); if (cache->id != NULL) free(cache->id); free(cache); } for (i = 0; i < db_cnt; ++i) { if (db[i].list != NULL) free(db[i].list); } return eslEMEM; } void p7_seqcache_Close(P7_SEQCACHE *cache) { int i; if (cache->name) free(cache->name); if (cache->id) free(cache->id); if (cache->db) { for (i = 0; i < cache->db_cnt; ++i) { if (cache->db[i].list != NULL) free(cache->db[i].list); } free(cache->db); } if (cache->abc) esl_alphabet_Destroy(cache->abc); if (cache->list) free(cache->list); if (cache->residue_mem) free(cache->residue_mem); if (cache->header_mem) free(cache->header_mem); free(cache); } /***************************************************************** * x. Unit test *****************************************************************/ #ifdef CACHEDB_UTEST1 /* * gcc -O3 -malign-double -msse2 -o evalues-benchmark -I. -L. -I../easel -L../easel -Dp7EVALUES_BENCHMARK evalues.c -lhmmer -leasel -lm * gcc -g -O -pg -o evalues-benchmark -I. -L. -I../easel -L../easel -Dp7EVALUES_BENCHMARK evalues.c -lhmmer -leasel -lm * gcc -g -Wall -msse2 -o evalues-benchmark -I. -L. -I../easel -L../easel -Dp7EVALUES_BENCHMARK evalues.c -lhmmer -leasel -lm * * ./evalues-benchmark * * -malign-double is needed for gcc if the rest of HMMER was compiled w/ -malign-double * (i.e., our default gcc optimization) * * 27 Dec 08 on wanderoo: 24 msec per RRM_1 calibration; 37 msec for Caudal_act * profiling shows 75% in Forward; 12% esl_random(); <3% in MSVFilter. */ #include #include #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "cachedb.h" #include "hmmpgmd.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "direct output to file , not stdout", 2 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; typedef struct seq_info_s { ESL_DSQ *dsq; /* digitized sequence [1..n] */ int64_t n; /* length of dsq */ int32_t inx; /* length of dsq */ uint64_t db_key; /* flag for included databases */ struct seq_info_s *next; } SEQ_INFO; #define HASH_KEY 52807 #define SUB_HASH 1531 int main(int argc, char **argv) { FILE *ofp = stdout; int i; int cnt; int inx; int status; int seq_cnt; int db_inx; int db_key; int db_K[32]; int db_cnt[32]; uint64_t res_cnt; char *seqfile; char buffer[10]; ESL_GETOPTS *go = NULL; ESL_ALPHABET *abc = NULL; ESL_SQFILE *sqfp = NULL; ESL_SQ *sq = NULL; SEQ_INFO *info; SEQ_INFO **hash; time_t timep; if ((go = esl_getopts_Create(options)) == NULL) { printf("Failed to create options\n"); return 0; } if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_getopts_Destroy(go); return 0; } if (esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_getopts_Destroy(go); return 0; } if (esl_opt_ArgNumber(go) < 1) { printf("Must specify at least one database\n"); esl_getopts_Destroy(go); return 0; } if (esl_opt_IsOn(go, "-o")) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) { printf("Failed to open output database %s for writing\n", esl_opt_GetString(go, "-o")); return 0; } } abc = esl_alphabet_Create(eslAMINO); sq = esl_sq_CreateDigital(abc); ESL_ALLOC(hash, sizeof(char *) * HASH_KEY); memset(hash, 0, sizeof(char *) * HASH_KEY); memset(db_K, 0, sizeof(db_K)); memset(db_cnt, 0, sizeof(db_cnt)); res_cnt = 0; seq_cnt = 0; cnt = 0; db_key = 1; db_inx = 1; while (db_inx <= esl_opt_ArgNumber(go)) { /* the first db just build the list */ seqfile = esl_opt_GetArg(go, db_inx); if ((status = esl_sqfile_Open(seqfile, eslSQFILE_FASTA, NULL, &sqfp)) != eslOK) { printf("Unable to open sequence database %s\n", seqfile); return status; } printf("Database %d: %s\n", db_inx, seqfile); while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { int sum = 0; inx = 0; for (i = 1; i <= sq->n; ++i) { inx += (sq->dsq[i] * sq->dsq[i]); sum = inx % SUB_HASH; } inx = inx % HASH_KEY; info = hash[inx]; while (info != NULL) { if (sq->n == info->n && sum == info->inx && memcmp(sq->dsq, info->dsq, sq->n+2) == 0) { break; } info = info->next; } if (info == NULL) { ESL_ALLOC(info, sizeof(SEQ_INFO)); ESL_ALLOC(info->dsq, sq->n+2); memcpy(info->dsq, sq->dsq, sq->n+2); info->n = sq->n; info->db_key = db_key; info->inx = sum; ++db_cnt[db_inx-1]; info->next = hash[inx]; hash[inx] = info; res_cnt += sq->n; seq_cnt++; } else if ((info->db_key & db_key) == 0) { info->db_key |= db_key; ++db_cnt[db_inx-1]; } ++db_K[db_inx-1]; esl_sq_Reuse(sq); } esl_sqfile_Close(sqfp); db_key <<= 1; db_inx++; printf("\n"); } printf("Writing cache %s\n", esl_opt_GetString(go, "-o")); timep = time(NULL); fprintf(ofp, "# %" PRId64 " %d %d", res_cnt, seq_cnt, db_inx - 1); for (i = 0; i < db_inx - 1; ++i) fprintf(ofp, " %d %d", db_cnt[i], db_K[i]); fprintf(ofp, " %s", ctime(&timep)); strcpy(buffer, "000000001"); for (inx = 0; inx < HASH_KEY; ++inx) { info = hash[inx]; while (info) { int pos; char buf[80]; SEQ_INFO *next = info->next; fprintf(ofp, ">%s ", buffer); while (info->db_key) { fprintf(ofp, "%c", (info->db_key & 1) ? '1' : '0'); info->db_key >>= 1; } fprintf(ofp, "\n"); for (pos = 0; pos < info->n; pos += 60) { esl_abc_TextizeN(abc, info->dsq+pos+1, 60, buf); buf[60] = '\0'; fprintf(ofp, "%s\n", buf); } free(info->dsq); free(info); info = next; /* increment the buffer string */ ++buffer[8]; for (i = 8; i > 0; --i) { if (buffer[i] > '9') { buffer[i] = '0'; buffer[i-1]++; } } } } free(hash); esl_alphabet_Destroy(abc); esl_sq_Destroy(sq); if (ofp != stdout) fclose(ofp); if (esl_opt_IsOn(go, "-o")) { P7_CACHEDB_SEQS *cache = NULL; printf("Reading cache %s\n", esl_opt_GetString(go, "-o")); if ((status = cache_SeqDb(esl_opt_GetString(go, "-o"), &cache)) != eslOK) { printf("ERROR %d\n", status); return 0; } cache_SeqDestroy(cache); } esl_getopts_Destroy(go); return 0; ERROR: return status; } #endif /*CACHEDB_UTEST1*/ #ifdef CACHEDB_UTEST2 /* * gcc -O3 -malign-double -msse2 -o evalues-benchmark -I. -L. -I../easel -L../easel -Dp7EVALUES_BENCHMARK evalues.c -lhmmer -leasel -lm * gcc -g -O -pg -o evalues-benchmark -I. -L. -I../easel -L../easel -Dp7EVALUES_BENCHMARK evalues.c -lhmmer -leasel -lm * gcc -g -Wall -msse2 -o evalues-benchmark -I. -L. -I../easel -L../easel -Dp7EVALUES_BENCHMARK evalues.c -lhmmer -leasel -lm * * ./evalues-benchmark * * -malign-double is needed for gcc if the rest of HMMER was compiled w/ -malign-double * (i.e., our default gcc optimization) * * 27 Dec 08 on wanderoo: 24 msec per RRM_1 calibration; 37 msec for Caudal_act * profiling shows 75% in Forward; 12% esl_random(); <3% in MSVFilter. */ #include #include #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "cachedb.h" #include "hmmpgmd.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] db1 [db2 ...]"; static char banner[] = "unit test for cached databases"; typedef struct seq_info_s { ESL_DSQ *dsq; /* digitized sequence [1..n] */ int64_t n; /* length of dsq */ uint64_t db_key; /* flag for included databases */ struct seq_info_s *next; } SEQ_INFO; int main(int argc, char **argv) { int status; ESL_GETOPTS *go = NULL; P7_CACHEDB_SEQS *cache = NULL; if ((go = esl_getopts_Create(options)) == NULL) { printf("Failed to create options\n"); return 0; } if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_getopts_Destroy(go); return 0; } if (esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_getopts_Destroy(go); return 0; } if (esl_opt_ArgNumber(go) < 1) { printf("Must specify at least one database\n"); esl_getopts_Destroy(go); return 0; } printf("Reading cache %s\n", esl_opt_GetArg(go, 1)); if ((status = cache_SeqDb(esl_opt_GetArg(go, 1), &cache)) != eslOK) { printf("ERROR %d\n", status); return 0; } cache_SeqDestroy(cache); esl_getopts_Destroy(go); return 0; } #endif /*CACHEDB_UTEST2*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/cachedb.c $ * SVN $Id: cachedb.c 4437 2013-04-26 17:57:41Z wheelert $ *****************************************************************/ hmmer-3.1b2/src/hmmer.h0000664361611702660230000025500412473612613014346 0ustar wheelerteddy/* The all-encompassing include file for HMMER. * All-encompassing because there's a lot of crossdependency. * There's some opportunity for modularity, but not a lot. * * 1. P7_HMM: a core model. * 2. P7_PROFILE: a scoring profile, and its implicit model. * 3. P7_BG: a null (background) model. * 4. P7_TRACE: a traceback path (alignment of seq to profile). * 5. P7_HMMFILE: an HMM save file or database, open for reading. * 6. P7_GMX: a "generic" dynamic programming matrix * 7. P7_PRIOR: mixture Dirichlet prior for profile HMMs * 8. P7_SPENSEMBLE: segment pair ensembles for domain locations * 9. P7_ALIDISPLAY: an alignment formatted for printing * 10. P7_DOMAINDEF: reusably managing workflow in annotating domains * 11. P7_TOPHITS: ranking lists of top-scoring hits * 12. P7_SCOREDATA: data used in diagonal recovery and extension * 13. P7_HMM_WINDOW: data used to track lists of sequence windows * 14. Inclusion of the architecture-specific optimized implementation. * 16. P7_PIPELINE: H3's accelerated seq/profile comparison pipeline * 17. P7_BUILDER: configuration options for new HMM construction. * 18. Declaration of functions in HMMER's exposed API. * 19. Copyright and license information. * * Also, see impl_{sse,vmx}/impl_{sse,vmx}.h for additional API * specific to the acceleration layer; in particular, the P7_OPROFILE * structure for an optimized profile. */ #ifndef P7_HMMERH_INCLUDED #define P7_HMMERH_INCLUDED #include "p7_config.h" #include /* FILE */ #ifdef HAVE_MPI #include "mpi.h" #endif #ifdef HMMER_THREADS #include #endif #include "easel.h" #include "esl_alphabet.h" /* ESL_DSQ, ESL_ALPHABET */ #include "esl_dirichlet.h" /* ESL_MIXDCHLET */ #include "esl_dmatrix.h" /* ESL_DMATRIX */ #include "esl_getopts.h" /* ESL_GETOPTS */ #include "esl_histogram.h" /* ESL_HISTOGRAM */ #include "esl_hmm.h" /* ESL_HMM */ #include "esl_keyhash.h" /* ESL_KEYHASH */ #include "esl_msa.h" /* ESL_MSA */ #include "esl_random.h" /* ESL_RANDOMNESS */ #include "esl_sq.h" /* ESL_SQ */ #include "esl_scorematrix.h" /* ESL_SCOREMATRIX */ #include "esl_stopwatch.h" /* ESL_STOPWATCH */ /* Search modes. */ #define p7_NO_MODE 0 #define p7_LOCAL 1 /* multihit local: "fs" mode */ #define p7_GLOCAL 2 /* multihit glocal: "ls" mode */ #define p7_UNILOCAL 3 /* unihit local: "sw" mode */ #define p7_UNIGLOCAL 4 /* unihit glocal: "s" mode */ #define p7_IsLocal(mode) (mode == p7_LOCAL || mode == p7_UNILOCAL) #define p7_IsMulti(mode) (mode == p7_LOCAL || mode == p7_GLOCAL) #define p7_NEVPARAM 6 /* number of statistical parameters stored in models */ #define p7_NCUTOFFS 6 /* number of Pfam score cutoffs stored in models */ #define p7_NOFFSETS 3 /* number of disk offsets stored in models for hmmscan's fast model input */ enum p7_evparams_e { p7_MMU = 0, p7_MLAMBDA = 1, p7_VMU = 2, p7_VLAMBDA = 3, p7_FTAU = 4, p7_FLAMBDA = 5 }; enum p7_cutoffs_e { p7_GA1 = 0, p7_GA2 = 1, p7_TC1 = 2, p7_TC2 = 3, p7_NC1 = 4, p7_NC2 = 5 }; enum p7_offsets_e { p7_MOFFSET = 0, p7_FOFFSET = 1, p7_POFFSET = 2 }; #define p7_EVPARAM_UNSET -99999.0f /* if evparam[0] is unset, then all unset */ #define p7_CUTOFF_UNSET -99999.0f /* if cutoff[XX1] is unset, then cutoff[XX2] unset, XX={GA,TC,NC} */ #define p7_COMPO_UNSET -1.0f /* if compo[0] is unset, then all unset */ /* Option flags when creating multiple alignments with p7_tracealign_*() */ #define p7_DEFAULT 0 #define p7_DIGITIZE (1<<0) #define p7_ALL_CONSENSUS_COLS (1<<1) #define p7_TRIM (1<<2) /* Option flags when creating faux traces with p7_trace_FauxFromMSA() */ #define p7_MSA_COORDS (1<<0) /* default: i = unaligned seq residue coords */ /* Which strand(s) should be searched */ enum p7_strands_e { p7_STRAND_TOPONLY = 0, p7_STRAND_BOTTOMONLY = 1, p7_STRAND_BOTH = 2}; /***************************************************************** * 1. P7_HMM: a core model. *****************************************************************/ /* Bit flags used in flags>: optional annotation in an HMM * * Flags marked with ! may not be changed nor used for other meanings, * because they're codes used by HMMER2 (and earlier) that must be * preserved for reverse compatibility with old HMMER files. * * Why use flags? (So I don't ask this question of myself again:) * 1. The way we allocate an HMM, we need to know if we're allocating * M-width annotation fields (RF, CS, CA, MAP) before we read the * annotation from the file. * 2. Historically, H2 used flags, so we still need to read H2 flags * for backwards compatibility; so we may as well keep using them. */ #define p7H_HASBITS (1<<0) /* obsolete (was: model has log-odds scores) !*/ #define p7H_DESC (1<<1) /* description exists (legacy; xref SRE:J5/114) !*/ #define p7H_RF (1<<2) /* #RF annotation available !*/ #define p7H_CS (1<<3) /* #CS annotation available !*/ #define p7H_XRAY (1<<4) /* obsolete (was: structural data available) !*/ #define p7H_HASPROB (1<<5) /* obsolete (was: model in probability form) !*/ #define p7H_HASDNA (1<<6) /* obsolete (was: protein HMM->DNA seq params set) !*/ #define p7H_STATS (1<<7) /* model has E-value statistics calibrated !*/ #define p7H_MAP (1<<8) /* alignment map is available !*/ #define p7H_ACC (1<<9) /* accession is available (legacy; xref SRE:J5/114)!*/ #define p7H_GA (1<<10) /* gathering thresholds available !*/ #define p7H_TC (1<<11) /* trusted cutoffs available !*/ #define p7H_NC (1<<12) /* noise cutoffs available !*/ #define p7H_CA (1<<13) /* surface accessibilities available !*/ #define p7H_COMPO (1<<14) /* model-specific residue composition available */ #define p7H_CHKSUM (1<<15) /* model has an alignment checksum */ #define p7H_CONS (1<<16) /* consensus residue line available */ #define p7H_MMASK (1<<17) /* #MM annotation available !*/ /* Indices of Plan7 main model state transitions, hmm->t[k][] */ enum p7h_transitions_e { p7H_MM = 0, p7H_MI = 1, p7H_MD = 2, p7H_IM = 3, p7H_II = 4, p7H_DM = 5, p7H_DD = 6 }; #define p7H_NTRANSITIONS 7 /* How the hmm->t[k] vector is interpreted as separate probability vectors. */ #define P7H_TMAT(hmm, k) ((hmm)->t[k]) #define P7H_TINS(hmm, k) ((hmm)->t[k]+3) #define P7H_TDEL(hmm, k) ((hmm)->t[k]+5) #define p7H_NTMAT 3 #define p7H_NTDEL 2 #define p7H_NTINS 2 /* Some notes: * 0. The model might be either in counts or probability form. * 1. t[0] is special: t[0][TMM,TMI,TMD] are the begin->M_1,I_0,D_1 entry probabilities, * t[0][TIM,TII] are the I_0 transitions, and delete state 0 doesn't * exist. Therefore D[0] transitions and mat[0] emissions are unused. * To simplify some normalization code, we adopt a convention that these are set * to valid probability distributions: 1.0 for t[0][TDM] and mat[0][0], * and 0 for the rest. * 2. t[M] is also special: TMD and TDD are 0 because there is no next delete state; * TDM is therefore 1.0 by definition. TMM and TDM are interpreted as the * M->E and D->E end transitions. t[M][TDM] must be 1.0, therefore. */ typedef struct p7_hmm_s { /*::cexcerpt::plan7_core::begin::*/ int M; /* length of the model (# nodes) */ float **t; /* transition prob's. t[(0),1..M][0..p7H_NTRANSITIONS-1] */ float **mat; /* match emissions. mat[1..M][0..K-1] */ float **ins; /* insert emissions. ins[1..M][0..K-1] */ /*::cexcerpt::plan7_core::end::*/ /* Annotation. Everything but is optional. Flags are set when * optional values are set. All the char *'s are proper nul-terminated * strings, not just arrays. (hmm->map is an int array). */ char *name; /* name of the model (mandatory) */ /* String, \0-terminated */ char *acc; /* accession number of model (Pfam) (optional: NULL) */ /* String, \0-terminated */ char *desc; /* brief (1-line) description of model (optional: NULL) */ /* String, \0-terminated */ char *rf; /* reference line from alignment 1..M (p7H_RF) */ /* String; 0=' ', M+1='\0' */ char *mm; /* model mask line from alignment 1..M (p7H_MM) */ /* String; 0=' ', M+1='\0' */ char *consensus; /* consensus residue line 1..M (p7H_CONS) */ /* String; 0=' ', M+1='\0' */ char *cs; /* consensus structure line 1..M (p7H_CS) */ /* String; 0=' ', M+1='\0' */ char *ca; /* consensus accessibility line 1..M (p7H_CA) */ /* String; 0=' ', M+1='\0' */ char *comlog; /* command line(s) that built model (optional: NULL) */ /* String, \0-terminated */ int nseq; /* number of training sequences (optional: -1) */ float eff_nseq; /* effective number of seqs (<= nseq) (optional: -1) */ int max_length; /* upper bound length, all but 1e-7 prob (optional: -1) */ char *ctime; /* creation date (optional: NULL) */ int *map; /* map of alignment cols onto model 1..M (p7H_MAP) */ /* Array; map[0]=0 */ uint32_t checksum; /* checksum of training sequences (p7H_CHKSUM) */ float evparam[p7_NEVPARAM]; /* E-value params (p7H_STATS) */ float cutoff[p7_NCUTOFFS]; /* Pfam score cutoffs (p7H_{GA,TC,NC}) */ float compo[p7_MAXABET]; /* model bg residue comp (p7H_COMPO) */ off_t offset; /* HMM record offset on disk */ const ESL_ALPHABET *abc; /* ptr to alphabet info (hmm->abc->K is alphabet size) */ int flags; /* status flags */ } P7_HMM; /***************************************************************** * 2. P7_PROFILE: a scoring profile, and its implicit model. *****************************************************************/ /* Indices for special state types in the length model, gm->xsc[x][] */ enum p7p_xstates_e { p7P_E = 0, p7P_N = 1, p7P_J = 2, p7P_C = 3 }; #define p7P_NXSTATES 4 /* Indices for transitions from the length modeling scores gm->xsc[][x] */ enum p7p_xtransitions_e { p7P_LOOP = 0, p7P_MOVE = 1 }; #define p7P_NXTRANS 2 /* Indices for transition scores gm->tsc[k][] */ /* order is optimized for dynamic programming */ enum p7p_tsc_e { p7P_MM = 0, p7P_IM = 1, p7P_DM = 2, p7P_BM = 3, p7P_MD = 4, p7P_DD = 5, p7P_MI = 6, p7P_II = 7, }; #define p7P_NTRANS 8 /* Indices for residue emission score vectors */ enum p7p_rsc_e { p7P_MSC = 0, p7P_ISC = 1 }; #define p7P_NR 2 /* Accessing transition, emission scores */ /* _BM is specially stored off-by-one: [k-1][p7P_BM] is score for entering at Mk */ #define p7P_TSC(gm, k, s) ((gm)->tsc[(k) * p7P_NTRANS + (s)]) #define p7P_MSC(gm, k, x) ((gm)->rsc[x][(k) * p7P_NR + p7P_MSC]) #define p7P_ISC(gm, k, x) ((gm)->rsc[x][(k) * p7P_NR + p7P_ISC]) typedef struct p7_profile_s { float *tsc; /* transitions [0.1..M-1][0..p7P_NTRANS-1], hand-indexed */ float **rsc; /* emissions [0..Kp-1][0.1..M][p7P_NR], hand-indexed */ float xsc[p7P_NXSTATES][p7P_NXTRANS]; /* special transitions [NECJ][LOOP,MOVE] */ int mode; /* configured algorithm mode (e.g. p7_LOCAL) */ int L; /* current configured target seq length */ int allocM; /* max # of nodes allocated in this structure */ int M; /* number of nodes in the model */ int max_length; /* calculated upper bound on emitted seq length */ float nj; /* expected # of uses of J; precalculated from loop config */ /* Info, most of which is a copy from parent HMM: */ char *name; /* unique name of model */ char *acc; /* unique accession of model, or NULL */ char *desc; /* brief (1-line) description of model, or NULL */ char *rf; /* reference line from alignment 1..M; *rf=0 means unused */ char *mm; /* modelmask line 1..M; *ref=0: unused */ char *cs; /* consensus structure line 1..M, *cs=0 means unused */ char *consensus; /* consensus residues to display in alignments, 1..M */ float evparam[p7_NEVPARAM]; /* parameters for determining E-values, or UNSET */ float cutoff[p7_NCUTOFFS]; /* per-seq/per-domain bit score cutoffs, or UNSET */ float compo[p7_MAXABET]; /* per-model HMM filter composition, or UNSET */ /* Disk offset information for hmmpfam's fast model retrieval */ off_t offs[p7_NOFFSETS]; /* p7_{MFP}OFFSET, or -1 */ off_t roff; /* record offset (start of record); -1 if none */ off_t eoff; /* offset to last byte of record; -1 if unknown */ const ESL_ALPHABET *abc; /* copy of pointer to appropriate alphabet */ } P7_PROFILE; /***************************************************************** * 3. P7_BG: a null (background) model. *****************************************************************/ /* This really contains three different things: * * - the "null1" model, a one-state HMM consisting of background * frequencies and a parameter for a target-length * dependent geometric; * * - the "bias filter" a two-state HMM composed from null1's * background and the model's mean composition . This * model is constructed dynamically, every time a new profile is * considered; * * - a single term that's needed by the "null2" model to set * a balance between the null1 and null2 scoring terms. The null2 * model is otherwise defined by construction, in p7_domaindef.c. * * Someday we might pull this apart into two or three separate * objects. */ typedef struct p7_bg_s { float *f; /* null1 background residue frequencies [0..K-1]: set at initialization */ float p1; /* null1's transition prob: p7_bg_SetLength() sets this from target seq L */ ESL_HMM *fhmm; /* bias filter: p7_bg_SetFilter() sets this, from model's mean composition */ float omega; /* the "prior" on null2/null3: set at initialization (one omega for both null types) */ const ESL_ALPHABET *abc; /* reference to alphabet in use: set at initialization */ } P7_BG; /***************************************************************** * 4. P7_TRACE: a traceback (alignment of seq to profile). *****************************************************************/ /* Traceback structure for alignment of a model to a sequence. * * A traceback only makes sense in a triplet (tr, gm, dsq), for a * given profile or HMM (with nodes 1..M) and a given digital sequence * (with positions 1..L). * * A traceback may be relative to a profile (usually) or to a core * model (as a special case in model construction; see build.c). You * can tell the difference by looking at the first statetype, * tr->st[0]; if it's a p7T_S, it's for a profile, and if it's p7T_B, * it's for a core model. * * A "profile" trace uniquely has S,N,C,T,J states and their * transitions; it also can have B->Mk and Mk->E internal entry/exit * transitions for local alignments. It may not contain X states. * * A "core" trace may contain I0, IM, and D1 states and their * transitions. A "core" trace can also have B->X->{MDI}k and * {MDI}k->X->E transitions as a special hack in a build procedure, to * deal with the case of a local alignment fragment implied by an * input alignment, which is "impossible" for a core model. * X "states" only appear in core traces, and only at these * entry/exit places; some code depends on this. * * A profile's N,C,J states emit on transition, not on state, so a * path of N emits 0 residues, NN emits 1 residue, NNN emits 2 * residues, and so on. By convention, the trace always associates an * emission-on-transition with the trailing (destination) state, so * the first N, C, or J is stored in a trace as a nonemitter (i=0). * * A i coords in a traceback are usually 1..L with respect to an * unaligned digital target sequence, but in the special case of * traces faked from existing MSAs (as in hmmbuild), the coords may * be 1..alen relative to an MSA's columns. */ /* State types */ enum p7t_statetype_e { p7T_BOGUS = 0, p7T_M = 1, p7T_D = 2, p7T_I = 3, p7T_S = 4, p7T_N = 5, p7T_B = 6, p7T_E = 7, p7T_C = 8, p7T_T = 9, p7T_J = 10, p7T_X = 11, /* missing data: used esp. for local entry/exits */ }; #define p7T_NSTATETYPES 12 typedef struct p7_trace_s { int N; /* length of traceback */ int nalloc; /* allocated length of traceback */ char *st; /* state type code [0..N-1]*/ int *k; /* node index; 1..M if M,D,I; else 0 [0..N-1]*/ int *i; /* pos emitted in dsq, 1..L; else 0 [0..N-1]*/ float *pp; /* posterior prob of x_i; else 0 [0..N-1]*/ int M; /* model length M (maximum k) */ int L; /* sequence length L (maximum i) */ /* The following section is data generated by "indexing" a trace's domains */ int ndom; /* number of domains in trace (= # of B or E states) */ int *tfrom, *tto; /* locations of B/E states in trace (0..tr->N-1) */ int *sqfrom, *sqto; /* first/last M-emitted residue on sequence (1..L) */ int *hmmfrom, *hmmto;/* first/last M state on model (1..M) */ int ndomalloc; /* current allocated size of these stacks */ } P7_TRACE; /***************************************************************** * 5. P7_HMMFILE: an HMM save file or database, open for reading. *****************************************************************/ /* These tags need to be in temporal order, so we can do tests * like "if (format >= p7_HMMFILE_3b) ..." */ enum p7_hmmfile_formats_e { p7_HMMFILE_20 = 0, p7_HMMFILE_3a = 1, p7_HMMFILE_3b = 2, p7_HMMFILE_3c = 3, p7_HMMFILE_3d = 4, p7_HMMFILE_3e = 5, p7_HMMFILE_3f = 6, }; typedef struct p7_hmmfile_s { FILE *f; /* pointer to stream for reading models */ char *fname; /* (fully qualified) name of the HMM file; [STDIN] if - */ ESL_SSI *ssi; /* open SSI index for model file ; NULL if none. */ int do_gzip; /* TRUE if f is "gzip -dc |" (will pclose(f)) */ int do_stdin; /* TRUE if f is stdin (won't close f) */ int newly_opened; /* TRUE if we just opened the stream (and parsed magic) */ int is_pressed; /* TRUE if a pressed HMM database file (Pfam or equiv) */ int format; /* HMM file format code */ int (*parser)(struct p7_hmmfile_s *, ESL_ALPHABET **, P7_HMM **); ESL_FILEPARSER *efp; /* If , we can read optimized profiles directly, via: */ FILE *ffp; /* MSV part of the optimized profile */ FILE *pfp; /* rest of the optimized profile */ #ifdef HMMER_THREADS int syncRead; pthread_mutex_t readMutex; #endif char errbuf[eslERRBUFSIZE]; } P7_HMMFILE; /* note on , above: * this is the actual name of the HMM file being read. * * The way p7_hmmfile_Open() works, it will preferentially look for * hmmpress'ed binary files. If you open "foo", it will first try to * open "foo.h3m" and will be "foo.h3m". "foo" does not even * have to exist. If a parsing error occurs, you want to * be "foo.h3m", so error messages report blame correctly. * In the special case of reading from stdin, is "[STDIN]". */ /***************************************************************** * 6. P7_GMX: a "generic" dynamic programming matrix *****************************************************************/ enum p7g_scells_e { p7G_M = 0, p7G_I = 1, p7G_D = 2, }; #define p7G_NSCELLS 3 enum p7g_xcells_e { p7G_E = 0, p7G_N = 1, p7G_J = 2, p7G_B = 3, p7G_C = 4 }; #define p7G_NXCELLS 5 typedef struct p7_gmx_s { int M; /* actual model dimension (model 1..M) */ int L; /* actual sequence dimension (seq 1..L) */ int allocR; /* current allocated # of rows : L+1 <= validR <= allocR */ int validR; /* # of rows actually pointing at DP memory */ int allocW; /* current set row width : M+1 <= allocW */ uint64_t ncells; /* total # of allocated cells in 2D matrix : ncells >= (validR)(allocW) */ float **dp; /* logically [0.1..L][0.1..M][0..p7G_NSCELLS-1]; indexed [i][k*p7G_NSCELLS+s] */ float *xmx; /* logically [0.1..L][0..p7G_NXCELLS-1]; indexed [i*p7G_NXCELLS+s] */ float *dp_mem; } P7_GMX; /* Macros below implement indexing idioms for generic DP routines. * They require the following setup, for profile and matrix : * float const *tsc = gm->tsc; * float **dp = gx->dp; * float *xmx = gx->xmx; * and for each row i (target residue x_i in digital seq ): * float const *rsc = gm->rsc[dsq[i]]; */ #define MMX(i,k) (dp[(i)][(k) * p7G_NSCELLS + p7G_M]) #define IMX(i,k) (dp[(i)][(k) * p7G_NSCELLS + p7G_I]) #define DMX(i,k) (dp[(i)][(k) * p7G_NSCELLS + p7G_D]) #define XMX(i,s) (xmx[(i) * p7G_NXCELLS + (s)]) #define TSC(s,k) (tsc[(k) * p7P_NTRANS + (s)]) #define MSC(k) (rsc[(k) * p7P_NR + p7P_MSC]) #define ISC(k) (rsc[(k) * p7P_NR + p7P_ISC]) /* Flags that control P7_GMX debugging dumps */ #define p7_HIDE_SPECIALS (1<<0) #define p7_SHOW_LOG (1<<1) /***************************************************************** * 7. P7_PRIOR: mixture Dirichlet prior for profile HMMs *****************************************************************/ typedef struct p7_prior_s { ESL_MIXDCHLET *tm; /* match transitions */ ESL_MIXDCHLET *ti; /* insert transitions */ ESL_MIXDCHLET *td; /* delete transitions */ ESL_MIXDCHLET *em; /* match emissions */ ESL_MIXDCHLET *ei; /* insert emissions */ } P7_PRIOR; /***************************************************************** * 8. P7_SPENSEMBLE: segment pair ensembles for domain locations *****************************************************************/ /* struct p7_spcoord_s: * a coord quad defining a segment pair. */ struct p7_spcoord_s { int idx; /* backreference index: which trace a seg came from, or which cluster a domain came from */ int i, j; /* start,end in a target sequence (1..L) */ int k, m; /* start,end in a query model (1..M) */ float prob; /* posterior probability of segment */ }; /* Structure: P7_SPENSEMBLE * * Collection and clustering of an ensemble of sampled segment pairs, * in order to define domain locations using their posterior * probability distribution (as opposed to Viterbi MAP tracebacks). */ typedef struct p7_spensemble_s { /* Section 1: a collected ensemble of segment pairs */ int nsamples; /* number of sampled traces */ struct p7_spcoord_s *sp; /* array of sampled seg pairs; [0..n-1] */ int nalloc; /* allocated size of */ int n; /* number of seg pairs in */ /* Section 2: then the ensemble is clustered by single-linkage clustering */ int *workspace; /* temp space for Easel SLC algorithm: 2*n */ int *assignment; /* each seg pair's cluster index: [0..n-1] = (0..nc-1) */ int nc; /* number of different clusters */ /* Section 3: then endpoint distribution is examined within each large cluster */ int *epc; /* array counting frequency of each endpoint */ int epc_alloc; /* allocated width of */ /* Section 4: finally each large cluster is resolved into domain coords */ struct p7_spcoord_s *sigc; /* array of coords for each domain, [0..nsigc-1] */ int nsigc; /* number of "significant" clusters, domains */ int nsigc_alloc; /* current allocated max for nsigc */ } P7_SPENSEMBLE; /***************************************************************** * 9. P7_ALIDISPLAY: an alignment formatted for printing *****************************************************************/ /* Structure: P7_ALIDISPLAY * * Alignment of a sequence domain to an HMM, formatted for printing. * * For an alignment of L residues and names C chars long, requires * 6L + 2C + 30 bytes; for typical case of L=100,C=10, that's * <0.7 Kb. */ typedef struct p7_alidisplay_s { char *rfline; /* reference coord info; or NULL */ char *mmline; /* modelmask coord info; or NULL */ char *csline; /* consensus structure info; or NULL */ char *model; /* aligned query consensus sequence */ char *mline; /* "identities", conservation +'s, etc. */ char *aseq; /* aligned target sequence */ char *ppline; /* posterior prob annotation; or NULL */ int N; /* length of strings */ char *hmmname; /* name of HMM */ char *hmmacc; /* accession of HMM; or [0]='\0' */ char *hmmdesc; /* description of HMM; or [0]='\0' */ int hmmfrom; /* start position on HMM (1..M, or -1) */ int hmmto; /* end position on HMM (1..M, or -1) */ int M; /* length of model */ char *sqname; /* name of target sequence */ char *sqacc; /* accession of target seq; or [0]='\0' */ char *sqdesc; /* description of targ seq; or [0]='\0' */ long sqfrom; /* start position on sequence (1..L) */ long sqto; /* end position on sequence (1..L) */ long L; /* length of sequence */ int memsize; /* size of allocated block of memory */ char *mem; /* memory used for the char data above */ } P7_ALIDISPLAY; /***************************************************************** * 10. P7_DOMAINDEF: reusably managing workflow in defining domains *****************************************************************/ typedef struct p7_dom_s { int ienv, jenv; int iali, jali; float envsc; /* Forward score in envelope ienv..jenv; NATS; without null2 correction */ float domcorrection; /* null2 score when calculating a per-domain score; NATS */ float dombias; /* FLogsum(0, log(bg->omega) + domcorrection): null2 score contribution; NATS */ float oasc; /* optimal accuracy score (units: expected # residues correctly aligned) */ float bitscore; /* overall score in BITS, null corrected, if this were the only domain in seq */ double lnP; /* log(P-value) of the bitscore */ int is_reported; /* TRUE if domain meets reporting thresholds */ int is_included; /* TRUE if domain meets inclusion thresholds */ float *scores_per_pos; /* score in BITS that each position in the alignment contributes to an overall viterbi score */ P7_ALIDISPLAY *ad; } P7_DOMAIN; /* Structure: P7_DOMAINDEF * * This is a container for all the necessary information for domain * definition procedures in , including a bunch of * heuristic thresholds. The structure is reusable to minimize the * number of allocation/free cycles that need to be done when * processing a large number of sequences. You create the structure * with ; after you're done with defining * domains on a sequence, you call before using * it on the next sequence; and when you're completely done, you free * it with . All memory management is handled * internally; you don't need to reallocate anything yourself. */ typedef struct p7_domaindef_s { /* for posteriors of being in a domain, B, E */ float *mocc; /* mocc[i=1..L] = prob that i is emitted by core model (is in a domain) */ float *btot; /* btot[i=1..L] = cumulative expected times that domain starts at or before i */ float *etot; /* etot[i=1..L] = cumulative expected times that domain ends at or before i */ int L; int Lalloc; /* the ad hoc null2 model: 1..L nat scores for each residue, log f'(x_i) / f(x_i) */ float *n2sc; /* rng and reusable memory for stochastic tracebacks */ ESL_RANDOMNESS *r; /* random number generator */ int do_reseeding; /* TRUE to reset the RNG, make results reproducible */ P7_SPENSEMBLE *sp; /* an ensemble of sampled segment pairs (domain endpoints) */ P7_TRACE *tr; /* reusable space for a trace of a domain */ P7_TRACE *gtr; /* reusable space for a traceback of the entire target seq */ /* Heuristic thresholds that control the region definition process */ /* "rt" = "region threshold", for lack of better term */ float rt1; /* controls when regions are called. mocc[i] post prob >= dt1 : triggers a region around i */ float rt2; /* controls extent of regions. regions extended until mocc[i]-{b,e}occ[i] < dt2 */ float rt3; /* controls when regions are flagged for split: if expected # of E preceding B is >= dt3 */ /* Heuristic thresholds that control the stochastic traceback/clustering process */ int nsamples; /* collect ensemble of this many stochastic traces */ float min_overlap; /* 0.8 means >= 80% overlap of (smaller/larger) segment to link, both in seq and hmm */ int of_smaller; /* see above; TRUE means overlap denom is calc'ed wrt smaller segment; FALSE means larger */ int max_diagdiff; /* 4 means either start or endpoints of two segments must be within <=4 diagonals of each other */ float min_posterior; /* 0.25 means a cluster must have >= 25% posterior prob in the sample to be reported */ float min_endpointp; /* 0.02 means choose widest endpoint with post prob of at least 2% */ /* storage of the results; domain locations, scores, alignments */ P7_DOMAIN *dcl; int ndom; /* number of domains defined, in the end. */ int nalloc; /* number of domain structures allocated in */ /* Additional results storage */ float nexpected; /* posterior expected number of domains in the sequence (from posterior arrays) */ int nregions; /* number of regions evaluated */ int nclustered; /* number of regions evaluated by clustering ensemble of tracebacks */ int noverlaps; /* number of envelopes defined in ensemble clustering that overlap w/ prev envelope */ int nenvelopes; /* number of envelopes handed over for domain definition, null2, alignment, and scoring. */ } P7_DOMAINDEF; /***************************************************************** * 11. P7_TOPHITS: ranking lists of top-scoring hits *****************************************************************/ #define p7_HITFLAGS_DEFAULT 0 #define p7_IS_INCLUDED (1<<0) #define p7_IS_REPORTED (1<<1) #define p7_IS_NEW (1<<2) #define p7_IS_DROPPED (1<<3) #define p7_IS_DUPLICATE (1<<4) /* Structure: P7_HIT * * Info about a high-scoring database hit, kept so we can output a * sorted list of high hits at the end. * * sqfrom and sqto are the coordinates that will be shown * in the results, not coords in arrays... therefore, reverse * complements have sqfrom > sqto */ typedef struct p7_hit_s { char *name; /* name of the target (mandatory) */ char *acc; /* accession of the target (optional; else NULL) */ char *desc; /* description of the target (optional; else NULL) */ int window_length; /* for later use in e-value computation, when splitting long sequences */ double sortkey; /* number to sort by; big is better */ float score; /* bit score of the sequence (all domains, w/ correction) */ float pre_score; /* bit score of sequence before null2 correction */ float sum_score; /* bit score reconstructed from sum of domain envelopes */ double lnP; /* log(P-value) of the score */ double pre_lnP; /* log(P-value) of the pre_score */ double sum_lnP; /* log(P-value) of the sum_score */ float nexpected; /* posterior expected number of domains in the sequence (from posterior arrays) */ int nregions; /* number of regions evaluated */ int nclustered; /* number of regions evaluated by clustering ensemble of tracebacks */ int noverlaps; /* number of envelopes defined in ensemble clustering that overlap w/ prev envelope */ int nenvelopes; /* number of envelopes handed over for domain definition, null2, alignment, and scoring. */ int ndom; /* total # of domains identified in this seq */ uint32_t flags; /* p7_IS_REPORTED | p7_IS_INCLUDED | p7_IS_NEW | p7_IS_DROPPED */ int nreported; /* # of domains satisfying reporting thresholding */ int nincluded; /* # of domains satisfying inclusion thresholding */ int best_domain; /* index of best-scoring domain in dcl */ int64_t seqidx; /*unique identifier to track the database sequence from which this hit came*/ int64_t subseq_start; /*used to track which subsequence of a full_length target this hit came from, for purposes of removing duplicates */ P7_DOMAIN *dcl; /* domain coordinate list and alignment display */ esl_pos_t offset; /* used in socket communications, in serialized communication: offset of P7_DOMAIN msg for this P7_HIT */ } P7_HIT; /* Structure: P7_TOPHITS * merging when we prepare to output results. "hit" list is NULL and * unavailable until after we do a sort. */ typedef struct p7_tophits_s { P7_HIT **hit; /* sorted pointer array */ P7_HIT *unsrt; /* unsorted data storage */ uint64_t Nalloc; /* current allocation size */ uint64_t N; /* number of hits in list now */ uint64_t nreported; /* number of hits that are reportable */ uint64_t nincluded; /* number of hits that are includable */ int is_sorted_by_sortkey; /* TRUE when hits sorted by sortkey and th->hit valid for all N hits */ int is_sorted_by_seqidx; /* TRUE when hits sorted by seq_idx, position, and th->hit valid for all N hits */ } P7_TOPHITS; /***************************************************************** * 12. P7_SCOREDATA: data used in diagonal recovery and extension *****************************************************************/ enum p7_scoredatatype_e { p7_sd_std = 0, p7_sd_fm = 1, }; /* This contains a compact representation of 8-bit bias-shifted scores for use in * diagonal recovery (standard SSV) and extension (standard and FM-SSV), * along with MAXL-associated prefix- and suffix-lengths, and optimal extensions * for FM-SSV. */ typedef struct p7_scoredata_s { int type; int M; union {//implicit (M+1)*K matrix, where M = # states, and K = # characters in alphabet uint8_t *ssv_scores; // this 2D array is used in the default nhmmer pipeline float *ssv_scores_f; // this 2D array is used in the FM-index based pipeline }; float *prefix_lengths; float *suffix_lengths; float *fwd_scores; float **fwd_transitions; float **opt_ext_fwd; // Used only for FM-index based pipeline float **opt_ext_rev; // Used only for FM-index based pipeline } P7_SCOREDATA; /***************************************************************** * 13. P7_HMM_WINDOW: data used to track lists of sequence windows *****************************************************************/ typedef struct p7_hmm_window_s { float score; float null_sc; int32_t id; //sequence id of the database sequence hit int64_t n; //position in database sequence at which the diagonal/window starts int64_t fm_n; //position in the concatenated fm-index sequence at which the diagonal starts int32_t length; // length of the diagonal/window int16_t k; //position of the model at which the diagonal ends int64_t target_len; //length of the target sequence int8_t complementarity; int8_t used_to_extend; } P7_HMM_WINDOW; typedef struct p7_hmm_window_list_s { P7_HMM_WINDOW *windows; int count; int size; } P7_HMM_WINDOWLIST; /***************************************************************** * 14. The optimized implementation. *****************************************************************/ #if defined (p7_IMPL_SSE) #include "impl_sse/impl_sse.h" #elif defined (p7_IMPL_VMX) #include "impl_vmx/impl_vmx.h" #else #include "impl_dummy/impl_dummy.h" #endif /***************************************************************** * 15. The FM-index acceleration to the SSV filter. Only works for SSE *****************************************************************/ #define FM_MAX_LINE 256 /* Structure the 2D occ array into a single array. "type" is either b or sb. * Note that one extra count value is required by RLE, one 4-byte int for * each superblock count vector, and one 2-byte short for each block count * vector. This is small overhead, even for a small alphabet like dna. */ #define FM_OCC_CNT( type, i, c) ( occCnts_##type[(meta->alph_size)*(i) + (c)]) enum fm_alphabettypes_e { fm_DNA = 0, //acgt, 2 bit //fm_DNA_full = 1, //includes ambiguity codes, 4 bit. fm_AMINO = 4, // 5 bit }; /*TODO: fm_DNA_full has currently been disabled because of problems with how the * FM index handles very long runs of the same character (in this case, Ns). * See wheelert/notebook/2013/12-11-FM-alphabet-speed notes on 12/12. */ enum fm_direction_e { fm_forward = 0, fm_backward = 1, }; typedef struct fm_interval_s { int lower; int upper; } FM_INTERVAL; typedef struct fm_hit_s { uint64_t start; uint32_t block; int direction; int length; int sortkey; } FM_HIT; typedef struct fm_ambiglist_s { FM_INTERVAL *ranges; uint32_t count; uint32_t size; } FM_AMBIGLIST; typedef struct fm_seqdata_s { uint32_t target_id; // Which sequence in the target database did this segment come from (can be multiple segment per sequence, if a sequence has Ns) uint64_t target_start; // The position in sequence {id} in the target database at which this sequence-block starts (usually 1, unless its a long sequence split out over multiple FMs) uint32_t fm_start; // The position in the FM block at which this sequence begins uint32_t length; // Length of this sequence segment (usually the length of the target sequence, unless its a long sequence split out over multiple FMs) //meta data taken from the sequence this segment was taken from uint16_t name_length; uint16_t source_length; uint16_t acc_length; uint16_t desc_length; char *name; char *source; char *acc; char *desc; } FM_SEQDATA; typedef struct fm_metadata_s { uint8_t fwd_only; uint8_t alph_type; uint8_t alph_size; uint8_t charBits; uint32_t freq_SA; //frequency with which SA is sampled uint32_t freq_cnt_sb; //frequency with which full cumulative counts are captured uint32_t freq_cnt_b; //frequency with which intermittent counts are captured uint16_t block_count; uint32_t seq_count; uint64_t char_count; //total count of characters including those in and out of the alphabet char *alph; char *inv_alph; int *compl_alph; FILE *fp; FM_SEQDATA *seq_data; FM_AMBIGLIST *ambig_list; } FM_METADATA; typedef struct fm_data_s { uint64_t N; //length of text uint32_t term_loc; // location in the BWT at which the '$' char is found (replaced in the sequence with 'a') uint32_t seq_offset; uint32_t ambig_offset; uint32_t seq_cnt; uint32_t ambig_cnt; uint32_t overlap; // number of bases at the beginning that overlap the FM-index for the preceding block uint8_t *T; //text corresponding to the BWT uint8_t *BWT_mem; uint8_t *BWT; uint32_t *SA; // sampled suffix array int64_t *C; //the first position of each letter of the alphabet if all of T is sorted. (signed, as I use that to keep tract of presence/absence) uint32_t *occCnts_sb; uint16_t *occCnts_b; } FM_DATA; typedef struct fm_dp_pair_s { uint16_t pos; // position of the diagonal in the model. float score; float max_score; uint8_t score_peak_len; // how long was the diagonal when the most recent peak (within fm_drop_lim of the max score) was seen? uint8_t consec_pos; uint8_t max_consec_pos; uint8_t consec_consensus; uint8_t model_direction; uint8_t complementarity; } FM_DP_PAIR; typedef struct fm_diag_s { uint64_t n; //position of the database sequence at which the diagonal starts union { double sortkey; double score; }; uint16_t k; //position of the model at which the diagonal starts uint16_t length; uint8_t complementarity; } FM_DIAG; typedef struct fm_diaglist_s { FM_DIAG *diags; int count; int size; } FM_DIAGLIST; /* Effectively global variables, to be initialized once in fm_initConfig(), * then passed around among threads to avoid recomputing them * * When allocated, must be 16-byte aligned, and all _m128i elements * must precede other types */ typedef struct { #if defined (p7_IMPL_SSE) /* mask arrays, and 16-byte-offsets into them */ __m128i *fm_masks_mem; __m128i *fm_masks_v; __m128i *fm_reverse_masks_mem; __m128i *fm_reverse_masks_v; __m128i *fm_chars_mem; __m128i *fm_chars_v; /*various precomputed vectors*/ __m128i fm_allones_v; __m128i fm_zeros_v; __m128i fm_neg128_v; __m128i fm_m0f; //00 00 11 11 __m128i fm_m01; //01 01 01 01 __m128i fm_m11; //00 00 00 11 /* no non-__m128i- elements above this line */ #endif //#if defined (p7_IMPL_SSE) /*counter, to compute FM-index speed*/ int occCallCnt; /*bounding cutoffs*/ int max_depth; float drop_lim; // 0.2 ; in seed, max drop in a run of length [fm_drop_max_len] int drop_max_len; // 4 ; maximum run length with score under (max - [fm_drop_lim]) int consec_pos_req; //5 int consensus_match_req; //10 float score_density_req; //.5 int ssv_length; float scthreshFM; float sc_thresh_ratio; //information content deficit, actual_relent/target_relent /*pointer to FM-index metadata*/ FM_METADATA *meta; } FM_CFG; #if defined (p7_IMPL_SSE) //used to convert from a byte array to an __m128i typedef union { uint8_t bytes[16]; __m128i m128; } byte_m128; /* Gather the sum of all counts in a 16x8-bit element into a single 16-bit * element of the register (the 0th element) * * the _mm_sad_epu8 accumulates 8-bit counts into 16-bit counts: * left 8 counts (64-bits) accumulate in counts_v[0], * right 8 counts in counts_v[4] (the other 6 16-bit ints are 0) * the _mm_shuffle_epi32 flips the 4th int into the 0th slot */ #define FM_GATHER_8BIT_COUNTS( in_v, mid_v, out_v ) do {\ mid_v = _mm_sad_epu8 (in_v, cfg->fm_zeros_v);\ tmp_v = _mm_shuffle_epi32(mid_v, _MM_SHUFFLE(1, 1, 1, 2));\ out_v = _mm_add_epi16(mid_v, tmp_v);\ } while (0) /* Macro for SSE operations to turn 2-bit character values into 2-bit binary * (00 or 01) match/mismatch values representing occurrences of a character in a * 4-char-per-byte packed BWT. * * Typically followed by a call to FM_COUNT_SSE_4PACKED, possibly with a * mask in between to handle the case where we don't want to add over all * positions in the vector * * tmp_v and tmp2_v are used as temporary vectors throughout, and hold meaningless values * at the end * * xor(in_v, c_v) : each 2-bit value will be 00 if a match, and non-0 if a mismatch * and(in_v, 01010101) : look at the right bit of each 2-bit value, * srli(1)+and() : look at the left bit of each 2-bit value, * or() : if either left bit or right bit is non-0, 01, else 00 (match is 00) * * subs() : invert, so match is 01, mismatch is 00 * */ #define FM_MATCH_2BIT(in_v, c_v, a_v, b_v, out_v) do {\ a_v = _mm_xor_si128(in_v, c_v);\ \ b_v = _mm_srli_epi16(a_v, 1);\ a_v = _mm_or_si128(a_v, b_v);\ b_v = _mm_and_si128(a_v, cfg->fm_m01);\ \ out_v = _mm_subs_epi8(cfg->fm_m01,b_v);\ } while (0) /*Macro for SSE operations to count bits produced by FM_MATCH_SSE_4PACKED * * tmp_v and tmp2_v are used as temporary vectors throughout, and hold meaningless values * at the end * * then add up the 2-bit values: * srli(4)+add() : left 4 bits shifted right, added to right 4 bits * * srli(2)+and(00000011) : left 2 bits (value 0..2) shifted right, masked, so no other bits active * and(00000011) : right 2 bits (value 0..2) masked so no other bits active * * final 2 add()s : tack current counts on to already-tabulated counts. */ #define FM_COUNT_2BIT(a_v, b_v, cnts_v) do {\ b_v = _mm_srli_epi16(a_v, 4);\ a_v = _mm_add_epi16(a_v, b_v);\ \ b_v = _mm_srli_epi16(a_v, 2);\ a_v = _mm_and_si128(a_v,cfg->fm_m11);\ b_v = _mm_and_si128(b_v,cfg->fm_m11);\ \ cnts_v = _mm_add_epi16(cnts_v, a_v);\ cnts_v = _mm_add_epi16(cnts_v, b_v);\ } while (0) /* Macro for SSE operations that turns a vector of 4-bit character values into * 2 vectors representing matches. Each byte in the input vector consists of * a left half (4 bits) and a right half (4 bits). The 16 left-halves produce * one vector, which contains all-1s for bytes in which the left half matches * the c_v character (and 0s if it doesn't), while the 16 right-halves produce * the other vector, again with each byte either all-1s or all-0s. * * The expectation is that FM_COUNT_4BIT will be called after this, to * turn these binary values into sums over a series of vectors. The macros * are split up to allow one end or other to be trimmed in the case that * counting is not expected to include the full vector. * * srli(4)+and() : capture the left 4-bit value (need the mask because 16-bit shift leaves garbage in left-4-bit chunks) * and() : capture the right 4-bit value * * cmpeq()x2 : test if both left and right == c. For each, if ==c , value = 11111111 (-1) */ #define FM_MATCH_4BIT(in_v, c_v, out1_v, out2_v) do {\ out1_v = _mm_srli_epi16(in_v, 4);\ out2_v = _mm_and_si128(in_v, cfg->fm_m0f);\ out1_v = _mm_and_si128(out1_v, cfg->fm_m0f);\ \ out1_v = _mm_cmpeq_epi8(out1_v, c_v);\ out2_v = _mm_cmpeq_epi8(out2_v, c_v);\ } while (0) /* Macro for SSE operations that turns a vector of 4-bit character values into * 2 vectors representing matches. Each byte in the input vector consists of * a left half (4 bits) and a right half (4 bits). The 16 left-halves produce * one vector, which contains all-1s for bytes in which the left half is less than * the c_v character (and 0s if it doesn't), while the 16 right-halves produce * the other vector, again with each byte either all-1s or all-0s. * * The expectation is that FM_COUNT_4BIT will be called after this, to * turn these binary values into sums over a series of vectors. The macros * are split up to allow one end or other to be trimmed in the case that * counting is not expected to include the full vector. * * srli(4)+and() : capture the left 4-bit value (need the mask because 16-bit shift leaves garbage in left-4-bit chunks) * and() : capture the right 4-bit value * * cmplt()x2 : test if both left and right < c. For each, if fm_m0f);\ out1_v = _mm_and_si128(out1_v, cfg->fm_m0f);\ \ out1_v = _mm_cmplt_epi8(out1_v, c_v);\ out2_v = _mm_cmplt_epi8(out2_v, c_v);\ } while (0) /* Macro for SSE operations to add occurrence counts to the tally vector counts_v, * in the 4-bits-per-character case * * The expectation is that in[12]_v will contain bytes that are either * 00000000 = 0 * or * 11111111 = -1 * so subtracting the value of the byte is the same as adding 0 or 1. */ #define FM_COUNT_4BIT(in1_v, in2_v, cnts_v) do {\ cnts_v = _mm_subs_epi8(cnts_v, in1_v);\ cnts_v = _mm_subs_epi8(cnts_v, in2_v);\ } while (0) #endif // if defined (p7_IMPL_SSE) /***************************************************************** * 16. P7_PIPELINE: H3's accelerated seq/profile comparison pipeline *****************************************************************/ enum p7_pipemodes_e { p7_SEARCH_SEQS = 0, p7_SCAN_MODELS = 1 }; enum p7_zsetby_e { p7_ZSETBY_NTARGETS = 0, p7_ZSETBY_OPTION = 1, p7_ZSETBY_FILEINFO = 2 }; enum p7_complementarity_e { p7_NOCOMPLEMENT = 0, p7_COMPLEMENT = 1 }; typedef struct p7_pipeline_s { /* Dynamic programming matrices */ P7_OMX *oxf; /* one-row Forward matrix, accel pipe */ P7_OMX *oxb; /* one-row Backward matrix, accel pipe */ P7_OMX *fwd; /* full Fwd matrix for domain envelopes */ P7_OMX *bck; /* full Bck matrix for domain envelopes */ /* Domain postprocessing */ ESL_RANDOMNESS *r; /* random number generator */ int do_reseeding; /* TRUE: reseed for reproducible results */ int do_alignment_score_calc; P7_DOMAINDEF *ddef; /* domain definition workflow */ /* Reporting threshold settings */ int by_E; /* TRUE to cut per-target report off by E */ double E; /* per-target E-value threshold */ double T; /* per-target bit score threshold */ int dom_by_E; /* TRUE to cut domain reporting off by E */ double domE; /* domain E-value threshold */ double domT; /* domain bit score threshold */ int use_bit_cutoffs; /* (FALSE | p7H_GA | p7H_TC | p7H_NC) */ /* Inclusion threshold settings */ int inc_by_E; /* TRUE to threshold inclusion by E-values */ double incE; /* per-target inclusion E-value threshold */ double incT; /* per-target inclusion score threshold */ int incdom_by_E; /* TRUE to threshold domain inclusion by E */ double incdomE; /* per-domain inclusion E-value threshold */ double incdomT; /* per-domain inclusion E-value threshold */ /* Tracking search space sizes for E value calculations */ double Z; /* eff # targs searched (per-target E-val) */ double domZ; /* eff # signific targs (per-domain E-val) */ enum p7_zsetby_e Z_setby; /* how Z was set */ enum p7_zsetby_e domZ_setby; /* how domZ was set */ /* Threshold settings for pipeline */ int do_max; /* TRUE to run in slow/max mode */ double F1; /* MSV filter threshold */ double F2; /* Viterbi filter threshold */ double F3; /* uncorrected Forward filter threshold */ int B1; /* window length for biased-composition modifier - MSV*/ int B2; /* window length for biased-composition modifier - Viterbi*/ int B3; /* window length for biased-composition modifier - Forward*/ int do_biasfilter; /* TRUE to use biased comp HMM filter */ int do_null2; /* TRUE to use null2 score corrections */ /* Accounting. (reduceable in threaded/MPI parallel version) */ uint64_t nmodels; /* # of HMMs searched */ uint64_t nseqs; /* # of sequences searched */ uint64_t nres; /* # of residues searched */ uint64_t nnodes; /* # of model nodes searched */ uint64_t n_past_msv; /* # comparisons that pass MSVFilter() */ uint64_t n_past_bias; /* # comparisons that pass bias filter */ uint64_t n_past_vit; /* # comparisons that pass ViterbiFilter() */ uint64_t n_past_fwd; /* # comparisons that pass ForwardFilter() */ uint64_t n_output; /* # alignments that make it to the final output (used for nhmmer) */ uint64_t pos_past_msv; /* # positions that pass MSVFilter() (used for nhmmer) */ uint64_t pos_past_bias; /* # positions that pass bias filter (used for nhmmer) */ uint64_t pos_past_vit; /* # positions that pass ViterbiFilter() (used for nhmmer) */ uint64_t pos_past_fwd; /* # positions that pass ForwardFilter() (used for nhmmer) */ uint64_t pos_output; /* # positions that make it to the final output (used for nhmmer) */ enum p7_pipemodes_e mode; /* p7_SCAN_MODELS | p7_SEARCH_SEQS */ int long_targets; /* TRUE if the target sequences are expected to be very long (e.g. dna chromosome search in nhmmer) */ int strands; /* p7_STRAND_TOPONLY | p7_STRAND_BOTTOMONLY | p7_STRAND_BOTH */ int W; /* window length for nhmmer scan - essentially maximum length of model that we expect to find*/ int block_length; /* length of overlapping blocks read in the multi-threaded variant (default MAX_RESIDUE_COUNT) */ int show_accessions;/* TRUE to output accessions not names */ int show_alignments;/* TRUE to output alignments (default) */ P7_HMMFILE *hfp; /* COPY of open HMM database (if scan mode) */ char errbuf[eslERRBUFSIZE]; } P7_PIPELINE; /***************************************************************** * 17. P7_BUILDER: pipeline for new HMM construction *****************************************************************/ #define p7_DEFAULT_WINDOW_BETA 1e-7 enum p7_archchoice_e { p7_ARCH_FAST = 0, p7_ARCH_HAND = 1 }; enum p7_wgtchoice_e { p7_WGT_NONE = 0, p7_WGT_GIVEN = 1, p7_WGT_GSC = 2, p7_WGT_PB = 3, p7_WGT_BLOSUM = 4 }; enum p7_effnchoice_e { p7_EFFN_NONE = 0, p7_EFFN_SET = 1, p7_EFFN_CLUST = 2, p7_EFFN_ENTROPY = 3 }; typedef struct p7_builder_s { /* Model architecture */ enum p7_archchoice_e arch_strategy; /* choice of model architecture determination algorithm */ float symfrac; /* residue occ thresh for fast architecture determination */ float fragthresh; /* if L <= fragthresh*alen, seq is called a fragment */ /* Relative sequence weights */ enum p7_wgtchoice_e wgt_strategy; /* choice of relative sequence weighting algorithm */ double wid; /* %id threshold for BLOSUM relative weighting */ /* Effective sequence number */ enum p7_effnchoice_e effn_strategy; /* choice of effective seq # determination algorithm */ double re_target; /* rel entropy target for effn eweighting, if set; or -1.0*/ double esigma; /* min total rel ent parameter for effn entropy weights */ double eid; /* %id threshold for effn clustering */ double eset; /* effective sequence number, if --eset; or -1.0 */ /* Run-to-run variation due to random number generation */ ESL_RANDOMNESS *r; /* RNG for E-value calibration simulations */ int do_reseeding; /* TRUE to reseed, making results reproducible */ /* E-value parameter calibration */ int EmL; /* length of sequences generated for MSV fitting */ int EmN; /* # of sequences generated for MSV fitting */ int EvL; /* length of sequences generated for Viterbi fitting */ int EvN; /* # of sequences generated for Viterbi fitting */ int EfL; /* length of sequences generated for Forward fitting */ int EfN; /* # of sequences generated for Forward fitting */ double Eft; /* tail mass used for Forward fitting */ /* Choice of prior */ P7_PRIOR *prior; /* choice of prior when parameterizing from counts */ int max_insert_len; /* Optional: information used for parameterizing single sequence queries */ ESL_SCOREMATRIX *S; /* residue score matrix */ ESL_DMATRIX *Q; /* Q->mx[a][b] = P(b|a) residue probabilities */ double popen; /* gap open probability */ double pextend; /* gap extend probability */ double w_beta; /*beta value used to compute W (window length) */ int w_len; /*W (window length) explicitly set */ const ESL_ALPHABET *abc; /* COPY of alphabet */ char errbuf[eslERRBUFSIZE]; /* informative message on model construction failure */ } P7_BUILDER; /***************************************************************** * 18. Routines in HMMER's exposed API. *****************************************************************/ /* build.c */ extern int p7_Handmodelmaker(ESL_MSA *msa, P7_BUILDER *bld, P7_HMM **ret_hmm, P7_TRACE ***ret_tr); extern int p7_Fastmodelmaker(ESL_MSA *msa, float symfrac, P7_BUILDER *bld, P7_HMM **ret_hmm, P7_TRACE ***ret_tr); /* emit.c */ extern int p7_CoreEmit (ESL_RANDOMNESS *r, const P7_HMM *hmm, ESL_SQ *sq, P7_TRACE *tr); extern int p7_ProfileEmit(ESL_RANDOMNESS *r, const P7_HMM *hmm, const P7_PROFILE *gm, const P7_BG *bg, ESL_SQ *sq, P7_TRACE *tr); extern int p7_emit_SimpleConsensus(const P7_HMM *hmm, ESL_SQ *sq); extern int p7_emit_FancyConsensus (const P7_HMM *hmm, float min_lower, float min_upper, ESL_SQ *sq); /* errors.c */ extern void p7_Die (char *format, ...); extern void p7_Fail(char *format, ...); /* evalues.c */ extern int p7_Calibrate(P7_HMM *hmm, P7_BUILDER *cfg_b, ESL_RANDOMNESS **byp_rng, P7_BG **byp_bg, P7_PROFILE **byp_gm, P7_OPROFILE **byp_om); extern int p7_Lambda(P7_HMM *hmm, P7_BG *bg, double *ret_lambda); extern int p7_MSVMu (ESL_RANDOMNESS *r, P7_OPROFILE *om, P7_BG *bg, int L, int N, double lambda, double *ret_mmu); extern int p7_ViterbiMu (ESL_RANDOMNESS *r, P7_OPROFILE *om, P7_BG *bg, int L, int N, double lambda, double *ret_vmu); extern int p7_Tau (ESL_RANDOMNESS *r, P7_OPROFILE *om, P7_BG *bg, int L, int N, double lambda, double tailp, double *ret_tau); /* eweight.c */ extern int p7_EntropyWeight(const P7_HMM *hmm, const P7_BG *bg, const P7_PRIOR *pri, double infotarget, double *ret_Neff); /* generic_decoding.c */ extern int p7_GDecoding (const P7_PROFILE *gm, const P7_GMX *fwd, P7_GMX *bck, P7_GMX *pp); extern int p7_GDomainDecoding(const P7_PROFILE *gm, const P7_GMX *fwd, const P7_GMX *bck, P7_DOMAINDEF *ddef); /* generic_fwdback.c */ extern int p7_GForward (const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMX *gx, float *ret_sc); extern int p7_GBackward (const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMX *gx, float *ret_sc); extern int p7_GHybrid (const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMX *gx, float *opt_fwdscore, float *opt_hybscore); /* generic_msv.c */ extern int p7_GMSV (const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMX *gx, float nu, float *ret_sc); extern int p7_GMSV_longtarget(const ESL_DSQ *dsq, int L, P7_PROFILE *gm, P7_GMX *gx, float nu, P7_BG *bg, double P, P7_HMM_WINDOWLIST *windowlist); /* generic_null2.c */ extern int p7_GNull2_ByExpectation(const P7_PROFILE *gm, P7_GMX *pp, float *null2); extern int p7_GNull2_ByTrace (const P7_PROFILE *gm, const P7_TRACE *tr, int zstart, int zend, P7_GMX *wrk, float *null2); /* generic_optacc.c */ extern int p7_GOptimalAccuracy(const P7_PROFILE *gm, const P7_GMX *pp, P7_GMX *gx, float *ret_e); extern int p7_GOATrace (const P7_PROFILE *gm, const P7_GMX *pp, const P7_GMX *gx, P7_TRACE *tr); /* generic_stotrace.c */ extern int p7_GStochasticTrace(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, const P7_GMX *gx, P7_TRACE *tr); /* generic_viterbi.c */ extern int p7_GViterbi (const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMX *gx, float *ret_sc); /* generic_vtrace.c */ extern int p7_GTrace (const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, const P7_GMX *gx, P7_TRACE *tr); extern int p7_GViterbi_longtarget(const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMX *gx, float filtersc, double P, P7_HMM_WINDOWLIST *windowlist); /* heatmap.c (evolving now, intend to move this to Easel in the future) */ extern double dmx_upper_max(ESL_DMATRIX *D); extern double dmx_upper_min(ESL_DMATRIX *D); extern double dmx_upper_element_sum(ESL_DMATRIX *D); extern double dmx_upper_norm(ESL_DMATRIX *D); extern int dmx_Visualize(FILE *fp, ESL_DMATRIX *D, double min, double max); /* hmmdutils.c */ extern void p7_openlog(const char *ident, int option, int facility); extern void p7_syslog(int priority, const char *format, ...); extern void p7_closelog(void); /* hmmlogo.c */ extern float hmmlogo_maxHeight (P7_BG *bg); extern int hmmlogo_RelativeEntropy_all (P7_HMM *hmm, P7_BG *bg, float *rel_ents, float **probs, float **heights ); extern int hmmlogo_RelativeEntropy_above_bg (P7_HMM *hmm, P7_BG *bg, float *rel_ents, float **probs, float **heights ); extern int hmmlogo_ScoreHeights (P7_HMM *hmm, P7_BG *bg, float **heights ); extern int hmmlogo_IndelValues (P7_HMM *hmm, float *insert_P, float *insert_expL, float *delete_P ); /* hmmpgmd2msa.c */ extern int hmmpgmd2msa(void *data, P7_HMM *hmm, ESL_SQ *qsq, int *incl, int incl_size, int *excl, int excl_size, ESL_MSA **ret_msa); /* island.c */ extern int p7_island_Viterbi(ESL_DSQ *dsq, int L, P7_PROFILE *gm, P7_GMX *mx, ESL_HISTOGRAM *h); /* h2_io.c */ extern int p7_h2io_WriteASCII(FILE *fp, P7_HMM *hmm); /* hmmer.c */ extern void p7_banner(FILE *fp, char *progname, char *banner); extern ESL_GETOPTS *p7_CreateDefaultApp(ESL_OPTIONS *options, int nargs, int argc, char **argv, char *banner, char *usage); extern int p7_AminoFrequencies(float *f); /* logsum.c */ extern int p7_FLogsumInit(void); extern float p7_FLogsum(float a, float b); extern float p7_FLogsumError(float a, float b); extern int p7_ILogsumInit(void); extern int p7_ILogsum(int s1, int s2); /* modelconfig.c */ extern int p7_ProfileConfig(const P7_HMM *hmm, const P7_BG *bg, P7_PROFILE *gm, int L, int mode); extern int p7_ReconfigLength (P7_PROFILE *gm, int L); extern int p7_ReconfigMultihit(P7_PROFILE *gm, int L); extern int p7_ReconfigUnihit (P7_PROFILE *gm, int L); /* modelstats.c */ extern double p7_MeanMatchInfo (const P7_HMM *hmm, const P7_BG *bg); extern double p7_MeanMatchEntropy (const P7_HMM *hmm); extern double p7_MeanMatchRelativeEntropy(const P7_HMM *hmm, const P7_BG *bg); extern double p7_MeanForwardScore (const P7_HMM *hmm, const P7_BG *bg); extern int p7_MeanPositionRelativeEntropy(const P7_HMM *hmm, const P7_BG *bg, double *ret_entropy); extern int p7_hmm_CompositionKLDist(P7_HMM *hmm, P7_BG *bg, float *ret_KL, float **opt_avp); /* mpisupport.c */ #ifdef HAVE_MPI extern int p7_hmm_MPISend(P7_HMM *hmm, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc); extern int p7_hmm_MPIPackSize(P7_HMM *hmm, MPI_Comm comm, int *ret_n); extern int p7_hmm_MPIPack(P7_HMM *hmm, char *buf, int n, int *position, MPI_Comm comm); extern int p7_hmm_MPIUnpack(char *buf, int n, int *pos, MPI_Comm comm, ESL_ALPHABET **abc, P7_HMM **ret_hmm); extern int p7_hmm_MPIRecv(int source, int tag, MPI_Comm comm, char **buf, int *nalloc, ESL_ALPHABET **abc, P7_HMM **ret_hmm); extern int p7_profile_MPISend(P7_PROFILE *gm, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc); extern int p7_profile_MPIRecv(int source, int tag, MPI_Comm comm, const ESL_ALPHABET *abc, const P7_BG *bg, char **buf, int *nalloc, P7_PROFILE **ret_gm); extern int p7_pipeline_MPISend(P7_PIPELINE *pli, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc); extern int p7_pipeline_MPIRecv(int source, int tag, MPI_Comm comm, char **buf, int *nalloc, ESL_GETOPTS *go, P7_PIPELINE **ret_pli); extern int p7_tophits_MPISend(P7_TOPHITS *th, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc); extern int p7_tophits_MPIRecv(int source, int tag, MPI_Comm comm, char **buf, int *nalloc, P7_TOPHITS **ret_th); extern int p7_oprofile_MPISend(P7_OPROFILE *om, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc); extern int p7_oprofile_MPIPackSize(P7_OPROFILE *om, MPI_Comm comm, int *ret_n); extern int p7_oprofile_MPIPack(P7_OPROFILE *om, char *buf, int n, int *pos, MPI_Comm comm); extern int p7_oprofile_MPIUnpack(char *buf, int n, int *pos, MPI_Comm comm, ESL_ALPHABET **abc, P7_OPROFILE **ret_om); extern int p7_oprofile_MPIRecv(int source, int tag, MPI_Comm comm, char **buf, int *nalloc, ESL_ALPHABET **abc, P7_OPROFILE **ret_om); #endif /*HAVE_MPI*/ /* tracealign.c */ extern int p7_tracealign_Seqs(ESL_SQ **sq, P7_TRACE **tr, int nseq, int M, int optflags, P7_HMM *hmm, ESL_MSA **ret_msa); extern int p7_tracealign_MSA (const ESL_MSA *premsa, P7_TRACE **tr, int M, int optflags, ESL_MSA **ret_postmsa); extern int p7_tracealign_computeTraces(P7_HMM *hmm, ESL_SQ **sq, int offset, int N, P7_TRACE **tr); extern int p7_tracealign_getMSAandStats(P7_HMM *hmm, ESL_SQ **sq, int N, ESL_MSA **ret_msa, float **ret_pp, float **ret_relent, float **ret_scores ); /* p7_alidisplay.c */ extern P7_ALIDISPLAY *p7_alidisplay_Create(const P7_TRACE *tr, int which, const P7_OPROFILE *om, const ESL_SQ *sq); extern P7_ALIDISPLAY *p7_alidisplay_Clone(const P7_ALIDISPLAY *ad); extern size_t p7_alidisplay_Sizeof(const P7_ALIDISPLAY *ad); extern int p7_alidisplay_Serialize(P7_ALIDISPLAY *ad); extern int p7_alidisplay_Deserialize(P7_ALIDISPLAY *ad); extern void p7_alidisplay_Destroy(P7_ALIDISPLAY *ad); extern char p7_alidisplay_EncodePostProb(float p); extern float p7_alidisplay_DecodePostProb(char pc); extern char p7_alidisplay_EncodeAliPostProb(float p, float hi, float med, float lo); extern int p7_alidisplay_Print(FILE *fp, P7_ALIDISPLAY *ad, int min_aliwidth, int linewidth, int show_accessions); extern int p7_alidisplay_Backconvert(const P7_ALIDISPLAY *ad, const ESL_ALPHABET *abc, ESL_SQ **ret_sq, P7_TRACE **ret_tr); extern int p7_alidisplay_Dump(FILE *fp, const P7_ALIDISPLAY *ad); extern int p7_alidisplay_Compare(const P7_ALIDISPLAY *ad1, const P7_ALIDISPLAY *ad2); /* p7_bg.c */ extern P7_BG *p7_bg_Create(const ESL_ALPHABET *abc); extern P7_BG *p7_bg_CreateUniform(const ESL_ALPHABET *abc); extern P7_BG *p7_bg_Clone(const P7_BG *bg); extern int p7_bg_Dump(FILE *ofp, const P7_BG *bg); extern void p7_bg_Destroy(P7_BG *bg); extern int p7_bg_SetLength(P7_BG *bg, int L); extern int p7_bg_NullOne(const P7_BG *bg, const ESL_DSQ *dsq, int L, float *ret_sc); extern int p7_bg_Read(char *bgfile, P7_BG *bg, char *errbuf); extern int p7_bg_Write(FILE *fp, P7_BG *bg); extern int p7_bg_SetFilter (P7_BG *bg, int M, const float *compo); extern int p7_bg_FilterScore(P7_BG *bg, const ESL_DSQ *dsq, int L, float *ret_sc); /* p7_builder.c */ extern P7_BUILDER *p7_builder_Create(const ESL_GETOPTS *go, const ESL_ALPHABET *abc); extern int p7_builder_LoadScoreSystem(P7_BUILDER *bld, const char *matrix, double popen, double pextend, P7_BG *bg); extern int p7_builder_SetScoreSystem (P7_BUILDER *bld, const char *mxfile, const char *env, double popen, double pextend, P7_BG *bg); extern void p7_builder_Destroy(P7_BUILDER *bld); extern int p7_Builder (P7_BUILDER *bld, ESL_MSA *msa, P7_BG *bg, P7_HMM **opt_hmm, P7_TRACE ***opt_trarr, P7_PROFILE **opt_gm, P7_OPROFILE **opt_om, ESL_MSA **opt_postmsa); extern int p7_SingleBuilder(P7_BUILDER *bld, ESL_SQ *sq, P7_BG *bg, P7_HMM **opt_hmm, P7_TRACE **opt_tr, P7_PROFILE **opt_gm, P7_OPROFILE **opt_om); extern int p7_Builder_MaxLength (P7_HMM *hmm, double emit_thresh); /* p7_domaindef.c */ extern P7_DOMAINDEF *p7_domaindef_Create (ESL_RANDOMNESS *r); extern int p7_domaindef_Fetch (P7_DOMAINDEF *ddef, int which, int *opt_i, int *opt_j, float *opt_sc, P7_ALIDISPLAY **opt_ad); extern int p7_domaindef_GrowTo (P7_DOMAINDEF *ddef, int L); extern int p7_domaindef_Reuse (P7_DOMAINDEF *ddef); extern int p7_domaindef_DumpPosteriors(FILE *ofp, P7_DOMAINDEF *ddef); extern void p7_domaindef_Destroy(P7_DOMAINDEF *ddef); extern int p7_domaindef_ByViterbi (P7_PROFILE *gm, const ESL_SQ *sq, P7_GMX *gx1, P7_GMX *gx2, P7_DOMAINDEF *ddef); extern int p7_domaindef_ByPosteriorHeuristics(const ESL_SQ *sq, P7_OPROFILE *om, P7_OMX *oxf, P7_OMX *oxb, P7_OMX *fwd, P7_OMX *bck, P7_DOMAINDEF *ddef, P7_BG *bg, int long_target, P7_BG *bg_tmp, float *scores_arr, float *fwd_emissions_arr); /* p7_gmx.c */ extern P7_GMX *p7_gmx_Create (int allocM, int allocL); extern int p7_gmx_GrowTo (P7_GMX *gx, int allocM, int allocL); extern size_t p7_gmx_Sizeof (P7_GMX *gx); extern int p7_gmx_Reuse (P7_GMX *gx); extern void p7_gmx_Destroy(P7_GMX *gx); extern int p7_gmx_Compare(P7_GMX *gx1, P7_GMX *gx2, float tolerance); extern int p7_gmx_Dump(FILE *fp, P7_GMX *gx, int flags); extern int p7_gmx_DumpWindow(FILE *fp, P7_GMX *gx, int istart, int iend, int kstart, int kend, int show_specials); /* p7_hmm.c */ /* 1. The P7_HMM object: allocation, initialization, destruction. */ extern P7_HMM *p7_hmm_Create(int M, const ESL_ALPHABET *abc); extern P7_HMM *p7_hmm_CreateShell(void); extern int p7_hmm_CreateBody(P7_HMM *hmm, int M, const ESL_ALPHABET *abc); extern void p7_hmm_Destroy(P7_HMM *hmm); extern int p7_hmm_CopyParameters(const P7_HMM *src, P7_HMM *dest); extern P7_HMM *p7_hmm_Clone(const P7_HMM *hmm); extern int p7_hmm_Zero(P7_HMM *hmm); extern char p7_hmm_EncodeStatetype(char *typestring); extern char *p7_hmm_DecodeStatetype(char st); /* 2. Convenience routines for setting fields in an HMM. */ extern int p7_hmm_SetName (P7_HMM *hmm, char *name); extern int p7_hmm_SetAccession (P7_HMM *hmm, char *acc); extern int p7_hmm_SetDescription(P7_HMM *hmm, char *desc); extern int p7_hmm_AppendComlog (P7_HMM *hmm, int argc, char **argv); extern int p7_hmm_SetCtime (P7_HMM *hmm); extern int p7_hmm_SetComposition(P7_HMM *hmm); extern int p7_hmm_SetConsensus (P7_HMM *hmm, ESL_SQ *sq); /* 3. Renormalization and rescaling counts in core HMMs. */ extern int p7_hmm_Scale (P7_HMM *hmm, double scale); extern int p7_hmm_Renormalize(P7_HMM *hmm); /* 4. Debugging and development code. */ extern int p7_hmm_Dump(FILE *fp, P7_HMM *hmm); extern int p7_hmm_Sample (ESL_RANDOMNESS *r, int M, const ESL_ALPHABET *abc, P7_HMM **ret_hmm); extern int p7_hmm_SampleUngapped (ESL_RANDOMNESS *r, int M, const ESL_ALPHABET *abc, P7_HMM **ret_hmm); extern int p7_hmm_SampleEnumerable(ESL_RANDOMNESS *r, int M, const ESL_ALPHABET *abc, P7_HMM **ret_hmm); extern int p7_hmm_SampleUniform (ESL_RANDOMNESS *r, int M, const ESL_ALPHABET *abc, float tmi, float tii, float tmd, float tdd, P7_HMM **ret_hmm); extern int p7_hmm_Compare(P7_HMM *h1, P7_HMM *h2, float tol); extern int p7_hmm_Validate(P7_HMM *hmm, char *errbuf, float tol); /* 5. Other routines in the API */ extern int p7_hmm_CalculateOccupancy(const P7_HMM *hmm, float *mocc, float *iocc); /* p7_hmmfile.c */ extern int p7_hmmfile_OpenE (char *filename, char *env, P7_HMMFILE **ret_hfp, char *errbuf); extern int p7_hmmfile_OpenENoDB(char *filename, char *env, P7_HMMFILE **ret_hfp, char *errbuf); extern int p7_hmmfile_Open (char *filename, char *env, P7_HMMFILE **ret_hfp); /* deprecated */ extern int p7_hmmfile_OpenNoDB (char *filename, char *env, P7_HMMFILE **ret_hfp); /* deprecated */ extern int p7_hmmfile_OpenBuffer(char *buffer, int size, P7_HMMFILE **ret_hfp); extern void p7_hmmfile_Close(P7_HMMFILE *hfp); #ifdef HMMER_THREADS extern int p7_hmmfile_CreateLock(P7_HMMFILE *hfp); #endif extern int p7_hmmfile_WriteBinary(FILE *fp, int format, P7_HMM *hmm); extern int p7_hmmfile_WriteASCII (FILE *fp, int format, P7_HMM *hmm); extern int p7_hmmfile_WriteToString (char **s, int format, P7_HMM *hmm); extern int p7_hmmfile_Read(P7_HMMFILE *hfp, ESL_ALPHABET **ret_abc, P7_HMM **opt_hmm); extern int p7_hmmfile_PositionByKey(P7_HMMFILE *hfp, const char *key); extern int p7_hmmfile_Position(P7_HMMFILE *hfp, const off_t offset); /* p7_hmmwindow.c */ int p7_hmmwindow_init (P7_HMM_WINDOWLIST *list); P7_HMM_WINDOW *p7_hmmwindow_new (P7_HMM_WINDOWLIST *list, uint32_t id, uint32_t pos, uint32_t fm_pos, uint16_t k, uint32_t length, float score, uint8_t complementarity, uint32_t target_len); /* p7_msvdata.c */ extern P7_SCOREDATA *p7_hmm_ScoreDataCreate(P7_OPROFILE *om, P7_PROFILE *gm ); extern P7_SCOREDATA *p7_hmm_ScoreDataClone(P7_SCOREDATA *src, int K); extern int p7_hmm_ScoreDataComputeRest(P7_OPROFILE *om, P7_SCOREDATA *data ); extern void p7_hmm_ScoreDataDestroy( P7_SCOREDATA *data ); extern int p7_hmm_initWindows (P7_HMM_WINDOWLIST *list); extern P7_HMM_WINDOW *p7_hmm_newWindow (P7_HMM_WINDOWLIST *list, uint32_t id, uint32_t pos, uint32_t fm_pos, uint16_t k, uint32_t length, float score, uint8_t complementarity); /* p7_null3.c */ extern void p7_null3_score(const ESL_ALPHABET *abc, const ESL_DSQ *dsq, P7_TRACE *tr, int start, int stop, P7_BG *bg, float *ret_sc); extern void p7_null3_windowed_score(const ESL_ALPHABET *abc, const ESL_DSQ *dsq, int start, int stop, P7_BG *bg, float *ret_sc); /* p7_pipeline.c */ extern P7_PIPELINE *p7_pipeline_Create(ESL_GETOPTS *go, int M_hint, int L_hint, int long_targets, enum p7_pipemodes_e mode); extern int p7_pipeline_Reuse (P7_PIPELINE *pli); extern void p7_pipeline_Destroy(P7_PIPELINE *pli); extern int p7_pipeline_Merge (P7_PIPELINE *p1, P7_PIPELINE *p2); extern int p7_pli_ExtendAndMergeWindows (P7_OPROFILE *om, const P7_SCOREDATA *msvdata, P7_HMM_WINDOWLIST *windowlist, float pct_overlap); extern int p7_pli_TargetReportable (P7_PIPELINE *pli, float score, double lnP); extern int p7_pli_DomainReportable (P7_PIPELINE *pli, float dom_score, double lnP); extern int p7_pli_TargetIncludable (P7_PIPELINE *pli, float score, double lnP); extern int p7_pli_DomainIncludable (P7_PIPELINE *pli, float dom_score, double lnP); extern int p7_pli_NewModel (P7_PIPELINE *pli, const P7_OPROFILE *om, P7_BG *bg); extern int p7_pli_NewModelThresholds(P7_PIPELINE *pli, const P7_OPROFILE *om); extern int p7_pli_NewSeq (P7_PIPELINE *pli, const ESL_SQ *sq); extern int p7_Pipeline (P7_PIPELINE *pli, P7_OPROFILE *om, P7_BG *bg, const ESL_SQ *sq, P7_TOPHITS *th); extern int p7_Pipeline_LongTarget (P7_PIPELINE *pli, P7_OPROFILE *om, P7_SCOREDATA *data, P7_BG *bg, P7_TOPHITS *hitlist, int64_t seqidx, const ESL_SQ *sq, int complementarity, const FM_DATA *fmf, const FM_DATA *fmb, FM_CFG *fm_cfg /* , ESL_STOPWATCH *ssv_watch_master , ESL_STOPWATCH *postssv_watch_master , ESL_STOPWATCH *watch_slave */ ); extern int p7_pli_Statistics(FILE *ofp, P7_PIPELINE *pli, ESL_STOPWATCH *w); /* p7_prior.c */ extern P7_PRIOR *p7_prior_CreateAmino(void); extern P7_PRIOR *p7_prior_CreateNucleic(void); extern P7_PRIOR *p7_prior_CreateLaplace(const ESL_ALPHABET *abc); extern void p7_prior_Destroy(P7_PRIOR *pri); extern int p7_ParameterEstimation(P7_HMM *hmm, const P7_PRIOR *pri); /* p7_profile.c */ extern P7_PROFILE *p7_profile_Create(int M, const ESL_ALPHABET *abc); extern P7_PROFILE *p7_profile_Clone(const P7_PROFILE *gm); extern int p7_profile_Copy(const P7_PROFILE *src, P7_PROFILE *dst); extern int p7_profile_SetNullEmissions(P7_PROFILE *gm); extern int p7_profile_Reuse(P7_PROFILE *gm); extern size_t p7_profile_Sizeof(P7_PROFILE *gm); extern void p7_profile_Destroy(P7_PROFILE *gm); extern int p7_profile_IsLocal(const P7_PROFILE *gm); extern int p7_profile_IsMultihit(const P7_PROFILE *gm); extern int p7_profile_GetT(const P7_PROFILE *gm, char st1, int k1, char st2, int k2, float *ret_tsc); extern int p7_profile_Validate(const P7_PROFILE *gm, char *errbuf, float tol); extern int p7_profile_Compare(P7_PROFILE *gm1, P7_PROFILE *gm2, float tol); /* p7_spensemble.c */ P7_SPENSEMBLE *p7_spensemble_Create(int init_n, int init_epc, int init_sigc); extern int p7_spensemble_Reuse(P7_SPENSEMBLE *sp); extern int p7_spensemble_Add(P7_SPENSEMBLE *sp, int sampleidx, int i, int j, int k, int m); extern int p7_spensemble_Cluster(P7_SPENSEMBLE *sp, float min_overlap, int of_smaller, int max_diagdiff, float min_posterior, float min_endpointp, int *ret_nclusters); extern int p7_spensemble_GetClusterCoords(P7_SPENSEMBLE *sp, int which, int *ret_i, int *ret_j, int *ret_k, int *ret_m, float *ret_p); extern void p7_spensemble_Destroy(P7_SPENSEMBLE *sp); /* p7_tophits.c */ extern P7_TOPHITS *p7_tophits_Create(void); extern int p7_tophits_Grow(P7_TOPHITS *h); extern int p7_tophits_CreateNextHit(P7_TOPHITS *h, P7_HIT **ret_hit); extern int p7_tophits_Add(P7_TOPHITS *h, char *name, char *acc, char *desc, double sortkey, float score, double lnP, float mothersc, double mother_lnP, int sqfrom, int sqto, int sqlen, int hmmfrom, int hmmto, int hmmlen, int domidx, int ndom, P7_ALIDISPLAY *ali); extern int p7_tophits_SortBySortkey(P7_TOPHITS *h); extern int p7_tophits_SortBySeqidxAndAlipos(P7_TOPHITS *h); extern int p7_tophits_SortByModelnameAndAlipos(P7_TOPHITS *h); extern int p7_tophits_Merge(P7_TOPHITS *h1, P7_TOPHITS *h2); extern int p7_tophits_GetMaxPositionLength(P7_TOPHITS *h); extern int p7_tophits_GetMaxNameLength(P7_TOPHITS *h); extern int p7_tophits_GetMaxAccessionLength(P7_TOPHITS *h); extern int p7_tophits_GetMaxShownLength(P7_TOPHITS *h); extern void p7_tophits_Destroy(P7_TOPHITS *h); extern int p7_tophits_ComputeNhmmerEvalues(P7_TOPHITS *th, double N, int W); extern int p7_tophits_RemoveDuplicates(P7_TOPHITS *th, int using_bit_cutoffs); extern int p7_tophits_Threshold(P7_TOPHITS *th, P7_PIPELINE *pli); extern int p7_tophits_CompareRanking(P7_TOPHITS *th, ESL_KEYHASH *kh, int *opt_nnew); extern int p7_tophits_Targets(FILE *ofp, P7_TOPHITS *th, P7_PIPELINE *pli, int textw); extern int p7_tophits_Domains(FILE *ofp, P7_TOPHITS *th, P7_PIPELINE *pli, int textw); extern int p7_tophits_Alignment(const P7_TOPHITS *th, const ESL_ALPHABET *abc, ESL_SQ **inc_sqarr, P7_TRACE **inc_trarr, int inc_n, int optflags, ESL_MSA **ret_msa); extern int p7_tophits_TabularTargets(FILE *ofp, char *qname, char *qacc, P7_TOPHITS *th, P7_PIPELINE *pli, int show_header); extern int p7_tophits_TabularDomains(FILE *ofp, char *qname, char *qacc, P7_TOPHITS *th, P7_PIPELINE *pli, int show_header); extern int p7_tophits_TabularXfam(FILE *ofp, char *qname, char *qacc, P7_TOPHITS *th, P7_PIPELINE *pli); extern int p7_tophits_TabularTail(FILE *ofp, const char *progname, enum p7_pipemodes_e pipemode, const char *qfile, const char *tfile, const ESL_GETOPTS *go); extern int p7_tophits_AliScores(FILE *ofp, char *qname, P7_TOPHITS *th ); /* p7_trace.c */ extern P7_TRACE *p7_trace_Create(void); extern P7_TRACE *p7_trace_CreateWithPP(void); extern int p7_trace_Reuse(P7_TRACE *tr); extern int p7_trace_Grow(P7_TRACE *tr); extern int p7_trace_GrowIndex(P7_TRACE *tr); extern int p7_trace_GrowTo(P7_TRACE *tr, int N); extern int p7_trace_GrowIndexTo(P7_TRACE *tr, int ndom); extern void p7_trace_Destroy(P7_TRACE *tr); extern void p7_trace_DestroyArray(P7_TRACE **tr, int N); extern int p7_trace_GetDomainCount (const P7_TRACE *tr, int *ret_ndom); extern int p7_trace_GetStateUseCounts(const P7_TRACE *tr, int *counts); extern int p7_trace_GetDomainCoords (const P7_TRACE *tr, int which, int *ret_i1, int *ret_i2, int *ret_k1, int *ret_k2); extern int p7_trace_Validate(const P7_TRACE *tr, const ESL_ALPHABET *abc, const ESL_DSQ *dsq, char *errbuf); extern int p7_trace_Dump(FILE *fp, const P7_TRACE *tr, const P7_PROFILE *gm, const ESL_DSQ *dsq); extern int p7_trace_Compare(P7_TRACE *tr1, P7_TRACE *tr2, float pptol); extern int p7_trace_Score(P7_TRACE *tr, ESL_DSQ *dsq, P7_PROFILE *gm, float *ret_sc); extern int p7_trace_SetPP(P7_TRACE *tr, const P7_GMX *pp); extern float p7_trace_GetExpectedAccuracy(const P7_TRACE *tr); extern int p7_trace_Append(P7_TRACE *tr, char st, int k, int i); extern int p7_trace_AppendWithPP(P7_TRACE *tr, char st, int k, int i, float pp); extern int p7_trace_Reverse(P7_TRACE *tr); extern int p7_trace_Index(P7_TRACE *tr); extern int p7_trace_FauxFromMSA(ESL_MSA *msa, int *matassign, int optflags, P7_TRACE **tr); extern int p7_trace_Doctor(P7_TRACE *tr, int *opt_ndi, int *opt_nid); extern int p7_trace_Count(P7_HMM *hmm, ESL_DSQ *dsq, float wt, P7_TRACE *tr); /* seqmodel.c */ extern int p7_Seqmodel(const ESL_ALPHABET *abc, ESL_DSQ *dsq, int M, char *name, ESL_DMATRIX *P, float *f, double popen, double pextend, P7_HMM **ret_hmm); /* fm_alphabet.c */ extern int fm_alphabetCreate (FM_METADATA *meta, uint8_t *alph_bits); extern int fm_alphabetDestroy (FM_METADATA *meta); extern int fm_reverseString (char *str, int N); extern int fm_getComplement (char c, uint8_t alph_type); /* fm_general.c */ extern uint64_t fm_computeSequenceOffset (const FM_DATA *fms, const FM_METADATA *meta, int block, uint64_t pos); extern int fm_getOriginalPosition (const FM_DATA *fms, const FM_METADATA *meta, int fm_id, int length, int direction, uint64_t fm_pos, uint32_t *segment_id, uint64_t *seg_pos); extern int fm_readFMmeta( FM_METADATA *meta); extern int fm_FM_read( FM_DATA *fm, FM_METADATA *meta, int getAll ); extern void fm_FM_destroy ( FM_DATA *fm, int isMainFM); extern uint8_t fm_getChar(uint8_t alph_type, int j, const uint8_t *B ); extern int fm_getSARangeReverse( const FM_DATA *fm, FM_CFG *cfg, char *query, char *inv_alph, FM_INTERVAL *interval); extern int fm_getSARangeForward( const FM_DATA *fm, FM_CFG *cfg, char *query, char *inv_alph, FM_INTERVAL *interval); extern int fm_configAlloc(FM_CFG **cfg); extern int fm_configDestroy(FM_CFG *cfg); extern int fm_metaDestroy(FM_METADATA *meta ); extern int fm_updateIntervalForward( const FM_DATA *fm, const FM_CFG *cfg, char c, FM_INTERVAL *interval_f, FM_INTERVAL *interval_bk); extern int fm_updateIntervalReverse( const FM_DATA *fm, const FM_CFG *cfg, char c, FM_INTERVAL *interval); extern int fm_initSeeds (FM_DIAGLIST *list) ; extern FM_DIAG * fm_newSeed (FM_DIAGLIST *list); extern int fm_initAmbiguityList (FM_AMBIGLIST *list); extern int fm_addAmbiguityRange (FM_AMBIGLIST *list, uint32_t start, uint32_t stop); extern int fm_convertRange2DSQ(const FM_DATA *fm, const FM_METADATA *meta, uint64_t first, int length, int complementarity, ESL_SQ *sq, int fix_ambiguities ); extern int fm_initConfigGeneric( FM_CFG *cfg, ESL_GETOPTS *go); /* fm_ssv.c */ extern int p7_SSVFM_longlarget( P7_OPROFILE *om, float nu, P7_BG *bg, double F1, const FM_DATA *fmf, const FM_DATA *fmb, FM_CFG *fm_cfg, const P7_SCOREDATA *ssvdata, int strands, P7_HMM_WINDOWLIST *windowlist); /* fm_sse.c */ extern int fm_configInit (FM_CFG *cfg, ESL_GETOPTS *go); extern int fm_getOccCount (const FM_DATA *fm, const FM_CFG *cfg, int pos, uint8_t c); extern int fm_getOccCountLT (const FM_DATA *fm, const FM_CFG *cfg, int pos, uint8_t c, uint32_t *cnteq, uint32_t *cntlt); #endif /*P7_HMMERH_INCLUDED*/ /************************************************************ * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: hmmer.h 4771 2015-02-25 06:53:51Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/hmmer.h $ ************************************************************/ hmmer-3.1b2/src/build.c0000664361611702660230000006215412473612612014331 0ustar wheelerteddy/* Construction of new HMMs from multiple alignments. * * Two versions: * p7_Handmodelmaker() -- use #=RF annotation to indicate match columns * p7_Fastmodelmaker() -- Krogh/Haussler heuristic * * The maximum likelihood model construction algorithm that was in previous * HMMER versions has been deprecated, at least for the moment. * * The meat of the model construction code is in matassign2hmm(). * The two model construction strategies simply label which columns * are supposed to be match states, and then hand this info to * matassign2hmm(). * * * Contents: * 1. Exported API: model construction routines. * 2. Private functions used in constructing models. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license. */ #include "p7_config.h" #include #include "easel.h" #include "esl_alphabet.h" #include "esl_msa.h" #include "esl_msafile.h" #include "hmmer.h" static int do_modelmask( ESL_MSA *msa); static int matassign2hmm(ESL_MSA *msa, int *matassign, P7_HMM **ret_hmm, P7_TRACE ***opt_tr); static int annotate_model(P7_HMM *hmm, int *matassign, ESL_MSA *msa); /***************************************************************** * 1. Exported API: model construction routines. *****************************************************************/ /* Function: p7_Handmodelmaker() * * Purpose: Manual model construction. * Construct an HMM from a digital alignment, where the * <#=RF> line of the alignment file is used to indicate the * columns assigned to matches vs. inserts. * * The must be in digital mode, and it must have * a reference annotation line. * * NOTE: will slightly revise the * alignment if necessary, if the assignment of columns * implies DI and ID transitions. * * Returns both the HMM in counts form (ready for applying * Dirichlet priors as the next step), and fake tracebacks * for each aligned sequence. * * Models must have at least one node, so if the defined * no consensus columns, a error is returned. * * Args: msa - multiple sequence alignment * bld - holds information on regions requiring masking, optionally NULL -> no masking * ret_hmm - RETURN: counts-form HMM * opt_tr - optRETURN: array of tracebacks for aseq's * * Return: on success. and are allocated * here, and must be free'd by caller. * * Returns if no consensus columns were annotated; * in this case, and are returned NULL. * * Returns if the doesn't have a reference * annotation line. * * Throws: on allocation failure. Throws if the * isn't in digital mode. */ int p7_Handmodelmaker(ESL_MSA *msa, P7_BUILDER *bld, P7_HMM **ret_hmm, P7_TRACE ***opt_tr) { int status; int *matassign = NULL; /* MAT state assignments if 1; 1..alen */ int apos; /* counter for aligned columns */ if (! (msa->flags & eslMSA_DIGITAL)) ESL_XEXCEPTION(eslEINVAL, "need a digital msa"); if (msa->rf == NULL) return eslEFORMAT; ESL_ALLOC(matassign, sizeof(int) * (msa->alen+1)); /* Watch for off-by-one. rf is [0..alen-1]; matassign is [1..alen] */ for (apos = 1; apos <= msa->alen; apos++) matassign[apos] = (esl_abc_CIsGap(msa->abc, msa->rf[apos-1])? FALSE : TRUE); /* matassign2hmm leaves ret_hmm, opt_tr in their proper state: */ if ((status = matassign2hmm(msa, matassign, ret_hmm, opt_tr)) != eslOK) goto ERROR; free(matassign); return eslOK; ERROR: if (matassign != NULL) free(matassign); return status; } /* Function: p7_Fastmodelmaker() * * Purpose: Heuristic model construction. * Construct an HMM from an alignment by a simple rule, * based on the fractional occupancy of each columns w/ * residues vs gaps. Any column w/ a fractional * occupancy of $\geq$ is assigned as a MATCH column; * for instance, if thresh = 0.5, columns w/ $\geq$ 50\% * residues are assigned to match... roughly speaking. * * "Roughly speaking" because sequences may be weighted * in the input , and because missing data symbols are * ignored, in order to deal with sequence fragments. * * The must be in digital mode. * * If the caller wants to designate any sequences as * fragments, it does so by converting all N-terminal and * C-terminal flanking gap symbols to missing data symbols. * * NOTE: p7_Fastmodelmaker() will slightly revise the * alignment if the assignment of columns implies * DI and ID transitions. * * Returns the HMM in counts form (ready for applying Dirichlet * priors as the next step). Also returns fake traceback * for each training sequence. * * Models must have at least one node, so if the defined * no consensus columns, a error is returned. * * Args: msa - multiple sequence alignment * symfrac - threshold for residue occupancy; >= assigns MATCH * bld - holds information on regions requiring masking, optionally NULL -> no masking * ret_hmm - RETURN: counts-form HMM * opt_tr - optRETURN: array of tracebacks for aseq's * * Return: on success. ret_hmm and opt_tr allocated here, * and must be free'd by the caller (FreeTrace(tr[i]), free(tr), * FreeHMM(hmm)). * * Returns if no consensus columns were annotated; * in this case, and are returned NULL. * * Throws: on allocation failure; if the * isn't in digital mode. */ int p7_Fastmodelmaker(ESL_MSA *msa, float symfrac, P7_BUILDER *bld, P7_HMM **ret_hmm, P7_TRACE ***opt_tr) { int status; /* return status flag */ int *matassign = NULL; /* MAT state assignments if 1; 1..alen */ int idx; /* counter over sequences */ int apos; /* counter for aligned columns */ float r; /* weighted residue count */ float totwgt; /* weighted residue+gap count */ if (! (msa->flags & eslMSA_DIGITAL)) ESL_XEXCEPTION(eslEINVAL, "need digital MSA"); /* Allocations: matassign is 1..alen array of bit flags. */ ESL_ALLOC(matassign, sizeof(int) * (msa->alen+1)); /* Determine weighted sym freq in each column, set matassign[] accordingly. */ for (apos = 1; apos <= msa->alen; apos++) { r = totwgt = 0.; for (idx = 0; idx < msa->nseq; idx++) { if (esl_abc_XIsResidue(msa->abc, msa->ax[idx][apos])) { r += msa->wgt[idx]; totwgt += msa->wgt[idx]; } else if (esl_abc_XIsGap(msa->abc, msa->ax[idx][apos])) { totwgt += msa->wgt[idx]; } else if (esl_abc_XIsMissing(msa->abc, msa->ax[idx][apos])) continue; } if (r > 0. && r / totwgt >= symfrac) matassign[apos] = TRUE; else matassign[apos] = FALSE; } /* Once we have matassign calculated, modelmakers behave * the same; matassign2hmm() does this stuff (traceback construction, * trace counting) and sets up ret_hmm and opt_tr. */ if ((status = matassign2hmm(msa, matassign, ret_hmm, opt_tr)) != eslOK) { fprintf (stderr, "hmm construction error during trace counting\n"); goto ERROR; } free(matassign); return eslOK; ERROR: if (matassign != NULL) free(matassign); return status; } /*-------------------- end, exported API -------------------------*/ /***************************************************************** * 2. Private functions used in constructing models. *****************************************************************/ /* Function: do_modelmask() * * Purpose: If the given has a MM CS line, mask (turn to * degenerate) residues in the msa positions associated * with the marked position in the MM (marked with 'm') * * Return: on success. * if error. */ static int do_modelmask( ESL_MSA *msa) { int i,j; if (msa->mm == NULL) return eslOK; //nothing to do for (i = 1; i <= msa->alen; i++) { for (j = 0; j < msa->nseq; j++) { if (msa->mm[i-1] == 'm') { #ifdef eslAUGMENT_ALPHABET if (msa->ax[j][i] != msa->abc->K && msa->ax[j][i] != msa->abc->Kp-1) // if not gap msa->ax[j][i] = msa->abc->Kp-3; //that's the degenerate "any character" (N for DNA, X for protein) #else if (msa->aseq[j][i] != '-' && msa->aseq[j][i] != '.') // if not gap msa->aseq[j][i] = 'N'; #endif } } } return eslOK; } /* Function: matassign2hmm() * * Purpose: Given an assignment of alignment columns to match vs. * insert, finish the final part of the model construction * calculation that is constant between model construction * algorithms. * * Args: msa - multiple sequence alignment * matassign - 1..alen bit flags for column assignments * ret_hmm - RETURN: counts-form HMM * opt_tr - optRETURN: array of tracebacks for aseq's * * Return: on success. * if no consensus columns are identified. * * ret_hmm and opt_tr alloc'ed here. */ static int matassign2hmm(ESL_MSA *msa, int *matassign, P7_HMM **ret_hmm, P7_TRACE ***opt_tr) { int status; /* return status */ P7_HMM *hmm = NULL; /* RETURN: new hmm */ P7_TRACE **tr = NULL; /* RETURN: 0..nseq-1 fake traces */ int M; /* length of new model in match states */ int idx; /* counter over sequences */ int apos; /* counter for aligned columns */ char errbuf[eslERRBUFSIZE]; /* apply the model mask in the 'GC MM' row */ do_modelmask(msa); /* How many match states in the HMM? */ for (M = 0, apos = 1; apos <= msa->alen; apos++) if (matassign[apos]) M++; if (M == 0) { status = eslENORESULT; goto ERROR; } /* Make fake tracebacks for each seq */ ESL_ALLOC(tr, sizeof(P7_TRACE *) * msa->nseq); if ((status = p7_trace_FauxFromMSA(msa, matassign, p7_MSA_COORDS, tr)) != eslOK) goto ERROR; for (idx = 0; idx < msa->nseq; idx++) { if ((status = p7_trace_Doctor(tr[idx], NULL, NULL)) != eslOK) goto ERROR; if ((status = p7_trace_Validate(tr[idx], msa->abc, msa->ax[idx], errbuf)) != eslOK) ESL_XEXCEPTION(eslFAIL, "validation failed: %s", errbuf); } /* Build count model from tracebacks */ if ((hmm = p7_hmm_Create(M, msa->abc)) == NULL) { status = eslEMEM; goto ERROR; } if ((status = p7_hmm_Zero(hmm)) != eslOK) goto ERROR; for (idx = 0; idx < msa->nseq; idx++) { if (tr[idx] == NULL) continue; /* skip rare examples of empty sequences */ if ((status = p7_trace_Count(hmm, msa->ax[idx], msa->wgt[idx], tr[idx])) != eslOK) goto ERROR; } hmm->nseq = msa->nseq; hmm->eff_nseq = msa->nseq; /* Transfer annotation from the MSA to the new model */ if ((status = annotate_model(hmm, matassign, msa)) != eslOK) goto ERROR; /* Reset #=RF line of alignment to reflect our assignment * of match, delete. matassign is valid from 1..alen and is off * by one from msa->rf. */ if (msa->rf == NULL) ESL_ALLOC(msa->rf, sizeof(char) * (msa->alen + 1)); for (apos = 1; apos <= msa->alen; apos++) msa->rf[apos-1] = matassign[apos] ? 'x' : '.'; msa->rf[msa->alen] = '\0'; if (opt_tr != NULL) *opt_tr = tr; else p7_trace_DestroyArray(tr, msa->nseq); *ret_hmm = hmm; return eslOK; ERROR: if (tr != NULL) p7_trace_DestroyArray(tr, msa->nseq); if (hmm != NULL) p7_hmm_Destroy(hmm); if (opt_tr != NULL) *opt_tr = NULL; *ret_hmm = NULL; return status; } /* Function: annotate_model() * * Purpose: Transfer rf, cs, and other optional annotation from the alignment * to the new model. * * Args: hmm - [M] new model to annotate * matassign - which alignment columns are MAT; [1..alen] * msa - alignment, including annotation to transfer * * Return: on success. * * Throws: on allocation error. */ static int annotate_model(P7_HMM *hmm, int *matassign, ESL_MSA *msa) { int apos; /* position in matassign, 1.alen */ int k; /* position in model, 1.M */ int status; /* Reference coord annotation */ if (msa->rf != NULL) { ESL_ALLOC(hmm->rf, sizeof(char) * (hmm->M+2)); hmm->rf[0] = ' '; for (apos = k = 1; apos <= msa->alen; apos++) if (matassign[apos]) hmm->rf[k++] = msa->rf[apos-1]; /* watch off-by-one in msa's rf */ hmm->rf[k] = '\0'; hmm->flags |= p7H_RF; } /* Model mask annotation */ if (msa->mm != NULL) { ESL_ALLOC(hmm->mm, sizeof(char) * (hmm->M+2)); hmm->mm[0] = ' '; for (apos = k = 1; apos <= msa->alen; apos++) if (matassign[apos]) hmm->mm[k++] = ( msa->mm[apos-1] == '.' ? '-' : msa->mm[apos-1]) ; hmm->mm[k] = '\0'; hmm->flags |= p7H_MMASK; } /* Consensus structure annotation */ if (msa->ss_cons != NULL) { ESL_ALLOC(hmm->cs, sizeof(char) * (hmm->M+2)); hmm->cs[0] = ' '; for (apos = k = 1; apos <= msa->alen; apos++) if (matassign[apos]) hmm->cs[k++] = msa->ss_cons[apos-1]; hmm->cs[k] = '\0'; hmm->flags |= p7H_CS; } /* Surface accessibility annotation */ if (msa->sa_cons != NULL) { ESL_ALLOC(hmm->ca, sizeof(char) * (hmm->M+2)); hmm->ca[0] = ' '; for (apos = k = 1; apos <= msa->alen; apos++) if (matassign[apos]) hmm->ca[k++] = msa->sa_cons[apos-1]; hmm->ca[k] = '\0'; hmm->flags |= p7H_CA; } /* The alignment map (1..M in model, 1..alen in alignment) */ ESL_ALLOC(hmm->map, sizeof(int) * (hmm->M+1)); hmm->map[0] = 0; for (apos = k = 1; apos <= msa->alen; apos++) if (matassign[apos]) hmm->map[k++] = apos; hmm->flags |= p7H_MAP; return eslOK; ERROR: return status; } /***************************************************************** * 3. Unit tests. *****************************************************************/ #ifdef p7BUILD_TESTDRIVE /* utest_basic() * An MSA to ex{e,o}rcise past demons. * 1. seq2 gives an I->end transition. * 2. seq1 contains degenerate Z,X, exercising symbol counting * of degenerate residues. */ static void utest_basic(void) { char *failmsg = "failure in build.c::utest_basic() unit test"; char msafile[16] = "p7tmpXXXXXX"; /* tmpfile name template */ FILE *ofp = NULL; ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; P7_HMM *hmm = NULL; float symfrac = 0.5; if (esl_tmpfile_named(msafile, &ofp) != eslOK) esl_fatal(failmsg); fprintf(ofp, "# STOCKHOLM 1.0\n"); fprintf(ofp, "#=GC RF --xxxxxxxxxxxxxxxx-xxx-x--\n"); fprintf(ofp, "seq1 --ACDEFGHIKLMNPZXS-TVW-Yyy\n"); fprintf(ofp, "seq2 aaACDEFGHIKLMNPQRS-TVWw---\n"); fprintf(ofp, "seq3 aaAC-EFGHIKLMNPQRS-TVW-Y--\n"); fprintf(ofp, "seq4 aaAC-EFGHIKLMNPQRS-TVW-Y--\n"); fprintf(ofp, "//\n"); fclose(ofp); if (eslx_msafile_Open(&abc, msafile, NULL, eslMSAFILE_UNKNOWN, NULL, &afp) != eslOK) esl_fatal(failmsg); if (eslx_msafile_Read(afp, &msa) != eslOK) esl_fatal(failmsg); if (p7_Fastmodelmaker(msa, symfrac, NULL, &hmm, NULL) != eslOK) esl_fatal(failmsg); p7_hmm_Destroy(hmm); esl_msa_Destroy(msa); eslx_msafile_Close(afp); esl_alphabet_Destroy(abc); remove(msafile); return; } /* utest_fragments() * This exercises the building code that deals with fragments, * creating traces with B->X->{MDI}k and {MDI}k->X->E * transitions, and making sure we can make MSAs correctly * from them using p7_tracealign_MSA(). This code was initially * buggy when first written; bugs first detected by Elena, * Nov 2009 */ static void utest_fragments(void) { char *failmsg = "failure in build.c::utest_fragments() unit test"; char msafile[16] = "p7tmpXXXXXX"; /* tmpfile name template */ FILE *ofp = NULL; ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; ESL_MSA *dmsa = NULL; ESL_MSA *postmsa = NULL; P7_HMM *hmm = NULL; P7_TRACE **trarr = NULL; int i; /* Write an MSA that tests fragment/missing data transitions. * When built with Handmodelmaker (using the RF line): * seq1 forces B->X->Mk and Mk->X->E missing data transitions; * seq2 forces B->X->Ik and Ik->X->E missing data transitions; * seq3 forces B->X->Dk and Dk->X->E missing data transitions. * * The first two cases can arise from fragment definition in * model construction, or in an input file. * * The X->Dk and Dk->X cases should never happen, but we don't * prohibit them. They can only arise in an input file, because * esl_msa_MarkFragments() converts everything before/after * first/last residue to ~, and won't leave a gap character in * between. * * There's nothing being tested by seq4 and seq5; they're just there. */ if (esl_tmpfile_named(msafile, &ofp) != eslOK) esl_fatal(failmsg); fprintf(ofp, "# STOCKHOLM 1.0\n"); fprintf(ofp, "#=GC RF xxxxx.xxxxxxxxxxxx.xxx\n"); fprintf(ofp, "seq1 ~~~~~~GHIKLMNPQRST~~~~\n"); fprintf(ofp, "seq2 ~~~~~aGHIKLMNPQRSTa~~~\n"); fprintf(ofp, "seq3 ~~~~~~-HIKLMNPQRS-~~~~\n"); fprintf(ofp, "seq4 ACDEF.GHIKLMNPQRST.VWY\n"); fprintf(ofp, "seq5 ACDEF.GHIKLMNPQRST.VWY\n"); fprintf(ofp, "//\n"); fclose(ofp); /* Read the original as text for comparison to postmsa. Make a digital copy for construction */ if (eslx_msafile_Open(NULL, msafile, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)!= eslOK) esl_fatal(failmsg); if (eslx_msafile_Read(afp, &msa) != eslOK) esl_fatal(failmsg); if ((dmsa = esl_msa_Clone(msa)) == NULL) esl_fatal(failmsg); if (esl_msa_Digitize(abc, dmsa, NULL) != eslOK) esl_fatal(failmsg); if (p7_Handmodelmaker(dmsa, NULL, &hmm, &trarr) != eslOK) esl_fatal(failmsg); for (i = 0; i < dmsa->nseq; i++) if (p7_trace_Validate(trarr[i], abc, dmsa->ax[i], NULL) != eslOK) esl_fatal(failmsg); /* The example is contrived such that the traces should give exactly the * same (text) alignment as the input alignment; no tracedoctoring. * Not a trivial test; for example, sequence 2 has a B->X->I transition that * can be problematic to handle. */ if (p7_tracealign_MSA(dmsa, trarr, hmm->M, p7_DEFAULT, &postmsa) != eslOK) esl_fatal(failmsg); for (i = 0; i < msa->nseq; i++) if (strcmp(msa->aseq[i], postmsa->aseq[i]) != 0) esl_fatal(failmsg); p7_trace_DestroyArray(trarr, msa->nseq); p7_hmm_Destroy(hmm); esl_msa_Destroy(msa); esl_msa_Destroy(dmsa); esl_msa_Destroy(postmsa); eslx_msafile_Close(afp); esl_alphabet_Destroy(abc); remove(msafile); return; } #endif /*p7BUILD_TESTDRIVE*/ /*---------------------- end of unit tests -----------------------*/ /***************************************************************** * 4. Test driver. *****************************************************************/ #ifdef p7BUILD_TESTDRIVE /* gcc -g -Wall -Dp7BUILD_TESTDRIVE -I. -I../easel -L. -L../easel -o build_utest build.c -lhmmer -leasel -lm */ #include "easel.h" #include "p7_config.h" #include "hmmer.h" int main(int argc, char **argv) { utest_basic(); utest_fragments(); return eslOK; } #endif /*p7BUILD_TESTDRIVE*/ /*-------------------- end of test driver ---------------------*/ /****************************************************************************** * 5. Example. ******************************************************************************/ #ifdef p7BUILD_EXAMPLE #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use DNA alphabet", 0 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use RNA alphabet", 0 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use protein alphabet", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example for the build module"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *msafile = esl_opt_GetArg(go, 1); int fmt = eslMSAFILE_UNKNOWN; int alphatype = eslUNKNOWN; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; P7_HMM *hmm = NULL; P7_PRIOR *prior = NULL; P7_TRACE **trarr = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; ESL_MSA *postmsa = NULL; int i; int status; /* Standard idioms for opening and reading a digital MSA. (See esl_msa.c example). */ if (esl_opt_GetBoolean(go, "--rna")) alphatype = eslRNA; else if (esl_opt_GetBoolean(go, "--dna")) alphatype = eslDNA; else if (esl_opt_GetBoolean(go, "--amino")) alphatype = eslAMINO; if ((status = eslx_msafile_Open(&abc, msafile, NULL, fmt, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); bg = p7_bg_Create(abc); switch (abc->type) { case eslAMINO: prior = p7_prior_CreateAmino(); break; case eslDNA: prior = p7_prior_CreateNucleic(); break; case eslRNA: prior = p7_prior_CreateNucleic(); break; default: prior = p7_prior_CreateLaplace(abc); break; } if (prior == NULL) esl_fatal("Failed to initialize prior"); while ((status = eslx_msafile_Read(afp, &msa)) != eslEOF) { if (status != eslOK) eslx_msafile_ReadFailure(afp, status); /* The modelmakers collect counts in an HMM structure */ status = p7_Handmodelmaker(msa, NULL, &hmm, &trarr); if (status == eslENORESULT) esl_fatal("no consensus columns in alignment %s\n", msa->name); else if (status != eslOK) esl_fatal("failed to build HMM from alignment %s\n", msa->name); printf("COUNTS:\n"); p7_hmm_Dump(stdout, hmm); /* These counts, in combination with a prior, are converted to probability parameters */ status = p7_ParameterEstimation(hmm, prior); if (status != eslOK) esl_fatal("failed to parameterize HMM for %s", msa->name); printf("PROBABILITIES:\n"); p7_hmm_Dump(stdout, hmm); /* Just so we can dump a more informatively annotated trace - build a profile */ gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 400, p7_LOCAL); /* Dump the individual traces */ for (i = 0; i < msa->nseq; i++) { printf("Trace %d: %s\n", i+1, msa->sqname[i]); p7_trace_Dump(stdout, trarr[i], gm, msa->ax[i]); } /* Create an MSA from the individual traces */ status = p7_tracealign_MSA(msa, trarr, hmm->M, p7_DEFAULT, &postmsa); if (status != eslOK) esl_fatal("failed to create new MSA from traces\n"); eslx_msafile_Write(stdout, postmsa, eslMSAFILE_PFAM); p7_profile_Destroy(gm); p7_hmm_Destroy(hmm); p7_trace_DestroyArray(trarr, msa->nseq); esl_msa_Destroy(postmsa); esl_msa_Destroy(msa); } eslx_msafile_Close(afp); p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7BUILD_EXAMPLE*/ /************************************************************ * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/build.c $ * SVN $Id: build.c 3496 2011-02-28 22:18:49Z eddys $ ************************************************************/ hmmer-3.1b2/src/emit.c0000664361611702660230000005536412473612612014175 0ustar wheelerteddy/* Emitting (sampling) sequences from an HMM, in either core or * profile form. * * 1. Exported API: sequence emission routines. * 2. Private functions. * 3. Stats driver. * 4. Copyright and license. * * SRE, Tue Jan 9 08:55:53 2007 [Janelia] [The Crystal Method, Vegas] * SVN $Id: emit.c 4216 2012-09-26 18:52:10Z wheelert $ */ #include "p7_config.h" #include "easel.h" #include "esl_random.h" #include "esl_sq.h" #include "esl_vectorops.h" #include "hmmer.h" static int sample_endpoints(ESL_RANDOMNESS *r, const P7_PROFILE *gm, int *ret_kstart, int *ret_kend); /***************************************************************** * 1. Exported API: sequence emission routines. *****************************************************************/ /* Function: p7_CoreEmit() * Incept: SRE, Tue Jan 9 10:20:51 2007 [Janelia] * * Purpose: Generate (sample) a sequence from a core HMM . * * Optionally return the sequence and/or its trace in * and , respectively, which the caller has * allocated. Having the caller provide these reusable * objects allows re-use of both and in repeated * calls, saving malloc/free wastage. Either can be passed * as if it isn't needed. * * This does not set any fields in the except for the * sequence itself. Caller must set the name, and any other * annotation it wants to add. * * Trace is relative to the core model: it may include * I_0 and I_M states, B->DD->M entry is explicit, and a * 0 length generated sequence is possible. * * Args: r - source of randomness * hmm - core HMM to generate from * sq - opt: digital sequence sampled (or NULL) * tr - opt: trace sampled (or NULL) * * Returns: on success; * optionally return the digital sequence through , * and optionally return its trace in . * * Throws: if emission gets us into an illegal state, * probably indicating that a probability that should have * been zero wasn't. * * Throws on a reallocation error. * * In these cases, the contents of and may be * corrupted. Caller should not trust their data, but may * safely reuse them. * * Xref: STL11/124. */ int p7_CoreEmit(ESL_RANDOMNESS *r, const P7_HMM *hmm, ESL_SQ *sq, P7_TRACE *tr) { int k = 0; /* position in model nodes 1..M */ int i = 0; /* position in sequence 1..L */ char st = p7T_B; /* state type */ int x; /* sampled residue */ int status; if (sq != NULL) esl_sq_Reuse(sq); if (tr != NULL) { if ((status = p7_trace_Reuse(tr)) != eslOK) goto ERROR; if ((status = p7_trace_Append(tr, st, k, i)) != eslOK) goto ERROR; } while (st != p7T_E) { /* Sample next state type, given current state type (and current k) */ switch (st) { case p7T_B: case p7T_M: switch (esl_rnd_FChoose(r, hmm->t[k], 3)) { case 0: st = p7T_M; break; case 1: st = p7T_I; break; case 2: st = p7T_D; break; default: ESL_XEXCEPTION(eslEINCONCEIVABLE, "impossible."); } break; case p7T_I: switch (esl_rnd_FChoose(r, hmm->t[k]+3, 2)) { case 0: st = p7T_M; break; case 1: st = p7T_I; break; default: ESL_XEXCEPTION(eslEINCONCEIVABLE, "impossible."); } break; case p7T_D: switch (esl_rnd_FChoose(r, hmm->t[k]+5, 2)) { case 0: st = p7T_M; break; case 1: st = p7T_D; break; default: ESL_XEXCEPTION(eslEINCONCEIVABLE, "impossible."); } break; default: ESL_XEXCEPTION(eslECORRUPT, "impossible state reached during emission"); } /* Bump k,i if needed, depending on new state type */ if (st == p7T_M || st == p7T_D) k++; if (st == p7T_M || st == p7T_I) i++; /* a transit to M_M+1 is a transit to the E state */ if (k == hmm->M+1) { if (st == p7T_M) { st = p7T_E; k = 0; } else ESL_XEXCEPTION(eslECORRUPT, "failed to reach E state properly"); } /* Sample new residue x if in match or insert */ if (st == p7T_M) x = esl_rnd_FChoose(r, hmm->mat[k], hmm->abc->K); else if (st == p7T_I) x = esl_rnd_FChoose(r, hmm->ins[k], hmm->abc->K); else x = eslDSQ_SENTINEL; /* Add state to trace */ if (tr != NULL) { if ((status = p7_trace_Append(tr, st, k, i)) != eslOK) goto ERROR; } /* Add x to sequence */ if (sq != NULL && x != eslDSQ_SENTINEL) if ((status = esl_sq_XAddResidue(sq, x)) != eslOK) goto ERROR; } /* Terminate the trace and sequence (both are optional, remember) */ if (tr != NULL) { tr->M = hmm->M; tr->L = i; } if (sq != NULL && (status = esl_sq_XAddResidue(sq, eslDSQ_SENTINEL)) != eslOK) goto ERROR; return eslOK; ERROR: return status; } /* Function: p7_ProfileEmit() * Synopsis: Sample a sequence from the search form of the model. * Incept: SRE, Mon Jan 22 10:23:28 2007 [Janelia] * * Purpose: Sample a sequence from the implicit * probabilistic model of a Plan7 profile . This * requires also having the core probabilities of * the accompanying , and the background * frequencies of null1 model . * * Optionally return the sequence and/or its trace in * and , respectively. Caller has allocated space for * both of these, though they may get reallocated/grown * here. Either can be passed as if unneeded. * * Only the sequence field is set in the . Caller must * set the name, plus any other fields it wants to set. If * the was created in digital mode, this is the dsq>; * if the was created in text mode, this is seq>. * * deliberately uses an object * instead of a plain or string, to * take advantage of the object's support for dynamic * reallocation of seq length, and to allow both digital and * text mode generation. * * Args: r - source of randomness * hmm - core probabilities of the profile * gm - configured search profile * sq - optRETURN: sampled sequence * tr - optRETURN: sampled trace * * Throws: (no abnormal error conditions) */ int p7_ProfileEmit(ESL_RANDOMNESS *r, const P7_HMM *hmm, const P7_PROFILE *gm, const P7_BG *bg, ESL_SQ *sq, P7_TRACE *tr) { char prv, st; /* prev, current state type */ int k = 0; /* position in model nodes 1..M */ int i = 0; /* position in sequence 1..L */ int x; /* sampled residue */ int kend = hmm->M; /* predestined end node */ int status; float xt[p7P_NXSTATES][p7P_NXTRANS]; /* Backcalculate the probabilities in the special states (loop and length model) */ for (i = 0; i < p7P_NXSTATES; i++) for (x = 0; x < p7P_NXTRANS; x++) xt[i][x] = exp(gm->xsc[i][x]); if (sq != NULL) esl_sq_Reuse(sq); if (tr != NULL) { if ((status = p7_trace_Reuse(tr)) != eslOK) goto ERROR; if ((status = p7_trace_Append(tr, p7T_S, k, i)) != eslOK) goto ERROR; if ((status = p7_trace_Append(tr, p7T_N, k, i)) != eslOK) goto ERROR; } st = p7T_N; i = 0; while (st != p7T_T) { /* Sample a state transition. After this section, prv and st (prev->current state) are set; * k also gets set if we make a B->Mk entry transition. */ prv = st; switch (st) { case p7T_B: if (p7_profile_IsLocal(gm)) { /* local mode: enter the implicit profile: choose our entry and our predestined exit */ if ((status = sample_endpoints(r, gm, &k, &kend)) != eslOK) goto ERROR; st = p7T_M; /* must be, because left wing is retracted */ } else { /* glocal mode: treat B as M_0, use its transitions to MID. */ /* FIXME: this is wrong. It should sample from B->Mk distribution! */ switch (esl_rnd_FChoose(r, P7H_TMAT(hmm, 0), p7H_NTMAT)) { case 0: st = p7T_M; k = 1; break; case 1: st = p7T_I; k = 0; break; case 2: st = p7T_D; k = 1; break; default: ESL_XEXCEPTION(eslEINCONCEIVABLE, "impossible."); } } break; case p7T_M: if (k == kend) st = p7T_E; /* check our preordained fate */ else { switch (esl_rnd_FChoose(r, P7H_TMAT(hmm, k), p7H_NTMAT)) { case 0: st = p7T_M; break; case 1: st = p7T_I; break; case 2: st = p7T_D; break; default: ESL_XEXCEPTION(eslEINCONCEIVABLE, "impossible."); } } break; case p7T_D: if (k == kend) st = p7T_E; else st = (esl_rnd_FChoose(r, P7H_TDEL(hmm, k), p7H_NTDEL) == 0) ? p7T_M : p7T_D; break; case p7T_I: st = (esl_rnd_FChoose(r, P7H_TINS(hmm, k), p7H_NTINS) == 0) ? p7T_M : p7T_I; break; case p7T_N: st = (esl_rnd_FChoose(r, xt[p7P_N], p7P_NXTRANS) == p7P_MOVE) ? p7T_B : p7T_N; break; case p7T_E: st = (esl_rnd_FChoose(r, xt[p7P_E], p7P_NXTRANS) == p7P_MOVE) ? p7T_C : p7T_J; break; case p7T_C: st = (esl_rnd_FChoose(r, xt[p7P_C], p7P_NXTRANS) == p7P_MOVE) ? p7T_T : p7T_C; break; case p7T_J: st = (esl_rnd_FChoose(r, xt[p7P_J], p7P_NXTRANS) == p7P_MOVE) ? p7T_B : p7T_J; break; default: ESL_XEXCEPTION(eslECORRUPT, "impossible state reached during emission"); } /* Based on the transition we just sampled, update k. */ if (st == p7T_E) k = 0; else if (st == p7T_M && prv != p7T_B) k++; /* be careful about B->Mk, where we already set k */ else if (st == p7T_D) k++; /* Based on the transition we just sampled, generate a residue. */ if (st == p7T_M) x = esl_rnd_FChoose(r, hmm->mat[k], hmm->abc->K); else if (st == p7T_I) x = esl_rnd_FChoose(r, hmm->ins[k], hmm->abc->K); else if ((st == p7T_N || st == p7T_C || st == p7T_J) && prv==st) x = esl_rnd_FChoose(r, bg->f, hmm->abc->K); else x = eslDSQ_SENTINEL; if (x != eslDSQ_SENTINEL) i++; /* Add residue (if any) to sequence */ if (sq != NULL && x != eslDSQ_SENTINEL && (status = esl_sq_XAddResidue(sq, x)) != eslOK) goto ERROR; /* Add state to trace. */ if (tr != NULL) { if ((status = p7_trace_Append(tr, st, k, i)) != eslOK) goto ERROR; } } /* Terminate the trace and sequence (both are optional, remember) */ if (tr != NULL) { tr->M = hmm->M; tr->L = i; } if (sq != NULL && (status = esl_sq_XAddResidue(sq, eslDSQ_SENTINEL)) != eslOK) goto ERROR; return eslOK; ERROR: return status; } /* Function: p7_emit_SimpleConsensus() * Synopsis: Generate simple consensus: ML residue in each match state * Incept: SRE, Mon Sep 1 09:10:47 2008 [Janelia] * * Purpose: Generate a simple consensus sequence for model * consisting of the maximum probability residue in each * match state; store this consensus in digital . * * Returns: on success. * * Throws: if the isn't in digital mode. */ int p7_emit_SimpleConsensus(const P7_HMM *hmm, ESL_SQ *sq) { int k; int x; int status; if (! esl_sq_IsDigital(sq)) ESL_EXCEPTION(eslEINVAL, "p7_emit_SimpleConsensus() expects a digital-mode "); if ((status = esl_sq_GrowTo(sq, hmm->M)) != eslOK) return status; for (k = 1; k <= hmm->M; k++) { if (hmm->mm && hmm->mm[k] == 'm') { //masked position, spit out the degenerate code if ((status = esl_sq_XAddResidue(sq, hmm->abc->Kp-3)) != eslOK) return status; } else { x = esl_vec_FArgMax(hmm->mat[k], hmm->abc->K); if ((status = esl_sq_XAddResidue(sq, x)) != eslOK) return status; } } if ((status = esl_sq_XAddResidue(sq, eslDSQ_SENTINEL)) != eslOK) return status; return eslOK; } /* Function: p7_emit_FancyConsensus() * Synopsis: Emit a fancier consensus with upper/lower case and N/X's. * Incept: SRE, Fri May 14 09:33:10 2010 [Janelia] * * Purpose: Generate a consensus sequence for model , consisting * of the maximum probability residue in each match state; * store this sequence in text-mode provided by the caller. * * If the probability of the consensus residue is less than * , show an ``any'' residue (N or X) instead. * If the probability of the consensus residue is $\geq$ * and less than , show the residue * as lower case; if it is $\geq$ , show it as * upper case. * * Returns: on success. * * Throws: if the isn't in text mode. * * Xref: SRE:J6/59. */ int p7_emit_FancyConsensus(const P7_HMM *hmm, float min_lower, float min_upper, ESL_SQ *sq) { int k, x; float p; char c; int status; if (! esl_sq_IsText(sq)) ESL_EXCEPTION(eslEINVAL, "p7_emit_FancyConsensus() expects a text-mode "); if ((status = esl_sq_GrowTo(sq, hmm->M)) != eslOK) return status; for (k = 1; k <= hmm->M; k++) { if (hmm->mm && hmm->mm[k] == 'm') { //masked position, spit out the degenerate code if ((status = esl_sq_CAddResidue(sq, tolower(esl_abc_CGetUnknown(hmm->abc))) ) != eslOK) return status; } else { p = esl_vec_FMax( hmm->mat[k], hmm->abc->K); x = esl_vec_FArgMax(hmm->mat[k], hmm->abc->K); if (p < min_lower) c = tolower(esl_abc_CGetUnknown(hmm->abc)); else if (p >= min_upper) c = toupper(hmm->abc->sym[x]); else c = tolower(hmm->abc->sym[x]); if ((status = esl_sq_CAddResidue(sq, c)) != eslOK) return status; } } if ((status = esl_sq_CAddResidue(sq, '\0')) != eslOK) return status; return eslOK; } /***************************************************************** * 2. Private functions. *****************************************************************/ /* sample_endpoints() * Incept: SRE, Mon Jan 22 10:43:20 2007 [Janelia] * * Purpose: Given a profile and random number source , sample * a begin transition from the implicit probabilistic profile * model, yielding a sampled start and end node; return these * via and . * * By construction, the entry at node is into a * match state, but the exit from node might turn * out to be from either a match or delete state. * * We assume that exits j are uniformly distributed for a * particular entry point i: $a_{ij} =$ constant $\forall * j$. * * Returns: on success. * * Throws: on allocation error. * * Xref: STL11/138 */ static int sample_endpoints(ESL_RANDOMNESS *r, const P7_PROFILE *gm, int *ret_kstart, int *ret_kend) { float *pstart = NULL; int k; int kstart, kend; int status; /* We have to backcalculate a probability distribution from the * lod B->Mk scores in a local model; this is a little time consuming, * but we don't have to do it often. */ ESL_ALLOC(pstart, sizeof(float) * (gm->M+1)); pstart[0] = 0.0f; for (k = 1; k <= gm->M; k++) pstart[k] = exp(p7P_TSC(gm, k-1, p7P_BM)) * (gm->M - k + 1); /* multiply p_ij by the number of exits j */ kstart = esl_rnd_FChoose(r, pstart, gm->M+1); /* sample the starting position from that distribution */ kend = kstart + esl_rnd_Roll(r, gm->M-kstart+1); /* and the exit uniformly from possible exits for it */ free(pstart); *ret_kstart = kstart; *ret_kend = kend; return eslOK; ERROR: if (pstart != NULL) free(pstart); *ret_kstart = 0; *ret_kend = 0; return status; } /***************************************************************** * 3. Stats driver *****************************************************************/ /* A small driver providing a testbed for sequence-emission related development testing. * * gcc -g -Wall -o stats -L. -I. -L../easel -I../easel -Dp7EMIT_STATS emit.c -lhmmer -leasel -lm */ #ifdef p7EMIT_STATS #include "p7_config.h" #include #include "easel.h" #include "esl_alphabet.h" #include "esl_random.h" #include "esl_sq.h" #include "hmmer.h" int main(int argc, char **argv) { char *hmmfile = argv[1]; /* name of HMM file to read one HMM from */ ESL_ALPHABET *abc = NULL; /* sequence alphabet */ ESL_RANDOMNESS *r = NULL; /* source of randomness */ P7_HMMFILE *hfp = NULL; /* open hmmfile */ P7_HMM *hmm = NULL; /* HMM to emit from */ P7_PROFILE *gm = NULL; /* profile HMM (scores) */ P7_BG *bg = NULL; /* null model */ P7_TRACE *tr = NULL; /* sampled trace */ ESL_SQ *sq = NULL; /* sampled digital sequence */ int n = 1000; int counts[p7T_NSTATETYPES]; int i; float sc; float nullsc; double bitscore; r = esl_randomness_CreateFast(0); tr = p7_trace_Create(); if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("failed to open %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("failed to read HMM"); sq = esl_sq_CreateDigital(abc); bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); for (i = 0; i < n; i++) { p7_ProfileEmit(r, hmm, gm, bg, sq, tr); p7_trace_GetStateUseCounts(tr, counts); p7_ReconfigLength(gm, sq->n); p7_bg_SetLength(bg, sq->n); p7_trace_Score(tr, sq->dsq, gm, &sc); p7_bg_NullOne (bg, sq->dsq, sq->n, &nullsc); bitscore = (sc - nullsc)/ eslCONST_LOG2; printf("%d %8.4f\n", counts[p7T_M] + (counts[p7T_I] + counts[p7T_D])/2, bitscore); } p7_profile_Destroy(gm); esl_sq_Destroy(sq); p7_trace_Destroy(tr); esl_randomness_Destroy(r); esl_alphabet_Destroy(abc); p7_hmmfile_Close(hfp); p7_hmm_Destroy(hmm); return eslOK; } #endif /*p7EMIT_STATS*/ /*-------------------- end, stats driver ------------------------*/ /***************************************************************** * x. Example *****************************************************************/ #ifdef p7EMIT_EXAMPLE /* gcc -g -Wall -o emit_example -Dp7EMIT_EXAMPLE -I. -I../easel -L. -L../easel emit.c -lhmmer -leasel -lm */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-L", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "configured mean seq length for profile", 0 }, { "-N", eslARG_INT, "10", NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of emitting sequences from profile"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_RANDOMNESS *rng = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); char *hmmfile = esl_opt_GetArg(go, 1); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_TRACE *tr = p7_trace_Create(); ESL_SQ *sq = NULL; char errbuf[eslERRBUFSIZE]; int i; int status; status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); status = p7_hmmfile_Read(hfp, &abc, &hmm); if (status == eslEFORMAT) p7_Fail("Bad file format in HMM file %s:\n%s\n", hfp->fname, hfp->errbuf); else if (status == eslEINCOMPAT) p7_Fail("HMM in %s is not in the expected %s alphabet\n", hfp->fname, esl_abc_DecodeType(abc->type)); else if (status == eslEOF) p7_Fail("Empty HMM file %s? No HMM data found.\n", hfp->fname); else if (status != eslOK) p7_Fail("Unexpected error in reading HMMs from %s\n", hfp->fname); p7_hmmfile_Close(hfp); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); sq = esl_sq_CreateDigital(abc); for (i = 0; i < N; i++) { p7_ProfileEmit(rng, hmm, gm, bg, sq, tr); esl_sq_FormatName(sq, "%s-sample%d", hmm->name, i); esl_sqio_Write(stdout, sq, eslSQFILE_FASTA, FALSE); if (p7_trace_Validate(tr, abc, sq->dsq, errbuf) != eslOK) esl_fatal(errbuf); esl_sq_Reuse(sq); p7_trace_Reuse(tr); } esl_sq_Destroy(sq); p7_trace_Destroy(tr); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(rng); esl_getopts_Destroy(go); return 0; } #endif /*p7EMIT_EXAMPLE*/ /*---------------------- end, example ---------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/hmmpgmd2msa.c0000664361611702660230000005046012473612613015444 0ustar wheelerteddy/* Function for conversion of binary data to MSA. * * Contents: * 1. The function * 2. Test driver * 3. Copyright and license information * */ #include #include #include #include #include #include /****************************************************************************** *# 1. The function *****************************************************************************/ /* Function: hmmpgmd2msa() * Synopsis: Convert an HMMPGMD-derived data stream to an MSA, based * on the corresponding hmm * * Purpose: Given a data stream from HMMPGMD of the form shown * here, produce an MSA: * HMMD_SEARCH_STATS * P7_HITS array of size (nhits) from above? * then repeats of P7_DOMAIN and P7_ALIDISPLAY data * for the hits, where each hit with d domains * produces * d P7_DOMAINs * then * d P7_ALIDISPLAYs * ... optionally adding a sequence with length matching * that of the hmm, which will be included in the alignment. * * A further extension has been the ability to include or exclude * sequences form the list of hits. * * This function's expected use is as a helper function for * the hmmer website, which gets the above data stream from * hmmpgmd. * * Args : data: a pointer to binary data in the format given above * hmm: the HMM against which the alidisplay traces and * additional sequences/traces are threaded to reach * the returned msa. * qsq : optional sequence to be included in the output msa; * must have the same number of residues as the hmm * has states, as each residue i will be aligned to * state i. * incl: optional array of sequence names, in the case of * hmmpgmd a list of ints, which are are excluded due * to the sequence threshold, but have been selected * to be included in the alignment. This ties in * with the way jackhmmer is implemented on the * HMMER website. * incl_size: required size of the incl array. zero if incl is null. * excl: optional array of sequence names, in the case of * hmmpgmd a list of ints, which are are included as they * score above threshold, but have been selected * to be excluded from the alignment. * excl_size: required size of the excl array. zero if excl is null. * * * Returns: Pointer to completed MSA object. NULL on error * */ int hmmpgmd2msa(void *data, P7_HMM *hmm, ESL_SQ *qsq, int *incl, int incl_size, int *excl, int excl_size, ESL_MSA **ret_msa) { int i, j; int c; int status; int set_included; /* trace of the query sequence with N residues onto model with N match states */ P7_TRACE *qtr = NULL; int extra_sqcnt = 0; /* vars used to read from the binary data */ HMMD_SEARCH_STATS *stats = NULL; /* pointer to a single stats object, at the beginning of data */ P7_HIT *hits = NULL; /* an array of hits, at the appropriate offset in data */ /* vars used in msa construction */ P7_TOPHITS th; P7_ALIDISPLAY *ad, *ad2; ESL_MSA *msa = NULL; P7_DOMAIN *dom = NULL; char *p = (char*)data; /*pointer used to walk along data, must be char* to allow pointer arithmetic */ th.N = 0; th.unsrt = NULL; th.hit = NULL; /* optionally build a faux trace for the query sequence: relative to core model (B->M_1..M_L->E) */ if (qsq != NULL) { if (qsq->n != hmm->M) { status = eslFAIL; goto ERROR; } if ((qtr = p7_trace_Create()) == NULL) {status = eslFAIL; goto ERROR; } if ((status = p7_trace_Append(qtr, p7T_B, 0, 0)) != eslOK) goto ERROR; for (i = 1; i <= qsq->n; i++) if ((status = p7_trace_Append(qtr, p7T_M, i, i)) != eslOK) goto ERROR; if ((status = p7_trace_Append(qtr, p7T_E, 0, 0)) != eslOK) goto ERROR; qtr->M = qsq->n; qtr->L = qsq->n; extra_sqcnt = 1; } /* get search stats + hit info */ stats = (HMMD_SEARCH_STATS*)p; /* sanity check */ if ( ( stats->Z_setby != p7_ZSETBY_NTARGETS && stats->Z_setby != p7_ZSETBY_OPTION && stats->Z_setby != p7_ZSETBY_FILEINFO ) || ( stats->domZ_setby != p7_ZSETBY_NTARGETS && stats->domZ_setby != p7_ZSETBY_OPTION && stats->domZ_setby != p7_ZSETBY_FILEINFO ) || stats->nhits > 10000000 || stats->elapsed > 1000000 ) { status = eslFAIL; goto ERROR; } /* ok, it looks legitimate */ p += sizeof(HMMD_SEARCH_STATS); hits = (P7_HIT*)p; p += sizeof(P7_HIT) * stats->nhits; /* create a tophits object, to be passed to p7_tophits_Alignment() */ ESL_ALLOC( th.unsrt, sizeof(P7_HIT) * stats->nhits); memcpy( th.unsrt, hits, sizeof(P7_HIT) * stats->nhits); ESL_ALLOC( th.hit, sizeof(P7_HIT*) * stats->nhits); for (i=0; inhits; i++) { th.hit[i] = &(th.unsrt[i]); if ( th.hit[i]->ndom > 10000 || th.hit[i]->flags > p7_IS_INCLUDED + p7_IS_REPORTED + p7_IS_NEW + p7_IS_DROPPED + p7_IS_DUPLICATE ) { status = eslFAIL; goto ERROR; } } // th.unsrt = NULL; th.N = stats->nhits; th.nreported = 0; th.nincluded = 0; th.is_sorted_by_sortkey = 0; th.is_sorted_by_seqidx = 0; for (i = 0; i < th.N; i++) { ESL_ALLOC( th.hit[i]->dcl, sizeof(P7_DOMAIN) * th.hit[i]->ndom); /* Go through the hits and set to be excluded or included as necessary */ set_included = 0; if(th.hit[i]->flags & p7_IS_INCLUDED){ if(excl_size > 0){ for( c = 0; c < excl_size; c++){ if(excl[c] == (long)(th.hit[i]->name) ){ th.hit[i]->flags = p7_IS_DROPPED; th.hit[i]->nincluded = 0; break; } } } }else{ if(incl_size > 0){ for( c = 0; c < incl_size; c++){ if(incl[c] == (long)th.hit[i]->name ){ th.hit[i]->flags = p7_IS_INCLUDED; set_included = 1; } } } } /* first grab all the P7_DOMAINs for the hit */ for (j=0; j < th.hit[i]->ndom; j++) { dom = th.hit[i]->dcl + j; memcpy(dom , (P7_DOMAIN*)p, sizeof(P7_DOMAIN)); /* Possibly set domains to be include if being * externally set via incl list*/ if(set_included) th.hit[i]->dcl[j].is_included = 1; p += sizeof(P7_DOMAIN); } /* then grab the P7_ALIDISPLAYs for the hit */ for (j=0; j < th.hit[i]->ndom; j++) { ad = (P7_ALIDISPLAY*)p; ESL_ALLOC(th.hit[i]->dcl[j].ad, sizeof(P7_ALIDISPLAY)); ad2 = th.hit[i]->dcl[j].ad; ad2->memsize = ad->memsize; ad2->rfline = ad->rfline; ad2->mmline = ad->mmline; ad2->csline = ad->csline ; ad2->model = ad->model ; ad2->mline = ad->mline ; ad2->aseq = ad->aseq ; ad2->ppline = ad->ppline; ad2->N = ad->N; ad2->hmmname = ad->hmmname; ad2->hmmacc = ad->hmmacc ; ad2->hmmdesc = ad->hmmdesc; ad2->hmmfrom = ad->hmmfrom; ad2->hmmto = ad->hmmto; ad2->M = ad->M; ad2->sqname = ad->sqname; ad2->sqacc = ad->sqacc ; ad2->sqdesc = ad->sqdesc; ad2->sqfrom = ad->sqfrom; ad2->sqto = ad->sqto; ad2->L = ad->L; p += sizeof(P7_ALIDISPLAY); ESL_ALLOC(ad2->mem, ad2->memsize); memcpy(ad2->mem, p, ad->memsize); p += ad2->memsize; p7_alidisplay_Deserialize(ad2); } } /* use the tophits and trace info above to produce an alignment */ if ( (status = p7_tophits_Alignment(&th, hmm->abc, &qsq, &qtr, extra_sqcnt, p7_ALL_CONSENSUS_COLS, &msa)) != eslOK) goto ERROR; /* free memory */ if (qtr != NULL) free(qtr); for (i = 0; i < th.N; i++) { for (j=0; j < th.hit[i]->ndom; j++) p7_alidisplay_Destroy(th.hit[i]->dcl[j].ad); if (th.hit[i]->dcl != NULL) free (th.hit[i]->dcl); } if (th.unsrt != NULL) free (th.unsrt); if (th.hit != NULL) free (th.hit); *ret_msa = msa; return eslOK; ERROR: /* free memory */ if (qtr != NULL) free(qtr); for (i = 0; i < th.N; i++) { for (j=0; j < th.hit[i]->ndom; j++) p7_alidisplay_Destroy(th.hit[i]->dcl[j].ad); if (th.hit[i]->dcl != NULL) free (th.hit[i]->dcl); } if (th.unsrt != NULL) free (th.unsrt); if (th.hit != NULL) free (th.hit); return status; } /****************************************************************************** *# 2. The function *****************************************************************************/ /* Function: hmmpgmd2stats() * Synopsis: Use a HMMPGMD-derived data stream to extract some simple * statistics regarding its alignment. * Purpose: Given a data stream from HMMPGMD of the form shown * here, produce a vector of floats: * positions 0 to hmm->M-1 are: * Fraction of alignments which cover model at that position * positions hmm->M to hmm->M*2-1 * Fraction of alignments which cover model at that position (mod hmm->M) * with a similar residue * positions hmm->M*2 to hmm->M*3-1 * Fraction of alignments which cover model at that position (mod hmm->M) * with the consensus residue * * Args : data: a pointer to binary data in the format given above * hmm: the HMM against which the alidisplay traces and * additional sequences/traces are threaded to reach * the returned msa. * * Returns: the location where the output vector will be placed. * caller is responsible for freeing it later * */ int hmmpgmd2stats(void *data, P7_HMM *hmm, float** statsOut) { int i, j, k; int status; /* trace of the query sequence with N residues onto model with N match states */ P7_TRACE *qtr = NULL; /* vars used to read from the binary data */ HMMD_SEARCH_STATS *stats = NULL; /* pointer to a single stats object, at the beginning of data */ P7_HIT *hits = NULL; /* an array of hits, at the appropriate offset in data */ P7_TOPHITS th; P7_DOMAIN *dom; P7_ALIDISPLAY *ad, *ad2; int *cover, *id, *similar; //store statistics result per hit int readPos, writePos; //for converting alignment contents into model indexing char *p = (char*)data; /*pointer used to walk along data, must be char* to allow pointer arithmetic */ th.N = 0; th.unsrt = NULL; th.hit = NULL; //storage for output ESL_ALLOC( *statsOut, sizeof(float) * hmm->M * 3); //storage for accumulation per hit ESL_ALLOC( cover, sizeof(int) * hmm->M); ESL_ALLOC( id, sizeof(int) * hmm->M); ESL_ALLOC( similar, sizeof(int) * hmm->M); for(k = 0; k < hmm->M; k++) { cover[k] = 0; id[k] = 0; similar[k] = 0; (*statsOut)[k ] = 0; (*statsOut)[k+hmm->M ] = 0; (*statsOut)[k+hmm->M*2] = 0; } /* get search stats + hit info */ stats = (HMMD_SEARCH_STATS*)p; /* sanity check */ if ( ( stats->Z_setby != p7_ZSETBY_NTARGETS && stats->Z_setby != p7_ZSETBY_OPTION && stats->Z_setby != p7_ZSETBY_FILEINFO ) || ( stats->domZ_setby != p7_ZSETBY_NTARGETS && stats->domZ_setby != p7_ZSETBY_OPTION && stats->domZ_setby != p7_ZSETBY_FILEINFO ) || stats->nhits > 10000000 || stats->elapsed > 1000000 ) { status = eslFAIL; goto ERROR; } /* ok, it looks legitimate */ p += sizeof(HMMD_SEARCH_STATS); hits = (P7_HIT*)p; p += sizeof(P7_HIT) * stats->nhits; /* create a tophits object, use it to step through the alignments */ ESL_ALLOC( th.unsrt, sizeof(P7_HIT) * stats->nhits); memcpy( th.unsrt, hits, sizeof(P7_HIT) * stats->nhits); ESL_ALLOC( th.hit, sizeof(P7_HIT*) * stats->nhits); for (i=0; inhits; i++) { th.hit[i] = &(th.unsrt[i]); if ( th.hit[i]->ndom > 10000 || th.hit[i]->flags > p7_IS_INCLUDED + p7_IS_REPORTED + p7_IS_NEW + p7_IS_DROPPED + p7_IS_DUPLICATE ) { status = eslFAIL; goto ERROR; } } th.N = stats->nhits; th.nreported = 0; th.nincluded = 0; th.is_sorted_by_sortkey = 0; th.is_sorted_by_seqidx = 0; for (i = 0; i < th.N; i++) { ESL_ALLOC( th.hit[i]->dcl, sizeof(P7_DOMAIN) * th.hit[i]->ndom); if(th.hit[i]->flags & p7_IS_INCLUDED) th.nincluded++; /* first grab all the P7_DOMAINs for the hit */ for (j=0; j < th.hit[i]->ndom; j++) { dom = (P7_DOMAIN*)p; th.hit[i]->dcl[j].is_included = dom->is_included; p += sizeof(P7_DOMAIN); } /* then grab the P7_ALIDISPLAYs for the hit */ for (j=0; j < th.hit[i]->ndom; j++) { ad = (P7_ALIDISPLAY*)p; ESL_ALLOC(th.hit[i]->dcl[j].ad, sizeof(P7_ALIDISPLAY)); ad2 = th.hit[i]->dcl[j].ad; ad2->memsize = ad->memsize; ad2->rfline = ad->rfline; ad2->mmline = ad->mmline; ad2->csline = ad->csline ; ad2->model = ad->model ; ad2->mline = ad->mline ; ad2->aseq = ad->aseq ; ad2->ppline = ad->ppline; ad2->N = ad->N; ad2->hmmname = ad->hmmname; ad2->hmmacc = ad->hmmacc ; ad2->hmmdesc = ad->hmmdesc; ad2->hmmfrom = ad->hmmfrom; ad2->hmmto = ad->hmmto; ad2->M = ad->M; ad2->sqname = ad->sqname; ad2->sqacc = ad->sqacc ; ad2->sqdesc = ad->sqdesc; ad2->sqfrom = ad->sqfrom; ad2->sqto = ad->sqto; ad2->L = ad->L; p += sizeof(P7_ALIDISPLAY); ESL_ALLOC(ad2->mem, ad2->memsize); memcpy(ad2->mem, p, ad->memsize); p += ad2->memsize; p7_alidisplay_Deserialize(ad2); if(th.hit[i]->flags & p7_IS_INCLUDED && th.hit[i]->dcl[j].is_included) { writePos = ad2->hmmfrom-1; readPos = 0; while(readPos < ad2->N) { //check if model covers residue if(isupper(ad2->aseq[readPos]) || ad2->aseq[readPos] == '-') { cover[writePos]++; //check mline for id if(isalpha(ad2->mline[readPos])) { id[writePos]++; similar[writePos]++; } //check mline for not-a-space else if(ad2->mline[readPos] == '+') { similar[writePos]++; } writePos++; } readPos++; } } } //increment output, adjusting for overlaps for(k = 0; k < hmm->M; k++) { if(cover[k]) (*statsOut)[k]+=1.0; if(id[k]) (*statsOut)[k+hmm->M]+=(id[k]/cover[k]); id[k] = 0; if(similar[k]) (*statsOut)[k+hmm->M*2]+=(similar[k]/cover[k]); similar[k] = 0; cover[k] = 0; } } for(i = 0; i < hmm->M*3; i++) { (*statsOut)[i] = (*statsOut)[i]/(th.nincluded); } for(i = hmm->M; i < hmm->M*3; i++) { if((*statsOut)[i%hmm->M]) { (*statsOut)[i] = (*statsOut)[i]/(*statsOut)[i%hmm->M]; } else { (*statsOut)[i] = 0.0; } } /* free memory */ if (qtr != NULL) free(qtr); qtr = NULL; for (i = 0; i < th.N; i++) { for (j=0; j < th.hit[i]->ndom; j++) if(th.hit[i]->dcl[j].ad) { p7_alidisplay_Destroy(th.hit[i]->dcl[j].ad); th.hit[i]->dcl[j].ad = NULL; } if (th.hit[i]->dcl != NULL) free (th.hit[i]->dcl); th.hit[i]->dcl = NULL; } if (th.unsrt != NULL) free (th.unsrt); th.unsrt = NULL; if (th.hit != NULL) free (th.hit); th.hit = NULL; return eslOK; ERROR: /* free memory */ if (qtr != NULL) free(qtr); qtr = NULL; for (i = 0; i < th.N; i++) { for (j=0; j < th.hit[i]->ndom; j++) if(th.hit[i]->dcl[j].ad) { p7_alidisplay_Destroy(th.hit[i]->dcl[j].ad); th.hit[i]->dcl[j].ad = NULL; } if (th.hit[i]->dcl != NULL) free (th.hit[i]->dcl); th.hit[i]->dcl = NULL; } if (th.unsrt != NULL) free (th.unsrt); th.unsrt = NULL; if (th.hit != NULL) free (th.hit); th.hit = NULL; return status; } /***************************************************************** * 3. Test driver *****************************************************************/ //#define hmmpgmd2msa_TESTDRIVE #ifdef hmmpgmd2msa_TESTDRIVE //gcc -o alistat_test -msse2 -std=gnu99 -g -O2 -I. -L. -I../easel -L../easel -D hmmpgmd2msa_TESTDRIVE hmmpgmd2msa.c -lhmmer -leasel -lm /* Test driver. As written, requires files that won't be released with * the distribution. So it should be replaced with a tighter test. */ int main(int argc, char **argv) { ESL_MSA *msa = NULL; ESL_SQ *qsq = NULL; ESL_SQFILE *qfp = NULL; /* open qfile */ P7_HMMFILE *hfp = NULL; /* open input HMM file */ P7_HMM *hmm = NULL; /* one HMM query */ ESL_ALPHABET *abc = NULL; /* digital alphabet */ FILE *fp = NULL; /* open file containing the HMMPGMD data */ void *data = NULL; /* pointer to the full data stream built as if from hmmdmstr */ long size = 0; char errbuf[eslERRBUFSIZE]; int status; float* statsOut; int x; //char *badstring = "asdlfuhasdfuhasdfhasdfhaslidhflaishdfliasuhdfliasuhdfliasudfh"; char *hmm_file = "esl_align.hmm"; char *fa_file = "esl_align.fa"; char *dat_file = "esl_align.big.bin"; if (argc > 1 ) { ESL_ALLOC(hmm_file, sizeof(char) * (strlen(argv[1])+1) ); strcpy(hmm_file, argv[1]); } if (argc > 2 ) { ESL_ALLOC(dat_file, sizeof(char) * (strlen(argv[2])+1) ); strcpy(dat_file, argv[2]); } if (argc > 3 ) { ESL_ALLOC(fa_file, sizeof(char) * (strlen(argv[3])+1) ); strcpy(fa_file, argv[3]); } printf("hmmpgmd2msa:\nhmm: %s\nfa: %s\ndat: %s\n", hmm_file, fa_file, dat_file); /* read the hmm */ if ( (status = p7_hmmfile_OpenE(hmm_file, NULL, &hfp, errbuf)) != 0 ) goto ERROR; if ( (status = p7_hmmfile_Read(hfp, &abc, &hmm)) != 0 ) goto ERROR; /* read the query sequence */ //if ( (status = esl_sqfile_OpenDigital(abc, fa_file, eslSQFILE_UNKNOWN, NULL, &qfp)) != 0) goto ERROR; //qsq = esl_sq_CreateDigital(abc); //if ( (status = esl_sqio_Read(qfp, qsq)) != eslOK) goto ERROR; //printf("sequence length %d\n", qsq->n); /* get stats for the hmmd data */ if ( (fp = fopen(dat_file, "rb")) == NULL ) goto ERROR; fseek (fp , 0 , SEEK_END); size = ftell (fp); rewind (fp); ESL_ALLOC(data, size); fread(data, size, 1, fp); status = hmmpgmd2stats(data, hmm, &statsOut); //status = hmmpgmd2msa(data, hmm, qsq, NULL,0, NULL, 0, &msa); for(x = 0; x < hmm->M*3; x++) { if(statsOut[x] > 1) { printf("problem x: %d %f\n", x, statsOut[x]); } } for(x = 0; x < hmm->M; x++) { printf("%d", ((int)(10*statsOut[x])>=10)?9:(int)(10*statsOut[x])); } printf("\n"); for(x = hmm->M; x < hmm->M*2; x++) { printf("%d", ((int)(10*statsOut[x])>=10)?9:(int)(10*statsOut[x])); } printf("\n"); for(x = hmm->M*2; x < hmm->M*3; x++) { printf("%d", ((int)(10*statsOut[x])>=10)?9:(int)(10*statsOut[x])); } printf("\n"); if (status != eslOK) goto ERROR; //eslx_msafile_Write(stdout, msa, eslMSAFILE_STOCKHOLM); exit(0); ERROR: printf ("fail!\n"); exit(1); } #endif /************************************************************ * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/trunk/src/hmmpgmd2msa.c $ * SVN $Id: build.c 3496 2011-02-28 22:18:49Z wheelert $ ************************************************************/ hmmer-3.1b2/src/p7_hmmfile.c0000664361611702660230000040502612473612614015262 0ustar wheelerteddy/* Input/output of HMMs. * * Contents: * 1. The P7_HMMFILE object for reading HMMs * 2. Writing HMMER3 HMM files. * 3. API for reading HMM files in various formats. * 4. Private, specific profile HMM file format parsers. * 5. Other private functions involved in i/o. * 6. Benchmark driver. * 7. Unit tests. * 8. Test driver. * 9. Example. * 10. Copyright and license. */ #include "p7_config.h" #include #include #include #ifdef HMMER_THREADS #include #endif #include "easel.h" #include "esl_alphabet.h" #include "esl_ssi.h" /* this gives us esl_byteswap */ #include "esl_vectorops.h" /* gives us esl_vec_FCopy() */ #include "hmmer.h" /* Magic numbers identifying binary formats. * Do not change the old magics! Necessary for backwards compatibility. */ #if 0 /* temporarily remove all the magic; write backwards compat stuff later */ static uint32_t v10magic = 0xe8ededb1; /* v1.0 binary: "hmm1" + 0x80808080 */ static uint32_t v10swap = 0xb1edede8; /* byteswapped v1.0 */ static uint32_t v11magic = 0xe8ededb2; /* v1.1 binary: "hmm2" + 0x80808080 */ static uint32_t v11swap = 0xb2edede8; /* byteswapped v1.1 */ static uint32_t v17magic = 0xe8ededb3; /* v1.7 binary: "hmm3" + 0x80808080 */ static uint32_t v17swap = 0xb3edede8; /* byteswapped v1.7 */ static uint32_t v19magic = 0xe8ededb4; /* V1.9 binary: "hmm4" + 0x80808080 */ static uint32_t v19swap = 0xb4edede8; /* V1.9 binary, byteswapped */ static uint32_t v20magic = 0xe8ededb5; /* V2.0 binary: "hmm5" + 0x80808080 */ static uint32_t v20swap = 0xb5edede8; /* V2.0 binary, byteswapped */ #endif static uint32_t v3a_magic = 0xe8ededb6; /* 3/a binary: "hmm6" + 0x80808080 */ static uint32_t v3b_magic = 0xe8ededb7; /* 3/b binary: "hmm7" + 0x80808080 */ static uint32_t v3c_magic = 0xe8ededb8; /* 3/c binary: "hmm8" + 0x80808080 */ static uint32_t v3d_magic = 0xe8ededb9; /* 3/d binary: "hmm9" + 0x80808080 */ static uint32_t v3e_magic = 0xe8ededb0; /* 3/e binary: "hmm0" + 0x80808080 */ static uint32_t v3f_magic = 0xe8ededba; /* 3/f binary: "hmma" + 0x80808080 */ static int read_asc30hmm(P7_HMMFILE *hfp, ESL_ALPHABET **ret_abc, P7_HMM **opt_hmm); static int read_bin30hmm(P7_HMMFILE *hfp, ESL_ALPHABET **ret_abc, P7_HMM **opt_hmm); static int read_asc20hmm(P7_HMMFILE *hfp, ESL_ALPHABET **ret_abc, P7_HMM **opt_hmm); static int write_bin_string(FILE *fp, char *s); static int read_bin_string (FILE *fp, char **ret_s); static float h2ascii2prob(char *s, float null); /***************************************************************** * 1. The P7_HMMFILE object for reading HMMs. *****************************************************************/ /* Historical note: * p7_hmmfile_Open() is deprecated; * p7_hmmfile_OpenE() is the newer replacement, which includes * better error reporting through a . */ static int open_engine(char *filename, char *env, P7_HMMFILE **ret_hfp, int do_ascii_only, char *errbuf); /* Function: p7_hmmfile_OpenE() * Synopsis: Open an HMM file . * * Purpose: Open an HMM file , and prepare to read the first * HMM from it. * * We look for relative to the current working * directory. Additionally, if we don't find it in the cwd * and is non-NULL, we will look for * relative to one or more directories in a colon-delimited * list obtained from the environment variable . For * example, if we had in the environment, a * profile HMM application might pass "HMMERDB" as . * * As a special case, if is "-", then HMMs will * be read from . In this case, has no effect. * * As another special case, if ends in a <.gz> * suffix, the file is assumed to be compressed by GNU * , and it is opened for reading from a pipe with * . This feature is only available on * POSIX-compliant systems that have a call, and * is defined by the configure script at * compile time. * * Args: filename - HMM file to open; or "-" for * env - list of paths to look for in, in * addition to current working dir; or * ret_hfp - RETURN: opened . * errbuf - error message buffer: , or a ptr * to chars of allocated space. * * Returns: on success, and the open is returned * in <*ret_hfp>. * * if can't be opened for * reading, even after the list of directories in (if * any) is checked. * * if is not in a recognized HMMER * HMM file format. * * On either type of error, if a non-NULL was provided, * a useful user error message is left in it. * * Throws: on allocation failure. */ int p7_hmmfile_OpenE(char *filename, char *env, P7_HMMFILE **ret_hfp, char *errbuf) { return open_engine(filename, env, ret_hfp, FALSE, errbuf); } /* Function: p7_hmmfile_Open() * Synopsis: Open an HMM file. (Deprecated version with less error handling) * * Purpose: Same as , above, but without the . * This older version is now deprecated. Use . * * When we have squashed out all usage of legacy , * will become . */ int p7_hmmfile_Open(char *filename, char *env, P7_HMMFILE **ret_hfp) { return open_engine(filename, env, ret_hfp, FALSE, NULL); } /* Function: p7_hmmfile_OpenENoDB() * Synopsis: Open only an HMM flatfile, even if pressed db exists. * * Purpose: Same as except that if a pressed * database exists for , it is ignored. Only * itself is opened. * * hmmpress needs this call. Otherwise, it opens a press'ed * database that it may be about to overwrite. */ int p7_hmmfile_OpenENoDB(char *filename, char *env, P7_HMMFILE **ret_hfp, char *errbuf) { return open_engine(filename, env, ret_hfp, TRUE, errbuf); } /* Function: p7_hmmfile_OpenNoDB() * Synopsis: Open only an HMM flatfile, even if pressed db exists. (Deprecated) * * Purpose: Same as , * database exists for , it is ignored. Only * itself is opened. * * hmmpress needs this call. Otherwise, it opens a press'ed * database that it may be about to overwrite. */ int p7_hmmfile_OpenNoDB(char *filename, char *env, P7_HMMFILE **ret_hfp) { return open_engine(filename, env, ret_hfp, TRUE, NULL); } /* Function: p7_hmmfile_OpenBuffer() * * Purpose: Perparse a buffer containing an ascii HMM for parsing. * * As another special case, if ends in a <.gz> * suffix, the file is assumed to be compressed by GNU * , and it is opened for reading from a pipe with * . This feature is only available on * POSIX-compliant systems that have a call, and * is defined by the configure script at * compile time. * * Args: filename - HMM file to open; or "-" for * env - list of paths to look for in, in * addition to current working dir; or * ret_hfp - RETURN: opened . * * Returns: on success, and the open is returned * in <*ret_hfp>. * * if can't be opened for * reading, even after the list of directories in (if * any) is checked. * * if is not in a recognized HMMER * HMM file format. * * Throws: on allocation failure. */ int p7_hmmfile_OpenBuffer(char *buffer, int size, P7_HMMFILE **ret_hfp) { P7_HMMFILE *hfp = NULL; int status; char *tok; int toklen; ESL_ALLOC(hfp, sizeof(P7_HMMFILE)); hfp->f = NULL; hfp->fname = NULL; hfp->do_gzip = FALSE; hfp->do_stdin = FALSE; hfp->newly_opened = TRUE; /* well, it will be, real soon now */ hfp->is_pressed = FALSE; #ifdef HMMER_THREADS hfp->syncRead = FALSE; #endif hfp->parser = NULL; hfp->efp = NULL; hfp->ffp = NULL; hfp->pfp = NULL; hfp->ssi = NULL; hfp->errbuf[0] = '\0'; if ((hfp->efp = esl_fileparser_CreateMapped(buffer, size)) == NULL) { status = eslEMEM; goto ERROR; } if ((status = esl_fileparser_SetCommentChar(hfp->efp, '#')) != eslOK) goto ERROR; if ((status = esl_fileparser_GetToken(hfp->efp, &tok, &toklen)) != eslOK) goto ERROR; if (strcmp("HMMER3/f", tok) == 0) { hfp->format = p7_HMMFILE_3f; hfp->parser = read_asc30hmm; } else if (strcmp("HMMER3/e", tok) == 0) { hfp->format = p7_HMMFILE_3e; hfp->parser = read_asc30hmm; } else if (strcmp("HMMER3/d", tok) == 0) { hfp->format = p7_HMMFILE_3d; hfp->parser = read_asc30hmm; } else if (strcmp("HMMER3/c", tok) == 0) { hfp->format = p7_HMMFILE_3c; hfp->parser = read_asc30hmm; } else if (strcmp("HMMER3/b", tok) == 0) { hfp->format = p7_HMMFILE_3b; hfp->parser = read_asc30hmm; } else if (strcmp("HMMER3/a", tok) == 0) { hfp->format = p7_HMMFILE_3a; hfp->parser = read_asc30hmm; } else if (strcmp("HMMER2.0", tok) == 0) { hfp->format = p7_HMMFILE_20; hfp->parser = read_asc20hmm; } if (hfp->parser == NULL) { status = eslEFORMAT; goto ERROR; } *ret_hfp = hfp; return eslOK; ERROR: if (hfp != NULL) p7_hmmfile_Close(hfp); *ret_hfp = NULL; if (status == eslEMEM) return status; else if (status == eslENOTFOUND) return status; else return eslEFORMAT; } /* open_engine() * * Implements all of the file opening functions: * , , , * and . * See their comments above. * * Only returns three types of errors: * eslENOTFOUND - file (the HMM file) or program (gzip, for .gz files) not found * eslEFORMAT - bad HMM file format (or format of associated file) * eslEMEM - allocation failure somewhere * , if non-NULL, will contain a useful error message. * */ static int open_engine(char *filename, char *env, P7_HMMFILE **ret_hfp, int do_ascii_only, char *errbuf) { P7_HMMFILE *hfp = NULL; char *envfile = NULL; /* full path to filename after using environment */ char *dbfile = NULL; /* constructed name of an index or binary db file */ char *cmd = NULL; /* constructed gzip -dc pipe command */ int status; int n = strlen(filename); union { char c[4]; uint32_t n; } magic; char *tok; int toklen; ESL_ALLOC(hfp, sizeof(P7_HMMFILE)); hfp->f = NULL; hfp->fname = NULL; hfp->do_gzip = FALSE; hfp->do_stdin = FALSE; hfp->newly_opened = TRUE; /* well, it will be, real soon now */ hfp->is_pressed = FALSE; #ifdef HMMER_THREADS hfp->syncRead = FALSE; #endif hfp->parser = NULL; hfp->efp = NULL; hfp->ffp = NULL; hfp->pfp = NULL; hfp->ssi = NULL; hfp->errbuf[0] = '\0'; /* 1. There's two special reading modes that have limited indexing * and optimization capability: reading from standard input, and * reading a gzip'ped file. Once we've set one of these up and set * either the or flag, we won't try to open * any associated indexes or binary database files. */ if (strcmp(filename, "-") == 0) /* "-" means read from stdin */ { hfp->f = stdin; hfp->do_stdin = TRUE; if ((status = esl_strdup("[STDIN]", -1, &(hfp->fname))) != eslOK) ESL_XFAIL(status, errbuf, "esl_strdup failed; shouldn't happen"); } #ifdef HAVE_POPEN else if (n > 3 && strcmp(filename+n-3, ".gz") == 0) /* a <*.gz> filename means read via gunzip pipe */ { if (! esl_FileExists(filename)) ESL_XFAIL(eslENOTFOUND, errbuf, ".gz file %s not found or not readable", filename); if ((status = esl_sprintf(&cmd, "gzip -dc %s", filename)) != eslOK) ESL_XFAIL(status, errbuf, "when setting up .gz pipe: esl_sprintf() failed"); if ((hfp->f = popen(cmd, "r")) == NULL) ESL_XFAIL(eslENOTFOUND, errbuf, "gzip -dc %s failed; gzip not installed or not in PATH?", filename); if ((status = esl_strdup(filename, n, &(hfp->fname))) != eslOK) ESL_XFAIL(status, errbuf, "esl_strdup() failed, shouldn't happen"); hfp->do_gzip = TRUE; free(cmd); cmd = NULL; } #endif /*HAVE_POPEN: gzip mode */ /* 2. If f> is still NULL, then we're in the usual situation * of looking for a file on disk. It may either be in the cwd, or * in one of the directories listed in the string. Find it, * open it to f>, and set filename>. The * filename> string will be used later to construct the * names of expected index and binary database files. */ if (hfp->f == NULL) { if ((hfp->f = fopen(filename, "r")) != NULL) { if ((status = esl_strdup(filename, n, &(hfp->fname))) != eslOK) ESL_XFAIL(status, errbuf, "esl_strdup() failed, shouldn't happen"); } else if (esl_FileEnvOpen(filename, env, &(hfp->f), &envfile) == eslOK) { n = strlen(envfile); if ((status = esl_strdup(envfile, n, &(hfp->fname))) != eslOK) ESL_XFAIL(status, errbuf, "esl_strdup() failed, shouldn't happen"); free(envfile); envfile = NULL; } else { /* temporarily copy filename over to hfp->fname, even though we haven't opened anything: we'll next try to open .h3m */ if ((status = esl_strdup(filename, n, &(hfp->fname))) != eslOK) ESL_XFAIL(status, errbuf, "esl_strdup() failed, shouldn't happen"); } } /* f> may *still* be NULL, if is a press'ed database and ASCII file is deleted */ /* 3. Look for the binary model file component of a press'ed HMM database. * * If f> is still NULL, this is our last chance to find it. * (The ASCII base file may have been deleted to save space, leaving * binary press'ed files.) * * If we've been asked to open only an ASCII file -- because we're being * called by hmmpress, for example! -- then don't do this. */ if (! do_ascii_only && ! hfp->do_stdin && ! hfp->do_gzip) { FILE *tmpfp; /* if we opened an ASCII file in the HMMERDB directory, hfp->fname contains fully qualified name of file including the path */ if ((status = esl_sprintf(&dbfile, "%s.h3m", hfp->fname) != eslOK)) ESL_XFAIL(status, errbuf, "esl_sprintf() failed; shouldn't happen"); if ((tmpfp = fopen(dbfile, "rb")) != NULL) { if (hfp->f != NULL) fclose(hfp->f); /* preferentially read the .h3m file, not the original */ hfp->f = tmpfp; hfp->is_pressed = TRUE; free(hfp->fname); if ((status = esl_strdup(dbfile, -1, &(hfp->fname))) != eslOK) ESL_XFAIL(status, errbuf, "esl_strdup() failed, shouldn't happen"); } else if (hfp->f == NULL && esl_FileEnvOpen(dbfile, env, &(hfp->f), &envfile) == eslOK) { /* found a binary-only press'ed db in one of the env directories. */ free(hfp->fname); if ((status = esl_strdup(envfile, -1, &(hfp->fname))) != eslOK) ESL_XFAIL(status, errbuf, "esl_strdup() failed; shouldn't happen"); hfp->is_pressed = TRUE; } free(dbfile); dbfile = NULL; } /* 4. f> must now point to a valid model input stream: if not, we fail. */ if (hfp->f == NULL) { if (env) ESL_XFAIL(eslENOTFOUND, errbuf, "HMM file %s not found (nor an .h3m binary of it); also looked in %s", filename, env); else ESL_XFAIL(eslENOTFOUND, errbuf, "HMM file %s not found (nor an .h3m binary of it)", filename); } /* 5. If we found and opened a binary model file .h3m, open the rest of * the press'd model files. (this can't be true if do_ascii_only is set) */ if (hfp->is_pressed) { /* here we rely on the fact that the suffixes are .h3{mfpi}, to construct other names from .h3m file name !! */ n = strlen(hfp->fname); /* so, n = '\0', n-1 = 'm' */ esl_strdup(hfp->fname, n, &dbfile); dbfile[n-1] = 'f'; /* the MSV filter part of the optimized profiles */ if ((hfp->ffp = fopen(dbfile, "rb")) == NULL) ESL_XFAIL(eslENOTFOUND, errbuf, "Opened %s, a pressed HMM file; but no .h3f file found", hfp->fname); dbfile[n-1] = 'p'; /* the remainder of the optimized profiles */ if ((hfp->pfp = fopen(dbfile, "rb")) == NULL) ESL_XFAIL(eslENOTFOUND, errbuf, "Opened %s, a pressed HMM file; but no .h3p file found", hfp->fname); dbfile[n-1] = 'i'; /* the SSI index for the .h3m file */ status = esl_ssi_Open(dbfile, &(hfp->ssi)); if (status == eslENOTFOUND) ESL_XFAIL(eslENOTFOUND, errbuf, "Opened %s, a pressed HMM file; but no .h3i file found", hfp->fname); else if (status == eslEFORMAT) ESL_XFAIL(eslEFORMAT, errbuf, "Opened %s, a pressed HMM file; but format of its .h3i file unrecognized", hfp->fname); else if (status == eslERANGE) ESL_XFAIL(eslEFORMAT, errbuf, "Opened %s, a pressed HMM file; but its .h3i file is 64-bit and your system is 32-bit", hfp->fname); else if (status != eslOK) ESL_XFAIL(eslEFORMAT, errbuf, "Opened %s, a pressed HMM file; but failed to open its .h3i file", hfp->fname); free(dbfile); dbfile = NULL; } else { if ((status = esl_sprintf(&dbfile, "%s.ssi", hfp->fname)) != eslOK) ESL_XFAIL(status, errbuf, "esl_sprintf() failed"); status = esl_ssi_Open(dbfile, &(hfp->ssi)); /* not finding an SSI file is ok. we open it if we find it. */ if (status == eslEFORMAT) ESL_XFAIL(status, errbuf, "a %s.ssi file exists (an SSI index), but its SSI format is not recognized", hfp->fname); else if (status == eslERANGE) ESL_XFAIL(status, errbuf, "a %s.ssi file exists (an SSI index), but is 64-bit, and your system is 32-bit", hfp->fname); else if (status != eslOK && status != eslENOTFOUND) ESL_XFAIL(status, errbuf, "esl_ssi_Open() failed"); free(dbfile); dbfile = NULL; } /* 6. Check for binary file format. A pressed db is automatically binary: verify. */ if (! fread((char *) &(magic.n), sizeof(uint32_t), 1, hfp->f)) ESL_XFAIL(eslEFORMAT, errbuf, "File exists, but appears to be empty?"); if (magic.n == v3a_magic) { hfp->format = p7_HMMFILE_3a; hfp->parser = read_bin30hmm; } else if (magic.n == v3b_magic) { hfp->format = p7_HMMFILE_3b; hfp->parser = read_bin30hmm; } else if (magic.n == v3c_magic) { hfp->format = p7_HMMFILE_3c; hfp->parser = read_bin30hmm; } else if (magic.n == v3d_magic) { hfp->format = p7_HMMFILE_3d; hfp->parser = read_bin30hmm; } else if (magic.n == v3e_magic) { hfp->format = p7_HMMFILE_3e; hfp->parser = read_bin30hmm; } else if (magic.n == v3f_magic) { hfp->format = p7_HMMFILE_3f; hfp->parser = read_bin30hmm; } else if (hfp->is_pressed) ESL_XFAIL(eslEFORMAT, errbuf, "Binary format tag in %s unrecognized\nCurrent H3 format is HMMER3/f. Previous H2/H3 formats also supported.", hfp->fname); /* 7. Checks for ASCII file format */ if (hfp->parser == NULL) { /* Does the magic appear to be binary, yet we didn't recognize it? */ if (magic.n & 0x80000000) ESL_XFAIL(eslEFORMAT, errbuf, "Format tag appears binary, but unrecognized\nCurrent H3 format is HMMER3/f. Previous H2/H3 formats also supported."); if ((hfp->efp = esl_fileparser_Create(hfp->f)) == NULL) ESL_XFAIL(eslEMEM, errbuf, "internal error in esl_fileparser_Create()"); if ((status = esl_fileparser_SetCommentChar(hfp->efp, '#')) != eslOK) ESL_XFAIL(status, errbuf, "internal error in esl_fileparser_SetCommentChar()"); if ((status = esl_fileparser_NextLinePeeked(hfp->efp, magic.c, 4)) != eslOK) ESL_XFAIL(status, errbuf, "internal error in esl_fileparser_NextLinePeeked()"); if ((status = esl_fileparser_GetToken(hfp->efp, &tok, &toklen)) != eslOK) ESL_XFAIL(status, errbuf, "internal error in esl_fileparser_GetToken()"); if (strcmp("HMMER3/f", tok) == 0) { hfp->format = p7_HMMFILE_3f; hfp->parser = read_asc30hmm; } else if (strcmp("HMMER3/e", tok) == 0) { hfp->format = p7_HMMFILE_3e; hfp->parser = read_asc30hmm; } else if (strcmp("HMMER3/d", tok) == 0) { hfp->format = p7_HMMFILE_3d; hfp->parser = read_asc30hmm; } else if (strcmp("HMMER3/c", tok) == 0) { hfp->format = p7_HMMFILE_3c; hfp->parser = read_asc30hmm; } else if (strcmp("HMMER3/b", tok) == 0) { hfp->format = p7_HMMFILE_3b; hfp->parser = read_asc30hmm; } else if (strcmp("HMMER3/a", tok) == 0) { hfp->format = p7_HMMFILE_3a; hfp->parser = read_asc30hmm; } else if (strcmp("HMMER2.0", tok) == 0) { hfp->format = p7_HMMFILE_20; hfp->parser = read_asc20hmm; } else ESL_XFAIL(eslEFORMAT, errbuf, "Format tag is '%s': unrecognized.\nCurrent H3 format is 'HMMER3/f'. Previous H2/H3 formats also supported.", tok); } *ret_hfp = hfp; return eslOK; ERROR: if (cmd != NULL) free(cmd); if (dbfile != NULL) free(dbfile); if (envfile != NULL) free(envfile); if (hfp != NULL) p7_hmmfile_Close(hfp); *ret_hfp = NULL; if (status == eslEMEM) return status; else if (status == eslENOTFOUND) return status; else return eslEFORMAT; } /* Function: p7_hmmfile_Close() * * Purpose: Closes an open HMM file . * * Returns: (void) */ void p7_hmmfile_Close(P7_HMMFILE *hfp) { if (hfp == NULL) return; #ifdef HAVE_POPEN /* gzip functionality */ if (hfp->do_gzip && hfp->f != NULL) pclose(hfp->f); #endif if (!hfp->do_gzip && !hfp->do_stdin && hfp->f != NULL) fclose(hfp->f); if (hfp->ffp != NULL) fclose(hfp->ffp); if (hfp->pfp != NULL) fclose(hfp->pfp); if (hfp->fname != NULL) free(hfp->fname); if (hfp->efp != NULL) esl_fileparser_Destroy(hfp->efp); if (hfp->ssi != NULL) esl_ssi_Close(hfp->ssi); #ifdef HMMER_THREADS if (hfp->syncRead) pthread_mutex_destroy (&hfp->readMutex); #endif free(hfp); } #ifdef HMMER_THREADS /* Function: p7_hmmfile_CreateLock() * * Purpose: Create a lock to synchronize readers * * Returns: on success. */ int p7_hmmfile_CreateLock(P7_HMMFILE *hfp) { int status; if (hfp == NULL) return eslEINVAL; /* make sure the lock is not created twice */ if (!hfp->syncRead) { hfp->syncRead = TRUE; status = pthread_mutex_init(&hfp->readMutex, NULL); if (status != 0) goto ERROR; } return eslOK; ERROR: hfp->syncRead = FALSE; return eslFAIL; } #endif /*----------------- end, P7_HMMFILE object ----------------------*/ /***************************************************************** * 2. Writing HMMER3 HMM files. *****************************************************************/ static int multiline(FILE *fp, const char *pfx, char *s); static int multilineString(char **str, const char *pfx, char *s, int *offset); static int printprob(FILE *fp, int fieldwidth, float p); static int probToString(char **str , int fieldwidth, float p, int offset); /* Function: p7_hmmfile_WriteASCII() * Synopsis: Write a HMMER3 ASCII save file. * * Purpose: Write a profile HMM in an ASCII save file format to * an open stream . * * Legacy file formats in the 3.x release series are * supported by specifying the code. Pass <-1> to * use the default current standard format; pass a valid * code such as to select a specific * format. * * Args: fp - open stream for writing * format - -1 for default format, or a 3.x format code like * hmm - HMM to save * * Returns: on success. * * Throws: if isn't a valid 3.0 format code. * on write error. */ int p7_hmmfile_WriteASCII(FILE *fp, int format, P7_HMM *hmm) { int k, x; int status; if (format == -1) format = p7_HMMFILE_3f; if (format == p7_HMMFILE_3f) { if (fprintf(fp, "HMMER3/f [%s | %s]\n", HMMER_VERSION, HMMER_DATE) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed");} else if (format == p7_HMMFILE_3e) { if (fprintf(fp, "HMMER3/e [%s | %s; reverse compatibility mode]\n", HMMER_VERSION, HMMER_DATE) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } else if (format == p7_HMMFILE_3d) { if (fprintf(fp, "HMMER3/d [%s | %s; reverse compatibility mode]\n", HMMER_VERSION, HMMER_DATE) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } else if (format == p7_HMMFILE_3c) { if (fprintf(fp, "HMMER3/c [%s | %s; reverse compatibility mode]\n", HMMER_VERSION, HMMER_DATE) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } else if (format == p7_HMMFILE_3b) { if (fprintf(fp, "HMMER3/b [%s | %s; reverse compatibility mode]\n", HMMER_VERSION, HMMER_DATE) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } else if (format == p7_HMMFILE_3a) { if (fprintf(fp, "HMMER3/a [%s | %s; reverse compatibility mode]\n", HMMER_VERSION, HMMER_DATE) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } else ESL_EXCEPTION(eslEINVAL, "invalid HMM file format code"); if (fprintf(fp, "NAME %s\n", hmm->name) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (hmm->acc && fprintf(fp, "ACC %s\n", hmm->acc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (hmm->desc && fprintf(fp, "DESC %s\n", hmm->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (fprintf(fp, "LENG %d\n", hmm->M) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (format >= p7_HMMFILE_3c && hmm->max_length > 0 && fprintf(fp, "MAXL %d\n", hmm->max_length) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (fprintf(fp, "ALPH %s\n", esl_abc_DecodeType(hmm->abc->type)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (fprintf(fp, "RF %s\n", (hmm->flags & p7H_RF) ? "yes" : "no") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (format >= p7_HMMFILE_3f && fprintf(fp, "MM %s\n", (hmm->flags & p7H_MMASK) ? "yes" : "no") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (format >= p7_HMMFILE_3e && fprintf(fp, "CONS %s\n", (hmm->flags & p7H_CONS) ? "yes" : "no") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (fprintf(fp, "CS %s\n", (hmm->flags & p7H_CS) ? "yes" : "no") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (fprintf(fp, "MAP %s\n", (hmm->flags & p7H_MAP) ? "yes" : "no") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (hmm->ctime != NULL) { if ( fprintf (fp, "DATE %s\n", hmm->ctime) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } if (hmm->comlog != NULL) { if ( (status = multiline(fp, "COM ", hmm->comlog)) != eslOK) return status; } if (hmm->nseq >= 0) { if ( fprintf (fp, "NSEQ %d\n", hmm->nseq) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } if (hmm->eff_nseq >= 0) { if ( fprintf (fp, "EFFN %f\n", hmm->eff_nseq) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } if (hmm->flags & p7H_CHKSUM) { if ( fprintf (fp, "CKSUM %u\n", hmm->checksum) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } /* unsigned 32-bit */ if (hmm->abc->type == eslRNA || hmm->abc->type == eslDNA ) { if ((hmm->flags & p7H_GA) && fprintf(fp, "GA %.2f\n", hmm->cutoff[p7_GA1]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if ((hmm->flags & p7H_TC) && fprintf(fp, "TC %.2f\n", hmm->cutoff[p7_TC1]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if ((hmm->flags & p7H_NC) && fprintf(fp, "NC %.2f\n", hmm->cutoff[p7_NC1]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } else { if ((hmm->flags & p7H_GA) && fprintf(fp, "GA %.2f %.2f\n", hmm->cutoff[p7_GA1], hmm->cutoff[p7_GA2]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if ((hmm->flags & p7H_TC) && fprintf(fp, "TC %.2f %.2f\n", hmm->cutoff[p7_TC1], hmm->cutoff[p7_TC2]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if ((hmm->flags & p7H_NC) && fprintf(fp, "NC %.2f %.2f\n", hmm->cutoff[p7_NC1], hmm->cutoff[p7_NC2]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } if (hmm->flags & p7H_STATS) { if (format == p7_HMMFILE_3a) { /* reverse compatibility */ if (fprintf(fp, "STATS LOCAL VLAMBDA %f\n", hmm->evparam[p7_MLAMBDA]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (fprintf(fp, "STATS LOCAL VMU %f\n", hmm->evparam[p7_MMU]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (fprintf(fp, "STATS LOCAL FTAU %f\n", hmm->evparam[p7_FTAU]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } else { /* default stats lines */ if (fprintf(fp, "STATS LOCAL MSV %8.4f %8.5f\n", hmm->evparam[p7_MMU], hmm->evparam[p7_MLAMBDA]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (fprintf(fp, "STATS LOCAL VITERBI %8.4f %8.5f\n", hmm->evparam[p7_VMU], hmm->evparam[p7_VLAMBDA]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (fprintf(fp, "STATS LOCAL FORWARD %8.4f %8.5f\n", hmm->evparam[p7_FTAU], hmm->evparam[p7_FLAMBDA]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } } if (fprintf(fp, "HMM ") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); for (x = 0; x < hmm->abc->K; x++) { if (fprintf(fp, " %c ", hmm->abc->sym[x]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } if (fputc('\n', fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (fprintf(fp, " %8s %8s %8s %8s %8s %8s %8s\n", "m->m", "m->i", "m->d", "i->m", "i->i", "d->m", "d->d") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (hmm->flags & p7H_COMPO) { if (fprintf(fp, " COMPO ") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); for (x = 0; x < hmm->abc->K; x++) { if ( (status = printprob(fp, 8, hmm->compo[x])) != eslOK) return status; } if (fputc('\n', fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } /* node 0 is special: insert emissions, and B-> transitions */ if (fputs(" ", fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); for (x = 0; x < hmm->abc->K; x++) { if ( (status = printprob(fp, 8, hmm->ins[0][x])) != eslOK) return status; } if (fputc('\n', fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (fputs(" ", fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); for (x = 0; x < p7H_NTRANSITIONS; x++) { if ( (status = printprob(fp, 8, hmm->t[0][x])) != eslOK) return status; } if (fputc('\n', fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); for (k = 1; k <= hmm->M; k++) { /* Line 1: k; match emissions; optional map, RF, MM, CS */ if (fprintf(fp, " %6d ", k) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); for (x = 0; x < hmm->abc->K; x++) { if ( (status = printprob(fp, 8, hmm->mat[k][x])) != eslOK) return status; } if (hmm->flags & p7H_MAP) { if (fprintf(fp, " %6d", hmm->map[k]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } else { if (fprintf(fp, " %6s", "-") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } if (format >= p7_HMMFILE_3e) { x = hmm->consensus[k]; if (format >= p7_HMMFILE_3f && (hmm->flags & p7H_MMASK) && hmm->mm[k] == 'm' ) x = tolower(hmm->abc->sym[hmm->abc->Kp-3]); if (fprintf(fp, " %c", (hmm->flags & p7H_CONS) ? x : '-') < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } if (hmm->rf && hmm->rf[k] == ' ') ESL_EXCEPTION_SYS(eslEWRITE, "input alignment contains an RF line with spaces"); if (fprintf(fp, " %c", (hmm->flags & p7H_RF) ? hmm->rf[k] : '-') < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (format >= p7_HMMFILE_3f) { if (fprintf(fp, " %c", (hmm->flags & p7H_MMASK) ? hmm->mm[k] : '-') < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } if (fprintf(fp, " %c\n", (hmm->flags & p7H_CS) ? hmm->cs[k] : '-') < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); /* Line 2: insert emissions */ if (fputs(" ", fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); for (x = 0; x < hmm->abc->K; x++) { if ( (status = printprob(fp, 8, hmm->ins[k][x])) != eslOK) return status; } /* Line 3: transitions */ if (fputs("\n ", fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); for (x = 0; x < p7H_NTRANSITIONS; x++) { if ( (status = printprob(fp, 8, hmm->t[k][x])) != eslOK) return status; } if (fputc('\n', fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } if (fputs("//\n", fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); return eslOK; } /* Function: p7_hmmfile_WriteToString() * Synopsis: Write a HMMER3 HMM to char. * * Purpose: Write a profile HMM in to string in ASCII * format. * * Should produce same output as p7_hmmfile_WriteASCII * * Legacy file formats in the 3.x release series are * supported by specifying the code. Pass <-1> to * use the default current standard format; pass a valid * code such as to select a specific * format. * * Calling function is responsible for freeing the returned string. * * Args: ascii_hmm - char pointer where the string will be allocated and set * format - -1 for default format, or a 3.x format code like * hmm - HMM to save * * Returns: on success or on error. */ int p7_hmmfile_WriteToString(char **ascii_hmm, int format, P7_HMM *hmm) { int k, x; int status; int offset; int coffset = 0; /* These 3 chars and int are used in the size determiantion */ int size; int n = 0; char buff[100]; char *end = NULL; char *sptr; char *ret_hmm; if (format == -1) format = p7_HMMFILE_3f; /* In this block of code, interogate the HMM to work out the amount of memory needed to write it out as an ASCII string */ /* The number in each row is the number of fixed chars, inlcuding the '\n' */ /* The header block containing the tag/value pairs */ size = 50 + strlen(HMMER_VERSION) + strlen(HMMER_DATE); /* HMMER version text */ size += 7 + strlen(hmm->name); /* NAME line */ size += (hmm->acc ? ( 7 + strlen(hmm->acc)) : 0); /* ACC line, if present */ size += (hmm->desc ? ( 7 + strlen(hmm->desc)) : 0); /* DESC line, if present */ size += 7 + sprintf(buff, "%d", hmm->M); /*LENG tag, we determine size of field later */ size += ((format >= p7_HMMFILE_3c && hmm->max_length) ? 7 + sprintf(buff, "%d", hmm->max_length) : 0); /*MAXL line, later formats only, optional */ size += 7 + strlen( esl_abc_DecodeType(hmm->abc->type)); /*ALPH tag */ size += 10; /*RF tag, yes/no */ size += (format >= p7_HMMFILE_3f ? 10 : 0 ); /*MM line, only later formats*/ size += (format >= p7_HMMFILE_3e ? 10 : 0 ); /*CONS line, only later formats*/ size += 10; /*Consensus secondary structure lines */ size += 10; /*MAP line*/ size += (hmm->ctime != NULL ? (7 + strlen(hmm->ctime)) : 0); /*DATE line*/ /* Complicated as it can cover multiple lines */ if(hmm->comlog != NULL){ /* Determine the number of COM lines by counting the number of '\n' */ sptr = hmm->comlog; do { n++; /* last line should not have \n, so count before to get count */ end = strchr(sptr, '\n'); sptr += (end - sptr) +1; } while (end != NULL && *sptr != '\0'); size += ((sprintf(buff, "%d", n) + 8) * n); /*length of all the COM tags*/ size += strlen(hmm->comlog); } size += (hmm->nseq >= 0 ? 7 + sprintf(buff, "%d", hmm->nseq) : 0); /* NSEQ line */ size += (hmm->eff_nseq >= 0 ? 7 + sprintf(buff, "%f", hmm->eff_nseq) : 0); /* EFFN line */ size += (hmm->flags & p7H_CHKSUM ? 7 + sprintf(buff, "%u", hmm->checksum) : 0); /*CKSUM line */ /* Thresholds section */ size += ((hmm->flags & p7H_GA) ? 8 + sprintf(buff, "%.2f", hmm->cutoff[p7_GA1])+sprintf(buff, "%.2f", hmm->cutoff[p7_GA2]) : 0); size += ((hmm->flags & p7H_TC) ? 8 + sprintf(buff, "%.2f", hmm->cutoff[p7_TC1])+sprintf(buff, "%.2f", hmm->cutoff[p7_TC2]) : 0); size += ((hmm->flags & p7H_NC) ? 8 + sprintf(buff, "%.2f", hmm->cutoff[p7_NC1])+sprintf(buff, "%.2f", hmm->cutoff[p7_NC2]) : 0); /* E-value stats */ size += ((hmm->flags & p7H_STATS) ? ((format == p7_HMMFILE_3a) ? ( 75 + sprintf(buff, "%f", hmm->evparam[p7_MLAMBDA]) + sprintf(buff, "%f", hmm->evparam[p7_MMU]) + sprintf(buff, "%f", hmm->evparam[p7_FTAU])) : ( 75 + sprintf(buff, "%8.4f", hmm->evparam[p7_MMU]) + sprintf(buff, "%8.5f", hmm->evparam[p7_MLAMBDA]) + sprintf(buff, "%8.4f", hmm->evparam[p7_VMU]) + sprintf(buff, "%8.5f", hmm->evparam[p7_VLAMBDA]) + sprintf(buff, "%8.4f", hmm->evparam[p7_FTAU]) + sprintf(buff, "%8.5f", hmm->evparam[p7_FLAMBDA]))) : 0); /* No STATS */ /* Now on to the body of the HMM */ size += 9 + (hmm->abc->K * 9); /* Alphabet labels */ size += 71; /* Transitions line labels */ size += ((hmm->flags & p7H_COMPO) ? 9 + (hmm->abc->K * 9) : 0); /* Composition line */ /* node 0 */ size += 9 + (hmm->abc->K * 9); /* Insert emissions */ size += 9 + ( p7H_NTRANSITIONS * 9); /* Transitions */ /* Matrix of probabilities */ size += (hmm->M * ( 9 + (hmm->abc->K * 9 ) + 7 + 8 )); /* Line 1: k; match emissions; map (although optional just going to add it, RF, CS, MM) */ size += (hmm->M * ( 9 + (hmm->abc->K * 9 ))) ; /* Line 2: insert emissions */ size += (hmm->M * ( 9 + (p7H_NTRANSITIONS * 9) )); /* Line 3: transitions */ size += 3; /* Final terminating line */ /* Now allocate the memory for the HMM string */ ret_hmm = malloc(sizeof(char) * (size)); /* Now added the HMM text to the string, remembering to offset the position */ /* If anything fails, return an eslEWRITE error */ /* Header block */ if (format == p7_HMMFILE_3f) { if ((offset = sprintf(ret_hmm, "HMMER3/f [%s | %s]\n", HMMER_VERSION, HMMER_DATE)) < 0) return eslEWRITE; } else if (format == p7_HMMFILE_3e) { if ((offset = sprintf(ret_hmm, "HMMER3/e [%s | %s; reverse compatibility mode]\n", HMMER_VERSION, HMMER_DATE)) < 0) return eslEWRITE; } else if (format == p7_HMMFILE_3d) { if ((offset = sprintf(ret_hmm, "HMMER3/d [%s | %s; reverse compatibility mode]\n", HMMER_VERSION, HMMER_DATE)) < 0) return eslEWRITE; } else if (format == p7_HMMFILE_3c) { if ((offset = sprintf(ret_hmm, "HMMER3/c [%s | %s; reverse compatibility mode]\n", HMMER_VERSION, HMMER_DATE)) < 0) return eslEWRITE; } else if (format == p7_HMMFILE_3b) { if ((offset = sprintf(ret_hmm, "HMMER3/b [%s | %s; reverse compatibility mode]\n", HMMER_VERSION, HMMER_DATE)) < 0) return eslEWRITE; } else if (format == p7_HMMFILE_3a) { if ((offset = sprintf(ret_hmm, "HMMER3/a [%s | %s; reverse compatibility mode]\n", HMMER_VERSION, HMMER_DATE)) < 0) return eslEWRITE; } else return eslEINVAL; coffset = offset; if ((offset = sprintf(ret_hmm + coffset, "NAME %s\n", hmm->name)) < 0) return eslEWRITE; coffset += offset; if (hmm->acc){ if((offset = sprintf(ret_hmm + coffset, "ACC %s\n", hmm->acc)) < 0) return eslEWRITE; coffset += offset; } if (hmm->desc){ if ((offset = sprintf(ret_hmm + coffset, "DESC %s\n", hmm->desc)) < 0) return eslEWRITE; coffset += offset; } if ((offset = sprintf(ret_hmm + coffset, "LENG %d\n", hmm->M)) < 0) return eslEWRITE; coffset += offset; if (format >= p7_HMMFILE_3c && hmm->max_length > 0){ if((offset = sprintf(ret_hmm + coffset, "MAXL %d\n", hmm->max_length)) < 0) return eslEWRITE; coffset += offset; } if ((offset = sprintf(ret_hmm + coffset, "ALPH %s\n", esl_abc_DecodeType(hmm->abc->type))) < 0) return eslEWRITE; coffset += offset; if ((offset = sprintf(ret_hmm+coffset, "RF %s\n", (hmm->flags & p7H_RF) ? "yes" : "no")) < 0) return eslEWRITE; coffset += offset; if ((format >= p7_HMMFILE_3f)){ if ((offset = sprintf(ret_hmm+coffset, "MM %s\n", (hmm->flags & p7H_MMASK) ? "yes" : "no")) < 0) return eslEWRITE; coffset += offset; } if ((format >= p7_HMMFILE_3e)){ if((offset = sprintf(ret_hmm+coffset, "CONS %s\n", (hmm->flags & p7H_CONS) ? "yes" : "no")) < 0) return eslEWRITE; coffset += offset; } if ((offset = sprintf(ret_hmm+coffset, "CS %s\n", (hmm->flags & p7H_CS) ? "yes" : "no")) < 0) return eslEWRITE; coffset += offset; if ((offset = sprintf(ret_hmm+coffset, "MAP %s\n", (hmm->flags & p7H_MAP) ? "yes" : "no")) < 0) return eslEWRITE; coffset += offset; if (hmm->ctime != NULL){ if((offset = sprintf(ret_hmm + coffset, "DATE %s\n", hmm->ctime)) < 0) return eslEWRITE; coffset += offset; } if (hmm->comlog != NULL) { if ( (status = multilineString(&ret_hmm, "COM ", hmm->comlog, &coffset)) != eslOK) return status; } if (hmm->nseq >= 0){ if((offset = sprintf(ret_hmm + coffset, "NSEQ %d\n", hmm->nseq)) < 0) return eslEWRITE; coffset += offset; } if (hmm->eff_nseq >= 0){ if((offset = sprintf(ret_hmm + coffset, "EFFN %f\n", hmm->eff_nseq)) < 0) return eslEWRITE; coffset += offset; } if (hmm->flags & p7H_CHKSUM) { if ((offset = sprintf (ret_hmm + coffset, "CKSUM %u\n", hmm->checksum)) < 0) return eslEWRITE; coffset += offset; } /* unsigned 32-bit */ /* Thresholds */ if ((hmm->flags & p7H_GA)){ if(( offset = sprintf(ret_hmm + coffset , "GA %.2f %.2f\n", hmm->cutoff[p7_GA1], hmm->cutoff[p7_GA2])) < 0) return eslEWRITE; coffset += offset; } if ((hmm->flags & p7H_TC)){ if(( offset = sprintf(ret_hmm + coffset , "TC %.2f %.2f\n", hmm->cutoff[p7_TC1], hmm->cutoff[p7_TC2])) < 0) return eslEWRITE; coffset += offset; } if ((hmm->flags & p7H_NC)){ if(( offset = sprintf(ret_hmm + coffset , "NC %.2f %.2f\n", hmm->cutoff[p7_NC1], hmm->cutoff[p7_NC2])) < 0) return eslEWRITE; coffset += offset; } /* E-value stats */ if (hmm->flags & p7H_STATS) { if (format == p7_HMMFILE_3a){ if ((offset =sprintf(ret_hmm + coffset, "STATS LOCAL VLAMBDA %f\n", hmm->evparam[p7_MLAMBDA])) < 0) return eslEWRITE; coffset += offset; if ((offset =sprintf(ret_hmm + coffset, "STATS LOCAL VMU %f\n", hmm->evparam[p7_MMU])) < 0) return eslEWRITE; coffset += offset; if ((offset =sprintf(ret_hmm + coffset, "STATS LOCAL FTAU %f\n", hmm->evparam[p7_FTAU])) < 0) return eslEWRITE; coffset += offset; }else{ if ((offset =sprintf(ret_hmm + coffset, "STATS LOCAL MSV %8.4f %8.5f\n", hmm->evparam[p7_MMU], hmm->evparam[p7_MLAMBDA])) < 0) return eslEWRITE; coffset += offset; if ((offset = sprintf(ret_hmm + coffset, "STATS LOCAL VITERBI %8.4f %8.5f\n", hmm->evparam[p7_VMU], hmm->evparam[p7_VLAMBDA])) < 0) return eslEWRITE; coffset += offset; if ((offset = sprintf(ret_hmm + coffset, "STATS LOCAL FORWARD %8.4f %8.5f\n", hmm->evparam[p7_FTAU], hmm->evparam[p7_FLAMBDA])) < 0) return eslEWRITE; coffset += offset; } } /* HMM body */ if ((offset = sprintf(ret_hmm + coffset, "HMM ")) < 0) return eslEWRITE; coffset += offset; for (x = 0; x < hmm->abc->K; x++){ if ((offset = sprintf(ret_hmm + coffset, " %c ", hmm->abc->sym[x])) < 0) return eslEWRITE; coffset += offset; } if((offset = sprintf(ret_hmm + coffset, "\n")) < 0) return eslEWRITE; coffset += offset; if ((offset = sprintf(ret_hmm + coffset, " %8s %8s %8s %8s %8s %8s %8s\n", "m->m", "m->i", "m->d", "i->m", "i->i", "d->m", "d->d")) < 0) return eslEWRITE; coffset += offset; if (hmm->flags & p7H_COMPO) { if ((offset = sprintf(ret_hmm + coffset, " COMPO ")) < 0) return eslEWRITE; coffset += offset; for (x = 0; x < hmm->abc->K; x++){ if ( (status = probToString(&ret_hmm, 8, hmm->compo[x], coffset)) != eslOK) return status; coffset += 9; } if((offset = sprintf(ret_hmm + coffset, "\n")) < 0) return eslEWRITE; coffset += offset; } /* node 0 is special: insert emissions, and B-> transitions */ if ((offset = sprintf(ret_hmm + coffset, " ")) < 0) return eslEWRITE; coffset += offset; for (x = 0; x < hmm->abc->K; x++){ if ( (status = probToString(&ret_hmm, 8, hmm->ins[0][x], coffset)) != eslOK) return status; coffset += 9; } if((offset = sprintf(ret_hmm + coffset, "\n")) < 0) return eslEWRITE; coffset += offset; if ((offset = sprintf(ret_hmm + coffset, " ")) < 0) return eslEWRITE; coffset += offset; for (x = 0; x < p7H_NTRANSITIONS; x++){ if ( (status = probToString(&ret_hmm, 8, hmm->t[0][x], coffset)) != eslOK) return status; coffset += 9; } if((offset = sprintf(ret_hmm + coffset, "\n")) < 0) return eslEWRITE; coffset += offset; for (k = 1; k <= hmm->M; k++) { /* Line 1: k; match emissions; optional map, RF, CS */ if ((offset = sprintf(ret_hmm + coffset, " %6d ", k)) < 0) return eslEWRITE; coffset += offset; for (x = 0; x < hmm->abc->K; x++){ if ( (status = probToString(&ret_hmm, 8, hmm->mat[k][x], coffset)) != eslOK) return status; coffset += 9; } if (hmm->flags & p7H_MAP) { if ((offset = sprintf(ret_hmm + coffset, " %6d", hmm->map[k])) < 0) return eslEWRITE; coffset += offset; } else { if ((offset = sprintf(ret_hmm + coffset, " %6s", "-")) < 0) return eslEWRITE; coffset += offset; } if (format >= p7_HMMFILE_3e) { if ((offset = sprintf(ret_hmm + coffset, " %c", (hmm->flags & p7H_CONS) ? hmm->consensus[k] : '-')) < 0) return eslEWRITE; coffset += offset; } if ((offset = sprintf(ret_hmm + coffset, " %c", (hmm->flags & p7H_RF) ? hmm->rf[k] : '-')) < 0) return eslEWRITE; coffset += offset; if (format >= p7_HMMFILE_3f) { if ((offset = sprintf(ret_hmm + coffset, " %c", (hmm->flags & p7H_MMASK) ? hmm->mm[k] : '-')) < 0) return eslEWRITE; coffset += offset; } if ((offset = sprintf(ret_hmm + coffset, " %c\n", (hmm->flags & p7H_CS) ? hmm->cs[k] : '-')) < 0) return eslEWRITE; coffset += offset; /* Line 2: insert emissions */ if ((offset = sprintf(ret_hmm + coffset, " ")) < 0) return eslEWRITE; coffset += offset; for (x = 0; x < hmm->abc->K; x++){ if( (status = probToString(&ret_hmm, 8, hmm->ins[k][x], coffset)) != eslOK) return status; coffset += 9; /*Fieldwidth + 1 for space*/ } /* Line 3: transitions */ if ((offset = sprintf(ret_hmm + coffset, "\n ")) < 0) return eslEWRITE; coffset += offset; for (x = 0; x < p7H_NTRANSITIONS; x++){ if ( (status = probToString(&ret_hmm, 8, hmm->t[k][x], coffset)) != eslOK) return status; coffset += 9;/*Fieldwidth + 1 for space*/ } if ((offset = sprintf(ret_hmm + coffset, "\n")) < 0) return eslEWRITE; coffset += offset; } if (sprintf(ret_hmm + coffset, "//\n") < 0) return eslEWRITE; *ascii_hmm = ret_hmm; return eslOK; } /* Function: p7_hmmfile_WriteBinary() * * Purpose: Writes an HMM to a file in HMMER3 binary format. * * Legacy binary file formats in the 3.x release series are * supported by specifying the code. Pass <-1> to * use the default current standard format; pass a valid * code such as to select a specific * binary format. * * Returns: on success. * * Throws: if isn't a valid 3.0 format code. * on write error. */ int p7_hmmfile_WriteBinary(FILE *fp, int format, P7_HMM *hmm) { int k; int status; if (format == -1) format = p7_HMMFILE_3f; /* Legacy: p7H_{ACC, DESC} flags used to be used to indicate * whether optional acc, desc were present. Now we just use * the convention. The reason to use the flags was for * saving binary files - we thought we needed to know whether * the acc, desc were present in the binary file before trying * to read them, and having as one of the first * data fields in the file solved that problem. It's not * necessary - the {read,write}_bin_string() convention is fine. * But write_bin_string() writes a 0 for length for a NULL string, * whereas we weren't writing anything with the previous * flag convention - so to maintain consistency with previous * HMMER binary save files, we use the HMM flags fields here * and in binary file reads. [xref J5/114] * * If binary format is ever revised substantially - revisit this * issue too - and remove the flags. */ if (hmm->desc == NULL) hmm->flags &= ~p7H_DESC; else hmm->flags |= p7H_DESC; if (hmm->acc == NULL) hmm->flags &= ~p7H_ACC; else hmm->flags |= p7H_ACC; /* ye olde magic number */ if (format == p7_HMMFILE_3f) { if (fwrite((char *) &(v3f_magic), sizeof(uint32_t), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); } else if (format == p7_HMMFILE_3e) { if (fwrite((char *) &(v3e_magic), sizeof(uint32_t), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); } else if (format == p7_HMMFILE_3d) { if (fwrite((char *) &(v3d_magic), sizeof(uint32_t), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); } else if (format == p7_HMMFILE_3c) { if (fwrite((char *) &(v3c_magic), sizeof(uint32_t), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); } else if (format == p7_HMMFILE_3b) { if (fwrite((char *) &(v3b_magic), sizeof(uint32_t), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); } else if (format == p7_HMMFILE_3a) { if (fwrite((char *) &(v3a_magic), sizeof(uint32_t), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); } else ESL_EXCEPTION(eslEINVAL, "invalid HMM file format code"); /* info necessary for sizes of things */ if (fwrite((char *) &(hmm->flags), sizeof(int), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); if (fwrite((char *) &(hmm->M), sizeof(int), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); if (fwrite((char *) &(hmm->abc->type), sizeof(int), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); /* The core model probabilities */ for (k = 1; k <= hmm->M; k++) /* match emissions (0) 1..M */ if (fwrite((char *) hmm->mat[k], sizeof(float), hmm->abc->K, fp) != hmm->abc->K) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); for (k = 0; k <= hmm->M; k++) /* insert emissions 0..M */ if (fwrite((char *) hmm->ins[k], sizeof(float), hmm->abc->K, fp) != hmm->abc->K) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); for (k = 0; k <= hmm->M; k++) /* note: start from 0, to include B state */ if (fwrite((char *) hmm->t[k], sizeof(float), 7, fp) != 7) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); /* annotation section */ if ( (status = write_bin_string(fp, hmm->name)) != eslOK) return status; if ((hmm->flags & p7H_ACC) && (status = write_bin_string(fp, hmm->acc)) != eslOK) return status; if ((hmm->flags & p7H_DESC) && (status = write_bin_string(fp, hmm->desc)) != eslOK) return status; if ((hmm->flags & p7H_RF) && (fwrite((char *) hmm->rf, sizeof(char), hmm->M+2, fp) != hmm->M+2)) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); /* +2: 1..M and trailing \0 */ if ((hmm->flags & p7H_MMASK)&& (fwrite((char *) hmm->mm, sizeof(char), hmm->M+2, fp) != hmm->M+2)) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); /* +2: 1..M and trailing \0 */ if ((hmm->flags & p7H_CONS) && (fwrite((char *) hmm->consensus, sizeof(char), hmm->M+2, fp) != hmm->M+2)) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); /* don't need to test for >=3e format; p7H_CONS flag suffices (didn't exist pre-3e) */ if ((hmm->flags & p7H_CS) && (fwrite((char *) hmm->cs, sizeof(char), hmm->M+2, fp) != hmm->M+2)) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); if ((hmm->flags & p7H_CA) && (fwrite((char *) hmm->ca, sizeof(char), hmm->M+2, fp) != hmm->M+2)) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); if ( (status = write_bin_string(fp, hmm->comlog)) != eslOK) return status; if ( fwrite((char *) &(hmm->nseq), sizeof(int), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); if ( fwrite((char *) &(hmm->eff_nseq), sizeof(float), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); if (format >= p7_HMMFILE_3c && fwrite((char *) &(hmm->max_length), sizeof(int), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); if ( (status = write_bin_string(fp, hmm->ctime)) != eslOK) return status; if ((hmm->flags & p7H_MAP) && (fwrite((char *) hmm->map, sizeof(int), hmm->M+1, fp) != hmm->M+1)) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); if ( fwrite((char *)&(hmm->checksum),sizeof(uint32_t), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); /* E-value parameters and Pfam cutoffs */ if (format == p7_HMMFILE_3a) { /* reverse compatibility; 3/a format stored LAMBDA, MU, TAU */ float oldparam[3]; oldparam[0] = hmm->evparam[p7_MLAMBDA]; oldparam[1] = hmm->evparam[p7_MMU]; oldparam[2] = hmm->evparam[p7_FTAU]; if (fwrite((char *) oldparam, sizeof(float), 3, fp) != 3) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); } else { /* default stats values */ if (fwrite((char *) hmm->evparam, sizeof(float), p7_NEVPARAM, fp) != p7_NEVPARAM) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); } if (fwrite((char *) hmm->cutoff, sizeof(float), p7_NCUTOFFS, fp) != p7_NCUTOFFS) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); if ((hmm->flags & p7H_COMPO) && (fwrite((char *) hmm->compo, sizeof(float), hmm->abc->K, fp) != hmm->abc->K)) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); return eslOK; } /*----------------- end, save file output ----------------------*/ /***************************************************************** * 3. API for reading profile HMM files in various formats. *****************************************************************/ /* Function: p7_hmmfile_Read() * * Purpose: Read the next HMM from open save file , and * optionally return this newly allocated HMM in . * (The optional return is so that an application is * only interested in whether the file contains a valid * HMM or not -- for example, to verify that a file contains * only a single HMM instead of a database of them.) * * Caller may or may not already know what alphabet the HMM * is expected to be in. A reference to the pointer to the * current alphabet is passed in <*ret_abc>. If the alphabet * is unknown, pass <*ret_abc = NULL>, and when the * new HMM is read, an appropriate new alphabet object is * allocated and passed back to the caller in <*ret_abc>. * If the alphabet is already known, points to * that object ptr, and the new HMM's alphabet type is * verified to agree with it. This mechanism allows an * application to let the first HMM determine the alphabet * type for the application, while still keeping the * alphabet under the application's scope of control. * * Returns: on success, and the newly allocated HMM is * optionally returned via . Additionally, if * pointed to , it now points to a newly * allocated alphabet. * * Returns if no HMMs remain in the file; this may * indicate success or failure, depending on what the * caller is expecting. * * Returns on any format problems, including * premature end of data or bad magic at the start of a * binary file. An informative error message is left in * errbuf>; the filename (fully qualified, if opened * in a directory specified by an list) is in * fname>; and if efp> is non-, the HMM * file is in an ASCII text format, and the caller may also * obtain the line number at which the format error was * detected, in efp->linenumber>, and use it to * format informative output for a user. * * Returns if the caller passed a known * alphabet (a non- <*ret_abc>), but the alphabet * of the HMM doesn't match this expectation. * * Upon any return that is not , <*opt_hmm> is * and <*ret_abc> is left unchanged from what caller * passed it as. * * Throws: upon an allocation error. * on failure of other system calls, such * as file positioning functions ( or . */ int p7_hmmfile_Read(P7_HMMFILE *hfp, ESL_ALPHABET **ret_abc, P7_HMM **opt_hmm) { /* A call to SSI to remember file position may eventually go here. */ return (*hfp->parser)(hfp, ret_abc, opt_hmm); } /* Function: p7_hmmfile_PositionByKey() * Synopsis: Use SSI to reposition file to start of named HMM. * * Purpose: Reposition so tha next HMM we read will be the * one named (or accessioned) . * * Returns: on success. * * Returns if isn't found in the index for * . * * Returns is something goes wrong trying to * read the index, indicating a file format problem in the * SSI file. * * In the event of either error, the state of is left * unchanged. * * Throws: on allocation failure, or on system i/o * call failure, or if doesn't have an SSI * index or is not a seekable stream. */ int p7_hmmfile_PositionByKey(P7_HMMFILE *hfp, const char *key) { uint16_t fh; off_t offset; int status; if (hfp->ssi == NULL) ESL_EXCEPTION(eslEINVAL, "Need an open SSI index to call p7_hmmfile_PositionByKey()"); if ((status = esl_ssi_FindName(hfp->ssi, key, &fh, &offset, NULL, NULL)) != eslOK) return status; if (fseeko(hfp->f, offset, SEEK_SET) != 0) ESL_EXCEPTION(eslESYS, "fseek failed"); hfp->newly_opened = FALSE; /* because we're poised on the magic number, and must read it */ return eslOK; } /* Function: p7_hmmfile_Position() * Synopsis: Reposition file to start of named HMM. * * Purpose: Reposition so tha start of the requested HMM. * * Returns: on success. * * In the event of either error, the state of is left * unchanged. * * Throws: on system i/o call failure, or if * is not a seekable stream. */ int p7_hmmfile_Position(P7_HMMFILE *hfp, const off_t offset) { if (fseeko(hfp->f, offset, SEEK_SET) != 0) ESL_EXCEPTION(eslESYS, "fseek failed"); hfp->newly_opened = FALSE; /* because we're poised on the magic number, and must read it */ return eslOK; } /*------------------- end, input API ----------------------------*/ /***************************************************************** * 4. Private, specific profile HMM file format parsers. *****************************************************************/ /* Parsing save files from HMMER 3.x * All parsers follow the same API. * * Returns on success, and if is non-NULL, * <*opt_hmm> points at a newly allocated HMM. * * Additionally, if <*ret_abc> was NULL, then a new alphabet is * allocated according to the alphabet type of this HMM, and returned * thru . This allocation mechanism allows a main() * application that doesn't yet know its alphabet to determine the * alphabet when the first HMM is read, while also allowing an * application to allocate its own alphabet and assure that the * input HMMs are appropriate for that alphabet. * * Returns when no HMM remains in the file, indicating a * normal end-of-file. * * Two types of "normal error" may happen, which the caller must check * for. Returns on any save file format error, including * bad magic (i.e. this is not a HMMER file at all). Returns * if the expected alphabet (a non- alphabet * specified by <*ret_abc>) does not match the alphabet type of the * HMM. * * When these normal errors occur, the caller can construct its error * message from: * errbuf>: contains an informative error message * fname>: name of the HMM file (or '-' if STDIN) * and if efp> is non-, the HMM file is in ASCII text, * and the caller may also use: * efp->linenumber>: line on which the parse error occurred. * * Throws: on allocation error. * if a system i/o call fails. * In cases of error (including both thrown error and normal error), <*ret_abc> * is left in its original state as passed by the caller, and <*ret_hmm> is * returned . */ static int read_asc30hmm(P7_HMMFILE *hfp, ESL_ALPHABET **ret_abc, P7_HMM **opt_hmm) { ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; char *tag = NULL; char *tok1 = NULL; char *tok2 = NULL; char *tok3 = NULL; char *tok4 = NULL; int alphatype; int k,x; off_t offset = 0; int status; uint32_t statstracker = 0; hfp->errbuf[0] = '\0'; if (hfp->newly_opened) { offset = 0; hfp->newly_opened = FALSE; } else { /* Record where this HMM starts on disk */ if ((! hfp->do_stdin) && (! hfp->do_gzip) && (offset = ftello(hfp->f)) < 0) ESL_XEXCEPTION(eslESYS, "ftello() failed"); /* First line of file: "HMMER3/f". Allocate shell for HMM annotation information (we don't know K,M yet) */ if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) goto ERROR; /* EOF here is normal; could also be a thrown EMEM */ if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tag, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "unexpected absence of tokens on data line"); if (hfp->format == p7_HMMFILE_3f) { if (strcmp(tag, "HMMER3/f") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Didn't find HMMER3/f tag: bad format or not a HMMER save file?"); } else if (hfp->format == p7_HMMFILE_3e) { if (strcmp(tag, "HMMER3/e") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Didn't find HMMER3/e tag: bad format or not a HMMER save file?"); } else if (hfp->format == p7_HMMFILE_3d) { if (strcmp(tag, "HMMER3/d") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Didn't find HMMER3/d tag: bad format or not a HMMER save file?"); } else if (hfp->format == p7_HMMFILE_3c) { if (strcmp(tag, "HMMER3/c") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Didn't find HMMER3/c tag: bad format or not a HMMER save file?"); } else if (hfp->format == p7_HMMFILE_3b) { if (strcmp(tag, "HMMER3/b") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Didn't find HMMER3/b tag: bad format or not a HMMER save file?"); } else if (hfp->format == p7_HMMFILE_3a) { if (strcmp(tag, "HMMER3/a") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Didn't find HMMER3/a tag: bad format or not a HMMER save file?"); } else ESL_XFAIL(eslEFORMAT, hfp->errbuf, "No such HMM file format code: this shouldn't happen"); } if ((hmm = p7_hmm_CreateShell()) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failure, HMM shell"); hmm->offset = offset; /* Header section */ while ((status = esl_fileparser_NextLine(hfp->efp)) == eslOK) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tag, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of line"); if (strcmp(tag, "NAME") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No name found on NAME line"); p7_hmm_SetName(hmm, tok1); } else if (strcmp(tag, "ACC") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No accession found on ACC line"); p7_hmm_SetAccession(hmm, tok1); } else if (strcmp(tag, "DESC") == 0) { if ((status = esl_fileparser_GetRemainingLine(hfp->efp, &tok1)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No description found on DESC line"); p7_hmm_SetDescription(hmm, tok1); } else if (strcmp(tag, "LENG") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No model length found on LENG line"); if ((hmm->M = atoi(tok1)) == 0) ESL_XFAIL(status, hfp->errbuf, "Invalid model length %s on LENG line", tok1); } else if (hfp->format >= p7_HMMFILE_3c && strcmp(tag, "MAXL") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No max length found on MAXL line"); if ((hmm->max_length = atoi(tok1)) == 0) ESL_XFAIL(status, hfp->errbuf, "Invalid max length %s on MAXL line", tok1); } else if (strcmp(tag, "ALPH") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No alphabet type found on ALPH"); if ((alphatype = esl_abc_EncodeType(tok1)) == eslUNKNOWN) ESL_XFAIL(status, hfp->errbuf, "Unrecognized alphabet type %s", tok1); if (*ret_abc == NULL) { if ((abc = esl_alphabet_Create(alphatype)) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "Failed to create alphabet"); } else { if ((*ret_abc)->type != alphatype) ESL_XFAIL(eslEINCOMPAT,hfp->errbuf,"Alphabet type mismatch: was %s, but current HMM says %s", esl_abc_DecodeType( (*ret_abc)->type), tok1); abc = *ret_abc; } } else if (strcmp(tag, "RF") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No yes/no found for RF line"); if (strcasecmp(tok1, "yes") == 0) hmm->flags |= p7H_RF; else if (strcasecmp(tok1, "no") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "RF header line must say yes/no, not %s", tok1); } else if (strcmp(tag, "MM") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No yes/no found for MM line"); if (strcasecmp(tok1, "yes") == 0) hmm->flags |= p7H_MMASK; else if (strcasecmp(tok1, "no") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "MM header line must say yes/no, not %s", tok1); } else if (strcmp(tag, "CONS") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No yes/no found for CONS line"); if (strcasecmp(tok1, "yes") == 0) hmm->flags |= p7H_CONS; else if (strcasecmp(tok1, "no") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "CONS header line must say yes/no, not %s", tok1); } else if (strcmp(tag, "CS") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No yes/no found for CS line"); if (strcasecmp(tok1, "yes") == 0) hmm->flags |= p7H_CS; else if (strcasecmp(tok1, "no") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "CS header line must say yes/no, not %s", tok1); } else if (strcmp(tag, "MAP") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No yes/no found for MAP line"); if (strcasecmp(tok1, "yes") == 0) hmm->flags |= p7H_MAP; else if (strcasecmp(tok1, "no") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "MAP header line must say yes/no, not %s", tok1); } else if (strcmp(tag, "DATE") == 0) { if ((status = esl_fileparser_GetRemainingLine(hfp->efp, &tok1)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No date found on DATE line"); if (esl_strdup(tok1, -1, &(hmm->ctime)) != eslOK) ESL_XFAIL(eslEMEM, hfp->errbuf, "strdup() failed to set date"); } else if (strcmp(tag, "COM") == 0) { /* just skip the first token; it's something like [1], numbering the command lines */ if ((status = esl_fileparser_GetTokenOnLine (hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No command number on COM line"); if ((status = esl_fileparser_GetRemainingLine(hfp->efp, &tok1)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No command on COM line"); if (hmm->comlog == NULL) { if (esl_strdup(tok1, -1, &(hmm->comlog)) != eslOK) ESL_XFAIL(eslEMEM, hfp->errbuf, "esl_strdup() failed"); } else { if (esl_strcat(&(hmm->comlog), -1, "\n", -1) != eslOK) ESL_XFAIL(eslEMEM, hfp->errbuf, "esl_strcat() failed"); if (esl_strcat(&(hmm->comlog), -1, tok1, -1) != eslOK) ESL_XFAIL(eslEMEM, hfp->errbuf, "esl_strcat() failed"); } } else if (strcmp(tag, "NSEQ") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Nothing follows NSEQ tag"); if ((hmm->nseq = atoi(tok1)) == 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Invalid nseq on NSEQ line: should be integer, not %s", tok1); } else if (strcmp(tag, "EFFN") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Nothing follows EFFN tag"); if ((hmm->eff_nseq = atof(tok1)) <= 0.0f) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Invalid eff_nseq on EFFN line: should be a real number, not %s", tok1); } else if (strcmp(tag, "CKSUM") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Nothing follows CKSUM tag"); hmm->checksum = atoll(tok1); /* if atoi(), then you may truncate uint32_t checksums > 2^31-1 */ hmm->flags |= p7H_CHKSUM; } else if (strcmp(tag, "STATS") == 0) { if (hfp->format >= p7_HMMFILE_3b) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on STATS line"); /* LOCAL */ if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok2, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on STATS line"); /* MSV | VITERBI | FORWARD */ if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok3, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on STATS line"); /* mu | tau */ if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok4, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on STATS line"); /* lambda */ if (strcasecmp(tok1, "LOCAL") == 0) { if (strcasecmp(tok2, "MSV") == 0) { hmm->evparam[p7_MMU] = atof(tok3); hmm->evparam[p7_MLAMBDA] = atof(tok4); statstracker |= 0x1; } else if (strcasecmp(tok2, "VITERBI") == 0) { hmm->evparam[p7_VMU] = atof(tok3); hmm->evparam[p7_VLAMBDA] = atof(tok4); statstracker |= 0x2; } else if (strcasecmp(tok2, "FORWARD") == 0) { hmm->evparam[p7_FTAU] = atof(tok3); hmm->evparam[p7_FLAMBDA] = atof(tok4); statstracker |= 0x4; } else ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Failed to parse STATS, %s unrecognized as field 3", tok2); } else ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Failed to parse STATS, %s unrecognized as field 2", tok1); } else if (hfp->format == p7_HMMFILE_3a) /* reverse compatibility with 30a */ { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on STATS line"); /* LOCAL */ if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok2, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on STATS line"); /* VLAMBDA | VMU | FTAU */ if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok3, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on STATS line"); /* value */ if (strcasecmp(tok1, "LOCAL") == 0) { if (strcasecmp(tok2, "VLAMBDA") == 0) { hmm->evparam[p7_MLAMBDA] = hmm->evparam[p7_VLAMBDA] = hmm->evparam[p7_FLAMBDA] = atof(tok3); statstracker |= 0x1; } else if (strcasecmp(tok2, "VMU") == 0) { hmm->evparam[p7_MMU] = hmm->evparam[p7_VMU] = atof(tok3); statstracker |= 0x2; } else if (strcasecmp(tok2, "FTAU") == 0) { hmm->evparam[p7_FTAU] = atof(tok3); statstracker |= 0x4; } else ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Failed to parse STATS, %s unrecognized as field 3", tok2); } else ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Failed to parse STATS, %s unrecognized as field 2", tok1); } } else if (strcmp(tag, "GA") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on GA line"); hmm->cutoff[p7_GA1] = atof(tok1); if ( (abc->type == eslDNA || abc->type == eslRNA) ) { //if DNA, there's no need for a 2nd value (domain GA) hmm->cutoff[p7_GA2] = hmm->cutoff[p7_GA1]; } else { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok2, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on GA line"); hmm->cutoff[p7_GA2] = atof(tok2); } hmm->flags |= p7H_GA; } else if (strcmp(tag, "TC") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on TC line"); hmm->cutoff[p7_TC1] = atof(tok1); if ( (abc->type == eslDNA || abc->type == eslRNA) ) { //if DNA, there's no need for a 2nd value (domain GA) hmm->cutoff[p7_TC2] = hmm->cutoff[p7_TC1]; } else { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok2, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on TC line"); hmm->cutoff[p7_TC2] = atof(tok2); } hmm->flags |= p7H_TC; } else if (strcmp(tag, "NC") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on NC line"); hmm->cutoff[p7_NC1] = atof(tok1); if ( (abc->type == eslDNA || abc->type == eslRNA) ) { //if DNA, there's no need for a 2nd value (domain GA) hmm->cutoff[p7_NC2] = hmm->cutoff[p7_NC1]; } else { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok2, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on NC line"); hmm->cutoff[p7_NC2] = atof(tok2); } hmm->flags |= p7H_NC; } else if (strcmp(tag, "HMM") == 0) break; } /* end, loop over possible header tags */ if (status != eslOK) goto ERROR; /* If we saw one STATS line, we need all 3. (True for both 3/a and 3/b formats) */ if (statstracker == 0x7) hmm->flags |= p7H_STATS; else if (statstracker != 0x0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Missing one or more STATS parameter lines"); /* Skip main model header lines; allocate body of HMM now that K,M are known */ if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data before main model section"); if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data before main model section"); if ((status = p7_hmm_CreateBody(hmm, hmm->M, abc)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Failed to allocate body of the new HMM"); if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data before main model section"); /* Optional model composition (filter null model) may immediately follow headers */ if (strcmp(tok1, "COMPO") == 0) { for (x = 0; x < abc->K; x++) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on COMPO line"); hmm->compo[x] = (*tok1 == '*' ? 0.0 : expf(-1.0 * atof(tok1))); } hmm->flags |= p7H_COMPO; if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data after COMPO line"); if ((esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data after COMPO line"); } /* First two lines are node 0: insert emissions, then transitions from node 0 (begin) */ hmm->ins[0][0] = (*tok1 == '*' ? 0.0 : expf(-1.0 *atof(tok1))); for (x = 1; x < abc->K; x++) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on insert line, node 0: expected %d, got %d\n", abc->K, x); hmm->ins[0][x] = (*tok1 == '*' ? 0.0 : expf(-1.0 *atof(tok1))); } if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data in main model: no node 0 transition line"); for (x = 0; x < p7H_NTRANSITIONS; x++) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on begin (0) transition line"); hmm->t[0][x] = (*tok1 == '*' ? 0.0 : expf(-1.0 *atof(tok1))); } /* The main model section. */ for (k = 1; k <= hmm->M; k++) { if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data in main model section, at node %d (expected %d)", k, hmm->M); if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data in main model section, at node %d (expected %d)", k, hmm->M); if (atoi(tok1) != k) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Expected match line to start with %d (of %d); saw %s", k, hmm->M, tok1); for (x = 0; x < abc->K; x++) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few probability fields on match line, node %d: expected %d, got %d\n", k, abc->K, x); hmm->mat[k][x] = (*tok1 == '*' ? 0.0 : expf(-1.0 *atof(tok1))); } if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Missing MAP field on match line for node %d: should at least be -", k); if (hmm->flags & p7H_MAP) hmm->map[k] = atoi(tok1); if (hfp->format >= p7_HMMFILE_3e) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Missing CONS field on match line for node %d: should at least be -", k); if (hmm->flags & p7H_CONS) hmm->consensus[k] = *tok1; } if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Missing RF field on match line for node %d: should at least be -", k); if (hmm->flags & p7H_RF) hmm->rf[k] = *tok1; if (hfp->format >= p7_HMMFILE_3f) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Missing MM field on match line for node %d: should at least be -", k); if (hmm->flags & p7H_MMASK) hmm->mm[k] = *tok1; } if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Missing CS field on match line for node %d: should at least be -", k); if (hmm->flags & p7H_CS) hmm->cs[k] = *tok1; if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data in main model: no insert emission line, node %d", k); for (x = 0; x < abc->K; x++) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few probability fields on insert line, node %d: expected %d, got %d\n", k, abc->K, x); hmm->ins[k][x] = (*tok1 == '*' ? 0.0 : expf(-1.0 *atof(tok1))); } if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data in main model: no transition line, node %d", k); for (x = 0; x < p7H_NTRANSITIONS; x++) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few probability fields on transition line, node %d: expected %d, got %d\n", k, abc->K, x); hmm->t[k][x] = (*tok1 == '*' ? 0.0 : expf(-1.0 *atof(tok1))); } } /* The closing // */ if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data: missing //?"); if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data: missing //?"); if (strcmp(tok1, "//") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Expected closing //; found %s instead", tok1); /* legacy issues */ if (hfp->format < p7_HMMFILE_3e && (status = p7_hmm_SetConsensus(hmm, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Failed to set consensus on legacy HMM format"); /* Finish up. */ if (hmm->flags & p7H_RF) { hmm->rf[0] = ' '; hmm->rf[hmm->M+1] = '\0'; } if (hmm->flags & p7H_MMASK){ hmm->mm[0] = ' '; hmm->mm[hmm->M+1] = '\0'; } if (hmm->flags & p7H_CONS) { hmm->consensus[0] = ' '; hmm->consensus[hmm->M+1] = '\0'; } if (hmm->flags & p7H_CS) { hmm->cs[0] = ' '; hmm->cs[hmm->M+1] = '\0'; } if (hmm->flags & p7H_MAP) { hmm->map[0] = 0; } if (hmm->name == NULL) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "No NAME found for HMM"); if (hmm->M <= 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "No LENG found for HMM (or LENG <= 0)"); if (abc == NULL) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "No ALPH found for HMM"); if (*ret_abc == NULL) *ret_abc = abc; if ( opt_hmm != NULL) *opt_hmm = hmm; else p7_hmm_Destroy(hmm); return eslOK; ERROR: if (*ret_abc == NULL && abc != NULL) esl_alphabet_Destroy(abc); if (hmm != NULL) p7_hmm_Destroy(hmm); if (opt_hmm != NULL) *opt_hmm = NULL; if (status == eslEMEM || status == eslESYS) return status; else if (status == eslEOF) return status; else if (status == eslEINCOMPAT) return status; else return eslEFORMAT; /* anything else is a format error: includes premature EOF, EOL, EOD */ } static int read_bin30hmm(P7_HMMFILE *hfp, ESL_ALPHABET **ret_abc, P7_HMM **opt_hmm) { ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; uint32_t magic; int alphabet_type; int k; off_t offset = 0; int status; hfp->errbuf[0] = '\0'; if (feof(hfp->f)) { status = eslEOF; goto ERROR; } if (hfp->newly_opened) { offset = 0; hfp->newly_opened = FALSE; } else { /* Check magic. */ if ((!hfp->do_stdin) && (! hfp->do_gzip)) { if ((offset = ftello(hfp->f)) < 0) ESL_XEXCEPTION(eslESYS, "ftello() failed"); } if (! fread((char *) &magic, sizeof(uint32_t), 1, hfp->f)) { status = eslEOF; goto ERROR; } if (hfp->format == p7_HMMFILE_3f) { if (magic != v3f_magic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic number at start of HMM"); } else if (hfp->format == p7_HMMFILE_3e) { if (magic != v3e_magic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic number at start of HMM"); } else if (hfp->format == p7_HMMFILE_3d) { if (magic != v3d_magic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic number at start of HMM"); } else if (hfp->format == p7_HMMFILE_3c) { if (magic != v3c_magic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic number at start of HMM"); } else if (hfp->format == p7_HMMFILE_3b) { if (magic != v3b_magic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic number at start of HMM"); } else if (hfp->format == p7_HMMFILE_3a) { if (magic != v3a_magic) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "bad magic number at start of HMM"); } else ESL_XFAIL(eslEFORMAT, hfp->errbuf, "no such HMM file format code"); } /* Allocate shell of the new HMM. * Two-step allocation lets us read/set the flags first; * then the later CreateBody() call will allocate optional internal fields we need. */ if ((hmm = p7_hmm_CreateShell()) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failed, HMM shell"); hmm->offset = offset; /* Get sizes of things */ /* xref J5/114 for a legacy use of for optional acc, desc annotation */ if (! fread((char *) &(hmm->flags), sizeof(int), 1, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read flags"); if (! fread((char *) &(hmm->M), sizeof(int), 1, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read model size M"); if (! fread((char *) &alphabet_type, sizeof(int), 1, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read alphabet_type"); /* Set or verify alphabet. */ if (*ret_abc == NULL) { /* still unknown: set it, pass control of it back to caller */ if ((abc = esl_alphabet_Create(alphabet_type)) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failed, alphabet"); } else { /* already known: check it */ abc = *ret_abc; if (abc->type != alphabet_type) ESL_XFAIL(eslEINCOMPAT, hfp->errbuf, "Alphabet type mismatch: was %s, but current HMM says %s", esl_abc_DecodeType( abc->type), esl_abc_DecodeType(alphabet_type)); } /* Finish the allocation of the HMM */ if ((status = p7_hmm_CreateBody(hmm, hmm->M, abc)) != eslOK) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failed, HMM body"); /* Core model probabilities. */ for (k = 1; k <= hmm->M; k++) if (! fread((char *) hmm->mat[k], sizeof(float), hmm->abc->K, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read mat[%d]", k); for (k = 0; k <= hmm->M; k++) if (! fread((char *) hmm->ins[k], sizeof(float), hmm->abc->K, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read ins[%d]", k); for (k = 0; k <= hmm->M; k++) if (! fread((char *) hmm->t[k], sizeof(float), p7H_NTRANSITIONS, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read t[%d]", k); /* Annotations. */ if (read_bin_string(hfp->f, &(hmm->name)) != eslOK) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read name"); if ((hmm->flags & p7H_ACC) && read_bin_string(hfp->f, &(hmm->acc)) != eslOK) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read acc"); if ((hmm->flags & p7H_DESC) && read_bin_string(hfp->f, &(hmm->desc)) != eslOK) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read desc"); if ((hmm->flags & p7H_RF) && ! fread((char *) hmm->rf, sizeof(char), hmm->M+2, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read rf"); /* +2: 1..M and trailing \0 */ if ((hmm->flags & p7H_MMASK)&& ! fread((char *) hmm->mm, sizeof(char), hmm->M+2, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read mm"); /* +2: 1..M and trailing \0 */ if ((hmm->flags & p7H_CONS) && ! fread((char *) hmm->consensus, sizeof(char), hmm->M+2, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read consensus"); /* don't need to test for >=3e format, because the flag is sufficient (didn't exist pre-3e) */ if ((hmm->flags & p7H_CS) && ! fread((char *) hmm->cs, sizeof(char), hmm->M+2, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read cs"); if ((hmm->flags & p7H_CA) && ! fread((char *) hmm->ca, sizeof(char), hmm->M+2, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read ca"); if (read_bin_string(hfp->f, &(hmm->comlog)) != eslOK) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read comlog"); if (! fread((char *) &(hmm->nseq), sizeof(int), 1, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read nseq"); if (! fread((char *) &(hmm->eff_nseq), sizeof(float), 1, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read eff_nseq"); if (hfp->format >= p7_HMMFILE_3c) { if (! fread((char *) &(hmm->max_length), sizeof(int), 1, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read max_length"); } if (read_bin_string(hfp->f, &(hmm->ctime)) != eslOK) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read ctime"); if ((hmm->flags & p7H_MAP) && ! fread((char *) hmm->map, sizeof(int), hmm->M+1, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read map"); if (! fread((char *) &(hmm->checksum), sizeof(uint32_t),1,hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read checksum"); /* E-value parameters and Pfam cutoffs */ if (hfp->format >= p7_HMMFILE_3b) { if (! fread((char *) hmm->evparam, sizeof(float), p7_NEVPARAM, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read statistical params"); } else if (hfp->format == p7_HMMFILE_3a) { /* a backward compatibility mode. 3/a files stored 3 floats: LAMBDA, MU, TAU. Read 3 #'s and carefully copy/rearrange them into new 6 format */ if (! fread((char *) hmm->evparam, sizeof(float), 3, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read statistical params"); hmm->evparam[p7_FLAMBDA] = hmm->evparam[0]; hmm->evparam[p7_FTAU] = hmm->evparam[2]; hmm->evparam[p7_VLAMBDA] = hmm->evparam[0]; hmm->evparam[p7_VMU] = hmm->evparam[1]; hmm->evparam[p7_MLAMBDA] = hmm->evparam[p7_VLAMBDA]; hmm->evparam[p7_MMU] = hmm->evparam[p7_VMU]; } if (! fread((char *) hmm->cutoff, sizeof(float), p7_NCUTOFFS, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read Pfam score cutoffs"); if ((hmm->flags & p7H_COMPO) && ! fread((char *) hmm->compo, sizeof(float), hmm->abc->K, hfp->f)) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "failed to read model composition"); /* other legacy issues */ if (hfp->format < p7_HMMFILE_3e && (status = p7_hmm_SetConsensus(hmm, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Failed to set consensus on legacy HMM format"); if (*ret_abc == NULL) *ret_abc = abc; /* pass our new alphabet back to caller, if caller didn't know it already */ if ( opt_hmm != NULL) *opt_hmm = hmm; else p7_hmm_Destroy(hmm); return eslOK; ERROR: if (*ret_abc == NULL && abc != NULL) esl_alphabet_Destroy(abc); /* the test is for an alphabet created here, not passed */ if (hmm != NULL) p7_hmm_Destroy(hmm); if (opt_hmm != NULL) *opt_hmm = NULL; return status; } /* read_asc20hmm() * Read a HMMER2.0 ASCII format HMM file, for backward compatibility * SRE, Thu Dec 25 09:13:36 2008 [Magallon] */ static int read_asc20hmm(P7_HMMFILE *hfp, ESL_ALPHABET **ret_abc, P7_HMM **opt_hmm) { ESL_ALPHABET *abc = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; char *tag = NULL; char *tok1 = NULL; char *tok2 = NULL; char *tok3 = NULL; float null[p7_MAXABET]; int alphatype; int k,x; off_t offset = 0; int status; hfp->errbuf[0] = '\0'; if (hfp->newly_opened) { offset = 0; hfp->newly_opened = FALSE; } else { /* Record where this HMM starts on disk */ if ((! hfp->do_stdin) && (! hfp->do_gzip) && (offset = ftello(hfp->f)) < 0) ESL_XEXCEPTION(eslESYS, "ftello() failed"); /* First line of file: "HMMER2.0". Allocate shell for HMM annotation information (we don't know K,M yet) */ if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) goto ERROR; /* EOF here is normal; could also be a thrown EMEM */ if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tag, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "unexpected absence of tokens on data line"); if (strcmp(tag, "HMMER2.0") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Didn't find HMMER3/a tag: not a HMMER save file?"); } if ((hmm = p7_hmm_CreateShell()) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "allocation failure, HMM shell"); hmm->offset = offset; /* Header */ /* H2 save files have no EFFN; * COM lines don't have number tags like [1]; * they have CKSUM but we ignore it because it uses different algorithm; * have EVD line, we ignore it, H3 stats are different; * XT, NULT lines are ignored; algorithm-dependent config is all internal in H3 */ while ((status = esl_fileparser_NextLine(hfp->efp)) == eslOK) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tag, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of line"); if (strcmp(tag, "NAME") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No name found on NAME line"); p7_hmm_SetName(hmm, tok1); } else if (strcmp(tag, "ACC") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No accession found on ACC line"); p7_hmm_SetAccession(hmm, tok1); } else if (strcmp(tag, "DESC") == 0) { /* #h106. Allow "DESC" bare, with nothing following. Looks like some SMART models circa 1998 are like this. */ if ((status = esl_fileparser_GetRemainingLine(hfp->efp, &tok1)) == eslOK) p7_hmm_SetDescription(hmm, tok1); } else if (strcmp(tag, "LENG") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No model length found on LENG line"); if ((hmm->M = atoi(tok1)) == 0) ESL_XFAIL(status, hfp->errbuf, "Invalid model length %s on LENG line", tok1); } else if (strcmp(tag, "ALPH") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No alphabet type found on ALPH"); /* Bug #h80: H2 tags DNA/RNA files as "Nucleic"; modern Easel/H3 * expects tag "DNA" or "RNA", so you can't pass tok1 to esl_abc_EncodeType(). */ if (strcasecmp(tok1, "nucleic") == 0) alphatype = eslDNA; else if (strcasecmp(tok1, "amino") == 0) alphatype = eslAMINO; else ESL_XFAIL(status, hfp->errbuf, "Unrecognized alphabet type %s", tok1); if (*ret_abc == NULL) { if ((abc = esl_alphabet_Create(alphatype)) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "Failed to create alphabet"); } else { if ((*ret_abc)->type != alphatype) ESL_XFAIL(eslEINCOMPAT,hfp->errbuf,"Alphabet type mismatch: was %s, but current HMM says %s", esl_abc_DecodeType( (*ret_abc)->type), tok1); abc = *ret_abc; } } else if (strcmp(tag, "RF") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No yes/no found for RF line"); if (strcasecmp(tok1, "yes") == 0) hmm->flags |= p7H_RF; else if (strcasecmp(tok1, "no") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "RF header line must say yes/no, not %s", tok1); } else if (strcmp(tag, "CS") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No yes/no found for CS line"); if (strcasecmp(tok1, "yes") == 0) hmm->flags |= p7H_CS; else if (strcasecmp(tok1, "no") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "CS header line must say yes/no, not %s", tok1); } else if (strcmp(tag, "MAP") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No yes/no found for MAP line"); if (strcasecmp(tok1, "yes") == 0) hmm->flags |= p7H_MAP; else if (strcasecmp(tok1, "no") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "MAP header line must say yes/no, not %s", tok1); } else if (strcmp(tag, "DATE") == 0) { if ((status = esl_fileparser_GetRemainingLine(hfp->efp, &tok1)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No date found on DATE line"); if (esl_strdup(tok1, -1, &(hmm->ctime)) != eslOK) ESL_XFAIL(eslEMEM, hfp->errbuf, "strdup() failed to set date"); } else if (strcmp(tag, "COM") == 0) { /* in an H2 save file, there's no [1] number tags. The H3 format parser skips these */ if ((status = esl_fileparser_GetRemainingLine(hfp->efp, &tok1)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "No command on COM line"); if (hmm->comlog == NULL) { if (esl_strdup(tok1, -1, &(hmm->comlog)) != eslOK) ESL_XFAIL(eslEMEM, hfp->errbuf, "esl_strdup() failed"); } else { if (esl_strcat(&(hmm->comlog), -1, "\n", -1) != eslOK) ESL_XFAIL(eslEMEM, hfp->errbuf, "esl_strcat() failed"); if (esl_strcat(&(hmm->comlog), -1, tok1, -1) != eslOK) ESL_XFAIL(eslEMEM, hfp->errbuf, "esl_strcat() failed"); } } else if (strcmp(tag, "NSEQ") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Nothing follows NSEQ tag"); if ((hmm->nseq = atoi(tok1)) == 0 && strcmp(tok1, "0") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Invalid nseq on NSEQ line: should be integer, not %s", tok1); } else if (strcmp(tag, "GA") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on GA line"); if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok2, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on GA line"); hmm->cutoff[p7_GA1] = atof(tok1); hmm->cutoff[p7_GA2] = atof(tok2); hmm->flags |= p7H_GA; } else if (strcmp(tag, "TC") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on TC line"); if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok2, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on TC line"); hmm->cutoff[p7_TC1] = atof(tok1); hmm->cutoff[p7_TC2] = atof(tok2); hmm->flags |= p7H_TC; } else if (strcmp(tag, "NC") == 0) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on NC line"); if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok2, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on NC line"); hmm->cutoff[p7_NC1] = atof(tok1); hmm->cutoff[p7_NC2] = atof(tok2); hmm->flags |= p7H_NC; } else if (strcmp(tag, "NULE") == 0) { if (abc->type == eslUNKNOWN) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "ALPH must precede NULE in HMMER2 save files"); for (x = 0; x < abc->K; x++) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few fields on NULE line"); null[x] = h2ascii2prob(tok1, 1./(float)abc->K); } } else if (strcmp(tag, "HMM") == 0) break; } /* end, loop over possible header tags */ if (status != eslOK) goto ERROR; /* Skip main model header lines; allocate body of HMM now that K,M are known */ if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data before main model section"); if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data before main model section"); if ((status = p7_hmm_CreateBody(hmm, hmm->M, abc)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Failed to allocate body of the new HMM"); if (( bg = p7_bg_Create(abc)) == NULL) ESL_XFAIL(eslEMEM, hfp->errbuf, "failed to create background model"); /* H2's tbd1 line ==> translated to H3's node 0 */ if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data before main model section"); if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok2, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data before main model section"); if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok3, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data before main model section"); hmm->t[0][p7H_MM] = h2ascii2prob(tok1, 1.0); /* B->M1 */ hmm->t[0][p7H_MI] = 0.0; /* B->I0 */ hmm->t[0][p7H_MD] = h2ascii2prob(tok3, 1.0); /* B->D1 */ hmm->t[0][p7H_IM] = 1.0; hmm->t[0][p7H_II] = 0.0; hmm->t[0][p7H_DM] = 1.0; hmm->t[0][p7H_DD] = 0.0; for (x = 0; x < abc->K; x++) hmm->ins[0][x] = bg->f[x]; /* The main model section. */ for (k = 1; k <= hmm->M; k++) { if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data in main model section, at node %d (expected %d)", k, hmm->M); if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data in main model section, at node %d (expected %d)", k, hmm->M); if (atoi(tok1) != k) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Expected match line to start with %d (of %d); saw %s", k, hmm->M, tok1); /* Line 1: match emissions; optional map info */ for (x = 0; x < abc->K; x++) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few probability fields on match line, node %d: expected %d, got %d\n", k, abc->K, x); hmm->mat[k][x] = h2ascii2prob(tok1, null[x]); } if (hmm->flags & p7H_MAP) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Missing MAP field on match line for node %d: should at least be -", k); hmm->map[k] = atoi(tok1); } /* Line 2: optional RF; then we ignore insert emissions */ if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data in main model: no insert emission line, node %d", k); if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Missing RF field on match line for node %d: should at least be -", k); if (hmm->flags & p7H_RF) hmm->rf[k] = *tok1; for (x = 0; x < abc->K; x++) hmm->ins[k][x] = bg->f[x]; /* Line 3: optional CS, then transitions (ignoring last 2, which are entry/exit */ if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data in main model: no transition line, node %d", k); if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Missing CS field on match line for node %d: should at least be -", k); if (hmm->flags & p7H_CS) hmm->cs[k] = *tok1; if (k < hmm->M) { /* ignore last insert transition line; H3/H2 not compatible there */ for (x = 0; x < p7H_NTRANSITIONS; x++) { if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Too few probability fields on transition line, node %d: expected %d, got %d\n", k, abc->K, x); hmm->t[k][x] = h2ascii2prob(tok1, 1.0); } } } /* node M transitions: H2 doesn't have an I_M state */ hmm->t[hmm->M][p7H_MM] = 1.0; hmm->t[hmm->M][p7H_MI] = 0.0; hmm->t[hmm->M][p7H_MD] = 0.0; hmm->t[hmm->M][p7H_IM] = 1.0; hmm->t[hmm->M][p7H_II] = 0.0; hmm->t[hmm->M][p7H_DM] = 1.0; hmm->t[hmm->M][p7H_DD] = 0.0; /* The closing // */ if ((status = esl_fileparser_NextLine(hfp->efp)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data: missing //?"); if ((status = esl_fileparser_GetTokenOnLine(hfp->efp, &tok1, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Premature end of data: missing //?"); if (strcmp(tok1, "//") != 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "Expected closing //; found %s instead", tok1); /* Tidy up. */ if (hmm->flags & p7H_RF) { hmm->rf[0] = ' '; hmm->rf[hmm->M+1] = '\0'; } if (hmm->flags & p7H_CS) { hmm->cs[0] = ' '; hmm->cs[hmm->M+1] = '\0'; } if (hmm->name == NULL) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "No NAME found for HMM"); if (hmm->M <= 0) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "No LENG found for HMM (or LENG <= 0)"); if (abc == NULL) ESL_XFAIL(eslEFORMAT, hfp->errbuf, "No ALPH found for HMM"); /* Part of #h106 fix: */ if ((status = p7_hmm_Renormalize(hmm)) != eslOK) return status; /* legacy issues */ if (( status = p7_hmm_SetConsensus(hmm, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Failed to create consensus line"); /* Calibrate the model: cfg rng bg gm om */ if ((status = p7_Calibrate(hmm, NULL, NULL, &bg, NULL, NULL)) != eslOK) ESL_XFAIL(status, hfp->errbuf, "Failed to calibrate HMMER2 model after input conversion"); if (*ret_abc == NULL) *ret_abc = abc; if ( opt_hmm != NULL) *opt_hmm = hmm; else p7_hmm_Destroy(hmm); p7_bg_Destroy(bg); return eslOK; ERROR: if (*ret_abc == NULL && abc != NULL) esl_alphabet_Destroy(abc); if (hmm != NULL) p7_hmm_Destroy(hmm); if (bg != NULL) p7_bg_Destroy(bg); if (opt_hmm != NULL) *opt_hmm = NULL; if (status == eslEMEM || status == eslESYS) return status; else if (status == eslEOF) return status; else if (status == eslEINCOMPAT) return status; else return eslEFORMAT; /* anything else is a format error: includes premature EOF, EOL, EOD */ } /*--------------- end, private format parsers -------------------*/ /***************************************************************** * 5. Other private functions involved in i/o *****************************************************************/ /* multiline() * * Used to print the command log to ASCII save files. * * Given a record (like the comlog) that contains * multiple lines, print it as multiple lines with * a given prefix. e.g.: * * given: "COM ", "foo\nbar\nbaz" * print: COM 1 foo * COM 2 bar * COM 3 baz * * If is NULL, no-op. Otherwise must be a -terminated * string. It does not matter if it ends in <\n> or not. * must be a valid -terminated string; it may be empty. * * Args: fp: FILE to print to * pfx: prefix for each line * s: line to break up and print; tolerates a NULL * * Returns: on success. * * Throws: on write error. */ static int multiline(FILE *fp, const char *pfx, char *s) { char *sptr = s; char *end = NULL; int n = 0; int nline = 1; do { end = strchr(sptr, '\n'); if (end != NULL) /* if there's no \n left, end == NULL */ { n = end - sptr; /* n chars exclusive of \n */ if (fprintf(fp, "%s [%d] ", pfx, nline++) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); if (fwrite(sptr, sizeof(char), n, fp) != n) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); /* using fwrite lets us write fixed # of chars */ if (fprintf(fp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); /* while writing \n w/ printf allows newline conversion */ sptr += n + 1; /* +1 to get past \n */ } else { if (fprintf(fp, "%s [%d] %s\n", pfx, nline++, sptr) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); /* last line */ } } while (end != NULL && *sptr != '\0'); /* *sptr == 0 if terminates with a \n */ return eslOK; } /* multilineString() * * Used to print the command log to a string. * * Given a record (like the comlog) that contains * multiple lines, print it as multiple lines with * a given prefix. e.g.: * * given: "COM ", "foo\nbar\nbaz" * print: COM 1 foo * COM 2 bar * COM 3 baz * * If is NULL, no-op. Otherwise must be a -terminated * string. It does not matter if it ends in <\n> or not. * must be a valid -terminated string; it may be empty. * * Args: ret_char: char pointer pointer * pfx: prefix for each line * s: line to break up and print; tolerates a NULL * coffset: the current write position in the string (pointer so we can add to it). * * Returns: on success or on error. * */ static int multilineString(char **ret_str, const char *pfx, char *s, int *coffset){ char *sptr = s; char *end = NULL; int n = 0; int nline = 1; int offset; do { end = strchr(sptr, '\n'); if (end != NULL) { /* if there's no \n left, end == NULL */ n = end - sptr; /* n chars exclusive of \n */ if ((offset = sprintf(*ret_str + *coffset, "%s [%d] ", pfx, nline++)) < 0) return eslEWRITE; *coffset += offset; strncpy(*ret_str + *coffset, sptr, sizeof(char) * n); /* using strncpy lets us write fixed # of chars */ *coffset +=n; if ((offset = sprintf(*ret_str + *coffset, "\n")) < 0) return eslEWRITE; sptr += n + 1; /* +1 to get past \n */ } else { if ((offset = sprintf(*ret_str + *coffset, "%s [%d] %s\n", pfx, nline++, sptr)) < 0) return eslEWRITE; *coffset += offset; } } while (end != NULL && *sptr != '\0'); /* *sptr == 0 if terminates with a \n */ return eslOK; } static int printprob(FILE *fp, int fieldwidth, float p) { if (p == 0.0) { if (fprintf(fp, " %*s", fieldwidth, "*") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } else if (p == 1.0) { if (fprintf(fp, " %*.5f", fieldwidth, 0.0) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } else { if (fprintf(fp, " %*.5f", fieldwidth, -logf(p)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hmm write failed"); } return eslOK; } /* probToString * * Used to print probabilities floats in a fixed field to a char. Based on printprob. * * * given : 4.115212345633 * append: " 4.11521" * * * If p is 0.0 or 1.0, append * or 0.00000 * * Args: str: (pointer to pointer) * fieldwidth: The size of the number to be printed. Note, a space is * prepended * p: float * offset: currnet position in the strng * * Returns: on success or on error. */ static int probToString(char **str , int fieldwidth, float p, int offset) { if (p == 0.0) { if (sprintf(*str+offset, " %*s", fieldwidth, "*") < 0) return( eslEWRITE ); } else if (p == 1.0) { if (sprintf(*str+offset, " %*.5f", fieldwidth, 0.0) < 0) return( eslEWRITE ); } else { if (sprintf(*str+offset, " %*.5f", fieldwidth, -logf(p)) < 0) return( eslEWRITE ); } return eslOK; } /* Function: write_bin_string() * * Purpose: Write a string in binary save format: an integer * for the string length (including \0), followed by * the string. * * Return: on success; * * Throw: on write error, such as a filled disk. */ static int write_bin_string(FILE *fp, char *s) { int len; if (s != NULL) { len = strlen(s) + 1; if (fwrite((char *) &len, sizeof(int), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); if (fwrite((char *) s, sizeof(char), len, fp) != len) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); } else { len = 0; if (fwrite((char *) &len, sizeof(int), 1, fp) != 1) ESL_EXCEPTION_SYS(eslEWRITE, "hmm binary write failed"); } return eslOK; } /* Function: read_bin_string() * * Purpose: Read in a string from a binary file, where * the first integer is the length (including '\0'). * If the length is 0, <*ret_s> is set to . * * This is a reasonable convention for storing/ reading * strings in binary files. Note that because the length is * inclusive of '\0', there's a difference between a NULL * string and an empty string. * * Args: fp - FILE to read from * ret_s - string to read into * * Return: on success. ret_s is malloc'ed here. * if a read fails - likely because no more * data in file. * * Throws on allocation error. */ static int read_bin_string(FILE *fp, char **ret_s) { int status; char *s = NULL; int len; if (! fread((char *) &len, sizeof(int), 1, fp)) { status = eslEOD; goto ERROR; } if (len > 0) { ESL_ALLOC(s, (sizeof(char) * len)); if (! fread((char *) s, sizeof(char), len, fp)) { status = eslEOD; goto ERROR; } } *ret_s = s; return eslOK; ERROR: if (s != NULL) free(s); *ret_s = NULL; return status; } static float h2ascii2prob(char *s, float null) { return ((*s == '*') ? 0. : null * exp( atoi(s) * 0.00069314718)); } /*---------------- end, private utilities -----------------------*/ /***************************************************************** * 6. Benchmark driver. *****************************************************************/ #ifdef p7HMMFILE_BENCHMARK /* icc -O3 -static -o p7_hmmfile_benchmark -I. -L. -I../easel -L../easel -Dp7HMMFILE_BENCHMARK p7_hmmfile.c -lhmmer -leasel -lm ./p7_hmmfile_benchmark Pfam.hmm */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-a", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "include time of profile configuration", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "verbose: print model info as they're read", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for HMM input"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_ALPHABET *abc = NULL; char *hmmfile = esl_opt_GetArg(go, 1); P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; int nmodel = 0; uint64_t totM = 0; int status; char errbuf[eslERRBUFSIZE]; esl_stopwatch_Start(w); status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); while ((status = p7_hmmfile_Read(hfp, &abc, &hmm)) == eslOK) { if (nmodel == 0) { /* first time initialization, now that alphabet known */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, 400); } if (esl_opt_GetBoolean(go, "-v")) printf("%s\n", hmm->name); nmodel++; totM += hmm->M; if (esl_opt_GetBoolean(go, "-a") == TRUE) { gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 400, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, 400); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); } p7_hmm_Destroy(hmm); } if (status == eslEFORMAT) p7_Fail("bad file format in HMM file %s", hmmfile); else if (status == eslEINCOMPAT) p7_Fail("HMM file %s contains different alphabets", hmmfile); else if (status != eslEOF) p7_Fail("Unexpected error in reading HMMs from %s", hmmfile); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# number of models: %d\n", nmodel); printf("# total M: %" PRId64 "\n", totM); p7_bg_Destroy(bg); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*p7HMMFILE_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 7. Unit tests. *****************************************************************/ #ifdef p7HMMFILE_TESTDRIVE /* utest_io_30: tests read/write for 3.0 save files. * Caller provides a named tmpfile that we can * open, write to, close, reopen, then read from. * can be -1 or any specified 3.x save * file format. * Caller also provides a test HMM, which might * be a nasty random-sampled HMM. */ static int utest_io_30(char *tmpfile, int format, P7_HMM *hmm) { FILE *fp = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *new = NULL; ESL_ALPHABET *newabc = NULL; char msg[] = "3.0 file i/o unit test failed"; /* Write the HMM to disk as ASCII */ if ((fp = fopen(tmpfile, "w")) == NULL) esl_fatal(msg); if (p7_hmmfile_WriteASCII(fp, format, hmm) != eslOK) esl_fatal(msg); fclose(fp); /* Read it back */ if (p7_hmmfile_OpenE(tmpfile, NULL, &hfp, NULL) != eslOK) esl_fatal(msg); if (p7_hmmfile_Read(hfp, &newabc, &new) != eslOK) esl_fatal(msg); /* It should have determined the right file format */ if (format == -1) { if (hfp->format != p7_HMMFILE_3f) esl_fatal(msg); } else { if (hfp->format != format) esl_fatal(msg); } /* It should be identical to what we started with, modulo some legacy format issues */ if (format < p7_HMMFILE_3e) { strcpy(new->consensus, hmm->consensus); } if (p7_hmm_Compare(hmm, new, 0.0001) != eslOK) esl_fatal(msg); p7_hmm_Destroy(new); /* Trying to read one more HMM should give us a normal EOF */ if (p7_hmmfile_Read(hfp, &newabc, &new) != eslEOF) esl_fatal(msg); p7_hmmfile_Close(hfp); /* Do it all again, but with binary format */ if ((fp = fopen(tmpfile, "w")) == NULL) esl_fatal(msg); if (p7_hmmfile_WriteBinary(fp, format, hmm) != eslOK) esl_fatal(msg); fclose(fp); if (p7_hmmfile_OpenE(tmpfile, NULL, &hfp, NULL) != eslOK) esl_fatal(msg); if (p7_hmmfile_Read(hfp, &newabc, &new) != eslOK) esl_fatal(msg); if (format < p7_HMMFILE_3e) { strcpy(new->consensus, hmm->consensus); } if (p7_hmm_Compare(hmm, new, 0.0001) != eslOK) esl_fatal(msg); if (format == -1) { if (hfp->format != p7_HMMFILE_3f) esl_fatal(msg); } else { if (hfp->format != format) esl_fatal(msg); } p7_hmm_Destroy(new); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(newabc); return eslOK; } /* Test current (3/e) file formats */ static int utest_io_current(char *tmpfile, P7_HMM *hmm) { /* Try to break the 32-bit unsigned checksum, setting high order bit */ hmm->checksum = 0xffeeddcc; hmm->flags |= p7H_CHKSUM; utest_io_30(tmpfile, -1, hmm); return eslOK; } /* Test compatibility mode for 3/a file formats */ static int utest_io_3a(char *tmpfile, P7_HMM *hmm) { float oldparam[p7_NEVPARAM]; /* Try to break the 32-bit unsigned checksum, setting high order bit */ hmm->checksum = 0xffeeddcc; hmm->flags |= p7H_CHKSUM; /* Make a copy of the old statistics. * Rearrange stats params to satisfy 3/a's constraints: vmu=mmu, mlambda=vlambda=flambda */ esl_vec_FCopy(hmm->evparam, p7_NEVPARAM, oldparam); hmm->evparam[p7_VMU] = hmm->evparam[p7_MMU]; hmm->evparam[p7_VLAMBDA] = hmm->evparam[p7_MLAMBDA]; hmm->evparam[p7_FLAMBDA] = hmm->evparam[p7_MLAMBDA]; utest_io_30(tmpfile, p7_HMMFILE_3a, hmm); /* Restore the original statistics */ esl_vec_FCopy(oldparam, p7_NEVPARAM, hmm->evparam); return eslOK; } #endif /*p7HMMFILE_TESTDRIVE*/ /*-------------------- end, unit tests --------------------------*/ /***************************************************************** * 8. Test driver. *****************************************************************/ #ifdef p7HMMFILE_TESTDRIVE /* gcc -g -Wall -Dp7HMMFILE_TESTDRIVE -I. -I../easel -L. -L../easel -o p7_hmmfile_test p7_hmmfile.c -lhmmer -leasel -lm */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_random.h" #include "hmmer.h" int main(int argc, char **argv) { ESL_RANDOMNESS *r = NULL; ESL_ALPHABET *aa_abc = NULL, *nt_abc = NULL; P7_HMM *hmm = NULL; FILE *fp = NULL; char tmpfile[32] = "tmp-hmmerXXXXXX"; int M = 20; if ((aa_abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create amino alphabet"); if ((nt_abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create DNA alphabet"); if ((r = esl_randomness_CreateFast(0)) == NULL) esl_fatal("failed to create randomness"); if ((esl_tmpfile_named(tmpfile, &fp)) != eslOK) esl_fatal("failed to create tmp file"); fclose(fp); /* Protein HMMs */ p7_hmm_Sample(r, M, aa_abc, &hmm); utest_io_current(tmpfile, hmm); utest_io_3a (tmpfile, hmm); p7_hmm_Destroy(hmm); /* Nucleic acid HMMs */ p7_hmm_Sample(r, M, nt_abc, &hmm); utest_io_current(tmpfile, hmm); utest_io_3a (tmpfile, hmm); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(aa_abc); esl_alphabet_Destroy(nt_abc); esl_randomness_Destroy(r); remove(tmpfile); exit(0); } #endif /*p7HMMFILE_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 9. Example. *****************************************************************/ /* On using the example to test error messages from p7_hmmfile_OpenE(): * Message * -------------- * .gz file missing/not readable \rm test.hmm.gz; touch test.hmm.gz; src/p7_hmmfile_example test.hmm.gz * gzip -dc doesn't exist \cp testsuite/20aa.hmm test.hmm; gzip test.hmm; sudo mv /usr/bin/gzip /usr/bin/gzip.old; src/p7_hmmfile_example test.hmm.gz * hmm file not found \rm test.hmm; src/p7_hmmfile_example test.hmm * bad SSI file format \cp testsuite/20aa.hmm test.hmm; \rm test.hmm.ssi; touch test.hmm.ssi; src/p7_hmmfile_example test.hmm * 64-bit SSI on 32-bit sys * empty file \rm test.hmm; touch test.hmm * unrecognized format (binary) cat testsuite/20aa.hmm > test.hmm; src/hmmpress test.hmm; \rm test.hmm; [edit test.hmm.h3m, delete first byte] * unrecognized format (ascii) cat testsuite/20aa.hmm | sed -e 's/^HMMER3\/b/HMMER3\/x/' > test.hmm * */ #ifdef p7HMMFILE_EXAMPLE /* gcc -g -Wall -Dp7HMMFILE_EXAMPLE -I. -I../easel -L. -L../easel -o p7_hmmfile_example p7_hmmfile.c -lhmmer -leasel -lm */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "hmmer.h" int main(int argc, char **argv) { char *hmmfile = argv[1]; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; ESL_ALPHABET *abc = NULL; char errbuf[eslERRBUFSIZE]; int status; /* An example of reading a single HMM from a file, and checking that it is the only one. */ status = p7_hmmfile_OpenE(hmmfile, NULL, &hfp, errbuf); if (status == eslENOTFOUND) p7_Fail("File existence/permissions problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status == eslEFORMAT) p7_Fail("File format problem in trying to open HMM file %s.\n%s\n", hmmfile, errbuf); else if (status != eslOK) p7_Fail("Unexpected error %d in opening HMM file %s.\n%s\n", status, hmmfile, errbuf); status = p7_hmmfile_Read(hfp, &abc, &hmm); if (status == eslEFORMAT) p7_Fail("Bad file format in HMM file %s:\n%s\n", hfp->fname, hfp->errbuf); else if (status == eslEINCOMPAT) p7_Fail("HMM in %s is not in the expected %s alphabet\n", hfp->fname, esl_abc_DecodeType(abc->type)); else if (status == eslEOF) p7_Fail("Empty HMM file %s? No HMM data found.\n", hfp->fname); else if (status != eslOK) p7_Fail("Unexpected error in reading HMMs from %s\n", hfp->fname); status = p7_hmmfile_Read(hfp, &abc, NULL); if (status != eslEOF) p7_Fail("HMM file %s does not contain just one HMM\n", hfp->fname); p7_hmmfile_Close(hfp); p7_hmmfile_WriteASCII(stdout, -1, hmm); esl_alphabet_Destroy(abc); p7_hmm_Destroy(hmm); return 0; } #endif /*p7HMMFILE_EXAMPLE*/ /*----------------------- end, example --------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: p7_hmmfile.c 4765 2015-02-22 05:28:25Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/p7_hmmfile.c $ *****************************************************************/ hmmer-3.1b2/testsuite/0000775361611702660230000000000012473613140014315 5ustar wheelerteddyhmmer-3.1b2/testsuite/i17-stdin.pl0000775361611702660230000004372412473612615016414 0ustar wheelerteddy#! /usr/bin/perl # Test that programs accept and reject argument of '-' (for reading # data from stdin, rather than from files) as they're supposed to. # # Usage: ./i17-stdin.pl # Example: ./i17-stdin.pl .. .. tmpfoo # # SRE, Wed Oct 27 13:05:10 2010 [Janelia] # SVN $URL$ # SVN $Id$ BEGIN { $builddir = shift; $srcdir = shift; $tmppfx = shift; } $verbose = 0; # The test makes use of the following files: # # $model1.hmm Single RRM_1 model # $model2.hmm Single Caudal_act model # $nmodel1.hmm Single 3box model (DNA) # $nmodel2.hmm Single PSE model (DNA) # $model1.sto Single RRM_1 alignment # $model2.sto Single Caudal_act alignment # It creates the following files: # $tmppfx.hmm 2 models, RRM_1 + Caudal_act # $tmppfx.nhmm 2 DNA models, 3box and PSE # $tmppfx.sto 2 MSAs, RRM_1 + Caudal_act # $tmppfx.hmm.h3{mifp} hmmpress auxfiles for .hmm file # $tmppfx.fa1 1 consensus seq from RRM_1 model # $tmppfx.fa2 2 consensus seqs, one from RRM_1 and one from Caudal_act # $tmppfx.fa10 10 seqs from RRM_1 model # $tmppfx.db 10 RRM_1 + 10 Caudal_act + 100 random seqs # $tmppfx.ndb 2 PSE + 2 3box + 6 random seqs # $tmppfx.key "Caudal_act" in a file, to test hmmfetch -f # # All models assumed to be in testsuite subdirectory. $model1 = "RRM_1"; $model2 = "Caudal_act"; $nmodel1 = "3box"; $nmodel2 = "PSE"; @h3progs = ("hmmalign", "hmmbuild", "hmmconvert", "hmmemit", "hmmfetch", "hmmpress", "hmmscan", "hmmsearch", "hmmstat", "jackhmmer", "nhmmer", "phmmer"); @eslprogs = ("esl-shuffle"); # Verify that we have all the executables and datafiles we need for the test. foreach $h3prog (@h3progs) { if (! -x "$builddir/src/$h3prog") { die "FAIL: didn't find $h3prog executable in $builddir/src\n"; } } foreach $eslprog (@eslrogs) { if (! -x "$builddir/easel/miniapps/$eslprog") { die "FAIL: didn't find $eslprog executable in $builddir/easel/miniapps\n"; } } if (! -r "$srcdir/testsuite/$model1.hmm") { die "FAIL: can't read profile $model1.hmm in $srcdir/testsuite\n"; } if (! -r "$srcdir/testsuite/$model2.hmm") { die "FAIL: can't read profile $model2.hmm in $srcdir/testsuite\n"; } if (! -r "$srcdir/testsuite/$nmodel1.hmm") { die "FAIL: can't read profile $nmodel1.hmm in $srcdir/testsuite\n"; } if (! -r "$srcdir/testsuite/$nmodel2.hmm") { die "FAIL: can't read profile $nmodel2.hmm in $srcdir/testsuite\n"; } if (! -r "$srcdir/testsuite/$model1.sto") { die "FAIL: can't read msa $model1.sto in $srcdir/testsuite\n"; } if (! -r "$srcdir/testsuite/$model2.sto") { die "FAIL: can't read msa $model2.sto in $srcdir/testsuite\n"; } if (! -r "$srcdir/testsuite/$nmodel1.sto") { die "FAIL: can't read msa $nmodel1.sto in $srcdir/testsuite\n"; } if (! -r "$srcdir/testsuite/$nmodel2.sto") { die "FAIL: can't read msa $nmodel2.sto in $srcdir/testsuite\n"; } `cat $srcdir/testsuite/$model1.hmm $srcdir/testsuite/$model2.hmm > $tmppfx.hmm`; if ($?) { die "FAIL: cat\n"; } `cat $srcdir/testsuite/$nmodel1.hmm $srcdir/testsuite/$nmodel2.hmm > $tmppfx.nhmm`; if ($?) { die "FAIL: cat\n"; } `$builddir/src/hmmpress $tmppfx.hmm`; if ($?) { die "FAIL: hmmpress\n"; } `cat $srcdir/testsuite/$model1.sto $srcdir/testsuite/$model2.sto > $tmppfx.sto`; if ($?) { die "FAIL: cat\n"; } `$builddir/src/hmmemit -c $srcdir/testsuite/$model1.hmm > $tmppfx.fa1`; if ($?) { die "FAIL: hmmemit -c\n"; } `cat $tmppfx.fa1 > $tmppfx.fa2`; if ($?) { die "FAIL: cat\n"; } `$builddir/src/hmmemit -c $srcdir/testsuite/$model2.hmm >> $tmppfx.fa2`; if ($?) { die "FAIL: hmmemit -c\n"; } `$builddir/src/hmmemit -N10 $srcdir/testsuite/$model1.hmm > $tmppfx.fa10`; if ($?) { die "FAIL: hmmemit\n"; } `$builddir/src/hmmemit -p -N10 $srcdir/testsuite/$model1.hmm > $tmppfx.db`; if ($?) { die "FAIL: hmmemit\n"; } `$builddir/src/hmmemit -p -N10 $srcdir/testsuite/$model2.hmm >> $tmppfx.db`; if ($?) { die "FAIL: hmmemit\n"; } `$builddir/easel/miniapps/esl-shuffle -G -N100 -L 400 --amino >> $tmppfx.db`; if ($?) { die "FAIL: esl-shuffle\n"; } `$builddir/src/hmmemit -p -N2 -L2000 --glocal $srcdir/testsuite/$nmodel1.hmm > $tmppfx.ndb`; if ($?) { die "FAIL: hmmemit\n"; } `$builddir/src/hmmemit -p -N2 -L2000 --glocal $srcdir/testsuite/$nmodel2.hmm >> $tmppfx.ndb`; if ($?) { die "FAIL: hmmemit\n"; } `$builddir/easel/miniapps/esl-shuffle -G -N6 -L 2000 --dna >> $tmppfx.ndb`; if ($?) { die "FAIL: esl-shuffle\n"; } `echo $model1 > $tmppfx.key`; if ($?) { die "FAIL: cat\n"; } `echo $model2 >> $tmppfx.key`; if ($?) { die "FAIL: cat\n"; } ################################################################ # hmmalign # reject - - case ################################################################ $tag = "hmmalign"; $prog = "$builddir/src/$tag"; $tag1 = ""; $arg1 = "$srcdir/testsuite/$model1.hmm"; $tag2 = ""; $arg2 = "$tmppfx.fa10"; if ($verbose) { print "$tag...\n"; } `$prog $arg1 $arg2 > $tmppfx.out1`; if ($?) { die "FAIL: $tag $tag1 $tag2\n"; } `cat $arg1 | $prog - $arg2 > $tmppfx.out2`; if ($?) { die "FAIL: $tag - $tag2\n"; } `cat $arg2 | $prog $arg1 - > $tmppfx.out3`; if ($?) { die "FAIL: $tag $tag1 -\n"; } `diff -b $tmppfx.out1 $tmppfx.out2 2>&1 > /dev/null`; if ($?) { die "FAIL: $tag results differ if $tag1 comes through stdin\n"; } `diff -b $tmppfx.out1 $tmppfx.out3 2>&1 > /dev/null`; if ($?) { die "FAIL: $tag results differ if $tag2 comes through stdin\n"; } $output = `cat $arg1 $arg2 | $prog - - 2>&1`; if (!$?) { die "FAIL: $tag should fail on double - -\n"; } if ($output !~ /^\nERROR: Either or /) { die "FAIL: $tag didn't give expected error message for the - - case.\n"; } ################################################################ # hmmbuild # don't diff HMM files, they may fail because of DATE field # reject - for : can't send it to stdout. ################################################################ $tag = "hmmbuild"; $prog = "$builddir/src/$tag"; $tag1 = ""; $arg1 = "$tmppfx.sto"; if ($verbose) { print "$tag...\n"; } `$prog $tmppfx.hmm.out1 $arg1 | grep -v "^#" > $tmppfx.out1`; if ($?) { die "FAIL: $tag $tag1 \n"; } `cat $arg1 | $prog --informat stockholm $tmppfx.hmm.out2 - | grep -v "^#" > $tmppfx.out2`; if ($?) { die "FAIL: $tag -\n"; } `diff -b $tmppfx.out1 $tmppfx.out2 2>&1 > /dev/null`; if ($?) { die "FAIL: $tag results differ if $tag1 comes through stdin\n"; } $output = `$prog - $arg1`; if (!$?) { die "FAIL: $tag should reject - for \n"; } ################################################################ # hmmconvert ################################################################ $tag = "hmmconvert"; $prog = "$builddir/src/$tag"; $tag1 = ""; $arg1 = "$tmppfx.hmm"; if ($verbose) { print "$tag...\n"; } `$prog $arg1 > $tmppfx.out1`; if ($?) { die "FAIL: $tag $tag1\n"; } `cat $arg1 | $prog - > $tmppfx.out2`; if ($?) { die "FAIL: $tag -\n"; } `diff -b $tmppfx.out1 $tmppfx.out2 2>&1 > /dev/null`; if ($?) { die "FAIL: $tag results differ if $tag1 comes through stdin\n"; } ################################################################ # hmmemit # need to pass fixed RNG seed to be able to diff outputs ################################################################ $tag = "hmmemit"; $prog = "$builddir/src/$tag"; $tag1 = ""; $arg1 = "$tmppfx.hmm"; if ($verbose) { print "$tag...\n"; } `$prog --seed 42 $arg1 > $tmppfx.out1`; if ($?) { die "FAIL: $tag $tag1\n"; } `cat $arg1 | $prog --seed 42 - > $tmppfx.out2`; if ($?) { die "FAIL: $tag -\n"; } `diff -b $tmppfx.out1 $tmppfx.out2 2>&1 > /dev/null`; if ($?) { die "FAIL: $tag results differ if $tag1 comes through stdin\n"; } ################################################################ # hmmfetch # need to check all three use modes, including -f and --index # --index rejects - # w/ -f, only one of , can be - # -f fetches in different orders depending on whether file is # indexed or not, so must be constructed to give # same fetch order either way. ################################################################ $tag = "hmmfetch"; $prog = "$builddir/src/$tag"; $tag1 = ""; $arg1 = "$tmppfx.hmm"; $tag2 = ""; $arg2 = "$tmppfx.key"; if ($verbose) { print "$tag...\n"; } `$prog $arg1 Caudal_act > $tmppfx.out1`; if ($?) { die "FAIL: $tag $tag1\n"; } `cat $arg1 | $prog - Caudal_act > $tmppfx.out2`; if ($?) { die "FAIL: $tag -\n"; } `diff -b $tmppfx.out1 $tmppfx.out2 2>&1 > /dev/null`; if ($?) { die "FAIL: $tag results differ if $tag1 comes through stdin\n"; } `$prog -f $arg1 $arg2 > $tmppfx.out1`; if ($?) { die "FAIL: $tag -f $tag1 $tag2\n"; } `cat $arg1 | $prog -f - $arg2 > $tmppfx.out2`; if ($?) { die "FAIL: $tag -f - $tag2\n"; } `cat $arg2 | $prog -f $arg1 - > $tmppfx.out3`; if ($?) { die "FAIL: $tag -f $tag1 -\n"; } `diff -b $tmppfx.out1 $tmppfx.out2 2>&1 > /dev/null`; if ($?) { die "FAIL: $tag -f results differ if $tag1 comes through stdin\n"; } `diff -b $tmppfx.out1 $tmppfx.out3 2>&1 > /dev/null`; if ($?) { die "FAIL: $tag -f results differ if $tag2 comes through stdin\n"; } $output = `cat $arg1 $arg2 | $prog -f - - 2>&1`; if (! $?) { die "FAIL: $tag should have failed on double - -\n"; } if ($output !~ /^Either or /) { die "FAIL: $tag didn't give expected error message for the - - case.\n"; } `$prog --index $arg1 > $tmppfx.out1`; if ($?) { die "FAIL: $tag --index $tag1\n"; } $output = `cat $arg1 | $prog --index - 2>&1`; if (! $?) { die "FAIL: $tag should reject - for when using --index\n"; } if ($output !~ /^Can't use - with --index/) { die "FAIL: $tag didn't give expected error message for the - - case.\n"; } ################################################################ # hmmpress # rejects - argument. ################################################################ $tag = "hmmpress"; $prog = "$builddir/src/$tag"; $tag1 = ""; $arg1 = "$tmppfx.hmm"; if ($verbose) { print "$tag...\n"; } $output = `cat $arg1 | $prog - 2>&1`; if (! $?) { die "FAIL: $tag should reject - for \n"; } if ($output !~ /^\nError: Can't use - for /) { die "FAIL: $tag didn't give expected error message.\n"; } ################################################################# # hmmscan. # rejects - for , because it must be hmmpress'ed. ################################################################# $tag = "hmmscan"; $prog = "$builddir/src/$tag"; $tag1 = ""; $arg1 = "$tmppfx.hmm"; $tag2 = ""; $arg2 = "$tmppfx.fa2"; if ($verbose) { print "$tag...\n"; } `$prog $arg1 $arg2 | grep -v "^#" > $tmppfx.out1`; if ($?) { die "FAIL: $tag $tag1 $tag2\n"; } `cat $arg2 | $prog $arg1 - | grep -v "^#" > $tmppfx.out2`; if ($?) { die "FAIL: $tag $tag1 -\n"; } `diff -b $tmppfx.out1 $tmppfx.out2 2>&1 > /dev/null`; if ($?) { die "FAIL: $tag results differ if $arg2 comes from stdin\n"; } $output = `cat $arg1 | $prog - $arg2 2>&1`; if (! $?) { die "FAIL: $tag should reject - for $tag1\n"; } if ($output !~ /^hmmscan cannot read/) { die "FAIL: hmmscan didn't give expected error message\n"; } ################################################################# # hmmsearch # reject - - case # reject as - on multiquery ################################################################# # note that the grep -v "^#" removes lines that would make diffs fail, # like query name and cpu time. $tag = "hmmsearch"; $prog = "$builddir/src/$tag"; $tag1 = ""; $arg1 = "$srcdir/testsuite/$model1.hmm"; $arg1b = "$tmppfx.hmm"; $tag2 = ""; $arg2 = "$tmppfx.db"; if ($verbose) { print "$tag...\n"; } `$prog $arg1 $arg2 | grep -v "^#" > $tmppfx.out1`; if ($?) { die "FAIL: $tag $tag1 $tag2\n"; } `cat $arg1 | $prog - $arg2 | grep -v "^#" > $tmppfx.out2`; if ($?) { die "FAIL: $tag - $tag2\n"; } `cat $arg2 | $prog $arg1 - | grep -v "^#" > $tmppfx.out3`; if ($?) { die "FAIL: $tag $tag1 -\n"; } `diff -b $tmppfx.out1 $tmppfx.out2 2>&1 > /dev/null`; if ($?) { die "FAIL: $prog results differ if $tag1 comes through stdin\n"; } `diff -b $tmppfx.out1 $tmppfx.out3 2>&1 > /dev/null`; if ($?) { die "FAIL: $prog results differ if $tag2 comes through stdin\n"; } $output = `cat $arg1 $arg2 | $prog - - 2>&1`; if (! $?) { die "FAIL: $prog should have failed on double - -\n"; } if ($output !~ /^Either or /) { die "FAIL: $prog didn't give expected error message for the - - case.\n"; } $output = `cat $arg2 | $prog $arg1b - 2>&1`; if (! $?) { die "FAIL: $prog should fail on multiquery $tag1, stdin $tag2.\n"; } ################################################################ # hmmstat ################################################################ $tag = "hmmstat"; $prog = "$builddir/src/$tag"; $tag1 = ""; $arg1 = "$tmppfx.hmm"; if ($verbose) { print "$tag...\n"; } `$prog $arg1 > $tmppfx.out1`; if ($?) { die "FAIL: $tag $tag1\n"; } `cat $arg1 | $prog - > $tmppfx.out2`; if ($?) { die "FAIL: $tag -\n"; } `diff -b $tmppfx.out1 $tmppfx.out2 2>&1 > /dev/null`; if ($?) { die "FAIL: $tag results differ if $tag1 comes through stdin\n"; } ################################################################ # jackhmmer # can't be -, always needs to be rewindable ################################################################ $tag = "jackhmmer"; $prog = "$builddir/src/$tag --enone -N2"; $tag1 = ""; $arg1 = "$tmppfx.fa1"; $tag2 = ""; $arg2 = "$tmppfx.db"; if ($verbose) { print "$tag...\n"; } `$prog $arg1 $arg2 | grep -v "^#" > $tmppfx.out1`; if ($?) { die "FAIL: $tag $tag1 $tag2\n"; } `cat $arg1 | $prog - $arg2 | grep -v "^#" > $tmppfx.out2`; if ($?) { die "FAIL: $tag - $tag2\n"; } `diff -b $tmppfx.out1 $tmppfx.out2 2>&1 > /dev/null`; if ($?) { die "FAIL: $prog results differ if $tag1 comes through stdin\n"; } $output = `cat $arg2 | $prog $arg1 - 2>&1`; if (! $?) { die "FAIL: $prog should fail if is -\n"; } if ($output !~ /^jackhmmer cannot read from/) { die "FAIL: $prog didn't give expected error message\n"; } ################################################################ # nhmmer # (like hmmsearch, but with DNA models) # reject - - case # reject as - on multiquery ################################################################# $tag = "nhmmer"; $prog = "$builddir/src/$tag"; $tag1 = ""; $arg1 = "$srcdir/testsuite/$nmodel1.hmm"; $arg1b = "$tmppfx.nhmm"; $tag2 = ""; $arg2 = "$tmppfx.ndb"; if ($verbose) { print "$tag...\n"; } `$prog $arg1 $arg2 | grep -v "^#" > $tmppfx.out1`; if ($?) { die "FAIL: $tag $tag1 $tag2\n"; } `cat $arg1 | $prog - $arg2 | grep -v "^#" > $tmppfx.out2`; if ($?) { die "FAIL: $tag - $tag2\n"; } `cat $arg2 | $prog $arg1 - | grep -v "^#" > $tmppfx.out3`; if ($?) { die "FAIL: $tag $tag1 -\n"; } `diff -b $tmppfx.out1 $tmppfx.out2 2>&1 > /dev/null`; if ($?) { die "FAIL: $prog results differ if $tag1 comes through stdin\n"; } `diff -b $tmppfx.out1 $tmppfx.out3 2>&1 > /dev/null`; if ($?) { die "FAIL: $prog results differ if $tag2 comes through stdin\n"; } $output = `cat $arg1 $arg2 | $prog - - 2>&1`; if (! $?) { die "FAIL: $prog should have failed on double - -\n"; } if ($output !~ /^Either or /) { die "FAIL: $prog didn't give expected error message for the - - case.\n"; } $output = `cat $arg2 | $prog $arg1b - 2>&1`; if (! $?) { die "FAIL: $prog should fail on multiquery $tag1, stdin $tag2.\n"; } ################################################################ # phmmer: just like testing hmmsearch, but with query sequences instead of profiles # first: single query. ################################################################ $tag = "phmmer"; $prog = "$builddir/src/$tag"; $tag1 = ""; $arg1 = "$tmppfx.fa1"; $arg1b = "$tmppfx.fa2"; $tag2 = ""; $arg2 = "$tmppfx.db"; if ($verbose) { print "$tag...\n"; } `$prog $arg1 $arg2 | grep -v "^#" > $tmppfx.out1`; if ($?) { die "FAIL: $tag $tag1 $tag2\n"; } `cat $arg1 | $prog - $arg2 | grep -v "^#" > $tmppfx.out2`; if ($?) { die "FAIL: $tag - $tag2\n"; } `cat $arg2 | $prog $arg1 - | grep -v "^#" > $tmppfx.out3`; if ($?) { die "FAIL: $tag $tag1 -\n"; } `diff -b $tmppfx.out1 $tmppfx.out2 2>&1 > /dev/null`; if ($?) { die "FAIL: $prog results differ if $tag1 comes through stdin\n"; } `diff -b $tmppfx.out1 $tmppfx.out3 2>&1 > /dev/null`; if ($?) { die "FAIL: $prog results differ if $tag2 comes through stdin\n"; } $output = `cat $arg1 $arg2 | $prog - - 2>&1`; if (! $?) { die "FAIL: $prog should have failed on double - -\n"; } if ($output !~ /^Either or /) { die "FAIL: $prog didn't give expected error message for the - - case.\n"; } $output = `cat $arg2 | $prog $arg1b - 2>&1`; if (! $?) { die "FAIL: $prog should fail on multiquery $tag1, stdin $tag2.\n"; } unlink <$tmppfx.out*>; unlink <$tmppfx.hmm*>; unlink "$tmppfx.nhmm"; unlink "$tmppfx.sto"; unlink "$tmppfx.fa1"; unlink "$tmppfx.fa2"; unlink "$tmppfx.fa10"; unlink "$tmppfx.db"; unlink "$tmppfx.ndb"; unlink "$tmppfx.key"; print "ok\n"; exit 0; hmmer-3.1b2/testsuite/ecori.fa0000664361611702660230000000001612473612614015730 0ustar wheelerteddy>ecori GAATTC hmmer-3.1b2/testsuite/i15-hmmconvert.pl0000775361611702660230000002475412473612615017455 0ustar wheelerteddy#! /usr/bin/perl # Bug #h80: hmmconvert can't read H2 Nucleic files # # Usage: ./i15-hmmconvert.pl # Example: ./i15-hmmconvert.pl .. .. tmpfoo # # SRE, Tue May 18 13:32:40 2010 [Janelia] # SVN $Id$ BEGIN { $builddir = shift; $srcdir = shift; $tmppfx = shift; } # Verify that we have all the executables we need for the test. if (! -x "$builddir/src/hmmconvert") { die "FAIL: didn't find hmmconvert binary in $builddir/src\n"; } # Create our test files (data embedded in script as functions: see end of file &h2_nt_file("$tmppfx.nt.hmm"); &h2_aa_file("$tmppfx.aa.hmm"); @output = `$builddir/src/hmmconvert $tmppfx.nt.hmm 2>&1`; if ($? != 0) { die "FAIL: hmmconvert of H2 nucleic model failed\n"; } @output = `$builddir/src/hmmconvert $tmppfx.aa.hmm 2>&1`; if ($? != 0) { die "FAIL: hmmconvert of H2 protein model failed\n"; } print "ok\n"; unlink "$tmppfx.nt.hmm"; unlink "$tmppfx.aa.hmm"; exit 0; sub h2_nt_file { my ($hmmfile) = @_; open(HMMFILE, ">$hmmfile") || die "FAIL: couldn't write $hmmfile\n"; print HMMFILE <<"EOF"; HMMER2.0 [2.3.2] NAME ecori LENG 6 ALPH Nucleic RF no CS no MAP yes COM hmmbuild ecori.hmm testsuite/ecori.sto NSEQ 2 DATE Tue May 18 13:30:52 2010 CKSUM 3108 XT -9967 -1 -1000 -1000 -9967 -1 -9967 -1 NULT -1 -9967 NULE 0 0 0 0 HMM A C G T m->m m->i m->d i->m i->i d->m d->d b->m m->e -415 * -2000 1 -585 -585 1000 -585 1 - 0 0 0 0 - -21 -6672 -7714 -894 -1115 -701 -1378 -415 * 2 1000 -585 -585 -585 2 - 0 0 0 0 - -21 -6672 -7714 -894 -1115 -701 -1378 * * 3 1000 -585 -585 -585 3 - 0 0 0 0 - -21 -6672 -7714 -894 -1115 -701 -1378 * * 4 -585 -585 -585 1000 4 - 0 0 0 0 - -21 -6672 -7714 -894 -1115 -701 -1378 * * 5 -585 -585 -585 1000 5 - 0 0 0 0 - -21 -6672 -7714 -894 -1115 -701 -1378 * * 6 -585 1000 -585 -585 6 - * * * * - * * * * * * * * 0 // EOF close HMMFILE; } sub h2_aa_file { my ($hmmfile) = @_; open(HMMFILE, ">$hmmfile") || die "FAIL: couldn't write $hmmfile\n"; print HMMFILE <<"EOF"; HMMER2.0 [2.3.2] NAME test LENG 20 ALPH Amino RF yes CS no MAP yes COM hmmbuild 20aa.hmm testsuite/20aa.sto NSEQ 10 DATE Tue May 18 13:38:05 2010 CKSUM 9020 XT -8455 -4 -1000 -1000 -8455 -4 -8455 -4 NULT -4 -8455 NULE 595 -1558 85 338 -294 453 -1158 197 249 902 -1085 -142 -21 -313 45 531 201 384 -1998 -644 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d b->m m->e -585 * -1585 1 2806 -444 -1270 -1265 -1732 -744 -1182 -1034 -1212 -1545 -1010 -869 -1380 -1102 -1325 -156 -259 -640 -2039 -1721 1 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 -585 * 2 -608 5196 -2368 -2362 -1635 -1253 -1702 -987 -2034 -1540 -1191 -1745 -1831 -1953 -1922 -934 -927 -770 -1855 -1692 2 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 3 -1130 -2063 3441 243 -2502 -1157 -662 -2514 -843 -2578 -2029 -96 -1658 -421 -1434 -970 -1239 -2138 -2388 -1915 3 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 4 -988 -1921 379 3052 -2309 -1196 -495 -2108 -350 -2194 -1612 -103 -1621 -210 -770 -862 -1042 -1799 -2207 -1742 4 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 5 -1602 -1340 -2512 -2455 3740 -2315 -379 -478 -2225 -175 -190 -1874 -2503 -1781 -2079 -1892 -1647 -683 210 1257 5 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 6 -759 -1104 -1314 -1488 -2461 3330 -1563 -2503 -1721 -2645 -2082 -1325 -1776 -1591 -1791 -959 -1094 -1922 -2199 -2280 6 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 7 -1192 -1547 -812 -781 -520 -1557 4586 -1881 -457 -1789 -1357 -866 -1913 -669 -600 -1231 -1258 -1678 -918 -90 7 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 8 -1016 -805 -2637 -2367 -591 -2470 -1853 3039 -2040 329 346 -2180 -2589 -1943 -2070 -1879 -1051 1184 -1698 -1261 8 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 9 -1028 -1686 -800 -442 -2171 -1521 -263 -1873 3103 -1859 -1251 -547 -1750 74 599 -1004 -972 -1620 -1812 -1528 9 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 10 -1369 -1199 -2542 -2295 -129 -2453 -1603 488 -1867 2607 742 -2168 -2539 -1724 -1835 -1992 -1384 130 -1284 -897 10 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 11 -965 -982 -2125 -1844 -276 -2022 -1302 373 -1390 610 4141 -1701 -2229 -1356 -1425 -1444 -1028 126 -1279 -880 11 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 12 -637 -1349 -5 -148 -1773 -1078 -624 -1965 -499 -2112 -1514 3456 -1574 -435 -810 -661 -818 -1560 -1900 -1327 12 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 13 -934 -1220 -1352 -1451 -2187 -1314 -1456 -2160 -1488 -2268 -1827 -1359 3760 -1471 -1571 -1129 -1216 -1780 -2050 -2023 13 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 14 -862 -1548 -321 -247 -1672 -1336 -419 -1721 130 -1660 -1161 -427 -1678 3540 -59 -855 -904 -1495 -1728 -1237 14 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 15 -1181 -1614 -1431 -903 -2066 -1632 -446 -1944 559 -1867 -1326 -899 -1873 -156 3432 -1225 -1148 -1717 -1746 -1529 15 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 16 116 -498 -840 -867 -1751 -671 -949 -1625 -916 -1896 -1218 -622 -1304 -824 -1097 2786 -220 -1038 -1992 -1530 16 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 17 -52 -555 -1173 -1112 -1571 -872 -1041 -862 -950 -1353 -866 -843 -1455 -937 -1084 -285 3069 -557 -1898 -1539 17 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 18 -700 -665 -2337 -2135 -873 -1965 -1727 1107 -1863 -105 22 -1851 -2286 -1794 -1920 -1368 -823 2927 -1816 -1362 18 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 19 -1926 -1577 -2416 -2370 192 -2070 -795 -1602 -1882 -1347 -1210 -2018 -2383 -1854 -1777 -2150 -1992 -1643 5696 560 19 x -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -6045 -7087 -894 -1115 -701 -1378 * * 20 -1667 -1473 -2001 -1964 1181 -2210 -25 -1224 -1658 -1018 -871 -1505 -2415 -1423 -1618 -1747 -1692 -1248 501 4149 20 x * * * * * * * * * * * * * * * * * * * * - * * * * * * * * 0 // EOF close HMMFILE; } hmmer-3.1b2/testsuite/i6-hmmalign-mapali.pl0000775361611702660230000000353512473612615020242 0ustar wheelerteddy#! /usr/bin/perl # Test the hmmalign --mapali option. # # Usage: ./i6-hmmalign-mapali.pl # Example: ./i6-hmmalign-mapali.pl ../src/hmmalign ../easel/miniapps/esl-reformat . foo # # SRE, Mon May 25 09:52:48 2009 $hmmalign = shift; $eslreformat = shift; $testsuitedir = shift; $tmppfx = shift; if (! -x "$hmmalign") { print "FAIL: didn't find hmmalign binary $hmmalign\n"; exit 1; } if (! -x "$eslreformat") { print "FAIL: didn't find esl-reformat binary $eslreformat\n"; exit 1; } if (! -r "$testsuitedir/Caudal_act.hmm") { print "FAIL: didn't find $testsuitedir/Caudal_act.hmm\n"; exit 1; } if (! -r "$testsuitedir/Caudal_act.sto") { print "FAIL: didn't find $testsuitedir/Caudal_act.sto\n"; exit 1; } system("$eslreformat -u --rename foo fasta $testsuitedir/Caudal_act.sto > $tmppfx.fa"); if ($? != 0) { print "FAIL: esl-reformat failed unexpectedly\n"; exit 1; } system("$hmmalign -o $tmppfx.sto --mapali $testsuitedir/Caudal_act.sto $testsuitedir/Caudal_act.hmm $tmppfx.fa"); if ($? != 0) { print "FAIL: hmmalign failed unexpectedly\n"; exit 1; } system("$eslreformat -u fasta $tmppfx.sto > $tmppfx.2.fa"); if ($? != 0) { print "FAIL: esl-reformat failed unexpectedly\n"; exit 1; } system("$eslreformat -u fasta $testsuitedir/Caudal_act.sto > $tmppfx.3.fa"); if ($? != 0) { print "FAIL: esl-reformat failed unexpectedly\n"; exit 1; } system("cat $tmppfx.fa >> $tmppfx.3.fa"); if ($? != 0) { print "FAIL: cat failed unexpectedly\n"; exit 1; } system("diff $tmppfx.2.fa $tmppfx.3.fa"); if ($? != 0) { print "FAIL: --mapali doesn't produce expected sequences\n"; exit 1; } print "ok\n"; unlink "$tmppfx.fa"; unlink "$tmppfx.sto"; unlink "$tmppfx.2.fa"; unlink "$tmppfx.3.fa"; exit 0; hmmer-3.1b2/testsuite/20aa-alitest.fa0000664361611702660230000000020412473612614017014 0ustar wheelerteddy>test1 ACDEFGHIKLMNPQRSTVWY >test2 XXXXACDEFGHIMNXXXPQRSTVWY >test3 ACDEFGHILMNXXXXXPQRSTVWYXXXX >test4 XXXACDEFGHIKLMNPQRSTVWYXXX hmmer-3.1b2/testsuite/Patched.hmm0000664361611702660230000133024012473612615016401 0ustar wheelerteddyHMMER3/e [3.0 | March 2010] NAME Patched ACC PF02460.9 DESC Patched family LENG 803 ALPH amino RF no CONS yes CS no MAP yes DATE Thu Jun 16 11:48:47 2011 NSEQ 10 EFFN 1.713867 CKSUM 2541645256 GA -436.30 -436.30 TC -435.20 -435.20 NC -436.40 -436.40 STATS LOCAL MSV -12.6132 0.69618 STATS LOCAL VITERBI -13.0954 0.69618 STATS LOCAL FORWARD -6.4827 0.69618 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.54327 4.15694 3.10403 2.79804 3.04067 3.04113 3.75710 2.62553 2.84561 2.34089 3.40343 3.14759 3.44981 3.16839 3.12171 2.63570 2.76303 2.51805 4.45047 3.40873 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.00000 * 1 2.72659 4.18869 4.23243 3.64386 2.82429 3.83932 4.14476 2.31204 3.51665 1.67965 2.81973 3.15518 4.20430 2.94373 3.68276 3.12856 2.95838 1.95940 4.80081 3.61325 1 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 2 2.37529 3.49606 2.97843 2.89833 3.04286 3.64665 3.89114 3.01888 2.86347 2.18808 3.60050 3.33490 3.30471 3.17848 2.77963 2.88237 2.21593 2.78181 5.07269 3.82324 2 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 3 2.70698 4.37237 3.69767 3.13170 3.51745 3.70644 3.99422 2.44546 3.07293 2.05864 3.49174 2.97718 4.09445 3.36556 3.39869 1.93425 2.52502 2.32067 4.98329 3.75939 3 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 4 2.70487 4.55818 2.86717 2.83673 3.07621 3.62915 3.87112 3.08711 2.81304 1.99555 3.65714 2.76403 4.01629 3.13391 3.21216 2.14334 2.93825 2.47566 5.12202 3.85905 4 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 5 2.82309 5.26050 1.76835 2.43515 4.58100 2.52584 3.76853 4.04778 1.84716 2.98151 4.33580 2.98505 3.94925 2.88843 3.02799 2.78756 3.06426 3.64294 5.71977 4.31885 5 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 6 2.12782 4.37385 3.74605 3.17779 3.51305 3.73035 4.01712 1.83045 3.08756 2.29230 3.48530 3.53931 2.66173 3.39631 2.90343 2.99548 2.96360 2.59250 4.98758 3.76821 6 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 7 2.70391 3.50716 3.43107 2.86600 3.69372 3.63835 3.87785 3.06314 2.82099 2.19764 3.63472 3.31102 3.16434 2.67824 2.40713 2.52856 2.93634 2.29774 5.10311 3.84868 7 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 8 2.71674 4.77076 2.82361 2.65484 2.76840 3.57948 3.12090 3.36890 2.29668 2.59807 3.85355 2.74938 3.96743 2.98201 3.08118 2.79406 2.94805 3.08368 5.24499 2.45155 8 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 9 2.78106 4.19318 4.47133 3.87689 3.26362 3.93355 4.25690 2.20830 3.72223 1.81529 2.74449 3.99826 4.28974 3.90210 3.82987 3.23542 2.03405 1.85442 4.82961 3.01588 9 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 10 2.78470 4.60683 3.51242 2.93437 2.27529 3.70342 3.87261 3.13518 2.18654 2.49972 3.69951 3.36464 4.08013 3.17390 2.12444 2.94637 3.01101 2.89831 5.02737 2.84447 10 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 11 2.70708 4.87683 2.76865 2.56673 4.11031 3.54064 3.75182 3.52042 2.55937 2.74420 3.16603 3.08210 3.93337 2.33216 3.01749 2.42702 1.95372 3.20563 5.38875 4.06080 11 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 12 2.40968 5.21896 2.84348 1.84130 4.55704 2.94317 3.77565 4.02156 2.56196 3.54202 4.31808 2.99083 2.03195 2.49051 3.05146 2.77803 3.05270 3.61754 5.70940 4.31247 12 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 13 2.39579 4.96765 2.45321 2.51432 4.23606 3.51647 3.73321 3.66220 2.52180 2.86710 4.04682 2.35055 3.20092 2.87143 2.99339 2.43688 2.94345 2.48585 5.47090 4.12075 13 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 14 3.10309 5.62000 1.06125 2.39600 5.03961 2.76449 4.01681 4.56254 3.00160 4.04928 4.86829 2.35752 4.08087 3.17232 3.58717 2.30645 3.40358 4.09914 6.20389 4.71120 14 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07604 4.51845 2.77549 0.61958 0.77255 0.48576 0.95510 15 1.61279 4.47283 4.57841 4.04542 3.61041 4.21397 4.69912 1.36586 3.92682 2.01710 3.49200 4.26379 4.59384 4.18071 4.13030 3.55656 3.30939 2.03048 5.35318 4.16230 15 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 16 2.75192 5.13272 3.04680 2.48639 4.46102 3.52341 3.69126 3.90669 2.17699 3.42060 4.19473 3.01425 2.55745 2.52511 2.03955 2.40884 2.55799 3.51797 5.57435 4.21506 16 r - - 2.68621 4.42228 2.77522 2.73126 3.46357 2.40516 3.72497 3.29357 2.67720 2.69358 4.24693 2.90350 2.73742 3.18149 2.89804 2.37890 2.77499 2.98521 4.58480 3.61506 0.15611 1.97390 5.18208 0.25355 1.49630 0.43079 1.04981 17 2.41995 4.67794 2.77643 2.72024 3.15645 2.62228 3.82621 3.26471 2.70896 2.92842 3.78328 3.20065 3.97972 3.04134 3.13675 2.05219 2.93984 2.99273 2.91696 3.94198 18 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 18 2.77612 4.31334 4.00806 3.43320 2.34916 3.82553 4.01494 2.77818 2.83805 2.03548 3.42444 3.70331 4.19459 3.57888 2.45490 3.10105 3.00672 2.57920 3.12161 2.44382 19 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 19 2.45934 4.74440 3.22685 2.66558 3.94395 3.57803 3.79195 3.33645 2.29444 2.98494 3.21911 3.15932 3.96536 2.98434 2.67370 2.49683 2.12271 3.05470 5.27674 2.74086 20 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 20 2.93676 5.29735 2.71486 1.35006 4.74805 3.48326 3.94305 4.22123 2.80006 3.75387 4.56048 3.03961 1.86449 3.09053 3.29489 2.43870 3.22688 3.79716 5.92344 4.51551 21 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 21 2.70178 4.75906 2.78835 2.30552 3.16694 3.56801 3.78267 2.86698 2.62837 3.00041 3.84099 3.14126 3.22379 2.96959 2.42163 2.78027 2.93320 2.73834 5.28817 2.78729 22 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 22 2.40503 5.08147 2.66113 2.24487 4.37399 2.36772 3.69743 3.82428 2.45902 2.94721 3.40184 2.99147 3.89447 2.43691 2.94126 2.42427 2.93992 3.44380 5.54810 4.17111 23 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 23 1.97176 4.65296 3.30761 2.76653 3.86701 3.58494 3.12568 3.24866 2.73851 2.92077 3.78081 3.23461 3.99429 2.71235 3.15085 2.28372 2.95109 2.01439 5.23504 3.95759 24 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 24 2.70446 4.49162 2.94100 2.91751 2.52279 3.65628 3.89602 2.67951 2.87887 2.37792 3.59054 3.34945 4.03755 3.19337 2.22349 2.56004 2.93606 2.77084 5.05224 3.16741 25 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 25 2.17133 4.88583 3.11608 2.57300 4.15771 3.52461 3.17385 3.57431 2.56829 2.76427 3.99519 2.43217 3.93239 2.91920 3.02662 1.98898 2.55114 3.24648 5.42551 4.09422 26 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 26 2.71243 5.06970 3.01959 1.74203 3.47956 2.99161 3.70047 3.80485 2.21085 2.94067 4.12699 3.00209 3.90029 2.82011 2.57890 2.44333 2.94325 3.43021 5.53641 4.16554 27 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 27 2.70402 5.05378 2.41217 2.46543 4.33795 3.50436 3.03311 3.78298 2.27810 2.76449 4.11111 2.64773 3.89625 2.81975 2.62264 2.70014 2.64666 2.89889 5.52432 3.33423 28 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 28 2.84388 4.77429 3.31566 1.61618 3.73097 3.67654 3.90072 3.28980 2.78990 2.94222 3.86551 3.30606 4.09241 3.16684 3.17381 2.95699 3.08437 2.63540 2.06185 3.79380 29 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 29 2.70984 4.52290 3.44710 2.55474 3.67183 3.64922 3.89102 2.69356 2.84855 2.41339 3.61989 3.32891 1.99109 3.17142 3.23252 2.88650 2.59101 2.79595 5.09133 3.04468 30 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 30 2.70560 3.39225 3.75993 2.44346 3.44959 3.72735 3.99519 2.79813 3.11084 1.72653 3.43535 3.53950 4.10316 3.39888 2.88445 2.98677 2.93734 2.23853 4.92289 3.04966 31 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 31 2.72010 5.18471 2.32302 2.17782 4.50981 3.48641 3.68529 3.98251 1.97819 3.48108 4.23228 2.96102 3.88670 2.50558 2.92085 2.45291 2.66206 2.71052 5.62868 4.22846 32 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07604 4.51845 2.77549 0.61958 0.77255 0.48576 0.95510 32 2.68624 4.60036 2.89254 2.18197 3.15002 3.59303 3.81736 3.15052 2.72924 2.82676 3.69240 3.22101 3.97791 3.05744 3.14398 2.40982 2.91783 2.56220 3.58125 2.63975 33 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.43079 1.04981 33 2.70746 5.13270 2.98698 2.19729 4.44451 3.03420 3.10441 3.90691 2.42928 2.94741 4.18261 2.41682 3.88589 2.46941 2.57268 2.45897 2.93844 3.50550 5.58485 3.16418 34 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07604 4.51845 2.77549 0.61958 0.77255 0.48576 0.95510 34 2.91894 5.45652 2.33451 1.80789 4.78469 3.47903 3.80156 4.27807 1.43366 3.74771 4.52256 2.54104 3.97124 2.92353 3.09886 2.84864 3.16535 3.84227 5.87802 4.44222 35 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 35 3.52925 4.97846 2.85216 3.92532 0.93557 4.34343 3.77989 3.50702 3.91195 2.98610 4.10398 4.02788 4.70017 4.03087 4.11553 3.67755 3.75831 3.35184 4.04313 1.72023 36 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.43079 1.04981 36 2.89190 4.26111 4.72193 4.13882 1.75819 4.03705 4.18851 2.32136 3.94543 1.72452 3.27623 4.13309 4.38276 4.05815 3.97325 3.35039 3.12160 2.21069 3.11242 2.67360 37 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 37 2.41807 4.97613 3.06901 2.56313 4.43073 2.88082 3.80334 3.87856 2.57764 3.43262 4.21325 2.60736 2.03846 2.93318 2.66363 2.12327 2.97184 3.47312 5.62126 4.26282 38 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 38 2.77668 5.08489 2.92203 2.15327 4.40862 1.87597 3.79106 3.85146 2.59094 2.85370 4.20949 2.58203 3.94856 2.92758 3.06934 2.18094 3.02728 3.48037 5.61618 4.24694 39 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 39 2.72187 5.21556 2.37779 2.22609 4.55557 3.48642 3.04176 4.03568 2.00109 3.51648 4.25913 2.95595 3.88408 2.77683 2.29579 2.38618 2.65994 3.60382 5.64867 4.24377 40 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 40 2.37127 4.70326 3.29683 2.77012 4.12675 2.16327 3.91313 2.88384 2.76643 3.17095 4.00185 2.75672 3.95983 3.10129 3.20009 1.90021 2.42272 3.19036 5.44394 4.14827 41 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 41 2.70421 4.65222 2.88687 2.42542 2.60815 3.60054 3.82407 3.21130 2.24075 2.51180 3.74154 3.21416 3.98622 3.04815 3.13688 2.82218 2.93570 2.64739 5.19402 2.71166 42 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 42 2.73919 5.19739 2.53548 2.19124 4.51686 3.48799 3.70201 3.98828 2.45983 3.00816 4.24817 2.62086 2.21949 2.41579 2.95195 2.70795 2.66639 3.57483 5.64443 4.24329 43 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 43 2.42070 4.78630 3.18635 2.19193 3.99392 3.56433 3.77531 2.57203 2.33464 2.62020 3.86650 2.74228 3.95215 2.65817 3.05043 2.77583 2.93654 3.10077 3.39663 4.00329 44 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 44 2.03262 3.69773 3.04840 2.49198 4.30252 3.51456 3.02837 3.73941 2.24612 3.30115 4.08875 2.56840 3.90785 2.83944 2.61503 2.26270 2.94236 3.37927 5.50351 4.14408 45 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 45 2.15532 4.46837 3.51362 2.94868 3.01733 2.95499 3.91376 2.58436 2.90605 2.69056 3.57685 3.37106 4.04219 3.21845 2.19582 2.58988 2.93397 2.48205 5.05181 3.80888 46 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 46 3.01099 4.49056 4.24465 2.95503 1.70108 4.03332 3.97606 2.92182 3.61312 2.58708 3.58508 3.90031 4.39425 3.81767 3.81207 3.32792 3.24180 2.34202 4.43159 1.55717 47 y - - 2.68621 4.42228 2.77523 2.73127 3.46357 2.40516 3.72498 3.29357 2.67744 2.69358 4.24693 2.90318 2.73743 3.18150 2.89804 2.37890 2.77523 2.98487 4.58480 3.61506 0.08753 2.54448 5.24079 0.65898 0.72853 0.48576 0.95510 47 2.38072 3.19655 4.41063 3.82119 3.29271 3.88384 4.22914 2.01793 3.67279 1.69830 3.29606 3.94985 4.25629 3.86464 3.79441 2.41598 2.98330 2.03262 4.82994 3.64461 50 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 48 2.72915 4.36987 2.62267 3.16838 2.52276 3.73860 3.97737 2.24995 3.10905 2.27364 3.46798 3.52986 4.11410 2.91816 3.42431 2.99552 2.96076 2.63179 4.88844 2.44252 51 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 49 3.07470 4.40577 4.94666 4.36935 2.76104 4.34206 4.72137 1.40465 4.21468 1.68738 3.34805 4.45854 4.65199 4.36380 4.28664 3.67241 2.69322 1.64985 5.18341 4.02130 52 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 50 2.74723 3.29348 4.19352 3.61301 3.36523 3.84948 4.18351 2.00624 3.49078 2.41452 3.35891 3.83248 4.22769 3.72813 2.95952 3.14245 1.91077 1.82747 4.88952 3.69481 53 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 51 1.38065 4.60639 3.43095 2.92990 4.05582 3.47918 4.01680 3.42045 2.90710 3.10841 3.96464 3.33614 4.00047 2.68489 3.30320 2.11893 2.97427 2.46076 5.41711 4.15004 54 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 52 2.73818 5.05748 3.06069 2.50839 4.35162 3.02805 2.92702 3.78878 1.62007 2.92023 4.12763 3.03560 3.92459 2.84549 2.89886 2.41039 2.62270 3.42416 5.53037 4.17494 55 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 53 2.47849 5.13033 2.15937 2.43803 4.44622 2.49034 3.69873 3.90703 2.45497 3.42849 4.19208 2.97945 3.89363 2.54428 2.61144 2.43271 2.95128 2.94153 5.59531 4.20726 56 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 54 2.71906 3.69774 3.00794 2.03687 4.41359 2.58383 3.70819 3.86576 2.45561 3.39834 4.16985 2.68723 3.90283 2.82448 2.08066 2.43706 2.95431 3.47719 5.57338 4.19767 57 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 55 2.73918 5.18114 2.55246 2.20686 4.49699 2.54751 3.70780 3.12136 2.47172 3.47624 4.23685 2.20419 3.00522 2.81857 2.96458 2.46275 2.97405 3.55743 5.63579 4.23780 58 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 56 2.76979 5.18694 2.13452 2.43257 4.45983 3.49727 2.98328 3.95274 2.51548 3.47535 4.24823 2.57690 3.92177 2.85395 3.00844 1.84657 3.00661 3.55757 5.62994 3.08450 59 s - - 2.68646 4.42253 2.77517 2.73117 3.46382 2.40495 3.72522 3.29382 2.67745 2.69383 4.24718 2.90334 2.73674 3.18174 2.89794 2.37899 2.77511 2.98546 4.58505 3.61377 0.97964 1.22938 1.10238 1.26120 0.33312 0.48576 0.95510 57 2.61981 4.72749 2.74927 2.58803 4.41842 3.19609 3.96772 3.97452 2.86020 3.58448 4.43005 1.28981 3.85381 3.17511 3.27313 2.12250 3.01365 3.50429 5.70362 4.33182 66 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02436 4.12276 4.84510 0.61958 0.77255 0.36888 1.17606 58 3.50786 4.77488 5.34050 4.77944 3.38551 4.86499 5.23245 1.13748 4.63657 1.54897 1.80944 4.96435 5.03363 4.70069 4.69697 4.23137 3.73352 2.22142 5.46968 4.41075 67 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 59 2.43737 4.31455 4.10001 3.54187 3.38827 3.82097 4.20343 2.63122 3.42235 1.25349 2.73017 3.79662 4.22412 3.68409 3.64857 2.55950 3.02890 2.47880 4.96338 3.77363 68 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.43079 1.04981 60 2.74748 5.25936 2.38003 2.11931 4.60114 2.91164 3.69436 4.08705 2.22019 3.56142 4.30391 2.33786 3.89527 2.49507 2.29084 2.70493 2.98076 3.64883 5.68983 4.27644 69 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 61 2.70880 5.08903 2.64322 2.24112 4.38308 2.85207 3.69566 2.69676 2.24660 3.37211 4.14391 2.98904 2.79211 2.55140 2.93775 2.69744 2.94034 3.45203 5.55305 3.41189 70 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 62 2.74539 5.24108 2.28848 2.40478 4.57926 2.95480 3.69780 4.06105 2.08476 3.54372 4.29018 2.36961 3.89655 2.80082 2.54798 2.12133 2.97938 3.62941 5.67878 4.26901 71 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 63 2.40591 4.25739 3.93740 3.36037 2.89527 3.76706 4.04765 2.71017 3.27171 2.20747 3.36481 3.65385 4.14004 2.89374 3.52475 3.03885 2.61101 2.24348 4.84899 2.00515 72 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 64 2.26305 4.64662 4.72652 4.17165 3.36310 4.35195 4.74145 2.48543 4.01842 0.86060 2.64685 4.39443 4.67109 4.21060 4.17385 3.68796 3.46498 2.50824 5.25201 4.14032 73 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 65 2.46824 5.29242 2.17615 2.39867 4.62296 3.48702 3.02471 4.10737 2.27457 3.59043 4.34329 1.89386 3.91861 2.50483 2.99317 2.74309 3.02563 3.67663 5.72771 4.31077 74 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 66 2.55386 5.50481 1.74126 1.51618 4.82473 3.49052 3.84346 4.32488 2.08916 3.79949 4.57534 2.94777 3.99683 2.96822 3.21562 2.87767 3.20407 3.88564 5.93786 4.48556 75 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 67 3.15644 4.47571 4.96917 4.41708 3.66045 4.47758 4.92031 1.41186 4.29362 1.85179 3.52681 4.56352 4.78697 4.49674 4.42649 3.82015 2.22416 1.39298 5.43199 4.24844 76 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 68 2.08134 4.36425 3.68792 2.68420 3.49287 3.71074 3.97409 2.22527 3.05466 2.56867 3.47093 3.49303 4.08834 3.34917 2.91144 2.96499 2.93717 2.13716 4.95621 2.71282 77 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 69 2.71018 5.16184 2.68476 2.42437 4.48523 3.49057 3.05142 3.21451 2.14943 3.45636 4.20897 2.96755 3.88361 2.10284 2.54499 2.45308 2.62144 3.54094 5.60629 4.21213 78 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 70 3.00192 4.37596 4.68434 4.11726 3.51573 4.23000 4.60651 1.52886 3.98050 1.69154 3.44134 3.19871 4.56659 4.19329 4.12419 3.55020 3.24196 1.46160 5.18194 3.99249 79 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 71 2.74180 5.08907 2.38306 2.16510 4.36721 3.50770 3.72860 3.80932 2.50811 2.47696 3.36022 1.97558 3.91766 2.85458 2.99043 2.73448 2.97583 3.44163 5.56151 4.18760 80 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 72 2.90376 5.45971 1.85420 1.86066 4.78717 3.48750 3.80575 4.28830 2.08710 3.75569 4.51934 2.18070 3.97167 2.48812 3.14321 2.83468 3.15038 3.84360 5.88650 4.44052 81 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 73 2.70902 4.57309 3.39129 2.41814 2.99623 3.63170 3.85862 3.10927 2.51108 2.79499 3.66808 3.28272 4.01460 3.11784 2.75902 2.86128 2.56314 2.86189 3.53846 2.23809 82 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 74 2.41144 4.28733 4.41940 3.84468 3.43641 4.02163 4.37137 1.54263 3.72008 1.85379 3.40145 3.16394 4.38135 3.94258 3.89000 3.32547 3.09857 1.78238 5.01677 3.82403 83 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 75 2.70319 4.25543 3.92926 3.35181 3.36766 3.13071 4.04868 2.36247 3.26421 1.84571 2.82611 3.64808 4.13587 3.00185 3.51934 2.32957 2.93560 2.17490 4.86053 3.65643 84 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 76 2.44960 5.17170 2.96815 2.21891 4.49706 3.48921 3.02066 3.96759 2.41952 3.46752 4.21914 2.34038 3.88474 2.53043 2.56357 2.45631 2.32913 3.55204 5.61560 4.21917 85 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07604 4.51845 2.77549 0.61958 0.77255 0.48576 0.95510 77 2.44989 5.24751 2.45581 2.40698 4.57779 3.48098 3.72251 4.04990 2.22093 3.54605 4.31040 1.65681 3.91463 2.83564 2.61262 2.74571 3.02167 3.63400 5.69175 4.29001 86 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07976 4.45973 2.73186 0.61958 0.77255 0.58047 0.82015 78 3.17612 4.48457 5.07183 4.49244 2.58347 4.46397 4.82766 1.64486 4.33899 1.63657 2.56094 4.59021 4.72636 4.43416 4.38427 3.80265 3.40619 1.44733 5.19667 4.07759 87 v - - 2.68571 4.42276 2.77535 2.73072 3.46334 2.40564 3.72453 3.29405 2.67759 2.69307 4.24585 2.90316 2.73722 3.18198 2.89730 2.37914 2.77535 2.98570 4.58528 3.61554 0.12453 2.19721 5.12076 2.66281 0.07230 0.51594 0.90866 79 2.68820 4.91850 3.06483 2.03712 4.16894 2.98011 3.71475 3.59078 2.50482 3.18399 3.99027 3.03462 3.90208 2.85850 2.66890 2.42690 2.27362 2.86369 5.41746 3.21633 111 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01731 4.46072 5.18307 0.61958 0.77255 0.43159 1.04833 80 3.01047 4.36145 4.86719 4.27478 3.31460 4.23059 4.57262 1.47926 4.10402 1.67149 2.59027 4.34935 4.54554 4.23371 4.15733 3.55167 3.24168 1.77907 5.02847 2.97471 112 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 81 2.71543 5.06435 3.02502 2.18721 4.35077 3.51082 3.70319 3.79487 2.22323 2.93889 4.12207 3.00686 2.48074 2.30372 2.92751 2.71077 2.65380 3.42342 5.53156 3.23270 113 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 82 2.71397 4.99495 2.37730 2.20371 4.25623 3.51788 2.81349 3.68513 2.50758 2.87151 4.06037 3.02885 3.91426 2.85899 2.98081 2.72574 2.33149 2.52371 5.48176 4.12667 114 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 83 2.74684 5.18895 2.07938 2.42145 3.49160 2.95040 3.71433 3.97437 2.27571 3.48577 4.24745 2.30264 3.90494 2.82604 2.97476 2.15676 2.98270 3.56669 5.64509 4.24600 115 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 84 2.72762 5.12086 2.36152 2.44710 4.42084 2.43898 3.70566 2.66227 2.46392 3.40666 4.17761 2.67353 3.90243 2.49328 2.51102 2.71152 2.96023 3.48779 5.58200 4.19983 116 d - - 2.68637 4.42244 2.77538 2.73142 3.46373 2.40489 3.72434 3.29373 2.67683 2.69348 4.24708 2.90290 2.73758 3.18165 2.89819 2.37885 2.77538 2.98537 4.58496 3.61522 0.82642 0.96763 1.70152 0.68208 0.70434 0.48576 0.95510 85 2.64803 4.32848 3.58705 3.01959 2.83435 2.93078 3.17810 2.14082 2.51678 2.53437 3.43390 3.40380 4.01878 3.25749 3.28975 2.89239 2.87955 2.59917 4.87933 2.89348 121 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01989 4.32351 5.04586 0.61958 0.77255 0.75468 0.63518 86 2.64846 4.86768 2.59846 2.47552 4.11407 3.46944 3.67947 2.97841 2.47722 3.13213 3.94114 2.61724 3.09650 2.82616 2.94371 2.35986 2.45332 3.20513 5.37011 3.30609 122 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01989 4.32351 5.04586 0.61958 0.77255 0.34821 1.22402 87 2.70702 4.74255 3.21700 2.17932 3.93911 3.01443 3.79242 2.41477 2.35800 2.38825 3.82631 2.75654 3.96414 2.98568 3.07785 2.79248 2.93830 3.05035 5.27485 3.29815 123 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08360 4.51845 2.66941 0.61958 0.77255 0.48576 0.95510 88 2.33179 4.46768 3.46855 2.91101 3.00601 3.60607 3.89793 2.65327 2.87611 2.71711 3.59983 2.78354 4.01019 3.18949 3.25430 2.31627 1.97034 2.76732 5.07230 3.82471 124 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01746 4.45231 5.17466 0.61958 0.77255 0.59147 0.80635 89 3.55030 4.90918 4.65216 4.26462 1.18946 2.85233 3.78907 3.44874 4.14662 2.94516 4.06270 4.18446 4.75932 4.20837 4.24653 3.75102 3.78748 3.29617 3.99371 1.26017 125 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01746 4.45231 5.17466 0.61958 0.77255 0.42492 1.06080 90 2.74346 5.20283 3.00692 2.21048 4.54209 3.51292 3.68435 4.00922 1.83394 3.49617 4.24877 2.59025 3.90428 2.48085 2.32151 2.71265 2.57944 3.59120 5.63004 3.42120 126 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 91 2.83127 5.36419 1.87546 1.93351 4.69587 3.48383 3.75710 4.18951 2.26940 3.66304 4.41709 2.33896 3.93678 2.45139 3.05624 2.77508 2.68521 3.74928 5.79541 4.36398 127 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 92 2.43412 4.17542 4.24725 3.65958 2.69528 3.83202 4.13073 2.59472 3.52801 1.64750 3.28202 3.08144 4.19960 3.73637 3.68565 3.12314 2.95102 1.91313 4.77026 2.89463 128 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 93 2.55657 0.65846 4.56965 4.36422 4.54358 3.29059 4.98583 3.88069 4.19554 3.72997 4.63543 4.03034 4.10709 4.45161 4.29317 2.22396 3.09839 3.38025 5.98599 4.80347 129 C - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 94 2.70634 4.75780 2.78322 2.64924 3.96030 3.56968 3.78995 3.35337 2.63669 2.40352 2.58764 3.14701 3.96029 2.58117 3.07751 2.08068 2.63881 3.06869 5.29118 3.98979 130 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 95 2.72581 5.20963 2.63974 2.40881 4.54567 2.92731 3.68640 4.02420 2.43002 3.51221 4.25858 2.52259 3.19115 2.53442 2.14561 2.17311 2.95881 3.59668 5.65108 4.24564 131 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 96 3.22776 4.55575 4.88512 4.38586 1.65127 4.28963 3.99776 2.95218 4.19581 1.87986 2.74140 4.26223 4.61940 4.23801 4.20210 3.61428 3.45359 2.82646 2.73285 1.68516 132 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.36187 4.51845 1.22854 0.61958 0.77255 0.48576 0.95510 97 2.71159 1.53236 3.64072 3.14144 3.95764 3.48314 4.02707 3.23165 1.85083 2.99775 3.93021 3.45877 4.02405 3.29776 2.97608 2.89338 3.03896 2.95694 5.30521 4.08735 133 c - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02300 4.17958 4.90192 0.61958 0.77255 0.38947 1.13139 98 2.73122 5.10449 2.07243 2.43621 4.36322 3.48750 3.70544 3.84381 2.48021 2.83543 4.16423 2.65588 3.89927 2.06336 2.96241 2.71680 2.96516 3.46570 5.55209 3.07561 134 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 99 2.69362 3.18978 4.35790 3.76322 3.20713 2.55053 4.14465 2.03336 3.60542 1.86915 3.23151 3.88583 4.19355 3.79443 3.71928 3.12441 2.92774 2.35043 2.73446 3.54474 135 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 100 2.39283 5.20185 2.37914 2.16557 4.51834 2.95544 3.72806 3.98575 2.51676 3.50269 4.27238 1.87827 3.90615 2.84584 3.01649 2.73319 3.00582 2.93002 5.66812 4.26508 136 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 101 2.69595 2.07135 3.35804 1.96601 3.82489 3.57011 3.90832 3.16453 2.81452 2.50120 3.75745 3.28847 4.00791 3.15734 3.20437 2.47546 2.95758 2.90345 5.21850 3.95188 137 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.43079 1.04981 102 2.73678 4.79737 3.17535 2.67306 3.96862 2.92750 3.14613 3.44753 2.67828 3.08368 3.92773 3.16527 1.97963 3.02397 3.11288 2.48075 2.98379 3.15060 5.31296 2.53479 138 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 103 2.40095 4.45794 3.52254 2.95691 3.00753 3.66300 3.91379 2.96599 2.91472 2.35379 3.56124 2.88014 3.28991 3.22449 2.68980 2.60451 2.93239 2.00341 5.03677 3.79554 139 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 104 2.76982 5.23000 2.99941 2.15821 4.57409 3.52378 3.06438 4.03992 2.14929 3.52184 4.27720 1.98685 3.92006 2.80058 2.26275 2.73637 2.63575 3.62154 5.65054 4.26775 140 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07604 4.51845 2.77549 0.61958 0.77255 0.48576 0.95510 105 2.69549 5.13916 2.57887 2.19429 4.45869 3.47406 3.03165 3.21918 1.99599 2.94252 4.18740 2.95227 3.86865 2.25859 2.88708 2.67015 2.92636 3.51621 5.58559 4.19302 141 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 106 2.41820 4.47388 3.57692 3.01833 2.38911 3.70282 2.32690 2.98161 2.97071 2.36667 3.57829 2.70582 4.08161 3.27352 3.32584 2.94916 2.97431 2.75678 4.84733 2.94332 142 h - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 107 2.40268 4.19675 4.28698 3.70525 3.31666 3.87588 4.20696 1.92744 3.57643 2.35476 3.31524 3.88944 4.24525 3.79289 3.74103 3.17341 2.56736 1.81329 4.85765 2.21671 143 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07882 4.45973 2.74532 0.61958 0.77255 0.58047 0.82015 108 2.68190 4.76274 3.13018 2.60457 4.00093 3.51687 3.76501 2.41855 2.59241 3.03544 3.87366 2.14939 3.92595 2.55911 3.02941 2.41025 2.50885 3.09615 5.31358 4.00640 144 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.20957 4.39933 1.73283 0.61958 0.77255 0.66443 0.72271 109 2.67546 4.30337 3.78038 3.24973 2.66765 2.04916 4.01101 2.70473 3.17268 2.34943 2.23540 3.56239 4.08133 3.45456 3.45661 2.96028 2.93943 2.53373 4.85186 3.56815 145 g - - 2.68611 4.42267 2.77535 2.73165 3.46222 2.40512 3.72536 3.29396 2.67755 2.69323 4.24598 2.90353 2.73722 3.18142 2.89808 2.37908 2.77505 2.98560 4.58331 3.61474 0.49219 0.96360 4.93437 1.66992 0.20858 0.52426 0.89647 110 2.66531 4.32571 3.64519 2.23547 3.43687 3.66972 3.21116 2.42259 3.00940 2.24289 2.52613 3.44969 4.04616 3.30436 3.33277 2.92329 2.89676 2.59027 3.47048 3.67586 161 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01860 4.38945 5.11180 0.61958 0.77255 0.51052 0.91674 111 2.77344 4.37028 3.87010 3.30706 3.46218 3.79068 4.07375 2.41896 2.69905 1.30610 3.43302 3.63571 4.17281 3.48057 3.39208 2.62132 3.01030 2.54048 4.97754 3.76718 162 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 112 2.37347 4.75071 3.18035 2.36576 3.95514 3.54955 3.76260 2.83572 2.60012 2.32550 3.83274 3.12067 3.93740 2.64253 2.65470 2.42837 2.58529 3.06297 5.27865 3.97519 163 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 113 2.74874 5.21579 2.54391 2.42736 4.55892 3.49583 3.68040 4.02812 1.92790 3.51054 4.26481 2.96842 3.89759 2.50861 2.25514 1.98939 2.97747 3.60716 5.64088 4.25222 164 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 114 2.73314 5.16202 2.29698 2.41580 4.48002 2.49935 3.69781 3.94499 2.45319 2.92353 4.22380 2.35179 3.89180 2.81080 2.24164 2.70693 2.96834 3.54145 5.61858 4.22589 165 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 115 2.69463 5.09008 2.62410 2.18775 4.39144 3.48168 3.67438 3.09107 2.42422 2.66060 4.14327 2.63270 3.87575 2.47373 2.27012 2.67963 2.92557 3.45708 5.54832 4.16759 166 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 116 2.69784 4.93136 3.07193 2.51644 4.18212 3.51636 2.35495 2.95643 2.26426 3.19374 3.99999 2.67335 3.90720 2.49779 2.94559 2.47404 2.92824 2.80889 5.42290 4.08275 167 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 117 3.07129 5.66995 2.10222 1.72390 4.97738 2.23195 3.92170 4.49884 2.86817 3.96928 4.77573 1.57050 4.03214 3.06589 3.44587 2.96796 3.34306 4.05112 6.11544 4.61945 168 n - - 2.68633 4.42240 2.77505 2.73138 3.46311 2.40512 3.72509 3.29369 2.67723 2.69337 4.24705 2.90321 2.73754 3.18161 2.89816 2.37902 2.77505 2.98505 4.58492 3.61518 0.28075 1.43059 5.18208 0.93381 0.49932 0.58047 0.82015 118 2.70729 5.07240 3.00825 2.45724 4.37749 3.49400 3.13718 3.82512 2.42402 3.36124 4.13679 2.99071 3.18098 2.48926 2.46665 2.00643 2.31109 3.44432 5.53885 4.16935 172 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.58047 0.82015 119 2.71877 4.97975 3.08067 2.51980 4.24830 2.55069 3.02474 3.02857 2.44899 3.24689 4.04791 3.04087 3.91558 2.48154 2.10454 2.73403 2.60048 3.33022 5.45836 4.11780 173 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01733 4.45973 5.18208 0.61958 0.77255 0.43079 1.04981 120 2.87174 4.25177 4.66830 4.07513 2.19876 4.05594 4.38859 1.65768 3.90702 1.76072 3.26128 4.15722 4.39989 4.06398 3.98138 2.77497 3.10511 1.97637 4.90205 3.72059 174 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 121 2.71790 5.20212 2.34403 2.41017 4.53723 3.48534 3.67778 4.01504 2.01652 3.50195 4.24693 2.37426 3.88293 2.52847 2.61835 2.34437 2.94927 3.04021 5.63941 4.23588 175 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 122 3.44521 4.71297 5.37226 4.80564 2.67023 4.79686 5.16502 1.34271 4.66726 1.19738 3.21605 4.93031 4.99451 4.71251 4.69704 4.15643 3.67239 1.83442 5.42132 4.33135 176 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 123 2.78076 5.12778 2.94151 2.23569 4.42322 2.89064 3.03342 3.86860 2.51519 3.41467 4.20313 3.01765 3.94144 2.48210 2.98063 2.76996 1.64367 3.49654 5.60236 4.23176 177 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 124 4.48106 5.48128 5.34268 5.22296 1.25380 5.01972 3.75013 4.06455 5.01883 3.25051 4.60667 4.59312 5.28861 4.74449 4.87237 4.42773 4.68435 4.01972 3.83328 0.70526 178 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 125 3.82761 5.42446 4.50452 4.46194 5.33326 4.07855 5.43868 5.10776 4.58651 4.63167 5.73648 4.68720 0.19352 4.94902 4.71504 4.02418 4.32233 4.66624 6.28610 5.47539 179 P - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 126 2.70098 4.57813 2.88362 2.80684 3.74166 3.62148 3.85374 2.37004 2.77895 2.80149 3.11696 3.26728 4.00513 2.59929 2.74641 2.84861 2.36651 2.49859 5.13760 3.23425 180 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 127 2.69517 4.25772 3.93684 3.36403 2.90905 2.56026 4.06299 2.72539 3.27825 2.47015 2.08612 3.65225 4.13186 3.53507 3.53314 2.56473 2.53008 2.17736 4.87924 3.67481 181 m - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 128 2.70473 5.17862 2.59568 2.41105 4.50882 2.96699 3.14825 3.98411 2.21510 3.47728 4.22338 2.53969 3.20990 2.52997 2.63206 2.67403 2.59235 3.56128 3.62347 4.21866 182 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 129 2.70061 4.23668 3.97073 3.39106 2.54343 3.76857 4.05571 2.69309 3.29740 2.21745 2.77054 3.67156 4.14062 2.80144 2.87434 3.04226 2.55214 2.04833 4.83988 3.00274 183 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 130 2.70410 4.61968 3.32597 2.38324 2.67044 2.64719 3.83797 3.17008 2.44075 2.29604 3.71174 3.23767 3.99529 3.07366 3.15642 2.52321 2.93570 2.91337 5.17023 3.23216 184 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 131 2.85509 5.22788 2.07003 2.47880 4.70202 1.60828 3.89817 4.17975 2.75552 3.70406 4.48984 2.57766 3.98683 3.03514 3.26948 2.46376 2.53885 3.74095 5.87369 4.46307 185 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 132 2.71832 5.17807 2.66129 2.03888 4.50314 3.48933 3.68299 3.97415 2.24125 2.97113 4.22537 2.63584 3.88680 2.78758 2.54701 2.68915 2.08854 3.55816 5.62127 4.22390 186 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 133 2.78859 5.29903 2.49814 2.02427 4.63252 2.98240 3.72723 4.11866 2.02924 3.59820 4.34918 2.95134 2.26853 2.45300 2.99120 2.74167 3.02547 3.68470 5.73277 4.31413 187 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 134 2.74924 4.14570 4.54272 3.94190 2.34498 3.16880 4.22030 1.76271 3.76454 1.86394 3.22893 4.00797 4.26488 3.92360 3.83234 3.21126 2.98135 2.09054 4.75079 2.97255 188 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 135 3.03263 4.70402 2.96495 3.29903 2.11202 3.92957 3.87060 3.23760 3.29567 2.86590 3.83175 3.63535 4.31857 3.54939 3.62344 2.54538 3.26931 3.02614 4.47529 1.32282 189 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 136 3.48138 4.76225 5.38776 4.79615 2.51764 4.77527 5.09078 1.75951 4.64024 0.97839 2.44388 4.91635 4.95106 4.62778 4.63203 4.12467 3.69742 2.16921 5.30800 4.26840 190 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 137 2.33881 5.16077 2.48971 2.45649 4.53605 1.87846 3.77228 4.00220 2.56152 3.52499 4.29563 2.99723 3.12478 2.47518 3.05571 2.45849 3.01956 3.58944 5.69301 4.29849 191 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 138 2.38140 4.67889 3.26875 2.45948 2.99213 2.98717 3.81866 3.25898 2.69626 2.58700 3.77658 3.19502 2.44723 3.03059 3.12466 2.53930 2.59790 2.98775 5.23195 3.94638 192 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 139 2.70807 4.58177 3.37697 2.81763 3.74125 3.62600 2.47410 2.69511 2.78276 2.45124 3.67905 2.23488 4.01206 3.11369 3.18342 2.57222 2.94068 2.44273 5.13952 3.87200 193 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 140 3.39215 4.68804 5.24163 4.66888 1.36479 4.67327 4.94952 1.92640 4.51923 1.46484 3.17373 4.78089 4.89370 4.56764 4.55204 4.01866 3.61645 1.98915 5.22968 4.05950 194 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 141 2.41359 4.39181 3.70776 3.16933 2.18818 1.96627 4.00699 2.93520 3.12299 2.65183 3.55515 3.52036 4.09767 3.40830 3.44412 2.55545 2.96709 2.70785 4.95311 2.97690 195 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 142 2.34050 5.22622 2.24285 2.53304 4.82698 1.21983 4.04150 4.30807 2.98214 3.85351 4.66502 2.49230 4.04370 3.20348 3.51065 2.91402 3.25581 3.84652 6.03546 4.62119 196 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 143 2.28023 4.41491 4.23223 3.81581 3.94379 3.64396 4.59810 2.67983 3.74246 2.85942 3.87556 3.93958 2.84076 4.01841 3.97419 3.05674 3.12708 0.91576 5.50943 4.30990 197 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 144 2.78000 5.29732 2.18572 2.13706 4.63500 3.48496 3.71880 4.12295 1.90042 3.59783 4.34518 2.53617 3.91205 2.24306 2.97507 2.73276 2.67801 3.68501 5.72821 4.30914 198 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 145 2.75929 4.18587 4.39819 3.80605 2.40408 3.89935 4.22043 2.26186 3.65994 1.82239 3.26312 3.94700 3.23650 3.84964 3.78469 3.19814 2.23332 1.91917 4.81754 3.63509 199 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 146 2.70076 4.57819 2.62369 2.50123 2.63442 3.03392 3.85370 3.11659 2.78024 2.80204 3.12333 3.26655 4.00480 3.10469 3.18606 2.84823 2.56239 2.49906 5.13738 2.98981 200 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 147 2.76143 5.25883 2.21631 2.20539 4.59000 2.94371 3.71128 4.07260 2.26861 3.55828 4.30805 2.95169 2.38235 2.48676 2.97118 2.71996 2.59746 3.64294 5.69720 4.28338 201 e - - 2.68580 4.42326 2.77379 2.73146 3.46397 2.40537 3.72521 3.29355 2.67707 2.69316 4.24791 2.90288 2.73752 3.18158 2.89902 2.37908 2.77532 2.98470 4.58578 3.61604 0.67899 1.55004 1.27072 2.74816 0.06619 0.48576 0.95510 148 2.73509 5.15363 2.76392 1.68113 4.48407 3.41287 3.65584 3.94350 2.38234 3.44935 4.22951 2.51290 2.99657 2.77652 2.37454 2.70107 2.97167 3.54376 5.59918 4.21634 232 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02261 4.19640 4.91875 0.61958 0.77255 0.30116 1.34692 149 2.71037 5.03977 2.70677 2.22470 4.31718 3.50771 3.70972 3.05279 2.48149 2.87417 4.10066 2.31604 2.76447 2.83502 2.95990 2.71061 2.42590 3.39291 5.51649 4.15001 233 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 150 2.89777 5.31216 1.99381 2.44693 4.73904 1.84894 3.89419 4.22147 2.76016 3.73798 4.52610 2.19499 3.99787 3.03079 3.28292 2.86095 2.21972 3.78715 5.90355 4.47948 234 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 151 2.70991 4.80966 3.16335 2.36123 4.02344 3.55924 3.04350 2.63488 2.60171 3.05712 3.89085 2.20144 3.95059 2.94914 3.04874 2.77386 2.26526 2.76960 5.33272 4.02060 235 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 152 2.73886 4.20672 4.21356 2.97551 2.72038 3.85060 4.15566 1.83535 3.50210 1.94065 3.29706 3.83401 4.21537 3.72389 2.99899 3.13888 2.97100 1.94959 4.82898 3.63882 236 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 153 2.48068 5.15997 2.59456 2.24338 4.48107 3.48976 3.68132 3.23726 1.96983 3.45423 4.20828 2.96751 3.88488 2.78697 2.56757 2.06385 2.94305 3.53786 5.60676 4.21240 237 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 154 2.71269 4.96163 2.67878 2.26824 4.21145 3.52521 3.73064 3.06283 2.51883 3.22617 4.02950 3.04362 3.91974 2.87157 2.67612 2.05797 2.94448 3.30153 5.45270 2.44130 238 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 155 1.61387 4.59456 2.77101 2.93600 3.99390 3.51203 4.03636 3.27921 2.97434 3.04095 3.91404 3.34998 4.02595 3.28170 3.37688 2.42903 2.99248 1.77838 5.38447 4.11950 239 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 156 2.87480 5.14133 3.24945 2.65338 4.47120 3.63963 3.75519 3.88147 1.40094 3.40970 3.21980 3.15056 4.02169 2.88281 2.26604 2.16916 3.08997 3.53022 5.56628 4.26336 240 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 157 1.89983 4.21113 4.28522 3.69994 3.31855 3.88243 4.20449 2.26523 3.57366 1.89524 2.71593 3.88879 4.24870 3.78698 3.73951 2.70265 2.99256 1.92804 4.85790 3.66934 241 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 158 2.70796 4.12169 4.43737 3.83712 3.21141 3.85103 3.22996 1.85080 3.66997 2.07646 2.61914 3.93243 4.21574 3.84464 3.76055 3.15188 2.54407 1.94358 3.51531 3.55734 242 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 159 2.70911 4.36514 3.70020 3.12803 2.61700 3.71538 3.97677 2.83810 3.05365 2.55780 2.97015 3.50009 4.09213 2.82785 2.38047 2.97030 2.52943 1.95879 4.95434 3.73215 243 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 160 3.72933 4.99112 5.49016 4.92086 3.30715 5.05371 5.36912 2.40093 4.76995 0.61560 2.52155 5.15019 5.15256 4.76049 4.80251 4.42988 3.94354 2.15865 5.49328 4.50111 244 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 161 2.74935 4.29867 3.95861 3.38581 2.72929 3.79932 4.02101 2.46937 3.29578 2.48228 3.40680 3.67248 4.17028 2.23470 3.54882 3.07129 2.52746 2.56114 2.69895 2.54871 245 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 162 3.24285 4.65713 4.51722 4.01563 1.64812 4.23568 3.92606 2.55130 3.87740 2.65852 3.72466 4.08075 4.57746 2.90626 4.02236 3.54249 3.46943 2.94227 4.23702 1.28734 246 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 163 2.75397 4.63579 3.40785 2.84222 2.25675 3.65784 3.18591 2.74018 2.74292 2.85294 3.73036 2.74373 4.04024 3.11656 1.97931 2.89291 2.98301 2.93219 5.09595 3.77462 247 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 164 2.07132 4.48776 3.55767 3.02003 3.80312 3.54496 4.01194 3.16344 2.98394 1.92415 3.74712 3.40475 3.10595 3.29738 3.35539 2.15683 2.22122 2.89227 5.21767 3.97437 248 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 165 2.46297 5.24715 2.62086 1.97848 4.58953 3.49314 3.69269 4.07007 1.83827 3.54695 4.29237 2.65231 3.89939 2.79422 2.28817 2.70946 2.98076 3.63714 5.67583 4.27052 249 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09580 4.51845 2.52009 0.61958 0.77255 0.48576 0.95510 166 2.67873 4.38796 3.57343 3.00526 2.50427 3.66155 3.05362 2.57479 2.95218 2.30169 3.49164 3.40479 4.04023 2.76484 2.85597 2.55495 2.91026 2.66097 4.95457 3.04904 250 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01767 4.44032 5.16266 0.61958 0.77255 0.60881 0.78526 167 2.74246 5.24956 1.97945 2.36930 4.58326 2.86396 3.10297 4.06860 2.17689 3.54947 4.29794 2.56890 3.19855 2.50395 2.94808 2.69828 2.97826 3.63503 5.68466 4.26797 251 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01767 4.44032 5.16266 0.61958 0.77255 0.41586 1.07814 168 2.80217 5.31597 2.11960 1.94255 4.64564 3.48285 3.74021 4.13367 2.52149 3.61526 4.36866 2.61216 2.68231 2.48780 3.02860 2.75290 2.37622 3.69985 5.75294 4.32917 252 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 169 2.74352 5.23879 2.60181 1.82021 4.57174 2.51477 3.07990 4.05353 2.21911 3.53886 4.28591 2.95147 3.17734 2.80139 2.94744 2.70444 2.66016 3.62355 5.67674 4.26554 253 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 170 2.70890 4.70808 3.25532 1.86242 3.89694 3.58887 3.80587 3.28263 2.35698 2.94134 3.10138 3.18238 3.97527 3.00999 3.08971 2.80734 2.60392 2.61914 3.01783 3.95684 254 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 171 2.70405 4.69297 3.26294 2.70386 3.88508 3.01500 3.81175 3.27098 2.43744 2.93246 3.19061 3.18868 3.97553 2.55036 3.10540 2.50620 2.28521 2.14988 5.23861 3.95153 255 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 172 2.81437 5.32944 2.40610 1.59297 4.66092 3.48514 3.74809 4.14930 2.07622 3.62955 4.38452 2.95003 3.06581 2.85822 3.03478 2.24616 3.05421 3.71490 5.76613 4.34182 256 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 173 2.40846 5.04026 3.02537 1.78365 4.30560 3.52243 3.72499 3.74583 2.48919 2.85129 4.10315 3.02681 3.92136 2.03708 2.95424 2.73641 2.96439 3.39064 5.51263 3.37950 257 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 174 2.41701 4.46232 2.61023 2.95187 3.60385 3.66496 3.91232 2.64974 2.91214 2.30855 2.98916 3.37470 4.04539 2.72014 3.28176 2.90460 2.93341 2.47014 5.03884 2.63476 258 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 175 2.10510 4.30891 3.81823 3.25109 2.88892 2.94101 4.03419 2.79581 3.18168 2.06120 3.44462 3.57780 4.10707 3.45521 3.47319 2.11371 2.93758 2.26451 4.93409 3.72065 259 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 176 2.47959 5.07576 3.03887 2.48264 4.37422 3.04424 3.70629 3.07160 1.70943 3.36011 4.13894 2.69482 3.90988 2.82612 2.55404 2.43174 2.95512 3.44306 5.54313 4.17759 260 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 177 2.71643 5.13241 2.63630 1.91832 3.22784 3.49371 3.69312 3.20809 2.02658 3.42061 4.18444 2.39068 3.89212 2.80469 2.93384 2.69646 2.94839 3.50189 5.58779 4.19966 261 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 178 2.63925 4.85035 4.87478 4.45312 1.71479 4.47201 3.84328 3.35261 4.28730 2.88024 3.97718 4.28621 4.79784 4.30576 4.32575 3.80381 3.76672 3.20395 1.38516 1.71469 262 w - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 179 2.77858 5.08451 3.02297 1.38916 4.37870 3.53933 3.75215 3.08992 2.48531 3.36683 4.16474 3.04978 3.95106 2.88305 2.51447 2.44593 3.01237 3.44622 5.56271 4.20886 263 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 180 2.70482 5.02290 2.34956 2.48183 4.29637 3.51104 3.06245 3.73513 2.47526 2.91291 3.20878 3.01402 3.90240 2.54175 2.37015 2.70838 2.64577 3.37484 5.49975 3.29274 264 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 181 2.43291 5.09604 3.00266 2.09037 4.39547 3.49979 3.69380 3.84829 2.20559 3.38152 3.40056 2.98947 3.89373 2.49442 2.92591 2.04912 2.52167 3.46233 5.55836 4.17956 265 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 182 2.45985 4.63900 4.96100 4.41222 3.45405 4.51509 4.93047 1.75736 4.26737 0.93485 3.28232 4.59675 4.80650 4.43326 4.39169 3.86409 3.52731 2.23031 5.37077 4.25209 266 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 183 2.70097 4.56041 3.38952 2.19019 2.72823 3.09097 3.86605 3.09475 2.80240 2.45570 3.65962 3.28417 4.01164 3.12504 3.20282 2.28139 2.59300 2.48211 5.12671 3.86545 267 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 184 2.45014 5.15361 2.17017 2.42696 4.47315 3.49116 3.68106 3.93968 2.15388 3.44691 3.25998 2.96980 3.88518 2.31241 2.63187 2.68585 2.60574 3.53063 5.60109 4.20855 268 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 185 2.88595 4.25500 4.72236 4.13833 2.10615 4.03112 4.18510 2.23601 3.94348 1.79963 2.76401 4.12978 4.37743 4.05537 3.96911 3.34444 3.11563 2.48364 3.11481 2.09153 269 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 186 2.86797 4.25313 4.64613 4.05214 2.35358 4.04526 4.37450 2.11949 3.88589 1.47910 3.24485 4.14119 4.38892 4.04291 3.96394 2.76981 3.10073 1.80190 4.89167 3.71403 270 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 187 2.75009 5.21426 2.98262 1.88415 4.55262 3.50997 2.70133 4.02164 2.18657 3.50822 4.26109 2.61618 3.90677 2.79425 2.44639 2.71746 2.36272 3.60229 5.64251 4.25308 271 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 188 2.75144 5.24993 2.24854 2.11652 3.53273 3.48313 3.70273 4.06514 2.19822 3.54934 4.29697 2.16484 3.89879 2.28272 2.95511 2.71086 2.98593 3.63444 5.68647 4.27377 272 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 189 2.70454 4.99406 3.05403 2.25702 3.43996 3.51658 3.71367 3.69153 2.08497 3.26402 4.05698 3.02584 3.90745 2.54997 2.58423 2.44972 2.51755 2.87066 5.47741 3.39346 273 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 190 2.74802 5.02545 2.64510 2.22086 4.28545 3.51749 3.75431 3.71948 2.55598 3.29858 4.10048 3.03039 3.24821 2.89448 3.03358 2.45576 2.62128 3.37320 5.51813 1.96447 274 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 191 2.16871 5.20926 2.63318 2.22537 4.53972 3.48258 3.13706 4.01795 2.43688 3.50852 4.25592 2.29694 3.88713 2.47418 2.93043 2.41274 2.62662 3.59246 5.65008 4.24361 275 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 192 2.74205 4.93214 2.27691 2.57275 2.75787 3.51335 3.81147 3.65481 2.64369 3.25861 4.07782 3.08805 2.66815 2.97271 3.11196 1.80360 2.99695 3.31827 5.48269 4.13097 276 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 193 2.70582 5.12850 2.39364 2.04239 3.52368 3.49106 2.95112 3.90015 2.19925 3.41854 4.17889 2.97342 3.27872 2.79344 2.92132 2.68553 2.65359 2.92826 5.58277 4.19380 277 e - - 2.68624 4.42231 2.77525 2.73100 3.46360 2.40519 3.72500 3.29360 2.67747 2.69361 4.24696 2.90353 2.73711 3.18152 2.89807 2.37872 2.77525 2.98524 4.58483 3.61509 0.35600 1.75042 2.07287 0.45078 1.01371 0.48576 0.95510 194 2.67419 4.50730 3.39423 2.82728 3.64779 3.60522 2.39719 3.03360 2.76093 2.37644 3.60371 3.27201 3.98721 3.10404 2.65209 2.83994 2.44685 2.45543 5.05762 3.15702 280 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01859 4.39001 5.11236 0.61958 0.77255 0.52668 0.89298 195 3.45658 4.69234 5.40426 4.87983 3.62639 4.92568 5.42741 1.17943 4.77432 1.36045 3.39378 5.04871 5.12071 4.90233 4.87114 4.31560 3.69828 1.49704 5.70178 4.58801 281 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01745 4.45284 5.17518 0.61958 0.77255 0.59069 0.80731 196 2.73162 5.19932 2.90541 2.15020 4.53013 3.47551 3.68114 4.00254 2.16137 3.49537 4.24981 2.33661 3.88440 2.17117 2.89531 2.44758 2.36008 3.58353 5.63746 4.23894 282 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01745 4.45284 5.17518 0.61958 0.77255 0.42533 1.06003 197 2.71793 2.99155 4.55847 3.95277 2.36030 3.87805 4.20730 2.02133 3.76597 2.04742 2.78004 3.99853 3.32343 3.92024 3.81900 3.18485 2.56637 2.07303 4.73683 3.55871 283 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 198 2.70589 4.64259 3.31022 2.75505 3.81225 2.93926 2.96703 3.20862 2.73024 2.58720 3.74196 3.22773 3.99207 3.06484 3.14681 2.26560 2.18119 2.94623 5.18977 2.66090 284 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 199 2.15727 4.15687 4.56335 3.96306 2.71207 3.92880 4.25783 1.74476 3.78795 2.26019 2.73968 4.03316 4.28642 3.94914 3.85781 3.23569 2.99660 1.86896 4.79397 3.01409 285 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 200 2.39898 4.38854 3.63954 3.07077 2.36028 3.69724 3.95265 2.87720 2.52655 2.30577 2.99181 2.55008 4.07533 3.31244 3.35207 2.94701 2.93520 2.65800 4.96624 2.98674 286 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 201 2.72681 4.81179 3.22336 2.80737 4.30373 3.46455 1.82790 3.79444 2.80145 3.40667 4.23579 3.25219 4.00742 3.18055 3.20391 1.52534 2.49533 3.40979 5.59587 4.26536 287 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 202 2.72410 5.08509 2.17798 2.45859 4.36707 3.50346 3.71175 3.81930 2.48198 2.61050 4.14415 2.59824 3.90547 2.48560 2.96412 2.18298 2.95692 3.44439 5.55193 3.28652 288 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 203 2.46616 4.95634 3.09429 2.53696 4.22404 3.52986 3.73484 3.64702 2.50467 3.23247 3.16329 3.05770 3.92476 2.14024 2.51898 2.01448 2.64763 3.30789 5.45709 4.11566 289 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 204 2.71109 4.17766 4.20869 3.62138 3.28007 3.82066 4.12957 2.02501 3.49534 2.36124 2.83539 3.81611 4.19008 3.71165 3.66570 2.65823 2.28497 2.16306 4.79606 2.26949 290 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 205 2.53021 4.37448 4.77055 4.20154 3.52673 4.25985 4.65647 1.72814 4.06617 1.50658 3.44223 4.33822 4.59500 4.26153 4.19123 3.58506 2.72831 1.54174 5.20422 4.02216 291 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 206 2.28569 5.22694 2.48753 1.98623 4.56196 3.01463 3.68963 4.04387 2.22703 3.52860 4.27352 2.61485 3.10174 2.79178 2.93566 2.69386 2.59492 3.61283 5.66565 4.25522 292 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 207 2.87962 5.40972 1.79444 1.69593 4.74097 3.49700 3.78540 4.23263 2.57019 3.70439 4.46756 2.95719 3.96412 2.39062 2.33316 2.81864 3.12174 3.79579 5.83491 4.40541 293 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 208 3.20587 5.54464 2.65827 0.96424 5.07199 1.67139 4.17227 4.59194 3.13244 4.11261 4.96787 3.14222 4.18589 3.35000 3.64963 3.15284 3.52949 4.14419 6.21087 4.81690 294 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 209 3.51351 4.78533 5.38830 4.81169 3.35291 4.84501 5.19199 1.96199 4.67256 1.06920 1.83198 4.96671 5.01427 4.69007 4.69769 4.20205 3.73403 1.83474 5.41574 4.37698 295 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 210 2.70841 4.93842 2.70023 2.53160 4.18663 3.53093 3.73117 3.04481 2.31895 3.20024 4.00698 3.05408 3.92145 2.29522 2.67287 2.73419 2.51451 2.27861 5.43371 4.09289 296 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 211 2.81156 5.26638 2.53182 2.20981 4.60977 3.53358 3.72352 4.07299 2.17861 3.55566 4.31870 3.00629 3.94445 2.83202 1.56796 2.77481 2.67612 3.65834 5.68483 4.30365 297 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 212 2.25648 4.70660 3.30612 2.82708 4.28294 2.31940 3.99628 3.68001 2.84912 3.32488 4.14672 1.63542 3.96606 3.17942 3.28049 2.74163 2.55808 2.62466 5.58159 4.28400 298 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 213 1.05503 4.42717 3.97429 3.72200 4.83359 1.44017 4.74210 4.28172 3.80085 3.95832 4.74883 3.72815 3.99985 4.03407 4.07588 2.14488 3.01210 3.60329 6.16477 4.99718 299 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 214 2.70412 4.73815 2.49187 2.66160 3.93475 3.57569 3.79289 2.50403 2.37392 2.37895 3.20424 2.64074 3.96322 2.98642 3.08438 2.79059 2.60471 3.04101 5.27274 3.97506 300 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 215 2.41581 4.67499 3.28489 2.44167 3.85924 3.59780 3.82013 2.74249 2.69081 2.90807 3.76539 3.20569 3.98474 3.03558 2.60326 2.82022 1.84251 2.97354 5.22046 3.19893 301 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 216 2.41586 3.25805 4.56306 3.96002 2.70432 3.91070 4.23965 2.25306 3.78026 1.50900 2.66227 4.02166 4.26928 3.93659 3.84285 3.21744 2.57907 2.32363 4.77117 3.59601 302 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 217 2.35906 4.16788 4.27386 3.68366 2.82522 3.84049 4.15224 2.06358 2.78090 2.09515 2.78398 3.85629 4.20676 3.75571 3.70149 3.13256 2.56927 1.96040 4.79212 3.60424 303 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 218 2.71199 4.62820 3.80399 3.62324 4.74892 3.37980 4.71000 4.10978 3.66539 3.83358 4.74638 3.76896 0.68144 4.01040 3.92559 2.89478 2.38919 3.60298 6.08366 4.89995 304 P - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 219 2.74421 4.49503 3.56345 2.99637 2.11190 3.70011 3.90549 3.00484 2.50217 2.40151 3.59689 2.84828 4.07867 3.24740 2.83862 2.94506 2.97430 2.77650 4.96359 2.45639 305 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 220 3.52071 4.80408 5.37811 4.78974 1.43693 4.79585 5.05191 1.86586 4.63443 1.27494 2.47571 4.91648 4.96240 4.61388 4.62921 4.14410 3.73382 2.59862 5.25364 4.16097 306 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 221 2.68554 4.46108 3.55218 3.00216 3.66964 3.03464 3.96497 2.65572 2.96458 2.73777 3.62486 2.70895 4.04612 3.27290 3.32957 2.28721 2.56327 1.75639 5.10197 3.86202 307 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 222 2.89565 4.27223 4.66771 4.08349 2.82598 2.99763 4.45406 1.67768 3.92891 2.05596 3.34875 4.18763 4.44516 4.10685 4.02641 3.41380 3.13230 1.39632 4.99504 3.80940 308 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 223 2.51293 4.47933 3.80053 3.47655 4.72392 1.48287 4.55310 4.16625 3.53091 3.82515 4.62225 3.61858 3.99373 3.80538 3.86062 1.63453 1.56528 3.55660 6.03966 4.83165 309 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 224 2.99776 3.01913 4.88381 4.30355 1.64012 4.22727 4.58448 1.59061 4.13400 2.20439 3.33393 4.35939 4.55985 4.27818 4.19102 3.55581 3.23643 1.91304 5.04499 3.84259 310 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 225 1.70775 4.25497 4.18682 3.60889 2.43055 3.86468 4.19072 2.30317 3.49896 2.11684 3.33772 3.83790 4.23878 3.72872 3.69979 3.15598 2.30092 2.38295 4.89274 3.69674 311 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 226 2.67723 4.54889 5.16315 4.62373 3.70794 4.64851 5.13033 1.25106 4.50597 1.61647 3.53620 4.76014 4.92938 4.69379 4.62401 4.00880 3.51121 1.42169 5.57300 4.40125 312 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 227 3.69173 4.96074 5.46032 4.88399 3.28915 5.00163 5.30767 2.42306 4.73421 0.79050 1.77747 5.09992 5.11180 4.72114 4.76098 4.36934 3.90428 2.21774 5.45077 4.45621 313 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 228 2.12968 3.08518 4.55637 3.95690 2.67953 3.91765 4.25393 2.21459 3.78188 1.89217 3.25833 4.02484 4.27911 3.94659 3.85275 3.22521 2.61989 1.82050 4.79653 3.61597 314 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 229 2.82314 3.18107 4.60793 4.01439 3.30867 4.00494 4.34803 2.13920 3.84931 1.76832 2.72329 4.10177 4.35769 4.01867 3.93275 3.31501 2.04755 1.80971 4.88959 3.71147 315 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 230 2.98042 3.00836 4.36802 3.82634 1.23344 4.02649 3.99820 2.87850 3.68505 2.54495 3.53343 3.95296 4.38970 2.94475 3.84249 3.32754 3.21350 2.70185 4.42801 2.42875 316 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 231 2.30179 4.43646 3.70452 3.16474 3.77061 3.57169 4.09942 2.59516 3.11758 2.82108 3.72096 3.50834 4.06795 3.41908 3.46412 1.58610 2.12843 2.38592 5.21591 3.98541 317 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 232 2.30167 3.10201 4.46090 3.86074 2.40297 3.85504 4.18215 2.07009 3.69142 2.07507 3.23693 3.94619 4.22151 3.86298 3.77578 2.66545 2.60536 2.11111 4.74514 3.56338 318 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 233 2.23715 4.34447 4.83660 4.25360 2.59765 4.23149 4.59746 1.62304 4.09521 1.76144 3.33168 4.34136 4.55718 4.25145 4.17107 3.55457 3.23031 1.65961 5.08782 3.91881 319 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 234 2.70000 3.33373 4.09491 3.51324 3.31601 3.78438 4.09848 2.64537 3.40397 2.13230 3.32371 3.74667 4.16258 3.63718 3.60899 2.34816 2.10388 1.97608 4.82087 2.82194 320 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09113 4.51845 2.57450 0.61958 0.77255 0.48576 0.95510 235 2.66342 3.22380 3.82174 3.26151 3.48324 3.66260 4.05139 2.18467 3.18894 2.55363 3.46652 2.96607 4.08885 3.46607 3.47987 1.77244 2.92541 2.21301 4.96377 3.75045 321 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01759 4.44491 5.16726 0.61958 0.77255 0.60222 0.79317 236 2.70733 4.12567 4.39796 3.80176 2.68124 3.84718 4.15685 2.51514 3.64279 2.06116 2.34557 3.91350 4.20952 3.82129 3.74583 2.72073 2.93938 1.67534 4.72740 2.96160 322 v - - 2.68622 4.42229 2.77524 2.73128 3.46358 2.40517 3.72499 3.29358 2.67713 2.69359 4.24694 2.90351 2.73744 3.18151 2.89805 2.37891 2.77524 2.98523 4.58262 3.61507 0.11852 2.24372 5.16726 0.66365 0.72354 0.60222 0.79317 237 2.67931 4.36327 3.62266 3.05294 3.49570 3.67225 3.93334 2.46089 2.98701 2.57244 3.47096 3.43882 4.05230 3.29096 2.52243 2.60570 2.28130 2.30690 4.95137 2.56982 325 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01759 4.44491 5.16726 0.61958 0.77255 0.60222 0.79317 238 2.68670 4.69603 2.77635 2.41227 2.66665 3.55927 3.78113 3.27544 2.64401 2.08693 3.78193 3.14869 3.94906 2.98368 2.63339 2.51128 2.91853 3.00039 5.23108 3.93698 326 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01759 4.44491 5.16726 0.61958 0.77255 0.41927 1.07156 239 2.40013 4.93510 3.09019 2.53195 3.27427 3.53053 3.16666 3.10497 2.28055 3.19702 4.00370 2.69730 3.92060 2.87430 2.27638 2.27032 2.93753 3.27232 5.43050 4.08989 327 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 240 2.69946 4.38129 3.08836 3.07343 2.99816 3.69558 3.95488 2.86983 2.58857 2.28784 2.79088 3.46038 4.07364 3.31494 3.35720 2.13336 2.93124 2.34888 3.53216 3.73978 328 s - - 2.68632 4.42239 2.77498 2.73137 3.46368 2.40527 3.72336 3.29368 2.67755 2.69369 4.24704 2.90361 2.73754 3.18160 2.89780 2.37858 2.77503 2.98532 4.58491 3.61517 0.81671 1.42168 1.14946 0.83169 0.57149 0.48576 0.95510 241 2.64495 4.38485 3.47781 2.94258 3.23203 2.41018 3.79086 2.93067 2.88378 2.61812 3.52460 3.32934 3.98326 3.19819 3.22870 2.40663 2.89099 2.69929 2.98855 2.64167 332 s - - 2.68600 4.42232 2.77527 2.73130 3.46361 2.40520 3.72502 3.29361 2.67748 2.69362 4.24697 2.90354 2.73712 3.18107 2.89808 2.37879 2.77527 2.98525 4.58484 3.61510 0.79327 0.84219 2.14668 0.14036 2.03292 0.77188 0.62016 242 2.62624 4.21020 3.76349 3.19001 2.78412 3.66786 3.94928 2.56516 3.09293 1.96848 3.27298 3.51758 4.04109 3.37829 2.82529 2.93844 2.43822 2.07467 4.81254 3.59814 334 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02450 4.11709 4.83944 0.61958 0.77255 0.74763 0.64148 243 2.64598 4.55370 3.27486 2.71006 3.71954 3.54199 2.85273 3.10425 2.29709 2.47395 2.46715 3.17177 3.92664 2.98793 2.98186 2.47922 2.87518 2.85005 5.09232 3.82221 335 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02200 4.22351 4.94586 0.61958 0.77255 0.70417 0.68224 244 2.64509 4.53050 2.83182 2.73280 3.69599 3.55125 2.98310 2.07157 2.71564 2.75389 3.62911 3.19604 3.04634 3.04298 3.12153 2.78883 2.87936 2.50282 5.09278 3.82272 336 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09579 4.29730 2.55435 0.61958 0.77255 0.78263 0.61102 245 3.02217 5.53674 1.20703 2.25621 4.81640 3.35743 3.86366 4.36482 2.81892 3.85804 4.70694 2.83527 3.95746 1.95477 3.36751 2.92409 3.30556 3.94486 5.99165 4.51327 337 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02200 4.22351 4.94586 0.61958 0.77255 0.85386 0.55473 246 3.07080 4.84469 3.40695 2.19304 3.39492 3.73308 3.95186 3.44265 2.92226 3.02697 4.02516 3.47844 4.20236 3.38284 3.21319 3.19570 3.32326 3.22504 1.19575 3.41030 338 w - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02200 4.22351 4.94586 0.61958 0.77255 0.43349 1.04481 247 2.70436 4.17871 4.15969 3.57640 2.81398 3.81208 4.12011 2.24603 3.45880 2.04150 3.29061 2.95216 4.18080 3.68311 3.64489 2.70076 2.93798 1.62286 4.80548 3.60858 339 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01759 4.44491 5.16726 0.61958 0.77255 0.60222 0.79317 248 2.69222 4.88439 3.10250 2.54261 4.13412 2.90149 3.72333 3.54798 2.26948 2.78948 3.96464 3.05746 3.91164 2.87410 2.23375 2.23207 2.58922 2.83600 5.39142 4.06204 340 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01759 4.44491 5.16726 0.61958 0.77255 0.60222 0.79317 249 2.72951 4.62322 3.35897 2.81086 3.59605 3.62372 2.73291 3.18313 2.76082 2.84792 3.02693 3.26563 4.01574 3.10536 3.15601 1.65867 2.96448 2.93017 5.03132 2.91452 341 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01759 4.44491 5.16726 0.61958 0.77255 0.60222 0.79317 250 2.46169 5.20761 3.10621 2.67791 4.67714 3.59740 3.83502 4.08613 1.07674 3.59700 4.41699 2.63574 4.06001 2.97043 2.70085 2.94932 3.19999 3.70268 5.71589 4.41955 342 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01759 4.44491 5.16726 0.61958 0.77255 0.41927 1.07156 251 2.89862 4.38432 4.28709 3.72452 2.78319 4.00310 4.34746 2.12637 3.62258 2.29932 3.39069 3.97153 1.59771 3.85934 3.83952 3.30556 3.14436 1.89992 5.03872 3.82130 343 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 252 2.71160 4.10966 4.52264 3.91796 3.19063 3.86497 4.18750 1.70702 3.73526 2.02603 2.60733 3.97522 4.22830 3.89385 3.79694 2.75685 2.94363 2.13982 3.35890 2.92834 344 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 253 2.95469 4.49228 4.12095 2.50062 3.42421 4.02892 4.31313 2.58142 3.45956 1.18833 2.78754 3.88715 4.37092 3.72827 3.72238 3.31044 3.18532 2.15261 5.09770 3.92380 345 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 254 0.76713 4.39465 4.12446 3.76298 4.39585 3.29904 4.64188 3.59099 3.71722 3.45551 4.34219 3.77930 4.04690 3.98378 3.97012 2.27682 3.01233 2.44888 5.82527 4.64022 346 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 255 1.91499 4.39128 4.77398 4.19965 3.47377 4.27023 4.64473 1.47861 4.06347 1.90543 2.74180 4.34104 4.59414 4.24584 4.18294 3.59173 3.26844 1.82220 5.17524 4.00504 347 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 256 2.11912 4.22718 4.07447 3.49481 3.33861 2.88997 4.10945 2.34514 3.39077 1.86859 2.39843 3.74418 4.17468 3.63031 3.60794 3.08206 2.57134 2.44138 4.84987 3.65365 348 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 257 1.43641 4.43052 3.95836 3.73026 4.86623 1.04634 4.76304 4.31825 3.83009 3.99471 4.78306 3.73190 4.00241 4.05738 4.10071 2.13911 3.01867 3.62394 6.19517 5.03034 349 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 258 3.03385 2.20732 4.94534 4.36305 3.42587 4.29421 4.67355 1.77397 4.19642 1.72018 2.68768 4.42703 4.61165 4.34030 4.25182 3.62377 3.26988 1.62892 5.13370 3.97144 350 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 259 2.58552 4.40015 4.82844 4.23577 2.66095 4.23863 4.57016 2.40093 4.07463 1.27954 2.56008 4.33872 4.54732 4.20138 4.14177 3.55655 3.26604 1.69339 5.02795 3.88841 351 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 260 2.55960 2.47615 3.95470 3.45403 3.95752 2.72981 4.31295 3.31647 3.39353 3.04406 3.92015 3.64101 4.03413 3.66702 3.69151 1.71501 1.75724 2.45200 5.39322 4.18869 352 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 261 2.14928 4.49850 3.74536 3.36100 4.60157 3.26881 4.43718 4.02270 3.38064 3.68525 4.49303 3.56257 1.26324 3.67585 3.73114 1.78429 2.35535 3.47799 5.92082 4.69623 353 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 262 2.71900 4.13065 4.45194 3.85258 2.70136 3.16571 4.18813 2.21582 3.68688 1.75130 2.75015 3.94788 4.22910 3.86062 3.77734 2.71020 2.95142 1.85921 4.75472 3.57348 354 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 263 2.62661 4.61503 4.95399 4.37152 3.31588 4.47939 4.80907 2.12361 4.22523 1.15446 1.69094 4.54499 4.74009 4.34227 4.31830 3.80610 3.48726 2.42637 5.21627 4.12250 355 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 264 0.58933 4.42108 4.07790 3.88313 4.79537 3.21763 4.83962 4.17285 3.92969 3.92910 4.75962 3.80839 4.03068 4.17388 4.14833 2.12279 3.04216 3.54603 6.16419 5.00087 356 A - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 265 2.86148 2.45049 4.57729 4.04050 3.59966 3.95453 4.56224 1.45111 3.89910 2.50504 3.54587 4.14542 4.41679 4.12544 4.05255 3.31281 1.77808 2.15040 5.21115 4.01984 357 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 266 2.35117 4.23905 4.07160 3.49758 3.37634 2.62665 4.12945 2.31395 3.39774 1.94893 3.37260 3.74727 4.17901 3.64092 3.62122 2.69107 2.96069 1.78806 4.88498 3.68640 358 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 267 1.74117 4.44439 3.92178 3.53948 4.60323 3.24891 4.54551 3.99918 3.53204 3.69565 4.51073 3.65126 3.99441 3.81314 3.84816 1.35336 1.46091 3.44853 5.94655 4.74664 359 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 268 1.14323 4.43952 3.93803 3.63651 4.80085 1.92604 4.66931 4.25158 3.69157 3.91620 4.70418 3.68959 3.99209 3.94121 3.99238 1.49542 3.00241 3.58961 6.12224 4.93971 360 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 269 2.86415 4.25901 4.60271 4.01021 1.87562 3.09365 4.34703 2.09187 3.84841 1.59087 3.23447 4.11225 4.37386 4.00891 3.93623 3.33757 3.09666 2.11132 4.87045 3.68422 361 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 270 1.98892 4.53801 3.91604 3.82048 4.99320 0.61100 4.91124 4.42379 4.02003 4.14683 4.97764 3.83024 4.09991 4.24300 4.24859 2.80668 3.16112 3.73897 6.29600 5.16913 362 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 271 2.13968 4.30321 4.36253 3.79183 2.15750 3.94113 4.29388 2.56162 3.66354 1.42224 3.29421 3.97469 4.31830 3.86958 3.82599 3.24965 2.65380 2.42875 4.91584 3.71813 363 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 272 3.75093 4.98777 5.60443 5.02506 3.29380 5.11045 5.41139 1.73824 4.88445 0.81404 1.99224 5.23171 5.17868 4.81666 4.87485 4.48739 3.95835 2.56630 5.48734 4.51359 364 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 273 2.80091 3.15879 4.47797 3.90257 1.54713 3.90882 4.21619 2.59759 3.74222 1.76714 3.31279 3.99649 4.29488 3.91974 3.84883 2.74957 3.04764 2.43439 4.74675 3.46641 365 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 274 2.47485 4.27283 4.61524 4.02319 2.59960 4.03064 4.29148 2.22631 3.85394 1.59831 3.21734 4.10814 4.37202 4.00180 3.93064 3.33833 3.10937 2.43757 2.01606 3.53155 366 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 275 2.96995 2.49052 4.85775 4.25438 2.01745 4.16455 4.48748 2.13014 4.06753 1.61139 2.32324 4.30027 4.48222 4.17464 4.09454 3.48261 3.19847 2.38702 4.92438 3.77527 367 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 276 3.65477 5.31876 4.45227 4.44885 5.49090 0.18830 5.47752 5.29668 4.71199 4.84352 5.85673 4.61988 4.72158 4.98611 4.83170 3.85134 4.18147 4.70051 6.36868 5.62987 368 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 277 3.23014 4.57081 5.00340 4.43165 1.55594 4.44642 4.71589 2.39614 4.27515 1.90222 2.14962 4.53787 4.72542 4.37521 4.33765 3.77963 3.46089 1.59789 5.08098 3.85863 369 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 278 2.78425 4.63760 3.48243 2.91369 2.83627 3.68897 3.89684 3.14692 2.76631 2.39786 3.70888 3.35340 2.21234 3.16620 1.90987 2.93699 3.01707 2.92046 5.12529 3.82602 370 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 279 3.73245 5.03750 4.84858 4.49202 0.94291 4.55789 3.80940 3.58640 4.35190 3.04131 4.19315 4.31123 4.89751 4.35919 4.40688 2.72729 3.96607 3.44571 3.97867 1.40998 371 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 280 2.06244 4.58893 3.37480 2.83301 3.08246 2.60238 3.89151 2.72859 2.81523 2.86316 3.73374 2.03281 4.00839 3.13961 3.22029 2.84149 2.94725 2.90863 5.19308 3.92312 372 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 281 2.40339 5.11576 2.66261 2.15916 4.42708 3.49254 3.70968 3.88339 2.47486 3.41438 4.18376 2.64059 3.89971 2.82546 2.96141 1.86809 2.65444 2.94425 5.58963 4.20509 373 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 282 3.18068 4.68790 4.22276 3.80821 3.65222 4.18209 4.57612 0.84062 3.53476 2.37127 3.60413 4.10995 4.59350 2.90333 3.74726 3.58280 3.44554 2.35995 5.37856 4.13254 374 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 283 2.71880 4.43782 3.59357 3.03604 3.58346 3.69026 3.95784 2.90752 2.97106 1.93319 3.54659 2.86932 4.07758 2.80409 3.31590 2.94511 2.25638 1.97546 5.03264 3.79920 375 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 284 2.66462 2.07802 3.77947 3.23546 3.59926 2.99142 4.07661 2.94302 3.16720 2.04240 3.57803 2.80777 4.08075 3.45797 3.47438 2.92056 2.22766 2.70512 5.06055 3.84332 376 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 285 3.45932 4.68634 5.45325 4.99434 4.01642 4.99552 5.73906 1.38842 4.91624 2.45642 3.76727 5.15952 5.25795 5.18073 5.09110 4.42970 3.72770 0.72132 6.10582 4.88222 377 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 286 2.29562 4.26917 3.98271 3.41308 3.41536 3.75764 4.10617 2.08707 3.32267 2.47853 2.28498 3.69093 4.15660 3.58032 3.57262 2.56488 2.06794 2.48105 4.91608 3.71339 378 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 287 3.82761 5.42446 4.50452 4.46194 5.33326 4.07855 5.43868 5.10776 4.58651 4.63167 5.73648 4.68720 0.19352 4.94902 4.71504 4.02418 4.32233 4.66624 6.28610 5.47539 379 P - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 288 4.21157 5.42970 5.14760 5.01949 0.35538 4.65995 4.34256 3.71467 4.92675 2.94767 4.36476 4.82028 5.13107 4.92378 4.88460 4.41675 4.52632 3.74562 4.47273 2.78934 380 F - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 289 3.83945 5.07927 5.57011 5.04311 3.32700 5.17102 5.48919 2.02318 4.85557 0.53632 3.09925 5.28340 5.25274 4.86677 4.88564 4.59155 4.05983 2.54381 5.55289 4.51847 381 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 290 2.63464 4.58961 5.23984 4.74735 3.96517 4.74601 5.40729 1.21597 4.65890 2.52709 3.75537 4.89579 5.05998 4.91073 4.82776 4.14212 3.58296 0.97331 5.89015 4.67426 382 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 291 3.79987 5.03180 5.58945 5.05501 3.35529 5.16734 5.50466 1.74421 4.88739 0.62364 3.11957 5.28451 5.24915 4.88841 4.91430 4.57974 4.02020 2.45278 5.57453 4.54883 383 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 292 1.17652 2.71417 4.18639 3.78636 4.52735 2.07224 4.65797 3.94076 3.73358 3.63819 4.46069 3.75950 3.99636 3.98094 3.99609 1.68674 2.97047 3.39609 5.90668 4.73772 385 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 293 3.47887 4.71048 5.45298 4.99555 3.95646 4.99340 5.72281 0.72759 4.90684 2.37454 3.71081 5.16266 5.25386 5.15612 5.07147 4.43028 3.74764 1.41318 6.06379 4.85713 386 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 294 3.65477 5.31876 4.45227 4.44885 5.49090 0.18830 5.47752 5.29668 4.71199 4.84352 5.85673 4.61988 4.72158 4.98611 4.83170 3.85134 4.18147 4.70051 6.36868 5.62987 387 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 295 3.29094 3.17242 5.28493 4.77925 3.91249 4.72175 5.35080 1.46431 4.67595 2.51135 3.72298 4.89079 5.03160 4.90544 4.81206 4.11239 3.55486 0.82055 5.80223 4.58968 388 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 296 3.84202 5.92498 0.31501 2.98261 5.42650 3.84885 4.69222 5.19709 3.92147 4.69479 5.73047 3.55684 4.54494 3.96114 4.49158 3.75996 4.20651 4.77817 6.44211 5.24933 389 D - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 297 3.21407 5.75372 0.84170 2.39202 5.16451 3.47697 4.09492 4.71928 3.15827 4.20557 5.05840 2.45490 4.12949 3.26764 3.77972 2.38510 3.53329 4.24745 6.35376 4.82386 390 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 298 2.18623 4.26304 4.05041 3.47715 3.38986 3.79663 4.13393 2.63447 3.37921 2.14065 2.14743 3.74033 4.18521 3.62875 3.61305 2.27181 2.97402 2.00799 4.90641 3.70772 391 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 299 4.46722 5.47067 5.34806 5.22649 0.81896 5.01670 3.75278 4.04402 5.02120 3.23289 4.58680 4.59469 5.28486 4.74490 4.87193 4.42359 4.67052 4.00078 3.83590 1.08858 392 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 300 3.57515 4.80705 5.50880 4.97446 3.55145 5.02601 5.48225 1.23946 4.85966 1.07465 3.31044 5.15368 5.18318 4.92957 4.92559 4.41760 3.80978 1.80301 5.68090 4.61223 393 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 301 2.35161 4.35217 4.09900 3.52186 3.37050 3.90495 4.19621 2.34747 3.40519 2.03002 1.58899 3.80841 4.26355 3.02277 3.64143 3.18627 3.06068 2.49427 4.95654 3.77150 394 m - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 302 2.39426 3.09163 4.43109 3.84238 3.31683 3.92133 4.25950 1.95397 3.69621 1.92455 3.31479 3.08002 4.28652 3.89133 3.82145 3.22409 3.00571 1.67926 4.86054 3.67348 395 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 303 1.66005 4.94898 3.02762 2.62564 4.37906 2.83059 2.02266 3.82672 2.70403 3.41506 4.22656 2.58556 3.97750 3.04828 3.15481 2.79647 3.04601 3.44942 5.62553 4.28097 396 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 304 1.54797 3.39585 3.20802 2.07669 4.11631 3.53753 3.82858 3.50848 2.62970 3.14387 3.97646 3.16220 3.96789 3.00241 2.64349 2.78511 2.97159 3.19346 5.40961 4.10350 397 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 305 2.82906 3.25296 4.47386 3.89097 3.21979 3.94608 4.25910 2.56050 3.71953 2.25429 2.78041 4.01331 4.32009 3.91729 3.83998 3.25811 3.07167 2.17369 1.47402 3.56787 398 w - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 306 2.73640 5.18915 2.63571 2.44387 4.52205 3.50828 2.55349 3.98864 2.18874 3.48191 3.42272 2.98375 3.90055 2.04531 2.36506 2.70746 2.96462 3.57408 5.62173 4.23467 399 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 307 2.78611 5.25985 2.62224 2.45889 4.61153 3.52805 3.05526 4.08022 2.18392 3.55240 4.30612 2.51822 3.92771 2.47435 1.73614 2.74835 3.01242 3.65581 5.67262 4.28842 400 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 308 2.74267 4.33424 3.86667 3.29564 3.44824 3.78077 3.18239 2.36376 3.20705 2.25976 3.43238 3.62707 4.15847 3.49217 3.49179 3.05051 1.58201 2.20548 4.94933 3.73350 401 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 309 2.71154 5.12889 2.67526 2.16090 4.43748 3.49254 3.68979 3.20873 2.44292 3.41891 4.18142 2.59528 3.88925 2.80051 2.61115 2.24052 2.15189 3.50013 5.58525 4.19728 402 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 310 2.24322 3.44862 3.19534 2.63178 4.03468 3.56816 3.77551 3.43328 1.94830 3.06428 3.00511 3.13275 3.11912 2.94975 2.42026 2.78269 2.94914 3.13649 5.33570 4.02879 403 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 311 2.71467 5.09480 3.01055 2.26948 4.39242 3.50483 2.64490 3.17831 2.16646 3.37775 4.14959 2.99479 3.89786 2.47836 2.91737 2.24046 2.40636 3.45996 5.55524 4.17946 404 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 312 2.70334 4.86055 2.78604 2.35804 4.08653 3.54412 2.72872 3.49675 2.56162 2.44795 3.13181 3.08659 3.93332 2.91070 2.63679 2.75008 2.60827 3.18575 5.37099 3.08833 405 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 313 2.72903 5.14498 2.34759 2.44756 4.49618 3.48515 3.71923 3.96142 2.47416 3.47559 4.23705 2.98714 2.99352 2.83102 2.28451 1.87099 2.65719 3.55024 5.63482 4.24433 406 s - - 2.68644 4.42278 2.77542 2.73091 3.46349 2.40541 3.72472 3.29407 2.67679 2.69408 4.24643 2.90366 2.73728 3.18199 2.89745 2.37860 2.77519 2.98455 4.58530 3.61556 0.36528 1.20165 5.24079 1.83115 0.17463 0.48576 0.95510 314 2.40966 4.29694 3.83677 3.26265 3.41798 3.74542 4.02561 2.74442 2.78480 2.04751 2.73387 3.59153 3.13468 3.45865 3.46884 3.01070 2.57508 1.89117 4.90147 3.69062 418 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 315 2.75702 5.22422 2.98487 2.03224 4.56644 2.90020 3.13590 4.03565 1.79570 3.51853 4.27110 2.98602 2.74598 2.79558 2.56562 2.72320 2.98508 3.61456 5.64926 4.26078 419 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 316 2.75614 5.25999 2.61145 1.89660 4.60439 3.49405 2.99114 4.08648 1.80120 3.55993 4.30480 2.58048 3.90252 2.79707 2.56984 2.71455 2.98781 3.65113 5.68608 4.27936 420 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 317 3.59221 5.58765 4.14791 3.33756 5.16650 4.10177 3.93124 4.46842 1.81664 3.83018 4.73762 3.65613 4.45074 3.06685 0.67890 3.58116 3.71416 4.16784 5.78418 4.71025 421 R - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 318 3.57253 4.83913 5.39881 4.83326 3.38282 4.91926 5.26964 1.37022 4.68574 1.53806 1.39856 5.02066 5.07479 4.73054 4.73488 4.28563 3.79497 2.32884 5.48315 4.43784 422 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 319 2.22268 4.77079 3.19966 2.37863 4.05276 2.31389 3.82124 2.76179 2.66192 3.09030 3.92414 3.15336 3.95497 3.00176 3.10641 2.17170 2.55162 3.14212 5.36730 4.06063 423 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 320 2.84057 5.25585 3.09179 1.56570 4.61139 3.58223 3.71924 4.05700 1.89301 2.93799 4.30637 3.05885 3.97232 2.48732 2.44462 2.81050 3.05913 3.65502 5.65318 4.30374 424 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 321 2.05607 3.28338 4.23653 3.66349 3.37979 3.80520 4.21068 2.56797 3.54523 2.43225 2.44651 3.85017 4.21487 3.76811 3.72802 3.11396 2.01589 1.89265 4.90429 3.71278 425 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 322 3.68036 4.93770 5.54027 4.94714 2.50042 4.98677 5.25119 2.10402 4.80143 0.90714 1.70864 5.11551 5.08517 4.72120 4.77383 4.34730 3.88502 2.70320 5.36350 4.35933 426 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 323 2.18007 4.62815 3.33912 2.26192 3.83678 3.60313 3.87237 2.68947 2.77346 2.88061 3.75140 3.25736 4.00698 3.10390 3.18783 1.96438 2.95134 2.32300 5.22095 3.94716 427 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 324 3.14328 5.75395 1.88325 1.00387 5.03237 3.49660 2.86958 4.57183 2.92709 4.03886 4.85494 2.94591 4.08164 3.12071 3.50375 3.03195 3.41586 4.12664 6.17520 4.67149 428 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 325 1.34823 4.37983 3.98309 3.50558 4.00283 3.42249 4.37029 3.22562 3.44976 3.06248 3.95680 3.68001 4.06172 3.72467 3.74185 2.20166 2.39027 1.78906 5.45171 4.24826 429 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 326 1.36497 4.48467 3.97745 3.82523 4.92657 0.89300 4.86691 4.34687 3.96567 4.06557 4.88252 3.80877 4.06172 4.18964 4.20263 2.75237 3.09967 3.67046 6.24711 5.11017 430 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 327 2.62508 4.43644 3.87487 3.46656 4.05496 3.44443 4.38712 3.23761 3.42806 3.10311 4.01932 3.67037 1.56576 3.72895 3.72056 2.34810 3.03048 1.49948 5.50958 4.29045 431 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 328 1.01245 4.42870 4.02176 3.76851 4.78917 3.21532 4.75652 4.19890 3.80802 3.91560 4.72808 3.75511 4.01362 4.06003 4.06619 1.20847 3.02368 3.56061 6.13760 4.96404 432 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 329 3.48051 4.72449 5.42091 4.96866 3.91969 4.95733 5.68408 0.67776 4.86614 2.33507 3.68348 5.13494 5.23218 5.11501 5.02722 4.39718 3.75288 1.55464 6.02663 4.82234 433 I - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 330 2.41547 4.30375 3.87939 3.31749 2.71762 3.71347 4.07273 2.77820 3.24057 2.03106 3.44790 3.62279 4.12554 3.51037 3.51783 2.53462 1.72023 2.56857 4.94341 3.73014 434 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 331 3.47859 4.70865 5.45708 4.99920 3.96169 4.99793 5.72808 0.73708 4.91220 2.38037 3.71492 5.16629 5.25672 5.16185 5.07733 4.43456 3.74697 1.39046 6.06898 4.86167 435 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 332 2.54757 4.46664 3.92806 3.69069 4.66577 3.26495 4.69158 4.02768 3.69854 3.78276 4.63550 3.73840 4.04537 4.00162 3.95199 2.11542 0.70663 3.48029 6.03593 4.83898 436 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 333 2.54868 2.87931 3.73092 3.26765 4.33115 3.32902 4.30076 3.73242 3.24075 3.41093 4.24396 2.65898 3.99158 3.55041 3.59854 1.07767 2.36935 3.29562 5.68539 4.45093 437 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 334 2.45548 4.16504 4.52941 3.92962 2.59531 3.92156 4.24756 2.19697 3.76005 1.52122 2.77846 4.01493 4.27850 3.92420 3.83961 2.78364 2.99662 2.08432 4.79263 3.61725 438 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 335 2.92545 4.75710 4.18839 4.03039 4.72858 3.56152 4.97308 3.95426 3.98960 3.78848 4.82650 4.08417 4.32868 4.35465 4.18008 3.13762 0.42597 3.56248 6.09005 4.95756 439 T - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 336 3.15867 5.70958 1.36056 2.38415 5.08772 3.48005 4.03647 4.62789 3.04419 4.10966 4.94057 1.41111 4.10089 3.19690 3.64147 2.46752 3.45916 4.16610 6.25649 4.74542 440 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 337 2.46098 3.22483 4.81652 4.23371 3.44010 4.17871 4.55788 1.73598 4.06895 2.10871 2.68970 4.30079 4.51844 4.23707 4.14014 3.50230 3.17457 1.35410 5.06699 3.88463 441 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 338 2.50965 4.48826 4.92947 4.33319 2.25352 4.33785 4.65151 2.14319 4.17067 1.11665 2.54886 4.44099 4.62000 4.26572 4.22188 3.65830 3.35896 2.47084 5.05792 3.94100 442 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 339 1.29959 4.43186 3.97621 3.61746 4.66829 3.23175 4.61054 4.06879 3.61395 3.76731 4.57677 3.68535 3.99506 3.88581 3.91515 1.18837 2.26577 3.48531 6.00974 4.82110 443 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 340 3.46594 5.10015 2.51567 3.54629 0.69179 4.08950 4.13112 3.57656 3.82584 3.09240 4.24892 3.88204 4.59847 3.99003 4.13245 3.60472 3.75707 3.42444 4.60776 2.96083 444 F - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 341 1.38193 4.48656 3.78351 3.40505 4.30875 1.37329 4.41569 3.62025 3.39884 2.65712 4.25556 3.61323 4.04364 3.70437 3.71853 2.77803 3.02825 3.22374 5.70848 4.48327 445 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 342 2.43660 4.47464 5.00656 4.45719 3.67831 4.49262 4.94984 1.20449 4.33362 2.37096 2.69406 4.59207 4.80314 4.53444 4.46000 3.83916 3.40813 1.37912 5.45217 4.26699 446 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 343 3.65477 5.31876 4.45227 4.44885 5.49090 0.18830 5.47752 5.29668 4.71199 4.84352 5.85673 4.61988 4.72158 4.98611 4.83170 3.85134 4.18147 4.70051 6.36868 5.62987 447 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 344 2.14925 2.64851 4.20355 3.62251 2.79021 3.78290 4.14177 2.14980 3.49984 2.39510 3.31878 3.80857 4.17643 3.71649 3.67333 2.58933 2.19303 2.42576 4.82059 3.62988 448 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 345 2.44289 4.15841 4.42440 3.82958 2.66895 3.88060 4.19052 1.81935 3.67233 2.07243 3.25303 3.94437 4.24329 3.85317 3.77853 3.18083 2.53899 2.35189 4.76361 2.25801 449 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 346 2.55141 4.46856 3.93092 3.70087 4.66608 3.26740 4.69990 4.02206 3.70720 3.78373 4.64046 3.74465 4.04935 4.01289 3.95649 2.19149 0.68601 3.47792 6.03886 4.84150 450 T - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 347 2.76865 5.05940 2.08655 2.54601 4.55356 3.45075 3.88021 4.00900 2.70877 3.56312 4.35128 3.06560 2.03865 3.01922 3.19740 2.34587 2.01168 3.58820 5.75123 4.37450 451 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 348 2.36642 4.28841 3.98421 3.41816 3.44416 3.76870 4.12742 2.06510 3.32929 1.96944 3.42908 3.70097 4.17130 3.59164 3.58487 2.56519 1.91808 2.45999 4.94970 3.74554 452 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 349 2.23108 4.50282 3.84660 3.42168 4.00408 3.54507 4.37025 2.32758 3.36384 2.94870 3.94375 3.68060 1.16809 3.69083 3.66899 2.93854 3.08684 2.80238 5.50367 4.27730 453 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 350 1.77795 5.21231 2.82376 1.77461 4.56671 2.40793 3.81285 4.02622 2.61469 3.55823 4.34446 3.00789 3.96499 2.53275 3.10248 2.80730 3.08558 3.62685 5.73473 4.34188 454 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 351 3.41807 4.65566 5.39355 4.88006 3.80141 4.90654 5.46365 1.00290 4.78194 2.26282 2.74744 5.03395 5.13864 4.96719 4.90528 4.29763 3.66710 1.23846 5.81401 4.65221 455 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 352 2.35035 4.88586 3.14995 2.67679 4.42472 3.45219 3.89609 3.85500 2.67708 3.43855 4.23743 3.15559 3.95626 1.58376 3.11569 1.95036 2.49078 3.45068 5.64556 4.31371 456 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 353 2.89762 4.29211 4.62708 4.03090 2.67094 2.88441 4.37764 2.00557 3.86989 1.30683 2.59664 4.14163 4.39544 4.02082 3.95527 3.36862 3.12737 2.40495 4.89107 3.73059 457 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 354 3.91594 5.15795 5.25309 4.89954 0.70070 4.86543 4.30566 2.95240 4.71561 1.75811 3.56949 4.75783 5.12310 4.68020 4.71160 4.29002 4.15135 3.07524 4.42589 2.77909 458 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 355 2.54491 0.68703 4.55798 4.34561 4.54709 3.28090 4.97539 3.89123 4.18416 3.72966 4.62726 4.01710 4.09714 4.43548 4.28622 2.12059 3.08622 3.38343 5.98657 4.80835 459 C - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 356 2.12223 4.22299 4.10967 3.52737 3.33332 3.82301 4.12395 2.06193 2.86885 1.98728 2.74584 3.77004 4.19148 3.65566 3.62865 3.10534 2.52261 2.19417 4.84857 3.65292 460 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 357 2.72664 4.27801 3.95265 3.38155 2.79904 2.30296 4.04385 2.73750 3.29264 2.46575 2.70105 3.66814 4.15553 3.54781 3.54404 3.05347 2.57523 2.53741 4.81563 2.07327 461 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 358 2.08724 4.63852 3.37235 2.85900 4.00005 3.52555 3.95944 2.76026 2.84536 3.04046 3.90435 2.10014 4.00484 3.18047 3.25467 2.81240 1.78773 3.01865 5.36669 4.09109 462 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 359 1.54085 2.17231 3.98226 3.45870 3.71779 2.85025 4.23610 3.06799 3.38308 2.80470 2.77148 3.66449 4.06972 3.64738 3.65456 2.41556 2.94891 2.79664 5.18250 3.98105 463 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 360 2.40641 4.51390 4.82591 4.29556 3.62452 4.34246 4.86077 2.15669 4.16527 1.39408 3.48871 4.45762 4.70930 4.38489 4.32146 3.69915 3.39525 1.21538 5.41697 4.24385 464 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 361 1.33960 2.88731 3.59830 3.09218 4.09721 3.42131 4.12837 3.48243 3.05279 3.16517 4.01728 3.43139 3.99934 2.62284 3.42665 1.99431 2.96377 3.13251 5.46939 4.22191 465 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 362 3.05170 3.01363 4.98063 4.40305 3.46994 4.32989 4.72193 1.59927 4.23945 1.97911 2.17836 4.46575 4.64584 4.38892 4.29704 3.66297 3.28919 1.47100 5.18137 4.01415 466 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 363 2.18372 4.17481 4.60459 4.00077 2.03627 3.94467 4.25858 2.21643 3.81808 1.80790 2.70230 4.05721 4.29628 3.96330 3.87280 3.25220 3.01587 2.38280 3.23897 3.58430 467 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 364 3.03978 4.45369 4.63545 4.07416 1.27866 4.17866 4.46211 2.47245 3.93294 1.87580 3.30634 4.22435 4.52414 4.10878 4.06554 3.50028 2.61946 2.11863 4.95485 3.67460 468 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 365 2.06896 3.20125 1.75044 2.72097 4.28121 3.44371 3.91156 3.69362 2.74315 3.31405 4.12582 3.18565 3.94688 3.07675 3.19279 2.36179 2.41581 3.31680 5.55676 4.24007 469 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 366 4.53038 5.48579 5.42612 5.33638 0.81677 5.05741 3.72517 4.13765 5.11279 3.32436 4.66524 4.60671 5.31161 4.77407 4.91750 4.45544 4.72313 4.07390 2.61439 1.22167 470 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 367 3.31099 4.59050 5.25438 4.69483 2.28723 4.66187 5.05769 1.36305 4.55449 1.72278 3.33978 4.79467 4.91079 4.66062 4.60822 4.01628 3.54610 1.42476 5.40027 4.25264 471 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 368 4.46566 5.47792 5.32047 5.19238 1.49837 5.00764 3.75389 4.05516 4.99151 3.24529 4.60078 4.58654 5.28061 4.73417 4.85745 4.41702 4.67128 4.00992 3.83903 0.59019 472 Y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 369 2.92107 5.03105 3.19317 2.84769 4.53625 3.57005 4.03672 3.95241 2.70004 3.53371 4.42050 3.30234 4.11512 1.06206 3.03320 2.97708 2.15418 3.59167 5.75134 4.44659 473 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 370 3.16239 4.50793 4.96049 4.36958 3.26066 4.37918 4.68319 1.32679 4.20293 1.38632 2.51388 4.47754 4.65782 4.30664 4.25800 3.70303 3.38807 2.40387 5.08137 2.95397 474 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 371 2.86580 4.54889 4.19261 3.76993 3.92536 3.75913 4.61269 2.16649 3.63466 2.72101 3.85657 3.96665 4.35029 3.98175 3.88657 3.17363 0.91522 2.48599 5.56529 4.33670 475 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 372 3.51431 4.81864 5.20486 4.65997 0.99002 4.72405 4.78123 2.12729 4.50532 1.77843 2.59460 4.76360 4.93574 4.54023 4.54893 4.07250 3.73589 2.60074 5.00744 3.65695 476 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 373 3.91449 5.10903 5.18772 4.86321 1.08650 4.77175 3.88064 3.43100 4.67326 1.79361 4.00747 4.51407 5.04798 4.56016 4.62161 4.13190 4.12767 3.40649 4.00319 1.39957 477 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 374 1.22512 4.44787 3.83986 3.37821 4.32835 2.06467 4.37147 3.71623 3.35268 3.41108 4.24780 3.57930 3.99416 3.64201 3.69443 2.22254 2.45151 2.61574 5.69887 4.48049 478 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 375 1.02672 4.48548 3.79382 3.48628 4.71355 1.96210 4.56657 4.14711 3.55769 3.81384 4.61829 3.62903 2.14226 3.82570 3.88440 2.70112 3.02125 3.55037 6.03451 4.83133 479 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 376 2.50158 3.23719 4.87340 4.29937 3.50254 4.25886 4.66067 1.74092 4.14429 1.57688 3.43099 4.38026 4.59377 4.31848 4.22708 3.58888 3.23916 1.46122 5.16633 3.98436 480 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 377 3.61518 4.90235 5.36080 4.78685 3.30577 4.90701 5.22519 2.40500 4.63429 1.07821 1.33869 4.99600 5.05333 4.66087 4.68237 4.26780 3.83278 2.14831 5.42637 4.40667 481 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 378 1.51778 4.32863 3.93691 3.39873 2.87151 3.63481 4.17245 2.84860 3.32841 2.65399 3.57767 3.66314 4.12293 3.59626 3.60635 2.19688 2.97306 1.97937 5.07591 3.86009 482 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 379 2.98303 4.34437 4.81013 4.21610 3.28301 4.18690 4.51611 1.48548 4.04565 1.69178 2.66428 4.29656 4.50661 4.17898 4.10467 3.50436 3.21355 2.00280 4.98201 2.48232 483 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 380 2.16208 2.87506 3.69429 2.74030 3.50646 3.03508 3.98419 2.85860 3.07065 2.58513 2.89613 3.49522 4.08109 3.35939 3.39500 2.47482 2.93312 2.08323 4.96824 3.74561 484 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 381 1.92948 4.98550 3.02220 2.12072 4.28319 2.24976 3.76555 3.71108 2.56029 3.29447 3.31952 2.65992 3.93212 2.90654 3.03027 2.74802 2.97431 3.36044 5.51622 4.16496 485 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 382 2.76779 5.27586 2.54779 1.96768 4.61692 2.87223 3.70704 4.10106 1.72696 3.57594 4.32252 2.63846 3.90763 2.81022 2.55441 2.72394 3.00145 3.66534 5.70459 4.29290 486 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 383 2.32816 4.44822 3.53840 2.97134 3.58825 3.66939 3.24337 2.95255 2.92457 2.41564 2.90480 3.38806 3.22899 3.23452 2.53703 2.91095 2.93283 2.41885 5.02540 2.61346 487 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 384 2.89836 5.39154 2.36065 1.23527 4.69787 3.49853 3.81116 4.18072 2.62610 2.99788 4.45721 2.96411 3.97819 2.39734 3.13397 2.84185 3.14398 3.76457 5.83086 4.40386 488 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 385 2.20612 4.26635 3.89509 3.31804 2.78988 3.75441 4.03467 2.39621 3.23298 2.45928 2.23472 3.62535 4.12765 2.85506 2.90434 3.02298 2.93374 2.52488 4.86527 3.01611 489 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 386 2.45481 5.20368 2.94728 2.01128 4.53897 2.90598 3.68459 4.01500 2.05798 3.50410 4.25174 2.57852 3.88881 2.78713 2.62063 2.17501 2.95785 3.59008 5.64320 4.24155 490 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 387 2.76034 5.06607 3.05159 2.52633 4.37473 2.04619 3.74310 3.80980 2.05144 2.90216 4.15455 3.05072 3.94154 2.50370 2.90872 2.18438 2.99528 3.44534 5.55262 4.20123 491 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08360 4.51845 2.66941 0.61958 0.77255 0.48576 0.95510 388 2.71782 5.19740 2.53158 2.16327 4.53008 3.47072 3.67000 4.00646 2.40569 3.49453 4.24388 2.63681 3.87470 2.23678 2.06869 2.68262 2.94951 3.58221 5.63261 3.32825 492 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08038 4.45231 2.72444 0.61958 0.77255 0.59147 0.80635 389 2.74721 5.12109 2.94036 2.16165 4.42024 3.49171 2.27527 3.87178 2.19170 2.81074 4.18031 2.25645 3.90042 2.80991 2.84827 2.72947 2.97651 3.49164 5.56342 4.19512 493 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01858 4.39051 5.11286 0.61958 0.77255 0.67573 0.71088 390 2.66598 2.70831 3.84561 3.27449 3.39745 3.70143 4.02168 2.30930 2.66295 2.46604 3.38462 3.58560 4.09337 3.46164 3.45816 2.22587 2.90874 1.98030 4.88635 3.67721 494 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01858 4.39051 5.11286 0.61958 0.77255 0.67573 0.71088 391 2.65391 3.06498 2.88656 3.05363 3.49781 3.03320 3.93858 2.82502 3.00310 1.87951 3.46955 3.43269 4.03518 3.29687 3.33834 2.90034 2.49557 2.31868 4.95638 3.72952 495 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01858 4.39051 5.11286 0.61958 0.77255 0.67573 0.71088 392 2.67297 4.50473 3.39055 2.52777 2.37214 3.60539 3.83676 3.02454 2.40979 2.36613 2.82769 3.27226 3.98718 2.65410 3.15318 2.83992 2.90361 2.78650 5.06430 3.80854 496 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01858 4.39051 5.11286 0.61958 0.77255 0.67573 0.71088 393 2.66108 4.56681 3.29783 2.46838 3.04802 3.57171 3.80076 2.64834 2.39381 2.51882 3.65910 2.70548 3.00113 3.03955 3.12200 2.79652 2.89260 2.53058 5.12191 3.85135 497 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01858 4.39051 5.11286 0.61958 0.77255 0.67573 0.71088 394 2.66199 3.10045 3.57987 3.00890 3.49032 3.64967 3.90213 2.55045 2.60574 2.56818 3.46348 3.40220 3.12600 3.25016 2.37501 2.89853 2.89320 2.63083 3.48967 3.00882 498 r - - 2.68606 4.42262 2.77498 2.73087 3.46336 2.40550 3.72532 3.29300 2.67729 2.69367 4.24593 2.90349 2.73777 3.18142 2.89807 2.37909 2.77529 2.98456 4.58514 3.61540 0.62713 0.94756 2.54860 1.39614 0.28442 0.52832 0.89061 395 1.96164 4.30456 4.01803 3.46315 3.45352 3.81090 4.19157 1.66703 3.36964 2.09360 3.40919 3.74925 3.01242 3.64103 3.62661 3.11027 3.00889 2.30491 5.00959 3.80651 506 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01874 4.38205 5.10440 0.61958 0.77255 0.68635 0.69999 396 2.15265 5.07212 2.48781 2.20728 4.40169 3.44287 3.69265 3.85754 2.47076 3.39290 4.16700 2.95054 3.05904 2.81291 2.95902 2.37138 2.24608 3.46456 5.57198 4.18770 507 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.20249 4.38205 1.76725 0.61958 0.77255 0.68635 0.69999 397 2.75007 5.03574 2.98611 1.90298 4.33350 3.48905 3.65804 3.73802 1.66929 3.28659 3.17051 2.99322 3.89365 2.78973 2.68482 2.74771 2.97325 3.39278 5.47524 4.14746 508 k - - 2.68621 4.42228 2.77523 2.73127 3.46357 2.40516 3.72498 3.29357 2.67744 2.69358 4.24573 2.90318 2.73743 3.18150 2.89804 2.37890 2.77523 2.98522 4.58480 3.61506 0.12217 2.22809 4.92440 0.65898 0.72853 0.87274 0.54095 398 2.69514 5.10522 2.76899 1.90509 4.42475 3.39884 3.64931 3.88398 2.18078 3.40449 4.18131 2.43597 3.83493 2.76999 2.88766 2.30889 2.46593 3.48764 5.57053 4.18136 511 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02248 4.20205 4.92440 0.61958 0.77255 0.72533 0.66197 399 2.79743 5.17055 2.99805 1.72525 4.52311 3.51385 3.66121 3.95539 2.04805 3.44655 4.23391 2.99872 3.91583 2.77785 2.03856 2.77173 2.61188 3.56945 5.57342 4.23840 512 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09663 4.27620 2.54833 0.61958 0.77255 0.80407 0.59331 400 2.17375 4.49419 3.31495 2.79118 3.92255 3.36973 3.86361 3.27707 2.71926 2.96856 3.82631 3.20211 3.87574 3.08557 2.60088 1.75691 2.84926 2.40449 5.27516 4.00857 513 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02248 4.20205 4.92440 0.61958 0.77255 0.65106 0.73708 401 2.27101 4.96655 2.49440 2.43784 4.27405 3.43326 3.71036 3.70670 2.51404 2.82170 4.08389 2.50890 2.28487 2.84964 2.99224 2.69290 2.93223 3.34723 5.49823 4.13611 514 a - - 2.68664 4.42271 2.77499 2.73169 3.46355 2.40513 3.72541 3.29288 2.67713 2.69291 4.24736 2.90358 2.73786 3.18146 2.89812 2.37858 2.77543 2.98489 4.58335 3.61549 0.75859 0.64400 5.03795 1.39366 0.28524 0.59791 0.79842 402 2.36693 4.96370 3.03404 2.49787 4.23024 3.50043 3.70019 3.66080 2.21373 3.23619 4.03952 3.01966 3.89940 1.89694 2.88882 2.39436 2.93751 3.31791 5.44630 3.03701 529 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01858 4.39051 5.11286 0.61958 0.77255 0.52832 0.89061 403 2.74659 5.10247 3.03968 2.00443 4.41247 3.52160 3.69459 3.85131 2.38775 3.38140 4.16298 3.01522 3.91482 2.47809 1.90991 2.73605 2.49968 2.97369 5.55019 4.19395 530 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01746 4.45231 5.17466 0.61958 0.77255 0.42492 1.06080 404 2.35893 3.28505 3.94170 3.36310 3.36259 3.76270 3.10461 1.91773 2.83901 2.06003 3.36134 3.65407 4.13624 3.52841 3.51956 3.03511 2.53765 2.50094 4.85432 3.65085 531 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 405 2.44766 5.17525 2.42370 2.14892 3.57008 3.48419 3.02480 3.97641 2.20685 3.47277 4.22093 2.95853 3.87887 2.77778 2.55255 2.22322 2.93851 3.55645 5.61825 4.21803 532 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 406 2.72758 5.13246 2.52722 2.44685 4.44522 3.49817 3.70441 3.24763 2.45504 3.42729 4.19432 2.41314 3.90152 2.81794 2.09327 2.03734 2.96121 3.50825 5.59502 4.21059 533 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 407 2.71781 5.13179 2.99425 2.06175 4.44363 2.57991 3.69014 3.90248 2.43003 2.99172 4.18452 2.98394 3.11916 2.54018 2.30276 2.69845 2.59163 3.50510 5.58469 4.20086 534 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 408 2.72200 4.99119 3.02798 2.27705 4.27565 2.62113 3.74694 3.70632 2.53590 2.50034 4.08349 2.37776 3.92340 2.88456 3.00760 2.14096 2.61052 3.35562 5.50359 4.15015 535 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08360 4.51845 2.66941 0.61958 0.77255 0.48576 0.95510 409 2.32967 4.39929 3.65201 3.10061 3.62433 3.62127 4.01431 2.49721 3.04639 2.24829 3.58272 3.46952 4.06006 3.35017 3.38779 1.68465 2.47516 2.65365 5.08216 3.85243 536 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01746 4.45231 5.17466 0.61958 0.77255 0.42492 1.06080 410 2.42911 4.66593 3.28124 2.44143 3.22147 3.59403 3.81688 2.84081 2.69883 2.89776 3.06053 3.20140 3.97962 2.56224 2.36775 2.49659 2.93284 2.66140 5.21141 3.92877 537 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 411 3.03435 5.35445 3.35347 2.73882 4.76867 3.73352 3.77007 4.16649 1.61664 3.61166 4.41690 3.21855 1.95693 2.40757 1.96206 3.00731 3.22866 3.79140 5.68550 4.41828 538 k - - 2.68582 4.42457 2.77500 2.72823 3.46305 2.40702 3.72567 3.29479 2.67309 2.69446 4.24765 2.90281 2.73862 3.18295 2.89992 2.37694 2.77693 2.98599 4.58540 3.61588 0.81275 1.21545 1.34790 3.28106 0.03831 0.48576 0.95510 412 2.71207 5.07806 2.29402 2.35336 4.40550 3.38249 2.99139 3.87423 2.51580 3.41494 4.20509 2.89765 2.33949 2.83425 3.00925 2.07786 2.96652 3.48353 5.59442 4.20070 590 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02197 4.22476 4.94711 0.61958 0.77255 0.68736 0.69896 413 2.37138 5.07826 2.08073 2.38429 4.42860 3.41222 3.68854 3.88722 2.19229 3.41777 4.19241 2.92495 3.85425 2.81005 2.96039 2.10806 2.57943 3.48607 5.59157 4.20237 591 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02023 4.30651 5.02886 0.61958 0.77255 0.77298 0.61922 414 2.09940 4.89894 3.07692 2.60856 4.37186 3.44292 3.79030 3.77708 1.67563 3.35668 4.17315 3.09041 2.29004 2.93822 2.85808 2.75124 2.99152 3.40179 5.55213 4.23946 592 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02023 4.30651 5.02886 0.61958 0.77255 0.59003 0.80813 415 2.62535 4.64441 3.21879 2.76014 2.92543 2.34253 3.91188 3.49138 2.79984 3.13924 3.98155 2.64388 3.93337 3.12283 3.22529 1.60960 2.93647 3.15424 5.38682 4.07469 593 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01858 4.39051 5.11286 0.61958 0.77255 0.67573 0.71088 416 2.45099 5.15047 2.92093 2.18413 4.47159 3.47186 2.30912 3.93220 2.15625 3.43882 4.20407 2.95115 3.87751 2.36969 2.85262 2.37533 2.95268 3.52972 5.59072 4.20708 594 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01858 4.39051 5.11286 0.61958 0.77255 0.50918 0.91876 417 2.72782 5.20681 2.31926 1.95347 4.53268 3.46721 3.10866 3.03339 2.21524 3.50325 4.25532 2.29820 3.88016 2.78971 2.93294 2.69158 2.96183 3.58769 5.64766 4.24084 595 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01731 4.46072 5.18307 0.61958 0.77255 0.43159 1.04833 418 2.18507 4.73141 3.22488 2.66492 3.92726 3.57540 2.97171 2.86256 2.64750 2.59735 3.81609 2.79961 3.27874 2.98786 2.69035 2.45312 2.93343 2.71871 5.26638 3.96991 596 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 419 2.71589 5.11311 2.60993 1.89524 4.41329 3.49604 3.69775 2.67349 2.27055 3.39938 4.16793 2.98310 3.25698 2.81226 2.94230 2.43519 2.57215 3.47948 5.57438 4.19082 597 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 420 2.74888 5.24891 2.53358 1.97603 4.58500 3.48431 3.69925 4.06784 2.44901 3.54955 4.29584 2.95238 2.67412 2.09208 2.59981 2.43028 2.98282 3.63551 5.68421 4.27265 598 e - - 2.68625 4.42232 2.77498 2.73130 3.46360 2.40519 3.72501 3.29361 2.67722 2.69361 4.24696 2.90353 2.73724 3.18153 2.89807 2.37893 2.77495 2.98525 4.58484 3.61510 0.40695 1.56571 2.07638 0.38039 1.15073 0.48576 0.95510 421 2.38240 3.18438 3.75290 3.18177 3.41582 3.67468 3.97673 2.74438 3.10242 2.01304 3.40007 3.51994 2.64507 3.38758 2.81877 2.94349 2.89655 2.17653 4.89237 3.67827 601 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01858 4.39051 5.11286 0.61958 0.77255 0.67573 0.71088 422 2.68487 4.57929 3.33222 2.77299 3.76560 3.59123 3.82710 2.31263 2.07847 2.80681 3.68336 2.80613 3.98069 3.06511 3.10423 2.82615 2.32426 2.44043 5.15208 3.88517 602 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01858 4.39051 5.11286 0.61958 0.77255 0.38302 1.14507 423 2.40685 4.35927 3.68955 3.12015 2.58088 3.70251 3.97477 2.46529 3.06164 2.56963 3.47032 3.49239 3.29249 3.35140 2.87381 2.04312 2.93291 2.33949 4.95448 3.73143 603 s - - 2.68596 4.42236 2.77531 2.73134 3.46365 2.40474 3.72505 3.29365 2.67752 2.69366 4.24545 2.90358 2.73751 3.18157 2.89771 2.37898 2.77531 2.98529 4.58488 3.61514 0.10964 2.31725 5.24079 1.31171 0.31383 0.48576 0.95510 424 2.70979 5.17023 2.64363 2.41909 4.49601 3.48785 2.61069 3.96742 2.18375 3.46628 4.21663 2.66869 3.88185 2.78047 2.36321 2.38815 2.65590 3.55067 5.61344 3.36787 609 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 425 2.70346 4.54287 2.82989 2.85579 2.12549 3.07478 3.87986 3.07372 2.82797 2.76956 3.64663 3.30369 4.02033 3.14882 2.74255 2.86831 2.58900 2.25942 5.11385 3.85567 610 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 426 2.75635 4.15751 4.52141 3.92384 1.85819 3.90179 4.18617 2.05944 3.74796 2.26099 2.40422 3.99239 4.26166 3.90701 3.82036 2.64976 2.98805 2.38862 3.35996 3.47274 611 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 427 2.71421 4.55910 3.41842 2.53123 3.71929 2.67851 3.87490 2.64991 2.79833 2.04105 3.65431 3.30377 4.02533 3.13756 2.32660 2.87578 2.94547 2.54465 5.12404 3.86730 612 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 428 2.43486 5.28086 2.22665 1.98851 4.61709 3.48084 3.71144 4.10490 2.22727 3.58227 4.32816 2.59478 3.90417 2.45273 2.97467 2.22576 3.00176 3.66757 5.71483 4.29561 613 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 429 2.71138 4.59243 3.37639 2.81069 3.75435 3.62746 3.85214 2.17242 2.19848 2.81626 3.68635 2.77773 4.01038 3.10038 2.77760 2.56898 2.94188 2.88332 3.70182 2.98460 614 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 430 3.16100 4.52674 4.73978 4.21096 2.34989 4.25970 4.14757 2.23142 4.05419 2.35800 3.49163 4.23258 4.58906 4.16724 4.13539 3.57775 3.39069 2.17984 4.46428 1.18493 615 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 431 1.94730 2.16333 4.02032 3.51590 3.87136 2.19448 4.31894 3.22747 3.44725 2.96068 3.84482 3.67909 4.04804 3.70811 3.72275 2.34665 2.36635 2.27738 5.32284 4.12464 616 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 432 2.74890 5.18982 2.64479 2.43880 4.51328 3.50304 2.99759 3.97878 2.19589 3.48285 4.24322 2.98156 1.98427 2.81274 2.60772 2.43792 2.98059 3.57055 5.63348 4.24331 617 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 433 3.32889 4.65406 4.94542 4.44191 1.19101 4.40511 4.13305 2.86146 4.26073 1.90447 3.47952 4.36907 4.70960 4.30478 4.28409 3.73385 3.55309 2.38276 2.32823 2.79183 618 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 434 3.47847 4.73773 5.40679 4.84406 3.44701 4.85397 5.24745 1.47054 4.71248 1.15928 2.49530 4.98578 5.03891 4.76013 4.74965 4.21891 3.70622 1.70220 5.49221 4.42794 619 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 435 2.43458 2.78011 4.01471 3.43489 3.35012 3.77811 4.08039 2.67088 2.86341 1.74713 2.88747 3.70179 4.15479 3.58208 3.56069 3.05753 2.23290 2.47275 4.85071 3.65142 620 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 436 2.72141 5.20101 2.64615 2.41032 4.53313 3.48502 3.15241 4.01003 2.42442 3.50029 4.24734 2.11801 3.88538 2.45749 2.59681 2.20809 2.57592 3.58518 5.64086 4.23730 621 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 437 2.45784 4.71370 3.24671 2.68847 3.91213 3.58032 3.80557 3.30153 2.35552 2.95745 3.80647 2.74425 2.48159 3.00688 3.09271 2.80022 2.56877 2.66001 2.92793 3.96601 622 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 438 2.71231 4.52176 3.46173 2.89546 3.65068 3.65348 3.88500 3.04241 2.03376 2.39883 3.61992 3.33340 4.03506 3.17087 3.21922 2.06170 2.94342 2.52917 3.47731 3.17827 623 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 439 2.64399 4.38580 4.07461 3.63831 3.95938 2.69652 4.45885 2.97724 3.57400 2.97190 3.91387 3.78557 4.14069 3.85137 3.83174 2.91110 1.56402 1.34246 5.45350 4.25336 624 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 440 2.75980 3.44936 3.18444 2.61075 3.18363 3.58228 3.15048 3.58515 2.17135 3.18307 4.00409 3.11688 3.96676 2.51803 1.81966 2.79765 2.98495 3.26916 5.41427 4.09835 625 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 441 2.72985 4.15806 4.38039 3.78767 2.76218 3.16129 4.18990 2.23795 3.63824 1.73640 3.26687 3.92035 4.23269 3.82854 3.75909 2.66364 2.96370 1.71610 4.78920 3.60317 626 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 442 2.39970 2.38929 4.46713 3.86857 2.30711 3.86452 4.19612 2.27693 3.70082 2.10983 3.24535 3.95619 4.23196 3.87355 3.78756 2.64365 2.95199 2.07813 4.76012 3.57771 627 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 443 2.14742 3.20658 4.32989 3.74186 3.28384 3.84124 4.18411 2.53864 3.60101 2.14348 2.34132 3.89064 4.21908 3.80111 3.73935 2.66499 2.95932 1.74661 4.80950 3.62281 628 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 444 2.75535 3.08549 4.56600 3.96270 2.58537 3.06010 4.24064 2.23370 3.78250 1.43801 2.77441 4.02479 4.27165 3.93701 3.84443 3.22085 2.98738 2.34438 4.76886 3.59380 629 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 445 2.71556 4.18972 4.18277 3.59712 2.83598 3.02224 4.12522 2.60562 3.47582 1.61538 2.79148 3.07350 4.18874 3.69574 3.65505 3.10742 2.94836 1.94456 4.80268 3.60978 630 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 446 2.74203 3.26503 4.58433 3.98047 3.22071 3.90784 4.24059 2.19358 3.79484 1.68215 3.23085 4.02844 4.26833 3.94992 3.84933 3.21611 2.45790 1.72282 3.49660 3.58921 631 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 447 3.82759 5.04621 5.16007 4.80515 1.26480 4.72758 3.91845 3.32895 4.61805 1.56926 3.90492 4.50374 5.00510 4.52934 4.57938 4.08268 4.04233 3.31199 4.05069 1.40355 632 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 448 2.49565 3.21052 4.92942 4.36171 3.56096 4.31874 4.73753 1.46595 4.21147 1.83900 3.47907 4.44336 4.64930 4.39169 4.29777 3.65383 3.27616 1.43719 5.23920 4.05231 633 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 449 2.36779 4.34011 4.37724 3.83914 3.59954 2.56468 4.46232 1.81037 3.73698 2.53988 3.54807 4.02772 4.37791 3.97863 3.93981 3.27671 3.12700 1.29483 5.18239 3.98323 634 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 450 3.61664 5.00842 4.67325 4.27418 2.53936 4.46869 3.98216 3.28621 4.03264 2.68086 2.75478 4.27770 4.82779 4.23854 4.15962 3.84502 3.86179 3.22494 4.22062 0.69691 635 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 451 2.97224 4.34623 4.72711 4.14683 3.01594 4.11765 4.26775 1.79175 3.96139 1.36758 3.25787 4.18764 4.44942 4.08708 4.01497 3.43082 3.20051 2.51082 2.65485 2.70778 636 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 452 1.80670 4.38253 3.64814 3.08196 3.00350 2.87451 3.96385 2.88233 3.02991 2.36560 3.49894 3.46473 4.07284 3.32378 3.36566 2.52916 2.60856 2.66075 4.97831 3.01805 637 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 453 2.46954 4.19553 4.52512 3.93260 2.68669 3.17473 4.29416 1.57009 3.77408 1.84226 3.28209 4.03840 4.31585 3.95159 3.87259 3.26410 3.02808 2.05133 4.85672 3.67515 638 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 454 1.33856 2.79384 4.15432 3.72587 4.38547 3.26397 4.58646 3.76277 3.66293 3.48516 4.32692 3.74255 4.00618 3.91893 3.93135 1.36183 2.35210 3.28671 5.78399 4.60560 639 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 455 2.71272 4.11872 4.47731 3.87603 2.74089 3.86255 4.18664 1.84552 3.70400 2.29452 2.72806 3.95634 4.22684 3.87270 3.78354 2.75943 2.56305 1.83735 4.74305 2.99154 640 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 456 2.78168 4.51116 3.64538 3.10589 3.48848 2.88484 3.96080 3.04661 2.96348 2.74803 3.65630 3.48399 4.12303 3.33513 2.79518 2.99334 3.02934 2.41455 4.96377 1.49956 641 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 457 3.65477 5.31876 4.45227 4.44885 5.49090 0.18830 5.47752 5.29668 4.71199 4.84352 5.85673 4.61988 4.72158 4.98611 4.83170 3.85134 4.18147 4.70051 6.36868 5.62987 642 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 458 2.47762 1.81556 4.58967 4.03014 3.51224 3.99229 4.49238 1.73274 3.89226 2.46408 3.47243 4.13734 4.40890 4.09640 4.02602 3.33006 2.56083 1.89124 5.10295 3.91368 643 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 459 2.69897 3.06809 3.97474 3.39538 3.34687 3.76666 4.05801 2.69074 2.85261 1.99775 3.34841 3.67369 4.14042 3.55184 3.54079 2.39507 2.51613 2.02316 4.84146 2.97672 644 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 460 2.73966 5.03469 3.06545 2.52077 4.32502 3.53131 3.73097 3.75565 2.47019 3.31844 4.11198 1.97273 3.93020 2.26090 2.61945 2.74650 2.38328 2.76229 5.51851 4.16784 645 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 461 3.52039 4.79810 5.40505 4.81555 2.56251 4.81591 5.11650 1.43590 4.66276 1.29709 1.79026 4.94841 4.97903 4.64388 4.65716 4.16719 3.73486 2.53234 5.31759 4.27298 646 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 462 2.80559 5.26197 3.01002 1.99613 4.61578 3.54334 3.71033 4.07746 1.66542 3.55170 4.31137 2.33976 3.94277 2.81556 2.45955 2.76970 2.64224 3.65966 5.67180 4.29746 647 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 463 2.71646 4.95898 3.06094 1.93149 4.21445 3.52613 3.73718 2.43128 2.52556 3.22686 4.03189 3.04850 3.20550 2.46699 2.99150 2.43181 2.61321 3.30038 5.45672 4.11167 648 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 464 2.73740 5.08362 2.98317 2.22358 4.37494 2.07023 3.72502 3.19765 2.28186 3.36836 4.15167 2.34280 3.91666 2.84934 2.96421 2.73120 2.62033 3.44689 5.55987 4.18951 649 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 465 3.85284 5.08764 5.62397 5.04821 2.51601 5.16896 5.33996 2.51504 4.90825 0.57201 2.46117 5.26051 5.20489 4.79892 4.88499 4.54673 4.05090 2.79902 5.37852 4.31485 650 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 466 2.87139 5.38574 1.83869 1.95237 4.71271 3.48418 3.79725 4.20336 2.61711 3.69019 4.45716 2.51730 3.96058 2.91614 3.13743 2.17772 2.27834 3.77177 5.83529 4.40068 651 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 467 2.26685 4.56239 3.48106 3.00005 3.91289 3.51806 4.04040 3.30875 2.97661 3.00578 3.88301 3.38996 1.47861 3.30863 3.35039 2.84053 2.56779 3.01656 5.31639 2.84321 652 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 468 2.44783 5.17771 2.33479 2.41287 4.50575 2.96079 3.67859 3.97967 2.18878 3.47654 4.22528 2.60373 3.88064 2.46079 2.91373 2.42642 2.65170 3.08606 5.62262 4.22180 653 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 469 2.90605 5.24860 3.14871 2.60799 4.59100 3.62936 3.75555 4.02107 1.41796 2.80527 4.31174 2.13797 4.02369 2.49610 2.68367 2.88587 3.12085 3.64643 5.64176 4.31965 654 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 470 2.54353 4.78157 4.67765 4.27583 3.52382 4.24893 4.93226 2.58815 4.09499 0.65058 3.38252 4.45429 4.71152 4.36200 4.24954 3.68677 3.59173 2.60880 5.47150 4.32320 655 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 471 3.30496 4.60257 5.19645 4.62480 1.91086 4.60501 4.94480 1.98465 4.47518 1.49556 3.24400 4.72645 4.85210 4.55867 4.51890 3.94978 3.53484 1.37358 5.27716 4.12669 656 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 472 2.36000 4.24214 3.97032 3.39123 3.35346 3.77282 4.06182 2.42031 3.29891 1.92524 2.88420 3.67406 3.23689 3.55096 2.87398 3.04656 2.55376 2.06401 4.85024 3.64844 657 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 473 2.42583 5.18947 2.60921 2.02888 4.51352 3.02292 2.93509 3.98709 2.44036 2.90508 4.23766 2.38753 3.88803 2.79400 2.93255 2.42737 2.95619 3.56917 5.63449 4.23253 658 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 474 3.13110 5.73958 1.22071 2.00653 5.04570 3.48797 3.97340 4.57191 2.94015 4.04111 4.85431 2.42431 4.07569 3.12136 3.52825 1.96873 3.40717 4.12180 6.18845 4.68296 659 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 475 2.76825 4.97511 2.50700 2.55842 3.10785 3.53890 3.03791 3.66292 2.62319 3.25551 4.07833 3.07966 3.96510 2.95643 3.09116 1.48687 3.01100 3.33307 5.40665 4.01226 660 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 476 2.81829 4.96222 3.09657 2.63228 4.11760 3.58556 3.81254 3.62857 2.29499 3.23144 4.06803 2.63760 1.87665 2.99071 2.99630 2.85765 3.05546 3.31624 5.41151 2.34305 661 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 477 2.72560 4.69943 5.08192 4.53608 3.45050 4.62910 5.04356 1.70246 4.38701 0.86987 3.26068 4.72033 4.89248 4.53284 4.49605 3.98674 3.60894 2.23596 5.42654 4.32480 662 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 478 2.39318 4.26096 4.01189 3.43874 3.39391 3.79612 4.11203 2.36796 3.34580 1.99500 3.38612 3.07483 4.17707 3.59976 3.58802 2.59209 2.96520 1.61951 4.89959 3.69693 663 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 479 2.76468 5.27485 2.54011 1.76211 4.61306 3.48583 3.11745 4.09860 2.00267 3.57524 4.32145 2.95155 2.79281 2.53136 2.95144 2.72056 2.99919 3.66264 5.70611 4.29135 664 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 480 2.30358 4.15342 4.25268 3.66178 2.70364 3.81662 3.30148 2.10089 3.52699 2.08846 3.26862 3.83222 4.18480 3.73190 3.67744 2.67965 2.93232 2.19531 4.76138 2.56206 665 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 481 2.44713 4.40227 2.92958 3.08261 2.50779 3.70855 3.95122 2.89047 3.03614 1.88555 3.50710 2.96700 4.08814 3.32809 3.37287 2.96153 2.95165 2.67215 4.93429 2.62024 666 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 482 2.70675 5.16774 2.59714 2.18590 4.49294 3.48611 3.67559 3.96471 1.97953 3.46404 4.21396 2.64039 3.87984 2.77903 2.63310 2.21380 2.93784 3.54779 3.85126 3.43892 667 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.10964 4.51845 2.37586 0.61958 0.77255 0.48576 0.95510 483 2.69724 4.64052 2.75470 2.71146 3.81160 3.57776 3.81355 2.41736 2.70403 1.91449 3.72785 2.74630 3.97184 2.61185 3.12186 2.81547 2.93002 2.92244 5.18860 3.90791 668 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01792 4.42673 5.14907 0.61958 0.77255 0.40618 1.09719 484 2.43115 4.38576 3.77198 3.19253 3.49143 3.75756 4.00813 1.98013 3.05197 2.31005 3.47637 3.55182 4.13151 3.39105 1.93691 3.02024 2.97866 2.60603 4.96927 3.09888 669 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15994 4.51845 1.98850 0.61958 0.77255 0.48576 0.95510 485 2.76842 5.21908 2.14992 1.60639 4.52628 3.44706 3.71026 3.01545 2.19662 3.50556 4.27928 2.92086 3.89177 2.82924 2.99101 2.72980 3.00756 3.58537 5.66845 4.26224 670 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01883 4.37734 5.09968 0.61958 0.77255 0.37543 1.16152 486 2.77833 5.17087 3.06927 2.22810 4.49723 3.54868 3.70612 3.00195 1.58160 3.45140 4.22367 3.03279 3.93732 2.53675 2.51702 2.43164 3.00209 3.55288 5.59937 4.23977 671 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 487 2.70665 4.84179 3.14435 2.26830 2.92012 3.55086 2.68608 3.46931 2.33665 3.09175 3.91805 3.09936 3.21503 2.92487 3.02852 2.75964 2.56005 3.16414 5.35180 2.81338 672 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 488 2.91856 4.31404 4.61986 4.02708 2.06266 4.08504 4.39690 1.93503 3.87129 1.65628 3.20661 4.15231 4.41695 2.96900 3.96856 3.39220 3.14839 1.92020 4.91668 3.74767 673 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 489 3.01500 4.37809 4.80401 4.22243 2.11525 4.17770 4.35158 2.18688 4.04381 1.87186 3.23374 4.26176 4.49907 4.15262 4.08751 3.49408 3.24301 2.11743 1.81160 3.41731 674 w - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 490 2.45738 5.15684 3.00361 2.45249 4.47996 3.50839 2.93009 3.93999 2.22995 3.44875 4.21024 2.64442 2.45479 2.80117 2.27545 2.46466 2.96275 3.53718 5.60218 4.22025 675 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 491 2.70594 4.85872 3.13204 1.97228 4.08400 2.86295 3.75335 2.95259 2.56452 3.11125 3.93386 2.75515 3.93590 2.91470 2.66717 2.75376 2.93727 2.72288 5.36989 2.84428 676 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 492 3.15792 4.93178 3.76413 3.51206 3.34284 1.09456 4.23308 3.84920 3.56893 3.43389 4.43222 3.80859 4.40375 3.87711 3.85792 3.30687 3.52196 3.55920 4.91099 1.42357 677 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 493 2.42078 4.83433 2.63782 2.59039 3.26865 3.54862 3.76181 3.46127 2.58367 2.40135 3.91349 3.10067 3.93981 2.40972 3.03820 2.20093 2.64170 3.15690 5.35309 4.03373 678 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 494 2.39732 4.56749 3.39439 2.83144 3.72793 3.63153 3.86769 2.70008 2.79751 2.50669 2.96829 3.28689 3.22217 1.95589 3.19666 2.86163 2.63011 2.84561 5.13223 3.87150 679 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 495 2.36492 3.12725 4.51965 3.92159 3.25487 3.09668 4.23997 1.92286 3.75177 2.07606 2.68965 4.00232 4.26826 3.92252 3.83291 3.21111 2.97833 1.77103 4.79470 3.61273 680 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 496 2.70839 5.05475 3.02844 2.18919 4.33935 3.50836 3.08071 3.78321 2.45808 3.33268 3.37368 2.70115 3.89975 2.29828 2.61427 2.70497 2.33732 3.41267 3.64059 4.15574 681 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 497 3.46910 4.68707 5.48570 5.02612 4.02605 5.02965 5.77476 1.16024 4.95446 2.45915 3.77058 5.19131 5.27921 5.21568 5.12764 4.46483 3.73522 0.85464 6.12596 4.90445 682 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 498 2.07734 4.16464 4.51744 3.91955 2.16010 3.91779 4.23417 2.22323 3.75142 2.01838 3.24104 4.00616 4.27610 3.91799 3.83424 3.22229 2.99511 1.89736 4.77828 2.93487 683 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 499 3.45748 4.68646 5.44664 4.98801 4.01407 4.98842 5.73194 1.41912 4.90848 2.45526 3.76626 5.15313 5.25358 5.17360 5.08361 4.42252 3.72639 0.70740 6.10160 4.87764 684 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 500 2.85913 5.25409 2.86785 2.17998 4.55255 3.53350 3.78231 4.01137 2.52655 2.87147 4.32377 1.57452 3.97720 2.18218 2.97871 2.82889 3.09532 3.62686 5.69673 4.31432 685 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 501 2.84492 4.91175 3.07932 2.93120 4.72443 3.42673 4.29226 4.18922 3.17609 3.85279 4.71807 0.82155 4.10982 3.50777 3.56194 2.93404 2.41685 3.71609 6.00698 4.66781 686 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 502 1.78831 2.58087 4.24935 3.88043 4.43337 3.27165 4.69597 3.74664 3.79783 3.52235 4.38847 3.82032 1.04098 4.05668 4.02371 2.72512 3.00305 3.27865 5.84803 4.68256 687 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 503 2.91497 4.82363 3.79222 3.67216 5.07466 1.52201 4.86256 4.62572 3.90215 4.25014 5.10514 3.88043 0.79519 4.17152 4.18804 3.08208 3.42382 3.99685 6.24336 5.16684 688 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 504 3.14270 5.73809 1.32680 2.37024 5.04425 3.49890 3.97510 4.56973 2.33860 4.03818 4.85520 1.57498 4.08456 3.12370 3.47775 3.03464 3.41687 4.12403 6.17739 4.68211 689 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 505 3.68739 4.93052 5.55331 4.98469 2.57730 5.03273 5.29141 1.48255 4.84698 0.84615 3.08444 5.15072 5.13674 4.79375 4.83933 4.40580 3.89986 2.50494 5.40360 4.32289 690 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 506 2.71402 4.99292 3.04679 2.06552 3.25821 3.51869 3.72533 3.69059 2.50334 3.26640 4.06266 2.64332 3.91537 2.85989 2.67288 2.45342 1.97069 3.34230 5.48231 4.12869 691 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 507 2.76601 4.76846 3.26384 2.73497 3.99194 3.61234 3.84478 1.97298 2.15366 3.01701 3.87828 2.16007 4.01602 3.04355 3.03877 2.86109 2.55420 3.04696 5.32303 4.03781 692 i - - 2.68619 4.42226 2.77521 2.73125 3.46355 2.40514 3.72496 3.29355 2.67742 2.69356 4.24691 2.90319 2.73741 3.18148 2.89802 2.37888 2.77521 2.98520 4.58478 3.61505 0.08306 2.59815 5.24079 0.35059 1.21832 0.48576 0.95510 508 2.36260 5.10135 3.00482 2.47648 4.40920 3.51207 3.14943 3.85721 2.23563 3.39412 4.17158 3.01084 2.15717 2.55806 2.92432 2.23266 2.97138 3.47619 5.57266 4.20203 694 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 509 2.14721 5.16550 2.87313 1.49846 4.54083 3.48073 3.78806 4.00241 2.58128 3.53140 4.30764 2.55734 3.93982 2.91208 3.07234 2.46358 2.66323 3.59425 5.70367 4.31159 695 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 510 2.71264 5.12899 2.99137 2.23237 4.43961 3.49669 3.68753 3.89939 2.43150 3.41838 3.34601 2.23010 3.89062 2.48639 2.55079 2.18453 2.57344 3.50137 5.58249 4.19702 696 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 511 2.83200 4.51534 3.76495 3.17417 3.51668 3.80276 3.99662 2.92230 2.92628 1.87495 3.55263 3.54954 4.17200 3.34946 1.68436 3.06922 3.05846 2.40151 5.00979 2.99836 697 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 512 2.44602 5.33458 1.66176 2.40017 4.66085 3.49145 3.08829 4.14603 1.98452 3.63165 4.39289 2.54601 3.94233 2.87442 3.04356 2.78181 3.07249 3.71816 5.77201 4.35111 698 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 513 2.75088 5.16862 3.01455 2.06752 4.49165 2.90687 3.69836 3.94853 2.17127 3.45582 4.22055 3.00216 3.91495 2.80811 1.88716 2.44532 2.97875 3.54873 5.60666 3.40352 699 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 514 3.33849 4.64244 5.24615 4.65100 2.17191 4.60199 4.92317 1.97817 4.48435 1.22512 2.20227 4.74328 4.82578 4.51157 4.48698 3.94085 3.55895 1.91983 5.21173 4.13792 700 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 515 2.79703 5.23966 2.44627 1.91141 4.54079 3.49524 3.12196 4.01169 2.53436 2.31034 4.29773 2.08964 3.93165 2.86653 3.03166 2.76243 3.03503 3.60939 5.68969 4.28558 701 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 516 2.48697 5.17133 2.95696 1.72405 4.49002 3.49529 3.69400 3.95595 2.21306 2.81739 4.22185 2.63263 3.89641 2.50979 2.91800 2.46297 2.96162 3.54826 5.61802 4.22550 702 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 517 3.38277 4.69207 5.21941 4.62893 2.52592 4.63893 4.94282 2.42489 4.47337 1.26082 1.66926 4.75465 4.85248 4.50626 4.49664 3.97707 3.60195 1.78705 5.22870 4.14914 703 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 518 2.38088 4.31451 4.75605 4.17158 2.82316 4.17038 4.53108 1.98862 4.01552 2.23071 2.30639 4.26929 4.50485 4.18079 4.10205 3.48909 3.18693 1.32212 5.04522 3.87298 704 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 519 2.41030 5.20188 2.40406 2.18511 4.53599 3.48189 3.67705 4.01508 2.41895 3.04782 4.24637 2.40808 3.88029 2.41186 2.55061 2.41088 2.94664 3.58681 5.64040 4.23464 705 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 520 2.44627 5.24683 2.57354 1.62815 4.57927 3.48775 3.72185 4.05677 2.48325 3.54997 4.30536 2.96191 3.91247 2.83045 2.36691 2.20684 3.00617 3.63358 5.69434 4.28599 706 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 521 3.65153 4.93139 5.35031 4.79896 1.10355 4.87310 4.88937 2.56989 4.64276 1.31720 2.40080 4.91323 5.02751 4.61888 4.65546 4.22763 3.86215 2.76282 5.05140 3.73497 707 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 522 2.53583 5.43452 2.66406 0.75444 4.92774 3.53073 4.11988 4.32077 3.03586 3.93249 4.81539 3.11851 4.15021 3.29516 3.52274 3.09079 3.44756 3.92419 6.12788 4.72024 708 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 523 2.37676 4.98446 3.04344 2.54540 4.36884 3.48207 3.06699 3.81043 2.57176 3.37660 4.16653 2.01809 3.92720 2.92239 3.04035 1.98120 2.37503 3.42914 5.57837 4.22165 709 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 524 2.72372 4.18393 4.23864 3.65143 3.28753 3.83914 4.15128 1.97109 3.52310 1.94062 3.29471 3.84072 4.20730 3.73758 3.68897 2.73622 2.03470 2.14086 4.80985 3.03181 710 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 525 2.79897 5.20991 2.93053 2.46925 4.54874 3.51696 3.74699 4.00799 2.25513 3.51780 4.29065 2.55680 1.99357 2.20187 2.93082 2.35013 3.03609 3.60585 5.67160 4.29010 711 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 526 2.77370 4.90381 3.05919 2.35161 4.06147 2.52244 3.14954 3.54263 2.64187 3.16170 3.99772 3.11273 3.98122 2.98617 3.08954 2.45367 3.01153 3.23751 5.37927 1.90675 712 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 527 2.02509 3.23635 3.85697 3.32023 3.71624 3.53966 4.16461 2.54620 3.25794 2.79172 3.68749 3.59358 4.06806 3.53793 3.56401 1.86518 1.86291 2.77193 5.17369 3.96060 713 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 528 2.71297 4.20960 4.10260 3.51650 3.30072 3.80211 4.09405 2.39347 3.39015 1.76126 2.21088 2.99701 4.17087 3.63337 2.96731 3.08452 2.94448 2.45915 3.31861 3.61417 714 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 529 3.11522 5.08874 3.31413 3.17068 4.51714 0.65886 2.60729 4.40459 3.33783 3.96915 4.86705 3.58542 4.29491 3.71630 3.67479 3.20675 3.51808 3.95707 5.82620 4.46919 715 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 530 2.71270 5.18529 2.63654 2.18182 4.51614 2.84843 3.67628 3.99067 2.08100 3.48334 3.44900 2.95996 2.75112 2.77838 2.32001 2.68154 2.94374 3.56847 5.62539 4.22520 716 k - - 2.68625 4.42233 2.77527 2.73101 3.46361 2.40478 3.72502 3.29361 2.67748 2.69362 4.24697 2.90354 2.73747 3.18154 2.89808 2.37894 2.77527 2.98526 4.58297 3.61511 0.09582 2.45254 5.24079 1.11247 0.39861 0.48576 0.95510 531 2.74837 5.11585 3.00484 2.07642 4.40548 3.52092 3.71417 3.85896 2.00510 2.83275 4.17329 1.99090 3.92039 2.83413 2.90896 2.73631 2.97832 3.48099 5.56777 3.24665 721 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 532 2.31295 4.70803 3.28842 2.75391 3.23305 2.10810 3.88580 3.46660 2.73586 3.11169 3.94923 3.21547 3.96655 3.07897 2.69350 1.82887 2.95233 3.14740 5.38973 4.09481 722 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 533 2.55782 4.43491 3.93608 3.52168 4.28667 3.34271 4.46467 3.53419 3.47112 3.34611 4.22776 3.67040 4.04098 3.77162 3.77010 1.96471 0.99823 2.54434 5.70020 4.49053 723 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 534 2.70767 4.94163 3.08794 2.52956 4.19070 3.53018 3.17272 3.61276 2.05899 2.79696 3.16788 2.69582 3.92018 2.60078 2.97528 2.19676 2.93844 2.82711 5.43544 4.09387 724 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 535 3.45678 4.75457 4.99339 4.53996 1.21870 4.48770 4.02995 1.74482 4.35997 2.47301 3.67526 4.39299 4.79422 4.37394 4.36979 3.82471 3.68117 2.89398 4.22653 1.84667 725 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 536 4.28114 5.36954 5.30159 5.10890 1.15370 4.91370 3.82771 3.84114 4.88542 3.04892 4.38876 4.59485 5.20599 4.70481 4.78185 4.34380 4.49787 3.81785 1.06291 2.18476 726 w - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 537 3.60947 4.88351 5.40515 4.83336 3.33188 4.92893 5.26262 2.35574 4.68859 0.77939 2.33509 5.03080 5.07218 4.70566 4.72816 4.29318 3.82824 1.81399 5.45321 4.43325 727 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 538 2.75427 4.81900 3.24639 2.68291 3.27379 3.59978 3.79429 3.43097 2.57201 2.64658 3.90692 2.74241 3.18838 2.97927 1.60454 2.82612 2.98417 3.14282 5.31610 4.00602 728 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 539 2.43568 5.45105 1.83671 1.54296 4.77238 3.48560 3.82042 4.26973 2.65663 3.74923 4.51962 2.94604 3.97791 2.51309 3.18490 2.48526 3.16193 3.83299 5.89072 4.44474 729 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 540 3.79910 5.04662 5.04274 4.67538 1.70845 4.67393 3.87522 3.40600 4.49958 2.75220 2.86041 4.42969 4.96883 4.45810 4.50486 4.02303 4.01722 3.34845 4.02246 0.80209 730 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 541 2.72977 5.15671 2.56364 1.76054 4.46614 3.49382 3.70021 3.92807 2.16858 2.62387 4.20898 2.63409 3.89791 2.81151 2.94267 2.70609 2.96247 2.99083 5.60965 4.21817 731 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.14703 4.51845 2.07287 0.61958 0.77255 0.48576 0.95510 542 2.67865 5.12826 2.56745 2.38614 4.45016 3.45260 2.97988 3.91855 2.11371 3.42234 4.17670 2.33686 3.84918 2.75108 2.59151 2.41963 2.90986 2.90623 5.57363 4.17923 732 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.19957 4.39001 1.78074 0.61958 0.77255 0.67636 0.71022 543 3.71754 4.99341 4.62724 4.27671 0.99084 4.46368 2.33410 3.57645 4.13178 2.94471 4.14320 4.10694 4.77366 4.14837 4.21312 3.80755 3.93280 3.45017 3.71011 1.61170 733 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02224 4.21269 4.93504 0.61958 0.77255 0.30617 1.33281 544 2.72176 4.90013 2.72145 2.56570 4.11998 3.54684 3.75171 3.54654 2.54987 2.17830 3.97345 2.70548 3.94000 2.53380 2.68537 2.76042 2.95277 3.23002 5.39483 2.48580 734 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.25938 4.51845 1.52526 0.61958 0.77255 0.48576 0.95510 545 2.74628 5.10490 2.93845 1.95764 4.40215 3.48072 3.66098 3.85545 1.88385 3.37626 4.16504 2.96864 3.88779 2.37789 2.75254 2.72852 2.97176 3.48022 5.52920 2.74362 735 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02078 4.27985 5.00220 0.61958 0.77255 0.43606 1.04010 546 2.73862 5.00539 3.08750 2.55765 4.36775 3.50984 3.75343 3.79856 2.46414 3.35527 4.15154 3.06805 3.93424 2.25730 2.52000 1.74506 2.25986 3.42905 5.54487 4.20614 736 s - - 2.68634 4.42241 2.77506 2.73057 3.46370 2.40528 3.72510 3.29321 2.67756 2.69349 4.24705 2.90322 2.73755 3.18162 2.89816 2.37867 2.77535 2.98534 4.58493 3.61519 0.92093 1.16840 1.23447 0.76187 0.62885 0.58047 0.82015 547 2.82105 4.44457 3.75449 2.65664 3.34363 3.82417 4.08552 2.55010 3.08988 1.38567 2.60919 3.60292 4.18069 3.43033 3.38437 3.11033 3.05263 2.47242 5.00816 3.81053 742 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02434 4.12374 4.84609 0.61958 0.77255 0.28153 1.40499 548 2.71303 5.14694 2.97261 2.04499 3.34794 3.49142 3.68585 3.92609 2.25273 3.43858 4.19682 2.37988 3.15206 2.31225 2.91829 2.68968 2.52378 3.52131 5.59760 4.20618 743 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 549 2.39117 4.29755 3.81217 2.82929 2.88984 2.49708 4.01148 2.45404 3.16760 2.50015 2.54215 3.57299 4.11034 3.43974 3.45664 2.65393 2.93167 2.25818 4.89683 3.68456 744 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 550 2.71803 4.81171 3.16509 1.98281 3.22610 3.56486 3.03692 3.42344 2.61251 2.44243 3.89274 3.12611 3.95750 2.95897 3.05823 2.00035 2.95022 3.12924 5.31250 3.98753 745 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 551 2.70438 4.41705 3.59300 1.92811 2.97180 3.68675 3.93918 2.90664 2.97855 2.37684 3.00903 3.42806 4.06562 3.27915 3.32893 2.58113 2.93614 2.38689 4.99366 2.91703 746 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 552 2.70253 4.82270 2.70475 2.12743 4.03902 3.55229 3.76225 3.44274 2.58644 2.31427 3.26188 3.10553 3.94109 2.60694 3.03931 2.76059 2.60636 2.79665 5.34088 3.31741 747 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 553 2.77692 5.27605 2.49821 1.68551 4.60422 3.48532 3.11280 4.08781 2.48821 2.97947 4.32579 2.20621 3.91257 2.54172 2.98728 2.73338 3.01324 3.65884 5.71276 4.29713 748 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 554 2.73870 4.83984 1.77454 2.62300 4.07905 3.56309 3.81534 2.52241 2.65400 3.09641 3.94252 2.75022 3.97439 2.98962 3.10809 2.80286 2.59177 2.68776 5.39578 4.07738 749 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 555 2.46404 5.24051 2.47022 1.68093 4.56005 2.92914 3.72937 3.28532 2.50565 3.53724 4.29763 2.26907 3.91561 2.84118 3.00550 2.73709 3.01145 3.61885 5.69076 4.28233 750 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 556 2.83763 5.32253 2.58692 1.67385 4.67533 3.53317 3.73452 4.14645 1.80999 3.61338 4.37310 2.99977 3.95416 2.84179 2.14873 2.79193 3.06667 3.71988 5.73034 4.34099 751 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.30057 4.51845 1.39151 0.61958 0.77255 0.48576 0.95510 557 2.66885 5.09775 2.42786 2.04564 4.40566 2.91396 3.63299 3.86934 2.16464 2.80495 4.15403 2.88721 2.99299 2.74745 2.88993 2.64181 2.90384 3.46920 5.55218 4.15740 752 e - - 2.68648 4.42302 2.77420 2.73200 3.46312 2.40570 3.72492 3.29382 2.67741 2.69411 4.24499 2.90330 2.73759 3.18093 2.89878 2.37883 2.77431 2.98375 4.58554 3.61580 0.49092 0.96512 4.96187 2.22954 0.11382 0.42754 1.05587 558 2.68563 4.89565 3.06920 2.09034 4.14122 3.02235 3.71980 3.56000 2.51827 2.73838 3.97091 3.04086 3.13479 2.86822 2.98271 2.17938 2.54139 3.23302 5.40082 3.26326 769 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01745 4.45284 5.17518 0.61958 0.77255 0.59069 0.80731 559 2.74529 4.32747 3.86336 3.29523 2.37783 3.77192 3.96023 2.80352 3.20906 2.51977 3.43983 3.60583 3.25429 3.47821 2.87139 2.65511 2.97675 2.59815 2.27899 2.73567 770 w - - 2.68623 4.42230 2.77524 2.73128 3.46313 2.40497 3.72499 3.29359 2.67745 2.69360 4.24694 2.90351 2.73719 3.18151 2.89805 2.37891 2.77524 2.98523 4.58482 3.61508 0.34733 1.53442 2.55300 0.18842 1.76180 0.42533 1.06003 560 2.68164 4.54898 3.35996 2.79721 2.71911 3.60410 3.83455 2.57533 2.76330 2.77168 3.64393 2.84036 3.98757 2.65844 2.68287 2.29731 2.91305 2.83762 5.10172 3.04247 772 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01753 4.44845 5.17079 0.61958 0.77255 0.42194 1.06645 561 2.71370 4.86156 3.13273 2.30076 4.08867 2.64886 3.75946 3.49634 2.14228 3.11532 3.93949 3.09563 3.94191 2.92208 3.01730 2.76237 2.56069 2.65854 5.37416 2.55889 773 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 562 2.47838 5.17451 2.34136 2.21357 4.49805 2.58037 3.68408 3.96958 2.43215 3.01418 4.22307 2.60224 3.88488 2.78914 2.55685 2.68665 2.60638 3.55396 5.62112 4.22208 774 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 563 2.45948 3.39212 3.23555 2.14679 3.91328 3.57917 3.79865 3.30105 2.38246 2.42064 3.80562 2.76228 3.96669 2.99764 3.09297 2.79524 2.60306 2.55836 5.25749 3.96379 775 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 564 2.76168 4.37765 3.82694 3.24352 3.44040 3.77818 4.01916 2.81962 3.08019 1.44790 2.92742 3.58768 4.14755 2.91123 2.75719 3.04433 2.99029 2.63102 4.93616 2.84792 776 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 565 2.71891 5.22572 2.56516 1.99203 4.56817 3.48036 3.15189 4.05278 2.01521 3.52910 4.26816 2.60683 3.19822 2.77380 2.56201 2.45074 2.95072 3.61517 5.65841 4.24793 777 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 566 2.71024 4.81056 3.17093 2.39118 4.01200 3.56169 3.19054 3.42501 2.59534 3.05640 3.88970 3.12038 3.95064 2.58019 3.04041 2.25030 2.60700 3.12858 2.56570 3.15101 778 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 567 3.04075 4.44024 4.57119 4.03402 1.46842 4.10720 4.02142 2.86009 3.87412 1.88368 3.51167 4.07440 4.45950 4.01414 3.97314 2.54696 3.27187 2.70370 2.51443 2.84366 779 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 568 2.79796 4.40389 3.86293 2.82008 3.44000 3.82767 4.09157 2.37171 3.19297 1.39484 2.83042 3.64286 4.19121 2.73386 3.48390 3.09290 3.02780 2.60063 4.98749 3.78727 780 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 569 2.28629 5.08849 2.42430 2.22219 4.38160 3.50236 3.70181 3.82728 1.89029 2.77590 4.14532 2.99399 3.89916 2.81971 2.94138 2.70534 2.94741 2.88680 5.55456 4.17796 781 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 570 2.12826 4.20186 4.16938 3.58701 2.60978 3.81790 4.08825 2.65209 3.46794 2.39323 3.31786 3.79133 4.18847 3.68661 3.65026 2.43135 2.95627 2.20743 2.45014 2.87652 782 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 571 2.35387 4.97125 3.06126 2.30790 4.23941 2.92218 3.72643 3.07781 2.31208 3.24870 4.04647 3.03742 2.46677 2.86274 2.97986 2.45179 2.59539 3.32239 5.46949 4.11868 783 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 572 2.75116 4.82792 3.09935 1.90230 2.57884 2.02932 3.85115 3.48091 2.71231 3.12476 3.97056 3.15012 3.98662 3.04101 3.15837 2.82088 2.64454 3.18051 5.39714 4.07758 784 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 573 2.74411 4.69334 3.31343 2.76578 2.65755 2.64206 3.82319 3.26463 2.73479 2.92232 3.78944 2.25731 4.01571 3.07584 2.66230 2.85575 2.97686 3.00108 5.11342 2.50496 785 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 574 2.71749 5.21326 2.56991 2.40349 4.55198 3.02178 3.67664 4.03345 2.14614 3.51541 4.25731 2.66391 3.19923 2.52665 2.54625 2.02412 2.94933 3.60085 5.64919 4.24163 786 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 575 2.43727 4.35778 3.70233 3.13484 2.48400 3.70983 2.78604 2.84052 3.07324 1.99737 3.46584 3.50322 2.82066 3.36304 3.39282 2.96710 2.56071 2.62599 4.94349 3.71523 787 l - - 2.68620 4.42227 2.77521 2.73125 3.46355 2.40514 3.72496 3.29356 2.67742 2.69356 4.24691 2.90348 2.73741 3.18106 2.89802 2.37888 2.77521 2.98520 4.58478 3.61505 0.08753 2.54448 5.24079 0.34110 1.24129 0.48576 0.95510 576 3.12338 4.66871 4.24881 3.65386 3.08458 4.06803 4.04975 3.04882 3.14930 1.95183 3.65636 3.88974 4.43049 3.66487 2.71025 3.39674 3.34855 2.91823 1.27338 3.19436 789 w - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 577 2.25142 5.05457 3.02273 2.25702 4.33906 3.50597 3.70051 3.78343 2.23050 3.33316 4.11242 2.69982 3.89824 2.23873 2.93879 2.35961 2.93774 2.93729 3.82368 4.15554 790 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 578 2.71186 5.12468 2.98570 2.25712 4.43265 2.36585 3.68943 3.89193 2.23153 3.41367 3.24523 2.67745 3.89042 2.42678 2.92130 2.42010 2.62212 3.49561 5.58058 4.19482 791 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 579 2.90036 4.97034 1.65259 2.71242 2.13381 3.66177 3.80901 3.59253 2.81726 3.18132 4.06723 2.66113 4.08692 3.12108 3.26858 2.94375 3.13855 3.30829 4.98875 2.81850 792 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 580 2.80072 4.19142 4.60335 4.00080 2.56884 3.96304 3.21422 2.01214 3.82312 1.77093 2.34897 4.06966 4.31231 3.97208 3.88547 3.27038 3.03152 1.91150 4.79950 3.62743 793 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 581 2.71861 4.48903 3.52117 2.95112 3.62880 3.67419 3.91082 2.98717 2.06765 2.42909 2.98914 3.37544 4.05340 2.72897 3.23435 2.91538 2.94895 1.94481 5.05888 3.18274 794 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 582 2.70787 4.15871 4.26733 3.67598 2.81021 3.08109 4.12933 2.30042 3.53670 2.07995 3.26784 3.84318 4.19268 3.74214 3.06649 3.11730 2.93991 2.14564 2.16654 3.56589 795 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 583 2.12902 5.14861 2.18085 2.43489 4.46517 3.02268 3.70563 3.92758 2.46447 2.98298 4.21051 2.33776 3.89905 2.81785 2.56345 2.70684 2.96360 3.52658 5.61167 4.22102 796 a - - 2.68602 4.42237 2.77531 2.73135 3.46366 2.40524 3.72506 3.29366 2.67731 2.69367 4.24701 2.90323 2.73704 3.18158 2.89812 2.37898 2.77474 2.98530 4.58489 3.61515 0.74604 1.33990 1.33223 0.61695 0.77563 0.48576 0.95510 584 2.69429 5.05619 2.44112 2.36628 4.34543 3.41387 3.65967 3.79324 2.19544 3.33957 3.24442 1.87633 3.84489 2.78790 2.90718 2.67815 2.93183 3.41917 5.52540 4.14661 800 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02210 4.21924 4.94159 0.61958 0.77255 0.85767 0.55191 585 2.66997 5.12332 2.47764 2.02569 4.44284 3.39477 3.62898 3.91363 2.15841 3.42011 4.18185 2.87202 3.13863 2.74100 2.89107 2.29615 2.48021 3.50231 5.57594 4.17335 801 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02210 4.21924 4.94159 0.61958 0.77255 0.85767 0.55191 586 2.71926 5.07378 2.35983 2.09911 4.41654 3.37452 3.71479 3.86824 2.54458 3.41884 4.21393 2.89565 3.85511 2.85186 3.04253 1.97047 2.09725 3.48058 5.61140 4.22054 802 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02210 4.21924 4.94159 0.61958 0.77255 0.85767 0.55191 587 2.71603 4.99632 1.79300 2.38653 3.00082 3.39939 3.71585 3.72164 2.56745 3.30124 4.11631 2.52244 3.86729 2.87221 3.05828 2.34559 2.96877 3.36882 5.48491 4.09279 803 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02210 4.21924 4.94159 0.61958 0.77255 0.40442 1.10070 588 2.72797 5.20954 2.32938 1.95200 4.53622 2.98010 3.68389 4.01423 2.02474 3.50675 4.25823 2.93704 3.06989 2.78975 2.93572 2.69118 2.96223 3.59098 5.65052 3.11415 804 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01731 4.46072 5.18307 0.61958 0.77255 0.43159 1.04833 589 2.76581 5.27207 2.42640 1.94005 4.60581 2.93869 3.71395 4.09132 2.26888 3.57334 4.32159 2.36384 3.90538 2.81915 2.97995 2.40258 2.37310 3.65778 5.70969 4.29234 805 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 590 2.40113 5.04694 2.64548 2.47396 4.33522 2.68368 3.71349 3.18843 2.26356 3.33284 4.11555 2.69653 3.90391 2.83779 2.96321 2.71084 2.05742 3.40882 5.52976 4.16147 806 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 591 2.70698 4.70376 3.24362 2.37736 3.89552 2.66993 3.81151 3.28383 2.67988 2.29074 3.79523 3.18179 3.12394 3.01771 3.11044 2.80652 2.17040 3.01023 5.24766 3.14941 807 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 592 2.70947 5.07316 3.02000 1.99339 4.36414 3.03835 3.69688 3.16558 2.24250 3.35369 2.97536 2.99903 3.89745 2.49940 2.56094 2.42722 2.94009 3.43452 5.53837 4.16607 808 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 593 3.32017 4.61782 5.24429 4.65759 2.62453 4.60754 4.95376 1.76810 4.49677 1.26441 2.51283 4.74926 4.84036 4.54551 4.51147 3.94995 3.54492 1.62156 5.26016 4.17411 809 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 594 2.74757 5.24297 2.30409 2.19084 4.57695 3.48432 3.69966 4.05852 2.00836 3.54296 4.29041 2.95319 3.89738 2.48507 2.94470 2.21343 2.32829 3.62840 5.67992 4.26929 810 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 595 1.96224 5.10466 3.14773 2.59176 4.48243 3.56333 3.76034 3.91231 1.68357 3.44077 4.23074 3.10009 3.97426 2.88400 2.40811 2.15609 3.03882 3.53239 5.60066 4.26833 811 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 596 4.41826 5.44641 5.32198 5.18332 0.62617 4.99240 3.76512 3.98836 4.98169 3.18691 4.53749 4.58781 5.26553 4.72935 4.84769 4.39964 4.62524 3.94921 3.85137 1.44167 812 F - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 597 2.75169 4.25713 4.09823 3.51487 2.71271 3.83428 4.10945 2.66680 3.39489 2.08746 2.83999 3.76561 4.19881 3.64007 1.81744 3.11501 2.98259 2.23369 3.51570 3.60935 813 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 598 2.59113 4.47212 4.69666 4.13932 1.26243 4.21704 4.50715 2.44409 3.99893 1.86412 3.31162 4.27733 4.56038 4.16463 4.12213 3.54387 3.31326 2.03935 4.97884 3.69540 814 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 599 2.46829 4.84365 3.20324 2.64318 4.08575 3.57275 3.78440 2.99267 2.56007 3.10549 3.93989 3.14163 3.96849 2.28367 2.50804 2.79608 1.79434 3.17583 5.37113 4.06494 815 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 600 3.07765 4.45321 4.73221 4.16736 3.52393 4.30773 4.69903 1.66872 4.04231 1.59159 3.40968 4.35162 4.63401 4.24717 4.19725 3.63184 1.78461 1.86387 5.26162 4.09170 816 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 601 1.46991 4.49134 3.69551 3.26066 4.26446 1.56721 4.29537 3.64406 3.25580 2.61372 4.18994 3.52340 4.00664 3.55935 3.60869 2.32798 2.98587 3.23875 5.63764 4.40405 817 a - - 2.68610 4.42117 2.77533 2.73136 3.46367 2.40526 3.72294 3.29367 2.67754 2.69368 4.24703 2.90360 2.73753 3.18159 2.89814 2.37900 2.77533 2.98531 4.58490 3.61325 0.41383 1.30903 2.67654 0.67957 0.70691 0.48576 0.95510 602 2.79466 4.32209 4.10254 3.53606 3.38697 1.98264 4.20942 2.56176 3.43035 1.80881 2.46996 3.80693 4.24613 3.68578 3.66525 3.15827 3.03997 2.05421 4.96904 3.77700 820 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01745 4.45284 5.17518 0.61958 0.77255 0.42533 1.06003 603 2.70855 5.18171 2.59080 2.23508 3.48573 3.02991 2.94730 3.98664 1.91558 3.47999 4.22684 2.95772 3.87900 2.77639 2.54938 2.40060 2.93976 3.56429 5.62285 4.22173 821 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 604 2.81151 5.31488 2.04762 2.40434 4.64967 2.57964 3.74358 4.13383 2.25040 3.61495 4.37114 2.00854 3.93184 2.85340 2.49129 2.76362 3.04972 3.70272 5.75050 4.33382 822 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 605 2.78139 4.22265 3.32747 3.75816 2.70587 3.90565 4.19976 2.29149 3.62238 1.39792 2.73648 3.92481 4.26178 3.81455 3.76450 3.19994 3.01220 2.43360 4.80084 2.85536 823 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 606 2.38263 4.62223 3.37811 2.83236 3.94956 2.96101 3.91676 3.33226 2.80303 3.00340 3.85651 3.27329 3.98473 3.13847 2.65832 1.91844 2.49523 2.07899 5.31103 4.03741 824 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 607 2.76159 5.18004 2.30250 2.00882 4.48372 3.49450 3.72958 3.08518 2.50720 3.46909 4.24002 2.37349 3.91651 2.84674 3.00043 2.73621 2.06951 3.54735 5.64068 4.24632 825 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 608 2.80557 4.40445 3.93746 3.39120 2.73296 3.79786 4.02701 2.89480 3.29404 2.57970 3.53256 3.67959 2.15034 3.57001 3.56234 3.08964 2.63960 2.69448 1.86918 3.36722 826 w - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 609 2.42522 4.89950 3.10904 2.56319 4.17319 3.52305 3.75868 3.59067 2.55675 3.19290 3.30331 2.40769 3.92892 2.61284 3.01661 2.23072 2.02167 3.25959 5.43393 4.09984 827 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 610 2.72204 5.14034 1.93855 2.22174 4.44672 3.49293 3.69772 3.20555 2.45642 3.42899 4.19323 2.60605 3.89477 2.47212 2.94407 2.70096 2.65298 3.03749 5.59662 4.20707 828 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 611 3.04286 5.20948 3.47851 2.83456 4.49239 3.77580 2.42756 3.92647 2.24017 2.62355 4.27909 3.29081 4.13933 2.54562 1.34912 3.05426 3.23459 3.60747 5.55027 4.28822 829 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 612 2.20775 4.97151 3.07062 2.31218 4.23618 2.92437 3.72635 3.66297 2.26696 3.24426 4.04352 3.04220 3.91677 2.86328 2.66653 2.72737 2.16164 2.74318 5.46528 4.11719 830 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 613 2.72072 5.18703 2.68002 2.18632 4.51837 3.49353 2.65428 3.99032 2.03655 2.84047 4.23286 2.96750 3.88797 2.78211 2.36667 2.43119 2.95088 3.57064 5.62466 4.22863 831 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 614 1.98471 4.23045 4.21887 3.63637 3.32031 3.86214 4.18251 2.19210 3.51604 1.75476 2.42534 3.84843 4.23179 3.73914 3.70024 2.62543 2.99168 2.38909 4.86261 3.67446 832 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 615 2.38699 3.15726 4.02021 3.44062 3.34393 3.77962 4.08229 2.67280 3.33828 1.66864 2.82644 3.70570 4.15582 3.01660 3.56785 3.05916 2.24391 2.47694 4.84739 3.64897 833 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 616 2.73360 5.17494 3.00947 2.16585 4.50380 3.50985 3.68493 3.96710 2.01126 2.96215 3.42744 2.39316 3.90075 2.26524 2.50346 2.70732 2.96165 3.55746 5.61053 4.22656 834 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 617 2.40565 5.06106 3.02267 2.00515 4.34746 3.50741 3.10428 3.79223 2.45843 2.52073 4.11866 3.00341 3.89987 2.55781 2.64649 2.47395 2.61980 3.41998 5.52974 4.16015 835 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 618 3.12650 4.47886 4.93403 4.34040 2.64001 4.31074 4.54793 2.19956 4.16543 1.44541 2.50044 4.41183 4.59742 4.24674 4.19880 3.63059 3.34986 2.56227 1.77012 3.70747 836 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 619 3.90999 5.60678 4.47844 3.90600 5.14021 4.20729 4.52167 4.77476 2.79437 4.17038 5.18945 4.19692 4.71180 3.74286 0.32880 3.98775 4.15297 4.47764 5.97686 4.97290 837 R - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 620 2.48616 5.22503 2.55407 2.21862 4.55672 2.53798 3.70030 4.03595 2.45745 3.52683 4.27633 2.61315 3.89524 2.45826 2.95374 2.15711 2.62604 3.60994 5.66926 4.26033 838 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 621 3.31581 4.58802 5.23464 4.73696 3.95061 4.75087 5.38867 1.19236 4.64231 2.51555 3.74350 4.88934 5.05712 4.89506 4.80951 4.14327 2.82991 0.98723 5.87060 4.65649 839 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 622 1.20582 4.41149 4.04199 3.52021 3.75345 3.69856 4.34153 2.68773 3.43989 2.30581 3.69051 3.77540 4.21652 3.72769 3.72512 3.04487 2.54720 2.10669 5.29032 4.08120 840 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 623 2.53253 5.37868 1.28263 2.42387 4.71766 3.48698 2.54370 4.21165 2.75344 3.72877 4.52459 2.98467 4.00946 3.02280 3.27758 2.45229 3.20464 3.79617 5.89121 4.45901 841 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08753 4.51845 2.61862 0.61958 0.77255 0.48576 0.95510 624 2.82626 5.26328 3.06663 2.05220 4.63446 3.56046 3.69168 4.08367 1.83428 3.54523 4.31189 3.03290 3.95037 2.20342 2.08361 2.45218 3.04362 3.67118 5.64939 4.29892 842 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01753 4.44845 5.17079 0.61958 0.77255 0.42194 1.06645 625 2.81193 4.76562 2.77690 2.46675 2.91209 3.68361 2.49247 3.34571 2.79612 2.97507 3.85908 3.27793 4.06716 3.12111 3.21668 2.90866 3.04268 3.08342 3.54613 1.98219 843 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 626 2.48912 5.17164 2.94516 2.24262 4.49229 3.50277 3.71736 3.95286 2.21084 3.46836 4.23527 2.98863 2.14726 2.49840 2.93645 2.17965 2.98808 3.55252 5.62931 4.24262 844 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 627 2.70839 5.11268 2.28912 2.08474 3.37397 3.49443 3.15147 3.87268 2.44564 3.39949 3.24385 2.98003 2.82833 2.51764 2.93059 2.69176 2.93995 3.48033 5.57101 4.18623 845 e - - 2.68621 4.42228 2.77523 2.73127 3.46357 2.40516 3.72498 3.29357 2.67718 2.69358 4.24693 2.90350 2.73743 3.18150 2.89804 2.37871 2.77523 2.98522 4.58480 3.61507 0.09113 2.50345 5.24079 0.65984 0.72760 0.48576 0.95510 628 3.84896 5.09379 5.36268 4.92628 1.00552 4.94097 4.58203 2.74530 4.75579 1.20073 3.30844 4.89709 5.12858 4.70346 4.74763 4.34216 4.06895 2.92746 4.69582 3.14405 848 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 629 3.14935 5.61837 2.09760 2.43015 5.07634 2.55926 4.08121 4.61351 3.10013 4.11326 4.95289 0.96804 4.11484 3.25022 3.68671 3.06816 3.46828 4.14739 6.26058 4.77021 849 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 630 1.88202 4.51359 4.88605 4.37464 3.84954 4.39975 5.02434 1.70747 4.27526 2.53184 3.69600 4.53783 4.78989 4.52559 4.46395 3.77178 3.42235 1.00958 5.63429 4.42657 850 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 631 2.70257 4.38474 3.85804 3.31917 3.65578 3.65835 4.16176 2.82022 3.24661 2.33761 3.62033 3.62617 4.13457 3.54017 3.55071 2.20844 1.63851 1.93732 5.14189 3.92391 851 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 632 3.11202 4.47093 4.78935 4.23920 3.68090 4.38388 4.82769 1.86184 4.12580 2.09974 3.55639 4.43127 4.71712 4.35908 4.30279 3.71911 1.93172 1.14664 5.41969 4.22550 852 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 633 4.45624 5.46502 5.34301 5.21772 0.75135 5.01151 3.75529 4.03166 5.01312 3.22288 4.57581 4.59326 5.28064 4.74165 4.86687 4.41834 4.66029 3.98919 3.83904 1.18919 853 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 634 2.75599 5.22204 2.13621 2.17481 4.54181 3.49094 2.31234 4.01649 2.46743 3.51560 3.41563 2.96394 3.90646 2.21508 2.95761 2.72141 2.99016 3.60059 5.66409 4.26051 854 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 635 2.73531 3.61812 2.62596 1.58142 4.50344 3.48791 3.70345 3.97265 2.46220 3.48040 4.23857 2.96716 3.25421 2.41794 2.95347 2.45741 2.96992 3.56200 5.63635 4.23785 855 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 636 2.42612 4.93065 2.14876 2.53821 4.17108 3.52984 3.75093 3.08262 2.55728 3.19596 4.00845 2.68877 3.93141 2.90145 3.02433 2.37402 2.95390 3.26776 5.43426 2.53494 856 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 637 2.21000 4.60339 3.34327 2.78134 3.08433 2.95315 3.84281 3.15033 2.75582 2.83016 3.69670 2.81091 3.99785 3.08400 2.63788 2.31151 2.93313 2.89597 3.71742 3.08445 857 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 638 2.11216 4.37959 3.66270 3.09430 2.61993 3.70100 3.96820 2.85788 2.61384 2.58227 2.98926 3.47611 2.43348 3.33207 3.36841 2.95425 2.93752 2.32214 4.97210 3.74610 858 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 639 3.54973 4.82979 5.02717 4.60233 1.21351 4.54179 3.97187 1.93465 4.42090 2.56939 3.77490 4.40826 4.84570 4.40921 4.41914 3.88275 3.77248 3.01332 4.14781 1.55464 859 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 640 1.85871 4.26180 4.05527 3.48247 3.40268 3.79884 4.14118 2.34546 3.38694 1.77893 3.39165 3.74489 4.18902 3.63609 3.62183 2.65035 2.62001 2.19539 4.91589 3.71583 860 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 641 3.22968 5.63992 0.68355 2.48208 5.17045 3.48161 4.20653 4.75492 3.32550 4.28380 5.16953 3.05172 4.17178 3.40140 3.94647 2.44255 3.59061 4.26653 6.39959 4.88738 861 D - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 642 2.82609 4.63388 3.55432 2.99691 3.71538 3.75498 3.99472 2.55757 2.87867 2.02011 3.62365 3.43581 4.13687 1.60600 3.23571 3.00826 2.66964 2.78100 5.20619 3.96324 862 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 643 3.08147 4.44446 4.84726 4.25614 3.21308 4.27149 4.54968 1.67047 4.08780 1.40725 2.61159 4.35797 4.57042 4.20654 4.15154 3.58901 3.30797 2.43826 4.97478 2.11883 863 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 644 2.74942 5.00895 2.33988 2.07456 4.25859 3.52531 3.75700 3.11211 2.56048 2.02612 4.07837 2.54691 3.93799 2.90014 3.03520 2.76294 2.98411 3.33966 5.50145 4.14770 864 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 645 2.70743 4.72599 3.22808 2.16121 3.92871 3.57756 3.80781 2.55083 2.66734 2.97072 3.81989 2.69970 3.97089 3.00620 3.10274 2.52609 2.14648 2.55172 5.27274 3.97813 865 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 646 3.47033 4.73193 5.38779 4.82626 3.45623 4.84481 5.24065 1.21336 4.69530 1.44428 2.10119 4.97179 5.03411 4.75247 4.73974 4.20908 3.69891 1.88557 5.49614 4.42709 866 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 647 2.70032 4.58517 3.36631 2.80768 3.76074 2.68222 3.85906 2.77404 2.77912 2.02485 3.68925 3.26703 3.12388 2.71076 3.18411 2.49625 2.54043 2.88270 5.15352 3.88807 867 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 648 2.15827 4.51477 3.70114 3.28312 4.53991 3.28640 4.36569 3.95942 3.29204 3.61716 4.42703 3.52206 1.49009 3.59454 3.65768 1.80979 1.97338 3.44305 5.85758 4.62155 868 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 649 2.20820 4.99742 2.33868 2.51485 4.33922 3.48942 3.75403 3.77710 2.53749 3.34369 4.13132 2.70118 3.91395 2.88475 3.01371 2.09830 2.36465 2.84892 5.54780 4.18698 869 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 650 2.40414 4.38977 4.12616 3.57232 3.54562 3.89469 4.30758 2.20733 3.47515 1.90155 3.48556 3.85317 4.30443 3.74866 3.73237 3.20140 1.49535 2.33647 5.12526 3.92542 870 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 651 2.94199 4.30195 4.83544 4.23099 2.59154 4.13181 4.44819 1.41592 4.04087 1.80315 2.67952 4.26871 4.45454 4.14957 4.06528 3.44866 3.17056 2.14800 3.17446 3.72801 871 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 652 2.71641 4.94274 3.08534 2.63548 4.48233 2.81424 3.88322 3.92699 2.66309 3.49132 4.28181 3.12656 3.95451 1.60707 3.11119 1.95401 2.43436 3.50972 5.68266 4.33731 872 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 653 2.67141 4.77893 3.20098 2.85856 4.60603 3.36884 4.12073 4.05599 2.97409 3.65669 4.45677 1.61501 3.98946 3.29508 3.40412 1.52511 2.19965 3.57006 5.85249 4.53587 873 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 654 2.38614 4.27797 2.95332 3.35744 3.40074 3.78585 4.07430 1.94889 3.27624 2.21975 2.78647 3.66245 4.15819 3.53673 3.53967 2.68996 2.95659 2.02521 4.89928 3.69281 874 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 655 2.42448 4.22147 4.31168 3.73051 3.35693 3.08040 4.24033 1.82331 3.60527 1.89279 3.34819 3.91553 4.27088 3.82150 3.77225 3.19709 2.46792 1.87565 4.89666 3.70546 875 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 656 2.69755 3.29333 4.34608 3.75051 3.22972 2.99614 4.14551 2.09717 3.59922 2.03373 3.24792 3.88073 4.19558 3.78849 3.71802 2.62855 2.56124 2.14747 2.87045 3.56315 876 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 657 1.62393 4.79683 2.54387 2.75198 4.41857 3.41138 3.99122 3.84008 2.84257 3.45404 4.26145 3.20708 3.96468 3.15852 3.29531 2.33337 1.72255 3.42580 5.68355 4.36218 877 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 658 2.60666 4.43427 4.92179 4.32499 2.61736 4.29550 4.62396 2.11607 4.15677 1.16908 2.45566 4.41220 4.58984 4.25931 4.20145 3.61663 3.31081 2.08943 5.04432 3.92086 878 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 659 2.42655 3.05428 4.74837 4.15231 2.60546 4.05703 4.41198 1.73917 3.96932 1.86326 3.29848 4.19172 4.40518 4.12029 4.01678 3.37437 3.08517 1.72925 4.91347 3.73641 879 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 660 2.67325 1.74342 4.16168 3.61383 3.51262 3.67030 4.24264 2.74033 3.50303 2.25050 3.50521 3.79229 4.15981 3.74627 3.71518 2.50220 2.19167 2.24738 5.02016 3.82591 880 c - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 661 3.63280 4.91503 5.35522 4.78691 3.33039 4.93920 5.25112 1.97881 4.62391 1.47589 1.01515 5.01023 5.08048 4.67771 4.68788 4.30373 3.85116 2.48220 5.45815 4.42104 881 m - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 662 1.95572 4.33375 3.12089 3.17911 2.15667 3.72151 3.99769 2.51700 3.11745 2.53490 2.95319 3.53443 4.10112 3.39837 3.42601 2.60936 2.93742 2.58919 4.93104 3.71148 882 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 663 2.14127 2.95208 4.68507 4.09154 3.32794 4.04162 4.39373 1.89832 3.91917 1.86013 2.67665 4.15697 4.39184 4.08137 3.98673 3.35601 3.07866 1.77843 4.91632 3.73800 883 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 664 2.67713 4.59107 5.19426 4.70564 3.96695 4.70138 5.38194 1.52374 4.61501 2.53018 3.75912 4.85757 5.03413 4.87303 4.79169 4.09903 3.57415 0.78493 5.88748 4.67094 884 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 665 1.41215 1.39691 4.42261 4.08310 4.47275 3.23050 4.80208 3.82301 3.98831 3.58653 4.43538 3.88177 4.02080 4.20370 4.16328 1.75145 2.98228 3.31343 5.89372 4.74878 885 c - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 666 2.40544 4.18530 4.62370 4.02146 1.89487 3.96089 4.26888 2.23160 3.83816 1.74828 3.20206 4.07413 4.31151 3.98184 3.89107 3.26951 3.02973 2.15123 3.22931 3.57492 886 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 667 3.46372 4.72813 5.37555 4.81251 3.44875 4.83194 5.22392 1.82104 4.68112 1.10260 2.58395 4.95767 5.02347 4.73807 4.72558 4.19445 3.69196 1.44457 5.48361 4.41457 887 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 668 3.61383 4.90451 5.28764 4.74115 1.09918 4.81730 4.81604 2.58279 4.58223 1.49369 2.08915 4.84692 4.99262 4.57880 4.60620 4.16864 3.82722 2.75626 4.99832 3.65055 888 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 669 3.47165 4.71645 5.40941 4.87130 3.60610 4.91164 5.37657 0.91848 4.75941 1.73175 2.71725 5.03214 5.10844 4.86917 4.84224 4.29028 3.70909 1.72796 5.65718 4.55599 889 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 670 2.14409 4.80667 3.16432 2.66978 4.14702 3.50396 3.85516 3.56568 2.69061 3.19136 4.01882 2.62966 1.87292 3.03073 3.13565 2.40304 2.97387 3.23493 5.44684 3.26695 890 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 671 2.80371 5.29647 2.81760 1.95041 4.62296 2.96025 2.99186 4.10462 2.51521 3.59354 4.35192 1.84767 3.92845 2.54709 3.01275 2.42312 3.04197 3.67930 5.73591 4.32048 891 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 672 2.70742 4.15604 4.27695 3.68545 2.76198 3.82671 4.13392 2.33742 3.54753 1.89062 3.26369 3.84901 2.34762 3.74920 3.69216 2.68668 2.93960 2.19149 3.30105 3.57032 892 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 673 2.70962 4.23833 3.99617 3.41756 2.46865 3.78010 4.06068 2.05453 3.32251 2.42542 2.88881 2.66307 2.70367 3.56926 3.55776 3.05561 2.94165 2.49100 4.82300 2.98267 893 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 674 2.27001 2.12728 4.02694 3.49362 3.64156 3.56265 4.23013 2.48001 3.41007 2.71917 3.62651 3.69854 4.09879 3.66814 3.66667 2.16479 1.89792 2.68828 5.12137 3.92182 894 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 675 2.03926 4.25760 4.03068 3.46032 3.40790 3.00519 4.12726 2.36904 3.36737 2.18748 3.40056 3.72378 4.17172 3.61790 3.60582 2.68211 2.96344 1.66737 4.91281 3.71151 895 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 676 2.14790 4.37190 4.63065 4.05182 1.84163 4.12582 4.45324 2.44733 3.90785 1.52497 3.25278 4.19137 4.46641 4.07390 4.02268 3.44057 3.20480 2.03766 4.97331 3.77859 896 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 677 2.35838 4.13200 4.49426 3.89437 2.60467 3.87998 4.20572 2.19614 3.72271 2.29245 3.24018 3.97476 4.24367 3.89147 3.80264 3.18420 2.60451 1.61540 2.90534 3.57467 897 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 678 1.87173 4.33112 4.37109 3.82710 3.58105 3.92715 4.44177 1.45821 3.72088 2.52902 3.53359 4.01389 4.36366 3.96127 3.92180 2.73018 3.11503 1.77523 5.15933 3.96109 898 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 679 2.38839 4.30910 3.91411 3.36132 2.84839 3.67023 4.12344 2.80401 3.28730 2.59375 3.51062 3.64422 4.12191 3.55478 3.56384 2.49356 1.64417 2.01064 5.01007 3.80049 899 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 680 2.75600 3.18956 4.58245 3.98019 2.27070 3.91971 4.25121 2.23430 3.79852 1.56058 3.22869 4.03578 4.27903 3.95379 3.85780 2.73021 2.98909 2.06516 4.77805 3.59899 900 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 681 1.44056 4.43954 3.87281 3.41000 4.28369 3.32903 4.38300 3.60845 3.37417 3.35545 4.20810 3.60277 4.00872 3.66515 3.70622 1.41375 2.40551 2.52236 5.67126 4.45603 901 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 682 3.10108 3.22977 5.02237 4.44787 3.48052 4.39010 4.78569 1.25953 4.28978 1.93895 2.24055 4.52242 4.69529 4.43476 4.35095 3.72617 3.33831 1.76548 5.23060 4.07105 902 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 683 1.95265 4.33434 4.58382 4.01287 3.50317 4.13812 4.51990 1.80759 3.88819 1.84227 3.44222 4.18259 4.49063 4.10110 4.04371 3.45296 2.69951 1.60988 5.12827 3.93837 903 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 684 2.53154 4.47287 3.89598 3.65676 4.76880 3.24202 4.69399 4.18002 3.69388 3.89611 4.72284 3.71427 4.02858 3.98375 3.96505 0.68121 2.17802 3.56796 6.11201 4.91370 904 S - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 685 3.19884 4.54979 4.90781 4.36769 3.62895 4.46516 4.93249 0.89890 4.22144 2.23155 2.73828 4.54600 4.78990 4.44905 4.37489 3.81721 2.66840 1.98721 5.46001 4.29234 905 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 686 2.76621 2.39604 1.94835 2.55403 4.45100 3.46839 3.86601 3.89641 2.69787 3.47116 4.27093 2.01926 3.96293 3.01219 3.18040 2.38107 3.04846 3.50604 5.67667 4.31107 906 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 687 2.39568 4.20562 4.61866 4.02250 2.79055 3.99729 4.32630 1.47334 3.85162 1.99337 3.26090 4.09871 4.34794 4.01192 3.92463 3.30687 3.05345 1.98920 4.85143 2.94851 907 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 688 2.69131 4.56851 4.02053 3.83132 4.61834 0.63609 4.81469 3.85630 3.87846 3.71676 4.66452 3.87870 4.16292 4.16844 4.10918 2.89860 3.20277 2.46499 6.02454 4.82892 908 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 689 3.25348 4.54733 5.09233 4.56206 3.80468 4.63699 5.15019 1.69559 4.45324 2.09422 3.63166 4.72777 4.93506 4.68270 4.61067 3.99945 2.74788 0.87002 5.65391 4.45778 909 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 690 2.54420 4.38839 4.87113 4.28353 1.85262 4.26076 4.60491 1.78647 4.12100 1.60941 3.24926 4.37164 4.57336 4.25415 4.18460 3.58329 3.26952 1.97072 5.06142 3.90367 910 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 691 3.65477 5.31876 4.45227 4.44885 5.49090 0.18830 5.47752 5.29668 4.71199 4.84352 5.85673 4.61988 4.72158 4.98611 4.83170 3.85134 4.18147 4.70051 6.36868 5.62987 911 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 692 2.83620 4.24774 4.48001 3.90219 1.73322 3.05680 4.12737 2.28296 3.74412 1.90207 3.32314 3.99103 4.31343 3.90813 3.84464 3.25850 3.06744 2.47708 4.60622 2.38156 912 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 693 3.83712 5.09497 5.53021 4.97078 3.26048 5.12551 5.39617 2.49230 4.77518 0.75765 1.52804 5.21818 5.19637 4.76912 4.79757 4.52050 4.04585 2.74740 5.47592 4.48008 913 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 694 2.52970 4.47195 3.89201 3.63371 4.74561 3.24450 4.66926 4.15329 3.66345 3.86685 4.69244 3.70304 4.02481 3.95451 3.94204 0.74454 1.97292 3.55185 6.08807 4.88836 914 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 695 3.26073 4.59672 5.04192 4.46018 2.44083 4.44226 4.58651 2.59106 4.28579 1.05701 2.25407 4.52419 4.70278 4.33710 4.30860 3.76796 3.48048 2.66402 2.45108 3.60748 915 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 696 4.60015 5.70135 5.18632 5.07800 3.61537 4.55862 4.91285 4.72454 4.83605 3.98616 5.31461 5.12620 5.13290 5.18199 4.83325 4.79972 4.94243 4.62536 0.20872 3.59215 916 W - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 697 2.84425 5.06837 3.14473 2.67946 4.53754 1.44687 3.85904 3.96238 2.15360 3.50513 4.31286 3.16775 4.02346 2.99915 2.49262 2.33345 3.11112 3.57673 5.67106 4.35816 917 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 698 1.88546 4.51372 4.83867 4.33357 3.86005 4.34359 5.00209 1.82596 4.23430 2.54641 3.70861 4.49630 4.75677 4.49024 4.43053 3.71988 3.40855 0.96401 5.63778 4.42931 918 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 699 3.12859 5.71961 1.32275 2.37190 5.02754 3.49925 3.96481 4.55047 2.26311 4.01894 4.83234 1.64103 4.07861 3.11138 3.45089 3.02338 3.40057 4.10550 6.15738 4.66683 919 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 700 3.97504 5.27025 5.23043 4.91583 3.52610 4.80160 5.38331 2.79776 4.68798 0.35703 3.41971 5.13843 5.15337 4.88800 4.74037 4.52459 4.25279 2.99364 5.58771 4.44723 920 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 701 3.84202 5.92498 0.31501 2.98261 5.42650 3.84885 4.69222 5.19709 3.92147 4.69479 5.73047 3.55684 4.54494 3.96114 4.49158 3.75996 4.20651 4.77817 6.44211 5.24933 921 D - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 702 1.77961 4.47804 3.80275 3.52722 4.72517 3.24327 4.60157 4.15103 3.59670 3.83093 4.64199 3.64789 1.02040 3.87131 3.90479 2.11096 3.02840 3.55127 6.05563 4.85444 922 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 703 3.41975 4.65743 5.39392 4.88033 3.79902 4.90774 5.46424 0.98521 4.78204 2.25854 2.75029 5.03491 5.13927 4.96658 4.90529 4.29890 3.66872 1.26189 5.81339 4.65253 923 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 704 2.70392 4.42875 3.68421 3.13162 3.63961 3.65705 4.04106 2.51894 3.07167 2.67727 2.88129 3.50095 4.09186 3.37835 3.41047 1.65435 2.03665 2.68151 5.10280 3.87350 924 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 705 2.98569 4.45645 4.35777 3.78159 3.37188 4.10108 4.40401 2.15666 3.63560 2.08741 1.36519 4.04327 4.43561 2.99220 3.83887 3.39800 3.21760 2.14684 5.07092 3.90857 925 m - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 706 2.12479 3.23191 4.45636 3.88560 3.41324 3.89731 4.34112 1.54117 3.74775 2.43295 3.39968 4.00884 4.30686 3.94987 3.88500 2.64691 3.03849 1.80952 4.96555 3.77721 926 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 707 2.08107 3.52271 2.72132 2.65286 4.19616 3.48324 3.83657 3.61189 2.65693 3.22601 4.04071 2.69569 3.93829 2.99823 3.11064 2.40016 1.84925 3.26363 5.47365 4.15247 927 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 708 3.06830 4.40688 4.87618 4.30609 3.52365 4.34080 4.73339 1.37468 4.16676 2.03781 2.66776 4.42993 4.65790 4.34680 4.27438 3.66967 2.31086 1.58278 5.24146 4.06810 928 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 709 3.53123 4.75788 5.49119 4.97258 3.66810 5.01951 5.53428 0.97478 4.86873 1.43731 3.42753 5.14743 5.20032 4.99026 4.96360 4.41793 3.77338 1.67449 5.77745 4.67006 929 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 710 3.63316 4.91524 5.35603 4.78764 3.33016 4.93973 5.25155 1.97886 4.62478 1.47424 1.01590 5.01091 5.08074 4.67811 4.68850 4.30426 3.85147 2.48266 5.45813 4.42130 930 m - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 711 2.01594 2.67148 4.32802 3.98722 4.60431 3.21539 4.79198 3.97100 3.90996 3.72113 4.55260 3.84085 4.01033 4.14682 4.12033 0.75873 2.98681 3.40799 5.99684 4.84558 931 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 712 3.22604 4.62605 4.88842 4.46826 3.88845 4.40371 5.17530 0.72461 4.31628 2.45800 3.72246 4.61691 4.85074 4.62712 4.49514 3.83236 2.70376 1.93295 5.77731 4.56551 932 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 713 3.65477 5.31876 4.45227 4.44885 5.49090 0.18830 5.47752 5.29668 4.71199 4.84352 5.85673 4.61988 4.72158 4.98611 4.83170 3.85134 4.18147 4.70051 6.36868 5.62987 933 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 714 3.55726 5.04533 4.30557 3.99829 0.69272 4.31750 4.04747 3.40090 3.85118 2.73522 3.99092 4.14323 4.74053 2.79252 4.02869 3.75101 3.82422 3.34125 4.36565 2.70109 934 F - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 715 1.99535 2.80636 4.32147 3.98025 4.61503 3.21409 4.79112 3.98325 3.90450 3.73195 4.56171 3.83770 4.00935 4.14251 4.11749 0.74517 2.98688 3.41549 6.00502 4.85346 935 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 716 3.45874 4.68638 5.45115 4.99232 4.01567 4.99327 5.73679 1.39850 4.91377 2.45605 3.76694 5.15749 5.25656 5.17845 5.08871 4.42742 3.72728 0.71666 6.10447 4.88076 936 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 717 3.43610 6.12917 0.68496 1.86922 5.40510 3.51917 4.17580 4.99115 3.33589 4.45016 5.36161 2.97451 4.20657 3.36293 4.02533 3.26595 3.75367 4.52583 6.57485 4.99490 937 D - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 718 3.18436 4.52365 4.92092 4.37253 1.61323 4.32212 4.28768 1.90677 4.19361 1.61205 3.31870 4.36022 4.62659 4.26218 4.22004 3.64568 3.40959 2.62121 4.58237 2.21828 938 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 719 2.13125 4.53015 3.66993 3.23617 4.54108 3.29066 4.33026 3.96535 3.24257 3.61455 4.42015 3.49547 1.93194 3.54889 3.61885 1.40219 2.06978 3.44919 5.84925 4.60511 939 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 720 0.72995 4.40322 4.08671 3.78203 4.68437 3.22150 4.72144 4.05545 3.77699 3.78951 4.61018 3.75961 4.00798 4.03251 4.03314 2.11378 2.33602 3.47050 6.04801 4.88222 940 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 721 3.98544 5.59475 4.03439 3.89918 3.98413 4.18882 0.31035 4.80527 3.74020 4.18838 5.31854 4.26437 4.79289 4.28753 3.94247 4.06580 4.32980 4.52631 5.41954 3.92617 941 H - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 722 3.47461 4.69179 5.49165 5.03196 4.01539 5.03549 5.77774 0.93572 4.95958 2.44257 3.75939 5.19764 5.28210 5.21668 5.13034 4.47123 3.74033 1.06342 6.12084 4.90358 942 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 723 1.78507 4.51452 3.57947 3.05869 4.01540 2.77143 4.09007 2.70951 3.03267 3.08174 3.93960 3.41469 3.99996 3.34576 3.41461 1.82806 2.10532 3.06036 5.39991 4.15142 943 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 724 3.61736 4.95607 4.74445 4.31908 2.02063 4.49528 2.50960 2.60463 4.17681 2.96510 4.08274 4.23510 4.81846 4.23935 4.27819 3.81922 3.83815 3.32716 4.01628 0.88399 944 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 725 2.16018 5.06440 3.02623 2.51828 4.39107 2.51045 2.14614 3.83374 2.49685 3.38465 4.17330 2.64891 3.93628 2.88103 2.58554 2.75400 2.99361 3.46055 5.57242 4.21375 945 h - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 726 3.82827 5.04743 5.12870 4.78534 1.02955 4.70680 3.87280 2.54073 4.60032 2.77931 4.02461 4.46968 4.99775 4.51659 4.56647 4.06194 4.04578 3.32329 4.00716 1.29724 946 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 727 2.88454 4.32548 4.37733 3.82174 2.22590 3.96378 4.06056 2.74235 3.68634 2.47238 3.44034 3.94462 4.33258 3.86863 3.82856 2.61849 3.12023 1.74508 4.53345 1.77923 947 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 728 2.76051 5.04103 3.12054 2.55824 4.35130 3.55083 3.74003 3.77707 2.44041 3.33441 4.13073 3.07450 3.94859 2.00370 1.95012 2.36856 2.60316 2.95197 5.52650 4.18810 948 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 729 2.12789 5.03603 2.98300 2.28340 4.44246 3.47336 3.79818 3.89054 2.58891 3.44444 4.22838 2.26692 3.93125 2.92896 3.06709 1.79593 2.55863 3.49410 5.63576 4.26713 949 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 730 2.42294 5.17054 2.54290 2.21605 4.49626 3.03678 3.07473 3.96900 2.41929 3.46752 4.21672 2.95944 3.26296 2.77895 2.39291 2.38662 2.93784 3.55083 5.61486 3.27104 950 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 731 2.70361 4.75778 3.20386 2.41902 3.95919 2.34620 3.78476 2.82175 2.35085 2.68613 3.84058 3.14406 3.95750 2.97242 3.07051 2.40254 2.63446 3.06861 5.28804 3.23602 951 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.25227 4.51845 1.55090 0.61958 0.77255 0.48576 0.95510 732 2.75208 5.24422 2.09523 2.31418 4.56225 3.40442 3.00903 4.04705 2.48062 3.54038 4.30602 2.36009 3.86067 2.37285 2.98686 2.12795 2.99411 3.62464 5.68727 4.26560 952 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.18652 4.28682 1.85528 0.61958 0.77255 0.79340 0.60204 733 2.60399 4.65151 2.69117 2.22731 3.84316 3.45836 3.68172 3.24073 2.53062 2.41885 3.73560 3.03423 3.85286 2.87351 2.96889 2.68405 2.45781 2.95829 3.59898 3.87364 953 e - - 2.68632 4.42239 2.77533 2.73137 3.46367 2.40505 3.72508 3.29368 2.67754 2.69368 4.24569 2.90360 2.73701 3.18125 2.89814 2.37845 2.77533 2.98532 4.58491 3.61517 0.39119 1.15234 4.84696 0.90927 0.51553 0.28174 1.40434 734 2.78773 5.20163 1.97990 2.44535 4.57931 3.47535 3.78462 4.05060 2.58282 3.56703 4.33712 2.52601 3.01150 2.90534 3.08292 2.32519 1.96965 3.63168 5.73036 4.32775 958 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 735 1.99216 4.52345 3.53890 3.01003 3.93464 3.49278 4.03931 2.66893 2.98109 2.99661 3.86271 3.39068 2.00083 3.29851 3.36496 2.35661 2.22040 2.99031 5.32770 4.07687 959 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 736 2.29015 5.14029 2.42982 2.42788 3.25068 3.49014 3.02715 3.91963 2.21509 3.43217 4.18943 2.97044 3.88371 2.50951 2.57409 2.39053 2.93748 3.51458 5.59117 4.19990 960 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 737 2.41194 5.22443 2.50758 1.90072 4.56387 3.02870 3.67950 4.04731 2.23811 3.52691 4.26803 2.94881 3.88229 2.48171 2.56628 2.38382 2.95455 3.61233 5.65916 4.24896 961 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 738 3.90999 5.60678 4.47844 3.90600 5.14021 4.20729 4.52167 4.77476 2.79437 4.17038 5.18945 4.19692 4.71180 3.74286 0.32880 3.98775 4.15297 4.47764 5.97686 4.97290 962 R - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 739 2.44661 2.91456 4.81556 4.23969 3.48185 4.20900 4.60666 1.93352 4.08479 1.66185 3.42056 4.32549 4.55149 4.26235 4.17295 3.53606 3.20758 1.39048 5.12675 3.94352 963 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 740 2.03259 4.55726 3.40750 2.84221 3.71711 3.63508 3.86676 2.67818 2.52536 2.77830 3.65314 3.29377 4.01768 2.68842 2.76409 2.86632 2.93823 2.17299 5.11922 3.14903 964 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 741 2.40886 5.17346 2.13924 2.23780 4.49700 2.95790 3.68323 3.96862 2.43132 3.47003 3.29705 2.58480 3.88410 2.78815 2.63789 2.42659 2.94642 3.55289 5.62009 4.22098 965 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 742 1.01116 2.73688 4.21772 3.79936 4.35724 3.26494 4.61941 3.72515 3.72808 3.45865 4.30673 3.77605 4.01260 3.97427 3.97546 1.89781 2.30001 3.25929 5.76779 4.59657 966 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 743 3.80769 5.04039 5.63134 5.05036 3.27491 5.16405 5.44591 2.02693 4.90795 0.70964 1.95460 5.27720 5.20768 4.82560 4.89583 4.54429 4.01098 2.64166 5.49365 4.53415 967 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 744 2.23407 5.19487 2.88235 1.61326 4.54345 2.91436 3.75419 4.00966 2.29115 3.52502 4.29375 2.98833 3.92813 2.87153 3.01488 2.18415 3.02144 3.59968 5.68679 4.29100 968 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 745 1.88751 5.02845 3.02586 2.26722 4.35489 3.50294 3.74894 3.79289 2.19532 3.35386 4.14230 3.03673 3.92219 2.87859 2.98412 2.19575 2.29044 3.42211 5.55327 4.19311 969 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 746 3.47241 4.73155 5.40187 4.84053 3.45737 4.85074 5.24868 1.54203 4.70992 1.14050 2.58220 4.98202 5.03852 4.76280 4.75015 4.21597 3.70095 1.61477 5.49882 4.43092 970 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 747 1.33784 4.48345 3.97922 3.82493 4.92404 0.91151 4.86516 4.34410 3.96337 4.06262 4.87933 3.80813 4.06082 4.18759 4.20072 2.75116 3.09815 3.66837 6.24502 5.10771 971 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 748 3.56482 4.85979 5.01152 4.56755 1.54783 4.55631 4.02639 3.09218 4.37810 2.40379 2.70020 4.42532 4.85061 4.39086 4.39672 3.89713 3.78644 3.07512 1.27536 2.55954 972 w - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 749 3.82761 5.42446 4.50452 4.46194 5.33326 4.07855 5.43868 5.10776 4.58651 4.63167 5.73648 4.68720 0.19352 4.94902 4.71504 4.02418 4.32233 4.66624 6.28610 5.47539 973 P - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 750 2.49100 4.41533 4.93253 4.35949 3.49065 4.35954 4.74896 1.68754 4.21284 1.80559 2.36882 4.46511 4.67007 4.37514 4.30060 3.69053 3.32149 1.40740 5.22731 4.06334 974 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 751 2.75580 3.18288 4.59980 3.99747 2.07966 3.92441 4.25887 2.21598 3.81332 1.85919 3.23948 4.04577 4.28419 3.96792 3.86829 2.78869 2.98924 1.81374 4.78285 3.60234 975 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 752 2.81836 5.18505 2.99278 2.02402 4.46871 3.55122 2.87342 3.93432 2.44570 2.81791 4.24495 3.03886 3.96261 1.62320 2.87453 2.79966 3.04654 3.55773 5.61159 4.24377 976 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 753 1.09181 2.89408 4.35390 4.02521 4.61672 1.36043 4.81746 3.99064 3.95808 3.73437 4.56304 3.85645 4.01270 4.18109 4.15900 2.67968 2.98966 3.41984 6.00775 4.86705 977 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 754 1.11452 4.43665 3.94618 3.65301 4.80685 1.73458 4.68300 4.25749 3.71216 3.92393 4.71219 3.69704 3.99330 3.95852 4.00847 1.67803 3.00381 3.59213 6.13010 4.95048 978 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 755 2.75162 4.34932 3.93979 3.38078 3.46606 3.76821 4.13393 2.74429 3.28218 1.45524 2.89852 3.68387 4.17773 3.56446 3.55167 2.04358 2.58019 2.56378 4.99423 3.79061 979 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 756 2.77421 4.67983 3.93535 3.83128 4.82667 3.40559 4.89032 4.46676 3.95570 4.14719 5.04123 3.90373 4.20415 4.25205 4.18130 0.42540 3.30914 3.84228 6.14643 4.93099 980 S - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 757 2.92545 4.75710 4.18839 4.03039 4.72858 3.56152 4.97308 3.95426 3.98960 3.78848 4.82650 4.08417 4.32868 4.35465 4.18008 3.13762 0.42597 3.56248 6.09005 4.95756 981 T - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 758 2.91134 4.28449 4.69241 4.10807 2.76756 4.11758 4.47105 1.36426 3.95204 2.03424 3.34105 4.20917 4.46068 4.12593 4.04568 2.74838 3.14767 1.72068 5.00214 3.81662 982 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 759 2.61257 4.71910 4.96588 4.42782 3.42544 4.54982 4.97569 2.05964 4.27192 0.76614 3.24139 4.63162 4.83990 4.44114 4.40193 3.90824 3.59669 2.34249 5.39733 4.29377 983 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 760 1.95990 1.82585 4.14412 3.65140 2.91307 1.84383 4.35360 3.09433 3.56528 2.85565 3.76048 3.76237 4.08523 3.80791 3.79498 2.86032 2.96607 2.81279 5.23800 4.03758 984 c - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 761 3.40724 4.64509 5.38623 4.87375 3.81973 4.89778 5.46000 1.21662 4.77673 2.29365 2.75816 5.02532 5.13451 4.96894 4.90306 4.28856 3.65696 1.01184 5.82114 4.65219 985 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 762 2.72770 3.09563 4.49438 3.89345 2.33808 3.87707 4.20261 2.52290 3.72115 1.71625 2.69816 3.97321 4.24019 3.88709 3.79927 2.41578 2.96047 2.11803 4.75346 3.57326 986 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 763 2.71698 3.30979 4.16295 3.58170 3.32865 3.81149 4.14189 2.29215 3.46711 2.12304 3.33125 3.79738 2.78482 3.69439 3.65945 2.29062 2.95602 1.76844 4.84334 3.64959 987 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 764 3.89370 5.14250 5.56945 5.02144 3.26603 5.18561 5.45542 2.49021 4.81136 0.50467 2.42306 5.28111 5.24126 4.80904 4.83344 4.59673 4.10347 2.75245 5.50558 4.50664 988 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 765 2.11512 4.14177 4.42241 3.82433 2.69989 3.86415 4.18226 2.27141 3.66452 1.72769 2.78991 3.93446 4.22702 3.84215 3.76530 3.16391 2.51370 2.36742 4.75770 2.91895 989 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 766 2.76711 4.31248 3.21308 3.41590 1.62953 3.82691 4.10331 2.68763 3.33217 2.09719 2.82045 3.71204 4.19601 3.58493 3.58537 3.10294 2.57396 2.51626 4.88327 3.65771 990 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 767 3.07694 4.47258 4.63646 4.12454 3.73771 4.29334 4.77752 1.62477 4.00958 2.52592 3.63868 3.16518 4.66781 4.28357 4.21112 3.64145 3.33930 0.94571 5.44022 4.21836 991 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 768 2.95016 5.40387 1.51052 2.42158 4.79142 3.47740 3.90479 4.27975 2.78706 3.78939 4.58285 2.43231 1.99301 3.04339 3.32014 2.89723 2.68868 3.84795 5.95182 4.51282 992 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 769 2.02786 4.47293 3.65550 3.14090 3.91227 3.48945 4.12115 3.23860 3.09928 2.10396 3.85414 3.47619 4.03341 3.41134 3.45531 1.62607 2.21054 2.94523 5.32946 4.09351 993 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 770 3.03084 4.87413 3.42279 3.11891 3.17834 3.75476 3.95821 3.60695 3.17667 3.20213 4.15828 2.64535 4.26638 3.50197 3.51961 2.52877 3.32834 3.33952 4.75087 1.03998 994 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 771 2.19392 4.47036 4.61953 4.06470 3.46993 4.19919 4.62250 1.78226 3.92671 2.15246 1.44318 4.25708 4.55906 4.14375 4.09149 3.53008 3.29793 2.23079 5.21255 4.05180 995 m - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 772 2.06927 4.33134 4.42854 3.88457 3.58024 3.09357 4.47542 1.67804 3.77586 2.51934 3.52980 4.06106 4.39652 4.01050 3.96532 3.30493 3.13266 1.37632 5.16795 3.97042 996 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 773 2.71646 4.70215 3.27633 2.20244 3.88739 3.59852 3.81111 3.27435 2.66073 2.24866 3.78755 3.19609 3.98357 2.32272 2.69597 2.81914 2.94649 2.41136 3.70906 3.95295 997 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 774 2.98944 3.13762 4.86261 4.29008 3.52409 4.25339 4.65929 1.66276 4.13668 2.39423 2.78895 4.37268 4.59139 4.31780 4.22418 3.58344 2.72421 1.18722 5.17475 3.98724 998 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 775 4.21157 5.42970 5.14760 5.01949 0.35538 4.65995 4.34256 3.71467 4.92675 2.94767 4.36476 4.82028 5.13107 4.92378 4.88460 4.41675 4.52632 3.74562 4.47273 2.78934 999 F - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 776 1.87716 4.35345 4.48212 3.94425 1.75572 3.96620 4.42790 2.45428 3.82251 2.37323 3.44916 4.08272 4.39443 4.02913 3.98117 3.30681 3.15605 1.64674 5.02947 3.77590 1000 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 777 3.52000 5.58320 3.99663 3.23490 5.15070 4.05397 3.90432 4.45807 0.68201 3.81973 4.71050 3.58566 4.40429 3.03479 1.93074 3.49876 3.65038 4.14310 5.78260 4.68456 1001 K - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 778 2.57903 2.72578 4.44561 4.10677 4.38269 3.35002 4.81989 3.49521 3.95585 3.41862 4.36384 3.96062 4.11768 4.23090 4.12742 2.82211 0.69739 3.11461 5.85040 4.68672 1002 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 779 2.93028 4.31419 4.65557 4.07898 3.43943 4.13277 4.50845 1.59865 3.93238 2.31697 2.07072 4.20952 4.48198 4.12671 4.05264 2.80207 3.17082 1.55035 5.07144 3.88927 1003 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 780 2.73182 4.12832 4.53834 3.93555 2.34549 3.88592 4.20053 2.28125 3.75423 1.86963 3.22056 3.99362 4.24723 3.91113 3.81659 2.58535 2.96383 1.76385 3.34490 3.53484 1004 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 781 3.97504 5.27025 5.23043 4.91583 3.52610 4.80160 5.38331 2.79776 4.68798 0.35703 3.41971 5.13843 5.15337 4.88800 4.74037 4.52459 4.25279 2.99364 5.58771 4.44723 1005 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 782 2.67963 2.91144 4.43550 3.93361 3.68511 3.64253 4.48666 2.66953 3.80448 2.70227 3.66094 3.96977 4.21911 4.02432 3.96525 2.55005 2.47107 1.07085 5.22267 4.03831 1006 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 783 3.13526 4.45133 4.99677 4.43349 3.57270 4.44559 4.85970 1.65404 4.29613 1.91148 2.71890 4.54935 4.74877 4.47046 4.39560 3.78386 2.76416 1.16848 5.33604 4.16579 1007 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 784 2.40281 4.34100 3.73216 3.16344 3.47743 3.04762 3.99482 2.39156 3.10240 2.28180 3.45892 2.86964 4.09395 3.38644 3.41607 2.64093 2.61169 1.91337 4.94612 3.72681 1008 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 785 3.16808 4.50735 4.97194 4.39070 2.60449 4.40772 4.74624 1.39713 4.23673 1.31927 3.22177 4.50729 4.69187 4.35547 4.30598 3.73657 2.71861 2.26581 5.16107 4.01873 1009 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 786 2.46148 2.64317 4.32457 4.04729 4.71679 0.80645 4.86298 4.14676 3.99835 3.86059 4.67315 3.86053 4.01178 4.22326 4.18995 2.06093 3.00054 3.51309 6.09209 4.95328 1010 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 787 2.08298 4.19881 4.23627 3.64889 2.77869 3.84930 4.15599 2.25827 3.52349 1.66974 2.73386 2.98929 4.21397 3.73604 3.69209 3.13892 2.96835 2.40561 4.81345 3.62518 1011 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 788 3.05529 4.40568 4.92660 4.32679 2.62579 4.25072 4.53786 1.94257 4.14289 1.17623 3.13380 4.37782 4.55095 4.23156 4.16547 3.57107 3.28123 2.12272 2.99886 3.76073 1012 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 789 3.98544 5.59475 4.03439 3.89918 3.98413 4.18882 0.31035 4.80527 3.74020 4.18838 5.31854 4.26437 4.79289 4.28753 3.94247 4.06580 4.32980 4.52631 5.41954 3.92617 1013 H - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 790 1.91211 4.52752 3.92595 3.82280 4.98415 0.63578 4.90556 4.41227 4.01378 4.13513 4.96305 3.82652 4.09256 4.23605 4.24306 2.79596 3.14952 3.72735 6.29043 5.16207 1014 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 791 3.84943 5.07544 5.65631 5.07877 3.27826 5.21563 5.49245 2.09040 4.93438 0.59051 2.37854 5.32242 5.24110 4.84995 4.92538 4.60230 4.05166 2.64772 5.51833 4.56410 1015 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 792 3.23570 4.54665 5.15380 4.56544 2.00481 4.50480 4.84916 1.59973 4.39930 1.65237 2.43294 4.64414 4.76320 4.47037 4.42116 3.84138 3.46263 1.77247 5.19598 4.08558 1016 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 793 3.36019 4.65230 5.24136 4.67103 1.52330 4.65918 4.96947 1.58791 4.52207 1.59215 3.21499 4.77631 4.88974 4.58584 4.55848 4.00645 3.58767 1.94016 5.26788 4.10550 1017 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 794 3.67128 4.92003 5.52562 4.94963 3.32566 5.02787 5.35391 1.99576 4.81834 0.72941 2.42768 5.14479 5.13202 4.78332 4.82828 4.39787 3.88441 2.13549 5.48310 4.49005 1018 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 795 3.82761 5.42446 4.50452 4.46194 5.33326 4.07855 5.43868 5.10776 4.58651 4.63167 5.73648 4.68720 0.19352 4.94902 4.71504 4.02418 4.32233 4.66624 6.28610 5.47539 1019 P - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 796 1.94708 4.52351 4.98978 4.47536 3.84964 4.49765 5.09697 1.21062 4.37462 2.50931 3.68709 4.63032 4.85698 4.61649 4.54802 3.86967 3.45782 1.31947 5.66004 4.45406 1020 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 797 3.56586 4.83043 5.42753 4.86163 1.85987 4.87395 5.09802 1.37060 4.71362 1.20524 3.12690 4.98373 5.03428 4.70120 4.71746 4.23452 3.78364 2.45801 5.27856 4.10729 1021 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 798 3.68607 4.95366 5.45100 4.89103 2.49300 4.97517 5.18718 2.44609 4.75141 0.64523 3.07676 5.06624 5.10127 4.72077 4.76751 4.34431 3.90091 2.19009 5.32566 4.18584 1022 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 799 2.15257 3.37345 3.87250 3.29692 3.39462 3.74610 4.03172 2.38507 3.21610 2.25664 2.79600 3.61137 4.12271 3.48229 2.92580 2.07529 2.93352 2.53116 4.88021 3.67221 1023 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 800 2.43997 4.29349 3.84355 3.26864 3.41187 3.74632 4.02526 2.47441 2.67985 1.69341 2.73138 3.59490 4.12156 3.46142 3.46762 2.62775 2.60854 2.54133 4.89592 3.68595 1024 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 801 2.75240 2.97594 4.50933 3.91524 1.80961 3.89575 4.22992 2.51182 3.74602 1.82483 3.25504 3.99631 4.26577 3.91485 3.83010 2.75459 2.98991 2.06515 4.77737 3.57880 1025 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 802 2.42553 4.77476 2.41057 2.63741 3.99989 3.04533 3.78814 2.76936 2.62844 3.03746 3.87399 3.13645 3.17670 2.96948 3.07465 2.47912 2.63470 2.42558 5.31965 4.01284 1026 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01633 4.51845 5.24079 0.61958 0.77255 0.48576 0.95510 803 2.47255 5.09466 2.69631 2.44832 4.39714 3.49644 3.69180 3.85132 2.23895 3.38336 4.15169 2.98685 3.04129 2.80590 2.36260 2.39483 2.35439 2.94849 5.55924 4.17890 1027 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01102 4.51314 * 0.61958 0.77255 0.00000 * // hmmer-3.1b2/testsuite/i5-hmmbuild-naming.pl0000775361611702660230000000566612473612615020263 0ustar wheelerteddy#! /usr/bin/perl # Test that HMM naming in hmmbuild works as advertised. # Written to test for #h50. # SRE, Tue Apr 28 14:00:51 2009 # # Usage: ./i5-hmmbuild-naming.pl # Example: ./i5-hmmbuild-naming.pl .. .. tmpfoo $builddir = shift; $srcdir = shift; $tmppfx = shift; if (! -x "$builddir/src/hmmbuild") { print "FAIL: didn't find hmmbuild binary $builddir/src/hmmbuild\n"; exit 1; } if (! -r "$srcdir/testsuite/20aa.sto") { print "FAIL: didn't find $srcdir/testsuite/20aa.sto\n"; exit 1; } if (! -r "$srcdir/tutorial/fn3.sto") { print "FAIL: didn't find $srcdir/tutorial/globins4.sto\n"; exit 1; } if (! -r "$srcdir/tutorial/globins4.sto") { print "FAIL: didn't find $srcdir/tutorial/globins4.sto\n"; exit 1; } system("$builddir/src/hmmbuild $tmppfx.hmm $srcdir/testsuite/20aa.sto > /dev/null"); if ($? != 0) { print "FAIL: hmmbuild failed unexpectedly\n"; exit 1; } $name = `cat $tmppfx.hmm | grep "^NAME"`; if ($name !~ /^NAME \s*test/) { print "FAIL: default naming by MSA name fails\n"; exit 1; } system("$builddir/src/hmmbuild $tmppfx.hmm $srcdir/tutorial/globins4.sto > /dev/null"); if ($? != 0) { print "FAIL: hmmbuild failed unexpectedly\n"; exit 1; } $name = `cat $tmppfx.hmm | grep "^NAME"`; if ($name !~ /^NAME \s*globins4/) { print "FAIL: naming using file name fails\n"; exit 1; } system("$builddir/src/hmmbuild -n myname $tmppfx.hmm $srcdir/tutorial/fn3.sto > /dev/null"); if ($? != 0) { print "FAIL: hmmbuild failed unexpectedly\n"; exit 1; } $name = `cat $tmppfx.hmm | grep "^NAME"`; if ($name !~ /^NAME \s*myname/) { print "FAIL: naming using -n fails\n"; exit 1; } # >1 alignment in file; both have MSA names. # default will work; -n will fail. # system("cat $srcdir/testsuite/20aa.sto $srcdir/tutorial/fn3.sto > $tmppfx.sto"); system("$builddir/src/hmmbuild $tmppfx.hmm $tmppfx.sto > /dev/null"); if ($? != 0) { print "FAIL: hmmbuild failed on multi MSA file\n"; exit 1; } system("$builddir/src/hmmbuild -n myname $tmppfx.hmm $tmppfx.sto > /dev/null 2>&1"); if ($? == 0) { print "FAIL: hmmbuild -n should have failed\n"; exit 1; } # >1 alignment in file; first or second one lacks MSA name. # default will fail. # system("cat $srcdir/testsuite/20aa.sto $srcdir/tutorial/globins4.sto > $tmppfx.sto"); system("$builddir/src/hmmbuild $tmppfx.hmm $tmppfx.sto > /dev/null 2>&1"); if ($? == 0) { print "FAIL: hmmbuild should have failed\n"; exit 1; } system("cat $srcdir/tutorial/globins4.sto $srcdir/testsuite/20aa.sto > $tmppfx.sto"); system("$builddir/src/hmmbuild $tmppfx.hmm $tmppfx.sto > /dev/null 2>&1"); if ($? == 0) { print "FAIL: hmmbuild should have failed\n"; exit 1; } print "ok\n"; unlink "$tmppfx.hmm"; unlink "$tmppfx.sto"; exit 0; hmmer-3.1b2/testsuite/Patched.sto0000664361611702660230000003205112473612615016423 0ustar wheelerteddy# STOCKHOLM 1.0 #=GF ID Patched #=GF AC PF02460.9 #=GF DE Patched family #=GF AU Bateman A #=GF SE Pfam-B_2400 (release 5.4) #=GF GA -436.30 -436.30; 12.00 12.00; #=GF TC -435.20 -435.20; 13.60 12.20; #=GF NC -436.40 -436.40; 10.70 11.80; #=GF TP Family #=GF BM hmmbuild -F HMM_ls SEED #=GF BM hmmcalibrate --seed 0 HMM_ls #=GF BM hmmbuild -f -F HMM_fs SEED #=GF BM hmmcalibrate --seed 0 HMM_fs #=GF AM globalfirst #=GF DC The following Pfam-B families contain sequences that according to Prodom #=GF DC are members of this Pfam-A family. #=GF DR PFAMB; PB001629; #=GF DR PFAMB; PB017440; #=GF DR PFAMB; PB019530; #=GF DR PFAMB; PB020178; #=GF DR PFAMB; PB021972; #=GF DR PFAMB; PB024879; #=GF DR PFAMB; PB029400; #=GF DR PFAMB; PB038755; #=GF DR PFAMB; PB050356; #=GF DR PFAMB; PB051598; #=GF DR PFAMB; PB055718; #=GF DR PFAMB; PB080128; #=GF DR PFAMB; PB087060; #=GF DR PFAMB; PB152475; #=GF DR PFAMB; PB170445; #=GF DR PFAMB; PB177902; #=GF DR PFAMB; PB179724; #=GF DR PFAMB; PB182635; #=GF DR INTERPRO; IPR003392; #=GF CC The transmembrane protein Patched Swiss:P18502 is a receptor #=GF CC for the morphogene Sonic Hedgehog. This protein associates with #=GF CC the smoothened protein to transduce hedgehog signals. #=GF SQ 10 #=GS Q09938_CAEEL/52-945 AC Q09938.2 #=GS P91129_CAEEL/47-858 AC P91129.1 #=GS Q19945_CAEEL/49-901 AC Q19945.2 #=GS Q18129_CAEEL/47-926 AC Q18129.1 #=GS O61894_CAEEL/44-830 AC O61894.1 #=GS O16307_CAEEL/1-766 AC O16307.1 #=GS O16530_CAEEL/48-891 AC O16530.2 #=GS Q21883_CAEEL/44-838 AC Q21883.1 #=GS O02246_CAEEL/64-939 AC O02246.2 #=GS O44978_CAEEL/31-791 AC O44978.1 Q09938_CAEEL/52-945 LTLLDARKLYTPVSAP.SWKEEQVFSELWPVKSYEFLPERTFQWNRY..LYLVVHGRPYENGTYPNILEGSYLNDIAKIEEELVTNVSFPREAALEDNPALMRKRHLNETEIEENRN...ITITFKDVCMNW.YGDCYREKNVI................ELLKRRHELNKRGISVTFPQVNQEGTPIYIAFVIGGVDTYP...............................NDTIKYARAMRLWYFLKFDDEEQEQLAKFWEDTAEKFVRETYADH.PTIQCHIKHSRIVDQGLTRNANRLKPYFNVTIAVLVLFTAFYSVKWYFRMDHSWPLHIDWLRSKPMLALGGVLSSVLAILSGIGLLLWFGMFFAEITLIAPFLVL.SIGVDDMFIAVAAWHNTEMKYP..GRSPKV...MKKRMIEAMSESAVAIFITSFTDVLSFGAGTITDIIAVQGFCAMTAACMFFTFLYQITFFAALMVISAKAQMSGRNSCMPC.......IT.................AGDIYTIEDGSLQP.....NLKKKKSKSRKDAKAEKEKKDEAKNDKNMEIEENAENAEKSSYDSSPDPSQIHIP..VKSRGAMGHFFRDYYVPWLLNWKTKLFMFVTFIIYLGISVYGICVMEQGLDYDKLLLHSDPLVEALK.REIELFHGGDQIEIAIQNCPNITI.AESRDRIELVAQEFENISYSLGG....KGTSFWMREYKK.Y..S...NLTGSYLNDNRE................SW.IVGVYEWSQLFAFYKL.WSQDFVWA...NESDYDTLELKSYRFRIG..VHRLSTPTDLVLITEELRGVADRHPD..LNIVTYQQSRAIADQLNVILSSTITNDTLAMFCMFCVALIFIPNPICALFITFAMVTIDIGVIGFLSLWSVKLDPISMITIIMSIGFSIEFSAHITHGFVSNDSNL....SAFDRCVDAMEKLAWPVVHGSLSTILGVFVLAFIDSYMVLVFFKTISLVLIIGAWHALMLLPILLSMCIP P91129_CAEEL/47-858 NPLSDAVYLFTPLGAQ.SKMERMSIHEKWPLTDNNYIPGRAVTQSRE..IQVTALARND.....SNILDPKFANAVYQLDKYIQTRV.......................RVLHNG....HYYSYKNLCLQYKNGGCPSNKHV.................HILSDLHN...HGFNITYPYFRFGSEGGYIGSSLGGVTVMKGEN...........................ETDILASAKAWFMIYHLKFHPEEMSYISGEWELELGRMLTQYPEDP..YISITYFHSQTLADELKRNADTLIPRFIISITLLIVFSTLCSL..SFID...GSFSIDWVLSKPILSILGVVSAGIAILTGVGFLSLMGMPYNDIVGVMPFLVL.AVGVDNMFLMVAAVRRTSRTHT...........VHERMGECLADAAVSILITSSTDVLSFGVGAITTIPAVQIFCVYTGVAIFFAFIYQITFFAACLALAMKHEASGRNSLFLI...EAVSAEK..KTSLSTF...........QRLFNLGSVP..................................................DHSASHDVKQ.PLTS.....RFFGEWYAPVLMHPVVRGIAMVWFVIYLLGASYGCSRIKEGLEPVNLLVEDSYAIPHYRLLEKYFWKYGQQVQIVINNAPDLRN.HTSRDRVHAMVLDFATSKHAIGM....ESVQFWLFEMER.YYQ......KELEVQIID.................SS.FYGLLHHFLASKTNNP.LAEDIYWGP..MPDDDNGTMVKSFRFILG..MKDLVTTMDQTDATMSFREVAARWPE..FNVTTFMPIWMFTDQYIIIIPNTVQNIIIALLVMIVIAVLFIPQPMCSLWVALACASIDFGVIGYMTLWGVNLDAISMITIIMSIGFSVDYSAHIAYGYVVSRED.....TAAGRVKEALSALGWPLSQGAMSTIIAVSVLADIPAYMIVTFFKTVVLSISLGLLHGLVFLPVLLSIFVR Q19945_CAEEL/49-901 LRVDDPSYVFTPSDAR.WRREISVFNENWPLDENKFLPGKSFEAKRFVNILIRAKDGGS.......IMRDNVLHEIEILNQWIMNNI.......................SIPTDD..LKFNLTYQDLCLSY.DWVCGANEHIQML...............LRRNDVN...QILDLHFPRGGTKDTPVYLGGIFGDVQFFQ...............................NGTLSDAKLTQLFYFLKQDQKMVEEYSSKFSYALETFLNQVYSSD..VITLSFAHYQSLEDGLDENAKAFVPNFVVSFFVLAMYALVSSF..TLKS..SSATKIDWISSKPWLAAAGMFSTVLSIISAFGFLFILGVRYNVINTIIPFLII.AIGIDDMFLMNACWDQTSKSLS...........VPERMSKTLSHAGVAVTITNVTDVMSFAIGCITDLPGIQFFCIYACVSVAFSYFYQLTFFSGAMAIMGEVEREKRHCLFFYRTFQLVDISKMNEEADSKL...........QQIKSRSASP.APFNYLSSSNSSFSSDSDSF........SSKKTIPAEFAWKEQQSPNSSLSKKSKDREEKDRIV.....HFIGKIYGPFILSNSVRIFSGLIFVVYLAIAMYGCYNFREGLNPGNLVTNDHYIAKYFSDI.KHFWRIGAQLHVAVLNPPNLTI.SENRNELLKVVSAFENTQYTLGR....EGTVFFLLEYLNYL..S...ELNAEVEDTER.................LW..KTKLNSWLKYTGGSTQWASNLKIN.......KTDGSFQAFRFQIA..LKNFVEPNDHKHAAQLLRDIAD.HQP..FNVVVYHEAFPFADQYLIILPATIQNVVISLLCMAVVSFLLVPSLPSGFVIFVSIVSINIGVFGYMTLWGVNLDAVSMISIIMSIGFAVDLSAHIIYAFVTSHG......DTKQRVIGALETLGWPIFQGASSTIAGISILYTVDAYIILVFFKTIWLTMLIGAIHGLFFIPIFLSLFPV Q18129_CAEEL/47-926 QTTNDPQYVFSPANAP.WRYERAVLTEHWPLDEEKFWPGKSYDLHGY..VDVIASGRIHPDYGRPNILNIRYLDEVARINDYIIHNL.......................TVPVDINGKHYDIAYTDLCMRY.DWACYLNDHITMLMPKTRWGNFSGPFAELASDIIN...TQVNITYPIGWRGTEPIYFGALVGAPNLVD..............................EEGHFDYASAIRLTYNTR..EGKVDQYGIEWRRKLSMWLTDKENPVSELLEFGVNHNMTLPEGLQDVADTLAPKFVGTCAILFTFSFLVSV..VLRKHRTGQVMPDWVRSKPLVAAAGLMTPIMATVTSFGLILWCGFLYNAIVNVSPFLIL.CIGIDDLFIMCAEWHRTNPQHS...........PEKRIGKTLSEAAVAISITSLTDIATFAMGCYTTLPGVQMFCMYTCVQCFFCYVYQIIFLGPVLAYAAEMEQNGQHVLLIR...KAVDPDK..TESPVKLWLLSGSVNRQDQEARRRNSRKVAPVEKEGEKKSKF......................GEVVEKLEHTLEKHDDDPGHNSEE.TLVS.....KVFREIIGPFILQKSTQVCALLLYLVYISLAIGGCLNIKEGLDPKLLVRESFYLSKFYEIIDETFWREGLQMQVVVNNPPDLFT.PETRKGFDEMMAEFENTQYTMHP....NATMIWLRAYEHHLET......EVHELNIEKPNST............VEW.YTRCRDWLIVAGGRRL.WQMDMVWAN...TTFEETPRITAFRFQLG..LRNYRTPTDHTHSCKLMRSIADKYSM..FNVTTFHEYYPFADQYLELTPSLFQNMISDLCTIFAVSWVMIPELICAVAIVLSIASINVGVLGFMSFWGVNLDSVSIITVIMCIGFSVDLSAHIAYAFSQSYG......NSHARAVAALETLGWPVFLGASSTVLGILLLTLVDSYIVQIFFKTVFLVINFSILHGLIFLPIFLMKVVR O61894_CAEEL/44-830 IFSFGILNMRTEDDLR.FLYSPEHSLSREEYQVHKDFSGDSKNNSFV..SITIQTSSED.....KNLLKKDLAQKLIQLNKYVLEKM.......................EIQVDG...KIINFGKEVCSRMKQCELSNTIATIFLDT...........FWSEKLRKD...PRIKIEYPTMKFFDNKFFLPTHFYGVQPGG..............................PLGIESIDMVHFVYQIPAYNEHTSEEMSKIFEQSLTALLENQTTFD.....TSMFSLSILKDEMQKNSTYTMPFISLTILLLLCFTVASCM..TDNW..........VTSKPIEAMIGILVSSMAIVSAGGLLFALGVPFINQVTVMPFIAL.AIGVDDVYVMLGAWQDTRRTLD...........AKKRMGLALEEAGSAITVTSLTSVLSFGIGTYSTTPAIAIFCKFIALAIMFDWFYQLTFFAAVMAMGAKREAAGYHCVFVW..............................KRCDREEIAK....................................................AKNENAIS..PTR.....YFFENIFAPFICRPSVRFCMLNLYVVYIAIAFYGCSQLTPNLTPSQLVVDDSPLVPYLNLAEKKIWAEGLIGRIYVNNAPDFSKNPEMVDRMLQMVNELESTPYSMGP....NSTNFWLNEFN..NYR......QFFFQEDAK....................FYETLKSFLKVSFNSH.WETDLVWDT.PDKSSKGGTKVEKFVFTTA...FKISNWNIRTSLLLTWRNITSSYPE..FDALVFDENNFYSDQMLELQSTILSSLGTAIILLSAICIMFIAESYIVFWVVCTLISMDIGTAGLLSLWGADLDPMTVVNILMSIGQCIDFATHVGIRIYRSEYS.....DPDERIRDAMGAIGWPVVQAGTSTLLAIVVMLMVPSSAVRMFARTSVLVVGTGFFHGLIILPIIVRSFAT O16307_CAEEL/1-766 MDNLLRRDYLDGVD...SLAEYLQYNFTVPCS.G..VRGENKLECSF..SDLCSGQCND.........NQKYLNKLRSNNEKNLQ.........................VIPLFN......LIYRNASSRL.....HPN.................................FRLTYPTMHLYNDEYYVGEHFAGVKIDP..............................NTNVISRVKVVVLYFRTDRQTTEVSQVLNNWETSLFDYVENFDHPF...LNMTVNSDAMIAREVRTNGMTCVPFFSFSVAAVVIFIFATNS..REHF.......V..FSHNVVMAILGIAGPLMATGTAFGFLFLFGFPFNSITLVMPFLIIG.VGCDDVFIIIHAMRKTDKSES...........LEDRIAETMEEAGPSITVTSATNCLSFAIGIATPTPAISLFCLYTCVAVAVDFVYQLTFFVAVLVYEEKRLMKLQKVGEEK....KIEAAM..ERRPK.............QVLSIQNSIR...................................................STAGAHPPP..ANP.....NGIVSRYCRFLKDWKTRLCLLLVLCGYWTASYYGCKTMEIKMDTTNLIMNDSPLNHIAWIYERFLWSEGQLVMVFVNNPPDLTK.SENLHEVLELVNRFETLPYSMGK....NSTSIWLRSFL..Y........QSSLYHNNK.................GF.NGLLQEWLEDSEGGGA.RWNDMLRLK..KDENGTILGIDKFMFATACAMGDDANWSTREKLQKQWRGVAHEYEH..FNVTVFQSYSFYIDQLDSIGATTMSTVIWAAITMDLACLLMIPGINSILTSTIAMISINIGVFGLLSMWRVNLDPITMCTTLMSIGFSVDFTAHISYHYYRNPTSW....TTDERLADALKSIGWPMIQAASSTVLCIFPLMFNTSYMVWVFVKTILLVTVLGLLHGIIFLPALLLTSGD O16530_CAEEL/48-891 VLSLKIPFTRMQNDIS.DFTPFGARSRVELEKYRKFFNNHGEPKAIY..AFITSKVGDN.......MLGISQLNDTVHVLDTISRDF.......................YLKTSQ....GPKNFEEYCSGFCLLNEPVKHFYSG...............MLISGQHGTDFSHLDLGYPITTVLGTKLYMDPNFFGVKVTTSNNKVESIADG........NTKLFGDHTKQEPNNIREVSLVVLQFRSELGDEVTPEDLRNYEHQILDYIHDEYQSE..HINVYILTDSYITEEIVRAGLTLLPFLVIGFTIMAVFSSIT......FV..............PILAVMACVCPFMACGASLGAMFFIGFRFGSILCVTPFLVL.AIGVDDSYLMANAWQRITCHRRKHARFESVNVELKNRITEMFIETGPSITITTITNALAFGIGATTPAAEIQLFSIGNALAVITDFVFTITFYGALMAVVGRYEIEQELKTQKP.......LPE..SESP..............SETSSTGSMR......................................................SSELDD..CKF.....RRMIANVCKFLTNTWVCSVVLGLLAVYWYICIVGTVNIKSELSPNKLFLAESNIVEIFKQRKSHIIPYYSACWVLVENPGDINN.PNQRAKLEELIESFEALPSANGR....YSTKFWLRDYEDFLKQSEEIDLPMEEEEDEELAIQFTVNGSQVVTPSQPFGQGNELRQFLEWPEFSF.WKGFIQVN.......ESTYQMSKFLVTTAYHGSDLVDWSNRAKLLNEWRSVADQDKFKSLNVTVYEEDAKFLDLIETMSPVAIQSALWTFASMFLVAALFISHPPTLFVATFSILSTSLGVFGIMSWWGADLDPIMMSATVMSIGFSVDIPSHVSYHFYQTAKDTS...DIRRRLQMTIEAVGFPIFEASLSTSLCVMSLFFVDLNMAQIFAKCMLLVVVIGMVHGMLVMPVIFALLDT Q21883_CAEEL/44-838 FCSSKICFTKQEDDIKTGYTPVGARSLDEIEVFSDFFASTGDPIAVF..LFITAKDNSS.......MADYNTMKEVVDIMDYVGSN.........................LTHKG......ESFYTLCTDFCQINEPVRQYYNG.............LAMKQQNLSEVG.SRFQLTFPMMQVLGKELDLSPNFFGVKTDE...............................DGNVEYVKIIMLQIRANIPNDWKKEDAAEYERMISQYFHFKYDST..HVTPLAMSLTYTGDEVVRTGLTIFPFIGVGFIIMTTFSIITIY..YSSS.....RLDQWSVHKVSEAILACVCPLLATSSALGTLFWFGFRFGTILCVTPFLIL.AIGVDDAYLQVHACMRLTAEDSSMT........KREKIARMLVEVGPSIAITSMTNLFAFLVGIYTPTPEISLFCAGNAVAILFDFIYQITMYTAILSICENLEMRKN.............AT....K.................RKDSGLSFK.........................................................NEQ....F.....TVMLDSYCDWVANAYTHLLVLFCFIVYIFVSIRGALNINIILSPDKLVIGDSPLLQVNYLRDQFVLPNYTTVNIFVQNPGNLTI.QSNLDYMNSLFDSFESYPECLGK....KFSHYFVRDYESFRESS...LEEMEMMEDEEGDTN.........KTALEPFSKAAMSEFLAWPEFQH.WNGFVKFD........KNGMLSKYWATVSYHGEGLGDFQVRRRMLNRWRATADQFAP..LNVSIFDDYAPFVDTLETILPATISTSVCTLICMMIVCFLFMYNVFTVFVATLAITSICIGVFGFLSMWGIDLDPISMACLIMSIGFSVDFPAHITFHYFREGLHDPQS.TPAKRVARSLAAIGFPLLQCGLSTILFVLCLLFVPTYMGEVFVKTMILVVTLGLIHGLFIVPAFLCAFTA O02246_CAEEL/64-939 LAIVKILLTKQANDIT.GYTPYGARAKDEYLEYQKFFSSSGLPIAAY..LYIVAKDEGS.......MSRPDYLDETIQVLNFALNNI.......................TMYDSIS..GKSETFNQFCQSFCQINEPVRQFYNG.............YQILSDGEQN...SRIKIQYPVSDMFGRQFSLQPNFFGVELFDQPDDAAKLLDSADGDPVIELNATKLVDPVSRITNVKSVKMITLQFRAEHKPGWTEAQVKKWEMSLVDIFEKRYNSK..RLKIYAYSQSYVEEEMVRGGIIMIPYLVVGFAIMCLCSCVLVM..IRAL...Y..MHQENGYKIILAIMACLTPLLACATALALMFLCGVRFASILCVIPFLVL.SIGVDSSYLMIHEWQRVTKHMRETPRKKDS...VGHRMSEVMAEVGPAILISCLTNMFADAVGSFTSSPEITLLCTGNMLSMWFAFIYQMTFYAGLMSIVGGYEFGSDEIDKNR...MEINIAE..NRVN.............IARHHRPLTRQ...................................................PSKFHEATQ..PII.....SDSLQKYTHLMTTPLVFVSVCLVYIAYLAFSVYGITQLNINLTAQKLFALDSPLLELDDLRIKYQVPVYSMATVFVNTPGKLEN.PARLKRLNEFVREMESINGTWGEGWGELGTKYFVRDYDVFQQS......FGSEDEDDEDFMDDDKPVTVHSDDKMTY.REDELKYFLKWPEYDF.WQGFVKLRNATNSTDPEAEELDRFFFTTGYHGDNLTIWTQRGEMLRAWRQVVDKYPD..FGASVFHEDGVYLDLIDNMPTDTWQSILGTLVCMAMVCFVFLNNWFTVAIASLSVLSICAGILGFLSWWKVDLDPITMAAMIISIGFSVDIPAHVSYHYYQASIQEGPMSPPSSRLANCLSSVAFPALQAALSTILCVCSLLFVNLYMAEVFVKTMVLCVVLCNLHGLVFLPAILILLDS O44978_CAEEL/31-791 VLSSGLVHIRLEPDIRKAFSPDDSDAGYETRVWLEYYGLDIYPERAF..CIFTAKRENS......SILQEGALADIYTVDNRLSAAV.......................GYQDGD......G..RKNCDPLCDLNSPFHLLAN.................LTRRNNG...TTSVFTYPDMPYSGLDIFLGLHLSNADFEP...............................PTERISSKSLVLWYFSRSDTPEGKLAFKDAIDELFQLSKNSSAFE..HVQFTIFSDQVANREMIRGAIEATTLMTIGFFLLLTQVIIVIV..RLSS..........VKMAFYLVATSLLTPMAATVASFGAICWMGFPSFSIQCVTPFLVLG.IGVDDAFILLHRWKHHIAITD...........TPRRLEQVIVDVGPSITITSLTNIIAFGIGFLTPTPQMSLFCLTASLALLLDYIFTYTILAPIVFLCNDPDYKS.......................................IANET.EP........................................................KISR....A.....DTWLSKYSSFVCSVKGRVACIMVLLGMYALTTYGVVTMKTTFEPAKAFPSNSKLVDSLSNI.KPVFNRYFPITVIVNNPPNIEI.KAEYDSFNNMMDRLEHVPGIRGD....NRSLIFLPQYVNFDKT.....MNILSTLVGEK................YRPSYDNLPTWMDAIGNPP.LVKYHMGD.......DNKTIVTAFRLTLL..GKGMSEWAERARAMQHIRTILHEESQ..FNATLFDCDSAILSIILTVGTDLIGSIAVTVVCMAIVCFVFIANFNAVAVITSVIASICYVLVGGLSLWGADLDPVIQVDVLLATGFSVDYTAHVAYNFFRARG......TPQERVYSSLAEMAMPMCEAGLSTFLCMLPLIFVPTYAIVCFAKTVFLVVAIGLLHGLFILPVILALFSK #=GC seq_cons lssschhahhsssDhp.uhpphsshscp.shs.pcFasucuhststa..lhlsA+spss.......lLc.shLs-lhplscalhssl.......................pl.sss....h.hsacclCpsapphspssppahph................Ltpspps...splslTYPhhphhupplYluspFuGVchhs...............................ssslppsKslhLhapschsscpscphupcaEppLtpalcpphssc..hlphshhosphls-ElpRsuhshhPahslohslLssFohlssh..hhph........p.lppKPlLAlhGlloPlhAslouhGhLFhhGhhFssIlsVhPFLlL.uIGVDDsFlMlsAWc+Tsppps...........sccRhucslsEuGsuIoITSlTslloFulGshTssPuIplFChhsulAlhFsFlYQlTFauAlhulsuchEhpuppshh.h.......hs...pc................pchcspsotp....................................................s.upcspp..hhs.....chhhshYssFltssps+lsslllallYluluhYGssslcpsLsPspLlhsDSsLlchhplh-+alastGptlpVhVNNPPcLsp.spshcclpphlscFEshsaohGc....puTpaWLR-Ycpah.p......php.hcspc.................ta..tspLcpaLchsttsh.Wpsslhhs.....p.csssplspFhFslu..hcslssassRs+hhppaRslADcasp..FNVolFc-sssasDQl.slhssTlpollhsllsMhlVshlFIsshhslhslolullSIslGVhGaLShWGVcLDPIoMlslIMSIGFSVDaoAHIuYpaapuptp.....sspcRltsALpulGWPlhQuuhSTlLslhsLhFVsoYMlhlFsKTllLVlslGhlHGLlhLPllLshhss // hmmer-3.1b2/testsuite/RRM_1.sto0000664361611702660230000004475512473612615015751 0ustar wheelerteddy# STOCKHOLM 1.0 #=GF ID RRM_1 #=GF AC PF00076.13 #=GF DE RNA recognition motif. (a.k.a. RRM, RBD, or RNP domain) #=GF PI rrm; #=GF AU Eddy SR, Birney E #=GF SE Published_alignment #=GF GA 17.70 17.70; 17.80 17.80; #=GF TC 17.70 17.70; 17.80 17.80; #=GF NC 17.60 17.60; 17.70 17.70; #=GF TP Domain #=GF BM hmmbuild -F HMM_ls SEED #=GF BM hmmcalibrate --seed 0 HMM_ls #=GF BM hmmbuild -f -F HMM_fs SEED #=GF BM hmmcalibrate --seed 0 HMM_fs #=GF AM byscore #=GF RN [1] #=GF RM 8290338 #=GF RT Analysis of the RNA-recognition motif and RS and RGG #=GF RT domains: conservation in metazoan pre-mRNA splicing #=GF RT factors. #=GF RA Birney E., Kumar S., Krainer A.R. #=GF RL Nucleic Acid Res 1993;21:5803-5816. #=GF DR PROSITE; PDOC00030; #=GF DR SCOP; 1sxl; sf; #=GF DR MIM; 152700; #=GF DR MIM; 109090; #=GF DR HOMSTRAD; rrm; #=GF DC The following Pfam-B families contain sequences that according to Prodom #=GF DC are members of this Pfam-A family. #=GF DR PFAMB; PB001386; #=GF DR PFAMB; PB001539; #=GF DR PFAMB; PB002431; #=GF DR PFAMB; PB003624; #=GF DR PFAMB; PB005894; #=GF DR PFAMB; PB013606; #=GF DR PFAMB; PB016829; #=GF DR PFAMB; PB018975; #=GF DR PFAMB; PB019177; #=GF DR PFAMB; PB020714; #=GF DR PFAMB; PB021686; #=GF DR PFAMB; PB021998; #=GF DR PFAMB; PB026500; #=GF DR PFAMB; PB030976; #=GF DR PFAMB; PB034566; #=GF DR PFAMB; PB035948; #=GF DR PFAMB; PB038743; #=GF DR PFAMB; PB040629; #=GF DR PFAMB; PB056790; #=GF DR PFAMB; PB057545; #=GF DR PFAMB; PB058793; #=GF DR PFAMB; PB060078; #=GF DR PFAMB; PB060583; #=GF DR PFAMB; PB063375; #=GF DR PFAMB; PB074535; #=GF DR PFAMB; PB076854; #=GF DR PFAMB; PB080687; #=GF DR PFAMB; PB086034; #=GF DR PFAMB; PB086818; #=GF DR PFAMB; PB092687; #=GF DR PFAMB; PB095757; #=GF DR PFAMB; PB097655; #=GF DR PFAMB; PB106206; #=GF DR PFAMB; PB110433; #=GF DR PFAMB; PB120339; #=GF DR PFAMB; PB121973; #=GF DR PFAMB; PB129966; #=GF DR PFAMB; PB150546; #=GF DR PFAMB; PB153066; #=GF DR PFAMB; PB168984; #=GF DR PFAMB; PB169340; #=GF DR PFAMB; PB170125; #=GF DR PFAMB; PB170679; #=GF DR PFAMB; PB170741; #=GF DR PFAMB; PB170843; #=GF DR PFAMB; PB170925; #=GF DR PFAMB; PB171421; #=GF DR PFAMB; PB171438; #=GF DR PFAMB; PB171726; #=GF DR PFAMB; PB172371; #=GF DR PFAMB; PB172690; #=GF DR PFAMB; PB172737; #=GF DR PFAMB; PB173457; #=GF DR PFAMB; PB173738; #=GF DR PFAMB; PB173755; #=GF DR PFAMB; PB174169; #=GF DR PFAMB; PB174932; #=GF DR PFAMB; PB175170; #=GF DR PFAMB; PB175198; #=GF DR PFAMB; PB175338; #=GF DR PFAMB; PB176185; #=GF DR PFAMB; PB176927; #=GF DR PFAMB; PB177040; #=GF DR PFAMB; PB177301; #=GF DR PFAMB; PB177632; #=GF DR PFAMB; PB178096; #=GF DR PFAMB; PB178198; #=GF DR PFAMB; PB178250; #=GF DR PFAMB; PB178407; #=GF DR PFAMB; PB179951; #=GF DR PFAMB; PB180991; #=GF DR PFAMB; PB182298; #=GF DR PFAMB; PB182360; #=GF DR PFAMB; PB182522; #=GF DR INTERPRO; IPR000504; #=GF CC The RRM motif is probably diagnostic of an RNA binding protein. #=GF CC RRMs are found in a variety of RNA binding proteins, including #=GF CC various hnRNP proteins, proteins implicated in regulation #=GF CC of alternative splicing, and protein components #=GF CC of snRNPs. The motif also appears in a few single stranded #=GF CC DNA binding proteins. #=GF CC The RRM structure consists of four strands #=GF CC and two helices arranged in an alpha/beta sandwich, with #=GF CC a third helix present during RNA binding in some cases #=GF CC The C-terminal beta strand (4th strand) and final helix are hard #=GF CC to align and have been omitted in the SEED alignment #=GF CC The LA proteins (Swiss:P05455) have a N terminus rrm which is #=GF CC included in the seed. There is a second region towards the #=GF CC C terminus that has some features of a rrm but does not #=GF CC appear to have the important structural core of a rrm. #=GF CC The LA proteins (Swiss:P05455) are one of the main autoantigens #=GF CC in Systemic lupus erythematosus (SLE), an autoimmune disease. #=GF SQ 79 #=GS GBP2_YEAST/221-291 AC P25555.1 #=GS ROC3_NICSY/99-170 AC P19682.1 #=GS ROC5_NICSY/116-187 AC P19684.1 #=GS ROC5_NICSY/219-290 AC P19684.1 #=GS TIA1_HUMAN/108-179 AC P31483.2 #=GS PUB1_YEAST/164-235 AC P32588.3 #=GS NAM8_YEAST/165-237 AC Q00539.2 #=GS RT19_ARATH/33-104 AC P39697.2 #=GS NSR1_YEAST/170-241 AC P27476.1 #=GS PES4_YEAST/93-164 AC P39684.2 #=GS NOP4_YEAST/28-98 AC P37838.1 #=GS PABP_SCHPO/263-333 AC P31209.2 #=GS PABP_DROME/92-162 AC P21187.3 #=GS PABP_DROME/185-256 AC P21187.3 #=GS CSTF2_HUMAN/18-89 AC P33240.1 #=GS CSTF2_HUMAN/18-89 DR PDB; 1p1t A; 18-89; #=GS RNA15_YEAST/20-91 AC P25299.1 #=GS SGN1_YEAST/66-136 AC P40561.1 #=GS IST3_YEAST/33-104 AC P40565.1 #=GS NSR1_YEAST/269-340 AC P27476.1 #=GS IF4B_HUMAN/98-168 AC P23588.1 #=GS IF4B_HUMAN/98-168 DR PDB; 1wi8 A; 98-168; #=GS ELAV_DROME/404-475 AC P16914.1 #=GS NOP3_YEAST/127-190 AC Q01560.1 #=GS GBP2_YEAST/124-193 AC P25555.1 #=GS HNRPC_HUMAN/18-82 AC P07910.4 #=GS HNRPC_HUMAN/18-82 DR PDB; 1wf2 A; 18-82; #=GS TRA2_DROME/99-170 AC P19018.1 #=GS HNRPG_HUMAN/10-81 AC P38159.3 #=GS SFRS2_CHICK/16-87 AC P30352.1 #=GS SFRS3_MOUSE/12-78 AC P84104.1 #=GS SRR55_DROME/6-69 AC P26686.4 #=GS SFRS1_HUMAN/18-86 AC Q07955.2 #=GS SFRS1_HUMAN/18-86 DR PDB; 1x4a A; 26-94; #=GS NONA_DROME/304-369 AC Q04047.2 #=GS RU17_DROME/104-175 AC P17133.2 #=GS PABP_DROME/4-75 AC P21187.3 #=GS ELAV4_HUMAN/48-119 AC P26378.1 #=GS ELAV4_HUMAN/48-119 DR PDB; 1fxl A; 41-112; #=GS ELAV4_HUMAN/48-119 DR PDB; 1g2e A; 41-112; #=GS SXL_DROME/127-198 AC P19339.1 #=GS SXL_DROME/127-198 DR PDB; 3sxl A; 127-198; #=GS SXL_DROME/127-198 DR PDB; 1b7f B; 127-198; #=GS SXL_DROME/127-198 DR PDB; 3sxl C; 127-198; #=GS SXL_DROME/127-198 DR PDB; 1b7f A; 127-198; #=GS SXL_DROME/127-198 DR PDB; 3sxl B; 127-198; #=GS SXL_DROME/127-198 DR PDB; 2sxl ; 6-77; #=GS ELAV_DROME/250-322 AC P16914.1 #=GS SXL_DROME/213-285 AC P19339.1 #=GS SXL_DROME/213-285 DR PDB; 3sxl A; 213-285; #=GS SXL_DROME/213-285 DR PDB; 1b7f B; 213-285; #=GS SXL_DROME/213-285 DR PDB; 3sxl C; 213-285; #=GS SXL_DROME/213-285 DR PDB; 1sxl ; 16-88; #=GS SXL_DROME/213-285 DR PDB; 1b7f A; 213-285; #=GS SXL_DROME/213-285 DR PDB; 3sxl B; 213-285; #=GS TIA1_HUMAN/216-281 AC P31483.2 #=GS TIA1_HUMAN/9-78 AC P31483.2 #=GS PUB1_YEAST/77-147 AC P32588.3 #=GS SQD_DROME/138-208 AC Q08473.3 #=GS ROA1_BOVIN/106-176 AC P09867.1 #=GS ROAA_MOUSE/161-231 AC Q99020.1 #=GS GRP10_BRANA/8-79 AC Q05966.1 #=GS ROAA_MOUSE/77-147 AC Q99020.1 #=GS SQD_DROME/58-128 AC Q08473.3 #=GS RB97D_DROME/34-104 AC Q02926.1 #=GS U2AF2_SCHPO/312-383 AC P36629.1 #=GS U2AF2_HUMAN/261-332 AC P26368.4 #=GS U2AF2_HUMAN/261-332 DR PDB; 2u2f A; 4-75; #=GS PUB1_YEAST/343-408 AC P32588.3 #=GS RNP1_YEAST/37-109 AC P32385.2 #=GS GBP2_YEAST/351-421 AC P25555.1 #=GS NONA_DROME/378-448 AC Q04047.2 #=GS SFPQ_HUMAN/373-443 AC P23246.2 #=GS MODU_DROME/342-410 AC P13469.2 #=GS NUCL_CHICK/283-352 AC P15771.1 #=GS PES4_YEAST/305-374 AC P39684.2 #=GS YHH5_YEAST/315-384 AC P38760.1 #=GS YHC4_YEAST/348-415 AC P38741.1 #=GS MODU_DROME/422-484 AC P13469.2 #=GS PRP24_YEAST/212-284 AC P49960.1 #=GS MEI2_SCHPO/197-265 AC P08965.1 #=GS NOP4_YEAST/292-363 AC P37838.1 #=GS MODU_DROME/260-326 AC P13469.2 #=GS HNRPF_HUMAN/113-183 AC P52597.3 #=GS RU1A_YEAST/229-293 AC P32605.1 #=GS RU2B_HUMAN/153-220 AC P08579.1 #=GS SNRPA_HUMAN/210-276 AC P09012.3 #=GS SNRPA_HUMAN/210-276 DR PDB; 2u1a ; 17-83; #=GS WHI3_YEAST/540-614 AC P34761.1 #=GS CPO_DROME/453-526 AC Q01617.3 #=GS NOP3_YEAST/202-270 AC Q01560.1 #=GS SFRS1_HUMAN/123-187 AC Q07955.2 #=GS PTBP1_HUMAN/186-253 AC P26599.1 #=GS PTBP1_HUMAN/186-253 DR PDB; 2adb A; 186-253; #=GS PTBP1_HUMAN/186-253 DR PDB; 1sjr A; 49-116; #=GS RNA12_YEAST/200-267 AC P32843.1 #=GS SSB1_YEAST/39-114 AC P10080.2 #=GS MODU_DROME/177-246 AC P13469.2 #=GS PRP24_YEAST/43-111 AC P49960.1 #=GS PRP24_YEAST/119-190 AC P49960.1 #=GS LA_HUMAN/113-182 AC P05455.2 #=GS LA_HUMAN/113-182 DR PDB; 1zh5 A; 113-182; #=GS LA_HUMAN/113-182 DR PDB; 1zh5 B; 113-182; #=GS LA_HUMAN/113-182 DR PDB; 1yty A; 113-182; #=GS LA_HUMAN/113-182 DR PDB; 1yty B; 113-182; #=GS LA_HUMAN/113-182 DR PDB; 1s79 A; 113-182; GBP2_YEAST/221-291 VFIINL..PYSMNWQSLKDMFKE.CGHV.LRADVELD....FNGFSRGFGSVIYPTEDEMIRAIDTFNG.MEVEGRVLEV ROC3_NICSY/99-170 LFVGNL..PYDIDSEGLAQLFQQ.AGVV.EIAEVIYN...RETDRSRGFGFVTMSTVEEADKAVELYSQ.YDLNGRLLTV ROC5_NICSY/116-187 LYVGNL..PFSMTSSQLSEIFAE.AGTV.ANVEIVYD...RVTDRSRGFAFVTMGSVEEAKEAIRLFDG.SQVGGRTVKV ROC5_NICSY/219-290 LYVANL..SWALTSQGLRDAFAD.QPGF.MSAKVIYD...RSSGRSRGFGFITFSSAEAMNSALDTMNE.VELEGRPLRL TIA1_HUMAN/108-179 VFVGDL..SPQITTEDIKAAFAP.FGRI.SDARVVKD...MATGKSKGYGFVSFFNKWDAENAIQQMGG.QWLGGRQIRT PUB1_YEAST/164-235 LFVGDL..NVNVDDETLRNAFKD.FPSY.LSGHVMWD...MQTGSSRGYGFVSFTSQDDAQNAMDSMQG.QDLNGRPLRI NAM8_YEAST/165-237 IFVGDL..APNVTESQLFELFINRYAST.SHAKIVHD...QVTGMSKGYGFVKFTNSDEQQLALSEMQG.VFLNGRAIKV RT19_ARATH/33-104 LYIGGL..SPGTDEHSLKDAFSS.FNGV.TEARVMTN...KVTGRSRGYGFVNFISEDSANSAISAMNG.QELNGFNISV NSR1_YEAST/170-241 IFVGRL..SWSIDDEWLKKEFEH.IGGV.IGARVIYE...RGTDRSRGYGYVDFENKSYAEKAIQEMQG.KEIDGRPINC PES4_YEAST/93-164 LFIGDL..HETVTEETLKGIFKK.YPSF.VSAKVCLD...SVTKKSLGHGYLNFEDKEEAEKAMEELNY.TKVNGKEIRI NOP4_YEAST/28-98 LFVRSI..PQDVTDEQLADFFSN.FAPI.KHAVVVKD....TNKRSRGFGFVSFAVEDDTKEALAKARK.TKFNGHILRV PABP_SCHPO/263-333 VYIKNL..DTEITEQEFSDLFGQ.FGEI.TSLSLVKD....QNDKPRGFGFVNYANHECAQKAVDELND.KEYKGKKLYV PABP_DROME/92-162 VFIKNL..DRAIDNKAIYDTFSA.FGNI.LSCKVATD....EKGNSKGYGFVHFETEEAANTSIDKVNG.MLLNGKKVYV PABP_DROME/185-256 VYVKNF..TEDFDDEKLKEFFEP.YGKI.TSYKVMSK....EDGKSKGFGFVAFETTEAAEAAVQALNGKDMGEGKSLYV CSTF2_HUMAN/18-89 VFVGNI..PYEATEEQLKDIFSE.VGPV.VSFRLVYD...RETGKPKGYGFCEYQDQETALSAMRNLNG.REFSGRALRV #=GR CSTF2_HUMAN/18-89 SS EEE-S-..-TT--HHHHHHHHHT.TS-E.EEEEEEEE...TTTTEEEEEEEEEES-HHHHHHHHHHSSS.EEETTEEEEE RNA15_YEAST/20-91 VYLGSI..PYDQTEEQILDLCSN.VGPV.INLKMMFD...PQTGRSKGYAFIEFRDLESSASAVRNLNG.YQLGSRFLKC SGN1_YEAST/66-136 IFVGNI..TPDVTPEQIEDHFKD.CGQI.KRITLLYD...RNTGTPKGYGYIEFESPAYREKALQ.LNG.GELKGKKIAV IST3_YEAST/33-104 IYIGNL..NRELTEGDILTVFSE.YGVP.VDVILSRD...ENTGESQGFAYLKYEDQRSTILAVDNLNG.FKIGGRALKI NSR1_YEAST/269-340 LFLGNL..SFNADRDAIFELFAK.HGEV.VSVRIPTH...PETEQPKGFGYVQFSNMEDAKKALDALQG.EYIDNRPVRL IF4B_HUMAN/98-168 AFLGNL..PYDVTEESIKEFFRG.LNIS..AVRLPR..EPSNPERLKGFGYAEFEDLDSLLSALS.LNE.ESLGNRRIRV #=GR IF4B_HUMAN/98-168 SS EEEES-..-TT--HHHHHHHT-S.S-EE..EEE--B..-SS-SSSB-S-EEEEESSHHHHHHHGG.GGS.-EETTEE-EE ELAV_DROME/404-475 IFIYNL..APETEEAALWQLFGP.FGAV.QSVKIVKD...PTTNQCKGYGFVSMTNYDEAAMAIRALNG.YTMGNRVLQV NOP3_YEAST/127-190 LFVRPF..PLDVQESELNEIFGP.FGPM.KEVKILN...........GFAFVEFEEAESAAKAIEEVHG.KSFANQPLEV GBP2_YEAST/124-193 IFVRNL..TFDCTPEDLKELFGT.VGEV.VEADIIT.....SKGHHRGMGTVEFTKNESVQDAISKFDG.ALFMDRKLMV HNRPC_HUMAN/18-82 VFIGNL.NTLVVKKSDVEAIFSK.YGKI.VGCSVHK...........GFAFVQYVNERNARAAVAGEDG.RMIAGQVLDI #=GR HNRPC_HUMAN/18-82 SS EEEEEE.-TTT--HHHHHHTTGG.GS-E.EEEEEET...........EEEEEEESSHHHHHHHHHTTSS.-EETTEE-EE TRA2_DROME/99-170 IGVFGL..NTNTSQHKVRELFNK.YGPI.ERIQMVID...AQTQRSRGFCFIYFEKLSDARAAKDSCSG.IEVDGRRIRV HNRPG_HUMAN/10-81 LFIGGL..NTETNEKALEAVFGK.YGRI.VEVLLMKD...RETNKSRGFAFVTFESPADAKDAARDMNG.KSLDGKAIKV SFRS2_CHICK/16-87 LKVDNL..TYRTSPDTLRRVFEK.YGRV.GDVYIPRD...RYTKESRGFAFVRFHDKRDAEDAMDAMDG.AVLDGRELRV SFRS3_MOUSE/12-78 VYVGNL..GNNGNKTELERAFGY.YGPL.RSVWVARN........PPGFAFVEFEDPRDAADAVRELDG.RTLCGCRVRV SRR55_DROME/6-69 VYVGGL..PYGVRERDLERFFKG.YGRT.RDILIKN...........GYGFVEFEDYRDADDAVYELNG.KELLGERVVV SFRS1_HUMAN/18-86 IYVGNL..PPDIRTKDIEDVFYK.YGAI.RDIDLKN......RRGGPPFAFVEFEDPRDAEDAVYGRDG.YDYDGYRLRV #=GR SFRS1_HUMAN/18-86 SS EEES--..TT--HHHHHHHHHTT.S-EE.EEEE--S......SSSS--EEEEES-HHHHHHHHHHHTT-.EETTEE-EEE NONA_DROME/304-369 LYVGNL..TNDITDDELREMFKP.YGEI.SEIFSNLD.........KNFTFLKVDYHPNAEKAKRALDG.SMRKGRQLRV RU17_DROME/104-175 LFIARI..NYDTSESKLRREFEF.YGPI.KKIVLIHD...QESGKPKGYAFIEYEHERDMHAAYKHADG.KKIDSKRVLV PABP_DROME/4-75 LYVGDL..PQDVNESGLFDKFSS.AGPV.LSIRVCRD...VITRRSLGYAYVNFQQPADAERALDTMNF.DLVRNKPIRI ELAV4_HUMAN/48-119 LIVNYL..PQNMTQEEFRSLFGS.IGEI.ESCKLVRD...KITGQSLGYGFVNYIDPKDAEKAINTLNG.LRLQTKTIKV #=GR ELAV4_HUMAN/48-119 SS EEEES-..-TT--HHHHHHHHHT.TS-E.EEEEEEE-...TTT--EEEEEEEEESSHHHHHHHHHHHTT.-EETTEE-EE SXL_DROME/127-198 LIVNYL..PQDMTDRELYALFRA.IGPI.NTCRIMRD...YKTGYSFGYAFVDFTSEMDSQRAIKVLNG.ITVRNKRLKV #=GR SXL_DROME/127-198 SS EEEES-..-TT--HHHHHHHHHT.TS-E.EEEEEEEE...SSSTEEECEEEEEESSHHHHHHHHHHHTT.-EETTEE-EE ELAV_DROME/250-322 LYVSGL..PKTMTQQELEAIFAP.FGAI.ITSRILQN..AGNDTQTKGVGFIRFDKREEATRAIIALNG.TTPSSCTDPI SXL_DROME/213-285 LYVTNL..PRTITDDQLDTIFGK.YGSI.VQKNILRD...KLTGRPRGVAFVRYNKREEAQEAISALNNVIPEGGSQPLS #=GR SXL_DROME/213-285 SS EEEES-..-TTS-HHHHHHHHGC.CS-E.EEEEEEE-...TTT--EEEEEEEEESSHHHHHHHHHHHST-S-TTSSS--E TIA1_HUMAN/216-281 VYCGGV..TSGLTEQLMRQTFSP.FGQI.MEIRVFPD.........KGYSFVRFNSHESAAHAIVSVNG.TTIEGHVVKC TIA1_HUMAN/9-78 LYVGNL..SRDVTEALILQLFSQ.IGPC.KNCKMIMD.....TAGNDPYCFVEFHEHRHAAAALAAMNG.RKIMGKEVKV PUB1_YEAST/77-147 LYVGNL..DKAITEDILKQYFQV.GGPI.ANIKIMID....KNNKNVNYAFVEYHQSHDANIALQTLNG.KQIENNIVKI SQD_DROME/138-208 IFVGGL..TTEISDEEIKTYFGQ.FGNI.VEVEMPFD...KQKSQRKGFCFITFDSEQVVTDLLK.TPK.QKIAGKEVDV ROA1_BOVIN/106-176 IFVGGI..KEDTEEHHLRDYFEQ.YGKI.EVIEIMTD...RGSGKKRGFAFVTFDDHDSVDKIVI.QKY.HTVNGHNCEV ROAA_MOUSE/161-231 IFVGGL..NPEATEEKIREYFGQ.FGEI.EAIELPID...PKLNKRRGFVFITFKEEDPVKKVLE.KKF.HTVSGSKCEI GRP10_BRANA/8-79 CFVGGL..AWATGDAELERTFSQ.FGEV.IDSKIIND...RETGRSRGFGFVTFKDEKSMKDAIDEMNG.KELDGRTITV ROAA_MOUSE/77-147 MFVGGL..SWDTSKKDLKDYFTK.FGEV.VDCTIKMD...PNTGRSRGFGFILFKDSSSVEKVLD.QKE.HRLDGRVIDP SQD_DROME/58-128 LFVGGL..SWETTEKELRDHFGK.YGEI.ESINVKTD...PQTGRSRGFAFIVFTNTEAIDKVSA.ADE.HIINSKKVDP RB97D_DROME/34-104 LFIGGL..APYTTEENLKLFYGQ.WGKV.VDVVVMRD...AATKRSRGFGFITYTKSLMVDRAQE..NRPHIIDGKTVEA U2AF2_SCHPO/312-383 IYISNL..PLNLGEDQVVELLKP.FGDL.LSFQLIKN...IADGSSKGFCFCEFKNPSDAEVAISGLDG.KDTYGNKLHA U2AF2_HUMAN/261-332 LFIGGL..PNYLNDDQVKELLTS.FGPL.KAFNLVKD...SATGLSKGYAFCEYVDINVTDQAIAGLNG.MQLGDKKLLV #=GR U2AF2_HUMAN/261-332 SS EEEE--..-SS--SHHHHHHHTS.SS-E.EEEEEE--...-SSS----EEEEEESSSHHHHHHHHTSSS.---SSS--EE PUB1_YEAST/343-408 AYIGNI..PHFATEADLIPLFQN.FGFI.LDFKHYPE.........KGCCFIKYDTHEQAAVCIVALAN.FPFQGRNLRT RNP1_YEAST/37-109 LYVGNL..PKNCRKQDLRDLFEPNYGKI.TINMLKKK...PLKKPLKRFAFIEFQEGVNLKKVKEKMNG.KIFMNEKIVI GBP2_YEAST/351-421 IYCSNL..PFSTARSDLFDLFGP.IGKI.NNAELKP....QENGQPTGVAVVEYENLVDADFCIQKLNN.YNYGGCSLQI NONA_DROME/378-448 LRVSNL..TPFVSNELLYKSFEI.FGPI.ERASITVD....DRGKHMGEGIVEFAKKSSASACLRMCNE.KCFFLTASLR SFPQ_HUMAN/373-443 LSVRNL..SPYVSNELLEEAFSQ.FGPI.ERAVVIVD....DRGRSTGKGIVEFASKPAARKAFERCSE.GVFLLTTTPR MODU_DROME/342-410 LVVENVGKHESYSSDALEKIFKK.FGDV.EEIDVVC........SKAVLAFVTFKQSDAATKALAQLDG.KTVNKFEWKL NUCL_CHICK/283-352 LFVKNL..TPTKDYEELRTAIKEFFGKK..NLQVSEV....RIGSSKRFGYVDFLSAEDMDKALQ.LNG.KKLMGLEIKL PES4_YEAST/305-374 IFIKNL..PTITTRDDILNFFSE.VGPI.KSIYLSN.....ATKVKYLWAFVTYKNSSDSEKAIKRYNN.FYFRGKKLLV YHH5_YEAST/315-384 ILVKNL..PSDTTQEEVLDYFST.IGPI.KSVFISEK.....QANTPHKAFVTYKNEEESKKAQKCLNK.TIFKNHTIWV YHC4_YEAST/348-415 IFVGQL..DKETTREELNRRFST.HGKI.QDINLIFK.......PTNIFAFIKYETEEAAAAALESENH.AIFLNKTMHV MODU_DROME/422-484 ILVTNL..TSDATEADLRKVFND.SGEI.ESIIMLG...........QKAVVKFKDDEGFCKSFL.ANE.SIVNNAPIFI PRP24_YEAST/212-284 IMIRNL.STELLDENLLRESFEG.FGSI.EKINIPAG..QKEHSFNNCCAFMVFENKDSAERALQ.MNR.SLLGNREISV MEI2_SCHPO/197-265 LFVTNL..PRIVPYATLLELFSK.LGDV.KGIDTSSL.......STDGICIVAFFDIRQAIQAAKSLRSQRFFNDRLLYF NOP4_YEAST/292-363 VFVRNV..PYDATEESLAPHFSK.FGSV.KYALPVID...KSTGLAKGTAFVAFKDQYTYNECIKNAPA.AGSTSLLIGD MODU_DROME/260-326 VVVGLI..GPNITKDDLKTFFEK.VAPV.EAVTISSN.......RLMPRAFVRLASVDDIPKALK.LHS.TELFSRFITV HNRPF_HUMAN/113-183 VRLRGL..PFGCTKEEIVQFFSG.LEIVPNGITLPVD....PEGKITGEAFVQFASQELAEKALG.KHK.ERIGHRYIEV RU1A_YEAST/229-293 LLIQNL..PSGTTEQLLSQILGN.EALV..EIRLVSV.........RNLAFVEYETVADATKIKNQLGS.TYKLQNNDVT RU2B_HUMAN/153-220 LFLNNL..PEETNEMMLSMLFNQ.FPGF.KEVRLVPG........RHDIAFVEFENDGQAGAARDALQGFKITPSHAMKI SNRPA_HUMAN/210-276 LFLTNL..PEETNELMLSMLFNQ.FPGF.KEVRLVPG........RHDIAFVEFDNEVQAGAARDALQG.FKITQNNAMK #=GR SNRPA_HUMAN/210-276 SS EEE---..SS--HHHHHHHHHTS.TTEE.EEE--TTT........SSEEEEEES-HHHHHHHHHHTTT-.-SSSS----- WHI3_YEAST/540-614 LYVGNL..PSDATEQELRQLFSG.QEGF.RRLSFRNKNTTSNGHSHGPMCFVEFDDVSFATRALAELYG.RQLPRSTVSS CPO_DROME/453-526 LFVSGL..PMDAKPRELYLLFRA.YEGY.EGSLLKV..TSKNGKTASPVGFVTFHTRAGAEAAKQDLQGVRFDPDMPQTI NOP3_YEAST/202-270 ITMKNL..PEGCSWQDLKDLARE.NSLE.TTFSSVN......TRDFDGTGALEFPSEEILVEALERLNN.IEFRGSVITV SFRS1_HUMAN/123-187 VVVSGL..PPSGSWQDLKDHMRE.AGDV.CYADVYRD..........GTGVVEFVRKEDMTYAVRKLDN.TKFRSHEGET PTBP1_HUMAN/186-253 IIVENL..FYPVTLDVLHQIFSK.FGTV...LKIIT.....FTKNNQFQALLQYADPVSAQHAKLSLDG.QNIYNACCTL #=GR PTBP1_HUMAN/186-253 SS EEC-S-..-STTHHHHHHHHHTT.TS-E...EEEEE.....EECTTEEEEEEEES-HHHHHHHHHHHCC.B-SSSTTSEE RNA12_YEAST/200-267 IVIKFQ..GPALTEEEIYSLFRR.YGTI...IDIFP.....PTAANNNVAKVRYRSFRGAISAKNCVSG.IEIHNTVLHI SSB1_YEAST/39-114 IFIGNV..AHECTEDDLKQLFVEEFGDE.VSVEIPIKEHTDGHIPASKHALVKFPTKIDFDNIKENYDT.KVVKDREIHI MODU_DROME/177-246 VFVTNL..PNEYLHKDLVALFAK.FGRL.SALQRFTN......LNGNKSVLIAFDTSTGAEAVLQAKPKALTLGDNVLSV PRP24_YEAST/43-111 VLVKNL..PKSYNQNKVYKYFKH.CGPI.IHVDVAD.....SLKKNFRFARIEFARYDGALAAIT.KTH.KVVGQNEIIV PRP24_YEAST/119-190 LWMTNF..PPSYTQRNIRDLLQD.INVVALSIRLPSL....RFNTSRRFAYIDVTSKEDARYCVEKLNG.LKIEGYTLVT LA_HUMAN/113-182 VYIKGF..PTDATLDDIKEWLED.KGQV.LNIQMRR....TLHKAFKGSIFVVFDSIESAKKFVE.TPG.QKYKETDLLI #=GR LA_HUMAN/113-182 SS EEEE--..-TT--HHHHHHHHCT.SS-E.EEEEEEE....-TTTSEEEEEEEEESSHHHHHHHHH.SSS.-EETTEE-EE #=GC SS_cons EEEESE..TTTTHHHHHHHHHTT.TSEE.EEEEEEEE..STTTTSEEEEEEEEESSHHHHHHHHHHHSS.EEETTEEEEE #=GC seq_cons laVssL..s.ssoccpLcphFpp.aGtl.hshplhtc.....ptpscGauFVpFpspcsAppAlpthsu.pplpu+plpl // hmmer-3.1b2/testsuite/Caudal_act.hmm0000664361611702660230000020340112473612614017045 0ustar wheelerteddyHMMER3/e [3.0 | March 2010] NAME Caudal_act ACC PF04731.3 DESC Caudal like protein activation region LENG 143 ALPH amino RF no CONS yes CS no MAP yes DATE Thu Jun 16 11:48:44 2011 NSEQ 9 EFFN 1.085449 CKSUM 2955524438 GA 25.00 25.00 TC 46.20 46.20 NC -6.30 -6.30 STATS LOCAL MSV -10.2905 0.71021 STATS LOCAL VITERBI -11.2997 0.71021 STATS LOCAL FORWARD -3.8038 0.71021 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.34638 4.46569 3.01008 2.81541 3.47790 2.74290 3.57967 3.31341 2.84585 2.81715 3.67702 3.06002 2.70876 3.09758 3.05674 2.35729 2.79291 2.88124 3.92523 3.13497 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.00000 * 1 3.15049 4.60091 4.60894 4.10378 3.32333 4.24721 4.74448 2.27072 3.91313 1.79853 1.21807 4.33189 4.61370 4.17024 4.08948 3.62762 3.42750 1.95678 5.27200 4.11588 1 m - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 2 3.81405 5.15378 4.39611 4.20687 2.40634 4.27023 3.85209 3.77892 4.05584 3.13498 4.41743 4.20029 4.74153 4.27017 4.15832 3.90817 4.10583 3.66820 4.05920 0.52563 2 Y - - 2.68619 4.42226 2.77520 2.73124 3.46355 2.40514 3.72452 3.29355 2.67742 2.69356 4.24691 2.90348 2.73740 3.18147 2.89802 2.37888 2.77520 2.98519 4.58478 3.61504 0.07878 2.67757 4.95773 0.41429 1.08120 0.48576 0.95510 3 2.85393 4.87194 3.03208 2.81867 4.37836 3.41957 4.06453 3.91174 2.83214 3.47961 4.40638 3.25871 1.04942 2.62249 3.16070 2.93253 3.21059 3.54557 5.64359 4.35176 4 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 4 2.55641 4.57449 3.14050 2.74172 4.11138 1.72637 3.91753 3.53011 2.79066 2.57837 4.02276 2.77300 3.87364 3.12664 3.19749 2.11900 2.89787 3.16457 5.43879 4.14516 5 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 5 2.12455 4.38721 3.44545 3.01962 4.29490 3.15947 4.12133 3.70174 3.03122 3.36351 4.18310 3.30859 1.93411 3.34403 3.40894 1.85209 2.04018 3.23077 5.61619 4.36734 6 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 6 2.46644 4.39856 4.52668 4.01081 3.57887 4.14920 4.69711 2.01407 3.89136 1.78413 3.44296 4.22535 4.54349 4.15913 4.10083 3.50759 3.24947 1.13698 5.35705 4.16043 7 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 7 2.99964 4.92539 3.66424 3.01253 4.08867 3.74064 3.83352 3.44753 2.25929 2.96569 2.97443 3.39756 4.13779 3.02228 1.12839 3.09368 3.21771 3.24143 5.35012 4.11855 8 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 8 2.67899 4.90275 3.00511 2.50079 4.21671 3.44530 2.31772 3.66190 2.41935 3.23500 4.04499 3.00835 3.11308 2.83925 2.57170 1.99656 2.92570 3.31088 5.42933 4.09211 9 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 9 2.40926 4.39890 3.40507 3.03396 4.37158 3.14438 4.16060 3.78741 3.06669 3.44623 4.26583 3.31487 1.90442 3.38469 3.43453 1.49616 2.28127 3.28985 5.68448 4.43427 10 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 10 2.39610 4.35723 3.42777 3.26474 4.63339 1.07469 4.44310 4.12706 3.46143 3.78953 4.60424 3.43443 3.84722 3.72000 3.77210 1.68776 2.90843 3.48526 5.94357 4.72766 11 g - - 2.68619 4.42263 2.77537 2.73161 3.46392 2.40310 3.72533 3.29392 2.67779 2.69393 4.24728 2.90385 2.73778 3.18184 2.89839 2.37871 2.77455 2.98532 4.58515 3.61541 0.33930 1.27045 4.95773 1.82097 0.17658 0.48576 0.95510 11 2.63718 4.36254 3.51371 2.98130 3.51099 3.58595 3.90377 2.55618 2.91091 1.73652 3.49278 2.80526 3.99999 3.23849 3.24782 2.29076 2.88811 2.60165 4.97455 3.72816 26 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 12 2.61033 4.79276 2.85349 2.55484 4.48627 2.63408 3.89174 3.94662 2.74888 3.51992 4.31979 1.66356 2.49296 3.05341 3.21043 2.35386 2.95969 3.48664 5.71096 4.36178 27 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 13 2.88527 4.43307 4.01698 3.45514 3.17362 3.91774 3.03287 2.61994 3.25293 1.20159 2.70147 3.76527 4.26316 3.58532 3.49155 3.21133 3.11455 2.56140 4.84633 3.56448 28 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 14 1.98627 4.61857 3.12281 2.67738 4.27661 2.67631 3.88311 3.70465 2.72677 3.31584 4.12242 2.47831 2.29419 3.05441 3.16567 2.60401 2.40383 3.28277 5.54504 4.23586 29 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 15 1.30613 4.36116 3.55537 3.27389 4.40288 3.14117 4.35559 3.74161 3.32081 3.47306 4.34721 3.46120 1.54741 3.62966 3.63138 2.60661 2.90563 3.26127 5.75480 4.54470 30 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 16 2.68829 4.90653 2.90386 2.52060 4.38204 3.37612 3.78251 3.83359 2.53356 3.39631 4.20811 3.01810 2.99574 1.61781 2.94991 2.12187 2.97878 3.43880 5.57977 4.23708 31 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 17 2.67869 4.75356 2.89830 2.71247 4.45527 3.27812 4.04811 3.89418 2.90874 3.56649 4.43516 1.12067 3.92967 3.25669 3.29812 2.76097 2.42728 3.46369 5.74445 4.40217 32 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 18 3.99179 5.12367 4.95503 4.72339 1.00701 4.66196 3.57396 3.62539 4.54585 2.89463 4.19886 4.30025 4.95132 4.40223 4.49429 4.04845 4.20602 3.56457 3.68154 1.14146 33 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 19 1.94149 4.28446 4.12486 3.67249 3.80888 3.55713 4.47453 2.40578 3.59088 2.67692 3.71555 3.82104 4.15572 3.87386 3.84012 2.95831 2.49064 1.22419 5.39962 4.19656 34 v - - 2.68607 4.42235 2.77530 2.73133 3.46364 2.40507 3.72505 3.29364 2.67751 2.69365 4.24700 2.90357 2.73636 3.18156 2.89811 2.37897 2.77530 2.98528 4.58487 3.61513 0.20757 1.71248 4.95773 1.01433 0.45043 0.48576 0.95510 20 1.34651 4.28258 3.61331 3.29696 4.50459 2.13209 4.36852 3.93728 3.35994 3.60657 4.40996 3.43457 3.80593 3.62825 3.68604 1.54944 2.81865 3.34320 5.83087 4.62463 41 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 21 1.75319 4.54948 3.18220 2.77278 4.26074 3.24845 3.95943 3.66808 2.82392 3.30959 4.13073 2.54625 2.03578 3.15182 3.23887 2.61285 2.50480 3.24774 5.55575 4.26707 42 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 22 2.29471 4.72939 3.00581 2.68358 4.29995 3.33742 3.91790 3.71157 2.70911 3.32835 4.18457 3.13092 1.50662 2.49757 3.09041 2.73609 2.99404 3.33325 5.57293 4.27041 43 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 23 2.35267 4.74424 3.08221 2.58652 4.10060 3.42149 3.76054 3.47818 2.54582 3.11134 3.95357 3.07038 3.04302 1.74438 2.96455 2.69675 2.90227 2.73088 5.38333 4.07229 44 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 24 3.94715 5.12580 4.84139 4.58798 1.71473 4.61070 3.58607 3.61953 4.42197 2.90396 4.20672 4.25901 4.91781 4.34578 4.42101 4.00243 4.16943 3.55304 3.70671 0.69887 45 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 25 2.24357 4.42430 3.38390 2.88703 2.93274 3.35884 3.93277 3.23189 2.87578 2.92159 3.79059 3.26702 2.26385 3.19262 3.26054 1.86540 2.84867 2.92312 5.23143 3.96265 46 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 26 2.95317 5.48023 1.34560 2.24672 4.70821 3.35979 2.46401 4.28654 2.74362 3.77924 4.59881 2.33672 3.92884 2.96449 3.29515 2.86354 3.22364 3.86476 5.89770 4.41218 47 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 27 4.00399 5.13385 4.95018 4.72043 1.22326 4.66512 3.56964 3.64496 4.54389 2.91247 4.21778 4.29797 4.95486 4.40123 4.49459 4.05216 4.21810 3.58225 3.67710 0.93422 48 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 28 2.15049 4.33631 3.50920 2.95801 3.57571 2.59552 3.89998 2.90720 2.91327 2.64215 2.96167 3.33861 3.35983 3.21828 3.26833 2.78334 2.57181 2.13794 5.01384 3.77921 49 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 29 1.89199 4.28432 3.55921 3.32752 4.58832 1.15790 4.43622 4.02681 3.45609 3.70244 4.50577 3.44723 3.81136 3.70850 3.76546 1.93402 2.83889 3.39583 5.91393 4.71495 50 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 30 3.81405 5.15378 4.39611 4.20687 2.40634 4.27023 3.85209 3.77892 4.05584 3.13498 4.41743 4.20029 4.74153 4.27017 4.15832 3.90817 4.10583 3.66820 4.05920 0.52563 51 Y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 31 2.67633 4.75819 3.05174 2.63878 4.09290 3.41151 1.77918 3.58461 2.59819 3.19886 4.04666 3.10707 2.60024 3.00762 2.98665 2.74655 2.51095 3.24516 5.39310 4.05874 52 h - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.16826 4.23538 1.96335 0.61958 0.77255 0.48576 0.95510 32 3.26553 5.03405 3.36867 3.15606 3.46152 3.65292 0.75263 4.00279 2.99417 3.46646 4.53098 3.55429 4.22021 3.52673 3.24386 3.33585 3.57867 3.73395 4.92230 3.40731 53 h - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02513 4.09225 4.81460 0.61958 0.77255 0.50895 0.91911 33 3.07372 4.46258 4.65464 4.13593 3.44395 4.28146 4.78080 2.00506 3.98630 1.98712 2.26339 4.35253 4.62812 4.23895 4.17014 3.64800 3.33967 1.09736 5.33343 4.15630 54 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.10625 4.16931 2.46112 0.61958 0.77255 0.43848 1.03569 34 2.05523 4.31769 3.47721 3.03870 4.05819 3.18078 4.08163 3.38637 3.02431 3.11908 3.97869 3.31948 1.72633 3.33968 3.37943 2.19419 2.80287 2.48109 5.43455 4.19650 55 p - - 2.68494 4.42238 2.77532 2.73136 3.46367 2.40506 3.72507 3.29319 2.67754 2.69368 4.24702 2.90359 2.73752 3.18159 2.89813 2.37900 2.77532 2.98531 4.58490 3.61516 0.22124 1.65603 4.88208 1.21782 0.35080 0.57710 0.82446 35 2.60786 4.76209 2.79537 2.54411 4.43991 3.23770 3.89277 3.91482 2.75329 3.50170 4.31880 1.48458 2.78362 3.06877 3.19433 2.26016 2.96611 3.46343 5.68315 4.33396 63 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02347 4.15974 4.88208 0.61958 0.77255 0.57710 0.82446 36 2.62864 4.28324 3.62709 3.08392 3.39186 3.61069 3.92008 2.71172 2.97333 2.00872 2.07200 3.02990 4.01388 3.30197 3.27264 2.63989 2.87508 2.51253 4.88442 3.65053 64 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02347 4.15974 4.88208 0.61958 0.77255 0.43261 1.04643 37 3.16249 5.79703 0.99360 1.68178 5.07746 3.33818 3.94034 4.62717 3.02772 4.10834 4.98734 2.79625 3.99447 3.11669 3.66804 3.01802 3.46496 4.18165 6.24773 4.70528 65 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 38 2.63183 4.86872 2.40306 2.47463 4.40341 2.78584 3.79887 3.85270 2.64163 3.42273 4.21906 2.98019 1.96385 2.94774 3.12263 2.32733 2.59688 3.43385 5.62406 4.26234 66 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 39 1.95443 4.88754 2.97738 2.55265 4.13873 3.46337 2.05488 3.62269 2.48188 3.21333 4.05355 3.05044 3.91864 2.48423 2.87045 2.77451 2.99078 3.29472 5.39972 4.05907 67 a - - 2.68620 4.42227 2.77521 2.73125 3.46355 2.40514 3.72422 3.29356 2.67742 2.69357 4.24691 2.90348 2.73741 3.18148 2.89802 2.37888 2.77521 2.98520 4.58479 3.61505 0.12171 2.22968 4.95773 0.33550 1.25521 0.48576 0.95510 40 2.42517 4.71090 3.09298 2.56335 3.96253 2.28179 3.71856 3.37144 2.53805 3.00354 3.83951 3.05755 3.15909 2.35602 2.97028 2.69714 2.87257 3.06783 3.68035 3.96193 69 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 41 2.30860 4.82456 2.97127 2.52020 4.29687 3.36075 3.75878 3.73060 2.54237 3.31004 4.11239 3.01474 2.66623 1.98987 2.98601 2.13218 2.90672 3.34137 5.51827 4.17950 70 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 42 2.45354 4.42534 3.36344 3.12267 4.47042 3.13757 4.28750 3.94516 3.22413 3.60426 4.44368 3.37402 1.31545 3.54097 3.55806 1.62930 2.92577 3.40632 5.78797 4.53612 71 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 43 2.23671 4.37343 3.45448 2.90431 3.57355 2.44656 3.86809 2.91497 2.85770 2.16653 2.90914 3.30805 3.15981 3.17314 3.22058 2.79751 2.85277 2.67749 5.00954 3.76957 72 l - - 2.68624 4.42231 2.77501 2.73106 3.46311 2.40502 3.72500 3.29360 2.67747 2.69361 4.24696 2.90353 2.73745 3.18152 2.89807 2.37893 2.77525 2.98524 4.58483 3.61509 0.10561 2.37309 4.95773 1.07001 0.42008 0.48576 0.95510 44 2.12340 4.38383 3.38529 3.05366 4.47253 1.70223 4.21103 3.91314 3.14631 3.55364 4.35630 3.31795 1.94162 3.43411 3.52186 2.07473 2.84473 3.36028 5.77312 4.52714 77 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 45 1.80353 4.25673 3.76395 3.27749 3.80914 3.32290 4.16836 2.98717 3.22397 2.85471 3.75874 3.50195 3.93068 3.51134 3.53060 2.29698 2.16134 1.78290 5.26222 4.05044 78 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 46 4.00983 5.24101 4.69029 4.49702 3.13586 4.17592 4.42301 4.06898 4.22332 3.39379 4.68243 4.57875 4.72625 4.59071 4.28192 4.20979 4.33211 3.96816 0.39043 3.12160 79 W - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 47 1.98944 4.45015 3.34990 2.84192 3.94056 2.26848 3.91950 2.69321 2.83075 3.00111 3.85134 3.23149 3.02031 3.15192 3.22968 2.15694 2.83622 2.98982 5.30467 4.04195 80 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 48 1.35523 4.27386 3.68242 3.31157 4.37793 3.08189 4.33254 3.75109 3.31297 3.46376 4.28952 3.45041 3.81815 3.60061 3.63215 1.51251 2.22013 3.23042 5.72807 4.52196 81 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07022 4.23538 2.93117 0.61958 0.77255 0.48576 0.95510 49 2.29498 4.83617 2.78156 2.13961 4.34711 3.32518 3.86531 3.73647 2.71505 3.36849 4.21536 3.01872 1.62190 3.04524 3.14969 2.74131 3.01383 3.36425 5.61085 4.27807 82 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02281 4.18797 4.91032 0.61958 0.77255 0.45055 1.01411 50 3.15781 4.66414 4.12152 3.68182 2.03244 2.78747 3.71010 3.19636 3.60193 2.75702 3.81681 3.82077 4.42189 3.78809 3.81619 3.36191 3.40556 3.01916 4.04416 1.12969 83 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.12171 4.23538 2.30141 0.61958 0.77255 0.48576 0.95510 51 1.99502 4.33083 3.34176 2.98542 4.38237 1.77242 4.13190 3.81928 3.06031 3.46050 4.26464 3.25702 2.69467 3.35248 3.43956 1.80510 2.78377 3.28211 5.68516 4.43699 84 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02400 4.13767 4.86002 0.61958 0.77255 0.41988 1.07039 52 1.72584 4.40108 3.44557 2.91910 3.77070 3.41032 3.93088 3.08803 2.87695 2.81388 2.90670 3.29848 2.65130 3.20108 3.24945 2.71801 2.37244 2.80994 5.18179 3.93591 85 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 53 2.95686 5.06973 2.77349 2.08813 4.57694 3.43030 4.04006 4.02741 2.89837 3.63007 4.52617 3.13667 1.08640 3.24282 3.30438 2.98227 3.28666 3.65727 5.78181 4.48588 86 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.33057 4.23538 1.32047 0.61958 0.77255 0.48576 0.95510 54 2.25107 4.25824 3.55140 3.11415 3.53091 3.39010 4.01997 2.67502 3.00874 1.62845 3.51291 3.41283 3.93171 3.36665 3.29855 2.43572 2.85238 2.46859 5.06680 3.81770 87 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02949 3.93430 4.65665 0.61958 0.77255 0.33810 1.24871 55 3.08459 5.16857 3.60649 2.88967 4.53680 3.76749 3.70509 3.88106 1.67318 2.65698 4.24662 3.29527 4.11737 2.84591 1.29469 3.10055 3.25268 3.58599 5.47919 4.29282 88 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.10561 4.23538 2.45636 0.61958 0.77255 0.48576 0.95510 56 3.04861 5.64300 1.66419 1.14586 4.93133 3.30207 3.85540 4.46111 2.88260 3.95106 4.80651 2.76311 3.92972 3.02213 3.48660 2.92376 3.33904 4.02539 6.09422 4.58137 89 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02362 4.15339 4.87574 0.61958 0.77255 0.58410 0.81556 57 3.31858 5.46081 0.58605 2.55676 4.88192 3.44818 4.21406 4.53990 3.35660 4.10105 5.09444 3.12394 4.12138 3.45994 3.90420 3.25531 3.66618 4.15188 5.99260 4.72010 90 D - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02362 4.15339 4.87574 0.61958 0.77255 0.42884 1.05343 58 4.00983 5.24101 4.69029 4.49702 3.13586 4.17592 4.42301 4.06898 4.22332 3.39379 4.68243 4.57875 4.72625 4.59071 4.28192 4.20979 4.33211 3.96816 0.39043 3.12160 91 W - - 2.68599 4.42226 2.77521 2.73124 3.46355 2.40514 3.72496 3.29355 2.67742 2.69356 4.24691 2.90348 2.73741 3.18148 2.89802 2.37888 2.77521 2.98520 4.58478 3.61504 0.09911 2.43807 4.95773 0.37235 1.16832 0.48576 0.95510 59 2.32418 4.84914 2.92398 2.48221 4.27443 2.58227 2.88078 3.71456 2.54727 3.29361 4.09436 2.59727 3.84469 2.88786 3.01058 1.93893 2.90329 3.33274 5.50467 4.15586 93 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 60 1.99220 4.36950 3.44276 2.88744 3.58635 2.95782 3.85725 2.95344 2.84747 2.65769 3.53992 3.29130 3.37613 3.15802 3.21649 2.56079 2.53571 2.42851 3.45554 3.77042 94 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 61 2.95369 4.62123 3.78249 3.41113 2.83202 3.75468 3.89000 3.15828 3.28413 2.79611 3.85789 3.65853 4.25434 3.62866 3.53431 3.15033 2.49207 2.95904 4.44728 1.10110 95 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.26539 4.23538 1.52043 0.61958 0.77255 0.48576 0.95510 62 1.82525 4.17595 3.32119 3.07966 4.35948 1.48283 4.21227 3.77678 3.20559 3.46334 4.28222 3.25955 3.67925 3.47709 3.53044 2.02087 2.71040 3.20521 5.69132 4.47373 96 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02765 3.99765 4.71999 0.61958 0.77255 0.35830 1.20019 63 2.66439 4.61395 3.22184 2.72164 3.84432 3.50146 3.80913 3.20498 2.63235 2.26646 3.75557 3.17873 2.03459 2.65261 3.00921 2.78287 2.65857 2.94517 5.21569 3.94063 97 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15900 4.23538 2.02095 0.61958 0.77255 0.48576 0.95510 64 2.97501 4.72152 3.69515 3.62663 4.75293 0.44969 4.72709 4.41398 3.83869 4.03735 5.01923 3.86029 4.11955 4.14514 4.04400 3.15443 3.47402 3.89805 5.78168 4.86461 98 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02490 4.10128 4.82362 0.61958 0.77255 0.63826 0.75122 65 1.97393 4.31613 3.28880 3.01653 4.36494 2.36237 4.17721 3.77291 3.12567 3.44935 4.28003 3.27337 1.47165 3.42282 3.47506 2.50340 2.80894 3.25557 5.68385 4.45046 99 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02490 4.10128 4.82362 0.61958 0.77255 0.63826 0.75122 66 2.00110 4.33537 3.33750 2.91387 4.22524 2.64268 4.03110 3.64327 2.93994 3.29369 4.11006 3.21950 2.06730 3.24891 3.32683 2.11189 2.26283 3.17307 5.54203 4.28760 100 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09062 4.10128 2.65812 0.61958 0.77255 0.54312 0.86973 67 1.38526 4.26065 3.41884 3.06130 4.27327 3.03862 4.15208 3.67612 3.09897 3.35617 4.18166 3.28999 2.74390 3.39867 3.44797 1.77424 2.75678 3.17505 5.60891 4.37728 101 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.11522 4.09270 2.38450 0.61958 0.77255 0.64665 0.74192 68 1.76927 4.24812 3.36503 2.94539 4.09893 3.05923 4.01992 3.47902 2.94935 3.16810 4.00372 3.22125 2.77351 3.26175 3.31232 2.17626 1.92705 3.04205 5.44545 4.20621 102 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02745 4.00493 4.72727 0.61958 0.77255 0.72492 0.66235 69 1.75776 4.24366 3.52606 3.04145 3.63057 3.32468 3.97423 2.86272 2.96724 2.64124 2.38982 3.34826 3.87257 3.29626 3.28698 2.39616 2.79455 2.60837 5.09607 3.86562 103 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02745 4.00493 4.72727 0.61958 0.77255 0.72492 0.66235 70 1.41950 4.16383 3.39240 3.11446 4.31887 1.88908 4.21115 3.72799 3.20495 3.41866 4.23871 3.28038 3.68216 3.47854 3.52795 2.06970 2.70149 3.17268 5.65779 4.44499 104 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02745 4.00493 4.72727 0.61958 0.77255 0.47517 0.97228 71 1.97172 4.51122 3.13458 2.76458 4.23016 3.21520 3.95856 3.59816 2.82853 3.27868 4.11396 2.05576 3.82562 3.16051 3.23098 2.59969 1.81026 3.18937 5.53789 4.25237 105 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02347 4.15974 4.88208 0.61958 0.77255 0.57710 0.82446 72 1.96241 4.51682 3.21196 2.69356 3.84120 3.40175 3.79266 3.21293 2.67177 2.89067 3.74747 3.13946 3.29379 2.56922 3.08013 2.43540 2.83469 2.29941 5.20071 3.92519 106 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02347 4.15974 4.88208 0.61958 0.77255 0.57710 0.82446 73 2.32688 4.27045 3.67661 3.12704 3.49997 3.58133 3.99544 2.09667 3.06522 2.51061 3.45342 3.46990 2.71132 3.36037 3.38514 2.87413 2.40086 2.14263 4.99146 3.76982 107 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02347 4.15974 4.88208 0.61958 0.77255 0.43261 1.04643 74 2.36958 4.34070 3.47690 2.91076 3.48094 3.58428 3.84026 2.84313 2.86055 2.55518 2.98091 3.00160 3.96639 2.89224 3.21548 2.34637 2.84385 2.19839 3.50637 3.68706 108 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 75 2.21913 4.78590 3.02867 2.50863 4.03853 3.45001 2.44514 3.09943 2.50042 3.07228 3.89697 2.43361 3.36218 2.85913 2.94606 2.68468 2.87812 3.13871 5.32111 3.99494 109 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 76 2.23497 5.08468 2.22492 2.35156 4.43741 2.37014 3.68515 3.89943 2.21271 3.42882 4.20761 2.89562 3.23437 2.81039 2.97836 2.67240 2.94646 3.49665 5.60341 4.20899 110 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15159 4.23538 2.06997 0.61958 0.77255 0.48576 0.95510 77 2.61435 4.25198 3.63882 3.07080 3.34811 3.62527 3.90127 2.65435 2.98072 1.97031 2.58028 3.43168 4.00389 2.94032 3.28686 2.50697 2.84931 2.23371 4.84920 3.63271 111 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02472 4.10850 4.83085 0.61958 0.77255 0.63109 0.75931 78 2.54062 4.54643 3.12888 2.63776 3.27265 3.36051 3.77117 3.29023 2.64590 2.95344 3.80302 2.35921 3.83820 2.98128 3.06718 2.12228 2.22520 2.97931 5.22866 3.92759 112 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.10390 4.10850 2.49801 0.61958 0.77255 0.63109 0.75931 79 2.70012 5.03127 2.07406 2.26861 4.51616 2.03681 3.75248 3.99319 2.66702 3.53864 4.35012 2.43654 3.80474 2.90922 3.18963 2.27732 3.00669 3.56416 5.72436 4.31137 113 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.11551 4.03133 2.39316 0.61958 0.77255 0.70272 0.68367 80 2.50981 4.28683 3.38968 2.88023 2.97176 2.44106 3.81836 2.85687 2.83822 2.22557 3.49316 3.25697 3.87645 3.15436 3.18706 2.42720 2.79133 2.61594 4.90124 3.60658 114 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09574 3.94499 2.63187 0.61958 0.77255 0.40766 1.09423 81 2.46692 4.38637 3.46113 3.29812 4.35387 3.11252 4.39595 3.91697 3.39039 3.61937 4.52823 3.47330 3.87499 3.71983 3.66187 0.75145 2.96848 3.39229 5.70627 4.44142 115 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02400 4.13767 4.86002 0.61958 0.77255 0.60105 0.79460 82 3.14352 4.84756 3.78062 3.66385 4.62278 3.52049 4.71228 4.24579 3.74574 3.83979 4.90630 3.94004 0.45517 4.12606 3.95397 3.32109 3.60736 3.85914 5.72766 4.74961 116 P - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02400 4.13767 4.86002 0.61958 0.77255 0.60105 0.79460 83 1.51084 4.39946 3.28734 2.85795 4.03849 2.71235 3.96724 3.39562 2.88119 3.09939 3.94865 2.54428 3.82078 3.20022 3.26839 2.58816 2.81442 2.52025 5.39406 4.13293 117 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.10075 4.13767 2.52718 0.61958 0.77255 0.60105 0.79460 84 1.77224 4.62136 2.98868 2.59365 4.12935 3.28058 3.79718 3.53009 2.60643 3.15899 4.00320 3.04712 2.52556 2.44641 3.00871 2.63108 2.86729 3.16903 5.41598 4.11427 118 a - - 2.68583 4.42227 2.77522 2.73126 3.46356 2.40515 3.72497 3.29356 2.67743 2.69357 4.24692 2.90349 2.73742 3.18149 2.89803 2.37889 2.77522 2.98521 4.58479 3.61505 0.30678 1.73909 2.42464 0.28040 1.40847 0.67478 0.71186 85 3.05148 4.43371 4.57429 4.00059 2.41290 4.24060 4.50828 2.20602 3.88189 1.38316 2.08252 4.23302 4.49500 4.01918 4.02515 3.55792 3.27557 2.01368 4.94110 3.78710 120 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02817 3.97925 4.70160 0.61958 0.77255 0.74551 0.64339 86 1.30438 4.14582 3.39205 3.10937 4.28074 2.24902 4.19528 3.68279 3.18965 3.37988 4.20392 3.27207 3.67044 3.46637 3.50892 2.01625 2.68695 3.13931 5.62499 4.41321 121 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02817 3.97925 4.70160 0.61958 0.77255 0.49593 0.93906 87 3.83404 5.01304 4.80307 4.53359 1.21819 4.53803 3.52119 3.49571 4.36764 2.79299 4.07973 4.19378 4.83633 4.27608 4.35638 3.91674 4.05186 3.42723 3.64182 1.05018 122 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02400 4.13767 4.86002 0.61958 0.77255 0.50683 0.92231 88 2.51637 2.84584 3.41195 2.88227 3.17435 2.46246 3.88756 3.09074 2.85392 2.78628 3.65769 2.69487 3.88741 3.16650 3.23035 2.14189 2.81934 2.80805 5.11615 3.86492 123 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09391 4.18747 2.59767 0.61958 0.77255 0.45022 1.01470 89 2.40046 4.37385 3.33772 3.08259 4.42152 3.09078 4.23909 3.89295 3.17453 3.55262 4.38892 3.33058 2.64288 3.49013 3.51106 1.00270 2.87190 3.35348 5.73992 4.48752 124 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.19738 4.16931 1.80995 0.61958 0.77255 0.43848 1.03569 90 3.04647 4.76454 3.67657 3.54862 4.51844 3.44069 4.60526 4.12164 3.62447 3.72413 4.78581 3.83249 0.52175 4.00689 3.84275 3.22140 3.50503 3.74273 5.64393 4.64338 125 P - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.18074 4.07736 1.90788 0.61958 0.77255 0.38984 1.13062 91 2.09380 4.34236 3.39066 2.89370 3.95484 3.21671 3.94937 3.31578 2.87238 3.01570 3.86600 3.23430 2.53678 3.19054 3.25479 1.99218 2.35976 2.49687 5.32159 4.07073 126 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02473 4.10792 4.83027 0.61958 0.77255 0.40427 1.10101 92 3.09472 5.44574 0.85580 2.37506 4.97848 2.42150 4.05715 4.54422 3.14478 4.07062 4.95282 2.94335 4.02412 3.25257 3.73667 3.02534 3.44034 4.08003 6.14222 4.72044 127 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 93 4.00135 5.13490 4.94034 4.70848 1.31803 4.66139 3.57019 3.64590 4.53323 2.91433 4.21968 4.29438 4.95246 4.39635 4.48864 4.04869 4.21604 3.58268 3.67867 0.86972 128 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 94 2.72197 4.96875 2.81476 2.46466 4.28062 3.39165 2.58221 3.82293 2.55818 3.38476 4.19990 2.22049 3.88839 2.92052 3.00078 1.73398 2.99780 3.44339 5.52480 4.13820 129 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 95 2.63348 4.84612 2.95623 2.48238 4.20113 3.39987 3.09960 3.63252 2.51017 3.22081 4.02834 2.63067 2.32763 2.86448 2.96499 2.35337 2.36430 3.27500 5.44228 4.10077 130 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 96 2.63433 4.27592 3.64930 3.07911 3.37490 3.64570 2.80067 2.71752 3.00026 2.04327 2.72234 3.44312 3.17092 3.29768 3.31133 2.90499 2.86693 2.14528 4.86084 3.63724 131 l - - 2.68623 4.42230 2.77525 2.73128 3.46359 2.40518 3.72350 3.29359 2.67746 2.69360 4.24695 2.90352 2.73745 3.18108 2.89806 2.37892 2.77525 2.98524 4.58482 3.61508 0.47010 1.22018 2.52719 0.17540 1.82711 0.48576 0.95510 97 2.65786 4.79349 2.90368 2.54955 4.19418 2.12172 2.13517 3.70044 2.61561 3.29433 4.12549 3.03476 2.76566 2.98305 3.03491 2.70912 2.95959 3.32909 5.46559 4.12060 133 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02347 4.15974 4.88208 0.61958 0.77255 0.43261 1.04643 98 2.88344 4.89412 3.09320 2.81265 4.02246 3.48462 2.43880 3.84371 2.79131 3.41473 4.31714 3.26219 1.20852 3.23580 3.13272 2.95334 3.20324 3.49849 5.37210 3.97423 134 p - - 2.68603 4.42266 2.77560 2.73164 3.46395 2.40454 3.72005 3.29395 2.67782 2.69396 4.24730 2.90364 2.73720 3.18187 2.89841 2.37872 2.77519 2.98509 4.58518 3.61544 0.72113 1.27045 1.45632 1.88261 0.16510 0.48576 0.95510 99 1.54088 4.16097 3.37171 3.07121 4.28867 2.30110 4.16812 3.70211 3.14847 3.38498 4.20336 3.25379 3.66936 3.42804 3.48050 1.66168 2.68667 3.15482 5.62387 4.40577 143 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02818 3.97912 4.70146 0.61958 0.77255 0.74562 0.64329 100 2.17236 4.33857 3.40749 2.94430 3.64330 3.37481 3.93923 2.85339 2.87419 1.96955 3.58864 3.30324 2.44643 3.22866 3.21026 2.72219 2.84334 2.62706 5.12775 3.88009 144 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02818 3.97912 4.70146 0.61958 0.77255 0.74562 0.64329 101 2.75978 4.86827 2.65763 2.04622 4.32479 3.28454 3.84347 3.74973 2.68330 3.36875 4.26024 2.97670 1.54208 3.04208 3.08636 2.79321 3.07665 3.39844 5.55694 4.25301 145 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02818 3.97912 4.70146 0.61958 0.77255 0.74562 0.64329 102 2.52433 4.69577 2.30941 2.42424 4.30217 2.19075 3.77277 3.74072 2.65754 3.33801 4.15095 2.91227 3.75650 2.94169 3.13124 2.19781 2.41626 3.31837 5.55567 4.20779 146 g - - 2.68603 4.42229 2.77523 2.73127 3.46357 2.40516 3.72447 3.29358 2.67744 2.69358 4.24693 2.90350 2.73743 3.18119 2.89804 2.37890 2.77523 2.98522 4.58481 3.61507 0.33139 1.29831 4.70146 0.22288 1.61048 0.50836 0.92000 103 1.57639 2.35766 3.76871 3.31365 3.97562 3.10088 4.20872 3.34310 3.25763 3.06546 3.92417 3.44298 2.72167 3.53539 3.55261 2.05686 2.74323 2.94108 5.38573 4.18682 148 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02420 4.12940 4.85174 0.61958 0.77255 0.41537 1.07909 104 1.93823 4.28922 3.55197 3.30961 4.58468 1.22496 4.42081 4.02569 3.43304 3.69677 4.49855 3.43887 3.81037 3.68822 3.74841 1.78133 2.83756 3.39644 5.90717 4.70488 149 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 105 2.33589 4.79855 2.98364 2.26507 4.24896 2.85002 3.74321 3.68238 2.55172 3.26763 4.06646 3.00440 3.06971 2.89016 3.01595 1.92579 2.48696 3.29824 5.48534 4.14338 150 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 106 2.01266 4.29307 3.53630 3.30504 4.59447 1.19481 4.42479 4.03726 3.43856 3.70836 4.51055 3.43692 3.81199 3.69286 3.75315 1.76634 2.84201 3.40454 5.91626 4.71318 151 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 107 2.84365 4.28599 4.33133 3.76778 3.33537 3.12319 4.35710 1.78369 3.64307 1.43768 3.25808 3.99058 4.34660 3.87648 3.83285 3.30238 3.08753 1.93515 5.00488 3.82216 152 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 108 3.33468 4.65624 4.98525 4.42084 3.22723 4.60720 4.94989 2.17884 4.28048 0.95087 2.51171 4.65134 4.81089 4.39269 4.39196 3.95575 3.56170 1.74401 5.27777 4.20983 153 l - - 2.68585 4.42246 2.77541 2.73145 3.46375 2.40506 3.72516 3.29375 2.67762 2.69338 4.24711 2.90344 2.73664 3.18106 2.89822 2.37908 2.77500 2.98540 4.58498 3.61524 0.32375 1.59905 2.59722 1.55534 0.23714 0.48576 0.95510 109 2.05196 4.68215 3.02841 2.55823 4.14015 2.78698 2.94881 3.56319 2.58943 3.17440 3.99056 3.03414 2.57027 2.93090 3.03389 2.33368 2.85214 3.19655 5.41440 4.09520 162 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09784 4.16555 2.55505 0.61958 0.77255 0.43615 1.03994 110 2.26433 4.68174 2.99571 2.59716 4.22966 3.30008 3.82325 3.65089 2.63790 3.26196 4.08452 3.05823 1.94168 2.51102 3.05873 2.25514 2.89320 3.26421 5.49434 4.18169 163 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02328 4.16773 4.89007 0.61958 0.77255 0.43749 1.03748 111 1.96389 4.38786 3.43926 2.89466 3.68578 3.45245 3.89045 3.02368 2.85737 2.44399 3.62730 3.28832 3.25256 3.17238 3.23260 2.24346 2.50358 2.39969 5.10114 3.85563 164 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 112 2.21788 4.78111 2.20674 2.33081 4.00780 3.46988 3.70505 2.78225 2.53384 2.66521 3.86401 3.01972 3.87530 2.87297 2.99077 2.70400 2.88619 3.05196 5.31248 3.98898 165 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 113 2.30293 4.63652 3.13974 2.62591 4.03781 2.82969 3.78623 3.44192 2.62952 2.61785 3.90716 2.52835 3.85422 2.96827 3.06681 2.03454 2.50914 3.10498 5.34569 4.04324 166 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 114 1.74503 4.38327 3.45947 2.95575 3.94096 2.35295 3.99375 2.80814 2.93389 3.00649 3.86210 3.29793 3.86764 3.24723 3.31253 2.18611 2.37002 2.96547 5.32074 4.07359 167 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 115 1.92528 4.66742 3.11413 2.60735 4.08458 3.37235 2.99535 3.49709 2.60889 3.12166 3.94509 3.07801 2.73075 2.95455 3.04686 2.27412 2.52806 3.14976 5.37696 4.06806 168 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 116 1.67671 4.34485 3.51875 3.03135 3.95977 2.62819 4.04932 3.33148 3.01285 3.03181 3.88761 3.33761 2.98173 3.31689 3.37798 2.27136 2.82287 2.12512 5.34631 4.10886 169 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 117 2.01692 5.02062 2.83055 2.01256 4.34641 2.92578 3.67295 3.79279 2.23151 3.34032 4.12774 2.92287 2.98522 2.80189 2.92381 2.67024 2.92385 3.41282 5.52921 4.15562 170 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 118 1.85204 4.76595 3.01178 2.59501 4.25481 3.36201 3.81573 3.66944 2.60142 3.27397 4.10197 3.06963 2.36241 2.12796 3.01747 2.69125 2.93451 3.29751 5.50721 4.18914 171 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 119 2.59698 4.46433 3.32034 2.83219 3.74986 3.45730 3.87643 3.10405 2.79849 1.82215 3.69503 2.69808 3.92981 3.14127 3.17207 2.17050 2.52832 2.83566 5.15191 3.89202 172 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 120 2.53589 4.45277 3.57075 3.42043 4.46654 3.17832 4.51079 4.04746 3.52027 3.74425 4.64877 3.57259 3.95024 3.84214 3.78257 0.65180 3.04605 3.49888 5.81150 4.55726 173 S - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 121 3.30886 4.98825 3.95720 3.85928 4.79831 3.65607 4.89250 4.45603 3.95148 4.03483 5.11007 4.12250 0.36478 4.32805 4.14175 3.49099 3.78122 4.05621 5.86748 4.92860 174 P - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 122 2.71647 4.97718 2.69156 2.19371 4.48754 2.07333 3.82625 3.94403 2.68837 3.50702 4.31578 2.62356 3.87907 2.98234 3.17111 1.72691 3.02352 3.52782 5.70329 4.32763 175 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 123 1.68464 4.63677 3.23890 2.76681 4.27095 2.34815 3.89109 3.67607 2.62809 3.29425 4.12078 3.17903 3.88015 3.06997 2.01006 2.67351 2.91611 3.27933 5.51652 4.23886 176 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 124 2.66478 4.94592 2.93050 2.26338 4.22465 3.43920 3.65946 3.65537 2.42146 2.77109 4.02594 2.95523 3.15944 2.06471 2.87550 2.22899 2.89969 3.30481 5.43526 4.08338 177 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 125 2.89205 4.92756 3.45998 2.93764 4.48941 3.54904 3.85448 3.93225 2.26934 3.46713 4.33918 3.31416 4.05302 3.02272 1.07487 2.36697 3.18045 3.56445 5.55384 4.32661 178 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 126 2.60073 5.11427 3.19596 2.61392 4.45190 3.58890 2.58641 3.86857 2.16582 3.37257 4.19179 3.09611 3.97243 2.40393 1.61078 2.86307 3.07204 3.52167 5.49277 4.21148 179 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 127 2.66867 4.98788 2.53262 2.40097 4.42902 2.84253 3.73721 3.88718 2.55888 3.43393 4.22055 2.06367 3.84486 2.87265 3.05034 2.14024 2.34361 3.47553 5.61997 4.23786 180 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 128 2.56464 4.46439 3.37039 2.91990 3.87092 3.37543 3.97090 3.24167 2.87793 2.19344 3.83782 3.29452 1.89418 3.23224 3.23789 2.08995 2.89986 2.94494 5.27784 4.00480 181 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 129 2.97386 2.41379 4.26722 3.81440 2.70468 3.85777 3.93362 2.98974 3.63386 2.66625 3.72399 3.89772 4.33222 3.87888 3.80202 3.25100 3.27297 2.80572 4.33026 1.14344 182 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 130 2.17110 5.19026 2.61698 1.38473 4.52609 3.39750 3.76165 3.96897 2.57083 3.51459 4.33175 2.90679 3.90654 2.56351 3.03832 2.79195 3.08532 3.58770 5.70164 4.30967 183 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 131 4.00983 5.24101 4.69029 4.49702 3.13586 4.17592 4.42301 4.06898 4.22332 3.39379 4.68243 4.57875 4.72625 4.59071 4.28192 4.20979 4.33211 3.96816 0.39043 3.12160 184 W - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 132 3.15366 4.60950 4.60200 4.10039 3.31992 4.24128 4.74322 2.28449 3.90492 1.79324 1.19666 4.32873 4.61197 4.16644 4.08159 3.62458 3.43284 2.00276 5.27181 4.11361 185 m - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 133 2.73269 4.82628 3.25362 2.77916 4.44930 2.66221 3.84348 3.86901 2.40136 3.42637 4.25834 3.19667 3.95276 3.00466 1.29867 2.44630 3.04194 3.47012 5.57289 4.31462 186 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 134 3.25687 5.36240 3.72143 2.98248 4.88010 3.83956 3.71736 4.20066 1.04381 3.59313 4.46865 3.35940 4.18958 2.84637 1.57979 3.23933 3.40058 3.88060 5.59035 4.45948 187 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 135 2.41581 4.39052 3.42867 3.03577 4.29119 3.16421 4.14033 3.69360 3.05164 3.36377 4.19229 3.32013 2.35976 3.37158 3.41712 1.95262 1.47558 3.22934 5.61965 4.37262 188 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 136 2.07518 4.25655 4.02641 3.50633 3.56976 3.10507 4.26483 2.18987 3.42338 2.51818 3.51333 3.74442 4.15935 3.69761 3.68186 3.01634 2.96911 1.36628 5.12456 3.91625 189 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 137 2.32705 4.75741 3.07451 2.59351 4.14104 3.41346 3.77234 3.52067 2.54519 3.14756 3.99071 3.07431 3.28725 1.63022 2.95687 2.70150 2.91540 2.85023 5.41425 4.10255 190 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 138 2.10084 4.56969 3.20954 2.68666 3.91171 3.41297 3.80361 3.29462 2.67104 2.95906 3.80737 3.13995 3.31551 2.62224 3.08971 2.04967 2.85507 2.35272 5.25656 3.97304 191 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 139 2.03835 4.36197 3.49335 3.06171 4.25369 3.15942 4.13913 3.65335 3.06433 3.32559 4.15135 3.33312 2.88120 3.37357 3.43303 1.93737 1.50116 3.19439 5.58943 4.34857 192 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 140 2.50172 4.41747 3.39313 2.92420 3.94049 2.06947 3.98198 3.30694 2.90717 2.22723 3.86881 3.28313 3.88254 3.23451 3.28119 1.90816 2.55238 2.97526 5.32069 4.06706 193 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 141 2.61060 4.75923 3.04464 2.59331 4.27538 2.16286 3.79853 3.69527 2.05312 3.29093 4.10328 3.06543 3.86313 2.95769 2.98271 2.43644 2.08798 3.30980 5.50819 4.19198 194 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 142 2.36020 4.33226 3.50842 3.16893 4.44628 1.76760 4.27204 3.87382 3.22416 3.53610 4.34561 3.37788 3.81596 3.51433 3.57282 1.66262 1.78446 3.32257 5.76566 4.53858 195 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02174 4.23538 4.95773 0.61958 0.77255 0.48576 0.95510 143 2.76762 5.11805 3.05573 2.49049 4.47101 2.67304 3.63880 3.89920 1.88682 3.39567 4.18368 3.00209 3.90000 2.23267 2.13303 2.74970 2.72242 3.51888 5.52618 4.20047 196 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01468 4.22833 * 0.61958 0.77255 0.00000 * // hmmer-3.1b2/testsuite/M1.sto0000664361611702660230000000004612473612615015327 0ustar wheelerteddy# STOCKHOLM 1.0 seq1 A seq2 A // hmmer-3.1b2/testsuite/Caudal_act.sto0000664361611702660230000001031012473612614017064 0ustar wheelerteddy# STOCKHOLM 1.0 #=GF ID Caudal_act #=GF AC PF04731.3 #=GF DE Caudal like protein activation region #=GF AU Kerrison ND #=GF SE DOMO:DM04892; #=GF GA 25.00 25.00; 15.30 15.30; #=GF TC 46.20 46.20; 21.30 21.30; #=GF NC -6.30 -6.30; 13.20 11.50; #=GF TP Family #=GF BM hmmbuild -F HMM_ls SEED #=GF BM hmmcalibrate --seed 0 HMM_ls #=GF BM hmmbuild -f -F HMM_fs SEED #=GF BM hmmcalibrate --seed 0 HMM_fs #=GF AM globalfirst #=GF RN [1] #=GF RM 11729123 #=GF RT Phosphorylation of the serine 60 residue within the Cdx2 #=GF RT activation domain mediates its transactivation capacity. #=GF RA Rings EH, Boudreau F, Taylor JK, Moffett J, Suh ER, Traber #=GF RA PG; #=GF RL Gastroenterology 2001;121:1437-1450. #=GF DC The following Pfam-B family may contain sequences that according to Prodom #=GF DC are members of this Pfam-A family. #=GF DR PFAMB; PB179679; #=GF DR INTERPRO; IPR006820; #=GF CC This family consists of the amino termini of proteins belonging to the #=GF CC caudal-related homeobox protein family. This region is thought to mediate #=GF CC transcription activation. The level of activation caused by mouse Cdx2 #=GF CC (Swiss:P43241) is affected by phosphorylation at serine 60 via the #=GF CC mitogen-activated protein kinase pathway [1]. #=GF CC Caudal family proteins are involved in the transcriptional regulation of #=GF CC multiple genes expressed in the intestinal epithelium, and are important in #=GF CC differentiation and maintenance of the intestinal epithelial lining. #=GF CC Caudal proteins always have a homeobox DNA binding domain (Pfam:PF00046). #=GF SQ 9 #=GS P79788_CHICK/13-172 AC P79788.1 #=GS CDX2_HUMAN/13-180 AC Q99626.2 #=GS HMD1_CHICK/1-132 AC P46692.1 #=GS CDX1_XENLA/13-142 AC Q91622.1 #=GS Q90262_BRARE/13-147 AC Q90262.1 #=GS CDX1_MOUSE/13-147 AC P18111.2 #=GS CDX4_HUMAN/13-171 AC O14627.1 #=GS CDX4_MOUSE/13-169 AC Q07424.1 #=GS Q91542_XENLA/16-147 AC Q91542.1 P79788_CHICK/13-172 MY.PGPVRHSGG.............LNLAAQNFV......GAAQYADYGGYH.........VNLDGA.QSPG....PVWAAPYAAPLRDDW.GAYGQGAPPPAAAAAVHGLNGGSPAAAMAYS.PVDFHHHHHHHPHAHHHVGPETHCSAGGMQTLGAAPAAAAASAAPEPLSPGGQRRGLCEWVRKPAQAPLGSQ CDX2_HUMAN/13-180 MY.PSSVRHSGG.............LNLAPQNFV......SPPQYPDYGGYH.VAAAAAAAANLDSA.QSPG....PSWPAAYGAPLREDW.NGYAPGGAAAAANAVAHGLNGGSPAAAMGYSSPADYHPHHHPHHHPHHPAAAPS.CASGLLQTLNPGPPGPAATAAAEQLSPGGQRRNLCEWMRKPAQQSLGSQ HMD1_CHICK/1-132 MY.PSPVRHPG..............LNLNPQNYV.....PGPPQYSDFASYHHVPGI.....NNDPHHGQPA....AAWGSPY.TPAKEDW.HSYGT...AAASAATNPGQFGF.........SPPDFNPMQPH.............AGSGLL........PPAISSSVPQLSPNAQRRTPYEWMRRSIPSTSSSG CDX1_XENLA/13-142 MY.PNPVRHPG..............LNLNPQNYV.....PAPPQYSDFPSYHHVPGI.....NSDPHHGQPG....GTWSS.Y.TPSREDW.HPYGPGPGASSANPTQIA............FSPSDYNPVQPP..............GSGLL........PPSINSSVPPLSPSAQRADPYEWMRRTGVPTTTTT Q90262_BRARE/13-147 MYHQGAVRRSG..............ISLPPQNFV......STPQYSDFTGYHHVP.......NMET.HAQSA....GAWGAPYGAP.REDW.GAYSLGPP....NSISAPMSNSSPGP.VSYCSP.DYNTMHGP..............GSAVL.......PPPPENIPVAQLSPERERRNSYQWMSKTVQSSSTGK CDX1_MOUSE/13-147 VY.PGPARPSS..............LGLGPPTYAPPGPAPAPPQYPDFAGYTHV..........EPA.PAPP....PTWAAPFPAP.KDDWAAAYGPGPTA......SAA....SPAP.LAFGPPPDFSPV..P........APPG.PGPGIL........AQSLGAPGAPSSPGAPRRTPYEWMRRSVAAAGGGG CDX4_HUMAN/13-171 MY.PGTLMSPGGDGTAGTGGTGGGGSPMPASNFA......AAPAFSHYMGYPHMP.......SMDP.HWPSL....GVWGSPYSPP.REDW.SVY.PGPSSTMGTVPVNDVTS.SPAA...FCS.TDYSNL.GPVGGGTSGSSLPGQAGGSLV.........PTDAGAAKASSPSRSRHSPYAWMRKTVQVTGKTR CDX4_MOUSE/13-169 MY.PGTLRSPGGSSTAGVGTSGGSGSPLPASNFT......AAPVYPHYVGYPHM.......SNMDP.HGPSL....GAWSSPYSPP.REDW.STY.PGPPSTMGTVPMNDMT..SPV....FGSP.DYSTL.GPTSGASNGGSLPDAASESLVS.........LDSGTSGATSPSRSRHSPYAWMRKTVQVTGKTR Q91542_XENLA/16-147 MY.PLSVRSTS..............NNHTAQNYV......SNQPYFNYVAYHHVP.......PMDDQ.GQPMEFGDSVWITEGGMELL..W.SWT.L.......TQIWHKSSDLSPNQ.FAYNS.SGYSSP.HP.............SGTGILH........SVDLTHAAANSPSALSQNSYEWMGKTVQSTSTGK #=GC seq_cons MY.PusVRpsG..............lsLssQNaV......usPQYsDasGYHHVs.......NhDst.spPs....usWuuPYusP.REDW.usYusGssus.ussssts.ss.SPs....asSPsDYssh.tP.............sGuGlL........ssstsusssshSPuupR+ssYEWMRKolQsousop // hmmer-3.1b2/testsuite/RRM_1.hmm0000664361611702660230000010233012473612615015705 0ustar wheelerteddyHMMER3/e [3.0 | March 2010] NAME RRM_1 ACC PF00076.13 DESC RNA recognition motif. (a.k.a. RRM, RBD, or RNP domain) LENG 71 ALPH amino RF no CONS yes CS yes MAP yes DATE Thu Jun 16 11:48:48 2011 NSEQ 79 EFFN 11.278137 CKSUM 864815979 GA 17.70 17.70 TC 17.70 17.70 NC 17.60 17.60 STATS LOCAL MSV -8.6173 0.71871 STATS LOCAL VITERBI -9.0843 0.71871 STATS LOCAL FORWARD -4.3052 0.71871 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.61685 4.43637 2.91462 2.58031 2.84654 2.78956 3.93130 2.76760 2.59921 2.44782 3.89672 2.96603 3.54165 3.19676 2.97931 2.76903 2.88528 2.56700 5.37618 3.50793 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.00000 * 1 3.24727 4.64122 6.58094 6.06531 4.94094 5.97868 6.53853 1.29007 5.95541 0.97189 4.07606 6.14949 6.22428 6.12754 6.03430 5.36803 4.72817 1.44013 6.88179 5.70490 1 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 2 3.58244 4.95748 5.54475 4.92948 1.12813 4.13259 5.08498 2.82214 4.14411 2.52204 3.47533 4.91355 5.11529 4.84605 3.39820 3.67123 3.33367 2.38490 4.01324 1.63143 2 f - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 3 4.67198 3.77129 6.83703 6.38279 5.23734 6.36035 7.14636 1.34686 6.34726 2.33710 3.22842 6.53185 6.54665 6.58971 6.50188 5.80870 4.92971 0.61559 7.39587 6.18326 3 V - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 4 3.12164 5.97423 3.48562 2.63790 4.45556 1.25648 4.42580 4.15640 2.05745 4.27930 5.01502 3.06495 4.63216 3.26201 2.43130 2.47640 2.47590 4.36460 6.40719 4.27329 4 g - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 5 3.48546 5.93542 2.87900 3.19501 4.13807 1.91626 4.45701 4.72435 3.20494 3.73704 4.98377 0.86607 4.12074 3.32356 3.25788 3.12447 3.71723 4.31267 6.38333 3.90882 5 n - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 6 5.00387 6.21419 6.99923 6.40478 2.79141 6.37725 6.65447 2.32072 6.25516 0.38342 4.18825 6.56077 6.40690 4.12549 6.16038 5.76297 5.20367 2.37584 6.64701 5.69275 6 L - E 2.68628 4.42235 2.77530 2.73134 3.46364 2.40486 3.72505 3.29364 2.67702 2.69365 4.24700 2.90327 2.73750 3.18157 2.89811 2.37873 2.77530 2.98529 4.58487 3.61514 0.06548 2.77638 6.79937 0.42688 1.05712 0.48576 0.95510 7 2.55271 5.95508 2.99163 3.17435 4.17641 3.20973 3.31728 4.76814 3.02033 4.25702 5.00063 2.79206 1.16177 3.53953 3.67070 2.48239 2.09057 4.34074 6.39633 4.99210 9 p - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 8 3.46722 5.93434 3.73340 2.09555 3.16491 4.24790 3.24112 4.73504 2.48825 3.30081 3.97811 2.88369 2.04516 2.91893 2.79081 2.52688 2.73560 3.91734 3.52840 2.50675 10 p - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 9 2.72985 5.96008 1.62586 1.96760 3.73099 2.71866 4.42961 3.67470 3.16695 3.62005 5.00252 2.42147 3.91329 3.34945 3.44120 2.23426 2.86335 3.81590 6.39683 3.53754 11 d - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 10 2.13712 2.65133 5.54957 4.93397 3.67158 3.70972 5.08587 2.15927 3.90652 2.25341 2.90227 4.91569 5.11582 4.20171 4.72496 4.06357 1.85188 1.80607 5.57864 2.66758 12 v - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 11 3.26396 5.97854 2.42291 2.86757 5.32407 3.65102 4.42690 4.81045 2.76058 3.70276 5.01915 2.51551 3.91243 3.31910 3.09213 2.10229 1.07104 4.36944 6.41090 4.99952 13 t - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 12 3.46446 5.97789 2.40253 1.22013 5.32415 4.23780 3.77950 4.81096 2.35418 3.35184 5.01824 3.04942 3.24443 2.51871 2.93819 2.69969 3.29668 4.36917 3.51790 3.60662 14 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 13 2.55524 5.97829 1.92465 1.50762 5.32471 3.87236 3.50039 4.81163 2.51209 3.81015 4.15950 3.06682 4.63125 2.14284 2.78514 2.49905 3.47359 4.36965 6.41016 4.99840 15 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 14 2.62039 5.97300 1.71983 1.70485 5.31706 3.46739 3.95766 4.17845 2.53672 2.71687 3.72926 3.07661 4.63232 2.46577 3.65375 2.70838 2.92928 3.77221 4.89289 4.99593 16 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 15 5.40202 6.51045 7.43565 6.86696 3.62987 6.98013 7.25298 1.63870 6.78387 0.43164 3.64517 7.18618 6.76188 6.42510 6.62360 6.45417 5.58566 2.52731 6.92965 6.09721 17 L - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 16 2.93773 5.88926 3.46687 2.15360 3.42253 4.25898 3.81718 3.95367 1.64445 2.85732 4.93969 3.26943 4.65151 3.55977 1.78582 2.68154 3.70145 3.10911 4.71412 2.79864 18 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 17 2.57682 5.97804 1.82509 1.77769 5.32437 3.91113 4.42469 4.81123 2.35782 3.37585 3.73069 3.27535 3.51868 2.05991 2.76522 3.00305 2.73549 4.36935 6.40997 4.99826 19 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 18 2.54987 4.95917 5.53013 3.81037 2.39318 4.74961 3.27785 2.06275 4.16124 1.23080 3.36712 4.90694 5.11347 4.83829 4.05787 3.18276 3.12960 2.58209 4.14386 2.70996 20 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 19 3.42618 4.38999 5.99216 5.39217 0.40897 5.22739 5.47421 3.19493 5.18514 2.25390 3.68386 5.37801 5.54049 5.25807 5.17338 4.55010 4.26624 3.50019 5.84494 3.89436 21 F - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 20 2.62154 5.97630 3.71295 2.06054 5.32183 2.24608 4.42520 4.10836 2.08192 4.28177 5.01684 2.85328 4.63168 2.73449 2.43531 1.68067 3.28304 3.49822 6.40870 4.32822 22 s - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 21 2.88814 5.97808 2.60124 2.11624 4.38535 2.64413 3.60801 4.04949 1.74336 4.28392 5.01841 2.75416 2.47020 2.26506 3.30913 2.89136 3.09478 3.92368 6.41000 4.34876 23 k - T 2.68626 4.42233 2.77527 2.73083 3.46304 2.40521 3.72502 3.29362 2.67749 2.69363 4.24698 2.90326 2.73747 3.18154 2.89782 2.37895 2.77527 2.98526 4.58485 3.61511 0.07202 2.68274 6.79937 0.13041 2.10160 0.48576 0.95510 22 2.89551 3.47436 5.43745 4.03687 1.28448 4.09908 3.86386 2.41550 3.82782 2.51049 4.08959 3.84872 5.10187 3.50800 4.68261 3.59632 3.81180 2.58173 4.32924 1.81179 25 f - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 23 2.84264 6.43715 3.91590 2.61078 6.41697 0.42577 5.47973 5.95018 4.52407 5.46437 6.27401 2.95737 2.97097 4.65924 5.08366 3.45246 4.59046 5.33809 7.61043 6.17114 26 G - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 24 2.92612 5.97586 2.45681 2.24379 4.23062 2.61093 3.94039 3.40386 2.22710 3.35377 5.01645 3.29304 2.01700 2.91354 2.86467 2.48169 2.97936 3.27903 6.40838 4.99725 27 p - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 25 3.58253 4.35206 5.53962 3.21276 2.74295 4.75118 5.08442 1.16602 3.90348 2.58026 3.71681 4.91145 4.34055 4.84353 4.72157 3.48801 3.32278 1.33148 5.58012 3.42836 28 i - E 2.68588 4.42230 2.77524 2.73128 3.46358 2.40517 3.72499 3.29358 2.67745 2.69359 4.24694 2.90351 2.73708 3.18151 2.89805 2.37891 2.77524 2.98523 4.58481 3.61508 0.12632 3.20141 2.55150 0.19437 1.73359 0.48576 0.95510 26 3.08612 4.42671 3.75597 1.80989 5.01886 3.85217 4.42588 3.01054 2.00298 2.42513 3.77241 2.95135 4.62084 3.11411 2.83044 2.68708 2.71343 2.20557 6.22179 4.85796 30 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00370 5.99706 6.71941 0.61958 0.77255 0.49679 0.93771 27 2.56226 5.95663 2.37630 2.00383 5.30282 2.72174 3.31953 3.77668 2.74773 4.26239 4.99700 2.54643 4.61022 3.26512 2.55023 1.75986 2.92681 3.90056 6.38865 3.66015 31 s - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00352 6.04563 6.76798 0.61958 0.77255 0.36584 1.18291 28 1.96183 2.97401 5.54861 4.93310 2.81071 4.14662 5.08585 1.37040 4.04211 2.24110 4.07608 4.08237 5.11583 4.84816 4.72473 3.09372 3.81478 1.66500 5.57894 3.90048 32 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 29 3.46503 5.96815 2.28843 2.32957 3.90225 4.23998 3.99191 3.74450 1.97454 3.11777 4.17836 2.75145 4.63338 2.59434 2.01992 2.49030 2.83775 3.16137 4.84931 3.92600 33 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 30 3.58324 4.95729 5.55181 4.93613 3.40020 4.75314 4.08478 1.48384 4.71987 1.46911 2.70907 4.91716 4.05755 4.85013 3.87115 3.21617 3.40092 1.51342 5.57925 4.40343 34 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 31 2.96481 3.94700 5.22873 4.02218 3.00508 4.70506 4.10271 2.19493 2.71886 2.50398 2.53168 4.02720 2.22690 4.66735 3.27207 2.62546 3.42877 1.71898 5.61988 3.46062 35 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 32 3.13024 3.81413 3.46318 2.89265 3.60312 3.77942 3.59975 2.82385 2.32845 3.24160 3.92106 2.53554 2.76092 3.33102 2.20352 2.52989 2.51727 2.84518 4.76766 3.25108 36 r - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.18120 6.07703 1.81132 0.61958 0.77255 0.48576 0.95510 33 3.35835 5.86824 1.10124 2.54213 5.21225 2.99467 3.92067 4.69802 2.14159 3.17865 4.90946 2.45883 4.52366 3.19954 3.54818 3.32030 2.93104 3.33789 6.30123 4.88999 37 d - E 2.68632 4.42303 2.77547 2.73135 3.46431 2.40573 3.72441 3.29400 2.67662 2.69432 4.24614 2.90377 2.73658 3.18101 2.89705 2.37867 2.77463 2.98575 4.58555 3.61537 1.30041 0.65592 1.56725 0.40200 1.10558 0.71956 0.66742 34 2.52960 5.76580 2.98830 2.03005 3.58330 2.89820 4.22374 3.67349 2.57896 2.98156 4.80717 2.20925 3.19866 2.51406 2.81318 2.55707 3.06983 3.11706 6.20012 4.13698 42 e - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00470 5.75901 6.48135 0.61958 0.77255 1.18627 0.36436 35 3.29875 5.80429 2.89488 2.72698 3.85692 3.03581 2.76786 3.82991 2.49853 3.37053 4.84552 2.69329 3.65789 3.15012 2.84804 2.78270 1.27277 4.19378 6.23827 4.82862 43 t - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00442 5.81999 6.54234 0.61958 0.77255 1.34643 0.30133 36 2.76543 5.82258 2.91931 2.65337 5.16790 1.38229 3.48053 3.50653 1.91495 3.54826 4.86318 2.63464 4.47850 3.16355 2.82982 2.80864 3.24182 4.21335 6.25510 4.84401 44 g - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00433 5.84057 6.56292 0.61958 0.77255 0.84697 0.55986 37 2.83864 5.87428 3.20221 2.79612 3.58587 3.54136 3.91313 4.70568 1.91313 3.39634 4.10494 2.73711 3.03301 2.53998 1.87355 2.20994 2.80416 3.84210 6.30684 4.21705 45 r - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00399 5.92291 6.64525 0.61958 0.77255 0.88158 0.53465 38 2.56915 4.50931 3.71744 3.16071 3.44401 3.38592 3.10471 3.66911 2.55157 2.98707 4.80530 2.46480 2.76066 3.51533 2.83413 1.39818 2.76693 4.10529 6.21917 4.84850 46 s - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00383 5.96277 6.68511 0.61958 0.77255 0.58889 0.80956 39 2.95707 5.93457 2.91288 3.12073 3.83677 3.50695 3.49117 4.76364 1.51017 3.40692 3.64638 2.67571 3.49747 3.03779 1.74677 2.74493 2.91306 3.88116 6.36795 4.27059 47 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00362 6.02010 6.74245 0.61958 0.77255 0.30637 1.33224 40 3.47057 4.16550 3.19921 3.20142 4.14458 0.90579 3.98974 4.06832 2.66963 3.81449 4.93910 2.83321 2.86526 3.28430 2.71359 3.45160 3.70175 3.41190 6.34391 4.95638 48 g - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 41 3.57907 3.45829 5.41566 3.42209 1.35268 4.73403 3.44844 2.75749 3.34017 2.62438 3.23729 4.85369 5.09901 3.92637 3.94172 3.17938 2.88261 2.40348 4.50341 1.95441 49 f - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 42 0.81057 2.45642 6.11573 5.81891 5.57306 1.16746 6.21305 3.79948 5.65424 4.69232 5.56399 5.34535 5.36861 5.77030 5.67918 3.52578 3.67805 3.36960 7.04209 5.91779 50 a - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 43 3.18429 4.96217 5.51711 4.90381 0.72595 4.74904 5.08067 2.75850 3.87105 2.46003 4.08077 4.90168 5.11298 4.83181 3.95246 3.66912 3.54952 2.70172 5.58294 2.41744 51 f - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 44 3.65443 3.70928 6.70728 6.23306 5.20263 6.17821 6.88451 1.50788 6.16835 2.53323 3.76285 6.34831 6.40837 6.41580 6.30564 5.60017 4.81909 0.52780 7.22590 5.99591 52 V - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 45 2.66080 5.97748 2.81451 1.44554 5.32356 4.23787 4.01807 4.15955 2.21334 3.89776 5.01787 2.95158 4.63136 2.69382 2.56215 2.85042 2.10520 3.18563 6.40956 4.30765 53 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 46 5.57267 6.63680 6.84357 6.64336 0.45942 6.36849 5.26121 4.79080 6.42415 3.42516 3.51551 6.05379 6.58700 6.12363 6.23741 5.75916 5.77210 3.28893 5.33767 1.48935 54 F - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 47 2.29359 5.97692 2.21144 1.72776 3.86918 3.93402 3.15913 3.96207 2.13843 3.73204 5.01738 3.19248 3.05505 3.03354 3.14648 3.01375 2.45316 3.32043 6.40915 4.99774 55 e - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 48 3.46509 5.97866 1.78483 2.67206 5.32495 4.23817 3.93421 4.81180 2.41174 4.28445 5.01902 2.01096 4.63178 2.79118 3.13701 1.76593 2.14177 3.98781 6.41058 4.18662 56 s - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 49 2.93171 5.96847 3.16257 1.95260 4.16368 3.76970 2.87407 3.33228 2.01038 3.07357 4.38746 3.48687 2.80517 2.66524 2.91498 2.31060 3.29397 2.88282 6.40297 3.58713 57 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 50 2.70744 5.96998 1.97273 1.41715 5.31269 3.75419 3.95991 3.65643 2.92164 3.79375 4.32542 3.48265 3.66288 3.32345 2.31887 2.42509 3.33310 3.05610 4.90689 4.07336 58 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 51 2.42321 4.83887 1.59545 2.25770 3.93296 2.71847 4.06364 3.86281 3.17436 3.59905 4.17214 2.98616 4.16117 2.71046 3.66478 1.93122 3.24279 3.65093 6.38502 4.02700 59 d - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 52 0.75413 4.96585 5.47890 4.86803 3.06805 4.74295 5.07305 3.01496 4.66729 2.53760 2.73552 4.88359 5.10729 4.05995 4.21808 3.06628 3.16054 2.46385 5.58661 3.75310 60 a - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 53 2.41943 4.46315 2.34190 1.75052 5.32263 3.44834 3.93415 3.14989 2.29917 3.23895 5.01730 2.85560 3.96835 2.52125 2.77815 3.17494 2.40522 3.68782 6.40908 4.99769 61 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 54 2.01435 5.97500 2.67201 2.47753 4.43134 4.23842 3.47746 4.18040 1.46444 3.55851 4.28258 2.91144 4.63189 3.07913 2.40471 2.58706 3.47891 3.54389 6.40775 3.57807 62 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 55 0.56421 2.77447 5.65011 5.05171 3.59393 4.85769 5.24983 2.61078 4.84979 3.07812 4.21082 5.04100 5.23829 4.99007 4.87270 3.42972 3.93373 2.47100 5.75182 4.57373 63 A - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 56 3.13904 4.96487 5.48770 4.87624 3.34029 4.74429 5.07480 1.59771 2.29675 1.34485 3.18271 4.88774 5.10853 3.68701 3.56832 3.77599 3.81340 1.92105 5.58578 3.88576 64 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 57 2.34378 5.97744 2.16474 1.88065 5.32351 3.59707 4.42482 3.72981 2.24150 3.40981 5.01784 2.98571 4.63136 2.17937 2.46952 2.55530 3.37806 3.47443 6.40953 4.03868 65 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.22013 6.07703 1.63328 0.61958 0.77255 0.48576 0.95510 58 1.89791 3.77451 3.07768 2.12033 5.18206 3.01379 3.79362 4.66853 2.18995 3.56566 3.99981 2.52963 4.49097 2.62684 2.80758 2.35467 2.72298 3.81015 6.26854 4.85715 66 a - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00424 5.86114 6.58349 0.61958 0.77255 0.20818 1.67166 59 2.65826 3.41181 5.35671 3.60871 3.27424 4.71734 5.04127 3.40819 2.92648 0.97610 2.21257 4.82019 5.08284 3.73496 4.08924 4.02066 3.17514 2.58543 5.59089 3.09458 67 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00346 6.06423 6.78658 0.61958 0.77255 0.42790 1.05519 60 3.19622 5.97879 1.92417 3.15709 5.32490 3.54208 3.19949 4.81165 2.78111 4.28451 5.01921 1.22131 3.02903 2.46343 3.16862 2.76591 3.37874 4.37000 6.41082 3.85413 68 n - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 61 3.18164 5.97530 3.51737 2.33168 4.09071 1.01009 3.54648 4.80610 2.45966 4.28051 5.01601 2.57312 4.63221 3.34761 3.05384 2.80210 3.16091 4.36587 6.40806 3.93821 69 g - S 2.68601 4.42237 2.77531 2.73135 3.46314 2.40524 3.72506 3.29366 2.67733 2.69366 4.24701 2.90358 2.73727 3.18114 2.89812 2.37898 2.77531 2.98460 4.58489 3.61515 0.10597 2.30830 6.79937 0.09526 2.39840 0.48576 0.95510 62 2.78993 5.91979 3.29816 2.62657 3.31127 3.61689 3.09984 2.93366 1.73309 3.09615 3.62280 3.72872 4.64428 2.61218 2.44595 2.69765 2.44510 3.60699 6.36713 3.22491 71 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 63 3.47430 4.39729 3.03743 2.07334 3.30767 3.71891 4.46838 2.72530 2.05408 3.05024 3.42600 3.20646 3.61029 2.69778 2.98297 2.91990 2.25158 2.88114 4.87648 3.55272 72 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 64 3.58106 4.96401 4.06659 4.12222 1.98037 4.09342 5.07536 1.72702 3.96438 1.48172 3.69836 4.88953 4.15824 4.81786 3.99696 3.55288 3.23925 1.85806 5.58497 3.10349 73 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 65 2.92679 4.74277 2.44335 2.39472 3.75714 2.08563 3.79085 4.80668 2.33722 3.16775 3.30211 2.14554 3.10112 3.08506 2.72357 2.97370 3.13656 4.36616 6.40808 3.74842 74 g - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 66 3.47091 5.98416 2.43719 2.92948 5.32998 1.22760 3.69228 4.81673 2.79706 3.48898 5.02481 1.95382 4.63652 2.88420 3.21262 2.33396 3.46707 4.37524 6.41617 5.00432 75 g - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 67 2.98576 3.70566 3.73291 2.90360 3.56382 4.24768 2.85362 4.73689 1.91423 3.35432 3.97849 2.58720 4.64073 3.10501 1.47405 2.62071 2.76137 4.31666 6.37869 3.63685 76 r - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 68 2.63047 4.34992 3.35255 1.94948 3.87311 4.24608 4.43470 3.83086 2.26926 3.20451 4.98651 2.77072 2.71028 2.97232 2.58087 3.06879 2.22428 2.45285 6.38353 3.91925 77 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 69 3.29598 3.41960 3.76282 4.92170 4.05056 4.03481 5.08352 1.36854 4.70864 1.29896 3.34589 4.90979 4.22465 3.86702 4.72014 3.59453 3.49678 1.96167 3.71166 4.40389 78 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 70 3.31428 5.95814 2.96897 2.31070 4.26780 3.70391 2.91435 4.03312 1.93601 2.76905 3.85430 3.49776 3.65343 3.13432 2.06934 2.59407 2.53727 3.03992 4.77079 3.33416 79 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00342 6.07703 6.79937 0.61958 0.77255 0.48576 0.95510 71 3.11204 3.50495 4.16667 4.85613 3.55682 4.74124 5.07069 1.67532 3.97978 2.32591 4.08606 4.87769 3.97655 4.80399 3.58928 3.17132 2.63092 1.06088 5.58816 4.41035 80 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00230 6.07591 * 0.61958 0.77255 0.00000 * // hmmer-3.1b2/testsuite/.dropbox.attr0000775361611702660230000000000212473610422016737 0ustar wheelerteddy{}hmmer-3.1b2/testsuite/h3.pm0000664361611702660230000000554512473612614015203 0ustar wheelerteddy#! /usr/bin/perl package h3; sub ParseTbl { my ($tblfile) = @_; my (@fields); $ntbl = 0; @tname = (); @tacc = (); @qname = (); @qacc = (); @fullE = (); @fullsc = (); @fullbias = (); @best1E = (); @best1sc = (); @best1bias= (); @nexp = (); @nreg = (); @nclu = (); @nov = (); @nenv = (); @ndom = (); @nrep = (); @ninc = (); @tdesc = (); if (! open(TBLFILE, $tblfile)) { print "FAIL: couldn't open table file"; exit 1 ; } while () { if (/^\#/) { next; } chop; @fields = split(' ', $_, 19); $tname[$ntbl] = $fields[0]; $tacc[$ntbl] = $fields[1]; $qname[$ntbl] = $fields[2]; $qacc[$ntbl] = $fields[3]; $fullE[$ntbl] = $fields[4]; $fullsc[$ntbl] = $fields[5]; $fullbias[$ntbl] = $fields[6]; $best1E[$ntbl] = $fields[7]; $best1sc[$ntbl] = $fields[8]; $best1bias[$ntbl] = $fields[9]; $nexp[$ntbl] = $fields[10]; $nreg[$ntbl] = $fields[11]; $nclu[$ntbl] = $fields[12]; $nov[$ntbl] = $fields[13]; $nenv[$ntbl] = $fields[14]; $ndom[$ntbl] = $fields[15]; $nrep[$ntbl] = $fields[16]; $ninc[$ntbl] = $fields[17]; $tdesc[$ntbl] = $fields[18]; $ntbl++; } close TBLFILE; 1; } sub ParseDomTbl { my ($domtblfile) = @_; my (@fields); $ndomtbl = 0; @tname = (); @tacc = (); @qname = (); @qacc = (); @qlen = (); @seqE = (); @seqsc = (); @seqbias = (); @domidx = (); @ndom = (); @cE = (); @iE = (); @domsc = (); @dombias = (); @hmmi = (); @hmmj = (); @iali = (); @jali = (); @ienv = (); @jenv = (); @accuracy = (); @tdesc = (); if (! open(DOMFILE, $domtblfile)) { print "FAIL: couldn't open domain table file"; exit 1 ; } while () { if (/^\#/) { next; } chop; @fields = split(' ', $_, 23); $tname[$ndomtbl] = $fields[0]; $tacc[$ndomtbl] = $fields[1]; $tlen[$ndomtbl] = $fields[2]; $qname[$ndomtbl] = $fields[3]; $qacc[$ndomtbl] = $fields[4]; $qlen[$ndomtbl] = $fields[5]; $seqE[$ndomtbl] = $fields[6]; $seqsc[$ndomtbl] = $fields[7]; $seqbias[$ndomtbl] = $fields[8]; $domidx[$ndomtbl] = $fields[9]; $ndom[$ndomtbl] = $fields[10]; $cE[$ndomtbl] = $fields[11]; $iE[$ndomtbl] = $fields[12]; $domsc[$ndomtbl] = $fields[13]; $dombias[$ndomtbl] = $fields[14]; $hmmi[$ndomtbl] = $fields[15]; $hmmj[$ndomtbl] = $fields[16]; $iali[$ndomtbl] = $fields[17]; $jali[$ndomtbl] = $fields[18]; $ienv[$ndomtbl] = $fields[19]; $jenv[$ndomtbl] = $fields[20]; $accuracy[$ndomtbl]= $fields[21]; $tdesc[$ndomtbl] = $fields[22]; $ndomtbl++; } close DOMFILE; 1; } 1; hmmer-3.1b2/testsuite/minifam0000664361611702660230000004517612473612615015703 0ustar wheelerteddy# STOCKHOLM 1.0 #=GF ID BCSC_C #=GF AC PF05420.2 #=GF DE Cellulose synthase operon protein C C-terminus (BCSC_C) #=GF PI BCSC_N; #=GF AU Moxon SJ #=GF SE Pfam-B_10335 (release 8.0) #=GF GA 25.00 25.00; 25.00 25.00; #=GF TC 162.20 162.20; 168.70 46.60; #=GF NC -118.00 -118.00; 23.70 21.00; #=GF TP Family #=GF BM hmmbuild -F HMM_ls SEED #=GF BM hmmcalibrate --seed 0 HMM_ls #=GF BM hmmbuild -f -F HMM_fs SEED #=GF BM hmmcalibrate --seed 0 HMM_fs #=GF AM globalfirst #=GF RN [1] #=GF RM 11260463 #=GF RT The multicellular morphotypes of Salmonella typhimurium and #=GF RT Escherichia coli produce cellulose as the second component #=GF RT of the extracellular matrix. #=GF RA Zogaj X, Nimtz M, Rohde M, Bokranz W, Romling U; #=GF RL Mol Microbiol 2001;39:1452-1463. #=GF DR INTERPRO; IPR008410; #=GF CC This family contains the C-terminal regions of several bacterial cellulose #=GF CC synthase operon C (BCSC) proteins. BCSC is involved in cellulose synthesis #=GF CC although the exact function of this protein is unknown [1]. #=GF SQ 7 #=GS BCSC_PSEFL/933-1262 AC P58937.1 #=GS BCSC_XANAC/1108-1489 AC P58938.1 #=GS BCSC2_ACEXY/929-1326 AC O82861.1 #=GS ACSC_ACEXY/943-1302 AC P37718.1 #=GS BCSC4_ACEXY/968-1307 AC Q9WX71.1 #=GS BCSC_ECOLI/784-1123 AC P37650.2 #=GS O67403_AQUAE/1-313 AC O67403.1 BCSC_PSEFL/933-1262 LSKITDVEAPFEARMPV..G.....DNTVALRVTPVHLSAGSVKAES.....LSRFGKGGTEPAGSQS.........................DSGVGLAVAFENPDQGLKADVGVSPLGFLYNTLVGGVSVSRPFEANSNFRYGANISRRPVTDSVTSFAGSED...GA....................GNKWGGVTANGGRGELSYDNQKL.GVYGY..ASLHELLGNNVEDNTRLELGSGIYWYLRNNPRDT.LTLGISGSAMTFKENQDFYTYGNGGYFSPQRFFSLGVPIRWAQSFDR..FSYQVKSSVGLQHIAQDGADYFPGDSTLQA......................TKNNPKYDSTSKTGVGYSFNAAAEYRLSSRFYLGGEIGLDNAQDYRQYAGNAYLRYLFEDL BCSC_XANAC/1108-1489 NNNSTAAALAALANEPLPAYLLSINASNTPIGQLARDILGNAALSEQLGAGDAAALRALAGSTAAAQQTPTGLADTLNAMAASGNGSRRLSQDDTGVGVGVRYRN..GGFSAELGSTPIGFQEQNLIGGVGYRG..ELGDTVSWSAEASRRAVTDSVLSFAGAQD..ARS....................GRQWGGVTSTGLSLSATADNGLL.GGYAN..LAAHRLQGNNVADNDHRQVDLGFYVHALETEHQS.LTAGVNLTTMQYDKNLSGFTYGHGGYFSPQDYVDLGFPVHWSGRTAGQTVNWKVDASVGVQHFSTEASPYFPTDPTLQQ......AAYDAASLAALLGLVDRYTDPVYASESRTGVSYNLSGAAEWQVAPQLFLGGRLTFNNARDYNQFSSNLYLRFVMDRL BCSC2_ACEXY/929-1326 MGRLTEANIPIVGRLPLQAG.....ASALTFSITPTMIWSGQLNTGSVYD..VPRYGTFMATQAANQCAGHSSCGGLDFLSANHTQRIAAGAGEAGFAPDVQFGN..SWVRADVCASPIGFPITNVLGGVEFSP..RV.GPVTFRVSAERRSITNSVLSYGGLRD..PNYNSEVGRYARQVYGHDLTKQWGSEWGGVVTNHFHGQVEATLGNT.ILYGG..GGYAIQTGKNVQRNSEREAGIGANTLVWHNANML.VRIGVSLTYFGYAHNEDFYTYGQGGYFSPQSYYAATVPVRYAGQHKR..LDWDVTGSVGYQVFHEHAAPFFPTSSLLQSGANYVASNFVQNALPTDYLSQETVNSAYYPGDSIAGLTGGFNARVGYRFTRNVRLDLSGRYQKAGNWTESGAMISAHYLIMDQ ACSC_ACEXY/943-1302 MGALTEASVPIVGRIPLQAG.....TSALTFTATPTFLTSGHL.PQTGYD..IPRFGTNLFALERNLQNQNN........SAEHRINTDTIGREAGVAPDVRFAN..NWVSADVGASPLGFTLPNVIGGVEFAP..RV.GPVTFRVSGERRSITNSVLSYGGMTD..ALT....................GKKWGGVVTNHFHGQVEATLGNT.IVYGG..GGYAIQTGHHVQSNTEVEGGLGANTLVYRNRKHE.VRVGVNLTYFGYKHNEDFYTYGQGGYFSPQSYFAATVPVRYSGHSGL..FDWDVTGSIGYQLFHEHSSAFFPTNPVYQA.........LANGLAGVSTAELSLESARYPGDDVGSLVGGFDGRVGYRVSHSLRLDLSGRFQKAGNWDEGGAMISAHYLIMDQ BCSC4_ACEXY/968-1307 LGQLTEFAVPITATLPFESW.....DHRLSFSVTPTLLFTGDP.LTNAVS..AHQFGTVAVNGARPWGYHHY....................YTQGVGLSLNYVN..RWFAADVGSSPLGFPITNVVGGLEFAP..RLTRNLGLRISGGRRMVTDSELSYAGERD..PGT....................GKLWGGVTRLFGHGALEWSARGW.NAYAG..GGFAYLGGTNVIGNTETEAGAGGSATVWQDHDRQWLRVGLDLMYFGYKRNAYFFTWGQGGYFSPRQYFGAMVPVEWSGHNRR..WTWFLRGEAGYQYYHSNAAPYFPTSAQLQG...................QADGSPPSYYGDSGASGLAGNMRGRLVYQLDHRLRIGLEGGYSRAGSWSETSGMWMAHYTLDGQ BCSC_ECOLI/784-1123 YSDLKAHTTMLQVDAPY..S.....DGRMFFRSDFVNMNVGSF.STNADGKWDDNWGTCTLQDCSGNR.SQS.....................DSGASVAVGWRN..DVWSWDIGTTPMGFNVVDVVGGISYS...DDIGPLGYTVNAHRRPISSSLLAFGGQKDSPSNT....................GKKWGGVRADGVGLSLSYDKGEANGVWAS..LSGDQLTGKNVEDNWRVRWMTGYYYKVINQNNRR.VTIGLNNMIWHYDKDLSGYSLGQGGYYSPQEYLSFAIPVMWRERTEN..WSWELGASGSWSHSRTKTMPRYPLMNLIPT..................DWQEEAARQSNDGGSSQGFGYTARALLERRVTSNWFVGTAIDIQQAKDYAPSHFLLYVRYSAAGW O67403_AQUAE/1-313 MDKLIHTSVYLNAEKKLARGFYLWTENDLIF.............LDSGGKPDYTHFGGINLPVIRDTDTSFI...................GIEPMVGVRVGRKS...YLKLGIGSTPFGNSKVRPTFRGIFEANYRE.EDILLRLTLKRDSVRDSLLSYVGAKD..PHA....................DREWGRVVEQGGEVKFQLGSGYR.ESFLSLKGGYYDIEGKNVNDNSRYFLEIYPSLYLGNLLIDE.NYLGLFFRYENYDKNENLFYFGNGGYFSPKNFVLLG..PKYTGYFYTDRLMFRLNLLLGFLRFETD...........................................GDTTNTLAADISGEFEYKLKEKISLIGGLGYRNSKDYDEVSLNMGVKYYFNGL #=GC seq_cons hupLTcsslsl.uchPl.tu.....ssslsFp.sss.l.sGph.spsshs..hspaGshshssstspp.tp......................-sGVulsVtatN..phhpADlGuoPlGFshssllGGlpaus..ch.sslsaplsupRRslTsSlLSauGtcD..sts....................G+cWGGVsssthcsplphstGth.tsYuu..uuht.lpGpNVpcNochchshGh.hhlhpstpcp.lplGlshphhsYc+NtshaTaGpGGYFSPQpYhuhslPV+auGpptp..hsWclsuSlGaQhacpcuusaFPssshlQs......................phssshYsusotsGluhshsuthtY+lspplhLshphsappAtsaspsuu.hhs+Yhhts. // # STOCKHOLM 1.0 #=GF ID Ependymin #=GF AC PF00811.9 #=GF DE Ependymin #=GF AU Bateman A #=GF SE Pfam-B_1391 (release 2.1) #=GF GA 25.00 25.00; 25.00 25.00; #=GF TC 119.70 119.70; 26.10 26.10; #=GF NC 22.20 22.20; 24.30 24.30; #=GF TP Family #=GF BM hmmbuild -F HMM_ls SEED #=GF BM hmmcalibrate --seed 0 HMM_ls #=GF BM hmmbuild -f -F HMM_fs SEED #=GF BM hmmcalibrate --seed 0 HMM_fs #=GF AM globalfirst #=GF DR PROSITE; PDOC00699; #=GF DC The following Pfam-B family may contain sequences that according to Prodom #=GF DC are members of this Pfam-A family. #=GF DR PFAMB; PB011734; #=GF DR INTERPRO; IPR001299; #=GF SQ 7 #=GS Q90492_9TELE/6-178 AC Q90492.1 #=GS Q91331_9TELE/6-179 AC Q91331.1 #=GS EPD1_CARAU/24-197 AC P13506.2 #=GS Q91464_9TELE/5-186 AC Q91464.1 #=GS Q91465_9TELE/6-184 AC Q91465.1 #=GS EPD_CLUHA/22-197 AC P32187.1 #=GS EPD1_ONCMY/26-200 AC P28770.1 Q90492_9TELE/6-178 RQPCQSPSMTSGTLTVCSTGGHTVASGDFSYDSTAKKLRFVEDN.HSNKTSHMD.VLIHFEEGLMYELDSKNESCKKHTLQSRKHPMELPADASHENEMYLGSPSISEQGLRLRLWSGKLPDLHA........QYSMWTTSCGCLTVSCAYHAEKND.LIFSFFKVETEVND.SQVFVPPAYCDG Q91331_9TELE/6-179 RVPCPSPSMISGTLTVRSSGGHTVATGEFNYDSTGKKLHFLEKNDDSNKTSHID.VLIHFEEGVIYELDSKNESCKKQTLKSRKHPMELPADASHDSEVYLGSLVVPEQGLRLRVWTGKLPDLHA........QYTMLTTSCGCLTVSCYYHSDKTD.LIFSFLDVETHVDD.PQVFVPRPTCDG EPD1_CARAU/24-197 RQPCHAPPLTSGTMKVVSTGGHDLESGEFSYDSKANKFRFVEDTAHANKTSHMD.VLIHFEEGVLYEIDSKNESCKKETLQFRKHLMEIPPDATHESEIYMGSPSITEQGLRVRVWNGKFPELHA........HYSMSTTSCGCLPVSGSYHGEKKD.LHFSFFGVETEVDD.LQVFVPPAYCEG Q91464_9TELE/5-186 REPCRSPPKTSGTLCVSSSKDDAIAWGEFKYDSSQKHLRFVEDTGKSNKTSYLD.VLIDFDKGVLYELDTKNESCRKQMLPSHKHPLELPSDATHVEELYLGRLDKTEQGLRVRLWSGNLSDHDAHHADHVQAHYSMTTTSCGCIAVSYTYHSEKND.LVFSFYNVKARVDD.SQAFTPPRYCEG Q91465_9TELE/6-184 REPCRSPSKTSGTVCVSSTKDDTIAWGEFKYDSTHKRLRFVEDCSKSNKTSHLD.VLIHFEEGVLYELDPKNESCKKEPLPSHKHPLEVPSDATHMDELYLGSPDKSDQGLRVRLWSGNISHHNP...DHTPDHYSITTTSCGCITVSCTYHGEKND.LIFSFYNVKTEVDD.MQVFNPPDYCDD EPD_CLUHA/22-197 HQPCRPPPQTHGNLWVTAAKGAPASVGEFNYDSQARKLHFKDDALHVNKTDHLE.MLIFFEEGIFYDIDSHNQSCHKKTLQSTYHCLEVPPNATHVTEGYLGSEFIGDQGVRMRKWRKRVPELDG........VVTVATTSCGCVTLFATLFTDSNDVLVFNFLDVEMKVKNPLEVFVPPSYCDG EPD1_ONCMY/26-200 PQHCTSPNMTGVLTVLALTGGEIKATGHYSYDSTDKKIRFTESEMHLNKTEHLEDYLMLFEEGVFYDIDMKNQSCKKMSLHSHAHALELPAGAAHQVELFLGSDTVQEEDIKVNIWTGSVPETKG........QYFLSTTVGECLPLSTFYSTDSIT.LLFSNSEVVTEVKA.PEVFNLPSFCEG #=GC seq_cons RpPCpSPshTSGTlsVsSotGcslAsGEFsYDSosKKLRFlEDs.+uNKTSHlD.VLIaFEEGVhYElDoKNESCKKpoLpS+KHshElPuDAoH.sElYLGS.slsEQGLRlRlWoGplP-hcu........pYohsTTSCGClsVSssYHu-KsD.LlFSFhsVcTcVcD..QVFsPPsYC-G // # STOCKHOLM 1.0 #=GF ID Como_SCP #=GF AC PF02248.7 #=GF DE Small coat protein #=GF AU Bateman A, Mian N #=GF SE Pfam-B_2294 (release 5.2) #=GF GA -60.00 -60.00; 25.00 25.00; #=GF TC 97.20 97.20; 171.90 171.90; #=GF NC -85.00 -85.00; 13.10 13.10; #=GF TP Domain #=GF BM hmmbuild -F HMM_ls SEED #=GF BM hmmcalibrate --seed 0 HMM_ls #=GF BM hmmbuild -f -F HMM_fs SEED #=GF BM hmmcalibrate --seed 0 HMM_fs #=GF AM globalfirst #=GF RN [1] #=GF RM 1546463 #=GF RT Nucleotide sequence and genetic map of cowpea severe mosaic #=GF RT virus RNA 2 and comparisons with RNA 2 of other #=GF RT comoviruses. #=GF RA Chen X, Bruening G; #=GF RL Virology 1992;187:682-692. #=GF DR SCOP; 1bmv; fa; #=GF DR INTERPRO; IPR003182; #=GF CC This family contains the small coat protein (SCP) [1] of the #=GF CC comoviridae viral family. #=GF SQ 10 #=GS Q9YWK0_9COMO/739-920 AC Q9YWK0.1 #=GS Q9YWJ9_9COMO/828-1009 AC Q9YWJ9.1 #=GS VGNM_SQMVM/622-803 AC P36341.2 #=GS VGNM_BPMV/821-1004 AC P23009.2 #=GS VGNM_BPMV/821-1004 DR PDB; 1pgw 1; 1-184; #=GS VGNM_BPMV/821-1004 DR PDB; 1pgl 1; 1-184; #=GS VGNM_BPMV/821-1004 DR PDB; 1bmv 1; 1001-1184; #=GS VGNM_RCMV/786-964 AC P13561.1 #=GS Q66170_CPMV/720-899 AC Q66170.1 #=GS VGNM_CPMV/837-1016 AC P03599.1 #=GS VGNM_CPMV/837-1016 DR PDB; 2bfu S; 4-183; #=GS VGNM_CPMV/837-1016 DR PDB; 1ny7 1; 4-183; #=GS VGNM_CPSMV/808-988 AC P31630.1 #=GS Q66179_APMV/2-185 AC Q66179.1 #=GS VGNM_APMV/802-985 AC P38485.1 Q9YWK0_9COMO/739-920 MVQQLGTYNPIWMVRTPLES.TAPQNFASFTADLMESTVSGDSTG.NWSITAYPSPISNLLKVAAWKKGTIRFQLICRG.AAVKQSDWAASARIDLVNNLSNKALPARSWYITKPRGGDIEFDLEIAGPNNGFEMANSSWAFQTTWYLEIAIDNPKQFTLFELNACLMEDFEVAGNTLNPPILLS Q9YWJ9_9COMO/828-1009 MVQQLGTYNPIWMVRTPLES.TAQQNFASFTADLMESTISGDSTG.NWNITVYPSPIANLLKVAAWKKGTIRFQLICRG.AAVKQSDWAASARIDLINNLSNKALPARSWYITKPRGGDIEFDLEIAGPNNGFEMANSSWAFQTTWYLEIAIDNPKQFTLFELNACLMEDFEVAGNTLNPPILLS VGNM_SQMVM/622-803 MVQQLGTYNPIWMVRTPLES.TAQQNFASFTADLMESTISGDSTG.NWNITVYPSPIANLLKVAAWKKGTIRFQLICRG.AAVKQSDWAASARIDLINNLSNKALPARSWYITKPRGGDIEFDLEIAGPNNGFEMANSSWAFQTTWYLEIAIDNPKQFTLFELNACLMEDFEVAGNTLNPPILLS VGNM_BPMV/821-1004 SISQQTVWNQMATVRTPLNFDSSKQSFCQFSVDLLGGGISVDKTG.DWITLVQNSPISNLLRVAAWKKGCLMVKVVMSGNAAVKRSDWASLVQVFLTNSNSTEHFDACRWTKSEPHSWELIFPIEVCGPNNGFEMWSSEWANQTSWHLSFLVDNPKQSTTFDVLLGISQNFEIAGNTLMPAFSVP #=GR VGNM_BPMV/821-1004 SS ----TT--EEEEEEE--TT--TTT-SEEEEEEETTTTEEEE-SSS.--EEEE---HHHHHHHHEESEEEEEEEEEEEE--TTS-GGG---EEEEEEESSSSTTS--SEEEEE--SSEEEEEEEEEE-BTTEE-B-TT-TTTTB---EEEEEEESTTTS-EEEEEEEE-TT-EEBSBEE---EE-- VGNM_RCMV/786-964 VRTTDGVYSTCFRVRTPLA....LKDSGSFTCDLIGGGITTDSNT.GWNLTALNTPVANLLRTAAWKRGTIHVQVAMFG.STVKRSDWTSTVQLFLRQSMNTSSYDARVWVISKPGAAILEFSFDVEGPNNGFEMWEANWASQTSWFLEFLISNVTQNTLFEVSMKLDSNFCVAGTTLMPPFSVT Q66170_CPMV/720-899 CAEASDVYSPCMIASTPPAP...FSDVTAVTFDLINGKITPVGDD.NWNTHIYNPPIMNVLRTAAWKSGTIHVQLNVRG.AGVKRADWDGQVFVYLRQSMNPESYDARTFVISQPGSAMLNFSFDIIGPNSGFEFAESPWANQTTWYLECVATNPRQIQQFEVNMRFDPNFRVAGNILMPPFPLS VGNM_CPMV/837-1016 CAEASDVYSPCMIASTPPAP...FSDVTAVTFDLINGKITPVGDD.NWNTHIYNPPIMNVLRTAAWKSGTIHVQLNVRG.AGVKRADWDGQVFVYLRQSMNPESYDARTFVISQPGSAMLNFSFDIIGPNSGFEFAESPWANQTTWYLECVATNPRQIQQFEVNMRFDPNFRVAGNILMPPFPLS #=GR VGNM_CPMV/837-1016 SS ---B-S-BEEEEEEE---TT...--S-EEEEEETTTCCEEE-SS-.-SEEEE---HHHHHHHCECCEEEEEEEEEEEEE.-S--CCC--B-EEEEEESS-CTCC--SEEEEEBSSSSEEEEEEEEE-BTCCC-B-TTBTTTT-B--EEEEEES-TTTEEEEEEEEEE-TT-EEEEEEE---EE-- VGNM_CPSMV/808-988 SGQTQQVWNKIWRIGTPP...QATDGLFSFSIDLLGVELVTDGQE.GAVSVLSSSPVANLLRTAAWKCGTLHVKVVMTGRVTTTRANWASHTQMSLVNSDNAQHYEAQKWSVSTPHAWEKEFSIDICGPNRGFEMWRSSWSNQTTWILEFTVAGASQSAIFEIFYRLDNSWKSAGNVLMPPLLVG Q66179_APMV/2-185 CSPCINVWSEFCALDIPVVD.TTKVNFAQYSLDLVNPTVSANASGRNWRFVLIPSPMVYLLQTSDWKRGKLHFKLKILGKSNVKRSEWSSTSRIDVRRAPGTEYLNAITVFTAEPHADEINFEIEICGPNNGFEMWNADFGNQLSWMANVVIGNPDQAGIHQWYVRPGENFEVAGNRMVQPLALS VGNM_APMV/802-985 CSPCINVWSEFCALDIPVVD.TTKVNFAQYSLDLVNPTVSANASGRNWRFVLIPSPMVYLLQTSDWKRGKLHFKLKILGKSNVKRSEWSSTSRIDVRRAPGTEYLNAITVFTAEPHADEINFEIEICGPNNGFEMWNADFGNQLSWMANVVIGNPDQAGIHQWYVRPGENFEVAGNRMVQPLALS #=GC SS_cons ---BTT-BEEEEEEE--TTT.TTT-SEEEEEEETTTCCEEE-SSS.-SEEEE---HHHHHHHCECCEEEEEEEEEEEEE.TTS-CCC--BEEEEEEESSSCTCC--SEEEEEBSSSCEEEEEEEEE-BTCCC-B-TTBTTTTBB--EEEEEECSTTTCEEEEEEEEE-TT-EEECEEE---EE-- #=GC seq_cons ssps.sVYsshhhlcTPlss.osppsFuuFThDLlsusISsDuoG.NWshslhsSPIuNLL+TAAWK+GTIHhQLhhpG.AuVKRSDWuuosplsLppuhuscuhsARoWhIocP+uu-lpFslEIsGPNNGFEMhsSsWANQTTWaLEhlIsNP+QhslFElsh+lspNFEVAGNsLhPPlsLS // # STOCKHOLM 1.0 #=GF ID MHC2-interact #=GF AC PF09307.1 #=GF DE CLIP, MHC2 interacting #=GF AU Mistry J, Sammut SJ #=GF SE pdb_1muj #=GF GA 13.30 13.30; 25.00 25.00; #=GF TC 22.40 22.40; 25.30 25.30; #=GF NC 4.30 4.30; 16.30 16.30; #=GF TP Domain #=GF BM hmmbuild -F HMM_ls SEED #=GF BM hmmcalibrate --seed 0 HMM_ls #=GF BM hmmbuild -f -F HMM_fs SEED #=GF BM hmmcalibrate --seed 0 HMM_fs #=GF AM globalfirst #=GF RN [1] #=GF RM 12589760 #=GF RT Crystal structure of MHC class II I-Ab in complex with a #=GF RT human CLIP peptide: prediction of an I-Ab peptide-binding #=GF RT motif. #=GF RA Zhu Y, Rudensky AY, Corper AL, Teyton L, Wilson IA; #=GF RL J Mol Biol. 2003;326:1157-1174. #=GF DC The following Pfam-B family may contain sequences that according to Prodom #=GF DC are members of this Pfam-A family. #=GF DR PFAMB; PB077178; #=GF DR INTERPRO; IPR015386; #=GF CC Members of this family are found in class II invariant #=GF CC chain-associated peptide (CLIP), and are required for association #=GF CC with class II major histocompatibility complex (MHC) in the MHC #=GF CC class II processing pathway [1]. #=GF SQ 6 #=GS Q2KM24_ANAPL/2-116 AC Q2KM24.1 #=GS Q6R7Z7_CHICK/2-120 AC Q6R7Z7.1 #=GS Q307W8_CAICR/1-119 AC Q307W8.1 #=GS HG2A_RAT/1-113 AC P10247.2 #=GS Q764N1_PIG/1-111 AC Q764N1.1 #=GS Q52KV2_XENLA/43-159 AC Q52KV2.1 Q2KM24_ANAPL/2-116 AEEQR.DLISDRGS.GVVPMG...DSQRSAFGRRAALSTLSILVALLIAGQAVTIYFVYQQSGQISKLTRTSQNLQLEALQRKLPKSSKSAGNMKMSMVNTPLAMRVLPLAPS...LDDTPVK Q6R7Z7_CHICK/2-120 AEEQR.DLISCPSSSGVLPIG...NSERSSLGRRTALSALSILVALLIAGQAVTIYYVYQQSGQISKLTKTSQTLKLESLQRKMPIGTQPANKMSMSTMNMPMAMKVLPLAPSVGDMPVEAMK Q307W8_CAICR/1-119 MDEDRSDLISTPEQTTAPALTAHSGSRRIVCSRGAVYSALSILVALLVAGQAVTVYFVYQQGNHISKLTKTTQTLQLESMSRKLPQG.KSSNKMKMAMISMPMAMRELPLASK...MDAGPTD HG2A_RAT/1-113 MDDQR.DLISNHEQ..LPILGQRARAPESNCNRGVLYTSVSVLVALLLAGQATTAYFLYQQQGRLDKLTVTSQNLQLENLRMKLPKSAKPVSPMRMAT...PLLMRPLSMDN....MLQAPVK Q764N1_PIG/1-111 MEDQR.DLISNHEQ..LPMLGQRPGAPESKCSRGALYTGFSVLVALLLAGQATTAYFLYQQQGRLDKLTVTSQNLQLESLRMKLPKPSKPLSKMRVSA...PMLMQALPMEG......PEPMR Q52KV2_XENLA/43-159 AEESQ.NLVPEHVPGQSVVDVGNRE.PRMSCNKGSLVTALTVLVVVLVAGQAVMAFFITQQNSRIQDLDRSTKNLQLKAMMKELPGSPPVPSKQKMRTFNIPMALKLYDGSE....MNMNDLE #=GC seq_cons hEEQR.DLISs+pp.tlsslGtp.su.RSsCuRGulhouLSlLVALLlAGQAVTsYFlYQQsG+IsKLT+TSQNLQLEuLp+KLPpusKssuKM+MushshPMAM+sLPhus....MsssPh+ // # STOCKHOLM 1.0 #=GF ID Caudal_act #=GF AC PF04731.3 #=GF DE Caudal like protein activation region #=GF AU Kerrison ND #=GF SE DOMO:DM04892; #=GF GA 25.00 25.00; 15.30 15.30; #=GF TC 46.20 46.20; 21.30 21.30; #=GF NC -6.30 -6.30; 13.20 11.50; #=GF TP Family #=GF BM hmmbuild -F HMM_ls SEED #=GF BM hmmcalibrate --seed 0 HMM_ls #=GF BM hmmbuild -f -F HMM_fs SEED #=GF BM hmmcalibrate --seed 0 HMM_fs #=GF AM globalfirst #=GF RN [1] #=GF RM 11729123 #=GF RT Phosphorylation of the serine 60 residue within the Cdx2 #=GF RT activation domain mediates its transactivation capacity. #=GF RA Rings EH, Boudreau F, Taylor JK, Moffett J, Suh ER, Traber #=GF RA PG; #=GF RL Gastroenterology 2001;121:1437-1450. #=GF DC The following Pfam-B family may contain sequences that according to Prodom #=GF DC are members of this Pfam-A family. #=GF DR PFAMB; PB179679; #=GF DR INTERPRO; IPR006820; #=GF CC This family consists of the amino termini of proteins belonging to the #=GF CC caudal-related homeobox protein family. This region is thought to mediate #=GF CC transcription activation. The level of activation caused by mouse Cdx2 #=GF CC (Swiss:P43241) is affected by phosphorylation at serine 60 via the #=GF CC mitogen-activated protein kinase pathway [1]. #=GF CC Caudal family proteins are involved in the transcriptional regulation of #=GF CC multiple genes expressed in the intestinal epithelium, and are important in #=GF CC differentiation and maintenance of the intestinal epithelial lining. #=GF CC Caudal proteins always have a homeobox DNA binding domain (Pfam:PF00046). #=GF SQ 9 #=GS P79788_CHICK/13-172 AC P79788.1 #=GS CDX2_HUMAN/13-180 AC Q99626.2 #=GS HMD1_CHICK/1-132 AC P46692.1 #=GS CDX1_XENLA/13-142 AC Q91622.1 #=GS Q90262_BRARE/13-147 AC Q90262.1 #=GS CDX1_MOUSE/13-147 AC P18111.2 #=GS CDX4_HUMAN/13-171 AC O14627.1 #=GS CDX4_MOUSE/13-169 AC Q07424.1 #=GS Q91542_XENLA/16-147 AC Q91542.1 P79788_CHICK/13-172 MY.PGPVRHSGG.............LNLAAQNFV......GAAQYADYGGYH.........VNLDGA.QSPG....PVWAAPYAAPLRDDW.GAYGQGAPPPAAAAAVHGLNGGSPAAAMAYS.PVDFHHHHHHHPHAHHHVGPETHCSAGGMQTLGAAPAAAAASAAPEPLSPGGQRRGLCEWVRKPAQAPLGSQ CDX2_HUMAN/13-180 MY.PSSVRHSGG.............LNLAPQNFV......SPPQYPDYGGYH.VAAAAAAAANLDSA.QSPG....PSWPAAYGAPLREDW.NGYAPGGAAAAANAVAHGLNGGSPAAAMGYSSPADYHPHHHPHHHPHHPAAAPS.CASGLLQTLNPGPPGPAATAAAEQLSPGGQRRNLCEWMRKPAQQSLGSQ HMD1_CHICK/1-132 MY.PSPVRHPG..............LNLNPQNYV.....PGPPQYSDFASYHHVPGI.....NNDPHHGQPA....AAWGSPY.TPAKEDW.HSYGT...AAASAATNPGQFGF.........SPPDFNPMQPH.............AGSGLL........PPAISSSVPQLSPNAQRRTPYEWMRRSIPSTSSSG CDX1_XENLA/13-142 MY.PNPVRHPG..............LNLNPQNYV.....PAPPQYSDFPSYHHVPGI.....NSDPHHGQPG....GTWSS.Y.TPSREDW.HPYGPGPGASSANPTQIA............FSPSDYNPVQPP..............GSGLL........PPSINSSVPPLSPSAQRADPYEWMRRTGVPTTTTT Q90262_BRARE/13-147 MYHQGAVRRSG..............ISLPPQNFV......STPQYSDFTGYHHVP.......NMET.HAQSA....GAWGAPYGAP.REDW.GAYSLGPP....NSISAPMSNSSPGP.VSYCSP.DYNTMHGP..............GSAVL.......PPPPENIPVAQLSPERERRNSYQWMSKTVQSSSTGK CDX1_MOUSE/13-147 VY.PGPARPSS..............LGLGPPTYAPPGPAPAPPQYPDFAGYTHV..........EPA.PAPP....PTWAAPFPAP.KDDWAAAYGPGPTA......SAA....SPAP.LAFGPPPDFSPV..P........APPG.PGPGIL........AQSLGAPGAPSSPGAPRRTPYEWMRRSVAAAGGGG CDX4_HUMAN/13-171 MY.PGTLMSPGGDGTAGTGGTGGGGSPMPASNFA......AAPAFSHYMGYPHMP.......SMDP.HWPSL....GVWGSPYSPP.REDW.SVY.PGPSSTMGTVPVNDVTS.SPAA...FCS.TDYSNL.GPVGGGTSGSSLPGQAGGSLV.........PTDAGAAKASSPSRSRHSPYAWMRKTVQVTGKTR CDX4_MOUSE/13-169 MY.PGTLRSPGGSSTAGVGTSGGSGSPLPASNFT......AAPVYPHYVGYPHM.......SNMDP.HGPSL....GAWSSPYSPP.REDW.STY.PGPPSTMGTVPMNDMT..SPV....FGSP.DYSTL.GPTSGASNGGSLPDAASESLVS.........LDSGTSGATSPSRSRHSPYAWMRKTVQVTGKTR Q91542_XENLA/16-147 MY.PLSVRSTS..............NNHTAQNYV......SNQPYFNYVAYHHVP.......PMDDQ.GQPMEFGDSVWITEGGMELL..W.SWT.L.......TQIWHKSSDLSPNQ.FAYNS.SGYSSP.HP.............SGTGILH........SVDLTHAAANSPSALSQNSYEWMGKTVQSTSTGK #=GC seq_cons MY.PusVRpsG..............lsLssQNaV......usPQYsDasGYHHVs.......NhDst.spPs....usWuuPYusP.REDW.usYusGssus.ussssts.ss.SPs....asSPsDYssh.tP.............sGuGlL........ssstsusssshSPuupR+ssYEWMRKolQsousop // hmmer-3.1b2/testsuite/i14-hmmemit-consensus.pl0000775361611702660230000000525712473612615020745 0ustar wheelerteddy#! /usr/bin/perl # Tests hmmemit -c and hmmemit -C consensus-generating options. # # Usage: ./i14-hmmemit-consensus.pl # Example: ./i14-hmmemit-consensus.pl .. .. tmpfoo # # SRE, Fri May 14 11:34:28 2010 [Janelia] # SVN $Id$ BEGIN { $builddir = shift; $srcdir = shift; $tmppfx = shift; } # Verify that we have all the executables we need for the test. if (! -x "$builddir/src/hmmbuild") { die "FAIL: didn't find hmmbuild binary in $builddir/src\n"; } if (! -x "$builddir/src/hmmemit") { die "FAIL: didn't find hmmemit binary in $builddir/src\n"; } # Create a carefully constructed test alignment # if (! open(ALI1, ">$tmppfx.sto")) { die "FAIL: couldn't open $tmppfx.sto for write\n"; } print ALI1 << "EOF"; # STOCKHOLM 1.0 seq0 ACDEFHIKLMNPQRST seq1 ACDEFHIKLMNPQRSK seq2 ACDEFHIKLMNPQRII seq3 ACDEFHIKLMNPQEHH seq4 ACDEFHIKLMN-CDGG seq5 ACDEFAIKLM--CDFF seq6 ACDEAAIKL---CCEE seq7 ACDAAAIK----ACDD seq8 ACAAAAI-----AACC seq9 AAAAAA------AAAA // EOF close ALI1; # max c: A C D E F A I K L M N P Q R S A # max p: 1.0 0.9 0.8 0.7 0.6 0.5 1.0 1.0 1.0 1.0 1.0 1.0 0.4 0.3 0.2 0.1 # present if symfrac <= 1.0 1.0 1.0 1.0 1.0 1.0 0.9 0.8 0.7 0.6 0.5 0.4 1.0 1.0 1.0 1.0 # upper if minu <= 1.0 0.9 0.8 0.7 0.6 0.5 1.0 1.0 1.0 1.0 1.0 1.0 0.4 0.3 0.2 0.1 # else lower if minl <= 1.0 0.9 0.8 0.7 0.6 0.5 1.0 1.0 1.0 1.0 1.0 1.0 0.4 0.3 0.2 0.1 # else x. # # So: # symfrac minl minu => L sequence # 0.0 0.0 0.0 ACDEFAIKLMNPQRSA # 0.0 0.0 1.0 AcdefaIKLMNPqrsa # 0.0 1.0 1.0 AxxxxxIKLMNPxxxx # 0.0 0.5 0.8 ACDefaIKLMNPxxxx But, p_6(A) comes back 0.499999, so it'll be x # 0.6 0.5 0.8 ACDefaIKLM xxxx (ditto) @symfrac_choices = ( 0.0, 0.0, 0.0, 0.0, 0.6 ); @minl_choices = ( 0.0, 0.0, 1.0, 0.5, 0.5 ); @minu_choices = ( 0.0, 1.0, 1.0, 0.8, 0.8 ); @answers = ( "ACDEFAIKLMNPQRSA\n", "AcdefaIKLMNPqrsa\n", "AxxxxxIKLMNPxxxx\n", "ACDefxIKLMNPxxxx\n", "ACDefxIKLMxxxx\n"); for ($i = 0; $i < $#symfrac_choices; $i++) { @output = `$builddir/src/hmmbuild --wnone --pnone --symfrac $symfrac_choices[$i] $tmppfx.hmm $tmppfx.sto 2>&1`; if ($? != 0) { die "FAIL: hmmbuild failed\n"; } @output = `$builddir/src/hmmemit -C --minl $minl_choices[$i] --minu $minu_choices[$i] $tmppfx.hmm 2>&1`; if ($? != 0) { die "FAIL: hmmemit failed\n"; } if ($output[1] ne $answers[$i]) { die "FAIL: hmmemit, expected $answers[$i]; saw $output[1]\n"; } } print "ok\n"; unlink "$tmppfx.sto"; unlink "$tmppfx.hmm"; exit 0; hmmer-3.1b2/testsuite/XYPPX.sto0000664361611702660230000000351212473612615016003 0ustar wheelerteddy# STOCKHOLM 1.0 #=GF ID XYPPX #=GF AC PF02162.8 #=GF DE XYPPX repeat #=GF PI Rhodopsin_C; #=GF AU Mian N, Bateman A #=GF SE IPR000216 #=GF GA 14.30 0.70; 10.00 0.00; #=GF TC 14.40 0.70; 10.00 0.00; #=GF NC 14.20 4.00; 9.70 2.00; #=GF TP Repeat #=GF BM hmmbuild -F HMM_ls SEED #=GF BM hmmcalibrate --seed 0 HMM_ls #=GF BM hmmbuild -f -F HMM_fs SEED #=GF BM hmmcalibrate --seed 0 HMM_fs #=GF AM globalfirst #=GF DR PRINTS; PR00239; #=GF DC The following Pfam-B family may contain sequences that according to Prodom #=GF DC are members of this Pfam-A family. #=GF DR PFAMB; PB146642; #=GF DR INTERPRO; IPR006031; #=GF CC This repeat is found in a wide variety of proteins and #=GF CC generally consists of the motif XYPPX where X can be any amino #=GF CC acid. The family includes annexin VII Swiss:P24639, the #=GF CC carboxy tail of certain rhodopsins Swiss:Q17094. This family #=GF CC also includes plaque matrix proteins, however this motif is #=GF CC embedded in a ten residue repeat in Swiss:Q25460. The molecular #=GF CC function of this repeat is unknown. It is also not clear is all #=GF CC the members of this family share a common evolutionary #=GF CC ancestor due to its short length and biased amino acid #=GF CC composition. #=GF SQ 7 #=GS OPSD_SEPOF/451-455 AC O16005.1 #=GS OPSD_SEPOF/441-445 AC O16005.1 #=GS OPSD_SEPOF/424-428 AC O16005.1 #=GS OPSD_OCTDO/406-410 AC P09241.1 #=GS OPSD_SEPOF/403-407 AC O16005.1 #=GS OPSD_SEPOF/412-416 AC O16005.1 #=GS OPSD_TODPA/387-391 AC P31356.2 OPSD_SEPOF/451-455 AAPPQ OPSD_SEPOF/441-445 GAPPQ OPSD_SEPOF/424-428 GYPPA OPSD_OCTDO/406-410 AYPPP OPSD_SEPOF/403-407 GYPPP OPSD_SEPOF/412-416 GYPPQ OPSD_TODPA/387-391 AYPPQ #=GC seq_cons uYPPt // hmmer-3.1b2/testsuite/PSE.hmm0000664361611702660230000000674012473612615015464 0ustar wheelerteddyHMMER3/e [3.0 | March 2010] NAME PSE LENG 17 MAXL 72 ALPH DNA RF yes CONS yes CS yes MAP yes DATE Thu Jun 16 11:48:53 2011 NSEQ 20 EFFN 20.000000 CKSUM 2589846231 STATS LOCAL MSV -6.1913 0.76142 STATS LOCAL VITERBI -6.4257 0.76142 STATS LOCAL FORWARD -2.7613 0.76142 HMM A C G T m->m m->i m->d i->m i->i d->m d->d COMPO 0.98363 1.57656 2.60145 1.06364 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 0.00000 * 1 4.63594 4.36328 1.87494 0.19334 1 t x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 2 0.99589 3.61057 0.64655 2.52921 2 g x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 3 0.19493 4.44730 4.81228 1.84982 3 a x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 4 5.10685 0.02173 5.27971 4.57065 4 C x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 5 5.10685 0.02173 5.27971 4.57065 5 C x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 6 5.10685 0.02173 5.27971 4.57065 6 C x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 7 0.00946 6.09180 5.39984 5.93846 7 A x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 8 5.18007 4.77052 5.30682 0.01925 8 T x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 9 1.14540 1.77945 2.32761 0.87793 9 t x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 10 0.14385 5.63736 2.06991 5.46746 10 a x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 11 0.11263 5.71406 2.30920 5.55227 11 a x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 12 1.68342 1.78504 3.41886 0.48821 12 t x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 13 0.39479 4.16193 4.46740 1.20690 13 a x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 14 1.14371 2.25120 2.34691 0.73308 14 t x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 15 5.18007 4.77052 5.30682 0.01925 15 T x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 16 1.86864 4.23580 4.72896 0.19557 16 t x . 1.38629 1.38629 1.38629 1.38629 0.00905 5.40268 5.40268 1.46634 0.26236 1.09861 0.40547 17 0.25900 4.32667 4.67013 1.58185 17 a x . 1.38629 1.38629 1.38629 1.38629 0.00454 5.39816 * 1.46634 0.26236 0.00000 * // hmmer-3.1b2/testsuite/XYPPX.hmm0000664361611702660230000000650712473612615015766 0ustar wheelerteddyHMMER3/e [3.0 | March 2010] NAME XYPPX ACC PF02162.8 DESC XYPPX repeat LENG 5 ALPH amino RF no CONS yes CS no MAP yes DATE Thu Jun 16 11:48:52 2011 NSEQ 7 EFFN 7.000000 CKSUM 149732247 GA 14.30 0.70 TC 14.40 0.70 NC 14.20 4.00 STATS LOCAL MSV -5.1112 0.78852 STATS LOCAL VITERBI -4.7526 0.78852 STATS LOCAL FORWARD -2.5557 0.78852 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 1.78915 6.00913 5.23249 5.11791 5.20653 2.22796 5.88594 5.77670 5.17236 5.27663 6.29854 5.19187 0.83219 2.40628 5.36874 4.33373 4.68171 5.20184 6.65125 2.09768 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00529 5.64135 6.36369 0.61958 0.77255 0.00000 * 1 0.91707 5.48468 5.65823 5.70004 6.37399 0.67196 6.42141 5.91783 5.81567 5.60504 6.35161 5.14615 5.14089 5.87323 5.80244 3.79498 4.17581 4.94514 7.64062 6.69238 1 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00529 5.64135 6.36369 0.61958 0.77255 0.48576 0.95510 2 1.29214 5.93727 5.64450 5.57968 3.89343 4.88067 5.29214 5.20374 5.53411 4.64869 5.82218 5.30271 5.60238 5.64395 5.57005 4.42103 4.74169 4.86331 5.54271 0.49105 2 Y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00529 5.64135 6.36369 0.61958 0.77255 0.48576 0.95510 3 5.94672 7.11992 6.55030 6.62396 7.25663 5.73661 7.31745 7.48876 6.82943 6.72457 7.95279 6.80729 0.02290 7.12774 6.70449 6.20885 6.45690 6.95162 7.77702 7.45295 3 P - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00529 5.64135 6.36369 0.61958 0.77255 0.48576 0.95510 4 5.94672 7.11992 6.55030 6.62396 7.25663 5.73661 7.31745 7.48876 6.82943 6.72457 7.95279 6.80729 0.02290 7.12774 6.70449 6.20885 6.45690 6.95162 7.77702 7.45295 4 P - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00529 5.64135 6.36369 0.61958 0.77255 0.48576 0.95510 5 1.83526 5.65654 4.22930 4.02694 5.84734 4.24624 5.28601 5.33049 4.08818 4.90398 5.71607 4.35468 1.48546 0.81000 4.42096 3.73357 4.07553 4.71157 7.04231 5.78514 5 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00356 5.63962 * 0.61958 0.77255 0.00000 * // hmmer-3.1b2/testsuite/i16-build-allins.pl0000775361611702660230000000220512473612615017636 0ustar wheelerteddy#! /usr/bin/perl # Bug #h82: hmmbuild corrupts resave alignment on all-insert seq # # Usage: ./i16-build-allins.pl # Example: ./i16-build-allins.pl .. .. tmpfoo # # SRE, Sun Jun 13 12:09:54 2010 [UA231 IAD->SAN] # SVN $Id$ BEGIN { $builddir = shift; $srcdir = shift; $tmppfx = shift; } # Verify that we have all the executables we need for the test. if (! -x "$builddir/src/hmmbuild") { die "FAIL: didn't find hmmconvert binary in $builddir/src\n"; } # Create the test file open(MSA, ">$tmppfx.sto") || die "FAIL: couldn't create $tmppfx.sto"; print MSA << "EOF"; # STOCKHOLM 1.0 seq1 ACD...E seq2 FGH...I seq3 KLM...N seqx ---pqr- #=GC RF xxx...x // EOF close MSA; $output = `$builddir/src/hmmbuild -O $tmppfx.sto2 --hand $tmppfx.hmm $tmppfx.sto`; if ($? != 0) { die "FAIL: hmmbuild failed unexpectedly\n"; } $output = `grep "^seqx" $tmppfx.sto2`; if ($? != 0) { die "FAIL: grep failed unexpectedly\n"; } if ($output !~ /^seqx\s+~~~pqr~/) { die "FAIL: bug #h82\n"; } print "ok\n"; unlink "$tmppfx.sto"; unlink "$tmppfx.sto2"; unlink "$tmppfx.hmm"; exit 0; hmmer-3.1b2/testsuite/i2-search-variation.sh0000775361611702660230000000277012473612615020437 0ustar wheelerteddy#! /bin/sh # # Verify that hmmsearch/hmmscan runs are reproducible (no stochastic variation) # if test ! $# -eq 4; then echo "Usage: $0 " exit 1 fi prog=$1; if test ! -x $prog; then echo "FAIL: $prog not executable"; exit 1; fi hmmfile=$2; if test ! -r $hmmfile; then echo "FAIL: $hmmfile not readable"; exit 1; fi seqfile=$3; if test ! -r $seqfile; then echo "FAIL: $seqfile not readable"; exit 1; fi tmppfx=$4 # Running with default seed shows identical results $prog $hmmfile $seqfile > $tmppfx.out; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi cat $tmppfx.out | grep -v "^#" > $tmppfx.out1 $prog $hmmfile $seqfile > $tmppfx.out; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi cat $tmppfx.out | grep -v "^#" > $tmppfx.out2 diff $tmppfx.out1 $tmppfx.out2 > /dev/null if test $? -ne 0 then echo "FAIL: results differ" exit 1 fi # Running with different seeds shows stochastically differing results $prog --seed 2 $hmmfile $seqfile > $tmppfx.out; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi cat $tmppfx.out | grep -v "^#" > $tmppfx.out1 $prog --seed 3 $hmmfile $seqfile > $tmppfx.out; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi cat $tmppfx.out | grep -v "^#" > $tmppfx.out2 diff $tmppfx.out1 $tmppfx.out2 > /dev/null if test $? -eq 0 then echo "FAIL: results are the same despite different rng seeds" exit 1 fi rm $tmppfx.out $tmppfx.out1 $tmppfx.out2 echo "ok" exit 0hmmer-3.1b2/testsuite/i11-hmmalign-mapali.pl0000775361611702660230000000502512473612615020312 0ustar wheelerteddy#! /usr/bin/perl # Another test of the hmmalign --mapali option, after Elena reports # bug #h73 in bad interaction of checksum calculation and marking # fragments. # # Usage: ./i11-hmmalign-mapali.pl # Example: ./i11-hmmalign-mapali.pl .. .. tmpfoo # # SRE, Mon Dec 21 14:38:17 2009 [Janelia] # SVN $Id: i11-hmmalign-mapali.pl 3145 2010-02-03 16:55:42Z eddys $ $builddir = shift; $srcdir = shift; $tmppfx = shift; # Verify that we have all the executables we need for the test. if (! -x "$builddir/src/hmmbuild") { die "FAIL: didn't find hmmbuild binary in $builddir/src\n"; } if (! -x "$builddir/src/hmmalign") { die "FAIL: didn't find hmmalign binary in $builddir/src\n"; } # Create our test files. if (! open(ALI1, ">$tmppfx.sto")) { die "FAIL: couldn't open $tmppfx.sto for write\n"; } if (! open(SEQ1, ">$tmppfx.fa")) { die "FAIL: couldn't open $tmppfx.sto for write\n"; } print ALI1 <<"EOF"; # STOCKHOLM 1.0 # s6 is a fragment (by default hmmbuild definition) # s7 contains D->I transition # s8 contains I->D transition s1 ACDEFG.HIK.LMNPQRSTVWY s2 ACDEFG.HIK.LMNPQRSTVWY s3 ACDEFG.HIK.LMNPQRSTVWY s4 ACDEFG.HIK.LMNPQRSTVWY s5 ACDEFG.HIK.LMNPQRSTVWY s6 -----G.HIK.LM--------- s7 ACDEF-aHIK.LMNPQRSTVWY s8 ACDEFG.HIKa.MNPQRSTVWY // EOF print SEQ1 <<"EOF"; >test CDEFGHIKLMNPQRSTVW EOF close ALI1; close SEQ2; $output = `$builddir/src/hmmbuild -O $tmppfx.sto2 $tmppfx.hmm $tmppfx.sto 2>&1`; if ($? != 0) { die "FAIL: hmmbuild failed\n"; } ($resave) = ($output =~ /processed alignment resaved to:\s+(\S+)/); if ($resave ne "$tmppfx.sto2") { die "FAIL: -O option didn't generated a line in header\n"; } $output = `cat $tmppfx.sto2`; if ($? != 0) { die "FAIL: cat failed\n"; } ($aseq6) = ($output =~ /\ns6\s+(\S+)/); ($aseq7) = ($output =~ /\ns7\s+(\S+)/); ($aseq8) = ($output =~ /\ns8\s+(\S+)/); if ($aseq6 ne "~~~~~GHIKLM~~~~~~~~~") { die "FAIL: fragment wasn't marked in -O output\n"; } if ($aseq7 ne "ACDEFAHIKLMNPQRSTVWY") { die "FAIL: D->I transition wasn't trace doctored properly?\n"; } if ($aseq8 ne "ACDEFGHIKAMNPQRSTVWY") { die "FAIL: I->D transition wasn't trace doctored properly?\n"; } $output = `$builddir/src/hmmalign --mapali $tmppfx.sto $tmppfx.hmm $tmppfx.fa 2>&1`; if ($? != 0) { die "FAIL: hmmalign --mapali failed\n"; } ($testseq) = ($output =~ /\ntest\s+(\S+)/); if ($testseq ne "-CDEFG.HIK.LMNPQRSTVW-") { die "FAIL: test seq in unexpected alignment\n"; } print "ok\n"; unlink "$tmppfx.sto"; unlink "$tmppfx.fa"; unlink "$tmppfx.sto2"; unlink "$tmppfx.hmm"; exit 0; hmmer-3.1b2/testsuite/i1-build-variation.sh0000775361611702660230000000344412473612614020266 0ustar wheelerteddy#! /bin/sh # Usage: ./i1-hmmbuild.sh # # Verifies that hmmbuild builds HMMs reproducibly (no stochastic run-to-run variation by default). # if test ! $# -eq 3; then echo "Usage: $0 " exit 1 fi hmmbuild=$1; if test ! -x $hmmbuild; then echo "FAIL: $hmmbuild not executable"; exit 1; fi alifile=$2; if test ! -r $alifile; then echo "FAIL: $alifile not readable"; exit 1; fi hmmfile1=$3.1.hmm hmmfile2=$3.2.hmm outfile1=$3.1.out outfile2=$3.2.out diffile1=$3.1 diffile2=$3.2 # By default: no stochastic variation $hmmbuild $hmmfile1 $alifile > $outfile1; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi $hmmbuild $hmmfile2 $alifile > $outfile2; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi cat $outfile1 | grep -v "^#" > $diffile1 cat $outfile2 | grep -v "^#" > $diffile2 diff $diffile1 $diffile2 > /dev/null if test $? -ne 0 then echo "FAIL: output files differ" exit 1 fi cat $hmmfile1| grep -v "^DATE" > $diffile1 cat $hmmfile2| grep -v "^DATE" > $diffile2 diff $diffile1 $diffile2 > /dev/null if test $? -ne 0 then echo "FAIL: HMM files differ" exit 1 fi # With different seeds: HMM files will differ because of statistical fits $hmmbuild --seed 1 $hmmfile1 $alifile > $outfile1; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi $hmmbuild --seed 2 $hmmfile2 $alifile > $outfile2; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi cat $hmmfile1| grep -v "^DATE" > $diffile1 cat $hmmfile2| grep -v "^DATE" > $diffile2 diff $diffile1 $diffile2 > /dev/null if test $? -eq 0 then echo "FAIL: HMM files identical, despite different rng seeds" exit 1 fi echo "ok" rm $hmmfile1 $hmmfile2 rm $outfile1 $outfile2 rm $diffile1 $diffile2 exit 0 hmmer-3.1b2/testsuite/test-make.pl0000775361611702660230000001534712473612615016567 0ustar wheelerteddy#! /usr/bin/perl -w # Usage: test-make.pl # # Configure in a build directory first. # Then execute this script, in that directory. # # cd src/hmmer/trunk/build-debug # ../configure --enable-debugging # ../testsuite/test-make.pl . .. tmppfx # # Options: # -x : die immediately upon a failure. Then you can look at foo.out to see # what happened, and if the script parsed the make output correctly. # # -i : where is sse, vmx, or dummy # Pass in the implementation type. (This shouldn't be needed. # It's a side effect of the probably broken way we're handling # the platform-specific vector code. # use strict; use vars qw($opt_x $opt_i); use Getopt::Std; getopts('xi:'); my $die_on_failure = ($opt_x ? 1 : 0 ); my $impl = ($opt_i ? $opt_i : "sse"); my %saw_target = (); my $builddir = shift; my $srcdir = shift; my $tmppfx = shift; my %MASTER_BUILD_TABLE = ( easel_obj => [ "CC", "esl_dmatrix.o" ], easel_lib => [ "AR", "libeasel.a" ], easel_miniapps_progobj => [ "CC", "esl-afetch.o" ], easel_miniapps_prog => [ "GEN", "esl-afetch" ], easel_utest => [ "GEN", "esl_alphabet_utest" ], easel_benchmark => [ "GEN", "esl_buffer_benchmark" ], easel_example => [ "GEN", "esl_buffer_example" ], hmmer_src_obj => [ "CC", "build.o" ], hmmer_src_progobj => [ "CC", "hmmalign.o" ], hmmer_src_prog => [ "GEN", "hmmalign" ], hmmer_src_lib => [ "AR", "libhmmer-src.stamp" ], hmmer_src_utest => [ "GEN", "build_utest" ], hmmer_src_itest_obj => [ "CC", "itest_brute.o" ], hmmer_src_itest => [ "GEN", "itest_brute" ], hmmer_src_stats => [ "GEN", "evalues_stats" ], hmmer_src_benchmark => [ "GEN", "evalues_benchmark" ], hmmer_src_example => [ "GEN", "build_example" ], hmmer_src_impl_obj => [ "CC", "decoding.o" ], hmmer_src_impl_lib => [ "AR", "libhmmer-impl.stamp" ], hmmer_src_impl_utest => [ "GEN", "decoding_utest" ], hmmer_src_impl_benchmark => [ "GEN", "decoding_benchmark" ], hmmer_src_impl_example => [ "GEN", "fwdback_example" ], hmmer_profmark_progobj => [ "CC", "create-profmark.o" ], hmmer_profmark_prog => [ "GEN", "create-profmark" ], ); header(); make_clean(); make_try("", ".", "all", "easel_obj", "easel_lib", "easel_miniapps_progobj", "easel_miniapps_prog", "hmmer_src_obj", "hmmer_src_lib", "hmmer_src_progobj", "hmmer_src_prog", "hmmer_src_impl_obj", "hmmer_src_impl_lib", "hmmer_profmark_progobj", "hmmer_profmark_prog"); make_try("src/build.c", ".", "all", "hmmer_src_obj", "hmmer_src_lib", "hmmer_src_prog", "hmmer_profmark_prog"); make_try("src/impl_$impl/decoding.c", ".", "all", "hmmer_src_prog", "hmmer_src_impl_obj", "hmmer_src_impl_lib", "hmmer_profmark_prog"); make_try("easel/esl_dmatrix.c", ".", "all", "easel_obj", "easel_lib", "easel_miniapps_progobj", "easel_miniapps_prog", "hmmer_src_prog", "hmmer_profmark_prog"); make_try("easel/miniapps/esl-afetch.c", ".", "all", "easel_miniapps_progobj", "easel_miniapps_prog"); make_clean(); make_try("", ".", "dev", "easel_obj", "easel_lib", "easel_miniapps_progobj", "easel_miniapps_prog", "easel_utest", "easel_benchmark", "easel_example", "hmmer_src_obj", "hmmer_src_lib", "hmmer_src_progobj", "hmmer_src_prog", "hmmer_src_utest", "hmmer_src_itest_obj", "hmmer_src_itest", "hmmer_src_benchmark", "hmmer_src_example", "hmmer_src_stats", "hmmer_src_impl_obj", "hmmer_src_impl_lib", "hmmer_src_impl_utest", "hmmer_src_impl_benchmark", "hmmer_src_impl_example", "hmmer_profmark_progobj", "hmmer_profmark_prog"); make_clean(); make_try("", ".", "tests", "easel_obj", "easel_lib", "easel_miniapps_progobj", "easel_miniapps_prog", "easel_utest", "hmmer_src_obj", "hmmer_src_lib", "hmmer_src_progobj", "hmmer_src_prog", "hmmer_src_utest", "hmmer_src_itest_obj", "hmmer_src_itest", "hmmer_src_impl_obj", "hmmer_src_impl_lib", "hmmer_src_impl_utest"); make_clean(); make_try("", ".", "check", "easel_obj", "easel_lib", "easel_miniapps_progobj", "easel_miniapps_prog", "easel_utest", "hmmer_src_obj", "hmmer_src_lib", "hmmer_src_progobj", "hmmer_src_prog", "hmmer_src_utest", "hmmer_src_itest_obj", "hmmer_src_itest", "hmmer_src_impl_obj", "hmmer_src_impl_lib", "hmmer_src_impl_utest", ); sub make_clean { system("(cd $builddir; make clean) > /dev/null"); } sub header { printf("%-15s %-30s %-15s\n", "DIRECTORY", "TOUCHED FILE", "MAKE TARGET"); printf("%-15s %-30s %-15s\n", "------------", "------------------------------", "---------------"); } sub make_try { my $touchfile = shift @_; my $dir = shift @_; my $target = shift @_; my @expected_components = @_; printf("%-15s %-30s %-15s ... ", $dir, $touchfile, $target); if ($touchfile ne "") { if ( ! -e "$srcdir/$touchfile") { die "$srcdir/$touchfile does not exist"; } system "touch $srcdir/$touchfile"; } system("(cd $builddir/$dir; make $target) > $tmppfx.out"); check_make_output("$tmppfx.out", @expected_components); } sub check_make_output { my $outfile = shift @_; my @components = @_; my $method; my $target; my $component; my %should_build = (); %saw_target = (); open (OUTFILE, "$outfile") || die; while () { if (/^ (\S+) (\S+)/) { $method = $1; $target = $2; $saw_target{$target} = $method; } } close OUTFILE; foreach $component (@components) { if (! defined $MASTER_BUILD_TABLE{$component} ) { die "$component not in master build table"; } $should_build{$component} = 1; } foreach $component (sort keys %MASTER_BUILD_TABLE) { if ($should_build{$component} && ! $saw_target{$MASTER_BUILD_TABLE{$component}[1]}) { print "FAILED (should've built $component)\n"; if ($die_on_failure) { die; } return 1; } elsif (! $should_build{$component} && $saw_target{$MASTER_BUILD_TABLE{$component}[1]}) { print "FAILED (should not have built $component)\n"; if ($die_on_failure) { die; } return 1; } } print "ok.\n"; 0; } hmmer-3.1b2/testsuite/Makefile.in0000664361611702660230000000304612473612615016373 0ustar wheelerteddytop_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ SQCLEVEL = 2 ESLDIR = @HMMER_ESLDIR@ ALIS = 20aa\ Caudal_act\ LuxC\ M1\ Patched\ RRM_1\ SMC_N\ XYPPX\ ecori\ 3box\ PSE\ # beautification magic stolen from git # QUIET_SUBDIR0 = +${MAKE} -C #space separator after -c QUIET_SUBDIR1 = ifndef V QUIET_CC = @echo ' ' CC $@; QUIET_GEN = @echo ' ' GEN $@; QUIET_AR = @echo ' ' AR $@; QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR1 = ; echo ' ' SUBDIR $$subdir; \ ${MAKE} -C $$subdir endif .PHONY: check hmms clean distclean check: @echo @echo Running HMMER test suite... @echo @${srcdir}/../${ESLDIR}/devkit/sqc ${SQCLEVEL} ${srcdir}/testsuite.sqc .. ${srcdir}/.. hmms: for ali in ${ALIS}; do\ ../src/hmmbuild $$ali.hmm $$ali.sto;\ done clean: -rm -f *.gcno *.gcda *.gcov -rm -f *.o *~ distclean: clean -rm -f Makefile -rm -f esltmp[a-z][a-z][0-9][0-9]* ################################################################ # HMMER - Biological sequence analysis with profile HMMs # Version 3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # HMMER is distributed under the terms of the GNU General Public License # (GPLv3). See the LICENSE file for details. # # SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/testsuite/Makefile.in $ # SVN $Id: Makefile.in 4032 2012-05-09 12:54:46Z eddys $ ################################################################ hmmer-3.1b2/testsuite/i20-fmindex-core.pl0000775361611702660230000001131612473612615017635 0ustar wheelerteddy#! /usr/bin/perl # Test of makenhmmerdb and the core fm-index search functionality, using extactmatch # # Usage: ./i20-fmindex-core.pl # Example: ./i20-fmindex-core.pl .. .. tmpfoo # # SVN $URL$ # SVN $Id$ BEGIN { $builddir = shift; $srcdir = shift; $tmppfx = shift; } $verbose = 1; # The test creates the following files: # $tmppfx.fa 3 sequences in fasta format # $tmppfx.fm The hmmer-style FM-index set produced by makenhmmerdb # $tmppfx.test 9 length-12 sequences, used to search the FM-index sting of the two sequences from $tmppfx.B inserted into the sequence of $tmppfx.A @h3progs = ( "makenhmmerdb", "exactmatch"); # Verify that we have all the executables and datafiles we need for the test. foreach $h3prog (@h3progs) { if (! -x "$builddir/src/$h3prog") { die "FAIL: didn't find $h3prog executable in $builddir/src\n"; } } &create_db_file("$tmppfx.fa"); $cmd = "$builddir/src/makenhmmerdb $tmppfx.fa $tmppfx.fm 2>&1"; $output = do_cmd($cmd); if ($? != 0) { die "FAIL: makenhmmerdb failed unexpectedly\n"; } if ($output !~ /# alphabet : dna/ || $output !~ /Number of characters in index: 1428/ || $output !~ /Number of FM-index blocks: 1/ ) { die "FAIL: makenhmmerdb failed to build correctly\n"; } &create_search_file("$tmppfx.test"); # Search for hits $cmd = "$builddir/src/exactmatch --out=- $tmppfx.test $tmppfx.fm "; #2>&1"; $output = do_cmd($cmd); if ($? != 0) { die "FAIL: exactmatch failed unexpectedly\n"; } $expect = &get_expected(); if ($output !~ /$expect/s) { die "FAIL: exactmatch failed search test\n"; } print "ok\n"; unlink "$tmppfx.fm"; unlink "$tmppfx.fm"; unlink "$tmppfx.test"; exit 0; sub create_db_file { my ($filename) = @_; open(DB, ">$filename") || die "FAIL: couldn't create the database file"; print DB <<"EOF"; >seq1 GATCTGATAAGTCCCAGGACTTCAGAAGagct >seq2 GATCTGATAAGTCCCAGGACTTCAGAAGagctgtgagaccttggccaagtcacttcctccttcagGAACATTGCAGTGGG CCTAAGTGCCTCCTCTCGGGACTGGTATGGGGACGGTCATGCAATCTGGACAACATTCACCTTTAAAAGTTTATTGATCT TTTGTGACATGCACGTGGGTTCCCAGTAGCAAGAAACTAAAGGGTCGCAGGCCGGTTTCTGCTAATTTCTTTAATTCCAA GACAGTCTCAAATATTTTCTTATTAACTTCCTGGAGGGAGGCTTATCATTCTCTCTTTTGGATGATTCTAAGTACCAGCT AAAATACAGCTATCATTCATTTTCCTTGATTTGGGAGCCTAATTTCTTTAATTTAGTATGCAAGAAAACCAATTTGGAAA TATCAACTGTTTTGGAAACCTTAGACCTAGGTCATCCTTAGTAAGATcttcccatttatataaatacttgcaagtGATCT >seq3 GATAAGTattaccaaacataaagccaactgagatgcccaaagggggccactctccttgcttttcctcctttttagaggat ttatttcccatttttcttaaaaaggaagaacaaactgtgccctagggtttactgtgtcagaacagagtgtgccgattgtg gtcaggactccatagcatttcaccattgagttatttccgcccccttacgtgtctctcttcagcggtctattatctccaag agggcataaaacactgagtaaacagctcttttatatgtgtttcctggatgagccttcttttaattaattttgttaaggga tttcctctagggccactgcacgtcatggggagtcacccccagacactcccaattggccccttgtcacccaggggcacatt tcagctAtttgtaaaacctgaaatcactagaaaggaatgtctagtgacttgtgggggccaaggcccttgttatggggatg aaggctcttaggtggtagccctccaagagaatagatggtgaatgtctcttttcagacattaaaggtgtcagactctcagt taatctctcctagatccaggaaaggcctagaaaaggaaggcctgactgcattaatggagattctctccatgtgcaaaatt tcctccacaaaagaaatccttgcagggccattttaatgtgttggccctgtgacagccatttcaaaatatgtcaaaaaata tattttggagtaaaatactttcattttccttcagagtctgctgtcgtatgatgccataccagagtcaggttggaaagtaa gccacattatacagcgttaacctaaaaaaacaaaaaactgtctaacaagattttatggtttatagagcatgattccccgg GATCTGATAAGTCCCAGGACTTCAGATCTGATAAGT EOF close DB; 1; } sub create_search_file { my ($filename) = @_; open(TEST, ">$filename") || die "FAIL: couldn't create the database file"; print TEST <<"EOF"; GATCTGATAAGT TGATAAGTCCCA AGTCCCAGGACT CAGGACTTCAGA AGGACTTCAGAA TGAATAGTCTAG CTGAATAGTCTA GACTTCAGGACC AAGACTTCAGGA EOF close TEST; 1; } sub get_expected { my $expected = < " exit 1 fi prog=$1; if test ! -x $prog; then echo "FAIL: $prog not executable"; exit 1; fi qfile=$2; if test ! -r $qfile; then echo "FAIL: $qfile not readable"; exit 1; fi tfile=$3; if test ! -r $tfile; then echo "FAIL: $tile not readable"; exit 1; fi tmppfx=$4 # Running with default seed shows identical results $prog $qfile $tfile > $tmppfx.out; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi cat $tmppfx.out | grep -v "^#" > $tmppfx.out1 $prog $qfile $tfile > $tmppfx.out; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi cat $tmppfx.out | grep -v "^#" > $tmppfx.out2 diff $tmppfx.out1 $tmppfx.out2 > /dev/null if test $? -ne 0 then echo "FAIL: results differ" exit 1 fi # Running with different seeds shows stochastically different results $prog --seed 1 $qfile $tfile > $tmppfx.out; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi cat $tmppfx.out | grep -v "^#" > $tmppfx.out1 $prog --seed 2 $qfile $tfile > $tmppfx.out; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi cat $tmppfx.out | grep -v "^#" > $tmppfx.out2 diff $tmppfx.out1 $tmppfx.out2 > /dev/null if test $? -eq 0 then echo "FAIL: results are the same despite different rng seeds" exit 1 fi rm $tmppfx.out $tmppfx.out1 $tmppfx.out2 echo "ok" exit 0 hmmer-3.1b2/testsuite/PSE.sto0000664361611702660230000000151612473612615015504 0ustar wheelerteddy# STOCKHOLM 1.0 # Proximal sequence element (PSE) Onc120/U1 TGACCCATAAATATTTA Onc121/U2 TGACCCATTAATATTTA Onc123/U2 TGACCCATTAGTATTTA Onc77/U2 TGACCCATTAGTATTTA Onc124.1/U3 TAACCCATTAATAATTT Onc125/U4 TGACCCATTAATATTTA Onc127/U5 TGACCCATTAATATTTA Onc128/U6 TAACCCATTAATATTTA Onc151/U4atac TAACCCATAGAAACTTA Onc114/U6atac TGACCCATAGAAAATTA Onc81/SRP TAACCCATAAACTTTTA Onc149/RNaseP TGACCCATTAACTATTA Onc150/Telomerase TGACCCATAAATATTTA Onc91/classII TGACCCATGAATTATTA Onc92/classII TAACCCATAAATAATTA Onc94/classII TTACCCATAAACAATTA Onc95/classII TGACCCATTAATATTTA Onc96/classII TGACCCATTAAAAGTTA Onc155/classII GATCCCATCAATTTTAT Onc156/classII TAACCCATTAATAATTA #=GC RF xxxxxxxxxxxxxxxxx #=GC SS_cons ................. //hmmer-3.1b2/testsuite/i9-optional-annotation.pl0000775361611702660230000001132712473612615021203 0ustar wheelerteddy#! /usr/bin/perl # Check that we can deal with HMMs with no optional annotation, in either # hmmscan or hmmsearch mode. # Bug #h69 segfaulted on this test. # # Usage: ./i9-optional-annotation.pl # Example: ./i9-optional-annotation.pl .. .. tmpfoo # # SRE, Sun Nov 29 11:49:39 2009 # SVN $Id: i9-optional-annotation.pl 3145 2010-02-03 16:55:42Z eddys $ BEGIN { $builddir = shift; $srcdir = shift; $tmppfx = shift; } use lib "$srcdir/testsuite"; use h3; # Verify that we have all the executables we need for the test. if (! -x "$builddir/src/hmmbuild") { die "FAIL: didn't find hmmbuild binary in $builddir/src\n"; } if (! -x "$builddir/src/hmmpress") { die "FAIL: didn't find hmmpress binary in $builddir/src\n"; } if (! -x "$builddir/src/hmmsearch") { die "FAIL: didn't find hmmsearch binary in $builddir/src\n"; } if (! -x "$builddir/src/hmmscan") { die "FAIL: didn't find hmmscan binary in $builddir/src\n"; } # Create our test files. if (! open(ALI1, ">$tmppfx.sto")) { die "FAIL: couldn't open $tmppfx.sto for write\n"; } if (! open(SEQ1, ">$tmppfx.seq")) { die "FAIL: couldn't open $tmppfx.seq for write\n"; } print ALI1 <<"EOF"; # STOCKHOLM 1.0 #=GF ID ali1 #=GF AC XX01234.5 #=GF DE A test description seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY // # STOCKHOLM 1.0 #=GF ID ali2 seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY // EOF print SEQ1 <<"EOF"; ID test1 STANDARD; PRT; 20 AA. AC AC00001; DE Sequence description SQ SEQUENCE 20 AA; 99999 MW; FFFFFFFFFFFFFFFF CRC64; ACDEFGHIKLMNPQRSTVWY // ID test2 STANDARD; PRT; 20 AA. SQ SEQUENCE 20 AA; 99999 MW; FFFFFFFFFFFFFFFF CRC64; ACDEFGHIKLMNPQRSTVWY // EOF close ALI1; close SEQ1; @output = `$builddir/src/hmmbuild $tmppfx.hmm $tmppfx.sto 2>&1`; if ($? != 0) { die "FAIL: hmmbuild failed\n"; } @output = `$builddir/src/hmmpress $tmppfx.hmm 2>&1`; if ($? != 0) { die "FAIL: hmmpress failed\n"; } @output = `$builddir/src/hmmscan --tblout $tmppfx.tbl1 --domtblout $tmppfx.dtbl1 $tmppfx.hmm $tmppfx.seq 2>&1`; if ($? != 0) { die "FAIL: hmmscan failed\n"; } &h3::ParseDomTbl("$tmppfx.dtbl1"); if ($h3::ndomtbl != 4) { die "FAIL: on expected number lines, dtbl1\n"; } if ($h3::tname[0] ne "ali1") { die "FAIL: on line 0 target name, dtbl1\n"; } if ($h3::tacc[0] ne "XX01234.5") { die "FAIL: on line 0 accession, dtbl1\n"; } if ($h3::tdesc[0] ne "A test description") { die "FAIL: on line 0 desc, dtbl1\n"; } if ($h3::qname[0] ne "test1") { die "FAIL: on line 0 query name, dtbl1\n"; } if ($h3::qacc[0] ne "AC00001") { die "FAIL: on line 0 query accession, dtbl1\n"; } if ($h3::tname[1] ne "ali2") { die "FAIL: on line 1 target name, dtbl1\n"; } if ($h3::tacc[1] ne "-") { die "FAIL: on line 1 accession, dtbl1\n"; } if ($h3::tdesc[1] ne "-") { die "FAIL: on line 1 desc, dtbl1\n"; } if ($h3::qname[2] ne "test2") { die "FAIL: on line 2 query name, dtbl1\n"; } if ($h3::qacc[2] ne "-") { die "FAIL: on line 2 query accession, dtbl1\n"; } @output = `$builddir/src/hmmsearch --tblout $tmppfx.tbl2 --domtblout $tmppfx.dtbl2 $tmppfx.hmm $tmppfx.seq 2>&1`; if ($? != 0) { die "FAIL: hmmsearch failed\n"; } &h3::ParseDomTbl("$tmppfx.dtbl2"); if ($h3::ndomtbl != 4) { die "FAIL: on expected number lines, dtbl2\n"; } if ($h3::tname[0] ne "test1") { die "FAIL: on line 0 target name, dtbl2\n"; } if ($h3::tacc[0] ne "AC00001") { die "FAIL: on line 0 accession, dtbl2\n"; } if ($h3::tdesc[0] ne "Sequence description") { die "FAIL: on line 0 desc, dtbl2\n"; } if ($h3::qname[0] ne "ali1") { die "FAIL: on line 0 query name, dtbl2\n"; } if ($h3::qacc[0] ne "XX01234.5") { die "FAIL: on line 0 query accession, dtbl2\n"; } if ($h3::tname[1] ne "test2") { die "FAIL: on line 1 target name, dtbl2\n"; } if ($h3::tacc[1] ne "-") { die "FAIL: on line 1 accession, dtbl2\n"; } if ($h3::tdesc[1] ne "-") { die "FAIL: on line 1 desc, dtbl2\n"; } if ($h3::qname[2] ne "ali2") { die "FAIL: on line 2 query name, dtbl2\n"; } if ($h3::qacc[2] ne "-") { die "FAIL: on line 2 query accession, dtbl2\n"; } print "ok\n"; unlink "$tmppfx.sto"; unlink "$tmppfx.seq"; unlink "$tmppfx.tbl1"; unlink "$tmppfx.tbl2"; unlink "$tmppfx.dtbl1"; unlink "$tmppfx.dtbl2"; unlink <$tmppfx.hmm*>; exit 0; hmmer-3.1b2/testsuite/i4-zerolength-seqs.sh0000775361611702660230000000316712473612615020335 0ustar wheelerteddy#! /bin/sh # Usage: # ./i4-zerolength-seqs.sh # # Example: # ../src/hmmbuild minifam.hmm minifam # ../src/hmmpress minifam.hmm # ./i4-zerolength-seqs.sh .. .. minifam.hmm baz # rm minifam.hmm* # # Verifies that the search programs can take zero length sequences as # input without crashing. # # The must be press'ed, for hmmscan to work on it. if test ! $# -eq 4; then echo "Usage: $0 " exit 1 fi builddir=$1; srcdir=$2; hmmfile=$3; tmppfx=$4; hmmscan=$builddir/src/hmmscan; if test ! -x $hmmscan; then echo "FAIL: $hmmscan not executable"; exit 1; fi hmmsearch=$builddir/src/hmmsearch; if test ! -x $hmmsearch; then echo "FAIL: $hmmsearch not executable"; exit 1; fi phmmer=$builddir/src/phmmer; if test ! -x $phmmer; then echo "FAIL: $phmmer not executable"; exit 1; fi jackhmmer=$builddir/src/jackhmmer; if test ! -x $jackhmmer; then echo "FAIL: $jackhmmer not executable"; exit 1; fi if test ! -r $hmmfile; then echo "FAIL: $hmmfile not readable"; exit 1; fi fafile=$tmppfx.fa cat > $fafile <foo >bar YYYYY EOF $hmmscan $hmmfile $fafile > /dev/null 2>&1; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi $hmmsearch $hmmfile $fafile > /dev/null 2>&1; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi $phmmer $fafile $fafile > /dev/null 2>&1; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi $jackhmmer $fafile $fafile > /dev/null 2>&1; if test $? -ne 0; then echo "FAIL: crash"; exit 1; fi echo "ok" rm $fafile exit 0 hmmer-3.1b2/testsuite/testsuite.sqc0000664361611702660230000010624512473612615017074 0ustar wheelerteddy# HMMER's test suite, in sqc command format # # See the ../easel/devkit/sqc script for documentation of sqc. # # Usage: # sqc testsuite.sqc # Example: # cd build-debug # sqc 1 ../testsuite/valgrind.sqc . .. # # level 1 = the standard test suite # level 2 = (currently nothing) # level 3 = valgrind tests # # Remember, sqc does three types of file substitution on this file: # @foo@ = executables in the build directory => top_builddir/foo # !foo! = data files in the source directory => top_srcdir/foo # %FOO% = tmp files, created, managed, cleaned up by sqc itself # ################################################################ # Unit test drivers for each .c file ################################################################ 1 exercise hmmer @src/hmmer_utest@ 1 exercise build @src/build_utest@ 1 exercise generic_fwdback @src/generic_fwdback_utest@ 1 exercise generic_msv @src/generic_msv_utest@ 1 exercise generic_stotrace @src/generic_stotrace_utest@ 1 exercise generic_viterbi @src/generic_viterbi_utest@ 1 exercise logsum @src/logsum_utest@ 1 exercise modelconfig @src/modelconfig_utest@ 1 exercise seqmodel @src/seqmodel_utest@ 1 exercise p7_alidisplay @src/p7_alidisplay_utest@ 1 exercise p7_bg @src/p7_bg_utest@ 1 exercise p7_gmx @src/p7_gmx_utest@ 1 exercise p7_hmm @src/p7_hmm_utest@ 1 exercise p7_hmmfile @src/p7_hmmfile_utest@ 1 exercise p7_profile @src/p7_profile_utest@ 1 exercise p7_tophits @src/p7_tophits_utest@ 1 exercise p7_trace @src/p7_trace_utest@ 1 exercise p7_scoredata @src/p7_scoredata_utest@ 1 exercise decoding @src/impl/decoding_utest@ 1 exercise fwdback @src/impl/fwdback_utest@ 1 exercise io @src/impl/io_utest@ 1 exercise msvfilter @src/impl/msvfilter_utest@ 1 exercise null2 @src/impl/null2_utest@ 1 exercise optacc @src/impl/optacc_utest@ 1 exercise stotrace @src/impl/stotrace_utest@ 1 exercise vitfilter @src/impl/vitfilter_utest@ # Still to come, unit tests for # emit.c # errors.c # evalues.c # eweight.c # heatmap.c # hmmer.c # island.c # modelstats.c # mpisupport.c (MPI testing needs to be handled specially) # p7_bg.c # p7_domaindef.c # p7_prior.c # p7_spensemble.c ################################################################ # Option tests ################################################################ # hmmalign xxxxxxxxxxxxxxxxxxxx 1 prep testseq @src/hmmemit@ -p --unilocal -L0 -N 4 --seed 42 !testsuite/Caudal_act.hmm! > %TESTSEQ% 1 exercise hmmalign @src/hmmalign@ !testsuite/Caudal_act.hmm! %TESTSEQ% 1 exercise hmmalign/-h @src/hmmalign@ -h 1 exercise hmmalign/-o @src/hmmalign@ -o /dev/null !testsuite/Caudal_act.hmm! %TESTSEQ% 1 exercise hmmalign/--mapali @src/hmmalign@ --mapali !testsuite/Caudal_act.sto! !testsuite/Caudal_act.hmm! %TESTSEQ% 1 exercise hmmalign/--trim @src/hmmalign@ --trim !testsuite/Caudal_act.hmm! %TESTSEQ% 1 exercise hmmalign/--amino @src/hmmalign@ --amino !testsuite/Caudal_act.hmm! %TESTSEQ% 1 exercise hmmalign/--informat @src/hmmalign@ --informat fasta !testsuite/Caudal_act.hmm! %TESTSEQ% 1 exercise hmmalign/--outformat @src/hmmalign@ --outformat a2m !testsuite/Caudal_act.hmm! %TESTSEQ% # hmmbuild xxxxxxxxxxxxxxxxxxxx 1 exercise build @src/hmmbuild@ --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/-h @src/hmmbuild@ -h 1 exercise build/-n @src/hmmbuild@ -n foo --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/-o @src/hmmbuild@ -o %HMMBUILD.out% --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/-O @src/hmmbuild@ -O %HMMBUILD.sto% --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--amino @src/hmmbuild@ --amino --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/M1.sto! 1 exercise build/--dna @src/hmmbuild@ --dna --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/M1.sto! 1 exercise build/--rna @src/hmmbuild@ --rna --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/M1.sto! 1 exercise build/--fast @src/hmmbuild@ --fast --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--hand @src/hmmbuild@ --hand --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--symfrac @src/hmmbuild@ --symfrac 1.0 --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--fragthresh @src/hmmbuild@ --fragthresh 0.4 --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--wpb @src/hmmbuild@ --wpb --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--wgsc @src/hmmbuild@ --wgsc --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--wblosum @src/hmmbuild@ --wblosum --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--wnone @src/hmmbuild@ --wnone --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! # --wgiven not tested 1 exercise build/--wid @src/hmmbuild@ --wblosum --wid 0.5 --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--eent @src/hmmbuild@ --eent --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--eclust @src/hmmbuild@ --eclust --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--enone @src/hmmbuild@ --enone --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--eset @src/hmmbuild@ --eset 1.0 --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--ere @src/hmmbuild@ --eent --ere 0.55 --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--esigma @src/hmmbuild@ --eent --esigma 44.0 --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--eid @src/hmmbuild@ --eclust --eid 0.60 --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--pnone @src/hmmbuild@ --pnone --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--plaplace @src/hmmbuild@ --plaplace --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--EmL @src/hmmbuild@ --EmL 100 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--EmN @src/hmmbuild@ --EmN 250 --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--EvL @src/hmmbuild@ --EvL 100 --EmL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--EvN @src/hmmbuild@ --EvN 250 --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--EfL @src/hmmbuild@ --EfL 100 --EmL 10 --EvL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--EfN @src/hmmbuild@ --EfN 250 --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--Eft @src/hmmbuild@ --Eft 0.045 --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--informat @src/hmmbuild@ --informat stockholm --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! 1 exercise build/--seed @src/hmmbuild@ --seed 42 --EmL 10 --EvL 10 --EfL 10 %HMMBUILD.hmm% !testsuite/20aa.sto! # hmmemit xxxxxxxxxxxxxxxxxxxx 1 exercise hmmemit @src/hmmemit@ !testsuite/Caudal_act.hmm! 1 exercise hmmemit/-h @src/hmmemit@ -h 1 exercise hmmemit/-c @src/hmmemit@ -c !testsuite/Caudal_act.hmm! 1 exercise hmmemit/-o @src/hmmemit@ -o /dev/null !testsuite/Caudal_act.hmm! 1 exercise hmmemit/-p @src/hmmemit@ -p !testsuite/Caudal_act.hmm! 1 exercise hmmemit/-N @src/hmmemit@ -N 10 !testsuite/Caudal_act.hmm! 1 exercise hmmemit/-L @src/hmmemit@ -p -L 50 !testsuite/Caudal_act.hmm! 1 exercise hmmemit/--local @src/hmmemit@ -p --local !testsuite/Caudal_act.hmm! 1 exercise hmmemit/--unilocal @src/hmmemit@ -p --unilocal !testsuite/Caudal_act.hmm! 1 exercise hmmemit/--glocal @src/hmmemit@ -p --glocal !testsuite/Caudal_act.hmm! 1 exercise hmmemit/--uniglocal @src/hmmemit@ -p --uniglocal !testsuite/Caudal_act.hmm! # hmmsearch xxxxxxxxxxxxxxxxxxxx 1 prep rnddb @easel/miniapps/esl-shuffle@ -G --amino -L 100 -N 2 -o %RNDDB% 1 exercise search @src/hmmsearch@ !tutorial/globins4.hmm! %RNDDB% 1 exercise search/-h @src/hmmsearch@ -h 1 exercise search/-o @src/hmmsearch@ -o %HMMSEARCH.out% !tutorial/globins4.hmm! %RNDDB% 1 exercise search/-A @src/hmmsearch@ -A %HMMSEARCH.sto% !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--tblout @src/hmmsearch@ --tblout %HMMSEARCH.tbl% !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--domtblout @src/hmmsearch@ --domtblout %HMMSEARCH.dtbl% !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--pfamtblout @src/hmmsearch@ --pfamtblout %HMMSEARCH.dtbl% !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--acc @src/hmmsearch@ --acc !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--noali @src/hmmsearch@ --noali !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--notextw @src/hmmsearch@ --notextw !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--textw @src/hmmsearch@ --textw 256 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/-E @src/hmmsearch@ -E 0.01 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/-T @src/hmmsearch@ -T 20 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--domE @src/hmmsearch@ --domE 0.01 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--domT @src/hmmsearch@ --domT 20 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--incE @src/hmmsearch@ --incE 0.01 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--incT @src/hmmsearch@ --incT 20 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--incdomE @src/hmmsearch@ --incdomE 0.01 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--incdomT @src/hmmsearch@ --incdomT 20 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--cut_ga @src/hmmsearch@ --cut_ga !tutorial/fn3.hmm! %RNDDB% 1 exercise search/--cut_nc @src/hmmsearch@ --cut_nc !tutorial/fn3.hmm! %RNDDB% 1 exercise search/--cut_tc @src/hmmsearch@ --cut_tc !tutorial/fn3.hmm! %RNDDB% 1 exercise search/--max @src/hmmsearch@ --max !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--F1 @src/hmmsearch@ --F1 0.03 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--F2 @src/hmmsearch@ --F2 0.002 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--F3 @src/hmmsearch@ --F3 0.0002 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--nobias @src/hmmsearch@ --nobias !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--nonull2 @src/hmmsearch@ --nonull2 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/-Z @src/hmmsearch@ -Z 45000000 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--domZ @src/hmmsearch@ --domZ 45000000 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--seed @src/hmmsearch@ --seed 42 !tutorial/globins4.hmm! %RNDDB% 1 exercise search/--tformat @src/hmmsearch@ --tformat fasta !tutorial/globins4.hmm! %RNDDB% # --cpu: threads only # --mpi: MPI only # jackhmmer xxxxxxxxxxxxxxxxxxxx 1 exercise jackhmmer @src/jackhmmer@ --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/-h @src/jackhmmer@ -h 1 exercise j/-N @src/jackhmmer@ -N 2 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/-o @src/jackhmmer@ -o %PHMMER.out% --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/-A @src/jackhmmer@ -A %PHMMER.sto% --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--tblout @src/jackhmmer@ --tblout %PHMMER.tbl% --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--domtblout @src/jackhmmer@ --domtblout %PHMMER.dtbl% --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--chkhmm @src/jackhmmer@ --chkhmm %PHMMER.ch% --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--chkali @src/jackhmmer@ --chkali %PHMMER.ca% --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--acc @src/jackhmmer@ --acc --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--noali @src/jackhmmer@ --noali --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--notextw @src/jackhmmer@ --notextw --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--textw @src/jackhmmer@ --textw 256 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--popen @src/jackhmmer@ --popen 0.4 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--pextend @src/jackhmmer@ --pextend 0.6 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--mxfile @src/jackhmmer@ --mxfile !easel/formats/BLOSUM62! --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/-E @src/jackhmmer@ -E 0.01 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/-T @src/jackhmmer@ -T 20 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--domE @src/jackhmmer@ --domE 0.01 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--domT @src/jackhmmer@ --domT 20 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--incE @src/jackhmmer@ --incE 0.01 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--incT @src/jackhmmer@ --incT 20 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--incdomE @src/jackhmmer@ --incdomE 0.01 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--incdomT @src/jackhmmer@ --incdomT 20 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--max @src/jackhmmer@ --max --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--F1 @src/jackhmmer@ --F1 0.03 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--F2 @src/jackhmmer@ --F2 0.002 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--F3 @src/jackhmmer@ --F3 0.0002 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--nobias @src/jackhmmer@ --nobias --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% # builder options untested 1 exercise j/--EmL @src/jackhmmer@ --EmL 100 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--EmN @src/jackhmmer@ --EmN 250 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--EvL @src/jackhmmer@ --EvL 100 --EmL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--EvN @src/jackhmmer@ --EvN 250 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--EfL @src/jackhmmer@ --EfL 100 --EmL 10 --EvL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--EfN @src/jackhmmer@ --EfN 250 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--Eft @src/jackhmmer@ --Eft 0.045 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--nonull2 @src/jackhmmer@ --nonull2 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/-Z @src/jackhmmer@ -Z 45000000 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--domZ @src/jackhmmer@ --domZ 45000000 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--seed @src/jackhmmer@ --seed 42 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--qformat @src/jackhmmer@ --qformat fasta --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise j/--tformat @src/jackhmmer@ --tformat fasta --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% # --cpu: threads only # --mpi: MPI only # phmmer xxxxxxxxxxxxxxxxxxxx 1 exercise phmmer @src/phmmer@ --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/-h @src/phmmer@ -h 1 exercise phmmer/-o @src/phmmer@ -o %PHMMER.out% --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/-A @src/phmmer@ -A %PHMMER.sto% --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--tblout @src/phmmer@ --tblout %PHMMER.tbl% --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--domtblout @src/phmmer@ --domtblout %PHMMER.dtbl% --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--pfamtblout @src/phmmer@ --pfamtblout %PHMMER.dtbl% --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--acc @src/phmmer@ --acc --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--noali @src/phmmer@ --noali --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--notextw @src/phmmer@ --notextw --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--textw @src/phmmer@ --textw 256 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--popen @src/phmmer@ --popen 0.4 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--pextend @src/phmmer@ --pextend 0.6 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--mxfile @src/phmmer@ --mxfile !easel/formats/BLOSUM62! --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/-E @src/phmmer@ -E 0.01 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/-T @src/phmmer@ -T 20 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--domE @src/phmmer@ --domE 0.01 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--domT @src/phmmer@ --domT 20 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--incE @src/phmmer@ --incE 0.01 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--incT @src/phmmer@ --incT 20 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--incdomE @src/phmmer@ --incdomE 0.01 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--incdomT @src/phmmer@ --incdomT 20 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--max @src/phmmer@ --max --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--F1 @src/phmmer@ --F1 0.03 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--F2 @src/phmmer@ --F2 0.002 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--F3 @src/phmmer@ --F3 0.0002 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--nobias @src/phmmer@ --nobias --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--EmL @src/phmmer@ --EmL 100 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--EmN @src/phmmer@ --EmN 250 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--EvL @src/phmmer@ --EvL 100 --EmL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--EvN @src/phmmer@ --EvN 250 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--EfL @src/phmmer@ --EfL 100 --EmL 10 --EvL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--EfN @src/phmmer@ --EfN 250 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--Eft @src/phmmer@ --Eft 0.045 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--nonull2 @src/phmmer@ --nonull2 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/-Z @src/phmmer@ -Z 45000000 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--domZ @src/phmmer@ --domZ 45000000 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--seed @src/phmmer@ --seed 42 --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--qformat @src/phmmer@ --qformat fasta --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% 1 exercise phmmer/--tformat @src/phmmer@ --tformat fasta --EmL 10 --EvL 10 --EfL 10 !tutorial/HBB_HUMAN! %RNDDB% # --cpu: threads only # --mpi: MPI only # nhmmer xxxxxxxxxxxxxxxxxxxx 1 prep rnddb @easel/miniapps/esl-shuffle@ -G --dna -L 10000 -N 2 -o %RNDDB% 1 exercise nhmmer @src/nhmmer@ !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/-h @src/nhmmer@ -h 1 exercise nhmmer/-o @src/nhmmer@ -o %nhmmer.out% !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/-A @src/nhmmer@ -A %nhmmer.sto% !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--tblout @src/nhmmer@ --tblout %nhmmer.tbl% !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--dfamtblout @src/nhmmer@ --dfamtblout %nhmmer.dtbl% !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--acc @src/nhmmer@ --acc !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--noali @src/nhmmer@ --noali !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--notextw @src/nhmmer@ --notextw !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--textw @src/nhmmer@ --textw 256 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/-E @src/nhmmer@ -E 0.01 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/-T @src/nhmmer@ -T 20 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--incE @src/nhmmer@ --incE 0.01 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--incT @src/nhmmer@ --incT 20 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--max @src/nhmmer@ --max !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--F1 @src/nhmmer@ --F1 0.03 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--F2 @src/nhmmer@ --F2 0.002 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--F3 @src/nhmmer@ --F3 0.0002 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--nobias @src/nhmmer@ --nobias !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--nonull2 @src/nhmmer@ --nonull2 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/-Z @src/nhmmer@ -Z 45000000 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmer/--seed @src/nhmmer@ --seed 42 !tutorial/MADE1.hmm! %RNDDB% # nhmmscan xxxxxxxxxxxxxxxxxxxx 1 prep rnddb @easel/miniapps/esl-shuffle@ -G --dna -L 10000 -N 2 -o %RNDDB% 1 prep press @src/hmmpress@ -f !tutorial/MADE1.hmm! 1 exercise nhmmscan @src/nhmmscan@ !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/-h @src/nhmmscan@ -h 1 exercise nhmmscan/-o @src/nhmmscan@ -o %nhmmscan.out% !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--tblout @src/nhmmscan@ --tblout %nhmmscan.tbl% !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--dfamtblout @src/nhmmscan@ --dfamtblout %nhmmscan.dtbl% !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--acc @src/nhmmscan@ --acc !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--noali @src/nhmmscan@ --noali !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--notextw @src/nhmmscan@ --notextw !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--textw @src/nhmmscan@ --textw 256 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/-E @src/nhmmscan@ -E 0.01 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/-T @src/nhmmscan@ -T 20 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--incE @src/nhmmscan@ --incE 0.01 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--incT @src/nhmmscan@ --incT 20 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--max @src/nhmmscan@ --max !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--F1 @src/nhmmscan@ --F1 0.03 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--F2 @src/nhmmscan@ --F2 0.002 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--F3 @src/nhmmscan@ --F3 0.0002 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--nobias @src/nhmmscan@ --nobias !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--nonull2 @src/nhmmscan@ --nonull2 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/-Z @src/nhmmscan@ -Z 45000000 !tutorial/MADE1.hmm! %RNDDB% 1 exercise nhmmscan/--seed @src/nhmmscan@ --seed 42 !tutorial/MADE1.hmm! %RNDDB% ################################################################ # Integration tests ################################################################ # Prep a press'ed "minifam" that's used in several integration tests, # and extract an individual 'typical' model Caudal_act. 1 prep Caudal @easel/miniapps/esl-afetch@ !testsuite/minifam! Caudal_act > %CAUDAL.STO% 1 prep hmm @src/hmmbuild@ %CAUDAL.HMM% %CAUDAL.STO% 1 prep minifam @src/hmmbuild@ %MINIFAM.HMM% !testsuite/minifam! 1 prep minifam_press @src/hmmpress@ %MINIFAM.HMM% # Run-to-run variation tests # By default, stochastic simulations are seeded reproducibly, so there # is no run-to-run variation; whereas with different RNG seeds, # run-to-run variation does occur. [xref J5/99] # The hmmemit seed of 35 is carefully chosen to generate a target sequence # that requires stochastic clustering when aligned to the Caudal_act.hmm test # To search for new seeds, the command line is something like: # ( ../src/hmmemit --seed 35 -p Caudal_act.hmm | ../src/hmmsearch --seed 2 --tblout foo.out Caudal_act.hmm - > /dev/null ; cat foo.out ) # looking for high scoring sequences that force a stochastic clustering step. # # xxxxxxxxxxxxxxxxxxxx 1 prep seq @src/hmmemit@ --seed 35 -p %CAUDAL.HMM% > %TESTSEQ% 1 prep db_1 @src/hmmemit@ --seed 35 -p %CAUDAL.HMM% > %TESTDB% 1 prep db_2 @easel/miniapps/esl-reformat@ fasta !testsuite/Caudal_act.sto! >> %TESTDB% 1 prep db_3 @easel/miniapps/esl-shuffle@ -G --amino -N 100 -L 350 >> %TESTDB% 1 exercise hmmbuild_variation !testsuite/i1-build-variation.sh! @src/hmmbuild@ !testsuite/Caudal_act.sto! %OUTFILES% 1 exercise hmmscan_variation !testsuite/i2-search-variation.sh! @src/hmmscan@ %MINIFAM.HMM% %TESTSEQ% %OUTFILES% 1 exercise hmmsearch_variation !testsuite/i2-search-variation.sh! @src/hmmsearch@ %CAUDAL.HMM% %TESTDB% %OUTFILES% 1 exercise phmmer_variation !testsuite/i3-seqsearch-variation.sh! @src/phmmer@ %TESTSEQ% %TESTDB% %OUTFILES% 3 exercise jackhmmer_variation !testsuite/i3-seqsearch-variation.sh! @src/jackhmmer@ %TESTSEQ% %TESTDB% %OUTFILES% 1 exercise mapali !testsuite/i6-hmmalign-mapali.pl! @src/hmmalign@ @easel/miniapps/esl-reformat@ !testsuite! %OUTFILES% 1 exercise fragments !testsuite/i7-hmmbuild-fragments.pl! @src/hmmbuild@ %OUTFILES% 1 exercise nonresidues !testsuite/i8-nonresidues.pl! @@ !! %OUTFILES% 1 exercise opt-annotation !testsuite/i9-optional-annotation.pl! @@ !! %OUTFILES% 1 exercise dup-names !testsuite/i10-duplicate-names.pl! @@ !! %OUTFILES% 1 exercise mapali-again !testsuite/i11-hmmalign-mapali.pl! @@ !! %OUTFILES% 1 exercise delete-corruption !testsuite/i12-delete-corruption.pl! @@ !! %OUTFILES% 1 exercise msa-integrity !testsuite/i13-msa-integrity.pl! @@ !! %OUTFILES% 1 exercise hmmemit-consensus !testsuite/i14-hmmemit-consensus.pl! @@ !! %OUTFILES% 1 exercise hmmconvert !testsuite/i15-hmmconvert.pl! @@ !! %OUTFILES% 1 exercise stdin_pipes !testsuite/i17-stdin.pl! @@ !! %OUTFILES% 1 exercise nhmmer_generic !testsuite/i18-nhmmer-generic.pl! @@ !! %OUTFILES% 1 exercise hmmpgmd_ga !testsuite/i19-hmmpgmd-ga.pl! @@ !! %OUTFILES% #comment out fmindex test until it's been returned to life #1 exercise fmindex-core !testsuite/i20-fmindex-core.pl! @@ !! %OUTFILES% 1 exercise brute-itest @src/itest_brute@ 1 exercise hmmpress-itest !src/hmmpress.itest.pl! @src/hmmpress@ %MINIFAM.HMM% %TMPPFX% ################################################################ # Fixed bug tests ################################################################ # xxxxxxxxxxxxxxxxxxxx 1 exercise h39 @src/hmmsearch@ !testsuite/M1.hmm! !testsuite/M1.sto! 1 exercise h45 !testsuite/i4-zerolength-seqs.sh! @@ !! %MINIFAM.HMM% %OUTFILES% 1 exercise h50 !testsuite/i5-hmmbuild-naming.pl! @@ !! %OUTFILES% 1 exercise h82 !testsuite/i16-build-allins.pl! @@ !! %OUTFILES% ################################################################ # valgrind tests (optional. 'make SQCLEVEL=3 check') ################################################################ # xxxxxxxxxxxxxxxxxxxx 3 valgrind hmmer @src/hmmer_utest@ 3 valgrind build @src/build_utest@ 3 valgrind generic_fwdback @src/generic_fwdback_utest@ 3 valgrind generic_msv @src/generic_msv_utest@ 3 valgrind generic_stotrace @src/generic_stotrace_utest@ 3 valgrind generic_viterbi @src/generic_viterbi_utest@ 3 valgrind logsum @src/logsum_utest@ 3 valgrind modelconfig @src/modelconfig_utest@ 3 valgrind p7_alidisplay @src/p7_alidisplay_utest@ 3 valgrind p7_bg @src/p7_bg_utest@ 3 valgrind p7_gmx @src/p7_gmx_utest@ 3 valgrind p7_hmm @src/p7_hmm_utest@ 3 valgrind p7_hmmfile @src/p7_hmmfile_utest@ 3 valgrind p7_profile @src/p7_profile_utest@ 3 valgrind p7_tophits @src/p7_tophits_utest@ 3 valgrind p7_trace @src/p7_trace_utest@ 3 valgrind decoding @src/impl/decoding_utest@ 3 valgrind fwdback @src/impl/fwdback_utest@ 3 valgrind io @src/impl/io_utest@ 3 valgrind msvfilter @src/impl/msvfilter_utest@ 3 valgrind null2 @src/impl/null2_utest@ 3 valgrind optacc @src/impl/optacc_utest@ 3 valgrind stotrace @src/impl/stotrace_utest@ 3 valgrind vitfilter @src/impl/vitfilter_utest@ 1 prep minifam @src/hmmbuild@ %MINIFAM.HMM% !testsuite/minifam! 3 valgrind hmmbuild @src/hmmbuild@ %GLOBIN.HMM% !tutorial/globins4.sto! 3 valgrind hmmconvert @src/hmmconvert@ -b %GLOBIN.HMM% 3 valgrind hmmalign @src/hmmalign@ %GLOBIN.HMM% !tutorial/globins45.fa! 3 valgrind hmmemit @src/hmmemit@ -N10 %GLOBIN.HMM% 3 valgrind hmmpress @src/hmmpress@ -f %MINIFAM.HMM% 3 valgrind hmmfetch @src/hmmfetch@ %MINIFAM.HMM% Caudal_act 3 valgrind hmmscan @src/hmmscan@ %MINIFAM.HMM% !tutorial/HBB_HUMAN! 3 valgrind hmmsearch @src/hmmsearch@ %GLOBIN.HMM% !tutorial/globins45.fa! 3 valgrind hmmsim @src/hmmsim@ %GLOBIN.HMM% 3 valgrind hmmstat @src/hmmstat@ %MINIFAM.HMM% 3 valgrind jackhmmer @src/jackhmmer@ !tutorial/HBB_HUMAN! !tutorial/globins45.fa! 3 valgrind phmmer @src/phmmer@ !tutorial/HBB_HUMAN! !tutorial/globins45.fa! # some derivatives of tmpfiles created by hmmpress, not sqc itself: clean up #1 prep minifam rm -f %MINIFAM.HMM%.h3f %MINIFAM.HMM%.h3p %MINIFAM.HMM%.h3m %MINIFAM.HMM%.h3i ################################################################# # HMMER - Biological sequence analysis with profile HMMs # Version 3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # HMMER is distributed under the terms of the GNU General Public License # (GPLv3). See the LICENSE file for details. # # SVN $Id: testsuite.sqc 4406 2013-02-21 20:52:46Z wheelert $ # SVN $URL$ ################################################################ hmmer-3.1b2/testsuite/SMC_N.sto0000664361611702660230000015301512473612615015756 0ustar wheelerteddy# STOCKHOLM 1.0 #=GF ID SMC_N #=GF AC PF02463.10 #=GF DE RecF/RecN/SMC N terminal domain #=GF AU Bateman A #=GF SE [1] #=GF GA -95.80 -95.80; 24.40 24.40; #=GF TC -95.80 -95.80; 24.40 24.40; #=GF NC -95.90 -95.90; 24.30 24.30; #=GF TP Family #=GF BM hmmbuild -F --hand HMM_ls SEED #=GF BM hmmcalibrate --seed 0 HMM_ls #=GF BM hmmbuild -f -F --hand HMM_fs SEED #=GF BM hmmcalibrate --seed 0 HMM_fs #=GF AM globalfirst #=GF NE PF04423; #=GF NL Q12267/295-1321; #=GF NE PF06470; #=GF NL Q12267/295-1321; #=GF RN [1] #=GF RM 10429180 #=GF RT Structural maintenance of chromosomes (SMC) proteins: #=GF RT conserved molecular properties for multiple biological #=GF RT functions. #=GF RA Strunnikov AV, Jessberger R; #=GF RL Eur J Biochem 1999;263:6-13. #=GF RN [2] #=GF RM 9640531 #=GF RT SMC protein complexes and higher-order chromosome dynamics. #=GF RA Hirano T; #=GF RL Curr Opin Cell Biol 1998;10:317-322. #=GF DR PROSITE; PDOC00539; #=GF DR HOMSTRAD; ABC_tran; #=GF DR SCOP; 1f2t; fa; #=GF DC The following Pfam-B families contain sequences that according to Prodom #=GF DC are members of this Pfam-A family. #=GF DR PFAMB; PB001893; #=GF DR PFAMB; PB003601; #=GF DR PFAMB; PB004206; #=GF DR PFAMB; PB006729; #=GF DR PFAMB; PB007921; #=GF DR PFAMB; PB010201; #=GF DR PFAMB; PB010634; #=GF DR PFAMB; PB011218; #=GF DR PFAMB; PB013203; #=GF DR PFAMB; PB014228; #=GF DR PFAMB; PB017035; #=GF DR PFAMB; PB018409; #=GF DR PFAMB; PB020745; #=GF DR PFAMB; PB031758; #=GF DR PFAMB; PB033991; #=GF DR PFAMB; PB034984; #=GF DR PFAMB; PB035877; #=GF DR PFAMB; PB035900; #=GF DR PFAMB; PB037220; #=GF DR PFAMB; PB037301; #=GF DR PFAMB; PB052451; #=GF DR PFAMB; PB056231; #=GF DR PFAMB; PB064277; #=GF DR PFAMB; PB069590; #=GF DR PFAMB; PB075176; #=GF DR PFAMB; PB087283; #=GF DR PFAMB; PB089380; #=GF DR PFAMB; PB093956; #=GF DR PFAMB; PB094898; #=GF DR PFAMB; PB106945; #=GF DR PFAMB; PB111651; #=GF DR PFAMB; PB119733; #=GF DR PFAMB; PB119735; #=GF DR PFAMB; PB120277; #=GF DR PFAMB; PB125166; #=GF DR PFAMB; PB126624; #=GF DR PFAMB; PB128189; #=GF DR PFAMB; PB133582; #=GF DR PFAMB; PB142666; #=GF DR PFAMB; PB152346; #=GF DR PFAMB; PB152493; #=GF DR PFAMB; PB153693; #=GF DR PFAMB; PB156411; #=GF DR PFAMB; PB156457; #=GF DR PFAMB; PB168691; #=GF DR PFAMB; PB169449; #=GF DR PFAMB; PB169485; #=GF DR PFAMB; PB169520; #=GF DR PFAMB; PB169867; #=GF DR PFAMB; PB169874; #=GF DR PFAMB; PB170016; #=GF DR PFAMB; PB170063; #=GF DR PFAMB; PB170128; #=GF DR PFAMB; PB170619; #=GF DR PFAMB; PB170867; #=GF DR PFAMB; PB171494; #=GF DR PFAMB; PB171917; #=GF DR PFAMB; PB172115; #=GF DR PFAMB; PB172415; #=GF DR PFAMB; PB172563; #=GF DR PFAMB; PB172567; #=GF DR PFAMB; PB172923; #=GF DR PFAMB; PB173552; #=GF DR PFAMB; PB173779; #=GF DR PFAMB; PB173783; #=GF DR PFAMB; PB173881; #=GF DR PFAMB; PB174322; #=GF DR PFAMB; PB175475; #=GF DR PFAMB; PB175696; #=GF DR PFAMB; PB175744; #=GF DR PFAMB; PB176033; #=GF DR PFAMB; PB176065; #=GF DR PFAMB; PB176151; #=GF DR PFAMB; PB176204; #=GF DR PFAMB; PB176886; #=GF DR PFAMB; PB176948; #=GF DR PFAMB; PB177206; #=GF DR PFAMB; PB177262; #=GF DR PFAMB; PB177311; #=GF DR PFAMB; PB177501; #=GF DR PFAMB; PB177602; #=GF DR PFAMB; PB178745; #=GF DR PFAMB; PB179645; #=GF DR PFAMB; PB179788; #=GF DR PFAMB; PB180891; #=GF DR PFAMB; PB180976; #=GF DR PFAMB; PB181268; #=GF DR PFAMB; PB181451; #=GF DR PFAMB; PB181494; #=GF DR PFAMB; PB181922; #=GF DR PFAMB; PB182299; #=GF DR PFAMB; PB182468; #=GF DR PFAMB; PB182487; #=GF DR INTERPRO; IPR003395; #=GF CC This domain is found at the N terminus of SMC proteins. #=GF CC The SMC (structural maintenance of chromosomes) superfamily #=GF CC proteins have ATP-binding domains at the N- and #=GF CC C-termini, and two extended coiled-coil domains separated by #=GF CC a hinge in the middle. The eukaryotic SMC proteins form two #=GF CC kind of heterodimers: the SMC1/SMC3 and the SMC2/SMC4 types. #=GF CC These heterodimers constitute an essential part of higher #=GF CC order complexes, which are involved in chromatin and DNA #=GF CC dynamics [1]. #=GF CC This family also includes the RecF and RecN proteins that #=GF CC are involved in DNA metabolism and recombination. #=GF SQ 29 #=GS RECF_PSEPU/2-358 AC P13456.2 #=GS RECF_ECOLI/2-356 AC P0A7H0.2 #=GS RECF_PROMI/2-359 AC P22839.1 #=GS RECF_ACTPL/2-359 AC P24718.1 #=GS RECF_HAEIN/2-356 AC P43767.1 #=GS P115_MYCHR/3-961 AC P41508.2 #=GS SMC_BACSU/2-1172 AC P51834.2 #=GS P115_MYCPN/3-963 AC P75361.1 #=GS O83382_TREPA/3-919 AC O83382.1 #=GS SMC_MYCTU/2-1186 AC Q10970.2 #=GS O28714_ARCFU/2-1148 AC O28714.1 #=GS SMC_METJA/3-1163 AC Q59037.2 #=GS O59462_PYRHO/3-1151 AC O59462.1 #=GS O66878_AQUAE/6-1140 AC O66878.1 #=GS P73340_SYNY3/3-1194 AC P73340.1 #=GS O51074_BORBU/6-815 AC O51074.1 #=GS SMC2_YEAST/2-1166 AC P38989.1 #=GS SMC2_CHICK/2-1167 AC Q90988.1 #=GS SUDA_EMENI/2-1193 AC Q00737.1 #=GS Q24098_DROME/33-1211 AC Q24098.1 #=GS SMC3_YEAST/2-1208 AC P47037.1 #=GS SMC4_YEAST/155-1406 AC Q12267.1 #=GS SMC4_SCHPO/125-1313 AC P41004.2 #=GS SMC4_XENLA/77-1268 AC P50532.1 #=GS DPY27_CAEEL/92-1330 AC P48996.1 #=GS SMC4_CAEEL/91-1361 AC Q20060.1 #=GS SMC1A_HUMAN/3-1212 AC Q14683.2 #=GS O01789_CAEEL/15-1251 AC O01789.3 #=GS SMC1_YEAST/3-1212 AC P32908.1 #=GS SMC1_YEAST/3-1212 DR PDB; 1w1w A; 3-1198; #=GS SMC1_YEAST/3-1212 DR PDB; 1w1w B; 3-1198; #=GS SMC1_YEAST/3-1212 DR PDB; 1w1w D; 3-1198; #=GS SMC1_YEAST/3-1212 DR PDB; 1w1w C; 3-1198; RECF_PSEPU/2-358 SLRRIMVTAVRNL..HPVTLLPSPRINILYGANGSGKTSVLEAV.HLLG...LARSFRSTRLNPVIQY...............EQAACTVFGEVQLT...........EGGT................SNLGVSRERQGE...FTIRI........DGQNARQ.AQLAELLPLQLINPDs..........frllegapkirr.......qfld..wgvfhveprflpawqrlqk......................................................................................................................................................................................................................................................................................................................................................................................................................................................alrqrns..................................................................................wlrhgtld.................................................................................................................................................................................................................................................pasqaawdrelclrsaeideyrrnyikal........................................................................................................................................................................................................kpvfertlselvel.dgltlsyyrgwdkdrelqevlassllrdqqmghtq............................................agpqradlrlrlagnnaa.................................................dILSRGQQKLVGMRII.AQGHLVSQARRGHCIYLVDDLPSELDDQHRRALCRLLE..ELR...CQVFITCVDHELLREGW.QTETPVALFHVEQGRIT RECF_ECOLI/2-356 SLTRLLIRDFRNI..ETADLALSPGFNFLVGANGSGKTSVLEAI.YTLG...HGRAFRSLQIGRVIRH...............EQEAFVLHGRLQG............EERE................TAIGLTKDKQGD...SKVRI........DGTDGHKVAELAHLMPMQLITPEg..........ftllnggpkyrr.......afld..wgcfhnepgfftawsnlkr......................................................................................................................................................................................................................................................................................................................................................................................................................................................llkqrna..................................................................................alrqvtr..................................................................................................................................................................................................................................................yeqlrpwdkeliplaeqistwraeysagia.......................................................................................................................................................................................................admadtckqflpef..sltfsfqrgweketeyaevlernferdrqltyta............................................hgphkadlriradgapve.................................................dTLSRGQLKLLMCALRLAQGEFLTRESGRRCLYLIDDFASELDDERRGLLASRLK..ATQ...SQVFVSAISAEHVIDM...SDENSKMFTVEKGKIT RECF_PROMI/2-359 ILSRLLIRHFRNI..EQADLPLADGFNFLVGPNGSGKTSILEAI.YTLG...HGRAFRSAQANRVIQH...............DENAFILHGRLSGL.........DEESRG................YSIGLSKDREGN...STVRI........DGSDGHKIAELAKLLPMQLITPEg..........ftllnggpkyrr.......afid..wgcfhneprffaawsdlkr......................................................................................................................................................................................................................................................................................................................................................................................................................................................vlkqrna..................................................................................alrqass..................................................................................................................................................................................................................................................yrqllpwdkelillteqisqwraeytedia.......................................................................................................................................................................................................kdieetcqlflpef..tlkvsfqrgwdketdyaqllerqferdkvlsyts............................................lgahkadlrirangtpve.................................................dMLSRGQLKLLMCALRLAQGEYFTRKNGQRCLYLLDDFASELDANRRQLLAERLK..STQ...AQVFVSAITSGQVKDM...LDVNSRLFSVEHGKIE RECF_ACTPL/2-359 PLSRLIINNFRNL..QSLDLELSPNFNFIVGHNGSGKTSLLEAI.FYLG...HGRSFKSHISNRIIHY...............QAEDFVLHARIDE............GQHQ................WSVGIQKKRSGD...TLLKI........NGEDGNKISDLAHLLPMQVITPEg..........ltllnggptfrr.......afld..wglfhqytefyscwanlkr......................................................................................................................................................................................................................................................................................................................................................................................................................................................llkqrna..................................................................................alhqvrs..................................................................................................................................................................................................................................................yaelkpwdielaklaeivsqmrasyaeglr.......................................................................................................................................................................................................peiektcqfflpel..eigvsfhqgwekgtdyaeilaqgferdkamgytm............................................igpqkadfrfranglpve.................................................dVLSRGQLKLLMCALRLAQGEYLVAQKERQCLFLIDDFASELDPIKRELLAHRLR..ESG...SQVFVTAITKDQLNQMQWQESEQDSLFQVQQGMLT RECF_HAEIN/2-356 AISRLLVEKFRNL..TAVDLDFDPCFNFLIGNNGSGKTSLLEAI.FYLG...HGRSFKSAVTNRIISY...............DEPHFTLFGQIQE............SQHQ................WSIGLQKLRQGN...TLVKI........NGEDGNKISDLAHLLPMQLITPEg..........ltllnggpsyrr.......afld..wglfhhqtsfysawsnlnr......................................................................................................................................................................................................................................................................................................................................................................................................................................................llkqrna..................................................................................alaqnqp..................................................................................................................................................................................................................................................ysaikiwdvelaklahqvsewraeyaeals.......................................................................................................................................................................................................peieqtcqlflpel..einvsfhqgweknadyyeilqqnferdralnytf............................................sgpqkadfrfkaqglpve.................................................dVLSRGQLKLLMCALRLAQGEHLMKEKQRHCIFLIDDFASELDQYKRALLAERLQ..QSG...SQVFVTAITQRQLKEM...QVENKKMFSVHNGIIN P115_MYCHR/3-961 KLIKIEIEGFKSFA.DPISINFDGSVVGIVGPNGSGKSNINDAIRWVLGEQ.SAKQLRGLNMDDVIFAG.............SKTVKPQEKAMVKLTF........KNEDAI..........EETKQIFTISRLLKRGQGT..NEYFY........NDQPVRY.KDIKNLAVESGISKSs.laiisqgtiseiaeatpeqrk.......avieeaagtskykldkeeaqkklirtndaidklqgai.kelerqvnsldkqaskakiylekskalesvevglivndlnffneklnnlntslle..............veqqrndlelniqtyessisqtvhfktevessiqei.tsk..ldnlknalse.inlqearieerrkliisg.....eivvdqktkieeikkqveslkiq............................................................................................inaskqre..ieldqqltrlna.kanslklqendinkeig......vllekksaaaaninilkqqfenksflskgiktik...............................dnsflfdgyiglaselfkv...esefslaietvlgaalnqivmktsedvlqaidflkknls.gkatfipltsikerevredhllv.lk..gqkgflgv.akelief.dtqfnklfgfllgnilvvdnvdnanriakildh...kytivsle..gdlfrpggtitggsklertsi.............lnydikikehtntlkfaedqihdlkikqqtiyneietvnstiqqvkieansin.......................................skl........nilneelnnlklnaseifkeqqedq............eslnlsfdseklniekqistltielnskkdrlt..................nliseqgkg.....etkkqeldaklrklntqhsdsiteqnrakflveqnqkrlsehykltleaaseqy.......sldldieqa...............................................................................................................................................................rhfvdslkkelkel.gnvnleaitefeevnqryqekkqyieelttakskieeaisdldkiiinktteivnlvnnefnmvfqkmfg.........gg..kaeihftd...knd.............................ilnsgveisaqppgktiknlrLFSGGEKAIIAISLLFA.....ILKARPIPLCILDEVEAALDESNVIRYVEFLK..LLKEN.TQFLIITHRSGTMSRV....DQLLGVTMQKRGVTS SMC_BACSU/2-1172 FLKRLDVIGFKSFA.ERISVDFVKGVTAVVGPNGSGKSNITDAIRWVLGEQ.SARSLRGGKMEDIIFAG.............SDSRKRLNLAEVTLTL........DNDDHF.......LPIDFHE..VSVTRRVYRSGE...SEFLI........NNQPCRL.KDIIDLFMDSGLGKEa.fsiisqgkveeilsskaedrr.......sifeeaagvlkyktrkkkaenklfetqdnlnrvedil.helegqveplkiqasiakdylekkkelehveialtaydieklhgkwstlkekvqm..............akeeelaessaisakeakiedtrdkiqaldesvnel.qqv..llvtseelek.legrkevlkerkknavqnqeqleeaivqfqqketvlkeelskqeav....fetlqaevkqlraqvkekqqalslhnenveekieqlksdyfellnsqasirnelqllddqmsqsavtlqrladnnekhlqerhdisarkaacetef..arieqeihsqvg.ayrdmqtkyeqkkrqye......knesalyqayqyvqqarskkdmletmqgdfsgfyqgvkevl........................kakerlggirgavlelist...eqkyetaieialgasaqhvvtddeqsarkaiqylkqnsf.gratflplsvirdrqlqsrdaet.aa..rhssflgv.aselvtf.dpayrsviqnllgtvlitedlkganelakllgh...ryrivtle..gdvvnpggsmtggavkkknnsllgrsrel.....edvtkrlaemeektalleqevktlkhsiqdmekkladlretgeglrlkqqdvkgqlyelqvaekninthlelydqeksals...........esdeerkvrk.rkleeelsavse.kmkqleedidrl............tkqkqtqsstkeslsneltelkiaaakkeqack........geed...nlarlkkeltet.....elalkeakedlsfltsemssstsgeekleeaakhklndktktielialrrdqri.......klqhgldtyerelkemkrlykqkt.tllkdeevklgrmeveldn.llqy.........................lreeysl....................................................sfegakekyqletdpeea.................rkrvkliklaieel.gtvnlgsidefervnerykflseqkedlteakntlfqvieemdeemtkrfndtfvqirshfdqvfrslfg.........gg..raelrltd...pnd.............................llhsgveiiaqppgkklqnlnLLSGGERALTAIALLFS.....ILKVRPVPFCVLDEVEAALDEANVFRFAQYLK..KYSSD.TQFIVITHRKGTMEEA....DVLYGVTMQESGVSK P115_MYCPN/3-963 FLKRFRAYGFKSYA.DEITINFTHSMTGIVGPNGSGKSNVVDALKWVLGER.SMKHLRSKSGDDMIFFG.............SKDKPASKLAEVELTF........DNSQKL.......LHDPRPE..ISVMRRIYRGSGQ..SEYYI........NGELVTL.KEISGIFADIGLEKGs.lgiisqgsvswfveakpeerr.......kifedasgigrytkrkeevtnqlartvqnlkqvsivl.nelkkdlkkltiqadkaqrfvklkeelkelelsvlvadylksqgeldrfnhqigy..............ieqdfklhepqlqlledqlnifnqrfrdadeqsikl.qqe..lqavyqtine.leqrkavidvqlknelsk........kdekhkiqalkklirvdqaq...................................................................................................l..eslqaqvlktts.eitlltnelstvqteld......ttklnlnqnsaalvyqqaqqeflkaqneewvktnpah............................vlvknvkaltgllntlntflkfekqyekallkalgksigylvvnnnlaalkaidflltnqi.gqvtflpiddiafd.tkiapehm.eilqqldgflgv.gsdhvsc.deslqpivnallgqviiasdlqaalklssytyk...lyrvvtln..getvyaggiiqggy....................vkdnlslynlqeklasseanitqlehnekqlrtnltsletklnelnkklkyeeillekfnervnhtnkailsykieyeqltn.....................esfdgtphsfde...trlveslnra.............................................................................waerdelnsqlklnqelketlaksiklaeaktadlralldeqrsqlvlaregki.......rfentihnitdkinggykltmefa.ianynkpiklstmqa................................................................................................................................qnkiarmqsqldem.gpinlesiaeiadkqkrfddingeyeslqtaikdlqtaigeidelackefdeliqkvnaelpktfnylfg.........gg..scqirytd...tdn.............................vllsgievfanppgknvanlmLLSGGEKTLVALSVLFS.....ILRVSAFPLVILDEAESALDPANVERFANIIG..NSSNN.TQFLIITHRQGTMMKC....DMLLGAAMQTKGVTK O83382_TREPA/3-919 FLKTLEVFGFKSFA.DRVRVEFADGVTALLGPNGCGKSNVVDAIKWVLGEQ.SSRALRADRMEDVIFNG.............TESRRSLNVAEASLTV........CDEAGI.......LSLDVPE..ILIKRRLYRSGE...SEYFL........NGNAVRL.KEIRELFWDTGIGKVa.ysvmeqgkidqilsnkpeerr.......ylfeeaagvtrfkvrgaeaarklektaenlrhlevil.qeveksyessklqaaqtqryrmlkeeifardrdlgllrlrgflenqaradgalqr..............nrarrdalqtqveeaqqtlsarigeindmekrvdal.qke..iyglaieqka.kqneaslhrkhlselkesigqiemrkigvesrvqnleeevaeqdah............................................................................................vyqlgsal..ssveehiesfar.slhvasehvsendqtlr......diqgqmqeisaacveleaslrdva...ediaa.........................................................eldtrlsaagysarnr..aeaertlvagvqrlrtfve.grari................................vsdflvv.dthtegelcrml..ttvvdafneavkivhcvesdiaeyarvsarfidefvapqgimtkk.....................referqleqhraqlerhaarqrtlqeenkllvgkieacrktleslrvdqarlraeaeagqkqaagtrgevarqr..................avikelegel.ftegervaalee.rllevegeigql............eqrgvlltkslencegeirvrnaavtseehalq..................earvelaqv.....grqleqahrelmqceteirnlrehfreqhtr......dlsefedlipgiektas.......dl......................................................................................................................................................................rqergelqarvkei.gavnfmaveefqevkeryeflvaqvadlekaradlqrvtdkikaesaelflatyrrirknfhevfrrlfg.........gg..raeirlsd...paa.............................vlscgieilaqppgkklehigLLSGGEKAMTAVALLFA.....TYMVKPAPFCLLDEIDAALDEHNVARFVGMLD..EFSDV.SQYIVITHNRRTVLGA....RTMLGVTMEEPGVSK SMC_MYCTU/2-1186 YLKSLTLKGFKSFA.APTTLRFEPGITAVVGPNGSGKSNVVDALAWVMGEQ.GAKTLRGGKMEDVIFAG.............TSSRAPLGRAEVTVSI........DNSDNA.......LPIEYTE..VSITRRMFRDGA...SEYEI........NGSSCRL.MDVQELLSDSGIGREm.hvivgqgkleeilqsrpedrr.......afieeaagvlkhrkrkekalrkldtmaanlarltdlt.telrrqlkplgrqaeaaqraaaiqadlrdarlrlaaddlvsrraereavfqaeaa..............mrrehdeaaarlavaseelaahesavaelstraesi.qht..wfglsalaer.vdatvriaserahhldiepvavsdtdprkpeeleaeaqqvavaeqq.......llaeldaararldaaraeladrerraaeadrahlaavreeadrregl.arlagqvetmrarvesidesva..........rlseriedaamra..qqtraefetvqg.rigeldqgevgldehhe......rtvaalrladervaelqsaeraae...rqvaslraridalavglqrkdgaawl............ahnrsgaglfgsiaqlvkv...rsgyeaalaaalgpaadalavdgltaagsavsalkqadg.gravlvlsdwpapqapqsasgem.lpsgaqw......aldlves.ppqlvgamiamlsgvavvndlteamglveirp....elravtvd..gdlv.gagwvsggsdrklst..............levtseidkarselaaaealaaqlnaalagalteqsarqdaaeqalaalnesdtaisamyeqlgrlgqearaaeeewnrllqqrteqeavrtqtlddv.....iqletqlrkaqetqrvqvaqpidrqaisaaadra...rgvevearlavrtaeeranavrgradslrraaa.......aerea...rvraqqaraarlhaaavaaavadcgrllagrlhravdgasqlrdasaa......qrqqrlaamaavrdevn.......tlsarvgeltdslhrdelanaqaa...lrieqleqmvleqfgma.padl.........................iteygph...............................................v....alpptelemaefeqarergeqviapapmpfdrvtqerrakraeralael.grvnplaleefaaleerynflstqledvkaarkdllgvvadvdarilqvfndafvdverefrgvftalfp.........gg..egrlrlte...pdd.............................mlttgievearppgkkitrlsLLSGGEKALTAVAMLVA.....IFRARPSPFYIMDEVEAALDDVNLRRLLSLFE..QLREQ.SQIIIITHQKPTMEVA....DALYGVTMQNDGITA O28714_ARCFU/2-1148 HIEKIRLKNFKSFG.KKAEIPFFKGFTVITGPNGSGKSNIIDSILFCLGLSTSTKQLRAERLTDLVHNG.............R......SEAEVAILF........SENGKK................YEIARKVKITEKGYYSYYYL........NGKSVSL.SEIHSFLSQFGIYSDa.ynvvmqgdvtriiemspfqrr.......kiiddvagisefdekkekaleelervresiekleavi.aevndrlqtlerdrneairykeilskkeeyegylrahnyltavkskekvereler..............lerqkdeltskipeinariaelnekinelaakiselgder..saeiqsrile.lsseleslrraerfyldeakrleeesvkiiseiskikeemesldge...............leeyaikriqvgeivdelaakmellrqrleevdkkhrelrdrlvsrkeelemykerrgeilrerdkliellrridmdvediknei..asiesklkefet.ekkakqeevwkqeeelm......sakkmlssadkklfdirakisdve...delkkaelelakvkatlstlrtyskpveillda.....rnrrelpgifgtvaqlgev...deeyvaaieaaagnalqfvvveteddavsainflkavrg.gratfiplrriksfklsldksil.....kedgvidf.avnlvrc.dkkfqpvfrfilrdtvvvdrietakrlmdr......gfrfvtld..gdiveksglmtggsaekrgilvsrellek....ermlsdkiyelqrekeglfaelnraeslrkqykdevdrltgmiselrnrislldekirtesgrieelrekisqksrekenyi...........sslkdynskl.aemeeaigelea.eieeiermlrgsevpkiveeldkikeehqrnreilisiekkieslefkreqlessmq........ekqv...yldeikdridei.....rrtieegkarveeinseleelrkeerelgkelkglrkerdelikqlrnaeeekr.......kieaeidrleeriklqkerleiae.seiaeigevevpenlpple.kv.........................................................................................................................ekvldevlvelstf.gdvnlkaiqeyeevkarrdelvekkmvlekeradildriekyermkreiffevftainrnfaeiirelan.........g...egelyld....sdd.............................pfnsglyikvkpnnkpvqkleSMSGGEKSLVALALIFA.....IQMYKPAPFYAFDEVDMFLDGVNVGRVAKMIK..KRSKD.AQFIVVSLRKPMLEQA....DAIVGITLGRDNVSQ SMC_METJA/3-1163 TLEKIELKNFKSF..KKLSLDIPKGFTAIVGPNGSGKSNIVDAILFVLGKT.SAKKLRANRFSGLITY...............HNGKRADFAEVCLYF........TNENNA.......FNVNADK..VGILRRIKSSGE...TDYYLVWKENDKEKRKKMTK.HEIIDLFRRLGLLGDn...visqgdllkiinispierr.......kiideisgiaefdekkkkaeeelkkareliemidiri.sevennlkklkkekedaekyiklneelkaakyalilkkvsylnvlleniqndikn..............leelkneflskvreidveienlklrlnniinelnekgnee..vlelhksike.leveiendkkvldssinelkkveveienkkkeiketqkkiienrdsi.iekeqqikeieekiknlnyekerlkeaiaesesiikhlkesemeiadeiaknqnelyrlkkelndldnlinrknf..............eieknnemi..kklkeeletvedvdtkplylelenlnveie......fskrgikeleekkkelqakldelh...aeyvkenarikalkemeelsmdraire...........ilnanlpgiidivgnlgkt...kieyktaievaagnrlnhivvkrmddavraikylkerkl.gratflpldriegreayyi.........dedgvigr.aidlvef.dekyrrvfeyvfgntvvvenidiakelakkyr....kvrfvtld..gdviepsgamiggtfk..................skakikvdvdlsklnkiadeiiaieselrkikeeierlskivkrssakkmeientleiikknemrkreiaekntikikelelknkdil....eeleelnlkr.eeilnrineies.kinelierrekiinelkeyesdenlkrmneiegelkilekekaklkneidkgltlvkeilipkieelnk...kvselinkkvil.....eknisfykesieknlsileekrkryeelaknlkeltekkeqlekeietlererr.......eilrkvrdienrinelmvekakye.skleeeerklylcekvdvs.kele.........................kkdieel.......................................................................................eiyigeleneiksl.epvnmraiedynyvaerykeliekrkeyerdekkylqlmeelenkkkevfmevfnkvaknfeevykei...........gg..igklslen...ekn.............................pfeggilidasprgkkllsldAMSGGEKSLTALAFLFA.....IQRLNPSPFYVLDEVDAALDVKNVSLIADMIK..NASKD.SQFIVISHREQMVSKA....DVVYGVYM.ENGLSK O59462_PYRHO/3-1151 YIERLELKGFKSYGNKKVVILFSRGFTAIVGANGSGKSNIGDAILFVLGGL.SAKAMRASRISDLIFAG.............SKREPPAKYAEVTIYF........NNEDRG.......FPIDEDE..VIIKRRVYPDGR...SHYWL........NGRRATR.SEILDLLSAAMISPEg.yniilqgditkfikmsplerr.......liiddisgiaeydakkeralqelkqaeenlakvdili.gevkkqldklekerndalryldlkeklekarvglvlgeirkieseirnnderign..............iereiermekrleeiakeivekenelrrieemieressse..alrltreige.vnskinlarrnieiarreldesqlrlakvkdelkkvmseiekskga...............iirwgrrrealikqisekeeernhlvvrlgeidrtfavareefdsvvkelenarrlmyegeaeikrldaekeklrsriavlkakl..pgirdeilklrd.tldekkaelseienkls......svsnkrmkveeevekktlelqkvs...keledaerelirieaqnetksnravee...........lkrsgipgiygtllelirv..rdekysiavevalgnradnvvvedeivaekaieflkrnkl.grltflplnkikar..............hvngdvgipvvsviey.dpkienavsfalgdtvivssmeearsyig.......kvrmvtlk..gelyersgaitgghyrprgllldt..........kelkekvenlrimkeslegevnslrvklkalenqsfelrirmsdvekeisliskdleklikeeeslrseiedserkiaeid...........etiskkkdev.aklkgrierlek.rrdklkkalenpearevtekirevereiaklreelsrvegkleslnsrlndeliprk.......aslee...eieglvnkinal.....kanineneealksltekleklkkeegeiysrieeqkkkkeelerkvaelreeke.......kisrriqelrievntlkvrnsqlk.sllmeknsqlkhfskevik.sird.........................ipsdlegl......................................................................................kkeiekmeeeikal.epvnmkaiedfevverrylelkskrerleaekdsiiefineiekekknvfmktfdaiaknfselfarlsp.........gg..sarlilen...pdd.............................pfsggleieakpagkdvkrieAMSGGEKALTALAFIFA.....IQKFKPAPFYLFDEIDAHLDDANVKRVADLIK..ESSKE.SQFIVITLRDVMMANA....EKIIGVSM.RDGVSK O66878_AQUAE/6-1140 YIEKIVVEGFKSYGTKRKEIPLGEGFIAVVGPNGAGKSNIGDAISFALGLS.SAKALRAKNLSYLIFS...............KNGQKADHAYVEVHF........KNLGA........FPVEDEE..VVISRKVSKDGR...SIFKI........NGQVVRE.RDLKDFLAKAGIYETa.ynvvyqgdivkflkmtpverr.......kiieeisgigeyerkkekaleelaevelkikeidlil.eeisnqlkrlkeekeklekfkelqrikreteakillkekekllkererilnelss..............lresleditfqiqenekelnererllkevnek..........impfkekvgk.ftaeienaersikekerelkesenrvknleelinnllsdkenlere....vgtlqleleklkeeykslkevereklreleeeeerlkitfdev........kkleeekeklteklnslnkekq..........eleiqranlknki..erikedinklis.ereekikeikekeqeik......rlkaikkkeeeelrnltqelniye...krlsevrkkleevlkekgaierevrsfsdvs.......dvfkdikgvygsvselirv..knpehitaievagggrlkfivvedeevakeciqlakrmnl.grfsfiplnrvrveerplryp.......rtkgavdf.avnlvey.dpkfekvvkfvfgdtlivenfesakaigig......nyrmvtle..gelfeksgvitggavkpsgelnk...........ryyeeelqrlnaeeeklkneesiiqkkireirnlisektallkvserkieelss..egleqyeekfkeklenskeylkile...........ekllnvedkl.kelaeeieyyee.klnnlklkegdikrhysregveekrreyskvrkqvseiekslneierelnkktyele........ylek...eiqekerereyl.....terikslkkeienlilfkektlqevkeaevkvydyikqkeelekeilnlksklg.......klkikeeelkekifekeknlkvle.ekienlneelkeyedlklg.adee.........................sipkl.........................................................................................keklkrvteeiqkl.gsvnfraeedyaeelkrfndykekqqklkeeskaikklieetenkkrkvfleafnqinkslkrifsflsp.........gg..kaqmfldn...ped.............................pfsggvqltvkprgkdvqyleAMSGGEKTLAALSLIFA.....LQEYKPSPFYYFDEVDAHLDEVNAKKVGELIR..EKSKE.AQFIVVTLREVVTSFA....DKIVGVSA.RGGISE P73340_SYNY3/3-1194 YVKRIELSHFKSFG.GTTAIPFLPGFTVVSGPNGSGKSNILDALLFCLGLA.TSKGMRAERLPDLVNNT.............FKGNRGSSEASVSVTFELHDGENLSEPGANHNGNGNGAKISKEW..TVTRRLKVTKGGNYSSNYYI........NGETATV.TELHEQLNELRIYPEg.ynivlqgdvtriitmnskerr.......eiidelagvaefdrkivktketltevqdreercqiia.telertlerlaadrqkaekyqalrqqvqekqgwakviqykaveqqrqklwgqler..............dreqsqqiqqaldqrsqaiqtqqteleklnaqvkalgeee..qlavaaqlat.qkaqrdqlqqryndgdrqitnhqqqvgqiqaeisqsqqqflhiqqeksfhntqtlpqleaavqtsqqqleqlrhqaqaiasaseawvqeqtqlsrtvnqlqdelipqrsqlaqleerqqqllt..............nlaeltpll..tkvsveleekqf.aqgqfnfqgealtsqiq......tlasdlaqleqersllqetqtrll...keqqekqrqldkleaasqaqqevqgtyatkv.......ilqsdlpgvcglvaqlgqv...epqyqlaleiaaggrlgflvveddgvaaagieilkqaka.gratflplnkirppkgqnpnls......yahgyidl.avnlidg.drryadifafifgntivfdtlvnarnhlg.......khrivtle..gdlleasgamsggsrnqrsglrfgtmvsedtaevkqlrqrlqdiqqvqgrneelllertvrsrqltqqlmemrqqqreaqlhgeqterdiarlsqqqtqinqqqinqqqklaelq...........qnlallqqsl.ppleqqlasaqq.qltaletsqthqqwqtiqiqirtveaeyqrqlqalrqgedhlkdlqnssqrleekia........qaqe...kiaqhqaqdltl.....aqeqeqlkialaemngaiqtteaqlaklseklgstkqerdrletqlnqlrsqqqeqqwqweklqtnqqeyqenltqlqtqleale.qdlpdpwpeipllqdrdea.nldf.........................anileel.......................................................................................ersirngqkrleam.epvnmlalqeyektearlgelseklqtiagertelllrienfttlrrrsfqdafdavnknfqiifaelsd.........g...dgylqldd...aed.............................pfngglnlvahpkgkpvrrlsSMSGGEKSLTALSFIFA.....LQRYRPSPFYGFDEVDMFLDGANVEKLSKMVR..KQAQQ.AQFIVVSLRRPMIEAA....ERTIGVTQARGAHTQ O51074_BORBU/6-815 VLKKIVLLGFKSFL.NRQEFEIGENLSFIVGPNGCGKSNLIDAVRFCMGED.NLKFLRVEDISDLISV...............SKSGKSNFAEITLFF........SNINSE......KSTLKEFNEDFYIRRRLYKDGS...SEYYF........NNKILNF.QDYNRLLNSFKFKKSp.ymfitqgrvedislernvnlk.......slieqasgidilkmeeeealknfkqssqnlssllslq.enlrqkydniknvfllrkkhqdlsqklealektitlkklfninfdlnvlkseln.........................................................ldglskflssgfkeklefysfreknvinniqelekdlelmkskilgleikiqkleqe......................................................................................................ktlkmnledkfvkskseseekknsinnnly......qlnsllkekkndffslsdeinryt...................................................ksffelvdl................................ilsvlrsaks...eefvllkeh..........................ildslkl.....................feeslsikyikeirvnlikyiskd..enll..............................allrdkiepifdqnvnlkkflleknalksnlakeitnierlieektlqlndvlgeleyielskfknl.........................deiklidgnl.eflfesknslde...........................elkdlylklenlnleksdiqlnlsnligask................................fssesfkekdfnslvflndfkktnyyeyikkqteyefllnsnv..................sikseienf..nvsnemsdkfele.edla...........................................................................................................................................trellrkeidaiklgdyvffnidkefdetkerfekvslqvedlklskyslqklqkkikneiykkfresfdeinknfsfffkkifk.........g...taslfyne...ntd.................................nveirinfsnkfvknnnMLSGGESTLVSMAFLFA.....LYYYSPACFCMLDEIDAALDFENSKKLSLLLR..ELGKK.FQLLVITHNAYVSEGG....ENLIGITL.DNGESR SMC2_YEAST/2-1166 KVEELIIDGFKSYATRTVITDWDPQFNAITGLNGSGKSNILDAICFVLGIA.SMSTVRASSLQDLIY...............KRGQAGVTKASVTIVF........DNTDKS...NSPIGFTNSPQ..ISVTRQVVLGGT...SKYLI........NGHRAPQ.QSVLQLFQSVQLNINnpnflimqgkitkvlnmkpseil.......slieeaagtkmfedrrekaertmskketklqenrtllteeiepkleklrnekrmflefqstqtdlekterivvsyeyynikhkhtsiretlen..............getrmkmlnefvkktseeidslnedveeiklqkekelhkegtisklenkeng.llneisrlktslsikvenlndttekskaleseiasssakliekksa...........yantekdykmvqeqlskqrdlykrkeelvstlttgisstgaad.ggynaqlakaktelnevslaik..........kssmkmellkkel..ltiepklkeatk.dnelnvkhvkqcqetcd......klrarlveygfdpsri...........kdlkqredklkshyyqtcknseylkrrvtnlefnytkpypnfeasfvhgvvgqlfqidndniryatalqtcaggrlfnvvvqdsqtatq...llergrlrkrvtiipldkiytrpissqvldl.akkiapgkvel..ainlirf.desitkamefifgnslicedpetakkitfhpki...rarsitlq..gdvydpegtlsggsrntsesllvdiqky......nqiqkqietiqadlnhvteelqtqyatsqktktiqsdlnlslhkldlakrnldanpssqiiarneeilrdigeceneiktkqmslkkcqeevstiekdmkeydsdkgsklnelkk.elkllakeleeq............eseserkydlfqnleleteqlsseldsnktllh..................nhlksiesl.....klensdlegkirgveddlvtvqtelneekkrlmdiddelneletlikkkqdekk.......sselelqklvhdlnkyksntnnme.kiiedlrqkhefledfdlv.rniv.........................kqnegidldty...................................................................................rerskqlnekfqelrkkvnpnimnmienvekkeaalktmiktiekdkmkiqetisklneykretlvktwekvtldfgnifadllp.........ns..faklvpce...gkd..............................vtqglevkvklgniwkesliELSGGQRSLIALSLIMA.....LLQFRPAPMYILDEVDAALDLSHTQNIGHLIK..TRFKG.SQFIVVSLKEGMFANA....NRVFRTRF.QDGTSV SMC2_CHICK/2-1167 YIKSIVLEGFKSYAQRTEIRDFDPLFNAITGLNGSGKSNILDSICFLLGIS.NLSQVRASSLQDLVY...............KNGQAGVNKATVSITF........DNSDKK...NSPLGFENNDE..ITITRQVIVGGR...NKYLI........NGMNASN.NRVQDLFGSVGLNVNnphflimqgqitkvlnmkpteil.......amieeaagtrmyeckkitahktiekkeskldeirriiteeisptleklkearasyleyqkmtrevenlrriyvafqyvraeeikdrstnalke..............aqankkkifesmaenekkvkelaqqieetekknneefgak..lhsleaafse.lqrvdakvrsdldhrkqnlnseenrlkelikimqeefkaftskeke...........ikkikeglnglqeeskkdaealasaqqhfnavsaglssndsgqgtsladqmmtckneiskaateak..........qaqmklkyaqqel..ktkqaevkkmdg.sykedqeafeairktke......klqdemkklkyeeaeqeahlakk....kqlsseisslrelcesieakhpylrfeyknp.......eknwnpncvkglvvtlitv..kdistskaleavaggklynivvdteatgkk...ilekgqlkhrytiiplskisansigheiisl.aknlighrevhi.aislidy.nselqkameyvfgttlvcssmdnakkvtfdkri...mrktvtlq..gdifdpqgtlsggasshvtpilsklktm......rdaedelkiktsqleatekelanlknmaekyqhlkqqwemkseeaellqtkiqqsayhkqqedllalkktiaeceetlkkteesqrkaeeeykalenkmknaeaergkeiknaqq.klnsakkkadds............srkmkekqqevealvleleqlkqeqasykqqse..................aaqqaiasl.....keqvsaleaeavktreslknaenelssekglmeertkdikaksakiekyreqnn.......elqlsinalehdinkyqqetadas.stldkllkeykwiasekel.fgqa.........................dttydfeannpket................................................................................gqklqklltkkeklekslnmramnllseaeeryndlmkkkrmvendkikilatieeldrkknkalhiawekvnkdfgsifsmllp.........ga..kamlvpsk...kqn..............................ildglefrvglgdiwkenltELSGGQRSLAALSLILA.....ILLFKPAPIYILDEVDAALDLSHTQNIGQMLH..AHFKQ.SQFLVVSLKDGMFNNA....NVLYRTKF.VDGIST SUDA_EMENI/2-1193 YVKQIIIQGFKSYKDQTVIEPFSPKHNVIVGRNGSGKSNFFAAIRFVLSD..AYTHLGREERQALLHE...............GSGSAVMSAYVEIIF........DNSDER.......FPTGKPE..LVLRRTIGLKKD....EYTL........DRKNATK.NDVMNLLESAGFSRSnpyyivpqgrvtaltnmkdserl.......nllkevagtqvyearraeslkimhetnskrekidell.dfinerlaeleeekdelrnfqekdkerrcleytiysreqqeiasfldsleeqrqtgvedt...dinfiqgekemaqvdaeiaeckqqieflkvdkaqlederrea.ska..laqvelqaks.lsdnqaaaqeskarhdeslkavqsaieerqtelkelvprfisakda.....edaaraklteaetarqrlyakqgrnsrfknkserdkwlqaeiknnnasi.ssvqsvlsqtqedindiendia..........llepeterlrqidgrgdtiqsveqqvq.aakderdrlmdqrkyvdwprtscatltihrelwreeakldsilinas...nevdraernlsqmmdhntsrgiaavrri..........krqhnlegvygtlaelfev...ndryrtavevtagqslfhyvvdtddtatkvleilqheka.grvtfmplnrlrtkpln.....m.pkasdtip.....mieklqy.drayekafqhvfgktiicpnlqvasqyarsh.....gvnattpe..gdrsdkrgaltggfhds.rqsrldavknl.....akwrdeyetkksrgseirkeleeldqlitravgelqkleqqrhqvqnssgplrqelrskrdllqkqndnldakrralrniegnlaalk....dqvdafeaelsspfhkaltdeeearleslnsnvqey............rreyqelsgkrseletrksvlevelrenlnprl..............dqllaqdadi...adedgqgniketqreqkrltkvldklaqrlaqvdesmeqansrvteltqrnaesrrele.......elaksiekhqrrmeksmqkkaalt.kqaaecaanirdlgvlpde.aft..........................kykntdsntv....................................................................................vkklhkvnealkky.ahvnkkafeqynnftkqretltsrreeldasqksiddlisvldhrkdeaiertfkqvsrefatifeklvp.........ag..rgrliiqr...ktdrtqraeddles.......edeeakhsvenyvgvgisvsfnskhddqqriqQLSGGQKSLCALALVFA.....IQACDPAPFYLFDEIDANLDAQYRTAVAQMLKTISDSTN.GQFICTTFRPEMLHVA....EKCYGVSF.RQKAST Q24098_DROME/33-1211 HIKQIIIQGFKSYKDQTVVEPFDKRHNVVVGRNGSGKSNFFYAIQFVLSD..EFTHLRPEQRQSLLHE...............GTGARVISAYVEIIF........DNSDNR.......VPIDKEE..IFLRRVIGAKKD....QYFL........NKKVVPR.NEVVNLLESAGFSSSnpyyivkqgkinqmataadsyrl.......kllrevagtrvyderkeeslnllretdskvekiseyl.ktiedrlqtleeekeelkeyqkwdktrrtleyiryetelkdtkkaldelqlqrksssdkkkiynieiqkaqekikdvqknlkeakkkvqstkeersvlmteqqql.lre..ktkldltivd.lndevqgdnkskeradqelknlkvtiaerekelddvkpkyeamkrk.....eedcsrelqlkeqkrkelyakqgrgsqfssredrdkwitnelksiskqtrdkiahhaklvedlkkdatsekd..................lgqki..eehsseleqlrl.qidehnkkyyelkktkd......qhqsmrnelwrketqmtqqlqthk...eelsradqalrsmagkpilngcdsvrkvldsfverg.gqsaeiarayygpvienfsc...dktiytavevtaanrlfhhiveseyegtqilkemnklklpgevtfmplnrlqvkihd.....y.pddpdsip.....misklky.deqhdkalryifgktlicrnleratelakst.....gldcvtld..gdqvsskgsltggyfnt.srsrlemqkkr.....teytsqiaefekklsklrnelkstenninsivsemqktetkqgkskdvfekvqgeirlmkeelvrieqyrapkerslaqckaslesmt....stkssleaelkqelmstlssqdqreidqlnddirrl............nqenkeaftqrmqfevrknkldnllinnlfrrr..............deliqalqei...svedrkrklnncktelvsaekrikkvnsdleeiekrvmeavqlqkelqqelethvrkek.......eaeenlnkdskqlekwstkenmln.ekidectekiaslgavplv.dps...........................ytrmslkni....................................................................................fkelekanqhlkky.nhvnkkaldqflsfseqkeklyrrkeeldigdqkihmliqslemqkveaiqftfrqvaqnftkvfkklvp.........mg..agflilkt...kdnegdemek...............evensdaftgigirvsftgveaemremnQLSGGQKSLVALALIFS.....IQKCDPAPFYLFDEIDQALDAMHRKAVANMIH..ELSDT.AQFITTTFRPELLENA....HKFYGVRF.RNKVSH SMC3_YEAST/2-1208 YIKRVIIKGFKTYRNETIIDNFSPHQNVIIGSNGSGKSNFFAAIRFVLSD..DYSNLKREERQGLIHQ...............GSGGSVMSASVEIVF........HDPDHSMILPSGVLSRGDDE..VTIRRTVGLKKD....DYQL........NDRNVTK.GDIVRMLETAGFSMNnpynivpqgkivaltnakdkerl.......qlledvvgaksfevklkaslkkmeeteqkkiqinkem.gelnsklsemeqerkelekynelernrkiyqftlydrelnevinqmerldgdynntvysseqyiqeldkredmidqvskklssieaslkiknatdlqqaklreseisqk..ltnvnvkikd.vqqqiesneeqrnldsatlkeiksiieqrkqklskilpryqeltke.....eamyklqlaslqqkqrdlilkkgeyarfkskderdtwihseieelkssi.qnlnelesqlqmdrtslrkqys..........aideeieelidsingpdtkgqledfds........elihlkqkls......esldtrkelwrkeqklqtvletll...sdvnqnqrnvnetmsrslangiinvkeite........klkispesvfgtlgelikv...ndkyktcaeviggnslfhivvdteetatlimnelyrmkg.grvtfiplnrlsldsdvkfpsnt.ttqiqftp.....likkiky.eprfekavkhvfgktivvkdlgqglklakkh.....klnaitld..gdradkrgvltggyldqhkrtrleslknl.....nesrsqhkkileeldfvrnelndidtkidqvngnirkvsndresvltnievyrtslntkkneklileeslnaiilkleklntnrtfaq....eklntfendllqefdselskeekerlesltkeisaa............hnklnitsdalegitttidslnaelesklipqe..............ndleskmsevgdafifglqdelkelqlekesvekqhenavlelgtvqreiesliaeetnnkkllekannqqr.......lllkkldnfqksvektmikkttlv.trreelqqrireigllped.alvn.........................dfsditsdql....................................................................................lqrlndmnteisgl.knvnkrafenfkkfnerrkdlaeraseldeskdsiqdlivklkqqkvnavdstfqkvsenfeavferlvp.........rg..takliihr...kndnandhdesidvdmdaesnesqngkdseimytgvsisvsfnskqneqlhveQLSGGQKTVCAIALILA.....IQMVDPASFYLFDEIDAALDKQYRTAVATLLK..ELSKN.AQFICTTFRTDMLQVA....DKFFRVKY.ENKIST SMC4_YEAST/155-1406 FINELVLENFKSYAGKQVVGPFHTSFSAVVGPNGSGKSNVIDSMLFVFGFR.AN.KMRQDRLSDLIHK..............SEAFPSLQSCSVAVHF....QYVIDESSGT.......SRIDEEKPGLIITRKAFKNNS...SKYYI........NEKESSY.TEVTKLLKNEGIDLDhkrflilqgeveniaqmkpkaekesddglleylediigtanykplieermgqienlnevclekenrf.eivdreknslesgketaleflekekqltllrsklfqfkllqsnsklastlekiss..............snkdledekmkfqeslkkvdeikaqrkeikdrissc.ssk..ektlvlerre.legtrvsleertknlvskmekaektlkstkhsiseaenmleelrgq....qteheteikdltqllekersilddiklslkdktknisaeiirhekelepwdlqlqekesqiqlaeselsllee..............tqaklkknv..etleekilakkt.hkqelqdlildlkkkln......slkdersqgeknftsahlklkemq...kvlnahrqramearsslskaqnkskvltalsrl.....qksgringfhgrlgdlgvi...ddsfdvaistacp.rlddvvvdtvecaqhcidylrknkl.gyarfilldrlr..qfnlqpist.penvpr.......lfdlvkpknpkfsnafysvlrdtlvaqnlkqannvaygkk....rfrvvtvd..gklidisgtmsgggnhv.akglmklgtnqsdkvddytpeevdkierelserennfrvasdtvhemeeelkklrdhepdlesqiskaemeadslaseltlaeqqvkeaemayvkavsdkaqlnvvm.knlerlrgey.ndlqsetktkke.kikglqdeimkiggiklqmq....nskvesvcqkldilvaklkkvksaskksggdvv........kfqk...llqnserdvels.....sdelkvieeqlkhtklalaendtnmnetlnlkvelkeqseqlkeqmedmeesin.......efksieiemknkleklnslltyik.seitqqekglnelsirdvt.htlg.........................mlddnkmdsvkedvknnqeldqeyrscetqdeseikdaetscdnyhpmnidetsdevsrgiprlsedelreldveli.................eskinelsyyveet..nvdigvleeyarrlaefkrrkldlnnavqkrdevkeqlgilkkkrfdefmagfniismtlkemyqmitm.........gg..naelelvd...sld.............................pfsegvtfsvmppkkswrnitNLSGGEKTLSSLALVFA.....LHKYKPTPLYVMDEIDAALDFRNVSIVANYIK..ERTKN.AQFIVISLRNNMFELA....QQLVGVYKRDNRTKS SMC4_SCHPO/125-1313 VVYELRLTNFKSYAGTQIVGPFHPSFSSIVGPNGSGKSNVIDALLFVFGFR.AS.KLRQSKASALIHK..............SATHPSLDSCDVEITF........KEVNSD......FTYVDGSE..LTVRRTAYKNNT...SKYFV........NGVESSF.SAVSNLLKEKGIDLNhkrflilqgevesiaqmkpraisegddglleylediigtskykpiieenmqelsnsddicaekesrl.klvlsekakledsknsvlsflkdenelfmkqnqlyrtilyetrnkktlvqnllns..............legklqahlekfeqterdisekneevkslrekaakv.knd..ctsekktrqs.yeqqtvkieeqlkfllnkekklkksiealsfekseaenslsshdid....sqklnseiadlslrlqqeelslddirkslqgktegisnaieekqkamapalekinqltsekqilqveldmlln..............kendlindv..essqssldklrn.daeenrnilssklkvls......dlkgekkdvsknierkketvhnty...rnlmsnrtkleemkaslsssrsrgnvleslqrl.....hesdnlngffgrlgdlati...deaydvaistacp.alnhivvdnietgqkcvaflrsnnl.grasfiilkela..qknlariqt.penvpr.......lfdllrfndqkfapafynvlqntlvaknleqanriaygkt....rwrvvtls..gqlidksgtmtgggtrvkkggmssaits......dvspasvetcdkqvqledtryrqhlseleslnqrfteiseripsaeleisklqldvsacdrlvageerrilqlksdlksirnnnerkrnlq.nkisnmdkev.eaininneglvt.eiktlqdkimeiggiryriq....kskvddlheqlkfvkdklnkmsfkkkkneqrsq........sfqv...elsnltseydtt.....tesiatlktelqslnkyvdehksrlrefenalwdinssidelvkfiefeskqmn.......svkaerielenqiqeqrtalsevg.nnenkylklmsnlklhnlt.efcd.........................qttmds.....................................................tfpeysedelssvdksel.................vsnisvlkkktedr..evdinvlseyrrcnkeaekrdsdyqselqkrtdlkkvvtdlqsqrldefmygfgiismklkemyqiitm.........gg..naelelvd...sld.............................pfsegvlfsvmppkkswknisNLSGGEKTLSSLALVFA.....LHNYKPTPLYVMDEIDAALDFKNVSIVANYIK..ERTKN.AQFIVISLRSNMFELS....SRLVGIYKTANMTKS SMC4_XENLA/77-1268 MITHIVNQNFKSYAGERILGPFHKRFSCIIGPNGSGKSNVIDSMLFVFGYR.AQ.KIRSKKLSVLIHN..............SDEHKDVQSCTVEVHF....QKIIDKEGDD......FEVIPNSN..FYVSRTAYKDNS...SVYHI........SGKKATF.KDVGLLLRSHGIDLDhnrflilqgeveqiammkpkgqtehdegmleylediigserlkepiqilcrrvellneqrgeklnrv.kmvekekdalegeknkaiefltvenetfkkknqlcqyyihdlqkrsrdkeaqkek..............iqedtkdiseksntlletmkeknkalkdvekqlnki.tkf..ieenrekftq.ldlqdvdtreklkhskskvkklqkqlqkdkekvdelknvpansqki....iaeetnkkdllekqkekeeeklknvmdslkketqglqeekevkekelmeisktvnearskmdvaqseldiyls..............rhnsalsql..nkakealntasa.tlkerraaikeletklp......kdegdlkkrekeleslvseegnik...nqvrelrqkveearsslsanrsrgkvldaliqq.....kksgkipgifgrlgdlgai...dekydvaissscg.aldhivvdtidtaqecvnflkkqnv.gvatfigldkmkvwekglnkiqt.penipr.......lfdmvkvkdeqikpafyfalrdtivannldqatrvafqkdk...rwrvvtlq..gqiieqsgtmtggggkvmkgrmgssvmv......eisddqlqkmenklktdttrateiqdrkahleeevaklrqatremkntfekytaslqslseqevhlkaqvkelevnvaaaapdknqqkqme.knletlkkey.ekvaekagkvea.evkrlhklivdinnhklkaq....qdkldkvtkeidecasaitkaqvsiktadrnlk........ksee...avartekeivan.....dksieeltedlkkleekattvmneckeaecslpevqeqhrsllqeikaiqekeh.......alqkealnirlnieqidshiaehq.skikywqkeitkislhkie.dipe.........................e..........................................................vlpglaqeeleaikdpdqi................inqialleakshem..kpnlgaiaeykkkeelylqrvaeldeitnerdsfrrayedlrkqrlnefmagfniitnklkenyqmltl.........gg..daelelvd...sld.............................pfsegimfsvrppkkswkkifNLSGGEKTLSSLALVFA.....LHHYKPTPLYFMDEIDAALDFKNVSIVAFYIY..EQTKN.AQFIIISLRNNMFEIA....DRLIGIYKTHNTTKS DPY27_CAEEL/92-1330 IILNIYVENFKSYAGKHILGPFHKNLTMILGPNGSGKSNVIDALLFVFGFK.AG.KIRTKKLSALI.................NSGGNYESCSVTIMFQMVKDMPVENYDKY.......EVLTDNC..VCITRTINRENN...SKYRI........DDKDASQ.KDVQELLLRAGIDMThnrflilqgeveaialmkptsknpneegmleyiedivgtnrfvapisklmhrvsllehkssqygasv.rrheghlkvfekamvigmaylntfnnlnylrgirvkhnlcryaetmrdakmslvt..............rtgeleenkdimleakdevrkketherslnsivtel.enk..ridwqskknd.whardakrkqglksctqdlgklmkerdearrekfeietapenaris....kqnmqlewdqlkeqenvcqrtatenlikydqkssadrakhddlekklsdellqsmrakaeldvseselkdmti..............mmeqgqkrv..delkgtlqtmma.enirdntelnavttelq......drklkfdkaveklphlksteqllrskkyeldqevieasntqevtyrhqataklhel.........keaglfpgfkgrlgdlasi...pikfdtaistvffaqldyhvvqtsdecrigigfcheykl.prttfvfldhlkdtdtsgmdstm.kfpaer.......lfdkihcvnpeirrefyflihdilvvdsleeatridkkypg...rhryctln..gsilnrsgaltgggkpttgrirndnnpnm....sgvkkvdlsklraaqekhnhaleahlklqlkqeeiradngpiikqleirkrelimstkeqktriaelkssiaaherrmvnyrevtvedldekraqiadlkrqv.eesqkssakikq.qieqykrkmdrmfmelvqkn....kdsieqakdrmgqleqdiarqtaiiennpshle.qaekklselehmclekrseadalaqlevgedvkgidiinaqlqtstasidaqraryteavaarreadaayqttvdnynmvkqtyd.......elmriiddlenktmadnaeldiie.sawmqpeklyppgkfvryn.dpdi.........................aakmtdghvvlpyeci...........................................smiephreayeehearmleddvfedt.........ankicklekdvdkfrrefdnkgvrdyamivsllmnevtsakkfsdklkahreklnelrmarfnefsealaflgtttqmlyqlitn.........gg..daslkfveegkstd.............................pfdggikfsvrpakkswklieNLSGGEKTLASLCFVFA.....MHHYRPTPLYVMDEIDAALDLNNVSLIANYIKHSERTRN.AQFIIISLRNQMFEVG....NRLLGIYKIDGKTYN SMC4_CAEEL/91-1361 MIRNVEVDNFKSYFGKASIGPFHKSFTSIIGPNGSGKSNLIDSLLFVFGFR.AS.KIRSAKVSNLIHK...............SAGRNPDKCTVTIHF....QRIVDIPGHY.......EVVKDSE..FTISRTAFQNNS...SSYAI........DGRPATK.NEVEARLRRVDIDIEhnrflilqgeveqiammkpvkttksetgmveylediigtnrlepfvklfqrrvnrltcdlsqqriar.dharnskvamenpvraaieflmkeneattihmkleqrrrqryldkiapkqaeldk..............mkeemksiaetldtnkneykqseeaqkvmieerskl.dkn..fdslskelsd.lgteetrrkealkrhqaniskaeaekekevkkrsnleaapekaerk....iakcqeeveqlleiektaneeadknldefekrseapkeeqkkiqetwaqksnefnkvrgeariaredfedlkk..............lansgtdkl..ielkkrlessee.syakekdeldklkpefd......swndklkqlstelptlrntarqkn...qdlaktrdrletlrqqnsscsssnkviqalmke.....keagriksfhgrlgdlgvi...dpkyegaictnfgarlnylivgkeedaknvinflvankl.prqtvqpldkikcdkrdlapnptnplpapr.......lidlidc.dpvlkpafydmvrsaivgdstqeaqrmhrmpacr..gvtvctle..gsmihpsgsftgggktvkgliltdknkmakq.vtpedkaaerdlaeklgklrdeadelkgqehemdgqliearrkvaemsnrlsivtssvqsaapaietlkktianqekeaakvkvdaktledkq.kiveelekkr.delgeeaakvka.rqaeiqskldgifkelvqch....rdeakeslqkrqklekdiaketanisnsgrnia.kcdenisrhdkdiekmkkkceelmekaid..deevkskketverfekqikklqtkgeemtkkqselsaaetklegelkkcsegik.......elkesmladrlkvediekklaalkvnriprfqfliessrpedlemqidd.........................kmpvvdenqspeeverqkkhmacvmsdaayalefemrqkvlentesyenvdgedrvpvellsdekineissrdaeem.................qmklkvceqqvealkakvdissikayvdkvkqyneqvikltiatevhrkhnqelqrikqmrleefhsafefigkhlvavfkmltd.........gg..dakleyid...kdd.............................pfrqgisfmvrpakkawkqiqFLSGGEKTLSSLALIFA.....LHMFRPTPFYVMDEIDAALDYRNVSIIAQYVR..QKTEN.AQFIIISLRNNMFELA....NRLVGIYKVDGCTRN SMC1A_HUMAN/3-1212 FLKLIEIENFKSYKGRQIIGPFQR.FTAIIGPNGSGKSNLMDAISFVLGEK.TS.NLRVKTLRDLIHGA.............PVGKPAANRAFVSMVY........SEEGAE................DRTFARVIVGGS...SEYKI........NNKVVQL.HEYSEELEKLGILIKarnflvfqgavesiamknpkert.......alfeeisrsgelaqeydkrkkemvkaeedtqfnyhrk.kniaaerkeakqekeeadryqrlkdevvraqvqlqlfklyhneveieklnkelas..............knkeiekdkkrmdkvedelkekkkelgkmmreqqqi.eke..ikekdselnq.krpqyikakentshkikkleaakkslqnaqkhykkrkgdmdeleke...............mlsvekarqefeermeeesqsqgrdltleenqvkkyhrlkeeaskraatlaqelekfnrdqk..........adqdrldleerkk..veteakikqklr.eieenqkriekleeyit......tskqsleeqkklegelteevemakrrideinkelnqvmeqlgdaridrqessrqqrkaeime..sikrlypgsvygrlidlcqp..tqkkyqiavtkvlgknmdaiivdsektgrdciqyikeqrg.epetflpldylevkptdeklrelkgakl.........vidviryepphikkalqyacgnalvcdnvedarriafgghq...rhktvald..gtlfqksgvisggasdlkakar............rwdekavdklkekkerlteelkeqmkakrk.eaelrqvqsqahglqmrlkysqsdleqtktrhlalnlqekskleselanfgprindik...riiqsrerem.kdlkekmnqvedevfeefcreigvrnirefeeek...vkrqneiakkrlefenqktrlgiqldfeknqlk....edqdkvhmweqtvkkdeneiekl.....kkeeqrhmkiidetmaqlqdlknqhlakksevndknhemeeirkklggankemt.......hlqkevtaietkleqkrsdrhnll.qackmqdiklplskgtmddisqee.........................gssqgedsvsgsqrissiyarealie.................................idygdlcedlkdaqaeeeikqemntl.........qqklneqqsvlqri.aapnmkameklesvrdkfqetsdefeaarkrakkakqafeqikkerfdrfnacfesvatnideiykalsr.........nssaqaflgpen...pee.............................pyldginyncvapgkrfrpmdNLSGGEKTVAALALLFA.....IHSYKPAPFFVLDEIDAALDNTNIGKVANYIK..EQSTCNFQAIVISLKEEFYTKA....ESLIGVYPEQGDCVI O01789_CAEEL/15-1251 TLHTLEIENFKSYKGKHTIGPFTR.FTAIIGPNGSGKSNLMDAISFVLGEK.PS.SLRVRKYADLIHGA.............PINKPVAKKCRVTMNY........KYSDGK................VKAFTRGVNNGT...SEHLL........DGQTVTS.AAYSQEMESINIFIKarnflvyqgaieniamktpkert.......qlfeelsrshefqaeyerlkvemtkaeddtqhnmnkr.rgiaqekreakmekdeaekyqtmknelaakstmlflhqlfhcertideskeeina..............qkktiasleatrskeeakiaavhqehrkalrevqkm.trk..ldqketdlae.kqqnmltlkvsvahehkkleiakkmlaaaeskaennstqladlkks...............kkelekkkaayeaeiqdmmqrge..lnlsdeqvreygqlkdqaqresamvqrellmaeqvfe..........gdksslnhelrrq..kehqervkakeg.dvrrietqiatlaqrik......eteeetkilkadlkkiendvvidksaaaeynkelvavvrqlseasgdsaegernqrrteale..glkknfpesvygrlvdlcqp..shkrfniattkilqkhmnsivcdteetaakaivylkdhry.ppetflpndalvvnplneklreikkpagvkl......vfdvinpqhqaarkalqfvcgnalvcesqedakqlaygggelkdrfkavsmd..gtlfqqsgvmsggsadlrqksk............kwdekvvkqlrekrnqlnekiadlqkhrrr.elevesvrskingneqrlammkrdlknmremqlerlqnelegmtaemnmlpprisncq...eklersestl.kslqtksnevadrifadfctrvgiasirdyenre...mrikqemedklrsfdddiqklayeidfvteqdg......nrkvevekekvsqidrqykdm.....kkkektaaaalkehtesmeqdkevleekkalshkletewnevkkiaqvamkdft.......kaekellrleslltkkqyerhsll.hsvklgqialplksgsmadveyeeddgdiyfiifvslfpfkfqlisddtasqssqsatdgpsvseeqiqreqhik.................................inydslpreykdvddddgvrqmsnrl.........nveidelqknvskm.napnlkanqrmaevkereaesteelenarkkakrirqqfekvktdryrrfqdffdpvantiddiykqlsr.........ntsaqaflgadn...mee.............................pyldgiqyncvapgkrfrpmdNLSGGEKTIAALALLFA.....VHGRNPAPFFVLDEIDAALDNTNIGKVASYIC..ESAREHMQIIVISLKEEFYNKA....DSLIGIFPYPAACTT SMC1_YEAST/3-1212 RLVGLELSNFKSYRGVTKVGFGESNFTSIIGPNGSGKSNMMDAISFVLGVR.SN.HLRSNILKDLIYRGVLNDENSDDYDNEGAASSNPQSAYVKAFY........QKGNKL................VELMRIISRNGD...TSYKI........DGKTVSY.KDYSIFLENENILIKaknflvfqgdveqiaaqspvels.......rmfeevsgsiqykkeyeelkekieklsksatesiknr.rrihgelktykeginkneeyrkqldkknelqkfqalwqlyhleqqkeeltdklsa..............lnseisslkgkinnemkslqrskssfvkesaviskq.ksk..ldyifkdkek.lvsdlrlikvpqqaagkrishiekrieslqkdlqrqktyverfetq...............lkvvtrskeafeeeikqsarnydkfklnendlktynclhekylteggsileekiavlnndkr..........eiqeelerfnkra..diskrriteelsitgekldtqlndlrvsln......eknalhterlhelkklqsdiesannqeydlnfklretlvkiddlsanqretmkerklrenia...mlkrffpgvkglvhdlchp..kkekyglavstilgknfdsvivenltvaqeciaflkkqra.gtasfipldtietelptlslpds.qdyil........sinaidy.epeyekamqyvcgdsiicntlniakdlkwkkgi...rgklvtie..galihkaglmtggisgdann..............rwdkeeyqslmslkdklliqidelsngqrsnsirarevensvsllnsdianlrtqvtqqkrsldenrleikyhndliekeiqpkitelk...kklddlentk.dnlvkekealqnnifkeftskigftikeyenhsgelmrqqskelqqlqkqiltvenklqfetdrlsttqr........ryekaqkdlenaqvemksl.....eeqeyaiemkigsieskleehknhldelqkkfvtkqselnssediledmnsnlq.......vlkrerdgikediekfdlervtal.knckisninipissettid.dlpi.........................sstdneaitisnsid............................................inykglpkkykenntdsarkel.............eqkiheveeilnel..qpnaralerydeaegrfevinneteqlkaeekkilnqflkikkkrkelfektfdyvsdhldaiyreltknpnsnvelagg..nasltied...ede.............................pfnagikyhatpplkrfkdmeYLSGGEKTVAALALLFA.....INSYQPSPFFVLDEVDAALDITNVQRIAAYIR..RHRNPDLQFIVISLKNTMFEKS....DALVGVYR.QQQENS #=GR SMC1_YEAST/3-1212 SS -EEEEEEES-SS--SEEEEE-TT-SEEEEE-STTSSHHHHHHHHHHHTT--.--.-------TTSS------------------------EEEEEEEE........EETTEE................EEEEEEEETTS-...EEEEE........TTEEE-H.HHHHHHHHCTT--TTT-TTEE-TT-TTHHHHS-HHHHH.......HHHHHHHSTTTTHHHHHHHHHH---------------.------------------------------------------------TTHHHHH..............HHHHHHHHHHHHHHHHHHHHHHHHHHT---------.---..-EEEEEESSS.SSGGGS-EEEEEE-TT----SGGGS-HHHHHHHHHHHHHHHHTSS-...............-SEEEESSTTTT--HHHHHHHHHHHHHH-BTTBEEEEE-S-HHHHTT-XXXXXXXXXXXXXX..........XXXXXXXXXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...XXXXXXXXXXXXXXXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXX.XXXXX........XXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...XXXXXXXX..XXXXXXXXXXXXXXXXXXXX..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...XXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........XXXXXXXXXXXXXXXXXXX.....XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......XXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXX.XXXX.........................XXXXXXXXXXXXXXX............................................XXXXXXXXXXXXXXXXXXXXXX.............XXXXXXXXXXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..XXXXXXXX...XXX.............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..XXXXXXXXXXXXXXXXXXXXXX....XXXXXXXX.XXXXXX #=GC SS_cons -EEEEEEES-SS--SEEEEE-TT-SEEEEE-STTSSHHHHHHHHHHHTT--.--.-------TTSS------------------------EEEEEEEE........EETTEE................EEEEEEEETTS-...EEEEE........TTEEE-H.HHHHHHHHCTT--TTT-TTEE-TT-TTHHHHS-HHHHH.......HHHHHHHSTTTTHHHHHHHHHH---------------.------------------------------------------------TTHHHHH..............HHHHHHHHHHHHHHHHHHHHHHHHHHT---------.---..-EEEEEESSS.SSGGGS-EEEEEE-TT----SGGGS-HHHHHHHHHHHHHHHHTSS-...............-SEEEESSTTTT--HHHHHHHHHHHHHH-BTTBEEEEE-S-HHHHTT-XXXXXXXXXXXXXX..........XXXXXXXXXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...XXXXXXXXXXXXXXXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXX.XXXXX........XXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...XXXXXXXX..XXXXXXXXXXXXXXXXXXXX..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...XXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........XXXXXXXXXXXXXXXXXXX.....XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......XXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXX.XXXX.........................XXXXXXXXXXXXXXX............................................XXXXXXXXXXXXXXXXXXXXXX.............XXXXXXXXXXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..XXXXXXXX...XXX.............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..XXXXXXXXXXXXXXXXXXXXXX....XXXXXXXX.XXXXXX #=GC seq_cons hlcclhlpsFKSat.cplhhsFstsFssIlGPNGSGKSNllDAIhFVLG.p.supplRupphscLIat...............pstsssppApVplhF........sppspt..........t..p..hslpRphhpsGs...ScYhI........NGcsssh.p-ltcLLtptsIshps.h.ll.QGclpplhphpPppRp.......phlE-huGstcactchccuhpclpchppphpphp.hh.pplppphpphcpptpph.ca.phppphpthchhlh.hph.phtpphpphptplpp..............hppphpphptphpp.ppplpthppphpphtpphpp..ppp..h.thptphpp.hptpht.hcpphpth.pphpphppphtphppchpphptthtphctp...................p.....htt..tt.tpt.p.......t..p..t...tph.t..t.hp.....ht...t...............ht.htpph..tphptplpph.t.phpp.ppphtphppplp......phptthpphtpphtphptphp.hp...ppltp...th.th.......t...................t..h.uhhGhlhpLhph...p.paphAlpsshuttht.llVcs.psutpslphL+ppph.sphoFlsLsplt...ht....................hhshlch.c.phptsh.hhhtssllspshppApplshhh.....th+hVTLc..Gplhp.pGshoGG..p..t...............t..ppplpphppphpthppphpphptt.pphptphpphppthpphp.php.hptphpthppt..thptph.t.p.th.th............pplpphptph.pphtpphpphpp.phpphppphtt.............ppp.pphtpthpphptphpplp.phpp..tt.t................h.p..tph..h.....ppplpphcpcLpphppplpphcschpEhppth.phptphpph.p.htthppp.p.......plptphtphppplpp...tht.ht.pth......h...t.................................................................................................................................ppclpchppplpch.tplNhpuhccapchpcchpplspphcchcptcpsl.phhpclcpt+hc.F.tsFp.lspphptlap.Lh..........GG..pAcLplps...ss-..............................httGlphpspsstKphpplp.LSGGEKoLsALALlFA.....lpphcPsPhYlhDElDAALD.pNsptlAphl+..cpscp.uQFIVlol+pshhptA....-plhGlhh.csuhsp // hmmer-3.1b2/testsuite/i12-delete-corruption.pl0000775361611702660230000000412512473612615020722 0ustar wheelerteddy#! /usr/bin/perl # Bug #h77: hmmalign corrupts column preceding an all-delete column # # Usage: ./i12-delete-corruption.pl # Example: ./i12-delete-corruption.pl .. .. tmpfoo ## # # This test is now obsolete. hmmalign by default now saves all # consensus columns, which removes the problematic execution path. # The hmmalign --allcol option is gone (as of 25 May 2010). # # SRE, Tue Mar 2 11:11:07 2010 [Janelia] # SVN $Id: i12-delete-corruption.pl 3277 2010-05-24 22:00:46Z eddys $ BEGIN { $builddir = shift; $srcdir = shift; $tmppfx = shift; } # Verify that we have all the executables we need for the test. if (! -x "$builddir/src/hmmbuild") { die "FAIL: didn't find hmmbuild binary in $builddir/src\n"; } if (! -x "$builddir/src/hmmalign") { die "FAIL: didn't find hmmalign binary in $builddir/src\n"; } # Create our test files. # The test seqs are missing one column, K, in an unambiguous small alignment. if (! open(ALI1, ">$tmppfx.sto")) { die "FAIL: couldn't open $tmppfx.sto for write\n"; } if (! open(SEQ1, ">$tmppfx.fa")) { die "FAIL: couldn't open $tmppfx.fa for write\n"; } print ALI1 <<"EOF"; # STOCKHOLM 1.0 seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY // EOF print SEQ1 <<"EOF"; >test1 ACDEFGHILMNPQRSTVWY >test2 ACDEFGHILMNPQRSTVWY EOF close ALI1; close SEQ1; @output = `$builddir/src/hmmbuild $tmppfx.hmm $tmppfx.sto 2>&1`; if ($? != 0) { die "FAIL: hmmbuild failed\n"; } $output = `$builddir/src/hmmalign $tmppfx.hmm $tmppfx.fa 2>&1`; if ($? != 0) { die "FAIL: hmmalign failed\n"; } ($testseq) = ($output =~ /\ntest1\s+(\S+)/); if ($testseq ne "ACDEFGHI-LMNPQRSTVWY") { die "FAIL: test sequence corrupted by hmmalign\n"; } #$output = `$builddir/src/hmmalign --allcol $tmppfx.hmm $tmppfx.fa 2>&1`; #if ($? != 0) { die "FAIL: hmmalign failed\n"; } # #($testseq) = ($output =~ /\ntest1\s+(\S+)/); #if ($testseq ne "ACDEFGHI-LMNPQRSTVWY") { die "FAIL: hmmalign --allcol produced unexpected result\n"; } print "ok\n"; unlink "$tmppfx.sto"; unlink "$tmppfx.fa"; unlink "$tmppfx.hmm"; exit 0; hmmer-3.1b2/testsuite/rndseq400-10.fa0000664361611702660230000001010012473612615016561 0ustar wheelerteddy>random0 VDDIPLTETFSDLNMTAADDELTDLRNTDGEYADYDAGGGQIETLNSLMKANVFCWRSSF EYLEIPGECPQRMKAFQELGNILSKYCSALILRLTLCKIIPQSSFLNGNLVVYYSETRVS KDRSALIFFDPMRQSSTIDHIFTEQGLLGWLEQRDTSPLLSPTTGAKNSLNVVTLALDLF RSSMTDYISGIIDKFKGIHEYGWIFNWRAPEKSISKGNVIFPMVRSHIDPLAKHPLADAP NDQPRWMPMKWSARVVMVPLDSLDQDLFLRLSNAEIKKDLWVGIKCQGKTCLAGASTSFR QSPPGPGGVLLRGLSWSANLQQSTGEAQTFGTYFVDHLGPLRQAVLDCREWASFIRRGGS TIFDQLEIFTDARREAPETRVICLQSFDERSPETAPVSTV >random1 EVEMRESGNIRTTLNSLDGFMTGTAAHADEIDVPDIFPVYGLLAPSLPVAGFYHVPGEAV ALITIVRLFDAVSCNPNDAARNPFRHVKVPPNAQDRYEPVLKPWTASGANVIPCAPLTHT PYKPALCCIPSYCSHISDRLSMLFSSLSSTFAPDSSLIRHIDDPNSLNSDLRLASMGRVY AITCKETIVDNLWDLINLDVFRFPLENVFMDPSREHSLAIGQNNCFDKVFRATGVLSSCV QKTNKTYKCFSVDEFQCGSSRRQLMQNDLLECAFPRDLNNEPFLATRPPVERSEVDEWNK FVQTDVYRRRLRSPDQKATIACQGSSWPQEDVVMKVHSRVAAVAKPNMGPPHLLRYTSLY QRENKQLGPHLLNHRIVQYTASDVMVENAEQLEYLLYAKI >random2 YKGGRSQLKGWSQDAAHFVWDNEEDFSASALFPKGILIYSPSATNKFGLLKLANLGNKKL DGKSSMHAFIGGGNGDQKVLNRTDVDGFGSPWPNQKEEYMSPDYQIFAAVPTSRHKGVDN KLIEEAPVGIKDVQCRPDFKIHKAKPMTFSDSIVDMQTTIKVMLYVKCVRFKEAKNESYE EAELGFMYEEKSEDALSRATDQYYERGGEFLYRRKYVEVEGDKTGKSVAHSGLIRLVDLV ITRARVASLAGAILVQLLGLADSSRAQGAAGATPTVATYRDAQIVGYIDIAPETRMFLVR ILYVRLDTDGKAVQVKHGPKFGSTNVCAGHDYSSKSAGGGIVGQSFLVAITNFEHGGSLQ NMTYDHQYVLLPLLYFSSTSACGALKSDVNTGGSPYAVAI >random3 KQLVDQASYPIKAFPQMDEIDTHQAGVNFVEPAQQGFLKELEPTVDREIDIPSIAWAVYR AEIQTEDKISSIWNQLQISGDCVLPAVETGYDYFTVQTSPTLKRLMITSENMKTFCVEFI AVGSLDFLLNKKEFGKPIAYINNVQTVMMQRADFRSSSELSPILTGVDLKSLESPRCQLA VGRLGMDPQLIQVNGNAQCYLQKSLSGIEIILYEIIRATTVWLIQPMAIGEEPADWHGIF LAGSPLGAMPATNTIGHASCLDGDAQLYRRDNEKFHARIKKYHLNSPGSWNSATTINNSN KVTVGAWYCNTDKVTDHFRQAITAEPIVGGSTNMLKEEMMIRGLKVNFIYIDLYIKLSGA SHFVNRVTGTLSASRIAGEFENPMEFLPNAPSDLIQVGPH >random4 ACSGQLILGTLYDRTKVFFANLRLVSNLFLADIILKFMRNFKINKMPEWMGSWVQNEHTQ TEIIKFAANSGNDRYIEFSTIFAEMYRFNEVKPLFNINLIYCHCKHLFQFADDVSLKPNA WQTKTPGLFYYLLHYGGFMVQYEVAQGEHDRRTRFDRTNPWNVASGGGVAMKAVKRKDLR VTVVYAGWETGCTSALPKNNTLETFSPRQPGKERNEDTEALDELSKHSPLHLDVGTPVKL GVTASGGSEIPLEKDEADLQEIWVPNPAGPLQHEAVKLADVERFQLGAVMATMTYDRIAQ LKLLIGRHANVPAASWYVTVPTDSFETLDYIERSFALTTLIMVSWWRAQGKIEYLMGVDK IAHCYKEATCTFGETIRCSKSNEECSYRKSLTTKKNDYKE >random5 PTPPTSGLNGRMYQAVLDCPVGKNVEEQQQTLTLWRGASINVCDVLKNYFGWGPGELALR AVTQPAYLATPKRTVGVVADIRNAWSSFGSQVQGYELMEAHMNTYETRKEQVTILRDRSS VLREALGGASSPLCHDNEKKTKEMALTEDFKPCTSEIQAEAKRKAVEGPLGPRVLVEGRV FFSLGMAPPSISLCVPIVGATGDMNVKRGKMDRQTSFVDRSEDLRVVASWSNALSKSTLN AVLALNSEDDDRKPDALSIIKIFLPQTDQYLVKFLADIPEYHENWFLVAELKMLEGQSTL GLTPMMELLVSTGVGNQETPIASEDLMHFPGSALVSHADAVRIMKRPNKINLPNEKLRIL LCKEESASFRTTRVRTDKSPFGGCAGDCANVPDTELIDVD >random6 TYTCTILAIKCKTVRFDPQVDFASLSASLWGLTVGEKVRTAGPMMCKVELGTWAISSYPV RGSHLHIHWSSEEKSPTNRKIRLVYRKELGLWVQKALPLEEAAALRLSIVDINYYVMWFI SGSFSEARQEVIGCAPKGYHDQGIWEHVVFKRLNSCPTEKNGTHTDLTETPGAYVTIKLI DTKGFGNCDHAEEIEARTDSLSQQISLLIDGTCGLCNITGTKLTPDIYVAIAQPPSWADM TDPLIRLQQHENIIENVEDIKFTMELQVTRQRFDETKMGIIQITDSIKANFTAEEWLSSA STPGNQSLSIGGGRIYSRLQVGKLLIANVSTPYTLQLKYTDFNVNNEMQGEMLAQVYLLR VDWSAHIVPAVVAEYYFWLGKGILKPVRAGGRHGMLFTAK >random7 NNGGHEEEPQLDFLMSQAAQRSLCDIVGVHPKQGKAGEDRPDQTYRMTYHCGQYQTEEIN NLTVPMTEFFCLFRDLKHRECCGASSAPVKGIKAAPNDVSAEDNSLIRTNHHCLRDLKTL HFRCGIRLDIDVEDVVATPARKLRTMIISCNASNAEKHERFAEDTPSRVSSNAMGQAINL FCLESHADANKMAFSVKFTLTVFLAGSMSERGTTRQVNRNGRRRGAYDWSSIPGVYCGTI QCDVFFVCRYGLFGRLSLRKQNIANLSPAAVLFDLELKLAFWRPFRMGSVTNCVKVHVLG LFILQVHNYNPVGIRSQPKLLVVNHLGEYGNCALQVLECQLGLRNESAHGNVNYVKQMCP WRRSPFRLYDLEVSTVNNKFPMSGACVLNAISTLRGAIFV >random8 VEDSKYGPSKTVGNKINDLLEPLVELYKGKRLRVDKLEAIFDSFALGGVNEATGGLFADG ITGDRIIYALRVPIEFRGFDQAFNITYPLEHVDISQYIPTTRDVVSAYASTFRFWDKLSP GLTQAQNKHIAIILEDVTHVVWKKIGLRQDFMRYWEVALLLASQVCNFDKEINASTSEIR MIGMRINKEDPITPQICVIVAEADIFDNYEQYEGNNLLVALLLTQSRARESDQTRSTGQG GMPSVYIFSLAGFLRLRVYQRLNCEAKALMIILSDPKAVLQIVANSHTELVTAFRFAAQP AELFAKDLSELPFSAAPQAKAQPQWFQLQYRGVAELSFSSPRVSGHADIHLLSLLNIPIR FWYRTTYSLGPLSQSLDSRPDRCHLVESWKLKNFLLYILA >random9 VAVRYEFIRNLSFLKSKEFYLCAISEEVSLGIMQNLDQDKETGNPIVSHVEPFTIQNLLV KKVVAPTRELEMMVGDFCTTLIEALALNQGSRDEEPTYELDGIDELIARMTSEECRCPST DREYGPGAFDFIVFYSLKREKIALYMIPKVASHGEDYKRENRVPCAHTSLDTQINSQWEI DVLWGPIIVAMVLECDCWLFAGTLSIGLPRLFRGPEAKITTSSLEQWVYKNGLFRPSKPT YMENGVEQALWEVTKLVFARRTPAQDILREFKSSPFFDPKNVYVKEITGYSFVDPQVRCF MKGIGINYVGHKANAKLLANLKSDGNMIARLEMLEPASITRNRIAMPSGTGPEDMLIDTA HFGLGPNVKGHKEKQGSESAETLPLAVVFSKAKKQYPFFG hmmer-3.1b2/testsuite/i18-nhmmer-generic.pl0000775361611702660230000001166112473612615020167 0ustar wheelerteddy#! /usr/bin/perl # Test of hmmbuild/nhmmer as used to build a DNA model, then query a # a database of long (1MB). # # Usage: ./i18-nhmmer-generic.pl # Example: ./i18-nhmmer-generic.pl .. .. tmpfoo # # TJW, Fri Nov 12 11:07:31 EST 2010 [Janelia] # SVN $URL$ # SVN $Id$ BEGIN { $builddir = shift; $srcdir = shift; $tmppfx = shift; $verbose = shift; # if arg not given, defaults to false (zero) } # The test makes use of the following file: # # 3box.sto Single 3box alignment # It creates the following files: # $tmppfx.hmm 1 model, 3box # $tmppfx.A 1 random seq, ~4.5MB in length # $tmppfx.B 2 random seqs, generated by hmmemit from $tmppfx.hmm # $tmppfx.fa Roughly 4.5MB of a single pseudochromosome, consisting of the two sequences from $tmppfx.B inserted into the sequence of $tmppfx.A # All models assumed to be in testsuite subdirectory. $alignment = "3box.sto"; @h3progs = ( "hmmemit", "hmmbuild", "nhmmer"); @eslprogs = ("esl-shuffle"); # Verify that we have all the executables and datafiles we need for the test. foreach $h3prog (@h3progs) { if (! -x "$builddir/src/$h3prog") { die "FAIL: didn't find $h3prog executable in $builddir/src\n"; } } foreach $eslprog (@eslprogs) { if (! -x "$builddir/easel/miniapps/$eslprog") { die "FAIL: didn't find $eslprog executable in $builddir/easel/miniapps\n"; } } if (! -r "$srcdir/testsuite/$alignment") { die "FAIL: can't read msa $alignment in $srcdir/testsuite\n"; } # Create the test hmm $cmd = "$builddir/src/hmmbuild $tmppfx.hmm $srcdir/testsuite/$alignment"; $output = do_cmd($cmd); if ($? != 0) { die "FAIL: hmmbuild failed unexpectedly\n"; } if ($output !~ /1 3box 22 22 20 75 22.00 1.415/) { die "FAIL: hmmbuild failed to build correctly\n"; } $output = do_cmd( "grep MAXL $tmppfx.hmm" ); if ($output !~ /MAXL 75/) { die "FAIL: hmmbuild failed to build correctly\n"; } # Create a roughly 4.5MB database against which to search $database = "$tmppfx.fa"; do_cmd ( "$builddir/easel/miniapps/esl-shuffle --seed 33 --dna -G -N 1 -L 4500000 -o $tmppfx.A" ); do_cmd ( "$builddir/src/hmmemit -N 2 --seed 4 $tmppfx.hmm > $tmppfx.B " ); do_cmd ( "$builddir/src/hmmemit -N 1 --seed 3 $tmppfx.hmm >> $tmppfx.B" ); do_cmd ( "head -n 33000 $tmppfx.A > $database" ); do_cmd ( "head -n 2 $tmppfx.B | tail -n 1 >> $database" ); do_cmd ( "tail -n +33001 $tmppfx.A | head -n 22000 >> $database"); do_cmd ( "head -n 4 $tmppfx.B | tail -n 1 >> $database" ); do_cmd ( "tail -n 20000 $tmppfx.A >> $database" ); do_cmd ( "tail -n 1 $tmppfx.B >> $database" ); # perform nhmmer search $cmd = "$builddir/src/nhmmer --tformat fasta $tmppfx.hmm $database"; $output = do_cmd($cmd); if ($? != 0) { die "FAIL: nhmmer failed unexpectedly\n"; } $expect = q[ Target sequences: 1 \(9000000 residues searched\) Residues passing SSV filter: 174275 \(0.0194\); expected \(0.02\) Residues passing bias filter: 145442 \(0.0162\); expected \(0.02\) Residues passing Vit filter: 18114 \(0.00201\); expected \(0.003\) Residues passing Fwd filter: 415 \(4.61e-05\); expected \(3e-05\) Total number of hits: 5 \(9.78e-06\)]; if ($output !~ /$expect/s) { die "FAIL: nhmmer failed search test 1\n"; } $expect = q[ 0.44 13.6 5.2 random 4499980 4499998\s+ 1.6 11.9 4.2 random 3299961 3299978\s+ 1.7 11.8 4.4 random 1979941 1979960\s+ 8.2 9.7 2.3 random 2354832 2354818\s+ 9.3 9.5 4.4 random 4019481 4019466]; if ($output !~ /$expect/s) { die "FAIL: nhmmer failed search test 2\n"; } $cmd = "$builddir/src/nhmmer --tformat fasta --toponly $tmppfx.hmm $database"; $output = do_cmd($cmd); if ($? != 0) { die "FAIL: nhmmer failed unexpectedly\n"; } $expect = q[ Target sequences: 1 \(4500000 residues searched\) Residues passing SSV filter: 84389 \(0.0188\); expected \(0.02\) Residues passing bias filter: 70909 \(0.0158\); expected \(0.02\) Residues passing Vit filter: 8847 \(0.00197\); expected \(0.003\) Residues passing Fwd filter: 228 \(5.07e-05\); expected \(3e-05\) Total number of hits: 3 \(1.27e-05\)]; if ($output !~ /$expect/s) { die "FAIL: nhmmer failed search test 3\n"; } $expect = q[ 0.22 13.6 5.2 random 4499980 4499998\s+ 0.78 11.9 4.2 random 3299961 3299978\s+ 0.85 11.8 4.4 random 1979941 1979960]; if ($output !~ /$expect/s) { die "FAIL: nhmmer failed search test 4\n"; } print "ok.\n"; unlink "$tmppfx.hmm"; unlink "$tmppfx.A"; unlink "$tmppfx.B"; unlink "$tmppfx.fa"; exit 0; sub do_cmd { $cmd = shift; print "$cmd\n" if $verbose; return `$cmd`; } hmmer-3.1b2/testsuite/PAX8_HUMAN0000664361611702660230000000103312473612615015713 0ustar wheelerteddy>sp|Q06710|PAX8_HUMAN Paired box protein Pax-8 OS=Homo sapiens GN=PAX8 PE=1 SV=2 MPHNSIRSGHGGLNQLGGAFVNGRPLPEVVRQRIVDLAHQGVRPCDISRQLRVSHGCVSK ILGRYYETGSIRPGVIGGSKPKVATPKVVEKIGDYKRQNPTMFAWEIRDRLLAEGVCDND TVPSVSSINRIIRTKVQQPFNLPMDSCVATKSLSPGHTLIPSSAVTPPESPQSDSLGSTY SINGLLGIAQPGSDKRKMDDSDQDSCRLSIDSQSSSSGPRKHLRTDAFSQHHLEPLECPF ERQHYPEAYASPSHTKGEQGLYPLPLLNSTLDDGKATLTPSNTPLGRNLSTHQTYPVVAD PHSPFAIKQETPEVSSSSSTPSSLSSSAFLDLQQVGSGVPPFNAFPHAASVYGQFTGQAL LSGREMVGPTLPGYPPHIPTSGQGSYASSAIAGMVAGSEYSGNAYGHTPYSSYSEAWRFP NSSLLSSPYYYSSTSRPSAPPTTATAFDHL hmmer-3.1b2/testsuite/i19-hmmpgmd-ga.pl0000775361611702660230000056111312473612615017310 0ustar wheelerteddy#! /usr/bin/perl # Test that hmmpgmd is correctly applying bit score thresholds; # in this case, the --cut_ga threshold, using an example that # Rob Finn found as a bug in Jan 2011. # # SRE, Sat Jan 8 09:29:18 2011 [Casa de Gatos] xref J7/50 # SVN $URL$ # SVN $Id$ use IO::Socket; $SIG{INT} = \&catch_sigint; $builddir = shift; $srcdir = shift; $tmppfx = shift; $verbose = 0; $host = "127.0.0.1"; $cport = 51373; # ...don't want a test to interfere w/ running hmmpgmd daemon on same machine $wport = 51374; # nondefault worker and client ports... # This test creates its own small HMM database in $tmppfx.hmm # create_test_hmmdb() writes three specific models to a file. # Then we index that w/ hmmpress. # Verify that we have all the executables and datafiles we need for the test. @h3progs = ("hmmpgmd", "hmmc2", "hmmpress"); foreach $h3prog (@h3progs) { if (! -x "$builddir/src/$h3prog") { die "FAIL: didn't find $h3prog executable in $builddir/src\n"; } } # Verify that threads are enabled in p7_config.h # by looking for "#define HMMER_THREADS" # if not found, threads are not enabled and this # test would fail, but we return ok status because # we don't want the full testsuite to fail. $have_threads = `cat $builddir/src/p7_config.h | grep "^#define HMMER_THREADS"`; if($have_threads eq "") { printf("HMMER_THREADS not defined in p7_config.h\n"); exit 0; } # Verify that the wport and cport are CLOSED - we don't want to # clobber existing hmmpgmd's (or other client-server programs on those # ports). if (IO::Socket::INET->new(PeerHost => $host, PeerPort => $wport, Proto => 'tcp')) { die "FAIL: worker port $wport already in use"; } if (IO::Socket::INET->new(PeerHost => $host, PeerPort => $cport, Proto => 'tcp')) { die "FAIL: client port $cport already in use"; } # create the files needed for the test &create_test_hmmdb("$tmppfx.hmm"); &create_test_script("$tmppfx.in"); `$builddir/src/hmmpress -f $tmppfx.hmm`; if ($?) { die "FAIL: hmmpress"; } $daemon_active = 0; # start the hmmpgmd master and 1 worker with 1 core system("$builddir/src/hmmpgmd --master --wport $wport --cport $cport --hmmdb $tmppfx.hmm --pid $tmppfx.pid > /dev/null 2>&1 &"); if ($?) { die "FAIL: hmmpgmd master failed to start"; } $daemon_active = 1; sleep 2; system("$builddir/src/hmmpgmd --worker 127.0.0.1 --wport $wport --cpu 1 > /dev/null 2>&1 &"); if ($?) { die "FAIL: hmmpgmd worker failed to start"; } sleep 2; # Run the test script @output = `cat $tmppfx.in | $builddir/src/hmmc2 -i $host -p $cport -S 2>&1`; # Currently, hmmc2 returns nonzero exit code even upon clean !shutdown command... don't check $? $daemon_active = 0; $in_data = 0; $nhits = 0; foreach $line (@output) { if ($line =~ /^Scores for complete sequence/) { $in_data = 1; } if ($line =~ /^Internal pipeline statistics summary:/) { $in_data = 0; last; } if ($in_data && $line =~ /^\s+(\S+)\s+(\d+\.\d+)/) { $resultline[$nhits] = $line; $bitscore[$nhits] = $2; $nhits++; } } # if cut_ga isn't being processed properly, we get three hits: # 1.3e-43 134.8 1.6 4e-28 82.1 0.1 3.3 3 3 # 1e-05 13.9 0.8 0.00016 7.0 0.4 2.9 1 1 # 1.7e-05 12.3 0.1 0.00012 6.4 0.0 2.2 2 2 # # if we're ok, we get 1 hit: # 1.3e-43 134.8 1.6 4e-28 82.1 0.1 3.3 3 3 $expected_line = " 1.3e-43 134.8 1.6 4e-28 82.1 0.1 3.3 3 3"; if ($nhits == 3) { die "FAIL: ga thresholds not applied?"; } if ($nhits != 1 && $resultline[0] ne $expected_line) { $daemon_active=1; tear_down(); die "FAIL: didn't get expected result line\nresult: $resultline[0]\nexpect: $expected_line"; } unlink <$tmppfx.hmm*>; unlink "$tmppfx.in"; unlink "$tmppfx.pid"; print "ok\n"; exit 0; sub tear_down { if ($daemon_active) { open PID, "<$tmppfx.pid"; my $pid = ; close PID; `kill $pid`; # the old way #&create_kill_script("$tmppfx.in"); #`cat $tmppfx.in | $builddir/src/hmmc2 -i $host -p $cport -S 2>&1`; } unlink <$tmppfx.hmm*>; unlink "$tmppfx.in"; } # TJW: Thu Mar 31 14:30:56 EDT 2011 # Written to tear down the worker/master in the case of a sigint, # so a zombie won't be left behind sub catch_sigint { tear_down(); die "sigint signal captured; killed daemons\n"; } sub create_kill_script { my ($scriptfile) = @_; open(SCRIPTFILE, ">$scriptfile") || die "FAIL: couldn't create the test script"; print SCRIPTFILE <<"EOF"; \@--hmmdb 1 --cut_ga // !shutdown // EOF close SCRIPTFILE; 1; } sub create_test_script { my ($scriptfile) = @_; open(SCRIPTFILE, ">$scriptfile") || die "FAIL: couldn't create the test script"; print SCRIPTFILE <<"EOF"; \@--hmmdb 1 --cut_ga >2abl_A mol:protein length:163 ABL TYROSINE KINASE MGPSENDPNLFVALYDFVASGDNTLSITKGEKLRVLGYNHNGEWCEAQ TKNGQGWVPSNYITPVNSLEKHSWYHGPVSRNAAEYLLSSGINGSFLV RESESSPGQRSISLRYEGRVYHYRINTASDGKLYVSSESRFNTLAELV HHSTVADGLITTLHYPAPGEWCEAQTKNGQGWVPSNYITPVNSLEKHS WYHGPVSRNAAEYLLSSGINGSFLVRESESSPGQRSISLRYELYVSSE SRFNTLAELVHHHSTVADGLITTLHYPAPZZMM // !shutdown // EOF close SCRIPTFILE; 1; } sub create_test_hmmdb { my ($hmmfile) = @_; open(HMMFILE, ">$hmmfile") || die "FAIL: couldn't write $hmmfile\n"; print HMMFILE <<"EOF"; HMMER3/d [3.0 | March 2010] NAME MAGUK_N_PEST ACC PF10608.2 DESC Polyubiquitination (PEST) N-terminal domain of MAGUK LENG 89 ALPH amino RF no CS no MAP yes DATE Tue Sep 8 00:51:02 2009 NSEQ 14 EFFN 2.102051 CKSUM 3290727379 GA 21.60 21.60 TC 24.90 21.80 NC 20.80 20.80 STATS LOCAL MSV -9.0718 0.71843 STATS LOCAL VITERBI -10.0323 0.71843 STATS LOCAL FORWARD -3.5788 0.71843 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.57879 4.51586 2.89379 2.48583 3.68314 2.91666 3.45448 3.09628 2.73326 2.74219 3.83636 2.91347 2.86338 2.97282 3.15048 2.43440 2.75462 2.68616 4.94375 3.33584 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.00000 * 1 2.78074 5.23263 3.03312 1.95212 4.56150 3.55097 2.89390 4.02873 2.03244 2.65513 4.28015 3.02685 3.94581 2.21412 2.92245 2.39983 3.01009 3.61524 5.66933 4.27959 1 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 2 3.02649 5.38580 3.29742 2.72254 4.78829 2.13828 3.82212 4.20618 1.28875 3.66188 4.45387 3.22058 4.12086 2.57735 2.29482 2.82735 3.23370 3.81671 5.75062 4.45095 2 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 3 3.63095 5.24738 4.25257 4.07406 3.05976 2.58877 4.30884 4.15864 4.09537 3.64061 4.75137 4.23604 4.78468 4.35536 4.29123 3.77060 3.99653 3.91533 4.68139 0.48706 3 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 4 2.88446 5.13644 3.22034 2.74347 4.67592 2.73233 3.92991 4.11564 2.57446 3.63836 4.43148 2.75099 4.07521 3.06208 1.26285 2.14538 3.16314 3.69765 5.78337 4.46098 4 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 5 2.76200 4.64429 3.41933 2.87127 3.79150 2.90455 2.90085 3.20220 2.84551 2.88422 3.75527 3.32791 3.17362 3.17367 3.24796 2.57085 2.99992 2.53913 5.19307 1.84325 5 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 6 2.85804 5.13265 3.13340 2.61674 4.19821 3.62787 2.63173 3.84413 2.54945 3.39445 4.20585 3.13665 2.74706 1.53814 2.97797 2.86181 3.08737 3.49706 5.46930 3.03541 6 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 7 3.09297 5.57713 1.09055 2.48789 4.99114 3.55027 4.03413 4.49597 2.95884 3.99245 4.79357 2.17007 4.12173 3.17897 3.51394 2.38850 2.71350 4.04508 6.14813 4.68492 7 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 8 2.78737 5.17840 2.38481 1.47380 4.47387 3.54847 3.76615 3.92539 2.53614 2.87154 3.34566 3.03638 3.95782 2.88433 3.02280 2.40276 3.02155 3.54053 5.64275 4.25816 8 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 9 3.13086 5.73091 1.24968 1.83426 5.03857 3.56477 3.98866 4.55693 2.89673 4.02136 4.81383 3.01510 3.04460 2.08793 3.45744 3.03395 3.39403 4.10757 6.15973 4.67505 9 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 10 2.72638 4.51100 3.84847 3.32648 3.92040 3.61451 4.25387 2.68130 3.27077 2.95472 3.86779 3.63495 4.15296 3.57520 3.60539 1.67256 1.42483 2.52784 5.37340 4.14600 10 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 11 2.70490 4.66784 3.49241 2.97756 4.11927 2.61027 4.06755 3.50952 2.96383 2.31209 4.02534 3.38696 1.82574 3.29125 3.36955 2.14358 2.37804 3.18249 5.47610 4.20672 11 - - 2.68623 4.42231 2.77525 2.73129 3.46359 2.40500 3.72500 3.29359 2.67746 2.69360 4.24695 2.90352 2.73745 3.18152 2.89806 2.37849 2.77525 2.98524 4.58482 3.61509 0.23174 1.59824 5.38254 0.16933 1.85938 0.48576 0.95510 12 2.81748 4.74975 3.85397 3.76329 5.00632 3.45714 4.91168 4.57005 3.93350 4.23393 5.09090 3.88742 0.52980 4.23160 4.18426 2.41698 3.34759 3.91963 6.31516 5.11033 13 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 13 2.76385 5.12204 3.07364 2.51833 4.41446 3.02963 3.20167 3.86051 2.49579 2.56562 4.18014 3.05276 2.87198 1.97599 2.58152 2.40735 2.99434 3.48490 5.58722 4.21768 14 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 14 2.98570 5.53723 2.33200 1.28961 4.86108 2.88320 3.88897 4.36251 2.72638 3.83590 4.60484 3.00900 4.04586 2.17227 3.25632 2.43862 3.23581 3.92062 5.97306 4.52277 15 - - 2.68601 4.42241 2.77475 2.73139 3.46369 2.40504 3.72510 3.29370 2.67756 2.69343 4.24705 2.90328 2.73755 3.18071 2.89816 2.37902 2.77535 2.98534 4.58493 3.61519 0.16737 1.90035 5.38254 1.19099 0.36229 0.48576 0.95510 15 2.42305 5.24002 2.96873 2.21989 4.54891 3.56632 2.05713 4.00622 2.54969 3.53024 4.30731 3.05356 2.16135 2.52999 3.01923 2.81785 3.07666 3.61570 5.69822 4.31478 22 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 16 2.28787 4.56861 3.73259 3.23228 4.16989 2.84463 4.25115 2.64200 3.20687 3.23892 4.09505 3.54644 4.08052 3.51437 3.57561 1.15021 2.40124 3.18378 5.55499 4.31521 23 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 17 2.27144 4.60104 3.65059 3.16171 2.92292 3.50529 4.20201 3.53420 3.15109 3.21804 4.07802 3.50576 2.06752 3.46156 3.53004 1.32189 3.04554 3.19296 5.51505 4.25184 24 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 18 2.11075 4.80388 3.31324 2.79430 4.22630 2.81602 3.95585 3.63366 2.79595 2.81324 4.09097 2.75336 1.77325 3.13455 3.23504 2.80945 2.49147 3.28895 5.52847 4.22433 25 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 19 2.84057 5.23505 3.12392 2.56298 4.56827 3.60493 2.24218 4.01675 2.42376 3.51982 4.29209 3.09038 3.04320 1.93044 2.23698 2.81984 2.61433 3.62329 5.66239 4.30379 26 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 20 2.83688 4.24311 4.57049 3.97088 2.55769 3.98781 4.30780 2.21101 3.80494 1.39216 2.84612 4.07026 4.34156 3.97064 2.92513 3.29092 2.64032 2.24589 4.85645 3.68509 27 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 21 2.58142 4.90871 3.19954 2.65365 4.20960 2.99844 3.83678 3.62367 2.32728 2.86719 4.05016 3.15754 3.00567 2.99412 3.09489 2.48384 1.64410 3.29297 5.48192 4.15645 28 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 22 2.78442 5.28955 2.46168 2.20913 4.62760 2.71834 3.73944 4.11240 2.20492 3.59236 4.33526 2.17598 3.49541 2.84079 2.98700 2.50176 2.35641 3.67706 5.72574 4.31232 29 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01416 4.66019 5.38254 0.61958 0.77255 0.48576 0.95510 23 2.41964 5.30608 2.11526 1.81143 4.64330 2.78029 3.74997 4.12886 2.50532 3.60845 4.35303 2.99766 3.94592 2.64518 2.58964 2.47163 3.03334 3.69334 5.74200 4.32670 30 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.20785 4.66019 1.72480 0.61958 0.77255 0.48576 0.95510 24 2.43118 4.72192 3.21870 2.66906 3.99143 3.02480 3.80750 3.38715 2.28228 3.03250 3.87114 3.15341 3.07687 2.99568 3.09107 2.44058 2.38945 2.17368 5.31712 4.01777 31 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01716 4.46950 5.19185 0.61958 0.77255 0.41390 1.08196 25 2.73786 4.80774 3.22859 2.38072 3.25515 3.60073 3.81367 3.10205 2.27824 2.40903 3.88874 3.16976 2.96733 2.99670 2.46353 2.46562 2.96915 2.78318 5.33480 4.02959 32 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 26 2.61268 4.73683 3.30441 2.75189 3.98656 2.14039 3.87250 2.75058 2.73744 3.03310 3.87932 2.53052 3.32905 3.07343 3.17023 2.36398 2.65640 2.62364 5.33062 4.03956 33 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 27 2.08595 4.99862 2.62566 2.58654 4.32650 3.54169 3.81301 3.75036 2.60164 3.33698 4.13805 3.10407 1.83314 2.95374 2.67283 2.77856 3.00557 2.96300 5.55820 4.21053 34 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 28 2.84616 4.99183 3.08178 1.25429 3.07463 3.60145 3.89939 3.60785 2.73907 3.24545 4.11226 3.17547 4.04917 3.07630 3.19149 2.89033 2.25487 3.30790 5.51309 4.15698 35 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 29 3.09476 4.56710 4.53443 3.99087 3.40026 2.85764 4.55755 2.65253 3.82725 0.88449 2.45628 4.20632 4.54021 4.06078 3.99556 3.50576 3.34622 2.62561 5.15620 3.99940 36 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 30 2.82991 4.32121 4.22509 3.62829 3.35912 3.91428 4.17947 2.68361 3.39994 2.04758 3.39137 3.85810 4.27846 3.71285 2.38431 3.20520 3.06061 1.36654 3.41830 3.67355 37 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 31 3.04529 5.56556 1.74401 2.45637 4.83199 3.56231 1.94631 4.37552 2.75602 3.85533 4.64715 3.02416 4.07684 1.72984 3.26331 2.97181 3.29792 3.95008 5.97148 4.51963 38 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 32 2.79410 4.19534 4.55919 3.95998 3.27809 3.95106 4.27688 2.30034 3.78789 2.08778 2.98549 4.04385 4.31126 3.95777 3.86924 2.75928 3.02686 1.27625 3.26702 3.64457 39 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 33 1.45143 4.51764 3.95310 3.52365 4.55564 2.03708 4.52841 3.95800 3.50932 3.64452 4.46550 3.68137 4.05922 3.79195 3.84410 1.38547 3.04489 2.63484 5.90749 4.69602 40 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 34 2.85557 5.36679 2.33963 1.37904 4.69901 3.52646 3.79097 4.18669 2.57323 3.66852 4.42428 2.99276 2.97880 2.90158 2.66014 2.41350 3.09587 3.75326 5.80628 4.38274 41 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 35 2.82223 5.19044 2.55129 2.52855 4.52330 3.55703 3.79350 3.96406 1.29023 3.50300 4.28484 3.06315 3.98272 2.91539 2.98840 2.47248 3.06206 2.82742 5.67517 4.30177 42 - - 2.68626 4.42233 2.77528 2.73132 3.46362 2.40499 3.72503 3.29362 2.67749 2.69333 4.24698 2.90355 2.73679 3.18155 2.89809 2.37895 2.77528 2.98527 4.58485 3.61511 0.18011 1.83227 5.34587 0.67402 0.71265 0.55555 0.85274 36 2.85590 5.21027 2.94057 2.56302 4.67221 2.85521 3.88768 4.13849 2.24002 3.65822 4.43744 1.75672 4.01524 3.01562 3.12616 1.64435 3.12969 3.71055 5.81682 4.43352 45 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 37 2.83322 4.37808 4.04939 3.48250 3.40164 3.88569 3.18039 2.26042 3.35275 1.31779 3.40713 3.77458 2.61532 3.63747 3.59509 3.16861 3.06684 2.58679 4.94790 3.72857 46 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 38 2.28856 4.51794 3.56859 3.01519 2.96449 3.67288 3.16861 3.06812 2.97605 2.77487 3.66201 3.42673 4.08511 3.28769 3.34515 1.53290 2.98579 2.40268 5.11710 3.86013 47 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 39 2.31585 5.26910 2.95848 1.96522 4.60188 3.53954 3.74952 4.07299 2.25029 3.56574 4.32273 3.01390 2.64430 1.88235 2.95625 2.76995 3.03759 3.65508 5.70739 4.31050 48 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 40 2.77113 4.38740 3.85456 3.29127 3.53408 2.47802 4.09062 1.46326 2.80541 2.59084 3.15642 3.63052 4.17828 3.49559 3.48092 3.06280 2.61439 2.58523 5.01523 3.80115 49 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 41 2.79075 5.28090 2.58155 1.50922 4.61214 3.52394 3.74112 4.09195 2.19521 2.92084 4.32879 2.99316 3.93866 2.49795 2.98471 2.46257 3.02477 3.66479 5.71782 4.30874 50 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 42 2.46133 4.82102 3.27933 2.92325 4.70771 2.67494 4.18788 4.16332 3.05029 3.75049 4.53799 1.15168 4.03457 3.35624 3.49258 2.22887 2.52720 3.65119 5.94298 4.62677 51 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 43 2.94001 4.35884 4.49915 3.92280 3.52382 4.11740 4.46339 1.81493 2.99628 2.13322 3.47860 4.12104 4.46970 4.02443 3.96220 3.42153 2.54731 1.26359 5.11445 3.92017 52 - - 2.68630 4.42128 2.77561 2.73139 3.46395 2.40449 3.72536 3.29395 2.67696 2.69333 4.24731 2.90347 2.73746 3.18188 2.89842 2.37838 2.77534 2.98560 4.58320 3.61544 0.25313 1.51931 5.34587 1.78043 0.18460 0.55555 0.85274 44 3.06472 5.26849 3.07355 2.74138 4.43018 3.68198 1.22285 4.06808 2.64531 3.60425 4.45418 3.24494 2.33265 2.67435 2.99961 3.06790 3.31797 3.72016 5.66439 4.28124 60 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 45 2.05392 2.84007 4.46082 4.15562 4.81289 0.81083 4.95160 4.23996 4.09802 3.94585 4.74984 3.94298 4.07992 4.30821 4.29097 2.10965 3.06297 3.59227 6.18638 5.05779 61 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 46 3.23228 4.57964 4.84070 4.33440 1.75966 4.28692 4.02136 3.02797 4.15444 1.96101 3.68008 4.24869 4.62780 4.22558 4.18862 3.60639 2.71508 2.86800 2.80823 1.46482 62 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 47 2.79021 3.19981 4.53135 3.94770 3.34868 3.91473 4.31140 2.53353 3.77961 2.40798 3.36426 4.03529 4.31095 3.96802 3.88124 3.23359 2.42385 1.18208 3.15877 3.70011 63 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 48 1.97691 4.57654 3.80611 3.38426 4.67049 3.33839 4.46437 4.10142 3.39046 3.75060 4.55037 3.60510 1.76187 3.68927 3.75571 1.30220 2.35084 3.55249 5.97764 4.74424 64 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 49 2.89942 5.15063 3.04902 2.23198 4.39145 3.62128 1.45312 3.84245 2.56454 3.41066 4.23091 3.13388 4.04779 2.57150 2.97600 2.90466 3.13092 2.80137 5.60082 4.25383 65 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 50 2.35709 2.44844 3.83237 3.29575 3.81157 2.85583 4.18401 3.17491 3.24210 2.89252 2.93717 3.59217 4.09541 3.52986 3.56770 1.62090 2.31700 2.89968 5.25309 4.03364 66 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 51 2.81919 4.75176 3.42467 2.85093 3.85637 3.69776 1.61821 3.31837 2.33540 2.66184 3.84377 3.31178 4.07970 3.10907 3.04410 2.93563 2.54115 3.05876 3.55242 3.91981 67 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 52 2.84299 3.00447 4.74932 4.14632 2.74135 4.02400 4.34778 1.28575 3.95014 2.27988 3.28318 4.16394 4.37730 4.08830 3.98158 3.33789 3.07601 2.07215 3.23214 3.63700 68 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 53 2.77589 4.86199 3.34898 2.94197 4.57998 3.49373 4.11960 3.99483 2.33054 3.60300 4.42126 3.35832 4.07451 3.29353 3.24204 0.98961 2.42687 3.56366 5.80831 4.51812 69 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 54 3.05715 5.30805 2.88017 2.68022 4.78300 3.58660 4.07248 4.28077 2.85182 3.82022 4.65706 2.43593 1.06571 2.50694 3.26063 3.05315 3.36180 3.87156 5.96387 4.59428 70 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62352 5.34587 0.61958 0.77255 0.55555 0.85274 55 2.19605 4.26387 4.07450 3.49295 3.37091 3.82630 4.12070 2.32472 3.38959 2.01466 2.15231 3.75326 4.19775 3.63408 2.84674 2.61706 2.97959 2.36360 4.87413 3.67621 71 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.36132 4.62352 1.22613 0.61958 0.77255 0.55555 0.85274 56 2.77348 5.09569 2.35273 2.44901 4.37683 3.47757 3.70251 3.80073 1.50595 2.65460 4.17262 2.97906 3.90834 2.83621 2.83417 2.76151 3.00693 3.44646 5.54531 4.18626 72 - - 2.68658 4.42042 2.77517 2.73081 3.46308 2.40523 3.72534 3.29322 2.67781 2.69355 4.24730 2.90387 2.73697 3.18186 2.89841 2.37869 2.77560 2.98399 4.58517 3.61543 0.16645 1.91980 5.00527 2.32016 0.10343 0.97488 0.47359 57 2.67083 4.80666 3.10453 2.54576 4.04008 3.50019 3.69394 3.44725 2.07939 3.06044 3.88842 3.04976 2.94593 2.56698 2.87229 2.72060 2.26125 3.14011 3.28149 3.99762 88 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02072 4.28292 5.00527 0.61958 0.77255 0.97488 0.47359 58 2.41180 4.84799 2.99052 1.88201 4.10026 3.45750 3.69368 3.51605 2.49988 3.12291 3.94003 3.00024 3.20588 2.84808 2.96001 2.68880 2.43566 3.19154 5.36713 2.98852 89 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02072 4.28292 5.00527 0.61958 0.77255 0.97488 0.47359 59 2.95633 5.50909 2.13558 1.20923 4.81664 3.39222 3.80488 4.31667 2.15947 3.79563 4.60002 2.84851 3.94126 2.94471 3.20388 2.86601 3.21709 3.88653 5.93768 4.47669 90 - - 2.68602 4.42334 2.77687 2.73239 3.46575 2.40734 3.72716 3.29071 2.67903 2.69427 4.24911 2.90477 2.72949 3.18303 2.89985 2.37698 2.77494 2.98163 4.58698 3.61625 0.68331 0.71671 5.00527 3.00500 0.05081 0.56413 0.84132 60 3.24380 5.46576 3.28212 2.84816 4.88051 3.79283 3.88354 4.29775 1.77318 3.73180 4.59573 3.31143 4.22535 1.03304 2.51476 3.21295 3.44223 3.95038 5.77769 4.54175 122 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06877 4.48751 2.89665 0.61958 0.77255 0.65107 0.73707 61 0.66529 4.38822 3.98696 3.75999 4.77624 2.67261 4.75132 4.20569 3.83161 3.90478 4.70732 3.73100 3.98059 4.06397 4.08151 2.16462 2.99060 3.54805 6.12354 4.96375 123 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01697 4.48054 5.20288 0.61958 0.77255 0.77102 0.62090 62 2.24626 4.73718 3.17644 2.89429 4.66941 3.32237 4.18463 4.12949 3.06976 3.73452 4.53523 1.58044 3.98122 3.36990 3.49542 1.36768 3.06150 3.60673 5.92219 4.60976 124 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01697 4.48054 5.20288 0.61958 0.77255 0.77102 0.62090 63 2.77955 4.94760 2.42770 2.66482 4.62954 3.39310 4.06164 4.07558 2.97258 3.67197 4.48966 3.15029 1.18015 3.23740 3.44872 2.48950 2.75900 3.62848 5.88157 4.52681 125 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01697 4.48054 5.20288 0.61958 0.77255 0.59632 0.80036 64 1.55651 4.88857 3.23618 2.79274 4.45068 3.50003 3.97547 3.85508 2.07180 3.45966 4.28117 3.24811 1.90473 3.13921 3.10162 2.83388 3.08021 3.46677 5.67536 4.37320 126 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01585 4.54821 5.27056 0.61958 0.77255 0.67859 0.70792 65 3.30767 5.36094 3.07107 2.34488 4.99136 3.70051 4.44119 4.49082 3.33484 4.07797 5.00163 3.48897 0.62476 3.66795 3.72190 3.34166 3.67415 4.08950 6.14792 4.90494 127 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01585 4.54821 5.27056 0.61958 0.77255 0.55057 0.85949 66 2.97300 4.36026 4.65549 4.07704 3.44081 4.16937 3.33014 1.75881 3.91836 1.99678 3.40600 4.22169 4.51108 4.12572 4.04587 3.48303 3.20929 1.17797 5.07524 3.87802 128 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01514 4.59396 5.31631 0.61958 0.77255 0.60678 0.78768 67 3.10477 4.44159 4.93311 4.36953 3.59783 4.38114 4.79600 1.41959 4.22539 1.68764 3.50163 4.48379 4.70748 4.41505 4.33271 2.97405 3.34782 1.38265 5.30785 4.12490 129 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01514 4.59396 5.31631 0.61958 0.77255 0.60678 0.78768 68 3.51363 4.74078 5.48230 4.99209 3.92949 5.03928 5.66371 1.76102 4.89894 2.02868 3.69292 5.16775 5.26884 5.12170 5.05204 4.45160 3.76999 0.66032 6.00373 4.81399 130 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01514 4.59396 5.31631 0.61958 0.77255 0.60678 0.78768 69 2.56240 5.21573 2.87246 2.58321 4.68117 3.52509 3.95200 4.14250 2.75672 3.68471 4.48860 1.14873 3.01315 2.63482 3.21621 2.90594 3.19892 3.72922 5.85944 4.48104 131 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06161 4.59396 3.00310 0.61958 0.77255 0.60678 0.78768 70 2.65258 4.54433 3.56735 3.05515 3.98745 3.49657 4.08318 3.34885 3.01373 3.04672 3.07354 3.42399 2.83648 3.34288 3.38703 2.39587 1.27314 3.04187 5.37864 4.12959 132 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01585 4.54821 5.27056 0.61958 0.77255 0.67859 0.70792 71 3.30822 5.99082 1.09691 1.40682 5.28146 2.63887 4.09320 4.83906 3.16549 4.29238 5.14715 2.95960 4.15798 3.25995 3.81263 3.16277 3.60557 4.37202 6.43737 4.87699 133 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06916 4.54821 2.87819 0.61958 0.77255 0.67859 0.70792 72 2.19488 4.70251 3.29409 2.80205 4.21607 3.43666 2.99140 3.62968 2.79954 3.26359 4.08968 3.24010 3.95942 3.14332 3.22312 1.71360 1.80828 3.26372 5.51961 4.22293 134 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01671 4.49576 5.21811 0.61958 0.77255 0.61254 0.78082 73 2.31688 4.44324 4.11994 3.68993 3.69922 3.68819 4.43416 2.88989 3.57348 0.94063 3.66792 3.87164 4.25132 3.87355 3.79528 2.56811 3.13274 2.70756 5.28554 4.08080 135 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01585 4.54821 5.27056 0.61958 0.77255 0.67859 0.70792 74 2.94245 5.44969 1.51585 1.61573 4.75684 3.50537 3.85235 4.24299 2.70030 3.01761 4.52505 2.97044 3.02961 2.98027 3.22739 2.87926 3.19385 3.82282 5.89799 4.45824 136 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01585 4.54821 5.27056 0.61958 0.77255 0.67859 0.70792 75 2.46505 4.72153 3.29092 2.75753 4.08820 3.13446 3.89677 3.49049 2.75087 3.13351 3.96832 3.22057 2.93639 3.08717 3.18511 1.68242 2.18199 3.16731 5.41162 3.15396 137 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01585 4.54821 5.27056 0.61958 0.77255 0.67859 0.70792 76 2.27805 4.47830 3.51828 2.95358 3.62451 3.66871 3.23949 2.62199 2.91405 2.69594 3.58187 3.37785 2.77070 3.22464 3.28554 2.17030 2.94287 2.31826 5.05583 3.09699 138 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01585 4.54821 5.27056 0.61958 0.77255 0.67859 0.70792 77 2.06311 4.51395 3.59970 3.09648 3.94683 3.00282 4.10538 3.29870 3.06622 2.14525 3.88402 3.45215 1.67956 3.38273 3.43194 2.83072 2.68027 2.99978 5.35191 4.11041 139 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01585 4.54821 5.27056 0.61958 0.77255 0.67859 0.70792 78 2.78286 4.63290 3.49609 2.96984 3.72261 3.65518 3.94144 3.24659 2.82759 2.92315 3.80794 3.38691 4.08788 3.23150 2.72638 2.41543 2.57869 2.98870 5.14338 1.48553 140 - - 2.68626 4.42233 2.77528 2.73115 3.46362 2.40521 3.72503 3.29362 2.67749 2.69322 4.24698 2.90355 2.73748 3.18129 2.89809 2.37876 2.77500 2.98527 4.58485 3.61511 0.19387 2.15163 2.81446 0.95193 0.48775 0.67859 0.70792 79 3.31750 4.64704 5.08863 4.59863 3.73714 4.61230 5.22238 2.03044 4.44620 2.24534 2.68901 4.76376 4.95360 4.69725 4.60387 4.01293 3.59284 0.71915 5.69243 4.50216 144 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01678 4.49186 5.21420 0.61958 0.77255 0.75656 0.63351 80 3.40583 5.34465 3.28060 3.24874 4.82729 3.74326 4.63952 4.72797 3.63010 4.30502 5.28997 0.41104 4.44008 3.95076 3.97523 3.47116 3.82868 4.27893 6.05083 4.75985 145 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01678 4.49186 5.21420 0.61958 0.77255 0.75656 0.63351 81 3.60869 5.27876 4.40185 4.39452 5.44331 0.19882 5.42897 5.23905 4.65487 4.79162 5.80229 4.56938 4.68171 4.93102 4.78081 3.80412 4.13396 4.64771 6.33132 5.58035 146 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01678 4.49186 5.21420 0.61958 0.77255 0.60827 0.78590 82 2.64114 3.21539 3.95961 3.42978 3.72174 3.55521 4.22763 3.02960 3.34620 2.79293 2.85928 3.66480 4.09881 3.62591 3.62702 2.33112 1.24386 2.77110 5.19050 3.98380 147 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01585 4.54821 5.27056 0.61958 0.77255 0.67859 0.70792 83 3.38856 6.09057 1.23536 1.03935 5.36502 3.52756 4.14403 4.93945 3.25725 4.39071 5.27208 2.97600 4.19422 3.32008 3.92450 3.22784 3.69411 4.47164 6.52297 4.94998 148 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01585 4.54821 5.27056 0.61958 0.77255 0.67859 0.70792 84 1.63147 3.17342 4.13947 3.62214 3.70002 1.93409 4.32745 1.97472 3.53240 2.76103 3.68198 3.78149 4.13846 3.78232 3.76904 2.94178 2.99382 2.66546 5.19289 3.99786 149 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01585 4.54821 5.27056 0.61958 0.77255 0.67859 0.70792 85 2.79757 5.25450 1.89080 1.63721 4.56897 3.50656 3.74636 4.03887 2.51501 3.54464 3.10377 2.98075 3.93576 2.85997 2.66249 2.76155 3.03409 3.62927 5.70055 4.29676 150 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01585 4.54821 5.27056 0.61958 0.77255 0.55057 0.85949 86 2.80537 4.22316 4.47094 3.88116 1.98794 3.93671 4.19492 2.44557 3.72438 2.32226 2.93185 3.98891 3.32729 3.89808 3.82913 3.23711 3.03694 2.17983 4.73127 1.87386 151 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01514 4.59396 5.31631 0.61958 0.77255 0.60678 0.78768 87 2.92444 5.26597 2.92609 1.09959 3.46940 3.59076 3.84580 3.98277 2.19948 3.52581 4.34406 3.08652 4.04089 2.98632 3.03481 2.90343 3.16237 3.62357 5.68968 4.30416 152 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01514 4.59396 5.31631 0.61958 0.77255 0.60678 0.78768 88 4.53244 5.54175 5.35550 5.20741 1.29739 5.06867 2.73230 4.21103 5.00805 3.40951 4.73730 4.61626 5.33415 4.76197 4.88985 4.45907 4.72900 4.13395 3.87163 0.73574 153 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01514 4.59396 5.31631 0.61958 0.77255 0.41690 1.07612 89 2.87742 5.16741 3.07905 1.17839 4.44702 3.62194 3.83350 3.81820 2.25845 2.98910 4.23694 3.12899 4.03770 2.96765 2.98011 2.87863 3.10918 2.97220 5.63969 4.29056 154 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00955 4.65559 * 0.61958 0.77255 0.00000 * // HMMER3/d [3.0 | March 2010] NAME AAT ACC PF03417.9 DESC Acyl-coenzyme A:6-aminopenicillanic acid acyl-transferase LENG 225 ALPH amino RF no CS yes MAP yes DATE Mon Sep 21 18:03:58 2009 NSEQ 18 EFFN 4.249512 CKSUM 3937056000 GA 20.40 20.40 TC 20.50 20.50 NC 19.90 20.30 STATS LOCAL MSV -10.5003 0.70400 STATS LOCAL VITERBI -11.2820 0.70400 STATS LOCAL FORWARD -4.9012 0.70400 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.48325 4.16578 2.94753 2.70337 3.33333 2.86521 3.45160 2.89493 2.77543 2.51406 3.66218 2.88382 3.37273 3.06614 2.83877 2.62211 2.77345 2.76234 4.79471 3.46878 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.00000 * 1 3.01599 3.03950 4.88137 4.27265 3.12728 4.17432 4.50249 2.84015 4.07876 2.11866 3.52468 4.30387 4.53901 4.22851 3.12474 2.79010 2.59363 1.51650 2.18170 3.34969 1 - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 2 2.26298 5.39130 3.25555 2.50887 3.79173 3.75814 3.94920 4.16249 2.36013 2.56212 3.26902 2.16002 3.37474 2.33568 2.48348 2.95019 2.79054 3.76273 5.84578 4.45744 2 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 3 2.72899 5.46090 3.22435 1.95102 4.79745 1.85575 3.93604 4.27711 2.67397 3.25964 4.50443 2.80253 3.04208 2.55987 2.71895 2.93802 2.38344 3.84709 5.89895 4.49355 3 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04455 5.20896 3.26735 0.61958 0.77255 0.48576 0.95510 4 2.97951 5.49194 2.58788 2.15434 4.83668 2.24324 3.93394 4.32298 1.68266 3.79633 4.53431 3.20390 2.53521 3.03206 2.54564 2.70420 3.21154 3.88273 5.92333 4.51118 4 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04033 5.17286 3.38552 0.61958 0.77255 0.60195 0.79351 5 3.22984 5.79537 1.49011 2.37947 5.12262 2.60068 4.13313 4.62797 2.35833 4.09400 4.85714 1.72011 4.29337 3.25103 3.49539 2.34279 3.47854 4.17953 6.22525 4.77234 5 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.13002 5.14126 2.15355 0.61958 0.77255 0.69072 0.69558 6 2.91552 2.22509 2.82372 2.80816 4.48888 1.53484 4.02268 3.91543 2.82264 3.50739 4.31149 2.92724 4.15144 3.17032 2.79677 2.95438 2.49884 3.55624 5.73483 4.39668 6 - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04539 5.02109 3.27597 0.61958 0.77255 0.95276 0.48723 7 2.15772 5.30349 2.55165 2.59617 4.61749 3.65766 3.84836 4.08177 2.01938 2.99072 4.35286 3.13856 3.23059 2.95586 2.31693 2.47579 2.73137 2.83692 5.75561 4.36463 7 - . 2.68642 4.42249 2.77543 2.73094 3.46296 2.40537 3.72375 3.29378 2.67765 2.69243 4.24714 2.90371 2.73763 3.18170 2.89789 2.37911 2.77488 2.98542 4.58501 3.61527 0.42627 1.06786 5.70825 0.56859 0.83546 0.25752 1.48265 8 2.62892 4.40075 4.97175 4.35784 2.59303 4.19195 4.52254 1.90369 4.14627 1.58991 3.51433 4.34887 4.55504 3.33673 4.15968 3.50273 3.25621 2.03444 3.57108 2.36036 12 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 9 3.13726 4.50683 5.07860 4.46581 2.11410 4.31261 4.64086 1.82274 4.25859 1.39136 2.79312 4.46790 4.66028 2.98657 4.26998 3.62576 3.36770 2.24521 5.11260 3.21994 13 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 10 1.71556 4.60115 4.77256 4.20233 3.76984 1.47835 4.68904 2.09190 4.07174 2.26818 3.75124 4.35104 4.66935 4.28080 4.22325 3.58771 3.40438 2.06770 5.32734 4.13853 14 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 11 3.93436 6.08313 4.49100 3.62586 5.68478 4.50789 1.60456 4.95771 1.56505 4.27748 5.14351 3.98666 4.82116 2.15020 1.23635 3.89261 4.04690 4.62547 6.22697 5.12575 15 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 12 3.37002 5.38260 3.78575 3.74342 5.55943 3.93405 5.14239 5.10643 4.12788 4.75794 5.61235 0.44706 4.70599 4.39905 4.47746 3.49593 2.02447 4.47401 6.83672 5.53999 16 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 13 3.07303 5.06161 3.61124 1.41674 3.16281 3.94482 4.10370 3.64568 3.02771 3.28409 4.15089 3.53370 4.32959 3.36713 2.79060 2.72465 3.30369 3.37538 2.73142 2.02463 17 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 14 4.99900 6.81032 0.09270 4.06800 6.50724 4.79566 5.78312 6.51336 5.15008 5.86756 6.99853 4.64352 5.50432 5.11744 5.68527 4.91914 5.38634 6.05215 7.29223 6.36701 18 - E 2.68644 4.42251 2.77504 2.73110 3.46126 2.40511 3.72520 3.29380 2.67767 2.69348 4.24716 2.90268 2.73727 3.18172 2.89827 2.37913 2.77545 2.98544 4.58503 3.61529 0.30588 1.34374 5.93130 0.68555 0.70080 0.48576 0.95510 15 2.13806 4.46024 4.61444 4.02163 2.48241 2.83812 4.44672 2.90307 3.87932 2.01050 3.57659 2.37676 4.50792 4.07615 4.01451 3.43391 3.24977 2.40394 3.30358 2.16747 21 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 16 2.72683 5.29824 2.35632 2.74601 3.19024 3.07962 2.88076 4.01424 2.39858 2.42879 2.71758 3.27927 3.33258 3.09899 2.75051 2.48536 2.85696 3.65119 5.77465 4.40971 22 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 17 3.01172 4.94540 4.18395 3.71950 4.74895 2.81539 4.74986 3.02830 3.70456 3.82667 4.66391 3.97833 0.96017 4.00514 4.06499 1.90309 2.27492 3.72498 6.11179 4.87920 23 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 18 2.25297 5.45915 2.42335 1.70992 3.63244 3.17022 3.93277 4.27627 2.27189 3.22343 4.50198 2.75278 4.13810 3.03178 2.87624 2.61599 3.19923 2.93613 5.89676 4.49078 24 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 19 2.99795 4.67987 3.94111 3.37191 3.15803 3.99413 3.14236 2.30920 2.83081 2.36185 3.78508 3.75892 3.24842 2.46374 3.65599 2.90826 1.92161 2.19906 5.26683 4.03966 25 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 20 2.32977 5.04677 2.74498 2.55139 4.24968 3.84627 4.06111 3.64621 2.44607 1.86851 4.12835 3.41716 4.23434 3.24600 3.34913 2.63478 3.21404 2.56070 5.57530 2.26649 26 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 21 3.02876 5.54762 2.13260 2.03660 4.88878 2.77741 3.97930 4.37766 2.73182 3.85133 4.59185 2.27573 4.17682 2.32187 3.23110 1.89961 3.26300 3.93666 5.98007 3.33424 27 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 22 2.60330 5.44444 2.52097 2.67963 4.77325 2.59480 2.16915 4.24776 2.68521 3.74313 2.70298 2.09376 4.14588 3.04489 2.81120 2.53861 3.20574 3.82656 5.88785 4.48682 28 - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 23 3.01422 2.92416 4.51915 3.92976 2.76909 4.12235 4.42670 2.92647 3.79823 1.71462 3.59537 4.11989 4.49168 4.01474 1.61746 2.86788 2.71367 2.73303 5.08927 2.91680 29 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 24 2.65211 4.42837 4.75259 4.15165 1.99646 4.15764 3.42261 2.38124 3.98335 2.42484 2.40672 4.24224 4.52365 4.15648 3.04547 3.45849 2.40236 2.67758 5.04499 2.01116 30 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 25 3.01593 3.00904 4.85533 3.27908 2.09102 4.17126 4.49809 2.46717 4.05986 1.53591 2.98184 4.29189 4.53615 2.95448 3.37816 3.47702 3.24808 2.28083 5.03036 3.01680 31 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 26 2.65248 4.40758 4.88735 4.27849 3.50081 4.17728 3.27587 2.27486 4.08392 1.59157 2.93994 4.30810 4.54174 4.23298 4.12559 2.68915 3.25028 1.50033 5.02838 3.09170 32 - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 27 2.97855 5.11595 2.96417 2.86154 3.24044 3.82465 3.10515 3.74383 2.26745 3.36652 4.19181 3.37291 4.21350 2.81513 3.30740 2.53320 2.07558 1.84773 5.63085 3.21811 33 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 28 1.80875 3.76248 2.54412 2.44892 4.65815 3.07609 2.97373 3.05718 2.52005 3.06091 4.41361 3.25287 3.17002 2.48387 3.19681 2.95763 3.20166 3.15902 5.82224 4.44167 34 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 29 2.97145 3.89877 3.28434 2.38824 4.62189 3.77021 2.54010 4.06961 2.72608 3.61432 4.38974 2.48984 2.48063 3.08305 2.37749 2.25750 2.75392 2.86509 3.76407 4.42819 35 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.28751 5.20896 1.40893 0.61958 0.77255 0.48576 0.95510 30 2.87411 5.15992 3.18653 2.05596 4.42566 3.67297 3.88104 2.17504 2.66013 3.43112 4.22692 2.89275 2.29006 2.46190 3.13111 2.88417 2.39383 3.50697 5.64625 4.29073 36 - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.26489 4.93222 1.48944 0.61958 0.77255 0.84437 0.56182 31 3.19771 5.55126 1.07903 2.10543 4.79860 3.67010 4.11257 2.01709 3.05911 3.78918 4.66010 3.15495 4.22272 3.27877 3.59883 3.15222 3.46381 3.77088 6.06365 4.64024 37 - . 2.68685 4.42321 2.77442 2.73021 3.46450 2.40453 3.72456 3.29450 2.67604 2.69451 4.24786 2.90385 2.73737 3.18166 2.89897 2.37857 2.77616 2.98423 4.58573 3.61482 0.70871 0.68603 5.48577 1.72829 0.19551 0.18761 1.76575 32 2.51819 5.39771 3.25222 2.06369 4.70982 2.39798 3.08852 2.68511 2.47721 3.68915 4.44801 3.23953 2.68888 3.05775 3.18516 2.05790 2.91596 3.77069 5.85153 4.46173 50 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 33 2.48439 5.27095 3.35166 2.80108 4.54795 1.29237 3.01811 3.98018 2.77863 3.55438 4.35082 2.85336 4.20184 3.14650 2.64651 2.70815 3.23248 3.63025 3.57257 4.41632 51 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 34 4.85273 5.90644 5.92720 5.75659 1.00450 5.51469 2.19488 4.49677 5.53661 1.68261 5.05214 5.13663 5.78366 5.27448 5.38284 4.89719 5.05510 4.41362 4.41235 1.43592 52 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 35 1.47723 5.12566 3.41451 2.51204 4.35100 3.82212 4.03140 3.16514 2.54187 3.37914 3.09573 3.36891 3.07103 3.19408 3.30355 2.50231 2.20764 3.45049 5.64045 4.31775 53 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 36 2.65658 4.73772 3.84079 3.27445 2.07128 3.96635 3.00319 3.24140 3.23192 2.95093 3.84025 3.68911 4.34672 2.90493 3.59411 1.93974 2.04648 2.64451 5.31506 3.08553 54 - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 37 2.35572 4.41324 4.95114 4.33973 2.60927 4.19933 4.53049 1.67665 4.13539 1.43136 3.52300 4.34653 4.56195 4.27443 4.15988 2.69497 3.26513 2.43305 5.03503 3.01287 55 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 38 2.63523 2.67678 2.88558 2.91862 4.26176 1.74299 4.06439 3.65906 2.44518 3.30057 4.13860 3.41838 4.23454 3.24780 3.35109 3.05711 2.12545 2.92259 5.58493 3.41027 56 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 39 3.01452 4.50650 4.42105 3.83661 2.50884 4.10690 4.40091 2.95713 3.05469 2.33021 3.11485 3.19737 2.66033 3.95324 3.92190 3.38948 3.24649 2.41374 5.10659 1.43764 57 - - 2.68595 4.42243 2.77492 2.73091 3.46372 2.40531 3.72513 3.29283 2.67759 2.69373 4.24708 2.90365 2.73758 3.18165 2.89819 2.37905 2.77485 2.98537 4.58495 3.61416 0.13812 2.06866 5.93130 1.01882 0.44788 0.48576 0.95510 40 1.59983 4.96806 3.62446 3.07129 3.18191 3.85566 4.17376 3.62658 3.05351 3.28903 4.13944 2.82935 2.15665 3.38581 3.47863 2.15690 2.38677 3.02036 5.59336 4.31045 61 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 41 2.59047 5.29456 3.33733 2.79401 4.63244 1.41498 4.02478 4.07498 2.79651 3.63284 3.60576 2.78713 4.19407 2.33869 3.27117 2.58804 2.34675 3.69788 5.83012 4.46723 62 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 42 2.62816 5.01721 3.50522 2.94474 4.21335 3.85737 2.53347 2.82712 2.92509 3.25610 2.33620 3.43912 4.24424 2.26562 2.36055 2.18571 3.21592 2.81428 5.55076 4.25385 63 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 43 3.01630 4.43237 4.73874 3.06923 3.52860 3.16435 4.47751 1.68361 3.97371 1.68981 2.94180 4.23655 2.78457 4.14954 4.06666 3.45749 3.24843 2.16005 5.05061 2.84808 64 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.20495 5.20896 1.71566 0.61958 0.77255 0.48576 0.95510 44 2.48315 4.35391 4.54706 3.95255 2.26883 4.04534 4.35958 2.43012 3.80444 2.29819 3.46704 4.09094 1.77340 3.99651 3.92935 3.34111 2.22114 2.60087 3.41895 3.77939 65 - - 2.68622 4.42230 2.77524 2.73128 3.46358 2.40493 3.72499 3.29358 2.67745 2.69323 4.24694 2.90351 2.73744 3.18151 2.89805 2.37891 2.77524 2.98523 4.58481 3.61508 0.12884 2.13996 5.73627 0.19460 1.73251 0.27199 1.43490 45 3.87278 5.80322 4.08274 4.09035 5.93794 0.23214 5.48220 5.68573 4.43205 5.20029 6.11645 4.45274 5.05716 2.96290 4.71869 3.98886 4.36874 5.03208 7.01911 5.90059 67 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 46 3.00354 3.42559 4.12167 3.54706 3.71740 4.04021 2.90790 2.57892 2.72902 2.12185 3.04333 3.05138 4.41504 3.74565 2.00293 3.30322 3.23535 2.86181 3.46770 2.46141 68 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 47 2.58348 5.01207 2.46269 2.60125 4.20733 3.85723 4.07452 3.10374 2.51530 2.94020 3.18923 3.44016 4.24417 3.26968 3.36933 3.07135 1.66546 2.17858 5.54738 4.25070 69 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.12991 5.20896 2.15106 0.61958 0.77255 0.48576 0.95510 48 2.50135 5.14504 1.84043 2.31830 2.52095 2.49606 3.98007 3.79915 2.79058 3.40450 2.50787 3.29153 4.16022 3.13308 3.25683 2.97951 3.17997 3.47700 5.65103 4.31424 70 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00921 5.08825 5.81060 0.61958 0.77255 0.32268 1.28809 49 2.17400 5.06197 4.25814 4.08946 5.59600 0.64323 5.27860 5.09272 4.33621 4.72323 5.48611 2.65117 4.56638 4.53719 4.66200 1.99122 3.61258 4.31628 6.88153 5.68892 71 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 50 2.07859 4.40451 4.93321 4.32184 2.37440 4.18625 3.09400 1.61464 4.11840 2.58841 2.33920 4.33102 4.54997 4.25919 4.14513 3.49544 3.25433 2.09278 5.02370 3.01066 72 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 51 3.45923 5.47528 3.73258 3.73355 5.61982 3.97935 5.18634 5.22922 4.19289 4.87234 5.75029 0.31566 4.75995 4.45395 4.54196 3.57568 2.91572 4.58574 6.89611 5.57928 73 - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 52 2.26507 5.48924 2.83136 1.71295 4.83330 3.74664 2.53437 4.31901 2.67469 3.79386 4.53075 3.21401 4.14334 2.43052 2.48267 2.08617 3.21091 3.87946 5.92192 4.51072 74 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 53 1.95464 5.47970 2.37150 2.24181 4.81910 3.74829 2.19413 4.30192 2.04035 3.78248 4.52240 3.21729 4.14528 3.03973 3.17281 2.42638 3.21163 3.86743 5.91521 3.31122 75 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 54 4.88869 6.36468 5.73976 5.80553 6.65173 0.05038 6.65294 6.70622 6.09695 6.08516 7.17885 5.91268 5.74376 6.33479 6.05454 5.11535 5.43193 6.03388 7.28051 6.83960 76 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 55 4.39624 5.57998 6.38188 5.80102 2.47562 5.82125 6.08791 2.36229 5.67263 0.46225 3.49192 5.99808 5.79519 5.46602 5.57468 5.22693 4.59382 2.36380 6.00988 5.06023 77 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 56 1.05731 4.67011 4.81512 4.28814 3.98569 3.03176 4.82863 2.45710 4.16938 2.99918 3.96216 4.37671 4.65766 4.38317 4.33275 3.50634 3.02699 1.45460 5.53025 4.34289 78 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 57 2.62706 3.31506 4.88759 4.27877 2.06774 4.17805 4.50674 2.55020 3.10981 2.40407 1.85422 4.30870 4.54242 3.32705 4.12617 3.48525 3.25097 1.74743 5.02929 3.85116 79 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 58 2.75406 4.86470 3.73068 3.17470 4.08845 2.22931 4.21227 3.46324 3.14742 3.15113 2.55044 2.78424 4.31718 3.46870 3.54641 2.01234 1.93588 2.33627 5.48611 4.22616 80 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 59 2.53183 4.41221 4.86946 4.26206 2.69849 4.17697 4.50455 1.60610 4.07181 2.13828 3.53007 3.21127 4.54156 4.22453 4.12049 3.48337 2.29930 2.38554 5.03309 2.14918 81 - E 2.68559 4.41971 2.77553 2.73113 3.46387 2.40469 3.72528 3.29387 2.67774 2.69388 4.24723 2.90380 2.73719 3.18096 2.89834 2.37883 2.77553 2.98483 4.58510 3.61536 0.14141 2.04633 5.93130 1.52863 0.24441 0.48576 0.95510 60 2.58286 5.50226 3.23624 2.78004 4.85149 3.81731 3.31376 4.31567 2.81774 3.83040 4.60168 1.10043 4.25081 2.27967 3.28716 3.07414 2.49472 3.90963 5.98824 4.60137 90 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 61 2.47740 4.57755 3.19118 3.59912 2.08491 4.05216 4.33216 2.48251 3.52095 1.93801 3.68813 2.79147 4.42622 3.78473 3.79272 2.72209 2.24168 2.83832 5.17785 3.08759 91 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 62 2.45147 3.22101 4.87026 4.26284 3.50606 3.24928 4.50430 2.37819 4.07223 1.64246 2.86925 4.30063 4.54034 4.22465 4.12027 2.09505 2.90981 1.88439 5.03281 3.85409 92 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 63 2.97945 5.18158 3.37885 2.82102 4.42007 2.58353 2.19090 3.83812 2.81034 2.82987 4.25278 2.99763 4.19975 3.16279 2.58109 1.70629 3.21076 2.93234 5.68309 3.37656 93 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 64 2.14978 4.58154 4.16492 3.58925 3.69769 3.21980 4.32900 2.68832 3.51167 1.72279 2.47457 3.90767 2.73729 3.77730 2.52490 2.76432 3.23584 2.84277 5.18149 3.28197 94 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 65 3.03206 5.51731 3.29414 2.11128 4.87210 3.79787 3.34818 3.58371 1.79802 3.81450 4.55995 3.26715 4.18726 2.13549 1.79528 2.99569 2.55564 3.91417 5.93310 4.54427 95 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 66 2.55748 5.45183 3.22774 2.05818 4.78565 2.91895 2.63128 4.26369 1.97982 2.94454 4.49550 3.21826 4.13959 2.52962 3.16423 2.34579 2.64781 3.16717 5.89128 4.48731 96 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 67 2.66248 5.30559 3.30146 2.14079 4.58390 3.77791 3.97316 4.02498 2.45974 1.92837 4.36458 3.27807 2.46485 2.72665 2.50466 2.72814 3.20489 3.00078 5.78020 3.54247 97 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.45530 5.20896 1.02089 0.61958 0.77255 0.48576 0.95510 68 2.81185 4.86737 3.32280 2.76156 4.08875 3.66843 3.88838 3.47981 2.70121 3.12299 2.79247 2.65724 4.06241 3.07351 1.84354 2.07571 3.04636 2.51112 5.40549 4.10751 98 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01272 4.76638 5.48873 0.61958 0.77255 0.18821 1.76280 69 2.27813 3.50124 3.08165 2.90722 4.26175 2.43414 3.31432 3.65996 2.89471 2.78716 2.64816 2.90870 3.07224 2.87158 3.34110 2.55474 3.21176 2.44456 5.58256 4.27576 99 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 70 2.43138 5.47314 2.27502 2.23762 4.81598 2.49176 3.92955 3.50330 2.10448 3.77747 4.51439 2.75465 4.13566 3.02661 2.77386 2.46516 2.64326 3.86258 5.90715 3.45319 100 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 71 3.33372 5.40020 3.75704 3.56470 5.53646 0.59238 4.82412 5.00746 2.01741 4.55070 5.36700 3.93286 4.62444 4.01290 3.82445 2.55130 3.76965 4.41236 6.65649 5.40190 101 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 72 2.54996 2.58732 5.02603 4.41555 1.97066 4.24909 4.58973 1.97191 4.20677 2.03531 3.55499 4.40820 4.60931 4.34207 4.22171 3.56252 2.22189 1.98021 5.08336 3.90665 102 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 73 2.97745 5.29804 3.31030 2.75500 4.57830 2.57059 3.98125 3.45086 2.74908 3.57758 4.36287 2.84010 1.64970 2.56104 2.70976 2.42866 3.20973 2.74659 5.77908 4.41588 103 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 74 2.39439 2.28715 3.87888 3.31053 3.89882 3.97256 3.12774 2.12145 3.24019 2.97096 3.86106 3.71561 4.36156 3.56216 1.82009 2.30581 3.24397 3.03074 5.33619 4.10101 104 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 75 2.22081 4.62177 4.06530 3.49275 2.82534 2.65654 2.17065 2.69535 3.42738 2.82585 2.73307 2.95290 4.40232 2.99348 3.73041 3.28538 3.23357 2.88640 3.72880 2.64445 105 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 76 2.47168 4.45385 5.02611 4.41510 1.86388 4.25970 4.59589 2.23177 4.20840 1.95065 2.39861 4.41462 4.61679 4.34097 4.22534 3.57233 2.11779 2.06681 5.08675 3.91403 106 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 77 2.32674 4.75752 5.43860 4.85638 2.35463 4.72329 5.11306 1.39338 4.67799 1.65634 3.74517 4.88388 5.03717 4.80823 4.70653 4.05865 3.67882 1.56233 5.54528 4.38142 107 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 78 2.65990 4.79108 3.76569 3.20104 3.94324 2.80877 4.18892 2.01250 3.16098 2.49501 3.89297 3.63525 4.32653 2.86975 2.92067 2.87827 1.55843 3.07364 5.36507 4.11692 108 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 79 5.15141 6.56614 5.75064 5.19593 6.31131 5.15153 5.65024 6.13666 3.91117 5.40398 6.47475 5.42408 5.69240 4.92264 0.09008 5.26055 5.40033 5.81368 6.92436 6.14361 109 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 80 1.82355 4.42027 4.87423 4.26691 3.50687 4.18478 3.24748 2.38714 4.07709 1.38894 2.70415 4.30777 4.54829 4.22938 4.12642 3.49118 3.25971 2.33603 5.03899 2.67596 110 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 81 2.62628 4.85948 5.55126 4.97058 2.91037 4.85083 5.23784 1.75841 4.79766 1.05463 3.70828 5.01202 5.13924 4.90324 4.81947 4.19129 3.78982 1.57281 5.62592 4.48541 111 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 82 3.55620 5.10171 4.90660 4.32138 3.98771 4.51355 4.87970 3.26099 3.67116 0.51542 3.87539 4.52647 4.92743 4.26373 2.78148 3.89922 2.84383 3.23569 5.69616 4.55070 112 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 83 2.16060 5.74384 1.91054 1.23789 5.09277 2.98221 4.15448 4.58850 2.97518 4.06824 4.83143 3.30320 4.31226 3.27211 3.49763 3.16418 2.32487 4.14632 6.20727 4.76855 113 - H 2.68639 4.42246 2.77540 2.73144 3.46375 2.40533 3.72279 3.29375 2.67679 2.69376 4.24710 2.90293 2.73760 3.18167 2.89821 2.37907 2.77453 2.98539 4.58498 3.61524 0.54273 0.87662 5.93130 0.05763 2.88232 0.48576 0.95510 84 1.44242 1.27191 4.61686 4.11374 4.14519 3.90837 4.77445 3.50375 4.01576 3.24397 4.14263 4.20616 4.51245 4.24999 4.22857 2.49107 2.55381 3.22522 5.62444 2.97428 115 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 85 2.28363 5.47301 3.21961 2.11863 4.81570 3.00032 3.23013 4.29964 2.18053 3.77716 4.51454 3.21187 3.25154 3.02780 2.23922 2.18619 2.35669 3.86242 5.90712 4.49806 116 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 86 3.12644 5.60819 2.64899 2.73456 4.96640 3.80326 4.08594 4.45115 2.87327 3.94136 4.69944 1.75254 4.25572 2.74041 3.37825 1.53541 1.94617 4.01755 6.08469 4.66621 117 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 87 3.14671 4.51526 5.05456 4.45245 2.73851 4.33781 4.68364 2.34739 4.26060 1.88268 3.60451 4.47843 3.05186 4.40582 4.29798 3.65242 2.51868 1.08688 5.18463 4.00870 118 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 88 3.01409 5.52486 1.98002 1.51327 4.86492 3.75948 3.96846 4.35129 2.71744 3.82826 4.56918 2.75481 4.16777 2.52810 3.21459 2.29772 2.75835 2.96563 5.95916 4.54452 119 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 89 2.68904 5.80946 1.57313 1.49275 5.13791 3.83969 4.16179 4.64011 2.98688 4.10933 4.87186 3.29741 4.32446 1.77618 3.51379 3.18520 2.92224 4.19439 6.24210 4.79375 120 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 90 0.51506 4.88366 5.08103 4.66037 2.91671 4.15500 5.16357 3.21304 4.54570 3.13994 4.25078 4.60208 4.79309 4.73914 4.68369 3.58244 3.64929 2.38975 5.82120 4.54305 121 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 91 2.53273 4.44247 4.68940 4.09206 2.76404 4.15091 4.46783 1.75860 2.61874 2.37389 3.55880 4.21191 4.51749 2.97087 4.04572 3.44856 3.24853 1.61840 5.05977 2.87906 122 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 92 2.43171 5.48034 2.58047 1.98171 4.82599 3.74174 3.41008 4.31223 2.07981 2.91212 4.52092 2.86576 4.13539 2.60166 2.08680 2.53281 3.19977 3.87131 5.91253 4.50142 123 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 93 2.04303 4.41749 4.85807 4.25152 2.69021 4.17879 4.50586 1.86149 3.34844 1.84830 3.02150 4.29779 4.54311 4.21955 2.78251 3.48460 3.25495 1.91304 5.03895 3.86014 124 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 94 2.27412 3.19611 5.19633 4.59000 2.34316 4.43910 4.78003 1.94373 4.38868 1.04437 3.55400 4.59822 4.77629 4.50354 4.40081 3.75806 3.47524 2.66325 5.23374 4.07487 125 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 95 2.97132 3.72400 2.71686 2.28918 4.82190 3.74473 3.93114 4.30636 1.82252 3.78205 4.51888 2.47123 4.13822 2.05298 2.21324 2.93421 3.20227 2.96960 5.91039 4.50122 126 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 96 2.99858 5.50440 2.11566 1.34758 4.84595 3.75621 3.95406 3.28188 2.15562 3.80738 4.54750 3.22386 4.15775 3.05323 2.78124 2.39599 3.23069 3.89343 5.93745 4.52683 127 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 97 2.49972 4.71239 3.88379 2.77463 3.84834 3.97917 2.07420 1.94229 3.26870 2.09373 3.81591 3.71965 4.35844 2.78553 3.61957 2.81261 3.22932 2.45086 5.29515 4.06196 128 - H 2.68549 4.42251 2.77545 2.73149 3.46379 2.40396 3.72520 3.29380 2.67766 2.69380 4.24715 2.90372 2.73765 3.18172 2.89826 2.37912 2.77545 2.98417 4.58503 3.61529 0.14474 2.02418 5.93130 1.27654 0.32712 0.48576 0.95510 98 2.07116 5.15772 2.78774 3.12016 3.09695 2.76876 4.34726 4.04453 3.23134 3.67797 4.50909 3.58564 1.04100 3.53664 3.68049 3.16628 3.39587 3.68674 5.93657 4.62388 133 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 99 2.55590 5.28903 2.33310 2.75748 4.56198 2.92220 2.20004 2.63371 2.75335 3.56334 4.35134 3.28909 4.17636 3.10990 1.86527 2.98292 3.20925 3.06540 5.76915 4.40803 134 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 100 1.49434 2.72537 3.66732 3.10514 4.09492 2.57429 4.15940 3.47234 3.05906 3.15158 2.56573 3.56324 4.30097 2.77569 2.43453 3.13834 3.23916 3.21347 5.47837 4.21165 135 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 101 1.52402 2.57816 3.90068 3.33667 3.88291 2.80744 3.50501 3.24614 3.29011 2.59773 3.85035 3.73320 4.36317 3.59138 3.64156 1.88182 3.23943 3.01678 5.32765 3.44689 136 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 102 2.05004 3.65387 3.52753 2.98406 4.70547 1.66673 4.18532 4.14473 2.97712 3.72244 4.50996 2.65783 4.25511 3.32585 2.74647 1.74573 2.90346 3.73864 5.92936 4.59100 137 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 103 3.00944 4.57306 4.20442 3.62758 1.88769 4.06164 4.34065 1.55589 3.53966 2.77292 3.68405 3.93349 3.18063 2.68348 3.03237 2.65452 3.24129 2.83334 5.16910 3.27183 138 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 104 1.76392 5.22609 3.41649 2.89684 4.59770 3.79980 2.45411 4.02944 2.90796 3.61693 4.41759 1.58838 4.24316 3.25694 3.37062 2.24150 3.27310 2.88642 5.83739 4.49476 139 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 105 2.57327 4.41160 4.94910 4.33780 1.88473 4.19548 3.42722 2.48928 4.13257 2.00293 2.73099 4.34205 4.55832 4.27030 4.15578 3.50518 3.26310 2.36556 5.02063 1.76634 140 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 106 3.02924 4.47596 4.61014 4.01925 3.57830 4.15055 2.61661 1.57080 3.87671 1.94482 3.59137 4.17915 4.51980 4.08122 4.01913 2.96889 1.74787 2.48003 5.09775 3.91012 141 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09033 5.20896 2.51450 0.61958 0.77255 0.48576 0.95510 107 2.64423 4.62159 5.25950 4.65839 1.94446 4.50706 4.85895 1.78360 4.46168 1.71868 2.63456 4.66937 4.83088 4.57276 4.47189 3.83119 3.51376 1.60718 5.29473 4.14199 142 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00885 5.12748 5.84982 0.61958 0.77255 0.36027 1.19563 108 1.90889 4.49177 4.90878 4.30814 3.56993 2.77566 4.59640 2.45819 4.13030 1.16529 2.86849 4.37230 4.62006 4.28882 4.19594 3.56850 3.33177 2.22002 5.12970 3.95442 143 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 109 2.15765 5.73167 0.94870 2.87216 5.23110 2.14512 4.33360 4.72359 3.19720 4.22570 5.01102 3.42092 4.41725 3.47050 2.69577 3.28196 3.61152 4.26310 6.37652 4.94844 144 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 110 1.78176 5.48119 2.34933 2.66159 4.82645 3.74254 3.26987 4.31248 2.19072 3.78640 4.52195 2.64856 3.04277 2.38700 2.59243 2.61433 3.20136 3.87196 5.91354 4.50255 145 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 111 2.02765 3.75574 3.28229 2.34487 3.48772 3.26072 3.11446 4.07483 2.72452 2.83183 4.39263 2.57229 3.09947 3.08141 2.36937 2.27174 3.20236 3.69725 5.80439 4.42977 146 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07903 5.20896 2.65186 0.61958 0.77255 0.48576 0.95510 112 2.06824 5.42351 3.20249 2.46800 4.75745 1.86846 2.96126 4.23370 2.34510 3.31686 4.46791 2.73715 4.11436 3.00859 2.34740 2.70970 3.17547 3.80833 5.86196 4.46057 147 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13868 5.86103 0.61958 0.77255 0.37302 1.16685 113 2.99018 5.50584 2.42447 2.01783 4.85064 2.99088 3.26717 4.33820 1.93068 3.81086 4.54747 1.81988 4.15012 2.55778 3.18105 2.94994 3.22235 3.89651 5.93758 3.68112 148 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 114 2.13753 4.76847 3.78943 3.22383 3.91396 3.95084 3.58505 2.24065 2.31659 2.28711 2.94251 3.65193 2.93588 3.49701 2.79327 2.87275 2.91170 3.04701 5.34284 2.97234 149 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 115 1.14636 3.07403 4.81774 4.21321 2.76056 4.16867 4.49324 2.85227 4.03284 2.21600 2.81724 4.27553 4.53384 4.19458 3.27177 3.47267 3.25020 2.45370 5.03837 3.24408 150 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06047 5.20896 2.93344 0.61958 0.77255 0.48576 0.95510 116 2.98661 4.39759 4.73643 4.13479 2.71088 2.94539 4.45251 2.27402 3.96443 2.12828 3.51512 4.21997 4.49678 3.04958 4.04781 2.81910 2.74952 1.63282 5.01574 2.35625 151 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00859 5.15708 5.87942 0.61958 0.77255 0.39642 1.11696 117 2.41533 4.43380 4.74227 4.14246 3.53000 4.15983 3.06909 1.99171 3.97662 1.87812 3.55105 3.02552 4.52586 4.15277 4.06916 3.46023 3.25048 1.44768 5.05237 3.16604 152 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 118 3.01632 5.21311 3.35525 1.29409 3.40451 3.82304 4.05574 3.87258 2.86703 3.48410 4.30077 2.69946 4.23034 3.20971 3.33211 2.18301 3.25344 2.14285 5.72787 4.38881 153 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 119 2.27414 4.47211 4.64250 2.17733 2.75366 3.46453 4.48012 2.07893 3.90796 2.13949 3.58894 4.20034 4.53060 4.10506 4.04206 3.45925 3.26696 1.55869 5.09851 3.91186 154 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 120 2.97662 5.26262 3.32420 1.86317 3.13895 2.66082 3.99019 3.96171 2.76961 3.53585 3.14444 2.84778 4.18083 3.12273 3.24329 1.89700 2.13592 3.61137 5.75091 4.39534 155 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 121 1.98376 5.12453 2.72075 2.85630 3.44257 3.82203 4.03120 3.75722 2.84765 3.37743 3.07599 3.36873 2.09536 2.68668 3.30447 2.08647 3.21018 2.87694 5.63915 4.31652 156 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 122 2.97325 5.39401 3.25918 2.70388 4.70867 2.08326 3.08752 3.47739 2.70159 3.68832 4.44832 2.88701 3.09645 3.06254 2.15645 1.93504 2.52867 3.76940 5.85167 4.46368 157 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 123 2.66584 5.47685 3.22416 2.66875 4.82039 2.76068 2.35480 4.30363 2.20741 3.78057 4.51854 2.91510 2.74364 2.68388 2.35015 1.99343 3.20482 3.86681 5.90975 4.50200 158 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 124 2.30406 5.38091 2.77801 2.70404 4.68655 3.07497 3.27780 2.90848 1.75825 3.19759 4.43218 3.24478 3.09933 3.06254 2.43528 2.95263 2.91520 2.91302 5.83794 4.45219 159 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.16508 5.20896 1.91930 0.61958 0.77255 0.48576 0.95510 125 2.58907 3.73629 2.37081 2.81860 4.21706 3.12702 3.97545 3.61833 2.80730 3.25211 4.08494 3.32390 3.26690 3.15084 2.89171 2.44407 2.30132 2.11617 5.52841 3.12203 160 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00953 5.05341 5.77575 0.61958 0.77255 0.89163 0.52761 126 2.92253 2.20675 3.47301 2.91016 4.11882 3.80076 4.01857 2.26287 2.38722 3.16312 4.01360 2.68577 4.18828 3.22147 2.29214 2.58928 2.53449 3.23169 5.46376 4.17545 161 - E 2.68656 4.42264 2.77506 2.73063 3.46392 2.40515 3.72401 3.29392 2.67733 2.69298 4.24728 2.90327 2.73778 3.18106 2.89839 2.37856 2.77558 2.98557 4.58515 3.61542 0.17131 1.86863 5.77575 1.64789 0.21376 0.29627 1.36097 127 2.97689 2.81570 2.85082 2.83190 4.39013 3.81291 4.01814 2.58237 2.60591 2.81544 4.22999 2.34135 4.20239 2.61394 2.83640 2.08023 3.20822 2.64223 5.66427 4.33377 168 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 128 3.04991 3.24126 4.94370 4.33587 3.07880 4.21971 4.55433 1.56217 4.13893 2.60991 3.02553 4.35770 4.58184 4.28585 2.55009 3.52947 2.30961 1.58894 5.06862 3.89041 169 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 129 2.71704 5.10723 3.45824 2.89585 4.32461 3.20436 4.04883 2.85496 2.17840 2.49372 4.18510 2.89988 4.23319 3.21967 1.60857 3.05662 3.22660 3.42751 5.62256 2.67699 170 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 130 2.97148 5.47214 2.27964 1.55868 4.81262 3.74453 3.93371 4.29565 2.49366 3.14860 4.51416 3.21353 2.68090 2.59810 3.16337 2.57803 2.64860 3.86034 5.90741 3.36606 171 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 131 2.01220 5.10256 3.11317 2.67613 4.32006 2.38308 3.35655 2.69193 2.86087 3.35156 2.66238 3.38047 4.21681 2.69346 2.86359 3.03569 2.87865 2.50302 5.62015 4.30259 172 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 132 2.22353 5.48969 3.20728 2.28832 4.82887 3.75461 3.46542 4.31090 2.38736 3.79297 4.53499 1.90174 2.30692 3.05300 3.18659 2.01650 3.22558 3.87782 5.92706 4.51847 173 - - 2.68649 4.42256 2.77551 2.73154 3.46385 2.40409 3.72526 3.29385 2.67722 2.69339 4.24721 2.90378 2.73720 3.18094 2.89832 2.37918 2.77551 2.98436 4.58508 3.61534 0.81807 1.16429 1.40010 0.68671 0.69963 0.48576 0.95510 133 2.36732 5.44049 2.53214 1.41196 4.78027 2.31796 3.88541 4.26642 2.65211 3.74799 4.49668 3.11568 4.07388 2.99119 2.71781 2.56787 3.17347 3.83123 5.88392 4.46598 176 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01080 4.92935 5.65170 0.61958 0.77255 0.67872 0.70779 134 2.15277 4.71237 3.67450 3.10978 2.46223 3.15766 2.44987 3.23042 3.07484 2.93003 3.81136 3.54672 3.32334 3.38983 2.69839 3.09516 2.60507 2.59919 5.28316 2.73183 177 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00962 5.04496 5.76731 0.61958 0.77255 0.90816 0.51628 135 2.57676 4.35450 4.73094 4.12861 3.44505 4.10326 4.42803 1.81179 3.95335 1.45642 2.97690 2.57408 4.46667 4.11881 4.02734 3.40699 3.18373 2.27256 4.97818 2.93793 178 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00962 5.04496 5.76731 0.61958 0.77255 0.42980 1.05165 136 1.98490 4.37696 4.89886 4.28754 3.46987 3.28138 4.48691 2.08314 4.08522 2.16257 3.05303 4.29951 4.52056 4.22742 4.11399 3.46513 2.81870 1.91500 2.66127 2.50411 179 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00852 5.16537 5.88772 0.61958 0.77255 0.40813 1.09331 137 3.12672 2.22371 3.54737 2.97935 4.59473 3.92115 1.38010 4.01295 2.77051 3.59319 4.41333 3.47434 4.32011 2.29525 2.69808 2.52646 3.35753 3.68425 5.79780 4.48919 180 - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 138 1.94625 4.87173 5.07649 4.72160 4.74148 3.94592 5.37204 3.50303 4.61589 3.69055 4.67089 4.55021 4.68852 4.82864 4.76559 3.40188 0.73883 1.75862 6.28434 5.12410 181 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 139 4.57767 6.31481 4.45393 4.50533 5.98643 4.73699 5.87959 6.17767 5.04901 5.62631 6.69092 0.10433 5.46569 5.30054 5.32452 4.67395 5.05346 5.62914 7.02548 5.95271 182 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 140 3.61764 5.80039 3.44498 3.24157 4.94964 4.10788 0.60034 4.79840 3.13735 4.28663 5.16412 3.72773 4.67114 2.62986 3.44458 2.58142 3.91128 4.40655 6.19166 4.76563 183 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.05211 5.20896 3.09432 0.61958 0.77255 0.48576 0.95510 141 1.97920 3.01491 4.74165 4.14581 1.74987 4.14685 4.45608 2.87068 3.97908 2.35498 3.55090 4.23223 4.51783 4.15096 4.06826 2.34547 3.24732 2.68204 5.01036 2.12045 184 - - 2.68680 4.41897 2.77574 2.73269 3.46500 2.40469 3.72640 3.29500 2.67803 2.69367 4.24041 2.90181 2.73709 3.18018 2.89946 2.37971 2.77665 2.98326 4.58065 3.61015 0.36674 1.65655 2.15232 2.64538 0.07362 0.62397 0.76746 142 2.46863 4.77872 2.09418 3.04221 3.94250 3.84535 4.08174 2.78588 3.01536 2.18533 3.87432 3.49887 4.22905 2.40486 3.41730 3.07500 2.74248 2.00724 5.34691 4.08489 210 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00962 5.04496 5.76731 0.61958 0.77255 0.90816 0.51628 143 2.90114 5.39487 2.64103 2.33526 4.73277 3.67396 2.45069 2.63651 2.60109 3.69677 4.43774 2.28014 4.06888 2.68721 2.21133 2.39375 3.13243 3.78172 5.83133 4.42471 211 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00962 5.04496 5.76731 0.61958 0.77255 0.42980 1.05165 144 2.94904 5.42250 2.75552 1.92241 4.75214 3.72814 2.97689 3.11467 2.65837 2.90238 4.46729 3.20170 2.92625 2.44415 3.14851 1.96601 2.68435 3.80483 5.86450 4.46295 212 - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00852 5.16537 5.88772 0.61958 0.77255 0.62397 0.76746 145 2.94764 5.45125 2.85285 2.46031 4.79337 2.60840 3.90981 3.66107 2.35363 3.34276 4.49270 2.90466 2.72434 2.62268 2.61636 2.17775 2.15460 3.84030 5.88569 4.47654 213 - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00852 5.16537 5.88772 0.61958 0.77255 0.62397 0.76746 146 2.99232 4.40267 4.74493 4.14309 2.83779 4.13705 4.45887 1.67913 3.29839 1.67784 2.57408 4.22712 3.52845 2.97991 4.05443 2.92058 3.22444 2.23899 5.02094 3.83965 214 - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00852 5.16537 5.88772 0.61958 0.77255 0.62397 0.76746 147 2.94783 5.45831 2.65058 1.94337 4.80334 3.72138 3.29851 4.28925 2.35185 2.64920 4.49901 2.87149 3.05989 2.50308 2.46122 2.65918 2.37193 3.84894 5.89097 4.48008 215 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00852 5.16537 5.88772 0.61958 0.77255 0.62397 0.76746 148 2.08482 5.49571 2.41959 2.01544 4.84004 3.73248 3.11871 4.32800 2.08722 3.80048 4.53786 2.11108 4.13582 2.33814 3.17102 2.93768 3.21142 3.88620 5.92728 4.51257 216 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00852 5.16537 5.88772 0.61958 0.77255 0.62397 0.76746 149 2.28532 5.21802 2.81322 2.15173 4.47457 2.99043 3.97111 3.23955 2.10930 2.75272 4.28318 3.28644 4.16199 2.80307 3.22631 2.97064 3.18476 2.81745 2.84701 3.37406 217 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.05595 5.16537 3.02201 0.61958 0.77255 0.62397 0.76746 150 2.52096 5.45509 3.16110 2.04826 4.79847 3.12544 3.90337 4.28423 2.34004 3.75971 4.49763 1.72429 3.32391 2.24865 3.13633 2.44611 3.17757 3.84512 5.88852 4.47666 218 - - 2.68628 4.42271 2.77526 2.73044 3.46400 2.40559 3.72541 3.29400 2.67704 2.69244 4.24736 2.90289 2.73698 3.18193 2.89847 2.37872 2.77566 2.98565 4.58523 3.61549 0.20459 1.70312 5.84070 1.62637 0.21895 0.35062 1.21825 151 2.60162 5.43286 2.68060 2.68052 4.75881 2.92621 3.93919 3.26467 2.41843 2.91062 4.47862 2.63773 4.14318 2.03620 2.21230 2.94059 3.20024 3.81319 5.87707 2.75060 225 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 152 2.97595 5.24845 2.97369 2.77708 4.50768 3.79160 3.99035 2.86610 2.77065 2.40498 4.31291 1.94112 4.18239 2.46454 2.16081 2.99094 2.70022 3.59214 5.73581 3.03974 226 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 153 2.62850 4.54480 4.26909 3.68991 2.45879 4.07266 3.45324 2.17609 2.75745 2.43348 2.82997 3.97299 3.07191 2.60242 3.28639 3.34568 3.23795 2.28013 5.14915 2.79461 227 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 154 2.62931 4.45241 4.68001 4.08553 3.55221 2.32031 4.47450 1.93100 3.93228 1.83374 3.57032 4.21098 4.52137 4.12056 4.04797 3.45023 2.07665 2.69150 5.07298 2.21885 228 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 155 2.98364 5.48120 2.06942 1.90534 4.81975 3.75027 3.94447 4.30190 2.52513 3.78365 4.52456 3.21964 2.33951 3.04380 2.60502 2.24290 3.21548 2.60105 5.91740 4.50893 229 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 156 2.98624 5.48160 2.24376 2.23314 3.68958 3.75118 3.94774 4.30052 2.69042 3.78387 4.52574 3.22102 3.32157 2.01496 3.18374 1.60996 2.74686 3.86832 5.91909 4.51061 230 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 157 2.01820 5.15386 2.88403 3.53593 5.27071 3.78087 4.79911 4.73265 3.71998 4.33722 5.11876 3.87780 4.47618 3.98892 4.14571 0.63416 2.68083 4.14115 6.52317 5.23475 231 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 158 2.98517 4.93760 3.57647 2.70834 4.11590 3.88171 4.10610 2.37370 2.59217 2.70032 3.41929 3.49405 2.66282 2.43222 2.63609 2.71575 2.60637 2.79369 3.31196 3.53508 232 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 159 2.55871 5.44792 3.23272 1.99208 2.61942 3.75065 3.27207 4.25452 1.96514 3.74675 4.49262 2.90038 4.14418 3.04038 2.88895 1.78136 3.20391 3.83110 5.88859 4.48722 233 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 160 3.74427 5.69052 4.65074 4.06821 5.65132 4.31790 4.72635 5.11866 2.95117 4.54044 5.43180 4.29033 4.89449 3.89601 0.38790 2.35641 4.08888 4.64811 6.47244 5.36715 234 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 161 3.01838 4.46932 4.57891 3.98773 2.41241 4.13564 2.64374 2.91279 3.85095 1.54448 2.33661 3.35272 4.50354 2.81480 3.99826 3.42728 3.25039 2.41917 5.07175 2.85276 235 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 162 2.29023 5.46772 3.22210 1.63799 4.80814 3.24661 2.96977 4.29052 2.30798 2.86546 3.59132 2.71884 4.13759 2.37943 2.80193 2.93344 3.20000 3.85588 5.90299 4.49533 236 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 163 2.77661 5.25985 3.43851 2.86738 4.51842 3.85708 2.89233 3.93294 2.26103 2.74812 4.32921 3.38076 4.24303 3.17539 1.39069 3.06803 2.28032 2.95840 5.73991 4.41387 237 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 164 3.01856 4.39951 4.94106 4.32860 2.30120 3.30054 4.51487 2.05817 4.12260 1.96990 2.29526 4.33239 4.54742 3.28167 4.14530 3.49313 2.94858 2.18393 5.02045 2.23198 238 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 165 2.50864 5.47470 2.84088 2.13465 4.81825 2.94119 2.96992 3.30181 2.18164 3.77930 4.51577 3.21001 4.13542 1.89310 2.67920 2.69782 3.19886 3.86452 5.90825 3.36086 239 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 166 2.31390 5.46457 2.75702 2.13927 2.66952 3.74370 3.35655 4.28565 2.30918 3.76735 3.38848 2.48309 4.13709 2.29574 3.16027 2.54026 2.79158 3.85206 5.90077 4.49336 240 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 167 3.01794 4.83065 3.76561 3.19452 3.98265 3.95550 2.98827 2.86452 2.85160 1.28824 3.92845 3.18717 4.33576 2.81651 2.87940 3.19298 3.24751 3.11519 5.39175 2.50818 241 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 168 2.48917 4.74526 3.82628 2.75919 3.88677 3.96210 4.21118 2.34042 3.21906 1.52964 3.18648 2.32310 4.34249 3.10560 3.58462 2.89445 2.72881 3.02109 5.32324 4.08337 242 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 169 2.24585 5.47841 2.30682 2.66223 4.82258 3.74262 2.63013 4.30793 2.20965 3.78330 4.51953 2.48079 2.58800 3.02743 2.77379 2.27192 2.94789 3.86861 5.91163 4.50113 243 - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 170 2.64214 5.48365 2.58330 2.10064 4.82926 2.56514 3.27401 4.31581 2.48960 3.78910 4.52433 3.20951 2.44209 2.03900 2.60060 2.69870 3.20235 3.87461 5.91582 4.50419 244 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 171 2.65348 2.62159 4.27408 3.69473 2.80514 3.32738 3.15820 3.00256 2.26733 2.44014 2.82911 2.89331 4.44612 3.85362 3.84613 3.02518 3.23803 2.56772 3.62886 2.53766 245 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 172 2.60011 5.32814 2.68643 2.02742 3.62401 3.77114 3.96564 3.19068 2.72871 2.94867 4.38475 3.26623 3.17035 2.74667 2.83061 2.51305 2.48995 3.68681 5.79768 2.45544 246 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 173 2.34523 5.47377 2.35940 2.31425 4.81558 2.91688 3.93270 4.29938 2.66957 3.77782 4.51572 2.71726 3.37593 2.52483 3.16214 1.83653 2.79256 2.97426 5.90868 4.49939 247 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 174 1.99466 5.43255 3.23612 2.24686 4.75840 3.74995 3.08724 4.23100 2.52320 3.72959 3.77290 2.38299 2.68631 2.56456 3.17091 2.94038 2.35520 2.92133 5.87690 4.47790 248 - B 2.68670 4.42277 2.77540 2.73136 3.46335 2.40492 3.72547 3.29253 2.67708 2.69332 4.24742 2.90358 2.73761 3.18150 2.89853 2.37939 2.77435 2.98419 4.58529 3.61555 0.93768 0.88840 1.62377 0.91394 0.51239 0.48576 0.95510 175 2.56937 3.50835 2.88123 1.80415 4.65268 3.65569 3.84530 3.31182 2.37138 3.62557 4.37634 2.66376 4.04870 2.67276 3.07807 2.02868 2.85337 3.70845 5.77596 3.57526 252 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01013 4.99267 5.71501 0.61958 0.77255 0.46253 0.99340 176 2.47187 5.42913 2.11006 1.89422 4.76656 3.08703 3.90083 2.97947 2.63874 3.73115 3.44166 2.34752 4.10615 2.70436 2.77254 2.90226 2.91711 3.81567 5.86638 4.45997 253 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13868 5.86103 0.61958 0.77255 0.37302 1.16685 177 1.77965 4.46780 4.55675 3.07219 2.36843 4.12776 4.43648 2.54770 3.83296 2.39756 3.05824 4.14057 3.42880 4.03945 3.98649 2.37953 3.24439 1.82679 5.08182 3.89330 254 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 178 2.46995 4.41125 4.86098 3.10419 2.14786 4.17348 4.50064 1.68878 4.06452 2.12638 2.88133 4.29550 4.53819 4.21824 2.98485 3.47947 3.24955 2.06541 5.03141 3.27855 255 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 179 2.43441 5.49549 2.76520 1.69732 4.84309 3.75287 3.01458 4.32807 1.82052 3.79976 4.53653 3.21990 4.14787 2.55590 2.17718 2.94648 3.21582 3.88771 5.92445 4.51577 256 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 180 3.00118 4.64653 3.11215 3.44131 3.77188 4.01367 4.27952 1.90777 2.87709 1.68409 2.25813 3.80781 4.39053 3.12194 3.69807 2.61058 2.81705 2.91241 5.23823 4.01771 257 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 181 3.30004 4.66419 5.17006 4.57558 2.13966 4.46194 4.68060 2.95216 4.37714 0.83889 3.07672 4.58163 4.79523 4.48173 4.39576 2.84694 3.52869 2.86086 3.05621 3.80266 258 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 182 2.46726 5.46632 3.22391 2.46937 4.80607 2.94097 3.93296 4.28760 1.97847 3.18696 4.50883 2.16623 4.13908 3.03130 2.39246 1.99758 2.80244 3.85420 5.90220 4.49540 259 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 183 3.83258 6.54722 0.53839 2.83654 5.84439 2.93747 4.59556 5.41599 2.54754 4.85364 5.72345 2.58714 4.65212 3.76703 4.33994 3.67449 4.13749 4.93619 6.99465 5.41288 260 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 184 2.98058 2.79355 3.46809 2.44968 4.25995 3.16344 4.05598 2.98587 2.56720 2.46762 4.13537 3.41046 3.24535 2.83955 2.24887 2.74079 2.91359 2.33973 5.58136 4.27496 261 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 185 2.96991 5.38240 2.49527 2.13777 3.53144 3.75970 2.77758 4.14801 2.70335 3.01115 4.43350 2.81859 4.15219 2.65508 3.18868 2.50621 2.36615 2.89327 5.83909 2.74244 262 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 186 2.50918 5.47294 1.98649 2.28893 4.81397 2.38915 3.93312 4.29736 2.48541 3.14942 4.51481 2.14417 4.13858 3.03092 2.88716 2.66292 3.20238 3.86144 5.90791 3.36651 263 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.23548 5.20896 1.58797 0.61958 0.77255 0.48576 0.95510 187 2.27407 5.18489 3.20939 2.02140 3.35895 2.13316 3.87889 3.89445 2.65179 3.45917 4.24687 3.18573 3.33210 3.00657 2.71365 2.40710 3.10484 3.53615 5.66525 3.04103 264 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01023 4.98370 5.70605 0.61958 0.77255 0.39976 1.11012 188 2.98238 4.78995 3.72879 2.01960 3.94976 3.92547 4.17458 2.43219 3.13782 2.68369 3.89284 3.61014 1.81499 3.45550 3.52378 2.45649 3.21610 2.18644 5.37227 4.12042 265 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00859 5.15708 5.87942 0.61958 0.77255 0.64762 0.74084 189 3.01942 3.35235 2.60838 3.63798 2.31261 4.06797 3.00455 3.04505 3.55627 2.08132 3.69039 3.93609 3.33039 3.81218 3.81755 3.33788 3.25116 2.84176 5.08800 1.67907 266 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00859 5.15708 5.87942 0.61958 0.77255 0.64762 0.74084 190 2.95150 3.31143 3.34473 2.78697 3.51785 3.78002 3.98351 3.82608 2.36778 2.92702 4.23510 2.74691 2.43656 2.72792 3.24536 1.83109 2.33563 3.49915 5.66552 4.32747 267 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.28971 5.15708 1.40341 0.61958 0.77255 0.64762 0.74084 191 2.29387 4.44000 4.11810 3.54436 3.58439 3.93268 4.25341 1.86827 3.43874 2.64653 3.57216 3.83685 4.32046 3.71464 2.31371 2.56308 3.12233 1.66620 5.08212 3.87690 268 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01136 4.87874 5.60108 0.61958 0.77255 1.16750 0.37272 192 2.86142 2.43873 4.44337 3.85228 2.57427 2.76923 4.27474 2.74958 3.71118 1.93883 3.42196 4.00622 4.34818 2.37683 3.85003 3.27399 3.09342 2.55853 3.03599 2.97804 269 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01136 4.87874 5.60108 0.61958 0.77255 1.16750 0.37272 193 3.00559 4.97796 3.59959 2.98910 4.18855 3.85364 3.98609 3.56807 2.26319 2.44963 4.06435 3.44432 4.22640 3.18215 1.45502 3.10125 2.15969 3.29984 3.17501 4.21295 270 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01136 4.87874 5.60108 0.61958 0.77255 1.16750 0.37272 194 2.15824 3.64385 2.52330 2.18351 4.62265 3.61042 3.80076 4.09528 2.54239 3.59327 4.34225 3.08586 4.00455 2.51032 1.96978 2.80281 2.48195 3.67676 5.73998 4.34107 271 - - 2.68637 4.42244 2.77415 2.73143 3.46373 2.40532 3.72514 3.29373 2.67760 2.69374 4.24709 2.90308 2.73759 3.18166 2.89820 2.37885 2.77539 2.98469 4.58496 3.61400 0.98256 0.60841 2.50799 0.06100 2.82730 0.21641 1.63684 195 2.63845 5.33407 3.24477 2.48105 4.63183 3.73888 2.48060 4.08551 1.95472 3.61879 4.38762 2.49996 3.34881 3.04592 3.16987 2.93278 2.72805 2.53628 5.79601 2.54307 273 - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00864 5.15146 5.87381 0.61958 0.77255 0.66322 0.72400 196 2.94391 5.45118 2.51298 2.27453 4.79463 2.89728 3.24368 4.27958 2.45649 2.29013 4.49238 2.39665 4.11082 2.75738 2.69019 2.05183 3.17516 3.84097 5.88465 4.47445 274 - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00864 5.15146 5.87381 0.61958 0.77255 0.66322 0.72400 197 2.97080 3.14003 2.79591 3.39062 2.20252 2.51618 4.24169 3.11053 2.36688 2.46575 3.73369 3.76343 4.35557 3.62134 3.65688 3.23179 3.20265 2.54825 5.21540 2.24959 275 - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00864 5.15146 5.87381 0.61958 0.77255 0.38892 1.13255 198 2.97625 5.48850 2.29710 2.28584 4.83359 3.74471 3.93522 4.32004 1.98952 3.79368 4.52958 2.65174 2.24849 3.03203 2.73097 2.30887 2.46570 3.87923 5.92077 4.50896 276 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 199 2.46772 5.53031 2.32994 1.85276 4.87345 2.98164 3.96505 4.36203 2.43124 3.83486 4.57342 2.92119 4.16514 2.54904 3.20967 1.67490 3.24540 3.92029 5.96241 4.54601 277 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 200 2.97458 5.23802 2.91373 2.51841 3.57142 3.79255 3.99222 3.92209 2.17149 3.50450 4.30328 3.30790 3.25655 3.12905 2.33641 2.99199 2.79838 2.85262 1.95756 3.30457 278 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 201 2.72702 5.00763 3.51002 1.94208 2.43436 2.69791 3.27060 3.59493 2.93768 3.24785 4.09421 3.44482 4.24645 3.27577 3.37519 2.64660 2.12419 2.31448 5.54531 4.24984 279 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 202 2.71783 5.49486 2.46045 2.66457 4.83928 2.08700 3.08069 4.32590 2.05049 3.79985 4.53640 2.03653 3.32246 2.64474 3.17291 2.68564 3.21413 3.88529 5.92739 4.51492 280 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 203 3.12891 5.11273 4.07798 3.91286 5.42854 3.80029 5.13568 4.90394 4.12935 4.55011 5.34941 2.19543 4.57489 4.38939 4.46216 2.52441 0.51663 4.24472 6.72740 5.49827 281 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 204 2.91044 5.23638 5.98789 5.46214 4.00430 5.40819 5.90973 0.96475 5.32945 0.99017 3.76978 5.59140 5.60197 5.39077 5.36750 4.80674 4.23573 2.53116 6.10899 5.03989 282 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 205 1.84715 3.04003 4.87419 4.27324 2.34873 4.20294 2.03708 2.88354 4.08654 1.81202 3.56542 4.31230 4.56681 4.23771 4.13992 3.50910 3.28556 2.69771 3.45775 3.05021 283 - E 2.68643 4.41776 2.77545 2.73149 3.46379 2.40507 3.72520 3.29226 2.67766 2.69380 4.24715 2.90372 2.73765 3.18172 2.89775 2.37912 2.77453 2.98544 4.58224 3.61529 0.19380 1.75146 5.93130 1.03836 0.43701 0.48576 0.95510 206 2.55898 2.62131 4.30988 3.73782 3.71458 4.05347 4.41067 2.54603 3.64755 2.80059 3.71382 2.91190 4.45777 3.89727 3.89006 2.08310 1.68407 2.05065 5.20750 4.00640 287 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 207 1.49899 4.47460 4.57896 3.98957 3.05291 2.46138 4.45479 2.40498 3.85533 2.33448 3.59536 4.15744 4.50638 4.06035 4.00578 2.30715 3.25401 2.03958 5.09684 3.90865 288 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 208 2.72758 4.48739 3.42507 3.89206 3.59129 3.44899 4.41900 1.97221 2.98991 1.46851 3.20250 4.09822 4.48497 3.99109 3.95083 2.94797 3.24420 1.86144 5.09994 3.90818 289 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 209 3.06331 4.46003 4.86307 4.26425 1.76951 4.20993 4.49117 2.17070 4.08146 2.63417 2.88947 4.31231 3.17234 4.23582 4.14167 2.84202 3.29543 2.70667 5.00116 1.55799 290 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 210 2.34526 5.48003 1.69553 2.09129 4.82065 3.74692 3.93880 4.30415 2.67744 2.98714 4.52240 3.21560 2.67633 2.49275 2.77860 2.66584 3.20949 3.86838 5.91505 4.50562 291 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 211 3.00560 2.65167 2.60421 3.66507 3.11396 3.06164 3.04887 2.37196 3.57816 2.01775 3.07276 3.95714 2.12848 3.83248 3.82985 3.33861 3.23755 2.81226 5.15684 3.95314 292 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 212 2.05741 5.17298 3.37963 2.63845 2.71563 3.80882 2.69088 2.94265 2.34801 2.97040 4.24400 2.63339 4.19852 3.16391 2.52681 2.53532 3.20769 3.08357 5.67645 4.34228 293 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 213 2.01845 5.47507 2.23990 2.33133 3.45221 3.24569 3.92983 4.30322 2.12478 3.77962 4.51624 2.48181 2.80666 3.02677 2.85401 2.73276 2.94931 3.86479 5.90878 4.49876 294 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 214 2.66159 5.18373 3.37540 2.81717 4.42378 2.78868 4.01066 3.84137 2.50688 2.88187 3.55235 3.33726 3.17139 3.15948 1.60832 2.71292 2.73721 3.51668 5.68504 2.70379 295 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 215 2.97705 3.53872 3.30675 2.53316 4.58401 3.18565 3.28351 3.51205 1.72348 3.58137 4.36512 3.28195 4.17244 3.09968 2.44016 2.97800 1.78296 3.06443 5.78012 4.41557 296 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 216 1.65784 4.40928 4.94027 4.32904 3.50049 4.19324 4.52509 1.96688 4.12584 1.86725 2.70290 4.33864 4.55649 4.26664 4.15259 2.84630 3.25994 2.03785 3.16946 3.85626 297 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 217 2.96925 5.41787 2.82952 2.44747 3.45496 3.75288 3.94264 4.20641 1.88085 3.71234 4.46523 3.23071 4.14572 2.60819 2.72610 2.50205 1.99338 3.79496 3.16755 3.13027 298 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 218 3.01626 4.40936 4.86502 2.58145 2.82268 4.17272 4.50005 1.96882 4.06705 1.50281 3.14291 4.29657 4.53748 4.21976 3.20840 3.47891 2.84260 2.24618 3.57230 3.10881 299 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 219 2.30894 2.43472 4.11932 3.54512 3.71783 4.03904 4.31464 2.67552 3.47334 2.80183 3.70873 3.87828 2.64259 3.12018 2.85611 2.95841 2.50249 2.21249 5.19690 2.46185 300 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 220 2.47625 4.44641 4.65464 3.18995 2.37228 4.14279 4.45762 2.88706 3.90833 1.53484 3.56292 4.19228 4.51000 4.09871 3.11756 2.71769 3.24535 1.76638 3.52268 3.87704 301 - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 221 2.36426 5.52114 2.30974 2.30291 4.84483 1.38722 3.26833 4.32188 2.76687 3.81832 4.57245 3.24921 3.30354 3.11012 3.26442 3.00866 3.28038 3.90137 5.96584 3.49121 302 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 222 2.72859 5.47844 2.84093 2.30484 4.82209 2.86391 3.93146 4.30724 2.66728 3.78310 3.39099 1.92218 4.13735 2.04633 2.61944 2.21977 3.20187 3.86835 5.91186 4.50145 303 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 223 2.97912 5.39884 2.95177 2.70473 2.77549 3.21732 3.95706 4.17039 2.44185 3.68945 4.45076 2.56512 1.56282 3.06692 2.54736 2.95924 2.74337 3.77109 5.85413 4.46619 304 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 224 2.24002 5.44110 2.88149 2.67634 4.77058 3.00182 3.93690 3.27083 1.95371 2.89130 4.48595 2.89763 3.37305 3.03847 2.36132 2.14847 2.88394 3.82335 5.88329 4.48201 305 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20896 5.93130 0.61958 0.77255 0.48576 0.95510 225 2.06779 5.46894 2.63820 2.31508 4.81010 3.16964 3.46268 4.29331 2.37429 2.90683 4.51063 2.44017 3.18043 2.67468 2.68022 2.93169 3.19876 3.85748 3.78879 3.19112 306 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00550 5.20630 * 0.61958 0.77255 0.00000 * // HMMER3/d [3.0 | March 2010] NAME SH2 ACC PF00017.17 DESC SH2 domain LENG 77 ALPH amino RF no CS yes MAP yes DATE Tue Sep 22 10:11:39 2009 NSEQ 58 EFFN 3.862183 CKSUM 2920215497 GA 20.90 20.90 TC 20.90 20.90 NC 20.80 20.80 STATS LOCAL MSV -9.2753 0.71862 STATS LOCAL VITERBI -9.6858 0.71862 STATS LOCAL FORWARD -4.1731 0.71862 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.77344 4.59312 3.04475 2.64641 3.07138 2.86397 3.46734 2.87451 2.66045 2.39086 3.82560 3.11120 3.71728 3.04124 2.75000 2.57635 2.89003 2.75016 4.25545 3.11630 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.00000 * 1 4.46341 5.64592 5.61310 3.79107 2.41952 5.24198 4.26028 4.20304 5.11126 3.07049 4.78854 4.93141 5.53619 5.01232 5.07053 4.60053 4.67544 4.08644 0.61500 1.75013 1 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 2 3.05238 4.78192 5.01485 4.48773 1.34600 4.48079 4.36806 2.23088 4.31845 2.90940 3.90048 3.23098 4.83434 4.43175 4.38172 3.79597 3.63654 3.04432 4.69472 1.31204 2 - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 3 2.81227 3.93620 3.20240 3.90353 2.23722 4.08132 1.68104 2.68822 3.77385 2.51301 2.80037 3.67117 4.45001 3.98359 3.93397 3.20284 3.20119 2.41112 3.61967 3.12812 3 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 4 2.94305 5.49560 3.08237 2.63455 4.83898 1.13605 3.99583 4.30436 2.22425 3.80068 4.56425 3.26238 3.20164 3.10683 2.60146 2.90040 3.28839 3.89124 5.94364 4.55569 4 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 5 2.52391 5.40960 2.72562 2.51424 2.87231 3.59237 3.26614 4.21747 1.76416 3.17462 4.45386 2.55774 3.41635 2.93767 2.95802 2.46147 3.01910 3.49707 5.85054 3.70316 5 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 6 3.08596 4.46139 4.95541 4.35594 3.57685 4.27269 4.61818 1.08137 4.17079 1.83045 2.97143 3.44322 4.62920 4.32798 4.22357 3.33138 3.11567 2.03757 5.13772 3.95808 6 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 7 2.93265 5.41038 3.07505 2.39946 4.74181 2.72396 3.89999 4.21828 2.50469 3.16807 3.70587 2.80192 3.24998 2.57068 3.13071 1.64120 2.33116 3.79369 5.85133 4.44872 7 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 8 2.85084 5.74750 3.95637 3.29982 5.29498 2.29767 4.20221 4.65237 1.85739 4.07043 4.90135 3.72740 4.57265 3.32347 0.85595 3.52028 3.72752 4.28035 6.10669 4.90745 8 - H 2.68638 4.42245 2.77508 2.73144 3.46289 2.40489 3.72515 3.29374 2.67742 2.69375 4.24710 2.90343 2.73760 3.18167 2.89726 2.37892 2.77540 2.98486 4.58497 3.61523 0.24685 2.03009 2.43701 1.14510 0.38301 0.48576 0.95510 9 2.41108 5.39954 2.85799 2.07604 4.74296 3.14345 3.07564 3.81630 2.11555 3.70412 4.44063 2.81074 3.86870 2.31176 2.89232 2.46785 2.68745 3.41473 4.36787 4.42325 14 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00965 5.04139 5.76373 0.61958 0.77255 0.36044 1.19524 10 2.87125 5.44179 2.30506 1.50575 4.78420 3.44036 3.89736 3.26260 2.34632 3.74586 4.48336 3.10885 4.10291 2.10222 3.00599 2.70524 3.16776 3.83104 5.87578 3.83921 15 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 11 0.97078 4.90810 3.72814 3.17748 4.20602 3.86095 4.21939 3.57472 2.77580 3.25628 4.11998 3.60752 4.30966 3.45425 2.82491 2.79768 3.14835 2.30491 5.57147 4.31191 16 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 12 2.87363 5.34487 3.09643 1.03984 3.60310 3.72894 3.43010 4.10350 2.68109 3.63137 4.39765 3.02860 4.12412 2.80097 3.16583 2.92672 2.95681 3.28621 5.80366 3.95706 17 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 13 2.73096 5.44362 2.52590 2.18375 4.78940 3.43953 3.47242 4.27584 2.03423 3.74918 4.11568 2.83968 4.09835 2.39924 1.97818 2.48430 2.97437 3.67060 5.87585 4.19581 18 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 14 2.49564 4.57003 4.05562 3.48140 3.69017 3.99383 3.70974 2.69581 3.02600 1.21871 2.98054 3.82219 4.36903 2.95578 3.12518 3.01161 3.19478 2.83367 5.16600 3.13147 19 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 15 4.51579 5.66058 6.48713 5.93455 3.73946 6.01998 6.32936 2.25504 5.81128 0.32480 3.45600 6.21441 5.90055 5.56415 5.70894 5.48003 4.71421 2.83630 6.10512 5.21304 20 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 16 2.93564 5.25602 2.88906 2.71226 4.53019 3.47323 3.93877 3.45776 2.31327 2.02931 3.06981 2.89156 4.13370 2.40094 2.41070 2.70644 2.61878 3.40688 5.73363 3.80917 21 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01708 5.12972 4.50799 0.61958 0.77255 0.48576 0.95510 17 2.44804 5.43500 2.86115 2.15532 4.77870 3.07477 3.72237 3.89338 2.28074 3.24451 4.22707 2.25624 3.66986 2.50231 2.92620 2.21449 2.82650 3.66888 5.86851 3.98063 22 - H 2.68633 4.41981 2.77544 2.73090 3.46378 2.40517 3.72519 3.29298 2.67765 2.69379 4.24628 2.90371 2.73715 3.18171 2.89818 2.37900 2.77492 2.98543 4.58502 3.61408 0.80735 1.34600 1.22525 0.72465 0.66260 0.51158 0.91516 18 2.60657 5.21560 2.79236 2.15488 3.98706 2.10848 3.76845 3.74248 2.35247 3.50628 4.04176 3.05938 3.97009 2.74226 2.69287 2.65908 2.43510 3.18641 5.66916 4.27970 28 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01258 4.77795 5.50029 0.61958 0.77255 0.42914 1.05287 19 2.58437 5.38663 2.88645 2.45827 4.72604 2.29671 3.85301 4.20800 1.80453 3.16246 3.70793 2.44778 3.32032 2.75665 2.85912 2.75412 2.94630 3.61272 5.82270 4.41523 29 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00973 5.03286 5.75521 0.61958 0.77255 0.70370 0.68270 20 2.78435 5.37294 3.15501 2.14771 4.36590 3.67242 3.38748 3.77951 1.97848 3.67263 3.55017 3.07032 2.22449 2.62646 2.55304 2.59204 2.78154 3.49358 5.81339 4.41052 30 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00965 5.04180 5.76415 0.61958 0.77255 0.36085 1.19429 21 2.81511 5.44202 1.73361 2.18960 4.78648 3.70573 3.46935 4.27210 2.50618 3.51091 4.48290 2.55057 2.69335 2.86651 2.62109 2.63840 2.93282 3.44060 5.87500 4.46428 31 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 22 3.43531 3.90050 5.21445 4.94765 4.76446 0.27400 5.45911 4.67949 4.76561 4.34217 5.27291 4.77346 4.88006 5.05540 4.88264 3.66689 3.94202 4.22026 3.55155 4.87702 32 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 23 2.40950 4.55805 2.44939 2.46734 4.63295 3.32079 3.73969 4.08890 2.51436 3.03807 4.02968 3.21335 4.11864 3.03164 3.15773 2.04941 1.71766 3.69872 5.79221 4.40961 33 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 24 5.30406 6.14901 6.02778 6.04097 0.33153 5.67955 4.25853 4.80597 5.80880 3.88511 5.30619 5.19360 5.92885 5.38893 5.55599 5.11530 5.49344 4.79320 4.32425 1.78532 34 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 25 4.34376 5.51884 6.33699 5.76552 3.73881 5.81051 6.12931 2.33100 5.64884 0.45706 2.81116 5.98723 5.77349 5.45622 5.56700 5.22662 4.54515 2.14518 6.03133 5.11684 35 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 26 3.27754 5.04450 5.95361 5.47108 4.36311 5.43582 6.10893 1.34663 5.40047 1.72173 4.11282 5.60037 5.65447 5.61455 5.52794 4.85476 4.09767 0.85865 6.41955 5.22437 36 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 27 5.00543 6.45535 5.60884 5.04468 6.17745 5.04161 5.51076 5.97808 3.76532 5.25868 6.32297 5.27689 5.57780 4.77476 0.10460 5.10936 5.25233 5.65839 6.81250 6.00400 37 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 28 2.82256 5.40835 2.35815 1.59555 2.71037 3.71294 3.90291 3.98708 2.36746 3.09076 4.45328 3.18648 2.98755 2.42067 3.13463 2.90448 3.16638 3.79056 5.85036 4.44875 38 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 29 2.62784 3.69878 4.34244 3.87501 4.95202 3.72232 4.85906 4.36644 3.75944 4.03184 4.84840 4.04121 4.43079 4.10701 2.71041 0.54353 3.07606 3.85315 6.27742 5.06758 39 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 30 2.84294 5.43417 2.27641 1.57235 4.77567 3.70678 3.72976 3.82227 2.51588 3.15983 4.47579 3.06635 4.10030 2.79118 2.57530 2.13757 2.96846 3.52843 5.86894 4.46016 40 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.13582 5.12972 2.11126 0.61958 0.77255 0.48576 0.95510 31 2.88518 5.36603 3.13839 2.44997 4.70046 3.16424 3.61866 4.17760 2.44138 3.66647 4.41095 2.68571 3.32981 2.95006 2.42407 1.69896 2.07860 3.75126 5.80549 4.40277 41 - S 2.68622 4.42229 2.77523 2.73127 3.46358 2.40517 3.72498 3.29358 2.67732 2.69359 4.24694 2.90336 2.73743 3.18150 2.89805 2.37865 2.77523 2.98522 4.58481 3.61507 0.16062 2.27326 3.09207 0.21537 1.64114 0.32701 1.27682 32 2.72494 4.61629 3.00787 2.26844 3.21511 3.19850 3.10649 3.76765 1.90075 3.55823 4.44009 2.79716 4.08663 2.52632 3.00100 2.46019 2.37890 3.78024 5.83628 3.82426 43 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00917 5.09185 5.81420 0.61958 0.77255 0.48470 0.95681 33 2.67106 5.35005 2.80221 2.20663 4.66015 3.71509 3.90618 3.15507 2.27258 2.85590 4.40009 3.19752 1.90953 2.52218 3.00364 2.90719 2.99404 3.05322 5.80421 4.41548 44 - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03639 5.11555 3.51544 0.61958 0.77255 0.45909 0.99929 34 3.08917 5.73331 2.55551 2.97694 5.57494 0.61850 4.63494 5.10239 3.71013 4.62501 5.45851 2.35804 4.52457 3.82027 4.29291 3.06971 3.83266 4.54213 6.78793 5.32771 45 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00907 5.10293 5.82527 0.61958 0.77255 0.43799 1.03658 35 2.65121 4.06913 2.00074 2.09325 4.77118 2.30957 3.32425 4.25358 2.56049 3.32362 4.47343 3.09246 4.10140 2.65397 3.12496 2.26973 2.89684 3.81917 5.86711 4.45915 46 - C 2.68623 4.42230 2.77525 2.73129 3.46359 2.40518 3.72500 3.29359 2.67746 2.69360 4.24695 2.90352 2.73717 3.18152 2.89773 2.37872 2.77525 2.98524 4.58482 3.61508 0.04861 3.11062 5.85207 0.90583 0.51786 0.48576 0.95510 36 3.54892 4.87009 5.37070 4.83278 1.77057 4.69116 4.61270 2.16757 4.63481 2.25525 3.75968 4.74810 5.00433 4.68250 4.62535 4.01981 3.77592 2.44742 4.88320 1.07903 50 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 37 2.08331 4.14942 4.44811 3.88982 3.77199 4.00845 4.51215 2.63976 3.78846 2.84463 3.76791 4.08671 4.46949 4.02398 4.00218 2.04969 1.50004 1.82098 5.27657 4.08191 51 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 38 3.62672 3.63194 5.61697 5.02642 2.55224 4.91000 5.26285 1.72810 4.84890 0.80616 3.53935 5.07600 5.16117 4.89828 4.84328 4.25208 3.85355 2.23202 5.57911 4.47726 52 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 39 2.42322 3.81134 4.22757 3.73292 4.55582 3.39411 4.69545 3.94825 3.69164 3.64019 4.49101 3.96120 4.39906 3.98336 4.03166 0.79340 1.93209 3.56085 5.94802 3.91327 53 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 40 3.00285 4.38193 4.91874 4.30974 2.34837 3.82337 3.75357 2.61450 4.10379 1.97408 3.49311 4.30992 4.52842 4.23986 4.12596 3.47623 3.23486 1.25317 2.48580 3.75714 54 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 41 2.84249 3.87203 4.45631 3.86801 2.98277 4.07481 3.96159 2.77715 2.37814 2.17192 2.93712 4.06566 4.44399 3.96001 2.13417 2.88846 3.20042 1.95171 3.16630 3.41428 55 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 42 2.61350 4.29064 2.25598 2.40645 2.88382 3.77092 3.18022 3.41508 2.65087 3.00156 3.86817 3.00227 4.16065 3.00942 2.55252 2.81063 2.61390 3.03834 3.95574 3.48767 56 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 43 2.93146 5.43447 2.09727 2.39945 3.49435 2.67509 3.89378 3.89443 2.12743 3.73838 4.47598 2.21905 3.89699 2.51815 2.83898 2.62758 3.16261 3.82338 4.21641 4.18868 57 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 44 2.65970 5.42673 2.11142 2.47536 4.19620 1.93093 3.89587 4.24644 2.37504 3.72917 4.09865 2.71889 4.10138 2.77174 2.90335 2.39525 3.09392 3.18690 5.86342 4.45648 58 - S 2.68675 4.42234 2.77477 2.73120 3.46445 2.40460 3.72557 3.29294 2.67698 2.69400 4.24755 2.90349 2.73687 3.18022 2.89855 2.37872 2.77538 2.98579 4.58568 3.61574 0.50776 0.97296 3.90237 1.60359 0.22461 0.48576 0.95510 45 2.76671 4.43305 2.87138 2.27006 4.76655 3.35003 3.37117 3.74120 2.06980 3.22432 4.46692 2.73265 4.09219 2.51905 2.23706 2.27302 2.91514 3.09191 5.86022 4.45157 68 - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00899 5.11225 5.83460 0.61958 0.77255 0.45335 1.00921 46 2.84433 4.09561 4.60487 4.00982 2.76083 4.09994 3.85510 2.21039 3.86104 2.59968 3.52376 2.79938 3.63985 4.05285 3.77797 3.39560 3.03628 1.12526 5.02329 3.83796 69 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 47 2.93284 5.42680 3.18821 2.22634 4.40318 3.28497 3.42919 3.94829 1.55412 3.15316 4.46928 3.06261 4.10220 2.16688 2.60862 2.80702 2.67608 3.81392 5.86321 3.87920 70 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 48 3.02858 5.24129 3.39124 2.62022 4.47980 3.83144 1.06721 3.91298 2.73748 3.23724 4.31199 3.07799 3.23403 3.07014 2.98750 3.05353 3.25491 3.58559 4.06559 4.37673 71 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03932 5.12972 3.42234 0.61958 0.77255 0.48576 0.95510 49 3.01247 2.54617 4.90331 4.30037 2.01241 4.17111 4.45282 2.03719 4.09917 2.56954 3.50917 3.53967 4.53359 4.23600 4.12735 3.48148 3.24478 2.36922 4.93176 1.62769 72 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00910 5.09951 5.82186 0.61958 0.77255 0.43265 1.04635 50 2.93531 5.32300 2.89770 2.67954 4.62055 3.72925 3.22932 3.00660 1.92833 2.98521 4.10993 3.21821 3.79669 2.61030 1.92005 2.92288 2.65120 2.79986 5.78499 4.40528 73 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 51 3.13099 4.53391 4.81707 4.22903 3.16193 4.30389 4.64098 0.98122 2.63731 2.55547 3.63974 4.36161 3.80675 4.27195 4.19062 3.61008 3.36587 1.84202 5.22760 4.04066 74 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 52 2.93270 4.07286 3.06449 2.49475 3.95271 3.71778 2.95281 3.70129 2.14457 3.05863 3.43927 2.50420 3.54567 2.07032 2.43003 2.81238 3.16389 3.45285 5.82322 3.80392 75 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 53 2.77915 4.06440 3.20922 2.30074 3.51619 3.71742 3.68578 4.15950 2.23784 3.48758 4.42307 2.86908 3.55529 2.43759 2.47447 1.91780 2.60820 3.42644 4.99554 3.94103 76 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 54 2.70386 5.33520 2.57380 2.37973 4.63735 3.72541 3.57467 4.09413 2.60069 2.10329 3.88558 2.89406 4.11776 2.84111 2.70596 2.62077 2.11556 2.83326 5.79445 4.41100 77 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 55 2.46053 4.65915 2.28982 1.98514 4.78248 2.69152 3.89274 4.26750 2.36491 3.33157 3.76988 2.58899 3.23419 2.49439 2.95297 2.82709 2.90601 3.82867 5.87224 4.16512 78 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 56 2.77688 5.44453 2.18206 2.29616 4.78993 2.90650 3.89309 4.27625 2.38948 3.74994 4.25160 1.93240 3.52302 2.74476 2.70966 2.63026 2.52309 3.83536 5.87694 4.46559 79 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.12643 5.12972 2.18176 0.61958 0.77255 0.48576 0.95510 57 2.57414 4.49316 3.06717 2.15838 4.01151 1.80336 3.87437 3.99435 2.31970 3.22500 3.19603 3.00002 4.07260 2.99167 2.76106 2.61594 3.00504 3.61500 5.72016 4.10862 80 - T 2.68599 4.42265 2.77559 2.73127 3.46319 2.40498 3.72534 3.29268 2.67745 2.69328 4.24567 2.90356 2.73700 3.18186 2.89840 2.37901 2.77507 2.98558 4.58517 3.61543 0.78893 1.43716 1.17744 1.33654 0.30483 0.61337 0.77984 58 2.81611 5.27733 3.05710 2.42730 4.61612 2.01802 3.34059 4.08403 1.72849 3.57108 4.32439 2.88013 3.97372 2.63656 2.75463 2.71528 2.70052 3.66563 5.70549 4.31774 88 - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01351 4.70708 5.42942 0.61958 0.77255 0.33185 1.26442 59 2.93514 4.38526 4.50208 3.91010 2.53666 4.05382 3.79512 2.65328 3.31435 2.15218 3.36247 3.63625 4.42194 3.60643 3.64110 2.77645 3.16720 2.17994 4.28362 1.59104 89 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00945 5.06203 5.78438 0.61958 0.77255 0.38267 1.14583 60 2.72683 4.00195 3.58557 3.88836 2.06647 4.07852 4.38454 2.49889 3.01536 2.40290 3.37043 4.07755 4.44743 3.97358 3.92652 2.86082 2.79638 2.53257 5.04585 1.68898 90 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 61 2.97187 3.99735 4.70144 4.10089 3.34959 3.19977 4.43393 1.64176 3.65939 1.80924 3.26413 3.49765 4.47964 4.10889 2.51094 3.41393 3.20399 1.97506 5.00463 3.28447 91 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 62 2.31616 4.73768 3.39620 3.17071 2.88660 2.92387 4.15103 2.84395 2.85278 2.62668 2.92981 3.07497 3.62498 3.44675 3.51249 2.29580 2.15729 2.71677 5.31077 3.56077 92 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 63 2.66553 5.42397 2.20856 1.99664 4.76132 2.25621 3.89623 4.24189 2.56345 3.06943 4.46667 2.75279 3.44962 2.92346 2.91883 2.69984 2.66110 3.45669 4.27485 4.45502 93 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07237 5.12972 2.75048 0.61958 0.77255 0.48576 0.95510 64 2.57090 5.41777 2.85597 2.16263 4.76197 2.32815 3.86865 4.24749 2.30544 3.72257 4.45894 2.08885 4.07452 2.86938 2.24813 2.53651 3.13989 3.51874 5.85072 4.43995 94 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00941 5.06676 5.78911 0.61958 0.77255 0.38823 1.13401 65 2.48028 5.35948 2.65921 2.28770 4.67088 3.72045 3.02037 3.35872 2.40843 2.61482 3.52129 3.20223 3.10003 2.58930 2.66494 2.74117 2.82523 2.92650 5.81286 3.93906 95 - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01977 5.12972 4.29334 0.61958 0.77255 0.48576 0.95510 66 2.62678 4.50033 3.27771 2.64181 4.11791 3.35317 3.94071 3.76305 2.06924 3.12214 4.28917 3.09678 3.58512 2.85784 2.43100 2.43370 2.09000 2.89751 5.70983 3.18121 96 - E 2.68612 4.42230 2.77525 2.73128 3.46359 2.40518 3.72500 3.29359 2.67746 2.69340 4.24695 2.90309 2.73745 3.18151 2.89806 2.37892 2.77511 2.98523 4.58482 3.61508 0.09871 2.39593 5.84123 0.39480 1.12029 0.46505 0.98914 67 2.74880 3.99473 4.66514 4.07723 1.06634 4.15545 3.60926 2.70277 3.92496 2.40190 3.57871 3.16370 4.52086 4.10720 4.04086 3.45317 3.26551 2.71552 4.95280 2.67752 99 - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 68 2.56045 3.74330 2.28356 2.40023 4.74134 2.85538 3.89935 3.29924 2.63950 3.28509 4.17126 2.31165 3.04231 2.77606 2.73465 2.25074 3.16308 3.79316 5.85072 4.44809 100 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 69 2.71416 4.74215 2.55849 2.69776 4.58134 3.20783 3.69141 3.84766 2.69737 2.98395 4.35214 2.78534 4.12861 3.05354 3.17767 1.49509 2.11940 3.65289 5.76504 4.39295 101 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 70 3.53893 4.85571 5.49538 4.89842 3.09813 4.79115 5.13361 1.52938 4.71667 0.91581 3.28869 4.94772 3.72171 4.78143 4.71968 4.12460 3.76542 2.08299 5.48647 4.37852 102 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 71 2.35104 5.35957 2.88498 2.59020 4.67101 3.35408 3.53975 4.13393 2.49274 3.14724 3.86174 2.69241 2.69976 2.30850 3.14715 2.35866 2.84134 3.18441 4.20904 3.06498 103 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 72 2.54513 5.42887 2.01211 1.66769 4.76726 3.70853 3.66683 4.24871 2.63496 3.24981 4.18403 3.17844 3.25104 2.15123 3.12679 2.89876 2.96355 3.81594 5.86546 3.72972 104 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 73 4.57204 5.70776 6.54368 5.95507 3.46396 6.05552 6.27671 2.06265 5.84356 0.40551 2.54585 6.24310 5.88477 5.51622 5.69329 5.49638 4.75089 3.24890 6.03338 5.17646 105 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 74 3.48383 3.64457 5.49156 4.93817 4.03324 4.84457 5.30505 1.12494 3.77610 2.18596 3.92201 4.99568 5.15487 4.97062 4.85798 4.19604 3.72858 1.07368 5.76368 4.56921 106 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 75 2.74302 5.42059 2.71537 1.97029 4.75660 3.51847 3.39591 4.23623 2.53681 3.21980 3.71140 2.65963 4.10208 2.36771 2.82324 2.40382 2.61578 3.27307 4.74619 3.07502 107 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 76 2.86789 4.71670 3.30686 2.87554 2.91308 3.94290 1.59009 3.22071 3.20846 2.41160 3.81893 3.66244 4.32305 3.51298 3.57009 3.18623 3.20751 2.74832 5.24646 2.09015 108 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00883 5.12972 5.85207 0.61958 0.77255 0.48576 0.95510 77 4.67655 5.82816 5.59385 5.31940 2.15426 5.34370 1.98782 4.45333 5.12875 3.03426 5.00428 4.94643 5.62924 3.84636 5.11713 4.70624 4.88210 4.34469 4.35653 0.56473 109 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00595 5.12685 * 0.61958 0.77255 0.00000 * // EOF close HMMFILE; 1; } hmmer-3.1b2/testsuite/3box.hmm0000664361611702660230000000775612473612614015717 0ustar wheelerteddyHMMER3/e [3.0 | March 2010] NAME 3box LENG 20 MAXL 75 ALPH DNA RF yes CONS yes CS yes MAP yes DATE Thu Jun 16 11:48:52 2011 NSEQ 22 EFFN 22.000000 CKSUM 1874497603 STATS LOCAL MSV -6.0876 0.74404 STATS LOCAL VITERBI -6.6159 0.74404 STATS LOCAL FORWARD -3.2245 0.74404 HMM A C G T m->m m->i m->d i->m i->i d->m d->d COMPO 0.86318 3.69883 1.55071 1.07490 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 0.00000 * 1 0.00850 6.21185 5.49634 6.05242 1 A x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 2 0.00850 6.21185 5.49634 6.05242 2 A x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 3 0.06667 5.98733 2.82901 5.83744 3 A x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 4 4.60470 4.40315 1.36132 0.32652 4 t x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 5 5.04480 6.00326 0.01203 5.79333 5 G x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 6 0.00850 6.21185 5.49634 6.05242 6 A x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 7 0.15440 4.67867 5.06392 2.05995 7 a x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 8 0.25411 2.28121 4.07408 2.25164 8 a x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 9 0.72466 4.17736 4.48789 0.71554 9 t x . 1.38629 1.38629 1.38629 1.38629 0.27938 5.48894 1.42871 1.46634 0.26236 1.09861 0.40547 10 1.30652 1.86264 1.97543 0.83178 10 t . . 1.38629 1.38629 1.38629 1.38629 0.01087 5.22042 5.22042 1.46634 0.26236 0.03391 3.40099 11 2.69007 4.95467 0.08750 4.72706 11 G x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 12 5.28311 4.88969 5.40686 0.01723 12 T x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 13 2.63359 3.87615 2.77012 0.16866 13 t x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 14 5.28311 4.88969 5.40686 0.01723 14 T x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 15 5.04480 6.00326 0.01203 5.79333 15 G x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 16 0.14373 4.70714 5.09208 2.13114 16 a x . 2.31701 2.31701 2.31701 0.35056 0.17349 1.86339 5.48894 0.54487 0.86731 1.09861 0.40547 17 2.56336 3.52803 1.93365 0.28905 19 t x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 18 5.28311 4.88969 5.40686 0.01723 20 T x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 19 0.00850 6.21185 5.49634 6.05242 21 A x . 1.38629 1.38629 1.38629 1.38629 0.00830 5.48894 5.48894 1.46634 0.26236 1.09861 0.40547 20 2.04431 3.60689 0.47842 1.49776 22 g x . 1.38629 1.38629 1.38629 1.38629 0.00416 5.48480 * 1.46634 0.26236 0.00000 * // hmmer-3.1b2/testsuite/20aa.hmm0000664361611702660230000002402512473612614015553 0ustar wheelerteddyHMMER3/e [3.0 | March 2010] NAME test LENG 20 ALPH amino RF yes CONS yes CS no MAP yes DATE Thu Jun 16 11:48:44 2011 NSEQ 10 EFFN 1.958008 CKSUM 1166427327 STATS LOCAL MSV -6.4582 0.72049 STATS LOCAL VITERBI -6.5560 0.72049 STATS LOCAL FORWARD -4.5231 0.72049 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.84172 3.09731 2.97803 2.97493 3.01073 2.84267 3.09996 3.01846 2.98506 2.79502 3.24842 3.04612 2.98048 3.09368 2.98307 2.93276 2.99616 2.92882 3.11195 3.05475 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.00000 * 1 0.33153 4.75021 4.40686 4.30261 4.98231 3.54503 5.20354 4.24369 4.34423 4.07997 5.06373 4.20507 4.35385 4.61429 4.49324 3.11385 3.44352 3.74593 6.31351 5.23450 1 A x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 2 3.71189 0.19224 5.27202 5.20760 5.14010 4.12431 5.71287 4.50171 5.08337 4.33260 5.49223 5.04038 4.87020 5.39545 5.05595 3.97810 4.23735 4.17127 6.30489 5.40378 2 C x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 3 3.98656 6.04404 0.26832 3.10895 5.56931 3.96335 4.82674 5.37114 4.07756 4.85124 5.89959 3.68418 4.66362 4.10292 4.64977 3.90185 4.35520 4.94494 6.55717 5.39231 3 D x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 4 3.86001 5.93253 3.10541 0.31659 5.41784 3.95765 4.69178 5.05532 3.69726 4.56407 5.57407 3.66171 4.61389 3.93455 4.14135 3.79818 4.19080 4.68124 6.42367 5.24820 4 E x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 5 4.36375 5.55549 5.27903 5.17457 0.30584 4.76688 4.43458 3.87515 5.08513 3.08977 4.51422 4.94403 5.24230 5.06026 5.02103 4.55599 4.68143 3.91024 4.55642 2.86975 5 F x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 6 3.81492 5.45729 4.62640 4.63584 5.65376 0.15643 5.64356 5.49443 4.90777 5.02078 6.04315 4.79423 4.85917 5.17511 5.00568 4.01542 4.34608 4.88236 6.49628 5.79945 6 G x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 7 4.16383 5.73045 4.20345 4.08613 4.12447 4.32074 0.25450 5.00519 3.93134 4.36771 5.51417 4.44331 4.93209 4.47945 4.12138 4.24824 4.51598 4.72299 5.55036 4.06661 7 H x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 8 3.68240 4.96784 5.29686 4.98518 4.00152 4.81181 5.64051 0.45958 4.84010 2.48866 3.87537 5.14536 5.22389 5.14468 4.96429 4.43571 3.98666 2.14122 6.00165 4.77767 8 I x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 9 3.87084 5.71858 4.09111 3.63874 5.29113 4.19915 4.43565 4.79502 0.34848 4.21693 5.19083 4.00655 4.68950 3.62245 2.89455 3.89670 4.09159 4.48039 6.06846 5.02983 9 K x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 10 4.10569 5.37999 5.37704 5.07323 3.60485 4.91872 5.51913 2.88747 4.85030 0.31403 3.48756 5.29222 5.26246 5.02342 4.88351 4.67433 4.38205 3.10398 5.68414 4.56194 10 L x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 11 3.76493 5.21977 4.97705 4.69089 3.80689 4.48112 5.25686 3.07546 4.41720 2.33582 0.44785 4.86029 4.99353 4.76897 4.52181 4.16012 4.11127 3.15967 5.69858 4.51357 11 M x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 12 3.57809 5.49127 3.44339 3.42863 5.00255 3.88766 4.82499 4.95087 3.84059 4.51120 5.50759 0.33008 4.59318 4.15065 4.17825 3.64673 4.01118 4.48535 6.20351 4.93745 12 N x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 13 4.00253 5.56981 4.68626 4.66041 5.50832 4.21986 5.61548 5.32444 4.79562 4.82725 5.94238 4.87442 0.15853 5.15257 4.90198 4.20399 4.50319 4.86895 6.42107 5.65462 13 P x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 14 3.77909 5.64094 3.69767 3.52834 4.92308 4.07548 4.66650 4.75220 3.31045 4.16367 5.23212 3.97154 4.67568 0.35264 3.55127 3.82527 4.10540 4.44707 6.06412 4.85804 14 Q x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 15 4.06569 5.72976 4.64481 4.06728 5.29142 4.32696 4.65520 4.94688 2.91779 4.32463 5.34979 4.34726 4.83528 3.88050 0.27799 4.14570 4.30787 4.64685 6.09499 5.11767 15 R x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 16 2.86264 4.76384 4.06625 3.97893 4.95217 3.49015 5.02468 4.61317 4.11182 4.28786 5.17873 4.02231 4.29645 4.39854 4.32273 0.36940 3.40501 3.96259 6.26205 5.06201 16 S x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 17 3.02696 4.85500 4.32743 4.18885 4.86868 3.65327 5.11610 4.11498 4.15179 3.94230 4.98023 4.21329 4.42902 4.51115 4.32720 3.24072 0.36422 3.70624 6.21269 5.10005 17 T x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 18 3.46484 4.87137 5.11821 4.85525 4.22953 4.46611 5.57852 2.31070 4.74668 2.81664 4.12561 4.92209 5.02443 5.07640 4.88658 4.06104 3.83103 0.41971 6.11439 4.87843 18 V x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 19 4.79204 5.84985 5.34317 5.26034 3.78333 4.68289 5.07812 4.94477 5.03502 4.18554 5.52583 5.30347 5.26379 5.37294 5.01211 4.99275 5.14054 4.84439 0.17138 3.75795 19 W x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01490 4.60991 5.33226 0.61958 0.77255 0.48576 0.95510 20 4.45825 5.64322 5.00210 4.90925 2.69967 4.74776 4.20846 4.39930 4.76077 3.65150 4.99606 4.73576 5.22339 4.86709 4.76972 4.49872 4.75805 4.30746 4.35402 0.28758 20 Y x - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01005 4.60506 * 0.61958 0.77255 0.00000 * // hmmer-3.1b2/testsuite/M1.hmm0000664361611702660230000000265212473612615015310 0ustar wheelerteddyHMMER3/e [3.0 | March 2010] NAME M1 LENG 1 ALPH amino RF no CONS yes CS no MAP yes DATE Thu Jun 16 11:49:23 2011 NSEQ 2 EFFN 2.000000 CKSUM 0 STATS LOCAL MSV -4.9046 1.46065 STATS LOCAL VITERBI -5.1999 1.46065 STATS LOCAL FORWARD -0.0517 1.46065 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 0.35624 4.75100 4.29053 4.19828 4.88306 3.48560 5.11004 4.21322 4.22519 4.00099 5.04236 4.13232 4.23379 4.52899 4.38323 3.09073 3.42594 3.72730 6.17838 5.12044 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01467 4.62483 5.34718 0.61958 0.77255 0.00000 * 1 0.32372 4.76536 4.42980 4.32857 5.00499 3.55951 5.22620 4.27004 4.37081 4.10495 5.08789 4.22499 4.36948 4.63911 4.51684 3.12947 3.46009 3.76842 6.33337 5.25783 1 A - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 4.62006 * 0.61958 0.77255 0.00000 * // hmmer-3.1b2/testsuite/ecori.hmm0000664361611702660230000000313012473612614016123 0ustar wheelerteddyHMMER3/e [3.0 | March 2010] NAME ecori LENG 6 MAXL 64 ALPH DNA RF no CONS yes CS no MAP yes DATE Thu Jun 16 11:48:52 2011 NSEQ 2 EFFN 2.000000 CKSUM 3460427537 STATS LOCAL MSV -6.2757 1.01949 STATS LOCAL VITERBI -6.7433 1.01949 STATS LOCAL FORWARD -1.7848 1.01949 HMM A C G T m->m m->i m->d i->m i->i d->m d->d COMPO 1.18299 1.62142 1.56342 1.24966 1.38629 1.38629 1.38629 1.38629 0.04879 3.73767 3.73767 1.46634 0.26236 0.00000 * 1 2.38910 2.82844 0.25233 2.62837 1 g - - 1.38629 1.38629 1.38629 1.38629 0.04879 3.73767 3.73767 1.46634 0.26236 1.09861 0.40547 2 0.28818 2.60848 2.42319 2.42940 2 a - - 1.38629 1.38629 1.38629 1.38629 0.04879 3.73767 3.73767 1.46634 0.26236 1.09861 0.40547 3 0.28818 2.60848 2.42319 2.42940 3 a - - 1.38629 1.38629 1.38629 1.38629 0.04879 3.73767 3.73767 1.46634 0.26236 1.09861 0.40547 4 2.31486 2.12647 2.41211 0.36768 4 t - - 1.38629 1.38629 1.38629 1.38629 0.04879 3.73767 3.73767 1.46634 0.26236 1.09861 0.40547 5 2.31486 2.12647 2.41211 0.36768 5 t - - 1.38629 1.38629 1.38629 1.38629 0.04879 3.73767 3.73767 1.46634 0.26236 1.09861 0.40547 6 2.46232 0.33808 2.58153 2.07174 6 c - - 1.38629 1.38629 1.38629 1.38629 0.02469 3.71357 * 1.46634 0.26236 0.00000 * // hmmer-3.1b2/testsuite/i8-nonresidues.pl0000775361611702660230000000611712473612615017544 0ustar wheelerteddy#! /usr/bin/perl # Regression test of handling a nonresidue '*' character. By design, # '*' residues score 0 in insert states and N,C,J; and -inf in match # states. Test case verifies that an inserted * is handled within one # alignment, and a consensus * breaks an alignment in two. # Implemented as a regression test against specific scores (in domtbl # output) of a small manually checked example. # # Usage: ./i8-nonresidues.pl # Example: ./i8-nonresidues.pl .. .. tmpfoo # # SRE, Thu Oct 29 08:38:09 2009 # SVN $Id$ BEGIN { $builddir = shift; $srcdir = shift; $tmppfx = shift; } use lib "$srcdir/testsuite"; use h3; $hmmsearch = "$builddir/src/hmmsearch"; $hmm20aa = "$srcdir/testsuite/20aa.hmm"; # Two test sequences, to be aligned to 20aa.hmm # First one will get parsed into two domains (consensus L replaced by '*') # Second one will get parsed into one domain because '*' is an insertion; # this is a "feature" of insertions being scored as 0 regardless of # residue identity. # if (! open(FP1, ">$tmppfx.1")) { print "FAIL: couldn't open $tmppfx.1 for writing"; exit 1; } if (! open(FP2, ">$tmppfx.2")) { print "FAIL: couldn't open $tmppfx.2 for writing"; exit 1; } print FP1 <<"EOF"; >test1 ACDEFGHIK*MNPQRSTVWY EOF print FP2 <<"EOF"; >test2 ACDEFGHIKL*MNPQRSTVWY EOF system("$hmmsearch --domtblout $tmppfx.dom $hmm20aa $tmppfx.1 > $tmppfx.out 2>&1"); if ($? != 0) { die "FAIL: hmmsearch failed on first test sequence\n"; } &h3::ParseDomTbl("$tmppfx.dom"); # Verify. if ($h3::ndomtbl != 2) { printf("FAIL: expected two lines in domtbl; saw %d\n", $h3::ndomtbl); exit 1; } if ($h3::ndom[0] != 2) { printf("FAIL: expected two domains; saw %d\n", $h3::ndom[0]); exit 1; } if ($h3::seqsc[0] != "45.8") { printf("FAIL: expected seq score of 41.8; saw %s\n", $h3::seqsc[0]); exit 1; } if ($h3::seqbias[0] != "11.8") { printf("FAIL: expected seq bias of 11.8; saw %s\n", $h3::seqbias[0]); exit 1; } if ($h3::domsc[0] != "23.6") { printf("FAIL: expected domain 1 score of 23.6; saw %s\n", $h3::domsc[0]); exit 1; } if ($h3::domsc[1] != "28.2") { printf("FAIL: expected domain 1 score of 28.2; saw %s\n", $h3::domsc[1]); exit 1; } system("$hmmsearch --domtblout $tmppfx.dom $hmm20aa $tmppfx.2 > $tmppfx.out 2>&1"); if ($? != 0) { print "FAIL: hmmsearch failed on second test sequence"; } &h3::ParseDomTbl("$tmppfx.dom"); if ($h3::ndomtbl != 1) { printf("FAIL: expected one line in domtbl; saw %d\n", $h3::ndomtbl); exit 1; } if ($h3::ndom[0] != 1) { printf("FAIL: expected one domains; saw %d\n", $h3::ndom[0]); exit 1; } if ($h3::seqsc[0] != "64.6") { printf("FAIL: expected seq score of 64.6; saw %s\n", $h3::seqsc[0]); exit 1; } if ($h3::seqbias[0] != "0.1") { printf("FAIL: expected seq bias of 0.1; saw %s\n", $h3::seqbias[0]); exit 1; } if ($h3::domsc[0] != "64.5") { printf("FAIL: expected domain 1 score of 64.5; saw %s\n", $h3::domsc[0]); exit 1; } print "ok\n"; unlink "$tmppfx.1"; unlink "$tmppfx.2"; unlink "$tmppfx.out"; exit 0; hmmer-3.1b2/testsuite/20aa.sto0000664361611702660230000000054112473612614015574 0ustar wheelerteddy# STOCKHOLM 1.0 #=GF ID test seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY seq6 ACDEFGHIKLMNPQRSTVWY seq7 ACDEFGHIKLMNPQRSTVWY seq8 ACDEFGHIKLMNPQRSTVWY seq9 ACDEFGHIKLMNPQRSTVWY seq0 ACDEFGHIKLMNPQRSTVWY #=GC RF xxxxxxxxxxxxxxxxxxxx // hmmer-3.1b2/testsuite/SMC_N.hmm0000664361611702660230000201271012473612615015730 0ustar wheelerteddyHMMER3/e [3.0 | March 2010] NAME SMC_N ACC PF02463.10 DESC RecF/RecN/SMC N terminal domain LENG 1142 ALPH amino RF no CONS yes CS yes MAP yes DATE Thu Jun 16 11:48:51 2011 NSEQ 29 EFFN 5.242798 CKSUM 309001388 GA -95.80 -95.80 TC -95.80 -95.80 NC -95.90 -95.90 STATS LOCAL MSV -13.3034 0.69528 STATS LOCAL VITERBI -14.0205 0.69528 STATS LOCAL FORWARD -7.2956 0.69528 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.54780 4.71860 2.93510 2.34519 3.50163 3.06575 3.80834 2.89262 2.39698 2.43129 3.78231 2.94979 3.73249 2.83917 2.84223 2.62193 2.88950 2.85024 5.26879 3.75096 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.00000 * 1 2.83250 4.63458 4.39722 3.81700 2.23706 4.17778 3.11624 2.54482 2.88759 2.83290 2.82854 4.08984 3.62335 3.96915 3.18806 2.71627 2.57520 2.43690 5.24007 1.96622 1 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 2 4.34145 5.50046 6.45978 5.97163 4.29369 5.99123 6.60196 1.12282 5.91638 0.89202 4.00146 6.17151 6.05062 5.92968 5.96207 5.44654 4.58011 1.73937 6.58981 5.55975 2 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 3 3.05626 5.53495 3.31774 2.04830 4.86699 3.83494 3.23766 3.64975 1.43928 3.24394 4.57910 2.92241 4.22805 3.12384 2.58014 2.43793 2.77470 3.23084 5.97540 3.77372 3 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 4 3.05884 5.56905 3.30753 2.21949 4.91511 3.18621 3.48765 4.40063 2.02583 3.35263 4.60972 2.61374 4.22517 2.55246 1.69014 2.52227 2.61172 3.96028 6.00047 4.59054 4 r - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 5 4.38094 5.56205 6.43991 5.89923 3.24648 5.89857 6.31813 1.01534 5.79766 0.92199 3.79750 6.07796 5.94062 5.70656 5.76688 5.31677 4.60156 2.14262 6.30841 5.32011 5 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 6 3.09267 4.81128 3.39547 1.64530 3.94780 4.07311 4.32679 2.07380 3.36002 2.41873 3.22454 3.81089 4.45235 3.66143 2.69005 3.31786 2.88965 2.09659 5.39381 3.36326 6 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 7 3.05976 4.89367 5.57577 5.01101 4.09795 4.90247 5.33412 1.24627 4.84811 1.32882 4.00794 3.75062 5.22390 5.01555 4.90568 4.24545 3.82992 1.44403 5.79690 4.61168 7 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 8 3.05462 5.56168 2.65163 1.69123 3.81029 3.82894 4.01615 3.65634 1.96827 3.30709 4.60274 2.97080 4.22238 2.40388 2.75900 2.44891 2.68678 3.95151 5.99526 3.71862 8 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 9 2.87119 5.92743 2.82909 2.87467 5.26233 1.31652 2.95735 4.75769 2.83289 4.24035 5.01475 1.34899 4.47101 3.44248 3.67577 3.34111 3.65865 4.32203 6.38331 4.94133 9 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 10 4.74241 6.00232 6.16488 6.01457 0.24705 5.50751 4.95978 3.90836 5.83937 3.20110 4.66118 5.55489 5.91127 5.65385 5.71494 5.02438 5.06624 2.97988 5.04228 3.34047 10 F - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 11 4.54807 6.44390 5.45552 4.25033 6.21667 4.95313 4.58533 5.38094 0.38481 4.62366 5.55377 4.46939 5.23723 3.71162 1.73121 4.50722 4.57770 5.10436 6.49338 5.52327 11 K - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 12 3.28645 5.27665 4.27065 4.15666 5.78543 3.94448 5.41400 5.30167 4.45155 4.92840 5.70249 2.01411 4.74748 4.67179 4.77791 0.43876 2.90973 4.52670 7.06444 5.84771 12 S - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 13 4.75186 5.87665 6.11675 5.85256 1.37484 5.61470 4.63431 2.83771 5.63834 2.16733 4.61930 5.35596 5.85418 5.40847 5.49227 4.99182 4.95802 4.10638 4.72649 0.74348 13 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.18737 5.38739 1.79405 0.61958 0.77255 0.48576 0.95510 14 1.44097 5.18831 3.41831 2.85673 3.38728 2.47478 4.03200 3.84632 1.96481 2.99663 4.26638 3.37031 4.22293 3.18438 2.48679 3.04154 3.23492 3.52591 5.69226 4.36529 14 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.34018 5.20819 1.26270 0.61958 0.77255 1.00546 0.45551 15 3.10810 5.60870 2.13170 2.58009 4.95902 1.32535 4.03627 4.45236 2.88875 3.94394 4.72338 2.32727 4.17532 2.70942 3.41768 3.04762 2.50405 4.01804 6.09449 4.65280 15 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01136 4.87937 5.60171 0.61958 0.77255 0.15659 1.93139 16 2.73319 5.56805 2.54376 2.01629 4.91420 3.22839 3.32068 4.40090 1.66449 3.87376 4.60845 2.94223 4.22169 2.38406 2.50433 3.01672 2.77338 3.25260 6.00004 4.58848 16 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 17 2.54679 5.56454 3.31291 2.55551 4.90825 3.83519 2.86809 4.39146 2.26968 3.86814 4.60603 3.30368 2.75203 2.29826 2.23180 2.76607 1.78182 3.95455 5.99704 4.58946 17 t - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 18 2.44503 4.69846 4.21690 3.18649 3.81748 4.13805 4.41321 1.76251 2.76831 2.43846 3.80807 3.97644 4.51301 3.24489 3.85836 2.91029 2.30815 1.66788 5.29656 4.08453 18 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 19 2.73369 5.02061 2.53275 2.44490 4.19701 3.97882 4.20460 1.86976 3.09833 2.65225 4.11079 3.59568 4.36407 3.42962 3.09535 2.47285 2.41207 2.13609 5.57040 4.29238 19 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 20 3.09922 4.72298 3.31018 2.73451 3.24855 1.80278 4.39223 2.03372 3.51813 1.79164 3.83109 3.93524 4.49823 3.79765 3.29910 3.38061 2.94931 2.50352 5.31758 4.10081 20 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 21 2.82926 5.53204 2.23996 2.22658 3.58607 3.84364 4.03837 4.32871 2.78449 2.95750 4.57888 2.49243 1.51714 3.14240 2.88206 3.04049 3.30131 3.91161 5.97702 4.57747 21 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 22 3.20866 4.59073 5.07654 4.47623 0.90868 3.30827 4.63196 2.44658 4.27785 2.06266 3.67969 4.48730 3.47729 4.41446 4.31105 3.67312 3.44066 2.83051 3.71983 3.84786 22 f - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 23 2.60600 5.53932 2.24002 2.29337 3.87863 3.02104 2.33711 4.35144 2.76083 3.23388 4.58294 3.30519 3.53096 2.84239 3.25173 1.95737 2.61984 3.40467 5.97875 4.57459 23 s - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 24 3.06313 5.57361 2.75422 2.39643 4.91889 3.36080 3.43910 4.40463 1.77029 3.87850 4.61466 3.30061 1.68244 3.11854 2.44954 2.68376 2.91189 3.96446 6.00554 4.59488 24 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07930 5.38739 2.63573 0.61958 0.77255 0.48576 0.95510 25 3.02649 4.06632 3.29223 2.73570 4.82338 1.78623 3.26948 4.29655 2.48428 3.30421 4.53953 2.22909 4.19859 2.79830 2.41871 2.04695 3.25726 3.87634 5.93550 4.53692 25 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00733 5.31542 6.03777 0.61958 0.77255 0.35472 1.20856 26 3.17422 4.56011 5.04176 4.43397 1.07439 4.33572 3.01205 2.35479 4.23934 2.21018 3.14158 4.46515 4.69408 3.35973 4.27931 3.64410 3.40571 2.20345 5.16456 3.98180 26 f - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 27 3.12950 5.11741 3.90317 3.38976 4.60502 3.94931 4.49692 3.38772 3.37793 3.65517 4.50017 1.52218 4.47445 3.70846 3.78989 2.16806 1.18888 3.13640 5.95021 4.67345 27 t - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 28 1.44548 3.66866 4.96279 4.35640 2.25784 3.09354 4.60538 2.60983 4.16782 2.70671 3.06737 4.39795 4.64065 4.32198 4.21924 2.43941 3.35270 1.83454 5.13739 3.95846 28 a - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 29 4.22010 5.37554 6.38645 5.94286 4.60439 5.95654 6.78159 0.66980 5.92535 1.82917 4.29552 6.13092 6.08551 6.11891 6.07524 5.43038 4.47599 1.40646 6.89075 5.73228 29 I - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 30 3.23449 4.60060 5.16285 4.56049 3.72318 4.42883 4.77861 1.58756 4.36441 2.27916 3.72648 4.57587 4.78573 4.51154 4.39716 3.09039 2.50324 1.09864 5.28111 3.25314 30 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 31 5.20796 6.62670 6.04924 6.12314 6.92120 0.03698 6.92242 7.02733 6.40854 6.36425 7.48130 6.22780 5.99485 6.64438 6.33051 5.44280 5.74976 6.35489 7.49690 7.11983 31 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 32 2.40736 5.32336 3.49942 2.94998 4.59665 3.92271 3.46266 4.01630 2.90618 2.84995 4.41778 3.10739 1.11588 3.28485 2.64390 2.75731 3.34655 3.68233 5.83771 4.50427 32 p - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 33 4.89612 6.56919 4.79176 4.85460 6.28912 5.00704 6.20302 6.53948 5.42171 5.94943 7.03494 0.07421 5.73519 5.65764 5.67029 5.00336 5.37934 5.97312 7.26780 6.27015 33 N - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 34 5.20796 6.62670 6.04924 6.12314 6.92120 0.03698 6.92242 7.02733 6.40854 6.36425 7.48130 6.22780 5.99485 6.64438 6.33051 5.44280 5.74976 6.35489 7.49690 7.11983 34 G - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 35 2.77444 2.78329 5.63607 5.57411 5.88966 3.90267 6.06869 5.35256 5.43120 5.08772 5.84352 4.82438 4.78092 5.52124 5.40871 0.27050 3.77335 4.47342 7.25102 6.22670 35 S - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 36 5.20796 6.62670 6.04924 6.12314 6.92120 0.03698 6.92242 7.02733 6.40854 6.36425 7.48130 6.22780 5.99485 6.64438 6.33051 5.44280 5.74976 6.35489 7.49690 7.11983 36 G - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 37 5.22849 6.75275 5.50249 5.04218 6.54707 5.26153 5.64372 6.22807 0.08679 5.50979 6.54359 5.33878 5.78438 4.87497 4.01208 5.28536 5.44349 5.90106 7.08296 6.28313 37 K - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 38 3.22630 5.14911 5.17431 5.11280 5.90159 3.92957 5.92583 5.40413 5.15108 5.10776 5.87206 4.72405 4.79546 5.31605 5.24305 0.34336 1.90901 4.52674 7.23694 6.16236 38 S - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 39 3.53228 5.56291 3.84745 3.86924 5.85963 4.06427 5.37275 5.57163 4.48002 5.15286 5.98044 0.39509 4.86595 4.64184 4.86787 1.90656 4.05483 4.79960 7.14731 5.81144 39 N - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 40 4.03361 5.28448 6.06643 5.49742 2.34841 5.41006 5.80249 1.33553 5.34690 1.45517 2.96388 5.58336 5.59903 5.36348 5.33844 4.77700 4.26065 1.32395 6.02281 4.95578 40 v - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 41 3.12976 4.50539 5.08089 4.46705 2.42775 3.20823 4.63346 1.71911 4.25544 1.59400 2.39593 3.62158 4.66256 4.38906 4.26858 3.61078 2.98873 1.99174 5.12996 3.95398 41 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 42 2.56521 6.44354 0.62560 1.84804 5.71717 4.09004 4.62121 5.26432 3.64230 4.73401 5.56921 3.53909 4.70674 3.78026 4.25828 3.68240 4.09317 4.81481 6.88083 3.53498 42 D - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 43 0.34231 5.12480 5.35221 5.32008 5.94565 3.91587 6.02297 5.44294 5.34080 5.15393 5.90404 4.77609 4.79168 5.44402 5.37304 1.77060 3.79872 4.53053 7.28740 6.24917 43 A - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 44 4.33012 5.50718 6.41385 5.89295 4.16631 5.89478 6.39384 0.70042 5.80697 1.43016 2.71642 6.07256 5.96024 5.77381 5.81262 5.32198 4.55970 2.11021 6.41222 5.40488 44 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15337 5.38739 1.98331 0.61958 0.77255 0.48576 0.95510 45 2.67336 3.23664 3.54458 2.97790 4.28487 3.89353 4.09688 3.67729 2.42924 1.64166 4.16258 3.47034 4.27975 2.88032 2.06618 2.10654 3.26081 3.39280 5.60320 4.30834 45 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.28272 1.40133 46 5.62926 6.41520 6.30359 6.34571 0.44220 5.95839 3.12231 5.15991 6.10066 4.22451 5.64562 5.42527 6.19106 5.63323 5.81866 5.37839 5.80327 5.12602 1.95024 2.23525 46 F - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 47 2.91614 2.70561 5.13336 4.53176 3.70673 4.39164 4.75062 2.83740 4.33488 2.28375 3.71528 4.54493 4.75704 4.48232 4.36871 3.70824 2.79023 0.83220 5.25805 3.00693 47 v - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 48 4.91859 6.02291 6.86493 6.28378 1.90964 6.40062 6.45519 3.18890 6.17249 0.41814 2.50235 6.57414 6.15610 5.76249 5.97533 5.86336 5.08414 3.62228 6.16981 5.20723 48 L - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 49 3.35978 5.28090 4.97410 5.01397 6.08009 0.29393 6.01536 5.67941 5.32629 5.33804 6.09545 4.76864 4.89230 5.41818 5.42518 2.07317 3.94953 4.72382 7.35232 6.31724 49 G - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15337 5.38739 1.98331 0.61958 0.77255 0.48576 0.95510 50 3.00053 4.99125 2.43246 1.65336 2.40309 3.38846 4.10625 2.80152 2.69497 2.43259 4.07791 3.48252 4.27170 3.31398 3.40972 3.10261 3.23202 2.82281 5.53241 3.55368 50 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.13441 5.24192 2.11631 0.61958 0.77255 0.93199 0.50050 51 2.39803 5.42877 2.82482 2.63045 4.76986 3.70728 3.89279 4.25092 2.01637 3.28884 4.47117 3.17695 4.10048 2.13736 1.87468 2.31601 2.82886 3.81742 5.86287 4.45729 51 r - - 2.68619 4.42226 2.77521 2.73125 3.46355 2.40514 3.72496 3.29355 2.67742 2.69356 4.24691 2.90348 2.73741 3.18148 2.89802 2.37888 2.77496 2.98520 4.58478 3.61504 0.04321 3.23448 5.83881 0.35737 1.20235 0.21537 1.64116 52 1.94349 5.54817 2.89523 2.53066 4.88495 3.22895 2.67106 4.36509 2.76104 3.23302 4.59151 2.71688 3.32495 3.12161 3.25261 1.66307 2.66694 3.93445 5.98627 4.58025 53 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 53 1.87507 4.92792 3.79116 3.22766 3.37868 2.39025 4.25269 3.45757 3.19798 2.59931 3.01440 2.73674 4.39896 3.14362 3.59462 1.92411 2.98977 3.21355 5.49253 2.93342 54 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.31245 5.38739 1.33266 0.61958 0.77255 0.48576 0.95510 54 3.29286 5.61937 3.65657 3.02614 5.06443 4.00438 4.06115 4.46749 1.26209 3.91041 4.70824 3.50493 4.38223 3.17364 1.54845 2.19193 2.49613 4.07927 5.98236 4.70964 55 k - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00924 5.08419 5.80653 0.61958 0.77255 0.20385 1.69058 55 2.21382 5.54577 3.31242 2.75689 3.75926 3.22989 2.46378 4.36227 1.85307 3.84748 4.58890 2.66350 4.22612 2.47978 3.24968 2.05261 2.65557 3.93193 5.98371 4.57813 56 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 56 4.46667 5.67130 6.45733 5.85922 2.04972 5.84292 6.11357 2.10733 5.71247 0.67971 2.30238 6.02832 5.85150 5.51826 5.60841 5.23130 4.66287 2.53496 6.08066 5.14829 57 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 57 4.39186 6.35027 5.10502 4.11782 6.11337 3.33132 4.56625 5.30744 1.92877 4.58214 5.49686 4.37852 5.16300 3.69309 0.39929 4.36263 4.47084 5.00583 6.47962 5.47616 58 R - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 58 1.81909 5.39227 3.40487 2.84940 4.69547 2.70712 4.07871 4.13824 2.84619 3.69339 4.47460 3.38008 3.48502 2.63921 2.61380 1.68566 2.90464 2.57687 5.88960 4.52353 59 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 59 2.40343 5.56700 2.67836 1.81559 4.91271 2.93631 3.43254 4.39915 2.01415 3.07523 4.60751 2.64094 4.22172 3.11142 2.80752 2.28621 2.89153 3.95798 5.99928 4.58791 60 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 60 3.05563 5.56453 2.94876 2.30243 4.90911 3.82942 4.01631 3.07402 1.72621 3.86944 4.60538 2.79119 4.22288 2.46618 1.92246 2.39179 2.96502 3.45395 5.99735 4.58704 61 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 61 2.62126 4.50845 4.97928 4.37078 3.11809 3.49958 4.60356 2.31499 4.17775 1.33219 2.35374 4.40377 4.64016 4.32811 2.58995 3.11560 3.00520 2.46008 5.12863 3.12503 62 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 62 2.68264 5.56980 2.75003 2.20524 4.91583 3.37665 4.01646 4.40262 2.48319 3.87548 4.61028 2.36583 3.42481 2.07823 2.93391 1.70964 2.98848 3.96097 6.00183 4.59005 63 s - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 63 2.35919 5.54042 1.30692 2.76481 4.87360 2.89614 4.02973 4.35049 2.77137 3.84173 4.58684 2.89032 3.41797 3.13094 2.40930 2.74099 3.29418 3.42958 5.98302 3.82852 64 d - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 64 4.47029 5.64007 6.51920 5.97096 4.02773 5.99336 6.38940 2.11606 5.87042 0.56411 3.09083 6.17668 5.98742 5.72677 5.81579 5.41914 4.68384 1.65875 6.31450 5.37197 65 L - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 65 4.23251 5.38554 6.39978 5.96287 4.62082 5.97973 6.83332 0.44059 5.94833 2.25463 4.30902 6.15667 6.10650 6.15098 6.10657 5.46130 4.49009 1.77025 6.92778 5.76252 66 I - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04161 5.38739 3.31908 0.61958 0.77255 0.48576 0.95510 66 3.06697 5.16687 3.53111 2.97338 2.15420 3.91944 1.58525 3.78170 2.95427 3.41205 4.24609 2.99510 4.30776 2.67432 3.06465 2.60531 2.94388 3.48537 5.66398 2.73920 67 h - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06695 5.35284 2.81307 0.61958 0.77255 0.61775 0.77470 67 2.22506 5.49689 3.26572 2.28703 3.78403 2.81452 3.11532 4.31229 2.14149 3.79823 4.53997 2.30697 4.17876 2.71919 2.79335 2.76475 3.23946 3.29505 5.93509 2.61462 68 k - - 2.68606 4.42275 2.77420 2.73102 3.46404 2.40409 3.72545 3.29404 2.67791 2.69371 4.24740 2.90270 2.73790 3.18197 2.89851 2.37912 2.77536 2.98523 4.58527 3.61467 1.45052 0.98870 0.93269 0.89524 0.52511 0.48302 0.95951 68 2.83873 5.15492 3.17674 2.62139 3.35426 2.96531 3.84631 3.87842 2.20639 3.43944 4.22523 3.15219 2.75596 2.97267 2.77370 1.71257 2.42425 3.51550 5.64146 4.27930 83 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.05432 4.89321 3.09280 0.61958 0.77255 0.15885 1.91818 69 2.52104 5.55332 2.42731 2.05461 4.89889 2.59325 3.40787 3.38048 2.01318 3.85881 4.59386 2.67614 4.20854 2.82045 2.90569 2.27547 3.27265 3.38960 5.98570 4.57444 84 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00700 5.36160 6.08395 0.61958 0.77255 0.58630 0.81279 70 2.13178 5.55538 2.96425 2.27901 4.90060 2.48332 4.00422 4.38684 2.51902 3.86073 4.59613 2.45881 4.21036 2.57725 2.97088 1.89430 2.52469 3.94613 5.98791 4.57658 85 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00700 5.36160 6.08395 0.61958 0.77255 0.58630 0.81279 71 2.71683 5.54928 3.29153 2.26683 3.69387 1.98156 3.12970 4.37818 2.16381 3.85402 4.59028 2.69280 3.59455 2.60480 2.45117 2.46141 3.27280 3.42328 5.98269 4.57253 86 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00700 5.36160 6.08395 0.61958 0.77255 0.58630 0.81279 72 1.86955 5.55054 2.96336 2.73884 4.89392 2.59609 3.47809 4.37825 2.12852 3.85489 4.59201 3.28663 2.23284 2.87398 2.38779 2.44312 3.27621 3.94035 5.98413 4.57475 87 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00700 5.36160 6.08395 0.61958 0.77255 0.58630 0.81279 73 2.36287 3.78257 3.02819 2.77937 2.80089 2.67408 4.02688 4.21802 2.41099 3.74231 4.50564 2.37288 2.84740 3.13787 2.48506 2.18026 3.27590 3.13219 5.91164 4.52620 88 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00700 5.36160 6.08395 0.61958 0.77255 0.58630 0.81279 74 2.04083 4.57347 4.55290 3.96606 3.67729 4.19652 4.49940 2.77193 3.84713 1.89374 3.68846 4.17577 2.90109 3.43785 4.02929 2.45464 2.64151 1.62007 5.18489 3.25612 89 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00700 5.36160 6.08395 0.61958 0.77255 0.42767 1.05563 75 3.05528 5.54162 2.36457 2.36653 4.87656 3.22981 4.02099 3.54298 2.20391 2.62292 3.07322 2.22181 4.22609 2.36980 3.25077 2.53051 2.94976 3.27476 5.98041 4.57565 90 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 76 3.06334 5.38063 3.39856 2.41011 2.63752 3.87026 2.68729 4.09231 1.95306 2.92095 4.44097 3.37348 4.26149 3.19265 2.67167 1.71305 3.29444 3.24552 5.85810 3.77254 91 s - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 77 0.57188 1.66685 5.67507 5.60924 5.83744 2.11647 6.06710 5.28943 5.46534 5.02269 5.78816 4.83772 4.78630 5.53625 5.42848 3.41247 3.77582 4.44727 7.20445 6.18712 92 A - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 78 3.05684 5.50736 3.02673 1.62825 3.80546 3.84008 4.02990 4.29708 2.77476 3.80215 3.74834 3.31758 4.23301 2.88189 2.31781 2.00453 2.49465 3.88481 5.95490 2.58852 93 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 79 3.24785 5.27065 6.24203 5.79468 4.72992 5.77080 6.59981 1.83996 5.76058 2.52860 4.44026 5.94633 5.97796 6.03361 5.93582 5.22250 4.35347 0.42897 6.88562 5.64877 94 V - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 80 2.56056 3.98702 2.97706 1.79163 4.89735 3.83162 4.02029 4.38003 2.34192 3.86032 4.59918 3.30104 4.22575 2.43818 3.24928 2.11021 1.77888 3.94512 5.99262 4.58442 95 t - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 81 2.72547 4.54839 5.02103 3.13071 3.64993 3.17084 4.66339 1.43732 4.22737 1.66910 2.69472 4.45559 4.69154 4.38088 4.27646 3.63830 3.39505 1.84939 5.18828 4.00933 96 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08708 5.38739 2.54056 0.61958 0.77255 0.48576 0.95510 82 3.06912 4.48471 4.79529 4.19497 2.65238 4.21026 2.48641 2.36344 4.02920 2.31321 3.03181 3.23336 4.57645 4.20424 4.12076 2.96631 1.72280 2.09774 5.10226 2.96474 97 t - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07367 5.30770 2.71700 0.61958 0.77255 0.76203 0.62871 83 3.98863 5.25853 5.67670 5.21861 0.65514 5.06208 4.63428 2.73108 5.01914 2.47470 4.05979 5.01625 5.34649 4.98116 4.97294 4.40557 4.21007 2.80141 4.80886 1.98270 98 F - E 2.68674 4.42282 2.77509 2.73114 3.46410 2.40546 3.72463 3.29215 2.67746 2.69348 4.24458 2.90364 2.73764 3.18014 2.89816 2.37943 2.77576 2.98408 4.58533 3.61484 0.22016 1.63455 5.96426 1.64222 0.21511 0.78544 0.60865 84 3.00305 3.92253 1.52117 2.45021 4.85529 3.77303 3.24410 4.34066 2.04415 3.81626 4.55303 2.96509 4.16856 2.69080 3.19254 2.15005 2.89976 3.90159 5.94488 4.53407 107 d - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00768 5.26859 5.99094 0.61958 0.77255 0.86783 0.54449 85 3.05624 5.55510 2.54986 1.80667 4.88893 3.79721 4.01008 3.38258 2.30798 3.85536 4.60101 1.37141 4.20819 3.11283 3.25754 3.01671 3.29002 3.94035 5.99127 3.37219 108 n - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00768 5.26859 5.99094 0.61958 0.77255 0.30461 1.33716 86 3.05701 5.50288 3.01091 1.68143 4.82171 2.89085 4.03115 3.52384 2.77705 3.38509 4.55060 3.01072 2.65534 3.13663 3.26509 1.72209 2.94992 3.40115 5.95167 3.57777 109 e - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 87 2.94500 5.95331 1.31870 2.60310 5.28122 1.86849 4.29115 4.78708 3.12600 4.25341 5.01712 2.18259 4.44967 2.46363 3.65851 2.61113 3.63700 4.33829 6.38516 4.93115 110 d - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 88 2.26781 5.57079 3.00761 2.50912 4.91630 2.37257 2.34322 4.40257 1.85424 3.87609 4.61155 2.45633 4.22491 3.11506 2.58974 2.56189 3.29021 3.96171 6.00294 4.59167 111 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02949 5.38739 3.70970 0.61958 0.77255 0.48576 0.95510 89 2.51811 5.53330 2.77549 2.23427 3.85006 3.08406 4.00873 3.19472 2.18402 2.88770 4.57627 2.89506 4.21401 2.63445 2.61692 2.48444 2.61023 3.91922 5.97128 3.05530 112 k - E 2.68667 4.42274 2.77568 2.73172 3.46307 2.40466 3.72455 3.29295 2.67762 2.69347 4.24583 2.90217 2.73702 3.18195 2.89849 2.37875 2.77568 2.98523 4.58526 3.61552 0.73342 1.52922 1.19393 1.29696 0.31933 0.43417 1.04355 90 2.55232 4.60826 3.83638 2.27778 2.34033 2.85036 4.16463 3.10135 3.21978 1.80892 3.71490 3.66157 4.28352 3.51598 3.56179 2.45165 2.81907 2.55922 5.19586 3.96651 120 l - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00967 5.03917 5.76151 0.61958 0.77255 1.28395 0.32427 91 2.90100 4.99784 3.37141 2.81230 2.99499 3.75715 3.31670 3.60977 2.49036 3.24376 4.07687 2.91279 2.08670 3.14411 2.81371 2.37751 2.76483 2.33724 5.52029 3.49255 121 p - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00967 5.03917 5.76151 0.61958 0.77255 1.28395 0.32427 92 2.92999 4.49842 3.33559 3.04381 3.61710 3.98183 4.26366 1.61788 3.45246 2.02082 3.60982 3.84627 4.35525 3.71743 3.00288 3.24993 2.45083 1.94088 5.10590 3.89810 122 i - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00967 5.03917 5.76151 0.61958 0.77255 1.12570 0.39219 93 2.95229 5.47073 1.90010 2.07578 4.81353 2.67310 3.90478 4.30221 2.18160 3.77522 4.51424 2.35040 3.01274 3.00427 3.15120 2.57140 2.77046 3.86059 5.90304 4.48624 123 d - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00933 5.07451 5.79685 0.61958 0.77255 1.23530 0.34354 94 2.63658 5.40766 2.12536 1.96191 3.71941 3.22449 3.87036 4.23114 2.01579 3.71104 4.44950 2.61684 4.07617 2.96815 2.79003 2.60460 3.13868 3.22995 5.84299 3.42303 124 e - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00933 5.07451 5.79685 0.61958 0.77255 1.23530 0.34354 95 2.91998 5.41599 2.19006 1.91527 3.60692 3.68769 3.31156 4.23531 2.62316 3.71816 4.45936 2.76442 2.42079 2.98136 3.11619 2.22692 2.53591 3.80272 5.85288 4.44459 125 e - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00933 5.07451 5.79685 0.61958 0.77255 1.23530 0.34354 96 2.93596 3.67107 3.19820 1.24715 4.70381 3.71147 3.89705 4.17026 2.06996 3.67301 4.42877 2.58873 4.10564 2.69434 3.09908 2.90970 3.16592 3.76014 3.71181 4.43218 126 e - . 2.68629 4.42236 2.77500 2.73105 3.46365 2.40501 3.72505 3.29323 2.67752 2.69366 4.24700 2.90357 2.73719 3.18120 2.89811 2.37897 2.77530 2.98529 4.58488 3.61514 0.14148 2.04881 5.79685 0.67731 0.70924 0.20070 1.70464 97 3.11925 4.49771 3.77975 4.44490 2.32848 4.28598 4.61806 1.97547 4.23519 2.09758 3.61645 4.44034 4.64988 4.37099 4.25200 3.02722 2.65606 1.45291 3.29582 3.02823 129 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 98 2.82819 3.65228 3.79561 2.59619 3.37639 3.38864 4.25442 2.77090 2.75518 2.83169 4.02076 3.10922 4.40026 3.52202 3.15494 1.92869 2.12998 2.40295 5.48940 3.10355 130 s - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 99 2.93250 5.03800 5.82488 5.29294 4.34223 5.20106 5.72209 0.86773 5.16455 1.89746 4.18930 5.36232 5.49313 5.35765 5.24884 4.57044 2.75623 1.52371 6.15136 4.95231 131 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 100 2.81548 5.13194 3.57346 3.01370 2.99067 2.38741 4.15413 3.72998 2.55800 3.00404 2.99507 3.51271 4.32708 3.34051 2.00336 2.29089 1.99928 3.44342 5.66164 4.35883 132 t - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 101 2.87558 4.86460 4.31156 3.72350 4.00972 4.24867 4.52411 2.83180 3.51036 2.36223 3.96306 4.06869 4.63066 3.89559 0.84529 3.52549 2.86946 2.62454 5.49873 4.28871 133 r - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 102 3.07929 5.36706 3.43124 2.87103 4.63471 3.88947 4.08139 3.28632 2.29151 2.84382 4.43008 3.39862 4.27946 2.33047 1.72196 2.57007 1.89762 3.19579 5.84700 4.49453 134 r - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 103 2.16780 4.58230 4.61288 4.02394 3.68562 3.24335 4.52904 1.81909 2.30988 2.18933 3.09523 4.21801 4.59260 4.11251 3.27338 3.51181 3.34731 1.68169 5.19634 4.00590 135 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 104 3.07252 5.12793 2.92796 2.68852 2.66490 2.60456 4.15452 2.93505 2.23346 3.04824 4.21001 3.03775 4.32700 3.34189 3.44426 2.58784 3.30395 2.42221 5.65800 2.19026 136 y - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 105 2.76337 5.44168 3.36658 2.80956 4.73682 3.85696 4.04913 3.56311 1.94233 2.58042 4.49604 2.86896 3.64762 2.79092 1.57773 2.77823 2.89573 2.98897 5.90508 4.52760 137 r - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 106 3.08810 5.60593 2.21718 2.36792 4.95051 2.37144 4.04311 4.43883 2.01111 3.91099 4.64797 2.04825 4.24540 2.43563 3.28174 2.24063 3.00492 3.99655 6.03759 4.62248 138 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 107 3.40879 5.92778 3.20435 2.63287 5.27290 1.00627 4.29496 4.76006 2.17448 4.22794 5.00074 2.02119 4.47397 3.00427 3.54148 2.93075 3.65299 4.32518 6.35379 4.93131 139 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 108 2.73664 5.57565 1.99469 2.07703 4.92102 2.70425 4.02187 4.40778 2.57045 3.88110 4.61662 2.53845 4.22733 3.11850 2.58359 2.05858 2.44989 3.96653 6.00795 4.59582 140 d - - 2.68632 4.42239 2.77534 2.73137 3.46368 2.40510 3.72509 3.29368 2.67755 2.69369 4.24704 2.90322 2.73754 3.18120 2.89815 2.37878 2.77509 2.98532 4.58491 3.61323 0.25119 2.13742 2.26179 0.70708 0.67941 0.48576 0.95510 109 3.09594 5.06482 3.99861 3.56165 3.27939 3.87237 4.65801 4.16738 3.58734 3.82929 4.66969 2.77960 4.48665 3.89735 3.97723 0.72097 2.06295 3.76934 6.06717 4.77832 144 s - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00760 5.27987 6.00222 0.61958 0.77255 0.31513 1.30819 110 3.05474 5.55929 2.65881 1.58231 4.90179 3.82943 3.51893 3.73701 1.88534 3.04239 4.60063 2.90338 4.22286 2.80523 3.24481 2.43743 2.69648 3.44757 5.99351 3.76273 145 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 111 3.77771 5.10438 5.46514 4.96655 2.53525 4.84223 3.16432 2.87673 4.76816 2.75326 4.19861 4.82486 5.17946 4.81257 4.76658 4.16734 4.00484 2.41772 4.80202 0.64326 146 Y - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 112 2.71783 5.15212 3.55645 2.67910 2.63576 3.93335 3.54297 3.75746 2.07356 2.30743 4.23242 3.49932 4.32108 2.89186 2.35507 3.14394 2.90411 3.46612 4.16336 2.21477 147 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 113 3.99274 5.26728 5.97429 5.39033 3.11444 5.29500 5.59205 0.78696 5.22011 1.25311 3.70530 5.45417 5.49722 5.21814 5.19630 4.64707 4.21398 2.65386 5.82131 3.56663 148 i - E 2.68632 4.42239 2.77505 2.73083 3.46368 2.40527 3.72508 3.29368 2.67704 2.69369 4.24704 2.90329 2.73753 3.18160 2.89814 2.37901 2.77533 2.98498 4.58320 3.61517 0.03611 3.40378 6.10974 1.63078 0.21788 0.48576 0.95510 114 4.01329 6.74339 1.30326 2.98554 6.04293 4.13883 4.76832 5.62573 3.12325 5.05923 5.94116 0.75024 4.81452 3.94431 4.56150 3.18263 4.32526 5.13872 7.20060 5.60188 157 n - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 115 3.42941 5.99234 2.23059 2.53515 5.32006 0.94865 4.31753 4.82317 2.74743 4.28737 5.05722 2.42400 4.47855 3.43846 2.69886 3.35453 3.67861 4.37742 6.41669 4.96643 158 g - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 116 3.05899 5.56728 3.30882 2.09865 4.91264 3.83238 3.41190 4.39756 1.50510 3.87191 3.74840 2.96302 4.22559 2.10532 2.42390 2.54273 3.00161 3.45017 5.99907 4.58973 159 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 117 2.78269 5.55118 2.25365 2.37002 4.89020 3.83098 4.01868 3.56388 2.39944 3.34455 4.59344 2.25809 2.81401 3.11697 2.72644 2.52927 2.34115 2.79489 5.98751 4.58023 160 d - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 118 1.54622 3.04407 4.83178 4.24293 3.69177 2.58757 4.61676 3.01524 4.08627 2.51966 3.17209 4.34190 4.63181 4.26882 4.19290 2.74605 3.37117 1.40612 5.21180 4.02894 161 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 119 3.07356 5.55226 3.32947 2.77600 4.89027 3.84737 3.15849 4.36637 2.76369 3.85364 4.59880 2.53437 3.08014 2.84846 2.04763 1.94685 1.68019 3.93999 5.99063 4.59039 162 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 120 3.06602 5.31782 3.43663 2.69023 2.95244 3.88612 4.08582 3.99652 1.71295 2.14288 4.38409 3.05505 4.27649 2.39232 2.75112 2.69554 3.29715 3.12111 5.80945 2.77233 163 k - H 2.68624 4.42231 2.77525 2.73129 3.46360 2.40519 3.72500 3.29236 2.67747 2.69361 4.24696 2.90353 2.73745 3.18152 2.89807 2.37893 2.77525 2.98495 4.58483 3.61509 0.11291 2.25808 6.10974 0.16084 1.90668 0.48576 0.95510 121 2.19917 5.55694 3.30790 2.75207 4.89834 3.20834 3.06099 4.38151 1.78080 3.86055 3.57657 2.27535 4.22401 2.59002 2.98881 2.18187 2.62503 3.94563 5.99175 4.58333 165 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 122 2.55501 5.87576 1.31508 1.28622 5.20677 3.93659 4.23925 4.70693 3.04928 4.17561 4.93352 3.39487 4.40889 2.86064 3.10511 2.86905 3.56968 4.26141 6.30650 4.86379 166 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 123 3.73731 5.02264 5.75564 5.19124 4.04327 5.07416 5.47317 1.46266 5.02804 1.58187 3.93582 5.23384 5.35710 5.14933 5.06045 4.42417 3.97508 1.18922 5.85020 2.21377 167 v - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 124 2.14759 5.45862 3.35315 2.52485 4.76038 3.38343 3.02171 3.14479 2.45823 2.98713 3.55975 2.96836 4.24241 2.38732 2.94760 2.03883 2.90796 2.86659 5.91812 4.53492 168 s - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 125 2.71776 5.56739 2.28884 1.80660 4.91334 3.32937 2.86195 3.44607 2.37463 3.40133 4.60783 2.34362 4.22154 2.51604 2.61103 2.78109 3.28581 3.95850 5.99953 4.58804 169 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 126 3.16436 4.64017 4.61735 2.82552 2.57679 4.26697 4.56537 2.75181 3.89994 0.89952 3.06579 4.24296 4.63046 3.29512 3.24449 3.55361 3.39543 2.87965 5.24298 4.05667 170 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 127 3.45093 5.68142 6.40278 5.80802 1.86454 5.80041 6.02465 3.14033 5.65474 0.50522 2.52299 5.96952 5.82505 5.47284 5.56034 5.18381 4.66007 3.44846 6.01489 5.02435 171 L - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 128 2.62298 5.54811 3.31077 1.76682 4.88582 3.34583 4.01941 4.36661 2.37226 3.25339 3.74696 2.65341 2.47860 2.82689 2.46559 2.39338 3.28624 3.42541 4.05895 4.57876 172 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 129 2.83448 5.56271 2.33464 2.23070 4.90662 3.82894 4.01615 4.39176 2.41466 3.24414 2.79546 2.60703 4.22243 2.85633 2.40900 1.83074 2.88037 3.95273 5.99607 4.58583 173 s - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 130 1.93381 4.97550 3.73080 2.50945 3.06774 3.99585 3.57578 2.69736 2.87196 2.40150 4.06855 3.63352 4.37992 2.25412 3.55363 2.43953 2.95345 2.42220 5.53230 4.26404 174 a - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 131 3.06446 5.43975 2.92525 2.81296 4.73330 1.28495 4.05231 4.18373 2.57426 2.52638 3.77347 2.56888 4.25164 2.86064 2.89218 3.05458 3.29553 3.30189 5.90414 4.52775 175 g - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 132 4.51420 5.68402 6.51506 5.97522 2.07137 5.98387 6.19368 0.64003 5.85985 1.52963 3.73701 6.13772 5.97942 5.68928 5.78579 5.40570 4.72341 3.05294 6.13704 5.02397 176 I - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 133 3.05781 5.48950 2.16628 2.57619 3.51811 2.69139 4.03494 4.26703 2.55592 2.63723 4.53867 2.49033 4.23684 3.14257 3.27046 2.07756 2.42228 3.86296 5.94165 2.93539 177 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 134 3.07952 5.02057 3.68189 2.87836 4.19673 3.37397 4.20444 2.10096 2.11629 2.48079 2.90600 3.59636 2.14136 3.42960 2.70225 2.63649 3.31096 2.98288 5.56978 4.29209 178 i - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 135 3.07288 5.58658 2.17182 1.62578 4.93116 3.32728 4.03080 4.41818 2.13124 3.89174 4.62820 2.32675 4.23486 3.12815 3.26454 2.19596 2.71924 3.38934 6.01906 4.60604 179 e - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 136 1.84239 5.43678 3.38324 2.83500 4.76321 2.25449 2.31603 4.21602 2.83850 3.75352 3.52484 2.01373 3.49316 3.19466 3.31991 2.36749 3.30837 3.82633 5.93336 4.55658 180 a - T 2.68643 4.42250 2.77545 2.73149 3.46379 2.40538 3.72520 3.29379 2.67681 2.69380 4.24715 2.90266 2.73617 3.18172 2.89749 2.37912 2.77545 2.98544 4.58502 3.61528 0.89188 0.85842 1.79405 0.04806 3.05921 0.48576 0.95510 137 3.19580 5.11665 3.77847 3.22115 3.13386 4.06883 2.83797 3.69356 3.15180 2.61753 4.21285 2.11584 4.44785 3.50281 1.99919 3.29855 3.42424 3.43814 5.17994 1.55775 182 y - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20819 5.93054 0.61958 0.77255 1.00546 0.45551 138 2.72392 4.55296 4.25470 3.67730 1.47761 3.36217 4.35726 3.01529 3.58931 2.75359 3.09740 2.21063 4.44382 3.84221 3.83800 2.65163 3.24035 2.49639 5.15408 2.79722 183 f - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20819 5.93054 0.61958 0.77255 0.82848 0.57396 139 4.14394 5.34828 6.19546 5.65087 3.08502 5.62184 6.04803 1.17110 5.53623 0.96979 3.71529 5.79577 5.72605 5.50302 5.52622 5.02196 4.36963 1.81512 6.13478 5.10693 184 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 140 4.03761 5.20307 6.20104 5.76045 4.60059 5.76000 6.61255 0.85624 5.73885 2.96148 3.25736 5.93140 5.93275 5.99741 5.91568 5.22516 4.29809 0.90455 6.82716 5.60933 185 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 141 3.01818 4.64673 4.06392 3.03284 2.75342 3.24043 4.30790 3.12437 2.96097 1.67249 2.61259 3.84779 2.89255 3.70938 3.73667 2.26963 2.85325 2.91204 5.24044 2.86076 186 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 142 4.98034 6.55205 4.85589 4.78664 6.02009 5.00690 5.85979 6.12704 4.58519 5.42610 6.57594 5.19718 5.65290 0.09401 4.76314 5.06497 5.35658 5.77881 6.98093 5.98433 187 Q - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 143 4.94781 6.41348 5.79788 5.86538 6.70244 0.04754 6.70375 6.76696 6.15600 6.13795 7.23592 5.97163 5.79064 6.39323 6.10672 5.17595 5.49093 6.09400 7.32100 6.89237 188 G - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 144 2.42319 5.50587 1.99976 1.87176 4.85148 3.76152 3.95149 4.33787 1.75955 3.81098 4.54689 3.22849 4.15748 2.77825 2.55786 2.69751 2.92153 3.89690 5.93754 4.52602 189 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 145 4.06264 5.22112 6.23416 5.79914 4.60324 5.80851 6.68468 1.09691 5.78686 2.22777 4.29181 5.97952 5.96606 6.04244 5.96784 5.28216 4.32285 0.76189 6.86469 5.65117 190 v - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.28272 1.40133 146 3.06789 5.28499 3.06186 1.42245 2.90916 3.89427 4.09848 3.94701 2.89529 2.63852 4.35473 3.01129 4.28519 3.24516 3.36139 2.61710 2.05694 2.85090 5.78475 4.44559 191 e - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 147 2.29780 5.56666 2.94766 2.22208 4.91230 3.82831 4.01529 4.39860 2.03975 3.87214 4.60720 2.58376 4.22182 2.06871 2.43005 2.58065 2.42516 3.95761 4.10159 4.58776 192 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 148 4.27248 5.49196 6.29669 5.72417 2.58062 5.68018 6.03642 0.81353 5.58569 1.32873 3.01662 5.85827 5.77538 5.50355 5.53940 5.06460 4.48806 2.35659 6.11371 5.11626 193 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 149 1.43733 4.58831 4.96454 4.37058 3.70465 4.32645 4.68887 2.09527 4.19990 1.38606 3.71270 4.44269 4.70301 4.36969 4.27985 3.09665 2.57563 2.50053 5.24541 4.06473 194 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 150 2.70738 5.51898 3.32469 2.11095 4.84418 3.83832 4.02760 4.31624 2.45633 2.89650 2.55586 1.78860 4.23144 2.39088 3.25908 2.56839 2.63929 3.89892 5.96369 4.56522 195 n - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 151 2.21059 5.40189 3.38526 2.59039 4.68268 2.39329 4.06109 3.47176 2.35094 3.67931 1.64577 3.00406 4.25734 2.79086 3.30508 2.54254 3.29445 3.75761 5.87541 4.50756 196 m - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 152 2.51082 5.55698 3.32907 2.77445 4.90676 2.61090 4.03436 4.38629 1.37867 3.86814 4.60975 2.67583 4.23963 3.13360 2.61549 2.22598 2.48545 3.95307 6.00049 4.59762 197 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 153 3.07201 6.04748 2.08279 3.14013 5.78934 4.06165 4.80061 5.31990 3.85832 4.82709 5.65839 2.99671 0.59388 3.97739 4.45052 2.91266 4.06232 4.78065 6.98584 5.50753 198 P - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 154 3.06430 5.32492 3.42984 2.02971 3.74821 3.88281 4.08255 3.40606 1.58741 3.23243 4.39046 3.39883 4.27339 3.21992 3.02737 2.22535 2.48570 2.37881 5.81522 4.46612 199 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 155 2.56535 5.54722 2.69029 1.31739 3.82295 3.37483 4.02051 3.47869 2.49728 3.84902 4.59006 2.94698 4.22578 2.65631 3.25009 2.71670 3.28710 3.93347 5.98479 2.76086 200 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 156 3.28751 5.45686 3.72431 2.74411 4.73379 4.08299 4.19940 2.74054 2.51325 2.71390 4.52779 3.61044 4.45838 2.99543 0.92983 3.31739 2.94816 3.81182 5.90329 4.61572 201 r - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 157 3.20172 5.52077 3.54396 2.96468 4.83413 3.98157 4.12882 4.26257 2.17654 2.18355 4.58416 2.99211 4.36674 3.25087 1.33520 2.56542 2.23069 3.89727 5.96004 4.62479 202 r - H 2.68683 4.42290 2.77447 2.72991 3.46419 2.40458 3.72498 3.29419 2.67773 2.69263 4.24350 2.90374 2.73773 3.18212 2.89866 2.37906 2.77549 2.98539 4.58542 3.61568 0.17499 1.84318 6.10974 1.83546 0.17381 0.48576 0.95510 158 1.85225 5.56242 3.30729 1.82999 4.90582 3.83105 4.01779 4.39008 2.01661 3.42439 4.60366 2.91430 4.22447 2.27697 2.83553 2.37584 3.28803 3.95219 5.99577 3.69082 210 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 159 3.61365 4.94709 5.58307 4.97369 1.93671 4.82237 5.12396 1.71169 4.77131 1.28169 2.62476 4.98661 5.10961 4.82481 4.75314 4.14797 3.83769 2.71346 5.48115 2.11445 211 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 160 4.64497 5.80120 6.62888 6.06402 1.74430 6.09832 6.26876 1.13763 5.94379 0.94748 3.64733 6.26452 6.02029 5.68522 5.82181 5.52397 4.83806 3.29662 6.13592 5.10638 212 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 161 3.76251 6.41215 1.44221 0.75212 5.71582 4.08539 4.56464 5.24930 2.88400 4.69287 5.51012 3.52907 4.67780 3.71164 3.19127 3.63981 4.03531 4.78920 6.82060 5.31108 213 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15337 5.38739 1.98331 0.61958 0.77255 0.48576 0.95510 162 3.99030 6.80886 1.16954 0.77146 6.04714 4.03760 4.69738 5.65462 3.88268 5.07219 5.98344 3.47125 4.73372 3.00465 4.60978 3.79759 4.30794 5.16061 7.21507 5.57215 214 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 163 1.55095 4.99405 5.78134 5.26171 4.29886 5.19800 5.75529 1.18542 5.14972 2.14220 4.11788 5.35513 5.47766 5.35130 5.25278 4.57787 3.99447 1.39054 6.17017 4.97223 215 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.28272 1.40133 164 1.49436 4.59079 4.77930 4.19426 3.71456 4.24434 4.61659 2.10346 4.04777 2.79983 3.73020 4.32318 4.63784 4.24357 4.17681 1.74458 3.38343 2.27755 2.43264 4.04847 216 a - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 165 4.33477 6.11441 5.17653 5.04653 6.39601 0.18555 5.97366 6.13664 4.62327 5.60011 6.53013 5.21338 5.48943 5.30261 2.52009 4.50324 4.83271 5.47593 7.24123 6.39876 217 G - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 166 2.73989 3.23217 5.01764 4.41537 3.66442 4.32453 4.67074 1.89156 4.22888 2.34002 3.68005 4.45534 4.69252 4.38456 4.28136 2.23743 1.60545 1.80784 5.20058 4.02078 218 t - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 167 2.22072 5.53322 2.95702 2.58008 2.56349 2.79166 3.23788 3.42137 2.33492 2.93667 4.57748 2.61816 4.22764 2.79154 2.68372 2.43883 2.95369 3.91650 5.97416 4.57159 219 a - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 168 3.05742 5.54716 3.31451 1.78554 4.88415 3.83408 2.43838 3.55903 2.11595 3.84861 3.25134 2.92046 4.22722 2.75201 2.14815 2.69725 3.28841 2.93668 5.98435 4.57923 220 e - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 169 3.35598 4.79697 4.83364 4.27047 1.58488 4.43732 2.98894 3.25448 4.13506 2.03284 3.91636 3.12676 4.79875 3.44738 4.28113 3.73267 3.58652 2.65848 4.99067 1.44358 221 y - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 170 2.79297 5.56666 2.20657 1.60244 4.91154 3.82974 4.01708 4.39723 1.69966 3.87170 4.60747 3.29728 4.22354 2.54789 2.86586 3.01905 2.96766 3.31060 5.99926 3.71072 222 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 171 2.16355 4.03767 2.97801 2.12798 4.83429 3.83887 4.02840 4.30468 2.16907 3.34575 3.64067 3.31552 2.24436 2.84997 2.69247 3.02950 2.55528 2.91825 5.95813 4.56118 223 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 172 3.05594 5.54844 3.00671 1.90554 3.63154 3.37880 4.02001 3.67628 1.80531 3.25831 4.59110 3.30272 3.11096 3.11881 1.72850 2.79372 3.28705 3.93511 5.98547 4.57928 224 r - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 173 3.09827 4.74907 4.09947 3.06304 2.32895 3.41831 4.37221 2.07617 1.68818 2.61995 3.85581 3.89766 4.48507 3.75515 2.83991 3.36259 3.32996 2.66034 5.33950 2.55990 225 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 174 2.53421 5.44189 3.01588 1.34363 3.40006 3.85382 4.04693 3.54612 2.06425 3.16109 4.49593 3.34372 4.24596 2.90027 3.28744 2.73314 3.29003 3.21111 5.90543 3.27471 226 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 175 2.55413 5.54330 3.31600 1.58984 4.87869 3.83475 4.02224 3.67321 1.61706 3.20991 4.58675 3.30622 3.41931 3.12195 2.63323 2.58502 2.75914 3.92878 5.98161 4.57744 227 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 176 1.27196 3.66671 4.32608 3.74884 3.11816 4.16062 4.44896 3.12470 3.66399 1.98785 3.77348 3.45138 4.53589 3.92107 2.89765 2.39622 2.88783 2.66282 5.26460 4.05988 228 a - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 177 2.78656 3.91544 3.68373 2.41057 4.19450 3.97996 3.53010 3.57617 2.09888 1.78344 2.71114 3.59775 4.36497 2.71512 3.51857 3.20136 2.96767 3.31492 2.56030 4.29093 229 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 178 2.79131 5.56807 3.30438 1.96190 4.91404 3.24705 3.34130 4.40018 1.85497 3.87344 4.60862 2.51816 4.22306 2.44355 2.13539 2.45669 3.28745 3.20894 5.99994 4.58909 230 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 179 3.05681 5.56649 3.02326 1.81517 4.91168 3.83021 4.01678 3.51871 1.82385 3.29911 4.60726 2.38742 4.22367 2.58068 2.24364 3.01917 2.47979 3.95723 5.99878 4.58849 231 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 180 4.43722 5.64265 6.43603 5.84400 3.09903 5.82542 6.11602 2.07356 5.70070 0.71350 1.82679 6.00974 5.84671 5.52541 5.60766 5.21465 4.63740 2.17315 6.09719 5.15773 232 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 181 2.62310 5.56365 2.90729 1.75274 3.87222 3.82854 3.34314 3.67599 1.93491 3.86866 4.60448 2.68304 4.22200 2.77119 2.89870 2.36636 2.56948 3.40071 5.99672 4.58616 233 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 182 3.12719 5.61731 3.38480 1.83511 4.97465 3.89106 4.05424 4.44885 1.59357 2.96664 4.65950 2.71582 4.28085 2.63723 1.84809 3.08968 2.92157 4.01558 6.03123 4.64154 234 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15337 5.38739 1.98331 0.61958 0.77255 0.48576 0.95510 183 2.08689 4.58861 4.22533 3.64879 3.70516 4.07758 4.36375 3.04958 2.76261 1.79547 3.06685 3.95371 4.45290 3.82664 3.82866 2.66240 1.77383 2.20911 5.19314 3.98705 235 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 184 2.45749 5.49580 2.65284 1.60298 4.84035 3.75799 3.94636 4.32614 2.68191 3.80087 4.53677 2.26007 4.15235 2.50815 2.63673 2.40279 2.80635 3.33314 5.92874 4.51776 236 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 185 2.66161 3.71130 2.09165 1.74921 4.83151 3.75798 3.27028 4.31583 2.41299 3.35944 4.53018 3.22634 4.15162 2.30439 3.17377 2.27371 2.87843 3.87821 5.92295 4.51338 237 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 186 2.74036 5.47780 2.32576 2.68344 4.81594 3.76026 3.94796 3.60552 1.68289 3.25487 4.52035 2.01264 4.15361 2.79664 2.79721 2.43666 3.21522 3.23326 5.91457 4.50805 238 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 187 2.62312 3.06493 4.25502 3.05488 3.68602 4.08373 4.36865 2.19309 2.98683 1.48241 3.68512 3.97105 4.45675 3.84575 2.84973 2.88048 2.50235 2.54464 5.17660 3.97259 239 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 188 2.34476 5.49138 2.68914 1.87392 4.83548 3.30171 3.94428 3.39960 2.34408 3.19714 4.53230 2.91536 4.15056 2.28333 2.85165 2.22245 2.79292 3.88150 5.92464 4.51426 240 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 189 2.99223 5.49093 3.24590 1.72481 3.75862 3.76619 2.84231 4.31542 1.92748 3.79358 3.62607 3.23527 4.15906 2.10191 2.34842 2.67352 3.22270 3.88048 5.92344 4.51767 241 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 190 3.02437 3.43031 4.30209 3.72230 3.66844 4.09380 4.38236 1.82497 2.54661 1.86749 3.67041 2.52485 4.46605 3.12747 3.86837 2.83920 3.25631 2.22760 5.16301 3.21184 242 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 191 2.98347 5.47049 2.32052 1.93450 4.80570 3.17171 3.94904 3.35619 2.68764 2.93010 3.38502 2.82007 4.15418 2.51803 2.37929 2.46809 2.82313 3.85582 5.90911 3.63757 243 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 192 2.48550 5.46943 2.62016 2.26287 4.80420 3.29097 3.36612 2.33537 2.21421 3.34432 4.51281 2.36097 4.15439 3.04902 2.87891 2.49188 2.87797 3.29569 5.90833 4.50367 244 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 193 2.44930 4.88209 3.67566 2.71628 4.04554 3.92664 4.15893 2.16491 2.65387 2.00730 3.97628 2.98095 4.31024 3.41017 2.18244 2.76846 3.23733 2.61356 5.44156 3.38363 245 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 194 2.65123 4.46796 4.65762 4.06260 3.00221 4.15898 4.47283 1.98985 3.27947 1.54657 2.97337 4.20269 4.52628 3.32321 2.38322 3.45404 2.80361 2.26980 5.08355 3.89813 246 l - - 2.68621 4.42228 2.77523 2.73126 3.46357 2.40516 3.72498 3.29357 2.67744 2.69358 4.24693 2.90350 2.73743 3.18150 2.89804 2.37890 2.77468 2.98522 4.58480 3.61506 0.07510 2.66237 5.96426 0.23856 1.55003 0.93199 0.50050 195 2.74007 5.49744 2.54503 1.91704 4.84359 2.88302 3.38711 4.33034 1.95085 3.80313 4.53787 2.90175 4.15063 2.75409 2.25791 2.68377 2.54349 3.88867 5.92939 4.51773 248 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 196 2.98749 5.34244 3.30374 1.30960 3.55327 3.08197 3.23805 3.33258 2.74521 3.20731 3.65139 2.65826 4.17936 3.10195 2.52545 2.98253 2.85564 3.70081 5.81229 4.44036 249 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 197 2.72834 4.59883 5.15654 4.56081 3.70452 4.45288 3.43504 1.39830 4.37187 1.49645 3.68037 4.59330 4.79953 4.52234 4.41407 3.77211 3.47655 1.53801 5.30463 4.12804 250 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 198 2.42239 5.49690 2.84702 1.54308 4.84206 3.75819 3.20772 4.32806 2.34140 3.32698 4.53768 2.38008 4.15235 3.04251 2.31870 2.53470 3.21720 3.88761 5.92930 4.51829 251 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 199 2.72139 5.49869 2.64669 2.43637 4.84478 2.55642 3.94512 4.33155 2.07467 3.80434 4.53919 2.42892 3.07034 2.43505 2.18194 2.45099 3.21655 3.88990 5.93062 4.51889 252 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 200 2.98631 5.49929 2.90612 1.75052 4.84559 3.75826 3.26927 4.33215 2.10549 3.80482 4.53981 2.89090 4.15229 2.11823 2.38689 2.42273 2.60496 3.89063 5.93090 4.51956 253 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 201 3.14310 4.73894 4.26828 3.65706 3.83145 4.15562 4.37069 3.19011 1.94264 1.07875 3.82274 3.97581 4.52158 3.77123 3.06466 3.43482 3.36720 2.47111 5.30228 2.87539 254 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 202 2.49239 5.49783 2.49538 1.90345 4.84358 3.75762 3.94534 4.33004 1.68178 3.80330 4.53844 2.62831 4.15172 2.53758 2.73602 2.62239 3.21665 3.19886 5.92993 4.51851 255 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 203 2.47223 5.48510 3.23632 1.92808 4.82645 3.75917 3.94659 4.30949 1.85780 3.78874 4.52700 2.87337 3.00738 3.04426 2.61303 2.29565 2.38045 3.23278 5.92012 4.51181 256 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 204 2.38749 4.45768 4.97747 4.36693 2.95837 4.24119 4.56943 2.55656 4.16626 0.98202 2.55648 4.38295 4.60043 4.30435 4.19500 3.04292 3.30777 2.69038 5.07212 3.08867 257 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 205 2.67675 5.52831 2.91041 1.42351 4.87265 3.14887 3.97217 4.35782 1.50899 3.83218 4.57156 3.24186 4.17666 3.07094 2.85599 2.97930 2.91094 3.91905 5.95984 4.54895 258 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 206 2.66154 5.48816 2.93859 1.88150 4.83090 3.30200 3.94497 3.14871 2.04541 3.26040 3.39113 2.37601 4.15111 2.48809 2.58926 2.64570 3.21422 3.87754 5.92223 4.51270 259 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 207 2.48239 5.51327 2.60131 1.44136 4.85511 2.75405 3.96531 4.34023 2.70760 3.81775 4.55686 3.23490 3.31521 2.06096 3.20225 2.72865 3.23899 3.28349 5.94839 4.53660 260 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 208 2.00990 4.91162 3.66595 3.10124 3.34774 3.92904 4.15532 2.90826 1.49659 3.13260 3.25870 3.56542 4.31245 3.39690 2.13423 3.15563 3.24712 2.76720 5.46724 4.20007 261 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 209 2.51336 5.49420 2.34205 1.78999 4.83907 3.75719 3.94461 4.32492 2.42234 3.23775 4.53496 2.16857 4.15093 2.70307 2.54742 2.51426 3.21510 3.23893 5.92694 4.51605 262 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 210 2.40555 5.46069 2.69966 1.73614 4.79174 3.76296 3.95154 3.05401 1.81391 3.21422 3.60640 3.23597 4.15613 2.76282 3.18216 2.52129 2.83652 3.84377 5.90184 4.49951 263 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 211 1.23763 4.62873 4.10838 3.53521 3.17977 3.25958 4.32332 3.10267 3.46652 1.99832 3.73814 3.11449 4.42552 3.74204 3.16543 3.31064 2.87320 2.64989 5.22528 3.36723 264 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 212 2.98845 5.41864 2.93012 1.72255 4.73228 3.77451 3.96416 2.76029 2.04295 2.29979 3.49669 3.25550 4.16707 2.33308 2.81741 2.96671 3.21941 3.79230 5.87007 4.48016 265 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 213 2.67375 5.49972 2.91990 1.65780 4.84457 3.76275 3.95017 3.60323 1.73538 3.80406 4.54097 2.84234 4.15728 3.04719 2.00569 2.72152 3.22296 3.89035 5.93161 4.52219 266 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 214 3.14777 5.99063 5.88846 5.72025 1.20100 5.54692 3.11519 4.63528 5.52016 3.90015 5.18508 5.14634 5.82519 5.28693 5.39918 4.93294 5.13881 4.53988 4.43404 0.68156 267 Y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 215 2.66865 5.18143 3.43609 2.87401 4.41451 3.84853 4.04635 3.25992 2.44956 1.80791 4.25460 2.90121 4.23660 1.66809 2.57090 3.05595 3.24322 3.08362 5.68512 4.36114 268 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 216 2.41861 5.49094 2.67616 1.71194 4.83427 3.75809 3.94572 4.31900 1.79650 3.79543 3.05898 2.84087 4.15185 3.04270 2.86281 2.68017 2.56998 3.88066 5.92459 4.51468 269 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 217 3.02063 4.62291 3.45976 3.54940 3.74192 4.05411 4.32794 2.49278 2.06092 1.51359 2.71642 3.88713 4.42919 3.05388 3.77008 3.31594 2.55429 2.64523 3.69510 4.00685 270 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 218 2.98349 5.49194 2.58608 1.86678 3.62748 3.75735 3.94457 4.32142 1.80429 2.85628 4.53286 2.89156 4.15090 2.35095 2.79480 2.48480 2.90547 3.88210 5.92510 4.51474 271 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 219 2.66339 5.50105 2.57621 2.05412 4.84717 3.75852 3.94683 4.33392 1.88728 3.80659 4.54165 2.04823 4.15315 2.47805 2.42006 2.71171 2.88019 3.89230 5.93277 4.52106 272 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 220 2.74725 5.50856 2.58153 1.38296 4.85300 3.76222 3.95484 3.67142 2.01726 3.81346 4.54994 2.53965 4.15967 2.45993 3.18606 2.95756 2.86224 3.89897 5.94098 4.52885 273 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 221 2.64631 4.62154 4.20711 3.62619 3.73949 4.08839 4.36103 2.73819 2.47466 1.25029 3.72939 3.94337 4.46134 3.80239 2.44018 3.35695 2.93273 2.17824 5.22333 4.01610 274 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 222 2.61067 5.47153 3.24332 1.76805 2.97293 3.76242 3.95005 4.28566 2.12718 3.77240 4.51486 2.53535 4.15562 2.70848 2.21462 2.95215 2.53890 3.31290 5.90980 4.50539 275 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 223 2.10110 3.76595 2.85556 1.90592 4.73171 3.77122 3.39468 3.34430 2.21804 3.14579 3.68444 2.93092 4.16390 3.06920 2.87855 2.72258 2.55215 3.79161 5.86968 3.50275 276 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 224 2.12106 4.57149 4.26794 3.68898 3.68354 4.08775 4.37296 2.63967 2.24352 1.50216 3.68303 3.97927 4.46046 3.85386 3.23456 3.35962 2.64945 2.39261 5.17512 2.85353 277 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 225 3.01064 5.52109 2.89051 1.56149 4.86911 3.77393 3.22197 4.35388 2.32210 3.82488 4.56250 3.24070 4.17068 1.97707 2.05948 2.59377 3.24130 3.91364 5.94893 4.54058 278 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 226 2.77075 4.72028 3.91433 3.34626 3.13743 2.58232 4.25470 2.88069 2.54036 2.39344 3.11753 2.92858 4.37803 3.59744 2.55874 2.82484 2.74509 2.34133 5.30403 2.60306 279 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 227 2.50668 5.07251 3.05121 2.92324 3.32666 3.02076 4.07142 2.35458 2.22778 3.31610 3.22711 3.42537 4.24599 2.49032 2.90125 2.77585 2.32497 3.38589 3.73785 3.56472 280 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 228 2.65878 4.47976 4.68393 4.08731 3.57135 4.17625 4.48948 2.20196 3.92822 1.07896 3.58513 4.22325 4.54193 3.19798 2.82157 3.47261 3.27852 2.27912 5.09514 3.29480 281 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 229 2.35705 3.63975 4.40331 3.09641 2.60643 3.36672 4.41030 2.46731 3.06994 2.33353 3.64124 4.06077 4.48462 3.30259 3.32866 3.39432 2.59906 2.01999 5.13602 2.31120 282 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 230 2.17628 5.35274 2.85899 2.50231 4.64184 3.78619 3.98035 4.09000 2.48408 1.82833 4.40868 3.27973 4.17832 2.32198 2.92592 2.45472 3.21959 2.61214 5.82036 4.44618 283 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 231 2.72154 5.16893 2.93846 2.85089 2.77848 3.36337 2.58933 3.17142 2.25771 3.01694 4.24165 3.01817 4.21945 3.19136 2.32541 3.03427 2.63612 3.49679 3.68075 2.84041 284 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 232 2.98717 5.49888 2.27842 1.79711 4.84471 3.75898 3.94641 3.62135 2.00197 3.80414 4.53957 2.62490 4.15312 2.07392 2.54854 2.94899 3.21829 3.88998 5.93069 3.71257 285 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 233 3.04593 4.50422 4.57909 3.98350 3.59991 4.15724 4.45784 2.30399 3.31513 1.14849 3.61292 4.16227 4.52432 3.24070 3.15607 3.44873 3.27718 2.50007 5.11381 2.19013 286 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 234 2.99299 3.69019 3.40898 2.46087 2.93049 3.83004 3.45432 3.81353 2.34367 2.50464 4.24206 2.66377 4.21944 2.50914 2.71753 2.74286 3.22432 2.73023 5.67685 2.51235 287 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 235 2.66157 5.49467 2.65603 2.11135 3.82428 3.23935 2.54444 4.32655 2.09626 3.80016 4.53521 2.62147 4.14994 2.71404 2.34943 2.63370 2.91582 3.88558 5.92706 3.62452 288 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 236 2.50621 3.24909 4.89496 4.28650 2.74033 4.19172 4.51979 2.02229 4.09363 1.81199 3.54327 3.46857 4.55644 4.24411 3.25733 2.66531 2.59999 2.16147 5.04509 2.70924 289 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 237 2.43157 5.46319 3.24660 1.75088 4.79518 3.76362 3.39019 3.37756 2.28998 2.63472 4.50738 2.25863 4.15671 2.57794 2.59763 2.95354 3.21606 3.34188 5.90356 4.50116 290 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 238 2.66134 5.49362 2.81703 2.02665 3.69829 2.93952 3.34044 4.32469 2.07490 3.79891 4.53428 2.61162 4.15014 2.42958 2.73606 2.28213 3.21408 2.96589 5.92629 4.51532 291 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 239 2.68974 5.48489 2.87868 1.94575 3.62648 3.75828 3.94572 3.57579 1.80090 3.26050 4.52654 2.89126 4.15167 2.22506 2.89475 2.71105 2.50445 3.87352 5.91981 4.51113 292 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 240 3.02365 4.69463 3.98782 3.41525 3.82455 4.02295 3.44858 2.11394 2.24426 1.69004 2.72300 3.79516 4.40004 3.12803 2.49844 2.94003 3.25480 2.96410 3.85300 4.05715 293 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 241 2.25042 5.51297 2.03998 1.67016 4.85739 3.76322 3.95770 4.34422 2.69665 3.81798 4.55457 2.64627 4.16189 2.70793 2.44706 2.71072 2.66464 3.90341 5.94543 4.53264 294 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 242 2.66141 5.49295 2.63683 2.04019 4.83769 3.75690 3.94404 4.32341 2.14525 3.32563 4.53371 2.50197 3.32286 3.04050 2.12245 2.24781 2.90753 3.28520 5.92581 4.51507 295 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 243 2.42778 4.48495 4.57818 3.98720 3.09637 4.14617 4.45519 2.25856 2.80812 1.38587 3.60083 3.50455 4.51461 4.05951 4.00579 2.58336 2.81939 2.12851 5.09909 3.91070 296 l - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 244 2.98336 5.48424 2.43301 2.16616 3.60254 3.75857 3.94602 4.30832 1.95711 2.93162 4.52598 2.47744 4.15196 2.16693 2.84917 2.94752 2.57962 3.87270 3.82122 4.51090 297 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 245 2.47221 5.49250 2.80463 1.76234 4.83709 2.54497 3.36739 4.32272 2.47857 3.22693 3.52745 2.34550 4.15036 2.70272 2.88412 2.66748 2.91650 3.88288 5.92547 4.51480 298 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 246 2.30032 5.49530 2.58486 1.76965 4.84032 3.75764 3.94517 4.32622 2.09906 3.32646 4.53607 3.22510 4.15153 2.02859 2.91131 2.46363 2.87894 3.88593 5.92788 4.51697 299 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 247 3.04076 4.52796 4.46532 3.14610 3.63086 4.13500 4.42971 1.90120 3.22940 1.16690 3.63838 4.09824 4.50397 3.97959 2.79071 3.41991 3.27212 2.53906 5.13695 3.15414 300 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 248 2.46434 5.49396 2.81624 2.02833 4.83858 2.97653 3.94492 4.32432 2.15288 3.31478 4.53480 2.17852 4.15113 2.33658 3.17288 2.26070 3.21532 3.23860 5.92687 4.51604 301 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04435 5.24192 3.26774 0.61958 0.77255 0.93199 0.50050 249 2.15521 5.44643 3.22864 2.32147 4.77860 3.74603 3.93428 4.25535 2.26859 3.74608 3.65211 2.24722 4.13919 3.03496 2.38294 2.03013 2.54078 3.83014 5.88682 3.62276 302 s - H 2.68698 4.42305 2.77468 2.73074 3.46369 2.40570 3.72575 3.29109 2.67678 2.69402 4.24770 2.90355 2.73820 3.18024 2.89881 2.37878 2.77531 2.98514 4.58557 3.61347 0.13972 2.05781 5.92809 2.37695 0.09743 1.01048 0.45262 250 2.30586 5.15766 2.91874 2.82903 4.39060 2.83762 4.01591 2.72622 2.58314 2.17677 2.88034 2.95918 4.20027 2.71709 2.54771 2.68170 3.20645 3.09520 5.66396 4.33302 317 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 251 3.04136 5.53689 3.27672 1.52606 4.89458 3.79818 3.96724 4.37064 2.01586 3.83533 4.57931 2.32576 4.19166 2.34457 2.14357 3.00216 2.84109 3.93541 5.95056 4.55815 318 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 252 2.49688 5.48145 2.80090 1.68814 4.82717 2.87242 3.92892 4.31357 1.92167 3.78687 4.52212 3.20818 4.13529 2.54867 2.41690 2.59254 2.86254 3.87248 5.91353 4.50216 319 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 253 2.96685 5.47655 2.43043 1.54938 4.82130 3.74037 3.92754 4.30695 2.29122 3.24931 3.46173 2.89597 4.13397 2.33768 2.58886 2.72005 2.74680 3.86703 5.90932 4.49868 320 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 254 2.99908 4.63961 4.02051 3.03186 3.20868 4.01399 3.33139 1.78127 2.47368 2.04221 2.45098 3.81231 4.39056 3.67174 2.83651 2.81504 2.90263 2.90592 5.23171 4.01206 321 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 255 2.36829 5.49132 2.19072 1.90252 4.83621 3.74432 3.93661 4.32295 1.77954 3.28805 4.53253 2.64644 4.14155 2.50228 3.16776 2.59535 3.20990 3.88196 5.92353 4.51116 322 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 256 2.34287 5.47331 2.14744 1.97572 4.81661 3.74089 3.92833 4.30130 2.30248 3.26335 3.60117 3.20903 4.13451 2.23046 2.89491 2.13036 3.19807 3.86301 5.90698 4.49713 323 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 257 2.63270 4.54081 3.45445 2.76457 3.11825 4.07276 3.07791 1.94879 3.60436 1.68672 3.20856 3.20858 4.44514 3.85390 3.84601 3.34630 3.23660 2.07219 5.14556 3.94387 324 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 258 2.38918 5.46858 2.83094 1.99997 3.77417 3.74133 3.92890 4.29349 1.93614 2.94133 4.51021 2.87017 4.13483 2.28558 3.15725 2.28048 2.69536 3.85729 5.90342 4.49462 325 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 259 2.17784 5.46011 2.83241 1.90470 3.87831 3.09818 3.93048 4.27916 1.99768 3.28559 3.51181 3.21287 3.46172 2.68956 3.15956 2.32035 2.86495 3.84696 5.89704 4.49037 326 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 260 2.45654 5.45278 3.22634 2.42830 3.70072 3.74510 3.93289 3.40976 1.67227 3.75349 4.49623 2.63238 4.13827 2.38367 2.40520 2.68847 2.46677 3.83791 5.89149 4.48725 327 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 261 3.06020 4.43548 4.99669 4.38427 2.66989 4.23143 4.56408 1.74094 4.17672 1.46937 2.41786 4.38464 4.59005 4.30945 3.14230 3.09058 3.29204 2.04688 5.05764 3.88507 328 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 262 2.25621 5.47910 2.34415 2.18358 4.82470 3.73990 3.92734 4.31110 2.26610 3.17746 4.51967 2.58206 3.49840 2.21283 2.83600 2.19023 3.19820 3.87004 5.91140 4.50003 329 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 263 2.71644 5.45794 3.22370 1.46826 4.79445 3.74473 3.93289 4.27415 2.08332 3.25123 4.50108 2.78665 4.13831 2.50549 3.16111 2.60825 2.41378 3.19352 5.89570 4.49031 330 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 264 2.06079 3.60595 3.55813 2.32860 4.13414 3.87424 4.09698 2.33337 2.71074 2.62709 4.04045 2.50473 4.25997 3.31197 2.91950 2.72890 2.62868 2.89748 5.49711 3.51107 331 a - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 265 2.74706 5.46818 2.88084 1.53930 4.80856 3.74275 3.93101 4.29126 1.92608 2.89014 3.42705 2.90890 4.13670 2.74081 3.15954 2.21795 3.19973 3.85632 5.90353 4.49534 332 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 266 2.08603 5.48064 2.40554 2.12287 4.82601 3.74096 3.92897 4.31224 1.78608 3.78594 4.52137 2.79469 4.13523 2.27069 2.87551 2.69465 3.20025 3.30005 5.91294 4.50168 333 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 267 2.64731 5.48334 2.91665 1.59551 4.82857 3.74295 3.93156 4.31451 1.83774 3.78837 4.52432 3.21026 4.13784 2.49001 2.86789 2.21104 2.65047 3.87414 5.91547 4.50452 334 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 268 3.58439 4.88958 5.57488 4.98751 3.77453 4.86664 5.23331 1.17682 4.80928 1.31507 3.07671 5.02890 5.14338 4.89256 4.81851 4.20549 3.81504 1.73142 5.59666 3.18233 335 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 269 2.22063 5.47998 2.58553 2.12297 4.82566 3.74031 3.92788 4.31207 1.86439 3.78545 4.52058 2.68382 4.13427 2.23310 2.78678 2.32757 3.19900 3.39458 5.91218 4.50081 336 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 270 2.20286 5.45919 2.90828 1.68471 3.60506 3.74294 3.93082 3.00091 2.42654 3.76127 4.50183 2.87795 4.13627 2.48653 2.75087 2.43948 2.80649 3.84580 5.89638 4.48998 337 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 271 2.98114 5.02051 3.49601 2.93593 3.47607 3.85237 3.27795 3.06254 1.86998 2.09605 4.10375 3.43174 4.23940 2.83092 2.73596 2.39758 2.41740 2.80760 5.55315 4.25451 338 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 272 2.71676 5.47299 3.22372 1.86967 4.81562 3.74591 3.14604 3.51367 1.72334 3.77624 4.51469 2.00589 4.13914 2.68826 2.85522 2.93575 3.20270 3.34458 5.90620 4.49894 339 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 273 2.40034 5.47517 2.90372 1.88081 4.81963 3.22254 3.38514 4.30518 2.31270 3.24885 4.51599 2.93473 4.13339 2.28224 2.89903 2.35991 2.53377 3.22259 5.90821 4.49762 340 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 274 2.25006 5.47371 2.58558 1.66946 3.80488 3.74028 3.25317 4.30256 2.31617 3.34428 4.51472 3.20824 4.13375 2.49940 2.60359 2.59202 2.79168 3.86367 5.90714 4.49698 341 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 275 2.98211 4.98092 2.97738 2.64009 2.91089 3.86482 3.18260 2.38788 2.43919 2.00061 4.06704 3.45888 4.25112 2.82799 2.62682 3.08122 3.21356 2.40747 5.52070 4.23071 342 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 276 2.40841 5.46772 3.21943 2.11683 4.80889 3.23874 3.92928 4.29188 1.90392 3.13515 4.50948 2.44545 4.13540 2.76215 2.18073 2.64627 2.89979 3.15615 5.90263 4.49437 343 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 277 2.71728 5.48088 2.45799 1.71157 4.82602 3.74122 3.92955 4.31216 1.89956 3.78610 4.52169 2.87385 4.13568 2.43040 2.89536 2.45146 3.20085 2.82744 5.91330 4.50206 344 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 278 2.36322 4.44581 4.69694 3.17684 3.54227 4.15698 4.47476 2.02794 3.94362 1.45587 2.41039 4.21897 4.52296 3.21598 4.05296 3.45498 2.88202 2.15625 5.06498 3.88152 345 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 279 2.45081 5.44089 2.66364 1.83501 4.77081 3.74641 3.93513 2.97440 2.26317 3.05533 3.11416 2.39654 4.13956 3.03653 2.88272 2.36290 3.19810 3.82337 5.88274 4.48112 346 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 280 2.23802 5.47659 2.55280 1.83485 4.82108 3.74058 3.92809 4.30662 2.00349 3.24076 4.51749 2.87436 4.13437 3.02470 2.50807 2.44664 2.55142 3.86694 5.90955 4.49894 347 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 281 2.97060 5.42058 3.24413 1.71024 4.74194 3.75350 3.94202 3.38289 2.08794 3.10194 3.71846 3.23098 4.14616 2.18067 2.33475 2.50473 3.20152 3.12366 5.86718 4.47236 348 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03547 5.20575 3.52806 0.61958 0.77255 1.01048 0.45262 282 2.43508 4.81245 3.69830 3.13363 3.96860 3.91362 4.14971 2.07919 2.76071 2.51407 3.90927 3.12001 4.29600 2.67155 2.33576 2.81352 3.21000 1.91590 5.37784 4.12222 349 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00841 5.17869 5.90103 0.61958 0.77255 1.06376 0.42336 283 2.71720 5.46468 2.86452 1.96037 4.80950 3.72775 3.91520 3.53318 2.40306 3.76982 4.50546 2.29330 4.12151 2.11484 2.77544 2.03921 2.80406 3.85520 5.89744 4.48659 350 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00841 5.17869 5.90103 0.61958 0.77255 1.06376 0.42336 284 2.43469 5.49338 3.22977 1.68050 4.84239 3.75795 3.93923 4.32232 1.60028 3.79480 4.53623 3.22630 4.15317 2.49142 2.85789 2.17230 3.22417 3.88683 5.91869 4.51746 351 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00841 5.17869 5.90103 0.61958 0.77255 1.06376 0.42336 285 2.62916 3.41942 4.30148 2.31318 3.62441 4.06813 4.35927 2.08353 3.09428 1.48825 2.92550 3.98719 4.43979 3.08320 3.85286 3.34428 3.22455 2.54241 5.12208 3.92265 352 l - - 2.68630 4.42237 2.77532 2.73135 3.46315 2.40465 3.72507 3.29306 2.67753 2.69341 4.24702 2.90359 2.73752 3.18159 2.89813 2.37884 2.77532 2.98531 4.58489 3.61515 0.30115 1.35753 5.90103 0.09103 2.44171 1.06376 0.42336 286 2.95549 5.46691 2.57548 2.07427 4.81210 3.24271 3.31072 4.29831 2.24160 3.19879 4.50763 2.86123 4.12200 2.15556 3.14389 2.07233 2.37295 3.85763 5.89942 4.48813 354 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00841 5.17869 5.90103 0.61958 0.77255 1.06376 0.42336 287 2.70841 5.47564 3.21308 2.11105 4.82337 3.73748 3.22237 4.30785 1.74502 3.77987 4.51650 2.60200 4.13091 2.29579 2.45892 2.10209 3.19712 3.86791 5.90466 4.49683 355 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00841 5.17869 5.90103 0.61958 0.77255 1.06376 0.42336 288 2.64161 5.45289 2.91046 1.60181 3.80742 3.73051 3.91851 4.27446 1.58896 3.75573 4.49513 2.78514 4.12423 3.01675 2.85727 2.92030 2.79432 3.31366 5.88876 4.48126 356 k - - 2.68621 4.42228 2.77523 2.73127 3.46357 2.40496 3.72498 3.29357 2.67744 2.69358 4.24693 2.90350 2.73743 3.18150 2.89804 2.37890 2.77494 2.98522 4.58480 3.61506 0.04543 3.17787 5.90103 0.65954 0.72792 0.75797 0.63227 289 2.76795 3.60491 4.65026 3.25120 2.96028 4.15698 4.47048 1.97312 3.21642 1.37519 3.58489 4.19838 4.52445 3.24873 3.23673 3.03818 3.26256 2.47465 3.55722 3.89808 359 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 290 2.48134 5.25475 2.02285 2.59202 3.48477 3.80767 3.40893 3.25594 2.34547 2.37640 3.65692 3.32271 4.19834 2.83727 3.26264 2.71995 2.38571 3.59694 5.74432 3.55574 360 d - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 291 2.46574 5.49395 2.84501 2.06169 4.83918 2.58701 3.94365 4.32527 2.28301 3.79930 4.53457 2.60616 3.57642 2.41590 2.91078 2.29307 2.83681 3.35310 5.92653 3.44247 361 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 292 3.03222 4.45709 4.71222 3.43862 3.15042 4.16724 4.48455 2.34256 2.75627 1.26867 3.57382 3.49882 4.53392 4.14044 4.06425 3.46517 2.89982 1.88488 3.57645 3.89025 362 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 293 2.45724 5.49004 2.63222 1.96038 3.54008 3.75726 3.34972 4.31852 2.22316 3.79468 4.53109 2.81607 4.15070 2.52100 2.89362 2.09283 2.94368 3.24221 5.92362 3.64697 363 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 294 2.26495 5.42562 3.26224 2.23342 4.74250 3.76995 3.96009 3.48057 1.86573 2.53996 4.47381 2.67395 4.16270 2.78387 2.92682 2.30368 2.76251 3.15657 5.87552 4.48234 364 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 295 2.53680 5.48834 2.48460 1.79937 3.69531 3.75784 3.94519 4.31533 1.90366 3.17576 4.52964 3.22621 4.15132 2.45893 2.88505 2.68452 2.45221 3.87772 5.92242 4.51292 365 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 296 2.39415 4.63918 4.08737 3.04055 2.90504 4.04572 4.31576 1.89197 2.57006 1.62821 3.74731 3.86326 4.42139 3.17258 2.82109 3.30508 3.25227 2.67988 5.23390 4.01823 366 l - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 297 2.37811 5.48674 3.23486 2.09271 4.82880 3.03575 3.94556 4.31258 1.97493 3.30880 4.52823 2.25617 4.15165 2.79292 2.80839 2.13570 2.92526 3.27000 5.92119 4.51217 367 k - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 298 2.71418 5.50248 2.14993 1.62615 4.84808 3.23234 3.94854 4.33484 2.15171 3.80793 4.54328 3.22591 4.15432 2.57071 2.79636 2.28665 2.82589 3.89346 5.93455 4.52257 368 e - S 2.68620 4.42227 2.77521 2.73125 3.46356 2.40494 3.72496 3.29356 2.67742 2.69357 4.24691 2.90348 2.73741 3.18148 2.89802 2.37888 2.77521 2.98520 4.58479 3.61505 0.04435 3.19874 5.96426 0.32890 1.27196 0.93199 0.50050 299 3.04151 4.44515 4.82719 4.22350 2.75753 4.19034 4.51129 2.62152 2.51440 1.18290 3.55669 4.29181 4.55502 3.28531 4.11513 3.49377 3.27352 2.05091 3.56631 3.30604 370 l - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 300 2.98303 5.49523 2.62833 1.92349 4.84096 3.13147 3.26984 4.32740 2.25620 3.25972 4.53573 2.48328 4.14999 2.11044 2.86136 2.46337 2.94882 3.18035 5.92751 4.51615 371 e - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 301 2.12076 5.48488 2.58742 2.45978 4.82615 2.87894 3.94584 4.30946 2.68204 2.99475 4.52655 2.63714 3.47464 2.12577 2.87560 2.30240 2.80537 3.30964 5.91985 4.51118 372 a - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 302 2.98838 5.50000 2.80185 1.71140 4.84572 3.75956 3.94740 4.33184 2.32305 3.80518 4.54077 2.50874 4.15401 1.94057 2.40448 2.95014 2.55343 3.35103 5.93180 4.52083 373 e - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 303 2.71031 5.16191 2.51076 2.37574 4.39111 3.83200 4.03810 2.28680 2.42407 2.44709 3.26588 3.37142 4.22129 2.81035 2.58282 3.03667 2.92268 2.68382 5.67091 3.54877 374 i - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 304 2.02653 5.43599 2.85076 1.82691 4.75700 3.76768 3.95743 3.50955 2.70219 3.05833 4.48306 2.96593 4.16058 2.74675 2.50566 2.47767 2.80470 2.69222 5.88335 4.48739 375 e - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 305 2.66972 5.37513 2.97580 2.72991 3.63494 3.21222 3.97289 3.33639 2.05660 2.58175 4.42858 2.71344 4.17229 2.73269 2.39604 2.26147 2.76156 2.92589 5.83730 4.45694 376 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 306 2.01292 4.84282 2.81579 3.16042 3.99874 3.94217 3.42820 2.27012 3.12974 1.83017 3.93949 3.01915 4.32481 3.44939 2.63612 3.17330 2.92251 2.82039 5.40852 3.38194 377 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 307 3.01148 5.52266 2.90300 1.91009 4.87091 3.77417 3.96212 4.35590 1.53076 3.82654 4.56405 2.86695 4.17118 2.45621 2.16989 2.42720 3.24219 3.91534 5.95033 4.54174 378 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 308 2.98974 5.44894 3.25860 1.44472 3.67093 3.77051 3.95818 4.24540 2.14835 3.74496 4.49519 3.24633 4.16333 2.46511 2.51944 2.71201 2.88005 2.50932 5.89272 4.49597 379 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 309 2.46634 5.49147 2.91872 2.67727 4.83548 3.17034 3.34688 4.32065 2.50026 3.79626 4.53245 2.69618 3.30191 2.33783 1.93784 1.96925 3.21461 3.31430 5.92475 4.51451 380 r - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 310 2.65828 5.02077 3.53039 2.47878 4.21391 3.87643 4.09377 2.93252 2.25088 1.66266 4.10535 3.46239 4.26309 2.82310 2.66343 3.09126 2.58991 2.81246 5.55661 3.37079 381 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 311 2.38531 5.50098 2.65874 2.31630 4.84696 3.75880 3.25395 4.33357 1.48659 3.80643 4.54164 2.53554 4.15347 2.67615 2.88469 2.30550 3.21923 3.89216 5.93276 4.52118 382 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 312 2.63455 5.39300 2.86291 2.36342 3.29988 3.77648 2.25334 3.11271 2.72136 2.82078 4.44464 2.26579 4.16893 3.07975 2.33126 2.45293 3.21702 3.76150 5.85092 4.46605 383 h - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 313 2.14868 3.74018 2.86477 2.27864 4.61632 3.16749 2.84594 3.46134 2.22451 2.35351 4.39121 3.28638 4.18085 3.10562 2.91201 2.52301 3.21859 3.16825 5.80550 3.64842 384 a - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 314 2.98546 5.40191 2.18244 2.54601 4.70957 3.11951 3.16957 2.55461 2.20475 2.68938 4.45260 3.25819 4.16710 2.70887 2.93301 2.63480 2.83219 2.62675 5.85765 4.47048 385 d - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 315 2.39678 5.49529 2.92837 2.12595 4.84068 3.75728 3.94443 3.42828 2.05679 3.80060 4.53593 2.45417 4.15094 2.18282 2.45472 2.17567 3.21525 3.88611 5.92766 4.51665 386 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 316 2.99009 5.50383 2.83913 1.83081 4.84975 3.28781 3.94895 4.33662 1.78586 3.80932 4.54458 2.09977 4.15486 2.70426 2.76604 2.44254 2.81103 3.89499 5.93559 4.52357 387 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07158 5.24192 2.75212 0.61958 0.77255 0.93199 0.50050 317 2.71578 4.44630 4.64105 3.38399 3.53907 4.14138 4.45591 1.77215 3.89756 1.21700 2.97543 4.18609 3.37124 3.37427 4.02247 3.43714 3.24391 2.46805 5.06331 3.87916 388 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00841 5.17874 5.90108 0.61958 0.77255 1.06366 0.42341 318 2.95899 5.46914 2.92315 1.93585 4.81353 2.81797 3.91901 4.29937 1.61089 3.77410 4.51026 2.62283 4.12470 2.71098 3.14812 2.33578 2.79596 3.19429 5.90202 4.49086 389 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00841 5.17874 5.90108 0.61958 0.77255 1.06366 0.42341 319 2.23714 5.46513 2.86081 2.00686 4.81027 3.72779 3.17861 3.29134 1.74947 3.77036 4.50584 2.54420 4.12144 2.52061 2.85428 2.67212 3.18565 3.85582 5.89767 4.48678 390 k - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00841 5.17874 5.90108 0.61958 0.77255 1.06366 0.42341 320 1.95384 4.47380 4.45048 3.26106 3.57800 4.09625 3.34658 2.10395 3.74519 1.61740 3.58884 4.07461 4.46608 3.96660 3.92809 2.75726 2.83322 2.04430 5.08575 3.89350 391 l - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00841 5.17874 5.90108 0.61958 0.77255 1.06366 0.42341 321 2.98229 5.47043 3.22510 1.41804 4.81179 3.75051 3.93522 4.28959 1.80465 3.77064 3.48255 3.22095 4.14550 2.15670 3.13614 2.61901 2.85959 3.85954 5.90219 4.50113 392 e - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00841 5.17874 5.90108 0.61958 0.77255 0.90541 0.51815 322 2.63088 5.46590 2.82310 2.04898 4.80545 3.74403 3.93176 4.28753 1.55224 3.33068 3.60771 2.69679 4.13747 2.69059 3.16035 2.37998 3.19960 2.90506 5.90187 4.49429 393 k - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 323 2.46546 5.45350 2.86796 1.97334 4.78794 3.74624 3.93438 3.02284 2.46080 3.75421 3.36899 3.21788 4.13946 2.50893 2.12258 2.49667 2.33678 3.83842 5.89256 4.48818 394 e - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 324 3.00625 4.64024 3.22961 3.46759 3.76507 4.02383 4.29099 1.70122 2.59448 1.66945 3.74790 3.82709 4.40014 3.68646 3.08347 2.63257 3.23801 2.23588 5.23440 4.01595 395 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 0.83211 0.57116 325 2.27001 5.47939 2.84817 1.63556 4.81772 3.15753 3.94844 3.52496 1.93306 3.78179 4.52192 3.23018 3.35327 2.57347 3.17766 2.94995 3.21589 2.75867 5.91610 4.50914 396 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 326 2.27208 5.49667 2.67915 1.98087 4.84253 3.23909 3.94422 4.32909 2.04864 3.23941 4.53718 2.48881 4.15063 2.28688 2.79419 2.38523 3.21520 3.88774 5.92881 4.51730 397 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 327 2.21309 5.07432 3.10395 2.39802 3.54259 3.85770 4.07073 2.81384 2.39583 2.14343 3.40122 3.42424 4.24549 2.93185 2.37053 3.06821 2.83144 2.75807 5.60039 4.29313 398 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 328 2.99319 5.48024 3.25095 1.87922 4.81825 3.76873 3.95351 3.15992 1.63109 3.78082 4.52343 3.23971 3.35246 1.99049 2.79862 2.72540 3.22367 3.18400 5.91561 4.51285 399 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 329 2.66176 5.49219 2.95761 2.17431 3.84086 3.75729 2.93918 4.32193 1.75585 3.79711 4.53307 3.22505 4.15080 2.49714 2.80387 1.97936 2.62139 3.88245 5.92525 4.51483 400 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 330 2.99129 5.49296 2.80596 1.45136 4.83554 3.76377 3.36395 3.57593 1.57707 3.35887 4.53475 3.23245 4.15776 3.04829 2.84909 2.64978 3.22218 3.88236 5.92611 4.51850 401 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 331 2.59314 4.48493 4.58184 3.34636 3.58564 4.14732 4.45597 1.52542 2.83903 1.63640 3.11964 4.16233 4.51554 4.06109 3.17637 3.43829 3.26301 2.31422 5.09887 3.27878 402 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 332 2.70806 5.48895 2.65666 2.08137 3.62570 3.75799 3.94561 4.31595 2.03592 3.23413 4.53027 2.95781 4.15164 2.16880 3.17380 1.84438 2.90779 3.87831 5.92303 4.51344 403 s - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 333 2.46595 5.49762 2.86692 1.62973 4.84323 3.21303 3.94539 4.32968 2.03665 3.80309 4.53826 2.19687 4.15164 2.70310 2.76505 2.67981 3.21657 3.35431 5.92986 4.51838 404 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 334 2.47819 4.89229 3.66230 2.50910 4.05781 3.92203 4.15336 2.26455 3.07391 1.71182 3.98582 2.93857 4.30597 2.88234 3.05533 2.51555 2.87861 2.61123 5.45020 4.18341 405 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 335 2.66083 5.37424 3.28770 1.77236 3.72652 3.78091 3.97360 4.12481 1.65477 2.83944 3.70633 3.26995 4.17308 2.51414 3.21272 2.40283 3.21797 3.15629 5.83661 4.45675 406 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 336 2.44199 5.48631 3.23473 2.18149 4.82805 3.25543 3.94599 3.49719 2.05716 3.79018 4.52794 2.46336 2.63483 2.45194 3.17417 2.56142 2.27499 3.87518 5.92103 4.51212 407 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 337 2.26193 5.48123 2.70683 2.07755 4.82100 3.75904 3.94660 4.30321 2.00774 3.27409 3.53036 3.22855 4.15238 2.09632 2.51941 2.71825 3.21445 3.37087 5.91708 3.43959 408 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 338 3.04364 4.42174 4.98118 4.36783 2.38888 4.21094 4.54300 2.04624 3.50461 1.74101 2.75361 4.36472 2.62808 4.29412 4.17603 3.52133 3.27574 1.88088 5.04277 2.73255 409 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 339 2.10057 5.43040 2.92376 1.53163 4.74882 3.76945 3.95983 2.72626 2.70586 3.13587 4.47826 3.24796 4.16252 2.47892 2.87822 2.52672 2.90540 3.80664 5.87939 4.48511 410 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 340 2.69071 5.49519 2.77342 1.76999 4.84001 3.75768 3.25502 4.32585 2.01955 3.80030 4.53601 2.47507 4.15166 3.04194 2.76508 2.06196 3.21614 2.90176 5.92789 4.51699 411 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 341 2.03541 5.03535 3.08649 2.95476 3.30552 3.87014 3.47244 3.06082 2.46435 1.72359 3.36898 3.03047 4.25721 2.66658 3.37993 2.61587 3.22958 3.34355 5.56862 4.27028 412 l - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 342 3.02222 5.53276 2.47281 1.57854 4.88137 3.78034 3.96966 4.36584 1.75590 3.83597 4.57462 3.24682 4.17911 2.34161 2.33687 2.98210 2.82111 3.92574 5.95920 4.55134 413 e - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 343 2.34302 5.47840 2.60924 2.68366 4.81676 2.68455 3.94816 2.81652 1.86663 3.78071 4.52098 3.23066 4.15388 2.27392 2.38997 2.68194 2.79305 3.86546 5.91507 4.50855 414 k - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 344 2.32515 5.48718 2.93849 1.70989 4.82899 3.75858 3.34728 3.61607 2.24421 3.79104 4.52876 3.22727 4.15227 1.99852 3.17453 2.20918 3.21540 3.34725 5.92176 4.51275 415 e - - 2.68558 4.42051 2.77628 2.72726 3.46407 2.40670 3.72494 3.29285 2.67693 2.69284 4.24563 2.90388 2.73879 3.17823 2.89901 2.37983 2.77487 2.98664 4.58649 3.61593 1.53449 0.75226 1.16113 1.90777 0.16065 0.93199 0.50050 345 2.84148 4.38484 4.09174 2.92904 3.49597 3.90535 4.19095 1.94235 2.56909 1.93195 3.49635 3.80004 4.27791 2.94009 3.66696 3.17773 3.07332 2.13124 3.43160 3.10826 427 l - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01146 4.87004 5.59238 0.61958 0.77255 1.47076 0.26104 346 2.36388 5.34782 2.17270 1.80254 4.67056 3.62137 3.83813 4.14330 1.99906 2.32373 4.39810 3.09469 4.03426 2.94571 3.08607 2.84637 3.11437 3.72639 5.79179 4.38822 428 e - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01146 4.87004 5.59238 0.61958 0.77255 1.47076 0.26104 347 2.05139 5.33018 2.47036 2.31387 4.66888 3.60251 3.79444 4.15087 2.19566 3.15833 4.37306 2.72638 3.99899 1.96954 3.02523 2.79711 2.67630 3.71750 5.76616 4.35816 429 q - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01146 4.87004 5.59238 0.61958 0.77255 1.47076 0.26104 348 2.21879 4.63904 3.59954 2.62728 3.79139 3.78514 4.02972 2.78553 2.65209 1.49027 3.73984 3.47368 4.16867 3.31701 3.37786 2.59064 2.69795 2.91803 5.21219 3.96331 430 l - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01146 4.87004 5.59238 0.61958 0.77255 0.75125 0.63824 349 2.60026 4.94849 3.46692 2.43022 4.14054 3.81036 4.02829 2.79422 1.88198 2.06704 3.35477 3.39807 4.19695 3.22765 2.60349 2.75158 2.76345 2.80807 5.48528 4.19171 431 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 350 2.41208 5.38978 3.20966 1.62554 4.71457 3.71964 3.90430 3.54201 1.77500 2.87081 4.43725 3.19685 4.11265 2.18444 3.10958 2.91498 3.17152 3.76925 5.83189 4.44071 432 e - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 351 2.91995 5.40034 2.83499 2.08025 4.73287 3.21117 3.88682 3.30957 2.62651 3.11434 4.44433 2.83388 4.09160 1.96559 2.37919 2.63174 2.48671 3.09606 5.84059 4.43735 433 q - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 352 2.59388 4.64390 3.85677 2.48169 3.77714 3.93261 4.18884 3.13705 2.30562 1.70545 3.74819 3.68408 4.31125 3.53622 3.58126 2.74249 3.17608 2.16740 3.90201 2.67985 434 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 353 2.67835 5.43740 2.76714 1.90827 4.78334 3.26414 3.88347 4.26996 1.96275 3.74284 4.47809 2.35609 4.08973 2.23079 2.48893 2.88585 2.73056 3.82856 5.86918 4.45757 435 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 354 2.59671 5.34320 3.20688 2.45199 4.65297 3.21568 3.90052 3.46250 1.80521 3.63324 3.51947 3.19215 4.10208 2.25870 2.29151 2.68722 2.74016 3.11454 5.79754 3.53766 436 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 355 2.18546 3.71207 2.76375 1.85602 4.73460 3.69830 3.88658 4.21211 2.06221 2.93212 4.44542 3.17052 4.09150 2.64562 2.55732 2.54863 3.15119 3.22276 5.84147 4.43798 437 e - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 356 3.08043 5.52392 3.36010 2.35068 4.89402 3.83110 3.95758 4.34622 1.79915 2.16680 4.56991 2.78542 4.21465 2.07858 1.90007 3.04614 3.29803 3.93060 5.91350 4.55912 438 k - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 357 2.30677 5.21838 3.27355 1.49376 4.48383 3.73776 3.93543 2.86265 2.71106 3.09390 4.28112 3.24649 4.12887 2.53871 2.78419 2.61466 3.15737 3.56550 5.70160 2.95421 439 e - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 358 1.77779 5.30461 3.22616 1.93719 4.59996 3.71774 3.91063 3.28911 2.47748 3.00877 4.35879 3.20785 4.10984 2.28602 2.81591 2.67351 2.76754 3.25150 5.76819 4.38975 440 a - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 359 2.30622 4.53744 4.08532 3.10744 2.66012 3.99010 4.26667 3.00627 2.30099 1.43660 3.64713 3.83726 4.36471 3.70485 3.71657 2.87768 3.18146 2.55322 5.13562 3.04641 441 l - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 360 2.59794 5.43060 2.32450 1.99187 4.77565 3.22419 3.88063 3.59684 1.95730 3.73583 4.47131 3.16082 4.08702 2.41724 2.54854 2.42463 2.76974 3.82124 5.86323 4.45230 442 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 361 2.55227 5.45083 2.31495 1.72129 4.79392 2.45493 3.18704 4.28019 1.96021 3.23990 4.49290 2.86752 4.10046 2.99499 3.13176 2.90020 3.17166 3.84058 5.88374 4.47114 443 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 362 2.64926 5.42122 2.85705 1.95619 4.76227 3.69546 3.32435 2.75860 2.45402 3.72465 4.46301 2.47926 4.08894 2.28543 2.12326 2.88472 3.15169 3.30943 5.85616 4.44791 444 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 363 2.38229 4.73011 3.71486 2.72832 3.87816 3.20416 4.13466 2.09305 2.71847 2.18649 2.89546 2.71242 4.27282 3.42727 2.73367 3.12746 3.17135 2.72387 5.30236 3.19815 445 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 364 2.38419 5.42320 2.20701 2.11791 4.76513 3.69479 3.88222 3.37636 2.20843 3.12978 4.46473 3.16346 4.08831 2.34633 2.54909 2.23040 3.15134 3.81216 5.85766 4.44873 446 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 365 2.40903 5.43244 2.70917 1.77540 4.77739 3.69444 3.88221 4.26320 2.37556 3.19479 4.47328 2.85128 4.08856 2.38794 2.23919 2.25884 3.15331 3.82304 5.86495 4.45412 447 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 366 2.57557 4.37451 4.67618 3.32104 2.06410 4.09764 4.41740 2.47465 3.33277 1.68646 2.82656 4.17555 4.46390 4.08829 4.00605 2.52937 3.18958 2.40062 4.99202 2.72159 448 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 367 1.90828 5.42424 2.77854 1.87264 4.76330 3.69870 3.88920 4.24519 1.79808 3.72680 3.32061 3.16826 4.09422 2.73377 3.11863 2.40264 3.15871 3.81175 5.86022 4.45253 449 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 368 2.67892 5.43859 2.77911 1.99565 4.78427 3.23455 3.88460 4.27093 2.21583 3.74398 4.47940 2.77596 4.09052 2.19222 2.47316 1.90387 3.15692 3.82962 5.87053 4.45871 450 s - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 369 2.20160 5.42472 3.20050 2.18169 4.76477 3.71584 3.89679 3.45445 1.51741 3.72394 4.46873 2.74412 4.10848 2.99690 2.19394 2.64291 3.17253 3.81309 5.85705 4.45862 451 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 370 2.92047 5.37457 2.48625 2.11668 4.69658 3.01269 3.89284 3.04033 2.63717 3.66997 3.61241 3.18005 4.09613 2.50308 2.85992 1.98376 2.39188 3.75276 5.82130 3.36574 452 s - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 371 2.95934 5.47754 2.44868 1.33051 4.82172 3.17990 3.91168 4.31004 2.22105 3.78202 4.52020 2.88484 4.11319 2.51799 2.74390 2.59109 3.19230 3.86805 5.90860 4.49313 453 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06664 5.10253 2.84059 0.61958 0.77255 1.19365 0.36113 372 1.95888 5.36454 3.19220 2.63338 4.69046 2.89751 2.67712 4.15668 2.32573 2.82094 4.41203 2.77206 4.08889 2.70558 1.96664 2.89156 3.14733 3.74524 5.80520 4.41577 454 a - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00961 5.04549 5.76784 0.61958 0.77255 1.27554 0.32751 373 2.92721 4.43510 2.05527 3.69942 2.59785 4.01084 3.27102 2.33971 3.59611 1.73238 3.54711 3.94846 3.26183 3.83263 3.81112 3.29001 3.15918 2.42735 3.47664 3.83718 455 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00961 5.04549 5.76784 0.61958 0.77255 1.02749 0.44302 374 2.94001 5.29805 3.25588 2.69617 4.58986 3.73608 3.92338 4.03525 1.60475 2.39666 4.35459 2.89042 4.12692 2.77182 2.53397 2.24384 2.74693 2.80358 5.76156 4.39278 456 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 375 2.02658 5.10813 3.33972 2.14898 4.34076 3.76282 3.96809 3.29934 2.77398 2.84991 4.18048 2.56207 4.15234 2.51729 3.23538 2.69710 2.56338 3.08017 2.72684 4.28409 457 a - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 376 2.41722 5.30644 2.89395 1.92115 4.60246 3.71667 3.90972 2.85355 2.41278 2.24361 4.36035 2.76105 4.10885 3.02470 2.63951 2.63896 2.88422 3.19023 5.76964 4.39041 458 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 377 2.92751 5.08268 3.35732 2.13281 3.61223 3.76952 2.78606 2.81849 2.57263 2.73480 4.15710 3.31272 4.15860 2.22801 3.24816 2.38043 2.53358 2.91109 5.59430 3.50758 459 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 378 2.41539 5.40560 2.31217 2.01999 3.72383 3.26705 3.88547 3.37006 2.36272 3.70649 3.55810 2.48931 4.09054 2.98518 2.73512 2.56111 2.51999 3.79069 5.84450 4.43984 460 e - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 379 2.94756 5.46132 2.44355 1.30233 4.80503 2.84037 3.90269 4.29195 2.36979 3.76565 4.50359 2.83340 4.10572 2.64611 2.75337 2.90719 3.17993 3.32112 5.89327 4.47984 461 e - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 380 2.95299 4.69450 3.79709 2.77295 3.83521 3.92128 3.28529 1.80930 2.59786 1.71578 3.79569 3.64216 4.30069 2.57696 3.51773 3.16504 3.18392 2.49453 5.27171 4.03467 462 l - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03940 5.10253 3.42483 0.61958 0.77255 1.19365 0.36113 381 2.38108 5.40140 2.64380 1.89479 4.73880 3.68402 3.87279 4.21943 2.00103 3.21166 4.44424 3.15438 4.07802 2.43145 3.10222 2.20306 3.14011 2.74919 5.83860 4.43218 463 e - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00935 5.07248 5.79482 0.61958 0.77255 1.23821 0.34235 382 2.92033 5.43230 2.50914 2.13434 4.77782 3.68620 3.87719 4.26395 1.73794 3.73710 4.47362 2.53846 4.08314 2.97428 2.25513 2.21973 2.71946 3.82334 5.86365 4.45239 464 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00935 5.07248 5.79482 0.61958 0.77255 1.23821 0.34235 383 2.66920 5.33904 3.18972 1.90656 4.65225 3.69481 3.88531 3.34970 2.08807 3.02858 4.38826 2.55320 4.08746 2.99301 2.73188 2.63842 2.14243 3.71245 5.79117 3.34689 465 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00935 5.07248 5.79482 0.61958 0.77255 1.23821 0.34235 384 2.91862 4.90370 3.04614 2.91901 3.47029 3.20144 3.38444 3.01534 2.55011 2.28793 3.37997 2.54098 4.19145 2.88423 2.85008 2.68086 3.15010 2.77064 3.58832 2.82281 466 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00935 5.07248 5.79482 0.61958 0.77255 1.23821 0.34235 385 1.74039 3.58740 3.18604 2.18015 4.66224 3.00011 3.29301 4.12811 2.39887 3.63900 3.61212 2.76832 4.08600 2.99015 2.82241 2.17300 3.13912 3.72116 5.79670 4.40415 467 a - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00935 5.07248 5.79482 0.61958 0.77255 1.23821 0.34235 386 2.63099 5.40830 2.77026 2.26605 4.74957 2.78581 3.86919 4.23286 2.39817 3.05359 4.44999 3.15052 2.96539 1.98380 2.78673 2.17095 3.13785 3.32614 5.84324 4.43459 468 q - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00935 5.07248 5.79482 0.61958 0.77255 1.23821 0.34235 387 2.48337 5.07655 2.92806 2.48972 4.30414 3.75408 3.15401 2.31185 2.46133 1.98524 4.15037 2.90553 4.14330 2.80503 3.23076 2.95919 2.77383 3.40239 3.71212 4.26035 469 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.21562 5.07248 1.67297 0.61958 0.77255 1.23821 0.34235 388 2.83041 5.33048 2.68923 2.25314 4.67243 3.11215 3.78981 4.15484 2.07557 2.73960 4.37249 3.07173 3.99692 2.33156 2.13520 2.29049 3.06131 3.71956 5.76398 4.35679 470 k - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01148 4.86835 5.59069 0.61958 0.77255 0.74951 0.63980 389 2.59923 5.43280 2.11370 2.14183 4.77673 3.16883 3.88408 4.26229 2.09663 2.75623 4.47395 2.33934 4.08975 2.62720 3.11339 2.58070 2.84339 3.82287 5.86596 4.45505 471 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 390 2.92302 5.43086 3.17076 1.73002 4.77548 3.17013 3.88268 4.26040 2.12744 3.73544 4.47189 2.75244 4.08965 2.16315 2.52235 2.39390 2.86307 3.82131 5.86330 3.37653 472 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 391 2.30571 4.36071 4.88337 4.27290 2.60541 4.14375 4.47430 2.28076 4.07158 1.21549 3.46731 4.28648 4.50610 4.21283 4.10075 2.89095 3.21070 2.15261 4.98233 3.15066 473 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 392 2.21661 5.28577 2.93977 2.50205 4.57440 3.72087 3.91505 3.25265 2.67676 3.56665 3.40620 2.03711 4.11281 2.05179 3.15784 2.65008 2.72621 3.18906 5.75382 3.52194 474 n - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 393 2.64434 5.43074 2.85406 1.80625 4.77593 3.09270 3.24311 4.26193 2.19782 3.23826 4.47141 3.16075 3.28973 2.72741 2.24662 2.26301 3.15108 3.82145 5.86327 4.45232 475 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 394 2.42629 5.32489 3.22040 2.22898 4.62736 3.05586 3.25062 4.08340 2.40807 2.34348 4.37726 3.20309 4.10867 2.09214 2.59218 2.91004 3.15618 2.52029 5.78335 4.40117 476 q - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 395 2.42227 5.37113 2.87372 2.18187 4.69183 3.05351 3.89357 4.16094 1.99234 2.76944 3.58831 3.18132 4.09670 2.99832 2.29639 2.52777 2.85966 2.85563 5.81867 4.42295 477 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 396 2.02326 5.41210 2.85561 2.10839 4.74631 3.06500 3.89474 4.22442 2.11332 3.71348 3.59966 3.17380 4.09797 2.99563 3.12766 1.66162 3.16120 3.79735 5.85306 4.44852 478 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 397 2.92795 5.29931 3.23600 1.76328 4.59199 3.72383 3.91553 3.20731 2.16645 3.06586 3.27777 3.21577 4.11561 1.91881 3.14809 2.91893 2.34644 3.66099 5.76381 4.38899 479 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 398 2.32826 3.46330 4.84671 4.23870 3.45717 4.13746 4.46815 2.44667 3.35806 1.31480 2.39649 4.26878 4.50089 4.19398 4.08671 3.44540 2.74580 2.06335 4.98922 3.81119 480 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 399 2.40119 5.43689 2.56828 1.94688 4.78256 3.69492 3.88362 4.26904 2.24697 3.74225 4.47765 2.82665 4.08978 1.89008 2.44288 2.64128 2.88762 3.82790 5.86887 4.45732 481 q - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 400 2.59610 5.30926 2.58455 2.07591 4.60635 3.71598 3.90885 2.92363 2.66566 3.04988 3.00606 2.66344 4.10817 2.28940 2.69448 2.90945 2.81281 2.81330 5.77178 4.39179 482 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 401 2.09432 5.39358 2.48999 1.92559 4.72253 3.70092 3.89023 4.19724 2.22888 2.34976 4.43862 3.17477 4.09448 2.99209 2.73780 2.39777 3.15325 3.77555 5.83588 3.61806 483 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 402 2.66878 5.30266 2.87104 2.04043 4.59715 3.71898 3.91174 2.57649 2.27200 2.30775 4.35709 3.20959 4.11103 2.55575 2.30239 2.91312 3.15474 3.07125 5.76662 4.38906 484 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 403 2.57123 5.37240 3.19364 1.79675 4.69348 3.70447 3.89435 4.16258 2.40825 2.99377 4.41974 2.21943 4.09754 2.99910 2.86016 2.07862 2.74418 2.92761 5.81987 4.42421 485 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 404 2.92042 5.39194 2.28808 1.84581 4.72095 3.70020 3.88898 4.19566 2.26399 2.89766 3.31560 3.17409 4.09333 2.99072 2.53001 2.20101 2.84353 3.09029 5.83431 4.43336 486 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 405 2.11446 4.37642 4.78072 4.17599 2.56732 4.12937 4.45399 2.04467 3.99496 1.39480 3.06097 4.23754 4.49237 3.21432 3.35003 3.43389 3.20876 2.36861 4.99444 3.81656 487 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 406 2.66745 5.43271 2.39151 1.97118 4.77828 3.22386 3.88083 4.26472 2.37505 3.73819 4.47329 2.19864 4.08713 2.44386 2.71644 2.37743 2.79372 3.82363 5.86502 3.69066 488 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 407 2.91950 5.42303 2.48320 2.10497 4.76515 3.69432 3.88164 3.55292 2.23070 2.79974 3.65178 2.47019 4.08773 2.34637 2.37496 2.59885 2.84153 3.81209 5.85746 4.44836 489 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 408 2.64186 5.19410 2.32905 2.17623 4.45219 3.28716 3.94079 3.32722 2.49091 2.07770 3.36673 3.25524 4.13204 2.68701 3.19535 2.60583 3.15578 2.91699 5.68267 3.58032 490 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 409 2.44836 4.81897 3.59876 2.48156 3.10181 3.85494 4.08679 2.59505 2.03372 2.14583 3.91275 3.02881 4.23874 2.93485 3.41718 3.08135 2.75573 2.70618 5.37757 3.23082 491 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 410 2.22948 5.42104 2.58065 2.14430 3.67594 3.69460 3.88207 3.37542 1.94181 3.72469 4.46271 2.86976 4.08801 2.75138 2.50178 2.38884 2.75986 3.80963 5.85600 4.44737 492 k - X 2.68627 4.42359 2.77426 2.72886 3.46488 2.40619 3.72496 3.29165 2.67706 2.69244 4.24479 2.90422 2.73842 3.18068 2.89733 2.37900 2.77654 2.98652 4.58611 3.61637 0.77062 0.70824 3.10629 1.75160 0.19055 1.19365 0.36113 411 2.90196 5.40618 2.84857 1.85432 4.74884 3.67637 3.86344 4.23281 2.10050 3.06745 3.44281 2.74960 4.06981 2.73228 2.06460 2.50298 2.75480 3.79554 5.84012 4.43104 507 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00947 5.05981 5.78216 0.61958 0.77255 0.94397 0.49279 412 2.57836 4.54293 4.12250 3.10052 3.65915 4.00964 3.51133 1.91854 3.02781 1.73987 2.69646 3.86616 4.38382 3.08072 3.26286 3.27547 2.76186 2.34089 5.14261 3.93375 508 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00881 5.13238 5.85473 0.61958 0.77255 1.14588 0.38264 413 1.97870 5.53167 2.77561 1.43606 4.86512 3.74010 3.97079 4.35105 2.50183 3.83208 4.57974 1.97529 4.16316 3.07560 3.23488 2.97956 3.25942 3.91696 5.96749 3.53869 509 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00881 5.13238 5.85473 0.61958 0.77255 1.14588 0.38264 414 2.48783 5.44009 2.40101 2.17466 4.78386 3.70678 3.11387 4.26889 2.22497 2.87286 4.48109 2.90674 4.10023 2.44759 2.45603 2.39927 3.16371 3.35711 5.87354 3.61848 510 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00881 5.13238 5.85473 0.61958 0.77255 0.95333 0.48687 415 2.24425 3.59895 4.14127 2.61736 2.99752 2.75693 4.30906 2.73934 3.48978 1.36637 3.67502 3.24423 4.40399 3.75563 3.76582 2.92959 3.21671 2.82574 5.16443 3.95542 511 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00846 5.17216 5.89451 0.61958 0.77255 1.07598 0.41698 416 2.62905 5.42517 3.21623 2.29563 4.75491 2.84265 3.92031 3.00682 1.83091 2.78296 4.46997 2.54211 4.12502 2.48725 2.77819 2.92211 2.49604 3.80757 5.86694 4.46590 512 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00846 5.17216 5.89451 0.61958 0.77255 1.07598 0.41698 417 2.73041 5.46261 2.49447 2.43736 4.80823 3.72417 3.91120 4.29456 1.91342 3.76809 3.47625 2.49926 3.32106 2.15535 2.49234 2.46996 2.87514 3.85355 5.89492 4.48369 513 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00846 5.17216 5.89451 0.61958 0.77255 1.07598 0.41698 418 2.67877 5.45025 2.90807 2.02673 4.79060 3.72669 3.91406 3.40640 1.89198 3.13969 3.59467 2.81371 4.12003 2.76262 1.95042 2.59091 3.18235 3.83836 5.88567 4.47782 514 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00846 5.17216 5.89451 0.61958 0.77255 0.90544 0.51812 419 2.34254 4.58172 3.29574 3.12766 3.18432 4.04810 4.32693 1.97407 3.04662 1.56882 3.69189 3.90423 4.42232 3.00887 3.78370 3.31391 3.23468 2.14823 5.18174 3.97277 515 l - X 2.68626 4.42233 2.77528 2.73132 3.46362 2.40474 3.72503 3.29362 2.67749 2.69363 4.24698 2.90314 2.73748 3.18155 2.89772 2.37895 2.77528 2.98527 4.58485 3.61511 0.09727 2.40771 5.92809 0.67412 0.71255 0.82204 0.57899 420 2.53774 5.48469 2.53757 1.92982 4.82593 3.17207 3.94576 3.04307 1.97705 3.25214 4.52636 2.93476 3.02965 2.70454 3.17412 2.68348 2.82358 3.32355 5.91968 4.51103 518 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 421 2.98447 5.49352 2.54813 1.73082 4.83790 3.32880 3.94525 3.37143 2.14539 3.79845 4.53444 3.22541 4.15152 2.70324 2.67990 2.19793 2.24336 3.88381 5.92651 4.51597 519 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 422 2.75038 4.51465 4.45757 3.87192 3.61962 4.12506 2.84398 2.03013 3.21572 1.59174 3.62931 4.09290 4.49525 3.98254 3.94764 2.61843 2.09891 2.27112 5.12552 3.93211 520 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 423 2.99561 5.50330 2.93198 1.81287 4.84948 3.76602 3.95154 3.44443 1.56741 3.80738 4.54444 3.23360 4.16011 2.16897 2.60068 2.42105 3.22626 3.89470 5.93364 4.52532 521 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 424 2.16497 5.48818 2.95866 1.78817 4.83089 2.77927 3.94505 4.31519 2.42118 3.79245 3.58833 3.22608 3.44826 2.35714 2.76563 2.32996 3.21430 3.22121 5.92228 4.51275 522 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 425 2.74842 5.49800 2.96107 1.70443 4.84422 3.75757 3.34632 4.33080 2.02153 3.80358 4.53847 2.87080 4.15138 2.33278 2.24142 2.46882 2.83400 3.88928 5.92976 4.51838 523 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 426 4.14278 5.35132 6.18706 5.63634 2.99583 5.60352 6.01274 1.41246 5.51594 0.86440 3.69071 5.77771 5.70813 5.47383 5.49870 4.99944 4.36652 1.70820 6.10108 5.07741 524 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 427 2.99374 5.50072 2.93199 1.45514 4.84395 3.76261 3.38752 4.32870 1.88650 2.67635 4.54234 2.72535 4.15857 2.71517 3.18044 2.95604 2.58834 3.89047 5.93376 4.52364 525 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 428 2.38688 5.49797 2.56850 1.97123 4.84332 3.75817 3.94630 4.32954 1.99062 3.80327 4.53874 3.22543 4.15253 2.31317 2.88553 2.27155 2.23179 3.88880 5.93029 4.51903 526 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 429 2.50922 4.86850 3.69122 2.71042 2.63663 3.93152 4.16567 3.40312 1.93166 2.11755 2.90432 3.58455 4.31482 2.68508 3.50164 2.74396 2.89028 2.52209 5.43017 4.16839 527 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 430 2.71085 5.42966 2.61417 1.96446 3.66458 3.76885 3.95888 3.61026 2.46027 2.80294 3.50308 2.93952 4.16166 2.46147 2.47013 2.72771 2.63859 2.89259 5.87857 4.48421 528 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 431 2.33581 5.47274 2.69709 2.42400 3.59771 2.35969 3.94851 4.28864 2.47481 3.21294 4.51574 2.93637 4.15378 2.71692 2.62041 2.11250 2.62254 3.27077 5.91079 4.50526 529 s - X 2.68624 4.42231 2.77525 2.73129 3.46360 2.40519 3.72500 3.29297 2.67719 2.69361 4.24695 2.90352 2.73745 3.18152 2.89806 2.37893 2.77525 2.98490 4.58483 3.61509 0.17827 2.13407 3.10262 0.16351 1.89151 0.93199 0.50050 432 2.25398 5.47658 2.20520 1.91632 4.82143 3.73772 3.25481 4.30743 2.47552 3.78172 4.51744 3.20512 4.13213 2.71292 2.77507 2.09839 2.41897 3.86713 5.90922 4.49808 531 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00824 5.19863 5.92098 0.61958 0.77255 1.02491 0.44446 433 2.29339 4.92533 3.57928 3.01784 4.10209 3.13284 4.10451 2.26878 2.26720 2.42904 4.01513 2.68634 4.26461 2.86889 3.07739 3.10024 2.85756 2.73658 5.47411 2.67772 532 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00824 5.19863 5.92098 0.61958 0.77255 1.02491 0.44446 434 2.62585 5.47495 2.64968 1.89736 4.82065 2.76398 3.32626 3.42684 1.91078 3.78048 4.51546 2.90334 4.12977 2.69373 2.51465 2.64690 2.87480 3.86593 5.90723 4.49590 533 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00824 5.19863 5.92098 0.61958 0.77255 1.02491 0.44446 435 2.71965 5.46974 2.60431 1.48437 4.81291 3.73783 3.92519 4.29744 2.18774 2.90409 4.51096 3.20603 3.43776 2.68368 2.46316 2.69120 3.19495 3.28995 5.90345 4.49377 534 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00824 5.19863 5.92098 0.61958 0.77255 1.02491 0.44446 436 2.69025 5.35744 2.62479 2.23700 3.52976 3.75899 3.29611 3.21881 2.23874 2.01787 3.61075 2.46372 4.15122 3.06542 2.90004 2.66486 3.19675 3.72289 5.81894 4.43786 535 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00824 5.19863 5.92098 0.61958 0.77255 1.02491 0.44446 437 2.96281 5.47230 2.50867 2.20037 4.81692 3.73668 3.92378 3.64963 2.13950 3.77737 4.51310 2.33503 4.13016 2.06396 2.41549 2.66210 2.87475 3.28635 5.90523 3.60362 536 q - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00824 5.19863 5.92098 0.61958 0.77255 1.02491 0.44446 438 2.54917 5.46115 2.31535 2.02163 3.58025 3.73937 3.92758 4.28226 2.02677 2.92725 4.50341 2.66351 4.13310 2.68571 3.15670 2.92909 2.12262 3.84863 5.89730 4.48978 537 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00824 5.19863 5.92098 0.61958 0.77255 0.80393 0.59342 439 2.54411 5.48728 3.24108 1.62245 4.82899 3.15744 2.96964 3.61116 2.14319 3.19161 4.52915 3.23172 4.15573 2.07956 2.57707 2.95221 3.21880 3.87619 5.92118 4.51423 538 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 440 3.03395 4.45125 4.75039 2.91019 3.08375 3.27517 4.49370 1.88532 3.26375 1.37479 3.56783 4.25110 4.54023 4.16358 4.08150 3.47393 3.26607 2.11301 5.06899 2.85566 539 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 441 2.60872 5.35904 2.85365 1.93216 4.65080 3.78354 3.97719 3.29924 2.23469 3.10384 3.47621 2.21485 4.17555 3.09416 3.21894 2.22016 3.21781 3.13096 4.06866 3.53467 540 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 442 2.27265 5.50005 2.18984 1.96354 4.84580 3.15529 3.23150 4.33258 2.13610 3.80562 4.54069 2.89030 4.15252 2.54728 3.17525 2.48967 2.54886 3.89108 5.93217 4.52025 541 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 443 3.03562 3.52373 4.47842 3.89101 3.62180 4.13462 4.43478 2.12946 2.66361 1.19942 3.63071 3.35879 4.50399 2.88097 3.94980 3.41987 3.26754 2.28079 5.12958 3.93710 542 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 444 2.61103 5.49712 2.59544 1.99306 4.84303 3.75767 3.94477 4.32938 1.83690 3.32778 4.53768 2.44921 4.15144 2.53829 2.34088 2.94685 2.55089 3.88824 5.92908 4.51791 543 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 445 2.98544 5.49135 3.23517 2.01591 4.83498 3.75928 3.94607 4.31939 1.80134 3.79567 4.53257 2.67275 3.32253 2.12964 2.87500 2.63577 2.43696 2.85597 5.92458 4.51525 544 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 446 2.98448 5.48870 3.23555 1.72235 4.83146 3.75893 3.25502 4.31541 2.01661 3.79275 4.53007 2.87280 4.15230 2.50878 2.73583 2.61000 2.26419 3.37416 5.92254 3.10506 545 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 447 3.03827 3.47757 4.93372 4.32313 2.92485 4.20033 3.39923 1.74638 2.92568 1.25568 3.53939 4.33996 4.56431 4.26667 4.15491 3.50875 3.27040 2.39433 5.04292 3.27151 546 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 448 2.98301 5.49537 2.06517 2.01896 4.84115 3.28881 3.94347 4.32763 2.26537 3.80095 3.70158 2.53478 3.53255 2.45714 2.85089 2.31562 2.89298 3.88639 5.92762 3.58348 547 e - X 2.68630 4.42066 2.77532 2.73135 3.46366 2.40525 3.72507 3.29366 2.67753 2.69367 4.24702 2.90359 2.73720 3.18159 2.89776 2.37877 2.77499 2.98531 4.58287 3.61515 0.04817 3.11314 5.96426 1.43989 0.27044 0.93199 0.50050 449 2.67046 5.49013 2.43672 2.01907 3.74254 3.75740 3.94465 4.31853 2.06300 3.79474 4.53121 3.22545 4.15087 2.50251 2.61265 2.13943 2.41095 3.36421 5.92372 4.51371 554 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 450 2.73982 5.04317 3.12079 2.94802 4.24168 3.86763 3.35265 3.14654 2.58581 1.77989 4.12599 3.05611 4.25484 3.27372 2.92225 2.30645 2.12643 3.03408 3.68393 4.27491 555 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 451 2.66371 5.48035 3.24360 2.12773 4.81901 3.76375 3.95015 4.29922 1.65112 2.58116 4.52303 2.32356 4.15692 2.35064 2.84665 2.73806 3.21898 3.21310 5.91615 4.51091 556 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 452 2.12689 5.49105 2.18108 2.24832 4.83446 2.71471 3.94548 4.31934 2.49520 2.87777 4.53220 2.95230 4.15155 2.76516 2.85417 2.11763 2.83445 3.88081 5.92469 4.51460 557 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 453 2.47324 5.47395 2.63277 1.98221 4.81064 3.24334 3.94822 3.11138 2.01307 2.79879 3.16544 2.90679 4.15356 2.75925 2.85146 2.69398 2.80841 3.86008 5.91169 4.50585 558 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 454 3.02583 4.62462 4.13701 3.56117 3.10633 4.06009 2.84804 2.76361 2.57994 1.40807 2.84240 3.89570 4.43462 3.75826 2.29876 3.32314 2.74326 2.88720 5.22080 4.00894 559 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 455 2.66156 5.48744 2.84681 2.47822 4.82987 3.75787 3.94517 4.31395 1.52243 3.79158 3.76024 2.62998 4.15128 2.75583 2.52965 2.31405 2.79288 3.30293 5.92169 3.67289 560 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 456 2.74294 5.48407 2.93899 1.48731 4.82281 3.76232 3.95119 3.30914 1.96719 3.16951 4.52668 3.23214 4.15674 1.99942 3.17898 2.71484 3.21995 3.87134 5.92016 4.51321 561 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 457 2.00420 4.98476 3.56326 2.77066 4.16973 3.21826 4.10907 3.09385 2.68082 1.62161 4.07193 3.06631 4.27400 2.95010 2.66547 3.10566 3.23244 2.73362 5.52702 3.46018 562 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 458 2.74008 5.42981 2.63423 1.83885 4.74827 3.23857 3.95913 4.21591 1.98937 3.09393 4.47757 3.24749 4.16189 3.06473 3.19300 2.14591 3.21602 3.19461 2.82909 3.65759 563 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 459 2.13344 5.48628 3.23617 1.91778 3.72664 3.75902 3.20861 4.31145 1.94348 3.78998 4.52787 2.87317 4.15236 2.50917 2.32379 2.94801 2.80567 3.87518 5.92075 3.66749 564 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 460 2.50725 5.49714 2.34731 1.60350 4.84142 3.75945 3.94802 4.32687 1.86758 3.27978 4.53823 2.45557 4.15411 3.04489 2.79538 2.95030 3.21930 3.88740 5.92993 3.67304 565 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 461 3.02675 3.54177 4.40282 2.11777 2.70495 4.11435 4.41063 2.49740 3.15883 1.49829 3.64196 4.06074 3.51681 3.94631 3.17348 3.39478 3.25874 2.16477 5.13704 3.94110 566 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 462 2.27239 5.46753 3.24286 2.22884 3.24150 3.25693 3.94976 4.27972 2.05769 3.76807 4.51112 2.93015 2.90589 2.50145 2.92176 2.43490 2.57806 2.95195 5.90691 4.50276 567 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 463 2.98306 5.49186 2.92941 1.90157 4.83619 3.75708 3.27008 3.60408 1.80960 3.17867 4.53272 2.95694 4.15053 2.53226 2.63776 2.28957 2.80546 3.88210 5.92495 3.64737 568 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 464 2.46727 4.56377 4.51520 3.92648 3.63985 4.18101 4.47702 2.16896 2.92583 1.03630 3.05935 4.14766 4.54540 2.93695 3.96942 3.46749 3.31337 2.79043 5.17113 3.98389 569 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04258 5.24192 3.31320 0.61958 0.77255 0.93199 0.50050 465 2.96914 5.47928 2.83007 2.08691 4.82459 3.74224 3.25897 4.31027 2.14784 3.78434 4.52003 3.20972 4.13584 1.82644 2.38309 2.65233 2.31274 3.36465 5.91149 4.50103 570 q - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00817 5.20750 5.92985 0.61958 0.77255 1.00688 0.45469 466 2.05382 5.46799 2.85829 2.13253 4.80555 3.74633 3.93753 4.28664 2.67704 2.90479 4.51126 2.47225 4.14193 2.38018 3.16922 1.82608 2.79442 3.85472 5.90534 4.49816 571 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00817 5.20750 5.92985 0.61958 0.77255 1.00688 0.45469 467 2.64524 5.46912 2.46876 1.95785 4.81046 3.74223 3.36840 3.42477 2.01617 3.77280 4.51079 3.21112 4.13573 2.34817 3.15813 2.66743 2.17397 3.18063 5.90403 4.49532 572 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00817 5.20750 5.92985 0.61958 0.77255 1.00688 0.45469 468 2.61850 4.56102 4.23143 2.46028 3.18079 4.06746 4.35173 2.21531 3.10217 1.46158 3.67087 3.95111 4.44032 2.78693 3.82361 3.33800 3.24016 2.12181 5.16460 3.96021 573 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00817 5.20750 5.92985 0.61958 0.77255 1.00688 0.45469 469 2.71432 5.47712 2.64820 1.85307 4.82208 3.28538 3.39788 3.43136 2.42470 3.78235 4.51782 2.65967 4.13402 2.32528 2.31407 2.69356 2.80751 3.12010 5.90987 4.49899 574 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00817 5.20750 5.92985 0.61958 0.77255 1.00688 0.45469 470 2.64479 5.43385 2.66235 2.26799 3.73073 3.74860 3.93764 2.98982 2.34190 3.14718 3.17992 2.29723 4.14163 2.68052 2.54077 2.59822 2.53944 3.81461 5.87765 4.47801 575 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00817 5.20750 5.92985 0.61958 0.77255 1.00688 0.45469 471 2.01064 4.65966 3.10875 3.40877 3.78737 4.00366 3.39319 2.84080 2.40444 1.74894 3.12253 3.78463 4.38102 3.64177 3.67889 3.25626 2.90207 2.28787 5.24927 2.97942 576 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04069 5.20750 3.36987 0.61958 0.77255 1.00688 0.45469 472 2.68029 5.45453 3.20491 2.02113 4.79608 3.72775 3.31894 4.27936 1.84950 2.75025 4.49617 2.48169 4.12111 2.68533 2.77355 2.29676 2.83309 3.84329 5.88920 3.67672 577 k - X 2.68559 4.42265 2.77560 2.73128 3.46345 2.40553 3.72535 3.29349 2.67721 2.69372 4.24618 2.90314 2.73780 3.18052 2.89780 2.37861 2.77534 2.98558 4.58517 3.61543 0.38508 1.27694 3.20108 1.05842 0.42619 0.75069 0.63873 473 2.39951 5.47927 2.65991 2.12778 4.82482 3.25860 3.92762 4.31115 1.72251 3.78470 4.51988 2.61586 4.13402 2.66963 2.57710 2.60504 3.19857 3.87018 5.91156 2.96561 581 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 474 3.05982 5.58250 1.80689 1.35386 4.92176 3.25449 4.00424 4.41190 2.76511 3.88519 4.62874 2.91093 4.19751 2.32495 2.95940 3.01311 3.29562 3.23004 6.01449 4.59328 582 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 475 3.05931 4.43409 5.00033 4.38810 3.02716 4.22774 4.54911 2.17311 4.17817 1.21228 3.51713 4.38157 4.58673 3.29486 4.19175 3.53915 3.29094 1.85126 3.68527 2.67631 583 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 476 2.22729 5.46852 2.55196 2.49536 4.80992 3.74148 3.92904 4.29329 2.16853 3.77221 3.69776 1.96753 4.13498 2.68781 2.87782 2.18147 3.19777 2.94631 5.90337 4.49465 584 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 477 2.44945 5.47446 2.94074 2.15758 3.52322 3.25908 3.92766 4.30361 1.74413 3.77924 4.51544 3.20833 4.13397 2.26012 2.53697 2.28702 2.89971 3.86453 5.90774 4.49751 585 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04368 5.20575 3.28991 0.61958 0.77255 1.01048 0.45262 478 2.14216 5.33020 3.25865 1.84407 3.69210 3.74899 3.25212 3.45509 2.21389 2.79386 4.38481 2.59862 4.14105 3.05851 2.84299 2.94291 2.54492 3.27831 5.79505 4.41760 586 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 1.07899 0.41542 479 2.95139 5.42089 2.84707 2.01490 4.74920 3.73148 3.92014 3.51486 2.47293 2.45714 4.46603 2.62343 4.12453 2.41359 1.94004 2.92171 3.18251 3.17813 5.86360 3.63056 587 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04081 5.17054 3.37250 0.61958 0.77255 1.07899 0.41542 480 2.40957 5.40867 2.53817 2.64403 4.73806 3.71583 3.90455 3.36928 2.47901 3.23785 4.45348 2.86094 3.43180 2.15080 1.96836 2.65907 2.87590 3.06498 5.85083 4.44958 588 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 481 2.19684 5.45498 3.18939 1.95346 4.80130 3.22838 3.90264 4.28607 2.03566 3.75937 4.49608 2.49549 4.11087 2.44944 2.10091 2.65919 3.17702 3.84645 5.88552 4.47666 589 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 482 2.34572 4.41985 4.83294 4.23133 3.51832 4.18486 3.50125 2.22973 4.05153 1.28307 3.53001 4.29438 4.54757 4.21474 4.11827 3.49165 2.72899 1.68654 5.05837 3.87878 590 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04504 5.13849 3.26566 0.61958 0.77255 1.13564 0.38745 483 2.67546 5.38967 2.49540 1.99660 4.71786 3.70029 3.88917 3.55909 2.10819 3.04598 3.03962 2.75968 4.09336 2.99117 2.54907 2.35001 3.15122 3.04708 5.83259 4.43207 591 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 484 2.39463 5.42211 3.17340 1.59290 4.76338 3.69643 3.88362 4.24614 2.22211 3.72546 4.46400 2.77866 4.08995 2.65080 2.49568 2.39234 2.74222 3.10901 5.85682 4.44890 592 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 485 2.39571 4.53566 4.08828 3.51320 3.65285 3.99046 3.39611 2.73752 2.85247 1.75567 2.45275 3.83893 4.36495 2.64762 3.71859 3.25494 2.42394 2.20465 5.13446 3.92426 593 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 486 2.35608 3.71970 3.53722 2.43956 4.05201 3.83474 4.05991 2.87694 2.28693 2.13081 2.76261 3.45176 4.21980 2.83495 2.36573 3.05594 3.16632 3.17227 5.42515 3.37743 594 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04499 5.10253 3.27258 0.61958 0.77255 1.19365 0.36113 487 2.12802 5.39723 2.45727 2.06279 4.73339 2.80450 3.87170 4.21335 2.44438 3.69874 4.44045 3.15292 4.07650 2.61264 3.10238 1.98025 3.13854 3.13100 5.83523 3.52680 595 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00941 5.06695 5.78929 0.61958 0.77255 1.24606 0.33917 488 2.58232 5.40913 2.50181 2.18610 4.75193 3.07765 3.19253 4.23630 2.37664 3.71344 3.55056 3.14675 4.07185 2.25824 2.70166 2.10541 2.83659 3.15634 5.84316 4.43358 596 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00941 5.06695 5.78929 0.61958 0.77255 1.24606 0.33917 489 2.33101 5.09714 3.32064 2.51637 4.33154 3.74594 3.95155 3.21995 2.56053 1.91795 4.16967 2.35095 3.34180 3.10508 3.21788 2.33847 2.49962 3.42692 5.60331 4.27168 597 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00941 5.06695 5.78929 0.61958 0.77255 1.24606 0.33917 490 2.91011 3.73481 3.30153 2.18818 4.36841 3.28477 3.94107 3.17170 2.73719 2.87717 4.19549 3.26521 4.12824 2.42435 2.85307 1.65538 2.74902 3.46024 5.62568 3.36463 598 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00941 5.06695 5.78929 0.61958 0.77255 1.24606 0.33917 491 1.78690 5.11150 3.31641 2.75815 4.35202 3.00779 3.94895 3.21335 2.27390 2.63892 4.18470 3.27690 4.13452 3.09931 2.48886 2.19448 2.61952 3.44518 5.61611 4.28195 599 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00941 5.06695 5.78929 0.61958 0.77255 1.24606 0.33917 492 2.59333 3.62804 2.48096 2.60649 4.72672 3.68175 3.19224 3.56981 2.08884 3.21725 4.43467 1.97976 4.07500 2.62881 2.72958 2.42609 3.13550 3.77680 5.82995 4.42505 600 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00941 5.06695 5.78929 0.61958 0.77255 1.24606 0.33917 493 2.90854 5.40733 2.75647 2.43836 4.74768 2.45204 3.30495 4.23002 2.60616 3.71028 3.54650 3.15119 4.07617 1.99792 2.24044 2.00502 3.13972 3.79550 5.84247 4.43474 601 q - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00941 5.06695 5.78929 0.61958 0.77255 1.24606 0.33917 494 2.30402 3.75775 2.82618 2.19134 4.71252 3.07913 3.87198 2.86190 2.61230 3.68071 4.42573 2.57528 3.41859 2.69291 2.51270 2.22686 2.83627 3.76451 5.82250 4.42009 602 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00941 5.06695 5.78929 0.61958 0.77255 1.24606 0.33917 495 2.34368 5.33253 2.81229 1.89843 4.64419 3.69272 3.88361 3.26006 2.38609 3.62344 4.38214 3.17439 4.08536 2.99189 2.25899 2.55074 2.75253 3.08893 5.78573 2.79747 603 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00941 5.06695 5.78929 0.61958 0.77255 1.24606 0.33917 496 1.89441 5.15098 3.29465 2.73963 4.42001 2.51882 3.94579 3.84501 2.73522 2.70386 4.23604 2.47569 4.12685 2.69691 3.20353 2.06611 2.70504 3.12584 5.66242 4.31758 604 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00941 5.06695 5.78929 0.61958 0.77255 1.24606 0.33917 497 2.91180 5.10220 3.31900 2.41996 4.33759 3.09727 3.94942 3.19142 1.73149 3.35915 3.24361 2.94011 4.13495 3.10177 2.65530 2.66670 3.14303 2.21558 3.67939 4.27406 605 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00941 5.06695 5.78929 0.61958 0.77255 1.24606 0.33917 498 2.91719 4.99116 3.40499 2.62562 3.45295 3.77858 3.99034 3.59472 2.24180 2.49359 4.07191 3.34619 3.45878 3.17205 1.84010 2.74508 2.73566 2.19128 5.51701 4.21124 606 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.05933 5.06695 2.96992 0.61958 0.77255 1.24606 0.33917 499 2.88666 5.19782 3.22499 1.80693 3.67878 3.69506 3.18319 3.14572 2.41764 2.49629 4.25874 2.70886 4.08630 2.71782 2.49630 2.89209 3.11788 3.11105 5.67731 3.35144 607 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08803 5.01750 2.55557 0.61958 0.77255 1.31186 0.31378 500 2.52670 5.20933 2.85296 2.06445 4.49540 3.65324 3.84782 2.74434 2.61100 3.48906 4.26604 3.14850 4.04511 2.12713 2.66116 2.62942 2.70124 2.70520 5.67904 3.49488 608 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06571 4.94015 2.87453 0.61958 0.77255 1.40124 0.28275 501 2.10862 5.10933 2.88681 2.63478 4.37004 3.64967 3.84842 3.24020 2.16283 2.56106 4.17404 3.16260 4.04060 2.98294 2.39823 2.60160 2.17972 3.45373 5.59660 4.24442 609 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06969 4.88572 2.81741 0.61958 0.77255 1.45603 0.26548 502 2.82313 5.23712 2.71325 2.27458 4.54599 3.60619 3.79729 4.00494 2.11152 1.87562 4.28847 2.48748 4.00049 2.90798 2.56525 2.80393 3.05391 3.16744 5.69023 4.30543 610 l - X 2.68595 4.42321 2.77591 2.72963 3.46332 2.40538 3.72590 3.29302 2.67778 2.69312 4.24511 2.90368 2.73783 3.18134 2.89756 2.37907 2.77546 2.98534 4.58573 3.61533 1.22890 0.35169 5.55034 1.34861 0.30057 0.56168 0.84455 503 2.62662 5.30412 2.72757 2.50780 4.58833 3.75461 3.39687 2.65394 1.73126 2.73469 3.35627 3.25098 4.14636 2.47838 2.88781 2.94974 3.18487 3.18072 5.77504 3.53782 619 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 1.07899 0.41542 504 2.70027 5.42616 3.21602 2.08367 4.75644 3.73190 3.22357 4.23153 1.76694 2.12949 4.47089 2.66580 3.41597 3.02140 2.77635 2.63460 3.18380 3.35614 5.86745 4.46644 620 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 1.07899 0.41542 505 2.20186 5.42721 3.21770 2.66141 3.84925 3.73301 3.92060 4.23297 1.88581 3.72589 4.47212 2.21912 4.12602 2.43019 2.44884 2.15829 3.18503 3.27365 5.86823 4.46761 621 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 1.07899 0.41542 506 2.67891 5.39980 2.92194 2.28019 3.21676 2.32796 3.24250 3.32253 2.32619 3.20173 4.44714 2.74835 4.12761 3.02964 2.31379 2.44694 3.18225 3.77685 4.01703 4.45257 622 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 1.07899 0.41542 507 2.95156 5.38394 2.62862 2.30175 2.90296 3.30232 3.92861 3.39489 2.49128 2.82608 4.43300 2.11433 4.13065 3.03608 2.32689 2.36070 3.18275 3.75758 5.83590 3.59015 623 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 1.07899 0.41542 508 2.40503 4.40649 4.83690 4.23193 2.34127 3.23996 4.49516 1.86800 4.04729 1.64434 3.51891 4.28273 2.29963 4.20421 4.10477 3.47176 3.24307 2.40282 5.03063 3.85172 624 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 1.07899 0.41542 509 2.63291 5.47404 2.88532 1.99891 4.81863 2.89799 3.92054 4.30509 2.12013 3.77909 4.51548 2.41094 1.99308 3.01769 2.79896 2.65075 3.19365 3.86455 5.90659 4.49446 625 p - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 1.07899 0.41542 510 2.20854 3.36864 4.71109 4.28578 3.27476 0.84206 5.07567 4.13621 4.21722 3.85199 4.70679 4.26434 4.50077 4.45307 4.45662 1.69761 3.44827 3.69614 6.16518 4.98931 626 g - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 1.07899 0.41542 511 3.31471 4.65255 5.28331 4.68945 2.05986 4.53645 4.84800 1.78679 4.49286 2.03830 3.62111 4.68960 4.86390 4.60553 4.50412 3.86121 3.54728 1.19184 5.26950 2.78852 627 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 1.07899 0.41542 512 2.98929 3.39959 4.21529 3.63684 2.11108 4.04793 2.55088 2.46844 2.37448 2.74075 3.65288 3.93224 4.42082 3.80539 3.23244 3.31879 2.85076 2.80079 5.13814 1.99196 628 y - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 0.89054 0.52837 513 3.83405 6.18145 2.59075 3.11078 5.88351 0.40531 4.82888 5.45257 2.96479 4.94321 5.83693 3.67066 4.76767 4.02921 4.44332 3.76745 4.21152 4.92934 7.02992 5.58199 629 G - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 514 2.71543 4.75030 3.82703 3.26073 3.89590 3.96054 4.21346 2.87987 3.21645 1.92703 3.85488 3.67912 3.43068 3.52636 1.80011 2.35539 2.18302 2.71131 5.33110 4.09091 630 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 515 3.08300 4.98519 5.70367 5.13310 3.07443 5.03847 5.43887 2.25542 4.97476 0.97857 3.71941 5.19903 5.29268 5.06024 4.99742 4.39046 3.93682 1.20055 5.77284 4.65274 631 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 516 2.02868 4.57270 4.18767 3.61150 3.11285 1.74526 3.28643 2.46035 3.53163 2.37010 3.68397 3.29036 4.42852 3.79375 3.79968 2.71414 3.23606 2.28262 5.17411 3.96691 632 g - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 517 3.39181 5.98767 1.35998 1.41361 5.30458 3.87895 4.26677 4.82064 3.14518 4.28151 5.05947 2.84318 4.40722 2.03135 3.69635 3.30342 2.68365 4.36752 6.41421 4.93914 633 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 518 3.99222 5.54702 4.83662 4.64895 4.08624 4.74409 5.35462 3.56354 4.50613 0.29100 4.18583 3.22198 5.27644 4.88226 4.65817 4.31197 4.33571 3.62981 5.92394 4.60005 634 L - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 519 2.43614 2.48616 4.82850 4.22618 2.21918 1.98608 4.50638 1.91932 4.04597 2.61937 3.54818 3.44247 4.53936 4.20753 4.11134 3.47555 3.25623 2.17819 5.05212 3.87197 635 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 520 2.73152 5.47530 2.86113 2.27364 4.81923 3.74160 3.19243 4.30430 1.96738 3.78002 4.51629 3.20953 4.13509 2.09470 2.69259 2.25828 2.46833 2.80816 5.90859 4.49846 636 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 521 3.11381 3.40949 5.04825 4.44408 3.07083 4.30533 4.65322 1.64421 4.24584 2.38178 3.60435 4.45486 2.47760 4.39008 4.27482 3.62022 2.61546 1.34131 5.15389 3.97491 637 v - X 2.68639 4.42246 2.77484 2.73144 3.46322 2.40534 3.72516 3.29375 2.67660 2.69351 4.24711 2.90335 2.73761 3.18167 2.89797 2.37880 2.77514 2.98539 4.58498 3.61524 0.39661 1.24480 3.23381 0.41726 1.07543 1.00589 0.45527 522 2.97862 5.49542 1.74762 1.98342 4.84056 3.73445 3.12294 4.32836 2.22242 3.80029 4.53728 2.18680 3.32726 2.74047 2.77015 2.93771 3.21093 3.88633 5.92646 4.51237 641 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 1.07899 0.41542 523 2.96670 5.46660 2.28880 1.90324 4.80569 3.73222 3.92682 2.49765 1.93924 3.76917 4.50959 3.20110 2.65023 2.75304 3.15988 2.42608 3.19856 3.85417 5.90209 4.49291 642 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 0.90103 0.52113 524 2.73769 5.48645 3.22816 1.94495 4.83337 3.13963 3.93513 4.31687 1.56112 3.79023 4.52779 3.21945 4.14501 2.48170 2.27849 2.44519 2.84533 3.87834 5.91600 4.50920 643 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 525 3.63085 4.97396 5.24194 4.74050 1.79739 4.68191 3.45229 2.81769 4.55586 2.63584 4.08746 4.64137 5.02311 4.62327 4.58462 4.00270 3.11993 3.26522 4.65667 0.81907 644 y - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 526 2.69074 5.47600 2.10851 1.96452 4.82077 3.09731 3.92696 3.65335 2.24182 3.78115 4.51674 2.75310 4.13332 2.48115 2.78778 2.35242 3.19718 3.34841 5.90885 3.55154 645 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 527 2.42949 4.52000 4.39107 3.80866 3.63154 3.20814 4.40583 2.18846 2.81890 2.03963 3.63629 4.05165 4.47695 3.93789 3.91202 3.38634 1.54026 2.14204 5.13587 3.93947 646 t - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 528 0.35439 3.09577 5.03828 4.69688 5.11998 3.81577 5.37879 4.47058 4.41728 4.22559 5.08302 4.47490 4.60974 4.76223 3.21185 3.28894 3.58587 3.94525 6.51397 5.38036 647 A - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 529 2.85398 4.86427 5.60257 5.05626 4.11712 4.96413 5.44405 1.12924 4.91497 1.57376 3.98649 5.11966 5.26637 5.09497 4.98914 4.32183 2.88790 1.44557 5.88634 4.69592 648 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 530 2.64222 3.63986 3.30367 1.40716 4.59820 3.77573 3.98206 4.04002 2.74991 3.13973 4.37792 3.28334 4.17261 2.78661 3.22734 1.85203 2.52123 3.67109 5.79301 4.42643 649 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 531 2.09182 4.67123 4.03102 3.46324 3.81943 4.01923 4.31213 2.48423 2.34621 2.88974 3.79533 3.82787 4.40836 3.69108 3.71874 2.93080 1.70710 1.78685 5.28673 4.06505 650 t - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 532 1.35708 3.47891 4.58067 3.99845 3.62629 4.11423 4.48296 2.02811 3.86825 2.71339 3.63748 3.20774 4.50989 4.07661 4.02558 3.00951 2.50033 1.95847 5.14010 3.95166 651 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 533 1.64426 2.68005 4.81988 4.23186 2.56810 2.57279 4.54698 2.91325 4.06023 1.43461 3.60361 4.28917 4.54593 4.22787 4.13922 3.46219 3.28113 2.72367 5.11156 3.92918 652 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 534 2.67395 4.95372 3.61850 3.09110 3.27569 1.07185 4.17536 3.55416 3.08112 3.22468 4.08839 3.55551 2.98049 2.81828 3.49457 3.14498 3.26742 3.28586 5.51878 3.40795 653 g - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.11365 5.20575 2.28329 0.61958 0.77255 1.01048 0.45262 535 2.06324 5.42456 3.17305 2.63438 4.77021 2.37604 3.90429 4.25001 1.87730 3.73485 4.47813 2.04646 3.27948 2.65903 3.13116 2.62882 3.17268 3.81836 5.87047 4.46543 654 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00909 5.10118 5.82353 0.61958 0.77255 0.75167 0.63786 536 1.93426 5.48637 3.26179 2.70430 4.83041 3.77534 3.13767 4.30481 2.46189 3.78500 4.53081 2.56097 4.16777 2.70397 1.69877 2.09326 3.23442 3.87724 5.91452 4.51949 655 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 537 2.29897 4.61669 5.08246 4.47640 2.87408 4.41128 4.73269 2.57064 4.29011 0.87061 2.51909 4.53353 4.74459 4.41681 3.37764 3.72285 3.46817 2.78675 5.20905 4.05857 656 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 538 3.00740 5.46065 1.78937 2.69576 2.46054 2.81653 3.97369 4.24869 2.54734 3.75412 4.51029 1.90840 4.17158 2.57392 3.22145 2.97822 3.24047 3.83702 5.90632 3.62720 657 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 539 2.44464 5.36303 2.86293 2.71160 2.87888 3.76288 1.99791 4.11672 2.71177 3.64838 4.41621 2.48769 4.15546 2.80035 2.86026 2.33065 3.20154 3.72869 5.82369 2.69675 658 h - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04368 5.20575 3.28991 0.61958 0.77255 1.01048 0.45262 540 3.09519 4.47057 4.98650 4.38214 3.52373 4.27098 2.87595 1.40452 4.18460 1.75933 3.55063 4.40564 4.62623 4.32876 4.22067 3.58292 3.32765 1.61642 5.09002 3.11778 659 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 1.07899 0.41542 541 2.95738 5.09803 6.03668 5.60225 4.61737 5.52378 6.42913 1.45492 5.56662 3.04484 4.32751 5.73652 5.78141 5.85842 5.75234 4.98027 4.17182 0.54047 6.76058 5.50743 660 V - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 0.90103 0.52113 542 2.85000 3.16388 5.33993 4.80054 4.03871 4.56069 5.16749 2.53854 4.64228 2.90754 3.23371 4.81052 4.98439 4.82306 4.71893 3.92772 3.05142 0.58501 5.69336 4.50467 661 V - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 543 3.35111 5.94016 1.24098 1.51056 5.26122 3.01046 4.23393 4.77444 2.44493 4.23494 5.00698 2.85902 4.38188 2.48594 3.63750 3.26770 3.60508 4.32153 6.36544 4.89748 662 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 544 2.70145 5.48069 2.14000 2.67068 4.82216 3.13453 3.94459 4.30494 2.41595 3.78597 4.52642 2.38987 4.14737 3.04382 2.84716 2.45013 1.60586 3.87028 5.91912 4.51015 663 t - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 545 2.97326 5.26925 2.58251 1.38755 4.53566 3.78385 3.98248 3.05739 2.75925 2.64631 3.52284 2.93913 4.17542 3.11307 3.23395 2.29003 3.20462 3.07757 5.75249 4.39467 664 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 546 2.71363 5.46540 2.10503 1.64363 4.80554 3.14056 3.92957 3.63288 2.46486 3.25782 4.50738 3.21126 4.13535 2.53241 2.83663 2.93102 2.50272 3.85339 5.90103 3.54886 665 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 547 2.43479 3.66841 2.27997 2.33498 4.41586 3.81027 4.03399 3.82774 2.84087 3.43854 4.25405 3.35829 4.20892 3.18803 3.30276 2.74544 1.60227 2.30439 5.68767 4.35623 666 t - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 548 0.69161 3.23220 4.81619 4.35442 4.36984 2.11330 4.98752 3.63716 4.24662 2.84757 4.35420 4.32982 4.55480 4.46486 4.43091 3.29772 3.44499 2.83211 5.85324 4.67851 667 A - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 549 2.35886 5.38442 3.26128 2.52886 4.69165 3.14557 3.95120 4.15088 2.15725 2.89498 4.43550 3.24504 4.15314 2.16070 2.39504 2.95369 2.16499 2.65531 5.83998 4.45447 668 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 550 2.44036 5.47525 2.88910 2.14124 4.81969 3.74019 3.25863 3.42780 1.69663 3.14045 4.51610 2.79550 4.13366 2.33643 2.83592 2.43935 3.19741 3.86555 5.90826 4.49779 669 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07798 5.20575 2.66598 0.61958 0.77255 0.82204 0.57899 551 1.48672 1.94831 4.88880 4.33320 3.77398 2.39194 4.71078 2.02991 4.17632 2.82550 3.77391 4.36487 4.60178 4.35458 4.27352 3.48072 3.35546 2.10232 5.31274 4.13200 670 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00844 5.17525 5.89760 0.61958 0.77255 1.07023 0.41997 552 4.00867 5.20066 6.10571 5.60251 4.16412 5.58326 6.16194 0.73873 5.52182 1.78071 2.92978 5.75180 5.73107 5.61189 5.58800 5.00276 4.25116 1.59249 6.32305 5.22921 671 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00844 5.17525 5.89760 0.61958 0.77255 1.07023 0.41997 553 2.43203 5.46970 2.40490 2.09451 4.81456 3.13714 3.91767 4.30090 2.25725 3.77490 4.51069 2.19436 4.12323 2.21629 3.14743 2.39225 3.18940 3.10489 5.90228 4.49057 672 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00844 5.17525 5.89760 0.61958 0.77255 0.24140 1.53956 554 2.45493 4.51918 4.92751 2.92715 1.71121 4.27096 4.59563 2.21950 4.14033 1.94816 3.63587 4.38069 4.63602 4.30054 3.44151 3.57532 3.35134 2.35443 5.13781 2.18393 673 f - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 555 3.33657 3.48360 5.92893 5.33676 3.85252 5.24607 5.59476 2.62834 5.16248 0.40856 3.00832 5.41750 5.45954 5.16602 5.14585 4.59661 4.19641 3.04553 5.84148 4.78917 674 L - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 556 3.09639 5.57936 3.35855 2.40282 4.92486 3.86758 3.33819 4.39954 1.19301 3.34588 4.62255 2.95472 4.25841 2.79469 2.11046 3.06196 3.32451 3.26053 6.00513 3.53121 675 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 557 2.53853 5.56927 2.84579 2.20480 4.91548 3.82944 3.34266 4.40193 1.85830 3.87479 4.60975 3.29655 4.22311 1.81399 2.34539 2.56131 2.71539 3.96055 6.00101 4.58982 676 q - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 558 2.31308 5.43930 3.36315 2.55234 3.74269 2.99607 3.24427 4.18571 2.80581 3.20873 3.17981 1.98700 4.24650 2.41788 2.10337 3.04818 3.29012 3.33925 5.90344 3.56232 677 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 559 3.07465 5.57597 2.91615 2.76836 4.92229 3.84585 4.02757 4.40408 1.46136 3.38557 4.61759 1.93991 4.23873 2.63132 2.08814 2.78729 3.30457 3.38465 6.00496 4.60040 678 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 560 1.80009 4.59015 4.56023 3.33528 3.21428 2.43539 4.51224 2.75006 3.85603 1.46686 3.70491 4.18635 4.57994 4.07789 4.04056 2.48113 3.34203 2.62418 5.20116 3.15962 679 l - X 2.68623 4.42230 2.77525 2.73128 3.46359 2.40518 3.72500 3.29359 2.67722 2.69360 4.24695 2.90352 2.73715 3.18151 2.89774 2.37892 2.77525 2.98523 4.58482 3.61508 0.30125 2.38833 1.78185 0.17753 1.81608 0.48576 0.95510 561 3.38383 5.80274 3.12203 2.54316 5.15190 0.88403 3.35872 4.61757 2.65062 4.12187 4.92656 3.41987 2.29849 3.41132 3.49479 3.33336 3.63743 4.21531 6.27312 4.87685 681 g - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 562 3.02271 5.42827 3.31635 2.49686 4.74695 3.80307 3.97458 4.20040 2.48110 3.71312 4.47965 3.28662 2.88076 2.78095 1.18048 3.00335 2.78988 3.30401 5.86854 3.47476 682 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 0.82204 0.57899 563 1.40424 4.76432 3.84150 2.32118 3.39504 3.97904 4.22803 3.26813 3.23474 2.73912 3.86586 3.69479 4.35952 2.97129 3.60093 3.21988 2.82233 1.94105 5.34227 3.42595 683 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 564 3.05769 5.20602 3.50930 2.64957 4.53285 3.86484 4.14475 3.93947 2.91815 3.55054 4.37085 3.47032 4.29453 3.30403 2.58815 2.31134 1.00836 3.00554 5.79345 4.47695 684 t - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 565 4.14270 5.36701 6.10151 5.56017 0.64803 5.51661 5.70407 1.99429 5.41990 1.99468 3.68659 5.64589 5.64833 5.36903 5.39491 4.90020 4.36411 2.39015 5.81650 4.57912 685 F - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04210 5.24192 3.32608 0.61958 0.77255 0.93199 0.50050 566 3.55717 4.87859 5.49633 4.90177 3.71776 4.80868 5.15655 1.21900 4.72108 1.32054 2.52312 4.95736 5.08852 3.27174 4.73715 4.14062 3.78527 1.91092 5.53271 4.41591 686 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 567 3.15980 4.65028 4.61514 4.05374 2.98727 3.43588 4.58374 2.68750 3.93056 1.94724 3.68510 4.25247 0.96149 4.15253 4.11122 3.54385 3.40892 2.84072 5.23563 4.01097 687 p - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 568 3.19607 4.71039 4.56285 4.06725 3.76876 4.22906 4.65450 2.68088 3.92055 0.66356 3.77005 3.08992 4.65713 4.19092 4.10060 2.90583 3.46203 2.88983 5.35095 4.14382 688 L - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 569 3.10401 5.62242 1.29936 2.70502 4.96254 3.79529 4.04095 4.45162 2.34417 3.92625 4.67553 1.86437 4.22994 3.14730 2.93732 2.51376 2.96327 4.01270 6.05690 4.63558 689 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 570 2.59419 5.45263 2.89928 2.30135 4.78699 3.74586 3.25573 4.26533 1.79026 3.75324 4.49615 3.21756 4.13905 3.03376 1.82788 2.69857 2.77675 3.31754 3.80155 3.62087 690 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 571 3.14343 4.52700 4.98693 4.38211 3.55529 4.31211 3.47028 1.25843 4.19340 1.32416 3.07553 4.43325 3.38417 4.33926 4.24300 3.62186 3.37464 2.48205 5.14634 3.97890 691 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04592 5.20798 3.23381 0.61958 0.77255 1.00589 0.45527 572 2.28405 5.44167 3.21729 2.08593 4.77784 3.73442 3.91988 4.25536 1.78785 3.74177 4.48523 3.20601 4.12727 2.70578 2.04148 2.41002 3.18855 3.08707 5.87844 3.57108 692 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08424 5.17054 2.58879 0.61958 0.77255 1.07899 0.41542 573 2.46957 3.44072 2.73932 2.77834 3.29252 3.23834 4.10425 3.30528 3.05087 2.61312 3.87274 3.53103 2.83082 3.37115 3.44690 2.79014 2.23519 1.95813 5.34126 4.08362 693 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00914 5.09544 5.81778 0.61958 0.77255 1.20447 0.35646 574 2.91666 5.42449 2.28736 2.21566 3.75343 3.69067 3.87781 4.25356 2.05603 3.72923 4.46547 2.49473 3.28678 2.63632 2.09960 2.87946 2.76650 3.81454 4.05909 4.44760 694 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07951 5.09544 2.65488 0.61958 0.77255 0.87281 0.54090 575 2.59948 5.41745 2.78592 2.02627 4.75599 3.69779 3.88594 3.41556 2.04321 3.06398 4.45990 3.16775 2.36096 2.30196 3.11485 2.37859 3.15351 3.80459 5.85399 4.44697 695 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00904 5.10604 5.82839 0.61958 0.77255 1.01768 0.44853 576 2.66317 5.02949 2.91017 2.87050 3.36122 3.14019 3.29985 2.81384 2.44153 2.16639 4.10963 3.37351 2.82546 3.20077 2.62579 3.01843 2.34968 2.98356 5.55488 4.24680 696 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00872 5.14188 5.86423 0.61958 0.77255 1.12988 0.39019 577 2.93721 5.44134 2.33743 2.63246 4.78365 2.92253 3.89926 4.26768 2.43553 3.74544 4.48276 2.13260 3.53054 2.25053 2.83983 2.24450 2.74672 3.15209 5.87567 3.57630 697 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09671 5.14188 2.44956 0.61958 0.77255 1.12988 0.39019 578 2.90480 5.17445 3.26360 2.08013 4.43264 3.09994 3.32152 3.27195 2.41343 1.84312 4.23922 2.79953 4.11187 3.05610 3.17384 2.21212 3.13607 3.51754 5.66275 3.47355 698 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00952 5.05470 5.77704 0.61958 0.77255 1.26307 0.33238 579 2.04472 5.38212 2.61834 2.40857 3.47788 3.67700 3.86527 3.43426 2.15847 3.68253 3.43295 2.85445 3.26980 2.41752 2.59939 2.52752 3.13009 3.76662 5.82169 4.41773 699 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.05073 5.05470 3.14448 0.61958 0.77255 1.26307 0.33238 580 2.88414 5.23360 2.55284 2.64638 4.51747 3.68525 3.31493 3.34121 2.28347 2.33894 4.29092 2.76263 2.30073 3.00095 2.82666 2.55436 3.11536 3.08692 5.70474 3.61686 700 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00992 5.01388 5.73623 0.61958 0.77255 1.31637 0.31212 581 2.62743 5.06609 3.30310 2.50576 4.29837 3.07386 3.93076 2.36979 2.73711 2.37828 4.13927 2.78596 2.90699 3.08613 2.46821 2.17061 3.12006 3.39470 5.57372 4.24404 701 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04313 5.01388 3.33619 0.61958 0.77255 1.31637 0.31212 582 2.86916 5.36970 2.45385 1.84726 4.71034 3.64351 3.25249 3.47965 2.56856 3.19224 4.41159 2.70151 3.20694 2.47920 3.06077 2.14104 2.71802 3.75797 5.80497 4.39648 702 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06479 4.98100 2.88476 0.61958 0.77255 0.99055 0.46422 583 2.93218 4.33784 4.70419 4.10173 3.42865 4.08092 4.40472 2.36588 3.92734 1.82996 2.06795 4.17787 4.44534 4.09388 4.00332 2.78466 1.74421 2.35548 4.95821 3.08605 703 t - X 2.68624 4.42231 2.77526 2.73130 3.46360 2.40519 3.72501 3.29360 2.67686 2.69361 4.24696 2.90312 2.73746 3.18153 2.89807 2.37893 2.77526 2.98525 4.58483 3.61509 0.22208 1.83635 3.22512 0.15355 1.94951 1.30167 0.31756 584 2.22955 5.28398 3.16645 2.40201 4.58940 3.14824 3.85987 4.04676 2.11263 2.71902 4.33703 3.15332 2.01612 2.58696 3.09194 2.86263 2.69528 3.65348 5.74204 4.35845 705 p - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01018 4.98828 5.71063 0.61958 0.77255 1.34738 0.30100 585 2.40708 5.28661 2.45688 2.07726 3.46787 3.66174 3.85342 3.36833 1.92941 2.97711 4.33757 3.14576 2.73451 2.96370 3.09054 2.85426 2.69412 3.65646 5.74291 4.35628 706 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09120 4.98828 2.52139 0.61958 0.77255 1.34738 0.30100 586 2.23863 5.31511 2.73184 2.54649 4.64520 3.61888 3.80831 4.12076 2.16712 3.11188 4.35990 2.16158 2.75900 2.55287 3.03940 2.49423 3.07186 3.69771 5.75681 3.28809 707 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01103 4.90812 5.63046 0.61958 0.77255 1.43421 0.27221 587 2.21192 4.45199 3.97952 3.40612 3.57348 2.56860 4.17319 1.90913 3.33373 2.20784 3.56440 3.73674 3.29564 3.04955 3.62009 2.69714 3.08963 2.21673 5.05318 3.84165 708 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.05740 4.90812 3.02825 0.61958 0.77255 0.62123 0.77064 588 2.40451 5.40794 2.35202 2.39868 4.73760 3.24276 3.40123 3.50219 2.45567 3.06308 4.45267 3.18784 2.45691 2.44571 2.63643 2.90418 3.16576 3.06410 5.84995 3.44434 709 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.05986 5.13546 2.95228 0.61958 0.77255 1.14073 0.38505 589 2.58962 5.38071 3.17802 2.25683 3.48388 3.20433 3.31954 4.18227 2.33072 3.18079 4.42597 3.16724 3.37805 2.44948 1.99936 2.59594 2.57257 3.30514 5.82391 4.42373 710 r - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.24495 5.08484 1.55560 0.61958 0.77255 1.22028 0.34977 590 2.81918 5.10652 2.33990 2.61266 4.37012 3.08106 2.77106 2.72182 2.25093 2.78219 4.16967 2.84183 4.02324 2.96285 3.08261 2.57090 2.63533 3.45260 3.61121 4.23568 711 k - . 2.68686 4.42312 2.77504 2.73159 3.46195 2.40386 3.72515 3.29215 2.67802 2.69313 4.24777 2.90434 2.73710 3.18234 2.89827 2.37957 2.77607 2.98324 4.58564 3.61511 1.03761 0.44332 5.57392 1.32261 0.30984 0.42745 1.05604 591 1.55113 4.45082 4.83243 4.23032 3.54930 3.41427 4.52580 2.56274 4.05407 1.63486 2.65199 4.29987 4.56273 4.21934 4.12646 2.89968 3.27982 1.91515 5.07690 3.89645 718 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 592 3.08508 4.46682 4.96806 4.36178 2.01622 4.25584 4.59009 1.37876 3.43306 2.15510 3.57717 4.38991 4.61659 4.31613 4.20765 2.48957 3.31795 1.95132 5.10524 3.92632 719 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 593 3.54652 6.18097 1.02629 2.03512 5.48591 3.93734 4.38871 5.01623 2.72048 4.47007 5.26733 1.85486 4.50634 3.52771 3.90320 2.32367 3.81457 4.55632 6.60456 5.10098 720 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 594 2.62292 4.52852 4.40874 3.82480 3.11018 4.11639 3.52394 2.97970 2.20700 1.25268 3.17753 4.06450 4.48701 3.94985 3.92182 2.94073 3.26018 2.12044 5.13704 3.94133 721 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 595 4.08281 5.24771 6.23379 5.77789 4.45242 5.78157 6.54935 0.90207 5.74490 1.65142 4.15609 5.95346 5.92423 5.92704 5.88036 5.24079 4.33696 1.18412 6.69377 5.53987 722 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 596 2.98478 5.49763 2.16507 1.94823 4.84373 3.75735 3.26953 4.33031 1.86504 3.80321 4.53812 2.76952 4.15118 2.71188 2.29434 2.69332 2.90835 3.31533 5.92951 4.51809 723 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 597 3.03545 2.39035 4.82202 4.21900 2.15653 3.27585 4.50696 2.87740 4.04144 2.38937 3.55925 4.28623 2.82957 4.20545 4.11204 2.93464 3.26825 2.28006 5.05584 1.74247 724 y - X 2.68629 4.42236 2.77531 2.73108 3.46365 2.40524 3.72506 3.29365 2.67701 2.69366 4.24701 2.90330 2.73751 3.18096 2.89812 2.37898 2.77531 2.98489 4.58488 3.61514 0.29941 1.51117 3.26774 0.09842 2.36727 0.93199 0.50050 598 3.59366 6.24979 0.86509 2.06782 5.54426 3.92976 3.03598 5.08336 3.38967 4.53471 5.34542 2.15959 2.73331 3.56290 3.98721 3.47343 3.86841 4.62085 6.67174 5.15051 726 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 599 3.00758 5.49744 3.24338 1.89936 4.84215 3.77157 3.95467 4.31977 2.47656 3.79753 4.54151 3.24143 1.62028 2.45644 2.48661 2.70839 2.64769 3.88861 5.92584 4.52622 727 p - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 600 2.22212 5.47636 3.22476 2.08003 4.82037 3.74682 2.96772 4.30349 1.84321 3.77989 4.51782 3.21527 4.13993 2.17340 2.48708 2.46558 3.20398 3.17687 5.90849 4.50115 728 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 601 2.57707 4.41610 4.91185 4.30371 1.94976 4.18963 3.44452 1.89769 4.10568 1.84403 3.53094 4.32329 4.55328 4.25004 4.14116 3.49785 2.85668 2.66137 5.01482 2.04295 729 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 602 2.46766 5.47801 2.85174 1.75994 4.82334 3.74020 3.92735 4.30940 2.12282 3.78332 4.51867 2.90701 4.13385 2.37480 2.15736 2.62832 2.86159 3.20785 5.91044 4.49945 730 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 603 2.99855 5.50473 2.80519 2.67796 4.85079 2.80923 3.95150 4.33485 1.38870 3.80916 4.54863 2.62726 2.34231 3.05002 2.54795 2.70257 3.23016 3.89665 5.93626 4.52753 731 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 604 1.03648 4.69629 4.46268 2.73870 3.86581 4.28827 4.61890 2.22939 3.81732 2.56640 3.82094 4.19363 4.65880 4.08129 4.07371 3.57540 3.42518 1.90468 5.41859 4.21130 732 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 605 3.96271 5.23102 5.93946 5.34118 1.24163 5.26142 5.56701 2.53508 5.17064 1.43049 1.94243 5.43111 5.42259 5.11940 5.12454 4.61556 4.17607 1.93364 5.74296 4.70983 733 f - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 606 2.64441 3.88263 3.23867 2.15625 4.74635 3.27649 3.93955 3.36988 2.28873 3.71919 4.47014 2.89796 4.14312 1.95257 2.60540 2.72452 3.19895 3.80217 5.86967 2.32614 734 q - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 607 2.43971 5.11440 2.91451 2.86962 1.79719 3.82980 2.83183 3.73996 2.86205 3.36362 4.19135 2.75069 4.21955 3.20733 2.93425 2.69499 3.21599 3.43614 5.61732 2.27184 735 f - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 608 2.41572 4.84004 5.55726 4.99200 3.96503 4.88220 5.30988 1.69911 4.83228 1.82763 2.27600 5.04003 5.18079 4.97659 4.87832 4.22915 3.78727 1.11216 5.73041 4.56360 736 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 609 3.55642 2.35778 5.52848 4.92862 1.50356 4.79559 5.12464 2.42334 4.73820 1.12580 3.54748 4.95895 5.07381 4.79874 4.73125 4.12763 3.78300 2.38379 5.47672 4.35014 737 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04368 5.20575 3.28991 0.61958 0.77255 1.01048 0.45262 610 3.26460 5.58164 3.48078 2.97907 4.98130 1.02832 3.18494 4.41201 2.70284 3.90468 4.70378 3.48191 4.38246 2.86658 1.98428 2.73464 3.49310 4.02728 6.02468 4.70942 738 g - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 1.07899 0.41542 611 3.02455 5.54295 1.78838 2.66307 4.88423 3.09883 3.97283 4.37312 2.05387 3.84713 4.58939 1.76514 4.16842 2.76142 3.22752 2.60899 2.64534 3.93251 5.97638 4.55778 739 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00848 5.17054 5.89289 0.61958 0.77255 0.90103 0.52113 612 2.06488 4.63458 4.53486 3.98728 3.89246 4.06204 4.62476 2.39575 3.88836 2.94870 3.88061 4.17326 4.54533 4.12654 4.10492 2.47508 1.15371 2.08358 5.40285 4.20801 740 t - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 613 2.87244 4.86330 5.56946 5.01286 4.02228 4.91893 5.37072 1.28420 4.86245 1.11209 3.89342 5.07435 5.21983 5.02055 4.92410 4.27085 3.09060 1.80942 5.79993 4.62781 741 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 614 4.02966 5.19014 6.20811 5.79986 4.69944 5.78223 6.79438 1.14693 5.80026 3.04346 4.37478 5.97784 5.97068 6.11773 6.01774 5.27655 4.29933 0.60728 6.99798 5.72944 742 V - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 615 2.05888 1.73652 4.88728 4.31330 2.97934 3.14941 4.62222 2.93920 4.13967 2.74882 3.68051 4.33292 4.56404 4.30321 4.21090 3.45894 2.89077 1.38147 5.19152 4.01292 743 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 616 2.99392 5.51110 1.80811 1.86513 4.85596 3.74998 3.94914 4.34400 2.27156 3.81614 4.55294 2.33814 3.34582 2.70549 2.82238 2.33927 3.22634 3.90184 5.94258 4.52804 744 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 617 2.72230 5.51651 1.99503 2.70427 4.87530 3.76887 4.00519 4.35767 2.76367 3.84468 4.59235 1.64473 4.19118 3.11015 2.91925 1.90443 2.49251 3.92288 5.98313 4.57276 745 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 0.82204 0.57899 618 3.07312 4.45786 4.95596 4.34643 2.48711 4.23634 4.56504 2.37652 4.14984 1.11864 2.79007 4.37187 3.52993 3.19253 4.18546 3.54496 2.79689 2.27502 5.07506 3.90164 746 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 619 3.00558 5.52013 2.30932 1.46318 4.86436 3.12910 3.96239 4.35162 2.29581 3.82502 4.56191 2.56023 4.16580 2.28068 3.19778 2.96558 2.83117 3.22621 5.95234 4.53876 747 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 620 2.72209 5.48536 2.55737 1.76027 4.82664 3.27649 3.94613 2.99056 2.68241 3.78903 4.52704 2.43734 4.15200 2.17813 2.82879 2.73806 2.65618 3.23453 5.92031 4.51158 748 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 621 0.28868 4.98338 5.11614 5.06428 5.78972 2.78054 5.83302 5.28840 5.13400 4.98234 5.72781 4.59990 4.64283 5.23651 5.19905 2.65296 3.64979 4.38265 7.12851 6.08499 749 A - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 622 2.99181 5.39096 3.28782 2.73039 4.69390 3.78291 3.97285 4.14965 1.69288 2.54912 3.46528 2.30997 4.17486 2.71332 2.42682 2.66166 2.40832 3.23448 5.84882 4.46727 750 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 623 2.77071 5.50266 2.80023 2.15050 4.84890 3.15515 3.94795 4.33558 1.89330 3.80812 4.54332 2.55668 4.15437 2.41515 1.88664 2.50316 3.22051 3.89399 5.93415 4.52256 751 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 624 3.12238 4.49466 5.05727 4.44579 3.53621 4.29647 3.40019 1.56897 4.23919 1.28970 2.92063 4.44875 4.64988 4.36752 4.25577 3.60882 3.35373 2.08108 5.10895 2.85329 752 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 625 1.41885 5.08082 2.98716 2.91664 4.28863 3.38323 3.26142 3.26813 2.35993 2.88166 3.49961 3.42013 4.24365 3.24728 3.35229 2.77380 2.63591 2.65662 5.60572 4.29697 753 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 626 2.98760 5.33616 2.97967 2.48386 2.65838 2.90428 3.36133 3.52079 1.79780 3.61477 4.39356 3.28563 4.18060 3.10473 2.53682 2.71920 3.21881 3.69332 3.71386 2.46949 754 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07757 5.24192 2.66867 0.61958 0.77255 0.93199 0.50050 627 2.95776 3.80136 2.97529 2.77809 4.44545 2.20586 3.33313 2.60410 1.94719 3.06289 3.33515 3.30226 4.17130 2.84266 2.91957 2.42185 3.18905 3.53440 5.69152 3.54106 755 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06996 5.17281 2.78224 0.61958 0.77255 1.07479 0.41759 628 2.93098 5.24093 3.27011 2.71252 4.51251 2.73064 2.78749 3.94903 1.75304 2.80352 4.30198 3.24382 2.89019 3.06260 2.77192 2.93655 2.55737 3.10656 5.71980 2.99317 756 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15459 5.11184 1.98623 0.61958 0.77255 1.17915 0.36751 629 2.52550 5.36772 2.58410 2.16800 4.71011 2.38270 3.24340 4.19419 2.15233 3.67180 4.40915 3.10588 2.80429 2.92241 2.50781 2.82679 2.80347 3.75693 5.80192 3.52493 757 k - X 2.68637 4.42083 2.77495 2.73129 3.46399 2.40535 3.72409 3.29147 2.67703 2.69362 4.24734 2.90357 2.73784 3.18150 2.89771 2.37913 2.77564 2.98526 4.58522 3.61548 0.95636 0.49048 5.68998 0.61873 0.77355 0.17285 1.84049 630 2.31891 5.49038 3.34761 2.36012 4.80356 2.43831 4.03867 4.26598 1.97601 2.93916 3.71417 3.05253 4.24240 3.14689 1.69825 3.04274 3.29457 3.86386 3.86648 4.55337 762 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 631 2.78781 4.50298 5.02164 4.41055 2.43929 3.30828 2.69868 2.64099 4.20871 1.56488 3.62156 4.42353 4.64566 4.35128 3.50143 3.59004 3.35099 1.99207 3.34815 2.33643 763 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 632 2.61394 5.59418 2.95773 2.79030 4.94317 3.86520 3.43175 4.42161 1.88909 3.89480 4.63699 2.61786 4.25871 3.14153 1.27573 3.06245 2.67555 3.98763 6.01884 4.61987 764 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 633 2.03091 3.52622 4.88634 4.28345 2.83410 4.26277 3.47061 2.27318 4.10909 2.42038 2.94133 4.35922 4.62847 2.61867 3.43446 3.08886 2.70045 1.90059 5.14159 2.86082 765 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 634 2.88060 2.90610 5.04159 4.45357 3.74171 3.33740 4.73716 2.16405 4.27406 2.80675 3.75160 3.62773 4.72048 4.43515 4.33593 3.64665 2.92828 0.84676 5.28139 4.10123 766 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 635 2.80484 5.27957 3.88190 3.39588 4.94622 3.95642 4.54091 4.36774 3.30768 3.97204 4.78373 3.81265 4.51177 3.17877 3.11137 1.94329 0.74300 3.95065 6.19110 4.90235 767 t - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 636 2.79140 4.56306 4.68501 4.09263 3.66312 4.23314 4.54342 2.63084 3.29154 0.99790 3.00183 4.25609 3.11955 4.15654 3.47867 2.82152 3.34597 2.30060 5.17748 3.99009 768 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.11291 5.38739 2.28084 0.61958 0.77255 0.48576 0.95510 637 3.16315 5.70115 1.39908 1.60543 5.03927 3.83789 4.09423 4.53431 2.64707 4.00283 4.75035 2.58587 4.27962 2.39827 2.95427 2.81257 3.40202 4.08933 6.13015 4.70032 769 d - X 2.68621 4.42228 2.77523 2.73127 3.46301 2.40516 3.72498 3.29310 2.67744 2.69358 4.24693 2.90350 2.73743 3.18150 2.89804 2.37890 2.77523 2.98522 4.58480 3.61506 0.08224 3.29323 3.17447 0.65929 0.72819 0.83310 0.57040 638 4.02136 6.57181 2.51186 2.53427 6.10794 0.38633 4.86223 5.72325 4.09593 5.17770 6.11509 3.61114 4.81873 4.06714 4.80970 3.87976 4.38925 5.19581 7.28033 5.71376 772 G - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 639 2.65514 5.55496 1.44854 2.06546 4.89717 3.77706 3.98835 4.38584 2.47443 3.85909 4.59863 2.86629 4.18726 2.60135 3.23609 2.39344 2.54678 3.94450 5.98722 4.57017 773 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 640 3.06240 4.45350 4.91087 4.30346 3.03439 4.22114 4.54825 2.04560 4.11320 1.22021 2.93762 4.34473 4.58253 3.36396 2.78704 3.52799 2.89907 2.09491 5.07209 3.89637 774 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 641 2.64569 4.43095 5.00859 4.39567 2.09297 4.22899 4.56308 1.70726 4.18480 1.97409 3.54581 4.38689 4.59112 4.31863 4.19842 2.97379 3.28916 1.68615 5.05819 2.90790 775 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08761 5.24192 2.54345 0.61958 0.77255 0.93199 0.50050 642 2.67881 5.46799 1.91377 1.81646 4.81266 3.72342 2.75953 4.29915 2.65198 3.77307 4.50915 2.57913 4.11995 2.41707 2.85321 2.62838 3.18738 3.85849 5.90046 3.60851 776 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00854 5.16285 5.88519 0.61958 0.77255 0.88082 0.53519 643 2.45047 5.44355 3.24900 2.69155 4.77409 3.14231 3.94439 3.39933 1.67351 3.74087 4.49034 3.23483 2.03712 2.46384 2.59244 2.65790 3.21132 3.82686 5.88450 4.48877 777 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 644 2.38249 5.47722 3.23599 2.46765 4.81804 2.67669 3.94954 4.29533 2.44301 3.77903 4.52354 3.23374 4.15772 2.53598 2.48768 1.35758 3.22397 3.86656 5.91296 4.51189 778 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 645 4.88293 6.35992 5.73408 5.79967 6.64677 0.05067 6.64796 6.70027 6.09116 6.07998 7.17327 5.90692 5.73918 6.32906 6.04942 5.10944 5.42617 6.02801 7.27655 6.83443 779 G - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 646 1.89668 4.43386 4.73643 4.13715 3.53229 4.15685 4.47958 2.36382 3.97301 2.16913 3.55209 4.23620 4.52399 4.14973 4.06751 2.36876 1.92236 1.87688 3.52898 3.87193 780 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 647 4.19325 5.42069 6.17951 5.58521 2.85588 5.54872 5.84534 1.78017 5.43290 1.18237 1.17827 5.72604 5.61897 5.30174 5.35828 4.92462 4.39788 2.56580 5.89394 4.92561 781 m - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 648 3.04658 4.99115 3.84944 3.35996 4.46884 3.86224 4.43593 3.12836 3.31600 3.52253 4.38226 3.75174 4.39924 3.05935 3.69710 1.51922 1.03922 3.51318 5.82977 4.56701 782 t - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 649 4.01314 5.88761 4.32982 4.30790 6.10490 0.19734 5.58853 5.77749 3.05711 5.29522 6.21564 4.63924 5.16302 4.88797 4.64908 4.14107 4.50275 5.14058 7.05681 6.07350 783 G - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 650 4.01314 5.88761 4.32982 4.30790 6.10490 0.19734 5.58853 5.77749 3.05711 5.29522 6.21564 4.63924 5.16302 4.88797 4.64908 4.14107 4.50275 5.14058 7.05681 6.07350 784 G - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04368 5.20575 3.28991 0.61958 0.77255 1.01048 0.45262 651 2.15485 4.67448 3.89898 3.33108 3.13233 2.15269 3.54137 2.71335 3.28155 2.88602 3.78111 3.72422 4.34731 3.57816 3.62428 1.82361 2.83944 2.94735 5.26053 2.54782 785 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04359 5.17054 3.29771 0.61958 0.77255 1.07899 0.41542 652 2.38430 5.33987 2.81429 2.67347 3.10945 3.26134 3.22993 4.10007 2.07867 3.03833 4.39186 2.81751 4.12000 3.03160 2.52691 2.22721 2.87405 2.94131 5.79865 3.67546 786 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00878 5.13573 5.85808 0.61958 0.77255 1.14028 0.38526 653 2.93496 5.44643 2.10193 2.44210 4.79182 3.06497 3.22636 4.27802 2.03425 3.26697 4.48705 2.33338 3.32056 2.99168 2.39055 2.65247 2.75679 3.83725 5.87884 4.46767 787 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04669 5.13573 3.22552 0.61958 0.77255 1.14028 0.38526 654 2.91893 5.37261 2.75227 2.44494 4.69450 3.70154 3.32303 4.16440 2.09705 2.71121 4.41946 3.17849 3.14218 2.38364 3.12400 2.58497 2.31631 2.36352 5.81938 4.42289 788 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15215 5.09816 2.00226 0.61958 0.77255 1.20034 0.35824 655 2.50746 5.15847 3.21608 2.65765 4.42512 3.67800 3.11749 3.85770 1.92931 2.90259 3.49275 3.18671 4.06863 3.00458 1.96035 2.41530 2.70411 3.05753 5.64040 4.28515 789 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01051 4.95652 5.67887 0.61958 0.77255 0.87208 0.54143 656 2.40817 5.42483 3.16906 2.40378 4.76765 2.22468 3.88189 4.25150 2.09086 3.72893 4.46654 2.52117 4.08821 2.58532 2.73898 2.15753 2.61301 3.81436 5.85878 4.44985 790 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00912 5.09816 5.82050 0.61958 0.77255 1.20034 0.35824 657 2.91871 5.40771 3.17593 2.45474 4.74406 2.59956 3.88329 3.51982 2.01523 2.82023 4.45075 2.52401 3.43162 2.65127 2.25853 2.43095 2.75772 3.79368 5.84548 4.44028 791 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.11326 5.09816 2.29293 0.61958 0.77255 1.20034 0.35824 658 2.59154 4.50741 4.00066 3.42925 3.63768 2.79439 4.21356 1.98300 3.35714 1.82323 3.62610 3.76521 4.30597 3.63370 3.13696 1.99599 2.66543 2.77564 5.11393 3.90072 792 l - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04883 4.99501 3.19697 0.61958 0.77255 1.33940 0.30382 659 2.95238 4.80098 3.66332 3.07602 3.96881 3.86386 4.05712 3.33279 2.44214 1.72940 2.87615 3.07945 4.24062 3.30778 1.68575 3.10682 3.17699 2.74766 5.34538 4.09873 793 r - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.12475 4.95669 2.20503 0.61958 0.77255 1.38334 0.28867 660 2.82198 4.67519 3.08203 2.95487 3.06722 3.19439 3.98629 3.20726 2.66688 1.92029 3.05845 2.85962 4.13396 3.24790 3.32540 2.25000 2.60990 2.62311 5.23838 3.97846 794 l - . 2.68675 4.42398 2.77463 2.73072 3.46527 2.40622 3.72668 3.29439 2.67544 2.69309 4.24065 2.90251 2.73881 3.18128 2.89853 2.37887 2.77484 2.98423 4.58650 3.61610 1.33440 0.31080 5.56606 1.87269 0.16689 0.42376 1.06300 661 2.45250 5.48970 2.63953 2.33689 4.83307 3.17048 3.94467 4.31784 2.09452 2.88860 4.53081 2.57851 3.32297 3.04156 2.00430 2.68417 2.85693 3.33048 5.92339 4.51347 806 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 662 2.98665 5.35966 2.71157 1.76481 4.65162 3.78347 3.97708 3.50048 2.16426 3.14037 3.64024 2.95814 4.17549 2.51307 3.21866 2.97758 3.21786 2.86856 2.76682 3.15311 807 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 663 2.48927 4.60205 2.10161 3.59809 3.16635 4.06526 4.34360 2.74015 2.98387 2.03086 3.71223 3.91943 4.43957 3.78855 3.79945 2.41913 2.82207 2.35297 3.63029 2.69545 808 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 664 2.98743 5.50030 2.70178 1.89849 4.84642 3.75873 3.94657 4.33295 1.85082 3.80575 4.54091 2.90219 3.04042 2.75172 2.14603 2.71172 2.39549 3.89155 5.93197 4.52058 809 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 665 2.47118 5.47932 2.14756 2.01988 4.81819 3.75949 3.94722 3.14013 1.98821 3.27257 4.52162 3.22936 4.15286 2.70616 2.85415 2.21595 3.21467 3.22919 5.91570 4.50855 810 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 666 2.45214 5.49598 2.84449 1.75418 4.84099 3.75874 3.94607 4.32661 1.95364 3.80096 4.53684 3.22627 4.15267 2.03513 2.58159 2.51135 3.21728 3.13583 5.92838 4.51788 811 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 667 3.05049 4.44740 4.86700 3.26818 3.53509 4.20513 3.36545 1.75847 4.07727 1.52078 3.55937 4.31722 4.56894 4.23714 4.13758 3.51054 3.28265 1.68718 5.06619 2.69668 812 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 668 2.49813 5.49906 2.22100 1.81710 4.84437 3.75890 3.94722 4.33050 1.96447 3.80424 4.53988 3.22615 4.15348 2.17236 2.77724 2.64378 3.21890 3.88987 5.93126 3.21617 813 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 669 2.98310 5.49405 2.53845 2.05239 4.83925 3.75671 3.94380 3.58364 1.75025 3.79937 4.53469 2.69742 3.42307 2.44723 2.91566 2.60861 2.42645 3.31637 5.92663 4.51561 814 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 670 2.65074 3.60291 3.58715 4.07364 3.02805 4.16046 3.07907 1.83190 2.84238 1.39935 2.80884 4.20862 4.52765 4.11483 4.04610 3.45613 3.26340 2.71532 5.08102 3.89596 815 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 671 2.64595 5.47326 2.94313 2.02553 3.68757 3.76060 3.94851 4.28944 2.28291 2.83304 3.44140 2.96159 4.15386 2.19008 2.03352 2.94994 2.67807 3.85921 5.91115 4.50559 816 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 672 2.17687 5.49516 2.87522 1.73154 4.84001 3.75772 3.94538 3.66022 2.30861 3.80027 4.53597 2.70004 4.15167 2.70336 2.59908 1.95339 3.21612 3.88570 5.92784 4.51697 817 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 673 2.66996 5.48191 2.89445 1.88064 4.82186 3.75960 3.94695 4.30400 1.59477 3.12816 3.75735 3.22910 4.15293 2.22143 2.80625 2.94873 2.91680 3.21659 5.91754 4.51002 818 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 674 3.00638 5.37142 3.31730 2.57738 4.66542 3.18193 3.98784 4.11237 2.04202 1.46099 4.42714 2.90964 4.19180 2.47947 2.74344 2.99803 2.91548 3.27458 5.83312 4.46263 819 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 675 2.30836 5.50382 2.50907 1.75678 4.84842 2.76203 3.95133 4.33481 2.34698 3.80893 4.54501 2.35526 4.15647 2.79505 3.18220 2.23527 3.22357 3.28667 5.93648 4.52454 820 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 676 2.47198 5.47915 3.23822 2.24945 3.16631 3.28927 3.34164 4.29950 1.75096 2.98022 4.52146 2.87438 4.15293 2.65248 2.38501 2.52533 2.92521 3.86644 5.91552 4.50848 821 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 677 2.46486 4.94372 3.18019 2.77833 4.11979 3.90212 2.93992 2.70701 3.02150 1.51616 4.03375 2.99374 4.28729 3.35284 2.96370 2.81130 2.90191 2.55484 5.49310 4.21517 822 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 678 2.49856 5.48073 2.94081 1.62970 3.81382 3.75974 3.94750 4.30176 2.32898 3.12727 4.52298 2.51118 4.15321 3.04578 2.13595 2.94911 2.46543 3.86824 5.91684 4.50953 823 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 679 2.16460 5.49513 2.41241 1.94992 4.83985 3.32853 3.26977 3.37209 2.13205 3.80025 4.53596 2.22674 4.15157 2.77751 3.17361 2.94706 2.70054 3.88560 5.92793 4.51694 824 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 680 2.67288 5.47149 3.24952 1.34639 3.68154 3.76743 3.95409 4.28265 2.39635 2.78416 4.51544 2.61710 4.16062 2.49565 2.46520 2.95843 3.22148 3.85644 5.90962 4.50758 825 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 681 2.20640 4.43721 4.86777 3.55905 2.97554 4.19557 4.52179 1.82377 4.07605 1.29647 3.55012 4.31175 4.55987 3.40726 4.13254 3.50094 3.27304 2.29977 5.05713 3.30749 826 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 682 2.23232 5.49105 2.51584 2.24442 4.83503 3.75716 3.40224 3.53942 2.15837 2.83847 4.53200 2.44991 4.15062 2.75144 2.41117 2.73683 2.67701 3.88111 5.92437 4.51410 827 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 683 2.46496 5.48639 2.33964 1.64284 4.82801 3.75839 3.94613 3.66348 2.68232 3.79021 4.52801 2.91444 4.15201 2.34776 2.88601 2.49813 2.44742 3.23914 5.92114 4.51219 828 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 684 2.47196 4.78978 3.83371 3.26431 3.93532 3.98186 2.99134 2.25507 2.82101 1.35590 3.89031 3.68711 4.36173 2.74893 3.00150 3.22270 2.85295 3.06832 5.36288 4.12160 829 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 685 2.98304 5.49148 2.54929 2.03371 4.83564 3.75710 3.94425 4.32095 2.02638 2.90727 3.65039 2.57931 4.15057 2.18762 2.91128 2.38553 2.82368 3.88163 5.92470 3.61190 830 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 686 2.27529 5.48845 2.64068 2.47067 4.83128 3.13187 3.01805 3.60103 1.98412 3.79278 4.52971 2.37959 4.15109 2.71317 3.17298 2.34571 2.80863 2.94919 5.92248 4.51287 831 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 687 2.46393 5.47904 3.23815 2.17543 4.81786 3.11512 3.16497 4.29937 2.06294 2.39786 3.67150 2.63129 4.15287 2.68993 2.59732 2.70527 2.59445 3.86632 5.91544 4.50839 832 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 688 2.73137 5.35246 3.30045 2.29989 4.64168 3.78662 3.98013 2.29703 2.20015 2.42698 4.40836 2.92460 4.17845 2.30715 2.55946 2.44760 3.21955 3.14399 5.81987 4.44599 833 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 689 2.48527 5.49515 2.82022 2.33386 4.84075 3.75708 2.84555 4.32692 2.07058 3.19412 4.53572 2.86396 4.15058 2.38323 1.90830 2.66756 2.83439 3.88608 5.92740 4.51637 834 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 690 2.76287 5.49587 2.91971 2.12181 4.84185 3.15642 3.41588 4.32842 1.90447 3.26587 4.53631 2.87067 4.15002 2.15223 2.48366 2.25917 2.91664 3.88700 5.92797 4.51652 835 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09231 5.24192 2.49025 0.61958 0.77255 0.93199 0.50050 691 2.33723 4.40356 4.71117 4.11101 3.49979 4.12849 4.44862 2.03502 3.94566 1.58569 2.35895 3.20403 4.49464 3.24430 4.03815 3.42865 2.82046 2.35299 5.02138 2.87607 836 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00858 5.15819 5.88053 0.61958 0.77255 0.71692 0.66993 692 2.69572 5.48471 2.81929 1.69177 4.82595 3.75833 3.94579 4.30922 2.16972 3.17345 4.52638 2.61294 4.15173 2.77694 2.67110 2.60978 2.82359 2.62434 5.91968 3.69172 837 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 693 2.72019 5.48773 2.93039 2.00276 4.83018 2.32106 3.38435 3.36857 2.30470 3.09132 4.52908 2.54653 4.15131 2.51988 3.17336 2.66245 2.40154 3.87696 5.92197 4.51257 838 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 694 3.00898 5.48798 3.26807 1.35997 4.82678 3.78236 3.96276 3.01395 2.30838 2.99355 4.53195 2.59427 4.17474 2.30255 2.55096 2.97604 3.23842 3.87560 5.92040 4.52291 839 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 695 2.62076 4.45844 4.70376 4.10637 3.11633 4.16574 4.48257 1.79932 3.31898 1.55179 3.03426 4.22649 4.53252 2.86347 3.24564 3.08207 3.26394 2.07723 5.07506 3.89116 840 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 696 2.33047 5.46407 2.93753 1.99126 3.87435 3.76218 3.95056 3.37352 2.44955 3.76400 3.49776 3.23458 4.15535 2.32467 2.32216 2.30420 2.45607 3.84796 5.90433 4.50107 841 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 697 2.45774 5.50003 2.42013 1.78405 4.84605 3.75796 3.94622 4.33281 1.85372 3.80562 4.54062 2.87044 4.15246 2.55619 2.63589 2.40170 2.91834 3.89122 5.93193 4.52016 842 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 698 2.63214 3.48964 4.88352 4.27578 3.52070 4.19033 4.51776 2.37687 3.46917 1.44780 2.96854 3.34602 4.55517 4.23787 3.25571 3.49655 2.84056 1.72484 3.75137 3.86805 843 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 699 3.00418 5.50971 3.23271 1.75095 4.85462 3.16727 3.96005 4.33861 2.69205 3.81389 4.55249 2.66050 4.16665 2.49869 1.70570 2.28307 2.71639 3.90071 5.94181 4.53311 844 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 700 2.76684 5.49265 2.56253 2.33534 4.83736 3.28808 3.94386 3.65987 2.30052 3.25798 3.67749 2.51429 3.36992 2.31206 2.53732 2.25751 2.62343 3.88310 5.92555 4.51482 845 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 701 2.48394 5.43617 2.83538 2.70112 4.75726 3.76776 3.27989 3.01289 1.84755 2.93398 3.67538 3.24507 4.16062 2.30182 2.69844 2.41700 2.47049 3.81386 5.88344 4.48750 846 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 702 2.43742 4.66902 4.01534 2.94739 3.79542 3.38335 4.29120 1.86976 3.38640 2.09993 3.30100 3.81512 4.40356 2.71705 2.69272 2.92171 2.92147 2.14762 5.25982 4.03802 847 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 703 2.64688 5.49692 3.23118 1.77236 4.84278 3.20341 2.66938 4.32911 2.16007 3.80236 4.53748 2.55342 3.04168 2.78471 2.59451 2.30168 3.21596 3.88801 5.92893 4.51776 848 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 704 2.98499 5.49407 2.65263 1.70149 4.83846 2.57741 3.94565 4.32393 2.28382 3.13521 4.53502 3.22564 4.15189 2.13505 2.85357 2.28241 3.21618 3.41726 5.92703 4.51647 849 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 705 2.08364 4.56549 4.28896 3.71036 3.67799 4.09138 4.38128 3.02357 3.07722 1.45722 2.75165 3.11052 4.46509 3.87044 3.86175 2.45118 3.25848 2.01104 5.17150 3.96943 850 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 706 2.98516 5.49631 2.88995 1.70534 4.84178 3.75792 3.94514 4.32782 2.17712 2.78505 4.53699 2.57725 4.15173 2.29385 2.45041 2.42382 2.86488 3.88719 5.92853 4.51760 851 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 707 2.45235 5.25139 2.94535 2.79772 4.50698 3.80854 4.00851 2.93883 2.41361 2.06673 3.54247 2.26400 4.19916 2.71096 2.98093 2.40978 2.80523 3.12965 5.74168 4.39228 852 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 708 2.45461 5.49446 2.57207 2.21823 4.83990 3.75662 3.25520 4.32610 2.07013 3.29909 4.53503 2.81525 4.15011 2.48758 2.01776 2.64265 2.92519 3.27561 5.92689 4.51577 853 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 709 2.74199 4.61455 4.14662 3.57211 2.83669 3.24601 4.33559 1.76041 2.43916 1.69533 3.72415 3.90240 4.43474 2.60826 3.78113 2.86461 3.25379 2.87648 5.21264 4.00143 854 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 710 2.20352 5.48971 3.23378 1.89057 4.83296 3.17176 3.94517 4.31752 2.31359 3.79415 3.62999 2.41070 4.15143 2.77789 2.56897 2.03049 2.90552 3.87939 5.92343 4.51374 855 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 711 2.98348 5.46958 2.65321 2.00937 4.80442 3.76110 3.94924 3.37766 1.92832 3.00497 3.38472 2.56879 3.37220 2.70838 2.85624 2.71399 3.21464 3.18655 5.90843 3.18299 856 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 712 2.66396 4.43008 4.87355 3.44972 3.52446 4.19086 4.51787 2.08982 4.07868 1.49095 2.88928 4.31103 4.55571 4.23350 4.13131 2.64929 2.80308 1.89935 5.05060 2.81007 857 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 713 2.98355 5.49351 2.42217 1.98565 4.83839 3.75720 3.94425 3.44549 2.24462 3.23753 4.53426 2.92425 4.15072 2.22202 2.14094 2.56059 2.60448 3.88405 5.92622 4.51552 858 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03794 5.24192 3.44388 0.61958 0.77255 0.93199 0.50050 714 2.32694 5.39557 3.25542 2.50667 4.70625 2.61846 3.94985 3.47642 2.52575 3.24662 3.00355 2.89672 4.15146 2.51556 2.47269 2.29178 2.27920 3.76759 5.84939 4.46024 859 t - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03524 5.21210 3.53441 0.61958 0.77255 0.99732 0.46024 715 2.63904 5.47750 2.05948 1.82730 4.82128 3.73441 3.92643 4.30724 2.47487 3.25754 4.51895 2.85809 4.13127 2.45914 3.15797 1.93820 2.86173 3.86753 5.91052 4.49884 860 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00835 5.18522 5.90756 0.61958 0.77255 1.05129 0.42999 716 2.23450 4.50157 4.97766 4.38030 3.61580 4.30367 4.65540 1.85327 4.19956 1.25654 3.61148 4.42992 3.50175 4.35806 4.25759 3.61714 2.83249 1.89402 5.17947 4.00040 861 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00835 5.18522 5.90756 0.61958 0.77255 0.91125 0.51420 717 2.64790 5.48125 2.83410 1.74420 4.82671 3.74290 3.93012 4.31294 2.19147 3.78665 4.52185 2.80114 4.13657 2.49196 2.37429 2.27477 2.77917 3.87211 5.91363 3.20696 862 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00813 5.21210 5.93445 0.61958 0.77255 0.99732 0.46024 718 2.29580 5.45869 3.22655 2.27508 4.79486 3.32398 3.37168 3.50992 2.33205 3.19887 4.50169 2.75990 4.13975 2.46523 2.78444 1.95704 2.58567 3.84454 5.89673 3.56399 863 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00813 5.21210 5.93445 0.61958 0.77255 0.99732 0.46024 719 2.62036 3.67780 4.07104 3.07521 3.19602 3.32852 4.29980 2.49654 2.37505 1.81901 2.38937 3.84719 4.40460 2.43001 3.73418 3.28805 2.86947 2.88546 5.21609 4.00035 864 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00813 5.21210 5.93445 0.61958 0.77255 0.99732 0.46024 720 2.40111 5.47484 2.92458 2.31126 4.81776 3.74401 3.93120 3.15836 1.71973 3.77912 4.51611 2.88959 4.13745 2.36587 2.47019 2.29684 3.20071 3.86434 5.90873 3.48614 865 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00813 5.21210 5.93445 0.61958 0.77255 0.99732 0.46024 721 2.96889 5.47800 2.83244 1.83928 4.82243 3.27410 3.93001 3.51544 2.16927 3.22283 4.51883 2.80165 3.30891 2.35298 2.55619 2.63109 2.58899 3.33764 5.91107 4.50051 866 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00813 5.21210 5.93445 0.61958 0.77255 0.99732 0.46024 722 2.27267 5.42183 3.24414 1.88062 4.74271 3.75440 3.94391 4.21175 2.68811 2.86319 3.35810 2.89073 4.14726 2.14981 2.24455 2.39408 3.20235 3.79942 5.86914 3.73513 867 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00813 5.21210 5.93445 0.61958 0.77255 0.99732 0.46024 723 2.69695 5.35407 2.94324 1.99484 4.64907 3.76809 3.36159 2.64673 2.26416 2.09233 4.40830 3.25833 4.16019 2.41542 2.86095 2.96196 3.20407 2.92406 5.81785 4.43955 868 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00813 5.21210 5.93445 0.61958 0.77255 0.99732 0.46024 724 2.29716 5.32983 2.83050 2.07322 3.60349 3.15212 3.96709 4.06282 2.52508 2.28371 3.55323 2.65704 4.16443 2.73686 3.21063 2.96742 2.53445 2.87141 5.79933 4.42684 869 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00813 5.21210 5.93445 0.61958 0.77255 0.99732 0.46024 725 2.70629 5.46891 3.22272 1.81112 4.80936 2.92904 3.02388 3.37898 2.13933 2.87393 4.51081 2.90352 4.13835 2.69126 2.34949 2.72032 2.79140 3.85707 5.90429 4.49632 870 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00813 5.21210 5.93445 0.61958 0.77255 0.99732 0.46024 726 2.45629 5.04619 3.47884 2.45945 3.60126 3.84790 4.06191 2.52202 2.63799 1.71830 4.12770 2.61582 4.23542 2.83560 2.82194 3.05956 2.61552 3.35788 5.57473 4.27081 871 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00813 5.21210 5.93445 0.61958 0.77255 0.99732 0.46024 727 2.99143 5.46041 3.25504 1.97122 4.79422 3.14529 3.94910 3.48405 1.99439 2.52990 4.50551 2.08118 4.15956 3.05100 2.07995 2.96069 3.22112 3.84529 5.89650 4.50078 872 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04572 5.21210 3.23793 0.61958 0.77255 0.99732 0.46024 728 2.71662 5.45902 2.81529 2.00291 4.80214 3.20830 3.91446 4.28668 2.10139 2.56024 4.50027 3.19512 4.12063 1.90089 2.86148 2.44995 2.87675 3.84863 5.89277 4.48305 873 q - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00844 5.17482 5.89717 0.61958 0.77255 1.07103 0.41955 729 2.69081 5.45811 3.20268 1.95430 4.80132 3.72656 3.35645 3.50645 2.18224 3.76252 4.49928 2.47959 4.11997 2.13944 2.60660 2.36264 2.77424 3.84776 5.89182 3.53625 874 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00844 5.17482 5.89717 0.61958 0.77255 1.07103 0.41955 730 2.40527 4.81780 3.14204 2.44226 3.97545 3.90552 4.14199 1.80753 3.08669 2.11179 3.91400 3.56778 4.28842 2.90751 2.99527 3.13592 2.86763 2.31884 5.38252 4.12437 875 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00844 5.17482 5.89717 0.61958 0.77255 1.07103 0.41955 731 2.06453 5.41021 2.82852 2.06897 4.73316 3.73600 3.92560 2.70865 1.96561 2.55027 4.45682 2.79497 4.12910 3.02958 2.77307 2.68741 3.18520 3.78892 5.85627 4.45921 876 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00844 5.17482 5.89717 0.61958 0.77255 1.07103 0.41955 732 1.92254 5.45958 2.92647 2.05990 4.80336 3.20269 3.91332 4.28843 2.44195 3.26829 4.50059 2.36050 3.37961 2.55522 2.82061 2.45895 3.18310 3.84953 5.89302 3.41035 877 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00844 5.17482 5.89717 0.61958 0.77255 1.07103 0.41955 733 2.39501 5.42328 3.21741 2.28744 4.75186 3.04458 2.79839 3.34058 1.98710 2.95342 4.46832 2.86866 4.12588 2.24512 3.15263 2.53387 3.18390 3.80504 5.86593 3.16801 878 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00844 5.17482 5.89717 0.61958 0.77255 1.07103 0.41955 734 2.95249 3.32266 2.89915 1.64021 4.75808 3.73185 3.92044 3.34401 2.18775 3.22312 3.34958 2.77513 4.12496 2.67962 2.54574 2.68386 2.85222 3.81041 5.86920 4.46728 879 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04509 5.17482 3.25898 0.61958 0.77255 1.07103 0.41955 735 2.93649 5.39461 2.76951 1.88353 4.71827 3.71859 3.90792 3.04355 2.38655 3.07614 3.46722 3.19477 4.11152 2.46918 2.05125 2.67671 2.71483 3.29245 5.84028 4.44271 880 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 736 2.15432 5.43972 2.89069 1.74594 4.78158 3.71100 3.89871 4.26524 1.94694 3.08350 4.48130 2.62245 4.10471 2.99616 2.75739 2.41754 3.16793 3.82865 5.87421 3.71556 881 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 737 2.57836 4.44349 4.45959 2.44304 3.54605 4.07934 4.38376 2.15718 2.84365 1.63691 2.97166 4.06962 4.44852 3.96383 3.92038 3.36648 2.84219 2.47843 3.51271 2.78250 882 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 738 1.95175 5.17723 3.32228 1.97458 4.42510 3.76613 3.96763 3.25306 2.22409 2.74564 3.24332 2.84627 4.15638 3.11027 2.81735 2.70266 3.17343 2.66251 5.67289 4.32977 883 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 739 2.31977 5.44742 3.19369 2.10635 4.79154 3.71706 3.90224 3.61725 1.66623 3.75084 4.48899 2.12189 4.11053 2.47594 2.73992 2.67461 3.17516 3.83769 5.87930 4.47212 884 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 740 2.40521 3.39987 4.61242 3.12609 3.50762 4.10414 4.41881 2.18334 3.24963 1.52915 2.85505 3.36829 4.47138 4.05833 3.98976 3.39976 2.81009 2.35474 5.02496 2.78744 885 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 741 2.69917 5.36908 2.93315 2.12866 3.67537 3.72331 3.91395 2.94101 2.06817 2.65669 4.41815 2.78339 4.11599 2.67345 2.56553 2.66714 2.61159 3.14297 5.82108 4.42996 886 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.19565 5.13849 1.76123 0.61958 0.77255 1.13564 0.38745 742 2.56246 5.30914 3.12933 2.17025 4.63055 2.73495 3.83114 4.09987 2.57614 3.09689 4.35682 2.56406 2.82570 2.14144 3.06456 2.52624 2.68074 3.03142 5.75707 4.36113 887 q - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.05445 4.95338 3.08055 0.61958 0.77255 1.38697 0.28746 743 2.84343 5.33588 2.24232 2.34567 4.67291 3.61714 3.80710 4.15356 2.33602 3.63770 3.46661 2.24053 2.44226 2.56336 3.03773 2.52126 3.07480 3.08185 5.77321 4.36659 888 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01101 4.90995 5.63229 0.61958 0.77255 1.43238 0.27278 744 2.50804 5.26689 3.15884 2.59918 4.57942 3.64983 3.83349 4.03464 1.96069 2.63583 4.32098 2.54295 4.04162 2.94491 1.95589 2.35602 2.69220 3.64089 5.71906 4.34106 889 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01101 4.90995 5.63229 0.61958 0.77255 1.43238 0.27278 745 2.27613 5.01499 3.26456 2.26494 4.24485 3.68313 3.88889 2.33264 2.20031 2.85866 4.08828 2.88096 4.07248 2.73246 3.15626 2.88801 2.37034 2.85056 5.52361 4.19569 890 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01101 4.90995 5.63229 0.61958 0.77255 1.43238 0.27278 746 2.52661 5.34019 2.75450 2.09604 3.42585 3.61482 3.80261 4.16377 2.32781 3.64357 4.38205 2.75839 4.00842 2.38708 2.51636 2.23502 2.36230 3.72848 5.77546 4.36714 891 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01101 4.90995 5.63229 0.61958 0.77255 1.43238 0.27278 747 2.50362 5.27754 2.48101 2.28685 4.59290 3.62605 3.81659 3.33533 2.05248 2.35497 3.40168 2.63903 4.01893 2.38795 3.05083 2.81781 3.07197 3.65211 5.72833 4.33613 892 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01101 4.90995 5.63229 0.61958 0.77255 1.43238 0.27278 748 2.58362 2.95062 3.20572 2.13922 4.36836 3.66073 3.85974 3.20532 2.21308 2.30246 4.17563 2.75379 4.05135 2.60523 2.80321 2.86016 2.70743 3.45344 5.59932 4.24891 893 e - X 2.68645 4.42284 2.77509 2.72998 3.46412 2.40571 3.72553 3.29413 2.67678 2.69391 4.24502 2.90378 2.73798 3.17975 2.89783 2.37945 2.77544 2.98419 4.58535 3.61502 0.86489 0.55283 5.63229 0.98669 0.46650 0.53094 0.88686 749 2.45008 5.49147 2.56709 1.77114 4.83720 3.74537 3.93601 4.32407 1.83741 3.79682 4.53240 2.91574 4.14163 2.43479 2.84993 2.15622 3.20919 3.88255 5.92320 4.51104 898 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 750 2.71579 5.44028 3.23383 2.28356 4.76906 3.74947 3.93825 2.98415 1.74639 3.73850 4.48539 2.38681 4.14264 2.45587 3.16853 2.50304 2.23474 3.26953 5.88280 4.48217 899 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 751 3.20655 4.60875 3.63343 4.29365 3.70355 4.37879 4.71512 1.57314 3.26080 1.08531 3.67264 4.43287 4.72947 4.33870 4.26390 3.68611 3.44070 2.05506 5.29547 4.11517 900 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03921 5.20955 3.41151 0.61958 0.77255 1.00265 0.45714 752 2.39672 5.48504 2.27073 1.54417 4.82906 3.73415 3.92961 4.31583 2.13366 3.33947 4.52675 2.78264 4.13349 2.74148 3.16361 2.31468 3.20408 3.87526 5.91752 4.50463 901 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00841 5.17874 5.90108 0.61958 0.77255 1.06366 0.42341 753 2.64175 5.46344 2.15498 1.97190 4.80726 3.72853 3.91645 4.29242 2.30288 2.80825 4.50453 2.49486 4.12253 3.01329 2.45659 2.43538 2.57759 3.85343 5.89676 4.48642 902 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00841 5.17874 5.90108 0.61958 0.77255 1.06366 0.42341 754 2.99275 4.48875 3.45782 3.80343 2.61133 4.08363 4.38135 2.61912 2.86500 1.35399 3.13880 4.03766 4.45410 3.92477 2.89056 2.78486 3.22475 2.28592 5.09787 3.30271 903 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.05289 5.17874 3.08172 0.61958 0.77255 1.06366 0.42341 755 2.95050 5.46041 2.60094 1.39920 4.80560 3.71611 3.90653 4.29094 2.00547 3.76465 3.12669 2.61363 4.11301 2.65699 2.75706 2.91179 3.18178 3.85129 5.89150 4.48124 904 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00879 5.13464 5.85698 0.61958 0.77255 1.14212 0.38440 756 2.39833 5.43724 2.69803 2.62996 4.77921 2.54770 3.89635 4.26288 1.87166 3.21198 4.47879 2.46545 4.10243 2.65505 2.53074 2.36557 3.16540 3.29776 5.87175 4.46282 905 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00879 5.13464 5.85698 0.61958 0.77255 1.14212 0.38440 757 2.94754 5.46085 2.75888 1.50281 4.80620 3.71284 3.90494 4.29289 1.98246 3.76588 4.50209 2.58834 4.11024 2.66503 2.83100 2.58926 2.42418 3.85177 5.89249 4.48037 906 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00879 5.13464 5.85698 0.61958 0.77255 1.14212 0.38440 758 2.67896 4.48814 4.32767 3.74223 3.59389 4.05949 4.34983 2.93855 2.65741 1.34681 3.08035 3.99331 4.42987 3.87109 2.72395 3.33921 3.20961 2.12917 5.09451 2.54117 907 l - X 2.68627 4.42234 2.77500 2.73108 3.46363 2.40522 3.72504 3.29363 2.67722 2.69331 4.24699 2.90356 2.73749 3.18156 2.89810 2.37874 2.77529 2.98528 4.58486 3.61512 0.23801 1.56569 5.85698 0.11290 2.23717 0.67597 0.71063 759 2.38997 5.49305 2.51541 1.81920 3.74012 3.75681 3.94396 3.42760 2.12894 3.79822 4.53379 2.62920 3.35365 2.46316 2.87593 2.43945 3.21419 3.88355 5.92589 4.51509 909 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 760 2.74639 5.49073 2.41702 1.60162 3.69628 3.75748 3.94495 3.60259 2.21697 3.79537 4.53182 2.80012 2.92708 2.70342 3.17297 2.40196 2.88230 3.88057 5.92430 4.51418 910 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 761 3.03311 4.46456 4.68181 3.34535 2.39652 4.16380 4.47896 2.41997 3.26281 1.10678 3.12003 4.21587 4.53068 4.12243 3.37126 2.93502 3.26517 2.50152 5.08048 3.89596 911 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 762 2.57258 5.47887 2.59705 2.00026 3.69063 2.40701 3.27245 4.29917 2.34334 3.25609 3.57021 2.70179 4.15270 2.22956 3.17600 2.94847 3.21443 3.16973 5.91535 4.50823 912 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 763 2.98875 5.49066 3.23375 1.58220 4.83228 2.97533 3.94999 3.61252 1.95577 3.79431 4.53273 2.89325 4.15577 2.70623 3.17745 2.08332 2.49708 3.87955 5.92529 4.51661 913 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 764 2.48836 5.49921 3.23683 1.58799 4.84508 3.76235 3.94827 4.33005 1.98967 3.80382 4.54019 2.93387 4.15609 2.45015 2.44822 2.43113 2.62421 3.89040 5.93046 4.52119 914 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 765 2.44181 4.57881 4.23911 3.66161 3.69217 4.08020 4.36407 2.07093 2.64507 1.51550 3.16397 3.36932 3.54743 3.83491 3.83549 2.49825 2.82159 2.57011 5.18140 3.97639 915 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 766 2.08199 5.49281 3.23252 2.05485 4.83653 2.97918 3.36747 4.32139 2.28753 3.79743 4.53410 1.96138 4.15279 3.04359 2.79499 2.26000 2.83504 3.88278 5.92625 4.51626 916 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 767 2.28337 5.49531 2.84526 1.98401 4.84080 3.29953 3.94403 4.32711 1.83009 3.80076 4.53589 2.68406 4.15043 2.76377 2.91095 2.11183 2.83706 3.88618 5.92770 3.76582 917 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 768 2.21280 4.51251 4.46211 2.72930 3.11748 4.12558 4.42624 2.39331 3.11270 1.56478 3.62676 4.09524 4.49547 3.25829 3.95045 3.40961 3.25994 1.81843 5.12303 3.38991 918 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 769 2.61803 5.51859 2.40166 1.56352 4.86255 3.76629 3.96266 4.34915 1.85408 3.82319 4.56059 3.23306 4.16644 2.09767 3.19607 2.71385 3.23807 3.38313 5.95093 4.53817 919 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 770 2.31893 5.50051 2.55084 1.60839 4.84547 3.75896 3.94849 4.33179 2.14397 3.31690 4.54144 2.79860 4.15420 2.13993 3.17770 2.68609 2.92679 3.89114 5.93299 4.52139 920 e - X 2.68604 4.42241 2.77536 2.73079 3.46370 2.40529 3.72511 3.29370 2.67757 2.69371 4.24706 2.90292 2.73756 3.18163 2.89736 2.37903 2.77502 2.98535 4.58493 3.61519 0.49055 1.14643 2.66006 0.07145 2.67433 0.93199 0.50050 771 2.72618 5.44464 3.25439 1.91710 4.77905 3.75974 3.93641 2.79293 1.88916 3.73936 4.49040 3.23433 4.15085 2.21789 1.98347 2.95458 3.21283 3.27062 5.87827 4.48785 922 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00846 5.17216 5.89451 0.61958 0.77255 1.07598 0.41698 772 3.00665 4.40673 4.81101 4.20605 2.27524 4.15852 4.48303 1.72438 4.02394 1.51965 3.04822 4.26682 4.52244 3.21730 2.89024 3.02841 3.23864 2.44018 5.02494 3.84615 923 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00846 5.17216 5.89451 0.61958 0.77255 0.90544 0.51812 773 2.34924 5.46866 2.65288 1.75881 4.80874 3.74313 3.93202 4.29130 1.78155 3.23948 4.51085 2.48074 4.13745 3.03015 3.16129 2.93374 2.57980 3.19974 5.90427 4.49608 924 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 774 2.64463 5.47481 2.75804 1.74968 4.81903 3.15840 3.92732 3.58692 2.49520 3.24021 4.51570 2.93994 4.13361 2.12576 2.63510 2.22928 2.90696 3.86499 5.90798 4.49753 925 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 775 2.84620 4.61100 5.20655 4.59763 2.06877 4.44576 4.76957 2.25107 4.39359 1.00338 3.52524 4.60291 4.77754 4.49926 4.39966 3.76349 3.48421 2.18436 5.21003 3.15992 926 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 776 2.43643 3.13875 3.23676 2.01496 4.75094 3.74929 3.40401 3.48213 1.95310 3.72306 4.47300 2.57217 4.14225 2.29131 3.17056 2.93983 2.49046 3.27873 5.87214 4.47426 927 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 777 2.96797 5.47929 2.40411 2.03791 4.82475 3.22218 3.92803 4.31087 1.91127 3.34764 4.51996 3.20801 4.13454 2.68577 2.39255 2.16746 2.48078 3.87016 5.91155 4.50052 928 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 778 2.74592 5.47767 2.62546 1.85070 4.82311 3.73977 3.92680 4.30929 1.76103 3.31173 3.68415 2.82387 3.33611 2.76739 2.50152 2.42609 3.19742 3.86851 5.91008 4.49898 929 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 779 2.71634 4.46609 4.59813 3.41912 3.56522 4.14125 4.45205 1.36361 3.86298 1.81257 2.99440 4.16645 4.50845 2.87302 3.29886 3.43410 3.25165 2.15227 5.08276 3.89591 930 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 780 2.96759 5.46898 2.04896 2.04752 4.81003 2.18385 3.93003 4.29327 2.66659 3.77255 3.13335 2.88730 4.13576 2.69756 2.59952 2.60638 2.80705 3.35665 5.90403 4.49535 931 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 781 2.63174 5.46825 2.35229 2.13032 3.52080 2.83714 3.23886 3.29834 2.25971 3.77199 4.50986 2.93643 4.13462 2.73938 2.05028 2.93009 3.19731 3.30695 5.90308 4.49431 932 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 782 2.15319 4.63342 4.03229 3.46057 3.75729 4.01670 4.28456 1.88807 3.39840 2.18289 3.10128 3.82030 3.62682 2.27078 3.17366 2.65338 2.75593 2.89919 5.22639 3.23462 933 i - X 2.68677 4.42295 2.77649 2.72702 3.46420 2.40651 3.72444 3.28904 2.67674 2.69413 4.24498 2.90329 2.73973 3.17926 2.89705 2.38035 2.77686 2.98506 4.58526 3.61409 0.81570 0.65012 3.33292 2.24048 0.11250 1.01048 0.45262 783 2.95251 5.44720 3.20762 1.89168 4.78613 3.72845 3.20033 4.26726 2.13396 3.22321 3.35455 2.55378 4.12166 2.76387 1.98156 2.67189 2.87560 3.28652 5.88326 4.47681 946 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00846 5.17216 5.89451 0.61958 0.77255 1.07598 0.41698 784 2.63153 5.46937 2.34930 2.45881 4.81521 3.12233 3.91543 4.30182 2.13857 3.77477 4.51012 2.78186 4.12158 2.24914 2.06301 2.13320 3.18770 3.86048 5.90120 4.48954 947 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00846 5.17216 5.89451 0.61958 0.77255 0.88753 0.53047 785 2.98117 5.45105 3.24665 1.51729 4.78305 3.75906 3.94318 3.27688 1.88704 3.27256 4.49602 3.23278 4.15142 2.47514 2.39838 2.63806 3.21138 3.18443 5.88955 4.49190 948 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 786 2.62592 5.03418 3.48555 2.60204 4.23439 3.26527 3.43948 2.81785 2.36263 2.39019 3.02382 2.72019 4.23664 2.90182 3.35466 2.44866 3.21290 2.66805 5.56474 2.69657 949 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 787 2.74937 5.47860 2.69349 2.08867 4.82216 3.74349 3.93187 4.30718 1.82542 3.29813 4.51981 2.38232 4.13783 1.97231 3.16007 2.72345 3.20233 2.87164 5.91200 4.50172 950 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 788 2.96978 5.47386 2.64664 1.43837 4.81646 3.74389 3.93112 3.38095 2.22221 3.24472 4.51529 3.21236 4.13747 2.69772 2.37927 2.45161 2.89306 3.86319 5.90778 4.49875 951 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 789 2.17698 4.54076 4.28301 3.70336 3.16712 4.07586 4.36444 2.45661 2.77239 1.72215 2.94789 3.35642 4.44815 2.81214 3.85097 2.83649 2.77207 2.18864 5.14568 3.94434 952 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 790 2.70468 3.75871 2.93586 2.23304 3.62954 3.75505 3.40595 4.18799 2.44486 2.73192 4.45533 3.23488 4.14778 2.48128 2.29530 2.23682 2.64966 3.78147 5.85757 3.09830 953 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 791 2.97682 5.48538 2.12036 2.20144 4.82877 2.83317 3.93658 4.31413 2.06195 2.82009 4.52689 3.21328 4.14177 1.93749 3.16677 2.50081 2.84514 3.87520 5.91866 4.50771 954 q - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 792 2.19839 5.44495 3.23590 1.96406 4.77546 3.75114 3.93861 3.55663 1.69550 2.78734 4.48972 3.22470 4.14408 2.38842 2.79208 2.67430 2.89354 3.82779 5.88589 4.48535 955 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 793 3.02146 4.52167 4.40067 3.81545 3.08719 4.10935 4.40371 2.69737 2.84467 1.32319 3.02459 4.05595 4.47870 3.11778 2.26227 3.39057 3.25309 2.14933 5.12879 3.93443 956 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 794 2.96818 5.47160 2.62592 1.87904 4.81372 3.15546 3.93026 3.58285 2.11471 2.94596 3.55795 3.21159 4.13638 2.46092 2.25582 2.33025 3.19931 3.86066 5.90600 4.49696 957 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 795 2.71531 5.45684 3.22568 2.04193 3.81399 3.12204 3.93359 3.02210 2.41056 3.75817 4.49995 2.26492 4.13882 2.07439 2.90055 2.25101 2.80796 3.84251 5.89507 4.48979 958 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 796 2.64962 3.04173 5.00913 4.39695 2.33015 3.26953 4.56618 1.82921 4.18651 1.33657 3.53591 4.38805 4.58971 4.31987 4.19977 3.54109 3.28594 2.25312 5.05957 3.88394 959 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 797 2.73667 5.44457 2.76173 1.19128 4.77117 3.75294 3.94604 4.24469 2.50364 3.09263 4.49083 2.86458 4.14878 3.04912 3.18071 2.69849 2.79553 2.88671 5.88856 4.48808 960 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 798 2.65767 5.46755 2.33848 2.41808 4.80768 2.94789 3.93161 4.29021 1.91873 2.64110 4.50955 2.65381 4.13732 2.69880 3.16037 2.70412 2.28758 3.25169 5.90319 4.49517 961 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 799 2.73256 5.48026 2.27382 1.80286 4.82578 3.74195 3.23980 4.31195 2.04738 3.78563 4.52086 3.20926 4.13560 2.54882 2.31722 2.72166 2.79381 3.16466 5.91255 4.50147 962 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 800 2.65313 4.70689 3.98040 2.85839 3.84242 4.02882 4.28539 1.58978 2.01854 1.73621 3.81117 3.79503 4.40627 3.64268 3.64813 3.28388 2.86802 2.93316 5.30210 4.07717 963 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 801 2.23549 5.48271 2.80234 2.05601 4.82816 3.74248 3.93067 4.31455 2.22686 3.78811 4.52342 2.07799 4.13683 2.63445 2.83698 2.26774 2.46982 3.87358 5.91503 4.50356 964 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 802 2.64691 5.47668 2.56788 2.33492 4.82049 3.74327 3.93046 4.30531 1.53845 3.78123 4.51780 3.21127 4.13691 2.53111 2.56383 2.29643 2.90211 2.88354 5.90992 4.50009 965 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 803 2.73911 4.50070 4.47174 3.11221 3.59991 4.12224 4.42330 2.43827 3.76103 1.05981 3.14426 4.09770 4.49084 3.20519 3.26939 3.40773 3.25325 2.22012 5.11183 3.92041 966 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 804 2.59557 5.48210 2.85216 2.15900 4.82801 3.23924 3.92934 4.31463 2.01095 3.78770 4.52262 2.41218 4.13572 2.11786 2.77908 2.48382 2.35924 3.87320 5.91420 4.50262 967 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 805 2.00185 4.62691 4.05297 3.48075 2.53954 3.22377 4.29286 2.35837 3.41680 2.54917 3.73496 2.51185 4.39939 3.18470 3.26791 2.39556 3.23306 2.38579 5.22098 3.11601 968 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 806 2.29377 5.46215 3.22610 1.48154 4.79982 3.74669 3.93404 3.41622 2.33021 3.19957 4.50493 2.55201 4.14001 2.75372 2.59401 2.44936 3.20162 3.84885 5.89894 4.49330 969 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 807 2.42623 4.56060 4.22899 3.65094 3.67382 4.06505 4.34893 1.87101 3.12301 1.47684 3.67215 3.94832 4.43826 3.25141 3.26692 2.53676 2.75560 2.55157 5.16338 3.95884 970 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 808 2.51570 5.48024 1.88305 2.09183 4.82545 3.74192 3.92948 3.47525 2.15564 3.78556 4.52092 2.53003 4.13578 2.68775 2.78974 2.39582 2.86744 3.87097 5.91276 4.50159 971 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 809 2.97037 5.47497 2.94300 2.42416 3.05997 3.74399 3.93156 4.30178 1.92976 3.77904 4.51639 2.16598 4.13780 2.77101 2.48307 1.86627 2.91109 3.86437 5.90882 4.49957 972 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 810 2.73263 5.34472 3.27915 2.20285 4.63658 3.23699 3.96277 4.08653 2.05412 2.12371 4.39996 2.08000 4.16113 3.07981 3.20395 2.39129 3.20371 3.03391 5.81069 3.61777 973 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 811 2.96903 5.44164 2.93399 1.91591 4.77106 2.76456 3.93742 3.45796 2.04353 2.21182 4.48648 3.22233 3.35567 3.03901 2.78617 2.59848 2.57024 3.82385 5.88378 4.48253 974 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 812 2.96813 5.45899 2.91989 2.18817 3.65695 2.82166 3.33312 3.05708 2.67088 3.76074 4.50183 2.59685 4.13827 2.39201 2.34135 2.44962 2.35897 3.84518 5.89666 3.74506 975 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 813 2.13068 5.47649 2.83406 2.49812 4.82071 3.74192 3.25486 4.30606 2.41729 2.89925 4.51739 2.59495 2.68903 2.28290 2.43057 2.69487 2.77774 3.86668 5.90966 4.49925 976 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 814 2.63688 3.66044 3.10475 3.39648 3.79635 4.00113 4.26298 2.43733 3.34178 1.73922 3.24977 3.77635 4.37875 2.61703 2.52426 2.41325 3.23077 2.38886 5.25630 4.03154 977 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00815 5.20955 5.93189 0.61958 0.77255 1.00265 0.45714 815 2.19758 5.46738 3.22386 1.99449 4.80751 3.05935 3.32596 4.28943 1.83752 3.17089 4.50948 3.21491 4.13862 2.38148 2.50696 2.93466 2.90207 3.22083 5.90270 4.49558 978 k - X 2.68595 4.42097 2.77489 2.73037 3.46413 2.40572 3.72554 3.29212 2.67682 2.69358 4.24749 2.90319 2.73772 3.18115 2.89814 2.37900 2.77579 2.98578 4.58536 3.61562 0.84162 1.28575 1.22914 1.40221 0.28243 1.00265 0.45714 816 2.84908 5.34171 3.09829 1.82817 4.68710 3.11537 3.79779 4.16558 1.79512 3.64215 4.38438 3.08749 4.01124 2.54412 2.29551 2.38998 3.07838 3.73299 5.76948 3.59340 987 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01150 4.86721 5.58955 0.61958 0.77255 1.47337 0.26027 817 2.47614 4.55200 3.71822 2.78272 2.70004 3.81575 3.12655 3.04932 2.75941 1.95856 3.65536 3.55466 4.19496 3.40515 2.86597 2.73909 3.06655 2.21094 5.13419 3.03616 988 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01150 4.86721 5.58955 0.61958 0.77255 1.47337 0.26027 818 3.10322 5.67085 2.36841 1.20474 4.99435 3.65814 3.13715 4.50038 2.83377 3.96611 4.73369 2.65410 4.15580 1.88791 3.36350 3.02850 3.35295 4.05330 6.09746 4.64274 989 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01150 4.86721 5.58955 0.61958 0.77255 0.94964 0.48919 819 2.56526 5.37642 2.31353 2.07871 4.71137 3.66526 3.17374 4.19034 1.76019 3.67729 3.54329 2.72241 4.05943 2.95441 3.08457 2.85638 3.12095 2.53690 5.81501 4.41005 990 k - X 2.68616 4.42086 2.77516 2.73017 3.46386 2.40545 3.72527 3.29326 2.67702 2.69357 4.24578 2.90379 2.73772 3.18082 2.89833 2.37919 2.77552 2.98551 4.58344 3.61536 0.30989 1.33454 5.74784 1.04990 0.43074 1.30171 0.31754 820 2.65102 5.39520 2.42049 1.84828 4.73914 3.66108 3.84841 4.22417 1.82184 3.09975 4.43624 2.81872 4.05477 2.61593 2.69744 2.85028 2.79654 3.78525 5.82841 3.59456 994 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00981 5.02550 5.74784 0.61958 0.77255 1.30171 0.31754 821 3.28209 4.62601 5.17191 4.57961 3.61480 4.51376 4.86782 1.92503 3.18187 1.17302 2.79477 4.64268 4.83000 4.53485 4.44762 3.83762 3.51443 1.50709 5.32299 4.17203 995 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00981 5.02550 5.74784 0.61958 0.77255 1.30171 0.31754 822 2.22808 5.38174 2.83652 2.00599 4.72022 3.66330 3.85091 3.38042 2.16783 3.08688 4.42420 3.13336 4.05667 2.45100 2.43244 2.16038 3.11845 3.76885 5.81824 4.41160 996 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00981 5.02550 5.74784 0.61958 0.77255 0.74627 0.64271 823 2.24026 5.46786 3.19943 2.03310 4.81330 3.29625 3.91641 4.29882 2.22865 3.77271 4.50893 2.06084 4.12322 2.19897 2.62668 2.36156 3.18902 3.85880 5.89968 4.48940 997 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00846 5.17216 5.89451 0.61958 0.77255 1.07598 0.41698 824 2.08958 5.37682 2.89781 2.43145 4.68731 3.74057 2.87651 2.91586 2.09333 2.31687 4.42675 3.22279 4.13322 2.43966 3.16738 2.62487 2.89233 3.74874 5.83073 4.44172 998 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00846 5.17216 5.89451 0.61958 0.77255 1.07598 0.41698 825 2.63599 3.64713 2.50360 2.04722 4.62450 3.74963 3.94302 3.03623 2.33525 2.78411 3.39685 3.24063 4.14170 2.08465 2.84780 2.94353 2.89054 3.27182 5.79583 4.41833 999 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00846 5.17216 5.89451 0.61958 0.77255 1.07598 0.41698 826 2.19636 5.46095 2.59670 2.38580 4.80538 3.72520 3.91263 4.29084 2.15164 3.76587 4.50186 2.45349 4.11896 2.49825 2.31613 2.26869 3.18306 2.82330 5.89390 4.48338 1000 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00846 5.17216 5.89451 0.61958 0.77255 1.07598 0.41698 827 2.45016 5.48932 2.51649 1.35086 4.83428 3.73512 3.93082 4.32091 2.30887 3.79383 4.53120 3.20163 4.13536 2.37392 2.55505 2.65717 3.20779 3.88014 5.92050 4.50809 1001 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00846 5.17216 5.89451 0.61958 0.77255 1.07598 0.41698 828 2.61416 4.48657 3.34068 3.79571 3.59241 4.07938 4.37676 1.62009 3.12797 1.89155 2.94871 4.03162 4.44992 3.31089 3.35254 3.36070 3.22126 2.20365 5.09561 2.75450 1002 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09368 5.17216 2.47985 0.61958 0.77255 1.07598 0.41698 829 2.05668 5.36417 2.64530 1.97464 4.68458 2.78851 3.88743 4.15351 2.12605 3.06872 3.38031 2.89571 4.09044 2.99230 3.12086 2.88851 2.83671 2.89619 5.81192 4.41633 1003 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00921 5.08769 5.81004 0.61958 0.77255 1.21606 0.35154 830 2.49885 5.40838 2.42751 2.07399 4.74703 3.68918 3.87690 3.45865 2.25804 3.11805 4.45073 3.15912 4.08251 2.42987 2.72680 2.19190 2.54772 3.79557 5.84490 3.69121 1004 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00921 5.08769 5.81004 0.61958 0.77255 0.85072 0.55705 831 2.34408 4.56667 4.13428 3.55906 3.68364 3.37686 4.30644 2.74159 2.90945 1.36453 2.95406 3.31260 4.40243 3.75018 3.76125 2.53855 2.61878 2.55509 5.16631 3.95682 1005 l - X 2.68546 4.42280 2.77408 2.73053 3.46266 2.40497 3.72461 3.29288 2.67795 2.69377 4.24744 2.90401 2.73794 3.18201 2.89821 2.37941 2.77574 2.98452 4.58531 3.61558 0.30961 1.33367 5.89451 1.40115 0.28278 0.23984 1.54532 832 2.48993 5.55065 2.68845 2.08437 3.76243 3.31224 4.01876 4.37103 1.86262 3.85326 4.59295 3.30093 3.41918 2.52170 2.95879 2.71869 2.79047 3.30083 4.09897 2.79090 1011 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 833 2.09506 5.56618 2.62226 1.88058 4.91142 3.24309 4.01578 4.39747 1.93839 3.01177 4.60683 3.29605 4.22223 2.77445 2.35593 2.56297 2.98847 3.95692 5.99870 4.58770 1012 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 834 2.39828 5.56964 3.30236 1.63774 4.91533 3.24149 4.01761 4.40159 2.16916 3.87504 4.61036 2.51745 4.22406 2.14697 2.98779 2.22666 2.98915 3.96066 6.00179 4.59060 1013 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 835 3.09039 4.96613 3.75995 2.14484 4.13040 4.00975 4.23933 1.81794 2.87251 1.77797 4.06026 3.17173 4.39308 2.67051 3.13055 3.23817 3.32145 2.37771 5.52446 4.26094 1014 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 836 2.34652 5.56685 2.68522 2.10167 4.91235 3.82852 4.01568 4.39859 1.56626 3.41872 4.60743 2.73759 4.22215 2.63571 2.96695 2.22780 3.28639 3.95773 5.99922 3.51402 1015 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 837 2.31823 5.53373 2.67130 1.73095 3.26715 3.83441 4.02292 3.14930 2.76303 3.83327 4.57795 2.94275 2.93194 2.56814 2.94037 2.53918 2.64009 3.29441 5.97456 4.57185 1016 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 838 2.28996 3.00493 4.72919 4.13475 3.65096 3.52821 3.61852 2.18722 2.84334 1.55133 3.66841 3.60458 4.60666 4.18362 4.11853 3.53361 2.89823 2.80300 2.46354 3.33873 1017 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 839 2.68282 5.57002 2.12753 1.85280 4.91593 3.22761 3.41821 4.40265 1.70422 3.87564 3.72361 2.68086 4.22314 2.51902 3.24479 3.01857 2.99805 3.96113 6.00209 4.59037 1018 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 840 2.07083 5.42044 3.37339 1.90230 4.70817 3.31793 4.05304 3.03162 2.06883 3.13146 3.46653 3.35315 4.25070 3.17198 2.24493 2.78964 2.71425 3.33992 5.88905 4.51570 1019 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 841 2.32356 5.56246 2.54611 1.43746 4.90613 3.82923 4.01651 3.62806 2.19505 3.24898 4.60351 3.29723 4.22276 2.37472 2.95626 2.75597 2.87726 3.95235 5.99593 4.58586 1020 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 842 2.85055 4.56781 5.01255 4.40681 3.10112 4.33813 4.66543 1.95282 3.29742 0.94362 3.64270 4.45664 4.69668 3.40509 4.27184 3.64540 3.40893 2.29707 5.18982 4.01552 1021 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 843 2.21020 3.81591 2.98299 1.96421 4.88215 3.18716 4.02000 3.29337 1.84827 3.84721 3.69196 2.94717 4.22533 2.60118 2.70685 2.77768 3.28628 3.01074 5.98331 4.57751 1022 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 844 3.05489 5.55932 3.30604 2.03806 3.86964 2.90852 3.34767 4.38593 1.93643 2.73176 4.60067 3.02969 3.60952 2.82749 2.58783 1.94360 2.90487 3.94858 5.99351 4.58419 1023 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 845 2.76621 3.58300 4.85015 4.24932 3.02753 4.25761 3.35676 2.41824 4.08191 1.39108 3.06398 3.07581 4.62371 4.25540 2.86541 3.02604 2.44246 2.29307 5.14709 3.96514 1024 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 846 2.44865 5.48371 3.34076 1.72582 4.79510 3.84475 4.03565 3.66511 2.53828 2.88768 3.68824 2.37779 4.23736 2.85993 2.96444 2.71487 2.03346 3.29829 5.93709 4.54743 1025 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 847 2.33527 5.54950 2.96668 1.74035 3.76157 3.22962 3.02945 4.36881 1.91622 2.99974 4.59200 3.30161 4.22488 3.11796 3.24847 2.21164 2.73141 3.93643 5.98634 4.57956 1026 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 848 2.49820 5.51411 2.97727 2.10249 3.94537 3.83837 4.02779 3.15864 2.23954 2.95611 4.56049 3.31459 4.23131 1.92683 2.62466 2.29492 3.28736 3.27674 5.95991 3.76837 1027 q - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 849 2.53335 4.53824 4.81328 4.21453 3.63531 4.25427 3.06029 1.61949 3.06371 1.50447 2.71930 3.46271 4.62067 4.23452 4.15499 3.55313 3.34897 2.23413 5.15586 3.97276 1028 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 850 2.74543 5.56738 2.13729 1.66832 4.91231 3.82943 4.01724 4.39826 2.18597 3.87256 4.60818 3.29688 4.22347 2.56994 2.92378 2.06781 2.99796 2.95669 6.00004 4.58903 1029 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 851 2.74278 5.56946 2.50094 1.76100 3.76926 3.82956 4.01790 4.40100 1.97206 3.87480 4.61020 2.47558 4.22396 2.38549 3.24633 2.77602 2.21356 3.96020 6.00193 4.59049 1030 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 852 2.52661 5.19267 2.96259 2.96190 4.41005 3.25895 3.00517 3.81490 2.48014 1.96799 3.54748 3.01841 4.30747 2.90039 3.40542 2.64116 2.69987 2.59014 3.18193 3.46925 1031 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 853 2.33913 5.55355 2.92377 2.35190 4.89356 3.83073 4.01823 3.66678 1.84086 3.42589 3.78783 2.93834 4.22407 2.54871 1.78436 3.01973 2.97919 3.26640 5.98923 4.58144 1032 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 854 2.01381 5.55968 3.30726 2.30351 4.90205 3.83070 4.01781 4.38581 2.14419 3.22571 4.60116 2.33461 4.22414 2.61613 2.86279 2.21752 2.14463 3.94889 5.99381 4.58492 1033 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 855 3.05638 5.56943 2.93925 1.56175 4.91549 3.34727 2.94891 4.40216 2.49135 3.87506 4.60992 2.43010 4.22278 2.35927 2.29263 2.56050 3.28757 3.20951 6.00140 4.58982 1034 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 856 3.11463 3.68333 4.80265 2.83423 3.13825 3.32382 3.62302 2.70097 4.04587 1.34386 3.08737 4.31739 4.61731 3.52238 4.15060 3.54897 3.34673 2.59489 5.15468 1.87440 1035 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 857 2.21608 5.56005 2.87736 1.90865 4.90289 2.95546 4.01654 3.48920 2.28499 3.34809 4.60129 2.50055 4.22268 3.11360 2.33078 2.59227 2.70754 3.94949 5.99406 3.65356 1036 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 858 2.60964 5.56913 2.90474 1.09165 4.91290 3.83278 4.02149 4.39781 2.17840 3.35407 4.61048 3.30063 4.22761 2.78664 2.95849 2.77697 2.88287 3.95914 6.00214 4.59207 1037 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 859 1.75962 4.87776 3.38242 2.69032 3.45771 3.06782 4.28205 2.75517 2.56687 2.03705 3.23887 3.73064 4.42018 3.12370 3.64142 3.27474 2.90440 2.50673 5.45000 3.44331 1038 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 860 2.78426 5.52127 2.92978 1.94348 4.84772 3.36362 3.42248 2.92879 1.96642 2.47536 4.56686 3.31186 4.22993 2.49839 3.25782 2.47294 2.87677 3.28042 5.96526 3.81403 1039 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04313 5.38739 3.27980 0.61958 0.77255 0.48576 0.95510 861 1.93148 4.08350 3.30104 2.17259 3.85613 3.32917 4.00581 4.31611 1.71819 3.80978 4.55577 2.69390 4.21021 3.10726 2.61761 2.42475 2.93543 3.44231 5.95299 4.55150 1040 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.11731 5.35134 2.24479 0.61958 0.77255 0.62301 0.76858 862 2.14740 5.47453 3.26449 2.14591 4.80883 3.77822 3.96145 4.28238 1.74389 2.36266 4.51954 2.90475 4.17091 3.06296 2.25382 2.47780 3.23244 3.85970 5.91120 4.51389 1041 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08526 5.24192 2.57130 0.61958 0.77255 0.93199 0.50050 863 2.69133 4.45490 4.48380 3.89511 2.92142 4.09501 4.40015 2.36294 3.09598 1.70727 2.68786 4.08926 4.46407 2.75969 3.17259 2.78889 2.84434 1.98594 5.06713 3.87669 1042 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00852 5.16518 5.88753 0.61958 0.77255 1.08882 0.41040 864 2.68585 5.38202 3.22955 1.88300 4.69591 3.12580 3.13269 4.16047 2.16258 3.67391 3.06486 2.88224 3.50087 3.03326 2.78332 2.59370 2.82740 2.73984 4.07143 3.70846 1043 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00852 5.16518 5.88753 0.61958 0.77255 1.08882 0.41040 865 2.98166 5.49846 2.12056 1.46937 4.84212 3.24462 3.35005 4.33014 2.37270 3.80309 4.54091 3.19911 4.13777 2.48693 3.17635 2.35143 2.76648 3.88861 5.93043 4.51528 1044 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00852 5.16518 5.88753 0.61958 0.77255 1.08882 0.41040 866 2.17845 4.74147 3.77709 3.21105 3.88607 3.93205 4.17773 2.62540 2.30519 1.62931 3.84198 3.16521 4.31278 3.10192 3.08954 3.17070 2.77316 2.74629 5.31652 2.99324 1045 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00852 5.16518 5.88753 0.61958 0.77255 1.08882 0.41040 867 2.94750 5.45132 2.56691 2.18628 4.79354 3.72228 3.90962 3.04957 2.09616 3.26105 4.49273 2.40546 4.11570 2.30575 2.60995 2.58423 2.61682 3.23462 5.88569 4.47650 1046 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00852 5.16518 5.88753 0.61958 0.77255 1.08882 0.41040 868 2.04530 5.45521 2.85528 2.11505 3.66045 3.72191 3.32854 4.28367 1.96137 3.75982 4.49631 2.87994 4.11558 2.43855 3.13744 2.21112 2.72802 3.84502 5.88877 4.47867 1047 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00852 5.16518 5.88753 0.61958 0.77255 0.73030 0.65733 869 2.41327 5.49544 2.47078 1.62081 4.83925 3.75995 3.94814 4.32414 2.33589 2.63310 4.53668 3.22783 4.15438 2.19599 2.59701 2.71939 3.21923 3.88545 5.92847 4.51847 1048 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 870 3.00030 4.99312 3.55452 2.37665 4.17999 3.88475 3.48184 2.84808 2.21549 1.93593 3.41015 3.48108 4.27092 2.90561 2.42355 2.74130 3.23175 2.86964 3.56926 3.37943 1049 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 871 2.99565 5.51001 2.27735 1.93980 4.85545 3.76150 3.95371 4.34256 2.30194 3.81533 4.55108 2.14114 4.15875 2.45686 2.89948 2.49886 2.17095 3.90095 5.94184 4.52918 1050 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 872 2.73687 5.50311 3.23428 1.35658 4.84857 3.76419 3.95182 4.33348 2.26858 3.80752 4.54443 2.81643 4.15912 2.28862 2.79155 2.26367 2.83726 3.89412 5.93447 4.52505 1051 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 873 3.01003 4.79419 3.79370 3.22834 3.30477 3.96405 3.50353 2.93336 2.86437 1.35460 3.89386 2.71681 4.34526 3.06660 3.01227 2.75333 2.58762 2.64179 5.36725 4.12093 1052 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 874 2.98920 5.31698 3.31907 1.61715 4.59386 3.79424 3.98982 3.06573 2.07180 2.79992 4.37634 3.29526 4.18565 2.78100 2.65543 2.73225 2.83249 2.58503 5.79260 3.64448 1053 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04435 5.24192 3.26774 0.61958 0.77255 0.93199 0.50050 875 2.45586 5.48204 2.33301 2.26815 4.82745 3.11333 3.92987 4.31377 1.60960 3.78737 4.52284 3.20859 4.13601 2.31395 2.89540 2.67752 2.56763 3.87291 5.91430 4.50290 1054 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 876 2.64408 5.33188 3.28554 1.91791 3.73624 3.77055 3.96414 2.77207 2.21424 2.20710 4.38815 2.85664 4.16233 2.16497 2.81669 2.96553 3.20285 3.69145 5.80004 4.42720 1055 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 877 2.57619 4.41385 4.90192 4.29320 3.50594 4.18806 4.51792 1.61563 4.09792 1.40132 2.59378 3.33299 4.55158 4.24583 4.13787 3.49592 2.89618 2.45165 5.03747 3.13421 1056 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 878 2.14237 5.46669 3.21979 1.64720 4.80725 3.23877 3.92986 4.28984 2.11776 3.00172 4.50862 2.54029 3.43833 2.63473 2.86863 2.93167 3.19839 3.30844 5.90195 4.49402 1057 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 879 2.46731 5.44151 2.52772 2.16376 3.80433 2.89519 3.93482 4.24738 1.95697 2.92109 3.49738 2.70773 4.13929 2.69403 3.16573 2.93604 2.59694 3.09718 5.88317 4.48134 1058 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 880 1.78235 3.35131 4.44836 3.29913 3.59473 4.10642 3.42820 2.43890 3.15923 1.97942 2.61002 4.07865 4.47626 3.96934 3.31016 2.89137 3.23978 2.21907 5.10120 3.29270 1059 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 881 2.72498 5.46816 3.22304 2.00410 4.80913 3.74467 3.93108 4.29121 2.29139 3.77107 3.37079 2.32510 4.13790 2.54454 1.84109 2.43358 3.20065 3.25031 5.90274 4.49570 1060 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 882 2.99105 5.50623 2.37887 1.70039 4.85214 3.75066 3.94558 4.33923 1.97364 3.81103 4.54779 2.79550 4.15053 2.70056 2.34607 2.10619 3.22289 3.89754 5.93674 4.52410 1061 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 883 2.99310 5.50944 2.73210 1.60521 4.85390 2.80264 3.94882 4.34173 2.18145 3.81442 4.55140 2.77734 4.15162 2.01520 3.18586 2.63760 2.57869 3.89997 5.94133 4.52692 1062 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 884 2.69185 4.96980 3.54100 2.47793 3.21002 3.86822 4.08916 2.64935 2.17297 2.33795 3.02969 3.05942 4.25431 2.36045 2.71603 3.08544 3.21366 2.83586 5.51156 3.35976 1063 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 885 2.96603 5.47619 2.82828 2.28674 4.82108 3.31919 3.39913 3.13467 2.08468 3.78138 4.51691 2.23211 4.13331 2.41265 2.37176 2.66528 2.53036 3.86674 5.90897 3.67692 1064 k - X 2.68633 4.42240 2.77534 2.73073 3.46369 2.40527 3.72509 3.29369 2.67755 2.69370 4.24704 2.90361 2.73754 3.18007 2.89815 2.37901 2.77534 2.98533 4.58075 3.61518 0.05141 3.04819 5.92809 1.57516 0.23190 0.82204 0.57899 886 2.74752 5.48381 2.89748 1.64950 4.82450 3.75897 3.36482 4.30731 1.80989 3.15163 4.52567 3.22813 4.15241 3.04428 2.86565 2.18135 2.82350 3.17260 5.91906 4.51088 1072 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 887 2.38121 4.53801 5.08145 4.47516 2.66291 4.34716 4.68621 2.00724 4.27777 0.98076 3.57354 4.49373 4.69833 4.41107 4.30529 3.08324 3.39930 2.44154 5.17398 4.00521 1073 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04210 5.24192 3.32608 0.61958 0.77255 0.93199 0.50050 888 2.65540 5.46529 2.91713 1.85550 4.80425 3.74474 3.93270 4.28574 1.75050 2.81945 3.50565 3.21458 4.13844 2.06643 3.16047 2.45963 3.20078 3.85267 5.90144 4.49445 1074 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 889 2.31249 5.44453 3.23251 2.23363 4.77538 3.74860 3.37440 3.62236 1.82645 2.67185 4.48907 2.89490 4.14163 3.03780 2.19339 2.41978 2.80784 3.82754 5.88553 4.48406 1075 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 890 2.96959 5.47605 2.91308 1.58311 4.81928 3.25989 3.93071 2.97039 2.13306 3.78048 4.51734 2.55776 4.13673 3.02778 2.59317 2.22837 2.88011 3.86573 5.90971 4.49977 1076 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 891 2.73512 4.50534 4.42615 2.85633 3.60979 4.10899 4.40768 1.61767 3.72558 1.74805 2.98181 4.06911 4.47874 3.17745 2.80619 3.39191 3.24668 2.09738 5.11630 3.92234 1077 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 892 2.96853 5.46387 2.04229 2.02331 4.80243 3.14117 3.35261 3.07166 2.66963 2.51541 4.50630 2.62287 4.13766 2.33408 2.84054 2.93370 2.87737 3.85102 5.90040 4.49329 1078 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 893 2.27937 5.48619 2.58406 1.78925 4.83195 3.09633 3.93206 4.31873 2.09978 3.79167 4.52692 2.23147 4.13798 2.77041 2.52475 2.93419 2.89423 3.87725 5.91814 4.50620 1079 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20798 5.93033 0.61958 0.77255 1.00589 0.45527 894 2.72582 4.42865 2.93209 4.17111 2.60692 4.16370 3.39689 1.87521 3.99995 1.40781 2.97737 4.25408 4.52912 4.16942 4.08158 3.46547 3.25094 2.67634 5.04335 2.79325 1080 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07825 5.20798 2.66223 0.61958 0.77255 1.00589 0.45527 895 2.95557 5.45185 3.20781 1.56707 4.79677 3.72704 3.90829 4.27692 2.05942 3.75355 4.49408 3.19618 4.11983 2.19428 2.36205 2.62503 2.54955 3.25401 5.88143 4.47864 1081 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 896 2.93585 5.44220 2.55898 1.95332 4.78551 3.71002 2.94861 3.60898 2.19728 2.82964 4.48336 2.19563 4.10354 2.99426 2.54349 2.53707 2.84537 3.83190 5.87588 4.46606 1082 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 0.94719 0.49074 897 2.95936 5.47101 2.36119 2.31634 4.81707 3.73019 3.91770 4.30310 1.74701 3.06501 4.51177 2.38314 4.12465 2.51281 2.37162 2.35733 3.19045 3.86226 5.90239 4.49168 1083 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00842 5.17713 5.89947 0.61958 0.77255 1.06671 0.42181 898 3.67537 4.94848 5.69469 5.13405 3.94356 5.04062 5.47134 1.31285 4.98342 1.19293 2.96243 5.20134 5.30039 5.09351 5.01980 4.39755 3.01809 1.60581 5.82267 4.68869 1084 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00842 5.17713 5.89947 0.61958 0.77255 1.06671 0.42181 899 2.95466 5.44038 3.21179 1.51626 3.85981 3.73172 3.22603 4.25384 2.30837 3.74116 3.48786 2.14483 4.12518 2.76764 3.14915 2.64124 2.46668 3.82550 5.87912 4.47461 1085 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00842 5.17713 5.89947 0.61958 0.77255 1.06671 0.42181 900 2.64066 5.46678 2.78559 2.05066 4.81232 3.22742 3.91526 4.29840 1.49354 3.28494 4.50747 2.84087 4.12185 2.31559 2.76336 2.91746 2.91490 3.85770 5.89891 4.48795 1086 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00842 5.17713 5.89947 0.61958 0.77255 1.06671 0.42181 901 2.96762 4.96718 2.64431 2.65274 3.25272 3.27608 4.07009 2.72170 2.22657 2.18441 3.40767 3.44403 4.23655 2.69032 3.37150 2.70490 2.76868 3.27056 3.77655 3.03329 1087 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00842 5.17713 5.89947 0.61958 0.77255 1.06671 0.42181 902 2.95429 5.46278 2.57310 2.08569 4.80710 3.72776 3.91498 4.29237 2.04447 3.76759 2.46941 2.53576 4.12142 2.22876 2.61864 2.63228 3.18542 3.85304 5.89574 3.61673 1088 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00842 5.17713 5.89947 0.61958 0.77255 1.06671 0.42181 903 2.63673 5.16695 3.35838 2.58172 4.40644 3.79126 3.99470 3.14157 2.19051 2.58557 4.23718 3.32074 4.18109 2.54635 2.92221 2.00088 2.36174 2.80971 5.66852 3.28409 1089 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00842 5.17713 5.89947 0.61958 0.77255 1.06671 0.42181 904 2.45460 5.46614 2.60553 1.79086 4.81134 3.72827 3.38574 4.29713 1.90054 2.62269 4.50694 2.65698 4.12220 2.67313 2.65127 2.91791 3.18689 3.85689 5.89843 4.48775 1090 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00842 5.17713 5.89947 0.61958 0.77255 1.06671 0.42181 905 2.97148 5.24847 3.32859 2.51170 4.51183 3.78427 3.97802 3.38745 1.96436 1.87234 4.31239 2.64719 4.17433 3.11171 2.26799 2.98469 2.41401 3.59454 5.73150 3.57899 1091 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00842 5.17713 5.89947 0.61958 0.77255 1.06671 0.42181 906 1.84742 5.40534 2.83029 2.26753 3.63738 3.73732 2.82713 4.19552 2.33590 3.70027 3.60061 2.59460 4.13022 3.03175 3.16036 2.52010 2.50985 3.11069 5.85277 4.45686 1092 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00842 5.17713 5.89947 0.61958 0.77255 1.06671 0.42181 907 2.18663 5.40584 2.90471 2.03784 4.72695 3.73720 3.92692 3.01939 2.45996 3.70086 3.52260 2.62309 4.13009 2.34315 3.16011 2.56126 2.47691 3.34110 5.85312 3.48402 1093 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00842 5.17713 5.89947 0.61958 0.77255 1.06671 0.42181 908 2.01451 4.39653 4.83222 4.22566 3.01791 4.15517 3.58659 2.26219 3.34794 1.24317 3.00898 4.27307 4.51989 4.19461 4.09357 3.46061 3.23274 2.43529 5.01580 3.20168 1094 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00842 5.17713 5.89947 0.61958 0.77255 1.06671 0.42181 909 2.43410 5.40890 3.22550 1.68167 4.73103 3.27401 3.92708 4.20102 2.10167 2.45391 4.45581 2.84593 4.13037 2.77716 3.15967 2.67992 2.58283 3.13504 5.85562 4.45907 1095 e - X 2.68620 4.42227 2.77522 2.73125 3.46356 2.40515 3.72497 3.29356 2.67743 2.69357 4.24692 2.90349 2.73742 3.18148 2.89803 2.37889 2.77522 2.98476 4.58479 3.61505 0.10229 2.97046 3.08010 0.30039 1.34912 1.06671 0.42181 910 2.93664 5.43731 3.18617 2.11300 4.77867 3.71049 3.11331 3.50437 2.03484 3.74063 4.47919 2.55945 4.10431 2.44916 3.12368 1.78195 2.54373 3.82601 5.87182 4.46379 1097 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00880 5.13295 5.85530 0.61958 0.77255 1.14493 0.38309 911 2.25616 5.43896 2.53366 2.24131 4.78210 3.70739 3.89465 3.47666 2.01144 2.95700 4.48015 2.54910 4.10084 2.66280 2.44720 2.53452 2.85507 3.82857 5.87278 4.46304 1098 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00880 5.13295 5.85530 0.61958 0.77255 0.93270 0.50004 912 2.62534 2.87841 4.78186 3.45033 3.49781 4.14655 4.47023 1.64030 4.00060 1.55558 3.52033 3.42301 4.51208 4.16568 3.18442 3.44969 3.23011 2.31915 3.53408 3.84102 1099 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00842 5.17713 5.89947 0.61958 0.77255 1.06671 0.42181 913 2.27171 5.45559 2.61220 1.98907 4.79720 3.72809 3.91555 4.28072 1.83047 3.75937 3.14104 2.90311 2.86550 3.01302 2.76550 2.91705 2.80660 3.84437 5.89031 3.61549 1100 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04739 5.17713 3.20295 0.61958 0.77255 1.06671 0.42181 914 2.93596 5.42370 2.37257 1.74492 4.75927 3.71322 3.90123 2.86897 2.29347 3.03312 3.59399 2.65743 4.10648 2.42239 2.73297 2.90268 3.16711 3.80923 5.86205 3.65913 1101 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 915 2.95401 3.02116 3.63587 2.27960 3.17732 3.06520 4.11249 2.98066 2.53960 2.12771 3.91448 3.53017 2.86409 2.62235 3.44794 2.67884 3.18560 3.10744 3.91755 3.45358 1102 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 916 2.62270 5.43387 2.86102 1.94890 4.77366 3.24117 3.89902 4.25592 2.63580 2.93142 4.47594 2.41239 3.43070 1.89244 2.80223 2.90046 2.80917 3.82167 3.77282 4.46195 1103 q - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 917 2.62025 5.20891 3.30289 2.19878 3.40187 3.75841 3.95786 2.30041 1.90332 2.96429 4.27379 3.27279 3.31245 2.47454 2.86127 2.72777 3.17252 3.11919 5.69778 4.34695 1104 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 918 2.56384 5.42734 3.19709 1.86897 4.76377 3.12882 3.90337 4.24257 1.76909 2.53301 4.47059 2.48756 4.10970 2.76753 2.73232 2.90676 3.17106 3.30170 5.86454 4.46047 1105 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 919 2.98180 4.43293 4.54198 3.31186 3.52705 4.09928 3.44353 1.53024 3.80751 1.47490 3.08858 4.11759 4.46680 3.17774 3.95489 3.39121 3.21367 2.68282 5.04357 2.78013 1106 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 920 2.64174 5.40369 3.20219 2.21471 4.73105 3.23141 3.90572 4.20469 2.18796 3.70138 3.44445 2.80485 2.13249 3.00803 2.47531 2.46739 2.87713 3.28545 5.84711 3.56566 1107 p - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 921 2.94095 5.20611 2.86959 2.13107 3.54775 3.75868 3.42608 3.14500 2.53945 2.21117 4.27122 2.94839 2.97908 3.09493 2.88733 2.38267 2.84455 3.00708 3.96312 4.34530 1108 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 922 2.97487 3.45924 4.59711 3.34011 3.09676 3.23306 4.41541 2.14798 3.01064 1.49579 2.72381 4.14407 4.46917 4.04908 3.98301 2.27323 3.20696 2.66311 5.02769 3.31167 1109 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 923 2.68856 5.45516 3.18415 1.86965 4.80038 2.47987 3.90396 4.28544 2.10410 3.75967 4.49658 2.87711 4.11083 2.45136 2.72675 1.90813 3.17752 3.84605 5.88685 4.47707 1110 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00875 5.13849 5.86083 0.61958 0.77255 1.13564 0.38745 924 2.43611 5.25352 2.42446 2.42569 3.48144 2.74373 3.94457 3.25159 2.34079 2.35689 4.31421 3.25173 3.27960 2.70469 3.19337 2.68552 3.17098 2.77236 5.73261 4.37063 1111 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04504 5.13849 3.26566 0.61958 0.77255 1.13564 0.38745 925 2.93219 4.93991 3.47331 2.08653 2.88327 3.81234 3.03074 3.51955 2.89602 2.30979 4.02544 3.40312 3.48002 3.23345 2.54703 2.59998 2.48546 2.32935 5.47823 4.18630 1112 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 926 2.92098 5.37021 1.98630 2.63832 4.69046 3.09612 3.89422 4.15919 2.16657 3.19224 2.93877 2.88212 2.39041 2.99918 2.75157 2.89543 2.72816 3.29785 5.81806 4.42273 1113 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 927 2.52596 4.56393 2.57465 2.33582 3.68476 3.97941 4.25155 2.25170 3.38888 1.73736 3.02218 3.80165 4.35479 3.66550 3.68816 3.23951 3.18277 2.29328 5.16095 3.17282 1114 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 928 2.35417 5.41028 2.06567 1.94000 4.74568 3.27370 3.88740 4.22505 2.45702 3.21815 4.45375 2.55783 4.09213 2.98708 3.11816 2.62418 2.56468 2.84461 5.84886 4.44347 1115 e - X 2.68624 4.42231 2.77526 2.73130 3.46360 2.40519 3.72501 3.29315 2.67747 2.69361 4.24539 2.90353 2.73746 3.18153 2.89807 2.37893 2.77526 2.98474 4.58483 3.61509 0.16315 1.91335 5.82487 0.15355 1.94951 1.19365 0.36113 929 2.22365 5.42839 2.14459 2.18806 3.73135 3.69328 3.21196 4.25825 2.25577 3.23686 4.46924 2.76708 3.28950 2.62320 2.78401 2.45860 3.15052 3.81865 5.86147 4.45093 1117 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00908 5.10253 5.82487 0.61958 0.77255 1.19365 0.36113 930 2.58493 4.70362 3.27618 2.81794 2.82903 3.28963 4.15013 2.35818 3.14897 1.95285 3.80448 3.08217 2.88325 3.00823 3.51944 3.14221 2.75598 2.70076 5.27974 3.11190 1118 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04383 5.10253 3.30212 0.61958 0.77255 1.19365 0.36113 931 2.90640 3.92279 2.07742 2.07199 4.60332 3.69900 3.89143 3.35736 2.64647 2.73342 4.35567 3.18632 2.90980 2.51008 2.85854 2.59912 2.75330 3.04743 5.76339 4.38115 1119 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.10451 5.06809 2.37577 0.61958 0.77255 1.24445 0.33982 932 2.60758 5.02076 2.39579 1.84803 3.30019 3.07905 3.92188 2.62423 2.73726 2.80579 4.09564 2.78029 4.10334 3.08395 3.19460 2.92023 3.10248 2.91655 5.53347 3.44890 1120 e - X 2.68681 4.42288 2.77380 2.73186 3.46013 2.40548 3.72558 3.29144 2.67767 2.69343 4.24753 2.90410 2.73764 3.18148 2.89864 2.37895 2.77542 2.98531 4.58540 3.61472 0.07615 2.65978 5.69625 2.78588 0.06366 1.15812 0.37699 933 2.09356 5.31412 2.51910 2.42783 4.62577 3.16300 3.86521 2.95649 1.88535 3.14131 3.40471 3.15591 4.06693 2.71546 3.10083 2.36543 3.11827 3.68667 5.76734 4.37752 1146 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04613 5.02384 3.25702 0.61958 0.77255 1.11127 0.39919 934 2.56676 4.88331 3.46467 2.90394 3.20292 3.78867 4.01016 3.08110 2.60054 2.72029 3.15545 2.87853 3.50683 2.83503 2.93355 2.13087 2.31283 3.18455 5.42599 2.84920 1147 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00973 5.03372 5.75607 0.61958 0.77255 1.29109 0.32154 935 2.89234 5.39711 2.51316 2.18541 4.73943 3.66525 3.85386 3.32958 2.15390 3.70120 4.43863 2.79276 2.93576 2.55755 3.08278 2.20529 2.14403 3.78630 5.83132 4.42168 1148 t - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00973 5.03372 5.75607 0.61958 0.77255 1.29109 0.32154 936 2.89133 5.29989 2.10880 2.24300 4.60462 3.68184 3.87364 3.36265 2.45467 3.01695 3.02480 2.76872 4.07426 2.69657 2.75389 2.50321 3.12253 3.03627 5.75750 2.99448 1149 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00973 5.03372 5.75607 0.61958 0.77255 1.29109 0.32154 937 2.89458 5.14038 2.66224 2.24490 4.39131 2.50885 3.91731 3.10729 2.70595 2.79489 3.37023 2.47787 4.10675 3.05774 3.17519 2.52622 2.45405 2.92340 5.63393 3.50570 1150 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04227 5.03372 3.35603 0.61958 0.77255 1.29109 0.32154 938 2.87791 5.36890 2.22643 1.77506 3.67714 3.65368 3.84240 3.40702 2.34033 3.67061 4.41186 3.12431 3.24594 2.54666 3.07232 2.21903 2.70171 3.75505 5.80657 4.40051 1151 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01005 5.00150 5.72385 0.61958 0.77255 1.17824 0.36791 939 2.53995 5.21380 2.59536 2.22463 4.48758 2.82171 3.17541 3.92615 2.66957 2.25293 3.36565 3.20442 4.09297 3.02453 3.14651 2.08749 2.82959 3.13841 5.69183 4.32855 1152 s - X 2.68749 4.42214 2.77058 2.71912 3.46807 2.41114 3.72781 3.28863 2.67914 2.69318 4.23876 2.90437 2.73973 3.17982 2.89840 2.38034 2.77855 2.98416 4.59302 3.61194 1.28802 0.32707 5.75932 3.25286 0.03943 0.18959 1.75618 940 2.56504 5.53969 3.31450 1.80957 3.74072 3.34656 4.02145 3.67143 2.15091 3.21314 4.58323 2.84669 3.18511 2.39346 2.35493 3.02275 2.93555 3.00159 5.97897 4.57472 1240 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 941 3.05450 5.56617 2.79501 2.14453 4.91169 3.82811 3.47354 3.61406 1.99997 3.87164 3.54508 2.51346 3.41863 2.07731 2.40245 2.54202 3.28565 3.20872 5.99858 4.58737 1241 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 942 3.05907 5.44920 3.35884 1.95963 3.82664 3.85275 4.04527 2.91798 1.58133 3.73417 3.74574 3.03394 4.24492 2.89816 2.27182 2.72414 3.29024 2.92857 5.91094 3.66607 1242 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 943 2.53624 4.53909 4.82633 2.82568 3.05214 4.25945 4.57899 1.44884 4.06531 1.48853 3.65540 4.33272 4.62557 4.24441 3.42428 3.08488 3.35226 2.38002 5.15818 3.97539 1243 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 944 2.60724 3.85549 2.33872 2.10519 4.91303 2.97353 2.90176 4.39958 1.86613 3.31092 4.60759 2.44097 4.22149 2.65163 2.86574 2.78760 3.28571 3.95822 5.99932 4.58787 1244 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 945 3.05555 5.56332 2.89279 1.72232 4.90735 3.82949 4.01655 4.39241 1.96774 3.06009 4.60431 2.90290 4.22298 2.82337 2.15255 2.78284 2.42498 2.98181 5.99651 4.58642 1245 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 946 2.48192 2.38701 4.93151 4.32601 3.61088 3.36169 4.59500 2.69058 3.38027 1.41713 2.55376 4.38141 4.63467 3.50827 4.20361 3.57404 2.88155 2.01009 5.13576 3.95610 1246 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 947 3.07515 5.57720 3.30871 1.64169 4.92011 3.84236 4.03163 4.40293 2.15913 2.71651 4.61954 2.25636 4.23864 1.79127 3.25086 2.72723 3.03165 3.96691 6.00948 4.60190 1247 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 948 2.59743 5.49733 3.33411 1.98478 3.79589 3.84183 4.03207 3.51963 1.93335 2.80318 4.54552 2.97905 4.23459 2.39711 2.88006 2.35643 2.66269 3.38492 5.94733 3.58377 1248 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 949 2.34576 5.55362 2.66446 1.80641 2.83715 3.83050 3.37959 3.43627 2.14317 3.85677 4.59560 2.84390 4.22385 2.55993 2.63761 3.01946 3.28603 3.39321 5.98931 3.59712 1249 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 950 2.78684 4.52176 5.05568 4.44555 3.11524 4.31077 4.64479 1.99161 3.49809 1.15183 3.63907 4.45610 4.67347 4.38522 4.27101 3.18268 3.01538 1.76895 5.15275 3.97546 1250 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 951 2.73310 5.56633 2.68536 1.84785 4.91174 3.82826 3.48766 3.57596 1.88882 3.87175 4.60691 2.87099 2.72215 2.46499 3.24289 2.28320 3.28596 3.29132 5.99878 4.58759 1251 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 952 2.34855 5.58172 2.99944 1.29680 4.92617 3.20465 4.02991 4.41196 1.72996 3.88669 4.62389 3.30441 4.23473 3.12745 2.94110 2.76384 2.99632 3.97231 6.01470 4.60331 1252 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 953 3.19899 4.57193 5.14026 4.52703 2.37624 4.37047 4.69859 2.44003 4.31806 1.05513 2.24335 4.52556 4.72430 4.44347 3.56429 3.68251 2.93705 2.79796 5.18012 2.84245 1253 l - X 2.68627 4.42234 2.77529 2.73108 3.46363 2.40501 3.72504 3.29363 2.67717 2.69364 4.24699 2.90356 2.73749 3.18156 2.89740 2.37896 2.77529 2.98528 4.58486 3.61512 0.48671 1.82019 1.49897 0.11307 2.23579 0.48576 0.95510 954 2.20260 5.48499 2.49670 2.09184 4.82832 1.97460 3.92450 4.31562 2.08023 3.78934 4.52786 2.46280 4.12631 3.02329 2.76935 2.92929 3.20312 3.87504 5.91719 4.50286 1255 g - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00876 5.13747 5.85982 0.61958 0.77255 0.22383 1.60669 955 2.32966 5.56746 2.99974 2.11370 4.91352 3.22297 2.96827 4.40020 2.20430 3.87317 4.60787 2.45485 2.61932 2.74651 2.86542 2.45013 2.76823 3.95863 5.99955 3.65530 1256 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 956 3.60395 4.91600 5.58347 5.00606 3.15986 4.89399 5.28807 2.07497 4.83512 1.94581 3.88454 5.04787 2.32153 4.96840 4.87291 4.23170 3.84111 0.83447 5.71661 4.55197 1257 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 957 3.26170 5.72575 2.13079 2.84623 3.68390 3.30278 4.21073 4.52652 2.75897 4.03219 4.80191 0.93231 4.38068 3.32990 3.52086 3.21985 2.71258 4.11125 6.18924 4.77375 1258 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 958 2.70399 4.52367 4.89128 4.28822 2.41364 4.26478 4.58792 2.22428 2.56959 1.67036 2.21353 3.41710 3.04261 4.27960 4.18809 3.56744 3.34945 2.23211 5.14248 3.96175 1259 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 959 3.06275 5.55381 3.31895 2.40381 4.89278 2.73393 4.02365 4.37245 1.74191 2.86144 3.69178 2.52434 4.23115 3.12259 2.14125 1.98724 3.29341 3.94128 5.98905 4.58470 1260 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 960 1.10756 4.55046 4.76977 4.17518 2.46466 3.36931 4.56781 2.45750 4.02384 2.74600 3.67062 4.30252 4.61533 4.21223 4.14159 2.49385 3.35090 2.35193 5.16916 3.23030 1261 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 961 3.11121 4.57297 3.58675 3.48735 2.70990 4.22270 3.18574 1.73726 3.91234 1.72291 2.60642 3.24496 4.59146 3.12257 4.07398 3.51178 3.34327 2.34371 5.18580 3.24232 1262 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 962 2.60897 5.57398 2.71015 1.50524 4.92009 3.83074 4.01941 4.40692 2.31858 3.87953 4.61460 2.72426 4.22561 2.09043 2.31289 2.79062 2.99114 3.96522 6.00569 4.59384 1263 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 963 2.71839 5.56703 2.38774 1.48643 4.91215 2.39726 4.01659 4.39818 2.55063 3.37063 3.69158 2.88699 4.22292 2.55272 2.52637 3.01828 3.28732 3.95771 5.99958 4.58854 1264 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 964 3.85939 5.16120 5.62464 5.13541 1.49262 4.93452 4.62088 2.61344 4.92024 2.40352 3.03702 4.93615 5.25600 4.91984 4.87509 4.26674 4.08433 3.41967 2.18519 1.20551 1265 y - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 965 1.92192 5.56536 2.28106 1.60282 4.90969 3.82936 4.01707 4.39521 2.35312 3.29852 4.60628 2.67392 4.22325 2.82700 2.96449 2.77379 3.28742 3.26853 5.99841 4.58777 1266 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 966 2.73311 5.56382 2.66364 1.68068 4.90819 3.82880 4.01594 4.39364 1.70287 3.86877 3.59885 2.66999 4.22230 3.11253 2.49841 2.53624 3.28603 3.48041 5.99688 3.69543 1267 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 967 2.51219 3.93524 3.08572 2.47349 2.67399 3.37773 4.17860 3.11684 2.34971 2.89264 4.15906 3.17595 4.34483 3.38403 3.01872 3.17497 2.63119 1.76017 5.61296 4.32319 1268 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 968 2.60064 5.55072 3.31059 1.76148 4.88940 3.83184 4.01937 4.37070 2.05284 3.00013 4.59311 2.35793 4.22515 2.84144 2.64235 2.73587 2.37117 2.88627 5.98713 4.58034 1269 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 969 2.35247 5.59474 2.39254 1.35863 4.93965 3.18044 4.03573 4.42704 1.87343 3.89976 4.63645 3.30558 4.23954 2.86735 2.99734 2.72388 3.31164 3.98549 6.02647 4.61297 1270 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 970 3.33703 5.69454 3.66939 2.49622 5.05850 4.08312 4.17070 4.48291 2.28893 2.57066 4.74773 3.56634 4.45796 2.30205 1.12998 3.31496 3.54536 4.10034 6.07087 2.66336 1271 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 971 2.30205 5.08355 3.63064 2.46697 2.19408 3.96400 4.18051 3.66139 2.73584 2.61048 4.16952 3.55697 4.34999 2.93661 2.48793 3.18132 3.31419 3.38777 5.62002 1.80598 1272 y - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 972 2.48475 5.56653 2.75022 1.52560 4.91108 3.22827 4.01739 4.39679 2.05719 3.10051 3.59873 2.31470 4.22354 2.48194 3.24543 3.01906 3.28797 3.95691 5.99943 4.58859 1273 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 973 2.77956 5.50838 2.36671 1.67379 2.91408 3.83957 4.02928 3.20829 2.23519 3.37292 4.55539 2.92440 4.23246 2.87979 2.89091 3.03035 2.90548 2.64718 5.95563 4.55956 1274 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 974 3.09380 4.82692 3.95213 2.93943 3.96586 4.06755 4.31758 2.62113 2.99881 1.12457 3.92938 3.79521 4.44709 3.06046 2.64158 2.81668 2.96654 2.77812 5.40658 3.57914 1275 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 975 2.31846 5.48607 3.03367 2.44945 4.79839 3.84418 4.03499 3.54605 2.03790 3.77729 3.71512 2.66152 4.23682 2.88799 3.27054 2.05881 2.57482 2.32165 5.93887 3.62115 1276 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 976 2.59815 5.56130 2.97835 1.74691 4.90466 3.32988 4.01630 3.46420 2.55922 2.92275 4.60241 2.87197 4.22250 2.47513 2.53309 2.22082 2.43512 3.95102 5.99500 4.58507 1277 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 977 3.05509 5.56800 2.70984 1.92552 4.91409 3.32378 4.01525 4.40072 1.80233 3.87366 3.69254 2.78201 4.22184 2.13517 2.39522 2.47229 3.28623 3.95919 6.00000 3.76620 1278 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 978 2.45655 4.58561 4.57847 3.99097 2.30813 4.21351 4.51652 2.52589 2.46737 1.59366 3.70044 4.19655 4.58294 3.51564 2.70069 3.49957 2.85220 2.37306 5.19698 3.02315 1279 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 979 2.78297 5.56406 3.01032 1.24046 4.90845 3.82898 4.01615 4.39388 2.19987 3.24485 3.77176 2.91579 4.22251 2.44949 2.94554 2.69377 2.87729 3.95434 5.99710 4.58664 1280 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 980 2.79174 5.56386 2.31803 1.85626 4.90837 3.82853 4.01565 3.46614 2.37938 3.86890 3.74892 2.58411 4.22200 2.74733 2.12199 2.58225 2.65613 3.43653 5.99688 4.58627 1281 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 981 2.06831 4.57061 2.42131 3.45887 3.09275 4.23326 4.54231 2.28789 3.94112 1.31572 3.68455 4.24760 4.60129 4.14674 4.09323 3.52420 3.34869 2.34422 5.18523 3.34713 1282 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 982 2.73343 5.56540 2.42106 1.92039 4.91043 3.82868 4.01571 4.39630 1.86640 3.39777 4.60610 3.29619 4.22219 2.56828 2.30868 2.71385 2.35145 3.31616 5.99804 4.58722 1283 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 983 1.96426 5.56175 2.91772 2.06840 4.90533 3.22882 4.01616 3.55923 1.95201 3.30712 4.60280 2.76347 4.22240 2.25652 2.92517 3.01762 2.74190 3.46850 5.99532 4.58528 1284 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 984 2.11740 5.53737 2.53156 1.90048 4.87048 3.27741 4.02214 4.34809 2.02695 2.84002 3.15425 3.30596 4.22700 3.12243 2.93955 2.29818 3.28670 3.25087 5.97728 4.57366 1285 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 985 2.49371 5.56550 2.94080 2.31950 4.91070 2.91701 3.29897 3.63514 1.80301 3.26531 4.60613 3.00600 4.22178 2.78349 1.93227 2.62747 2.99943 3.95621 5.99808 4.58708 1286 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 986 2.59174 5.54548 2.33777 2.75620 4.88204 3.83222 3.32241 3.63768 1.55440 3.84711 3.68364 2.99133 4.22548 2.80880 2.85221 2.78519 2.68966 3.93154 5.98326 2.56225 1287 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 987 2.58134 5.57373 2.20915 2.31159 4.91836 3.83333 4.02332 4.40401 1.66451 3.87870 4.61523 3.30089 4.22903 3.12037 2.80990 2.07920 2.11725 3.96428 6.00654 4.59563 1288 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 988 2.58933 4.50537 5.00322 4.39322 2.87595 4.27892 2.95629 1.38367 4.19528 1.65625 3.14090 4.41512 4.64335 3.38122 4.23129 3.18110 3.35044 2.48105 5.12580 3.31632 1289 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15337 5.38739 1.98331 0.61958 0.77255 0.48576 0.95510 989 2.98539 5.46299 2.85520 2.50351 3.78285 3.76403 3.30924 3.63069 2.05982 2.06061 4.50725 2.81904 4.15711 2.02866 2.33517 2.95405 3.21644 3.84653 5.90340 4.50122 1290 q - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 990 2.73065 5.49427 2.38430 1.90804 4.83954 3.15650 3.94384 4.32563 2.19572 3.18017 3.57612 2.79946 4.15029 1.99228 2.64152 2.94540 2.89512 3.88502 5.92680 4.51576 1291 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 991 2.20087 5.02645 3.52517 2.61768 3.58088 3.87455 4.09141 3.61260 2.62912 1.93459 4.11061 3.45841 4.26134 2.27172 2.67522 3.08895 2.63406 2.28139 5.56130 4.26546 1292 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 992 3.07072 4.44592 5.01330 4.40021 2.29815 4.24135 4.57381 1.26104 4.19104 1.93169 3.03699 4.39665 4.60105 3.39791 4.20624 3.55266 2.88697 2.22070 5.06704 3.31028 1293 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 993 2.66170 5.48945 2.89520 1.55815 4.83222 2.86629 3.94574 4.31665 2.46122 3.13288 4.53077 2.64702 4.15173 2.46164 3.17407 2.29150 2.92434 3.19913 5.92348 4.51379 1294 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 994 2.98572 5.49522 2.30450 1.75942 4.83990 3.75840 3.94598 3.45137 1.63165 3.80015 4.53612 2.83076 4.15238 2.76497 2.77680 2.66292 3.21688 3.23989 5.92789 4.51733 1295 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 995 3.27321 4.62701 5.24170 4.63165 2.94705 4.46978 4.80507 1.55061 4.42572 1.12999 3.04596 4.63289 4.80180 4.53149 4.42860 3.78832 3.07787 2.11180 5.24778 3.35552 1296 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 996 3.02585 5.54060 1.96501 1.94880 4.88703 3.77777 3.97534 4.37353 1.49632 3.84441 4.58290 2.88624 4.18069 2.80695 2.59843 2.98456 2.83821 3.93238 5.96920 4.55739 1297 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 997 2.45736 5.49102 3.23453 2.16895 4.83481 3.75843 3.27139 4.31950 1.81211 3.79552 3.06412 2.47036 4.15181 2.42843 2.65197 2.71758 2.49775 3.88099 5.92424 4.51460 1298 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 998 2.66969 5.46481 2.78188 1.94500 4.79758 3.76247 3.95068 3.57960 1.89656 2.85462 3.09293 3.23481 4.15562 2.19068 2.53230 2.95218 3.21521 3.84883 5.90484 3.60509 1299 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 999 2.80853 5.33028 3.58311 2.99105 4.60114 3.95694 4.09670 2.57168 1.47848 3.58125 3.54129 3.48721 4.33687 3.24353 1.45445 2.81654 3.37131 3.67898 5.79370 4.49433 1300 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1000 2.70869 3.63607 3.25800 3.46320 2.51147 4.03137 4.29778 2.83305 2.42667 2.03039 3.76714 3.26989 4.40807 3.68761 2.37610 3.28676 2.90168 2.35034 5.25190 2.77824 1301 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1001 3.05777 5.57704 2.38922 1.53024 4.92288 3.79090 4.00046 4.41065 1.94188 3.87997 4.62089 2.09317 4.20272 2.72221 2.46566 3.01340 3.29085 3.96877 6.00411 4.58966 1302 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1002 2.09914 5.24500 3.36097 1.81581 4.49859 3.81135 4.01146 3.37847 2.37951 2.69194 4.31120 3.32905 4.20184 3.15024 2.38522 2.67468 2.87666 2.41964 5.73673 4.38936 1303 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1003 3.67596 4.98165 5.62223 5.04183 0.77205 4.95116 5.28657 2.13438 4.87098 1.97851 3.66759 5.09892 5.21835 4.94647 4.88821 4.29251 3.20381 2.32056 5.62612 4.46760 1304 f - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1004 2.98411 5.44678 2.60311 2.23246 3.79476 3.76550 2.91614 4.24450 2.69750 2.95988 2.46359 2.42824 4.15850 2.23898 2.84345 2.64866 2.91629 3.27298 5.89142 4.49264 1305 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1005 2.17430 5.47018 2.16291 1.74388 3.66972 3.76127 3.94952 3.56251 2.13965 3.77111 4.51354 3.23269 4.15460 3.04920 2.80941 2.37758 3.21506 3.85535 5.90897 3.70382 1306 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1006 1.77305 3.53247 4.66529 4.07126 2.90373 2.67782 4.47929 2.64979 3.92349 2.43962 3.58968 4.20756 4.52801 4.11536 4.04808 2.97000 1.62588 2.29719 5.08922 3.90395 1307 t - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1007 3.87924 5.16517 5.57477 5.11444 0.61258 4.92709 4.50134 2.91318 4.90381 2.51550 4.13517 4.88608 5.24020 4.88101 4.85536 4.26360 4.10255 2.89478 2.83585 2.62863 1308 F - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1008 2.67081 5.49705 2.02276 2.00179 4.84224 3.29927 3.94581 4.32846 2.44035 3.80235 4.53780 2.17392 4.15194 2.48855 2.59011 2.94754 2.91712 2.91468 5.92954 4.51822 1309 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1009 2.33771 5.40316 2.85976 2.48758 3.03150 3.77426 3.96560 2.79320 1.90841 3.24528 4.45370 3.25762 3.25529 2.21482 2.87122 2.70547 3.21654 3.77381 5.85858 3.42152 1310 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1010 4.06316 5.21837 6.24219 5.81600 4.65789 5.82876 6.75398 1.06226 5.81242 2.53467 4.33857 6.00056 5.98862 6.09452 6.01116 5.31013 4.32558 0.72217 6.93844 5.70256 1311 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1011 1.99611 5.46507 3.25042 2.44721 4.81271 2.76295 3.97191 4.28931 2.71453 3.78174 4.52769 1.91378 4.16934 3.07410 2.63544 1.92622 2.66167 3.86202 5.92343 4.52163 1312 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1012 2.72214 5.48981 2.80558 2.42134 4.83318 3.75783 3.94494 4.31781 1.63072 3.25559 3.15241 2.40765 4.15126 2.73320 2.36752 2.70380 2.60299 3.87954 5.92343 4.51370 1313 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1013 3.04613 5.56489 2.60256 1.97280 4.90639 3.78116 2.55121 4.39514 2.37576 3.86853 4.60910 1.63152 4.19401 3.09663 3.24598 2.76911 2.28599 3.95412 5.99695 4.57933 1314 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1014 3.89659 5.18532 5.82232 5.23651 0.98021 5.16238 5.42767 2.17624 5.06286 1.24052 3.55981 5.30955 5.36669 5.05727 5.04355 4.51079 3.10307 2.99045 5.65663 4.51905 1315 f - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1015 2.48668 5.49573 2.17958 2.25645 4.84171 2.91961 3.34652 4.32833 2.06873 3.80140 4.53616 2.92345 3.47789 2.45706 2.79385 2.50184 2.85698 3.19923 5.92787 4.51635 1316 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1016 2.18780 5.47188 2.77989 1.67621 3.68698 3.15790 3.94871 3.41201 2.29759 3.77320 3.13341 2.89020 4.15393 2.78224 2.92075 2.70443 2.83385 3.85753 5.91015 4.50484 1317 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1017 3.16934 4.52887 5.12349 4.52000 3.04971 4.37068 4.72137 1.34861 4.32012 2.21110 2.71156 3.58546 4.72353 4.46012 4.34362 3.68767 2.95248 1.38250 5.21127 4.03424 1318 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1018 5.22117 6.13894 6.10998 6.06122 0.63866 5.72960 4.36451 3.33341 5.82714 3.82344 5.21322 5.27059 5.97104 5.44201 5.59596 5.13844 5.41198 4.66188 4.43434 1.10675 1319 F - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1019 2.31990 5.50240 3.24389 2.23356 4.84929 3.76705 3.95070 4.33322 1.72438 3.80639 4.54349 2.90674 4.16028 2.06858 2.22202 2.53833 2.82761 3.89421 5.93212 4.52473 1320 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1020 2.46255 5.41859 2.91237 1.98756 3.85844 3.77113 3.96168 3.55221 2.01263 3.14133 2.54266 3.25161 4.16381 2.66638 2.41204 2.71499 3.21610 3.79251 5.87024 3.62833 1321 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1021 4.66395 5.78913 6.66004 6.08546 3.79723 6.19266 6.44991 1.65232 5.97867 0.44355 2.93235 6.38637 6.01026 5.65902 5.83593 5.65054 4.84815 3.22147 6.17789 5.32642 1322 L - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04189 5.24192 3.33170 0.61958 0.77255 0.93199 0.50050 1022 2.72697 4.47233 4.65434 4.06498 1.94264 4.14346 4.48672 2.89723 3.92023 2.24022 3.59826 4.20256 4.52375 4.11492 4.05000 2.03064 1.79651 2.00577 5.10361 3.91723 1323 t - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00816 5.20819 5.93054 0.61958 0.77255 1.00546 0.45551 1023 2.97255 5.45134 2.52603 2.67629 4.78390 2.47419 3.93810 4.26048 2.22918 3.28919 3.12646 2.61390 1.90112 3.03894 2.51071 2.94078 3.20365 3.83534 5.89127 4.48887 1324 p - X 2.68605 4.42246 2.77540 2.73108 3.46375 2.40534 3.72515 3.29375 2.67762 2.69341 4.24711 2.90240 2.73724 3.18167 2.89822 2.37882 2.77540 2.98493 4.58498 3.61524 0.05554 2.96867 5.93054 1.81603 0.17754 0.25984 1.47479 1024 2.48635 5.17989 3.53740 2.97883 4.39549 1.20206 3.54363 3.28829 2.96434 3.10354 3.47720 2.48539 4.31538 3.31104 2.94775 2.87419 3.30534 3.49947 5.70202 4.38878 1334 g - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.10310 5.38739 2.37102 0.61958 0.77255 0.48576 0.95510 1025 2.63264 5.02637 5.14552 5.06938 5.84419 0.38965 5.85522 5.34531 5.13382 5.03057 5.76993 4.62948 4.68074 5.24444 5.21814 2.36273 2.69832 4.42994 7.17643 6.13123 1335 G - X 2.68560 4.42250 2.77544 2.73148 3.46379 2.40537 3.72399 3.29379 2.67765 2.69380 4.24714 2.90371 2.73659 3.18043 2.89825 2.37866 2.77544 2.98543 4.58502 3.61528 0.26509 1.46787 6.01415 0.68526 0.70110 0.32724 1.27623 1026 2.76144 5.56576 2.26914 2.35409 3.80313 3.82824 4.01529 3.61364 1.87822 3.87114 4.60637 2.44899 4.22174 2.52582 2.27699 2.59514 2.63388 3.95653 5.99830 4.58722 1338 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1027 0.43735 3.44441 5.65647 5.59202 5.88910 1.62234 6.07655 5.35356 5.45924 5.07997 5.83490 4.83451 4.78671 5.53408 5.43087 3.41172 3.77926 4.47766 7.24513 6.23418 1339 A - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1028 3.05521 5.55837 2.24579 1.83033 2.82999 3.82999 4.01735 4.38408 2.03285 3.86229 3.74637 3.29865 4.22343 2.66144 2.45576 2.28745 3.28635 3.94735 5.99285 3.57200 1340 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1029 4.86630 5.97990 6.84942 6.25668 2.75209 6.37072 6.54862 2.20839 6.15125 0.34610 3.07446 6.56975 6.13925 5.76030 5.96520 5.82798 5.03622 3.54054 6.24413 5.39701 1341 L - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1030 3.06201 5.36228 3.40602 2.11824 3.28806 2.86566 3.49692 2.50032 2.57988 3.63388 4.42422 3.37962 4.26374 2.83062 1.78466 2.79137 2.86293 2.92841 5.84425 3.70823 1342 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1031 2.70425 4.56001 5.10588 4.49552 2.34787 4.35160 4.67230 1.90933 4.29029 1.20585 3.62893 4.49934 2.81243 4.42181 4.31033 3.66279 3.41524 2.78365 5.15979 2.56365 1343 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1032 3.05485 3.97292 2.30082 2.08855 4.89511 3.83032 3.30469 3.45929 2.38395 3.85795 4.59648 2.94510 4.22368 2.78615 2.34703 2.56227 2.34560 2.53748 5.99004 4.58187 1344 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03279 5.38739 3.58699 0.61958 0.77255 0.48576 0.95510 1033 2.30720 5.56342 1.63323 2.02406 4.90686 3.82149 4.01345 4.39238 2.55419 3.23251 4.60504 2.18673 4.21840 3.11092 2.57782 3.01609 2.92094 3.95329 5.99653 4.58532 1345 d - X 2.68595 4.42256 2.77527 2.73122 3.46385 2.40429 3.72525 3.29385 2.67741 2.69339 4.24720 2.90281 2.73770 3.18141 2.89831 2.37917 2.77527 2.98549 4.58508 3.61534 0.19937 1.72331 6.08395 1.04749 0.43204 0.42767 1.05563 1034 2.73426 5.54925 3.31116 2.32428 4.88732 3.30656 4.02213 4.36781 1.82533 3.85195 3.45755 2.65005 1.90102 3.12115 3.25110 2.10730 2.96785 3.93638 5.98731 4.58116 1349 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1035 2.52638 5.54813 1.91033 2.05228 4.88463 3.83313 4.02201 4.36475 2.37569 2.75314 4.59114 2.50086 4.22706 2.85263 3.25207 3.02352 2.43249 2.64771 5.98589 4.57990 1350 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1036 2.64773 6.74407 0.82176 1.51138 6.01218 4.12811 4.73959 5.59291 3.85827 5.02483 5.89567 2.11095 4.79428 3.91106 4.54271 3.82075 4.29183 5.10859 7.16820 5.56739 1351 d - X 2.68601 4.42361 2.77282 2.72787 3.46490 2.40603 3.72453 3.29370 2.67787 2.69461 4.24382 2.90248 2.73876 3.18180 2.89862 2.37862 2.77623 2.98532 4.58613 3.61639 0.40138 2.23945 1.49572 2.89066 0.05714 0.48576 0.95510 1037 3.05560 4.45428 4.83492 4.23385 2.93934 4.20931 4.52247 2.55445 4.05904 2.30447 2.90318 4.30734 1.23237 4.21675 4.12989 3.51436 3.28705 2.20692 5.05274 2.64381 1381 p - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00877 5.13654 5.85888 0.61958 0.77255 0.81939 0.58107 1038 3.13116 4.50197 5.05504 4.44732 1.35436 4.30435 4.61496 2.56044 4.24345 1.71237 3.53829 4.45071 4.65571 4.36934 4.26160 3.61729 2.49825 2.18675 5.08637 2.67332 1382 f - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 1039 2.97016 5.45094 2.83282 2.46294 4.78341 2.51493 3.37300 4.26075 2.67690 2.37650 4.49518 2.20926 4.14081 3.03716 2.76659 1.95919 2.56646 3.83485 5.89120 4.48765 1383 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 1.01048 0.45262 1040 2.61739 3.86989 2.38030 2.17416 4.68649 2.26636 3.95041 3.39468 2.70262 3.66903 4.43179 3.24306 4.15104 2.47509 3.18790 2.19579 2.80516 2.76083 5.83748 4.45145 1384 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00818 5.20575 5.92809 0.61958 0.77255 0.82204 0.57899 1041 3.23110 5.21137 4.03845 4.06182 5.82980 0.34392 5.44672 5.39682 4.62832 5.02418 5.80675 3.06910 4.68084 4.74382 4.94039 2.63553 3.78775 4.54215 7.12580 5.91611 1385 G - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1042 4.09285 5.25715 6.24150 5.78459 4.43577 5.79029 6.55164 0.76158 5.75065 1.69161 4.13938 5.96259 5.92781 5.92353 5.88198 5.25017 4.34638 1.37676 6.68387 5.53788 1386 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1043 2.98413 5.47825 3.23930 1.57486 4.81663 3.76031 3.94781 4.29768 2.22543 2.95391 3.71418 2.60326 4.15359 2.49263 2.82923 2.19421 2.83693 3.86530 5.91482 3.68830 1387 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1044 3.35300 4.69298 5.31595 4.72303 1.82562 4.56370 4.84535 1.59805 4.52304 2.11679 3.66196 4.71294 4.89315 4.63044 4.52984 3.88739 3.58494 1.53818 5.25542 2.32104 1388 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1045 2.98467 5.42581 2.91602 2.31553 3.73321 3.76963 3.21274 3.52788 2.33333 3.21436 3.44779 2.56194 4.16240 3.06600 2.62292 1.67924 2.94865 3.17829 5.87567 4.48232 1389 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1046 1.47082 2.82294 5.15818 4.56583 2.33956 4.41975 4.80331 2.39110 4.37673 2.71532 3.70839 4.58088 4.78144 4.52655 4.41425 3.74366 3.45609 1.32699 5.30205 4.11991 1390 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1047 2.98592 5.46272 3.24823 2.69197 4.79443 3.27571 3.25716 4.27046 2.09717 3.76190 3.14332 2.20518 4.15765 2.39037 2.17552 2.68972 2.54382 2.81939 5.90312 4.50129 1391 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1048 2.31822 4.79263 4.08517 3.55292 3.25584 3.16567 4.46581 3.47563 3.51041 2.50913 4.07574 3.88561 1.05110 3.80335 3.84773 2.41266 3.33274 3.21254 5.54858 4.32060 1392 p - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1049 2.27538 5.42262 3.28179 2.72768 4.75192 2.91384 3.97697 4.21591 2.07613 3.72799 4.48568 2.94796 1.59250 3.08484 2.66646 2.68378 3.23033 3.22136 5.88565 4.49708 1393 p - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1050 3.01514 5.52298 2.89852 2.45664 4.86523 1.58297 3.26751 4.35014 1.87148 3.13322 4.56576 2.43402 4.17384 2.69912 3.20049 2.97584 3.24723 3.91238 5.95535 4.54424 1394 g - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1051 2.74834 5.52364 2.82922 2.79624 4.85063 3.84741 4.06411 3.02529 0.87089 3.81973 4.59361 2.83742 4.26576 3.18030 3.24555 3.09207 3.35065 3.90404 5.97820 4.59856 1395 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1052 2.64601 5.48663 2.49284 2.24422 3.69462 3.75798 3.94536 4.31253 2.01208 3.79062 4.52808 2.90389 3.01746 3.04267 2.29222 2.14901 2.91648 3.87565 3.40247 4.51199 1396 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1053 3.04177 4.43329 4.89677 4.28873 2.31051 4.19942 4.52666 2.34087 2.94397 2.05733 3.01167 4.32533 4.56326 2.81602 4.14314 3.50608 3.27382 1.74590 2.24683 3.87398 1397 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1054 2.76042 5.52962 3.31810 2.17931 4.88203 3.81907 3.98139 4.35231 1.56966 2.81598 4.57318 3.28960 4.20822 2.21889 1.94206 3.01788 2.84598 3.92526 5.94628 4.56041 1398 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1055 2.98357 5.49426 2.80432 2.45250 4.83945 3.75709 2.89484 4.32540 2.34220 3.19357 4.53493 1.91974 2.92111 2.68661 2.19406 2.47273 3.21470 3.88497 5.92679 3.76557 1399 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1056 3.46099 4.79647 5.39337 4.79767 3.72285 4.69525 5.04565 1.39855 4.61298 1.19343 2.01926 3.46426 5.00094 4.72042 4.63714 4.02201 3.69164 2.32203 5.46475 4.32626 1400 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.28272 1.40133 1057 3.05491 5.55846 1.85801 1.86058 3.91274 3.31160 4.01712 3.59658 2.75302 3.86246 3.72450 2.49926 4.22313 2.51817 2.95782 2.33045 2.68670 3.94749 5.99295 4.58379 1401 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1058 2.44647 4.82343 3.94974 2.73206 3.22713 4.06544 4.31700 2.88659 3.33919 2.05626 2.99733 2.06781 4.44515 2.48787 3.69801 2.65464 3.00336 2.59898 5.40371 3.29908 1402 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1059 4.96358 6.05572 6.92199 6.33421 3.16468 6.48215 6.59190 3.18023 6.23016 0.34229 1.97695 6.67689 6.19191 5.79490 6.02318 5.96142 5.12559 3.62283 6.24157 5.36938 1403 L - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1060 3.77498 5.63172 5.30520 5.33767 6.08502 4.36548 6.22377 5.91079 5.52293 5.52369 6.39103 5.13613 5.20651 5.71404 5.58807 0.11182 4.35713 5.06459 7.26680 6.24823 1404 S - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1061 4.32334 6.11695 5.15086 4.94163 6.35730 0.28416 5.80694 6.04345 4.32633 5.48883 6.41319 5.12737 5.45847 5.09275 1.89793 4.47941 4.79320 5.42319 7.17230 6.30074 1405 G - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1062 5.20796 6.62670 6.04924 6.12314 6.92120 0.03698 6.92242 7.02733 6.40854 6.36425 7.48130 6.22780 5.99485 6.64438 6.33051 5.44280 5.74976 6.35489 7.49690 7.11983 1406 G - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1063 4.09511 6.66114 3.16409 0.64912 6.00088 4.25820 4.80586 5.58210 3.70025 4.99545 5.89221 3.73164 4.90170 1.32593 4.17315 3.95263 4.38605 5.13469 7.05209 5.58978 1407 E - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1064 3.84176 6.03992 4.32698 3.56289 5.53986 4.48449 4.36526 4.86715 0.65061 2.43929 5.10237 3.97145 4.81873 2.87226 2.13105 3.11257 3.99122 4.52593 6.27022 5.10583 1408 K - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1065 1.96872 5.29527 3.84236 3.33806 5.05293 3.90942 4.51875 4.49546 2.02612 4.07304 4.85675 3.76504 4.47111 3.66899 3.71889 1.67791 1.21984 4.02618 6.26206 4.94826 1409 t - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1066 4.59212 5.74701 6.62202 6.06070 3.96909 6.11075 6.45003 2.23807 5.95852 0.43603 3.03028 6.29901 6.03848 5.73834 5.86539 5.54516 4.79399 2.06100 6.29547 5.39544 1410 L - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1067 1.84705 2.93827 4.95065 4.34848 3.63983 4.28528 4.62530 2.45648 4.16747 2.07740 3.65975 4.40364 4.65538 4.32819 4.23088 2.30982 1.96475 1.87005 5.16825 3.98822 1411 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1068 0.68615 5.04268 4.85146 4.46766 5.10751 3.00104 5.32016 4.50908 4.42138 4.21524 2.39336 4.44665 4.68787 4.66560 4.67183 1.65574 3.65525 4.00956 6.50697 5.33668 1412 A - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1069 3.91900 2.52707 5.92383 5.33780 3.90986 5.23145 5.59329 2.09003 5.16792 0.69662 2.61367 5.40220 5.45306 5.19375 5.15494 4.58220 4.14426 2.25036 5.86291 4.78661 1413 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1070 0.53063 3.32829 4.99608 4.61197 5.31901 3.91902 5.43534 4.74154 4.49007 4.43528 5.25088 4.50968 4.70422 4.76559 3.22497 1.72201 3.68278 4.15556 6.68758 5.53623 1414 A - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1071 4.70251 5.85838 6.68536 6.08809 1.94195 6.14066 6.36150 2.62731 5.96267 0.47149 2.87719 6.33271 6.02055 5.65842 5.81361 5.56180 4.88368 2.93996 6.17682 5.29823 1415 L - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1072 3.72638 5.02846 5.67627 5.09911 4.02133 5.03481 5.42894 1.25481 4.90232 1.22316 3.88371 5.17343 5.31807 5.05652 2.53933 4.37922 3.96188 1.69230 5.83603 4.69352 1416 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04313 5.38739 3.27980 0.61958 0.77255 0.48576 0.95510 1073 4.53525 5.72469 6.46672 5.89143 0.65536 5.89971 6.01499 3.10491 5.74799 1.35337 2.96141 6.04635 5.88384 5.52831 5.63888 5.29789 4.72831 2.77494 5.96405 4.86904 1417 F - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00707 5.35134 6.07368 0.61958 0.77255 0.40861 1.09235 1074 0.26296 5.12875 5.35093 5.33269 5.94939 3.91952 6.03429 5.44461 5.35959 5.16073 5.91359 4.78250 4.79644 5.46051 5.38428 2.18631 3.80464 4.53388 7.29265 6.25483 1418 A - X 2.68659 4.42266 2.77561 2.73071 3.46302 2.40463 3.72385 3.29395 2.67782 2.69295 4.24731 2.90388 2.73781 3.17989 2.89842 2.37928 2.77561 2.98517 4.58518 3.61428 0.15337 1.96636 6.10974 1.50446 0.25120 0.48576 0.95510 1075 3.30033 4.65700 5.25028 4.64892 3.75354 4.50683 4.86063 1.17759 4.45216 1.52547 2.79421 4.66032 4.85521 4.59059 4.47792 3.11321 2.54979 2.14790 5.34476 4.17124 1424 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1076 2.79609 5.32008 3.44385 2.88526 3.54864 3.89122 2.00887 3.99802 2.66635 2.31512 4.38660 2.93313 4.28128 1.70158 2.80206 3.09229 3.30219 3.66051 5.80971 3.15016 1425 q - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1077 2.49459 5.55480 3.30833 2.30227 4.89532 3.14630 3.03864 4.37800 1.91799 3.36214 2.58391 3.00582 4.22399 2.60947 2.26860 2.49349 3.28634 3.94300 5.99014 3.65217 1426 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1078 2.52847 3.03345 4.55136 3.96503 2.38554 4.20845 4.50956 3.04176 2.96087 2.54794 3.70691 3.54430 4.57830 4.07170 2.77153 3.11115 3.34172 2.05963 5.20279 1.65752 1427 y - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1079 3.07392 5.58742 2.40989 2.55110 4.93418 3.07309 4.02917 4.42058 1.68210 3.89229 4.62852 2.61407 4.23587 2.57063 1.75802 2.54644 3.30519 3.97915 6.01754 4.60641 1428 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1080 2.93589 5.55699 3.85258 3.45818 5.30171 3.13858 4.59984 4.72151 3.19250 4.25923 5.07805 3.88425 0.62143 3.19421 2.43167 3.49296 3.76510 4.27729 6.40236 5.13559 1429 P - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1081 1.48719 5.09826 3.60251 3.04242 3.55940 3.95004 3.04534 3.25044 3.02631 3.33678 4.18314 3.53542 4.33709 3.00465 2.86636 2.05765 2.12702 3.05093 5.63428 4.33892 1430 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1082 3.21809 1.82315 5.53409 5.46796 5.81298 3.93571 6.02112 5.30355 5.34000 5.02452 5.80264 4.82439 0.46832 5.47595 5.34344 2.71359 3.80524 4.47309 7.17512 6.12327 1431 P - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1083 4.67739 5.83840 6.64750 6.05871 0.85051 6.09939 6.27337 2.17665 5.92905 1.12776 2.97180 6.27583 6.00233 5.64220 5.78796 5.51609 4.86125 3.46940 6.12390 5.16413 1432 f - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1084 4.45175 2.31686 5.90668 5.59228 1.67445 5.33665 4.52841 4.11758 5.37510 3.60773 4.77951 5.15783 5.65347 5.24342 5.27788 4.70027 4.68032 3.17193 4.65545 0.62658 1433 Y - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1085 2.84722 4.52629 5.11879 4.50534 3.17564 3.37317 4.66642 1.95468 4.29255 1.41505 3.10082 4.49218 4.69083 4.42332 4.30210 3.64289 3.38733 1.41988 5.15645 3.43916 1434 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1086 4.48297 5.68656 6.46872 5.86841 1.67993 5.85511 6.11609 2.24614 5.72082 0.90364 1.72672 6.04033 5.85664 5.51779 5.61221 5.24360 4.67732 2.78368 6.07555 5.14545 1435 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1087 5.31109 7.02943 0.06763 4.38449 6.77730 5.05744 6.08022 6.83707 5.47212 6.15426 7.30712 4.95815 5.76327 5.43586 5.97793 5.24021 5.70069 6.37215 7.50128 6.65841 1436 D - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1088 4.28362 7.10237 1.77861 0.38360 6.36064 4.23030 4.95711 6.02009 4.23642 5.42254 6.39504 3.67733 4.95757 4.15854 5.02781 4.06940 4.62282 5.51074 7.52141 5.87155 1437 E - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1089 3.19226 5.11736 5.96237 5.44214 2.44564 5.35598 5.89908 0.94675 5.32661 2.55132 4.19300 5.52136 5.61696 5.50832 5.40885 4.73855 4.12772 1.14944 6.27232 5.08074 1438 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1090 2.30009 6.61804 0.60696 1.94287 5.93388 4.11654 4.71865 5.49788 3.81052 4.94575 5.80477 3.56857 3.29689 3.88749 4.47189 3.78076 4.23337 5.01858 7.09295 5.51835 1439 D - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1091 0.72838 5.07321 4.14028 3.66239 4.64473 3.97426 4.69621 4.02946 3.61936 3.70919 2.91594 3.99500 4.55967 3.17075 3.98041 1.87171 3.52831 3.68401 6.02287 4.77913 1440 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1092 0.96481 5.41002 3.39204 2.03005 3.11115 3.93493 3.18925 4.09764 2.99751 3.68670 4.49902 2.97739 4.35878 3.33568 3.46800 3.18799 3.41003 3.76091 5.89784 4.53638 1441 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1093 5.26237 6.37696 6.51839 6.30786 4.45380 5.85599 6.65594 3.81456 6.18439 0.10408 4.27946 6.54562 6.18212 6.14861 6.06999 5.95439 5.52809 4.17041 6.59794 5.62798 1442 L - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1094 5.31109 7.02943 0.06763 4.38449 6.77730 5.05744 6.08022 6.83707 5.47212 6.15426 7.30712 4.95815 5.76327 5.43586 5.97793 5.24021 5.70069 6.37215 7.50128 6.65841 1443 D - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1095 2.37834 5.45425 2.34891 2.17256 2.70086 2.94825 4.04348 3.36288 2.52848 2.65897 4.50701 2.64081 3.14732 2.89786 3.28259 3.04412 3.28951 3.30489 5.91482 3.51251 1444 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1096 2.26109 5.52796 3.31981 2.39444 4.85717 3.83557 3.42184 3.59542 2.27451 3.82646 3.63294 2.71943 4.22866 2.32130 2.59417 2.40680 2.37949 2.77380 5.97024 3.77858 1445 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1097 3.40944 5.76154 3.67424 3.10572 5.04150 4.12596 2.37742 4.55529 2.32800 4.02249 4.81899 0.94353 4.51035 3.33393 2.57237 3.38252 3.61674 4.17469 6.08292 2.92806 1446 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1098 2.88378 4.62248 4.65176 4.06485 3.74150 4.26813 4.58470 2.38005 3.92872 2.51241 3.74498 4.26292 4.63892 4.15757 1.84117 3.06105 2.70204 1.17619 5.26022 4.06862 1447 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1099 2.59926 5.55044 3.31005 2.20801 3.86455 2.49335 4.01905 3.66395 2.13415 3.85296 4.59282 3.30136 4.22471 2.25993 2.59180 1.95153 2.61133 3.93764 5.98695 4.58000 1448 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1100 2.12048 5.21243 3.63828 3.06491 4.42969 3.99212 4.17753 2.42037 1.96081 2.09909 4.29335 2.81871 4.37581 3.35567 1.80952 3.21256 3.36869 3.53067 5.72359 4.42912 1449 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1101 3.64168 4.95567 5.63723 5.04625 2.52956 4.90343 5.24858 1.62353 4.85900 1.39961 3.75687 5.06738 5.19482 4.94497 4.86194 4.23797 3.87241 1.22274 5.62358 3.52692 1450 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1102 0.70966 3.36255 4.83067 4.33626 4.33842 2.56775 4.97469 3.68027 4.23506 2.83487 4.33121 4.38356 4.65565 4.45801 4.43403 2.49843 3.52956 2.59563 5.81843 4.63706 1451 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1103 2.70699 5.56677 2.76396 2.18175 3.91775 3.31094 3.05253 4.39901 2.35567 3.31071 4.60725 2.05242 4.22146 2.22858 2.86200 2.29718 2.88031 3.95779 5.99903 4.58765 1452 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1104 3.31501 4.69243 5.16856 4.56443 3.13911 4.47933 4.76814 2.70172 4.36921 1.54316 1.82569 4.60083 4.82067 4.49860 2.57047 3.79055 3.54436 2.89613 5.23451 1.59501 1453 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1105 4.35893 5.54435 6.41688 5.87530 3.10659 5.86824 6.28699 0.95105 5.77087 1.00168 3.80150 6.04672 5.92194 5.68968 5.74321 5.28280 4.58039 2.14939 6.29493 5.29802 1454 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1106 3.06398 3.67799 2.97219 2.30612 4.91289 3.33175 3.04174 4.39625 1.31801 3.87174 4.60943 3.30519 4.23007 2.86888 1.98264 3.02705 3.29453 3.95872 5.99954 3.78266 1455 k - X 2.68626 4.42233 2.77528 2.73131 3.46362 2.40521 3.72417 3.29307 2.67749 2.69363 4.24698 2.90355 2.73748 3.18154 2.89809 2.37873 2.77495 2.98526 4.58485 3.61511 0.07756 2.62546 6.10974 0.67357 0.71312 0.48576 0.95510 1107 2.61770 5.56745 3.30665 1.27207 4.91235 3.83196 4.01859 4.39739 2.22277 3.38632 4.60844 2.72247 4.22565 2.36688 2.83439 2.55018 2.95182 3.95806 5.99971 4.58997 1458 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1108 2.78454 5.49010 2.93894 2.78169 3.77109 3.84356 2.97486 4.26846 2.38199 2.09699 4.53909 3.32419 4.23624 2.42940 2.17527 2.10172 2.78360 3.86386 5.94188 3.72656 1459 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1109 2.44703 5.44808 3.36384 2.80761 3.28173 2.74573 4.04932 4.20197 2.60754 3.73550 4.50458 3.34581 4.24820 2.70358 2.36657 1.56628 2.14726 3.81535 5.91274 4.53336 1460 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15337 5.38739 1.98331 0.61958 0.77255 0.48576 0.95510 1110 2.99504 5.50790 2.61612 2.09910 4.85430 3.76296 3.95200 4.34063 1.43696 3.81296 4.54881 2.57475 4.15870 2.70521 2.47946 2.70873 2.60464 3.89937 5.93873 4.52763 1461 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00789 5.24192 5.96426 0.61958 0.77255 0.93199 0.50050 1111 2.98528 3.94312 2.48005 2.15091 4.83491 3.23360 3.94661 4.31966 2.46178 3.79625 4.53309 1.64928 3.30130 2.29501 3.17527 2.94822 2.85779 3.31064 5.92559 4.51554 1462 n - X 2.68624 4.42231 2.77488 2.73130 3.46360 2.40519 3.72396 3.29360 2.67747 2.69361 4.24696 2.90322 2.73746 3.18153 2.89807 2.37893 2.77526 2.98525 4.58483 3.61509 0.14221 2.04031 5.96426 0.15207 1.95850 0.28272 1.40133 1112 1.43733 3.47736 4.55978 3.97608 2.83402 3.35480 4.52366 3.05965 3.86021 2.48854 3.02285 4.18762 4.58095 4.08357 4.04811 1.73581 2.50373 2.86225 5.22053 4.02788 1464 a - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1113 5.26879 6.76284 5.14789 5.09717 6.28320 5.22886 6.14795 6.45250 4.91103 5.72480 6.89242 5.50038 5.88020 0.06941 5.07296 5.36674 5.65505 6.09211 7.19368 6.25959 1465 Q - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1114 2.93472 4.70465 5.30094 4.70186 0.93463 4.55047 4.85883 2.23254 4.50123 2.41516 3.72746 4.70024 4.89213 4.62308 4.51639 3.86979 3.58421 1.86848 5.30528 3.33457 1466 f - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1115 4.49116 5.66289 6.49226 5.95920 2.05637 5.96244 6.16748 0.60115 5.84458 1.65524 3.76061 6.11126 5.97277 5.69151 5.77993 5.38404 4.70346 3.00905 6.12744 4.98464 1467 I - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1116 3.97347 2.83085 6.11321 5.64447 4.67129 5.54614 6.30354 1.34790 5.57701 3.19433 4.42716 5.74524 5.81418 5.83427 5.72039 4.97105 3.26403 0.65065 6.67618 5.43767 1468 V - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1117 3.55343 4.92200 5.48782 4.95888 4.23538 4.78135 5.38442 0.86190 4.81608 3.06414 4.14315 5.00341 5.18964 5.01405 4.91472 2.99729 1.84777 1.67608 5.91856 4.72329 1469 i - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1118 2.01642 3.25755 5.38293 5.12347 5.59326 3.90187 5.78200 5.03246 5.01697 4.74349 5.53218 4.69653 4.74337 5.17926 5.13353 0.90864 1.15379 4.31224 6.96860 5.88039 1470 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1119 3.56158 4.90820 5.46411 4.86325 2.34202 4.75483 1.91836 2.13595 4.66899 0.96286 3.64692 4.89170 5.05718 4.75031 4.67747 4.07635 3.78746 2.59489 5.41199 4.21844 1471 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1120 3.12723 5.62123 2.92369 2.81239 4.97607 3.88602 4.05814 4.45245 1.88179 3.92022 4.66418 2.70137 4.27990 2.78916 1.22450 2.83573 2.57956 4.01818 6.03848 4.64450 1472 r - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1121 2.58737 5.56856 2.78103 1.96202 4.91487 3.82798 3.32065 4.40174 2.09920 3.87436 4.60892 2.09893 3.03584 2.64409 2.63559 2.44791 2.88051 3.95987 6.00047 4.58874 1473 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1122 3.05590 5.56517 2.66234 1.81122 4.90953 2.27590 4.01681 4.39510 2.75205 3.87015 4.60607 2.32028 2.75716 2.57076 2.71521 3.01837 2.86502 3.16617 5.99822 3.65417 1474 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1123 3.12602 4.56167 4.75251 4.15754 2.70344 4.25388 3.69941 2.99438 4.00810 2.25750 1.27424 4.29763 4.62002 2.81878 4.13342 3.54932 2.12599 2.39060 5.17436 3.98872 1475 m - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1124 3.13652 4.51027 5.09894 4.48401 1.73777 4.30710 4.64006 2.59645 4.26964 1.61916 2.21710 4.46905 4.66882 4.39933 4.27784 3.09662 3.04141 2.06340 5.13062 2.80148 1476 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1125 2.60777 5.55375 3.30849 1.36266 4.89385 3.83067 3.34392 3.68935 2.42994 3.32757 3.72253 2.45310 4.22401 2.76381 2.86446 2.43226 2.96461 3.94172 5.98939 4.58153 1477 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1126 2.73319 5.52892 2.80362 2.23336 3.95463 2.95457 4.02411 3.66160 1.91739 2.65159 4.57366 2.37653 4.22850 2.64142 2.96457 3.02533 3.28688 2.39187 5.97096 4.56953 1478 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1127 0.80829 3.56325 4.76055 4.25160 4.26008 2.39412 4.90107 3.61147 4.15323 3.35448 2.43324 4.33909 4.63999 4.38212 4.36240 2.53773 3.50557 2.91386 5.74090 4.55555 1479 a - X 2.68635 4.42242 2.77537 2.73115 3.46371 2.40530 3.72512 3.29371 2.67758 2.69351 4.24707 2.90364 2.73757 3.17995 2.89818 2.37888 2.77502 2.98536 4.58118 3.61521 0.15337 1.96636 6.10974 0.74055 0.64789 0.48576 0.95510 1128 3.10180 5.61948 1.42548 1.81967 4.96259 3.84846 3.37801 4.45092 2.80105 3.92384 4.66238 2.26368 4.25545 2.80350 2.94980 2.59074 3.33502 3.46894 6.05138 4.63542 1484 d - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1129 2.32624 5.54782 3.31220 2.27563 4.88528 3.83257 4.02013 4.36566 1.97560 3.84970 3.71971 2.94716 4.22581 2.59856 2.01573 2.47399 2.65571 2.61433 5.98495 4.57900 1485 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1130 3.11865 3.47022 4.99990 4.39016 2.69287 4.27894 4.60815 2.35709 4.19305 1.12655 3.12887 2.90402 3.48632 3.52015 4.23039 3.58662 2.88612 2.32218 5.12687 3.94902 1486 l - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1131 3.11974 4.51075 3.75361 4.37137 2.71413 4.27780 4.60558 1.82677 3.51446 1.99668 3.62891 4.40535 4.64240 4.32962 4.22381 2.88246 3.35192 1.64996 5.13089 2.06379 1487 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1132 2.84257 5.60272 3.88286 3.38245 5.28906 0.74529 4.47251 4.70484 2.46852 4.20762 5.01307 3.82190 4.61522 3.60887 2.11951 2.96313 3.71676 4.26769 6.32209 5.05353 1488 g - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1133 3.09282 4.94119 5.68564 5.12969 4.18237 5.01396 5.46906 1.44596 4.97569 2.17306 2.96567 5.17391 5.32242 5.14653 5.03393 4.36501 2.81704 0.92301 5.91416 4.72457 1489 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1134 2.80302 4.94417 3.79072 3.22662 2.16784 4.01915 4.25297 3.47816 2.57346 3.16725 4.04147 3.67859 4.40289 3.51522 2.78951 2.49679 1.89544 3.23251 5.50413 1.88575 1490 y - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1135 2.84356 5.15671 3.55027 2.99097 2.56131 3.93048 3.35985 3.76421 2.01928 2.76070 2.13663 3.49457 2.98960 2.66485 2.93847 2.67809 3.00134 3.47142 5.68133 3.43803 1491 k - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.36711 5.38739 1.19505 0.61958 0.77255 0.48576 0.95510 1136 2.55888 4.96697 3.38889 2.35355 4.17123 3.23274 3.97471 2.99971 2.81565 3.20984 4.04812 3.33047 4.14877 2.16145 2.81803 2.97241 2.58964 1.91552 5.49453 3.17793 1492 v - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00976 5.03005 5.75240 0.61958 0.77255 0.18772 1.76520 1137 2.81828 5.56847 2.24512 1.78312 4.91454 3.82835 3.14581 4.40123 2.56510 3.87414 4.60891 2.90140 3.32496 2.22995 2.06896 3.01719 2.96708 3.42295 6.00049 4.58891 1493 e - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1138 2.68433 5.57382 2.22269 2.74914 4.91938 2.28477 3.50803 4.40607 2.40600 3.87926 4.61462 1.84842 3.52582 2.17201 2.95934 2.77749 3.29222 3.96478 6.00595 4.59406 1494 n - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1139 2.44906 3.77216 2.99206 2.77026 4.84382 1.39933 4.02818 4.31560 2.02170 3.81532 3.76884 3.00749 4.23207 2.75896 2.88814 3.02976 2.99772 3.89859 5.96350 4.56542 1495 g - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1140 2.74353 3.00796 4.32381 2.75971 3.77129 4.16195 3.44720 2.06094 2.93575 2.60566 3.24129 4.04441 4.53513 3.91836 3.21323 3.43206 1.96076 1.82044 5.26084 4.05607 1496 v - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1141 3.07595 5.09249 3.60977 3.04931 4.28481 3.95340 4.17119 2.48766 2.37755 2.97954 4.17746 3.00354 4.34003 3.37031 2.97358 1.48602 2.07855 3.02926 5.62911 3.46245 1497 s - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00682 5.38739 6.10974 0.61958 0.77255 0.48576 0.95510 1142 2.73315 5.55515 3.30815 2.44058 4.89582 3.83060 3.37946 3.62200 2.02331 3.85849 4.59700 2.45781 4.22395 2.58698 2.90709 2.08953 1.87668 3.37159 5.99042 4.58229 1498 t - X 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00459 5.38517 * 0.61958 0.77255 0.00000 * // hmmer-3.1b2/testsuite/i10-duplicate-names.pl0000775361611702660230000000654312473612614020334 0ustar wheelerteddy#! /usr/bin/perl # Check that we can deal with profiles and sequences that contain # duplicate names, both as queries and targets. # # Usage: ./i10-duplicate-names.pl # Example: ./i10-duplicate-names.pl .. .. tmpfoo # # SRE, Sun Dec 13 14:41:31 2009 [Yokohama, Japan] # SVN $Id: i10-duplicate-names.pl 3462 2011-01-11 13:52:50Z eddys $ BEGIN { $builddir = shift; $srcdir = shift; $tmppfx = shift; } use lib "$srcdir/testsuite"; # The BEGIN is necessary to make this work: sets $srcdir at compile-time use h3; # Verify that we have all the executables we need for the test. if (! -x "$builddir/src/hmmbuild") { die "FAIL: didn't find hmmbuild binary in $builddir/src\n"; } if (! -x "$builddir/src/hmmpress") { die "FAIL: didn't find hmmpress binary in $builddir/src\n"; } if (! -x "$builddir/src/hmmsearch") { die "FAIL: didn't find hmmsearch binary in $builddir/src\n"; } if (! -x "$builddir/src/hmmscan") { die "FAIL: didn't find hmmscan binary in $builddir/src\n"; } if (! -x "$builddir/src/phmmer") { die "FAIL: didn't find phmmer binary in $builddir/src\n"; } if (! -x "$builddir/src/jackhmmer") { die "FAIL: didn't find jackhmmer binary in $builddir/src\n"; } # Create our test files if (! open(ALI1, ">$tmppfx.sto")) { print "FAIL: couldn't open $tmppfx.sto for write"; exit 1; } if (! open(SEQ1, ">$tmppfx.fa")) { print "FAIL: couldn't open $tmppfx.fa for write"; exit 1; } print ALI1 <<"EOF"; # STOCKHOLM 1.0 #=GF ID profile #=GF AC XX01234.5 #=GF DE A test description seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY // # STOCKHOLM 1.0 #=GF ID profile #=GF AC XX01234.5 #=GF DE A test description seq1 ACDEFGHIKLLMNPQRSTVWY seq2 ACDEFGHIKLLMNPQRSTVWY seq3 ACDEFGHIKLLMNPQRSTVWY // EOF print SEQ1 << "EOF"; >seq ACDEFGHIKLMNPQRSTVWY >seq ACDEFGHIKLLMNPQRSTVWY EOF close ALI1; close SEQ1; # Build profiles from the test alignments @output = `$builddir/src/hmmbuild $tmppfx.hmm $tmppfx.sto 2>&1`; if ($? != 0) { die "FAIL: hmmbuild failed\n"; } @output = `$builddir/src/hmmpress $tmppfx.hmm 2>&1`; if ($? != 0) { die "FAIL: hmmpress failed\n"; } # phmmer should show four results $output = `$builddir/src/phmmer --tblout $tmppfx.tbl $tmppfx.fa $tmppfx.fa 2>&1`; if ($? != 0) { die "FAIL: phmmer failed\n"; } &h3::ParseTbl("$tmppfx.tbl"); if ($h3::ntbl != 4) { die "FAIL: on expected number of hits, phmmer\n"; } # jackhmmer should show four results $output = `$builddir/src/jackhmmer --tblout $tmppfx.tbl $tmppfx.fa $tmppfx.fa 2>&1`; if ($? != 0) { die "FAIL: jackhmmer failed\n"; } &h3::ParseTbl("$tmppfx.tbl"); if ($h3::ntbl != 4) { die "FAIL: on expected number of hits, jackhmmer\n"; } # hmmsearch should show four results $output = `$builddir/src/hmmsearch --tblout $tmppfx.tbl $tmppfx.hmm $tmppfx.fa 2>&1`; if ($? != 0) { die "FAIL: hmmsearch failed\n"; } &h3::ParseTbl("$tmppfx.tbl"); if ($h3::ntbl != 4) { die "FAIL: on expected number of hits, hmmsearch\n"; } # hmmscan should show four results $output = `$builddir/src/hmmscan --tblout $tmppfx.tbl $tmppfx.hmm $tmppfx.fa 2>&1`; if ($? != 0) { die "FAIL: hmmscan failed\n"; } &h3::ParseTbl("$tmppfx.tbl"); if ($h3::ntbl != 4) { die "FAIL: on expected number of hits, hmmscan\n"; } print "ok\n"; unlink "$tmppfx.sto"; unlink "$tmppfx.fa"; unlink "$tmppfx.tbl"; unlink <$tmppfx.hmm*>; exit 0; hmmer-3.1b2/testsuite/LuxC.sto0000664361611702660230000002054412473612615015732 0ustar wheelerteddy# STOCKHOLM 1.0 #=GF ID LuxC #=GF AC PF05893.5 #=GF DE Acyl-CoA reductase (LuxC) #=GF AU Moxon SJ #=GF SE Pfam-B_9766 (release 8.0) #=GF GA -133.50 -133.50; 14.60 14.60; #=GF TC -133.50 -133.50; 20.40 15.50; #=GF NC -133.70 -133.70; 11.20 12.90; #=GF TP Family #=GF BM hmmbuild -F HMM_ls SEED #=GF BM hmmcalibrate --seed 0 HMM_ls #=GF BM hmmbuild -f -F HMM_fs SEED #=GF BM hmmcalibrate --seed 0 HMM_fs #=GF AM globalfirst #=GF RN [1] #=GF RM 9128139 #=GF RT Cysteine-286 as the site of acylation of the Lux-specific #=GF RT fatty acyl-CoA reductase. #=GF RA Lee CY, Meighen EA; #=GF RL Biochim Biophys Acta 1997;1338:215-222. #=GF DC The following Pfam-B families contain sequences that according to Prodom #=GF DC are members of this Pfam-A family. #=GF DR PFAMB; PB029697; #=GF DR PFAMB; PB044036; #=GF DR PFAMB; PB056333; #=GF DR INTERPRO; IPR008670; #=GF CC This family consists of several bacterial Acyl-CoA reductase (LuxC) #=GF CC proteins. The channelling of fatty acids into the fatty aldehyde substrate #=GF CC for the bacterial bioluminescence reaction is catalysed by a fatty acid #=GF CC reductase multienzyme complex, which channels fatty acids through the #=GF CC thioesterase (LuxD), synthetase (LuxE) and reductase (LuxC) components [1]. #=GF SQ 13 #=GS Q9KV99_VIBCH/423-818 AC Q9KV99.1 #=GS Q2WLE3_CLOBE/35-425 AC Q2WLE3.1 #=GS Q97GS8_CLOAB/45-446 AC Q97GS8.1 #=GS Q3WCI9_9ACTO/68-470 AC Q3WCI9.1 #=GS LUXC_VIBHA/49-443 AC P08639.1 #=GS Q93CP6_PHOLU/52-446 AC Q93CP6.1 #=GS Q4A539_9VIBR/49-442 AC Q4A539.1 #=GS LUXC_VIBFI/51-445 AC P12748.3 #=GS LUXC2_PHOLE/50-444 AC P29236.1 #=GS Q3KD56_PSEPF/30-413 AC Q3KD56.1 #=GS Q7NQ23_CHRVO/30-413 AC Q7NQ23.1 #=GS Q7MZU4_PHOLL/30-413 AC Q7MZU4.1 #=GS Q8G6W7_BIFLO/65-480 AC Q8G6W7.1 Q9KV99_VIBCH/423-818 LANQPLEAILGLINEARKSWSST............PELDPYRHTGLNF.......LADWCEPNRLKNLLDSALNGQRAFLDNFL..PRKDISHSSQKAMPRGIVSHWLSGNVPLLGMFALVQSILSKNANILKVSASESQALPVLLATFKGLSYTTPGGYTIHGDDLLGTLAVVYF.DRHQTKIAEKFS..ANADVRIAWGGREAIESVSGLPKKYNSQDILFGPKLSMMVVGSDALDSDKAIRKLIRRAATDSSVFDQFACASPHTIFVEKGGLITPKEFAEKLASAMDKALVRLPTQVPDIGQANKIRSKIAE....YAFIGE....YW.HDKHLRWTVLFDEG.........IELVEPTYQRVITVKAVDNVFDVVDSVHED.I...QTVGL.AMNGEKRLRFANEIMLKGAMRCPDVGYMTHFDS..PWDGVVALDRMVRW Q2WLE3_CLOBE/35-425 IYSYPSEAMIEIINEYSKILCSD............RKFLSYEGVPF.........LVLWLKKDNIKKLLHQDL.KKQEFLDDFI..EIAD..NKFMKAQPRGMVCHFMAGNVPTLPIYYLVQAIICRNVNLCRIPIGSIDIVIELLKPLKDIVINF.RGEKYYGSTLLKSISIINF.SSNDLKLNTEIS..QVADVRVICGGEEAVKTLSVLPKKTTCKDVIFGPKYSFAVFEKSAMESL.KITKTFDNFAKDIISFDQRACSSPQVLFIEKS.TVGINEAAQMLAQALEKSLKRYPKVEINQGAAANIINKRGE....YLISLEK..DII.CSKDLKYTILIDKE.........IILEEPVQHTTIFLKEIEDIFEVCKLITPR....IQTIGIASENNSRIINFANKASLHGVDRLVKVGLMNLYDS..PWDGILFMSEIVKW Q97GS8_CLOAB/45-446 VHDIKTEETIDLLDRCAKLWLDDNYSKK..HIETLAQITNQSFELVNYEFKS...MMQMLLRENIQNTIKREL.GEVDILDSWH..KTNY...GYEHRQPRGIIFHNISGNAFVVIPMSISMGLLSKNCNLVKVSKDEPYFAYAFYKSLCELDE...........TVKDRLSVLYF.DSSKTEIYDTIV..KNSDGVIHWGGEYSSRIIGEMCAKYQKHMIMHGAKISFEVVDKCD.....DLNKVSEEIAKDIICWEQKACLSPRVVFLN..DKIDVDEFSHCLSASLRKITEVIPKAYLSEWNSVKTIQDRQYCTLKYGMKNERRFKVY.SSFNADYTVILSDGMPEK.....EDINKCF.YRFIFVCPYSSKSDVVNYVSENLKDYLQTMG....YSGNDEEFIEKMTLLGVSIVTKPGKMSLHEPGTSHDGIHNLKEFTFL Q3WCI9_9ACTO/68-470 LLNVPLKEIIDFLVETGERIRDPRNTFMQDCIDRMAGTHVLPRAVLEGQVKG...AAAYLDKRLLETVVEQNF.PDPRALDEWVPKQDFTGRKSYIRAFAPRLI.HVLPGNSPGVAVKSIAQGALVKAVNLFKMSSSDPFTTVAVLRTMADIDPGH.........PIVRSMSAVYW.RGGDNTVEQVLYRPQYFDKIVAWGGGDAINNVIK.YLGPGFQLVSFDPKTSISMVGREAFASEEALDTAAELAAGDVMVLNQEACVASRFVFVEAD.QAEADRFSERL......HARIVEKAAASGDARPLDADLREQIDVLMMLDDEF..GVW.GKTDGHGLVIRSDE.........PVDFHPI.NKTANVVRVNSLDEAMRYVNVA....TQTVGF.YPFARMADYRDR.LASGGAQRIVRLGEAGPSTIGNPHDAMYPLHRFVHW LUXC_VIBHA/49-443 LNDLNINNIINFLYTTGQRWKSEEYSRRRAYIRSLITYLGYSPQMAK..LEANWIAMILCSKSALYDIIDTEL.GSTHIQDEWL..PQGE...CYVRAFPKGRTMHLLAGNVPLSGVTSILRGILTRNQCIVRMSASDPFTAHALAMSFIDVDPNH.........PISRSISVLYWPHASDTTLAEELL..SHMDAVVAWGGRDAIDWAVK.HSPSHIDVLKFGPKKSFTVLDHPA.....DLEEAASGVAHDICFYDQNACFSTQNIYFS...GDKYEEFKLKLVEKLNLYQEVLPKSKQSFDDEALFSMTRLE.....CQFSGL..KVI.SEPENNWMIIESEPG........VEYNHPL.SRCVYVHKINKVDDVVQYIEKH.QT..QTISF.YPWESSKKYRDA.FAAKGVERIVESGMNNIFRAGGAHDAMRPLQRLVRF Q93CP6_PHOLU/52-446 NNKLRLHNIVNFLYTVGQRWKNEEYSRRRTYIRDLKKYMGYSEAMAK..LEANWISMILCSKGGLYDVVENEL.GSRHIMDEWL..PQDE...SYIKAFPKGKSIHLLAGNVPLSVIMSILRAILTKNQCIIKTSSTDPFTANALALSFIDVDPNH.........PITRSLSVVYWPHQGDTSLAKEIM..QHMDVIVAWGGEDAINWAVE.HAPPYADVIKFGSKKSFCIIDNPV.....DLTSAATGAAHDICFYDQRACFSAQNIYYM...GNQYEEFKLALIEKLNLYAHILPNAKKDFDEKAAYSLVQKE.....SLFAGL..KVE.VDVHQRWMIIESNAG........VEFNQPL.GRCVYLHHVDNIEQVLPYVQKN.KT..QTISI.FPWESAFKYRDA.LALRGAERIVEAGMNNIFRVGGSHDGMRPLQRLVTY Q4A539_9VIBR/49-442 VNNLRLNQVVNFLYTVGQRWRSEEYTRRRTYIRDLTNFLGYSNEMAK..LEANWIAMLLCSKSALYDIVQHDL.GSLHIIDEWI..PQGD...CYIKALPKGKSVHLLAGNVPLSGVTSILRAILTKNECIIKTSSTDPFTATALVSSFIDVNADH.........PITRSMSVMYWSHNEDMSLPKKIM..NHADVV.AWGGDEAIKWAVK.HSPHHVDIVKFGPKKSLSIIDDPE.....DITAAATGVAHDICFYDQQACFSTQNIYYI...GNKLNLFIDELEKKLNVYAKILPKGCQNFDEKAAFTLTEKE.....CLFAGY..QVR.KGENQSWIIIQSPLD........AFGNQPL.SRSVYIHQVSSIEDILPFINKN.TT..QTVSI.APWESSFKYRDE.LAKHGAERIVESGMNNIFRVGGAHDGMRPLQYLVNY LUXC_VIBFI/51-445 RINLNLNQIVNFLYTVGQRWKSEEYNRRRTYIRELKTYLGYSDEMAR..LEANWIAMLLCSKSALYDIVNYDL.GSIHVLDEWL..PRGD...CYVKAQPKGVSVHLLAGNVPLSGVTSILRAILTKNECIIKTSSSDPFTANALVSSFIDVNADH.........PITKSMSVMYWPHDEDMTLSQRIM..NHADVVIAWGGDEAIKWAVK.YSPPHVDILKFGPKKSLSIIEAPK.....DIEAAAMGVAHDICFYDQQACFSTQDVYYI...GDNLPLFLNELEKQLDRYAKILPKGSNSFDEKAAFTLTEKE.....SLFAGY..EVR.KGDKQAWLIVVSPTN........SFGNQPL.SRSVYVHQVSDIKEIIPFVNKN.RT..QTVSI.YPWEASLKYRDK.LARSGVERIVESGMNNIFRVGGAHDSLSPLQYLVRF LUXC2_PHOLE/50-444 ENKLTINQIVNFLYTVGQKWKSETYSRRLTYIRDLIKFLGYSQEMAK..LEANWISMILCSKSALYDIVENDL.SSRHIIDEWI..PQGE...CYVKALPKGKSVHLLAGNVPLSGVTSILRAILTKNECIIKTSSADPFTATALVNSFIDVDAEH.........PITRSISVMYWSHSEDLAIPKQIM..SCADVVIAWGGDDAIKWATE.HAPSHADILKFGPKKSISIVDNPT.....DIKAAAIGVAHDICFYDQQACFSTQDIYYI...GDSIDIFFDELAQQLNKYKDILPKGERNFDEKAAFSLTERE.....CLFAKY..KVQ.KGESQSWLLTQSPAG........SFGNQPL.SRSAYIHQVNDISEVIPFVHKA.VT..QTVAI.APWESSFKYRDI.LAEHGAERIIEAGMNNIFRVGGAHDGMRPLQRLVNY Q3KD56_PSEPF/30-413 ARALDTTTVLGAAAIFAERLQDP............DMAMPIEPEQRQA.......LIGFCQPDALRRKLERELGEQPGSLRRLD..YRQS...RFERWSPLGLVVHITPGNAPLLAFCAVIEGLLAGNVNWLRPSSSDQGLTAQLLHGLAQCDATG.........QIAGHIAVV...PASTAQVGQLC...QRANGVSAWGGESALQAIRQ.QLAPGCRWIDWGHRISFIYLTPAA.....ATPEALDAVADEVCRLDQQACSSPQWLLVDSDDESILRAIGNDLAEAFERRSRHWPVLLPSIQEASEITTRTAMARLAQSFSEVD..GQV..WQAPDWRVIWTHDQ........QLAPSPL.FRSLLLKPLPRA.QVSEQLLPW.RNVLQSAGL.MCAEHETAELAQTLIAAGVTRITPVQAIHDGYEGEPHDGVYALQRLSRR Q7NQ23_CHRVO/30-413 AAEPDVDAVLSCAERFADALAGA............ERHPLLDEPGRAQ.......LAAFCRREALQAKLERELGERPFSLRRPD..YREP...RFEAWRPLGLVLHVTPSNAALLPFMAALEGLLAGNVNWLRPSSSDQGLSSRLLAELLRHDASG.........RLAARVAVL...PAPSDALPRLM...ADADGVSAWGGDAALSAIRA.RLPAGCRWIDWGHRVSFAYLDPAA.....AADEALDALADDICRFDQQACSSPQALLVDSDDPAAIHEMARRLAAALARRAPLWPALTPDLQEAAEISARMAFHKLDQAFADDQ..GQV..LSGQGWRLAWSMEQ........ELAPSPL.FRTVELRPAPRA.ALARILRPW.RTHLQSCGL.IAPPARLPELSRMLLAAGVSRVAPAGRMHDGYHGEPHDGVYALQRLSRR Q7MZU4_PHOLL/30-413 ACPPSVQQVLACAERFVDDLDNV............AVKLALDTAALTA.......LRHFCHRDSLEAKLRHELGEQPFSLRRFD..YTQP...RFETWQPLGLVVHITPANAPLLPFMAVLESLLVGNVNWLRPSSSDHGLNAQILAEFLRHDLSG.........TLAPYISVL...PLPSDQLSELL...ACADAVSAWGSNSALTAIRS.QLRPGCRWIDWGHRISFAYFDPMA.....ASDADYDALADDVCRFDQQACSSPQCLLVDSADENVLREVVSAVAAALARRATIWPALQTDIQEAAEISSQMAFLKLDHTFAELR..GSV..EEGNGWRVAWIQRQ........ELAPSPL.YRTLQVRPAPRA.QLVEILLPW.RPYLQSCAL.IVKEKELPMLSRQLLAAGVSRICQAGVMHDGYEGEPHDGVYALTRLARR Q8G6W7_BIFLO/65-480 LAAMSVNDILDIVADAAQLWADPDFELRRQAELLIPAITGYEPDMVRIELKR...YMRQFRRRELLRFLDSEI.GQPSMLDEFR..PNKA..GGYSKYVGPALTYQVFSSNVPGIPVWSMAMTLLVKGAILGKSSFSEPVMPAFFARSIAMVNSD...........LADAIAVVPW.KGGSQQLEDSAI..DAADAVIVYGSSQTTKLIAG.KVAGSKPCLGYGAKVGLAFIGREALRPD.TYADTVHRVAVDIATYDQQSCLAPQTVFVETDGALTPREVAQLLGGELENQQRKYPRSVLSDAENVAIQRARTDAEMRALMGGKA..AVFASGHSTAWSVLYRELDGSGADEDVASLMSPL.NRTVNVVAVPDLLDAARRLTSC.RGWLQSCGV.AVDSTRLFGLADTLAEVGVNRICPLGEMDRAKSGWHHDGGFNLIDLLRA #=GC seq_cons hsslslppllshlhpsupcWpssp.phh..h...htphhuYspphhp..hct...hhhhCp+suLhcll-p-L.up.chLD-al...pts...sY.+AhP+GlshHlluGNVPLlslhSllculLsKNssllKsSSSDPhhsssLlpohh-lDsst.........slscolSVlYa.cuscspLscplh..spADsVlAWGG--Alchlsp.ptsspschlcFGsKhShull-ssA.....slspAsculAcDIChaDQpAChSsQslalp...ssslcEFspcLuptLs+hscllP+up.shsEpAthotpct-.....shhsth..tVh.pspspsWhllhSptt........thhspPL.pRolhl+tlscl.-llphlpps.ps..QTlul.hshpuphthhsp.LuttGVpRIscsGhhshacsGtsHDGhhsLpRLV+a // hmmer-3.1b2/testsuite/ecori.sto0000664361611702660230000000005412473612614016151 0ustar wheelerteddy# STOCKHOLM 1.0 seq1 GAATTC seq2 GAATTC // hmmer-3.1b2/testsuite/i7-hmmbuild-fragments.pl0000775361611702660230000000234212473612615020766 0ustar wheelerteddy#! /usr/bin/perl # Test the ability of hmmbuild to deal with crappy alignments # of lots of sequence fragments. # # Usage: ./i7-hmmbuild-fragments.pl # Example: ./i7-hmmbuild-fragments.pl ../src/hmmbuild foo # # SRE, Tue Jun 16 13:37:05 2009 # SVN $Id$ $hmmbuild = shift; $tmppfx = shift; if (! -x "$hmmbuild") { die "FAIL: didn't find hmmalign binary $hmmalign\n"; } open (TMPFILE, ">$tmppfx.sto") || die "FAIL: couldn't open $tmppfx.sto for writing\n"; print TMPFILE << "EOF"; # STOCKHOLM 1.0 #=GF ID test seq1 ACDEFGHIKL------------------------------ seq2 ----------MNPQRSTVWY-------------------- seq3 --------------------ACDEFGHIKL---------- seq4 ------------------------------MNPQRSTVWY // EOF close TMPFILE; $output = `$hmmbuild -O $tmppfx.sto2 $tmppfx.hmm $tmppfx.sto 2>&1`; if ($? != 0) { die "FAIL: hmmbuild failed unexpectedly\n"; } $output =~ /1\s+test\s+4\s+40\s+(\d+)/; if ($1 != 40) { die "FAIL: should've built a M=40 model\n"; } $output = `$hmmbuild --fragthresh 0.0 $tmppfx.hmm $tmppfx.sto 2>&1`; if ($? == 0) { die "FAIL: hmmbuild should have failed but didn't\n"; } print "ok\n"; unlink "$tmppfx.sto"; unlink "$tmppfx.sto2"; unlink "$tmppfx.hmm"; exit 0; hmmer-3.1b2/testsuite/LuxC.hmm0000664361611702660230000055371212473612615015716 0ustar wheelerteddyHMMER3/e [3.0 | March 2010] NAME LuxC ACC PF05893.5 DESC Acyl-CoA reductase (LuxC) LENG 400 ALPH amino RF no CONS yes CS no MAP yes DATE Thu Jun 16 11:48:45 2011 NSEQ 13 EFFN 1.996338 CKSUM 395769323 GA -133.50 -133.50 TC -133.50 -133.50 NC -133.70 -133.70 STATS LOCAL MSV -11.2950 0.69925 STATS LOCAL VITERBI -12.2676 0.69925 STATS LOCAL FORWARD -5.7498 0.69925 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.45565 4.21691 2.92499 2.69931 3.37311 3.00393 3.70259 2.75438 2.70224 2.39267 3.58744 3.10035 3.43431 3.01263 2.95677 2.61570 2.90557 2.59195 4.47073 3.58770 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.00000 * 1 2.10283 4.34343 3.85392 2.97731 3.46469 3.77994 4.05556 2.40872 3.20326 1.70836 3.45297 3.19466 4.15531 3.48116 3.12880 3.04363 2.97719 2.14467 4.94472 3.73238 1 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 2 1.98667 3.56687 3.47131 2.90697 3.71360 3.67730 3.03921 2.84172 2.87200 2.40752 3.65838 2.44740 4.05966 3.19188 2.85211 2.91012 2.96963 2.84423 5.12742 3.03413 2 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 3 2.20145 5.29461 2.33908 2.25145 4.62977 3.51801 3.74226 4.11443 2.22657 3.59655 4.34317 2.05473 3.28779 2.84617 3.00066 2.39301 3.02621 3.68097 5.73243 4.31722 3 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 4 2.75628 4.22024 4.26048 3.67152 3.30736 3.86688 4.17185 2.28414 3.54383 1.68361 2.66952 3.86373 2.93002 2.97357 3.71015 3.15563 2.98807 2.15215 4.83066 2.87668 4 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 5 2.75640 5.24163 2.45650 2.44309 4.57790 3.51831 3.71718 4.05661 2.19104 3.54371 4.28904 2.58961 2.34946 2.81884 2.57724 2.20316 2.77800 3.62848 5.68168 4.27647 5 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 6 2.84560 4.27886 4.44381 3.86176 3.40476 3.98958 4.33738 2.14189 3.72697 1.60754 3.38770 4.02675 4.35720 3.93524 3.87665 2.65635 2.27291 1.71036 4.96437 3.77675 6 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 7 2.79766 5.31294 2.62369 1.77729 4.65159 3.51956 3.29361 4.13908 2.20244 3.61455 4.35897 2.02595 3.93875 2.57636 2.99509 2.75294 2.69188 3.70085 5.74493 4.32753 7 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 8 2.02021 5.31384 2.44385 1.92665 4.64607 3.52052 3.75682 4.13098 2.52413 3.61446 4.36430 2.54502 3.94702 2.17391 3.02565 2.76575 2.69426 3.69881 5.75217 4.33480 8 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 9 3.23559 4.53647 5.12285 4.57484 3.74429 4.58547 5.04845 1.10687 4.44734 2.42599 2.68815 4.69656 4.88903 4.64344 4.56241 3.93585 2.62426 1.39011 5.53014 4.34562 9 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 10 3.60128 4.82238 5.59842 5.07540 3.70336 5.09322 5.59931 1.24955 4.97189 1.17362 3.46049 5.23546 5.26412 5.06593 5.04458 4.49128 3.84086 1.52230 5.81574 4.72314 10 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 11 2.60094 5.53066 1.70353 2.08130 4.85830 2.42858 3.88755 4.36061 2.73862 3.83670 4.60918 2.00372 4.03675 3.01129 3.27482 2.55710 3.23600 3.91855 5.97703 4.52343 11 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 12 2.52938 2.84440 4.77361 4.17364 1.88416 4.07887 4.41856 1.84518 3.98698 1.74925 3.28303 4.21281 4.42589 4.12715 4.02951 3.39426 3.12529 2.30342 4.90888 3.73372 12 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 13 2.11009 4.53674 5.00214 4.43907 3.58222 4.47930 4.89191 1.66870 4.30420 1.25754 3.44935 4.57503 4.78638 4.47474 4.41407 3.81667 3.44343 1.77652 5.37178 4.21492 13 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 14 2.20130 5.09599 2.58273 2.15722 4.37303 3.54243 3.75465 3.81587 2.53221 3.37290 4.15805 2.31977 3.94531 2.88073 3.01342 2.75698 2.99307 2.83530 5.57154 2.56875 14 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 15 2.75932 5.19025 2.54955 1.82600 4.50521 3.52965 3.72904 3.28905 2.47634 3.48172 4.24241 3.01043 3.92983 2.83847 2.19147 2.73555 2.19908 3.56395 5.64170 4.25103 15 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 16 2.07532 3.06621 4.44376 3.84708 2.31286 3.87862 4.20569 2.59171 3.68727 2.35818 3.28678 3.95413 4.24893 3.86784 3.78945 3.17971 2.32863 1.92170 4.78817 2.85341 16 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 17 1.62471 4.70912 3.44763 2.92707 4.26718 1.86092 4.05027 3.67274 2.89899 3.31457 4.14134 3.34132 4.01750 3.24324 2.65255 2.31816 3.01132 2.79782 5.57861 4.29474 17 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 18 2.91615 5.44562 2.27486 1.94297 4.78321 3.54614 3.81943 4.27322 1.76241 3.74046 4.50097 3.00624 4.00545 1.79770 3.07387 2.85651 3.15595 3.83482 5.86581 4.44151 18 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 19 2.51434 4.88007 2.84182 2.62970 4.10328 3.58988 3.79572 2.87911 2.45250 2.31166 3.95720 3.13923 3.97903 2.96113 1.95095 2.46552 2.97727 3.20228 5.39403 4.07603 19 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 20 3.42163 4.75811 5.09720 4.53381 3.13212 4.59296 4.67541 2.13915 4.32422 1.26727 3.25529 4.62942 4.84749 4.43376 4.38375 3.92897 3.64398 2.68771 1.40553 3.62580 20 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 21 2.22504 3.46664 2.75547 2.49620 4.39076 3.53783 3.73080 3.83792 2.03145 2.81864 4.15786 3.03214 3.92977 2.58101 2.42928 2.42885 2.97110 3.46182 5.56867 4.19617 21 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 22 3.06548 5.55067 1.45048 2.46918 4.98524 2.87596 4.01557 4.49529 2.94015 3.98569 4.78344 2.34422 4.09859 3.15930 3.49667 1.56619 3.35617 4.03540 6.13713 4.67214 22 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 23 2.53175 5.21237 2.22970 1.90311 4.53375 3.52500 3.75326 3.99797 2.52058 3.51445 4.27746 3.00983 2.33754 2.86564 3.01324 2.75360 2.60224 3.09413 5.67698 4.28028 23 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.36892 4.62354 1.20831 0.61958 0.77255 0.48576 0.95510 24 2.73540 5.23375 2.25464 1.80384 4.56011 3.40448 3.66761 4.04298 2.44650 3.53033 4.29076 2.38174 3.85083 2.78028 2.42565 2.68705 2.70063 3.61650 5.67205 4.25350 24 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02087 4.27549 4.99784 0.61958 0.77255 0.93608 0.49785 25 3.39713 4.86340 4.21831 3.80272 1.74868 4.21686 3.65037 3.41959 3.72700 2.90392 4.00925 2.44853 4.57146 3.88196 3.93539 3.53784 3.62738 3.25428 3.92120 1.11994 25 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02087 4.27549 4.99784 0.61958 0.77255 0.93608 0.49785 26 2.69894 4.98191 2.81141 2.03713 4.37721 3.39004 3.75172 3.81922 2.56260 3.38497 4.18497 2.66201 3.87369 2.89440 3.03582 1.80664 2.22035 3.43426 5.58599 4.21906 26 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02087 4.27549 4.99784 0.61958 0.77255 0.93608 0.49785 27 2.74617 4.65674 3.38381 2.78902 2.81764 3.61889 3.77061 3.19279 2.12983 2.31788 3.72657 3.23620 3.99391 2.99835 1.94118 2.86805 2.96623 2.95008 5.13326 3.85480 27 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02087 4.27549 4.99784 0.61958 0.77255 0.93608 0.49785 28 2.98958 5.06785 3.51312 2.83361 4.39079 3.72231 3.72100 3.74310 1.78989 3.27219 2.77654 3.26171 4.08074 2.86939 1.38553 3.02273 3.17537 3.45275 5.44032 4.22734 28 r - - 2.68621 4.42244 2.77503 2.73142 3.46373 2.40532 3.72513 3.29373 2.67760 2.69359 4.24709 2.90365 2.73758 3.18057 2.89705 2.37906 2.77476 2.98537 4.58496 3.61522 0.68180 0.71838 4.99784 0.68312 0.70328 0.93608 0.49785 29 2.20860 2.98293 3.66316 3.10834 3.28549 3.63823 2.85482 2.82357 3.02473 2.53808 3.44908 3.45594 4.03757 3.32591 3.33261 2.91150 2.90102 2.60513 4.78257 2.14847 31 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02087 4.27549 4.99784 0.61958 0.77255 0.93608 0.49785 30 2.95643 4.58120 3.59565 2.36619 3.72265 3.88090 4.27154 1.17189 3.21752 2.51828 3.64110 3.65571 4.31353 3.59144 3.52862 3.26410 3.21452 2.25465 5.33726 4.08663 32 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02087 4.27549 4.99784 0.61958 0.77255 0.93608 0.49785 31 2.70779 5.08211 2.40886 2.08375 4.37958 3.44640 3.65833 3.82569 2.39357 2.65194 4.14331 2.93491 3.86114 2.78036 2.00440 2.69005 2.93959 3.44734 5.53364 4.16123 33 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02087 4.27549 4.99784 0.61958 0.77255 0.93608 0.49785 32 2.65369 4.99335 2.36185 2.26096 4.27748 3.43662 3.64427 3.71922 2.41019 2.65853 4.05664 2.93567 3.83811 2.76885 2.45264 2.45868 2.45454 3.35122 5.46755 4.09914 34 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02087 4.27549 4.99784 0.61958 0.77255 0.93608 0.49785 33 3.51027 4.78501 5.24982 4.67524 3.18004 4.82779 5.13337 1.78345 4.53511 0.87694 2.20025 4.90083 4.95171 4.55343 4.58685 4.18816 3.72398 2.37324 5.31933 4.30682 35 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02087 4.27549 4.99784 0.61958 0.77255 0.28139 1.40542 34 2.02437 5.14927 2.71390 2.29905 4.45499 3.52822 3.72086 3.12016 2.22451 3.43742 4.20131 3.01324 2.65705 2.83215 2.56305 2.72300 2.78076 3.51868 5.60641 4.22142 36 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 35 2.38842 5.17300 3.01763 2.22401 4.48830 2.90154 3.71334 3.95310 2.01076 3.46510 3.43331 2.80871 3.91629 2.46543 2.68065 2.71560 2.58599 3.10207 5.62360 4.23241 37 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 36 2.45797 4.21939 4.18822 3.60171 2.38463 3.83906 3.35667 2.02521 2.99607 2.14794 3.33371 3.81444 4.20868 3.70559 3.66736 3.12411 2.50633 2.47258 4.82716 2.66718 38 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 37 2.74102 4.64544 2.82653 2.81600 3.81374 3.64972 3.02876 3.19120 2.79225 1.88576 2.87879 3.28355 3.35280 3.12122 3.20364 2.87683 2.22198 2.93719 5.20103 3.93053 39 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 38 2.46391 4.79521 3.26567 2.72329 4.10905 2.04218 3.87585 3.51098 2.71638 2.78429 3.97961 2.65005 2.71106 3.05638 3.15921 2.40460 2.98289 2.64290 5.42201 4.11695 40 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 39 2.97224 4.48188 4.21397 3.65030 3.16021 4.02201 4.15092 2.46201 3.49198 1.74556 3.46223 3.90074 4.37640 2.81189 3.70992 3.30960 3.20113 2.68369 4.76487 1.48024 41 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 40 2.81377 5.31375 2.37824 1.78817 4.64845 3.52236 3.76097 4.13248 2.52697 3.61675 4.36786 2.99146 3.02628 2.86783 2.59321 1.84061 3.05103 3.70103 5.75478 4.33878 42 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 41 2.73874 5.20314 2.79368 2.16792 3.32026 2.91046 3.05026 4.00184 2.45123 3.50015 4.24907 2.79989 2.56179 2.63738 2.54795 2.70988 2.69653 3.58348 5.64728 4.24795 43 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 42 2.12642 5.18810 2.54751 1.80472 4.50371 3.52352 3.72649 3.96907 2.48082 3.48218 4.24085 3.00431 3.31998 2.63571 2.96986 2.72817 2.60170 2.91893 5.64211 4.24834 44 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 43 2.48740 4.42636 3.67912 3.11183 3.56181 2.68338 3.99774 2.91607 3.05696 2.29481 2.06479 3.49884 3.10582 2.89857 3.39368 2.98288 2.97328 2.33735 5.01792 3.79055 45 m - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 44 2.00886 4.27251 4.18772 3.60444 2.72468 3.87752 4.18108 2.64800 3.48474 1.76454 3.35627 3.83692 4.24607 3.72075 2.70799 3.16320 3.01571 1.89764 4.88849 3.69415 46 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09382 4.62354 2.52906 0.61958 0.77255 0.48576 0.95510 45 2.51345 5.23091 2.99680 2.16871 4.57583 3.51675 3.69261 4.04824 1.95023 3.52745 4.27570 2.27340 3.91087 2.52107 2.30648 2.71899 2.68363 3.62236 5.65552 4.26360 47 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.23038 4.54561 1.63397 0.61958 0.77255 0.62123 0.77064 46 2.16630 4.26676 3.69458 3.12513 2.75531 2.84092 3.93130 2.30958 3.05912 2.46878 3.37537 3.47683 4.04030 2.88544 3.36359 2.92281 2.87506 2.53027 4.85104 2.82538 48 a - - 2.68624 4.42232 2.77526 2.73061 3.46360 2.40519 3.72501 3.29360 2.67747 2.69361 4.24696 2.90353 2.73746 3.18100 2.89807 2.37893 2.77526 2.98525 4.58483 3.61510 0.98297 1.11718 1.20865 0.15016 1.97019 0.44123 1.03071 47 3.34107 4.65856 5.02743 4.46686 2.30038 4.58409 4.82010 2.28202 4.33113 0.94960 3.01894 4.64033 4.79451 4.39630 4.40605 3.92988 3.56520 1.89037 5.10049 3.90692 50 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02087 4.27549 4.99784 0.61958 0.77255 0.93608 0.49785 48 3.00194 5.37085 2.80893 1.61233 4.74829 3.53618 3.76669 4.17610 1.37598 3.64905 4.47633 3.02311 4.01133 2.90074 2.68489 2.94909 3.22846 3.79440 5.74458 4.41999 51 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02087 4.27549 4.99784 0.61958 0.77255 0.93608 0.49785 49 1.67987 4.61952 3.22410 2.73889 4.26284 2.48177 3.89647 3.68380 2.69972 3.29787 4.11027 3.16047 3.86010 3.07086 2.35718 2.13122 2.88203 3.27374 5.52766 4.23297 52 a - - 2.68633 4.42240 2.77534 2.73138 3.46369 2.40528 3.72509 3.29235 2.67756 2.69370 4.24705 2.90271 2.73754 3.18161 2.89815 2.37902 2.77534 2.98533 4.58005 3.61518 0.31414 1.33626 4.99784 1.00382 0.45646 0.28139 1.40542 50 1.99038 4.25827 4.13047 3.54994 3.35121 3.83825 4.14109 2.69344 3.43863 1.57638 2.72503 3.78991 4.21227 3.67578 3.64657 2.62227 2.98911 2.50273 4.86418 2.83811 56 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 51 1.95198 4.30897 4.15418 3.57442 3.41131 3.88818 4.20015 2.36218 3.45701 2.42167 1.75013 3.82910 4.26040 3.70906 3.08374 3.17366 3.03778 2.14120 4.94382 3.74966 57 m - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 52 2.23292 4.95618 2.69707 2.57013 4.19934 3.06993 3.22525 2.74933 2.56208 2.42552 4.02560 3.09171 3.95559 2.52083 2.57208 2.76805 2.96983 3.29083 5.45505 4.11623 58 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 53 2.86471 4.27148 4.54392 3.96128 2.16705 3.98892 4.17144 2.68878 3.79664 1.75261 2.65987 4.03735 4.34664 2.87569 3.88603 3.29196 3.09545 2.52004 2.58888 2.63497 59 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 54 3.20687 1.46331 4.98238 4.42148 2.46113 4.36067 4.63309 2.55785 4.24732 1.35099 3.30159 4.48460 4.69058 4.35871 4.30541 3.70276 3.45163 2.52949 5.00794 3.71843 60 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 55 2.74527 5.23547 2.58117 2.20754 4.57383 3.51795 3.19781 4.05321 2.18624 2.90675 4.27861 2.98837 3.91228 2.54794 2.33373 2.07932 2.97606 3.62266 5.67066 4.26643 61 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 56 3.29381 5.51447 3.70780 3.01195 5.01244 3.93753 3.87613 4.35958 1.21914 3.76204 4.59994 3.43717 2.50943 2.99553 1.45924 3.26866 3.46093 4.00638 5.78447 4.59824 62 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 57 2.81941 5.33605 2.08370 1.99727 4.67245 3.13371 3.76131 4.16103 2.52862 3.63811 4.38612 2.56498 3.95096 2.86685 2.21629 2.15567 3.05657 3.72345 5.77091 4.34978 63 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 58 1.92073 5.11486 3.03858 2.20294 4.41220 3.17862 3.73885 3.86117 2.49773 2.81904 4.17761 2.30034 3.93452 2.85750 2.59431 2.50948 2.98149 3.48145 5.58651 4.21188 64 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 59 3.90344 5.11716 5.74754 5.21207 3.42426 5.30256 5.64558 1.65816 5.05267 0.60800 3.17885 5.43853 5.35690 5.01541 5.05712 4.72306 4.12136 2.51240 5.66739 4.66124 65 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 60 2.79414 5.16978 3.09817 2.08208 4.48040 3.57469 3.74090 3.92700 1.96908 2.79263 4.22391 3.06293 3.96342 2.27894 2.57816 2.78006 3.01974 3.54372 5.60997 2.55619 66 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 61 2.33739 5.24517 2.19127 2.44619 4.58140 3.52111 3.71997 4.05927 2.19471 3.54641 4.29278 2.29843 3.92307 2.82207 2.31123 2.72685 2.56898 3.63199 5.68420 4.28010 67 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 62 2.79323 4.24849 4.30869 3.72145 2.66992 3.91552 4.22637 2.00881 2.41029 1.87961 3.34025 3.91402 4.27877 3.80780 3.75932 3.20674 2.52118 1.97772 4.88153 3.69314 68 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 63 3.60195 4.83080 5.57499 5.04434 3.65714 5.06777 5.54722 1.66185 4.93378 1.01892 3.41851 5.20601 5.23854 5.01608 5.00008 4.46000 3.83923 1.35428 5.76401 4.68054 69 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 64 2.79704 5.31384 2.09150 1.72083 4.65578 3.52195 2.97132 4.14318 2.19572 3.61570 4.35908 2.76299 3.93861 2.65698 2.67780 2.75222 3.03112 3.70355 5.74307 4.32729 70 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 65 2.75618 5.19187 3.03054 2.47460 4.51288 3.53559 2.95932 3.97706 2.44611 3.48334 4.24098 2.61416 3.92818 2.19888 2.16657 2.15046 2.75835 3.57041 5.63516 3.64811 71 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 66 2.50520 5.77228 1.71778 1.18026 5.07818 3.54570 4.00725 4.60225 2.95220 4.06775 4.87139 2.36843 4.11956 3.14981 3.53186 3.05443 3.43071 4.15038 6.21040 4.71070 72 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 67 3.90424 5.12315 5.75995 5.18944 2.44235 5.25583 5.44534 2.01536 5.05244 0.59220 3.09301 5.37438 5.29204 4.92520 5.00875 4.64158 4.10606 2.74526 5.46736 4.39355 73 L - - 2.68624 4.42231 2.77526 2.73129 3.46360 2.40472 3.72501 3.29360 2.67747 2.69361 4.24696 2.90317 2.73746 3.18152 2.89807 2.37893 2.77526 2.98524 4.58483 3.61509 0.26599 1.47497 5.34589 0.15847 1.92038 0.48576 0.95510 68 2.87775 5.31449 2.86072 1.90971 4.66444 1.67018 3.83078 4.13500 2.24508 3.64177 4.41572 3.03332 2.96647 2.95169 3.09475 2.61411 3.12534 3.72084 5.79731 4.39468 75 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 69 2.78103 5.28439 2.52939 2.16946 4.62590 3.52415 3.72780 4.10875 2.19137 3.58532 4.32918 2.99144 3.93171 1.90374 2.66771 2.06317 3.01336 3.67377 5.71471 4.30576 76 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 70 2.75465 4.78663 3.27789 2.71431 3.98796 3.62284 3.83352 3.06367 2.66173 2.80917 3.87158 3.20573 2.04669 2.58376 2.34184 2.84092 2.74644 2.61798 5.31886 4.02508 77 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 71 2.43554 5.16591 2.59366 2.20644 3.13084 3.05293 2.48946 3.93902 2.46991 3.45646 4.21647 3.00669 3.91944 2.82793 2.55533 2.37325 2.97270 3.53802 5.61990 4.23026 78 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 72 2.36143 4.19658 4.44411 3.84990 2.33568 3.91161 4.23673 1.78766 3.69701 2.34982 2.64945 3.97362 4.27743 3.88275 3.81048 2.27983 3.00635 2.23639 4.82722 3.64338 79 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 73 3.48359 4.83572 5.07906 4.49180 3.32658 4.69140 4.96803 2.15620 4.31410 0.67976 2.73346 4.71536 4.90102 3.38168 4.41403 4.01968 3.69914 2.70372 5.32628 4.26866 80 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 74 3.29594 5.69911 0.82684 2.63293 5.06152 3.67018 4.14432 4.61129 2.98544 4.09625 4.94519 3.19390 4.24884 3.30711 2.01758 3.22193 3.57512 4.19373 6.16578 4.77044 81 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 75 2.85779 5.37810 2.41465 1.49830 4.71211 3.52782 3.78819 4.20173 2.56477 3.67815 4.43184 2.54795 3.97257 2.89750 2.23104 2.39042 3.09714 3.76486 5.81134 4.38674 82 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 76 3.35161 4.71703 4.79132 4.30065 1.41979 4.36461 4.03336 3.11305 4.13084 2.25048 3.73741 4.26757 3.24821 4.22953 4.20973 3.68663 3.58030 2.99168 1.52299 2.67631 83 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 77 2.74369 4.61379 2.43792 2.85513 3.77387 3.66516 3.03281 2.35613 2.82204 2.08991 3.70615 3.31364 4.04878 3.15067 2.66537 2.89427 2.97514 2.48574 5.17350 3.90970 84 l - - 2.68622 4.42229 2.77524 2.73127 3.46358 2.40517 3.72499 3.29358 2.67713 2.69359 4.24694 2.90351 2.73710 3.18151 2.89805 2.37891 2.77524 2.98523 4.58481 3.61507 0.09589 2.44570 5.34589 0.66319 0.72403 0.48576 0.95510 78 2.81840 5.17369 3.03856 2.22658 4.46579 3.57399 3.77016 3.91367 2.19149 3.44922 4.23424 3.06563 1.94795 2.47054 2.93741 2.80607 3.04778 3.54023 5.62285 2.64495 87 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 79 2.74994 5.18200 2.59018 2.46783 4.49842 3.52913 3.72030 3.11474 2.46144 3.47366 4.23230 2.56409 3.92419 2.23589 2.10356 2.72687 2.37295 3.55746 5.63140 4.24201 88 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 80 2.41569 5.21996 2.76783 2.27444 3.31354 2.57151 3.71259 4.02373 1.99238 3.51804 4.26577 2.57722 3.91522 2.36303 2.94725 2.71538 2.97858 3.60185 5.66208 4.25988 89 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 81 2.38894 5.19453 2.09108 2.09443 4.50973 3.52370 3.73010 3.97594 2.48676 3.48852 4.24756 3.00400 2.93516 2.83935 2.97684 2.48356 2.56646 3.56991 5.64836 3.20148 90 d - - 2.68635 4.42242 2.77536 2.73140 3.46371 2.40480 3.72430 3.29318 2.67726 2.69372 4.24706 2.90325 2.73756 3.18163 2.89778 2.37882 2.77536 2.98535 4.58494 3.61520 0.38164 1.16318 5.34589 0.66669 0.72032 0.48576 0.95510 82 2.76316 2.78864 3.21477 2.65743 4.28860 2.40647 3.82531 3.70590 2.24640 3.29643 4.10649 3.15719 3.99040 2.97312 2.21973 2.02536 3.01363 3.36142 5.52047 4.19742 94 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 83 3.93041 5.19859 5.00710 4.68345 1.33203 4.71325 3.86755 3.77248 4.53838 3.18782 4.36737 4.43739 5.04558 4.50546 4.56752 2.67693 4.16240 3.63853 4.01684 0.89379 95 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 84 2.74334 4.64404 3.38210 1.95596 3.81335 3.65473 3.88531 2.35933 2.79494 2.86535 2.97668 3.28911 4.03957 2.67518 3.20514 2.45735 2.97509 2.38082 5.20238 3.93284 96 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 85 2.63273 5.32368 3.31675 2.70571 4.70503 3.71528 2.87483 4.12050 1.34355 3.59074 4.38350 3.20188 4.09012 2.90360 1.91958 2.95909 2.76697 3.74039 5.69194 4.39341 97 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 86 1.48466 4.51580 3.73188 3.16398 3.44283 3.78461 3.98110 3.02446 3.03071 2.72207 3.63082 3.53925 4.16863 3.38029 2.69593 3.04610 3.05377 2.80371 2.65438 2.77825 98 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 87 2.74329 4.39890 3.73452 3.16338 2.44146 3.75061 4.01292 2.87691 3.09908 2.30153 2.87511 3.53574 4.12733 2.09639 2.97785 2.66281 2.97495 2.29496 4.98690 3.76390 99 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 88 2.02105 4.57756 3.87280 3.67812 4.94238 2.30051 4.78834 4.38693 3.82524 4.06149 4.86627 3.77126 0.81065 4.07169 4.11637 2.80851 3.14918 3.72887 6.25765 5.07969 100 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 89 3.00576 5.20933 3.42507 2.80003 4.53792 3.75938 3.82635 3.92720 1.72676 2.30233 4.28094 3.27510 2.42530 2.96068 1.75472 3.01655 3.20876 3.59746 5.60747 4.33999 101 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 90 2.12313 4.74004 3.61045 3.25912 4.71684 0.91571 4.37058 4.14027 3.13832 3.76774 4.59276 3.55998 4.11895 3.58095 2.48413 2.87836 3.17096 3.63936 5.96399 4.72800 102 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 91 2.80514 4.29773 4.19140 3.60335 3.36671 3.89891 4.19023 2.03589 2.59782 1.50159 2.71340 3.84464 4.26099 3.71498 3.18266 3.18323 3.03590 2.33204 4.90732 3.71968 103 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 92 2.87023 4.35753 4.37644 3.82123 3.57693 3.96972 4.42645 1.82664 3.71266 2.55131 3.53966 4.02127 4.38614 3.95228 3.91381 2.27218 2.29593 1.40117 5.14085 3.94272 104 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09589 4.62354 2.50574 0.61958 0.77255 0.48576 0.95510 93 2.71433 3.03815 4.56735 3.96005 2.61657 3.87290 4.20052 2.34823 3.76945 2.10620 2.88545 3.99791 4.23686 3.92136 3.81714 2.65131 2.94657 1.70516 4.72694 2.76269 105 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01593 4.54358 5.26592 0.61958 0.77255 0.40791 1.09374 94 3.39990 5.49943 3.24749 2.98854 4.16302 3.87800 0.82358 4.33586 2.69769 3.78832 4.72646 3.45831 4.38435 2.39760 2.96665 3.38635 3.64404 4.02066 5.50693 4.02274 106 h - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 95 2.77317 4.16891 4.58348 3.98031 2.64979 3.92854 4.24559 2.12252 3.79840 1.75573 3.26287 3.00555 4.28976 3.95535 3.85994 3.23427 3.00517 1.72571 3.29328 3.58386 107 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 96 3.10499 4.46858 4.90416 4.30594 2.53978 4.29829 4.61676 2.12443 4.13925 1.18341 2.53255 4.40314 4.59887 4.24924 4.19350 3.61510 2.18840 2.49458 5.05380 3.92586 108 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 97 1.36190 4.55070 3.89710 3.54700 4.77958 3.31486 4.61147 4.21806 3.58083 3.87768 4.67545 3.69052 1.71176 3.86016 3.91382 1.48076 3.07512 3.61623 6.09536 4.88520 109 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 98 2.15647 4.51710 4.02730 3.85991 5.04914 0.77502 4.91652 4.52029 4.01247 4.19225 4.97100 3.83440 4.09099 4.21977 4.26584 1.78736 3.11645 3.76914 6.37083 5.21797 110 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 99 3.59871 5.50870 3.46316 3.45032 5.02338 3.90501 4.84715 4.97733 3.86579 4.53562 5.53340 0.32173 4.61147 4.17459 4.20249 3.66778 4.03296 4.50987 6.22153 4.95864 111 N - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 100 1.53606 4.42457 4.31085 3.89645 4.09760 3.53117 4.65218 3.06309 3.82566 3.10614 4.05200 3.93800 4.20845 4.07471 4.04707 2.28485 3.10750 1.13372 5.60398 4.41624 112 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 101 2.38221 4.58838 3.92202 3.54224 2.65650 3.59029 4.41410 3.37932 3.52987 3.06075 4.06103 3.76746 0.95059 3.82052 3.82267 3.00333 3.18177 3.10826 5.38963 4.03994 113 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 102 2.78941 4.36878 4.13960 3.60228 3.55994 2.31969 4.29222 2.73501 3.50034 1.31933 3.53196 3.83737 4.25517 3.76290 3.73536 3.12453 2.49881 2.16023 5.09648 3.89988 114 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 103 2.95608 4.37246 4.57291 3.99823 3.46131 4.12191 4.48779 2.03254 3.86365 1.43790 3.40790 4.16680 4.47881 4.06993 4.01285 2.15363 3.19750 1.71408 5.08967 3.90812 115 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 104 2.03400 4.52137 3.67802 3.15141 3.90501 2.04722 4.13168 2.56139 3.11623 2.96447 3.84789 3.50606 1.96861 3.42384 3.47877 2.88507 3.00937 2.65041 5.32625 4.08821 116 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 105 2.89926 4.27906 4.70940 4.11372 2.26198 4.08335 4.42071 1.97849 3.94277 2.24753 2.68418 4.18976 3.06064 4.09864 4.01260 3.39517 3.13237 1.44017 4.93723 3.76381 117 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 106 2.73985 3.30867 4.35717 3.76282 2.72490 3.86571 4.17638 2.61941 2.85459 2.36960 2.11239 3.90589 4.23309 3.81046 3.74454 3.16041 2.23673 2.42885 3.19420 2.85934 118 m - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 107 1.66773 4.61258 3.60491 3.15031 4.07375 3.49908 4.19095 3.55439 3.14466 3.23809 4.10283 3.49519 4.08172 3.46395 3.51642 1.25521 3.05852 3.21092 5.47821 2.86734 119 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 108 2.73188 4.54613 5.15440 4.58819 3.57919 4.56142 4.97066 1.22512 4.44313 1.66839 2.56965 4.68595 4.84698 4.58597 4.51487 3.90437 3.48004 1.69065 5.39334 4.24392 120 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 109 2.04993 4.28536 4.38078 3.80241 3.41474 3.95808 4.31510 2.24665 3.67623 1.56440 3.39792 3.98491 4.33460 3.89226 3.84273 2.62937 3.07473 1.82067 4.96830 3.77914 121 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 110 2.85353 5.20450 3.14848 2.01242 4.52380 3.61728 3.76535 3.95820 2.40870 3.47341 2.57868 3.10772 4.00617 1.95192 2.04882 2.84022 3.07457 3.58390 5.62988 4.28777 122 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 111 1.45380 4.51452 4.02774 3.65764 4.80157 1.37966 4.67374 4.24565 3.66839 3.90587 4.69641 3.73951 4.05886 3.93367 3.98597 1.88951 2.23592 3.61889 6.12279 4.93036 123 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 112 2.54049 4.67839 5.16223 4.61860 3.59298 4.66048 5.10595 1.22652 4.47634 1.20438 3.41582 4.77170 4.94064 4.63539 4.58172 4.01925 3.60685 2.13140 5.51403 4.38453 124 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 113 3.95612 5.17386 5.74601 5.21511 3.39066 5.32235 5.63989 1.99541 5.03736 0.49951 3.15051 5.45488 5.36735 4.99885 5.03993 4.75103 4.17211 2.61862 5.64512 4.63751 125 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 114 2.08648 2.93125 4.16401 3.64149 3.73633 3.58406 4.34619 3.02610 3.55399 2.81620 3.72273 3.79705 4.15228 3.79979 3.79256 2.03464 1.94055 1.74641 5.21853 4.02484 126 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 115 3.23071 5.46620 3.57970 2.95223 4.96080 2.27585 3.88436 4.32775 1.05041 3.75004 4.58087 3.39407 4.25843 3.00591 1.92107 3.21022 3.41787 3.96359 5.78983 4.57935 127 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 116 2.17350 4.87963 3.16210 2.99709 4.91956 2.41671 4.38087 4.39256 3.32566 3.99758 4.80634 0.89507 4.11215 3.58126 3.75700 2.89421 3.23629 3.82607 6.17240 4.85570 128 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 117 2.10387 3.21993 3.51040 2.39925 3.72407 3.68285 3.95498 3.05678 2.91872 2.78416 3.66963 3.38955 4.07940 2.69287 3.29788 2.93024 2.98634 1.74097 5.14562 3.89649 129 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 118 2.78250 2.27506 3.86134 3.36767 3.82102 3.68379 4.26032 2.36645 3.28588 2.87249 3.81943 1.35007 4.20205 3.61260 3.59628 3.02726 3.10119 2.73955 5.30701 4.05410 130 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 119 3.35251 4.67834 5.15941 4.57632 3.23620 4.56751 4.78662 1.51922 4.38512 1.10258 3.19930 4.66365 4.81936 4.46341 4.41736 3.90158 3.57501 2.57497 2.39222 3.88321 131 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 120 2.79692 3.05443 4.67121 4.06677 2.65032 2.92598 4.30683 1.95354 3.87659 1.64924 3.27780 4.10128 4.32906 4.02592 3.92108 3.28033 3.03019 1.91225 4.82239 3.64486 132 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 121 3.66839 5.71271 4.27881 3.37843 5.33755 4.18921 3.95078 4.59475 0.88574 3.91598 4.80984 3.69755 4.50684 3.07577 1.28343 3.63737 3.76703 4.28676 5.85315 4.79048 133 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 122 2.74748 4.29286 4.00952 3.43348 3.41642 3.80875 4.11534 2.34698 3.34387 2.49221 2.54259 3.71710 2.59195 3.59771 3.59156 2.54764 2.24926 1.97695 4.91363 3.71090 134 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 123 2.67701 4.63409 3.82983 3.64085 4.93591 3.35673 4.76707 4.45031 3.76678 4.10345 4.91870 3.76931 2.58293 4.04702 4.05999 0.58154 3.19497 3.78975 6.24287 5.03329 135 S - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 124 2.25178 4.54364 3.51818 2.95936 2.88840 3.68058 3.94984 2.58779 2.48508 2.77569 3.66095 3.38946 4.07584 3.23772 3.29499 1.64742 2.98134 2.82718 5.13226 3.88167 136 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 125 2.49716 4.94793 2.47452 2.73689 4.64695 2.64640 4.03260 4.10492 2.87044 3.66973 4.45232 3.21115 4.01050 3.18006 3.34254 1.21784 2.50600 3.63639 5.85668 4.50552 137 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 126 3.31277 5.97597 1.07131 1.45093 5.27261 3.55501 4.11389 4.82162 3.15816 4.27976 5.12280 3.00437 4.18779 3.27582 3.78851 2.41527 3.60517 4.35834 6.42645 4.87866 138 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 127 2.77634 4.91225 3.17785 2.64879 4.14830 3.59587 3.21270 2.87334 2.61323 3.18005 4.00856 3.15537 1.75608 2.42572 3.04721 2.46375 3.01239 3.25330 5.43175 4.11171 139 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 128 2.74950 4.60718 2.80737 2.86978 2.14345 2.51543 3.90207 3.14129 2.84871 2.82825 3.70384 3.32465 4.05639 2.69528 3.24905 2.90401 2.98181 2.45930 5.14260 3.00892 140 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 129 2.41989 4.23984 4.51792 3.92248 2.65660 3.97534 4.29729 2.20245 3.76715 1.78073 2.61866 4.04220 4.33066 3.94270 3.87185 3.27714 1.86005 2.39358 4.86478 3.68991 141 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 130 1.81172 4.62378 3.42298 2.86789 3.84878 3.62138 3.92465 3.22295 2.84267 2.50923 3.77355 2.89782 3.00986 3.16837 3.24919 2.58477 2.28944 2.51418 5.23660 3.97049 142 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 131 2.02929 4.58436 3.43994 2.87689 3.74340 3.66701 3.38450 2.63773 2.84741 2.80678 3.68134 2.78717 3.15960 3.16864 3.24490 2.62355 2.58236 2.47095 5.14924 3.03160 143 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 132 1.71334 4.82384 3.22182 2.34405 3.06738 3.60096 3.81436 3.42986 2.64511 3.06826 3.90576 3.16775 3.99039 2.45368 2.77234 2.81483 2.97587 2.69322 5.34938 4.04235 144 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 133 3.63430 4.89942 5.52512 4.94352 2.02128 4.94698 5.23043 2.15702 4.79558 0.82582 3.14001 5.07847 5.09435 4.76345 4.78594 4.30559 3.84894 2.09321 5.40139 4.33077 145 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 134 2.06401 4.31539 4.43148 3.85171 3.33827 3.99807 4.32034 2.55963 3.71195 1.31668 3.33740 4.02422 4.36105 3.91779 3.86224 3.30067 3.10976 2.00033 4.92966 2.83777 146 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 135 2.11771 5.11630 3.06645 2.50633 4.41091 3.54744 3.16855 3.85725 1.99487 3.08010 3.56314 2.82015 3.93819 2.85109 2.23446 2.44138 2.98269 3.47993 5.57748 4.20821 147 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 136 2.76079 5.05957 3.04604 2.15106 4.50776 2.94733 3.85390 3.95989 2.64412 3.50999 4.29010 3.09907 2.98754 2.98377 3.12187 1.59369 2.21206 3.55099 5.69663 4.32850 148 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 137 3.69935 4.95996 5.58945 4.99645 1.51754 4.99666 5.24803 2.04742 4.84176 1.04234 2.36861 5.13417 5.11472 4.76615 4.80577 4.35487 3.90615 2.74938 5.37681 4.33257 149 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 138 1.90814 3.11385 4.02193 3.44469 3.44506 3.83871 4.13843 1.96843 2.36598 2.10969 3.43342 3.73548 4.21482 3.60972 3.59060 3.11583 3.00951 2.48582 4.94861 3.74488 150 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 139 2.77024 5.24286 1.79080 2.17720 4.56987 2.92359 3.72926 4.04475 2.47718 3.53947 3.16027 2.99595 3.92933 2.55842 2.45985 2.73668 3.00305 3.62426 5.68419 4.28125 151 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 140 2.82042 3.27921 4.59158 3.99505 3.31503 3.98736 2.90124 1.89600 3.82427 1.83887 3.31639 4.08094 4.34598 3.99766 3.90813 3.29444 3.05422 1.55166 4.87161 3.68867 152 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 141 2.94613 5.35492 1.32444 2.49095 4.72154 3.53156 3.92263 4.19083 2.78262 3.72529 4.51900 2.11593 4.04496 3.06015 3.30150 2.42593 3.21471 2.81971 5.90023 4.48145 153 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 142 1.98427 4.64788 3.37015 2.43315 3.81918 3.64652 3.87793 2.69028 2.78655 2.60501 3.74173 3.27882 2.62941 3.11539 3.19976 2.45338 2.97036 2.94064 5.20388 3.11407 154 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09571 4.62354 2.50775 0.61958 0.77255 0.48576 0.95510 143 2.83179 5.32546 2.07275 2.25513 4.66027 2.75604 3.77616 4.14529 2.57390 3.63649 4.39785 2.15516 3.94800 2.89072 3.08456 2.26871 2.31471 3.71660 5.78262 4.35962 155 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.11027 4.54376 2.36685 0.61958 0.77255 0.62413 0.76728 144 2.70910 4.61895 3.33266 2.82011 2.84182 2.34561 2.00177 3.23660 2.79942 2.90581 3.78065 3.26820 4.00613 3.13568 3.19802 2.84242 2.49230 2.96952 5.12988 3.79228 156 h - - 2.68652 4.42259 2.77523 2.73125 3.46388 2.40435 3.72448 3.29336 2.67744 2.69389 4.24724 2.90381 2.73744 3.18181 2.89797 2.37898 2.77523 2.98553 4.58511 3.61307 0.20883 1.69937 5.17332 1.89535 0.16283 0.53721 0.87798 145 2.75897 5.15307 2.54248 2.46228 4.47056 3.50852 3.73414 3.92682 2.49059 3.45377 4.22646 3.00248 2.14868 2.54923 2.66139 2.74072 2.06446 3.53412 5.62482 4.24187 166 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01601 4.53818 5.26053 0.61958 0.77255 0.40374 1.10208 146 3.64697 4.86721 5.62524 5.09694 3.64545 5.12727 5.60733 1.18216 4.98862 1.09168 3.39864 5.26797 5.27781 5.05384 5.04861 4.52610 3.88292 1.76129 5.78690 4.71781 167 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 147 1.87440 4.51872 3.55539 2.99346 3.68907 3.68731 3.96454 3.03370 2.50136 2.12962 3.64108 3.41390 4.08345 3.26375 3.31526 2.69376 2.26696 2.40362 5.11754 3.87407 168 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 148 2.53180 5.24975 2.23904 2.45177 4.58908 2.62746 3.72506 4.06613 2.08959 3.55275 4.30032 2.99802 3.30314 2.82775 2.04755 2.73422 3.00152 3.63909 5.68969 4.28721 169 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 149 2.37750 4.96071 3.14218 2.58645 4.21488 3.56994 3.18097 3.63592 2.56003 3.23187 4.04164 3.10445 3.96457 2.92473 2.37708 1.73082 2.59081 3.30604 5.46590 3.40433 170 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 150 3.59706 4.84654 5.53883 4.97474 3.48491 4.98142 5.36682 1.19411 4.84210 1.31616 2.07686 5.12051 5.14257 4.86152 4.86360 4.35153 3.82194 2.03535 5.56774 4.52288 171 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 151 1.28531 4.50315 4.14642 3.91454 4.93370 3.28469 4.89181 4.35828 3.95993 4.06995 4.87359 3.86130 4.09474 4.20144 4.20377 0.86180 3.10677 3.68125 6.27700 5.11444 172 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 152 2.51785 4.64175 5.23132 4.74690 4.03205 4.70738 5.41890 1.68838 4.65444 2.60823 3.82891 4.88618 5.06311 4.91239 4.82976 4.10794 3.61680 0.71193 5.93844 4.72128 173 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 153 3.48532 4.74728 5.43272 4.87389 3.54983 4.86538 5.27720 1.86669 4.74105 1.33642 2.35474 5.00124 5.07225 4.81404 4.78622 4.22938 3.71692 1.19597 5.55642 4.46949 174 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.17974 4.62354 1.86631 0.61958 0.77255 0.48576 0.95510 154 2.93154 4.84026 3.28124 2.92674 3.36455 3.67656 3.90078 3.52164 2.96826 3.13381 4.05638 2.52952 2.73678 3.31092 3.34145 3.03072 3.20506 3.25140 4.89069 1.29357 175 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01731 4.46111 5.18345 0.61958 0.77255 0.74051 0.64793 155 4.18836 5.29750 5.22721 5.01472 1.16287 4.84392 3.78822 3.75866 4.79494 2.98033 4.31109 4.53456 5.13876 4.63581 4.70677 4.26806 4.40634 3.73138 1.11714 2.15224 176 w - - 2.68623 4.42230 2.77524 2.73128 3.46359 2.40518 3.72499 3.29359 2.67746 2.69360 4.24695 2.90351 2.73697 3.18151 2.89806 2.37871 2.77524 2.98523 4.58482 3.61508 0.25349 1.52187 5.18345 0.18557 1.77568 0.35417 1.20985 156 2.76499 5.24865 2.28926 2.44891 4.58462 3.52423 2.46434 4.06206 2.16953 3.54806 4.29475 2.99545 2.63627 2.82203 2.53107 2.39504 2.99655 3.63512 5.68453 4.28170 178 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 157 2.19506 5.14929 2.80631 2.47531 4.45888 2.48859 3.72669 3.91730 2.48050 3.02622 4.20689 2.81457 3.92453 2.64724 2.59121 2.05266 2.97621 3.52230 5.61195 4.22695 179 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 158 2.79810 5.26217 2.91687 2.08749 4.59305 2.27709 3.01289 4.06812 2.52574 3.56802 4.32538 2.55426 2.89079 2.86933 3.02088 2.07242 3.03595 3.64925 5.71808 4.31228 180 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 159 2.84233 5.33069 1.67057 2.44682 4.66300 3.52923 3.78506 4.14407 2.22532 3.63409 4.39265 3.00100 3.96910 2.49114 3.05660 2.02284 2.70117 3.71815 5.77717 4.36237 181 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 160 2.49251 4.99180 2.55193 2.55014 4.24559 3.55733 3.76054 3.67054 2.54792 2.57939 3.21806 2.62627 3.94965 2.48991 3.01745 2.76018 2.06932 3.33212 5.48502 4.13773 182 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 161 2.38953 5.21463 3.00268 2.19335 4.54341 3.52996 3.72355 4.01219 1.99915 3.51186 4.26592 3.00767 3.92870 2.09896 2.93484 2.42182 2.28570 3.59778 5.65907 4.26540 183 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 162 3.63450 4.85981 5.60664 5.07329 3.62599 5.09978 5.56658 1.48123 4.96180 0.96488 3.38280 5.23985 5.25477 5.02281 5.01754 4.49365 3.86928 1.60015 5.75459 4.68729 184 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 163 2.17729 5.14845 3.00887 1.97615 4.45578 3.04289 3.73671 3.91272 2.49775 3.44211 4.21013 2.59412 2.82636 2.85127 2.98333 2.36867 2.98541 3.52099 5.61611 3.19450 185 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 164 2.77536 5.28252 2.22474 1.95127 4.62523 3.52158 3.72364 4.10937 2.10526 3.58440 4.32645 2.98842 3.92767 2.14286 2.66857 2.73465 2.57955 3.67243 5.71263 4.30245 186 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 165 2.74419 5.05613 3.08034 2.03338 4.32991 3.54998 3.74389 3.76623 2.15555 2.44535 4.11714 3.05408 3.94115 2.68313 2.77018 2.38855 2.56297 2.82709 5.53289 4.17322 187 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 166 2.37459 3.26396 4.77366 4.17055 2.68590 4.06675 4.40639 1.53014 3.98059 1.70643 2.82149 4.20386 4.41289 4.11819 4.01757 3.38108 3.11057 2.30553 4.89654 3.72874 188 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.17974 4.62354 1.86631 0.61958 0.77255 0.48576 0.95510 167 2.70613 4.15777 4.25233 3.66273 3.24494 3.82621 4.13546 2.17129 3.52903 2.15010 2.31683 3.83886 4.19163 3.73575 3.68291 2.23630 2.93850 2.06002 4.77470 2.79435 189 v - - 2.68622 4.42229 2.77524 2.73127 3.46358 2.40517 3.72499 3.29358 2.67745 2.69359 4.24694 2.90351 2.73710 3.18151 2.89765 2.37891 2.77524 2.98523 4.58481 3.61507 0.11380 2.28327 5.18345 0.66319 0.72403 0.35417 1.20985 168 2.10720 5.27405 2.49105 2.44134 4.60878 3.52079 3.73782 4.08941 2.20247 3.57587 4.32427 2.59983 3.93445 1.92861 2.98366 2.40403 3.01799 3.66055 5.71439 4.30476 192 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 169 2.37695 3.32242 2.83347 2.60408 4.12639 3.57710 2.64218 3.53736 2.59516 3.15281 3.97329 2.36193 3.96663 2.94322 2.72657 2.78275 2.96870 2.72589 5.40927 3.14109 193 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 170 1.27986 4.36967 3.94346 3.39337 2.75999 3.72359 4.15631 2.88022 3.31791 2.61533 2.77941 3.68296 4.17048 3.58867 3.59634 2.49233 3.01206 2.66565 5.03820 3.81591 194 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 171 3.49778 6.10090 0.56666 2.48509 5.43102 3.59169 4.29084 5.08672 3.47469 4.55502 5.47664 2.46389 4.29350 3.48868 4.16293 3.34710 3.83741 4.60279 6.63564 5.05891 195 D - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 172 1.93887 4.60288 3.53963 3.03084 3.95399 2.20227 4.06477 3.26394 2.44744 3.00527 3.88219 3.43063 4.08296 3.32533 3.35586 2.89784 3.02895 1.70308 5.35006 4.09901 196 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 173 3.07449 4.51535 4.51977 3.94423 3.69666 4.23476 4.59281 1.83715 3.67949 2.51094 3.60769 4.19257 4.59152 4.05237 2.36315 3.55619 3.31957 1.05503 5.34241 4.13937 197 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04799 4.62354 3.29573 0.61958 0.77255 0.48576 0.95510 174 3.03701 4.45300 4.70007 4.17149 3.72159 4.21728 4.75483 1.29819 4.05409 2.54542 3.63332 4.33114 4.62287 4.29468 4.22975 2.21343 3.31063 1.36116 5.39322 4.18891 198 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01519 4.59073 5.31308 0.61958 0.77255 0.44966 1.01568 175 1.33523 4.42355 3.83468 3.28068 3.58341 3.76959 3.01626 2.39226 3.20171 2.63295 3.56564 3.62553 4.18100 3.50164 3.50822 3.05166 3.02846 2.22357 5.07013 3.84334 199 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 176 3.50489 2.83309 4.87991 4.43668 2.54030 4.43294 3.96950 3.35996 4.21880 2.91826 4.00197 4.31962 4.79518 4.32023 4.28177 3.78277 3.74612 3.20400 0.94496 1.99533 200 w - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 177 3.83897 5.47802 4.65239 4.66367 5.67788 0.15221 5.66813 5.52377 4.93680 5.04698 6.07077 4.82026 4.87970 5.20315 5.03141 4.04006 4.37073 4.90944 6.51516 5.82458 201 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 178 2.66314 4.60865 3.88936 3.80134 5.10568 0.65901 4.94574 4.63792 4.05124 4.29882 5.09406 3.84465 4.15059 4.26017 4.30452 1.78697 3.21171 3.87716 6.40741 5.24367 202 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 179 2.83429 5.35595 2.14961 1.69911 4.69136 2.81849 3.77238 4.18168 2.54691 3.65778 4.40726 2.66425 3.95863 2.87926 2.41692 2.36603 3.07271 3.74300 5.79054 4.36604 203 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 180 2.54133 5.28167 2.09648 1.80336 4.60794 3.52132 3.74816 4.08791 2.51200 3.57928 4.33136 2.99121 3.94087 2.43439 3.01042 2.29191 3.03011 3.66312 5.72272 3.17929 204 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 181 0.69933 4.47331 4.21110 3.90475 4.78831 3.29118 4.82725 4.17383 3.89389 3.89892 4.71317 3.85414 4.08366 4.14192 4.14304 2.10052 2.21791 3.56898 6.14966 4.99051 205 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 182 2.89568 4.30734 4.55207 3.97253 3.44870 4.06480 4.42737 1.42576 3.83283 1.84330 3.41917 4.12085 4.42730 4.03671 3.97013 2.66884 2.51446 1.93041 5.03054 3.84321 206 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 183 2.75556 5.25910 2.75452 2.20168 4.60306 3.51901 3.70914 4.08605 1.74443 3.56175 4.30151 2.42051 3.91661 2.54619 2.52979 2.49751 2.70294 3.64945 5.68986 4.28237 207 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 184 2.10160 4.35193 3.81904 3.24697 3.47569 3.76328 4.04116 2.42393 3.17786 2.21810 3.46385 2.86366 4.14186 3.45579 3.47583 2.58979 2.52549 2.61678 2.59679 3.73540 208 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 185 2.00056 4.55327 5.10376 4.56247 3.78919 4.60086 5.08363 1.20434 4.44620 2.06799 3.64165 4.70298 4.90909 4.65559 4.58129 3.95407 3.49799 1.45737 5.58502 4.39409 209 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 186 2.34580 4.59637 3.44495 2.88419 3.78417 2.90451 3.91860 2.63645 2.85095 2.84521 3.71761 3.33225 4.04933 3.17645 2.35272 2.20997 2.74793 2.22538 5.18431 3.92418 210 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 187 2.52460 5.19265 3.00395 1.99875 4.51311 2.51492 3.72277 3.97907 1.91833 3.48752 4.24452 3.00691 3.92484 2.56205 2.94894 2.50106 2.98490 2.92419 5.64277 4.25051 211 k - - 2.68624 4.42231 2.77526 2.73129 3.46360 2.40519 3.72501 3.29360 2.67747 2.69301 4.24544 2.90353 2.73746 3.18152 2.89807 2.37893 2.77526 2.98524 4.58483 3.61509 0.26824 1.46747 5.34589 0.15755 1.92574 0.48576 0.95510 188 2.75608 3.40876 3.11323 2.55197 4.29818 3.56623 2.62662 3.72809 2.21115 3.30050 4.09710 3.07736 2.67321 2.39701 2.68595 2.76854 2.98543 3.38115 5.51165 2.91621 213 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 189 2.11372 4.56867 3.50683 2.94653 3.74661 3.68006 3.94742 3.08655 2.19733 1.91121 3.68743 3.38091 4.07666 3.22354 3.26491 2.36563 2.98963 2.41294 5.16116 3.91058 214 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 190 2.18068 5.14501 3.10457 2.56219 4.50835 2.84921 3.77627 3.95364 1.77852 3.47902 4.25600 3.08514 2.25619 2.89459 2.61377 2.78932 3.03492 3.56148 5.64221 4.28399 215 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 191 2.49653 4.81604 3.22624 2.68036 4.05737 2.85225 3.39860 3.45939 2.67306 3.09642 3.93143 3.17716 2.20779 3.01526 3.11813 2.44449 2.54723 3.15966 5.37395 2.65247 216 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 192 2.74966 5.12507 3.03034 2.49034 4.42118 2.23641 2.63753 3.87320 2.49561 3.41123 4.18460 2.63033 3.93324 2.47841 2.97554 2.37871 2.57219 3.49098 5.59209 3.60121 217 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 193 2.38254 2.28941 3.94989 3.37362 2.76979 3.79265 4.08440 2.54799 2.31089 2.50464 3.41738 3.67510 4.17002 3.54956 3.54981 2.60856 2.97413 2.26443 4.91021 3.70437 218 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 194 2.77197 5.26707 2.19564 2.45404 4.61244 3.53076 2.97626 4.09159 2.17343 3.56708 4.31054 2.99937 3.03399 2.20221 2.23713 2.73428 3.00184 3.65854 5.69375 4.29231 219 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 195 2.75060 3.03304 2.64990 3.77788 3.28134 3.87968 4.19396 2.16362 3.63211 2.07609 2.68870 3.92123 4.24570 3.82538 3.76021 3.17496 2.98276 2.12657 2.67935 3.61935 220 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 196 3.56701 4.78145 5.59244 5.08528 3.82423 5.09840 5.66487 1.09113 4.99470 1.50098 3.57921 5.24176 5.28814 5.13828 5.09509 4.50417 3.81304 1.33882 5.92043 4.78965 221 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 197 2.73855 4.96788 2.35092 2.56318 4.21478 2.87805 3.76515 2.95805 1.98476 2.76340 3.12857 3.08620 3.95329 2.90905 3.02349 2.41727 2.96999 3.30375 5.46511 4.12335 222 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 198 4.54127 5.53684 5.45035 5.31863 0.84121 5.09982 2.47160 4.20098 5.10759 3.42109 4.73623 4.66032 5.36102 4.81527 4.94977 4.48928 4.73687 4.11843 1.95102 1.69147 223 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 199 3.37183 5.49263 2.12478 2.96685 5.35716 0.55089 4.60895 4.96844 3.74759 4.51370 5.41007 3.48498 4.40104 3.84398 4.28012 3.38504 3.79154 4.42847 6.48195 5.20402 224 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 200 1.93491 4.83414 3.26878 2.83564 4.36968 3.49852 2.36870 3.80727 2.86133 3.42440 4.24654 3.28467 1.60999 3.21259 3.28380 2.55716 3.07109 3.42335 5.65406 4.34206 225 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 201 3.65271 5.70155 4.23133 3.36285 5.31564 4.17543 3.95532 4.58373 0.72536 3.91222 4.80535 3.68871 4.50006 3.08132 1.59756 3.62342 3.75797 4.27386 5.85358 4.78407 226 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 202 2.76332 4.29268 4.04305 3.46316 3.40562 3.83760 4.12689 1.97080 2.25632 2.19040 3.40126 3.74234 4.20790 3.61798 3.59926 3.11332 2.51801 2.00532 4.90932 2.91138 227 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 203 2.65050 4.59972 3.91312 3.78172 5.06638 2.26851 4.90218 4.59132 3.97624 4.24930 5.04224 3.83118 4.13910 4.20444 4.24123 0.55663 3.19232 3.84785 6.36722 5.19552 228 S - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 204 3.62735 4.90003 5.50916 4.91933 1.32182 4.91253 5.16424 1.91186 4.76221 1.27804 2.44191 5.04333 5.06117 4.71783 4.74091 4.26530 3.83828 2.68951 5.33501 4.25482 229 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 205 1.83536 3.70564 3.53872 2.52946 3.67207 3.68837 3.94906 2.68612 2.93675 2.74041 2.94837 3.40035 4.07653 3.24840 3.31153 2.12080 2.72759 2.79593 5.10048 3.85575 230 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 206 2.89623 4.26492 4.77758 4.17707 2.57949 4.08009 4.39421 1.91780 3.98800 2.21621 2.61755 4.20978 4.42394 4.12202 4.02546 3.39419 3.12793 1.53915 4.86981 2.36551 231 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 207 3.38327 4.65878 5.35067 4.78822 2.30430 4.73566 5.13124 1.52723 4.64327 1.57241 3.37237 4.87901 4.97768 4.73417 4.68294 4.09134 3.61704 1.32156 5.45519 4.32168 232 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 208 3.14059 5.70633 1.36172 1.89477 5.03581 1.84425 4.01215 4.54931 2.95569 4.03035 4.83683 3.00857 4.11762 3.15707 3.52902 3.04647 2.76401 4.10467 6.18228 4.69557 233 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 209 2.58294 5.23732 2.79800 2.44496 4.57574 3.52010 3.29008 4.05431 1.97944 3.53808 4.28130 2.60240 2.65547 2.80792 2.23490 2.41488 2.98027 3.62472 5.67255 4.26933 234 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 210 2.31204 3.42617 2.66290 2.00812 4.32272 3.54359 3.74824 3.75921 2.52312 3.32536 3.41304 3.05303 2.53540 2.87677 2.99908 2.41076 2.97154 3.40072 5.53252 4.17165 235 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 211 1.39620 5.07815 2.54812 2.39256 4.36640 3.54909 3.79693 3.79490 2.42961 3.37171 4.16918 3.06854 3.97108 2.93293 3.06705 2.79171 2.78727 3.08063 5.58548 4.22397 236 a - - 2.68624 4.42263 2.77458 2.73062 3.46323 2.40551 3.72533 3.29392 2.67751 2.69299 4.24580 2.90385 2.73742 3.18185 2.89797 2.37858 2.77558 2.98557 4.58515 3.61541 0.38164 1.16318 5.34589 1.40608 0.28117 0.48576 0.95510 212 1.69427 5.21879 1.82326 2.50657 4.58114 3.52953 3.83456 4.03538 2.26514 3.57147 4.35162 3.04831 3.98898 2.96015 3.11980 2.81825 2.52505 3.63360 5.74772 4.35607 242 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 213 2.48948 4.20037 4.35211 3.76159 3.30037 3.88204 4.20055 1.74714 3.61837 1.68393 3.31305 3.91613 4.25083 3.81969 3.75654 2.78803 2.63297 2.41065 4.82407 2.81922 243 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 214 2.39132 5.24720 2.20760 2.18918 4.58469 3.51453 3.71124 4.06651 2.32603 3.54921 4.29111 2.57054 3.27224 2.81119 2.57866 2.71454 2.31056 3.63401 5.68388 4.27535 244 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 215 2.15698 5.26128 2.50330 1.99240 4.59508 3.51952 3.73256 4.07444 1.82155 3.56301 4.31122 2.99117 3.92997 2.83649 2.97740 2.55540 2.56877 3.64706 5.70302 4.29486 245 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 216 1.57624 4.59157 2.99473 2.95059 3.81570 3.66067 3.98291 3.08424 2.92793 2.46187 3.74651 3.38581 4.08099 3.24720 3.32139 2.91799 2.18128 2.41419 5.23177 3.97461 246 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 217 1.79705 4.18170 4.38069 3.78623 2.68920 3.87762 4.19258 2.28351 3.63827 2.00373 3.29453 3.92394 4.24438 3.82982 3.76246 2.62102 2.98014 2.10045 4.79880 3.06493 247 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 218 2.73905 5.19433 2.08721 1.98795 4.51682 3.51954 2.96495 3.50692 2.45431 3.48980 3.65660 2.99614 3.91343 2.81453 2.58245 2.53891 2.60280 3.57283 5.64055 4.24364 248 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 219 2.15698 5.11882 3.04580 2.22207 4.41715 2.40595 3.74383 3.86409 2.49513 2.81385 4.18279 2.60440 3.94178 2.86338 2.26246 2.75021 2.99055 3.48616 5.58913 4.21775 249 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 220 1.97863 4.37110 4.83947 4.25730 2.68915 4.24550 4.61317 1.96431 4.10118 1.91825 3.40362 4.34973 4.57894 4.26730 4.18545 3.56681 3.25152 1.37331 5.12259 3.94643 250 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 221 0.32439 4.76404 4.42781 4.32632 5.00302 3.55825 5.22424 4.26775 4.36850 4.10278 5.08579 4.22326 4.36812 4.63696 4.51479 3.12811 3.45865 3.76647 6.33165 5.25581 251 A - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 222 2.75410 5.18126 2.29047 2.46668 4.49498 2.88702 2.47310 3.95816 1.99623 3.47389 4.23472 3.00948 3.92714 2.83772 2.96390 2.73158 2.60179 2.87141 5.63566 4.24517 252 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 223 3.56101 6.25278 0.55736 2.08324 5.53663 3.60573 4.28931 5.14019 3.48199 4.59603 5.52804 3.06643 4.30615 3.48330 4.18949 3.38337 3.88710 4.67004 6.70541 5.12198 253 D - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 224 3.16705 4.53023 4.95187 4.43848 3.82910 4.42043 5.00284 0.97455 4.31565 2.56608 3.70634 4.56972 4.80548 4.55521 4.47097 2.79824 3.44093 1.40361 5.57654 4.36860 254 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 225 2.31653 1.85537 4.40791 3.82784 3.36569 3.86840 4.26839 1.95762 3.68356 2.42671 2.69088 3.95797 4.27068 3.88394 3.81841 2.63725 3.01690 2.39627 4.89541 3.70958 255 c - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 226 2.73702 3.11350 4.04850 3.46965 2.26748 3.80356 4.11383 2.72860 3.36906 2.47483 3.39049 3.73384 4.18492 3.61756 2.44376 2.58331 2.48209 1.98188 4.88397 3.68374 256 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 227 4.16388 5.28388 5.37822 5.14314 1.24610 4.92432 3.86026 3.81420 4.93132 1.94101 4.38739 4.61023 5.20361 4.72158 4.80589 4.29510 4.37248 3.72600 2.54753 1.18235 257 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 228 3.45578 6.20753 0.75419 1.94433 5.46463 3.56421 4.19528 5.04862 3.33671 4.48783 5.37604 2.28116 4.24213 3.37340 4.02888 3.28333 3.76556 4.57095 6.63419 5.02758 258 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 229 3.80222 5.65919 3.71902 3.55190 4.94434 4.09349 4.68917 4.77880 3.33365 4.18812 5.25816 3.99448 4.69492 0.34319 3.57325 3.84885 4.12952 4.47298 6.08233 4.87948 259 Q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 230 2.79471 5.23152 3.05825 2.21216 3.34667 3.56152 3.73045 4.02575 2.15005 3.52012 4.28008 2.78856 3.95349 1.72473 2.33222 2.76724 3.02106 3.61747 5.65890 4.28147 260 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 231 0.54353 4.49161 4.21967 4.03635 4.92876 3.28657 4.97069 4.32587 4.08247 4.07113 4.88988 3.91469 4.10909 4.31206 4.28598 2.05228 3.11963 3.66231 6.29256 5.14295 261 A - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 232 3.73658 0.18679 5.29447 5.23341 5.16744 4.14429 5.73685 4.53528 5.11119 4.36325 5.52364 5.06505 4.89035 5.42250 5.08084 4.00266 4.26284 4.20289 6.32586 5.43040 262 C - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 233 2.39068 4.25970 4.22522 3.64693 2.22071 3.85999 4.19556 2.65435 3.53098 1.85829 3.36676 3.85601 4.24374 3.75445 3.71885 1.98834 3.01196 2.14633 4.88397 3.68444 263 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 234 1.59490 4.50851 4.13302 3.91878 4.95264 3.28552 4.90495 4.37969 3.97530 4.09325 4.89778 3.86448 4.09870 4.21643 4.21537 0.69573 3.11403 3.69506 6.29529 5.13229 264 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 235 2.29601 4.54923 3.87977 3.51618 4.69285 3.33073 4.57054 4.11086 3.53513 3.78269 4.59285 3.67749 1.09077 3.82374 3.86742 2.14493 1.93482 3.55498 6.02148 4.80992 265 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 236 3.22433 5.47419 3.52791 2.91503 4.84810 3.87593 2.85175 4.28614 2.22899 3.71408 4.54738 3.36753 4.24749 1.18004 1.79749 3.19820 3.40403 3.93270 5.74175 4.49753 266 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 237 2.48948 3.46974 3.00962 3.19625 2.82336 3.75355 4.02261 2.85282 3.13486 2.57950 3.48191 2.67348 4.13073 3.41766 3.44741 3.01036 2.22028 2.04840 3.60676 3.74790 267 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 238 3.55626 4.77477 5.57623 5.06503 3.80722 5.07498 5.62855 1.34474 4.97076 1.40482 3.56644 5.21782 5.26854 5.11064 5.06719 4.47674 3.80150 1.16565 5.89086 4.76169 268 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 239 4.04899 5.22062 5.32161 5.01923 0.97639 4.89186 3.95728 3.53162 4.82231 1.75055 4.09791 4.62409 5.16076 4.67844 4.74708 4.25736 4.26028 3.52142 4.07050 1.48565 269 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 240 2.99213 4.35117 4.83866 4.25034 2.89107 4.19276 4.48730 2.07034 4.07511 1.93111 3.33141 4.30343 4.52561 4.21334 4.12878 3.51082 3.22470 1.25313 4.94504 2.39254 270 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 241 2.76466 5.18204 2.26966 1.65629 4.48711 3.52888 3.73923 2.90355 2.50187 3.47031 3.60229 2.57592 3.93437 2.85234 2.99070 2.55545 2.99796 3.55028 5.63920 4.24891 271 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.31064 4.62354 1.35788 0.61958 0.77255 0.48576 0.95510 242 2.20117 4.80498 3.11113 2.60257 4.28154 3.40529 3.79224 3.69864 1.89588 3.29250 4.09801 3.08299 3.88443 2.94247 2.98140 1.93924 2.35256 3.31881 5.50904 4.18614 272 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01970 4.33260 5.05495 0.61958 0.77255 0.88354 0.53327 243 2.36545 5.09523 1.42011 2.43570 4.68622 2.51682 3.90260 4.16409 2.80982 3.70457 4.50357 2.96682 3.92319 3.05494 3.33043 2.19469 3.10608 3.70276 5.88156 4.47286 273 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.25179 4.33260 1.56324 0.61958 0.77255 0.66746 0.71951 244 3.01747 5.34710 1.17453 2.38037 4.90928 1.70429 4.02508 4.45565 3.07918 3.98776 4.85199 2.94050 3.99419 3.21417 3.65288 2.96569 3.36262 3.98972 6.08184 4.66687 274 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02193 4.22668 4.94903 0.61958 0.77255 0.26852 1.44607 245 2.38807 5.16201 3.01934 2.13002 4.47237 2.42735 3.72024 3.93335 2.20410 2.90406 4.21373 3.01037 3.32785 2.46800 2.95289 2.72290 2.57429 3.53421 5.61692 4.22940 275 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 246 2.21243 4.67577 2.60666 2.78717 3.85547 3.64019 3.87184 2.38159 2.76847 2.47590 3.76996 2.51790 4.02782 3.09881 3.18850 2.57515 2.97349 2.54095 5.23206 3.95495 276 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 247 2.51864 5.18740 2.59344 2.19474 4.50769 2.91183 3.71054 3.31538 2.21679 3.48210 4.23484 2.79161 3.91331 2.63194 2.94448 2.55320 2.29055 3.11375 5.63525 4.23958 277 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 248 2.36369 4.21565 4.34891 3.75872 3.31093 3.89795 4.21310 1.96681 3.62089 1.81470 3.31732 3.92287 2.57769 3.82339 3.76562 3.19228 3.00466 2.10464 4.84151 2.87514 278 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 249 2.77152 5.28129 2.13581 2.17553 4.62432 3.51925 3.19477 4.10948 2.21059 3.58386 4.32477 2.43014 3.44750 2.82108 2.14808 2.73063 3.00390 3.67130 5.71175 4.30032 279 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 250 2.50905 5.01501 3.13496 1.39685 4.27199 3.58728 3.78477 3.26564 2.53971 2.77266 4.08331 3.10978 3.98195 2.92619 2.54286 2.80318 3.01121 3.33783 5.50680 4.16911 280 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 251 2.44578 4.35549 4.78325 4.19363 1.48673 4.18115 4.52351 2.15015 4.03058 2.19971 2.82443 4.28343 4.51608 4.18327 4.10680 3.49742 3.21761 1.79695 5.02378 3.85142 281 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 252 1.80014 4.55791 3.47707 2.91360 3.29686 3.10420 3.92161 2.85270 2.48360 2.59541 3.66040 3.35587 4.06083 3.19856 3.26916 2.19984 2.97030 2.57390 5.13112 3.87782 282 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 253 2.74703 5.24514 2.61343 1.99232 4.58424 3.51444 2.99136 4.06640 2.44543 2.92410 4.28805 2.52612 3.91174 2.18108 2.67239 2.49097 2.97862 3.63272 5.68042 4.27230 283 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 254 2.37053 3.43203 2.75279 2.17020 4.30466 3.54847 3.74544 3.73884 2.14931 2.74671 3.17394 3.05574 3.93955 2.87537 2.38371 2.74650 2.96924 3.38519 5.51860 4.16070 284 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 255 3.83250 5.11935 5.54001 5.04970 3.42196 5.07648 5.51281 2.47630 4.85040 0.48700 3.20585 5.25369 5.25493 4.90419 4.89347 4.51587 4.07993 2.25318 5.62552 4.56965 285 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09589 4.62354 2.50574 0.61958 0.77255 0.48576 0.95510 256 1.61644 4.73089 3.25389 2.37635 4.00393 2.78955 3.85123 3.02931 2.70887 3.04669 3.89010 3.19528 3.97634 3.04601 3.14427 2.38673 2.95562 2.80453 5.33921 4.04373 286 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01593 4.54358 5.26592 0.61958 0.77255 0.62441 0.76696 257 2.05773 5.20659 2.93656 2.00358 4.53514 2.80848 3.71056 4.00638 2.20593 3.50647 4.26200 2.97705 3.90859 2.30271 2.94341 2.39281 2.98313 3.59050 5.65524 4.25650 287 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01593 4.54358 5.26592 0.61958 0.77255 0.62441 0.76696 258 1.73918 5.19143 2.95904 2.14839 4.51452 3.51881 3.73032 3.97360 2.07037 3.48677 4.25509 3.00413 3.93123 2.46741 2.93048 2.37008 3.00820 3.57367 5.64478 4.26103 288 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01593 4.54358 5.26592 0.61958 0.77255 0.62441 0.76696 259 3.88048 5.11087 5.66647 5.08810 2.57179 5.20373 5.38398 2.53020 4.94867 0.57180 2.33876 5.30273 5.23072 4.82811 4.91794 4.58329 4.07738 2.82130 5.40976 4.36584 289 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01593 4.54358 5.26592 0.61958 0.77255 0.62441 0.76696 260 2.30450 5.32902 2.27245 1.73047 4.66064 3.49419 3.75148 4.14843 2.52964 3.62899 4.38277 2.20593 3.93576 2.86072 2.52854 2.76592 3.05458 3.71427 5.76547 4.34249 290 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01593 4.54358 5.26592 0.61958 0.77255 0.62441 0.76696 261 2.89209 5.18233 3.25419 2.65307 4.51269 3.65368 3.75597 3.92445 1.56508 2.74420 4.24505 2.54781 4.03091 2.87953 1.89952 2.88757 3.10355 3.16474 5.58880 4.28323 291 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01593 4.54358 5.26592 0.61958 0.77255 0.40791 1.09374 262 2.42708 4.86514 3.20171 2.64127 4.08113 3.59489 3.01002 2.85710 2.61030 3.11320 3.94273 3.14826 3.98292 2.52573 2.30578 2.44461 2.97751 3.18623 5.37877 2.54175 292 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 263 1.80509 4.82441 3.23415 2.68210 4.04989 3.60004 3.82719 3.44599 2.48735 2.32272 3.92197 3.17979 3.99703 2.37701 3.08591 2.54073 2.54639 3.15192 5.36373 4.05939 293 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 264 2.74499 5.22412 2.79316 2.08191 4.55857 3.52027 3.30437 4.03470 2.00665 3.52325 4.26838 2.99253 3.32622 2.80746 2.08517 2.71274 2.69900 2.99437 5.66165 4.26063 294 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 265 2.77583 4.50258 3.64823 3.06705 3.64459 3.74297 3.23209 1.88146 2.45533 2.46196 3.60366 3.46914 4.11911 3.29088 2.35469 2.99366 3.00404 2.23332 5.07576 3.84496 295 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 266 2.89279 4.27337 4.70832 4.11424 3.13842 4.04753 4.28714 2.21311 3.92694 1.51581 3.28077 4.14936 4.39491 4.06140 3.97379 3.35790 3.12310 2.11801 2.55442 2.26865 296 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 267 3.38258 5.48449 3.04347 2.16500 5.09848 3.74903 4.46565 4.60782 3.37299 4.17758 5.09367 3.48931 0.62918 3.68309 3.78278 3.39500 3.74055 4.19845 6.24258 4.97688 297 P - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 268 2.33626 5.12581 3.12281 2.55788 4.43748 3.57846 3.75579 3.87307 1.51205 3.41246 4.19659 2.82652 3.97102 2.87698 2.45603 2.78857 2.60344 3.00357 5.58881 4.23696 298 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 269 1.98327 4.61479 3.42567 2.87151 3.81803 2.73377 3.92003 3.19062 2.84363 2.17645 3.74710 3.32192 4.04456 2.68343 3.24594 2.28477 2.97739 2.50311 5.21158 3.94799 299 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 270 2.38716 3.89776 3.29791 2.26920 3.90731 3.62353 3.84466 3.29401 2.38329 2.64807 3.80916 3.22289 4.00961 2.74286 3.14823 2.65152 2.68380 2.28408 5.26418 3.08342 300 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 271 2.39298 4.82214 3.22239 2.66269 4.03046 3.59964 3.81064 2.83695 2.47699 2.28334 3.90264 2.91375 2.55138 2.59312 2.85081 2.81104 2.68456 3.13702 5.34655 4.03940 301 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 272 3.10329 5.58813 1.65189 2.47286 5.01745 3.53010 4.04499 4.53695 2.99039 4.02991 4.83750 2.03964 4.11864 3.19476 3.55300 1.35557 3.39942 4.07726 6.17925 4.70606 302 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 273 2.74123 4.73334 2.70926 2.38122 2.49733 2.91829 3.84523 2.32868 2.71797 2.68119 3.81997 3.21816 4.01027 2.60569 3.14970 2.84238 2.97298 3.03450 5.27394 3.98463 303 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 274 2.38616 5.15884 1.94398 2.48891 4.45749 2.50401 3.76294 3.91410 2.53655 3.45152 4.22790 3.02992 3.95019 2.20085 3.02192 2.76470 3.01571 3.52964 3.45459 4.24844 304 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 275 2.10423 5.46807 2.49840 1.36290 4.79034 3.53274 3.85001 4.28484 2.67212 3.76520 4.53233 2.46643 4.01398 2.49278 3.19368 2.87348 3.18348 3.84979 5.90596 4.46605 305 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 276 1.79275 5.21723 3.02468 2.33559 4.54819 3.54467 3.73246 4.01148 1.99984 3.51252 4.27157 2.55579 3.94311 2.83989 2.50452 2.39719 3.00985 3.60239 5.65925 4.27425 306 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 277 1.43080 4.62417 3.51380 3.00723 4.09428 3.51139 4.08470 3.47291 2.99926 3.15498 4.00711 2.69936 2.89514 3.31918 3.39868 2.46155 3.01024 2.11320 5.46163 4.19890 307 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 278 1.96019 5.14947 3.02831 1.99959 4.44857 3.54930 3.75037 3.89572 2.00527 2.61217 4.20966 2.59540 3.95120 2.86929 2.96219 2.76490 3.00892 3.51543 5.61109 4.23793 308 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 279 2.77674 4.28830 3.03647 3.52242 2.38831 3.85613 4.13797 1.50794 3.42788 2.45461 3.39246 3.78088 4.22710 3.66715 3.65137 3.13750 2.51877 2.49313 4.86942 3.19209 309 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 280 2.38596 4.79757 3.25192 2.69401 4.01482 3.60348 3.82982 2.43539 2.66486 3.05298 3.89384 3.18880 3.99774 2.54652 2.66148 2.01490 2.36467 3.11935 5.33927 4.03885 310 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 281 2.51695 5.11863 2.61130 2.48402 4.41391 3.53194 3.72536 3.86591 2.48286 2.53586 3.57467 2.60839 3.92435 2.47806 2.54080 2.25663 2.67243 3.48229 5.58253 4.20418 311 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 282 2.38803 5.14828 2.60603 2.47523 4.45426 3.53000 3.72029 3.91195 2.01912 2.85021 4.20009 3.01515 3.92243 2.58752 2.45219 2.72381 2.32622 3.17370 5.60457 4.22078 312 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 283 2.77240 4.93594 3.19664 2.22190 4.17245 3.60269 3.79146 2.94165 2.55427 3.18510 2.93831 3.14129 3.98975 2.72424 1.73779 2.81473 2.67523 3.26525 5.43409 4.11557 313 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 284 1.98262 5.17449 3.02377 2.20335 4.48984 2.90957 3.71806 3.95240 2.11779 3.12387 4.22460 3.01072 3.92266 2.46519 2.73963 2.72439 2.54558 3.54937 5.62444 4.23648 314 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 285 2.74435 5.04431 2.60030 1.66535 3.06682 3.54930 3.74953 3.74579 2.52811 3.31410 3.36389 3.05583 3.94314 2.49767 3.00322 2.75171 2.97597 3.39237 5.51897 3.17436 315 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.40699 4.62354 1.12537 0.61958 0.77255 0.48576 0.95510 286 1.99780 2.97262 3.88051 3.30528 3.28452 3.67741 3.19772 2.19622 3.20541 2.14103 3.28369 3.58799 4.05998 3.46723 3.45190 2.95725 2.85759 2.38504 4.78591 3.57964 316 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02168 4.23822 4.96057 0.61958 0.77255 0.96745 0.47812 287 2.68446 5.15098 2.38147 2.02999 4.48066 3.41313 3.62567 3.95188 1.99801 3.44458 4.20254 2.88568 3.82845 2.73395 2.50827 2.64832 2.44399 3.53455 5.58641 4.18855 317 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02168 4.23822 4.96057 0.61958 0.77255 0.96745 0.47812 288 3.33647 4.65950 4.98884 4.42000 3.20407 4.60134 4.93279 2.21011 4.27969 0.98437 2.20154 4.64719 4.80117 4.38023 4.38353 3.94699 3.56098 1.83535 5.25304 4.19235 318 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02168 4.23822 4.96057 0.61958 0.77255 0.96745 0.47812 289 2.39048 5.00069 2.38223 2.40783 4.29264 3.44110 3.63453 3.73033 2.07953 2.67140 4.06349 2.93920 3.83955 2.75796 2.37495 2.65668 2.89192 3.36214 5.46479 4.10337 319 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02168 4.23822 4.96057 0.61958 0.77255 0.59384 0.80342 290 2.29968 4.56702 3.36503 2.80665 3.66465 3.61294 3.18350 3.10596 2.74871 2.78481 2.86995 3.26070 3.99747 2.45194 3.13843 2.84725 2.93010 2.85881 5.07523 2.19007 320 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01785 4.43025 5.15260 0.61958 0.77255 0.33844 1.24786 291 2.18310 2.88039 4.00458 3.43134 3.42642 2.91843 4.11347 2.77232 3.34234 1.93490 2.75468 3.70619 4.17075 3.59483 3.58953 2.33021 2.64702 2.56494 4.91760 3.71548 321 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 292 3.18848 4.54623 4.97706 4.37722 1.86929 4.37995 4.67610 2.15788 4.20890 1.30882 2.06410 4.48170 4.65968 3.39217 4.25438 3.69845 3.41110 2.61358 5.07392 3.95232 322 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 293 2.31727 4.82184 2.70102 2.65942 2.53476 2.88044 3.81295 2.87326 2.32824 3.06970 3.90552 3.16244 3.98593 2.99260 3.09807 2.25216 2.97128 3.13864 5.35020 4.04153 323 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 294 2.19066 5.24162 2.31813 2.09385 4.56298 2.47419 3.74701 4.03526 2.51168 2.87843 4.29687 2.55591 3.93885 2.85633 3.00704 2.55619 3.01875 3.62112 5.69307 4.28995 324 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 295 2.76508 5.21158 2.69120 1.66354 4.52944 2.54183 3.73172 3.99666 2.08731 3.05575 4.26264 3.00352 3.93032 2.84005 2.97202 2.73736 2.99794 3.07410 5.66053 4.26413 325 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08733 4.62354 2.60628 0.61958 0.77255 0.48576 0.95510 296 2.35523 4.90961 2.76719 2.56111 3.15171 3.54732 3.75042 3.56198 2.25947 2.68492 3.98081 3.07966 3.93695 2.63495 2.37220 2.75116 2.94636 3.24071 5.41201 2.94773 326 k - - 2.68622 4.42229 2.77524 2.73127 3.46289 2.40517 3.72499 3.29358 2.67745 2.69359 4.24694 2.90351 2.73744 3.18151 2.89765 2.37891 2.77524 2.98523 4.58481 3.61507 0.10318 2.37606 5.27435 0.66315 0.72407 0.61117 0.78245 297 2.37082 5.29786 2.42641 2.27192 4.62665 2.10808 3.74711 4.10763 1.86057 3.59604 4.35257 2.97066 3.93554 2.65295 3.01167 2.76205 3.04339 3.68166 5.73769 4.32371 329 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01579 4.55200 5.27435 0.61958 0.77255 0.41464 1.08051 298 2.76277 4.30547 4.00551 3.43180 3.41001 3.82495 4.11254 2.34397 3.32926 2.49228 3.41717 3.71977 4.19952 2.68940 3.57591 2.74086 2.99626 1.40675 4.91032 2.94929 330 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 299 2.73985 4.20584 4.24185 3.20913 2.66999 3.84821 4.15090 2.16068 3.52475 2.39928 3.32073 3.84416 4.21704 3.28449 2.96809 3.13642 2.97184 1.93114 2.71885 2.86095 331 v - - 2.68586 4.42227 2.77522 2.73125 3.46356 2.40515 3.72497 3.29356 2.67743 2.69357 4.24692 2.90349 2.73742 3.18148 2.89803 2.37889 2.77522 2.98520 4.58479 3.61505 0.28280 2.38994 1.86631 0.29575 1.36247 0.48576 0.95510 300 2.68367 3.29719 3.15761 2.60283 4.04589 2.83215 3.00212 3.45075 2.16504 3.07735 3.90586 3.10435 3.92830 2.93305 3.02231 1.96970 2.92384 2.86225 5.34346 4.02987 333 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01731 4.46111 5.18345 0.61958 0.77255 0.35417 1.20985 301 2.74503 5.16950 2.46660 2.17000 4.47974 2.39619 3.72155 3.94226 2.20576 3.04564 4.22045 3.00758 3.92182 2.83114 2.95953 2.14856 2.97674 3.54154 3.83938 4.23370 334 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 302 2.73711 5.19476 2.79836 2.08435 3.31882 3.51860 2.96625 3.98915 2.01287 3.49071 4.24124 2.99484 3.42646 2.55608 2.94078 2.49667 2.56745 3.21653 5.64053 4.24303 335 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 303 2.51464 5.29186 2.21539 2.28702 4.62740 2.73913 2.78157 4.11257 2.35364 3.59334 4.33853 2.40872 3.93287 2.84034 2.99316 2.24108 3.02045 3.67806 5.72798 4.31272 336 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 304 2.39585 5.00834 3.09606 2.54832 4.28159 2.89372 3.76439 3.71090 2.54626 2.43932 4.08788 2.57268 3.27743 2.12462 3.01594 2.75814 2.53372 3.36354 5.51012 4.15920 337 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 305 2.27207 5.23885 2.36216 2.43806 4.57635 2.77856 2.99072 4.05692 2.19231 3.54073 4.28282 2.76143 3.91229 2.80774 2.42669 2.42120 2.97809 3.62569 5.67597 4.26935 338 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 306 3.62107 5.04406 4.61357 4.21069 2.52975 2.70867 3.92950 3.63263 4.04094 3.13366 4.22978 4.22475 4.81891 4.21620 4.18971 3.80121 3.86624 3.46326 1.03491 1.65303 339 w - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 307 2.74771 4.44690 3.66437 3.09413 3.58069 3.73406 3.99114 2.72310 3.02565 2.06898 2.86425 3.48802 4.11366 3.33631 2.39131 2.50518 2.00556 2.71062 5.03372 3.80467 340 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 308 3.54618 4.75195 5.59452 5.10808 3.98153 5.12636 5.77500 1.28329 5.03469 1.96420 3.72853 5.26892 5.33312 5.24113 5.17379 4.54462 3.79958 0.88333 6.07445 4.89399 341 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 309 2.35531 4.45352 4.87020 4.30460 3.59114 4.35008 4.76066 1.29982 4.16807 1.55800 3.49393 4.43826 4.68312 4.36050 4.28997 3.68029 2.93525 1.91659 5.29490 4.11745 342 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 310 2.73896 4.30718 3.92269 2.74989 2.82278 3.78951 4.06868 2.39202 3.26458 2.19710 3.41748 3.65657 4.16316 2.89761 2.83199 3.05722 2.97082 2.40749 2.72931 2.87476 343 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 311 2.75389 5.07999 2.31572 2.52369 4.38574 3.53934 3.76378 3.23768 2.53256 3.38306 4.16748 3.05499 3.94734 2.88944 2.54242 1.61766 2.67129 3.45436 5.57974 4.21339 344 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 312 2.74947 5.25280 2.27334 1.88865 4.59320 3.51345 3.16047 4.07700 2.19227 3.55581 3.51471 2.76475 2.91723 2.56664 2.94110 2.71187 2.98136 3.64108 5.68727 4.27720 345 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 313 2.42812 5.16972 2.69872 1.88203 4.48148 2.54440 3.72181 3.94421 2.47398 2.66218 4.22171 3.00725 3.42428 2.83126 2.68510 2.72327 2.77114 3.54279 5.62477 4.23470 346 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.26846 4.62354 1.48889 0.61958 0.77255 0.48576 0.95510 314 2.71269 5.11606 2.26129 2.39132 4.41904 2.57178 3.68393 3.87806 2.45880 3.40686 3.06405 2.70001 3.87080 2.10338 2.94703 2.69076 2.94939 3.48680 5.58112 4.19154 347 q - - 2.68609 4.42250 2.77470 2.73079 3.46379 2.40486 3.72519 3.29379 2.67734 2.69380 4.24715 2.90372 2.73731 3.18171 2.89826 2.37887 2.77544 2.98497 4.58502 3.61528 0.25122 1.53234 5.09633 1.53144 0.24363 0.31411 1.31095 315 2.26009 4.86009 3.18734 2.02309 4.08040 3.58669 3.80066 2.51454 2.62452 3.11163 3.94063 3.14198 3.09019 2.66182 3.07706 2.46489 2.97192 2.69569 5.38150 4.06464 356 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 316 2.74048 4.52757 2.84862 2.25409 2.77016 3.69306 3.93751 2.57903 2.91849 2.12239 3.62612 3.38639 4.07463 3.23129 3.29784 2.48287 2.97228 2.41659 5.10171 3.85426 357 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 317 2.10628 4.37011 2.95472 3.20973 3.11514 2.78221 4.02866 2.43652 3.14769 1.81757 3.47715 3.56685 4.13598 3.42884 3.45693 3.01726 2.97200 2.63122 4.96321 3.26764 358 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 318 2.74108 4.72371 3.29748 2.39496 3.04755 3.62563 3.84987 3.29196 2.72473 2.95604 2.97070 2.04297 2.63809 3.06054 3.15368 2.84606 2.97324 2.61361 5.26677 3.97924 359 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 319 2.80699 5.28469 2.97297 1.98172 4.62364 3.54426 2.71623 4.09734 2.17303 3.57985 4.33291 3.01474 3.95246 2.21658 2.92514 1.90807 3.03761 3.67355 5.71188 4.31548 360 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 320 2.93344 2.51015 4.65334 4.42140 4.84405 3.60128 5.16152 4.22454 4.29946 3.98890 4.93125 4.28134 0.49814 4.59841 4.44028 3.15975 3.45814 3.74605 6.16494 5.08948 361 P - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 321 3.16082 4.50413 5.00088 4.41116 2.59543 4.39006 4.73102 2.03124 4.24854 1.05607 3.25369 4.50461 4.68389 4.36097 4.30223 3.71515 2.66125 1.99945 5.15409 4.02140 362 l - - 2.68622 4.42229 2.77523 2.73127 3.46358 2.40517 3.72498 3.29358 2.67745 2.69359 4.24694 2.90351 2.73743 3.18099 2.89805 2.37891 2.77523 2.98522 4.58481 3.61434 0.17268 1.87193 5.34589 0.21226 1.65420 0.48576 0.95510 322 2.74620 4.92834 3.14726 2.59565 2.96995 3.20296 3.01854 3.57670 2.59001 3.18362 4.00168 2.30634 3.96857 2.56518 3.05045 2.20601 2.97778 3.25885 5.41023 2.80051 364 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 323 3.37737 5.48729 3.89140 3.15444 5.00944 4.00206 3.91888 4.32293 1.83034 3.74795 4.61245 3.53810 4.36098 3.04851 0.86985 3.37393 2.61740 3.99672 5.77890 4.63313 365 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 324 2.71982 3.06274 4.13138 3.56783 2.73007 3.74687 4.19700 2.77910 3.46736 2.54800 3.46716 3.78490 4.18872 3.70653 3.68694 2.16060 1.62801 2.23208 4.96432 3.76617 366 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 325 2.31022 4.57248 5.19922 4.66329 3.82236 4.67671 5.17569 1.35656 4.54811 1.95576 3.66225 4.79203 4.97165 4.75371 4.67321 4.03739 3.53685 1.17672 5.64698 4.45553 367 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 326 2.74440 4.65406 3.36984 2.55856 2.56164 3.65110 3.87667 3.20278 2.78763 2.58507 3.74633 2.35367 4.03642 2.78185 3.19984 2.87726 2.57721 2.94734 5.19289 2.48141 368 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 327 3.54917 4.77639 5.53394 5.02066 3.79398 5.04747 5.59023 1.75743 4.92065 1.43190 3.55876 5.18148 5.24895 5.06882 5.02519 4.44596 3.79503 0.90890 5.86978 4.73682 369 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 328 2.81219 3.29261 3.32352 2.74299 4.08882 3.65823 2.41698 3.47845 1.88034 3.10919 3.95274 3.22835 4.04085 3.01279 2.41118 2.88523 3.03678 2.28187 5.37442 4.08758 370 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 329 2.16281 5.22626 3.02092 2.20359 4.55863 3.53829 3.30003 4.02694 2.29688 3.52031 4.27329 3.01326 2.32184 2.35959 2.50812 2.73899 2.99794 3.61072 5.66107 4.27060 371 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 330 2.31797 4.30603 4.68564 4.10103 3.43165 4.12596 4.47850 1.89690 3.94628 2.14579 3.40556 4.20917 4.47485 4.13017 4.04851 3.43922 3.16239 1.25475 5.03007 2.86431 372 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 331 2.95137 5.48459 2.15972 2.09484 4.81179 3.53129 3.86559 4.30878 2.70036 3.78925 4.55866 2.12492 2.07433 2.98676 3.22820 2.09990 3.20176 3.87142 5.93111 4.48669 373 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 332 2.81969 5.31551 1.95717 2.44808 4.65341 3.53024 3.76054 4.13513 2.34743 3.61715 4.36926 2.40598 3.95550 2.86716 2.23373 2.01523 3.05547 3.70474 5.75199 4.34106 374 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 333 2.09655 4.32059 4.32859 3.74907 3.44983 3.99684 4.31969 1.72184 2.80838 1.84890 3.42258 3.97138 4.35748 3.86320 3.81754 3.29026 3.09852 1.90472 5.00790 3.81464 375 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.17974 4.62354 1.86631 0.61958 0.77255 0.48576 0.95510 334 2.70052 4.92094 2.40317 2.23861 2.67196 3.51198 3.72573 3.58308 2.37814 2.63175 3.99183 3.03677 3.91015 2.87373 2.99421 2.23756 2.93307 3.25499 5.41874 4.07676 376 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01731 4.46111 5.18345 0.61958 0.77255 0.35417 1.20985 335 2.64275 5.67408 1.45637 1.57644 4.98448 3.54302 3.95297 4.49812 2.84881 3.96624 4.75503 2.99521 4.08542 2.12598 3.40352 2.99467 3.34717 4.05160 6.10576 4.62826 377 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 336 2.07011 4.54381 5.04013 4.49660 3.77289 4.55418 5.03004 1.80604 4.38045 1.97976 3.63231 4.64699 4.87131 4.59441 4.52437 3.90337 3.47532 1.02672 5.55272 4.36134 378 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 337 2.15196 3.06540 4.56474 3.96555 3.28806 3.93975 4.27417 2.20024 3.79316 2.08967 2.67336 4.04080 4.30348 3.96162 3.87014 2.79435 3.01383 1.63184 4.82567 3.64410 379 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 338 2.77103 5.27792 2.57861 2.09763 4.62190 3.52182 3.71961 4.10577 2.18696 3.58002 4.32126 2.56252 2.69054 2.61892 2.07882 2.73085 3.00277 3.66847 5.70729 4.29818 380 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 339 2.74671 4.29896 3.96933 3.39156 2.61123 3.80411 4.07872 2.29169 3.29963 2.19068 3.40916 3.68661 4.17676 3.01108 2.80331 2.61479 2.97844 2.55816 4.88143 2.16421 381 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 340 3.55255 4.77393 5.56330 5.05036 3.79840 5.06345 5.61058 1.51184 4.95396 1.38571 3.55978 5.20412 5.25922 5.09388 5.05079 4.46337 3.79759 1.06284 5.87759 4.74871 382 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 341 2.74537 5.13792 3.03695 2.34140 4.43892 3.53463 2.83054 3.89303 2.47485 2.70349 4.19140 2.33230 3.92773 2.64872 2.68326 2.39720 2.26528 3.50488 5.59673 4.21706 383 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 342 2.77353 5.16408 3.02083 2.00587 4.47821 3.54214 3.74820 3.93090 1.92600 3.45884 4.23008 3.03459 2.30381 2.86383 2.96180 2.37789 3.00712 2.87307 5.62929 4.25079 384 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 343 2.27580 3.35131 2.69701 2.57241 4.19716 3.56585 3.32339 3.61760 2.56395 3.21585 4.02534 2.23572 3.95674 2.91646 2.60284 2.76945 2.97090 3.28997 2.89019 4.11537 385 n - - 2.68620 4.42227 2.77522 2.73125 3.46356 2.40515 3.72496 3.29356 2.67743 2.69325 4.24692 2.90349 2.73742 3.18148 2.89803 2.37889 2.77522 2.98520 4.58479 3.61505 0.27850 2.44760 1.85418 0.30570 1.33411 0.48576 0.95510 344 2.80144 4.98681 3.22403 2.63295 4.25900 3.60287 3.73991 2.89758 1.96283 3.23590 4.05819 3.12994 3.98249 2.63185 1.73056 2.83006 2.77217 2.99060 5.44584 4.14564 387 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.10380 4.45888 2.44162 0.61958 0.77255 0.74334 0.64536 345 2.73250 5.09113 2.32265 2.42123 4.48624 2.62317 3.76024 3.94753 2.57371 3.48472 4.26683 2.55494 3.12129 2.89014 3.06981 2.72060 1.84154 3.53972 5.66483 4.27441 388 t - - 2.68627 4.42234 2.77528 2.73132 3.46362 2.40521 3.72447 3.29363 2.67749 2.69363 4.24698 2.90355 2.73748 3.18155 2.89809 2.37895 2.77528 2.98497 4.58259 3.61380 1.02206 0.89538 1.46234 0.12171 2.16638 0.45125 1.01290 346 3.11920 4.51833 4.65760 4.10467 3.36909 4.30633 4.69353 1.85919 3.95721 1.06059 3.21610 4.33088 4.61884 4.17161 4.12456 3.64063 2.47533 2.17597 5.22925 4.09030 390 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01950 4.34277 5.06512 0.61958 0.77255 0.30258 1.34289 347 3.80222 5.65919 3.71902 3.55190 4.94434 4.09349 4.68917 4.77880 3.33365 4.18812 5.25816 3.99448 4.69492 0.34319 3.57325 3.84885 4.12952 4.47298 6.08233 4.87948 391 Q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 348 2.60048 4.53312 4.02525 3.75745 4.79331 3.32177 4.76272 4.19319 3.77207 3.91252 4.74019 3.80205 4.10310 4.05821 4.04126 1.43448 0.90217 3.60314 6.14472 4.95378 392 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 349 2.58458 2.29697 4.91027 4.33295 3.53333 4.26258 4.66321 1.68848 4.16968 2.42771 2.68063 4.39530 4.60487 4.34109 4.24132 3.59169 3.25095 1.37265 5.16944 3.98434 393 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 350 1.94166 4.50963 4.05872 3.85674 5.02006 0.86695 4.89330 4.48738 3.97615 4.15726 4.93534 3.83094 4.08446 4.19098 4.23645 1.73685 3.10431 3.74858 6.34152 5.18657 394 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09571 4.62354 2.50775 0.61958 0.77255 0.48576 0.95510 351 3.42796 4.70494 5.35485 4.78108 2.25970 4.75414 5.10230 1.45462 4.63319 1.22065 3.20229 4.89095 4.96121 4.67297 4.65307 4.10787 3.65358 1.87733 5.36724 4.26984 395 l - - 2.68589 4.42227 2.77521 2.73125 3.46356 2.40515 3.72496 3.29356 2.67743 2.69357 4.24692 2.90349 2.73742 3.18148 2.89803 2.37889 2.77521 2.98520 4.58479 3.61505 0.10202 2.38786 5.26610 0.30918 1.32445 0.62413 0.76728 352 1.86006 4.19538 4.16679 3.58131 2.94990 3.81561 4.11630 2.19180 3.46300 2.38110 2.83893 3.79282 4.18581 3.68486 3.64727 2.57965 2.94844 2.43911 4.80037 2.42276 397 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01592 4.54376 5.26610 0.61958 0.77255 0.62413 0.76728 353 2.45970 3.40136 3.65001 2.58326 3.55498 3.69810 3.97941 2.88233 3.03240 2.62397 2.86634 3.47226 2.14411 3.33043 3.37227 2.95331 2.94994 2.10566 5.01097 3.78228 398 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01592 4.54376 5.26610 0.61958 0.77255 0.40805 1.09347 354 2.48807 4.85573 2.66688 2.63448 3.12810 3.58876 3.79840 3.47563 2.41520 3.10372 3.93339 2.37464 3.34289 2.96978 3.07749 2.79768 2.97027 3.17512 2.72501 3.12399 399 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 355 2.39872 5.24545 2.91729 1.64440 4.61199 2.87036 3.78351 4.08786 2.55821 3.59027 4.34881 2.54700 3.27324 2.89567 3.05496 2.08309 3.04691 3.66229 5.74156 4.33652 400 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 356 2.38701 5.19147 3.01011 2.21964 4.51393 2.89786 3.16631 3.98205 2.28129 3.48689 4.24055 3.00173 3.91781 2.81951 2.54370 1.97828 2.54584 3.57042 5.63909 4.24502 401 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 357 2.57586 5.19343 3.02515 2.12756 4.51580 3.53259 3.71746 3.98067 2.20809 3.48591 3.20850 2.58748 3.92557 2.82370 2.09391 2.18478 2.98336 3.57225 5.63746 4.24855 402 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 358 2.37479 4.50218 2.86425 2.98361 2.74564 3.69971 3.94658 2.56400 2.70794 1.93281 3.60270 3.40753 4.08043 3.25350 2.78311 2.93908 2.64612 2.77796 5.07833 3.83584 403 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 359 2.49209 4.99408 2.64599 2.26060 3.17031 3.55618 3.75686 2.98078 1.97927 2.78409 4.06002 3.07311 2.95522 2.89515 3.01276 2.75664 2.96883 3.33442 5.48536 4.13707 404 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 360 2.75240 5.04697 3.07994 1.96022 4.31241 2.86740 3.75392 3.74851 2.52262 3.31759 3.40327 2.62207 3.94936 2.88546 2.60153 2.76054 2.98348 3.39621 5.52572 2.27533 405 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 361 3.13388 4.65064 4.33620 3.75334 1.85109 4.16225 4.26037 2.85531 3.45334 1.47978 3.44917 4.01744 4.49914 3.82231 1.83601 3.46343 3.35957 2.80033 4.88479 3.50296 406 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 362 1.70825 4.93565 1.88340 2.65641 4.29492 3.54120 3.89504 2.84829 2.72912 3.31717 4.14007 3.16062 4.00492 3.05624 3.19341 2.29525 3.04240 3.33577 5.57213 4.23798 407 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 363 2.41884 5.24334 2.55103 2.08903 4.58286 3.51531 3.70607 3.55056 2.31768 3.54548 4.28617 2.31604 3.91161 2.54761 2.19569 2.71031 2.97764 3.63114 5.67824 4.27101 408 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.31087 4.62354 1.35724 0.61958 0.77255 0.48576 0.95510 364 2.69748 5.02593 3.00172 2.17331 4.31876 3.48112 3.66070 3.75334 1.87125 3.29902 3.32342 2.97972 3.87434 2.50904 2.81205 2.69421 2.22708 3.38845 5.48379 4.13030 409 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01971 4.33238 5.05473 0.61958 0.77255 0.29900 1.35309 365 2.54545 4.63059 5.09685 4.50226 2.85911 4.51504 4.83045 2.12193 4.34379 0.90068 2.46831 4.62135 4.77114 4.41701 4.38724 3.84150 3.51482 2.54541 5.19442 4.10196 410 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 366 1.62045 4.31123 3.97992 3.40567 3.43708 3.80416 4.11328 2.45132 3.31999 2.11598 2.81193 3.70115 4.18716 3.57967 3.57859 2.57746 2.51306 2.53450 4.93405 3.72954 411 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 367 2.03577 4.91057 3.17176 2.17073 4.14296 3.59083 3.79940 3.54972 2.45040 2.00714 3.99029 3.13677 3.98460 2.96106 2.80762 2.43174 2.99223 3.23975 5.42192 4.10151 412 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 368 2.15252 4.92197 3.15670 2.59802 4.15722 2.90932 2.63404 3.57011 2.18172 2.68647 3.99591 3.11389 3.96657 2.93499 2.80088 2.60640 2.97381 2.70401 5.42809 4.09928 413 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 369 3.83897 5.47802 4.65239 4.66367 5.67788 0.15221 5.66813 5.52377 4.93680 5.04698 6.07077 4.82026 4.87970 5.20315 5.03141 4.04006 4.37073 4.90944 6.51516 5.82458 414 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 370 1.52607 4.54746 4.69743 4.32763 4.15720 3.87780 5.05306 2.46444 4.23773 2.90796 4.03463 4.32434 4.52537 4.49840 4.42019 3.32583 3.34476 0.90527 5.86068 4.66053 415 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 371 2.75257 5.23334 2.56827 1.91907 4.56403 3.51687 3.71599 4.04151 2.46212 3.53260 3.28866 2.54934 3.91743 2.45567 2.95446 2.08070 2.67936 3.61650 5.67426 4.26929 416 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 372 3.34525 5.18443 4.12767 3.43266 4.35384 4.05740 4.13322 2.56565 2.48109 3.20743 4.27464 3.76581 4.46062 3.33145 0.75484 3.46748 3.56278 3.39154 5.61510 4.40175 417 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 373 3.33375 3.01371 5.33834 4.80912 3.84111 4.76312 5.28672 0.95520 4.69025 2.05114 3.66847 4.90915 5.04277 4.88161 4.79073 4.13542 3.58307 1.46359 5.70465 4.51587 418 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 374 2.47561 2.63219 4.31923 3.74691 3.42369 3.84864 4.26941 2.41516 3.62390 2.48286 3.42203 3.91548 3.11029 3.84087 3.79502 3.16189 2.24469 1.51516 4.94796 3.75747 419 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 375 2.78238 5.28655 2.57063 1.90255 4.63057 3.52690 3.72634 4.11311 1.96813 3.58739 4.33078 2.99391 2.46923 2.56977 2.52155 2.74171 3.01403 3.67731 5.71438 4.30697 420 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 376 1.98530 4.36352 3.89905 3.34244 3.55685 3.72449 4.12861 2.85503 3.27118 1.96214 3.53992 3.65027 3.02393 3.54592 3.55943 2.36564 2.99586 1.85525 5.03753 3.82633 421 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 377 3.14926 5.15052 3.30933 3.22527 5.02712 0.55234 4.58673 4.63129 3.45831 4.19773 5.08988 3.63456 4.34962 2.71133 3.79060 3.24293 3.58657 4.11708 6.21892 4.97480 422 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 378 2.48393 4.72234 3.30381 2.11465 3.90736 3.62681 3.84640 3.29314 2.37181 2.54289 2.47127 3.22692 4.01256 3.05655 2.81062 2.84518 2.97132 2.71904 5.26400 3.14192 423 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 379 2.36230 4.46759 3.76291 3.22118 3.62108 3.76744 4.10152 2.52828 3.15087 2.63435 1.61910 2.27694 4.17730 3.46088 3.47232 3.04753 3.04135 2.65841 5.10835 3.88273 424 m - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 380 2.80920 5.27897 2.44631 2.45000 4.61306 2.83078 2.51966 4.09074 2.54321 3.58883 4.34641 1.92574 3.95310 2.88020 3.04248 2.38735 2.60569 3.66895 5.73791 4.32825 425 n - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 381 2.74378 4.83526 2.37606 2.65519 4.04402 3.59774 3.07125 2.36932 2.63848 2.31101 3.91462 3.15948 3.09011 2.98666 2.59731 2.81043 2.97507 3.15036 5.35699 4.04675 426 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 382 2.35217 4.49053 3.60679 3.04941 2.09442 2.49884 3.02418 3.00177 3.00815 2.70816 3.60180 3.45537 4.10748 3.31105 3.36517 2.51331 2.99157 2.77408 5.01629 2.94013 427 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 383 2.75736 5.22031 2.31129 2.18999 4.54790 3.52647 3.71812 4.01953 2.17216 3.51587 4.26717 3.00103 3.92383 2.82223 2.17902 2.72720 2.56894 3.60196 5.66063 2.72919 428 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 384 2.55135 4.79467 3.23645 2.25978 3.99928 3.60297 3.25090 2.80295 2.66832 3.03936 3.88031 3.17933 3.09177 3.00971 3.11063 1.97205 2.97148 2.37265 5.32795 4.02558 429 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.17268 4.62354 1.90532 0.61958 0.77255 0.48576 0.95510 385 3.56765 5.24308 4.35683 4.34594 5.40065 0.20879 5.38545 5.18745 4.60372 4.74506 5.75351 4.52427 4.64608 4.88170 4.73516 3.76206 4.09160 4.60048 6.29778 5.53597 430 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01719 4.46805 5.19039 0.61958 0.77255 0.73159 0.65613 386 2.71961 4.99338 2.99416 1.95886 4.26524 2.31768 3.73146 3.69923 2.51838 3.27626 4.07620 2.54309 3.91281 2.86977 2.98779 2.73135 2.50335 3.35042 3.32606 4.13683 431 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01719 4.46805 5.19039 0.61958 0.77255 0.35798 1.20093 387 2.00352 4.82890 3.27521 2.82436 4.38602 3.48667 2.83495 3.82000 2.85126 3.43250 4.24804 3.27429 1.59539 3.19596 3.28234 2.14785 3.05362 3.42767 5.66225 4.34918 432 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 388 3.98630 5.43059 4.56971 4.20295 2.64542 4.55879 0.73692 4.14015 3.80401 3.47908 4.66280 4.28877 4.95788 4.21317 3.96967 4.03875 4.22139 3.98553 2.02586 2.57656 433 h - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 389 4.00844 6.06180 0.26196 3.12835 5.59071 3.98081 4.84717 5.39726 4.10115 4.87468 5.92494 3.70371 4.68163 4.12447 4.67352 3.92342 4.37769 4.97000 6.57431 5.41386 434 D - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 390 1.77331 4.50656 4.07567 3.92743 5.04815 0.71604 4.95900 4.50898 4.07846 4.19526 4.97861 3.86338 4.09574 4.27783 4.31008 2.39614 3.11893 3.76059 6.37942 5.23719 435 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 391 2.93767 4.31971 4.69249 4.10687 3.42223 2.91428 4.48847 1.79301 3.95183 2.17707 1.99583 4.21797 4.48057 4.13188 4.05320 3.44744 3.17390 1.54058 5.03612 3.85780 436 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 392 2.76548 4.37407 3.84386 3.27193 2.72293 3.78984 3.03494 2.84969 3.19452 2.24497 3.48308 3.61005 4.16427 3.47423 2.44919 2.79805 2.99693 2.31661 4.89314 2.15119 437 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 393 1.81880 4.73013 3.33610 2.84209 2.98377 3.55749 3.97066 3.47268 2.85574 3.13355 3.98507 2.23087 2.04173 3.18467 3.27858 2.84358 3.02052 3.16406 5.41195 4.11181 438 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 394 4.02586 5.25035 5.75571 5.20318 3.32407 5.34699 5.60821 2.56332 5.00002 0.46677 2.34485 5.46456 5.36038 4.94188 4.99067 4.76787 4.22987 2.85329 5.59343 4.62204 439 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 395 2.74524 5.18092 2.62547 2.46270 4.49674 3.52552 2.99417 3.06858 2.19886 3.47295 4.23033 3.00539 3.92042 1.88250 2.94703 2.39780 2.69780 3.55596 5.63074 4.23935 440 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 396 2.83840 5.28522 2.47077 1.94741 4.59813 3.55448 3.77133 4.07413 2.50420 3.57331 4.34014 3.02922 3.97532 2.88474 1.56300 2.80374 3.07103 3.66616 5.71488 3.23430 441 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 397 3.79315 5.03577 5.68942 5.09552 2.00897 5.11384 5.36571 2.07706 4.94731 0.77581 2.40358 5.25679 5.18978 4.83484 4.89673 4.48122 3.99528 2.79019 5.43860 4.43569 442 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 398 2.46593 4.33829 4.16894 3.61759 3.56120 3.80928 4.28888 2.65548 3.52100 2.18100 3.54047 3.84652 4.25673 3.77377 3.75346 2.39794 2.49068 1.30517 5.08121 3.88143 443 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 399 2.81457 5.12654 3.15170 2.58139 3.20336 3.60148 2.95857 3.85345 2.16310 3.39595 4.18750 2.66143 3.98813 2.88564 1.62698 2.81375 2.78843 3.49288 5.57164 4.22839 444 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01469 4.62354 5.34589 0.61958 0.77255 0.48576 0.95510 400 2.35431 4.31281 4.15714 3.58116 2.63396 3.88571 4.08911 2.76815 3.46417 2.15837 3.42380 3.81065 4.25353 3.69929 2.41381 3.16781 3.04445 2.57404 2.27186 2.56054 445 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00991 4.61876 * 0.61958 0.77255 0.00000 * // hmmer-3.1b2/testsuite/i13-msa-integrity.pl0000775361611702660230000000761612473612615020063 0ustar wheelerteddy#! /usr/bin/perl # Look for any problems in hmmalign that corrupt the input sequences. # # Usage: ./i13-msa-integrity.pl # Example: ./i13-msa-integrity.pl .. .. tmpfoo # # SRE, Tue Mar 9 09:19:22 2010 [Janelia] # SVN $Id: i13-msa-integrity.pl 3522 2011-04-04 15:46:19Z eddys $ $builddir = shift; $srcdir = shift; $tmppfx = shift; # Verify that we have all the executables we need for the test. if (! -x "$builddir/src/hmmalign") { die "FAIL: didn't find hmmalign binary in $builddir/src"; } if (! -x "$builddir/src/hmmemit") { die "FAIL: didn't find hmmemit binary in $builddir/src"; } if (! -x "$builddir/src/hmmsearch") { die "FAIL: didn't find hmmsearch binary in $builddir/src"; } if (! -x "$builddir/easel/miniapps/esl-reformat") { die "FAIL: didn't find esl-reformat binary in $builddir/easel/miniapps"; } if (! -x "$builddir/easel/miniapps/esl-shuffle") { die "FAIL: didn't find esl-reformat binary in $builddir/easel/miniapps"; } # Verify that we have all the datafiles we need. if (! -e "$srcdir/testsuite/RRM_1.hmm") { die "FAIL: didn't find RRM_1.hmm in $srcdir/testsuite"; } $profile = "$srcdir/testsuite/RRM_1.hmm"; foreach $trial (1..5) { foreach $n (1, 10, 100) { # homologous sequence fragments: generated from local profile `$builddir/src/hmmemit -o $tmppfx.fa -N $n -L 0 -p --unilocal $profile`; if ($? != 0) { die "FAIL: hmmemit"; } &hmmalign_msa_integrity_check ("$tmppfx.fa", $profile); &hmmsearch_msa_integrity_check("$tmppfx.fa", $profile); # random sequences `$builddir/easel/miniapps/esl-shuffle -G -N $n -L 50 --amino -o $tmppfx.fa`; if ($? != 0) { die "FAIL: esl-shuffle"; } &hmmalign_msa_integrity_check ("$tmppfx.fa", $profile); &hmmsearch_msa_integrity_check("$tmppfx.fa", $profile); } } print "ok\n"; unlink "$tmppfx.sto"; unlink <$tmppfx.fa*>; unlink "$tmppfx.dtbl"; exit 0; sub hmmalign_msa_integrity_check { my ($fafile, $hmmfile) = @_; `$builddir/src/hmmalign -o $tmppfx.sto $hmmfile $fafile > /dev/null 2>&1`; if ($? != 0) { die "FAIL: hmmalign failed"; } `$builddir/easel/miniapps/esl-reformat -u fasta $tmppfx.sto > $tmppfx.fa1 2>/dev/null`; if ($? != 0) { die "FAIL: first esl-reformat failed"; } `$builddir/easel/miniapps/esl-reformat -u fasta $fafile > $tmppfx.fa2 2>/dev/null`; if ($? != 0) { die "FAIL: second esl-reformat failed"; } `diff -b $tmppfx.fa1 $tmppfx.fa2 > /dev/null 2>&1`; if ($? != 0) { die "FAIL: alignment corrupted\n"; } 0; } sub hmmsearch_msa_integrity_check { my ($fafile, $hmmfile) = @_; my $i; # need report = include threshold to have same hits in .sto, .domtbl `$builddir/src/hmmsearch -E 0.01 --domE 0.01 -A $tmppfx.sto --domtbl $tmppfx.dtbl $hmmfile $fafile > /dev/null 2>&1`; if ($? != 0) { die "FAIL: hmmsearch failed"; } $nlines = `cat $tmppfx.dtbl | grep -v "^#" | wc -l`; if ($nlines == 0) { return 0; } `$builddir/easel/miniapps/esl-sfetch --index $fafile > /dev/null 2>&1`; if ($? != 0) { die "FAIL: esl-sfetch --index failed"; } `cat $tmppfx.dtbl | grep -v "^#" | awk '{print \$1, \$18, \$19, \$1}' > $tmppfx.gdf`; if ($? != 0) { die "FAIL: gdf table"; } `$builddir/easel/miniapps/esl-sfetch -Cf $fafile $tmppfx.gdf > $tmppfx.fa3`; if ($? != 0) { die "FAIL: esl-sfetch failed"; } # Grep out name/desc lines because they'll differ: esl-sfetch adds descline. `$builddir/easel/miniapps/esl-reformat -u fasta $tmppfx.sto | grep -v "^>" > $tmppfx.fa1 2>/dev/null`; if ($? != 0) { die "FAIL: first esl-reformat failed"; } `$builddir/easel/miniapps/esl-reformat -u fasta $tmppfx.fa3 | grep -v "^>" > $tmppfx.fa2 2>/dev/null`; if ($? != 0) { die "FAIL: second esl-reformat failed"; } `diff -b $tmppfx.fa1 $tmppfx.fa2 > /dev/null 2>&1`; if ($? != 0) { die "FAIL: alignment corrupted"; } 0; } hmmer-3.1b2/testsuite/3box.sto0000664361611702660230000000177612473612614015737 0ustar wheelerteddy# STOCKHOLM 1.0 # 3' box element Onc120/U1 AAATGAAAA.GTTTGA..TTAG Onc121/U2 AAAGGATAAtGTTTGA..TTAT Onc123.1/U2 AAATGATAAtGTTTGA..TTAG Onc77.1/U2 AAAGGATAAtGTTTGA..TTAG Onc124/U3 AAAGGAATTaGTTTGA..TTAG Onc125/U4 AAATGAAAT.GTTTGA..TTAG Onc127/U5 AAATGAAATtGTTTGA..TTAG Onc151/U4atac AAATGAAAAtGTTTGTttTTAT Onc91/ClassII AAATGAACTaGTTTGA..TTAG Onc92/ClassII AAATGAACTcGTTTGA..TTAT Onc94/ClassII AAATGAAAT.GTTTGA..ATAA Onc95/ClassII AAATGAAATaGTTTGA..GTAG Onc96/ClassII AAATGAAAA.GTTTGAt.TTAG Onc155/ClassII AAATGAAAA.GTTTGA..TTAG Onc156/classII AAATGAAAT.GTATGA..GTAA Onc89/HACA AAGGGAAATtGTTTGA..TTAG Onc90/HACA AAATGAAAAcGTGTGA..TTAG Onc145/CD AAAGGAAATaGTTTGA..TTAG Onc146/CD AAATGAAATgGTTTGA..TTAG Onc147/HACA AAATGAAATgGTTTGA..GTAG Onc148/CD AAATGAAAAaATTTGA..TTAG Onc154/HACA AAAGGAATAtGTTTGA..TTAT #=GC RF xxxxxxxxx.xxxxxx..xxxx #=GC SS_cons ...................... // hmmer-3.1b2/easel/0000775361611702660230000000000012473613170013360 5ustar wheelerteddyhmmer-3.1b2/easel/esl_msa.h0000664361611702660230000002533612473612606015170 0ustar wheelerteddy/* Multiple sequence alignments */ #ifndef eslMSA_INCLUDED #define eslMSA_INCLUDED #include #include "esl_alphabet.h" /* digital alphabets */ #include "esl_keyhash.h" /* string hashes, for mapping uniq seq names */ #include "esl_ssi.h" /* indexes of large flatfiles on disk */ /* The following constants define the Pfam/Rfam cutoff set we propagate * from Stockholm format msa's into HMMER and Infernal models. */ /*::cexcerpt::msa_cutoffs::begin::*/ #define eslMSA_TC1 0 #define eslMSA_TC2 1 #define eslMSA_GA1 2 #define eslMSA_GA2 3 #define eslMSA_NC1 4 #define eslMSA_NC2 5 #define eslMSA_NCUTS 6 /*::cexcerpt::msa_cutoffs::end::*/ /* Object: ESL_MSA * * A multiple sequence alignment. */ typedef struct { /* Mandatory information associated with the alignment. * (The important stuff.) */ /*::cexcerpt::msa_mandatory::begin::*/ char **aseq; /* alignment itself, [0..nseq-1][0..alen-1], \0-terminated */ char **sqname; /* sequence names [0..nseq-1][], \0-terminated */ double *wgt; /* sequence weights [0..nseq-1], default 1.0 */ int64_t alen; /* length of alignment (columns); or (if growable) -1 */ int nseq; /* number of seqs in alignment; or (if growable) blocksize */ int flags; /* flags for what info has been set */ /*::cexcerpt::msa_mandatory::end::*/ #ifdef eslAUGMENT_ALPHABET /* When augmented w/ digital alphabets, we can store pre-digitized data in * ax[][], instead of the text info in aseq[][]. */ ESL_ALPHABET *abc; /* reference ptr to alphabet */ ESL_DSQ **ax; /* digitized aseqs [0..nseq-1][1..alen] */ #endif /* Optional information that we understand, and that we might have. * (The occasionally useful stuff.) */ /*::cexcerpt::msa_optional::begin::*/ char *name; /* name of alignment, or NULL */ char *desc; /* description of alignment, or NULL */ char *acc; /* accession of alignment, or NULL */ char *au; /* "author" information, or NULL */ char *ss_cons; /* consensus sec structure, or NULL; [0..alen-1], even in digital mode */ char *sa_cons; /* consensus surface access, or NULL; [0..alen-1], even in digital mode */ char *pp_cons; /* consensus posterior prob, or NULL; [0..alen-1], even in digital mode */ char *rf; /* reference coord system, or NULL; [0..alen-1], even in digital mode */ char *mm; /* model mask, or NULL; [0..alen-1], even in digital mode */ char **sqacc; /* accession numbers for sequences i */ char **sqdesc; /* description lines for sequences i */ char **ss; /* per-seq secondary structures, or NULL */ char **sa; /* per-seq surface accessibilities, or NULL */ char **pp; /* posterior prob per residue, or NULL */ float cutoff[eslMSA_NCUTS]; /* NC/TC/GA cutoffs propagated to Pfam/Rfam */ int cutset[eslMSA_NCUTS]; /* TRUE if a cutoff is set; else FALSE */ /*::cexcerpt::msa_optional::end::*/ /* Info needed for maintenance of the data structure * (internal stuff.) */ int sqalloc; /* # seqs currently allocated for */ int64_t *sqlen; /* individual seq lengths during parsing */ int64_t *sslen; /* individual ss lengths during parsing */ int64_t *salen; /* individual sa lengths during parsing */ int64_t *pplen; /* individual pp lengths during parsing */ int lastidx; /* last index we saw; use for guessing next */ /* Optional information, especially Stockholm markup. * (The stuff we don't understand, but we can regurgitate.) * * That is, we know what type of information it is, but it's * either (interpreted as) free-text comment, or it's Stockholm * markup with unfamiliar tags. */ char **comment; /* free text comments, or NULL */ int ncomment; /* number of comment lines */ int alloc_ncomment; /* number of comment lines alloc'ed */ char **gf_tag; /* markup tags for unparsed #=GF lines */ char **gf; /* annotations for unparsed #=GF lines */ int ngf; /* number of unparsed #=GF lines */ int alloc_ngf; /* number of gf lines alloc'ed */ char **gs_tag; /* markup tags for unparsed #=GS lines */ char ***gs; /* [0..ngs-1][0..nseq-1][free text] markup */ int ngs; /* number of #=GS tag types */ char **gc_tag; /* markup tags for unparsed #=GC lines */ char **gc; /* [0..ngc-1][0..alen-1] markup */ int ngc; /* number of #=GC tag types */ char **gr_tag; /* markup tags for unparsed #=GR lines */ char ***gr; /* [0..ngr-1][0..nseq-1][0..alen-1] markup */ int ngr; /* number of #=GR tag types */ /* Optional augmentation w/ keyhashes. * This can significantly speed up parsing of large alignments * with many (>1,000) sequences. */ #ifdef eslAUGMENT_KEYHASH ESL_KEYHASH *index; /* name ->seqidx hash table */ ESL_KEYHASH *gs_idx; /* hash of #=GS tag types */ ESL_KEYHASH *gc_idx; /* hash of #=GC tag types */ ESL_KEYHASH *gr_idx; /* hash of #=GR tag types */ #endif /*eslAUGMENT_KEYHASH*/ #ifdef eslAUGMENT_SSI off_t offset; /* disk offset to start of 1st line of this MSA's record */ #endif } ESL_MSA; /* Flags for msa->flags */ #define eslMSA_HASWGTS (1 << 0) /* 1 if wgts were set, 0 if default 1.0's */ #define eslMSA_DIGITAL (1 << 1) /* if ax[][] is used instead of aseq[][] */ /* Declarations of the API */ /* 1. The ESL_MSA object */ extern ESL_MSA *esl_msa_Create(int nseq, int64_t alen); extern int esl_msa_Expand(ESL_MSA *msa); extern int esl_msa_Copy (const ESL_MSA *msa, ESL_MSA *new); extern ESL_MSA *esl_msa_Clone(const ESL_MSA *msa); extern void esl_msa_Destroy(ESL_MSA *msa); /* 2. Digital mode MSA's (augmentation: alphabet) */ #ifdef eslAUGMENT_ALPHABET extern int esl_msa_GuessAlphabet(const ESL_MSA *msa, int *ret_type); extern ESL_MSA *esl_msa_CreateDigital(const ESL_ALPHABET *abc, int nseq, int64_t alen); extern int esl_msa_Digitize(const ESL_ALPHABET *abc, ESL_MSA *msa, char *errmsg); extern int esl_msa_Textize(ESL_MSA *msa); extern int esl_msa_ConvertDegen2X(ESL_MSA *msa); #endif /*eslAUGMENT_ALPHABET*/ /* 3. Setting or checking data fields in an ESL_MSA */ extern int esl_msa_SetName (ESL_MSA *msa, const char *s, esl_pos_t n); extern int esl_msa_SetDesc (ESL_MSA *msa, const char *s, esl_pos_t n); extern int esl_msa_SetAccession (ESL_MSA *msa, const char *s, esl_pos_t n); extern int esl_msa_SetAuthor (ESL_MSA *msa, const char *s, esl_pos_t n); extern int esl_msa_SetSeqName (ESL_MSA *msa, int idx, const char *s, esl_pos_t n); extern int esl_msa_SetSeqAccession (ESL_MSA *msa, int idx, const char *s, esl_pos_t n); extern int esl_msa_SetSeqDescription(ESL_MSA *msa, int idx, const char *s, esl_pos_t n); extern int esl_msa_SetDefaultWeights(ESL_MSA *msa); extern int esl_msa_FormatName (ESL_MSA *msa, const char *name, ...); extern int esl_msa_FormatDesc (ESL_MSA *msa, const char *desc, ...); extern int esl_msa_FormatAccession (ESL_MSA *msa, const char *acc, ...); extern int esl_msa_FormatAuthor (ESL_MSA *msa, const char *author, ...); extern int esl_msa_FormatSeqName (ESL_MSA *msa, int idx, const char *name, ...); extern int esl_msa_FormatSeqAccession (ESL_MSA *msa, int idx, const char *acc, ...); extern int esl_msa_FormatSeqDescription(ESL_MSA *msa, int idx, const char *desc, ...); extern int esl_msa_AddComment(ESL_MSA *msa, char *p, esl_pos_t n); extern int esl_msa_AddGF (ESL_MSA *msa, char *tag, esl_pos_t taglen, char *value, esl_pos_t vlen); extern int esl_msa_AddGS (ESL_MSA *msa, char *tag, esl_pos_t taglen, int sqidx, char *value, esl_pos_t vlen); extern int esl_msa_AppendGC (ESL_MSA *msa, char *tag, char *value); extern int esl_msa_AppendGR (ESL_MSA *msa, char *tag, int sqidx, char *value); extern int esl_msa_CheckUniqueNames(const ESL_MSA *msa); /* 4. Miscellaneous functions for manipulating MSAs */ extern int esl_msa_ReasonableRF(ESL_MSA *msa, double symfrac, int useconsseq, char *rfline); extern int esl_msa_MarkFragments(ESL_MSA *msa, double fragthresh); extern int esl_msa_SequenceSubset(const ESL_MSA *msa, const int *useme, ESL_MSA **ret_new); extern int esl_msa_ColumnSubset (ESL_MSA *msa, char *errbuf, const int *useme); extern int esl_msa_MinimGaps (ESL_MSA *msa, char *errbuf, const char *gaps, int consider_rf); extern int esl_msa_MinimGapsText(ESL_MSA *msa, char *errbuf, const char *gaps, int consider_rf, int fix_bps); extern int esl_msa_NoGaps (ESL_MSA *msa, char *errbuf, const char *gaps); extern int esl_msa_NoGapsText (ESL_MSA *msa, char *errbuf, const char *gaps, int fix_bps); extern int esl_msa_SymConvert(ESL_MSA *msa, const char *oldsyms, const char *newsyms); extern int esl_msa_Checksum(const ESL_MSA *msa, uint32_t *ret_checksum); extern int esl_msa_RemoveBrokenBasepairsFromSS(char *ss, char *errbuf, int len, const int *useme); extern int esl_msa_RemoveBrokenBasepairs(ESL_MSA *msa, char *errbuf, const int *useme); #ifdef eslAUGMENT_KEYHASH extern int esl_msa_Hash(ESL_MSA *msa); #endif /* 5. Debugging, testing, development */ extern int esl_msa_Validate(const ESL_MSA *msa, char *errmsg); extern ESL_MSA *esl_msa_CreateFromString(const char *s, int fmt); extern int esl_msa_Compare (ESL_MSA *a1, ESL_MSA *a2); extern int esl_msa_CompareMandatory(ESL_MSA *a1, ESL_MSA *a2); extern int esl_msa_CompareOptional (ESL_MSA *a1, ESL_MSA *a2); #endif /*eslMSA_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $URL$ * SVN $Id: esl_msa.h 913 2014-06-04 00:40:12Z wheelert $ *****************************************************************/ hmmer-3.1b2/easel/esl_stretchexp.c0000664361611702660230000005341712473612610016570 0ustar wheelerteddy/* Statistical routines for stretched exponential distributions. * * xref STL9/146 */ #include #include #include #include "easel.h" #include "esl_stats.h" #include "esl_vectorops.h" #include "esl_stretchexp.h" #ifdef eslAUGMENT_RANDOM #include "esl_random.h" #endif #ifdef eslAUGMENT_HISTOGRAM #include "esl_histogram.h" #endif #ifdef eslAUGMENT_MINIMIZER #include "esl_minimizer.h" #endif /**************************************************************************** * Routines for evaluating densities and distributions ****************************************************************************/ /* mu <= x < infinity * [x=mu is no problem, but watch out for evaluating log(0) when it is] * lambda > 0 * tau > 0 [fat tailed when tau < 1; thin when tau > 1; exponential when tau = 1] */ /* Function: esl_sxp_pdf() * * Purpose: Calculates the probability density function for the * stretched exponential pdf, $P(X=x)$, given * quantile , offset , and parameters and . */ double esl_sxp_pdf(double x, double mu, double lambda, double tau) { double y = lambda * (x-mu); double val; double gt; if (x < mu) return 0.; esl_stats_LogGamma(1/tau, >); if (x == mu) val = (lambda * tau / exp(gt)); else val = (lambda * tau / exp(gt)) * exp(- exp(tau * log(y))); return val; } /* Function: esl_sxp_logpdf() * * Purpose: Calculates the log probability density function for the * stretched exponential pdf, $\log P(X=x)$, given * quantile , offset , and parameters and . */ double esl_sxp_logpdf(double x, double mu, double lambda, double tau) { double y = lambda * (x-mu); double gt; double val; if (x < mu) return -eslINFINITY; esl_stats_LogGamma(1/tau, >); if (x == mu) val = log(lambda) + log(tau) - gt; else val = log(lambda) + log(tau) - gt - exp(tau*log(y)); return val; } /* Function: esl_sxp_cdf() * * Purpose: Calculates the cumulative distribution function for the * stretched exponential pdf, $P(X \leq x)$, given * quantile , offset , and parameters and . */ double esl_sxp_cdf(double x, double mu, double lambda, double tau) { double y = lambda * (x-mu); double val; if (x <= mu) return 0.; esl_stats_IncompleteGamma(1/tau, exp(tau * log(y)), &val, NULL); ESL_DASSERT1 (( !isnan(val))); return val; } /* Function: esl_sxp_logcdf() * * Purpose: Calculates the log of the cumulative distribution function for the * stretched exponential pdf, $\log P(X \leq x)$, given * quantile , offset , and parameters and . */ double esl_sxp_logcdf(double x, double mu, double lambda, double tau) { double y = lambda * (x-mu); double val; if (x <= mu) return -eslINFINITY; esl_stats_IncompleteGamma(1./tau, exp(tau * log(y)), &val, NULL); return log(val); } /* Function: esl_sxp_surv() * * Purpose: Calculates the survival function for the * stretched exponential pdf, $P(X > x)$, given * quantile , offset , and parameters and . */ double esl_sxp_surv(double x, double mu, double lambda, double tau) { double y = lambda * (x-mu); double val; if (x <= mu) return 1.0; esl_stats_IncompleteGamma(1./tau, exp(tau * log(y)), NULL, &val); return val; } /* Function: esl_sxp_logsurv() * * Purpose: Calculates the log survival function for the * stretched exponential pdf, $\log P(X > x)$, given * quantile , offset , and parameters and . */ double esl_sxp_logsurv(double x, double mu, double lambda, double tau) { double y = lambda * (x-mu); double val; if (x <= mu) return 0.0; esl_stats_IncompleteGamma(1./tau, exp(tau * log(y)), NULL, &val); return log(val); } /* Function: esl_sxp_invcdf() * * Purpose: Calculates the inverse CDF for a stretched exponential * with parameters , , and , returning * the quantile at which the CDF is

. * * The inverse CDF of the stretched exponential has no * analytical expression as far as I'm aware. The calculation * here is a computationally expensive, brute force bisection * search in using the CDF function. It will suffice for * a small number of calls (for plotting applications, for example), * but it is not sufficient for a large number of calls. */ double esl_sxp_invcdf(double p, double mu, double lambda, double tau) { double x1, x2, xm; /* low, high guesses at x */ double f1, f2, fm; double tol = 1e-6; x1 = mu; f1 = 0.; x2 = mu + 1.; do { /* bracket */ x2 = x2 + 2.*(x2-x1); f2 = esl_sxp_cdf(x2, mu, lambda, tau); } while (f2 < p); do { /* bisection */ xm = (x1+x2) / 2.; fm = esl_sxp_cdf(xm, mu, lambda, tau); if (fm > p) x2 = xm; else if (fm < p) x1 = xm; else return xm; /* unlikely case of fm==cdf */ } while ( (x2-x1)/(x1+x2-2*mu) > tol); xm = (x1+x2) / 2.; return xm; } /*-------------------- end densities & distributions ------------------------*/ /**************************************************************************** * Generic API routines: for general interface w/ histogram module ****************************************************************************/ /* Function: esl_sxp_generic_pdf() * * Purpose: Generic-API wrapper around , taking * a void ptr to a double array containing $\mu$, $\lambda$, * $\tau$ parameters. */ double esl_sxp_generic_pdf(double x, void *params) { double *p = (double *) params; return esl_sxp_pdf(x, p[0], p[1], p[2]); } /* Function: esl_sxp_generic_cdf() * * Purpose: Generic-API wrapper around , taking * a void ptr to a double array containing $\mu$, $\lambda$, * $\tau$ parameters. */ double esl_sxp_generic_cdf(double x, void *params) { double *p = (double *) params; return esl_sxp_cdf(x, p[0], p[1], p[2]); } /* Function: esl_sxp_generic_surv() * * Purpose: Generic-API wrapper around , taking * a void ptr to a double array containing $\mu$, $\lambda$, * $\tau$ parameters. */ double esl_sxp_generic_surv(double x, void *params) { double *p = (double *) params; return esl_sxp_surv(x, p[0], p[1], p[2]); } /* Function: esl_sxp_generic_invcdf() * * Purpose: Generic-API wrapper around , taking * a void ptr to a double array containing $\mu$, $\lambda$, * $\tau$ parameters. */ double esl_sxp_generic_invcdf(double p, void *params) { double *v = (double *) params; return esl_sxp_invcdf(p, v[0], v[1], v[2]); } /*------------------------ end generic API ---------------------------------*/ /**************************************************************************** * Routines for dumping plots for files ****************************************************************************/ /* Function: esl_sxp_Plot() * * Purpose: Plot some stretched exponential function (for instance, * ) for parameters , , and , for * a range of quantiles x from to in steps of ; * output to an open stream in xmgrace XY input format. * * Returns: on success. * * Throws: on any system write error, such as filled disk. */ int esl_sxp_Plot(FILE *fp, double mu, double lambda, double tau, double (*func)(double x, double mu, double lambda, double tau), double xmin, double xmax, double xstep) { double x; for (x = xmin; x <= xmax; x += xstep) if (fprintf(fp, "%f\t%g\n", x, (*func)(x, mu, lambda, tau)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "stretchexp plot write failed"); if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "stretchexp plot write failed"); return eslOK; } /*-------------------- end plot dumping routines ---------------------------*/ /**************************************************************************** * Routines for sampling (requires augmentation w/ random, dirichlet modules) ****************************************************************************/ #ifdef eslAUGMENT_RANDOM /* Function: esl_sxp_Sample() * * Purpose: Sample a stretched exponential random variate, * by a change of variable from a Gamma sample. */ double esl_sxp_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double tau) { double t,x; t = esl_rnd_Gamma(r, 1./tau); x = mu + 1./lambda * exp(1./tau * log(t)); return x; } #endif /*eslAUGMENT_RANDOM*/ /*--------------------------- end sampling ---------------------------------*/ /**************************************************************************** * Maximum likelihood fitting ****************************************************************************/ #ifdef eslAUGMENT_MINIMIZER /* This structure is used to sneak the data into minimizer's generic * (void *) API for all aux data */ struct sxp_data { double *x; int n; double mu; }; static double sxp_complete_func(double *p, int np, void *dptr) { struct sxp_data *data = (struct sxp_data *) dptr; double lambda, tau; double logL = 0.; int i; lambda = exp(p[0]); tau = exp(p[1]); for (i = 0; i < data->n; i++) logL += esl_sxp_logpdf(data->x[i], data->mu, lambda, tau); return -logL; } /* Function: esl_sxp_FitComplete() * * Purpose: Given a vector of observed data samples , * find maximum likelihood parameters by conjugate gradient * descent optimization. */ int esl_sxp_FitComplete(double *x, int n, double *ret_mu, double *ret_lambda, double *ret_tau) { struct sxp_data data; double p[2], u[2], wrk[8]; double mu, tau, lambda; double mean; double tol = 1e-6; double fx; int status; /* initial guesses; mu is definitely = minimum x, * and just use arbitrary #'s to init lambda, tau */ mu = esl_vec_DMin(x, n); esl_stats_DMean(x, n, &mean, NULL); lambda = 1 / (mean - mu); tau = 0.9; /* load data structure, param vector, and step vector */ data.x = x; data.n = n; data.mu = mu; p[0] = log(lambda); p[1] = log(tau); u[0] = 1.0; u[1] = 1.0; /* hand it off */ status = esl_min_ConjugateGradientDescent(p, u, 2, &sxp_complete_func, NULL, (void *) (&data), tol, wrk, &fx); *ret_mu = mu; *ret_lambda = exp(p[0]); *ret_tau = exp(p[1]); return eslOK; } #ifdef eslAUGMENT_HISTOGRAM struct sxp_binned_data { ESL_HISTOGRAM *g; /* contains the binned data */ double mu; /* mu is not a learnable param */ }; static double sxp_complete_binned_func(double *p, int np, void *dptr) { struct sxp_binned_data *data = (struct sxp_binned_data *) dptr; ESL_HISTOGRAM *g = data->g; double logL = 0.; double ai, bi; /* lower, upper bounds on bin */ double lambda, tau; int i; double tmp; lambda = exp(p[0]); tau = exp(p[1]); ESL_DASSERT1(( ! isnan(lambda) )); ESL_DASSERT1(( ! isnan(tau) )); for (i = g->cmin; i <= g->imax; i++) /* for each occupied bin */ { if (g->obs[i] == 0) continue; ai = esl_histogram_Bin2LBound(g, i); bi = esl_histogram_Bin2UBound(g, i); if (ai < data->mu) ai = data->mu; /* careful at leftmost bound */ tmp = esl_sxp_cdf(bi, data->mu, lambda, tau) - esl_sxp_cdf(ai, data->mu, lambda, tau); if (tmp == 0.) return eslINFINITY; logL += g->obs[i] * log(tmp); } return -logL; /* minimizing NLL */ } /* Function: esl_sxp_FitCompleteBinned() * * Purpose: Given a histogram with binned observations, where each * bin i holds some number of observed samples x with values from * lower bound l to upper bound u (that is, $l < x \leq u$); * find maximum likelihood parameters mu, lambda, tau by conjugate * gradient descent optimization. */ int esl_sxp_FitCompleteBinned(ESL_HISTOGRAM *g, double *ret_mu, double *ret_lambda, double *ret_tau) { struct sxp_binned_data data; double p[2], u[2], wrk[8]; double mu, tau, lambda; double tol = 1e-6; double fx; int status; double ai, mean; int i; /* Set the fixed mu. * Make a good initial guess of lambda, based on exponential fit. * Choose an arbitrary tau. */ if (g->is_tailfit) mu = g->phi; /* all x > mu in this case */ else if (g->is_rounded) mu = esl_histogram_Bin2LBound(g, g->imin); else mu = g->xmin; mean = 0.; for (i = g->cmin; i <= g->imax; i++) { ai = esl_histogram_Bin2LBound(g, i); ai += 0.5*g->w; /* midpoint in bin */ mean += (double)g->obs[i] * ai; } mean /= g->No; lambda = 1 / (mean - mu); tau = 0.9; /* load data structure, param vector, and step vector */ data.g = g; data.mu = mu; p[0] = log(lambda); p[1] = log(tau); u[0] = 1.0; u[1] = 1.0; /* hand it off */ status = esl_min_ConjugateGradientDescent(p, u, 2, &sxp_complete_binned_func, NULL, (void *) (&data), tol, wrk, &fx); *ret_mu = mu; *ret_lambda = exp(p[0]); *ret_tau = exp(p[1]); return eslOK; } #endif /*eslAUGMENT_HISTOGRAM*/ #endif /*eslAUGMENT_MINIMIZER*/ /**************************************************************************** * Example main() ****************************************************************************/ #ifdef eslSTRETCHEXP_EXAMPLE /*::cexcerpt::sxp_example::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslSTRETCHEXP_EXAMPLE\ -DeslAUGMENT_HISTOGRAM -DeslAUGMENT_RANDOM -DeslAUGMENT_MINIMIZER\ esl_stretchexp.c esl_histogram.c esl_random.c esl_minimizer.c esl_stats.c esl_vectorops.c easel.c -lm */ #include #include "easel.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_stretchexp.h" int main(int argc, char **argv) { double mu = -50.0; double lambda = 2.5; double tau = 0.7; ESL_HISTOGRAM *h = esl_histogram_CreateFull(mu, 100., 0.1); ESL_RANDOMNESS *r = esl_randomness_Create(0); int n = 10000; double *data; int ndata; double emu, elam, etau; int i; double x; for (i = 0; i < n; i++) { x = esl_sxp_Sample(r, mu, lambda, tau); esl_histogram_Add(h, x); } esl_histogram_GetData(h, &data, &ndata); /* Plot the empirical (sampled) and expected survivals */ esl_histogram_PlotSurvival(stdout, h); esl_sxp_Plot(stdout, mu, lambda, tau, &esl_sxp_surv, h->xmin, h->xmax, 0.1); /* ML fit to complete data, and plot fitted survival curve */ esl_sxp_FitComplete(data, ndata, &emu, &elam, &etau); esl_sxp_Plot(stdout, emu, elam, etau, &esl_sxp_surv, h->xmin, h->xmax, 0.1); /* ML fit to binned data, plot fitted survival curve */ esl_sxp_FitCompleteBinned(h, &emu, &elam, &etau); esl_sxp_Plot(stdout, emu, elam, etau, &esl_sxp_surv, h->xmin, h->xmax, 0.1); esl_randomness_Destroy(r); esl_histogram_Destroy(h); return 0; } /*::cexcerpt::sxp_example::end::*/ #endif /*eslSTRETCHEXP_EXAMPLE*/ /**************************************************************************** * Test driver ****************************************************************************/ #ifdef eslSTRETCHEXP_TESTDRIVE /* gcc -g -Wall -I. -L . -o stretchexp_utest -DeslSTRETCHEXP_TESTDRIVE esl_stretchexp.c -leasel -lm */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_stretchexp.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, {"-l", eslARG_REAL, "1.0", NULL,"x>0", NULL, NULL, NULL, "set lambda param to ", 0}, {"-m", eslARG_REAL, "10.0", NULL, NULL, NULL, NULL, NULL, "set mu param to ", 0}, {"-n", eslARG_INT, "10000", NULL,"n>0", NULL, NULL, NULL, "set number of samples to ", 0}, {"-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save plots to file ", 0}, {"-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0}, {"-t", eslARG_REAL, "0.7", NULL,"x>0", NULL, NULL, NULL, "set tau param to ", 0}, {"-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show verbose output", 0}, {"-w", eslARG_REAL, "0.1", NULL,"x>0", NULL, NULL, NULL, "set width of histogram bins to ",0}, {"--C", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "plot CDF", 0}, {"--LC",eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "plot log CDF", 0}, {"--P", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "plot PDF", 0}, {"--LP",eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "plot log PDF", 0}, {"--S", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "plot survival", 0}, {"--LS",eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "plot log survival", 0}, {"--XL",eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "set xmin for plot axis", 0}, {"--XH",eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "set xmax for plot axis", 0}, {"--XS",eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "set xstep for plot axis", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for random module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); double mu = esl_opt_GetReal(go, "-m"); double lambda = esl_opt_GetReal(go, "-l"); double tau = esl_opt_GetReal(go, "-t"); ESL_RANDOMNESS *r = esl_randomness_Create(esl_opt_GetInteger(go, "-s")); ESL_HISTOGRAM *h = esl_histogram_CreateFull(mu, 100., esl_opt_GetReal(go, "-w"));; int n = esl_opt_GetInteger(go, "-n"); int be_verbose = esl_opt_GetBoolean(go, "-v"); char *plotfile = esl_opt_GetString(go, "-o"); FILE *pfp = stdout; int plot_pdf = esl_opt_GetBoolean(go, "--P"); int plot_logpdf = esl_opt_GetBoolean(go, "--LP"); int plot_cdf = esl_opt_GetBoolean(go, "--C"); int plot_logcdf = esl_opt_GetBoolean(go, "--LC"); int plot_surv = esl_opt_GetBoolean(go, "--S"); int plot_logsurv = esl_opt_GetBoolean(go, "--LS"); double xmin = esl_opt_IsOn(go, "--XL") ? esl_opt_GetReal(go, "--XL") : mu; double xmax = esl_opt_IsOn(go, "--XH") ? esl_opt_GetReal(go, "--XH") : mu+40*(1./lambda); double xstep = esl_opt_IsOn(go, "--XS") ? esl_opt_GetReal(go, "--XS") : 0.1; double emu, elambda, etau; int i; double x; double *data; int ndata; if (be_verbose) printf("Parametric: mu = %f lambda = %f tau = %f\n", mu, lambda, tau); if (plotfile != NULL) { if ((pfp = fopen(plotfile, "w")) == NULL) ESL_EXCEPTION(eslFAIL, "Failed to open plotfile"); } for (i = 0; i < n; i++) { x = esl_sxp_Sample(r, mu, lambda, tau); esl_histogram_Add(h, x); } esl_histogram_GetData(h, &data, &ndata); esl_sxp_FitComplete(data, ndata, &emu, &elambda, &etau); if (be_verbose) printf("Complete data fit: mu = %f lambda = %f tau = %f\n", emu, elambda, etau); if (fabs( (emu-mu)/mu ) > 0.01) ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted mu > 1%\n"); if (fabs( (elambda-lambda)/lambda ) > 0.10) ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted lambda > 10%\n"); if (fabs( (etau-tau)/tau ) > 0.10) ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted tau > 10%\n"); esl_sxp_FitCompleteBinned(h, &emu, &elambda, &etau); if (be_verbose) printf("Binned data fit: mu = %f lambda = %f tau = %f\n", emu, elambda, etau); if (fabs( (emu-mu)/mu ) > 0.01) ESL_EXCEPTION(eslFAIL, "Error in (binned) fitted mu > 1%\n"); if (fabs( (elambda-lambda)/lambda ) > 0.10) ESL_EXCEPTION(eslFAIL, "Error in (binned) fitted lambda > 10%\n"); if (fabs( (etau-tau)/tau ) > 0.10) ESL_EXCEPTION(eslFAIL, "Error in (binned) fitted tau > 10%\n"); if (plot_pdf) esl_sxp_Plot(pfp, mu, lambda, tau, &esl_sxp_pdf, xmin, xmax, xstep); if (plot_logpdf) esl_sxp_Plot(pfp, mu, lambda, tau, &esl_sxp_logpdf, xmin, xmax, xstep); if (plot_cdf) esl_sxp_Plot(pfp, mu, lambda, tau, &esl_sxp_cdf, xmin, xmax, xstep); if (plot_logcdf) esl_sxp_Plot(pfp, mu, lambda, tau, &esl_sxp_logcdf, xmin, xmax, xstep); if (plot_surv) esl_sxp_Plot(pfp, mu, lambda, tau, &esl_sxp_surv, xmin, xmax, xstep); if (plot_logsurv) esl_sxp_Plot(pfp, mu, lambda, tau, &esl_sxp_logsurv, xmin, xmax, xstep); if (plotfile != NULL) fclose(pfp); esl_histogram_Destroy(h); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*eslSTRETCHEXP_TESTDRIVE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_stretchexp.c 727 2011-10-24 17:17:32Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_stretchexp.c $ *****************************************************************/ hmmer-3.1b2/easel/install-sh0000664361611702660230000002017412473612610015363 0ustar wheelerteddy#!/bin/sh # install - install a program, script, or datafile scriptversion=2003-09-24.23 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename= transform_arg= instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= usage="Usage: $0 [OPTION]... SRCFILE DSTFILE or: $0 -d DIR1 DIR2... In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default. In the second, create the directory path DIR. Options: -b=TRANSFORMBASENAME -c copy source (using $cpprog) instead of moving (using $mvprog). -d create directories instead of installing files. -g GROUP $chgrp installed files to GROUP. -m MODE $chmod installed files to MODE. -o USER $chown installed files to USER. -s strip installed files (using $stripprog). -t=TRANSFORM --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; -c) instcmd=$cpprog shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) if test -z "$src"; then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if test -z "$src"; then echo "$0: no input file specified." >&2 exit 1 fi # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then instcmd=: chmodcmd= else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst"; then echo "$0: no destination specified." >&2 exit 1 fi # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift test -d "$pathcomp" || $mkdirprog "$pathcomp" pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $instcmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else # If we're going to rename the final executable, determine the name now. if test -z "$transformarg"; then dstfile=`basename "$dst"` else dstfile=`basename "$dst" $transformbasename \ | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename. test -z "$dstfile" && dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name $doit $instcmd "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now remove or move aside any old file at destination location. We # try this two ways since rm can't unlink itself on some systems and # the destination file might be busy for other reasons. In this case, # the final cleanup might fail but the new file should still install # successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" fi && # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: hmmer-3.1b2/easel/esl_mpi.tex0000664361611702660230000000140212473612606015532 0ustar wheelerteddyThe \eslmod{mpi} module contains a small number of utilities useful for using an MPI (Message Passing Interface) library for parallelization. Table~\ref{tbl:mpi_api} lists the routines in the \eslmod{mpi} API. \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \hyperlink{func:esl_mpi_PackOpt()}{\ccode{esl\_mpi\_PackOpt()}} & Pack an optional, variable-sized array (or string).\\ \hyperlink{func:esl_mpi_PackOptSize()}{\ccode{esl\_mpi\_PackOptSize()}}& Determine the size of a packed optional, variable-sized array.\\ \hyperlink{func:esl_mpi_UnpackOpt()}{\ccode{esl\_mpi\_UnpackOpt()}} & Unpack an optional, variable-sized array (or string).\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{mpi} API.} \label{tbl:mpi_api} \end{table} hmmer-3.1b2/easel/esl_stats.h0000664361611702660230000000342112473612607015536 0ustar wheelerteddy/* Foundation, miscellenea for the statistics modules. */ #ifndef eslSTATS_INCLUDED #define eslSTATS_INCLUDED /* 1. Summary statistics calculations */ extern int esl_stats_DMean(const double *x, int n, double *opt_mean, double *opt_var); extern int esl_stats_FMean(const float *x, int n, double *opt_mean, double *opt_var); extern int esl_stats_IMean(const int *x, int n, double *opt_mean, double *opt_var); /* 2. Special functions */ extern int esl_stats_LogGamma(double x, double *ret_answer); extern int esl_stats_Psi(double x, double *ret_answer); extern int esl_stats_IncompleteGamma(double a, double x, double *ret_pax, double *ret_qax); /* 3. Standard statistical tests */ extern int esl_stats_GTest(int ca, int na, int cb, int nb, double *ret_G, double *ret_P); extern int esl_stats_ChiSquaredTest(int v, double x, double *ret_answer); /* 4. Data fitting */ extern int esl_stats_LinearRegression(const double *x, const double *y, const double *sigma, int n, double *opt_a, double *opt_b, double *opt_sigma_a, double *opt_sigma_b, double *opt_cov_ab, double *opt_cc, double *opt_Q); #endif /*eslSTATS_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_stats.h 771 2012-06-11 12:53:13Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_stats.h $ *****************************************************************/ hmmer-3.1b2/easel/esl_msacluster.h0000664361611702660230000000166512473612607016572 0ustar wheelerteddy/* Clustering sequences in an MSA by % identity. * */ #ifndef eslMSACLUSTER_INCLUDED #define eslMSACLUSTER_INCLUDED #include "esl_msa.h" extern int esl_msacluster_SingleLinkage(const ESL_MSA *msa, double maxid, int **opt_c, int **opt_nin, int *opt_nc); #endif /*eslMSACLUSTER_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msacluster.h 840 2012-12-20 18:16:14Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msacluster.h $ *****************************************************************/ hmmer-3.1b2/easel/esl_cluster.h0000664361611702660230000000201712473612606016060 0ustar wheelerteddy/* Generalized single linkage clustering. * * SRE, Mon Jan 7 09:40:06 2008 [Janelia] * SVN $Id: esl_cluster.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_cluster.h $ */ #ifndef eslCLUSTER_INCLUDED #define eslCLUSTER_INCLUDED extern int esl_cluster_SingleLinkage(void *base, size_t n, size_t size, int (*linkfunc)(const void *, const void *, const void *, int *), void *param, int *workspace, int *assignments, int *ret_C); #endif /*eslCLUSTER_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_paml.c0000664361611702660230000001431112473612607015324 0ustar wheelerteddy/* PAML interface. * * "Phylogenetic Analysis by Maximum Likelihood" * Ziheng Yang * http://abacus.gene.ucl.ac.uk/software/paml.html * [Yang97] * */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_vectorops.h" #include "esl_dmatrix.h" #include "esl_fileparser.h" #include "esl_paml.h" /* Function: esl_paml_ReadE() * Incept: SRE, Fri Jul 9 09:27:24 2004 [St. Louis] * * Purpose: Read an amino acid rate matrix in PAML format from stream * . Return it in two pieces: the symmetric E * exchangeability matrix in , and the stationary * probability vector $\pi$ in . * Caller provides the memory for both and . * is a $20 \times 20$ matrix allocated as * . is an array with * space for at least 20 doubles. * * The matrix is symmetric for off-diagonal elements: * $E_{ij} = E_{ij}$ for $i \neq j$. The on-diagonal * elements $E_{ii}$ are not valid and should not be * accessed. (They are set to zero.) * The rate matrix will later be obtained from * and as * $Q_{ij} = E_{ij} \pi_j$ for $i \neq j$ * and * $Q_{ii} = -\sum_{j \neq i} Q_{ij}$ * then scaled to units of one * substitution/site; see and * . * * Data file format: First 190 numbers are a * lower-triangular matrix E of amino acid * exchangeabilities $E_{ij}$. Next 20 numbers are the * amino acid frequencies $\pi_i$. Remainder of the * datafile is ignored. * * The alphabet order in the matrix and the frequency * vector is assumed to be "ARNDCQEGHILKMFPSTWYV" * (alphabetical by three-letter code), which appears to be * PAML's default order. This is transformed to Easel's * "ACDEFGHIKLMNPQRSTVWY" (alphabetical by one-letter code) * in the $E_{ij}$ and $\pi_i$ that are returned. * * Args: fp - open datafile for reading. * E - RETURN: E matrix of amino acid exchangeabilities e_ij, * symmetric (E_ij = E_ji), * in Easel amino acid alphabet order A..Y. * Caller provides appropriately allocated space. * pi - RETURN: \pi_i vector of amino acid frequencies, * in Easel amino acid alphabet order A..Y. * Caller provides appropriately allocated space. * * Returns: on success. * Returns on premature end of file (parse failed), in which * case the contents of and are undefined. * * Throws: on internal allocation failure, * and the contents of and are undefined. * * Xref: STL8/p.56. */ int esl_paml_ReadE(FILE *fp, ESL_DMATRIX *E, double *pi) { int status; ESL_FILEPARSER *efp = NULL; char *tok; int i,j; char *pamlorder = "ARNDCQEGHILKMFPSTWYV"; char *eslorder = "ACDEFGHIKLMNPQRSTVWY"; int perm[20]; if ((status = esl_dmatrix_SetZero(E)) != eslOK) goto ERROR; esl_vec_DSet(pi, 20, 0.); if ((efp = esl_fileparser_Create(fp)) == NULL) goto ERROR; if ((status = esl_fileparser_SetCommentChar(efp, '#')) != eslOK) goto ERROR; /* Construct the alphabet permutation we need. * perm[i] -> original row/column i goes to row/column perm[i] */ for (i = 0; i < 20; i++) perm[i] = (int) (strchr(eslorder, pamlorder[i]) - eslorder); /* Read the s_ij matrix data in, permuting as we go. */ for (i = 1; i < 20; i++) for (j = 0; j < i; j++) { if ((status = esl_fileparser_GetToken(efp, &tok, NULL)) != eslOK) goto ERROR; E->mx[perm[i]][perm[j]] = atof(tok); E->mx[perm[j]][perm[i]] = E->mx[perm[i]][perm[j]]; } /* Read the pi_i vector in, permuting as we read. */ for (i = 0; i < 20; i++) { if ((status = esl_fileparser_GetToken(efp, &tok, NULL)) != eslOK) goto ERROR; pi[perm[i]] = atof(tok); } esl_fileparser_Destroy(efp); return eslOK; ERROR: if (efp != NULL) esl_fileparser_Destroy(efp); return status; } /***************************************************************** * Utility: reformat a PAML file to a static vector *****************************************************************/ #ifdef eslPAML_UTILITY1 /* gcc -g -Wall -o utility -I. -L. -DeslPAML_UTILITY1 esl_paml.c -leasel -lm */ #include "easel.h" #include "esl_dmatrix.h" #include "esl_paml.h" int main(int argc, char **argv) { char *filename = argv[1]; FILE *fp = NULL; ESL_DMATRIX *E = NULL; double *pi = NULL; int i,j,n; E = esl_dmatrix_Create(20, 20); pi = malloc(20 * sizeof(double)); if ((fp = fopen(filename, "r")) == NULL) esl_fatal("open failed"); if (esl_paml_ReadE(fp, E, pi) != eslOK) esl_fatal("parse failed"); n = 1; for (i = 1; i < 20; i++) for (j = 0; j < i; j++) { printf("%8.6f, ", E->mx[i][j]); if (n++ == 10) { puts(""); n=1; } } puts(""); n = 1; for (i = 0; i < 20; i++) { printf("%8.6f, ", pi[i]); if (n++ == 10) { puts(""); n=1; } } fclose(fp); free(pi); esl_dmatrix_Destroy(E); return 0; } #endif /*eslPAML_UTILITY1*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_paml.c 685 2011-05-23 14:27:52Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_paml.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_tree.c0000664361611702660230000022127312473612610015333 0ustar wheelerteddy/* Phylogenetic trees. * * Contents: * 1. The ESL_TREE object. * 2. Newick format i/o * 3. Tree comparison algorithms. * 4. Clustering algorithms for distance-based tree construction. * 5. Generating simulated trees. * 6. Unit tests. * 7. Test driver. * 8. Examples. * 9. Copyright notice and license. */ #include "esl_config.h" #include #include #include #include #include "easel.h" #include "esl_tree.h" #include "esl_dmatrix.h" #include "esl_stack.h" #include "esl_vectorops.h" #include "esl_random.h" /***************************************************************** *# 1. The ESL_TREE object. *****************************************************************/ /* Function: esl_tree_Create() * * Purpose: Allocate an empty tree structure for taxa * and return a pointer to it. must be $\geq 2$. * * Args: - number of taxa * * Returns: pointer to the new object; caller frees * this with . * * Throws: if allocation fails. */ ESL_TREE * esl_tree_Create(int ntaxa) { ESL_TREE *T = NULL; int i; int status; /* Contract verification */ ESL_DASSERT1((ntaxa >= 2)); /* 1st allocation round */ ESL_ALLOC(T, sizeof(ESL_TREE)); T->parent = NULL; T->left = NULL; T->right = NULL; T->ld = NULL; T->rd = NULL; /* 2nd allocation round */ T->N = ntaxa; ESL_ALLOC(T->parent, sizeof(int) * (ntaxa-1)); ESL_ALLOC(T->left, sizeof(int) * (ntaxa-1)); ESL_ALLOC(T->right, sizeof(int) * (ntaxa-1)); ESL_ALLOC(T->ld, sizeof(double) * (ntaxa-1)); ESL_ALLOC(T->rd, sizeof(double) * (ntaxa-1)); for (i = 0; i < ntaxa-1; i++) { T->parent[i] = 0; T->left[i ] = 0; T->right[i] = 0; T->ld[i] = 0.; T->rd[i] = 0.; } /* Optional info starts NULL */ T->taxaparent = NULL; T->cladesize = NULL; T->taxonlabel = NULL; T->nodelabel = NULL; /* Additive trees are assumed by default, as opposed to linkage trees */ T->is_linkage_tree = FALSE; /* Tree output options default to PHYLIP style */ T->show_unrooted = FALSE; T->show_node_labels = TRUE; T->show_root_branchlength = FALSE; T->show_branchlengths = TRUE; T->show_quoted_labels = FALSE; T->show_numeric_taxonlabels = TRUE; T->nalloc = ntaxa; return T; ERROR: esl_tree_Destroy(T); return NULL; } /* Function: esl_tree_CreateGrowable() * * Purpose: Allocate a growable tree structure for an initial * allocation of taxa, and return a pointer to it. * must be $\geq 2$. * * Args: - initial allocation size for number of taxa * * Returns: pointer to a new growable object; caller frees * this with . * * Throws: if allocation fails. */ ESL_TREE * esl_tree_CreateGrowable(int nalloc) { ESL_TREE *T = esl_tree_Create(nalloc); if (T == NULL) return NULL; T->N = 0; return T; } /* Function: esl_tree_CreateFromString() * * Purpose: A convenience for making small test cases in the test * suites: given the contents of a Newick file as a * single string , convert it to an . * * Returns: a pointer to the new on success. * * Throws: if it fails to obtain, open, or read the * temporary file that it puts the string in. */ ESL_TREE * esl_tree_CreateFromString(char *s) { char tmpfile[16] = "esltmpXXXXXX"; FILE *fp = NULL; ESL_TREE *T = NULL; if (esl_tmpfile(tmpfile, &fp) != eslOK) goto ERROR; fputs(s, fp); rewind(fp); if (esl_tree_ReadNewick(fp, NULL, &T) != eslOK) goto ERROR; fclose(fp); return T; ERROR: if (fp != NULL) fclose(fp); if (T != NULL) esl_tree_Destroy(T); return NULL; } /* Function: esl_tree_Grow() * * Purpose: Given a tree , make sure it can hold one more taxon; * reallocate internally if necessary by doubling the * number of taxa it is currently allocated to hold. * * Returns: on success. * * Throws: on allocation failure. In this case, * the data in the tree are unaffected. */ int esl_tree_Grow(ESL_TREE *T) { void *tmp; int nnew; int status; int i; if (T->N < T->nalloc) return eslOK; /* do we have room for next taxon? */ nnew = T->nalloc * 2; /* There are N-1 interior nodes, so arrays of info for * interior nodes are allocated for (nnew-1), whereas * arrays of info for the N taxa are allocated (nnew). */ ESL_RALLOC(T->parent, tmp, sizeof(int) * (nnew-1)); ESL_RALLOC(T->left, tmp, sizeof(int) * (nnew-1)); ESL_RALLOC(T->right, tmp, sizeof(int) * (nnew-1)); ESL_RALLOC(T->ld, tmp, sizeof(double) * (nnew-1)); ESL_RALLOC(T->rd, tmp, sizeof(double) * (nnew-1)); /* 0..N-2 were already initialized or used. * Initialize newly alloced space N-1..nnew-2. */ for (i = T->nalloc-1; i < nnew-1; i++) { T->parent[i] = 0; T->left[i ] = 0; T->right[i] = 0; T->ld[i] = 0.; T->rd[i] = 0.; } if (T->taxaparent != NULL) { ESL_RALLOC(T->taxaparent, tmp, sizeof(int) * nnew); for (i = T->nalloc; i < nnew; i++) T->taxaparent[i] = 0; } if (T->cladesize != NULL) { ESL_RALLOC(T->cladesize, tmp, sizeof(int) * nnew); for (i = T->nalloc; i < nnew; i++) T->cladesize[i] = 0; } if (T->taxonlabel != NULL) { ESL_RALLOC(T->taxonlabel, tmp, sizeof(char *) * nnew); for (i = T->nalloc; i < nnew; i++) T->taxonlabel[i] = NULL; } if (T->nodelabel != NULL) { ESL_RALLOC(T->nodelabel, tmp, sizeof(char *) * (nnew-1)); for (i = T->nalloc-1; i < nnew-1; i++) T->nodelabel[i] = NULL; } T->nalloc = nnew; return eslOK; ERROR: return eslEMEM; } /* Function: esl_tree_SetTaxaParents() * * Purpose: Constructs the taxaparent[]> array in the tree * structure , by an O(N) traversal of the tree. * Upon return, taxaparent[i]> is the index * of the internal node that taxon is a child of. * * Args: T - the tree structure to map * * Returns: on success. * * Throws: on internal allocation error. In this case, the tree is * returned unchanged. * * Xref: STL11/63 */ int esl_tree_SetTaxaParents(ESL_TREE *T) { int i; int status; if (T->taxaparent != NULL) return eslOK; /* map already exists. */ ESL_ALLOC(T->taxaparent, sizeof(int) * T->N); for (i = 0; i < T->N-1; i++) /* traversal order doesn't matter */ { if (T->left[i] <= 0) T->taxaparent[-(T->left[i])] = i; if (T->right[i] <= 0) T->taxaparent[-(T->right[i])] = i; } return eslOK; ERROR: if (T->taxaparent != NULL) { free(T->taxaparent); T->taxaparent = NULL; } return status; } /* Function: esl_tree_SetCladesizes() * * Purpose: Constructs the cladesize[]> array in tree structure * . Upon successful return, cladesize[i]> is the * number of taxa contained by the clade rooted at node * in the tree. For example, cladesize[0]> is $N$ by * definition, because 0 is the root of the tree. * * Returns: on success. * * Throws: on allocation error; in this case, the * original is unmodified. */ int esl_tree_SetCladesizes(ESL_TREE *T) { int i; int status; if (T->cladesize != NULL) return eslOK; /* already set. */ ESL_ALLOC(T->cladesize, sizeof(int) * (T->N-1)); esl_vec_ISet(T->cladesize, T->N-1, 0); for (i = T->N-2; i >= 0; i--) { /* taxon: ...else... internal node: */ if (T->left[i] <= 0) T->cladesize[i]++; else T->cladesize[i] += T->cladesize[T->left[i]]; if (T->right[i] <= 0) T->cladesize[i]++; else T->cladesize[i] += T->cladesize[T->right[i]]; } return eslOK; ERROR: if (T->cladesize != NULL) { free(T->cladesize); T->cladesize = NULL; } return status; } /* Function: esl_tree_SetTaxonlabels() * * Purpose: Given an array of taxon names with the * same order and number as the taxa in tree , make a * copy of those names in . For example, might * be the sequence names in a multiple alignment, * sqname>. * * If the tree already had taxon names assigned to it, they * are replaced. * * As a special case, if the argument is passed as * , then the taxon labels are set to a string * corresponding to their internal index; that is, taxon 0 * is labeled "0". * * Returns: on success, and internal state of * (specifically, taxonlabel[]>) now contains a copy * of the taxa names. * * Throws: on allocation failure. taxonlabel[]> will be * (even if it was already set). */ int esl_tree_SetTaxonlabels(ESL_TREE *T, char **names) { int i; int status; if (T->taxonlabel != NULL) esl_Free2D((void **) T->taxonlabel, T->N); ESL_ALLOC(T->taxonlabel, sizeof(char **) * T->nalloc); for (i = 0; i < T->nalloc; i++) T->taxonlabel[i] = NULL; if (names != NULL) { for (i = 0; i < T->N; i++) if ((status = esl_strdup(names[i], -1, &(T->taxonlabel[i]))) != eslOK) goto ERROR; } else { for (i = 0; i < T->N; i++) { ESL_ALLOC(T->taxonlabel[i], sizeof(char) * 32); /* enough width for any conceivable int */ snprintf(T->taxonlabel[i], 32, "%d", i); } } return eslOK; ERROR: if (T->taxonlabel != NULL) esl_Free2D((void **) T->taxonlabel, T->nalloc); return status; } /* Function: esl_tree_RenumberNodes() * Synopsis: Assure nodes are numbered in preorder. * * Purpose: Given a tree whose internal nodes might be numbered in * any order, with the sole requirement that node 0 is the * root; renumber the internal nodes (if necessary) to be in Easel's * convention of preorder traversal. No other aspect of is * altered (including its allocation size). * * Returns: on success. * * Throws: on allocation failure. * * Xref: STL11/77 */ int esl_tree_RenumberNodes(ESL_TREE *T) { ESL_TREE *T2 = NULL; ESL_STACK *vs = NULL; int *map = NULL; int v,new; int status; int needs_rearranging = FALSE; /* Pass 1. Preorder traverse of T by its children links; * construct map[old] -> new. */ ESL_ALLOC(map, sizeof(int) * (T->N-1)); if (( vs = esl_stack_ICreate()) == NULL) { status = eslEMEM; goto ERROR; }; if (esl_stack_IPush(vs, 0) != eslOK) { status = eslEMEM; goto ERROR; }; new = 0; while (esl_stack_IPop(vs, &v) == eslOK) { if (v != new) needs_rearranging = TRUE; map[v] = new++; if (T->right[v] > 0 && esl_stack_IPush(vs, T->right[v]) != eslOK) { status = eslEMEM; goto ERROR; }; if (T->left[v] > 0 && esl_stack_IPush(vs, T->left[v]) != eslOK) { status = eslEMEM; goto ERROR; }; } if (! needs_rearranging) { status = eslOK; goto ERROR; } /* not an error; just cleaning up & returning eslOK. */ /* Pass 2. Construct the guts of correctly numbered new T2. * (traversal order doesn't matter here) */ if (( T2 = esl_tree_Create(T->nalloc)) == NULL) { status = eslEMEM; goto ERROR; }; if (T->nodelabel != NULL) { ESL_ALLOC(T2->nodelabel, sizeof(char *) * (T2->nalloc-1)); for (v = 0; v < T2->nalloc-1; v++) T2->nodelabel[v] = NULL; } if (T->taxaparent != NULL) { ESL_ALLOC(T2->taxaparent, sizeof(int) * (T2->nalloc)); for (v = 0; v < T2->nalloc; v++) T2->taxaparent[v] = 0; } for (v = 0; v < T->N-1; v++) { T2->parent[map[v]] = map[T->parent[v]]; if (T->left[v] > 0) T2->left[map[v]] = map[T->left[v]]; /* internal nodes renumbered... */ else T2->left[map[v]] = T->left[v]; /* ...taxon indices unchanged */ if (T->right[v] > 0) T2->right[map[v]] = map[T->right[v]]; else T2->right[map[v]] = T->right[v]; T2->ld[map[v]] = T->ld[v]; T2->rd[map[v]] = T->rd[v]; if (T->taxaparent != NULL) { if (T->left[v] <= 0) T2->taxaparent[-(T->left[v])] = map[v]; if (T->right[v] <= 0) T2->taxaparent[-(T->right[v])] = map[v]; } if (T->nodelabel != NULL) esl_strdup(T->nodelabel[v], -1, &(T2->nodelabel[map[v]])); } /* Finally, swap the new guts of T2 with the old guts of T; * destroy T2 and return. T is now renumbered. */ ESL_SWAP(T->parent, T2->parent, int *); ESL_SWAP(T->left, T2->left, int *); ESL_SWAP(T->right, T2->right, int *); ESL_SWAP(T->ld, T2->ld, double *); ESL_SWAP(T->rd, T2->rd, double *); ESL_SWAP(T->taxaparent, T2->taxaparent, int *); ESL_SWAP(T->nodelabel, T2->nodelabel, char **); free(map); esl_stack_Destroy(vs); esl_tree_Destroy(T2); return eslOK; ERROR: if (map != NULL) free(map); if (vs != NULL) esl_stack_Destroy(vs); if (T2 != NULL) esl_tree_Destroy(T2); return status; } /* Function: esl_tree_VerifyUltrametric() * * Purpose: Verify that tree is ultrametric. * * Returns: if so; if not. * * Throws: on an allocation failure. */ int esl_tree_VerifyUltrametric(ESL_TREE *T) { double *d = NULL; /* Distance from root for each OTU */ int status; int i, child, parent; /* First, calculate distance from root to each taxon. * (This chunk of code might be useful to put on its own someday.) */ ESL_ALLOC(d, sizeof(double) * T->N); if ((status = esl_tree_SetTaxaParents(T)) != eslOK) goto ERROR; for (i = 0; i < T->N; i++) { d[i] = 0.0; child = i; parent = T->taxaparent[i]; if (T->left[parent] == -i) d[i] += T->ld[parent]; else if (T->right[parent] == -i) d[i] += T->rd[parent]; else ESL_XEXCEPTION(eslEINCONCEIVABLE, "oops"); while (parent != 0) /* upwards to the root */ { child = parent; parent = T->parent[child]; if (T->left[parent] == child) d[i] += T->ld[parent]; else if (T->right[parent] == child) d[i] += T->rd[parent]; else ESL_XEXCEPTION(eslEINCONCEIVABLE, "oops"); } } /* In an ultrametric tree, all those distances must be equal. */ for (i = 1; i < T->N; i++) if ((status = esl_DCompare(d[0], d[i], 0.0001)) != eslOK) break; free(d); return status; ERROR: if (d != NULL) free(d); return status; } /* Function: esl_tree_Validate() * * Purpose: Validates the integrity of the data structure in . * Returns if the internal data in are * consistent and valid. Returns if not, * and if a non- message buffer has been * provided by the caller, an informative message is * left in describing the reason for the * failure. * * Args: T - tree structure to validate * errbuf - NULL, or a buffer of at least p7_ERRBUFSIZE * chars to contain an error message upon * any validation failure. */ int esl_tree_Validate(ESL_TREE *T, char *errbuf) { int N; int i, c; int shouldbe; int status; if (errbuf != NULL) *errbuf = 0; N = T->N; /* just to save writing T->N so many times below */ if (N < 2) ESL_XFAIL(eslFAIL, errbuf, "number of taxa is less than 2"); if (T->parent[0] != 0) ESL_XFAIL(eslFAIL, errbuf, "parent of root 0 should be set to 0"); if (T->nalloc < N) ESL_XFAIL(eslFAIL, errbuf, "number of taxa N is less than allocation"); /* Verify preorder tree numbering. */ for (i = 0; i < N-1; i++) { if (T->left[i] > 0 && T->left[i] < i) ESL_XFAIL(eslFAIL, errbuf, "l child of node %d not in preorder", i); if (T->right[i] > 0 && T->right[i] < i) ESL_XFAIL(eslFAIL, errbuf, "r child of node %d not in preorder", i); } /* Range checks on values. */ for (i = 0; i < N-1; i++) { if (T->parent[i] < 0 || T->parent[i] > N-2) ESL_XFAIL(eslFAIL, errbuf, "parent idx of node %d invalid", i); if (T->left[i] < -(N-1) || T->left[i] > N-2) ESL_XFAIL(eslFAIL, errbuf, "left child idx of node %d invalid", i); if (T->right[i] < -(N-1) || T->right[i] > N-2) ESL_XFAIL(eslFAIL, errbuf, "right child idx of node %d invalid", i); if (T->ld[i] < 0.) ESL_XFAIL(eslFAIL, errbuf, "negative l branch length at node %d", i); if (T->rd[i] < 0.) ESL_XFAIL(eslFAIL, errbuf, "negative r branch length at node %d", i); if (T->cladesize != NULL && (T->cladesize[i] < 0 || T->cladesize[i] > N)) ESL_XFAIL(eslFAIL, errbuf, "invalid cladesize at node %d", i); } for (c = 0; c < N; c++) if (T->taxaparent != NULL && (T->taxaparent[c] < 0 || T->taxaparent[c] > N-2)) ESL_XFAIL(eslFAIL, errbuf, "invalid taxaparent at node %d", c); /* more sophisticated integrity checks on parent-child relations in nodes ...*/ for (i = 1; i < T->N-1; i++) if (T->left[T->parent[i]] != i && T->right[T->parent[i]] != i) ESL_XFAIL(eslFAIL, errbuf, "parent/child link discrepancy at internal node %d\n", i); /* ...and between terminal nodes and taxa. */ if (T->taxaparent != NULL) for (c = 0; c < T->N; c++) if (T->left[T->taxaparent[c]] != -c && T->right[T->taxaparent[c]] != -c) ESL_XFAIL(eslFAIL, errbuf, "parent/child link discrepancy at taxon %d\n", c); /* check on cladesizes */ if (T->cladesize != NULL) for (i = 0; i < T->N-1; i++) { shouldbe = 0; if (T->left[i] > 0) shouldbe += T->cladesize[T->left[i]]; else shouldbe++; if (T->right[i] > 0) shouldbe += T->cladesize[T->right[i]]; else shouldbe++; if (shouldbe != T->cladesize[i]) ESL_XFAIL(eslFAIL, errbuf, "incorrect cladesize at node %d", i); } return eslOK; ERROR: return status; } /* Function: esl_tree_Destroy() * * Purpose: Frees an object. */ void esl_tree_Destroy(ESL_TREE *T) { if (T == NULL) return; if (T->parent != NULL) free(T->parent); if (T->left != NULL) free(T->left); if (T->right != NULL) free(T->right); if (T->ld != NULL) free(T->ld); if (T->rd != NULL) free(T->rd); if (T->taxaparent != NULL) free(T->taxaparent); if (T->cladesize != NULL) free(T->cladesize); if (T->taxonlabel != NULL) esl_Free2D((void **) T->taxonlabel, T->nalloc); if (T->nodelabel != NULL) esl_Free2D((void **) T->nodelabel, T->nalloc-1); free(T); return; } /*----------------- end, ESL_TREE object -----------------------*/ /***************************************************************** *# 2. Newick format i/o *****************************************************************/ /* newick_validate_unquoted(): * Returns if we can represent

onto a pointer stack . * * Returns: on success. * * Throws: on reallocation failure. * if a pthread call fails. In this case, the * state of a pthread mutex and/or cond may be wedged. */ int esl_stack_PPush(ESL_STACK *ps, void *p) { void *ptr = NULL; int status; #ifdef HAVE_PTHREAD if (ps->do_mutex) if (pthread_mutex_lock(ps->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure"); #endif if (ps->n == ps->nalloc) { ESL_RALLOC(ps->pdata, ptr, sizeof(void *) * ps->nalloc * 2); ps->nalloc += ps->nalloc; /* reallocate by doubling */ } ps->pdata[ps->n] = p; ps->n++; #ifdef HAVE_PTHREAD if (ps->do_cond) if (pthread_cond_signal(ps->cond) != 0) ESL_EXCEPTION(eslESYS, "pthread_cond_signal() failure"); if (ps->do_mutex) if (pthread_mutex_unlock(ps->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure"); #endif return eslOK; ERROR: #ifdef HAVE_PTHREAD if (ps->do_mutex) if (pthread_mutex_unlock(ps->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure"); #endif return status; } /* Function: esl_stack_IPop() * Synopsis: Pop an integer off a stack. * Incept: SRE, Sun Dec 26 09:19:12 2004 [Zaragoza] * * Purpose: Pops an integer off the integer stack , and returns * it through . * * Returns: on success. * if stack is empty. * * Throws: if a pthread mutex lock/unlock or conditional wait fails. */ int esl_stack_IPop(ESL_STACK *ns, int *ret_x) { int status; #ifdef HAVE_PTHREAD if (ns->do_mutex && pthread_mutex_lock(ns->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure"); if (ns->do_cond && ! ns->n && pthread_cond_wait(ns->cond, ns->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_cond_wait() failure"); #endif if (ns->n == 0) { *ret_x = 0; status = eslEOD; } else { ns->n--; *ret_x = ns->idata[ns->n]; status = eslOK; } #ifdef HAVE_PTHREAD if (ns->do_mutex && pthread_mutex_unlock(ns->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure"); #endif return status; } /* Function: esl_stack_CPop() * Synopsis: Pop a char off a stack. * Incept: SRE, Sun Dec 26 09:21:27 2004 [Zaragoza] * * Purpose: Pops a character off the character stack , and returns * it through . * * Returns: on success. * if stack is empty. * * Throws: if a pthread mutex lock/unlock or conditional wait fails. */ int esl_stack_CPop(ESL_STACK *cs, char *ret_c) { int status; #ifdef HAVE_PTHREAD if (cs->do_mutex && pthread_mutex_lock(cs->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure"); if (cs->do_cond && ! cs->n && pthread_cond_wait(cs->cond, cs->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_cond_wait() failure"); #endif if (cs->n == 0) { *ret_c = 0; status = eslEOD; } else { cs->n--; *ret_c = cs->cdata[cs->n]; status = eslOK; } #ifdef HAVE_PTHREAD if (cs->do_mutex && pthread_mutex_unlock(cs->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure"); #endif return status; } /* Function: esl_stack_PPop() * Synopsis: Pop a pointer off a stack. * Incept: SRE, Sun Dec 26 09:21:56 2004 [Zaragoza] * * Purpose: Pops a pointer off the pointer stack , and returns * it through . * * Returns: on success. * if stack is empty. * * Throws: if a pthread mutex lock/unlock or conditional wait fails. */ int esl_stack_PPop(ESL_STACK *ps, void **ret_p) { int status; #ifdef HAVE_PTHREAD if (ps->do_mutex && pthread_mutex_lock(ps->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure"); if (ps->do_cond && ! ps->n && pthread_cond_wait(ps->cond, ps->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_cond_wait() failure"); #endif if (ps->n == 0) { *ret_p = NULL; status = eslEOD; } else { ps->n--; *ret_p = ps->pdata[ps->n]; status = eslOK; } #ifdef HAVE_PTHREAD if (ps->do_mutex && pthread_mutex_unlock(ps->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure"); #endif return status; } /* Function: esl_stack_ObjectCount() * Synopsis: Return the number of objects in a stack. * Incept: SRE, Sun Dec 26 09:22:41 2004 [Zaragoza] * * Purpose: Returns the number of data objects stored in the * stack . The stack may be of any datatype. */ int esl_stack_ObjectCount(ESL_STACK *s) { return s->n; } /* Function: esl_stack_Convert2String() * Synopsis: Convert a char stack to a string. * Incept: SRE, Sun Dec 26 09:23:36 2004 [Zaragoza] * * Purpose: Converts a character stack to a NUL-terminated * string, and returns a pointer to the string. The * characters in the string are in the same order they * were pushed onto the stack. The stack is destroyed by * this operation, as if had been * called on it. The caller becomes responsible for * free'ing the returned string. * * Because the stack is destroyed by this call, use care in * a multithreaded context. You don't want to have another * thread waiting to do something to this stack as another * thread is destroying it. Treat this call like * you'd treat . Its internals are * not mutex-protected (unlike push/pop functions). * * Returns: Pointer to the string; caller must this. * * Throws: NULL if a reallocation fails. */ char * esl_stack_Convert2String(ESL_STACK *cs) { char *s = NULL; void *tmp = NULL; int status; /* Take stack away; it's already a string, just not nul-terminated */ s = cs->cdata; cs->cdata = NULL; /* esl_stack_Destroy() will now ignore the NULL cdata field */ /* NUL-terminate; which might require a +1 realloc if we're unlucky */ if (cs->n == cs->nalloc) ESL_RALLOC(s, tmp, sizeof(char) * (cs->nalloc +1)); s[cs->n] = '\0'; /* Destroy the stack; return the string. */ esl_stack_Destroy(cs); return s; ERROR: esl_stack_Destroy(cs); return NULL; } /* Function: esl_stack_DiscardTopN() * Synopsis: Discard the top elements on a stack. * Incept: SRE, Tue Dec 28 04:33:06 2004 [St. Louis] * * Purpose: Throw away the top elements on stack . * Equivalent to calls to a function. * If equals or exceeds the number of elements * currently in the stack, the stack is emptied * as if had been called. * * Returns: on success. * * Throws: if mutex lock/unlock fails, if pthreaded. */ int esl_stack_DiscardTopN(ESL_STACK *s, int n) { #ifdef HAVE_PTHREAD if (s->do_mutex && pthread_mutex_lock(s->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure"); #endif if (n <= s->n) s->n -= n; else s->n = 0; #ifdef HAVE_PTHREAD if (s->do_mutex && pthread_mutex_unlock(s->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure"); #endif return eslOK; } /* Function: esl_stack_DiscardSelected() * Synopsis: Remove arbitrary elements from a stack. * Incept: SRE, Tue Jan 18 09:57:47 2011 [Janelia] * * Purpose: For each element in the stack, call \verb+(*discard_func)(&element, param)+. * If , discard the element. * * Passing a pointer to an arbitrary <(*discard_func)> * allows arbitrary rules. The <(*discard_func)> gets two * arguments: a pointer (which is either a pointer to an * element for int and char stacks, or an actual pointer * element from a pointer stack), and , a * to whatever arguments the caller needs the selection * function to have. * * When discarding elements from a pointer stack, the * <*discard_func()> will generally assume responsibility * for the memory allocated to those elements. It may want * to free() or Destroy() them, for example, if they're * truly being discarded. * * Args: s - stack to discard from * discard_func - ptr to function that returns TRUE if elem is to be discarded * param - ptr to any parameters that (*discard_func)() needs. * * Returns: on success. * * Throws: if a pthread mutex lock/unlock fails. */ int esl_stack_DiscardSelected(ESL_STACK *s, int (*discard_func)(void *, void *), void *param) { int opos, npos; #ifdef HAVE_PTHREAD if (s->do_mutex && pthread_mutex_lock(s->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure"); #endif if (s->idata) { for (opos = 0, npos = 0 ; opos < s->n; opos++) if (! (*discard_func)(s->idata+opos, param)) s->idata[npos++] = s->idata[opos]; } else if (s->pdata) { for (opos = 0, npos = 0 ; opos < s->n; opos++) if (! (*discard_func)(s->pdata[opos], param)) s->pdata[npos++] = s->pdata[opos]; } else if (s->cdata) { for (opos = 0, npos = 0 ; opos < s->n; opos++) if (! (*discard_func)(s->cdata+opos, param)) s->cdata[npos++] = s->cdata[opos]; } s->n = npos; #ifdef HAVE_PTHREAD if (s->do_mutex && pthread_mutex_unlock(s->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure"); #endif return eslOK; } /*------------- end, main API, pushing/popping ------------------*/ /***************************************************************** *# 3. Shuffling stacks [with ] *****************************************************************/ #ifdef eslAUGMENT_RANDOM /* Function: esl_stack_Shuffle() * Synopsis: Randomly shuffle the elements in a stack. * Incept: SRE, Mon Mar 31 11:01:06 2008 [Janelia] * * Purpose: Randomly shuffle the elements in stack , using * random numbers from generator . * * Returns: on success, and the stack is randomly * shuffled. */ int esl_stack_Shuffle(ESL_RANDOMNESS *r, ESL_STACK *s) { int n = s->n; int w; #ifdef HAVE_PTHREAD if (s->do_mutex && pthread_mutex_lock(s->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure"); #endif while (n > 1) { w = esl_rnd_Roll(r, n); /* shuffling algorithm: swap last elem with w, decrement n. */ if (s->idata != NULL) ESL_SWAP(s->idata[w], s->idata[n-1], int); else if (s->cdata != NULL) ESL_SWAP(s->cdata[w], s->cdata[n-1], char); else if (s->pdata != NULL) ESL_SWAP(s->pdata[w], s->pdata[n-1], void *); n--; } #ifdef HAVE_PTHREAD if (s->do_mutex && pthread_mutex_unlock(s->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure"); #endif return eslOK; } #endif /*eslAUGMENT_RANDOM*/ /***************************************************************** *# 4. Using stacks for thread communication. *****************************************************************/ #if defined HAVE_PTHREAD /* Function: esl_stack_UseMutex() * Synopsis: Protect this stack in a threaded program. * Incept: SRE, Mon Jan 17 14:18:43 2011 [Janelia] * * Purpose: Declare that this stack is going to be operated on by more * than one thread in a multithreaded program, and that all * operations that change its internal state (such as * pushing and popping) need to be protected by a mutex. * * Args: s - the stack to protect * * Returns: on success. * * Throws: on allocation failure. * if fails. */ int esl_stack_UseMutex(ESL_STACK *s) { int pstatus; int status; ESL_ALLOC(s->mutex, sizeof(pthread_mutex_t)); if ((pstatus = pthread_mutex_init(s->mutex, NULL)) != 0) ESL_XEXCEPTION(eslESYS, "pthread_mutex_init failed with code %d\n", pstatus); s->do_mutex = TRUE; return eslOK; ERROR: if (s->mutex) free(s->mutex); s->mutex = NULL; s->do_mutex = FALSE; return status; } /* Function: esl_stack_UseCond() * Synopsis: Declare that this stack is used for interthread communication. * Incept: SRE, Mon Jan 17 14:22:06 2011 [Janelia] * * Purpose: Declare that this stack is to be used for communication * between threads. If a thread tries to pop from the stack * and the stack is empty, the Pop will do a * to wait until another thread has done a . If a thread * pushes onto the stack, it will do a * to wake up a waiting 'er. * * The stack must also have an active mutex. The caller * must call before calling * * * Args: s - the stack to use for push/pop interthread communication * * Returns: on success. * * Throws: on allocation failure. * if this stack lacks an active mutex. * if fails. */ int esl_stack_UseCond(ESL_STACK *s) { int pstatus; int status; if (! s->do_mutex || ! s->mutex) ESL_EXCEPTION(eslEINVAL, "stack has no active mutex; can't call esl_stack_UseCond() on it"); ESL_ALLOC(s->cond, sizeof(pthread_cond_t)); if ((pstatus = pthread_cond_init(s->cond, NULL)) != 0) ESL_XEXCEPTION(eslESYS, "pthread_cond_init failed with code %d\n", pstatus); s->do_cond = TRUE; return eslOK; ERROR: if (s->cond) free(s->cond); s->cond = NULL; s->do_cond = FALSE; return status; } /* Function: esl_stack_ReleaseCond() * Synopsis: Declare that anyone waiting on this stack may complete. * Incept: SRE, Tue Jan 18 15:57:32 2011 [Janelia] * * Purpose: Release the conditional wait state on stack . In our * idiom for using a stack to coordinate between one or * more client thread adding jobs to a stack, and one or * more worker threads popping them off, we call * when we know the client(s) are * done. Then the worker(s) seeing an empty job stack may * complete (Pop functions will return eslEOD), rather than * doing a conditional wait waiting for more work to appear * on the stack. * * Returns: on success. * * Throws: on pthread call failures. */ int esl_stack_ReleaseCond(ESL_STACK *s) { if (! s->do_mutex) ESL_EXCEPTION(eslESYS, "no mutex; esl_stack_ReleaseCond() call invalid"); if (! s->do_cond) ESL_EXCEPTION(eslESYS, "no conditional wait state is set"); if (pthread_mutex_lock(s->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_lock() failure"); if (pthread_cond_broadcast(s->cond) != 0) ESL_EXCEPTION(eslESYS, "pthread_cond_broadcast() failure"); /* You can't free s->cond yet; you can only set the flag. * Reason: you may have workers that are ALREADY in a wait state, in pthread_cond_wait(), * and that function depends on s->cond. */ s->do_cond = FALSE; if (pthread_mutex_unlock(s->mutex) != 0) ESL_EXCEPTION(eslESYS, "pthread_mutex_unlock() failure"); return eslOK; } #endif /*HAVE_PTHREAD*/ /*-------- end, using stacks for thread communication -----------*/ /***************************************************************** * 5. Unit tests *****************************************************************/ #ifdef eslSTACK_TESTDRIVE #include "esl_random.h" static void utest_integer(void) { char *msg = "integer stack basic unit test failed"; ESL_STACK *s = NULL; int n1 = ESL_STACK_INITALLOC*2+1; /* force two reallocations */ int n2 = 0; int i; int val; if ((s = esl_stack_ICreate()) == NULL) esl_fatal(msg); for (i = 0; i < n1; i++) if (esl_stack_IPush(s, i) != eslOK) esl_fatal(msg); while (esl_stack_IPop(s, &val) != eslEOD) n2++; if (n1 != n2) esl_fatal(msg); esl_stack_Reuse(s); /* same again, with ObjectCount instead of EOD for popping */ for (i = 0; i < n1; i++) if (esl_stack_IPush(s, i) != eslOK) esl_fatal(msg); n2 = 0; while (esl_stack_ObjectCount(s)) { if (esl_stack_IPop(s, &val) != eslOK) esl_fatal(msg); n2++; } if (n1 != n2) esl_fatal(msg); esl_stack_Destroy(s); } static void utest_char(void) { char *msg = "char stack basic unit test failed"; ESL_STACK *s = NULL; int n1 = ESL_STACK_INITALLOC*2+1; /* force two reallocations */ int n2 = 0; int i; char c; if ((s = esl_stack_CCreate()) == NULL) esl_fatal(msg); for (i = 0; i < n1; i++) if (esl_stack_CPush(s, 'X') != eslOK) esl_fatal(msg); while (esl_stack_CPop(s, &c) != eslEOD) { if (c != 'X') esl_fatal(msg); n2++; } if (n1 != n2) esl_fatal(msg); esl_stack_Reuse(s); /* same again, with ObjectCount instead of EOD for popping */ for (i = 0; i < n1; i++) if (esl_stack_CPush(s, 'X') != eslOK) esl_fatal(msg); n2 = 0; while (esl_stack_ObjectCount(s)) { if (esl_stack_CPop(s, &c) != eslOK) esl_fatal(msg); n2++; } if (n1 != n2) esl_fatal(msg); esl_stack_Destroy(s); } static void utest_pointer(void) { char *msg = "pointer stack basic unit test failed"; ESL_STACK *s = NULL; int n1 = ESL_STACK_INITALLOC*2+1; /* force two reallocations */ int n2 = 0; int i; void *p; if ((s = esl_stack_PCreate()) == NULL) esl_fatal(msg); for (i = 0; i < n1; i++) { p = malloc(sizeof(int) * 64); if (esl_stack_PPush(s, p) != eslOK) esl_fatal(msg); } while (esl_stack_PPop(s, &p) != eslEOD) { free(p); n2++; } if (n1 != n2) esl_fatal(msg); esl_stack_Reuse(s); /* same again, with ObjectCount instead of EOD for popping */ for (i = 0; i < n1; i++) { p = malloc(sizeof(int) * 64); if (esl_stack_PPush(s, p) != eslOK) esl_fatal(msg); } n2 = 0; while (esl_stack_ObjectCount(s)) { if (esl_stack_PPop(s, &p) != eslOK) esl_fatal(msg); free(p); n2++; } if (n1 != n2) esl_fatal(msg); esl_stack_Destroy(s); } static void utest_convert2string(void) { char *msg = "stack::convert2string unit test failed"; char *str = "ABCDEF"; ESL_STACK *s = NULL; int n = strlen(str); int i; char *result = NULL; if ((s = esl_stack_CCreate()) == NULL) esl_fatal(msg); for (i = 0; i < n; i++) if (esl_stack_CPush(s, str[i]) != eslOK) esl_fatal(msg); result = esl_stack_Convert2String(s); if (strcmp(result, str) != 0) esl_fatal(msg); free(result); /* after Convert2String, only the string itself remains to be free'd */ } static void utest_shuffle(ESL_RANDOMNESS *r) { char *msg = "stack shuffle unit test failed"; ESL_STACK *s = esl_stack_ICreate(); int n = ESL_STACK_INITALLOC*2+1; /* exercises reallocation */ int *seen = malloc(sizeof(int) * n); int i; int val; int appears_shuffled = FALSE; for (i = 0; i < n; i++) esl_stack_IPush(s, i); esl_stack_Shuffle(r, s); for (i = 0; i < n; i++) seen[i] = 0; i = n-1; while (esl_stack_IPop(s, &val) != eslEOD) { seen[val]++; if (val != i--) appears_shuffled = TRUE; } for (i = 0; i < n; i++) if (seen[i] != 1) esl_fatal(msg); free(seen); esl_stack_Destroy(s); } /* discard all elems in the stack > thresh */ static int discard_function(void *elemp, void *paramp) { int elem = * (int *) elemp; int thresh = * (int *) paramp; return (elem > thresh) ? TRUE : FALSE; } static void utest_discard_selected(ESL_RANDOMNESS *r) { char *msg = "stack: DiscardSelected() unit test failed"; ESL_STACK *ns = esl_stack_ICreate(); int n = 1000; int thresh = 42; int npass = 0; int val; int i; for (i = 0; i < n; i++) { val = esl_rnd_Roll(r, 100) + 1; if (val <= thresh) npass++; esl_stack_IPush(ns, val); } if (esl_stack_DiscardSelected(ns, discard_function, &thresh) != eslOK) esl_fatal(msg); if (esl_stack_ObjectCount(ns) != npass) esl_fatal(msg); while (esl_stack_IPop(ns, &val) == eslOK) { if (val > thresh) esl_fatal(msg); npass--; } if (npass != 0) esl_fatal(msg); esl_stack_Destroy(ns); } #ifdef HAVE_PTHREAD /* Unit test for using a stack as part of an idiom * for a command stack, with one or more threads * adding jobs to the stack, and one or more other threads * pulling jobs off. This idiom is used in the HMMER * hmmpgmd daemon. In this framework, input> * is a list of jobs to do; working> is a stack * of jobs waiting to be done; output> is a * list of jobs done. * pusher_thread() simulates a client, taking * jobs from input> and adding them to * the working> stack. * popper_thread() simulates a worker, taking * jobs from working> and putting them * on the output> list. * * working>, therefore, is the read/write stack; * input> is read-only (it only gets written in * nonthreaded code in main()) * output> is write-only (only gets read in * nonthreaded code in main()). */ struct threadtest_s { ESL_STACK *input; /* faux "work unit" queue that the pusher_thread() processes*/ ESL_STACK *working; /* interthread communication: pusher puts work on this stack, popper pulls it off */ ESL_STACK *output; /* popper_thread() puts "finished" units on this stack */ }; static void * pusher_thread(void *arg) { ESL_RANDOMNESS *r = esl_randomness_CreateFast(0); struct threadtest_s *tt = (struct threadtest_s *) arg; int value; while ( esl_stack_IPop(tt->input, &value) == eslOK) { usleep(esl_rnd_Roll(r, 100)+1); /* 1..100 usec delay */ esl_stack_IPush(tt->working, value); } esl_randomness_Destroy(r); pthread_exit(NULL); } static void * popper_thread(void *arg) { ESL_RANDOMNESS *r = esl_randomness_CreateFast(0); struct threadtest_s *tt = (struct threadtest_s *) arg; int value; while (esl_stack_IPop(tt->working, &value) == eslOK) { usleep(esl_rnd_Roll(r, 100)+1); /* 1..100 usec delay */ esl_stack_IPush(tt->output, value); } esl_randomness_Destroy(r); pthread_exit(NULL); } static void utest_interthread_comm(void) { char *msg = "stack::interthread_comm unit test failed"; struct threadtest_s *tt = NULL; int njobs = 1000; int *ndone = NULL; pthread_t tid[4]; int i; int value; ndone = malloc(sizeof(int) * njobs); for (i = 0; i < njobs; i++) ndone[i] = 0; tt = malloc(sizeof(struct threadtest_s)); tt->input = esl_stack_ICreate(); tt->working = esl_stack_ICreate(); tt->output = esl_stack_ICreate(); esl_stack_UseMutex(tt->input); esl_stack_UseMutex(tt->working); esl_stack_UseMutex(tt->output); esl_stack_UseCond(tt->working); for (i = 0; i < njobs; i++) esl_stack_IPush(tt->input, i); pthread_create(&(tid[0]), NULL, pusher_thread, tt); pthread_create(&(tid[1]), NULL, pusher_thread, tt); pthread_create(&(tid[2]), NULL, popper_thread, tt); pthread_create(&(tid[3]), NULL, popper_thread, tt); pthread_join(tid[0], NULL); pthread_join(tid[1], NULL); esl_stack_ReleaseCond(tt->working); pthread_join(tid[2], NULL); pthread_join(tid[3], NULL); while (esl_stack_IPop(tt->output, &value) == eslOK) { if (value < 0 || value >= njobs) esl_fatal(msg); ndone[value]++; } for (i = 0; i < njobs; i++) if (ndone[i] != 1) esl_fatal(msg); free(ndone); esl_stack_Destroy(tt->output); esl_stack_Destroy(tt->working); esl_stack_Destroy(tt->input); free(tt); return; } #endif /* HAVE_PTHREAD -- pthread-specific utests */ #endif /*eslSTACK_TESTDRIVE*/ /*---------------- end of unit tests ----------------------------*/ /***************************************************************** * 6. Test driver. *****************************************************************/ #ifdef eslSTACK_TESTDRIVE /* * Test driver and API example for the pushdown stack module. * To compile: * gcc -g -Wall -I. -L. -DeslSTACK_TESTDRIVE -o testdrive esl_stack.c -leasel -lm * To run: * ./testdrive * Returns 0 (success), or returns nonzero and says why. */ /* why Pop() into a void *obj_p, instead of directly into int *obj, in * the test of the pointer stack? On PowerPC/Linux, using gcc -O3, * trying to Pop() into *obj causes a "dereferencing type-punned * pointer will break strict-aliasing rules" warning, and the test * driver crashes with a double free/corruption error in glibc. Lower * optimization levels don't cause the problem; adding * -fno-strict-aliasing to the CFLAGS also avoids the problem. I'm * suspicious that it's a gcc optimizer bug. Pop()'ing into a void * * avoids the issue altogether. (SRE, Feb 22 2008 J2/119) */ #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_stack.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "0", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "unit test driver for esl_stack module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *rng = esl_randomness_Create(esl_opt_GetInteger(go, "-s")); fprintf(stderr, "## %s\n", argv[0]); fprintf(stderr, "# rng seed = %" PRIu32 "\n", esl_randomness_GetSeed(rng)); utest_integer(); utest_char(); utest_pointer(); utest_convert2string(); utest_shuffle(rng); utest_discard_selected(rng); #ifdef HAVE_PTHREAD utest_interthread_comm(); #endif esl_randomness_Destroy(rng); esl_getopts_Destroy(go); fprintf(stderr, "# status = ok\n"); return eslOK; } #endif /*eslSTACK_TESTDRIVE*/ /*-------------------- end of test driver -----------------------*/ /***************************************************************** * 7. Example. *****************************************************************/ #ifdef eslSTACK_EXAMPLE /*::cexcerpt::stack_example::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslSTACK_EXAMPLE esl_stack.c easel.c -lm * run: ./example */ #include "easel.h" #include "esl_stack.h" int main(void) { ESL_STACK *ns; int x; ns = esl_stack_ICreate(); esl_stack_IPush(ns, 42); esl_stack_IPush(ns, 7); esl_stack_IPush(ns, 3); while (esl_stack_IPop(ns, &x) != eslEOD) printf("%d\n", x); esl_stack_Destroy(ns); return 0; } /*::cexcerpt::stack_example::end::*/ #endif /*eslSTACK_EXAMPLE*/ /*------------------------ end of example -----------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_stack.c 819 2012-11-17 16:58:23Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_stack.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_normal.c0000664361611702660230000001734112473612607015671 0ustar wheelerteddy/* Statistical routines for normal distributions * (This module is currently incomplete and not fully tested, * though it compiles cleanly.) * */ #include "esl_config.h" #include #include "easel.h" #include "esl_normal.h" /***************************************************************** * 1. Densities and distributions. *****************************************************************/ /* Function: esl_normal_pdf() * Incept: SRE, Tue Nov 21 14:15:43 2006 [Janelia] * * Purpose: Calculates the normal (Gaussian) probability density * function $P(X=x)$ for a normal distribution, given * value , mean , and standard deviation . * * Xref: STL11/94. */ double esl_normal_pdf(double x, double mu, double sigma) { double z; z = (x - mu) / sigma; return exp(-z*z*2.0) / (sigma * sqrt(2. * eslCONST_PI)); } /* Function: esl_normal_logpdf() * Incept: SRE, Tue Jan 9 20:43:52 2007 [Casa de Gatos] * * Purpose: Calculates the log of the probabiility density function * for the normal (Gaussian), $\log P(X=x)$, given value * , mean , and standard deviation . * * Xref: STL11/94. */ double esl_normal_logpdf(double x, double mu, double sigma) { double z; z = (x - mu) / sigma; return (-z*z*2.0) - log(sigma) - log(sqrt(2.*eslCONST_PI)); } /* Function: esl_normal_cdf() * Incept: SRE, Tue Jan 9 20:59:04 2007 [Casa de Gatos] * * Purpose: Calculates the cumulative distribution function for the * normal, $P(X \leq x)$, given value , mean , * and standard deviation . * * Xref: STL11/94. */ double esl_normal_cdf(double x, double mu, double sigma) { double z; z = (x - mu) / sigma; return 0.5 + 0.5 * erf(z / sqrt(2.)); } /* Function: esl_normal_surv() * Incept: SRE, Thu Jan 11 20:16:23 2007 [Casa de Gatos] * * Purpose: Calculates the survivor function, $P(X>x)$ (that is, * 1-CDF, the right tail probability mass) for a normal * distribution, given value , mean , and standard * deviation . * * Xref: STL11/94 */ double esl_normal_surv(double x, double mu, double sigma) { double z = (x - mu) / (sqrt(2.) * sigma); return 0.5 - 0.5 * erf(z); } /***************************************************************** * Unit tests. *****************************************************************/ #ifdef eslNORMAL_TESTDRIVE static int utest_pdf(void) { double mu = 0.; double sigma = 1.; double x; double newpdf, lastpdf; x = 0.; newpdf = esl_normal_pdf(x, mu, sigma); do { x += 1.; lastpdf = newpdf; newpdf = esl_normal_pdf(x, mu, sigma); } while (newpdf > 0.); if (lastpdf > 1e-300) esl_fatal("Dynamic range of esl_normal_pdf insufficient"); return eslOK; } static int utest_logpdf(void) { double mu = 0.; double sigma = 1.; double x; double old, new; x = 0.; new = esl_normal_logpdf(x, mu, sigma); do { x += 1.; old = new; new = esl_normal_logpdf(x, mu, sigma); } while (new > 0.); if (old > 1e-300) esl_fatal("Dynamic range of esl_normal_logpdf insufficient"); old = esl_normal_pdf(42, -5., 2.1); new = exp(esl_normal_logpdf(42, -5., 2.1)); if (esl_DCompare(old, new, 1e-9) != eslOK) esl_fatal("logpdf and pdf aren't giving the same answer"); return eslOK; } static int utest_cdf(void) { double mu = 0.; double sigma = 1.; double x; double new; for (x = 0.; x > -100.; x -= 1.0) { new = esl_normal_cdf(x, mu, sigma); printf("%.0f %g\n", x, new); } return eslOK; } static int utest_surv(void) { double mu = 0.; double sigma = 1.; double x; double new; for (x = 0.; x < 100.; x += 1.0) { new = esl_normal_surv(x, mu, sigma); printf("%.0f %g\n", x, new); } return eslOK; } #endif /*eslNORMAL_TESTDRIVE*/ /***************************************************************** * Test driver. *****************************************************************/ #ifdef eslNORMAL_TESTDRIVE /* Compile: gcc -g -Wall -I. -L. -o test -DeslNORMAL_TESTDRIVE esl_normal.c -leasel -lm */ #include #include #include "easel.h" #include "esl_normal.h" int main(int argc, char **argv) { utest_pdf(); utest_logpdf(); /* utest_cdf(); */ utest_surv(); return eslOK; } #endif /*eslNORMAL_TESTDRIVE*/ /***************************************************************** * Example. *****************************************************************/ #ifdef eslNORMAL_EXAMPLE /*::cexcerpt::normal_example::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslNORMAL_EXAMPLE esl_normal.c easel.c -lm */ #include #include #include "easel.h" #include "esl_normal.h" int main(int argc, char **argv) { double z; z = sqrt(2 * eslCONST_PI); printf("%.60f\n", z); printf("%.60f\n", eslCONST_PI); printf("%.60f\n", (1. + sqrt(5.)) / 2.); return 0; } #endif /*eslNORMAL_EXAMPLE*/ #ifdef eslNORMAL_EXAMPLE2 /* Print a Gaussian histogram in xmgrace XY set format gcc -g -Wall -I. -L. -o example -DeslNORMAL_EXAMPLE2 esl_normal.c -leasel -lm */ #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_normal.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-N", eslARG_REAL, "1.0", NULL, NULL, NULL, NULL, NULL, "number of samples", 0 }, { "--mean", eslARG_REAL, "0.0", NULL, NULL, NULL, NULL, NULL, "mean of normal distribution", 0 }, { "--sd", eslARG_REAL, "1.0", NULL, NULL, NULL, NULL, NULL, "s.d. of normal distribution", 0 }, { "--min", eslARG_REAL, "-10.0", NULL, NULL, NULL, NULL, NULL, "minimum for xaxis", 0 }, { "--max", eslARG_REAL, "10.0", NULL, NULL, NULL, NULL, NULL, "maximum for xaxis", 0 }, { "--step", eslARG_REAL, "1.0", NULL, NULL, NULL, NULL, NULL, "step size for xaxis", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "output a Gaussian histogram"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); double minx = esl_opt_GetReal(go, "--min"); double maxx = esl_opt_GetReal(go, "--max"); double xstep = esl_opt_GetReal(go, "--step"); double N = esl_opt_GetReal(go, "-N"); double mean = esl_opt_GetReal(go, "--mean"); double sd = esl_opt_GetReal(go, "--sd"); double x; double val; for (x = minx; x < maxx; x += xstep) { val = N * (esl_normal_surv(x, mean, sd) - esl_normal_surv(x+xstep, mean, sd)); printf("%f %f\n", x, val); } printf("&\n"); esl_getopts_Destroy(go); return 0; } #endif /*eslNORMAL_EXAMPLE2*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_normal.c 685 2011-05-23 14:27:52Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_normal.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_gumbel.c0000664361611702660230000011433212473612606015651 0ustar wheelerteddy/* Statistical routines for Gumbel (type I extreme value) distributions. * * Contents: * 1. Routine for evaluating densities and distributions * 2. Generic API routines: for general interface w/ histogram module * 3. Routines for dumping plots to files * 4. Routines for sampling (requires random module) * 5. Maximum likelihood fitting to data (requires minimizer module) * 6. Stats driver * 7. Unit tests * 8. Test driver * 9. Example * 10. Copyright and license information * * Note: SRE, Mon Aug 6 13:42:09 2007 * ML fitting routines will be prone to over/underfitting * problems for scores outside a "normal" range, because * of exp(-lambda * x) calls. The Lawless ML estimation * may eventually need to be recast in log space. */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_stats.h" #include "esl_vectorops.h" #include "esl_gumbel.h" #ifdef eslAUGMENT_RANDOM #include "esl_random.h" #endif #ifdef eslAUGMENT_MINIMIZER #include "esl_minimizer.h" #endif /***************************************************************** * 1. Routines for evaluating densities and distributions *****************************************************************/ /* Function: esl_gumbel_pdf() * Synopsis: Returns the probability density at $x$, $P(S=x)$. * * Purpose: Calculates the probability density function for the Gumbel, * $P(X=x)$, given quantile and Gumbel location and * scale parameters and . * * Let $y = \lambda(x-\mu)$; for 64-bit doubles, * useful dynamic range is about $-6.5 <= y <= 710$. * Returns 0.0 for smaller $y$, 0.0 for larger $y$. */ double esl_gumbel_pdf(double x, double mu, double lambda) { double y; y = lambda * (x - mu); return (lambda * exp(-y - exp(-y))); } /* Function: esl_gumbel_logpdf() * Synopsis: Returns the log of the pdf at $x$, $\log P(S=x)$. * * Purpose: Calculates the log probability density function for the Gumbel, * $\log P(X=x)$. * * Let $y = \lambda(x-\mu)$; for 64-bit doubles, * useful dynamic range is about $-708 <= y <= \infty$. * Returns $-\infty$ for smaller or larger $y$. */ double esl_gumbel_logpdf(double x, double mu, double lambda) { double y; y = lambda * (x - mu); return (log(lambda) -y - exp(-y)); } /* Function: esl_gumbel_cdf() * Synopsis: Returns the cumulative distribution at $x$, $P(S \leq x)$. * * Purpose: Calculates the cumulative distribution function * for the Gumbel, $P(X \leq x)$. * * Let $y = \lambda(x-\mu)$; for 64-bit doubles, * useful dynamic range for $y$ is about $-6.5 <= y <=36$. * Returns 0.0 for smaller $y$, 1.0 for larger $y$. */ double esl_gumbel_cdf(double x, double mu, double lambda) { double y; y = lambda*(x-mu); return exp(-exp(-y)); } /* Function: esl_gumbel_logcdf() * Synopsis: Returns the log of the cdf at $x$, $\log P(S \leq x)$. * * Purpose: Calculates the log of the cumulative distribution function * for the Gumbel, $\log P(X \leq x)$. * * Let $y = \lambda(x-\mu)$; for 64-bit doubles, * useful dynamic range for $y$ is about $-708 <= y <= 708$. * Returns $-\infty$ for smaller $y$, 0.0 for larger $y$. */ double esl_gumbel_logcdf(double x, double mu, double lambda) { double y; y = lambda*(x-mu); return (-exp(-y)); } /* Function: esl_gumbel_surv() * Synopsis: Returns right tail mass above $x$, $P(S > x)$. * * Purpose: Calculates the survivor function, $P(X>x)$ for a Gumbel * (that is, 1-cdf), the right tail's probability mass. * * Let $y=\lambda(x-\mu)$; for 64-bit doubles, * useful dynamic range for $y$ is $-3.6 <= y <= 708$. * Returns 1.0 for $y$ below lower limit, and 0.0 * for $y$ above upper limit. */ double esl_gumbel_surv(double x, double mu, double lambda) { double y = lambda*(x-mu); double ey = -exp(-y); /* Use 1-e^x ~ -x approximation here when e^-y is small. */ if (fabs(ey) < eslSMALLX1) return -ey; else return 1 - exp(ey); } /* Function: esl_gumbel_logsurv() * Synopsis: Returns log survival at $x$, $\log P(S > x)$. * * Purpose: Calculates $\log P(X>x)$ for a Gumbel (that is, $\log$(1-cdf)): * the log of the right tail's probability mass. * * Let $y=\lambda(x-\mu)$; for 64-bit doubles, * useful dynamic range for $y$ is $-6.5 <= y <= \infty$. * Returns 0.0 for smaller $y$. */ double esl_gumbel_logsurv(double x, double mu, double lambda) { double y = lambda*(x-mu); double ey = -exp(-y); /* The real calculation is log(1-exp(-exp(-y))). * For "large" y, -exp(-y) is small, so 1-exp(-exp(-y) ~ exp(-y), * and log of that gives us -y. * For "small y", exp(-exp(-y) is small, and we can use log(1-x) ~ -x. */ if (fabs(ey) < eslSMALLX1) return -y; else if (fabs(exp(ey)) < eslSMALLX1) return -exp(ey); else return log(1-exp(ey)); } /* Function: esl_gumbel_invcdf() * * Purpose: Calculates the inverse CDF for a Gumbel distribution * with parameters and . That is, returns * the quantile at which the CDF is

. */ double esl_gumbel_invcdf(double p, double mu, double lambda) { return mu - ( log(-1. * log(p)) / lambda); } /* Function: esl_gumbel_invsurv() * * Purpose: Calculates the score at which the right tail's mass * is p, for a Gumbel distribution * with parameters and . That is, returns * the quantile at which 1-CDF is

starting from a * point . Identifies a scalar $x$ that approximates * the position of the minimum along this direction, in a * given bracketing interval (). The minimum must * have been bracketed by the caller in the <(a,b)> * interval. is often 0, because we often start at the * . * * A quasi-1D scalar coordinate $x$ (such as or ) is * transformed to a point $\mathbf{p}$ in n-space as: * $\mathbf{p} = \mathbf{\mbox{ori}} + x * \mathbf{\mbox{dir}}$. * * Any extra (fixed) data needed to calculate can be * passed through the void pointer. * * and define the relative convergence tolerance, * $\mbox{tol} = \mbox{eps} |x| + t$. should not be * less than the square root of the machine precision. The * is 2.2e-16 on many machines with 64-bit * doubles, so is on the order of 1e-8 or more. * is a yet smaller number, used to avoid nonconvergence in * the pathological case $x=0$. * * Upon convergence (which is guaranteed), returns , * the n-dimensional minimum. Optionally, will also return * , the scalar that resulted in that * n-dimensional minimum, and , the objective * function <*func(x)> at the minimum. * * This is an implementation of the R.P. Brent (1973) * algorithm for one-dimensional minimization without * derivatives (modified from Brent's ALGOL60 code). Uses a * combination of bisection search and parabolic * interpolation; should exhibit superlinear convergence in * most functions. * * * Args: ori - n-vector at origin * dir - direction vector (gradient) we're following from ori * n - dimensionality of ori, dir, and xvec * (*func) - ptr to caller's objective function * prm - ptr to any additional data (*func)() needs * a,b - minimum is bracketed on interval [a,b] * eps - tol = eps |x| + t; eps >= 2 * relative machine precision * t - additional factor for tol to avoid x=0 case. * xvec - RETURN: minimum, as an n-vector (caller allocated) * ret_x - optRETURN: scalar multiplier that gave xvec * ret_fx - optRETURN: f(x) * * Returns: (void) * * Reference: See [Brent73], Chapter 5. My version is derived directly * from Brent's description and his ALGOL60 code. I've * preserved his variable names as much as possible, to * make the routine follow his published description * closely. The Brent algorithm is also discussed in * Numerical Recipes [Press88]. */ static void brent(double *ori, double *dir, int n, double (*func)(double *, int, void *), void *prm, double a, double b, double eps, double t, double *xvec, double *ret_x, double *ret_fx) { double w,x,v,u; /* with [a,b]: Brent's six points */ double m; /* midpoint of current [a,b] interval */ double tol; /* tolerance = eps|x| + t */ double fu,fv,fw,fx; /* function evaluations */ double p,q; /* numerator, denominator of parabolic interpolation */ double r; double d,e; /* last, next-to-last values of p/q */ double c = 1. - (1./eslCONST_GOLD); /* Brent's c; 0.381966; golden ratio */ int niter; /* number of iterations */ x=v=w= a + c*(b-a); /* initial guess of x by golden section */ esl_vec_DCopy(ori, n, xvec); /* build xvec from ori, dir, x */ esl_vec_DAddScaled(xvec, dir, x, n); fx=fv=fw = (*func)(xvec, n, prm); /* initial function evaluation */ e = 0.; niter = 0; while (1) /* algorithm is guaranteed to converge. */ { m = 0.5 * (a+b); tol = eps*fabs(x) + t; if (fabs(x-m) <= 2*tol - 0.5*(b-a)) break; /* convergence test. */ niter++; p = q = r = 0.; if (fabs(e) > tol) { /* Compute parabolic interpolation, u = x + p/q */ r = (x-w)*(fx-fv); q = (x-v)*(fx-fw); p = (x-v)*q - (x-w)*r; q = 2*(q-r); if (q > 0) { p = -p; } else {q = -q;} r = e; e=d; /* e is now the next-to-last p/q */ } if (fabs(p) < fabs(0.5*q*r) || p < q*(a-x) || p < q*(b-x)) { /* Seems well-behaved? Use parabolic interpolation to compute new point u */ d = p/q; /* d remembers last p/q */ u = x+d; /* trial point, for now... */ if (2.0*(u-a) < tol || 2.0*(b-u) < tol) /* don't evaluate func too close to a,b */ d = (x < m)? tol : -tol; } else /* Badly behaved? Use golden section search to compute u. */ { e = (x= tol) u = x+d; else if (d > 0) u = x+tol; else u = x-tol; esl_vec_DCopy(ori, n, xvec); /* build xvec from ori, dir, u */ esl_vec_DAddScaled(xvec, dir, u, n); fu = (*func)(xvec, n, prm); /* f(u) */ /* Bookkeeping. */ if (fu <= fx) { if (u < x) b = x; else a = x; v = w; fv = fw; w = x; fw = fx; x = u; fx = fu; } else { if (u < x) a = u; else b = u; if (fu <= fw || w == x) { v = w; fv = fw; w = u; fw = fu; } else if (fu <= fv || v==x || v ==w) { v = u; fv = fu; } } } /* Return. */ esl_vec_DCopy(ori, n, xvec); /* build final xvec from ori, dir, x */ esl_vec_DAddScaled(xvec, dir, x, n); if (ret_x != NULL) *ret_x = x; if (ret_fx != NULL) *ret_fx = fx; ESL_DPRINTF2(("\nbrent(): %d iterations\n", niter)); ESL_DPRINTF2(("xx=%10.8f fx=%10.1f\n", x, fx)); } /* Function: esl_min_ConjugateGradientDescent() * Incept: SRE, Wed Jun 22 08:49:42 2005 [St. Louis] * * Purpose: n-dimensional minimization by conjugate gradient descent. * * An initial point is provided by , a vector of * components. The caller also provides a function <*func()> that * compute the objective function f(x) when called as * <(*func)(x, n, prm)>, and a function <*dfunc()> that can * compute the gradient at when called as * <(*dfunc)(x, n, prm, dx)>, given an allocated vector * to put the derivative in. Any additional data or fixed * parameters that these functions require are passed by * the void pointer . * * The first step of each iteration is to try to bracket * the minimum along the current direction. The initial step * size is controlled by ; the first step will not exceed * for any dimension . (You can think of as * being the natural "units" to use along a graph axis, if * you were plotting the objective function.) * * The caller also provides an allocated workspace sufficient to * hold four allocated n-vectors. (4 * sizeof(double) * n). * * Iterations continue until the objective function has changed * by less than a fraction . This should not be set to less than * sqrt(). * * Upon return, is the minimum, and is f(x), * the function value at . * * Args: x - an initial guess n-vector; RETURN: x at the minimum * u - "units": maximum initial step size along gradient when bracketing. * n - dimensionality of all vectors * *func() - function for computing objective function f(x) * *dfunc() - function for computing a gradient at x * prm - void ptr to any data/params func,dfunc need * tol - convergence criterion applied to f(x) * wrk - allocated 4xn-vector for workspace * ret_fx - optRETURN: f(x) at the minimum * * Returns: on success. * * Throws: if it fails to converge in MAXITERATIONS. * if the minimum is not finite, which may * indicate a problem in the implementation or choice of <*func()>. * * Xref: STL9/101. */ int esl_min_ConjugateGradientDescent(double *x, double *u, int n, double (*func)(double *, int, void *), void (*dfunc)(double *, int, void *, double *), void *prm, double tol, double *wrk, double *ret_fx) { double oldfx; double coeff; int i, i1; double *dx, *cg, *w1, *w2; double cvg; double fa,fb,fc; double ax,bx,cx; double fx; dx = wrk; cg = wrk + n; w1 = wrk + 2*n; w2 = wrk + 3*n; oldfx = (*func)(x, n, prm); /* init the objective function */ /* Bail out if the function is +/-inf: this can happen if the caller * has screwed something up, or has chosen a bad start point. */ if (oldfx == eslINFINITY || oldfx == -eslINFINITY) ESL_EXCEPTION(eslERANGE, "minimum not finite"); if (dfunc != NULL) { (*dfunc)(x, n, prm, dx); /* find the current negative gradient, - df(x)/dxi */ esl_vec_DScale(dx, n, -1.0); } else numeric_derivative(x, u, n, func, prm, 1e-4, dx); /* resort to brute force */ esl_vec_DCopy(dx, n, cg); /* and make that the first conjugate direction, cg */ /* (failsafe) convergence test: a zero direction can happen, * and it either means we're stuck or we're finished (most likely stuck) */ for (i1 = 0; i1 < n; i1++) if (cg[i1] != 0.) break; if (i1 == n) { if (ret_fx != NULL) *ret_fx = oldfx; return eslOK; } for (i = 0; i < MAXITERATIONS; i++) { /* Figure out the initial step size. */ bx = fabs(u[0] / cg[0]); for (i1 = 1; i1 < n; i1++) { cx = fabs(u[i1] / cg[i1]); if (cx < bx) bx = cx; } /* Bracket the minimum. */ bracket(x, cg, n, bx, func, prm, w1, &ax, &bx, &cx, &fa, &fb, &fc); /* Minimize along the line given by the conjugate gradient */ brent(x, cg, n, func, prm, ax, cx, 1e-3, 1e-8, w2, NULL, &fx); esl_vec_DCopy(w2, n, x); /* Bail out if the function is now +/-inf: this can happen if the caller * has screwed something up. */ if (fx == eslINFINITY || fx == -eslINFINITY) ESL_EXCEPTION(eslERANGE, "minimum not finite"); /* Find the negative gradient at that point (temporarily in w1) */ if (dfunc != NULL) { (*dfunc)(x, n, prm, w1); esl_vec_DScale(w1, n, -1.0); } else numeric_derivative(x, u, n, func, prm, 1e-4, w1); /* resort to brute force */ /* Calculate the Polak-Ribiere coefficient */ for (coeff = 0., i1 = 0; i1 < n; i1++) coeff += (w1[i1] - dx[i1]) * w1[i1]; coeff /= esl_vec_DDot(dx, dx, n); /* Calculate the next conjugate gradient direction in w2 */ esl_vec_DCopy(w1, n, w2); esl_vec_DAddScaled(w2, cg, coeff, n); /* Finishing set up for next iteration: */ esl_vec_DCopy(w1, n, dx); esl_vec_DCopy(w2, n, cg); /* Now: x is the current point; * fx is the function value at that point; * dx is the current gradient at x; * cg is the current conjugate gradient direction. */ /* Main convergence test. 1e-9 factor is fudging the case where our * minimum is at exactly f()=0. */ cvg = 2.0 * fabs((oldfx-fx)) / (1e-10 + fabs(oldfx) + fabs(fx)); // fprintf(stderr, "(%d): Old f() = %.9f New f() = %.9f Convergence = %.9f\n", i, oldfx, fx, cvg); // fprintf(stdout, "(%d): Old f() = %.9f New f() = %.9f Convergence = %.9f\n", i, oldfx, fx, cvg); #if eslDEBUGLEVEL >= 2 printf("\nesl_min_ConjugateGradientDescent():\n"); printf("new point: "); for (i1 = 0; i1 < n; i1++) printf("%g ", x[i1]); printf("\nnew gradient: "); for (i1 = 0; i1 < n; i1++) printf("%g ", dx[i1]); numeric_derivative(x, u, n, func, prm, 1e-4, w1); printf("\n(numeric grad): "); for (i1 = 0; i1 < n; i1++) printf("%g ", w1[i1]); printf("\nnew direction: "); for (i1 = 0; i1 < n; i1++) printf("%g ", cg[i1]); printf("\nOld f() = %g New f() = %g Convergence = %g\n\n", oldfx, fx, cvg); #endif if (cvg <= tol) break; /* Second (failsafe) convergence test: a zero direction can happen, * and it either means we're stuck or we're finished (most likely stuck) */ for (i1 = 0; i1 < n; i1++) if (cg[i1] != 0.) break; if (i1 == n) break; oldfx = fx; } if (ret_fx != NULL) *ret_fx = fx; if (i == MAXITERATIONS) ESL_FAIL(eslENOHALT, NULL, " "); // ESL_EXCEPTION(eslENOHALT, "Failed to converge in ConjugateGradientDescent()"); return eslOK; } /***************************************************************** * Example main() *****************************************************************/ #ifdef eslMINIMIZER_EXAMPLE /*::cexcerpt::minimizer_example::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslMINIMIZER_EXAMPLE esl_minimizer.c esl_vectorops.c easel.c -lm * run: ./example */ #include #include "easel.h" #include "esl_vectorops.h" #include "esl_minimizer.h" /* a simple multidimensional quadratic w/ a minimum at 0: * $f(x) = a_1 x_1^2 + ... a_n x_n^2$ */ static double example_func(double *x, int n, void *prm) { double *a; double fx; int i; a = (double *) prm; /* cast the data vector */ for (fx = 0., i = 0; i < n; i++) fx += a[i] * x[i] * x[i]; return fx; } /* gradient of the f(x): d/dx_i = 2 a_i x_i */ static void example_dfunc(double *x, int n, void *prm, double *dx) { double *a; int i; a = (double *) prm; /* cast the data vector */ for (i = 0; i < n; i++) dx[i] = 2.0 * a[i] * x[i]; } int main(int argc, char **argv) { int n = 6; double a[6] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 }; double x[6] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 }; double u[6] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; double wrk[24]; double fx; int i; esl_min_ConjugateGradientDescent(x, u, n, &example_func, &example_dfunc, (void *) a, 0.0001, wrk, &fx); printf("At minimum: f(x) = %g\n", fx); printf("vector x = "); for (i = 0; i < 6; i++) printf("%g ", x[i]); printf("\n"); return 0; } /*::cexcerpt::minimizer_example::end::*/ #endif /*eslMINIMIZER_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_minimizer.c 685 2011-05-23 14:27:52Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_minimizer.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_getopts.tex0000664361611702660230000007237312473612606016451 0ustar wheelerteddy The \eslmod{getopts} module interprets UNIX command line syntax. It allows both standard POSIX one-character options and GNU-style long options, in addition to command line arguments. The implementation shares similarities with POSIX \ccode{getopt()} and GNU's \ccode{getopt\_long()}. It has additional abilities, at the cost of enforcing a specific style. In addition to setting options from the command line, options may also be configured so they can be set by environment variables, or by one or more configuration files. Option arguments can be automatically checked for valid type (integers, real numbers, characters, or strings). Numeric arguments can also be checked for valid range (for instance, ensuring that a probability is in the range $0 \leq x \leq 1$). Options can be linked into ``toggle groups'', such that setting one option automatically unsets others. You can specify that an option isn't legal unless other required options are also set, or conversely that an option is incompatible with one or more other options. A standardized usage/help display for command line options can be printed directly from the internal information, including default values and range restrictions when line length allows. This is all configured by defining an array of \ccode{ESL\_OPTIONS} structures that provide the necessary information. This array is turned into a \ccode{ESL\_GETOPTS} object, which is used to determine and store the configuration state of your application according to the command line, environment variables, and configuration files. The \ccode{ESL\_GETOPTS} object can be queried directly when your program executes configuration-dependent steps. There is often no need to store configuration information in other variables in your program. This simplifies code structure, by allowing you to pass the complete configuration state of your application in one capsule to functions other than \ccode{main()}. This is especially useful in applications where \ccode{main()} is a dispatch wrapper, such as the masters and workers in a parallelized MPI program, for example. Table~\ref{tbl:getopts_api} lists the functions in the \eslmod{getopts} API. The module implements a \ccode{ESL\_GETOPTS} object that holds the configuration state of the application, and an \ccode{ESL\_OPTIONS} structure that contains information about one configurable option. An application defines an array of \ccode{ESL\_OPTIONS} to declare what options it will allow. % Table generated by autodoc -t esl_getopts.c (so don't edit here, edit esl_getopts.c:) \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \apisubhead{The \ccode{ESL\_GETOPTS} object}\\ \hyperlink{func:esl_getopts_Create()}{\ccode{esl\_getopts\_Create()}} & Create a new \ccode{ESL\_GETOPTS} object.\\ \hyperlink{func:esl_getopts_CreateDefaultApp()}{\ccode{esl\_getopts\_CreateDefaultApp()}} & Initialize a standard Easel application.\\ \hyperlink{func:esl_getopts_Reuse()}{\ccode{esl\_getopts\_Reuse()}} & Reset application state to default.\\ \hyperlink{func:esl_getopts_Destroy()}{\ccode{esl\_getopts\_Destroy()}} & Destroys an \ccode{ESL\_GETOPTS} object.\\ \hyperlink{func:esl_getopts_Dump()}{\ccode{esl\_getopts\_Dump()}} & Dumps a summary of a \ccode{ESL\_GETOPTS} configuration.\\ \apisubhead{Setting and testing a configuration}\\ \hyperlink{func:esl_opt_ProcessConfigfile()}{\ccode{esl\_opt\_ProcessConfigfile()}} & Parses options in a config file.\\ \hyperlink{func:esl_opt_ProcessEnvironment()}{\ccode{esl\_opt\_ProcessEnvironment()}} & Parses options in the environment.\\ \hyperlink{func:esl_opt_ProcessCmdline()}{\ccode{esl\_opt\_ProcessCmdline()}} & Parses options from the command line.\\ \hyperlink{func:esl_opt_ProcessSpoof()}{\ccode{esl\_opt\_ProcessSpoof()}} & Parses a string as if it were a command line.\\ \hyperlink{func:esl_opt_VerifyConfig()}{\ccode{esl\_opt\_VerifyConfig()}} & Validates configuration after options are set.\\ \hyperlink{func:esl_opt_ArgNumber()}{\ccode{esl\_opt\_ArgNumber()}} & Returns number of command line arguments.\\ \hyperlink{func:esl_opt_SpoofCmdline()}{\ccode{esl\_opt\_SpoofCmdline()}}& Create faux command line from current option configuration.\\ \apisubhead{Retrieving option settings and command line args}\\ \hyperlink{func:esl_opt_IsDefault()}{\ccode{esl\_opt\_IsDefault()}} & Returns \ccode{TRUE} if option remained at default setting.\\ \hyperlink{func:esl_opt_IsOn()}{\ccode{esl\_opt\_IsOn()}} & Returns \ccode{TRUE} if option is set.\\ \hyperlink{func:esl_opt_IsUsed()}{\ccode{esl\_opt\_IsUsed()}} & Returns \ccode{TRUE} if option is on, but not default.\\ \hyperlink{func:esl_opt_GetBoolean()}{\ccode{esl\_opt\_GetBoolean()}} & Retrieve \ccode{TRUE}/\ccode{FALSE} for a boolean option.\\ \hyperlink{func:esl_opt_GetInteger()}{\ccode{esl\_opt\_GetInteger()}} & Retrieve value of an integer option.\\ \hyperlink{func:esl_opt_GetReal()}{\ccode{esl\_opt\_GetReal()}} & Retrieve value of a real-valued option.\\ \hyperlink{func:esl_opt_GetChar()}{\ccode{esl\_opt\_GetChar()}} & Retrieve value of a character option.\\ \hyperlink{func:esl_opt_GetString()}{\ccode{esl\_opt\_GetString()}} & Retrieve value of a string option.\\ \hyperlink{func:esl_opt_GetArg()}{\ccode{esl\_opt\_GetArg()}} & Retrieve numbered command line argument.\\ \hyperlink{func:esl_opt_DisplayHelp()}{\ccode{esl\_opt\_DisplayHelp()}} & Formats one-line help for each option.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{getopts} API.} \label{tbl:getopts_api} \end{table} \subsection{An example of using the getopts API} Figure~\ref{fig:getopts_example} shows an example of using five short options (including help) and two long options, without using any of getopts' optional validation or configuration mechanisms. The steps are: \begin{figure} \input{cexcerpts/getopts_example} \caption{An example of using the \eslmod{getopts} module.} \label{fig:getopts_example} \end{figure} \begin{itemize} \item The application defines an array of \ccode{ESL\_OPTIONS} structures, one per option. Name, type, and default value fields are required. The other fields are optional (though the help string shouldn't be left NULL unless you're being lazy). The array is terminated by an entry of all 0's. \item An application typically defines a helpful ``usage'' string, which it prints out as part of help messages or error messages. The \eslmod{getopts} module doesn't need this, though, so you're free to format your messages however you like. \item A \ccode{ESL\_GETOPTS} object is created, using the options array. At this point, all options are initialized to default values inside the object. \item The application now processes option settings from the command line, environment variables, and one or more configuration files. The application can do this in any precedence order it chooses. In the example, only the command line is processed. \item The call to \ccode{esl\_opt\_VerifyConfig(go)} validates the configuration, before you attempt to retrieve any information from it. \item Many of my applications (including Easel applications) typically look for a \ccode{-h} option immediately, to print a short help page. This isn't required by \eslmod{getopts}. \item The application will typically retrieve, validate, and store its non-optional command line arguments in order and one at a time using \ccode{esl\_opt\_GetArg()} calls early in the program. \item The application may then go off and do its thing, using \ccode{\_Get*()} calls (and \ccode{\_IsUsed()} and \ccode{\_IsDefault()} calls) to retrieve option information when needed. \item On exit, the \ccode{ESL\_GETOPTS} object is free'd. This object is the only place where memory is allocated. Any string retrieved as an option or argument, for example, is a pointer to internal memory maintained by the object. This makes it dangerous to free the object until you know you're not accessing any pointers it's returned to you, unless you've made copies. \end{itemize} An example of running this program: \begin{cchunk} % ./getopts_example -ax 0.3 -n 42 --file foo --char x baz Option -a: on Option -b: on Option -n: 42 Option -s: hi! Option -x: 0.300000 Option --file: foo Option --char: x Cmdline arg: baz \end{cchunk} Note that because we set the default value of \ccode{-b} to TRUE in this example, it is always on whether we use the \ccode{-b} option or not. \subsection{Defining options in the \ccodeincmd{ESL\_OPTIONS} array} Since you define your options in a static array of \ccode{ESL\_OPTIONS} structures, you need to know what an \ccode{ESL\_OPTIONS} structure contains. The \ccode{ESL\_OPTIONS} structure is declared in \ccode{getopts.h} as: \input{cexcerpts/options_object} Each of these fields in the options array is described in detail below: \subsubsection{Legal option names} All options must start with '-'. Options that start with one '-' are \textbf{short options}. Options that start with \ccode{--} are \textbf{long options}. Short option names must be a single alphanumeric character: \ccode{-n} or \ccode{-1}, for example. Short options can be concatenated on the command line: \ccode{-abc} is the same as \ccode{-a -b -c}. Long option names should contain only alphanumeric characters, \ccode{-}, or \ccode{\_}: \ccode{--foo} or \ccode{--foo-tastic}, for example. They must not contain space, tab, newline, \ccode{=}, or \ccode{,} characters, which will certainly confuse the option argument parsers. Other characters may happen to work, but nonetheless should not be used. Long options can be abbreviated (unambiguously) on the command line: if \ccode{--foobar} is an option, \ccode{--f} works too, so long as no other long option starts with the same prefix \ccode{--f}. You should avoid using option names that look like negative numbers if any of your other options would accept that value as a valid argument, so that Easel can robustly detect when a user forgets an option argument on the command line. For example, if \ccode{-n} takes an integer argument and \ccode{-1} is an option, and a user types \ccode{-n -1} on a commandline, the \ccode{-1} will be parsed as \ccode{-n}'s option, even if the user meant the \ccode{-1} as an option and had forgotten to add an argument for \ccode{-n}. \subsubsection{Type checking} Seven argument types are recognized: % Any addition or subtraction to this list also requires updating % the c2optlist script in easel/devkit. \begin{center} \begin{tabular}{llll} \textbf{flag} & \textbf{description} & \textbf{abbrev} & \textbf{type checking} \\\hline \ccode{eslARG\_NONE} & Boolean switch (on/off) & n/a & n/a \\ \ccode{eslARG\_INT} & integer & \ccode{} & convertible by \ccode{atoi()}\\ \ccode{eslARG\_REAL} & float or double & \ccode{} & convertible by \ccode{atof()}\\ \ccode{eslARG\_CHAR} & one character & \ccode{} & single ASCII char \\ \ccode{eslARG\_STRING} & any string & \ccode{} & not checked\\ \ccode{eslARG\_INFILE} & an input filename & \ccode{} & not checked\\ \ccode{eslARG\_OUTFILE} & an output filename & \ccode{} & not checked\\ \end{tabular} \end{center} All arguments are declared, configured, and stored internally as strings in a \ccode{ESL\_GETOPTS} object. For arguments that are declared to be of types \ccode{eslARG\_INT}, \ccode{eslARG\_REAL}, or \ccode{eslARG\_CHAR}, the string is checked to be sure it can be completely converted to the declared type. Strings are of type \ccode{eslARG\_STRING}, and since any string is valid (including a NULL pointer), this type is not checked. An application can also declare an argument to be of type \ccode{eslARG\_STRING} if for some reason it wants to bypass type checking. The application would recover the option setting with \ccode{esl\_opt\_GetStringOption()} and then deal with any type conversion itself. Input and output filenames can be declared as \ccode{eslARG\_INFILE} and \ccode{eslARG\_OUTFILE}, respectively. Currently both are unchecked types that are treated the same as a \ccode{eslARG\_STRING}, except that their arguments are indicated as \ccode{} instead of \ccode{} in help output. In the future, it might be useful to automatically check that input files exist and can be read, and that output files can be written. \subsubsection{Default values} Since the \ccode{ESL\_GETOPTS} object stores all values internally as strings, default settings in the options array are also all provided as strings. For any type of option, \ccode{NULL}, \ccode{FALSE}, or 0 are all interpreted as the option being unset (OFF). Any non-NULL string value is interpreted as the option being set (ON). For boolean defaults, any non-NULL string is interpreted as \ccode{TRUE}, and the option is ON. For a boolean option that is ON by default, the only place where the string value matters is in formatting option help, where this string will be displayed as the default setting. Therefore, strings like \ccode{"default"}, \ccode{"on"}, or \ccode{"true"} would be typical, to make the help string look right. Note that the syntax here is a little weird. The quotes around \ccode{"true"} and the absence of quotes around \ccode{FALSE} are important. \ccode{FALSE}, \ccode{NULL}, and \ccode{0} are all identical in the internal representation (evaluating to a null pointer). Integer, real-valued, and character arguments must be provided as strings: ``42'' not 42, ``1.0'' not 1.0, and ``x'' not 'x'. String arguments can be set to any string. Sometimes you want to have an option that is off by default, but can be optionally set to a value. That is, you may want to combine a boolean switch and a integer-, real-, char-, or string-valued option. To do this, make the default value \ccode{NULL}, which means ``unset'', and when your code checks for the value of such an option, it must first use \ccode{esl\_opt\_IsOn()} to check if it's been set, before attempting to \ccode{esl\_opt\_Get*()} the value. There is no way to turn a boolean option off by a command line option, environment variable, or configuration file if its default setting is ON. Booleans (and strings, for that matter) can only be turned on when their option is selected. Booleans can be set to off by default, or toggled off indirectly by another option is turned on (see the section on toggle groups further below). The way to do this (to turn \ccode{-b} off) is to provide a counteroption (\ccode{--no-b}), and toggle-tie them together. \subsubsection{Connecting an option to an environment variable} When an option is connected to an environment variable, setting the environment variable has the same result as setting the option on the command line. To check and process environment variables, the application calls \ccode{esl\_opt\_ProcessEnvironment()}. Boolean options are set by setting the environment variable with no argument, for instance (in a C-shell), \begin{cchunk} % setenv FOO_DEBUGGING \end{cchunk} and other options are set by setting the environment variable to the appropriate argument, for instance (in a C-shell), \begin{cchunk} % setenv FOO_DEBUG_LEVEL 5 \end{cchunk} For example, if we connected the option name \ccode{--debug} to environment variable \ccode{"FOO\_DEBUGGING"} and option \ccode{--debuglevel} to environment variable \ccode{"FOO\_DEBUG\_LEVEL"} in an application \ccode{myapp}, then \begin{cchunk} % myapp --debug --debuglevel 5 \end{cchunk} is the same as \begin{cchunk} % setenv FOO_DEBUGGING % setenv FOO_DEBUG_LEVEL 5 % myapp \end{cchunk} An advantage of using environment variables is that if you want to configure some optional behavior more or less permanently, you can save yourself a lot of command line typing by setting that configuration in the environment (in your \ccode{.cshrc} or \ccode{.bashrc}, for example). \subsubsection{Range checking} If a non-NULL range is provided, a configured argument (including the specified default setting) will be checked to be sure it satisfies a lower bound, upper bound, or both. Range checking only applies to integer, real, and char arguments. Boolean and string arguments should set their range fields to NULL. In a range string, a character \ccode{n}, \ccode{x}, or \ccode{c} is used to represent the argument. Bounds may either be exclusive ($<$ or $>$) or inclusive ($>=$ or $<=$). Examples of range strings specifying lower bounds are \ccode{"n>=0"}, \ccode{"x>1.0"}, and \ccode{"c>=A"}. Examples of range strings specifying upper bounds are \ccode{"n<0"}, \ccode{"x<=100.0"}, and \ccode{"c<=Z"}. Examples of range strings specifying both lower and upper bounds are \ccode{"0}, one could set \ccode{required\_opts} to \ccode{"--foomode"} for the option \ccode{--foolevel}. Required options are validated when the application calls \ccode{esl\_opt\_VerifyConfig()}, presumably after all configuration information has been processed. This delayed verification allows the primary options to be set anywhere and in any order, before or after secondary options are set. The \ccode{incompat\_opts} field is the converse of \ccode{required\_opts}.It specifies a comma-delimited list of options that may \emph{not} also be on if option X is on. \subsubsection{Example of a more fully featured \ccode{ESL\_OPTIONS} array} The test driver in \ccode{getopts.c} uses an options array that exercises all the optional features at least once: \input{cexcerpts/getopts_bigarray} \subsection{Formatting help} The \ccode{esl\_opt\_DisplayHelp()} function is intended to streamline the job of printing a brief help message, reminding the user of the command line options. It uses the help string to produce output like (from the example code above): \begin{cchunk} % ./example -h Usage: ./example [-options] where options are: -h : show help and usage -a : a boolean switch -b : another boolean switch [default] -n : an integer argument [0] -x : a real-valued argument [1.0] --file : long option, with filename arg --char : long option, with character arg \end{cchunk} One line is printed for each option, in the same order that they appear in the \ccode{ESL\_OPTIONS} array. The line is constructed from the mandatory option name, the mandatory argument type, and the optional help string. If there is room on the lines, default values are shown in brackets (when they are on or non-\ccode{NULL}). This display is all or none; if any line is too long, no default values are displayed. If there is still room on the lines, range restrictions are shown in parentheses. Like the default values, this display is also all or none. The amount of space on the line (in characters) is specified by the \ccode{textwidth} argument to \ccode{esl\_opt\_DisplayHelp()}, which might typically be 80. If any line is too long even without printing a default value and range restriction, an error is thrown; you need to either shorten the help string or increase the specified \ccode{textwidth}. (This is not a memory allocation issue. \ccode{textwidth} is provided as a tool to help you keep all your text within the bounds of a user's terminal window, and warn you when you're going to wrap or truncate lines.) You can indent all the lines by some number of spaces using the \ccode{indent} argument, which was set to 2 in the example above. The base behavior of \ccode{esl\_opt\_DisplayHelp()} is to show all the options in one list. You might want to have separate lists. For example, you might want to consider some options as ``expert'' options, and only show help for those when a user really asks for it. Or you might simply want to group your options into sections, with different headers. This is what the \ccode{docgrouptag} field is for in the \ccode{ESL\_OPTIONS} structure. If you pass \ccode{esl\_opt\_DisplayHelp()} a nonzero value for \ccode{docgroup}, it will only show help lines for options that have a matching \ccode{docgrouptag}. If you had some options with a \ccode{docgrouptag} of 1, and some more options with a \ccode{docgrouptag} of 2, you could format them into two help sections with this: \begin{cchunk} if (show_help) { puts(usage); puts("\n where some options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1=docgroup 1; 2=indentation; 80=width */ puts("\n and some more options are:"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); /* 1=docgroup 2; 2=indentation; 80=width */ return 0; } \end{cchunk} which, if you modified the above example in this way (setting the first three options to have a \ccode{docgrouptag} of 1 and the other four to be 2) would give you: \begin{cchunk} ./example -h Usage: ./example [-options] where some options are: -h : show help and usage -a : a boolean switch -b : another boolean switch [default] and some more options are: -n : an integer argument [0] -x : a real-valued argument [1.0] --file : long option, with filename arg --char : long option, with character arg \end{cchunk} \subsection{Command line parsing, config files, and the environment} Once a \ccode{ESL\_GETOPTS} object has been loaded with an options array and initialized to default state by \ccode{esl\_getopts\_Create()}, a \ccode{esl\_opt\_ProcessCmdline()} call then processes all the options on the command line, updating the configuration. Internally, the object keeps track of where the options end and command line arguments begin. The macro \ccode{esl\_opt\_ArgNumber()} returns the number of arguments remaining after the options. Calls to \ccode{esl\_opt\_GetArg()} recover the command line arguments by number. The getopts module can configure options not only via the command line, but via environment and/or config files. Connections to the environment -- the \ccode{env\_var} field of the options array -- are processed by a \ccode{esl\_opt\_ProcessEnvironment()} call. An open config file is processed by a \ccode{esl\_opt\_ProcessConfigfile()} call. (The format of a config file is described below.) The application may process any number of config files -- for instance, there may be a master configuration installed in a system directory, and a personalized configuration in a user's home directory. The order of the different \ccode{Process*()} calls defines the precedence of who overrides who. For example, in the following code fragment: \begin{cchunk} ESL_GETOPTS *g; /* a created, initialized getopts config */ FILE *masterfp; /* a master config file, open for reading */ FILE *userfp; /* a user's config file, open for reading */ esl_opt_ProcessConfigfile(g, "/usr/share/myapp/master.cfg", masterfp); esl_opt_ProcessConfigfile(g, "~/.myapp.cfg", userfp); esl_opt_ProcessEnvironment(g); esl_opt_ProcessCmdline(g, argc, argv); \end{cchunk} the precedence is defined as: defaults, master config file, local config file, environment, command line arguments. \subsection{Configuring an application that uses getopts} (This section might usefully by cut and pasted into the documentation for a specific application, with modifications as appropriate.) \subsubsection{Command line option syntax} Command line syntax is essentially identical to the syntax used by GNU programs. Options must precede the mandatory arguments. Options are either short or long. Short options are a single character preceded by a single \ccode{-}; for example, \ccode{-a}. Long options are preceded by two dashes, and can have any wordlength; for example, \ccode{--option1}. If a short option takes an argument, the argument may either be attached (immediately follows the option character) or unattached (a space between the optchar and the argument. For example, \ccode{-n5} and \ccode{-n 5} both specify an argument \ccode{5} to option \ccode{-n}. Short options can be concatenated into a string of characters; \ccode{-abc} is equivalent to \ccode{-a -b -c}. (Concatenation may only be used on the command line, not in configuration files or in fields of the \ccode{ESL\_OPTIONS} structure array.) Only the last option in such a string can take an argument, and the other options in the optstring must be simple on/off booleans. For example, if \ccode{-a} and \ccode{-b} are boolean switches, and \ccode{-W} takes a \ccode{} argument, either \ccode{-abW foo} or \ccode{-abWfoo} is correct, but \ccode{-aWb foo} is not. For a long option that takes an argument, the argument can be provided either by \ccode{--foo arg} or \ccode{--foo=arg}. Long options may be abbreviated, if the abbreviation is unambiguous; for instance, \ccode{--foo} or \ccode{--foob} suffice to active an option \ccode{--foobar}. (Like concatenation of short options, abbreviation of long options is a shorthand that may only be used on the command line.) Multi-word arguments may be quoted: for example, \ccode{--hostname "my host"} or \ccode{-s="my string"}. Nonnumeric arguments may not start with '-' unless you use an argument-attached syntax: \ccode{-W-myarg} and \ccode{--foo=-myarg} are accepted, but \ccode{-W myarg} or \ccode{--foo -myarg} will result in an error message. This is so if you forget a required argument on the command line, we don't silently parse the following option as that argument. Numeric arguments aren't checked this way, but forgotten numeric argument errors would still usually be caught in typechecking (if \ccode{-n} takes an integer argument, \ccode{-n -a} would be an invalid argument error); stylistically, we want \ccode{-n -1} and \ccode{--param -1} to be a valid way of passing negative-valued arguments. However, this does mean that some forgotten numeric argument cases will be undetectable by Easel: in the case where \ccode{-n} takes an integer argument, \ccode{-1} is a valid option, and the user types \ccode{-n -1}, the \ccode{-1} is parsed as \ccode{-n}'s option. \subsubsection{Configuration file format} Each line of a configuration file contains an option and an argument (if the option takes an argument). Blank lines are ignored. Anything following a \ccode{\#} character on a line is a comment and is ignored. The syntax of options and arguments is stricter than on command lines. Concatenation of short options is not allowed, abbreviation of long options is not allowed, and arguments must always be separated from options by whitespace (not by \ccode{=}). For example: \begin{cchunk} # Customized configuration file for my application. # -a # Turn -a on. -b # Turn -b on. -W arg # Set -W to "arg" --multi "one two three" # Multiword args can be quoted. \end{cchunk} hmmer-3.1b2/easel/esl_recorder.c0000664361611702660230000010766312473612607016215 0ustar wheelerteddy/* Saving history in a line-based input stream * * Contents: * 1. The object * 2. Using the * 3. Internal (static) functions * 4. Benchmark driver * 5. Unit tests * 6. Test driver * 7. Examples * 8. Copyright and license * */ #include "esl_config.h" #include #include "easel.h" #include "esl_recorder.h" static void linearray_reverse(ESL_RECORDER *rc, int pos, int n); static int recorder_new_baseline(ESL_RECORDER *rc, int newbase); /***************************************************************** * 1. The object *****************************************************************/ /* Function: esl_recorder_Create() * Synopsis: Create an . * Incept: SRE, Fri Dec 25 16:27:40 2009 [Casa de Gatos] * * Purpose: Allocate a new that will read * line-by-line from input stream , saving * a history of up to lines. * * Returns: pointer to the new on success. * * Throws: on allocation failure. */ ESL_RECORDER * esl_recorder_Create(FILE *fp, int maxlines) { ESL_RECORDER *rc = NULL; int i; int status; ESL_ALLOC(rc, sizeof(ESL_RECORDER)); rc->fp = fp; rc->line = NULL; rc->nalloc = maxlines; rc->lalloc = NULL; rc->offset = NULL; rc->nread = 0; rc->ncurr = 0; rc->baseline = 0; rc->markline = -1; ESL_ALLOC(rc->line, sizeof(char *) * rc->nalloc); for (i = 0; i < rc->nalloc; i++) rc->line[i] = NULL; ESL_ALLOC(rc->lalloc, sizeof(int) * rc->nalloc); for (i = 0; i < rc->nalloc; i++) rc->lalloc[i] = 0; ESL_ALLOC(rc->offset, sizeof(off_t) * rc->nalloc); for (i = 0; i < rc->nalloc; i++) rc->offset[i] = 0; return rc; ERROR: esl_recorder_Destroy(rc); return NULL; } /* Function: esl_recorder_ResizeTo() * Synopsis: Reallocate an for a new * Incept: SRE, Fri Dec 25 17:02:46 2009 [Casa de Gatos] * * Purpose: Reallocate the to have a new * window size . * * The new may be more or less than the previous * window size for . * * Returns: on success. * * Throws: if (re-)allocation fails. * * if the recorder has a marked line (for start * of a block) and you try to shrink it so much that that * marked line would be lost. * * on any baseline resetting problem; * this would have to be an internal error in the module. * * Note: We may have to repermute the line array, and reset its * baseline, as follows. * * In the growth case: if the line array is out of order * (circularly permuted) we must straighten it out, which * means resetting the baseline. * i.e. to grow 3 1 2 to nalloc=6, we need 1 2 3 x x x; * simple reallocation to 3 1 2 x x x doesn't work, * next read would make 3 4 2 x x x. * * In the shrinkage case: if the line array is in use beyond the * new array size, we set a new baseline to keep as much of the * old array as possible. * * i.e. for 6->3 * 1 2 3 x x x -> 1 2 3 * 1 2 3 4 x x -> 2 3 4 with new baseline=2. * 4 5 0 1 2 3 -> 3 4 5 with new baseline=3 */ int esl_recorder_ResizeTo(ESL_RECORDER *rc, int new_maxlines) { int idx; int newbase; void *tmp; int minlines; int status; if (new_maxlines == rc->nalloc) return eslOK; if (new_maxlines > rc->nalloc) /* growth case */ { if ((rc->nread - rc->baseline) / rc->nalloc != 0) /* array is permuted; reorder it */ { newbase = ESL_MAX(rc->baseline, rc->nread - rc->nalloc); status = recorder_new_baseline(rc, newbase); if (status) ESL_EXCEPTION(eslEINCONCEIVABLE, "baseline reset failed unexpectedly"); } } else /* shrinkage case */ { /* check that the marked line (if any) will stay in window */ if (rc->markline >= 0) { minlines = rc->nread - rc->markline; if (new_maxlines < minlines) ESL_EXCEPTION(eslEINVAL, "can't shrink that far without losing marked line"); } /* check that current line will stay in window */ minlines = rc->nread - rc->ncurr + 1; if (new_maxlines < minlines) ESL_EXCEPTION(eslEINVAL, "can't shrink that far without losing current line"); if (rc->nread - rc->baseline > new_maxlines) /* baseline needs to move up */ { newbase = rc->nread - new_maxlines; status = recorder_new_baseline(rc, newbase); if (status) ESL_EXCEPTION(eslEINCONCEIVABLE, "baseline reset failed unexpectedly"); } for (idx = new_maxlines; idx < rc->nalloc; idx++) if (rc->line[idx]) free(rc->line[idx]); } ESL_RALLOC(rc->line, tmp, sizeof(char *) * new_maxlines); ESL_RALLOC(rc->lalloc, tmp, sizeof(int) * new_maxlines); ESL_RALLOC(rc->offset, tmp, sizeof(off_t) * new_maxlines); for (idx = rc->nalloc; idx < new_maxlines; idx++) /* no-op in shrinkage case */ { rc->line[idx] = NULL; rc->lalloc[idx] = 0; rc->offset[idx] = 0; } rc->nalloc = new_maxlines; return eslOK; ERROR: return status; } /* Function: esl_recorder_GetFirst() * Synopsis: Returns the earliest linenumber stored. * Incept: SRE, Sat Jan 2 13:18:38 2010 [Zaragoza] * * Purpose: Returns the earliest line number that is * stored in the recorder . */ int esl_recorder_GetFirst(ESL_RECORDER *rc) { return (ESL_MAX(rc->baseline, rc->nread-rc->nalloc)); } /* Function: esl_recorder_GetLast() * Synopsis: Returns the furthest linenumber stored. * Incept: SRE, Sat Jan 2 13:19:45 2010 [Zaragoza] * * Purpose: Returns the furthest line number that is * stored in the recorder -- the furthest * we have read into the input stream so far. * (This is not necessarily the current * position in the stream, if we have repositioned.) */ int esl_recorder_GetLast(ESL_RECORDER *rc) { return (rc->nread-1); } /* Function: esl_recorder_GetCurrent() * Synopsis: Returns the current line number. * Incept: SRE, Sat Jan 2 13:21:13 2010 [Zaragoza] * * Purpose: Returns the current line number -- the * line number most recently returned by * a call to ncurr-1); } /* Function: esl_recorder_GetNext() * Synopsis: Returns the next line number. * Incept: SRE, Sat Jan 2 13:21:13 2010 [Zaragoza] * * Purpose: Returns the next line number that would * be read by a call to ncurr); } /* Function: esl_recorder_Destroy() * Synopsis: Frees an . * Incept: SRE, Fri Dec 25 16:30:14 2009 [Casa de Gatos] * * Purpose: Frees the . * * Returns: (void). */ void esl_recorder_Destroy(ESL_RECORDER *rc) { int i; if (rc == NULL) return; if (rc->offset) free(rc->offset); if (rc->lalloc) free(rc->lalloc); if (rc->line) { for (i = 0; i < rc->nalloc; i++) if (rc->line[i]) free(rc->line[i]); free(rc->line); } free(rc); return; } /*--------------- end, object --------------------*/ /***************************************************************** * 2. Using the *****************************************************************/ /* Function: esl_recorder_Read() * Synopsis: Read next line of a stream through an . * Incept: SRE, Fri Dec 25 16:31:00 2009 [Casa de Gatos] * * Purpose: Read the next line of the input stream that the * is recording. Return a ptr to * it in <*opt_line>. Note that the * deals with allocation and freeing of this line; * if caller wants to keep it for something, it must * make a copy immediately, because subsequent calls * to functions may overwrite these * internal memory buffers. * * Returns: on success. * if no more lines exist in the stream. * * Throws: on an allocation failure. */ int esl_recorder_Read(ESL_RECORDER *rc, char **opt_line) { int idx = (rc->ncurr - rc->baseline) % rc->nalloc; /* index of line to read, in wrapped coords */ int status; /* if currline <= lastline, we already have the line recorded; * else we need to read a new one from */ if (rc->ncurr >= rc->nread) { /* if reading a new line would overwrite our marked start, grow */ if ( rc->markline >= 0 && ((rc->ncurr - rc->baseline) % rc->nalloc == ((rc->markline - rc->baseline) % rc->nalloc))) { int xtra = ESL_MAX(3, (rc->nalloc / 3)); status = esl_recorder_ResizeTo(rc, rc->nalloc + xtra); if (status) goto ERROR; idx = (rc->ncurr - rc->baseline) % rc->nalloc; } rc->offset[idx] = ftello(rc->fp); status = esl_fgets(&(rc->line[idx]), &(rc->lalloc[idx]), rc->fp); if (status) goto ERROR; rc->nread++; } rc->ncurr++; if (opt_line) *opt_line = rc->line[idx]; return eslOK; ERROR: if (opt_line) *opt_line = NULL; return status; } /* Function: esl_recorder_Position() * Synopsis: Reset the recorder to a new starting line position. * Incept: SRE, Mon Dec 28 10:25:22 2009 [Casa de Gatos] * * Purpose: Reset the recorder to a new line position , * starting from 0. The next call to * will read this line. * * The can be ahead of the furthest line read * by the recorder so far, in which case it calls * until it reaches the proper * position. This can result in a return code of , * if no such line exists in the stream. * * If the falls before (outside) the * recorder's history window, an exception is * thrown. * * Returns: on success. * if is larger than current position * in file, and the stream ends before line is * reached. * * Throws: on allocation failure; this can only happen * if is larger than current position in * file, forcing calls to reach that * line. */ int esl_recorder_Position(ESL_RECORDER *rc, int linenumber) { /* The recorder stores lines MAX(baseline,)..-1 */ int line0 = ESL_MAX(rc->baseline, rc->nread - rc->nalloc); int status; if (linenumber < line0) ESL_EXCEPTION(eslEINVAL, "recorder's window is past that line"); if (linenumber >= rc->nread) { while (rc->nread < linenumber) if ((status = esl_recorder_Read(rc, NULL)) != eslOK) return status; } rc->ncurr = linenumber; return eslOK; } /* Function: esl_recorder_MarkBlock() * Synopsis: Mark first line to be saved in a block. * Incept: SRE, Fri Jan 1 11:13:53 2010 [Magallon] * * Purpose: Mark line number (0..N-1) in a file being read * through the as the first line in a * block of lines to be parsed later, when the end of * the block is found. * * This mark makes sure that the will keep * the entire block of lines in memory, starting at or * before the mark. When a mark is active, * will reallocate and grow the * recorder as necessary, rather than overwriting the mark. * * Returns: on success. * * Throws: if the has already passed out * of the recorder's memory. */ int esl_recorder_MarkBlock(ESL_RECORDER *rc, int markline) { int line0 = ESL_MAX(rc->baseline, rc->nread - rc->nalloc); if (markline < line0) ESL_EXCEPTION(eslEINVAL, "recorder window already passed marked line"); rc->markline = markline; return eslOK; } /* Function: esl_recorder_UnmarkBlock() * Synopsis: Remove a marked start of a block. * Incept: SRE, Fri Jan 1 12:47:32 2010 [Magallon] * * Purpose: Release the mark in the , if any. * * The recorder will no longer reallocate and grow to keep * the marked line in memory. * * Returns: on success. * * Throws: (no abnormal error conditions) */ int esl_recorder_UnmarkBlock(ESL_RECORDER *rc) { rc->markline = -1; return eslOK; } /* Function: esl_recorder_GetBlock() * Synopsis: Get a block of lines from a recorder, starting at the mark. * Incept: SRE, Fri Jan 1 12:50:33 2010 [Magallon] * * Purpose: Get pointers into the internal memory arrays of the * recorder , starting at the marked start of a block * and ending at the most recently read line ncurr-1>, * so you can parse a block of lines. * * Because these pointers are internally managed by the * recorder , they should not be freed or reallocated * or things like that. You should also avoid calling any * functions until you're done accessing * these data, in case a function call alters the internal * state of the object. * * If you do something that changes the contents of the * lines (like strtok()'ing them), those changes will be * preserved -- if you want to leave the original recorder * data untouched and you need a temporary working copy of * the data, you should make that copy yourself. * * Args: opt_lines : ptr to array of lines, indexed [0..*opt_nlines-1]; * starting with line markline> and ending with * ncurr-1>, in order. * opt_lalloc : array of memory allocations for each line * opt_offset : array of offsets into input stream for start of each line * opt_nlines : number of lines (minimally) valid in these arrays, * starting from the mark and ending at the most recent * line read. * * Returns: on success. * * Throws: (no abnormal error conditions) */ int esl_recorder_GetBlock(ESL_RECORDER *rc, char ***opt_lines, int **opt_lalloc, off_t **opt_offset, int *opt_nlines) { int idx0, idx1; int status; /* Everything from the markline to ncurr-1 must be in order and not * permuted. If it isn't in proper order, then reorder the recorder * to have ncurr-1 in last array position. */ idx0 = (rc->markline - rc->baseline) % rc->nalloc; idx1 = (rc->ncurr-1 - rc->baseline) % rc->nalloc; if (idx0 > idx1) { if ((status = recorder_new_baseline(rc, rc->ncurr-rc->nalloc)) != eslOK) goto ERROR; idx0 = (rc->markline - rc->baseline) % rc->nalloc; } if (opt_lines) *opt_lines = rc->line + idx0; if (opt_lalloc) *opt_lalloc = rc->lalloc + idx0; if (opt_offset) *opt_offset = rc->offset + idx0; if (opt_nlines) *opt_nlines = rc->ncurr - rc->markline; return eslOK; ERROR: if (opt_lines) *opt_lines = NULL; if (opt_lalloc) *opt_lalloc = NULL; if (opt_offset) *opt_offset = NULL; if (opt_nlines) *opt_nlines = 0; return status; } /*----------------- end, using ESL_RECORDER ---------------------*/ /***************************************************************** * 3. Internal (static) functions *****************************************************************/ /* linearray_reverse() * In-place O(N) reversal of a subsection of the line array data, * starting at i=pos, for n positions. */ static void linearray_reverse(ESL_RECORDER *rc, int pos, int n) { int i; char *tmps; int tmpi; off_t tmpo; /* the line array itself */ for (i = 0; i < n/2; i++) { tmps = rc->line[pos+n-i-1]; rc->line[pos+n-i-1] = rc->line[pos+i]; rc->line[pos+i] = tmps; } /* the line allocation array */ for (i = 0; i < n/2; i++) { tmpi = rc->lalloc[pos+n-i-1]; rc->lalloc[pos+n-i-1] = rc->lalloc[pos+i]; rc->lalloc[pos+i] = tmpi; } /* the offset array */ for (i = 0; i < n/2; i++) { tmpo = rc->offset[pos+n-i-1]; rc->offset[pos+n-i-1] = rc->offset[pos+i]; rc->offset[pos+i] = tmpo; } } /* recorder_new_baseline() * SRE, Fri Jan 1 09:00:55 2010 [Zaragoza] * * Set a ESL_RECORDER to a new baseline , [0..N-1], * greater than the previous baseline in the recorder. * * In general, must succeed, returning . If new baseline * is <= old one, throws , but you shouldn't do that. * * This is done in place in O(1) memory (no addiional or temporary * allocation) and O(nalloc) time, using a trick: we can redo any * circular permutation by no more than four in-place substring * reversals: * * 456|123 -> 654|321 -> 65|4321 -> 56|1234 * (reversals) (new brkpt) (reversals) * * Some possible cases (all examples nalloc=7) * 0 1 2 3 4 x x nread=5 [still filling the circle] * 0 1 2 3 4 5 6 nread=7 [full, no wrapping yet] * 7 8 2 3 4 5 6 nread=9 [wrapped] * 7 8 9 10 11 12 13 nread=14 [back in order] * 2 3 4 x x x x nread=5 baseline=2 * 2 3 4 5 6 7 8 nread=9 baseline=2 * 9 10 4 5 6 7 8 nread=11 baseline=2 * 9 10 11 12 13 14 15 nread=16 baseline=2 * * By reversing the two substrings (lengths n1 and n2), we now have a * complete string in reverse order. Our examples now look like: * n1 n2 * 5 0 4 3 2 1 0 x x * 7 0 6 5 4 3 2 1 0 * 2 5 8 7 6 5 4 3 2 * 7 0 13 12 11 10 9 8 7 * 3 0 4 3 2 x x x x * 7 0 8 7 6 5 4 3 2 * 2 5 10 9 8 7 6 5 4 * 7 0 15 14 13 12 11 10 9 * * After reversing two substrings calculated under the new * baseline, our work is done. For example, if newbase=1, * our first set of examples would look like: * n1 n2 * 4 0 1 2 3 4 [0 x x] * 6 0 1 2 3 4 5 6 [0] * 1 6 8 2 3 4 5 6 7 * 6 1 8 9 10 11 12 13 7 * and for newbase=3, the second set look like: * 2 0 3 4 [2 x x x x] * 6 0 3 4 5 6 7 8 [2] * 1 6 10 4 5 6 7 8 9 * 6 1 10 11 12 13 14 15 9 */ static int recorder_new_baseline(ESL_RECORDER *rc, int newbase) { int n1, n2; if (newbase < rc->baseline) ESL_EXCEPTION(eslEINVAL, "new baseline must be > old one"); if (newbase == rc->baseline) return eslOK; n1 = (rc->nread - rc->baseline) % rc->nalloc; n2 = ESL_MIN(rc->nread-rc->baseline, rc->nalloc) - n1; if (n1>1) linearray_reverse(rc, 0, n1); if (n2>1) linearray_reverse(rc, n1, n2); n1 = (rc->nread - newbase) % rc->nalloc; n2 = ESL_MIN(rc->nread - newbase, rc->nalloc) - n1; if (n1>1) linearray_reverse(rc, 0, n1); if (n2>1) linearray_reverse(rc, n1, n2); rc->baseline = newbase; return eslOK; } /*----------------- end, internal functions ---------------------*/ /***************************************************************** * 4. Benchmark driver *****************************************************************/ #ifdef eslRECORDER_BENCHMARK /* gcc -O2 -std=gnu99 -DeslRECORDER_BENCHMARK -o esl_recorder_benchmark -I. esl_recorder.c esl_stopwatch.c esl_getopts.c easel.c */ #include #include "easel.h" #include "esl_getopts.h" #include "esl_recorder.h" #include "esl_stopwatch.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-N", eslARG_INT, "1000", NULL, "n>0", NULL, NULL, NULL, "set recorder window size in lines", 0 }, { 0,0,0,0,0,0,0,0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmarking speed of ESL_RECORDER reading"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RECORDER *rc = NULL; char *filename = esl_opt_GetArg(go, 1); int N = esl_opt_GetInteger(go, "-N"); FILE *fp = NULL; char *buf = NULL; int balloc = 0; int status; if ((fp = fopen(filename, "r")) == NULL) esl_fatal("no such file %s\n", filename); rc = esl_recorder_Create(fp, N); esl_stopwatch_Start(w); while ((status = esl_recorder_Read(rc, &buf)) == eslOK); esl_recorder_Destroy(rc); fclose(fp); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "recorder time: "); if ((fp = fopen(filename, "r")) == NULL) esl_fatal("no such file %s\n", filename); esl_stopwatch_Start(w); while ((status = esl_fgets(&buf, &balloc, fp)) == eslOK); free(buf); fclose(fp); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "esl_fgets() time: "); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*eslRECORDER_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 5. Unit tests *****************************************************************/ #ifdef eslRECORDER_TESTDRIVE #include "esl_random.h" static void generate_testfile(ESL_RANDOMNESS *rng, char *tmpfile, int *is_data, int nlines) { char *msg = "esl_recorder:: test file generator failed"; FILE *fp = NULL; int in_block = esl_rnd_Roll(rng, 2); /* TRUE | FALSE */ int nblock = 1 + esl_rnd_Roll(rng, 10); /* 1..10 */ int i; if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg); for (i = 0; i < nlines; i++) { is_data[i] = in_block ? TRUE : FALSE; fprintf(fp, "%c%d\n", (in_block ? '#' : ' '), i); if (--nblock == 0) { in_block = ! in_block; nblock = 1 + esl_rnd_Roll(rng, 10); /* 1..10 */ } } fclose(fp); } static void utest_basic(char *tmpfile, int N) { char *msg = "esl_recorder:: basic unit test failed"; ESL_RECORDER *rc = NULL; FILE *fp = NULL; int i; char *buf; if ((fp = fopen(tmpfile, "r")) == NULL) esl_fatal(msg); if ((rc = esl_recorder_Create(fp, N)) == NULL) esl_fatal(msg); for (i = 0; i < N; i++) { if (esl_recorder_Read(rc, &buf) != eslOK) esl_fatal(msg); if (atoi(buf+1) != i) esl_fatal(msg); } if (esl_recorder_Read(rc, &buf) != eslEOF) esl_fatal(msg); if (buf != NULL) esl_fatal(msg); if (esl_recorder_Position(rc, 0) != eslOK) esl_fatal(msg); for (i = 0; i < N; i++) { if (esl_recorder_Read(rc, &buf) != eslOK) esl_fatal(msg); if (atoi(buf+1) != i) esl_fatal(msg); } if (esl_recorder_Read(rc, &buf) != eslEOF) esl_fatal(msg); fclose(fp); esl_recorder_Destroy(rc); } static void utest_grow(char *tmpfile, int N) { char *msg = "esl_recorder:: grow unit test failed"; ESL_RECORDER *rc = NULL; FILE *fp = NULL; int i; char *buf; if ((fp = fopen(tmpfile, "r")) == NULL) esl_fatal(msg); if ((rc = esl_recorder_Create(fp, 3)) == NULL) esl_fatal(msg); for (i = 0; i < 4; i++) { if (esl_recorder_Read(rc, &buf) != eslOK) esl_fatal(msg); if (atoi(buf+1) != i) esl_fatal(msg); } /* recorder has now wrapped: contains lines 3 1 2 */ if (esl_recorder_Position(rc, 0) != eslEINVAL) esl_fatal(msg); if (esl_recorder_Position(rc, 1) != eslOK) esl_fatal(msg); if (esl_recorder_ResizeTo(rc, 6) != eslOK) esl_fatal(msg); /* now 1 2 3 x x x */ for (i = 1; i < N; i++) { if (esl_recorder_Read(rc, &buf) != eslOK) esl_fatal(msg); if (atoi(buf+1) != i) esl_fatal(msg); } if (esl_recorder_Read(rc, &buf) != eslEOF) esl_fatal(msg); fclose(fp); esl_recorder_Destroy(rc); } static void utest_grow2(char *tmpfile, int N) { char *msg = "esl_recorder:: grow2 unit test failed"; ESL_RECORDER *rc = NULL; FILE *fp = NULL; int i; char *buf; if (N < 5) esl_fatal(msg); /* need at least this for this test */ if ((fp = fopen(tmpfile, "r")) == NULL) esl_fatal(msg); if ((rc = esl_recorder_Create(fp, 3)) == NULL) esl_fatal(msg); for (i = 0; i < 4; i++) { if (esl_recorder_Read(rc, &buf) != eslOK) esl_fatal(msg); if (atoi(buf+1) != i) esl_fatal(msg); } /* recorder has now wrapped: contains lines 3 1 2 */ if (esl_recorder_ResizeTo(rc, 6) != eslOK) esl_fatal(msg); /* recorder should now have reset baseline: 1 2 3 x x x */ if (esl_recorder_Read(rc, &buf) != eslOK) esl_fatal(msg); if (atoi(buf+1) != 4) esl_fatal(msg); /* now it should have 1 2 3 4 x x (and not 3 4 2 x x x, or x 1 2 3 4 x, for example) */ if (esl_recorder_Position(rc, 0) != eslEINVAL) esl_fatal(msg); if (esl_recorder_Position(rc, 1) != eslOK) esl_fatal(msg); for (i = 1; i < N; i++) { if (esl_recorder_Read(rc, &buf) != eslOK) esl_fatal(msg); if (atoi(buf+1) != i) esl_fatal(msg); } if (esl_recorder_Read(rc, &buf) != eslEOF) esl_fatal(msg); fclose(fp); esl_recorder_Destroy(rc); } static void utest_shrink(char *tmpfile, int N) { char *msg = "esl_recorder:: shrink unit test failed"; ESL_RECORDER *rc = NULL; FILE *fp = NULL; int i; char *buf; if ((fp = fopen(tmpfile, "r")) == NULL) esl_fatal(msg); if ((rc = esl_recorder_Create(fp, 6)) == NULL) esl_fatal(msg); for (i = 0; i < 7; i++) { if (esl_recorder_Read(rc, &buf) != eslOK) esl_fatal(msg); if (atoi(buf+1) != i) esl_fatal(msg); } /* recorder has now wrapped: contains lines 6 1 2 3 4 5 */ if (esl_recorder_ResizeTo(rc, 3) != eslOK) esl_fatal(msg); /* now it's 6 4 5 */ if (esl_recorder_Position(rc, 4) != eslOK) esl_fatal(msg); for (i = 4; i < N; i++) { if (esl_recorder_Read(rc, &buf) != eslOK) esl_fatal(msg); if (atoi(buf+1) != i) esl_fatal(msg); } if (esl_recorder_Read(rc, &buf) != eslEOF) esl_fatal(msg); fclose(fp); esl_recorder_Destroy(rc); } static void utest_block(ESL_RANDOMNESS *rng, char *tmpfile, int *is_data, int N) { char *msg = "esl_recorder:: block unit test failed"; ESL_RECORDER *rc = NULL; FILE *fp = NULL; int linenumber = 0; /* where we should be in the file */ int max_reposition = 2; int max_realloc = 2; int *nseen1 = NULL; /* # of times we Read() each line */ int *nseen2 = NULL; /* # of times we see each line in a block */ int minalloc; int roll; char *buf; char **block; int from; int n,i; int status = eslOK; if ((fp = fopen(tmpfile, "r")) == NULL) esl_fatal(msg); roll = 1+esl_rnd_Roll(rng, N+1); /* 1..N+1 */ if ((rc = esl_recorder_Create(fp, roll)) == NULL) esl_fatal(msg); if ((nseen1 = malloc(sizeof(int) * N)) == NULL) esl_fatal(msg); if ((nseen2 = malloc(sizeof(int) * N)) == NULL) esl_fatal(msg); for (i = 0; i < N; i++) nseen1[i] = 0; for (i = 0; i < N; i++) nseen2[i] = 0; while (status == eslOK) { /* skip nondata lines (no # prefix) */ do { if (esl_recorder_Read(rc, &buf) == eslEOF) goto DONE; if (atoi(buf+1) != linenumber) esl_fatal(msg); if (esl_recorder_GetCurrent(rc) != linenumber) esl_fatal(msg); nseen1[linenumber]++; linenumber++; } while (*buf != '#'); /* read block */ from = esl_recorder_GetCurrent(rc); esl_recorder_MarkBlock(rc, from); do { if ((status = esl_recorder_Read(rc, &buf)) == eslEOF) break; if (atoi(buf+1) != linenumber) esl_fatal(msg); if (esl_recorder_GetCurrent(rc) != linenumber) esl_fatal(msg); nseen1[linenumber]++; linenumber++; } while (*buf == '#'); /* get the block */ esl_recorder_GetBlock(rc, &block, NULL, NULL, &n); if (status == eslOK) n--; /* check the block */ for (i = 0; i < n; i++) { if (atoi(block[i]+1) != from+i) esl_fatal(msg); nseen2[from+i]++; } /* unmark it */ esl_recorder_UnmarkBlock(rc); /* some fraction of the time, reposition randomly */ if (status == eslOK && max_reposition && (roll = esl_rnd_Roll(rng, 5)) == 0) { linenumber = esl_recorder_GetFirst(rc) + esl_rnd_Roll(rng, esl_recorder_GetLast(rc) - esl_recorder_GetFirst(rc) + 1); if (esl_recorder_Position(rc, linenumber) != eslOK) esl_fatal(msg); max_reposition--; } /* some fraction of the time, shrink the allocation */ if (status == eslOK && max_realloc && (roll = esl_rnd_Roll(rng, 5)) == 0) { /* must keep at least nread-ncurr+1 lines, to keep curr line in window */ minalloc = rc->nread-rc->ncurr+1; roll = minalloc + esl_rnd_Roll(rng, rc->nalloc-minalloc+1); if (esl_recorder_ResizeTo(rc, roll) != eslOK) esl_fatal(msg); max_realloc--; } } DONE: /* we're EOF. We should be sitting on the last line. */ if (esl_recorder_GetCurrent(rc) != N-1) esl_fatal(msg); /* We should have Read() every line at least once. */ for (i = 0; i < N; i++) if (! nseen1[i]) esl_fatal(msg); /* In reading blocks, we should have seen each "data" line at least * once; non-data lines, not at all. */ for (i = 0; i < N; i++) { if ( is_data[i] && ! nseen2[i]) esl_fatal(msg); if (! is_data[i] && nseen2[i]) esl_fatal(msg); } fclose(fp); esl_recorder_Destroy(rc); free(nseen1); free(nseen2); } #endif /*eslRECORDER_TESTDRIVE*/ /*------------------- end, unit tests ---------------------------*/ /***************************************************************** * 6. Test driver *****************************************************************/ #ifdef eslRECORDER_TESTDRIVE /* gcc -O2 -std=gnu99 -DeslRECORDER_TESTDRIVE -o esl_recorder_utest -I. esl_recorder.c esl_stopwatch.c esl_getopts.c esl_random.c easel.c -lm */ #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_recorder.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "more verbose output", 0 }, { "-N", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "number of lines per test file", 0 }, { "-F", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of test files", 0 }, { 0,0,0,0,0,0,0,0 }, }; static char usage[] = "[-options] "; static char banner[] = "test driver for ESL_RECORDER"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *rng = esl_randomness_Create(esl_opt_GetInteger(go, "-s")); char template[13]= "esltmpXXXXXX"; char tmpfile[13]; int N = esl_opt_GetInteger(go, "-N"); int nfiles = esl_opt_GetInteger(go, "-F"); int *is_data = malloc(sizeof(int) * N); esl_exception_SetHandler(&esl_nonfatal_handler); if (esl_opt_GetBoolean(go, "-v")) { printf("random number seed: %" PRIu32 "\n", esl_randomness_GetSeed(rng)); } while (nfiles--) { strcpy(tmpfile, template); generate_testfile(rng, tmpfile, is_data, N); utest_basic (tmpfile, N); utest_grow (tmpfile, N); utest_grow2 (tmpfile, N); utest_shrink(tmpfile, N); utest_block (rng, tmpfile, is_data, N); remove(tmpfile); } free(is_data); esl_getopts_Destroy(go); esl_randomness_Destroy(rng); printf("ok\n"); return 0; } #endif /*eslRECORDER_TESTDRIVE*/ /*------------------- end, test driver --------------------------*/ /***************************************************************** * 7. Examples *****************************************************************/ #ifdef eslRECORDER_EXAMPLE /* gcc -g -Wall -std=gnu99 -DeslRECORDER_EXAMPLE -o esl_recorder_example -I. esl_recorder.c easel.c */ #include "easel.h" #include "esl_recorder.h" int main(int argc, char **argv) { FILE *fp = stdin; ESL_RECORDER *rc = esl_recorder_Create(fp, 10); char *line; int i; int status; printf("\nFirst time:\n"); for (i = 0; i < 10; i++) { if ((status = esl_recorder_Read(rc, &line)) != eslOK) break; /* watch for EOF */ fputs(line, stdout); } esl_recorder_Position(rc, 0); /* rewind to start */ printf("\nOne more time:\n"); for (i = 0; i < 10; i++) { if ((status = esl_recorder_Read(rc, &line)) != eslOK) break; fputs(line, stdout); } esl_recorder_Destroy(rc); return 0; } #endif /*eslRECORDER_EXAMPLE*/ #ifdef eslRECORDER_EXAMPLE2 /* gcc -g -Wall -std=gnu99 -DeslRECORDER_EXAMPLE2 -o esl_recorder_example2 -I. esl_recorder.c easel.c */ #include #include #include "easel.h" #include "esl_recorder.h" static int is_data(char *s) { if (*s == '#') return TRUE; // for (; *s; s++) if (! isspace(*s)) return TRUE; return FALSE; } int main(int argc, char **argv) { FILE *fp = fopen(argv[1], "r"); ESL_RECORDER *rc = esl_recorder_Create(fp, 10); char *line; char **block; int n; int nblocks=0; int i; int status = eslOK; while (status == eslOK) { /* skip lines without # */ do { if (esl_recorder_Read(rc, &line) == eslEOF) goto DONE; } while (! is_data(line)); /* read block */ esl_recorder_MarkBlock(rc, esl_recorder_GetCurrent(rc)); do { status = esl_recorder_Read(rc, &line); } while (status == eslOK && is_data(line)); /* get the block */ esl_recorder_GetBlock(rc, &block, NULL, NULL, &n); nblocks++; /* if we EOF'ed, n lines of block ended with the EOF; * else, last line was a blank line */ if (status == eslOK) n--; /* show it (exclusive of the trailing blank line */ printf("BLOCK %d\n", nblocks); for (i = 0; i < n; i++) printf("line %4d: %s", i+1, block[i]); printf("\n\n"); /* unmark it */ esl_recorder_UnmarkBlock(rc); } DONE: esl_recorder_Destroy(rc); fclose(fp); return 0; } #endif /*eslRECORDER_EXAMPLE2*/ /*------------------ end, example main() ------------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_recorder.c 685 2011-05-23 14:27:52Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_recorder.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_stopwatch.c0000664361611702660230000001676212473612607016423 0ustar wheelerteddy/* Tracking cpu/system/elapsed time used by a process. * * Thanks to Warren Gish for assistance. */ #include "esl_config.h" #include "easel.h" #include "esl_stopwatch.h" /***************************************************************** * ESL_STOPWATCH object maintenance *****************************************************************/ /* Function: esl_stopwatch_Create() * * Purpose: Creates a new stopwatch. * * Returns: ptr to a new object; caller is * responsible for free'ing it with * . * * Throws: NULL on allocation failure. */ ESL_STOPWATCH * esl_stopwatch_Create(void) { int status; ESL_STOPWATCH *w = NULL; ESL_ALLOC(w, sizeof(ESL_STOPWATCH)); w->elapsed = 0.; w->user = 0.; w->sys = 0.; return w; ERROR: return NULL; } /* Function: esl_stopwatch_Destroy() * * Purpose: Frees an . */ void esl_stopwatch_Destroy(ESL_STOPWATCH *w) { free(w); } /* Function: esl_stopwatch_Start() * * Purpose: Start a stopwatch. This sets the base * for elapsed, cpu, and system time difference * calculations by subsequent calls to * . * * Returns: on success. */ int esl_stopwatch_Start(ESL_STOPWATCH *w) { #ifdef HAVE_TIMES /* POSIX */ w->t0 = times(&(w->cpu0)); #else /* fallback to ANSI C */ w->t0 = time(NULL); w->cpu0 = clock(); #endif w->elapsed = 0.; w->user = 0.; w->sys = 0.; return eslOK; } /* Function: esl_stopwatch_Stop() * * Purpose: Stop a stopwatch. Record and store elapsed, * cpu, and system time difference relative to the * last call to . * * Returns: on success. */ int esl_stopwatch_Stop(ESL_STOPWATCH *w) { #ifdef HAVE_TIMES struct tms cpu1; clock_t t1; double clk_tck; #else time_t t1; clock_t cpu1; #endif #ifdef HAVE_TIMES /* POSIX */ t1 = times(&cpu1); clk_tck = (double) sysconf(_SC_CLK_TCK); w->elapsed = (double) (t1 - w->t0) / clk_tck; w->user = (double) (cpu1.tms_utime + cpu1.tms_cutime - w->cpu0.tms_utime - w->cpu0.tms_cutime) / clk_tck; w->sys = (double) (cpu1.tms_stime + cpu1.tms_cstime - w->cpu0.tms_stime - w->cpu0.tms_cstime) / clk_tck; #else /* fallback to ANSI C */ t1 = time(NULL); cpu1 = clock(); w->elapsed = difftime(t1, w->t0); w->user = (double) (cpu1- w->cpu0) / (double) CLOCKS_PER_SEC; w->sys = 0.; /* no way to portably get system time in ANSI C */ #endif return eslOK; } /* format_time_string() * Date: SRE, Fri Nov 26 15:06:28 1999 [St. Louis] * * Purpose: Given a number of seconds, format into * hh:mm:ss.xx in a provided buffer. * * Args: buf - allocated space (128 is plenty!) * sec - number of seconds * do_frac - TRUE (1) to include hundredths of a sec */ static void format_time_string(char *buf, double sec, int do_frac) { int h, m, s, hs; h = (int) (sec / 3600.); m = (int) (sec / 60.) - h * 60; s = (int) (sec) - h * 3600 - m * 60; if (do_frac) { hs = (int) (sec * 100.) - h * 360000 - m * 6000 - s * 100; sprintf(buf, "%02d:%02d:%02d.%02d", h,m,s,hs); } else { sprintf(buf, "%02d:%02d:%02d", h,m,s); } } /* Function: esl_stopwatch_Display() * * Purpose: Output a usage summary line from a stopped * stopwatch, showing elapsed, cpu, and system time * between the last calls to * and . * * The string will be prepended to the output * line. Use <""> to prepend nothing. If is NULL, * a default <"CPU Time: "> prefix is used. * * For = <"CPU Time: "> an example output line is:\\ * * * Args: fp - output stream * w - stopped stopwatch * prefix - output line prefix ("" for nothing) * * Returns: on success. * * Throws: on any system write error, such as filled disk. */ int esl_stopwatch_Display(FILE *fp, ESL_STOPWATCH *w, char *prefix) { char buf[128]; /* (safely holds up to 10^14 years; I'll be dead by then) */ if (prefix == NULL) { if (fputs("CPU Time: ", fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "stopwatch display write failed"); } else { if (fputs(prefix, fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "stopwatch display write failed"); } format_time_string(buf, w->user+w->sys, TRUE); #ifdef HAVE_TIMES if (fprintf(fp, "%.2fu %.2fs %s ", w->user, w->sys, buf) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "stopwatch display write failed"); #else if (fprintf(fp, "%.2fu %s ", w->user, buf) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "stopwatch display write failed"); #endif format_time_string(buf, w->elapsed, TRUE); if (fprintf(fp, "Elapsed: %s\n", buf) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "stopwatch display write failed"); return eslOK; } /* Function: esl_stopwatch_Include() * * Purpose: Merge the cpu and system times from a slave into * a master stopwatch. Both watches must be * stopped, and should not be stopped again unless * You Know What You're Doing. * * Elapsed time is not merged. Master is assumed * to be keeping track of the wall clock (real) time, * and the slave/worker watch is ignored. * * Useful in at least two cases. One is in * PVM, where we merge in the stopwatch(es) from separate * process(es) in a cluster. A second is in * threads, for broken pthreads/times() implementations * that lose track of cpu times used by spawned * threads. * * Args: master - stopwatch that's aggregating times * w - watch to add to the master. * * Returns: on success. */ int esl_stopwatch_Include(ESL_STOPWATCH *master, ESL_STOPWATCH *w) { master->user += w->user; master->sys += w->sys; return eslOK; } /***************************************************************** * Example of using the stopwatch module *****************************************************************/ #ifdef eslSTOPWATCH_EXAMPLE /*::cexcerpt::stopwatch_example::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslSTOPWATCH_EXAMPLE esl_stopwatch.c easel.c -lm * run: ./example */ #include "easel.h" #include "esl_stopwatch.h" int main(void) { ESL_STOPWATCH *w; w = esl_stopwatch_Create(); esl_stopwatch_Start(w); sleep(5); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "CPU Time: "); esl_stopwatch_Destroy(w); return 0; } /*::cexcerpt::stopwatch_example::end::*/ #endif /*ESL_STOPWATCH_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_stopwatch.c 727 2011-10-24 17:17:32Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_stopwatch.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_stack.tex0000664361611702660230000001022312473612607016054 0ustar wheelerteddyThe stack module implements pushdown stacks for storing integers, characters, or arbitrary pointers (objects). The module uses a convention of prepending \ccode{I}, \ccode{C}, \ccode{P} to \ccode{Create()}, \ccode{Push()}, and \ccode{Pop()} function names, to indicate the stack's datatype as integer, character, or pointer, respectively. For example, \ccode{esl\_stack\_PCreate()} creates a stack for pointer storage. (This is also the naming convention in the \ccode{vectorops} module.) Stacks can be thought of as typed objects, with the type defined by the \ccode{Create()} call. Types may not be mixed for any particular created stack. % Table generated by autodoc -t esl_stack.c (so don't edit here, edit esl_stack.c:) \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \apisubhead{The \ccode{ESL\_STACK} object.}\\ \hyperlink{func:esl_stack_ICreate()}{\ccode{esl\_stack\_ICreate()}} & Create an integer stack.\\ \hyperlink{func:esl_stack_CCreate()}{\ccode{esl\_stack\_CCreate()}} & Create a character stack.\\ \hyperlink{func:esl_stack_PCreate()}{\ccode{esl\_stack\_PCreate()}} & Create a pointer stack.\\ \hyperlink{func:esl_stack_Reuse()}{\ccode{esl\_stack\_Reuse()}} & Reuse a stack.\\ \hyperlink{func:esl_stack_Destroy()}{\ccode{esl\_stack\_Destroy()}} & Free a stack.\\ \apisubhead{Other functions in the API.}\\ \hyperlink{func:esl_stack_IPush()}{\ccode{esl\_stack\_IPush()}} & Push an integer onto a stack.\\ \hyperlink{func:esl_stack_CPush()}{\ccode{esl\_stack\_CPush()}} & Push a char onto a stack.\\ \hyperlink{func:esl_stack_PPush()}{\ccode{esl\_stack\_PPush()}} & Push a pointer onto a stack.\\ \hyperlink{func:esl_stack_IPop()}{\ccode{esl\_stack\_IPop()}} & Pop an integer off a stack.\\ \hyperlink{func:esl_stack_CPop()}{\ccode{esl\_stack\_CPop()}} & Pop a char off a stack.\\ \hyperlink{func:esl_stack_PPop()}{\ccode{esl\_stack\_PPop()}} & Pop a pointer off a stack.\\ \hyperlink{func:esl_stack_ObjectCount()}{\ccode{esl\_stack\_ObjectCount()}} & Return the number of objects in a stack.\\ \hyperlink{func:esl_stack_Convert2String()}{\ccode{esl\_stack\_Convert2String()}} & Convert a char stack to a string.\\ \hyperlink{func:esl_stack_DiscardTopN()}{\ccode{esl\_stack\_DiscardTopN()}} & Discard the top elements on a stack.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{stack} API.} \label{tbl:stack_api} \end{table} \subsection{Example of using the stack API} Figure~\ref{fig:stack_example} shows an example of using the integer stack, pushing 42, 7, and 3 on, then popping them off. \begin{figure} \input{cexcerpts/stack_example} \caption{An example of pushing and popping data onto a stack.} \label{fig:stack_example} \end{figure} The \ccode{Create()} functions create a stack for a particular purpose. \ccode{esl\_stack\_ICreate()} creates a stack for integers, \ccode{esl\_stack\_CCreate()} creates a stack for characters, and \ccode{esl\_stack\_PCreate()} creates a stack for pointers. They throw NULL if an allocation fails. All three stack types are free'd by a call to \ccode{esl\_stack\_Destroy()}. All three types can also be reused without reallocation or recreation by \ccode{esl\_stack\_Reuse()}. A \ccode{Reuse()}'d stack retains its original datatype. The \ccode{Push()} functions push one datum onto the stack, of the appropriate type. They throw \ccode{eslEMEM} if the stack needs to reallocate internally but fails. The \ccode{Pop()} functions pop one datum off the stack, returning it through a passed pointer. They return \ccode{eslOK} on success, and \ccode{eslEOD} if the stack is empty. \ccode{esl\_stack\_ObjectCount()} returns the number of objects stored in the stack. A special function, \ccode{esl\_stack\_Convert2String()}, operates only on character stacks. It converts the stack structure to a NUL-terminated string, with characters in the same order they were pushed. The stack is destroyed by this operation, leaving a \ccode{char *} behind. \subsection{Allocation strategy} Stacks are initially allocated for a certain number of objects, defined by a compile-time constant \ccode{ESL\_STACK\_INITALLOC} in \ccode{esl\_stack.h}. The default is 128. Whenever a stack needs to grow, it reallocates by doubling its current allocation. hmmer-3.1b2/easel/esl_msacluster.tex0000664361611702660230000000223412473612607017134 0ustar wheelerteddyThe \eslmod{msacluster} module implements single linkage clustering by sequence identity for the sequences in a multiple sequence alignment. The API is summarized in Table~\ref{tbl:msacluster_api}. Clustering is done using the generalized single linkage clustering algorithm in the \eslmod{cluster} module. \eslmod{msacluster} requires the \eslmod{cluster}, \eslmod{distance}, and \eslmod{msa} and \eslmod{distance} modules. It can be augmented with the \eslmod{alphabet} module, which adds the ability to deal with digitized MSAs. % Table generated by autodoc -t esl_msacluster.c (so don't edit here, edit esl_msacluster.c:) \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \hyperlink{func:esl_msacluster_SingleLinkage()}{\ccode{esl\_msacluster\_SingleLinkage()}} & Single linkage clustering by percent identity.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{msacluster} API.} \label{tbl:msacluster_api} \end{table} \subsection{Example of using the msacluster API} An example of reading an MSA from a file and doing single-linkage-clustering on the aligned sequences at $\geq$ 62\% sequence identity: \input{cexcerpts/msacluster_example} hmmer-3.1b2/easel/esl_random.h0000664361611702660230000000476212473612607015671 0ustar wheelerteddy/* Easel's portable, threadsafe random number generator. */ #ifndef eslRANDOM_INCLUDED #define eslRANDOM_INCLUDED #define eslRND_FAST 0 #define eslRND_MERSENNE 1 typedef struct { int type; /* eslRND_FAST | eslRND_MERSENNE */ int mti; /* current position in mt[] table */ uint32_t mt[624]; /* state of the Mersenne Twister */ uint32_t x; /* state of the Knuth generator */ uint32_t seed; /* seed used to init the RNG */ } ESL_RANDOMNESS; /* esl_rnd_Roll(a) chooses a uniformly distributed integer * in the range 0..a-1, given an initialized ESL_RANDOMNESS r. */ #define esl_rnd_Roll(r, a) ((int) (esl_random(r) * (a))) /* 1. The ESL_RANDOMNESS object. */ extern ESL_RANDOMNESS *esl_randomness_Create(uint32_t seed); extern ESL_RANDOMNESS *esl_randomness_CreateFast(uint32_t seed); extern ESL_RANDOMNESS *esl_randomness_CreateTimeseeded(void); /* DEPRECATED */ extern void esl_randomness_Destroy(ESL_RANDOMNESS *r); extern int esl_randomness_Init(ESL_RANDOMNESS *r, uint32_t seed); extern uint32_t esl_randomness_GetSeed(const ESL_RANDOMNESS *r); /* 2. The generator, esl_random(). */ extern double esl_random(ESL_RANDOMNESS *r); /* 3. Debugging/development tools. */ extern int esl_randomness_Dump(FILE *fp, ESL_RANDOMNESS *r); /* 4. Other fundamental sampling (including Gaussian, gamma). */ extern double esl_rnd_UniformPositive(ESL_RANDOMNESS *r); extern double esl_rnd_Gaussian(ESL_RANDOMNESS *r, double mean, double stddev); extern double esl_rnd_Gamma(ESL_RANDOMNESS *r, double a); /* 5. Multinomial sampling from discrete probability n-vectors. */ extern int esl_rnd_DChoose (ESL_RANDOMNESS *r, const double *p, int N); extern int esl_rnd_FChoose (ESL_RANDOMNESS *r, const float *p, int N); extern int esl_rnd_DChooseCDF(ESL_RANDOMNESS *r, const double *cdf, int N); extern int esl_rnd_FChooseCDF(ESL_RANDOMNESS *r, const float *cdf, int N); #endif /*eslRANDOM_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_cluster.c0000664361611702660230000003161512473612606016061 0ustar wheelerteddy/* Generalized single linkage clustering. * * Table of contents: * 1. Single linkage clustering, generalized * 2. Unit tests * 3. Test driver * 4. Example * 5. Copyright and license */ #include "esl_config.h" #include #include "easel.h" #include "esl_cluster.h" /***************************************************************** * 1. Single linkage clustering, generalized *****************************************************************/ /* Function: esl_cluster_SingleLinkage() * Synopsis: Generalized single linkage clustering. * Incept: SRE, Mon Jan 7 08:35:10 2008 [Janelia] * * Purpose: Given a set of vertices, cluster them by single-linkage * clustering. * * The data describing each vertex is provided in an array * starting at , consisting of vertices. Each * vertex can be of any type (structure, scalar, pointer) * so long as each vertex element is of fixed size * bytes. * * A pointer to the clustering function is provided in * <(*linkfunc)()>, and a pointer to any necessary * parameters for that function (for example, any * thresholds) is provided in . * * The must be written by the * caller. It takes arguments <(void *v1, void *v2, void * *param, int *ret_link)>: pointers to two vertices to * test for linkage and a pointer to any necessary * parameters, and it passes the answer (1) or * (0) back in <*ret_link>. The <(*linkfunc)()> * returns (0) on success, and a nonzero error code * on failure (see for a list of Easel's error * codes). * * The caller provides an allocated with space * for at least <2n> integers. (Allocation in the caller * allows the caller to reuse memory and save * allocation/free cycles, if it has many rounds of * clustering to do.) * * The caller also provides allocated space in * for integers which, upon successful * return, contains assignments of the <0..n-1> vertices to * <0..C-1> clusters. That is, if , * that means vertex 42 is assigned to cluster 1. The * total number of clusters is returned in . * * The algorithm runs in $O(N)$ memory; importantly, it * does not require a $O(N^2)$ adjacency matrix. Worst case * time complexity is $O(N^2)$ (multiplied by any * additional complexity in the <(*linkfunc()> itself), but * the worst case (no links at all; clusters) should * be unusual. More typically, time scales as about $N \log * N$. Best case is $N$, for a completely connected graph * in which all vertices group into one cluster. (More * precisely, best case complexity arises when vertex 0 is * connected to all other vertices.) * * Notes: I don't know if this algorithm is published. I * haven't seen it in graph theory books, but that might * be because it's so obvious that nobody's bothered. * * In brief, we're going to do a breadth-first search of the * graph, and we're going to calculate links on the fly * rather than precalculating them into a standard adjacency * matrix. * * While working, we keep two stacks of maximum length N: * a : list of vertices that are still unconnected. * b : list of vertices that we've connected to * in our current breadth level, but we haven't * yet tested for other connections to a. * The current length (number of elements in) a and b are * kept in na, nb. * * We store our results in an array of length N: * c : assigns each vertex to a component. for example * c[4] = 1 means that vertex 4 is in component 1. * nc is the number of components. Components * are numbered from 0 to nc-1. We return c and nc * to our caller. * * The algorithm is: * * Initialisation: * a <-- all the vertices * na <-- N * b <-- empty set * nb <-- 0 * nc <-- 0 * * Then: * while (a is not empty) * pop a vertex off a, push onto b * while (b is not empty) * pop vertex v off b * assign c[v] = nc * for each vertex w in a: * compare v,w. If w is linked to v, remove w * from a, push onto b. * nc++ * q.e.d. * * Args: base - pointer to array of n fixed-size vertices to be clustered. * n - number of vertices * size - size of each vertex element * linkfunc - pointer to caller's function for defining linked pairs * param - pointer to any data that needs to be provided to <(*linkfunc)> * workspace - caller provides at least 2n*sizeof(int) of workspace * assignments - RETURN: assignments to clusters (caller provides n*sizeof(int) space) * ret_C - RETURN: number of clusters * * Returns: on success; contains cluster assigments * <0..C-1> for each vertex, and <*ret_C> contains the number of clusters * * * Throws: status codes from the caller's <(*linkfunc)> on failure; in this case, * the contents of <*assignments> is undefined, and <*ret_C> is 0. */ int esl_cluster_SingleLinkage(void *base, size_t n, size_t size, int (*linkfunc)(const void *, const void *, const void *, int *), void *param, int *workspace, int *assignments, int *ret_C) { int na, *a = NULL; /* stack of available vertices (still unconnected) */ int nb, *b = NULL; /* stack of connected but unextended vertices */ int nc, *c = NULL; /* array of results: # clusters, assignments to clusters */ int v,w; /* indices of vertices */ int i; /* counter over the available list */ int do_link; int status; a = workspace; b = workspace + n; c = assignments; for (v = 0; v < n; v++) a[v] = n-v-1; /* initialize by pushing all vertices onto available list (backwards) */ na = n; nb = 0; nc = 0; while (na > 0) /* while vertices remain unexamined or unclustered: */ { v = a[na-1]; na--; /* pop a vertex off a, */ b[nb] = v; nb++; /* and push it onto b */ while (nb > 0) /* while vertices remain unextended: */ { v = b[nb-1]; nb--; /* pop vertex off b */ c[v] = nc; /* assign it to cluster nc */ for (i = na-1; i >= 0; i--) /* backwards, because of deletion/swapping we do*/ { if ((status = (*linkfunc)( (char *) base + v*size, (char *) base + a[i]*size, param, &do_link)) != eslOK) goto ERROR; if (do_link) { w = a[i]; a[i] = a[na-1]; na--; /* delete w from a */ b[nb] = w; nb++; /* and push it onto b */ } } } nc++; } *ret_C = nc; return eslOK; ERROR: *ret_C = 0; return status; } /*------------------ end, single linkage clustering -------------*/ /***************************************************************** * 2. Unit tests *****************************************************************/ #ifdef eslCLUSTER_TESTDRIVE #include static int test_linkage_definition(const void *v1, const void *v2, const void *param, int *ret_link) { double a = *((double *) v1); /* you have to cast a void ptr before you can dereference it */ double b = *((double *) v2); double threshold = *((double *) param); *ret_link = ((fabs(a-b) <= threshold) ? TRUE : FALSE); return eslOK; } static void utest_singlelinkage(double *testdata, int n, double threshold, int *correct_assignment, int correct_C) { int *workspace; int *assignment; int C; int v; if ((workspace = malloc(sizeof(int) * n * 2)) == NULL) esl_fatal("allocation failed"); if ((assignment = malloc(sizeof(int) * n)) == NULL) esl_fatal("allocation failed"); if (esl_cluster_SingleLinkage(testdata, n, sizeof(double), test_linkage_definition, &threshold, workspace, assignment, &C) != eslOK) esl_fatal("single linkage clustering failed"); if (C != correct_C) esl_fatal("expected %d clusters, but got %d\n", correct_C, C); for (v = 0; v < n; v++) if (correct_assignment[v] != assignment[v]) esl_fatal("expected vertex %d to be in cluster %d, but it's in %d\n", v, correct_assignment[v], assignment[v]); free(workspace); free(assignment); } #endif /* eslCLUSTER_TESTDRIVE */ /***************************************************************** * 3. Test driver *****************************************************************/ #ifdef eslCLUSTER_TESTDRIVE /* gcc -g -Wall -o test -I. -L. -DeslCLUSTER_TESTDRIVE esl_cluster.c -leasel -lm */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_cluster.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for cluster module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); double vertex[] = { 1.0, 2.0, 4.0, 5.0, 7.0, 8.0 }; int na1 = 3, a1[] = { 0, 0, 1, 1, 2, 2 }; /* correct answer when threshold = 1.5 */ int na2 = 6, a2[] = { 0, 1, 2, 3, 4, 5 }; /* correct answer when threshold < 1.0 */ int na3 = 1, a3[] = { 0, 0, 0, 0, 0, 0 }; /* correct answer when threshold > 2.0 */ int n = sizeof(vertex) / sizeof(double); utest_singlelinkage(vertex, n, 1.5, a1, na1); utest_singlelinkage(vertex, n, 0.5, a2, na2); utest_singlelinkage(vertex, n, 2.5, a3, na3); esl_getopts_Destroy(go); return 0; } #endif /* eslCLUSTER_TESTDRIVE*/ /***************************************************************** * 4. Example *****************************************************************/ #ifdef eslCLUSTER_EXAMPLE /*::cexcerpt::cluster_example::begin::*/ /* gcc -g -Wall -o example -I. -L. -DeslCLUSTER_EXAMPLE esl_cluster.c easel.c -lm */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_cluster.h" static int my_linkage_definition(const void *v1, const void *v2, const void *param, int *ret_link) { double a = *((double *) v1); /* you have to cast a void ptr before you can dereference it */ double b = *((double *) v2); double threshold = *((double *) param); *ret_link = ((fabs(a-b) <= threshold) ? TRUE : FALSE); return eslOK; } int main(int argc, char **argv) { double vertex[] = { 1.0, 2.0, 4.0, 5.0, 7.0, 8.0 }; int n = sizeof(vertex) / sizeof(double); double threshold = 1.5; int *workspace; int *assignment; int C; int v; workspace = malloc(sizeof(int) * n * 2); assignment = malloc(sizeof(int) * n); esl_cluster_SingleLinkage(vertex, n, sizeof(double), my_linkage_definition, &threshold, workspace, assignment, &C); printf("There are %d clusters.\n", C); for (v = 0; v < n; v++) printf("vertex %d is in cluster %d\n", v, assignment[v]); free(workspace); free(assignment); return 0; } /*::cexcerpt::cluster_example::end::*/ #endif /*eslCLUSTER_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_cluster.c 685 2011-05-23 14:27:52Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_cluster.c $ *****************************************************************/ hmmer-3.1b2/easel/.dropbox.attr0000775361611702660230000000000212473610422015777 0ustar wheelerteddy{}hmmer-3.1b2/easel/esl_buffer.tex0000664361611702660230000004510612473612606016227 0ustar wheelerteddyThe \eslmod{buffer} module provides an abstract layer for building input parsers. Different types of input -- including files, standard input, piped output from executed commands, C strings, and raw memory -- can be handled efficiently in a single API and a single object, an \ccode{ESL\_BUFFER}. %The API is summarized in Table~\ref{tbl:buffer_api}. The main rationale for \eslmod{buffer} is to enable multipass parsing of any input, even a nonrewindable stream or pipe. A canonical problem in sequence file parsing is that we need to know both the format ( FASTA or Genbank, for instance) and the alphabet (protein or nucleic acid, for instance) in order to parse Easel-digitized sequence data records. To write ``smart'' parsers that automagically determine the file format and alphabet, so programs work transparently on lots of different file types without users needing to specify them, we need three-pass parsing: one pass to read raw data and determine the format, a second pass to parse the format for sequence data and determine its alphabet, and finally the actual parsing of digitized sequences. Multiple pass parsing of a nonrewindable stream, such as standard input or the output of a \ccode{gunzip} call, isn't possible without extra support. The \eslmod{buffer} module standardizes that support for all Easel input. \subsection{Examples of using the buffer API} Here's an example of using \eslmod{buffer} to read a file line by line: \input{cexcerpts/buffer_example} This shows how to open an input, get each line sequentially, do something to each line (here, count the number of x's), and close the input. To compile this example, then run it on a file (any file would do, but here, \ccode{esl\_buffer.c} itself): \user{gcc -I. -o esl\_buffer\_example -DeslBUFFER\_EXAMPLE esl\_buffer.c easel.c -lm} \user{./esl\_buffer\_example esl\_buffer.c} \response{Counted 181 x's in 3080 lines.} The most important thing to notice here is that \ccode{esl\_buffer\_Open()} function implements a standard Easel idiom for finding input sources. If the \ccode{filename} argument is a single dash '-', it will read from \ccode{stdin}. If the \ccode{filename} argument ends in \ccode{.gz}, it will assume the file is a \ccode{gzip}-compressed input, and it will decompress it on the fly with \ccode{gzip -dc} before reading it. If it does not find the \ccode{filename} relative to the current directory, and if the second argument (here \ccode{"TESTDIR"}) is non-\ccode{NULL}, it looks at the setting of an environment variable \ccode{envvar}, which should contain a colon-delimited list of directories to search to try to find \ccode{filename}. Therefore all of the following commands will work and give the same result: \begin{userchunk} % ./esl_buffer_example esl_buffer.c \end{userchunk} \begin{userchunk} % cat esl_buffer.c | ./esl_buffer_example - \end{userchunk} \begin{userchunk} % cp esl_buffer.c foo % gzip foo % ./esl_buffer_example foo.gz \end{userchunk} \begin{userchunk} % cp esl_buffer.c ${HOME}/mydir2/baz % export TESTDIR=${HOME}/mydir1:${HOME}/mydir2 % ./esl_buffer_example baz \end{userchunk} This idiomatic flexibility comes in handy when using biological data. Data are are often kept in standard directories on systems (for example, we maintain a symlink \ccode{/misc/data0/databases/Uniprot} on ours), so having applications look for directory path listings in standardized environment variables can help users save a lot of typing of long paths. Data files can be big, so it's convenient to be able to compress them and not have to decompress them to use them. It's convenient to have applications support the power of using UNIX command invocations in pipes, chaining the output of one command into the input of another, so it's nice to automatically have any Easel-based application read from standard input. A couple of other things to notice about this example: \begin{enumerate} \item If the \ccode{esl\_buffer\_Open()} fails, it still returns a valid \ccode{ESL\_BUFFER} structure, which contains nothing except a user-directed error message \ccode{bf->errmsg}. If you were going to continue past this error, you'd want to \ccode{esl\_buffer\_Close()} the buffer. \item \ccode{esl\_buffer\_GetLine()} returns a pointer to the start of the next line \ccode{p}, and its length in chars \ccode{n} (exclusive of any newline character). It does \emph{not} return a string - \ccode{p[n]} is \emph{not} a \ccode{NUL} byte \verb+\0+. Standard C string functions, which expect \ccode{NUL}-terminated strings, can't be used on \ccode{p}. The reason is efficiency: the \ccode{ESL\_BUFFER} is potentially looking at a read-only exact image of the input, and \ccode{esl\_buffer\_GetLine()} is not wasting any time making a copy of it. If you need a string, with an appended \verb+\0+ in the right place, see \ccode{esl\_buffer\_FetchLineAsStr()}. \end{enumerate} \subsubsection{Reading tokens} Because \ccode{ESL\_BUFFER} prefers to give you pointers into a read-only image of the input, the standard C \ccode{strtok()} function can't be used to define tokens (whitespace-delimited fields, for example), because \ccode{strtok()} tries to write a \verb+\0+ byte after each token it defines. Therefore \ccode{ESL\_BUFFER} provides its own token parsing mechanism. Depending on whether or not you include newline characters (\verb+\r\n+) in the list of separator (delimiter) characters, it either ignores newlines altogether, or it detects newlines separately and expects to find a known number of tokens per line. For example, our x counting program could be implemented to parse every token instead of every line: \input{cexcerpts/buffer_example2} \user{gcc -I. -o esl\_buffer\_example2 -DeslBUFFER\_EXAMPLE2 esl\_buffer.c easel.c -lm} \user{./esl\_buffer\_example2 esl\_buffer.c} \response{Counted 181 x's in 14141 words.} In the \ccode{esl\_buffer\_GetToken()} call, including \verb+\r\n+ with \verb+" \t"+ in the separators causes newlines to be treated like delimiters like any space or tab character. If you omit \verb+\r\n+ newline characters from the separators, then the parser detects them specially anyway; when it sees a newline instead of a token, it returns \ccode{eslEOL} and sets the point to the next character following the newline. For example, we can count both lines and tokens: \input{cexcerpts/buffer_example3} \user{gcc -I. -o esl\_buffer\_example3 -DeslBUFFER\_EXAMPLE3 esl\_buffer.c easel.c -lm} \user{./esl\_buffer\_example3 esl\_buffer.c} \response{Counted 181 x's in 14141 words on 3080 lines.} What happens if the last line in a text file is missing its terminal newline? In the example above, the number of lines would be one fewer; the nonterminated last line wouldn't be counted. \ccode{esl\_buffer\_GetToken()} would return \ccode{eslEOF} on the last line of the file, rather than \ccode{eslEOL} followed by \ccode{eslEOF} at its next call as it'd do if the newline were there. \subsubsection{Reading fixed-width binary input} You can also read fixed-width binary input directly into storage, including scalar variables, using the \ccode{esl\_buffer\_Read()} call. This is similar to C's \ccode{fread()}: \input{cexcerpts/buffer_example4} The \ccode{Read()} call needs to know exactly how many bytes \ccode{n} it will read. For variable-width binary input, see the \ccode{esl\_buffer\_Get()}/\ccode{esl\_buffer\_Set()} calls. In fact all inputs are treated by \ccode{ESL\_BUFFER} as binary input. That is, platform-dependent newlines are not converted automatically to C \verb+\n+ characters, as would happen when using the C \ccode{stdio.h} library to read an input stream in ``text mode''. You can freely mix different types of \ccode{esl\_buffer\_*} parsing calls as you see appropriate. \subsubsection{A more complicated example, a FASTA parser} An example of a simple FASTA parsing function: \input{cexcerpts/buffer_example5a} and an example of using that function in a program: \input{cexcerpts/buffer_example5b} One thing to note here is the use of \ccode{esl\_buffer\_Set()} to push characters back into the parser. For example, when we look for the starting '>', we do a raw \ccode{esl\_buffer\_Get()}, look at the first character, then call \ccode{esl\_buffer\_Set()} with \ccode{nused=1} to tell the parser we used 1 character of what it gave us. This is an idiomatic usage of the \ccode{esl\_buffer\_Get()}/\ccode{esl\_buffer\_Set()} pair. The \ccode{esl\_buffer\_Get()} call doesn't even move the point until the companion \ccode{esl\_buffer\_Set()} tells it where to move to. The other idiomatic use of \ccode{esl\_buffer\_Set()} is to implement a ``peek'' at a next line or a next token, using a \ccode{esl\_buffer\_GetLine()}/\ccode{esl\_buffer\_Set()} or \ccode{esl\_buffer\_GetToken()}/\ccode{esl\_buffer\_Set()} combination. You see this when we're in the sequence reading loop, we get a line, and we want to peek at its first character. If it's a '>' we're seeing the start of the next sequence, so we want to return while leaving the point on the '>'. To do this, we use \ccode{esl\_buffer\_GetLine()} to get the line, and if the first char is a '>' we use \ccode{esl\_buffer\_Set()} to push the line pointer (with 0 used characters) back to the parser. You can also see examples here of using \ccode{esl\_buffer\_FetchTokenAsStr()} \ccode{esl\_buffer\_FetchLineAsStr()} to copy the name and description directly to allocated, \verb+\0+-terminated C strings. Note how they interact: because \ccode{esl\_buffer\_FetchTokenAsStr()} moves the point past any trailing separator characters to the start of the next token, and because \ccode{esl\_buffer\_FetchLineAsStr()} doesn't need the point to be at the start of a line, the \ccode{esl\_buffer\_FetchLineAsStr()} call finds the description without leading spaces or trailing newline (but with any trailing spaces). \subsection{Using anchors: caller-defined limits on random access} The naive way to enable random access on a sequential stream is to slurp the whole stream into memory. If the stream is large, this may be very memory inefficient. Many parsers do not need full random access, but instead need a limited form of it -- for instance, the three-pass case of determining format and alphabet from the start of a sequence file. \ccode{ESL\_BUFFER} allows the caller to define an \emph{anchor} to define a start point in the input that is not allowed to go away until the caller says so. Setting an anchor declares that \ccode{mem[anchor..n-1]} is not be overwritten by new input reads. A new input read may first relocate (``reoffset'') \ccode{mem[anchor..n-1]} to \ccode{mem[0..n-anchor-1]} in order to use its current allocation efficiently. Setting an anchor may therefore cause \ccode{mem} to be reoffset and/or reallocated, and \ccode{balloc} may grow, if the buffer is not large enough to hold everything starting from the \ccode{anchor} position. When no anchors are set, \ccode{mem} will not be reoffset or reallocated. If we set an anchor at offset 0 in the input, then the entire input will be progressively slurped into a larger and larger allocation of memory as we read sequentially. We are guaranteed to be able to reposition the buffer anywhere from the anchor to n-1, even in a normally nonrewindable, nonpositionable stream. If we've read enough to determine what we need (format, alphabet...), we can release the anchor, and the buffer's memory usage will stop growing. The functions that get a defined chunk of memory -- \ccode{esl\_buffer\_GetLine()}, \ccode{esl\_buffer\_GetToken()}, and \ccode{esl\_buffer\_CopyBytes()} -- set an anchor at the start of the line, token, or chunk of bytes before they go looking for its end. This takes advantage of the anchor mechanism to make sure that the buffer will contain the entire line, token, or chunk of bytes, not just a truncated part. \subsection{Token-based parsing} A \esldef{token} is a substring consisting of characters not in a set of caller-defined \esldef{separator} characters. Typically, separator chararacters might be whitespace (\ccode{" \t"}). Additionally, newlines are always considered to be separators. Tokens cannot include newlines. In token-based parsing, we can handle newlines in two ways. Sometimes we might know exactly how many tokens we expect on the line. Sometimes we don't care. If the caller knows exactly how many tokens are expected on each line of the input, it should not include newline characters in its separator string. Now, if the caller asks for a token but no token remains on the line, it will see a special \ccode{eslEOL} return code (and the parser will be positioned at the next character after that newline). A caller can check for this deliberately with one last call to \ccode{esl\_buffer\_GetToken()} per line, to be sure that it sees \ccode{eslEOL} rather than an unexpected token. If the caller doesn't care how many tokens occur on each line, it should include newline characters (\verb+"\r\n"+) in the separator string. Then newlines are treated (and skipped) like any other separator. Starting from the current buffer position, the procedure for defining a token is: \begin{itemize} \item Skip characters in the separator string. (If end-of-file is reached, return \ccode{eslEOF}.) \item If parser is on a newline, skip past it, and return \ccode{eslEOL}. (Note that if the caller had newline characters in the separator string, the first step already skipped any newline, and no \ccode{eslEOL} return is possible.) \item Anchor at the current buffer position, \ccode{p}. \item From the current point, count characters \emph{not} in the separator, \ccode{n}. (Expand/refill the buffer as needed.) \item Define the token: \ccode{p[0..n]}. \item Move the current point to the character following the token. \end{itemize} \subsection{Newline handling.} Easel assumes that newlines are encoded as \verb+\n+ (UNIX, Mac OS/X) or \verb+\r\n+ (MS Windows). All streams are opened as binary data. This is necessary to guarantee a one:one correspondence between data offsets in memory and data offsets on the filesystem, which we need for file positioning purposes. It is also necessary to guarantee that we can read text files that have been produced on a system other than the system we're reading them on (that we can read Windows text files on a Linux system, for example).\footnote{That is, the usual ANSI C convention of reading/writing in ``text mode'' does not suffice, because it assumes the newlines of the system we're on, not necessarily the system that produced the file.} However, it makes us responsible for handling system-specific definition of ``newline'' character(s) in ASCII text files. \subsection{Implementation notes (for developers)} \paragraph{The state guarantee.} An \ccode{ESL\_BUFFER} is exchangeable and sharable even amongst entirely different types of parsers because it is virtually always guaranteed to be in a well-defined state. Specifically: \begin{itemize} \item \ccode{bf->mem[bf->pos]} is ALWAYS positioned at the next byte that a parser needs to parse, unless the buffer is at EOF. \item There are ALWAYS at least \ccode{pagesize} bytes available to parse, provided the input stream has not reached EOF. \end{itemize} \paragraph{State in different input type modes} There are six types (``modes'') of inputs: \begin{tabular}{ll} Mode & Description \\ \hline \ccode{eslBUFFER\_STDIN} & Standard input. \\ \ccode{eslBUFFER\_CMDPIPE} & Output piped from a command. \\ \ccode{eslBUFFER\_FILE} & A \ccode{FILE} being streamed. \\ \ccode{eslBUFFER\_ALLFILE} & A file entirely slurped into RAM. \\ \ccode{eslBUFFER\_MMAP} & A file that's memory mapped (\ccode{mmap()}). \\ \ccode{eslBUFFER\_STRING} & A string or memory. \\ \hline \end{tabular} The main difference between modes is whether the input is being read into the buffer's memory in chunks, or whether the buffer's memory effectively contains the entire input: \begin{tabular}{lll} & \ccode{STDIN, CMDPIPE, FILE} & \ccode{ALLFILE, MMAP, STRING} \\ \ccode{mem} & input chunk: \ccode{mem[0..n-1]} is \ccode{input[baseoffset..baseoffset+n-1]} & entire input: \ccode{mem[0..n-1]} is \ccode{input[0..n-1]} \\ \ccode{n} & current chunk size & entire input size (exclusive of \verb+\0+ on a \ccode{STRING}) \\ \ccode{balloc} & $>0$; \ccode{mem} is reallocatable & 0; \ccode{mem} is not reallocated \\ \ccode{fp} & open; \ccode{feof(fp) = TRUE} near EOF & \ccode{NULL} \\ \ccode{baseoffset} & offset of byte \ccode{mem[0]} in input & 0 \\ \end{tabular} \paragraph{Behavior at end-of-input (``end-of-file'', EOF).} The buffer can three kinds of states with respect to how near to EOF it is, as follows. During normal parsing, \ccode{bf->n - bf->pos >= bf->pagesize}: \begin{cchunk} mem-> {[. . . . . . . . . . . . . . . .] x x x x} ^ baseoffset ^ pos ^ n ^ balloc [~ ~ ~ ~ ~ ~ ~ ~] n-pos >= pagesize \end{cchunk} As input is nearing EOF, and we are within last bytes, \ccode{bf->n - bf->pos < bf->pagesize}: \begin{cchunk} mem-> {[. . . . . . . . . . . . . . . .] x x x x} ^ baseoffset ^ pos ^ n ^ balloc \end{cchunk} In modes where we might be reading input in streamed chunks (\ccode{eslBUFFER\_STDIN}, \ccode{eslBUFFER\_CMDPIPE} \ccode{eslBUFFER\_FILE}), \ccode{feof(bf->fp)} becomes \ccode{TRUE} when the buffer nears EOF. When the input is entirely EOF, then \ccode{bf->pos == bf->n}: \begin{cchunk} mem-> {[. . . . . . . . . . . . . . . .] x x x x} ^ baseoffset ^ n ^ balloc ^ pos \end{cchunk} \paragraph{ The use of \ccode{esl\_pos\_t}. } All integer variables for a position or length in memory or in a file are of type \ccode{esl\_pos\_t}. In POSIX, memory positions are an unsigned integer type \ccode{size\_t}, and file positions are a signed integer type \ccode{off\_t}. Easel wants to assure an integer type that we can safely cast to either \ccode{size\_t} or \ccode{off\_t}, and in which we can safely store a negative number as a status flag (such as -1 for ``currently unset''). \ccode{esl\_pos\_t} is defined as the largest signed integer type that can be safely cast to \ccode{size\_t} or \ccode{off\_t}. hmmer-3.1b2/easel/esl_msashuffle.h0000664361611702660230000000315312473612607016537 0ustar wheelerteddy/* Shuffling or bootstrapping multiple sequence alignments. * * SRE, Tue Jan 22 09:18:09 2008 [Market Street Cafe, Leesburg] * SVN $Id: esl_msashuffle.h 761 2012-05-10 20:09:44Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msashuffle.h $ */ #ifndef eslMSASHUFFLE_INCLUDED #define eslMSASHUFFLE_INCLUDED #include "esl_random.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif /* 1. Randomizing MSAs by column. */ extern int esl_msashuffle_Shuffle (ESL_RANDOMNESS *r, ESL_MSA *msa, ESL_MSA *shuf); extern int esl_msashuffle_Bootstrap(ESL_RANDOMNESS *r, ESL_MSA *msa, ESL_MSA *bootsample); /* 2. Permuting the sequence order */ extern int esl_msashuffle_PermuteSequenceOrder(ESL_RANDOMNESS *r, ESL_MSA *msa); /* 3. Shuffling pairwise (QRNA) alignments */ #ifdef eslAUGMENT_ALPHABET extern int esl_msashuffle_CQRNA(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, char *x, char *y, char *xs, char *ys); extern int esl_msashuffle_XQRNA(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, ESL_DSQ *x, ESL_DSQ *y, ESL_DSQ *xs, ESL_DSQ *ys); #endif /*eslAUGMENT_ALPHABET*/ #endif /*eslMSASHUFFLE_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_regexp.tex0000664361611702660230000003466412473612607016260 0ustar wheelerteddy The regexp module contains portable functions for using regular expressions to match and parse strings. There are many different regular expression syntaxes. Easel implements a small regular expression machine with a limited syntax, allowing the most familiar and important regular expression operators. It takes advantage of a compact, public domain regular expression engine written by Henry Spencer at the University of Toronto. Easel's regular expressions are not as powerful as the regular expression syntax in the Perl language, for example, but are sufficient for many useful parsing needs in a C application. \subsection{The regexp API} The module implements one object: a regular expression matching ``machine'', \ccode{ESL\_REGEXP}. The API defines ten functions: \begin{tabular}{ll} \multicolumn{2}{c}{\textbf{creating/destroying a regexp machine}}\\ \ccode{esl\_regexp\_Create()} & Creates a new \ccode{ESL\_REGEXP}. \\ \ccode{esl\_regexp\_Destroy()} & Destroys a created \ccode{ESL\_REGEXP}.\\ \ccode{esl\_regexp\_Inflate()} & Inflates an allocated \ccode{ESL\_REGEXP} shell. \\ \ccode{esl\_regexp\_Deflate()} & Deflates an inflated \ccode{ESL\_REGEXP} shell. \\ \multicolumn{2}{c}{\textbf{matching a pattern against a string}}\\ \ccode{esl\_regexp\_Match()} & Finds first match of a pattern in a string.\\ \ccode{esl\_regexp\_Compile()} & Precompile a pattern, for \ccode{\_MultipleMatches()}.\\ \ccode{esl\_regexp\_MultipleMatches()} & Finds next match of a compiled pattern in a string.\\ \multicolumn{2}{c}{\textbf{retrieving (sub)match information}}\\ \ccode{esl\_regexp\_SubmatchDup()} & Retrieves text of a (sub)match as a new string.\\ \ccode{esl\_regexp\_SubmatchCopy()} & Copies text of a (sub)match into a buffer.\\ \ccode{esl\_regexp\_SubmatchCoords()} & Retrieves start/end coord of a (sub)match.\\ \end{tabular} \subsection{Examples of using the regexp API} To use the \ccode{regexp} module, you first create a machine, which you'll destroy when you're done. The same machine can be used for any number of different patterns, so you would usually create just one machine per function or code unit that needs regular expression functionality. An example of code that matches a \ccode{pattern} against a \ccode{string} is: \begin{cchunk} #include /* for printf() */ #include #include int main(int argc, char **argv) { ESL_REGEXP *m; char *pattern; char *string; int status; int i,j; pattern = argv[1]; string = argv[2]; m = esl_regexp_Create(); status = esl_regexp_Match(m, pattern, string); if (status == ESL_OK) { esl_regexp_SubmatchCoords(m, string, 0, &i, &j); printf("Pattern matches string at positions %d..%d\n", i+1, j+1); } else if (status == ESL_EOD) { printf("Pattern does not match in string.\n"); } esl_regexp_Destroy(m); exit(0); } #endif /* ESL_REGEXP_EXAMPLE1*/ \end{cchunk} The \ccode{esl\_regexp\_Match()} function does the parsing. It returns \ccode{ESL\_OK} if a match is found, or \ccode{ESL\_EOD} if not. If a match is found, information about where the match is located in the string is kept in the machine. This information can be retrieved by any of three functions: the start and end points of the match (or any () token defining a submatch within the pattern) can be retrieved by \ccode{esl\_regexp\_SubmatchCoords()}; a matching substring can be retrieved as a new string by \ccode{esl\_regexp\_SubmatchDup()}, or matching substring can be copied into an existing buffer by \ccode{esl\_regexp\_SubmatchCopy()}. This information is volatile. It will only be available for retrieval until the next time this machine runs one of the two matching functions (\ccode{esl\_regexp\_Match()} or \ccode{esl\_regexp\_MultipleMatches()}). \ccode{esl\_regexp\_SubmatchCoords()} was called here with an argument of \ccode{elem}$=$ 0, where 0 means the complete match, as opposed to any tokens within the pattern. We'll see an example of retrieving tokens in a bit. The \ccode{i,j} start/end coordinates retrieved by the call to \ccode{esl\_regexp\_SubmatchCoords()} are 0-offset relative to the origin we provided, the \ccode{string} itself; so the first position in \ccode{string} is $i=0$. We added $+1$ to \ccode{i,j} in the example to print coords as $1..L$ in the string instead of $0..L-1$. An example of running this code: \begin{cchunk} % ./example1 "ba(na)+" "grape banana apple" Pattern matches string at positions 7..12 \end{cchunk} Note that it matched ``banana'' from 7..12, not ``bana'' from 7..10. The Easel regexp machine is ``greedy''. It matches as much of the string as the pattern allows. There isn't currently a way to circumvent this to get minimal matching instead of maximal matching (as, for instance, Perl regular expressions allow with an additional '?' modifier on its greedy quantifiers.) \subsubsection{Example of finding multiple matches in a string} The example above only found one (the first) match in the target string. What if you want to find every match in the string, analogous to the Perl \ccode{m//g} operator? The combination of \ccode{esl\_regexp\_Compile()} and \ccode{esl\_regexp\_MultipleMatches()} provides a useful idiom for this task, as seen in this example: \begin{cchunk} #include /* for printf() */ #include #include int main(int argc, char **argv) { char *pattern; char *string; ESL_REGEXP *m; int status; int i,j; char *s; char buf[256]; int n = 0; pattern = argv[1]; string = argv[2]; m = esl_regexp_Create(); esl_regexp_Compile(m, pattern); s = string; while ((status = esl_regexp_MultipleMatches(m, &s)) == ESL_OK) { n++; esl_regexp_SubmatchCoords(m, string, 0, &i, &j); esl_regexp_SubmatchCopy(m, 0, buf, 256); printf("Match #%d: positions %d..%d sequence: %s\n", n, i+1, j+1, buf); } esl_regexp_Destroy(m); exit(0); } \end{cchunk} For example, something like this could parse a command line for one or more arguments: \begin{cchunk} % ./example2 "-[^ ]+" "foo -a --arg -O myfile" Match #1: positions 5..6 sequence: -a Match #2: positions 8..12 sequence: --arg Match #3: positions 14..15 sequence: -O \end{cchunk} Like \ccode{esl\_regexp\_Match()}, \ccode{esl\_regexp\_MultipleMatches()} finds the first match in a string. Additionally, upon returning after finding a match, \ccode{esl\_regexp\_MultipleMatches()} supplies a pointer to the next position in the string following the match (through the \ccode{\&s} argument). That facilitates writing an idiomatic \ccode{while ()} loop that steps a temporary pointer \ccode{s} through the string until no more matches are found, starting with \ccode{s = string}. Using a regular expression pattern requires compiling it into machine code (a non-deterministic finite automaton, NDFA). When you use \ccode{esl\_regexp\_Match()}, your pattern is compiled, and the resulting NDFA is run on your string to find a match. In the multiple-matching case, it's a waste to recompile the pattern for every match. Therefore, we use \ccode{esl\_regexp\_Compile()} to compile the NDFA once and hold it in the machine, and \ccode{esl\_regexp\_MultipleMatches()} takes a machine (containing a precompiled NDFA) as an argument instead of a pattern. Remember that the regexp machine is greedy, and that the pointer is set to follow each match. Therefore, multiple matches are guaranteed to be nonoverlapping, with each match matching as much of the string as it can before a subsequent match occurs -- even if this is not what you want. Otherwise, \ccode{esl\_regexp\_MultipleMatches()} and \ccode{esl\_regexp\_Match()} behave the same, in that they find the first match in the string pointer they're provided, and in terms of the information they leave in the machine for subsequent retrieval. You can also see an example of \ccode{esl\_regexp\_SubmatchCopy()} in action here, copying the complete match (``sub''match \#0), to a provided fixed-length buffer. \subsubsection{Example of parsing tokens out of a string} Text parsing is laborious in C, a language which does not inherently provide anywhere near the text-parsing power of Perl, for example. Using a regular expression to match a line of text and extract one or more tokens, demarcated by () in the expression, is a common operation in Perl. The Easel regexp machine provides much of the same power. An example of using token extraction: \begin{cchunk} #include /* for atoi() */ #include /* for printf() */ #include #include int main(int argc, char **argv) { char *pattern; char *string; int ntok; ESL_REGEXP *m; int status; int i,j; char *token; int n; pattern = argv[1]; string = argv[2]; ntok = atoi(argv[3]); m = esl_regexp_Create(); status = esl_regexp_Match(m, pattern, string); if (status == ESL_OK) { for (n = 1; n <= ntok; n++) { esl_regexp_SubmatchCoords(m, string, n, &i, &j); token = esl_regexp_SubmatchDup(m, n); printf("token #%d: %d..%d, %s\n", n, i+1, j+1, token); free(token); } } esl_regexp_Destroy(m); exit(0); } \end{cchunk} In previous examples, we only retrieved information about ``submatch'' number 0, which always refers to the entire regular expression. The machine also retains the same information about all the ()-demarcated tokens in the expression, up to 15 of them.\footnote{The limit of one complete expression plus 15 tokens is defined by a compile-time constant \ccode{ESL\_REGEXP\_NSUB} in \ccode{regexp.h}, which is set to 16 by default.} Now, we tell the retrieval functions (here, \ccode{esl\_regexp\_SubmatchCoords()} and \ccode{esl\_regexp\_SubmatchDup()}) to retrieve info for token \ccode{n} instead of 0. For example, parsing a bibliographic reference like ``Gene 102:189-196(1991)'' might go something like: \begin{cchunk} % ./example3 "(\S+) (\d+):(\d+)-(\d+)\((\d+)\)" "Gene 102:189-196(1991)" 5 token #1: 1..4, Gene token #2: 6..8, 102 token #3: 10..12, 189 token #4: 14..16, 196 token #5: 18..21, 1991 \end{cchunk} The tokens are numbered in the order that their open-parenthesis occurred in the expression, from left to right. \subsection{Syntax of regular expressions} Regular expression syntax is fairly universal and documented in many places, but because different engines implement more or less rich sets of regular expression operations, a specific description of Easel's operators follows. There are 11 metacharacters \verb'|?*+[().^$\' that encode regular expression operations. \ccode{.} is the ANY operator. It matches any single character. \ccode{?}, \ccode{*}, and \ccode{+} are repetition operators that follow some atom of the pattern. \ccode{?} means 0 or 1 occurrences of the atom; \ccode{*} means 0 or more; \ccode{+} means 1 or more. For example, \ccode{foo?} matches fo and foo; \ccode{foo*} matches fo, foo, fooo, foooo and so on; \ccode{foo+} matches foo, fooo, foooo, and so on. \verb'^' is the beginning-of-string anchor, and \ccode{\$} is the end-of-string anchor. \ccode{|} is the concatenation operator, specifying alternative ways to match. For example, \ccode{foo|bar|baz} matches baz, bar, or foo; \ccode{(foo|bar|baz)+} matches barfoobaz, foofoofoo, etc. \ccode{()} are for grouping and tokenizing. Anything inside \ccode{()} is grouped and treated as a single atom for purposes of a subsequent \ccode{?*+} operator, as in the \ccode{(foo|bar|baz)+} example above. Anything inside \ccode{()} becomes a token, extractable by \ccode{\_Submatch*} functions. The backslash \verb+\+, when followed by any metacharacter (or in fact, any non-alphanumeric character), specifies that that character should be treated as an ordinary character. For example, the pattern \verb+\\c:+ matches the string \verb+\c:+, since backslash is itself a metacharacter. A backslash followed by an alphanumeric character is either an \emph{escape character} or a \emph{character set}. Four escape characters are recognized: \verb+\f+ (form feed), \verb+\n+ (newline), \verb+\r+ (carriage return), and \verb+\t+ (TAB). Six character set codes are recognized, with the same meanings they have in Perl regular expressions: \begin{center} \begin{tabular}{lll} \textbf{code} & \textbf{meaning} & \textbf{equivalent to} \\ \verb+\d+ & digit & \verb+[0-9]+ \\ \verb+\D+ & not a digit & \verb+[^0-9]+ \\ \verb+\w+ & word character & \verb+[0-9a-z_a-Z]+ \\ \verb+\W+ & non-word character & \verb+[^0-9a-z_a-Z]+ \\ \verb+\s+ & whitespace & \verb+[ \t\n\r\f]+ \\ \verb+\S+ & non-whitespace & \verb+[^ \t\n\r\f]+ \\ \end{tabular} \end{center} A backslash is followed by an alphanumeric character that is neither an escape code or a character set code is an error. \ccode{[} is the set (or range) operator. \footnote{An unmatched \ccode{]} is not a metacharacter, but a \ccode{[} metacharacter always implies a range and always must have a closing \ccode{]}.} The set of characters inside brackets \ccode{[]} are read as a single ANYOF atom. A set may be specified as a range of ASCII characters; \ccode{[a-z]}, for example, means any lower-case character from a to z, \ccode{[a-zA-Z]} means any alphabetic character, and \ccode{[0-9]} means any digit. For example, \ccode{fo[ox]} matches foo or fox. Additionally, \verb+[^+ implies the opposite, an ANYBUT atom: any character \emph{except} the set of characters named is a match. For example, \verb'foo[^ ]+' matches ``football'' in the string ``football game''. Metacharacters are handled differently inside the \verb+[]+ range operator. The only special characters are \verb+]+, \verb+-+, and \verb+\+. A \verb+]+ character indicates the end of the range operator unless it immediately follows the \verb+[+, in which case it is treated as a normal character (thus, weirdly, \verb+[][{}()]+ will match any open/close brace/parenthesis character). The \verb+-+ character indicates the middle of a three-character \verb+x-y+ ASCII range, unless it comes at the beginning or end of the range (thus \verb+[]-]+ recognizes either \verb+]+ or \verb+-+ as literals). The \verb+\+ character indicates an escaped character. Only five such escape characters are recognized inside a range operator: \verb+\f+ (form feed), \verb+\n+ (newline), \verb+\r+ (carriage return), \verb+\t+ (TAB), and \verb+\\+ (backslash itself). Character set codes like \verb+\s+ are not allowed within range operators. hmmer-3.1b2/easel/LICENSE.sh.in0000664361611702660230000000023212473612610015376 0ustar wheelerteddyexport EASEL_VERSION=@EASEL_VERSION@ export EASEL_DATE="@EASEL_DATE@" export EASEL_COPYRIGHT="@EASEL_COPYRIGHT@" export EASEL_LICENSE="@EASEL_LICENSE@" hmmer-3.1b2/easel/configure0000775361611702660230000101025512473612604015274 0ustar wheelerteddy#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68 for Easel 0.2.snap20130225. # # Report bugs to . # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: eddys@janelia.hhmi.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Easel' PACKAGE_TARNAME='easel' PACKAGE_VERSION='0.2.snap20130225' PACKAGE_STRING='Easel 0.2.snap20130225' PACKAGE_BUGREPORT='eddys@janelia.hhmi.org' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS LIBGSL HAVE_GZIP SIMD_CFLAGS EGREP GREP PIC_FLAGS PRTDIAG SED EXEC_DEPENDENCY AR RANLIB CPP MPILIBS MPICC INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC acx_pthread_config OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build EASEL_URL EASEL_VERSION EASEL_LICENSE EASEL_COPYRIGHT EASEL_DATE target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_modular enable_debugging enable_threads enable_gcov enable_sse enable_vmx with_gsl enable_mpi with_xlc_arch enable_portable_binary with_gcc_arch enable_pic enable_largefile ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS MPICC CPP PIC_FLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Easel 0.2.snap20130225 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/easel] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Easel 0.2.snap20130225:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-modular compile and prepare modules for standalone use --enable-debugging include debugging code --enable-debugging=x also set diagnostics verbosity level to (1-3) --enable-threads enable POSIX multithreading support (default is check) --enable-gcov compile for code coverage testing --enable-sse enable SSE optimizations --enable-vmx enable Altivec/VMX optimizations --enable-mpi enable MPI parallelization --enable-portable-binary disable compiler optimizations that would produce unportable binaries --disable-pic compile PIC objects [default=enabled for shared builds on supported platforms] --disable-largefile omit support for large files Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gsl use the GSL, GNU Scientific Library --with-xlc-arch= specify architecture for xlc -qarch --with-gcc-arch= use architecture for gcc -march/-mtune, instead of guessing Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory MPICC MPI C compiler command CPP C preprocessor PIC_FLAGS compiler flags for PIC code Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Easel configure 0.2.snap20130225 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------- ## ## Report this to eddys@janelia.hhmi.org ## ## ------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_find_intX_t LINENO BITS VAR # ----------------------------------- # Finds a signed integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 $as_echo_n "checking for int$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in int$2_t 'int' 'long int' \ 'long long int' 'short int' 'signed char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t # ac_fn_c_find_uintX_t LINENO BITS VAR # ------------------------------------ # Finds an unsigned integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 $as_echo_n "checking for uint$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Easel $as_me 0.2.snap20130225, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: Configuring the Easel library for your system." >&5 $as_echo "$as_me: Configuring the Easel library for your system." >&6;} # remember if the user is overriding CFLAGS if test x"$CFLAGS" = x; then sre_cflags_env_set=no fi ################################################################ # 3. Info on the package ################################################################ EASEL_DATE="February 2013" EASEL_COPYRIGHT="Copyright (C) 2008 Howard Hughes Medical Institute" EASEL_LICENSE="Freely distributed under the Janelia Farm Software License." EASEL_VERSION=$PACKAGE_VERSION EASEL_URL="http://easel.janelia.org/" # Output variables. # (AC_OUTPUT replaces instances of @var@ in input files.) # Preprocessor symbols. # adds a -Dvar=value to @DEFS@; # replace #undef's in easel.h.in cat >>confdefs.h <<_ACEOF #define EASEL_DATE "$EASEL_DATE" _ACEOF cat >>confdefs.h <<_ACEOF #define EASEL_COPYRIGHT "$EASEL_COPYRIGHT" _ACEOF cat >>confdefs.h <<_ACEOF #define EASEL_LICENSE "$EASEL_LICENSE" _ACEOF cat >>confdefs.h <<_ACEOF #define EASEL_VERSION "$EASEL_VERSION" _ACEOF # Figure out what host we're compiling on. # Three GNU scripts must be included in the distro: # install.sh, config.guess, config.sub # This sets four shell variables: # host example: i686-pc-linux-gnu # host_cpu example: i686 # host_vendor example: pc # host_os example: linux-gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ################################################################ # 3b. ./configure command line options, for optional config # of the package ################################################################ # --enable-modular - configure for use of standalone modules # # Default is to enable all augmentations and compile entire library. # With --enable-modular, any desired augmentations must be set # at compile-time by the user. # # Check whether --enable-modular was given. if test "${enable_modular+set}" = set; then : enableval=$enable_modular; { $as_echo "$as_me:${as_lineno-$LINENO}: Compiling for standalone (independent) use of modules." >&5 $as_echo "$as_me: Compiling for standalone (independent) use of modules." >&6;} else { $as_echo "$as_me:${as_lineno-$LINENO}: Compiling the full Easel library, with all augmentations." >&5 $as_echo "$as_me: Compiling the full Easel library, with all augmentations." >&6;} $as_echo "#define eslAUGMENT_ALPHABET 1" >>confdefs.h $as_echo "#define eslAUGMENT_NCBI 1" >>confdefs.h $as_echo "#define eslAUGMENT_DMATRIX 1" >>confdefs.h $as_echo "#define eslAUGMENT_FILEPARSER 1" >>confdefs.h $as_echo "#define eslAUGMENT_GEV 1" >>confdefs.h $as_echo "#define eslAUGMENT_GUMBEL 1" >>confdefs.h $as_echo "#define eslAUGMENT_HISTOGRAM 1" >>confdefs.h $as_echo "#define eslAUGMENT_KEYHASH 1" >>confdefs.h $as_echo "#define eslAUGMENT_MINIMIZER 1" >>confdefs.h $as_echo "#define eslAUGMENT_MSA 1" >>confdefs.h $as_echo "#define eslAUGMENT_RANDOM 1" >>confdefs.h $as_echo "#define eslAUGMENT_SSI 1" >>confdefs.h $as_echo "#define eslAUGMENT_STATS 1" >>confdefs.h $as_echo "#define eslLIBRARY 1" >>confdefs.h fi # --enable-debugging - enable basic debugging code (level 1) # --enable-debugging=x - also set verbosity level to (1-3) # # At all levels, replaces CFLAGS w/ "-g -Wall" (so it assumes gcc). # Sets the eslDEBUGLEVEL preprocessor symbol to # # Check whether --enable-debugging was given. if test "${enable_debugging+set}" = set; then : enableval=$enable_debugging; enable_debugging=$enableval else enable_debugging=no fi case $enable_debugging in yes) $as_echo "#define eslDEBUGLEVEL 1" >>confdefs.h ;; 1) $as_echo "#define eslDEBUGLEVEL 1" >>confdefs.h ;; 2) $as_echo "#define eslDEBUGLEVEL 2" >>confdefs.h ;; 3) $as_echo "#define eslDEBUGLEVEL 3" >>confdefs.h ;; no) $as_echo "#define eslDEBUGLEVEL 0" >>confdefs.h ;; *) as_fn_error $? "Unknown argument to --enable-debugging: $enable_debugging" "$LINENO" 5;; esac # --enable-threads Enable POSIX multithreading # # Uses ACX_PTHREAD macro from the GNU macro archive. # Back to my code to finish enabling pthreads... # Define these preprocessor variables: # HAVE_PTHREAD # HAVE_PTHREAD_SETCONCURRENCY # HAVE_PTHREAD_ATTR_SETSCOPE # # Check whether --enable-threads was given. if test "${enable_threads+set}" = set; then : enableval=$enable_threads; else enable_threads=check fi case $enable_threads in yes) check_threads=yes ;; no) check_threads=no ;; check) check_threads=yes ;; *) check_threads=no { $as_echo "$as_me:${as_lineno-$LINENO}: Ignoring unknown argument to --enable-threads: $enable_threads" >&5 $as_echo "$as_me: Ignoring unknown argument to --enable-threads: $enable_threads" >&6;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "x$check_threads" != xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu acx_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 $as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_join (); int main () { return pthread_join (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : acx_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 $as_echo "$acx_pthread_ok" >&6; } if test x"$acx_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthread or # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags" ;; esac if test x"$acx_pthread_ok" = xno; then for flag in $acx_pthread_flags; do case $flag in none) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 $as_echo_n "checking whether pthreads work without any flags... " >&6; } ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 $as_echo_n "checking whether pthreads work with $flag... " >&6; } PTHREAD_CFLAGS="$flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_acx_pthread_config+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$acx_pthread_config"; then ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_acx_pthread_config="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" fi fi acx_pthread_config=$ac_cv_prog_acx_pthread_config if test -n "$acx_pthread_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5 $as_echo "$acx_pthread_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$acx_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 $as_echo_n "checking for the pthreads library -l$flag... " >&6; } PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : acx_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 $as_echo "$acx_pthread_ok" >&6; } if test "x$acx_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$acx_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: threads are created detached by default # and the JOINABLE attribute has a nonstandard name (UNDETACHED). { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 $as_echo_n "checking for joinable pthread attribute... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int attr=PTHREAD_CREATE_JOINABLE; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ok=PTHREAD_CREATE_JOINABLE else ok=unknown fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test x"$ok" = xunknown; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int attr=PTHREAD_CREATE_UNDETACHED; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ok=PTHREAD_CREATE_UNDETACHED else ok=unknown fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then $as_echo "#define PTHREAD_CREATE_JOINABLE \$ok" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ok}" >&5 $as_echo "${ok}" >&6; } if test x"$ok" = xunknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: we do not know how to create joinable pthreads" >&5 $as_echo "$as_me: WARNING: we do not know how to create joinable pthreads" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 $as_echo_n "checking if more special flags are required for pthreads... " >&6; } flag=no # Added _POSIX_PTHREAD_SEMANTICS for solaris. Needed for ctime_r() compliance. # SRE, Fri Oct 29 10:03:36 2010 [J7/3] case "${host_cpu}-${host_os}" in *-aix* | *-freebsd*) flag="-D_THREAD_SAFE";; *solaris*) flag="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS";; *-osf* | *-hpux*) flag="-D_REENTRANT";; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 $as_echo "${flag}" >&6; } if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with cc_r # Extract the first word of "cc_r", so it can be a program name with args. set dummy cc_r; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PTHREAD_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_PTHREAD_CC="cc_r" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PTHREAD_CC" && ac_cv_prog_PTHREAD_CC="${CC}" fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 $as_echo "$PTHREAD_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else PTHREAD_CC="$CC" fi # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$acx_pthread_ok" = xyes; then $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h : else acx_pthread_ok=no if test "x$enable_threads" != xcheck; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "POSIX multithreading failed See \`config.log' for more details" "$LINENO" 5; } fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi # Check whether --enable-gcov was given. if test "${enable_gcov+set}" = set; then : enableval=$enable_gcov; enable_gcov=$enableval else enable_gcov=no fi # Check whether --enable-sse was given. if test "${enable_sse+set}" = set; then : enableval=$enable_sse; enable_sse=$enableval else enable_sse=check fi # Check whether --enable-vmx was given. if test "${enable_vmx+set}" = set; then : enableval=$enable_vmx; enable_vmx=$enableval else enable_vmx=check fi # Check whether --with-gsl was given. if test "${with_gsl+set}" = set; then : withval=$with_gsl; with_gsl=$withval else with_gsl=no fi # Check whether --enable-mpi was given. if test "${enable_mpi+set}" = set; then : enableval=$enable_mpi; enable_mpi=$enableval else enable_mpi=no fi ################################################################ # 4. Checks for programs ################################################################ ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # MPI : set @CC@ to mpicc, sets @MPILIBS@, defines HAVE_MPI. if test "$enable_mpi" = "yes"; then for ac_prog in mpicc hcc mpxlc_r mpxlc mpcc cmpicc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MPICC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MPICC"; then ac_cv_prog_MPICC="$MPICC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MPICC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MPICC=$ac_cv_prog_MPICC if test -n "$MPICC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPICC" >&5 $as_echo "$MPICC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$MPICC" && break done test -n "$MPICC" || MPICC="$CC" acx_mpi_save_CC="$CC" CC="$MPICC" if test x = x"$MPILIBS"; then ac_fn_c_check_func "$LINENO" "MPI_Init" "ac_cv_func_MPI_Init" if test "x$ac_cv_func_MPI_Init" = xyes; then : MPILIBS=" " fi fi if test x = x"$MPILIBS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lmpi" >&5 $as_echo_n "checking for MPI_Init in -lmpi... " >&6; } if ${ac_cv_lib_mpi_MPI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmpi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char MPI_Init (); int main () { return MPI_Init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_mpi_MPI_Init=yes else ac_cv_lib_mpi_MPI_Init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpi_MPI_Init" >&5 $as_echo "$ac_cv_lib_mpi_MPI_Init" >&6; } if test "x$ac_cv_lib_mpi_MPI_Init" = xyes; then : MPILIBS="-lmpi" fi fi if test x = x"$MPILIBS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lmpich" >&5 $as_echo_n "checking for MPI_Init in -lmpich... " >&6; } if ${ac_cv_lib_mpich_MPI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmpich $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char MPI_Init (); int main () { return MPI_Init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_mpich_MPI_Init=yes else ac_cv_lib_mpich_MPI_Init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpich_MPI_Init" >&5 $as_echo "$ac_cv_lib_mpich_MPI_Init" >&6; } if test "x$ac_cv_lib_mpich_MPI_Init" = xyes; then : MPILIBS="-lmpich" fi fi if test x != x"$MPILIBS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mpi.h" >&5 $as_echo_n "checking for mpi.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else MPILIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi CC="$acx_mpi_save_CC" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x = x"$MPILIBS"; then as_fn_error $? "MPI library not found for --enable-mpi" "$LINENO" 5 : else $as_echo "#define HAVE_MPI 1" >>confdefs.h : fi CC=$MPICC fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 $as_echo_n "checking for C compiler vendor... " >&6; } if ${ax_cv_c_compiler_vendor+:} false; then : $as_echo_n "(cached) " >&6 else ax_cv_c_compiler_vendor=unknown # note: don't check for gcc first since some other compilers define __GNUC__ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if !($vencpp) thisisanerror; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_compiler_vendor=`echo $ventest | cut -d: -f1`; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5 $as_echo "$ax_cv_c_compiler_vendor" >&6; } # AC_PROG_CC_STDC wants to append -c99 to icc; icc doesn't like this. if test "$ax_cv_c_compiler_vendor" != "intel"; then case $ac_cv_prog_cc_stdc in #( no) : ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 else ac_cv_prog_cc_stdc=no fi fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 $as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } if ${ac_cv_prog_cc_stdc+:} false; then : $as_echo_n "(cached) " >&6 fi case $ac_cv_prog_cc_stdc in #( no) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; #( '') : { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 $as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; esac fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_AR+:} false; then : $as_echo_n "(cached) " >&6 else case $AR in [\\/]* | ?:[\\/]*) ac_cv_path_AR="$AR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/usr/ccs/bin:/usr/xpg4/bin" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_AR" && ac_cv_path_AR=":" ;; esac fi AR=$ac_cv_path_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether you have a GNU make" >&5 $as_echo_n "checking whether you have a GNU make... " >&6; } foundGNUmake='nope, so we assume you will use a sysv-compatible make.' ; EXEC_DEPENDENCY=\$\$\@.o ; for a in "$MAKE" make gmake gnumake ; do if test -z "$a" ; then continue ; fi ; if ( sh -c "$a --version" 2> /dev/null | grep GNU 2>&1 > /dev/null ) ; then foundGNUmake='yes, you do; and we assume you will use it!' ; EXEC_DEPENDENCY='%: %.o' ; fi done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $foundGNUmake" >&5 $as_echo "$foundGNUmake" >&6; } # --enable-xlc-arch Set the code generation for a particular architecture # # The xlc compiler on AIX seems to need the -qarch flag to be set for a processor # that is VMX enabled. Otherwise a warning is issued that states the -qenablevmx # and -qaltivec flags are ignored. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 $as_echo_n "checking for C compiler vendor... " >&6; } if ${ax_cv_c_compiler_vendor+:} false; then : $as_echo_n "(cached) " >&6 else ax_cv_c_compiler_vendor=unknown # note: don't check for gcc first since some other compilers define __GNUC__ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if !($vencpp) thisisanerror; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_compiler_vendor=`echo $ventest | cut -d: -f1`; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5 $as_echo "$ax_cv_c_compiler_vendor" >&6; } if test "${ax_cv_c_compiler_vendor}" = "ibm"; then # Check whether --with-xlc-arch was given. if test "${with_xlc_arch+set}" = set; then : withval=$with_xlc_arch; XLC_ARCH=$withval else XLC_ARCH=no fi fi # Select our default optimization flags in CFLAGS. # if test "$sre_cflags_env_set" = "no"; then if test "$enable_gcov" = "yes"; then # --enable-gcov overrides CC too. CC="gcc" CFLAGS="-g -Wall -fprofile-arcs -ftest-coverage" elif test "$enable_debugging" != "no"; then if test "$GCC" = "yes"; then CFLAGS="-g -Wall" fi else sre_save_ac_test_cflags="$ac_test_CFLAGS" if test "$sre_cflags_env_set" = "no"; then ac_test_CFLAGS="" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed # Check whether --enable-portable-binary was given. if test "${enable_portable_binary+set}" = set; then : enableval=$enable_portable_binary; acx_maxopt_portable=$withval else acx_maxopt_portable=no fi # Try to determine "good" native compiler flags if none specified via CFLAGS if test "$ac_test_CFLAGS" != "set"; then CFLAGS="" case $ax_cv_c_compiler_vendor in dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -tune host" # CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" if test "x$acx_maxopt_portable" = xno; then CFLAGS="$CFLAGS -arch host" fi;; sun) CFLAGS="-native -xO5 -dalign" # CFLAGS="-native -fast -xO5 -dalign" if test "x$acx_maxopt_portable" = xyes; then CFLAGS="$CFLAGS -xarch=generic" fi;; hp) CFLAGS="+Oall +Optrs_ansi +DSnative" if test "x$acx_maxopt_portable" = xyes; then CFLAGS="$CFLAGS +DAportable" fi;; ibm) xlc_opt="-qtune=auto -qstrict" if test "x$acx_maxopt_portable" = xno; then if test "x$XLC_ARCH" = xno; then xlc_opt="-qarch=auto $xlc_opt" else xlc_opt="-qarch=$XLC_ARCH $xlc_opt" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $xlc_opt" >&5 $as_echo_n "checking whether C compiler accepts $xlc_opt... " >&6; } ax_save_FLAGS=$CFLAGS CFLAGS="$xlc_opt" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=yes else eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then CFLAGS="-O3 -qansialias -w $xlc_opt" else CFLAGS="-O3 -qansialias -w" echo "******************************************************" echo "* You seem to have the IBM C compiler. It is *" echo "* recommended for best performance that you use: *" echo "* *" echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" echo "* ^^^ ^^^ *" echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" echo "* CPU you have. (Set the CFLAGS environment var. *" echo "* and re-run configure.) For more info, man cc. *" echo "******************************************************" fi ;; intel) CFLAGS="-O3 -ansi_alias" if test "x$acx_maxopt_portable" = xno; then icc_archflag=unknown icc_flags="" case $host_cpu in i686*|x86_64*) # icc accepts gcc assembly syntax, so these should work: ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 $as_echo_n "checking for x86 cpuid 0 output... " >&6; } if ${ax_cv_gcc_x86_cpuid_0+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ax_cv_gcc_x86_cpuid_0=unknown else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int op = 0, eax, ebx, ecx, edx; FILE *f; __asm__("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (op)); f = fopen("conftest_cpuid", "w"); if (!f) return 1; fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); fclose(f); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid else ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 $as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 $as_echo_n "checking for x86 cpuid 1 output... " >&6; } if ${ax_cv_gcc_x86_cpuid_1+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ax_cv_gcc_x86_cpuid_1=unknown else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int op = 1, eax, ebx, ecx, edx; FILE *f; __asm__("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (op)); f = fopen("conftest_cpuid", "w"); if (!f) return 1; fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); fclose(f); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid else ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 $as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG *:756e6547:*:*) # Intel case $ax_cv_gcc_x86_cpuid_1 in *6a?:*[234]:*:*|*6[789b]?:*:*:*) icc_flags="-xK";; *f3[347]:*:*:*|*f41347:*:*:*) icc_flags="-xP -xN -xW -xK";; *f??:*:*:*) icc_flags="-xN -xW -xK";; esac ;; esac ;; esac if test "x$icc_flags" != x; then for flag in $icc_flags; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } ax_save_FLAGS=$CFLAGS CFLAGS="$flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes else eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then icc_archflag=$flag; break else : fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icc architecture flag" >&5 $as_echo_n "checking for icc architecture flag... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $icc_archflag" >&5 $as_echo "$icc_archflag" >&6; } if test "x$icc_archflag" != xunknown; then CFLAGS="$CFLAGS $icc_archflag" fi fi ;; gnu) # default optimization flags for gcc on all systems CFLAGS="-O3 -fomit-frame-pointer" # -malign-double for x86 systems # SRE: no, that's a bad idea; # on 32bit Ubuntu Linux systems, for example, this # causes an odd and buggy interaction with _FILE_OFFSET_BITS (LFS) # and fstat(). # AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double") # -fstrict-aliasing for gcc-2.95+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5 $as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; } if ${ax_cv_c_flags__fstrict_aliasing+:} false; then : $as_echo_n "(cached) " >&6 else ax_save_FLAGS=$CFLAGS CFLAGS="-fstrict-aliasing" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_flags__fstrict_aliasing=yes else ax_cv_c_flags__fstrict_aliasing=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS fi eval ax_check_compiler_flags=$ax_cv_c_flags__fstrict_aliasing { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then CFLAGS="$CFLAGS -fstrict-aliasing" else : fi # note that we enable "unsafe" fp optimization with other compilers, too # SRE: no, that's a bad idea, don't use this # AX_CHECK_COMPILER_FLAGS(-ffast-math, CFLAGS="$CFLAGS -ffast-math") # Check whether --with-gcc-arch was given. if test "${with_gcc_arch+set}" = set; then : withval=$with_gcc_arch; ax_gcc_arch=$withval else ax_gcc_arch=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 $as_echo_n "checking for gcc architecture flag... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } if ${ax_cv_gcc_archflag+:} false; then : $as_echo_n "(cached) " >&6 else ax_cv_gcc_archflag="unknown" if test "$GCC" = yes; then if test "x$ax_gcc_arch" = xyes; then ax_gcc_arch="" if test "$cross_compiling" = no; then case $host_cpu in i[3456]86*|x86_64*|amd64*) # use cpuid codes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 $as_echo_n "checking for x86 cpuid 0 output... " >&6; } if ${ax_cv_gcc_x86_cpuid_0+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ax_cv_gcc_x86_cpuid_0=unknown else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int op = 0, eax, ebx, ecx, edx; FILE *f; __asm__("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (op)); f = fopen("conftest_cpuid", "w"); if (!f) return 1; fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); fclose(f); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid else ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 $as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 $as_echo_n "checking for x86 cpuid 1 output... " >&6; } if ${ax_cv_gcc_x86_cpuid_1+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ax_cv_gcc_x86_cpuid_1=unknown else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int op = 1, eax, ebx, ecx, edx; FILE *f; __asm__("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (op)); f = fopen("conftest_cpuid", "w"); if (!f) return 1; fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); fclose(f); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid else ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 $as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case $ax_cv_gcc_x86_cpuid_0 in *:756e6547:*:*) # Intel case $ax_cv_gcc_x86_cpuid_1 in *5[48]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; *5??:*:*:*) ax_gcc_arch=pentium ;; *1?6[7d]?:*:*:*) ax_gcc_arch="penryn core2 pentium-m pentium3 pentiumpro" ;; *1?6[aef]?:*:*:*|*2?6[5cef]?:*:*:*) ax_gcc_arch="corei7 core2 pentium-m pentium3 pentiumpro" ;; *1?6c?:*:*:*|*[23]?66?:*:*:*) ax_gcc_arch="atom core2 pentium-m pentium3 pentiumpro" ;; *2?6[ad]?:*:*:*) ax_gcc_arch="corei7-avx corei7 core2 pentium-m pentium3 pentiumpro" ;; *[1-9a-f]?6??:*:*:*) ax_gcc_arch="core2 pentiumpro" ;; *6[3456]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; *6a?:*[01]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; *6a?:*[234]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; *6[9de]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; *6[78b]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; *6f?:*:*:*) ax_gcc_arch="core2 pentium-m pentium3 pentiumpro" ;; *6??:*:*:*) ax_gcc_arch=pentiumpro ;; *f3[347]:*:*:*|*f41347:*:*:*|*f6?:*:*:*) case $host_cpu in x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; esac ;; *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; esac ;; *:68747541:*:*) # AMD case $ax_cv_gcc_x86_cpuid_1 in *5[67]?:*:*:*) ax_gcc_arch=k6 ;; *5[8d]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; *5[9]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; *60?:*:*:*) ax_gcc_arch=k7 ;; *6[12]?:*:*:*) ax_gcc_arch="athlon k7" ;; *6[34]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; *6[68a]?:*:*:*) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0x80000006 output" >&5 $as_echo_n "checking for x86 cpuid 0x80000006 output... " >&6; } if ${ax_cv_gcc_x86_cpuid_0x80000006+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ax_cv_gcc_x86_cpuid_0x80000006=unknown else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int op = 0x80000006, eax, ebx, ecx, edx; FILE *f; __asm__("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (op)); f = fopen("conftest_cpuid", "w"); if (!f) return 1; fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); fclose(f); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ax_cv_gcc_x86_cpuid_0x80000006=`cat conftest_cpuid`; rm -f conftest_cpuid else ax_cv_gcc_x86_cpuid_0x80000006=unknown; rm -f conftest_cpuid fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0x80000006" >&5 $as_echo "$ax_cv_gcc_x86_cpuid_0x80000006" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # L2 cache size case $ax_cv_gcc_x86_cpuid_0x80000006 in *:*:*[1-9a-f]??????:*) # (L2 = ecx >> 16) >= 256 ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; *) ax_gcc_arch="athlon-4 athlon k7" ;; esac ;; *5??f??:*:*:*) ax_gcc_arch="btver1 amdfam10 k8" ;; *6??f??:*:*:*) ax_gcc_arch="bdver1 amdfam10 k8" ;; *[1-9a-f]??f??:*:*:*) ax_gcc_arch="amdfam10 k8" ;; *f[4cef8b]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; *f5?:*:*:*) ax_gcc_arch="opteron k8" ;; *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; *f??:*:*:*) ax_gcc_arch="k8" ;; esac ;; *:746e6543:*:*) # IDT case $ax_cv_gcc_x86_cpuid_1 in *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; *58?:*:*:*) ax_gcc_arch=winchip2 ;; *6[78]?:*:*:*) ax_gcc_arch=c3 ;; *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; esac ;; esac if test x"$ax_gcc_arch" = x; then # fallback case $host_cpu in i586*) ax_gcc_arch=pentium ;; i686*) ax_gcc_arch=pentiumpro ;; esac fi ;; sparc*) # Extract the first word of "prtdiag", so it can be a program name with args. set dummy prtdiag; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PRTDIAG+:} false; then : $as_echo_n "(cached) " >&6 else case $PRTDIAG in [\\/]* | ?:[\\/]*) ac_cv_path_PRTDIAG="$PRTDIAG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PRTDIAG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PRTDIAG" && ac_cv_path_PRTDIAG="prtdiag" ;; esac fi PRTDIAG=$ac_cv_path_PRTDIAG if test -n "$PRTDIAG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRTDIAG" >&5 $as_echo "$PRTDIAG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` cputype=`echo "$cputype" | tr -d ' -' | $SED 's/SPARCIIi/SPARCII/' |tr $as_cr_LETTERS $as_cr_letters` case $cputype in *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; *supersparc*|*tms390z5[05]*) ax_gcc_arch="supersparc v8" ;; *hypersparc*|*rt62[056]*) ax_gcc_arch="hypersparc v8" ;; *cypress*) ax_gcc_arch=cypress ;; esac ;; alphaev5) ax_gcc_arch=ev5 ;; alphaev56) ax_gcc_arch=ev56 ;; alphapca56) ax_gcc_arch="pca56 ev56" ;; alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; alphaev6) ax_gcc_arch=ev6 ;; alphaev67) ax_gcc_arch=ev67 ;; alphaev68) ax_gcc_arch="ev68 ev67" ;; alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; powerpc*) cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | $SED 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` cputype=`echo $cputype | $SED -e 's/ppc//g;s/ *//g'` case $cputype in *750*) ax_gcc_arch="750 G3" ;; *740[0-9]*) ax_gcc_arch="$cputype 7400 G4" ;; *74[4-5][0-9]*) ax_gcc_arch="$cputype 7450 G4" ;; *74[0-9][0-9]*) ax_gcc_arch="$cputype G4" ;; *970*) ax_gcc_arch="970 G5 power4";; *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; 603ev|8240) ax_gcc_arch="$cputype 603e 603";; *) ax_gcc_arch=$cputype ;; esac ax_gcc_arch="$ax_gcc_arch powerpc" ;; esac fi # not cross-compiling fi # guess arch if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then for arch in $ax_gcc_arch; do if test "x$acx_maxopt_portable" = xyes; then # if we require portable code flags="-mtune=$arch" # -mcpu=$arch and m$arch generate nonportable code on every arch except # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac else flags="-march=$arch -mcpu=$arch -m$arch" fi for flag in $flags; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then : ax_cv_gcc_archflag=$flag; break else : fi done test "x$ax_cv_gcc_archflag" = xunknown || break done fi fi # $GCC=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 $as_echo_n "checking for gcc architecture flag... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_archflag" >&5 $as_echo "$ax_cv_gcc_archflag" >&6; } if test "x$ax_cv_gcc_archflag" = xunknown; then : else CFLAGS="$CFLAGS $ax_cv_gcc_archflag" fi ;; esac if test -z "$CFLAGS"; then echo "" echo "********************************************************" echo "* WARNING: Don't know the best CFLAGS for this system *" echo "* Use ./configure CFLAGS=... to specify your own flags *" echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" echo "********************************************************" echo "" CFLAGS="-O3" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 $as_echo_n "checking whether C compiler accepts $CFLAGS... " >&6; } ax_save_FLAGS=$CFLAGS CFLAGS="$CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=yes else eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then : else echo "" echo "********************************************************" echo "* WARNING: The guessed CFLAGS don't seem to work with *" echo "* your compiler. *" echo "* Use ./configure CFLAGS=... to specify your own flags *" echo "********************************************************" echo "" CFLAGS="" fi fi ac_test_CFLAGS="$sre_save_ac_test_cflags" # That was a workaround. AX_CC_MAXOPT apparently thinks that # $ac_test_CFLAGS only gets set if ${CFLAGS} was set by the # user (in the environment), but that's not so; it gets set # by AC_PROG_CC. Instead of rewriting AX_CC_MAXOPT, we fool # it. fi fi # Figure out how to generate PIC code for shared libraries # This sets @PIC_FLAGS@ output variable # Check whether --enable-pic was given. if test "${enable_pic+set}" = set; then : enableval=$enable_pic; enable_pic="$enableval" test "x$enable_pic" = x && enable_pic=auto else enable_pic=auto fi # disable PIC by default for static builds if test "$enable_pic" = auto && test "$enable_static" = yes; then enable_pic=no fi # if PIC hasn't been explicitly disabled, try to figure out the flags if test "$enable_pic" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to produce PIC" >&5 $as_echo_n "checking for $CC option to produce PIC... " >&6; } # allow the user's flags to override if test "x$PIC_FLAGS" = x; then # see if we're using GCC if test "x$GCC" = xyes; then case "$host_os" in aix*|beos*|cygwin*|irix5*|irix6*|osf3*|osf4*|osf5*) # PIC is the default for these OSes. ;; mingw*|os2*|pw32*) # This hack is so that the source file can tell whether # it is being built for inclusion in a dll (and should # export symbols for example). PIC_FLAGS="-DDLL_EXPORT" ;; darwin*|rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files PIC_FLAGS="-fno-common" ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, # but not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) PIC_FLAGS="-fPIC" ;; esac ;; *) # Everyone else on GCC uses -fPIC PIC_FLAGS="-fPIC" ;; esac else # !GCC case "$host_os" in hpux9*|hpux10*|hpux11*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, # but not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) PIC_FLAGS="+Z" ;; esac ;; linux*|k*bsd*-gnu) case `basename "$CC"` in icc*|ecc*|ifort*) PIC_FLAGS="-KPIC" ;; pgcc*|pgf77*|pgf90*|pgf95*) # Portland Group compilers (*not* the Pentium gcc # compiler, which looks to be a dead project) PIC_FLAGS="-fpic" ;; ccc*) # All Alpha code is PIC. ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC PIC_FLAGS="-qpic" ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*|*Sun\ F*) # Sun C 5.9 or Sun Fortran PIC_FLAGS="-KPIC" ;; esac esac ;; solaris*) PIC_FLAGS="-KPIC" ;; sunos4*) PIC_FLAGS="-PIC" ;; esac fi # GCC fi # PIC_FLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PIC_FLAGS" >&5 $as_echo "$PIC_FLAGS" >&6; } fi # SSE: figure out our @SIMD_CFLAGS@, define HAVE_SSE2 # The AC_RUN_IFELSE() is there because it's possible to have # hardware that doesn't support SSE2 instructions, yet the # compiler can generate them: example AMD Athlons with gcc. # So we need to test that an SSE2 program actually runs without # generating an "illegal instruction" error. The program # here is sufficient [xref J3/127]. # Note: some platforms (Ubuntu 32-bit for example) absolutely # must have the -msse2 cflag on in order to detect a working # emmintrin.h, so we set SIMD_CFLAGS before running the test. if test "$enable_sse" = "yes" || test "$enable_sse" = "check"; then if test "x$SIMD_CFLAGS" = x; then case $ax_cv_c_compiler_vendor in gnu) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -msse2" >&5 $as_echo_n "checking whether C compiler accepts -msse2... " >&6; } if ${ax_cv_c_flags__msse2+:} false; then : $as_echo_n "(cached) " >&6 else ax_save_FLAGS=$CFLAGS CFLAGS="-msse2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_flags__msse2=yes else ax_cv_c_flags__msse2=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS fi eval ax_check_compiler_flags=$ax_cv_c_flags__msse2 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then SIMD_CFLAGS="-msse2" else : fi ;; *) ;; esac fi fi if test "$enable_sse" = "check" && test "$enable_vmx" != "yes"; then sre_save_CFLAGS="$CFLAGS" sre_save_CPPFLAGS="$CPPFLAGS" CFLAGS="$CFLAGS $SIMD_CFLAGS" CPPFLAGS="$CPPFLAGS $SIMD_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "emmintrin.h" "ac_cv_header_emmintrin_h" "$ac_includes_default" if test "x$ac_cv_header_emmintrin_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if platform can run SSE/SSE2 instructions" >&5 $as_echo_n "checking if platform can run SSE/SSE2 instructions... " >&6; } if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { __m128i v = _mm_set1_epi8(0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } enable_sse=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi CFLAGS="$sre_save_CFLAGS" CPPFLAGS="$sre_save_CPPFLAGS" fi if test "$enable_sse" = "yes"; then $as_echo "#define HAVE_SSE2 1" >>confdefs.h fi # VMX/Altivec (not autodetected yet; must use --enable-vmx to enable) if test "$enable_sse" != "yes"; then if test "x$SIMD_CFLAGS" = x; then VMX_SIMD_CFLAGS="" if test "$GCC" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -faltivec" >&5 $as_echo_n "checking whether C compiler accepts -faltivec... " >&6; } if ${ax_cv_c_flags__faltivec+:} false; then : $as_echo_n "(cached) " >&6 else ax_save_FLAGS=$CFLAGS CFLAGS="-faltivec" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_flags__faltivec=yes else ax_cv_c_flags__faltivec=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS fi eval ax_check_compiler_flags=$ax_cv_c_flags__faltivec { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then VMX_SIMD_CFLAGS="-faltivec" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -maltivec -mabi=altivec" >&5 $as_echo_n "checking whether C compiler accepts -maltivec -mabi=altivec... " >&6; } ax_save_FLAGS=$CFLAGS CFLAGS="-maltivec -mabi=altivec" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval `$as_echo "ax_cv_c_flags_-maltivec -mabi=altivec" | $as_tr_sh`=yes else eval `$as_echo "ax_cv_c_flags_-maltivec -mabi=altivec" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_-maltivec -mabi=altivec" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then VMX_SIMD_CFLAGS="-maltivec -mabi=altivec" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fvec" >&5 $as_echo_n "checking whether C compiler accepts -fvec... " >&6; } if ${ax_cv_c_flags__fvec+:} false; then : $as_echo_n "(cached) " >&6 else ax_save_FLAGS=$CFLAGS CFLAGS="-fvec" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_flags__fvec=yes else ax_cv_c_flags__fvec=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS fi eval ax_check_compiler_flags=$ax_cv_c_flags__fvec { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then VMX_SIMD_CFLAGS="-fvec" else as_fn_error $? "Need a version of gcc with -maltivec" "$LINENO" 5 fi fi fi elif test "${ax_cv_c_compiler_vendor}" = "ibm"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -qenablevmx" >&5 $as_echo_n "checking whether C compiler accepts -qenablevmx... " >&6; } if ${ax_cv_c_flags__qenablevmx+:} false; then : $as_echo_n "(cached) " >&6 else ax_save_FLAGS=$CFLAGS CFLAGS="-qenablevmx" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_flags__qenablevmx=yes else ax_cv_c_flags__qenablevmx=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS fi eval ax_check_compiler_flags=$ax_cv_c_flags__qenablevmx { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then VMX_SIMD_CFLAGS="$VMX_SIMD_CFLAGS -qenablevmx" else : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -qaltivec" >&5 $as_echo_n "checking whether C compiler accepts -qaltivec... " >&6; } if ${ax_cv_c_flags__qaltivec+:} false; then : $as_echo_n "(cached) " >&6 else ax_save_FLAGS=$CFLAGS CFLAGS="-qaltivec" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_flags__qaltivec=yes else ax_cv_c_flags__qaltivec=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS fi eval ax_check_compiler_flags=$ax_cv_c_flags__qaltivec { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then VMX_SIMD_CFLAGS="$VMX_SIMD_CFLAGS -qaltivec" else : fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -faltivec" >&5 $as_echo_n "checking whether C compiler accepts -faltivec... " >&6; } if ${ax_cv_c_flags__faltivec+:} false; then : $as_echo_n "(cached) " >&6 else ax_save_FLAGS=$CFLAGS CFLAGS="-faltivec" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_c_flags__faltivec=yes else ax_cv_c_flags__faltivec=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_save_FLAGS fi eval ax_check_compiler_flags=$ax_cv_c_flags__faltivec { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 $as_echo "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then VMX_SIMD_CFLAGS="-faltivec" else : fi fi else VMX_SIMD_CFLAGS="$SIMD_CFLAGS" fi if test "$enable_vmx" = "check"; then sre_save_cflags="$CFLAGS" CFLAGS="$CFLAGS $VMX_SIMD_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if platform can run Altivec/VMX instructions" >&5 $as_echo_n "checking if platform can run Altivec/VMX instructions... " >&6; } if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { vector unsigned char zerov; vector unsigned char onev; zerov = vec_splat_u8(0); onev = vec_splat_u8(1); onev = vec_adds(onev, zerov); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } enable_vmx=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "${ax_cv_c_compiler_vendor}" = "ibm"; then echo "******************************************************" echo "* You seem to have the IBM C compiler. If your *" echo "* processor supports vector instructions it is *" echo "* possible specifying an architecture would enable *" echo "* vector support, i.e. *" echo "* *" echo "* --with-xlc-arch=XXX *" echo "* *" echo "* where XXX is pwr6, auto or whatever kind of CPU *" echo "* you have. *" echo "******************************************************" fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$sre_save_cflags" fi if test "$enable_vmx" = "yes"; then SIMD_CFLAGS="$VMX_SIMD_CFLAGS" $as_echo "#define HAVE_VMX 1" >>confdefs.h fi fi # Define HAVE_GZIP if gzip is in $PATH (or if HAVE_GZIP is already set) # Extract the first word of ""gzip"", so it can be a program name with args. set dummy "gzip"; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_HAVE_GZIP+:} false; then : $as_echo_n "(cached) " >&6 else case $HAVE_GZIP in [\\/]* | ?:[\\/]*) ac_cv_path_HAVE_GZIP="$HAVE_GZIP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_HAVE_GZIP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_HAVE_GZIP" && ac_cv_path_HAVE_GZIP=""no"" ;; esac fi HAVE_GZIP=$ac_cv_path_HAVE_GZIP if test -n "$HAVE_GZIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_GZIP" >&5 $as_echo "$HAVE_GZIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "${HAVE_GZIP}" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: gzip not found" >&5 $as_echo "$as_me: WARNING: gzip not found" >&2;} else $as_echo "#define HAVE_GZIP 1" >>confdefs.h fi # 5. Checks for libraries. LIBGSL= if test "x$with_gsl" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gsl_expm1 in -lgsl" >&5 $as_echo_n "checking for gsl_expm1 in -lgsl... " >&6; } if ${ac_cv_lib_gsl_gsl_expm1+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgsl -lgslcblas $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gsl_expm1 (); int main () { return gsl_expm1 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gsl_gsl_expm1=yes else ac_cv_lib_gsl_gsl_expm1=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gsl_gsl_expm1" >&5 $as_echo "$ac_cv_lib_gsl_gsl_expm1" >&6; } if test "x$ac_cv_lib_gsl_gsl_expm1" = xyes; then : LIBGSL="-lgsl -lgslcblas" $as_echo "#define HAVE_LIBGSL 1" >>confdefs.h else if test "x$with_gsl" != xcheck; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-gsl was given, but GSL library was not found See \`config.log' for more details" "$LINENO" 5; } fi fi fi # 6. Checks for header files. # Defines preprocessor symbols like HAVE_UNISTD_H for ac_header in \ endian.h \ inttypes.h \ stdint.h \ unistd.h \ sys/types.h \ strings.h \ do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Check for sysctl.h separately. On OpenBSD, it requires # and autoconf needs special logic to deal w. this as # follows. for ac_header in sys/param.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" if test "x$ac_cv_header_sys_param_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_PARAM_H 1 _ACEOF fi done for ac_header in sys/sysctl.h do : ac_fn_c_check_header_compile "$LINENO" "sys/sysctl.h" "ac_cv_header_sys_sysctl_h" "#ifdef HAVE_SYS_PARAM_H #include #endif " if test "x$ac_cv_header_sys_sysctl_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SYSCTL_H 1 _ACEOF fi done # Vector-specific headers. # Separated, because we may want to implement # other vector languages besides SSE # For SSE: # xmmintrin.h = SSE # emmintrin.h = SSE2 # pmmintrin.h = SSE3 for ac_header in \ emmintrin.h\ pmmintrin.h\ xmmintrin.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # altivec.h requires the simd cflags # For reasons I don't understand, this needs to come after any other CHECK_HEADERS(). if test "$enable_vmx" = "yes"; then sre_save_CFLAGS="$CFLAGS" sre_save_CPPFLAGS="$CPPFLAGS" CFLAGS="$CFLAGS $SIMD_CFLAGS" CPPFLAGS="$CPPFLAGS $SIMD_CFLAGS" for ac_header in altivec.h do : ac_fn_c_check_header_mongrel "$LINENO" "altivec.h" "ac_cv_header_altivec_h" "$ac_includes_default" if test "x$ac_cv_header_altivec_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ALTIVEC_H 1 _ACEOF fi done CFLAGS="$sre_save_CFLAGS" CPPFLAGS="$sre_save_CPPFLAGS" fi # 7. Checks for types. # - Define WORDS_BIGENDIAN on bigendian platforms. # - Make sure we have C99 exact-size integer types; # ssi uses 16, 32, and 64-bit ints, and we # use 8-bit unsigned chars for digitized sequence. # - Make sure we have off_t. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac ac_fn_c_find_intX_t "$LINENO" "8" "ac_cv_c_int8_t" case $ac_cv_c_int8_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int8_t $ac_cv_c_int8_t _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "16" "ac_cv_c_int16_t" case $ac_cv_c_int16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int16_t $ac_cv_c_int16_t _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" case $ac_cv_c_int32_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int32_t $ac_cv_c_int32_t _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" case $ac_cv_c_int64_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int64_t $ac_cv_c_int64_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) $as_echo "#define _UINT8_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint8_t $ac_cv_c_uint8_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" case $ac_cv_c_uint16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define uint16_t $ac_cv_c_uint16_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) $as_echo "#define _UINT32_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint32_t $ac_cv_c_uint32_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) $as_echo "#define _UINT64_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint64_t $ac_cv_c_uint64_t _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi # 8. Checks for structures - none ################################################################ # 10. Checks for library functions: define HAVE_FOO ################################################################ for ac_func in mkstemp do : ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp" if test "x$ac_cv_func_mkstemp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MKSTEMP 1 _ACEOF fi done for ac_func in popen do : ac_fn_c_check_func "$LINENO" "popen" "ac_cv_func_popen" if test "x$ac_cv_func_popen" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_POPEN 1 _ACEOF fi done for ac_func in putenv do : ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv" if test "x$ac_cv_func_putenv" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PUTENV 1 _ACEOF fi done for ac_func in strcasecmp do : ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" if test "x$ac_cv_func_strcasecmp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRCASECMP 1 _ACEOF fi done for ac_func in times do : ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times" if test "x$ac_cv_func_times" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TIMES 1 _ACEOF fi done for ac_func in getpid do : ac_fn_c_check_func "$LINENO" "getpid" "ac_cv_func_getpid" if test "x$ac_cv_func_getpid" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPID 1 _ACEOF fi done for ac_func in sysctl do : ac_fn_c_check_func "$LINENO" "sysctl" "ac_cv_func_sysctl" if test "x$ac_cv_func_sysctl" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYSCTL 1 _ACEOF fi done for ac_func in sysconf do : ac_fn_c_check_func "$LINENO" "sysconf" "ac_cv_func_sysconf" if test "x$ac_cv_func_sysconf" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYSCONF 1 _ACEOF fi done for ac_func in getcwd do : ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd" if test "x$ac_cv_func_getcwd" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETCWD 1 _ACEOF fi done for ac_func in chmod do : ac_fn_c_check_func "$LINENO" "chmod" "ac_cv_func_chmod" if test "x$ac_cv_func_chmod" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_CHMOD 1 _ACEOF fi done for ac_func in stat do : ac_fn_c_check_func "$LINENO" "stat" "ac_cv_func_stat" if test "x$ac_cv_func_stat" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STAT 1 _ACEOF fi done for ac_func in fstat do : ac_fn_c_check_func "$LINENO" "fstat" "ac_cv_func_fstat" if test "x$ac_cv_func_fstat" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FSTAT 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 $as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } if ${ac_cv_sys_largefile_source+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=no; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE_SOURCE 1 #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=1; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_cv_sys_largefile_source=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 $as_echo "$ac_cv_sys_largefile_source" >&6; } case $ac_cv_sys_largefile_source in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source _ACEOF ;; esac rm -rf conftest* # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # in glibc 2.1.3, but that breaks too many other things. # If you want fseeko and ftello with glibc, upgrade to a fixed glibc. if test $ac_cv_sys_largefile_source != unknown; then $as_echo "#define HAVE_FSEEKO 1" >>confdefs.h fi # 11. Checks for system services # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi # 12. Write out esl_config.h header and the Makefiles ac_config_headers="$ac_config_headers esl_config.h" ac_config_files="$ac_config_files miniapps/Makefile" ac_config_files="$ac_config_files testsuite/Makefile" ac_config_files="$ac_config_files Makefile" if test -e "LICENSE.sh.in"; then ac_config_files="$ac_config_files LICENSE.sh" fi ac_config_files="$ac_config_files documentation/Makefile" # 13. voila! cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Easel $as_me 0.2.snap20130225, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ Easel config.status 0.2.snap20130225 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "esl_config.h") CONFIG_HEADERS="$CONFIG_HEADERS esl_config.h" ;; "miniapps/Makefile") CONFIG_FILES="$CONFIG_FILES miniapps/Makefile" ;; "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "LICENSE.sh") CONFIG_FILES="$CONFIG_FILES LICENSE.sh" ;; "documentation/Makefile") CONFIG_FILES="$CONFIG_FILES documentation/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo " Easel configuration: compiler: ${CC} ${CFLAGS} ${SIMD_CFLAGS} ${PTHREAD_CFLAGS} ${PIC_FLAGS} host: $host libraries: ${LIBS} ${LIBGSL} ${PTHREAD_LIBS} " hmmer-3.1b2/easel/devkit/0000775361611702660230000000000012473610313014642 5ustar wheelerteddyhmmer-3.1b2/easel/devkit/man2optlist0000775361611702660230000000202712473612605017053 0ustar wheelerteddy#! /usr/bin/perl # man2optlist <.man file> # # From one of our "standardized" .man pages, generate a table # that lists each documented option. # # Crosscomparisons with c2optlist and sqc2optlist allow verification # that the options in a main .c file are documented in a .man page # and tested in a .sqc unit test file. # # Options are looked for as a two-line sequence: # .TP # .B <-option> # or # .TP # .BI <-option> " " while (<>) { if (/^\.TP/) { $nextline_is_option = 1; next; } if ($nextline_is_option) { if (/^\.B\s+(-\S)\s*$/) { $option = $1; $optarg = "-"; } elsif (/^\.B\s+(--\S+)\s*$/) { $option = $1; $optarg = "-"; } elsif (/^\.BI\s+(-\S)\s+" (<[nxfcs]>)"\s*$/) { $option = $1; $optarg = $2; } elsif (/^\.BI\s+(--\S+)\s+" (<[nxfcs]>)"\s*$/) { $option = $1; $optarg = $2; } else { die "unrecognized option line:\n$_"; } printf ("%-20s %s\n", $option, $optarg); } $nextline_is_option = 0; } hmmer-3.1b2/easel/devkit/sedition0000775361611702660230000000373612473612605016425 0ustar wheelerteddy#! /usr/bin/perl # sedition [ ]... # # A wrapper for "sed", allowing editing a file in place # instead of in a stream. # # Replace all instances of @keyword@ with , # @key2@ with , etc. # # Note that all keywords to be replaced are enclosed by @@ in # the text where they are to be replaced, but the @@ delimiters # are not in the sedition command line. This allows you to run # sedition on scripts and Makefiles that themselves contain sedition # command lines, without inadvertently clobbering those command lines. # # Replacement strings should generally be one-liners. # See sedition-pp for a paragraph-wise replacement script. # # Note the restricted command line use: sedition, unlike # sed, must be run on a single specified file. # # Example: # sedition FOO "foo replacement" BAR "bar replacement" myfile # converts all instances of # @FOO@ # to # foo replacement # # Moved to ssdk, SRE, Mon Mar 31 19:24:19 2003 # SVN $Id: sedition 1531 2005-12-13 20:53:46Z eddy $ sub choke { my ($mesg) = @_; if (-e "$filename.sed.tmp") { system "mv $filename.sed.tmp $filename"; } die ($mesg, ", stopped"); } $filename = pop; if (! -e $filename) { die "$filename doesn't exist"; } if ( -e "$filename.sed.tmp") { die "already have a tmp file $filename.sed.tmp"; } $sedargs = ""; while (@ARGV) { $key = shift; $replace = shift; $sedargs .= " -e 's!\@$key\@!$replace!g'"; } if (-w $filename) { $writable = 1; } system("cp $filename $filename.sed.tmp"); if ($? != 0) {die "failed to make tmp copy"; } if (! $writable) { system("chmod +w $filename"); if ($? != 0) { choke "failed to make $filename temporarily writable"; } } system("sed $sedargs $filename.sed.tmp > $filename"); if ($? != 0) {choke "sed failed"; } if (! $writable) { system("chmod -w $filename"); if ($? != 0) { choke "failed to make $filename temporarily writable"; } } unlink "$filename.sed.tmp"; hmmer-3.1b2/easel/devkit/cexcerpt.man0000664361611702660230000000255512473612605017171 0ustar wheelerteddy.TH "cexcerpt" 1 "@SSDK_DATE@" "SSDK @SSDK_VERSION@" "SSDK" .SH NAME .TP cexcerpt - extract tagged code chunks for verbatim inclusion in documentation .SH SYNOPSIS .B cexcerpt .I file.c .I dir .SH DESCRIPTION .I cexcerpt processes a C source file .I file.c, extracts tagged excerpts, and puts these excerpts in a file in directory .I dir. .PP An excerpt is marked with special comments in the C file, as in this example: .nf /*::cexcerpt::my_example::begin::*/ while (esl_sq_Read(sqfp, sq) == eslOK) { n++; } /*::cexcerpt::my_example::end::*/ .fi .PP The tag's format is "::cexcerpt::::begin::" (or end). The tag is used to construct the file name, as .I .tex. In the example, the tag my_example creates a file .I my_example.tex in .I dir. .PP All the text between the cexcerpt tags is put in the file. In addition, this text is wrapped in a {cchunk} environment. So in the example above, .I my_example.tex will contain: .nf \\begin{cchunk} while (esl_sq_Read(sqfp, sq) == eslOK) { n++; } \\end{cchunk} .fi .PP This file can then be included in a LaTeX file, with \\input{/}. .PP For best results, the C source should be free of TAB characters. "M-x untabify" on the region to clean them out. .PP Cexcerpts can't overlap or nest in any way in the C file; only one can be active at any given time. .SH OPTIONS Currently none. hmmer-3.1b2/easel/devkit/ctags-fix0000775361611702660230000000172412473612605016467 0ustar wheelerteddy#! /usr/bin/perl # To be used in an idiomatic pipe for listing all keywords in a codebase: # # find . -name \*.[ch] -exec ctags -x {} \; | ~/src/easel/trunk/devkit/ctags-fix | sort | tbl-pretty -f3 > 00INDEX # # ctags apparently prints a %15s %4d format # on keywords >15 long + linenumbers > 3 digits long, ctags merges the # first two fields, as in: # esl_msa_FormatDesc1221 ./easel/esl_msa.c esl_msa_FormatDesc(ESL_MSA *msa, const char *desc, ...) # We try to detect this as best as possible; the possible ambiguity # is when the keyword name itself ends in a digit. To dismbiguate, we # assume no files have >=10000 lines. # # we also assume ctags has been called in a pipe from 'find', # so all filenames start with './', as in: # find . -name \*.[ch] -exec ctags -x {} \; | ctags-fix > foo # This allows us to unambiguously find the true third column. while (<>) { if (/^(\S{16,})(\d{4})\s+(\.\/.+)$/) { printf("%s %d %s\n", $1, $2, $3); } else { print; } } hmmer-3.1b2/easel/devkit/rmanprocess.pl0000775361611702660230000000334412473612605017550 0ustar wheelerteddy#! /usr/bin/perl # rmanprocess.pl # # Example: # rman -f LaTeX2e foo.man | rmanprocess.pl > foo.tex # # Converts a man page to a HMMER User's Guide section. # Written to operate with PolyglotMan v3.0.5, by Thomas Phelps # Obtain from ftp.cs.berkeley.edu:/ucb/people/phelps/tcltk/rman.tar.Z # # - removes document declarations # - removes See Also and Author sections, if present # - converts sections to subsections # - adds a subsection declaration for program name # # # SRE, Mon May 25 11:06:58 1998 # SVN $Id: rmanprocess.pl 1531 2005-12-13 20:53:46Z eddy $ while (<>) { if (/--/) { s/--/{-}{-}/g; } if (/^\\documentclass/) { print "\\setlength{\\sresavei}{\\parindent}\n"; print "\\setlength{\\sresaves}{\\parskip}\n"; next; } if (/^\\begin\{document\}/) { next; } if (/^\s*\\section\{See/ || /^\\end\{document\}/) { print "\\setlength{\\parindent}{\\sresavei}\n"; print "\\setlength{\\parskip}{\\sresaves}\n"; print "\\newpage"; last; } if (/\\begin\{itemize\}/ || /\\end\{itemize\}/) { s/itemize/wideitem/; print; next; } if (/^\\section\{Name/) { while (<>) { # get one-line "foo - a program to do bar" if (/^(\S+)\s+-\s+(.+)$/) { print "\\subsection{\\texttt{$1} - $2}\n"; } elsif (/^\\section/) { last; } } } # while ($line = <>) { # if ($line =~ /\\begin\{itemize\}/) { last; } # } # while ($line = <>) { # get item # # # last; # } elsif ($line =~ /^\\item\s*\[(\S+)\s*-\s*(.+)/) { # print "\\subsection{\\texttt{$1} - $2}\n"; # last; # } # } # while (<>) { # if (/\\end\{itemize\}/) { last; } # } # next; if (/^\\section/) { s/section/subsubsection/; print; next; } print; } hmmer-3.1b2/easel/devkit/.dropbox.attr0000775361611702660230000000000212473610423017266 0ustar wheelerteddy{}hmmer-3.1b2/easel/devkit/esl-dependencies0000775361611702660230000001067612473612605020017 0ustar wheelerteddy#! /usr/bin/perl # esl-dependencies :: determines module dependencies in Easel source code # # Usage: esl-dependencies [options] [...] # # Options: # -1 : show one-line summary of module # required, # required in testdriver, # augmentable # -r : list of required modules (used in Makefile to construct test driver compilation lines) # -a : list of augmentation modules (used in Makefile to construct test driver compilation lines) # -f : list of augmentation flags (used in Makefile to construct test driver compilation lines) # # SRE, Mon Jun 11 11:15:31 2007 # SVN $Id$ require "getopts.pl" &Getopts('1afr'); if ($opt_1) { $show_summary_table = 1; } if ($opt_a) { $list_augfiles = 1; } if ($opt_f) { $list_augflags = 1; } if ($opt_r) { $list_reqfiles = 1; } while ($cfile = shift) { $past_start = 0; $in_testdriver = 0; %included_module = (); %with_module = (); %driver_module = (); %required_module = (); %augmented_module = (); %driver_required_module = (); $nrequired = 0; $ndriver_required = 0; $naugmented = 0; if ($cfile =~ /esl_(\S+)\.c/) { $thismodule = $1; } elsif ($cfile =~ /(easel)\.c/) { $thismodule = $1; } else { die "Can't open $cfile\n"; } # Set $included_module{} hash to 1 for every module that this .c file # includes (both required and augmented), except easel itself. # open(INCLUDES, $cfile) || die; while () { if (!$past_start && /^\#include [<"]esl_(\S+).h[>"]/) { $module = $1; if ($module eq $thismodule) { next; } if ($module eq "config") { next; } if ($module eq "mpi") { $with_module{"mpi"} = 1; next; } # special case of HAVE_MPI instead of AUGMENT_ $included_module{$module} = 1; } if (/^\{/) { $past_start = 1; } # Stop looking at headers when we see the first function start. if (/^\#ifdef (esl.+_TESTDRIVE)/) { $in_testdriver = 1; $flag = $1; } if ($in_testdriver && /^\#endif \/\*\s*$flag/) { $in_testdriver = 0; } if ($in_testdriver && /^\#include [<"]esl_(\S+).h[>"]/) { $module = $1; if ($module eq $thismodule) { next; } $driver_module{$module} = 1; } } close INCLUDES; # Set $augmented_module{} hash to 1 for every module that this .c file # might be augmented with. # open(AUGMENTS, "cat $cfile | grep \'^#ifdef\' |") || die; while () { if (/^\#ifdef eslAUGMENT_(\S+)/) { $module = $1; $module =~ tr/[A-Z]/[a-z]/; $augmented_module{$module} = 1; } } close AUGMENTS; # Set $required_module{} hash to 1 for every module that this .c file # requires, except easel itself. # foreach $m (keys(%included_module)) { if (! $augmented_module{$m}) { $required_module{$m} = 1; $nrequired ++; } } # Set $driver_required_module{} hash to 1 for every module that the .c # file includes inside a TESTDRIVE ifdef, but is not an augmentation # or a module requirement. foreach $m (keys(%driver_module)) { if (! $augmented_module{$m} && ! $with_module{$m} && ! $required_module{$m}) { $driver_required_module{$m} = 1; $ndriver_required++; } } # Count the different augmentations # foreach $m (keys(%augmented_module)) { $naugmented++; } if ($show_summary_table) { $req = join(',', sort(keys(%required_module))); $dreq = join(',', sort(keys(%driver_required_module))); $augreq = join(',', sort(keys(%augmented_module))); printf("%-12s %3d %3d %3d %-20s %-20s %-20s\n", $thismodule, $nrequired, $ndriver_required, $naugmented, $req, $dreq, $augreq); } elsif ($list_reqfiles) { foreach $m (keys(%required_module)) { print "esl_$m.c "; } foreach $m (keys(%driver_required_module)) { print "esl_$m.c "; } print "\n"; } elsif ($list_augfiles) { foreach $m (keys(%augmented_module)) { print "esl_$m.c "; } print "\n"; } elsif ($list_augflags) { foreach $m (keys(%augmented_module)) { $m =~ tr/[a-z]/[A-Z]/; print "-DeslAUGMENT_$m "; } print "\n"; } else { print "Module requires:\n"; foreach $m (keys(%required_module)) { print $m, "\n"; } print "Driver requires:\n"; foreach $m (keys(%driver_required_module)) { print $m, "\n"; } print "Augmentable with:\n"; foreach $m (keys(%augmented_module)) { print $m, "\n"; } foreach $m (keys(%with_module)) { print $m, "\n"; } } } hmmer-3.1b2/easel/devkit/sqc0000775361611702660230000006140312473612605015370 0ustar wheelerteddy#! /usr/bin/perl # sqc :: # quality control script for exercising code, regression testing, # and benchmarking. # # Usage: sqc [options] \ # [ ] # # level - an integer >= 0. Higher = more testing, more time. # command file - an sqc command file. See below for format. # top_builddir - top of the build directory - where executables will # be searched for. In .sqc command files, any path # @foo@ is looked for in ${top_builddir}/foo. # top_srcdir - top of the src directory - where scripts and datafiles # will be searched for. In .sqc command files, any # path !foo! is looked for in ${top_srcdir}/foo. # [The other two arguments are optional, and are only used if the # command file contains regression tests:] # old_top_builddir - top of the build tree for an old version of # the same software distribution, for regression tests # old_top_srcdir - top of the src tree for an old version for regression. # # # Available options: # -v - print verbose output, including each command # after various substitutions. # # -x - only run test number , where starts from 1. # Useful when debugging individual failed tests - saves # having to rerun the whole testsuite. # # -V - Run 'valgrind' test types. Caller asserts that valgrind # is installed on this system. This option may also be # set by setting environment variable SQC_VALGRIND nonzero. # # -M - Run 'mpi' test types. Caller asserts that mpiexec is # installed on this system. This option may also be set # by setting env variable SQC_MPI nonzero. # Examples: # % sqc 2 exercises.sqc .. .. # # (Allowing -M, -V to also be set in the environment simplifies life when # we're calling sqc via a 'make check', where we don't really have control # over the cmdline options, but we can control our system environment.) # # For each (non-prep) test in the command file, a one-line summary # of the result is printed. The format of this line is: # []... # where is exercise, valgrind, mpi, regression, benchmark, or # fail; is a counter, separate for each type; is # the one-word name for this test; and is the result of the # test. The format for is described later. # # Format of sqc file: # Blank lines are ignored. Lines beginning with # are comments and # are ignored. All other lines have format: # # # level: an integer >= 0. If the sqc level is less than this test's # level, the command is skipped. This allows quick, less # extensive tests and long, extensive tests to be configured # in one command file. # # type: One of the following keywords: # prep, exercise, valgrind, mpi, regression, benchmark, fail # See below for description of each. # # name: One word, <=20 characters, naming this test. # Makes it easier to track down a failed test. # sqc does not verify that names are unique, but it's # a good idea. # # command: Command template to run. (remainder of line, usually # more than one token/word). # # A command template is subjected to three types of # filename substitution (@@ = executables in the build tree; # !! = scripts and data in the source tree; %% = temp files # managed by sqc). # # No token may contain the string REGRESSION; this is # reserved for regression tests (see below). # # valgrind prefixing, regression filename substitution, # path substitution, and output redirection: # # @@ path substitution for binaries (in build tree): # Tokens enclosed in @@ in the template are interpreted # as executables to be found in the build tree. The token is # prefixed by ${top_builddir}. # # With no token at all (@@), the ${top_builddir} is # substituted; this special case is used to pass the # ${top_builddir} as an argument into integrated test # scripts that sqc is running. This leads to an # idiomatic incantation for integrated tests: # !testsuite/ixx-test.pl! @@ !! %TMPPFX% # by which the builddir, srcdir, and a tempfile prefix are # passed along to a script, which is responsible for # printing "ok" and returning 0 on success, and die()'ing # on any failure. # # !! path substitution for scripts and data (in src tree): # Tokens enclosed in !! in a command template are # interpreted as scripts or datafiles to be found in the # source tree. The token is prefixed by ${top_srcdir}. # # As above, with no token at all (!!), the ${top_srcdir} is # substituted. # %% tempfile substitution for output generated during sqc: # Tokens enclosed in %% are interpreted as a tempfile to # be created during the sqc run. sqc is responsible for # deleting the temp file. Each token in an sqc command # file maps uniquely to the same file name throughout an # sqc process, so the same token may be used in more than # one command; for example, a "prep" command can create a # file that subsequent "exercise" commands need as input). # # It is a common idiom to pass a tempfile name into a test # script, where the script then uses the name as a unique # prefix to create a number of temp files with different # suffixes, a la %TMPFILE%.1, %TMPFILE%.2, etc. Such a # script cleans up the suffixed temp files it creates; sqc # cleans up the original %TMPFILE%. # # output redirection: # ">/dev/null 2> " is appended to the command # template, to redirect all output away, and save # STDERR diagnostics to a (for instance, valgrind # report goes to this file). # If the command template already includes a ">", only # the STDERR redirection is done; it is assumed that the command # is deliberately keeping its output (probably in its own tmpfile). # If redirection is done explicitly in the command template, # the template is responsible for stdout. sqc always handles # stderr itself. # # regression filename substitution: ["regression" test types only] # In a "regression" test, the same command is run twice; # once under a "new" build and once under an "old" build # of the same software distribution. Any tempfile tokens in # the command template that start with REGRESSION (such as # %REGRESSION.OUT1%) are considered to be outputs that # should be absolutely identical between the old and new # software versions. These are compared by "diff", and # the regression test fails if the diff isn't clean. # # # Types of tests: # # prep: Creates tmp files that other tests will need. # If a prep command fails for any reason with nonzero # exit status, sqc dies at that point. # prep commands create no output lines in the sqc report. # # exercise: Run a command that is expected to succeed with zero # exit status. # Return status is tested; if nonzero, a failure is # recorded. Crashes versus clean failures are reported # differently in the output message. # The format for the status in the output line is: # ok. # FAILED [command failed] # FAILED [crash!] # # fail: Run a command that is expected to exit cleanly with # *nonzero* exit status (for example, testing that a program # successfully detects bad input, rather than crashing). # Possible results for output line status are: # ok. # FAILED to fail # FAILED [crash!] # # valgrind: Check for memory problems and leaks. # Like exercise, but the command is run with "valgrind # --error-exitcode=99" prepended, so valgrind runs the # command. # # Return status is tested; 99 indicates an error detected # by valgrind, other nonzero codes indicate a failure code # reported by the application. The stderr that sqc # captured is examined for valgrind leak reports. The # format for the status in the output line is: # ok. # FAILED [valgrind reports error(s)] # FAILED [valgrind reports leak(s)] # FAILED [command failed] # FAILED [crash!] # # Valgrind tests are only run if -V cmdline option is used, # or if SQC_VALGRIND environment variable is set nonzero. # # mpi: An MPI-specific exercise. # # The command includes 'mpiexec'; for example, # "mpiexec -n 2 ./my_mpi_unit_test" # # MPI exercises are only run if the -M cmdline option is used, # or if SQC_MPI environment variable is set nonzero. # # Output line format is the same as for an exercise. # # regression: The same command template is processed and run twice; # once under a "new" build ( and ) # and once under an "old" build of the same software # distribution ( and ). # # Any tempfile tokens in the command template that start # with REGRESSION (such as %REGRESSION.OUT1%) are # considered to be outputs that should be absolutely # identical between the old and new software # versions. These are compared by "diff", and the # regression test fails if the diff isn't clean. # # Possible outputs: # ok. # FAILED [regressions differ] # FAILED [new command failed] # FAILED [old command failed] # FAILED [new crashed!] # FAILED [old crashed!] # # benchmark: Runs a command and measures how long it takes. # The output status field is the user CPU time in seconds. # Like a prep command, if a benchmark command fails, sqc # dies immediately at that point. # # ################################################################ # SRE, Tue Aug 6 11:16:39 2002 # SVN $Id: sqc 1796 2007-01-03 22:36:44Z eddys $ use Getopt::Std; # Parse our command line options # getopts('vx:VM'); if ($opt_v) { $verbose = 1; } if ($opt_x) { $only_do_test_num = $opt_x; } if ($opt_V) { $do_valgrind = 1; } if ($opt_M) { $do_mpi = 1; } # Parse our environment # if ($ENV{"SQC_VALGRIND"} != 0) { $do_valgrind = 1; } if ($ENV{"SQC_MPI"} != 0) { $do_mpi = 1; } # Trust but verify # if ($do_valgrind) { $output = `valgrind --version 2>&1`; if ($?) { die "couldn't run valgrind. Don't set -V cmdline option, don't set SQC_VALGRIND env variable."; } } if ($do_mpi) { $output = `mpiexec -V 2>&1`; if ($?) { die "couldn't run mpiexec. Don't set -M cmdline option, don't set SQC_MPI env variable."; } } # Parse command line arguments # if ($#ARGV == 3) { $setlevel = shift; $commandfile = shift; $top_builddir = shift; $top_srcdir = shift; undef($old_builddir); undef($old_srcdir); } elsif ($#ARGV == 5) { $setlevel = shift; $commandfile = shift; $top_builddir = shift; $top_srcdir = shift; $old_builddir = shift; $old_srcdir = shift; } else { die "Usage: sqc [options] [ ]\n"; } $tmp = &tempname; $| = 1; print "sqc: running $commandfile.\n" if $verbose; open(COMMANDS, $commandfile) || die; $nbench = $ntest = $badtest = 0; $tot_benchtime_cpu = $tot_benchtime_wall = 0.; $linenum = 0; COMMAND: while () { $linenum++; if (/^\#/) { next; } if (/^\s*$/) { next; } chomp; ($testlevel, $testtype, $testname, $cmdtemplate) = split(' ', $_, 4); if ($setlevel < $testlevel) { next COMMAND; } # Make sure it's a valid test type; # print the first part of the output line. # if ($testtype eq "exercise" || $testtype eq "valgrind" || $testtype eq "mpi" || $testtype eq "regression" || $testtype eq "fail" || $testtype eq "benchmark") { if ($testtype eq "valgrind") { $valgrind_ntests++; if (! $do_valgrind) { next COMMAND; } } if ($testtype eq "mpi") { $mpi_ntests++; if (! $do_mpi) { next COMMAND; } } $ntest++; if ($only_do_test_num && $only_do_test_num != $ntest) { next COMMAND; } printf(" %10s %4d [%21s] ... ", $testtype, $ntest, $testname); } elsif ($testtype ne "prep") { die "No such test type $testtype at line $linenum of command file\n"; } print "sqc: evaluating line: $_\n" if $verbose; # Filename substitution. $cmd = $cmdtemplate; ($status, $cmd) = &build_substitution($tmp, $cmd, $top_builddir); next COMMAND if &check_status($status, $testname, $testtype, "FAILED [@@ substitution]"); ($status, $cmd) = &src_substitution($tmp, $cmd, $top_srcdir); next COMMAND if &check_status($status, $testname, $testtype, "FAILED [!! substitution]"); $cmd = &tempfile_substitution($tmp, $cmd); print "sqc: after filename subst, cmd is: $cmd\n" if $verbose; # Valgrind prefixing. $cmd = "valgrind --error-exitcode=99 $cmd" if ($testtype eq "valgrind"); # Regression substitutions, $cmd splits into $cmd (new) and $cmd2 (old) if ($testtype eq "regression") { $cmd2 = $cmdtemplate; die ("FAILED;\nno argument on command line; can't run regression tests\n") if (! defined($old_builddir)); die ("FAILED;\nno argument on command line; can't run regression tests\n") if (! defined($old_srcdir)); ($status, $cmd2) = &build_substitution($tmp, $cmd2, $old_builddir); next COMMAND if &check_status($status, $testname, $testtype, "FAILED [@@ substitution]"); ($status, $cmd2) = &src_substitution($tmp, $cmd2, $old_srcdir); next COMMAND if &check_status($status, $testname, $testtype, "FAILED [!! substitution]"); $cmd2 = &tempfile_substitution($tmp, $cmd2); ($nregressions, $cmd, $cmd2) = ®ression_substitution($tmp, $cmd, $cmd2); print "sqc: after filename subst, regressed new cmd is: $cmd\n" if $verbose; print "sqc: after filename subst, regressed old cmd is: $cmd2\n" if $verbose; } # Output redirection substitution. # stdout is sent to /dev/null unless command already is handling it. # stderr is saved in a tmp file. # (stderr from the old cmd2 of a regression test is sent to /dev/null) # if ($cmd !~ />/) { $cmd = "$cmd > /dev/null"; $cmd2 = "$cmd2 > /dev/null" if ($testtype eq "regression"); } $cmd = "$cmd 2> $tmp.stderr"; $cmd2 = "$cmd2 2> /dev/null" if ($testtype eq "regression"); print "sqc: after output subst, cmd is: $cmd\n" if $verbose; # Run the commands; # collect exit status in status1; # additionally, for regression test, old executable's status is in status2. # # If our command fails "cleanly" it has an exit code of 1 by Easel convention. # Because of the way Perl handles status codes, this becomes 1<<8 = 256. # All other nonzero codes are called "crashes" because they probably are. # # The `(true; $cmd)` stuff is because a segfault gets reported by shell, # not the process itself; we want to redirect that output too. $startwall = time; $startcpu = (times)[2]; print "sqc: running cmd: $cmd\n" if $verbose; `(true; $cmd) 2> /dev/null > /dev/null`; $status1 = $?; print "sqc: return status $status1\n" if $verbose; if ($testtype eq "regression") { `(true; $cmd2) 2> /dev/null > /dev/null`; $status2 = $?; } $stopwall = time; $stopcpu = (times)[2]; # Deal with exit status and output. if ($testtype eq "prep") { if ($status1 != 0) { die "prep command [$testname] at line $linenum failed with status $status1\n"; } } elsif ($testtype eq "exercise" || $testtype eq "mpi") { if (($status1>>8) == 1) { print "FAILED [command failed]\n"; $badtest++; } elsif ( $status1 != 0) { print "FAILED [crash!]\n"; $badtest++; } else { print "ok.\n"; } } elsif ($testtype eq "valgrind") { ($has_valgrind, $has_leak) = &check_valgrind_status("$tmp.stderr"); if ($has_valgrind == 0) { print "FAILED [no valgrind output?]\n"; $badtest++; } elsif (($status1>>8) == 99) { print "FAILED [valgrind reports error(s)]\n"; $badtest++; } elsif (($status1>>8) == 1) { print "FAILED [command failed]\n"; $badtest++; } elsif ( $status1 != 0) { print "FAILED [crash!]\n"; $badtest++; } elsif ($has_leak) { print "FAILED [valgrind reports leak(s)]\n"; $badtest++; } else { print "ok.\n"; } # Important to check for leaks last above. On app failure, we're allowed to return a nonzero # exit code without scrupulously free'ing everything. } elsif ($testtype eq "regression") { if (($status1>>8) == 1) { print "FAILED [new command failed]\n"; $badtest++; } elsif (($status2>>8) == 1) { print "FAILED [old command failed]\n"; $badtest++; } elsif ( $status1 != 0) { print "FAILED [new crashed!]\n"; $badtest++; } elsif ( $status2 != 0) { print "FAILED [old crashed!]\n"; $badtest++; } else { $nregress_failed = 0; for ($i = 0; $i < $nregressions; $i++) { system("diff $tmp.REGRESSION.old.$i $tmp.REGRESSION.new.$i > /dev/null"); if ($? != 0) { $nregress_failed++; } } if ($nregress_failed > 0) { print "FAILED [regressions differ]\n"; $badtest++; } else { print "ok.\n"; } } } elsif ($testtype eq "benchmark") { if ($status1 != 0) { die "benchmark at line $linenum failed with status $status1\n"; } $cpu_elapsed = $stopcpu - $startcpu; $wall_elapsed = $stopwall - $startwall; printf "%6.1f cpu %4d wall\n", $cpu_elapsed, $wall_elapsed; $tot_benchtime_cpu += $cpu_elapsed; $tot_benchtime_wall += $wall_elapsed; $nbench++; } elsif ($testtype eq "fail") { if (($status1>>8) == 0) { print "FAILED [0 status]\n"; $badtest++; } elsif (($status1>>8) != 1) { print "FAILED [crash!]\n"; $badtest++; } else { print "ok.\n"; } } last if ($only_do_test_num && $ntest == $only_do_test_num ); } # Summarize output. if ($badtest > 0) { print "\n$badtest of $ntest exercises at level <= $setlevel FAILED.\n"; } else { print "\nAll $ntest exercises at level <= $setlevel passed.\n"; } if ($nbench > 0) { printf "\nTotal of %d benchmarks: %.1f cpu %d wall\n", $nbench, $tot_benchtime_cpu, $tot_benchtime_wall; } # Print info on system, date, etc. # print "\n\nSystem information:\n"; print `date`; print `uname -a`; # Clean up. # foreach $tmpfile (keys(%used_tmpfile)) { unlink $tmpfile if -e $tmpfile; } unlink $tmp if -e $tmp; unlink "$tmp.stderr" if -e "$tmp.stderr"; sub check_status { my ($status, $testname, $testtype, $errmsg) = @_; if ($status != 0) { if ($testtype eq "prep") { die "fatal: prep command [$testname]: $errmsg\n"; } print $errmsg . "\n"; $badtest++; } ($status); } # build_substitution(tmppfx, cmd, builddir) # # Perform @@ substitutions for builddir; # check that token exists and is executable. # # Return (status, cmd). # status != 0 means token doesn't exist or isn't executable. # sub build_substitution { my ($tmp, $cmd, $builddir) = @_; my ($status, $token, $newname); $status = 0; $cmd =~ s/\@\@/$builddir/g; # special case of "@@" replacement while ($cmd =~ /\@(\S+?)\@/) { $token = $1; $newname = "$builddir/$token"; if (! -x $newname) { $status = 1; } $cmd =~ s/\@$token\@/$newname/g; } ($status, $cmd); } # src_substitution(tmppfx, cmd, srcdir) # # Perform !! substitutions for srcdir; # check that token exists. # # Return (status, cmd). # status != 0 means token didn't exist. # sub src_substitution { my ($tmp, $cmd, $srcdir) = @_; my ($status, $token, $newname); $status = 0; $cmd =~ s/\!\!/$srcdir/g; # special case of "!!" replacement while ($cmd =~ /\!(\S+?)\!/) { $token = $1; $newname = "$srcdir/$token"; if (! -e $newname) { $status = 1; } $cmd =~ s/\!$token\!/$newname/g; } ($status, $cmd); } # tempfile_substitution(tmpprefix, command_template) # # Uses a global, %used_tmpfile, which is a hash # that is TRUE for each tmpfile names that we'll # try to delete upon exit. sub tempfile_substitution { my ($tmp, $com) = @_; my ($token, $newname); while ($com =~ /%(\S+?)%/ && $1 !~ /^REGRESSION/) { $token = $1; $newname = "$tmp.$token"; $com =~ s/%$token%/$newname/g; $used_tmpfile{$newname} = 1; } return $com; } # regression_substitution(tmpprefix, new_command, old_command) # # Any tempfile token that starts with REGRESSION is # now substituted by .REGRESSION.{new,old}.{n}, # where {n} is an index {0..n-1} for regression # tmpfiles in the command template (usually 1). # # Unlike normal tmpfile substitution, these constructed names # ignore the exact %token% used by the command template; # but there is no possibility of name clash, because the # entire token namespace prefixed by REGRESSION is reserved. # # The reason to do it this way is that now the caller can # enumerate (and diff) all regression files just by knowing . # # Returns (, , ). # sub regression_substitution { my ($tmp, $cmd1, $cmd2) = @_; my ($token, $newname1, $newname2, $n); $n = 0; while ($cmd1 =~ /%(REGRESSION\S*?)%/) { $token = $1; $newname1 = "$tmp.REGRESSION.new.$n"; $newname2 = "$tmp.REGRESSION.old.$n"; $cmd1 =~ s/%$token%/$newname1/g; $cmd2 =~ s/%$token%/$newname2/g; $used_tmpfile{$newname1} = 1; $used_tmpfile{$newname2} = 1; $n++; } return ($n, $cmd1, $cmd2); } # Function: check_valgrind_status # # Look at a file containing stderr from an executed command. # Find valgrind report, and look for a memory leak report. # # You'll see below that code for checking "still reachable" has been # commented out. System libraries may do harmless global allocations # without deallocating, and these show up as "still reachable", yet # are outside our control. This is especially noticeable on Mac OS/X. # # Return ($has_valgrind, $has_leak): # $has_valgrind: 1 if report is present; else 0 # $has_leak: 1 if valgrind report shows an unsuppressed memory leak. # # If $file isn't present at all, returns (0,0). # sub check_valgrind_status { my ($file) = @_; my ($has_valgrind, $has_leak); open(VALGRIND, "$file") || return (0,0); $has_valgrind = $has_leak = 0; while () { if (/^==\d+== Memcheck/) { $has_valgrind = 1; } if (/^==\d+== definitely lost: (\d+)/ && $1 != 0) { $has_leak = 1; } if (/^==\d+== indirectly lost: (\d+)/ && $1 != 0) { $has_leak = 1; } if (/^==\d+== possibly lost: (\d+)/ && $1 != 0) { $has_leak = 1; } # if (/^==\d+== still reachable: (\d+)/ && $1 != 0) { $has_leak = 1; } } close VALGRIND; if (! $has_valgrind) { $has_leak = 0; } return ($has_valgrind, $has_leak); } # Function: tempname # # Returns a unique temporary filename. # # Should be robust. Uses the pid as part of the temp name # to prevent other processes from clashing. A two-letter # code is also added, so a given process can request # up to 676 temp file names (26*26). An "esltmp" code is # also added to distinguish these temp files from those # made by other programs. # # Returns nothing if it fails to get a temp file name. # # If TMPDIR is set, that directory is prepended to the # name. # sub tempname { my ($dir, $name, $suffix); if ($TMPDIR) { $dir = $TMPDIR."/"; } else {$dir = "";} foreach $suffix ("aa".."zz") { $name = "$dir"."esltmp".$suffix.$$; if (! (-e $name)) { open(TMP,">$name") || die; # Touch it to reserve it. close(TMP); return "$name"; } } } hmmer-3.1b2/easel/devkit/cexcerpt0000775361611702660230000000574412473612605016425 0ustar wheelerteddy#! /usr/bin/perl # cexcerpt # # Extract tagged code chunks from a C source file for verbatim # inclusion in LaTeX documentation. # # Processes C source file ; extracts tagged excerpts, # and puts them in a file in directory . # # An excerpt is marked with special comments in the C file: # # /*::cexcerpt::my_example::begin::*/ # while (esl_sq_Read(sqfp, sq) == eslOK) # { n++; } # /*::cexcerpt::my_example::end::*/ # # The tag's format is "::cexcerpt::::begin::" (or end). # We match it with: # ^\s*\/\*::cexcerpt::(\S+)::begin::\*\/ # # The tag is used to construct the file name, as .tex. # In the example, the tag my_example creates a file my_example.tex # in . # # All the text between the cexcerpt tags is put in the file. # In addition, this text is wrapped in a {cchunk} environment. # So in the example above, my_example.tex will contain: # \begin{cchunk} # while (esl_sq_Read(sqfp, sq) == eslOK) # { n++; } # \end{cchunk} # # This file can then be included in a LaTeX file, with # \input{/} # # For best results, the C source should be free of TAB characters. # "M-x untabify" on the region to clean them out. # # Cexcerpts can't overlap or nest in any way in the C file; only # one can be active at any given time. # # SRE, Fri Feb 25 08:40:19 2005 # SVN $Id: cexcerpt 1531 2005-12-13 20:53:46Z eddy $ $usage = "cexcerpt "; die("Wrong number of command line arguments.\nUsage: $usage\n") unless ($#ARGV+1 == 2); $cfile = shift; $dir = shift; die("C source file $cfile doesn't exist.\n") unless -e $cfile; die("C source file $cfile isn't readable.\n") unless -r $cfile; die("Directory $dir doesn't exist.\n") unless -e $dir; die("$dir isn't a directory.\n") unless -d $dir; die("Can't write files to directory $dir.\n") unless -w $dir; open(CFILE,$cfile) || die("Couldn't open C file $cfile.\n"); $in_cexcerpt = 0; $linenumber = 1; while () { if (/^\s*\/\*::cexcerpt::(\S+)::begin::\*\//) { if ($in_cexcerpt) { die("Can't start $1 at line $linenumber; $tag started at line $startline.\n"); } if (($n = grep(/$1/, @taglist)) > 0) { die("Already saw tag $1 in this C file ($n); tags must be unique.\n"); } $tag = $1; $in_cexcerpt = 1; $startline = $linenumber; $outfile = "$dir/$tag.tex"; push(@taglist, $tag); print (" extracting $tag.tex...\n"); open(OUTFILE,">$outfile") || die("Couldn't open $outfile for writing."); print OUTFILE "\\begin{cchunk}\n"; } elsif (/^\s*\/\*::cexcerpt::(\S+)::end::\*\//) { if (!$in_cexcerpt) { die("cexcerpt $1 can't end (line $linenumber) because it never started.\n"); } if ($tag ne $1) { die("tried to end $1 at line $linenumber, but $tag is active (from line $startline).\n"); } $in_cexcerpt = 0; print OUTFILE "\\end{cchunk}\n"; close(OUTFILE); } elsif ($in_cexcerpt) { print OUTFILE $_; } $linenumber++; } close(CFILE); hmmer-3.1b2/easel/devkit/c2optlist0000775361611702660230000000407012473612605016522 0ustar wheelerteddy#! /usr/bin/perl # c2optlist
# # From one of our "standardized" main C files containing an # ESL_OPTIONS block, print a table listing each option. # Only the first block in the file is parsed, if multiple # ones exist. # # Crosscomparisons with man2optlist and sqc2optlist allow verification # that the options in a main .c file are documented in a .man page # and tested in a .sqc unit test file. # # Options are looked for following a line # static ESL_OPTIONS ... # until a bare # } # is found on a line by itself. # # SRE, Tue Sep 15 10:04:30 2009 [Janelia] # SVN $Id$ # while (<>) { if (/^static ESL_OPTIONS/) { $in_optionblock = 1; next; } if ($in_optionblock) { if (/^\s*{\s*"(-\S)",\s*([^,]+),/) { $option = $1; $arg = $2; } # short option elsif (/^\s*{\s*"(--\S+)",\s*([^,]+),/) { $option = $1; $arg = $2; } # long option elsif (/^\s*$/) { next; } # blank line elsif (/^\s*\/\*/) { next; } # comment line elsif (/^#if/) { next; } # allow conditional compilation of options elsif (/^#end/) { next; } # allow conditional compilation of options elsif (/^\s*{\s*0,\s*0,\s*0,/) { last; } # empty vector: end of options else { die "unrecognized option line:\n$_"; } if ($arg eq "eslARG_NONE") { $optarg = "-"; } elsif ($arg eq "eslARG_INT") { $optarg = ""; } elsif ($arg eq "eslARG_REAL") { $optarg = ""; } elsif ($arg eq "eslARG_CHAR") { $optarg = ""; } elsif ($arg eq "eslARG_STRING") { $optarg = ""; } elsif ($arg eq "eslARG_INFILE") { $optarg = ""; } elsif ($arg eq "eslARG_OUTFILE") { $optarg = ""; } else { die "unrecognized option argument $arg on line:\n$_"; } printf ("%-20s %s\n", $option, $optarg); } if (/^};/) { die "Reached end of option structure without seeing empty 0,0,0,... vector"; } } hmmer-3.1b2/easel/devkit/sedition-pp0000775361611702660230000000451012473612605017031 0ustar wheelerteddy#! /usr/bin/perl # sedition-pp # # Replaces occurrences of @@ in the source file # with the text found in . may contain # multiple lines of text. In the , the @@ # must be on a line of its own - it may have leading and # trailing comment delimiters, but that's all. That's because these # delimiters will be replicated in the multiline substitution; # see below. # # Note that the is surrounded by @@ in the text # where it's to be replaced. These delimiters do not appear in the command # line; this allows you to run sedition-pp on scripts and Makefiles # that themselves contain sedition-pp command lines, without clobbering # those commands. # # sedition-pp preserves and replicates leading and trailing context, # permitting language-independent substitution within comments. # For example, # sedition-pp FOO foofile foo.c # finds in foo.c (C code) a line like # * @FOO@ # and replaces it with the text of "foofile", which might # result in: # * An example license for foo. # * Copyright (C) ... # # Whereas a (shell or Perl script) line like # # @FOO@ # would become # # An example license for foo. # # Copyright (C) ... # # And an HTML section like # # is replaced with # # # modified from licenseadd.pl in ssdk; SRE, Mon Mar 31 19:39:50 2003 # SVN $Id: sedition-pp 1531 2005-12-13 20:53:46Z eddy $ # $keyword = shift; $ppfile = shift; $sourcefile = shift; if (! -e $sourcefile) { die "no such file $sourcefile"; } ($dev,$ino,$mode) = stat($sourcefile); open(PP,$ppfile) || die; $nlines = 0; while () { chomp; $ppline[$nlines] = $_; $nlines++; } close(PP); open(TMPFILE,">/tmp/tmp.pp.sedition") || die "Fatal: can't open /tmp/tmp.pp.sedition : $!\n"; open(SOURCE,$sourcefile) || die; while () { if (/^(.*)\@$keyword\@(.*)$/) { $start = $1; $end = $2; foreach $line (@ppline) { print TMPFILE "$start$line$end\n"; } } else { print TMPFILE $_;} } close SOURCE; close TMPFILE; # Replace the original file with the new one, and restore the original # file's mode. # unlink $sourcefile; system("mv /tmp/tmp.pp.sedition $sourcefile"); chmod $mode, $sourcefile; hmmer-3.1b2/easel/devkit/autodoc0000775361611702660230000002377312473612605016250 0ustar wheelerteddy#! /usr/bin/perl # Usage: # ./autodoc_functions # # Input is a C .c file with my structured function header convention. # Output is .tex file suitable for inclusion in my LaTeX documentation. # # Requirements: # 1. .tex file needs to have \sreapi environment defined; # see hmmer, squid, infernal, etc. "macro.tex" to get a copy. # # 2. .tex file needs to have \ccode command defined, to produce # courier (or whatever) computerese font for variables, macros, # etc. # # 3. Functions must use headers according to my conventions, for example: # (defined as sre-insert-my-function-header() in .emacs LISP) # # /* Function: function() # * Synopsis: A short (half-line) description. # * Incept: SRE, Tue Nov 30 19:36:17 2004 [St. Louis] # * # * Purpose: Given an , carry out an important # * function, and return an answer. # * # * Args: argument - some text, or NULL # * # * Returns: on success; on failure. # * # * Throws: on an allocation failure. # * # * Xref: STL8/p.159. # */ # int # function(char *argument) # { # etc. # # The Function and Purpose blocks are required. # Only the Function, Synopsis, Purpose, Returns, and Throws blocks are used. # # The exact spacing of the beginning of each line is important; # for example, the parser depends on seeing "/* Function" at the beginning, # " * \S" on a line starting a new block of info, and " * " or # " */" on a line that continues a previous info block. The exact # spacing style of "int\nfunction(char *argument)\n{" is also essential. # # # SRE, Tue Nov 30 19:43:47 2004 require "getopts.pl"; &Getopts('n:t'); $cfile = shift; if ($opt_t) { $show_api_table = 1; } if ($opt_n) { $modulename = $opt_n; } else { if ($cfile eq "easel") { $modulename = "easel"; } elsif ($cfile =~ /esl_(\S+)\.c/) { $modulename = $1; } else { $modulename = "foo"; } } $text = `cat $cfile`; $nfuncs = &parse_function_documentation($text); $nsections = &parse_api_subheads($text); if ($show_api_table) { $j = -1; printf("%% Table generated by autodoc -t $cfile (so don't edit here, edit $cfile:)\n"); printf("\\begin{table}[hbp]\n"); printf("\\begin{center}\n"); printf("{\\small\n"); printf("\\begin{tabular}{|ll|}\\hline\n"); for ($i = 0; $i < $nfuncs; $i++) { if ($insection{$function[$i]} != $j) { $j = $insection{$function[$i]}; printf("\\apisubhead{%s}\\\\\n", $apisubheads[$j]); } if ($synopsis[$i] ne "") { printf("\\hyperlink{func:%s()}{\\ccode{%s()}} & %s\\\\\n", $function[$i], $pfunction[$i], $synopsis[$i]); } else { printf("\\hyperlink{func:%s()}{\\ccode{%s()}} & Description.\\\\\n", $function[$i], $pfunction[$i]); } } printf("\\hline\n"); printf("\\end{tabular}\n"); printf("}\n"); printf("\\end{center}\n"); printf("\\caption{The \\eslmod{%s} API.}\n", $modulename); printf("\\label{tbl:%s_api}\n", $modulename); printf("\\end{table}\n"); } else { print "\\begin{sreapi}\n"; for ($i = 0; $i < $nfuncs; $i++) { printf("\\hypertarget{func:%s()}\n{", $function[$i]); printf "\\item[%s %s(%s)]", $returntype[$i], $pfunction[$i], $args[$i]; printf("}\n"); print "\n"; print $purpose[$i], "\n"; print "Returns ", $returns[$i], "\n" unless ($returns[$i] eq ""); print "Throws ", $throws[$i], "\n" unless ($throws[$i] eq ""); print "\n\n"; } print "\\end{sreapi}\n\n"; } exit; # Function: parse_function_documentation # # Purpose: Given from a .c file, parse it for my structured # function documentation. Returns , the number of # documented functions found; and it populates the following # global arrays: # function - verbatim name of the function # pfunction - name of the function, protected for LaTeX (\_ not _, for example) # returntype - C return type; for example, "int" # args - C argument list, from the func def'n # purpose - Text documenting the function # synopsis - OPTIONAL: short half-line description, else "" # incept - OPTIONAL: date/name/place, else "" # argdocs - OPTIONAL: table documenting the args, else "" # returns - OPTIONAL: documentation of returned # information or codes; else ""; # throws - OPTIONAL: documentation of returned # abnormal error codes # # Each of these is an array indexed <0..n-1>, for the # documented functions. # sub parse_function_documentation { my ($text) = @_; my ($comment, $n, $first_funcname); $n = 0; # /* Function: text \n double \n foo ( args ) \n{ while ($text =~ m|(/\*\s*Function:\s*.+?\*/)\s*\n(.+?)\s*\n(\S+)\((.+?)\)\s*\n\{|gms) { $comment = $1; $returntype[$n] = $2; $function[$n] = $3; $args[$n] = $4; # Delimit end of each block in the comments with a \n@*, for # convenience in getting out the individual blocks. $comment =~ s|\n \* (\S)|\n@\* \1|g; $comment =~ s|\n \*/|\n@\*/|g; # Remove leading comment symbols and spacing. $comment =~ s|\n[ \t]*\*[ \t]*|\n|g; # Now, grab all the individual blocks of info from a structured # function header comment. Required fields: # Function: # Purpose: # the function and its args. # if ($comment =~ m|/\* Function:\s*(.+?)\n@\*|ms) { $first_funcname = $1; } else {next;} if ($first_funcname =~ /^(\S+)\(\)/) { $first_funcname = $1; } if ($first_funcname ne $function[$n]) { die "parse error; $first_funcname != $function[$n]";} if ($comment =~ m|\n@\* Synopsis:\s*(.+?)\n@\*|ms) { $synopsis[$n] = &process_comment_text($1); } else {$synopsis[$n] = ""; } if ($comment =~ m|\n@\* Incept:\s*(.+?)\n@\*|ms) { $incept[$n] = &process_comment_text($1); } else {$incept[$n] = ""; } if ($comment =~ m|\n@\* Purpose:\s*(.+?)\n@\*|ms) { $purpose[$n] = &process_comment_text($1); } else {next;} if ($comment =~ m|\n@\* Args:\s*(.+?)\n@\*|ms) { $argdocs[$n] = $1; } else {$argdocs = ""; } if ($comment =~ m|\n@\* Returns:\s*(.+?)\n@\*|ms) { $returns[$n] = &process_comment_text($1); } else {$returns[$n] = ""; } if ($comment =~ m|\n@\* Throws:\s*(.+?)\n@\*|ms) { $throws[$n] = &process_comment_text($1); } else {$throws[$n] = ""; } # protect _ characters. $function contains original name, for use as # hypertarget tag; $pfunction contains the protected function name, for output. $pfunction[$n] = &latex_safe($function[$n]); $returntype[$n] = &latex_safe($returntype[$n]); $args[$n] = &latex_safe($args[$n]); $n++; } $n; } # Function: process_comment_text # sub process_comment_text { my ($text) = @_; my (@s); # old text, as chars my (@s2); # new text, as chars my ($newtext); my ($n); my ($i); my ($state); # 0 = text; 1 = math; 2 = code. Finite automaton. @s = split(//,$text); $n = $#s + 1; $state = 0; # start in text state for ($i = 0; $i < $n; $i++) { # State transitions in the text/math/code mode automaton # if ($state == 0 && $s[$i] eq '$') { $state = 1; push(@s2, '$'); } # enter math state elsif ($state == 0 && $s[$i] eq '<') { $state = 2; push(@s2, split(//, "\\ccode{")); } # enter code state elsif ($state == 1 && $s[$i] eq '$') { $state = 0; push(@s2, '$'); } # back to text state elsif ($state == 2 && $s[$i] eq '>' && $s[$i-1] ne '-') { $state = 0; push(@s2, '}'); } # back to text state on >, unless it was -> # No state transition; deal with processing other characters according to state. # elsif ($state == 2 && $s[$i] eq '_') { push(@s2, '\\'); push(@s2, '_'); } elsif ($state == 2 && $s[$i] eq '%') { push(@s2, '\\'); push(@s2, '%'); } else { push(@s2, $s[$i]); } } $newtext = join('',@s2); } # Function: latex_safe # # Purpose: Given a , substitute any unacceptable characters # for LaTeX, as follows: # _ becomes \_ # % becomes \% # # becomes \# # sub latex_safe { my ($string) = @_; $string =~ s/_/\\_/g; $string =~ s/%/\\%/g; $string =~ s/#/\\#/g; $string; } # Function: parse_api_subheads # # Purpose: Given from a .c file, parse it # for structured API subheading documentation: # # /******************************************** # *# 1. The object. # ********************************************/ # # Keys off of the /***** line, followed by a line # starting with " *#" followed by a number and a period; # the rest of the line is taken to be the title. # # The title is processed, so <> and math mode are allowed. # # Returns n, the number of subheadings found; # and it populates two global arrays: # apisubheads<0..n-1> : one-line section subheadings # insection{$funcname} : which api subhead $funcname is under # sub parse_api_subheads { my ($text) = @_; my (@lines) = split(/^/, $text); $n = 0; $armed = 0; foreach $line (@lines) { if ($armed && $line =~ /^ \*\#\s*\d+\.\s*(.+)$/) { $apisubheads[$n] = &process_comment_text($1); $n++; $armed = 0; } if ($line =~ /^\/\* Function:\s*(.+)\(\)/) { $insection{$1} = $n-1; } if ($line =~ /^\/\*{12}/) { $armed = 1; } # can expect a subhead line next, else { $armed = 0; } # or not. } $n; } hmmer-3.1b2/easel/devkit/00README0000664361611702660230000000027712473612605015676 0ustar wheelerteddy Generating a list of all keywords (functions, macros, etc) in a codebase: find . -name \*.[ch] -exec ctags -x {} \; | ~/src/easel/trunk/devkit/ctags-fix | sort | tbl-pretty -f3 > 00INDEX hmmer-3.1b2/easel/INSTALL0000664361611702660230000000176412473612610014417 0ustar wheelerteddyBrief installation instructions Easel h3.1b2; February 2015 SRE, Mon Mar 24 09:05:20 2008 ------------------------------------------------------------- Starting from a source distribution, easel-h3.1b2.tar.gz: Uncompress: uncompress easel-h3.1b2.tar.gz Unpack: tar xf easel-h3.1b2.tar Move into new directory: cd easel-h3.1b2 Configure: ./configure Build: make Automated tests: make check Automated install: make install For information on more expert customization options available to you in the configuration and the Makefiles, see the Installation chapter in the Easel User's Guide (Userguide.pdf). Easel is developed on Linux, and tested on a variety of UNIX and UNIX-like operating systems, including Apple OS/X. It is written in ANSI C99 and should build cleanly on any system with an ANSI C99 compiler, including Microsoft Windows. ------------------------------------------------------------- hmmer-3.1b2/easel/esl_stretchexp.tex0000664361611702660230000000272612473612610017143 0ustar wheelerteddy The stretched exponential distribution may be useful for fitting fat-tailed empirical distributions. The stretched exponential has a similar functional form as the Weibull distribution, and the Weibull is confusingly sometimes referred to as a ``stretched exponential distribution'' in the literature, but they are not the same. (See the \eslmod{weibull} module.) \begin{tabular}{lcll}\hline Variate & $x$ & \ccode{double} & $\mu \leq x < \infty$ \\ Location & $\mu$ & \ccode{double} & $-\infty < \mu < \infty$\\ Scale & $\lambda$ & \ccode{double} & $\lambda > 0$ \\ Shape & $\tau$ & \ccode{double} & $\tau > 0$ \\ \hline \end{tabular} The probability density function (PDF) is: \begin{equation} P(X=x) = \frac{\lambda \tau}{\Gamma(\frac{1}{\tau})} e^{- [\lambda(x-\mu)]^{\tau}} \label{eqn:stretchexp_pdf} \end{equation} The cumulative distribution function (CDF) does not have an analytical expression. It is obtained from the integral: \begin{eqnarray*} P(X \leq x) & = & \int_{\mu}^{x} P(X=z) dz\\ & = & \frac{\lambda \tau}{\Gamma(\frac{1}{\tau})} \int_\mu^{x} e^{- [\lambda(z-\mu)]^{\tau}} dz\\ \label{eqn:stretchexp_cdf1} \end{eqnarray*} By change-of-variables $t = [\lambda(z-\mu)]^{\tau}$, $t^{\frac{1}{\tau}} = \lambda(z-\mu)$, $dz = \frac{1}{\lambda \tau} t^{\frac{1}{\tau}-1} dt$, this can be rewritten as: \[ P(X \leq x) = \frac{1}{\Gamma(\frac{1}{\tau})} \int_0^{[\lambda(x-\mu)]^{\tau}} e^{-t} t^{\frac{1}{\tau}-1} dt \] hmmer-3.1b2/easel/esl_getopts.c0000664361611702660230000023526512473612606016074 0ustar wheelerteddy/* Implements a somewhat more powerful command line getopt interface * than the standard UNIX/POSIX call. * * Contents: * 1. The ESL_GETOPTS object. * 2. Setting and testing a configuration. * 3. Retrieving option settings and command line args. * 4. Formatting option help. * 5. Private functions. * 6. Test driver. * 7. Examples. * * xref STL8/p152; STL9/p5. */ #include "esl_config.h" #include #include #include #include #include "easel.h" #include "esl_getopts.h" /* Forward declarations of private functions. */ static int set_option(ESL_GETOPTS *g, int opti, char *optarg, int setby, int do_alloc); static int get_optidx_exactly(const ESL_GETOPTS *g, char *optname, int *ret_opti); static int get_optidx_abbrev(ESL_GETOPTS *g, char *optname, int n, int *ret_opti); static int esl_getopts(ESL_GETOPTS *g, int *ret_opti, char **ret_optarg); static int process_longopt(ESL_GETOPTS *g, int *ret_opti, char **ret_optarg); static int process_stdopt(ESL_GETOPTS *g, int *ret_opti, char **ret_optarg); static int verify_type_and_range(ESL_GETOPTS *g, int i, char *val, int setby); static int verify_integer_range(char *arg, char *range); static int verify_real_range(char *arg, char *range); static int verify_char_range(char *arg, char *range); static int parse_rangestring(char *range, char c, char **ret_lowerp, int *ret_geq, char **ret_upperp, int *ret_leq); static int process_optlist(ESL_GETOPTS *g, char **ret_s, int *ret_opti); /***************************************************************** *# 1. The object *****************************************************************/ /* Function: esl_getopts_Create() * Synopsis: Create a new object. * * Purpose: Creates an object, given the * array of valid options (NULL-element-terminated). * Sets default values for all config * options (as defined in ). * * Returns: ptr to the new object. * * Throws: NULL on failure, including allocation failures or * an invalid structure. */ ESL_GETOPTS * esl_getopts_Create(ESL_OPTIONS *opt) { ESL_GETOPTS *g = NULL; int status; int i; ESL_ALLOC(g, sizeof(ESL_GETOPTS)); g->opt = opt; g->argc = 0; g->argv = NULL; g->optind = 1; g->nfiles = 0; g->val = NULL; g->setby = NULL; g->valloc = NULL; g->optstring = NULL; g->spoof = NULL; g->spoof_argv= NULL; g->errbuf[0] = '\0'; /* Figure out the number of options. * * Using the NULL-terminated structure array is a design decision. * Alternatively, the caller could provide us with noptions, and use * a #define noptions (sizeof(options) / sizeof(ESL_GETOPTS)) idiom. * Note that we can't use sizeof() here, because now is just a * pointer. * * A drawback of requiring NULL termination is, what happens when * the caller forgets? Thus the check for a leading '-' on all * options; if we start straying into memory, that check should * catch us. */ g->nopts = 0; while (g->opt[g->nopts].name != NULL) { if (g->opt[g->nopts].name[0] != '-') ESL_XEXCEPTION(eslEINVAL, "option %d didn't start with '-';\nyou may have forgotten to NULL-terminate the ESL_OPTIONS array", g->nopts); g->nopts++; } /* Set default values for all options. * Note the valloc[] setting: we only need to dup strings * into allocated space if the value is volatile memory, and * that only happens in config files; not in defaults, cmdline, * or environment. */ ESL_ALLOC(g->val, sizeof(char *) * g->nopts); ESL_ALLOC(g->setby, sizeof(int) * g->nopts); ESL_ALLOC(g->valloc, sizeof(int) * g->nopts); for (i = 0; i < g->nopts; i++) { g->val[i] = g->opt[i].defval; g->setby[i] = eslARG_SETBY_DEFAULT; g->valloc[i] = 0; } /* Verify type/range of the defaults, even though it's * an application error (not user error) if they're invalid. */ for (i = 0; i < g->nopts; i++) if (verify_type_and_range(g, i, g->val[i], eslARG_SETBY_DEFAULT) != eslOK) ESL_XEXCEPTION(eslEINVAL, "%s\n", g->errbuf); return g; ERROR: esl_getopts_Destroy(g); return NULL; } /* Function: esl_getopts_CreateDefaultApp() * Synopsis: Initialize a standard Easel application. * * Purpose: Carry out the usual sequence of events in initializing a * small Easel-based application: parses the command line, * process the <-h> option to produce a (single-sectioned) * help page, and check that the number of command line * options is right. * * is an array of structures describing * the options, terminated by an all- structure. * is the number of command-line arguments * expected. and are the command line * arguments (number and pointer array) from . * * is an optional one-line description of the * program's function, such as <"compare RNA structures">. * When the <-h> help option is selected, this description * will be combined with the program's name (the tail of * ) and Easel's copyright and license information * to give a header like: * * \begin{cchunk} * # esl-compstruct :: compare RNA structures * # Easel 0.1 (February 2005) * # Copyright (C) 2004-2007 HHMI Janelia Farm Research Campus * # Freely licensed under the Janelia Software License. * # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * \end{cchunk} * * is an optional one-line description of command * line usage (without the command name), such as * \begin{cchunk} * [options] * \end{cchunk} * On errors, or * on the help page, this usage string is combined with * the program's name to give a usage line like: * * \begin{cchunk} * Usage: esl-compstruct [options] * \end{cchunk} * * and are optional, meaning that either * can be provided as and they won't be shown. * * Returns: a pointer to a new object, which contains * all the option settings and command line arguments. * * On command line errors, this routine exits with abnormal * (1) status. * * If the <-h> help option is seen, this routine exits with * normal (0) status after printing a help page. * */ ESL_GETOPTS * esl_getopts_CreateDefaultApp(ESL_OPTIONS *options, int nargs, int argc, char **argv, char *banner, char *usage) { ESL_GETOPTS *go = NULL; go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); if (usage != NULL) esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "-h") == TRUE) { if (banner != NULL) esl_banner(stdout, argv[0], banner); if (usage != NULL) esl_usage (stdout, argv[0], usage); puts("\nOptions:"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != nargs) { puts("Incorrect number of command line arguments."); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } return go; } /* Function: esl_getopts_Reuse() * Synopsis: Reset application state to default. * * Purpose: Reset application configuration to initial defaults, * as if it were newly created (before any * processing of environment, config files, or * command line). * * Returns: on success. * * Throws: (no abnormal error conditions) * * Xref: J4/24. */ int esl_getopts_Reuse(ESL_GETOPTS *g) { int i; /* Restore defaults for all options */ for (i = 0; i < g->nopts; i++) { if (g->valloc[i] > 0) { free(g->val[i]); } g->val[i] = g->opt[i].defval; g->setby[i] = eslARG_SETBY_DEFAULT; g->valloc[i] = 0; } if (g->spoof != NULL) free(g->spoof); if (g->spoof_argv != NULL) free(g->spoof_argv); g->argc = 0; g->argv = NULL; g->optind = 1; g->nfiles = 0; g->optstring = NULL; g->spoof = NULL; g->spoof_argv = NULL; g->errbuf[0] = '\0'; return eslOK; } /* Function: esl_getopts_Destroy() * Synopsis: Destroys an object. * * Purpose: Free's a created object. * * Returns: void. */ void esl_getopts_Destroy(ESL_GETOPTS *g) { int i; if (g != NULL) { if (g->val != NULL) { /* A few of our vals may have been allocated. */ for (i = 0; i < g->nopts; i++) if (g->valloc[i] > 0) free(g->val[i]); free(g->val); } if (g->setby != NULL) free(g->setby); if (g->valloc != NULL) free(g->valloc); if (g->spoof != NULL) free(g->spoof); if (g->spoof_argv != NULL) free(g->spoof_argv); free(g); } } /* Function: esl_getopts_Dump() * Synopsis: Dumps a summary of a configuration. * * Purpose: Dump the state of to an output stream * , often stdout or stderr. */ void esl_getopts_Dump(FILE *ofp, ESL_GETOPTS *g) { int i, j; if (g->argv != NULL) { fprintf(ofp, "argv[0]: %s\n", g->argv[0]); for (i = 1, j = g->optind; j < g->argc; j++, i++) fprintf(ofp, "argument %2d (argv[%2d]): %s\n", i, j, g->argv[j]); fputc('\n', ofp); } fprintf(ofp, "%12s %12s %9s\n", "Option", "Setting", "Set by"); fprintf(ofp, "------------ ------------ ---------\n"); for (i = 0; i < g->nopts; i++) { fprintf(ofp, "%-12s ", g->opt[i].name); if (g->opt[i].type == eslARG_NONE) fprintf(ofp, "%-12s ", g->val[i] == NULL ? "off" : "on"); else fprintf(ofp, "%-12s ", g->val[i]); if (g->setby[i] == eslARG_SETBY_DEFAULT) fprintf(ofp, "(default) "); else if (g->setby[i] == eslARG_SETBY_CMDLINE) fprintf(ofp, "cmdline "); else if (g->setby[i] == eslARG_SETBY_ENV) fprintf(ofp, "environ "); else if (g->setby[i] >= eslARG_SETBY_CFGFILE) fprintf(ofp, "cfgfile "); fprintf(ofp, "\n"); } return; } /***************************************************************** *# 2. Setting and testing a configuration *****************************************************************/ /* Function: esl_opt_ProcessConfigfile() * Synopsis: Parses options in a config file. * * Purpose: Given an open configuration file (and * its name , for error reporting), * parse it and set options in accordingly. * Anything following a <\#> in the file is a * comment. Blank (or all-comment) lines are * ignored. Data lines contain one option and * its optional argument: for example <--foo arg> * or <-a>. All option arguments are type and * range checked, as specified in . * * Returns: on success. * * Returns on parse or format error in the * file, or f option argument fails a type or range check, * or if an option is set twice by the same config file. * In any of these "normal" (user) error cases, errbuf> * is set to a useful error message to indicate the error. * * Throws: on allocation problem. */ int esl_opt_ProcessConfigfile(ESL_GETOPTS *g, char *filename, FILE *fp) { char *buf = NULL; int n = 0; char *s; char *optname; /* tainted: from user's input file */ char *optarg; /* tainted: from user's input file */ char *comment; int line; int opti; int status; line = 0; while ((status = esl_fgets(&buf, &n, fp)) != eslEOF) { if (status != eslOK) return status; /* esl_fgets() failed (EMEM) */ line++; optname = NULL; optarg = NULL; /* First token is the option, e.g. "--foo" */ s = buf; esl_strtok(&s, " \t\n", &optname); if (optname == NULL) continue; /* blank line */ if (*optname == '#') continue; /* comment line */ if (*optname != '-') ESL_FAIL(eslESYNTAX, g->errbuf, "Parse failed at line %d of cfg file %.24s (saw %.24s, not an option)\n", line, filename, optname); /* Second token, if present, is the arg */ if (*s == '"') esl_strtok(&s, "\"", &optarg); /* quote-delimited arg */ else esl_strtok(&s, " \t\n", &optarg); /* space-delimited arg */ /* Anything else on the line had better be a comment */ esl_strtok(&s, " \t\n", &comment); if (comment != NULL && *comment != '#') ESL_FAIL(eslESYNTAX, g->errbuf, "Parse failed at line %d of cfg file %.24s (saw %.24s, not a comment)\n", line, filename, comment); /* Now we've got an optname and an optional optarg; * figure out what option this is. */ if (get_optidx_exactly(g, optname, &opti) != eslOK) ESL_FAIL(eslESYNTAX, g->errbuf, "%.24s is not a recognized option (config file %.24s, line %d)\n", optname, filename, line); /* Set that option. * Pass TRUE to set_option's do_alloc flag, because our buffer * is volatile memory that's going away soon - set_option needs * to strdup the arg, not just point to it. */ status = set_option(g, opti, optarg, eslARG_SETBY_CFGFILE+g->nfiles, TRUE); if (status != eslOK) return status; } if (buf != NULL) free(buf); g->nfiles++; return eslOK; } /* Function: esl_opt_ProcessEnvironment() * Synopsis: Parses options in the environment. * * Purpose: For any option defined in that can be modified * by an environment variable, check the environment * and set that option accordingly. The value provided * by the environment is type and range checked. * When an option is turned on that has other options * toggle-tied to it, those options are turned off. * An option's state may only be changed once by the * environment (even indirectly thru toggle-tying); * else an error is generated. * * Returns: on success, and is loaded with all * options specified in the environment. * * Returns on user input problems, * including type/range check failures, and * sets errbuf> to a useful error message. * * Throws: on allocation problem. */ int esl_opt_ProcessEnvironment(ESL_GETOPTS *g) { int i; char *optarg; int status; for (i = 0; i < g->nopts; i++) if (g->opt[i].envvar != NULL && (optarg = getenv(g->opt[i].envvar)) != NULL) { status = set_option(g, i, optarg, eslARG_SETBY_ENV, FALSE); if (status != eslOK) return status; } return eslOK; } /* Function: esl_opt_ProcessCmdline() * Synopsis: Parses options from the command line. * * Purpose: Process a command line ( and ), parsing out * and setting application options in . Option arguments * are type and range checked before they are set, if type * and range information was set when was created. * When an option is set, if it has any other options * "toggle-tied" to it, those options are also turned off. * * Any given option can only change state (on/off) once * per command line; trying to set the same option more than * once generates an error. * * On successful return, contains settings of all * command line options and their option arguments, for * subsequent retrieval by * functions. also contains an state variable * pointing to the next element that is not an * option. needs this to know * where the options end and command line arguments begin * in . * * The parser starts with and reads elements * in order until it reaches an element that is not an option; * at this point, all subsequent elements are * interpreted as arguments to the application. * * Any element encountered in the command line that * starts with <- > is an option, except <- > or <-- > by * themselves. <- > by itself is interpreted as a command * line argument (usually meaning ``read from stdin instead * of a filename''). <-- > by itself is interpreted as * ``end of options''; all subsequent elements are * interpreted as command-line arguments even if they * begin with <- >. * * Returns: on success. is loaded with * all option settings specified on the cmdline. * Returns on any cmdline parsing problem, * including option argument type/range check failures, * and sets errbuf> to a useful error message for * the user. * * Throws: on allocation problem. */ int esl_opt_ProcessCmdline(ESL_GETOPTS *g, int argc, char **argv) { int opti; char *optarg; int status, setstatus; g->argc = argc; g->argv = argv; g->optind = 1; /* start at argv[1] */ g->optstring = NULL; /* not in a -abc optstring yet */ /* Walk through each option in the command line using esl_getopts(), * which advances g->optind as the index of the next argv element we need * to look at. */ while ((status = esl_getopts(g, &opti, &optarg)) == eslOK) { setstatus = set_option(g, opti, optarg, eslARG_SETBY_CMDLINE, FALSE); if (setstatus != eslOK) return setstatus; } if (status == eslEOD) return eslOK; else return status; } /* Function: esl_opt_ProcessSpoof() * Synopsis: Parses a string as if it were a command line. * * Purpose: Process the string as if it were a * complete command line. * * Essentially the same as * except that whitespace-delimited tokens first need to be * identified in the first, then passed as * , to . * * Returns: on success, and is loaded with the * application configuration. * * Returns on any parsing problem, and sets * errbuf> to an informative error message. * * Throws: on allocation failure. * * Xref: J4/24. */ int esl_opt_ProcessSpoof(ESL_GETOPTS *g, const char *cmdline) { int argc = 0; char *s = NULL; void *p; char *tok; int status; if (g->spoof != NULL || g->spoof_argv != NULL) ESL_XFAIL(eslEINVAL, g->errbuf, "cannot process more than one spoofed command line"); if ((status = esl_strdup(cmdline, -1, &(g->spoof))) != eslOK) goto ERROR; s = g->spoof; while (esl_strtok(&s, " \t\n", &tok) == eslOK) { argc++; ESL_RALLOC(g->spoof_argv, p, sizeof(char *) * argc); g->spoof_argv[argc-1] = tok; } status = esl_opt_ProcessCmdline(g, argc, g->spoof_argv); return status; ERROR: if (g->spoof != NULL) { free(g->spoof); g->spoof = NULL; } if (g->spoof_argv != NULL) { free(g->spoof_argv); g->spoof_argv = NULL; } return status; } /* Function: esl_opt_VerifyConfig() * Synopsis: Validates configuration after options are set. * * Purpose: Given a that we think is fully configured now -- * from config file(s), environment, and command line -- * verify that the configuration is self-consistent: * for every option that is set, make sure that any * required options are also set, and that no * incompatible options are set. ``Set'' means * the configured value is non-default and non-NULL (including booleans), * and ``not set'' means the value is default or NULL. (That is, * we don't go solely by , which refers to who * determined the state of an option, even if * it is turned off.) * * Returns: on success. * if a required option is not set, or * if an incompatible option is set; in this case, sets * errbuf> to contain a useful error message for * the user. * * Throws: if something's wrong with the * structure itself -- a coding error in the application. */ int esl_opt_VerifyConfig(ESL_GETOPTS *g) { int i,reqi,incompati; char *s; int status; /* For all options that are set (not in default configuration, * and turned on with non-NULL vals), * verify that all their required_opts are set. */ for (i = 0; i < g->nopts; i++) { if (g->setby[i] != eslARG_SETBY_DEFAULT && g->val[i] != NULL) { s = g->opt[i].required_opts; while ((status = process_optlist(g, &s, &reqi)) != eslEOD) { if (status != eslOK) ESL_EXCEPTION(eslEINVAL, "something's wrong with format of optlist: %s\n", s); if (g->val[reqi] == NULL) { if (g->setby[i] >= eslARG_SETBY_CFGFILE) ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s (set by cfg file %d) requires (or has no effect without) option(s) %.24s", g->opt[i].name, g->setby[i]-2, g->opt[i].required_opts); else if (g->setby[i] == eslARG_SETBY_ENV) ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s (set by env var %s) requires (or has no effect without) option(s) %.24s", g->opt[i].name, g->opt[i].envvar, g->opt[i].required_opts); else ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s requires (or has no effect without) option(s) %.24s", g->opt[i].name, g->opt[i].required_opts); } } } } /* For all options that are set (turned on with non-NULL vals), * verify that no incompatible options are set to non-default * values (notice the setby[incompati] check) */ for (i = 0; i < g->nopts; i++) { if (g->setby[i] != eslARG_SETBY_DEFAULT && g->val[i] != NULL) { s = g->opt[i].incompat_opts; while ((status = process_optlist(g, &s, &incompati)) != eslEOD) { if (status != eslOK) ESL_EXCEPTION(eslEINVAL, "something's wrong with format of optlist: %s\n", s); if (incompati != i && (g->setby[incompati] != eslARG_SETBY_DEFAULT && g->val[incompati] != NULL)) { if (g->setby[i] >= eslARG_SETBY_CFGFILE) ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s (set by cfg file %d) is incompatible with option(s) %.24s", g->opt[i].name, g->setby[i]-2, g->opt[i].incompat_opts); else if (g->setby[i] == eslARG_SETBY_ENV) ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s (set by env var %s) is incompatible with option(s) %.24s", g->opt[i].name, g->opt[i].envvar, g->opt[i].incompat_opts); else ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s is incompatible with option(s) %.24s", g->opt[i].name, g->opt[i].incompat_opts); } } } } return eslOK; } /* Function: esl_opt_ArgNumber() * Synopsis: Returns number of command line arguments. * * Purpose: Returns the number of command line arguments. * * Caller must have already called * , in order for all the options * to be parsed first. Everything left on the command line * is taken to be an argument. */ int esl_opt_ArgNumber(const ESL_GETOPTS *g) { return ((g)->argc - (g)->optind); } /* Function: esl_opt_SpoofCmdline() * Synopsis: Create faux command line from current option configuration. * * Purpose: Given the current configuration state of the application * , create a command line that would recreate the same * state by itself (without any environment or config file * settings), and return it in <*ret_cmdline>. * * Returns: on success. The <*ret_cmdline> is allocated here, * and caller is responsible for freeing it. * * Throws: on allocation error, and <*ret_cmdline> is . * * Xref: J4/24 */ int esl_opt_SpoofCmdline(const ESL_GETOPTS *g, char **ret_cmdline) { char *cmdline = NULL; char *p = NULL; int ntot = 0; int n; int i, j; int status; /* Application name/path */ ntot = strlen(g->argv[0]) + 1; ESL_ALLOC(cmdline, sizeof(char) * (ntot+1)); sprintf(cmdline, "%s ", g->argv[0]); /* Options */ for (i = 0; i < g->nopts; i++) if (g->setby[i] != eslARG_SETBY_DEFAULT) { if (g->opt[i].type == eslARG_NONE) n = strlen(g->opt[i].name) + 1; else n = (strlen(g->opt[i].name) + strlen(g->val[i])) + 2; ESL_RALLOC(cmdline, p, sizeof(char) * (ntot + n + 1)); if (g->opt[i].type == eslARG_NONE) sprintf(cmdline + ntot, "%s ", g->opt[i].name); else sprintf(cmdline + ntot, "%s %s ", g->opt[i].name, g->val[i]); ntot += n; } /* Arguments */ for (j = g->optind; j < g->argc; j++) { n = strlen(g->argv[j]) + 1; ESL_RALLOC(cmdline, p, sizeof(char) * (ntot + n + 1)); sprintf(cmdline + ntot, "%s ", g->argv[j]); ntot += n; } /* Terminate */ cmdline[ntot] = '\0'; *ret_cmdline = cmdline; return eslOK; ERROR: if (cmdline != NULL) free(cmdline); *ret_cmdline = NULL; return status; } /***************************************************************** *# 3. Retrieving option settings and command line args *****************************************************************/ /* Function: esl_opt_IsDefault() * Synopsis: Returns if option remained at default setting. * * Purpose: Returns if option is in its * default state; returns if was * changed on the command line, in the environment, or in * a configuration file. */ int esl_opt_IsDefault(const ESL_GETOPTS *g, char *optname) { int opti; if (get_optidx_exactly(g, optname, &opti) != eslOK) esl_fatal("no such option %s\n", optname); if (g->setby[opti] == eslARG_SETBY_DEFAULT) return TRUE; if (g->val[opti] == NULL && g->opt[opti].defval == NULL) return TRUE; if (esl_strcmp(g->opt[opti].defval, g->val[opti]) == 0) return TRUE; /* option may have been set but restored to original default value */ return FALSE; } /* Function: esl_opt_IsOn() * Synopsis: Returns if option is set to a non- value. * * Purpose: Returns if option is on (set to a non- * value). * * This is most useful when using integer-, real-, char-, * or string-valued options also as boolean switches, where * they can either be OFF, or they can be turned ON by * having a value. Caller can test to see * if the option's active at all, then use * or whatever to extract the option * value. * * For a boolean option, the result is identical to * . * * Xref: J4/83. */ int esl_opt_IsOn(const ESL_GETOPTS *g, char *optname) { int opti; if (get_optidx_exactly(g, optname, &opti) != eslOK) esl_fatal("no such option %s\n", optname); if (g->val[opti] == NULL) return FALSE; else return TRUE; } /* Function: esl_opt_IsUsed() * Synopsis: Returns if option is on, and this is not the default. * * Purpose: Returns if option is in use: it has been * set to a non-default value, and that value correspond to * the option being "on" (a non- value). * * This is used in printing application headers, where * we want to report all the options that are in effect that * weren't already on by default. * * Xref: J4/83 */ int esl_opt_IsUsed(const ESL_GETOPTS *g, char *optname) { int opti; if (get_optidx_exactly(g, optname, &opti) != eslOK) esl_fatal("no such option %s\n", optname); if (esl_opt_IsDefault(g, optname)) return FALSE; if (g->val[opti] == NULL) return FALSE; return TRUE; } /* Function: esl_opt_GetSetter() * Synopsis: Returns code for who set this option. * * Purpose: For a processed options object , return the code * for who set option . This code is , * , , or it * is $\geq$ . If the option * was configured by a config file, the file number (the order * of calls) is encoded in codes * $\geq $ as * file number $=$ - + 1. */ int esl_opt_GetSetter(const ESL_GETOPTS *g, char *optname) { int opti; if (get_optidx_exactly(g, optname, &opti) != eslOK) esl_fatal("no such option %s\n", optname); return g->setby[opti]; } /* Function: esl_opt_GetBoolean() * Synopsis: Retrieve / for a boolean option. * * Purpose: Retrieves the configured TRUE/FALSE value for option * from . */ int esl_opt_GetBoolean(const ESL_GETOPTS *g, char *optname) { int opti; if (get_optidx_exactly(g, optname, &opti) == eslENOTFOUND) esl_fatal("no such option %s\n", optname); if (g->opt[opti].type != eslARG_NONE) esl_fatal("option %s is not a boolean", optname); if (g->val[opti] == NULL) return FALSE; else return TRUE; } /* Function: esl_opt_GetInteger() * Synopsis: Retrieve value of an integer option. * * Purpose: Retrieves the configured value for option * from . */ int esl_opt_GetInteger(const ESL_GETOPTS *g, char *optname) { int opti; if (get_optidx_exactly(g, optname, &opti) == eslENOTFOUND) esl_fatal("no such option %s\n", optname); if (g->opt[opti].type != eslARG_INT) esl_fatal("option %s does not take an integer arg", optname); return atoi(g->val[opti]); } /* Function: esl_opt_GetReal() * Synopsis: Retrieve value of a real-valued option. * * Purpose: Retrieves the configured value for option * from . */ double esl_opt_GetReal(const ESL_GETOPTS *g, char *optname) { int opti; if (get_optidx_exactly(g, optname, &opti) == eslENOTFOUND) esl_fatal("no such option %s\n", optname); if (g->opt[opti].type != eslARG_REAL) esl_fatal("option %s does not take a real-valued arg", optname); return (atof(g->val[opti])); } /* Function: esl_opt_GetChar() * Synopsis: Retrieve value of a character option. * * Purpose: Retrieves the configured value for option * from . */ char esl_opt_GetChar(const ESL_GETOPTS *g, char *optname) { int opti; if (get_optidx_exactly(g, optname, &opti) == eslENOTFOUND) esl_fatal("no such option %s\n", optname); if (g->opt[opti].type != eslARG_CHAR) esl_fatal("option %s does not take a char arg", optname); return (*g->val[opti]); } /* Function: esl_opt_GetString() * Synopsis: Retrieve value of a string option. * * Purpose: Retrieves the configured value for option * from . * * This retrieves options of type , * obviously, but also options of type * and . */ char * esl_opt_GetString(const ESL_GETOPTS *g, char *optname) { int opti; if (get_optidx_exactly(g, optname, &opti) == eslENOTFOUND) esl_fatal("no such option %s\n", optname); if (g->opt[opti].type != eslARG_STRING && g->opt[opti].type != eslARG_INFILE && g->opt[opti].type != eslARG_OUTFILE) esl_fatal("option %s does not take a string arg", optname); return g->val[opti]; } /* Function: esl_opt_GetArg() * Synopsis: Retrieve numbered command line argument. * * Purpose: Returns a pointer to command line argument number * , where ranges from <1..n> for * total arguments. * * If the caller has already verified that arguments * exist by testing , * is guaranteed to return non- * arguments for . * * Caller is responsible for verifying that the argument * makes sense for what it's supposed to be. * * Returns: A pointer to command line argument on success, or * if there is no such argument. */ char * esl_opt_GetArg(const ESL_GETOPTS *g, int which) { if (which <= 0) return NULL; if (g->optind+which-1 >= g->argc) return NULL; return g->argv[g->optind+which-1]; } /***************************************************************** * 4. Formatting option help *****************************************************************/ /* Function: esl_opt_DisplayHelp() * Synopsis: Formats one-line help for each option. * * Purpose: For each option in , print one line of brief * documentation for it, consisting of the option name * (and argument, if any) and the help string. If space * allows, default values for the options (if any) are * shown in brackets. If space still allows, range restrictions * for the options (if any) are shown in parentheses. * * If is non-zero, help lines are only printed * for options with the matching opt[i].docgrouptag>. * This allows the caller to group option documentation * into multiple sections with different headers. To * print all options in one call, pass 0 for . * * specifies how many spaces to prefix each line with. * * specifies the maximum text width for the * line. This would typically be 80 characters. Lines are * not allowed to exceed this length. If a line does exceed * this length, range restriction display is silently * dropped (for all options). If any line still exceeds * , the default value display is silently dropped, * for all options. If any line still exceeds , even * though it now consists almost solely of the option name and * its help string, an error is thrown. The * caller should either shorten the help string(s) or * increase the . * * Returns: on success. * * Throws: if one or more help lines are too long for * the specified . * if a write fails. */ int esl_opt_DisplayHelp(FILE *ofp, ESL_GETOPTS *go, int docgroup, int indent, int textwidth) { int optwidth = 0; /* maximum width for "-foo " options */ int helpwidth[3] = {0,0,0}; /* 0=everything; 1=with defaults, no range; 2=help string only */ int show_defaults; int show_ranges; int i, n; /* Figure out the field widths we need in the output. */ for (i = 0; i < go->nopts; i++) if (! docgroup || docgroup == go->opt[i].docgrouptag) { n = strlen(go->opt[i].name); /* "--foo" */ if (go->opt[i].type != eslARG_NONE) n += 4; /* + " " */ if (n > optwidth) optwidth = n; n = 2; /* init with " : " */ if (go->opt[i].help != NULL) n = strlen(go->opt[i].help) + 1; /* include " " in width */ if (n > helpwidth[2]) helpwidth[2] = n; if (go->opt[i].defval != NULL) n += strlen(go->opt[i].defval) + 4; /* include " []" in width */ if (n > helpwidth[1]) helpwidth[1] = n; if (go->opt[i].range != NULL) n += strlen(go->opt[i].range) + 4; /* include " ()" in width */ if (n > helpwidth[0]) helpwidth[0] = n; } /* Figure out what we have room for. */ if (indent + optwidth + helpwidth[0] <= textwidth) { show_defaults = TRUE; show_ranges = TRUE; } else if (indent + optwidth + helpwidth[1] <= textwidth) { show_defaults = TRUE; show_ranges = FALSE; } else if (indent + optwidth + helpwidth[2] <= textwidth) { show_defaults = FALSE; show_ranges = FALSE; } else ESL_EXCEPTION(eslEINVAL, "Help line too long"); /* Format and print the options in this docgroup. */ for (i = 0; i < go->nopts; i++) if (! docgroup || docgroup == go->opt[i].docgrouptag) { if (fprintf(ofp, "%*s", indent, "") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); n = 0; if (fprintf(ofp, "%s", go->opt[i].name) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); n += strlen(go->opt[i].name); switch (go->opt[i].type) { case eslARG_NONE: break; case eslARG_INT: if (fprintf(ofp, " ") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); n += 4; break; case eslARG_REAL: if (fprintf(ofp, " ") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); n += 4; break; case eslARG_CHAR: if (fprintf(ofp, " ") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); n += 4; break; case eslARG_STRING: if (fprintf(ofp, " ") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); n += 4; break; case eslARG_INFILE: if (fprintf(ofp, " ") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); n += 4; break; case eslARG_OUTFILE: if (fprintf(ofp, " ") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); n += 4; break; } if (fprintf(ofp, "%*s", optwidth-n, "") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(ofp, " :") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); if (go->opt[i].help != NULL) { if (fprintf(ofp, " %s", go->opt[i].help) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (show_defaults && go->opt[i].defval != NULL) if (go->opt[i].type != eslARG_CHAR || *(go->opt[i].defval) != '\0') { if (fprintf(ofp, " [%s]", go->opt[i].defval) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (show_ranges && go->opt[i].range != NULL) { if (fprintf(ofp, " (%s)", go->opt[i].range) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } if (fprintf(ofp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "write failed"); } return eslOK; } /*------------------ end of the public API -----------------------*/ /***************************************************************** * 5. Miscellaneous private functions *****************************************************************/ /* set_option() * * Turn option ON (if it's a boolean) or set its option * argument to . Record that it was set by (e.g. * ). * * is a TRUE/FALSE flag. If is a pointer to a string * that isn't going to go away (e.g. into argv[], or into the * environment) we can get away with just pointing our option's val * at . But if is pointing to something volatile (e.g. * the line buffer as we're reading a file) then we need to * strdup the arg -- and remember that we did that, so we free() * it when we destroy the getopts object. * * All user errors (problems with optarg) are normal (returned) errors of * type , which leave an error message in errbuf>. * * May also throw on allocation failure, or * if something's wrong internally, usually indicating a coding error * in the application's structure. */ int set_option(ESL_GETOPTS *g, int opti, char *optarg, int setby, int do_alloc) { int arglen; char *where; char *s; int togi; int status; void *tmp; if (setby == eslARG_SETBY_DEFAULT) where = "as default"; else if (setby == eslARG_SETBY_CMDLINE) where = "on cmdline"; else if (setby == eslARG_SETBY_ENV) where = "in env"; else if (setby >= eslARG_SETBY_CFGFILE) where = "in cfgfile"; /* Have we already set this option? */ if (g->setby[opti] == setby) ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s has already been set %s.", g->opt[opti].name, where); /* Type and range check the option argument. */ if (verify_type_and_range(g, opti, optarg, setby) != eslOK) return eslESYNTAX; /* Set the option, being careful about when val * is alloc'ed vs. not. */ g->setby[opti] = setby; if (g->opt[opti].type == eslARG_NONE) /* booleans: any non-NULL is TRUE... */ { /* watch out for booleans getting toggled off/on */ if (g->opt[opti].defval) g->val[opti] = g->opt[opti].defval; /* use default string if provided: IsDefault() needs this */ else g->val[opti] = (char *) TRUE; /* else 0x1 will do fine. */ } else { /* If do_alloc is FALSE or the optarg is NULL, then: * - free any previous alloc; * - set the pointer. */ if (!do_alloc || optarg == NULL) { if (g->valloc[opti] > 0) { free(g->val[opti]); g->valloc[opti] = 0; } g->val[opti] = optarg; } /* else do_alloc is TRUE, so: * - make sure we have enough room, either reallocating or allocating * - copy the arg. */ else { arglen = strlen(optarg); if (g->valloc[opti] < arglen+1) { if (g->valloc[opti] == 0) ESL_ALLOC (g->val[opti], sizeof(char) * (arglen+1)); else ESL_RALLOC(g->val[opti], tmp, sizeof(char) * (arglen+1)); g->valloc[opti] = arglen+1; } strcpy(g->val[opti], optarg); } } /* Unset all options toggle-tied to this one. */ s = g->opt[opti].toggle_opts; while ((status = process_optlist(g, &s, &togi)) != eslEOD) { if (status != eslOK) ESL_EXCEPTION(eslEINVAL, "something's wrong with format of optlist: %s\n", s); if (togi == opti) continue; /* ignore ourself, so we can have one toggle list per group */ if (g->val[togi] == NULL) continue; /* it's already off; don't touch it */ if (g->setby[togi] == setby) ESL_FAIL(eslESYNTAX, g->errbuf, "Options %.24s and %.24s conflict, toggling each other.", g->opt[togi].name, g->opt[opti].name); g->setby[togi] = setby; /* indirectly, but still */ if (g->valloc[togi] > 0) /* careful about val's that were alloc'ed */ { free(g->val[togi]); g->valloc[togi] = 0; } g->val[togi] = NULL; /* ok for false booleans too */ } return eslOK; ERROR: return status; } /* get_optidx_exactly(): * * Find option named in ; set to be * the index of the option, and return eslOK. * must exactly match one of the options in . * * If the option is not found, return eslENOTFOUND. */ static int get_optidx_exactly(const ESL_GETOPTS *g, char *optname, int *ret_opti) { int i; for (i = 0; i < g->nopts; i++) if (strcmp(optname, g->opt[i].name) == 0) { *ret_opti = i; return eslOK; } return eslENOTFOUND; } /* get_optidx_abbrev(): * * Find option named in ; set to be the index * of the option, and return eslOK. Allow to be an * abbreviation of one of the option names in , so long as it is * unambiguous. If is >0, the has an attached argument * (--foo=arg) and is the # of characters before the = character * that we should match to find the option (5, in this example). * * If the option is not found, return . * If ambiguously matches two or more options in , * return . */ static int get_optidx_abbrev(ESL_GETOPTS *g, char *optname, int n, int *ret_opti) { int nabbrev = 0; int nexact = 0; int i; if (n == 0) /* unless we're told otherwise: */ n = strlen(optname); /* all of optname abbrev must match against the real name */ for (i = 0; i < g->nopts; i++) if (strncmp(g->opt[i].name, optname, n) == 0) { nabbrev++; *ret_opti = i; if (n == strlen(g->opt[i].name)) { nexact++; break; } /* an exact match; can stop now (xref bug #e4) */ } if (nexact != 1 && nabbrev > 1) return eslEAMBIGUOUS; if (nabbrev == 0) return eslENOTFOUND; return eslOK; } /*----------- end of private functions for retrieving option indices -------------*/ /***************************************************************** * Private functions for processing options out of a command line *****************************************************************/ /* esl_getopts(): * * Get the next option in argv[], and its argument (if any), * and pass this information back via (index of * next option) and on success, if we're out of * options. * * Returns and sets errbuf> to a useful error * message if something's wrong with one of the user's options. * * Throws if something's wrong internally with the * structure. */ static int esl_getopts(ESL_GETOPTS *g, int *ret_opti, char **ret_optarg) { *ret_optarg = NULL; /* Check to see if we've run out of options. * A '-' by itself is an argument (e.g. "read from stdin"), not an option. */ if (g->optstring == NULL && (g->optind >= g->argc || g->argv[g->optind][0] != '-' || strcmp(g->argv[g->optind], "-") == 0)) return eslEOD; /* normal end-of-data (end of options) return */ /* Check to see if we're being told that this is the end * of the options with the special "--" flag. */ if (g->optstring == NULL && strcmp(g->argv[g->optind], "--") == 0) { g->optind++; return eslEOD; /* also a normal end-of-data return */ } /* We have an option: an argv element that starts with -, but is * not "-" or "--". * * We know the strncmp() test is ok for 2 chars, because if the option was * 1 char, we would've already caught it above (either it's a bare "-" * or it's a single non-option char, and in either case it's not an option * and we returned eslEOD. * * Watch out for the case where we're in the middle of a concatenated optstring * of single-letter options, a la -abc */ if (g->optstring == NULL && strncmp(g->argv[g->optind], "--", 2) == 0) return process_longopt(g, ret_opti, ret_optarg); else return process_stdopt(g, ret_opti, ret_optarg); } /* process_longopt(): * * optind is sitting on a long option, w/ syntax of one of these forms: * --foo * --foo arg * --foo=arg * (GNU getopt long option syntax.) * * Allow unambiguous abbreviations of long options when matching; * e.g. --foo is ok for matching a long option --foobar. * * Returns on success, returning the option number through * , and a ptr to its argument through (or NULL * if this option takes no argument.) Internally, g->optind is * advanced to next argv element (+1, +2, +1, respectively, for --foo, * --foo arg, --foo=arg). * * Returns and sets a useful error mesg in errbuf> if: * 1. Option can't be found in opt[]. * 2. Option abbreviation is ambiguous, matching opt[] nonuniquely. * 3. Option takes an argument, but no argument found. * 4. Option does not take an argument, but one was provided by =arg syntax. * All of these are user input errors. */ static int process_longopt(ESL_GETOPTS *g, int *ret_opti, char **ret_optarg) { int opti; /* option number found */ char *argptr; /* ptr to arg in --foo=arg syntax */ int n; /* length of argv elem's option part (up to = or \0) */ int status; /* Deal with options of syntax "--foo=arg" w/o modifying argv. */ if ((argptr = strchr(g->argv[g->optind], '=')) != NULL) { n = argptr - g->argv[g->optind]; argptr++; } /* bump argptr off the = to the arg itself */ else { n = strlen(g->argv[g->optind]); } /* and argptr == NULL from above. */ /* Figure out which option this is. * The trick here is to allow abbreviations, and identify * ambiguities while we're doing it. (GNU getopt allows abbrevs.) */ status = get_optidx_abbrev(g, g->argv[g->optind], n, &opti); if (status == eslEAMBIGUOUS) ESL_FAIL(eslESYNTAX, g->errbuf, "Abbreviated option \"%.24s\" is ambiguous.", g->argv[g->optind]); else if (status == eslENOTFOUND) ESL_FAIL(eslESYNTAX, g->errbuf, "No such option \"%.24s\".", g->argv[g->optind]); else if (status != eslOK) ESL_EXCEPTION(eslEINCONCEIVABLE, "Something went wrong with option \"%.24s\".", g->argv[g->optind]); *ret_opti = opti; g->optind++; /* optind was on the option --foo; advance the counter to next argv element */ /* Find the argument, if there is supposed to be one. */ if (g->opt[opti].type != eslARG_NONE) { if (argptr != NULL) /* if --foo=arg syntax, then we already found it */ *ret_optarg = argptr; else if (g->optind >= g->argc) ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s requires an argument.", g->opt[opti].name); else { /* "--foo 666" style, with a space */ *ret_optarg = g->argv[g->optind++]; /* assign optind as the arg, advance counter */ /* Watch out for options masquerading as missing arguments. */ if ((g->opt[opti].type == eslARG_STRING || g->opt[opti].type == eslARG_INFILE || g->opt[opti].type == eslARG_OUTFILE) && **ret_optarg == '-') ESL_FAIL(eslESYNTAX, g->errbuf, "Arg looks like option? Use %.24s=%.24s if you really mean it.", g->opt[opti].name, *ret_optarg); } } else /* if there's not supposed to be an arg, but there is, then die */ { if (argptr != NULL) ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s does not take an argument.", g->opt[opti].name); *ret_optarg = NULL; } return eslOK; } /* process_stdopt(): * * Either we're in the middle of working on an optstring (and optind * is sitting on the next argv element, which may be an argument of * the last char in the optstring), or optind is sitting on a "-" * option and we should start working on a new optstring. That is, * we're dealing with standard one-char options, which may be * concatenated into an optstring. * * Only the last optchar in a optstring may take an argument. The argument * is either the remainder of the argv element (if any) or if not, the * next argv element. * * Examples of syntax: * -a * -W arg * -Warg * -abc * -abcW arg * -abcWarg * * Process next optchar; return on success, returning option * number through and a pointer to any argument through * . Internally, optind is advanced to the next argv element; * either 0, +1, or +2, depending on whether we're still processing an * optstring from a prev optind, starting a new optstring, or reading * a "-W arg" form, respectively. * * Returns and sets errbuf> to a helpful error mesg if: * 1. The option doesn't exist. * 2. The option takes an argument, but none was found. * 3. The option takes an untypechecked argument (eslARG_STRING, * eslARG_INFILE, or eslARG_OUTFILE), the argument is unattached * (space-delimited), and it appears to be an option instead of * an argument, because it starts with '-'. * All these are user input errors. */ static int process_stdopt(ESL_GETOPTS *g, int *ret_opti, char **ret_optarg) { int opti; /* Do we need to start a new optstring in a new argv element? * (as opposed to still being in an optstring from a prev parse) */ if (g->optstring == NULL) g->optstring = g->argv[g->optind++]+1; /* init optstring on first option char; advance optind */ /* Figure out what option this optchar is */ for (opti = 0; opti < g->nopts; opti++) if (*(g->optstring) == g->opt[opti].name[1]) break; /* this'll also fail appropriately for long opts. */ if (opti == g->nopts) ESL_FAIL(eslESYNTAX, g->errbuf, "No such option \"-%c\".", *(g->optstring)); *ret_opti = opti; /* Find the argument, if there's supposed to be one */ if (g->opt[opti].type != eslARG_NONE) { if (*(g->optstring+1) != '\0') /* attached argument case, a la -Warg */ *ret_optarg = g->optstring+1; else if (g->optind < g->argc) { /* unattached argument; assign optind, advance counter */ *ret_optarg = g->argv[g->optind++]; /* Watch out for options masquerading as missing arguments. */ if ((g->opt[opti].type == eslARG_STRING || g->opt[opti].type == eslARG_INFILE || g->opt[opti].type == eslARG_OUTFILE) && **ret_optarg == '-') ESL_FAIL(eslESYNTAX, g->errbuf, "Arg looks like option? Use %.24s%.24s if you really mean it.", g->opt[opti].name, *ret_optarg); } else ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s requires an argument", g->opt[opti].name); g->optstring = NULL; /* An optchar that takes an arg must terminate an optstring. */ } else /* if there's not supposed to be an argument, then check if we're still in an optstring */ { *ret_optarg = NULL; if (*(g->optstring+1) != '\0') /* yup, we're still in an optstring */ g->optstring++; else g->optstring = NULL; /* nope, that's it; move to next field in args */ } return eslOK; } /*----------- end of private functions for processing command line options -------------*/ /***************************************************************** * Private functions for type and range checking. *****************************************************************/ /* verify_type_and_range(): * * Implementation of type and range checking for options. * * Given a value (as a string) for option in the option * object , verify that satisfies the appropriate type and * range. If successful, return . * * The flag is used to help format useful error messages, * by saying who was responsible for a bad . * * Returns: on success. * Returns if fails type/range checking, * and errbuf> is set to contain an error report for the user. * * Throws: : a range string format was bogus. * : "can't happen" internal errors. */ static int verify_type_and_range(ESL_GETOPTS *g, int i, char *val, int setby) { char *where; if (setby == eslARG_SETBY_DEFAULT) where = "as default"; else if (setby == eslARG_SETBY_CMDLINE) where = "on cmdline"; else if (setby == eslARG_SETBY_ENV) where = "in env"; else if (setby >= eslARG_SETBY_CFGFILE) where = "in cfgfile"; /* A special case: Any option may be "unset" by default by having a * NULL default value. Thus, for instance, an eslARG_REAL can be * off by default, or set to a value by a command line option. */ if (setby == eslARG_SETBY_DEFAULT && val == NULL) return eslOK; switch (g->opt[i].type) { case eslARG_NONE: /* treat as unchecked, because val may be "on", 0x1, "true", etc.: * any non-NULL ptr means on, and NULL means off. */ break; case eslARG_INT: if (! esl_str_IsInteger(val)) ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s takes integer arg; got %.24s %s", g->opt[i].name, val, where); if (verify_integer_range(val, g->opt[i].range) != eslOK) ESL_FAIL(eslESYNTAX, g->errbuf, "option %.24s takes integer arg in range %.24s; got %.24s %s", g->opt[i].name, g->opt[i].range, val, where); break; case eslARG_REAL: if (! esl_str_IsReal(val)) ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s takes real-valued arg; got %.24s %s", g->opt[i].name, val, where); if (verify_real_range(val, g->opt[i].range) != eslOK) ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s takes real-valued arg in range %.24s; got %.24s %s", g->opt[i].name, g->opt[i].range, val, where); break; case eslARG_CHAR: if (strlen(val) > 1) ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s takes char arg; got %.24s %s", g->opt[i].name, val, where); if (verify_char_range(val, g->opt[i].range) != eslOK) ESL_FAIL(eslESYNTAX, g->errbuf, "Option %.24s takes char arg in range %.24s; got %.24s %s", g->opt[i].name, g->opt[i].range, val, where); break; case eslARG_STRING: /* unchecked type. */ case eslARG_INFILE: case eslARG_OUTFILE: if (g->opt[i].range != NULL) ESL_EXCEPTION(eslEINVAL, "option %s takes a string arg that can't be range checked", g->opt[i].name); break; default: ESL_EXCEPTION(eslEINVAL, "no such argument type"); } return eslOK; } /* verify_integer_range(): * * Returns if the string , when converted to an integer * by atoi(), gives a value that lies within the given , if * is non-NULL. (If is NULL, there is no constraint on * the range of this , so return TRUE.) Else, does not lie * in the ; return (a user input error). If * itself is misformatted, return (a coding error). * * Range must be in one of three formats, matched * by these regexps (though regexps aren't used by the * parser): * n>=?(\d+) lower bound * n<=?(\d+) upper bound * (\d+)<=?n<=?(\d+) lower and upper bound * Optional = signs indicate whether a bound is * inclusive or not. The "n" character indicates the * given integer value. * * Returns: : is within allowed . * : is not within allowed . * : something wrong with string. */ static int verify_integer_range(char *arg, char *range) { int n; int upper, lower; /* upper, lower bounds */ char *up, *lp; int geq, leq; /* use >=, <= instead of >, < */ if (range == NULL) return eslOK; n = atoi(arg); if (parse_rangestring(range, 'n', &lp, &geq, &up, &leq) != eslOK) return eslEINVAL; if (lp != NULL) { lower = atoi(lp); if ((geq && ! (n >= lower)) || (!geq && !(n > lower))) return eslERANGE; } if (up != NULL) { upper = atoi(up); if ((leq && ! (n <= upper)) || (!leq && !(n < upper))) return eslERANGE; } return eslOK; } /* verify_real_range(): * * Verify that a string , when converted to a * double-precision real by atof(), gives a value that lies * within the range defined by . If is NULL, * there is no range constraint, and any is valid. * * Returns: : is within allowed . * : is not within allowed . * : something wrong with string. */ static int verify_real_range(char *arg, char *range) { double x; double upper, lower; /* upper, lower bounds */ char *up, *lp; int geq, leq; /* use >=, <= instead of >, < */ if (range == NULL) return eslOK; x = atof(arg); if (parse_rangestring(range, 'x', &lp, &geq, &up, &leq) != eslOK) return eslEINVAL; if (lp != NULL) { lower = atof(lp); if ((geq && ! (x >= lower)) || (!geq && !(x > lower))) return eslERANGE; } if (up != NULL) { upper = atof(up); if ((leq && ! (x <= upper)) || (!leq && !(x < upper))) return eslERANGE; } return eslOK; } /* verify_char_range(): * * Verify that a string , when interpreted as a single * char argument, is a character that lies within the defined * . If is NULL, there is no range constraint, * and any is valid. * * Currently, expression is limited to ASCII chars that can be * expressed as single chars. Could improve by allowing integer ASCII * codes, or backslash escapes. * * Returns: : is within allowed . * : is not within allowed . * : something wrong with string. */ static int verify_char_range(char *arg, char *range) { char c; char *upper, *lower; int geq, leq; /* use >=, <= instead of >, < */ if (range == NULL) return eslOK; c = *arg; if (parse_rangestring(range, 'c', &lower, &geq, &upper, &leq) != eslOK) return eslEINVAL; if (lower != NULL) { if ((geq && ! (c >= *lower)) || (!geq && !(c > *lower))) return eslERANGE; } if (upper != NULL) { if ((leq && ! (c <= *upper)) || (!leq && !(c < *upper))) return eslERANGE; } return eslOK; } /* parse_rangestring(): * * Given a range definition string in one of the following forms: * c>=?(\d+) lower bound * c<=?(\d+) upper bound * (\d+)<=?c<=?(\d+) lower and upper bound * where is a one-character marker expected for the * argument type ('n' for integers, 'f' for floating-point values, * 'c' for characters). * * Sets pointers to upper and lower bound strings, for parsing by * atoi() or atof() as appropriate. * Sets geq, leq flags to TRUE if bounds are supposed to be inclusive. * * Returns on success, if the range string * is invalid. No errors are thrown here, so caller can format a * useful error message if range string is bogus. */ static int parse_rangestring(char *range, char c, char **ret_lowerp, int *ret_geq, char **ret_upperp, int *ret_leq) { char *ptr; *ret_geq = *ret_leq = FALSE; /* 'til proven otherwise */ *ret_lowerp = *ret_upperp = NULL; /* 'til proven otherwise */ if ((ptr = strchr(range, c)) == NULL) return eslEINVAL; if (ptr == range) /* we're "n>=a" or "n<=b" form, where n came first */ { if (ptr[1] == '>') /* "n>=a" form; lower bound */ { if (ptr[2] == '=') { *ret_geq = TRUE; *ret_lowerp = ptr+3; } else *ret_lowerp = ptr+2; } else if (ptr[1] == '<') /* "n<=a" form; upper bound */ { if (ptr[2] == '=') { *ret_leq = TRUE; *ret_upperp = ptr+3; } else *ret_upperp = ptr+2; } else return eslEINVAL; } else /* we're in a<=n<=b form; upper bound after n, lower before */ { if (*(ptr+1) != '<') return eslEINVAL; if (*(ptr+2) == '=') { *ret_leq = TRUE; *ret_upperp = ptr+3; } else *ret_upperp = ptr+2; ptr--; if (*ptr == '=') { *ret_geq = TRUE; ptr--; } if (*ptr != '<') return eslEINVAL; *ret_lowerp = range; /* start of string */ } return eslOK; } /*-------------- end of private type/range-checking functions ----------------*/ /***************************************************************** * Private functions for checking optlists (toggles, required options, * and incompatible options *****************************************************************/ /* process_optlist(): * * Given a pointer to the next option name in * a comma-delimited list, figure out what option * this is; set to its index. If another * option remains in the optlist, reset to * the start of it, for the next call to process_optlist(). * If no options remain after this one, reset to NULL. * * Returns: if an option has been successfully parsed * out of the list and is valid; * if no more option remains ( is NULL, * or points to a \0). * if an option in the list isn't * recognized (a coding error). */ static int process_optlist(ESL_GETOPTS *g, char **ret_s, int *ret_opti) { char *s; int i; int n; if ((s = *ret_s) == NULL) return eslEOD; if (*s == '\0') return eslEOD; n = strcspn(s, ","); /* a little weak here; we're only matching a n-long prefix, so we're * not going to catch the case where the optlist contains a * truncated, ambiguous optionname. but optlists are not user * input, so the answer to this problem is "don't do that". */ for (i = 0; i < g->nopts; i++) if (strncmp(g->opt[i].name, s, n) == 0) break; if (i == g->nopts) return eslEINVAL; *ret_opti = i; if (s[n] == ',') *ret_s = s+n+1; else *ret_s = NULL; return eslOK; } /*------- end of private functions for processing optlists -----------*/ /***************************************************************** * 6. Test driver. *****************************************************************/ #ifdef eslGETOPTS_TESTDRIVE /* gcc -g -Wall -o getopts_utest -I. -DeslGETOPTS_TESTDRIVE esl_getopts.c easel.c */ #include #include #include "easel.h" #include "esl_getopts.h" /*::cexcerpt::getopts_bigarray::begin::*/ #define BGROUP "-b,--no-b" static ESL_OPTIONS options[] = { /* name type default env_var range toggles req incompat help docgroup */ { "-a", eslARG_NONE, FALSE,"FOOTEST",NULL, NULL, NULL, NULL, "toggle a on", 1 }, { "-b", eslARG_NONE, FALSE, NULL, NULL, BGROUP, NULL, NULL, "toggle b on", 1 }, { "--no-b", eslARG_NONE,"TRUE", NULL, NULL, BGROUP, NULL, NULL, "toggle b off", 1 }, { "-c", eslARG_CHAR, "x", NULL,"a<=c<=z",NULL, NULL, NULL, "character arg", 2 }, { "--d1", eslARG_NONE,"TRUE", NULL, NULL, "--d2", NULL, NULL, "toggle d1 on, d2 off", 2 }, { "--d2", eslARG_NONE, FALSE, NULL, NULL, "--d1", NULL, NULL, "toggle d2 on, d1 off", 2 }, { "-n", eslARG_INT, "0", NULL,"0<=n<10",NULL, NULL, NULL, "integer arg", 2 }, { "-x", eslARG_REAL, "0.8", NULL, "00", NULL, NULL, NULL, "real arg with lower bound", 2 }, { "--hix", eslARG_REAL, "0.9", NULL, "x<1", NULL, NULL, NULL, "real arg with upper bound", 2 }, { "--lown", eslARG_INT, "42", NULL, "n>0", NULL,"-a,-b", NULL, "int arg with lower bound", 2 }, { "--hin", eslARG_INT, "-1", NULL, "n<0", NULL, NULL,"--no-b","int arg with upper bound", 2 }, { "--host", eslARG_STRING, "","HOSTTEST",NULL, NULL, NULL, NULL, "string arg with env var", 3 }, { "--multi",eslARG_STRING,NULL, NULL, NULL, NULL, NULL, NULL, "test quoted configfile arg",3 }, { "--mul", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "test long opt abbreviation",3 }, /* xref bug #e4 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; /*::cexcerpt::getopts_bigarray::end::*/ int main(void) { ESL_GETOPTS *go; char file1[32] = "esltmpXXXXXX"; char file2[32] = "esltmpXXXXXX"; char *errmsg = "getopts unit test failure"; FILE *f1, *f2; int i; /* Declare a "command line" internally. */ int argc = 11; /* progname; 8 options; 2 args */ char *argv[] = { "progname", "-bc", "y", "--d1", "-n9", "--hix=0.0", "--lown", "43", "--mul", "arg1", "2005"}; /* Create a config file #1. */ if (esl_tmpfile_named(file1, &f1) != eslOK) esl_fatal("failed to create named tmpfile 1"); fprintf(f1, "# Test config file #1\n"); fprintf(f1, "#\n"); fprintf(f1, "-b\n"); fprintf(f1, "--d2\n"); fprintf(f1, "-n 3\n"); fprintf(f1, "-x 0.5\n"); fprintf(f1, "--multi \"one two three\"\n"); fclose(f1); /* Create config file #2. */ if (esl_tmpfile_named(file2, &f2) != eslOK) esl_fatal("failed to create named tmpfile 2"); fprintf(f2, "# Test config file #2\n"); fprintf(f2, "#\n"); fprintf(f2, "--no-b\n"); fprintf(f2, "--hin -33\n"); fprintf(f2, "--host www.nytimes.com\n"); fclose(f2); /* Put some test vars in the environment. * (Note: apparently, on some OS's (Mac OS/X), setenv() necessarily leaks memory.) */ setenv("FOOTEST", "", 1); setenv("HOSTTEST", "wasp.cryptogenomicon.org", 1); /* Open the test config files for reading. */ if ((f1 = fopen(file1, "r")) == NULL) esl_fatal("getopts fopen() 1 failed"); if ((f2 = fopen(file2, "r")) == NULL) esl_fatal("getopts fopen() 2 failed"); go = esl_getopts_Create(options); if (esl_opt_ProcessConfigfile(go, file1, f1) != eslOK) esl_fatal("getopts failed to process config file 1\n%s\n", go->errbuf); if (esl_opt_ProcessConfigfile(go, file2, f2) != eslOK) esl_fatal("getopts failed to process config file 2\n%s\n", go->errbuf); if (esl_opt_ProcessEnvironment(go) != eslOK) esl_fatal("getopts failed to process environment:\n%s\n", go->errbuf); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) esl_fatal("getopts failed to process command line:\n%s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) esl_fatal("getopts config fails validation:\n%s\n", go->errbuf); fclose(f1); fclose(f2); if (esl_opt_GetBoolean(go, "-a") != TRUE) esl_fatal("getopts failed on -a"); /* -a is ON: by environment */ if (esl_opt_GetBoolean(go, "-b") != TRUE) esl_fatal("getopts failed on -b"); /* -b is toggled thrice, ends up ON */ if (esl_opt_GetBoolean(go, "--no-b") != FALSE) esl_fatal("getopts failed on --no-b"); /* so --no-b is OFF */ if (esl_opt_GetChar (go, "-c") != 'y') esl_fatal("getopts failed on -c"); /* set to y on cmdline in an optstring */ if (esl_opt_GetInteger(go, "-n") != 9) esl_fatal("getopts failed on -n"); /* cfgfile, then on cmdline as linked arg*/ if (esl_opt_GetReal (go, "-x") != 0.5) esl_fatal("getopts failed on -x"); /* cfgfile #1 */ if (esl_opt_GetReal (go, "--lowx") != 1.0) esl_fatal("getopts failed on --lowx"); /* stays at default */ if (esl_opt_GetReal (go, "--hix") != 0.0) esl_fatal("getopts failed on --hix"); /* arg=x format on cmdline */ if (esl_opt_GetInteger(go, "--lown") != 43) esl_fatal("getopts failed on --lown"); /* cmdline; requires -a -b */ if (esl_opt_GetInteger(go, "--hin") != -33) esl_fatal("getopts failed on --hin"); /* cfgfile 2; requires --no-b to be off */ if (esl_opt_GetBoolean(go, "--mul") != TRUE) esl_fatal("getopts failed on --mul"); /* --mul should not be confused with --multi by abbrev parser*/ if (strcmp(esl_opt_GetString(go, "--host"), "wasp.cryptogenomicon.org") != 0) esl_fatal("getopts failed on --host"); /* cfgfile 2, then overridden by environment */ if (strcmp(esl_opt_GetString(go, "--multi"), "one two three") != 0) esl_fatal("config file didn't handle quoted argument"); /* --d1, --d2 test that we can resolve the difference between IsDefault(), IsOn(), and IsUsed() */ /* these options, despite getting toggled twice on/off, remain at default values; * so d1 is default, on, and not used (because it's default); d2 is default, off, and not used. * IsDefault IsOn IsUsed * ------- ----- ------- * true true true [can't happen: option must be non-default to be considered "in use"] * true true false --d1 for example, despite being toggled twice * true false true [can't happen: option must be non-default to be considered "in use"] * true false false --d2 for example, despite being toggled twice * false true true -a,-b for example * false true false [can't happen: if option is ON and not in default state, it's "in use"] * false false true [can't happen: if option is OFF, it's not "in use"] * false false false --no-b for example */ if (! esl_opt_IsDefault(go, "--d1")) esl_fatal(errmsg); if (! esl_opt_IsOn (go, "--d1")) esl_fatal(errmsg); if ( esl_opt_IsUsed (go, "--d1")) esl_fatal(errmsg); if (! esl_opt_IsDefault(go, "--d2")) esl_fatal(errmsg); if ( esl_opt_IsOn (go, "--d2")) esl_fatal(errmsg); if ( esl_opt_IsUsed (go, "--d2")) esl_fatal(errmsg); if ( esl_opt_IsDefault(go, "-a")) esl_fatal(errmsg); if (! esl_opt_IsOn (go, "-a")) esl_fatal(errmsg); if (! esl_opt_IsUsed (go, "-a")) esl_fatal(errmsg); if ( esl_opt_IsDefault(go, "-b")) esl_fatal(errmsg); if (! esl_opt_IsOn (go, "-b")) esl_fatal(errmsg); if (! esl_opt_IsUsed (go, "-b")) esl_fatal(errmsg); if ( esl_opt_IsDefault(go, "--no-b")) esl_fatal(errmsg); if ( esl_opt_IsOn (go, "--no-b")) esl_fatal(errmsg); if ( esl_opt_IsUsed (go, "--no-b")) esl_fatal(errmsg); for (i = 0; i < go->nopts; i++) { /* Test that no option is in an impossible default/on/used state according to logic table above */ if ( esl_opt_IsDefault(go, go->opt[i].name) && esl_opt_IsOn(go, go->opt[i].name) && esl_opt_IsUsed(go, go->opt[i].name)) esl_fatal(errmsg); if ( esl_opt_IsDefault(go, go->opt[i].name) && ! esl_opt_IsOn(go, go->opt[i].name) && esl_opt_IsUsed(go, go->opt[i].name)) esl_fatal(errmsg); if (! esl_opt_IsDefault(go, go->opt[i].name) && esl_opt_IsOn(go, go->opt[i].name) && ! esl_opt_IsUsed(go, go->opt[i].name)) esl_fatal(errmsg); if (! esl_opt_IsDefault(go, go->opt[i].name) && ! esl_opt_IsOn(go, go->opt[i].name) && esl_opt_IsUsed(go, go->opt[i].name)) esl_fatal(errmsg); } /* Now the two remaining argv[] elements are the command line args */ if (esl_opt_ArgNumber(go) != 2) esl_fatal("getopts failed with wrong arg number"); if (strcmp("arg1", esl_opt_GetArg(go, 1)) != 0) esl_fatal("getopts failed on argument 1"); if (strcmp("2005", esl_opt_GetArg(go, 2)) != 0) esl_fatal("getopts failed on argument 2"); esl_getopts_Destroy(go); remove(file1); remove(file2); exit(0); } #endif /*eslGETOPTS_TESTDRIVE*/ /*-------------- end of test driver -------------------------*/ /***************************************************************** * 7. Examples. *****************************************************************/ /* The starting example of "standard" getopts behavior, without * any of the bells and whistles. * Compile: gcc -g -Wall -o getopts_example -I. -DeslGETOPTS_EXAMPLE esl_getopts.c easel.c */ #ifdef eslGETOPTS_EXAMPLE /*::cexcerpt::getopts_example::begin::*/ #include #include "easel.h" #include "esl_getopts.h" static ESL_OPTIONS options[] = { /* name type def env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { "-a", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "a boolean switch", 0}, { "-b", eslARG_NONE,"default",NULL,NULL, NULL, NULL, NULL, "another boolean switch", 0}, { "-n", eslARG_INT, "0", NULL, NULL, NULL, NULL, NULL, "an integer argument", 0}, { "-s", eslARG_STRING,"hi!", NULL, NULL, NULL, NULL, NULL, "a string argument", 0}, { "-x", eslARG_REAL, "1.0", NULL, NULL, NULL, NULL, NULL, "a real-valued argument", 0}, { "--file", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "long option, with filename arg", 0}, { "--char", eslARG_CHAR, "", NULL, NULL, NULL, NULL, NULL, "long option, with character arg",0}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "Usage: ./example [-options] "; int main(int argc, char **argv) { ESL_GETOPTS *go; char *arg; if ((go = esl_getopts_Create(options)) == NULL) esl_fatal("Bad options structure\n"); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) esl_fatal("Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) esl_fatal("Failed to parse command line: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") == TRUE) { puts(usage); puts("\n where options are:"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* 0=all docgroups; 2=indentation; 80=width */ return 0; } if (esl_opt_ArgNumber(go) != 1) esl_fatal("Incorrect number of command line arguments.\n%s\n", usage); arg = esl_opt_GetArg(go, 1); printf("Option -a: %s\n", esl_opt_GetBoolean(go, "-a") ? "on" : "off"); printf("Option -b: %s\n", esl_opt_GetBoolean(go, "-b") ? "on" : "off"); printf("Option -n: %d\n", esl_opt_GetInteger(go, "-n")); printf("Option -s: %s\n", esl_opt_GetString( go, "-s")); printf("Option -x: %f\n", esl_opt_GetReal( go, "-x")); if (esl_opt_IsUsed(go, "--file")) printf("Option --file: %s\n", esl_opt_GetString(go, "--file")); else printf("Option --file: (not set)\n"); printf("Option --char: %c\n", esl_opt_GetChar(go, "--char")); printf("Cmdline arg: %s\n", arg); esl_getopts_Destroy(go); return 0; } /*::cexcerpt::getopts_example::end::*/ #endif /*eslGETOPTS_EXAMPLE*/ /* Using implements a standard series * of events, including how the -h (help) option is handled. * Compile: gcc -g -Wall -o getopts_example2 -I. -DeslGETOPTS_EXAMPLE2 esl_getopts.c easel.c */ #ifdef eslGETOPTS_EXAMPLE2 /*::cexcerpt::getopts_example2::begin::*/ #include #include "easel.h" #include "esl_getopts.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { "-a", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "a boolean switch", 0}, { "-n", eslARG_INT, "42",NULL, NULL, NULL, NULL, NULL, "an integer", 0}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char banner[] = "example of using simplest getopts creation"; static char usage[] = "[-options] "; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *arg1 = esl_opt_GetArg(go, 1); char *arg2 = esl_opt_GetArg(go, 2); int a = esl_opt_GetBoolean(go, "-a"); int n = esl_opt_GetInteger(go, "-n"); printf("arg 1: %s\n", arg1); printf("arg 2: %s\n", arg2); printf("option a: %s\n", (a ? "true" : "false")); printf("option n: %d\n", n); esl_getopts_Destroy(go); return 0; } /*::cexcerpt::getopts_example2::end::*/ #endif /*eslGETOPTS_EXAMPLE2*/ /*-------------- end of examples ---------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_getopts.c 727 2011-10-24 17:17:32Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_getopts.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_minimizer.h0000664361611702660230000000305212473612606016402 0ustar wheelerteddy/* Multidimensional optimization by conjugate gradient descent. * * SRE, Wed Jun 22 09:53:05 2005 * SVN $Id: esl_minimizer.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_minimizer.h $ */ #ifndef eslMINIMIZER_INCLUDED #define eslMINIMIZER_INCLUDED #define MAXITERATIONS 100 extern int esl_min_Bracket(double *a, double *d, double *u, int n, double (*func)(double *, int, void *), void *prm, double *ret_fa, double *b, double *ret_bx, double *ret_fb, double *c, double *ret_cx, double *ret_fc); extern int esl_min_LineSearch(double *ori, double *d, double *u, int n, double (*func)(double *, int, void *), void *prm, double tol, double *b, double *x, double *ret_xx, double *ret_fx); extern int esl_min_ConjugateGradientDescent(double *x, double *u, int n, double (*func)(double *, int, void *), void (*dfunc)(double *, int, void *, double *), void *prm, double tol, double *wrk, double *ret_fx); #endif /*eslMINIMIZER_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_stopwatch.h0000664361611702660230000000411012473612607016410 0ustar wheelerteddy/* Tracking cpu/system/elapsed time used by a process. * * SRE, Wed Feb 22 19:30:36 2006 [St. Louis] [moved to Easel] * SRE, Thu Aug 3 08:00:35 2000 [St. Louis] [moved to SQUID] * SRE, Fri Nov 26 14:54:21 1999 [St. Louis] [HMMER] * SVN $Id: esl_stopwatch.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_stopwatch.h $ */ #ifndef eslSTOPWATCH_INCLUDED #define eslSTOPWATCH_INCLUDED #include #ifdef HAVE_TIMES #include #endif #ifdef HAVE_UNISTD_H #include /* need for sysconf() */ #endif typedef struct { /* t0 and cpu0 keep base, when the watch was Start()'ed */ #ifdef HAVE_TIMES clock_t t0; /* Wall time, POSIX times() */ struct tms cpu0; /* CPU/system time, POSIX times()*/ #else time_t t0; /* Wall time, fallback to ANSI time() */ clock_t cpu0; /* CPU time, fallback to ANSI clock() */ #endif /* elapsed/user/sys are t-t0 results for the last time the * watch was Stop()'ed. */ double elapsed; /* elapsed time, seconds */ double user; /* CPU time, seconds */ double sys; /* system time, seconds */ } ESL_STOPWATCH; extern ESL_STOPWATCH *esl_stopwatch_Create(void); extern void esl_stopwatch_Destroy(ESL_STOPWATCH *w); extern int esl_stopwatch_Start(ESL_STOPWATCH *w); extern int esl_stopwatch_Stop(ESL_STOPWATCH *w); extern int esl_stopwatch_Display(FILE *fp, ESL_STOPWATCH *w, char *prefix); extern int esl_stopwatch_Include(ESL_STOPWATCH *master, ESL_STOPWATCH *w); #endif /*eslSTOPWATCH_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_msaweight.tex0000664361611702660230000000342112473612607016741 0ustar wheelerteddyThe \eslmod{msaweight} module implements different \emph{ad hoc} sequence weighting algorithms, for compensating for overrepresentation in multiple sequence alignments. A multiple alignment often includes similar, even identical copies of sequences; the same sequence is often deposited in the databases more than once, and sequences from several closely related species are usually available. Thus relying on raw residue frequencies observed in multiple alignments is a flawed strategy, just as Wittgenstein wouldn't trust a consensus of two copies of his morning paper. The functions in the \eslmod{msaweight} API are summarized in Table~\ref{tbl:msa_api}. % TODO: Should implement more algorithms. \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \hyperlink{func:esl_msaweight_GSC()}{\ccode{esl\_msaweight\_GSC()}} & GSC weights.\\ \hyperlink{func:esl_msaweight_PB()}{\ccode{esl\_msaweight\_PB()}} & PB (position-based) weights.\\ \hyperlink{func:esl_msaweight_BLOSUM()}{\ccode{esl\_msaweight\_BLOSUM()}} & BLOSUM weights.\\ \hline \end{tabular} } \end{center} \caption{Functions in the \eslmod{msaweight} API. Requires the Easel core and phylogeny modules.} \label{tbl:msaweight_api} \end{table} \subsection{Example of using the msaweight API} An example of reading in a multiple alignment and calculating weights for its sequences using the GSC algorithm: \input{cexcerpts/msaweight_example} The new weights are stored internally in the \ccode{ESL\_MSA} object, and (as the example shows) can be accessed in its array \ccode{msa->wgt[0..nseq-1]}. \subsection{Pros and cons of different algorithms} % TODO: Computational complexity % TODO: Figures showing time, memory for varying N, L. % TODO: Eventually, benchmarks on HMMER: are these methods actually % different? hmmer-3.1b2/easel/esl_hyperexp.h0000664361611702660230000000640412473612606016247 0ustar wheelerteddy/* Hyperexponential (mixture exponential) distributions. * */ #ifndef eslHYPEREXP_INCLUDED #define eslHYPEREXP_INCLUDED #ifdef eslAUGMENT_RANDOM #include #endif #ifdef eslAUGMENT_HISTOGRAM #include #endif #ifdef eslAUGMENT_FILEPARSER #include #endif typedef struct { double *q; /* mixture coefficients [0..K-1]*/ double *lambda; /* scale params [0..K-1]*/ double *wrk; /* tmp K-vector, for logpdf calc */ double mu; /* location (x offset) parameter */ int K; /* # of components */ char *fixlambda; /* TRUE to constrain a lambda val */ int fixmix; /* TRUE to constrain the q's */ } ESL_HYPEREXP; extern ESL_HYPEREXP *esl_hyperexp_Create(int K); extern void esl_hyperexp_Destroy(ESL_HYPEREXP *h); extern int esl_hyperexp_Copy(ESL_HYPEREXP *src, ESL_HYPEREXP *dest); extern int esl_hyperexp_FixedUniformMixture(ESL_HYPEREXP *h); extern int esl_hyperexp_SortComponents(ESL_HYPEREXP *h); extern int esl_hyperexp_Write(FILE *fp, ESL_HYPEREXP *hxp); extern int esl_hyperexp_Dump(FILE *fp, ESL_HYPEREXP *hxp); #ifdef eslAUGMENT_FILEPARSER extern int esl_hyperexp_Read(ESL_FILEPARSER *ef, ESL_HYPEREXP **ret_hxp); extern int esl_hyperexp_ReadFile(char *filename, ESL_HYPEREXP **ret_hxp); #endif extern double esl_hxp_pdf (double x, ESL_HYPEREXP *h); extern double esl_hxp_logpdf (double x, ESL_HYPEREXP *h); extern double esl_hxp_cdf (double x, ESL_HYPEREXP *h); extern double esl_hxp_logcdf (double x, ESL_HYPEREXP *h); extern double esl_hxp_surv (double x, ESL_HYPEREXP *h); extern double esl_hxp_logsurv(double x, ESL_HYPEREXP *h); extern double esl_hxp_invcdf (double p, ESL_HYPEREXP *h); extern double esl_hxp_generic_pdf (double x, void *params); extern double esl_hxp_generic_cdf (double x, void *params); extern double esl_hxp_generic_surv (double x, void *params); extern double esl_hxp_generic_invcdf(double x, void *params); extern int esl_hxp_Plot(FILE *fp, ESL_HYPEREXP *h, double (*func)(double x, ESL_HYPEREXP *h), double xmin, double xmax, double xstep); #ifdef eslAUGMENT_RANDOM extern double esl_hxp_Sample(ESL_RANDOMNESS *r, ESL_HYPEREXP *h); #endif #ifdef eslAUGMENT_MINIMIZER extern int esl_hxp_FitGuess (double *x, int n, ESL_HYPEREXP *h); extern int esl_hxp_FitComplete(double *x, int n, ESL_HYPEREXP *h); #ifdef eslAUGMENT_HISTOGRAM extern int esl_hxp_FitGuessBinned (ESL_HISTOGRAM *g, ESL_HYPEREXP *h); extern int esl_hxp_FitCompleteBinned(ESL_HISTOGRAM *g, ESL_HYPEREXP *h); #endif #endif #endif /*eslHYPEREXP_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_hyperexp.h 727 2011-10-24 17:17:32Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_hyperexp.h $ *****************************************************************/ hmmer-3.1b2/easel/configure.ac0000664361611702660230000004263412473612604015660 0ustar wheelerteddy# Process this file with autoconf to produce the Easel configuration script. # # reminders to save re-reading autoconf manual for the n'th time: # - output variables: # are defined here as normal shell variables, e.g. FOO="my string" # are made into output variables by calling AC_SUBST(FOO) # any occurrence of @FOO@ in an output file is then substituted # I think this only happens in files we assign w/ AC_CONFIG_FILES; # that's the Makefile.in's. # # - C preprocessor symbols: # are defined here by calling AC_DEFINE(FOO) or AC_DEFINE(FOO, [42]) # then #undef FOO lines in easel.h.in become #define FOO or #define FOO 42 # I think this only happens in header files that we assign # w/ AC_CONFIG_HEADERS -- which means, easel.h.in # # SRE, Mon Feb 14 10:51:07 2005 # SVN $Id: configure.ac 854 2013-02-25 22:00:19Z wheelert $ # # xref autoconf macro archive at: http://www.gnu.org/software/ac-archive/ # # GNU recommends the following order: # 1. autoconf requirements # 2. AC_INIT # 3. info on the package # 4. checks for programs # 5. checks for libraries # 6. checks for header files # 7. checks for types # 8. checks for structures # 9. checks for compiler characteristics # 10. checks for library functions # 11. checks for system services # 12. AC_CONFIG_FILES # 13. AC_OUTPUT # AC_INIT information # # The four AC_INIT args set the following output variables and preprocessor # symbols: # PACKAGE_NAME e.g. "Easel" # PACKAGE_VERSION e.g. "0.1" # PACKAGE_BUGREPORT e.g. "eddys@janelia.hhmi.org" # PACKAGE_TARNAME e.g. "easel" # From them, AC_INIT automatically derives one more: # PACKAGE_STRING , e.g. "Easel 0.1" # Then we define some of our own: # EASEL_DATE release date: e.g. "February 2005" # EASEL_COPYRIGHT one-line copyright string # EASEL_LICENSE one-line license string # EASEL_LICENSETAG which license to bundle from Licenses/ subdirectory. # EASEL_URL URL home for Easel. # # Because Easel is designed to be a library and must coexist with # packages that include it as a subdirectory (HMMER, Infernal...), # we don't want to use AC_INIT's PACKAGE_ variables as preprocessor # symbols to put version info into executables; we'll get name clashes, # plus we might want to have both Easel version info and main package # version info. So, we use the PACKAGE_ stuff to make a # new preprocessor symbol of our own: # EASEL_VERSION e.g. "1.9a" # AC_PREREQ(2.60) #AC_INIT(Easel, 0.1.snap20080611, eddys@janelia.hhmi.org, easel) AC_INIT(Easel, 0.2.snap20130225, eddys@janelia.hhmi.org, easel) AC_MSG_NOTICE([Configuring the Easel library for your system.]) # remember if the user is overriding CFLAGS if test x"$CFLAGS" = x; then sre_cflags_env_set=no fi ################################################################ # 3. Info on the package ################################################################ EASEL_DATE="February 2013" EASEL_COPYRIGHT="Copyright (C) 2008 Howard Hughes Medical Institute" EASEL_LICENSE="Freely distributed under the Janelia Farm Software License." EASEL_VERSION=$PACKAGE_VERSION EASEL_URL="http://easel.janelia.org/" # Output variables. # (AC_OUTPUT replaces instances of @var@ in input files.) AC_SUBST(EASEL_DATE) AC_SUBST(EASEL_COPYRIGHT) AC_SUBST(EASEL_LICENSE) AC_SUBST(EASEL_VERSION) AC_SUBST(EASEL_URL) # Preprocessor symbols. # adds a -Dvar=value to @DEFS@; # replace #undef's in easel.h.in AC_DEFINE_UNQUOTED(EASEL_DATE, "$EASEL_DATE") AC_DEFINE_UNQUOTED(EASEL_COPYRIGHT, "$EASEL_COPYRIGHT") AC_DEFINE_UNQUOTED(EASEL_LICENSE, "$EASEL_LICENSE") AC_DEFINE_UNQUOTED(EASEL_VERSION, "$EASEL_VERSION") # Figure out what host we're compiling on. # Three GNU scripts must be included in the distro: # install.sh, config.guess, config.sub # This sets four shell variables: # host example: i686-pc-linux-gnu # host_cpu example: i686 # host_vendor example: pc # host_os example: linux-gnu AC_CANONICAL_HOST ################################################################ # 3b. ./configure command line options, for optional config # of the package ################################################################ # --enable-modular - configure for use of standalone modules # # Default is to enable all augmentations and compile entire library. # With --enable-modular, any desired augmentations must be set # at compile-time by the user. # AC_ARG_ENABLE(modular,[AS_HELP_STRING([--enable-modular],[compile and prepare modules for standalone use])], [ AC_MSG_NOTICE([Compiling for standalone (independent) use of modules.]) ], [ AC_MSG_NOTICE([Compiling the full Easel library, with all augmentations.]) AC_DEFINE(eslAUGMENT_ALPHABET) AC_DEFINE(eslAUGMENT_NCBI) AC_DEFINE(eslAUGMENT_DMATRIX) AC_DEFINE(eslAUGMENT_FILEPARSER) AC_DEFINE(eslAUGMENT_GEV) AC_DEFINE(eslAUGMENT_GUMBEL) AC_DEFINE(eslAUGMENT_HISTOGRAM) AC_DEFINE(eslAUGMENT_KEYHASH) AC_DEFINE(eslAUGMENT_MINIMIZER) AC_DEFINE(eslAUGMENT_MSA) AC_DEFINE(eslAUGMENT_RANDOM) AC_DEFINE(eslAUGMENT_SSI) AC_DEFINE(eslAUGMENT_STATS) AC_DEFINE(eslLIBRARY) ]) # --enable-debugging - enable basic debugging code (level 1) # --enable-debugging=x - also set verbosity level to (1-3) # # At all levels, replaces CFLAGS w/ "-g -Wall" (so it assumes gcc). # Sets the eslDEBUGLEVEL preprocessor symbol to # AC_ARG_ENABLE(debugging, [AS_HELP_STRING([--enable-debugging],[include debugging code]) AS_HELP_STRING([--enable-debugging=x],[also set diagnostics verbosity level to (1-3)])], enable_debugging=$enableval, enable_debugging=no) case $enable_debugging in yes) AC_DEFINE(eslDEBUGLEVEL, 1);; 1) AC_DEFINE(eslDEBUGLEVEL, 1);; 2) AC_DEFINE(eslDEBUGLEVEL, 2);; 3) AC_DEFINE(eslDEBUGLEVEL, 3);; no) AC_DEFINE(eslDEBUGLEVEL, 0);; *) AC_MSG_ERROR([Unknown argument to --enable-debugging: $enable_debugging]);; esac # --enable-threads Enable POSIX multithreading # # Uses ACX_PTHREAD macro from the GNU macro archive. # Back to my code to finish enabling pthreads... # Define these preprocessor variables: # HAVE_PTHREAD # HAVE_PTHREAD_SETCONCURRENCY # HAVE_PTHREAD_ATTR_SETSCOPE # AC_ARG_ENABLE([threads], [AS_HELP_STRING([--enable-threads], [enable POSIX multithreading support (default is check)])], [], [enable_threads=check]) case $enable_threads in yes) check_threads=yes ;; no) check_threads=no ;; check) check_threads=yes ;; *) check_threads=no AC_MSG_NOTICE([Ignoring unknown argument to --enable-threads: $enable_threads]) ;; esac AS_IF([test "x$check_threads" != xno], [ACX_PTHREAD([AC_DEFINE(HAVE_PTHREAD) AC_SUBST(PTHREAD_LIBS) AC_SUBST(PTHREAD_CFLAGS)], [if test "x$enable_threads" != xcheck; then AC_MSG_FAILURE([POSIX multithreading failed]) fi])]) AC_ARG_ENABLE(gcov,[AS_HELP_STRING([--enable-gcov],[compile for code coverage testing])], enable_gcov=$enableval, enable_gcov=no) AC_ARG_ENABLE(sse,[AS_HELP_STRING([--enable-sse],[enable SSE optimizations])] , enable_sse=$enableval, enable_sse=check) AC_ARG_ENABLE(vmx,[AS_HELP_STRING([--enable-vmx],[enable Altivec/VMX optimizations])], enable_vmx=$enableval, enable_vmx=check) AC_ARG_WITH(gsl,[AS_HELP_STRING([--with-gsl],[use the GSL, GNU Scientific Library])], with_gsl=$withval, with_gsl=no) AC_ARG_ENABLE(mpi,[AS_HELP_STRING([--enable-mpi],[enable MPI parallelization])], enable_mpi=$enableval, enable_mpi=no) ################################################################ # 4. Checks for programs ################################################################ AC_PROG_CC AC_PROG_INSTALL # MPI : set @CC@ to mpicc, sets @MPILIBS@, defines HAVE_MPI. if test "$enable_mpi" = "yes"; then ACX_MPI(,AC_MSG_ERROR([MPI library not found for --enable-mpi])) CC=$MPICC fi AC_PROG_CPP AX_COMPILER_VENDOR # AC_PROG_CC_STDC wants to append -c99 to icc; icc doesn't like this. if test "$ax_cv_c_compiler_vendor" != "intel"; then AC_PROG_CC_STDC fi AC_PROG_RANLIB AC_PATH_PROG([AR], [ar], [:], [$PATH:/usr/ccs/bin:/usr/xpg4/bin]) CHECK_GNU_MAKE # --enable-xlc-arch Set the code generation for a particular architecture # # The xlc compiler on AIX seems to need the -qarch flag to be set for a processor # that is VMX enabled. Otherwise a warning is issued that states the -qenablevmx # and -qaltivec flags are ignored. AX_COMPILER_VENDOR if test "${ax_cv_c_compiler_vendor}" = "ibm"; then AC_ARG_WITH(xlc-arch, [AC_HELP_STRING([--with-xlc-arch=], [specify architecture for xlc -qarch])], XLC_ARCH=$withval, XLC_ARCH=no) fi # Select our default optimization flags in CFLAGS. # if test "$sre_cflags_env_set" = "no"; then if test "$enable_gcov" = "yes"; then # --enable-gcov overrides CC too. CC="gcc" CFLAGS="-g -Wall -fprofile-arcs -ftest-coverage" elif test "$enable_debugging" != "no"; then if test "$GCC" = "yes"; then CFLAGS="-g -Wall" fi else sre_save_ac_test_cflags="$ac_test_CFLAGS" if test "$sre_cflags_env_set" = "no"; then ac_test_CFLAGS="" fi AX_CC_MAXOPT ac_test_CFLAGS="$sre_save_ac_test_cflags" # That was a workaround. AX_CC_MAXOPT apparently thinks that # $ac_test_CFLAGS only gets set if ${CFLAGS} was set by the # user (in the environment), but that's not so; it gets set # by AC_PROG_CC. Instead of rewriting AX_CC_MAXOPT, we fool # it. fi fi # Figure out how to generate PIC code for shared libraries # This sets @PIC_FLAGS@ output variable ESL_PIC_FLAGS # SSE: figure out our @SIMD_CFLAGS@, define HAVE_SSE2 # The AC_RUN_IFELSE() is there because it's possible to have # hardware that doesn't support SSE2 instructions, yet the # compiler can generate them: example AMD Athlons with gcc. # So we need to test that an SSE2 program actually runs without # generating an "illegal instruction" error. The program # here is sufficient [xref J3/127]. # Note: some platforms (Ubuntu 32-bit for example) absolutely # must have the -msse2 cflag on in order to detect a working # emmintrin.h, so we set SIMD_CFLAGS before running the test. if test "$enable_sse" = "yes" || test "$enable_sse" = "check"; then if test "x$SIMD_CFLAGS" = x; then case $ax_cv_c_compiler_vendor in gnu) AX_CHECK_COMPILER_FLAGS(-msse2,[SIMD_CFLAGS="-msse2"],[]);; *) ;; esac fi fi if test "$enable_sse" = "check" && test "$enable_vmx" != "yes"; then sre_save_CFLAGS="$CFLAGS" sre_save_CPPFLAGS="$CPPFLAGS" CFLAGS="$CFLAGS $SIMD_CFLAGS" CPPFLAGS="$CPPFLAGS $SIMD_CFLAGS" AC_CHECK_HEADER([emmintrin.h],[ AC_MSG_CHECKING([if platform can run SSE/SSE2 instructions]) AC_RUN_IFELSE([AC_LANG_PROGRAM( [[#include ]], [[__m128i v = _mm_set1_epi8(0);]])], [AC_MSG_RESULT([yes]) enable_sse=yes], [AC_MSG_RESULT([no])])]) CFLAGS="$sre_save_CFLAGS" CPPFLAGS="$sre_save_CPPFLAGS" fi if test "$enable_sse" = "yes"; then AC_DEFINE(HAVE_SSE2,1,[Support SSE2 (Streaming SIMD Extensions 2) instructions]) fi # VMX/Altivec (not autodetected yet; must use --enable-vmx to enable) if test "$enable_sse" != "yes"; then if test "x$SIMD_CFLAGS" = x; then VMX_SIMD_CFLAGS="" if test "$GCC" = "yes"; then AX_CHECK_COMPILER_FLAGS(-faltivec, [VMX_SIMD_CFLAGS="-faltivec"], [AX_CHECK_COMPILER_FLAGS(-maltivec -mabi=altivec, [VMX_SIMD_CFLAGS="-maltivec -mabi=altivec"], [AX_CHECK_COMPILER_FLAGS(-fvec, [VMX_SIMD_CFLAGS="-fvec"], [AC_MSG_ERROR([Need a version of gcc with -maltivec])])])]) elif test "${ax_cv_c_compiler_vendor}" = "ibm"; then AX_CHECK_COMPILER_FLAGS(-qenablevmx, [VMX_SIMD_CFLAGS="$VMX_SIMD_CFLAGS -qenablevmx"],[]) AX_CHECK_COMPILER_FLAGS(-qaltivec, [VMX_SIMD_CFLAGS="$VMX_SIMD_CFLAGS -qaltivec"],[]) else AX_CHECK_COMPILER_FLAGS(-faltivec, [VMX_SIMD_CFLAGS="-faltivec"],[]) fi else VMX_SIMD_CFLAGS="$SIMD_CFLAGS" fi if test "$enable_vmx" = "check"; then sre_save_cflags="$CFLAGS" CFLAGS="$CFLAGS $VMX_SIMD_CFLAGS" AC_MSG_CHECKING([if platform can run Altivec/VMX instructions]) AC_RUN_IFELSE([AC_LANG_PROGRAM( [[#include ]], [[vector unsigned char zerov; vector unsigned char onev; zerov = vec_splat_u8(0); onev = vec_splat_u8(1); onev = vec_adds(onev, zerov); ]])], [AC_MSG_RESULT([yes]) enable_vmx=yes], [AC_MSG_RESULT([no]) if test "${ax_cv_c_compiler_vendor}" = "ibm"; then echo "******************************************************" echo "* You seem to have the IBM C compiler. If your *" echo "* processor supports vector instructions it is *" echo "* possible specifying an architecture would enable *" echo "* vector support, i.e. *" echo "* *" echo "* --with-xlc-arch=XXX *" echo "* *" echo "* where XXX is pwr6, auto or whatever kind of CPU *" echo "* you have. *" echo "******************************************************" fi ]) CFLAGS="$sre_save_cflags" fi if test "$enable_vmx" = "yes"; then SIMD_CFLAGS="$VMX_SIMD_CFLAGS" AC_DEFINE(HAVE_VMX,1,[Support Altivec/VMX vector instructions]) fi fi AC_SUBST(SIMD_CFLAGS) # Define HAVE_GZIP if gzip is in $PATH (or if HAVE_GZIP is already set) AC_PATH_PROG(HAVE_GZIP, "gzip", "no") if test "${HAVE_GZIP}" = "no"; then AC_MSG_WARN([gzip not found]) else AC_DEFINE(HAVE_GZIP) fi # 5. Checks for libraries. LIBGSL= AS_IF([test "x$with_gsl" != xno], [AC_CHECK_LIB([gsl], [gsl_expm1], [AC_SUBST([LIBGSL], ["-lgsl -lgslcblas"]) AC_DEFINE([HAVE_LIBGSL], [1], [Define if you have libgsl]) ], [if test "x$with_gsl" != xcheck; then AC_MSG_FAILURE( [--with-gsl was given, but GSL library was not found]) fi ], [-lgslcblas] )]) # 6. Checks for header files. # Defines preprocessor symbols like HAVE_UNISTD_H AC_CHECK_HEADERS([\ endian.h \ inttypes.h \ stdint.h \ unistd.h \ sys/types.h \ strings.h \ ]) # Check for sysctl.h separately. On OpenBSD, it requires # and autoconf needs special logic to deal w. this as # follows. AC_CHECK_HEADERS([sys/param.h]) AC_CHECK_HEADERS([sys/sysctl.h], [], [], [[#ifdef HAVE_SYS_PARAM_H #include #endif ]]) # Vector-specific headers. # Separated, because we may want to implement # other vector languages besides SSE # For SSE: # xmmintrin.h = SSE # emmintrin.h = SSE2 # pmmintrin.h = SSE3 AC_CHECK_HEADERS([\ emmintrin.h\ pmmintrin.h\ xmmintrin.h ]) # altivec.h requires the simd cflags # For reasons I don't understand, this needs to come after any other CHECK_HEADERS(). if test "$enable_vmx" = "yes"; then sre_save_CFLAGS="$CFLAGS" sre_save_CPPFLAGS="$CPPFLAGS" CFLAGS="$CFLAGS $SIMD_CFLAGS" CPPFLAGS="$CPPFLAGS $SIMD_CFLAGS" AC_CHECK_HEADERS([altivec.h]) CFLAGS="$sre_save_CFLAGS" CPPFLAGS="$sre_save_CPPFLAGS" fi # 7. Checks for types. # - Define WORDS_BIGENDIAN on bigendian platforms. # - Make sure we have C99 exact-size integer types; # ssi uses 16, 32, and 64-bit ints, and we # use 8-bit unsigned chars for digitized sequence. # - Make sure we have off_t. # AC_C_BIGENDIAN AC_TYPE_INT8_T AC_TYPE_INT16_T AC_TYPE_INT32_T AC_TYPE_INT64_T AC_TYPE_UINT8_T AC_TYPE_UINT16_T AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_TYPE_OFF_T # 8. Checks for structures - none ################################################################ # 10. Checks for library functions: define HAVE_FOO ################################################################ AC_CHECK_FUNCS(mkstemp) AC_CHECK_FUNCS(popen) AC_CHECK_FUNCS(putenv) AC_CHECK_FUNCS(strcasecmp) AC_CHECK_FUNCS(times) AC_CHECK_FUNCS(getpid) AC_CHECK_FUNCS(sysctl) AC_CHECK_FUNCS(sysconf) AC_CHECK_FUNCS(getcwd) AC_CHECK_FUNCS(chmod) AC_CHECK_FUNCS(stat) AC_CHECK_FUNCS(fstat) AC_FUNC_FSEEKO # 11. Checks for system services AC_SYS_LARGEFILE # 12. Write out esl_config.h header and the Makefiles AC_CONFIG_HEADERS([esl_config.h]) AC_CONFIG_FILES([miniapps/Makefile]) AC_CONFIG_FILES([testsuite/Makefile]) AC_CONFIG_FILES([Makefile]) if test -e "LICENSE.sh.in"; then AC_CONFIG_FILES(LICENSE.sh) fi AC_CONFIG_FILES([documentation/Makefile]) # 13. voila! AC_OUTPUT echo " Easel configuration: compiler: ${CC} ${CFLAGS} ${SIMD_CFLAGS} ${PTHREAD_CFLAGS} ${PIC_FLAGS} host: $host libraries: ${LIBS} ${LIBGSL} ${PTHREAD_LIBS} " hmmer-3.1b2/easel/esl_random.tex0000664361611702660230000001252512473612607016236 0ustar wheelerteddyThe \eslmod{random} module contains routines for generating uniformly distributed pseudorandom numbers and sampling random deviates from distributions. The heart of the module is the \ccode{esl\_random()} pseudorandom number generator. The \ccode{esl\_random()} random number generator is portable, reentrant, and threadsafe. It gives reproducible results on all platforms. The default \ccode{esl\_random()} generator implements the Mersenne Twister algorithm MT19937 \citep{Matsumoto98}. MT19937 has strong properties, including a period of $2^{19937}-1$ and equidistribution over $2^{32}$ values. The default Mersenne Twister should be suitable for all but a few speed-critical applications. Alternatively, a simple and classic linear congruential generator (LCG) can be chosen \citep{Knu-81a}. The LCG is much faster to initialize (about 20x) and somewhat faster to generate samples (about 25\%), while still generating pseudorandom numbers suitable for most applications. Because of its initialization speed, the LCG is advantageous when a small number of reasonably random samples is needed in a speed-critical application. However, it has a relatively short period ($2^32$), making it entirely unsuitable for large simulations. Bit streams from \ccode{esl\_random()}'s two generators were tested against a National Institute of Standards and Technology statistical benchmark for random number generators \citep{NIST08}. The default Mersenne Twister passes the benchmark suite as expected \citep{Matsumoto98}. The fast LCG passes most but not all of the NIST tests. \ccode{esl\_random()} returns a double-precision floating point sample on the interval $0.0 \leq x < 1$. Table~\ref{tbl:random_api} lists the functions in the \eslmod{random} API. The module implements one object, \ccode{ESL\_RANDOMNESS}, which contains state information for the random number generator. This makes random number generation reentrant and threadsafe. You can have more than one active generator and they will not interfere with each other. The object is meant to be opaque; you should not need to use its contents. % Table generated by autodoc -t esl_random.c (so don't edit here, edit esl_random.c:) \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \apisubhead{The \ccode{ESL\_RANDOMNESS} object.}\\ \hyperlink{func:esl_randomness_Create()}{\ccode{esl\_randomness\_Create()}} & Create an RNG with a given seed.\\ \hyperlink{func:esl_randomness_CreateFast()}{\ccode{esl\_randomness\_CreateFast()}}& Create a fast RNG with a given seed.\\ \hyperlink{func:esl_randomness_Destroy()}{\ccode{esl\_randomness\_Destroy()}} & Free an RNG. \\ \hyperlink{func:esl_randomness_Init()}{\ccode{esl\_randomness\_Init()}} & Reinitialize an RNG. \\ \hyperlink{func:esl_randomness_GetSeed()}{\ccode{esl\_randomness\_GetSeed()}} & Returns the value of RNG's seed.\\ \apisubhead{The generator, \ccode{esl\_random()}}\\ \hyperlink{func:esl_random()}{\ccode{esl\_random()}} & Generate a uniform random deviate $0.0 <= x < 1.0$. \\ \apisubhead{Other fundamental sampling (including Gaussian, gamma)}\\ \hyperlink{func:esl_rnd_UniformPositive()}{\ccode{esl\_rnd\_UniformPositive()}} & Generate a uniform positive random deviate $0 < x < 1$.\\ \hyperlink{func:esl_rnd_Gaussian()}{\ccode{esl\_rnd\_Gaussian()}} & Generate a Gaussian-distributed sample.\\ \hyperlink{func:esl_rnd_Gamma()}{\ccode{esl\_rnd\_Gamma()}} & Returns a random deviate from a Gamma(a, 1) distribution.\\ \apisubhead{Multinomial sampling from discrete probability n-vectors}\\ \hyperlink{func:esl_rnd_DChoose()}{\ccode{esl\_rnd\_DChoose()}} & Return random choice from discrete multinomial distribution. \\ \hline \end{tabular} } \end{center} \caption{The \eslmod{random} API.} \label{tbl:random_api} \end{table} \subsection{Example of using random} Figure~\ref{fig:random_example} shows a program that initializes the random number generator with a seed you provide on the command line, then samples 10 random numbers using \ccode{esl\_random()}. \begin{figure} \input{cexcerpts/random_example} \caption{An example of using the random number generator.} \label{fig:random_example} \end{figure} When a \ccode{ESL\_RANDOMNESS} object is created with \ccode{esl\_randomness\_Create()}, it needs to be given a \emph{seed}, an integer $\geq 0$, which specifies the initial state of the generator. After a generator is seeded, it is typically never seeded again. A series of \ccode{esl\_random()} calls generates a pseudorandom number sequence from that starting point. If you create two \ccode{ESL\_RANDOMNESS} objects seeded identically, they are guaranteed to generate the same random number sequence on all platforms. This makes it possible to reproduce stochastic simulations. Thus, if you run the example multiple times, you get the same ten numbers, because the generator is always seeded with 42. Often one wants different runs to generate different random number sequences, which creates a chicken and the egg problem: how can we select a pseudorandom seed for the pseudorandom number generator? Calling \ccode{esl\_randomness\_Create(0)} (i.e., a seed argument of 0) causes Easel to select an arbitrary seed. The arbitrary seed is constructed by a combination of the current time and (if available) the process id. Two different \ccode{ESL\_RANDOMNESS} objects created this way should (but are not guaranteed to) produce different pseudorandom number sequences. hmmer-3.1b2/easel/esl_alphabet.c0000664361611702660230000024550612473612605016165 0ustar wheelerteddy/* Implements the standard digitized alphabets for biosequences. * * 1. ESL_ALPHABET object for digital alphabets. * 2. Digitized sequences (ESL_DSQ *). * 3. Other routines in the API. * 4. Unit tests. * 5. Test driver. * 6. Examples. * 7. Copyright notice and license. */ #include "esl_config.h" #include #include #include #include #ifdef HAVE_STRINGS_H #include /* POSIX strcasecmp() */ #endif #include "easel.h" #include "esl_alphabet.h" /***************************************************************** * 1. The ESL_ALPHABET object *****************************************************************/ static ESL_ALPHABET *create_rna(void); static ESL_ALPHABET *create_dna(void); static ESL_ALPHABET *create_amino(void); static ESL_ALPHABET *create_coins(void); static ESL_ALPHABET *create_dice(void); static int set_complementarity(ESL_ALPHABET *a); /* Function: esl_alphabet_Create() * Synopsis: Create alphabet of a standard type. * * Purpose: Creates one of the three standard bio alphabets: * , , or , and returns * a pointer to it. * * Args: type - , , or . * * Returns: pointer to the new alphabet. * * Throws: if any allocation or initialization fails. */ ESL_ALPHABET * esl_alphabet_Create(int type) { int status; ESL_ALPHABET *a; switch(type) { case eslRNA: a = create_rna(); break; case eslDNA: a = create_dna(); break; case eslAMINO: a = create_amino(); break; case eslCOINS: a = create_coins(); break; case eslDICE: a = create_dice(); break; default: ESL_XEXCEPTION(eslEINVAL, "bad alphabet type: unrecognized"); } return a; ERROR: return NULL; } /* Function: esl_alphabet_CreateCustom() * Synopsis: Create a custom alphabet. * * Purpose: Creates a customized biosequence alphabet, * and returns a ptr to it. The alphabet type is set * to . * * is the internal alphabet string; * is the size of the base alphabet; * is the total size of the alphabet string. * * In the alphabet string, residues <0..K-1> are the base alphabet; * residue is the canonical gap (indel) symbol; * residues are additional degeneracy symbols (possibly 0 of them); * residue is an "any" symbol (such as N or X); * residue is a "nonresidue" symbol (such as *); * and residue is a "missing data" gap symbol. * * The two gap symbols, the nonresidue, and the "any" * symbol are mandatory even for nonstandard alphabets, so * $\geq$ . * * Args: alphabet - internal alphabet; example "ACGT-RYMKSWHBVDN*~" * K - base size; example 4 * Kp - total size, including gap, degeneracies; example 18 * * Returns: pointer to new structure. * * Throws: if any allocation or initialization fails. */ ESL_ALPHABET * esl_alphabet_CreateCustom(const char *alphabet, int K, int Kp) { ESL_ALPHABET *a; int c,x,y; int status; /* Argument checks. */ if (strlen(alphabet) != Kp) ESL_XEXCEPTION(eslEINVAL, "alphabet length != Kp"); if (Kp < K+4) ESL_XEXCEPTION(eslEINVAL, "Kp too small in alphabet"); /* Allocation/init, level 1. */ ESL_ALLOC(a, sizeof(ESL_ALPHABET)); a->sym = NULL; a->degen = NULL; a->ndegen = NULL; a->complement = NULL; /* Allocation/init, level 2. */ ESL_ALLOC(a->sym, sizeof(char) * (Kp+1)); ESL_ALLOC(a->degen, sizeof(char *) * Kp); ESL_ALLOC(a->ndegen, sizeof(int) * Kp); a->degen[0] = NULL; /* Allocation/init, level 3. */ ESL_ALLOC(a->degen[0], sizeof(char) * (Kp*K)); for (x = 1; x < Kp; x++) a->degen[x] = a->degen[0]+(K*x); /* Initialize the internal alphabet: */ a->type = eslNONSTANDARD; a->K = K; a->Kp = Kp; strcpy(a->sym, alphabet); /* Initialize the input map, mapping ASCII seq chars to digital codes, * and eslDSQ_ILLEGAL for everything else. */ for (c = 0; c < 128; c++) a->inmap[c] = eslDSQ_ILLEGAL; for (x = 0; x < a->Kp; x++) a->inmap[(int) a->sym[x]] = x; /* Initialize the degeneracy map: * Base alphabet (first K syms) are automatically * mapped uniquely; (Kp-3) is assumed to be * the "any" character; other degen chars (K+1..Kp-4) are * unset; gap, nonresidue, missing character are unmapped (ndegen=0) */ for (x = 0; x < a->Kp; x++) /* clear everything */ { a->ndegen[x] = 0; for (y = 0; y < a->K; y++) a->degen[x][y] = 0; } for (x = 0; x < a->K; x++) /* base alphabet */ { a->ndegen[x] = 1; a->degen[x][x] = 1; } /* "any" character */ a->ndegen[Kp-3] = K; for (x = 0; x < a->K; x++) a->degen[Kp-3][x] = 1; return a; ERROR: esl_alphabet_Destroy(a); return NULL; } /* create_rna(): * Creates a standard RNA alphabet. */ static ESL_ALPHABET * create_rna(void) { ESL_ALPHABET *a = NULL; int status; /* Create the fundamental alphabet */ if ((a = esl_alphabet_CreateCustom("ACGU-RYMKSWHBVDN*~", 4, 18)) == NULL) return NULL; a->type = eslRNA; /* Add desired synonyms in the input map. */ esl_alphabet_SetEquiv(a, 'T', 'U'); /* read T as a U */ esl_alphabet_SetEquiv(a, 'X', 'N'); /* read X as an N (many seq maskers use X) */ esl_alphabet_SetEquiv(a, '_', '-'); /* allow _ as a gap too */ esl_alphabet_SetEquiv(a, '.', '-'); /* allow . as a gap too */ esl_alphabet_SetCaseInsensitive(a); /* allow lower case input */ /* Define degenerate symbols. */ esl_alphabet_SetDegeneracy(a, 'R', "AG"); esl_alphabet_SetDegeneracy(a, 'Y', "CU"); esl_alphabet_SetDegeneracy(a, 'M', "AC"); esl_alphabet_SetDegeneracy(a, 'K', "GU"); esl_alphabet_SetDegeneracy(a, 'S', "CG"); esl_alphabet_SetDegeneracy(a, 'W', "AU"); esl_alphabet_SetDegeneracy(a, 'H', "ACU"); esl_alphabet_SetDegeneracy(a, 'B', "CGU"); esl_alphabet_SetDegeneracy(a, 'V', "ACG"); esl_alphabet_SetDegeneracy(a, 'D', "AGU"); if ( (status = set_complementarity(a)) != eslOK) goto ERROR; return a; ERROR: esl_alphabet_Destroy(a); return NULL; } /* create_dna(): * creates and returns a standard DNA alphabet. */ static ESL_ALPHABET * create_dna(void) { ESL_ALPHABET *a = NULL; int status; /* Create the fundamental alphabet. */ if ((a = esl_alphabet_CreateCustom("ACGT-RYMKSWHBVDN*~", 4, 18)) == NULL) return NULL; a->type = eslDNA; /* Add desired synonyms in the input map. */ esl_alphabet_SetEquiv(a, 'U', 'T'); /* read U as a T */ esl_alphabet_SetEquiv(a, 'X', 'N'); /* read X as an N (many seq maskers use X) */ esl_alphabet_SetEquiv(a, '_', '-'); /* allow _ as a gap too */ esl_alphabet_SetEquiv(a, '.', '-'); /* allow . as a gap too */ esl_alphabet_SetCaseInsensitive(a); /* allow lower case input */ /* Define IUBMB degenerate symbols other than the N. */ esl_alphabet_SetDegeneracy(a, 'R', "AG"); esl_alphabet_SetDegeneracy(a, 'Y', "CT"); esl_alphabet_SetDegeneracy(a, 'M', "AC"); esl_alphabet_SetDegeneracy(a, 'K', "GT"); esl_alphabet_SetDegeneracy(a, 'S', "CG"); esl_alphabet_SetDegeneracy(a, 'W', "AT"); esl_alphabet_SetDegeneracy(a, 'H', "ACT"); esl_alphabet_SetDegeneracy(a, 'B', "CGT"); esl_alphabet_SetDegeneracy(a, 'V', "ACG"); esl_alphabet_SetDegeneracy(a, 'D', "AGT"); if ( (status = set_complementarity(a)) != eslOK) goto ERROR; return a; ERROR: esl_alphabet_Destroy(a); return NULL; } /* create_amino(): * Creates a new standard amino acid alphabet. */ static ESL_ALPHABET * create_amino(void) { ESL_ALPHABET *a = NULL; /* Create the internal alphabet */ if ((a = esl_alphabet_CreateCustom("ACDEFGHIKLMNPQRSTVWY-BJZOUX*~", 20, 29)) == NULL) return NULL; a->type = eslAMINO; /* Add desired synonyms in the input map. */ esl_alphabet_SetEquiv(a, '_', '-'); /* allow _ as a gap too */ esl_alphabet_SetEquiv(a, '.', '-'); /* allow . as a gap too */ esl_alphabet_SetCaseInsensitive(a); /* allow lower case input */ /* Define IUPAC degenerate symbols other than the X. */ esl_alphabet_SetDegeneracy(a, 'B', "ND"); esl_alphabet_SetDegeneracy(a, 'J', "IL"); esl_alphabet_SetDegeneracy(a, 'Z', "QE"); /* Define unusual residues as one-to-one degeneracies. */ esl_alphabet_SetDegeneracy(a, 'U', "C"); /* selenocysteine is scored as cysteine */ esl_alphabet_SetDegeneracy(a, 'O', "K"); /* pyrrolysine is scored as lysine */ return a; } /* create_coins(): * Creates a toy alphabet for coin examples */ static ESL_ALPHABET * create_coins(void) { ESL_ALPHABET *a = NULL; /* Create the internal alphabet */ if ((a = esl_alphabet_CreateCustom("HT-X*~", 2, 6)) == NULL) return NULL; a->type = eslCOINS; /* Add desired synonyms in the input map. */ esl_alphabet_SetEquiv(a, '_', '-'); /* allow _ as a gap too */ esl_alphabet_SetEquiv(a, '.', '-'); /* allow . as a gap too */ esl_alphabet_SetCaseInsensitive(a); /* allow lower case input */ /* There are no degeneracies in the coin alphabet. */ return a; } /* create_dice(): * Creates a toy alphabet for dice examples */ static ESL_ALPHABET * create_dice(void) { ESL_ALPHABET *a = NULL; /* Create the internal alphabet */ if ((a = esl_alphabet_CreateCustom("123456-X*~", 6, 10)) == NULL) return NULL; a->type = eslCOINS; /* Add desired synonyms in the input map. */ esl_alphabet_SetEquiv(a, '_', '-'); /* allow _ as a gap too */ esl_alphabet_SetEquiv(a, '.', '-'); /* allow . as a gap too */ esl_alphabet_SetCaseInsensitive(a); /* allow lower case input */ /* There are no degeneracies in the dice alphabet. */ return a; } /* set_complementarity() * Builds the "complement" lookup table for DNA, RNA alphabets. * * Throws if the alphabet isn't or . */ static int set_complementarity(ESL_ALPHABET *a) { int status; if (a->type != eslRNA && a->type != eslDNA) ESL_EXCEPTION(eslEINVAL, "alphabet isn't nucleic: no complementarity to set"); ESL_ALLOC(a->complement, sizeof(ESL_DSQ) * a->Kp); a->complement[0] = 3; /* A->T */ a->complement[1] = 2; /* C->G */ a->complement[2] = 1; /* G->C */ a->complement[3] = 0; /* T->A */ a->complement[4] = 4; /* - - */ a->complement[5] = 6; /* R->Y */ a->complement[6] = 5; /* Y->R */ a->complement[7] = 8; /* M->K */ a->complement[8] = 7; /* K->M */ a->complement[9] = 9; /* S S */ a->complement[10]= 10; /* W W */ a->complement[11]= 14; /* H->D */ a->complement[12]= 13; /* B->V */ a->complement[13]= 12; /* V->B */ a->complement[14]= 11; /* D->H */ a->complement[15]= 15; /* N N */ a->complement[16]= 16; /* ~ ~ */ return eslOK; ERROR: return status; } /* Function: esl_alphabet_SetEquiv() * Synopsis: Define an equivalent symbol. * * Purpose: Maps an additional input alphabetic symbol to * an internal alphabet symbol ; for example, * we might map T to U for an RNA alphabet, so that we * allow for reading input DNA sequences. * * Args: sym - symbol to allow in the input alphabet; 'T' for example * c - symbol to map to in the internal alphabet; 'U' for example * * Returns: on success. * * Throws: if is not in the internal alphabet, or if is. */ int esl_alphabet_SetEquiv(ESL_ALPHABET *a, char sym, char c) { char *sp = NULL; ESL_DSQ x; /* Contract checks */ if ((sp = strchr(a->sym, sym)) != NULL) ESL_EXCEPTION(eslEINVAL, "symbol %c is already in internal alphabet, can't equivalence it", sym); if ((sp = strchr(a->sym, c)) == NULL) ESL_EXCEPTION(eslEINVAL, "char %c not in the alphabet, can't map to it", c); x = sp - a->sym; a->inmap[(int) sym] = x; return eslOK; } /* Function: esl_alphabet_SetCaseInsensitive() * Synopsis: Make an alphabet's input map case-insensitive. * * Purpose: Given a custom alphabet , with all equivalences set, * make the input map case-insensitive: for every * letter that is mapped in either lower or upper * case, map the other case to the same internal * residue. * * For the standard alphabets, this is done automatically. * * Args: a - alphabet to make case-insensitive. * * Returns: on success. * * Throws: if any lower/uppercase symbol pairs * are already both mapped to different symbols. */ int esl_alphabet_SetCaseInsensitive(ESL_ALPHABET *a) { int lc, uc; for (lc = 'a'; lc <= 'z'; lc++) { uc = toupper(lc); if (esl_abc_CIsValid(a, lc) && ! esl_abc_CIsValid(a, uc)) a->inmap[uc] = a->inmap[lc]; else if (esl_abc_CIsValid(a, uc) && ! esl_abc_CIsValid(a, lc)) a->inmap[lc] = a->inmap[uc]; else if (esl_abc_CIsValid(a, lc) && esl_abc_CIsValid(a, uc) && a->inmap[uc] != a->inmap[lc]) ESL_EXCEPTION(eslECORRUPT, "symbols %c and %c map differently already (%c vs. %c)", lc, uc, a->inmap[lc], a->inmap[uc]); } return eslOK; } /* Function: esl_alphabet_SetDegeneracy() * Synopsis: Define degenerate symbol in custom alphabet. * * Purpose: Given an alphabet under construction, * define the degenerate character to mean * any of the characters in the string . * * must exist in the digital alphabet, as * one of the optional degenerate residues (..). * All the characters in the string must exist * in the canonical alphabet (<0>..). * * You may not redefine the mandatory all-degenerate character * (typically or ; in the digital alphabet). * It is defined automatically in all alphabets. * * Args: a - an alphabet under construction. * c - degenerate character code; example: 'R' * ds - string of base characters for c; example: "AG" * * Returns: on success. * * Throws: if or arguments aren't valid. */ int esl_alphabet_SetDegeneracy(ESL_ALPHABET *a, char c, char *ds) { char *sp; ESL_DSQ x,y; if ((sp = strchr(a->sym, c)) == NULL) ESL_EXCEPTION(eslEINVAL, "no such degenerate character"); x = sp - a->sym; /* A degenerate character must have code K+1..Kp-4. * Kp-3, the all-degenerate character, is automatically * created, and can't be remapped. */ if (x == a->Kp-3) ESL_EXCEPTION(eslEINVAL, "can't redefine all-degenerate char %c", c); if (x < a->K+1 || x >= a->Kp-2) ESL_EXCEPTION(eslEINVAL, "char %c isn't in expected position in alphabet", c); while (*ds != '\0') { if ((sp = strchr(a->sym, *ds)) == NULL) ESL_EXCEPTION(eslEINVAL, "no such base character"); y = sp - a->sym; if (! esl_abc_XIsCanonical(a, y)) ESL_EXCEPTION(eslEINVAL, "can't map degeneracy to noncanonical character"); a->degen[x][y] = 1; a->ndegen[x]++; ds++; } return eslOK; } /* Function: esl_alphabet_SetIgnored() * Synopsis: Define a set of characters to be ignored in input. * * Purpose: Given an alphabet (either standard or custom), define * all the characters in string to be * unmapped: valid, but ignored when converting input text. * * By default, the standard alphabets do not define any * ignored characters. * * The most common ignored characters would be space, tab, * and digits, to skip silently over whitespace and * sequence coordinates when parsing loosely-defined * sequence file formats. * * Args: a - alphabet to modify * ignoredchars - string listing characters to ignore; i.e. " \t" * * Returns: on success. */ int esl_alphabet_SetIgnored(ESL_ALPHABET *a, const char *ignoredchars) { int i; for (i = 0; ignoredchars[i] != '\0'; i++) a->inmap[(int)ignoredchars[i]] = eslDSQ_IGNORED; return eslOK; } /* Function: esl_alphabet_Sizeof() * Synopsis: Returns size of an alphabet object, in bytes. * * Purpose: Returns the size of alphabet object, in bytes. */ size_t esl_alphabet_Sizeof(ESL_ALPHABET *a) { size_t n = 0; n += sizeof(ESL_ALPHABET); n += sizeof(char) * a->Kp; /* a->sym */ n += sizeof(char *) * a->Kp; /* a->degen */ n += sizeof(char) * (a->Kp * a->K); /* a->degen[][] */ n += sizeof(int) * a->Kp; /* a->ndegen */ if (a->complement) n += sizeof(ESL_DSQ) * a->Kp; /* a->complement */ return n; } /* Function: esl_alphabet_Destroy() * Synopsis: Frees an alphabet object. * * Purpose: Free's an structure. * * Args: a - the to free. * * Returns: (void). */ void esl_alphabet_Destroy(ESL_ALPHABET *a) { if (a == NULL) return; if (a->sym != NULL) free(a->sym); if (a->ndegen != NULL) free(a->ndegen); if (a->degen != NULL) { if (a->degen[0] != NULL) free(a->degen[0]); free(a->degen); } if (a->complement != NULL) free(a->complement); free(a); } /*--------------- end, ESL_ALPHABET object ----------------------*/ /***************************************************************** * 2. Digitized sequences (ESL_DSQ *) *****************************************************************/ /* Design note: SRE, Mon Sep 18 09:11:41 2006 * * An ESL_DSQ is considered to a special string type, equivalent to * , and is not considered to be an Easel "object". Thus it * does not have a standard object API. Rather, the caller deals with * an ESL_DSQ directly: allocate for <(L+2)*sizeof(ESL_DSQ)> to leave * room for sentinels at <0> and . * * Additionally, an ESL_DSQ is considered to be "trusted" * data: we're 'guaranteed' that anything in an ESL_DSQ is a valid * symbol, so we don't need to error-check. Anything else is a programming * error. */ /* Function: esl_abc_CreateDsq() * Synopsis: Digitizes a sequence into new space. * * Purpose: Given an alphabet and an ASCII sequence , * digitize the sequence into newly allocated space, and * return a pointer to that space in . * * Args: a - internal alphabet * seq - text sequence to be digitized * ret_dsq - RETURN: the new digital sequence * * Returns: on success, and contains the digitized * sequence; caller is responsible for free'ing this * memory. Returns if contains * one or more characters that are not in the input map of * alphabet . If this happens, is still valid upon * return: invalid characters are replaced by full ambiguities * (typically X or N). * * Throws: on allocation failure. * * Xref: STL11/63 */ int esl_abc_CreateDsq(const ESL_ALPHABET *a, const char *seq, ESL_DSQ **ret_dsq) { ESL_DSQ *dsq = NULL; int status; int64_t L; L = strlen(seq); ESL_ALLOC(dsq, sizeof(ESL_DSQ) * (L+2)); status = esl_abc_Digitize(a, seq, dsq); if (ret_dsq != NULL) *ret_dsq = dsq; else free(dsq); return status; ERROR: if (dsq != NULL) free(dsq); if (ret_dsq != NULL) *ret_dsq = NULL; return status; } /* Function: esl_abc_Digitize() * Synopsis: Digitizes a sequence into existing space. * * Purpose: Given an alphabet and a nul-terminated ASCII sequence * , digitize the sequence and put it in . Caller * provides space in allocated for at least * residues, where is the length of . * * Args: a - internal alphabet * seq - text sequence to be digitized (\0-terminated) * dsq - RETURN: the new digital sequence (caller allocates, * at least <(L+2) * sizeof(ESL_DSQ)>). * * Returns: on success. * Returns if contains one or more characters * that are not recognized in the alphabet . (This is classed * as a normal error, because the may be untrusted user input.) * If this happens, the digital sequence is still valid upon * return; invalid ASCII characters are replaced by ambiguities * (X or N). */ int esl_abc_Digitize(const ESL_ALPHABET *a, const char *seq, ESL_DSQ *dsq) { int status; int64_t i; /* position in seq */ int64_t j; /* position in dsq */ ESL_DSQ x; status = eslOK; dsq[0] = eslDSQ_SENTINEL; for (i = 0, j = 1; seq[i] != '\0'; i++) { x = a->inmap[(int) seq[i]]; if (esl_abc_XIsValid(a, x)) dsq[j] = x; else if (x == eslDSQ_IGNORED) continue; else { status = eslEINVAL; dsq[j] = esl_abc_XGetUnknown(a); } j++; } dsq[j] = eslDSQ_SENTINEL; return status; } /* Function: esl_abc_Textize() * Synopsis: Convert digital sequence to text. * * Purpose: Make an ASCII sequence by converting a digital * sequence of length back to text, according to * the digital alphabet . * * Caller provides space in allocated for at least * bytes (<(L+1) * sizeof(char)>). * * Args: a - internal alphabet * dsq - digital sequence to be converted (1..L) * L - length of dsq * seq - RETURN: the new text sequence (caller allocated * space, at least <(L+1) * sizeof(char)>). * * Returns: on success. */ int esl_abc_Textize(const ESL_ALPHABET *a, const ESL_DSQ *dsq, int64_t L, char *seq) { int64_t i; for (i = 0; i < L; i++) seq[i] = a->sym[dsq[i+1]]; seq[i] = '\0'; return eslOK; } /* Function: esl_abc_TextizeN() * Synopsis: Convert subsequence from digital to text. * * Purpose: Similar in semantics to , this procedure takes * a window of residues in a digitized sequence * starting at the residue pointed to by , * converts them to ASCII text representation, and * copies them into the buffer . * * must be at least residues long; , if the * caller needs to NUL-terminate it. * * If a sentinel byte is encountered in the digitized * sequence before residues have been copied, is * NUL-terminated there. Otherwise, like , * will not be NUL-terminated. * * Note that because digital sequences are indexed <1..N>, * not <0..N-1>, the caller must be careful about * off-by-one errors in . For example, to copy from * the first residue of a digital sequence , you must * pass , not . The text in * on the other hand is a normal C string indexed <0..L-1>. * * Args: a - reference to an internal alphabet * dptr - ptr to starting residue in a digital sequence * L - number of residues to convert and copy * buf - text buffer to store the converted residues in * * Returns: on success. */ int esl_abc_TextizeN(const ESL_ALPHABET *a, const ESL_DSQ *dptr, int64_t L, char *buf) { int64_t i; for (i = 0; i < L; i++) { if (dptr[i] == eslDSQ_SENTINEL) { buf[i] = '\0'; return eslOK; } buf[i] = a->sym[dptr[i]]; } return eslOK; } /* Function: esl_abc_dsqcpy() * * Purpose: Given a digital sequence of length , * make a copy of it in . Caller provides * storage in for at least * residues. * * Returns: on success. */ int esl_abc_dsqcpy(const ESL_DSQ *dsq, int64_t L, ESL_DSQ *dcopy) { memcpy(dcopy, dsq, sizeof(ESL_DSQ) * (L+2)); return eslOK; } /* Function: esl_abc_dsqdup() * Synopsis: Duplicate a digital sequence. * * Purpose: Like , but for digitized sequences: * make a duplicate of and leave it in . * Caller can pass the string length if it's known, saving * some overhead; else pass <-1> and the length will be * determined for you. * * Tolerates being ; in which case, returns * with <*ret_dup> set to . * * Args: dsq - digital sequence to duplicate (w/ sentinels at 0,L+1) * L - length of dsq in residues, if known; -1 if unknown * ret_dup - RETURN: allocated duplicate of , which caller will * free. * * Returns: on success, and leaves a pointer in . * * Throws: on allocation failure. * * Xref: STL11/48 */ int esl_abc_dsqdup(const ESL_DSQ *dsq, int64_t L, ESL_DSQ **ret_dup) { int status; ESL_DSQ *new = NULL; if (ret_dup == NULL) return eslOK; /* no-op. */ *ret_dup = NULL; if (dsq == NULL) return eslOK; if (L < 0) L = esl_abc_dsqlen(dsq); ESL_ALLOC(new, sizeof(ESL_DSQ) * (L+2)); memcpy(new, dsq, sizeof(ESL_DSQ) * (L+2)); *ret_dup = new; return eslOK; ERROR: if (new != NULL) free(new); if (ret_dup != NULL) *ret_dup = NULL; return status; } /* Function: esl_abc_dsqcat() * Synopsis: Concatenate and map input chars to a digital sequence. * * Purpose: Append the contents of string or memory line of * length to a digital sequence, after digitizing * each input character in according to an Easel * . The destination sequence and its length * are passed by reference, <*dsq> and <*L>, so that * the sequence may be reallocated and the length updated * upon return. * * The input map may map characters to * or , but not to , * , or codes. is * special, and must be set to the code for the 'unknown' * residue (such as 'X' for proteins, 'N' for DNA) that * will be used to replace any invalid * characters. * * If <*dsq> is properly terminated digital sequence and * the caller doesn't know its length, <*L> may be passed * as -1. Providing the length when it's known saves an * call. If <*dsq> is unterminated, <*L> * is mandatory. Essentially the same goes for <*s>, which * may be a NUL-terminated string (pass if length unknown), * or a memory line ( is mandatory). * * <*dsq> may also be , in which case it is allocated * and initialized here. * * Caller should provide an that is expected to be * essentially all appendable to <*dsq> except for a small * number of chars that map to , like an * input sequence data line from a file, for example. We're * going to reallocate <*dsq> to size <*L+n>; if is an * entire large buffer or file, this reallocation will be * inefficient. * * Args: inmap - an Easel input map, inmap[0..127]; * inmap[0] is special, set to the 'unknown' character * to replace invalid input chars. * dsq - reference to the current digital seq to append to * (with sentinel bytes at 0,L+1); may be . * Upon return, this will probably have * been reallocated, and it will contain the original * with digitized and appended. * L - reference to the current length of in residues; * may be <-1> if unknown and if <*dsq> is a properly * terminated digital sequence. Upon return, is set to * the new length of , after is appended. * s - ASCII text sequence to append. May * contain ignored text characters (flagged with * in the input map of alphabet ). * n - Length of in characters, if known; or <-1> if * unknown and if is a NUL-terminated string. * * Returns: on success; <*dsq> contains the result of digitizing * and appending to the original <*dsq>; and <*L> contains * the new length of the result in residues. * * If any of the characters in are illegal in the * alphabet , these characters are digitized as * unknown residues (using ) and * concatenation/digitization proceeds to completion, but * the function returns . The caller might then * want to call on if it wants * to figure out where digitization goes awry and get a * more informative error report. This is a normal error, * because the string might be user input. * * Throws: on allocation or reallocation failure; * on coding error. * * Xref: SRE:STL11/48; SRE:J7/145. * * Note: This closely parallels a text mode version, . */ int esl_abc_dsqcat(const ESL_DSQ *inmap, ESL_DSQ **dsq, int64_t *L, const char *s, esl_pos_t n) { int status = eslOK; if (*L < 0) *L = ((*dsq) ? esl_abc_dsqlen(*dsq) : 0); if ( n < 0) n = ( (s) ? strlen(s) : 0); if (n == 0) { goto ERROR; } /* that'll return eslOK, leaving *dest untouched, and *ldest its length */ if (*dsq == NULL) { /* an entirely new dsq is allocated *and* initialized with left sentinel. */ ESL_ALLOC(*dsq, sizeof(ESL_DSQ) * (n+2)); (*dsq)[0] = eslDSQ_SENTINEL; } else /* else, existing dsq is just reallocated; leftmost sentinel already in place. */ ESL_REALLOC(*dsq, sizeof(ESL_DSQ) * (*L+n+2)); /* most we'll need */ return esl_abc_dsqcat_noalloc(inmap, *dsq, L, s, n); ERROR: return status; } /* Function: esl_abc_dsqcat_noalloc() * Synopsis: Version of esl_abc_dsqcat() that does no reallocation. * * Purpose: Same as , but with no reallocation of * . The pointer to the destination string is * passed by value not by reference, because it will not * be reallocated or moved. Caller has already allocated * at least <*L + n + 2> bytes in . <*L> and are * not optional; caller must know (and provide) the lengths * of both the old string and the new source. * * Note: This version was needed in selex format parsing, where * we need to prepend and append some number of gaps on * each new line of each block of input; allocating once * then adding the gaps and the sequence seemed most efficient. */ int esl_abc_dsqcat_noalloc(const ESL_DSQ *inmap, ESL_DSQ *dsq, int64_t *L, const char *s, esl_pos_t n) { int64_t xpos; esl_pos_t cpos; ESL_DSQ x; int status = eslOK; /* Watch these coords. Start in the 0..n-1 text string at 0; * start in the 1..L dsq at L+1, overwriting its terminal * sentinel byte. */ for (xpos = *L+1, cpos = 0; cpos < n; cpos++) { if (! isascii(s[cpos])) { dsq[xpos++] = inmap[0]; status = eslEINVAL; continue; } x = inmap[(int) s[cpos]]; if (x <= 127) dsq[xpos++] = x; else switch (x) { case eslDSQ_SENTINEL: ESL_EXCEPTION(eslEINCONCEIVABLE, "input char mapped to eslDSQ_SENTINEL"); break; case eslDSQ_ILLEGAL: dsq[xpos++] = inmap[0]; status = eslEINVAL; break; case eslDSQ_IGNORED: break; case eslDSQ_EOL: ESL_EXCEPTION(eslEINCONCEIVABLE, "input char mapped to eslDSQ_EOL"); break; case eslDSQ_EOD: ESL_EXCEPTION(eslEINCONCEIVABLE, "input char mapped to eslDSQ_EOD"); break; default: ESL_EXCEPTION(eslEINCONCEIVABLE, "bad inmap, no such ESL_DSQ code"); break; } } dsq[xpos] = eslDSQ_SENTINEL; *L = xpos-1; return status; } /* Function: esl_abc_dsqlen() * Synopsis: Returns the length of a digital sequence. * * Purpose: Returns the length of digitized sequence in * positions (including gaps, if any). The must be * properly terminated by a sentinel byte * (). */ int64_t esl_abc_dsqlen(const ESL_DSQ *dsq) { int64_t n = 0; while (dsq[n+1] != eslDSQ_SENTINEL) n++; return n; } /* Function: esl_abc_dsqrlen() * Synopsis: Returns the number of residues in a digital seq. * * Purpose: Returns the unaligned length of digitized sequence * , in residues, not counting any gaps or * missing data symbols. */ int64_t esl_abc_dsqrlen(const ESL_ALPHABET *abc, const ESL_DSQ *dsq) { int64_t n = 0; int64_t i; for (i = 1; dsq[i] != eslDSQ_SENTINEL; i++) if (esl_abc_XIsResidue(abc, dsq[i])) n++; return n; } /* Function: esl_abc_CDealign() * Synopsis: Dealigns a text string, using a reference digital aseq. * * Purpose: Dealigns in place by removing characters aligned to * gaps (or missing data symbols) in the reference digital * aligned sequence . Gaps and missing data symbols * in are defined by its digital alphabet . * * is typically going to be some kind of textual * annotation string (secondary structure, consensus, or * surface accessibility). * * Be supercareful of off-by-one errors here! The * is a digital sequence that is indexed <1..L>. The * annotation string is assumed to be <0..L-1> (a * normal C string), off by one with respect to . * In a sequence object, ss annotation is actually stored * <1..L> -- so if you're going to a * ss>, pass ss+1> as the argument . * * Returns: Returns on success; optionally returns the number * of characters in the dealigned in <*opt_rlen>. * * Throws: (no abnormal error conditions) */ int esl_abc_CDealign(const ESL_ALPHABET *abc, char *s, const ESL_DSQ *ref_ax, int64_t *opt_rlen) { int64_t apos; int64_t n = 0; if (s == NULL) return eslOK; for (n=0, apos=1; ref_ax[apos] != eslDSQ_SENTINEL; apos++) if (! esl_abc_XIsGap(abc, ref_ax[apos]) && ! esl_abc_XIsMissing(abc, ref_ax[apos]) ) s[n++] = s[apos-1]; /* apos-1 because we assume s was 0..alen-1, whereas ref_ax was 1..alen */ s[n] = '\0'; if (opt_rlen != NULL) *opt_rlen = n; return eslOK; } /* Function: esl_abc_XDealign() * Synopsis: Dealigns a digital string, using a reference digital aseq. * * Purpose: Dealigns in place by removing characters aligned to * gaps (or missing data) in the reference digital aligned * sequence . Gaps and missing data symbols in * are defined by its digital alphabet . * * Returns: Returns on success; optionally returns the number * of characters in the dealigned in <*opt_rlen>. * * Throws: (no abnormal error conditions) */ int esl_abc_XDealign(const ESL_ALPHABET *abc, ESL_DSQ *x, const ESL_DSQ *ref_ax, int64_t *opt_rlen) { int64_t apos; int64_t n = 0; if (x == NULL) return eslOK; x[0] = eslDSQ_SENTINEL; for (n=1, apos=1; ref_ax[apos] != eslDSQ_SENTINEL; apos++) if (! esl_abc_XIsGap(abc, ref_ax[apos]) && ! esl_abc_XIsMissing(abc, ref_ax[apos]) ) x[n++] = x[apos]; x[n] = eslDSQ_SENTINEL; if (opt_rlen != NULL) *opt_rlen = n-1; return eslOK; } /* Function: esl_abc_ConvertDegen2X() * Synopsis: Convert all degenerate residues to X or N. * * Purpose: Convert all the degenerate residue codes in digital * sequence to the code for the maximally degenerate * "unknown residue" code, as specified in digital alphabet * . (For example, X for protein, N for nucleic acid.) * * This comes in handy when you're dealing with some piece * of software that can't deal with standard residue codes, * and you want to massage your sequences into a form that * can be accepted. For example, WU-BLAST can't deal with O * (pyrrolysine) residues, but UniProt has O codes. * * Returns: on success. * * Throws: (no abnormal error conditions) */ int esl_abc_ConvertDegen2X(const ESL_ALPHABET *abc, ESL_DSQ *dsq) { int64_t i; for (i = 1; dsq[i] != eslDSQ_SENTINEL; i++) if (esl_abc_XIsDegenerate(abc, dsq[i])) dsq[i] = esl_abc_XGetUnknown(abc); return eslOK; } /*-------------- end, digital sequences (ESL_DSQ) ---------------*/ /***************************************************************** * 3. Other routines in the API. *****************************************************************/ /* Function: esl_abc_GuessAlphabet() * Synopsis: Guess alphabet type from residue composition. * * Purpose: Guess the alphabet type from a residue composition. * The input array contains observed counts of * the letters A..Z, case-insensitive. * * The composition must contain more than 10 residues. * * If it contains $\geq$98\% ACGTN and all four of the * residues ACGT occur, call it . (Analogously for * ACGUN, ACGU: call .) * * If it contains any amino-specific residue (EFIJLPQZ), * call it . * * If it consists of $\geq$98\% canonical aa residues or X, * and at least 15 of the different 20 aa residues occur, * and the number of residues that are canonical aa/degenerate * nucleic (DHKMRSVWY) is greater than the number of canonicals * for both amino and nucleic (ACG); then call it . * * We aim to be very conservative, essentially never making * a false call; we err towards calling if * unsure. Our test is to classify every individual * sequence in NCBI NR and NT (or equiv large messy * sequence database) with no false positives, only correct * calls or . * * Returns: on success, and <*ret_type> is set to * , , or . * * Returns if unable to determine the * alphabet type; in this case, <*ret_type> is set to * . * * Notes: As of Jan 2011: * nr 10M seqs : 6999 unknown, 0 misclassified * Pfam full 13M seqs : 7930 unknown, 0 misclassified * Pfam seed 500K seqs: 366 unknown, 0 misclassified * trembl 14M seqs : 7748 unknown, 0 misclassified * * nt 10M seqs : 35620 unknown, 0 misclassified * Rfam full 3M seqs : 8146 unknown, 0 misclassified * Rfam seed 27K seqs : 49 unknown, 0 misclassified * * xref: esl_alphabet_example3 collects per-sequence classification * 2012/0201-easel-guess-alphabet * J1/62; 2007-0517-easel-guess-alphabet */ int esl_abc_GuessAlphabet(const int64_t *ct, int *ret_type) { int type = eslUNKNOWN; char aaonly[] = "EFIJLOPQZ"; char allcanon[] = "ACG"; char aacanon[] = "DHKMRSVWY"; int64_t n1, n2, n3, nn, nt, nu, nx, n; /* n's are counts */ int x1, x2, x3, xn, xt, xu; /* x's are how many different residues are represented */ int i, x; x1 = x2 = x3 = xn = xt = xu = 0; n1 = n2 = n3 = n = 0; for (i = 0; i < 26; i++) n += ct[i]; for (i = 0; aaonly[i] != '\0'; i++) { x = ct[aaonly[i] - 'A']; if (x > 0) { n1 += x; x1++; } } for (i = 0; allcanon[i] != '\0'; i++) { x = ct[allcanon[i] - 'A']; if (x > 0) { n2 += x; x2++; } } for (i = 0; aacanon[i] != '\0'; i++) { x = ct[aacanon[i] - 'A']; if (x > 0) { n3 += x; x3++; } } nt = ct['T' - 'A']; xt = (nt ? 1 : 0); nu = ct['U' - 'A']; xu = (nu ? 1 : 0); nx = ct['X' - 'A']; nn = ct['N' - 'A']; xn = (nn ? 1 : 0); if (n <= 10) type = eslUNKNOWN; else if (n1 > 0) type = eslAMINO; /* contains giveaway, aa-only chars */ else if (n-(n2+nt+nn) <= 0.02*n && x2+xt == 4) type = eslDNA; /* nearly all DNA canon (or N), all four seen */ else if (n-(n2+nu+nn) <= 0.02*n && x2+xu == 4) type = eslRNA; /* nearly all RNA canon (or N), all four seen */ else if (n-(n1+n2+n3+nn+nt+nx) <= 0.02*n && n3>n2 && x1+x2+x3+xn+xt >= 15) type = eslAMINO; /* nearly all aa canon (or X); more aa canon than ambig; all 20 seen */ *ret_type = type; if (type == eslUNKNOWN) return eslENOALPHABET; else return eslOK; } /* Function: esl_abc_Match() * Synopsis: Returns the probability that two symbols match. * * Purpose: Given two digital symbols and in alphabet * , calculate and return the probability that * and match, taking degenerate residue codes * into account. * * If

residue probability vector is NULL, the * calculation is a simple average. For example, for DNA, * R/A gives 0.5, C/N gives 0.25, N/R gives 0.25, R/R gives * 0.5. * * If

for the * occurrence frequencies of the residues in the base * alphabet, calculate and return the expected score * (weighted by the occurrence frequencies

). * * would usually be a degeneracy code, but it * may also be a canonical residue. It must not * be a gap, missing data, or illegal symbol; if it * is, these functions return a score of 0 without * raising an error. * * and do the * same, but for float and double scores instead of integers * (for real-valued scores, no rounding is done). * * Args: a - digital alphabet to use * x - a symbol to score * sc - score vector for canonical residues [0..K-1] * p - background prob's of canonicals [0..K-1] * * Returns: average score for symbol */ int esl_abc_IExpectScore(const ESL_ALPHABET *a, ESL_DSQ x, const int *sc, const float *p) { float result = 0.; float denom = 0.; int i; if (! esl_abc_XIsResidue(a, x)) return 0; for (i = 0; i < a->K; i++) if (a->degen[(int) x][i]) { result += (float) sc[i] * p[i]; denom += p[i]; } result /= denom; if (result < 0) return (int) (result - 0.5); else return (int) (result + 0.5); } float esl_abc_FExpectScore(const ESL_ALPHABET *a, ESL_DSQ x, const float *sc, const float *p) { float result = 0.; float denom = 0.; int i; if (! esl_abc_XIsResidue(a, x)) return 0.; for (i = 0; i < a->K; i++) if (a->degen[(int) x][i]) { result += sc[i] * p[i]; denom += p[i]; } result /= denom; return result; } double esl_abc_DExpectScore(const ESL_ALPHABET *a, ESL_DSQ x, const double *sc, const double *p) { double result = 0.; double denom = 0.; int i; if (! esl_abc_XIsResidue(a, x)) return 0.; for (i = 0; i < a->K; i++) if (a->degen[(int) x][i]) { result += sc[i] * p[i]; denom += p[i]; } result /= denom; return result; } /* Function: esl_abc_IAvgScVec() * Synopsis: Fill out score vector with average degenerate scores. * * Purpose: Given an alphabet and a score vector of length * Kp> that contains integer scores for the base * alphabet (<0..a->K-1>), fill out the rest of the score * vector, calculating average scores for * degenerate residues using . * * The score, if any, for a gap character , the * nonresidue , and the missing data character * are untouched by this function. Only the degenerate * scores are filled in. * * and do * the same, but for score vectors of floats or doubles, * respectively. * * Returns: on success. */ int esl_abc_IAvgScVec(const ESL_ALPHABET *a, int *sc) { ESL_DSQ x; for (x = a->K+1; x <= a->Kp-3; x++) sc[x] = esl_abc_IAvgScore(a, x, sc); return eslOK; } int esl_abc_FAvgScVec(const ESL_ALPHABET *a, float *sc) { ESL_DSQ x; for (x = a->K+1; x <= a->Kp-3; x++) sc[x] = esl_abc_FAvgScore(a, x, sc); return eslOK; } int esl_abc_DAvgScVec(const ESL_ALPHABET *a, double *sc) { ESL_DSQ x; for (x = a->K+1; x <= a->Kp-3; x++) sc[x] = esl_abc_DAvgScore(a, x, sc); return eslOK; } /* Function: esl_abc_IExpectScVec() * Synopsis: Fill out score vector with average expected scores. * * Purpose: Given an alphabet , a score vector of length * Kp> that contains integer scores for the base * alphabet (<0..a->K-1>), and residue occurrence probabilities * K-1]>; fill in the scores for the * degenerate residues using . * * The score, if any, for a gap character , the * nonresidue , and the missing data character * are untouched by this function. Only the degenerate * scores are filled in. * * and do * the same, but for score vectors of floats or doubles, * respectively. The probabilities

are floats for the * integer and float versions, and doubles for the double * version. * * Returns: on success. */ int esl_abc_IExpectScVec(const ESL_ALPHABET *a, int *sc, const float *p) { ESL_DSQ x; for (x = a->K+1; x <= a->Kp-3; x++) sc[x] = esl_abc_IExpectScore(a, x, sc, p); return eslOK; } int esl_abc_FExpectScVec(const ESL_ALPHABET *a, float *sc, const float *p) { ESL_DSQ x; for (x = a->K+1; x <= a->Kp-3; x++) sc[x] = esl_abc_FExpectScore(a, x, sc, p); return eslOK; } int esl_abc_DExpectScVec(const ESL_ALPHABET *a, double *sc, const double *p) { ESL_DSQ x; for (x = a->K+1; x <= a->Kp-3; x++) sc[x] = esl_abc_DExpectScore(a, x, sc, p); return eslOK; } /* Function: esl_abc_FCount() * Synopsis: Count a degenerate symbol into a count vector. * * Purpose: Count a possibly degenerate digital symbol (0..Kp-1) * into a counts array for base symbols (0..K-1). * Assign the symbol a weight of (often just 1.0). * The count weight of a degenerate symbol is divided equally * across the possible base symbols. * * can be a gap; if so, must be allocated 0..K, * not 0..K-1. If is a missing data symbol, or a nonresidue * data symbol, nothing is done. * * does the same, but for double-precision * count vectors and weights. * * Returns: on success. */ int esl_abc_FCount(const ESL_ALPHABET *abc, float *ct, ESL_DSQ x, float wt) { ESL_DSQ y; if (esl_abc_XIsCanonical(abc, x) || esl_abc_XIsGap(abc, x)) ct[x] += wt; else if (esl_abc_XIsMissing(abc, x) || esl_abc_XIsNonresidue(abc, x)) return eslOK; else for (y = 0; y < abc->K; y++) { if (abc->degen[x][y]) ct[y] += wt / (float) abc->ndegen[x]; } return eslOK; } int esl_abc_DCount(const ESL_ALPHABET *abc, double *ct, ESL_DSQ x, double wt) { ESL_DSQ y; if (esl_abc_XIsCanonical(abc, x) || esl_abc_XIsGap(abc, x)) ct[x] += wt; else if (esl_abc_XIsMissing(abc, x) || esl_abc_XIsNonresidue(abc, x)) return eslOK; else for (y = 0; y < abc->K; y++) { if (abc->degen[x][y]) ct[y] += wt / (double) abc->ndegen[x]; } return eslOK; } /* Function: esl_abc_EncodeType() * Synopsis: Convert descriptive string to alphabet type code. * * Purpose: Convert a string like "amino" or "DNA" to the * corresponding Easel internal alphabet type code * such as or ; return the code. * * Returns: the code, such as ; if isn't * recognized, returns . */ int esl_abc_EncodeType(char *type) { if (strcasecmp(type, "amino") == 0) return eslAMINO; else if (strcasecmp(type, "rna") == 0) return eslRNA; else if (strcasecmp(type, "dna") == 0) return eslDNA; else if (strcasecmp(type, "coins") == 0) return eslCOINS; else if (strcasecmp(type, "dice") == 0) return eslDICE; else if (strcasecmp(type, "custom")== 0) return eslNONSTANDARD; else return eslUNKNOWN; } /* Function: esl_abc_DecodeType() * Synopsis: Returns descriptive string for alphabet type code. * * Purpose: For diagnostics and other output: given an internal * alphabet code (, for example), return * pointer to an internal string ("RNA", for example). */ char * esl_abc_DecodeType(int type) { switch (type) { case eslUNKNOWN: return "unknown"; case eslRNA: return "RNA"; case eslDNA: return "DNA"; case eslAMINO: return "amino"; case eslCOINS: return "coins"; case eslDICE: return "dice"; case eslNONSTANDARD: return "custom"; default: break; } esl_exception(eslEINVAL, FALSE, __FILE__, __LINE__, "no such alphabet type code %d\n", type); return NULL; } /* Function: esl_abc_ValidateSeq() * Synopsis: Assure that a text sequence can be digitized. * * Purpose: Check that sequence of length can be digitized * without error; all its symbols are valid in alphabet * . If so, return . If not, return . * * If is , we still validate that at least the * consists only of ASCII characters. * * is either passed as , or a pointer to an * error string buffer allocated by the caller for * characters. If is non-NULL, and * the sequence is invalid, an error message is placed in * . * * Args: a - digital alphabet (or NULL, if unavailable) * seq - sequence to validate [0..L-1]; NUL-termination unnecessary * L - length of * errbuf - NULL, or ptr to chars of allocated space * for an error message. * * Returns: if is valid; if not. * * Throws: (no abnormal error conditions). */ int esl_abc_ValidateSeq(const ESL_ALPHABET *a, const char *seq, int64_t L, char *errbuf) { int status; int64_t i; int64_t firstpos = -1; int64_t nbad = 0; if (errbuf) *errbuf = 0; if (a) // If we have digital alphabet , it has an we can check against { for (i = 0; i < L; i++) { if (! esl_abc_CIsValid(a, seq[i])) { if (firstpos == -1) firstpos = i; nbad++; } } } else // Else, at least validate that the text string is an ASCII text string { for (i = 0; i < L; i++) { if (! isascii(seq[i])) { if (firstpos == -1) firstpos = i; nbad++; } } } if (nbad == 1) ESL_XFAIL(eslEINVAL, errbuf, "invalid char %c at pos %" PRId64, seq[firstpos], firstpos+1); else if (nbad > 1) ESL_XFAIL(eslEINVAL, errbuf, "%" PRId64 " invalid chars (including %c at pos %" PRId64 ")", nbad, seq[firstpos], firstpos+1); return eslOK; ERROR: return status; } /*---------------- end, other API functions ---------------------*/ /***************************************************************** * 4. Unit tests. *****************************************************************/ #ifdef eslALPHABET_TESTDRIVE #include "esl_vectorops.h" static int utest_Create(void) { char msg[] = "esl_alphabet_Create() unit test failed"; int types[] = { eslDNA, eslRNA, eslAMINO, eslCOINS, eslDICE }; int Karr[] = { 4, 4, 20, 2, 6 }; int Kparr[] = { 18, 18, 29, 6, 10 }; int i; ESL_ALPHABET *a; ESL_DSQ x; for (i = 0; i < 3; i++) { if ((a = esl_alphabet_Create(types[i])) == NULL) esl_fatal(msg); if (a->type != types[i]) esl_fatal(msg); if (a->K != Karr[i]) esl_fatal(msg); if (a->Kp != Kparr[i]) esl_fatal(msg); if (strlen(a->sym) != a->Kp) esl_fatal(msg); x = esl_abc_XGetGap(a); if (x != a->K) esl_fatal(msg); if (a->ndegen[x] != 0) esl_fatal(msg); x = esl_abc_XGetUnknown(a); if (x != a->Kp-3) esl_fatal(msg); if (a->ndegen[x] != a->K) esl_fatal(msg); x = esl_abc_XGetNonresidue(a); if (x != a->Kp-2) esl_fatal(msg); if (a->ndegen[x] != 0) esl_fatal(msg); x = esl_abc_XGetMissing(a); if (x != a->Kp-1) esl_fatal(msg); if (a->ndegen[x] != 0) esl_fatal(msg); esl_alphabet_Destroy(a); } /* Thrown errors */ #ifdef eslTEST_THROWING if (esl_alphabet_Create(-1) != NULL) esl_fatal(msg); if (esl_alphabet_Create(eslUNKNOWN) != NULL) esl_fatal(msg); if (esl_alphabet_Create(eslNONSTANDARD) != NULL) esl_fatal(msg); #endif return eslOK; } static int utest_CreateCustom(void) { char msg[] = "esl_alphabet_CreateCustom() unit test failed"; ESL_ALPHABET *a; char *testseq = "AaU-~Z"; ESL_DSQ expect[] = { eslDSQ_SENTINEL, 0, 0, 15, 20, 26, 23, eslDSQ_SENTINEL }; ESL_DSQ *dsq; if ((a = esl_alphabet_CreateCustom("ACDEFGHIKLMNPQRSTVWY-BJZX*~", 20, 27)) == NULL) esl_fatal(msg); if (esl_alphabet_SetEquiv(a, 'O', 'K') != eslOK) esl_fatal(msg); /* read pyrrolysine O as lysine K */ if (esl_alphabet_SetEquiv(a, 'U', 'S') != eslOK) esl_fatal(msg); /* read selenocys U as serine S */ if (esl_alphabet_SetCaseInsensitive(a) != eslOK) esl_fatal(msg); /* allow lower case input */ if (esl_alphabet_SetDegeneracy(a, 'Z', "QE") != eslOK) esl_fatal(msg); if (esl_abc_CreateDsq(a, testseq, &dsq) != eslOK) esl_fatal(msg); if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (strlen(testseq)+2)) != 0) esl_fatal(msg); free(dsq); esl_alphabet_Destroy(a); #ifdef eslTEST_THROWING if (esl_alphabet_CreateCustom("ACGT-RYMKSWHBVDN*~", 4, 21) != NULL) esl_fatal(msg); /* Kp mismatches string length */ #endif return eslOK; } static int utest_SetEquiv(void) { char msg[] = "esl_alphabet_SetEquiv() unit test failed"; ESL_ALPHABET *a; char *testseq = "a1&"; ESL_DSQ expect[] = { eslDSQ_SENTINEL, 0, 4, 7, eslDSQ_SENTINEL }; ESL_DSQ *dsq; if ((a = esl_alphabet_CreateCustom("ACGT-N*~", 4, 8)) == NULL) esl_fatal(msg); if (esl_alphabet_SetEquiv(a, 'a', 'A') != eslOK) esl_fatal(msg); if (esl_alphabet_SetEquiv(a, '1', '-') != eslOK) esl_fatal(msg); if (esl_alphabet_SetEquiv(a, '&', '~') != eslOK) esl_fatal(msg); #ifdef eslTEST_THROWING if (esl_alphabet_SetEquiv(a, 'G', 'C') != eslEINVAL) esl_fatal(msg); /* sym is already in internal alphabet */ if (esl_alphabet_SetEquiv(a, '2', 'V') != eslEINVAL) esl_fatal(msg); /* c is not in internal alphabet */ #endif if (esl_abc_CreateDsq(a, testseq, &dsq) != eslOK) esl_fatal(msg); if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (strlen(testseq)+2)) != 0) esl_fatal(msg); free(dsq); esl_alphabet_Destroy(a); return eslOK; } static int utest_SetCaseInsensitive(void) { char msg[] = "esl_alphabet_SetCaseInsensitive() unit test failed"; ESL_ALPHABET *a; char *testseq = "ACGT"; ESL_DSQ expect[] = { eslDSQ_SENTINEL, 0, 1, 2, 3, eslDSQ_SENTINEL }; ESL_DSQ *dsq; if ((a = esl_alphabet_CreateCustom("acgt-n*~", 4, 8)) == NULL) esl_fatal(msg); if (esl_alphabet_SetCaseInsensitive(a) != eslOK) esl_fatal(msg); if (esl_abc_CreateDsq(a, testseq, &dsq) != eslOK) esl_fatal(msg); if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (strlen(testseq)+2)) != 0) esl_fatal(msg); free(dsq); esl_alphabet_Destroy(a); #ifdef TEST_THROWING if ((a = esl_alphabet_CreateCustom("acgt-n*~", 4, 8)) == NULL) esl_fatal(msg); if (esl_alphabet_SetEquiv(a, 'A', 'c') != eslOK) esl_fatal(msg); /* now input A maps to internal c */ if (esl_alphabet_SetCaseInsensitive(a) != eslECORRUPT) esl_fatal(msg); /* and this fails, can't remap A */ esl_alphabet_Destroy(a); #endif return eslOK; } static int utest_SetDegeneracy(void) { char msg[] = "esl_alphabet_SetDegeneracy() unit test failed"; ESL_ALPHABET *a; char *testseq = "yrn"; ESL_DSQ expect[] = { eslDSQ_SENTINEL, 6, 5, 7, eslDSQ_SENTINEL }; ESL_DSQ *dsq; ESL_DSQ x; if ((a = esl_alphabet_CreateCustom("ACGT-RYN*~", 4, 10)) == NULL) esl_fatal(msg); if (esl_alphabet_SetDegeneracy(a, 'R', "AG") != eslOK) esl_fatal(msg); if (esl_alphabet_SetDegeneracy(a, 'Y', "CT") != eslOK) esl_fatal(msg); if (esl_alphabet_SetCaseInsensitive(a) != eslOK) esl_fatal(msg); if (esl_abc_CreateDsq(a, testseq, &dsq) != eslOK) esl_fatal(msg); if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (strlen(testseq)+2)) != 0) esl_fatal(msg); x = esl_abc_DigitizeSymbol(a, 'a'); if (a->ndegen[x] != 1) esl_fatal(msg); x = esl_abc_DigitizeSymbol(a, 'r'); if (a->ndegen[x] != 2) esl_fatal(msg); x = esl_abc_DigitizeSymbol(a, 'y'); if (a->ndegen[x] != 2) esl_fatal(msg); x = esl_abc_DigitizeSymbol(a, 'n'); if (a->ndegen[x] != 4) esl_fatal(msg); free(dsq); esl_alphabet_Destroy(a); #ifdef TEST_THROWING if ((a = esl_alphabet_CreateCustom("ACGT-RYN*~", 4, 10)) == NULL) esl_fatal(msg); if (esl_abc_SetDegeneracy(a, 'z', "AC") != eslEINVAL) esl_fatal(msg); /* can't map char not in alphabet */ if (esl_abc_SetDegeneracy(a, 'N', "ACGT") != eslEINVAL) esl_fatal(msg); /* can't remap N */ if (esl_abc_SetDegeneracy(a, 'A', "GT") != eslEINVAL) esl_fatal(msg); /* can't map a nondegen character */ if (esl_abc_SetDegeneracy(a, '-', "GT") != eslEINVAL) esl_fatal(msg); /* ... or a gap... */ if (esl_abc_SetDegeneracy(a, '*', "GT") != eslEINVAL) esl_fatal(msg); /* ... or nonresidues... */ if (esl_abc_SetDegeneracy(a, '~', "GT") != eslEINVAL) esl_fatal(msg); /* ... or missing data. */ if (esl_abc_SetDegeneracy(a, 'R', "XY") != eslEINVAL) esl_fatal(msg); /* can't map to unknown chars... */ if (esl_abc_SetDegeneracy(a, 'R', "YN") != eslEINVAL) esl_fatal(msg); /* ... nor to noncanonical chars... */ esl_alphabet_Destroy(a); #endif return eslOK; } static int utest_SetIgnored(void) { char msg[] = "esl_alphabet_SetIgnored() unit test failed"; ESL_ALPHABET *a; char *testseq = "y \trn"; ESL_DSQ expect[] = { eslDSQ_SENTINEL, 6, 5, 15, eslDSQ_SENTINEL }; int L = 5; ESL_DSQ *dsq; if ((a = esl_alphabet_Create(eslRNA)) == NULL) esl_fatal(msg); if (esl_alphabet_SetIgnored(a, " \t") != eslOK) esl_fatal(msg); if (esl_abc_CreateDsq(a, testseq, &dsq) != eslOK) esl_fatal(msg); if (memcmp(dsq, expect, sizeof(ESL_DSQ) * L) != 0) esl_fatal(msg); free(dsq); esl_alphabet_Destroy(a); return eslOK; } static int utest_Destroy(void) { char msg[] = "esl_alphabet_Destroy() unit test failed"; ESL_ALPHABET *a; if ((a = esl_alphabet_CreateCustom("ACGT-RYN*~", 4, 10)) == NULL) esl_fatal(msg); esl_alphabet_Destroy(a); esl_alphabet_Destroy(NULL); /* should be robust against NULL pointers */ return eslOK; } static int utest_CreateDsq(void) { char msg[] = "esl_abc_CreateDsq() unit test failed"; ESL_ALPHABET *a; char goodseq[] = "ACDEF"; char badseq[] = "1@%34"; ESL_DSQ *dsq; ESL_DSQ x; if ((a = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg); if (esl_abc_CreateDsq(a, goodseq, &dsq) != eslOK) esl_fatal(msg); if (dsq[1] != 0 || dsq[2] != 1) esl_fatal(msg); /* spot check */ free(dsq); if (esl_abc_CreateDsq(a, badseq, &dsq) != eslEINVAL) esl_fatal(msg); x = esl_abc_XGetUnknown(a); if (dsq[1] != x || dsq[2] != x) esl_fatal(msg); /* bad chars all X's now, upon failure */ free(dsq); if (esl_abc_CreateDsq(a, goodseq, NULL) != eslOK) esl_fatal(msg); esl_alphabet_Destroy(a); return eslOK; } static int utest_Digitize(void) { char msg[] = "esl_abc_Digitize() unit test failed"; ESL_ALPHABET *a; char goodseq[] = "ACDEF"; char badseq[] = "1@%34"; ESL_DSQ *dsq; ESL_DSQ x; int status; ESL_ALLOC(dsq, sizeof(ESL_DSQ) * (strlen(goodseq)+2)); if ((a = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg); esl_abc_Digitize(a, goodseq, dsq); if (dsq[1] != 0 || dsq[2] != 1) esl_fatal(msg); /* spot check */ esl_abc_Digitize(a, badseq, dsq); x = esl_abc_XGetUnknown(a); if (dsq[1] != x || dsq[2] != x) esl_fatal(msg); /* bad chars all X's now, upon failure */ free(dsq); esl_alphabet_Destroy(a); return eslOK; ERROR: esl_fatal(msg); return status; } static int utest_Textize(void) { char msg[] = "esl_abc_Textize() unit test failed"; ESL_ALPHABET *a; char goodseq[] = "acdef"; char *newseq; ESL_DSQ *dsq; int L; int status; L = strlen(goodseq); ESL_ALLOC(newseq, sizeof(char) * (L+1)); if ((a = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg); if (esl_abc_CreateDsq(a, goodseq, &dsq) != eslOK) esl_fatal(msg); if (esl_abc_Textize(a, dsq, L, newseq ) != eslOK) esl_fatal(msg); if (strcmp(newseq, "ACDEF") != 0) esl_fatal(msg); free(dsq); free(newseq); esl_alphabet_Destroy(a); return eslOK; ERROR: esl_fatal(msg); return status; } static int utest_TextizeN(void) { char msg[] = "esl_abc_TextizeN() unit test failed"; ESL_ALPHABET *a; char goodseq[] = "acdefrynacdef"; ESL_DSQ *dsq; ESL_DSQ *dptr; int L; int W; L = strlen(goodseq); if ((a = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg); if (esl_abc_CreateDsq(a, goodseq, &dsq) != eslOK) esl_fatal(msg); dptr = dsq+6; /* points to "r", residue 6 */ W = 5; /* copy/convert 5 residues "rynac" */ if (esl_abc_TextizeN(a, dptr, W, goodseq) != eslOK) esl_fatal(msg); if (strcmp(goodseq, "RYNACrynacdef") != 0) esl_fatal(msg); /* test a case where we hit eslDSQ_SENTINEL, and nul-terminate */ dptr = dsq+10; /* points to "c", residue 10 */ W = 20; /* copy/convert remaining residues "cdef" */ if (esl_abc_TextizeN(a, dptr, W, goodseq) != eslOK) esl_fatal(msg); if (strcmp(goodseq, "CDEF") != 0) esl_fatal(msg); free(dsq); esl_alphabet_Destroy(a); return eslOK; } static int utest_dsqdup(void) { char msg[] = "esl_abc_dsqdup() unit test failed"; ESL_ALPHABET *a; char goodseq[] = "ACGt"; ESL_DSQ expect[] = { eslDSQ_SENTINEL, 0, 1, 2, 3, eslDSQ_SENTINEL }; ESL_DSQ *d1, *d2; int L; L = strlen(goodseq); if ((a = esl_alphabet_Create(eslRNA)) == NULL) esl_fatal(msg); if (esl_abc_CreateDsq(a, goodseq, &d1) != eslOK) esl_fatal(msg); if (esl_abc_dsqdup(d1, -1, &d2) != eslOK) esl_fatal(msg); if (memcmp(d2, expect, sizeof(ESL_DSQ) * (L+2)) != 0) esl_fatal(msg); free(d2); if (esl_abc_dsqdup(d1, L, &d2) != eslOK) esl_fatal(msg); if (memcmp(d2, expect, sizeof(ESL_DSQ) * (L+2)) != 0) esl_fatal(msg); free(d2); free(d1); esl_alphabet_Destroy(a); return eslOK; } static int utest_dsqcat(void) { char msg[] = "esl_abc_dsqcat() unit test failed"; ESL_ALPHABET *a; char goodseq[] = "ACGt"; char addseq[] = "RYM KN"; char badseq[] = "RYM K&"; ESL_DSQ expect[] = { eslDSQ_SENTINEL, 0, 1, 2, 3, 5, 6, 7, 8, 15, eslDSQ_SENTINEL }; ESL_DSQ *dsq; int64_t L1; esl_pos_t L2; if ((a = esl_alphabet_Create(eslRNA)) == NULL) esl_fatal(msg); a->inmap[0] = esl_abc_XGetUnknown(a); a->inmap[' '] = eslDSQ_IGNORED; L1 = strlen(goodseq); L2 = strlen(addseq); if (esl_abc_CreateDsq(a, goodseq, &dsq) != eslOK) esl_fatal(msg); if (esl_abc_dsqcat(a->inmap, &dsq, &L1, addseq, L2) != eslOK) esl_fatal(msg); if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (L1+2)) != 0) esl_fatal(msg); free(dsq); L1 = -1; L2 = -1; if (esl_abc_CreateDsq(a, goodseq, &dsq) != eslOK) esl_fatal(msg); if (esl_abc_dsqcat(a->inmap, &dsq, &L1, addseq, L2) != eslOK) esl_fatal(msg); if (L1 != esl_abc_dsqlen(dsq)) esl_fatal(msg); if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (L1+2)) != 0) esl_fatal(msg); free(dsq); L1 = 0; dsq = NULL; if (esl_abc_dsqcat(a->inmap, &dsq, &L1, goodseq, -1) != eslOK) esl_fatal(msg); if (esl_abc_dsqcat(a->inmap, &dsq, &L1, addseq, -1) != eslOK) esl_fatal(msg); if (L1 != esl_abc_dsqlen(dsq)) esl_fatal(msg); if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (L1+2)) != 0) esl_fatal(msg); free(dsq); L1 = -1; L2 = strlen(badseq); if (esl_abc_CreateDsq(a, goodseq, &dsq) != eslOK) esl_fatal(msg); if (esl_abc_dsqcat(a->inmap, &dsq, &L1, badseq, L2) != eslEINVAL) esl_fatal(msg); if (L1 != esl_abc_dsqlen(dsq)) esl_fatal(msg); if (memcmp(dsq, expect, sizeof(ESL_DSQ) * (L1+2)) != 0) esl_fatal(msg); free(dsq); esl_alphabet_Destroy(a); return eslOK; } /* dsqlen unit test goes here */ /* dsqrlen unit test goes here */ /* utest_Match goes here */ /* This serves to unit test multiple functions: * esl_abc_IAvgScore() * esl_abc_IExpectScore() */ static int degeneracy_integer_scores(void) { char *msg = "degeneracy_integer_scores unit test failed"; ESL_ALPHABET *a; ESL_DSQ x; float p[] = {0.4, 0.1, 0.1, 0.4}; /* A/T biased background */ int sc[] = { -1, -6, 6, 1}; int val; a = esl_alphabet_Create(eslDNA); x = esl_abc_DigitizeSymbol(a, 'N'); /* any: A/C/G/T */ val = esl_abc_IAvgScore(a, x, sc); /* average of -1,-6,6,1 = 0 */ if (val != 0) esl_fatal(msg); x = esl_abc_DigitizeSymbol(a, 'M'); /* M = A/C */ val = esl_abc_IExpectScore(a, x, sc, p); /* expectation of -1,-6 given p = 0.4,0.1 = -2 */ if (val != -2) esl_fatal(msg); esl_alphabet_Destroy(a); return eslOK; } /* This serves to unit test multiple functions: * esl_abc_FAvgScore() * esl_abc_FExpectScore() */ static int degeneracy_float_scores(void) { char *msg = "degeneracy_float_scores unit test failed"; ESL_ALPHABET *a; ESL_DSQ x; float p[] = {0.4, 0.1, 0.1, 0.4}; /* A/T biased background */ float sc[] = { -1., -6., 6., 1.}; float val; a = esl_alphabet_Create(eslRNA); x = esl_abc_DigitizeSymbol(a, 'N'); /* any: A/C/G/T */ val = esl_abc_FAvgScore(a, x, sc); /* average of -1,-6,6,1 = 0 */ if (fabs(val - 0.) > 0.0001) esl_fatal(msg); x = esl_abc_DigitizeSymbol(a, 'M'); /* M = A/C */ val = esl_abc_FExpectScore(a, x, sc, p); /* expectation of -1,-6 given p = 0.4,0.1 = -2 */ if (fabs(val + 2.) > 0.0001) esl_fatal(msg); esl_alphabet_Destroy(a); return eslOK; } /* This serves to unit test multiple functions: * esl_abc_DAvgScore() * esl_abc_DExpectScore() */ static int degeneracy_double_scores(void) { char *msg = "degeneracy_double_scores unit test failed"; ESL_ALPHABET *a; ESL_DSQ x; double p[] = {0.4, 0.1, 0.1, 0.4}; /* A/T biased background */ double sc[] = { -1., -6., 6., 1.}; double val; a = esl_alphabet_Create(eslRNA); x = esl_abc_DigitizeSymbol(a, 'N'); /* any: A/C/G/T */ val = esl_abc_DAvgScore(a, x, sc); /* average of -1,-6,6,1 = 0 */ if (fabs(val - 0.) > 0.0001) esl_fatal(msg); x = esl_abc_DigitizeSymbol(a, 'M'); /* M = A/C */ val = esl_abc_DExpectScore(a, x, sc, p); /* expectation of -1,-6 given p = 0.4,0.1 = -2 */ if (fabs(val + 2.) > 0.0001) esl_fatal(msg); esl_alphabet_Destroy(a); return eslOK; } /* utest_IAvgScVec */ /* utest_FAvgScVec */ /* utest_DAvgScVec */ /* utest_IExpectScVec */ /* utest_FExpectScVec */ /* utest_DExpectScVec */ static int utest_FCount(void) { char *msg = "FCount unit test failure"; ESL_ALPHABET *a = NULL; ESL_DSQ x; char *teststring = "X~-Z.UAX"; char *s; int status; /* 0.1 from 2 X's; U -> +1 C; A -> +1 A; Z-> +0.5 Q,E; ~ ignored; .,- -> +2 gaps */ /* A C D E F G H I K L M N P Q R S T V W Y - */ float expect[21] = { 1.1, 1.1, 0.1, 0.6, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.6, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 2.0 }; float *vec; a = esl_alphabet_Create(eslAMINO); ESL_ALLOC(vec, sizeof(float) * (a->K+1)); /* include gap char for this test */ esl_vec_FSet(vec, a->K+1, 0.); for (s = teststring; *s != '\0'; s++) { x = esl_abc_DigitizeSymbol(a, *s); if (esl_abc_FCount(a, vec, x, 1.0) != eslOK) esl_fatal(msg); } if (esl_vec_FCompare(vec, expect, a->K+1, 0.0001) != eslOK) esl_fatal(msg); esl_alphabet_Destroy(a); free(vec); return eslOK; ERROR: esl_fatal("allocation failed"); return status; } static int utest_DCount(void) { char *msg = "DCount unit test failure"; ESL_ALPHABET *a = NULL; ESL_DSQ x; char *teststring = "X~-Z.UAX"; char *s; int status; /* 0.1 from 2 X's; U -> +1 C; A -> +1 A; Z-> +0.5 Q,E; ~ ignored; .,- -> +2 gaps */ /* A C D E F G H I K L M N P Q R S T V W Y - */ double expect[21] = { 1.1, 1.1, 0.1, 0.6, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.6, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 2.0 }; double *vec; a = esl_alphabet_Create(eslAMINO); ESL_ALLOC(vec, sizeof(double) * (a->K+1)); /* include gap char for this test */ esl_vec_DSet(vec, a->K+1, 0.); for (s = teststring; *s != '\0'; s++) { x = esl_abc_DigitizeSymbol(a, *s); if (esl_abc_DCount(a, vec, x, 1.0) != eslOK) esl_fatal(msg); } if (esl_vec_DCompare(vec, expect, a->K+1, 0.0001) != eslOK) esl_fatal(msg); esl_alphabet_Destroy(a); free(vec); return eslOK; ERROR: esl_fatal("allocation failed"); return status; } #endif /* eslALPHABET_TESTDRIVE*/ /*-------------------- end, unit tests --------------------------*/ /***************************************************************** * 5. Test driver. *****************************************************************/ /* gcc -g -Wall -std=gnu99 -I. -o esl_alphabet_utest -DeslALPHABET_TESTDRIVE esl_alphabet.c esl_vectorops.c easel.c -lm * gcc -g -Wall -std=gnu99 -I. -L. -o esl_alphabet_utest -DeslALPHABET_TESTDRIVE esl_alphabet.c -leasel * ./test * valgrind ./test */ #ifdef eslALPHABET_TESTDRIVE static int basic_examples(void); #include "easel.h" #include "esl_alphabet.h" int main(void) { utest_Create(); utest_CreateCustom(); utest_SetEquiv(); utest_SetCaseInsensitive(); utest_SetDegeneracy(); utest_SetIgnored(); utest_Destroy(); utest_CreateDsq(); utest_Digitize(); utest_Textize(); utest_TextizeN(); utest_dsqdup(); utest_dsqcat(); utest_FCount(); utest_DCount(); basic_examples(); degeneracy_integer_scores(); degeneracy_float_scores(); degeneracy_double_scores(); return eslOK; } static int basic_examples(void) { char *msg = "basic alphabet example tests failed"; ESL_ALPHABET *a1, *a2; char dnaseq[] = "GARYtcN"; char aaseq[] = "EFILqzU"; int L; ESL_DSQ *dsq, *dsq2; int i; /* Example 1. * Create a DNA alphabet; digitize a DNA sequence. */ if ((a1 = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal(msg); L = strlen(dnaseq); if ((dsq = malloc(sizeof(ESL_DSQ) * (L+2))) == NULL) esl_fatal(msg); if (esl_abc_Digitize(a1, dnaseq, dsq) != eslOK) esl_fatal(msg); if (esl_abc_dsqlen(dsq) != L) esl_fatal(msg); esl_alphabet_Destroy(a1); /* Example 2. * Create an RNA alphabet; digitize the same DNA sequence; * make sure it is equal to the dsq above (so T=U were * correctly synonymous on input). */ if ((a2 = esl_alphabet_Create(eslRNA)) == NULL) esl_fatal(msg); if ((dsq2 = malloc(sizeof(ESL_DSQ) * (L+2))) == NULL) esl_fatal(msg); if (esl_abc_Digitize(a2, dnaseq, dsq2) != eslOK) esl_fatal(msg); for (i = 1; i <= L; i++) if (dsq[i] != dsq2[i]) esl_fatal(msg); esl_alphabet_Destroy(a2); /* Example 3. * Create an amino alphabet; digitize a protein sequence, * while reusing memory already allocated in dsq. */ if ((a1 = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg); if (esl_abc_Digitize(a1, aaseq, dsq) != eslOK) esl_fatal(msg); /* Example 4. * Create a custom alphabet almost the same as the amino * acid alphabet; digitize the same protein seq, reusing * memory in dsq2; check that seqs are identical. */ if ((a2 = esl_alphabet_CreateCustom("ACDEFGHIKLMNPQRSTVWY-BJZOUX~", 20, 28)) == NULL) esl_fatal(msg); if (esl_alphabet_SetCaseInsensitive(a2) != eslOK) esl_fatal(msg); /* allow lower case input */ if (esl_alphabet_SetDegeneracy(a2, 'Z', "QE") != eslOK) esl_fatal(msg); if (esl_abc_Digitize(a2, aaseq, dsq2) != eslOK) esl_fatal(msg); for (i = 1; i <= L; i++) if (dsq[i] != dsq2[i]) esl_fatal(msg); /* clean up. */ esl_alphabet_Destroy(a1); esl_alphabet_Destroy(a2); free(dsq); free(dsq2); return eslOK; } #endif /*eslALPHABET_TESTDRIVE*/ /***************************************************************** * 6. Examples. *****************************************************************/ /* gcc -g -Wall -o example -I. -DeslALPHABET_EXAMPLE esl_alphabet.c easel.c */ #ifdef eslALPHABET_EXAMPLE /*::cexcerpt::alphabet_example::begin::*/ #include "easel.h" #include "esl_alphabet.h" int main(void) { ESL_ALPHABET *a; char dnaseq[] = "GARYTC"; int L = 6; ESL_DSQ *dsq; a = esl_alphabet_Create(eslDNA); if ((dsq = malloc(sizeof(ESL_DSQ) * (L+2))) == NULL) esl_fatal("malloc failed"); if (esl_abc_Digitize(a, dnaseq, dsq) != eslOK) esl_fatal("failed to digitize the sequence"); free(dsq); esl_alphabet_Destroy(a); return 0; } /*::cexcerpt::alphabet_example::end::*/ #endif /*eslALPHABET_EXAMPLE*/ /* gcc -g -Wall -o example -I. -DeslALPHABET_EXAMPLE2 esl_alphabet.c easel.c */ #ifdef eslALPHABET_EXAMPLE2 /*::cexcerpt::alphabet_example2::begin::*/ #include "easel.h" #include "esl_alphabet.h" int main(void) { ESL_ALPHABET *a; /* 1. Create the base alphabet structure. */ a = esl_alphabet_CreateCustom("ACDEFGHIKLMNOPQRSTUVWY-BJZX~", 22, 28); /* 2. Set your equivalences in the input map. */ esl_alphabet_SetEquiv(a, '.', '-'); /* allow . as a gap character too */ /* 3. After all synonyms are set, (optionally) make map case-insensitive. */ esl_alphabet_SetCaseInsensitive(a); /* allow lower case input too */ /* 4. Define your optional degeneracy codes in the alphabet, one at a time. * The 'any' character X was automatically set up. */ esl_alphabet_SetDegeneracy(a, 'B', "DN"); /* read B as {D|N} */ esl_alphabet_SetDegeneracy(a, 'J', "IL"); /* read B as {I|L} */ esl_alphabet_SetDegeneracy(a, 'Z', "QE"); /* read Z as {Q|E} */ /* 5. (do your stuff) */ /* 6. Remember to free it when you're done with it. */ esl_alphabet_Destroy(a); return 0; } /*::cexcerpt::alphabet_example2::end::*/ #endif /*eslALPHABET_EXAMPLE2*/ #ifdef eslALPHABET_EXAMPLE3 #include "easel.h" #include "esl_alphabet.h" #include "esl_sq.h" #include "esl_sqio.h" int main(int argc, char **argv) { ESL_SQ *sq = esl_sq_Create(); ESL_SQFILE *sqfp; int format = eslSQFILE_UNKNOWN; char *seqfile = argv[1]; int type; int status; status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) esl_fatal("No such file."); else if (status == eslEFORMAT) esl_fatal("Format unrecognized."); else if (status != eslOK) esl_fatal("Open failed, code %d.", status); while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { esl_sq_GuessAlphabet(sq, &type); printf("%-25s %s\n", sq->name, esl_abc_DecodeType(type)); esl_sq_Reuse(sq); } if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s - %s\n", sqfp->filename, sqfp->get_error(sqfp)); else if (status != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", status, sqfp->filename); esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); return 0; } #endif /*eslALPHABET_EXAMPLE3*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_alphabet.c 940 2015-01-22 19:34:21Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_alphabet.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_randomseq.h0000664361611702660230000000740312473612607016375 0ustar wheelerteddy/* Generating, shuffling, and randomizing sequences. */ #ifndef eslRANDOMSEQ_INCLUDED #define eslRANDOMSEQ_INCLUDED #include "esl_random.h" /* Control flag passed to esl_rsq_Sample(): */ #define eslRSQ_SAMPLE_ALNUM 1 /* isalpha | isdigit */ #define eslRSQ_SAMPLE_ALPHA 2 /* islower | isupper */ #define eslRSQ_SAMPLE_LOWER 3 /* ASCII: a-z */ #define eslRSQ_SAMPLE_UPPER 4 /* ASCII: A-Z */ #define eslRSQ_SAMPLE_DIGIT 5 /* 0-9 */ #define eslRSQ_SAMPLE_XDIGIT 6 /* 0-9, a-f, A-F */ #define eslRSQ_SAMPLE_CNTRL 7 /* ASCII: 0..0x1F, plus 0x7F (DEL) */ #define eslRSQ_SAMPLE_GRAPH 8 /* isprint && ! ' ' (space) */ #define eslRSQ_SAMPLE_SPACE 9 /* ' ', '\f', '\n', '\r', '\t', '\v' */ #define eslRSQ_SAMPLE_BLANK 10 /* ' ', '\t' */ #define eslRSQ_SAMPLE_PRINT 11 /* ASCII: 0x20 ' ' through 0x7E '~' */ #define eslRSQ_SAMPLE_PUNCT 12 /* isprint && !(isspace || isalnum) */ /* 1. Generating simple random character strings. */ extern int esl_rsq_Sample(ESL_RANDOMNESS *rng, int allowed_chars_flag, int L, char **ret_s); /* 2. Generating iid sequences. */ extern int esl_rsq_IID (ESL_RANDOMNESS *r, const char *alphabet, const double *p, int K, int L, char *s); extern int esl_rsq_fIID (ESL_RANDOMNESS *r, const char *alphabet, const float *p, int K, int L, char *s); /* 3. Shuffling sequences. */ extern int esl_rsq_CShuffle (ESL_RANDOMNESS *r, const char *s, char *shuffled); extern int esl_rsq_CShuffleDP (ESL_RANDOMNESS *r, const char *s, char *shuffled); extern int esl_rsq_CShuffleKmers (ESL_RANDOMNESS *r, const char *s, int K, char *shuffled); extern int esl_rsq_CReverse (const char *s, char *rev); extern int esl_rsq_CShuffleWindows(ESL_RANDOMNESS *r, const char *s, int w, char *shuffled); /* 4. Randomizing sequences */ extern int esl_rsq_CMarkov0 (ESL_RANDOMNESS *r, const char *s, char *markoved); extern int esl_rsq_CMarkov1 (ESL_RANDOMNESS *r, const char *s, char *markoved); /* 5. Generating iid sequences (digital mode). */ extern int esl_rsq_xIID (ESL_RANDOMNESS *r, const double *p, int K, int L, ESL_DSQ *dsq); extern int esl_rsq_xfIID(ESL_RANDOMNESS *r, const float *p, int K, int L, ESL_DSQ *dsq); /* 6. Shuffling sequences (digital mode). */ extern int esl_rsq_XShuffle (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, ESL_DSQ *shuffled); extern int esl_rsq_XShuffleDP (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *shuffled); extern int esl_rsq_XShuffleKmers (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *shuffled); extern int esl_rsq_XReverse(const ESL_DSQ *dsq, int L, ESL_DSQ *rev); extern int esl_rsq_XShuffleWindows(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int w, ESL_DSQ *shuffled); /* 7. Randomizing sequences (digital mode) */ extern int esl_rsq_XMarkov0 (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *markoved); extern int esl_rsq_XMarkov1 (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *markoved); #endif /*eslRANDOMSEQ_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_randomseq.h 838 2012-12-17 18:01:07Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_randomseq.h $ *****************************************************************/ hmmer-3.1b2/easel/esl_mem.h0000664361611702660230000000326612473612606015164 0ustar wheelerteddy/* str*()-like functions for raw memory "lines" (non-NUL terminated strings) */ #ifndef eslMEM_INCLUDED #define eslMEM_INCLUDED #include "easel.h" extern int esl_mem_strtoi32(char *p, esl_pos_t n, int base, int *opt_nc, int32_t *opt_val); extern int esl_memnewline(const char *p, esl_pos_t n, esl_pos_t *ret_nline, int *ret_nterm); extern int esl_memtok(char **p, esl_pos_t *n, const char *delim, char **ret_tok, esl_pos_t *ret_toklen); extern esl_pos_t esl_memspn (char *p, esl_pos_t n, const char *allow); extern esl_pos_t esl_memcspn(char *p, esl_pos_t n, const char *disallow); extern int esl_memstrcmp (const char *p, esl_pos_t n, const char *s); extern int esl_memstrpfx (const char *p, esl_pos_t n, const char *s); extern int esl_memstrcontains(const char *p, esl_pos_t n, const char *s); extern int esl_memstrdup(const char *p, esl_pos_t n, char **ret_s); extern int esl_memstrcpy(const char *p, esl_pos_t n, char *dest); extern int esl_memtof(const char *p, esl_pos_t n, float *ret_val); extern int esl_memtod(const char *p, esl_pos_t n, double *ret_val); extern int esl_mem_IsReal(const char *p, esl_pos_t n); #endif /*eslMEM_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_tree.tex0000664361611702660230000000240312473612610015701 0ustar wheelerteddy The \eslmod{tree} module implements an object for representing phylogenetic trees (\ccode{ESL\_TREE}). It also implements four of the most basic distance-based methods for tree inference and clustering algorithms (UPGMA, WPGMA, single linkage clustering, and complete linkage clustering). \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \apisubhead{the \ccode{ESL\_TREE} object}\\ \hyperlink{func:esl_tree_Create()}{\ccode{esl\_tree\_Create()}} & Constructor.\\ \hyperlink{func:esl_tree_Destroy()}{\ccode{esl\_tree\_Destroy()}} & Destructor.\\ \apisubhead{simple tree inference/clustering algorithms}\\ \hyperlink{func:esl_tree_UPGMA()}{\ccode{esl\_tree\_UPGMA()}} & Infer a tree by UPGMA.\\ \hyperlink{func:esl_tree_WPGMA()}{\ccode{esl\_tree\_WPGMA()}} & Infer a tree by WPGMA.\\ \hyperlink{func:esl_tree_SingleLinkage()}{\ccode{esl\_tree\_SingleLinkage()}} & Infer a tree by single-linkage clustering.\\ \hyperlink{func:esl_tree_CompleteLinkage()}{\ccode{esl\_tree\_CompleteLinkage()}} & Infer a tree by complete-linkage clustering.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{tree} API. Requires \eslmod{easel}, \eslmod{dmatrix}.} \label{tbl:tree_api} \end{table} \subsection{Example of using the tree API} \input{cexcerpts/tree_example} hmmer-3.1b2/easel/esl_random.c0000664361611702660230000011334412473612607015661 0ustar wheelerteddy/* Portable, threadsafe random number generators. * Provides both a fast generator and a strong generator. * * 1. The ESL_RANDOMNESS object. * 2. The generators, esl_random(). * 3. Debugging/development tools. * 4. Other fundamental sampling (including Gaussian, gamma). * 5. Multinomial sampling from discrete probability n-vectors. * 6. Benchmark driver * 7. Unit tests. * 8. Test driver. * 9. Example. * 10. Copyright and license information. * * See http://csrc.nist.gov/rng/ for the NIST random number * generation test suite. */ #include "esl_config.h" #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include "easel.h" #include "esl_random.h" static uint32_t choose_arbitrary_seed(void); static uint32_t jenkins_mix3(uint32_t a, uint32_t b, uint32_t c); static uint32_t knuth (ESL_RANDOMNESS *r); static uint32_t mersenne_twister (ESL_RANDOMNESS *r); static void mersenne_seed_table(ESL_RANDOMNESS *r, uint32_t seed); static void mersenne_fill_table(ESL_RANDOMNESS *r); /***************************************************************** *# 1. The object. *****************************************************************/ /* Function: esl_randomness_Create() * Synopsis: Create the default strong random number generator. * * Purpose: Create a random number generator using * a given random seed. The must be $\geq 0$. * * The default random number generator uses the Mersenne * Twister MT19937 algorithm \citep{Matsumoto98}. It has a * period of $2^{19937}-1$, and equidistribution over * $2^{32}$ values. * * If is $>0$, the random number generator is * reproducibly initialized with that seed. Two RNGs * created with the same nonzero seed will give exactly the * same stream of pseudorandom numbers. This allows you to * make reproducible stochastic simulations, for example. * * If is 0, an arbitrary seed is chosen. * Internally, the arbitrary seed is produced by a * combination of the current and the process id * (if available; POSIX only). Two RNGs created with * =0 will very probably (but not assuredly) give * different streams of pseudorandom numbers. The true seed * can be retrieved from the object using * . The strategy used for * choosing the arbitrary seed is predictable, so it is * not secure in any sense, especially in the cryptographic * sense. * * Args: seed $>= 0$. * * Returns: an initialized on success. * Caller free's with . * * Throws: on failure. * * Xref: SRE:STL8/p57. * SRE:J5/21: Mersenne Twister. */ ESL_RANDOMNESS * esl_randomness_Create(uint32_t seed) { ESL_RANDOMNESS *r = NULL; int status; ESL_ALLOC(r, sizeof(ESL_RANDOMNESS)); r->type = eslRND_MERSENNE; r->mti = 0; r->x = 0; r->seed = 0; esl_randomness_Init(r, seed); return r; ERROR: return NULL; } /* Function: esl_randomness_CreateFast() * Synopsis: Create the alternative fast generator. * * Purpose: Same as , except that a simple * linear congruential generator (LCG) will be used. * * This is a low quality generator. Successive samples from * an LCG are correlated, and it has a relatively short * period. IT SHOULD NOT BE USED FOR SERIOUS * SIMULATIONS. Rather, it's a quick and dirty RNG where * you're sure that speed is more important than the * quality of your random numbers. For a high quality RNG, * use instead. * * This is a $(a=69069, c=1)$ LCG, with a period of * $2^{32}$. * * It is about 20x faster to initialize the generator, and * about 25\% faster to sample each number, compared to the * default Mersenne Twister. (In most cases, this speed * differential is not worth the degradation in * quality. Since we made MT our default generator, the * speed advantage of the LCG essentially disappeared, so * in some sense this is legacy code.) * * Here's an example of how serial correlation arises in an * LCG, and how it can lead to serious (and difficult to * diagnose) failure in a Monte Carlo simulation. Recall * that an LCG calculates $x_{i+1} = ax_i + c$. Suppose * $x_i$ is small: in the range 0..6000, say, as a specific * example. Now $x_{i+1}$ cannot be larger than 4.1e8, for * an LCG with $a=69069$,$c=1$. So if you take a sample and * test whether it is $< 1e-6$ (say), the next sample will * be in a range of about 0..0.1, rather than being uniform * on 0..1. * * Args: seed $>= 0$. * * Returns: an initialized on success. * Caller free's with . * * Throws: on failure. * * Xref: SRE:J5/44: for accidental proof that the period is * indeed 2^32. */ ESL_RANDOMNESS * esl_randomness_CreateFast(uint32_t seed) { ESL_RANDOMNESS *r = NULL; int status; ESL_ALLOC(r, sizeof(ESL_RANDOMNESS)); r->type = eslRND_FAST; r->mti = 0; r->x = 0; r->seed = 0; esl_randomness_Init(r, seed); return r; ERROR: return NULL; } /* Function: esl_randomness_CreateTimeseeded() * Synopsis: Create an RNG with a quasirandom seed. * * Purpose: Like , but it initializes the * the random number generator using a POSIX call * (number of seconds since the POSIX epoch). * * This function is deprecated. Use * instead. * * Returns: an initialized on success. * Caller free's with . * * Throws: on failure. * * Xref: SRE:STL8/p57. */ ESL_RANDOMNESS * esl_randomness_CreateTimeseeded(void) { return esl_randomness_Create(0); } /* Function: esl_randomness_Init() * Synopsis: Reinitialize a RNG. * * Purpose: Reset and reinitialize an existing * object with a new seed. * * Not generally recommended. This does not make a * sequence of numbers more random, and may make it less * so. Sometimes, though, it's useful to reseed an RNG * to guarantee a particular reproducible series of * pseudorandom numbers at an arbitrary point in a program; * HMMER does this, for example, to guarantee the same * results from the same HMM/sequence comparison regardless * of where in a search the HMM or sequence occurs. * * Args: r - randomness object * seed - new seed to use; >0. * * Returns: on success. * * Throws: if seed is $<= 0$. * * Xref: SRE:STL8/p57. */ int esl_randomness_Init(ESL_RANDOMNESS *r, uint32_t seed) { if (seed == 0) seed = choose_arbitrary_seed(); if (r->type == eslRND_MERSENNE) { mersenne_seed_table(r, seed); mersenne_fill_table(r); } else { r->seed = seed; r->x = jenkins_mix3(seed, 87654321, 12345678); /* arbitrary dispersion of the seed */ if (r->x == 0) r->x = 42; /* make sure we don't have a zero */ } return eslOK; } /* Function: esl_randomness_GetSeed() * Synopsis: Returns the value of RNG's seed. * * Purpose: Return the value of the seed. */ uint32_t esl_randomness_GetSeed(const ESL_RANDOMNESS *r) { return r->seed; } /* Function: esl_randomness_Destroy() * Synopsis: Free an RNG. * * Purpose: Frees an object. */ void esl_randomness_Destroy(ESL_RANDOMNESS *r) { free(r); return; } /*----------- end of ESL_RANDOMNESS object functions --------------*/ /***************************************************************** *# 2. The generators and *****************************************************************/ /* Function: esl_random() * Synopsis: Generate a uniform random deviate on [0,1) * * Purpose: Returns a uniform deviate x, $0.0 <= x < 1.0$, given * RNG . * * Uses the original Mersenne Twister algorithm, MT19937 * [Matsumoto98]. This generator has a period of $2^{19937} - * 1$. It generates uniformly distributed variates on the * interval $0..2^{32}-1$. * * If you cast the return value to float, the [0,1) interval * guarantee is lost because values close to 1 will round to * 1.0. * * Notes: Easel previously used a reimplementation of ran2() from * Numerical Recipes in C, which uses L'Ecuyer's algorithm * for combining output of two linear congruential * generators, plus a Bays-Durham shuffle \citep{Press93}. * MT is about 10x faster. * * Returns: a uniformly distribute random deviate on interval * $0.0 \leq x < 1.0$. */ double esl_random(ESL_RANDOMNESS *r) { uint32_t x = (r->type == eslRND_MERSENNE) ? mersenne_twister(r) : knuth(r); return ((double) x / 4294967296.0); /* 2^32: normalizes to [0,1) */ } static uint32_t knuth(ESL_RANDOMNESS *r) { r->x *= 69069; r->x += 1; return r->x; } /* mersenne_twister() and other mersenne_*() functions below: * A simple serial implementation of the original Mersenne Twister * algorithm [Matsumoto98]. * * There are more sophisticated and faster implementations of MT, using * vector instructions and/or directly generating IEEE754 doubles * bitwise rather than doing an expensive normalization. We can * improve the implementation later if necessary, but even the basic * MT offers ~10x speed improvement over Easel's previous RNG. * [SRE, 30 May 09, Stockholm] */ static uint32_t mersenne_twister(ESL_RANDOMNESS *r) { uint32_t x; if (r->mti >= 624) mersenne_fill_table(r); x = r->mt[r->mti++]; x ^= (x>>11); x ^= (x<< 7) & 0x9d2c5680; x ^= (x<<15) & 0xefc60000; x ^= (x>>18); return x; } /* mersenne_seed_table() * Initialize the state of the RNG from a seed. * Uses the knuth linear congruential generator. */ static void mersenne_seed_table(ESL_RANDOMNESS *r, uint32_t seed) { int z; r->seed = seed; r->mt[0] = seed; for (z = 1; z < 624; z++) r->mt[z] = 69069 * r->mt[z-1]; return; } /* mersenne_fill_table() * Refill the table with 624 new random numbers. * We do this whenever we've reseeded, or when we * run out of numbers. */ static void mersenne_fill_table(ESL_RANDOMNESS *r) { uint32_t y; int z; static uint32_t mag01[2] = { 0x0, 0x9908b0df }; for (z = 0; z < 227; z++) /* 227 = N-M = 624-397 */ { y = (r->mt[z] & 0x80000000) | (r->mt[z+1] & 0x7fffffff); r->mt[z] = r->mt[z+397] ^ (y>>1) ^ mag01[(int)(y & 0x1)]; /* yes, the (int) cast is necessary; xref bug #e7; some compilers may try to cast y to signed int otherwise, to use it in an array index */ } for (; z < 623; z++) { y = (r->mt[z] & 0x80000000) | (r->mt[z+1] & 0x7fffffff); r->mt[z] = r->mt[z-227] ^ (y>>1) ^ mag01[(int)(y & 0x1)]; } y = (r->mt[623] & 0x80000000) | (r->mt[0] & 0x7fffffff); r->mt[623] = r->mt[396] ^ (y>>1) ^ mag01[(int)(y & 0x1)]; r->mti = 0; return; } /* choose_arbitrary_seed() * Return a 'quasirandom' seed > 0. * This could be a *lot* better than it is now; see RFC1750 * for a discussion of securely seeding RNGs. */ static uint32_t choose_arbitrary_seed(void) { uint32_t a = (uint32_t) time ((time_t *) NULL); uint32_t b = 87654321; /* anything nonzero */ uint32_t c = 12345678; /* anything nonzero. jenkins' mix3 needs 3 numbers; add an arbitrary one */ uint32_t seed; #ifdef HAVE_GETPID b = (uint32_t) getpid(); /* preferable b choice, if we have POSIX getpid(); else both b,c are arbitrary */ #endif seed = jenkins_mix3(a,b,c); /* try to decorrelate closely spaced choices of pid/time */ return (seed == 0) ? 42 : seed; /* 42 is entirely arbitrary, just to avoid seed==0. */ } /* jenkins_mix3() * * from Bob Jenkins: given a,b,c, generate a number that's distributed * reasonably uniformly on the interval 0..2^32-1 even for closely * spaced choices of a,b,c. */ static uint32_t jenkins_mix3(uint32_t a, uint32_t b, uint32_t c) { a -= b; a -= c; a ^= (c>>13); b -= c; b -= a; b ^= (a<<8); c -= a; c -= b; c ^= (b>>13); a -= b; a -= c; a ^= (c>>12); b -= c; b -= a; b ^= (a<<16); c -= a; c -= b; c ^= (b>>5); a -= b; a -= c; a ^= (c>>3); b -= c; b -= a; b ^= (a<<10); c -= a; c -= b; c ^= (b>>15); return c; } /*----------- end of esl_random() --------------*/ /***************************************************************** *# 3. Debugging and development tools *****************************************************************/ /* Function: esl_randomness_Dump() * Synopsis: Dump ESL_RANDOMNESS object to stream, for debugging/examination. */ int esl_randomness_Dump(FILE *fp, ESL_RANDOMNESS *r) { if (r->type == eslRND_FAST) { fputs ("type = knuth\n", fp ); fprintf(fp, "state = %" PRIu32 "\n", r->x); fprintf(fp, "seed = %" PRIu32 "\n", r->seed); } else if (r->type == eslRND_MERSENNE) { int i,j; fputs ("type = mersenne twister\n", fp ); fprintf(fp, "mti = %d (0..623)\n", r->mti); fprintf(fp, "mt[mti] = %" PRIu32 "\n", r->mt[r->mti]); fprintf(fp, "%6d: ", 0); for (i = 0, j=0; i < 624; i++) { fprintf(fp, "%11" PRIu32 " ", r->mt[i]); if (++j == 20) { fprintf(fp, "\n%6d: ", i+1); j=0; } } fputs("\n", fp); } return eslOK; } /*----------- end, debugging/development tools ------------------*/ /***************************************************************** *# 4. Other fundamental sampling (including Gaussian, gamma) *****************************************************************/ /* Function: esl_rnd_UniformPositive() * Synopsis: Generate a uniform positive random deviate on interval (0,1). * * Purpose: Same as , but assure $0 < x < 1$; * (positive uniform deviate). */ double esl_rnd_UniformPositive(ESL_RANDOMNESS *r) { double x; do { x = esl_random(r); } while (x == 0.0); return x; } /* Function: esl_rnd_Gaussian() * Synopsis: Generate a Gaussian-distributed sample. * * Purpose: Pick a Gaussian-distributed random variable * with a given and standard deviation , and * return it. * * Implementation is derived from the public domain * RANLIB.c function, written by Barry W. Brown * and James Lovato (M.D. Anderson Cancer Center, Texas * USA) using the method described in * \citep{AhrensDieter73}. * * Method: Impenetrability of the code is to be blamed on * FORTRAN/f2c lineage. * * Args: r - ESL_RANDOMNESS object * mean - mean of the Gaussian we're sampling from * stddev - standard deviation of the Gaussian */ double esl_rnd_Gaussian(ESL_RANDOMNESS *r, double mean, double stddev) { long i; double snorm,u,s,ustar,aa,w,y,tt; /* These static's are threadsafe: they are magic constants * we will not touch. */ static double a[32] = { 0.0,3.917609E-2,7.841241E-2,0.11777,0.1573107,0.1970991,0.2372021,0.2776904, 0.3186394,0.36013,0.4022501,0.4450965,0.4887764,0.5334097,0.5791322, 0.626099,0.6744898,0.7245144,0.7764218,0.8305109,0.8871466,0.9467818, 1.00999,1.077516,1.150349,1.229859,1.318011,1.417797,1.534121,1.67594, 1.862732,2.153875 }; static double d[31] = { 0.0,0.0,0.0,0.0,0.0,0.2636843,0.2425085,0.2255674,0.2116342,0.1999243, 0.1899108,0.1812252,0.1736014,0.1668419,0.1607967,0.1553497,0.1504094, 0.1459026,0.14177,0.1379632,0.1344418,0.1311722,0.128126,0.1252791, 0.1226109,0.1201036,0.1177417,0.1155119,0.1134023,0.1114027,0.1095039 }; static double t[31] = { 7.673828E-4,2.30687E-3,3.860618E-3,5.438454E-3,7.0507E-3,8.708396E-3, 1.042357E-2,1.220953E-2,1.408125E-2,1.605579E-2,1.81529E-2,2.039573E-2, 2.281177E-2,2.543407E-2,2.830296E-2,3.146822E-2,3.499233E-2,3.895483E-2, 4.345878E-2,4.864035E-2,5.468334E-2,6.184222E-2,7.047983E-2,8.113195E-2, 9.462444E-2,0.1123001,0.136498,0.1716886,0.2276241,0.330498,0.5847031 }; static double h[31] = { 3.920617E-2,3.932705E-2,3.951E-2,3.975703E-2,4.007093E-2,4.045533E-2, 4.091481E-2,4.145507E-2,4.208311E-2,4.280748E-2,4.363863E-2,4.458932E-2, 4.567523E-2,4.691571E-2,4.833487E-2,4.996298E-2,5.183859E-2,5.401138E-2, 5.654656E-2,5.95313E-2,6.308489E-2,6.737503E-2,7.264544E-2,7.926471E-2, 8.781922E-2,9.930398E-2,0.11556,0.1404344,0.1836142,0.2790016,0.7010474 }; u = esl_random(r); s = 0.0; if(u > 0.5) s = 1.0; u += (u-s); u = 32.0*u; i = (long) (u); if(i == 32) i = 31; if(i == 0) goto S100; /* * START CENTER */ ustar = u-(double)i; aa = a[i-1]; S40: if (ustar <= t[i-1]) goto S60; w = (ustar - t[i-1]) * h[i-1]; S50: /* * EXIT (BOTH CASES) */ y = aa+w; snorm = y; if(s == 1.0) snorm = -y; return (stddev*snorm + mean); S60: /* * CENTER CONTINUED */ u = esl_random(r); w = u*(a[i]-aa); tt = (0.5*w+aa)*w; goto S80; S70: tt = u; ustar = esl_random(r); S80: if(ustar > tt) goto S50; u = esl_random(r); if(ustar >= u) goto S70; ustar = esl_random(r); goto S40; S100: /* * START TAIL */ i = 6; aa = a[31]; goto S120; S110: aa += d[i-1]; i += 1; S120: u += u; if(u < 1.0) goto S110; u -= 1.0; S140: w = u*d[i-1]; tt = (0.5*w+aa)*w; goto S160; S150: tt = u; S160: ustar = esl_random(r); if(ustar > tt) goto S50; u = esl_random(r); if(ustar >= u) goto S150; u = esl_random(r); goto S140; } /* subfunctions that esl_rnd_Gamma() is going to call: */ static double gamma_ahrens(ESL_RANDOMNESS *r, double a) /* for a >= 3 */ { double V; /* uniform deviates */ double X,Y; double test; do { do { /* generate candidate X */ Y = tan(eslCONST_PI * esl_random(r)); X = Y * sqrt(2.*a -1.) + a - 1.; } while (X <= 0.); /* accept/reject X */ V = esl_random(r); test = (1+Y*Y) * exp( (a-1.)* log(X/(a-1.)) - Y*sqrt(2.*a-1.)); } while (V > test); return X; } static double gamma_integer(ESL_RANDOMNESS *r, unsigned int a) /* for small integer a, a < 12 */ { int i; double U,X; U = 1.; for (i = 0; i < a; i++) U *= esl_rnd_UniformPositive(r); X = -log(U); return X; } static double gamma_fraction(ESL_RANDOMNESS *r, double a) /* for fractional a, 0 < a < 1 */ { /* Knuth 3.4.1, exercise 16, pp. 586-587 */ double p, U, V, X, q; p = eslCONST_E / (a + eslCONST_E); do { U = esl_random(r); V = esl_rnd_UniformPositive(r); if (U < p) { X = pow(V, 1./a); q = exp(-X); } else { X = 1. - log(V); q = pow(X, a-1.); } U = esl_random(r); } while (U >= q); return X; } /* Function: esl_rnd_Gamma() * Synopsis: Returns a random deviate from a Gamma(a, 1) distribution. * * Purpose: Return a random deviate distributed as Gamma(a, 1.) * \citep[pp. 133--134]{Knu-81a}. * * The implementation follows not only Knuth \citep{Knu-81a}, * but also relied on examination of the implementation in * the GNU Scientific Library (libgsl) \citep{Galassi06}. * * Args: r - random number generation seed * a - order of the gamma function; a > 0 * * Throws: for $a <= 0$. */ double esl_rnd_Gamma(ESL_RANDOMNESS *r, double a) { double aint; aint = floor(a); if (a == aint && a < 12.) return gamma_integer(r, (unsigned int) a); else if (a > 3.) return gamma_ahrens(r, a); else if (a < 1.) return gamma_fraction(r, a); else return gamma_integer(r, aint) + gamma_fraction(r, a-aint); return eslOK; } /***************************************************************** *# 5. Multinomial sampling from discrete probability n-vectors *****************************************************************/ /* Function: esl_rnd_DChoose() * Synopsis: Return random choice from discrete multinomial distribution. * * Purpose: Make a random choice from a normalized discrete * distribution

of elements, where

* is double-precision. Returns the index of the * selected element, $0..N-1$. * *

must be a normalized probability distribution * (i.e. must sum to one). Sampling distribution is * undefined otherwise: that is, a choice will always * be returned, but it might be an arbitrary one. * * All $p_i$ must be $>$ in order to * have a non-zero probability of being sampled. * * is the same, but for floats in

, * and all $p_i$ must be $>$ . */ int esl_rnd_DChoose(ESL_RANDOMNESS *r, const double *p, int N) { double norm = 0.0; /* ~ 1.0 */ double sum = 0.0; /* integrated prob */ double roll = esl_random(r); /* random fraction */ int i; /* counter over the probs */ /* we need to deal with finite roundoff error in p's sum */ for (i = 0; i < N; i++) norm += p[i]; ESL_DASSERT1((norm > 0.999 && norm < 1.001)); for (i = 0; i < N; i++) { sum += p[i]; if (roll < (sum / norm) ) return i; } esl_fatal("unreached code was reached. universe collapses."); return 0; /*notreached*/ } int esl_rnd_FChoose(ESL_RANDOMNESS *r, const float *p, int N) { /* Computing in double precision is important: * casting to (float) gives a [0,1] number instead of [0,1). */ double norm = 0.0; /* ~ 1.0 */ double sum = 0.0; /* integrated prob */ double roll = esl_random(r); /* random fraction */ int i; /* counter over the probs */ for (i = 0; i < N; i++) norm += p[i]; ESL_DASSERT1((norm > 0.99 && norm < 1.01)); for (i = 0; i < N; i++) { sum += p[i]; if (roll < (sum / norm) ) return i; } esl_fatal("unreached code was reached. universe collapses."); return 0; /*notreached*/ } /* Function: esl_rnd_DChooseCDF() * Synopsis: Return random choice from cumulative multinomial distribution. * * Purpose: Given a random number generator and a cumulative * multinomial distribution , sample an element * <0..N-1> from that distribution. Return the index <0..N-1>. * * Caller should be sure that is indeed a * cumulative multinomial distribution -- in particular, that * is tolerably close to 1.0 (within roundoff error). * * When sampling many times from the same multinomial * distribution

, it will generally be faster to * calculate the CDF once using , * then sampling many times from the CDF with * , as opposed to calling * many times, because * has to calculated the CDF before * sampling. This also gives you a bit more control over * error detection: you can make sure that the CDF is ok (p * does sum to ~1.0) before doing a lot of sampling from * it. * * is the same, but for * a single-precision float . * * Args: r - random number generator * cdf - cumulative multinomial distribution, cdf[0..N-1] * N - number of elements in * * Returns: index 0..N-1 of the randomly sampled choice from . * * Note: For large N, it might be advantageous to bisection search the * cdf. For typical N in Easel (up to 20, for amino acid * prob vectors, for example), the naive code below is * faster. We could revisit this if we start sampling * larger vectors. */ int esl_rnd_DChooseCDF(ESL_RANDOMNESS *r, const double *cdf, int N) { double roll = esl_random(r); /* uniform 0.0 <= x < 1.0 */ int i; ESL_DASSERT1((cdf[0] >= 0.0)); ESL_DASSERT1((cdf[N-1] > 0.999 && cdf[N-1] < 1.001)); for (i = 0; i < N; i++) if (roll < cdf[i] / cdf[N-1]) return i; esl_fatal("unreached code is reached. universe goes foom"); return 0; /*notreached*/ } int esl_rnd_FChooseCDF(ESL_RANDOMNESS *r, const float *cdf, int N) { double roll = esl_random(r); /* uniform 0.0 <= x < 1.0. must be double, not float, to guarantee x <1 */ int i; ESL_DASSERT1((cdf[0] >= 0.0)); ESL_DASSERT1((cdf[N-1] > 0.99 && cdf[N-1] < 1.01)); for (i = 0; i < N; i++) if (roll < cdf[i]/cdf[N-1]) return i; esl_fatal("unreached code is reached. universe goes foom"); return 0; /*notreached*/ } /***************************************************************** * 6. Benchmark driver *****************************************************************/ #ifdef eslRANDOM_BENCHMARK /* gcc -O3 -malign-double -o esl_random_benchmark -I. -L. -DeslRANDOM_BENCHMARK esl_random.c -leasel -lm ./esl_random_benchmark -N 1000000000 ./esl_random_benchmark -f -N 1000000000 ./esl_random_benchmark -r -N1000000 ./esl_random_benchmark -fr -N 1000000000 esl_random() esl_randomness_Init() iter cpu time per call iter cpu time per call ---- -------- -------- ---- ---------- --------- 27 Dec 08 on wanderoo: 1e7 0.78s 78 nsec 1e6 2.08s 2.1 usec ran2() from NR 30 May 09 on wanderoo: 1e9 8.39s 8 nsec 1e6 5.98s 6.0 usec Mersenne Twister 1e9 5.73s 6 nsec 1e8 2.51s 0.03 usec Knuth */ #include "easel.h" #include "esl_composition.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_stopwatch.h" #include "esl_vectorops.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "benchmark DChooseCDF()", 0 }, { "-d", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "benchmark DChoose()", 0 }, { "-f", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "run fast version instead of MT19937", 0 }, { "-r", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "benchmark _Init(), not just random()", 0 }, { "-N", eslARG_INT, "10000000",NULL, NULL, NULL, NULL, NULL, "number of trials", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "benchmarking speed of random number generator"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = (esl_opt_GetBoolean(go, "-f") == TRUE ? esl_randomness_CreateFast(42) : esl_randomness_Create(42)); ESL_STOPWATCH *w = esl_stopwatch_Create(); int N = esl_opt_GetInteger(go, "-N"); double p[20]; double cdf[20]; esl_composition_BL62(p); esl_vec_DCDF(p, 20, cdf); esl_stopwatch_Start(w); if (esl_opt_GetBoolean(go, "-c")) { while (N--) esl_rnd_DChoose(r, p, 20); } else if (esl_opt_GetBoolean(go, "-d")) { while (N--) esl_rnd_DChooseCDF(r, cdf, 20); } else if (esl_opt_GetBoolean(go, "-r")) { while (N--) esl_randomness_Init(r, 42); } else { while (N--) esl_random(r); } esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU Time: "); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*eslRANDOM_BENCHMARK*/ /*----------------- end, benchmark driver -----------------------*/ /***************************************************************** * 7. Unit tests. *****************************************************************/ #ifdef eslRANDOM_TESTDRIVE #include "esl_vectorops.h" #include "esl_stats.h" #include "esl_dirichlet.h" /* The esl_random() unit test: * a binned frequency test. */ static void utest_random(ESL_RANDOMNESS *r, int n, int nbins, int be_verbose) { char msg[] = "esl_random() unit test failed"; int *counts = NULL; double X2p = 0.; int i; int sample; double X2, exp, diff; if ((counts = malloc(sizeof(int) * nbins)) == NULL) esl_fatal(msg); esl_vec_ISet(counts, nbins, 0); for (i = 0; i < n; i++) { sample = esl_rnd_Roll(r, nbins); if (sample < 0 || sample >= nbins) esl_fatal(msg); counts[sample]++; } /* X^2 value: \sum (o_i - e_i)^2 / e_i */ for (X2 = 0., i = 0; i < nbins; i++) { exp = (double) n / (double) nbins; diff = (double) counts[i] - exp; X2 += diff*diff/exp; } if (esl_stats_ChiSquaredTest(nbins, X2, &X2p) != eslOK) esl_fatal(msg); if (be_verbose) printf("random(): \t%g\n", X2p); if (X2p < 0.01) esl_fatal(msg); free(counts); return; } /* The DChoose() and FChoose() unit tests. */ static void utest_choose(ESL_RANDOMNESS *r, int n, int nbins, int be_verbose) { double *pd = NULL; /* probability vector, double */ double *pdc = NULL; /* CDF, double */ float *pf = NULL; /* probability vector, float */ float *pfc = NULL; /* CDF, float */ int *ct = NULL; int i; double X2, diff, exp, X2p; if ((pd = malloc(sizeof(double) * nbins)) == NULL) esl_fatal("malloc failed"); if ((pdc = malloc(sizeof(double) * nbins)) == NULL) esl_fatal("malloc failed"); if ((pf = malloc(sizeof(float) * nbins)) == NULL) esl_fatal("malloc failed"); if ((pfc = malloc(sizeof(float) * nbins)) == NULL) esl_fatal("malloc failed"); if ((ct = malloc(sizeof(int) * nbins)) == NULL) esl_fatal("malloc failed"); /* Sample a random multinomial probability vector. */ if (esl_dirichlet_DSampleUniform(r, nbins, pd) != eslOK) esl_fatal("dirichlet sample failed"); esl_vec_D2F(pd, nbins, pf); /* Test esl_rnd_DChoose(): * sample observed counts, chi-squared test against expected */ esl_vec_ISet(ct, nbins, 0); for (i = 0; i < n; i++) ct[esl_rnd_DChoose(r, pd, nbins)]++; for (X2 = 0., i=0; i < nbins; i++) { exp = (double) n * pd[i]; diff = (double) ct[i] - exp; X2 += diff*diff/exp; } if (esl_stats_ChiSquaredTest(nbins, X2, &X2p) != eslOK) esl_fatal("chi square eval failed"); if (be_verbose) printf("DChoose(): \t%g\n", X2p); if (X2p < 0.01) esl_fatal("chi squared test failed"); /* Repeat above for FChoose(). */ esl_vec_ISet(ct, nbins, 0); for (i = 0; i < n; i++) ct[esl_rnd_FChoose(r, pf, nbins)]++; for (X2 = 0., i=0; i < nbins; i++) { exp = (double) n * pd[i]; diff = (double) ct[i] - exp; X2 += diff*diff/exp; } if (esl_stats_ChiSquaredTest(nbins, X2, &X2p) != eslOK) esl_fatal("chi square eval failed"); if (be_verbose) printf("FChoose(): \t%g\n", X2p); if (X2p < 0.01) esl_fatal("chi squared test failed"); /* esl_rnd_DChooseCDF(). */ esl_vec_ISet(ct, nbins, 0); esl_vec_DCDF(pd, nbins, pdc); for (i = 0; i < n; i++) ct[esl_rnd_DChooseCDF(r, pdc, nbins)]++; for (X2 = 0., i=0; i < nbins; i++) { exp = (double) n * pd[i]; diff = (double) ct[i] - exp; X2 += diff*diff/exp; } if (esl_stats_ChiSquaredTest(nbins, X2, &X2p) != eslOK) esl_fatal("chi square eval failed"); if (be_verbose) printf("DChoose(): \t%g\n", X2p); if (X2p < 0.01) esl_fatal("chi squared test failed"); /* esl_rnd_FChooseCDF() */ esl_vec_ISet(ct, nbins, 0); esl_vec_FCDF(pf, nbins, pfc); for (i = 0; i < n; i++) ct[esl_rnd_FChooseCDF(r, pfc, nbins)]++; for (X2 = 0., i=0; i < nbins; i++) { exp = (double) n * pf[i]; diff = (double) ct[i] - exp; X2 += diff*diff/exp; } if (esl_stats_ChiSquaredTest(nbins, X2, &X2p) != eslOK) esl_fatal("chi square eval failed"); if (be_verbose) printf("DChoose(): \t%g\n", X2p); if (X2p < 0.01) esl_fatal("chi squared test failed"); free(pd); free(pdc); free(pf); free(pfc); free(ct); return; } #endif /*eslRANDOM_TESTDRIVE*/ /*-------------------- end, unit tests --------------------------*/ /***************************************************************** * 8. Test driver. *****************************************************************/ #ifdef eslRANDOM_TESTDRIVE /* gcc -g -Wall -o esl_random_utest -L. -I. -DeslRANDOM_TESTDRIVE esl_random.c -leasel -lm */ #include "esl_config.h" #include #include "easel.h" #include "esl_dirichlet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_vectorops.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, {"-b", eslARG_INT, "20", NULL, "n>0",NULL, NULL, NULL, "number of test bins", 0}, {"-n", eslARG_INT, "1000000", NULL, "n>0",NULL, NULL, NULL, "number of samples", 0}, {"-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0}, {"-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show verbose output", 0}, {"--mtbits",eslARG_STRING,NULL,NULL, NULL, NULL, NULL, NULL, "save MT bit file for NIST benchmark",0}, {"--kbits", eslARG_STRING,NULL,NULL, NULL, NULL, NULL, NULL, "save Knuth bit file for NIST benchmark",0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for random module"; static int save_bitfile(char *bitfile, ESL_RANDOMNESS *r, int n); int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r1 = esl_randomness_Create(esl_opt_GetInteger(go, "-s")); ESL_RANDOMNESS *r2 = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); char *mtbitfile = esl_opt_GetString (go, "--mtbits"); char *kbitfile = esl_opt_GetString (go, "--kbits"); int nbins = esl_opt_GetInteger(go, "-b"); int n = esl_opt_GetInteger(go, "-n"); int be_verbose = esl_opt_GetBoolean(go, "-v"); utest_random(r1, n, nbins, be_verbose); utest_choose(r1, n, nbins, be_verbose); utest_random(r2, n, nbins, be_verbose); utest_choose(r2, n, nbins, be_verbose); if (mtbitfile) save_bitfile(mtbitfile, r1, n); if (kbitfile) save_bitfile(kbitfile, r2, n); esl_randomness_Destroy(r1); esl_randomness_Destroy(r2); esl_getopts_Destroy(go); return 0; } static int save_bitfile(char *bitfile, ESL_RANDOMNESS *r, int n) { FILE *fp = NULL; int b,i; long x; /* Open the file. */ if ((fp = fopen(bitfile, "w")) == NULL) esl_fatal("failed to open %s for writing", bitfile); /* Sample random numbers, output 32n random bits to the file. */ for (i = 0; i < n; i++) { x = (r->type == eslRND_FAST ? knuth(r) : mersenne_twister(r)); /* generate a 32 bit random variate by MT19937 */ for (b = 0; b < 32; b++) { if (x & 01) fprintf(fp, "1"); else fprintf(fp, "0"); x >>= 1; } fprintf(fp, "\n"); } fclose(fp); return eslOK; } #endif /*eslRANDOM_TESTDRIVE*/ /***************************************************************** * 9. Example. *****************************************************************/ #ifdef eslRANDOM_EXAMPLE /*::cexcerpt::random_example::begin::*/ /* compile: gcc -g -Wall -I. -o esl_random_example -DeslRANDOM_EXAMPLE esl_random.c easel.c -lm * run: ./random_example 42 */ #include #include "easel.h" #include "esl_random.h" int main(int argc, char **argv) { long seed = atoi(argv[1]); ESL_RANDOMNESS *r = esl_randomness_Create(seed); int n = 1076; printf("RNG seed: %" PRIu32 "\n", esl_randomness_GetSeed(r)); printf("A sequence of %d pseudorandom numbers:\n", n); while (n--) printf("%f\n", esl_random(r)); esl_randomness_Dump(stdout, r); printf("%f\n", esl_random(r)); esl_randomness_Dump(stdout, r); printf("%f\n", esl_random(r)); esl_randomness_Destroy(r); return 0; } /*::cexcerpt::random_example::end::*/ #endif /*eslRANDOM_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_random.c 887 2013-09-24 09:41:22Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_random.c $ *****************************************************************/ hmmer-3.1b2/easel/BUGTRAX0000664361611702660230000001710712473612604014426 0ustar wheelerteddyID e11 TITLE Unicode characters in MSA files crash MSA parsers AFFECTS - FIXED_IN - STATUS CLOSED XREF - REPORTED_BY Jody Clements OPENED_DATE SRE, Thu Jan 22 14:22:54 2015 CLOSED_DATE SRE, Thu Jan 22 14:22:56 2015 DESCRIPTION MSA file parsers require ASCII input because they use an inmap[0..127], but were not validating user input. Unicode characters result in out of bounds accesses and corruption. (Unaligned file parsers do validate.) Fix is to have esl_abc_dsqcat_noalloc() (for digital mode) and esl_strmapcat_noalloc() (for text mode) validate that each char is ASCII. // ID e10 TITLE Clustal format allows optional trailing coords AFFECTS - FIXED_IN - STATUS CLOSED XREF - REPORTED_BY sumudu , 27 Jan 2014 OPENED_DATE 28 Jan 2014 CLOSED_DATE 28 Jan 2014 DESCRIPTION Clustal format allows an optional trailing seq coord number on each line, but we weren't allowing for that. // ID e9 TITLE Segmentation fault in esl-stranslate AFFECTS H3.1b1 FIXED_IN - STATUS CLOSED XREF - REPORTED_BY Jaina Mistry OPENED_DATE TJW, Tue Sep 24 04:57:08 2013 CLOSED_DATE TJW, Tue Sep 24 04:57:08 2013 DESCRIPTION esl-stranslate crashed with seg fault if any of the 6 frames ended with a stop codon. An extra sequence object was created to hold the "next" ORF, but no ORF followed; the result was a sequence object with no name or sequence, and a resulting seg fault when that sequence's information was printed. // ID e8 TITLE esl_threads fails to compile AFFECTS - FIXED_IN - STATUS CLOSED XREF - REPORTED_BY "Campbell, Christopher D" OPENED_DATE SRE, Thu Mar 8 23:04:52 2012 CLOSED_DATE SRE, Thu Mar 8 23:04:53 2012 DESCRIPTION HMMER3.0 failed to build for him with MPI support; he traced problem to esl_threads.h, which was missing an #include . // ID e7 TITLE with icc v12, esl_random() sequence is changed AFFECTS - FIXED_IN - STATUS CLOSED XREF SRE:notebook/1213-icc12-random/ REPORTED_BY detected in unit tests when we switched to icc v12 OPENED_DATE SRE, Thu Dec 15 11:32:35 2011 CLOSED_DATE SRE, Thu Dec 15 11:58:08 2011 DESCRIPTION When we upgraded to Intel icc version 12, in HMMER, the nhmmer_generic unit test failed. Travis traced it to esl-shuffle generating a different sequence, despite fixed RNG seed. The problem only occurs with icc -O -fPIC. In esl_random.c::mersenne_fill_table(), the MT incantation is y = (r->mt[z] & 0x80000000) | (r->mt[z+1] & 0x7fffffff); r->mt[z] = r->mt[z-227] ^ (y>>1) ^ mag01[y & 0x1]; with y declared as an unsigned 32-bit int. The problem is mag01[y & 0x1]. I think icc12 *may* (depending on optimization and other flags) be casting y to a signed int before it does the binary AND. The result of casting a large unsigned y to a signed int is implementation-defined and unsafe, so if the compiler does indeed try to cast y to signed int we're in trouble. The fix is to dictate the cast explicitly: r->mt[z] = r->mt[z-227] ^ (y>>1) ^ mag01[(int)(y & 0x1)]; and this should be guaranteed to work, because we know that the result of (y & 0x1) is 0 or 1, and C99 guarantees that we can safely cast it to signed int 0 or 1. Arguably this is a compiler bug. The C99 standard says that an array index may be any integer type; it does not specify signed or unsigned. [note added 8 Mar 2012: Intel support confirmed, compiler bug.] // ID e6 TITLE Running out of disk space corrupts outputs AFFECTS HMMER 3.0 and earlier FIXED_IN - STATUS CLOSED XREF SRE:J8/118-119 REPORTED_BY Maarten Hekkelman OPENED_DATE SRE, 13 Oct 2011 CLOSED_DATE SRE, Mon Oct 24 13:03:45 2011 DESCRIPTION jackhmmer corrupted an output file. Tracked to the user's disk filling up. Return status of fprintf(), fputs(), etc. calls was not being checked, so Easel/HMMER were not detecting the problem. Systematically added error return status checking to most printing calls, using ESL_{X}EXCEPTION_SYS(), returning eslEWRITE Easel error codes. Easel _Write() interface is now documented to require such checking. // ID e5 TITLE Blank text line following #=GF handled improperly. AFFECTS HMMER 3.0 and earlier FIXED_IN - STATUS CLOSED XREF J6/92 REPORTED_BY Sean Powell OPENED_DATE SRE, Tue Jul 13 09:25:29 2010 CLOSED_DATE - DESCRIPTION Easel Stockholm parser allows blank lines for #=GF DE annotation, but HMMER strictly requires DESC format in save files. Thus hmmbuild can generate a file that other HMMER programs won't parse. Stockholm parser does need to allow blank lines on #=GF CC, for legacy reasons (human-readable spacing in CC comments). All other #=GF lines rigorously enforce the presence of text. Revised esl_msa.c::parse_gf(). Added i3-blank-gf.pl in testsuite. // ID e4 TITLE Long options called ambiguous abbreviation, if a prefix of another option AFFECTS HMMER 3.0b3 (and earlier) FIXED_IN - STATUS CLOSED XREF J5/116 REPORTED_BY Maufrais Corinne ; 27 Nov 2009 OPENED_DATE SRE, Tue Dec 1 11:24:43 2009 CLOSED_DATE SRE, Tue Dec 1 11:24:46 2009 DESCRIPTION hmmsim --s gives "Failed to parse command line: Abbreviated option "--s" is ambiguous" because esl_getopts thinks --s is an abbreviation for --seed or --stall. get_optidx_abbrev() revised to allow exact matches to long options. esl_getopts unit test revised to catch this bug. // ID e3 TITLE esl-sfetch should allow simpler fetching from small files AFFECTS - FIXED_IN - STATUS OPEN XREF J4/81 REPORTED_BY SRE OPENED_DATE 13 Feb 2009 CLOSED_DATE - DESCRIPTION esl-sfetch should allow simpler fetching from a small seqfile of one or a few sequences. It should not require an SSI index. It should allow a . argument to mean "from first sequence in file". (Or perhaps it should allow seqs to be fetched by number, as well as name.) // ID e2 TITLE esl-seqstat can't read alignment file from stdin AFFECTS - FIXED_IN - STATUS CLOSED XREF J4/84 REPORTED_BY SRE OPENED_DATE 16 Feb 2009 CLOSED_DATE 16 Feb 2009 DESCRIPTION sqfile_open tries to guess file format; then when msafile_open is called in GuessAlphabet, stdin is already feof(). Using current design, MSA can't be read sequentially (through sqio interface) unless format is known. SQFILE has a recording buffer mechanism, but it only works in sqio proper, not through interface to esl_msa. Added e2.sh to test for the bug. // ID e1 TITLE esl-alistat fails to read Pfam seed in MUL format AFFECTS - FIXED_IN - STATUS CLOSED XREF J4/81; J4/93 REPORTED_BY Rob Finn OPENED_DATE 13 Feb 2009 CLOSED_DATE 13 Feb 2009 DESCRIPTION SELEX/MUL format parser was present, but not hooked up to anything. Added --informat to several esl miniapps, to allow --informat selex. // # # Started Easel BUGTRAX file: SRE, Tue Dec 1 11:08:31 2009 # xref J5/116hmmer-3.1b2/easel/esl_msafile_afa.c0000664361611702660230000007742412473612607016640 0ustar wheelerteddy/* i/o of multiple sequence alignment files in "aligned FASTA" format * * Contents: * 1. API for reading/writing AFA format * 2. Unit tests. * 3. Test driver. * 4. Examples. * 5. License and copyright. */ #include "esl_config.h" #include #include #include #include #include "easel.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif #include "esl_mem.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_afa.h" /***************************************************************** *# 1. API for reading/writing AFA format *****************************************************************/ /* Function: esl_msafile_afa_SetInmap() * Synopsis: Set input map for aligned FASTA format. * * Purpose: Set the inmap> for aligned FASTA format. * * Text mode accepts any character. * Digital mode enforces the usual Easel alphabets. * * We skip spaces in input lines of aligned FASTA format; * map ' ' to . */ int esl_msafile_afa_SetInmap(ESLX_MSAFILE *afp) { int sym; #ifdef eslAUGMENT_ALPHABET if (afp->abc) { for (sym = 0; sym < 128; sym++) afp->inmap[sym] = afp->abc->inmap[sym]; afp->inmap[0] = esl_abc_XGetUnknown(afp->abc); } #endif if (! afp->abc) { for (sym = 1; sym < 128; sym++) afp->inmap[sym] = (isgraph(sym) ? sym : eslDSQ_ILLEGAL); afp->inmap[0] = '?'; } afp->inmap[' '] = eslDSQ_IGNORED; return eslOK; } /* Function: esl_msafile_afa_GuessAlphabet() * Synopsis: Guess the alphabet of an open AFA MSA file. * * Purpose: Guess the alpbabet of the sequences in open * AFA format MSA file . * * On a normal return, <*ret_type> is set to , * , or , and is reset to its * original position. * * Args: afp - open AFA format MSA file * ret_type - RETURN: , , or * * Returns: on success. * if alphabet type can't be determined. * In either case, is rewound to the position it * started at. * * Throws: on allocation error. * on failures of fread() or other system calls * * Note: Essentially identical to , * but we provide both versions because design calls for * modularity/separability of parsers. */ int esl_msafile_afa_GuessAlphabet(ESLX_MSAFILE *afp, int *ret_type) { int alphatype = eslUNKNOWN; esl_pos_t anchor = -1; int threshold[3] = { 500, 5000, 50000 }; /* we check after 500, 5000, 50000 residues; else we go to EOF */ int nsteps = 3; int step = 0; int nres = 0; int x; int64_t ct[26]; char *p; esl_pos_t n, pos; int status; for (x = 0; x < 26; x++) ct[x] = 0; anchor = esl_buffer_GetOffset(afp->bf); if ((status = esl_buffer_SetAnchor(afp->bf, anchor)) != eslOK) { status = eslEINCONCEIVABLE; goto ERROR; } /* [eslINVAL] can't happen here */ while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK) { while (n && isspace(*p)) { p++; n--; } if (!n || *p == '>') continue; for (pos = 0; pos < n; pos++) if (isalpha(p[pos])) { x = toupper(p[pos]) - 'A'; ct[x]++; nres++; } /* try to stop early, checking after 500, 5000, and 50000 residues: */ if (step < nsteps && nres > threshold[step]) { if ((status = esl_abc_GuessAlphabet(ct, &alphatype)) == eslOK) goto DONE; /* (eslENOALPHABET) */ step++; } } if (status != eslEOF) goto ERROR; /* [eslEMEM,eslESYS,eslEINCONCEIVABLE] */ status = esl_abc_GuessAlphabet(ct, &alphatype); /* (eslENOALPHABET) */ /* deliberate flowthrough...*/ DONE: esl_buffer_SetOffset(afp->bf, anchor); /* Rewind to where we were. */ esl_buffer_RaiseAnchor(afp->bf, anchor); *ret_type = alphatype; return status; ERROR: if (anchor != -1) { esl_buffer_SetOffset(afp->bf, anchor); esl_buffer_RaiseAnchor(afp->bf, anchor); } *ret_type = eslUNKNOWN; return status; } /* Function: esl_msafile_afa_Read() * Synopsis: Read in an aligned FASTA format alignment. * * Purpose: Read an MSA from an open , * parsing for aligned FASTA format. Create * a new MSA, and return a ptr to that alignment * in <*ret_msa>. Caller is responsible for free'ing * this . * * Args: afp - open * ret_msa - RETURN: newly parsed * * Returns: on success. <*ret_msa> is set to the newly * allocated MSA, and is at EOF. * * if no (more) alignment data are found in * ;, and is returned at EOF. * * on a parse error. <*ret_msa> is set to * . contains information sufficient for * constructing useful diagnostic output: * | errmsg> | user-directed error message | * | linenumber> | line # where error was detected | * | line> | offending line (not NUL-term) | * | n> | length of offending line | * | bf->filename> | name of the file | * and is poised at the start of the following line, * so (in principle) the caller could try to resume * parsing. * * Throws: - an allocation failed. * - a system call such as fread() failed * - "impossible" corruption * On these, <*ret_msa> is returned , and the state of * is undefined. */ int esl_msafile_afa_Read(ESLX_MSAFILE *afp, ESL_MSA **ret_msa) { ESL_MSA *msa = NULL; int idx = 0; int64_t alen = 0; int64_t this_alen = 0; char *p, *tok; esl_pos_t n, ntok; int status; ESL_DASSERT1( (afp->format == eslMSAFILE_AFA) ); afp->errmsg[0] = '\0'; /* Blank the error message. */ #ifdef eslAUGMENT_ALPHABET if (afp->abc && (msa = esl_msa_CreateDigital(afp->abc, 16, -1)) == NULL) { status = eslEMEM; goto ERROR; } #endif if (! afp->abc && (msa = esl_msa_Create( 16, -1)) == NULL) { status = eslEMEM; goto ERROR; } /* skip leading blank lines in file */ while ( (status = eslx_msafile_GetLine(afp, &p, &n)) == eslOK && esl_memspn(afp->line, afp->n, " \t") == afp->n) ; if (status != eslOK) goto ERROR; /* includes normal EOF */ /* tolerate sloppy space at start of line */ while (n && isspace(*p)) { p++; n--; } if (*p != '>') ESL_XFAIL(eslEFORMAT, afp->errmsg, "expected aligned FASTA name/desc line starting with >"); do { if (n <= 1 || *p != '>' ) ESL_XFAIL(eslEFORMAT, afp->errmsg, "expected aligned FASTA name/desc line starting with >"); p++; n--; /* advance past > */ if ( (status = esl_memtok(&p, &n, " \t", &tok, &ntok)) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "no name found for aligned FASTA record"); if (idx >= msa->sqalloc && (status = esl_msa_Expand(msa)) != eslOK) goto ERROR; if ( (status = esl_msa_SetSeqName (msa, idx, tok, ntok)) != eslOK) goto ERROR; if (n && (status = esl_msa_SetSeqDescription(msa, idx, p, n)) != eslOK) goto ERROR; /* The code below will do a realloc on every line. Possible optimization: once you know * alen (from first sequence), allocate subsequent seqs once, use noalloc versions of * esl_strmapcat/esl_abc_dsqcat(). Requires implementing protection against overrun, if * input is bad and a sequence is too long. Could gain ~25% or so that way (quickie * test on PF00005 Full) */ this_alen = 0; while ((status = eslx_msafile_GetLine(afp, &p, &n)) == eslOK) { while (n && isspace(*p)) { p++; n--; } /* tolerate and skip leading whitespace on line */ if (n == 0) continue; /* tolerate and skip blank lines */ if (*p == '>') break; #ifdef eslAUGMENT_ALPHABET if (msa->abc) { status = esl_abc_dsqcat(afp->inmap, &(msa->ax[idx]), &this_alen, p, n); } #endif if (! msa->abc) { status = esl_strmapcat (afp->inmap, &(msa->aseq[idx]), &this_alen, p, n); } if (status == eslEINVAL) ESL_XFAIL(eslEFORMAT, afp->errmsg, "one or more invalid sequence characters"); else if (status != eslOK) goto ERROR; } if (this_alen == 0) ESL_XFAIL(eslEFORMAT, afp->errmsg, "sequence %s has alen %" PRId64 , msa->sqname[idx], this_alen); if (alen && alen != this_alen) ESL_XFAIL(eslEFORMAT, afp->errmsg, "sequence %s has alen %" PRId64 "; expected %" PRId64, msa->sqname[idx], this_alen, alen); alen = this_alen; idx++; } while (status == eslOK); /* normally ends on eslEOF. */ msa->nseq = idx; msa->alen = alen; if (( status = esl_msa_SetDefaultWeights(msa)) != eslOK) goto ERROR; *ret_msa = msa; return eslOK; ERROR: if (msa) esl_msa_Destroy(msa); *ret_msa = NULL; return status; } /* Function: esl_msafile_afa_Write() * Synopsis: Write an aligned FASTA format alignment file to a stream. * * Purpose: Write alignment in aligned FASTA format to a stream * . * * If is in text mode, residues and gaps are written * exactly as they appear in the data structure. If * is digital, residues are in uppercase and all gaps are * -. * * Args: fp - open stream to write to * msa - MSA to write * * Returns: on success. * * Throws: on any system write failure, such as filled disk. */ int esl_msafile_afa_Write(FILE *fp, const ESL_MSA *msa) { int i; int64_t pos; char buf[61]; int acpl; /* actual number of characters per line */ for (i = 0; i < msa->nseq; i++) { if (fprintf(fp, ">%s", msa->sqname[i]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "afa msa file write failed"); if (msa->sqacc != NULL && msa->sqacc[i] != NULL) { if (fprintf(fp, " %s", msa->sqacc[i]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "afa msa file write failed"); } if (msa->sqdesc != NULL && msa->sqdesc[i] != NULL) { if (fprintf(fp, " %s", msa->sqdesc[i]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "afa msa file write failed"); } if (fputc('\n', fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "afa msa file write failed"); pos = 0; while (pos < msa->alen) { acpl = (msa->alen - pos > 60)? 60 : msa->alen - pos; #ifdef eslAUGMENT_ALPHABET if (msa->abc) esl_abc_TextizeN(msa->abc, msa->ax[i] + pos + 1, acpl, buf); #endif if (! msa->abc) strncpy(buf, msa->aseq[i] + pos, acpl); buf[acpl] = '\0'; if (fprintf(fp, "%s\n", buf) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "afa msa file write failed"); pos += 60; } } return eslOK; } /***************************************************************** * 2. Unit tests. *****************************************************************/ #ifdef eslMSAFILE_AFA_TESTDRIVE /* a standard globin example, but dusted with evil: * 1. \r\n DOS line terminators; * 2. extra blank lines and whitespace * 3. unusual but legal residues */ static void utest_write_good1(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs(" \r\n", ofp); fputs("> MYG_PHYCA description \r\n", ofp); fputs("--------V-LSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKT\r\n", ofp); fputs("EAEMKASEDLKKHGVTVLTALGAILKKKGH---HEABJZOUX*SHATKHKIPIKYLEFIS \r\n", ofp); fputs("EAIIHVLHSRHPGDFGADAQGAMNKALELFRKDIAAKYKELGYQG\r\n", ofp); fputs(" \r\n", ofp); fputs(">GLB5_PETMA\r\n", ofp); fputs("PIVDTGSVAPLSAAEKTKIRSAWAPVYSTYETSGVDILVKFFTSTPAAQEFFPKFKGLTT\r\n", ofp); fputs("ADQLKKSADVRWHAERIINAVNDAVASMDDTEKMSMKLRDLSGKHAKSFQVDPQYFKVLA\r\n", ofp); fputs("AVI---------ADTVAAGDAGFEKLMSMICILLRSAY-------\r\n", ofp); fputs(">HBB_HUMAN\r\n", ofp); fputs("--------VHLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLST\r\n", ofp); fputs("PDAVMGNPKVKAHGKKVLGAFSDGLAHLDN---LKGTFATLSELHCDKLHVDPENFRLLG\r\n", ofp); fputs("NVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH------\r\n", ofp); fputs(">HBA_HUMAN\r\n", ofp); fputs("--------V-LSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF-----\r\n", ofp); fputs("-DLSHGSAQVKGHGKKVADALTNAVAHVDD---MPNALSALSDLHAHKLRVDPVNFKLLS\r\n", ofp); fputs("HCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR------\r\n", ofp); fputs(" \r\n", ofp); *ret_alphatype = eslAMINO; *ret_nseq = 4; *ret_alen = 165; } /* note: alphabet detection for DNA/RNA doesn't work if unusual codes are used */ static void utest_write_good2(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs(">tRNA2\n", ofp); fputs("UCCGAUAUAGUGUAACGGCUAUCACAUCACGCUUUCACCGUGG-AGACCGGGGUUCGACU\n", ofp); fputs("CCCCGUAUCGGAG\n", ofp); fputs(">tRNA3\n", ofp); fputs("UCCGUGAUAGUUUAAUGGUCAGAAUGG-GCGCUUGUCGCGUGCCAGAUCGGGGUUCAAUU\n", ofp); fputs("CCCCGUCGCGGAG\n", ofp); fputs(">tRNA5\n", ofp); fputs("GGGCACAUGGCGCAGUUGGUAGCGCGCUUCCCUUGCAAGGAAGAGGUCAUCGGUUCGAUU\n", ofp); fputs("CCGGUUGCGUCCA\n", ofp); fputs(">tRNA1\n", ofp); fputs("GCGGAUUUAGCUCAGUUGGGAGAGCGCCAGACUGAAGAUCUGGAGGUCCUGUGUUCGAUC\n", ofp); fputs("CACAGAAUUCGCA\n", ofp); fputs(">tRNA4\n", ofp); fputs("GCUCGUAUGGCGCAGUGG-UAGCGCAGCAGAUUGCAAAUCUGUUGGUCCUUAGUUCGAUC\n", ofp); fputs("CUGAGUGCGAGCU\n", ofp); *ret_alphatype = eslRNA; *ret_nseq = 5; *ret_alen = 73; } static void utest_goodfile(char *filename, int testnumber, int expected_alphatype, int expected_nseq, int expected_alen) { ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa1 = NULL; ESL_MSA *msa2 = NULL; char tmpfile1[32] = "esltmpXXXXXX"; char tmpfile2[32] = "esltmpXXXXXX"; FILE *ofp = NULL; int status; /* guessing both the format and the alphabet should work: this is a digital open */ if ( (status = eslx_msafile_Open(&abc, filename, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) esl_fatal("afa good file test %d failed: digital open", testnumber); if (afp->format != eslMSAFILE_AFA) esl_fatal("afa good file test %d failed: format autodetection", testnumber); if (abc->type != expected_alphatype) esl_fatal("afa good file test %d failed: alphabet autodetection", testnumber); /* This is a digital read, using . */ if ( (status = esl_msafile_afa_Read(afp, &msa1)) != eslOK) esl_fatal("afa good file test %d failed: msa read, digital", testnumber); if (msa1->nseq != expected_nseq || msa1->alen != expected_alen) esl_fatal("afa good file test %d failed: nseq/alen", testnumber); if (esl_msa_Validate(msa1, NULL) != eslOK) esl_fatal("afa good file test %d failed: msa invalid", testnumber); eslx_msafile_Close(afp); /* write it back out to a new tmpfile (digital write) */ if ( (status = esl_tmpfile_named(tmpfile1, &ofp)) != eslOK) esl_fatal("afa good file test %d failed: tmpfile creation", testnumber); if ( (status = esl_msafile_afa_Write(ofp, msa1)) != eslOK) esl_fatal("afa good file test %d failed: msa write, digital", testnumber); fclose(ofp); /* now open and read it as text mode, in known format. (We have to pass fmtd now, to deal with the possibility of a nonstandard name width) */ if ( (status = eslx_msafile_Open(NULL, tmpfile1, NULL, eslMSAFILE_AFA, NULL, &afp)) != eslOK) esl_fatal("afa good file test %d failed: text mode open", testnumber); if ( (status = esl_msafile_afa_Read(afp, &msa2)) != eslOK) esl_fatal("afa good file test %d failed: msa read, text", testnumber); if (msa2->nseq != expected_nseq || msa2->alen != expected_alen) esl_fatal("afa good file test %d failed: nseq/alen", testnumber); if (esl_msa_Validate(msa2, NULL) != eslOK) esl_fatal("afa good file test %d failed: msa invalid", testnumber); eslx_msafile_Close(afp); /* write it back out to a new tmpfile (text write) */ if ( (status = esl_tmpfile_named(tmpfile2, &ofp)) != eslOK) esl_fatal("afa good file test %d failed: tmpfile creation", testnumber); if ( (status = esl_msafile_afa_Write(ofp, msa2)) != eslOK) esl_fatal("afa good file test %d failed: msa write, text", testnumber); fclose(ofp); esl_msa_Destroy(msa2); /* open and read it in digital mode */ if ( (status = eslx_msafile_Open(&abc, tmpfile1, NULL, eslMSAFILE_AFA, NULL, &afp)) != eslOK) esl_fatal("afa good file test %d failed: 2nd digital mode open", testnumber); if ( (status = esl_msafile_afa_Read(afp, &msa2)) != eslOK) esl_fatal("afa good file test %d failed: 2nd digital msa read", testnumber); if (esl_msa_Validate(msa2, NULL) != eslOK) esl_fatal("afa good file test %d failed: msa invalid", testnumber); eslx_msafile_Close(afp); /* this msa should be identical to */ if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal("afa good file test %d failed: msa compare", testnumber); remove(tmpfile1); remove(tmpfile2); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_alphabet_Destroy(abc); } static void write_test_msas(FILE *ofp1, FILE *ofp2) { fprintf(ofp1, "\n"); fprintf(ofp1, ">seq1 description line for seq1\n"); fprintf(ofp1, "..acdefghiklmnpqrstvwy\n"); fprintf(ofp1, "ACDEFGHIKLMNPQRSTVWY..\n"); fprintf(ofp1, "\n"); fprintf(ofp1, ">seq2 description line for seq2\n"); fprintf(ofp1, "..acdefghiklmnpqrstv--\n"); fprintf(ofp1, "ACDEFGHIKLMNPQRSTVWYyy\n"); fprintf(ofp1, " >seq3\n"); fprintf(ofp1, "aaacdefghiklmnpqrstv--ACDEFGHIKLMNPQRSTVWY..\n"); fprintf(ofp1, ">seq4\n"); fprintf(ofp1, "..acdefghiklm\n"); fprintf(ofp1, "npqrstvwyACDE\n"); fprintf(ofp1, "FGHIKLMNPQRSTVWY..\n"); fprintf(ofp2, "# STOCKHOLM 1.0\n"); fprintf(ofp2, "\n"); fprintf(ofp2, "#=GS seq1 DE description line for seq1\n"); fprintf(ofp2, "#=GS seq2 DE description line for seq2\n"); fprintf(ofp2, "\n"); fprintf(ofp2, "seq1 ..acdefghiklmnpqrstvwyACDEFGHIKLMNPQRSTVWY..\n"); fprintf(ofp2, "seq2 ..acdefghiklmnpqrstv--ACDEFGHIKLMNPQRSTVWYyy\n"); fprintf(ofp2, "seq3 aaacdefghiklmnpqrstv--ACDEFGHIKLMNPQRSTVWY..\n"); fprintf(ofp2, "seq4 ..acdefghiklmnpqrstvwyACDEFGHIKLMNPQRSTVWY..\n"); fprintf(ofp2, "//\n"); } static void read_test_msas_digital(char *afafile, char *stkfile) { char msg[] = "aligned FASTA msa digital read unit test failed"; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp1 = NULL; ESLX_MSAFILE *afp2 = NULL; ESL_MSA *msa1, *msa2, *msa3, *msa4; FILE *afafp, *stkfp; char afafile2[32] = "esltmpafa2XXXXXX"; char stkfile2[32] = "esltmpstk2XXXXXX"; if ( eslx_msafile_Open(&abc, afafile, NULL, eslMSAFILE_AFA, NULL, &afp1) != eslOK) esl_fatal(msg); if ( !abc || abc->type != eslAMINO) esl_fatal(msg); if ( eslx_msafile_Open(&abc, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_afa_Read (afp1, &msa1) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa2) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal(msg); if ( esl_msafile_afa_Read (afp1, &msa3) != eslEOF) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa3) != eslEOF) esl_fatal(msg); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); /* Now write stk to afa file, and vice versa; then retest */ if ( esl_tmpfile_named(afafile2, &afafp) != eslOK) esl_fatal(msg); if ( esl_tmpfile_named(stkfile2, &stkfp) != eslOK) esl_fatal(msg); if ( esl_msafile_afa_Write (afafp, msa2) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_STOCKHOLM) != eslOK) esl_fatal(msg); fclose(afafp); fclose(stkfp); if ( eslx_msafile_Open(&abc, afafile2, NULL, eslMSAFILE_AFA, NULL, &afp1) != eslOK) esl_fatal(msg); if ( eslx_msafile_Open(&abc, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_afa_Read (afp1, &msa3) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa4) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa3, msa4) != eslOK) esl_fatal(msg); remove(afafile2); remove(stkfile2); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_msa_Destroy(msa3); esl_msa_Destroy(msa4); esl_alphabet_Destroy(abc); } static void read_test_msas_text(char *afafile, char *stkfile) { char msg[] = "aligned FASTA msa text-mode read unit test failed"; ESLX_MSAFILE *afp1 = NULL; ESLX_MSAFILE *afp2 = NULL; ESL_MSA *msa1, *msa2, *msa3, *msa4; FILE *afafp, *stkfp; char afafile2[32] = "esltmpafa2XXXXXX"; char stkfile2[32] = "esltmpstk2XXXXXX"; /* vvvv-- everything's the same as the digital utest except these NULLs */ if ( eslx_msafile_Open(NULL, afafile, NULL, eslMSAFILE_AFA, NULL, &afp1) != eslOK) esl_fatal(msg); if ( eslx_msafile_Open(NULL, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_afa_Read (afp1, &msa1) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa2) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal(msg); if ( esl_msafile_afa_Read (afp1, &msa3) != eslEOF) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa3) != eslEOF) esl_fatal(msg); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); if ( esl_tmpfile_named(afafile2, &afafp) != eslOK) esl_fatal(msg); if ( esl_tmpfile_named(stkfile2, &stkfp) != eslOK) esl_fatal(msg); if ( esl_msafile_afa_Write (afafp, msa2) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_STOCKHOLM) != eslOK) esl_fatal(msg); fclose(afafp); fclose(stkfp); if ( eslx_msafile_Open(NULL, afafile2, NULL, eslMSAFILE_AFA, NULL, &afp1) != eslOK) esl_fatal(msg); if ( eslx_msafile_Open(NULL, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_afa_Read (afp1, &msa3) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa4) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa3, msa4) != eslOK) esl_fatal(msg); remove(afafile2); remove(stkfile2); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_msa_Destroy(msa3); esl_msa_Destroy(msa4); } #endif /*eslMSAFILE_AFA_TESTDRIVE*/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 3. Test driver. *****************************************************************/ #ifdef eslMSAFILE_AFA_TESTDRIVE /* compile: gcc -g -Wall -I. -L. -o esl_msafile_afa_utest -DeslMSAFILE_AFA_TESTDRIVE esl_msafile_afa.c -leasel -lm * (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile_afa_utest -DeslMSAFILE_AFA_TESTDRIVE esl_msafile_afa.c -leasel -lm * run: ./esl_msafile_afa_utest */ #include "esl_config.h" #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_msafile.h" #include "esl_msafile_afa.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for AFA MSA format module"; int main(int argc, char **argv) { char msg[] = "aligned FASTA MSA i/o module test driver failed"; ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); char afafile[32] = "esltmpafaXXXXXX"; char stkfile[32] = "esltmpstkXXXXXX"; FILE *afafp, *stkfp; int testnumber; int ngoodtests = 2; char tmpfile[32]; FILE *ofp; int expected_alphatype; int expected_nseq; int expected_alen; if ( esl_tmpfile_named(afafile, &afafp) != eslOK) esl_fatal(msg); if ( esl_tmpfile_named(stkfile, &stkfp) != eslOK) esl_fatal(msg); write_test_msas(afafp, stkfp); fclose(afafp); fclose(stkfp); read_test_msas_digital(afafile, stkfile); read_test_msas_text (afafile, stkfile); /* Various "good" files that should be parsed correctly */ for (testnumber = 1; testnumber <= ngoodtests; testnumber++) { strcpy(tmpfile, "esltmpXXXXXX"); if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg); switch (testnumber) { case 1: utest_write_good1 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break; case 2: utest_write_good2 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break; } fclose(ofp); utest_goodfile(tmpfile, testnumber, expected_alphatype, expected_nseq, expected_alen); remove(tmpfile); } remove(afafile); remove(stkfile); esl_getopts_Destroy(go); return 0; } #endif /*eslMSAFILE_AFA_TESTDRIVE*/ /*--------------------- end, test driver ------------------------*/ /***************************************************************** * 4. Examples. *****************************************************************/ #ifdef eslMSAFILE_AFA_EXAMPLE /* A full-featured example of reading/writing an MSA in aligned FASTA (AFA) format. gcc -g -Wall -o esl_msafile_afa_example -I. -L. -DeslMSAFILE_afa_EXAMPLE esl_msafile_afa.c -leasel -lm ./esl_msafile_afa_example */ /*::cexcerpt::msafile_afa_example::begin::*/ #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_afa.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "override autodetection; force AFA format", 0 }, { "-q", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "quieter: don't write msa back, just summary", 0 }, { "-t", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use text mode: no digital alphabet", 0 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is DNA", 0 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is RNA", 0 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is protein", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of guessing, reading, writing AFA format"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *filename = esl_opt_GetArg(go, 1); int infmt = eslMSAFILE_UNKNOWN; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; int status; if (esl_opt_GetBoolean(go, "-1")) infmt = eslMSAFILE_AFA; /* override format autodetection */ if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); /* Text mode: pass NULL for alphabet. * Digital mode: pass ptr to expected ESL_ALPHABET; and if abc=NULL, alphabet is guessed */ if (esl_opt_GetBoolean(go, "-t")) status = eslx_msafile_Open(NULL, filename, NULL, infmt, NULL, &afp); else status = eslx_msafile_Open(&abc, filename, NULL, infmt, NULL, &afp); if (status != eslOK) eslx_msafile_OpenFailure(afp, status); if ((status = esl_msafile_afa_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); printf("alphabet: %s\n", (abc ? esl_abc_DecodeType(abc->type) : "none (text mode)")); printf("# of seqs: %d\n", msa->nseq); printf("# of cols: %d\n", (int) msa->alen); printf("\n"); if (! esl_opt_GetBoolean(go, "-q")) esl_msafile_afa_Write(stdout, msa); esl_msa_Destroy(msa); eslx_msafile_Close(afp); if (abc) esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); exit(0); } /*::cexcerpt::msafile_afa_example::end::*/ #endif /*eslMSAFILE_AFA_EXAMPLE*/ #ifdef eslMSAFILE_AFA_EXAMPLE2 /* A minimal example. Read AFA format MSA, in text mode. gcc -g -Wall -o esl_msafile_afa_example2 -I. -L. -DeslMSAFILE_AFA_EXAMPLE2 esl_msafile_afa.c -leasel -lm ./esl_msafile_afa_example2 */ /*::cexcerpt::msafile_afa_example2::begin::*/ #include #include "easel.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_afa.h" int main(int argc, char **argv) { char *filename = argv[1]; int fmt = eslMSAFILE_AFA; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; int status; if ( (status = eslx_msafile_Open(NULL, filename, NULL, fmt, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); if ( (status = esl_msafile_afa_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); printf("%6d seqs, %5d columns\n", msa->nseq, (int) msa->alen); esl_msafile_afa_Write(stdout, msa); esl_msa_Destroy(msa); eslx_msafile_Close(afp); exit(0); } /*::cexcerpt::msafile_afa_example2::end::*/ #endif /*eslMSAFILE_AFA_EXAMPLE2*/ /*--------------------- end of examples -------------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msafile_afa.c 754 2012-03-14 20:30:47Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msafile_afa.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_vectorops.h0000664361611702660230000001346512473612610016427 0ustar wheelerteddy/* Vector operations. */ #ifndef eslVECTOROPS_INCLUDED #define eslVECTOROPS_INCLUDED extern void esl_vec_DSet(double *vec, int n, double value); extern void esl_vec_FSet(float *vec, int n, float value); extern void esl_vec_ISet(int *vec, int n, int value); extern void esl_vec_DScale(double *vec, int n, double scale); extern void esl_vec_FScale(float *vec, int n, float scale); extern void esl_vec_IScale(int *vec, int n, int scale); extern void esl_vec_DIncrement(double *v, int n, double x); extern void esl_vec_FIncrement(float *v, int n, float x); extern void esl_vec_IIncrement(int *v, int n, int x); extern double esl_vec_DSum(double *vec, int n); extern float esl_vec_FSum(float *vec, int n); extern int esl_vec_ISum(int *vec, int n); extern void esl_vec_DAdd(double *vec1, const double *vec2, int n); extern void esl_vec_FAdd(float *vec1, const float *vec2, int n); extern void esl_vec_IAdd(int *vec1, const int *vec2, int n); extern void esl_vec_DAddScaled(double *vec1, double *vec2, double a, int n); extern void esl_vec_FAddScaled(float *vec1, float *vec2, float a, int n); extern void esl_vec_IAddScaled(int *vec1, int *vec2, int a, int n); extern void esl_vec_DCopy(const double *src, const int n, double *dest); extern void esl_vec_FCopy(const float *src, const int n, float *dest); extern void esl_vec_ICopy(const int *src, const int n, int *dest); extern int esl_vec_DCompare(const double *vec1, const double *vec2, int n, double tol); extern int esl_vec_FCompare(const float *vec1, const float *vec2, int n, float tol); extern int esl_vec_ICompare(const int *vec1, const int *vec2, int n); extern void esl_vec_DSwap(double *vec1, double *vec2, int n); extern void esl_vec_FSwap(float *vec1, float *vec2, int n); extern void esl_vec_ISwap(int *vec1, int *vec2, int n); extern void esl_vec_DReverse(double *vec, double *rev, int n); extern void esl_vec_FReverse(float *vec, float *rev, int n); extern void esl_vec_IReverse(int *vec, int *rev, int n); extern double esl_vec_DDot(double *vec1, double *vec2, int n); extern float esl_vec_FDot(float *vec1, float *vec2, int n); extern int esl_vec_IDot(int *vec1, int *vec2, int n); extern double esl_vec_DMax(const double *vec, int n); extern float esl_vec_FMax(const float *vec, int n); extern int esl_vec_IMax(const int *vec, int n); extern double esl_vec_DMin(const double *vec, int n); extern float esl_vec_FMin(const float *vec, int n); extern int esl_vec_IMin(const int *vec, int n); extern int esl_vec_DArgMax(const double *vec, int n); extern int esl_vec_FArgMax(const float *vec, int n); extern int esl_vec_IArgMax(const int *vec, int n); extern int esl_vec_DArgMin(const double *vec, int n); extern int esl_vec_FArgMin(const float *vec, int n); extern int esl_vec_IArgMin(const int *vec, int n); extern void esl_vec_DSortIncreasing(double *vec, int n); extern void esl_vec_FSortIncreasing(float *vec, int n); extern void esl_vec_ISortIncreasing(int *vec, int n); extern void esl_vec_DSortDecreasing(double *vec, int n); extern void esl_vec_FSortDecreasing(float *vec, int n); extern void esl_vec_ISortDecreasing(int *vec, int n); extern int esl_vec_DDump(FILE *ofp, double *v, int n, char *label); extern int esl_vec_FDump(FILE *ofp, float *v, int n, char *label); extern int esl_vec_IDump(FILE *ofp, int *v, int n, char *label); extern void esl_vec_D2F(double *src, int n, float *dst); extern void esl_vec_F2D(float *src, int n, double *dst); extern void esl_vec_I2F(int *src, int n, float *dst); extern void esl_vec_I2D(int *src, int n, double *dst); extern void esl_vec_DNorm(double *vec, int n); extern void esl_vec_FNorm(float *vec, int n); extern void esl_vec_DLog(double *vec, int n); extern void esl_vec_FLog(float *vec, int n); extern double esl_vec_DEntropy(const double *p, int n); extern float esl_vec_FEntropy(const float *p, int n); extern double esl_vec_DRelEntropy(const double *p, const double *f, int n); extern float esl_vec_FRelEntropy(const float *p, const float *f, int n); extern void esl_vec_DExp(double *vec, int n); extern void esl_vec_FExp(float *vec, int n); extern double esl_vec_DLogSum(double *vec, int n); extern float esl_vec_FLogSum(float *vec, int n); extern void esl_vec_DLogNorm(double *vec, int n); extern void esl_vec_FLogNorm(float *vec, int n); extern void esl_vec_DCDF(double *p, int n, double *cdf); extern void esl_vec_FCDF(float *p, int n, float *cdf); extern int esl_vec_DValidate(double *vec, int n, double tol, char *errbuf); extern int esl_vec_FValidate(float *vec, int n, float tol, char *errbuf); extern int esl_vec_DLogValidate(double *vec, int n, double tol, char *errbuf); extern int esl_vec_FLogValidate(float *vec, int n, float tol, char *errbuf); #ifdef eslAUGMENT_RANDOM #include "esl_random.h" extern int esl_vec_DShuffle(ESL_RANDOMNESS *r, double *v, int n); extern int esl_vec_FShuffle(ESL_RANDOMNESS *r, float *v, int n); extern int esl_vec_IShuffle(ESL_RANDOMNESS *r, int *v, int n); #endif #endif /* eslVECTOROPS_INCLUDED */ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_vectorops.h 762 2012-05-11 21:01:15Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_vectorops.h $ *****************************************************************/ hmmer-3.1b2/easel/esl_randomseq.tex0000664361611702660230000000763212473612607016752 0ustar wheelerteddyThe \eslmod{randomseq} module contains routines for generating, shuffling, and randomizing sequences. ``Generating'' means sampling a sequence from a given statistical distribution. ``Shuffling'' means taking a given sequence and randomizing it in some way that preserves at least the exact residue composition of that sequence, and possibly other higher-order statistics. ``Randomizing'' means sampling a sequence from a statistical distribution estimated from a given sequence. Routines like this are useful in testing sequence analysis algorithms; for example, calculating expected score statistics under simple null models. % ``essentially'' qualifier below, because our RNG is limited to 2^31 states, % and that limits the number of distinct permutations we can sample. When shuffling sequences, it is desirable to sample uniformly among possible permutations. Many shuffling algorithms (even some published ones \citep{Fitch83}) are not correct in this sense. Easel's monoresidue sequence shuffling implements the so-called Fisher/Yates algorithm (Knuth's ``Algorithm P'') \citep{Durstenfeld64,Knu-81a}. A nontrivial additional power of the module is the ability to shuffle sequences while preserving exact diresidue composition; the \ccode{esl\_rsq\_CShuffleDP()} and \ccode{esl\_rsq\_XShuffleDP()} routines implement the Altschul/Erickson method \citep{AltschulErickson86}. \footnote{A more efficient method than Altschul/Erickson is known \citep{KandelWinkler96,Coward99} but it has not yet been implemented for Easel.} The routines in the module are listed in Table~\ref{tbl:randomseq_api}. The base routines work on any alphabetic text string. Augmentation with the \eslmod{alphabet} module adds routines for shuffling digitized sequences. % Table generated by autodoc -t esl_randomseq.c (so don't edit here, edit esl_randomseq.c:) \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \apisubhead{Generating iid sequences.}\\ \hyperlink{func:esl_rsq_IID()}{\ccode{esl\_rsq\_IID()}} & Generate an iid random text sequence.\\ \apisubhead{Shuffling sequences.}\\ \hyperlink{func:esl_rsq_CShuffle()}{\ccode{esl\_rsq\_CShuffle()}} & Shuffle a text sequence.\\ \hyperlink{func:esl_rsq_CShuffleDP()}{\ccode{esl\_rsq\_CShuffleDP()}} & Shuffle a text sequence, preserving diresidue composition.\\ \hyperlink{func:esl_rsq_CReverse()}{\ccode{esl\_rsq\_CReverse()}} & Reverse a string.\\ \hyperlink{func:esl_rsq_CShuffleWindows()}{\ccode{esl\_rsq\_CShuffleWindows()}} & Shuffle local windows of a text string.\\ \apisubhead{Randomizing sequences}\\ \hyperlink{func:esl_rsq_CMarkov0()}{\ccode{esl\_rsq\_CMarkov0()}} & Generate new text string of same 0th order Markov properties.\\ \hyperlink{func:esl_rsq_CMarkov1()}{\ccode{esl\_rsq\_CMarkov1()}} & Generate new text string of same 1st order Markov properties.\\ \hyperlink{func:esl_rsq_xIID()}{\ccode{esl\_rsq\_xIID()}} & Generate an iid random digital sequence.\\ \apisubhead{Shuffling sequences (digital mode)}\\ \hyperlink{func:esl_rsq_XShuffle()}{\ccode{esl\_rsq\_XShuffle()}} & Shuffle a digital sequence.\\ \hyperlink{func:esl_rsq_XShuffleDP()}{\ccode{esl\_rsq\_XShuffleDP()}} & Shuffle a digital sequence, preserving diresidue composition.\\ \hyperlink{func:esl_rsq_XReverse()}{\ccode{esl\_rsq\_XReverse()}} & Reverse a digital sequence.\\ \hyperlink{func:esl_rsq_XShuffleWindows()}{\ccode{esl\_rsq\_XShuffleWindows()}} & Shuffle local windows of a digital sequence.\\ \apisubhead{Randomizing sequences (digital mode)}\\ \hyperlink{func:esl_rsq_XMarkov0()}{\ccode{esl\_rsq\_XMarkov0()}} & Generate new digital sequence of same 0th order Markov properties.\\ \hyperlink{func:esl_rsq_XMarkov1()}{\ccode{esl\_rsq\_XMarkov1()}} & Generate new digital sequence of same 1st order Markov properties.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{randomseq} API.} \label{tbl:randomseq_api} \end{table} \subsection{Example of using randomseq} Here's an example: \input{cexcerpts/randomseq_example} hmmer-3.1b2/easel/esl_buffer.c0000664361611702660230000034056412473612605015656 0ustar wheelerteddy/*::cexcerpt::header_example::begin::*/ /* An input parsing abstraction. * * Table of contents: * 1. ESL_BUFFER object: opening/closing. * 2. Positioning and anchoring an ESL_BUFFER. * 3. Raw access to the buffer. * 4. Line-based parsing. * 5. Token-based parsing. * 6. Binary (fread-like) parsing. * 7. Private (static) functions. * 8. Benchmark. * 9. Unit tests. * 10. Test driver. * 11. Examples. * 12. Copyright and license. */ /*::cexcerpt::header_example::end::*/ /*::cexcerpt::include_example::begin::*/ #include "esl_config.h" #include #include #include #ifdef HAVE_UNISTD_H #include #endif #ifdef _POSIX_VERSION #include #include #include #endif /* _POSIX_VERSION */ #include "easel.h" #include "esl_mem.h" #include "esl_buffer.h" /*::cexcerpt::include_example::end::*/ /*::cexcerpt::statics_example::begin::*/ static int buffer_create (ESL_BUFFER **ret_bf); static int buffer_init_file_mmap (ESL_BUFFER *bf, esl_pos_t filesize); static int buffer_init_file_slurped(ESL_BUFFER *bf, esl_pos_t filesize); static int buffer_init_file_basic (ESL_BUFFER *bf); static int buffer_refill (ESL_BUFFER *bf, esl_pos_t nmin); static int buffer_countline(ESL_BUFFER *bf, esl_pos_t *opt_nc, esl_pos_t *opt_nskip); static int buffer_skipsep (ESL_BUFFER *bf, const char *sep); static int buffer_newline (ESL_BUFFER *bf); static int buffer_counttok (ESL_BUFFER *bf, const char *sep, esl_pos_t *ret_nc); /*::cexcerpt::statics_example::end::*/ /***************************************************************** *# 1. ESL_BUFFER object: opening/closing. *****************************************************************/ /* Function: esl_buffer_Open() * Synopsis: Standard Easel idiom for opening a stream by filename. * * Purpose: Open for parsing. Return an open * for it. * * The standard Easel idiom allows reading from standard * input (pass as '-'), allows reading gzip'ed * files automatically (any ending in <.gz> is * opened as a pipe from ), and allows using an * environment variable to specify a colon-delimited list * of directories in which may be found. Normal * files are memory mapped (if is available) when * they are large, and slurped into memory if they are * small. * * If is '-' (a single dash character), * capture the standard input stream rather than * opening a file; return . * * Else, try to find in a directory , * starting with the current working directory. If * <./filename> is found (note that may include * a relative path), directory is <.>. Else, if * is non-, check the environment variable * for a colon-delimited list of directories, and * for each directory in that list, try to find * . Use the first that succeeds. If * none succeed, return . * * Now open the file. If ends in <.gz>, 'open' * it by running /dev/null>, * capturing the standard output from gunzip decompression * in the . Otherwise, open as a * normal file. If its size is not more than * (default 4 MB), it is slurped into * memory; else, if is available, it is memory * mapped; else, it is opened as a read-only binary stream * with in mode <"rb">. * * Args: filename - file to open for reading; or '-' for STDIN * envvar - name of an environment variable in which to * find a colon-delimited list of directories; * or if none. * ret_bf - RETURN: new ESL_BUFFER * * Returns: on success; <*ret_bf> is the new . * * if file isn't found or isn't readable. * if gzip -dc fails on a .gz file, probably * because a gzip executable isn't found in PATH. * * On any normal error, <*ret_bf> is still returned, * in an unset state, with a user-directed error message * in <*ret_bf->errmsg>. * * Throws: on system call failures (such as fread()). * on allocation failure. * Now <*ret_bf> is . */ int esl_buffer_Open(const char *filename, const char *envvar, ESL_BUFFER **ret_bf) { char *path = NULL; int n; int status; /* "-" => stdin */ if (strcmp(filename, "-") == 0) return esl_buffer_OpenStream(stdin, ret_bf); /* else, a file. find its fully qualified path */ if (esl_FileExists(filename)) /* look in current working directory */ { if ( (status = esl_strdup(filename, -1, &path)) != eslOK) goto ERROR; } else { /* then search directory list in envvar, if any */ status = esl_FileEnvOpen(filename, envvar, NULL, &path); if (status == eslENOTFOUND) { esl_buffer_OpenFile(filename, ret_bf); goto ERROR; } else if (status != eslOK) { *ret_bf = NULL; goto ERROR; } /* yeah, the esl_buffer_OpenFile() looks weird - we know the file's not there! - * but it's a clean way to set our error return status properly, * recording the correct error message in a live ESL_BUFFER's bf->errmsg. * note that esl_FileEnvOpen() correctly handles envvar==NULL, * returning eslENOTFOUND. */ } n = strlen(path); if (n > 3 && strcmp(filename+n-3, ".gz") == 0) /* if .gz => gzip -dc */ { if ( (status = esl_buffer_OpenPipe(path, "gzip -dc %s 2>/dev/null", ret_bf)) != eslOK) goto ERROR; } else { if ( (status = esl_buffer_OpenFile(path, ret_bf)) != eslOK) goto ERROR; } free(path); return eslOK; ERROR: if (path) free(path); return status; } /* Function: esl_buffer_OpenFile() * Synopsis: Open a file. * * Purpose: Open for reading. Return an open in * <*ret_bf>. * * may be a relative path such as * or a full path such as . * * On a POSIX-compliant system, large files are memory * mapped, and small files are just slurped into memory. * * On non-POSIX systems, the file is opened as a stream. * On a short initial read (if the file size is smaller than * the buffer page size), the file is considered to be * completely slurped. * * Args: filename - name of (or path to) file to open * *ret_bf - RETURN: new ESL_BUFFER * * Returns: on success; <*ret_bf> is new . * * if isn't found or isn't readable. * * On normal errors, a new <*ret_bf> is still returned, in * an unset state, with a user-directed error message in * <*ret_bf->errmsg>. * * Throws: on allocation failure. */ int esl_buffer_OpenFile(const char *filename, ESL_BUFFER **ret_bf) { ESL_BUFFER *bf = NULL; #ifdef _POSIX_VERSION struct stat fileinfo; #endif esl_pos_t filesize = -1; int status; if ((status = buffer_create(&bf)) != eslOK) goto ERROR; if ((bf->fp = fopen(filename, "rb")) == NULL) ESL_XFAIL(eslENOTFOUND, bf->errmsg, "couldn't open %s for reading", filename); if ((status = esl_strdup(filename, -1, &(bf->filename))) != eslOK) goto ERROR; /* Try to use POSIX fstat() to get file size and optimal read size. * Use filesize to decide whether to slurp, mmap, or read normally. * If we don't have fstat(), we'll just read normally, and pagesize * will be the Easel default 4096 (set in buffer_create().) */ #ifdef _POSIX_VERSION if (fstat(fileno(bf->fp), &fileinfo) == -1) ESL_XEXCEPTION(eslESYS, "fstat() failed"); filesize = fileinfo.st_size; bf->pagesize = fileinfo.st_blksize; if (bf->pagesize < 512) bf->pagesize = 512; /* I feel paranoid about st_blksize range not being guaranteed to be sensible */ if (bf->pagesize > 4194304) bf->pagesize = 4194304; #endif if (filesize != -1 && filesize <= eslBUFFER_SLURPSIZE) { if ((status = buffer_init_file_slurped(bf, filesize)) != eslOK) goto ERROR; } #ifdef _POSIX_VERSION else if (filesize != -1 && filesize > eslBUFFER_SLURPSIZE) { if ((status = buffer_init_file_mmap(bf, filesize)) != eslOK) goto ERROR; } #endif else { if ((status = buffer_init_file_basic(bf)) != eslOK) goto ERROR; } *ret_bf = bf; return status; ERROR: if (status != eslENOTFOUND) { esl_buffer_Close(bf); bf = NULL; } if (bf) { if (bf->fp) { fclose(bf->fp); bf->fp = NULL; } if (bf->filename) { free(bf->filename); bf->filename = NULL; } bf->pagesize = eslBUFFER_PAGESIZE; } *ret_bf = bf; return status; } /* Function: esl_buffer_OpenPipe() * Synopsis: Open a file through a command's stdout pipe (e.g. gunzip). * * Purpose: Run the command on and capture its * stream for parsing. Return the open in * <*ret_bf>. * * has a restricted format; it is a -style * format string with a single <%s>, where is to * be substituted. An example is "gzip -dc %s * 2>/dev/null". * * is checked for existence and read permission * before a command line is constructed. * may be . In this case, is * assumed to be be the complete command, and (obviously) * the diagnostic check for * existence/readability is skipped. This gives you some * ability to skip the restricted single-argument format of * . If you need to do something fancier with a * pipe, you can always open and manage it yourself and use * . * * executes the command under . * * The stream of the command should almost * certainly be redirected (else it will appear on output * of your program). In general it should be discarded * to . One of the only signs of a command * failure is that the command produces a "short read", of * less than pagesize> (and often 0, on a complete * failure, if has been discarded). If * is longer than the buffer's , we may not * accurately detect error conditions. If you must capture * (for example with a like * "gzip -dc %s 2>&1") be aware that the parser may * see that output as "successful" execution, if it's long * enough. * * The reason to pass and separately is * to enable better error diagnostics. itself * tends to "succeed" whether the command or the file exist * or not. By having , we can check for its * existence/readability first. * * The reason that error checking isn't entirely * straightforward is that we don't see the exit status of * the command until we . We can only * when we're done loading data from the file, and that * only happens here on a short initial read. If we do get * a short read, we , get and check the command's * exit status, and return the in an * state with cmdline> set. * * Args: filename - file name (or path) to plug into ; or NULL * if is complete command already * cmdfmt - command to execute (with /bin/sh) and capture * stdout from. * *ret_bf - RETURN: new ESL_BUFFER * * Returns: on success, and <*ret_bf> is the new . * * if isn't found or isn't readable. * * if the constructed command fails - which * usually means that the program isn't found or isn't * executable, or that the command returned nonzero * (quickly, i.e. with zero or little output and a 'short * read'). * * On any normal error, the <*ret_bf> is returned (in an * state) and errmsg> contains a * user-directed error message. * * Throws: on <*sprintf()> or failure. * on allocation failure. * * On any exception, <*ret_bf> is NULL. */ int esl_buffer_OpenPipe(const char *filename, const char *cmdfmt, ESL_BUFFER **ret_bf) { ESL_BUFFER *bf = NULL; char *cmd = NULL; int status; if ((status = buffer_create(&bf)) != eslOK) goto ERROR; if (filename && ! esl_FileExists(filename)) ESL_XFAIL(eslENOTFOUND, bf->errmsg, "couldn't read file %s", filename); if (filename) { if ((status = esl_sprintf(&cmd, cmdfmt, filename)) != eslOK) goto ERROR; } else { if ((status = esl_strdup(cmdfmt, -1, &cmd)) != eslOK) goto ERROR; } if ((bf->fp = popen(cmd, "r")) == NULL) ESL_XFAIL(eslENOTFOUND, bf->errmsg, "couldn't popen() the command: %s\n", cmd); if ( (status = esl_strdup(cmd, -1, &(bf->cmdline))) != eslOK) goto ERROR; if (filename && (status = esl_strdup(filename, -1, &(bf->filename))) != eslOK) goto ERROR; ESL_ALLOC(bf->mem, sizeof(char) * bf->pagesize); bf->balloc = bf->pagesize; bf->n = fread(bf->mem, sizeof(char), bf->pagesize, bf->fp); /* Now check for various errors on a short read. A short read can mean: * - a small file; success, and we have the whole file in one page * - popen() "succeeded" but the command failed * - an fread() failure * Sort it out. The trick here is that we don't get the exit status * of until we pclose(). So (assuming it isn't fread() itself * that failed) we take advantage of the fact that we can set the * ESL_BUFFER to a eslBUFFER_ALLFILE state on a short initial read; * pclose() and check command exit status. * This pretty much relies on what from looks like; * it needs to either be redirected, or short enough to be a short read. */ if (bf->n < bf->pagesize) { if (ferror(bf->fp)) ESL_XEXCEPTION(eslESYS, "fread() failed"); if (pclose(bf->fp) != 0) { bf->fp = NULL; /* error block is going to try to pclose() too */ ESL_XFAIL(eslFAIL, bf->errmsg, "pipe command '%s' did not succeed", cmd); } bf->fp = NULL; bf->balloc = 0; bf->mode_is = eslBUFFER_ALLFILE; } else bf->mode_is = eslBUFFER_CMDPIPE; free(cmd); *ret_bf = bf; return eslOK; ERROR: if (status != eslENOTFOUND && status != eslFAIL) { esl_buffer_Close(bf); bf = NULL; } if (bf) { /* restore state to UNSET; w/ error message in errmsg */ if (bf->mem) { free(bf->mem); bf->mem = NULL; } if (bf->fp) { pclose(bf->fp); bf->fp = NULL; } if (bf->filename) { free(bf->filename); bf->filename = NULL; } if (bf->cmdline) { free(bf->cmdline); bf->cmdline = NULL; } bf->n = 0; bf->balloc = 0; } if (cmd) free(cmd); *ret_bf = bf; return status; } /* Function: esl_buffer_OpenMem() * Synopsis: "Open" an existing string for parsing. * * Purpose: Given a buffer or string

of length , turn it into * an . Return the new buffer in <*ret_bf>. * * The memory for

is still managed by the caller. * Caller should free it, if necessary, only after the * has been closed. * * As a special case, if is -1,

is assumed to be a * \verb+\0+-terminated string and its length is calculated with * . * * Args: p - ptr to buffer or string * n - length of buffer/string

, in bytes * ret_bf - RETURN: new ESL_BUFFER * * Returns: on success, and <*ret_bf> points to new buffer. * * Throws: on allocation failure. * On any exception, <*ret_bf> is . */ int esl_buffer_OpenMem(const char *p, esl_pos_t n, ESL_BUFFER **ret_bf) { ESL_BUFFER *bf = NULL; int status; if ((status = buffer_create(&bf)) != eslOK) goto ERROR; bf->mem = (char *) p; /* force discard of const qualifier; this is ok; mem won't be altered in eslBUFFER_STRING mode */ bf->n = (n == -1) ? strlen(p) : n; bf->mode_is = eslBUFFER_STRING; *ret_bf = bf; return eslOK; ERROR: if (bf) { /* on error, restore to UNSET state */ bf->mem = NULL; bf->n = 0; bf->mode_is = eslBUFFER_UNSET; } *ret_bf = bf; return status; } /* Function: esl_buffer_OpenStream() * Synopsis: "Open" an existing stream for parsing. * * Purpose: Given an open stream for reading, create an * around it. * * is often , for example. * * The caller remains responsible for closing , if it * opened it. * * Args: fp - stream to associate with new ESL_BUFFER * *ret_bf - RETURN: new ESL_BUFFER. * * Returns: on success, and <*ret_bf> points to a new . * * Throws: : is NULL, in error state, or already at eof before any reading occurs. * : fread() failed * : an allocation failed */ int esl_buffer_OpenStream(FILE *fp, ESL_BUFFER **ret_bf) { ESL_BUFFER *bf = NULL; int status; if ((status = buffer_create(&bf)) != eslOK) goto ERROR; if (fp == NULL || ferror(fp) || feof(fp)) ESL_XEXCEPTION(eslEINVAL, "invalid stream"); bf->fp = fp; /* a copy of ; caller is still responsible for it */ ESL_ALLOC(bf->mem, sizeof(char) * bf->pagesize); bf->balloc = bf->pagesize; bf->n = fread(bf->mem, sizeof(char), bf->pagesize, bf->fp); if (bf->n < bf->pagesize && ferror(bf->fp)) ESL_XEXCEPTION(eslESYS, "failed to read first chunk of stream"); bf->mode_is = eslBUFFER_STREAM; *ret_bf = bf; return eslOK; ERROR: esl_buffer_Close(bf); bf = NULL; /* thrown errors */ if (bf) /* normal errors */ { /* restore bf to UNSET state */ if (bf->mem) { free(bf->mem); bf->mem = NULL; } bf->fp = NULL; bf->n = 0; bf->balloc = 0; bf->mode_is = eslBUFFER_UNSET; } *ret_bf = bf; /* NULL, if creation failed; otherwise bf->errmsg may be useful to caller */ return status; } /* Function: esl_buffer_Close() * Synopsis: Close an input buffer. * Incept: SRE, Mon Feb 14 09:09:04 2011 [Janelia] * * Purpose: Close the input buffer , freeing all resources that it * was responsible for. * * Args: bf - the input buffer * * Returns: on success. * * Throws: on a system call failure such as , , or . * * Note: error handling here departs from usual idiom, because we try to tolerate errors * and continue free'ing resources; only at the end do we return a failure code, if * something went awry. */ int esl_buffer_Close(ESL_BUFFER *bf) { if (bf) { if (bf->mem) { switch (bf->mode_is) { case eslBUFFER_MMAP: if (munmap(bf->mem, bf->n) == -1) ESL_EXCEPTION(eslESYS, "munmap() failed"); break; case eslBUFFER_STRING: break; /* caller provided and remains responsible for an input memory buffer */ default: free(bf->mem); } } if (bf->fp) { switch (bf->mode_is) { case eslBUFFER_CMDPIPE: if (pclose(bf->fp) == -1) ESL_EXCEPTION(eslESYS, "pclose() failed"); break; case eslBUFFER_STREAM: break; /* caller provided and remains responsible for an open stream */ default: if (fclose(bf->fp) == -1) ESL_EXCEPTION(eslESYS, "fclose() failed"); break; } } if (bf->filename) free(bf->filename); if (bf->cmdline) free(bf->cmdline); free(bf); } return eslOK; } /*--------------- end, ESL_BUFFER open/close --------------------*/ /***************************************************************** *# 2. Positioning and anchoring an ESL_BUFFER *****************************************************************/ /* Function: esl_buffer_GetOffset() * Synopsis: Get the current position of parser in input buffer. * * Purpose: Returns the current offset position of the parser * in the input buffer: baseoffset + bf->pos>. */ esl_pos_t esl_buffer_GetOffset(ESL_BUFFER *bf) { return bf->baseoffset + bf->pos; } /* Function: esl_buffer_SetOffset() * Synopsis: Reposition the input buffer to a new place. * Incept: SRE, Mon Jan 31 13:14:09 2011 [Janelia] * * Purpose: Set the buffer's internal state (pos>) to position * in the input. Load new data into the buffer if * necessary. * * In modes where mem> contains the whole input * (ALLFILE, MMAP, STRING), this always works. * * In modes where we're reading a * nonrewindable/nonpositionable stream (STREAM, CMDPIPE), * may be at or ahead of the current position, but * rewinding to an offset behind the current position only * works if is within the current buffer * window. If the caller knows it wants to return to some * later, it should set an anchor to make sure it * stays in the buffer. New data may need to be read into * mem> to assure bytes are available. If * an anchor is set, this may require reoffset and/or * reallocation of mem>. * * FILE mode is handled as above, but additionally, if no * anchor is set and is not in the current buffer, * is used to reposition in the open file. If * is unavailable (non-POSIX compliant systems), * FILE mode is handled like other streams, with limited * rewind ability. * * Args: bf - input buffer being manipulated * offset - new position in the input * * Returns: on success. * * Throws: if is invalid, either because it * would require rewinding the (nonrewindable) stream, * or because it's beyond the end. * if a system call fails, such as fread(). * on allocation failure. * if internal state is corrupt. */ int esl_buffer_SetOffset(ESL_BUFFER *bf, esl_pos_t offset) { int status; /* Case 1. We have the entire file in bf->mem (or an mmap of it); * Then this is trivial; we just set bf->pos. */ if (bf->mode_is == eslBUFFER_ALLFILE || bf->mode_is == eslBUFFER_MMAP || bf->mode_is == eslBUFFER_STRING) { bf->baseoffset = 0; /* (redundant: just to assure you that state is correctly set) */ bf->pos = offset; } /* Case 2. We have an open stream. * Then: * - if offset is behind us, and in our current buffer window, * rewind is always possible and trivial: set bf->pos; or * - if we're a FILE, and we're on a POSIX system with fseeko(), * and there's no anchor set -- then we can fseeko() to the * desired offset (no matter where it is) and * reinitialize the buffer; or * - otherwise rewinding a stream is not possible, generating * an error; or * - finally, the remaining possibility is that the offset is * ahead of (or at) the current parser position; fread() * (respecting any set anchor) until is in the * current buffer window, put bf->pos on it, and call * buffer_refill() to be sure that we either have at least * pagesize> bytes to parse (inclusive of current pos) * or the stream reaches EOF. */ else if (bf->mode_is == eslBUFFER_STREAM || bf->mode_is == eslBUFFER_CMDPIPE || bf->mode_is == eslBUFFER_FILE) { if (offset >= bf->baseoffset && offset < bf->baseoffset + bf->pos) /* offset is in our current window and behind our current pos; rewind is trivial */ { bf->pos = offset-bf->baseoffset; } #ifdef _POSIX_VERSION else if (bf->mode_is == eslBUFFER_FILE && bf->anchor == -1) { /* a posix-compliant system can always fseeko() on a file */ if (fseeko(bf->fp, offset, SEEK_SET) != 0) ESL_EXCEPTION(eslEINVAL, "fseeko() failed, probably bad offset"); bf->baseoffset = offset; bf->n = 0; bf->pos = 0; status = buffer_refill(bf, 0); if (status == eslEOF) ESL_EXCEPTION(eslEINVAL, "requested offset is beyond end of file"); else if (status != eslOK) return status; } #endif /*_POSIX_VERSION*/ else if (offset < bf->baseoffset) /* we've already streamed past the requested offset. */ ESL_EXCEPTION(eslEINVAL, "can't rewind stream past base offset"); else /* offset is ahead of pos (or on it); fast forward, put bf->pos on it, reloading bf->mem as needed, respecting any anchors */ { while (offset >= bf->baseoffset + bf->n) { bf->pos = bf->n; status = buffer_refill(bf, 0); if (status == eslEOF) ESL_EXCEPTION(eslEINVAL, "requested offset is beyond end of stream"); else if (status != eslOK) return status; } bf->pos = offset - bf->baseoffset; status = buffer_refill(bf, 0); if (status != eslEOF && status != eslOK) return status; } } else ESL_EXCEPTION(eslEINCONCEIVABLE, "attempting to manipulate an uninitialized buffer"); return eslOK; } /* Function: esl_buffer_SetAnchor() * Synopsis: Sets an anchor in an input stream. * * Purpose: Set an anchor at byte (in input coords) in * input : which means, keep everything from this byte * on in buffer memory, until anchor is raised. * * The presence of an anchor affects new reads from ; * are protected from overwrite, and may be * moved to as new data is read from the * stream. Anchors are only needed for input streams that * we read chunkwise. If entire input is already in , * setting an anchor is a no-op. * * In general, the caller should remember what anchor(s) it * sets, so it can raise them later with * . * * Byte must be in the current buffer window. If * not, an exception is thrown. * * Only one anchor is active at a time. If an anchor is * already set for , the most upstream one is used. * * Args: bf - input buffer * offset - absolute position in input, <0..inputlen-1> * * Returns: on success. * * Throws: if is not in current buffer window. */ int esl_buffer_SetAnchor(ESL_BUFFER *bf, esl_pos_t offset) { if (! bf->fp) return eslOK; /* without an open stream, no-op */ if (offset < bf->baseoffset || offset > bf->baseoffset + bf->n) ESL_EXCEPTION(eslEINVAL, "can't set an anchor outside current buffer"); if (bf->anchor == -1 || offset-bf->baseoffset < bf->anchor) { /* setting a new anchor */ bf->anchor = offset-bf->baseoffset; bf->nanchor = 1; } else if (offset-bf->baseoffset == bf->anchor) { /* reinforcing an anchor */ bf->nanchor++; } return eslOK; } /* Function: esl_buffer_SetStableAnchor() * Synopsis: Set a stable anchor. * * Purpose: Same as , except the anchor is * such that all pointers returned by <_Get*()> functions * (i.e. as opposed to just the last <_Get*> function) * will remain valid at least until the anchor is raised. * * The main use of this is when the caller wants to get * multiple lines or tokens in the input before parsing * them. * * A stable anchor prevents buffer refills/reloads from * moving the internal memory around while the anchor is * in place. * * Args: bf - input buffer * offset - absolute position in input, <0..inputlen-1> * * Returns: on success. * * Throws: if is not in current buffer window. * * Notes: We make a special call for stable anchors, as opposed * to most anchors, because the call here * to rebaseline the buffer's is expensive. */ int esl_buffer_SetStableAnchor(ESL_BUFFER *bf, esl_pos_t offset) { esl_pos_t ndel; int status; if (! bf->fp) return eslOK; /* without an open stream, no-op: everything is available */ if ( (status = esl_buffer_SetAnchor(bf, offset)) != eslOK) return status; ndel = bf->anchor; bf->anchor = 0; bf->n -= ndel; bf->pos -= ndel; if (bf->n) memmove(bf->mem, bf->mem+ndel, bf->n); bf->baseoffset += ndel; return eslOK; } /* Function: esl_buffer_RaiseAnchor() * Synopsis: Raise an anchor. * * Purpose: Declare that an anchor previously set at * in buffer may be raised. * * is in absolute input coordinates (<0..len-1> for * an input of length ). Because it's supposed to be * anchored, this position ought to be in the current * buffer window. If an anchor is in effect in , * should be at or distal to that anchor. * * Args: bf - input buffer * offset - absolute position in input, <0..len-1> * * Returns: on success. * * Throws: if is outside current buffer window, * or if it is proximal to the active anchor in . */ int esl_buffer_RaiseAnchor(ESL_BUFFER *bf, esl_pos_t offset) { if (offset < bf->baseoffset || offset > bf->baseoffset + bf->n) ESL_EXCEPTION(eslEINVAL, "anchor is outside current buffer window? can't happen."); if (bf->anchor > offset - bf->baseoffset) ESL_EXCEPTION(eslEINVAL, "anchor is proximal to current active anchor"); if (bf->anchor == offset - bf->baseoffset) { bf->nanchor--; if (bf->nanchor == 0) bf->anchor = -1; } return eslOK; } /*--------------- end, ESL_BUFFER manipulation ------------------*/ /***************************************************************** *# 3. Raw access to the buffer *****************************************************************/ /* Function: esl_buffer_Get() * Synopsis: Get a pointer into the current buffer window. * Incept: SRE, Mon Jan 31 20:45:22 2011 [Casa de Gatos] * * Purpose: Given a buffer , return a pointer to the current * parsing position in <*ret_p>, and the number of valid * bytes from that position in <*ret_n>. * * If buffer is at EOF (no valid bytes remain), returns * with in <*ret_p> and 0 in <*ret_n>. * * The buffer's parsing position pos> is NOT * changed. Another call will return exactly * the same

and . Each call is generally * followed by a call. It's the call * that moves pos> and refills the buffer. * * Assumes that the buffer is correctly loaded, * with either at least bytes after the * parser position, or near/at EOF. * * Args: bf - buffer to get ptr from * ret_p - RETURN: pointer to current parser position, or NULL on EOF * ret_n - RETURN: number of valid bytes at *ret_p, or 0 on EOF * * Returns: on success; * if no valid bytes remain in the input, or if * <*ret_n> is less than . * * Throws: on allocation failure. * if fread() fails mysteriously. * if internal state of is corrupt. */ int esl_buffer_Get(ESL_BUFFER *bf, char **ret_p, esl_pos_t *ret_n) { *ret_p = (bf->pos < bf->n ? bf->mem + bf->pos : NULL); *ret_n = (bf->pos < bf->n ? bf->n - bf->pos : 0); return (bf->pos < bf->n ? eslOK : eslEOF); } /* Function: esl_buffer_Set() * Synopsis: Set position and correct state of the . * Incept: SRE, Sun Jan 2 11:56:00 2011 [Zaragoza] * * Purpose: Reset the state of buffer : we were recently * given a pointer

by an call * and we parsed bytes starting at . * * pos> is set to point at , and we * reload the buffer (if necessary) to try to have at * least pagesize> bytes of input following that * position. * * One use is in raw parsing, where we stop parsing * somewhere in the buffer: * \begin{cchunk} * esl_buffer_Get(bf, &p, &n); * (do some stuff on p[0..n-1], using up bytes) * esl_buffer_Set(bf, p, nused); * \end{cchunk} * This includes the case of nused=n, where we parse the * whole buffer that Get() gave us, and the Set() call may * be needed to load new input data before the next Get(). * * Another use is an idiom for peeking at a token, line, or * a number of bytes without moving the parser position: * \begin{cchunk} * esl_buffer_GetLine(bf, &p, &n); * (do we like what we see in p[0..n-1]? no? then put it back) * esl_buffer_Set(bf, p, 0); * \end{cchunk} * * Because it is responsible for loading new input as * needed, Set() may reoffset and reallocate . If the * caller wants an anchor respected, it must make sure that * anchor is still in effect; i.e., a caller that is * restoring state to an should call Set() * BEFORE calling RaiseAnchor(). * * As a special case, if

is NULL, then is * ignored, pos> is left whereever it was, and the * only thing the attempts to do is to fulfill the * pagesize guarantee from the current position. If a *

has been returned by a Get*() call because we * reached EOF, for example in some parsing loop that the * EOF has broken us out of, it is safe to call * : this is a no-op on a * buffer that is at EOF. * * Args: bf - buffer to set * p - pointer that previous Get() gave us * nused - number of bytes we used, starting at p[0] * * Returns: on success. * * Throws: on allocation failure. * if fread() fails mysteriously. * if internal state of is corrupt. */ int esl_buffer_Set(ESL_BUFFER *bf, char *p, esl_pos_t nused) { int status; if (p) bf->pos = (p - bf->mem) + nused; status = buffer_refill(bf, 0); if (status == eslOK || status == eslEOF) return eslOK; else return status; } /*----------------- end, lowest level access --------------------*/ /***************************************************************** *# 4. Line-based parsing *****************************************************************/ /* Function: esl_buffer_GetLine() * Synopsis: Get ptr to next line in buffer. * * Purpose: Get a pointer <*opt_p> to the next line in buffer , * and the length of the line in <*opt_n> (in bytes, and * exclusive of newline bytes). Advance buffer position * past (one) newline, putting it on the next valid data * byte. Thus is one data line. It is not * NUL-terminated. * * 's buffer may be re(al)located as needed, to get * the whole line into the current window. * * Because the caller only gets a pointer into 's * internal state, no other functions * should be called until the caller is done with

. * * To peek at next line, use Set to restore 's state: * \begin{cchunk} * esl_buffer_GetLine(bf, &p, &n); * esl_buffer_Set(bf, p, 0); * \end{cchunk} * * Args: bf - buffer to get line from * *opt_p - optRETURN: pointer to next line * *opt_n - optRETURN: line length, exclusive of newline. * * Returns: on success. <*opt_p> is a valid pointer into 's buffer, * and <*opt_n> is >=0. (0 would be an empty line.) * * if there's no line (even blank). * On EOF, <*opt_p> is NULL and <*opt_n> is 0. * * Throws: if allocation fails. * if a system call such as fread() fails unexpectedly * if internal state is corrupt. */ int esl_buffer_GetLine(ESL_BUFFER *bf, char **opt_p, esl_pos_t *opt_n) { int anch_set = FALSE; esl_pos_t nc, nskip; esl_pos_t anch; int status; /* The next line starts at offset */ anch = bf->baseoffset + bf->pos; status = esl_buffer_SetAnchor(bf, anch); if (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } /* we know bf->pos is in current window */ else if (status != eslOK) { goto ERROR; } anch_set = TRUE; if ( (status = buffer_countline(bf, &nc, &nskip)) != eslOK) goto ERROR; /* includes normal EOF. */ status = buffer_refill(bf, nskip); if (status != eslEOF && status != eslOK) goto ERROR; /* accept EOF here, we've already got our line */ anch_set = FALSE; status = esl_buffer_RaiseAnchor(bf, anch); if (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } /* we know bf->pos is in current window */ else if (status != eslOK) { goto ERROR; } if (opt_p) *opt_p = bf->mem + bf->pos; if (opt_n) *opt_n = nc; bf->pos += nskip; return eslOK; ERROR: if (anch_set) esl_buffer_RaiseAnchor(bf, anch); if (opt_p) *opt_p = NULL; if (opt_n) *opt_n = 0; return status; } /* Function: esl_buffer_FetchLine() * Synopsis: Fetch next line from a buffer. * Incept: SRE, Tue Feb 1 15:37:34 2011 [Janelia] * * Purpose: Get the next line from the buffer , starting from its * current position. Return an allocated copy of it in * <*opt_p>, and its length in bytes in <*opt_n>. Advance * the buffer position past (one) newline, putting it on * the next valid byte. The last line in a file does not * need to be terminated by a newline. The returned memory is not * NUL-terminated. * * If the next line is empty (solely a newline character), * returns , but with <*opt_p> as and * <*opt_n> as 0. * * Caller is responsible for free'ing <*opt_p>. * * Because <*ret_p> is a copy of 's internal buffer, * caller may continue to manipulate , unlike * . * * Args: bf - buffer to get line from * *opt_p - optRETURN: pointer to allocated copy of next line * *opt_n - optRETURN: length of <*opt_p> * * Returns: on success. Either <*opt_p> is an allocated copy * of next line and <*opt_n> is $>0$, or <*opt_p> is * and <*opt_n> is 0 (in the case where the line is empty, 8 immediately terminated by newline, such as \verb+"\n"+.). * * if there's no line (even blank). * On EOF, <*opt_p> is NULL and <*opt_n> is 0. * * Throws: if allocation fails. * if a system call such as fread() fails unexpectedly * if internal state is corrupt. */ int esl_buffer_FetchLine(ESL_BUFFER *bf, char **opt_p, esl_pos_t *opt_n) { int anch_set = FALSE; char *p = NULL; esl_pos_t anch; esl_pos_t nc, nskip; int status; anch = bf->baseoffset + bf->pos; status = esl_buffer_SetAnchor(bf, anch); if (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } /* we know bf->pos is in current window */ else if (status != eslOK) { goto ERROR; } anch_set = TRUE; if ( (status = buffer_countline(bf, &nc, &nskip)) != eslOK) goto ERROR; /* inc. normal EOF */ if (nc) { /* nc==0 on an empty line - then <*opt_p> comes back NULL */ ESL_ALLOC(p, sizeof(char) * nc); memcpy(p, bf->mem+bf->pos, nc); } bf->pos += nskip; anch_set = FALSE; status = esl_buffer_RaiseAnchor(bf, anch); if (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } else if (status != eslOK) { goto ERROR; } status = buffer_refill(bf, 0); if (status != eslEOF && status != eslOK) goto ERROR; /* accept EOF here, we've already got our line */ if (opt_p) *opt_p = p; else free(p); if (opt_n) *opt_n = nc; return eslOK; ERROR: if (anch_set) esl_buffer_RaiseAnchor(bf, anch); if (p) free(p); if (opt_p) *opt_p = NULL; if (opt_n) *opt_n = 0; return status; } /* Function: esl_buffer_FetchLineAsStr() * Synopsis: Fetch next line from buffer, and NUL-terminate it. * Incept: SRE, Thu Feb 10 09:22:47 2011 [Janelia] * * Purpose: Same as except the * returned line is -terminated and can be treated * as a string. * * Args: bf - input buffer * *opt_s - optRETURN: pointer to allocated copy of next line * *opt_n - optRETURN: strlen() of <*opt_s> * * Returns: on success. <*opt_p> is an allocated copy * of next line and <*opt_n> is >=0. (0 would be an empty line * terminated by newline, such as \verb+\n+.) * * if there's no line (even blank). * On EOF, <*opt_p> is NULL and <*opt_n> is 0. * * Throws: if allocation fails. * if an anchoring attempt is invalid * if a system call such as fread() fails unexpectedly * if internal state is corrupt. */ int esl_buffer_FetchLineAsStr(ESL_BUFFER *bf, char **opt_s, esl_pos_t *opt_n) { int anch_set = FALSE; char *s = NULL; esl_pos_t anch; esl_pos_t nc, nskip; int status; anch = bf->baseoffset + bf->pos; status = esl_buffer_SetAnchor(bf, anch); if (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } /* we know bf->pos is in current window */ else if (status != eslOK) { goto ERROR; } anch_set = TRUE; if ( (status = buffer_countline(bf, &nc, &nskip)) != eslOK) goto ERROR; /* inc normal EOF */ ESL_ALLOC(s, sizeof(char) * (nc+1)); memcpy(s, bf->mem+bf->pos, nc); s[nc] = '\0'; bf->pos += nskip; anch_set = FALSE; status = esl_buffer_RaiseAnchor(bf, anch); if (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } else if (status != eslOK) { goto ERROR; } status = buffer_refill(bf, 0); if (status != eslEOF && status != eslOK) goto ERROR; /* accept EOF here, we've already got our line */ if (opt_s) *opt_s = s; else free(s); if (opt_n) *opt_n = nc; return eslOK; ERROR: if (anch_set) esl_buffer_RaiseAnchor(bf, anch); if (s) free(s); if (opt_s) *opt_s = NULL; if (opt_n) *opt_n = 0; return status; } /*------------------ end, line-based parsing --------------------*/ /***************************************************************** *# 5. Token-based parsing *****************************************************************/ /* Function: esl_buffer_GetToken() * Synopsis: Get next token. * Incept: SRE, Sat Jan 1 19:42:44 2011 [Janelia] * * Purpose: Find the next token in delimited by the separator * characters in or newline. Return a pointer * to that token in <*opt_tok>, and its length in <*opt_n>. * A 'token' consists of one or more characters that are * neither in nor a newline (verb+\r+ or \verb+\n+). * * Because the caller only gets a pointer into the buffer's * current memory, it should not call another * function until it's done with the token * or made a copy of it. * * In detail, starting from the buffer 's current * point; first skip past any leading characters in . If EOF * is reached, return . If the point is now on a * newline, skip past it and return . Set an anchor * at the current point. Count how many non-separator * characters occur from the current point

* (expand/refill buffer as needed), and define the token * as . Skip any trailing characters in . * Set the point to the start of the next token (a char not * in .) Release the anchor and return. * * If caller knows how many tokens it expects on each line, * it should not include \verb+"\r\n"+ in its . This way, * hitting a newline will cause a return. The * caller can check for expected or unexpected 's. * * If the caller doesn't care how many tokens it allows per * line, it should include \verb+"\r\n"+ in its . Now * newlines will be skipped like any other separator * character, and the only normal returns are and * . * * Args: bf - open buffer * sep - string defining separator characters; <" \t\r\n"> for example. * opt_tok - optRETURN: pointer to token in the * opt_n - optRETURN: number of characters in the token * * Returns: if a token is found; <*ret_p> points to it, * and <*opt_n> is its length in chars (> 0). The current * point is at the start of the next token. * * if the input ends before any token is found. * Now <*ret_p> is and <*opt_n> is 0. The current * point is at EOF. * * if a line ends before a token is found. (This * case only arises if *sep does not contain newline.) * Now <*ret_p> is and <*opt_n> is 0. The current * point is at the next character following the newline. * * mem> may be modified and/or reallocated, if new * input reads are required to find the entire token. * * Throws: if an allocation fails. * Now <*ret_p> is and <*opt_n> is 0. The * current point is undefined. */ int esl_buffer_GetToken(ESL_BUFFER *bf, const char *sep, char **opt_tok, esl_pos_t *opt_n) { esl_pos_t anch; esl_pos_t nc; int anch_set = FALSE; int status; if ( (status = buffer_skipsep(bf, sep)) != eslOK) goto ERROR; /* includes EOF */ /* Now bf->pos is sitting on first char after seps */ if ( ( status = buffer_newline(bf)) != eslOK) goto ERROR; /* includes EOL */ anch = bf->baseoffset + bf->pos; status = esl_buffer_SetAnchor(bf, anch); if (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } /* we know bf->pos is in current window */ else if (status != eslOK) { goto ERROR; } anch_set = TRUE; if ( (status = buffer_counttok(bf, sep, &nc)) != eslOK) goto ERROR; bf->pos += nc; if ((status = buffer_skipsep(bf, sep)) != eslOK && status != eslEOF) goto ERROR; if ((status = buffer_refill(bf, 0)) != eslOK && status != eslEOF) goto ERROR; if (opt_tok) *opt_tok = bf->mem + (anch - bf->baseoffset); if (opt_n) *opt_n = nc; anch_set = FALSE; status = esl_buffer_RaiseAnchor(bf, anch); if (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } else if (status != eslOK) { goto ERROR; } return eslOK; ERROR: if (anch_set) esl_buffer_RaiseAnchor(bf, anch); if (opt_tok) *opt_tok = NULL; if (opt_n) *opt_n = 0; return status; } /* Function: esl_buffer_FetchToken() * Synopsis: Fetch copy of next token. * Incept: SRE, Thu Feb 24 08:54:54 2011 [Janelia] * * Purpose: Essentially the same as , except a * copy of the token is made into newly allocated memory, * and a pointer to this memory is returned in <*opt_tok>. * The caller is responsible for freeing the memory. * * The token is raw memory, not a -terminated string. * To fetch tokens as -terminated strings, see * . * * Args: bf - open buffer * sep - string defining separator characters; <" \t\r\n"> for example. * opt_tok - optRETURN: allocated copy of token * opt_n - optRETURN: number of characters in the token * * Returns: if a token is found; <*ret_p> points to it, * and <*opt_n> is its length in chars (> 0). The current * point is at the start of the next token. * * if the input ends before any token is found. * Now <*ret_p> is and <*opt_n> is 0. The current * point is at EOF. * * if a line ends before a token is found. (This * case only arises if *sep does not contain newline.) * Now <*ret_p> is and <*opt_n> is 0. The current * point is at the next character following the newline. * * mem> may be modified and/or reallocated, if new * input reads are required to find the entire token. * * Throws: if an allocation fails. * Now <*ret_p> is and <*opt_n> is 0. The * current point is undefined. */ int esl_buffer_FetchToken(ESL_BUFFER *bf, const char *sep, char **opt_tok, esl_pos_t *opt_n) { char *tok = NULL; esl_pos_t anch; esl_pos_t nc; int anch_set = FALSE; int status; if ( (status = buffer_skipsep(bf, sep)) != eslOK) goto ERROR; /* includes EOF */ /* Now bf->pos is sitting on first char after seps */ if ( ( status = buffer_newline(bf)) != eslOK) goto ERROR; /* includes EOL */ anch = bf->baseoffset + bf->pos; status = esl_buffer_SetAnchor(bf, anch); if (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } else if (status != eslOK) { goto ERROR; } anch_set = TRUE; if ( (status = buffer_counttok(bf, sep, &nc)) != eslOK) goto ERROR; /* now we know that pos..pos+nc-1 is a token; pos+nc is the next parser position */ /* copy the token */ ESL_ALLOC(tok, sizeof(char) * nc); memcpy(tok, bf->mem+bf->pos, nc); bf->pos += nc; /* in a Fetch, we can raise the anchor before the new refill */ status = esl_buffer_RaiseAnchor(bf, anch); if (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } else if (status != eslOK) { goto ERROR; } anch_set = FALSE; if ((status = buffer_skipsep(bf, sep)) != eslOK && status != eslEOF) goto ERROR; if ((status = buffer_refill(bf, 0)) != eslOK && status != eslEOF) goto ERROR; if (opt_tok) *opt_tok = tok; else free(tok); if (opt_n) *opt_n = nc; return eslOK; ERROR: if (tok) free(tok); if (anch_set) esl_buffer_RaiseAnchor(bf, anch); if (opt_tok) *opt_tok = NULL; if (opt_n) *opt_n = 0; return status; } /* Function: esl_buffer_FetchTokenAsStr() * Synopsis: Fetch copy of next token as \verb+\0+-terminated string. * Incept: SRE, Sat Jan 1 19:31:57 2011 [Zaragoza] * * Purpose: Essentially the same as * except the copied token is \verb+\0+-terminated so it * can be treated as a string. * * Args: bf - open buffer * sep - string defining separator characters; <" \t\r\n"> for example. * opt_tok - optRETURN: allocated copy of token * opt_n - optRETURN: number of characters in the token * * Returns: if a token is found; <*ret_p> points to it, * and <*opt_n> is its length in chars (> 0). The current * point is at the start of the next token. * * if the input ends before any token is found. * Now <*ret_p> is and <*opt_n> is 0. The current * point is at EOF. * * if a line ends before a token is found. (This * case only arises if *sep does not contain newline.) * Now <*ret_p> is and <*opt_n> is 0. The current * point is at the next character following the newline. * * mem> may be modified and/or reallocated, if new * input reads are required to find the entire token. * * Throws: if an allocation fails. * Now <*ret_p> is and <*opt_n> is 0. The * current point is undefined. */ int esl_buffer_FetchTokenAsStr(ESL_BUFFER *bf, const char *sep, char **opt_tok, esl_pos_t *opt_n) { char *tok = NULL; esl_pos_t anch; esl_pos_t nc; int anch_set = FALSE; int status; if ( (status = buffer_skipsep(bf, sep)) != eslOK) goto ERROR; /* includes EOF */ /* Now bf->pos is sitting on first char after seps */ if ( ( status = buffer_newline(bf)) != eslOK) goto ERROR; /* includes EOL */ anch = bf->baseoffset + bf->pos; status = esl_buffer_SetAnchor(bf, anch); if (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } else if (status != eslOK) { goto ERROR; } anch_set = TRUE; if ( (status = buffer_counttok(bf, sep, &nc)) != eslOK) goto ERROR; /* now we know that pos..pos+nc-1 is a token; pos+nc is the next parser position */ /* copy the token */ ESL_ALLOC(tok, sizeof(char) * (nc+1)); memcpy(tok, bf->mem+bf->pos, nc); tok[nc] = '\0'; bf->pos += nc; /* in a Fetch, we can raise the anchor before the new refill */ status = esl_buffer_RaiseAnchor(bf, anch); if (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; } else if (status != eslOK) { goto ERROR; } anch_set = FALSE; if ((status = buffer_skipsep(bf, sep)) != eslOK && status != eslEOF) goto ERROR; if ((status = buffer_refill(bf, 0)) != eslOK && status != eslEOF) goto ERROR; if (opt_tok) *opt_tok = tok; else free(tok); if (opt_n) *opt_n = nc; return eslOK; ERROR: if (tok) free(tok); if (anch_set) esl_buffer_RaiseAnchor(bf, anch); if (opt_tok) *opt_tok = NULL; if (opt_n) *opt_n = 0; return status; } /*----------------- end, token-based parsing --------------------*/ /***************************************************************** *# 6. Binary (fread-like) parsing *****************************************************************/ /* Function: esl_buffer_Read() * Synopsis: Copy a fixed number of bytes from a buffer. * Incept: SRE, Thu Feb 24 09:25:04 2011 [Janelia] * * Purpose: Given an input buffer , read exactly * characters into memory

provided by the caller. * * Suitable for copying known-width scalars from * binary files, as in: * \begin{cchunk} * char c; * int n; * esl_buffer_Read(bf, sizeof(char), c); * esl_buffer_Read(bf, sizeof(int), n); * \end{cchunk} * * Args: bf - open input buffer * nbytes - number of characters to read * p - caller-provided memory for storing the copied bytes * * Returns: on success;

contains exactly * of data from , and the point is advanced by . * * if less than characters remain * in . Point is unchanged. * * Throws: if an allocation fails. * if an fread() fails mysteriously. * if internal state of is corrupted. */ int esl_buffer_Read(ESL_BUFFER *bf, size_t nbytes, void *p) { int status; if (bf->n - bf->pos < nbytes) { status = buffer_refill(bf, nbytes + bf->pagesize); if (status == eslEOF) return eslEOF; else if (status != eslOK) return status; /* EMEM, ESYS, EINCONCEIVABLE */ else if (bf->n-bf->pos < nbytes) return eslEOF; } memcpy(p, bf->mem+bf->pos, nbytes); bf->pos += nbytes; if ((status = buffer_refill(bf, 0)) != eslOK && status != eslEOF) return status; /* accept EOF, we've already copied what we need */ return eslOK; } /*------------ end, binary (fread-like) parsing -----------------*/ /***************************************************************** * 7. Private (static) functions *****************************************************************/ /* buffer_create() * SRE, Sun Jan 23 19:18:40 2011 [UA975 IAD->SFO] * * Allocate a new ESL_BUFFER and return it in <*ret_bf>; * with all fields initialized; return . * * On allocation failure, returns and <*ret_bf> * is . */ static int buffer_create(ESL_BUFFER **ret_bf) { ESL_BUFFER *bf = NULL; int status; ESL_ALLOC(bf, sizeof(ESL_BUFFER)); bf->mem = NULL; bf->n = 0; bf->balloc = 0; bf->pos = 0; bf->baseoffset = 0; bf->anchor = -1; bf->fp = NULL; bf->filename = NULL; bf->cmdline = NULL; bf->pagesize = eslBUFFER_PAGESIZE; bf->errmsg[0] = '\0'; bf->mode_is = eslBUFFER_UNSET; *ret_bf = bf; return eslOK; ERROR: if (bf) free(bf); *ret_bf = NULL; return status; } /* buffer_init_file_mmap() * SRE, Sun Jan 23 19:02:34 2011 [UA975 IAD->SFO] * * On entry, we've already opened the file; * bf->fp = open stream for reading * bf->filename = name of the file * * On success, returns eslOK, and *ret_bf has: * bf->mem mmap'ed file * bf->n size of the entire file, in bytes * bf->mode_is eslBUFFER_MMAP * * On failure, returns error code, and *ret_bf has: * bf->errmsg helpful error message * (all other fields at creation defaults) * * On exception, returns error code, and *ret_bf * is left with all fields at creation defaults. */ static int buffer_init_file_mmap(ESL_BUFFER *bf, esl_pos_t filesize) { int status; /* mmap(addr, len, prot, flags, fd, offset */ bf->mem = mmap(0, filesize, PROT_READ, MAP_PRIVATE, fileno(bf->fp), 0); if (bf->mem == MAP_FAILED) ESL_XEXCEPTION(eslESYS, "mmap()"); bf->n = filesize; bf->mode_is = eslBUFFER_MMAP; /* open fp no longer needed - close it. */ fclose(bf->fp); bf->fp = NULL; return eslOK; ERROR: if (bf->mem != MAP_FAILED) { munmap(bf->mem, bf->n); bf->mem = NULL; } bf->n = 0; bf->mode_is = eslBUFFER_UNSET; return status; } int buffer_init_file_slurped(ESL_BUFFER *bf, esl_pos_t filesize) { int status; ESL_ALLOC(bf->mem, sizeof(char) * filesize); bf->balloc = filesize; bf->n = fread(bf->mem, sizeof(char), filesize, bf->fp); if (bf->n < filesize) ESL_XEXCEPTION(eslESYS, "failed to slurp %s\n", bf->filename); bf->mode_is = eslBUFFER_ALLFILE; fclose(bf->fp); /* open fp no longer needed - close it. */ bf->fp = NULL; return eslOK; ERROR: if (bf->mem) { free(bf->mem); bf->mem = NULL; } return status; } int buffer_init_file_basic(ESL_BUFFER *bf) { int status; ESL_ALLOC(bf->mem, sizeof(char) * bf->pagesize); bf->balloc = bf->pagesize; bf->n = fread(bf->mem, sizeof(char), bf->pagesize, bf->fp); if (bf->n < bf->pagesize && ferror(bf->fp)) ESL_XEXCEPTION(eslESYS, "failed to read first chunk of %s", bf->filename); bf->mode_is = eslBUFFER_FILE; return eslOK; ERROR: if (bf->mem) { free(bf->mem); bf->mem = NULL; } return status; } /* buffer_refill() * For current buffer position bf->pos, try to assure that * we have at least pagesize> bytes loaded in mem> to parse. * * If new read won't fit (space remaining: balloc-n; read size: memreadsize) * then make room for it: * if no anchor: ndel = pos * else w/ anchor: ndel = anchor; anchor = 0 * n -= ndel bytes are moved * pos -= ndel * if (n) move bytes from to 0. * base_offset += ndel * if (n + memreadsize > balloc) reallocate mem * fread() a block into position mem+n * n += memreadsize * * For example, suppose we've completely parsed the buffer (pos == n) and we have no * anchor: then: * ndel = n * n = 0 (no bytes are moved) * pos = 0 * base_offset += n * fread a new block into mem+0 * n += memreadsize * * Returns: on success. * if no data remain in buffer nor to be read. Now pos == n. * * Throws: if an allocation fails. * if fread() fails mysteriously. * if internal state of is corrupt. */ static int buffer_refill(ESL_BUFFER *bf, esl_pos_t nmin) { esl_pos_t ndel; esl_pos_t nread; int status; if (! bf->fp || feof(bf->fp)) return ( (bf->pos < bf->n) ? eslOK : eslEOF); /* without an active fp, we have whole buffer in memory; either no-op OK, or EOF */ if (bf->n - bf->pos >= nmin + bf->pagesize) return eslOK; /* if we already have enough data in buffer window, no-op w */ if (bf->pos > bf->n) ESL_EXCEPTION(eslEINCONCEIVABLE, "impossible position for buffer "); /* Relocation, shift left to conserve memory */ if (bf->balloc - bf->n < bf->pagesize && bf->pos > 0) { if (bf->anchor == -1) ndel = bf->pos; else { ndel = bf->anchor; bf->anchor = 0; } bf->n -= ndel; bf->pos -= ndel; if (bf->n) memmove(bf->mem, bf->mem+ndel, bf->n); bf->baseoffset += ndel; } if (bf->n + bf->pagesize > bf->balloc) { void *tmp; ESL_RALLOC(bf->mem, tmp, sizeof(char) * (bf->n + bf->pagesize)); bf->balloc = bf->n + bf->pagesize; } nread = fread(bf->mem+bf->n, sizeof(char), bf->pagesize, bf->fp); if (nread == 0 && ferror(bf->fp)) ESL_EXCEPTION(eslESYS, "fread() failure"); bf->n += nread; if (nread == 0 && bf->pos == bf->n) return eslEOF; else return eslOK; ERROR: return status; } /* buffer_countline() * The guts of esl_buffer_GetLine(). * * Starting from the current buffer position bf->pos, count the number * of characters to the next newline or EOF. Return the number of * chars EXCLUSIVE of newline in <*opt_nc>; this is the line length to * be parsed starting from bf->pos. Return the number of chars * INCLUSIVE of newline in <*opt_nskip>; this is the amount the caller * should increment bf->pos by, to position the parser at the start of * the next line. * * This is used in GetLine() and FetchLine*(). They differ in the order * of calling RaiseAnchor() and buffer_refill(): if we're * fetching, we don't need to keep the memory of the current * line in the buffer's window, so we can raise the anchor * before refilling the buffer, which can save some memory. * * If necessary, the buffer is refilled. This relies on the caller having * already set an anchor at the beginning of the line. * * Newlines are defined by esl_memnewline(). * * Returns: on success. * <*opt_nc> is >= 0. (0 means an empty line.) * <*opt_nskip> is >= <*opt_nc>. (Equality means the line ended at EOF.) * * if there's no line (even blank). * On EOF, <*opt_p> is NULL and <*opt_n> is 0. * * Throws: if allocation fails. * if a system call such as fread() fails unexpectedly. * if internal state is corrupt. */ static int buffer_countline(ESL_BUFFER *bf, esl_pos_t *opt_nc, esl_pos_t *opt_nskip) { esl_pos_t nc; /* line length exclusive of newline */ esl_pos_t nc2; /* tmp nc for a suffix of the current line */ int nterm; /* length of newline; 0..2 */ int status; if (bf->pos == bf->n) { status = eslEOF; goto ERROR; } /* normal EOF */ nc = 0; do { if ((status = esl_memnewline(bf->mem + bf->pos + nc, bf->n - bf->pos - nc, &nc2, &nterm)) != eslOK && status != eslEOD) goto ERROR; nc += nc2; if (nc2 && bf->mem[bf->pos+nc-1] == '\r') nc--; /* handle case where we've only read up to \r of a \r\n newline */ if (nterm) break; if (( status = buffer_refill(bf, nc+nterm)) != eslOK && status != eslEOF) goto ERROR; } while (bf->n - bf->pos > nc); /* EOF check. If we get here with status == eslEOF, nc = nterm = 0, * then esl_memnewline found no data for a line and buffer_refill returned EOF. */ if (status == eslEOF && nc == 0 && nterm == 0) goto ERROR; /* Now the line extends from bf->pos..pos+nc-1 in the buffer window * The newline itself is position pos+nc..pos+nc+nterm-1 (one or two chars) * The next line starts at pos+nc+nterm * We know that everything up to pos+nc+nterm-1 is in the buffer window. * It's safe to set the current buffer position to pos+nc+nterm, which * may be bf->n; the next buffer_refill() will do the right thing with it. */ if (opt_nc) *opt_nc = nc; if (opt_nskip) *opt_nskip = nc + nterm; return eslOK; ERROR: /* including normal EOF */ if (opt_nc) *opt_nc = 0; if (opt_nskip) *opt_nskip = 0; return status; } /* First chunk of token parsing, shared amongst GetToken(), FetchToken(), FetchTokenAsStr() * Skip the parser past chars in *sep; return eslEOF if no non-sep char is found. * Now parser is bf->pos == bf->n, buffer is in EOF state. * eslOK on success, and bf->pos is on the first nonsep char. * * Returns: eslOK or eslEOF * Throws: eslEMEM, eslESYS, eslEINCONCEIVABLE */ static int buffer_skipsep(ESL_BUFFER *bf, const char *sep) { int status; /* skip characters in sep[], or hit EOF. */ do { for ( ; bf->pos < bf->n; bf->pos++) if (strchr(sep, bf->mem[bf->pos]) == NULL) goto DONE; if ( (status = buffer_refill(bf, 0)) != eslOK && status != eslEOF) return status; } while (bf->n > bf->pos); DONE: return (bf->pos == bf->n ? eslEOF : eslOK); } /* buffer_skipnewline() * if bf->pos is on a newline (1 or 2 chars); * advance bf->pos to next byte after newline and return eslEOL * else do nothing, and return eslOK. */ static int buffer_newline(ESL_BUFFER *bf) { esl_pos_t nc = bf->n - bf->pos; int status; if (nc == 0) return eslEOL; /* no newline, but EOF is as good as */ if (nc >= 1 && bf->mem[bf->pos] == '\n') { bf->pos += 1; return eslEOL; } if (nc >= 2 && memcmp(bf->mem + bf->pos, "\r\n", 2) == 0) { bf->pos += 2; return eslEOL; } status = buffer_refill(bf, 0); if (status != eslEOF && status != eslOK) return status; return eslOK; } /* bf->pos is sitting on a non-sep, non-newline character, starting * a token (i.e., the way buffer_skipsep() left us on * success). Caller has set anchor to be sure this position stays in * buffer. Count how many nonsep, nonnewline characters there are, * starting here. Expand bf as needed. */ static int buffer_counttok(ESL_BUFFER *bf, const char *sep, esl_pos_t *ret_nc) { esl_pos_t nc; int status; /* skip chars NOT in sep[]. */ nc = 1; do { for ( ; nc < bf->n-bf->pos; nc++) { if (strchr(sep, bf->mem[bf->pos+nc]) != NULL) break; /* token ends on any char in sep */ if (bf->mem[bf->pos+nc] == '\n') break; /* token also always ends on a newline */ } if (nc < bf->n-bf->pos) break; /* token ended in our current buffer */ if ( (status = buffer_refill(bf, nc)) != eslOK && status != eslEOF) goto ERROR; } while (bf->n - bf->pos > nc); if (bf->mem[bf->pos+nc] == '\n' && bf->mem[bf->pos+nc-1] == '\r') { nc--; } /* bf->mem[bf->pos+nc] now sitting on the first char that's in sep, or a newline char */ *ret_nc = nc; return eslOK; ERROR: *ret_nc = 0; return status; } /*----------------- end, private functions ----------------------*/ /***************************************************************** * 8. Benchmark *****************************************************************/ #ifdef eslBUFFER_BENCHMARK /* compile: gcc -g -Wall -I. -L. -o esl_buffer_benchmark -DeslBUFFER_BENCHMARK esl_buffer.c -leasel -lm * run: ./esl_buffer_benchmark */ #include "esl_config.h" #include #include #include #include #include "easel.h" #include "esl_buffer.h" #include "esl_getopts.h" #include "esl_stopwatch.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for buffer module"; static void benchmark_buffer_raw(char *filename, esl_pos_t *counts) { ESL_BUFFER *bf = NULL; char *p; esl_pos_t nc; esl_pos_t pos; esl_buffer_OpenFile(filename, &bf); while (esl_buffer_Get(bf, &p, &nc) == eslOK) { for (pos = 0; pos < nc; pos++) counts[(int) p[pos]]++; esl_buffer_Set(bf, p, nc); } esl_buffer_Close(bf); return; } static void benchmark_buffer_lines(char *filename, esl_pos_t *counts) { ESL_BUFFER *bf = NULL; char *p; esl_pos_t nc; esl_pos_t pos; esl_buffer_OpenFile(filename, &bf); while (esl_buffer_GetLine(bf, &p, &nc) == eslOK) { for (pos = 0; pos < nc; pos++) counts[(int) p[pos]]++; } esl_buffer_Close(bf); return; } static void benchmark_buffer_stream_raw(char *filename, esl_pos_t *counts) { FILE *fp = fopen(filename, "rb"); ESL_BUFFER *bf = NULL; char *p; esl_pos_t nc; esl_pos_t pos; esl_buffer_OpenStream(fp, &bf); while (esl_buffer_Get(bf, &p, &nc) == eslOK) { for (pos = 0; pos < nc; pos++) counts[(int) p[pos]]++; esl_buffer_Set(bf, p, nc); } esl_buffer_Close(bf); return; } static void benchmark_buffer_stream_lines(char *filename, esl_pos_t *counts) { FILE *fp = fopen(filename, "rb"); ESL_BUFFER *bf = NULL; char *p; esl_pos_t nc; esl_pos_t pos; esl_buffer_OpenStream(fp, &bf); while (esl_buffer_GetLine(bf, &p, &nc) == eslOK) { for (pos = 0; pos < nc; pos++) counts[(int) p[pos]]++; } esl_buffer_Close(bf); return; } static void benchmark_buffer_tokens(char *filename, esl_pos_t *counts) { FILE *fp = fopen(filename, "rb"); ESL_BUFFER *bf = NULL; char sep[] = " \t\r\n"; char *tok; esl_pos_t nc; esl_pos_t pos; esl_buffer_OpenStream(fp, &bf); while (esl_buffer_GetToken(bf, sep, &tok, &nc) == eslOK) { for (pos = 0; pos < nc; pos++) counts[(int) tok[pos]]++; } esl_buffer_Close(bf); return; } static void benchmark_mmap(char *filename, esl_pos_t filesize, esl_pos_t *counts) { char *buf = NULL; int prot = PROT_READ; int flags = MAP_FILE | MAP_PRIVATE; int fd = -1; off_t offset = 0; esl_pos_t pos; fd = open(filename, O_RDONLY); buf = (char *) mmap(0, filesize, prot, flags, fd, offset); // posix_madvise(buf, len, POSIX_MADV_SEQUENTIAL); close(fd); for (pos = 0; pos < filesize; pos++) counts[(int) buf[pos]]++; munmap(buf, filesize); return; } static void benchmark_one_read(char *filename, esl_pos_t filesize, esl_pos_t *counts) { int fd = -1; char *buf = malloc(filesize); esl_pos_t pos; fd = open(filename, O_RDONLY); read(fd, buf, filesize); close(fd); for (pos = 0; pos < filesize; pos++) counts[(int) buf[pos]]++; free(buf); return; } static void benchmark_one_fread(char *filename, esl_pos_t filesize, esl_pos_t *counts) { FILE *fp = fopen(filename, "rb"); char *buf = malloc(filesize); esl_pos_t pos; fread(buf, 1, filesize, fp); fclose(fp); for (pos = 0; pos < filesize; pos++) counts[(int) buf[pos]]++; free(buf); return; } static void benchmark_fgets(char *filename, esl_pos_t *counts) { FILE *fp = fopen(filename, "rb"); char *buf = malloc(4096); char *p; while (fgets(buf, 4096, fp) != NULL) { for (p = buf; *p != '\0'; p++) counts[(int) (*p)]++; } fclose(fp); free(buf); return; } static void benchmark_strtok(char *filename, esl_pos_t *counts) { FILE *fp = fopen(filename, "rb"); char *buf = malloc(8192); char *tok = NULL; char *p, *p2; while (fgets(buf, 8192, fp) != NULL) { p = buf; do { if ((tok = strtok(p, " \t\r\n")) != NULL) { for (p2 = tok; *p2 != '\0'; p2++) counts[(int) (*p2)]++; } p = NULL; } while (tok); } fclose(fp); free(buf); return; } static void benchmark_esl_fgets(char *filename, esl_pos_t *counts) { FILE *fp = fopen(filename, "rb"); char *buf = NULL; int n = 0; char *p; while (esl_fgets(&buf, &n, fp) == eslOK) { for (p = buf; *p != '\0'; p++) counts[(int) (*p)]++; } fclose(fp); free(buf); return; } int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_STOPWATCH *w = esl_stopwatch_Create(); char *infile = esl_opt_GetArg(go, 1); struct stat fstats; esl_pos_t filesize; esl_pos_t counts[256]; stat(infile, &fstats); filesize = fstats.st_size; /* roughly in fastest->slowest order */ esl_stopwatch_Start(w); benchmark_mmap (infile, filesize, counts); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "mmap(): "); esl_stopwatch_Start(w); benchmark_buffer_stream_raw (infile, counts); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "ESL_BUFFER (stream, raw): "); esl_stopwatch_Start(w); benchmark_buffer_raw (infile, counts); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "ESL_BUFFER (mmap, raw): "); esl_stopwatch_Start(w); benchmark_one_read (infile, filesize, counts); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "one read(): "); esl_stopwatch_Start(w); benchmark_one_fread (infile, filesize, counts); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "one fread(): "); esl_stopwatch_Start(w); benchmark_fgets (infile, counts); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "fgets(): "); esl_stopwatch_Start(w); benchmark_esl_fgets (infile, counts); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "esl_fgets(): "); esl_stopwatch_Start(w); benchmark_buffer_lines (infile, counts); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "ESL_BUFFER (mmap, lines): "); esl_stopwatch_Start(w); benchmark_buffer_stream_lines(infile, counts); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "ESL_BUFFER (stream, lines): "); esl_stopwatch_Start(w); benchmark_strtok (infile, counts); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "strtok(): "); esl_stopwatch_Start(w); benchmark_buffer_tokens (infile, counts); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "ESL_BUFFER (stream, tokens): "); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*eslBUFFER_BENCHMARK*/ /*----------------- end, benchmark driver -----------------------*/ /***************************************************************** * 9. Unit tests *****************************************************************/ #ifdef eslBUFFER_TESTDRIVE #include "esl_random.h" #include /* A variant of esl_buffer_OpenFile() that lets us specify * whether we want to slurp, mmap, or basic, using * eslBUFFER_ALLFILE, eslBUFFER_MMAP, eslBUFFER_FILE flags. * We use this to force code coverage of the different * buffer_init_file_*() functions. * For example, the default unit test driver generates a * test file of ~3 MB, which is always slurped and never * mmap()'ed; if we want to test mmap() we have to force it. */ static int buffer_OpenFileAs(const char *filename, enum esl_buffer_mode_e mode_is, ESL_BUFFER **ret_bf) { char msg[] = "buffer_OpenFileAs() failed"; ESL_BUFFER *bf = NULL; #ifdef _POSIX_VERSION struct stat fileinfo; #endif esl_pos_t filesize = -1; if (buffer_create(&bf) != eslOK) esl_fatal(msg); if ((bf->fp = fopen(filename, "rb")) == NULL) esl_fatal(msg); if (esl_strdup(filename, -1, &(bf->filename)) != eslOK) esl_fatal(msg); #ifdef _POSIX_VERSION if (fstat(fileno(bf->fp), &fileinfo) == -1) esl_fatal(msg); filesize = fileinfo.st_size; bf->pagesize = fileinfo.st_blksize; if (bf->pagesize < 512) bf->pagesize = 512; if (bf->pagesize > 4194304) bf->pagesize = 4194304; #endif switch (mode_is) { case eslBUFFER_ALLFILE: if (buffer_init_file_slurped(bf, filesize) != eslOK) esl_fatal(msg); break; case eslBUFFER_MMAP: if (buffer_init_file_mmap (bf, filesize) != eslOK) esl_fatal(msg); break; case eslBUFFER_FILE: if (buffer_init_file_basic (bf) != eslOK) esl_fatal(msg); break; default: esl_fatal(msg); } *ret_bf = bf; return eslOK; } /* Test lines: * long: \s{0,1}[ _{0,5000} ]\s{0,1}\r?\n (line length > pagesize) * short: \s{0,1}[ _{0,60} ]\s{0,1}\r?\n (typical text file lines) * empty: \s{0,1}\r?\n (parser shouldn't lose track of blank lines) * Final line in file does not necessarily end in newline. */ static void create_testfile_lines(ESL_RANDOMNESS *r, char *tmpfile, int nlines) { char msg[] = "create_testfile_lines() failed"; FILE *fp = NULL; double fq_leadspace = 0.2; double fq_longline = 0.1; double fq_empty = 0.2; double fq_dos = 0.5; double fq_finalnewline = 0.5; int longxnum = 5000; int shortxnum = 60; double roll; int i, n; if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg); for (i = 0; i < nlines; i++) { if (esl_random(r) < fq_leadspace) fputc(' ', fp); roll = esl_random(r); if (roll < fq_empty) { if (esl_random(r) < fq_dos) fputs("\r\n", fp); else fputc('\n', fp); continue; } if (roll < fq_empty + fq_longline) { n = esl_rnd_Roll(r, longxnum+1); } else { n = esl_rnd_Roll(r, shortxnum+1); } fprintf(fp, "[%d %*s %d]", i+1, n, " ", i+1); if (esl_random(r) < fq_leadspace) fputc(' ', fp); if (i < nlines-1 || esl_random(r) < fq_finalnewline) { if (esl_random(r) < fq_dos) fputs("\r\n", fp); else fputc('\n', fp); } } fclose(fp); } static void utest_compare_line(char *p, esl_pos_t n, int nline_expected) { const char msg[] = "line input fails to match expected"; int32_t which = 0; int nc; if (esl_memspn(p, n, " \t\r\n") == n) return; /* blank test lines */ if (n && *p == ' ') { p++; n--; } if (n && *p == '[') { p++; n--; } else esl_fatal(msg); if (! isdigit(*p)) esl_fatal(msg); if (esl_mem_strtoi32(p, n, 10, &nc, &which) != eslOK) esl_fatal(msg); if (which != nline_expected) esl_fatal(msg); p += nc; n -= nc; while (n && isspace(*p)) { p++; n--; } if (!n) esl_fatal(msg); if (! isdigit(*p)) esl_fatal(msg); if (esl_mem_strtoi32(p, n, 10, &nc, &which) != eslOK) esl_fatal(msg); if (which != nline_expected) esl_fatal(msg); p += nc; n -= nc; if (n && *p == ']') { p++; n--; } else esl_fatal(msg); if (n && *p == ' ') { p++; n--; } if (n != 0) esl_fatal(msg); } static int utest_whichline(char *p, esl_pos_t n) { char msg[] = "utest_whichline() failed"; int which; if (esl_memspn(p, n, " \t\r\n") == n) return -1; while (n && isspace(*p)) { p++; n--; } if (n && *p == '[') { p++; n--; } else esl_fatal(msg); if (esl_mem_strtoi32(p, n, 10, NULL, &which) != eslOK) esl_fatal(msg); return which; } static void utest_SetOffset(const char *tmpfile, int nlines_expected) { char msg[] = "utest_Position() failed"; FILE *fp; ESL_BUFFER *bf; char *p; esl_pos_t n; esl_pos_t thisoffset, testoffset1, testoffset2; int testline1 = -1; int thisline, testline2; #ifdef HAVE_GZIP char gzipfile[32]; char cmd[256]; #endif /* Find offsets of lines ~2000 and ~5000; we'll use these positions as tests. */ if (nlines_expected <= 8000) return; /* require at least 8000 lines to do this test */ if (esl_buffer_Open(tmpfile, NULL, &bf) != eslOK) esl_fatal(msg); testline1 = -1; thisoffset = esl_buffer_GetOffset(bf); while (esl_buffer_GetLine(bf, &p, &n) == eslOK) { if ((thisline = utest_whichline(p, n)) == -1) continue; if (testline1 == -1 && thisline >= 2000) { testline1 = thisline; testoffset1 = thisoffset; } if (thisline >= 5000) { testline2 = thisline; testoffset2 = thisoffset; break; } thisoffset = esl_buffer_GetOffset(bf); } esl_buffer_Close(bf); /* Now we're going to walk through SetOffset()'s various cases; * we'll also exercise Open() while we're at it. */ /* Test 1. We have the entire file in bf->mem and SetOffset() is trivial. * Since a file is either slurped or mmap'ed, this is what we expect. */ if ( esl_buffer_Open(tmpfile, NULL, &bf) != eslOK) esl_fatal(msg); if ( esl_buffer_SetOffset(bf, testoffset2) != eslOK) esl_fatal(msg); if ( esl_buffer_GetLine(bf, &p, &n) != eslOK) esl_fatal(msg); utest_compare_line(p, n, testline2); esl_buffer_Close(bf); /* All subsequent tests are for streams. */ /* Test 2. Offset *forward* to line ~2000 (testline1), and read it. * Anchor. * Offset forward again to line ~5000 (testline2), read it. * Anchor (should no-op; first anchor is already in effect) * Offset backward to testline1, read it. * Try to offset back to 0; this should throw eslEINVAL. * (also exercise gzip reading, if we can) */ #if defined HAVE_GZIP snprintf(gzipfile, 32, "%s.gz", tmpfile); snprintf(cmd, 256, "gzip -c %s 2>/dev/null > %s", tmpfile, gzipfile); if (system(cmd) != 0) esl_fatal(msg); if (esl_buffer_Open(gzipfile, NULL, &bf) != eslOK) esl_fatal(msg); fp = NULL; #else if ( (fp = fopen(tmpfile, "r")) == NULL) esl_fatal(msg); if (esl_buffer_OpenStream(fp, &bf) != eslOK) esl_fatal(msg); #endif if (esl_buffer_SetOffset(bf, testoffset1) != eslOK) esl_fatal(msg); if (esl_buffer_GetLine(bf, &p, &n) != eslOK) esl_fatal(msg); utest_compare_line(p, n, testline1); if (esl_buffer_SetAnchor(bf, testoffset1) != eslOK) esl_fatal(msg); if (esl_buffer_SetOffset(bf, testoffset2) != eslOK) esl_fatal(msg); if (esl_buffer_GetLine(bf, &p, &n) != eslOK) esl_fatal(msg); utest_compare_line(p, n, testline2); if (esl_buffer_SetAnchor(bf, testoffset2) != eslOK) esl_fatal(msg); if (esl_buffer_RaiseAnchor(bf, testoffset2) != eslOK) esl_fatal(msg); if (esl_buffer_SetOffset(bf, testoffset1) != eslOK) esl_fatal(msg); if (esl_buffer_GetLine(bf, &p, &n) != eslOK) esl_fatal(msg); utest_compare_line(p, n, testline1); esl_exception_SetHandler(&esl_nonfatal_handler); if (esl_buffer_SetOffset(bf, 0) != eslEINVAL) esl_fatal(msg); esl_exception_ResetDefaultHandler(); esl_buffer_Close(bf); if (fp) fclose(fp); /* test 3. The remaining case is using fseeko(), which * can only happen on a eslBUFFER_FILE opened in basic mode. */ #ifdef _POSIX_VERSION if (buffer_OpenFileAs(tmpfile, eslBUFFER_FILE, &bf) != eslOK) esl_fatal(msg); if (esl_buffer_SetOffset(bf, testoffset2) != eslOK) esl_fatal(msg); if (esl_buffer_GetLine(bf, &p, &n) != eslOK) esl_fatal(msg); utest_compare_line(p, n, testline2); if (esl_buffer_SetOffset(bf, testoffset1) != eslOK) esl_fatal(msg); if (esl_buffer_GetLine(bf, &p, &n) != eslOK) esl_fatal(msg); utest_compare_line(p, n, testline1); esl_buffer_Close(bf); #endif /*_POSIX_VERSION*/ #if defined HAVE_GZIP remove(gzipfile); #endif } static void utest_Get(ESL_BUFFER *bf, int nlines_expected) { const char msg[] = "utest_Get() failed"; char *p = NULL; esl_pos_t n = 0; int nlines = 0; char line[8192]; int lpos = 0; esl_pos_t i; int status; while ( (status = esl_buffer_Get(bf, &p, &n)) == eslOK) { for (i = 0; i < n; i++) { if (p[i] == '\n') { nlines++; if (lpos && line[lpos-1] == '\r') lpos--; utest_compare_line(line, lpos, nlines); lpos = 0; i++; break; } else line[lpos++] = p[i]; } esl_buffer_Set(bf, p, i); } if (lpos) { nlines++; utest_compare_line(line, lpos, nlines); } if (status != eslEOF) esl_fatal(msg); if (nlines != nlines_expected) esl_fatal(msg); } static void utest_GetLine(ESL_BUFFER *bf, int nlines_expected) { const char msg[] = "utest_GetLine() failed"; char *p = NULL; esl_pos_t n = 0; int nlines = 0; int status; while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK) { nlines++; utest_compare_line(p, n, nlines); } if (status != eslEOF) esl_fatal(msg); if (nlines != nlines_expected) esl_fatal(msg); return; } static void utest_FetchLine(ESL_BUFFER *bf, int nlines_expected) { const char msg[] = "utest_FetchLine() failed"; char *p = NULL; esl_pos_t n = 0; int nlines = 0; int status; while ( (status = esl_buffer_FetchLine(bf, &p, &n)) == eslOK) { nlines++; utest_compare_line(p, n, nlines); free(p); } if (status != eslEOF) esl_fatal(msg); if (nlines != nlines_expected) esl_fatal(msg); return; } static void utest_FetchLineAsStr(ESL_BUFFER *bf, int nlines_expected) { const char msg[] = "utest_FetchLineAsStr() failed"; char *p = NULL; esl_pos_t n = 0; int nlines = 0; int status; while ( (status = esl_buffer_FetchLineAsStr(bf, &p, &n)) == eslOK) { nlines++; utest_compare_line(p, n, nlines); if (p[n] != '\0') esl_fatal(msg); free(p); } if (status != eslEOF) esl_fatal(msg); if (nlines != nlines_expected) esl_fatal(msg); return; } static void utest_GetToken(ESL_BUFFER *bf, int nlines_expected) { char msg[] = "utest_GetToken() failed"; const char sep[] = " \t"; /* without newline chars \r\n, GetToken() will return EOL when it reaches end of line. *Next* GetToken() succeeds. */ int nlines = 0; char *tok; int which; int nc; esl_pos_t n; int status; while ((status = esl_buffer_GetToken(bf, sep, &tok, &n)) == eslOK || status == eslEOL) /* EOL needed for blank lines */ { /* each line has two tokens: "[%d" and "%d]" */ nlines++; if (status == eslEOL) continue; if (*tok == '[') { tok++; n--; } else esl_fatal(msg); if (! isdigit(*tok)) esl_fatal(msg); if (esl_mem_strtoi32(tok, n, 10, &nc, &which) != eslOK) esl_fatal(msg); if (nc != n) esl_fatal(msg); if (which != nlines) esl_fatal(msg); if (esl_buffer_GetToken(bf, sep, &tok, &n) != eslOK) esl_fatal(msg); if (! isdigit(*tok)) esl_fatal(msg); if (esl_mem_strtoi32(tok, n, 10, &nc, &which) != eslOK) esl_fatal(msg); if (nc != n-1) esl_fatal(msg); if (which != nlines) esl_fatal(msg); if (*(tok+nc) != ']') esl_fatal(msg); if ( (status = esl_buffer_GetToken(bf, sep, &tok, &n)) != eslEOL && status != eslEOF) esl_fatal(msg); if (tok != NULL || n != 0) esl_fatal(msg); } if (status != eslEOF) esl_fatal(msg); if (nlines != nlines_expected) esl_fatal(msg); return; } static void utest_GetTokenWrapped(ESL_BUFFER *bf, int nlines_expected) { char msg[] = "utest_GetTokenWrapped() failed"; const char sep[] = " \t\r\n"; /* with newline chars \r\n, GetToken() wraps to next line to find token. */ int nlines = 0; char *tok; int which; int nc; esl_pos_t n; int status; while ((status = esl_buffer_GetToken(bf, sep, &tok, &n)) == eslOK) { /* each line has two tokens: "[%d" and "%d]" */ nlines++; if (*tok == '[') { tok++; n--; } else esl_fatal(msg); if (! isdigit(*tok)) esl_fatal(msg); if (esl_mem_strtoi32(tok, n, 10, &nc, &which) != eslOK) esl_fatal(msg); if (nc != n) esl_fatal(msg); if (which > nlines) nlines = which; /* can skip lines that are all newline */ else if (which < nlines) esl_fatal(msg); if (esl_buffer_GetToken(bf, sep, &tok, &n) != eslOK) esl_fatal(msg); if (! isdigit(*tok)) esl_fatal(msg); if (esl_mem_strtoi32(tok, n, 10, &nc, &which) != eslOK) esl_fatal(msg); if (nc != n-1) esl_fatal(msg); if (which != nlines) esl_fatal(msg); if (*(tok+nc) != ']') esl_fatal(msg); } if (status != eslEOF) esl_fatal(msg); if (nlines > nlines_expected) esl_fatal(msg); /* probably can't happen. can't check for equality though - last line(s) could be blank */ return; } static void utest_FetchToken(ESL_BUFFER *bf, int nlines_expected) { char msg[] = "utest_FetchToken() failed"; const char sep[] = " \t"; int nlines = 0; char *tok; int which; int nc; esl_pos_t n; int status; while ((status = esl_buffer_FetchToken(bf, sep, &tok, &n)) == eslOK || status == eslEOL) /* EOL needed for blank lines */ { /* each line has two tokens: "[%d" and "%d]" */ nlines++; if (status == eslEOL) { if (tok != NULL) esl_fatal(msg); else continue; } if (*tok != '[') esl_fatal(msg); if (! isdigit(*(tok+1))) esl_fatal(msg); if (esl_mem_strtoi32(tok+1, n-1, 10, &nc, &which) != eslOK) esl_fatal(msg); if (nc != n-1) esl_fatal(msg); if (which != nlines) esl_fatal(msg); free(tok); if (esl_buffer_FetchToken(bf, sep, &tok, &n) != eslOK) esl_fatal(msg); if (! isdigit(*tok)) esl_fatal(msg); if (esl_mem_strtoi32(tok, n, 10, &nc, &which) != eslOK) esl_fatal(msg); if (nc != n-1) esl_fatal(msg); if (which != nlines) esl_fatal(msg); if (*(tok+nc) != ']') esl_fatal(msg); free(tok); if ( (status = esl_buffer_FetchToken(bf, sep, &tok, &n)) != eslEOL && status != eslEOF) esl_fatal(msg); if (tok != NULL || n != 0) esl_fatal(msg); } if (status != eslEOF) esl_fatal(msg); if (nlines != nlines_expected) esl_fatal(msg); return; } static void utest_FetchTokenAsStrWrapped(ESL_BUFFER *bf, int nlines_expected) { char msg[] = "utest_FetchTokenAsStrWrapped() failed"; const char sep[] = " \t\r\n"; int nlines = 0; char *tok; int which; int nc; esl_pos_t n; int status; while ((status = esl_buffer_FetchTokenAsStr(bf, sep, &tok, &n)) == eslOK) { /* each line has two tokens: "[%d" and "%d]" */ nlines++; if (strlen(tok) != n) esl_fatal(msg); if (*tok != '[') esl_fatal(msg); if (! isdigit(*(tok+1))) esl_fatal(msg); if (esl_mem_strtoi32(tok+1, n-1, 10, &nc, &which) != eslOK) esl_fatal(msg); if (nc != n-1) esl_fatal(msg); if (which > nlines) nlines = which; /* can skip lines that are all newline */ else if (which < nlines) esl_fatal(msg); free(tok); if (esl_buffer_FetchTokenAsStr(bf, sep, &tok, &n) != eslOK) esl_fatal(msg); if (strlen(tok) != n) esl_fatal(msg); if (! isdigit(*tok)) esl_fatal(msg); if (esl_mem_strtoi32(tok, n, 10, &nc, &which) != eslOK) esl_fatal(msg); if (nc != n-1) esl_fatal(msg); if (which != nlines) esl_fatal(msg); if (*(tok+nc) != ']') esl_fatal(msg); free(tok); } if (status != eslEOF) esl_fatal(msg); if (nlines > nlines_expected) esl_fatal(msg); /* probably can't happen. can't check for equality though - last line(s) could be blank */ return; } static void utest_Read(void) { char msg[] = "utest_Read() failed"; char tmpfile[32] = "esltmpXXXXXX"; int32_t ntotal = 1000000; int32_t testi = 456789; /* arbitrary */ esl_pos_t testoffset = testi * sizeof(int32_t); int32_t i, val; FILE *fp; ESL_BUFFER *bf; if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg); for (i = 0; i < 1000000; i++) fwrite(&i, sizeof(int32_t), 1, fp); fclose(fp); if (esl_buffer_OpenFile (tmpfile, &bf) != eslOK) esl_fatal(msg); if (esl_buffer_SetOffset(bf, testoffset) != eslOK) esl_fatal(msg); for (i = testi; i < ntotal; i++) { if (esl_buffer_Read(bf, sizeof(int32_t), &val) != eslOK) esl_fatal(msg); if (val != i) esl_fatal(msg); } if (esl_buffer_Read(bf, sizeof(int32_t), &val) != eslEOF) esl_fatal(msg); esl_buffer_Close(bf); remove(tmpfile); } static void utest_OpenFile(const char *tmpfile, int nlines) { char msg[] = "utest_OpenFile failed"; ESL_BUFFER *bf; /* Normal errors */ if (esl_buffer_OpenFile("esltmpXYZXYZXYZ", &bf) != eslENOTFOUND || bf == NULL) esl_fatal(msg); else esl_buffer_Close(bf); } static void utest_OpenStream(const char *tmpfile, int nlines) { char msg[] = "utest_OpenStream failed"; ESL_BUFFER *bf; /* Exceptions */ esl_exception_SetHandler(&esl_nonfatal_handler); if (esl_buffer_OpenStream(NULL, &bf) != eslEINVAL) esl_fatal(msg); else esl_buffer_Close(bf); esl_exception_ResetDefaultHandler(); } static void utest_OpenPipe(const char *tmpfile, int nlines) { ESL_BUFFER *bf; char msg[] = "utest_OpenPipe failed"; char goodcmd[] = "cat %s 2>/dev/null"; char badcmd[] = "./esltmpXYZXYZXYZ %s 2>/dev/null"; /* Normal errors */ if (esl_buffer_OpenPipe("esltmpXYZXYZXYZ", goodcmd, &bf) != eslENOTFOUND || bf == NULL) esl_fatal(msg); else esl_buffer_Close(bf); if (esl_buffer_OpenPipe(tmpfile, badcmd, &bf) != eslFAIL || bf == NULL) esl_fatal(msg); else esl_buffer_Close(bf); } #endif /* eslBUFFER_TESTDRIVE */ /***************************************************************** * 10. Test driver *****************************************************************/ #ifdef eslBUFFER_TESTDRIVE /* compile: gcc -g -Wall -I. -L. -o esl_buffer_utest -DeslBUFFER_TESTDRIVE esl_buffer.c -leasel -lm * (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_buffer_utest -DeslBUFFER_TESTDRIVE esl_buffer.c -leasel -lm * run: ./esl_buffer_utest */ #include "esl_config.h" #include #include "easel.h" #include "esl_buffer.h" #include "esl_getopts.h" #include "esl_random.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, {"-n", eslARG_INT, "10000", NULL, NULL, NULL, NULL, NULL, "set number of lines in line-based tests to ", 0}, {"-s", eslARG_INT, "0", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0}, {"-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show verbose commentary/output", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for buffer module"; int main(int argc, char **argv) { char msg[] = "esl_buffer unit test driver failed"; ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_BUFFER *bf = NULL; ESL_BUFFER *bftmp = NULL; FILE *fp = NULL; int be_verbose = esl_opt_GetBoolean(go, "-v"); int nlines = esl_opt_GetInteger(go, "-n"); char tmpfile[32] = "esltmpXXXXXX"; char cmdfmt[] = "cat %s 2>/dev/null"; int bufidx, nbuftypes; int testidx, ntesttypes; int status; create_testfile_lines(r, tmpfile, nlines); if (be_verbose) printf("created file %s; rng seed %" PRIu32 "\n", tmpfile, esl_randomness_GetSeed(r)); utest_OpenFile (tmpfile, nlines); utest_OpenStream(tmpfile, nlines); utest_OpenPipe (tmpfile, nlines); utest_SetOffset (tmpfile, nlines); utest_Read(); nbuftypes = 7; ntesttypes = 8; for (bufidx = 0; bufidx < nbuftypes; bufidx++) for (testidx = 0; testidx < ntesttypes; testidx++) { switch (bufidx) { case 0: if (esl_buffer_OpenFile (tmpfile, &bf) != eslOK) esl_fatal(msg); break; case 1: if ( buffer_OpenFileAs(tmpfile, eslBUFFER_ALLFILE, &bf) != eslOK) esl_fatal(msg); break; case 2: if ( buffer_OpenFileAs(tmpfile, eslBUFFER_MMAP, &bf) != eslOK) esl_fatal(msg); break; case 3: if ( buffer_OpenFileAs(tmpfile, eslBUFFER_FILE, &bf) != eslOK) esl_fatal(msg); break; case 4: if ((fp = fopen(tmpfile, "rb")) == NULL) esl_fatal(msg); if (esl_buffer_OpenStream(fp, &bf) != eslOK) esl_fatal(msg); break; case 5: if (esl_buffer_OpenPipe(tmpfile, cmdfmt, &bf) != eslOK) esl_fatal(msg); break; case 6: if (esl_buffer_OpenFile(tmpfile, &bftmp) != eslOK) esl_fatal(msg); if (esl_buffer_SetAnchor(bftmp, 0) != eslOK) esl_fatal(msg); while ( (status = esl_buffer_GetLine(bftmp, NULL, NULL)) == eslOK); /*empty loop, do nothing*/ if (status != eslEOF) esl_fatal(msg); /* now bftmp->mem is a slurped file */ if (esl_buffer_OpenMem(bftmp->mem, bftmp->n, &bf) != eslOK) esl_fatal(msg); break; default: esl_fatal(msg); } switch (testidx) { case 0: utest_Get (bf, nlines); break; case 1: utest_GetLine (bf, nlines); break; case 2: utest_FetchLine (bf, nlines); break; case 3: utest_FetchLineAsStr (bf, nlines); break; case 4: utest_GetToken (bf, nlines); break; case 5: utest_GetTokenWrapped(bf, nlines); break; case 6: utest_FetchToken (bf, nlines); break; case 7: utest_FetchTokenAsStrWrapped(bf, nlines); break; default: esl_fatal(msg); } //printf("allocation: %" PRId64 "\n", bf->balloc); esl_buffer_Close(bf); bf = NULL; if (fp) { fclose(fp); fp = NULL; } if (bftmp) { esl_buffer_Close(bftmp); bftmp = NULL; } } esl_randomness_Destroy(r); esl_getopts_Destroy(go); remove(tmpfile); return 0; } #endif /* eslBUFFER_TESTDRIVE */ /***************************************************************** * 11. Examples. *****************************************************************/ /* compile: gcc -g -Wall -I. -L. -o esl_buffer_example -DeslBUFFER_EXAMPLE esl_buffer.c -leasel -lm * run: ./esl_buffer_example */ #ifdef eslBUFFER_EXAMPLE /*::cexcerpt::buffer_example::begin::*/ #include "easel.h" #include "esl_buffer.h" #include int main(int argc, char **argv) { char *filename = argv[1]; int xcount = 0; int linecount = 0; ESL_BUFFER *bf; char *p; esl_pos_t n, i; int status; status = esl_buffer_Open(filename, "TESTDIR", &bf); if (status == eslENOTFOUND) esl_fatal("open failed: %s", bf->errmsg); else if (status == eslFAIL) esl_fatal("gzip -dc failed: %s", bf->errmsg); else if (status != eslOK) esl_fatal("open failed with error code %d", status); while (( status = esl_buffer_GetLine(bf, &p, &n)) == eslOK) { linecount++; for (i = 0; i < n; i++) if (p[i] == 'x') xcount++; } if (status != eslEOF) esl_fatal("file %s: expected EOF, got code %d", bf->filename, status); esl_buffer_Close(bf); printf("Counted %d x's in %d lines.\n", xcount, linecount); return 0; } /*::cexcerpt::buffer_example::end::*/ #endif /*eslBUFFER_EXAMPLE*/ #ifdef eslBUFFER_EXAMPLE2 /*::cexcerpt::buffer_example2::begin::*/ #include "easel.h" #include "esl_buffer.h" #include int main(int argc, char **argv) { char *filename = argv[1]; int xcount = 0; int tokcount = 0; ESL_BUFFER *bf; char *tok; esl_pos_t n, i; int status; status = esl_buffer_Open(filename, "TESTDIR", &bf); if (status == eslENOTFOUND) esl_fatal("open failed: %s", bf->errmsg); else if (status == eslFAIL) esl_fatal("gzip -dc failed: %s", bf->errmsg); else if (status != eslOK) esl_fatal("open failed with error code %d", status); while ( (status = esl_buffer_GetToken(bf, " \t\r\n", &tok, &n)) == eslOK) { tokcount++; for (i = 0; i < n; i++) if (tok[i] == 'x') xcount++; } if (status != eslEOF) esl_fatal("did not see expected EOF; code %d instead", status); esl_buffer_Close(bf); printf("Counted %d x's in %d words\n", xcount, tokcount); return 0; } /*::cexcerpt::buffer_example2::end::*/ #endif /*eslBUFFER_EXAMPLE2*/ /* compile: gcc -g -Wall -I. -L. -o esl_buffer_example3 -DeslBUFFER_EXAMPLE3 esl_buffer.c -leasel -lm * run: ./esl_buffer_example3 */ #ifdef eslBUFFER_EXAMPLE3 /*::cexcerpt::buffer_example3::begin::*/ #include "easel.h" #include "esl_buffer.h" #include int main(int argc, char **argv) { char *filename = argv[1]; int xcount = 0; int tokcount = 0; int linecount = 0; ESL_BUFFER *bf; char *tok; esl_pos_t n,i; int status; status = esl_buffer_Open(filename, "TESTDIR", &bf); if (status == eslENOTFOUND) esl_fatal("open failed: %s", bf->errmsg); else if (status == eslFAIL) esl_fatal("gzip -dc failed: %s", bf->errmsg); else if (status != eslOK) esl_fatal("open failed with error code %d", status); while (1) { status = esl_buffer_GetToken(bf, " \t", &tok, &n); if (status == eslOK) { tokcount++; for (i = 0; i < n; i++) if (tok[i] == 'x') xcount++; } else if (status == eslEOL) linecount++; else if (status == eslEOF) break; } esl_buffer_Close(bf); printf("Counted %d x's in %d words on %d lines\n", xcount, tokcount, linecount); return 0; } /*::cexcerpt::buffer_example3::end::*/ #endif /*eslBUFFER_EXAMPLE3*/ /* compile: gcc -g -Wall -I. -L. -o esl_buffer_example4 -DeslBUFFER_EXAMPLE4 esl_buffer.c -leasel -lm * run: ./esl_buffer_example4 */ #ifdef eslBUFFER_EXAMPLE4 /*::cexcerpt::buffer_example4::begin::*/ #include "easel.h" #include "esl_buffer.h" #include #include int main(void) { char tmpfile[32] = "esltmpXXXXXX"; char s1[] = "hello world!"; char s2[] = "... and goodbye!"; char buf[256]; int n; FILE *fp; ESL_BUFFER *bf; int status; esl_tmpfile_named(tmpfile, &fp); n = strlen(s1)+1; fwrite(&n, sizeof(int), 1, fp); fwrite(s1, sizeof(char), n, fp); n = strlen(s2)+1; fwrite(&n, sizeof(int), 1, fp); fwrite(s2, sizeof(char), n, fp); fclose(fp); status = esl_buffer_Open(tmpfile, NULL, &bf); esl_buffer_Read(bf, sizeof(int), &n); esl_buffer_Read(bf, sizeof(char) * n, buf); puts(buf); esl_buffer_Read(bf, sizeof(int), &n); esl_buffer_Read(bf, sizeof(char) * n, buf); puts(buf); esl_buffer_Close(bf); return 0; } /*::cexcerpt::buffer_example4::end::*/ #endif /*eslBUFFER_EXAMPLE4*/ /* compile: gcc -g -Wall -I. -L. -o esl_buffer_example5 -DeslBUFFER_EXAMPLE5 esl_buffer.c -leasel -lm * run: ./esl_buffer_example5 */ #ifdef eslBUFFER_EXAMPLE5 /*::cexcerpt::buffer_example5a::begin::*/ #include "easel.h" #include "esl_buffer.h" #include #include int example_read_fasta(ESL_BUFFER *bf, char **ret_name, char **ret_desc, char **ret_seq, int *ret_seqlen) { char *seqname = NULL; char *seqdesc = NULL; char *seq = NULL; esl_pos_t seqlen = 0; esl_pos_t salloc = 0; char *p; void *tmp; esl_pos_t n, i; int status; if ((status = esl_buffer_Get(bf, &p, &n)) != eslOK) goto ERROR; /* includes normal EOF */ if (p[0] != '>') ESL_XFAIL(eslEINVAL, bf->errmsg, "Expected FASTA record to start with >"); esl_buffer_Set(bf, p, 1); status = esl_buffer_FetchTokenAsStr(bf, " \t", &seqname, NULL); if (status == eslEOF) ESL_XFAIL(eslEINVAL, bf->errmsg, "Premature eof while trying to parse sequence name"); else if (status == eslEOL) ESL_XFAIL(eslEINVAL, bf->errmsg, "No sequence name found"); status = esl_buffer_FetchLineAsStr(bf, &seqdesc, NULL); if (status == eslEOF) goto DONE; /* weird but ok. name, no desc, and a blank sequence. */ ESL_ALLOC(seq, sizeof(char) * 256); salloc = 256; while (esl_buffer_GetLine(bf, &p, &n) == eslOK) { if (p[0] == '>') { esl_buffer_Set(bf, p, 0); break; } if (seqlen+n+1 > salloc) { ESL_RALLOC(seq, tmp, sizeof(char) * (seqlen+n+1)); salloc = seqlen+n+1; } for (i = 0; i < n; i++) { if (! isspace(p[i])) { seq[seqlen++] = p[i]; } } } DONE: seq[seqlen] = '\0'; *ret_name = seqname; *ret_desc = seqdesc; *ret_seq = seq; *ret_seqlen = seqlen; return eslOK; ERROR: if (seqname) free(seqname); *ret_name = NULL; if (seqdesc) free(seqdesc); *ret_desc = NULL; if (seq) free(seq); *ret_seq = NULL; *ret_seqlen = 0; return status; } /*::cexcerpt::buffer_example5a::end::*/ /*::cexcerpt::buffer_example5b::begin::*/ int main(int argc, char **argv) { char *filename = argv[1]; ESL_BUFFER *bf; char *seqname, *seqdesc, *seq; int seqlen; int status; status = esl_buffer_Open(filename, "TESTDIR", &bf); if (status == eslENOTFOUND) esl_fatal("open failed: %s", bf->errmsg); else if (status == eslFAIL) esl_fatal("gzip -dc failed: %s", bf->errmsg); else if (status != eslOK) esl_fatal("open failed with error code %d", status); while ( (status = example_read_fasta(bf, &seqname, &seqdesc, &seq, &seqlen)) == eslOK) { printf("sequence: %20s length: %6d description: %s\n", seqname, seqlen, seqdesc); free(seqname); free(seqdesc); free(seq); } if (status != eslEOF) esl_fatal("bad FASTA format: %s", bf->errmsg); esl_buffer_Close(bf); return 0; } /*::cexcerpt::buffer_example5b::end::*/ #endif /*eslBUFFER_EXAMPLE5*/ /* compile: gcc -g -Wall -I. -L. -o esl_buffer_example6 -DeslBUFFER_EXAMPLE6 esl_buffer.c -leasel -lm * run: ./esl_buffer_example6 */ #ifdef eslBUFFER_EXAMPLE6 /*::cexcerpt::buffer_example6a::begin::*/ #include "easel.h" #include "esl_buffer.h" #include #include int example_read_lineblock(ESL_BUFFER *bf, char ***ret_lines, esl_pos_t **ret_lens, esl_pos_t *ret_nlines) { char **lines = NULL; esl_pos_t *lens = NULL; esl_pos_t nlines = 0; char *p; esl_pos_t n; esl_pos_t start_offset; void *tmp; int status; /* skip blank lines */ do { start_offset = esl_buffer_GetOffset(bf); if ( (status = esl_buffer_GetLine(bf, &p, &n)) != eslOK) goto ERROR; /* includes normal EOF */ } while (esl_memspn(p, n, " \t\r\n") == n); /* now p[0..n-1] is a non-blank line, start_offset is offset of p[0], point's on start of next line after it */ /* anchor stably at start of line block */ status = esl_buffer_SetStableAnchor(bf, start_offset); /* set pointers to non-blank lines */ do { ESL_RALLOC(lines, tmp, sizeof(char *) * (nlines+1)); ESL_RALLOC(lens, tmp, sizeof(char *) * (nlines+1)); lines[nlines] = p; lens[nlines] = n; nlines++; } while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK && esl_memspn(p, n, " \t\r\n") < n); /* now p[0] is on a blank line, and point is on start of next line * after it. you might be fine with that; or you might want to push * the blank line back onto the parser. If so, you need to push * the line back *before* raising the anchor, because the _Set() function * is allowed to relocate the buffer's internal memory. */ status = esl_buffer_Set(bf, p, 0); status = esl_buffer_RaiseAnchor(bf, start_offset); *ret_lines = lines; *ret_lens = lens; *ret_nlines = nlines; return eslOK; ERROR: if (lines) free(lines); if (lens) free(lens); *ret_lines = NULL; *ret_lens = NULL; *ret_nlines = 0; return status; } /*::cexcerpt::buffer_example6a::end::*/ /*::cexcerpt::buffer_example6b::begin::*/ int main(int argc, char **argv) { char *filename = argv[1]; int blockcount = 0; int linecount = 0; int xcount = 0; int i,j; ESL_BUFFER *bf; char **lines; esl_pos_t *lens; esl_pos_t nlines; int status; status = esl_buffer_Open(filename, "TESTDIR", &bf); if (status == eslENOTFOUND) esl_fatal("open failed: %s", bf->errmsg); else if (status == eslFAIL) esl_fatal("gzip -dc failed: %s", bf->errmsg); else if (status != eslOK) esl_fatal("open failed with error code %d", status); while ( (status = example_read_lineblock(bf, &lines, &lens, &nlines)) == eslOK) { blockcount++; linecount += nlines; for (i = 0; i < nlines; i++) for (j = 0; j < lens[i]; j++) if (lines[i][j] == 'x') xcount++; free(lines); free(lens); } if (status != eslEOF) esl_fatal("bad MSA format: %s", bf->errmsg); esl_buffer_Close(bf); printf("Counted %d x's in %d blocks of %d total lines\n", xcount, blockcount, linecount); return 0; } /*::cexcerpt::buffer_example6b::end::*/ #endif /*eslBUFFER_EXAMPLE6*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_buffer.c 832 2012-12-07 15:01:15Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_buffer.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_fileparser.c0000664361611702660230000006226412473612606016540 0ustar wheelerteddy/* A simple token-based file parsing system. * * Contents: * 1. The ESL_FILEPARSER object and its API. * 2. Private functions. * 3. Unit tests. * 4. Test driver. * 5. Examples. * 6. Copyright/license information. */ #include "esl_config.h" #include #include #include #include #include "easel.h" #include "esl_fileparser.h" static int nextline(ESL_FILEPARSER *efp); /***************************************************************** * 1. The ESL_FILEPARSER object and its API. *****************************************************************/ /* Function: esl_fileparser_Open() * Incept: SRE, Tue Apr 3 08:09:56 2007 [Janelia] * * Purpose: Opens for reading. * * As a special case, if is "-", set up the * fileparser to read and parse . * * is optional name of an environment variable, * such as . This environment variable contains a * colon-delimited list of directories in which the * may lie relative to. We looks first relative * to the current working directory, then in any * directories specified by . If is , * we only look in the current working directory. * * Args: filename - filename, relative path, or fully qualified path * envvar - optional environment variable name to find * colon-delimited list of directories * may reside in; or * ret_efp - RETURN: opened * * Returns: on success, and points * to a new object. * * Returns if can't * be opened for reading, and is set * to . * * Throws: on allocation failure. */ int esl_fileparser_Open(const char *filename, const char *envvar, ESL_FILEPARSER **ret_efp) { int status; ESL_FILEPARSER *efp = NULL; if ((efp = esl_fileparser_Create(NULL)) == NULL) { status = eslEMEM; goto ERROR; } if (strcmp(filename, "-") == 0) efp->fp = stdin; else if ((efp->fp = fopen(filename, "r")) != NULL) { if ((status = esl_strdup(filename, -1, &(efp->filename))) != eslOK) goto ERROR; } else if ((status = esl_FileEnvOpen(filename, envvar, &(efp->fp), &(efp->filename))) != eslOK) { status = eslENOTFOUND; goto ERROR; } *ret_efp = efp; return eslOK; ERROR: esl_fileparser_Close(efp); *ret_efp = NULL; return status; } /* Function: esl_fileparser_Create() * Incept: SRE, Fri Jul 9 12:50:29 2004 [St. Louis] * * Purpose: Take an open file , and transform it to * a fileparser object -- preparing to parse it * one whitespace-delimited field at a time. * * Args: fp - open FILE to parse * * Returns: a new object, which must be * free'd by the caller with . * * Throws: if an allocation failed. * * Xref: STL8 p.56. */ ESL_FILEPARSER * esl_fileparser_Create(FILE *fp) { int status; ESL_FILEPARSER *efp = NULL; ESL_ALLOC(efp, sizeof(ESL_FILEPARSER)); efp->fp = fp; efp->buf = NULL; efp->buflen = 0; efp->s = NULL; efp->commentchar = '\0'; efp->tok = NULL; efp->toklen = 0; efp->tokchar = '\0'; efp->filename = NULL; efp->linenumber = 0; efp->errbuf[0] = '\0'; efp->is_buffer = FALSE; efp->mem_buffer = NULL; efp->mem_size = 0; efp->mem_pos = 0; return efp; ERROR: esl_fileparser_Destroy(efp); return NULL; } /* Function: esl_fileparser_CreateMapped() * Incept: MSF, Mon Aug 16 2010 [Janelia] * * Purpose: Sets up a memory buffer to be parsed with the * file parser routines.Take an open file , and transform it to * a fileparser object -- preparing to parse it * one whitespace-delimited field at a time. * * Args: fp - open FILE to parse * * Returns: a new object, which must be * free'd by the caller with . * * Throws: if an allocation failed. * * Xref: STL8 p.56. */ ESL_FILEPARSER * esl_fileparser_CreateMapped(void *buffer, int size) { ESL_FILEPARSER *efp = NULL; if ((efp = esl_fileparser_Create(NULL)) == NULL) return NULL; efp->is_buffer = TRUE; efp->mem_buffer = buffer; efp->mem_size = size; return efp; } /* Function: esl_fileparser_SetCommentChar() * * Purpose: Defines a single character for comments. Anything * on a line following this character is ignored * when parsing. * * Args: efp - open fileparser * c - comment character ('#', for example) * * Returns: on success. */ int esl_fileparser_SetCommentChar(ESL_FILEPARSER *efp, char c) { efp->commentchar = c; return eslOK; } /* Function: esl_fileparser_GetToken() * Incept: SRE, Fri Jul 9 13:03:50 2004 [St. Louis] * * Purpose: Sets a pointer to the next field in the * file we're parsing. * * The pointer is into an internal line buffer * that may be invalidated upon the next call to a * function. If you want to store it, make a * copy. * * Args: efp - open fileparser * opt_tok - optRETURN: ptr to next field * opt_toklen - optRETURN: length of tok. * * Returns: if , contain valid data. * on normal end-of-file. * * Throws: if an allocation fails. * * Xref: STL8 p.56. */ int esl_fileparser_GetToken(ESL_FILEPARSER *efp, char **opt_tok, int *opt_toklen) { char *tok = NULL; int toklen = 0; int tokcode; int fcode; int goodtok; if (opt_tok != NULL) *opt_tok = NULL; if (opt_toklen != NULL) *opt_toklen = 0; /* Do we already have a token from a NextLine() call? */ if (efp->tok != NULL) { if (opt_tok != NULL) *opt_tok = efp->tok; if (opt_toklen != NULL) *opt_toklen = efp->toklen; efp->tok = NULL; efp->toklen = 0; efp->tokchar = '\0'; return eslOK; } /* If not, then find next token. */ /* First, make sure we have a line loaded. * On the first call to GetToken, we won't. */ if (efp->buf == NULL) { fcode = nextline(efp); if (fcode != eslOK) return fcode; } /* Start strtok()'ing this line to try to find token. * If we don't find one, keep loading lines until we * do, or we run out of data. */ do { goodtok = FALSE; tokcode = esl_strtok_adv(&(efp->s), " \t\r\n", &tok, &toklen, NULL); if (tokcode == eslEOL || (tokcode == eslOK && *tok == efp->commentchar)) { fcode = nextline(efp); if (fcode != eslOK) return fcode; } else if (tokcode == eslOK) goodtok = TRUE; else { sprintf(efp->errbuf, "esl_strtok() failed"); return tokcode;} } while (! goodtok); if (opt_tok != NULL) *opt_tok = tok; if (opt_toklen != NULL) *opt_toklen = toklen; return eslOK; } /* Function: esl_fileparser_NextLine() * Incept: SRE, Tue Apr 3 08:27:22 2007 [Janelia] * * Purpose: Advance the parser to the next non-blank, non-comment * data line that contains at least one token. * * Returns: on success. * if no more tokens remain in the file. * * Throws: on allocation error. */ int esl_fileparser_NextLine(ESL_FILEPARSER *efp) { int status; char *tok = NULL; int toklen = 0; char tokchar = '\0'; int tokcode; while ((status = nextline(efp)) == eslOK) { tokcode = esl_strtok_adv(&(efp->s), " \t\r\n", &tok, &toklen, &tokchar); if (tokcode == eslEOL || (tokcode == eslOK && *tok == efp->commentchar)) continue; /* no tokens on line */ if (tokcode != eslOK) ESL_XFAIL(tokcode, efp->errbuf, "esl_strtok() failed"); break; } if (status == eslEOF) { status = eslEOF; goto ERROR; } if (status != eslOK) ESL_XFAIL(status, efp->errbuf, "nextline() failed"); /* Remember this token. The next GetToken call will regurgitate it instead * of finding its own. efp->s now points to the character after tok ends. */ efp->tok = tok; efp->toklen = toklen; efp->tokchar = tokchar; return eslOK; ERROR: efp->tok = NULL; efp->toklen = 0; efp->tokchar = '\0'; return status; } /* Function: esl_fileparser_NextLinePeeked() * Synopsis: Read the next line, prepending a peek. * Incept: SRE, Wed Oct 15 10:08:37 2008 [Janelia] * * Purpose: Sometimes we need to peek at the start of an input stream * to see whether it is in a binary format, before we start * parsing it as ASCII lines. When this happens, the caller * will typically have used to read a fixed * number of bytes from the input stream, checked to see if * they are a magic number representing a binary format, * and found that they are not. The caller then wants to * switch to reading in ASCII format with the * API, but with those bytes included on the first * line. Because the file might start with comments or * blank lines that need to be skipped, we want to deal * with the peeked data in the context of the * . The caller cannot simply close and * reopen the stream, because the stream may be a pipe * ( or for example). * * The caller passes the bytes it peeked at with * in , and the number of bytes it peeked at in * . * * The parser is advanced to the next non-blank, * non-comment data line that contains at least one token, * taking the prepended into account. * * Args: efp - open fileparser * prefix - bytes that caller obtained by peeking with fread() * plen - number of bytes in prefix * * Returns: on success. * if no more tokens remain in the file. * * Throws: on allocation error. * * Xref: For an example, see HMMER's HMM save file input. */ int esl_fileparser_NextLinePeeked(ESL_FILEPARSER *efp, char *prefix, int plen) { int blen; void *tmp; char *tok = NULL; int toklen = 0; char tokchar = '\0'; int status; if ((status = nextline(efp)) != eslOK) goto ERROR; /* EOF, EMEM */ blen = strlen(efp->buf); if (blen + plen + 1 > efp->buflen) { ESL_RALLOC(efp->buf, tmp, sizeof(char) * (blen + plen + 1)); efp->buflen = blen + plen + 1; } memmove(efp->buf+plen, efp->buf, blen+1); memcpy(efp->buf, prefix, plen); efp->s = efp->buf; status = esl_strtok_adv(&(efp->s), " \t\r\n", &tok, &toklen, &tokchar); if (status == eslOK && *tok != efp->commentchar) { efp->tok = tok; efp->toklen = toklen; efp->tokchar = tokchar; status = eslOK; } else status = esl_fileparser_NextLine(efp); return status; ERROR: efp->tok = NULL; efp->toklen = 0; efp->tokchar = '\0'; return status; } /* Function: esl_fileparser_GetTokenOnLine() * Incept: SRE, Tue Apr 3 08:46:59 2007 [Janelia] * * Purpose: Same as , except that it only * retrieves tokens from the line that the parser is * on. When it runs out of tokens on the line, it returns * . This allows a caller to count the tokens on a * line (whereas reads through newlines * silently). * * The pointer is into an internal line buffer * that may be invalidated upon the next call to a * function. If you want to store it, make a * copy. * * Normally, a call to * would be preceded by to * position the parser on the next data line with at least * one token on it. However, you could also conceivably * call after one or more * calls to , to get remaining * tokens from a given line. What you can't do is to call * immediately after * opening a file; the parser won't have a line loaded yet. * (In this case, it would return .) * * Returns: on success, and the token and its length are * in and . * * Returns if no more tokens exist on the line; * in this case is set to and * to 0. */ int esl_fileparser_GetTokenOnLine(ESL_FILEPARSER *efp, char **opt_tok, int *opt_toklen) { int status; char *tok = NULL; int toklen = 0; /* Do we already have a token from a NextLine() call? */ if (efp->tok != NULL) { if (opt_tok != NULL) *opt_tok = efp->tok; if (opt_toklen != NULL) *opt_toklen = efp->toklen; efp->tok = NULL; efp->toklen = 0; efp->tokchar = '\0'; return eslOK; } /* No line loaded? Then we can't find any token on it. */ if (efp->buf == NULL) { status = eslEOL; goto ERROR; } /* Find next token in the line loaded in the parser. */ status = esl_strtok_adv(&(efp->s), " \t\r\n", &tok, &toklen, NULL); if (status == eslEOL) goto ERROR; if (status != eslOK) goto ERROR; if (status == eslOK && *tok == efp->commentchar) { status = eslEOL; goto ERROR; } if (opt_tok != NULL) *opt_tok = tok; if (opt_toklen != NULL) *opt_toklen = toklen; return eslOK; ERROR: if (opt_tok != NULL) *opt_tok = NULL; if (opt_toklen != NULL) *opt_toklen = 0; return status; } /* Function: esl_fileparser_GetRemainingLine() * Synopsis: Returns pointer to the rest of the current line. * Incept: SRE, Mon Oct 13 08:59:26 2008 [Janelia] * * Purpose: Set a pointer <*ret_s> to the rest of the current line * held by the fileparser . * * Because points to internal storage in the * fileparser, the caller should be finished with it before * making its next call to any fileparser function. * * Any comment characters on the rest of the line are * ignored: this is designed for a case where the rest of * the line is to be read as free text. * * Args: efp - fileparser * ret_s - RETURN: pointer to the remainder of the line * * Returns: on success. * if nothing remains on the line, and <*ret_s> * is . * * Throws: (no abnormal error conditions) */ int esl_fileparser_GetRemainingLine(ESL_FILEPARSER *efp, char **ret_s) { /* No line loaded? Then we can't find anything on it. */ if (efp->buf == NULL) { *ret_s = NULL; return eslEOL; } /* If we prestored the next token, we must revert that move. */ if (efp->tok != NULL) { *(efp->s-1) = efp->tokchar; efp->s = efp->tok; efp->tok = NULL; efp->toklen = 0; efp->tokchar = '\0'; } /* skip leading whitespace */ while (isspace(*(efp->s))) efp->s++; /* Return everything to end of line as a "token", stripping newline */ return esl_strtok(&(efp->s), "\r\n", ret_s); } /* Function: esl_fileparser_Destroy() * Incept: SRE, Fri Jul 9 13:22:36 2004 [St. Louis] * * Purpose: Frees an open . The original fp is * still open - whoever opened it is still * responsible for closing it. * * Xref: STL8 p.56. */ void esl_fileparser_Destroy(ESL_FILEPARSER *efp) { if (efp->buf != NULL) free(efp->buf); free(efp); } /* Function: esl_fileparser_Close() * Incept: SRE, Tue Apr 3 08:18:11 2007 [Janelia] * * Purpose: Closes an open , including the * file it opened. */ void esl_fileparser_Close(ESL_FILEPARSER *efp) { if (efp == NULL) return; if (efp->fp != NULL && efp->fp != stdin) fclose(efp->fp); if (efp->filename != NULL) free(efp->filename); esl_fileparser_Destroy(efp); } /***************************************************************** * 2. Private functions *****************************************************************/ /* nextline() * * Purpose: Skip the file parser to the next line (for instance, * if an end-of-line comment is found). The new line might * have no tokens on it. * * Args: efp - open file parser * * Returns: eslOK: success * eslEOF: normal end of file * * Throws: if a reallocation failed in fgets() * * Xref: STL8 p.56 */ static int nextline(ESL_FILEPARSER *efp) { int status; /* check if we are reading from a file or a buffer */ if (efp->is_buffer) { int len; int end; char *ptr; char *tmp; if (efp->mem_pos >= efp->mem_size) return eslEOF; len = 0; end = efp->mem_size - efp->mem_pos; ptr = efp->mem_buffer + efp->mem_pos; while (len < end && *ptr++ != '\n') ++len; if (len < end) ++len; if (len + 1 > efp->buflen) { ESL_RALLOC(efp->buf, tmp, len * 2); efp->buflen = len * 2; } memcpy(efp->buf, efp->mem_buffer + efp->mem_pos, len); efp->buf[len] = 0; efp->mem_pos += len; } else { if ((status = esl_fgets(&(efp->buf), &(efp->buflen), efp->fp)) != eslOK) { sprintf(efp->errbuf, "esl_fgets() failed"); return status;} } efp->s = efp->buf; efp->linenumber++; return eslOK; ERROR: return eslEMEM; } /***************************************************************** * 3. Unit tests. *****************************************************************/ #ifdef eslFILEPARSER_TESTDRIVE /* test the interface for getting all tokens in a file, regardless * of newlines. Also, uses the Create/Destroy interface instead of * Open/Close. */ static void utest_GetToken(char *filename) { int status; ESL_FILEPARSER *efp = NULL; FILE *fp = NULL; char *tok = NULL; int toklen = 0; int ntok = 0; if ((fp = fopen(filename, "r")) == NULL) esl_fatal("File open failed"); if ((efp = esl_fileparser_Create(fp)) == NULL) esl_fatal("Failed to associate stream with fileparser"); esl_fileparser_SetCommentChar(efp, '#'); while ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK) { if (toklen != 6) esl_fatal("bad token %s", tok); if (strncmp(tok, "token", 5) != 0) esl_fatal("bad token %s", tok); ntok++; } if (status != eslEOF) esl_fatal("Abnormal parse termination"); if (ntok != 5) esl_fatal("bad total token number %d\n", ntok); esl_fileparser_Destroy(efp); fclose(fp); return; } /* test the NextLine and GetTokenOnLine interface, as well as the * Open/Close interface. */ static void utest_GetTokenOnLine(char *filename) { int status; ESL_FILEPARSER *efp = NULL; char *tok = NULL; int toklen = 0; int ntok = 0; int nlines = 0; char expect[32]; if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) esl_fatal("File open failed"); esl_fileparser_SetCommentChar(efp, '#'); while ((status = esl_fileparser_NextLine(efp)) == eslOK) { nlines++; while ((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) == eslOK) { ntok++; sprintf(expect, "token%d", ntok); if (toklen != 6) esl_fatal("bad token length for %s", tok); if (strcmp(expect, tok) != 0) esl_fatal("bad token %s", tok); } if (status != eslEOL) esl_fatal("Unexpected code in place of end-of-line"); } if (status != eslEOF) esl_fatal("Unexpected code in place of end-of-file."); if (nlines != 3) esl_fatal("expected to parse 3 lines; parsed %d", nlines); if (ntok != 5) esl_fatal("expected to parse 5 tokens; parsed %d", ntok); esl_fileparser_Close(efp); return; } static void utest_GetTokenBuffered(char *buffer) { int status; ESL_FILEPARSER *efp = NULL; char *tok = NULL; int toklen = 0; int ntok = 0; if ((efp = esl_fileparser_CreateMapped(buffer, strlen(buffer))) == NULL) esl_fatal("Failed to associate buffer with fileparser"); esl_fileparser_SetCommentChar(efp, '#'); while ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK) { if (toklen != 6) esl_fatal("bad token %s", tok); if (strncmp(tok, "token", 5) != 0) esl_fatal("bad token %s", tok); ntok++; } if (status != eslEOF) esl_fatal("Abnormal parse termination"); if (ntok != 5) esl_fatal("bad total token number %d\n", ntok); esl_fileparser_Destroy(efp); return; } #endif /*eslFILEPARSER_TESTDRIVE*/ /***************************************************************** * 4. Test driver. *****************************************************************/ /* gcc -g -Wall -I. -o test -DeslFILEPARSER_TESTDRIVE esl_fileparser.c easel.c ./test */ #ifdef eslFILEPARSER_TESTDRIVE #include #include #include "easel.h" #include "esl_fileparser.h" int main(int argc, char **argv) { char tmpfile[32] = "esltmpXXXXXX"; FILE *fp; char stream[] = "# Full line comment\n" "token1 # Trailing comment\n" "\n" /* blank line */ " \n" /* whitespace line */ " # sowing comment/whitespace confusion...\n" "token2\ttoken3 token4\n" "token5"; /* file ends w/ no \n */ /* Create a test file to read. */ if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal("File open failed"); fprintf(fp, "%s", stream); fclose(fp); /* Run unit tests using that file. * Unit tests have hardwired knowledge of what's supposed to be in the file. */ utest_GetToken(tmpfile); utest_GetTokenOnLine(tmpfile); utest_GetTokenBuffered(stream); remove(tmpfile); return 0; } #endif /*eslFILEPARSER_TESTDRIVE*/ /***************************************************************** * 5. Examples. *****************************************************************/ /* The first example shows the simplest interface: get all tokens * in the file, one at a time. * gcc -g -Wall -I. -o example -DeslFILEPARSER_EXAMPLE esl_fileparser.c easel.c ./example */ #ifdef eslFILEPARSER_EXAMPLE /*::cexcerpt::fileparser_example::begin::*/ #include #include "easel.h" #include "esl_fileparser.h" int main(int argc, char **argv) { char *filename = argv[1]; int ntok = 1; ESL_FILEPARSER *efp; char *tok; int toklen; if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) esl_fatal("File open failed"); esl_fileparser_SetCommentChar(efp, '#'); while (esl_fileparser_GetToken(efp, &tok, &toklen) == eslOK) { printf("%5d %3d %s\n", ntok, toklen, tok); ntok++; } esl_fileparser_Close(efp); return 0; } /*::cexcerpt::fileparser_example::end::*/ #endif /*eslFILEPARSER_EXAMPLE*/ /* The second example shows the more line-oriented interface * of NextLine(), GetTokenOnLine(). gcc -g -Wall -I. -o example -DeslFILEPARSER_EXAMPLE2 esl_fileparser.c easel.c ./example */ #ifdef eslFILEPARSER_EXAMPLE2 /*::cexcerpt::fileparser_example2::begin::*/ #include #include "easel.h" #include "esl_fileparser.h" int main(int argc, char **argv) { char *filename = argv[1]; int nline = 1; int ntok; ESL_FILEPARSER *efp; char *tok; int toklen; if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) esl_fatal("File open failed"); esl_fileparser_SetCommentChar(efp, '#'); while (esl_fileparser_NextLine(efp) == eslOK) { ntok = 0; while (esl_fileparser_GetTokenOnLine(efp, &tok, &toklen) == eslOK) ntok++; printf("Line %d in the file (%d non-blank, non-comment) contains %d tokens...\n", efp->linenumber, nline, ntok); nline++; } esl_fileparser_Close(efp); return 0; } /*::cexcerpt::fileparser_example2::end::*/ #endif /*eslFILEPARSER_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_fileparser.c 832 2012-12-07 15:01:15Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_fileparser.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_msafile_psiblast.c0000664361611702660230000010614712473612607017725 0ustar wheelerteddy/* I/O of multiple sequence alignments in PSI-BLAST format * * Contents: * 1. API for reading/writing PSI-BLAST format * 2. Unit tests. * 3. Test driver. * 4. Examples. * 5. Copyright and license information. */ #include "esl_config.h" #include #include #include #include "easel.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif #include "esl_mem.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_psiblast.h" /***************************************************************** *# 1. API for reading/writing PSI-BLAST format *****************************************************************/ /* Function: esl_msafile_psiblast_SetInmap() * Synopsis: Set input map specific for PSI-BLAST input. * * Purpose: Set the inmap> for PSI-BLAST format. * * PSI-BLAST only allows - for a gap. It also disallows O residues. * * Text mode accepts any character plus '-' but not 'O' or 'o'. * Digital mode enforces the usual Easel alphabets, but disallows "._*~". */ int esl_msafile_psiblast_SetInmap(ESLX_MSAFILE *afp) { int sym; #ifdef eslAUGMENT_ALPHABET if (afp->abc) { for (sym = 0; sym < 128; sym++) afp->inmap[sym] = afp->abc->inmap[sym]; afp->inmap[0] = esl_abc_XGetUnknown(afp->abc); afp->inmap['.'] = eslDSQ_ILLEGAL; afp->inmap['_'] = eslDSQ_ILLEGAL; afp->inmap['*'] = eslDSQ_ILLEGAL; afp->inmap['~'] = eslDSQ_ILLEGAL; } #endif if (! afp->abc) { for (sym = 1; sym < 128; sym++) afp->inmap[sym] = (isalpha(sym) ? sym : eslDSQ_ILLEGAL); afp->inmap[0] = '?'; afp->inmap['-'] = '-'; } afp->inmap['O'] = eslDSQ_ILLEGAL; afp->inmap['o'] = eslDSQ_ILLEGAL; return eslOK; } /* Function: esl_msafile_psiblast_GuessAlphabet() * Synopsis: Guess the alphabet of an open PSI-BLAST MSA file. * * Purpose: Guess the alpbabet of the sequences in open * PSI-BLAST format MSA file . * * On a normal return, <*ret_type> is set to , * , or , and is reset to its * original position. * * Args: afp - open PSI-BLAST format MSA file * ret_type - RETURN: , , or * * Returns: on success. * if alphabet type can't be determined. * In either case, is rewound to the position it * started at. */ int esl_msafile_psiblast_GuessAlphabet(ESLX_MSAFILE *afp, int *ret_type) { int alphatype = eslUNKNOWN; esl_pos_t anchor = -1; int threshold[3] = { 500, 5000, 50000 }; /* we check after 500, 5000, 50000 residues; else we go to EOF */ int nsteps = 3; int step = 0; int nres = 0; int x; int64_t ct[26]; char *p, *tok; esl_pos_t n, toklen, pos; int status; for (x = 0; x < 26; x++) ct[x] = 0; anchor = esl_buffer_GetOffset(afp->bf); if ((status = esl_buffer_SetAnchor(afp->bf, anchor)) != eslOK) { status = eslEINCONCEIVABLE; goto ERROR; } /* [eslINVAL] can't happen here */ while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK) { if ((status = esl_memtok(&p, &n, " \t", &tok, &toklen)) != eslOK) continue; /* blank lines */ /* p now points to the rest of the sequence line, after a name */ /* count characters into ct[] array */ for (pos = 0; pos < n; pos++) if (isalpha(p[pos])) { x = toupper(p[pos]) - 'A'; ct[x]++; nres++; } /* try to stop early, checking after 500, 5000, and 50000 residues: */ if (step < nsteps && nres > threshold[step]) { if ((status = esl_abc_GuessAlphabet(ct, &alphatype)) == eslOK) goto DONE; /* (eslENOALPHABET) */ step++; } } if (status != eslEOF) goto ERROR; /* [eslEMEM,eslESYS,eslEINCONCEIVABLE] */ status = esl_abc_GuessAlphabet(ct, &alphatype); /* (eslENOALPHABET) */ DONE: esl_buffer_SetOffset(afp->bf, anchor); /* Rewind to where we were. */ esl_buffer_RaiseAnchor(afp->bf, anchor); *ret_type = alphatype; return status; ERROR: if (anchor != -1) { esl_buffer_SetOffset(afp->bf, anchor); esl_buffer_RaiseAnchor(afp->bf, anchor); } *ret_type = eslUNKNOWN; return status; } /* Function: esl_msafile_psiblast_Read() * Synopsis: Read an alignment in PSI-BLAST's input format. * * Purpose: Read an MSA from an open , parsing for * PSI-BLAST input format, starting from the current point. * Create a new multiple alignment, and return a ptr to * that alignment via <*ret_msa>. Caller is responsible for * free'ing this . * * The has a reference line (rf[]>) that * corresponds to the uppercase/lowercase columns in the * alignment: consensus (uppercase) columns are marked 'x', * and insert (lowercase) columns are marked '.' in this RF * line. * * Args: afp - open * ret_msa - RETURN: newly parsed * * Returns: on success. <*ret_msa> contains the newly * allocated MSA. is at EOF. * * if no (more) alignment data are found in * , and is returned at EOF. * * on a parse error. <*ret_msa> is set to * . contains information sufficient for * constructing useful diagnostic output: * | errmsg> | user-directed error message | * | linenumber> | line # where error was detected | * | line> | offending line (not NUL-term) | * | n> | length of offending line | * | bf->filename> | name of the file | * and is poised at the start of the following line, * so (in principle) the caller could try to resume * parsing. * * Throws: on allocation error. * if a system call fails, such as fread(). * - "impossible" corruption * On these, <*ret_msa> is returned , and the state of * is undefined. */ int esl_msafile_psiblast_Read(ESLX_MSAFILE *afp, ESL_MSA **ret_msa) { ESL_MSA *msa = NULL; int idx = 0; /* counter over sequences in a block */ int nblocks = 0; /* counter over blocks */ int64_t alen = 0; int nseq = 0; int64_t cur_alen; esl_pos_t pos; /* position on a line */ esl_pos_t name_start, name_len; esl_pos_t seq_start, seq_len; esl_pos_t block_seq_start, block_seq_len; int status; ESL_DASSERT1( (afp->format == eslMSAFILE_PSIBLAST) ); afp->errmsg[0] = '\0'; /* allocate a growable MSA. We set msa->{nseq,alen} only when we're done. */ #ifdef eslAUGMENT_ALPHABET if (afp->abc && (msa = esl_msa_CreateDigital(afp->abc, 16, -1)) == NULL) { status = eslEMEM; goto ERROR; } #endif if (! afp->abc && (msa = esl_msa_Create( 16, -1)) == NULL) { status = eslEMEM; goto ERROR; } /* skip leading blank lines in file */ while ( (status = eslx_msafile_GetLine(afp, NULL, NULL)) == eslOK && esl_memspn(afp->line, afp->n, " \t") == afp->n) ; if (status != eslOK) goto ERROR; /* includes normal EOF */ /* Read the file a line at a time; if a parsing error occurs, detect immediately, with afp->linenumber set correctly */ do { /* while in the file... */ idx = 0; do { /* while in a block... */ for (pos = 0; pos < afp->n; pos++) if (! isspace(afp->line[pos])) break; name_start = pos; for (pos = pos+1; pos < afp->n; pos++) if ( isspace(afp->line[pos])) break; name_len = pos - name_start; for (pos = pos+1; pos < afp->n; pos++) if (! isspace(afp->line[pos])) break; seq_start = pos; if (pos >= afp->n) ESL_XFAIL(eslEFORMAT, afp->errmsg, "invalid alignment line"); for (pos = afp->n-1; pos > 0; pos--) if (! isspace(afp->line[pos])) break; seq_len = pos - seq_start + 1; if (idx == 0) { block_seq_start = seq_start; block_seq_len = seq_len; } else { if (seq_start != block_seq_start) ESL_XFAIL(eslEFORMAT, afp->errmsg, "sequence start is misaligned"); if (seq_len != block_seq_len) ESL_XFAIL(eslEFORMAT, afp->errmsg, "sequence end is misaligned"); } /* Process the consensus #=RF line. */ if (idx == 0) { ESL_REALLOC(msa->rf, sizeof(char) * (alen + seq_len + 1)); for (pos = 0; pos < seq_len; pos++) msa->rf[alen+pos] = '-'; /* anything neutral other than . or x will do. */ msa->rf[alen+pos] = '\0'; } for (pos = 0; pos < seq_len; pos++) { if (afp->line[seq_start+pos] == '-') continue; if (isupper(afp->line[seq_start+pos])) { if (msa->rf[alen+pos] == '.') ESL_XFAIL(eslEFORMAT, afp->errmsg, "unexpected upper case residue (#%d on line)", (int) pos+1); msa->rf[alen+pos] = 'x'; } if (islower(afp->line[seq_start+pos])) { if (msa->rf[alen+pos] == 'x') ESL_XFAIL(eslEFORMAT, afp->errmsg, "unexpected lower case residue (#%d on line)", (int) pos+1); msa->rf[alen+pos] = '.'; } } /* Store the sequence name. */ if (nblocks == 0) { /* make sure we have room for another sequence */ if (idx >= msa->sqalloc && (status = esl_msa_Expand(msa)) != eslOK) goto ERROR; if ( (status = esl_msa_SetSeqName(msa, idx, afp->line+name_start, name_len)) != eslOK) goto ERROR; } else { if (! esl_memstrcmp(afp->line+name_start, name_len, msa->sqname[idx])) ESL_XFAIL(eslEFORMAT, afp->errmsg, "expected sequence %s on this line, but saw %.*s", msa->sqname[idx], (int) name_len, afp->line+name_start); } /* Append the sequence. */ cur_alen = alen; #ifdef eslAUGMENT_ALPHABET if (msa->abc) { status = esl_abc_dsqcat(afp->inmap, &(msa->ax[idx]), &(cur_alen), afp->line+seq_start, seq_len); } #endif if (! msa->abc) { status = esl_strmapcat (afp->inmap, &(msa->aseq[idx]), &(cur_alen), afp->line+seq_start, seq_len); } if (status == eslEINVAL) ESL_XFAIL(eslEFORMAT, afp->errmsg, "one or more invalid sequence characters"); else if (status != eslOK) goto ERROR; if (cur_alen - alen != seq_len) ESL_XFAIL(eslEFORMAT, afp->errmsg, "unexpected number of seq characters"); /* get next line. if it's blank, or if we're EOF, we're done with the block */ idx++; status = eslx_msafile_GetLine(afp, NULL, NULL); } while (status == eslOK && esl_memspn(afp->line, afp->n, " \t") < afp->n); /* blank line ends a block. */ if (status != eslOK && status != eslEOF) goto ERROR; /* End of one block */ if (nblocks == 0) nseq = idx; else if (idx != nseq) ESL_XFAIL(eslEFORMAT, afp->errmsg, "last block didn't contain same # of seqs as earlier blocks"); alen += block_seq_len; nblocks++; /* skip blank lines to start of next block, if any */ while ( (status = eslx_msafile_GetLine(afp, NULL, NULL)) == eslOK && esl_memspn(afp->line, afp->n, " \t") == afp->n) ; } while (status == eslOK); if (status != eslEOF) goto ERROR; msa->nseq = nseq; msa->alen = alen; if (( status = esl_msa_SetDefaultWeights(msa)) != eslOK) goto ERROR; *ret_msa = msa; return eslOK; ERROR: if (msa) esl_msa_Destroy(msa); *ret_msa = NULL; return status; } /* Function: esl_msafile_psiblast_Write() * Synopsis: Write an MSA to a stream in PSI-BLAST format * * Purpose: Write alignment in NCBI PSI-BLAST format to * stream . * * The should have a valid reference line rf>, * with alphanumeric characters marking consensus (match) * columns, and non-alphanumeric characters marking * nonconsensus (insert) columns. If it does not have RF * annotation, then the first sequence in the * defines the "consensus". * * PSI-BLAST format allows only one symbol ('-') for gaps, * and cannot represent missing data symbols (Easel's * '~'). Any missing data symbols are converted to gaps. * * Args: fp - open output stream * msa - MSA to write * * Returns: on success. * * Throws: on allocation failure. * on any system write failure, such as filled disk. */ int esl_msafile_psiblast_Write(FILE *fp, const ESL_MSA *msa) { char *buf = NULL; int cpl = 60; int acpl; int i; int sym; int64_t pos, bpos; int maxnamewidth = esl_str_GetMaxWidth(msa->sqname, msa->nseq); int is_consensus; int is_residue; int status; ESL_ALLOC(buf, sizeof(char) * (cpl+1)); for (pos = 0; pos < msa->alen; pos += cpl) { for (i = 0; i < msa->nseq; i++) { acpl = (msa->alen - pos > cpl)? cpl : msa->alen - pos; #ifdef eslAUGMENT_ALPHABET if (msa->abc) { for (bpos = 0; bpos < acpl; bpos++) { sym = msa->abc->sym[msa->ax[i][pos + bpos + 1]]; is_residue = esl_abc_XIsResidue(msa->abc, msa->ax[i][pos+bpos+1]); if (msa->rf) is_consensus = (isalnum(msa->rf[pos + bpos]) ? TRUE : FALSE); else is_consensus = (esl_abc_XIsResidue(msa->abc, msa->ax[0][pos+bpos+1]) ? TRUE : FALSE); if (is_consensus) { buf[bpos] = (is_residue ? toupper(sym) : '-'); } else { buf[bpos] = (is_residue ? tolower(sym) : '-'); } } } #endif if (! msa->abc) { for (bpos = 0; bpos < acpl; bpos++) { sym = msa->aseq[i][pos + bpos]; is_residue = isalnum(sym); if (msa->rf) is_consensus = (isalnum(msa->rf[pos + bpos]) ? TRUE : FALSE); else is_consensus = (isalnum(msa->aseq[0][pos+bpos]) ? TRUE : FALSE); if (is_consensus) { buf[bpos] = (is_residue ? toupper(sym) : '-'); } else { buf[bpos] = (is_residue ? tolower(sym) : '-'); } } } buf[acpl] = '\0'; if (fprintf(fp, "%-*s %s\n", maxnamewidth, msa->sqname[i], buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "psiblast msa write failed"); } /* end loop over sequences */ if (pos + cpl < msa->alen) { if (fputc('\n', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "psiblast msa write failed"); } } free(buf); return eslOK; ERROR: if (buf) free(buf); return status; } /*----------- end, API for i/o of psi-blast format --------------*/ /***************************************************************** * 2. Unit tests. *****************************************************************/ #ifdef eslMSAFILE_PSIBLAST_TESTDRIVE static void utest_write_good1(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs("MYG_PHYCA --------V-LSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKT\n", ofp); fputs("GLB5_PETMA pivdtgsvApLSAAEKTKIRSAWAPVYSTYETSGVDILVKFFTSTPAAQEFFPKFKGLTT\n", ofp); fputs("HBB_HUMAN --------VhLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLST\n", ofp); fputs("HBA_HUMAN --------V-LSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF-----\n", ofp); fputs("\n", ofp); fputs("MYG_PHYCA EAEMKASEDLKKHGVTVLTALGAILKKKGH---HEAELKPLAQSHATKHKIPIKYLEFIS\n", ofp); fputs("GLB5_PETMA ADQLKKSADVRWHAERIINAVNDAVASMDDtekMSMKLRDLSGKHAKSFQVDPQYFKVLA\n", ofp); fputs("HBB_HUMAN PDAVMGNPKVKAHGKKVLGAFSDGLAHLDN---LKGTFATLSELHCDKLHVDPENFRLLG\n", ofp); fputs("HBA_HUMAN -DLSHGSAQVKGHGKKVADALTNAVAHVDD---MPNALSALSDLHAHKLRVDPVNFKLLS\n", ofp); fputs("\n", ofp); fputs("MYG_PHYCA EAIIHVLHSRHPGDFGADAQGAMNKALELFRKDIAAKYKELGYQG\n", ofp); fputs("GLB5_PETMA AVI---------ADTVAAGDAGFEKLMSMICILLRSAY-------\n", ofp); fputs("HBB_HUMAN NVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH------\n", ofp); fputs("HBA_HUMAN HCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR------\n", ofp); *ret_alphatype = eslAMINO; *ret_nseq = 4; *ret_alen = 165; } static void utest_write_good2(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs("tRNA2 UCCGAUAUAGUGUAACGGCUAUCACAUCACGCUUUCACCGUGG-AGACCGGGGUUCGACU\n", ofp); fputs("tRNA3 UCCGUGAUAGUUUAAUGGUCAGAAUGG-GCGCUUGUCGCGUGCcAGAUCGGGGUUCAAUU\n", ofp); fputs("tRNA5 GGGCACAUGGCGCAGUUGGUAGCGCGCUUCCCUUGCAAGGAAGaGGUCAUCGGUUCGAUU\n", ofp); fputs("tRNA1 GCGGAUUUAGCUCAGUUGGGAGAGCGCCAGACUGAAGAUCUGGaGGUCCUGUGUUCGAUC\n", ofp); fputs("tRNA4 GCUCGUAUGGCGCAGUGG-UAGCGCAGCAGAUUGCAAAUCUGUuGGUCCUUAGUUCGAUC\n", ofp); fputs("\n", ofp); fputs("tRNA2 CCCCGUAUCGGAG\n", ofp); fputs("tRNA3 CCCCGUCGCGGAG\n", ofp); fputs("tRNA5 CCGGUUGCGUCCA\n", ofp); fputs("tRNA1 CACAGAAUUCGCA\n", ofp); fputs("tRNA4 CUGAGUGCGAGCU\n", ofp); *ret_alphatype = eslRNA; *ret_nseq = 5; *ret_alen = 73; } static void utest_goodfile(char *filename, int testnumber, int expected_alphatype, int expected_nseq, int expected_alen) { ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa1 = NULL; ESL_MSA *msa2 = NULL; char tmpfile1[32] = "esltmpXXXXXX"; char tmpfile2[32] = "esltmpXXXXXX"; FILE *ofp = NULL; int status; /* guessing both the format and the alphabet should work: this is a digital open */ /* PSIBLAST format is autodetected as SELEX, which is fine - selex parser is more general */ if ( (status = eslx_msafile_Open(&abc, filename, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) esl_fatal("psiblast good file test %d failed: digital open", testnumber); if (afp->format != eslMSAFILE_SELEX) esl_fatal("psiblast good file test %d failed: format autodetection", testnumber); if (abc->type != expected_alphatype) esl_fatal("psiblast good file test %d failed: alphabet autodetection", testnumber); afp->format = eslMSAFILE_PSIBLAST; /* This is a digital read, using . */ if ( (status = esl_msafile_psiblast_Read(afp, &msa1)) != eslOK) esl_fatal("psiblast good file test %d failed: msa read, digital", testnumber); if (msa1->nseq != expected_nseq || msa1->alen != expected_alen) esl_fatal("psiblast good file test %d failed: nseq/alen", testnumber); if (esl_msa_Validate(msa1, NULL) != eslOK) esl_fatal("psiblast good file test %d failed: msa1 invalid", testnumber); eslx_msafile_Close(afp); /* write it back out to a new tmpfile (digital write) */ if ( (status = esl_tmpfile_named(tmpfile1, &ofp)) != eslOK) esl_fatal("psiblast good file test %d failed: tmpfile creation", testnumber); if ( (status = esl_msafile_psiblast_Write(ofp, msa1)) != eslOK) esl_fatal("psiblast good file test %d failed: msa write, digital", testnumber); fclose(ofp); /* now open and read it as text mode, in known format. (We have to pass fmtd now, to deal with the possibility of a nonstandard name width) */ if ( (status = eslx_msafile_Open(NULL, tmpfile1, NULL, eslMSAFILE_PSIBLAST, NULL, &afp)) != eslOK) esl_fatal("psiblast good file test %d failed: text mode open", testnumber); if ( (status = esl_msafile_psiblast_Read(afp, &msa2)) != eslOK) esl_fatal("psiblast good file test %d failed: msa read, text", testnumber); if (msa2->nseq != expected_nseq || msa2->alen != expected_alen) esl_fatal("psiblast good file test %d failed: nseq/alen", testnumber); if (esl_msa_Validate(msa2, NULL) != eslOK) esl_fatal("psiblast good file test %d failed: msa2 invalid", testnumber); eslx_msafile_Close(afp); /* write it back out to a new tmpfile (text write) */ if ( (status = esl_tmpfile_named(tmpfile2, &ofp)) != eslOK) esl_fatal("psiblast good file test %d failed: tmpfile creation", testnumber); if ( (status = esl_msafile_psiblast_Write(ofp, msa2)) != eslOK) esl_fatal("psiblast good file test %d failed: msa write, text", testnumber); fclose(ofp); esl_msa_Destroy(msa2); /* open and read it in digital mode */ if ( (status = eslx_msafile_Open(&abc, tmpfile1, NULL, eslMSAFILE_PSIBLAST, NULL, &afp)) != eslOK) esl_fatal("psiblast good file test %d failed: 2nd digital mode open", testnumber); if ( (status = esl_msafile_psiblast_Read(afp, &msa2)) != eslOK) esl_fatal("psiblast good file test %d failed: 2nd digital msa read", testnumber); if (esl_msa_Validate(msa2, NULL) != eslOK) esl_fatal("psiblast good file test %d failed: msa2 invalid", testnumber); eslx_msafile_Close(afp); /* this msa should be identical to */ if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal("psiblast good file test %d failed: msa compare", testnumber); remove(tmpfile1); remove(tmpfile2); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_alphabet_Destroy(abc); } static void write_test_msas(FILE *ofp1, FILE *ofp2) { fprintf(ofp1, "\n"); fprintf(ofp1, "seq1 --ACDEFGHIKLMNPQRSTVWY\n"); fprintf(ofp1, "seq2 --ACDEFGHIKLMNPQRSTV-- \n"); fprintf(ofp1, "seq3 aaACDEFGHIKLMNPQRSTV-- \n"); fprintf(ofp1, "seq4 --ACDEFGHIKLMNPQRSTVWY \n"); fprintf(ofp1, "\n"); fprintf(ofp1, "seq1 ACDEFGHIKLMNPQRSTVWY--\n"); fprintf(ofp1, "seq2 ACDEFGHIKLMNPQRSTVWYyy\n"); fprintf(ofp1, "seq3 ACDEFGHIKLMNPQRSTVWY--\n"); fprintf(ofp1, "seq4 ACDEFGHIKLMNPQRSTVWY--\n"); fprintf(ofp1, "\n"); fprintf(ofp2, "# STOCKHOLM 1.0\n"); fprintf(ofp2, "\n"); fprintf(ofp2, "#=GC RF ..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..\n"); fprintf(ofp2, "seq1 --ACDEFGHIKLMNPQRSTVWYACDEFGHIKLMNPQRSTVWY--\n"); fprintf(ofp2, "seq2 --ACDEFGHIKLMNPQRSTV--ACDEFGHIKLMNPQRSTVWYyy\n"); fprintf(ofp2, "seq3 aaACDEFGHIKLMNPQRSTV--ACDEFGHIKLMNPQRSTVWY--\n"); fprintf(ofp2, "seq4 --ACDEFGHIKLMNPQRSTVWYACDEFGHIKLMNPQRSTVWY--\n"); fprintf(ofp2, "//\n"); } static void read_test_msas_digital(char *pbfile, char *stkfile) { char msg[] = "PSIBLAST msa digital read unit test failed"; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp1 = NULL; ESLX_MSAFILE *afp2 = NULL; ESL_MSA *msa1, *msa2, *msa3, *msa4; FILE *pbfp, *stkfp; char pbfile2[32] = "esltmppb2XXXXXX"; char stkfile2[32] = "esltmpstk2XXXXXX"; if ( eslx_msafile_Open(&abc, pbfile, NULL, eslMSAFILE_PSIBLAST, NULL, &afp1) != eslOK) esl_fatal(msg); if ( !abc || abc->type != eslAMINO) esl_fatal(msg); if ( eslx_msafile_Open(&abc, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_psiblast_Read (afp1, &msa1) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa2) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal(msg); if ( esl_msafile_psiblast_Read (afp1, &msa3) != eslEOF) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa3) != eslEOF) esl_fatal(msg); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); /* Now write stk to psiblast file, and vice versa; then retest */ if ( esl_tmpfile_named(pbfile2, &pbfp) != eslOK) esl_fatal(msg); if ( esl_tmpfile_named(stkfile2, &stkfp) != eslOK) esl_fatal(msg); if ( esl_msafile_psiblast_Write (pbfp, msa2) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_STOCKHOLM) != eslOK) esl_fatal(msg); fclose(pbfp); fclose(stkfp); if ( eslx_msafile_Open(&abc, pbfile2, NULL, eslMSAFILE_PSIBLAST, NULL, &afp1) != eslOK) esl_fatal(msg); if ( eslx_msafile_Open(&abc, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_psiblast_Read (afp1, &msa3) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa4) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa3, msa4) != eslOK) esl_fatal(msg); remove(pbfile2); remove(stkfile2); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_msa_Destroy(msa3); esl_msa_Destroy(msa4); esl_alphabet_Destroy(abc); } static void read_test_msas_text(char *pbfile, char *stkfile) { char msg[] = "PSIBLAST msa text-mode read unit test failed"; ESLX_MSAFILE *afp1 = NULL; ESLX_MSAFILE *afp2 = NULL; ESL_MSA *msa1, *msa2, *msa3, *msa4; FILE *pbfp, *stkfp; char pbfile2[32] = "esltmppb2XXXXXX"; char stkfile2[32] = "esltmpstk2XXXXXX"; /* vvvv-- everything's the same as the digital utest except these NULLs */ if ( eslx_msafile_Open(NULL, pbfile, NULL, eslMSAFILE_PSIBLAST, NULL, &afp1) != eslOK) esl_fatal(msg); if ( eslx_msafile_Open(NULL, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_psiblast_Read (afp1, &msa1) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa2) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal(msg); if ( esl_msafile_psiblast_Read (afp1, &msa3) != eslEOF) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa3) != eslEOF) esl_fatal(msg); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); if ( esl_tmpfile_named(pbfile2, &pbfp) != eslOK) esl_fatal(msg); if ( esl_tmpfile_named(stkfile2, &stkfp) != eslOK) esl_fatal(msg); if ( esl_msafile_psiblast_Write (pbfp, msa2) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_STOCKHOLM) != eslOK) esl_fatal(msg); fclose(pbfp); fclose(stkfp); if ( eslx_msafile_Open(NULL, pbfile2, NULL, eslMSAFILE_PSIBLAST, NULL, &afp1) != eslOK) esl_fatal(msg); if ( eslx_msafile_Open(NULL, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_psiblast_Read (afp1, &msa3) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa4) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa3, msa4) != eslOK) esl_fatal(msg); remove(pbfile2); remove(stkfile2); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_msa_Destroy(msa3); esl_msa_Destroy(msa4); } #endif /*eslMSAFILE_PSIBLAST_TESTDRIVE*/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 3. Test driver. *****************************************************************/ #ifdef eslMSAFILE_PSIBLAST_TESTDRIVE /* compile: gcc -g -Wall -I. -L. -o esl_msafile_psiblast_utest -DeslMSAFILE_PSIBLAST_TESTDRIVE esl_msafile_psiblast.c -leasel -lm * (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile_psiblast_utest -DeslMSAFILE_PSIBLAST_TESTDRIVE esl_msafile_psiblast.c -leasel -lm * run: ./esl_msafile_psiblast_utest */ #include "esl_config.h" #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_msafile.h" #include "esl_msafile_psiblast.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for PSIBLAST MSA format module"; int main(int argc, char **argv) { char msg[] = "PSI-BLAST MSA i/o module test driver failed"; ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); char pbfile[32] = "esltmppbXXXXXX"; char stkfile[32] = "esltmpstkXXXXXX"; FILE *pbfp, *stkfp; int testnumber; int ngoodtests = 2; char tmpfile[32]; FILE *ofp; int expected_alphatype; int expected_nseq; int expected_alen; if ( esl_tmpfile_named(pbfile, &pbfp) != eslOK) esl_fatal(msg); if ( esl_tmpfile_named(stkfile, &stkfp) != eslOK) esl_fatal(msg); write_test_msas(pbfp, stkfp); fclose(pbfp); fclose(stkfp); read_test_msas_digital(pbfile, stkfile); read_test_msas_text (pbfile, stkfile); /* Various "good" files that should be parsed correctly */ for (testnumber = 1; testnumber <= ngoodtests; testnumber++) { strcpy(tmpfile, "esltmpXXXXXX"); if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg); switch (testnumber) { case 1: utest_write_good1 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break; case 2: utest_write_good2 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break; } fclose(ofp); utest_goodfile(tmpfile, testnumber, expected_alphatype, expected_nseq, expected_alen); remove(tmpfile); } remove(pbfile); remove(stkfile); esl_getopts_Destroy(go); return 0; } #endif /*eslMSAFILE_PSIBLAST_TESTDRIVE*/ /*--------------------- end, test driver ------------------------*/ /***************************************************************** * 4. Examples. *****************************************************************/ #ifdef eslMSAFILE_PSIBLAST_EXAMPLE /* A full-featured example of reading/writing an MSA in PSIBLAST format. gcc -g -Wall -o esl_msafile_psiblast_example -I. -L. -DeslMSAFILE_PSIBLAST_EXAMPLE esl_msafile_psiblast.c -leasel -lm ./esl_msafile_psiblast_example */ /*::cexcerpt::msafile_psiblast_example::begin::*/ #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_psiblast.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "override autodetection; force PSIBLAST format", 0 }, { "-q", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "quieter: don't write msa back, just summary", 0 }, { "-t", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use text mode: no digital alphabet", 0 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is DNA", 0 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is RNA", 0 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is protein", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of guessing, reading, writing PSIBLAST format"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *filename = esl_opt_GetArg(go, 1); int infmt = eslMSAFILE_UNKNOWN; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; int status; if (esl_opt_GetBoolean(go, "-1")) infmt = eslMSAFILE_PSIBLAST; /* override format autodetection */ if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); /* Text mode: pass NULL for alphabet. * Digital mode: pass ptr to expected ESL_ALPHABET; and if abc=NULL, alphabet is guessed */ if (esl_opt_GetBoolean(go, "-t")) status = eslx_msafile_Open(NULL, filename, NULL, infmt, NULL, &afp); else status = eslx_msafile_Open(&abc, filename, NULL, infmt, NULL, &afp); if (status != eslOK) eslx_msafile_OpenFailure(afp, status); if ((status = esl_msafile_psiblast_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); printf("alphabet: %s\n", (abc ? esl_abc_DecodeType(abc->type) : "none (text mode)")); printf("# of seqs: %d\n", msa->nseq); printf("# of cols: %d\n", (int) msa->alen); printf("\n"); if (! esl_opt_GetBoolean(go, "-q")) esl_msafile_psiblast_Write(stdout, msa); esl_msa_Destroy(msa); eslx_msafile_Close(afp); if (abc) esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); exit(0); } /*::cexcerpt::msafile_psiblast_example::end::*/ #endif /*eslMSAFILE_PSIBLAST_EXAMPLE*/ #ifdef eslMSAFILE_PSIBLAST_EXAMPLE2 /* A minimal example. Read PSIBLAST format MSA, in text mode. gcc -g -Wall -o esl_msafile_psiblast_example2 -I. -L. -DeslMSAFILE_PSIBLAST_EXAMPLE2 esl_msafile_psiblast.c -leasel -lm ./esl_msafile_psiblast_example2 */ /*::cexcerpt::msafile_psiblast_example2::begin::*/ #include #include "easel.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_psiblast.h" int main(int argc, char **argv) { char *filename = argv[1]; int fmt = eslMSAFILE_PSIBLAST; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; int status; if ( (status = eslx_msafile_Open(NULL, filename, NULL, fmt, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); if ( (status = esl_msafile_psiblast_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); printf("%6d seqs, %5d columns\n", msa->nseq, (int) msa->alen); esl_msafile_psiblast_Write(stdout, msa); esl_msa_Destroy(msa); eslx_msafile_Close(afp); exit(0); } /*::cexcerpt::msafile_psiblast_example2::end::*/ #endif /*eslMSAFILE_PSIBLAST_EXAMPLE2*/ /*--------------------- end of examples -------------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msafile_psiblast.c 727 2011-10-24 17:17:32Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msafile_psiblast.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_paml.h0000664361611702660230000000213212473612607015327 0ustar wheelerteddy/* PAML interface * * "Phylogenetic Analysis by Maximum Likelihood" * Ziheng Yang * http://abacus.gene.ucl.ac.uk/software/paml.html * [Yang97] * * incept: SRE, Tue Jul 13 13:20:08 2004 [St. Louis] * upgrade to Easel: SRE, Thu Mar 8 13:26:20 2007 [Janelia] * SVN $Id: esl_paml.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_paml.h $ */ #ifndef eslPAML_INCLUDED #define eslPAML_INCLUDED #include #include extern int esl_paml_ReadE(FILE *fp, ESL_DMATRIX *E, double *pi); #endif /*eslPAML_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_histogram.tex0000664361611702660230000003361012473612606016750 0ustar wheelerteddy The \eslmod{histogram} module is for collecting scores, fitting them to expected distributions, and displaying them. The histogram automatically reallocates its bins as data points arrive, so the caller only needs to provide some initial guidance about bin size and ``phase'' (offset of the bins relative to the real number line). It accumulates counts in 64-bit unsigned integers, so it can handle over $10^19$ total counts. Optionally (and provided that the caller knows it has enough memory to support this), a ``full'' histogram can be created and used to collect a sorted vector of raw (unbinned) values. Various different ways of fitting histogram data to different sorts of expected distributions are supported, with interfaces to all of Easel's statistical distribution modules. Data fitting is oriented toward the case where the values are scores, with high scores being of the most interest; for instance, routines for obtaining and fitting the right (high-scoring) tail are provided, but not for the left tail. Several of the output functions output data as XY data files suitable for input into the popular and freely available \prog{xmgrace} graphing program [\url{http://plasma-gate.weizmann.ac.il/Grace/}]. The API for the \eslmod{histogram} module is summarized in Table~\ref{tbl:histogram_api}. \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \apisubhead{Collecting data in an \ccode{ESL\_HISTOGRAM}}\\ \hyperlink{func:esl_histogram_Create()}{\ccode{esl\_histogram\_Create()}} & Create a new \ccode{ESL\_HISTOGRAM}.\\ \hyperlink{func:esl_histogram_CreateFull()}{\ccode{esl\_histogram\_CreateFull()}} & A \ccode{ESL\_HISTOGRAM} to keep all data samples.\\ \hyperlink{func:esl_histogram_Destroy()}{\ccode{esl\_histogram\_Destroy()}} & Frees a \ccode{ESL\_HISTOGRAM}.\\ \hyperlink{func:esl_histogram_Add()}{\ccode{esl\_histogram\_Add()}} & Add a sample to the histogram.\\ \apisubhead{Declarations about binned data, before fitting}\\ \hyperlink{func:esl_histogram_DeclareCensoring()}{\ccode{esl\_histogram\_DeclareCensoring()}} & Collected data were left-censored.\\ \hyperlink{func:esl_histogram_DeclareRounding()}{\ccode{esl\_histogram\_DeclareRounding()}} & Declare collected data were no more accurate than bins.\\ \hyperlink{func:esl_histogram_SetTail()}{\ccode{esl\_histogram\_SetTail()}} & Declare only tail $>$ some threshold is considered "observed".\\ \hyperlink{func:esl_histogram_SetTailByMass()}{\ccode{esl\_histogram\_SetTailByMass()}} & Declare only right tail mass is considered "observed".\\ \apisubhead{Accessing raw data samples}\\ \hyperlink{func:esl_histogram_GetRank()}{\ccode{esl\_histogram\_GetRank()}} & Retrieve n'th high score.\\ \hyperlink{func:esl_histogram_GetData()}{\ccode{esl\_histogram\_GetData()}} & Retrieve vector of all raw scores.\\ \hyperlink{func:esl_histogram_GetTail()}{\ccode{esl\_histogram\_GetTail()}} & Retrieve all raw scores above some threshold.\\ \hyperlink{func:esl_histogram_GetTailByMass()}{\ccode{esl\_histogram\_GetTailByMass()}} & Retrieve all raw scores in right tail mass.\\ \apisubhead{Setting expected counts}\\ \hyperlink{func:esl_histogram_SetExpect()}{\ccode{esl\_histogram\_SetExpect()}} & Set expected counts for complete distribution.\\ \hyperlink{func:esl_histogram_SetExpectedTail()}{\ccode{esl\_histogram\_SetExpectedTail()}} & Set expected counts for right tail.\\ \apisubhead{Output}\\ \hyperlink{func:esl_histogram_Write()}{\ccode{esl\_histogram\_Write()}} & Print a "pretty" ASCII histogram.\\ \hyperlink{func:esl_histogram_Plot()}{\ccode{esl\_histogram\_Plot()}} & Output a histogram in xmgrace XY format.\\ \hyperlink{func:esl_histogram_PlotSurvival()}{\ccode{esl\_histogram\_PlotSurvival()}} & Output $P(X>x)$ in xmgrace XY format.\\ \hyperlink{func:esl_histogram_PlotQQ()}{\ccode{esl\_histogram\_PlotQQ()}} & Output a Q-Q plot in xmgrace XY format.\\ \hyperlink{func:esl_histogram_Goodness()}{\ccode{esl\_histogram\_Goodness()}} & Evaluate fit between observed, expected. \\ \hline \end{tabular} } \end{center} \caption{The \eslmod{histogram} API.} \label{tbl:histogram_api} \end{table} \subsection{Example of using the histogram API} The example code below stores 10,000 samples from a Gumbel distribution in a histogram, retrieves a vector containing the sorted samples, fits a Gumbel distribution to that dataset, sets the expected counts in the histogram, prints the observed and expected counts in an ASCII histogram, and evaluates the goodness-of-fit. \input{cexcerpts/histogram_example} Some points of interest: \begin{itemize} \item When the histogram is created, the arguments \ccode(-100, 100, 0.5) tell it to bin data into bins of width 0.5, initially starting at -100 and ending at 100. This initialization is described below (see ``Specifying binning of data values''). \item Samples are collected one at a time with \ccode{esl\_histogram\_Add()}. \item After the data have been collected in a \emph{full} histogram, a vector of sorted raw data values can be retrieved using functions like \ccode{esl\_histogram\_GetData()}, and used to fit parameters of an expected distribution to the data. \item In addition to the observed binned counts, you can optionally set \emph{expected} binned counts in the histogram by calling \ccode{esl\_histogram\_SetExpect()} and providing pointers to an appropriate distribution function and its parameters. \item The \ccode{esl\_histogram\_Print()} function shows an ASCII text representation of the observed counts (and expected counts, if set) that looks a lot like FASTA's nice histogram output. \item The \ccode{esl\_histogram\_Goodness()} function compares the observed and expected binned counts, and calculates two goodness of fit tests: a G-test, and a $\chi^2$ test. \end{itemize} \subsection{Specifying binning of data values} The histogram collects data values into bins. When the histogram is created, the bin width and the relative offset of the bins is permanently set, and an initial range is allocated. For example, the call \ccode{esl\_histogram\_Create(-10, 10, 0.5)} creates 40 bins of width 0.5 from -10 to 10, with the first bin collecting scores from $-10 < x \leq -9.5$, and the last bin collecting scores $9.5 < x \leq 10.0$. The lower bound of the initialization permanently sets the relative offset of the bins. That is, \ccode{esl\_histogram\_Create(-10, 10, 0.5)} makes the first bin $-10 < x \leq -9.5$, whereas \ccode{esl\_histogram\_Create(-10.1, 9.9, 0.5)} makes the first bin $-10.1 < x \leq -9.6$. Aside from that, the initial range is only a suggestion. You can add any real-valued $x$ to the histogram. The histogram will silently reallocate itself to a wider range as needed. The ability of a histogram to store data is effectively unlimited. Up to $2^{64}-1$ (more than $10^{19}$) counts can be collected. The histogram requires 16 bytes of storage per bin, and the number of bins it allocates scales as $x_{\mbox{max}} - x_{\mbox{min}} / w$. \subsection{Optional collection of raw data values: full histograms} Normally a histogram would store only binned counts, so it can efficiently summarize even very large numbers of samples. In some cases it is useful to keep a list of the raw data values -- for instance, for more accurate parameter fitting to expected distributions. This can be done by creating a ``full'' histogram with \ccode{esl\_histogram\_CreateFull()} instead of \ccode{esl\_histogram\_Create()}. (The example code above did this, because it did parameter fitting to the raw data.) After data have been collected in a full histogram, individual raw values or pointers to sorted arrays of raw values can be retrieved using the \ccode{esl\_histogram\_Get*} functions. A full histogram may require much more memory: about 4 bytes per data point. You may not want to use full histograms if your problem involves collecting many ($> 10^9$, say) data points. \subsection{Different parameter fitting scenarios} By default, the data you collect are assumed to be \emph{complete}. You observed all samples; if you fit to any expected distribution, the expected distribution is assumed to describe the complete data; the parameters of the expected distribution are to be fitted to an array of the complete raw data samples; and any goodness of fit test is to be applied to the complete data. This is the simplest, most obvious case. Other situations may arise. In addition to complete data, Easel is designed to deal with four other cases: \begin{enumerate} \item The collected data are complete, and they are fit to a distribution that describes the complete data, but parameter fitting is done only in the right (highest-scoring) tail. This makes parameter fitting focus on the most important, high-scoring region of a score distribution, and ignore low-scoring outliers. \item The collected data are complete, but they are fit to a distribution that only describes the right (highest scoring) tail, and the goodness-of-fit test is only performed on that tail. This case arises when we don't know the form of the expected distribution for the complete data, but the tail follows a predictable decay (an exponential tail, for example). \item The collected data are left-censored such that no values $< \phi$ were recorded in the histogram, but the data are fit to a complete distribution that predicts the probability even of the censored (unobserved) values. Goodness of fit is only evaluated in the observed data. (This case is what is actually meant by left-censored data.) \item The high-scoring right tail of the collected data are fit as the \emph{binned} counts in the histogram (not raw sample values) to a distribution that describes the tail, such as an exponential. This case becomes useful when the raw data values have limited precision (because of rounding, for example), which can cause numerical problems with parameter fitting to tails. Another case where this is useful is when there are so many data points that the data must be binned just as a matter of practicality (not enough memory to hold a full histogram). \end{enumerate} A variety of other situations can be dealt with by using different combinations of the function calls that deal with these four cases. \subsubsection{Focusing parameter fitting on the highest scores} An example of focusing a Gumbel parameter fit on the right half of an observed distribution: \input{cexcerpts/histogram_example2} The key differences from the complete data case are: \begin{itemize} \item Only the high-scoring 50\% of the data samples are retrieved, by calling \ccode{esl\_histogram\_GetTailByMass(h, 0.5, \&xv, \&n, \&z)}. This returns \ccode{z}, the number of samples that were \emph{censored}. \item These data are fit to a Gumbel distribution as a \emph{left-censored} dataset by calling \ccode{esl\_gumbel\_FitCensored(xv, n, z, xv[0], \&mu, \&lambda)}. \end{itemize} The expected counts and the goodness of fit tests are still evaluated for the complete data, even though the fit was performed only on the highest scores. \subsubsection{Fitting to a tail distribution} An example of fitting an exponential tail to the high-scoring 10\% of a Gumbel-distributed dataset: \input{cexcerpts/histogram_example3} The differences to note are: \begin{itemize} \item The tail is fit as if it is \emph{complete} data as far as the exponential distribution is concerned. \item As a result, to use the exponential tail to predict expected data, we have to keep in mind how much probability mass the tail is supposed to predict (here, 10\%), and that is provided to \ccode{esl\_histogram\_SetExpectedTail()}, which specifically calculates expected counts for a tail. \end{itemize} \subsubsection{Fitting left-censored data} Fitting a Gumbel distribution to data that are \emph{truly} left censored looks a lot like the case where we extracted the high scoring data for a censored fit: \input{cexcerpts/histogram_example4} \subsubsection{Fitting binned data to a tail distribution} Normally, you want to fit parameters to the actual individual data samples, not to binned data, because you'll get more accurate results. An exception can arise when the data samples have limited precision because they've been rounded off. Most distributions are not sensitive to this, but some tail densities are, especially those with singularities ($P(X=x) \rightarrow \infty$) at their origin. In such a case, a fit to binned data may be superior, especially if you can match the histogram's bins to the rounding procedure that was used. The following code shows an example of fitting for samples that were already rounded up to the nearest integer before adding them to the histogram: \input{cexcerpts/histogram_example5} Issues to note: \begin{itemize} \item The \ccode{esl\_histogram\_Create(-100, 100, 1.0)} call defined bins that exactly match the rounding procedure defined by \ccode{ceil(x)} -- all $x$ that are rounded to the same value by \ccode{ceil(x)} would also go in the same bin of the histogram. \item The \ccode{esl\_histogram\_SetTailByMass()} function sets flags in the histogram to demarcate the desired tail. However, because the data have been binned, and we can only define the tail by a range of bins, it will generally be impossible to match the requested tail mass with adequate accuracy; the actual tail mass is $\geq$ the requested tail mass. It is returned to the caller, and it is the actual mass, not the requested mass, that should be used when setting expected counts. \item The \ccode{esl\_histogram\_SetRounding()} declaration sets a flag in the histogram that tells binned parameter fitting functions that the origin of the fitted density ($\mu$) should be set at the lower bound of the smallest bin, rather than the smallest raw data value observed in that bin. \end{itemize} hmmer-3.1b2/easel/esl_dirichlet.c0000664361611702660230000014746712473612606016364 0ustar wheelerteddy/* Functions relevant to Beta, Gamma, and Dirichlet densities, * including simple and mixture Dirichlet priors. * * Contents: * 1. The object for mixture Dirichlet priors * 2. Dirichlet likelihood functions * 3. Sampling from Dirichlets [with ] * 4. Reading mixture Dirichlets from files [with ] * 5. Unit tests * 6. Test driver * 7. Example * 8. Copyright and license information */ #include #include #include #include #include #include "easel.h" #ifdef eslAUGMENT_RANDOM #include "esl_random.h" #endif #ifdef eslAUGMENT_MINIMIZER #include "esl_minimizer.h" #endif #ifdef eslAUGMENT_FILEPARSER #include "esl_fileparser.h" #endif #include "esl_vectorops.h" #include "esl_stats.h" #include "esl_dirichlet.h" /***************************************************************** *# 1. The object for mixture Dirichlet priors *****************************************************************/ /* Function: esl_mixdchlet_Create() * * Purpose: Create a new mixture Dirichlet prior with components, * each with parameters. * * Returns: initialized on success. * * Throws: NULL on allocation failure. */ ESL_MIXDCHLET * esl_mixdchlet_Create(int N, int K) { int status; ESL_MIXDCHLET *pri = NULL; int q; ESL_ALLOC(pri, sizeof(ESL_MIXDCHLET)); pri->pq = NULL; pri->alpha = NULL; ESL_ALLOC(pri->pq, sizeof(double) * N); ESL_ALLOC(pri->alpha, sizeof(double *) * N); pri->alpha[0] = NULL; ESL_ALLOC(pri->alpha[0], sizeof(double) * N * K); for (q = 1; q < N; q++) pri->alpha[q] = pri->alpha[0] + q*K; pri->N = N; pri->K = K; return pri; ERROR: esl_mixdchlet_Destroy(pri); return NULL; } /* Function: esl_mixdchlet_PerfectBipartiteMatchExists() * Synopsis: Given a 2D table representing presence of edges between vertices represented by * the rows and columns, test whether a perfect matching exists. * Note 1: this doesn't find a perfect matching, just checks if one exists. * Note 2: written as a private function for use by esl_mixdchlet_Compare * Incept: TW, Fri Nov 6 14:23:23 EST 2009 [janelia] * * Args: A - 2-dimensional square table representing presence of edges between vertices * N - size of that table * * Returns: if a perfect matching exists; otherwise. */ int esl_mixdchlet_PerfectBipartiteMatchExists(int **A, int N ) { /* Basic idea: -Scan through the rows, and create a matching edge any time a row has only one matching column (i.e. a single column with eslOK value) * This is conservative: if the row isn't matched with this column, no perfect matching is possible. -Repeat, this time scanning columns. -Repeat rows then columns - until no rows or columns are found with a single eslOK value. -If a row or column is found with no possible matches, then no complete matching is possible. -If a point is reached where all rows and all columns have more than one match, I'm pretty sure a perfect matching is guaranteed. - This is unproven; the intuition is that for any imperfect matching an augmenting path should (I think) exist: it will contain an edge from one unmatched element to a matched element, followed by the existing edge from that element to it's mate, followed by a 2nd edge from that mate to another, and so on. It's a O(n^3) algorithm, though it'll typically run fast in practice */ int matched_row[N], matched_col[N]; esl_vec_ISet(matched_row, N, 0); esl_vec_ISet(matched_col, N, 0); int i,j; int unassigned = N; int do_row = 1; // otherwise, do_column while (unassigned > 0) { int changed = 0; for (i=0; i 1), leave it for a later pass } unassigned -= changed; if (changed == 0) { // All had multiple hits, so (I think) we are guaranteed of being able to pick some mapping that will be legal return eslOK; } do_row = 1 - do_row; // flip value } //got here, all mapping must've been done return eslOK; } /* Function: esl_mixdchlet_Compare() * Synopsis: Compare two mixture Dirichlets for equality. * * Purpose: Compare mixture Dirichlet objects and * for equality. For real numbered values, equality * is defined by with a fractional * tolerance . * * Returns: on equality; otherwise. */ int esl_mixdchlet_Compare(ESL_MIXDCHLET *d1, ESL_MIXDCHLET *d2, double tol) { int i,j; int status; if (d1->N != d2->N) return eslFAIL; if (d1->K != d2->K) return eslFAIL; //set up a 2-D matrix, to store the pairs of components that meet tolerance requirements int **A; ESL_ALLOC(A, d1->N * sizeof(int*)); for (i=0; iN; i++) ESL_ALLOC(A[i], d1->N * sizeof(int) ); // Fill in matrix - OK if component i from d1 is a viable match with component q from d2 for (i=0; iN; i++) { for (j=0; jN; j++) { A[i][j] = esl_DCompare( d1->pq[i], d2->pq[j], tol); if (A[i][j] == eslOK) A[i][j] = esl_vec_DCompare(d1->alpha[i], d2->alpha[j], d1->K, tol) ; } } /* In most cases, there should be only a one-to-one mapping (if * any), which is easy to test. But in the unlikely case of a * many-to-one mapping, we need to do a little more. The problem * amounts to asking whether there exists a perfect bipartite * matching (aka the marriage problem) */ status = esl_mixdchlet_PerfectBipartiteMatchExists( A, d1->N); /* fallthrough*/ ERROR: for (i=0; iN; i++) free (A[i]); free (A); return status; } /* Function: esl_mixdchlet_Copy() * Synopsis: Copy a mixture Dirichlet object. * * Purpose: Copies mixture dirichlet object to . * Both objects are of size and . * is unchanged. * * Returns: on equality; otherwise. */ int esl_mixdchlet_Copy(ESL_MIXDCHLET *d, ESL_MIXDCHLET *d_dst) { int q; if (d->N != d_dst->N) return eslFAIL; if (d->K != d_dst->K) return eslFAIL; esl_vec_DCopy(d->pq, d->N, d_dst->pq); for (q = 0; q < d->N; q++) esl_vec_DCopy(d->alpha[q], d->K, d_dst->alpha[q]); return eslOK; } /* Function: esl_mixdchlet_Destroy() * * Purpose: Free's the mixture Dirichlet . */ void esl_mixdchlet_Destroy(ESL_MIXDCHLET *pri) { if (pri == NULL) return; if (pri->pq != NULL) free(pri->pq); if (pri->alpha != NULL) { if (pri->alpha[0] != NULL) free(pri->alpha[0]); free(pri->alpha); } free(pri); } /* Function: esl_mixdchlet_Dump() * * Purpose: Dump the mixture Dirichlet . */ int esl_mixdchlet_Dump(FILE *fp, ESL_MIXDCHLET *d) { int q; /* counter over mixture components */ int i; /* counter over params */ fprintf(fp, "Mixture Dirichlet: N=%d K=%d\n", d->N, d->K); for (q = 0; q < d->N; q++) { fprintf(fp, "q[%d] %f\n", q, d->pq[q]); for (i = 0; i < d->K; i++) fprintf(fp, "alpha[%d][%d] %f\n", q, i, d->alpha[q][i]); } return eslOK; } /* esl_dirichlet_MixturePosterior() * * Purpose: For a count vector of cardinality , and a * mixture Dirichlet prior . Calculate mix[], * the posterior probability P(q | c) of mixture * component q given the count vector c. Caller must * provide allocated space for , of length . * * Returns: on success, contains posterior probabilities of * the Dirichlet components. */ static int esl_dirichlet_MixturePosterior(double *c, int K, ESL_MIXDCHLET *pri, double *mix) { int q; /* counter over mixture components */ double val; for (q = 0; q < pri->N; q++) { if (pri->pq[q] > 0.0) { esl_dirichlet_LogProbData(c, pri->alpha[q], K, &val); mix[q] = val + log(pri->pq[q]); } else { mix[q] = -HUGE_VAL; } } esl_vec_DLogNorm(mix, pri->N); /* mix[q] is now P(q|c) */ return eslOK; } /* Function: esl_mixdchlet_MPParameters() * * Purpose: Parameter estimation for a count vector of cardinality * , and a mixture Dirichlet prior . Calculates * mean posterior estimates for probability parameters, and * returns them in

. Also returns the posterior probabilities * of each Dirichlet mixture component, $P(q \mid c)$, in . * Caller must provide allocated space for and

, both * of length . * * Returns: on success; contains posterior probabilities of * the Dirichlet components, and

contains mean posterior * probability parameter estimates. * * Throws: if has different cardinality than . */ int esl_mixdchlet_MPParameters(double *c, int K, ESL_MIXDCHLET *pri, double *mix, double *p) { int q; /* counter over mixture components */ int x; double totc; double tota; if (K != pri->K) ESL_EXCEPTION(eslEINCOMPAT, "cvec's K != mixture Dirichlet's K"); /* Calculate mix[], the posterior probability * P(q | c) of mixture component q given the count vector c. */ esl_dirichlet_MixturePosterior(c, K, pri, mix); /* Compute mean posterior estimates for probability parameters */ totc = esl_vec_DSum(c, K); esl_vec_DSet(p, K, 0.); for (x = 0; x < K; x++) for (q = 0; q < pri->N; q++) { tota = esl_vec_DSum(pri->alpha[q], K); p[x] += mix[q] * (c[x] + pri->alpha[q][x]) / (totc + tota); } /* should be normalized already, but for good measure: */ esl_vec_DNorm(p, K); return eslOK; } /* Function: esl_mixdchlet_BILD_score() * * Purpose: Compute the BILD score (sensu Altschul et al PLos Compbio 2010) * for a given count vector of cardinality (alphabet size) , * under a mixture Dirichlet prior , and a background * character distribution , also cardinality K. The score is * in bits. Also computes posterior values for (1) Dirichlet mixture * coefficients ($P(q \mid c)$, performed and returned in a previously * allocated array, ). * * Caller must provide allocated space for (length K), and * (length 1). * * Returns: on success; contains posterior probabilities of * the Dirichlet components, and contains the BILD score of * observation under the prior and bg. * * Throws: if has different cardinality than . */ int esl_mixdchlet_BILD_score(double *c, int K, int N, ESL_MIXDCHLET *pri, double *mix, double *bg, double *sc) { int i; /* counter over mixture components */ int j; double tmp; double val; double totc; double tota; if (K != pri->K) ESL_EXCEPTION(eslEINCOMPAT, "cvec's K != mixture Dirichlet's K"); if (N != pri->N) ESL_EXCEPTION(eslEINCOMPAT, "cvec's N != mixture Dirichlet's N"); /* Calculate mix[], the posterior probability * P(q | c) of mixture component q given the count vector c. */ esl_dirichlet_MixturePosterior(c, K, pri, mix); /* Compute probability of observing the given count vector * under the mixture Dirichlet prior, which depends on the * posterior. */ *sc = 0.0; totc = esl_vec_DSum(c, K); for (i = 0; i < N; i++) { if (mix[i] > 0) { tota = esl_vec_DSum(pri->alpha[i], K); esl_stats_LogGamma(tota, &tmp); val = tmp; esl_stats_LogGamma(tota + totc, &tmp); val -= tmp; for (j = 0; j < K; j++) { esl_stats_LogGamma(pri->alpha[i][j] + c[j], &tmp); val += tmp; esl_stats_LogGamma(pri->alpha[i][j], &tmp); val -= tmp; } *sc += mix[i] * exp(val); } } /* At this point, sc holds the Q value from the Altschul paper. * Get the odds ratio by dividing by the product of background * probabilities for observed counts, (accounting for sequence * weighting). */ for (j = 0; j < K; j++) { *sc /= pow(bg[j], c[j]); } *sc = log(*sc)*eslCONST_LOG2R; return eslOK; } /*---------------- end, ESL_MIXDCHLET ---------------------------*/ /***************************************************************** *# 2. Dirichlet likelihood functions *****************************************************************/ /* Function: esl_dirichlet_LogProbData() * * Purpose: Given an observed count vector $c[0..K-1]$, * and a simple Dirichlet density parameterized by * $\alpha[0..K-1]$; * calculate $\log P(c \mid \alpha)$. * * This is $\int P(c \mid p) P(p \mid \alpha) dp$, * an integral that can be solved analytically. * * Args: c - count vector, [0..K-1] * alpha - Dirichlet parameters, [0..K-1] * K - size of c, alpha vectors * ret_answer - RETURN: log P(c | \alpha) * * Returns: on success, and puts result $\log P(c \mid \alpha)$ * in . */ int esl_dirichlet_LogProbData(double *c, double *alpha, int K, double *ret_answer) { double lnp; double sum1, sum2, sum3; double a1, a2, a3; int x; sum1 = sum2 = sum3 = lnp = 0.0; for (x = 0; x < K; x++) { sum1 += c[x] + alpha[x]; sum2 += alpha[x]; sum3 += c[x]; esl_stats_LogGamma(alpha[x] + c[x], &a1); esl_stats_LogGamma(c[x] + 1., &a2); esl_stats_LogGamma(alpha[x], &a3); lnp += a1 - a2 - a3; } esl_stats_LogGamma(sum1, &a1); esl_stats_LogGamma(sum2, &a2); esl_stats_LogGamma(sum3 + 1., &a3); lnp += a2 + a3 - a1; *ret_answer = lnp; return eslOK; } /* Function: esl_dirichlet_LogProbData_Mixture() * * Purpose: Given an observed count vector $c[0..K-1]$, * and a mixture Dirichlet density parameterized by * $\alpha_1[0..K-1]$ ... $\alpha_N[0..K-1]$, * calculate $\log \sum_i pq_i * P(c \mid \alpha_i)$. * * * Args: c - count vector, [0..K-1] * d - Dirichlet parameters, [0..K-1] * ret_answer - RETURN: log P(c | \alpha) * * Returns: on success, and puts result $\log P(c \mid \alpha)$ * in . */ int esl_dirichlet_LogProbData_Mixture(double *c, ESL_MIXDCHLET *d, double *ret_answer) { double *mixq = NULL; double lnp; double val; int q; /* counter over mixture components */ int status; ESL_ALLOC(mixq, sizeof(double)*d->N); for (q = 0; q < d->N; q++) { esl_dirichlet_LogProbData(c, d->alpha[q], d->K, &val); mixq[q] = val + log(d->pq[q]); } lnp = esl_vec_DLogSum(mixq, d->N); free(mixq); *ret_answer = lnp; return eslOK; ERROR: free(mixq); return status; } /* esl_dirichlet_LogProbDataSet_Mixture() * * Purpose: Given an observed set of count vectors $c[0..N-1][0..K-1]$, * and a mixture Dirichlet density parameterized by * $\alpha_1[0..K-1]$ ... $\alpha_N[0..K-1]$, * calculate $ \sum_n \log \sum_i pq_i * P(c[n] \mid \alpha_i)$. * This is a convenience function, which simply wraps * esl_dirichlet_LogProbData_Mixture * * Args: ntrials - number of count vectors (aka N) * counts - count vector set, [0..N-1][0..K-1] * md - Dirichlet parameters * ret_answer - RETURN: log P(c | \alpha) * * Returns: on success, and puts result $\log P(c \mid \alpha)$ * in . */ static int esl_dirichlet_LogProbDataSet_Mixture(int ntrials, double** counts, ESL_MIXDCHLET* md, double *ret_answer) { double val; int i; *ret_answer = 0; for (i = 0; i < ntrials; i++) { esl_dirichlet_LogProbData_Mixture(counts[i], md, &val); *ret_answer += val; } return eslOK; } /* Function: esl_dirichlet_LogProbProbs() * * Purpose: Given Dirichlet parameter vector and a probability * vector

, both of cardinality ; return * $\log P(p \mid alpha)$. * * Returns: on success, and the result is in . * * Xref: Sjolander (1996) appendix, lemma 2. */ int esl_dirichlet_LogProbProbs(double *p, double *alpha, int K, double *ret_answer) { double sum; /* for Gammln(|alpha|) in Z */ double logp; /* RETURN: log P(p|alpha) */ double val; int x; sum = logp = 0.0; for (x = 0; x < K; x++) if (p[x] > 0.0) /* any param that is == 0.0 doesn't exist */ { esl_stats_LogGamma(alpha[x], &val); logp -= val; logp += (alpha[x]-1.0) * log(p[x]); sum += alpha[x]; } esl_stats_LogGamma(sum, &val); logp += val; *ret_answer = logp; return eslOK; } /*----------- end, Dirichlet likelihood functions ---------------*/ /***************************************************************** * Dirichlet Maximum likelihood fit from counts *****************************************************************/ #ifdef eslAUGMENT_MINIMIZER /* This structure is used to sneak the data into minimizer's generic * (void *) API for all aux data */ struct mixdchlet_data { ESL_MIXDCHLET *d; /* the dirichlet mixture parameters */ double **c; /* count vector array [0..nc-1][0..alphabet_size(d->K)] */ int nc; /* number of count samples */ }; /***************************************************************** * Parameter vector packing/unpacking * * The conjugate gradient code takes a single parameter vector

, * where the values are unconstrained real numbers. * * We have a mixture Dirichlet with two kinds of parameters. * pq_i are mixture coefficients, constrained to be >= 0 and * \sum_i pq_i = 1. alpha^i_x are the Dirichlet parameters * for component i, constrained to be > 0. * * Our p's are therefore not only packed into a single vector; * they're reparameterized to implement the constraints: * for a Dirichlet parameter: * alpha = exp(p) p = log(alpha) * (thus, alpha > 0 for all real p) * * for a mixture coefficient: * pq = exp(-exp(p)) / \sum_a exp(-exp(p_a)) * (thus, 0 < pq < 1 and \sum_a pq_a = 1, for all real p) * * In my hands (ER), this parametrization works better that * pq = exp(p) / \sum_a exp(p_a) * * Conjugate gradients optimizes the

parameter vector, * but we can convert that back out into a Dirichlet answer. * * The packing order is: the first N terms of a parameter vector are * the mixture coefficients pq_i. N different alpha_i vectors follow. * * [0 ... N-1] [0 ... K-1] [0 ... K-1] ... * q's alpha_0 alpha_1 ... * * In both functions below, p, pq, and alpha are all allocated * and free'd by the caller. * p : length N + N*K = N*(K+1) [0.. N*(K+1)-1] * pq : length N, [0..N-1] * alpha : length NxK, [0..N-1][0..K-1]. * * Special cases: * * - For (N >= 1 && K == 1) there is nothing to optimize. * * - For (N == 1 && K > 1) the only variables to optimize are the K alphas * * [0 ... K-1] * alpha * * p : length N*K = N*K [0.. N*K-1] * alpha : length NxK, [0][0..K-1]. * */ static void mixdchlet_pack_paramvector(double *p, int np, ESL_MIXDCHLET *d) { int nq; /* number the mixture components to optimize */ int q; /* counter over mixture components */ int x; /* counter in alphabet size */ nq = (d->N > 1)? d->N : 0; /* the mixture coeficients */ for (q = 0; q < nq; q++) p[q] = log(d->pq[q]); //p[q] = log(-log(d->pq[q])); TW changed to the above; this was causing fit to fail /* the dirichlet parameters */ for (q = 0; q < d->N; q++) for (x = 0; x < d->K; x++) p[nq + q*d->K + x] = log(d->alpha[q][x]); } /* Same as above but in reverse: given parameter vector

, * do appropriate c.o.v. back to desired parameter space, and * update the mixdchlet . */ static void mixdchlet_unpack_paramvector(double *p, int np, ESL_MIXDCHLET *d) { int nq; /* number the mixture components to optimize */ int q; /* counter over mixture components */ int x; /* counter in alphabet size */ nq = (d->N > 1)? d->N : 0; /* the mixture coeficients */ for (q = 0; q < nq; q++) d->pq[q] = exp(p[q]); //d->pq[q] = exp(-exp(p[q])); TW changed to the above; this was causing fit to fail esl_vec_DNorm(d->pq, d->N); /* the dirichlet parameters */ for (q = 0; q < d->N; q++) for (x = 0; x < d->K; x++) d->alpha[q][x] = exp(p[nq + q*d->K + x]); /*esl_mixdchlet_Dump(stdout, d);*/ } /* The log likelihood function to be optimized by ML fitting: * This needs to be careful of a case where a lambda = inf. */ static double mixdchlet_complete_func(double *p, int np, void *dptr) { struct mixdchlet_data *data = (struct mixdchlet_data *) dptr; ESL_MIXDCHLET *d = data->d; double logPsample; double logP = 0.; int m; /* counter over count samples */ mixdchlet_unpack_paramvector(p, np, d); for (m = 0; m < data->nc; m++) { esl_dirichlet_LogProbData_Mixture(data->c[m], d, &logPsample); logP += logPsample; } if (isnan(logP)) esl_fatal("logP is NaN"); return -logP; } /* The gradient of the NLL w.r.t. each free parameter in p. * Modified by ER 11/03/09 to compute derivative of log(alpha) instead of alpha * (committed by TW) */ static void mixdchlet_complete_gradient(double *p, int np, void *dptr, double *dp) { struct mixdchlet_data *data = (struct mixdchlet_data *) dptr; ESL_MIXDCHLET *d = data->d; double sum_alpha; /* \sum_x alpha[q][x] */ double sum_c; /* \sum_x c[m][x] */ double val; /* val is p_q * P(c_m | alpha_q) */ double *valsum; /* valsum is sum_q [p_q * P(c_m | alpha_q)] */ double term; /* term is q * P(alpha_q | c_m) */ double psi1; /* Psi(sum_alpha[q]) */ double psi2; /* Psi(sum_alpha[q] + sum_c[m]) */ double psi3; /* Psi(sum_alpha[q][x]+ c[m][x]) */ double psi4; /* Psi(sum_alpha[q][x]) */ int nq; /* number the mixture components to optimize */ int m; /* counter over count samples */ int q; /* counter over mixture components */ int x; /* counter in alphabet size */ nq = (d->N > 1)? d->N : 0; mixdchlet_unpack_paramvector(p, np, d); /* initialize */ valsum = malloc(sizeof(double) * data->nc); esl_vec_DSet(dp, np, 0.0); /* Some precalculation of sums for efficiency. * valsum is sum_q [p_q * P(c_m | alpha_q)] */ for (m = 0; m < data->nc; m++) esl_dirichlet_LogProbData_Mixture(data->c[m], d, &(valsum[m])); for (q = 0; q < d->N; q++) { sum_alpha = esl_vec_DSum(d->alpha[q], d->K); esl_stats_Psi(sum_alpha, &psi1); /* psi1 = Psi(sum_alpha[q]) */ for (m = 0; m < data->nc; m++) { sum_c = esl_vec_DSum(data->c[m], d->K); esl_stats_Psi(sum_alpha+sum_c, &psi2); /* psi2 = Psi(sum_alpha[q] + sum_c[m]) */ /* val is pq * P(c_m | alpha_q) */ esl_dirichlet_LogProbData(data->c[m], d->alpha[q], d->K, &val); /* derivative respect to the mixture coeficients */ /* term is pq * P(alpha_q | c_m) */ term = exp(val - valsum[m] + log(d->pq[q])); if (nq > 0) dp[q] += term - d->pq[q]; /* derivative respect to the dirichlet parameters */ for (x = 0; x < d->K; x++) { esl_stats_Psi(d->alpha[q][x]+data->c[m][x], &psi3); /* psi3 = Psi(sum_alpha[q][x]+ c[m][x]) */ esl_stats_Psi(d->alpha[q][x], &psi4); /* psi4 = Psi(sum_alpha[q][x]+ c[m][x]) */ dp[nq + q*d->K + x] += term * d->alpha[q][x] * (psi1 - psi2 + psi3 - psi4); } } } /* Return the negative, because we're minimizing the NLP, not maximizing. */ for (q = 0; q < nq; q++) { if (isnan(dp[q])) esl_fatal("dp for pq[%d] is NaN", q); dp[q] *= -1.; } for (q = 0; q < d->N; q++) for (x = 0; x < d->K; x++) { if(isnan(dp[nq + q*d->K + x])) esl_fatal("dp for alpha[%d][%d] is NaN", q, x); dp[nq + q*d->K + x] *= -1.0; } free(valsum); } /* Function: esl_mixdchlet_Fit() * * Purpose: Given a count vector , and an initial guess for * a mixdchlet, find maximum likelihood parameters * by conjugate gradient descent optimization, starting * from and leaving the final optimized solution in * . * * Returns: on success, and contains the fitted * mixdchlet parameters. * * Throws: on allocation error, and is left in * in its initial state. */ int esl_mixdchlet_Fit(double **c, int nc, ESL_MIXDCHLET *d, int be_verbose) { struct mixdchlet_data data; double *p = NULL; double *u = NULL; double *wrk = NULL; double tol; double fx; int np; /* number of parameters to optimize */ int nq; /* number the mixture components to optimize */ int i; int status; /* nothing to optimize for a dirichlet of K = 1 (alphabet size = 1)*/ if (d->K == 1) return eslOK; tol = 1e-6; /* Allocate parameters */ nq = (d->N > 1)? d->N : 0; np = nq + d->N*d->K; ESL_ALLOC(p, sizeof(double) * np); ESL_ALLOC(u, sizeof(double) * np); ESL_ALLOC(wrk, sizeof(double) * np * 4); /* Copy shared info into the "data" structure */ data.d = d; data.c = c; data.nc = nc; /* From d, create the parameter vector. */ mixdchlet_pack_paramvector(p, np, d); /* Define the step size vector u. */ for (i = 0; i < np; i++) u[i] = 0.1; /* Feed it all to the mighty optimizer. */ status = esl_min_ConjugateGradientDescent(p, u, np, &mixdchlet_complete_func, &mixdchlet_complete_gradient, (void *) (&data), tol, wrk, &fx); if (status != eslOK && status != eslENOHALT) // eslENOHALT? Then take what we've got - it's probably pretty good goto ERROR; /* Convert the final parameter vector back to a mixdchlet */ mixdchlet_unpack_paramvector(p, np, d); free(p); free(u); free(wrk); return eslOK; ERROR: if (p != NULL) free(p); if (u != NULL) free(u); if (wrk != NULL) free(wrk); return status; } /* Function: esl_mixdchlet_Fit_Multipass() * * Purpose: Given a set of count vectors , find maximum * likelihood mixdchlet parameters. A number * of initial guesses for a mixdchlet are used, * with conjugate gradient descent performed for * each guess. The mixdchlet returned is the one * among these multiple local searches with * best likelihood. This is a convenience * function, which simply wraps * for multiple start points. * * Args: r - pointer to random generator * c - set of count vectors, [0..M-1][0..N-1] * nc - number of count samples * reps - number of random starting points * best_md - an initialized mixdchlet, which will * contain the correct q and alpha values * at completion * verbose - if >0, output is verbose * * Returns: on success, and contains the fitted * mixdchlet parameters with best likelihood. * * Throws: on allocation error, and is left in * in its initial state. */ int esl_mixdchlet_Fit_Multipass(ESL_RANDOMNESS *r, double **c, int nc, int reps, ESL_MIXDCHLET *best_md, int verbose) { int i, q, k, status; double best_lk = -eslINFINITY; double lk; ESL_MIXDCHLET *md = esl_mixdchlet_Create(best_md->N, best_md->K); int err_cnt = 0; for (i=0; iN; q++) { md->pq[q] = esl_rnd_UniformPositive(r); for (k = 0; k < md->K; k++) md->alpha[q][k] = 10.0 * esl_rnd_UniformPositive(r); } esl_vec_DNorm(md->pq, md->N); /* then use Fit to do local search */ status = esl_mixdchlet_Fit(c, nc, md, 0); if (status != eslOK) { err_cnt++; if (err_cnt==2*reps) { goto ERROR; } else { i--; /* try another starting point */ continue; } } esl_dirichlet_LogProbDataSet_Mixture (nc, c, md, &lk); if (verbose) { fprintf(stderr, "Repetition # %d\n------------\n", i); esl_mixdchlet_Dump(stderr, md); fprintf(stderr, "llk = %.3f (vs best = %.3f)\n", lk, best_lk); } if (lk > best_lk) { if (verbose) fprintf(stderr, "... so copy md -> best_md\n"); best_lk = lk; esl_mixdchlet_Copy(md, best_md); } } if (verbose) { fprintf(stdout, "\n\n----------------\nbest mixture:\n"); esl_mixdchlet_Dump(stdout, best_md); fprintf(stdout, "llk = %.3f", best_lk); } ERROR: esl_mixdchlet_Destroy(md); return status; } #endif /*eslAUGMENT_MINIMIZER*/ /*----------- end, Dirichlet Maximum likelihood fit from counts ---------------*/ /***************************************************************** *# 3. Sampling from Dirichlets: requires *****************************************************************/ #ifdef eslAUGMENT_RANDOM /* Function: esl_dirichlet_DSample() * * Purpose: Given a Dirichlet density parameterized by $\alpha[0..K-1]$, * sample a probability vector $p[0..K-1]$ from * $P(p \mid \alpha)$. * * Args: r - random number generation object * alpha - parameters of Dirichlet density [0..K-1] * K - vector size * p - RETURN: sampled probability vector * (caller allocates 0..K-1). * * Returns: , and

will contain the sampled vector. */ int esl_dirichlet_DSample(ESL_RANDOMNESS *r, double *alpha, int K, double *p) { int x; for (x = 0; x < K; x++) p[x] = esl_rnd_Gamma(r, alpha[x]); esl_vec_DNorm(p, K); return eslOK; } /* Function: esl_dirichlet_FSample() * * Purpose: Same as , except it * works in single-precision floats, not doubles. */ int esl_dirichlet_FSample(ESL_RANDOMNESS *r, float *alpha, int K, float *p) { int x; for (x = 0; x < K; x++) p[x] = (float) esl_rnd_Gamma(r, (double) alpha[x]); esl_vec_FNorm(p, K); return eslOK; } /* Function: esl_dirichlet_DSampleUniform() * * Purpose: Sample a probability vector $p[0..K-1]$ uniformly, by * sampling from a Dirichlet of $\alpha_i = 1.0 \forall i$. * * Args: r - source of random numbers * K - vector size * p - RETURN: sampled prob vector, caller alloc'ed 0..K-1 * * Returns: , and

will contain the sampled vector. * * Throws: (no abnormal error conditions) */ int esl_dirichlet_DSampleUniform(ESL_RANDOMNESS *r, int K, double *p) { int x; for (x = 0; x < K; x++) p[x] = esl_rnd_Gamma(r, 1.0); esl_vec_DNorm(p, K); return eslOK; } /* Function: esl_dirichlet_FSampleUniform() * * Purpose: Same as , except it * works in single-precision floats, not doubles. */ int esl_dirichlet_FSampleUniform(ESL_RANDOMNESS *r, int K, float *p) { int x; for (x = 0; x < K; x++) p[x] = (float) esl_rnd_Gamma(r, 1.0); esl_vec_FNorm(p, K); return eslOK; } /* Function: esl_dirichlet_SampleBeta() * * Purpose: Samples from a Beta(theta1, theta2) density, leaves answer * in . (Special case of sampling Dirichlet.) * * Returns: . */ int esl_dirichlet_SampleBeta(ESL_RANDOMNESS *r, double theta1, double theta2, double *ret_answer) { double p, q; p = esl_rnd_Gamma(r, theta1); q = esl_rnd_Gamma(r, theta2); *ret_answer = p / (p+q); return eslOK; } #endif /*eslAUGMENT_RANDOM*/ /*---------------- end, Dirichlet sampling ----------------------*/ /***************************************************************** *# 4. Reading mixture Dirichlets from files [requires esl_fileparser] *****************************************************************/ #ifdef eslAUGMENT_FILEPARSER /* Function: esl_mixdchlet_Read() * * Purpose: Reads a mixture Dirichlet from an open stream , using the * token-based parser. * * The first two tokens are , the length of the Dirichlet parameter * vector(s), and , the number of mixture components. Then for * each of the mixture components , it reads a mixture coefficient * followed by Dirichlet parameters . * * This function may be called more than once on the same open file, * to read multiple different mixture Dirichlets from it (transitions, * match emissions, insert emissions, for example). * * Note: One reason this function takes an ESL_FILEPARSER instead of * a filename or an open FILE pointer is that file format errors * in Easel are non-fatal "normal" errors, and we want to record * an informative error message. The ESL_FILEPARSER has an error * buffer for this purpose. * * Returns: on success, and contains a new object * that the caller is responsible for free'ing. * * on 'normal' parse failure, in which case errbuf> * contains an informative diagnostic message, and linenumber> * contains the linenumber at which the parse failed. */ int esl_mixdchlet_Read(ESL_FILEPARSER *efp, ESL_MIXDCHLET **ret_pri) { ESL_MIXDCHLET *pri; int K; /* Dirichlet param vector size */ int N; /* number of mixture components */ char *tok; /* ptr to a whitespace-delim, noncomment token */ int toklen; /* length of a parsed token */ int status; /* return status of an Easel call */ int q; /* counter over mixture components (0..N-1) */ int i; /* counter over params (0..K-1) */ *ret_pri = pri = NULL; if ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) goto ERROR; K = atoi(tok); if (K < 1) { sprintf(efp->errbuf, "Bad vector size %.32s", tok); goto ERROR; } if ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) goto ERROR; N = atoi(tok); if (N < 1) { sprintf(efp->errbuf, "Bad mixture number %.32s", tok); goto ERROR; } pri = esl_mixdchlet_Create(N, K); if (pri == NULL) { sprintf(efp->errbuf, "mxdchlet alloc failed"); goto ERROR; } for (q = 0; q < N; q++) { if ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) goto ERROR; pri->pq[q] = atof(tok); if (pri->pq[q] < 0.0 || pri->pq[q] > 1.0) { sprintf(efp->errbuf, "bad mixture coefficient %.32s", tok); goto ERROR; } for (i = 0; i < K; i++) { if ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) goto ERROR; pri->alpha[q][i] = atof(tok); if (pri->alpha[q][i] <= 0.0) { sprintf(efp->errbuf, "Dirichlet params must be positive, got %.32s", tok); goto ERROR; } } } esl_vec_DNorm(pri->pq, N); *ret_pri = pri; return eslOK; ERROR: esl_mixdchlet_Destroy(pri); return eslEFORMAT; } /* Function: esl_mixdchlet_Write() * Synopsis: Write a mixture Dirichlet to an open output stream. * * Purpose: Write mixture Dirichlet to open output stream . * * Args: fp - open output stream * d - mixture Dirichlet to write * * Returns: on success. * * Throws: on any write error, such as filled disk. */ int esl_mixdchlet_Write(FILE *fp, ESL_MIXDCHLET *d) { int q,i; if (fprintf(fp, "%d %d\n", d->K, d->N) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "mixture dirichlet write failed"); for (q = 0; q < d->N; q++) { if (fprintf(fp, "%.3f ", d->pq[q]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "mixture dirichlet write failed"); for (i = 0; i < d->K; i++) if (fprintf(fp, "%.3f ", d->alpha[q][i]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "mixture dirichlet write failed"); if (fprintf(fp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "mixture dirichlet write failed"); } return eslOK; } #endif /* eslAUGMENT_FILEPARSER */ /*-------------- end, reading mixture Dirichlets ----------------*/ /***************************************************************** * 5. Unit tests *****************************************************************/ #ifdef eslDIRICHLET_TESTDRIVE static void utest_io(ESL_MIXDCHLET *d, double tol) { char *msg = "esl_dirichlet: io unit test failed"; ESL_MIXDCHLET *d2 = NULL; ESL_FILEPARSER *efp = NULL; FILE *fp = NULL; char tmpfile[16] = "esltmpXXXXXX"; /* Create a mixture Dirichlet file, as a named tmpfile. */ if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg); if (esl_mixdchlet_Write(fp, d) != eslOK) esl_fatal(msg); fclose(fp); /* Read it back in */ if ((fp = fopen(tmpfile, "r")) == NULL) esl_fatal(msg); if ((efp = esl_fileparser_Create(fp)) == NULL) esl_fatal(msg); if (esl_mixdchlet_Read(efp, &d2) != eslOK) esl_fatal(msg); esl_fileparser_Destroy(efp); fclose(fp); if (esl_mixdchlet_Compare(d, d2, tol) != eslOK) esl_fatal(msg); esl_mixdchlet_Destroy(d2); remove(tmpfile); return; } static void utest_bild() { char *msg = "esl_dirichlet: BILD unit test failed"; ESL_MIXDCHLET *d = NULL; int K = 4; int N = 2; double *counts; double *mix; double *bg; double sc; /* Create a mixture Dirichlet */ if ((d = esl_mixdchlet_Create(N, K)) == NULL) esl_fatal(msg); //esl_vec_DSet(d->pq, N, 1.0/N); d->pq[0] = 0.4; d->pq[1] = 0.6; d->alpha[0][0] = 0.1; d->alpha[0][1] = 0.2; d->alpha[0][2] = 0.3; d->alpha[0][3] = 0.4; esl_vec_DSet(d->alpha[1], K, 1.0); //simulate count vector counts = malloc(K*sizeof(double)); counts[0] = 3.0; //2.2; counts[1] = 1.0; //0.9; counts[2] = 0.0; //4.5; counts[3] = 0.0; //3.0; //simulate background probabilities bg = malloc(K*sizeof(double)); esl_vec_DSet(bg, K, 1.0/K); //allocate working space mix = malloc(K*sizeof(double)); esl_mixdchlet_BILD_score(counts, K, N, d, mix, bg, &sc); if (esl_DCompare(sc, 0.701, 0.001) != eslOK) esl_fatal(msg); // fprintf(stderr, "Score is %.3f\n", sc); esl_mixdchlet_Destroy(d); free(bg); free(counts); free(mix); return; } /* * For any given sampling effort, there is always a possibility that the resulting * count vector will have a higher likelihood under the wrong component than under the * correct component. This unit test runs multiple inferences and only fail if * more of the inferences fail than is expected */ static void utest_inference(ESL_RANDOMNESS *r, ESL_MIXDCHLET *d, int ntrials, int ncounts, int be_verbose) { char *msg = "esl_dirichlet: inference unit test failed"; double *counts = malloc(sizeof(double) * d->K); double *probs = malloc(sizeof(double) * d->K); double *iq = malloc(sizeof(double) * d->N); double *ip = malloc(sizeof(double) * d->K); int qused, qguess; int c, i, q, j; double maxdeviation; int fail_cnt_1 = 0; int fail_cnt_2 = 0; int fail_cnt_3 = 0; for (j=0; jpq, d->N); //printf("qused=%1d\n", qused); esl_dirichlet_DSample(r, d->alpha[qused], d->K, probs); esl_vec_DSet(counts, d->K, 0.); for (c = 0; c < ncounts; c++) { i = esl_rnd_DChoose(r, probs, d->K); counts[i] += 1.; } /* First inference test: * classify by posterior inference on the sampled probability vector. */ for (q = 0; q < d->N; q++) { esl_dirichlet_LogProbProbs(probs, d->alpha[q], d->K, &(iq[q])); iq[q] += log(d->pq[q]); } qguess = esl_vec_DArgMax(iq, d->N); /* the MP guess from the probs */ //printf("qguess: %1d\n", qguess); if (qused != qguess) { fail_cnt_1++; } /* Second inference test: * classify by posterior inference on the sampled count vector; * then attempt to estimate the probability vector. */ esl_mixdchlet_MPParameters(counts, d->K, d, iq, ip); qguess = esl_vec_DArgMax(iq, d->N); /* the MP guess from the counts */ //printf("%1d\n", qguess); if (qused != qguess) { fail_cnt_2++; } for (i = 0; i < d->K; i++) ip[i] = fabs(ip[i] - probs[i]); /* ip[] is now the differences rel to probs */ maxdeviation = esl_vec_DMax(ip, d->K); // printf("maxdev=%.3f\n", maxdeviation); if (maxdeviation > 0.05) { fail_cnt_3++; } } if (fail_cnt_1 > 2 || fail_cnt_2 > 2 || fail_cnt_3 > 0) { char m1[100], m2[100], m3[100], m4[100], final_msg[500]; sprintf(m1, "Out of %d total trials:", ntrials); sprintf(m2, "* classification sampled probability vector, failed %d times", fail_cnt_1); sprintf(m3, "* classification sampled count vector, failed %d times", fail_cnt_2); sprintf(m4, "* gross error in posterior probs estimated from counts, %d times", fail_cnt_3); sprintf(final_msg, "%s\n%s\n%s\n%s\n%s\n", m1, m2, m3, m4, msg ); esl_fatal(final_msg); } free(counts); free(probs); free(iq); free(ip); return; } /* * Performs two tests: * (1) Check to see if the inferred mixdchlt is similar to true one; * (2) Check if the likelihood under the inferred mixdchlt is at least as good as under the true mixdchlt. * * Also, now calls the Fit routine multiple times (via esl_mixdchlet_Fit_Multipass), * since any single random starting point might lead to a terrible locally optimal mixdchlet */ static void utest_fit(ESL_RANDOMNESS *r, ESL_MIXDCHLET *d, int ntrials, int ncounts, double tol, int reps, int be_verbose) { char *msg ; // = "esl_dirichlet: fit unit test failed"; ESL_MIXDCHLET *id = NULL; double **counts; double *probs = malloc(sizeof(double) * d->K); int qused; int m; int c; int i; /* counter over params (0..K-1) */ counts = malloc(sizeof(double *) * ntrials); for (m = 0; m < ntrials; m ++) counts[m] = malloc(sizeof(double) * d->K); for (m = 0; m < ntrials; m ++) { /* Sample component, p vector, c vector from mixture Dirichlet */ qused = esl_rnd_DChoose(r, d->pq, d->N); esl_dirichlet_DSample(r, d->alpha[qused], d->K, probs); esl_vec_DSet(counts[m], d->K, 0.); for (c = 0; c < ncounts; c++) { i = esl_rnd_DChoose(r, probs, d->K); counts[m][i] += 1.; } #ifdef eslDIRICHLET_TESTDRIVE_PRINTCOUNTS printf ("%d ", m); for (i=0; iK; i++) printf ("%.2f ", counts[m][i]); printf("\n"); #endif /*eslDIRICHLET_TESTDRIVE_PRINTCOUNTS*/ } /* Start with a random id, use the counts to infer d by * maximum likelihood gradient descent. * Generate a random starting point, alphas range from 0..10. */ id = esl_mixdchlet_Create(d->N, d->K); /* optimize id */ // esl_mixdchlet_Fit(counts, ntrials, id, be_verbose); esl_mixdchlet_Fit_Multipass(r, counts, ntrials, reps, id, 0); double lp_true; esl_dirichlet_LogProbDataSet_Mixture (ntrials, counts, d, &lp_true); double lp_inf; esl_dirichlet_LogProbDataSet_Mixture (ntrials, counts, id, &lp_inf); //Test if the likelihood under the inferred model is at least as good as the //likelihood under the true model int lk_ok = eslOK; if (lp_true > lp_inf +.00001) lk_ok = eslFAIL; //Test if the inferred q and alpha values are close // (note: "close" is relative - under the default conditions, they're all // within 35% of the true value) int alphas_ok = esl_mixdchlet_Compare(d, id, tol); if (lk_ok== eslFAIL || alphas_ok==eslFAIL) { fprintf(stderr, "\nGiven dirichlet\n"); esl_mixdchlet_Dump(stderr, d); fprintf (stderr, "logP = %.5f\n\n", lp_true); fprintf(stderr, "\nInferred dirichlet\n"); esl_mixdchlet_Dump(stderr, id); fprintf (stderr, "logP = %.5f\n\n", lp_inf); if (lk_ok==eslFAIL) msg = "esl_dirichlet: fit unit test failed (likelihood)"; else msg = "esl_dirichlet: fit unit test failed (similarity tolerance exceeded)"; esl_fatal(msg); } for (m = 0; m < ntrials; m ++) free(counts[m]); free(counts); free(probs); esl_mixdchlet_Destroy(id); return; } #endif /*eslDIRICHLET_TESTDRIVE*/ /*--------------------- end, unit tests -------------------------*/ /***************************************************************** * 6. Test driver *****************************************************************/ #ifdef eslDIRICHLET_TESTDRIVE /* * gcc -g -Wall -I. -L. -o esl_dirichlet_utest -DeslDIRICHLET_TESTDRIVE esl_dirichlet.c -leasel -lm * ./esl_dirichlet_utest */ #include "easel.h" #include "esl_fileparser.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_dirichlet.h" /* Note that the RNG seed of 10 is carefully chosen to make the stochastic * tests work reproducibly. Other choices will tend to fail. */ static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "10", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-t", eslARG_REAL, ".35", NULL, NULL, NULL, NULL, NULL, "tolerance for real-value equality comparisons", 0 }, { "-C", eslARG_INT, "2", NULL, NULL, NULL, NULL, NULL, "number of components in test mixture D'chlets", 0 }, { "-K", eslARG_INT, "6", NULL, NULL, NULL, NULL, NULL, "alphabet size in test mixture D'chlets", 0 }, { "-N", eslARG_INT, "1000", NULL, NULL, NULL, NULL, NULL, "number of sample counts in mixture D'chlet tests", 0 }, { "-T", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of trials of mixture D'chlet tests", 0 }, { "-R", eslARG_INT, "5", NULL, NULL, NULL, NULL, NULL, "number of repetitions of the D'chlet fitting procedure", 0 }, { "-v", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "show verbose output", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for dirichlet module"; int main(int argc, char **argv) { char *msg = "esl_dirichlet unit test failed"; ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_Create(esl_opt_GetInteger(go, "-s")); ESL_MIXDCHLET *d = NULL; int K = esl_opt_GetInteger(go, "-K"); int ncounts = esl_opt_GetInteger(go, "-N"); int ntrials = esl_opt_GetInteger(go, "-T"); int nfit_reps = esl_opt_GetInteger(go, "-R"); double tol = esl_opt_GetReal (go, "-t"); int be_verbose = esl_opt_GetBoolean(go, "-v"); if (be_verbose) printf("rng seed = %" PRIu32 "\n", esl_randomness_GetSeed(r)); /* Create a two-component mixture Dirichlet for testing */ if ((d = esl_mixdchlet_Create(2, K)) == NULL) esl_fatal(msg); esl_vec_DSet(d->pq, 2, 0.5); esl_vec_DSet(d->alpha[0], K, 1.0); esl_vec_DSet(d->alpha[1], K, 0.1); utest_io(d, tol); utest_fit(r, d, ntrials, ncounts, tol, nfit_reps, be_verbose); utest_inference(r, d, ntrials, ncounts, be_verbose); utest_bild(); esl_randomness_Destroy(r); esl_mixdchlet_Destroy(d); esl_getopts_Destroy(go); return 0; } #endif /*eslDIRICHLET_TESTDRIVE*/ /*--------------------- end, test driver ------------------------*/ /***************************************************************** * 7. Example *****************************************************************/ #ifdef eslDIRICHLET_EXAMPLE /*::cexcerpt::dirichlet_example::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslDIRICHLET_EXAMPLE\ -DeslAUGMENT_RANDOM -DeslAUGMENT_FILEPARSER esl_random.c esl_fileparser.c\ esl_vectorops.c esl_dirichlet.c easel.c -lm * run: ./example */ #include #include #include "easel.h" #include "esl_random.h" #include "esl_fileparser.h" #include "esl_vectorops.h" #include "esl_dirichlet.h" int main(int argc, char **argv) { FILE *fp; ESL_FILEPARSER *efp; ESL_RANDOMNESS *r; ESL_MIXDCHLET *pri; int c,i,q,qused; double *counts, *probs, *iq, *ip; /* Read in a mixture Dirichlet from a file. */ fp = fopen(argv[1], "r"); efp = esl_fileparser_Create(fp); if (esl_mixdchlet_Read(efp, &pri) != eslOK) { fprintf(stderr, "%s;\ndirichlet file %s parse failed at line %d\n", efp->errbuf, argv[1], efp->linenumber); exit(1); } esl_fileparser_Destroy(efp); fclose(fp); /* Allocate some working spaces */ probs = malloc(sizeof(double) * pri->K); counts = malloc(sizeof(double) * pri->K); iq = malloc(sizeof(double) * pri->N); ip = malloc(sizeof(double) * pri->K); /* Sample a probability vector from it. */ r = esl_randomness_Create(0); /* init the random generator */ qused = esl_rnd_DChoose(r, pri->pq, pri->N); /* sample a component */ esl_dirichlet_DSample(r, pri->alpha[qused], pri->K, probs); printf("Component %2d: p[] = ", qused); for (i = 0; i < pri->K; i++) printf("%.3f ", probs[i]); printf("\n"); /* Sample a count vector from that prob vector. */ esl_vec_DSet(counts, pri->K, 0.); for (c = 0; c < 20; c++) counts[esl_rnd_DChoose(r, probs, pri->K)] += 1.; printf(" c[] = "); for (i = 0; i < pri->K; i++) printf("%5.0f ", counts[i]); printf("\n"); /* Estimate a probability vector (ip) from those counts, and * also get back the posterior prob P(q|c) of each component (iq). */ esl_mixdchlet_MPParameters(counts, pri->K, pri, iq, ip); printf(" reestimated p[] = "); for (i = 0; i < pri->K; i++) printf("%.3f ", ip[i]); printf("\n"); q = esl_vec_DArgMax(iq, pri->N); printf("probably generated by component %d; P(q%d | c) = %.3f\n", q, q, iq[q]); esl_mixdchlet_Destroy(pri); esl_randomness_Destroy(r); free(probs); free(counts); free(iq); free(ip); return 0; } /*::cexcerpt::dirichlet_example::end::*/ #endif /*eslDIRICHLET_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_dirichlet.c 883 2013-08-17 03:37:45Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_dirichlet.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_sq.c0000664361611702660230000024733112473612607015030 0ustar wheelerteddy/* A sequence. * * Contents: * 1. Text version of the ESL_SQ object. * 2. Digitized version of the ESL_SQ object. [with ] * 3. Other functions that operate on sequences. * 4. Getting single sequences from MSAs. [with ] * 5. Internal functions. * 6. Unit tests. * 7. Test driver. * 8. Examples. * 9. Copyright and license information. */ #include "esl_config.h" #include #include #include #include #include "easel.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" /* alphabet aug adds digital sequences */ #endif #ifdef eslAUGMENT_MSA #include "esl_msa.h" /* msa aug adds ability to extract sq from an MSA */ #endif #include "esl_sq.h" #include "esl_vectorops.h" /* Shared parts of text/digital creation functions (defined in "internal functions" section) */ static ESL_SQ *sq_create(int do_digital); static ESL_SQ *sq_create_from(const char *name, const char *desc, const char *acc); static ESL_SQ_BLOCK *sq_createblock(int count, int do_digital); static int sq_init(ESL_SQ *sq, int do_digital); static void sq_free(ESL_SQ *sq); /***************************************************************** *# 1. Text version of the object. *****************************************************************/ /* Function: esl_sq_Create() * Synopsis: Create a new, empty . * Incept: SRE, Thu Dec 23 11:57:00 2004 [Zaragoza] * * Purpose: Creates an empty sequence object, in text mode, with * internal fields allocated to reasonable initial sizes. * * Args: (void) * * Returns: a pointer to the new . Caller frees this with * . * * Throws: if allocation fails. */ ESL_SQ * esl_sq_Create(void) { return sq_create(FALSE); } /* Function: esl_sq_CreateFrom() * Synopsis: Create a new from text information. * Incept: SRE, Wed Mar 22 09:17:04 2006 [St. Louis] * * Purpose: Create a new object in text mode from elemental data. * This provides an interface between non-Easel code * and Easel's object. * * Makes copies of all data. Caller is still * responsible for memory of name, seq, etc. * * , , and are optional. They can be passed * as to leave them blank. * * is an optional alphabetic secondary structure * annotation string. If it is provided, its length must * match the length of . * * Args: name - name of the sequence (NUL-terminated) * seq - the sequence (alphabetic; NUL-terminated) * desc - optional: description line (or NULL) * acc - optional: accession (or NULL) * ss - optional: secondary structure annotation (or NULL) * * Returns: a pointer to the new object. Free with * . * * Throws: on allocation failure. */ ESL_SQ * esl_sq_CreateFrom(const char *name, const char *seq, const char *desc, const char *acc, const char *ss) { ESL_SQ *sq = NULL; int64_t n = strlen(seq); int status; if ((sq = sq_create_from(name, desc, acc)) == NULL) goto ERROR; if ((status = esl_strdup(seq, n, &(sq->seq))) != eslOK) goto ERROR; if (ss != NULL) { if (strlen(ss) != n) ESL_XEXCEPTION(eslEINVAL, "ss, seq lengths mismatch"); if ((status = esl_strdup(ss, n, &(sq->ss))) != eslOK) goto ERROR; } else sq->ss = NULL; sq->n = n; sq->salloc = n+1; /* We assume we've created a complete sequence; set the coord bookkeeping accordingly. */ sq->start = 1; sq->end = n; sq->C = 0; sq->W = n; sq->L = n; /* optional for extra residue markups */ sq->nxr = 0; sq->xr_tag = NULL; sq->xr = NULL; return sq; ERROR: esl_sq_Destroy(sq); return NULL; } /* Function: esl_sq_Grow() * Synopsis: Assure that a has space to add more residues. * Incept: SRE, Wed Jan 10 08:26:23 2007 [Janelia] * * Purpose: Assure that the sequence can hold at least * one more residue, whether in digital or text mode. * Reallocate if necessary. Optionally returns the number * of residues that can be added before the next call * to in . * * The terminal or sentinel count as a residue for * allocation purposes: that is, you may need to call * before terminating a new sequence. * * Returns: on success. * * Throws: on reallocation failure. In this case, the * original is untouched, and <*opt_nsafe> is returned * as 0. * * Xref: STL11/125. */ int esl_sq_Grow(ESL_SQ *sq, int64_t *opt_nsafe) { void *tmp; int64_t new; int64_t nsafe; int x; /* index for optional extra residue markups */ int status; if (sq->seq != NULL) nsafe = sq->salloc - sq->n; /* text */ else nsafe = (sq->salloc-1) - sq->n; /* digital: -1 because 0 is a sentinel */ if (nsafe < 1) { /* reallocate by doubling (shouldn't need more, but if we do, keep doubling) */ new = sq->salloc; do { nsafe += new; new*=2; } while (nsafe < 1); if (sq->seq != NULL) ESL_RALLOC(sq->seq, tmp, new * sizeof(char)); /* text */ else ESL_RALLOC(sq->dsq, tmp, new * sizeof(ESL_DSQ)); /* digital */ if (sq->ss != NULL) ESL_RALLOC(sq->ss, tmp, new * sizeof(char)); for (x = 0; x < sq->nxr; x++) if (sq->xr[x] != NULL) ESL_RALLOC(sq->xr[x], tmp, new * sizeof(char)); sq->salloc = new; } if (opt_nsafe != NULL) *opt_nsafe = nsafe; return eslOK; ERROR: if (opt_nsafe != NULL) *opt_nsafe = 0; return status; } /* Function: esl_sq_GrowTo() * Synopsis: Grows an to hold a seq of at least residues. * Incept: SRE, Fri Jan 18 11:06:50 2008 [UA5233 Westchester-Dulles] * * Purpose: Assure that the appropriate (text or digital) sequence * field in can hold up to a total of residues, * reallocating as needed. * * If reallocated, the allocation will be $\geq (n+1)$ for * text mode (the +1 is for the terminal NUL byte), $\geq * (n+2)$ for digital mode (+2 for sentinel bytes at each * end). That is, you don't need to take these extra bytes into * account in your ; is the number of residues, not * bytes. * * Returns: on success. * * Throws: on allocation failure. * * Note that n=0 is fine here, because we'll allocate either n+1 or n+2. */ int esl_sq_GrowTo(ESL_SQ *sq, int64_t n) { int x; /* index for optional extra residue markups */ int status; if (sq->seq != NULL) /* text mode */ { if (n+1 > sq->salloc) { ESL_REALLOC(sq->seq, (n+1) * sizeof(char)); if (sq->ss != NULL) ESL_REALLOC(sq->ss, (n+1) * sizeof(char)); for (x = 0; x < sq->nxr; x++) /* optional extra residue markups */ if (sq->xr[x] != NULL) ESL_REALLOC(sq->xr[x], (n+1) * sizeof(char)); sq->salloc = n+1; } } else /* digital mode */ { if (n+2 > sq->salloc) { ESL_REALLOC(sq->dsq, (n+2) * sizeof(ESL_DSQ)); if (sq->ss != NULL) ESL_REALLOC(sq->ss, (n+2) * sizeof(char)); for (x = 0; x < sq->nxr; x++) /* optional extra residue markups */ if (sq->xr[x] != NULL) ESL_REALLOC(sq->xr[x], (n+2) * sizeof(char)); sq->salloc = n+2; } } return eslOK; ERROR: return status; } /* Function: esl_sq_Copy() * Synopsis: Make a copy of an . * Incept: SRE, Sun Feb 24 17:59:24 2008 [UA5315 to St. Louis] * * Purpose: Copies a source sequence object into * destination sequence object . * * The two objects don't have to be matched as far as * text/digital mode go; if mismatched, appropriate * text/digital conversion will be done. * * The destination sequence is reallocated internally * as necessary to hold a copy of . * * Returns: on success. * * Throws: on allocation failure. * * Note: Note the shenanigans involved in copying ss; you have * to pay attention to the ss being a 0..n-1 string in text * mode versus a 1..n string in digital mode. */ int esl_sq_Copy(const ESL_SQ *src, ESL_SQ *dst) { int x; /* index for optional extra residue markups */ int status; /* If has structure annotation and does not, initialize an allocation in */ if (src->ss != NULL && dst->ss == NULL) ESL_ALLOC(dst->ss, sizeof(char) * dst->salloc); /* similarly for optional extra residue markups */ if (src->nxr > 0) { if (dst->nxr > 0) { for (x = 0; x < dst->nxr; x++) { if (dst->xr[x] != NULL) { free(dst->xr[x]); dst->xr[x] = NULL; } if (dst->xr_tag[x] != NULL) { free(dst->xr_tag[x]); dst->xr_tag[x] = NULL; } } if (dst->xr != NULL) { free(dst->xr); dst->xr = NULL; } if (dst->xr_tag != NULL) { free(dst->xr_tag); dst->xr_tag = NULL; } } dst->nxr = src->nxr; ESL_ALLOC(dst->xr_tag, sizeof(char *) * dst->nxr); ESL_ALLOC(dst->xr, sizeof(char *) * dst->nxr); for (x = 0; x < dst->nxr; x++) { ESL_ALLOC(dst->xr_tag[x], sizeof(char) * src->nalloc); ESL_ALLOC(dst->xr[x], sizeof(char) * src->salloc); } } if ((status = esl_sq_SetName (dst, src->name)) != eslOK) goto ERROR; if ((status = esl_sq_SetSource (dst, src->source)) != eslOK) goto ERROR; if ((status = esl_sq_SetAccession(dst, src->acc)) != eslOK) goto ERROR; if ((status = esl_sq_SetDesc (dst, src->desc)) != eslOK) goto ERROR; if ((status = esl_sq_GrowTo (dst, src->n)) != eslOK) goto ERROR; if (src->seq != NULL && dst->seq != NULL) /* text to text */ { strcpy(dst->seq, src->seq); if (src->ss != NULL) strcpy(dst->ss, src->ss); for (x = 0; x < src->nxr; x++) if (src->xr[x] != NULL) strcpy(dst->xr[x], src->xr[x]); } #ifdef eslAUGMENT_ALPHABET else if (src->seq != NULL && dst->dsq != NULL) /* text to digital */ { if ((status = esl_abc_Digitize(dst->abc, src->seq, dst->dsq)) != eslOK) goto ERROR; if (src->ss != NULL) { strcpy(dst->ss+1, src->ss); dst->ss[0] = '\0'; for (x = 0; x < src->nxr; x++) if (src->xr[x] != NULL) { strcpy(dst->xr[x]+1, src->xr[x]); dst->xr[x][0] = '\0'; } } } else if (src->dsq != NULL && dst->seq != NULL) /* digital to text */ { if ((status = esl_abc_Textize(src->abc, src->dsq, src->n, dst->seq)) != eslOK) goto ERROR; if (src->ss != NULL) strcpy(dst->ss, src->ss+1); for (x = 0; x < src->nxr; x++) if (src->xr[x] != NULL) strcpy(dst->xr[x], src->xr[x]+1); } else /* digital to digital */ { if (src->abc->type != dst->abc->type) ESL_XEXCEPTION(eslEINCOMPAT, "seq objects involved in Copy differ in digital alphabet"); if ((status = esl_abc_dsqcpy(src->dsq, src->n, dst->dsq)) != eslOK) goto ERROR; if (src->ss != NULL) { strcpy(dst->ss+1, src->ss+1); dst->ss[0] = '\0'; } for (x = 0; x < src->nxr; x++) if (src->xr[x] != NULL) { strcpy(dst->xr[x]+1, src->xr[x]+1); dst->xr[x][0] = '\0'; } } #endif for (x = 0; x < src->nxr; x++) if (src->xr_tag[x] != NULL) strcpy(dst->xr_tag[x], src->xr_tag[x]); dst->n = src->n; dst->start = src->start; dst->end = src->end; dst->C = src->C; dst->W = src->W; dst->L = src->L; /* don't copy allocations (nalloc, etc); dst knows its own memory */ dst->roff = src->roff; dst->doff = src->doff; dst->hoff = src->hoff; dst->eoff = src->eoff; return eslOK; ERROR: esl_sq_Reuse(dst); return status; } /* Function: esl_sq_Compare() * Synopsis: Compare two sequence objects for equality. * Incept: SRE, Tue May 13 09:00:41 2008 [Janelia] * * Purpose: Compare the contents of two sequence objects * and for equality. * * Disk offsets are only compared if they are set in both * and . Allocation sizes are not compared at * all. * * Returns: if identical, if not. */ int esl_sq_Compare(ESL_SQ *sq1, ESL_SQ *sq2) { int x; /* index for optional extra residue markups */ /* Annotation comparison */ if (strcmp(sq1->name, sq2->name) != 0) return eslFAIL; if (strcmp(sq1->acc, sq2->acc) != 0) return eslFAIL; if (strcmp(sq1->desc, sq2->desc) != 0) return eslFAIL; if (strcmp(sq1->source, sq2->source) != 0) return eslFAIL; if (sq1->ss != NULL && sq2->ss != NULL) { if (strcmp(sq1->ss, sq2->ss) != 0) return eslFAIL; } else if (sq1->ss != NULL || sq2->ss != NULL) return eslFAIL; if (sq1->n != sq2->n) return eslFAIL; /* Sequence comparison */ if (sq1->seq != NULL && sq2->seq != NULL) { if (strcmp(sq1->seq, sq2->seq) != 0) return eslFAIL; } #ifdef eslAUGMENT_ALPHABET else if (sq1->dsq != NULL && sq2->dsq != NULL) { if (memcmp(sq1->dsq, sq2->dsq, sizeof(ESL_DSQ) * (sq1->n+2)) != 0) return eslFAIL; } #endif else return eslFAIL; /* Coordinate comparison */ if (sq1->start != sq2->start) return eslFAIL; if (sq1->end != sq2->end) return eslFAIL; if (sq1->C != sq2->C) return eslFAIL; if (sq1->W != sq2->W) return eslFAIL; if (sq1->L != sq2->L) return eslFAIL; /* Disk offset comparison */ if (sq1->roff != -1 && sq2->roff != -1 && sq1->roff != sq2->roff) return eslFAIL; if (sq1->doff != -1 && sq2->doff != -1 && sq1->doff != sq2->doff) return eslFAIL; if (sq1->hoff != -1 && sq2->hoff != -1 && sq1->hoff != sq2->hoff) return eslFAIL; if (sq1->eoff != -1 && sq2->eoff != -1 && sq1->eoff != sq2->eoff) return eslFAIL; /* optional extra residue markup comparison */ if (sq1->nxr != sq2->nxr) return eslFAIL; for (x = 0; x < sq1->nxr; x++) { if (sq1->xr_tag[x] != NULL && sq2->xr_tag[x] != NULL) { if (strcmp(sq1->xr_tag[x], sq2->xr_tag[x]) != 0) return eslFAIL; } else if (sq1->xr_tag[x] != NULL || sq2->xr_tag[x] != NULL) return eslFAIL; if (sq1->xr[x] != NULL && sq2->xr[x] != NULL) { if (strcmp(sq1->xr[x], sq2->xr[x]) != 0) return eslFAIL; } else if (sq1->xr[x] != NULL || sq2->xr[x] != NULL) return eslFAIL; } /* alphabet comparison */ #ifdef eslAUGMENT_ALPHABET if (sq1->abc != NULL && (sq1->abc->type != sq2->abc->type)) return eslFAIL; #endif return eslOK; } /* Function: esl_sq_Reuse() * Synopsis: Reinitialize an for re-use. * Incept: SRE, Thu Dec 23 12:23:51 2004 [Zaragoza] * * Purpose: Given a sequence object already in use; * reinitialize all its data, so a new seq * may be read into it. This allows sequential sequence * input without a lot of wasted allocation/free cycling. * * Returns: on success. */ int esl_sq_Reuse(ESL_SQ *sq) { int x; /* index for optional extra residue markups */ sq->name[0] = '\0'; sq->acc[0] = '\0'; sq->desc[0] = '\0'; sq->tax_id = -1; sq->source[0] = '\0'; if (sq->seq != NULL) sq->seq[0] = '\0'; if (sq->dsq != NULL) sq->dsq[0] = sq->dsq[1] = eslDSQ_SENTINEL; if (sq->ss != NULL) { if (sq->seq != NULL) sq->ss[0] = '\0'; else sq->ss[0] = sq->ss[1] = '\0'; /* in digital mode, ss string is 1..n; 0 is a dummy \0 byte*/ } /* optional extra residue markup */ if (sq->nxr > 0) { for (x = 0; x < sq->nxr; x++) { if (sq->xr[x] != NULL) { free(sq->xr[x]); sq->xr[x] = NULL; } if (sq->xr_tag[x] != NULL) { free(sq->xr_tag[x]); sq->xr_tag[x] = NULL; } } if (sq->xr != NULL) { free(sq->xr); sq->xr = NULL; } if (sq->xr_tag != NULL) { free(sq->xr_tag); sq->xr_tag = NULL; } sq->nxr = 0; } sq->n = 0; sq->start = 0; sq->end = 0; sq->C = 0; sq->W = 0; sq->L = -1; sq->idx = -1; sq->doff = -1; sq->hoff = -1; sq->roff = -1; sq->eoff = -1; return eslOK; } /* Function: esl_sq_IsDigital() * Synopsis: Return if is digital. * Incept: SRE, Mon Mar 2 18:05:34 2009 [Casa de Gatos] * * Purpose: Return if is in digital mode, * and if not. */ int esl_sq_IsDigital(const ESL_SQ *sq) { return ((sq->dsq != NULL) ? TRUE : FALSE); } /* Function: esl_sq_IsText() * Synopsis: Return if is text mode. * Incept: SRE, Mon Mar 2 18:06:22 2009 [Casa de Gatos] * * Purpose: Return if is in text mode, * and if not. */ int esl_sq_IsText(const ESL_SQ *sq) { return ((sq->seq != NULL) ? TRUE : FALSE); } /* Function: esl_sq_Destroy() * Synopsis: Frees an . * Incept: SRE, Thu Dec 23 12:28:07 2004 [Zaragoza] * * Purpose: Free a Create()'d . */ void esl_sq_Destroy(ESL_SQ *sq) { int x; /* index for optional extra residue markups */ if (sq == NULL) return; if (sq->name != NULL) free(sq->name); if (sq->acc != NULL) free(sq->acc); if (sq->desc != NULL) free(sq->desc); if (sq->seq != NULL) free(sq->seq); if (sq->dsq != NULL) free(sq->dsq); if (sq->ss != NULL) free(sq->ss); if (sq->source != NULL) free(sq->source); if (sq->nxr > 0) { for (x = 0; x < sq->nxr; x++) { if (sq->xr[x] != NULL) free(sq->xr[x]); if (sq->xr_tag[x] != NULL) free(sq->xr_tag[x]); } if (sq->xr != NULL) free(sq->xr); if (sq->xr_tag != NULL) free(sq->xr_tag); } free(sq); return; } /* Function: esl_sq_CreateBlock() * Synopsis: Create a new block of empty . * Incept: * * Purpose: Creates a block of empty sequence objects. * * Returns: a pointer to the new . Caller frees this * with . * * Throws: if allocation fails. */ ESL_SQ_BLOCK * esl_sq_CreateBlock(int count) { return sq_createblock(count, FALSE); } /* Function: esl_sq_DestroyBlock() * Synopsis: Frees an . * Incept: * * Purpose: Free a Create()'d block of . */ void esl_sq_DestroyBlock(ESL_SQ_BLOCK *block) { int i; if (block == NULL) return; for (i = 0; i < block->listSize; ++i) { sq_free(block->list + i); } free(block->list); free(block); return; } #ifdef eslAUGMENT_ALPHABET /* Function: esl_sq_CreateDigitalBlock() * Synopsis: Create a new block of empty in digital mode. * Incept: * * Purpose: Same as , except the returned * is configured for a digital sequence using internal * alphabet , rather than a text sequence. Creates an * empty digital sequence object, with internal * fields allocated to reasonable initial sizes. * * Returns: a pointer to the new . Caller frees this with * . * * Throws: if an allocation fails. * * Xref: */ ESL_SQ_BLOCK * esl_sq_CreateDigitalBlock(int count, const ESL_ALPHABET *abc) { int i; ESL_SQ_BLOCK *block; if ((block = sq_createblock(count, TRUE)) == NULL) return NULL; for (i = 0; i < count; ++i) { block->list[i].abc = abc; } return block; } #endif /* eslAUGMENT_ALPHABET */ /*--------------- end of ESL_SQ object functions ----------------*/ /***************************************************************** *# 2. Digitized version of the object. (Requires ) *****************************************************************/ #ifdef eslAUGMENT_ALPHABET /* Function: esl_sq_CreateDigital() * Synopsis: Create a new, empty in digital mode. * Incept: SRE, Tue Jan 9 16:42:35 2007 [Janelia] * * Purpose: Same as , except the returned is * configured for a digital sequence using internal * alphabet , rather than a text sequence. Creates an * empty digital sequence object, with internal * fields allocated to reasonable initial sizes. * * Args: abc - pointer to internal alphabet * * Returns: a pointer to the new . Caller frees this with * . * * Throws: if an allocation fails. * * Xref: STL11/124 */ ESL_SQ * esl_sq_CreateDigital(const ESL_ALPHABET *abc) { ESL_SQ *s; if ((s = sq_create(TRUE)) == NULL) return NULL; s->abc = abc; return s; } /* Function: esl_sq_CreateDigitalFrom() * Synopsis: Create a new digital from text info. * Incept: EPN, Fri Aug 24 13:38:56 2007 * * Purpose: Create a new object from elemental data. * Same as except takes a digital * instead of a text as the sequence to copy. * * Makes copies of all data. Caller is still * responsible for memory of name, seq, etc. * * is an optional alphabetic secondary structure * annotation string, <0..n-1>. If provided, its length * must match the length of . (Note that although the * argument is provided as a standard <0..n-1> C * string, is stored internally as a <1..n> string in * a digital sequence object, so that both the digital * sequence and its alphabetic secondary structure * annotation are indexed the same.) * * The object is growable; you can use * on it. * * Args: abc - the digital alphabet * name - name of the sequence * dsq - digital sequence <1..L> * n - length of digitized sequence in residues (or -1 if unknown) * desc - optional: description line (or NULL) * acc - optional: accession (or NULL) * ss - optional: secondary structure annotation (or NULL) * * Returns: a pointer to the new object. Free with * . * * Throws: on allocation failure. */ ESL_SQ * esl_sq_CreateDigitalFrom(const ESL_ALPHABET *abc, const char *name, const ESL_DSQ *dsq, int64_t n, const char *desc, const char *acc, const char *ss) { ESL_SQ *sq = NULL; int status; if((sq = sq_create_from(name, desc, acc)) == NULL) goto ERROR; sq->n = (n == -1) ? esl_abc_dsqlen(dsq) : n; if ((status = esl_abc_dsqdup(dsq, sq->n, &(sq->dsq))) != eslOK) goto ERROR; if (ss != NULL) { if (strlen(ss) != sq->n) ESL_XEXCEPTION(eslEINVAL, "ss, seq lengths mismatch"); ESL_ALLOC(sq->ss, sizeof(char) * (sq->n+2)); sq->ss[0] = '\0'; strcpy(sq->ss+1, ss); } /* We assume we've created a complete sequence; set the coord bookkeeping accordingly. */ sq->start = 1; sq->end = n; sq->C = 0; sq->W = n; sq->L = n; sq->salloc = sq->n+2; sq->abc = abc; return sq; ERROR: esl_sq_Destroy(sq); return NULL; } /* Function: esl_sq_Digitize() * Synopsis: Convert an to digital mode. * Incept: EPN, Mon Feb 12 11:09:06 2007 * * Purpose: Given a sequence in text mode, convert it to * digital mode, using alphabet . * * Internally, the digital sequence field is filled, * the text alignment field is destroyed and free'd, * a copy of the alphabet pointer is kept in the sq's * reference. * * Args: abc - digital alphabet * sq - sequence to digitize * * Returns: on success. * Returns if the sequence contains invalid characters * that can't be digitized. If this happens, the is returned * unaltered - left in text mode, with as it was. (This is * a normal error, because seq> may be user input that we * haven't validated yet.) * * Throws: on allocation failure; in this case, state of may be * wedged, and it should only be destroyed, not used. */ int esl_sq_Digitize(const ESL_ALPHABET *abc, ESL_SQ *sq) { int x; /* index for optional extra residue markups */ int status; /* Contract checks */ if (sq->dsq != NULL) return eslOK; if (sq->seq == NULL) ESL_EXCEPTION(eslEINVAL, "sq has no text sequence"); /* Validate before we convert, so we leave untouched if it's bad. */ if (esl_abc_ValidateSeq(abc, sq->seq, sq->n, NULL) != eslOK) return eslEINVAL; /* Allocate dsq, ss properly; these are our last failure points. */ /* You can't just call Grow() here, because it would grow for old text mode, not new digital */ if (sq->salloc < sq->n+2) { /* it's possible (though unlikely) for salloc to be 1 residue too small */ sq->salloc = sq->n+2; if (sq->ss != NULL) { void *tmp; ESL_RALLOC(sq->ss, tmp, sizeof(char) * sq->salloc); } /* optional extra residue markups follow same convenctions as ss */ for (x = 0; x < sq->nxr; x++) if (sq->xr[x] != NULL) { void *tmp; ESL_RALLOC(sq->xr[x], tmp, sizeof(char) * sq->salloc); } } ESL_ALLOC(sq->dsq, (sq->salloc) * sizeof(ESL_DSQ)); /* Now convert. */ if ((status = esl_abc_Digitize(abc, sq->seq, sq->dsq)) != eslOK) goto ERROR; if (sq->ss != NULL) { memmove(sq->ss+1, sq->ss, sq->n+1); sq->ss[0] = '\0'; } for (x = 0; x < sq->nxr; x++) if (sq->xr[x] != NULL) { memmove(sq->xr[x]+1, sq->xr[x], sq->n+1); sq->xr[x][0] = '\0'; } free(sq->seq); sq->seq = NULL; sq->abc = abc; return eslOK; ERROR: if (sq->dsq != NULL) free(sq->dsq); return status; } /* Function: esl_sq_Textize() * Synopsis: Convert an to text mode. * Incept: EPN, Mon Feb 12 11:15:06 2007 * * Purpose: Given a sequence in digital mode, convert it * to text mode. * * Internally, the text alignment field is filled, the * digital alignment field is destroyed and free'd, the * sq's digital alphabet reference is nullified. * * Args: sq - sequence object to convert to text * * Returns: on success. * * Throws: on allocation failure. * Throws if the digital sequence contains * invalid codes. */ int esl_sq_Textize(ESL_SQ *sq) { int x; /* index for optional extra residue markups */ int status; /* Contract checks */ if (sq->seq != NULL) return eslOK; if (sq->dsq == NULL) ESL_EXCEPTION(eslEINVAL, "sq has no digital sequence"); if (sq->abc == NULL) ESL_EXCEPTION(eslEINVAL, "sq has no digital alphabet"); /* Allocate. salloc is guaranteed big enough, if it was big enough for digital. */ ESL_ALLOC(sq->seq, sq->salloc * sizeof(char)); /* Convert. */ if ((status = esl_abc_Textize(sq->abc, sq->dsq, sq->n, sq->seq)) != eslOK) goto ERROR; if (sq->ss != NULL) memmove(sq->ss, sq->ss+1, sq->n+1); /* slide back to 0..n-1; +1 includes terminal \0 */ for (x = 0; x < sq->nxr; x++) if (sq->xr[x] != NULL) memmove(sq->xr[x], sq->xr[x]+1, sq->n+1); /* slide back to 0..n-1; +1 includes terminal \0 */ free(sq->dsq); sq->dsq = NULL; sq->abc = NULL; /* nullify reference (caller still owns real abc) */ return eslOK; ERROR: if (sq->seq != NULL) free(sq->seq); return status; } /* Function: esl_sq_GuessAlphabet() * Synopsis: Guess alphabet type of a single sequence. * * Purpose: Guess the alphabet type of biosequence , and store the * guess in <*ret_type>. * * All 26 letters are valid in the amino alphabet (even * and now), so the DNA alphabet is necessarily a subset. * Therefore most protein sequences can be identified * unambiguously (because they use letters that only occur * in amino acid sequence), but DNA sequences cannot be. * * The sequence must contain more than 10 residues, or it * is called . * * For details on the rules used to classify a residue * composition, see . The rules * are good but not perfect. We err on the conservative * side, calling rather than making * classification errors. However, errors are possible; an * example is a protein sequence * ("ala-cys-gly-thr..."), which will be called , * because it contains all and only DNA residues. * * The routine is tested on large sequence databases to * make sure there are zero false positive classifications * on known sequences. See for * details of these tests, and crossreferences. * * Returns: on success, and <*ret_type> is set to * , , or . * * Returns if unable to determine the * alphabet type; in this case, <*ret_type> is set to * . * * Xref: See notes on esl_alphabet.c::esl_abc_GuessAlphabet() */ int esl_sq_GuessAlphabet(ESL_SQ *sq, int *ret_type) { int64_t ct[26]; int x; int64_t i; int64_t n = 0; for (x = 0; x < 26; x++) ct[x] = 0; for (i = 0; i < sq->n; i++) { x = toupper(sq->seq[i]) - 'A'; if (x < 0 || x > 26) continue; ct[x]++; n++; if (n > 10000) break; /* we oughta know by now! */ } return esl_abc_GuessAlphabet(ct, ret_type); } /* Function: esl_sq_ConvertDegen2X() * Synopsis: Convert all degenerate residues to X/N * Incept: SRE, Tue Apr 20 08:52:54 2010 [Janelia] * * Purpose: Convert all the degenerate residue codes in digital * sequence to the code for "unknown residue" (maximum * degeneracy); for example, X for protein, N for nucleic * acid. * * This is handy when you need to be compatible with * software that can't deal with unusual residue codes. * For example, WU-BLAST can't deal with O (pyrrolysine) * codes. * * Returns: on success. * * Throws: if isn't in digital mode. * (We only know how to interpret the alphabet * in digital mode. In text mode, letters are * just letters.) */ int esl_sq_ConvertDegen2X(ESL_SQ *sq) { if (! esl_sq_IsDigital(sq)) ESL_EXCEPTION(eslEINVAL, "esl_sq_ConvertDegen2X() only works on digital sequences"); return esl_abc_ConvertDegen2X(sq->abc, sq->dsq); } #endif /*eslAUGMENT_ALPHABET*/ /*---------- end of digitized ESL_SQ object functions -----------*/ /***************************************************************** *# 3. Other functions that operate on sequences. *****************************************************************/ /* Function: esl_sq_SetName() * Synopsis: Set the name of a sequence. * Incept: SRE, Thu Jan 11 08:42:53 2007 [Janelia] * * Purpose: Set the name of the sequence to , reallocating * as needed. For example, . * * A copy of is made, so if caller had allocated, * it is still responsible for freeing it. * * Returns: on success. * * Throws: on allocation error. * * Xref: STL11/125 */ int esl_sq_SetName(ESL_SQ *sq, const char *name) { int n; void *tmp; int status; if (name == NULL) { sq->name[0] = '\0'; return eslOK; } n = strlen(name); if (n >= sq->nalloc) { ESL_RALLOC(sq->name, tmp, sizeof(char) * (n+1)); sq->nalloc = n+1; } strcpy(sq->name, name); return eslOK; ERROR: return status; } /* Function: esl_sq_SetAccession() * Synopsis: Set the accession field in a sequence. * Incept: SRE, Fri Jan 18 09:48:54 2008 [Westchester airport] * * Purpose: Set the accession of the sequence to , reallocating * as needed. For example, . * * A copy of is made, so if caller had allocated, * it is still responsible for freeing it. * * Returns: on success. * * Throws: on allocation error. * * Xref: STL11/125 */ int esl_sq_SetAccession(ESL_SQ *sq, const char *acc) { int n; void *tmp; int status; if (acc == NULL) { sq->acc[0] = '\0'; return eslOK; } n = strlen(acc); if (n >= sq->aalloc) { ESL_RALLOC(sq->acc, tmp, sizeof(char) * (n+1)); sq->aalloc = n+1; } strcpy(sq->acc, acc); return eslOK; ERROR: return status; } /* Function: esl_sq_SetDesc() * Synopsis: Set the description field in a sequence. * Incept: SRE, Fri Jan 18 09:46:14 2008 [Westchester airport] * * Purpose: Set the description of the sequence to , reallocating * as needed. * For example, . * * A copy of is made, so if caller had allocated, * it is still responsible for freeing it. * * Returns: on success. * * Throws: on allocation error. * * Xref: STL11/125 */ int esl_sq_SetDesc(ESL_SQ *sq, const char *desc) { int n; void *tmp; int status; if (desc == NULL) { sq->desc[0] = '\0'; return eslOK; } n = strlen(desc); if (n >= sq->dalloc) { ESL_RALLOC(sq->desc, tmp, sizeof(char) * (n+1)); sq->dalloc = n+1; } strcpy(sq->desc, desc); return eslOK; ERROR: return status; } /* Function: esl_sq_SetSource() * Synopsis: Set the source name field in a sequence. * Incept: SRE, Wed May 7 16:17:56 2008 [Janelia] * * Purpose: Set the source of the sequence to , reallocating * as needed. For example, . * * A copy of is made, so if caller had allocated, * it is still responsible for freeing it. * * Returns: on success. * * Throws: on allocation error. * * Xref: STL11/125 */ int esl_sq_SetSource(ESL_SQ *sq, const char *source) { int n; void *tmp; int status; if (source == NULL) { sq->source[0] = '\0'; return eslOK; } n = strlen(source); if (n >= sq->srcalloc) { ESL_RALLOC(sq->source, tmp, sizeof(char) * (n+1)); sq->srcalloc = n+1; } strcpy(sq->source, source); return eslOK; ERROR: return status; } /* Function: esl_sq_FormatName() * Synopsis: Format a name of a sequence, printf()-style. * Incept: SRE, Fri Sep 11 10:59:01 2009 [Janelia] * * Purpose: Format the name of the sequence using * -style format string and corresponding * -style arguments, reallocating as * needed. * For example, . * * A copy of is made, so if caller had allocated, * it is still responsible for freeing it. * * Returns: on success. * * Throws: on allocation error. */ int esl_sq_FormatName(ESL_SQ *sq, const char *name, ...) { va_list argp; va_list argp2; int n; void *tmp; int status; if (name == NULL) { sq->name[0] = '\0'; return eslOK; } va_start(argp, name); va_copy(argp2, argp); if ((n = vsnprintf(sq->name, sq->nalloc, name, argp)) >= sq->nalloc) { ESL_RALLOC(sq->name, tmp, sizeof(char) * (n+1)); sq->nalloc = n+1; vsnprintf(sq->name, sq->nalloc, name, argp2); } va_end(argp); va_end(argp2); return eslOK; ERROR: return status; } /* Function: esl_sq_FormatAccession() * Synopsis: Format the accession field in a sequence, printf()-style. * Incept: SRE, Fri Sep 11 11:00:37 2009 [Janelia] * * Purpose: Format the accession of the sequence using -style * format string and corresponding -style arguments, * reallocating as needed. * For example, . * * A copy of is made, so if caller had allocated, * it is still responsible for freeing it. * * Returns: on success. * * Throws: on allocation error. */ int esl_sq_FormatAccession(ESL_SQ *sq, const char *acc, ...) { va_list argp, argp2; int n; void *tmp; int status; if (acc == NULL) { sq->acc[0] = '\0'; return eslOK; } va_start(argp, acc); va_copy(argp2, argp); if ((n = vsnprintf(sq->acc, sq->aalloc, acc, argp)) >= sq->aalloc) { ESL_RALLOC(sq->acc, tmp, sizeof(char) * (n+1)); sq->aalloc = n+1; vsnprintf(sq->acc, sq->aalloc, acc, argp2); } va_end(argp); va_end(argp2); return eslOK; ERROR: return status; } /* Function: esl_sq_FormatDesc() * Synopsis: Format the description field in a sequence, printf()-style. * Incept: SRE, Fri Sep 11 11:02:11 2009 [Janelia] * * Purpose: Format the description of the sequence using -style * format string and corresponding -style arguments, * reallocating as needed. * For example, . * * A copy of is made, so if caller had allocated, * it is still responsible for freeing it. * * Returns: on success. * * Throws: on allocation error. */ int esl_sq_FormatDesc(ESL_SQ *sq, const char *desc, ...) { va_list argp, argp2; int n; void *tmp; int status; if (desc == NULL) { sq->desc[0] = '\0'; return eslOK; } va_start(argp, desc); va_copy(argp2, argp); if ((n = vsnprintf(sq->desc, sq->dalloc, desc, argp)) >= sq->dalloc) { ESL_RALLOC(sq->desc, tmp, sizeof(char) * (n+1)); sq->dalloc = n+1; vsnprintf(sq->desc, sq->dalloc, desc, argp2); } va_end(argp); va_end(argp2); return eslOK; ERROR: return status; } /* Function: esl_sq_FormatSource() * Synopsis: Format the source name field in a sequence, printf()-style. * Incept: SRE, Fri Sep 11 10:55:10 2009 [Janelia] * * Purpose: Format the source of the sequence using -style * format string and corresponding -style arguments, * reallocating as needed. * For example, . * * A copy of is made, so if caller had allocated, * it is still responsible for freeing it. * * Returns: on success. * * Throws: on allocation error. */ int esl_sq_FormatSource(ESL_SQ *sq, const char *source, ...) { va_list argp, argp2; int n; void *tmp; int status; if (source == NULL) { sq->source[0] = '\0'; return eslOK; } va_start(argp, source); va_copy(argp2, argp); if ((n = vsnprintf(sq->source, sq->srcalloc, source, argp)) >= sq->srcalloc) { ESL_RALLOC(sq->source, tmp, sizeof(char) * (n+1)); sq->srcalloc = n+1; vsnprintf(sq->source, sq->srcalloc, source, argp2); } va_end(argp); va_end(argp2); return eslOK; ERROR: return status; } /* Function: esl_sq_AppendDesc() * Synopsis: Append a new line to a growing multiline description. * Incept: SRE, Thu May 22 15:33:43 2008 [Janelia] * * Purpose: Append line to the description annotation line * in . * * The annotation line desc> is a single line; it may * not contain \verb+\n+ newlines. Caller is responsible * for making sure does not terminate in \verb+\n+. * If desc> already contains a description * line (presumably because we're reading from a file format * that's split the description across multiple lines), * append a space before adding this next line . * * Returns: on success. * * Throws: on allocation failure. */ int esl_sq_AppendDesc(ESL_SQ *sq, const char *desc) { void *tmp; int dlen = (sq->desc == NULL ? 0 : strlen(sq->desc)); int newlen = (desc == NULL ? 0 : strlen(desc)); int status; if (dlen + newlen + 1 >= sq->dalloc) { /* +1 for appended space */ ESL_RALLOC(sq->desc, tmp, sizeof(char) * (newlen+dlen+eslSQ_DESCCHUNK)); sq->dalloc = newlen+dlen+eslSQ_DESCCHUNK; } if (dlen > 0) { sq->desc[dlen] = ' '; dlen++; } strcpy(sq->desc + dlen, desc); return eslOK; ERROR: return status; } /* Function: esl_sq_SetCoordComplete() * Synopsis: Sets coords in a complete sequence. * Incept: SRE, Tue May 13 09:25:33 2008 [Janelia] * * Purpose: Declare that contains a complete sequence of length * ; set the coordinate and length information in * accordingly. This is used in building new sequence * objects. * * seq> or dsq> must contain a sequence of length * . * * Returns: on success. */ int esl_sq_SetCoordComplete(ESL_SQ *sq, int64_t L) { sq->start = 1; sq->end = L; sq->C = 0; sq->W = L; sq->L = L; sq->n = L; return eslOK; } /* Function: esl_sq_CAddResidue() * Synopsis: Add one residue (or terminal NUL) to a text seq. * Incept: SRE, Wed Jan 10 07:58:20 2007 [Janelia] * * Purpose: Add one residue onto a growing text mode sequence , * and deal with any necessary reallocation. * * The sequence in is not -terminated. To * finish and NUL-terminate , call * . * * Note: Not the most efficient routine, but convenient in some * routines. Parsers (where speed is at a premium) typically * use an addseq() kind of function instead. * * Returns: on success. * * Throws: on re-allocation failure. * * Xref: STL11/125. */ int esl_sq_CAddResidue(ESL_SQ *sq, char c) { if (esl_sq_Grow(sq, NULL) != eslOK) return eslEMEM; sq->seq[sq->n] = c; if (c != '\0') sq->n++; return eslOK; } #ifdef eslAUGMENT_ALPHABET /* Function: esl_sq_XAddResidue() * Synopsis: Add one residue (or terminal sentinel) to digital seq. * Incept: SRE, Wed Jan 10 08:23:23 2007 [Janelia] * * Purpose: Like , but for digital mode * sequence: add a digital residue onto a growing * digital sequence . * * The digital sequence in must be explicitly * terminated when you're done adding to it; call * . * * Returns: on success. * * Throws: on re-allocation failure. * * Xref: STL11/125. */ int esl_sq_XAddResidue(ESL_SQ *sq, ESL_DSQ x) { if (esl_sq_Grow(sq, NULL) != eslOK) return eslEMEM; sq->dsq[sq->n+1] = x; if (x != eslDSQ_SENTINEL) sq->n++; return eslOK; } #endif /* eslAUGMENT_ALPHABET */ /* Function: esl_sq_ReverseComplement() * Synopsis: Reverse complement a sequence. * Incept: SRE, Thu May 15 20:52:13 2008 [Casa de Gatos] * * Purpose: Reverse complement the sequence , in place. * * If is in text mode, upper/lower case is preserved, * and the DNA alphabet is used ( is complemented to * , not ). If a non-nucleic character is seen, it * is reverse complemented to an N, and the return status * is (but the whole sequence is still reverse * complemented). * * If is in digital mode, the appropriate alphabet * (DNA vs. RNA) is used. If the alphabet has no defined * complement (such as amino acids), an * error is thrown, and the sequence isn't changed at all. * * Gap and missing data characters, if any, are preserved * (in text mode, <._-> are treated as gaps, and <~> as * missing data). Degenerate nucleic acid IUPAC characters * are complemented appropriately. * * The coords in are swapped. (Note that * in the unusual case of sequences of length 1, * and we can't unambiguously tell if a seq is * in the reverse complement direction or not; this is a * minor flaw in Easel's current coordinate handling.) * * Returns: on success. * * Returns if the is in text mode, and we * see a character that doesn't belong to the IUPAC DNA/RNA * alphabet; in this case, the is still reverse * complemented using the DNA alphabet, with for any * non-nucleic residues. * * Throws: if the is in digital mode, but the * digital alphabet has no defined complement. */ int esl_sq_ReverseComplement(ESL_SQ *sq) { int64_t i; int x; /* index for optional extra residue markups */ int status = eslOK; if (sq->seq != NULL) { /* first, complement the sequence */ for (i = 0; i < sq->n; i++) switch (sq->seq[i]) { case 'A': sq->seq[i] = 'T'; break; case 'C': sq->seq[i] = 'G'; break; case 'G': sq->seq[i] = 'C'; break; case 'T': sq->seq[i] = 'A'; break; case 'U': sq->seq[i] = 'A'; break; case 'R': sq->seq[i] = 'Y'; break; case 'Y': sq->seq[i] = 'R'; break; case 'M': sq->seq[i] = 'K'; break; case 'K': sq->seq[i] = 'M'; break; case 'S': sq->seq[i] = 'S'; break; case 'W': sq->seq[i] = 'W'; break; case 'H': sq->seq[i] = 'D'; break; case 'B': sq->seq[i] = 'V'; break; case 'V': sq->seq[i] = 'B'; break; case 'D': sq->seq[i] = 'H'; break; case 'N': sq->seq[i] = 'N'; break; case 'X': sq->seq[i] = 'X'; break; case 'a': sq->seq[i] = 't'; break; case 'c': sq->seq[i] = 'g'; break; case 'g': sq->seq[i] = 'c'; break; case 't': sq->seq[i] = 'a'; break; case 'u': sq->seq[i] = 'a'; break; case 'r': sq->seq[i] = 'y'; break; case 'y': sq->seq[i] = 'r'; break; case 'm': sq->seq[i] = 'k'; break; case 'k': sq->seq[i] = 'm'; break; case 's': sq->seq[i] = 's'; break; case 'w': sq->seq[i] = 'w'; break; case 'h': sq->seq[i] = 'd'; break; case 'b': sq->seq[i] = 'v'; break; case 'v': sq->seq[i] = 'b'; break; case 'd': sq->seq[i] = 'h'; break; case 'n': sq->seq[i] = 'n'; break; case 'x': sq->seq[i] = 'x'; break; case '.': sq->seq[i] = '.'; break; case '_': sq->seq[i] = '_'; break; case '-': sq->seq[i] = '-'; break; case '~': sq->seq[i] = '~'; break; default: sq->seq[i] = 'N'; status = eslEINVAL; break; } /* then, reverse it in place */ for (i = 0; i < sq->n / 2; i++) ESL_SWAP(sq->seq[i], sq->seq[sq->n-i-1], char); } #ifdef eslAUGMENT_ALPHABET else { if (sq->abc->complement == NULL) ESL_EXCEPTION(eslEINCOMPAT, "tried to take reverse complement of a non-nucleic sequence"); ESL_DSQ x; for (i = 1; i <= sq->n/2; i++) { x = sq->abc->complement[sq->dsq[sq->n-i+1]]; sq->dsq[sq->n-i+1] = sq->abc->complement[sq->dsq[i]]; sq->dsq[i] = x; } if (sq->n%2) sq->dsq[i] = sq->abc->complement[sq->dsq[i]]; } #endif /*eslAUGMENT_ALPHABET*/ ESL_SWAP(sq->start, sq->end, int); /* revcomp invalidates any secondary structure annotation */ if (sq->ss != NULL) { free(sq->ss); sq->ss = NULL; } /* revcomp invalidates any extra residue markup */ if (sq->nxr > 0) { for (x = 0; x < sq->nxr; x++) if (sq->xr[x] != NULL) { free(sq->xr_tag[x]); free(sq->xr[x]); sq->xr_tag[x] = NULL; sq->xr[x] = NULL; } free(sq->xr_tag); sq->xr_tag = NULL; free(sq->xr); sq->xr = NULL; } return status; } /* Function: esl_sq_Checksum() * Synopsis: Calculate a 32-bit checksum for a sequence. * Incept: SRE, Tue Aug 25 14:32:17 2009 [Janelia] * * Purpose: Calculate a 32-bit checksum for . * * Only the sequence data are considered, not name or other * annotation. For text mode sequences, the checksum is * case sensitive. The checksum is also sensitive to * whether the sequence is text or digital mode; the same * sequence in will yield different checksums in digital * vs. text mode. * * Returns: on success; the checksum is in <*ret_checksum>. */ int esl_sq_Checksum(const ESL_SQ *sq, uint32_t *ret_checksum) { uint32_t val = 0; uint64_t pos; if (sq->seq != NULL) { for (pos = 0; pos < sq->n; pos++) { val += sq->seq[pos]; val += (val << 10); val ^= (val >> 6); } } #ifdef eslAUGMENT_ALPHABET else { for (pos = 1; pos <= sq->n; pos++) { val += sq->dsq[pos]; val += (val << 10); val ^= (val >> 6); } } #endif val += (val << 3); val ^= (val >> 11); val += (val << 15); *ret_checksum = val; return eslOK; } /* Function: esl_sq_CountResidues() * Synopsis: compute character counts * * Purpose: Given an ESL\_SQ , compute counts of all observed * residues in the range between and +-1. Note * that a text-mode sequence starts at 0, while a digital-mode * sequence starts at 1. Will count degeneracies as partial * observations of the K canonical residues. Gaps, missing data, * and not-a-residue characters will be ignored (so $\sum_x f[x]$ is * not necessarily == L!). The array <*f> needs to be allocated for * sq->abc->K values. * * The vector is not zeroed out, allowing counts to be gathered from * a collection of ESL\_SQs. * * Returns: on success, when start or L are * outside the range of the sequence. */ int esl_sq_CountResidues(const ESL_SQ *sq, int start, int L, float *f) { int i; if (sq->seq != NULL) { /* text */ if (start<0 || start+L>sq->n) return eslERANGE; //range out of sequence bounds for (i=start ; i < start+L; i++) { if(! esl_abc_CIsGap(sq->abc, sq->seq[i])) // ignore gap characters esl_abc_FCount(sq->abc, f, sq->abc->inmap[(int) sq->seq[i]], 1.); } #ifdef eslAUGMENT_ALPHABET } else { /* digital sequence; 0 is a sentinel */ if (start<1 || start+L>sq->n+1) return eslERANGE; //range out of sequence bounds for (i=start ; i < start+L; i++) { if(! esl_abc_XIsGap(sq->abc, sq->dsq[i])) // ignore gap characters esl_abc_FCount(sq->abc, f, sq->dsq[i], 1.); } #endif } return eslOK; } /*---------------------- end, other functions -------------------*/ /***************************************************************** *# 4. Getting single sequences from MSAs (requires ) *****************************************************************/ #ifdef eslAUGMENT_MSA /* Function: esl_sq_GetFromMSA() * Synopsis: Get a single sequence from an MSA. * Incept: SRE, Tue Apr 1 11:13:28 2008 [Janelia] * * Purpose: Retrieve sequence number (<0..msa->nseq-1>) from * and store it in the that the caller allocated * and provided. This version (as opposed to * , below) allows caller to reuse * the same container for retrieving sequences one at * a time from an MSA. * * The retrieved sequence must be in the same mode as * the source , text versus digital. * * The retrieved sequence is dealigned. For a text mode * sequence, gap characters to be removed are assumed to be * <-_.>. For a digital mode sequence, gap characters are * defined by the digital alphabet. * * The source> field is set to the name of the MSA, if * an MSA name is present. * * Returns: on success, and the retrieved sequence is in . * Some of the internals of may have been reallocated if * necessary. * * Returns if there is no sequence number . * * Throws: on allocation error; * if is in a different text/digital mode than * . */ int esl_sq_GetFromMSA(const ESL_MSA *msa, int which, ESL_SQ *sq) { char *gapchars = "-_.~"; /* hardcoded for now */ char *acc = NULL; char *desc = NULL; char *ss = NULL; char **xr_tag = NULL; /* extra residue markup tags */ char **xr = NULL; /* extra residue markup */ int x; /* index for optional extra residue markups */ int status; if (which >= msa->nseq || which < 0) return eslEOD; if ( (msa->flags & eslMSA_DIGITAL) && sq->dsq == NULL) ESL_XEXCEPTION(eslEINVAL, "msa is digital, sq is not"); if (!(msa->flags & eslMSA_DIGITAL) && sq->seq == NULL) ESL_XEXCEPTION(eslEINVAL, "msa is text, sq is not"); /* watch out for completely missing optional msa annotations; * msa->sqacc[which] could segfault if msa->sqacc itself is NULL */ if (msa->sqacc != NULL) acc = msa->sqacc[which]; if (msa->sqdesc != NULL) desc = msa->sqdesc[which]; if (msa->ss != NULL) ss = msa->ss[which]; /* a markup for unparsed #=GR lines is converted to a sequence extra residue markup */ ESL_ALLOC(xr_tag, sizeof(char *) * msa->ngr); ESL_ALLOC(xr, sizeof(char *) * msa->ngr); for (x = 0; x < msa->ngr; x ++) { xr_tag[x] = NULL; xr[x] = NULL; if (msa->gr[x][which] != NULL) { xr[sq->nxr] = msa->gr[x][which]; if (msa->gr_tag[x] != NULL) xr_tag[sq->nxr] = msa->gr_tag[x]; else goto ERROR; sq->nxr ++; } } if (sq->nxr > 0) { ESL_ALLOC(sq->xr_tag, sizeof(char *) * sq->nxr); for (x = 0; x < sq->nxr; x ++) sq->xr_tag[x] = NULL; ESL_ALLOC(sq->xr, sizeof(char *) * sq->nxr); for (x = 0; x < sq->nxr; x ++) sq->xr[x] = NULL; } if ((status = esl_sq_SetName (sq, msa->sqname[which])) != eslOK) goto ERROR; if ((status = esl_sq_SetAccession(sq, acc)) != eslOK) goto ERROR; if ((status = esl_sq_SetDesc (sq, desc)) != eslOK) goto ERROR; if ((status = esl_sq_SetSource (sq, msa->name)) != eslOK) goto ERROR; if ((status = esl_sq_GrowTo (sq, msa->alen)) != eslOK) goto ERROR; /* can't be more than alen residues */ if (! (msa->flags & eslMSA_DIGITAL)) /* text mode to text mode */ { strcpy(sq->seq, msa->aseq[which]); if (ss != NULL) { if (sq->ss == NULL) esl_strdup(ss, -1, &(sq->ss)); else strcpy(sq->ss, ss); esl_strdealign(sq->ss, sq->seq, gapchars, NULL); } for (x = 0; x < sq->nxr; x ++) { esl_strdup(xr[x], -1, &(sq->xr[x])); esl_strdup(xr_tag[x], -1, &(sq->xr_tag[x])); esl_strdealign(sq->xr[x], sq->seq, gapchars, NULL); } esl_strdealign(sq->seq, sq->seq, gapchars, &(sq->n)); /* sq->n gets set as side effect */ } #ifdef eslAUGMENT_ALPHABET else { esl_abc_dsqcpy(msa->ax[which], msa->alen, sq->dsq); if (ss != NULL) { if (sq->ss == NULL) { /* even in digital mode, msa->ss is [0.alen-1] */ ESL_ALLOC(sq->ss, sizeof(char) * (strlen(ss)+2)); sq->ss[0] = '\0'; strcpy(sq->ss+1, ss); } else { strcpy(sq->ss+1, ss); sq->ss[0] = '\0'; } esl_abc_CDealign(sq->abc, sq->ss+1, sq->dsq, NULL); } for (x = 0; x < sq->nxr; x ++) { /* even in digital mode, msa->gr are [0.alen-1] */ ESL_ALLOC(sq->xr[x], sizeof(char) * (strlen(xr[x])+2)); sq->xr[x][0] = '\0'; strcpy(sq->xr[x]+1, xr[x]); esl_abc_CDealign(sq->abc, sq->xr[x]+1, sq->dsq, NULL); esl_strdup(xr_tag[x], -1, &(sq->xr_tag[x])); } esl_abc_XDealign(sq->abc, sq->dsq, sq->dsq, &(sq->n)); /* sq->n gets set as side effect */ } #endif /*eslAUGMENT_ALPHABET*/ /* This is a complete sequence; set bookkeeping accordingly */ sq->start = 1; sq->end = sq->n; sq->C = 0; sq->W = sq->n; sq->L = sq->n; sq->roff = -1; sq->doff = -1; sq->hoff = -1; sq->eoff = -1; if (msa->ngr > 0) { free(xr_tag); free(xr); } return eslOK; ERROR: if (msa->ngr > 0) { if (xr_tag != NULL) free(xr_tag); if (xr != NULL) free(xr); } return status; } /* Function: esl_sq_FetchFromMSA() * Synopsis: Fetch a single sequence from an MSA. * Incept: SRE, Sun Mar 30 13:39:06 2008 [Janelia] * * Purpose: Retrieve sequence number (<0..msa->nseq-1>) from , in a newly * allocated sequence object; return a pointer to this object * in . * * The retrieved sequence is in the same mode as the source * , text versus digital. * * The retrieved sequence is dealigned. For a text mode * sequence, gap characters to be removed are assumed to be * <-_.~>. For a digital mode sequence, gap characters are * defined by the digital alphabet. * * Returns: on success, and a pointer to the newly fetched * sequence is in <*ret_sq>, which caller is responsible for freeing. * * Returns if there is no sequence number . * * Throws: on allocation error. */ int esl_sq_FetchFromMSA(const ESL_MSA *msa, int which, ESL_SQ **ret_sq) { ESL_SQ *sq = NULL; char *acc = NULL; char *desc = NULL; char *ss = NULL; char *gapchars = "-_.~"; /* hardcoded for now; only affects text mode, not digital */ char **xr_tag = NULL; /* extra residue markup tags */ char **xr = NULL; /* extra residue markup */ int nxr = 0; /* number of extra residue markups */ int x; /* index for optional extra residue markups */ int status; if (which >= msa->nseq || which < 0) return eslEOD; /* watch out for optional msa annotations being totally NULL */ if (msa->sqacc != NULL) acc = msa->sqacc[which]; if (msa->sqdesc != NULL) desc = msa->sqdesc[which]; if (msa->ss != NULL) ss = msa->ss[which]; /* a markup for unparsed #=GR lines is converted to a sequence extra residue markup */ if (msa->ngr > 0) { ESL_ALLOC(xr_tag, sizeof(char *) * msa->ngr); ESL_ALLOC(xr, sizeof(char *) * msa->ngr); for (x = 0; x < msa->ngr; x ++) { xr_tag[x] = NULL; xr[x] = NULL; if (msa->gr[x][which] != NULL) { xr[nxr] = msa->gr[x][which]; if (msa->gr_tag[x] != NULL) xr_tag[nxr] = msa->gr_tag[x]; else goto ERROR; nxr ++; } } } if (! (msa->flags & eslMSA_DIGITAL)) /* text mode MSA to text mode sequence */ { if ((sq = esl_sq_CreateFrom(msa->sqname[which], msa->aseq[which], desc, acc, ss)) == NULL) goto ERROR; if (sq->ss != NULL) esl_strdealign(sq->ss, sq->seq, gapchars, NULL); if (nxr > 0) { sq->nxr = nxr; ESL_ALLOC(sq->xr_tag, sizeof(char *) * sq->nxr); for (x = 0; x < sq->nxr; x ++) sq->xr_tag[x] = NULL; ESL_ALLOC(sq->xr, sizeof(char *) * sq->nxr); for (x = 0; x < sq->nxr; x ++) sq->xr[x] = NULL; for (x = 0; x < sq->nxr; x ++) { if (xr[x] != NULL) { if (sq->xr[x] == NULL) esl_strdup(xr[x], sq->n, &(sq->xr[x])); else strcpy(sq->xr[x], xr[x]); esl_strdealign(sq->xr[x], sq->seq, gapchars, NULL); } if (xr_tag[x] != NULL) { if (sq->xr_tag[x] == NULL) esl_strdup(xr_tag[x], -1, &(sq->xr_tag[x])); else strcpy(sq->xr_tag[x], xr_tag[x]); } } } esl_strdealign(sq->seq, sq->seq, gapchars, &(sq->n)); } #ifdef eslAUGMENT_ALPHABET else /* digital mode MSA to digital mode sequence */ { if ((sq = esl_sq_CreateDigitalFrom(msa->abc, msa->sqname[which], msa->ax[which], msa->alen, desc, acc, ss)) == NULL) goto ERROR; if (sq->ss != NULL) esl_abc_CDealign(sq->abc, sq->ss+1, sq->dsq, NULL); if (nxr > 0) { sq->nxr = nxr; ESL_ALLOC(sq->xr_tag, sizeof(char *) * sq->nxr); for (x = 0; x < sq->nxr; x ++) sq->xr_tag[x] = NULL; ESL_ALLOC(sq->xr, sizeof(char *) * sq->nxr); for (x = 0; x < sq->nxr; x ++) sq->xr[x] = NULL; for (x = 0; x < sq->nxr; x ++) { if (xr[x] != NULL) { if (sq->xr[x] == NULL) { ESL_ALLOC(sq->xr[x], sizeof(char) * (sq->n+2)); sq->xr[x][0] = '\0'; strcpy(sq->xr[x]+1, xr[x]); } else strcpy(sq->xr[x]+1, xr[x]); sq->xr[x][0] = '\0'; esl_abc_CDealign(sq->abc, sq->xr[x]+1, sq->dsq, NULL); } if (xr_tag[x] != NULL) { if (sq->xr_tag[x] == NULL) esl_strdup(xr_tag[x], -1, &(sq->xr_tag[x])); else strcpy(sq->xr_tag[x], xr_tag[x]); } } } esl_abc_XDealign(sq->abc, sq->dsq, sq->dsq, &(sq->n)); } #endif if ((status = esl_sq_SetSource(sq, msa->name)) != eslOK) goto ERROR; sq->start = 1; sq->end = sq->n; sq->L = sq->n; sq->C = 0; sq->W = sq->n; *ret_sq = sq; if (msa->ngr > 0) { free(xr_tag); free(xr); } return eslOK; ERROR: if (msa->ngr > 0) { if (xr_tag != NULL) free(xr_tag); if (xr != NULL) free(xr); } esl_sq_Destroy(sq); *ret_sq = NULL; return eslEMEM; } #endif /*eslAUGMENT_MSA*/ /*---------------- end, sequences from MSAs --------------------*/ /***************************************************************** * 5. Internal functions *****************************************************************/ /* Create and CreateDigital() are almost identical, so * their shared guts are here: */ static ESL_SQ * sq_create(int do_digital) { ESL_SQ *sq = NULL; int status; ESL_ALLOC(sq, sizeof(ESL_SQ)); if (sq_init(sq, do_digital) != eslOK) goto ERROR; return sq; ERROR: esl_sq_Destroy(sq); return NULL; } /* Create an object and its list of objects */ static ESL_SQ_BLOCK * sq_createblock(int count, int do_digital) { int i = 0; ESL_SQ_BLOCK *block = NULL; int status = eslOK; ESL_ALLOC(block, sizeof(ESL_SQ_BLOCK)); block->count = 0; block->first_seqidx = -1; block->list = NULL; block->complete = TRUE; ESL_ALLOC(block->list, sizeof(ESL_SQ) * count); block->listSize = count; for (i = 0; i < count; ++i) { if (sq_init(block->list + i, do_digital) != eslOK) goto ERROR; } return block; ERROR: esl_sq_DestroyBlock(block); return NULL; } /* Initialize object */ static int sq_init(ESL_SQ *sq, int do_digital) { int status; sq->name = NULL; sq->acc = NULL; sq->desc = NULL; sq->tax_id = -1; sq->seq = NULL; sq->dsq = NULL; sq->ss = NULL; /* Note that ss is optional - it will only be allocated if needed */ /* n, coord bookkeeping, and strings are all set below by a call to Reuse() */ sq->nalloc = eslSQ_NAMECHUNK; sq->aalloc = eslSQ_ACCCHUNK; sq->dalloc = eslSQ_DESCCHUNK; sq->salloc = eslSQ_SEQCHUNK; sq->srcalloc = eslSQ_NAMECHUNK; ESL_ALLOC(sq->name, sizeof(char) * sq->nalloc); ESL_ALLOC(sq->acc, sizeof(char) * sq->aalloc); ESL_ALLOC(sq->desc, sizeof(char) * sq->dalloc); ESL_ALLOC(sq->source, sizeof(char) * sq->srcalloc); if (do_digital) ESL_ALLOC(sq->dsq, sizeof(ESL_DSQ) * sq->salloc); else ESL_ALLOC(sq->seq, sizeof(char) * sq->salloc); /* optional for extra residue markups */ sq->nxr = 0; sq->xr_tag = NULL; sq->xr = NULL; esl_sq_Reuse(sq); /* initialization of sq->n, offsets, and strings */ return eslOK; ERROR: return eslEMEM; } /* CreateFrom and CreateDigitalFrom() are almost identical, so * their shared guts are here: */ static ESL_SQ * sq_create_from(const char *name, const char *desc, const char *acc) { ESL_SQ *sq = NULL; int64_t n; int status; ESL_ALLOC(sq, sizeof(ESL_SQ)); sq->name = NULL; sq->acc = NULL; sq->desc = NULL; sq->seq = NULL; sq->dsq = NULL; sq->ss = NULL; if (name != NULL) { n = strlen(name)+1; ESL_ALLOC(sq->name, sizeof(char) * n); strcpy(sq->name, name); sq->nalloc = n; } else { sq->nalloc = eslSQ_NAMECHUNK; ESL_ALLOC(sq->name, sizeof(char) * sq->nalloc); sq->name[0] = '\0'; } if (desc != NULL) { n = strlen(desc)+1; ESL_ALLOC(sq->desc, sizeof(char) * n); strcpy(sq->desc, desc); sq->dalloc = n; } else { sq->dalloc = eslSQ_DESCCHUNK; ESL_ALLOC(sq->desc, sizeof(char) * sq->dalloc); sq->desc[0] = '\0'; } if (acc != NULL) { n = strlen(acc)+1; ESL_ALLOC(sq->acc, sizeof(char) * n); strcpy(sq->acc, acc); sq->aalloc = n; } else { sq->aalloc = eslSQ_ACCCHUNK; ESL_ALLOC(sq->acc, sizeof(char) * sq->aalloc); sq->acc[0] = '\0'; } /* no source name */ sq->srcalloc = eslSQ_NAMECHUNK; ESL_ALLOC(sq->source, sizeof(char) * sq->srcalloc); sq->source[0] = '\0'; /* optional for extra residue markups */ sq->nxr = 0; sq->xr_tag = NULL; sq->xr = NULL; /* coord bookkeeping has to be set by the parent caller, * because that's where we know the seq length . We don't * know it here. */ sq->doff = -1; sq->hoff = -1; sq->roff = -1; sq->eoff = -1; return sq; ERROR: esl_sq_Destroy(sq); return NULL; } /* Free object */ static void sq_free(ESL_SQ *sq) { int x; /* index for optional extra residue markups */ if (sq->name != NULL) free(sq->name); if (sq->acc != NULL) free(sq->acc); if (sq->desc != NULL) free(sq->desc); if (sq->source != NULL) free(sq->source); if (sq->seq != NULL) free(sq->seq); if (sq->dsq != NULL) free(sq->dsq); if (sq->ss != NULL) free(sq->ss); if (sq->nxr > 0) { for (x = 0; x < sq->nxr; x++) { if (sq->xr[x] != NULL) free(sq->xr[x]); if (sq->xr_tag[x] != NULL) free(sq->xr_tag[x]); } if (sq->xr != NULL) free(sq->xr); if (sq->xr_tag != NULL) free(sq->xr_tag); } } /*----------------- end, internal functions ---------------------*/ /***************************************************************** * 5. Unit tests. *****************************************************************/ #ifdef eslSQ_TESTDRIVE #include "esl_random.h" static void utest_Create() { char *msg = "failure in utest_Create()"; char *name = "seqname"; char *acc = "XX00001"; char *desc = "test sequence description"; char *seq = "ACDEFGHIKLMNPQRSTVWY"; char *ss = "xxxx....xxxx....xxxx"; int64_t n = strlen(seq); ESL_SQ *sq1 = esl_sq_CreateFrom(name, seq, desc, acc, ss); ESL_SQ *sq2 = esl_sq_Create(); if (sq1 == NULL || sq2 == NULL) esl_fatal(msg); if (esl_sq_GrowTo(sq2, n) != eslOK) esl_fatal(msg); if (esl_sq_FormatName (sq2, "%s%s", "seq", "name") != eslOK) esl_fatal(msg); if (esl_sq_FormatAccession(sq2, "%s%05d", "XX", 1) != eslOK) esl_fatal(msg); if (esl_sq_FormatDesc (sq2, "%s %s %s", "test","sequence","description") != eslOK) esl_fatal(msg); if (esl_sq_FormatSource (sq2, "%s", "source-unknown") != eslOK) esl_fatal(msg); if (esl_strdup(ss, -1, &(sq2->ss)) != eslOK) esl_fatal(msg); strcpy(sq2->seq, seq); sq2->n = n; if (strcmp(sq1->name, sq2->name) != 0) esl_fatal(msg); if (strcmp(sq1->acc, sq2->acc) != 0) esl_fatal(msg); if (strcmp(sq1->desc, sq2->desc) != 0) esl_fatal(msg); if (strcmp(sq1->seq, sq2->seq) != 0) esl_fatal(msg); if (strcmp(sq1->ss, sq2->ss) != 0) esl_fatal(msg); if (sq1->n != sq2->n) esl_fatal(msg); esl_sq_Destroy(sq1); esl_sq_Destroy(sq2); } /* This tests the Set() functions. */ static void utest_Set(ESL_RANDOMNESS *r) { char *msg = "sqio Set unit test failure"; ESL_SQ *sq = esl_sq_Create(); int ntrials = 8; int maxn = eslSQ_NAMECHUNK*2; int maxa = eslSQ_ACCCHUNK*2; int maxd = eslSQ_DESCCHUNK*2; int n = ESL_MAX( maxn, ESL_MAX(maxa, maxd)); char *buf = malloc(sizeof(char) * (n+1)); int64_t L; int i; for (i = 0; i < ntrials; i++) { L = esl_rnd_Roll(r, maxn) + 1; memset(buf, 'x', L); buf[L] = '\0'; if (esl_sq_SetName(sq, buf) != eslOK) esl_fatal(msg); } for (i = 0; i < ntrials; i++) { L = esl_rnd_Roll(r, maxa) + 1; memset(buf, 'x', L); buf[L] = '\0'; if (esl_sq_SetAccession(sq, buf) != eslOK) esl_fatal(msg); } for (i = 0; i < ntrials; i++) { L = esl_rnd_Roll(r, maxd) + 1; memset(buf, 'x', L); buf[L] = '\0'; if (esl_sq_SetDesc(sq, buf) != eslOK) esl_fatal(msg); } free(buf); esl_sq_Destroy(sq); } /* This tests the Format() functions - * in particular, the way they use vsnprintf(). */ static void utest_Format(ESL_RANDOMNESS *r) { char *msg = "esl_sq_Format*() unit test failure"; ESL_SQ *sq = esl_sq_Create(); int ntrials = 128; int maxn = eslSQ_NAMECHUNK*2; int maxa = eslSQ_ACCCHUNK*2; int maxd = eslSQ_DESCCHUNK*2; int n = ESL_MAX( maxn, ESL_MAX(maxa, maxd)); char *buf = malloc(sizeof(char) * (n+1)); int64_t L; int i; for (i = 0; i < ntrials; i++) { L = esl_rnd_Roll(r, maxn) + 1; memset(buf, 'x', L); buf[L] = '\0'; if (esl_sq_FormatName(sq, "%s%d", buf, i) != eslOK) esl_fatal(msg); } for (i = 0; i < ntrials; i++) { L = esl_rnd_Roll(r, maxa) + 1; memset(buf, 'x', L); buf[L] = '\0'; if (esl_sq_FormatAccession(sq, "%s%d", buf, i) != eslOK) esl_fatal(msg); } for (i = 0; i < ntrials; i++) { L = esl_rnd_Roll(r, maxd) + 1; memset(buf, 'x', L); buf[L] = '\0'; if (esl_sq_FormatDesc(sq, "%s%d", buf, i) != eslOK) esl_fatal(msg); } free(buf); esl_sq_Destroy(sq); } #ifdef eslAUGMENT_ALPHABET static void utest_CreateDigital() { char *msg = "failure in utest_CreateDigital()"; ESL_ALPHABET *abc = esl_alphabet_Create(eslRNA); char *name = "seqname"; char *acc = "XX00001"; char *desc = "test sequence description"; char *seq = "GGGAAATTTCCC"; char *ss = "<<<......>>>"; ESL_DSQ *dsq = NULL; int64_t n = strlen(seq); ESL_SQ *sq1 = NULL; ESL_SQ *sq2 = NULL; ESL_SQ *sq3 = NULL; if (esl_abc_CreateDsq(abc, seq, &dsq) != eslOK) esl_fatal(msg); if ((sq1 = esl_sq_CreateDigitalFrom(abc, name, dsq, n, desc, acc, ss)) == NULL) esl_fatal(msg); if ((sq2 = esl_sq_CreateDigital(abc)) == NULL) esl_fatal(msg); if (esl_sq_GrowTo(sq2, n) != eslOK) esl_fatal(msg); if (esl_sq_FormatName (sq2, "%s%s", "seq", "name") != eslOK) esl_fatal(msg); if (esl_sq_FormatAccession(sq2, "%s%05d", "XX", 1) != eslOK) esl_fatal(msg); if (esl_sq_FormatDesc (sq2, "%s %s %s", "test","sequence","description") != eslOK) esl_fatal(msg); if (esl_sq_FormatSource (sq2, "%s", "source-unknown") != eslOK) esl_fatal(msg); if ((sq2->ss = malloc(sizeof(char) * (n+2))) == NULL) esl_fatal(msg); strcpy(sq2->ss+1, ss); sq2->ss[0] = '\0'; if (esl_abc_Digitize(abc, seq, sq2->dsq) != eslOK) esl_fatal(msg); sq2->n = n; if ((sq3 = esl_sq_Create()) == NULL) esl_fatal(msg); if (esl_sq_Copy(sq1, sq3) != eslOK) esl_fatal(msg); /* sq3 is now text mode */ if (esl_sq_Textize(sq2) != eslOK) esl_fatal(msg); /* sq2 is now text mode */ if (strcmp(sq3->name, sq2->name) != 0) esl_fatal(msg); /* sq2,sq3 should be identical text mode */ if (strcmp(sq3->acc, sq2->acc) != 0) esl_fatal(msg); if (strcmp(sq3->desc, sq2->desc) != 0) esl_fatal(msg); if (strcmp(sq3->seq, sq2->seq) != 0) esl_fatal(msg); if (strcmp(sq3->ss, sq2->ss) != 0) esl_fatal(msg); if (sq3->n != sq2->n) esl_fatal(msg); /* sq3 back to digital; should = sq1 again */ if (esl_sq_Digitize(abc, sq3) != eslOK) esl_fatal(msg); if (memcmp(sq3->dsq, sq1->dsq, sizeof(ESL_DSQ) * (sq3->n)) != 0) esl_fatal(msg); if (sq3->n != sq1->n) esl_fatal(msg); free(dsq); esl_alphabet_Destroy(abc); esl_sq_Destroy(sq1); esl_sq_Destroy(sq2); esl_sq_Destroy(sq3); } #endif /*eslAUGMENT_ALPHABET*/ /* write_msa_with_seqmarkups() * Write a good MSA with sequence markups to a tmpfile in Stockholm format. */ static void write_msa_with_seqmarkups(FILE *ofp) { fprintf(ofp, "# STOCKHOLM 1.0\n"); fprintf(ofp, "seq1 ACDE.FGHKLMNPQRSTVWY\n"); fprintf(ofp, "#=GR seq1 tWS ..<..<........>...>.\n"); fprintf(ofp, "seq2 ACDEGFGHKLMNPQRSTVWY\n"); fprintf(ofp, "seq3 ACDEGFGHKLMNPQRSTVWY\n"); fprintf(ofp, "#=GR seq3 SS ...<<..>>...........\n"); fprintf(ofp, "seq4 ACDE.FGHKLMNPQRSTVWY\n"); fprintf(ofp, "seq5 ACDEGFGHKLMNPQRSTVWY\n"); fprintf(ofp, "seq6 ACDE.FGHKLMNPQRSTVWY\n"); fprintf(ofp, "#=GR seq6 SS ........<<<..>>>....\n"); fprintf(ofp, "#=GR seq6 tWH .<...A...>....a.....\n"); fprintf(ofp, "#=GR seq6 csS .<.................>\n"); fprintf(ofp, "//\n"); return; } /* test optional extra residue markups in a sq */ #include "esl_msafile.h" #include "esl_msafile_stockholm.h" static void utest_ExtraResMarkups() { char msg[] = "sq extra residue markups test driver failed"; char tmpfile[32]; FILE *ofp = NULL; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp1 = NULL; ESLX_MSAFILE *afp2 = NULL; ESL_MSA *msa1 = NULL; ESL_MSA *msa2 = NULL; ESL_SQ *sq = NULL; ESL_SQ *sq1 = NULL; ESL_SQ *sq2 = NULL; strcpy(tmpfile, "esltmpXXXXXX"); if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg); write_msa_with_seqmarkups(ofp); fclose(ofp); /* Digital msa to digital sq */ eslx_msafile_Open(&abc, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp1); esl_msafile_stockholm_Read(afp1, &msa1); sq = esl_sq_CreateDigital(abc); if (esl_sq_GetFromMSA(msa1, 0, sq) != eslOK) esl_fatal(msg); esl_sq_Reuse(sq); if (esl_sq_GetFromMSA(msa1, 1, sq) != eslOK) esl_fatal(msg); esl_sq_Reuse(sq); if (esl_sq_GetFromMSA(msa1, 2, sq) != eslOK) esl_fatal(msg); esl_sq_Reuse(sq); if (esl_sq_GetFromMSA(msa1, 5, sq) != eslOK) esl_fatal(msg); /* test of sq_Copy */ sq1 = esl_sq_Create(); sq2 = esl_sq_CreateDigital(abc); esl_sq_Copy(sq, sq1); esl_sq_Copy(sq, sq2); esl_sq_Destroy(sq1); esl_sq_Destroy(sq2); esl_sq_Destroy(sq); if (esl_sq_FetchFromMSA(msa1, 0, &sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq); if (esl_sq_FetchFromMSA(msa1, 1, &sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq); if (esl_sq_FetchFromMSA(msa1, 2, &sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq); if (esl_sq_FetchFromMSA(msa1, 5, &sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq); /* Text msa to text sq */ eslx_msafile_Open(NULL, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2); esl_msafile_stockholm_Read(afp2, &msa2); sq = esl_sq_Create(); if (esl_sq_GetFromMSA(msa2, 0, sq) != eslOK) esl_fatal(msg); esl_sq_Reuse(sq); if (esl_sq_GetFromMSA(msa2, 1, sq) != eslOK) esl_fatal(msg); esl_sq_Reuse(sq); if (esl_sq_GetFromMSA(msa2, 2, sq) != eslOK) esl_fatal(msg); esl_sq_Reuse(sq); if (esl_sq_GetFromMSA(msa2, 5, sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq); if (esl_sq_FetchFromMSA(msa2, 0, &sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq); if (esl_sq_FetchFromMSA(msa2, 1, &sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq); if (esl_sq_FetchFromMSA(msa2, 2, &sq) != eslOK) esl_fatal(msg); esl_sq_Destroy(sq); if (esl_sq_FetchFromMSA(msa2, 5, &sq) != eslOK) esl_fatal(msg); /* test of sq_Copy */ sq1 = esl_sq_Create(); sq2 = esl_sq_CreateDigital(abc); esl_sq_Copy(sq, sq1); esl_sq_Copy(sq, sq2); esl_sq_Destroy(sq1); esl_sq_Destroy(sq2); esl_sq_Destroy(sq); /* clean up */ remove(tmpfile); eslx_msafile_Close(afp1); eslx_msafile_Close(afp2); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_alphabet_Destroy(abc); } /* test counting residues in a sq */ static void utest_CountResidues() { char *msg = "failure in utest_CountResidues()"; char *name = "seqname"; char *acc = "XX00001"; char *desc = "test sequence description"; char *seq = "GGGAATTCCC"; char *ss = "xxxx...xxx"; ESL_SQ *sq = NULL; float *cnts = NULL; int status; ESL_ALPHABET *abc = esl_alphabet_Create(eslDNA); ESL_ALLOC(cnts, abc->Kp * sizeof(float)); if ((sq = esl_sq_CreateFrom(name, seq, desc, acc, ss)) == NULL) esl_fatal(msg); sq->abc = abc; esl_vec_FSet (cnts, abc->K, 0); esl_sq_CountResidues(sq, 0, sq->n, cnts); if (cnts[0] != 2) esl_fatal(msg); if (cnts[1] != 3) esl_fatal(msg); if (cnts[2] != 3) esl_fatal(msg); if (cnts[3] != 2) esl_fatal(msg); #ifdef eslAUGMENT_ALPHABET esl_sq_Digitize(abc, sq); esl_vec_FSet (cnts, abc->K, 0); esl_sq_CountResidues(sq, 1, sq->n, cnts); if (cnts[0] != 2) esl_fatal(msg); if (cnts[1] != 3) esl_fatal(msg); if (cnts[2] != 3) esl_fatal(msg); if (cnts[3] != 2) esl_fatal(msg); #endif free(cnts); esl_sq_Destroy(sq); esl_alphabet_Destroy(abc); return; ERROR: if (cnts != NULL) free(cnts); if (sq != NULL) esl_sq_Destroy(sq); if (abc != NULL) esl_alphabet_Destroy(abc); esl_fatal(msg); return; } #endif /* eslSQ_TESTDRIVE*/ /*--------------------- end, unit tests -------------------------*/ /***************************************************************** * 6. Test driver. *****************************************************************/ #ifdef eslSQ_TESTDRIVE /* gcc -g -Wall -o esl_sq_utest -I. -L. -DeslSQ_TESTDRIVE esl_sq.c -leasel -lm * ./esl_sq_utest */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_stockholm.h" #include "esl_random.h" #include "esl_sq.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for sq module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_Create(esl_opt_GetInteger(go, "-s")); utest_Create(); utest_Set(r); utest_Format(r); utest_CountResidues(); #ifdef eslAUGMENT_ALPHABET utest_CreateDigital(); #endif utest_ExtraResMarkups(); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /* eslSQ_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 7. Examples. *****************************************************************/ #ifdef eslSQ_EXAMPLE /*::cexcerpt::sq_example::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslSQ_EXAMPLE esl_sq.c easel.c * run: ./example */ #include #include #include "easel.h" #include "esl_sq.h" int main(void) { ESL_SQ *sq1, *sq2; char *name = "seq1"; char *acc = "XX00001"; char *desc = "This is a test."; char *testseq = "GGGAAATTTCCC"; char *ss = "<<<......>>>"; int n = strlen(testseq); /* Creating an ESL_SQ from text info: */ sq1 = esl_sq_CreateFrom(name, testseq, desc, acc, ss); /* desc, acc, or ss may be NULL */ /* Building up a ESL_SQ yourself: */ sq2 = esl_sq_Create(); esl_sq_FormatName (sq2, "seq%d", 1); esl_sq_FormatAccession(sq2, "XX%05d", 1); esl_sq_FormatDesc (sq2, "This %s a test", "is"); esl_sq_GrowTo (sq2, n); strcpy(sq2->seq, testseq); esl_strdup(ss, -1, &(sq2->ss)); sq2->n = n; /* Accessing the information */ printf("Name: %s\n", sq2->name); printf("Accession: %s\n", sq2->acc); printf("Description: %s\n", sq2->desc); printf("Sequence: %s\n", sq2->seq); printf("Structure: %s\n", sq2->ss); printf("Residue 3: %c\n", sq2->seq[2]); /* note 0..n-1 coords */ printf("Structure 3: %c\n", sq2->ss[2]); /* same for ss */ /* Freeing the structures */ esl_sq_Destroy(sq1); esl_sq_Destroy(sq2); return 0; } /*::cexcerpt::sq_example::end::*/ #endif /*eslSQ_EXAMPLE*/ #ifdef eslSQ_EXAMPLE2 /*::cexcerpt::sq_example2::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslSQ_EXAMPLE2\ -DeslAUGMENT_ALPHABET esl_sq.c esl_alphabet.c easel.c * run: ./example */ #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_sq.h" int main(void) { ESL_ALPHABET *abc; ESL_SQ *sq1, *sq2; char *name = "seq1"; char *acc = "XX00001"; char *desc = "This is a test."; char *testseq = "GGGAAATTTCCC"; ESL_DSQ *dsq = NULL; char *ss = "<<<......>>>"; int n = strlen(testseq); int i; /* Creating a digital alphabet: */ abc = esl_alphabet_Create(eslRNA); /* Creating a digital ESL_SQ from text info: */ esl_abc_CreateDsq(abc, testseq, &dsq); sq1 = esl_sq_CreateDigitalFrom(abc, name, dsq, n, desc, acc, ss); free(dsq); /* Building up a digital ESL_SQ yourself: */ sq2 = esl_sq_CreateDigital(abc); esl_sq_FormatName (sq2, "seq%d", 1); esl_sq_FormatAccession(sq2, "XX%05d", 1); esl_sq_FormatDesc (sq2, "This %s a test", "is"); esl_sq_GrowTo (sq2, n); esl_abc_Digitize(abc, testseq, sq2->dsq); sq2->n = n; /* a "digital" ss isn't so pretty, but just so you know: */ sq2->ss = malloc(sizeof(char) * (n+2)); sq2->ss[0] = '\0'; strcpy(sq2->ss+1, ss); /* Accessing the information */ printf("Name: %s\n", sq2->name); printf("Accession: %s\n", sq2->acc); printf("Description: %s\n", sq2->desc); printf("Sequence: "); for (i = 1; i <= n; i++) putchar(abc->sym[sq2->dsq[i]]); putchar('\n'); printf("Structure: %s\n", sq2->ss+1); /* +1, ss is 1..n like dsq */ printf("Residue 3: %c\n", abc->sym[sq2->dsq[3]]); printf("Structure 3: %c\n", sq2->ss[3]); /* note 1..n coord system */ /* Freeing the structures */ esl_sq_Destroy(sq1); esl_sq_Destroy(sq2); return 0; } /*::cexcerpt::sq_example2::end::*/ #endif /*eslSQ_EXAMPLE2*/ /*------------------ end, example drivers ------------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_sq.c 884 2013-09-20 13:42:01Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_sq.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_histogram.h0000664361611702660230000001356012473612606016401 0ustar wheelerteddy/* Collection and display of score histograms. * * SRE, Fri Jul 1 13:22:45 2005 [St. Louis] * SVN $Id: esl_histogram.h 727 2011-10-24 17:17:32Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_histogram.h $ */ #ifndef eslHISTOGRAM_INCLUDED #define eslHISTOGRAM_INCLUDED #include /* floor() is in one of the macros */ /* Structure: ESL_HISTOGRAM * * Keeps a score histogram, in which scores are counted into bins of * size (width) w. * histogram starts at bmin < floor(xmin/w) * w * histogram ends at bmax >= ceil(xmax/w)*w * nb = (bmax-bmin)/w * each score x is counted into bin b = nb - (int) (bmax-x)/w * each bin b contains scores bw+bmin < x <= (b+1)w + bmin * * Anything having to do with the counts themselves (obs, n, etc) * is a uint64_t, with range 0..2^64-1 (up to 2e19). */ typedef struct { /* The histogram is kept as counts in fixed-width bins. */ uint64_t *obs; /* observed counts in bin b, 0..nb-1 (dynamic) */ int nb; /* number of bins */ double w; /* fixed width of each bin */ double bmin, bmax; /* histogram bounds: all x satisfy bmin < x <= bmax */ int imin, imax; /* smallest, largest bin that contain obs[i] > 0 */ /* Optionally, in a "full" h, we can also keep all the raw samples in x. */ double xmin, xmax; /* smallest, largest sample value x observed */ uint64_t n; /* total number of raw data samples */ double *x; /* optional: raw sample values x[0..n-1] */ uint64_t nalloc; /* current allocated size of x */ /* The binned data might be censored (either truly, or virtually). * This information has to be made available to a binned/censored * parameter fitting function, and to goodness-of-fit tests. */ double phi; /* censoring value; all x_i > phi */ int cmin; /* smallest bin index that contains uncensored data */ uint64_t z; /* # of censored values <= phi */ uint64_t Nc; /* # samples in complete data (including unobs) */ uint64_t No; /* # of samples in observed data */ /* Expected binned counts are set by SetExpect() or SetExpectedTail(). */ double *expect; /* expected counts in bin b, 0..nb-1 (not resized) */ int emin; /* smallest bin index that contains expected counts */ double tailbase; /* for tail fits: fitted x > tailbase */ double tailmass; /* for tail fits: fractional prob in the tail */ /* Some status flags */ int is_full; /* TRUE when we're keeping raw data in x */ int is_done; /* TRUE if we prevent more Add()'s */ int is_sorted; /* TRUE if x is sorted smallest-to-largest */ int is_tailfit; /* TRUE if expected dist only describes tail */ int is_rounded; /* TRUE if values aren't more accurate than bins */ enum { COMPLETE, VIRTUAL_CENSORED, TRUE_CENSORED } dataset_is; } ESL_HISTOGRAM; #define esl_histogram_Bin2LBound(h,b) ((h)->w*(b) + (h)->bmin) #define esl_histogram_Bin2UBound(h,b) ((h)->w*((b)+1) + (h)->bmin) /* Creating/destroying histograms and collecting data: */ extern ESL_HISTOGRAM *esl_histogram_Create (double bmin, double bmax, double w); extern ESL_HISTOGRAM *esl_histogram_CreateFull(double bmin, double bmax, double w); extern void esl_histogram_Destroy (ESL_HISTOGRAM *h); extern int esl_histogram_Score2Bin(ESL_HISTOGRAM *h, double x, int *ret_b); extern int esl_histogram_Add (ESL_HISTOGRAM *h, double x); /* Declarations about the binned data before parameter fitting: */ extern int esl_histogram_DeclareCensoring(ESL_HISTOGRAM *h, int z, double phi); extern int esl_histogram_DeclareRounding (ESL_HISTOGRAM *h); extern int esl_histogram_SetTail (ESL_HISTOGRAM *h, double phi, double *ret_newmass); extern int esl_histogram_SetTailByMass (ESL_HISTOGRAM *h, double pmass, double *ret_newmass); /* Accessing data samples in a full histogram: */ extern int esl_histogram_GetRank(ESL_HISTOGRAM *h, int rank, double *ret_x); extern int esl_histogram_GetData(ESL_HISTOGRAM *h, double **ret_x, int *ret_n); extern int esl_histogram_GetTail(ESL_HISTOGRAM *h, double phi, double **ret_x, int *ret_n, int *ret_z); extern int esl_histogram_GetTailByMass(ESL_HISTOGRAM *h, double pmass, double **ret_x, int *ret_n, int *ret_z); /* Setting expected binned counts: */ extern int esl_histogram_SetExpect(ESL_HISTOGRAM *h, double (*cdf)(double x, void *params), void *params); extern int esl_histogram_SetExpectedTail(ESL_HISTOGRAM *h, double base_val, double pmass, double (*cdf)(double x, void *params), void *params); /* Output/display of binned data: */ extern int esl_histogram_Write (FILE *fp, ESL_HISTOGRAM *h); extern int esl_histogram_Plot (FILE *fp, ESL_HISTOGRAM *h); extern int esl_histogram_PlotSurvival(FILE *fp, ESL_HISTOGRAM *h); extern int esl_histogram_PlotQQ (FILE *fp, ESL_HISTOGRAM *h, double (*invcdf)(double, void *), void *params); /* Goodness of fit testing */ extern int esl_histogram_Goodness(ESL_HISTOGRAM *h, int nfitted, int *ret_nbins, double *ret_G, double *ret_Gp, double *ret_X2, double *ret_X2p); #endif /*eslHISTOGRAM_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_msafile_stockholm.h0000664361611702660230000000222212473612607020101 0ustar wheelerteddy/* I/O of multiple alignment files in Stockholm/Pfam format */ #ifndef eslMSAFILE_STOCKHOLM_INCLUDED #define eslMSAFILE_STOCKHOLM_INCLUDED extern int esl_msafile_stockholm_SetInmap (ESLX_MSAFILE *afp); extern int esl_msafile_stockholm_GuessAlphabet(ESLX_MSAFILE *afp, int *ret_type); extern int esl_msafile_stockholm_Read (ESLX_MSAFILE *afp, ESL_MSA **ret_msa); extern int esl_msafile_stockholm_Write (FILE *fp, const ESL_MSA *msa, int fmt); #endif /*eslMSAFILE_STOCKHOLM_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msafile_stockholm.h 708 2011-07-20 12:49:10Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msafile_stockholm.h $ *****************************************************************/ hmmer-3.1b2/easel/esl_msafile_psiblast.h0000664361611702660230000000225712473612607017727 0ustar wheelerteddy/* I/O of multiple sequence alignments in PSI-BLAST format */ #ifndef eslMSAFILE_PSIBLAST_INCLUDED #define eslMSAFILE_PSIBLAST_INCLUDED #include "esl_msa.h" #include "esl_msafile.h" extern int esl_msafile_psiblast_SetInmap (ESLX_MSAFILE *afp); extern int esl_msafile_psiblast_GuessAlphabet(ESLX_MSAFILE *afp, int *ret_type); extern int esl_msafile_psiblast_Read (ESLX_MSAFILE *afp, ESL_MSA **ret_msa); extern int esl_msafile_psiblast_Write (FILE *fp, const ESL_MSA *msa); #endif /* eslMSAFILE_PSIBLAST_INCLUDED */ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msafile_psiblast.h 708 2011-07-20 12:49:10Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msafile_psiblast.h $ *****************************************************************/ hmmer-3.1b2/easel/esl_threads.c0000664361611702660230000003202112473612610016015 0ustar wheelerteddy/* Simple master/worker data parallelization using POSIX threads. * * Contents: * 1. The object: a gang of workers. * 2. Determining thread number to use. * 3. Examples. * 4. Copyright and license. */ #include "esl_config.h" #ifdef HAVE_PTHREAD #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_PARAM_H /* On OpenBSD, sys/sysctl.h requires sys/param.h */ #include #endif #ifdef HAVE_SYS_SYSCTL_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #include "easel.h" #include "esl_threads.h" /***************************************************************** *# 1. The object: a gang of workers. *****************************************************************/ /* Function: esl_threads_Create() * Synopsis: Create a threads object. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Creates an object, for organizing 8 a bunch of worker threads that will all run * the worker function . This object is a shell * for now; the worker threads themselves are * created individually with . * * Returns: ptr to the new object. * * Throws: on allocation or initialization failure. */ ESL_THREADS * esl_threads_Create(void (*fnptr)(void *)) { ESL_THREADS *obj = NULL; int status; ESL_ALLOC(obj, sizeof(ESL_THREADS)); obj->threadCount = 0; obj->threadId = NULL; obj->data = NULL; obj->startThread = 0; obj->func = fnptr; if (pthread_mutex_init(&obj->startMutex, NULL) != 0) ESL_XEXCEPTION(eslESYS, "mutex init failed"); if (pthread_cond_init (&obj->startCond, NULL) != 0) ESL_XEXCEPTION(eslESYS, "cond init failed"); return obj; ERROR: return NULL; } /* Function: esl_threads_Destroy() * Synopsis: Destroys an object. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Frees an object. * * The caller routine must first free the * contents of each data[]>. * * Returns: void */ void esl_threads_Destroy(ESL_THREADS *obj) { if (obj == NULL) return; if (obj->threadId != NULL) free(obj->threadId); if (obj->data != NULL) free(obj->data); pthread_mutex_destroy(&obj->startMutex); pthread_cond_destroy (&obj->startCond); free(obj); return; } /* Function: esl_threads_AddThread() * Synopsis: Add a worker thread to the object. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Create a new worker thread for the object, * assigning it the work unit pointed to by . * * The caller remains responsible for any memory allocated * to ; the object will only manage * a copy of a pointer to . * * Returns: on success. * * Throws: on allocation failure. * if thread creation fails. * if something's wrong with the . */ int esl_threads_AddThread(ESL_THREADS *obj, void *data) { int status; void *p; if (obj == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid thread object"); /* allocate inside the ESL_THREADS object to hold another worker */ ESL_RALLOC(obj->threadId, p, sizeof(pthread_t) * (obj->threadCount+1)); ESL_RALLOC(obj->data, p, sizeof(void *) * (obj->threadCount+1)); obj->data[obj->threadCount] = data; if (pthread_create(&(obj->threadId[obj->threadCount]), NULL, (void *(*)(void *)) obj->func, obj) != 0) ESL_EXCEPTION(eslESYS, "thread creation failed"); obj->threadCount++; return eslOK; ERROR: return status; } /* Function: esl_threads_GetWorkerCount() * Synopsis: Return the total number of worker threads. * Incept: SRE, Fri Aug 21 13:22:52 2009 [Janelia] * * Purpose: Returns the total number of worker threads. */ int esl_threads_GetWorkerCount(ESL_THREADS *obj) { return obj->threadCount; } /* Function: esl_threads_WaitForStart() * Synopsis: Blocks master until all workers have started. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Make the master thread wait until all the worker threads have * started. When all the worker threads have started and * are blocking at the start mutex, release them. * * Returns: on success. * * Throws: if thread synchronization fails somewhere. * if something is awry with . */ int esl_threads_WaitForStart(ESL_THREADS *obj) { if (obj == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid thread object"); if (pthread_mutex_lock (&obj->startMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex lock failed"); /* wait for all worker threads to start */ while (obj->startThread < obj->threadCount) { if (pthread_cond_wait(&obj->startCond, &obj->startMutex) != 0) ESL_EXCEPTION(eslESYS, "wait cond failed"); } /* release all the worker threads */ obj->startThread = 0; if (pthread_cond_broadcast(&obj->startCond) != 0) ESL_EXCEPTION(eslESYS, "cond broadcast failed"); if (pthread_mutex_unlock (&obj->startMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed"); return eslOK; } /* Function: esl_threads_WaitForFinish() * Synopsis: Blocks master until all workers have completed. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Block the master thread until all the worker threads have * completed. As each worker completes, remove it from the * . * * Upon exit, the is returned to the same (empty) * state it was in after it was created. It may be reused * for a new problem by adding new workers. * * Returns: on success. * * Throws: if thread synchronization fails somewhere. * if something is awry with . */ int esl_threads_WaitForFinish(ESL_THREADS *obj) { int w; if (obj == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid thread object"); /* wait for all worker threads to complete */ for (w = obj->threadCount-1; w >= 0; w--) { if (pthread_join(obj->threadId[w], NULL) != 0) ESL_EXCEPTION(eslESYS, "pthread join failed"); obj->threadCount--; } return eslOK; } /* Function: esl_threads_Started() * Synopsis: Blocks worker until master gives the start signal. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Block a worker thread until master sees that all workers * have started and gives the start signal. Assign the worker * a unique number (0..nworkers-1), and return it in * <*ret_workeridx>. The worker uses this index to * retrieve its work units. * * Returns: on success. * * Throws: if thread synchronization fails somewhere. * if something is awry with . */ int esl_threads_Started(ESL_THREADS *obj, int *ret_workeridx) { int w; pthread_t threadId; int status; if (obj == NULL) ESL_XEXCEPTION(eslEINVAL, "Invalid thread object"); if (pthread_mutex_lock (&obj->startMutex) != 0) ESL_XEXCEPTION(eslESYS, "mutex lock failed"); /* signal that we're started */ obj->startThread++; if (pthread_cond_broadcast (&obj->startCond) != 0) ESL_XEXCEPTION(eslESYS, "cond broadcast failed"); /* wait for the master's signal to start the calculations */ while (obj->startThread) { if (pthread_cond_wait(&obj->startCond, &obj->startMutex) != 0) ESL_XEXCEPTION(eslESYS, "cond wait failed"); } if (pthread_mutex_unlock (&obj->startMutex) != 0) ESL_XEXCEPTION(eslESYS, "mutex unlock failed"); /* Figure out the worker's index */ threadId = pthread_self(); for (w = 0; w < obj->threadCount; w++) if (pthread_equal(threadId, obj->threadId[w])) break; if (w == obj->threadCount) ESL_XEXCEPTION(eslESYS, "thread not registered"); *ret_workeridx = w; return eslOK; ERROR: *ret_workeridx = 0; return status; } /* Function: esl_threads_GetData() * Synopsis: Return the data associated with this thread. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Return the data pointer associated with the worker thread * . The data pointer was set by the * function. * * Returns: void * */ void * esl_threads_GetData(ESL_THREADS *obj, int workeridx) { return obj->data[workeridx]; } /* Function: esl_threads_Finished() * Synopsis: Terminate the thread. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Terminate a worker thread. * This is currently a no-op, serving as * a placeholder in case we eventually need * any cleanup. * * Returns: on success. */ int esl_threads_Finished(ESL_THREADS *obj, int workeridx) { return eslOK; } /***************************************************************** * 2. Determining thread number to use *****************************************************************/ /* Function: esl_threads_CPUCount() * Synopsis: Figure out how many cpus the machine has. * Incept: SRE, Wed Aug 19 11:31:24 2009 [Janelia] * * Purpose: Determine the number of logical processors on this * machine; return that number in <*ret_ncpu>. * * The number of available processors is found by * , * , or a call, * depending on the host system. This determined number of * available processors will be the number of logical * processors, not physical processors. On systems with * hyperthreading, the number of logical processors is more * than the number of physical cpus. It may or may not be a * good thing to spawn more threads than physical * processors. * * Args: ret_ncpu - RETURN: number of logical CPUs * * Returns: on success. * * Throws: (no abnormal error conditions) * * Xref: J5/68 */ int esl_threads_CPUCount(int *ret_ncpu) { int ncpu = 1; #if defined (HAVE_SYSCONF) && defined (_SC_NPROCESSORS_ONLN) /* Many systems (including Linux) */ ncpu = sysconf(_SC_NPROCESSORS_ONLN); #elif defined (HAVE_SYSCONF) && defined (_SC_NPROC_ONLN) /* Silicon Graphics IRIX */ ncpu = sysconf(_SC_NPROC_ONLN); #elif defined (HAVE_SYSCTL) /* BSD systems including OS/X */ int mib[2] = {CTL_HW, HW_NCPU}; size_t len = sizeof(int); int status; status = sysctl(mib, 2, &ncpu, &len, NULL, (size_t) NULL); if (status < 0 || len != sizeof(int)) ncpu = 1; #endif if (ncpu < 1) ncpu = 1; *ret_ncpu = ncpu; return eslOK; } /***************************************************************** * 3. Example *****************************************************************/ #ifdef eslTHREADS_EXAMPLE #include "easel.h" #include "esl_threads.h" /* gcc --std=gnu99 -g -Wall -pthread -o esl_threads_example -I. -DeslTHREADS_EXAMPLE esl_threads.c easel.c */ static void worker_thread(void *data) { ESL_THREADS *thr = (ESL_THREADS *) data; char *s = NULL; int w; esl_threads_Started(thr, &w); s = (char *) esl_threads_GetData(thr, w); printf("worker thread %d receives: %s\n", w, s); esl_threads_Finished(thr, w); return; } int main(void) { ESL_THREADS *thr = NULL; int ncpu = 8; int i; char **work = NULL; work = malloc(sizeof(char *) * ncpu); for (i = 0; i < ncpu; i++) esl_sprintf(&(work[i]), "work packet %d", i); thr = esl_threads_Create(&worker_thread); for (i = 0; i < ncpu; i++) esl_threads_AddThread(thr, (void *) work[i]); esl_threads_WaitForStart (thr); /* The worker threads now run their work. */ esl_threads_WaitForFinish(thr); esl_threads_Destroy(thr); for (i = 0; i < ncpu; i++) free(work[i]); free(work); return eslOK; } #endif /*eslTHREADS_EXAMPLE*/ #ifdef eslTHREADS_EXAMPLE2 #include "easel.h" #include "esl_threads.h" /* gcc --std=gnu99 -g -Wall -pthread -o esl_threads_example2 -I. -DeslTHREADS_EXAMPLE2 esl_threads.c easel.c */ int main(void) { int ncpu; esl_threads_CPUCount(&ncpu); printf("Processors: %d\n", ncpu); return eslOK; } #endif /*eslTHREADS_EXAMPLE2*/ #endif /*HAVE_PTHREAD*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_threads.c 829 2012-12-05 14:18:45Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_threads.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_vmx.c0000664361611702660230000005223412473612610015205 0ustar wheelerteddy/* Vectorized routines for PowerPC, using Altivec/VMX. * * Table of contents * 1. SIMD logf(), expf() * 2. Miscellaneous convenience functions. * 3. Benchmark * 4. Unit tests * 5. Test driver * 6. Example * 7. Copyright and license * ***************************************************************** * Credits: * * The logf() and expf() routines are derivatives of routines by * Julien Pommier [http://gruntthepeon.free.fr/ssemath/]. Those * routines were in turn based on serial implementations in the Cephes * math library by Stephen Moshier [Moshier89; * http://www.moshier.net/#Cephes]. Thanks and credit to both Moshier * and Pommier for their clear code. Additional copyright and license * information is appended at the end of the file. */ #include "esl_config.h" #ifdef HAVE_VMX #include #include #include #include #ifndef __APPLE_ALTIVEC__ #include #endif #include "easel.h" #include "esl_vmx.h" /***************************************************************** * 1. VMX SIMD logf(), expf() *****************************************************************/ /* As of Dec 2007, I am unaware of any plans for Intel/AMD to release * SSE intrinsics for logf(), expf(), or other special functions. * * I need them, and the code below should suffice. If you know of * better ways to compute these functions, please let me know. */ /* Function: esl_vmx_logf() * Synopsis: * * Purpose: Given a vector containing four floats, returns a * vector in which each element . * * Valid in the domain $x_z > 0$ for normalized IEEE754 * $x_z$. * * For $< 0$, including -0, returns . For $== * 0$ or subnormal , returns <-inf>. For , * returns . For , returns . For * subnormal , returns <-inf>. * * Xref: J2/71. * * Note: Derived from SSE2 implementation which was * Derived from an SSE1 implementation by Julian * Pommier. Converted to SSE2 and added handling * of IEEE754 specials. */ vector float esl_vmx_logf(vector float x) { static vector float cephesv_1 = { 7.0376836292E-2f, -1.1514610310E-1f, 1.1676998740E-1f, -1.2420140846E-1f }; static vector float cephesv_2 = { 1.4249322787E-1f, -1.6668057665E-1f, 2.0000714765E-1f, -2.4999993993E-1f }; static vector float cephesv_3 = { 3.3333331174E-1f, 0.0f, 0.0f, 0.0f }; static vector float constv = { 0.707106781186547524f, -2.12194440e-4f, 0.5f, 0.693359375f }; vector float onev = (vector float) {1.0, 1.0, 1.0, 1.0}; /* all elem = 1.0 */ vector signed int ei; vector float e; vector bool int invalid_mask, zero_mask, inf_mask; /* masks used to handle special IEEE754 inputs */ vector bool int mask; vector float origx; vector float tmp; vector float y; vector float z; vector float zerov = (vector float) vec_splat_u32(0); vector signed int infExpv = { 255, 255, 255, 255 }; /* first, split x apart: x = frexpf(x, &e); */ ei = vec_sr((vector signed int) x, ((vector unsigned int) {23, 23, 23, 23})); /* shift right 23: IEEE754 floats: ei = biased exponents */ invalid_mask = vec_cmple(x, zerov); /* mask any elem that's negative; these become NaN */ zero_mask = vec_cmpeq(ei,(vector signed int) zerov); /* mask any elem zero or subnormal; these become -inf */ inf_mask = vec_cmpeq(ei, infExpv); /* mask any elem +inf or NaN; these stay +inf or NaN */ origx = x; /* store original x, used for log(inf) = inf, log(NaN) = NaN */ x = vec_and(x, (vector float) ((vector unsigned int) {~0x7f800000, ~0x7f800000, ~0x7f800000, ~0x7f800000})); /* x now the stored 23 bits of the 24-bit significand */ x = vec_or (x, vec_splat(constv, 2)); /* sets hidden bit b[0] */ ei = vec_sub(ei, ((vector signed int) {126, 126, 126, 126})); /* -127 (ei now signed base-2 exponent); then +1 */ e = vec_ctf(ei, 0); /* now, calculate the log */ mask = vec_cmplt(x, vec_splat(constv, 0)); /* avoid conditional branches. */ tmp = vec_and(x, (vector float) mask); /* tmp contains x values < 0.707, else 0 */ x = vec_sub(x, onev); e = vec_sub(e, vec_and(onev, (vector float) mask)); x = vec_add(x, tmp); z = vec_madd(x, x, zerov); y = vec_splat(cephesv_1, 0); y = vec_madd(y, x, vec_splat(cephesv_1, 1)); y = vec_madd(y, x, vec_splat(cephesv_1, 2)); y = vec_madd(y, x, vec_splat(cephesv_1, 3)); y = vec_madd(y, x, vec_splat(cephesv_2, 0)); y = vec_madd(y, x, vec_splat(cephesv_2, 1)); y = vec_madd(y, x, vec_splat(cephesv_2, 2)); y = vec_madd(y, x, vec_splat(cephesv_2, 3)); y = vec_madd(y, x, vec_splat(cephesv_3, 0)); y = vec_madd(y, x, zerov); y = vec_madd(y, z, zerov); tmp = vec_madd(e, vec_splat(constv, 1), zerov); y = vec_add(y, tmp); tmp = vec_madd(z, vec_splat(constv, 2), zerov); y = vec_sub(y, tmp); x = vec_add(x, y); x = vec_madd(e, vec_splat(constv, 3), x); /* IEEE754 cleanup: */ x = vec_or(x, (vector float) invalid_mask); /* log(x<0, including -0) = NaN */ x = vec_sel(x, ((vector float) {-eslINFINITY, -eslINFINITY, -eslINFINITY, -eslINFINITY}), zero_mask); /* x zero or subnormal = -inf */ x = vec_sel(x, origx, inf_mask); /* log(inf)=inf; log(NaN) = NaN */ return x; } /* Function: esl_vmx_expf() * Synopsis: * * Purpose: Given a vector containing four floats, returns a * vector in which each element . * * Valid for all IEEE754 floats $x_z$. * * Xref: J2/71 * * Note: Derived from SSE2 implementation which was * Derived from an SSE1 implementation by Julian * Pommier. Converted to SSE2. */ vector float esl_vmx_expf(vector float x) { static vector float cephesv_p1 = { 1.9875691500E-4f, 1.3981999507E-3f, 8.3334519073E-3f, 4.1665795894E-2f }; static vector float cephesv_p2 = { 1.6666665459E-1f, 5.0000001201E-1f, 0.693359375f, -2.12194440E-4f }; static vector float maxlogfv = { 88.72283905206835f, 88.72283905206835f, 88.72283905206835f, 88.72283905206835f }; /* log(2^128) */ static vector float minlogfv = { -103.27892990343185f, -103.27892990343185f, -103.27892990343185f, -103.27892990343185f }; /* log(2^-149) */ vector signed int k; vector bool int minmask, maxmask; vector float tmp, fx, y, z; vector float zerov = (vector float) vec_splat_u32(0); /* handle out-of-range and special conditions */ maxmask = vec_cmpgt(x, maxlogfv); minmask = vec_cmple(x, minlogfv); /* range reduction: exp(x) = 2^k e^f = exp(f + k log 2); k = floorf(0.5 + x / log2): */ fx = vec_madd(x, ((vector float) {eslCONST_LOG2R, eslCONST_LOG2R, eslCONST_LOG2R, eslCONST_LOG2R}), zerov); fx = vec_add(fx, ((vector float) {0.5, 0.5, 0.5, 0.5})); /* floorf() with VMX: */ fx = vec_floor(fx); k = vec_cts(fx, 0); /* polynomial approx for e^f for f in range [-0.5, 0.5] */ tmp = vec_madd(fx, vec_splat(cephesv_p2, 2), zerov); z = vec_madd(fx, vec_splat(cephesv_p2, 3), zerov); x = vec_sub(x, tmp); x = vec_sub(x, z); z = vec_madd(x, x, zerov); y = vec_splat(cephesv_p1, 0); y = vec_madd(y, x, vec_splat(cephesv_p1, 1)); y = vec_madd(y, x, vec_splat(cephesv_p1, 2)); y = vec_madd(y, x, vec_splat(cephesv_p1, 3)); y = vec_madd(y, x, vec_splat(cephesv_p2, 0)); y = vec_madd(y, x, vec_splat(cephesv_p2, 1)); y = vec_madd(y, z, x); y = vec_add(y, ((vector float) {1.0, 1.0, 1.0, 1.0})); /* build 2^k by hand, by creating a IEEE754 float */ k = vec_add(k, ((vector signed int) {127, 127, 127, 127})); k = vec_sl(k, ((vector unsigned int) {23, 23, 23, 23})); fx = (vector float) k; /* put 2^k e^f together (fx = 2^k, y = e^f) and we're done */ y = vec_madd(y, fx, zerov); /* special/range cleanup */ y = vec_sel(y, ((vector float) {eslINFINITY, eslINFINITY, eslINFINITY, eslINFINITY}), maxmask); /* exp(x) = inf for x > log(2^128) */ y = vec_sel(y, zerov, minmask); /* exp(x) = 0 for x < log(2^-149) */ return y; } /***************************************************************** * 2. Miscellaneous convenience functions *****************************************************************/ void esl_vmx_dump_vecfloat(FILE *fp, vector float v) { float *p = (float *)&v; printf("[%13.8g, %13.8g, %13.8g, %13.8g]", p[0], p[1], p[2], p[3]); } /***************************************************************** * 3. Benchmark *****************************************************************/ #ifdef eslVMX_BENCHMARK /* gcc -maltivec -O3 -o vmx_benchmark -I . -L . -DeslVMX_BENCHMARK -DHAVE_VMX esl_vmx.c -leasel -lm */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_stopwatch.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-N", eslARG_INT,"10000000", NULL, NULL, NULL, NULL, NULL, "number of trials", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "benchmark driver for sse module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_STOPWATCH *w = esl_stopwatch_Create(); int N = esl_opt_GetInteger(go, "-N"); float origx = 2.0; float x = origx; vector float xv = { 2.0f, 2.0f, 2.0f, 2.0f }; int i; /* First, serial time. */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { x = logf(x); x = expf(x); } esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# serial CPU time: "); /* Vector time */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { xv = esl_vmx_logf(xv); xv = esl_vmx_expf(xv); } esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# vector CPU time: "); /* If you don't do something with x and xv, the compiler may optimize them away */ printf("%g => many scalar logf,expf cycles => %g\n", origx, N, x); printf("%g => many vector logf,expf cycles => ", origx, N); esl_vmx_dump_vecfloat(stdout, xv); printf("\n"); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*eslVMX_BENCHMARK*/ /***************************************************************** * 4. Unit tests *****************************************************************/ #ifdef eslVMX_TESTDRIVE #include "esl_getopts.h" #include "esl_random.h" /* utest_logf(): Test range/domain of logf */ static void utest_logf(ESL_GETOPTS *go) { vector float x; /* test input */ union { vector float v; float x[4]; } r; /* test output */ /* Test IEEE754 specials: * log(-inf) = NaN log(x<0) = NaN log(-0) = NaN * log(0) = -inf log(inf) = inf log(NaN) = NaN */ x = (vector float) {-eslINFINITY, -1.0, -0.0, 0.0}; r.v = esl_vmx_logf(x); if (esl_opt_GetBoolean(go, "-v")) { printf("logf"); esl_vmx_dump_vecfloat(stdout, x); printf(" ==> "); esl_vmx_dump_vecfloat(stdout, r.v); printf("\n"); } if (! isnan(r.x[0])) esl_fatal("logf(-inf) should be NaN"); if (! isnan(r.x[1])) esl_fatal("logf(-1) should be NaN"); if (! isnan(r.x[2])) esl_fatal("logf(-0) should be NaN"); if (isinf(r.x[3]) != -1) esl_fatal("logf(0) should be -inf"); x = (vector float) {eslINFINITY, eslNaN, FLT_MIN, FLT_MAX}; r.v = esl_vmx_logf(x); if (esl_opt_GetBoolean(go, "-v")) { printf("logf"); esl_vmx_dump_vecfloat(stdout, x); printf(" ==> "); esl_vmx_dump_vecfloat(stdout, r.v); printf("\n"); } if (isinf(r.x[0]) != 1) esl_fatal("logf(inf) should be inf"); if (! isnan(r.x[1])) esl_fatal("logf(NaN) should be NaN"); } /* utest_expf(): Test range/domain of expf */ static void utest_expf(ESL_GETOPTS *go) { vector float x; /* test input */ union { vector float v; float x[4]; } r; /* test output */ /* exp(-inf) = 0 exp(-0) = 1 exp(0) = 1 exp(inf) = inf exp(NaN) = NaN */ x = (vector float) {-eslINFINITY, -0.0, 0.0, eslINFINITY}; r.v = esl_vmx_expf(x); if (esl_opt_GetBoolean(go, "-v")) { printf("expf"); esl_vmx_dump_vecfloat(stdout, x); printf(" ==> "); esl_vmx_dump_vecfloat(stdout, r.v); printf("\n"); } if (r.x[0] != 0.0f) esl_fatal("expf(-inf) should be 0"); if (isinf(r.x[3]) != 1) esl_fatal("expf(inf) should be inf"); /* exp(NaN) = NaN exp(large) = inf exp(-large) = 0 exp(1) = exp(1) */ x = (vector float) {eslNaN, 666.0, -666.0, 1.0}; r.v = esl_vmx_expf(x); if (esl_opt_GetBoolean(go, "-v")) { printf("expf"); esl_vmx_dump_vecfloat(stdout, x); printf(" ==> "); esl_vmx_dump_vecfloat(stdout, r.v); printf("\n"); } if (! isnan(r.x[0])) esl_fatal("expf(NaN) should be NaN"); if (isinf(r.x[1]) != 1) esl_fatal("expf(large x) should be inf"); if (r.x[2] != 0.0f) esl_fatal("expf(-large x) should be 0"); } /* utest_odds(): test accuracy of logf, expf on odds ratios, * our main intended use. */ static void utest_odds(ESL_GETOPTS *go, ESL_RANDOMNESS *r) { int N = esl_opt_GetInteger(go, "-N"); int verbose = esl_opt_GetBoolean(go, "-v"); int very_verbose = esl_opt_GetBoolean(go, "--vv"); int i; float p1, p2, odds; union { vector float v; float x[4]; } r1; union { vector float v; float x[4]; } r2; float scalar_r1, scalar_r2; double err1, maxerr1 = 0.0, avgerr1 = 0.0; /* errors on logf() */ double err2, maxerr2 = 0.0, avgerr2 = 0.0; /* errors on expf() */ for (i = 0; i < N; i++) { p1 = esl_rnd_UniformPositive(r); p2 = esl_rnd_UniformPositive(r); odds = p1 / p2; if (odds == 0.0) esl_fatal("whoa, odds ratio can't be 0!\n"); r1.v = esl_vmx_logf((vector float) {odds}); /* r1.x[z] = log(p1/p2) */ scalar_r1 = logf(odds); err1 = (r1.x[0] == 0. && scalar_r1 == 0.) ? 0.0 : 2 * fabs(r1.x[0] - scalar_r1) / fabs(r1.x[0] + scalar_r1); if (err1 > maxerr1) maxerr1 = err1; avgerr1 += err1 / (float) N; if (isnan(avgerr1)) esl_fatal("whoa, what?\n"); r2.v = esl_vmx_expf(r1.v); /* and back to odds */ scalar_r2 = expf(r1.x[0]); err2 = (r2.x[0] == 0. && scalar_r2 == 0.) ? 0.0 : 2 * fabs(r2.x[0] - scalar_r2) / fabs(r2.x[0] + scalar_r2); if (err2 > maxerr2) maxerr2 = err2; avgerr2 += err2 / (float) N; if (very_verbose) printf("%13.7g %13.7g %13.7g %13.7g %13.7g %13.7g %13.7g\n", odds, scalar_r1, r1.x[0], scalar_r2, r2.x[0], err1, err2); } if (avgerr1 > 1e-8) esl_fatal("average error on logf() is intolerable\n"); if (maxerr1 > 1e-6) esl_fatal("maximum error on logf() is intolerable\n"); if (avgerr2 > 1e-8) esl_fatal("average error on expf() is intolerable\n"); if (maxerr2 > 1e-6) esl_fatal("maximum error on expf() is intolerable\n"); if (verbose) { printf("Average [max] logf() relative error in %d odds trials: %13.8g [%13.8g]\n", N, avgerr1, maxerr1); printf("Average [max] expf() relative error in %d odds trials: %13.8g [%13.8g]\n", N, avgerr2, maxerr2); printf("(random seed : %ld)\n", esl_randomness_GetSeed(r)); } } #endif /*eslVMX_TESTDRIVE*/ /***************************************************************** * 5. Test driver *****************************************************************/ #ifdef eslVMX_TESTDRIVE /* gcc -g -Wall -maltivec -o vmx_utest -I. -L. -DeslVMX_TESTDRIVE esl_vmx.c -leasel -lm */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_vmx.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-N", eslARG_INT, "10000", NULL, NULL, NULL, NULL, NULL, "number of random test points", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose: show test report", 0 }, { "--vv", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be very verbose: show individual test samples", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for vmx module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_Create(esl_opt_GetInteger(go, "-s")); utest_logf(go); utest_expf(go); utest_odds(go, r); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /* eslVMX_TESTDRIVE*/ /***************************************************************** * 6. Example *****************************************************************/ #ifdef eslVMX_EXAMPLE /*::cexcerpt::vmx_example::begin::*/ /* gcc -msse2 -g -Wall -o vmx_example -I. -L. -DeslVMX_EXAMPLE esl_vmx.c -leasel -lm */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_vmx.h" int main(int argc, char **argv) { float x; /* scalar input */ vector float xv; /* input vector */ union { vector float v; float x[4]; } rv; /* result vector*/ x = 2.0; xv = (vector float) {x}; rv.v = esl_vmx_logf(xv); printf("logf(%f) = %f\n", x, rv.x[0]); rv.v = esl_vmx_expf(xv); printf("expf(%f) = %f\n", x, rv.x[0]); return 0; } /*::cexcerpt::vmx_example::end::*/ #endif /*eslVMX_EXAMPLE*/ #endif /*HAVE_VMX*/ #ifndef HAVE_VMX /* If we don't have VMX compiled in, provide some nothingness to: * a. prevent Mac OS/X ranlib from bitching about .o file that "has no symbols" * b. prevent compiler from bitching about "empty compilation unit" * c. automatically pass the automated tests. */ #include "easel.h" void esl_vmx_DoAbsolutelyNothing(void) { return; } #if defined eslVMX_TESTDRIVE || defined eslVMX_EXAMPLE || eslVMX_BENCHMARK int main(void) { return 0; } #endif #endif /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_vmx.c 685 2011-05-23 14:27:52Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_vmx.c $ *****************************************************************/ /* Additionally, esl_sse_logf() and esl_sse_expf() are * Copyright (C) 2007 Julien Pommier * Copyright (C) 1992 Stephen Moshier * * These functions derived from zlib-licensed routines by * Julien Pommier, http://gruntthepeon.free.fr/ssemath/. The * zlib license: */ /* Copyright (C) 2007 Julien Pommier This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /* In turn, Pommier had derived the logf() and expf() functions from * serial versions in the Cephes math library. According to its * readme, Cephes is "copyrighted by the author" and "may be used * freely but it comes with no support or guarantee." Cephes is * available in NETLIB [http://www.netlib.org/cephes/]. NETLIB is * widely considered to be a free scientific code repository, hough * the copyright and license status of many parts, including Cephes, * is not well defined in legal terms. We hereby note this, and have * attached Moshier's copyright. */ hmmer-3.1b2/easel/esl_distance.tex0000664361611702660230000001530012473612606016541 0ustar wheelerteddy The \eslmod{distance} module implements routines for inferring mutational distances between pairs of aligned sequences. Augmentation with the \eslmod{alphabet} module provides distance routines for digitized sequences, in addition to text sequences. Augmentation with the \eslmod{dmatrix} module provides routines for constructing distance matrices from multiple sequence alignments. The API for the \eslmod{distance} module is summarized in Table~\ref{tbl:distance_api}. \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \apisubhead{Pairwise distances for aligned text sequences}\\ \hyperlink{func:esl_dst_CPairId()}{\ccode{esl\_dst\_CPairId()}} & Pairwise identity of two aligned text strings.\\ \hyperlink{func:esl_dst_CJukesCantor()}{\ccode{esl\_dst\_CJukesCantor()}} & Jukes-Cantor distance for two aligned strings.\\ \apisubhead{Pairwise distances for aligned digital seqs [\eslmod{alphabet}]}\\ \hyperlink{func:esl_dst_XPairId()}{\ccode{esl\_dst\_XPairId()}} & Pairwise identity of two aligned digital seqs.\\ \hyperlink{func:esl_dst_XJukesCantor()}{\ccode{esl\_dst\_XJukesCantor()}} & Jukes-Cantor distance for two aligned digitized seqs.\\ \apisubhead{Distance matrices for aligned text sequences [\eslmod{dmatrix}]}\\ \hyperlink{func:esl_dst_CPairIdMx()}{\ccode{esl\_dst\_CPairIdMx()}} & NxN identity matrix for N aligned text sequences. \\ \hyperlink{func:esl_dst_CDiffMx()}{\ccode{esl\_dst\_CDiffMx()}} & NxN difference matrix for N aligned text sequences.\\ \hyperlink{func:esl_dst_CJukesCantorMx()}{\ccode{esl\_dst\_CJukesCantorMx()}} & NxN Jukes/Cantor distance matrix for N aligned text seqs.\\ \apisubhead{Distance matrices for aligned digital sequences [\eslmod{dmatrix}$,$\eslmod{alphabet}]}\\ \hyperlink{func:esl_dst_XPairIdMx()}{\ccode{esl\_dst\_XPairIdMx()}} & NxN identity matrix for N aligned digital seqs.\\ \hyperlink{func:esl_dst_XDiffMx()}{\ccode{esl\_dst\_XDiffMx()}} & NxN difference matrix for N aligned digital seqs.\\ \hyperlink{func:esl_dst_XJukesCantorMx()}{\ccode{esl\_dst\_XJukesCantorMx()}} & NxN Jukes/Cantor distance matrix for N aligned digital seqs.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{distance} API. Requires: \eslmod{easel}. Optional augmentation: \eslmod{alphabet}, \eslmod{dmatrix}.} \label{tbl:distance_api} \end{table} \subsection{Example of using the distance API} The example code below opens a multiple sequence alignment file and reads an alignment from it, then uses one of the routines from the \eslmod{distance} module to calculate a fractional identity matrix from it. The example then finds the average, minimum, and maximum of the values in the identity matrix. \input{cexcerpts/distance_example} \subsection{Definition of pairwise identity and pairwise difference} Given a pairwise sequence alignment of length $L$, between two sequences of $n_1$ and $n_2$ residues ($n_1 \leq L$, $n_2 \leq L$), where the $L$ aligned symbol pairs are classified and counted as $c_{\mbox{ident}}$ identities, $c_{\mbox{mismat}}$ mismatches, and $c_{\mbox{indel}}$ pairs that have a gap symbol in either or both sequences ($c_{\mbox{ident}} + c_{\mbox{mismat}} + c_{\mbox{indel}} = L$), \esldef{pairwise sequence identity} is defined as: \[ \mbox{pid} = \frac{c_{\mbox{ident}}}{\mbox{MIN}(n_1, n_2)}, \] and \esldef{pairwise sequence difference} is defined as \[ \mbox{diff} = 1 - \mbox{pid} = \frac{\mbox{MIN}(n_1,n_2) - c_{\mbox{ident}}}{\mbox{MIN}(n_1, n_2)}. \] Both pid and diff range from 0 to 1. In the unusual case where $\mbox{MIN}(n_1,n_2)=0$ -- that is, one of the aligned sequences consists entirely of gaps -- the percent identity $0/0$ is defined as 0. The calculation is robust against length 0 sequences, which do arise in real applications. (Not just in bad input, either. For example, this arises when dealing with subsets of the columns of a multiple alignment.) There are many ways that pairwise identity might be calculated, because there are a variety of choices for the denominator. In Easel, identity calculations are used primarily in \emph{ad hoc} sequence weight calculations for multiple sequence alignments, as part of profile HMM or profile SCFG construction. Multiple alignments will often contain short sequence fragments. We want to deal robustly with cases where two short fragments may have little overlap, or none at all. The most obvious calculation of pairwise identity, $c_{\mbox{ident}} / c_{\mbox{ident}} + c_{\mbox{mismat}}$, is not robust, because alignments with few aligned residues (either because they are highly gappy, or they are partially overlapping fragments) may receive artifactually high identities. Other definitions, $c_{\mbox{ident}} / L$ or $c_{\mbox{ident}} / \mbox{MEAN}(n_1, n_2)$ or $c_{\mbox{ident}} / \mbox{MAX}(n_1, n_2)$ are also not robust, sharing the disadvantage that good alignments of fragments to longer sequences would be scored as artifactually low identities. \subsection{Generalized Jukes-Cantor distances} The Jukes-Cantor model of DNA sequence evolution assumes that all substitutions occur at the same rate $\alpha$ \citep{JukesCantor69}. It is a reversible, multiplicative evolutionary model. It implies equiprobable stationary probabilities. The \esldef{Jukes/Cantor distance} is the maximum likelihood estimate of the number of substitutions per site that have occurred between the two sequences, correcting for multiple substitutions that may have occurred the same site. Given an ungapped pairwise alignment of length $L$ consisting of $c_{\mbox{ident}}$ identities and $c_{\mbox{mismat}}$ mismatches (observed substitutions) ($c_{\mbox{ident}} + c_{\mbox{mismat}} = L$, the fractional observed difference $D$ is defined as \[ D = \frac{c_{\mbox{mismat}}}{c_{\mbox{ident}} + c_{\mbox{mismat}}}, \] and the Jukes-Cantor distance $d$ is defined in terms of $D$ as: \[ d = -\frac{3}{4} \log \left( 1 - \frac{4}{3} D \right) \] The Jukes/Cantor model does not allow insertions or deletions. When calculating ``Jukes/Cantor distances'' for gapped alignments, gap symbols are simply ignored, and the same calculations above are applied. The Jukes-Cantor model readily generalizes from the four-letter DNA alphabet to any alphabet size $K$, using the same definition of observed fractional difference $D$. A \esldef{generalized Jukes-Cantor distance} is: \[ d = -\frac{K-1}{K} \log \left( 1 - \frac{K}{K-1} D \right). \] The large-sample variance of this estimate $d$ is: \[ \sigma^2 = e^\frac{2Kd}{K-1} \frac{D(1-D)}{L'} \] where $L'$ is the total number of columns counted, exclusive of gaps, $L' = c_{\mbox{ident}} + c_{\mbox{mismat}}$. If the observed $D \geq \frac{K-1}{K}$, the maximum likelihood Jukes-Cantor distance is infinity, as is the variance. In this case, both $d$ and $V$ are returned as \ccode{HUGE\_VAL}. hmmer-3.1b2/easel/esl_weibull.c0000664361611702660230000006253312473612610016041 0ustar wheelerteddy/* Statistical routines for Weibull distributions. * * Contents: * 1. Routines for evaluating densities and distributions. * 2. Generic API routines, for general interface w/ histogram module * 3. Routines for dumping plots to files * 4. Routines for sampling (requires augmentation w/ random module) * 5. Maximum likelihood fitting (requires augmentation w/ minimizer) * 6. Test driver * 7. Example * 8. Copyright and licence information. */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_stats.h" #include "esl_vectorops.h" #include "esl_weibull.h" #ifdef eslAUGMENT_RANDOM #include "esl_random.h" #endif #ifdef eslAUGMENT_HISTOGRAM #include "esl_histogram.h" #endif #ifdef eslAUGMENT_MINIMIZER #include "esl_minimizer.h" #endif /**************************************************************************** * 1. Routines for evaluating densities and distributions ****************************************************************************/ /* mu <= x < infinity * However, x=mu can be a problem: * PDF-> 0 if tau > 1, infinity if tau < 1. * * lambda > 0 * tau > 0 [fat tail when tau < 1; inverse GEV when tau > 1; * exponential when tau=1] */ /* Function: esl_wei_pdf() * * Purpose: Calculates the Weibull pdf $P(X=x)$, given quantile , * offset , and parameters and . */ double esl_wei_pdf(double x, double mu, double lambda, double tau) { double y = lambda * (x-mu); double val; if (x < mu) return 0.; if (x == mu) { if (tau < 1.) return eslINFINITY; else if (tau > 1.) return 0.; else if (tau == 1.) return lambda; } val = lambda * tau * exp((tau-1)*log(y)) * exp(- exp(tau * log(y))); return val; } /* Function: esl_wei_logpdf() * * Purpose: Calculates the log probability density function for the * Weibull, $\log P(X=x)$, given quantile , * offset , and parameters and . */ double esl_wei_logpdf(double x, double mu, double lambda, double tau) { double y = lambda * (x-mu); double val; if (x < mu) return -eslINFINITY; if (x == mu) { if (tau < 1.) return eslINFINITY; /* technically; but approaches it slowly*/ else if (tau > 1.) return -eslINFINITY; /* same as above, also a slow approach */ else if (tau == 1.) return log(lambda); /* special case, exponential */ } val = log(tau) + tau*log(lambda) + (tau-1)*log(x-mu) - exp(tau * log(y)); return val; } /* Function: esl_wei_cdf() * * Purpose: Calculates the cumulative distribution function for the * Weibull, $P(X \leq x)$, given quantile , * offset , and parameters and . */ double esl_wei_cdf(double x, double mu, double lambda, double tau) { double y = lambda*(x-mu); double tly = tau * log(y); if (x <= mu) return 0.0; else if (fabs(tly) < eslSMALLX1) return exp(tly); else return 1 - exp(-exp(tly)); } /* Function: esl_wei_logcdf() * * Purpose: Calculates the log of the cumulative distribution function for a * Weibull, $P(X \leq x)$, given quantile , * offset , and parameters and . */ double esl_wei_logcdf(double x, double mu, double lambda, double tau) { double y = lambda*(x-mu); double tly = tau * log(y); if (x <= mu) return -eslINFINITY; if (fabs(tly) < eslSMALLX1) return tly; else if (fabs(exp(-exp(tly))) < eslSMALLX1) return -exp(-exp(tly)); else return log(1 - exp(-exp(tly))); } /* Function: esl_wei_surv() * * Purpose: Calculates the survivor function, $P(X>x)$ (that is, 1-CDF, * the right tail probability mass) for a Weibull * distribution, given quantile , offset , and parameters * and . */ double esl_wei_surv(double x, double mu, double lambda, double tau) { double y = lambda*(x-mu); double tly = tau * log(y); if (x <= mu) return 1.0; return exp(-exp(tly)); } /* Function: esl_wei_logsurv() * * Purpose: Calculates the log survivor function, $\log P(X>x)$ (that is, * log(1-CDF), the right tail log probability mass) for a * Weibull distribution, given quantile , offset , * and parameters and . */ double esl_wei_logsurv(double x, double mu, double lambda, double tau) { double y = lambda*(x-mu); double tly = tau * log(y); if (x <= mu) return 0.0; return -exp(tly); } /* Function: esl_wei_invcdf() * * Purpose: Calculates the inverse CDF for a Weibull distribution * with parameters , , and , returning * the quantile at which the CDF is

, for $0, taking * a void ptr to a double array containing $\mu$, $\lambda$, * $\tau$ parameters. */ double esl_wei_generic_pdf(double x, void *params) { double *p = (double *) params; return esl_wei_pdf(x, p[0], p[1], p[2]); } /* Function: esl_wei_generic_cdf() * * Purpose: Generic-API wrapper around , taking * a void ptr to a double array containing $\mu$, $\lambda$, * $\tau$ parameters. */ double esl_wei_generic_cdf(double x, void *params) { double *p = (double *) params; return esl_wei_cdf(x, p[0], p[1], p[2]); } /* Function: esl_wei_generic_surv() * * Purpose: Generic-API wrapper around , taking * a void ptr to a double array containing $\mu$, $\lambda$, * $\tau$ parameters. */ double esl_wei_generic_surv(double x, void *params) { double *p = (double *) params; return esl_wei_surv(x, p[0], p[1], p[2]); } /* Function: esl_wei_generic_invcdf() * * Purpose: Generic-API wrapper around , taking * a void ptr to a double array containing $\mu$, $\lambda$, * $\tau$ parameters. */ double esl_wei_generic_invcdf(double p, void *params) { double *v = (double *) params; return esl_wei_invcdf(p, v[0], v[1], v[2]); } /*------------------------ end generic API ---------------------------------*/ /**************************************************************************** * 3. Routines for dumping plots for files ****************************************************************************/ /* Function: esl_wei_Plot() * * Purpose: Plot some Weibull function (for instance, ) * for Weibull parameters , , and , for a range of * quantiles x from to in steps of ; * output to an open stream in xmgrace XY input format. * * Returns: on success. * * Throws: on any system write error, such as filled disk. */ int esl_wei_Plot(FILE *fp, double mu, double lambda, double tau, double (*func)(double x, double mu, double lambda, double tau), double xmin, double xmax, double xstep) { double x; for (x = xmin; x <= xmax; x += xstep) if (x > mu || tau >= 1.) /* don't try to plot at mu where pdf blows up */ if (fprintf(fp, "%f\t%g\n", x, (*func)(x, mu, lambda, tau)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "weibull plot write failed"); if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "weibull plot write failed"); return eslOK; } /*-------------------- end plot dumping routines ---------------------------*/ /**************************************************************************** * 4. Routines for sampling (requires augmentation w/ random module) ****************************************************************************/ #ifdef eslAUGMENT_RANDOM /* Function: esl_wei_Sample() * * Purpose: Sample a Weibull random variate, * by the transformation method. */ double esl_wei_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double tau) { double p; p = esl_rnd_UniformPositive(r); return esl_wei_invcdf(p, mu, lambda, tau); } #endif /*eslAUGMENT_RANDOM*/ /*--------------------------- end sampling ---------------------------------*/ /**************************************************************************** * 5. Maximum likelihood fitting ****************************************************************************/ #ifdef eslAUGMENT_MINIMIZER /* Easel's conjugate gradient descent code allows a single void ptr to * point to any necessary fixed data, so we put everything into one * structure: */ struct wei_data { double *x; /* data: n observed samples */ int n; /* number of observed samples */ double mu; /* mu is considered to be known, not fitted */ }; /* wei_func(): * Returns the negative log likelihood of a complete data sample, * in the API of the conjugate gradient descent optimizer in esl_minimizer. */ static double wei_func(double *p, int nparam, void *dptr) { double lambda, tau; struct wei_data *data; double logL; int i; /* Unpack what the optimizer gave us. */ lambda = exp(p[0]); /* see below for c.o.v. notes */ tau = exp(p[1]); data = (struct wei_data *) dptr; logL = 0.; for (i = 0; i < data->n; i++) { if (tau < 1. && data->x[i] == data->mu) continue; /* hack: disallow infinity */ logL += esl_wei_logpdf(data->x[i], data->mu, lambda, tau); } return -logL; /* goal: minimize NLL */ } /* Function: esl_wei_FitComplete() * * Purpose: Given an array of samples , fit * them to a stretched exponential distribution starting * at lower bound (all $x_i > \mu$), and * return maximum likelihood parameters * and . * * Args: x - complete GEV-distributed data [0..n-1] * n - number of samples in * ret_mu - RETURN: lower bound of the distribution (all x_i >= mu) * ret_lambda - RETURN: maximum likelihood estimate of lambda * ret_tau - RETURN: maximum likelihood estimate of tau * * Returns: on success. * * Throws: if the fit doesn't converge. * * Xref: STL9/136-137 */ int esl_wei_FitComplete(double *x, int n, double *ret_mu, double *ret_lambda, double *ret_tau) { struct wei_data data; double p[2]; /* parameter vector */ double u[2]; /* max initial step size vector */ double wrk[8]; /* 4 tmp vectors of length 2 */ double mean; double mu, lambda, tau; /* initial param guesses */ double tol = 1e-6; /* convergence criterion for CG */ double fx; /* f(x) at minimum; currently unused */ int status; /* Make a good initial guess, based on exponential fit; * set an arbitrary tau. */ mu = esl_vec_DMin(x, n); esl_stats_DMean(x, n, &mean, NULL); lambda = 1 / (mean - mu); tau = 0.9; /* Load the data structure */ data.x = x; data.n = n; data.mu = mu; /* Change of variables; * lambda > 0, so c.o.v. lambda = exp^w, w = log(lambda); * tau > 0, same c.o.v. */ p[0] = log(lambda); p[1] = log(tau); u[0] = 1.0; u[1] = 1.0; /* pass problem to the optimizer */ status = esl_min_ConjugateGradientDescent(p, u, 2, &wei_func, NULL, (void *)(&data), tol, wrk, &fx); *ret_mu = mu; *ret_lambda = exp(p[0]); *ret_tau = exp(p[1]); return status; } #ifdef eslAUGMENT_HISTOGRAM struct wei_binned_data { ESL_HISTOGRAM *h; /* contains the binned observed data */ double mu; /* mu is considered to be known, not fitted */ }; /* wei_binned_func(): * Returns the negative log likelihood of a binned data sample, * in the API of the conjugate gradient descent optimizer in esl_minimizer. */ static double wei_binned_func(double *p, int nparam, void *dptr) { struct wei_binned_data *data = (struct wei_binned_data *) dptr; ESL_HISTOGRAM *h = data->h; double lambda, tau; double logL; double ai,bi; int i; double tmp; /* Unpack what the optimizer gave us. */ lambda = exp(p[0]); /* see below for c.o.v. notes */ tau = exp(p[1]); logL = 0.; for (i = h->cmin; i <= h->imax; i++) { if (h->obs[i] == 0) continue; ai = esl_histogram_Bin2LBound(h,i); bi = esl_histogram_Bin2UBound(h,i); if (ai < data->mu) ai = data->mu; tmp = esl_wei_cdf(bi, data->mu, lambda, tau) - esl_wei_cdf(ai, data->mu, lambda, tau); /* for cdf~1.0, numerical roundoff error can create tmp<0 by a * teensy amount; tolerate that, but catch anything worse */ ESL_DASSERT1( (tmp + 1e-7 > 0.)); if (tmp <= 0.) return eslINFINITY; logL += h->obs[i] * log(tmp); } return -logL; /* goal: minimize NLL */ } /* Function: esl_wei_FitCompleteBinned() * * Purpose: Given a histogram with binned observations, where each * bin i holds some number of observed samples x with values from * lower bound l to upper bound u (that is, $l < x \leq u$), and * , the known offset (minimum value) of the distribution; * return maximum likelihood parameters * and . * * Args: x - complete GEV-distributed data [0..n-1] * n - number of samples in * ret_mu - lower bound of the distribution (all x_i > mu) * ret_lambda - RETURN: maximum likelihood estimate of lambda * ret_tau - RETURN: maximum likelihood estimate of tau * * Returns: on success. * * Throws: if the fit doesn't converge. * * Xref: STL9/136-137 */ int esl_wei_FitCompleteBinned(ESL_HISTOGRAM *h, double *ret_mu, double *ret_lambda, double *ret_tau) { struct wei_binned_data data; double p[2]; /* parameter vector */ double u[2]; /* max initial step size vector */ double wrk[8]; /* 4 tmp vectors of length 2 */ double mean; double mu, lambda, tau; /* initial param guesses */ double tol = 1e-6; /* convergence criterion for CG */ double fx; /* f(x) at minimum; currently unused */ int status; int i; double ai; /* Set the fixed mu. * Make a good initial guess of lambda, based on exponential fit. * Choose an arbitrary tau. */ if (h->is_tailfit) mu = h->phi; /* all x > mu in this case */ else if (h->is_rounded) mu = esl_histogram_Bin2LBound(h, h->imin); else mu = h->xmin; mean = 0.; for (i = h->cmin; i <= h->imax; i++) { ai = esl_histogram_Bin2LBound(h, i); ai += 0.5*h->w; /* midpoint in bin */ mean += (double)h->obs[i] * ai; } mean /= h->No; lambda = 1 / (mean - mu); tau = 0.9; /* load the data structure */ data.h = h; data.mu = mu; /* Change of variables; * lambda > 0, so c.o.v. lambda = exp^w, w = log(lambda); * tau > 0, same c.o.v. */ p[0] = log(lambda); p[1] = log(tau); u[0] = 1.0; u[1] = 1.0; /* pass problem to the optimizer */ status = esl_min_ConjugateGradientDescent(p, u, 2, &wei_binned_func, NULL, (void *)(&data), tol, wrk, &fx); *ret_mu = mu; *ret_lambda = exp(p[0]); *ret_tau = exp(p[1]); return status; } #endif /*eslAUGMENT_HISTOGRAM*/ #endif /*eslAUGMENT_MINIMIZER*/ /*--------------------------- end fitting ----------------------------------*/ /**************************************************************************** * 6. Test driver ****************************************************************************/ #ifdef eslWEIBULL_TESTDRIVE /* Compile: gcc -g -Wall -I. -I ~/src/easel -L ~/src/easel -o test -DeslWEIBULL_TESTDRIVE\ esl_weibull.c -leasel -lm */ #include #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_weibull.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-l", eslARG_REAL, "1.0", NULL, NULL, NULL, NULL, NULL, "set slope of sampled variates (lambda parameter) to ", 0 }, { "-m", eslARG_REAL, "10.0", NULL, NULL, NULL, NULL, NULL, "set location of sampled variates (mu parameter) to ", 0 }, { "-n", eslARG_INT, "10000", NULL, NULL, NULL, NULL, NULL, "set # of sampled variates to ", 0 }, { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "output histogram to file ", 0 }, { "-s", eslARG_INT, "0", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-t", eslARG_REAL, "0.7", NULL, NULL, NULL, NULL, NULL, "set shape of sampled variates (tau parameter) to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be more verbose in output", 0 }, { "-w", eslARG_REAL, "0.1", NULL, NULL, NULL, NULL, NULL, "set width of histogram bins to ", 0 }, { "--cdf", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump plot of cumulative distribution", 0 }, { "--logcdf", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump plot of log cumulative distribution", 0 }, { "--pdf", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump plot of probability density", 0 }, { "--logpdf", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump plot of log probability density", 0 }, { "--surv", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump plot of survival P(s>x)", 0 }, { "--logsurv", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "dump plot of log survival, log(P(s>x))", 0 }, { "--xL", eslARG_REAL, NULL, NULL, NULL, NULL, NULL, NULL, "set minimum x-axis value on dumped plots to ", 0 }, { "--xH", eslARG_REAL, NULL, NULL, NULL, NULL, NULL, NULL, "set maximum x-axis value on dumped plots to ", 0 }, { "--xS", eslARG_REAL, NULL, NULL, NULL, NULL, NULL, NULL, "set x-axis increment value on dumped plots to ", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for Easel's Weibull distribution module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *rng = esl_randomness_Create(esl_opt_GetInteger(go, "-s")); double mu = esl_opt_GetReal (go, "-m"); double lambda = esl_opt_GetReal (go, "-l"); double tau = esl_opt_GetReal (go, "-t"); int n = esl_opt_GetInteger(go, "-n"); double binwidth = esl_opt_GetReal (go, "-w"); int plot_cdf = esl_opt_GetBoolean(go, "--cdf"); int plot_logcdf = esl_opt_GetBoolean(go, "--logcdf"); int plot_pdf = esl_opt_GetBoolean(go, "--pdf"); int plot_logpdf = esl_opt_GetBoolean(go, "--logpdf"); int plot_surv = esl_opt_GetBoolean(go, "--surv"); int plot_logsurv = esl_opt_GetBoolean(go, "--logsurv"); int be_verbose = esl_opt_GetBoolean(go, "-v"); char *plotfile = esl_opt_GetString (go, "-o"); ESL_HISTOGRAM *h = NULL; int xmin_set = esl_opt_IsOn(go, "--xL"); double xmin = xmin_set ? esl_opt_GetReal(go, "--xL") : mu; int xmax_set = esl_opt_IsOn(go, "--xH"); double xmax = xmax_set ? esl_opt_GetReal(go, "--xH") : mu+40*(1./lambda); int xstep_set = esl_opt_IsOn(go, "--xH"); double xstep = xstep_set ? esl_opt_GetReal(go, "--xS") : 0.1; FILE *pfp = stdout; double emu, elambda, etau; int i; double x; double *data; int ndata; fprintf(stderr, "## %s\n", argv[0]); fprintf(stderr, "# rng seed = %" PRIu32 "\n", esl_randomness_GetSeed(rng)); if (be_verbose) printf("Parametric: mu = %f lambda = %f tau = %f\n", mu, lambda, tau); h = esl_histogram_CreateFull(mu, 100., binwidth); if (plotfile && (pfp = fopen(plotfile, "w")) == NULL) ESL_EXCEPTION(eslFAIL, "Failed to open plotfile"); for (i = 0; i < n; i++) { x = esl_wei_Sample(rng, mu, lambda, tau); esl_histogram_Add(h, x); } esl_histogram_GetData(h, &data, &ndata); esl_wei_FitComplete(data, ndata, &emu, &elambda, &etau); if (be_verbose) printf("Complete data fit: mu = %f lambda = %f tau = %f\n", emu, elambda, etau); if (fabs( (emu-mu)/mu ) > 0.01) ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted mu > 1%\n"); if (fabs( (elambda-lambda)/lambda ) > 0.10) ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted lambda > 10%\n"); if (fabs( (etau-tau)/tau ) > 0.10) ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted tau > 10%\n"); esl_wei_FitCompleteBinned(h, &emu, &elambda, &etau); if (be_verbose) printf("Binned data fit: mu = %f lambda = %f tau = %f\n", emu, elambda, etau); if (fabs( (emu-mu)/mu ) > 0.01) ESL_EXCEPTION(eslFAIL, "Error in (binned) fitted mu > 1%\n"); if (fabs( (elambda-lambda)/lambda ) > 0.10) ESL_EXCEPTION(eslFAIL, "Error in (binned) fitted lambda > 10%\n"); if (fabs( (etau-tau)/tau ) > 0.10) ESL_EXCEPTION(eslFAIL, "Error in (binned) fitted lambda > 10%\n"); if (plot_pdf) esl_wei_Plot(pfp, mu, lambda, tau, &esl_wei_pdf, xmin, xmax, xstep); if (plot_logpdf) esl_wei_Plot(pfp, mu, lambda, tau, &esl_wei_logpdf, xmin, xmax, xstep); if (plot_cdf) esl_wei_Plot(pfp, mu, lambda, tau, &esl_wei_cdf, xmin, xmax, xstep); if (plot_logcdf) esl_wei_Plot(pfp, mu, lambda, tau, &esl_wei_logcdf, xmin, xmax, xstep); if (plot_surv) esl_wei_Plot(pfp, mu, lambda, tau, &esl_wei_surv, xmin, xmax, xstep); if (plot_logsurv) esl_wei_Plot(pfp, mu, lambda, tau, &esl_wei_logsurv, xmin, xmax, xstep); if (plotfile) fclose(pfp); esl_histogram_Destroy(h); esl_randomness_Destroy(rng); esl_getopts_Destroy(go); fprintf(stderr, "# status = ok\n"); return 0; } #endif /*eslWEIBULL_TESTDRIVE*/ /**************************************************************************** * 7. Example main() ****************************************************************************/ #ifdef eslWEIBULL_EXAMPLE /*::cexcerpt::wei_example::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslWEIBULL_EXAMPLE\ -DeslAUGMENT_HISTOGRAM -DeslAUGMENT_RANDOM -DeslAUGMENT_MINIMIZER\ esl_weibull.c esl_histogram.c esl_random.c esl_minimizer.c\ esl_stats.c esl_vectorops.c easel.c -lm * run: ./example */ #include #include "easel.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_weibull.h" int main(int argc, char **argv) { double mu = -2.1; double lambda = 1.0; double tau = 0.8; ESL_HISTOGRAM *h = esl_histogram_CreateFull(mu, 100., 0.1); ESL_RANDOMNESS *r = esl_randomness_Create(0); int n = 10000; double emu, elambda, etau; double *data; int ndata; double x; int i; for (i = 0; i < n; i++) { x = esl_wei_Sample(r, mu, lambda, tau); esl_histogram_Add(h, x); } esl_histogram_GetData(h, &data, &ndata); /* Plot the empirical (sampled) and expected survivals */ esl_histogram_PlotSurvival(stdout, h); esl_wei_Plot(stdout, mu, lambda, tau, &esl_wei_surv, h->xmin, h->xmax, 0.1); /* ML fit to complete data, and plot fitted survival curve */ esl_wei_FitComplete(data, ndata, &emu, &elambda, &etau); esl_wei_Plot(stdout, emu, elambda, etau, &esl_wei_surv, h->xmin, h->xmax, 0.1); /* ML fit to binned data, plot fitted survival curve */ esl_wei_FitCompleteBinned(h, &emu, &elambda, &etau); esl_wei_Plot(stdout, emu, elambda, etau, &esl_wei_surv, h->xmin, h->xmax, 0.1); esl_randomness_Destroy(r); esl_histogram_Destroy(h); return 0; } /*::cexcerpt::wei_example::end::*/ #endif /*eslWEIBULL_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_weibull.c 827 2012-12-04 23:11:38Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_weibull.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_workqueue.c0000664361611702660230000004171012473612610016417 0ustar wheelerteddy/* Threaded work queue. * * Contents: * 1. Work queue routines * 2. Examples. * 3. Copyright and license. * */ #include "esl_config.h" #ifdef HAVE_PTHREAD #include #include #include #include #include "easel.h" #include "esl_workqueue.h" /***************************************************************** *# 1. Work queue routines *****************************************************************/ /* Function: esl_workqueue_Create() * Synopsis: Create a work queue object. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Creates an object of . The * queues are used to handle objects that * are ready to be processed and that have been * processed by worker threads. * * Returns: ptr to the new object. * * Throws: on allocation or initialization failure. */ ESL_WORK_QUEUE * esl_workqueue_Create(int size) { int i; int status; ESL_WORK_QUEUE *queue = NULL; ESL_ALLOC(queue, sizeof(ESL_WORK_QUEUE)); queue->readerQueue = NULL; queue->readerQueueCnt = 0; queue->readerQueueHead = 0; queue->workerQueue = NULL; queue->workerQueueCnt = 0; queue->workerQueueHead = 0; queue->queueSize = size; queue->pendingWorkers = 0; if (pthread_mutex_init(&queue->queueMutex, NULL) != 0) ESL_XEXCEPTION(eslESYS, "mutex init failed"); if (pthread_cond_init(&queue->readerQueueCond, NULL) != 0) ESL_XEXCEPTION(eslESYS, "cond reader init failed"); if (pthread_cond_init(&queue->workerQueueCond, NULL) != 0) ESL_XEXCEPTION(eslESYS, "cond worker init failed"); ESL_ALLOC(queue->readerQueue, sizeof(void *) * size); ESL_ALLOC(queue->workerQueue, sizeof(void *) * size); for (i = 0; i < queue->queueSize; ++i) { queue->readerQueue[i] = NULL; queue->workerQueue[i] = NULL; } return queue; ERROR: esl_workqueue_Destroy(queue); return NULL; } /* Function: esl_workqueue_Destroy() * Synopsis: Destroys an object. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Frees an object. * * The calling routine is responsible for freeing the * memory of the actual queued objects. * * Returns: void */ void esl_workqueue_Destroy(ESL_WORK_QUEUE *queue) { if (queue == NULL) return; pthread_mutex_destroy (&queue->queueMutex); pthread_cond_destroy (&queue->readerQueueCond); pthread_cond_destroy (&queue->workerQueueCond); if (queue->readerQueue != NULL) free(queue->readerQueue); if (queue->workerQueue != NULL) free(queue->workerQueue); free(queue); } /* Function: esl_workqueue_Init() * Synopsis: Adds a queued object to the producers list. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Added a work object to the producers list checking for * any errors. * * Returns: on success. * * Throws: if thread synchronization fails somewhere. * if something's wrong with or . */ int esl_workqueue_Init(ESL_WORK_QUEUE *queue, void *ptr) { int cnt; int inx; int queueSize; if (queue == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid queue object"); if (ptr == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid reader object"); if (pthread_mutex_lock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex lock failed"); queueSize = queue->queueSize; /* check to make sure we won't overflow */ cnt = queue->readerQueueCnt; if (cnt >= queueSize) ESL_EXCEPTION(eslEINVAL, "Reader queue overflow"); inx = (queue->readerQueueHead + cnt) % queueSize; queue->readerQueue[inx] = ptr; ++queue->readerQueueCnt; if (cnt == 0) { if (pthread_cond_signal (&queue->readerQueueCond) != 0) ESL_EXCEPTION(eslESYS, "cond signal failed"); } if (pthread_mutex_unlock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed"); return eslOK; } /* Function: esl_workqueue_Remove() * Synopsis: Removes a queued object from the producers list. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Removes a queued object from the producers list. * * A object that has already been consumed by a worker * is removed the the producers list. If there are no empty * objects, a is set to NULL. * * The pointer to the object is returned in the obj arguement. * * Returns: on success. * if no objects are in the queue. * * Throws: if thread synchronization fails somewhere. * if something's wrong with . */ int esl_workqueue_Remove(ESL_WORK_QUEUE *queue, void **obj) { int inx; int status = eslEOD; if (obj == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid object pointer"); if (queue == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid queue object"); if (pthread_mutex_lock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex lock failed"); /* check if there are any items on the readers list */ *obj = NULL; if (queue->readerQueueCnt > 0) { inx = (queue->readerQueueHead + queue->readerQueueCnt) % queue->queueSize; *obj = queue->readerQueue[inx]; queue->readerQueue[inx] = NULL; --queue->readerQueueCnt; status = eslOK; } if (pthread_mutex_unlock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed"); return status; } /* Function: esl_workqueue_Complete() * Synopsis: Signals the end of the queue. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Signal the end of the queue. If there are any threads * waiting on an object, signal them to wake up and complete * their processing. * * Returns: on success. * * Throws: if thread synchronization fails somewhere. * if something's wrong with . */ int esl_workqueue_Complete(ESL_WORK_QUEUE *queue) { if (queue == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid queue object"); if (pthread_mutex_lock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex lock failed"); if (queue->pendingWorkers != 0) { if (pthread_cond_broadcast (&queue->workerQueueCond) != 0) ESL_EXCEPTION(eslESYS, "broadcast failed"); } if (pthread_mutex_unlock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed"); return eslOK; } /* Function: esl_workqueue_Reset() * Synopsis: Reset the queue for another run. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Reset the queue for another run. This is done by moving * all the queued object to the reader's list (i.e. producer). * * Returns: on success. * * Throws: if thread synchronization fails somewhere. * if something's wrong with . */ int esl_workqueue_Reset(ESL_WORK_QUEUE *queue) { int inx; int queueSize; if (queue == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid queue object"); if (pthread_mutex_lock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex lock failed"); queueSize = queue->queueSize; /* move all buffers back to the reader queue */ while (queue->workerQueueCnt > 0) { inx = (queue->readerQueueHead + queue->readerQueueCnt) % queueSize; queue->readerQueue[inx] = queue->workerQueue[queue->workerQueueHead]; ++queue->readerQueueCnt; queue->workerQueue[queue->workerQueueHead] = NULL; queue->workerQueueHead = (queue->workerQueueHead + 1) % queueSize; --queue->workerQueueCnt; } queue->pendingWorkers = 0; if (pthread_mutex_unlock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed"); return eslOK; } /* Function: esl_workqueue_ReaderUpdate() * Synopsis: Producer routine. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: The producer (i.e. Reader) places an object, that is * ready to be processed by a worker on the consumers * (i.e. Workers) work queue. * * If the object is not null, it is placed on the * workers queue. If there are any workers waiting for * an object, they are signaled to wake up. * * If the reader routine has supplied an pointer, * an object that has already been processed by a worker, * is placed in so the object can be made ready * for another worker thread. * * Returns: on success. * * Throws: if thread synchronization fails somewhere. * if something's wrong with . */ int esl_workqueue_ReaderUpdate(ESL_WORK_QUEUE *queue, void *in, void **out) { int inx; int queueSize; if (queue == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid queue object"); if (pthread_mutex_lock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex lock failed"); queueSize = queue->queueSize; /* check if the caller is queuing up an item */ if (in != NULL) { /* check to make sure we don't overflow */ if (queue->workerQueueCnt >= queueSize) ESL_EXCEPTION(eslEINVAL, "Work queue overflow"); inx = (queue->workerQueueHead + queue->workerQueueCnt) % queueSize; queue->workerQueue[inx] = in; ++queue->workerQueueCnt; if (queue->pendingWorkers != 0) { if (pthread_cond_broadcast (&queue->workerQueueCond) != 0) ESL_EXCEPTION(eslESYS, "broadcast failed"); } } /* check if the caller is waiting for a queued item */ if (out != NULL) { /* wait for a processed buffers to be returned */ while (queue->readerQueueCnt == 0) { if (pthread_cond_wait (&queue->readerQueueCond, &queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "cond wait failed"); } inx = queue->readerQueueHead; *out = queue->readerQueue[inx]; queue->readerQueue[inx] = NULL; queue->readerQueueHead = (queue->readerQueueHead + 1) % queueSize; --queue->readerQueueCnt; } if (pthread_mutex_unlock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed"); return eslOK; } /* Function: esl_workqueue_WorkerUpdate() * Synopsis: Consumer routine. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: The consumer (i.e. Worker) places an object that has * been processed on the producers (i.e. Readers) queue. * * If the object is not null, it is placed on the * readers queue. If the reader is waiting for an object, * it is signaled it to wake up. * * If the worker routine has supplied an pointer, * an object that is ready for processing by a worker, * is placed in so the worker thread can continue. * * Returns: on success. * * Throws: if thread synchronization fails somewhere. * if something's wrong with . */ int esl_workqueue_WorkerUpdate(ESL_WORK_QUEUE *queue, void *in, void **out) { int cnt; int inx; int queueSize; if (queue == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid queue object"); if (pthread_mutex_lock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex lock failed"); queueSize = queue->queueSize; /* check if the caller is queuing up an item */ if (in != NULL) { /* check to make sure we don't overflow */ if (queue->readerQueueCnt >= queueSize) ESL_EXCEPTION(eslEINVAL, "Reader queue overflow"); inx = (queue->readerQueueHead + queue->readerQueueCnt) % queueSize; queue->readerQueue[inx] = in; cnt = queue->readerQueueCnt++; if (cnt == 0) { if (pthread_cond_signal (&queue->readerQueueCond) != 0) ESL_EXCEPTION(eslESYS, "cond signal failed"); } } /* check if the caller is waiting for a queued item */ if (out != NULL) { if (queue->workerQueueCnt == 0) { /* wait for a processed buffers to be returned */ ++queue->pendingWorkers; while (queue->workerQueueCnt == 0) { if (pthread_cond_wait (&queue->workerQueueCond, &queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "cond wait failed"); } --queue->pendingWorkers; } inx = queue->workerQueueHead; *out = queue->workerQueue[inx]; queue->workerQueue[inx] = NULL; queue->workerQueueHead = (queue->workerQueueHead + 1) % queueSize; --queue->workerQueueCnt; } if (pthread_mutex_unlock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed"); return eslOK; } /* Function: esl_workqueue_Dump() * Synopsis: Print the contents of the queues. * Incept: MSF, Thu Jun 18 11:51:39 2009 * * Purpose: Print the contents of the queues and their pointers. * * Returns: on success. */ int esl_workqueue_Dump(ESL_WORK_QUEUE *queue) { int i; if (queue == NULL) ESL_EXCEPTION(eslEINVAL, "Invalid queue object"); if (pthread_mutex_lock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex lock failed"); printf ("Reader head: %2d count: %2d\n", queue->readerQueueHead, queue->readerQueueCnt); printf ("Worker head: %2d count: %2d\n", queue->workerQueueHead, queue->workerQueueCnt); for (i = 0; i < queue->queueSize; ++i) { printf (" %2d: %p %p\n", i, queue->readerQueue[i], queue->workerQueue[i]); } printf ("Pending: %2d\n\n", queue->pendingWorkers); if (pthread_mutex_unlock (&queue->queueMutex) != 0) ESL_EXCEPTION(eslESYS, "mutex unlock failed"); return eslOK; } /***************************************************************** * 2. Example *****************************************************************/ #ifdef eslWORKQUEUE_EXAMPLE #include "easel.h" #include "esl_threads.h" #include "esl_workqueue.h" typedef struct { char id; ESL_WORK_QUEUE *queue; } WORK_INFO; /* gcc --std=gnu99 -g -Wall -pthread -o esl_workqueue_example -I. -DeslWORKQUEUE_EXAMPLE esl_workqueue.c easel.c */ static void worker_thread(void *data) { ESL_THREADS *thr = (ESL_THREADS *) data; WORK_INFO *info = NULL; int idx; int *obj; esl_threads_Started(thr, &idx); info = (WORK_INFO *) esl_threads_GetData(thr, idx); printf("THREAD %c: ready\n", info->id); esl_workqueue_WorkerUpdate(info->queue, NULL, (void *) &obj); while (*obj > 0) { printf("THREAD %c: processing %d\n", info->id, *obj); esl_workqueue_WorkerUpdate(info->queue, obj, (void *) &obj); } printf("THREAD %c: done\n", info->id); esl_threads_Finished(thr, idx); return; } int main(void) { int i; int ncpu = 4; int iter = 25; WORK_INFO *worker = NULL; ESL_THREADS *thr = NULL; ESL_WORK_QUEUE *queue = NULL; int *objs = NULL; int *obj; objs = malloc(sizeof(int) * ncpu * 2); worker = malloc(sizeof(WORK_INFO) * ncpu); thr = esl_threads_Create(&worker_thread); /* Create a work queue that is able to hold two items per thread. * The idea is that while one object is being processed by a * worker thread, another item is being readied. So, when the * worker thread has completed processing its current object, * its next object to processes is hopefully waiting. */ queue = esl_workqueue_Create(ncpu * 2); for (i = 0; i < ncpu * 2; i++) { objs[i] = 0; esl_workqueue_Init(queue, &objs[i]); } for (i = 0; i < ncpu; i++) { worker[i].id = 'A' + i; worker[i].queue = queue; esl_threads_AddThread(thr, (void *) &worker[i]); } esl_threads_WaitForStart (thr); /* For N number of iterations, get an object that has been * processed, i.e. on the readers input queue and place it * on the ready queue. */ esl_workqueue_ReaderUpdate(queue, NULL, (void **) &obj); for (i = 1; i <= iter; ++i) { *obj = i; printf("Item %d is ready to be processed\n", *obj); esl_workqueue_ReaderUpdate(queue, obj, (void **) &obj); } /* put zeros on the queues to signal the worker that we are done */ for (i = 0; i < ncpu; ++i) { *obj = 0; esl_workqueue_ReaderUpdate(queue, obj, (void **) &obj); } /* The worker threads now run their work. */ esl_threads_WaitForFinish(thr); esl_threads_Destroy(thr); esl_workqueue_Destroy(queue); free(worker); free(objs); return eslOK; } #endif /*eslWORKQUEUE_EXAMPLE*/ #endif /* HAVE_PTHREAD */ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_workqueue.c 685 2011-05-23 14:27:52Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_workqueue.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_gev.c0000664361611702660230000007423212473612606015163 0ustar wheelerteddy/* Statistical routines for generalized extreme value (GEV) distributions. * * GEV distribution * G(x) = exp{ -[1 + \alpha \lambda(x - \mu)]^{-1/\alpha} } * where: * \mu = location parameter * \lambda = scale parameter (\lambda = 1/\sigma, in [Coles01] notation) * \alpha = shape parameter (\alpha = \xi, in [Coles01] notation) * * lim_{\alpha -> 0} is a type I EVD (Gumbel) * \alpha > 0 is a Type II EVD (Frechet) * \alpha < 0 is a Type III EVD (Weibull) * * Reference: * [Coles01] * S. Coles, An Introduction to Statistical Modeling of Extreme Values, * Springer, 2001. * * Xref: * STL9/118, 2005/0712-easel-gev-impl. Verified against evd package in R. */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_stats.h" #include "esl_gev.h" #ifdef eslAUGMENT_RANDOM #include "esl_random.h" #endif #ifdef eslAUGMENT_MINIMIZER #include "esl_minimizer.h" #endif /**************************************************************************** * Routines for evaluating densities and distributions ****************************************************************************/ /* Function: esl_gev_pdf() * * Purpose: Calculates the probability density function for the * generalized extreme value distribution, $P(X=x)$, given * quantile and GEV location, scale, shape parameters * , , . */ double esl_gev_pdf(double x, double mu, double lambda, double alpha) { double y = lambda * (x-mu); double ya1 = 1. + alpha * y; double lya1; /* Special case: if alpha is tiny, approximate by a Gumbel */ if (fabs(y*alpha) < 1e-12) return (lambda * exp(-y - exp(-y))); /* Else, use GEV; but use log/exp to avoid a pow() call, * as that's almost 2x faster (on my machine anyway). */ if (ya1 <= 0) return 0.; lya1 = log(ya1); return (lambda * exp(-(1.+ 1./alpha)*lya1 - exp(-lya1/alpha))); } /* Function: esl_gev_logpdf() * * Purpose: Calculates the log probability density function for the * generalized extreme value distribution, $\log P(X=x)$, * given quantile and GEV location, scale, shape * parameters , , . */ double esl_gev_logpdf(double x, double mu, double lambda, double alpha) { double y = lambda *(x-mu); double ya1 = 1. + alpha*y; double lya1; /* Special case: if alpha is tiny, approx by a Gumbel */ if (fabs(y*alpha) < 1e-12) return ((log(lambda) - y) - exp(-y)); /* It's important not to return NaN for this domain error; * minimizer relies on being able to compare logL's for any parameter, * and you can't compare NaN to anything. */ if (ya1 <= 0) return -eslINFINITY; lya1 = log(ya1); return ( (log(lambda) - (1.+1./alpha)*lya1) - exp(-lya1/alpha)); } /* Function: esl_gev_cdf() * * Purpose: Calculates the cumulative distribution function for the * generalized extreme value distribution, $P(X \leq x)$, * given quantile and GEV location, scale, shape * parameters , , . */ double esl_gev_cdf(double x, double mu, double lambda, double alpha) { double y = lambda *(x-mu); double ya1 = 1. + alpha*y; double lya1; /* Special case: if alpha is tiny, approx by a Gumbel */ if (fabs(y*alpha) < 1e-12) return (exp(-exp(-y))); if (ya1 <= 0) { if (x < mu) return 0.0; /* the frechet case */ else return 1.0; /* the weibull case */ } lya1 = log(ya1); return (exp(-exp(-lya1/alpha))); } /* Function: esl_gev_logcdf() * * Purpose: Calculates the log of the cumulative distribution function for a * generalized extreme value distribution, $\log P(X \leq x)$, * given quantile and GEV location, scale, shape * parameters , , . */ double esl_gev_logcdf(double x, double mu, double lambda, double alpha) { double y = lambda *(x-mu); double ya1 = 1. + alpha*y; double lya1; /* Special case: if alpha is tiny, approx by a Gumbel */ if (fabs(y*alpha) < 1e-12) return (-exp(-y)); if (ya1 <= 0) { if (x < mu) return -eslINFINITY; /* Frechet */ else return 0.0; /* Weibull */ } lya1 = log(ya1); return (-exp(-lya1/alpha)); } /* Function: esl_gev_surv() * * Purpose: Calculates the survivor function, $P(X>x)$ (that is, 1-cdf), * the right tail's probability mass, given quantile and * GEV location, scale, shape parameters , , . */ double esl_gev_surv(double x, double mu, double lambda, double alpha) { double y = lambda *(x-mu); double ya1 = 1. + alpha*y; double lya1; /* Special case: for tiny alpha, use Gumbel (xref esl_gumbel.c) */ if (fabs(y*alpha) < 1e-12) return ((y > -0.5*log(DBL_EPSILON)) ? exp(-y) : (1 - exp(-exp(-y)))); if (ya1 <= 0) { if (x < mu) return 1.0; /* the frechet case */ else return 0.0; /* the weibull case */ } lya1 = log(ya1)/alpha; return ((lya1 > -0.5*log(DBL_EPSILON)) ? exp(-lya1) : (1 - exp(-exp(-lya1)))); } /* Function: esl_gev_logsurv() * * Purpose: Calculates the log survivor function $\log P(X>x)$ for a * generalized extreme value distribution (that is, * $\log (1 - \mbox{cdf})$, the log of the right tail's probability * mass), given quantile and GEV location, scale, shape * parameters , , . */ double esl_gev_logsurv(double x, double mu, double lambda, double alpha) { double y = lambda *(x-mu); double ya1 = 1. + alpha*y; double lya1; /* Special case: for tiny alpha, use Gumbel (xref esl_gumbel.c) */ if (fabs(y*alpha) < 1e-12) { if (y > -0.5 * log(DBL_EPSILON)) return (-y); else if (y < -2.9) return (-exp(-exp(-y))); else return (log(1-exp(-exp(-y)))); } /* See esl_gumbel.c for analysis of the crossovers in * the three cases (small, large, and ok lya1) */ if (ya1 <= 0) { if (x < mu) return 1.0; /* Frechet case */ else return -eslINFINITY; /* Weibull case */ } lya1 = log(ya1)/alpha; if (lya1 > -0.5 * log(DBL_EPSILON)) return (-lya1); else if (lya1 < -2.9) return (-exp(-exp(-lya1))); else return (log(1-exp(-exp(-lya1)))); } /* Function: esl_gev_invcdf() * * Purpose: Calculates the inverse CDF of the GEV: given a probability *

($0 < p < 1$), returns the quantile which would * give

as its CDF, for a generalized extreme value * distribution with parameters , , and . */ double esl_gev_invcdf(double p, double mu, double lambda, double alpha) { /* failover to Gumbel sample, for tiny alpha */ if (fabs(alpha) < 1e-12) return (mu - log(-1. * log(p)) / lambda); return mu + (exp(-alpha*log(-log(p))) - 1.) / (alpha * lambda) ; } /*-------------------- end densities & distributions ------------------------*/ /***************************************************************** * Generic API routines: for general interface w/ histogram module *****************************************************************/ /* Function: esl_gev_generic_pdf() * * Purpose: Generic-API version of PDF. */ double esl_gev_generic_pdf(double x, void *params) { double *p = (double *) params; return esl_gev_pdf(x, p[0], p[1], p[2]); } /* Function: esl_gev_generic_cdf() * * Purpose: Generic-API version of CDF. */ double esl_gev_generic_cdf(double x, void *params) { double *p = (double *) params; return esl_gev_cdf(x, p[0], p[1], p[2]); } /* Function: esl_gev_generic_surv() * * Purpose: Generic-API version of survival function. */ double esl_gev_generic_surv(double x, void *params) { double *p = (double *) params; return esl_gev_surv(x, p[0], p[1], p[2]); } /* Function: esl_gev_generic_invcdf() * * Purpose: Generic-API version of inverse CDF. */ double esl_gev_generic_invcdf(double p, void *params) { double *v = (double *) params; return esl_gev_invcdf(p, v[0], v[1], v[2]); } /*------------------------- end of generic API --------------------------*/ /**************************************************************************** * Routines for dumping plots for files ****************************************************************************/ /* Function: esl_gev_Plot() * * Purpose: Plot some GEV function (for instance, * ) for parameters and , for * a range of quantiles x from to in steps of ; * output to an open stream in xmgrace XY input format. * * Returns: on success. * * Throws: on any system write error, such as filled disk. */ int esl_gev_Plot(FILE *fp, double mu, double lambda, double alpha, double (*func)(double x, double mu, double lambda, double alpha), double xmin, double xmax, double xstep) { double x; for (x = xmin; x <= xmax; x += xstep) if (fprintf(fp, "%f\t%g\n", x, (*func)(x, mu, lambda, alpha)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "gev plot write failed"); if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "gev plot write failed"); return eslOK; } /*-------------------- end plot dumping routines ---------------------------*/ /**************************************************************************** * Routines for sampling (requires augmentation w/ random module) ****************************************************************************/ #ifdef eslAUGMENT_RANDOM /* Function: esl_gev_Sample() * * Purpose: Sample a GEV-distributed random variate, * by the transformation method. */ double esl_gev_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double alpha) { double p; p = esl_rnd_UniformPositive(r); return esl_gev_invcdf(p, mu, lambda, alpha); } #endif /*eslAUGMENT_RANDOM*/ /*--------------------------- end sampling ---------------------------------*/ /**************************************************************************** * Maximum likelihood fitting to GEV distributions ****************************************************************************/ #ifdef eslAUGMENT_MINIMIZER /* Easel's conjugate gradient descent code allows a single void ptr to * point to any necessary fixed data, so we put everything into one * structure: */ struct gev_data { double *x; /* data: n observed samples */ int n; /* number of observed samples */ int is_censored; /* TRUE if a censored, not complete dataset */ double phi; /* censoring/truncation threshold: obs x_i > phi */ int z; /* # of censored samples */ }; /* gev_func(): * Returns the neg log likelihood of a complete or censored GEV data sample; * in the API of the conjugate gradient descent optimizer in esl_minimizer. */ static double gev_func(double *p, int nparam, void *dptr) { double mu, w, lambda, alpha; struct gev_data *data; double logL; int i; /* Unpack what the optimizer gave us. */ mu = p[0]; w = p[1]; /* w is a c.o.v. to allow unconstrained opt of lambda>0 */ lambda = exp(w); alpha = p[2]; data = (struct gev_data *) dptr; logL = 0.; for (i = 0; i < data->n; i++) logL += esl_gev_logpdf(data->x[i], mu, lambda, alpha); if (data->is_censored) logL += data->z * esl_gev_logcdf(data->phi, mu, lambda, alpha); return -logL; /* goal: minimize NLL */ } /* gev_gradient() * Computes the gradient of the negative log likelihood of a complete * or censored GEV sample; in the API of the CG optimizer. */ static void gev_gradient(double *p, int nparam, void *dptr, double *dp) { double mu, w, lambda, alpha; struct gev_data *data; double *x; int i; double dmu, dw, dalpha; double y, ay, ay1, lay1; /* Unpack what the optimizer gave us */ mu = p[0]; w = p[1]; /* w is a c.o.v. to allow unconstrained opt of lambda>0 */ lambda = exp(w); alpha = p[2]; data = (struct gev_data *) dptr; x = data->x; dmu = 0.; dw = data->n; /* d/dw, term1 */ dalpha = 0.; for (i = 0; i < data->n; i++) { y = lambda * (x[i]-mu); ay = alpha*y; ay1 = 1+ay; /* 1+ay=1, for ay < DBL_EPSILON */ lay1 = log(ay1); /* d/dmu, term1. (will become 1, for small alpha.) */ dmu += (alpha+1) / ay1; /* d/dmu, term2. For tiny ay, use log(1+x) ~ x to simplify. */ if (fabs(ay) < 1e-12) dmu -= exp(-y); else dmu -= exp(-(1+1/alpha) * lay1); /* d/dw, term2. converges to -y, for small alpha. */ dw -= y*(1+alpha) / ay1; /* d/dw, term2. For tiny ay, use log(1+x) ~ x to simplify. */ if (fabs(ay) < 1e-12) dw += y*exp(-y); else dw += y*exp(-(1+1/alpha) * lay1); /* d/dalpha, term1 */ dalpha -= (1 + 1/alpha) * y/ay1; /* d/dalpha, terms 2,3,4: for tiny ay, simplify. * d/dalpha will go to +/-inf for alpha ~ 0, so watch out. */ if (fabs(ay) < 1e-12) { dalpha += y/alpha; dalpha += y*exp(-y) / (alpha*ay1); dalpha -= y*exp(-y) / alpha; } else { dalpha += lay1 / (alpha*alpha); dalpha += y * exp(-lay1/alpha) / (alpha*ay1); dalpha -= lay1 * exp(-lay1/alpha) / (alpha*alpha); } } dmu *= lambda; /* Add the terms that come from the censored data gradient, * if it's a censored dataset. */ if (data->is_censored) { y = lambda * (data->phi - mu); ay = alpha * y; ay1 = 1 + ay; lay1 = log(ay1); if (fabs(ay) < 1e-12) { /* special case of small alpha, converging towards Gumbel */ dmu -= data->z * lambda * exp(-y) / ay1; dw += data->z * y * exp(-y) / ay1; dalpha -= data->z * exp(-y) * y/alpha * ay/ay1; } else { /* normal case */ dmu -= data->z * lambda * exp(-lay1/alpha) / ay1; dw += data->z * y * exp(-lay1/alpha) / ay1; dalpha -= data->z * exp(-lay1/alpha) * (lay1/(alpha*alpha) - y/(alpha*ay1)); } } /* Return the negative gradient, because we're minimizing NLL, * not maximizing LL. */ dp[0] = -dmu; dp[1] = -dw; dp[2] = -dalpha; return; } /* fitting_engine() * Fitting code shared by the FitComplete() and FitCensored() API. * * The fitting_engine(), in turn, is just an adaptor wrapped around * the conjugate gradient descent minimizer. */ static int fitting_engine(struct gev_data *data, double *ret_mu, double *ret_lambda, double *ret_alpha) { double p[3]; /* parameter vector */ double u[3]; /* max initial step size vector */ double wrk[12]; /* 4 tmp vectors of length 3 */ double mean, variance; double mu, lambda, alpha; /* initial param guesses */ double tol = 1e-6; /* convergence criterion for CG */ double fx; /* f(x) at minimum; currently unused */ int status; /* Make an initial guess. * (very good guess for complete data; merely sufficient for censored) */ esl_stats_DMean(data->x, data->n, &mean, &variance); lambda = eslCONST_PI / sqrt(6.*variance); mu = mean - 0.57722/lambda; alpha = 0.0001; p[0] = mu; p[1] = log(lambda); /* c.o.v. from lambda to w */ p[2] = alpha; /* max initial step sizes: keeps bracketing from exploding */ u[0] = 1.0; u[1] = fabs(log(0.02)); u[2] = 0.02; /* pass problem to the optimizer */ status = esl_min_ConjugateGradientDescent(p, u, 3, &gev_func, &gev_gradient, (void *)data, tol, wrk, &fx); *ret_mu = p[0]; *ret_lambda = exp(p[1]); *ret_alpha = p[2]; return status; } /* Function: esl_gev_FitComplete() * * Purpose: Given an array of GEV-distributed samples , * return maximum likelihood parameters , * , and . * * Uses a conjugate gradient descent algorithm that * can be computationally intensive. A typical problem * involving 10,000-100,000 points may take a second * to solve. * * Note: Just a wrapper: sets up the problem for fitting_engine(). * * Args: x - complete GEV-distributed data [0..n-1] * n - number of samples in * ret_mu - RETURN: maximum likelihood estimate of mu * ret_lambda - RETURN: maximum likelihood estimate of lambda * ret_alpha - RETURN: maximum likelihood estimate of alpha * * Returns: on success. * * Throws: if the fit doesn't converge. * * Xref: STL9/118-120. */ int esl_gev_FitComplete(double *x, int n, double *ret_mu, double *ret_lambda, double *ret_alpha) { struct gev_data data; data.x = x; data.n = n; data.is_censored = FALSE; data.phi = -DBL_MAX; data.z = 0; return (fitting_engine(&data, ret_mu, ret_lambda, ret_alpha)); } /* Function: esl_gev_FitCensored() * * Purpose: Given a left-censored array of GEV-distributed samples * , the number of censored samples , and * the censoring value (where all $x_i > \phi$ and * all $z$ censored samples are $\leq \phi$); * return maximum likelihood parameters , * , and . * * Args: x - censored GEV-distributed data [0..n-1], all > phi * n - number of samples in * z - number of censored samples, all <= phi * phi - censoring threshold * ret_mu - RETURN: maximum likelihood estimate of mu * ret_lambda - RETURN: maximum likelihood estimate of lambda * ret_alpha - RETURN: maximum likelihood estimate of alpha * * Note: Just a wrapper: sets up the problem for fitting_engine(). * * Returns: on success. * * Throws: if the fit doesn't converge. * * Xref: STL9/133 */ int esl_gev_FitCensored(double *x, int n, int z, double phi, double *ret_mu, double *ret_lambda, double *ret_alpha) { struct gev_data data; data.x = x; data.n = n; data.is_censored = TRUE; data.phi = phi; data.z = z; return (fitting_engine(&data, ret_mu, ret_lambda, ret_alpha)); } #endif /*eslAUGMENT_MINIMIZER*/ /*--------------------------- end fitting ----------------------------------*/ /**************************************************************************** * Example, test, and stats drivers ****************************************************************************/ /* Example main() */ #ifdef eslGEV_EXAMPLE /*::cexcerpt::gev_example::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslGEV_EXAMPLE -DeslAUGMENT_RANDOM\ -DeslAUGMENT_MINIMIZER esl_gev.c esl_random.c esl_minimizer.c\ esl_vectorops.c easel.c -lm * run: ./example */ #include #include "easel.h" #include "esl_random.h" #include "esl_minimizer.h" #include "esl_gev.h" int main(int argc, char **argv) { double est_mu, est_lambda, est_alpha; double z; int i; int n = 10000; /* simulate 10,000 samples */ double mu = -20.0; /* with mu = -20 */ double lambda = 0.4; /* and lambda = 0.4 */ double alpha = 0.1; /* and alpha = 0.1 */ double min = 9999.; double max = -9999.; double *x = malloc(sizeof(double) * n); ESL_RANDOMNESS *r = esl_randomness_Create(0);; for (i = 0; i < n; i++) /* generate the 10,000 samples */ { x[i] = esl_gev_Sample(r, mu, lambda, alpha); if (x[i] < min) min = x[i]; if (x[i] > max) max = x[i]; } z = esl_gev_surv(max, mu, lambda, alpha); /* right tail p~1e-4 >= max */ printf("max = %6.1f P(>max) = %g E=%6.3f\n", max, z, z*(double)n); z = esl_gev_cdf(min, mu, lambda, alpha); /* left tail p~1e-4 < min */ printf("min = %6.1f P(<=min) = %g E=%6.3f\n", min, z, z*(double)n); esl_gev_FitComplete(x, n, &est_mu, &est_lambda, &est_alpha); printf("Parametric mu = %6.1f. Estimated mu = %6.2f. Difference = %.1f%%.\n", mu, est_mu, 100. * fabs((est_mu - mu) / mu)); printf("Parametric lambda = %6.2f. Estimated lambda = %6.2f. Difference = %.1f%%.\n", lambda, est_lambda, 100. * fabs((est_lambda - lambda) /lambda)); printf("Parametric alpha = %6.4f. Estimated alpha = %6.4f. Difference = %.1f%%.\n", alpha, est_alpha, 100. * fabs((est_alpha - alpha) /alpha)); free(x); esl_randomness_Destroy(r); return 0; } /*::cexcerpt::gev_example::end::*/ #endif /*eslGEV_EXAMPLE*/ #ifdef eslGEV_STATS /* compile: gcc -g -Wall -I. -o stats -DeslGEV_STATS -DeslAUGMENT_RANDOM\ -DeslAUGMENT_MINIMIZER esl_gev.c esl_random.c esl_minimizer.c\ esl_vectorops.c easel.c -lm * run: ./stats ... * e.g. * ./stats 1 2 3 * would run tests 1, 2, 3. */ #include #include #include "easel.h" #include "esl_random.h" #include "esl_minimizer.h" #include "esl_gev.h" #define MAX_STATS_TESTS 10 static void stats_sample(FILE *fp); static int stats_fittest(FILE *fp, int ntrials, int n, double mu, double lambda, double alpha); int main(int argc, char **argv) { FILE *fp; double mu = 0.0; double lambda = 1.0; double xmin = -20.; double xmax = 60.; double xstep = 0.1; double x,z; int do_test[MAX_STATS_TESTS+1]; int i; for (i = 0; i <= MAX_STATS_TESTS; i++) do_test[i] = 0; for (i = 1; i < argc; i++) do_test[atoi(argv[i])] = 1; /* stats.1: xmgrace xy file w/ densities for Gumbel, Frechet, Weibull */ if (do_test[1]) { if ((fp = fopen("stats.1", "w")) == NULL) abort(); for (x = xmin; x <= xmax; x+= xstep) fprintf(fp, "%.1f %9.7f\n", x, esl_gev_pdf(x, mu, lambda, 0.0)); fprintf(fp, "&\n"); for (x = xmin; x <= xmax; x+= xstep) fprintf(fp, "%.1f %9.7f\n", x, esl_gev_pdf(x, mu, lambda, 0.1)); fprintf(fp, "&\n"); for (x = xmin; x <= xmax; x+= xstep) fprintf(fp, "%.1f %9.7f\n", x, esl_gev_pdf(x, mu, lambda, -0.1)); fprintf(fp, "&\n"); fclose(fp); } /* stats.2: xmgrace xy file w/ log densities for Gumbel, Frechet, Weibull */ if (do_test[2]) { if ((fp = fopen("stats.2", "w")) == NULL) abort(); for (x = xmin; x <= xmax; x+= xstep) { z = esl_gev_logpdf(x, mu, lambda, 0.0); if (finite(z)) fprintf(fp, "%.1f %9.7f\n", x, z); } fprintf(fp, "&\n"); for (x = xmin; x <= xmax; x+= xstep) { z = esl_gev_logpdf(x, mu, lambda, 0.1); if (finite(z)) fprintf(fp, "%.1f %9.7f\n", x, z); } fprintf(fp, "&\n"); for (x = xmin; x <= xmax; x+= xstep) { z = esl_gev_logpdf(x, mu, lambda, -0.1); if (finite(z)) fprintf(fp, "%.1f %9.7f\n", x, z); } fprintf(fp, "&\n"); fclose(fp); } /* stats.3: xmgrace xy file w/ CDF for Gumbel, Frechet, Weibull */ if (do_test[3]) { if ((fp = fopen("stats.3", "w")) == NULL) abort(); for (x = xmin; x <= xmax; x+= xstep) fprintf(fp, "%.1f %9.7f\n", x, esl_gev_cdf(x, mu, lambda, 0.0)); fprintf(fp, "&\n"); for (x = xmin; x <= xmax; x+= xstep) fprintf(fp, "%.1f %9.7f\n", x, esl_gev_cdf(x, mu, lambda, 0.6)); fprintf(fp, "&\n"); for (x = xmin; x <= xmax; x+= xstep) fprintf(fp, "%.1f %9.7f\n", x, esl_gev_cdf(x, mu, lambda, -0.6)); fprintf(fp, "&\n"); fclose(fp); } /* stats.4: xmgrace xy file w/ logCDF for Gumbel, Frechet, Weibull */ if (do_test[4]) { if ((fp = fopen("stats.4", "w")) == NULL) abort(); for (x = xmin; x <= xmax; x+= xstep) { z = esl_gev_logcdf(x, mu, lambda, 0.0); if (finite(z)) fprintf(fp, "%.1f %9.7f\n", x, z); } fprintf(fp, "&\n"); for (x = xmin; x <= xmax; x+= xstep) { z = esl_gev_logcdf(x, mu, lambda, 0.2); if (finite(z)) fprintf(fp, "%.1f %9.7f\n", x, z); } fprintf(fp, "&\n"); for (x = xmin; x <= xmax; x+= xstep) { z = esl_gev_logcdf(x, mu, lambda, -0.2); if (finite(z)) fprintf(fp, "%.1f %9.7f\n", x, z); } fprintf(fp, "&\n"); fclose(fp); } /* stats.5: xmgrace xy file w/ surv for Gumbel, Frechet, Weibull */ if (do_test[5]) { if ((fp = fopen("stats.5", "w")) == NULL) abort(); for (x = xmin; x <= xmax; x+= xstep) fprintf(fp, "%.1f %9.7f\n", x, esl_gev_surv(x, mu, lambda, 0.0)); fprintf(fp, "&\n"); for (x = xmin; x <= xmax; x+= xstep) fprintf(fp, "%.1f %9.7f\n", x, esl_gev_surv(x, mu, lambda, 0.6)); fprintf(fp, "&\n"); for (x = xmin; x <= xmax; x+= xstep) fprintf(fp, "%.1f %9.7f\n", x, esl_gev_surv(x, mu, lambda, -0.6)); fprintf(fp, "&\n"); fclose(fp); } /* stats.6: xmgrace xy file w/ logsurv for Gumbel, Frechet, Weibull */ if (do_test[6]) { if ((fp = fopen("stats.6", "w")) == NULL) abort(); for (x = xmin; x <= xmax; x+= xstep) { z = esl_gev_logsurv(x, mu, lambda, 0.0); if (finite(z)) fprintf(fp, "%.1f %9.7f\n", x, z); } fprintf(fp, "&\n"); for (x = xmin; x <= xmax; x+= xstep) { z = esl_gev_logsurv(x, mu, lambda, 0.2); if (finite(z)) fprintf(fp, "%.1f %9.7f\n", x, z); } fprintf(fp, "&\n"); for (x = xmin; x <= xmax; x+= xstep) { z = esl_gev_logsurv(x, mu, lambda, -0.2); if (finite(z)) fprintf(fp, "%.1f %9.7f\n", x, z); } fprintf(fp, "&\n"); fclose(fp); } /* stats.7. R input file of 10,000 random GEV samples. */ if (do_test[7]) { if ((fp = fopen("stats.7", "w")) == NULL) abort(); stats_sample(fp); fclose(fp); } /* stats.8. Test 500 fits of the Frechet. */ if (do_test[8]) { if ((fp = fopen("stats.8", "w")) == NULL) abort(); stats_fittest(fp, 500, 10000, mu, lambda, 0.2); fclose(fp); } /* stats.9. Test 500 fits of the near-Gumbel */ if (do_test[9]) { if ((fp = fopen("stats.9", "w")) == NULL) abort(); stats_fittest(fp, 500, 10000, mu, lambda, 0.00001); fclose(fp); } /* stats.10. Test 500 fits of the Weibull */ if (do_test[10]) { if ((fp = fopen("stats.10", "w")) == NULL) abort(); stats_fittest(fp, 500, 10000, mu, lambda, -0.2); fclose(fp); } return 0; } /* stats_sample() * Creates an R input table containing 10,000 random samples * each in columns labeled "gumbel", "frechet", "weibull". * To process in R (remember that R uses 1/lambda for scale): library(ismev) library(evd) z=read.table("stats.7") x1 <- sort(z$gumbel, decreasing=T) x2 <- sort(z$frechet, decreasing=T) x3 <- sort(z$weibull, decreasing=T) q1 <- qgumbel(ppoints(10000), -20., 1./0.4) q2 <- qgev(ppoints(10000), -20., 1./0.4, 0.2) q3 <- qgev(ppoints(10000), -20., 1./0.4, -0.2) xax<- seq(-40,40,by=0.1) a1 <- dgumbel(xax, -20, 1/0.4) a2 <- dgev(xax, -20, 1/0.4, 0.2) a3 <- dgev(xax, -20, 1/0.4, -0.2) qqplot(x1,q1); abline(0,1) qqplot(x2,q2); abline(0,1) qqplot(x3,q3); abline(0,1) plot(density(x1,bw=0.2)); lines(xax,a1) plot(density(x2,bw=0.2)); lines(xax,a2) plot(density(x3,bw=0.2)); lines(xax,a3) */ static void stats_sample(FILE *fp) { ESL_RANDOMNESS *r; double mu = -20.; double lambda = 0.4; int n = 10000; double a,b,c; int i; r = esl_randomness_Create(42); fprintf(fp, " gumbel \t frechet\t weibull\n"); for (i = 1; i <= n; i++) { a = esl_gev_Sample(r, mu, lambda, 0.0); b = esl_gev_Sample(r, mu, lambda, 0.2); c = esl_gev_Sample(r, mu, lambda, -0.2); fprintf(fp, "%d\t%8.4f\t%8.4f\t%8.4f\n", i, a,b,c); } esl_randomness_Destroy(r); } /* stats_fittest() * Samples numbers from a GEV w/ parameters , , ; * then fits to a GEV and print info about how good the fit is. * * Repeat this times. * * For each trial, outputs a line to : * <%err>\ * <%err> * * Each sampled set is done with the random number generator seeded to * the trial number. This should make each set reproducible and * identical to the sets used to test R's fitting. * * xref STL9/191; xref 2005/0718-weibull-debugging */ static int stats_fittest(FILE *fp, int ntrials, int n, double mu, double lambda, double alpha) { ESL_RANDOMNESS *r = NULL; double *x = NULL; int i; int trial; double est_mu, est_lambda, est_alpha; double z; double nll, est_nll; int status; ESL_ALLOC(x, sizeof(double) * n); for (trial = 1; trial <= ntrials; trial++) { r = esl_randomness_Create(trial); nll = 0.; for (i = 0; i < n; i++) { x[i] = esl_gev_Sample(r, mu, lambda, alpha); nll -= esl_gev_logpdf(x[i], mu, lambda, alpha); } esl_randomness_Destroy(r); esl_gev_FitComplete(x, n, &est_mu, &est_lambda, &est_alpha); est_nll = 0.; for (i = 0; i < n; i++) est_nll -= esl_gev_logpdf(x[i], est_mu, est_lambda, est_alpha); z = mu + (exp(-alpha*log(1/(double)n)) - 1 ) / (alpha*lambda);/* x at E=1*/ z = (double) n * esl_gev_surv(z, est_mu, est_lambda, est_alpha); /* E at x */ printf("%4d %10.2f %10.2f %8.3f %8.3f %8.5f %8.3f %8.5f %8.3f %6.4f\n", trial, nll, est_nll, est_mu, 100* fabs((est_mu-mu)/mu), est_lambda, 100* fabs((est_lambda-lambda)/lambda), est_alpha, 100* fabs((est_alpha-alpha)/alpha), z); } free(x); return eslOK; ERROR: return status; } #endif /*eslGEV_STATS*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_gev.c 727 2011-10-24 17:17:32Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_gev.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_buffer.h0000664361611702660230000001373512473612605015660 0ustar wheelerteddy/* An input parsing abstraction: an input buffer (file, stream, etc.) */ #ifndef eslBUFFER_INCLUDED #define eslBUFFER_INCLUDED #include #define eslBUFFER_PAGESIZE 4096 /* default for b->pagesize */ #define eslBUFFER_SLURPSIZE 4194304 /* switchover from slurping whole file to mmap() */ enum esl_buffer_mode_e { eslBUFFER_UNSET = 0, eslBUFFER_STREAM = 1, /* chunk in mem[0..n-1] = input[baseoffset..baseoffset-n-1]; balloc>0; offset>=0; fp open */ eslBUFFER_CMDPIPE = 2, /* chunk in mem[0..n-1] = input[baseoffset..baseoffset-n-1]; balloc>0; offset>=0; fp open */ eslBUFFER_FILE = 3, /* chunk in mem[0..n-1] = input[baseoffset..baseoffset-n-1]; balloc>0; offset>=0; fp open */ eslBUFFER_ALLFILE = 4, /* whole file in mem[0..n-1]; balloc=0; offset=0; fp=NULL */ eslBUFFER_MMAP = 5, /* whole file in mem[0..n-1]; balloc=0; offset=0; fp=NULL */ eslBUFFER_STRING = 6 /* whole str in mem[0..n-1]; balloc=0; offset=0; fp=NULL */ }; typedef struct { char *mem; /* the buffer */ esl_pos_t n; /* curr buf length; mem[0..n-1] contains valid bytes */ esl_pos_t balloc; /* curr buf alloc; mem[0..balloc-1] may be used */ esl_pos_t pos; /* curr buf parse position; n-pos = # of parseable bytes */ esl_pos_t baseoffset; /* offset of byte mem[0] in the stream */ esl_pos_t anchor; /* buf[anchor..n-1] safe from overwrite [-1=unset] */ int nanchor; /* number of anchors set at */ FILE *fp; /* open stream; NULL if already entirely in memory */ char *filename; /* for diagnostics. filename; or NULL (stdin, string) */ char *cmdline; /* for diagnostics. NULL, or cmd for CMDPIPE */ esl_pos_t pagesize; /* size of new reads. Guarantee: n-pos >= pagesize */ char errmsg[eslERRBUFSIZE]; /* error message storage */ enum esl_buffer_mode_e mode_is; /* mode (stdin, cmdpipe, file, allfile, mmap, string) */ } ESL_BUFFER; /* 1. The ESL_BUFFER object: opening/closing. */ extern int esl_buffer_Open (const char *filename, const char *envvar, ESL_BUFFER **ret_bf); extern int esl_buffer_OpenFile (const char *filename, ESL_BUFFER **ret_bf); extern int esl_buffer_OpenPipe (const char *filename, const char *cmdfmt, ESL_BUFFER **ret_bf); extern int esl_buffer_OpenMem (const char *p, esl_pos_t n, ESL_BUFFER **ret_bf); extern int esl_buffer_OpenStream(FILE *fp, ESL_BUFFER **ret_bf); extern int esl_buffer_Close(ESL_BUFFER *bf); /* 2. Positioning and anchoring an ESL_BUFFER. */ extern esl_pos_t esl_buffer_GetOffset (ESL_BUFFER *bf); extern int esl_buffer_SetOffset (ESL_BUFFER *bf, esl_pos_t offset); extern int esl_buffer_SetAnchor (ESL_BUFFER *bf, esl_pos_t offset); extern int esl_buffer_SetStableAnchor(ESL_BUFFER *bf, esl_pos_t offset); extern int esl_buffer_RaiseAnchor (ESL_BUFFER *bf, esl_pos_t offset); /* 3. Raw access to the buffer */ extern int esl_buffer_Get(ESL_BUFFER *bf, char **ret_p, esl_pos_t *ret_n); extern int esl_buffer_Set(ESL_BUFFER *bf, char *p, esl_pos_t nused); /* 4. Line-based parsing */ extern int esl_buffer_GetLine (ESL_BUFFER *bf, char **opt_p, esl_pos_t *opt_n); extern int esl_buffer_FetchLine (ESL_BUFFER *bf, char **opt_p, esl_pos_t *opt_n); extern int esl_buffer_FetchLineAsStr(ESL_BUFFER *bf, char **opt_s, esl_pos_t *opt_n); /* 5. Token-based parsing */ extern int esl_buffer_GetToken (ESL_BUFFER *bf, const char *sep, char **opt_p, esl_pos_t *opt_n); extern int esl_buffer_FetchToken (ESL_BUFFER *bf, const char *sep, char **opt_p, esl_pos_t *opt_n); extern int esl_buffer_FetchTokenAsStr(ESL_BUFFER *bf, const char *sep, char **opt_p, esl_pos_t *opt_n); /* 6. Binary (fread-like) parsing */ extern int esl_buffer_Read(ESL_BUFFER *bf, size_t nbytes, void *p); /* Replaces functionality of esl_fileparser module as follows * * esl_fileparser_Open() -> esl_buffer_Open() * esl_fileparser_Create() -> esl_buffer_OpenStream() * esl_fileparser_CreateMapped() -> esl_buffer_OpenMem() * esl_fileparser_SetCommentChar() -> esl_buffer_SetCommentChar() * esl_fileparser_GetToken() -> esl_buffer_GetToken() * esl_fileparser_NextLine() -> do { esl_buffer_GetLine() } while esl_line_IsBlank(); * esl_fileparser_NextLinePeeked() -> unneeded. esl_buffer_Peek*() functionality, syntax different * esl_fileparser_GetTokenOnLine() -> unneeded. esl_buffer_GetToken() has an idiom. * esl_fileparser_GetRemainingLine() -> esl_buffer_GetLine() * esl_fileparser_Destroy() -> esl_buffer_Close() * esl_fileparser_Close() -> esl_buffer_Close() */ /* Replaces functionality of esl_recorder module as follows: * * esl_recorder_Create() -> esl_buffer_OpenStream() * esl_recorder_ResizeTo() * esl_recorder_GetFirst() -> * esl_recorder_GetLast() -> * esl_recorder_GetCurrent() -> * esl_recorder_GetNext() -> * esl_recorder_Destroy() -> esl_buffer_Close() * esl_recorder_Read() -> esl_buffer_GetLine() * esl_recorder_Position() * esl_recorder_MarkBlock() * esl_recorder_UnmarkBlock() * esl_recorder_GetBlock() * */ #endif /*eslBUFFER_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_translate.c0000664361611702660230000004376212473612610016376 0ustar wheelerteddy/* Take a nucleotide sequence and spit out the 6 translated open reading frames as protein sequences. * * WMA March 29, 2013 * * Contents: * 1. esl_trans_6frames - turn a nucleotide sequence into 6 protein sequences, one for each reading frame * 2. esl_trans_s2p - turn a nucleotide sequence into its corresponding protein sequence * 3. esl_trans_seq_stop_split - split a protein sequence which contains stop codons * 4. practice driver */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_translate.h" #include "esl_sq.h" #include "esl_sqio.h" /***************************************************************** * 1. generating the 6 reading frames for a nucleo sequence *****************************************************************/ /* Function: esl_trans_6frames() * Synopsis: Get the 6 translated open reading frames from a nucleotide sequence. * * Args: ESL_SQ *in the input dna/rna sequence * ESL_SQ **out a pointer to a caller created array with 6 items of type ESL_SQ* * where the resulting protein sequences will be placed * * Returns: if it worked, if some allocation or copy failed * */ int esl_trans_6frame(ESL_SQ *in, ESL_SQ **out) { int x; for(x = 0; x < 3; x++) { if(eslOK != esl_trans_s2p(in, &out[x], x, 0)) return eslFAIL; } for(x = 3; x < 6; x++) { if(eslOK != esl_trans_s2p(in, &out[x], x-3, 1)) return eslFAIL; } return eslOK; } /* Function: esl_trans_orf() * Synopsis: Get the open reading frames from a nucleotide sequence. * * Args: ESL_SQ *in the input dna/rna sequence * ESL_SQ ***out a pointer to a new array holding a sequence for each open * reading frame of sufficient size * int* retSeq location where size of returned array will be placed * * Returns: if it worked, if some allocation or copy failed * * Note: This function is tightly coupled with esl_trans_seq_stop_split() * Specifically, the format expected for the names is parsed and * modified to convert from residue index numbers to nucleo * index from the original .fa file. */ int esl_trans_orf(ESL_SQ *in, ESL_SQ ***out, int *retSeq, int minimumResidues) { int x, y; //loop counters int status; //ESL_ALLOC required ESL_SQ *frame; //hold the current reading frames ESL_SQ **splits[6]; //hold the open reading frame shards when split by stop codons int stops[6]; //hold the number of shards per each reading frame int totalStops = 0; //hold the total number of shards among all frames to be output int currentWrite = 0; //the next location to place a new reading frame shard into the output char workbench[256]; //used to build new sequence names char *toStart, *fromStart; //pointer to beginning of residue index in sequence name int toNum, fromNum; //residue index extracted from sequence name if(minimumResidues <= 0) minimumResidues = 15; //default minimum shard size if(out == NULL) return eslFAIL; for(x = 0; x < 3; x++) { //get one of the three forward reading frames if((status = esl_trans_s2p(in, &frame, x, 0)) != eslOK) return status; //split the frame into shards between stop codons if((status = esl_trans_seq_stop_split(frame, &(splits[x]), &stops[x])) != eslOK) return status; esl_sq_Destroy(frame); for(y = 0; y < stops[x]; y++) { //extract the to/from out of the back of the sq name //mess hack gross, but we want nucleotide indexes not residue //expect "NAME_XXXtoYYY" where x is the first residue index in the shard and y is the last toStart = splits[x][y]->name; while(*toStart != '\0') toStart+=1; while(*toStart != 'o') toStart-=1; toStart+=1; toNum = atoi(toStart); fromStart = toStart; while(*fromStart != '_') fromStart-=1; fromStart+=1; toStart[-2]='\0'; fromNum = atoi(fromStart); toStart[-2]='t'; *fromStart = '\0'; strcpy(workbench, splits[x][y]->name); free(splits[x][y]->name); //this memory is no longer needed; new memory will be allocated below //substitute residue index numbers for nucleotide ones esl_sprintf(&(splits[x][y]->name), "%s%dto%d", workbench, x+1+3*(fromNum-1), x+3*(toNum)); } } for(x = 0; x < 3; x++) { //same as the last for loop, except reverse compliment the inputs if((status = esl_trans_s2p(in, &frame, x, 1)) != eslOK) return status; if((status = esl_trans_seq_stop_split(frame, &(splits[x+3]), &stops[x+3])) != eslOK) return status; esl_sq_Destroy(frame); for(y = 0; y < stops[x+3]; y++) { //extract the to/from out of the back of the sq name //mess hack gross, but we want nucleotide indexes not residue toStart = splits[x+3][y]->name; while(*toStart != '\0') toStart+=1; while(*toStart != 'o') toStart-=1; toStart+=1; toNum = atoi(toStart); fromStart = toStart; while(*fromStart != '_') fromStart-=1; fromStart+=1; toStart[-2]='\0'; fromNum = atoi(fromStart); toStart[-2]='t'; *fromStart = '\0'; strcpy(workbench, splits[x+3][y]->name); free(splits[x+3][y]->name); //this memory is no longer needed; new memory will be allocated below esl_sprintf(&(splits[x+3][y]->name), "%s%dto%d", workbench, (int)in->n-(x+1+3*(fromNum-1)), (int)in->n-(x+3*(toNum))); } } //count the number of shards which are at least the minimum size for(x = 0; x < 6; x++) { for(y = 0; y < stops[x]; y++) { if(splits[x][y]->n >= minimumResidues) totalStops++; } } ESL_ALLOC(*out, totalStops * sizeof(ESL_SQ*)); //copy shards of minimum size into newly allocated output array //or erase the ones that are too small for(x = 0; x < 6; x++) { for(y = 0; y < stops[x]; y++) { if(splits[x][y]->n >= minimumResidues) { (*out)[currentWrite++] = splits[x][y]; } else { esl_sq_Destroy(splits[x][y]); } } free(splits[x]); } (*retSeq) = totalStops; if(*retSeq) return eslOK; ERROR: if(frame) esl_sq_Destroy(frame); for(x = 0; x < 6; x++) { for(y = 0; y < stops[x]; y++) { if(splits[x][y]) esl_sq_Destroy(splits[x][y]); } free(splits[x]); } *retSeq = 0; return eslFAIL; } /***************************************************************** * 2. generating the reading frames for a nucleo sequence *****************************************************************/ /* Function: esl_trans_s2p() * Synopsis: Turn a nucleotide sequence into a protein sequence. * * Purpose: Input is a dna/rna sequence. Read codons and output a new sequence in the protein alphabet. * * Args: ESL_SQ *in a dna/rna sequence * ESL_SQ **out the location where the new protein sequence will be output * int frameshift The number of bases shifted off the front to cause a shift in the reading frame * Will fail if you shift further than sequence available * int rcFlag True if you want a reverse compliment reading frame, false if you do not * * Returns: on success, out is valid * an allocation failed * frameshifted too much * * Note: If this function throws a bad return when rc is true, the input sequence * will be left in an altered state. */ int esl_trans_s2p(ESL_SQ *in, ESL_SQ **out, int frameshift, int rcFlag) { // The encoding for this is taken from squid: A=0, C=1, G=2, U/T=3, // code[0] corresponds to AAA, code[1] is AAC... code[4] is ACA... // and so on up to 63 being UUU. 64 is a sentinel. Regular 20 amino codes and '*' for stop // the nucleotide indices match well with the easel alphabet index // but the actual translation still needs to be hard coded char code[] = {'K','N','K','N','T','T','T','T','R','S','R','S', 'I','I','M','I','Q','H','Q','H','P','P','P','P', 'R','R','R','R','L','L','L','L','E','D','E','D', 'A','A','A','A','G','G','G','G','V','V','V','V', '*','Y','*','Y','L','F','L','F','*','C','W','C', 'L','F','L','F'}; int status; int codon; //progress in counting current codon char *aaseq; //hold the protein sequence to be output char *aaptr; //pointer records progress in writing to output char *readseq; //pointer records progress in reading nucleotide sequence int read_dg; //index into digital sequence ESL_ALPHABET *abc = esl_alphabet_Create(eslDNA); char errbuf[256]; //validateseq demands this char namestring[256]; (*out) = NULL; if(frameshift >= in->n) return eslFAIL; if(!abc) goto ERROR; //make sure we have a nucleotide sequence; could use esl_abc_ValidateSeq but that wants too //much boilerplate for the simple bit I need done. doesn't help that i don't care if there are U or T //characters but that would test against two alphabets if(in->seq) { if(eslOK != esl_abc_ValidateSeq(abc, in->seq, in->n, errbuf)) goto ERROR; } else if(in->dsq) { if(in->abc->type != eslRNA && in->abc->type != eslDNA) goto ERROR; } else { goto ERROR; } //apply the reverse compliment if(rcFlag) {if(esl_sq_ReverseComplement(in) != eslOK) goto ERROR;} ESL_ALLOC(aaseq, (in->n+1) * sizeof(char)); aaptr = aaseq; if(in->seq) //text sequence { //get an alphabet to do the lookup with. //an ordinary text sequence doesn't have in->abc //if it has one that is not a standard dna/rna alphabet //then this code won't work. I wanted to use an alphabet if available, could save some allocating time that way //if we're calling this repeatedly //but the compiler complains about "pointer qualifiers" so nevermind readseq = in->seq+frameshift; //as long as there are at least 3 nucleotides left, pull and translate another codon for (; *readseq != '\0' && *(readseq+1) != '\0' && *(readseq+2) != '\0'; readseq += 3) { codon = abc->inmap[(int)*(readseq)] * 16 + abc->inmap[(int)*(readseq+1)] * 4 + abc->inmap[(int)*(readseq+2)]; if(codon > 63 || codon < 0) break; *aaptr = code[codon]; aaptr += 1; } *aaptr = '\0'; } else if(in->dsq) //do it digitally { if(in->dsq == NULL) goto ERROR; read_dg = 1+frameshift; //add one here because digital index 0 is a sentinel for(;in->dsq[read_dg] != 255 && in->dsq[read_dg+1] != 255 && in->dsq[read_dg+2] != 255; read_dg += 3) { codon = in->dsq[read_dg] * 16 + in->dsq[read_dg+1] * 4 + in->dsq[read_dg+2]; if(codon > 63 || codon < 0) break; *aaptr = code[codon]; aaptr += 1; } *aaptr = '\0'; } else { goto ERROR; } //modify name to record any reading frame adjustments sprintf(namestring, "%s_s%d", in->name, frameshift); if(rcFlag) strcat(namestring, "_rc"); *out = esl_sq_CreateFrom(namestring, aaseq, in->desc, in->acc, in->ss); if(aaseq != NULL) free(aaseq); //return the input to its original state if(rcFlag) {if(esl_sq_ReverseComplement(in) != eslOK) goto ERROR;} if(abc) esl_alphabet_Destroy(abc); if(*out) return eslOK; ERROR: if(abc) esl_alphabet_Destroy(abc); if(aaseq != NULL) free(aaseq); (*out) = NULL; return eslEMEM; } /************************************************************************* * 3. Divide a protein sequence with stop codons into multiple sequences *************************************************************************/ /* Function: esl_trans_seq_stop_split() * Synopsis: Split a protein sequence with stop codons in it. * * Purpose: Input is a protein sequence. Look for stop codon marks and output an array listing all * fragments separated by a stop codon. * * Args: ESL_SQ *in a protein sequence * ESL_SQ ***out the location where an array of new protein sequences will be placed. * caller is responsible for freeing this array when done with it. * int *outcount Address of an integer. This is where the size of the returned array will be placed. * * Returns: on success, out is valid * something wrong. don't trust out * * Note: This function is tightly coupled with esl_trans_orf(). * If the modification to in->name is changed then the corresponding * name parse in trans_orf must be modified as well. */ int esl_trans_seq_stop_split(ESL_SQ *in, ESL_SQ ***out, int *outCount) { int status; int x, y; //loop counters int nextSeqOut; //index of the next open location in the output sequence array int front; //front of the segment of sequence currently being read char* buff; //temporary home of output sequence before calling createFrom char name[256]; //workbench for building the name of each output sequence ESL_ALLOC(buff, (in->n+1) * sizeof(char)); *outCount = 1; if(in->seq) //text mode { //count how many sequences are present. minimum size is one non-stop residue x = 1; while(in->seq[x] != '\0') { if(in->seq[x] == '*' && in->seq[x-1] != '*') (*outCount)++; x++; } if(in->seq[x-1] == '*') (*outCount)--; //do this test instead of running inside the while loop, in case there are multiple consecutive stop codons ESL_ALLOC(*out, sizeof(ESL_SQ*) * *outCount); x = front = 0; nextSeqOut = 0; //continue until the sequence front steps past the end of the list while(front < in->n) { //x is the location currently being read, current segment is from front to x x++; if(in->seq[x] == '\0' || in->seq[x] == '*') //if we see something that ends a segment { if(x - front > 0) //if there is at least one residue { //build name sprintf(name, "%s_%dto%d", in->name, front+1, x); //build temporary sequence string strncpy(buff, in->seq+front, x-front); buff[x-front] = '\0'; //load output array (*out)[nextSeqOut++] = esl_sq_CreateFrom(name, buff, in->desc, in->acc, in->ss); } //step the front to the beginning of the next sequence front = x+1; } } } else if(in->dsq) //digital mode { //start a little different because dsq has a sentinel in position 0 x = 2; while(in->dsq[x] != 255) //until the end sentinal, count sequences with at least one residue { if(in->abc->inmap[(int)'*'] == in->dsq[x] && in->abc->inmap[(int)'*'] != in->dsq[x-1]) (*outCount)++; x++; } ESL_ALLOC(*out, sizeof(ESL_SQ*) * *outCount); x = front = 1; nextSeqOut = 0; while(front < in->n+2) //as long as we have residues left { x++; if(in->dsq[x] == 255 || in->abc->inmap[(int)'*'] == in->dsq[x]) //if we see something that finishes a sequence { if(x - front > 0) //have at least one residue in the sequence { //build name sprintf(name, "%s_%dto%d", in->name, front, x-1); //build temporary sequence for(y = 0; y < x-front; y++) buff[y] = in->abc->sym[in->dsq[front+y]]; buff[x-front] = '\0'; //load output (*out)[nextSeqOut++] = esl_sq_CreateFrom(name, buff, in->desc, in->acc, in->ss); } front = x+1; } } } else { goto ERROR; } free(buff); return eslOK; ERROR: if(buff) free(buff); return eslFAIL; } /*------------ end, esl_translate --------------------*/ /***************************************************************** * 4. practice driver. *****************************************************************/ #ifdef eslTRANSLATE_TESTDRIVE /* gcc -g -Wall -o esl_translate_utest -L. -I. -D eslTRANSLATE_TESTDRIVE esl_translate.c -leasel -lm */ #include "esl_config.h" #include #include "easel.h" #include "esl_translate.h" #include "esl_sq.h" #include "esl_sqio.h" int main(int argc, char **argv) { ESL_SQFILE *sqfp = NULL; ESL_SQ *sq = NULL; ESL_SQ *dsq = NULL; ESL_SQ **prot; int c; ESL_ALPHABET *abc, *prot_abc; ESL_SQ *prot6[6]; int x; abc = esl_alphabet_Create(eslDNA); prot_abc = esl_alphabet_Create(eslAMINO); if(argc != 2) { printf("You need to pass an argument for a filepath to a dna/rna fasta file\n"); exit(0); } if(eslOK != esl_sqfile_Open(argv[1], eslSQFILE_FASTA, NULL, &sqfp)) { printf("Invalid filepath: %s\n", argv[1]); exit(0); } sq = esl_sq_Create(); if(sq == NULL) { printf("could not allocate new sequence\n"); exit(0); } if(esl_sqio_Read(sqfp, sq) != eslOK) { printf("Not a valid fasta file %s\n", argv[1]); exit(0); } dsq = esl_sq_Create(); if(dsq == NULL) { printf("could not allocate digital sequence\n"); exit(0); } if(esl_sq_Copy(sq, dsq) != eslOK) { printf("could not copy sequence\n"); exit(0); } if(esl_sq_Digitize(abc, dsq) != eslOK) { printf("could not digitize sequence\n"); exit(0); } esl_sqio_Write(stdout, sq, eslSQFILE_FASTA, 0); if(esl_trans_6frame(sq, prot6) != eslOK) { printf("could not generate six frame translation\n"); exit(0); } for(x = 0; x < 6; x++) { esl_sqio_Write(stdout, prot6[x], eslSQFILE_FASTA, 0); } if(esl_trans_orf(dsq, &prot, &c, 10) != eslOK) { printf("could not translate open reading frames\n"); exit(0); } for(x = 0; x < c; x++) { esl_sqio_Write(stdout, prot[x], eslSQFILE_FASTA, 0); } return 0; } #endif /*eslTRANSLATE_TESTDRIVE*/ /*----------------- end, practice driver ----------------------------*/ hmmer-3.1b2/easel/esl_msafile.h0000664361611702660230000001637412473612607016033 0ustar wheelerteddy/* Multiple sequence alignment file i/o */ #ifndef eslMSAFILE_INCLUDED #define eslMSAFILE_INCLUDED #include #include "esl_alphabet.h" /* digital alphabets */ #include "esl_buffer.h" /* string hashes, for mapping uniq seq names */ #include "esl_msa.h" /* ESL_MSA structure */ #include "esl_ssi.h" /* indexes of large flatfiles on disk */ /* Object: ESLX_MSAFILE_FMTDATA * * Additional (often optional) information about variants of some file * formats. Not much in here right now - but figured this might need * to expand in the future, best to have the mechanism in place. * * Used in three ways: * 1. When opening an MSA file in a known format (as opposed to * guessing an unknown format), caller may provide an * structure containing any additional constraints on the format. * The new will copy this information into fmtd>. * 2. When opening an MSA file in an unknown format (calling GuessFileFormat()), * format-specific autodetectors fill in fmtd> with any additional * constraints. * 3. When writing an MSA file, caller may provide additional constraints on * the format; notably rpl>, the number of residues per line, * used for many formats. * * TODO: If this fills up with more information, we should eventually * consolidate the format code too; create ESL_MSAFORMAT structure * to hold both integer code and optional information; implement * it in esl_msaformat.[ch]; put format guessing routines there; * rename eslMSAFILE_* -> eslMSAFORMAT_*. For now, not worth the * time, because it's really only a placeholder dealing with a small * PHYLIP-specific format issue. , are generally * an ordered pair, to facilitate eventual replacement w/ single * . [SRE, 19 Jul 11] */ typedef struct { int namewidth; /* PHYLIP only: width of the name field (usually 10, but can vary) unset=0 */ int rpl; /* several formats: residues per line unset=0 */ } ESLX_MSAFILE_FMTDATA; /* Object: ESLX_MSAFILE * * An alignment file open for parsing. */ typedef struct { ESL_BUFFER *bf; /* input file/data being parsed */ int32_t format; /* format of alignment file we're reading */ ESLX_MSAFILE_FMTDATA fmtd; /* additional (often optional) format-specific details. */ char *line; /* line read from by */ esl_pos_t n; /* length of line in bytes (line is not NUL-terminated) */ int64_t linenumber; /* input linenumber for diagnostics; -1 if we lose track */ esl_pos_t lineoffset; /* offset of start of in ; -1 if line unset */ ESL_DSQ inmap[128]; /* input map, 0..127 */ const ESL_ALPHABET *abc; /* non-NULL if augmented and in digital mode */ ESL_SSI *ssi; /* open SSI index; or NULL, if none or not augmented */ char errmsg[eslERRBUFSIZE]; /* user-directed message for normal errors */ } ESLX_MSAFILE; /* Alignment file format codes. * Must coexist with sqio unaligned file format codes. * Rules: * - 0 is an unknown/unassigned format * - <=100 reserved for unaligned formats * - >100 reserved for aligned formats */ #define eslMSAFILE_UNKNOWN 0 /* unknown format */ #define eslMSAFILE_STOCKHOLM 101 /* Stockholm format, interleaved */ #define eslMSAFILE_PFAM 102 /* Pfam/Rfam one-line-per-seq Stockholm format */ #define eslMSAFILE_A2M 103 /* UCSC SAM's fasta-like a2m format */ #define eslMSAFILE_PSIBLAST 104 /* NCBI PSI-BLAST alignment format */ #define eslMSAFILE_SELEX 105 /* old SELEX format (largely obsolete) */ #define eslMSAFILE_AFA 106 /* aligned FASTA format */ #define eslMSAFILE_CLUSTAL 107 /* CLUSTAL format */ #define eslMSAFILE_CLUSTALLIKE 108 /* CLUSTAL-like formats (MUSCLE, PROBCONS) */ #define eslMSAFILE_PHYLIP 109 /* interleaved PHYLIP format */ #define eslMSAFILE_PHYLIPS 110 /* sequential PHYLIP format */ /* 1. Opening/closing an ESLX_MSAFILE */ extern int eslx_msafile_Open (ESL_ALPHABET **byp_abc, const char *msafile, const char *env, int format, ESLX_MSAFILE_FMTDATA *fmtd, ESLX_MSAFILE **ret_afp); extern int eslx_msafile_OpenMem (ESL_ALPHABET **byp_abc, const char *p, esl_pos_t n, int format, ESLX_MSAFILE_FMTDATA *fmtd, ESLX_MSAFILE **ret_afp); extern int eslx_msafile_OpenBuffer(ESL_ALPHABET **byp_abc, ESL_BUFFER *bf, int format, ESLX_MSAFILE_FMTDATA *fmtd, ESLX_MSAFILE **ret_afp); extern void eslx_msafile_OpenFailure(ESLX_MSAFILE *afp, int status); extern int eslx_msafile_SetDigital (ESLX_MSAFILE *afp, const ESL_ALPHABET *abc); extern void eslx_msafile_Close(ESLX_MSAFILE *afp); /* 2. ESLX_MSAFILE_FMTDATA: optional extra constraints on formats */ extern int eslx_msafile_fmtdata_Init(ESLX_MSAFILE_FMTDATA *fmtd); extern int eslx_msafile_fmtdata_Copy(ESLX_MSAFILE_FMTDATA *src, ESLX_MSAFILE_FMTDATA *dst); /* 3. Utilities for different file formats */ extern int eslx_msafile_GuessFileFormat(ESL_BUFFER *bf, int *ret_fmtcode, ESLX_MSAFILE_FMTDATA *fmtd); extern int eslx_msafile_IsMultiRecord(int fmt); extern int eslx_msafile_EncodeFormat(char *fmtstring); extern char *eslx_msafile_DecodeFormat(int fmt); /* 4. Utilities for different alphabets */ #ifdef eslAUGMENT_ALPHABET extern int eslx_msafile_GuessAlphabet(ESLX_MSAFILE *afp, int *ret_type); #endif /* 5. Random access in a MSA flatfile database */ #ifdef eslAUGMENT_SSI extern int eslx_msafile_PositionByKey(ESLX_MSAFILE *afp, const char *key); #endif /* 6. Reading an MSA from an ESLX_MSAFILE */ extern int eslx_msafile_Read(ESLX_MSAFILE *afp, ESL_MSA **ret_msa); extern void eslx_msafile_ReadFailure(ESLX_MSAFILE *afp, int status); /* 7. Writing an MSA to a stream */ extern int eslx_msafile_Write(FILE *fp, ESL_MSA *msa, int fmt); /* 8. Utilities for specific parsers */ extern int eslx_msafile_GetLine(ESLX_MSAFILE *afp, char **opt_p, esl_pos_t *opt_n); extern int eslx_msafile_PutLine(ESLX_MSAFILE *afp); #include "esl_msafile_a2m.h" #include "esl_msafile_afa.h" #include "esl_msafile_clustal.h" #include "esl_msafile_phylip.h" #include "esl_msafile_psiblast.h" #include "esl_msafile_selex.h" #include "esl_msafile_stockholm.h" #endif /*eslMSAFILE_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $URL$ * SVN $Id: esl_msafile.h 826 2012-11-30 14:57:13Z eddys $ *****************************************************************/ hmmer-3.1b2/easel/esl_swat.tex0000664361611702660230000000011512473612610015716 0ustar wheelerteddyThe \eslmod{swat} module implements Smith/Waterman local sequence alignment. hmmer-3.1b2/easel/esl_hmm.h0000664361611702660230000000560612473612606015167 0ustar wheelerteddy/* General hidden Markov models (discrete; of alphabetic strings) * * SRE, Fri Jul 18 08:54:41 2008 [Janelia] * SVN $Id: esl_hmm.h 694 2011-06-14 21:57:16Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_hmm.h $ */ #ifndef eslHMM_INCLUDED #define eslHMM_INCLUDED #include "esl_alphabet.h" #include "esl_random.h" typedef struct { int M; /* number of states in the model */ int K; /* size of alphabet (redundant w/ abc->K) */ float *pi; /* initial (begin) distribution (0..M) */ float **t; /* Mx(M+1) state transition probabilities */ float **e; /* MxK emission probabilities */ float **eo; /* K'xM emission odds ratios */ const ESL_ALPHABET *abc; /* ptr to alphabet */ } ESL_HMM; typedef struct { float **dp; /* [0..L][0..M-1] DP matrix */ float *sc; /* [0..L+1] scale factors (log probs) */ int M; /* actual model dimension (0..M-1) */ int L; /* actual sequence dimension (1..L) */ float *dp_mem; /* memory allocated for the resizable DP matrix */ int allocR; /* current allocated # of rows: L+1 <= validR <= allocR */ int validR; /* # of dp rows actually pointing at DP memory */ int allocM; /* current set row width; M <= allocM */ uint64_t ncells; /* total allocation of dp_mem; ncells >= (validR)(allocM)*/ } ESL_HMX; extern ESL_HMM *esl_hmm_Create(const ESL_ALPHABET *abc, int M); extern ESL_HMM *esl_hmm_Clone(const ESL_HMM *hmm); extern int esl_hmm_Configure(ESL_HMM *hmm, float *fq); extern int esl_hmm_SetDegeneracies(ESL_HMM *hmm); extern void esl_hmm_Destroy(ESL_HMM *hmm); extern ESL_HMX *esl_hmx_Create(int allocL, int allocM); extern int esl_hmx_GrowTo (ESL_HMX *mx, int L, int M); extern void esl_hmx_Destroy(ESL_HMX *mx); extern int esl_hmm_Emit(ESL_RANDOMNESS *r, const ESL_HMM *hmm, ESL_DSQ **opt_dsq, int **opt_path, int *opt_L); extern int esl_hmm_Forward(const ESL_DSQ *dsq, int L, const ESL_HMM *hmm, ESL_HMX *fwd, float *opt_sc); extern int esl_hmm_Backward(const ESL_DSQ *dsq, int L, const ESL_HMM *hmm, ESL_HMX *bck, float *opt_sc); #endif /*eslHMM_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_msafile2.h0000664361611702660230000001042512473612607016104 0ustar wheelerteddy/* Memory-efficient multiple sequence alignment i/o from Pfam format * * Legacy interface, now that ESLX_MSAFILE is rewritten. Still need * to support --small option in various tools, so the necessary parts * of the old interface were moved here. * * To-do: * :: add memory-efficient interface in ESLX_MSAFILE * :: add memory-efficient ESL_MSA w/ API * :: add space-efficient MSA file format */ #ifndef eslMSAFILE2_INCLUDED #define eslMSAFILE2_INCLUDED #include "esl_msa.h" /* ESL_MSA structure */ #include "esl_msafile.h" /* preferred msafile interface, inc. fmt codes shared w/ ESL_MSAFILE2 */ #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" /* digital alphabet */ #endif #ifdef eslAUGMENT_KEYHASH #include "esl_keyhash.h" /* string hashes, for mapping unique seq names */ #endif #ifdef eslAUGMENT_SSI #include "esl_ssi.h" /* indexing large flatfiles on disk */ #endif /* Object: ESL_MSAFILE2 * * Defines an alignment file that we open for reading, * in our legacy version. See ESLX_MSAFILE (esl_msafile.c) for the * preferred version. */ typedef struct { FILE *f; /* open file pointer */ char *fname; /* name of file. used for diagnostic output */ int linenumber; /* what line are we on in the file */ char errbuf[eslERRBUFSIZE]; /* buffer for holding parse error info */ char *buf; /* buffer for line input w/ sre_fgets() */ int buflen; /* current allocated length for buf */ int do_gzip; /* TRUE if f is "gzip -dc |" (will pclose(f))*/ int do_stdin; /* TRUE if f is stdin (won't close f) */ int format; /* format of alignment file we're reading */ int do_digital; /* TRUE to digitize seqs directly into ax */ #if defined(eslAUGMENT_ALPHABET) const ESL_ALPHABET *abc; /* AUGMENTATION (alphabet): digitized input */ #else void *abc; #endif #if defined(eslAUGMENT_SSI) /* AUGMENTATION: SSI indexing of an MSA db */ ESL_SSI *ssi; /* open SSI index file; or NULL, if none. */ #else void *ssi; #endif ESL_MSA *msa_cache; /* occasional lookahead at next MSA; GuessAlphabet() */ } ESL_MSAFILE2; /* 1. The ESL_MSAFILE2 object */ extern int esl_msafile2_Open(const char *filename, const char *env, ESL_MSAFILE2 **ret_afp); #ifdef eslAUGMENT_ALPHABET extern int esl_msafile2_OpenDigital(const ESL_ALPHABET *abc, const char *filename, const char *env, ESL_MSAFILE2 **ret_afp); #endif extern void esl_msafile2_Close(ESL_MSAFILE2 *afp); /* 2. Memory efficient reading/writing in Pfam format (augmentation: keyhash, for regurgitating some but not all seqs) */ extern int esl_msafile2_ReadInfoPfam(ESL_MSAFILE2 *afp, FILE *listfp, ESL_ALPHABET *abc, int64_t known_alen, char *known_rf, char *known_ss_cons, ESL_MSA **ret_msa, int *opt_nseq, int64_t *opt_alen, int *opt_ngs, int *opt_maxname, int *opt_maxgf, int *opt_maxgc, int *opt_maxgr, double ***opt_abc_ct, double ***opt_pp_ct, double ****opt_bp_ct, int **opt_spos_ct, int **opt_epos_ct); #ifdef eslAUGMENT_KEYHASH extern int esl_msafile2_RegurgitatePfam(ESL_MSAFILE2 *afp, FILE *ofp, int maxname, int maxgf, int maxgc, int maxgr, int do_header, int do_trailer, int do_blanks, int do_comments, int do_gf, int do_gs, int do_gc, int do_gr, int do_aseq, ESL_KEYHASH *seqs2regurg, ESL_KEYHASH *seqs2skip, int *useme, int *add2me, int exp_alen, char gapchar2add, int *opt_nseq_read, int *opt_nseq_written); #endif #endif //eslMSAFILE2_INCLUDED /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msafile2.h $ * SVN $Id: esl_msafile2.h 717 2011-08-04 19:18:17Z wheelert $ *****************************************************************/ hmmer-3.1b2/easel/esl_recorder.h0000664361611702660230000000737712473612607016223 0ustar wheelerteddy/* Saving history in a line-based input stream. * * SRE, Mon Dec 28 09:51:51 2009 [Zaragoza] * SVN $Id: esl_recorder.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_recorder.h $ */ #ifndef eslRECORDER_INCLUDED #define eslRECORDER_INCLUDED #include "esl_config.h" #ifdef HAVE_SYS_TYPES_H #include #endif #include /* Object: ESL_RECORDER * * A history of a line-based input stream. * Allows (limited) rewinding in nonrewindable input streams; * also allows block-based parsing (as opposed to line-based). * * The history is kept in a rolling array of string ptrs. The * bookkeeping involved in indexing this array can be confusing. * * Lines in the file are numbered 0..N-1. * (N isn't known; we'll be reading sequentially.) * Lines in the recorder are 0..nalloc-1. * * The recorder keeps track of how many lines it has read so far, in * . * * The recorder can be backed up to any previous line. It sets * to be the number of lines it *appears* to have read so far; * that is, the next line it will return to the caller, upon a call * to esl_recorder_Read(), is line . * * A window of MIN(nread, nalloc) lines is stored; * consisting of line numbers MAX(baseline, nread-nalloc) .. nread-1). * * A line n in the file (0..n..N-1) corresponds to * an index i in the recorder by these transforms: * i = (n-baseline) % nalloc * n = i + MAX(baseline, nread-nalloc) * * Normally the baseline for the modulo calculation is just 0. * * The line array is circularly permuted (out of order) when * (nread-baseline) / nalloc != 0. */ typedef struct { FILE *fp; /* stream that we're reading line by line */ char **line; /* lines from input, line[0..nalloc-1] */ int nalloc; /* max number of lines remembered */ int *lalloc; /* alloc for each line[0..nalloc-1][0..lalloc[i]-1] */ off_t *offset; /* disk offsets to starts of each line */ int nread; /* max # of lines read from file in any pass [1..] */ int ncurr; /* # of lines into file in current pass [1..] */ int baseline; /* line origin for n<->i transform [0..] */ int markline; /* line origin for start of current block [-1;0..] */ } ESL_RECORDER; extern ESL_RECORDER *esl_recorder_Create (FILE *fp, int maxlines); extern int esl_recorder_ResizeTo (ESL_RECORDER *rc, int new_maxlines); extern int esl_recorder_GetFirst (ESL_RECORDER *rc); extern int esl_recorder_GetLast (ESL_RECORDER *rc); extern int esl_recorder_GetCurrent(ESL_RECORDER *rc); extern int esl_recorder_GetNext (ESL_RECORDER *rc); extern void esl_recorder_Destroy (ESL_RECORDER *rc); extern int esl_recorder_Read(ESL_RECORDER *rc, char **opt_line); extern int esl_recorder_Position(ESL_RECORDER *rc, int linenumber); extern int esl_recorder_MarkBlock(ESL_RECORDER *rc, int markline); extern int esl_recorder_UnmarkBlock(ESL_RECORDER *rc); extern int esl_recorder_GetBlock(ESL_RECORDER *rc, char ***opt_lines, int **opt_lalloc, off_t **opt_offset, int *opt_nlines); #endif /*eslRECORDER_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_getopts.h0000664361611702660230000001353012473612606016066 0ustar wheelerteddy/* Command line, config file, and environment variable * configuration of an application. Extends standard * UNIX/POSIX/GNU getopt(). * */ #ifndef eslGETOPTS_INCLUDED #define eslGETOPTS_INCLUDED #include "easel.h" /* Object: ESL_OPTIONS * * The application main.c defines an array of structures to * define what configuration options are used. The array is * terminated by a structure containing { NULL, NULL, NULL, 0, NULL, * NULL, NULL, NULL} (or more simply, just 0 in all 8 fields.) */ /*::cexcerpt::options_object::begin::*/ typedef struct { char *name; /* either short "-a" or long "--foo" style */ int type; /* arg type, for type checking: (eslARG_INT, etc.) */ char *defval; /* default setting, or NULL ("default" is a C keyword) */ char *envvar; /* associated environ var ("BLASTDB"), or NULL */ char *range; /* for range checking arg: ("0<=x<=1", etc.) */ char *toggle_opts; /* comma-sep'd optlist: turn these off if this opt is on */ char *required_opts; /* comma-sep'd optlist: these must also be set */ char *incompat_opts; /* comma-sep'd optlist: these must not be set */ char *help; /* help/usage string */ int docgrouptag; /* integer tag for documentation groups */ } ESL_OPTIONS; /*::cexcerpt::options_object::end::*/ /* Argument types: the "type" variable in . */ #define eslARG_NONE 0 /* option takes no argument (so, is boolean) */ #define eslARG_INT 1 /* arg convertable by atoi() */ #define eslARG_REAL 2 /* arg convertable by atof() */ #define eslARG_CHAR 3 /* arg is a single character */ #define eslARG_STRING 4 /* unchecked arg type */ #define eslARG_INFILE 5 /* input file - same as string, shown as */ #define eslARG_OUTFILE 6 /* output file - same as string, shown as */ /* Object: ESL_GETOPTS * * An object is created to parse configuration * from command line options, config file(s), and environment * variables. */ typedef struct { ESL_OPTIONS *opt; /* array of app-defined options */ int nopts; /* number of options */ int argc; /* argc from command line */ char **argv; /* argv from command line */ int optind; /* position in argc; eventually 1st arg idx */ int nfiles; /* # of cfgfiles that have been processed */ char **val; /* config'ed val for each option (as string) */ int *setby; /* array [0..nopts-1] for who set option i */ int *valloc; /* 0, or length of alloc for val[i] */ char *optstring; /* internal: ptr into string of 1-char opts in argv[] */ char *spoof; /* internal allocation: ProcessSpoof() stores cmdline */ char **spoof_argv; /* internal allocation: ProcessSpoof()'s ptrs into its cmdline */ char errbuf[eslERRBUFSIZE]; /* buffer for reporting user error */ } ESL_GETOPTS; /* Possible values of the variable in ESL_GETOPTS. * Additionally, values of >3 also indicate a config file, in order * of _ProcessConfigFile() calls (that is, setby=3 is the first * config file, setby=4 is the second, etc.). */ #define eslARG_SETBY_DEFAULT 0 #define eslARG_SETBY_CMDLINE 1 #define eslARG_SETBY_ENV 2 #define eslARG_SETBY_CFGFILE 3 /* The visible API. */ extern ESL_GETOPTS *esl_getopts_Create(ESL_OPTIONS *opt); extern ESL_GETOPTS *esl_getopts_CreateDefaultApp(ESL_OPTIONS *options, int nargs, int argc, char **argv, char *banner, char *usage); extern int esl_getopts_Reuse (ESL_GETOPTS *g); extern void esl_getopts_Destroy(ESL_GETOPTS *g); extern void esl_getopts_Dump(FILE *ofp, ESL_GETOPTS *g); extern int esl_opt_ProcessConfigfile (ESL_GETOPTS *g, char *filename, FILE *fp); extern int esl_opt_ProcessEnvironment(ESL_GETOPTS *g); extern int esl_opt_ProcessCmdline (ESL_GETOPTS *g, int argc, char **argv); extern int esl_opt_ProcessSpoof (ESL_GETOPTS *g, const char *cmdline); extern int esl_opt_VerifyConfig (ESL_GETOPTS *g); extern int esl_opt_ArgNumber (const ESL_GETOPTS *g); extern int esl_opt_SpoofCmdline(const ESL_GETOPTS *g, char **ret_cmdline); extern int esl_opt_GetSetter(const ESL_GETOPTS *g, char *optname); extern int esl_opt_IsDefault (const ESL_GETOPTS *g, char *optname); extern int esl_opt_IsOn (const ESL_GETOPTS *g, char *optname); extern int esl_opt_IsUsed (const ESL_GETOPTS *g, char *optname); extern int esl_opt_GetBoolean(const ESL_GETOPTS *g, char *optname); extern int esl_opt_GetInteger(const ESL_GETOPTS *g, char *optname); extern double esl_opt_GetReal (const ESL_GETOPTS *g, char *optname); extern char esl_opt_GetChar (const ESL_GETOPTS *g, char *optname); extern char *esl_opt_GetString (const ESL_GETOPTS *g, char *optname); extern char *esl_opt_GetArg (const ESL_GETOPTS *g, int which); extern int esl_opt_DisplayHelp(FILE *ofp, ESL_GETOPTS *go, int docgroup, int indent, int textwidth); #endif /*eslGETOPTS_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_getopts.h 697 2011-06-15 20:14:56Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_getopts.h $ *****************************************************************/ hmmer-3.1b2/easel/esl_regexp.h0000664361611702660230000000660012473612607015674 0ustar wheelerteddy/* Regular expression matching on strings. * * SRE, Sun Jan 2 10:52:34 2005 [Zaragoza] * SVN $Id: esl_regexp.h 862 2013-04-12 18:56:42Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_regexp.h $ ****************************************************************** * The regexp module is a wrapper around a modified version of Henry * Spencer's regex library. Spencer's copyright notice appears below, * after my wrappers, prefacing the section that includes his code. I * believe you can obtain the original code from: * ftp://ftp.zoo.toronto.edu/pub/bookregex.tar.Z * Thanks, Henry! ***************************************************************** */ #ifndef eslREGEXP_INCLUDED #define eslREGEXP_INCLUDED /* ESL_REGEXP_NSUB specifies the maximum number of () expressions * in a regexp. The whole regexp counts as one, so 16 allows for * parsing out up to 15 tokens from the match. */ #define ESL_REGEXP_NSUB 16 /* The esl__regexp structure is from the original Spencer code. * It's wrapped by the ESL_REGEXP structure, below. */ typedef struct { char *startp[ESL_REGEXP_NSUB]; /* ptrs to starts of submatches on target string */ char *endp[ESL_REGEXP_NSUB]; /* ptrs to 1 char after ends of submatches */ char regstart; /* Internal use only. */ char reganch; /* Internal use only. */ char *regmust; /* Internal use only. */ int regmlen; /* Internal use only. */ char program[1]; /* Unwarranted chumminess with compiler. */ } esl__regexp; /* This looks sort of stupid, wrapping a single ptr in a structure, but we * want the machine to be persistent even if different NDFAs are * compiled and used. Without this persistency, we would have to * create/destroy every time we used a different pattern, instead of * one create/destroy per block of code that uses regex matching * functionaility. * * Plus, if we ever need to keep other persistent info * beyond Spencer's compiled NDFA (which we'd rather not mess * with), we have a place to put it. */ typedef struct { esl__regexp *ndfa; /* a compiled regexp */ } ESL_REGEXP; /* Declaration of functions in the API */ extern ESL_REGEXP *esl_regexp_Create(void); extern void esl_regexp_Destroy(ESL_REGEXP *machine); extern int esl_regexp_Match(ESL_REGEXP *machine, const char *pattern, const char *s); extern int esl_regexp_Compile(ESL_REGEXP *machine, const char *pattern); extern int esl_regexp_MultipleMatches(ESL_REGEXP *machine, char **sptr); extern char *esl_regexp_SubmatchDup(ESL_REGEXP *machine, int elem); extern int esl_regexp_SubmatchCopy(ESL_REGEXP *machine, int elem, char *buffer, int nc); extern int esl_regexp_SubmatchCoords(ESL_REGEXP *machine, char *origin, int elem, int *ret_start, int *ret_end); extern int esl_regexp_ParseCoordString(const char *cstring, uint32_t *ret_start, uint32_t *ret_end); #endif /*eslREGEXP_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_stats.c0000664361611702660230000007426312473612607015545 0ustar wheelerteddy/* Foundation and miscellenea for the statistics modules. * * Contents: * 1. Summary statistics (means, variances) * 2. Special functions * 3. Standard statistical tests * 4. Data fitting. * 5. Unit tests. * 6. Test driver. * 7. Examples. * - driver for linear regression * - driver for G-test * 8. License and copyright information. * */ #include "esl_config.h" #include #include "easel.h" #include "esl_stats.h" /***************************************************************** * 1. Summary statistics calculations (means, variances) *****************************************************************/ /* Function: esl_stats_DMean() * Synopsis: Calculates mean and $\sigma^2$ for samples $x_i$. * * Purpose: Calculates the sample mean and $s^2$, the unbiased * estimator of the population variance, for a * sample of numbers , and optionally * returns either or both through and * . * * and do the same, * for float and integer vectors. * * Args: x - samples x[0]..x[n-1] * n - number of samples * opt_mean - optRETURN: mean * opt_var - optRETURN: estimate of population variance * * Returns: on success. */ int esl_stats_DMean(const double *x, int n, double *opt_mean, double *opt_var) { double sum = 0.; double sqsum = 0.; int i; for (i = 0; i < n; i++) { sum += x[i]; sqsum += x[i]*x[i]; } if (opt_mean != NULL) *opt_mean = sum / (double) n; if (opt_var != NULL) *opt_var = (sqsum - sum*sum/(double)n) / ((double)n-1); return eslOK; } int esl_stats_FMean(const float *x, int n, double *opt_mean, double *opt_var) { double sum = 0.; double sqsum = 0.; int i; for (i = 0; i < n; i++) { sum += x[i]; sqsum += x[i]*x[i]; } if (opt_mean != NULL) *opt_mean = sum / (double) n; if (opt_var != NULL) *opt_var = (sqsum - sum*sum/(double)n) / ((double)n-1); return eslOK; } int esl_stats_IMean(const int *x, int n, double *opt_mean, double *opt_var) { double sum = 0.; double sqsum = 0.; int i; for (i = 0; i < n; i++) { sum += x[i]; sqsum += x[i]*x[i]; } if (opt_mean != NULL) *opt_mean = sum / (double) n; if (opt_var != NULL) *opt_var = (sqsum - sum*sum/(double)n) / ((double)n-1); return eslOK; } /*--------------- end, summary statistics -----------------------*/ /***************************************************************** * 2. Special functions. *****************************************************************/ /* Function: esl_stats_LogGamma() * Synopsis: Calculates $\log \Gamma(x)$. * * Purpose: Returns natural log of $\Gamma(x)$, for $x > 0$. * * Credit: Adapted from a public domain implementation in the * NCBI core math library. Thanks to John Spouge and * the NCBI. (According to NCBI, that's Dr. John * "Gammas Galore" Spouge to you, pal.) * * Args: x : argument, x > 0.0 * ret_answer : RETURN: the answer * * Returns: Put the answer in ; returns . * * Throws: if $x <= 0$. */ int esl_stats_LogGamma(double x, double *ret_answer) { int i; double xx, tx; double tmp, value; static double cof[11] = { 4.694580336184385e+04, -1.560605207784446e+05, 2.065049568014106e+05, -1.388934775095388e+05, 5.031796415085709e+04, -9.601592329182778e+03, 8.785855930895250e+02, -3.155153906098611e+01, 2.908143421162229e-01, -2.319827630494973e-04, 1.251639670050933e-10 }; /* Protect against invalid x<=0 */ if (x <= 0.0) ESL_EXCEPTION(eslERANGE, "invalid x <= 0 in esl_stats_LogGamma()"); xx = x - 1.0; tx = tmp = xx + 11.0; value = 1.0; for (i = 10; i >= 0; i--) /* sum least significant terms first */ { value += cof[i] / tmp; tmp -= 1.0; } value = log(value); tx += 0.5; value += 0.918938533 + (xx+0.5)*log(tx) - tx; *ret_answer = value; return eslOK; } /* Function: esl_stats_Psi() * Synopsis: Calculates $\Psi(x)$ (the digamma function). * * Purpose: Computes $\Psi(x)$ (the "digamma" function), which is * the derivative of log of the Gamma function: * $d/dx \log \Gamma(x) = \frac{\Gamma'(x)}{\Gamma(x)} = \Psi(x)$. * Argument $x$ is $> 0$. * * This is J.M. Bernardo's "Algorithm AS103", * Appl. Stat. 25:315-317 (1976). */ int esl_stats_Psi(double x, double *ret_answer) { double answer = 0.; double x2; if (x <= 0.0) ESL_EXCEPTION(eslERANGE, "invalid x <= 0 in esl_stats_Psi()"); /* For small x, Psi(x) ~= -0.5772 - 1/x + O(x), we're done. */ if (x <= 1e-5) { *ret_answer = -eslCONST_EULER - 1./x; return eslOK; } /* For medium x, use Psi(1+x) = \Psi(x) + 1/x to c.o.v. x, * big enough for Stirling approximation to work... */ while (x < 8.5) { answer = answer - 1./x; x += 1.; } /* For large X, use Stirling approximation */ x2 = 1./x; answer += log(x) - 0.5 * x2; x2 = x2*x2; answer -= (1./12.)*x2; answer += (1./120.)*x2*x2; answer -= (1./252.)*x2*x2*x2; *ret_answer = answer; return eslOK; } /* Function: esl_stats_IncompleteGamma() * Synopsis: Calculates the incomplete Gamma function. * * Purpose: Returns $P(a,x)$ and $Q(a,x)$ where: * * \begin{eqnarray*} * P(a,x) & = & \frac{1}{\Gamma(a)} \int_{0}^{x} t^{a-1} e^{-t} dt \\ * & = & \frac{\gamma(a,x)}{\Gamma(a)} \\ * Q(a,x) & = & \frac{1}{\Gamma(a)} \int_{x}^{\infty} t^{a-1} e^{-t} dt\\ * & = & 1 - P(a,x) \\ * \end{eqnarray*} * * $P(a,x)$ is the CDF of a gamma density with $\lambda = 1$, * and $Q(a,x)$ is the survival function. * * For $x \simeq 0$, $P(a,x) \simeq 0$ and $Q(a,x) \simeq 1$; and * $P(a,x)$ is less prone to roundoff error. * * The opposite is the case for large $x >> a$, where * $P(a,x) \simeq 1$ and $Q(a,x) \simeq 0$; there, $Q(a,x)$ is * less prone to roundoff error. * * Method: Based on ideas from Numerical Recipes in C, Press et al., * Cambridge University Press, 1988. * * Args: a - for instance, degrees of freedom / 2 [a > 0] * x - for instance, chi-squared statistic / 2 [x >= 0] * ret_pax - RETURN: P(a,x) * ret_qax - RETURN: Q(a,x) * * Return: on success. * * Throws: if or is out of accepted range. * if approximation fails to converge. */ int esl_stats_IncompleteGamma(double a, double x, double *ret_pax, double *ret_qax) { int iter; /* iteration counter */ double pax; /* P(a,x) */ double qax; /* Q(a,x) */ if (a <= 0.) ESL_EXCEPTION(eslERANGE, "esl_stats_IncompleteGamma(): a must be > 0"); if (x < 0.) ESL_EXCEPTION(eslERANGE, "esl_stats_IncompleteGamma(): x must be >= 0"); /* For x > a + 1 the following gives rapid convergence; * calculate Q(a,x) = \frac{\Gamma(a,x)}{\Gamma(a)}, * using a continued fraction development for \Gamma(a,x). */ if (x > a+1) { double oldp; /* previous value of p */ double nu0, nu1; /* numerators for continued fraction calc */ double de0, de1; /* denominators for continued fraction calc */ nu0 = 0.; /* A_0 = 0 */ de0 = 1.; /* B_0 = 1 */ nu1 = 1.; /* A_1 = 1 */ de1 = x; /* B_1 = x */ oldp = nu1; for (iter = 1; iter < 100; iter++) { /* Continued fraction development: * set A_j = b_j A_j-1 + a_j A_j-2 * B_j = b_j B_j-1 + a_j B_j-2 * We start with A_2, B_2. */ /* j = even: a_j = iter-a, b_j = 1 */ /* A,B_j-2 are in nu0, de0; A,B_j-1 are in nu1,de1 */ nu0 = nu1 + ((double)iter - a) * nu0; de0 = de1 + ((double)iter - a) * de0; /* j = odd: a_j = iter, b_j = x */ /* A,B_j-2 are in nu1, de1; A,B_j-1 in nu0,de0 */ nu1 = x * nu0 + (double) iter * nu1; de1 = x * de0 + (double) iter * de1; /* rescale */ if (de1 != 0.) { nu0 /= de1; de0 /= de1; nu1 /= de1; de1 = 1.; } /* check for convergence */ if (fabs((nu1-oldp)/nu1) < 1.e-7) { esl_stats_LogGamma(a, &qax); qax = nu1 * exp(a * log(x) - x - qax); if (ret_pax != NULL) *ret_pax = 1 - qax; if (ret_qax != NULL) *ret_qax = qax; return eslOK; } oldp = nu1; } ESL_EXCEPTION(eslENOHALT, "esl_stats_IncompleteGamma(): fraction failed to converge"); } else /* x <= a+1 */ { double p; /* current sum */ double val; /* current value used in sum */ /* For x <= a+1 we use a convergent series instead: * P(a,x) = \frac{\gamma(a,x)}{\Gamma(a)}, * where * \gamma(a,x) = e^{-x}x^a \sum_{n=0}{\infty} \frac{\Gamma{a}}{\Gamma{a+1+n}} x^n * which looks appalling but the sum is in fact rearrangeable to * a simple series without the \Gamma functions: * = \frac{1}{a} + \frac{x}{a(a+1)} + \frac{x^2}{a(a+1)(a+2)} ... * and it's obvious that this should converge nicely for x <= a+1. */ p = val = 1. / a; for (iter = 1; iter < 10000; iter++) { val *= x / (a+(double)iter); p += val; if (fabs(val/p) < 1.e-7) { esl_stats_LogGamma(a, &pax); pax = p * exp(a * log(x) - x - pax); if (ret_pax != NULL) *ret_pax = pax; if (ret_qax != NULL) *ret_qax = 1. - pax; return eslOK; } } ESL_EXCEPTION(eslENOHALT, "esl_stats_IncompleteGamma(): series failed to converge"); } /*NOTREACHED*/ return eslOK; } /*----------------- end, special functions ----------------------*/ /***************************************************************** * 3. Standard statistical tests. *****************************************************************/ /* Function: esl_stats_GTest() * Synopsis: Calculates a G-test on 2 vs. 1 binomials. * * Purpose: In experiment a, we've drawn successes in total * trials; in experiment b, we've drawn successes in * total trials. Are the counts different enough to * conclude that the two experiments are different? The * null hypothesis is that the successes in both experiments * were drawn from the same binomial distribution with * per-trial probability $p$. The tested hypothesis is that * experiments a,b have different binomial probabilities * $p_a,p_b$. The G-test is a log-likelihood-ratio statistic, * assuming maximum likelihood values for $p,p_a,p_b$. * $2G$ is distributed approximately as $X^2(1)$, * %"X" is "Chi" * which we use to calculate a P-value for the G statistic. * * Args: ca - number of positives in experiment a * na - total number in experiment a * cb - number of positives in experiment b * nb - total number in experiment b * ret_G - RETURN: G statistic, a log likelihood ratio, in nats * ret_P - RETURN: P-value for the G-statistic * * Returns: on success. * * Throws: (no abnormal error conditions) * * Xref: Archive1999/0906-sagescore/sagescore.c */ int esl_stats_GTest(int ca, int na, int cb, int nb, double *ret_G, double *ret_P) { double a,b,c,d,n; double G = 0.; a = (double) ca; b = (double) (na - ca); c = (double) cb; d = (double) (nb - cb); n = (double) na+nb; /* Yes, the calculation here is correct; algebraic * rearrangement of the log-likelihood-ratio with * p_a = ca/na, p_b = cb/nb, and p = (ca+cb)/(na+nb). * Guard against 0 probabilities; assume 0 log 0 => 0. */ if (a > 0.) G = a * log(a); if (b > 0.) G += b * log(b); if (c > 0.) G += c * log(c); if (d > 0.) G += d * log(d); if (n > 0.) G += n * log(n); if (a+b > 0.) G -= (a+b) * log(a+b); if (c+d > 0.) G -= (c+d) * log(c+d); if (a+c > 0.) G -= (a+c) * log(a+c); if (b+d > 0.) G -= (b+d) * log(b+d); *ret_G = G; return esl_stats_IncompleteGamma( 0.5, G, NULL, ret_P); } /* Function: esl_stats_ChiSquaredTest() * Synopsis: Calculates a $\chi^2$ P-value. * Incept: SRE, Tue Jul 19 11:39:32 2005 [St. Louis] * * Purpose: Calculate the probability that a chi-squared statistic * with degrees of freedom would exceed the observed * chi-squared value ; return it in . If * this probability is less than some small threshold (say, * 0.05 or 0.01), then we may reject the hypothesis we're * testing. * * Args: v - degrees of freedom * x - observed chi-squared value * ret_answer - RETURN: P(\chi^2 > x) * * Returns: on success. * * Throws: if or are out of valid range. * if iterative calculation fails. */ int esl_stats_ChiSquaredTest(int v, double x, double *ret_answer) { return esl_stats_IncompleteGamma((double)v/2, x/2, NULL, ret_answer); } /*----------------- end, statistical tests ---------------------*/ /***************************************************************** * 4. Data fitting. *****************************************************************/ /* Function: esl_stats_LinearRegression() * Synopsis: Fit data to a straight line. * Incept: SRE, Sat May 26 11:33:46 2007 [Janelia] * * Purpose: Fit points , to a straight line * $y = a + bx$ by linear regression. * * The $x_i$ are taken to be known, and the $y_i$ are taken * to be observed quantities associated with a sampling * error $\sigma_i$. If known, the standard deviations * $\sigma_i$ for $y_i$ are provided in the array. * If they are unknown, pass , and the * routine will proceed with the assumption that $\sigma_i * = 1$ for all $i$. * * The maximum likelihood estimates for $a$ and $b$ are * optionally returned in and . * * The estimated standard deviations of $a$ and $b$ and * their estimated covariance are optionally returned in * , , and . * * The Pearson correlation coefficient is optionally * returned in . * * The $\chi^2$ P-value for the regression fit is * optionally returned in . This P-value may only be * obtained when the $\sigma_i$ are known. If is * passed as and is requested, <*opt_Q> is * set to 1.0. * * This routine follows the description and algorithm in * \citep[pp.661-666]{Press93}. * * must be greater than 2; at least two x[i] must * differ; and if is provided, all must * be $>0$. If any of these conditions isn't met, the * routine throws . * * Args: x - x[0..n-1] * y - y[0..n-1] * sigma - sample error in observed y_i * n - number of data points * opt_a - optRETURN: intercept estimate * opt_b - optRETURN: slope estimate * opt_sigma_a - optRETURN: error in estimate of a * opt_sigma_b - optRETURN: error in estimate of b * opt_cov_ab - optRETURN: covariance of a,b estimates * opt_cc - optRETURN: Pearson correlation coefficient for x,y * opt_Q - optRETURN: X^2 P-value for linear fit * * Returns: on success. * * Throws: on allocation error; * if a contract condition isn't met; * if the chi-squared test fails. * In these cases, all optional return values are set to 0. */ int esl_stats_LinearRegression(const double *x, const double *y, const double *sigma, int n, double *opt_a, double *opt_b, double *opt_sigma_a, double *opt_sigma_b, double *opt_cov_ab, double *opt_cc, double *opt_Q) { int status; double *t = NULL; double S, Sx, Sy, Stt; double Sxy, Sxx, Syy; double a, b, sigma_a, sigma_b, cov_ab, cc, X2, Q; double xdev, ydev; double tmp; int i; /* Contract checks. */ if (n <= 2) ESL_XEXCEPTION(eslEINVAL, "n must be > 2 for linear regression fitting"); if (sigma != NULL) for (i = 0; i < n; i++) if (sigma[i] <= 0.) ESL_XEXCEPTION(eslEINVAL, "sigma[%d] <= 0", i); status = eslEINVAL; for (i = 0; i < n; i++) if (x[i] != 0.) { status = eslOK; break; } if (status != eslOK) ESL_XEXCEPTION(eslEINVAL, "all x[i] are 0."); /* Allocations */ ESL_ALLOC(t, sizeof(double) * n); /* S = \sum_{i=1}{n} \frac{1}{\sigma_i^2}. (S > 0.) */ if (sigma != NULL) { for (S = 0., i = 0; i < n; i++) S += 1./ (sigma[i] * sigma[i]); } else S = (double) n; /* S_x = \sum_{i=1}{n} \frac{x[i]}{ \sigma_i^2} (Sx real.) */ for (Sx = 0., i = 0; i < n; i++) { if (sigma == NULL) Sx += x[i]; else Sx += x[i] / (sigma[i] * sigma[i]); } /* S_y = \sum_{i=1}{n} \frac{y[i]}{\sigma_i^2} (Sy real.) */ for (Sy = 0., i = 0; i < n; i++) { if (sigma == NULL) Sy += y[i]; else Sy += y[i] / (sigma[i] * sigma[i]); } /* t_i = \frac{1}{\sigma_i} \left( x_i - \frac{S_x}{S} \right) (t_i real) */ for (i = 0; i < n; i++) { t[i] = x[i] - Sx/S; if (sigma != NULL) t[i] /= sigma[i]; } /* S_{tt} = \sum_{i=1}^n t_i^2 (if at least one x is != 0, Stt > 0) */ for (Stt = 0., i = 0; i < n; i++) { Stt += t[i] * t[i]; } /* b = \frac{1}{S_{tt}} \sum_{i=1}^{N} \frac{t_i y_i}{\sigma_i} */ for (b = 0., i = 0; i < n; i++) { if (sigma != NULL) { b += t[i]*y[i] / sigma[i]; } else { b += t[i]*y[i]; } } b /= Stt; /* a = \frac{ S_y - S_x b } {S} */ a = (Sy - Sx * b) / S; /* \sigma_a^2 = \frac{1}{S} \left( 1 + \frac{ S_x^2 }{S S_{tt}} \right) */ sigma_a = sqrt ((1. + (Sx*Sx) / (S*Stt)) / S); /* \sigma_b = \frac{1}{S_{tt}} */ sigma_b = sqrt (1. / Stt); /* Cov(a,b) = - \frac{S_x}{S S_{tt}} */ cov_ab = -Sx / (S * Stt); /* Pearson correlation coefficient */ Sxy = Sxx = Syy = 0.; for (i = 0; i < n; i++) { if (sigma != NULL) { xdev = (x[i] / (sigma[i] * sigma[i])) - (Sx / n); ydev = (y[i] / (sigma[i] * sigma[i])) - (Sy / n); } else { xdev = x[i] - (Sx / n); ydev = y[i] - (Sy / n); } Sxy += xdev * ydev; Sxx += xdev * xdev; Syy += ydev * ydev; } cc = Sxy / (sqrt(Sxx) * sqrt(Syy)); /* \chi^2 */ for (X2 = 0., i = 0; i < n; i++) { tmp = y[i] - a - b*x[i]; if (sigma != NULL) tmp /= sigma[i]; X2 += tmp*tmp; } /* We can calculate a goodness of fit if we know the \sigma_i */ if (sigma != NULL) { if (esl_stats_ChiSquaredTest(n-2, X2, &Q) != eslOK) { status = eslENORESULT; goto ERROR; } } else Q = 1.0; /* If we didn't use \sigma_i, adjust the sigmas for a,b */ if (sigma == NULL) { tmp = sqrt(X2 / (double)(n-2)); sigma_a *= tmp; sigma_b *= tmp; } /* Done. Set up for normal return. */ free(t); if (opt_a != NULL) *opt_a = a; if (opt_b != NULL) *opt_b = b; if (opt_sigma_a != NULL) *opt_sigma_a = sigma_a; if (opt_sigma_b != NULL) *opt_sigma_b = sigma_b; if (opt_cov_ab != NULL) *opt_cov_ab = cov_ab; if (opt_cc != NULL) *opt_cc = cc; if (opt_Q != NULL) *opt_Q = Q; return eslOK; ERROR: if (t != NULL) free(t); if (opt_a != NULL) *opt_a = 0.; if (opt_b != NULL) *opt_b = 0.; if (opt_sigma_a != NULL) *opt_sigma_a = 0.; if (opt_sigma_b != NULL) *opt_sigma_b = 0.; if (opt_cov_ab != NULL) *opt_cov_ab = 0.; if (opt_cc != NULL) *opt_cc = 0.; if (opt_Q != NULL) *opt_Q = 0.; return status; } /*------------------- end, data fitting -------------------------*/ /***************************************************************** * 5. Unit tests. *****************************************************************/ #ifdef eslSTATS_TESTDRIVE #include "esl_random.h" #include "esl_stopwatch.h" #ifdef HAVE_LIBGSL #include #endif /* The LogGamma() function is rate-limiting in hmmbuild, because it is * used so heavily in mixture Dirichlet calculations. * ./configure --with-gsl; [compile test driver] * ./stats_utest -v * runs a comparison of time/precision against GSL. * SRE, Sat May 23 10:04:41 2009, on home Mac: * LogGamma = 1.29u / N=1e8 = 13 nsec/call * gsl_sf_lngamma = 1.43u / N=1e8 = 14 nsec/call */ static void utest_LogGamma(ESL_RANDOMNESS *r, int N, int be_verbose) { char *msg = "esl_stats_LogGamma() unit test failed"; ESL_STOPWATCH *w = esl_stopwatch_Create(); double *x = malloc(sizeof(double) * N); double *lg = malloc(sizeof(double) * N); double *lg2 = malloc(sizeof(double) * N); int i; for (i = 0; i < N; i++) x[i] = esl_random(r) * 100.; esl_stopwatch_Start(w); for (i = 0; i < N; i++) if (esl_stats_LogGamma(x[i], &(lg[i])) != eslOK) esl_fatal(msg); esl_stopwatch_Stop(w); if (be_verbose) esl_stopwatch_Display(stdout, w, "esl_stats_LogGamma() timing: "); #ifdef HAVE_LIBGSL esl_stopwatch_Start(w); for (i = 0; i < N; i++) lg2[i] = gsl_sf_lngamma(x[i]); esl_stopwatch_Stop(w); if (be_verbose) esl_stopwatch_Display(stdout, w, "gsl_sf_lngamma() timing: "); for (i = 0; i < N; i++) if (esl_DCompare(lg[i], lg2[i], 1e-2) != eslOK) esl_fatal(msg); #endif free(lg2); free(lg); free(x); esl_stopwatch_Destroy(w); } /* The test of esl_stats_LinearRegression() is a statistical test, * so we can't be too aggressive about testing results. * * Args: * r - a source of randomness * use_sigma - TRUE to pass sigma to the regression fit. * be_verbose - TRUE to print results (manual, not automated test mode) */ static void utest_LinearRegression(ESL_RANDOMNESS *r, int use_sigma, int be_verbose) { char msg[] = "linear regression unit test failed"; double a = -3.; double b = 1.; int n = 100; double xori = -20.; double xstep = 1.0; double setsigma = 1.0; /* sigma on all points */ int i; double *x = NULL; double *y = NULL; double *sigma = NULL; double ae, be, siga, sigb, cov_ab, cc, Q; if ((x = malloc(sizeof(double) * n)) == NULL) esl_fatal(msg); if ((y = malloc(sizeof(double) * n)) == NULL) esl_fatal(msg); if ((sigma = malloc(sizeof(double) * n)) == NULL) esl_fatal(msg); /* Simulate some linear data */ for (i = 0; i < n; i++) { sigma[i] = setsigma; x[i] = xori + i*xstep; y[i] = esl_rnd_Gaussian(r, a + b*x[i], sigma[i]); } if (use_sigma) { if (esl_stats_LinearRegression(x, y, sigma, n, &ae, &be, &siga, &sigb, &cov_ab, &cc, &Q) != eslOK) esl_fatal(msg); } else { if (esl_stats_LinearRegression(x, y, NULL, n, &ae, &be, &siga, &sigb, &cov_ab, &cc, &Q) != eslOK) esl_fatal(msg); } if (be_verbose) { printf("Linear regression test:\n"); printf("estimated intercept a = %8.4f [true = %8.4f]\n", ae, a); printf("estimated slope b = %8.4f [true = %8.4f]\n", be, b); printf("estimated sigma on a = %8.4f\n", siga); printf("estimated sigma on b = %8.4f\n", sigb); printf("estimated cov(a,b) = %8.4f\n", cov_ab); printf("correlation coeff = %8.4f\n", cc); printf("P-value = %8.4f\n", Q); } /* The following tests are statistical. */ if ( fabs(ae-a) > 2*siga ) esl_fatal(msg); if ( fabs(be-b) > 2*sigb ) esl_fatal(msg); if ( cc < 0.95) esl_fatal(msg); if (use_sigma) { if (Q < 0.001) esl_fatal(msg); } else { if (Q != 1.0) esl_fatal(msg); } free(x); free(y); free(sigma); } #endif /*eslSTATS_TESTDRIVE*/ /*-------------------- end of unit tests ------------------------*/ /***************************************************************** * 6. Test driver. *****************************************************************/ #ifdef eslSTATS_TESTDRIVE /* gcc -g -Wall -o stats_utest -L. -I. -DeslSTATS_TESTDRIVE esl_stats.c -leasel -lm * gcc -DHAVE_LIBGSL -O2 -o stats_utest -L. -I. -DeslSTATS_TESTDRIVE esl_stats.c -leasel -lgsl -lm */ #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_stats.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, {"-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0}, {"-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "verbose: show verbose output", 0}, {"-N", eslARG_INT,"10000000", NULL, NULL, NULL, NULL, NULL, "number of trials in LogGamma test", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for stats special functions"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_Create(esl_opt_GetInteger(go, "-s")); int be_verbose = esl_opt_GetBoolean(go, "-v"); int N = esl_opt_GetInteger(go, "-N"); if (be_verbose) printf("seed = %" PRIu32 "\n", esl_randomness_GetSeed(r)); utest_LogGamma(r, N, be_verbose); utest_LinearRegression(r, TRUE, be_verbose); utest_LinearRegression(r, FALSE, be_verbose); esl_getopts_Destroy(go); esl_randomness_Destroy(r); exit(0); } #endif /*eslSTATS_TESTDRIVE*/ /*------------------- end of test driver ------------------------*/ /***************************************************************** * 7. Examples. *****************************************************************/ /* Compile: gcc -g -Wall -o example -I. -DeslSTATS_EXAMPLE esl_stats.c esl_random.c easel.c -lm * or gcc -g -Wall -o example -I. -L. -DeslSTATS_EXAMPLE esl_stats.c -leasel -lm */ #ifdef eslSTATS_EXAMPLE /*::cexcerpt::stats_example::begin::*/ /* gcc -g -Wall -o example -I. -DeslSTATS_EXAMPLE esl_stats.c esl_random.c easel.c -lm */ #include #include "easel.h" #include "esl_random.h" #include "esl_stats.h" int main(void) { ESL_RANDOMNESS *r = esl_randomness_Create(0); double a = -3.; double b = 1.; double xori = -20.; double xstep = 1.0; double setsigma = 1.0; /* sigma on all points */ int n = 100; double *x = malloc(sizeof(double) * n); double *y = malloc(sizeof(double) * n); double *sigma = malloc(sizeof(double) * n); int i; double ae, be, siga, sigb, cov_ab, cc, Q; /* Simulate some linear data, with Gaussian noise added to y_i */ for (i = 0; i < n; i++) { sigma[i] = setsigma; x[i] = xori + i*xstep; y[i] = esl_rnd_Gaussian(r, a + b*x[i], sigma[i]); } if (esl_stats_LinearRegression(x, y, sigma, n, &ae, &be, &siga, &sigb, &cov_ab, &cc, &Q) != eslOK) esl_fatal("linear regression failed"); printf("estimated intercept a = %8.4f [true = %8.4f]\n", ae, a); printf("estimated slope b = %8.4f [true = %8.4f]\n", be, b); printf("estimated sigma on a = %8.4f\n", siga); printf("estimated sigma on b = %8.4f\n", sigb); printf("estimated cov(a,b) = %8.4f\n", cov_ab); printf("correlation coeff = %8.4f\n", cc); printf("P-value = %8.4f\n", Q); free(x); free(y); free(sigma); esl_randomness_Destroy(r); exit(0); } /*::cexcerpt::stats_example::end::*/ #endif /* eslSTATS_EXAMPLE */ #ifdef eslSTATS_EXAMPLE2 #include #include "easel.h" #include "esl_getopts.h" #include "esl_stats.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example from the stats module: using a G-test"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 4, argc, argv, banner, usage); int ca = strtol(esl_opt_GetArg(go, 1), NULL, 10); int na = strtol(esl_opt_GetArg(go, 2), NULL, 10); int cb = strtol(esl_opt_GetArg(go, 3), NULL, 10); int nb = strtol(esl_opt_GetArg(go, 4), NULL, 10); double G, P; int status; if (ca > na || cb > nb) esl_fatal("argument order wrong? expect ca, na, cb, nb for ca/na, cb/nb"); if ( (status = esl_stats_GTest(ca, na, cb, nb, &G, &P)) != eslOK) esl_fatal("G-test failed?"); printf("%-10.3g %12.2f\n", P, G); exit(0); } #endif /* eslSTATS_EXAMPLE2 */ /*--------------------- end of examples -------------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_stats.c 854 2013-02-25 22:00:19Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_stats.c $ *****************************************************************/ hmmer-3.1b2/easel/interface_gsl.c0000664361611702660230000000417212473612610016333 0ustar wheelerteddy/* Easel's interfaces to the GNU Scientific Library */ #ifdef HAVE_LIBGSL #include "esl_config.h" #include #include "easel/easel.h" #include "easel/dmatrix.h" #include #include #include #include int esl_GSL_MatrixInversion(ESL_DMATRIX *A, ESL_DMATRIX **ret_Ai) { ESL_DMATRIX *Ai; /* RETURN: A^{-1} */ gsl_matrix_view Av; /* gsl view of matrix A */ gsl_matrix *LU; /* LU decomposition of A */ gsl_matrix *Aiv; /* gsl version of A^{-1} */ gsl_permutation *permute; int signum; int i,j; Ai = esl_dmx_Alloc(A->n, A->m); /* Invert U to get Ui, using LU decomposition. */ Av = gsl_matrix_view_array(A->mx[0], A->n, A->n); LU = gsl_matrix_alloc(A->n, A->n); Aiv = gsl_matrix_alloc(A->n, A->n); /* U^{-1}: inverse of U */ permute = gsl_permutation_alloc(A->n); gsl_matrix_memcpy(LU, &Av.matrix); if (gsl_linalg_LU_decomp(LU, permute, &signum) != 0) ESL_EXCEPTION(eslEUNKNOWN, "gsl failed"); if (gsl_linalg_LU_invert(LU, permute, Aiv) != 0) ESL_EXCEPTION(eslEUNKNOWN, "gsl failed"); gsl_matrix_free(LU); gsl_permutation_free(permute); /* recover the matrix from gsl. */ for (i = 0; i < A->n; i++) for (j = 0; j < A->n; j++) Ai->mx[i][j] = gsl_matrix_get(Aiv, i, j); gsl_matrix_free(Aiv); ret->Ai = Ai; return eslOK; } #endif /*HAVE_LIBGSL*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: interface_gsl.c 685 2011-05-23 14:27:52Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/interface_gsl.c $ *****************************************************************/ hmmer-3.1b2/easel/easel.tex0000664361611702660230000004423412473612605015204 0ustar wheelerteddyThe easel (esl) module implements a small set of functionality shared by all the modules: notably, the error-handling system. \section{Error handling conventions} Easel might be used in applications ranging from small command line utilities to complex graphical user interfaces and parallel systems. Simple and complex applications have different needs for how errors should be handled by a library. In a simple application, we don't want to write a lot of code to checking return codes for unexpected problems. We would prefer to have Easel crash out with an appropriate message to \ccode{stderr} -- after all, that's all a simple application would do anyway. On the other hand, there are certain problems that even the simplest command-line applications should handle gracefully. Errors involving user input (including typos in command line arguments, bad file formats, nonexistent files, or bad file permissions) are ``normal'' and should be expected. Users will do anything. In a complex application, we may want to guarantee that execution never terminates within a library routine. In this case, library functions always need to return control to the application, even in the most unexpected circumstances, so the application can fail gracefully. A failure in an Easel routine should not suddenly crash a whole graphical user environment, for example. Additionally, because a complex application may not even be associated with a terminal, a library cannot count on printing error messages directly to \ccode{stderr}. These considerations motivate Easel's error handling conventions. Most Easel procedures return an integer status code. An \ccode{eslOK} code indicates that the procedure succeeded. A nonzero code indicates an error. Easel distinguishes two kinds of errors: \begin{itemize} \item \textbf{Failures} include normal ``errors'' (like a read failing when the end of a file is reached), and errors that are the user's fault, such as bad input (which are also normal, because users will do anything.) We say that failures are \textbf{returned} by Easel functions. All applications should check the return status of any Easel function that might return a failure code. Relatively few Easel functions can return failure codes. The ones that do are generally functions having to do with reading user input. \item \textbf{Exceptions} are errors that are the fault of Easel (bugs in my code) or your application (bugs in your code) or the system (resource allocation failures). We say that exceptions are \textbf{thrown} by Easel functions. By default, exceptions result in immediate termination of your program. Optionally, you may provide your own exception handler, in which case Easel functions may return nonzero exception codes (in addition to any nonzero failure codes). \end{itemize} The documentation for each Easel function lists what failure codes it may return, as well as what exception codes it may throw (if a nonfatal exception handler has been registered), in addition to the \ccode{eslOK} normal status code. The list of possible status codes is shown in Table~\ref{tbl:statuscodes}. There is no intrinsic distinction between failure codes and exception codes. Codes that indicate failures in one function may indicate exceptions in another function. \begin{table} \begin{center} \input{cexcerpts/statuscodes} \end{center} \caption{List of all status codes that might be returned by Easel functions.} \label{tbl:statuscodes} \end{table} Not all Easel functions return status codes. \ccode{*\_Create()} functions that allocate and create new objects usually follow a convention of returning a valid pointer on success, and \ccode{NULL} on failure; these are functions that only fail by memory allocation failure. Destructor functions (\ccode{*\_Destroy()}) always return \ccode{void}, and must have no points of failure of their own, because destructors can be called when we're already handling an exception. Functions with names containing \ccode{Is}, such as \ccode{esl\_abc\_XIsValid()}, are tests that return \ccode{TRUE} or \ccode{FALSE}. Finally, there are some ``true'' functions that simply return an answer, rather than a status code; these must be functions that have no points of failure. \subsection{Failure messages} When failures occur, often the failure status code is sufficient for your application to know what went wrong. For instance, \ccode{eslEOF} means end-of-file, so your application might report \ccode{"premature end of file"} if it receives such a status code unexpectedly. But for failures involving a file format syntax problem (for instance) a terse \ccode{eslESYNTAX} return code is not as useful as knowing \ccode{"Parse failed at line 42 of file foo.data, where I expected to see an integer, but I saw nothing"}. When your application might want more information to format an informative failure message for the user, the Easel API provides (somewhere) a message buffer called \ccode{errbuf[]}. In many cases, file parsers in Easel are encapsulated in objects. In these cases, the object itself allocates an \ccode{errbuf[]} message string. (For instance, see the \eslmod{sqio} module and its \ccode{ESL\_SQFILE} object for sequence file parsing.) In a few cases, the \ccode{errbuf[]} is part of the procedure's call API, and space is provided by the caller. In such cases, the caller either passes \ccode{NULL} (no failure message is requested) or a pointer to allocated space for at least \ccode{eslERRBUFSIZE} chars. (For instance, see the \eslmod{tree} module and the \ccode{esl\_tree\_ReadNewick()} parser.) Easel uses \ccode{sprintf()} to format the messages in \ccode{errbuf[]}'s. Each individual call guarantees that the size of its message cannot overflow \ccode{eslERRBUFSIZE} chars, so none of these \ccode{sprintf()} calls represent possible security vulnerabilities (buffer overrun attacks). \subsection{Exception handling} Easel's default exception handler prints a message to \ccode{stderr} and aborts execution of your program, as in: \begin{cchunk} Easel exception: Memory allocation failed. Aborted at file sqio.c, line 42. \end{cchunk} Therefore, by default, Easel handles its own exceptions internally, and exception status codes are not returned to your application. Simple applications don't need to worry about checking for exceptions. If your application wants to handle exceptions itself -- for instance, if you want a guarantee that execution will never terminate from within Easel -- or even if you simply want to change the format of these messages, you can register a custom exception handler which will catch the information from Easel and react appropriately. If your exception handler prints a message and exits, Easel will still just abort without returning exception codes. If your exception handler is nonfatal (returning \ccode{void}), Easel procedures then percolate the exception code up through the call stack until the exception code is returned to your application. To provide your own exception handler, you define your exception handler with the following prototype: \begin{cchunk} extern void my_exception_handler(int code, char *file, int line, char *format, va_list arg); \end{cchunk} An example implementation of a nonfatal exception handler: \begin{cchunk} #include void my_exception_handler(int code, char *file, int line, char *format, va_list arg) { fprintf(stderr, ``Easel threw an exception (code %d):\n'', code); if (format != NULL) vfprintf(stderr, format, arg); fprintf(stderr, ``at line %d, file %s\b'', line, file); return; } \end{cchunk} The \ccode{code}, \ccode{file}, and \ccode{line} are always present. The formatted message (the \ccode{format} and \ccode{va\_list arg}) is optional; the \ccode{format} might be \ccode{NULL}. (\ccode{NULL} messages are used when percolating exceptions up a stack trace, for example.) Then, to register your exception handler, you call \ccode{esl\_exception\_SetHandler(\&my\_error\_handler)} in your application. Normally you would do this before calling any other Easel functions. However, in principle, you can change error handlers at any time. You can also restore the default handler at any time with \ccode{esl\_exception\_RestoreDefaultHandler()}. The implementation of the exception handler relies on a static function pointer that is not threadsafe. If you are writing a threaded program, you need to make sure that multiple threads do not try to change the handler at the same time. Because Easel functions call other Easel functions, the function that first throws an exception may not be the function that your application called. If you implement a nonfatal handler, an exception may result in a partial or complete stack trace of exceptions, as the original exception percolates back to your application. Your exception handler should be able to deal with a stack trace. The first exception code and message will be the most relevant. Subsequent codes and messages arise from that exception percolating upwards. For example, a sophisticated replacement exception handler might push each code/message pair into a FIFO queue. When your application receives an exception code from an Easel call, your application can might then access this queue, and see where the exception occurred in Easel, and what messages Easel left for you. A less sophisticated replacement exception handler might just register the first code/message pair, and ignore the subsequent exceptions from percolating up the stack trace. Note the difference between the exception handler that you register with Easel (which operates inside Easel, and must obey Easel's conventions) and any error handling you do in your own application after Easel returns a nonzero status code to you (which is your own business). Although each function's documentation \emph{in principle} lists all thrown exceptions, \emph{in practice}, you should not trust this list. Because of exceptions percolating up from other Easel calls, it is too easy to forget to document all possible exception codes.\footnote{Someday we should combine a static code analyzer with a script that understands Easel's exception conventions, and automate the enumeration of all possible codes.} If you are catching exceptions, you should program defensively here, and always have a failsafe catch for any nonzero return status. For example, a minimal try/catch idiom for an application calling a Easel function is something like: \begin{cchunk} int status; if ((status = esl_foo_function()) != eslOK) my_failure(); \end{cchunk} Or, a little more complex one that catches some specific errors, but has a failsafe for everything else, is: \begin{cchunk} int status; status = esl_foo_function(); if (status == eslEMEM) my_failure("Memory allocation failure"); else if (status != eslOK) my_failure("Unexpected exception %d\n\", status); \end{cchunk} \subsection{Violations} Internally, Easel also distinguishes a third class of error, termed a \textbf{fatal violation}. Violations never arise in production code; they are used to catch bugs during development and testing. Violations always result in immediate program termination. They are generated by two mechanisms: from assertions that can be optionally enabled in development code, or from test harnesses that call the always-fatal \ccode{esl\_fatal()} function when they detect a problem they're testing for. \subsection{Internal API for error handling} You only need to understand this section if you want to understand Easel's source code (or other code that uses Easel conventions, like HMMER), or if you want to use Easel's error conventions in your own source code. The potentially tricky design issue is the following. One the one hand, you want to be able to return an error or throw an exception ``quickly'' (in less than a line of code). On the other hand, it might require several lines of code to free any resources, set an appropriate return state, and set the appropriate nonzero status code before leaving the function. Easel uses the following error-handling macros: \begin{center} {\small \begin{tabular}{|ll|}\hline \ccode{ESL\_FAIL(code, errbuf, mesg, ...)} & Format errbuf, return failure code. \\ \ccode{ESL\_EXCEPTION(code, mesg, ...)} & Throw an exception, return exception code. \\ \ccode{ESL\_XFAIL(code, errbuf, mesg, ...)} & A failure message, with cleanup convention.\\ \ccode{ESL\_XEXCEPTION(code, mesg, ...)} & An exception, with cleanup convention.\\ \hline \end{tabular} } \end{center} They are implementated in \ccode{easel.h} as: \input{cexcerpts/error_macros} The \ccode{ESL\_FAIL} and \ccode{ESL\_XFAIL} macros are only used when a failure message needs to be formatted. For the simpler case where we just return an error code, Easel simply uses \ccode{return code;} or \ccode{status = code; goto ERROR;}, respectively. The \ccode{X} versions, with the cleanup convention, are sure to offend some programmers' sensibilities. They require the function to provide an \ccode{int status} variable in scope, and they require an \ccode{ERROR:} target for a \ccode{goto}. But if you can stomach that, they provide for a fairly clean idiom for catching exceptions and cleaning up, and cleanly setting different return variable states on success versus failure, as illustrated by this pseudoexample: \begin{cchunk} int foo(char **ret_buf, char **ret_fp) { int status; char *buf = NULL; FILE *fp = NULL; if ((buf = malloc(100)) == NULL) ESL_XEXCEPTION(eslEMEM, "malloc failed"); if ((fp = fopen("foo")) == NULL) ESL_XEXCEPTION(eslENOTFOUND, "file open failed"); *ret_buf = buf; *ret_fp = fp; return eslOK; ERROR: if (buf != NULL) free(buf); *ret_buf = NULL; if (fp != NULL) fclose(fp); *ret_fp = NULL; return status; } \end{cchunk} Additionally, for memory allocation and reallocation, Easel implements two macros \ccode{ESL\_ALLOC()} and \ccode{ESL\_RALLOC()}, which encapsulate standard \ccode{malloc()} and \ccode{realloc()} calls inside Easel's exception-throwing convention. \vspace*{\fill} \begin{quote} \emph{Only a complete outsider could ask your question. Are there control authorities? There are nothing but control authorities. Of course, their purpose is not to uncover errors in the ordinary meaning of the word, since errors do not occur and even when an error does in fact occur, as in your case, who can say conclusively that it is an error?}\\ \hspace*{\fill} -- Franz Kafka, \emph{The Castle} \end{quote} \section{Memory management} \section{Replacements for C library functions} \section{Standard banner for Easel miniapplications} \section{File and path name manipulation} \subsection{Secure temporary files} A program may need to write and read temporary files. Many of the methods for creating temporary files, even using standard library calls, are known to create exploitable security holes \citep{Wheeler03,ChenDeanWagner04}. Easel provides a secure and portable POSIX procedure for obtaining an open temporary file handle, \ccode{esl\_tmpfile()}. This replaces the ANSI C \ccode{tmpfile()} function, which is said to be insecurely implemented on some platforms. Because closing and reopening a temporary file can create an exploitable race condition under certain circumstances, \ccode{esl\_tmpfile()} does not return the name of the invisible file it creates, only an open \ccode{FILE *} handle to it. The tmpfile is not persistent, meaning that it automatically vanishes when the \ccode{FILE *} handle is closed. The tmpfile is created in the usual system world-writable temporary directory, as indicated by \ccode{TMPDIR} or \ccode{TMP} environment variables, or \ccode{/tmp} if neither environment variable is defined. Still, it is sometimes useful, even necessary, to close and reopen a temporary file. For example, Easel's own test suites generate a variety of input files for testing input parsers. Easel also provides the \ccode{esl\_tmpfile\_named()} procedure for creating a persistent tmpfile, which returns both an open \ccode{} handle and the name of the file. Because the tmpfile name is known, the file may be closed and reopened. \ccode{esl\_tmpfile\_named()} creates its files relative to the current working directory, not in \ccode{TMPDIR}, in order to reduce the chances of creating the file in a shared directory where a race condition might be exploited. Nonetheless, secure use of \ccode{esl\_tmpfile\_named()} requires that you must only reopen a tmpfile for reading only, not for writing, and moreover, you must not trust the contents. (It may be possible for an attacker to replace the tmpfile with a symlink to another file.) An example that shows both tmpfile mechanisms: \input{cexcerpts/easel_example_tmpfiles} \section{Internals} \subsection{Input maps} An \esldef{input map} is for converting input ASCII symbols to internal encodings. It is a many-to-one mapping of the 128 7-bit ASCII symbol codes (0..127) onto new ASCII symbol codes. It is defined as an \ccode{unsigned char inmap[128]} or a \ccode{unsigned char *} allocated for 128 entries. Input maps are used in two contexts: for filtering ASCII text input into internal text strings, and for converting ASCII input or internal ASCII strings into internal digitized sequences (an \eslmod{alphabet} object contains an input map that it uses for digitization). The rationale for input maps is the following. The ASCII strings that represent biosequence data require frequent massaging. An input file might have sequence data mixed up with numerical coordinates and punctuation for human readability. We might want to distinguish characters that represent residues (that should be input) from characters for coordinates and punctuation (that should be ignored) from characters that aren't supposed to be present at all (that should trigger an error or warning). Also, in representing a sequence string internally, we might want to map the symbols in an input string onto a smaller internal alphabet. For example, we might want to be case-insensitive (allow both T and t to represent thymine), or we might want to allow an input T to mean U in a program that deals with RNA sequence analysis, so that input files can either contain RNA or DNA sequence data. Easel reuses the input map concept in routines involved in reading and representing input character sequences, for example in the \eslmod{alphabet}, \eslmod{sqio}, and \eslmod{msa} modules. hmmer-3.1b2/easel/esl_hyperexp.tex0000664361611702660230000000211512473612606016613 0ustar wheelerteddy The hyperexponential (mixture exponential) distribution may be useful for fitting fat-tailed empirical distributions. \subsection{Hyperexponential densities} The hyperexponential distribution is a mixture of $K$ independent exponentials with a common location $\mu$ and different decay constants $\lambda_k$. The probability density function (PDF) is: \begin{equation} P(X=x) = \sum_k^{K} q_k \lambda_k e^{- \lambda_k (x - \mu)} \label{eqn:hyperexp_pdf} \end{equation} The cumulative distribution function (CDF) is: \begin{equation} P(X \leq x) = \sum_k^{K} q_k (1 - e^{- \lambda_k (x - \mu)}) \label{eqn:hyperexp_cdf} \end{equation} Variate $x$ ranges $\mu \leq x < \infty$. Mixture coefficients $q_k$ specify the prior probability of each component $k$; $0 \leq q_k \leq 1$ and $\sum_k q_k = 1$. The single location parameter $\mu$ is unconstrained, $-\infty < \mu < \infty$. (Exponential distributions are usually represented without an explicit location parameter, implicitly assuming $\mu = 0$.) The scale parameters $\lambda_k$ for each component are nonnegative, $\lambda_k > 0$. hmmer-3.1b2/easel/esl_dmatrix.tex0000664361611702660230000002276712473612606016436 0ustar wheelerteddyThe \eslmod{dmatrix} module implements 2D matrices and linear algebra operations. There are two objects. The main one is a \ccode{ESL\_DMATRIX}, a 2D real-valued matrix of n rows and m columns. There is also \ccode{ESL\_PERMUTATION}, a special matrix used in LU decompositions. It is straightforward to call standard BLAS and LAPACK linear algebra routines on the data in an \ccode{ESL\_DMATRIX}. \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \hyperlink{func:esl_dmatrix_Create()}{\ccode{esl\_dmatrix\_Create()}} & Create general matrix.\\ \hyperlink{func:esl_dmatrix_CreateUpper()}{\ccode{esl\_dmatrix\_CreateUpper()}} & Create packed upper triangular matrix.\\ \hyperlink{func:esl_dmatrix_Destroy()}{\ccode{esl\_dmatrix\_Destroy()}} & Free a matrix.\\ \hyperlink{func:esl_dmatrix_Dump()}{\ccode{esl\_dmatrix\_Dump()}} & Dump matrix internals to output stream.\\ \hyperlink{func:esl_dmatrix_Copy()}{\ccode{esl\_dmatrix\_Copy()}} & Make a copy of a matrix (no new allocation).\\ \hyperlink{func:esl_dmatrix_Clone()}{\ccode{esl\_dmatrix\_Clone()}} & Duplicate a matrix (allocate new storage).\\ \hyperlink{func:esl_dmatrix_Compare()}{\ccode{esl\_dmatrix\_Compare()}} & Compare two matrices for equality.\\ \hyperlink{func:esl_dmatrix_Set()}{\ccode{esl\_dmatrix\_Set()}} & Set all cells in matrix to same scalar value.\\ \hyperlink{func:esl_dmatrix_SetZero()}{\ccode{esl\_dmatrix\_SetZero()}} & Set all cells in matrix to zero.\\ \hyperlink{func:esl_dmatrix_SetIdentity()}{\ccode{esl\_dmatrix\_SetIdentity()}} & Set diagonal elements to 1, all others to zero.\\ \hyperlink{func:esl_dmx_Max()}{\ccode{esl\_dmx\_Max()}} &Returns maximum element value.\\ \hyperlink{func:esl_dmx_Min()}{\ccode{esl\_dmx\_Min()}} &Returns maximum element value.\\ \hyperlink{func:esl_dmx_Sum()}{\ccode{esl\_dmx\_Sum()}} &Returns sum of all elements.\\ \hyperlink{func:esl_permutation_Create()}{\ccode{esl\_permutation\_Create()}} & Create a permutation matrix.\\ \hyperlink{func:esl_permutation_Destroy()}{\ccode{esl\_permutation\_Destroy()}} & Free a permutation matrix.\\ \hyperlink{func:esl_permutation_Reuse()}{\ccode{esl\_permutation\_Reuse()}} & Reuse a permutation matrix.\\ \hyperlink{func:esl_permutation_Dump()}{\ccode{esl\_permutation\_Dump()}} & Dump permutation matrix internals to output stream.\\ \hyperlink{func:esl_dmx_Multiply()}{\ccode{esl\_dmx\_Multiply()}} & Matrix multiplication.\\ \hyperlink{func:esl_dmx_Transpose()}{\ccode{esl\_dmx\_Transpose()}} & Matrix transpostion.\\ \hyperlink{func:esl_dmx_Add()}{\ccode{esl\_dmx\_Add()}} & Matrix addition.\\ \hyperlink{func:esl_dmx_Scale()}{\ccode{esl\_dmx\_Scale()}} & Multiply a matrix by a scalar.\\ \hyperlink{func:esl_dmx_AddScale()}{\ccode{esl\_dmx\_AddScale()}} & $A + kB$ \\ \hyperlink{func:esl_dmx_Permute_PA()}{\ccode{esl\_dmx\_Permute\_PA()}} & $B = PA$, a row-wise permutation of $A$.\\ \hyperlink{func:esl_dmx_LUP_decompose()}{\ccode{esl\_dmx\_LUP\_decompose()}} & Permuted LU decomposition.\\ \hyperlink{func:esl_dmx_LU_separate()}{\ccode{esl\_dmx\_LU\_separate()}} & Get answers from a LU decomposition.\\ \hyperlink{func:esl_dmx_Invert()}{\ccode{esl\_dmx\_Invert()}} & Matrix inversion.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{dmatrix} API.} \label{tbl:dmatrix_api} \end{table} \subsection{Example of using the dmatrix API} A toy example that demonstrates the syntax of creating three 4x4 square matrices and doing some simple operations on them: \input{cexcerpts/dmatrix_example} \subsection{Accessing matrix values} The accessible internals of the \ccode{ESL\_DMATRIX} structure are: \input{cexcerpts/dmatrix_obj} The matrix is stored in row-major orientation: the value in cell $(i,j)$ in row $i$ and column $j$ is in \ccode{mx->mx[i][j]}. Elements are stored in a single array \ccode{mx->mx[0]}. This is important for interoperability with BLAS and LAPACK; see below. The row pointers \ccode{mx->mx[i]} are initialized so that elements may be accessed simply as \ccode{mx->mx[i][j]}, rather than by pointer arithmetic \ccode{mx->mx[0] + i*mx->m + j}. \subsection{Specialized matrix types} Normally matrices are created with \ccode{esl\_dmatrix\_Create()}, which allocates storage for all $n \times m$ cells. Easel calls this a matrix of type \ccode{eslGENERAL}. Matrices may have more restricted forms, which may constrain certain values and may allow packed storage. For example, an upper triangular matrix is one in which all elements $i>j$ have a value of zero. When we calculate the minimum in such a matrix with \ccode{esl\_dmatrix\_Min()}, we probably don't want to consider the $i>j$ elements. We also can save almost two-fold in storage by not storing the $i>j$ elements at all. Other types include square, lower triagonal, and symmetric matrices. We expect to need to expand Easel's implementation of different matrix types in the future, but right now, Easel has just one other matrix type, \ccode{eslUPPER}, for packed upper triangular matrices. \subsubsection{\ccode{eslUPPER}: packed upper triangular matrices} An \ccode{eslUPPER} matrix is created with \ccode{esl\_dmatrix\_CreateUpper(int n)}. It is necessarily square $n \times n$, so only one dimension argument is passed. Most but not all functions in \eslmod{dmatrix} can operate on \ccode{eslUPPER} matrix types in addition to the usual \ccode{eslGENERAL} type. The caller must not access any cell $i>j$ in an \ccode{eslUPPER} matrix. Setting a cell $i>j$ will corrupt the matrix. Accessing cell $i>j$ will return an incorrect value, not zero. The $n (n+1) / 2$ elements of the upper triagonal matrix are packed into an array \ccode{mx->mx[0]}. You can access element $i,j$ by pointer arithmetic at \ccode{mx->mx[j + i(2*mx->m-i-1)/2]} if you like, but it is easier to access element $i,j$ by the usual \ccode{mx->mx[i][j]}. This is made possible because the row pointers \ccode{mx->mx[i]} in an \ccode{eslUPPER} matrix are tricksily initialized in an overlapping fashion so that \ccode{mx->mx[i][j]} does the right thing for $i \leq j$. This overlapping is also the reason why \ccode{mx->mx[i][j]} accesses the wrong element when $i>j$. \subsubsection{Notes on the current implementation of matrix types} Easel matrix types conflate packing and element validity together. For example, an upper triangular matrix may be stored either in an \ccode{eslGENERAL} matrix type (in which case elements $i>j$ are set to zero) or the packed \ccode{eslUPPER} matrix type (in which case elements $i>j$ aren't even stored). Using the \ccode{eslUPPER} matrix type is 2x more space efficient, and also, operations like \ccode{esl\_dmatrix\_Min()} and \ccode{esl\_dmatrix\_Max()} will examine all elements in an \ccode{eslGENERAL} matrix (including the zeros), but only the elements $i \leq j$ in a \ccode{eslUPPER} matrix. This design is provisional. We may adopt a system more closely akin to BLAS/LAPACK in the future, which distinguish between matrix type and matrix storage. For example, BLAS has matrices of form \ccode{TR} and \ccode{TP} for triangular and packed triangular. Easel's implementation seems sufficient for the moment, and should also extend to lower diagonal and symmetric matrices without difficulty when and if they become needed. In any future development, look to BLAS and LAPACK for guidance. \subsection{Interoperability with BLAS and LAPACK} The BLAS and LAPACK libraries provide optimized, standardized linear algebra routines. The storage in \ccode{ESL\_DMATRIX} is designed so you can call routines in these libraries. The \ccode{mx->mx[0]} array is a valid matrix for BLAS and LAPACK so long as you know the right incantations. These are summarized here: {\small \begin{tabular}{llllll} Easel type & \ccode{CBLAS\_ORDER} & stride & \ccode{CBLAS\_UPLO} & type & code \\ \hline \ccode{eslGENERAL} & \ccode{CblasRowMajor} & \ccode{mx->m} & n/a & double & \ccode{GE} (GEneral) \\ \ccode{eslUPPER} & \ccode{CBlasRowMajor} & \ccode{mx->m} & \ccode{CblasUpper} & double & \ccode{TP} (Triangular Packed) \\ \end{tabular} } For example, to call the CBLAS (C implementation of BLAS) for an operation on an Easel matrix of type \ccode{eslGENERAL}, you look for a routine that starts with prefix \ccode{cblas\_dge*} (\ccode{d} for double, \ccode{ge} for general). An example is \ccode{cblas\_dgemm()}, the matrix multiplication (\ccode{mm}) routine, which computes $C = \alpha \mathit{op}(A) \mathit{op}(B) + \beta C$ for matrices $A,B,C$ and scalars $\alpha,\beta$, where $\mathit{op}(A)$ means $A$, $A^T$ (the transpose), or $A^H$ (the conjugate transpose). $\mathit{op}(A)$ is an $M \times K$ matrix, $\mathit{op}(B)$ is $K \times N$ matrix, and the result $C$ is $M \times N$. The prototype for \ccode{cblas\_dgemm} is: \begin{cchunk} void cblas_dgemm (const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc) \end{cchunk} The \ccode{Order} argument is always \ccode{CblasRowMajor} for Easel matrices. The \ccode{TransA} and \ccode{TransB} arguments specify $\mathit{op}()$: \ccode{CblasNoTrans} means just the matrix itself. The \ccode{ld*} arguments are the major strides for each matrix: the number of elements in each row, for our row-major matrices. So, we could call: \begin{cchunk} cblas_dgemm (CblasRowMajor, CblasNoTrans, CblasNoTrans, A->n, B->m, A->m, 1.0, A->mx[0], A->m, B->mx[0], B->m, 1.0, C->mx[0], C->m); \end{cchunk} hmmer-3.1b2/easel/Makefile.in0000664361611702660230000004347412473612610015437 0ustar wheelerteddy# Top level Makefile for Easel # # On most systems, to build Easel you should only need: # % ./configure; make # # Optionally, you can run a test suite: # % make check # # And optionally, you can install everything more permanently: # % make install # # For more information, see the Installation chapter of the Easel Guide. # # VPATH and shell configuration # top_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ SHELL = /bin/sh # Package information # PACKAGE = @PACKAGE_NAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ BASENAME = @PACKAGE_TARNAME@ RELEASE = @EASEL_VERSION@ RELEASEDATE = "@EASEL_DATE@" COPYRIGHT = "@EASEL_COPYRIGHT@" LICENSELINE = "@EASEL_LICENSE@" # Installation targets # prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ mandir = @mandir@ docdir = @docdir@ pdfdir = @pdfdir@ mandir = @mandir@ man1dir = ${mandir}/man1 man1ext = .1 # Compiler configuration # CC = @CC@ CFLAGS = @CFLAGS@ @PTHREAD_CFLAGS@ @PIC_FLAGS@ SIMDFLAGS= @SIMD_CFLAGS@ CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBGSL = @LIBGSL@ LIBS = @LIBS@ @PTHREAD_LIBS@ # Other tools # COMPRESS = gzip AR = @AR@ RANLIB = @RANLIB@ INSTALL = @INSTALL@ # beautification magic stolen from git # QUIET_SUBDIR0 = +${MAKE} -C #space separator after -c QUIET_SUBDIR1 = ifndef V QUIET_CC = @echo ' ' CC $@; QUIET_GEN = @echo ' ' GEN $@; QUIET_AR = @echo ' ' AR $@; QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR1 = ; echo ' ' SUBDIR $$subdir; \ ${MAKE} -C $$subdir endif # Code manifests # HDRS = easel.h\ esl_alphabet.h\ esl_buffer.h\ esl_cluster.h\ esl_composition.h\ esl_dirichlet.h\ esl_distance.h\ esl_dmatrix.h\ esl_exponential.h\ esl_fileparser.h\ esl_gamma.h\ esl_getopts.h\ esl_gev.h\ esl_gumbel.h\ esl_histogram.h\ esl_hmm.h\ esl_hyperexp.h\ esl_keyhash.h\ esl_mem.h\ esl_minimizer.h\ esl_mixgev.h\ esl_mpi.h\ esl_msa.h\ esl_msacluster.h\ esl_msafile.h\ esl_msafile2.h\ esl_msafile_a2m.h\ esl_msafile_afa.h\ esl_msafile_clustal.h\ esl_msafile_phylip.h\ esl_msafile_psiblast.h\ esl_msafile_selex.h\ esl_msafile_stockholm.h\ esl_msashuffle.h\ esl_msaweight.h\ esl_normal.h\ esl_paml.h\ esl_random.h\ esl_randomseq.h\ esl_ratematrix.h\ esl_recorder.h\ esl_regexp.h\ esl_rootfinder.h\ esl_scorematrix.h\ esl_sq.h\ esl_sqio.h\ esl_sqio_ascii.h\ esl_sqio_ncbi.h\ esl_sse.h\ esl_ssi.h\ esl_stack.h\ esl_stats.h\ esl_stopwatch.h\ esl_stretchexp.h\ esl_threads.h\ esl_translate.h\ esl_tree.h\ esl_vectorops.h\ esl_vmx.h\ esl_weibull.h\ esl_workqueue.h\ esl_wuss.h OBJS = easel.o\ esl_alphabet.o\ esl_buffer.o\ esl_cluster.o\ esl_composition.o\ esl_dirichlet.o\ esl_distance.o\ esl_dmatrix.o\ esl_exponential.o\ esl_fileparser.o\ esl_gamma.o\ esl_getopts.o\ esl_gev.o\ esl_gumbel.o\ esl_histogram.o\ esl_hmm.o\ esl_hyperexp.o\ esl_keyhash.o\ esl_mem.o\ esl_minimizer.o\ esl_mixgev.o\ esl_mpi.o\ esl_msa.o\ esl_msacluster.o\ esl_msafile.o\ esl_msafile2.o\ esl_msafile_a2m.o\ esl_msafile_afa.o\ esl_msafile_clustal.o\ esl_msafile_phylip.o\ esl_msafile_psiblast.o\ esl_msafile_selex.o\ esl_msafile_stockholm.o\ esl_msashuffle.o\ esl_msaweight.o\ esl_normal.o\ esl_paml.o\ esl_random.o\ esl_randomseq.o\ esl_ratematrix.o\ esl_recorder.o\ esl_regexp.o\ esl_rootfinder.o\ esl_scorematrix.o\ esl_sq.o\ esl_sqio.o\ esl_sqio_ascii.o\ esl_sqio_ncbi.o\ esl_sse.o\ esl_ssi.o\ esl_stack.o\ esl_stats.o\ esl_stopwatch.o\ esl_stretchexp.o\ esl_threads.o\ esl_translate.o\ esl_tree.o\ esl_vectorops.o\ esl_vmx.o\ esl_weibull.o\ esl_workqueue.o\ esl_wuss.o # esl_swat.o BENCHMARKS =\ esl_buffer_benchmark\ esl_keyhash_benchmark\ esl_mem_benchmark\ esl_sse_benchmark\ esl_random_benchmark EXPERIMENTS = \ esl_scorematrix_experiment UTESTS =\ easel_utest\ esl_alphabet_utest\ esl_buffer_utest\ esl_cluster_utest\ esl_dirichlet_utest\ esl_distance_utest\ esl_dmatrix_utest\ esl_exponential_utest\ esl_fileparser_utest\ esl_gamma_utest\ esl_getopts_utest\ esl_gumbel_utest\ esl_histogram_utest\ esl_hyperexp_utest\ esl_keyhash_utest\ esl_mem_utest\ esl_msa_utest\ esl_msacluster_utest\ esl_msafile_utest\ esl_msafile2_utest\ esl_msafile_a2m_utest\ esl_msafile_afa_utest\ esl_msafile_clustal_utest\ esl_msafile_phylip_utest\ esl_msafile_psiblast_utest\ esl_msafile_selex_utest\ esl_msafile_stockholm_utest\ esl_msaweight_utest\ esl_random_utest\ esl_randomseq_utest\ esl_ratematrix_utest\ esl_recorder_utest\ esl_regexp_utest\ esl_rootfinder_utest\ esl_scorematrix_utest\ esl_sq_utest\ esl_sqio_utest\ esl_sse_utest\ esl_ssi_utest\ esl_stack_utest\ esl_stats_utest\ esl_stretchexp_utest\ esl_tree_utest\ esl_vectorops_utest\ esl_weibull_utest\ esl_wuss_utest # gev_utest\ # minimizer_utest\ # mixgev_utest\ # mpi_utest\ # normal_utest\ # paml_utest\ # stopwatch_utest\ # swat_utest\ EXAMPLES = \ easel_example\ esl_alphabet_example\ esl_alphabet_example2\ esl_alphabet_example3\ esl_buffer_example\ esl_buffer_example2\ esl_buffer_example3\ esl_buffer_example4\ esl_buffer_example5\ esl_buffer_example6\ esl_cluster_example\ esl_dirichlet_example\ esl_dmatrix_example\ esl_exponential_example\ esl_fileparser_example\ esl_fileparser_example2\ esl_gamma_example\ esl_getopts_example\ esl_getopts_example2\ esl_gev_example\ esl_gumbel_example\ esl_histogram_example\ esl_histogram_example2\ esl_histogram_example3\ esl_histogram_example4\ esl_histogram_example5\ esl_hyperexp_example\ esl_keyhash_example\ esl_minimizer_example\ esl_mixgev_example\ esl_msafile_example\ esl_msafile_a2m_example\ esl_msafile_a2m_example2\ esl_msafile_afa_example\ esl_msafile_afa_example2\ esl_msafile_clustal_example\ esl_msafile_clustal_example2\ esl_msafile_phylip_example\ esl_msafile_phylip_example2\ esl_msafile_psiblast_example\ esl_msafile_psiblast_example2\ esl_msafile_selex_example\ esl_msafile_selex_example2\ esl_msafile_stockholm_example\ esl_msafile_stockholm_example2\ esl_msacluster_example\ esl_msashuffle_example\ esl_msaweight_example\ esl_normal_example\ esl_normal_example2\ esl_random_example\ esl_rootfinder_example\ esl_rootfinder_example2\ esl_scorematrix_example\ esl_sq_example\ esl_sq_example2\ esl_sqio_example\ esl_sqio_example2\ esl_sqio_example3\ esl_sse_example\ esl_ssi_example\ esl_ssi_example2\ esl_stack_example\ esl_stats_example\ esl_stats_example2\ esl_stopwatch_example\ esl_stretchexp_example\ esl_threads_example\ esl_threads_example2\ esl_tree_example\ esl_tree_example2\ esl_vectorops_example\ esl_vmx_example\ esl_weibull_example\ esl_workqueue_example # esl_distance_example\ # esl_hmm_example\ # esl_msafile_clustal_example\ # esl_randomseq_example\ # esl_msa_example2\ .PHONY: all dev tests check pdf install uninstall clean distclean dist implode TAGS all: libeasel.a .FORCE ${QUIET_SUBDIR0}miniapps ${QUIET_SUBDIR1} all dev: libeasel.a ${UTESTS} ${BENCHMARKS} ${EXPERIMENTS} ${EXAMPLES} .FORCE ${QUIET_SUBDIR0}miniapps ${QUIET_SUBDIR1} dev tests: ${UTESTS} ${QUIET_SUBDIR0}miniapps ${QUIET_SUBDIR1} tests check: ${UTESTS} .FORCE ${QUIET_SUBDIR0}miniapps ${QUIET_SUBDIR1} check ${QUIET_SUBDIR0}testsuite ${QUIET_SUBDIR1} check pdf: ${QUIET_SUBDIR0}documentation ${QUIET_SUBDIR1} pdf libeasel.a: ${OBJS} ${QUIET_AR}${AR} -r libeasel.a $(OBJS) > /dev/null 2>&1 @${RANLIB} libeasel.a .FORCE: ${OBJS}: ${HDRS} esl_config.h .c.o: ${QUIET_CC}${CC} -I. -I${srcdir} ${CFLAGS} ${SIMDFLAGS} ${DEFS} -o $@ -c $< # Unit test compilation: # # To compile unit tests, we need to construct a command line # from module basename, module's testdriver flag, and module's # C file. This is accomplished via a complex-looking shell scripture; # xref J1/81. # $@ = driver name esl_msa_utest easel_utest # $${BASENAME} = base module name msa easel # $${DFLAG} = driver flag eslMSA_TESTDRIVE eslEASEL_TESTDRIVE # $${DFILE} = driver's C file esl_msa.c easel.c # ${UTESTS}: libeasel.a @BASENAME=`echo $@ | sed -e 's/_utest//'| sed -e 's/^esl_//'` ;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=esl$${DFLAG}_TESTDRIVE ;\ if test $@ = "easel_utest" ;\ then DFILE=${srcdir}/easel.c ;\ else DFILE=${srcdir}/esl_$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS} # Benchmark compilation: # Name construction much like unit tests. # $@ = driver name esl_msa_benchmark easel_benchmark # $${BASENAME} = base module name msa easel # $${DFLAG} = driver flag eslMSA_BENCHMARK eslEASEL_BENCHMARK # $${DFILE} = driver's C file esl_msa.c easel.c # ${BENCHMARKS}: libeasel.a @BASENAME=`echo $@ | sed -e 's/_benchmark//'| sed -e 's/^esl_//'` ;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=esl$${DFLAG}_BENCHMARK ;\ if test $@ = "easel_benchmark" ;\ then DFILE=${srcdir}/easel.c ;\ else DFILE=${srcdir}/esl_$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS} ${EXPERIMENTS}: libeasel.a @BASENAME=`echo $@ | sed -e 's/_experiment//'| sed -e 's/^esl_//'` ;\ DFLAG=`echo $${BASENAME} | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ DFLAG=esl$${DFLAG}_EXPERIMENT ;\ if test $@ = "easel_experiment" ;\ then DFILE=${srcdir}/easel.c ;\ else DFILE=${srcdir}/esl_$${BASENAME}.c ;\ fi;\ if test ${V} ;\ then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS} ${EXAMPLES}: libeasel.a @BASENAME=`echo $@ | sed -e 's/_example[0-9]*//'| sed -e 's/^esl_//'` ;\ DFLAG=esl`echo $@ | sed -e 's/^esl_//' | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`;\ if test $@ = "easel_example"; \ then DFILE=${srcdir}/easel.c ;\ else DFILE=${srcdir}/esl_$${BASENAME}.c ;\ fi ;\ if test ${V}; \ then echo "${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS}" ;\ else echo ' ' GEN $@ ;\ fi ;\ ${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -o $@ -I. -I${srcdir} -L. -D$${DFLAG} $${DFILE} -leasel -lm ${LIBS} # install: installs libeasel.a in ${libdir}/ # installs Easel headers in ${includedir}/ # installs miniapp binaries in ${bindir}/ # install: ${INSTALL} -d ${DESTDIR}${bindir} ${INSTALL} -d ${DESTDIR}${libdir} ${INSTALL} -d ${DESTDIR}${includedir} ${INSTALL} -m 0644 libeasel.a ${DESTDIR}${libdir}/ for file in ${HDRS}; do\ ${INSTALL} -m 0644 ${srcdir}/$$file ${DESTDIR}${includedir}/ ;\ done ${INSTALL} -m 0644 esl_config.h ${DESTDIR}${includedir}/ ${QUIET_SUBDIR0}miniapps ${QUIET_SUBDIR1} install # "make uninstall" reverses the steps of "make install" # uninstall: -rm -f ${DESTDIR}${libdir}/libeasel.a for file in ${HDRS}; do\ rm -f ${DESTDIR}${includedir}/$$file;\ done rm -f ${DESTDIR}${includedir}/esl_config.h ${QUIET_SUBDIR0}miniapps ${QUIET_SUBDIR1} uninstall # "make clean" removes almost everything except configuration files # clean: #Use 'ifneq' instead of 'test -e' because the '+@' in QUIET_SUBDIR0 can't #be passed to the shell. Note that ifneq breaks if indented. ifneq (,$(wildcard ./documentation/.)) ${QUIET_SUBDIR0}documentation ${QUIET_SUBDIR1} clean endif ${QUIET_SUBDIR0}testsuite ${QUIET_SUBDIR1} clean ${QUIET_SUBDIR0}miniapps ${QUIET_SUBDIR1} clean -rm -f ${OBJS} libeasel.a -rm -f ${UTESTS} ${BENCHMARKS} ${EXAMPLES} ${EXPERIMENTS} -rm -f *~ TAGS -rm -f *.gcno *.gcda *.gcov -rm -f cscope.out -rm -f core.[0-9]* -rm -f esltmp?????? -rm -f config.log config.status for prog in ${UTESTS} ${BENCHMARKS} ${EXAMPLES} ${EXPERIMENTS}; do\ if test -d $$prog.dSYM; then rm -rf $$prog.dSYM; fi;\ done distclean: clean #See above for explanation of 'ifneq' usage ifneq (,$(wildcard ./documentation/.)) ${QUIET_SUBDIR0}documentation ${QUIET_SUBDIR1} distclean endif ${QUIET_SUBDIR0}testsuite ${QUIET_SUBDIR1} distclean ${QUIET_SUBDIR0}miniapps ${QUIET_SUBDIR1} distclean -rm esl_config.h -rm -rf autom4te.cache -rm LICENSE.sh -rm Makefile # 'make REPOSITORY=... dist' : create a new distribution tarball # dist: # Make sure we pointed the make dist to a subversion repository @if test x${REPOSITORY} = 'x'; then\ echo "REPOSITORY isn't set; use make REPOSITORY=... dist";\ exit 1;\ fi # Delete any old versions of the same release @if test -d ../${BASENAME}-${RELEASE}; then rm -rf ../${BASENAME}-${RELEASE}; fi @if test -e ../${BASENAME}-${RELEASE}.tar; then rm -f ../${BASENAME}-${RELEASE}.tar; fi @if test -e ../${BASENAME}-${RELEASE}.tar.Z; then rm -f ../${BASENAME}-${RELEASE}.tar.Z; fi @if test -e ../${BASENAME}-${RELEASE}.tar.gz; then rm -f ../${BASENAME}-${RELEASE}.tar.gz; fi # Export the release from Subversion control svn export ${REPOSITORY} ../${BASENAME}-${RELEASE} # Make the configure script from configure.ac (cd ../${BASENAME}-${RELEASE}; autoconf) # We'll need some basic Makefiles (cd ../${BASENAME}-${RELEASE}/; ./configure) # Set file permissions. find ../${BASENAME}-${RELEASE} -type f -exec chmod +r {} \; # Compile the PDF documentation and move it to top level dir (cd ../${BASENAME}-${RELEASE}/documentation/; make pdf) mv ../${BASENAME}-${RELEASE}/documentation/current.pdf ../${BASENAME}-${RELEASE}/Userguide.pdf # Attach license stamps by replacing LICENSE keyword everywhere find ../${BASENAME}-${RELEASE} -type f -exec devkit/sedition-pp LICENSE LICENSE.tag {} \; # Other keyword replacements devkit/sedition RELEASE ${RELEASE} RELEASEDATE ${RELEASEDATE} COPYRIGHT ${COPYRIGHT} ../${BASENAME}-${RELEASE}/00README devkit/sedition RELEASE ${RELEASE} ../${BASENAME}-${RELEASE}/INSTALL # Cleanup (cd ../${BASENAME}-${RELEASE}/; make implode) (cd ../${BASENAME}-${RELEASE}/; make distclean) # Packaging (cd ..; tar cvf ${BASENAME}-${RELEASE}.tar ${BASENAME}-${RELEASE}) (cd ..; ${COMPRESS} ${BASENAME}-${RELEASE}.tar) # `make dcheck`: run developer testsuite, save output in testsuite/dcheck.report dcheck: ${QUIET_SUBDIR0}testsuite ${QUIET_SUBDIR1} dcheck # The "implode" target is used when we've got Easel as a subdirectory # of a larger project, like Infernal or HMMER, and we're building a # distribution for that larger project. We remove any "personal # information" from Easel. Eventually that'd include our bug tracking, # for instance, but right now there's nothing to do. implode: -rm -f 00CHECKLIST -rm -f LICENSE.tag TAGS: -rm -f ${top_srcdir}/TAGS make tags-append tags-append: etags -o ${top_srcdir}/TAGS -a ${srcdir}/00CHECKLIST etags -o ${top_srcdir}/TAGS -a ${srcdir}/BUGTRAX etags -o ${top_srcdir}/TAGS -a ${srcdir}/INSTALL etags -o ${top_srcdir}/TAGS -a ${srcdir}/LICENSE etags -o ${top_srcdir}/TAGS -a ${srcdir}/aclocal.m4 etags -o ${top_srcdir}/TAGS -a ${srcdir}/configure.ac etags -o ${top_srcdir}/TAGS -a ${srcdir}/*.c etags -o ${top_srcdir}/TAGS -a ${srcdir}/*.h etags -o ${top_srcdir}/TAGS -a ${srcdir}/*.tex etags -o ${top_srcdir}/TAGS -a ${srcdir}/demotic/00README etags -o ${top_srcdir}/TAGS -a ${srcdir}/demotic/*.pl etags -o ${top_srcdir}/TAGS -a ${srcdir}/demotic/*.pm etags -o ${top_srcdir}/TAGS -a ${srcdir}/demotic/blast* etags -o ${top_srcdir}/TAGS -a ${srcdir}/demotic/fasta* etags -o ${top_srcdir}/TAGS -a ${srcdir}/demotic/h2* etags -o ${top_srcdir}/TAGS -a ${srcdir}/demotic/hmmer* etags -o ${top_srcdir}/TAGS -a ${srcdir}/devkit/* etags -o ${top_srcdir}/TAGS -a ${srcdir}/documentation/*.in etags -o ${top_srcdir}/TAGS -a ${srcdir}/documentation/*.tex etags -o ${top_srcdir}/TAGS -a ${srcdir}/miniapps/*.in etags -o ${top_srcdir}/TAGS -a ${srcdir}/miniapps/*.c etags -o ${top_srcdir}/TAGS -a ${srcdir}/miniapps/*.man etags -o ${top_srcdir}/TAGS -a ${srcdir}/miniapps/*.pl etags -o ${top_srcdir}/TAGS -a ${srcdir}/testsuite/*.in etags -o ${top_srcdir}/TAGS -a ${srcdir}/testsuite/*.pl etags -o ${top_srcdir}/TAGS -a ${srcdir}/testsuite/*.sqc ################################################################ # Easel - a library of C functions for biological sequence analysis # Version h3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # Easel is distributed under the Janelia Farm Software License, a BSD # license. See the LICENSE file for more details. # # SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/Makefile.in $ # SVN $Id: Makefile.in 873 2013-06-19 02:47:51Z wheelert $ ################################################################ hmmer-3.1b2/easel/esl_wuss.c0000664361611702660230000006527712473612610015407 0ustar wheelerteddy/* RNA secondary structure markup in WUSS notation. */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_stack.h" #include "esl_vectorops.h" #include "esl_wuss.h" /* Function: esl_wuss2ct() * Incept: SRE, Tue Feb 15 08:44:54 2005 [St. Louis] * * Purpose: Given a secondary structure string , <0..len-1>, * in WUSS notation, convert it to a CT array, <1..len>, * in . Caller provides a allocated for at least * ints. is the position that residue i * base pairs to, or 0 if i is unpaired. is undefined * (but if you care: it is set to 0). * * WUSS notation is interpreted loosely here, as input * WUSS. Any matching bracket pair or upper/lower case * alphabetic pair is interpreted as a base pair; any other * WUSS annotation is interpreted as unpaired. * * Returns: on success. Returns if the WUSS * string isn't valid. * * Throws: on allocation failure. */ int esl_wuss2ct(char *ss, int len, int *ct) { ESL_STACK *pda[27]; /* 1 secondary structure + up to 26 levels of pk's */ int i; int pos, pair; int status; /* success or failure return status */ /* Initialization: always initialize the main pda (0); * we'll init the pk pda's on demand. */ if ((pda[0] = esl_stack_ICreate()) == NULL) goto FINISH; for (i = 1; i <= 26; i++) pda[i] = NULL; for (pos = 0; pos <= len; pos++) ct[pos] = 0; for (pos = 1; pos <= len; pos++) { if (!isprint((int) ss[pos-1])) /* armor against garbage */ { status = eslESYNTAX; goto FINISH; } /* left side of a pair: push position onto stack 0 (pos = 1..L) */ else if (ss[pos-1] == '<' || ss[pos-1] == '(' || ss[pos-1] == '[' || ss[pos-1] == '{') { if ((status = esl_stack_IPush(pda[0], pos)) != eslOK) goto FINISH; } /* right side of a pair; resolve pair; check for agreement */ else if (ss[pos-1] == '>' || ss[pos-1] == ')' || ss[pos-1] == ']' || ss[pos-1] == '}') { if (esl_stack_IPop(pda[0], &pair) == eslEOD) { status = eslESYNTAX; goto FINISH;} /* no closing bracket */ else if ((ss[pair-1] == '<' && ss[pos-1] != '>') || (ss[pair-1] == '(' && ss[pos-1] != ')') || (ss[pair-1] == '[' && ss[pos-1] != ']') || (ss[pair-1] == '{' && ss[pos-1] != '}')) { status = eslESYNTAX; goto FINISH; } /* brackets don't match */ else { ct[pos] = pair; ct[pair] = pos; } } /* same stuff for pseudoknots */ else if (isupper((int) ss[pos-1])) { /* Create the PK stacks on demand. */ i = ss[pos-1] - 'A' + 1; if (pda[i] == NULL) if ((pda[i] = esl_stack_ICreate()) == NULL) { status = eslEMEM; goto FINISH; } if ((status = esl_stack_IPush(pda[i], pos)) != eslOK) goto FINISH; } else if (islower((int) ss[pos-1])) { i = ss[pos-1] - 'a' + 1; if (pda[i] == NULL || esl_stack_IPop(pda[i], &pair) == eslEOD) { status = eslESYNTAX; goto FINISH;} else { ct[pos] = pair; ct[pair] = pos; } } else if (strchr(":,_-.~", ss[pos-1]) == NULL) { status = eslESYNTAX; goto FINISH; } /* bogus character */ } status = eslOK; FINISH: for (i = 0; i <= 26; i++) if (pda[i] != NULL) { /* nothing should be left on stacks */ if (esl_stack_ObjectCount(pda[i]) != 0) status = eslESYNTAX; esl_stack_Destroy(pda[i]); } return status; } /* Function: esl_ct2wuss() * Incept: SRE, Wed Feb 16 11:22:53 2005 [St. Louis] * * Purpose: Convert a CT array for residues (1..n) to a WUSS * format string . must be allocated for at least * n+1 chars (+1 for the terminal NUL). * * ER, Sat Aug 18 13:22:03 EDT 2012 * esl\_ct2wuss() extended to deal with pseudoknots structures. * Pseudoknots are annotated as AA...aa, BB...bb,..., ZZ..zz. * Attemting to convert a that requires more letters * than [A-Z] will return an error. * * Attempting to convert a that involves triplet interactions * will return an error. * * Returns: on success. * * Throws: on allocation failure. * on internal failure. */ int esl_ct2wuss(int *ct, int n, char *ss) { int rb[26]; /* array that delimits the right bound of a pseudoknot character */ ESL_STACK *pda = NULL; /* stack for "main" secondary structure */ ESL_STACK *auxpk = NULL; /* aux stack for pseudoknot */ ESL_STACK *auxss = NULL; /* aux stack for single stranded */ int *cct = NULL; /* copy of ct vector */ int nfaces; /* number of faces in a cWW structure */ int minface; /* max depth of faces in a cWW structure */ int leftbound, rightbound; /* left and right bound to find basepairs belonging to a given pseudoknot */ int xpk = 0; /* number of pseudoknot chararactes used */ int npk = 0; /* number of pseudoknots */ int npairs = 0; /* total number of basepairs */ int npairs_reached = 0; /* number of basepairs found so far */ int found_partner; /* true if we've found left partner of a given base in stack pda */ int i,j,k; /* sequence indices */ int x; /* index for pseudoknot characters */ int status = eslEMEM; /* exit status 'til proven otherwise */ /* total number of basepairs */ for (j = 1; j <= n; j ++) { if (ct[j] > 0 && j < ct[j]) npairs ++; } /* Copy of ct; if a pseudoknotted structure, cct will be modified later. */ ESL_ALLOC(cct, sizeof(int)*(n+1)); esl_vec_ICopy(ct, (n+1), cct); /* Initialize rightbounds for all 26 pseudoknot indices */ for (x = 0; x < 26; x ++) rb[x] = -1; /* init ss[] to single stranded */ for (j = 0; j < n; j ++) { ss[j] = ':'; } ss[n] = '\0'; /* Initialization*/ if ((pda = esl_stack_ICreate()) == NULL) goto FINISH; if ((auxpk = esl_stack_ICreate()) == NULL) goto FINISH; if ((auxss = esl_stack_ICreate()) == NULL) goto FINISH; for (j = 1; j <= n; j++) { if (cct[j] == 0) /* unpaired: push j. */ { if (esl_stack_IPush(pda, j) != eslOK) goto FINISH; } else if (cct[j] > j) /* left side of a bp: push j. */ { if (esl_stack_IPush(pda, j) != eslOK) goto FINISH; } else /* right side of a bp; main routine: fingh the left partner */ { found_partner = FALSE; /* Pop back until we find the left partner of j; * In case this is not a nested structure, finding * the left partner of j will require to put bases * aside into stack auxpk. * * After we find the left partner of j, * store single stranded residues in auxss; * keep track of #faces and the maximum face depth. */ nfaces = 0; minface = -1; while (esl_stack_ObjectCount(pda)) { if (esl_stack_IPop(pda, &i) != eslOK) goto FINISH; if (i < 0) /* a face counter */ { nfaces++; if (i < minface) minface = i; } else if (cct[i] == j) /* we found the i,j pair. */ { found_partner = TRUE; npairs_reached ++; /* Now we know i,j pair; and we know how many faces are * above them; and we know the max depth of those faces. * That's enough to label the pair in WUSS notation. * if nfaces == 0, minface is -1; <> a closing bp of a hairpin. * if nfaces == 1, inherit minface, we're continuing a stem. * if nfaces > 1, bump minface in depth; we're closing a bifurc. */ if (nfaces > 1 && minface > -4) minface--; switch (minface) { case -1: ss[i-1] = '<'; ss[j-1] = '>'; break; case -2: ss[i-1] = '('; ss[j-1] = ')'; break; case -3: ss[i-1] = '['; ss[j-1] = ']'; break; case -4: ss[i-1] = '{'; ss[j-1] = '}'; break; default: esl_stack_Destroy(pda); esl_stack_Destroy(auxpk); esl_stack_Destroy(auxss); free(cct); ESL_EXCEPTION(eslEINCONCEIVABLE, "no such face code"); } if (esl_stack_IPush(pda, minface) != eslOK) goto FINISH; /* Now, aux contains all the unpaired residues we need to label, * according to the # of faces "above" them: * nfaces = 0: hairpin loop * nfaces = 1: bulge or interior loop * nfaces > 1: multifurc */ while (esl_stack_IPop(auxss, &i) == eslOK) { switch (nfaces) { case 0: ss[i-1] = '_'; break; case 1: ss[i-1] = '-'; break; default: ss[i-1] = ','; break; /* nfaces > 1 */ } } break; } else if (cct[i] == 0) { /* add to auxss only if originally sigle stranded */ if (ct[i] == 0) { if (esl_stack_IPush(auxss, i) != eslOK) goto FINISH; } } else /* cct[i]>0, != j: i is paired, but not to j: pseudoknot! */ { /* i is in the way to find j's left partner. * Move i to stack auxpk; resolve pseudoknot(s) after we've found partern for j. */ if (esl_stack_IPush(auxpk, i) != eslOK) goto FINISH; } } if (!found_partner) { esl_stack_Destroy(pda); esl_stack_Destroy(auxpk); esl_stack_Destroy(auxss); free(cct); ESL_EXCEPTION(eslEINVAL, "Cannot find left partner (%d) of base %d. Likely a triplet", ct[j], j); } } /* finished finding the left partner of j */ /* After we've found the left partner of j, resolve pks found along the way. * Then, remove the pseudoknotted based from cct so we can find the rest of the structure. */ if (esl_stack_ObjectCount(auxpk)) { /* init for first pseudoknot */ leftbound = cct[j]; rightbound = leftbound + 1; xpk = -1; /* start with 'A' if possible again */ while (esl_stack_IPop(auxpk, &i) == eslOK) { for (k = rightbound-1; k > leftbound; k --) { if (cct[k] == 0) { continue; } else if (cct[k] > rightbound) { continue; } else if (cct[k] == i) { break; } /* i continues the given pseudoknot */ else { k = leftbound; break; } /* a new pseudoknot */ } if (k == leftbound) /* a new pseudoknot */ { npk ++; xpk ++; /* figure out if we can use this alphabet index, or bump it up if necessary */ while (i < rb[xpk]) { xpk ++; } leftbound = (rightbound < cct[i])? rightbound : cct[j]; rightbound = cct[i]; } npairs_reached ++; if (xpk+(int)('a') <= (int)('z')) { /* update the rightbound of this pk index if necessary */ if (cct[i] > rb[xpk]) rb[xpk] = cct[i]; /* Add pk indices for this basepair */ ss[i-1] = (char)(xpk+(int)('A')); ss[cct[i]-1] = (char)(xpk+(int)('a')); /* remove pseudoknotted pair from cct */ cct[i] = 0; cct[ct[i]] = 0; } else ESL_EXCEPTION(eslEINVAL, "Don't have enough letters to describe all different pseudoknots."); } } /* while there is something in auxpk stack */ } /* finished loop over j: end position on seq, 1..n*/ status = eslOK; ERROR: FINISH: if (npairs != npairs_reached) ESL_EXCEPTION(eslFAIL, "found %d out of %d pairs.", npairs_reached, npairs); if (pda != NULL) esl_stack_Destroy(pda); if (auxpk != NULL) esl_stack_Destroy(auxpk); if (auxss != NULL) esl_stack_Destroy(auxss); if (cct != NULL) free(cct); return status; } /* Function: esl_ct2simplewuss() * Incept: ER, Wed Aug 22 13:31:54 EDT 2012 [Janelia] * * Purpose: Convert a CT array for residues (1..n) to a simple WUSS * format string . must be allocated for at least * n+1 chars (+1 for the terminal NUL). * * This function can be used with the of a secondary * structure including arbitrary pseudoknots, or for the * or a tertiary structure (say cWH, tWH, cSS,... H bonds). * * The string has basepairs annotated as <>, Aa, Bb, ..., Zz; * unpaired bases are annotated as '.'. * * Attemting to convert a that requires more letters * than [A-Z] will return an error. * * Attempting to convert a that involves triplet interactions * will return an error. * * Returns: on success. * * Throws: on allocation failure. * on internal failure. */ int esl_ct2simplewuss(int *ct, int n, char *ss) { int rb[26]; /* array that delimits the right bound of a pseudoknot character */ ESL_STACK *pda = NULL; /* stack for "main" secondary structure */ ESL_STACK *auxpk = NULL; /* aux stack for pseudoknot */ int *cct = NULL; /* copy of ct vector */ int leftbound, rightbound; /* left and right bound to find basepairs belonging to a given pseudoknot */ int xpk = 0; /* number of pseudoknot chararactes used */ int npk = 0; /* number of pseudoknots */ int npairs = 0; /* total number of basepairs */ int npairs_reached = 0; /* number of basepairs found so far */ int found_partner; /* true if we've found left partner of a given base in stack pda */ int i,j,k; /* sequence indices */ int x; /* index for pseudoknot characters */ int status = eslEMEM; /* exit status 'til proven otherwise */ /* total number of basepairs */ for (j = 1; j <= n; j ++) { if (ct[j] > 0 && j < ct[j]) npairs ++; } /* Copy of ct; if a pseudoknotted structure, cct will be modified later. */ ESL_ALLOC(cct, sizeof(int)*(n+1)); esl_vec_ICopy(ct, (n+1), cct); /* Initialize rightbounds for all 26 pseudoknot indices */ for (x = 0; x < 26; x ++) rb[x] = -1; /* init ss[] to single stranded */ for (j = 0; j < n; j ++) { ss[j] = '.'; } ss[n] = '\0'; /* Initialization*/ if ((pda = esl_stack_ICreate()) == NULL) goto FINISH; if ((auxpk = esl_stack_ICreate()) == NULL) goto FINISH; for (j = 1; j <= n; j++) { if (cct[j] == 0) /* unpaired: push j. */ { if (esl_stack_IPush(pda, j) != eslOK) goto FINISH; } else if (cct[j] > j) /* left side of a bp: push j. */ { if (esl_stack_IPush(pda, j) != eslOK) goto FINISH; } else /* right side of a bp; main routine: fingh the left partner */ { found_partner = FALSE; /* Pop back until we find the left partner of j; * In case this is not a nested structure, finding * the left partner of j will require to put bases * aside into stack auxpk. */ while (esl_stack_ObjectCount(pda)) { if (esl_stack_IPop(pda, &i) != eslOK) goto FINISH; if (cct[i] == j) /* we found the i,j pair. */ { found_partner = TRUE; npairs_reached ++; ss[i-1] = '<'; ss[j-1] = '>'; break; } else if (cct[i] == 0) { if (ct[i] == 0) ss[i-1] = '.'; } else /* cct[i]>0, != j: i is paired, but not to j: pseudoknot! */ { /* i is in the way to find j's left partner. * Move i to stack auxpk; resolve pseudoknot(s) after we've found partern for j. */ if (esl_stack_IPush(auxpk, i) != eslOK) goto FINISH; } } if (!found_partner) { esl_stack_Destroy(pda); esl_stack_Destroy(auxpk); free(cct); ESL_EXCEPTION(eslEINVAL, "Cannot find left partner (%d) of base %d. Likely a triplet", ct[j], j); } } /* finished finding the left partner of j */ /* After we've found the left partner of j, resolve pks found along the way. * Then, remove the pseudoknotted based from cct so we can find the rest of the structure. */ if (esl_stack_ObjectCount(auxpk)) { /* init for first pseudoknot */ leftbound = cct[j]; rightbound = leftbound + 1; xpk = -1; /* start with 'A' if possible again */ while (esl_stack_IPop(auxpk, &i) == eslOK) { for (k = rightbound-1; k > leftbound; k --) { if (cct[k] == 0) { continue; } else if (cct[k] > rightbound) { continue; } else if (cct[k] == i) { break; } /* i continues the given pseudoknot */ else { k = leftbound; break; } /* a new pseudoknot */ } if (k == leftbound) /* a new pseudoknot */ { npk ++; xpk ++; /* figure out if we can use this alphabet index, or bump it up if necessary */ while (i < rb[xpk]) { xpk ++; } leftbound = (rightbound < cct[i])? rightbound : cct[j]; rightbound = cct[i]; } npairs_reached ++; if (xpk+(int)('a') <= (int)('z')) { /* update the rightbound of this pk index if necessary */ if (cct[i] > rb[xpk]) rb[xpk] = cct[i]; /* Add pk indices for this basepair */ ss[i-1] = (char)(xpk+(int)('A')); ss[cct[i]-1] = (char)(xpk+(int)('a')); /* remove pseudoknotted pair from cct */ cct[i] = 0; cct[ct[i]] = 0; } else ESL_EXCEPTION(eslEINVAL, "Don't have enough letters to describe all different pseudoknots."); } } /* while there is something in auxpk stack */ } /* finished loop over j: end position on seq, 1..n*/ status = eslOK; ERROR: FINISH: if (npairs != npairs_reached) ESL_EXCEPTION(eslFAIL, "found %d out of %d pairs.", npairs_reached, npairs); if (pda != NULL) esl_stack_Destroy(pda); if (auxpk != NULL) esl_stack_Destroy(auxpk); if (cct != NULL) free(cct); return status; } /* Function: esl_wuss2kh() * Incept: SRE, Tue Feb 15 10:05:35 2005 [St. Louis] * * Purpose: Converts a secondary structure string in * WUSS notation back to old KHS format in . * must be allocated for at least as much * space as . may be the same as , * in which case the conversion is done in-place. * * Note: Left bp chars are converted to > (left base of base pairs) * Right bp chars are converted to < (right base of base pairs) * Characters _-,:~ are converted to . (unpaired bases) * Character . is untouched (unpaired) * Everything else is untouched, including any pseudoknot notation. * * Returns: on success. */ int esl_wuss2kh(char *ss, char *kh) { while (*ss != '\0') { if (*ss == '<') *kh = '>'; else if (*ss == '(') *kh = '>'; else if (*ss == '[') *kh = '>'; else if (*ss == '{') *kh = '>'; else if (*ss == '>') *kh = '<'; else if (*ss == ')') *kh = '<'; else if (*ss == ']') *kh = '<'; else if (*ss == '}') *kh = '<'; else if (*ss == '_') *kh = '.'; else if (*ss == '-') *kh = '.'; else if (*ss == ',') *kh = '.'; else if (*ss == ':') *kh = '.'; else if (*ss == '~') *kh = '.'; else *kh = *ss; ss++; kh++; } *kh = '\0'; return eslOK; } /* Function: esl_kh2wuss() * Incept: SRE, Tue Feb 15 10:10:40 2005 [St. Louis] * * Purpose: Converts an old format secondary structure string * to shorthand WUSS format . must be allocated at least * as large as . can be identical to , in which * case the conversion is done in-place. * * Note: Character > is converted to < (left base of base pairs) * Character < is converted to > (right base of base pairs) * A space is converted to . (just in case) * * Returns: on success. */ int esl_kh2wuss(char *kh, char *ss) { while (*kh != '\0') { if (*kh == '>') *ss = '<'; else if (*kh == '<') *ss = '>'; else if (*kh == ' ') *ss = '.'; else *ss = *kh; kh++; ss++; } *ss = '\0'; return eslOK; } /* Function: esl_wuss_full() * Incept: SRE, Mon Feb 28 09:44:40 2005 [St. Louis] * * Purpose: Given a simple ("input") WUSS format annotation string , * convert it to full ("output") WUSS format in . * must be allocated by the caller to be at least as * long as . and can be the same, * to convert a secondary structure string in place. * * Pseudoknot annotation is preserved, if had it. * * Returns: if isn't in valid WUSS format. * * Throws: on allocation failure. * on internal error that can't happen. */ int esl_wuss_full(char *oldss, char *newss) { char *tmp = NULL; int *ct = NULL; int n; int i; int status; /* We can use the ct2wuss algorithm to generate a full WUSS string - * convert to ct, then back to WUSS. ct2wuss doesn't deal with pk's * though, and we want to propagate pk annotation if it's there. So * we need two workspaces: ct array, and a temporary ss string that * we use to hold non-pk annotation. As a final step, we overlay * the pk annotation from the original oldss annotation. */ n = strlen(oldss); ESL_ALLOC(ct, sizeof(int) * (n+1)); ESL_ALLOC(tmp, sizeof(char) * (n+1)); esl_wuss_nopseudo(oldss, tmp);/* tmp = nonpseudoknotted oldss */ status = esl_wuss2ct(tmp, n, ct); /* ct = oldss in ct format, no pks */ if (status != eslOK) goto ERROR; status = esl_ct2wuss(ct, n, tmp); /* now tmp is a full WUSS string */ if (status == eslEINVAL) { status = eslEINCONCEIVABLE; goto ERROR; }/* we're sure, no pk's */ else if (status != eslOK) goto ERROR; /* EMEM, EINCONCEIVABLE */ for (i = 0; i < n; i++) if (isalpha(oldss[i])) newss[i] = oldss[i]; /* transfer pk annotation */ else newss[i] = tmp[i]; /* transfer new WUSS */ free(ct); free(tmp); return eslOK; ERROR: free(ct); free(tmp); return status; } /* Function: esl_wuss_nopseudo() * Incept: SRE, Tue Feb 15 11:02:43 2005 [St. Louis] * * Purpose: Given a WUSS format annotation string , * removes all pseudoknot annotation to create a new * WUSS string that contains only a "canonical" * (nonpseudoknotted) structure. must be allocated to * be at least as large as . and * may be the same, in which case the conversion is * done in place. Pseudoknot annotation in is * simply replaced by <.> in ; the resulting * WUSS string is therefore in valid simplified format, * but may not be valid full format WUSS. * * Returns: . */ int esl_wuss_nopseudo(char *ss1, char *ss2) { while (*ss1 != '\0') { if (isalpha(*ss1)) *ss2 = '.'; else *ss2 = *ss1; ss1++; ss2++; } *ss2 = '\0'; return eslOK; } #ifdef eslWUSS_TESTDRIVE /* gcc -g -Wall -o testwuss -I. -DeslWUSS_TESTDRIVE esl_wuss.c esl_random.c esl_stack.c esl_vectorops.c easel.c * ./testwuss */ #include #include "easel.h" #include "esl_random.h" #include "esl_stack.h" #include "esl_vectorops.h" #include "esl_wuss.h" int main(int argc, char **argv) { /* The example is E. coli RNase P, w/ and w/o pks. * J Brown figure 10.3.00 shows 1 too many bp for pk stem A. */ char ss[] = "\ {{{{{{{{{{{{{{{{{{,<<<<<<<<<<<<<-<<<<<____>>>>>>>>>->>>>>>>>\ >,,,,AAA-AAAAA[[[[---BBBB-[[[[[<<<<<_____>>>>><<<<____>>>->(\ (---(((((,,,,,,,,,,,,<<<<<--<<<<<<<<____>>>>>->>>>>>-->>,,,,\ ,,,<<<<<<_______>>>>>><<<<<<<<<____>>>->>>>>->,,)))--))))]]]\ ]]]]]],,,<<<<------<<<<<<----<<<<<_bbbb>>>>>>>>>>>----->>>>,\ ,,,,,<<<<<<<<____>>>>>>>>,,,,,,,,,,}}}}}}}----------aaaaaaaa\ -}-}}}}}}}}}}::::"; char ss_nopk[] = "\ {{{{{{{{{{{{{{{{{{,<<<<<<<<<<<<<-<<<<<____>>>>>>>>>->>>>>>>>\ >,,,,,,,,,,,,,[[[[--------[[[[[<<<<<_____>>>>><<<<____>>>->(\ (---(((((,,,,,,,,,,,,<<<<<--<<<<<<<<____>>>>>->>>>>>-->>,,,,\ ,,,<<<<<<_______>>>>>><<<<<<<<<____>>>->>>>>->,,)))--))))]]]\ ]]]]]],,,<<<<------<<<<<<----<<<<<_____>>>>>>>>>>>----->>>>,\ ,,,,,<<<<<<<<____>>>>>>>>,,,,,,,,,,}}}}}}}------------------\ -}-}}}}}}}}}}::::"; int len; int *ct1 = NULL; int *ct2 = NULL; char *ss2 = NULL; char *ss3 = NULL; int i; int nbp, nbp_true, npk; int status; len = strlen(ss); ESL_ALLOC(ct1, sizeof(int) * (len+1)); ESL_ALLOC(ct2, sizeof(int) * (len+1)); ESL_ALLOC(ss2, sizeof(char) * (len+1)); ESL_ALLOC(ss3, sizeof(char) * (len+1)); nbp_true = npk = 0; for (i = 0; i < len; i++) { if (strchr("{[(<", ss[i]) != NULL) nbp_true++; if (isupper(ss[i])) npk++; } if (esl_wuss2ct(ss, len, ct1) != eslOK) abort(); nbp = 0; for (i = 1; i <= len; i++) if (ct1[i] > i) nbp++; if (nbp != nbp_true + npk) abort(); if (esl_wuss2kh(ss, ss) != eslOK) abort(); if (esl_kh2wuss(ss, ss) != eslOK) abort(); if (esl_wuss2ct(ss, len, ct2) != eslOK) abort(); for (i = 1; i <= len; i++) if (ct1[i] != ct2[i]) abort(); /* test of pseudoknots */ if (esl_ct2wuss(ct1, len, ss2) != eslOK) abort(); if (esl_wuss2ct(ss2, len, ct2) != eslOK) abort(); for (i = 1; i <= len; i++) if (ct1[i] != ct2[i]) abort(); if (esl_ct2simplewuss(ct1, len, ss2) != eslOK) abort(); if (esl_wuss2ct(ss2, len, ct2) != eslOK) abort(); for (i = 1; i <= len; i++) if (ct1[i] != ct2[i]) abort(); if (esl_wuss_nopseudo(ss, ss) != eslOK) abort(); if (esl_wuss2ct(ss, len, ct1) != eslOK) abort(); if (esl_wuss2ct(ss_nopk, len, ct2) != eslOK) abort(); for (i = 1; i <= len; i++) if (ct1[i] != ct2[i]) abort(); if (esl_wuss2ct(ss_nopk, len, ct1) != eslOK) abort(); if (esl_ct2wuss(ct1, len, ss3) != eslOK) abort(); if (strcmp(ss_nopk, ss3) != 0) abort(); free(ct1); free(ct2); free(ss2); free(ss3); return 0; ERROR: free(ct1); free(ct2); free(ss2); free(ss3); return status; } #endif /*eslWUSS_TESTDRIVE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_wuss.c 854 2013-02-25 22:00:19Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_wuss.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_msaweight.c0000664361611702660230000012050112473612607016362 0ustar wheelerteddy/* Sequence weighting algorithms. * * Implementations of ad hoc sequence weighting algorithms for multiple * sequence alignments: * GSC weights: Gerstein et al., JMB 236:1067-1078, 1994. * PB weights: Henikoff and Henikoff, JMB 243:574-578, 1994. * BLOSUM weights: Henikoff and Henikoff, PNAS 89:10915-10919, 1992. * * Contents: * 1. Implementations of weighting algorithms. * 2. Unit tests. * 3. Test driver. * 4. Regression tests against SQUID. * 5. Benchmark. * 6. Stats driver. * 7. Examples. * 8. Copyright notice and license. */ #include "esl_config.h" #include #include #include /* Dependencies on Easel core: */ #include "easel.h" #include "esl_alphabet.h" #include "esl_msa.h" #include "esl_dmatrix.h" #include "esl_vectorops.h" /* Dependencies on phylogeny modules: */ #include "esl_distance.h" #include "esl_tree.h" #include "esl_msacluster.h" #include "esl_msaweight.h" /***************************************************************** * 1. Implementations of weighting algorithms *****************************************************************/ /* Function: esl_msaweight_GSC() * Synopsis: GSC weights. * Incept: SRE, Fri Nov 3 13:31:14 2006 [Janelia] * * Purpose: Given a multiple sequence alignment , calculate * sequence weights according to the * Gerstein/Sonnhammer/Chothia algorithm. These weights * are stored internally in the object, replacing * any weights that may have already been there. Weights * are $\geq 0$ and they sum to nseq>. * * The may be in either digitized or text mode. * Digital mode is preferred, so that distance calculations * used by the GSC algorithm are robust against degenerate * residue symbols. * * This is an implementation of Gerstein et al., "A method to * weight protein sequences to correct for unequal * representation", JMB 236:1067-1078, 1994. * * The algorithm is $O(N^2)$ memory (it requires a pairwise * distance matrix) and $O(N^3 + LN^2)$ time ($N^3$ for a UPGMA * tree building step, $LN^2$ for distance matrix construction) * for an alignment of N sequences and L columns. * * In the current implementation, the actual memory * requirement is dominated by two full NxN distance * matrices (one tmp copy in UPGMA, and one here): for * 8-byte doubles, that's $16N^2$ bytes. To keep the * calculation under memory limits, don't process large * alignments: max 1400 sequences for 32 MB, max 4000 * sequences for 256 MB, max 8000 seqs for 1 GB. Watch * out, because Pfam alignments can easily blow this up. * * Note: Memory usage could be improved. UPGMA consumes a distance * matrix, but that can be D itself, not a copy, if the * caller doesn't mind the destruction of D. Also, D is * symmetrical, so we could use upper or lower triangular * matrices if we rewrote dmatrix to allow them. * * I also think UPGMA can be reduced to O(N^2) time, by * being more tricky about rapidly identifying the minimum * element: could keep min of each row, and update that, * I think. * * Returns: on success, and the weights inside have been * modified. * * Throws: if the alignment data are somehow invalid and * distance matrices can't be calculated. on an * allocation error. In either case, the original is * left unmodified. * * Xref: [Gerstein94]; squid::weight.c::GSCWeights(); STL11/81. */ int esl_msaweight_GSC(ESL_MSA *msa) { ESL_DMATRIX *D = NULL; /* distance matrix */ ESL_TREE *T = NULL; /* UPGMA tree */ double *x = NULL; /* storage per node, 0..N-2 */ double lw, rw; /* total branchlen on left, right subtrees */ double lx, rx; /* distribution of weight to left, right side */ int i; /* counter over nodes */ int status; /* Contract checks */ ESL_DASSERT1( (msa != NULL) ); ESL_DASSERT1( (msa->nseq >= 1) ); ESL_DASSERT1( (msa->alen >= 1) ); ESL_DASSERT1( (msa->wgt != NULL) ); if (msa->nseq == 1) { msa->wgt[0] = 1.0; return eslOK; } /* GSC weights use a rooted tree with "branch lengths" calculated by * UPGMA on a fractional difference matrix - pretty crude. */ if (! (msa->flags & eslMSA_DIGITAL)) { if ((status = esl_dst_CDiffMx(msa->aseq, msa->nseq, &D)) != eslOK) goto ERROR; } #ifdef eslAUGMENT_ALPHABET else { if ((status = esl_dst_XDiffMx(msa->abc, msa->ax, msa->nseq, &D)) != eslOK) goto ERROR; } #endif /* oi, look out here. UPGMA is correct, but old squid library uses * single linkage, so for regression tests ONLY, we use single link. */ #ifdef eslMSAWEIGHT_REGRESSION if ((status = esl_tree_SingleLinkage(D, &T)) != eslOK) goto ERROR; #else if ((status = esl_tree_UPGMA(D, &T)) != eslOK) goto ERROR; #endif esl_tree_SetCladesizes(T); ESL_ALLOC(x, sizeof(double) * (T->N-1)); /* Postorder traverse (leaves to root) to calculate the total branch * length under each internal node; store this in x[]. Remember the * total branch length (x[0]) for a future sanity check. */ for (i = T->N-2; i >= 0; i--) { x[i] = T->ld[i] + T->rd[i]; if (T->left[i] > 0) x[i] += x[T->left[i]]; if (T->right[i] > 0) x[i] += x[T->right[i]]; } /* Preorder traverse (root to leaves) to calculate the weights. Now * we use x[] to mean, the total weight *above* this node that we will * apportion to the node's left and right children. The two * meanings of x[] never cross: every x[] beneath x[i] is still a * total branch length. * * Because the API guarantees that msa is returned unmodified in case * of an exception, and we're touching msa->wgt here, no exceptions * may be thrown from now on in this function. */ x[0] = 0; /* initialize: no branch to the root. */ for (i = 0; i <= T->N-2; i++) { lw = T->ld[i]; if (T->left[i] > 0) lw += x[T->left[i]]; rw = T->rd[i]; if (T->right[i] > 0) rw += x[T->right[i]]; if (lw+rw == 0.) { /* A special case arises in GSC weights when all branch lengths in a subtree are 0. * In this case, all seqs in this clade should get equal weights, sharing x[i] equally. * So, split x[i] in proportion to cladesize, not to branch weight. */ if (T->left[i] > 0) lx = x[i] * ((double) T->cladesize[T->left[i]] / (double) T->cladesize[i]); else lx = x[i] / (double) T->cladesize[i]; if (T->right[i] > 0) rx = x[i] * ((double) T->cladesize[T->right[i]] / (double) T->cladesize[i]); else rx = x[i] / (double) T->cladesize[i]; } else /* normal case: x[i] split in proportion to branch weight. */ { lx = x[i] * lw/(lw+rw); rx = x[i] * rw/(lw+rw); } if (T->left[i] <= 0) msa->wgt[-(T->left[i])] = lx + T->ld[i]; else x[T->left[i]] = lx + T->ld[i]; if (T->right[i] <= 0) msa->wgt[-(T->right[i])] = rx + T->rd[i]; else x[T->right[i]] = rx + T->rd[i]; } /* Renormalize weights to sum to N. */ esl_vec_DNorm(msa->wgt, msa->nseq); esl_vec_DScale(msa->wgt, msa->nseq, (double) msa->nseq); msa->flags |= eslMSA_HASWGTS; free(x); esl_tree_Destroy(T); esl_dmatrix_Destroy(D); return eslOK; ERROR: if (x != NULL) free(x); if (T != NULL) esl_tree_Destroy(T); if (D != NULL) esl_dmatrix_Destroy(D); return status; } /* Function: esl_msaweight_PB() * Synopsis: PB (position-based) weights. * Incept: SRE, Sun Nov 5 08:59:28 2006 [Janelia] * * Purpose: Given a multiple alignment , calculate sequence * weights according to the position-based weighting * algorithm (Henikoff and Henikoff, JMB 243:574-578, * 1994). These weights are stored internally in the * object, replacing any weights that may have already been * there. Weights are $\geq 0$ and they sum to nseq>. * * The may be in either digitized or text mode. * Digital mode is preferred, so that the algorithm * deals with degenerate residue symbols properly. * * The Henikoffs' algorithm does not give rules for dealing * with gaps or degenerate residue symbols. The rule here * is to ignore them. This means that longer sequences * initially get more weight; hence a "double * normalization" in which the weights are first divided by * sequence length in canonical residues (to compensate for * that effect), then normalized to sum to nseq. * * An advantage of the PB method is efficiency. * It is $O(1)$ in memory and $O(NL)$ time, for an alignment of * N sequences and L columns. This makes it a good method * for ad hoc weighting of very deep alignments. * * When the alignment is in simple text mode, IUPAC * degenerate symbols are not dealt with correctly; instead, * the algorithm simply uses the 26 letters as "residues" * (case-insensitively), and treats all other residues as * gaps. * * Returns: on success, and the weights inside have been * modified. * * Throws: on allocation error, in which case is * returned unmodified. * * Xref: [Henikoff94b]; squid::weight.c::PositionBasedWeights(). */ int esl_msaweight_PB(ESL_MSA *msa) { int *nres = NULL; /* counts of each residue observed in a column */ int ntotal; /* number of different symbols observed in a column */ int rlen; /* number of residues in a sequence */ int idx, pos, i; int K; /* alphabet size */ int status; /* Contract checks */ ESL_DASSERT1( (msa->nseq >= 1) ); ESL_DASSERT1( (msa->alen >= 1) ); if (msa->nseq == 1) { msa->wgt[0] = 1.0; return eslOK; } /* Initialize */ if (! (msa->flags & eslMSA_DIGITAL)) { ESL_ALLOC(nres, sizeof(int) * 26); K = 26; } #ifdef eslAUGMENT_ALPHABET else { ESL_ALLOC(nres, sizeof(int) * msa->abc->K); K = msa->abc->K; } #endif esl_vec_DSet(msa->wgt, msa->nseq, 0.); /* This section handles text alignments */ if (! (msa->flags & eslMSA_DIGITAL)) { for (pos = 0; pos < msa->alen; pos++) { /* Collect # of letters A..Z in this column, and total */ esl_vec_ISet(nres, K, 0.); for (idx = 0; idx < msa->nseq; idx++) if (isalpha((int) msa->aseq[idx][pos])) nres[toupper((int) msa->aseq[idx][pos]) - 'A'] ++; for (ntotal = 0, i = 0; i < K; i++) if (nres[i] > 0) ntotal++; /* Bump weight on each seq by PB rule */ if (ntotal > 0) { for (idx = 0; idx < msa->nseq; idx++) { if (isalpha((int) msa->aseq[idx][pos])) msa->wgt[idx] += 1. / (double) (ntotal * nres[toupper((int) msa->aseq[idx][pos]) - 'A'] ); } } } /* first normalization by # of residues counted in each seq */ for (idx = 0; idx < msa->nseq; idx++) { for (rlen = 0, pos = 0; pos < msa->alen; pos++) if (isalpha((int) msa->aseq[idx][pos])) rlen++; if (ntotal > 0) msa->wgt[idx] /= (double) rlen; /* if rlen == 0 for this seq, its weight is still 0.0, as initialized. */ } } /* This section handles digital alignments. */ #ifdef eslAUGMENT_ALPHABET else { for (pos = 1; pos <= msa->alen; pos++) { /* Collect # of residues 0..K-1 in this column, and total # */ esl_vec_ISet(nres, K, 0.); for (idx = 0; idx < msa->nseq; idx++) if (esl_abc_XIsCanonical(msa->abc, msa->ax[idx][pos])) nres[(int) msa->ax[idx][pos]] ++; for (ntotal = 0, i = 0; i < K; i++) if (nres[i] > 0) ntotal++; /* Bump weight on each sequence by PB rule */ if (ntotal > 0) { for (idx = 0; idx < msa->nseq; idx++) { if (esl_abc_XIsCanonical(msa->abc, msa->ax[idx][pos])) msa->wgt[idx] += 1. / (double) (ntotal * nres[msa->ax[idx][pos]]); } } } /* first normalization by # of residues counted in each seq */ for (idx = 0; idx < msa->nseq; idx++) { for (rlen = 0, pos = 1; pos <= msa->alen; pos++) if (esl_abc_XIsCanonical(msa->abc, msa->ax[idx][pos])) rlen++; if (rlen > 0) msa->wgt[idx] /= (double) rlen; /* if rlen == 0 for this seq, its weight is still 0.0, as initialized. */ } } #endif /* Make weights normalize up to nseq, and return. In pathological * case where all wgts were 0 (no seqs contain any unambiguous * residues), weights become 1.0. */ esl_vec_DNorm(msa->wgt, msa->nseq); esl_vec_DScale(msa->wgt, msa->nseq, (double) msa->nseq); msa->flags |= eslMSA_HASWGTS; free(nres); return eslOK; ERROR: if (nres != NULL) free(nres); return status; } /* Function: esl_msaweight_BLOSUM() * Synopsis: BLOSUM weights. * Incept: SRE, Sun Nov 5 09:52:41 2006 [Janelia] * * Purpose: Given a multiple sequence alignment and an identity * threshold , calculate sequence weights using the * BLOSUM algorithm (Henikoff and Henikoff, PNAS * 89:10915-10919, 1992). These weights are stored * internally in the object, replacing any weights * that may have already been there. Weights are $\geq 0$ * and they sum to nseq>. * * The algorithm does a single linkage clustering by * fractional id, defines clusters such that no two clusters * have a pairwise link $\geq$ ), and assigns * weights of $\frac{1}{M_i}$ to each of the $M_i$ * sequences in each cluster $i$. The threshold * is a fractional pairwise identity, in the range * $0..1$. * * The may be in either digitized or text mode. * Digital mode is preferred, so that the pairwise identity * calculations deal with degenerate residue symbols * properly. * * Returns: on success, and the weights inside have been * modified. * * Throws: on allocation error. if a pairwise * identity calculation fails because of corrupted sequence * data. In either case, the is unmodified. * * Xref: [Henikoff92]; squid::weight.c::BlosumWeights(). */ int esl_msaweight_BLOSUM(ESL_MSA *msa, double maxid) { int *c = NULL; /* cluster assignments for each sequence */ int *nmem = NULL; /* number of seqs in each cluster */ int nc; /* number of clusters */ int i; /* loop counter */ int status; /* Contract checks */ ESL_DASSERT1( (maxid >= 0. && maxid <= 1.) ); ESL_DASSERT1( (msa->nseq >= 1) ); ESL_DASSERT1( (msa->alen >= 1) ); if (msa->nseq == 1) { msa->wgt[0] = 1.0; return eslOK; } if ((status = esl_msacluster_SingleLinkage(msa, maxid, &c, NULL, &nc)) != eslOK) goto ERROR; ESL_ALLOC(nmem, sizeof(int) * nc); esl_vec_ISet(nmem, nc, 0); for (i = 0; i < msa->nseq; i++) nmem[c[i]]++; for (i = 0; i < msa->nseq; i++) msa->wgt[i] = 1. / (double) nmem[c[i]]; /* Make weights normalize up to nseq, and return. */ esl_vec_DNorm(msa->wgt, msa->nseq); esl_vec_DScale(msa->wgt, msa->nseq, (double) msa->nseq); msa->flags |= eslMSA_HASWGTS; free(nmem); free(c); return eslOK; ERROR: if (c != NULL) free(c); if (nmem != NULL) free(nmem); return status; } /* Function: esl_msaweight_IDFilter() * Synopsis: Filter by %ID. * Incept: ER, Wed Oct 29 10:06:43 2008 [Janelia] * * Purpose: Constructs a new alignment by removing near-identical * sequences from a given alignment (where identity is * calculated *based on the alignment*). * Does not affect the given alignment. * Keeps earlier sequence, discards later one. * * Usually called as an ad hoc sequence "weighting" mechanism. * * Limitations: * Unparsed Stockholm markup is not propagated into the * new alignment. * * Return: on success, and the . * * Throws: on allocation error. if a pairwise * identity calculation fails because of corrupted sequence * data. In either case, the is unmodified. * * Xref: squid::weight.c::FilterAlignment(). */ int esl_msaweight_IDFilter(const ESL_MSA *msa, double maxid, ESL_MSA **ret_newmsa) { int *list = NULL; /* array of seqs in new msa */ int *useme = NULL; /* TRUE if seq is kept in new msa */ int nnew; /* number of seqs in new alignment */ double ident; /* pairwise percentage id */ int i,j; /* seqs counters*/ int remove; /* TRUE if sq is to be removed */ int status; /* Contract checks */ ESL_DASSERT1( (msa != NULL) ); ESL_DASSERT1( (msa->nseq >= 1) ); ESL_DASSERT1( (msa->alen >= 1) ); /* allocate */ ESL_ALLOC(list, sizeof(int) * msa->nseq); ESL_ALLOC(useme, sizeof(int) * msa->nseq); esl_vec_ISet(useme, msa->nseq, 0); /* initialize array */ /* find which seqs to keep (list) */ nnew = 0; for (i = 0; i < msa->nseq; i++) { remove = FALSE; for (j = 0; j < nnew; j++) { if (! (msa->flags & eslMSA_DIGITAL)) { if ((status = esl_dst_CPairId(msa->aseq[i], msa->aseq[list[j]], &ident, NULL, NULL)) != eslOK) goto ERROR; } #ifdef eslAUGMENT_ALPHABET else { if ((status = esl_dst_XPairId(msa->abc, msa->ax[i], msa->ax[list[j]], &ident, NULL, NULL)) != eslOK) goto ERROR; } #endif if (ident > maxid) { remove = TRUE; break; } } if (remove == FALSE) { list[nnew++] = i; useme[i] = TRUE; } } if ((status = esl_msa_SequenceSubset(msa, useme, ret_newmsa)) != eslOK) goto ERROR; free(list); free(useme); return eslOK; ERROR: if (list != NULL) free(list); if (useme != NULL) free(useme); return status; } /*---------------- end, weighting implementations ----------------*/ /***************************************************************** * 2. Unit tests *****************************************************************/ #ifdef eslMSAWEIGHT_TESTDRIVE static int utest_GSC(ESL_ALPHABET *abc, ESL_MSA *msa, double *expect) { char *msg = "GSC weights unit test failure"; if (esl_msaweight_GSC(msa) != eslOK) esl_fatal(msg); if (esl_vec_DCompare(msa->wgt, expect, msa->nseq, 0.001) != eslOK) esl_fatal(msg); if (abc != NULL) { if (esl_msa_Digitize(abc, msa, NULL) != eslOK) esl_fatal(msg); if (esl_msaweight_GSC(msa) != eslOK) esl_fatal(msg); if (esl_vec_DCompare(msa->wgt, expect, msa->nseq, 0.001) != eslOK) esl_fatal(msg); if (esl_msa_Textize(msa) != eslOK) esl_fatal(msg); } return eslOK; } static int utest_PB(ESL_ALPHABET *abc, ESL_MSA *msa, double *expect) { char *msg = "PB weights unit test failure"; if (esl_msaweight_PB(msa) != eslOK) esl_fatal(msg); if (esl_vec_DCompare(msa->wgt, expect, msa->nseq, 0.001) != eslOK) esl_fatal(msg); if (abc != NULL) { if (esl_msa_Digitize(abc, msa, NULL) != eslOK) esl_fatal(msg); if (esl_msaweight_PB(msa) != eslOK) esl_fatal(msg); if (esl_vec_DCompare(msa->wgt, expect, msa->nseq, 0.001) != eslOK) esl_fatal(msg); if (esl_msa_Textize(msa) != eslOK) esl_fatal(msg); } return eslOK; } static int utest_BLOSUM(ESL_ALPHABET *abc, ESL_MSA *msa, double maxid, double *expect) { char *msg = "BLOSUM weights unit test failure"; if (esl_msaweight_BLOSUM(msa, maxid) != eslOK) esl_fatal(msg); if (esl_vec_DCompare(msa->wgt, expect, msa->nseq, 0.001) != eslOK) esl_fatal(msg); if (abc != NULL) { if (esl_msa_Digitize(abc, msa, NULL) != eslOK) esl_fatal(msg); if (esl_msaweight_BLOSUM(msa, maxid) != eslOK) esl_fatal(msg); if (esl_vec_DCompare(msa->wgt, expect, msa->nseq, 0.001) != eslOK) esl_fatal(msg); if (esl_msa_Textize(msa) != eslOK) esl_fatal(msg); } return eslOK; } #endif /*eslMSAWEIGHT_TESTDRIVE*/ /*-------------------- end, unit tests -------------------------*/ /***************************************************************** * 3. Test driver *****************************************************************/ #ifdef eslMSAWEIGHT_TESTDRIVE /* gcc -g -Wall -o test -L. -I. -DeslMSAWEIGHT_TESTDRIVE esl_msaweight.c -leasel -lm * ./test */ #include "easel.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msaweight.h" int main(int argc, char **argv) { ESL_ALPHABET *aa_abc = NULL, *nt_abc = NULL; ESL_MSA *msa1 = NULL, *msa2 = NULL, *msa3 = NULL, *msa4 = NULL, *msa5 = NULL; double uniform[5] = { 1.0, 1.0, 1.0, 1.0, 1.0 }; double wgt2[5] = { 0.833333, 0.833333, 0.833333, 0.833333, 1.66667 }; /* GSC, PB give same answer */ double gsc3[4] = { 1.125000, 0.875000, 0.875000, 1.125000 }; double pb3[4] = { 1.066667, 1.066667, 0.800000, 1.066667 }; double blosum3[4] = { 1.333333, 0.666667, 0.666667, 1.333333 }; double gsc4[4] = { 0.760870, 0.760870, 1.086957, 1.391304 }; double pb4[4] = { 0.800000, 0.800000, 1.000000, 1.400000 }; double blosum4[4] = { 0.666667, 0.666667, 1.333333, 1.333333 }; if ((aa_abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create amino alphabet"); if ((nt_abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create DNA alphabet"); /* msa1: all sequences identical. Any weighting method should assign uniform weights. * msa2: "contrived" example of [Henikoff94b]. "Correct" solution is 1==2, 3==4, and 5==2x other weights. * msa3: the "nitrogenase segments" example of [Henikoff94b]. * msa4: alignment that makes the same distances as Figure 4 from [Gerstein94] * msa5: gap pathology. no information here, so weighting methods should resort to uniform weights. */ if ((msa1 = esl_msa_CreateFromString("# STOCKHOLM 1.0\n\nseq1 AAAAA\nseq2 AAAAA\nseq3 AAAAA\nseq4 AAAAA\nseq5 AAAAA\n//\n", eslMSAFILE_STOCKHOLM)) == NULL) esl_fatal("msa 1 creation failed"); if ((msa2 = esl_msa_CreateFromString("# STOCKHOLM 1.0\n\nseq1 AAAAA\nseq2 AAAAA\nseq3 CCCCC\nseq4 CCCCC\nseq5 TTTTT\n//\n", eslMSAFILE_STOCKHOLM)) == NULL) esl_fatal("msa 2 creation failed"); if ((msa3 = esl_msa_CreateFromString("# STOCKHOLM 1.0\n\nNIFE_CLOPA GYVGS\nNIFD_AZOVI GFDGF\nNIFD_BRAJA GYDGF\nNIFK_ANASP GYQGG\n//\n", eslMSAFILE_STOCKHOLM)) == NULL) esl_fatal("msa 3 creation failed"); if ((msa4 = esl_msa_CreateFromString("# STOCKHOLM 1.0\n\nA AAAAAAAAAA\nB TTAAAAAAAA\nC ATAAAACCCC\nD GGGAAGGGGG\n//\n", eslMSAFILE_STOCKHOLM)) == NULL) esl_fatal("msa 4 creation failed"); if ((msa5 = esl_msa_CreateFromString("# STOCKHOLM 1.0\n\nA A----\nB -C---\nC --G--\nD ---T-\nE ----T\n//\n", eslMSAFILE_STOCKHOLM)) == NULL) esl_fatal("msa 5 creation failed"); utest_GSC(aa_abc, msa1, uniform); utest_GSC(nt_abc, msa1, uniform); utest_GSC(aa_abc, msa2, wgt2); utest_GSC(nt_abc, msa2, wgt2); utest_GSC(aa_abc, msa3, gsc3); /* no nt test on msa3: it's protein-only */ utest_GSC(aa_abc, msa4, gsc4); utest_GSC(nt_abc, msa4, gsc4); utest_GSC(aa_abc, msa5, uniform); utest_GSC(aa_abc, msa5, uniform); utest_PB(aa_abc, msa1, uniform); utest_PB(nt_abc, msa1, uniform); utest_PB(aa_abc, msa2, wgt2); utest_PB(nt_abc, msa2, wgt2); utest_PB(aa_abc, msa3, pb3); /* no nt test on msa3: it's protein-only */ utest_PB(aa_abc, msa4, pb4); utest_PB(nt_abc, msa4, pb4); utest_PB(aa_abc, msa5, uniform); utest_PB(nt_abc, msa5, uniform); utest_BLOSUM(aa_abc, msa1, 0.62, uniform); utest_BLOSUM(nt_abc, msa1, 0.62, uniform); utest_BLOSUM(aa_abc, msa2, 0.62, wgt2); utest_BLOSUM(nt_abc, msa2, 0.62, wgt2); utest_BLOSUM(aa_abc, msa3, 0.62, blosum3); /* no nt test on msa3: it's protein-only */ utest_BLOSUM(aa_abc, msa4, 0.62, blosum4); utest_BLOSUM(nt_abc, msa4, 0.62, blosum4); utest_BLOSUM(aa_abc, msa5, 0.62, uniform); utest_BLOSUM(nt_abc, msa5, 0.62, uniform); /* BLOSUM weights have the peculiar property of going flat at maxid=0.0 (everyone * clusters) or maxid=1.0 (nobody clusters). */ utest_BLOSUM(aa_abc, msa4, 0.0, uniform); utest_BLOSUM(aa_abc, msa4, 1.0, uniform); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_msa_Destroy(msa3); esl_msa_Destroy(msa4); esl_msa_Destroy(msa5); esl_alphabet_Destroy(aa_abc); esl_alphabet_Destroy(nt_abc); exit(0); } #endif /*eslMSAWEIGHT_TESTDRIVE*/ /*-------------------- end, test driver -------------------------*/ /***************************************************************** * 4. Regression tests against squid *****************************************************************/ #ifdef eslMSAWEIGHT_REGRESSION /* Verify same results as SQUID. * To compile: gcc -g -Wall -o msaweight_regression -I. -L. -L ~/src/squid -I ~/src/squid -DeslMSAWEIGHT_REGRESSION \ esl_msaweight.c esl_msacluster.c -leasel -lsquid -lm * To run: * ./regression * * It's essential to recompile esl_msacluster under the eslMSAWEIGHT_REGRESSION flag * too, because some squid compatibility code needs to get compiled in. * * Script for regression testing on Pfam: * ./regression -q --maxN 4000 /misc/data0/databases/Pfam/Pfam-A.full * ./regression --blosum -q /misc/data0/databases/Pfam/Pfam-A.full * ./regression --pb -q /misc/data0/databases/Pfam/Pfam-A.full */ #include "easel.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msaweight.h" #include "esl_vectorops.h" #include "squidconf.h" #include "squid.h" #define WGROUP "--blosum,--gsc,--pb" static ESL_OPTIONS options[] = { /* name type deflt env rng togs req incmpt help docgrp */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0 }, { "-q", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "run quiet, only report problems", 0 }, { "--blosum", eslARG_NONE, FALSE, NULL, NULL, WGROUP, NULL, NULL, "use BLOSUM weights", 0 }, { "--gsc", eslARG_NONE,"default",NULL,NULL, WGROUP, NULL, NULL, "use GSC weights", 0 }, { "--pb", eslARG_NONE, FALSE, NULL, NULL, WGROUP, NULL, NULL, "use position-based weights", 0 }, { "--id", eslARG_REAL, "0.62",NULL,"0<=x<=1",NULL,"--blosum", NULL, "id threshold for --blosum", 0 }, { "--tol", eslARG_REAL, "0.01",NULL,"0<=x<=1",NULL, NULL, NULL, "fractional tolerance for wgt match", 0 }, { "--maxN", eslARG_INT, "0", NULL,"n>=0", NULL, NULL, NULL, "skip alignments w/ > seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "Usage: ./regression [-options] "; int main(int argc, char **argv) { ESL_GETOPTS *go; char *msafile; ESLX_MSAFILE *afp; ESL_MSA *msa; float *sqd; int status; int nbad; int nali = 0; int nbadali = 0; int nwgt = 0; int nbadwgt = 0; int i; int be_quiet; int do_gsc; int do_pb; int do_blosum; double maxid; double tol; int maxN; /* Process command line */ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) esl_fatal("failed to parse cmd line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) esl_fatal("failed to parse cmd line: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") == TRUE) { puts(usage); puts("\n where options are:"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* 0=all docgroups; 2=indentation; 80=width */ return 0; } be_quiet = esl_opt_GetBoolean(go, "-q"); do_blosum = esl_opt_GetBoolean(go, "--blosum"); do_gsc = esl_opt_GetBoolean(go, "--gsc"); do_pb = esl_opt_GetBoolean(go, "--pb"); maxid = esl_opt_GetReal (go, "--id"); tol = esl_opt_GetReal (go, "--tol"); maxN = esl_opt_GetInteger(go, "--maxN"); if (esl_opt_ArgNumber(go) != 1) { puts("Incorrect number of command line arguments."); puts(usage); return 1; } msafile = esl_opt_GetArg(go, 1); esl_getopts_Destroy(go); /* Weight one or more alignments from input file */ if ((status = eslx_msafile_Open(NULL, msafile, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); while ( (status = eslx_msafile_Read(afp, &msa)) != eslEOF) { if (status != eslOK) eslx_msafile_ReadFailure(afp, status); if (maxN > 0 && msa->nseq > maxN) { esl_msa_Destroy(msa); continue; } nali++; nwgt += msa->nseq; ESL_ALLOC(sqd, sizeof(float) * msa->nseq); if (do_gsc) { esl_msaweight_GSC(msa); GSCWeights(msa->aseq, msa->nseq, msa->alen, sqd); } else if (do_pb) { esl_msaweight_PB(msa); PositionBasedWeights(msa->aseq, msa->nseq, msa->alen, sqd); } else if (do_blosum) { esl_msaweight_BLOSUM(msa, maxid); BlosumWeights(msa->aseq, msa->nseq, msa->alen, maxid, sqd); /* workaround SQUID bug: BLOSUM weights weren't renormalized to sum to nseq. */ esl_vec_FNorm (sqd, msa->nseq); esl_vec_FScale(sqd, msa->nseq, (float) msa->nseq); } if (! be_quiet) { for (i = 0; i < msa->nseq; i++) fprintf(stdout, "%-20s %.3f %.3f\n", msa->sqname[i], msa->wgt[i], sqd[i]); } nbad = 0; for (i = 0; i < msa->nseq; i++) if (esl_DCompare((double) sqd[i], msa->wgt[i], tol) != eslOK) nbad++; if (nbad > 0) nbadali++; nbadwgt += nbad; if (nbad > 0) printf("%-20s :: alignment shows %d weights that differ (out of %d) \n", msa->name, nbad, msa->nseq); esl_msa_Destroy(msa); free(sqd); } eslx_msafile_Close(afp); if (nbadali == 0) printf("OK: all weights identical between squid and Easel in %d alignment(s)\n", nali); else { printf("%d of %d weights mismatched at (> %f fractional difference)\n", nbadwgt, nwgt, tol); printf("involving %d of %d total alignments\n", nbadali, nali); } return eslOK; ERROR: return status; } #endif /* eslMSAWEIGHT_REGRESSION */ /*------------------ end, regression tests ----------------------*/ /***************************************************************** * 5. Benchmark. *****************************************************************/ #ifdef eslMSAWEIGHT_BENCHMARK /* gcc -g -Wall -o benchmark -I. -L. -DeslMSAWEIGHT_BENCHMARK esl_msaweight.c -leasel -lm * ./benchmark * * Script for benchmarks on Pfam: * ./benchmark --gsc --maxN 4000 /misc/data0/databases/Pfam/Pfam-A.full * ./benchmark --blosum /misc/data0/databases/Pfam/Pfam-A.full * ./benchmark --pb /misc/data0/databases/Pfam/Pfam-A.full */ #include "easel.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msaweight.h" #include "esl_vectorops.h" #include "esl_stopwatch.h" #define WGROUP "--blosum,--gsc,--pb" static ESL_OPTIONS options[] = { /* name type deflt env rng togs req incmpt help docgrp */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0 }, { "--blosum", eslARG_NONE, FALSE, NULL, NULL, WGROUP, NULL, NULL, "use BLOSUM weights", 0 }, { "--gsc", eslARG_NONE,"default",NULL,NULL, WGROUP, NULL, NULL, "use GSC weights", 0 }, { "--pb", eslARG_NONE, FALSE, NULL, NULL, WGROUP, NULL, NULL, "use position-based weights", 0 }, { "--id", eslARG_REAL, "0.62", NULL,"0<=x<=1",NULL,"--blosum",NULL, "id threshold for --blosum", 0 }, { "--maxN", eslARG_INT, "0", NULL,"n>=0", NULL, NULL, NULL, "skip alignments w/ > seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "Usage: ./benchmark [-options] "; int main(int argc, char **argv) { ESL_STOPWATCH *w; ESL_GETOPTS *go; char *msafile; ESLX_MSAFILE *afp; ESL_MSA *msa; int do_gsc; int do_pb; int do_blosum; int maxN; double maxid; double cpu; int status; /* Process command line */ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) esl_fatal("failed to parse cmd line: %s", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) esl_fatal("failed to parse cmd line: %s", go->errbuf); if (esl_opt_GetBoolean(go, "-h") == TRUE) { puts(usage); puts("\n where options are:"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* 0=all docgroups; 2=indentation; 80=width */ return 0; } do_blosum = esl_opt_GetBoolean(go, "--blosum"); do_gsc = esl_opt_GetBoolean(go, "--gsc"); do_pb = esl_opt_GetBoolean(go, "--pb"); maxid = esl_opt_GetReal (go, "--id"); maxN = esl_opt_GetInteger(go, "--maxN"); if (esl_opt_ArgNumber(go) != 1) { puts("Incorrect number of command line arguments."); puts(usage); return 1; } if ((msafile = esl_opt_GetArg(go, 1)) == NULL) esl_fatal("failed to parse cmd line: %s", go->errbuf); esl_getopts_Destroy(go); w = esl_stopwatch_Create(); /* Weight one or more alignments from input file */ if ((status = eslx_msafile_Open(NULL, msafile, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); while ( (status = eslx_msafile_Read(afp, &msa)) != eslEOF) { if (status != eslOK) eslx_msafile_ReadFailure(afp, status); if (maxN > 0 && msa->nseq > maxN) { esl_msa_Destroy(msa); continue; } esl_stopwatch_Start(w); if (do_gsc) esl_msaweight_GSC(msa); else if (do_pb) esl_msaweight_PB(msa); else if (do_blosum) esl_msaweight_BLOSUM(msa, maxid); esl_stopwatch_Stop(w); cpu = w->user; printf("%-20s %6d %6d %.3f\n", msa->name, msa->alen, msa->nseq, cpu); esl_msa_Destroy(msa); } eslx_msafile_Close(afp); esl_stopwatch_Destroy(w); return eslOK; } #endif /* eslMSAWEIGHT_BENCHMARK */ /*-------------------- end, benchmark --------------------------*/ /***************************************************************** * 6. Statistics driver. *****************************************************************/ #ifdef eslMSAWEIGHT_STATS /* gcc -g -Wall -o stats -I. -L. -DeslMSAWEIGHT_STATS esl_msaweight.c -leasel -lm * ./stats * * Script for weight statistics on Pfam: * ./stats --gsc --maxN 4000 /misc/data0/databases/Pfam/Pfam-A.full * ./stats --blosum /misc/data0/databases/Pfam/Pfam-A.full * ./stats --pb /misc/data0/databases/Pfam/Pfam-A.full */ #include "easel.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msaweight.h" #include "esl_vectorops.h" #define WGROUP "--blosum,--gsc,--pb" static ESL_OPTIONS options[] = { /* name type deflt env rng togs req incmpt help docgrp */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0 }, { "--blosum", eslARG_NONE, FALSE, NULL, NULL, WGROUP, NULL, NULL, "use BLOSUM weights", 0 }, { "--gsc", eslARG_NONE,"default",NULL,NULL, WGROUP, NULL, NULL, "use GSC weights", 0 }, { "--pb", eslARG_NONE, FALSE, NULL, NULL, WGROUP, NULL, NULL, "use position-based weights", 0 }, { "--id", eslARG_REAL, "0.62", NULL,"0<=x<=1",NULL,"--blosum",NULL, "id threshold for --blosum", 0 }, { "--maxN", eslARG_INT, "0", NULL,"n>=0", NULL, NULL, NULL, "skip alignments w/ > seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "Usage: ./stats [-options] "; int main(int argc, char **argv) { ESL_GETOPTS *go; char *msafile; ESLX_MSAFILE *afp; ESL_MSA *msa; int do_gsc; int do_pb; int do_blosum; int maxN; double maxid; int nsmall, nbig; int i; int status; /* Process command line */ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) esl_fatal("%s", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) esl_fatal("%s", go->errbuf); if (esl_opt_GetBoolean(go, "-h") == TRUE){ puts(usage); puts("\n where options are:"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* 0=all docgroups; 2=indentation; 80=width */ return 0; } do_blosum = esl_opt_GetBoolean(go, "--blosum"); do_gsc = esl_opt_GetBoolean(go, "--gsc"); do_pb = esl_opt_GetBoolean(go, "--pb"); maxid = esl_opt_GetReal (go, "--id"); maxN = esl_opt_GetInteger(go, "--maxN"); if (esl_opt_ArgNumber(go) != 1) { puts("Incorrect number of command line arguments."); puts(usage); return 1; } if ((msafile = esl_opt_GetArg(go, 1)) == NULL) esl_fatal("%s", go->errbuf); esl_getopts_Destroy(go); /* Weight one or more alignments from input file */ if ((status = eslx_msafile_Open(NULL, msafile, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); while ( (status = eslx_msafile_Read(afp, &msa)) != eslEOF) { if (status != eslOK) eslx_msafile_ReadFailure(afp, status); if (maxN > 0 && msa->nseq > maxN) { esl_msa_Destroy(msa); continue; } if (do_gsc) esl_msaweight_GSC(msa); else if (do_pb) esl_msaweight_PB(msa); else if (do_blosum) esl_msaweight_BLOSUM(msa, maxid); for (nsmall = 0, nbig = 0, i = 0; i < msa->nseq; i++) { if (msa->wgt[i] < 0.2) nsmall++; if (msa->wgt[i] > 5.0) nbig++; } printf("%-20s %5d %5d %8.4f %8.4f %5d %5d\n", msa->name, msa->nseq, msa->alen, esl_vec_DMin(msa->wgt, msa->nseq), esl_vec_DMax(msa->wgt, msa->nseq), nsmall, nbig); esl_msa_Destroy(msa); } eslx_msafile_Close(afp); return eslOK; } #endif /* eslMSAWEIGHT_STATS */ /*---------------- end, statistics driver ----------------------*/ /***************************************************************** * 7. Examples. *****************************************************************/ /* Example: Calculate GSC weights for an input MSA. */ #ifdef eslMSAWEIGHT_EXAMPLE /*::cexcerpt::msaweight_example::begin::*/ /* To compile: gcc -g -Wall -o example -I. -L. -DeslMSAWEIGHT_EXAMPLE esl_msaweight.c -leasel -lm * To run: ./example */ #include "easel.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msaweight.h" int main(int argc, char **argv) { ESLX_MSAFILE *afp; ESL_MSA *msa; int i; int status; if ( (status = eslx_msafile_Open(NULL, argv[1], NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); if ( (status = eslx_msafile_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); eslx_msafile_Close(afp); esl_msaweight_GSC(msa); for (i = 0; i < msa->nseq; i++) printf("%20s %f\n", msa->sqname[i], msa->wgt[i]); return 0; } /*::cexcerpt::msaweight_example::end::*/ #endif /*eslMSAWEIGHT_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msaweight.c 715 2011-08-03 21:04:24Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msaweight.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_msafile_a2m.c0000664361611702660230000012475712473612607016572 0ustar wheelerteddy/* I/O of multiple sequence alignments in A2M format (UCSC SAM) * * Contents: * 1. API for reading/writing A2M format * 2. Internal functions used by the A2M parser * 3. Unit tests. * 4. Test driver. * 5. Examples. * 6. License and copyright. * * Reference: * http://compbio.soe.ucsc.edu/a2m-desc.html */ #include "esl_config.h" #include #include #include "easel.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif #include "esl_mem.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_a2m.h" #ifdef eslAUGMENT_ALPHABET static int a2m_padding_digital(ESL_MSA *msa, char **csflag, int *nins, int ncons); #endif static int a2m_padding_text (ESL_MSA *msa, char **csflag, int *nins, int ncons); /***************************************************************** *# 1. API for reading/writing A2M format *****************************************************************/ /* Function: esl_msafile_a2m_SetInmap() * Synopsis: Set input map specific for A2M format * * Purpose: Set the inmap> for A2M format. * * A2M ignores whitespace and periods (and ignoring * periods makes us agnostic whether the input is * "dotless" format or not). Make ' ', '\t', and * '.' ignored. * * A2M format only allows - for a gap, so make * all other Easel gap characters illegal on input. * * A2M format handles an 'O' specially: this indicates * a FIM (free insertion module) to the SAM software. * We ignore it. * A2M allows ACDEFGHIKLMNPQRSTVWY for aa, plus XBZ. * Unknown letters (including other ambig codes) are mapped * to X. A2M allows ACGTU for nucleic, plus YRN. Unknown * letters (including other ambig codes) are mapped to N. * However, Easel enforces its normal input restrictions on * residues: digital bioalphabets allow only valid residue * symbols, and text mode allows any isalpha() character * verbatim. */ int esl_msafile_a2m_SetInmap(ESLX_MSAFILE *afp) { int sym; #ifdef eslAUGMENT_ALPHABET if (afp->abc) { for (sym = 0; sym < 128; sym++) afp->inmap[sym] = afp->abc->inmap[sym]; afp->inmap[0] = esl_abc_XGetUnknown(afp->abc); afp->inmap['_'] = eslDSQ_ILLEGAL; afp->inmap['*'] = eslDSQ_ILLEGAL; afp->inmap['~'] = eslDSQ_ILLEGAL; } #endif if (! afp->abc) { for (sym = 1; sym < 128; sym++) afp->inmap[sym] = (isalpha(sym) ? sym : eslDSQ_ILLEGAL); afp->inmap[0] = '?'; afp->inmap['-'] = '-'; } afp->inmap[' '] = eslDSQ_IGNORED; afp->inmap['\t'] = eslDSQ_IGNORED; afp->inmap['.'] = eslDSQ_IGNORED; afp->inmap['O'] = eslDSQ_IGNORED; afp->inmap['o'] = eslDSQ_IGNORED; return eslOK; } /* Function: esl_msafile_a2m_GuessAlphabet() * Synopsis: Guess the alphabet of an open A2M MSA file. * * Purpose: Guess the alpbabet of the sequences in open * A2M format MSA file . * * On a normal return, <*ret_type> is set to , * , or , and is reset to its * original position. * * Args: afp - open A2M format MSA file * ret_type - RETURN: , , or * * Returns: on success. * if alphabet type can't be determined. * In either case, is rewound to the position it * started at. * * Throws: on allocation error. * on failures of fread() or other system calls */ int esl_msafile_a2m_GuessAlphabet(ESLX_MSAFILE *afp, int *ret_type) { int alphatype = eslUNKNOWN; esl_pos_t anchor = -1; int threshold[3] = { 500, 5000, 50000 }; /* we check after 500, 5000, 50000 residues; else we go to EOF */ int nsteps = 3; int step = 0; int nres = 0; int x; int64_t ct[26]; char *p; esl_pos_t n, pos; int status; for (x = 0; x < 26; x++) ct[x] = 0; anchor = esl_buffer_GetOffset(afp->bf); if ((status = esl_buffer_SetAnchor(afp->bf, anchor)) != eslOK) { status = eslEINCONCEIVABLE; goto ERROR; } /* [eslINVAL] can't happen here */ while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK) { while (n && isspace(*p)) { p++; n--; } if (!n || *p == '>') continue; for (pos = 0; pos < n; pos++) if (isalpha(p[pos])) { x = toupper(p[pos]) - 'A'; ct[x]++; nres++; } /* try to stop early, checking after 500, 5000, and 50000 residues: */ if (step < nsteps && nres > threshold[step]) { if ((status = esl_abc_GuessAlphabet(ct, &alphatype)) == eslOK) goto DONE; /* (eslENOALPHABET) */ step++; } } if (status != eslEOF) goto ERROR; /* [eslEMEM,eslESYS,eslEINCONCEIVABLE] */ status = esl_abc_GuessAlphabet(ct, &alphatype); /* (eslENOALPHABET) */ /* deliberate flowthrough...*/ DONE: esl_buffer_SetOffset(afp->bf, anchor); /* Rewind to where we were. */ esl_buffer_RaiseAnchor(afp->bf, anchor); *ret_type = alphatype; return status; ERROR: if (anchor != -1) { esl_buffer_SetOffset(afp->bf, anchor); esl_buffer_RaiseAnchor(afp->bf, anchor); } *ret_type = eslUNKNOWN; return status; } /* Function: esl_msafile_a2m_Read() * Synopsis: Read a UCSC A2M format alignment. * * Purpose: Read an MSA from an open , parsing * for UCSC A2M (SAM) format. Create a new MSA, * and return a ptr to it in <*ret_msa>. Caller is responsible * for freeing this . * * The has a reference line (rf[]>) that * corresponds to the uppercase/lowercase columns in the * alignment: consensus (uppercase) columns are marked 'X', * and insert (lowercase) columns are marked '.' in the RF * annotation line. * * This input parser can deal both with "dotless" A2M, and * full A2M format with dots. * * Args: afp - open * ret_msa - RETURN: newly parsed * * Returns: on success. <*ret_msa> is set to the newly * allocated MSA, and is at EOF. * * if no (more) alignment data are found in * , and is returned at EOF. * * on a parse error. <*ret_msa> is set to * . contains information sufficient for * constructing useful diagnostic output: * | errmsg> | user-directed error message | * | linenumber> | line # where error was detected | * | line> | offending line (not NUL-term) | * | n> | length of offending line | * | bf->filename> | name of the file | * and is poised at the start of the following line, * so (in principle) the caller could try to resume * parsing. * * Throws: - an allocation failed. * - a system call such as fread() failed * - "impossible" corruption * On these, <*ret_msa> is returned , and the state of * is undefined. */ int esl_msafile_a2m_Read(ESLX_MSAFILE *afp, ESL_MSA **ret_msa) { ESL_MSA *msa = NULL; char **csflag = NULL; /* csflag[i][pos] is TRUE if aseq[i][pos] was uppercase consensus */ int *nins = NULL; /* # of inserted residues before each consensus col [0..ncons-1] */ int *this_nins = NULL; /* # of inserted residues before each consensus residue in this seq */ int nseq = 0; int ncons = 0; int idx; int64_t thislen; int64_t spos; int this_ncons; int cpos, bpos; char *p, *tok; esl_pos_t n, toklen; int status; ESL_DASSERT1( (afp->format == eslMSAFILE_A2M) ); afp->errmsg[0] = '\0'; #ifdef eslAUGMENT_ALPHABET if (afp->abc && (msa = esl_msa_CreateDigital(afp->abc, 16, -1)) == NULL) { status = eslEMEM; goto ERROR; } #endif if (! afp->abc && (msa = esl_msa_Create( 16, -1)) == NULL) { status = eslEMEM; goto ERROR; } ESL_ALLOC(csflag, sizeof(char *) * msa->sqalloc); for (idx = 0; idx < msa->sqalloc; idx++) csflag[idx] = NULL; /* skip leading blank lines in file */ while ( (status = eslx_msafile_GetLine(afp, &p, &n)) == eslOK && esl_memspn(afp->line, afp->n, " \t") == afp->n) ; if (status != eslOK) goto ERROR; /* includes normal EOF */ /* tolerate sloppy space at start of name/desc line */ while (n && isspace(*p)) { p++; n--; } if (*p != '>') ESL_XFAIL(eslEFORMAT, afp->errmsg, "expected A2M name/desc line starting with >"); do { /* for each record starting in '>': */ p++; n--; /* advance past > */ if ( (status = esl_memtok(&p, &n, " \t", &tok, &toklen)) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "no name found for A2M record"); if (nseq >= msa->sqalloc) { int old_sqalloc = msa->sqalloc; if ( (status = esl_msa_Expand(msa)) != eslOK) goto ERROR; ESL_REALLOC(csflag, sizeof(char *) * msa->sqalloc); for (idx = old_sqalloc; idx < msa->sqalloc; idx++) csflag[idx] = NULL; } if ( (status = esl_msa_SetSeqName (msa, nseq, tok, toklen)) != eslOK) goto ERROR; if (n && (status = esl_msa_SetSeqDescription(msa, nseq, p, n)) != eslOK) goto ERROR; /* now for each sequence line... */ thislen = 0; /* count of lowercase, uppercase, and '-': w/o dots, on first pass */ this_ncons = 0; /* count of uppercase + '-': number of consensus columns in alignment: must match for all seqs */ if (nseq) { for (cpos = 0; cpos <= ncons; cpos++) this_nins[cpos] = 0; } while ( (status = eslx_msafile_GetLine(afp, &p, &n)) == eslOK) { while (n && isspace(*p)) { p++; n--; } /* tolerate and skip leading whitespace on line */ if (n == 0) continue; /* tolerate and skip blank lines */ if (*p == '>') break; ESL_REALLOC(csflag[nseq], sizeof(char) * (thislen + n + 1)); /* might be an overalloc by a bit, depending on whitespace on line */ if (nseq == 0) { ESL_REALLOC(this_nins, sizeof(int) * (this_ncons + n + 1)); for (cpos = this_ncons; cpos <= this_ncons+n; cpos++) this_nins[cpos] = 0; } for (spos = thislen, bpos = 0; bpos < n; bpos++) { if (p[bpos] == 'O') continue; else if (isupper(p[bpos])) { csflag[nseq][spos++] = TRUE; this_ncons++; } else if (islower(p[bpos])) { csflag[nseq][spos++] = FALSE; this_nins[this_ncons]++; } else if (p[bpos] == '-') { csflag[nseq][spos++] = TRUE; this_ncons++; } if (ncons && this_ncons > ncons) ESL_XFAIL(eslEFORMAT, afp->errmsg, "unexpected # of consensus residues, didn't match previous seq(s)"); } csflag[nseq][spos] = TRUE; /* need a sentinel, because of the way the padding functions work */ #ifdef eslAUGMENT_ALPHABET if (msa->abc) { status = esl_abc_dsqcat(afp->inmap, &(msa->ax[nseq]), &thislen, p, n); } #endif if (! msa->abc) { status = esl_strmapcat (afp->inmap, &(msa->aseq[nseq]), &thislen, p, n); } if (status == eslEINVAL) ESL_XFAIL(eslEFORMAT, afp->errmsg, "one or more invalid sequence characters"); else if (status != eslOK) goto ERROR; ESL_DASSERT1( (spos == thislen) ); } if (status != eslOK && status != eslEOF) goto ERROR; /* exception thrown by eslx_msafile_GetLine() */ /* status == OK: then *p == '>'. status == eslEOF: we're eof. status == anything else: error */ /* Finished reading a sequence record. */ if (nseq == 0) { ncons = this_ncons; ESL_ALLOC(nins, sizeof(int) * (ncons+1)); for (cpos = 0; cpos <= ncons; cpos++) nins[cpos] = this_nins[cpos]; } else { if (this_ncons != ncons) ESL_XFAIL(eslEFORMAT, afp->errmsg, "unexpected # of consensus residues, didn't match previous seq(s)"); for (cpos = 0; cpos <= ncons; cpos++) nins[cpos] = ESL_MAX(nins[cpos], this_nins[cpos]); } nseq++; } while (status == eslOK); /* Now we have nseq *unaligned* sequences in ax/aseq[0..nseq-1]; call the length slen, though we don't explicitly store it * csflag[idx][spos] tells us whether each unaligned residue is an insertion or consensus, for spos==0..slen-1. * nins[0..ncons] tells us the max number of inserted residues before each consensus column * This is sufficient information to reconstruct each aligned sequence. */ msa->nseq = nseq; #ifdef eslAUGMENT_ALPHABET if (msa->abc) { if ((status = a2m_padding_digital(msa, csflag, nins, ncons)) != eslOK) goto ERROR; } #endif if (!msa->abc) { if ((status = a2m_padding_text (msa, csflag, nins, ncons)) != eslOK) goto ERROR; } if (( status = esl_msa_SetDefaultWeights(msa)) != eslOK) goto ERROR; *ret_msa = msa; free(nins); free(this_nins); for (idx = 0; idx < msa->nseq; idx++) free(csflag[idx]); free(csflag); return eslOK; ERROR: if (nins) free(nins); if (this_nins) free(this_nins); if (csflag) { for (idx = 0; idx < msa->nseq; idx++) if (csflag[idx]) free(csflag[idx]); free(csflag); } if (msa) esl_msa_Destroy(msa); return status; } /* Function: esl_msafile_a2m_Write() * Synopsis: Write an A2M (UCSC SAM) dotless format alignment to a stream. * * Purpose: Write alignment in dotless UCSC A2M format to a * stream . * * The should have a valid reference line rf>, * with alphanumeric characters marking consensus (match) * columns, and non-alphanumeric characters marking * nonconsensus (insert) columns. If it does not, * then as a fallback, the first sequence in the alignment is * considered to be the consensus. * * In "dotless" A2M format, gap characters (.) in insert * columns are omitted; therefore sequences can be of * different lengths, but each sequence has the same number * of consensus columns (residue or -). * * A2M format cannot represent missing data symbols * (Easel's ~). Any missing data symbols are converted to * gaps. * * A2M format cannot represent pyrrolysine residues in * amino acid sequences, because it treats 'O' symbols * specially, as indicating a position at which a * free-insertion module (FIM) should be created. Any 'O' * in the is written instead as an unknown * residue ('X', in protein sequences). * * Args: fp - open output stream * msa - MSA to write * * Returns: on success. * * Throws: on allocation failure. * on any system write error, such as filled disk. */ int esl_msafile_a2m_Write(FILE *fp, const ESL_MSA *msa) { char *buf = NULL; int cpl = 60; int bpos; int pos; int is_consensus; int is_residue; int do_dotless = TRUE; /* just changing this to FALSE makes it write dots too */ int i; int sym; int status; ESL_ALLOC(buf, sizeof(char) * (cpl+1)); for (i = 0; i < msa->nseq; i++) { /* Construct the name/description line */ if (fprintf(fp, ">%s", msa->sqname[i]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "a2m msa file write failed"); if (msa->sqacc != NULL && msa->sqacc[i] != NULL) { if (fprintf(fp, " %s", msa->sqacc[i]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "a2m msa file write failed"); } if (msa->sqdesc != NULL && msa->sqdesc[i] != NULL) { if (fprintf(fp, " %s", msa->sqdesc[i]) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "a2m msa file write failed"); } if (fputc('\n', fp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "a2m msa file write failed"); #ifdef eslAUGMENT_ALPHABET if (msa->abc) { pos = 0; while (pos < msa->alen) { for (bpos = 0; pos < msa->alen && bpos < cpl; pos++) { sym = msa->abc->sym[msa->ax[i][pos+1]]; /* note off-by-one in digitized aseq: 1..alen */ is_residue = esl_abc_XIsResidue(msa->abc, msa->ax[i][pos+1]); if (msa->rf) is_consensus = (isalnum(msa->rf[pos]) ? TRUE : FALSE); else is_consensus = (esl_abc_XIsResidue(msa->abc, msa->ax[0][pos+1]) ? TRUE : FALSE); if (sym == 'O') sym = esl_abc_XGetUnknown(msa->abc); /* watch out: O means "insert a FIM" in a2m format, not pyrrolysine */ if (is_consensus) { buf[bpos++] = (is_residue ? toupper(sym) : '-'); } else if (is_residue) { buf[bpos++] = tolower(sym); } else if (! do_dotless) { buf[bpos++] = '.'; } } buf[bpos] = '\0'; if (bpos) { if (fprintf(fp, "%s\n", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "a2m msa file write failed");} } } #endif if (! msa->abc) { pos = 0; while (pos < msa->alen) { for (bpos = 0; pos < msa->alen && bpos < cpl; pos++) { sym = msa->aseq[i][pos]; is_residue = isalpha(msa->aseq[i][pos]); if (msa->rf) is_consensus = (isalnum(msa->rf[pos]) ? TRUE : FALSE); else is_consensus = (isalnum(msa->aseq[0][pos]) ? TRUE : FALSE); if (sym == 'O') sym = 'X'; if (is_consensus) { buf[bpos++] = ( is_residue ? toupper(sym) : '-'); } else if (is_residue) { buf[bpos++] = tolower(sym); } else if (! do_dotless) { buf[bpos++] = '.'; } } buf[bpos] = '\0'; if (bpos) { if (fprintf(fp, "%s\n", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "a2m msa file write failed"); } } } } /* end, loop over sequences in the MSA */ free(buf); return eslOK; ERROR: if (buf) free(buf); return status; } /*------------- end, API for i/o of a2m format ------------------*/ /***************************************************************** * 2. Internal functions used by the A2M parser *****************************************************************/ /* A2M parser has an input phase, followed by an alignment padding phase. * The a2m_padding_{digital,text} functions do the padding phase. * * Upon call: * msa->nseq is set; * msa->ax[0..nseq-1][1..slen] are unaligned seqs (consensus cols + * inserted residues); or msa->aseq[0..nseq-1][0..slen-1], for text mode * csflag[0..nseq-1][0..slen-1] is TRUE/FALSE for whether each pos * in msa->ax[][1..slen]/msa->aseq[][0..slen-1] is consensus or insert * nins[0..ncons] is the number of insert columns preceding each consensus column * * watch out, ax[] is a digital sequence, 1..alen not 0..alen-1: hence * the [apos+1], [spos+1] indexing * * these functions may not fail with any normal (eslEFORMAT) error, because * we wouldn't be able to tell the line/linenumber of the error * * Upon successful return: * msa->alen is set * all msa->ax[]/msa->aseq are now aligned digital sequences * msa->rf is set */ #ifdef eslAUGMENT_ALPHABET static int a2m_padding_digital(ESL_MSA *msa, char **csflag, int *nins, int ncons) { ESL_DSQ *ax = NULL; /* new aligned sequence - will be swapped into msa->ax[] */ ESL_DSQ gapsym = esl_abc_XGetGap(msa->abc); int apos, cpos, spos; /* position counters for alignment 0..alen, consensus cols 0..cpos-1, sequence position 0..slen-1 */ int alen; int icount; int idx; int status; alen = ncons; for (cpos = 0; cpos <= ncons; cpos++) alen += nins[cpos]; ESL_ALLOC(msa->rf, sizeof(char) * (alen+1)); for (apos = 0, cpos = 0; cpos <= ncons; cpos++) { for (icount = 0; icount < nins[cpos]; icount++) msa->rf[apos++] = '.'; if (cpos < ncons) msa->rf[apos++] = 'x'; } msa->rf[apos] = '\0'; for (idx = 0; idx < msa->nseq; idx++) { ESL_ALLOC(ax, sizeof(ESL_DSQ) * (alen + 2)); ax[0] = eslDSQ_SENTINEL; apos = spos = 0; for (cpos = 0; cpos <= ncons; cpos++) { icount = 0; while (csflag[idx][spos] == FALSE) { ax[apos+1] = msa->ax[idx][spos+1]; apos++; spos++; icount++; } while (icount < nins[cpos]) { ax[apos+1] = gapsym; apos++; icount++; } if (cpos < ncons) { ax[apos+1] = msa->ax[idx][spos+1]; apos++; spos++; } } ESL_DASSERT1( (msa->ax[idx][spos+1] == eslDSQ_SENTINEL) ); ESL_DASSERT1( (apos == alen) ); ax[alen+1] = eslDSQ_SENTINEL; free(msa->ax[idx]); msa->ax[idx] = ax; ax = NULL; } msa->alen = alen; return eslOK; ERROR: if (ax) free(ax); return status; } #endif /*eslAUGMENT_ALPHABET*/ static int a2m_padding_text(ESL_MSA *msa, char **csflag, int *nins, int ncons) { char *aseq = NULL; /* new aligned sequence - will be swapped into msa->aseq[] */ int apos, cpos, spos; /* position counters for alignment 0..alen, consensus cols 0..cpos-1, sequence position 0..slen-1 */ int alen; int icount; int idx; int status; alen = ncons; for (cpos = 0; cpos <= ncons; cpos++) alen += nins[cpos]; ESL_ALLOC(msa->rf, sizeof(char) * (alen+1)); for (apos = 0, cpos = 0; cpos <= ncons; cpos++) { for (icount = 0; icount < nins[cpos]; icount++) msa->rf[apos++] = '.'; if (cpos < ncons) msa->rf[apos++] = 'x'; } msa->rf[apos] = '\0'; for (idx = 0; idx < msa->nseq; idx++) { ESL_ALLOC(aseq, sizeof(char) * (alen + 1)); apos = spos = 0; for (cpos = 0; cpos <= ncons; cpos++) { icount = 0; while (csflag[idx][spos] == FALSE) { aseq[apos] = msa->aseq[idx][spos]; apos++; spos++; icount++; } while (icount < nins[cpos]) { aseq[apos] = '.'; apos++; icount++; } if (cpos < ncons) { aseq[apos] = msa->aseq[idx][spos]; apos++; spos++; } } ESL_DASSERT1( (msa->aseq[idx][spos] == '\0') ); ESL_DASSERT1( (apos == alen) ); aseq[alen] = '\0'; free(msa->aseq[idx]); msa->aseq[idx] = aseq; aseq = NULL; } msa->alen = alen; return eslOK; ERROR: if (aseq) free(aseq); return status; } /*---------- end, internal functions for the parser -------------*/ /***************************************************************** * 3. Unit tests. *****************************************************************/ #ifdef eslMSAFILE_A2M_TESTDRIVE static void utest_write_good1(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs(">MYG_PHYCA\n", ofp); fputs("VLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKTEAEMKASED\n", ofp); fputs("LKKHGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISEAIIHVLHSRHP\n", ofp); fputs("GDFGADAQGAMNKALELFRKDIAAKYKELGYQG\n", ofp); fputs(">GLB5_PETMA\n", ofp); fputs("pivdtgsvApLSAAEKTKIRSAWAPVYSTYETSGVDILVKFFTSTPAAQEFFPKFKGLTT\n", ofp); fputs("ADQLKKSADVRWHAERIINAVNDAVASMDDtekMSMKLRDLSGKHAKSFQVDPQYFKVLA\n", ofp); fputs("AVI---------ADTVAAGDAGFEKLMSMICILLRSAY-------\n", ofp); fputs(">HBB_HUMAN\n", ofp); fputs("VhLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNP\n", ofp); fputs("KVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHF\n", ofp); fputs("GKEFTPPVQAAYQKVVAGVANALAHKYH------\n", ofp); fputs(">HBA_HUMAN\n", ofp); fputs("VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF------DLSHGSAQ\n", ofp); fputs("VKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLP\n", ofp); fputs("AEFTPAVHASLDKFLASVSTVLTSKYR------\n", ofp); *ret_alphatype = eslAMINO; *ret_nseq = 4; *ret_alen = 165; } static void utest_write_good2(FILE *ofp, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs(">tRNA2\n", ofp); fputs("UCCGAUAUAGUGUAACGGCUAUCACAUCACGCUUUCACCGUGGAGACCGGGGUUCGACUC\n", ofp); fputs("CCCGUAUCGGAG\n", ofp); fputs(">tRNA3\n", ofp); fputs("UCCGUGAUAGUUUAAUGGUCAGAAUGG-GCGCUUGUCGCGUGCcAGAUCGGGGUUCAAUU\n", ofp); fputs("CCCCGUCGCGGAG\n", ofp); fputs(">tRNA5\n", ofp); fputs("GGGCACAUGGCGCAGUUGGUAGCGCGCUUCCCUUGCAAGGAAGaGGUCAUCGGUUCGAUU\n", ofp); fputs("CCGGUUGCGUCCA\n", ofp); fputs(">tRNA1\n", ofp); fputs("GCGGAUUUAGCUCAGUUGGGAGAGCGCCAGACUGAAGAUCUGGaGGUCCUGUGUUCGAUC\n", ofp); fputs("CACAGAAUUCGCA\n", ofp); fputs(">tRNA4\n", ofp); fputs("GCUCGUAUGGCGCAGUGG-UAGCGCAGCAGAUUGCAAAUCUGUuGGUCCUUAGUUCGAUC\n", ofp); fputs("CUGAGUGCGAGCU\n", ofp); *ret_alphatype = eslRNA; *ret_nseq = 5; *ret_alen = 73; } static void utest_goodfile(char *filename, int testnumber, int expected_alphatype, int expected_nseq, int expected_alen) { ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa1 = NULL; ESL_MSA *msa2 = NULL; char tmpfile1[32] = "esltmpXXXXXX"; char tmpfile2[32] = "esltmpXXXXXX"; FILE *ofp = NULL; int status; /* guessing both the format and the alphabet should work: this is a digital open */ if ( (status = eslx_msafile_Open(&abc, filename, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) esl_fatal("a2m good file test %d failed: digital open", testnumber); if (afp->format != eslMSAFILE_A2M) esl_fatal("a2m good file test %d failed: format autodetection", testnumber); if (abc->type != expected_alphatype) esl_fatal("a2m good file test %d failed: alphabet autodetection", testnumber); /* This is a digital read, using . */ if ( (status = esl_msafile_a2m_Read(afp, &msa1)) != eslOK) esl_fatal("a2m good file test %d failed: msa read, digital", testnumber); if (msa1->nseq != expected_nseq || msa1->alen != expected_alen) esl_fatal("a2m good file test %d failed: nseq/alen", testnumber); if (esl_msa_Validate(msa1, NULL) != eslOK) esl_fatal("a2m good file test %d failed: msa invalid", testnumber); eslx_msafile_Close(afp); /* write it back out to a new tmpfile (digital write) */ if ( (status = esl_tmpfile_named(tmpfile1, &ofp)) != eslOK) esl_fatal("a2m good file test %d failed: tmpfile creation", testnumber); if ( (status = esl_msafile_a2m_Write(ofp, msa1)) != eslOK) esl_fatal("a2m good file test %d failed: msa write, digital", testnumber); fclose(ofp); /* now open and read it as text mode, in known format. (We have to pass fmtd now, to deal with the possibility of a nonstandard name width) */ if ( (status = eslx_msafile_Open(NULL, tmpfile1, NULL, eslMSAFILE_A2M, NULL, &afp)) != eslOK) esl_fatal("a2m good file test %d failed: text mode open", testnumber); if ( (status = esl_msafile_a2m_Read(afp, &msa2)) != eslOK) esl_fatal("a2m good file test %d failed: msa read, text", testnumber); if (msa2->nseq != expected_nseq || msa2->alen != expected_alen) esl_fatal("a2m good file test %d failed: nseq/alen", testnumber); if (esl_msa_Validate(msa2, NULL) != eslOK) esl_fatal("a2m good file test %d failed: msa invalid", testnumber); eslx_msafile_Close(afp); /* write it back out to a new tmpfile (text write) */ if ( (status = esl_tmpfile_named(tmpfile2, &ofp)) != eslOK) esl_fatal("a2m good file test %d failed: tmpfile creation", testnumber); if ( (status = esl_msafile_a2m_Write(ofp, msa2)) != eslOK) esl_fatal("a2m good file test %d failed: msa write, text", testnumber); fclose(ofp); esl_msa_Destroy(msa2); /* open and read it in digital mode */ if ( (status = eslx_msafile_Open(&abc, tmpfile1, NULL, eslMSAFILE_A2M, NULL, &afp)) != eslOK) esl_fatal("a2m good file test %d failed: 2nd digital mode open", testnumber); if ( (status = esl_msafile_a2m_Read(afp, &msa2)) != eslOK) esl_fatal("a2m good file test %d failed: 2nd digital msa read", testnumber); if (esl_msa_Validate(msa2, NULL) != eslOK) esl_fatal("a2m good file test %d failed: msa invalid", testnumber); eslx_msafile_Close(afp); /* this msa should be identical to */ if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal("a2m good file test %d failed: msa compare", testnumber); remove(tmpfile1); remove(tmpfile2); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_alphabet_Destroy(abc); } static void write_test_msas(FILE *ofp1, FILE *ofp2) { fprintf(ofp1, ">seq1 description line for seq1\n"); fprintf(ofp1, "ACDEFGHIKLMNPQRSTVWY\n"); fprintf(ofp1, "ACDEFGHIKLMNPQRSTVWY\n"); fprintf(ofp1, ">seq2 description line for seq2\n"); fprintf(ofp1, "ACDEFGHIKLMNPQRSTV--\n"); fprintf(ofp1, "ACDEFGHIKLMNPQRSTVWY\n"); fprintf(ofp1, "yy\n"); fprintf(ofp1, ">seq3\n"); fprintf(ofp1, "aaACDEFGHIKLMNPQRSTV\n"); fprintf(ofp1, "--ACDEFGHIKLMNPQRSTVWY\n"); fprintf(ofp1, ">seq4 \n"); fprintf(ofp1, "ACDEFGHIKLMNPQR\n"); fprintf(ofp1, "STVWYACDEFGHIKL\n"); fprintf(ofp1, "MNPQRSTVWY\n"); fprintf(ofp2, "# STOCKHOLM 1.0\n"); fprintf(ofp2, "\n"); fprintf(ofp2, "#=GS seq1 DE description line for seq1\n"); fprintf(ofp2, "#=GS seq2 DE description line for seq2\n"); fprintf(ofp2, "\n"); fprintf(ofp2, "#=GC RF ..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..\n"); fprintf(ofp2, "seq1 ..ACDEFGHIKLMNPQRSTVWYACDEFGHIKLMNPQRSTVWY..\n"); fprintf(ofp2, "seq2 ..ACDEFGHIKLMNPQRSTV--ACDEFGHIKLMNPQRSTVWYyy\n"); fprintf(ofp2, "seq3 aaACDEFGHIKLMNPQRSTV--ACDEFGHIKLMNPQRSTVWY..\n"); fprintf(ofp2, "seq4 ..ACDEFGHIKLMNPQRSTVWYACDEFGHIKLMNPQRSTVWY..\n"); fprintf(ofp2, "//\n"); } static void read_test_msas_digital(char *a2mfile, char *stkfile) { char msg[] = "A2M msa digital read unit test failed"; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp1 = NULL; ESLX_MSAFILE *afp2 = NULL; ESL_MSA *msa1, *msa2, *msa3, *msa4; FILE *a2mfp, *stkfp; char a2mfile2[32] = "esltmpa2m2XXXXXX"; char stkfile2[32] = "esltmpstk2XXXXXX"; if ( eslx_msafile_Open(&abc, a2mfile, NULL, eslMSAFILE_A2M, NULL, &afp1) != eslOK) esl_fatal(msg); if ( !abc || abc->type != eslAMINO) esl_fatal(msg); if ( eslx_msafile_Open(&abc, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_a2m_Read (afp1, &msa1) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa2) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal(msg); if ( esl_msafile_a2m_Read (afp1, &msa3) != eslEOF) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa3) != eslEOF) esl_fatal(msg); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); /* Now write stk to a2m file, and vice versa; then retest */ if ( esl_tmpfile_named(a2mfile2, &a2mfp) != eslOK) esl_fatal(msg); if ( esl_tmpfile_named(stkfile2, &stkfp) != eslOK) esl_fatal(msg); if ( esl_msafile_a2m_Write (a2mfp, msa2) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_PFAM) != eslOK) esl_fatal(msg); fclose(a2mfp); fclose(stkfp); if ( eslx_msafile_Open(&abc, a2mfile2, NULL, eslMSAFILE_A2M, NULL, &afp1) != eslOK) esl_fatal(msg); if ( eslx_msafile_Open(&abc, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_a2m_Read (afp1, &msa3) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa4) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa3, msa4) != eslOK) esl_fatal(msg); remove(a2mfile2); remove(stkfile2); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_msa_Destroy(msa3); esl_msa_Destroy(msa4); esl_alphabet_Destroy(abc); } static void read_test_msas_text(char *a2mfile, char *stkfile) { char msg[] = "A2M msa text-mode read unit test failed"; ESLX_MSAFILE *afp1 = NULL; ESLX_MSAFILE *afp2 = NULL; ESL_MSA *msa1, *msa2, *msa3, *msa4; FILE *a2mfp, *stkfp; char a2mfile2[32] = "esltmpa2m2XXXXXX"; char stkfile2[32] = "esltmpstk2XXXXXX"; /* vvvv-- everything's the same as the digital utest except these NULLs */ if ( eslx_msafile_Open(NULL, a2mfile, NULL, eslMSAFILE_A2M, NULL, &afp1) != eslOK) esl_fatal(msg); if ( eslx_msafile_Open(NULL, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_a2m_Read (afp1, &msa1) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa2) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal(msg); if ( esl_msafile_a2m_Read (afp1, &msa3) != eslEOF) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa3) != eslEOF) esl_fatal(msg); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); if ( esl_tmpfile_named(a2mfile2, &a2mfp) != eslOK) esl_fatal(msg); if ( esl_tmpfile_named(stkfile2, &stkfp) != eslOK) esl_fatal(msg); if ( esl_msafile_a2m_Write (a2mfp, msa2) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_PFAM) != eslOK) esl_fatal(msg); fclose(a2mfp); fclose(stkfp); if ( eslx_msafile_Open(NULL, a2mfile2, NULL, eslMSAFILE_A2M, NULL, &afp1) != eslOK) esl_fatal(msg); if ( eslx_msafile_Open(NULL, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_a2m_Read (afp1, &msa3) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa4) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa3, msa4) != eslOK) esl_fatal(msg); remove(a2mfile2); remove(stkfile2); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_msa_Destroy(msa3); esl_msa_Destroy(msa4); } #endif /*eslMSAFILE_A2M_TESTDRIVE*/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 4. Test driver. *****************************************************************/ #ifdef eslMSAFILE_A2M_TESTDRIVE /* compile: gcc -g -Wall -I. -L. -o esl_msafile_a2m_utest -DeslMSAFILE_A2M_TESTDRIVE esl_msafile_a2m.c -leasel -lm * (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile_a2m_utest -DeslMSAFILE_A2M_TESTDRIVE esl_msafile_a2m.c -leasel -lm * run: ./esl_msafile_a2m_utest */ #include "esl_config.h" #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_msafile.h" #include "esl_msafile_a2m.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for A2M MSA format module"; int main(int argc, char **argv) { char msg[] = "a2m MSA i/o module test driver failed"; ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); char a2mfile[32] = "esltmpa2mXXXXXX"; char stkfile[32] = "esltmpstkXXXXXX"; FILE *a2mfp, *stkfp; int testnumber; int ngoodtests = 2; char tmpfile[32]; FILE *ofp; int expected_alphatype; int expected_nseq; int expected_alen; if ( esl_tmpfile_named(a2mfile, &a2mfp) != eslOK) esl_fatal(msg); if ( esl_tmpfile_named(stkfile, &stkfp) != eslOK) esl_fatal(msg); write_test_msas(a2mfp, stkfp); fclose(a2mfp); fclose(stkfp); read_test_msas_digital(a2mfile, stkfile); read_test_msas_text (a2mfile, stkfile); /* Various "good" files that should be parsed correctly */ for (testnumber = 1; testnumber <= ngoodtests; testnumber++) { strcpy(tmpfile, "esltmpXXXXXX"); if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg); switch (testnumber) { case 1: utest_write_good1 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break; case 2: utest_write_good2 (ofp, &expected_alphatype, &expected_nseq, &expected_alen); break; } fclose(ofp); utest_goodfile(tmpfile, testnumber, expected_alphatype, expected_nseq, expected_alen); remove(tmpfile); } remove(a2mfile); remove(stkfile); esl_getopts_Destroy(go); return 0; } #endif /*eslMSAFILE_A2M_TESTDRIVE*/ /*--------------------- end, test driver ------------------------*/ /***************************************************************** * 5. Examples. *****************************************************************/ #ifdef eslMSAFILE_A2M_EXAMPLE /* A full-featured example of reading/writing an MSA in A2M format. gcc -g -Wall -o esl_msafile_a2m_example -I. -L. -DeslMSAFILE_A2M_EXAMPLE esl_msafile_a2m.c -leasel -lm ./esl_msafile_a2m_example */ /*::cexcerpt::msafile_a2m_example::begin::*/ #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_a2m.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "override autodetection; force A2M format", 0 }, { "-q", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "quieter: don't write msa back, just summary", 0 }, { "-t", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use text mode: no digital alphabet", 0 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is DNA", 0 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is RNA", 0 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is protein", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of guessing, reading, writing A2M format"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *filename = esl_opt_GetArg(go, 1); int infmt = eslMSAFILE_UNKNOWN; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; int status; if (esl_opt_GetBoolean(go, "-1")) infmt = eslMSAFILE_A2M; /* override format autodetection */ if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); /* Text mode: pass NULL for alphabet. * Digital mode: pass ptr to expected ESL_ALPHABET; and if abc=NULL, alphabet is guessed */ if (esl_opt_GetBoolean(go, "-t")) status = eslx_msafile_Open(NULL, filename, NULL, infmt, NULL, &afp); else status = eslx_msafile_Open(&abc, filename, NULL, infmt, NULL, &afp); if (status != eslOK) eslx_msafile_OpenFailure(afp, status); if ((status = esl_msafile_a2m_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); printf("alphabet: %s\n", (abc ? esl_abc_DecodeType(abc->type) : "none (text mode)")); printf("# of seqs: %d\n", msa->nseq); printf("# of cols: %d\n", (int) msa->alen); printf("\n"); if (! esl_opt_GetBoolean(go, "-q")) esl_msafile_a2m_Write(stdout, msa); esl_msa_Destroy(msa); eslx_msafile_Close(afp); if (abc) esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); exit(0); } /*::cexcerpt::msafile_a2m_example::end::*/ #endif /*eslMSAFILE_A2M_EXAMPLE*/ #ifdef eslMSAFILE_A2M_EXAMPLE2 /* A minimal example. Read A2M MSA, in text mode gcc -g -Wall -o esl_msafile_a2m_example2 -I. -L. -DeslMSAFILE_A2M_EXAMPLE2 esl_msafile_a2m.c -leasel -lm ./esl_msafile_a2m_example */ /*::cexcerpt::msafile_a2m_example2::begin::*/ #include #include "easel.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_a2m.h" int main(int argc, char **argv) { char *filename = argv[1]; int fmt = eslMSAFILE_A2M; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; int status; if ( (status = eslx_msafile_Open(NULL, filename, NULL, fmt, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); if ( (status = esl_msafile_a2m_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); printf("%6d seqs, %5d columns\n", msa->nseq, (int) msa->alen); esl_msafile_a2m_Write(stdout, msa); esl_msa_Destroy(msa); eslx_msafile_Close(afp); exit(0); } /*::cexcerpt::msafile_a2m_example2::end::*/ #endif /*eslMSAFILE_A2M_EXAMPLE2*/ /*--------------------- end of examples -------------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msafile_a2m.c 727 2011-10-24 17:17:32Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msafile_a2m.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_randomseq.c0000664361611702660230000021670212473612607016374 0ustar wheelerteddy/* Generating, shuffling, and randomizing sequences. * * Contents: * 1. Generating simple random character strings. * 2. Generating iid sequences. * 3. Shuffling sequences. * 4. Randomizing sequences. * 5. Generating iid sequences (digital mode). * 6. Shuffling sequences (digital mode). * 7. Randomizing sequences (digital mode). * 8. Statistics drivers. * 9. Unit tests. * 10. Test driver. * 11. Example. * 12. Copyright and license information */ #include "esl_config.h" #include #include #include #include #include #include "easel.h" #include "esl_random.h" #include "esl_randomseq.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif /***************************************************************** * 1. Generating simple random character strings. *****************************************************************/ /* Function: esl_rsq_Sample() * Synopsis: Generate a random character string. * * Purpose: Sample a random character string of length , * consisting of characters in the set defined by * an integer flag , using * random number generator . Return the newly * allocated, NUL-terminated string in <*ret_s>. * * Allowed values of the flag mirror * the standard C99 character set functions in : * * | | isalnum() | * | | isalpha() | * | | islower() | * | | isupper() | * | | isdigit() | * | | isxdigit() | * | | iscntrl() | * | | isgraph() | * | | isspace() | * | | isblank() | * | | isprint() | * | | ispunct() | * * Note that with , your string * may sample NUL control characters (<0>), in addition to * the string-terminating one at <(*ret_s)[L]>, so * may not equal in this case. * * Args: rng - ESL_RANDOMNESS object, the random number generator * allowed_chars - allowed character set flag: eslRSQ_SAMPLE_* * L - length of string to sample * ret_s - RETURN: the newly allocated, NUL-terminated string * * Returns: on success; <*ret_s> is the sampled string, which was * newly allocated here, and caller becomes responsible for free'ing. * * Throws: on allocation error; if caller * passes an invalid value of . Now <*ret_s> * is . */ int esl_rsq_Sample(ESL_RANDOMNESS *rng, int allowed_chars, int L, char **ret_s) { char *s = NULL; int n = 0; char c[127]; int x,i; int status; /* We can't portably make assumptions about char codes (EBCDIC, * ASCII...); and we don't want to write a bunch of fiddly overhead * initializing static tables. So, quickly and portably build an * array c[0..n-1] of characters we will sample uniformly from. * RNG sampling is fairly compute-intensive anyway, so this time * should disappear in the noise of that. */ switch (allowed_chars) { case eslRSQ_SAMPLE_ALNUM: for (x = 0; x < 128; x++) if (isalnum(x)) c[n++] = x; break; case eslRSQ_SAMPLE_ALPHA: for (x = 0; x < 128; x++) if (isalpha(x)) c[n++] = x; break; case eslRSQ_SAMPLE_LOWER: for (x = 0; x < 128; x++) if (islower(x)) c[n++] = x; break; case eslRSQ_SAMPLE_UPPER: for (x = 0; x < 128; x++) if (isupper(x)) c[n++] = x; break; case eslRSQ_SAMPLE_DIGIT: for (x = 0; x < 128; x++) if (isdigit(x)) c[n++] = x; break; case eslRSQ_SAMPLE_XDIGIT: for (x = 0; x < 128; x++) if (isxdigit(x)) c[n++] = x; break; case eslRSQ_SAMPLE_CNTRL: for (x = 0; x < 128; x++) if (iscntrl(x)) c[n++] = x; break; case eslRSQ_SAMPLE_GRAPH: for (x = 0; x < 128; x++) if (isgraph(x)) c[n++] = x; break; case eslRSQ_SAMPLE_SPACE: for (x = 0; x < 128; x++) if (isspace(x)) c[n++] = x; break; case eslRSQ_SAMPLE_BLANK: for (x = 0; x < 128; x++) if (isblank(x)) c[n++] = x; break; case eslRSQ_SAMPLE_PRINT: for (x = 0; x < 128; x++) if (isprint(x)) c[n++] = x; break; case eslRSQ_SAMPLE_PUNCT: for (x = 0; x < 128; x++) if (ispunct(x)) c[n++] = x; break; default: ESL_XEXCEPTION(eslEINVAL, "bad flag; wanted something like eslRSQ_SAMPLE_ALPHA"); } ESL_ALLOC(s, sizeof(char) * (L+1)); /* +\0 */ for (i = 0; i < L; i++) s[i] = c[ esl_rnd_Roll(rng, n) ]; s[L] = '\0'; *ret_s = s; return eslOK; ERROR: *ret_s = NULL; return status; } /***************************************************************** *# 1. Generating iid sequences. *****************************************************************/ /* Function: esl_rsq_IID() * Synopsis: Generate an iid random text sequence. * Incept: SRE, Thu Aug 5 09:03:03 2004 [St. Louis] * * Purpose: Generate a -terminated i.i.d. symbol string of length , * $0..L-1$, and leave it in . The symbol alphabet is given * as a string of total symbols, and the iid * probability of each residue is given in

. The caller * must provide an that is allocated for at least * <(L+1)*sizeof(char)>, room for residues and the terminator. * * does the same, but for a floating point * probability vector

, rather than a double precision * vector. * * Args: r - ESL_RANDOMNESS object * alphabet - e.g. "ACGT" * p - probability distribution [0..n-1] * K - number of symbols in alphabet * L - length of generated sequence * s - the generated sequence. * Caller allocated, >= (L+1) * sizeof(char). * * Return: on success. */ int esl_rsq_IID(ESL_RANDOMNESS *r, const char *alphabet, const double *p, int K, int L, char *s) { int x; for (x = 0; x < L; x++) s[x] = alphabet[esl_rnd_DChoose(r,p,K)]; s[x] = '\0'; return eslOK; } int esl_rsq_fIID(ESL_RANDOMNESS *r, const char *alphabet, const float *p, int K, int L, char *s) { int x; for (x = 0; x < L; x++) s[x] = alphabet[esl_rnd_FChoose(r,p,K)]; s[x] = '\0'; return eslOK; } /*------------ end, generating iid sequences --------------------*/ /***************************************************************** *# 2. Shuffling sequences. *****************************************************************/ /* Function: esl_rsq_CShuffle() * Synopsis: Shuffle a text sequence. * Incept: SRE, Fri Feb 23 08:17:50 2007 [Casa de Gatos] * * Purpose: Returns a shuffled version of in , given * a source of randomness . * * Caller provides allocated storage for , for at * least the same length as . * * may also point to the same storage as , * in which case is shuffled in place. * * Returns: on success. */ int esl_rsq_CShuffle(ESL_RANDOMNESS *r, const char *s, char *shuffled) { int L, i; char c; L = strlen(s); if (shuffled != s) strcpy(shuffled, s); while (L > 1) { i = esl_rnd_Roll(r, L); c = shuffled[i]; shuffled[i] = shuffled[L-1]; shuffled[L-1] = c; L--; } return eslOK; } /* Function: esl_rsq_CShuffleDP() * Synopsis: Shuffle a text sequence, preserving diresidue composition. * Incept: SRE, Fri Feb 23 08:56:03 2007 [Casa de Gatos] * * Purpose: Given string , and a source of randomness , * returns shuffled version in . The shuffle * is a "doublet-preserving" (DP) shuffle which * shuffles a sequence while exactly preserving both mono- * and di-symbol composition. * * may only consist of alphabetic characters [a-zA-Z]. * The shuffle is done case-insensitively. The shuffled * string result is all upper case. * * Caller provides storage in of at least the * same length as . * * may also point to the same storage as , * in which case is shuffled in place. * * The algorithm does an internal allocation of a * substantial amount of temporary storage, on the order of * <26 * strlen(s)>, so an allocation failure is possible * if is long enough. * * The algorithm is a search for a random Eulerian walk on * a directed multigraph \citep{AltschulErickson85}. * * If is of length 2 or less, this is a no-op, and * is a copy of . * * Returns: on success. * * Throws: if contains nonalphabetic characters. * on allocation failure. */ int esl_rsq_CShuffleDP(ESL_RANDOMNESS *r, const char *s, char *shuffled) { int status; /* Easel return status code */ int len; /* length of s */ int pos; /* a position in s or shuffled */ int x,y; /* indices of two characters */ char **E = NULL; /* edge lists: E[0] is the edge list from vertex A */ int *nE = NULL; /* lengths of edge lists */ int *iE = NULL; /* positions in edge lists */ int n; /* tmp: remaining length of an edge list to be shuffled */ char sf; /* last character in shuffled */ char Z[26]; /* connectivity in last edge graph Z */ int keep_connecting; /* flag used in Z connectivity algorithm */ int is_eulerian; /* flag used for when we've got a good Z */ /* First, verify that the string is entirely alphabetic. */ len = strlen(s); for (pos = 0; pos < len; pos++) if (! isalpha((int) s[pos])) ESL_EXCEPTION(eslEINVAL, "String contains nonalphabetic characters"); /* The edge case of len <= 2 */ if (len <= 2) { if (s != shuffled) strcpy(shuffled, s); return eslOK; } /* Allocations. */ ESL_ALLOC(E, sizeof(char *) * 26); for (x = 0; x < 26; x++) E[x] = NULL; ESL_ALLOC(nE, sizeof(int) * 26); for (x = 0; x < 26; x++) nE[x] = 0; ESL_ALLOC(iE, sizeof(int) * 26); for (x = 0; x < 26; x++) iE[x] = 0; for (x = 0; x < 26; x++) ESL_ALLOC(E[x], sizeof(char) * (len-1)); /* "(1) Construct the doublet graph G and edge ordering E * corresponding to S." * * Note that these also imply the graph G; and note, * for any list x with nE[x] = 0, vertex x is not part * of G. */ x = toupper((int) s[0]) - 'A'; for (pos = 1; pos < len; pos++) { y = toupper((int) s[pos]) - 'A'; E[x][nE[x]] = y; nE[x]++; x = y; } /* Now we have to find a random Eulerian edge ordering. */ sf = toupper((int) s[len-1]) - 'A'; is_eulerian = 0; while (! is_eulerian) { /* "(2) For each vertex s in G except s_f, randomly select * one edge from the s edge list of E(S) to be the * last edge of the s list in a new edge ordering." * * select random edges and move them to the end of each * edge list. */ for (x = 0; x < 26; x++) { if (nE[x] == 0 || x == sf) continue; pos = esl_rnd_Roll(r, nE[x]); ESL_SWAP(E[x][pos], E[x][nE[x]-1], char); } /* "(3) From this last set of edges, construct the last-edge * graph Z and determine whether or not all of its * vertices are connected to s_f." * * a probably stupid algorithm for looking at the * connectivity in Z: iteratively sweep through the * edges in Z, and build up an array (confusing called Z[x]) * whose elements are 1 if x is connected to sf, else 0. */ for (x = 0; x < 26; x++) Z[x] = 0; Z[(int) sf] = keep_connecting = 1; while (keep_connecting) { keep_connecting = 0; for (x = 0; x < 26; x++) { if (nE[x] == 0) continue; y = E[x][nE[x]-1]; /* xy is an edge in Z */ if (Z[x] == 0 && Z[y] == 1) { /* x is connected to sf in Z */ Z[x] = 1; keep_connecting = 1; } } } /* if any vertex in Z is tagged with a 0, it's * not connected to sf, and we won't have a Eulerian * walk. */ is_eulerian = 1; for (x = 0; x < 26; x++) { if (nE[x] == 0 || x == sf) continue; if (Z[x] == 0) { is_eulerian = 0; break; } } /* "(4) If any vertex is not connected in Z to s_f, the * new edge ordering will not be Eulerian, so return to * (2). If all vertices are connected in Z to s_f, * the new edge ordering will be Eulerian, so * continue to (5)." * * e.g. note infinite loop while is_eulerian is FALSE. */ } /* "(5) For each vertex s in G, randomly permute the remaining * edges of the s edge list of E(S) to generate the s * edge list of the new edge ordering E(S')." * * Essentially a StrShuffle() on the remaining nE[x]-1 elements * of each edge list; unfortunately our edge lists are arrays, * not strings, so we can't just call out to StrShuffle(). */ for (x = 0; x < 26; x++) for (n = nE[x] - 1; n > 1; n--) { pos = esl_rnd_Roll(r, n); ESL_SWAP(E[x][pos], E[x][n-1], char); } /* "(6) Construct sequence S', a random DP permutation of * S, from E(S') as follows. Start at the s_1 edge list. * At each s_i edge list, add s_i to S', delete the * first edge s_i,s_j of the edge list, and move to * the s_j edge list. Continue this process until * all edge lists are exhausted." */ pos = 0; x = toupper((int) s[0]) - 'A'; while (1) { shuffled[pos++] = 'A'+ x; /* add s_i to S' */ y = E[x][iE[x]]; iE[x]++; /* "delete" s_i,s_j from edge list */ x = y; /* move to s_j edge list. */ if (iE[x] == nE[x]) break; /* the edge list is exhausted. */ } shuffled[pos++] = 'A' + sf; shuffled[pos] = '\0'; /* Reality checks. */ if (x != sf) ESL_XEXCEPTION(eslEINCONCEIVABLE, "hey, you didn't end on s_f."); if (pos != len) ESL_XEXCEPTION(eslEINCONCEIVABLE, "hey, pos (%d) != len (%d).", pos, len); /* Free and return. */ esl_Free2D((void **) E, 26); free(nE); free(iE); return eslOK; ERROR: esl_Free2D((void **) E, 26); if (nE != NULL) free(nE); if (iE != NULL) free(iE); return status; } /* Function: esl_rsq_CShuffleKmers() * Synopsis: Shuffle k-mers in a text sequence. * Incept: SRE, Tue Nov 17 16:55:57 2009 [NHGRI retreat, Gettysburg] * * Purpose: Consider a text sequence as a string of nonoverlapping * k-mers of length . Shuffle the k-mers, given a random * number generator . Put the shuffled sequence in * . * * If the length of is not evenly divisible by , the * remaining residues are left (unshuffled) as a prefix to * the shuffled k-mers. * * For example, shuffling ABCDEFGHIJK as k=3-mers might * result in ABFIJKFGHCDE. * * Caller provides allocated storage for , * for at least the same length as . * * may also point to the same storage as , * in which case is shuffled in place. * * There is almost no formally justifiable reason why you'd * use this shuffle -- it's not like it preserves any * particularly well-defined statistical properties of the * sequence -- but it's a quick and dirty way to sort of * maybe possibly preserve some higher-than-monomer * statistics. * * Args: r - an random generator * s - sequence to shuffle * K - size of k-mers to break into * shuffled - RESULT: the shuffled sequence * * Returns: on success. * * Throws: on allocation error. */ int esl_rsq_CShuffleKmers(ESL_RANDOMNESS *r, const char *s, int K, char *shuffled) { int L = strlen(s); int W = L / K; /* number of kmers "words" excluding leftover prefix */ int P = L % K; /* leftover residues in prefix */ int i; char *swap = NULL; int status; if (shuffled != s) strcpy(shuffled, s); ESL_ALLOC(swap, sizeof(char) * K); while (W > 1) { /* use memmove, not strncpy or memcpy, because i==W-1 creates an overlap case */ i = esl_rnd_Roll(r, W); /* pick a word */ memmove(swap, shuffled + P + i*K, K * sizeof(char)); /* copy it to tmp space */ memmove(shuffled + P + i*K, shuffled + P + (W-1)*K, K * sizeof(char)); /* move word W-1 to i */ memmove(shuffled + P + (W-1)*K, swap, K * sizeof(char)); /* move word i to W-1 */ W--; } free(swap); return eslOK; ERROR: free(swap); return status; } /* Function: esl_rsq_CReverse() * Synopsis: Reverse a string. * Incept: SRE, Sat Feb 24 10:06:34 2007 [Casa de Gatos] * * Purpose: Returns a reversed version of in . * * There are no restrictions on the symbols that * might contain. * * Caller provides storage in for at least * <(strlen(s)+1)*sizeof(char)>. * * and can point to the same storage, in which * case is reversed in place. * * Returns: on success. */ int esl_rsq_CReverse(const char *s, char *rev) { int L, i; char c; L = strlen(s); for (i = 0; i < L/2; i++) { /* swap ends */ c = s[L-i-1]; rev[L-i-1] = s[i]; rev[i] = c; } if (L%2) { rev[i] = s[i]; } /* don't forget middle residue in odd-length s */ rev[L] = '\0'; return eslOK; } /* Function: esl_rsq_CShuffleWindows() * Synopsis: Shuffle local windows of a text string. * Incept: SRE, Sat Feb 24 10:17:59 2007 [Casa de Gatos] * * Purpose: Given string , shuffle residues in nonoverlapping * windows of width , and put the result in . * See [Pearson88]. * * and can be identical to shuffle in place. * * Caller provides storage in for at least * <(strlen(s)+1)*sizeof(char)>. * * Args: s - string to shuffle in windows * w - window size (typically 10 or 20) * shuffled - allocated space for window-shuffled result. * * Return: on success. */ int esl_rsq_CShuffleWindows(ESL_RANDOMNESS *r, const char *s, int w, char *shuffled) { int L; char c; int i, j, k; L = strlen(s); if (shuffled != s) strcpy(shuffled, s); for (i = 0; i < L; i += w) for (j = ESL_MIN(L-1, i+w-1); j > i; j--) { k = i + esl_rnd_Roll(r, j-i); c = shuffled[k]; /* semantics of a j,k swap, because we might be shuffling in-place */ shuffled[k] = shuffled[j]; shuffled[j] = c; } return eslOK; } /*------------------ end, shuffling sequences -------------------*/ /***************************************************************** *# 3. Randomizing sequences *****************************************************************/ /* Function: esl_rsq_CMarkov0() * Synopsis: Generate new text string of same 0th order Markov properties. * Incept: SRE, Sat Feb 24 08:47:43 2007 [Casa de Gatos] * * Purpose: Makes a random string with the same length and * 0-th order Markov properties as , given randomness * source . * * and can be point to the same storage, in which * case is randomized in place, destroying the original * string. * * must consist only of alphabetic characters [a-zA-Z]. * Statistics are collected case-insensitively over 26 possible * residues. The random string is generated all upper case. * * Args: s - input string * markoved - randomly generated string * (storage allocated by caller, at least strlen(s)+1) * * Returns: on success. * * Throws: if contains nonalphabetic characters. */ int esl_rsq_CMarkov0(ESL_RANDOMNESS *r, const char *s, char *markoved) { int L; int i; double p[26]; /* initially counts, then probabilities */ int x; /* First, verify that the string is entirely alphabetic. */ L = strlen(s); for (i = 0; i < L; i++) if (! isalpha((int) s[i])) ESL_EXCEPTION(eslEINVAL, "String contains nonalphabetic characters"); /* Collect zeroth order counts and convert to frequencies. */ for (x = 0; x < 26; x++) p[x] = 0.; for (i = 0; i < L; i++) p[(int)(toupper((int) s[i]) - 'A')] += 1.0; if (L > 0) for (x = 0; x < 26; x++) p[x] /= (double) L; /* Generate a random string using those p's. */ for (i = 0; i < L; i++) markoved[i] = esl_rnd_DChoose(r, p, 26) + 'A'; markoved[i] = '\0'; return eslOK; } /* Function: esl_rsq_CMarkov1() * Synopsis: Generate new text string of same 1st order Markov properties. * Incept: SRE, Sat Feb 24 09:21:46 2007 [Casa de Gatos] * * Purpose: Makes a random string with the same length and * 1st order (di-residue) Markov properties as , given * randomness source . * * and can be point to the same storage, in which * case is randomized in place, destroying the original * string. * * must consist only of alphabetic characters [a-zA-Z]. * Statistics are collected case-insensitively over 26 possible * residues. The random string is generated all upper case. * * If is of length 2 or less, this is a no-op, and * is a copy of . * * Args: s - input string * markoved - new randomly generated string * (storage allocated by caller, at least strlen(s)+1) * * Returns: on success. * * Throws: if contains nonalphabetic characters. */ int esl_rsq_CMarkov1(ESL_RANDOMNESS *r, const char *s, char *markoved) { int L; int i; int x,y; int i0; /* initial symbol */ double p[26][26]; /* conditional probabilities p[x][y] = P(y | x) */ double p0[26]; /* marginal probabilities P(x), just for initial residue. */ /* First, verify that the string is entirely alphabetic. */ L = strlen(s); for (i = 0; i < L; i++) if (! isalpha((int) s[i])) ESL_EXCEPTION(eslEINVAL, "String contains nonalphabetic characters"); /* The edge case of len <= 2 */ if (L <= 2) { if (s != markoved) strcpy(markoved, s); return eslOK; } /* Collect first order counts and convert to frequencies. */ for (x = 0; x < 26; x++) for (y = 0; y < 26; y++) p[x][y] = 0.; i0 = x = toupper((int) s[0]) - 'A'; for (i = 1; i < L; i++) { y = toupper((int) s[i]) - 'A'; p[x][y] += 1.0; x = y; } p[x][i0] += 1.0; /* "circularized": avoids a bug; see markov1_bug utest */ for (x = 0; x < 26; x++) { p0[x] = 0.; for (y = 0; y < 26; y++) p0[x] += p[x][y]; /* now p0[x] = marginal counts of x, inclusive of 1st residue */ for (y = 0; y < 26; y++) p[x][y] = (p0[x] > 0. ? p[x][y] / p0[x] : 0.); /* now p[x][y] = P(y | x) */ p0[x] /= (double) L; /* now p0[x] = marginal P(x) */ } /* Generate a random string using those p's. */ x = esl_rnd_DChoose(r, p0, 26); markoved[0] = x + 'A'; for (i = 1; i < L; i++) { y = esl_rnd_DChoose(r, p[x], 26); markoved[i] = y + 'A'; x = y; } markoved[L] = '\0'; return eslOK; } /*----------------- end, randomizing sequences ------------------*/ /***************************************************************** *# 4. Generating iid sequences (digital mode). *****************************************************************/ #ifdef eslAUGMENT_ALPHABET /* Function: esl_rsq_xIID() * Synopsis: Generate an iid random digital sequence. * Incept: SRE, Sat Feb 17 16:39:01 2007 [Casa de Gatos] * * Purpose: Generate an i.i.d. digital sequence of length (1..L) and * leave it in . The i.i.d. probability of each residue is * given in the probability vector

, and the number of * possible residues (the alphabet size) is given by . * (Only the alphabet size is needed here, as opposed to * a digital , but the caller presumably * has a digital alphabet.) The caller must provide a * allocated for at least residues of type , * room for residues and leading/trailing digital sentinel bytes. * * does the same, but for a * single-precision float vector

rather than a * double-precision vector

. * * Args: r - ESL_RANDOMNESS object * p - probability distribution [0..n-1] * K - number of symbols in alphabet * L - length of generated sequence * ret_s - RETURN: the generated sequence. * (Caller-allocated, >= (L+2)*ESL_DSQ) * * Return: on success. */ int esl_rsq_xIID(ESL_RANDOMNESS *r, const double *p, int K, int L, ESL_DSQ *dsq) { int x; dsq[0] = dsq[L+1] = eslDSQ_SENTINEL; for (x = 1; x <= L; x++) dsq[x] = esl_rnd_DChoose(r,p,K); return eslOK; } int esl_rsq_xfIID(ESL_RANDOMNESS *r, const float *p, int K, int L, ESL_DSQ *dsq) { int x; dsq[0] = dsq[L+1] = eslDSQ_SENTINEL; for (x = 1; x <= L; x++) dsq[x] = esl_rnd_FChoose(r,p,K); return eslOK; } #endif /*eslAUGMENT_ALPHABET*/ /*--------------------- end, digital generation ---------------- */ /***************************************************************** *# 5. Shuffling sequences (digital mode) *****************************************************************/ #ifdef eslAUGMENT_ALPHABET /* Function: esl_rsq_XShuffle() * Synopsis: Shuffle a digital sequence. * Incept: SRE, Fri Feb 23 08:24:20 2007 [Casa de Gatos] * * Purpose: Given a digital sequence of length residues, * shuffle it, and leave the shuffled version in . * * Caller provides allocated storage for for at * least the same length as . * * may also point to the same storage as , * in which case is shuffled in place. * * Returns: on success. */ int esl_rsq_XShuffle(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, ESL_DSQ *shuffled) { int i; ESL_DSQ x; if (dsq != shuffled) esl_abc_dsqcpy(dsq, L, shuffled); while (L > 1) { i = 1 + esl_rnd_Roll(r, L); x = shuffled[i]; shuffled[i] = shuffled[L]; shuffled[L] = x; L--; } return eslOK; } /* Function: esl_rsq_XShuffleDP() * Synopsis: Shuffle a digital sequence, preserving diresidue composition. * Incept: SRE, Fri Feb 23 09:23:47 2007 [Casa de Gatos] * * Purpose: Same as , except for a digital * sequence of length , encoded in a digital alphabet * of residues. * * may only consist of residue codes <0..K-1>; if it * contains gaps, degeneracies, or missing data, pass the alphabet's * size, not its canonical . * * If $\leq 2$, this is a no-op; is a copy of . * * Returns: on success. * * Throws: if contains digital residue codes * outside the range <0..K-1>. * on allocation failure. */ int esl_rsq_XShuffleDP(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *shuffled) { int status; /* Easel return status code */ int i; /* a position in dsq or shuffled */ ESL_DSQ x,y; /* indices of two characters */ ESL_DSQ **E = NULL; /* edge lists: E[0] is the edge list from vertex A */ int *nE = NULL; /* lengths of edge lists */ int *iE = NULL; /* positions in edge lists */ int n; /* tmp: remaining length of an edge list to be shuffled */ ESL_DSQ sf; /* last character in shuffled */ ESL_DSQ *Z; /* connectivity in last edge graph Z */ int keep_connecting; /* flag used in Z connectivity algorithm */ int is_eulerian; /* flag used for when we've got a good Z */ /* First, verify that we can deal with all the residues in dsq. */ for (i = 1; i <= L; i++) if (dsq[i] >= K) ESL_EXCEPTION(eslEINVAL, "dsq contains unexpected residue codes"); /* The edge case of L <= 2 */ if (L <= 2) { if (dsq != shuffled) memcpy(shuffled, dsq, sizeof(ESL_DSQ) * (L+2)); return eslOK; } /* Allocations. */ ESL_ALLOC(nE, sizeof(int) * K); for (x = 0; x < K; x++) nE[x] = 0; ESL_ALLOC(E, sizeof(ESL_DSQ *) * K); for (x = 0; x < K; x++) E[x] = NULL; ESL_ALLOC(iE, sizeof(int) * K); for (x = 0; x < K; x++) iE[x] = 0; ESL_ALLOC(Z, sizeof(ESL_DSQ) * K); for (x = 0; x < K; x++) ESL_ALLOC(E[x], sizeof(ESL_DSQ) * (L-1)); /* "(1) Construct the doublet graph G and edge ordering E... */ x = dsq[1]; for (i = 2; i <= L; i++) { E[x][nE[x]] = dsq[i]; nE[x]++; x = dsq[i]; } /* Now we have to find a random Eulerian edge ordering. */ sf = dsq[L]; is_eulerian = 0; while (! is_eulerian) { for (x = 0; x < K; x++) { if (nE[x] == 0 || x == sf) continue; i = esl_rnd_Roll(r, nE[x]); ESL_SWAP(E[x][i], E[x][nE[x]-1], ESL_DSQ); } for (x = 0; x < K; x++) Z[x] = 0; Z[(int) sf] = keep_connecting = 1; while (keep_connecting) { keep_connecting = 0; for (x = 0; x < K; x++) { if (nE[x] == 0) continue; y = E[x][nE[x]-1]; /* xy is an edge in Z */ if (Z[x] == 0 && Z[y] == 1) { /* x is connected to sf in Z */ Z[x] = 1; keep_connecting = 1; } } } is_eulerian = 1; for (x = 0; x < K; x++) { if (nE[x] == 0 || x == sf) continue; if (Z[x] == 0) { is_eulerian = 0; break; } } } /* "(5) For each vertex s in G, randomly permute... */ for (x = 0; x < K; x++) for (n = nE[x] - 1; n > 1; n--) { i = esl_rnd_Roll(r, n); ESL_SWAP(E[x][i], E[x][n-1], ESL_DSQ); } /* "(6) Construct sequence S'... */ i = 1; x = dsq[1]; while (1) { shuffled[i++] = x; y = E[x][iE[x]++]; x = y; if (iE[x] == nE[x]) break; } shuffled[i++] = sf; shuffled[i] = eslDSQ_SENTINEL; shuffled[0] = eslDSQ_SENTINEL; /* Reality checks. */ if (x != sf) ESL_XEXCEPTION(eslEINCONCEIVABLE, "hey, you didn't end on s_f."); if (i != L+1) ESL_XEXCEPTION(eslEINCONCEIVABLE, "hey, i (%d) overran L+1 (%d).", i, L+1); esl_Free2D((void **) E, K); free(nE); free(iE); free(Z); return eslOK; ERROR: esl_Free2D((void **) E, K); if (nE != NULL) free(nE); if (iE != NULL) free(iE); if (Z != NULL) free(Z); return status; } /* Function: esl_rsq_XShuffleKmers() * Synopsis: Shuffle k-mers in a digital sequence. * * Purpose: Same as , but shuffle digital * sequence of length into digital result . * * Args: r - an random generator * dsq - sequence to shuffle * K - size of k-mers to break into * shuffled - RESULT: the shuffled sequence * * Returns: on success. * * Throws: on allocation error. */ int esl_rsq_XShuffleKmers(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *shuffled) { int W = L / K; /* number of kmers "words" excluding leftover prefix */ int P = L % K; /* leftover residues in prefix */ int i; char *swap = NULL; int status; if (shuffled != dsq) esl_abc_dsqcpy(dsq, L, shuffled); ESL_ALLOC(swap, sizeof(char) * K); while (W > 1) { /* use memmove, not memcpy, because i==W-1 is an overlap case */ i = esl_rnd_Roll(r, W); /* pick a word */ memmove(swap, shuffled + P + i*K, K * sizeof(char)); /* copy it to tmp space */ memmove(shuffled + P + i*K, shuffled + P + (W-1)*K, K * sizeof(char)); /* move word W-1 to i */ memmove(shuffled + P + (W-1)*K, swap, K * sizeof(char)); /* move word i to W-1 */ W--; } free(swap); return eslOK; ERROR: free(swap); return status; } /* Function: esl_rsq_XReverse() * Synopsis: Reverse a digital sequence. * Incept: SRE, Sat Feb 24 10:13:30 2007 [Casa de Gatos] * * Purpose: Given a digital sequence of length , return * reversed version of it in . * * Caller provides storage in for at least * <(L+2)*sizeof(ESL_DSQ)>. * * and can point to the same storage, in which * case is reversed in place. * * Returns: on success. */ int esl_rsq_XReverse(const ESL_DSQ *dsq, int L, ESL_DSQ *rev) { int i; ESL_DSQ x; for (i = 1; i <= L/2; i++) { /* swap ends */ x = dsq[L-i+1]; rev[L-i+1] = dsq[i]; rev[i] = x; } if (L%2) { rev[i] = dsq[i]; } /* don't forget middle residue in odd-length dsq */ rev[0] = eslDSQ_SENTINEL; rev[L+1] = eslDSQ_SENTINEL; return eslOK; } /* Function: esl_rsq_XShuffleWindows() * Synopsis: Shuffle local windows of a digital sequence. * Incept: SRE, Sat Feb 24 10:51:31 2007 [Casa de Gatos] * * Purpose: Given a digital sequence of length , shuffle * residues in nonoverlapping windows of width , and put * the result in . See [Pearson88]. * * Caller provides storage in for at least * <(L+2)*sizeof(ESL_DSQ)>. * * and can be identical to shuffle in place. * * Args: dsq - digital sequence to shuffle in windows * L - length of * w - window size (typically 10 or 20) * shuffled - allocated space for window-shuffled result. * * Return: on success. */ int esl_rsq_XShuffleWindows(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int w, ESL_DSQ *shuffled) { ESL_DSQ x; int i, j, k; if (dsq != shuffled) esl_abc_dsqcpy(dsq, L, shuffled); for (i = 1; i <= L; i += w) for (j = ESL_MIN(L, i+w-1); j > i; j--) { k = i + esl_rnd_Roll(r, j-i+1); x = shuffled[k]; /* semantics of a j,k swap, because we might be shuffling in-place */ shuffled[k] = shuffled[j]; shuffled[j] = x; } return eslOK; } #endif /*eslAUGMENT_ALPHABET*/ /*------------------- end, digital shuffling -------------------*/ /***************************************************************** *# 6. Randomizing sequences (digital mode) *****************************************************************/ #ifdef eslAUGMENT_ALPHABET /* Function: esl_rsq_XMarkov0() * Synopsis: Generate new digital sequence of same 0th order Markov properties. * Incept: SRE, Sat Feb 24 09:12:32 2007 [Casa de Gatos] * * Purpose: Same as , except for a digital * sequence of length , encoded in a digital * alphabet of residues; caller provides storage * for the randomized sequence for at least * residues, including the two flanking * sentinel bytes. * * therefore may only consist of residue codes * in the range <0..K-1>. If it contains gaps, * degeneracies, or missing data, pass the alphabet's * size, not its canonical . * * Returns: on success. * * Throws: if contains digital residue codes outside * the range <0..K-1>. * on allocation failure. */ int esl_rsq_XMarkov0(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *markoved) { int status; int i; double *p = NULL; /* initially counts, then probabilities */ int x; /* First, verify that the string is entirely alphabetic. */ for (i = 1; i <= L; i++) if (dsq[i] >= K) ESL_XEXCEPTION(eslEINVAL, "String contains unexpected residue codes"); ESL_ALLOC(p, sizeof(double) * K); for (x = 0; x < K; x++) p[x] = 0.; for (i = 1; i <= L; i++) p[(int) dsq[i]] += 1.0; if (L > 0) for (x = 0; x < K; x++) p[x] /= (double) L; for (i = 1; i <= L; i++) markoved[i] = esl_rnd_DChoose(r, p, K); markoved[0] = eslDSQ_SENTINEL; markoved[L+1] = eslDSQ_SENTINEL; free(p); return eslOK; ERROR: if (p != NULL) free(p); return status; } /* Function: esl_rsq_XMarkov1() * Synopsis: Generate new digital sequence of same 1st order Markov properties. * Incept: SRE, Sat Feb 24 09:46:09 2007 [Casa de Gatos] * * Purpose: Same as , except for a digital * sequence of length , encoded in a digital * alphabet of residues. Caller provides storage * for the randomized sequence for at least * residues, including the two flanking * sentinel bytes. * * and can be point to the same storage, in which * case is randomized in place, destroying the original * string. * * therefore may only consist of residue codes * in the range <0..K-1>. If it contains gaps, * degeneracies, or missing data, pass the alphabet's * size, not its canonical . * * If $\leq 2$, this is a no-op; is a copy of . * * Args: dsq - input digital sequence 1..L * L - length of dsq * K - residue codes in dsq are in range 0..K-1 * markoved - new randomly generated digital sequence; * storage allocated by caller, at least (L+2)*ESL_DSQ; * may be same as dsq to randomize in place. * * Returns: on success. * * Throws: if contains digital residue codes outside * the range <0..K-1>. * on allocation failure. */ int esl_rsq_XMarkov1(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *markoved) { int status; int i; ESL_DSQ x,y; ESL_DSQ i0; /* initial symbol */ double **p; /* conditional probabilities p[x][y] = P(y | x) */ double *p0; /* marginal probabilities P(x), just for initial residue. */ /* validate the input string */ for (i = 1; i <= L; i++) if (dsq[i] >= K) ESL_XEXCEPTION(eslEINVAL, "String contains unexpected residue codes"); /* The edge case of L <= 2 */ if (L <= 2) { if (dsq != markoved) memcpy(markoved, dsq, sizeof(ESL_DSQ) * (L+2)); return eslOK; } /* allocations */ ESL_ALLOC(p0, sizeof(double) * K); for (x = 0; x < K; x++) p0[x] = 0.; ESL_ALLOC(p, sizeof(double *) * K); for (x = 0; x < K; x++) p[x] = NULL; for (x = 0; x < K; x++) { ESL_ALLOC(p[x], sizeof(double) * K); for (y = 0; y < K; y++) p[x][y] = 0.; } /* Collect first order counts and convert to frequencies. */ i0 = x = dsq[1]; for (i = 2; i <= L; i++) { y = dsq[i]; p[x][y] += 1.0; x = y; } p[x][i0] += 1.0; /* "circularized": avoids a bug; see markov1_bug utest */ for (x = 0; x < K; x++) { p0[x] = 0.; for (y = 0; y < K; y++) p0[x] += p[x][y]; /* now p0[x] = marginal counts of x, inclusive of 1st residue */ for (y = 0; y < K; y++) p[x][y] = (p0[x] > 0. ? p[x][y] / p0[x] : 0.); /* now p[x][y] = P(y | x) */ p0[x] /= (double) L; /* now p0[x] = marginal P(x) inclusive of 1st residue */ } /* Generate a random string using those p's. */ markoved[1] = esl_rnd_DChoose(r, p0, K); for (i = 2; i <= L; i++) markoved[i] = esl_rnd_DChoose(r, p[markoved[i-1]], K); markoved[0] = eslDSQ_SENTINEL; markoved[L+1] = eslDSQ_SENTINEL; esl_Free2D((void**)p, K); free(p0); return eslOK; ERROR: esl_Free2D((void**)p, K); if (p0 != NULL) free(p0); return status; } #endif /*eslAUGMENT_ALPHABET*/ /*------------------ end, digital randomizing -------------------*/ /***************************************************************** * 7. Statistics driver. *****************************************************************/ /* This driver tests (and confirms) the intuition that using * a DP shuffle on short sequences may be a bad idea; short sequences * don't shuffle effectively. * xref J3/20. */ #ifdef eslRANDOMSEQ_STATS /* gcc -g -Wall -o randomseq_stats -L. -I. -DeslRANDOMSEQ_STATS esl_randomseq.c -leasel -lm */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_distance.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stats.h" #include "esl_vectorops.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-d", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "diresidue shuffle", 0 }, { "-R", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "reverse the sequence", 0 }, { "-2", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "resample an independent sequence", 0 }, { "-N", eslARG_INT, "10000", NULL, NULL, NULL, NULL, NULL, "number of sampled sequences per length", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "--minL", eslARG_INT, "5", NULL, NULL, NULL, NULL, NULL, "xaxis minimum L", 0 }, { "--maxL", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "xaxis maximum L", 0 }, { "--stepL", eslARG_INT, "5", NULL, NULL, NULL, NULL, NULL, "xaxis step size", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "stats driver for randomseq module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_Create(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); int N = esl_opt_GetInteger(go, "-N"); int minL = esl_opt_GetInteger(go, "--minL"); int maxL = esl_opt_GetInteger(go, "--maxL"); int stepL = esl_opt_GetInteger(go, "--stepL"); ESL_DSQ *dsq1 = malloc(sizeof(ESL_DSQ) * (maxL+2)); ESL_DSQ *dsq2 = malloc(sizeof(ESL_DSQ) * (maxL+2)); double *fq = malloc(sizeof(double) * abc->K); double *pid = malloc(sizeof(double) * N); double mean, var; int L; int i; esl_vec_DSet(fq, abc->K, 1.0 / (double) abc->K ); for (L = minL; L <= maxL; L += stepL) { for (i = 0; i < N; i++) { esl_rsq_xIID(r, fq, abc->K, L, dsq1); if (esl_opt_GetBoolean(go, "-d")) esl_rsq_XShuffleDP(r, dsq1, L, abc->K, dsq2); else if (esl_opt_GetBoolean(go, "-R")) esl_rsq_XReverse(dsq1, L, dsq2); else if (esl_opt_GetBoolean(go, "-2")) esl_rsq_xIID(r, fq, abc->K, L, dsq2); else esl_rsq_XShuffle(r, dsq1, L, dsq2); esl_dst_XPairId(abc, dsq1, dsq2, &(pid[i]), NULL, NULL); } esl_stats_DMean(pid, N, &mean, &var); printf("%-6d %.4f %.4f\n", L, mean, sqrt(var)); } printf("&\n"); free(pid); free(fq); free(dsq2); free(dsq1); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*eslRANDOMSEQ_STATS*/ /*-------------- end, statistics driver -------------------------*/ /***************************************************************** * 8. Unit tests. *****************************************************************/ #ifdef eslRANDOMSEQ_TESTDRIVE #include "esl_dirichlet.h" #include "esl_vectorops.h" /* count c(x) monoresidue and c(xy) diresidue composition * used for sequence shuffling unit tests * mono, di allocated by caller for 26 and 26x26, respectively. */ static int composition(char *s, int L, int *mono, int **di) { int i, x, y; for (x = 0; x < 26; x++) { mono[x] = 0; for (y = 0; y < 26; y++) di[x][y] = 0; } for (i = 0; s[i] != '\0'; i++) { if (!isalpha(s[i])) esl_fatal("bad residue %d", i); y = toupper(s[i]) - 'A'; mono[y]++; if (i > 0) { x = toupper(s[i-1] - 'A'); di[x][y]++; } } if (i != L) esl_fatal("sequence length didn't match expected %d", L); return eslOK; } /* same, but for digital seq., with alphabet size K */ static int xcomposition(ESL_DSQ *dsq, int L, int K, int *mono, int **di) { int i, x, y; for (x = 0; x < K; x++) { mono[x] = 0; for (y = 0; y < K; y++) di[x][y] = 0; } for (i = 1; dsq[i] != eslDSQ_SENTINEL; i++) { if (dsq[i] > K) esl_fatal("bad residue %d", i); if (i > 1) di[(int) dsq[i-1]][(int) dsq[i]]++; mono[(int) dsq[i]]++; } if (i != L+1) esl_fatal("sequence length didn't match expected %d", L); return eslOK; } static int composition_allocate(int K, int **ret_mono, int ***ret_di) { int status; int *mono = NULL; int **di = NULL; int x; ESL_ALLOC(mono, sizeof(int) * K); ESL_ALLOC(di, sizeof(int *) * K); for (x = 0; x < K; x++) di[x] = NULL; for (x = 0; x < K; x++) ESL_ALLOC(di[x], sizeof(int) * K); *ret_mono = mono; *ret_di = di; return eslOK; ERROR: esl_Free2D((void **) di, K); if (mono != NULL) free(mono); *ret_mono = NULL; *ret_di = NULL; return status; } /* compare compositions before/after. * either mono (m1,m2) or di (d1,d2) may be NULL, to compare only the other one */ static int composition_compare(int *m1, int **di1, int *m2, int **di2, int K) { int x,y; for (x = 0; x < K; x++) { if (m1 != NULL && m1[x] != m2[x]) return eslFAIL; if (di1 != NULL) for (y = 0; y < K; y++) if (di1[x][y] != di2[x][y]) return eslFAIL; } return eslOK; } /* Unit tests for: * esl_rsq_CShuffle() * esl_rsq_CShuffleDP() * esl_rsq_CShuffleWindows() * esl_rsq_CReverse() * * All of these exactly preserve residue composition, which is * the basis of the unit tests. */ static void utest_CShufflers(ESL_RANDOMNESS *r, int L, char *alphabet, int K) { char *logmsg = "Failure in one of the CShuffle* unit tests"; int status; char *s = NULL; char *s2 = NULL; int *m1 = NULL, *m2 = NULL; /* mono, before and after */ int **di1 = NULL, **di2 = NULL; /* di, before and after */ double *p; int w = 12; /* window width for CShuffleWindows() */ /* allocations */ ESL_ALLOC(s, sizeof(char) * (L+1)); ESL_ALLOC(s2, sizeof(char) * (L+1)); ESL_ALLOC(p, sizeof(double) * K); if (composition_allocate(26, &m1, &di1) != eslOK) esl_fatal(logmsg); if (composition_allocate(26, &m2, &di2) != eslOK) esl_fatal(logmsg); /* generate the string we'll start shuffling */ if (esl_dirichlet_DSampleUniform(r, K, p) != eslOK) esl_fatal(logmsg); if (esl_rsq_IID(r, alphabet, p, K, L, s) != eslOK) esl_fatal(logmsg); /* esl_rsq_CShuffle: mono composition should stay exactly the same, di may change */ memset(s2, 0, (L+1)*sizeof(char)); if (composition(s, L, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_CShuffle(r, s, s2) != eslOK) esl_fatal(logmsg); if (composition(s2, L, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, NULL, m2, NULL, 26) != eslOK) esl_fatal(logmsg); if (strcmp(s2, s) == 0) esl_fatal(logmsg); /* esl_rsq_CShuffle, in place */ strcpy(s, s2); if (composition(s2, L, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_CShuffle(r, s2, s2) != eslOK) esl_fatal(logmsg); if (composition(s2, L, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, NULL, m2, NULL, 26) != eslOK) esl_fatal(logmsg); if (strcmp(s2, s) == 0) esl_fatal(logmsg); /* esl_rsq_CShuffleDP: mono and di compositions stay exactly the same */ memset(s2, 0, (L+1)*sizeof(char)); if (composition(s, L, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_CShuffleDP(r, s, s2) != eslOK) esl_fatal(logmsg); if (composition(s2, L, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, di1, m2, di2, 26) != eslOK) esl_fatal(logmsg); if (strcmp(s2, s) == 0) esl_fatal(logmsg); /* esl_rsq_CShuffleDP, in place */ strcpy(s, s2); if (composition(s2, L, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_CShuffleDP(r, s2, s2) != eslOK) esl_fatal(logmsg); if (composition(s2, L, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, di1, m2, di2, 26) != eslOK) esl_fatal(logmsg); if (strcmp(s2, s) == 0) esl_fatal(logmsg); /* esl_rsq_CShuffleKmers: mono composition stays the same */ memset(s2, 0, (L+1)*sizeof(char)); if (composition(s, L, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_CShuffleKmers(r, s, 3, s2) != eslOK) esl_fatal(logmsg); if (composition(s2, L, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, NULL, m2, NULL, 26) != eslOK) esl_fatal(logmsg); if (strcmp(s2, s) == 0) esl_fatal(logmsg); /* esl_rsq_CShuffleKmers, in place */ strcpy(s, s2); if (composition(s2, L, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_CShuffleKmers(r, s2, 3, s2) != eslOK) esl_fatal(logmsg); if (composition(s2, L, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, NULL, m2, NULL, 26) != eslOK) esl_fatal(logmsg); if (strcmp(s2, s) == 0) esl_fatal(logmsg); /* esl_rsq_CShuffleWindows(): mono composition stays the same */ memset(s2, 0, (L+1)*sizeof(char)); if (composition(s, L, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_CShuffleWindows(r, s, w, s2) != eslOK) esl_fatal(logmsg); if (composition(s2, L, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, NULL, m2, NULL, 26) != eslOK) esl_fatal(logmsg); if (strcmp(s2, s) == 0) esl_fatal(logmsg); /* esl_rsq_CShuffleWindows(), in place */ strcpy(s, s2); if (composition(s2, L, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_CShuffleWindows(r, s2, w, s2) != eslOK) esl_fatal(logmsg); if (composition(s2, L, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, NULL, m2, NULL, 26) != eslOK) esl_fatal(logmsg); if (strcmp(s2, s) == 0) esl_fatal(logmsg); /* esl_rsq_CReverse(): two reverses (one in place) give the same seq back */ memset(s2, 0, (L+1)*sizeof(char)); if (composition(s, L, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_CReverse(s, s2) != eslOK) esl_fatal(logmsg); if (composition(s2, L, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, NULL, m2, NULL, 26) != eslOK) esl_fatal(logmsg); if (strcmp(s2, s) == 0) esl_fatal(logmsg); if (esl_rsq_CReverse(s2, s2) != eslOK) esl_fatal(logmsg); if (strcmp(s2, s) != 0) esl_fatal(logmsg); free(s); free(s2); free(p); free(m1); free(m2); esl_Free2D((void **) di1, 26); esl_Free2D((void **) di2, 26); return; ERROR: esl_fatal(logmsg); } /* Unit tests for: * esl_rsq_CMarkov0() * esl_rsq_CMarkov1() * * Testing these is less robust than the shufflers, because it's hard * to concoct deterministic tests. Instead the test is a weak one, * that zero probability events get zero counts. */ static void utest_CMarkovs(ESL_RANDOMNESS *r, int L, char *alphabet) { char *logmsg = "Failure in a CMarkov*() unit test"; int status; char *s = NULL; char *s2 = NULL; float *p = NULL; int K; int pzero; /* which 0..K-1 residue will have zero prob */ int zeroidx; /* index of pzero residue in 0..25 ASCII */ int *m1 = NULL, *m2 = NULL; /* mono, before and after */ int **di1 = NULL, **di2 = NULL; /* di, before and after */ int i,x; K = strlen(alphabet); ESL_ALLOC(p, sizeof(float) * K); ESL_ALLOC(s, sizeof(char) * (L+1)); ESL_ALLOC(s2, sizeof(char) * (L+1)); if (composition_allocate(26, &m1, &di1) != eslOK) esl_fatal(logmsg); if (composition_allocate(26, &m2, &di2) != eslOK) esl_fatal(logmsg); /* generate string with a random letter prob set to 0 */ pzero = esl_rnd_Roll(r, K); zeroidx = toupper(alphabet[pzero]) - 'A'; if (esl_dirichlet_FSampleUniform(r, K, p) != eslOK) esl_fatal(logmsg); p[pzero] = 0; esl_vec_FNorm(p, K); if (esl_rsq_fIID(r, alphabet, p, K, L, s) != eslOK) esl_fatal(logmsg); /* esl_rsq_CMarkov0() */ memset(s2, 0, (L+1)*sizeof(char)); if (composition(s, L, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_CMarkov0(r, s, s2) != eslOK) esl_fatal(logmsg); if (composition(s2, L, m2, di2) != eslOK) esl_fatal(logmsg); if (m1[zeroidx] != 0) esl_fatal(logmsg); if (m2[zeroidx] != 0) esl_fatal(logmsg); if (strcmp(s2, s) == 0) esl_fatal(logmsg); /* esl_rsq_CMarkov0(), in place */ strcpy(s, s2); if (esl_rsq_CMarkov0(r, s2, s2) != eslOK) esl_fatal(logmsg); if (composition(s2, L, m2, di2) != eslOK) esl_fatal(logmsg); if (m2[zeroidx] != 0) esl_fatal(logmsg); if (strcmp(s2, s) == 0) esl_fatal(logmsg); /* generate string with all homodiresidues set to 0 */ if (esl_dirichlet_FSampleUniform(r, K, p) != eslOK) esl_fatal(logmsg); do { if (esl_rsq_fIID(r, alphabet, p, K, L, s) != eslOK) esl_fatal(logmsg); for (i = 1; i < L; i++) if (s[i] == s[i-1]) /* this incantation will rotate letter forward in alphabet: */ s[i] = alphabet[(1+strchr(alphabet,s[i])-alphabet)%K]; } while (s[0] == s[L-1]); /* lazy: reject strings where circularization would count a homodimer */ /* esl_rsq_CMarkov1() */ memset(s2, 0, (L+1)*sizeof(char)); if (composition(s, L, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_CMarkov1(r, s, s2) != eslOK) esl_fatal(logmsg); if (composition(s2, L, m2, di2) != eslOK) esl_fatal(logmsg); for (x = 0; x < K; x++) { if (di1[x][x] != 0) esl_fatal(logmsg); if (di2[x][x] != 0) esl_fatal(logmsg); } if (strcmp(s2, s) == 0) esl_fatal(logmsg); /* esl_rsq_CMarkov1(), in place */ strcpy(s, s2); if (esl_rsq_CMarkov1(r, s2, s2) != eslOK) esl_fatal(logmsg); if (composition(s2, L, m2, di2) != eslOK) esl_fatal(logmsg); for (x = 0; x < K; x++) { if (di1[x][x] != 0) esl_fatal(logmsg); if (di2[x][x] != 0) esl_fatal(logmsg); } if (strcmp(s2, s) == 0) esl_fatal(logmsg); free(s); free(s2); free(p); free(m1); free(m2); esl_Free2D((void **) di1, 26); esl_Free2D((void **) di2, 26); return; ERROR: esl_fatal(logmsg); } /* Unit tests for: * esl_rsq_XShuffle() * esl_rsq_XShuffleDP() * esl_rsq_XShuffleWindows() * esl_rsq_XReverse() * Same ideas as testing the C* versions, adapted for digital sequences. */ static void utest_XShufflers(ESL_RANDOMNESS *r, int L, int K) { char *logmsg = "Failure in one of the XShuffle* unit tests"; int status; ESL_DSQ *dsq = NULL; ESL_DSQ *ds2 = NULL; int *m1 = NULL, *m2 = NULL; /* mono, before and after */ int **di1 = NULL, **di2 = NULL; /* di, before and after */ float *p = NULL; int w = 12; /* window width for XShuffleWindows() */ /* allocations */ ESL_ALLOC(dsq, sizeof(ESL_DSQ) * (L+2)); ESL_ALLOC(ds2, sizeof(ESL_DSQ) * (L+2)); ESL_ALLOC(p, sizeof(double) * K); if (composition_allocate(K, &m1, &di1) != eslOK) esl_fatal(logmsg); if (composition_allocate(K, &m2, &di2) != eslOK) esl_fatal(logmsg); /* generate the string we'll test shuffling on, keep its composition stats */ if (esl_dirichlet_FSampleUniform(r, K, p) != eslOK) esl_fatal(logmsg); if (esl_rsq_xfIID(r, p, K, L, dsq) != eslOK) esl_fatal(logmsg); /* esl_rsq_XShuffle: mono composition should stay exactly the same, di may change */ memset(ds2, eslDSQ_SENTINEL, (L+2)); if (xcomposition(dsq, L, K, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_XShuffle(r, dsq, L, ds2) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, NULL, m2, NULL, K) != eslOK) esl_fatal(logmsg); /* esl_rsq_XShuffle, in place */ if (esl_abc_dsqcpy(ds2, L, dsq) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_XShuffle(r, ds2, L, ds2) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, NULL, m2, NULL, K) != eslOK) esl_fatal(logmsg); /* esl_rsq_XShuffleDP: mono and di compositions stay exactly the same */ memset(ds2, eslDSQ_SENTINEL, (L+2)); if (xcomposition(dsq, L, K, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_XShuffleDP(r, dsq, L, K, ds2) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, di1, m2, di2, K) != eslOK) esl_fatal(logmsg); /* esl_rsq_XShuffleDP, in place */ if (esl_abc_dsqcpy(ds2, L, dsq) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_XShuffleDP(r, ds2, L, K, ds2) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, di1, m2, di2, K) != eslOK) esl_fatal(logmsg); /* esl_rsq_XShuffleKmers: mono compositions stay exactly the same */ memset(ds2, eslDSQ_SENTINEL, (L+2)); if (xcomposition(dsq, L, K, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_XShuffleKmers(r, dsq, L, 3, ds2) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, NULL, m2, NULL, K) != eslOK) esl_fatal(logmsg); /* esl_rsq_XShuffleKmers, in place */ if (esl_abc_dsqcpy(ds2, L, dsq) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_XShuffleKmers(r, ds2, L, 3, ds2) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, NULL, m2, NULL, K) != eslOK) esl_fatal(logmsg); /* esl_rsq_XShuffleWindows(): mono composition stays the same */ memset(ds2, eslDSQ_SENTINEL, (L+2)); if (xcomposition(dsq, L, K, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_XShuffleWindows(r, dsq, L, w, ds2) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, NULL, m2, NULL, K) != eslOK) esl_fatal(logmsg); /* esl_rsq_XShuffleWindows(), in place */ if (esl_abc_dsqcpy(ds2, L, dsq) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_XShuffleWindows(r, ds2, L, w, ds2) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, NULL, m2, NULL, K) != eslOK) esl_fatal(logmsg); /* esl_rsq_XReverse(): two reverses (one in place) give the same seq back */ memset(ds2, eslDSQ_SENTINEL, (L+2)); if (xcomposition(dsq, L, K, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_XReverse(dsq, L, ds2) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m2, di2) != eslOK) esl_fatal(logmsg); if (composition_compare(m1, NULL, m2, NULL, K) != eslOK) esl_fatal(logmsg); if (memcmp((void *) ds2, (void *) dsq, sizeof(ESL_DSQ)*(L+2)) == 0) esl_fatal(logmsg); if (esl_rsq_XReverse(ds2, L, ds2) != eslOK) esl_fatal(logmsg); if (memcmp((void *) ds2, (void *) dsq, sizeof(ESL_DSQ)*(L+2)) != 0) esl_fatal(logmsg); free(dsq); free(ds2); free(p); free(m1); free(m2); esl_Free2D((void **) di1, K); esl_Free2D((void **) di2, K); return; ERROR: esl_fatal(logmsg); } /* Unit tests for: * esl_rsq_XMarkov0() * esl_rsq_XMarkov1() * Same ideas as in the C* versions, but for digital sequences. */ static void utest_XMarkovs(ESL_RANDOMNESS *r, int L, int K) { char *logmsg = "Failure in an XMarkov*() unit test"; int status; ESL_DSQ *dsq = NULL; ESL_DSQ *ds2 = NULL; int *m1 = NULL, *m2 = NULL; /* mono, before and after */ int **di1 = NULL, **di2 = NULL; /* di, before and after */ float *p = NULL; int pzero; int i,x; /* allocations */ ESL_ALLOC(dsq, sizeof(ESL_DSQ) * (L+2)); ESL_ALLOC(ds2, sizeof(ESL_DSQ) * (L+2)); ESL_ALLOC(p, sizeof(double) * K); if (composition_allocate(K, &m1, &di1) != eslOK) esl_fatal(logmsg); if (composition_allocate(K, &m2, &di2) != eslOK) esl_fatal(logmsg); /* generate sequence with a random letter prob set to 0 */ pzero = esl_rnd_Roll(r, K); if (esl_dirichlet_FSampleUniform(r, K, p) != eslOK) esl_fatal(logmsg); p[pzero] = 0.; esl_vec_FNorm(p, K); if (esl_rsq_xfIID(r, p, K, L, dsq) != eslOK) esl_fatal(logmsg); /* esl_rsq_XMarkov0() */ memset(ds2, eslDSQ_SENTINEL, (L+2)*sizeof(ESL_DSQ)); if (xcomposition(dsq, L, K, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_XMarkov0(r, dsq, L, K, ds2) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m2, di2) != eslOK) esl_fatal(logmsg); if (m1[pzero] != 0) esl_fatal(logmsg); if (m2[pzero] != 0) esl_fatal(logmsg); if (memcmp(ds2, dsq, sizeof(ESL_DSQ)*(L+2)) == 0) esl_fatal(logmsg); /* esl_rsq_CMarkov0(), in place */ if (esl_abc_dsqcpy(ds2, L, dsq) != eslOK) esl_fatal(logmsg); if (esl_rsq_XMarkov0(r, ds2, L, K, ds2) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m2, di2) != eslOK) esl_fatal(logmsg); if (m2[pzero] != 0) esl_fatal(logmsg); if (memcmp(ds2, dsq, sizeof(ESL_DSQ)*(L+2)) == 0) esl_fatal(logmsg); /* generate string with all homodiresidues set to 0 */ if (esl_dirichlet_FSampleUniform(r, K, p) != eslOK) esl_fatal(logmsg); do { if (esl_rsq_xfIID(r, p, K, L, dsq) != eslOK) esl_fatal(logmsg); for (i = 2; i <= L; i++) if (dsq[i] == dsq[i-1]) /* this incantation will rotate letter forward in alphabet: */ dsq[i] = (dsq[i]+1)%K; } while (dsq[1] == dsq[L]); /* lazy. reject strings where circularization would count a homodimer */ /* esl_rsq_XMarkov1() */ memset(ds2, eslDSQ_SENTINEL, (L+2)*sizeof(ESL_DSQ)); if (xcomposition(dsq, L, K, m1, di1) != eslOK) esl_fatal(logmsg); if (esl_rsq_XMarkov1(r, dsq, L, K, ds2) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m2, di2) != eslOK) esl_fatal(logmsg); for (x = 0; x < K; x++) { if (di1[x][x] != 0) esl_fatal(logmsg); if (di2[x][x] != 0) esl_fatal(logmsg); } if (memcmp(ds2, dsq, sizeof(ESL_DSQ)*(L+2)) == 0) esl_fatal(logmsg); /* esl_rsq_XMarkov1(), in place */ if (esl_abc_dsqcpy(ds2, L, dsq) != eslOK) esl_fatal(logmsg); if (esl_rsq_XMarkov1(r, ds2, L, K, ds2) != eslOK) esl_fatal(logmsg); if (xcomposition(ds2, L, K, m2, di2) != eslOK) esl_fatal(logmsg); for (x = 0; x < K; x++) { if (di1[x][x] != 0) esl_fatal(logmsg); if (di2[x][x] != 0) esl_fatal(logmsg); } if (memcmp(ds2, dsq, sizeof(ESL_DSQ)*(L+2)) == 0) esl_fatal(logmsg); free(dsq); free(ds2); free(p); free(m1); free(m2); esl_Free2D((void **) di1, K); esl_Free2D((void **) di2, K); return; ERROR: esl_fatal(logmsg); } /* utest_markov1_bug() * * Given a sequence like AAAAAAAAAT, where a residue only occurs once * and at the end of the sequence, a bug can appear: a Markov chain * can transit to T, but can't leave. Easel handles this by * counting Markov statistics as if the input sequence were circular. */ static void utest_markov1_bug(ESL_RANDOMNESS *r) { char logmsg[] = "Failure in markov1_bug test (zero/absorbing transition)"; char testseq[] = "AAAAAAAAAT"; char *seq = NULL; ESL_DSQ testdsq[] = { eslDSQ_SENTINEL,0,0,0,0,0,0,0,0,0,3,eslDSQ_SENTINEL}; ESL_DSQ *dsq = NULL; int L = strlen(testseq); int *mono = NULL; int **di = NULL; int N = 100; int i; if ((seq = malloc(sizeof(char) * (L+1))) == NULL) esl_fatal(logmsg); if ((dsq = malloc(sizeof(ESL_DSQ) * (L+2))) == NULL) esl_fatal(logmsg); if (composition_allocate(4, &mono, &di) != eslOK) esl_fatal(logmsg); for (i = 0; i < N; i++) { if (esl_rsq_XMarkov1(r, testdsq, L, 4, dsq) != eslOK) esl_fatal(logmsg); if (xcomposition(testdsq, L, 4, mono, di) != eslOK) esl_fatal(logmsg); if (mono[0] + mono[3] != L) esl_fatal(logmsg); } esl_Free2D((void **) di, 4); free(mono); if (composition_allocate(26, &mono, &di) != eslOK) esl_fatal(logmsg); for (i = 0; i < N; i++) { if (esl_rsq_CMarkov1(r, testseq, seq) != eslOK) esl_fatal(logmsg); if (composition(seq, L, mono, di) != eslOK) esl_fatal(logmsg); if (mono[0] + mono['T'-'A'] != L) esl_fatal(logmsg); } esl_Free2D((void **) di, 26); free(mono); free(seq); free(dsq); } #endif /*eslRANDOMSEQ_TESTDRIVE*/ /*------------------ end, unit tests ----------------------------*/ /***************************************************************** * 9. Test driver. *****************************************************************/ #ifdef eslRANDOMSEQ_TESTDRIVE /* gcc -g -Wall -o randomseq_utest -L. -I. -DeslRANDOMSEQ_TESTDRIVE esl_randomseq.c -leasel -lm */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-L", eslARG_INT, "1000", NULL, NULL, NULL, NULL, NULL, "length of random sequences", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for randomseq module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_Create(esl_opt_GetInteger(go, "-s")); char *alphabet = "ACGT"; int K = strlen(alphabet); int L = esl_opt_GetInteger(go, "-L"); utest_CShufflers(r, L, alphabet, K); utest_CMarkovs (r, L, alphabet); utest_XShufflers(r, L, K); utest_XMarkovs (r, L, K); utest_markov1_bug(r); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*eslRANDOMSEQ_TESTDRIVE*/ /*----------------- end, test driver ----------------------------*/ /***************************************************************** * 10. Example. *****************************************************************/ #ifdef eslRANDOMSEQ_EXAMPLE /*::cexcerpt::randomseq_example::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslRANDOMSEQ_EXAMPLE esl_randomseq.c\ esl_random.c esl_sqio.c esl_sq.c easel.c -lm * run: ./example */ #include "easel.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_random.h" #include "esl_randomseq.h" int main(int argc, char **argv) { char *seqfile = argv[1]; int format = eslSQFILE_UNKNOWN; ESL_SQFILE *sqfp = NULL; ESL_SQ *sq = esl_sq_Create(); ESL_RANDOMNESS *r = esl_randomness_Create(0); int status; if (esl_sqfile_Open(seqfile, format, NULL, &sqfp) != eslOK) esl_fatal("Failed to open %s\n", seqfile); while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { printf("[Original sequence:]\n"); esl_sqio_Write(stdout, sq, eslSQFILE_FASTA); printf("[After shuffling:]\n"); esl_rsq_CShuffle(r, sq->seq, sq->seq); /* shuffle in place */ esl_sqio_Write(stdout, sq, eslSQFILE_FASTA); esl_sq_Reuse(sq); } if (status != eslEOF) esl_fatal("Parse failed"); esl_sqfile_Close(sqfp); esl_sq_Destroy(sq); esl_randomness_Destroy(r); return 0; } /*::cexcerpt::randomseq_example::end::*/ #endif /*eslRANDOMSEQ_EXAMPLE*/ /*--------------------- end, example ----------------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_randomseq.c 854 2013-02-25 22:00:19Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_randomseq.c $ *****************************************************************/ hmmer-3.1b2/easel/aclocal.m40000664361611702660230000013113312473612604015223 0ustar wheelerteddy# aclocal.m4 contains custom macros used for creating HMMER's # configuration script. # # SRE, Sun Apr 22 09:26:38 2007 [Janelia] # SVN $Id: aclocal.m4 896 2013-12-17 21:07:37Z wheelert $ ################################################################# # Macro: CHECK_GNU_MAKE # Usage: CHECK_GNU_MAKE # Author: John Darrington # Modified from the original. # # Sets the format of makefile dependency lines for executables. # # We need this because GNU make and SYSV make use different systems # specifying variables for dependencies: $$@ in sysv, %: %.o in GNU. # Would love to hear a better way of doing this. # # I use two different conventions in my Makefiles. Sometimes # executable "foo" has a file "foo.c" - this is the HMMER, Easel, Infernal convention. # Sometimes executable "foo" has a file "foo_main.c" - this is # the SQUID convention. The configure script sets the # EXEC_DEPENDENCY appropriately: here, HMMER style. # # Sets an output variable EXEC_DEPENDENCY. # This is used in the src/Makefile.in. # AC_DEFUN(CHECK_GNU_MAKE,[ AC_MSG_CHECKING(whether you have a GNU make) foundGNUmake='nope, so we assume you will use a sysv-compatible make.' ; EXEC_DEPENDENCY=[\$\$\@.o] ; for a in "$MAKE" make gmake gnumake ; do if test -z "$a" ; then continue ; fi ; if ( sh -c "$a --version" 2> /dev/null | grep GNU 2>&1 > /dev/null ) ; then foundGNUmake='yes, you do; and we assume you will use it!' ; EXEC_DEPENDENCY='%: %.o' ; fi done AC_MSG_RESULT($foundGNUmake) AC_SUBST(EXEC_DEPENDENCY) ]) ################################################################ # Macro: ACX_MPI # Usage: ACX_MPI([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # Authors: Steven G. Johnson and Julian C. Cummings # Version: 2006-10-22 # Unmodified from the original; can be replaced with new version. # # xref http://autoconf-archive.cryp.to/acx_mpi.html # Sets MPICC, MPILIBS output variable. # If ACTION-IF-FOUND is not specified, default action defines HAVE_MPI. # AC_DEFUN([ACX_MPI], [ AC_PREREQ(2.50) dnl for AC_LANG_CASE AC_LANG_CASE([C], [ AC_REQUIRE([AC_PROG_CC]) AC_ARG_VAR(MPICC,[MPI C compiler command]) AC_CHECK_PROGS(MPICC, mpicc hcc mpxlc_r mpxlc mpcc cmpicc, $CC) acx_mpi_save_CC="$CC" CC="$MPICC" AC_SUBST(MPICC) ], [C++], [ AC_REQUIRE([AC_PROG_CXX]) AC_ARG_VAR(MPICXX,[MPI C++ compiler command]) AC_CHECK_PROGS(MPICXX, mpic++ mpicxx mpiCC hcp mpxlC_r mpxlC mpCC cmpic++, $CXX) acx_mpi_save_CXX="$CXX" CXX="$MPICXX" AC_SUBST(MPICXX) ], [Fortran 77], [ AC_REQUIRE([AC_PROG_F77]) AC_ARG_VAR(MPIF77,[MPI Fortran 77 compiler command]) AC_CHECK_PROGS(MPIF77, mpif77 hf77 mpxlf_r mpxlf mpf77 cmpifc, $F77) acx_mpi_save_F77="$F77" F77="$MPIF77" AC_SUBST(MPIF77) ], [Fortran], [ AC_REQUIRE([AC_PROG_FC]) AC_ARG_VAR(MPIFC,[MPI Fortran compiler command]) AC_CHECK_PROGS(MPIFC, mpif90 mpxlf95_r mpxlf90_r mpxlf95 mpxlf90 mpf90 cmpif90c, $FC) acx_mpi_save_FC="$FC" FC="$MPIFC" AC_SUBST(MPIFC) ]) if test x = x"$MPILIBS"; then AC_LANG_CASE([C], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])], [C++], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])], [Fortran 77], [AC_MSG_CHECKING([for MPI_Init]) AC_LINK_IFELSE([AC_LANG_PROGRAM([],[ call MPI_Init])],[MPILIBS=" " AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])], [Fortran], [AC_MSG_CHECKING([for MPI_Init]) AC_LINK_IFELSE([AC_LANG_PROGRAM([],[ call MPI_Init])],[MPILIBS=" " AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])]) fi AC_LANG_CASE([Fortran 77], [ if test x = x"$MPILIBS"; then AC_CHECK_LIB(fmpi, MPI_Init, [MPILIBS="-lfmpi"]) fi if test x = x"$MPILIBS"; then AC_CHECK_LIB(fmpich, MPI_Init, [MPILIBS="-lfmpich"]) fi ], [Fortran], [ if test x = x"$MPILIBS"; then AC_CHECK_LIB(fmpi, MPI_Init, [MPILIBS="-lfmpi"]) fi if test x = x"$MPILIBS"; then AC_CHECK_LIB(mpichf90, MPI_Init, [MPILIBS="-lmpichf90"]) fi ]) if test x = x"$MPILIBS"; then AC_CHECK_LIB(mpi, MPI_Init, [MPILIBS="-lmpi"]) fi if test x = x"$MPILIBS"; then AC_CHECK_LIB(mpich, MPI_Init, [MPILIBS="-lmpich"]) fi dnl We have to use AC_TRY_COMPILE and not AC_CHECK_HEADER because the dnl latter uses $CPP, not $CC (which may be mpicc). AC_LANG_CASE([C], [if test x != x"$MPILIBS"; then AC_MSG_CHECKING([for mpi.h]) AC_TRY_COMPILE([#include ],[],[AC_MSG_RESULT(yes)], [MPILIBS="" AC_MSG_RESULT(no)]) fi], [C++], [if test x != x"$MPILIBS"; then AC_MSG_CHECKING([for mpi.h]) AC_TRY_COMPILE([#include ],[],[AC_MSG_RESULT(yes)], [MPILIBS="" AC_MSG_RESULT(no)]) fi], [Fortran 77], [if test x != x"$MPILIBS"; then AC_MSG_CHECKING([for mpif.h]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[ include 'mpif.h'])],[AC_MSG_RESULT(yes)], [MPILIBS="" AC_MSG_RESULT(no)]) fi], [Fortran], [if test x != x"$MPILIBS"; then AC_MSG_CHECKING([for mpif.h]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[ include 'mpif.h'])],[AC_MSG_RESULT(yes)], [MPILIBS="" AC_MSG_RESULT(no)]) fi]) AC_LANG_CASE([C], [CC="$acx_mpi_save_CC"], [C++], [CXX="$acx_mpi_save_CXX"], [Fortran 77], [F77="$acx_mpi_save_F77"], [Fortran], [FC="$acx_mpi_save_FC"]) AC_SUBST(MPILIBS) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x = x"$MPILIBS"; then $2 : else ifelse([$1],,[AC_DEFINE(HAVE_MPI,1,[Define if you have the MPI library.])],[$1]) : fi ])dnl ACX_MPI ################################################################# # Macro: ACX_PTHREAD # Usage: ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # Authors: Steven G. Johnson # Alejandro Forero Cuervo # Version: 1.9 (2004/02/23) # Source: http://www.gnu.org/software/ac-archive/htmldoc/acx_pthread.html # # SRE: I have modified this source; search for SRE to see where. # Solaris needs -D_POSIX_PTHREAD_SEMANTICS or ctime_r() calls will choke. # dnl Available from the GNU Autoconf Macro Archive at: dnl http://www.gnu.org/software/ac-archive/htmldoc/acx_pthread.html dnl AC_DEFUN([ACX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_SAVE AC_LANG_C acx_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) AC_MSG_RESULT($acx_pthread_ok) if test x"$acx_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthread or # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags" ;; esac if test x"$acx_pthread_ok" = xno; then for flag in $acx_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) if test x"$acx_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_TRY_LINK([#include ], [pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], [acx_pthread_ok=yes]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT($acx_pthread_ok) if test "x$acx_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$acx_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: threads are created detached by default # and the JOINABLE attribute has a nonstandard name (UNDETACHED). AC_MSG_CHECKING([for joinable pthread attribute]) AC_TRY_LINK([#include ], [int attr=PTHREAD_CREATE_JOINABLE;], ok=PTHREAD_CREATE_JOINABLE, ok=unknown) if test x"$ok" = xunknown; then AC_TRY_LINK([#include ], [int attr=PTHREAD_CREATE_UNDETACHED;], ok=PTHREAD_CREATE_UNDETACHED, ok=unknown) fi if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then AC_DEFINE(PTHREAD_CREATE_JOINABLE, $ok, [Define to the necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_RESULT(${ok}) if test x"$ok" = xunknown; then AC_MSG_WARN([we do not know how to create joinable pthreads]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no # Added _POSIX_PTHREAD_SEMANTICS for solaris. Needed for ctime_r() compliance. # SRE, Fri Oct 29 10:03:36 2010 [J7/3] case "${host_cpu}-${host_os}" in *-aix* | *-freebsd*) flag="-D_THREAD_SAFE";; *solaris*) flag="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS";; *-osf* | *-hpux*) flag="-D_REENTRANT";; esac AC_MSG_RESULT(${flag}) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with cc_r AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC}) else PTHREAD_CC="$CC" fi AC_SUBST(PTHREAD_LIBS) AC_SUBST(PTHREAD_CFLAGS) AC_SUBST(PTHREAD_CC) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$acx_pthread_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) : else acx_pthread_ok=no $2 fi AC_LANG_RESTORE ])dnl ACX_PTHREAD # # ACX_PTHREAD macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_CHECK_COMPILER_FLAGS # Usage: AX_CHECK_COMPILER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE]) # Authors: Copyright (C) 2007 Steven G. Johnson # Copyright (C) 2007 Matteo Frigo. # Version: 2007-07-29 # Source: http://autoconf-archive.cryp.to/ax_check_compiler_flags.html # # Check whether the given compiler FLAGS work with the current language's compiler, # or whether they give an error. (Warnings, however, are ignored.) # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on success/failure. # # Everything below is verbatim from the archive. DO NOT MODIFY IT. # AC_DEFUN([AX_CHECK_COMPILER_FLAGS], [AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1]) dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname: AS_LITERAL_IF([$1], [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1), [ ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$1" AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes, AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no) _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])], [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$1" AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes, eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no) _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS]) eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1) AC_MSG_RESULT($ax_check_compiler_flags) if test "x$ax_check_compiler_flags" = xyes; then m4_default([$2], :) else m4_default([$3], :) fi ])dnl AX_CHECK_COMPILER_FLAGS # # AX_CHECK_COMPILER_FLAGS macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_GCC_X86_CPUID # Usage: AX_GCC_X86_CPUID(OP) # Authors: Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2008 Matteo Frigo # Version: 2010-03-01 # Source: http://www.gnu.org/software/autoconf-archive/ax_gcc_x86_cpuid.html # # On Pentium and later x86 processors, with gcc or a compiler that has a # compatible syntax for inline assembly instructions, run a small program # that executes the cpuid instruction with input OP. This can be used to # detect the CPU type. # # On output, the values of the eax, ebx, ecx, and edx registers are stored # as hexadecimal strings as "eax:ebx:ecx:edx" in the cache variable # ax_cv_gcc_x86_cpuid_OP. # # If the cpuid instruction fails (because you are running a # cross-compiler, or because you are not using gcc, or because you are on # a processor that doesn't have this instruction), ax_cv_gcc_x86_cpuid_OP # is set to the string "unknown". # # This macro mainly exists to be used in AX_GCC_ARCHFLAG. # # Everything below is verbatim from the archive. DO NOT MODIFY IT. # AC_DEFUN([AX_GCC_X86_CPUID], [AC_REQUIRE([AC_PROG_CC]) AC_LANG_PUSH([C]) AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1, [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], [ int op = $1, eax, ebx, ecx, edx; FILE *f; __asm__("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (op)); f = fopen("conftest_cpuid", "w"); if (!f) return 1; fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); fclose(f); return 0; ])], [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid], [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid], [ax_cv_gcc_x86_cpuid_$1=unknown])]) AC_LANG_POP([C]) ]) # # AX_GCC_X86_CPUID macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_COMPILER_VENDOR # Usage: AX_COMPILER_VENDOR # Authors: Copyright (C) 2007 Steven G. Johnson # Copyright (C) 2007 Matteo Frigo # Version: 2007-08-01 # Source: http://autoconf-archive.cryp.to/ax_compiler_vendor.html # # Sets $ax_cv_c_compiler_vendor to gnu, intel, ibm, sun, hp, borland, # comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft, watcom, etc. # # Everything below is verbatim from the archive. DO NOT MODIFY IT. AC_DEFUN([AX_COMPILER_VENDOR], [ AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown # note: don't check for gcc first since some other compilers define __GNUC__ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ #if !($vencpp) thisisanerror; #endif ])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break]) done ]) ]) # # AX_COMPILER_VENDOR macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_CHECK_PREPROC_FLAG # Usage: AX_CHECK_PREPROC_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) # Authors: Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # Version: 2013-12-11 # Source: http://www.gnu.org/software/autoconf-archive/ax_check_preproc_flag.html # # Check whether the given FLAG works with the current language's # preprocessor or gives an error. (Warnings, however, are ignored) # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # If EXTRA-FLAGS is defined, it is added to the preprocessor's default # flags when the check is done. The check is thus made with the flags: # "CPPFLAGS EXTRA-FLAGS FLAG". This can for example be used to force the # preprocessor to issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_PREPROC_IFELSE. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this # macro in sync with AX_CHECK_{COMPILE,LINK}_FLAG. # # Everything below is verbatim from the archive. DO NOT MODIFY IT. # AC_DEFUN([AX_CHECK_PREPROC_FLAG], [AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]cppflags_$4_$1])dnl AC_CACHE_CHECK([whether _AC_LANG preprocessor accepts $1], CACHEVAR, [ ax_check_save_flags=$CPPFLAGS CPPFLAGS="$CPPFLAGS $4 $1" AC_PREPROC_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) CPPFLAGS=$ax_check_save_flags]) AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR])dnl ])dnl AX_CHECK_PREPROC_FLAGS # # AX_CHECK_PREPROC_FLAG macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_CHECK_LINK_FLAG # Usage: AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) # Authors: Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # Version: 2013-12-11 # Source: http://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html # # Check whether the given FLAG works with the linker or gives an error. # (Warnings, however, are ignored) # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # If EXTRA-FLAGS is defined, it is added to the linker's default flags # when the check is done. The check is thus made with the flags: "LDFLAGS # EXTRA-FLAGS FLAG". This can for example be used to force the linker to # issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_LINK_IFELSE. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this # macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG. # # Everything below is verbatim from the archive. DO NOT MODIFY IT. # AC_DEFUN([AX_CHECK_LINK_FLAG], [AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [ ax_check_save_flags=$LDFLAGS LDFLAGS="$LDFLAGS $4 $1" AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) LDFLAGS=$ax_check_save_flags]) AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR])dnl ])dnl AX_CHECK_LINK_FLAGS # # AX_CHECK_LINK_FLAG macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_CHECK_COMPILE_FLAG # Usage: AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) # Authors: Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # Version: 2013-12-11 # Source: http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html # # Check whether the given FLAG works with the current language's compiler # or gives an error. (Warnings, however, are ignored) # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # If EXTRA-FLAGS is defined, it is added to the current language's default # flags (e.g. CFLAGS) when the check is done. The check is thus made with # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to # force the compiler to issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_COMPILE_IFELSE. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this # macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. # # Everything below is verbatim from the archive. DO NOT MODIFY IT. # AC_DEFUN([AX_CHECK_COMPILE_FLAG], [AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR])dnl ])dnl AX_CHECK_COMPILE_FLAGS # # AX_CHECK_COMPILE_FLAG macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_GCC_ARCHFLAG # Usage: AX_GCC_ARCHFLAG([PORTABLE?], [ACTION-SUCCESS], [ACTION-FAILURE]) # Authors: Copyright (C) 2007 Steven G. Johnson # Copyright (C) 2007 Matteo Frigo # Version: 2013-12-11 # Source: http://autoconf-archive.cryp.to/ax_gcc_archflag.html # # This macro tries to guess the "native" arch corresponding to the target # architecture for use with gcc's -march=arch or -mtune=arch flags. If # found, the cache variable $ax_cv_gcc_archflag is set to this flag and # ACTION-SUCCESS is executed; otherwise $ax_cv_gcc_archflag is set to # "unknown" and ACTION-FAILURE is executed. The default ACTION-SUCCESS is # to add $ax_cv_gcc_archflag to the end of $CFLAGS. # # PORTABLE? should be either [yes] (default) or [no]. In the former case, # the flag is set to -mtune (or equivalent) so that the architecture is # only used for tuning, but the instruction set used is still portable. In # the latter case, the flag is set to -march (or equivalent) so that # architecture-specific instructions are enabled. # # The user can specify --with-gcc-arch= in order to override the # macro's choice of architecture, or --without-gcc-arch to disable this. # # When cross-compiling, or if $CC is not gcc, then ACTION-FAILURE is # called unless the user specified --with-gcc-arch manually. # # Requires macros: AX_CHECK_COMPILE_FLAG, AX_GCC_X86_CPUID # # (The main emphasis here is on recent CPUs, on the principle that doing # high-performance computing on old hardware is uncommon.) # # Everything below is verbatim from the archive. DO NOT MODIFY IT. # AC_DEFUN([AX_GCC_ARCHFLAG], [AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_SED]) AC_ARG_WITH(gcc-arch, [AS_HELP_STRING([--with-gcc-arch=], [use architecture for gcc -march/-mtune, instead of guessing])], ax_gcc_arch=$withval, ax_gcc_arch=yes) AC_MSG_CHECKING([for gcc architecture flag]) AC_MSG_RESULT([]) AC_CACHE_VAL(ax_cv_gcc_archflag, [ ax_cv_gcc_archflag="unknown" if test "$GCC" = yes; then if test "x$ax_gcc_arch" = xyes; then ax_gcc_arch="" if test "$cross_compiling" = no; then case $host_cpu in i[[3456]]86*|x86_64*|amd64*) # use cpuid codes AX_GCC_X86_CPUID(0) AX_GCC_X86_CPUID(1) case $ax_cv_gcc_x86_cpuid_0 in *:756e6547:*:*) # Intel case $ax_cv_gcc_x86_cpuid_1 in *5[[48]]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; *5??:*:*:*) ax_gcc_arch=pentium ;; *1?6[[7d]]?:*:*:*) ax_gcc_arch="penryn core2 pentium-m pentium3 pentiumpro" ;; *1?6[[aef]]?:*:*:*|*2?6[[5cef]]?:*:*:*) ax_gcc_arch="corei7 core2 pentium-m pentium3 pentiumpro" ;; *1?6c?:*:*:*|*[[23]]?66?:*:*:*) ax_gcc_arch="atom core2 pentium-m pentium3 pentiumpro" ;; *2?6[[ad]]?:*:*:*) ax_gcc_arch="corei7-avx corei7 core2 pentium-m pentium3 pentiumpro" ;; *[[1-9a-f]]?6??:*:*:*) ax_gcc_arch="core2 pentiumpro" ;; *6[[3456]]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; *6a?:*[[01]]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; *6a?:*[[234]]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; *6[[9de]]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; *6[[78b]]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; *6f?:*:*:*) ax_gcc_arch="core2 pentium-m pentium3 pentiumpro" ;; *6??:*:*:*) ax_gcc_arch=pentiumpro ;; *f3[[347]]:*:*:*|*f4[1347]:*:*:*|*f6?:*:*:*) case $host_cpu in x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; esac ;; *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; esac ;; *:68747541:*:*) # AMD case $ax_cv_gcc_x86_cpuid_1 in *5[[67]]?:*:*:*) ax_gcc_arch=k6 ;; *5[[8d]]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; *5[[9]]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; *60?:*:*:*) ax_gcc_arch=k7 ;; *6[[12]]?:*:*:*) ax_gcc_arch="athlon k7" ;; *6[[34]]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; *6[[68a]]?:*:*:*) AX_GCC_X86_CPUID(0x80000006) # L2 cache size case $ax_cv_gcc_x86_cpuid_0x80000006 in *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256 ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; *) ax_gcc_arch="athlon-4 athlon k7" ;; esac ;; *5??f??:*:*:*) ax_gcc_arch="btver1 amdfam10 k8" ;; *6??f??:*:*:*) ax_gcc_arch="bdver1 amdfam10 k8" ;; *[[1-9a-f]]??f??:*:*:*) ax_gcc_arch="amdfam10 k8" ;; *f[[4cef8b]]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; *f5?:*:*:*) ax_gcc_arch="opteron k8" ;; *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; *f??:*:*:*) ax_gcc_arch="k8" ;; esac ;; *:746e6543:*:*) # IDT case $ax_cv_gcc_x86_cpuid_1 in *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; *58?:*:*:*) ax_gcc_arch=winchip2 ;; *6[[78]]?:*:*:*) ax_gcc_arch=c3 ;; *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; esac ;; esac if test x"$ax_gcc_arch" = x; then # fallback case $host_cpu in i586*) ax_gcc_arch=pentium ;; i686*) ax_gcc_arch=pentiumpro ;; esac fi ;; sparc*) AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag], [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/]) cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` cputype=`echo "$cputype" | tr -d ' -' | $SED 's/SPARCIIi/SPARCII/' |tr $as_cr_LETTERS $as_cr_letters` case $cputype in *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; *supersparc*|*tms390z5[[05]]*) ax_gcc_arch="supersparc v8" ;; *hypersparc*|*rt62[[056]]*) ax_gcc_arch="hypersparc v8" ;; *cypress*) ax_gcc_arch=cypress ;; esac ;; alphaev5) ax_gcc_arch=ev5 ;; alphaev56) ax_gcc_arch=ev56 ;; alphapca56) ax_gcc_arch="pca56 ev56" ;; alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; alphaev6) ax_gcc_arch=ev6 ;; alphaev67) ax_gcc_arch=ev67 ;; alphaev68) ax_gcc_arch="ev68 ev67" ;; alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; powerpc*) cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | $SED 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` cputype=`echo $cputype | $SED -e 's/ppc//g;s/ *//g'` case $cputype in *750*) ax_gcc_arch="750 G3" ;; *740[[0-9]]*) ax_gcc_arch="$cputype 7400 G4" ;; *74[[4-5]][[0-9]]*) ax_gcc_arch="$cputype 7450 G4" ;; *74[[0-9]][[0-9]]*) ax_gcc_arch="$cputype G4" ;; *970*) ax_gcc_arch="970 G5 power4";; *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; 603ev|8240) ax_gcc_arch="$cputype 603e 603";; *) ax_gcc_arch=$cputype ;; esac ax_gcc_arch="$ax_gcc_arch powerpc" ;; esac fi # not cross-compiling fi # guess arch if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then for arch in $ax_gcc_arch; do if test "x[]m4_default([$1],yes)" = xyes; then # if we require portable code flags="-mtune=$arch" # -mcpu=$arch and m$arch generate nonportable code on every arch except # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac else flags="-march=$arch -mcpu=$arch -m$arch" fi for flag in $flags; do AX_CHECK_COMPILE_FLAG($flag, [ax_cv_gcc_archflag=$flag; break]) done test "x$ax_cv_gcc_archflag" = xunknown || break done fi fi # $GCC=yes ]) AC_MSG_CHECKING([for gcc architecture flag]) AC_MSG_RESULT($ax_cv_gcc_archflag) if test "x$ax_cv_gcc_archflag" = xunknown; then m4_default([$3],:) else m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_gcc_archflag"]) fi ]) # # AX_GCC_ARCHFLAG macro end. # **************************************************************** # **************************************************************** ################################################################# # Macro: AX_CC_MAXOPT # Usage: AX_CC_MAXOPT # Authors: Copyright (C) 2007 Steven G. Johnson # Copyright (C) 2007 Matteo Frigo # Version: 2007-07-29 # Source: http://autoconf-archive.cryp.to/ax_cc_maxopt.html # # Try to turn on "good" C optimization flags for various compilers and # architectures, for some definition of "good". # # The user can override the flags by setting the CFLAGS environment # variable. The user can also specify --enable-portable-binary in # order to disable any optimization flags that might result in a # binary that only runs on the host architecture. # # Note also that the flags assume that ANSI C aliasing rules are # followed by the code (e.g. for gcc's -fstrict-aliasing), and that # floating-point computations can be re-ordered as needed. # # SRE: I've made modifications as follows. # - HMMER relies on IEEE754-compliant math. Don't enable # any options that break compliance; for example, gcc -ffast-math # - similarly, for IBM xlc, add -qstrict. # AC_DEFUN([AX_CC_MAXOPT], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AX_COMPILER_VENDOR]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_ARG_ENABLE(portable-binary, [AC_HELP_STRING([--enable-portable-binary], [disable compiler optimizations that would produce unportable binaries])], acx_maxopt_portable=$withval, acx_maxopt_portable=no) # Try to determine "good" native compiler flags if none specified via CFLAGS if test "$ac_test_CFLAGS" != "set"; then CFLAGS="" case $ax_cv_c_compiler_vendor in dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -tune host" # CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" if test "x$acx_maxopt_portable" = xno; then CFLAGS="$CFLAGS -arch host" fi;; sun) CFLAGS="-native -xO5 -dalign" # CFLAGS="-native -fast -xO5 -dalign" if test "x$acx_maxopt_portable" = xyes; then CFLAGS="$CFLAGS -xarch=generic" fi;; hp) CFLAGS="+Oall +Optrs_ansi +DSnative" if test "x$acx_maxopt_portable" = xyes; then CFLAGS="$CFLAGS +DAportable" fi;; ibm) xlc_opt="-qtune=auto -qstrict" if test "x$acx_maxopt_portable" = xno; then if test "x$XLC_ARCH" = xno; then xlc_opt="-qarch=auto $xlc_opt" else xlc_opt="-qarch=$XLC_ARCH $xlc_opt" fi fi AX_CHECK_COMPILER_FLAGS($xlc_opt, CFLAGS="-O3 -qansialias -w $xlc_opt", [CFLAGS="-O3 -qansialias -w" echo "******************************************************" echo "* You seem to have the IBM C compiler. It is *" echo "* recommended for best performance that you use: *" echo "* *" echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" echo "* ^^^ ^^^ *" echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" echo "* CPU you have. (Set the CFLAGS environment var. *" echo "* and re-run configure.) For more info, man cc. *" echo "******************************************************"]) ;; intel) CFLAGS="-O3 -ansi_alias" if test "x$acx_maxopt_portable" = xno; then icc_archflag=unknown icc_flags="" case $host_cpu in i686*|x86_64*) # icc accepts gcc assembly syntax, so these should work: AX_GCC_X86_CPUID(0) AX_GCC_X86_CPUID(1) case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG *:756e6547:*:*) # Intel case $ax_cv_gcc_x86_cpuid_1 in *6a?:*[[234]]:*:*|*6[[789b]]?:*:*:*) icc_flags="-xK";; *f3[[347]]:*:*:*|*f4[1347]:*:*:*) icc_flags="-xP -xN -xW -xK";; *f??:*:*:*) icc_flags="-xN -xW -xK";; esac ;; esac ;; esac if test "x$icc_flags" != x; then for flag in $icc_flags; do AX_CHECK_COMPILER_FLAGS($flag, [icc_archflag=$flag; break]) done fi AC_MSG_CHECKING([for icc architecture flag]) AC_MSG_RESULT($icc_archflag) if test "x$icc_archflag" != xunknown; then CFLAGS="$CFLAGS $icc_archflag" fi fi ;; gnu) # default optimization flags for gcc on all systems CFLAGS="-O3 -fomit-frame-pointer" # -malign-double for x86 systems # SRE: no, that's a bad idea; # on 32bit Ubuntu Linux systems, for example, this # causes an odd and buggy interaction with _FILE_OFFSET_BITS (LFS) # and fstat(). # AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double") # -fstrict-aliasing for gcc-2.95+ AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing, CFLAGS="$CFLAGS -fstrict-aliasing") # note that we enable "unsafe" fp optimization with other compilers, too # SRE: no, that's a bad idea, don't use this # AX_CHECK_COMPILER_FLAGS(-ffast-math, CFLAGS="$CFLAGS -ffast-math") AX_GCC_ARCHFLAG($acx_maxopt_portable) ;; esac if test -z "$CFLAGS"; then echo "" echo "********************************************************" echo "* WARNING: Don't know the best CFLAGS for this system *" echo "* Use ./configure CFLAGS=... to specify your own flags *" echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" echo "********************************************************" echo "" CFLAGS="-O3" fi AX_CHECK_COMPILER_FLAGS($CFLAGS, [], [ echo "" echo "********************************************************" echo "* WARNING: The guessed CFLAGS don't seem to work with *" echo "* your compiler. *" echo "* Use ./configure CFLAGS=... to specify your own flags *" echo "********************************************************" echo "" CFLAGS="" ]) fi ]) # # AX_CC_MAXOPT macro end. # **************************************************************** # **************************************************************** ################################################################ # Macro: ESL_PIC_FLAGS # Usage: ESL_PIC_FLAGS # Author: Dan Nicholson, Mesa3D project # References: http://www.mesa3d.org/ # http://www.mail-archive.com/mesa3d-dev@lists.sourceforge.net/msg04938.html # # Derived (essentially verbatim) from MESA_PIC_FLAGS, in the Mesa # project's acinclude.m4 file. From the Mesa file's header: # "Find out whether to build PIC code using the option --enable-pic and # the configure enable_static/enable_shared settings. If PIC is needed, # figure out the necessary flags for the platform and compiler. # # The platform checks have been shamelessly taken from libtool and # stripped down to just what's needed for Mesa. See _LT_COMPILER_PIC in # /usr/share/aclocal/libtool.m4 or # http://git.savannah.gnu.org/gitweb/?p=libtool.git;a=blob;f=libltdl/m4/libtool.m4;hb=HEAD # # Sets an output variable @PIC_FLAGS@ which should be added to # CFLAGS lines. # AC_DEFUN([ESL_PIC_FLAGS], [AC_REQUIRE([AC_PROG_CC])dnl AC_ARG_VAR([PIC_FLAGS], [compiler flags for PIC code]) AC_ARG_ENABLE([pic], [AS_HELP_STRING([--disable-pic], [compile PIC objects @<:@default=enabled for shared builds on supported platforms@:>@])], [enable_pic="$enableval" test "x$enable_pic" = x && enable_pic=auto], [enable_pic=auto]) # disable PIC by default for static builds if test "$enable_pic" = auto && test "$enable_static" = yes; then enable_pic=no fi # if PIC hasn't been explicitly disabled, try to figure out the flags if test "$enable_pic" != no; then AC_MSG_CHECKING([for $CC option to produce PIC]) # allow the user's flags to override if test "x$PIC_FLAGS" = x; then # see if we're using GCC if test "x$GCC" = xyes; then case "$host_os" in aix*|beos*|cygwin*|irix5*|irix6*|osf3*|osf4*|osf5*) # PIC is the default for these OSes. ;; mingw*|os2*|pw32*) # This hack is so that the source file can tell whether # it is being built for inclusion in a dll (and should # export symbols for example). PIC_FLAGS="-DDLL_EXPORT" ;; darwin*|rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files PIC_FLAGS="-fno-common" ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, # but not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) PIC_FLAGS="-fPIC" ;; esac ;; *) # Everyone else on GCC uses -fPIC PIC_FLAGS="-fPIC" ;; esac else # !GCC case "$host_os" in hpux9*|hpux10*|hpux11*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, # but not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) PIC_FLAGS="+Z" ;; esac ;; linux*|k*bsd*-gnu) case `basename "$CC"` in icc*|ecc*|ifort*) PIC_FLAGS="-KPIC" ;; pgcc*|pgf77*|pgf90*|pgf95*) # Portland Group compilers (*not* the Pentium gcc # compiler, which looks to be a dead project) PIC_FLAGS="-fpic" ;; ccc*) # All Alpha code is PIC. ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC PIC_FLAGS="-qpic" ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*|*Sun\ F*) # Sun C 5.9 or Sun Fortran PIC_FLAGS="-KPIC" ;; esac esac ;; solaris*) PIC_FLAGS="-KPIC" ;; sunos4*) PIC_FLAGS="-PIC" ;; esac fi # GCC fi # PIC_FLAGS AC_MSG_RESULT([$PIC_FLAGS]) fi AC_SUBST([PIC_FLAGS]) ]) # # ESL_PIC_FLAGS macro end. # **************************************************************** # **************************************************************** hmmer-3.1b2/easel/esl_vectorops.c0000664361611702660230000010666512473612610016427 0ustar wheelerteddy/* Operations on vectors of floats or doubles. * * Can operate on vectors of doubles, floats, or integers - appropriate * routine is prefixed with D, F, or I. For example, esl_vec_DSet() is * the Set routine for a vector of doubles; esl_vec_ISet() is for integers. * * Contents: * 1. The vectorops API. * 2. Unit tests. * 3. Test driver. * 4. Examples. * 5. Copyright and license information. * */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_vectorops.h" /* Function: esl_vec_DSet() * Synopsis: Set all items in vector to scalar value. * * Purpose: Sets all items in to . * * and do the same, * for float and integer vectors. */ void esl_vec_DSet(double *vec, int n, double value) { int x; for (x = 0; x < n; x++) vec[x] = value; } void esl_vec_FSet(float *vec, int n, float value) { int x; for (x = 0; x < n; x++) vec[x] = value; } void esl_vec_ISet(int *vec, int n, int value) { int x; for (x = 0; x < n; x++) vec[x] = value; } /* Function: esl_vec_DScale() * Synopsis: Multiply all items in vector by scalar value. * * Purpose: Multiplies all items in by . * * and do the same, * for float and integer vectors. * * Essentially the same as BLAS1's xSCAL(). */ void esl_vec_DScale(double *vec, int n, double scale) { int x; for (x = 0; x < n; x++) vec[x] *= scale; } void esl_vec_FScale(float *vec, int n, float scale) { int x; for (x = 0; x < n; x++) vec[x] *= scale; } void esl_vec_IScale(int *vec, int n, int scale) { int x; for (x = 0; x < n; x++) vec[x] *= scale; } /* Function: esl_vec_DIncrement() * Synopsis: Add a scalar to all items in a vector. * Incept: SRE, Mon Mar 21 11:56:57 2005 [St. Louis] * * Purpose: Adds scalar to all items in the -vector . * * and do the * same, for float and integer vectors. */ void esl_vec_DIncrement(double *v, int n, double x) { int i; for (i = 0; i < n; i++) v[i] += x; } void esl_vec_FIncrement(float *v, int n, float x) { int i; for (i = 0; i < n; i++) v[i] += x; } void esl_vec_IIncrement(int *v, int n, int x) { int i; for (i = 0; i < n; i++) v[i] += x; } /* Function: esl_vec_DSum() * Synopsis: Returns $\sum_i x_i$. * * Purpose: Returns the scalar sum of the items in . * * and do the same, * but for float and integer vectors. */ double esl_vec_DSum(double *vec, int n) { double sum = 0.; int x; for (x = 0; x < n; x++) sum += vec[x]; return sum; } float esl_vec_FSum(float *vec, int n) { float sum = 0.; int x; for (x = 0; x < n; x++) sum += vec[x]; return sum; } int esl_vec_ISum(int *vec, int n) { int sum = 0; int x; for (x = 0; x < n; x++) sum += vec[x]; return sum; } /* Function: esl_vec_DAdd() * Synopsis: Vector addition of two vectors. * * Purpose: Vector addition. Adds to , leaving * result in . ( is unchanged.). * Both vectors are of size . * * and do the same, * for float and integer vectors. */ void esl_vec_DAdd(double *vec1, const double *vec2, int n) { int x; for (x = 0; x < n; x++) vec1[x] += vec2[x]; } void esl_vec_FAdd(float *vec1, const float *vec2, int n) { int x; for (x = 0; x < n; x++) vec1[x] += vec2[x]; } void esl_vec_IAdd(int *vec1, const int *vec2, int n) { int x; for (x = 0; x < n; x++) vec1[x] += vec2[x]; } /* Function: esl_vec_DAddScaled() * Synopsis: Scale and add it to . * * Purpose: Scales by scalar , and adds that * to . Both vectors are of size . * * and do the same, * for float and integer vectors. * * Essentially the same as BLAS1 xAXPY(). */ void esl_vec_DAddScaled(double *vec1, double *vec2, double a, int n) { int x; for (x = 0; x < n; x++) vec1[x] += vec2[x] * a; } void esl_vec_FAddScaled(float *vec1, float *vec2, float a, int n) { int x; for (x = 0; x < n; x++) vec1[x] += vec2[x] * a; } void esl_vec_IAddScaled(int *vec1, int *vec2, int a, int n) { int x; for (x = 0; x < n; x++) vec1[x] += vec2[x] * a; } /* Function: esl_vec_DCopy() * Synopsis: Set vector to same values as . * * Purpose: Copies to . is * unchanged. Both vectors are of size . * * and do the same, * for float and integer vectors. * * Essentially the same as BLAS1 xCOPY(). */ void esl_vec_DCopy(const double *src, const int n, double *dest) { int x; for (x = 0; x < n; x++) dest[x] = src[x]; } void esl_vec_FCopy(const float *src, const int n, float *dest) { int x; for (x = 0; x < n; x++) dest[x] = src[x]; } void esl_vec_ICopy(const int *src, const int n, int *dest) { int x; for (x = 0; x < n; x++) dest[x] = src[x]; } /* Function: esl_vec_DCompare() * Synopsis: Return if two vectors are equal. * Incept: SRE, Mon Nov 6 10:20:28 2006 [Janelia] * * Purpose: Compare to for equality, by * comparing each cognate element pair. Both vectors * are of size . Equality of elements is * defined by being $\leq$ fractional tolerance * for floating point comparisons, and strict equality * for integer comparisons. Return * if the vectors are equal, and if not. * * If , the test always succeeds. In this case, either * and (or both) may be . This * accommodates an occasional convention of leaving empty * vectors . * * and do the same, * for float and integer vectors. */ int esl_vec_DCompare(const double *vec1, const double *vec2, int n, double tol) { int i; for (i = 0; i < n; i++) if (esl_DCompare(vec1[i], vec2[i], tol) == eslFAIL) return eslFAIL; return eslOK; } int esl_vec_FCompare(const float *vec1, const float *vec2, int n, float tol) { int i; for (i = 0; i < n; i++) if (esl_DCompare(vec1[i], vec2[i], tol) == eslFAIL) return eslFAIL; return eslOK; } int esl_vec_ICompare(const int *vec1, const int *vec2, int n) { int i; for (i = 0; i < n; i++) if (vec1[i] != vec2[i]) return eslFAIL; return eslOK; } /* Function: esl_vec_DSwap() * Synopsis: Swap two vectors. * * Purpose: Swaps and . * Both vectors are of size . * * and do the same, * for float and integer vectors. * * Essentially the same as BLAS1 xSWAP(). * * You will be better off swapping the pointers to * the vectors, if that's feasible. */ void esl_vec_DSwap(double *vec1, double *vec2, int n) { int x; double tmp; for (x = 0; x < n; x++) { tmp = vec1[x]; vec1[x] = vec2[x]; vec2[x] = tmp; } } void esl_vec_FSwap(float *vec1, float *vec2, int n) { int x; float tmp; for (x = 0; x < n; x++) { tmp = vec1[x]; vec1[x] = vec2[x]; vec2[x] = tmp; } } void esl_vec_ISwap(int *vec1, int *vec2, int n) { int x; int tmp; for (x = 0; x < n; x++) { tmp = vec1[x]; vec1[x] = vec2[x]; vec2[x] = tmp; } } /* Function: esl_vec_DReverse() * Synopsis: Reverse a vector (possibly in place). * * Purpose: Put the values from vector in reversed order in * . Caller provides storage in for at least * values. * * and can be the same, in which case is * reversed in place. * * and * do the same, for float and integer values. */ void esl_vec_DReverse(double *vec, double *rev, int n) { int i; double x; for (i = 0; i < n/2; i++) { x = vec[n-i-1]; rev[n-i-1] = vec[i]; rev[i] = x; } if (n%2) rev[i] = vec[i]; } void esl_vec_FReverse(float *vec, float *rev, int n) { int i; float x; for (i = 0; i < n/2; i++) { x = vec[n-i-1]; rev[n-i-1] = vec[i]; rev[i] = x; } if (n%2) rev[i] = vec[i]; } void esl_vec_IReverse(int *vec, int *rev, int n) { int i; int x; for (i = 0; i < n/2; i++) { x = vec[n-i-1]; rev[n-i-1] = vec[i]; rev[i] = x; } if (n%2) rev[i] = vec[i]; } /* Function: esl_vec_DDot() * Synopsis: Return the dot product of two vectors. * * Purpose: Returns the scalar dot product $\cdot$ . * Both vectors are of size . * * and do the same, * for float and integer vectors. */ double esl_vec_DDot(double *vec1, double *vec2, int n) { double result = 0.; int x; for (x = 0; x < n; x++) result += vec1[x] * vec2[x]; return result; } float esl_vec_FDot(float *vec1, float *vec2, int n) { float result = 0.; int x; for (x = 0; x < n; x++) result += vec1[x] * vec2[x]; return result; } int esl_vec_IDot(int *vec1, int *vec2, int n) { int result = 0; int x; for (x = 0; x < n; x++) result += vec1[x] * vec2[x]; return result; } /* Function: esl_vec_DMax() * Synopsis: Return value of the maximum element in a vector. * * Purpose: Returns the maximum value of the values * in . * * and do the same, * for float and integer vectors. */ double esl_vec_DMax(const double *vec, int n) { int i; double best; best = vec[0]; for (i = 1; i < n; i++) if (vec[i] > best) best = vec[i]; return best; } float esl_vec_FMax(const float *vec, int n) { int i; float best; best = vec[0]; for (i = 1; i < n; i++) if (vec[i] > best) best = vec[i]; return best; } int esl_vec_IMax(const int *vec, int n) { int i; int best; best = vec[0]; for (i = 1; i < n; i++) if (vec[i] > best) best = vec[i]; return best; } /* Function: esl_vec_DMin() * Synopsis: Return value of the minimum element in a vector. * * Purpose: Returns the minimum value of the values * in . * * and do the same, * for float and integer vectors. */ double esl_vec_DMin(const double *vec, int n) { int i; double best; best = vec[0]; for (i = 1; i < n; i++) if (vec[i] < best) best = vec[i]; return best; } float esl_vec_FMin(const float *vec, int n) { int i; float best; best = vec[0]; for (i = 1; i < n; i++) if (vec[i] < best) best = vec[i]; return best; } int esl_vec_IMin(const int *vec, int n) { int i; int best; best = vec[0]; for (i = 1; i < n; i++) if (vec[i] < best) best = vec[i]; return best; } /* Function: esl_vec_DArgMax() * Synopsis: Return index of maximum element in a vector. * * Purpose: Returns the index of the maximum value in the values * in . In case of ties, the element with the smallest index * is returned. * * can be 0 and can be , in which case the * function returns 0. * * and do the same, * for float and integer vectors. * * Note: Do not change the behavior that the smallest index is * returned in case of ties. Some functions rely on this * behavior: optimal accuracy tracebacks in HMMER for example. */ int esl_vec_DArgMax(const double *vec, int n) { int i; int best = 0; for (i = 1; i < n; i++) if (vec[i] > vec[best]) best = i; return best; } int esl_vec_FArgMax(const float *vec, int n) { int i; int best = 0; for (i = 1; i < n; i++) if (vec[i] > vec[best]) best = i; return best; } int esl_vec_IArgMax(const int *vec, int n) { int i; int best = 0; for (i = 1; i < n; i++) if (vec[i] > vec[best]) best = i; return best; } /* Function: esl_vec_DArgMin() * Synopsis: Return index of minimum element in a vector. * * Purpose: Returns the index of the minimum value in the values * in . * * and do the same, * for float and integer vectors. */ int esl_vec_DArgMin(const double *vec, int n) { int i; int best = 0; for (i = 1; i < n; i++) if (vec[i] < vec[best]) best = i; return best; } int esl_vec_FArgMin(const float *vec, int n) { int i; int best = 0; for (i = 1; i < n; i++) if (vec[i] < vec[best]) best = i; return best; } int esl_vec_IArgMin(const int *vec, int n) { int i; int best = 0; for (i = 1; i < n; i++) if (vec[i] < vec[best]) best = i; return best; } /* some static functions to pass to qsort() that the * upcoming Sort() functions will call */ static int qsort_DIncreasing(const void *xp1, const void *xp2) { double x1 = * (double *) xp1; double x2 = * (double *) xp2; if (x1 < x2) return -1; if (x1 > x2) return 1; return 0; } static int qsort_FIncreasing(const void *xp1, const void *xp2) { float x1 = * (float *) xp1; float x2 = * (float *) xp2; if (x1 < x2) return -1; if (x1 > x2) return 1; return 0; } static int qsort_IIncreasing(const void *xp1, const void *xp2) { int x1 = * (int *) xp1; int x2 = * (int *) xp2; if (x1 < x2) return -1; if (x1 > x2) return 1; return 0; } static int qsort_DDecreasing(const void *xp1, const void *xp2) { double x1 = * (double *) xp1; double x2 = * (double *) xp2; if (x1 > x2) return -1; if (x1 < x2) return 1; return 0; } static int qsort_FDecreasing(const void *xp1, const void *xp2) { float x1 = * (float *) xp1; float x2 = * (float *) xp2; if (x1 > x2) return -1; if (x1 < x2) return 1; return 0; } static int qsort_IDecreasing(const void *xp1, const void *xp2) { int x1 = * (int *) xp1; int x2 = * (int *) xp2; if (x1 > x2) return -1; if (x1 < x2) return 1; return 0; } /* Function: esl_vec_DSortIncreasing() * Synopsis: Sort vector from smallest to largest. * Incept: SRE, Wed Aug 17 10:44:31 2005 [St. Louis] * * Purpose: Sorts in place, from smallest to largest value. * (That is, is the minimum and is * the maximum.) * * and * do the same, for float and integer vectors. */ void esl_vec_DSortIncreasing(double *vec, int n) { qsort((void *) vec, n, sizeof(double), qsort_DIncreasing); } void esl_vec_FSortIncreasing(float *vec, int n) { qsort((void *) vec, n, sizeof(float), qsort_FIncreasing); } void esl_vec_ISortIncreasing(int *vec, int n) { qsort((void *) vec, n, sizeof(int), qsort_IIncreasing); } /* Function: esl_vec_DSortDecreasing() * Synopsis: Sort vector from largest to smallest. * Incept: SRE, Wed Aug 17 10:44:31 2005 [St. Louis] * * Purpose: Sorts in place, from largest to smallest value. * (That is, is the maximum and is * the minimum.) * * and * do the same, for float and integer vectors. */ void esl_vec_DSortDecreasing(double *vec, int n) { qsort((void *) vec, n, sizeof(double), qsort_DDecreasing); } void esl_vec_FSortDecreasing(float *vec, int n) { qsort((void *) vec, n, sizeof(float), qsort_FDecreasing); } void esl_vec_ISortDecreasing(int *vec, int n) { qsort((void *) vec, n, sizeof(int), qsort_IDecreasing); } /* Function: esl_vec_DDump() * Synopsis: Output vector to a stream as text. * Incept: ER, Thu Jul 21 12:54:56 CDT 2005 [St. Louis] * * Purpose: Given a vector, dump it to stream . * * If

, * in bits ($\log_2$), defined as \citep{CoverThomas}: * * \[ * H = - \sum_x p_x \log_2 p_x. * \] * * does the same, for a probability vector * of floats. */ double esl_vec_DEntropy(const double *p, int n) { int i; double entropy; entropy = 0.; for(i = 0; i < n; i++) if (p[i] > 0.) entropy += p[i] * log(p[i]); return(-1.44269504 * entropy); /* converts to bits */ } float esl_vec_FEntropy(const float *p, int n) { int i; float entropy; entropy = 0.; for(i = 0; i < n; i++) if (p[i] > 0.) entropy += p[i] * logf(p[i]); return(-1.44269504 * entropy); /* converts to bits */ } /* Function: esl_vec_DRelEntropy() * Synopsis: Return relative entropy $D(p \parallel q)$ in bits. * Incept: SRE, Fri May 11 09:03:07 2007 [Janelia] * * Purpose: Returns Shannon relative entropy of probability * vectors

and in bits, also known as the * Kullback Leibler "distance" \citep[p.18]{CoverThomas}: * * \[ * D(p \parallel f) = \sum_x p_x \log_2 \frac{p_x}{q_x}. * \] * * If for any $x$ $q_x = 0$ and $p_x > 0$, the relative * entropy is $\infty$. * * does the same, for probability * vectors of floats. */ double esl_vec_DRelEntropy(const double *p, const double *q, int n) { int i; double kl; kl = 0.; for(i = 0; i < n; i++) if (p[i] > 0.) { if (q[i] == 0.) return eslINFINITY; else kl += p[i] * log(p[i]/q[i]); } return(1.44269504 * kl); /* converts to bits */ } float esl_vec_FRelEntropy(const float *p, const float *q, int n) { int i; float kl; kl = 0.; for(i = 0; i < n; i++) if (p[i] > 0.) { if (q[i] == 0.) return eslINFINITY; else kl += p[i] * log(p[i]/q[i]); } return(1.44269504 * kl); /* converts to bits */ } /* Function: esl_vec_DExp() * Synopsis: Converts log probability vector elements to probabilities. * * Purpose: Converts a log probability vector back to a * probability vector: exponentiates each of the * values in the vector. * * This routine only calls on the elements of * vector, which are presumed to be log probabilities; * whether the resulting vector is a properly normalized * probability vector is the caller's problem. * * does the same, for a log probability vector * of floats. */ void esl_vec_DExp(double *vec, int n) { int x; for (x = 0; x < n; x++) vec[x] = exp(vec[x]); } void esl_vec_FExp(float *vec, int n) { int x; for (x = 0; x < n; x++) vec[x] = expf(vec[x]); } /* Function: esl_vec_DLogSum() * Synopsis: Given log-p-vector, return log of sum of probabilities. * * Purpose: is a log probability vector; return the log of the scalar sum * of the probabilities in . That is, the elements in * are log probabilities, but the summation is done in probability * space, by exponentiating each of the values in the vector, * summing, and returning the log of the sum. * * That is: return $\log \sum_i e^{v_i}$. * * The trick is to do this without numerical underflow or overflow. * * does the same, for a log probability vector * of floats. */ double esl_vec_DLogSum(double *vec, int n) { int x; double max, sum; max = esl_vec_DMax(vec, n); if (max == eslINFINITY) return eslINFINITY; /* avoid inf-inf below! */ sum = 0.0; for (x = 0; x < n; x++) if (vec[x] > max - 50.) sum += exp(vec[x] - max); sum = log(sum) + max; return sum; } float esl_vec_FLogSum(float *vec, int n) { int x; float max, sum; max = esl_vec_FMax(vec, n); sum = 0.0; for (x = 0; x < n; x++) if (vec[x] > max - 50.) sum += expf(vec[x] - max); sum = logf(sum) + max; return sum; } /* Function: esl_vec_DLogNorm() * Synopsis: Normalize a log p-vector, make it a p-vector. * Incept: SRE, Thu Apr 7 17:45:39 2005 [St. Louis] * * Purpose: Given an unnormalized log probability vector * of length , normalize it and make it a * probability vector. * * does the same, but for a vector * of floats instead of doubles. * * Returns: (void); is changed in place. */ void esl_vec_DLogNorm(double *vec, int n) { double denom; denom = esl_vec_DLogSum(vec, n); esl_vec_DIncrement(vec, n, -1.*denom); esl_vec_DExp (vec, n); esl_vec_DNorm(vec, n); } void esl_vec_FLogNorm(float *vec, int n) { float denom; denom = esl_vec_FLogSum(vec, n); esl_vec_FIncrement(vec, n, -1.*denom); esl_vec_FExp (vec, n); esl_vec_FNorm(vec, n); } /* Function: esl_vec_DCDF() * Synopsis: Calculate cumulative distribution for a discrete prob vector * Incept: SRE, Wed Jan 12 09:09:42 2011 [Janelia] * * Purpose: Given a probability vector

of length , * calculates its cumulate distribution function * and puts in in caller-allocated space . * Caller must have allocated for at least * elements. * * By definition, , and ought to * be 1.0; however, numerical roundoff error must be tolerated * in the sum. If caller isn't sure about

's provenance, * it may want to check that is tolerably close * to 1.0 (see ). * * It is ok for to be the same space as

* ( is fine); that is,

can be * overwritten by . * * Args: p - input probability vector p[0..n-1] * n - number of elements in p * cdf - RETURN: cumulative distribution for p, in caller-allocated space * * Returns: (void). */ void esl_vec_DCDF(double *p, int n, double *cdf) { int i; cdf[0] = p[0]; for (i = 1; i < n; i++) cdf[i] = p[i] + cdf[i-1]; } void esl_vec_FCDF(float *p, int n, float *cdf) { int i; cdf[0] = p[0]; for (i = 1; i < n; i++) cdf[i] = p[i] + cdf[i-1]; } /* Function: esl_vec_DValidate() * Synopsis: Verifies that vector is p-vector. * Incept: ER, Tue Dec 5 09:38:54 EST 2006 [janelia] * * Purpose: Validate a probability vector of length . * Each element has to be between 0 and 1, and * the sum of all elements has to be 1. * * Args: v - p vector to validate. * n - dimensionality of v * tol - convergence criterion applied to sum of v * errbuf - NULL, or a failure message buffer allocated * for at least chars. * * Returns: on success, or on validation failure. * Upon failure, if caller provided a non- , * an informative message is left there. */ int esl_vec_DValidate(double *vec, int n, double tol, char *errbuf) { int status; int x; double sum = 0.; if (errbuf) *errbuf = 0; if (n == 0) return eslOK; for (x = 0; x < n; x++) { if (vec[x] < 0.0 || vec[x] > 1.0) ESL_XFAIL(eslFAIL, errbuf, "value %d is not a probability between 0..1", x); sum += vec[x]; } if (fabs(sum - 1.0) > tol) ESL_XFAIL(eslFAIL, errbuf, "vector does not sum to 1.0"); return eslOK; ERROR: return status; } int esl_vec_FValidate(float *vec, int n, float tol, char *errbuf) { int status; int x; float sum = 0.; if (errbuf) *errbuf = 0; if (n == 0) return eslOK; for (x = 0; x < n; x++) { if (vec[x] < 0.0 || vec[x] > 1.0) ESL_XFAIL(eslFAIL, errbuf, "value %d is not a probability between 0..1", x); sum += vec[x]; } if (fabs(sum - 1.0) > tol) ESL_XFAIL(eslFAIL, errbuf, "vector does not sum to 1.0"); return eslOK; ERROR: return status; } /* Function: esl_vec_DLogValidate() * Synopsis: Verify that vector is a log-p-vector. * Incept: ER, Tue Dec 5 09:46:51 EST 2006 [janelia] * * Purpose: Validate a log probability vector of length . * The exp of each element has to be between 0 and 1, and * the sum of all elements has to be 1. * * Args: v - log p vector to validate. * n - dimensionality of v * tol - convergence criterion applied to sum of exp v * errbuf - NULL, or a failure message buffer allocated * for at least p7_ERRBUFSIZE chars. * * Returns: on success, or on failure; upon failure, * if caller provided a non- , an informative * message is left there. * * Throws: on allocation failure. */ int esl_vec_DLogValidate(double *vec, int n, double tol, char *errbuf) { int status; double *expvec = NULL; if (errbuf) *errbuf = 0; if (n == 0) return eslOK; ESL_ALLOC(expvec, sizeof(double)*n); esl_vec_DCopy(vec, n, expvec); esl_vec_DExp(expvec, n); if ((status = esl_vec_DValidate(expvec, n, tol, errbuf)) != eslOK) goto ERROR; free(expvec); return eslOK; ERROR: if (expvec != NULL) free(expvec); return status; } int esl_vec_FLogValidate(float *vec, int n, float tol, char *errbuf) { int status; float *expvec = NULL; if (errbuf) *errbuf = 0; if (n == 0) return eslOK; ESL_ALLOC(expvec, sizeof(float)*n); esl_vec_FCopy(vec, n, expvec); esl_vec_FExp(expvec, n); if ((status = esl_vec_FValidate(expvec, n, tol, errbuf)) != eslOK) goto ERROR; free(expvec); return eslOK; ERROR: if (expvec != NULL) free(expvec); return eslOK; } #ifdef eslAUGMENT_RANDOM #include "esl_random.h" /* Function: esl_vec_DShuffle() * Synopsis: Shuffle a vector, in place. * * Purpose: Shuffle a vector of items, using the * random number generator . */ int esl_vec_DShuffle(ESL_RANDOMNESS *r, double *v, int n) { double swap; int pos; for ( ; n > 1; n--) { pos = esl_rnd_Roll(r, n); swap = v[pos]; v[pos] = v[n-1]; v[n-1] = swap; } return eslOK; } int esl_vec_FShuffle(ESL_RANDOMNESS *r, float *v, int n) { float swap; int pos; for ( ; n > 1; n--) { pos = esl_rnd_Roll(r, n); swap = v[pos]; v[pos] = v[n-1]; v[n-1] = swap; } return eslOK; } int esl_vec_IShuffle(ESL_RANDOMNESS *r, int *v, int n) { int swap; int pos; for ( ; n > 1; n--) { pos = esl_rnd_Roll(r, n); swap = v[pos]; v[pos] = v[n-1]; v[n-1] = swap; } return eslOK; } #endif /*eslAUGMENT_RANDOM*/ /***************************************************************** * 2. Unit tests *****************************************************************/ #ifdef eslVECTOROPS_TESTDRIVE static void utest_pvectors(void) { char *msg = "pvector unit test failed"; double p1[4] = { 0.25, 0.25, 0.25, 0.25 }; double p2[4]; double p3[4]; float p1f[4]; float p2f[4] = { 0.0, 0.5, 0.5, 0.0 }; float p3f[4]; int n = 4; double result; esl_vec_D2F(p1, n, p1f); esl_vec_F2D(p2f, n, p2); if (esl_vec_DValidate(p1, n, 1e-12, NULL) != eslOK) esl_fatal(msg); if (esl_vec_FValidate(p1f, n, 1e-7, NULL) != eslOK) esl_fatal(msg); result = esl_vec_DEntropy(p1, n); if (esl_DCompare(2.0, result, 1e-9) != eslOK) esl_fatal(msg); result = esl_vec_FEntropy(p1f, n); if (esl_DCompare(2.0, result, 1e-9) != eslOK) esl_fatal(msg); result = esl_vec_DEntropy(p2, n); if (esl_DCompare(1.0, result, 1e-9) != eslOK) esl_fatal(msg); result = esl_vec_FEntropy(p2f, n); if (esl_DCompare(1.0, result, 1e-9) != eslOK) esl_fatal(msg); result = esl_vec_DRelEntropy(p2, p1, n); if (esl_DCompare(1.0, result, 1e-9) != eslOK) esl_fatal(msg); result = esl_vec_FRelEntropy(p2f, p1f, n); if (esl_DCompare(1.0, result, 1e-9) != eslOK) esl_fatal(msg); result = esl_vec_DRelEntropy(p1, p2, n); if (result != eslINFINITY) esl_fatal(msg); result = esl_vec_FRelEntropy(p1f, p2f, n); if (result != eslINFINITY) esl_fatal(msg); esl_vec_DLog(p2, n); if (esl_vec_DLogValidate(p2, n, 1e-12, NULL) != eslOK) esl_fatal(msg); esl_vec_DExp(p2, n); if (p2[0] != 0.) esl_fatal(msg); esl_vec_FLog(p2f, n); if (esl_vec_FLogValidate(p2f, n, 1e-7, NULL) != eslOK) esl_fatal(msg); esl_vec_FExp(p2f, n); if (p2f[0] != 0.) esl_fatal(msg); esl_vec_DCopy(p2, n, p3); esl_vec_DScale(p3, n, 10.); esl_vec_DNorm(p3, n); if (esl_vec_DCompare(p2, p3, n, 1e-12) != eslOK) esl_fatal(msg); esl_vec_DLog(p3, n); result = esl_vec_DLogSum(p3, n); if (esl_DCompare(0.0, result, 1e-12) != eslOK) esl_fatal(msg); esl_vec_DIncrement(p3, n, 2.0); esl_vec_DLogNorm(p3, n); if (esl_vec_DCompare(p2, p3, n, 1e-12) != eslOK) esl_fatal(msg); esl_vec_FCopy(p2f, n, p3f); esl_vec_FScale(p3f, n, 10.); esl_vec_FNorm(p3f, n); if (esl_vec_FCompare(p2f, p3f, n, 1e-7) != eslOK) esl_fatal(msg); esl_vec_FLog(p3f, n); result = esl_vec_FLogSum(p3f, n); if (esl_DCompare(0.0, result, 1e-7) != eslOK) esl_fatal(msg); esl_vec_FIncrement(p3f, n, 2.0); esl_vec_FLogNorm(p3f, n); if (esl_vec_FCompare(p2f, p3f, n, 1e-7) != eslOK) esl_fatal(msg); return; } #endif /*eslVECTOROPS_TESTDRIVE*/ /***************************************************************** * 3. Test driver *****************************************************************/ /* gcc -g -Wall -o test -I. -L. -DeslVECTOROPS_TESTDRIVE esl_vectorops.c -leasel -lm */ #ifdef eslVECTOROPS_TESTDRIVE #include "easel.h" #include "esl_vectorops.h" int main(void) { utest_pvectors(); return 0; } #endif /*eslVECTOROPS_TESTDRIVE*/ /***************************************************************** * 4. Examples *****************************************************************/ #ifdef eslVECTOROPS_EXAMPLE /*::cexcerpt::vectorops_example::begin::*/ /* gcc -g -Wall -o example -I. -DeslVECTOROPS_EXAMPLE esl_vectorops.c easel.c -lm */ #include "easel.h" #include "esl_vectorops.h" int main(void) { double *p; char labels[] = "ACGT"; int n = 4; p = malloc(sizeof(double) * n); esl_vec_DSet(p, n, 1.0); esl_vec_DNorm(p, n); esl_vec_DDump(stdout, p, n, labels); free(p); return 0; } /*::cexcerpt::vectorops_example::end::*/ #endif /*eslVECTOROPS_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_vectorops.c 861 2013-04-12 14:43:15Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_vectorops.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_gumbel.tex0000664361611702660230000005761512473612606016241 0ustar wheelerteddy Gumbel statistics are often used to estimate the statistical significance of local alignment scores. The Gumbel distribution is the so-called Type I extreme value distribution (EVD). It occurs so frequently in sequence analysis applications, compared to the type II (Fr\'{e}chet) and type III (Weibull) extreme value distributions, that ``Gumbel'' and ``EVD'' are often used interchangeably in bioinformatics. Easel has a separate module, the \eslmod{gev} module, that implements the generalized extreme value distribution. Karlin/Altschul statistics are a special case of the Gumbel distribution that apply to the scores of ungapped local alignments between infinitely long random sequences. Empirically, Karlin/Altschul statistics also apply reasonably well to the more useful case of gapped alignment of finite-length sequences. Karlin/Altschul statistics predict how the Gumbel's two parameters depend on the length of the query and target sequences. In the case of ungapped alignments, Karlin/Altschul statistics allow the Gumbel parameters to be estimated directly, without the need for a compute-intensive simulation. \subsection{The gumbel API} The \eslmod{gumbel} API consists of the following functions: \vspace{0.5em} \begin{center} \begin{tabular}{ll}\hline \multicolumn{2}{c}{\textbf{evaluating densities and distributions:}}\\ \ccode{esl\_gumbel\_pdf()} & Returns the probability density, $P(S=x)$.\\ \ccode{esl\_gumbel\_logpdf()} & Returns the log of the pdf, $\log P(S=x)$.\\ \ccode{esl\_gumbel\_cdf()} & Returns the cumulative probability distribution, $P(S \leq x)$.\\ \ccode{esl\_gumbel\_logcdf()} & Returns the log of the cdf, $\log P(S \leq x)$.\\ \ccode{esl\_gumbel\_surv()} & Returns right tail mass, 1-cdf, $P(S > x)$\\ \ccode{esl\_gumbel\_logsurv()} & Returns log of 1-cdf, $\log P(S > x)$.\\ \multicolumn{2}{c}{\textbf{sampling:}}\\ \ccode{esl\_gumbel\_Sample()} & Returns a Gumbel-distributed random sample.\\ \multicolumn{2}{c}{\textbf{maximum a posteriori parameter fitting:}}\\ \ccode{esl\_gumbel\_FitComplete()} & Estimates $\mu,\lambda$ from complete data.\\ \ccode{esl\_gumbel\_FitCompleteLoc()} & Estimates $\mu$ when $\lambda$ is known.\\ \ccode{esl\_gumbel\_FitCensored()} & Estimates $\mu,\lambda$ from censored data.\\ \ccode{esl\_gumbel\_FitCensoredLoc()} & Estimates $\mu$ when $\lambda$ is known.\\ \ccode{esl\_gumbel\_FitTruncated()}& Estimates $\mu,\lambda$ from truncated data.\\\hline \end{tabular} \end{center} \vspace{0.5em} The Gumbel distribution depends on two parameters, $\mu$ and $\lambda$. When $\mu$ and $\lambda$ are known, the statistical significance (P-value) of a single score $x$ is $P(S>x)$, obtained by a call to \ccode{esl\_gumbel\_surv()}. The E-value for obtaining that score or better in searching a database of $N$ sequences is just $NP(S>x)$. When $\mu$ and $\lambda$ are unknown, they are estimated from scores obtained from comparisons of simulated random data. (Analytical solutions for $\mu$ and $\lambda$ are only available in the case of ungapped sequence alignments.) The \ccode{esl\_evd\_Fit*()} functions provide maximum likelihood parameter fitting routines for different types of data. \subsubsection{Augmentations: random, minimizer} The \ccode{esl\_gumbel\_Sample()} function requires augmenting with the \eslmod{random} module. The \ccode{esl\_gumbel\_FitTruncated()} function requires augmenting with the \eslmod{minimizer} module. \subsection{Example of using the gumbel API} An example that samples 10,000 data points from a Gumbel distribution with $\mu=-20$, $\lambda=0.4$; reports the min and max samples, and the probability mass to the left of the min and to the right of the max (both of which should be about $\frac{1}{10000}$, since we took 10,000 samples); and then fits those simulated data to a Gumbel and reports the fitted $\mu$ and $\lambda$: \input{cexcerpts/gumbel_example} \subsection{Gumbel densities} The probability density function (pdf) and the cumulative distribution function (cdf) of the extreme value distribution are: \begin{equation} P(x) = \lambda \exp \left[ -\lambda (x - \mu) - e^{- \lambda (x - \mu)} \right] \label{eqn:gumbel_density} \end{equation} \begin{equation} P(S < x) = \exp \left[ -e^{-\lambda(x - \mu)} \right] \label{eqn:gumbel_distribution} \end{equation} The extreme value density and distribution functions for $\mu = 0$ and $\lambda = 1.0$ are shown below. \begin{center} \includegraphics[width=3in]{figures/evd_basic} \end{center} The $\mu$ and $\lambda$ parameters are {\em location} and {\em scale} parameters, respectively: \centerline{ \begin{minipage}{3in} \includegraphics[width=2.8in]{figures/evd_location} \end{minipage} \begin{minipage}{3in} \includegraphics[width=2.8in]{figures/evd_scale} \end{minipage} } For more details, a classic reference is \citep{Lawless82}. Gumbel distributions can have their long tail to the right or to the left. The form given here is for the long tail to the right. This is the form that arises when the extreme value is a maximum, such as when our score is the maximum over the individual scores of all possible alignments. The equations in \citep{Lawless82} are for extremal minima; use $(x - u) = -(x - \mu)$ and $b = 1 / \lambda$ to convert Lawless' notation to the notation used here. \subsection{Fitting Gumbel distributions to observed data} Given a set of $n$ observed samples $\mathbf{x}$, we may want to estimate the $\mu$ and $\lambda$ parameters. One might try to use linear regression to fit to a $\log \log$ transformation of the $P(S < x)$ histogram, which gives a straight line with slope $-\lambda$ and $x$ intercept $\mu$: \begin{equation} \log \left[ -\log P(S0$. We do a change of variables, and use the transformation $\lambda = e^w$ so we can optimize the unconstrained parameter $w = \log \lambda$ instead of optimizing $\lambda$ directly. The necessary partial derivatives are then: \begin{eqnarray} \frac{\partial \log L}{\partial \mu} & = & n \lambda - \lambda \sum_{i=1}^{n} e^{-\lambda (x_i - \mu)} - \frac{n \lambda \exp \left[ -\lambda (\phi - \mu) - e^{- \lambda (\phi - \mu)} \right]} {1 - \exp(-e^{-\lambda(\phi - \mu)})} \label{eqn:truncated_dmu} \\% \frac{\partial \log L}{\partial w} & = & n - \sum_{i=1}^{n} \lambda(x_i - \mu) + \sum_{i=1}^{n} \lambda(x_i - \mu) e^{-\lambda (x_i - \mu)} + \frac{n\lambda (\phi-\mu) \exp \left[ -\lambda (\phi - \mu) - e^{- \lambda (\phi - \mu)} \right]} {1 - \exp(-e^{-\lambda(\phi - \mu)})} \label{eqn:truncated_dw} \end{eqnarray} This optimization is carried out by \ccode{esl\_evd\_FitTruncated()}. The likelihood (\ref{eqn:truncated_logL}) is implemented in \ccode{tevd\_func()}, and the derivatives (\ref{eqn:truncated_dmu}) and (\ref{eqn:truncated_dw}) are implemented in \ccode{tevd\_dfunc()}. \ccode{esl\_evd\_FitTruncated()} simply sets up the problem and passes it all off to a conjugate gradient descent optimizer. Results on 500 simulated datasets with $\mu = -20, \lambda = 0.4$, truncated at $\phi = -20$ (leaving the right tail, containing about 63\% of the samples): \begin{center} \begin{tabular}{lrrrr} \hline & \multicolumn{4}{c}{\# samples}\\ & 100 & 1000 & 10,000 & 100,000 \\ \% error in $\hat{\mu}$ & 13\%& 2\% & 0.8\% & 0.3\% \\ max error in $\hat{\mu}$ &260\%& 42\% & 3\% & 1\% \\ \% error in $\hat{\lambda}$ & 15\%& 5\% & 2\% & 0.6\% \\ max error in $\hat{\lambda}$ & 68\%& 18\% & 6\% & 2\% \\ \hline \end{tabular} \end{center} Fitting truncated Gumbel distributions is difficult, requiring much more data than fitting complete or censored data. The problem is that the right tail becomes a scale-free exponential when $\phi >> \mu$, and $\mu$ becomes undetermined. Fits become very inaccurate as $\phi$ gets larger than $\mu$, and for sufficiently large $\phi$, the numerical optimizer will completely fail. hmmer-3.1b2/easel/esl_fileparser.h0000664361611702660230000000525412473612606016541 0ustar wheelerteddy/* A simple token-based file parsing system. */ #ifndef eslFILEPARSER_INCLUDED #define eslFILEPARSER_INCLUDED #include #include "easel.h" typedef struct { FILE *fp; /* open file pointer, for reading */ char *buf; /* current line; will be modified by esl_strtok(). */ int buflen; /* current allocated length of buf */ char *s; /* used by esl_strtok(); current position in buf. */ char commentchar; /* often '#' */ char *tok; /* _NextLine() may remember a token... */ int toklen; /* ... and its length */ char tokchar; /* ... and char that got overwritten by \0, if any */ char *filename; /* name of opened file; or NULL (if just a stream) */ int linenumber; /* what line is loaded into buf; 1..nlines */ char errbuf[eslERRBUFSIZE]; /* for holding error diagnostics */ int is_buffer; /* the file has been buffered into memory */ char *mem_buffer; /* pointer to the buffered file */ int mem_size; /* size of the buffered file */ int mem_pos; /* current position in the buffer */ } ESL_FILEPARSER; extern int esl_fileparser_Open(const char *filename, const char *envvar, ESL_FILEPARSER **ret_efp); extern ESL_FILEPARSER *esl_fileparser_Create(FILE *fp); extern ESL_FILEPARSER *esl_fileparser_CreateMapped(void *buffer, int size); extern int esl_fileparser_SetCommentChar (ESL_FILEPARSER *efp, char c); extern int esl_fileparser_GetToken (ESL_FILEPARSER *efp, char **opt_tok, int *opt_toklen); extern int esl_fileparser_NextLine (ESL_FILEPARSER *efp); extern int esl_fileparser_NextLinePeeked (ESL_FILEPARSER *efp, char *prefix, int plen); extern int esl_fileparser_GetTokenOnLine (ESL_FILEPARSER *efp, char **opt_tok, int *opt_toklen); extern int esl_fileparser_GetRemainingLine(ESL_FILEPARSER *efp, char **ret_s); extern void esl_fileparser_Destroy (ESL_FILEPARSER *efp); extern void esl_fileparser_Close (ESL_FILEPARSER *efp); #endif /*eslFILEPARSER_INCLUDED */ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_workqueue.h0000664361611702660230000000500412473612610016420 0ustar wheelerteddy/* Simple threaded work queue using POSIX threads. * * SVN $Id: esl_workqueue.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_workqueue.h $ */ #ifndef eslWORKQUEUE_INCLUDED #define eslWORKQUEUE_INCLUDED typedef struct { pthread_mutex_t queueMutex; /* mutex for queue serialization */ pthread_cond_t readerQueueCond; /* condition variable used to wake up the producer */ pthread_cond_t workerQueueCond; /* condition variable used to wake up the consumers */ void **readerQueue; /* list of objects the the workers have completed */ int readerQueueCnt; /* number of objects in the queue */ int readerQueueHead; /* first object in the queue */ void **workerQueue; /* list of objects ready to be processed by worker threads */ int workerQueueCnt; /* number of objects in the queue */ int workerQueueHead; /* first object in the queue */ int queueSize; /* max number of items a queue will hold */ int pendingWorkers; /* number of consumers waiting for work */ } ESL_WORK_QUEUE; extern ESL_WORK_QUEUE *esl_workqueue_Create(int size); extern void esl_workqueue_Destroy(ESL_WORK_QUEUE *queue); extern int esl_workqueue_Init (ESL_WORK_QUEUE *queue, void *ptr); extern int esl_workqueue_Complete(ESL_WORK_QUEUE *queue); extern int esl_workqueue_Reset (ESL_WORK_QUEUE *queue); extern int esl_workqueue_Remove(ESL_WORK_QUEUE *queue, void **obj); extern int esl_workqueue_ReaderUpdate(ESL_WORK_QUEUE *queue, void *in, void **out); extern int esl_workqueue_WorkerUpdate(ESL_WORK_QUEUE *queue, void *in, void **out); extern int esl_workqueue_Dump(ESL_WORK_QUEUE *queue); #endif /*eslWORKQUEUE_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_msafile_phylip.c0000664361611702660230000021446512473612607017414 0ustar wheelerteddy/* I/O of multiple sequence alignment files in PHYLIP format(s) * * Contents: * 1. API for reading/writing PHYLIP format alignment files * 2. I/O of the interleaved variant of the format * 3. I/O of the sequential variant of the format * 4. Autodetection of format and its variants * 5. Rectifying valid input/output symbols in names, seqs * 6. Unit tests * 7. Test driver * 8. Example * 9. Copyright and license information. * * See: http://evolution.genetics.washington.edu/phylip/doc/sequence.html */ #include "esl_config.h" #include #include #include #include #include "easel.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif #include "esl_mem.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_phylip.h" #define eslMSAFILE_PHYLIP_LEGALSYMS "-ABCDEFGHIJKLMNOPQRSTUVWZYX*?." static int phylip_interleaved_Read(ESLX_MSAFILE *afp, ESL_MSA *msa, int nseq, int32_t alen_stated); static int phylip_interleaved_Write(FILE *fp, const ESL_MSA *msa, ESLX_MSAFILE_FMTDATA *opt_fmtd); static int phylip_sequential_Read(ESLX_MSAFILE *afp, ESL_MSA *msa, int nseq, int32_t alen_stated); static int phylip_sequential_Write(FILE *fp, const ESL_MSA *msa, ESLX_MSAFILE_FMTDATA *opt_fmtd); static int phylip_check_interleaved (ESL_BUFFER *bf, int *ret_namewidth); static int phylip_check_sequential_known (ESL_BUFFER *bf, int namewidth); static int phylip_check_sequential_unknown(ESL_BUFFER *bf, int *ret_namewidth); static int phylip_parse_header(ESL_BUFFER *bf, int32_t *ret_nseq, int32_t *ret_alen, char **ret_p, esl_pos_t *ret_n); static int phylip_collate_colcodes(char *p, esl_pos_t n, char *colcodes, int ncols); static int phylip_deduce_namewidth(char *colcodes0, int ncols0, int alen, int nres2, int *ret_namewidth); static int phylip_rectify_input_name(char *namebuf, char *p, int n); static int phylip_rectify_output_seq_digital(char *buf); static int phylip_rectify_output_seq_text(char *buf); /***************************************************************** * 1. API for reading/writing PHYLIP format alignment files *****************************************************************/ /* Function: esl_msafile_phylip_SetInmap() * Synopsis: Configure input map for PHYLIP formats. * * Purpose: Set the inmap> for PHYLIP formats. * * Phylip documentation states that DNA programs accept * 'ABCDGHKMNORSTUVWXY?-', that 'a period was previously * allowed' and that O means a deletion. Protein programs * accept 'ABCDEFGHIJKLMNOPQRSTUVWXYZ*?-', and while JOU * are accepted, they are unused. * * So: in text mode, we accept any alphabetic character * plus '-*?.', verbatim. '~_', which Easel would normally * accept, are illegal. Whitespace and numbers are ignored. * * In digital mode, we modify the digital alphabet by * demapping '~_' and making them illegal; '?' is mapped to * missing data; whitespace and numbers are ignored; * and ONLY in or alphabets, 'O' is * mapped to a gap. * * The inconsistent mapping of 'O' poses potential * problems. In text mode (where we don't know the * alphabet, and thus don't know what to do with O), we * input the O verbatim. In digital mode, in a DNA or RNA * alphabet, we map O to a gap; in other digital alphabets, * we use the default digital alphabet mapping of O. * * Xref: http://evolution.genetics.washington.edu/phylip/doc/sequence.html */ int esl_msafile_phylip_SetInmap(ESLX_MSAFILE *afp) { int sym; #ifdef eslAUGMENT_ALPHABET if (afp->abc) { for (sym = 1; sym < 128; sym++) afp->inmap[sym] = afp->abc->inmap[sym]; for (sym = '0'; sym < '9'; sym++) afp->inmap[sym] = eslDSQ_IGNORED; afp->inmap['?'] = esl_abc_XGetMissing(afp->abc); afp->inmap['~'] = eslDSQ_ILLEGAL; afp->inmap['_'] = eslDSQ_ILLEGAL; afp->inmap[' '] = eslDSQ_IGNORED; afp->inmap['\t'] = eslDSQ_IGNORED; afp->inmap[0] = esl_abc_XGetUnknown(afp->abc); if (afp->abc->type == eslDNA || afp->abc->type == eslRNA) afp->inmap['O'] = esl_abc_XGetGap(afp->abc); } #endif if (! afp->abc) { for (sym = 1; sym < 128; sym++) afp->inmap[sym] = eslDSQ_ILLEGAL; for (sym = 'a'; sym <= 'z'; sym++) afp->inmap[sym] = sym; for (sym = 'A'; sym <= 'Z'; sym++) afp->inmap[sym] = sym; for (sym = '0'; sym <= '9'; sym++) afp->inmap[sym] = eslDSQ_IGNORED; afp->inmap['-'] = '-'; afp->inmap['*'] = '*'; afp->inmap['?'] = '?'; afp->inmap['.'] = '.'; afp->inmap[' '] = eslDSQ_IGNORED; afp->inmap['\t'] = eslDSQ_IGNORED; afp->inmap[0] = '?'; } return eslOK; } /* Function: esl_msafile_phylip_GuessAlphabet() * Synopsis: Guess the alphabet of an open PHYLIP MSA input. * * Purpose: Guess the alphabet of the sequences in open * PHYLIP format MSA file . * * On normal return, <*ret_type> is set to , * , or , and is reset to its * original point. * * Args: afp - open PHYLIP format MSA file * *ret_type - RETURN: , , ; or . * * Returns: on success. * if autodetection fails. * * Throws: on allocation error. * on failures of fread() or other system calls */ int esl_msafile_phylip_GuessAlphabet(ESLX_MSAFILE *afp, int *ret_type) { int namewidth = (afp->fmtd.namewidth ? afp->fmtd.namewidth : 10); /* default: strict PHYLIP, namewidth 10 */ int alphatype = eslUNKNOWN; int threshold[3] = { 500, 5000, 50000 }; /* we check after 500, 5000, 50000 residues; else we go to EOF */ int nsteps = 3; /* ...there's 3 threshold[]'s we check */ int step = 0; /* ...starting on threshold[0] */ int64_t nres = 0; char *p; esl_pos_t n, pos; int x; esl_pos_t anchor; int64_t ct[26]; int status; for (x = 0; x < 26; x++) ct[x] = 0; anchor = esl_buffer_GetOffset(afp->bf); if ((status = esl_buffer_SetAnchor(afp->bf, anchor)) != eslOK) { status = eslEINCONCEIVABLE; goto ERROR; } /* [eslINVAL] can't happen here */ /* Find the first nonblank line, which says " " and may also have options. we ignore this header */ while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK && esl_memspn(p, n, " \t") == n) ; if (status == eslEOF) ESL_XFAIL(eslENOALPHABET, afp->errmsg, "can't determine alphabet: no alignment data found"); else if (status != eslOK) goto ERROR; /* Read line by line, just looking for residues, not worrying about nseq/alen or sequential/interleaved * Always skip the name field, even in continuation lines/blocks * This may miss some residues, but it means we work on both sequential and interleaved formats */ while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK) { if (esl_memspn(p, n, " \t") == n) continue; if (n < namewidth) continue; p += namewidth; n -= namewidth; /* count characters into ct[] array */ for (pos = 0; pos < n; pos++) if (isalpha(p[pos])) { x = toupper(p[pos]) - 'A'; ct[x]++; nres++; } /* try to stop early, checking after 500, 5000, and 50000 residues: */ if (step < nsteps && nres > threshold[step]) { if ((status = esl_abc_GuessAlphabet(ct, &alphatype)) == eslOK) goto DONE; /* (eslENOALPHABET) */ step++; } } if (status != eslEOF) goto ERROR; /* [eslEMEM,eslESYS,eslEINCONCEIVABLE] */ status = esl_abc_GuessAlphabet(ct, &alphatype); /* (eslENOALPHABET) */ DONE: esl_buffer_SetOffset(afp->bf, anchor); /* Rewind to where we were. */ esl_buffer_RaiseAnchor(afp->bf, anchor); *ret_type = alphatype; return status; ERROR: if (anchor != -1) { esl_buffer_SetOffset(afp->bf, anchor); esl_buffer_RaiseAnchor(afp->bf, anchor); } *ret_type = eslUNKNOWN; return status; } /* Function: esl_msafile_phylip_Read() * Synopsis: Read in a PHYLIP format alignment. * * Purpose: Read an MSA from an open , parsing for * Phylip format, starting from the current point. The * format may be either the interleaved or sequential * variant, according to the format set in format>: * means interleaved, and * means sequential. Create a new * multiple alignment, and return a ptr to that alignment * in <*ret_msa>. Caller is responsible for free'ing this * . * * Args: afp - open * ret_msa - RETURN: newly parsed * * Returns: on success. * * if no (more) alignment data were found in * , and is returned at EOF. * * on a parse error. <*ret_msa> is set to * . contains information sufficient for * constructing useful diagnostic output: * | errmsg> | user-directed error message | * | linenumber> | line # where error was detected | * | line> | offending line (not NUL-term) | * | n> | length of offending line | * | bf->filename> | name of the file | * and is poised at the start of the following line, * so (in principle) the caller could try to resume * parsing. * * Throws: - an allocation failed. * - a system call such as fread() failed * - "impossible" corruption */ int esl_msafile_phylip_Read(ESLX_MSAFILE *afp, ESL_MSA **ret_msa) { ESL_MSA *msa = NULL; int32_t alen_stated; /* int32_t because we're using strtoi32() to parse it from the file */ int nseq; char *p, *tok; esl_pos_t n, toklen; int status; ESL_DASSERT1( (afp->format == eslMSAFILE_PHYLIP || afp->format == eslMSAFILE_PHYLIPS) ); afp->errmsg[0] = '\0'; /* skip leading blank lines (though there shouldn't be any) */ while ( (status = eslx_msafile_GetLine(afp, &p, &n)) == eslOK && esl_memspn(p, n, " \t") == n) ; if (status != eslOK) goto ERROR; /* includes normal EOF */ /* the first line: */ esl_memtok(&p, &n, " \t", &tok, &toklen); if (esl_mem_strtoi32(tok, toklen, 0, NULL, &nseq) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "first PHYLIP line should be : first field isn't an integer"); if (esl_memtok(&p, &n, " \t", &tok, &toklen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "first PHYLIP line should be : only one field found"); if (esl_mem_strtoi32(tok, toklen, 0, NULL, &alen_stated) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "first PHYLIP line should be : second field isn't an integer"); /* believe and allocate accordingly */ /* don't believe ; use it for validation, after we've parsed everything. */ #ifdef eslAUGMENT_ALPHABET if (afp->abc && (msa = esl_msa_CreateDigital(afp->abc, nseq, -1)) == NULL) { status = eslEMEM; goto ERROR; } #endif if (! afp->abc && (msa = esl_msa_Create( nseq, -1)) == NULL) { status = eslEMEM; goto ERROR; } /* load next line, skipping any blank ones (though there shouldn't be any) */ do { status = eslx_msafile_GetLine(afp, &p, &n); if (status == eslEOF) ESL_XFAIL(eslEFORMAT, afp->errmsg, "no alignment data following PHYLIP header"); else if (status != eslOK) goto ERROR; } while (esl_memspn(p, n, " \t") == n); /* idiom for "blank line" */ /* hand off to interleaved vs. sequential parser for the rest */ if (afp->format == eslMSAFILE_PHYLIP) status = phylip_interleaved_Read(afp, msa, nseq, alen_stated); else if (afp->format == eslMSAFILE_PHYLIPS) status = phylip_sequential_Read (afp, msa, nseq, alen_stated); if (status != eslOK) goto ERROR; if (( status = esl_msa_SetDefaultWeights(msa)) != eslOK) goto ERROR; *ret_msa = msa; return eslOK; ERROR: if (msa) esl_msa_Destroy(msa); *ret_msa = NULL; return status; } /* Function: esl_msafile_phylip_Write() * Synopsis: Write an MSA to a stream in PHYLIP format. * * Purpose: Write alignment in PHYLIP format to stream . * If is , write interleaved format; * if is , write sequential format. * * Optionally, caller may pass additional formatting * information by passing a ptr to a valid * structure. namewidth> sets the width of the * name field. For strict PHYLIP format, this must be 10. * rpl> sets the number of residues per line. * The default is 60. For either value, if it is unset or * if is , the default is used. * * Args: fp - open output stream * msa - alignment to write * format - for interleaved; for sequential. * fmtd - optional: , or additional format information * * Returns: on success. * * Throws: if isn't or . * on allocation failure. * on any system write error, such as a filled disk. */ int esl_msafile_phylip_Write(FILE *fp, const ESL_MSA *msa, int format, ESLX_MSAFILE_FMTDATA *opt_fmtd) { if (format == eslMSAFILE_PHYLIP) return phylip_interleaved_Write(fp, msa, opt_fmtd); else if (format == eslMSAFILE_PHYLIPS) return phylip_sequential_Write (fp, msa, opt_fmtd); else ESL_EXCEPTION(eslEINVAL, "format %s is not a PHYLIP format", eslx_msafile_DecodeFormat(format)); } /* Function: esl_msafile_phylip_CheckFileFormat() * Synopsis: Check whether an input seems to be in PHYLIP format. * * Purpose: Check whether input buffer appears to be * in a PHYLIP format, starting from the current point. * Return if it is, and if it isn't. * * There are two main variants of the format, interleaved * and sequential. Upon successful return, <*ret_format> is * set to for interleaved, or * for sequential. * * Strict PHYLIP format has a name/identifier field width * of exactly 10 characters, but variants of the format are * in common use with different name widths. A guess for * the name width is returned in <*ret_namewidth>. * * If the input doesn't appear to be in PHYLIP format, * return , with <*ret_format> as * and <*ret_namewidth> as 0. * * The PHYLIP format definition is ambiguous. It is * possible to construct pathological inputs that could be * validly parsed to yield different data. This includes * inputs that can be read as either interleaved or * sequential files, or inputs which have different * apparently valid name widths. In ambiguous cases, the * guess defaults to interleaved format, and to a namewidth * of 10, on the theory that these are more common. * * Args: bf - input buffer * *ret_format - RETURN: format variant, , <_PHYLIPS>, <_UNKNOWN> * *ret_namewidth - RETURN: width of name field, in characters * * Returns: if input is in PHYLIP format. * if not. * * Throws: (no abnormal error conditions) */ int esl_msafile_phylip_CheckFileFormat(ESL_BUFFER *bf, int *ret_format, int *ret_namewidth) { int status; if ( (status = phylip_check_interleaved (bf, ret_namewidth)) == eslOK) { *ret_format = eslMSAFILE_PHYLIP; return eslOK; } else if ( (status = phylip_check_sequential_known (bf, 10)) == eslOK) { *ret_format = eslMSAFILE_PHYLIPS; *ret_namewidth = 10; return eslOK; } else if ( (status = phylip_check_sequential_unknown(bf, ret_namewidth)) == eslOK) { *ret_format = eslMSAFILE_PHYLIPS; return eslOK; } *ret_format = eslMSAFILE_UNKNOWN; return eslFAIL; } /*-------------- end, API for PHYLIP format i/o -----------------*/ /***************************************************************** * 2. i/o of the interleaved variant of the format *****************************************************************/ /* Read the interleaved variant. * header told us to expect , . * is already allocated , <-1>. * In , we've loaded the first line of the alignment data. */ static int phylip_interleaved_Read(ESLX_MSAFILE *afp, ESL_MSA *msa, int nseq, int32_t alen_stated) { int namewidth = (afp->fmtd.namewidth ? afp->fmtd.namewidth : 10); /* default: strict PHYLIP, namewidth 10 */ char *namebuf = NULL; int nblocks = 0; int64_t alen = 0; /* alignment length observed so far */ char *p = afp->line; esl_pos_t n = afp->n; int64_t block_alen; /* # of residues being added by current block */ int64_t cur_alen; int idx; int status; ESL_ALLOC(namebuf, sizeof(char) * (namewidth+1)); /* p, n is now the first line of a block */ /* read the alignment data */ do { idx = 0; do { /* First block? store the sequence names */ if (nblocks == 0) { if (n < namewidth) ESL_XFAIL(eslEFORMAT, afp->errmsg, "PHYLIP line too short to find sequence name"); if (phylip_rectify_input_name(namebuf, p, namewidth) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "invalid character(s) in sequence name"); if ( (status = esl_msa_SetSeqName(msa, idx, namebuf, -1)) != eslOK) goto ERROR; p += namewidth; n -= namewidth; } /* Append the sequence. */ cur_alen = alen; #ifdef eslAUGMENT_ALPHABET if (msa->abc) { status = esl_abc_dsqcat(afp->inmap, &(msa->ax[idx]), &(cur_alen), p, n); } #endif if (! msa->abc) { status = esl_strmapcat (afp->inmap, &(msa->aseq[idx]), &(cur_alen), p, n); } if (status == eslEINVAL) ESL_XFAIL(eslEFORMAT, afp->errmsg, "one or more invalid sequence characters"); else if (status != eslOK) goto ERROR; /* validate # of residues added */ if (idx == 0) block_alen = cur_alen - alen; else if (cur_alen - alen != block_alen) ESL_XFAIL(eslEFORMAT, afp->errmsg, "number of residues on line differs from previous seqs in alignment block"); /* get next line. */ idx++; status = eslx_msafile_GetLine(afp, &p, &n); } while (status == eslOK && idx < nseq && esl_memspn(p, n, " \t") < n); /* stop block on: read error, EOF; idx == nseq; or blank line */ if (idx != nseq) ESL_XFAIL(eslEFORMAT, afp->errmsg, "unexpected number of sequences in block (saw %d, expected %d)", idx, nseq); nblocks += 1; alen += block_alen; /* tolerate blank lines only at the end of a block */ while (status == eslOK && esl_memspn(p, n, " \t") == n) status = eslx_msafile_GetLine(afp, &p, &n); /* [eslEMEM,eslESYS] */ /* now status can be: read error, EOF, or OK. */ } while (status == eslOK && alen < alen_stated); /* End of all blocks. We swallowed blank lines following last block, * so we should be EOF; unless we're in a seqboot file, in which * case we just read the first line of the next MSA. */ if (status == eslOK) eslx_msafile_PutLine(afp); /* put line back in the stream, so we will read it properly w/ next msa read */ else if (status != eslEOF) goto ERROR; else if (alen != alen_stated) ESL_XFAIL(eslEFORMAT, afp->errmsg, "alignment length disagrees with header: header said %d, parsed %" PRId64, alen_stated, alen); msa->nseq = nseq; msa->alen = alen; free(namebuf); return eslOK; ERROR: msa->nseq = nseq; /* we're allocated and initialized for : this makes sure we free everything we need to in */ if (namebuf) free(namebuf); return status; } /* Write an interleaved PHYLIP file. * Returns on success. * Throws on any system write error. */ static int phylip_interleaved_Write(FILE *fp, const ESL_MSA *msa, ESLX_MSAFILE_FMTDATA *opt_fmtd) { int rpl = ( (opt_fmtd && opt_fmtd->rpl) ? opt_fmtd->rpl : 60); int namewidth = ( (opt_fmtd && opt_fmtd->namewidth) ? opt_fmtd->namewidth : 10); char *buf = NULL; int idx; int64_t apos; int status; ESL_ALLOC(buf, sizeof(char) * (rpl+1)); buf[rpl] = '\0'; if (fprintf(fp, " %d %" PRId64, msa->nseq, msa->alen) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "interleaved phylip write failed"); for (apos = 0; apos < msa->alen; apos += rpl) { if (fprintf(fp, "\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "interleaved phylip write failed"); for (idx = 0; idx < msa->nseq; idx++) { #ifdef eslAUGMENT_ALPHABET if (msa->abc) { esl_abc_TextizeN(msa->abc, msa->ax[idx]+apos+1, rpl, buf); phylip_rectify_output_seq_digital(buf); } #endif if (! msa->abc) { strncpy(buf, msa->aseq[idx]+apos, rpl); phylip_rectify_output_seq_text(buf); } if (apos == 0) { if (fprintf(fp, "%-*.*s %s\n", namewidth, namewidth, msa->sqname[idx], buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "interleaved phylip write failed"); } else { if (fprintf(fp, "%s\n", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "interleaved phylip write failed"); } } } free(buf); return eslOK; ERROR: if (buf) free(buf); return status; } /*----------------- end, interleaved variant -------------------*/ /***************************************************************** * 3. i/o of sequential variant of the format *****************************************************************/ /* Read the sequential variant. * header told us to expect , . * is already allocated , <-1>. * In , we've loaded the first line of the alignment data. */ static int phylip_sequential_Read(ESLX_MSAFILE *afp, ESL_MSA *msa, int nseq, int32_t alen_stated) { int namewidth = (afp->fmtd.namewidth ? afp->fmtd.namewidth : 10); /* default: strict PHYLIP, namewidth 10 */ char *namebuf = NULL; char *p = afp->line; esl_pos_t n = afp->n; int idx; int64_t alen; int status; ESL_ALLOC(namebuf, sizeof(char) * (namewidth+1)); for (idx = 0; idx < nseq; idx++) { alen = 0; status = eslOK; while (status == eslOK && alen < alen_stated) { if (alen == 0) /* First line? Store the sequence name */ { if (n < namewidth) ESL_XFAIL(eslEFORMAT, afp->errmsg, "PHYLIP line too short to find sequence name"); if (phylip_rectify_input_name(namebuf, p, namewidth) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "invalid character(s) in sequence name"); if ( (status = esl_msa_SetSeqName(msa, idx, namebuf, -1)) != eslOK) goto ERROR; p += namewidth; n -= namewidth; } #ifdef eslAUGMENT_ALPHABET if (msa->abc) { status = esl_abc_dsqcat(afp->inmap, &(msa->ax[idx]), &alen, p, n); } #endif if (! msa->abc) { status = esl_strmapcat (afp->inmap, &(msa->aseq[idx]), &alen, p, n); } if (status == eslEINVAL) ESL_XFAIL(eslEFORMAT, afp->errmsg, "one or more invalid sequence characters"); else if (status != eslOK) goto ERROR; /* get next line */ status = eslx_msafile_GetLine(afp, &p, &n); } /* end looping over a seq */ /* tolerate blank lines after sequences. */ while (status == eslOK && esl_memspn(p, n, " \t") == n) status = eslx_msafile_GetLine(afp, &p, &n); if (status == eslEOF) { if (idx < nseq-1) ESL_XFAIL(eslEFORMAT, afp->errmsg, "premature end of file: header said to expect %d sequences", nseq); } else if (status != eslOK) goto ERROR; else if (alen != alen_stated) ESL_XFAIL(eslEFORMAT, afp->errmsg, "aligned length of sequence disagrees with header: header says %d, parsed %" PRId64, alen_stated, alen); } /* end looping over all seqs */ /* we should be EOF; we've swallowed all trailing blank lines. * Exception: if we're in a seqboot file, we just read the line of the next msa record; push it back on stream */ if (status == eslOK) eslx_msafile_PutLine(afp); msa->nseq = nseq; msa->alen = alen; free(namebuf); return eslOK; ERROR: msa->nseq = nseq; /* we're allocated and initialized for : this makes sure we free everything we need to in */ if (namebuf) free(namebuf); return status; } static int phylip_sequential_Write(FILE *fp, const ESL_MSA *msa, ESLX_MSAFILE_FMTDATA *opt_fmtd) { int rpl = ( (opt_fmtd && opt_fmtd->rpl) ? opt_fmtd->rpl : 60); int namewidth = ( (opt_fmtd && opt_fmtd->namewidth) ? opt_fmtd->namewidth : 10); char *buf = NULL; int idx; int64_t apos; int status; ESL_ALLOC(buf, sizeof(char) * (rpl+1)); buf[rpl] = '\0'; fprintf(fp, " %d %" PRId64 "\n", msa->nseq, msa->alen); for (idx = 0; idx < msa->nseq; idx++) { for (apos = 0; apos < msa->alen; apos += rpl) { #ifdef eslAUGMENT_ALPHABET if (msa->abc) { esl_abc_TextizeN(msa->abc, msa->ax[idx]+apos+1, rpl, buf); phylip_rectify_output_seq_digital(buf); } #endif if (! msa->abc) { strncpy(buf, msa->aseq[idx]+apos, rpl); phylip_rectify_output_seq_text(buf); } if (apos == 0) fprintf(fp, "%-*.*s %s\n", namewidth, namewidth, msa->sqname[idx], buf); else fprintf(fp, "%s\n", buf); } } free(buf); return eslOK; ERROR: if (buf) free(buf); return status; } /*------------------ end, sequential variant --------------------*/ /***************************************************************** * 4. Autodetection of the format and its variants *****************************************************************/ /* return if input is consistent with interleaved format, * and set <*ret_namewidth> to the apparent name width. * * upon return, restore the to its original position. */ static int phylip_check_interleaved(ESL_BUFFER *bf, int *ret_namewidth) { esl_pos_t anchor = -1; char *p; esl_pos_t n; int32_t nseq, alen; char *colcodes = NULL; char *colcodes0 = NULL; int ncols, ncols0; int c, idx; int nblocks = 0; int nres2 = 0; int nres1; int status; anchor = esl_buffer_GetOffset(bf); if (esl_buffer_SetAnchor(bf, anchor) != eslOK) { status = eslFAIL; goto ERROR; } if ((status = phylip_parse_header(bf, &nseq, &alen, &p, &n)) != eslOK) goto ERROR; /* read the whole file, one block at a time */ while (status == eslOK) { ncols = n; ESL_REALLOC(colcodes, sizeof(char) * ncols); for (c = 0; c < ncols; c++) colcodes[c] = '?'; /* read a block: for each line, update the colcodes[] array. */ for (idx = 0; idx < nseq; idx++) { if (status == eslEOF) goto ERROR; if ((status = phylip_collate_colcodes(p, n, colcodes, ncols)) != eslOK) goto ERROR; status = esl_buffer_GetLine(bf, &p, &n); if (status != eslOK && status != eslEOF) goto ERROR; /* EOF is ok on last seq of single-block data */ } /* finished a block. status may be EOF or OK. * save the first block's colcodes[] to defer its analysis * for all other blocks: count x columns, reject n columns, ignore . and o */ if (nblocks == 0) { colcodes0 = colcodes; ncols0 = ncols; colcodes = NULL; ncols = 0; /* let's speculate that it's strictly conforming PHYLIP with a namewidth of 10 * in that case, we'll be able to stop parsing blocks when we reach the full * alignment length */ for (nres1 = 0, c = 10; c < ncols0; c++) if (colcodes0[c] != '.') nres1++; /* for this test, consider even invalid symbols to be "residues". */ } else { for (c = 0; c < ncols; c++) { if (colcodes[c] == 'x') nres2++; if (colcodes[c] == 'n') { status = eslFAIL; goto ERROR; } /* subsequent blocks can't contain name-like columns */ } } nblocks++; /* if it's strictly conforming w/ namewidth=10, we know when we're done, * and in that case we can tolerate trailing data (tree, whatever) in the * input. status will be eslOK if we break this way. */ if (nres1+nres2 == alen) break; /* skip blank lines until we load start of next block in

, */ while (status == eslOK && esl_memspn(p, n, "\t") == n) status = esl_buffer_GetLine(bf, &p, &n); } if (nres1+nres2 == alen) *ret_namewidth = 10; else if ((status = phylip_deduce_namewidth(colcodes0, ncols0, alen, nres2, ret_namewidth)) != eslOK) goto ERROR; free(colcodes); free(colcodes0); esl_buffer_SetOffset(bf, anchor); esl_buffer_RaiseAnchor(bf, anchor); return eslOK; ERROR: if (anchor != -1) { esl_buffer_SetOffset(bf, anchor); esl_buffer_RaiseAnchor(bf, anchor); } if (colcodes) free(colcodes); if (colcodes0) free(colcodes0); *ret_namewidth = 0; return status; } /* check for a sequential format file, given a known namewidth (10, for strict PHYLIP) */ static int phylip_check_sequential_known(ESL_BUFFER *bf, int namewidth) { esl_pos_t anchor = -1; char *p; esl_pos_t n; int32_t nseq, alen; int idx, nres, line, c; int status; anchor = esl_buffer_GetOffset(bf); if (esl_buffer_SetAnchor(bf, anchor) != eslOK) { status = eslFAIL; goto ERROR; } if ((status = phylip_parse_header(bf, &nseq, &alen, &p, &n)) != eslOK) goto ERROR; for (idx = 0; idx < nseq; idx++) { nres = 0; line = 0; while (nres < alen) { if (status == eslEOF) goto ERROR; c = (line == 0 ? namewidth : 0); for ( ; c < n; c++) if (strchr(eslMSAFILE_PHYLIP_LEGALSYMS, p[c]) != NULL) nres++; status = esl_buffer_GetLine(bf, &p, &n); if (status != eslOK && status != eslEOF) goto ERROR; } if (nres != alen) { status = eslFAIL; goto ERROR; } /* tolerate blank spaces after individual sequences */ while (status == eslOK && esl_memspn(p, n, "\t") == n) status = esl_buffer_GetLine(bf, &p, &n); if (status != eslOK && status != eslEOF) goto ERROR; } esl_buffer_SetOffset(bf, anchor); esl_buffer_RaiseAnchor(bf, anchor); return eslOK; ERROR: if (anchor != -1) { esl_buffer_SetOffset(bf, anchor); esl_buffer_RaiseAnchor(bf, anchor); } return status; } static int phylip_check_sequential_unknown(ESL_BUFFER *bf, int *ret_namewidth) { esl_pos_t anchor = -1; int nlines = 0; int nblocks = 0; char *p, *p0; esl_pos_t n, n0; int32_t nseq, alen; int b, c, idx; int nres2, nres1; int nwA, nwB, nw_min, nw_max; int status; anchor = esl_buffer_GetOffset(bf); if (esl_buffer_SetStableAnchor(bf, anchor) != eslOK) { status = eslFAIL; goto ERROR; } /* note, a *stable* anchor: we are going to hold first line of each seq for a while */ /* pass 1. number of data lines in file / nseq = integral number of lines per sequence. */ while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK) if (esl_memspn(p, n, " \t") != n) nlines++; if (status != eslEOF) goto ERROR; nlines--; /* not counting the header */ esl_buffer_SetOffset(bf, anchor); /* rewind */ /* pass 2. */ if ((status = phylip_parse_header(bf, &nseq, &alen, &p, &n)) != eslOK) goto ERROR; if (nlines % nseq != 0) { status = eslFAIL; goto ERROR; } nblocks = nlines / nseq; for (idx = 0; idx < nseq; idx++) { nres2 = 0; for (b = 0; b < nblocks; b++) { if (status == eslEOF) goto ERROR; if (b == 0) { p0 = p; n0 = n; } /* defer evaluation of first line until we've counted the rest */ else { for (c = 0; c < n; c++) if (strchr(eslMSAFILE_PHYLIP_LEGALSYMS, p[c]) != NULL) nres2++; } status = esl_buffer_GetLine(bf, &p, &n); if (status != eslOK && status != eslEOF) goto ERROR; } nres1 = alen - nres2; if (nres1 <= 0) return eslFAIL; for (c = n0-1; nres1 && c >= 0; c--) if (strchr(eslMSAFILE_PHYLIP_LEGALSYMS, p0[c]) != NULL) nres1--; if (nres1) { status = eslFAIL; goto ERROR; } nwB = c+1; for (; c >= 0; c--) if (p0[c] != ' ') break; nwA = c+1; nw_min = (idx == 0 ? nwA : ESL_MAX(nwA, nw_min)); /* maximin of nwA values for each seq */ nw_max = (idx == 0 ? nwB : ESL_MIN(nwB, nw_max)); /* minimax of nwB values for each seq */ /* tolerate blank spaces after individual sequences */ while (status == eslOK && esl_memspn(p, n, "\t") == n) status = esl_buffer_GetLine(bf, &p, &n); if (status != eslOK && status != eslEOF) goto ERROR; } if (nw_min <= 10 && nw_max >= 10) *ret_namewidth = 10; else *ret_namewidth = nw_min; esl_buffer_SetOffset(bf, anchor); esl_buffer_RaiseAnchor(bf, anchor); return eslOK; ERROR: if (anchor != -1) { esl_buffer_SetOffset(bf, anchor); esl_buffer_RaiseAnchor(bf, anchor); } *ret_namewidth = 0; return status; } /* parse the header from a buffer (note, NOT an open MSAFILE). * used by the format checkers (before an MSAFILE is open) * return on success, on parse failure. * * Upon return

, contains the first alignment data line, * and the 's point is on the line following that. * */ static int phylip_parse_header(ESL_BUFFER *bf, int32_t *ret_nseq, int32_t *ret_alen, char **ret_p, esl_pos_t *ret_n) { char *p, *tok; esl_pos_t n, toklen; int32_t nseq, alen; int status; /* Find the first nonblank line, which says " " and may also have options (which we'll ignore) */ while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK && esl_memspn(p, n, " \t") == n) ; if (status == eslEOF) status = eslFAIL; if (status != eslOK) goto ERROR; esl_memtok(&p, &n, " \t", &tok, &toklen); if (esl_mem_strtoi32(tok, toklen, 0, NULL, &nseq) != eslOK) { status = eslFAIL; goto ERROR; } if (esl_memtok(&p, &n, " \t", &tok, &toklen) != eslOK) { status = eslFAIL; goto ERROR; } if (esl_mem_strtoi32(tok, toklen, 0, NULL, &alen) != eslOK) { status = eslFAIL; goto ERROR; } /* skip any blank lines, load p,n as first line of putative block */ while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK && esl_memspn(p, n, " \t") == n) ; if (status == eslEOF) status = eslFAIL; if (status != eslOK) goto ERROR; *ret_nseq = nseq; *ret_alen = alen; *ret_p = p; *ret_n = n; return eslOK; ERROR: *ret_nseq = 0; *ret_alen = 0; *ret_p = NULL; *ret_n = 0; return status; } /* * '?' : unset * 'x' : column consists only of valid data symbols * '.' : column consists only of spaces * 'o' : column consists only of spaces or other (invalid) symbols such as numbers * 'n' : column mixes x and (. or o): must be a name column * * A name can contain spaces, valid symbols, other symbols ('x', 'n', '.', 'o') * Any whitespace between name, data must contain only '.' * Spacer columns elsewhere can contain spaces or other symbols (such as numbers): 'o' * Alignment columns must contain only valid data symbols: 'x'. */ static int phylip_collate_colcodes(char *p, esl_pos_t n, char *colcodes, int ncols) { int c; for (c = 0; c < ncols && c < n; c++) { if (strchr(eslMSAFILE_PHYLIP_LEGALSYMS, p[c]) != NULL) { switch (colcodes[c]) { case '?': colcodes[c] = 'x'; break; case '.': colcodes[c] = 'n'; break; } } else if (p[c] == ' ') { switch (colcodes[c]) { case '?': colcodes[c] = '.'; break; case 'x': colcodes[c] = 'n'; break; } } else if (isgraph(p[c])) { switch (colcodes[c]) { case '?': colcodes[c] = 'o'; break; case 'x': colcodes[c] = 'n'; break; case '.': colcodes[c] = 'o'; break; } } else return eslFAIL; } for ( ; c < n; c++) if (strchr(eslMSAFILE_PHYLIP_LEGALSYMS, p[c]) != NULL) return eslFAIL; return eslOK; } static int phylip_deduce_namewidth(char *colcodes0, int ncols0, int alen, int nres2, int *ret_namewidth) { int nres1; int c; int nwA, nwB, namewidth; /* nres1 = alen - nres2 : # of columns that must be provided in first block */ nres1 = alen - nres2; if (nres1 <= 0) return eslFAIL; /* search leftward in first block until we've accounted for enough cols */ /* c becomes the position of the rightmost col before ali data, and hence = maximal namewidth-1 */ for (c = ncols0-1; nres1 && c >= 0; c--) if (colcodes0[c] == 'x') nres1--; if (nres1 > 0) return eslFAIL; nwB = c+1; /* search leftward past whitespace columns that might be trailing the name */ /* c becomes the position of the rightmost non-whitespace column, and hence = minimal namewidth-1 */ for ( ; c >= 0; c--) if (colcodes0[c] != '.') break; nwA = c+1; /* if nwA <= 10 <= nwB, the namewidth is consistent with strict PHYLIP namewidth of 10 */ if (nwA <= 10 && nwB >= 10) namewidth = 10; else namewidth = nwA; *ret_namewidth = namewidth; return eslOK; } /*-------------- end, format autodetection ----------------------*/ /***************************************************************** * 5. Rectifying valid input/output symbols in names and seqs *****************************************************************/ /* We allow any isprint() char in a name, except tabs. * Phylip allows spaces in names, but Easel doesn't. * Internal spaces are converted to underscore _ * Leading and trailing spaces are ignored * namebuf must be allocated at least n+1 chars * returns eslEINVAL if it sees an invalid character */ static int phylip_rectify_input_name(char *namebuf, char *p, int n) { int pos, endpos; int npos = 0; for (endpos = n-1; endpos > 0; endpos--) if (p[endpos] != ' ') break; for (pos = 0; pos <= endpos; pos++) if (p[pos] != ' ') break; for ( ; pos <= endpos; pos++) { if (! isgraph(p[pos]) && p[pos] != ' ') return eslEINVAL; namebuf[npos++] = (p[pos] == ' ' ? '_' : p[pos]); } namebuf[npos] = '\0'; return eslOK; } /* Easel's internal alphabet (and output syms) are compatible with PHYLIP * (upper case, '-' for gaps, '*' for stop codon; except that PHYLIP uses * '?' for missing data */ static int phylip_rectify_output_seq_digital(char *buf) { int i; for (i = 0; buf[i]; i++) { if (buf[i] == '~') buf[i] = '?'; } return eslOK; } static int phylip_rectify_output_seq_text(char *buf) { int i; for (i = 0; buf[i]; i++) { if (islower(buf[i])) buf[i] = toupper(buf[i]); if (strchr("._ ", buf[i]) != NULL) buf[i] = '-'; if (buf[i] == '~') buf[i] = '?'; } return eslOK; } /*---------- end, rectification of name, seq symbols ------------*/ /***************************************************************** * 6. Unit tests *****************************************************************/ #ifdef eslMSAFILE_PHYLIP_TESTDRIVE static void utest_write_good1(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs(" 5 42\n", ofp); fputs("Turkey AAGCTNGGGC ATTTCAGGGT\n", ofp); fputs("Salmo gairAAGCCTTGGC AGTGCAGGGT\n", ofp); fputs("H. SapiensACCGGTTGGC CGTTCAGGGT\n", ofp); fputs("Chimp AAACCCTTGC CGTTACGCTT\n", ofp); fputs("Gorilla AAACCCTTGC CGGTACGCTT\n", ofp); fputs("\n", ofp); fputs("GAGCCCGGGC AATACAGGGT AT\n", ofp); fputs("GAGCCGTGGC CGGGCACGGT AT\n", ofp); fputs("ACAGGTTGGC CGTTCAGGGT AA\n", ofp); fputs("AAACCGAGGC CGGGACACTC AT\n", ofp); fputs("AAACCATTGC CGGTACGCTT AA\n", ofp); *ret_format = eslMSAFILE_PHYLIP; *ret_alphatype = eslDNA; *ret_nseq = 5; *ret_alen = 42; } static void utest_write_good2(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs("7 50 \n", ofp); fputs("thermotogaATGGCGAAGGAAAAATTTGTGAGAACAAAACCGCATGTTAACGTTGGAAC\n", ofp); fputs("TthermophiATGGCGAAGGGCGAGTTTGTTCGGACGAAGCCTCACGTGAACGTGGGGAC \n", ofp); fputs("TaquaticusATGGCGAAGGGCGAGTTTATCCGGACGAAGCCCCACGTGAACGTGGGGAC \n", ofp); fputs("deinonema-ATGGCTAAGGGAACGTTTGAACGCACCAAACCCCACGTGAACGTGGGCAC \n", ofp); fputs("ChlamydiaBATGTCAAAAGAAACTTTTCAACGTAATAAGCCTCATATCAACATAGGGGC \n", ofp); fputs("flexistipsATGTCCAAGCAAAAGTACGAAAGGAAGAAACCTCACGTAAACGTAGGCAC \n", ofp); fputs("borrelia-bATGGCAAAAGAAGTTTTTCAAAGAACAAAGCCGCACATGAATGTTGGAAC \n", ofp); *ret_format = eslMSAFILE_PHYLIP; *ret_alphatype = eslDNA; *ret_nseq = 7; *ret_alen = 50; } static void utest_write_good3(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs(" 3 384\n", ofp); fputs("CYS1_DICDI -----MKVIL LFVLAVFTVF VSS------- --------RG IPPEEQ---- --------SQ \n", ofp); fputs("ALEU_HORVU MAHARVLLLA LAVLATAAVA VASSSSFADS NPIRPVTDRA ASTLESAVLG ALGRTRHALR \n", ofp); fputs("CATH_HUMAN ------MWAT LPLLCAGAWL LGV------- -PVCGAAELS VNSLEK---- --------FH \n", ofp); fputs("\n", ofp); fputs(" FLEFQDKFNK KY-SHEEYLE RFEIFKSNLG KIEELNLIAI NHKADTKFGV NKFADLSSDE \n", ofp); fputs(" FARFAVRYGK SYESAAEVRR RFRIFSESLE EVRSTN---- RKGLPYRLGI NRFSDMSWEE \n", ofp); fputs(" FKSWMSKHRK TY-STEEYHH RLQTFASNWR KINAHN---- NGNHTFKMAL NQFSDMSFAE \n", ofp); fputs("\n", ofp); fputs(" FKNYYLNNKE AIFTDDLPVA DYLDDEFINS IPTAFDWRTR G-AVTPVKNQ GQCGSCWSFS \n", ofp); fputs(" FQATRL-GAA QTCSATLAGN HLMRDA--AA LPETKDWRED G-IVSPVKNQ AHCGSCWTFS \n", ofp); fputs(" IKHKYLWSEP QNCSAT--KS NYLRGT--GP YPPSVDWRKK GNFVSPVKNQ GACGSCWTFS \n", ofp); fputs("\n", ofp); fputs(" TTGNVEGQHF ISQNKLVSLS EQNLVDCDHE CMEYEGEEAC DEGCNGGLQP NAYNYIIKNG \n", ofp); fputs(" TTGALEAAYT QATGKNISLS EQQLVDCAGG FNNF------ --GCNGGLPS QAFEYIKYNG \n", ofp); fputs(" TTGALESAIA IATGKMLSLA EQQLVDCAQD FNNY------ --GCQGGLPS QAFEYILYNK \n", ofp); fputs("\n", ofp); fputs(" GIQTESSYPY TAETGTQCNF NSANIGAKIS NFTMIP-KNE TVMAGYIVST GPLAIAADAV \n", ofp); fputs(" GIDTEESYPY KGVNGV-CHY KAENAAVQVL DSVNITLNAE DELKNAVGLV RPVSVAFQVI \n", ofp); fputs(" GIMGEDTYPY QGKDGY-CKF QPGKAIGFVK DVANITIYDE EAMVEAVALY NPVSFAFEVT \n", ofp); fputs("\n", ofp); fputs(" E-WQFYIGGV F-DIPCN--P NSLDHGILIV GYSAKNTIFR KNMPYWIVKN SWGADWGEQG \n", ofp); fputs(" DGFRQYKSGV YTSDHCGTTP DDVNHAVLAV GYGVENGV-- ---PYWLIKN SWGADWGDNG \n", ofp); fputs(" QDFMMYRTGI YSSTSCHKTP DKVNHAVLAV GYGEKNGI-- ---PYWIVKN SWGPQWGMNG \n", ofp); fputs("\n", ofp); fputs(" YIYLRRGKNT CGVSNFVSTS II-- \n", ofp); fputs(" YFKMEMGKNM CAIATCASYP VVAA \n", ofp); fputs(" YFLIERGKNM CGLAACASYP IPLV\n", ofp); *ret_format = eslMSAFILE_PHYLIP; *ret_alphatype = eslAMINO; *ret_nseq = 3; *ret_alen = 384; } static void utest_write_good4(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs(" 5 42\n", ofp); fputs("Turkey AAGCTNGGGC ATTTCAGGGT\n", ofp); fputs("GAGCCCGGGC AATACAGGGT AT\n", ofp); fputs("Salmo gairAAGCCTTGGC AGTGCAGGGT\n", ofp); fputs("GAGCCGTGGC CGGGCACGGT AT\n", ofp); fputs("H. SapiensACCGGTTGGC CGTTCAGGGT\n", ofp); fputs("ACAGGTTGGC CGTTCAGGGT AA\n", ofp); fputs("Chimp AAACCCTTGC CGTTACGCTT\n", ofp); fputs("AAACCGAGGC CGGGACACTC AT\n", ofp); fputs("Gorilla AAACCCTTGC CGGTACGCTT\n", ofp); fputs("AAACCATTGC CGGTACGCTT AA\n", ofp); *ret_format = eslMSAFILE_PHYLIPS; *ret_alphatype = eslDNA; *ret_nseq = 5; *ret_alen = 42; } static void utest_write_good5(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs(" 3 384\n", ofp); fputs("CYS1_DICDI-----MKVILLFVLAVFTVFVSS---------------RGIPPEEQ------------SQFLEFQDKFNKKY-SHEEY\n", ofp); fputs("LERFEIFKSNLGKIEELNLIAINHKADTKFGVNKFADLSSDEFKNYYLNNKEAIFTDDLPVADYLDDEFINSIPTAFDWRTRG-AVTP\n", ofp); fputs("VKNQGQCGSCWSFSTTGNVEGQHFISQNKLVSLSEQNLVDCDHECMEYEGEEACDEGCNGGLQPNAYNYIIKNGGIQTESSYPYTAET\n", ofp); fputs("GTQCNFNSANIGAKISNFTMIP-KNETVMAGYIVSTGPLAIAADAVE-WQFYIGGVF-DIPCN--PNSLDHGILIVGYSAKNTIFRKN\n", ofp); fputs("MPYWIVKNSWGADWGEQGYIYLRRGKNTCGVSNFVSTSII--\n", ofp); fputs("\n", ofp); fputs("ALEU_HORVUMAHARVLLLALAVLATAAVAVASSSSFADSNPIRPVTDRAASTLESAVLGALGRTRHALRFARFAVRYGKSYESAAEVR\n", ofp); fputs("RRFRIFSESLEEVRSTN----RKGLPYRLGINRFSDMSWEEFQATRL-GAAQTCSATLAGNHLMRDA--AALPETKDWREDG-IVSPVK\n", ofp); fputs("NQAHCGSCWTFSTTGALEAAYTQATGKNISLSEQQLVDCAGGFNNF--------GCNGGLPSQAFEYIKYNGGIDTEESYPYKGVNGV-\n", ofp); fputs("CHYKAENAAVQVLDSVNITLNAEDELKNAVGLVRPVSVAFQVIDGFRQYKSGVYTSDHCGTTPDDVNHAVLAVGYGVENGV-----PYW\n", ofp); fputs("LIKNSWGADWGDNGYFKMEMGKNMCAIATCASYPVVAA\n", ofp); fputs("\n", ofp); fputs("CATH_HUMAN------MWATLPLLCAGAWLLGV--------PVCGAAELSVNSLEK------------FHFKSWMSKHRKTY-STEEYH\n", ofp); fputs("HRLQTFASNWRKINAHN----NGNHTFKMALNQFSDMSFAEIKHKYLWSEPQNCSAT--KSNYLRGT--GPYPPSVDWRKKGNFVSPVK\n", ofp); fputs("NQGACGSCWTFSTTGALESAIAIATGKMLSLAEQQLVDCAQDFNNY--------GCQGGLPSQAFEYILYNKGIMGEDTYPYQGKDGY-\n", ofp); fputs("CKFQPGKAIGFVKDVANITIYDEEAMVEAVALYNPVSFAFEVTQDFMMYRTGIYSSTSCHKTPDKVNHAVLAVGYGEKNGI-----PYW\n", ofp); fputs("IVKNSWGPQWGMNGYFLIERGKNMCGLAACASYPIPLV\n", ofp); fputs("\n", ofp); *ret_format = eslMSAFILE_PHYLIPS; *ret_alphatype = eslAMINO; *ret_nseq = 3; *ret_alen = 384; } /* a tricky one, with a nonstandard name width of 12 (all names end in xx) */ static void utest_write_good6(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs(" 5 42\n", ofp); fputs("Turkey xxAAGCTNGGGC ATTTCAGGGT\n", ofp); fputs("Salmo gairxxAAGCCTTGGC AGTGCAGGGT\n", ofp); fputs("H. SapiensxxACCGGTTGGC CGTTCAGGGT\n", ofp); fputs("Chimp xxAAACCCTTGC CGTTACGCTT\n", ofp); fputs("Gorilla xxAAACCCTTGC CGGTACGCTT\n", ofp); fputs("\n", ofp); fputs("GAGCCCGGGC AATACAGGGT AT\n", ofp); fputs("GAGCCGTGGC CGGGCACGGT AT\n", ofp); fputs("ACAGGTTGGC CGTTCAGGGT AA\n", ofp); fputs("AAACCGAGGC CGGGACACTC AT\n", ofp); fputs("AAACCATTGC CGGTACGCTT AA\n", ofp); *ret_format = eslMSAFILE_PHYLIP; *ret_alphatype = eslDNA; *ret_nseq = 5; *ret_alen = 42; } /* nonstandard name field width in a sequential file. */ static void utest_write_good7(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs(" 5 42\n", ofp); fputs("Turkey xxAAGCTNGGGC ATTTCAGGGT\n", ofp); fputs("GAGCCCGGGC AATACAGGGT AT\n", ofp); fputs("\n", ofp); fputs("Salmo gairxxAAGCCTTGGC AGTGCAGGGT\n", ofp); fputs("GAGCCGTGGC CGGGCACGGT AT\n", ofp); fputs("\n", ofp); fputs("H. SapiensxxACCGGTTGGC CGTTCAGGGT\n", ofp); fputs("ACAGGTTGGC CGTTCAGGGT AA\n", ofp); fputs("\n", ofp); fputs("Chimp xxAAACCCTTGC CGTTACGCTT\n", ofp); fputs("AAACCGAGGC CGGGACACTC AT\n", ofp); fputs("\n", ofp); fputs("Gorilla xxAAACCCTTGC CGGTACGCTT\n", ofp); fputs("AAACCATTGC CGGTACGCTT AA\n", ofp); *ret_format = eslMSAFILE_PHYLIPS; *ret_alphatype = eslDNA; *ret_nseq = 5; *ret_alen = 42; } static void utest_write_bad1(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg) { fputs(" 2 20\n", ofp); fputs("Turkey xAAGCTNGGGC ATTTCAGGGT\n", ofp); fputs("Salmo gairxAAGCCTTGGC AGTGCAGGGT\n", ofp); *ret_alphatype = eslDNA; *ret_errstatus = eslEFORMAT; *ret_linenumber = 3; strcpy(errmsg, "alignment length disagrees"); } static void utest_write_bad2(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg) { fputs(" x 2 20\n", ofp); fputs("Turkey AAGCTNGGGC ATTTCAGGGT\n", ofp); fputs("Salmo gairAAGCCTTGGC AGTGCAGGGT\n", ofp); *ret_alphatype = eslDNA; *ret_errstatus = eslEFORMAT; *ret_linenumber = 1; strcpy(errmsg, "first field isn't an integer"); } static void utest_write_bad3(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg) { fputs(" 2 x\n", ofp); fputs("Turkey AAGCTNGGGC ATTTCAGGGT\n", ofp); fputs("Salmo gairAAGCCTTGGC AGTGCAGGGT\n", ofp); *ret_alphatype = eslDNA; *ret_errstatus = eslEFORMAT; *ret_linenumber = 1; strcpy(errmsg, "second field isn't an integer"); } static void utest_write_bad4(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg) { fputs(" 2\n", ofp); fputs("Turkey AAGCTNGGGC ATTTCAGGGT\n", ofp); fputs("Salmo gairAAGCCTTGGC AGTGCAGGGT\n", ofp); *ret_alphatype = eslDNA; *ret_errstatus = eslEFORMAT; *ret_linenumber = 1; strcpy(errmsg, "only one field found"); } static void utest_write_bad5(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg) { fputs(" 2 20\n", ofp); fputs("\n", ofp); *ret_alphatype = eslDNA; *ret_errstatus = eslEFORMAT; *ret_linenumber = 2; strcpy(errmsg, "no alignment data"); } static void utest_write_bad6(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg) { fputs(" 2 20\n", ofp); fputs("seq1 \n", ofp); fputs("seq2 ACDEFGHIKLMNPQRSTVWY\n", ofp); *ret_alphatype = eslAMINO; *ret_errstatus = eslEFORMAT; *ret_linenumber = 2; strcpy(errmsg, "line too short"); } static void utest_write_bad7(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg) { fputs(" 2 20\n", ofp); fputs("\tseq1_name ACDEFGHIKLMNPQRSTVWY\n", ofp); fputs("seq2_name ACDEFGHIKLMNPQRSTVWY\n", ofp); *ret_alphatype = eslAMINO; *ret_errstatus = eslEFORMAT; *ret_linenumber = 2; strcpy(errmsg, "invalid character(s) in sequence name"); } static void utest_write_bad8(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg) { fputs(" 2 20\n", ofp); fputs("seq1_name ACDEFGHIKLMNPQRSTVWY\n", ofp); fputs("seq2_name ACDEFGHI~LMNPQRSTVWY\n", ofp); *ret_alphatype = eslAMINO; *ret_errstatus = eslEFORMAT; *ret_linenumber = 3; strcpy(errmsg, "one or more invalid sequence characters"); } static void utest_write_bad9(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg) { fputs(" 2 20\n", ofp); fputs("seq1_name ACDEFGHIKLMNPQRSTVWY\n", ofp); fputs("seq2_name ACDEFGHIKLMNPQRSTVW\n", ofp); *ret_alphatype = eslAMINO; *ret_errstatus = eslEFORMAT; *ret_linenumber = 3; strcpy(errmsg, "number of residues on line differs from previous seqs"); } static void utest_write_bad10(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg) { fputs(" 3 40\n", ofp); fputs("seq1_name ACDEFGHIKLMNPQRSTVWY\n", ofp); fputs("seq2_name ACDEFGHIKLMNPQRSTVWY\n", ofp); fputs("\n", ofp); fputs("ACDEFGHIKLMNPQRSTVWY\n", ofp); fputs("ACDEFGHIKLMNPQRSTVWY\n", ofp); *ret_alphatype = eslAMINO; *ret_errstatus = eslEFORMAT; *ret_linenumber = 4; strcpy(errmsg, "unexpected number of sequences in block"); } static void utest_write_bad11(FILE *ofp, int *ret_alphatype, int *ret_errstatus, int *ret_linenumber, char *errmsg) { fputs(" 2 30\n", ofp); fputs("seq1_name ACDEFGHIKLMNPQRSTVWY\n", ofp); fputs("seq2_name ACDEFGHIKLMNPQRSTVWY\n", ofp); fputs("\n", ofp); fputs(" ACDEFGHIKLMNPQRSTVWY\n", ofp); fputs(" ACDEFGHIKLMNPQRSTVWY\n", ofp); fputs("\n", ofp); *ret_alphatype = eslAMINO; *ret_errstatus = eslEFORMAT; *ret_linenumber = 7; strcpy(errmsg, "alignment length disagrees with header"); } static void utest_goodfile(char *filename, int testnumber, int expected_format, int expected_alphatype, int expected_nseq, int expected_alen) { ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESLX_MSAFILE_FMTDATA fmtd; /* for writing formats with nonstandard name field widths */ ESL_MSA *msa1 = NULL; ESL_MSA *msa2 = NULL; char tmpfile1[32] = "esltmpXXXXXX"; char tmpfile2[32] = "esltmpXXXXXX"; FILE *ofp = NULL; int status; eslx_msafile_fmtdata_Init(&fmtd); /* guessing both the format and the alphabet should work: this is a digital open */ if ( (status = eslx_msafile_Open(&abc, filename, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) esl_fatal("phylip good file unit test %d failed: digital open", testnumber); if (afp->format != expected_format) esl_fatal("phylip good file unit test %d failed: format autodetection", testnumber); if (abc->type != expected_alphatype) esl_fatal("phylip good file unit test %d failed: alphabet autodetection", testnumber); /* This is a digital read, using . */ if ( (status = esl_msafile_phylip_Read(afp, &msa1)) != eslOK) esl_fatal("phylip good file unit test %d failed: msa read, digital", testnumber); if (msa1->nseq != expected_nseq || msa1->alen != expected_alen) esl_fatal("phylip good file unit test %d failed: nseq/alen", testnumber); if (esl_msa_Validate(msa1, NULL) != eslOK) esl_fatal("phylip good file test %d failed: msa1 invalid", testnumber); fmtd.namewidth = afp->fmtd.namewidth; eslx_msafile_Close(afp); /* write it back out to a new tmpfile (digital write) */ if ( (status = esl_tmpfile_named(tmpfile1, &ofp)) != eslOK) esl_fatal("phylip good file unit test %d failed: tmpfile creation", testnumber); if ( (status = esl_msafile_phylip_Write(ofp, msa1, expected_format, &fmtd)) != eslOK) esl_fatal("phylip good file unit test %d failed: msa write, digital", testnumber); fclose(ofp); /* now open and read it as text mode, in known format. (We have to pass fmtd now, to deal with the possibility of a nonstandard name width) */ if ( (status = eslx_msafile_Open(NULL, tmpfile1, NULL, expected_format, &fmtd, &afp)) != eslOK) esl_fatal("phylip good file unit test %d failed: text mode open", testnumber); if ( (status = esl_msafile_phylip_Read(afp, &msa2)) != eslOK) esl_fatal("phylip good file unit test %d failed: msa read, text", testnumber); if (esl_msa_Validate(msa2, NULL) != eslOK) esl_fatal("phylip good file test %d failed: msa2 invalid", testnumber); if (msa2->nseq != expected_nseq || msa2->alen != expected_alen) esl_fatal("phylip good file unit test %d failed: nseq/alen", testnumber); fmtd.namewidth = afp->fmtd.namewidth; eslx_msafile_Close(afp); /* write it back out to a new tmpfile (text write) */ if ( (status = esl_tmpfile_named(tmpfile2, &ofp)) != eslOK) esl_fatal("phylip good file unit test %d failed: tmpfile creation", testnumber); if ( (status = esl_msafile_phylip_Write(ofp, msa2, expected_format, &fmtd)) != eslOK) esl_fatal("phylip good file unit test %d failed: msa write, text", testnumber); fclose(ofp); esl_msa_Destroy(msa2); /* open and read it in digital mode */ if ( (status = eslx_msafile_Open(&abc, tmpfile1, NULL, expected_format, &fmtd, &afp)) != eslOK) esl_fatal("phylip good file unit test %d failed: 2nd digital mode open", testnumber); if ( (status = esl_msafile_phylip_Read(afp, &msa2)) != eslOK) esl_fatal("phylip good file unit test %d failed: 2nd digital msa read", testnumber); if (esl_msa_Validate(msa2, NULL) != eslOK) esl_fatal("phylip good file test %d failed: msa2 invalid", testnumber); eslx_msafile_Close(afp); /* this msa should be identical to */ if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal("phylip good file unit test %d failed: msa compare", testnumber); remove(tmpfile1); remove(tmpfile2); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_alphabet_Destroy(abc); } static void utest_badfile(char *filename, int testnumber, int expected_alphatype, int expected_status, int expected_linenumber, char *expected_errmsg) { ESL_ALPHABET *abc = esl_alphabet_Create(expected_alphatype); ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; int status; if ( (status = eslx_msafile_Open(&abc, filename, NULL, eslMSAFILE_PHYLIP, NULL, &afp)) != eslOK) esl_fatal("phylip bad file unit test %d failed: unexpected open failure", testnumber); if ( (status = esl_msafile_phylip_Read(afp, &msa)) != expected_status) esl_fatal("phylip bad file unit test %d failed: unexpected error code", testnumber); if (strstr(afp->errmsg, expected_errmsg) == NULL) esl_fatal("phylip bad file unit test %d failed: unexpected errmsg", testnumber); if (afp->linenumber != expected_linenumber) esl_fatal("phylip bad file unit test %d failed: unexpected linenumber", testnumber); eslx_msafile_Close(afp); esl_alphabet_Destroy(abc); esl_msa_Destroy(msa); } /* PHYLIP's seqboot program can output many MSAs to the same phylip file. * For this reason (only), we allow PHYLIP format to have multiple MSAs per file. * PHYLIP format 'officially' does not document this! */ static void utest_seqboot(void) { char msg[] = "seqboot unit test failed"; char tmpfile[32]; FILE *ofp; int expected_fmt; int expected_alphatype; int expected_nseq; int expected_alen; int expected_nali; int i; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; /* Write a tmp testfile with good1 concatenated 3 times. */ expected_nali = 3; strcpy(tmpfile, "esltmpXXXXXX"); if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg); for (i = 0; i < expected_nali; i++) utest_write_good1(ofp, &expected_fmt, &expected_alphatype, &expected_nseq, &expected_alen); fclose(ofp); /* open it and loop over it, reading MSAs. there should be 3, of the expected size. */ if (eslx_msafile_Open(&abc, tmpfile, /*env=*/NULL, eslMSAFILE_UNKNOWN, /*fmtd=*/NULL, &afp) != eslOK) esl_fatal(msg); if (abc->type != expected_alphatype) esl_fatal(msg); if (afp->format != expected_fmt) esl_fatal(msg); i = 0; while ( eslx_msafile_Read(afp, &msa) == eslOK) { i++; if (msa->nseq != expected_nseq) esl_fatal(msg); if (msa->alen != expected_alen) esl_fatal(msg); esl_msa_Destroy(msa); } if (i != expected_nali) esl_fatal(msg); eslx_msafile_Close(afp); esl_alphabet_Destroy(abc); } #endif /*eslMSAFILE_PHYLIP_TESTDRIVE*/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 7. Test driver *****************************************************************/ #ifdef eslMSAFILE_PHYLIP_TESTDRIVE /* compile: gcc -g -Wall -I. -L. -o esl_msafile_phylip_utest -DeslMSAFILE_PHYLIP_TESTDRIVE esl_msafile_phylip.c -leasel -lm * (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile_phylip_utest -DeslMSAFILE_PHYLIP_TESTDRIVE esl_msafile_phylip.c -leasel -lm * run: ./esl_msafile_phylip_utest */ #include "esl_config.h" #include #include "easel.h" #include "esl_getopts.h" #include "esl_msafile.h" #include "esl_msafile_phylip.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for PHYLIP MSA format module"; int main(int argc, char **argv) { char msg[] = "PHYLIP MSA i/o module test driver failed"; ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); FILE *ofp = NULL; int ngoodtests; int nbadtests; int testnumber = 0; char tmpfile[32]; int expected_format; int expected_alphatype; int expected_errstatus; int expected_linenumber; int expected_nseq; int expected_alen; char expected_errmsg[eslERRBUFSIZE]; /* Test various correct versions of the format */ ngoodtests = 7; for (testnumber = 1; testnumber <= ngoodtests; testnumber++) { strcpy(tmpfile, "esltmpXXXXXX"); if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg); switch (testnumber) { case 1: utest_write_good1 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break; case 2: utest_write_good2 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break; case 3: utest_write_good3 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break; case 4: utest_write_good4 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break; case 5: utest_write_good5 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break; case 6: utest_write_good6 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break; case 7: utest_write_good7 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break; } fclose(ofp); utest_goodfile(tmpfile, testnumber, expected_format, expected_alphatype, expected_nseq, expected_alen); remove(tmpfile); } /* Test for all the possible EFORMAT errors */ nbadtests = 11; for (testnumber = 1; testnumber <= nbadtests; testnumber++) { strcpy(tmpfile, "esltmpXXXXXX"); if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg); switch (testnumber) { case 1: utest_write_bad1 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break; case 2: utest_write_bad2 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break; case 3: utest_write_bad3 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break; case 4: utest_write_bad4 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break; case 5: utest_write_bad5 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break; case 6: utest_write_bad6 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break; case 7: utest_write_bad7 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break; case 8: utest_write_bad8 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break; case 9: utest_write_bad9 (ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break; case 10: utest_write_bad10(ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break; case 11: utest_write_bad11(ofp, &expected_alphatype, &expected_errstatus, &expected_linenumber, expected_errmsg); break; } fclose(ofp); utest_badfile(tmpfile, testnumber, expected_alphatype, expected_errstatus, expected_linenumber, expected_errmsg); remove(tmpfile); } /* Other tests */ utest_seqboot(); esl_getopts_Destroy(go); return 0; } #endif /*eslMSAFILE_PHYLIP_TESTDRIVE*/ /*--------------------- end, test driver ------------------------*/ /***************************************************************** * 8. Example. *****************************************************************/ #ifdef eslMSAFILE_PHYLIP_EXAMPLE /* A full-featured example of reading/writing an MSA in Phylip format(s). gcc -g -Wall -o esl_msafile_phylip_example -I. -L. -DeslMSAFILE_PHYLIP_EXAMPLE esl_msafile_phylip.c -leasel -lm ./esl_msafile_phylip_example */ /*::cexcerpt::msafile_phylip_example::begin::*/ #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_phylip.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-1", "no autodetection; use interleaved PHYLIP", 0 }, { "-2", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-2", "no autodetection; use sequential PHYLIPS", 0 }, { "-q", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "quieter: don't write msa back, just summary", 0 }, { "-t", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use text mode: no digital alphabet", 0 }, { "-w", eslARG_INT, "10", NULL, NULL, NULL, NULL, NULL, "specify that format's name width is ", 0 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is DNA", 0 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is RNA", 0 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is protein", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of guessing, reading, writing PHYLIP formats"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *filename = esl_opt_GetArg(go, 1); int infmt = eslMSAFILE_UNKNOWN; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; ESLX_MSAFILE_FMTDATA fmtd; int status; if (esl_opt_GetBoolean(go, "-1")) infmt = eslMSAFILE_PHYLIP; /* interleaved format */ else if (esl_opt_GetBoolean(go, "-2")) infmt = eslMSAFILE_PHYLIPS; /* sequential format */ if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); /* Variant PHYLIP formats allow nonstandard name field width. * Usually we can successfully guess this, when guessing format. * But if PHYLIP or PHYLIPS format is set (no guessing), caller may also * want to allow a nonstandard name field width to be set. */ eslx_msafile_fmtdata_Init(&fmtd); fmtd.namewidth = esl_opt_GetInteger(go, "-w"); /* Text mode: pass NULL for alphabet. * Digital mode: pass ptr to expected ESL_ALPHABET; and if abc=NULL, alphabet is guessed */ if (esl_opt_GetBoolean(go, "-t")) status = eslx_msafile_Open(NULL, filename, NULL, infmt, &fmtd, &afp); else status = eslx_msafile_Open(&abc, filename, NULL, infmt, &fmtd, &afp); if (status != eslOK) eslx_msafile_OpenFailure(afp, status); if ( (status = esl_msafile_phylip_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); printf("format variant: %s\n", eslx_msafile_DecodeFormat(afp->format)); printf("name width: %d\n", afp->fmtd.namewidth); printf("alphabet: %s\n", (abc ? esl_abc_DecodeType(abc->type) : "none (text mode)")); printf("# of seqs: %d\n", msa->nseq); printf("# of cols: %d\n", (int) msa->alen); printf("\n"); if (afp->fmtd.namewidth != 10) fmtd.namewidth = afp->fmtd.namewidth; if (! esl_opt_GetBoolean(go, "-q")) esl_msafile_phylip_Write(stdout, msa, eslMSAFILE_PHYLIP, &fmtd); esl_msa_Destroy(msa); eslx_msafile_Close(afp); if (abc) esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); exit(0); } /*::cexcerpt::msafile_phylip_example::end::*/ #endif /*eslMSAFILE_PHYLIP_EXAMPLE*/ #ifdef eslMSAFILE_PHYLIP_EXAMPLE2 /* A minimal example. Reading a strict interleaved PHYLIP MSA in text mode. gcc -g -Wall -o esl_msafile_phylip_example2 -I. -L. -DeslMSAFILE_PHYLIP_EXAMPLE2 esl_msafile_phylip.c -leasel -lm ./esl_msafile_phylip_example2 */ /*::cexcerpt::msafile_phylip_example2::begin::*/ #include #include "easel.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_phylip.h" int main(int argc, char **argv) { char *filename = argv[1]; int infmt = eslMSAFILE_PHYLIP; /* or eslMSAFILE_PHYLIPS, for sequential format */ ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; int status; if ( (status = eslx_msafile_Open(NULL, filename, NULL, infmt, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); if ( (status = esl_msafile_phylip_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); printf("# of seqs: %d\n", msa->nseq); printf("# of cols: %d\n", (int) msa->alen); printf("\n"); esl_msafile_phylip_Write(stdout, msa, eslMSAFILE_PHYLIP, NULL); esl_msa_Destroy(msa); eslx_msafile_Close(afp); exit(0); } /*::cexcerpt::msafile_phylip_example::end::*/ #endif /*eslMSAFILE_PHYLIP_EXAMPLE*/ /*--------------------- end of example --------------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msafile_phylip.c 828 2012-12-05 11:56:15Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msafile_phylip.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_sse.tex0000664361611702660230000000254612473612607015552 0ustar wheelerteddy The \eslmod{sse} module provides a few vectorized functions that use the Intel/AMD SSE (Streaming SIMD Extensions) Intrinsics: most importantly, vectorized \ccode{logf()} and \ccode{expf()} routines. The \eslmod{sse} module is only available on platforms that support SSE2 instructions. This includes all modern Intel and AMD processors, but nor PowerPC processors. By default, the Easel configure script enables SSE if it is available on the compilation machine. \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \hyperlink{func:esl_sse_logf()}{\ccode{esl\_sse\_logf()}} & \ccode{r[z] = log x[z]}\\ \hyperlink{func:esl_sse_expf()}{\ccode{esl\_sse\_expf()}} & \ccode{r[z] = exp x[z]}\\ %\hyperlink{func:esl_sse_select_ps()}{\ccode{esl\_sse\_select\_ps()}} & SSE equivalent of \ccode{vec\_sel()}\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{sse} API.} \label{tbl:sse_api} \end{table} \subsection{An example of using the sse API} Figure~\ref{fig:sse_example} shows an example of calculating \ccode{logf()} and \ccode{expf()} on an SSE \ccode{\_\_m128} vector containing four floats. It also shows a useful \ccode{union} idiom for accessing four floats either as an SSE vector or as individual floats. \begin{figure}[ht] \input{cexcerpts/sse_example} \caption{An example of using the \eslmod{sse} module.} \label{fig:sse_example} \end{figure} hmmer-3.1b2/easel/esl_hyperexp.c0000664361611702660230000012011312473612606016234 0ustar wheelerteddy/* Statistical routines for hyperexponential distributions. */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_stats.h" #include "esl_vectorops.h" #include "esl_exponential.h" #include "esl_hyperexp.h" #ifdef eslAUGMENT_RANDOM #include "esl_random.h" #endif #ifdef eslAUGMENT_HISTOGRAM #include "esl_histogram.h" #endif #ifdef eslAUGMENT_MINIMIZER #include "esl_minimizer.h" #endif #ifdef eslAUGMENT_FILEPARSER #include "esl_fileparser.h" #endif /**************************************************************************** *# Routines for the ESL_HYPEREXP object ****************************************************************************/ /* Function: esl_hyperexp_Create() * * Purpose: Creates an object to hold parameters for a -component * hyperexponential. * * Parameters in the object are initialized * ($q_k = \frac{1}{K}$, $\lambda_k = 1$, $\mu = 0$), but * the caller will want to set these according to its own * purposes. * * Args: K - number of components in the mixture * * Returns: ptr to newly allocated/initialized object. * * Throws: NULL on allocation failure. */ ESL_HYPEREXP * esl_hyperexp_Create(int K) { int status; ESL_HYPEREXP *h = NULL; int k; ESL_ALLOC(h, sizeof(ESL_HYPEREXP)); h->q = h->lambda = h->wrk = NULL; h->fixlambda = NULL; h->K = K; h->fixmix = FALSE; ESL_ALLOC(h->q, sizeof(double) * K); ESL_ALLOC(h->lambda, sizeof(double) * K); ESL_ALLOC(h->wrk, sizeof(double) * K); ESL_ALLOC(h->fixlambda, sizeof(char) * K); for (k = 0; k < K; k++) { h->q[k] = 1. / (double) K; h->lambda[k] = 1.; h->fixlambda[k]= 0; } h->mu = 0.; return h; ERROR: esl_hyperexp_Destroy(h); return NULL; } /* Function: esl_hyperexp_Destroy() * * Purpose: Deallocates the hyperexponential parameter object . * * Args: h - ptr to the object to be deallocated. * * Returns: (void). */ void esl_hyperexp_Destroy(ESL_HYPEREXP *h) { if (h == NULL) return; if (h->q != NULL) free(h->q); if (h->lambda != NULL) free(h->lambda); if (h->wrk != NULL) free(h->wrk); if (h->fixlambda!= NULL) free(h->fixlambda); free(h); } /* Function: esl_hyperexp_Copy() * * Purpose: Makes a copy of the hyperexponential parameter object * in . Caller must have already allocated to have * (at least) the same number of components as . * * Args: src - object to be copied * dest - allocated object to copy into * * Returns: on success. * * Throws: if isn't allocated with enough * components to hold a copy of . */ int esl_hyperexp_Copy(ESL_HYPEREXP *src, ESL_HYPEREXP *dest) { int k; if (dest->K < src->K) ESL_EXCEPTION(eslEINCOMPAT, "hyperexponential too small to copy into"); for (k = 0; k < src->K; k++) { dest->q[k] = src->q[k]; dest->lambda[k] = src->lambda[k]; dest->fixlambda[k]= src->fixlambda[k]; } dest->mu = src->mu; dest->K = src->K; dest->fixmix = src->fixmix; return eslOK; } /* Function: esl_hyperexp_FixedUniformMixture() * * Purpose: Set the mixture coeffients to a uniform (1/K) distribution, * and fix them there so they aren't estimable parameters. */ int esl_hyperexp_FixedUniformMixture(ESL_HYPEREXP *h) { int k; for (k = 0; k < h->K; k++) h->q[k] = 1./(double)h->K; h->fixmix = TRUE; return eslOK; } /* Function: esl_hyperexp_SortComponents() * * Purpose: Rearrange the components in a hyperexponential in * order of lambda values, with the highest lambda first. * * Stupid $O(K^2)$ selection sort algorithm here, because we * expect $K$ to be small. */ int esl_hyperexp_SortComponents(ESL_HYPEREXP *h) { int k, kp; char ctmp; double dtmp; for (k = 0; k < h->K-1; k++) { kp = k + esl_vec_DArgMax(h->lambda+k, h->K-k); if (k != kp) { dtmp = h->q[k]; h->q[k] = h->q[kp]; h->q[kp] = dtmp; dtmp = h->lambda[k]; h->lambda[k] = h->lambda[kp]; h->lambda[kp] = dtmp; ctmp = h->fixlambda[k]; h->fixlambda[k] = h->fixlambda[kp]; h->fixlambda[kp] = ctmp; } } return eslOK; } /* Function: esl_hyperexp_Write() * * Purpose: Write hyperexponential parameters from to an open . * * The output format is suitable for input by . * * Returns: on success. * * Throws: on any write error. */ int esl_hyperexp_Write(FILE *fp, ESL_HYPEREXP *hxp) { int k; if (fprintf(fp, "%8d # number of components\n", hxp->K) < 0) ESL_EXCEPTION(eslEWRITE, "hyperexp write failed"); if (fprintf(fp, "%8.2f # mu (for all components)\n", hxp->mu) < 0) ESL_EXCEPTION(eslEWRITE, "hyperexp write failed"); for (k = 0; k < hxp->K; k++) if (fprintf(fp, "%8.6f %12.6f # q[%d], lambda[%d]\n", hxp->q[k], hxp->lambda[k], k, k) < 0) ESL_EXCEPTION(eslEWRITE, "hyperexp write failed"); return eslOK; } /* Function: esl_hyperexp_Dump() * * Purpose: Dump hyperexponential parameters from to an open , * all on one line with no comments. * * The output format is suitable for input by * , like , * though it's intended as a diagnostic dump of the * contents of the object. * * Returns: on success. */ int esl_hyperexp_Dump(FILE *fp, ESL_HYPEREXP *hxp) { int k; fprintf(fp, "%2d ", hxp->K); fprintf(fp, "%6.2f ", hxp->mu); for (k = 0; k < hxp->K; k++) fprintf(fp, "%5.3f %9.6f ", hxp->q[k], hxp->lambda[k]); fprintf(fp, "\n"); return eslOK; } /*----------------- end ESL_HYPEREXP object maintenance --------------------*/ /**************************************************************************** * Routines for evaluating densities and distributions ****************************************************************************/ /* all lambda_k > 0 * all q_k are probabilities, \sum_k q_k = 1 [watch out for q_k=0 in log(q_k)]. * mu <= x < infinity [mu=x is not a problem] */ /* Function: esl_hxp_pdf() * * Purpose: Returns the probability density function $P(X=x)$ for * quantile , given hyperexponential parameters . */ double esl_hxp_pdf(double x, ESL_HYPEREXP *h) { double pdf = 0.; int k; if (x < h->mu) return 0.; for (k = 0; k < h->K; k++) pdf += h->q[k] * esl_exp_pdf(x, h->mu, h->lambda[k]); return pdf; } /* Function: esl_hxp_logpdf() * * Purpose: Returns the log of the PDF ($\log P(X=x)$) for quantile , * given hyperexponential parameters . */ double esl_hxp_logpdf(double x, ESL_HYPEREXP *h) { int k; double z; if (x < h->mu) return -eslINFINITY; for (k = 0; k < h->K; k++) if (h->q[k] == 0.0) h->wrk[k] = -eslINFINITY; else h->wrk[k] = log(h->q[k]) + esl_exp_logpdf(x, h->mu, h->lambda[k]); z = esl_vec_DLogSum(h->wrk, h->K); return z; } /* Function: esl_hxp_cdf() * * Purpose: Returns the cumulative distribution function $P(X \leq x)$ * for quantile , given hyperexponential parameters . */ double esl_hxp_cdf(double x, ESL_HYPEREXP *h) { double cdf = 0.; int k; if (x < h->mu) return 0.; for (k = 0; k < h->K; k++) cdf += h->q[k] * esl_exp_cdf(x, h->mu, h->lambda[k]); return cdf; } /* Function: esl_hxp_logcdf() * * Purpose: Returns the log of the CDF $\log P(X \leq x)$ * for quantile , given hyperexponential parameters . */ double esl_hxp_logcdf(double x, ESL_HYPEREXP *h) { int k; if (x < h->mu) return -eslINFINITY; for (k = 0; k < h->K; k++) if (h->q[k] == 0.0) h->wrk[k] = -eslINFINITY; else h->wrk[k] = log(h->q[k]) + esl_exp_logcdf(x, h->mu, h->lambda[k]); return esl_vec_DLogSum(h->wrk, h->K); } /* Function: esl_hxp_surv() * * Purpose: Returns the survivor function $P(X > x)$ (1-CDF) * for quantile , given hyperexponential parameters . */ double esl_hxp_surv(double x, ESL_HYPEREXP *h) { double srv = 0.; int k; if (x < h->mu) return 1.0; for (k = 0; k < h->K; k++) srv += h->q[k] * esl_exp_surv(x, h->mu, h->lambda[k]); return srv; } /* Function: esl_hxp_logsurv() * * Purpose: Returns the log survivor function $\log P(X > x)$ (log(1-CDF)) * for quantile , given hyperexponential parameters . */ double esl_hxp_logsurv(double x, ESL_HYPEREXP *h) { int k; if (x < h->mu) return 0.0; for (k = 0; k < h->K; k++) if (h->q[k] == 0.0) h->wrk[k] = -eslINFINITY; else h->wrk[k] = log(h->q[k]) + esl_exp_logsurv(x, h->mu, h->lambda[k]); return esl_vec_DLogSum(h->wrk, h->K); } /* Function: esl_hxp_invcdf() * * Purpose: Calculates the inverse CDF for a hyperexponential * returning the quantile at which the CDF is

. * * The inverse CDF of a mixture model has no * analytical expression as far as I'm aware. The calculation * here is a computationally expensive, brute force bisection * search in using the CDF function. It will suffice for * a small number of calls (for plotting applications, for example), * but it is not sufficient for a large number of calls. */ double esl_hxp_invcdf(double p, ESL_HYPEREXP *h) { double x1, x2, xm; /* low, high guesses at x */ double f2, fm; double tol = 1e-6; x1 = h->mu; x2 = h->mu + 1.; do { /* bracket */ x2 = x2 + 2.*(x2-x1); f2 = esl_hxp_cdf(x2, h); } while (f2 < p); do { /* bisection */ xm = (x1+x2) / 2.; fm = esl_hxp_cdf(xm, h); if (fm > p) x2 = xm; else if (fm < p) x1 = xm; else return xm; /* unlikely case of fm==cdf */ } while ( (x2-x1)/(x1+x2-2*h->mu) > tol); xm = (x1+x2) / 2.; return xm; } /*-------------------- end densities & distributions ------------------------*/ /**************************************************************************** * Generic API routines: for general interface w/ histogram module ****************************************************************************/ /* Function: esl_hxp_generic_pdf() * * Purpose: Generic-API version of PDF call. */ double esl_hxp_generic_pdf(double x, void *params) { ESL_HYPEREXP *h = (ESL_HYPEREXP *) params; return esl_hxp_pdf(x, h); } /* Function: esl_hxp_generic_cdf() * * Purpose: Generic-API version of CDF call. */ double esl_hxp_generic_cdf(double x, void *params) { ESL_HYPEREXP *h = (ESL_HYPEREXP *) params; return esl_hxp_cdf(x, h); } /* Function: esl_hxp_generic_surv() * * Purpose: Generic-API version of survivor function. */ double esl_hxp_generic_surv(double x, void *params) { ESL_HYPEREXP *h = (ESL_HYPEREXP *) params; return esl_hxp_surv(x, h); } /* Function: esl_hxp_generic_invcdf() * * Purpose: Generic-API version of inverse CDF. */ double esl_hxp_generic_invcdf(double p, void *params) { ESL_HYPEREXP *h = (ESL_HYPEREXP *) params; return esl_hxp_invcdf(p, h); } /*------------------------ end generic API ---------------------------------*/ /**************************************************************************** * Routines for dumping plots for files ****************************************************************************/ /* Function: esl_hxp_Plot() * * Purpose: Plot some function (for instance, ) * for hyperexponential parameters , for a range of * quantiles x from to in steps of ; * output to an open stream in xmgrace XY input format. * * Returns: on success. * * Throws: on any system write error. */ int esl_hxp_Plot(FILE *fp, ESL_HYPEREXP *h, double (*func)(double x, ESL_HYPEREXP *h), double xmin, double xmax, double xstep) { double x; for (x = xmin; x <= xmax; x += xstep) if (fprintf(fp, "%f\t%g\n", x, (*func)(x, h)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hyperexp plot write failed"); if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "hyperexp plot write failed"); return eslOK; } /*-------------------- end plot dumping routines ---------------------------*/ /**************************************************************************** * Routines for sampling (requires augmentation w/ random module) ****************************************************************************/ #ifdef eslAUGMENT_RANDOM /* Function: esl_hxp_Sample() * * Purpose: Sample a random variate x from a hyperexponential , * given random number source . */ double esl_hxp_Sample(ESL_RANDOMNESS *r, ESL_HYPEREXP *h) { int k; k = esl_rnd_DChoose(r, h->q, h->K); return esl_exp_Sample(r, h->mu, h->lambda[k]); } #endif /*eslAUGMENT_RANDOM*/ /*--------------------------- end sampling ---------------------------------*/ /**************************************************************************** * File input (mixture models are a little too complex to set on commandline) ****************************************************************************/ #ifdef eslAUGMENT_FILEPARSER /* Function: esl_hyperexp_Read() * * Purpose: Reads hyperexponential parameters from an open . * which is an tokenizer for an open stream. * * The first token is , the number of mixture components. * The second token is , the x offset shared by all components. * Then for each mixture component , it reads * a mixture coefficient and a decay parameter * . * * The <2K+2> data tokens must occur in this order, but * they can be grouped into any number of lines, because the * parser ignores line breaks. * * Anything after a <\#> character on a line is a comment, and * is ignored. * * Returns: on success, and points to a new * object. * on "normal" parse failure caused by a bad file * format that's likely the user's fault. * * Throws: if allocation of the new fails. * * * FIXME: All our mixture models (esl_dirichlet, for example) should be * reconciled w/ identical interfaces & behaviour. */ int esl_hyperexp_Read(ESL_FILEPARSER *e, ESL_HYPEREXP **ret_hxp) { ESL_HYPEREXP *hxp = NULL; char *tok; int status = eslOK; int nc; int k; double sum; esl_fileparser_SetCommentChar(e, '#'); if ((status = esl_fileparser_GetToken(e, &tok, NULL)) != eslOK) goto ERROR; nc = atoi(tok); if (nc < 1) { sprintf(e->errbuf, "Expected # of components K >= 1 as first token"); goto ERROR; } if ((hxp = esl_hyperexp_Create(nc)) == NULL) return eslEMEM; /* percolation */ if ((status = esl_fileparser_GetToken(e, &tok, NULL)) != eslOK) goto ERROR; hxp->mu = atof(tok); for (k = 0; k < hxp->K; k++) { if ((status = esl_fileparser_GetToken(e, &tok, NULL)) != eslOK) goto ERROR; hxp->q[k] = atof(tok); if ((status = esl_fileparser_GetToken(e, &tok, NULL)) != eslOK) goto ERROR; hxp->lambda[k] = atof(tok); if (hxp->q[k] < 0. || hxp->q[k] > 1.) { sprintf(e->errbuf, "Expected a mixture coefficient q[k], 0<=q[k]<=1"); goto ERROR; } if (hxp->lambda[k] <= 0.) { sprintf(e->errbuf, "Expected a lambda parameter, lambda>0"); goto ERROR; } } sum = esl_vec_DSum(hxp->q, hxp->K); if (fabs(sum-1.0) > 0.05) { sprintf(e->errbuf, "Expected mixture coefficients to sum to 1"); goto ERROR; } esl_vec_DNorm(hxp->q, hxp->K); *ret_hxp = hxp; return eslOK; ERROR: esl_hyperexp_Destroy(hxp); return eslEFORMAT; } /* Function: esl_hyperexp_ReadFile() * * Purpose: Convenience wrapper around that takes * a filename as an argument, instead of an open . * * This lets you quickly read an object from a file, but it * limits your ability to deal gracefully and flexibly with * 'normal' errors like 'file not found' or 'bad file format'. * Here, all errors are fatal. * * Returns: on success. * * Throws: on an allocation failure. * * on any parse error. Diagnostic information is * unavailable, because the that's holding * that information is internal to this function. * * on any failure to open the file. */ int esl_hyperexp_ReadFile(char *filename, ESL_HYPEREXP **ret_hxp) { FILE *fp; ESL_FILEPARSER *e; int status; if ((fp = fopen(filename, "r")) == NULL) ESL_EXCEPTION(eslENOTFOUND, "file not found"); if ((e = esl_fileparser_Create(fp)) == NULL) { fclose(fp); ESL_EXCEPTION(eslEMEM, "failed to create fileparser"); } esl_fileparser_SetCommentChar(e, '#'); status = esl_hyperexp_Read(e, ret_hxp); esl_fileparser_Destroy(e); fclose(fp); return status; } #endif /*eslAUGMENT_FILEPARSER*/ /**************************************************************************** * Maximum likelihood fitting, complete unbinned data ****************************************************************************/ #ifdef eslAUGMENT_MINIMIZER /* This structure is used to sneak the data into minimizer's generic * (void *) API for all aux data */ struct hyperexp_data { double *x; int n; ESL_HYPEREXP *h; }; /* Given hyperexponential parameters in ; * do appropriate c.o.v.'s to unconstrained real parameters * and fill in the packed parameter vector

. * *

must be allocated for at least (2K-1) doubles: K-1 mixture * coefficients and K lambda parameters. (mu is not a free param). * * First K-1 are $Q_1..Q_{K-1}$ mixture coefficient parameters; $Q_0$ implicitly 0; * cov is $q_k = \frac{e^{Q_k}}{\sum_j e^{Q_j}}$; $Q_k = \log(q_k) - \log(q_0)$. * Then K lambda params; * lambda cov is $\lambda = e^w$, $w = \log(\lambda)$. */ static void hyperexp_pack_paramvector(double *p, int np, ESL_HYPEREXP *h) { int i; /* counter in parameter vector p */ int k; /* counter in mixture components */ double z; /* tmp variable */ /* mixture coefficients */ i = 0; if (! h->fixmix) { z = log(h->q[0]); for (k = 1; k < h->K; k++) p[i++] = log(h->q[k]) - z; } /* exponential parameters */ for (k = 0; k < h->K; k++) if (! h->fixlambda[k]) p[i++] = log(h->lambda[k]); } /* Same as above but in reverse: given parameter vector

, * = 2K-1, do appropriate c.o.v. back to desired parameter space, and * update the hyperexponential . */ static void hyperexp_unpack_paramvector(double *p, int np, ESL_HYPEREXP *h) { int i; /* counter in parameter vector p */ int k; /* counter in mixture components */ double z; /* tmp variable */ /* Fetch the params in their c.o.v. space first */ i = 0; if (! h->fixmix) { h->q[0] = 0; /* implicitly */ for (k = 1; k < h->K; k++) h->q[k] = p[i++]; } for (k = 0; k < h->K; k++) if (! h->fixlambda[k]) h->lambda[k] = p[i++]; /* Convert mix coefficients back to probabilities; * their c.o.v. is q_k = e^{Q_k} / \sum_k e^{Q_k} * which rearranges to exp(Q_k - log[\sum_k e^Q_k]), * and we have the DLogSum() function to compute the log sum. */ if (! h->fixmix) { z = esl_vec_DLogSum(h->q, h->K); for (k = 0; k < h->K; k++) h->q[k] = exp(h->q[k] - z); } /* lambda c.o.v. is \lambda = e^w */ for (k = 0; k < h->K; k++) if (! h->fixlambda[k]) h->lambda[k] = exp(h->lambda[k]); } /* The log likelihood function to be optimized by ML fitting: * This needs to be careful of a case where a lambda = inf. */ static double hyperexp_complete_func(double *p, int np, void *dptr) { struct hyperexp_data *data = (struct hyperexp_data *) dptr; ESL_HYPEREXP *h = data->h; double logL = 0.; int i; hyperexp_unpack_paramvector(p, np, h); for (i = 0; i < data->n; i++) logL += esl_hxp_logpdf(data->x[i], h); return -logL; } /* The gradient of the NLL w.r.t. each free parameter in p. */ static void hyperexp_complete_gradient(double *p, int np, void *dptr, double *dp) { struct hyperexp_data *data = (struct hyperexp_data *) dptr; ESL_HYPEREXP *h = data->h; double pdf; int i,k; int pidx; hyperexp_unpack_paramvector(p, np, h); esl_vec_DSet(dp, np, 0.); for (i = 0; i < data->n; i++) { /* FIXME: I think the calculation below may need to be done * in log space, to avoid underflow errors; see complete_binned_gradient() */ /* Precalculate q_k PDF_k(x) terms, and their sum */ for (k = 0; k < h->K; k++) h->wrk[k] = h->q[k] * esl_exp_pdf(data->x[i], h->mu, h->lambda[k]); pdf = esl_vec_DSum(h->wrk, h->K); pidx = 0; if (! h->fixmix) { for (k = 1; k < h->K; k++) /* generic d/dQ solution for mixture models */ dp[pidx++] -= h->wrk[k]/pdf - h->q[k]; } for (k = 0; k < h->K; k++) if (! h->fixlambda[k]) dp[pidx++] -= (1.-h->lambda[k]*(data->x[i]-h->mu))*h->wrk[k]/pdf; /* d/dw */ } } /* Function: esl_hxp_FitGuess() * * Purpose: Given a sorted vector of observed data samples , * from smallest to largest , calculate a * very crude guesstimate of a fit -- suitable only as a starting * point for further optimization -- and return those parameters * in . * * Assigns $q_k \propto \frac{1}{k}$ and $\mu = \min_i x_i$; * splits $x$ into $K$ roughly equal-sized bins, and * and assigns $\lambda_k$ as the ML estimate from bin $k$. * (If $q_k$ coefficients have already been fixed to * known values, this step is skipped.) */ int esl_hxp_FitGuess(double *x, int n, ESL_HYPEREXP *h) { double tmu; /* current mu */ double mean; /* mean (x-tmu) in a bin */ int i,k; int imin, imax; h->mu = x[0]; /* minimum */ for (k = 0; k < h->K; k++) { if (! h->fixmix) h->q[k] = 1 / (double)(k+1); /* priors ~ 1, 1/2, 1/3... */ imin = (int) ((double)(k*n)/(double)h->K); imax = (int) ((double)((k+1)*n)/(double)h->K); tmu = x[imin]; mean = 0.; for (i = imin; i < imax; i++) mean += x[i] - tmu; mean /= (double)(imax-imin); h->lambda[k] = 1 / mean; } esl_vec_DNorm(h->q, h->K); return eslOK; } /* Function: esl_hxp_FitComplete() * * Purpose: Given a vector of observed data samples * (sorted or unsorted), and an initial guess for * a hyperexponential, find maximum likelihood parameters * by conjugate gradient descent optimization, starting * from and leaving the final optimized solution in * . * * Returns: on success, and contains the fitted * hyperexponential parameters. * * Throws: on allocation error, and is left in * in its initial state. */ int esl_hxp_FitComplete(double *x, int n, ESL_HYPEREXP *h) { struct hyperexp_data data; int status; double *p = NULL; double *u = NULL; double *wrk = NULL; double tol; int np; double fx; int i; tol = 1e-6; /* Determine number of free parameters and allocate */ np = 0; if (! h->fixmix) np += h->K-1; /* K-1 mix coefficients... */ for (i = 0; i < h->K; i++) /* ...and up to K lambdas free */ if (! h->fixlambda[i]) np++; ESL_ALLOC(p, sizeof(double) * np); ESL_ALLOC(u, sizeof(double) * np); ESL_ALLOC(wrk, sizeof(double) * np * 4); /* Copy shared info into the "data" structure */ data.x = x; data.n = n; data.h = h; /* From h, create the parameter vector. */ hyperexp_pack_paramvector(p, np, h); /* Define the step size vector u. */ for (i = 0; i < np; i++) u[i] = 1.0; /* Feed it all to the mighty optimizer. */ status = esl_min_ConjugateGradientDescent(p, u, np, &hyperexp_complete_func, &hyperexp_complete_gradient, (void *) (&data), tol, wrk, &fx); if (status != eslOK) goto ERROR; /* Convert the final parameter vector back to a hyperexponential */ hyperexp_unpack_paramvector(p, np, h); free(p); free(u); free(wrk); esl_hyperexp_SortComponents(h); return eslOK; ERROR: if (p != NULL) free(p); if (u != NULL) free(u); if (wrk != NULL) free(wrk); return status; } /**************************************************************************** * Maximum likelihood fitting, complete binned data xref STL9/143-144 ****************************************************************************/ #ifdef eslAUGMENT_HISTOGRAM /* minimizer API only allows us one generic void ptr to pass * our data through: */ struct hyperexp_binned_data { ESL_HISTOGRAM *g; ESL_HYPEREXP *h; }; static double hyperexp_complete_binned_func(double *p, int np, void *dptr) { struct hyperexp_binned_data *data = (struct hyperexp_binned_data *) dptr; ESL_HISTOGRAM *g = data->g; ESL_HYPEREXP *h = data->h; double logL = 0.; double ai, delta; int i,k; hyperexp_unpack_paramvector(p, np, h); delta = g->w; /* counting over occupied, uncensored histogram bins */ for (i = g->cmin; i <= g->imax; i++) { if (g->obs[i] == 0) continue; /* skip unoccupied ones */ ai = esl_histogram_Bin2LBound(g, i); if (ai < h->mu) ai = h->mu; /* careful about the left boundary: no x < h->mu */ for (k = 0; k < h->K; k++) { h->wrk[k] = log(h->q[k]) - h->lambda[k]*(ai-h->mu); if (delta * h->lambda[k] < eslSMALLX1) h->wrk[k] += log(delta * h->lambda[k]); else h->wrk[k] += log(1 - exp(-delta * h->lambda[k])); } logL += g->obs[i] * esl_vec_DLogSum(h->wrk, h->K); } return -logL; } static void hyperexp_complete_binned_gradient(double *p, int np, void *dptr, double *dp) { struct hyperexp_binned_data *data = (struct hyperexp_binned_data *) dptr; ESL_HISTOGRAM *g = data->g; ESL_HYPEREXP *h = data->h; int i,k; int pidx; double z; double tmp; double ai, delta; hyperexp_unpack_paramvector(p, np, h); esl_vec_DSet(dp, np, 0.); delta = g->w; /* counting over occupied, uncensored histogram bins */ for (i = g->cmin; i <= g->imax; i++) { if (g->obs[i] == 0) continue; ai = esl_histogram_Bin2LBound(g, i); if (ai < h->mu) ai = h->mu; /* careful about the left boundary: no x < h->mu */ /* Calculate log (q_m alpha_m(a_i) terms */ for (k = 0; k < h->K; k++) { h->wrk[k] = log(h->q[k]) - h->lambda[k]*(ai-h->mu); if (delta * h->lambda[k] < eslSMALLX1) h->wrk[k] += log(delta * h->lambda[k]); else h->wrk[k] += log(1 - exp(-delta * h->lambda[k])); } z = esl_vec_DLogSum(h->wrk, h->K); /* z= log \sum_k q_k alpha_k(a_i) */ /* Bump the gradients for Q_1..Q_{K-1} */ pidx = 0; if (! h->fixmix) { for (k = 1; k < h->K; k++) dp[pidx++] -= g->obs[i] * (exp(h->wrk[k] - z) - h->q[k]); } /* Bump the gradients for w_0..w_{K-1} */ for (k = 0; k < h->K; k++) if (! h->fixlambda[k]) { tmp = log(h->q[k]) + log(h->lambda[k])- h->lambda[k]*(ai-h->mu); tmp = exp(tmp - z); tmp *= (ai + delta - h->mu) * exp(-delta * h->lambda[k]) - (ai - h->mu); dp[pidx++] -= g->obs[i] * tmp; } } } /* Function: esl_hxp_FitGuessBinned() * * Purpose: Given a histogram with binned observations; * obtain a very crude guesstimate of a fit -- suitable only * as a starting point for further optimization -- and return * those parameters in . * * Assigns $q_k \propto \frac{1}{k}$ and $\mu = \min_i x_i$; * splits $x$ into $K$ roughly equal-sized bins, and * and assigns $\lambda_k$ as the ML estimate from bin $k$. * If the coefficients have already been set to known values, * this step is skipped. */ int esl_hxp_FitGuessBinned(ESL_HISTOGRAM *g, ESL_HYPEREXP *h) { double sum; int n; int i,k; int nb; double ai; if (g->is_tailfit) h->mu = g->phi; /* all x > mu in this case */ else if (g->is_rounded) h->mu = esl_histogram_Bin2LBound(g, g->imin); else h->mu = g->xmin; nb = g->imax - g->cmin + 1; k = h->K-1; sum = 0; n = 0; for (i = g->imax; i >= g->cmin; i--) { ai = esl_histogram_Bin2LBound(g,i); if (ai < g->xmin) ai = g->xmin; n += g->obs[i]; sum += g->obs[i] * ai; if (i == g->cmin + (k*nb)/h->K) h->lambda[k--] = 1 / ((sum/(double) n) - ai); } if (! h->fixmix) { for (k = 0; k < h->K; k++) h->q[k] = 1 / (double) h->K; } return eslOK; } /* Function: esl_hxp_FitCompleteBinned() * * Purpose: Given a histogram with binned observations, where each * bin i holds some number of observed samples x with values from * lower bound l to upper bound u (that is, $l < x \leq u$), * and given a starting guess for hyperexponential parameters; * * Find maximum likelihood parameters by conjugate gradient * descent, starting from the initial and leaving the * optimized solution in . * * Returns: on success. * * Throws: on allocation error, and is left in its * initial state. */ int esl_hxp_FitCompleteBinned(ESL_HISTOGRAM *g, ESL_HYPEREXP *h) { struct hyperexp_binned_data data; int status; double *p = NULL; double *u = NULL; double *wrk = NULL; double fx; int i; double tol = 1e-6; int np; np = 0; if (! h->fixmix) np = h->K-1; /* K-1 mix coefficients... */ for (i = 0; i < h->K; i++) /* ...and up to K lambdas free. */ if (! h->fixlambda[i]) np++; ESL_ALLOC(p, sizeof(double) * np); ESL_ALLOC(u, sizeof(double) * np); ESL_ALLOC(wrk, sizeof(double) * np * 4); /* Copy shared info into the "data" structure */ data.g = g; data.h = h; /* From h, create the parameter vector. */ hyperexp_pack_paramvector(p, np, h); /* Define the step size vector u. */ for (i = 0; i < np; i++) u[i] = 1.0; /* Feed it all to the mighty optimizer. */ status = esl_min_ConjugateGradientDescent(p, u, np, &hyperexp_complete_binned_func, &hyperexp_complete_binned_gradient, (void *) (&data), tol, wrk, &fx); if (status != eslOK) goto ERROR; /* Convert the final parameter vector back to a hyperexponential */ hyperexp_unpack_paramvector(p, np, h); free(p); free(u); free(wrk); esl_hyperexp_SortComponents(h); return eslOK; ERROR: if (p != NULL) free(p); if (u != NULL) free(u); if (wrk != NULL) free(wrk); return status; } #endif /*eslAUGMENT_HISTOGRAM*/ #endif /*eslAUGMENT_MINIMIZER*/ /*--------------------------- end fitting ----------------------------------*/ /**************************************************************************** * Example main() ****************************************************************************/ #ifdef eslHYPEREXP_EXAMPLE /*::cexcerpt::hyperexp_example::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslHYPEREXP_EXAMPLE\ -DeslAUGMENT_HISTOGRAM -DeslAUGMENT_RANDOM -DeslAUGMENT_MINIMIZER\ esl_hyperexp.c esl_exponential.c esl_histogram.c esl_random.c esl_minimizer.c\ esl_stats.c esl_vectorops.c easel.c -lm * run: ./example */ #include #include "easel.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_hyperexp.h" int main(int argc, char **argv) { ESL_RANDOMNESS *r; /* source of random numbers */ ESL_HISTOGRAM *h; /* histogram to store the data */ ESL_HYPEREXP *hxp; /* hyperexponential to sample from */ ESL_HYPEREXP *ehxp; /* estimated hyperexponential */ double x; /* sampled data point */ int n = 100000; /* number of samples */ double *data; int ndata; int i; hxp = esl_hyperexp_Create(3); hxp->mu = -2.0; hxp->q[0] = 0.6; hxp->q[1] = 0.3; hxp->q[2] = 0.1; hxp->lambda[0] = 1.0; hxp->lambda[1] = 0.3; hxp->lambda[2] = 0.1; r = esl_randomness_Create(0); h = esl_histogram_CreateFull(hxp->mu, 100, 1.0); for (i = 0; i < n; i++) { x = esl_hxp_Sample(r, hxp); esl_histogram_Add(h, x); } esl_histogram_GetData(h, &data, &ndata); /* Plot the empirical (sampled) and expected survivals */ esl_histogram_PlotSurvival(stdout, h); esl_hxp_Plot(stdout, hxp, &esl_hxp_surv, h->xmin, h->xmax, 0.1); /* ML fit to complete data, and plot fitted survival curve */ ehxp = esl_hyperexp_Create(3); esl_hxp_FitGuess(data, ndata, ehxp); esl_hxp_FitComplete(data, ndata, ehxp); esl_hxp_Plot(stdout, ehxp, &esl_hxp_surv, h->xmin, h->xmax, 0.1); /* ML fit to binned data, plot fitted survival curve */ esl_hxp_FitGuessBinned(h, ehxp); esl_hxp_FitCompleteBinned(h, ehxp); esl_hxp_Plot(stdout, ehxp, &esl_hxp_surv, h->xmin, h->xmax, 0.1); esl_randomness_Destroy(r); esl_histogram_Destroy(h); esl_hyperexp_Destroy(hxp); esl_hyperexp_Destroy(ehxp); return 0; } /*::cexcerpt::hyperexp_example::end::*/ #endif /*eslHYPEREXP_EXAMPLE*/ /**************************************************************************** * Test driver ****************************************************************************/ #ifdef eslHYPEREXP_TESTDRIVE /* Compile: gcc -g -Wall -I. -I ~/src/easel -L ~/src/easel -o test\ -DeslHYPEREXP_TESTDRIVE esl_hyperexp.c -leasel -lm */ #include #include #include #include "easel.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_hyperexp.h" int main(int argc, char **argv) { ESL_HISTOGRAM *h; ESL_RANDOMNESS *r; ESL_HYPEREXP *hxp; ESL_HYPEREXP *ehxp; int n = 20000; double binwidth = 0.1; int i; double x; double *data; int ndata; int k, ek, mink; double mindiff, diff; int opti; int be_verbose = FALSE; char *paramfile = NULL; char *plotfile = NULL; FILE *pfp = stdout; int plot_pdf = FALSE; int plot_logpdf = FALSE; int plot_cdf = FALSE; int plot_logcdf = FALSE; int plot_surv = FALSE; int plot_logsurv = FALSE; int xmin_set = FALSE; double xmin; int xmax_set = FALSE; double xmax; int xstep_set = FALSE; double xstep; int do_fixmix = FALSE; for (opti = 1; opti < argc && *(argv[opti]) == '-'; opti++) { if (strcmp(argv[opti], "-f") == 0) do_fixmix = TRUE; else if (strcmp(argv[opti], "-i") == 0) paramfile = argv[++opti]; else if (strcmp(argv[opti], "-n") == 0) n = atoi(argv[++opti]); else if (strcmp(argv[opti], "-o") == 0) plotfile = argv[++opti]; else if (strcmp(argv[opti], "-v") == 0) be_verbose = TRUE; else if (strcmp(argv[opti], "-w") == 0) binwidth = atof(argv[++opti]); else if (strcmp(argv[opti], "-C") == 0) plot_cdf = TRUE; else if (strcmp(argv[opti], "-LC") == 0) plot_logcdf = TRUE; else if (strcmp(argv[opti], "-P") == 0) plot_pdf = TRUE; else if (strcmp(argv[opti], "-LP") == 0) plot_logpdf = TRUE; else if (strcmp(argv[opti], "-S") == 0) plot_surv = TRUE; else if (strcmp(argv[opti], "-LS") == 0) plot_logsurv = TRUE; else if (strcmp(argv[opti], "-XL") == 0) { xmin_set = TRUE; xmin = atof(argv[++opti]); } else if (strcmp(argv[opti], "-XH") == 0) { xmax_set = TRUE; xmax = atof(argv[++opti]); } else if (strcmp(argv[opti], "-XS") == 0) { xstep_set = TRUE; xstep = atof(argv[++opti]); } else ESL_EXCEPTION(eslEINVAL, "bad option"); } if (paramfile != NULL) esl_hyperexp_ReadFile(paramfile, &hxp); else { hxp = esl_hyperexp_Create(3); hxp->mu = -2.0; hxp->q[0] = 0.5; hxp->q[1] = 0.3; hxp->q[2] = 0.2; hxp->lambda[0] = 1.0; hxp->lambda[1] = 0.3; hxp->lambda[2] = 0.1; } if (do_fixmix) esl_hyperexp_FixedUniformMixture(hxp); /* overrides q's above */ if (be_verbose) esl_hyperexp_Dump(stdout, hxp); r = esl_randomness_Create(42); h = esl_histogram_CreateFull(hxp->mu, 100., binwidth); if (plotfile != NULL) { if ((pfp = fopen(plotfile, "w")) == NULL) ESL_EXCEPTION(eslFAIL, "Failed to open plotfile"); } if (! xmin_set) xmin = hxp->mu; if (! xmax_set) xmax = hxp->mu+ 20*(1. / esl_vec_DMin(hxp->lambda, hxp->K)); if (! xstep_set) xstep = 0.1; for (i = 0; i < n; i++) { x = esl_hxp_Sample(r, hxp); esl_histogram_Add(h, x); } esl_histogram_GetData(h, &data, &ndata); /* get sorted data vector */ ehxp = esl_hyperexp_Create(hxp->K); if (do_fixmix) esl_hyperexp_FixedUniformMixture(ehxp); esl_hxp_FitGuess(data, ndata, ehxp); esl_hxp_FitComplete(data, ndata, ehxp); if (be_verbose) esl_hyperexp_Dump(stdout, ehxp); if (fabs( (ehxp->mu-hxp->mu)/hxp->mu ) > 0.01) ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted mu > 1%\n"); for (ek = 0; ek < ehxp->K; ek++) { /* try to match each estimated lambda up to a parametric lambda */ mindiff = 1.0; mink = -1; for (k = 0; k < hxp->K; k++) { diff = fabs( (ehxp->lambda[ek] - hxp->lambda[k]) / hxp->lambda[k]); if (diff < mindiff) { mindiff = diff; mink = k; } } if (mindiff > 0.50) ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted lambda > 50%\n"); if (fabs( (ehxp->q[ek] - hxp->q[mink]) / hxp->q[mink]) > 1.0) ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted q > 2-fold%\n"); } esl_hxp_FitGuessBinned(h, ehxp); esl_hxp_FitCompleteBinned(h, ehxp); if (be_verbose) esl_hyperexp_Dump(stdout, ehxp); if (fabs( (ehxp->mu-hxp->mu)/hxp->mu ) > 0.01) ESL_EXCEPTION(eslFAIL, "Error in (binned) fitted mu > 1%\n"); for (ek = 0; ek < ehxp->K; ek++) { /* try to match each estimated lambda up to a parametric lambda */ mindiff = 1.0; mink = -1; for (k = 0; k < hxp->K; k++) { diff = fabs( (ehxp->lambda[ek] - hxp->lambda[k]) / hxp->lambda[k]); if (diff < mindiff) { mindiff = diff; mink = k; } } if (mindiff > 0.50) ESL_EXCEPTION(eslFAIL, "Error in (binned) fitted lambda > 50%\n"); if (fabs( (ehxp->q[ek] - hxp->q[mink]) / hxp->q[mink]) > 1.0) ESL_EXCEPTION(eslFAIL, "Error in (binned) fitted q > 2-fold\n"); } if (plot_pdf) esl_hxp_Plot(pfp, hxp, &esl_hxp_pdf, xmin, xmax, xstep); if (plot_logpdf) esl_hxp_Plot(pfp, hxp, &esl_hxp_logpdf, xmin, xmax, xstep); if (plot_cdf) esl_hxp_Plot(pfp, hxp, &esl_hxp_cdf, xmin, xmax, xstep); if (plot_logcdf) esl_hxp_Plot(pfp, hxp, &esl_hxp_logcdf, xmin, xmax, xstep); if (plot_surv) esl_hxp_Plot(pfp, hxp, &esl_hxp_surv, xmin, xmax, xstep); if (plot_logsurv) esl_hxp_Plot(pfp, hxp, &esl_hxp_logsurv, xmin, xmax, xstep); if (plotfile != NULL) fclose(pfp); esl_histogram_Destroy(h); esl_hyperexp_Destroy(hxp); esl_hyperexp_Destroy(ehxp); esl_randomness_Destroy(r); return 0; } #endif /*eslHYPEREXP_TESTDRIVE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_hyperexp.c 727 2011-10-24 17:17:32Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_hyperexp.c $ *****************************************************************/ /* xref STL9/140 */ hmmer-3.1b2/easel/esl_msacluster.c0000664361611702660230000003463112473612607016564 0ustar wheelerteddy/* Clustering sequences in an MSA by % identity. * * Table of contents: * 1. Single linkage clustering an MSA by %id * 2. Internal functions, interface to the clustering API * 3. Some internal functions needed for regression tests * 4. Unit tests * 5. Test driver * 6. Example * 7. Copyright and license. * * Augmentations: * eslAUGMENT_ALPHABET: adds support for digital MSAs * * (Wondering why isn't this just part of the cluster or MSA modules? * esl_cluster itself is a core module, dependent only on easel. MSA * clustering involves at least the distance, cluster, and msa * modules. We're better off separating its functionality away into a * more highly derived module.) */ #include "esl_config.h" #include "easel.h" #include "esl_cluster.h" #include "esl_distance.h" #include "esl_msa.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif #include "esl_msacluster.h" /* These functions are going to get defined in an internal regression * testing section further below: */ #if defined(eslMSACLUSTER_REGRESSION) || defined(eslMSAWEIGHT_REGRESSION) #include static double squid_distance(char *s1, char *s2); #ifdef eslAUGMENT_ALPHABET static double squid_xdistance(ESL_ALPHABET *a, ESL_DSQ *x1, ESL_DSQ *x2); #endif #endif /* These functions will define linkage between a pair of text or * digital aseq's: */ static int msacluster_clinkage(const void *v1, const void *v2, const void *p, int *ret_link); #ifdef eslAUGMENT_ALPHABET static int msacluster_xlinkage(const void *v1, const void *v2, const void *p, int *ret_link); #endif /* In digital mode, we'll need to pass the clustering routine two parameters - * %id threshold and alphabet ptr - so make a structure that bundles them. */ #ifdef eslAUGMENT_ALPHABET struct msa_param_s { double maxid; ESL_ALPHABET *abc; }; #endif /***************************************************************** * 1. Single linkage clustering an MSA by %id *****************************************************************/ /* Function: esl_msacluster_SingleLinkage() * Synopsis: Single linkage clustering by percent identity. * Incept: SRE, Sun Nov 5 10:11:45 2006 [Janelia] * * Purpose: Perform single link clustering of the sequences in * multiple alignment . Any pair of sequences with * percent identity $\geq$ are linked (using * the definition from the \eslmod{distance} module). * * The resulting clustering is optionally returned in one * or more of , , and . The * array assigns a cluster index * <(0..nc-1)> to each sequence. For example, * means that sequence 4 is assigned to cluster 1. The * array is the number of sequences * in each cluster. is the number of clusters. * * Importantly, this algorithm runs in $O(N)$ memory, and * produces one discrete clustering. Compare to * , which requires an $O(N^2)$ * adjacency matrix, and produces a hierarchical clustering * tree. * * The algorithm is worst case $O(LN^2)$ time, for $N$ * sequences of length $L$. However, the worst case is no * links at all, and this is unusual. More typically, time * scales as about $LN \log N$. The best case scales as * $LN$, when there is just one cluster in a completely * connected graph. * * Args: msa - multiple alignment to cluster * maxid - pairwise identity threshold: cluster if $\geq$ * opt_c - optRETURN: cluster assignments for each sequence, [0..nseq-1] * opt_nin - optRETURN: number of seqs in each cluster, [0..nc-1] * opt_nc - optRETURN: number of clusters * * Returns: on success; the array contains * cluster indices <0..nc-1> assigned to each sequence; the * array contains the number of seqs in * each cluster; and contains the number of * clusters. The array and arrays will be * allocated here, if non-, and must be free'd by the * caller. The input is unmodified. * * The caller may pass for either or * if it is only interested in one of the two * results. * * Throws: on allocation failure, and if a pairwise * comparison is invalid (which means the MSA is corrupted, so it * shouldn't happen). In either case, and are set to * and is set to 0, and the is unmodified. */ int esl_msacluster_SingleLinkage(const ESL_MSA *msa, double maxid, int **opt_c, int **opt_nin, int *opt_nc) { int status; int *workspace = NULL; int *assignment = NULL; int *nin = NULL; int nc; int i; #ifdef eslAUGMENT_ALPHABET struct msa_param_s param; #endif /* Allocations */ ESL_ALLOC(workspace, sizeof(int) * msa->nseq * 2); ESL_ALLOC(assignment, sizeof(int) * msa->nseq); /* call to SLC API: */ if (! (msa->flags & eslMSA_DIGITAL)) status = esl_cluster_SingleLinkage((void *) msa->aseq, (size_t) msa->nseq, sizeof(char *), msacluster_clinkage, (void *) &maxid, workspace, assignment, &nc); #ifdef eslAUGMENT_ALPHABET else { param.maxid = maxid; param.abc = msa->abc; status = esl_cluster_SingleLinkage((void *) msa->ax, (size_t) msa->nseq, sizeof(ESL_DSQ *), msacluster_xlinkage, (void *) ¶m, workspace, assignment, &nc); } #endif if (opt_nin != NULL) { ESL_ALLOC(nin, sizeof(int) * nc); for (i = 0; i < nc; i++) nin[i] = 0; for (i = 0; i < msa->nseq; i++) nin[assignment[i]]++; *opt_nin = nin; } /* cleanup and return */ free(workspace); if (opt_c != NULL) *opt_c = assignment; else free(assignment); if (opt_nc != NULL) *opt_nc = nc; return eslOK; ERROR: if (workspace != NULL) free(workspace); if (assignment != NULL) free(assignment); if (nin != NULL) free(nin); if (opt_c != NULL) *opt_c = NULL; if (opt_nc != NULL) *opt_nc = 0; return status; } /***************************************************************** * 2. Internal functions, interface to the clustering API *****************************************************************/ /* Definition of %id linkage in text-mode aligned seqs (>= maxid): */ static int msacluster_clinkage(const void *v1, const void *v2, const void *p, int *ret_link) { char *as1 = *(char **) v1; char *as2 = *(char **) v2; double maxid = *(double *) p; double pid; int status = eslOK; #if defined(eslMSACLUSTER_REGRESSION) || defined(eslMSAWEIGHT_REGRESSION) pid = 1. - squid_distance(as1, as2); #else if ((status = esl_dst_CPairId(as1, as2, &pid, NULL, NULL)) != eslOK) return status; #endif *ret_link = (pid >= maxid ? TRUE : FALSE); return status; } /* Definition of % id linkage in digital aligned seqs (>= maxid) */ #ifdef eslAUGMENT_ALPHABET static int msacluster_xlinkage(const void *v1, const void *v2, const void *p, int *ret_link) { ESL_DSQ *ax1 = *(ESL_DSQ **) v1; ESL_DSQ *ax2 = *(ESL_DSQ **) v2; struct msa_param_s *param = (struct msa_param_s *) p; double pid; int status = eslOK; #if defined(eslMSACLUSTER_REGRESSION) || defined(eslMSAWEIGHT_REGRESSION) pid = 1. - squid_xdistance(param->abc, ax1, ax2); #else if ( (status = esl_dst_XPairId(param->abc, ax1, ax2, &pid, NULL, NULL)) != eslOK) return status; #endif *ret_link = (pid >= param->maxid ? TRUE : FALSE); return status; } #endif /***************************************************************** * 3. Some internal functions needed for regression tests *****************************************************************/ /* When regression testing against squid, we have to replace * Easel's distance calculations with a simpler, (even) less robust * calculation that squid did. */ #if defined(eslMSACLUSTER_REGRESSION) || defined(eslMSAWEIGHT_REGRESSION) static double squid_distance(char *s1, char *s2) { int diff = 0; int valid = 0; for (; *s1 != '\0'; s1++, s2++) { if (!isalpha(*s1) || !isalpha(*s2)) continue; if (*s1 != *s2) diff++; valid++; } return (valid > 0 ? ((double) diff / (double) valid) : 0.0); } #ifdef eslAUGMENT_ALPHABET static double squid_xdistance(ESL_ALPHABET *a, ESL_DSQ *x1, ESL_DSQ *x2) { int diff = 0; int valid = 0; for (; *x1 != eslDSQ_SENTINEL; x1++, x2++) { if (esl_abc_XIsGap(a, *x1) || esl_abc_XIsGap(a, *x2)) continue; if (*x1 != *x2) diff++; valid++; } return (valid > 0 ? ((double) diff / (double) valid) : 0.0); } #endif #endif /* eslMSACLUSTER_REGRESSION || eslMSAWEIGHT_REGRESSION */ /***************************************************************** * 4. Unit tests *****************************************************************/ #ifdef eslMSACLUSTER_TESTDRIVE #include "esl_getopts.h" static void utest_SingleLinkage(ESL_GETOPTS *go, const ESL_MSA *msa, double maxid, int expected_nc, int last_assignment) { char *msg = "utest_SingleLinkage() failed"; int *assignment = NULL; int *nin = NULL; int nc; if (esl_msacluster_SingleLinkage(msa, maxid, &assignment, &nin, &nc) != eslOK) esl_fatal(msg); if (nc != expected_nc) esl_fatal(msg); if (assignment[msa->nseq-1] != last_assignment) esl_fatal(msg); free(assignment); free(nin); } #endif /*eslMSACLUSTER_TESTDRIVE*/ /***************************************************************** * 5. Test driver *****************************************************************/ #ifdef eslMSACLUSTER_TESTDRIVE /* gcc -g -Wall -o msacluster_utest -I. -L. -DeslMSACLUSTER_TESTDRIVE esl_msacluster.c -leasel -lm */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msacluster.h" #include "esl_msafile.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for msacluster module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); ESL_MSA *msa = esl_msa_CreateFromString("\ # STOCKHOLM 1.0\n\ \n\ seq0 AAAAAAAAAA\n\ seq1 AAAAAAAAAA\n\ seq2 AAAAAAAAAC\n\ seq3 AAAAAAAADD\n\ seq4 AAAAAAAEEE\n\ seq5 AAAAAAFFFF\n\ seq6 AAAAAGGGGG\n\ seq7 AAAAHHHHHH\n\ seq8 AAAIIIIIII\n\ seq9 AAKKKKKKKK\n\ seq10 ALLLLLLLLL\n\ seq11 MMMMMMMMMM\n\ //", eslMSAFILE_STOCKHOLM); utest_SingleLinkage(go, msa, 1.0, 11, 10); /* at 100% id, only seq0/seq1 cluster */ utest_SingleLinkage(go, msa, 0.5, 6, 5); /* at 50% id, seq0-seq6 cluster */ utest_SingleLinkage(go, msa, 0.0, 1, 0); /* at 0% id, everything clusters */ /* Do the same tests, but now with a digital MSA */ esl_msa_Digitize(abc, msa, NULL); utest_SingleLinkage(go, msa, 1.0, 11, 10); /* at 100% id, only seq0/seq1 cluster */ utest_SingleLinkage(go, msa, 0.5, 6, 5); /* at 50% id, seq0-seq6 cluster */ utest_SingleLinkage(go, msa, 0.0, 1, 0); /* at 0% id, everything clusters */ esl_msa_Destroy(msa); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /* eslMSACLUSTER_TESTDRIVE*/ /***************************************************************** * 6. Example *****************************************************************/ #ifdef eslMSACLUSTER_EXAMPLE /*::cexcerpt::msacluster_example::begin::*/ /* gcc -g -Wall -o msacluster_example -I. -L. -DeslMSACLUSTER_EXAMPLE esl_msacluster.c -leasel -lm ./msacluster_example */ #include #include "easel.h" #include "esl_msa.h" #include "esl_msacluster.h" #include "esl_msafile.h" int main(int argc, char **argv) { char *filename = argv[1]; int fmt = eslMSAFILE_UNKNOWN; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; double maxid = 0.62; /* cluster at 62% identity: the BLOSUM62 rule */ int *assignment = NULL; int *nin = NULL; int nclusters; int c, i; int status; /* Open; guess alphabet; set to digital mode */ if ((status = eslx_msafile_Open(&abc, filename, NULL, fmt, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); /* read one alignment */ if ((status = eslx_msafile_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); /* do the clustering */ esl_msacluster_SingleLinkage(msa, maxid, &assignment, &nin, &nclusters); printf("%d clusters at threshold of %f fractional identity\n", nclusters, maxid); for (c = 0; c < nclusters; c++) { printf("cluster %d:\n", c); for (i = 0; i < msa->nseq; i++) if (assignment[i] == c) printf(" %s\n", msa->sqname[i]); printf("(%d sequences)\n\n", nin[c]); } esl_msa_Destroy(msa); eslx_msafile_Close(afp); free(assignment); free(nin); return 0; } /*::cexcerpt::msacluster_example::end::*/ #endif /*eslMSACLUSTER_EXAMPLE*/ /*------------------------ end of example -----------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msacluster.c 715 2011-08-03 21:04:24Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msacluster.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_msafile_phylip.h0000664361611702660230000000245312473612607017411 0ustar wheelerteddy/* I/O of multiple sequence alignments in PHYLIP format */ #ifndef eslMSAFILE_PHYLIP_INCLUDED #define eslMSAFILE_PHYLIP_INCLUDED #include "esl_msa.h" #include "esl_msafile.h" extern int esl_msafile_phylip_SetInmap (ESLX_MSAFILE *afp); extern int esl_msafile_phylip_GuessAlphabet(ESLX_MSAFILE *afp, int *ret_type); extern int esl_msafile_phylip_Read (ESLX_MSAFILE *afp, ESL_MSA **ret_msa); extern int esl_msafile_phylip_Write (FILE *fp, const ESL_MSA *msa, int format, ESLX_MSAFILE_FMTDATA *opt_fmtd); extern int esl_msafile_phylip_CheckFileFormat(ESL_BUFFER *bf, int *ret_format, int *ret_namewidth); #endif /* eslMSAFILE_PHYLIP_INCLUDED */ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msafile_phylip.h 708 2011-07-20 12:49:10Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msafile_phylip.h $ *****************************************************************/ hmmer-3.1b2/easel/esl_normal.h0000664361611702660230000000211112473612607015663 0ustar wheelerteddy/* Statistical routines for normal distributions * * SRE, Tue Nov 21 14:29:02 2006 [Janelia] * SVN $Id: esl_normal.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_normal.h $ */ #ifndef eslNORMAL_INCLUDED #define eslNORMAL_INCLUDED extern double esl_normal_pdf (double x, double mu, double sigma); extern double esl_normal_logpdf(double x, double mu, double sigma); extern double esl_normal_cdf (double x, double mu, double sigma); extern double esl_normal_surv (double x, double mu, double sigma); #endif /*eslNORMAL_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_sq.tex0000664361611702660230000004246412473612607015406 0ustar wheelerteddyThe \eslmod{sq} module provides \Easel's object for single biological sequences: an \ccode{ESL\_SQ}. Sequence objects invariably become complicated even when their designer intends them to be simple. There's many things we want to do with a sequence, and useful features naturally accrete over time. If a library isn't careful to balance creeping featuritis against having an easy way to start using the object in simple applications, then the sequence object - possibly the most fundamental object of a biosequence library - can become a barrier to anyone else actually using the library! All those useful features won't matter much if you can't figure out how to turn your sequence data into an object, or get it back out. \Easel\ expects you to have your own preferred way of dealing with sequence data that's not necessarily \Easel's way, so it provides simple ways to create sequence objects from elemental (C string) data, and simple ways to get elemental C strings back out. This lets you minimize your exposure to \Easel's more advanced (and complicated) capabilities if you like. The most basic use of an \ccode{ESL\_SQ} object is to hold one complete sequence, simply as a plain C string. A sequence may also have a name, an accession, and a description line. This is called a \esldef{text mode} sequence. In text mode, \Easel\ doesn't know whether the sequence is DNA, RNA, protein, or something else; it's just an ASCII character string. This limits some of \Easel's more powerful abilities, such as the ability to check the sequence for errors, or to automatically deal with degenerate residue codes; but it's a simple mode that's easy to start using. Alternatively, a sequence may be in \esldef{digital mode}. In digital mode, sequences are predigested and encoded into \Easel's internal format, which makes many sequence routines more robust, efficient, and powerful. Digital mode requires \eslmod{alphabet} augmentation. In addition to storing a complete sequence, an \ccode{ESL\_SQ} is designed to be used in three other situations: \begin{itemize} \item to hold a \esldef{subsequence} of a larger source sequence. The object maintains source and coordinate information necessary for crossreferencing the subsequence's coordinate system to the original source coordinate system. \item to hold a \esldef{window} of a larger source sequence. This is like a subsequence, but is more specifically intended for reading a sequence from a file in overlapping windows. This avoids having to suck an entire chromosome (for example) into memory at any one time. The stored subsequence is composed of two segments, a \esldef{previous context} that gets saved from the previous window, and a \esldef{new window} of fresh residues. The size of both the context and the window are configurable at the time each new window is read. \item to hold only \esldef{information} about a sequence, such as its name, its length, and its position in a file, excluding the sequence (and optional secondary structure annotation) itself. This is handy for example when indexing a sequence file, when we'd rather not read any (possibly prohibitively large) sequence into memory until after we've mapped out how big it is. \end{itemize} To keep all this straight, the object contains a bunch of internal bookkeeping data. Sequence objects are growable and reusable, for efficiency in memory allocation. If you're going to go through many different sequences sequentially, you would typically just allocate a single \ccode{ESL\_SQ} object and \ccode{esl\_sq\_Reuse()} it for each new sequence, rather than creating and destroying a lot of objects. A sequence object can also store a secondary structure annotation line for the sequence, one character per residue. When augmented with \eslmod{msa}, an interface to the \ccode{ESL\_MSA} multiple alignment object provides the ability to extract single unaligned sequences from a multiple alignment. You would often use the \eslmod{sq} module in conjunction with \eslmod{sqio}, which provides the ability to read and write \ccode{ESL\_SQ} objects from and to files. Table~\ref{tbl:sq_api} lists the functions in the \eslmod{sq} API. % Table generated by autodoc -t esl_sq.c (so don't edit here, edit esl_sq.c:) \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \apisubhead{Text version of the \ccode{ESL\_SQ} object.}\\ \hyperlink{func:esl_sq_Create()}{\ccode{esl\_sq\_Create()}} & Create a new, empty \ccode{ESL\_SQ}.\\ \hyperlink{func:esl_sq_CreateFrom()}{\ccode{esl\_sq\_CreateFrom()}} & Create a new \ccode{ESL\_SQ} from text information.\\ \hyperlink{func:esl_sq_Grow()}{\ccode{esl\_sq\_Grow()}} & Assure that a \ccode{ESL\_SQ} has space to add more residues.\\ \hyperlink{func:esl_sq_GrowTo()}{\ccode{esl\_sq\_GrowTo()}} & Grows an \ccode{ESL\_SQ} to hold a seq of at least \ccode{n} residues.\\ \hyperlink{func:esl_sq_Copy()}{\ccode{esl\_sq\_Copy()}} & Make a copy of an \ccode{ESL\_SQ}.\\ \hyperlink{func:esl_sq_Reuse()}{\ccode{esl\_sq\_Reuse()}} & Reinitialize an \ccode{ESL\_SQ} for re-use.\\ \hyperlink{func:esl_sq_Destroy()}{\ccode{esl\_sq\_Destroy()}} & Frees an \ccode{ESL\_SQ}.\\ \apisubhead{Digitized version of the \ccode{ESL\_SQ} object. (Requires \ccode{alphabet})}\\ \hyperlink{func:esl_sq_CreateDigital()}{\ccode{esl\_sq\_CreateDigital()}} & Create a new, empty \ccode{ESL\_SQ} in digital mode.\\ \hyperlink{func:esl_sq_CreateDigitalFrom()}{\ccode{esl\_sq\_CreateDigitalFrom()}} & Create a new digital \ccode{ESL\_SQ} from text info.\\ \hyperlink{func:esl_sq_Digitize()}{\ccode{esl\_sq\_Digitize()}} & Convert an \ccode{ESL\_SQ} to digital mode.\\ \hyperlink{func:esl_sq_Textize()}{\ccode{esl\_sq\_Textize()}} & Convert an \ccode{ESL\_SQ} to text mode.\\ \hyperlink{func:esl_sq_GuessAlphabet()}{\ccode{esl\_sq\_GuessAlphabet()}} & Guess alphabet type of a single sequence.\\ \apisubhead{Other functions that operate on sequences.}\\ \hyperlink{func:esl_sq_SetName()}{\ccode{esl\_sq\_SetName()}} & Format and set a name of a sequence.\\ \hyperlink{func:esl_sq_SetAccession()}{\ccode{esl\_sq\_SetAccession()}} & Format and set the accession field in a sequence.\\ \hyperlink{func:esl_sq_SetDesc()}{\ccode{esl\_sq\_SetDesc()}} & Format and set the description field in a sequence.\\ \hyperlink{func:esl_sq_SetSource()}{\ccode{esl\_sq\_SetSource()}} & Format and set the source name field in a sequence.\\ \hyperlink{func:esl_sq_CAddResidue()}{\ccode{esl\_sq\_CAddResidue()}} & Add one residue (or terminal NUL) to a text seq.\\ \hyperlink{func:esl_sq_XAddResidue()}{\ccode{esl\_sq\_XAddResidue()}} & Add one residue (or terminal sentinel) to digital seq.\\ \hyperlink{func:esl_sq_GetFromMSA()}{\ccode{esl\_sq\_GetFromMSA()}} & Get a single sequence from an MSA.\\ \hyperlink{func:esl_sq_FetchFromMSA()}{\ccode{esl\_sq\_FetchFromMSA()}} & Fetch a single sequence from an MSA.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{sq} API.} \label{tbl:sq_api} \end{table} \subsection{Example of getting data in and out of an \ccodeincmd{ESL\_SQ}} The easiest way to create a new \ccode{ESL\_SQ} object is with the \ccode{esl\_sq\_CreateFrom()} function, which just takes character strings for a sequence and its name (and also, optionally, an accession, description, and/or secondary structure annotation string). You can also build up (and/or change and manipulate) the contents of an \ccode{ESL\_SQ} object by accessing the name, accession, description, sequence, and structure annotation line more directly. This code shows examples of both approaches: \input{cexcerpts/sq_example} A few things to notice about that code: \begin{itemize} \item Every sequence has a name and a sequence. If we didn't want to add the optional accession, description, or structure annotation line, we'd pass \ccode{NULL} for those arguments to \ccode{esl\_sq\_CreateFrom()}. \item An RNA secondary structure annotation line is shown here as part of the example, but it's really sort of a more advanced feature. It's good to know it's there (see the \eslmod{wuss} module for more information about how \Easel\ annotates RNA structure) but you can ignore it if you're getting started. \item The \ccode{esl\_sq\_Set*} functions use the same syntax as C's \ccode{*printf()} family, which gives you a flexible way to create new sequence names, accessions, and descriptions automatically. \item The sequence in \ccode{sq->seq} is just a C string. (Here it's a copy of the \ccode{testseq} string.) That has a couple of implications. One is that it's a verbatim copy of what you provided; \Easel\ doesn't know (or care) whether it's DNA or protein sequence, upper case or lower case, or if it contains illegal non-sequence characters. With a text mode sequence, that's \emph{your} problem! For more robustness and defined biosequence alphabets, read on below about digital mode sequences. The second implication is that, as a C string, the \ccode{n} residues are indexed \ccode{0..sq->n-1}, not \ccode{1..sq->n}. \item If you're going to directly copy a sequence of length \ccode{n} into a \ccode{sq->seq} field, note the \ccode{esl\_sq\_GrowTo()} call, which makes sure the sequence object is allocated with enough space for \ccode{n} residues; and don't forget to set \ccode{sq->n}. \item The structure annotation \ccode{sq->ss} is also a C string, indexed identically to \ccode{sq->seq}, but it's optional, and isn't allocated by default; \ccode{esl\_sq\_GrowTo()} calls will only reallocate for the structure annotation string after it's been allocated at least once. Hence the \ccode{esl\_strdup} call in the example, which duplicates (allocates and copies) the annotation into \ccode{sq->ss}. \end{itemize} To get simple character strings back out of an \ccode{ESL\_SQ} object, you're encouraged to peek inside the object. (Yeah, I know, object oriented design says that there should be methods for this, independent of the object's implementation; but I balance that against simplicity, and here, simplicity wins.) The object is defined and documented in \ccode{esl\_sq.h}. It contains various information; the stuff you need to know is: \input{cexcerpts/sq_sq} Ignore the \ccode{dsq} field for now; we're about to get to it, when we talk about digital mode sequences. The \ccode{ESL\_SQ} object itself doesn't particularly care about the contents of these text fields, so long as they're C strings, and so long as \ccode{n} is the length of the \ccode{seq} (and optional \ccode{ss}, if it's non-\ccode{NULL}) strings. However, sequence file formats do impose some expectations on the annotation strings, and it would be a Good Idea to adhere to them: \begin{sreitems} {\emcode{desc}} \item [\emcode{name}] A sequence name is almost always expected to be a single ``word'' (no whitespace), like \ccode{SNRPA\_HUMAN}. \item [\emcode{acc}] An accession is also usually expected to be a single ``word'' with no whitespace, like \ccode{P09012}. Database accessions only make sense if you know what database they're for, so when sequences might be from different databases, you'll sometimes see accessions prefixed with a code indicating the source database, as in something like \ccode{UniProt:P09012}. Again, \Easel\ itself isn't enforcing the format of this string, so your application is free to create its own accession/version/database format as needed. \item [\emcode{desc}] A description line is something like \ccode{U1 small nuclear ribonucleoprotein A (U1 snRNP protein A) (U1A protein) (U1-A).}; a one-line summary of what the sequence is. You can expect the description line to show up in the tabular output of sequence analysis applications, so ideally you want it to be short and sweet (so it fits on one line with a name, accession, score, coords, and other information from an analysis app). You also don't want the description line to end in a newline (\verb+\n+) character, or the description line will introduce unexpected line breaks in these tabular output files. \end{sreitems} You can reach into a \ccode{ESL\_SQ} and copy or modify any of these strings, but don't try to overwrite them with a larger string unless You Know What You're Doing. Their memory allocations are managed by the \ccode{ESL\_SQ} object. Instead, use the appropriate \ccode{esl\_sq\_Set*} function to overwrite an annotation field. The \eslmod{sq} module isn't much use by itself; it's a building block for several other modules. For example, one of the main things you'll want to do with sequences is to read them from a file. For examples and documentation of sequence input, see the \eslmod{sqio} module. \subsection{Example of using a digital \ccodeincmd{ESL\_SQ}} What follows might make more sense if you've read about the \eslmod{alphabet} module first. \eslmod{alphabet}'s documentation explains how \Easel uses an internal digital biosequence ``alphabet'', where residues are encoded as small integers, suitable for direct use as array indices. But here's an example anyway, of creating and accessing a digital mode sequence: \input{cexcerpts/sq_example2} Things to notice about this code: \begin{itemize} \item An \ccode{ESL\_SQ} object has a \ccode{sq->seq} if it's in text mode, and \ccode{sq->dsq} if its in digital mode. These two fields are mutually exclusive; one of them is \ccode{NULL}. \item If you looked at the contents of \ccode{sq->dsq} in either of the objects, you'd see that each residue is encoded as a value \ccode{0..3}, representing (for an RNA alphabet) the residues \ccode{ACGU}. \item That representation is defined by the digital RNA alphabet \ccode{abc}, which was the first thing we created. \item In digital mode, both the sequence residues and the optional secondary structure characters are indexed \ccode{1..n}. \item To make the digital sequence in the first sequence object, we created a digital sequence \ccode{dsq} by encoding the \ccode{testseq} using \ccode{esl\_abc\_CreateDsq()}; this function allocated new memory for \ccode{dsq}, so we have to free it. An \ccode{ESL\_DSQ *} is just a special character array; it's not a full-fledged \Easel\ object, and so there's no conventional \ccode{Create()},\ccode{Destroy()} function pair. \item In the second sequence object, we used \ccode{esl\_abc\_Digitize()} to encode the \ccode{testseq} directly into space that the \ccode{sq2} object already had allocated, saving us the temporary allocation of another \ccode{dsq}, because we created it in digital mode (\ccode{esl\_sq\_CreateDigital()}) and made it big enough to hold \ccode{n} digital residues with \ccode{esl\_sq\_GrowTo()}. Notice that \ccode{esl\_sq\_GrowTo()} is smart enough to know whether to grow the digital or the text mode sequence field. \item By convention, when using digital sequences, we usually keep track of (and pass as arguments) both a digital sequence \ccode{dsq} and its length \ccode{n}, and we also need to have the digital alphabet itself \ccode{abc} available to know what the \ccode{dsq} means; with text mode sequences, we usually just pass the string pointer. Thus the \ccode{esl\_sq\_CreateDigitalFrom()} function takes \ccode{abc}, \ccode{dsq}, and \ccode{n} as arguments, whereas the counterpart text mode \ccode{esl\_sq\_CreateDigitalFrom()} only took a C string \ccode{seq}. This is solely a convention - digital sequences begin and end with a special sentinel character, so we could always count the length of a \ccode{dsq} if we had to (using \ccode{esl\_abc\_dsqlen()}, for example), much as we can use ANSI C's \ccode{strlen()} to count the number of chars in a C string up to the sentinel \verb+\0+ \ccode{NUL} character at the end. \item To get the structure annotation to be indexed \ccode{1..n} for consistency with the \ccode{dsq}, even though the annotation string is still just an ASCII string, it's offset by one, and the leading character is set by convention to a \verb+\0+. Therefore to access the whole structure string (for printing, for instance), you want to access \ccode{sq->ss+1}. This is a hack, but it's a simple one, so long as you don't forget about the convention. \item Because the original sequence has been encoded, you may not get the original sequence back out when you decode the digital values as alphabet symbols. \ccode{abc->sym[sq2->dsq[3]]}, for example, takes the third digital residue and looks it up in the alphabet's symbol table, returning the canonical character it's representing. Upper/lower case distinctions are lost, for example; digital alphabet symbol tables are uniformly upper case. And this example shows another example, where the input \ccode{testseq} contains T's, but since the digital alphabet was declared as RNA, the symbol table represents those residues as U's when you access them. \item In that respect, a more careful example should have checked the return status of the \ccode{esl\_abc\_CreateDsq()} and \ccode{esl\_abc\_Digitize()} calls. These have a normal failure mode, when the input text sequence contains one or more ASCII characters that are unrecognized and therefore invalid in the digital alphabet. If this had happened, these functions would have returned \ccode{eslEINVAL} instead of \ccode{eslOK}. We can get away without checking, however, because the functions just replace any invalid character with an ``any'' character (representing \ccode{N} for DNA or RNA, \ccode{X} for protein). \end{itemize} For more information about how digital sequence alphabets work, see the \eslmod{alphabet} module. hmmer-3.1b2/easel/esl_msafile_afa.h0000664361611702660230000000221412473612607016626 0ustar wheelerteddy/* i/o of multiple sequence alignment files in aligned FASTA format */ #ifndef eslMSAFILE_AFA_INCLUDED #define eslMSAFILE_AFA_INCLUDED #include "esl_msa.h" #include "esl_msafile.h" extern int esl_msafile_afa_SetInmap (ESLX_MSAFILE *afp); extern int esl_msafile_afa_GuessAlphabet(ESLX_MSAFILE *afp, int *ret_type); extern int esl_msafile_afa_Read (ESLX_MSAFILE *afp, ESL_MSA **ret_msa); extern int esl_msafile_afa_Write (FILE *fp, const ESL_MSA *msa); #endif /* eslMSAFILE_AFA_INCLUDED */ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msafile_afa.h 708 2011-07-20 12:49:10Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msafile_afa.h $ *****************************************************************/ hmmer-3.1b2/easel/esl_gamma.h0000664361611702660230000000367712473612606015476 0ustar wheelerteddy/* Gamma distributions. * * SRE, Wed Nov 16 19:15:33 2005 [St. Louis] * SVN $Id: esl_gamma.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_gamma.h $ */ #ifndef eslGAMMA_INCLUDED #define eslGAMMA_INCLUDED #ifdef eslAUGMENT_RANDOM #include #endif double esl_gam_pdf (double x, double mu, double lambda, double tau); double esl_gam_logpdf (double x, double mu, double lambda, double tau); double esl_gam_cdf (double x, double mu, double lambda, double tau); double esl_gam_logcdf (double x, double mu, double lambda, double tau); double esl_gam_surv (double x, double mu, double lambda, double tau); double esl_gam_logsurv(double x, double mu, double lambda, double tau); double esl_gam_invcdf (double p, double mu, double lambda, double tau); double esl_gam_generic_pdf (double x, void *params); double esl_gam_generic_cdf (double x, void *params); double esl_gam_generic_surv (double x, void *params); double esl_gam_generic_invcdf(double x, void *params); extern int esl_gam_Plot(FILE *fp, double mu, double lambda, double tau, double (*func)(double x, double mu, double lambda, double tau), double xmin, double xmax, double xstep); #ifdef eslAUGMENT_RANDOM extern double esl_gam_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double tau); #endif extern int esl_gam_FitComplete(double *x, int n, double mu, double *ret_lambda, double *ret_tau); #endif /*eslGAMMA_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_cluster.tex0000664361611702660230000000422512473612606016434 0ustar wheelerteddyThe \eslmod{cluster} module implements a generalized, efficient discrete single linkage clustering algorithm. The clustering algorithm tests for links on the fly, thus avoiding construction of an $O(N^2)$ adjacency matrix. This results in an algorithm of $O(N)$ memory, $O(N^2)$ time worst-case complexity for $N$ vertices. Average case behavior typically scales much better than this, as efficiently as $O(N)$ for a densely connected graph that forms a single cluster. In order to work on generalized vertices of any data type, the implementation uses an interface akin to that of the C \ccode{qsort()} utility: the caller provides a void pointer to an untyped array of vertices, the number of vertices, and the size of each vertex data element, and a function that can take untyped pointers to two vertices and compute whether they are linked or not. The API is summarized in Table~\ref{tbl:cluster_api}. Only the \eslmod{easel} module is required. % Table generated by autodoc -t esl_cluster.c (so don't edit here, edit esl_cluster.c:) \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \hyperlink{func:esl_cluster_SingleLinkage()}{\ccode{esl\_cluster\_SingleLinkage()}} & Generalized single linkage clustering.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{cluster} API.} \label{tbl:cluster_api} \end{table} \subsection{Example of using the msacluster API} An example of clustering some numbers together, according to their difference: \input{cexcerpts/cluster_example} The thing to pay most attention to here is the mechanism of dealing with vertices via generic untyped pointers; in particular, the way the caller-provided linkage-determining function takes its \ccode{void *} arguments and immediately casts them back to data types that the caller wants to use in computing whether the two vertices are linked. In the example here, the linkage function needs only one parameter from the caller, so a pointer to \ccode{threshold} itself is passed into the API. If your linkage function needs more parameters, you would define a structure that bundles them together, then pass a pointer to that structure into \ccode{esl\_cluster\_SingleLinkage()}. hmmer-3.1b2/easel/esl_paml.tex0000664361611702660230000000020412473612607015676 0ustar wheelerteddyThe \eslmod{paml} module implements support for reading certain data files from Ziheng Yang's PAML software suite \citep{Yang97}. hmmer-3.1b2/easel/esl_dmatrix.c0000664361611702660230000012777512473612606016065 0ustar wheelerteddy/* Linear algebra operations in double-precision matrices. * * Implements ESL_DMATRIX (double-precision matrix) and * ESL_PERMUTATION (permutation matrix) objects. * * Table of contents: * 1. The ESL_DMATRIX object * 2. Debugging/validation code for ESL_DMATRIX * 3. The ESL_PERMUTATION object * 4. Debugging/validation code for ESL_PERMUTATION * 5. The rest of the dmatrix API * 6. Optional: Interoperability with GSL * 7. Optional: Interfaces to LAPACK * 8. Unit tests * 9. Test driver * 10. Examples * 11. Copyright and license * * To do: * - eventually probably want additional matrix types * - unit tests poor */ #include "esl_config.h" #include #include #include #include #include "easel.h" #include "esl_vectorops.h" #include "esl_dmatrix.h" /***************************************************************** * 1. The ESL_DMATRIX object. *****************************************************************/ /* Function: esl_dmatrix_Create() * * Purpose: Creates a general x matrix ( rows, * columns). * * Args: - number of rows; $>= 1$ * - number of columns; $>= 1$ * * Returns: a pointer to a new object. Caller frees * with . * * Throws: if an allocation failed. */ ESL_DMATRIX * esl_dmatrix_Create(int n, int m) { ESL_DMATRIX *A = NULL; int r; int status; ESL_ALLOC(A, sizeof(ESL_DMATRIX)); A->mx = NULL; A->n = n; A->m = m; ESL_ALLOC(A->mx, sizeof(double *) * n); A->mx[0] = NULL; ESL_ALLOC(A->mx[0], sizeof(double) * n * m); for (r = 1; r < n; r++) A->mx[r] = A->mx[0] + r*m; A->type = eslGENERAL; A->ncells = n * m; return A; ERROR: esl_dmatrix_Destroy(A); return NULL; } /* Function: esl_dmatrix_CreateUpper() * Incept: SRE, Wed Feb 28 08:45:45 2007 [Janelia] * * Purpose: Creates a packed upper triangular matrix of rows and * columns. Caller may only access cells $i \leq j$. * Cells $i > j$ are not stored and are implicitly 0. * * Not all matrix operations in Easel can work on packed * upper triangular matrices. * * Returns: a pointer to a new object of type * . Caller frees with . * * Throws: if allocation fails. * * Xref: J1/10 */ ESL_DMATRIX * esl_dmatrix_CreateUpper(int n) { int status; ESL_DMATRIX *A = NULL; int r; /* counter over rows */ int nc; /* cell counter */ /* matrix structure allocation */ ESL_ALLOC(A, sizeof(ESL_DMATRIX)); A->mx = NULL; A->n = n; A->m = n; /* n row ptrs */ ESL_ALLOC(A->mx, sizeof(double *) * n); A->mx[0] = NULL; /* cell storage */ ESL_ALLOC(A->mx[0], sizeof(double) * n * (n+1) / 2); /* row pointers set in a tricksy overlapping way, so * mx[i][j] access works normally but only i<=j are valid. * xref J1/10. */ nc = n; /* nc is the number of valid cells assigned to rows so far */ for (r = 1; r < n; r++) { A->mx[r] = A->mx[0] + nc - r; /* -r overlaps this row w/ previous row */ nc += n-r; } A->type = eslUPPER; A->ncells = n * (n+1) / 2; return A; ERROR: esl_dmatrix_Destroy(A); return NULL; } /* Function: esl_dmatrix_Destroy() * * Purpose: Frees an object . */ int esl_dmatrix_Destroy(ESL_DMATRIX *A) { if (A != NULL && A->mx != NULL && A->mx[0] != NULL) free(A->mx[0]); if (A != NULL && A->mx != NULL) free(A->mx); if (A != NULL) free(A); return eslOK; } /* Function: esl_dmatrix_Copy() * * Purpose: Copies matrix into matrix. must * be allocated already by the caller. * * You may copy to a matrix of a different type, so long as * the copy makes sense. If matrix is a packed type * and is not, the values that should be zeros must * be zero in , else the routine throws * . If the matrix is a packed type and * is not, the values that are implicitly zeros are * set to zeros in the matrix. * * Returns: on success. * * Throws: if , are different sizes, * or if their types differ and cannot represent * . */ int esl_dmatrix_Copy(const ESL_DMATRIX *src, ESL_DMATRIX *dest) { int i,j; if (dest->n != src->n || dest->m != src->m) ESL_EXCEPTION(eslEINCOMPAT, "matrices of different size"); if (src->type == dest->type) /* simple case. */ memcpy(dest->mx[0], src->mx[0], src->ncells * sizeof(double)); else if (src->type == eslGENERAL && dest->type == eslUPPER) { for (i = 1; i < src->n; i++) for (j = 0; j < i; j++) if (src->mx[i][j] != 0.) ESL_EXCEPTION(eslEINCOMPAT, "general matrix isn't upper triangular, can't be copied/packed"); for (i = 0; i < src->n; i++) for (j = i; j < src->m; j++) dest->mx[i][j] = src->mx[i][j]; } else if (src->type == eslUPPER && dest->type == eslGENERAL) { for (i = 1; i < src->n; i++) for (j = 0; j < i; j++) dest->mx[i][j] = 0.; for (i = 0; i < src->n; i++) for (j = i; j < src->m; j++) dest->mx[i][j] = src->mx[i][j]; } return eslOK; } /* Function: esl_dmatrix_Clone() * Incept: SRE, Tue May 2 14:38:45 2006 [St. Louis] * * Purpose: Duplicates matrix , making a copy in newly * allocated space. * * Returns: a pointer to the copy. Caller frees with * . * * Throws: on allocation failure. */ ESL_DMATRIX * esl_dmatrix_Clone(const ESL_DMATRIX *A) { ESL_DMATRIX *new; switch (A->type) { case eslUPPER: if ( (new = esl_dmatrix_CreateUpper(A->n)) == NULL) return NULL; break; default: case eslGENERAL: if ( (new = esl_dmatrix_Create(A->n, A->m)) == NULL) return NULL; break; } esl_dmatrix_Copy(A, new); return new; } /* Function: esl_dmatrix_Compare() * * Purpose: Compares matrix to matrix element by element, * using on each cognate element pair, * with relative equality defined by a fractional tolerance * . If all elements are equal, return ; if * any elements differ, return . * * and may be of different types; for example, * a packed upper triangular matrix A is compared to * a general matrix B by assuming mx[i][j] = 0.> for * all $i>j$. */ int esl_dmatrix_Compare(const ESL_DMATRIX *A, const ESL_DMATRIX *B, double tol) { int i,j,c; double x1,x2; if (A->n != B->n) return eslFAIL; if (A->m != B->m) return eslFAIL; if (A->type == B->type) { /* simple case. */ for (c = 0; c < A->ncells; c++) /* can deal w/ packed or unpacked storage */ if (esl_DCompare(A->mx[0][c], B->mx[0][c], tol) == eslFAIL) return eslFAIL; } else { /* comparing matrices of different types */ for (i = 0; i < A->n; i++) for (j = 0; j < A->m; j++) { if (A->type == eslUPPER && i > j) x1 = 0.; else x1 = A->mx[i][j]; if (B->type == eslUPPER && i > j) x2 = 0.; else x2 = B->mx[i][j]; if (esl_DCompare(x1, x2, tol) == eslFAIL) return eslFAIL; } } return eslOK; } /* Function: esl_dmatrix_CompareAbs() * * Purpose: Compares matrix to matrix element by element, * using on each cognate element pair, * with absolute equality defined by a absolute difference tolerance * . If all elements are equal, return ; if * any elements differ, return . * * and may be of different types; for example, * a packed upper triangular matrix A is compared to * a general matrix B by assuming mx[i][j] = 0.> for * all $i>j$. */ int esl_dmatrix_CompareAbs(const ESL_DMATRIX *A, const ESL_DMATRIX *B, double tol) { int i,j,c; double x1,x2; if (A->n != B->n) return eslFAIL; if (A->m != B->m) return eslFAIL; if (A->type == B->type) { /* simple case. */ for (c = 0; c < A->ncells; c++) /* can deal w/ packed or unpacked storage */ if (esl_DCompareAbs(A->mx[0][c], B->mx[0][c], tol) == eslFAIL) return eslFAIL; } else { /* comparing matrices of different types */ for (i = 0; i < A->n; i++) for (j = 0; j < A->m; j++) { if (A->type == eslUPPER && i > j) x1 = 0.; else x1 = A->mx[i][j]; if (B->type == eslUPPER && i > j) x2 = 0.; else x2 = B->mx[i][j]; if (esl_DCompareAbs(x1, x2, tol) == eslFAIL) return eslFAIL; } } return eslOK; } /* Function: esl_dmatrix_Set() * * Purpose: Set all elements $a_{ij}$ in matrix to , * and returns . */ int esl_dmatrix_Set(ESL_DMATRIX *A, double x) { int i; for (i = 0; i < A->ncells; i++) A->mx[0][i] = x; return eslOK; } /* Function: esl_dmatrix_SetZero() * * Purpose: Sets all elements $a_{ij}$ in matrix to 0, * and returns . */ int esl_dmatrix_SetZero(ESL_DMATRIX *A) { int i; for (i = 0; i < A->ncells; i++) A->mx[0][i] = 0.; return eslOK; } /* Function: esl_dmatrix_SetIdentity() * * Purpose: Given a square matrix , sets all diagonal elements * $a_{ii}$ to 1, and all off-diagonal elements $a_{ij}, * j \ne i$ to 0. Returns on success. * * Throws: if the matrix isn't square. */ int esl_dmatrix_SetIdentity(ESL_DMATRIX *A) { int i; if (A->n != A->m) ESL_EXCEPTION(eslEINVAL, "matrix isn't square"); esl_dmatrix_SetZero(A); for (i = 0; i < A->n; i++) A->mx[i][i] = 1.; return eslOK; } /* Function: esl_dmatrix_Dump() * Incept: SRE, Mon Nov 29 19:21:20 2004 [St. Louis] * * Purpose: Given a matrix , dump it to output stream in human-readable * format. * * If or are non-NULL, they specify a * string of single-character labels to put on the rows and * columns, respectively. (For example, these might be a * sequence alphabet for a 4x4 or 20x20 rate matrix or * substitution matrix.) Numbers <1..ncols> or <1..nrows> are * used if or are passed as . * * Args: ofp - output file pointer; stdout, for example. * A - matrix to dump. * rowlabel - optional: NULL, or character labels for rows * collabel - optional: NULL, or character labels for cols * * Returns: on success. */ int esl_dmatrix_Dump(FILE *ofp, const ESL_DMATRIX *A, const char *rowlabel, const char *collabel) { int a,b; fprintf(ofp, " "); if (collabel != NULL) for (b = 0; b < A->m; b++) fprintf(ofp, " %c ", collabel[b]); else for (b = 0; b < A->m; b++) fprintf(ofp, "%8d ", b+1); fprintf(ofp, "\n"); for (a = 0; a < A->n; a++) { if (rowlabel != NULL) fprintf(ofp, " %c ", rowlabel[a]); else fprintf(ofp, "%5d ", a+1); for (b = 0; b < A->m; b++) { switch (A->type) { case eslUPPER: if (a > b) fprintf(ofp, "%8s ", ""); else fprintf(ofp, "%8.4f ", A->mx[a][b]); break; default: case eslGENERAL: fprintf(ofp, "%8.4f ", A->mx[a][b]); break; } } fprintf(ofp, "\n"); } return eslOK; } /***************************************************************** * 3. The ESL_PERMUTATION object. *****************************************************************/ /* Function: esl_permutation_Create() * * Purpose: Creates a new permutation "matrix" of size for * permuting x square matrices; returns a * pointer to it. * * A permutation matrix consists of 1's and 0's such that * any given row or column contains only one 1. We store it * more efficiently as a vector; each value $p_i$ * represents the column $j$ that has the 1. Thus, on * initialization, $p_i = i$ for all $i = 0..n-1$. * * Returns: a pointer to a new object. Free with * . * * Throws: if allocation fails. */ ESL_PERMUTATION * esl_permutation_Create(int n) { int status; ESL_PERMUTATION *P = NULL; ESL_ALLOC(P, sizeof(ESL_PERMUTATION)); P->pi = NULL; P->n = n; ESL_ALLOC(P->pi, sizeof(int) * n); esl_permutation_Reuse(P); /* initialize it */ return P; ERROR: esl_permutation_Destroy(P); return NULL; } /* Function: esl_permutation_Destroy() * * Purpose: Frees an object

. */ int esl_permutation_Destroy(ESL_PERMUTATION *P) { if (P != NULL && P->pi != NULL) free(P->pi); if (P != NULL) free(P); return eslOK; } /* Function: esl_permutation_Reuse() * * Purpose: Resets a permutation matrix

to * $p_i = i$ for all $i = 0..n-1$. * * Returns: on success. */ int esl_permutation_Reuse(ESL_PERMUTATION *P) { int i; for (i = 0; i < P->n; i++) P->pi[i] = i; return eslOK; } /***************************************************************** * 4. Debugging/validation for ESL_PERMUTATION. *****************************************************************/ /* Function: esl_permutation_Dump() * * Purpose: Given a permutation matrix

, dump it to output stream * in human-readable format. * * If or are non-NULL, they represent * single-character labels to put on the rows and columns, * respectively. (For example, these might be a sequence * alphabet for a 4x4 or 20x20 rate matrix or substitution * matrix.) Numbers 1..ncols or 1..nrows are used if * or are NULL. * * Args: ofp - output file pointer; stdout, for example * P - permutation matrix to dump * rowlabel - optional: NULL, or character labels for rows * collabel - optional: NULL, or character labels for cols * * Returns: on success. */ int esl_permutation_Dump(FILE *ofp, const ESL_PERMUTATION *P, const char *rowlabel, const char *collabel) { int i,j; fprintf(ofp, " "); if (collabel != NULL) for (j = 0; j < P->n; j++) fprintf(ofp, " %c ", collabel[j]); else for (j = 0; j < P->n; j++) fprintf(ofp, "%3d ", j+1); fprintf(ofp, "\n"); for (i = 0; i < P->n; i++) { if (rowlabel != NULL) fprintf(ofp, " %c ", rowlabel[i]); else fprintf(ofp, "%3d ", i+1); for (j = 0; j < P->n; j++) fprintf(ofp, "%3d ", (j == P->pi[i]) ? 1 : 0); fprintf(ofp, "\n"); } return eslOK; } /***************************************************************** * 5. The rest of the dmatrix API. *****************************************************************/ /* Function: esl_dmx_Max() * Incept: SRE, Thu Mar 1 14:46:48 2007 [Janelia] * * Purpose: Returns the maximum value of all the elements $a_{ij}$ in matrix . */ double esl_dmx_Max(const ESL_DMATRIX *A) { int i; double best; best = A->mx[0][0]; for (i = 0; i < A->ncells; i++) if (A->mx[0][i] > best) best = A->mx[0][i]; return best; } /* Function: esl_dmx_Min() * Incept: SRE, Thu Mar 1 14:49:29 2007 [Janelia] * * Purpose: Returns the minimum value of all the elements $a_{ij}$ in matrix . */ double esl_dmx_Min(const ESL_DMATRIX *A) { int i; double best; best = A->mx[0][0]; for (i = 0; i < A->ncells; i++) if (A->mx[0][i] < best) best = A->mx[0][i]; return best; } /* Function: esl_dmx_MinMax() * Incept: SRE, Wed Mar 14 16:58:03 2007 [Janelia] * * Purpose: Finds the maximum and minimum values of the * elements $a_{ij}$ in matrix , and returns * them in and . * * Returns: on success. * */ int esl_dmx_MinMax(const ESL_DMATRIX *A, double *ret_min, double *ret_max) { double min, max; int i; min = max = A->mx[0][0]; for (i = 0; i < A->ncells; i++) { if (A->mx[0][i] < min) min = A->mx[0][i]; if (A->mx[0][i] > max) max = A->mx[0][i]; } *ret_min = min; *ret_max = max; return eslOK; } /* Function: esl_dmx_Sum() * Incept: SRE, Thu Mar 1 16:45:16 2007 * * Purpose: Returns the scalar sum of all the elements $a_{ij}$ in matrix , * $\sum_{ij} a_{ij}$. */ double esl_dmx_Sum(const ESL_DMATRIX *A) { int i; double sum = 0.; for (i = 0; i < A->ncells; i++) sum += A->mx[0][i]; return sum; } /* Function: esl_dmx_FrobeniusNorm() * Incept: SRE, Thu Mar 15 17:59:35 2007 [Janelia] * * Purpose: Calculates the Frobenius norm of a matrix, which * is the element-wise equivalant of a * Euclidean vector norm: * $ = \sqrt(\sum a_{ij}^2)$ * * Args: A - matrix * ret_fnorm - Frobenius norm. * * Returns: on success, and the Frobenius norm * is in . */ int esl_dmx_FrobeniusNorm(const ESL_DMATRIX *A, double *ret_fnorm) { double F = 0.; int i; for (i = 0; i < A->ncells; i++) F += A->mx[0][i] * A->mx[0][i]; *ret_fnorm = sqrt(F); return eslOK; } /* Function: esl_dmx_Multiply() * * Purpose: Matrix multiplication: calculate , store result in . * is $n times m$; is $m \times p$; is $n \times p$. * Matrix must be allocated appropriately by the caller. * * Not supported for anything but general () * matrix type, at present. * * Throws: if matrices don't have compatible dimensions, * or if any of them isn't a general () matrix. */ int esl_dmx_Multiply(const ESL_DMATRIX *A, const ESL_DMATRIX *B, ESL_DMATRIX *C) { int i, j, k; if (A->m != B->n) ESL_EXCEPTION(eslEINVAL, "can't multiply A,B"); if (A->n != C->n) ESL_EXCEPTION(eslEINVAL, "A,C # of rows not equal"); if (B->m != C->m) ESL_EXCEPTION(eslEINVAL, "B,C # of cols not equal"); if (A->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "A isn't of type eslGENERAL"); if (B->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "B isn't of type eslGENERAL"); if (C->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "B isn't of type eslGENERAL"); /* i,k,j order should optimize stride, relative to a more textbook * order for the indices */ esl_dmatrix_SetZero(C); for (i = 0; i < A->n; i++) for (k = 0; k < A->m; k++) for (j = 0; j < B->m; j++) C->mx[i][j] += A->mx[i][k] * B->mx[k][j]; return eslOK; } /*::cexcerpt::function_comment_example::begin::*/ /* Function: esl_dmx_Exp() * Synopsis: Calculates matrix exponential $\mathbf{P} = e^{t\mathbf{Q}}$. * Incept: SRE, Thu Mar 8 18:41:38 2007 [Janelia] * * Purpose: Calculates the matrix exponential $\mathbf{P} = e^{t\mathbf{Q}}$, * using a scaling and squaring algorithm with * the Taylor series approximation \citep{MolerVanLoan03}. * * must be a square matrix of type . * Caller provides an allocated

matrix of the same size and type as . * * A typical use of this function is to calculate a * conditional substitution probability matrix $\mathbf{P}$ * (whose elements $P_{xy}$ are conditional substitution * probabilities $\mathrm{Prob}(y \mid x, t)$ from time $t$ * and instantaneous rate matrix $\mathbf{Q}$. * * Args: Q - matrix to exponentiate (an instantaneous rate matrix) * t - time units * P - RESULT: $e^{tQ}$. * * Returns: on success. * * Throws: on allocation error. * * Xref: J1/19. */ int esl_dmx_Exp(const ESL_DMATRIX *Q, double t, ESL_DMATRIX *P) { /*::cexcerpt::function_comment_example::end::*/ ESL_DMATRIX *Qz = NULL; /* Q/2^z rescaled matrix*/ ESL_DMATRIX *Qpow = NULL; /* keeps running product Q^k */ ESL_DMATRIX *C = NULL; /* tmp storage for matrix multiply result */ double factor = 1.0; double fnorm; int z; double zfac; int k; int status; /* Contract checks */ if (Q->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "Q isn't general"); if (Q->n != Q->m) ESL_EXCEPTION(eslEINVAL, "Q isn't square"); if (P->type != Q->type) ESL_EXCEPTION(eslEINVAL, "P isn't of same type as Q"); if (P->n != P->m) ESL_EXCEPTION(eslEINVAL, "P isn't square"); if (P->n != Q->n) ESL_EXCEPTION(eslEINVAL, "P isn't same size as Q"); /* Allocation of working space */ if ((Qz = esl_dmatrix_Create(Q->n, Q->n)) == NULL) { status = eslEMEM; goto ERROR; } if ((Qpow = esl_dmatrix_Create(Q->n, Q->n)) == NULL) { status = eslEMEM; goto ERROR; } if ((C = esl_dmatrix_Create(Q->n, Q->n)) == NULL) { status = eslEMEM; goto ERROR; } /* Figure out how much to scale the matrix down by. This is not * magical; we're just knocking its magnitude down in an ad hoc way. */ esl_dmx_FrobeniusNorm(Q, &fnorm); zfac = 1.; z = 0; while (t*fnorm*zfac > 0.1) { zfac /= 2.; z++; } /* Make a scaled-down copy of Q in Qz. */ esl_dmatrix_Copy(Q, Qz); esl_dmx_Scale(Qz, zfac); /* Calculate e^{t Q_z} by the Taylor, to complete convergence. */ esl_dmatrix_SetIdentity(P); esl_dmatrix_Copy(Qz, Qpow); /* Qpow is now Qz^1 */ for (k = 1; k < 100; k++) { factor *= t/k; esl_dmatrix_Copy(P, C); /* C now holds the previous P */ esl_dmx_AddScale(P, factor, Qpow); /* P += factor*Qpow */ if (esl_dmatrix_Compare(C, P, 0.) == eslOK) break; esl_dmx_Multiply(Qpow, Qz, C); /* C = Q^{k+1} */ esl_dmatrix_Copy(C, Qpow); /* Qpow = C = Q^{k+1} */ } /* Now square it back up: e^{tQ} = [e^{tQ_z}]^{2^z} */ while (z--) { esl_dmx_Multiply(P, P, C); esl_dmatrix_Copy(C, P); } esl_dmatrix_Destroy(Qz); esl_dmatrix_Destroy(Qpow); esl_dmatrix_Destroy(C); return eslOK; ERROR: if (Qz != NULL) esl_dmatrix_Destroy(Qz); if (Qpow != NULL) esl_dmatrix_Destroy(Qpow); if (C != NULL) esl_dmatrix_Destroy(C); return status; } /* Function: esl_dmx_Transpose() * * Purpose: Transpose a square matrix in place. * * must be a general () matrix type. * * Throws: if isn't square, or if it isn't * of type . */ int esl_dmx_Transpose(ESL_DMATRIX *A) { int i,j; double swap; if (A->n != A->m) ESL_EXCEPTION(eslEINVAL, "matrix isn't square"); if (A->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "A isn't of type eslGENERAL"); for (i = 0; i < A->n; i++) for (j = i+1; j < A->m; j++) { swap = A->mx[i][j]; A->mx[i][j] = A->mx[j][i]; A->mx[j][i] = swap; } return eslOK; } /* Function: esl_dmx_Add() * * Purpose: ; adds matrix to matrix and leaves result * in matrix . * * and may be of any type. However, if is a * packed upper triangular matrix (type * ), all values $i>j$ in must be * zero (i.e. must also be upper triangular, though * not necessarily packed upper triangular). * * Throws: if matrices aren't the same dimensions, or * if is and any cell $i>j$ in * is nonzero. */ int esl_dmx_Add(ESL_DMATRIX *A, const ESL_DMATRIX *B) { int i,j; if (A->n != B->n) ESL_EXCEPTION(eslEINVAL, "matrices of different size"); if (A->m != B->m) ESL_EXCEPTION(eslEINVAL, "matrices of different size"); if (A->type == B->type) /* in this case, can just add cell by cell */ { for (i = 0; i < A->ncells; i++) A->mx[0][i] += B->mx[0][i]; } else if (A->type == eslUPPER || B->type == eslUPPER) { /* Logic is: if either matrix is upper triangular, then the operation is * to add upper triangles only. If we try to add a general matrix * to packed UT , make sure all lower triangle entries in are zero. */ if (B->type != eslUPPER) { for (i = 1; i < A->n; i++) for (j = 0; j < i; j++) if (B->mx[i][j] != 0.) ESL_EXCEPTION(eslEINVAL, " has nonzero cells in lower triangle"); } for (i = 0; i < A->n; i++) for (j = i; j < A->m; j++) A->mx[i][j] += B->mx[i][j]; } return eslOK; } /* Function: esl_dmx_Scale() * * Purpose: Calculates : multiply matrix by scalar * and leave answer in . */ int esl_dmx_Scale(ESL_DMATRIX *A, double k) { int i; for (i = 0; i < A->ncells; i++) A->mx[0][i] *= k; return eslOK; } /* Function: esl_dmx_AddScale() * * Purpose: Calculates , leaves answer in . * * Only defined for matrices of the same type ( * or ). * * Throws: if matrices aren't the same dimensions, or * of different types. */ int esl_dmx_AddScale(ESL_DMATRIX *A, double k, const ESL_DMATRIX *B) { int i; if (A->n != B->n) ESL_EXCEPTION(eslEINVAL, "matrices of different size"); if (A->m != B->m) ESL_EXCEPTION(eslEINVAL, "matrices of different size"); if (A->type != A->type) ESL_EXCEPTION(eslEINVAL, "matrices of different type"); for (i = 0; i < A->ncells; i++) A->mx[0][i] += k * B->mx[0][i]; return eslOK; } /* Function: esl_dmx_Permute_PA() * * Purpose: Computes : do a row-wise permutation of a square * matrix , using the permutation matrix

, and put * the result in a square matrix that the caller has * allocated. * * Throws: if , ,

do not have compatible dimensions, * or if or is not of type . */ int esl_dmx_Permute_PA(const ESL_PERMUTATION *P, const ESL_DMATRIX *A, ESL_DMATRIX *B) { int i,ip,j; if (A->n != P->n) ESL_EXCEPTION(eslEINVAL, "matrix dimensions not compatible"); if (A->n != B->n) ESL_EXCEPTION(eslEINVAL, "matrix dimensions not compatible"); if (A->n != A->m) ESL_EXCEPTION(eslEINVAL, "matrix dimensions not compatible"); if (B->n != B->m) ESL_EXCEPTION(eslEINVAL, "matrix dimensions not compatible"); if (A->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "matrix A not of type eslGENERAL"); if (B->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "matrix B not of type eslGENERAL"); for (i = 0; i < A->n; i++) { ip = P->pi[i]; for (j = 0; j < A->m; j++) B->mx[i][j] = A->mx[ip][j]; } return eslOK; } /* Function: esl_dmx_LUP_decompose() * * Purpose: Calculates a permuted LU decomposition of square matrix * ; upon return, is replaced by this decomposition, * where is in the lower triangle (inclusive of the * diagonal) and is the upper triangle (exclusive of * diagonal, which is 1's by definition), and

is the * permutation matrix. Caller provides an allocated * permutation matrix

compatible with the square matrix * . * * Implements Gaussian elimination with pivoting * \citep[p.~759]{Cormen99}. * * Throws: if isn't square, or if

isn't the right * size for , or if isn't of general type. */ int esl_dmx_LUP_decompose(ESL_DMATRIX *A, ESL_PERMUTATION *P) { int i,j,k,kpiv; double max; double swap; if (A->n != A->m) ESL_EXCEPTION(eslEINVAL, "matrix isn't square"); if (P->n != A->n) ESL_EXCEPTION(eslEINVAL, "permutation isn't the right size"); if (A->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "matrix isn't of general type"); esl_permutation_Reuse(P); for (k = 0; k < A->n-1; k++) { /* Identify our pivot; * find row with maximum value in col[k]. */ max = 0.; for (i = k; i < A->n; i++) if (fabs(A->mx[i][k]) > max) { max = fabs(A->mx[i][k]); kpiv = i; } if (max == 0.) ESL_EXCEPTION(eslEDIVZERO, "matrix is singular"); /* Swap those rows (k and kpiv); * and keep track of that permutation in P. (misuse j for swapping integers) */ j = P->pi[k]; P->pi[k] = P->pi[kpiv]; P->pi[kpiv] = j; for (j = 0; j < A->m; j++) { swap = A->mx[k][j]; A->mx[k][j] = A->mx[kpiv][j]; A->mx[kpiv][j] = swap; } /* Gaussian elimination for all rows k+1..n. */ for (i = k+1; i < A->n; i++) { A->mx[i][k] /= A->mx[k][k]; for (j = k+1; j < A->m; j++) A->mx[i][j] -= A->mx[i][k] * A->mx[k][j]; } } return eslOK; } /* Function: esl_dmx_LU_separate() * * Purpose: Separate a square decomposition matrix into its two * triangular matrices and . Caller provides two * allocated and matrices of same size as for * storing the results. * * may be an upper triangular matrix in either unpacked * () or packed () form. * and must be of type. * * Throws: if , , are not of compatible dimensions, * or if or aren't of general type. */ int esl_dmx_LU_separate(const ESL_DMATRIX *LU, ESL_DMATRIX *L, ESL_DMATRIX *U) { int i,j; if (LU->n != LU->m) ESL_EXCEPTION(eslEINVAL, "LU isn't square"); if (L->n != L->m) ESL_EXCEPTION(eslEINVAL, "L isn't square"); if (U->n != U->m) ESL_EXCEPTION(eslEINVAL, "U isn't square"); if (LU->n != L->n) ESL_EXCEPTION(eslEINVAL, "LU, L have incompatible dimensions"); if (LU->n != U->n) ESL_EXCEPTION(eslEINVAL, "LU, U have incompatible dimensions"); if (LU->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "matrix isn't of general type"); if (L->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "matrix isn't of general type"); esl_dmatrix_SetZero(L); esl_dmatrix_SetZero(U); for (i = 0; i < LU->n; i++) for (j = i; j < LU->m; j++) U->mx[i][j] = LU->mx[i][j]; for (i = 0; i < LU->n; i++) { L->mx[i][i] = 1.; for (j = 0; j < i; j++) L->mx[i][j] = LU->mx[i][j]; } return eslOK; } /* Function: esl_dmx_Invert() * * Purpose: Calculates the inverse of square matrix , and stores the * result in matrix . Caller provides an allocated * matrix of same dimensions as . Both must be * of type . * * Peforms the inversion by LUP decomposition followed by * forward/back-substitution \citep[p.~753]{Cormen99}. * * Throws: if , do not have same dimensions, * if isn't square, or if either isn't of * type . * if internal allocations (for LU, and some other * bookkeeping) fail. */ int esl_dmx_Invert(const ESL_DMATRIX *A, ESL_DMATRIX *Ai) { ESL_DMATRIX *LU = NULL; ESL_PERMUTATION *P = NULL; double *y = NULL; /* column vector, intermediate calculation */ double *b = NULL; /* column vector of permuted identity matrix */ int i,j,k; int status; if (A->n != A->m) ESL_EXCEPTION(eslEINVAL, "matrix isn't square"); if (A->n != Ai->n || A->m != Ai->m) ESL_EXCEPTION(eslEINVAL, "matrices are different size"); if (A->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "matrix A not of general type"); if (Ai->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "matrix B not of general type"); /* Copy A to LU, and do an LU decomposition. */ if ((LU = esl_dmatrix_Create(A->n, A->m)) == NULL) goto ERROR; if ((P = esl_permutation_Create(A->n)) == NULL) goto ERROR; if ( esl_dmatrix_Copy(A, LU) != eslOK) goto ERROR; if ( esl_dmx_LUP_decompose(LU, P) != eslOK) goto ERROR; /* Now we have: * PA = LU * * to invert a matrix A, we want A A^-1 = I; * that's PAx = Pb, for columns x of A^-1 and b of the identity matrix; * and that's n equations LUx = Pb; * * so, solve Ly = Pb for y by forward substitution; * then Ux = y by back substitution; * x is then a column of A^-1. * * Do that for all columns. */ ESL_ALLOC(b, sizeof(double) * A->n); ESL_ALLOC(y, sizeof(double) * A->n); for (k = 0; k < A->m; k++) /* for each column... */ { /* build Pb for column j of the identity matrix */ for (i = 0; i < A->n; i++) if (P->pi[i] == k) b[i] = 1.; else b[i] = 0.; /* forward substitution */ for (i = 0; i < A->n; i++) { y[i] = b[i]; for (j = 0; j < i; j++) y[i] -= LU->mx[i][j] * y[j]; } /* back substitution */ for (i = A->n-1; i >= 0; i--) { Ai->mx[i][k] = y[i]; for (j = i+1; j < A->n; j++) Ai->mx[i][k] -= LU->mx[i][j] * Ai->mx[j][k]; Ai->mx[i][k] /= LU->mx[i][i]; } } free(b); free(y); esl_dmatrix_Destroy(LU); esl_permutation_Destroy(P); return eslOK; ERROR: if (y != NULL) free(y); if (b != NULL) free(b); if (LU != NULL) esl_dmatrix_Destroy(LU); if (P != NULL) esl_permutation_Destroy(P); return status; } /***************************************************************** * 6. Optional: interoperability with GSL *****************************************************************/ #ifdef HAVE_LIBGSL #include int esl_dmx_MorphGSL(const ESL_DMATRIX *E, gsl_matrix **ret_G) { gsl_matrix *G = NULL; int i,j; if (E->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "can only morph general matrices to GSL right now"); G = gsl_matrix_alloc(E->m, E->n); for (i = 0; i < E->m; i++) for (j = 0; j < E->n; j++) gsl_matrix_set(G, i, j, E->mx[i][j]); *ret_G = G; return eslOK; } int esl_dmx_UnmorphGSL(const gsl_matrix *G, ESL_DMATRIX **ret_E) { ESL_DMATRIX *E = NULL; int i,j; if ((E = esl_dmatrix_Create(G->size1, G->size2)) == NULL) return eslEMEM; for (i = 0; i < G->size1; i++) for (j = 0; j < G->size2; j++) E->mx[i][j] = gsl_matrix_get(G, i, j); *ret_E = E; return eslOK; } #endif /*HAVE_LIBGSL*/ /***************************************************************** * 7. Optional: Interfaces to LAPACK *****************************************************************/ #ifdef HAVE_LIBLAPACK /* To include LAPACK code, you need to: * 1. declare the C interface to the Fortran routine, * appending _ to the Fortran routine's name (dgeev becomes dgeev_) * * 2. Remember to transpose matrices into column-major * Fortran form * * 3. everything must be passed by reference, not by value * * 4. you don't need any include files, just lapack.a * * 5. Add -llapack to the compile line. * (It doesn't appear that blas or g2c are needed?) */ /* Declare the C interface to the Fortran77 dgeev routine * provided by the LAPACK library: */ extern void dgeev_(char *jobvl, char *jobvr, int *n, double *a, int *lda, double *wr, double *wi, double *vl, int *ldvl, double *vr, int *ldvr, double *work, int *lwork, int *info); /* Function: esl_dmx_Diagonalize() * Incept: SRE, Thu Mar 15 09:28:03 2007 [Janelia] * * Purpose: Given a square real matrix , diagonalize it: * solve for $U^{-1} A U = diag(\lambda_1... \lambda_n)$. * * Upon return, and are vectors * containing the real and complex parts of the eigenvalues * $\lambda_i$; is the $U^{-1}$ matrix containing * the left eigenvectors; and is the $U$ matrix * containing the right eigenvectors. * * and are optional; pass for * either if you don't want that set of eigenvectors. * * This is a C interface to the routine in the * LAPACK linear algebra library. * * Args: A - square nxn matrix to diagonalize * ret_Er - RETURN: real part of eigenvalues (0..n-1) * ret_Ei - RETURN: complex part of eigenvalues (0..n-1) * ret_UL - optRETURN: nxn matrix of left eigenvectors * ret_UR - optRETURN: * * Returns: on success. * and (and , when they are * requested) are allocated here, and must be free'd by the caller. * * Throws: on allocation failure. * In this case, the four return pointers are returned . * * Xref: J1/19. */ int esl_dmx_Diagonalize(const ESL_DMATRIX *A, double **ret_Er, double **ret_Ei, ESL_DMATRIX **ret_UL, ESL_DMATRIX **ret_UR) { int status; double *Er = NULL; double *Ei = NULL; ESL_DMATRIX *At = NULL; ESL_DMATRIX *UL = NULL; ESL_DMATRIX *UR = NULL; double *work = NULL; char jobul, jobur; int lda; int ldul, ldur; int lwork; int info; if (A->n != A->m) ESL_EXCEPTION(eslEINVAL, "matrix isn't square"); if ((At = esl_dmatrix_Clone(A)) == NULL) { status = eslEMEM; goto ERROR; } if ((UL = esl_dmatrix_Create(A->n,A->n)) == NULL) { status = eslEMEM; goto ERROR; } if ((UR = esl_dmatrix_Create(A->n,A->n)) == NULL) { status = eslEMEM; goto ERROR; } ESL_ALLOC(Er, sizeof(double) * A->n); ESL_ALLOC(Ei, sizeof(double) * A->n); ESL_ALLOC(work, sizeof(double) * 8 * A->n); jobul = (ret_UL == NULL) ? 'N' : 'V'; /* do we want left eigenvectors? */ jobur = (ret_UR == NULL) ? 'N' : 'V'; /* do we want right eigenvectors? */ lda = A->n; ldul = A->n; ldur = A->n; lwork = 8*A->n; /* Fortran convention is colxrow, not rowxcol; so transpose * a copy of A before passing it to a Fortran routine. */ esl_dmx_Transpose(At); /* The Fortran77 interface call to LAPACK's dgeev(). * All args must be passed by reference. * Fortran 2D arrays are 1D: so pass the A[0] part of a DSMX. */ dgeev_(&jobul, &jobur, &(At->n), At->mx[0], &lda, Er, Ei, UL->mx[0], &ldul, UR->mx[0], &ldur, work, &lwork, &info); if (info < 0) ESL_XEXCEPTION(eslEINVAL, "argument %d to LAPACK dgeev is invalid", -info); if (info > 0) ESL_XEXCEPTION(eslEINVAL, "diagonalization failed; only eigenvalues %d..%d were computed", info+1, At->n); /* Now, UL, UR are transposed (col x row), so transpose them back to * C language convention. */ esl_dmx_Transpose(UL); esl_dmx_Transpose(UR); esl_dmatrix_Destroy(At); if (ret_UL != NULL) *ret_UL = UL; else esl_dmatrix_Destroy(UL); if (ret_UR != NULL) *ret_UR = UR; else esl_dmatrix_Destroy(UR); if (ret_Er != NULL) *ret_Er = Er; else free(Er); if (ret_Ei != NULL) *ret_Ei = Ei; else free(Ei); free(work); return eslOK; ERROR: if (ret_UL != NULL) *ret_UL = NULL; if (ret_UR != NULL) *ret_UR = NULL; if (ret_Er != NULL) *ret_Er = NULL; if (ret_Ei != NULL) *ret_Ei = NULL; if (At != NULL) esl_dmatrix_Destroy(At); if (UL != NULL) esl_dmatrix_Destroy(UL); if (UR != NULL) esl_dmatrix_Destroy(UR); if (Er != NULL) free(Er); if (Ei != NULL) free(Ei); if (work != NULL) free(work); return status; } #endif /*HAVE_LIBLAPACK*/ /***************************************************************** * 8. Unit tests *****************************************************************/ #ifdef eslDMATRIX_TESTDRIVE static void utest_misc_ops(void) { char *msg = "miscellaneous unit test failed"; ESL_DMATRIX *A, *B, *C; int n = 20; if ((A = esl_dmatrix_Create(n,n)) == NULL) esl_fatal(msg); if ((B = esl_dmatrix_Create(n,n)) == NULL) esl_fatal(msg); if ((C = esl_dmatrix_Create(n,n)) == NULL) esl_fatal(msg); if (esl_dmatrix_SetIdentity(A) != eslOK) esl_fatal(msg); /* A=I */ if (esl_dmx_Invert(A, B) != eslOK) esl_fatal(msg); /* B=I^-1=I */ if (esl_dmx_Multiply(A,B,C) != eslOK) esl_fatal(msg); /* C=I */ if (esl_dmx_Transpose(A) != eslOK) esl_fatal(msg); /* A=I still */ if (esl_dmx_Scale(A, 0.5) != eslOK) esl_fatal(msg); /* A= 0.5I */ if (esl_dmx_AddScale(B, -0.5, C) != eslOK) esl_fatal(msg); /* B= 0.5I */ if (esl_dmx_Add(A,B) != eslOK) esl_fatal(msg); /* A=I */ if (esl_dmx_Scale(B, 2.0) != eslOK) esl_fatal(msg); /* B=I */ if (esl_dmatrix_Compare(A, B, 1e-12) != eslOK) esl_fatal(msg); if (esl_dmatrix_Compare(A, C, 1e-12) != eslOK) esl_fatal(msg); if (esl_dmatrix_Copy(B, C) != eslOK) esl_fatal(msg); if (esl_dmatrix_Compare(A, C, 1e-12) != eslOK) esl_fatal(msg); esl_dmatrix_Destroy(A); esl_dmatrix_Destroy(B); esl_dmatrix_Destroy(C); return; } static void utest_Invert(ESL_DMATRIX *A) { char *msg = "Failure in matrix inversion unit test"; ESL_DMATRIX *Ai = NULL; ESL_DMATRIX *B = NULL; ESL_DMATRIX *I = NULL; if ((Ai = esl_dmatrix_Create(A->n, A->m)) == NULL) esl_fatal(msg); if ((B = esl_dmatrix_Create(A->n, A->m)) == NULL) esl_fatal(msg); if ((I = esl_dmatrix_Create(A->n, A->m)) == NULL) esl_fatal(msg); if (esl_dmx_Invert(A, Ai) != eslOK) esl_fatal("matrix inversion failed"); if (esl_dmx_Multiply(A,Ai,B) != eslOK) esl_fatal(msg); if (esl_dmatrix_SetIdentity(I) != eslOK) esl_fatal(msg); if (esl_dmatrix_Compare(B,I, 1e-12) != eslOK) esl_fatal("inverted matrix isn't right"); esl_dmatrix_Destroy(Ai); esl_dmatrix_Destroy(B); esl_dmatrix_Destroy(I); return; } #endif /*eslDMATRIX_TESTDRIVE*/ /***************************************************************** * 9. Test driver *****************************************************************/ /* gcc -g -Wall -o test -I. -L. -DeslDMATRIX_TESTDRIVE esl_dmatrix.c -leasel -lm */ #ifdef eslDMATRIX_TESTDRIVE #include "easel.h" #include "esl_dmatrix.h" #include "esl_random.h" int main(void) { ESL_RANDOMNESS *r; ESL_DMATRIX *A; int n = 30; int seed = 42; int i,j; double range = 100.; /* Create a square matrix with random values from -range..range */ if ((r = esl_randomness_Create(seed)) == NULL) esl_fatal("failed to create random source"); if ((A = esl_dmatrix_Create(n, n)) == NULL) esl_fatal("failed to create matrix"); for (i = 0; i < n; i++) for (j = 0; j < n; j++) A->mx[i][j] = esl_random(r) * range * 2.0 - range; utest_misc_ops(); utest_Invert(A); esl_randomness_Destroy(r); esl_dmatrix_Destroy(A); return 0; } #endif /*eslDMATRIX_TESTDRIVE*/ /***************************************************************** * 10. Examples *****************************************************************/ /* gcc -g -Wall -o example -I. -DeslDMATRIX_EXAMPLE esl_dmatrix.c easel.c -lm */ #ifdef eslDMATRIX_EXAMPLE /*::cexcerpt::dmatrix_example::begin::*/ #include "easel.h" #include "esl_dmatrix.h" int main(void) { ESL_DMATRIX *A, *B, *C; A = esl_dmatrix_Create(4,4); B = esl_dmatrix_Create(4,4); C = esl_dmatrix_Create(4,4); esl_dmatrix_SetIdentity(A); esl_dmatrix_Copy(A, B); esl_dmx_Multiply(A,B,C); esl_dmatrix_Dump(stdout, C, NULL, NULL); esl_dmatrix_Destroy(A); esl_dmatrix_Destroy(B); esl_dmatrix_Destroy(C); return 0; } /*::cexcerpt::dmatrix_example::end::*/ #endif /*eslDMATRIX_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_dmatrix.c 755 2012-03-21 11:30:23Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_dmatrix.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_sq.h0000664361611702660230000002550112473612607015026 0ustar wheelerteddy/* A sequence. * * SRE, Mon Mar 31 17:03:51 2008 [Janelia] * SVN $Id: esl_sq.h 850 2013-02-04 15:44:04Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_sq.h $ */ #ifndef eslSQ_INCLUDED #define eslSQ_INCLUDED #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif #ifdef eslAUGMENT_MSA #include "esl_msa.h" #endif /* ESL_SQ - a biosequence * * Can be either in text mode , or digital mode . * One of them has to be NULL, and the other contains the data. * * When in text mode, and can hold up to * residues and a terminal '\0', and both are indexed <0..n-1>. * * When in digital mode, and can hold up to * residues; both are indexed <1..n>, and positions 0 and n+1 are * sentinel bytes. The digital sequence uses * as its sentinels; as a hack, uses '\0' as sentinels. This * means that ss+1> is a valid NUL-terminated C string, but * ss> itself would be a string of length 0 because of the * leading NUL sentinel. Watch out for this. * * To save on allocation calls, the structure is designed to be reused * for subsequent sequences, rather than free'd and reallocated - * thus, we keep track of the allocated sizes of all the strings. * * Notes on when we need to reallocate: * - In a text mode sequence (seq 0..n-1), byte salloc-1 is * reserved for the NUL, so the sequence is full when * n == salloc-1. * * - In a digital mode sequence (dsq 1..n), bytes 0 and salloc-1 * are reserved for sentinel bytes, so the reallocation condition * is when n == salloc-2. * * At least for now, the only way to set the structure annotation * field is by a CreateFrom(), by extraction from an MSA, or manually * (by directly allocating a sequence's field). * * A sequence object will usually be holding a complete (full length) * sequence. Three other cases arise less frequently: * * 1. We're a subsequence extracted from a source sequence. * is the name of the source. * is the length of the source (and coords are 1..L). * The subsequence is from .. on the source. * The length of the subsequence is abs(-)+1. * can be greater than for a nucleic acid sequence; * in this case, the subsequence is reverse complemented. * * 2. We're a window on a source sequence. * This is similar to being a subsequence, with the added * wrinkle that we're scanning over a long source sequence * in overlapping segments, defined by a "previous context" * and a "new window" (the whole sequence is n=C+W * residues long): * s C W e * current window: |------||------------| * next window read: |------||------------| * s C W e * Here, dsq[1..n] is source[s..e]; each newly read * window starts at dsq[C+1], and is preceded by C * residues of context. * * 3. We're just after information about the sequence, not the * sequence itself; everything except the per-residue information * (such as and ). We do this when SSI indexing, * for example, so we don't have to read entire huge seqs into * memory just to calculate their lengths for the index. * * Note/TODO: use of "\0" empty string to indicate lack of optional * acc, desc info is now deprecated. Cannot distinguish empty string * from lack of annotation. Should use NULL ptr instead. Fix this in * future. (21 Nov 09 xref J5/114) * */ typedef struct { /*::cexcerpt::sq_sq::begin::*/ char *name; /* name; one word, no whitespace ("\0" if no name) */ char *acc; /* optional accession (1 word) ("\0" if none) */ char *desc; /* description line ("\0" if no description) */ int32_t tax_id; /* NCBI taxonomy id (-1 if none) */ char *seq; /* sequence [0..n-1], or NULL if digital */ ESL_DSQ *dsq; /* digitized sequence [1..n], or NULL if text */ char *ss; /* optional sec structure [0..n-1], [1..n], or NULL */ int64_t n; /* length of seq (or dsq) and ss */ /*::cexcerpt::sq_sq::end::*/ /* Coordinate info for: seq subseq window info */ /* ---- ------ ------ ----- */ int64_t start; /* coord of seq[0],dsq[1] on source [1..L] 1 1<=i<=L 1<=i<=L 0 */ int64_t end; /* coord of seq[n-1],dsq[n] on source[1..L] L 1<=j<=L 1<=j<=L 0 */ int64_t C; /* # of context residues for a window 0 0 n-W 0 */ int64_t W; /* window width L n n-C 0 */ int64_t L; /* source sequence length in residues L L (or -1) L (or -1) L */ /* and n: length of seq (or dsq) and ss actually stored: L abs(j-i)+1 C+W 0 */ /* In all the above bookkeeping, a -1 means "unknown" */ char *source; /* name of the source of a subseq/window; or MSA name; or ""*/ /* Memory allocation bookkeeping: (all inclusive of \0; >= strlen()+1) */ int nalloc; /* allocated length of name */ int aalloc; /* allocated length of accession */ int dalloc; /* allocated length of description */ int64_t salloc; /* alloc for seq or dsq, and ss if present */ int srcalloc; /* allocated length for source name */ /* Disk offset bookkeeping: */ int64_t idx; /* ctr for which # seq this is; -1 if not counting */ off_t roff; /* record offset (start of record); -1 if none */ off_t hoff; /* offset to last byte of header; -1 if unknown */ off_t doff; /* data offset (start of sequence data); -1 if none */ off_t eoff; /* offset to last byte of record; -1 if unknown */ /* Optional information for extra residue markups. * The number of them, and their tags are arbitrary */ char **xr_tag; /* markup tags for extra residue markups [0..ntr-1][free-text], [0..ntr-1][free-text], or NULL */ char **xr; /* annotations for extra residue markups [0..ntr-1][0..n-1], [0..ntr-1][1..n], or NULL */ int nxr; /* number of extra residue markups */ /* Copy of a pointer to the alphabet, if digital mode */ #if defined(eslAUGMENT_ALPHABET) const ESL_ALPHABET *abc; /* reference to the alphabet for */ #else const void *abc; /* void reference, if we're not even augmented */ #endif } ESL_SQ; typedef struct { int count; /* number of objects in the block */ int listSize; /* maximum number elements in the list */ int complete; /*TRUE if the the final ESL_SQ element on the block is complete, FALSE if it's only a partial winow of the full sequence*/ int64_t first_seqidx;/*unique identifier of the first ESL_SQ object on list; the seqidx of the i'th entry on list is first_seqidx+i */ ESL_SQ *list; /* array of objects */ } ESL_SQ_BLOCK; /* These control default initial allocation sizes in an ESL_SQ. */ #define eslSQ_NAMECHUNK 32 /* allocation unit for name, source */ #define eslSQ_ACCCHUNK 32 /* allocation unit for accession */ #define eslSQ_DESCCHUNK 128 /* allocation unit for description */ #define eslSQ_SEQCHUNK 256 /* allocation unit for seqs */ extern ESL_SQ *esl_sq_Create(void); extern ESL_SQ *esl_sq_CreateFrom(const char *name, const char *seq, const char *desc, const char *acc, const char *ss); extern int esl_sq_Grow (ESL_SQ *sq, int64_t *ret_nsafe); extern int esl_sq_GrowTo(ESL_SQ *sq, int64_t n); extern int esl_sq_Copy(const ESL_SQ *src, ESL_SQ *dst); extern int esl_sq_Compare (ESL_SQ *sq1, ESL_SQ *sq2); extern int esl_sq_Reuse (ESL_SQ *sq); extern int esl_sq_IsDigital(const ESL_SQ *sq); extern int esl_sq_IsText (const ESL_SQ *sq); extern void esl_sq_Destroy (ESL_SQ *sq); extern int esl_sq_SetName (ESL_SQ *sq, const char *name); extern int esl_sq_SetAccession (ESL_SQ *sq, const char *acc); extern int esl_sq_SetDesc (ESL_SQ *sq, const char *desc); extern int esl_sq_SetSource (ESL_SQ *sq, const char *source); extern int esl_sq_FormatName (ESL_SQ *sq, const char *name, ...); extern int esl_sq_FormatAccession(ESL_SQ *sq, const char *acc, ...); extern int esl_sq_FormatDesc (ESL_SQ *sq, const char *desc, ...); extern int esl_sq_FormatSource (ESL_SQ *sq, const char *source, ...); extern int esl_sq_AppendDesc (ESL_SQ *sq, const char *desc); extern int esl_sq_SetCoordComplete(ESL_SQ *sq, int64_t L); extern int esl_sq_CAddResidue (ESL_SQ *sq, char c); extern int esl_sq_ReverseComplement(ESL_SQ *sq); extern int esl_sq_Checksum(const ESL_SQ *sq, uint32_t *ret_checksum); extern int esl_sq_CountResidues(const ESL_SQ *sq, int start, int L, float *f); #ifdef eslAUGMENT_ALPHABET extern ESL_SQ *esl_sq_CreateDigital(const ESL_ALPHABET *abc); extern ESL_SQ *esl_sq_CreateDigitalFrom(const ESL_ALPHABET *abc, const char *name, const ESL_DSQ *dsq, int64_t L, const char *desc, const char *acc, const char *ss); extern int esl_sq_Digitize(const ESL_ALPHABET *abc, ESL_SQ *sq); extern int esl_sq_Textize(ESL_SQ *sq); extern int esl_sq_GuessAlphabet(ESL_SQ *sq, int *ret_type); extern int esl_sq_XAddResidue(ESL_SQ *sq, ESL_DSQ x); extern int esl_sq_ConvertDegen2X(ESL_SQ *sq); #endif #ifdef eslAUGMENT_MSA extern int esl_sq_GetFromMSA (const ESL_MSA *msa, int which, ESL_SQ *sq); extern int esl_sq_FetchFromMSA(const ESL_MSA *msa, int which, ESL_SQ **ret_sq); #endif extern ESL_SQ_BLOCK *esl_sq_CreateBlock(int count); #ifdef eslAUGMENT_ALPHABET extern ESL_SQ_BLOCK *esl_sq_CreateDigitalBlock(int count, const ESL_ALPHABET *abc); #endif extern void esl_sq_DestroyBlock(ESL_SQ_BLOCK *sqBlock); #endif /*eslSQ_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_wuss.tex0000664361611702660230000000222412473612610015744 0ustar wheelerteddy The wuss module implements routines for using WUSS notation to represent RNA secondary structures. The API provides the following converters: \begin{tabular}{ll} \ccode{esl\_wuss2ct()} & Convert WUSS string to Zuker CT array. \\ \ccode{esl\_ct2wuss()} & Convert CT array (no pk's) to WUSS string. \\ \ccode{esl\_wuss2kh()} & Convert WUSS string to old format (Konings/Hogeweg).\\ \ccode{esl\_kh2wuss()} & Convert old format to WUSS string.\\ \ccode{esl\_wuss\_full()}& Convert simple WUSS to full (output) WUSS.\\ \ccode{esl\_wuss\_nopseudo()} & Crudely remove pseudoknot annotation from WUSS string.\\ \end{tabular} WUSS notation is defined later in the Formats section of this document. So-called ``old'' (KH) format (old because COVE used it, whereas Infernal uses WUSS) for a secondary structure annotation string used \ccode{><} pairs to annotate base pairs, as in \ccode{>>>....<<<} for a three-base stem with a four-base single stranded loop. A CT array is a \ccode{1..n} array for a sequence of length \ccode{n}, where \ccode{ct[i]} is either an index \ccode {1..n} of a position that residue \ccode{i} base pairs to, or 0 if \ccode{i} is unpaired. hmmer-3.1b2/easel/esl_sqio.h0000664361611702660230000001776612473612607015374 0ustar wheelerteddy/* Unaligned sequence file i/o. * * SVN $Id: esl_sqio.h 863 2013-04-18 13:40:02Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_sqio.h $ */ #ifndef eslSQIO_INCLUDED #define eslSQIO_INCLUDED #include #include "esl_sqio_ascii.h" #ifdef eslAUGMENT_NCBI #include "esl_sqio_ncbi.h" #endif #include "esl_sq.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif #ifdef eslAUGMENT_MSA #include "esl_msa.h" #include "esl_msafile.h" #endif /*::cexcerpt::sq_sqio_data::begin::*/ /* ESL_SQDATA: * Data for different sequence formats. */ typedef union { ESL_SQASCII_DATA ascii; #ifdef eslAUGMENT_NCBI ESL_SQNCBI_DATA ncbi; #endif } ESL_SQDATA; /*::cexcerpt::sq_sqio_data::end::*/ /* ESL_SQFILE: * An open sequence file for reading. */ typedef struct esl_sqio_s { char *filename; /* Name of file (for diagnostics) */ /* In digital mode, we have an alphabet ptr */ int do_digital; /* TRUE if we're reading in digital mode */ #if defined(eslAUGMENT_ALPHABET) const ESL_ALPHABET *abc; #else void *abc; #endif /* Format-specific configuration */ int format; /* Format code of this file */ ESL_DSQ inmap[128]; /* an input map, 0..127 */ /* function pointers to format specific routines */ int (*position) (struct esl_sqio_s *sqfp, off_t offset); void (*close) (struct esl_sqio_s *sqfp); int (*set_digital) (struct esl_sqio_s *sqfp, const ESL_ALPHABET *abc); int (*guess_alphabet) (struct esl_sqio_s *sqfp, int *ret_type); int (*read) (struct esl_sqio_s *sqfp, ESL_SQ *sq); int (*read_info) (struct esl_sqio_s *sqfp, ESL_SQ *sq); int (*read_seq) (struct esl_sqio_s *sqfp, ESL_SQ *sq); int (*read_window) (struct esl_sqio_s *sqfp, int C, int W, ESL_SQ *sq); int (*echo) (struct esl_sqio_s *sqfp, const ESL_SQ *sq, FILE *ofp); int (*read_block) (struct esl_sqio_s *sqfp, ESL_SQ_BLOCK *sqBlock, int max_residues, int max_sequences, int long_target); #ifdef eslAUGMENT_SSI int (*open_ssi) (struct esl_sqio_s *sqfp, const char *ssifile_hint); int (*pos_by_key) (struct esl_sqio_s *sqfp, const char *key); int (*pos_by_number) (struct esl_sqio_s *sqfp, int which); int (*fetch) (struct esl_sqio_s *sqfp, const char *key, ESL_SQ *sq); int (*fetch_info) (struct esl_sqio_s *sqfp, const char *key, ESL_SQ *sq); int (*fetch_subseq) (struct esl_sqio_s *sqfp, const char *source, int64_t start, int64_t end, ESL_SQ *sq); #endif int (*is_rewindable) (const struct esl_sqio_s *sqfp); const char *(*get_error) (const struct esl_sqio_s *sqfp); ESL_SQDATA data; /* format specific data */ } ESL_SQFILE; #if defined(eslAUGMENT_ALPHABET) /* ESL_SQCACHE: * A entire database cached into memory. */ typedef struct esl_sqcache_s { char *filename; /* Name of file (for diagnostics) */ int format; /* Format code of this file */ const ESL_ALPHABET *abc; /* alphabet for database */ uint32_t seq_count; /* number of sequences */ uint64_t res_count; /* number of residues */ uint32_t max_seq; /* longest sequence */ ESL_SQ *sq_list; /* list of cached sequences [0 .. seq_count-1] */ void *residue_mem; /* memory holding the residues */ void *header_mem; /* memory holding the header strings */ uint64_t res_size; /* size of residue memory allocation */ uint64_t hdr_size; /* size of header memory allocation */ } ESL_SQCACHE; #endif /*::cexcerpt::sq_sqio_format::begin::*/ /* Unaligned file format codes * These codes are coordinated with the msa module. * - 0 is an unknown/unassigned format (eslSQFILE_UNKNOWN, eslMSAFILE_UNKNOWN) * - <=100 is reserved for sqio, for unaligned formats * - >100 is reserved for msa, for aligned formats */ #define eslSQFILE_UNKNOWN 0 #define eslSQFILE_FASTA 1 #define eslSQFILE_EMBL 2 /* EMBL/Swiss-Prot/TrEMBL */ #define eslSQFILE_GENBANK 3 /* GenBank */ #define eslSQFILE_DDBJ 4 /* DDBJ (currently passed to GenBank parser */ #define eslSQFILE_UNIPROT 5 /* UniProt (passed to EMBL parser) */ #define eslSQFILE_NCBI 6 /* NCBI (blast db) */ #define eslSQFILE_DAEMON 7 /* Farrar's "daemon" format for hmmpgmd queries: fasta with // end-of-record terminator */ #define eslSQFILE_HMMPGMD 8 /* Farrar's hmmpgmd database format: fasta w/ extra header line starting in '#' */ #define eslSQFILE_FMINDEX 9 /* the pressed FM-index format used for the FM-index-based MSV acceleration */ /*::cexcerpt::sq_sqio_format::end::*/ /* eslREADBUFSIZE is the fixed size of a block to bring in at one time, * in character-based (fread()) parsers (like the FASTA parser). */ #define eslREADBUFSIZE 4096 extern int esl_sqfile_Open(const char *seqfile, int fmt, const char *env, ESL_SQFILE **ret_sqfp); extern int esl_sqfile_Position(ESL_SQFILE *sqfp, off_t offset); extern void esl_sqfile_Close(ESL_SQFILE *sqfp); #ifdef eslAUGMENT_ALPHABET extern int esl_sqfile_OpenDigital(const ESL_ALPHABET *abc, const char *filename, int format, const char *env, ESL_SQFILE **ret_sqfp); extern int esl_sqfile_SetDigital(ESL_SQFILE *sqfp, const ESL_ALPHABET *abc); extern int esl_sqfile_GuessAlphabet(ESL_SQFILE *sqfp, int *ret_type); extern int esl_sqfile_Cache(const ESL_ALPHABET *abc, const char *seqfile, int fmt, const char *env, ESL_SQCACHE **ret_sqcache); extern void esl_sqfile_Free(ESL_SQCACHE *sqcache); #endif const char *esl_sqfile_GetErrorBuf(const ESL_SQFILE *sqfp); extern int esl_sqfile_IsRewindable(const ESL_SQFILE *sqfp); extern int esl_sqio_Ignore(ESL_SQFILE *sqfp, const char *ignoredchars); extern int esl_sqio_AcceptAs(ESL_SQFILE *sqfp, char *xchars, char readas); extern int esl_sqio_EncodeFormat(char *fmtstring); extern char *esl_sqio_DecodeFormat(int fmt); extern int esl_sqio_IsAlignment(int fmt); extern int esl_sqio_Read (ESL_SQFILE *sqfp, ESL_SQ *sq); extern int esl_sqio_ReadInfo (ESL_SQFILE *sqfp, ESL_SQ *sq); extern int esl_sqio_ReadWindow (ESL_SQFILE *sqfp, int C, int W, ESL_SQ *sq); extern int esl_sqio_ReadSequence(ESL_SQFILE *sqfp, ESL_SQ *sq); extern int esl_sqio_Echo (ESL_SQFILE *sqfp, const ESL_SQ *sq, FILE *ofp); extern int esl_sqio_ReadBlock (ESL_SQFILE *sqfp, ESL_SQ_BLOCK *sqBlock, int max_residues, int max_sequences, int long_target); #ifdef eslAUGMENT_SSI extern int esl_sqfile_OpenSSI (ESL_SQFILE *sqfp, const char *ssifile_hint); extern int esl_sqfile_PositionByKey (ESL_SQFILE *sqfp, const char *key); extern int esl_sqfile_PositionByNumber(ESL_SQFILE *sqfp, int which); extern int esl_sqio_Fetch (ESL_SQFILE *sqfp, const char *key, ESL_SQ *sq); extern int esl_sqio_FetchInfo (ESL_SQFILE *sqfp, const char *key, ESL_SQ *sq); extern int esl_sqio_FetchSubseq(ESL_SQFILE *sqfp, const char *source, int64_t start, int64_t end, ESL_SQ *sq); #endif extern int esl_sqio_Write(FILE *fp, ESL_SQ *s, int format, int update); extern int esl_sqio_Parse(char *buffer, int size, ESL_SQ *s, int format); #endif /*eslSQIO_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_distance.h0000664361611702660230000000573312473612606016201 0ustar wheelerteddy/* Distances between aligned sequences, including both * probabilistic evolutionary models and ad hoc measures. * * SRE, Fri Apr 28 06:41:13 2006 [New York] * SVN $Id: esl_distance.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_distance.h $ */ #ifndef eslDISTANCE_INCLUDED #define eslDISTANCE_INCLUDED #include "easel.h" /* ESL_DSQ declaration */ #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" /* ESL_ALPHABET declaration */ #endif #ifdef eslAUGMENT_DMATRIX #include "esl_dmatrix.h" /* ESL_DMATRIX declaration */ #endif #ifdef eslAUGMENT_RANDOM #include "esl_random.h" #endif /* 1. Pairwise distances for aligned text sequences. */ extern int esl_dst_CPairId(const char *asq1, const char *asq2, double *opt_pid, int *opt_nid, int *opt_n); extern int esl_dst_CJukesCantor(int K, const char *as1, const char *as2, double *opt_distance, double *opt_variance); /* 2. Pairwise distances for aligned digital seqs. */ #ifdef eslAUGMENT_ALPHABET extern int esl_dst_XPairId(const ESL_ALPHABET *abc, const ESL_DSQ *ax1, const ESL_DSQ *ax2, double *opt_pid, int *opt_nid, int *opt_n); extern int esl_dst_XJukesCantor(const ESL_ALPHABET *abc, const ESL_DSQ *ax, const ESL_DSQ *ay, double *opt_distance, double *opt_variance); #endif /* 3. Distance matrices for aligned text sequences. */ #ifdef eslAUGMENT_DMATRIX extern int esl_dst_CPairIdMx (char **as, int N, ESL_DMATRIX **ret_S); extern int esl_dst_CDiffMx (char **as, int N, ESL_DMATRIX **ret_D); extern int esl_dst_CJukesCantorMx(int K, char **as, int N, ESL_DMATRIX **opt_D, ESL_DMATRIX **opt_V); #endif /* 4. Distance matrices for aligned digital sequences. */ #if defined(eslAUGMENT_DMATRIX) && defined(eslAUGMENT_ALPHABET) extern int esl_dst_XPairIdMx(const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, ESL_DMATRIX **ret_S); extern int esl_dst_XDiffMx (const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, ESL_DMATRIX **ret_D); extern int esl_dst_XJukesCantorMx(const ESL_ALPHABET *abc, ESL_DSQ **ax, int nseq, ESL_DMATRIX **opt_D, ESL_DMATRIX **opt_V); #endif /* 5. Average pairwise identity for multiple alignments. */ #ifdef eslAUGMENT_RANDOM extern int esl_dst_CAverageId(char **as, int nseq, int max_comparisons, double *ret_id); #endif #if defined(eslAUGMENT_RANDOM) && defined(eslAUGMENT_ALPHABET) extern int esl_dst_XAverageId(const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, int max_comparisons, double *ret_id); #endif #endif /*eslDISTANCE_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_sqio_ncbi.h0000664361611702660230000001253312473612607016352 0ustar wheelerteddy/* Unaligned ncbi sequence file i/o. * * SVN $Id: esl_sqio_ncbi.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_sqio_ncbi.h $ */ #ifndef eslSQIO_NCBI_INCLUDED #define eslSQIO_NCBI_INCLUDED #include #include "esl_sq.h" #include "esl_sqio.h" #ifdef HAVE_SYS_TYPES_H #include #endif /* forward declaration */ struct esl_sqio_s; /* set the max residue count to 1 meg when reading a block */ #define MAX_RESIDUE_COUNT (1024 * 1024) #define MAX_DB_VOLUMES 100 /* ESL_SQNCBI_VOLUME: * Information for the volume */ typedef struct esl_sqncbi_vol_s { char *name; /* name of the volume */ uint32_t start_seq; /* starting sequence number */ uint32_t end_seq; /* starting sequence number */ uint32_t hdr_off; /* disk offset in .pin to header index */ uint32_t seq_off; /* disk offset to .pin to sequence index */ uint32_t amb_off; /* disk offset to .pin to ambiguous index */ } ESL_SQNCBI_VOLUME; /* ESL_SQNCBI: * An open sequence file for reading. */ typedef struct esl_sqncbi_s { FILE *fppin; /* Open .pin file ptr */ FILE *fpphr; /* Open .phr file ptr */ FILE *fppsq; /* Open .psq file ptr */ char errbuf[eslERRBUFSIZE];/* parse error mesg. Size must match msa.h */ char *title; /* database title */ int version; /* database version */ char *timestamp; /* time stamp of database creation */ uint32_t num_seq; /* number of sequences in the database */ uint64_t total_res; /* total number of residues */ uint32_t max_seq; /* longest sequence in the database */ uint32_t hdr_off; /* disk offset in .pin to header index */ uint32_t seq_off; /* disk offset to .pin to sequence index */ uint32_t amb_off; /* disk offset to .pin to ambiguous index */ int index; /* current sequence index in the database */ uint32_t vol_index; /* current volume index (-1 if no volumes) */ uint32_t roff; /* record offset (start of header) */ uint32_t hoff; /* offset to last byte of header */ uint32_t doff; /* data offset (start of sequence data) */ uint32_t eoff; /* offset to last byte of sequence */ uint32_t index_start; /* start of indexes currently loaded */ uint32_t index_end; /* end of indexes currently loaded */ uint32_t *hdr_indexes; /* block of header indexes from .pin */ uint32_t *seq_indexes; /* block of header indexes from .pin */ uint32_t *amb_indexes; /* block of header indexes from .pin */ /* volume information */ uint32_t volumes; /* number of volumes */ ESL_SQNCBI_VOLUME vols[MAX_DB_VOLUMES]; /* information for the current header */ unsigned char *hdr_buf; /* buffer for holding unparsed header */ unsigned char *hdr_ptr; /* current parser position */ int hdr_alloced; /* size of the allocated buffer */ char *name_ptr; /* pointer to name NOT NULL TERMINATED */ int32_t name_size; /* length of the name */ char *acc_ptr; /* pointer to accession NOT NULL TERMINATED */ int32_t acc_size; /* length of the accession */ int32_t int_id; /* integer sequence id */ char *str_id_ptr; /* pointer to id NOT NULL TERMINATED */ int32_t str_id_size; /* length of the id */ /* information on the current sequence */ uint32_t seq_apos; /* position of ambiguity table */ uint32_t seq_alen; /* size of ambiguity table */ uint32_t seq_cpos; /* current position in ambiguity table */ int32_t seq_L; /* true sequence length */ /* alphabet used to convert ncbi to hmmer to ascii */ int alphatype; /* amino or dna */ char *alphasym; /* string of residues */ } ESL_SQNCBI_DATA; extern int esl_sqncbi_Open(char *seqfile, int format, struct esl_sqio_s *sqfp); #endif /*eslSQIO_NCBI_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_swat.c0000664361611702660230000001467012473612610015353 0ustar wheelerteddy/* This module is unfinished; don't try to use it for anything! */ /* Standard Smith/Waterman sequence alignment * * Contents: * * */ #include "esl_config.h" #include "easel.h" #include "esl_composition.h" #include "esl_scorematrix.h" #define eslSWAT_PROHIBIT -999999999 /* Function: esl_swat_Score() * Incept: SRE, Fri Apr 13 16:40:15 2007 [Janelia] * * Purpose: Implements Smith/Waterman local sequence alignment, recovering * only a score, not an alignment. Query sequence of length * is aligned to subject sequence of length , using * a scoring system composed of residue alignment scores in matrix * , a gap-open score , and a gap-extend score . * * A gap of $k$ residues is scored as $\times (k-1)$ * . That is, the gap-open score is applied to the * first residue in the gap, and the gap-extend penalty is * applied to each remaining residue. Additionally, both * and should be negative numbers. * * Returns: on success, and the raw alignment score is returned in * . * * Throws: (no abnormal error conditions) */ int esl_swat_Score(ESL_DSQ *x, int L, ESL_DSQ *y, int M, ESL_SCOREMATRIX *S, int gop, int gex, int *ret_sc) { int status; int i,j; int **rowmem = NULL; int *mc, *mp, *ixc, *ixp, *iyc, *iyp; int maxsc; /* DP lattice is organized in rows (0) 1..i..M with target running vertically; * columns (0) 1..j..L with query running horizontally. */ /* Allocation; * we need two rows of length (L+1) for each of three matrices, M, IX, IY. * in the future, optimize by providing this from the caller. */ ESL_ALLOC(rowmem, sizeof(int *) * 6); rowmem[0] = NULL; ESL_ALLOC(rowmem[0], sizeof(int) * 6 * (L+1)); for (i = 1; i < 6; i++) rowmem[i] = rowmem[0] + i*(L+1); /* Initializations. */ rowmem[1][0] = 0; rowmem[3][0] = eslSWAT_PROHIBIT; rowmem[5][0] = eslSWAT_PROHIBIT; for (j = 0; j <= L; j++) { rowmem[0][j] = 0; rowmem[2][j] = eslSWAT_PROHIBIT; rowmem[4][j] = eslSWAT_PROHIBIT; } maxsc = 0; for (i = 1; i <= M; i++) /* for each position in target... */ { if (i%2) { mp = rowmem[0]; mc = rowmem[1]; ixp = rowmem[2]; ixc = rowmem[3]; iyp = rowmem[4]; iyc = rowmem[5]; } else { mc = rowmem[0]; mp = rowmem[1]; ixc = rowmem[2]; ixp = rowmem[3]; iyc = rowmem[4]; iyp = rowmem[5]; } for (j = 1; j <= L; j++) /* for each position in query... */ { /* Match score at mc[j] aligns xj,yi. We can reach here from M (mp[j-1]), IX (ixp[j-1]), or IY (iyp[j-1]) */ mc[j] = 0; if (mp[j-1] > mc[j]) mc[j] = mp[j-1]; if (ixp[j-1] > mc[j]) mc[j] = ixp[j-1]; if (iyp[j-1] > mc[j]) mc[j] = iyp[j-1]; mc[j] += S->s[x[j]][y[i]]; if (mc[j] > maxsc) maxsc = mc[j]; /* IX score at ixc[j] aligns xj to gap (horizontal move). * We reach here from mc[j-1] (gap-open) or ixc[j-1] (gap-extend). */ ixc[j] = mc[j-1] + gop; if (ixc[j-1] + gex > ixc[j]) ixc[j] = ixc[j-1] + gex; /* analogously for vertical move to iyc. */ iyc[j] = mp[j] + gop; if (iyp[j] + gex > iyc[j]) iyc[j] = iyp[j] + gex; } } *ret_sc = maxsc; free(rowmem[0]); free(rowmem); return eslOK; ERROR: *ret_sc = 0; if (rowmem != NULL) { if (rowmem[0] != NULL) free(rowmem[0]); free(rowmem); } return status; } /***************************************************************** * Stats driver. *****************************************************************/ /* gcc -I. -L. -g -Wall -DeslSWAT_STATS -o stats esl_swat.c -leasel -lm ./stats */ #ifdef eslSWAT_STATS #include "easel.h" #include "esl_getopts.h" #include "esl_fileparser.h" #include "esl_scorematrix.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_histogram.h" int main(int argc, char **argv) { int status; ESL_RANDOMNESS *r = esl_randomness_Create(0); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); ESL_SCOREMATRIX *S = NULL; ESL_DSQ *x = NULL; /* iid query */ ESL_DSQ *y = NULL; /* iid target */ double lambda; double bg[20]; /* iid background probabilities */ int L; /* query length */ int M; /* target length */ int nseq; /* number of target seqs to simulate */ int i; int gop; int gex; char *mxfile = "PMX"; int raw_sc; /* Configuration */ L = 400; /* query length */ M = 400; /* target length */ nseq = 50000; gop = -11; gex = -1; lambda = 0.3207; ESL_ALLOC(x, sizeof(ESL_DSQ) * (L+2)); ESL_ALLOC(y, sizeof(ESL_DSQ) * (M+2)); /* Input an amino acid score matrix from a file. */ if (mxfile != NULL) { ESL_FILEPARSER *efp = NULL; if ( esl_fileparser_Open(mxfile, NULL, &efp) != eslOK) esl_fatal("failed to open score file %s", mxfile); if ( esl_scorematrix_Read(efp, abc, &S) != eslOK) esl_fatal("failed to read matrix from %s", mxfile); esl_fileparser_Close(efp); } else { /* default = BLOSUM62 */ S = esl_scorematrix_Create(abc); esl_scorematrix_Set("BLOSUM62", S); } esl_composition_BL62(bg); esl_rsq_xIID(r, bg, 20, L, x); for (i = 0; i < nseq; i++) { esl_rsq_xIID(r, bg, 20, M, y); esl_swat_Score(x, L, y, M, S, gop, gex, &raw_sc); printf("%d\n", raw_sc); } free(x); free(y); esl_scorematrix_Destroy(S); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); exit(0); ERROR: exit(status); } #endif /*eslSWAT_STATS*/ /***************************************************************** * Unit tests *****************************************************************/ void utest_Score(char *s1, char *s2, ESL_SCOREMATRIX *S, int gop, int gex, int expect_score) { } /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_swat.c 849 2013-01-31 15:10:24Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_swat.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_dirichlet.tex0000664361611702660230000000521212473612606016717 0ustar wheelerteddy The dirichlet module contains routines for using Beta, Gamma, and Dirichlet densities. In particular, it implements mixture Dirichlet priors, which are useful in a variety of parameter estimation tasks. The Dirichlet PDF is: \begin{equation} P(\vec{p}) = \frac{\Gamma{\sum_i \alpha_i}}{\prod_i \Gamma(\alpha_i)} \prod_i p_i^{\alpha_i-1} \end{equation} \subsection{The dirichlet API} The module implements one object, \ccode{ESL\_MIXDCHLET}, which holds a mixture Dirichlet prior. The API consists of the following functions: \vspace{1em} \begin{tabular}{ll}\hline \multicolumn{2}{c}{\textbf{mixture Dirichlet priors}}\\ \ccode{esl\_mixdchlet\_Create()} & Allocates a new mixture Dirichlet.\\ \ccode{esl\_mixdchlet\_Destroy()} & Free's a mixture Dirichlet.\\ \ccode{esl\_mixdchlet\_MPParameters()} & Mean posterior probability parameter estimation.\\ \multicolumn{2}{c}{\textbf{Dirichlet, Gamma density routines}}\\ \ccode{esl\_dirichlet\_LogProbData()} & $\log P( \mbox{count vector} \mid \mbox{mixture Dirichlet}$.\\ \ccode{esl\_dirichlet\_LogProbProbs()} & $\log P( \mbox{prob vector} \mid \mbox{mixture Dirichlet}$.\\ \ccode{esl\_dirichlet\_LogGamma()} & $\log \Gamma(x)$.\\ \multicolumn{2}{c}{\textbf{Sampling code (requires augmentation w/ random)}}\\ \ccode{esl\_dirichlet\_\{D,F\}Sample()} & Sample a probability vector from a Dirichlet.\\ \ccode{esl\_dirichlet\_\{D,F\}SampleUniform()} & Sample a probability vector uniformly.\\ \ccode{esl\_dirichlet\_SampleBeta()} & Sample from Beta$(\theta_1, \theta_2$).\\ \multicolumn{2}{c}{\textbf{Input from file (requires augmentation w/ fileparser)}}\\ \ccode{esl\_mixdchlet\_Read()} & Input of a mixture Dirichlet from a file.\\ \hline \end{tabular} \subsection{Example of using the dirichlet API} An example that reads a mixture Dirichlet prior from a file, samples a probability vector from it, samples a count vector from the probability vector, then infers which mixture component generated the data and uses mean posterior estimation to reestimate the probability vector from the counts: \input{cexcerpts/dirichlet_example} \subsection{Accessing information in the ESL\_MIXDCHLET object} You may need to access the information in the \ccode{ESL\_MIXDCHLET} object. The data fields inside this structure are: \input{cexcerpts/dirichlet_mixdchlet} \subsection{Augmentations} The \ccode{esl\_dirichlet\_Sample*()} functions are only available when the module is augmented with the \ccode{random} module. The \ccode{esl\_dirichlet\_Read()} function is only available when the module is augmented with the \ccode{fileparser} module. hmmer-3.1b2/easel/esl_gamma.c0000664361611702660230000004633212473612606015464 0ustar wheelerteddy/* Statistical routines for gamma distributions. * * xref STL10/65 */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_stats.h" #include "esl_gamma.h" #ifdef eslAUGMENT_RANDOM #include "esl_random.h" #endif static int tau_by_moments(double *x, int n, double mu, double *ret_tau, double *ret_mean, double *ret_logsum); static double tau_function(double tau, double mean, double logsum); /**************************************************************************** * Routines for evaluating densities and distributions ****************************************************************************/ /* Function: esl_gam_pdf() * * Purpose: Calculates the gamma PDF $P(X=x)$ given value , * location parameter , scale parameter , and shape * parameter . */ double esl_gam_pdf(double x, double mu, double lambda, double tau) { double y = lambda * (x - mu); double gamtau; double val; if (y < 0.) return 0.; esl_stats_LogGamma(tau, &gamtau); val = ((tau*log(lambda) + (tau-1.)*log(x-mu)) - gamtau) - y; return exp(val); } /* Function: esl_gam_logpdf() * * Purpose: Calculates log of the probability density function * for the gamma, $\log P(X=x)$, given value , * location parameter , scale parameter , and * shape parameter . */ double esl_gam_logpdf(double x, double mu, double lambda, double tau) { double y = lambda * (x - mu); double gamtau; double val; if (x < 0.) return -eslINFINITY; esl_stats_LogGamma(tau, &gamtau); val = ((tau*log(lambda) + (tau-1.)*log(x-mu)) - gamtau) - y; return val; } /* Function: esl_gam_cdf() * * Purpose: Calculates the cumulative distribution function * for the gamma, $P(X \leq x)$, given value , * location parameter , scale parameter , and * shape parameter . * * (For $\mu=0$, $\lambda = 1$, this is the * incomplete Gamma function $P(\tau,x)$.) */ double esl_gam_cdf(double x, double mu, double lambda, double tau) { double y = lambda * (x - mu); double val; if (y <= 0.) return 0.; esl_stats_IncompleteGamma(tau, y, &val, NULL); return val; } /* Function: esl_gam_logcdf() * * Purpose: Calculates the log of the cumulative distribution function * for the gamma, $\log P(X \leq x)$, given value , location * parameter , scale parameter , and shape * parameter . */ double esl_gam_logcdf(double x, double mu, double lambda, double tau) { double y = lambda * (x - mu); double val; if (y <= 0.) return -eslINFINITY; esl_stats_IncompleteGamma(tau, y, &val, NULL); return log(val); } /* Function: esl_gam_surv() * * Purpose: Calculates the survival function for the gamma, $P(X > x)$, * given value , location parameter , scale parameter * , and shape parameter . */ double esl_gam_surv(double x, double mu, double lambda, double tau) { double y = lambda * (x - mu); double val; if (y <= 0.) return 1.0; esl_stats_IncompleteGamma(tau, y, NULL, &val); return val; } /* Function: esl_gam_logsurv() * * Purpose: Calculates the log of the survival function for the gamma, * $\log P(X > x)$, given value , location parameter , * scale parameter , and shape parameter . * * Relies on , which has limited * dynamic range. Any result of < -700 or so will be -infinity. * To fix this, we need a log version of . */ double esl_gam_logsurv(double x, double mu, double lambda, double tau) { double y = lambda * (x - mu); double val; if (y <= 0.) return 0.; esl_stats_IncompleteGamma(tau, y, NULL, &val); return log(val); } /* Function: esl_gam_invcdf() * * Purpose: Calculates the inverse CDF for a gamma with location * parameter , scale parameter and shape * parameter , returning the value at which the * CDF is

. * * This inverse CDF is solved by a computationally expensive, * brute force bisection search on the CDF of . */ double esl_gam_invcdf(double p, double mu, double lambda, double tau) { double x1, x2, xm; /* low, high guesses at x */ double f2, fm; double tol = 1e-6; x1 = 0.; x2 = tau / lambda; do { /* bracket */ x2 = x2*2.; f2 = esl_gam_cdf(x2, mu, lambda, tau); } while (f2 < p); do { /* bisection */ xm = (x1+x2)/ 2.; fm = esl_gam_cdf(xm, mu, lambda, tau); if (fm > p) x2 = xm; else if (fm < p) x1 = xm; else return xm; /* unlikely exact fm==p */ } while ( (x2-x1)/(x1+x2) > tol); xm = (x1+x2)/2.; return xm; } /*-------------------- end densities & distributions ------------------------*/ /**************************************************************************** * Generic API routines: for general interface w/ histogram module ****************************************************************************/ /* Function: esl_gam_generic_pdf() * * Purpose: Generic-API wrapper around , taking * a void ptr to a double array containing $\mu$, $\lambda$, * $\tau$ parameters. */ double esl_gam_generic_pdf(double x, void *params) { double *p = (double *) params; return esl_gam_pdf(x, p[0], p[1], p[2]); } /* Function: esl_gam_generic_cdf() * * Purpose: Generic-API wrapper around , taking * a void ptr to a double array containing $\mu$, $\lambda$, * $\tau$ parameters. */ double esl_gam_generic_cdf(double x, void *params) { double *p = (double *) params; return esl_gam_cdf(x, p[0], p[1], p[2]); } /* Function: esl_gam_generic_surv() * * Purpose: Generic-API wrapper around , taking * a void ptr to a double array containing $\mu$, $\lambda$, * $\tau$ parameters. */ double esl_gam_generic_surv(double x, void *params) { double *p = (double *) params; return esl_gam_surv(x, p[0], p[1], p[2]); } /* Function: esl_gam_generic_invcdf() * * Purpose: Generic-API wrapper around , taking * a void ptr to a double array containing $\mu$, $\lambda$, * $\tau$ parameters. */ double esl_gam_generic_invcdf(double x, void *params) { double *p = (double *) params; return esl_gam_invcdf(x, p[0], p[1], p[2]); } /*------------------------ end generic API ---------------------------------*/ /**************************************************************************** * Routines for dumping plots for files ****************************************************************************/ /* Function: esl_gam_Plot() * * Purpose: Plot some gamma distribution function (for instance, * ) for parameters , , and , for * a range of values x from to in steps of ; * output to an open stream in xmgrace XY input format. * * Returns: on success. * * Throws: on any system write error, such as a filled disk. */ int esl_gam_Plot(FILE *fp, double mu, double lambda, double tau, double (*func)(double x, double mu, double lambda, double tau), double xmin, double xmax, double xstep) { double x; for (x = xmin; x <= xmax; x += xstep) if (fprintf(fp, "%f\t%g\n", x, (*func)(x, mu, lambda, tau)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "gamma plot write failed"); if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "gamma plot write failed"); return eslOK; } /*-------------------- end plot dumping routines ---------------------------*/ /**************************************************************************** * Routines for sampling (requires augmentation w/ random module) ****************************************************************************/ #ifdef eslAUGMENT_RANDOM /* Function: esl_gam_Sample() * * Purpose: Sample a gamma-distributed random variate. */ double esl_gam_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double tau) { double x; x = esl_rnd_Gamma(r, tau); return (mu + x / lambda); } #endif /*eslAUGMENT_RANDOM*/ /*--------------------------- end sampling ---------------------------------*/ /**************************************************************************** * Maximum likelihood fitting ****************************************************************************/ /* Function: esl_gam_FitComplete() * * Purpose: Given complete data consisting of samples , * and a known location parameter , determine and return * maximum likelihood parameters and . * * Args: x - complete gamma-distributed data [0..n-1] * n - number of samples in * mu - known location parameter * ret_lambda - RETURN: ML estimate of lambda * ret_tau - RETURN: ML estimate of tau * * Returns: on success. * * Throws: if bracketing or bisection fails; * if data cannot be gamma distributed (some , * or zero variance in x). * * Xref: STL10/65. */ int esl_gam_FitComplete(double *x, int n, double mu, double *ret_lambda, double *ret_tau) { double mean, logsum; int i; double c, fc; double a, fa; double b, fb; int status; if ((status = tau_by_moments(x, n, mu, &c, &mean, &logsum) != eslOK)) return status; a = b = c; fa=fb=fc = tau_function(c, mean, logsum); /* Rootfinding, 1.: bracketing the root with points a,b. */ if (fc > 0.) /* fx>0 means tau is too small, search right */ { for (i = 0; i < 100; i++) /* 100 = max iterations */ { b = a * 2.; fb = tau_function(b, mean, logsum); if (fb < 0.) break; /* a,b now bracket */ a = b; fa = fb; /* else fb>0, so b is a better left bracket than a */ } if (i == 100) ESL_EXCEPTION(eslENOHALT, "failed to bracket"); } else if (fc < 0.) /* fx<0 means tau is too large, search left */ { for (i = 0; i < 100; i++) { a = b/2.; fa = tau_function(a, mean, logsum); if (fa > 0.) break; /* a,b now bracket */ b = a; fb = fa; /* else fa<0, so a is a better right bracket than b */ } if (i == 100) ESL_EXCEPTION(eslENOHALT, "failed to bracket"); } /* Rootfinding, 2.: Bisection search. * We have the root in interval (a,b). */ for (i = 0; i < 100; i++) { c = (a+b)/2.; /* bisection */ fc = tau_function(c, mean, logsum); if (fc > 0.) { a = c; fa = fc; } else if (fc < 0.) { b = c; fb = fc; } else break; /* unlikely event that we nail it */ if ((b-a) <= 2.* DBL_EPSILON) { c = (a+b)/2.; break; } } if (i == 100) ESL_EXCEPTION(eslENOHALT, "bisection search failed"); *ret_lambda = c / mean; *ret_tau = c; return eslOK; } /* tau_by_moments() * * Obtain an initial estimate for tau by * matching moments. Also returns mean and * logsum, which we need for ML fitting. * To obtain a lambda estimate, use * lambda = tau / mean. */ static int tau_by_moments(double *x, int n, double mu, double *ret_tau, double *ret_mean, double *ret_logsum) { int i; double mean, var, logsum; mean = var = logsum = 0.; for (i = 0; i < n; i++) { if (x[i] < mu) ESL_EXCEPTION(eslEINVAL, "No x[i] can be < mu in gamma data"); mean += x[i] - mu; /* mean is temporarily just the sum */ logsum += log(x[i] - mu); var += (x[i]-mu)*(x[i]-mu); /* var is temporarily the sum of squares */ } var = (var - mean*mean/(double)n) / ((double)n-1); /* now var is the variance */ mean /= (double) n; /* and now mean is the mean */ logsum /= (double) n; if (var == 0.) /* and if mean = 0, var = 0 anyway. */ ESL_EXCEPTION(eslEINVAL, "Zero variance in allegedly gamma-distributed dataset"); if (ret_tau != NULL) *ret_tau = mean * mean / var; if (ret_mean != NULL) *ret_mean = mean; if (ret_logsum != NULL) *ret_logsum = logsum; return eslOK; } /* tau_function() * * This is the rootfinding equation for tau... * \ref{eqn:gamma_tau_root} in the documentation. * mean is 1/N \sum (x_i - \mu) * logsum is 1/N \sum \log (x_i - \mu) * These are both independent of tau, and dependent * on all data points, so we require the caller to * precalculate them for us. * * This is a decreasing function of tau: * the return value is > 0 when tau is too small, * and < 0 when tau is too large. */ static double tau_function(double tau, double mean, double logsum) { double psitau; esl_stats_Psi(tau, &psitau); return ( ((log(tau) - psitau) - log(mean)) + logsum ); } /**************************************************************************** * Example main() ****************************************************************************/ #ifdef eslGAMMA_EXAMPLE /*::cexcerpt::gam_example::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslGAMMA_EXAMPLE\ -DeslAUGMENT_RANDOM -DeslAUGMENT_HISTOGRAM\ esl_gamma.c esl_random.c esl_histogram.c esl_stats.c easel.c -lm */ #include #include "easel.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_gamma.h" int main(int argc, char **argv) { double mu = -5.0; double lambda = 2.0; double tau = 0.7; ESL_HISTOGRAM *h = esl_histogram_CreateFull(mu, 100., 0.1); ESL_RANDOMNESS *r = esl_randomness_Create(0); int n = 10000; double elam, etau; int i; double x; double *data; int ndata; /* Take gamma-distributed random samples. */ for (i = 0; i < n; i++) { x = esl_gam_Sample(r, mu, lambda, tau); esl_histogram_Add(h, x); } esl_histogram_GetData(h, &data, &ndata); /* Plot the empirical (sampled) and expected survivals */ esl_histogram_PlotSurvival(stdout, h); esl_gam_Plot(stdout, mu, lambda, tau, &esl_gam_surv, h->xmin, h->xmax, 0.1); /* ML fit to complete data, and plot fitted survival curve */ esl_gam_FitComplete(data, ndata, mu, &elam, &etau); esl_gam_Plot(stdout, mu, elam, etau, &esl_gam_surv, h->xmin, h->xmax, 0.1); esl_randomness_Destroy(r); esl_histogram_Destroy(h); return 0; } /*::cexcerpt::gam_example::end::*/ #endif /*eslGAMMA_EXAMPLE*/ /**************************************************************************** * Test driver ****************************************************************************/ #ifdef eslGAMMA_TESTDRIVE /* Compile: gcc -g -Wall -I. -I ~/src/easel -L ~/src/easel -o test -DeslGAMMA_TESTDRIVE\ esl_gamma.c -leasel -lm */ #include #include #include #include "easel.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_gamma.h" int main(int argc, char **argv) { ESL_HISTOGRAM *h; ESL_RANDOMNESS *r; double mu = -5.0; double lambda = 2.0; double tau = 0.7; int n = 10000; double binwidth = 0.1; double elambda, etau; int i; double x; double *data; int ndata; int opti; int be_verbose = FALSE; char *plotfile = NULL; FILE *pfp = stdout; int plot_pdf = FALSE; int plot_logpdf = FALSE; int plot_cdf = FALSE; int plot_logcdf = FALSE; int plot_surv = FALSE; int plot_logsurv = FALSE; int xmin_set = FALSE; double xmin; int xmax_set = FALSE; double xmax; int xstep_set = FALSE; double xstep; for (opti = 1; opti < argc && *(argv[opti]) == '-'; opti++) { if (strcmp(argv[opti], "-m") == 0) mu = atof(argv[++opti]); else if (strcmp(argv[opti], "-l") == 0) lambda = atof(argv[++opti]); else if (strcmp(argv[opti], "-n") == 0) n = atoi(argv[++opti]); else if (strcmp(argv[opti], "-o") == 0) plotfile = argv[++opti]; else if (strcmp(argv[opti], "-t") == 0) tau = atof(argv[++opti]); else if (strcmp(argv[opti], "-v") == 0) be_verbose = TRUE; else if (strcmp(argv[opti], "-w") == 0) binwidth = atof(argv[++opti]); else if (strcmp(argv[opti], "-C") == 0) plot_cdf = TRUE; else if (strcmp(argv[opti], "-LC") == 0) plot_logcdf = TRUE; else if (strcmp(argv[opti], "-P") == 0) plot_pdf = TRUE; else if (strcmp(argv[opti], "-LP") == 0) plot_logpdf = TRUE; else if (strcmp(argv[opti], "-S") == 0) plot_surv = TRUE; else if (strcmp(argv[opti], "-LS") == 0) plot_logsurv = TRUE; else if (strcmp(argv[opti], "-XL") == 0) { xmin_set = TRUE; xmin = atof(argv[++opti]); } else if (strcmp(argv[opti], "-XH") == 0) { xmax_set = TRUE; xmax = atof(argv[++opti]); } else if (strcmp(argv[opti], "-XS") == 0) { xstep_set = TRUE; xstep = atof(argv[++opti]); } else ESL_EXCEPTION(eslEINVAL, "bad option"); } if (be_verbose) printf("Parametric: mu = %f lambda = %f tau = %f\n", mu, lambda, tau); r = esl_randomness_Create(0); h = esl_histogram_CreateFull(mu, 100., binwidth); if (plotfile != NULL) { if ((pfp = fopen(plotfile, "w")) == NULL) ESL_EXCEPTION(eslFAIL, "Failed to open plotfile"); } if (! xmin_set) xmin = mu; if (! xmax_set) xmax = mu+40*(1./lambda); if (! xstep_set) xstep = 0.1; for (i = 0; i < n; i++) { x = esl_gam_Sample(r, mu, lambda, tau); esl_histogram_Add(h, x); } esl_histogram_GetData(h, &data, &ndata); esl_gam_FitComplete(data, ndata, mu, &elambda, &etau); if (be_verbose) printf("Complete data fit: mu = %f lambda = %f tau = %f\n", mu, elambda, etau); if (fabs( (elambda-lambda)/lambda ) > 0.10) ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted lambda > 10%\n"); if (fabs( (etau-tau)/tau ) > 0.10) ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted tau > 10%\n"); if (plot_pdf) esl_gam_Plot(pfp, mu, lambda, tau, &esl_gam_pdf, xmin, xmax, xstep); if (plot_logpdf) esl_gam_Plot(pfp, mu, lambda, tau, &esl_gam_logpdf, xmin, xmax, xstep); if (plot_cdf) esl_gam_Plot(pfp, mu, lambda, tau, &esl_gam_cdf, xmin, xmax, xstep); if (plot_logcdf) esl_gam_Plot(pfp, mu, lambda, tau, &esl_gam_logcdf, xmin, xmax, xstep); if (plot_surv) esl_gam_Plot(pfp, mu, lambda, tau, &esl_gam_surv, xmin, xmax, xstep); if (plot_logsurv) esl_gam_Plot(pfp, mu, lambda, tau, &esl_gam_logsurv, xmin, xmax, xstep); if (plotfile != NULL) fclose(pfp); esl_randomness_Destroy(r); esl_histogram_Destroy(h); return 0; } #endif /*eslGAMMA_TESTDRIVE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_gamma.c 727 2011-10-24 17:17:32Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_gamma.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_exponential.h0000664361611702660230000000444612473612606016735 0ustar wheelerteddy/* Exponential distributions. * * SRE, Wed Aug 10 08:32:45 2005 [St. Louis] * SVN $Id: esl_exponential.h 770 2012-06-06 19:33:59Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_exponential.h $ */ #ifndef eslEXPONENTIAL_INCLUDED #define eslEXPONENTIAL_INCLUDED #ifdef eslAUGMENT_RANDOM #include #endif #ifdef eslAUGMENT_HISTOGRAM #include #endif extern double esl_exp_pdf (double x, double mu, double lambda); extern double esl_exp_logpdf (double x, double mu, double lambda); extern double esl_exp_cdf (double x, double mu, double lambda); extern double esl_exp_logcdf (double x, double mu, double lambda); extern double esl_exp_surv (double x, double mu, double lambda); extern double esl_exp_logsurv(double x, double mu, double lambda); extern double esl_exp_invcdf (double p, double mu, double lambda); extern double esl_exp_invsurv(double p, double mu, double lambda); extern double esl_exp_generic_pdf (double x, void *params); extern double esl_exp_generic_cdf (double x, void *params); extern double esl_exp_generic_surv (double x, void *params); extern double esl_exp_generic_invcdf(double p, void *params); extern int esl_exp_Plot(FILE *fp, double mu, double lambda, double (*func)(double x, double mu, double lambda), double xmin, double xmax, double xstep); #ifdef eslAUGMENT_RANDOM extern double esl_exp_Sample(ESL_RANDOMNESS *r, double mu, double lambda); #endif extern int esl_exp_FitComplete (double *x, int n, double *ret_mu, double *ret_lambda); extern int esl_exp_FitCompleteScale(double *x, int n, double mu, double *ret_lambda); #ifdef eslAUGMENT_HISTOGRAM extern int esl_exp_FitCompleteBinned(ESL_HISTOGRAM *h, double *ret_mu, double *ret_lambda); #endif #endif /*eslEXPONENTIAL_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_msashuffle.c0000664361611702660230000005105312473612607016534 0ustar wheelerteddy/* Shuffling, bootstrapping, permuting alignments, by column or row. * * Table of contents: * 1. Randomizing MSAs by column. * 2. Permuting sequence order (i.e. by row) * 3. Shuffling pairwise (QRNA) alignments. */ #include "esl_config.h" #include #include "easel.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif #include "esl_msa.h" #include "esl_msashuffle.h" #include "esl_random.h" /***************************************************************** * 1. Randomizing MSAs by column. *****************************************************************/ /* Function: esl_msashuffle_Shuffle() * Synopsis: Shuffle an alignment's columns. * * Purpose: Returns a column-shuffled version of in , * using random generator . Shuffling by columns * preserves the \% identity of the original * alignment. and can be identical, to shuffle * in place. * * The caller sets up the rest of the data (everything but * the alignment itself) in the way it wants, * including sequence names, MSA name, and other * annotation. The easy thing to do is to make * a copy of : the caller might create by * a call to . * * The alignments and can both be in digital * mode, or can both be in text mode; you cannot mix * digital and text modes. * * Returns: on success. * * Throws: if , aren't in the same mode (digital vs. text). */ int esl_msashuffle_Shuffle(ESL_RANDOMNESS *r, ESL_MSA *msa, ESL_MSA *shuf) { int i, pos, alen; if (! (msa->flags & eslMSA_DIGITAL)) { char c; if (shuf->flags & eslMSA_DIGITAL) ESL_EXCEPTION(eslEINVAL, " must be in text mode if is"); if (msa != shuf) { for (i = 0; i < msa->nseq; i++) strcpy(shuf->aseq[i], msa->aseq[i]); } for (i = 0; i < msa->nseq; i++) shuf->aseq[i][msa->alen] = '\0'; for (alen = msa->alen; alen > 1; alen--) { pos = esl_rnd_Roll(r, alen); for (i = 0; i < msa->nseq; i++) { c = msa->aseq[i][pos]; shuf->aseq[i][pos] = shuf->aseq[i][alen-1]; shuf->aseq[i][alen-1] = c; } } } #ifdef eslAUGMENT_ALPHABET else { ESL_DSQ x; if (! (shuf->flags & eslMSA_DIGITAL)) ESL_EXCEPTION(eslEINVAL, " must be in digital mode if is"); if (msa != shuf) { for (i = 0; i < msa->nseq; i++) memcpy(shuf->ax[i], msa->ax[i], (msa->alen + 2) * sizeof(ESL_DSQ)); } for (i = 0; i < msa->nseq; i++) shuf->ax[i][msa->alen+1] = eslDSQ_SENTINEL; for (alen = msa->alen; alen > 1; alen--) { pos = esl_rnd_Roll(r, alen) + 1; for (i = 0; i < msa->nseq; i++) { x = msa->ax[i][pos]; shuf->ax[i][pos] = shuf->ax[i][alen]; shuf->ax[i][alen] = x; } } } #endif /*eslAUGMENT_ALPHABET*/ return eslOK; } /* Function: esl_msashuffle_Bootstrap() * Synopsis: Bootstrap sample an MSA. * Incept: SRE, Tue Jan 22 11:05:07 2008 [Janelia] * * Purpose: Takes a bootstrap sample of (sample columns, * with replacement) and puts it in , using * random generator . * * The caller provides allocated space for . * It must be different space than ; you cannot take * a bootstrap sample "in place". The caller sets up the * rest of the data in (everything but the * alignment itself) the way it wants, including sequence * names, MSA name, and other annotation. The easy thing to * do is to initialize by cloning . * * The alignments and can both be in digital * mode, or can both be in text mode; you cannot mix * digital and text modes. * * Returns: on success, and the alignment in is * set to be a bootstrap resample of the alignment in . * * Throws: if , aren't in the same mode * (digital vs. text). */ int esl_msashuffle_Bootstrap(ESL_RANDOMNESS *r, ESL_MSA *msa, ESL_MSA *bootsample) { int i, pos, col; /* contract checks */ if ( (msa->flags & eslMSA_DIGITAL) && ! (bootsample->flags & eslMSA_DIGITAL)) ESL_EXCEPTION(eslEINVAL, " and must both be in digital or text mode"); if (! (msa->flags & eslMSA_DIGITAL) && (bootsample->flags & eslMSA_DIGITAL)) ESL_EXCEPTION(eslEINVAL, " and must both be in digital or text mode"); if (! (msa->flags & eslMSA_DIGITAL)) { for (pos = 0; pos < msa->alen; pos++) { col = esl_rnd_Roll(r, msa->alen); for (i = 0; i < msa->nseq; i++) bootsample->aseq[i][pos] = msa->aseq[i][col]; } for (i = 0; i < msa->nseq; i++) bootsample->aseq[i][msa->alen] = '\0'; } #ifdef eslAUGMENT_ALPHABET else { for (i = 0; i < msa->nseq; i++) bootsample->ax[i][0] = eslDSQ_SENTINEL; for (pos = 1; pos <= msa->alen; pos++) { col = esl_rnd_Roll(r, msa->alen) + 1; for (i = 0; i < msa->nseq; i++) bootsample->ax[i][pos] = msa->ax[i][col]; } for (i = 0; i < msa->nseq; i++) bootsample->ax[i][msa->alen+1] = eslDSQ_SENTINEL; } #endif /*eslAUGMENT_ALPHABET*/ return eslOK; } /***************************************************************** * 2. Permuting the sequence order *****************************************************************/ /* Function: esl_msashuffle_PermuteSequenceOrder() * Synopsis: Permutes the order of the sequences. * * Purpose: Randomly permute the order of the sequences in , * and any associated sequence annotation, in place. * * Returns: on success. * * Throws: (no abnormal error conditions) */ int esl_msashuffle_PermuteSequenceOrder(ESL_RANDOMNESS *r, ESL_MSA *msa) { void *tmp; double tmpwgt; int64_t tmplen; int N, i, tag; for (N = msa->nseq; N > 1; N--) { i = esl_rnd_Roll(r, N); /* idx = 0..N-1 */ if ( ! (msa->flags & eslMSA_DIGITAL)) { tmp = msa->aseq[i]; msa->aseq[i] = msa->aseq[N-1]; msa->aseq[N-1] = tmp; } #ifdef eslAUGMENT_ALPHABET else { tmp = msa->ax[i]; msa->ax[i] = msa->ax[N-1]; msa->ax[N-1] = tmp; } #endif tmp = msa->sqname[i]; msa->sqname[i] = msa->sqname[N-1]; msa->sqname[N-1] = tmp; tmpwgt = msa->wgt[i]; msa->wgt[i] = msa->wgt[N-1]; msa->wgt[N-1] = tmpwgt; if (msa->sqacc) { tmp = msa->sqacc[i]; msa->sqacc[i] = msa->sqacc[N-1]; msa->sqacc[N-1] = tmp; } if (msa->sqdesc) { tmp = msa->sqdesc[i]; msa->sqdesc[i] = msa->sqdesc[N-1]; msa->sqdesc[N-1] = tmp; } if (msa->ss) { tmp = msa->ss[i]; msa->ss[i] = msa->ss[N-1]; msa->ss[N-1] = tmp; } if (msa->sa) { tmp = msa->sa[i]; msa->sa[i] = msa->sa[N-1]; msa->sa[N-1] = tmp; } if (msa->pp) { tmp = msa->pp[i]; msa->pp[i] = msa->pp[N-1]; msa->pp[N-1] = tmp; } if (msa->sqlen) { tmplen = msa->sqlen[i]; msa->sqlen[i] = msa->sqlen[N-1]; msa->sqlen[N-1] = tmplen; } if (msa->sslen) { tmplen = msa->sslen[i]; msa->sslen[i] = msa->sslen[N-1]; msa->sslen[N-1] = tmplen; } if (msa->salen) { tmplen = msa->salen[i]; msa->salen[i] = msa->salen[N-1]; msa->salen[N-1] = tmplen; } if (msa->pplen) { tmplen = msa->pplen[i]; msa->pplen[i] = msa->pplen[N-1]; msa->pplen[N-1] = tmplen; } for (tag = 0; tag < msa->ngs; tag++) if (msa->gs[tag]) { tmp = msa->gs[tag][i]; msa->gs[tag][i] = msa->gs[tag][N-1]; msa->gs[tag][N-1] = tmp; } for (tag = 0; tag < msa->ngr; tag++) if (msa->gr[tag]) { tmp = msa->gr[tag][i]; msa->gr[tag][i] = msa->gr[tag][N-1]; msa->gr[tag][N-1] = tmp; } } /* if has a keyhash that maps seqname => seqidx, we'll need to rebuild it. */ if (msa->index) { esl_keyhash_Reuse(msa->index); for (i = 0; i < msa->nseq; i++) esl_keyhash_Store(msa->index, msa->sqname[i], -1, NULL); } return eslOK; } /***************************************************************** * 3. Shuffling pairwise (QRNA) alignments *****************************************************************/ #ifdef eslAUGMENT_ALPHABET /* Function: esl_msashuffle_XQRNA() * Synopsis: Gap-preserving column shuffle of a digital pairwise alignment. * Incept: SRE, Tue Jan 22 09:09:52 2008 [Market Street Cafe, Leesburg] * * Purpose: Shuffle a digital pairwise alignment , while * preserving the position of gaps, where both sequences are * in digital alphabet , using the random number * generator . Return the shuffled alignment in , * . Caller provides allocated space for and * for at least the same length of ,. * * Works by doing three separate * shuffles, of (1) columns with residues in both * and , (2) columns with residue in and gap in , * and (3) columns with gap in and residue in . * * , and , may be identical: that is, to shuffle * an alignment "in place", destroying the original * alignment, just call . * * Returns: on success, and the shuffled alignment is * returned in , . * * Throws: on allocation failure. */ int esl_msashuffle_XQRNA(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, ESL_DSQ *x, ESL_DSQ *y, ESL_DSQ *xs, ESL_DSQ *ys) { int L; int *xycol = NULL; int *xcol = NULL; int *ycol = NULL; int nxy, nx, ny; int i; int pos, c; char xsym, ysym; int status; L = esl_abc_dsqlen(x); if (esl_abc_dsqlen(y) != L) ESL_XEXCEPTION(eslEINVAL, "sequences of different lengths in qrna shuffle"); if (xs != x) esl_abc_dsqcpy(x, L, xs); if (ys != y) esl_abc_dsqcpy(y, L, ys); /* First, construct three arrays containing lists of the column positions * of the three types of columns. (If a column contains gaps in both x and y, * we've already simply copied it to the shuffled sequence.) */ ESL_ALLOC(xycol, sizeof(int) * L); ESL_ALLOC(xcol, sizeof(int) * L); ESL_ALLOC(ycol, sizeof(int) * L); nxy = nx = ny = 0; for (i = 1; i <= L; i++) { if ( esl_abc_XIsGap(abc, x[i]) && esl_abc_XIsGap(abc, y[i])) { continue; } else if (! esl_abc_XIsGap(abc, x[i]) && ! esl_abc_XIsGap(abc, y[i])) { xycol[nxy] = i; nxy++; } else if ( esl_abc_XIsGap(abc, x[i])) { ycol[ny] = i; ny++; } else if ( esl_abc_XIsGap(abc, y[i])) { xcol[nx] = i; nx++; } } /* Second, shuffle the sequences indirectly, via shuffling these arrays. * Yow, careful with those indices, and with order of the statements... */ for (; nxy > 1; nxy--) { pos = esl_rnd_Roll(r, nxy); xsym = xs[xycol[pos]]; ysym = ys[xycol[pos]]; c = xycol[pos]; xs[xycol[pos]] = xs[xycol[nxy-1]]; ys[xycol[pos]] = ys[xycol[nxy-1]]; xycol[pos] = xycol[nxy-1]; xs[xycol[nxy-1]] = xsym; ys[xycol[nxy-1]] = ysym; xycol[pos] = xycol[nxy-1]; } for (; nx > 1; nx--) { pos = esl_rnd_Roll(r, nx); xsym = xs[xcol[pos]]; ysym = ys[xcol[pos]]; c = xcol[pos]; xs[xcol[pos]] = xs[xcol[nx-1]]; ys[xcol[pos]] = ys[xcol[nx-1]]; xcol[pos] = xcol[nx-1]; xs[xcol[nx-1]] = xsym; ys[xcol[nx-1]] = ysym; xcol[nx-1] = c; } for (; ny > 1; ny--) { pos = esl_rnd_Roll(r, ny); xsym = xs[ycol[pos]]; ysym = ys[ycol[pos]]; c = ycol[pos]; xs[ycol[pos]] = xs[ycol[ny-1]]; ys[ycol[pos]] = ys[ycol[ny-1]]; ycol[pos] = ycol[ny-1]; xs[ycol[ny-1]] = xsym; ys[ycol[ny-1]] = ysym; ycol[ny-1] = c; } free(xycol); free(xcol); free(ycol); return eslOK; ERROR: if (xycol != NULL) free(xycol); if (xcol != NULL) free(xcol); if (ycol != NULL) free(ycol); return status; } /* Function: esl_msashuffle_CQRNA() * Synopsis: Gap-preserving column shuffle of a pairwise alignment. * Incept: SRE, Tue Jan 22 08:45:34 2008 [Market Street Cafe, Leesburg] * * Purpose: Shuffle a pairwise alignment , while preserving the * position of gaps, using the random number generator . * Return the shuffled alignment in , * . Caller provides allocated space for and . * * An alphabet must also be provided, solely for the * definition of gap characters. Because Easel's default * alphabets (DNA, RNA, and protein) all use the same * definition of gap characters <-_.>, you can actually * provide any alphabet here, and get the same results. * (This may save having to determine the alphabet of input * sequences.) * * Works by doing three separate * shuffles, of (1) columns with residues in both * and , (2) columns with residue in and gap in , * and (3) columns with gap in and residue in . * * , and , may be identical: that is, to shuffle * an alignment "in place", destroying the original * alignment, just call . * * Returns: on success, and the shuffled alignment is * returned in , . * * Throws: on allocation failure. */ int esl_msashuffle_CQRNA(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, char *x, char *y, char *xs, char *ys) { int L; int *xycol = NULL; int *xcol = NULL; int *ycol = NULL; int nxy, nx, ny; int i; int pos, c; char xsym, ysym; int status; if (xs != x) strcpy(xs, x); if (ys != y) strcpy(ys, y); /* First, construct three arrays containing lists of the column positions * of the three types of columns. (If a column contains gaps in both x and y, * we've already simply copied it to the shuffled sequence.) */ L = strlen(x); if (strlen(y) != L) ESL_XEXCEPTION(eslEINVAL, "sequences of different lengths in qrna shuffle"); ESL_ALLOC(xycol, sizeof(int) * L); ESL_ALLOC(xcol, sizeof(int) * L); ESL_ALLOC(ycol, sizeof(int) * L); nxy = nx = ny = 0; for (i = 0; i < L; i++) { if ( esl_abc_CIsGap(abc, x[i]) && esl_abc_CIsGap(abc, y[i])) { continue; } else if (! esl_abc_CIsGap(abc, x[i]) && ! esl_abc_CIsGap(abc, y[i])) { xycol[nxy] = i; nxy++; } else if ( esl_abc_CIsGap(abc, x[i])) { ycol[ny] = i; ny++; } else if ( esl_abc_CIsGap(abc, y[i])) { xcol[nx] = i; nx++; } } /* Second, shuffle the sequences indirectly, via shuffling these arrays. * Yow, careful with those indices, and with order of the statements... */ for (; nxy > 1; nxy--) { pos = esl_rnd_Roll(r, nxy); xsym = xs[xycol[pos]]; ysym = ys[xycol[pos]]; c = xycol[pos]; xs[xycol[pos]] = xs[xycol[nxy-1]]; ys[xycol[pos]] = ys[xycol[nxy-1]]; xycol[pos] = xycol[nxy-1]; xs[xycol[nxy-1]] = xsym; ys[xycol[nxy-1]] = ysym; xycol[pos] = xycol[nxy-1]; } for (; nx > 1; nx--) { pos = esl_rnd_Roll(r, nx); xsym = xs[xcol[pos]]; ysym = ys[xcol[pos]]; c = xcol[pos]; xs[xcol[pos]] = xs[xcol[nx-1]]; ys[xcol[pos]] = ys[xcol[nx-1]]; xcol[pos] = xcol[nx-1]; xs[xcol[nx-1]] = xsym; ys[xcol[nx-1]] = ysym; xcol[nx-1] = c; } for (; ny > 1; ny--) { pos = esl_rnd_Roll(r, ny); xsym = xs[ycol[pos]]; ysym = ys[ycol[pos]]; c = ycol[pos]; xs[ycol[pos]] = xs[ycol[ny-1]]; ys[ycol[pos]] = ys[ycol[ny-1]]; ycol[pos] = ycol[ny-1]; xs[ycol[ny-1]] = xsym; ys[ycol[ny-1]] = ysym; ycol[ny-1] = c; } free(xycol); free(xcol); free(ycol); return eslOK; ERROR: if (xycol != NULL) free(xycol); if (xcol != NULL) free(xcol); if (ycol != NULL) free(ycol); return status; } #endif /*eslAUGMENT_ALPHABET*/ /***************************************************************** * 4. Example. *****************************************************************/ #ifdef eslMSASHUFFLE_EXAMPLE #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_random.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use DNA alphabet", 0 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use RNA alphabet", 0 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use protein alphabet", 0 }, { "--text", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use text mode: no digital alphabet", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of multiple alignment shuffling/permuting"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_RANDOMNESS *rng = esl_randomness_Create(0); char *msafile = esl_opt_GetArg(go, 1); int fmt = eslMSAFILE_UNKNOWN; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; int textmode = esl_opt_GetBoolean(go, "--text"); int nali = 0; int status; /* If you know the alphabet you want, create it - you'll pass it to eslx_msafile_Open() */ if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); /* Open in text or digital mode. * To let the Open() function autoguess the format, you pass . * To let it autoguess the alphabet, you set and pass <&abc>. * To open in text mode instead of digital, you pass for the alphabet argument. * eslx_msafile_OpenFailure() is a convenience, printing various diagnostics of any * open failure to . You can of course handle your own diagnostics instead. */ if (textmode) status = eslx_msafile_Open(NULL, msafile, NULL, fmt, NULL, &afp); else status = eslx_msafile_Open(&abc, msafile, NULL, fmt, NULL, &afp); if (status != eslOK) eslx_msafile_OpenFailure(afp, status); fmt = afp->format; while ((status = eslx_msafile_Read(afp, &msa)) == eslOK) { /* if digital MSA: msa->ax[idx=0..nseq-1][acol=1..alen] is the alignment data; * if text MSA: msa->aseq[idx=0..nseq-1][acol=0..alen-1] */ nali++; /* permute it */ esl_msashuffle_PermuteSequenceOrder(rng, msa); eslx_msafile_Write(stdout, msa, fmt); esl_msa_Destroy(msa); } if (nali == 0 || status != eslEOF) eslx_msafile_ReadFailure(afp, status); /* a convenience, like eslx_msafile_OpenFailure() */ esl_alphabet_Destroy(abc); eslx_msafile_Close(afp); esl_randomness_Destroy(rng); esl_getopts_Destroy(go); exit(0); } #endif /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msashuffle.c 761 2012-05-10 20:09:44Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msashuffle.c $ *****************************************************************/ hmmer-3.1b2/easel/easel.c0000664361611702660230000023042512473612605014625 0ustar wheelerteddy/* Easel's foundation. * * Contents: * 1. Exception and fatal error handling. * 2. Memory allocation/deallocation conventions. * 3. Standard banner for Easel miniapplications. * 4. Improved replacements for some C library functions. * 5. Portable drop-in replacements for nonstandard C functions. * 6. Additional string functions, esl_str*() * 7. File path/name manipulation, including tmpfiles. * 8. Typed comparison functions. * 9. Unit tests. * 10. Test driver. * 11. Examples. * 12. Copyright and license. */ #include "esl_config.h" #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #ifdef _POSIX_VERSION #include #include #endif #ifdef HAVE_MPI #include /* MPI_Abort() may be used in esl_fatal() or other program killers */ #endif #include "easel.h" /***************************************************************** * 1. Exception and fatal error handling. *****************************************************************/ static esl_exception_handler_f esl_exception_handler = NULL; /* Function: esl_exception() * Synopsis: Throw an exception. * * Purpose: Throw an exception. An "exception" is defined by Easel * as an internal error that shouldn't happen and/or is * outside the user's control; as opposed to "failures", that * are to be expected, and within user control, and * therefore normal. By default, exceptions are fatal. * A program that wishes to be more robust can register * a non-fatal exception handler. * * Easel programs normally call one of the exception-handling * wrappers or , which * handle the overhead of passing in , , * and . is rarely called directly. * * If no custom exception handler has been registered, the * default behavior is to print a brief message to * then , resulting in a nonzero exit code from the * program. Depending on what , , * , and the -formatted * are, this output looks like: * * Fatal exception (source file foo.c, line 42): * Something wicked this way came. * * Additionally, in an MPI parallel program, the default fatal * handler aborts all processes (with ), not just * the one that called . * * Args: errcode - Easel error code, such as eslEINVAL. See easel.h. * use_errno - if TRUE, also use perror() to report POSIX errno message. * sourcefile - Name of offending source file; normally __FILE__. * sourceline - Name of offending source line; normally __LINE__. * format - formatted exception message, followed * by any additional necessary arguments for that * message. * * Returns: void. * * Throws: No abnormal error conditions. (Who watches the watchers?) */ void esl_exception(int errcode, int use_errno, char *sourcefile, int sourceline, char *format, ...) { va_list argp; #ifdef HAVE_MPI int mpiflag; #endif if (esl_exception_handler != NULL) { va_start(argp, format); (*esl_exception_handler)(errcode, use_errno, sourcefile, sourceline, format, argp); va_end(argp); return; } else { fprintf(stderr, "Fatal exception (source file %s, line %d):\n", sourcefile, sourceline); va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); fprintf(stderr, "\n"); if (use_errno && errno) perror("system error"); fflush(stderr); #ifdef HAVE_MPI MPI_Initialized(&mpiflag); /* we're assuming we can do this, even in a corrupted, dying process...? */ if (mpiflag) MPI_Abort(MPI_COMM_WORLD, 1); #endif abort(); } } /* Function: esl_exception_SetHandler() * Synopsis: Register a different exception handling function. * * Purpose: Register a different exception handling function, * . When an exception occurs, the handler * receives at least four arguments: , , * , and . * * is an Easel error code, such as * . See for a list of all codes. * * is TRUE for POSIX system call failures. The * handler may then use POSIX to format/print an * additional message, using or . * * is the name of the Easel source code file * in which the exception occurred, and is * the line number. * * is a -formatted string, followed by * a containing any additional arguments that * formatted message needs. Your custom exception handler * will probably use or to format * its error message. * * Args: handler - ptr to your custom exception handler. * * Returns: void. * * Throws: (no abnormal error conditions) */ void esl_exception_SetHandler(void (*handler)(int errcode, int use_errno, char *sourcefile, int sourceline, char *format, va_list argp)) { esl_exception_handler = handler; } /* Function: esl_exception_ResetDefaultHandler() * Synopsis: Restore default exception handling. * * Purpose: Restore default exception handling, which is to print * a simple error message to then (see * . * * An example where this might be useful is in a program * that only temporarily wants to catch one or more types * of normally fatal exceptions. * * If the default handler is already in effect, this * call has no effect (is a no-op). * * Args: (void) * * Returns: (void) * * Throws: (no abnormal error conditions) */ void esl_exception_ResetDefaultHandler(void) { esl_exception_handler = NULL; } /* Function: esl_nonfatal_handler() * Synopsis: A trivial example of a nonfatal exception handler. * * Purpose: This serves two purposes. First, it is the simplest * example of a nondefault exception handler. Second, this * is used in test harnesses, when they have * turned on to test that thrown errors * are handled properly when a nonfatal error handler is * registered by the application. * * Args: errcode - Easel error code, such as eslEINVAL. See easel.h. * use_errno - TRUE on POSIX system call failures; use * sourcefile - Name of offending source file; normally __FILE__. * sourceline - Name of offending source line; normally __LINE__. * format - formatted exception message. * argp - containing any additional necessary arguments for * the message. * * Returns: void. * * Throws: (no abnormal error conditions) */ void esl_nonfatal_handler(int errcode, int use_errno, char *sourcefile, int sourceline, char *format, va_list argp) { return; } /* Function: esl_fatal() * Synopsis: Kill a program immediately, for a "violation". * * Purpose: Kill a program for a "violation". In general this should only be used * in development or testing code, not in production * code. The main use of is in unit tests. * Another use is in assertions used in dev code. * * The only other case (and the only case that should be allowed in * production code) is in a true "function" (a function that returns * its answer, rather than an Easel error code), where Easel error * conventions can't be used (because it can't return an error code), * AND the error is guaranteed to be a coding error. For an example, * see , which triggers a violation if the code * checks for an option that isn't in the code. * * In an MPI-parallel program, the entire job is * terminated; all processes are aborted (, * not just the one that called . * * Args: format - formatted exception message, followed * by any additional necessary arguments for that * message. * * Returns: (void) * * Throws: (no abnormal error conditions) */ void esl_fatal(const char *format, ...) { va_list argp; #ifdef HAVE_MPI int mpiflag; #endif va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); fprintf(stderr, "\n"); fflush(stderr); #ifdef HAVE_MPI MPI_Initialized(&mpiflag); if (mpiflag) MPI_Abort(MPI_COMM_WORLD, 1); #endif exit(1); } /*---------------- end, error handling conventions --------------*/ /***************************************************************** * 2. Memory allocation/deallocation conventions. *****************************************************************/ /* Function: esl_Free2D() * * Purpose: Free a 2D pointer array

, where first dimension is * . (That is, the array is .) * Tolerates any of the pointers being NULL, to allow * sparse arrays. * * Returns: void. */ void esl_Free2D(void **p, int dim1) { int i; if (p != NULL) { for (i = 0; i < dim1; i++) if (p[i] != NULL) free(p[i]); free(p); } return; } /* Function: esl_Free3D() * * Purpose: Free a 3D pointer array

, where first and second * dimensions are ,. (That is, the array is * .) Tolerates any of the * pointers being NULL, to allow sparse arrays. * * Returns: void. */ void esl_Free3D(void ***p, int dim1, int dim2) { int i, j; if (p != NULL) { for (i = 0; i < dim1; i++) if (p[i] != NULL) { for (j = 0; j < dim2; j++) if (p[i][j] != NULL) free(p[i][j]); free(p[i]); } free(p); } } /*------------- end, memory allocation conventions --------------*/ /***************************************************************** * 3. Standard banner for Easel miniapplications. *****************************************************************/ /* Function: esl_banner() * Synopsis: print standard Easel application output header * * Purpose: Print the standard Easel command line application banner * to , constructing it from (the name of the * program) and a short one-line description . * For example, * * might result in: * * \begin{cchunk} * # compstruct :: compare RNA structures * # Easel 0.1 (February 2005) * # Copyright (C) 2004-2007 HHMI Janelia Farm Research Campus * # Freely licensed under the Janelia Software License. * # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * \end{cchunk} * * would typically be an application's * , rather than a fixed string. This allows the * program to be renamed, or called under different names * via symlinks. Any path in the is discarded; * for instance, if is "/usr/local/bin/esl-compstruct", * "esl-compstruct" is used as the program name. * * Note: * Needs to pick up preprocessor #define's from easel.h, * as set by ./configure: * * symbol example * ------ ---------------- * EASEL_VERSION "0.1" * EASEL_DATE "May 2007" * EASEL_COPYRIGHT "Copyright (C) 2004-2007 HHMI Janelia Farm Research Campus" * EASEL_LICENSE "Freely licensed under the Janelia Software License." * * Returns: on success. * * Throws: on allocation error. * on write error. */ int esl_banner(FILE *fp, char *progname, char *banner) { char *appname = NULL; int status; if ((status = esl_FileTail(progname, FALSE, &appname)) != eslOK) return status; if (fprintf(fp, "# %s :: %s\n", appname, banner) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(fp, "# Easel %s (%s)\n", EASEL_VERSION, EASEL_DATE) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(fp, "# %s\n", EASEL_COPYRIGHT) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(fp, "# %s\n", EASEL_LICENSE) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); if (fprintf(fp, "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); if (appname) free(appname); return eslOK; ERROR: if (appname) free(appname); return status; } /* Function: esl_usage() * Synopsis: print standard Easel application usage help line * * Purpose: Given a usage string and the name of the program * , output a standardized usage/help * message. is minimally a one line synopsis like * "[options] ", but it may extend to multiple * lines to explain the command line arguments in more * detail. It should not describe the options; that's the * job of the getopts module, and its * function. * * This is used by the Easel miniapps, and may be useful in * other applications as well. * * As in , the is typically passed * as , and any path prefix is ignored. * * For example, if is , * then * * \begin{cchunk} * esl_usage(stdout, argv[0], "[options] "> * \end{cchunk} * * produces * * \begin{cchunk} * Usage: esl-compstruct [options] * \end{cchunk} * * Returns: on success. * * Throws: on allocation failure. * on write failure. */ int esl_usage(FILE *fp, char *progname, char *usage) { char *appname = NULL; int status; if ( (status = esl_FileTail(progname, FALSE, &appname)) != eslOK) return status; if (fprintf(fp, "Usage: %s %s\n", appname, usage) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "write failed"); if (appname) free(appname); return eslOK; ERROR: if (appname) free(appname); return status; } /*-------------------- end, standard miniapp banner --------------------------*/ /****************************************************************************** * 4. Replacements for C library functions * fgets() -> esl_fgets() fgets() with dynamic allocation * strdup() -> esl_strdup() strdup() is not ANSI * strcat() -> esl_strcat() strcat() with dynamic allocation * strtok() -> esl_strtok() threadsafe strtok() * sprintf() -> esl_sprintf() sprintf() with dynamic allocation * strcmp() -> esl_strcmp() strcmp() tolerant of NULL strings *****************************************************************************/ /* Function: esl_fgets() * * Purpose: Dynamic allocation version of fgets(), * capable of reading almost unlimited line lengths. * * Args: buf - ptr to a string (may be reallocated) * n - ptr to current allocated length of buf, * (may be changed) * fp - open file ptr for reading * * Before the first call to esl_fgets(), * initialize buf to NULL and n to 0. * They're a linked pair, so don't muck with the * allocation of buf or the value of n while * you're still doing esl_fgets() calls with them. * * Returns: on success. * Returns on normal end-of-file. * * When : * <*buf> points to a -terminated line from the file. * <*n> contains the current allocated length for <*buf>. * * Caller must free <*buf> eventually. * * Throws: on an allocation failure. * * Example: char *buf = NULL; * int n = 0; * FILE *fp = fopen("my_file", "r"); * * while (esl_fgets(&buf, &n, fp) == eslOK) * { * do stuff with buf; * } * if (buf != NULL) free(buf); */ int esl_fgets(char **buf, int *n, FILE *fp) { int status; char *s; int len; int pos; if (*n == 0) { ESL_ALLOC(*buf, sizeof(char) * 128); *n = 128; } /* Simple case 1. We're sitting at EOF, or there's an error. * fgets() returns NULL, so we return EOF. */ if (fgets(*buf, *n, fp) == NULL) return eslEOF; /* Simple case 2. fgets() got a string, and it reached EOF doing it. * return success status, so caller can use * the last line; on the next call we'll * return the 0 for the EOF. */ if (feof(fp)) return eslOK; /* Simple case 3. We got a complete string, with \n, * and don't need to extend the buffer. */ len = strlen(*buf); if ((*buf)[len-1] == '\n') return eslOK; /* The case we're waiting for. We have an incomplete string, * and we have to extend the buffer one or more times. Make * sure we overwrite the previous fgets's \0 (hence +(n-1) * in first step, rather than 128, and reads of 129, not 128). */ pos = (*n)-1; while (1) { ESL_REALLOC(*buf, sizeof(char) * (*n+128)); *n += 128; s = *buf + pos; if (fgets(s, 129, fp) == NULL) return eslOK; len = strlen(s); if (s[len-1] == '\n') return eslOK; pos += 128; } /*NOTREACHED*/ return eslOK; ERROR: if (*buf != NULL) free(*buf); *buf = NULL; *n = 0; return status; } /* Function: esl_strdup() * * Purpose: Makes a duplicate of string , puts it in . * Caller can pass string length , if it's known, * to save a strlen() call; else pass -1 to have the string length * determined. * * Tolerates being ; in which case, * returns with <*ret_dup> set to . * * Args: s - string to duplicate (NUL-terminated) * n - length of string, if known; -1 if unknown. * ret_dup - RETURN: duplicate of . * * Returns: on success, and is valid. * * Throws: on allocation failure. */ int esl_strdup(const char *s, int64_t n, char **ret_dup) { int status; char *new = NULL; if (ret_dup != NULL) *ret_dup = NULL; if (s == NULL) return eslOK; if (n < 0) n = strlen(s); ESL_ALLOC(new, sizeof(char) * (n+1)); strcpy(new, s); if (ret_dup != NULL) *ret_dup = new; else free(new); return eslOK; ERROR: if (new != NULL) free(new); if (ret_dup != NULL) *ret_dup = NULL; return status; } /* Function: esl_strcat() * * Purpose: Dynamic memory version of strcat(). * Appends to the string that points to, * extending allocation for dest if necessary. Caller * can optionally provide the length of <*dest> in * , and the length of in ; if * either of these is -1, calls * to determine the length. Providing length information, * if known, accelerates the routine. * * <*dest> may be , in which case this is equivalent * to a of (that is, <*dest> is allocated * rather than reallocated). * * may be , in which case is unmodified. * * Note: One timing experiment (100 successive appends of * 1-255 char) shows esl_strcat() has about a 20% * overhead relative to strcat(). If optional * length info is passed, esl_strcat() is about 30% * faster than strcat(). * * Args: dest - ptr to string (char **), '\0' terminated * ldest - length of dest, if known; or -1 if length unknown. * src - string to append to dest, '\0' terminated * lsrc - length of src, if known; or -1 if length unknown. * * Returns: on success; <*dest> is (probably) reallocated, * modified, and nul-terminated. * * Throws: on allocation failure; initial state of * is unaffected. */ int esl_strcat(char **dest, int64_t ldest, const char *src, int64_t lsrc) { int status; int64_t len1, len2; if (ldest < 0) len1 = ((*dest == NULL) ? 0 : strlen(*dest)); else len1 = ldest; if (lsrc < 0) len2 = (( src == NULL) ? 0 : strlen(src)); else len2 = lsrc; if (len2 == 0) return eslOK; ESL_REALLOC(*dest, sizeof(char) * (len1+len2+1)); memcpy((*dest)+len1, src, len2); (*dest)[len1+len2] = '\0'; return eslOK; ERROR: return status; } /* Function: esl_strmapcat() * Synopsis: Version of esl_strcat that uses an inmap. * * Purpose: Append the contents of string or memory line * of length to a string. The destination * string and its length are passed as pointers <*dest> * and <*ldest>, so the string can be reallocated * and the length updated. When appending, map each * character to a new character * in the destination string. The destination string * <*dest> is NUL-terminated on return (even if it * wasn't to begin with). * * One reason to use the inmap is to enable parsers to * ignore some characters in an input string or buffer, * such as whitespace (mapped to ). Of * course this means, unlike the new length * isn't just , because we don't know how many * characters get appended until we've processed them * through the inmap -- that's why this function takes * <*ldest> by reference, whereas takes it * by value. * * If <*dest> is a NUL-terminated string and the caller * doesn't know its length, <*ldest> may be passed as -1. * Providing the length saves a call. If <*dest> * is a memory line, providing <*ldest> is mandatory. Same * goes for and . * * <*dest> may be , in which case it is allocated * and considered to be an empty string to append to. * When <*dest> is the input <*ldest> should be <0> * or <-1>. * * The caller must provide a that it already knows * should be entirely appended to <*dest>, except for * perhaps some ignored characters. No characters may be * mapped to or . The reason for * this is that we're going to allocate <*dest> for * <*ldest+lsrc> chars. If were a large memory buffer, * only a fraction of which needed to be appended (up to * an or ), this reallocation would * be inefficient. * * Args: inmap - an Easel input map, inmap[0..127]; * inmap[0] is special: set to the 'unknown' character to * replace invalid input chars. * *dest - destination string or memory to append to, passed by reference * *ldest - length of <*dest> (or -1), passed by reference * src - string or memory to inmap and append to <*dest> * lsrc - length of to map and append (or -1). * * Returns: on success. Upon successful return, <*dest> is * reallocated and contains the new string (with from 0 to * appended characters), NUL-terminated. * * if one or more characters in the input * are mapped to . Appending nonetheless * proceeds to completion, with any illegal characters * represented as '?' in <*dest> and counted in <*ldest>. * This is a normal error, because the string may be * user input. The caller may want to call some sort of * validation function on if an error is * returned, in order to report some helpful diagnostics to * the user. * * Throws: on allocation or reallocation failure. * on internal coding error; for example, * if the inmap tries to map an input character to , * , or . On exceptions, <*dest> * and <*ldest> should not be used by the caller except to * free <*dest>; their state may have been corrupted. * * Note: This deliberately mirrors , so * that sequence file parsers have comparable behavior whether * they're working with text-mode or digital-mode input. * * Might be useful to create a variant that also handles * eslDSQ_EOD (and eslDSQ_EOL?) and returns the number of * residues parsed. This'd allow a FASTA parser, for * instance, to use this method while reading buffer pages * rather than lines; it could define '>' as eslDSQ_EOD. */ int esl_strmapcat(const ESL_DSQ *inmap, char **dest, int64_t *ldest, const char *src, esl_pos_t lsrc) { int status = eslOK; if (*ldest < 0) *ldest = ( (*dest) ? strlen(*dest) : 0); if ( lsrc < 0) lsrc = ( (*src) ? strlen(src) : 0); if (lsrc == 0) goto ERROR; /* that'll return eslOK, leaving *dest untouched, and *ldest its length. */ ESL_REALLOC(*dest, sizeof(char) * (*ldest + lsrc + 1)); /* includes case of a new alloc of *dest */ return esl_strmapcat_noalloc(inmap, *dest, ldest, src, lsrc); ERROR: return status; } /* Function: esl_strmapcat_noalloc() * Synopsis: Version of esl_strmapcat() that does no reallocation. * * Purpose: Same as , but with no reallocation. The * pointer to the destination string is passed by * value, not by reference, because it will not be changed. * Caller has allocated at least <*ldest + lsrc + 1> bytes * in . In this version, <*ldest> and are not * optional; caller must know the lengths of both the old * string and the new source. * * Note: (see note on esl_abc_dsqcat_noalloc() for rationale) */ int esl_strmapcat_noalloc(const ESL_DSQ *inmap, char *dest, int64_t *ldest, const char *src, esl_pos_t lsrc) { int64_t xpos; esl_pos_t cpos; ESL_DSQ x; int status = eslOK; for (xpos = *ldest, cpos = 0; cpos < lsrc; cpos++) { if (! isascii(src[cpos])) { dest[xpos++] = inmap[0]; status = eslEINVAL; continue; } x = inmap[(int) src[cpos]]; if (x <= 127) dest[xpos++] = x; else switch (x) { case eslDSQ_SENTINEL: ESL_EXCEPTION(eslEINCONCEIVABLE, "input char mapped to eslDSQ_SENTINEL"); break; case eslDSQ_ILLEGAL: dest[xpos++] = inmap[0]; status = eslEINVAL; break; case eslDSQ_IGNORED: break; case eslDSQ_EOL: ESL_EXCEPTION(eslEINCONCEIVABLE, "input char mapped to eslDSQ_EOL"); break; case eslDSQ_EOD: ESL_EXCEPTION(eslEINCONCEIVABLE, "input char mapped to eslDSQ_EOD"); break; default: ESL_EXCEPTION(eslEINCONCEIVABLE, "bad inmap, no such ESL_DSQ code"); break; } } dest[xpos] = '\0'; *ldest = xpos; return status; } /* Function: esl_strtok() * Synopsis: Threadsafe version of C's * * Purpose: Thread-safe version of for parsing next token in * a string. * * Increments <*s> while <**s> is a character in , * then stops; the first non- character defines the * beginning of a token. Increments <*s> until it reaches * the next delim character (or \verb+\0+); this defines the end * of the token, and this character is replaced with * \verb+\0+. <*s> is then reset to point to the next character * after the \verb+\0+ that was written, so successive calls can * extract tokens in succession. Sets <*ret_tok> to point at * the beginning of the token, and returns . * * If a token is not found -- if <*s> already points to * \verb+\0+, or to a string composed entirely of characters in * -- then returns , with <*ret_tok> set to * . * * <*s> cannot be a constant string, since we write \verb+\0+'s * to it; caller must be willing to have this string * modified. And since we walk <*s> through the string as we * parse, the caller wants to use a tmp pointer <*s>, not * the original string itself. * * Example: * char *tok; * char *s; * char buf[50] = "This is a sentence."; * * s = buf; * esl_strtok(&s, " ", &tok); * tok is "This"; s is "is a sentence." * esl_strtok(&s, " ", &tok); * tok is "is"; s is " a sentence.". * esl_strtok(&s, " ", &tok); * tok is "a"; s is "sentence.". * esl_strtok(&s, " ", &tok, &len); * tok is "sentence."; s is "\0". * esl_strtok(&s, " ", &tok, &len); * returned eslEOL; tok is NULL; s is "\0". * * Args: s - a tmp, modifiable ptr to a string * delim - characters that delimits tokens * ret_tok - RETURN: ptr to \0-terminated token * * Returns: on success, <*ret_tok> points to next token, and * <*s> points to next character following the token. * * Returns on end of line; in which case <*s> * points to the terminal \verb+\0+ on the line, and <*ret_tok> * is . */ int esl_strtok(char **s, char *delim, char **ret_tok) { return esl_strtok_adv(s, delim, ret_tok, NULL, NULL); } /* Function: esl_strtok_adv() * Synopsis: More advanced interface to * * Purpose: Same as , except the caller may also * optionally retrieve the length of the token in <*opt_toklen>, * and the token-ending character that was replaced by \verb+\0+ * in <*opt_endchar>. * * Args: s - a tmp, modifiable ptr to string * delim - characters that delimits tokens * ret_tok - RETURN: ptr to \0-terminated token string * opt_toklen - optRETURN: length of token; pass NULL if not wanted * opt_endchar - optRETURN: character that was replaced by <\0>. * * Returns: on success, <*ret_tok> points to next token, <*s> * points to next character following the token, * <*opt_toklen> is the length of the token in * characters (excluding its terminal \verb+\0+), and <*opt_endchar> * is the character that got replaced by \verb+\0+ to form the token. * * Returns if no token is found (end of line); in * which case <*s> points to the terminal \verb+\0+ on the line, * <*ret_tok> is , <*opt_toklen> is 0 and * <*opt_endchar> is \verb+\0+. */ int esl_strtok_adv(char **s, char *delim, char **ret_tok, int *opt_toklen, char *opt_endchar) { char *end; char *tok = *s; char c = '\0'; int n = 0; int status = eslEOL; /* unless proven otherwise */ tok += strspn(tok, delim); if (! *tok) tok = NULL; /* if *tok = 0, EOL, no token left */ else { n = strcspn(tok, delim); end = tok + n; if (*end == '\0') *s = end; /* a final token that extends to end of string */ else { c = *end; /* internal token: terminate with \0 */ *end = '\0'; *s = end+1; } status = eslOK; } *ret_tok = tok; if (opt_toklen != NULL) *opt_toklen = n; if (opt_endchar != NULL) *opt_endchar = c; return status; } /* Function: esl_sprintf() * Synopsis: Dynamic allocation version of sprintf(). * * Purpose: Like ANSI C's , except the string * result is dynamically allocated, and returned * through <*ret_s>. * * Caller is responsible for free'ing <*ret_s>. * * As a special case to facilitate some optional string * initializations, if is , <*ret_s> is set * to . * * Returns: on success, and <*ret_s> is the resulting * string. * * Throws: on allocation failure. * if a <*printf()> library call fails. */ int esl_sprintf(char **ret_s, const char *format, ...) { va_list ap; int status; va_start(ap, format); status = esl_vsprintf(ret_s, format, &ap); va_end(ap); return status; } /* Function: esl_vsprintf() * Synopsis: Dynamic allocation version of vsprintf() * * Purpose: Like ANSI C's , except the string * result is dynamically allocated, and returned * through <*ret_s>. * * Caller is responsible for free'ing <*ret_s>. * * As a special case to facilitate some optional string * initializations, if is , <*ret_s> is set * to . * * Returns: on success, and <*ret_s> is the resulting * string. * * Throws: on allocation failure. * if a <*printf()> library call fails. */ int esl_vsprintf(char **ret_s, const char *format, va_list *ap) { char *s = NULL; va_list ap2; int n1, n2; int status; if (format == NULL) { *ret_s = NULL; return eslOK; } va_copy(ap2, *ap); n1 = strlen(format) * 2; /* initial guess at string size needed */ ESL_ALLOC(s, sizeof(char) * (n1+1)); if ((n2 = vsnprintf(s, n1+1, format, *ap)) >= n1) { ESL_REALLOC(s, sizeof(char) * (n2+1)); if (vsnprintf(s, n2+1, format, ap2) == -1) ESL_EXCEPTION(eslESYS, "vsnprintf() failed"); } else if (n2 == -1) ESL_EXCEPTION(eslESYS, "vsnprintf() failed"); va_end(ap2); *ret_s = s; return eslOK; ERROR: if (s != NULL) free(s); va_end(ap2); *ret_s = NULL; return status; } /* Function: esl_strcmp() * Synopsis: a strcmp() that treats NULL as empty string. * * Purpose: A version of that accepts * strings. If both and are non- * they are compared by . If both are * , return 0 (as if they are identical * strings). If only (or ) is non-, * return 1 (or -1), corresponding to ordering * any non- string as greater than a * string. * * (Easel routinely uses NULL to mean an unset optional * string, and often needs to compare two strings for * equality.) * * Returns: 0 if ; 1 if s2>; -1 if . */ int esl_strcmp(const char *s1, const char *s2) { if (s1 && s2) return strcmp(s1, s2); else if (s1) return 1; else if (s2) return -1; else return 0; } /*--------- end, improved replacement ANSI C functions ----------*/ /***************************************************************** * 5. Portable drop-in replacements for non-standard C functions *****************************************************************/ #ifndef HAVE_STRCASECMP /* Function: esl_strcasecmp() * * Purpose: Compare strings and . Return -1 if * is alphabetically less than , 0 if they * match, and 1 if is alphabetically greater * than . All matching is case-insensitive. * * Args: s1 - string 1, \0 terminated * s2 - string 2, \0 terminated * * Returns: -1, 0, or 1, if is less than, equal, or * greater than , case-insensitively. * * Throws: (no abnormal error conditions) */ int esl_strcasecmp(const char *s1, const char *s2) { int i, c1, c2; for (i = 0; s1[i] != '\0' && s2[i] != '\0'; i++) { c1 = s1[i]; /* total paranoia. don't trust toupper() to */ c2 = s2[i]; /* leave the original unmodified; make a copy. */ if (islower(c1)) c1 = toupper(c1); if (islower(c2)) c2 = toupper(c2); if (c1 < c2) return -1; else if (c1 > c2) return 1; } if (s1[i] != '\0') return 1; /* prefixes match, but s1 is longer */ else if (s2[i] != '\0') return -1; /* prefixes match, s2 is longer */ return 0; /* else, a case-insensitive match. */ } #endif /* ! HAVE_STRCASECMP */ /*------------- end, portable drop-in replacements --------------*/ /***************************************************************** * 6. Additional string functions, esl_str*() *****************************************************************/ /* Function: esl_strchop() * * Purpose: Chops trailing whitespace off of a string (or if * is NULL, do nothing). * is the length of the input string, if known; or pass * if length is unknown. * * Returns: on success. * * Throws: (no abnormal error conditions) * * Xref: from squid's StringChop(). */ int esl_strchop(char *s, int64_t n) { int i; if (s == NULL) return eslOK; if (n < 0) n = strlen(s); for (i = n-1; i>=0 && isspace((int) s[i]); i--); s[i+1] = '\0'; return eslOK; } /* Function: esl_strdealign() * Synopsis: Dealign a string according to gaps in a reference aseq. * * Purpose: Dealign string in place, by removing any characters * aligned to gaps in . Gap characters are defined in the * string ; for example, <-_.>. Optionally return the * unaligned length of in characters in <*opt_rlen>. * * By providing a reference to dealign against, this * function can dealign aligned annotation strings, such as * secondary structure or surface accessibility strings. * If is the same as , then the aligned sequence * itself is dealigned in place. * * To dealign both annotations and sequence, do the * sequence last, since you need it as the reference * when doing the annotations. * * It is safe to pass a (an unset optional * annotation), in which case the function no-ops and * returns . * * Args: s - string to dealign * aseq - reference aligned sequence seq * gapchars - definition of gap characters ("-_." for example) * opt_rlen - optRETURN: number of residues in after dealign * * Returns: on success. */ int esl_strdealign(char *s, const char *aseq, const char *gapchars, int64_t *opt_rlen) { int64_t n = 0; int64_t apos; if (s == NULL) return eslOK; for (apos = 0; aseq[apos] != '\0'; apos++) if (strchr(gapchars, aseq[apos]) == NULL) s[n++] = s[apos]; s[n] = '\0'; if (opt_rlen != NULL) *opt_rlen = n; return eslOK; } /* Function: esl_str_IsBlank() * Synopsis: Return TRUE if is all whitespace; else FALSE. * * Purpose: Given a NUL-terminated string ; return if * string is entirely whitespace (as defined by ), * and return FALSE if not. */ int esl_str_IsBlank(char *s) { for (; *s; s++) if (!isspace(*s)) return FALSE; return TRUE; } /* Function: esl_str_IsInteger() * Synopsis: Return TRUE if represents an integer; else FALSE. * * Purpose: Given a NUL-terminated string , return TRUE * if the complete string is convertible to a base-10 integer * by the rules of or . * * Leading and trailing whitespace is allowed, but otherwise * the entire string must be convertable. (Unlike * itself, which will convert a prefix. ' 99 foo' converts * to 99, but will return FALSE. * * If is , FALSE is returned. */ int esl_str_IsInteger(char *s) { char *endp; long val; if (s == NULL) return FALSE; /* it's NULL */ val = strtol(s, &endp, 10); if (endp == s) return FALSE; /* strtol() can't convert it */ for (s = endp; *s != '\0'; s++) if (! isspace(*s)) return FALSE; /* it has trailing nonconverted nonwhitespace */ return TRUE; } /* Function: esl_str_IsReal() * Synopsis: Return TRUE if string represents a real number; else FALSE. * * Purpose: Given a NUL-terminated string , return * if the string is completely convertible to a floating-point * real number by the rules of and . * (Which allow for exponential forms, hexadecimal forms, * and case-insensitive INF, INFINITY, NAN, all w/ optional * leading +/- sign.) * * No trailing garbage is allowed, unlike . The * entire string must be convertible, allowing leading and * trailing whitespace is allowed. '99.0 foo' converts * to 99.0 with but is for * . ' 99.0 ' is . * * If is , return . */ int esl_str_IsReal(char *s) { char *endp; double val; if (! s) return FALSE; /* is NULL */ val = strtod(s, &endp); if (val == 0.0f && endp == s) return FALSE; /* strtod() can't convert it */ for (s = endp; *s != '\0'; s++) if (! isspace(*s)) return FALSE; /* it has trailing nonconverted nonwhitespace */ return TRUE; } /* Function: esl_str_GetMaxWidth() * Synopsis: Returns maximum strlen() in an array of strings. * * Purpose: Returns the length of the longest string in * an array of strings . If , * returns 0. Any that's is counted * as zero length. */ int64_t esl_str_GetMaxWidth(char **s, int n) { int64_t max = 0; int64_t len; int i; for (i = 0; i < n; i++) if (s[i]) { len = strlen(s[i]); if (len > max) max = len; } return max; } /*-------------- end, additional string functions ---------------*/ /***************************************************************** * 7. File path/name manipulation, including tmpfiles *****************************************************************/ /* Function: esl_FileExists() * Synopsis: Return TRUE if exists and is readable, else FALSE. * * Purpose: Returns TRUE if exists and is readable, else FALSE. * * Note: Testing a read-only fopen() is the only portable ANSI C * I'm aware of. We could also use a POSIX func here, since * we have a ESL_POSIX_AUGMENTATION flag in the code. * * Xref: squid's FileExists(). */ int esl_FileExists(const char *filename) { #if defined _POSIX_VERSION struct stat fileinfo; if (stat(filename, &fileinfo) != 0) return FALSE; if (! (fileinfo.st_mode & S_IRUSR)) return FALSE; return TRUE; #else FILE *fp; if ((fp = fopen(filename, "r"))) { fclose(fp); return TRUE; } return FALSE; #endif } /* Function: esl_FileTail() * Synopsis: Extract filename, removing path prefix. * * Purpose: Given a full pathname , extract the filename * without the directory path; return it via * . space is allocated * here, and must be free'd by the caller. * For example: * becomes ; * becomes ; * becomes ; and * becomes the empty string. * * If is , the rightmost trailing ".foo" extension * is removed too. The suffix is defined as everything following * the rightmost period in the filename in : * with , * becomes , * becomes , and * becomes . * * Args: path - full pathname to process, "/foo/bar/baz.1" * nosuffix - TRUE to remove rightmost suffix from the filename * ret_file - RETURN: filename portion of the path. * * Returns: on success, and points to a newly * allocated string containing the filename. * * Throws: on allocation failure. */ int esl_FileTail(const char *path, int nosuffix, char **ret_file) { int status; char *tail = NULL; char *lastslash; char *lastdot; /* remove directory prefix */ lastslash = strrchr(path, eslDIRSLASH); ESL_ALLOC(tail, sizeof(char) * (strlen(path)+1)); /* a little overkill */ if (lastslash == NULL) strcpy(tail, path); else strcpy(tail, lastslash+1); /* remove trailing suffix */ if (nosuffix) { if ((lastdot = strrchr(tail, '.')) != NULL) *lastdot = '\0'; } *ret_file = tail; return eslOK; ERROR: if (tail != NULL) free(tail); *ret_file = NULL; return status; } /* Function: esl_file_Extension() * Synopsis: Find suffix of a file name; set a memory line on it. * * Purpose: Given a path or file name , and ignoring the * last characters, find the rightmost suffix; * return a pointer to its start in <*ret_sfx> (inclusive * of the ``.''), and its length in <*ret_n>. If no * suffix is found, return with <*ret_sfx = NULL> * and . * * The argument allows iterating through more * than one suffix. * * For example, if is ``./foo/bar/baz.xx.yyy'' * and is 0, <*ret_sfx> points to ``.yyy'' and * <*ret_n> is 4. If is 4, then <*ret_sfx> * points to ``.xx'' and is 3. If is 7 * then status is . */ int esl_file_Extension(char *filename, esl_pos_t n_ignore, char **ret_sfx, esl_pos_t *ret_n) { esl_pos_t n1 = strlen(filename) - n_ignore; esl_pos_t n2; for (n2 = n1; n2 > 0 && filename[n2-1] != eslDIRSLASH && filename[n2-1] != '.'; n2--) ; if (n2 <= 0 || filename[n2-1] == eslDIRSLASH) { *ret_sfx = NULL; *ret_n = 0; return eslFAIL; } *ret_sfx = filename + n2 - 1; *ret_n = n1-n2+1; return eslOK; } /* Function: esl_FileConcat() * * Purpose: Concatenates directory path prefix

and a filename * , and returns the new full pathname through * . If does not already end in the * appropriate delimiter (e.g. / for UNIX), one is added. * * If is NULL, then is just the same as * . Similarly, if already appears to be a * full path (because its first character is a /), then * is ignored and is the same as * . It wouldn't normally make sense for a caller to * call this function with such arguments. * * may be a relative path. For example, * if is "/usr/local" and is "lib/myapp/data", * will be "/usr/local/lib/myapp/data". * * Returns: on success, and puts the path * in ; this string is allocated here, * and must be free'd by caller with . * * Throws: on allocation failure. * on bad argument. * In either case, is returned NULL. * * Xref: squid's FileConcat(). */ int esl_FileConcat(const char *dir, const char *file, char **ret_path) { char *path = NULL; int nd, nf; int status; if (ret_path != NULL) *ret_path = NULL; if (file == NULL) ESL_EXCEPTION(eslEINVAL, "null file"); nd = (dir != NULL)? strlen(dir) : 0; nf = strlen(file); ESL_ALLOC(path, sizeof(char) * (nd+nf+2)); if (dir == NULL) /* 1. silly caller didn't give a path */ strcpy(path, file); else if (*file == eslDIRSLASH) /* 2. is already a path? */ strcpy(path, file); else if (dir[nd-1] == eslDIRSLASH) /* 3. (dir is / terminated) */ sprintf(path, "%s%s", dir, file); else /* 4. / (usual case) */ sprintf(path, "%s%c%s", dir, eslDIRSLASH, file); *ret_path = path; return eslOK; ERROR: if (path != NULL) free(path); if (ret_path != NULL) *ret_path = NULL; return status; } /* Function: esl_FileNewSuffix() * * Purpose: Add a file suffix to ; or if * already has a suffix, replace it with . A suffix is * usually 2-4 letters following a '.' character. Returns * an allocated string containing the result in . * * For example, if is "foo" and is "ssi", * returns "foo.ssi". If is "foo.db" and * is "idx", returns "foo.idx". * * Returns: on success, and is set * string ".". Caller must * this string. * * Throws: on allocation failure. * * Xref: squid's FileAddSuffix(). */ int esl_FileNewSuffix(const char *filename, const char *sfx, char **ret_newpath) { char *new = NULL; char *lastdot; int nf; int status; if (ret_newpath != NULL) *ret_newpath = NULL; lastdot = strrchr(filename, '.'); /* check for suffix to replace */ if (lastdot != NULL && strchr(lastdot, eslDIRSLASH) != NULL) lastdot = NULL; /*foo.1/filename case - don't be fooled.*/ nf = (lastdot == NULL)? strlen(filename) : lastdot-filename; ESL_ALLOC(new, sizeof(char) * (nf+strlen(sfx)+2)); /* '.' too */ strncpy(new, filename, nf); *(new+nf) = '.'; strcpy(new+nf+1, sfx); if (ret_newpath != NULL) *ret_newpath = new; else free(new); return eslOK; ERROR: if (new != NULL) free(new); if (ret_newpath != NULL) *ret_newpath = NULL; return status; } /* Function: esl_FileEnvOpen() * * Purpose: Looks for a file in a colon-separated list of * directories that is configured in an environment variable * . The first occurrence of file in this directory * list is opened read-only. The open file ptr is returned * through , and the full path name to the file * that was opened is returned through . * Caller can pass NULL in place of or * if it is not interested in one or both of these. * * Does not look in the current directory unless "." is * explicitly in the directory list provided by . * * Note: One reason to pass back to the caller is that * sometimes we're opening the first in a group of files * (for example, a database and its SSI index), and we want * to make sure that after we find the main file, the * caller can look for the auxiliary file(s) in exactly the * same directory. * * Examples: % setenv BLASTDB /nfs/databases/blast-db:/nfs/databases/nr/ * * FILE *fp; * char *path; * int status; * status = esl_FileEnvOpen("swiss42", "BLASTDB", &fp, &path); * * Returns: on success, and provides and ; * is opened here, and must be 'd by caller; * is allocated here, and must be 'd by caller. * * Returns if the file not found in any directory, * or if does not contain any directories to look in. * * Throws: on allocation error. * * Xref: squid's EnvFileOpen(). */ int esl_FileEnvOpen(const char *fname, const char *env, FILE **opt_fp, char **opt_path) { FILE *fp; char *dirlist; /* :-separated list of directories */ char *s, *s2; /* ptrs into elems in env list */ char *path = NULL; int np; int status; fp = NULL; if (opt_fp != NULL) *opt_fp = NULL; if (opt_path != NULL) *opt_path = NULL; if (env == NULL) return eslENOTFOUND; if ((s = getenv(env)) == NULL) return eslENOTFOUND; if (esl_strdup(s, -1, &dirlist) != eslOK) return eslEMEM; np = strlen(fname) + strlen(s) + 2; /* upper bound on full path len */ ESL_ALLOC(path, sizeof(char) * np); s = dirlist; while (s != NULL) { if ((s2 = strchr(s, ':')) != NULL) { *s2 = '\0'; s2++;} /* ~=strtok() */ sprintf(path, "%s%c%s", s, eslDIRSLASH, fname); /* // won't hurt */ if ((fp = fopen(path, "r")) != NULL) break; s = s2; } if (fp == NULL) { free(path); free(dirlist); return eslENOTFOUND; } if (opt_path != NULL) { *opt_path = path; } else free(path); if (opt_fp != NULL) { *opt_fp = fp; } else fclose(fp); free(dirlist); return eslOK; ERROR: if (path != NULL) free(path); if (fp != NULL) fclose(fp); if (dirlist != NULL) free(dirlist); if (opt_path != NULL) *opt_path = NULL; if (opt_fp != NULL) *opt_fp = NULL; return status; } /* Function: esl_tmpfile() * * Purpose: Open a secure temporary handle and return it in * . The file is opened in read-write mode () * with permissions 0600, as an atomic operation using the * POSIX function. * * The argument is a modifiable string that must * end in "XXXXXX" (for example, "esltmpXXXXXX"). The * is used to construct a unique tmpfile name. * * Note that this string must be modifiable; do not declare * it nor because these will not work on some * compilers. Something like that explicitly allocates storage will * suffice. * * The file is opened in a standard temporary file * directory. The path is obtained from the environment * variable ; failing that, from the environment * variable ; and failing that, is used. If the * process is running or , then the * environment variables are ignored, and the temp file is * always created in . * * The created tmpfile is not persistent and is not visible * to a directory listing. The caller may the * and do cycles of reading and/or writing, but * once the is closed, the file disappears. The * caller does not need to or it (and * in fact, cannot do so, because it does not know the * tmpfile's name). * * This function is a secure replacement for ANSI C * , which is said to be insecurely implemented on * some platforms. * * Returns: on success, and now points to a new * stream for the opened tempfile. * * Throws: if a system call (including the call) * fails, and and is returned NULL. One possible * problem is if the temporary directory doesn't exist or * is not writable. This is considered to be a system * error, not a user error, so Easel handles it as an exception. * * Xref: STL11/85. Substantially copied from David Wheeler, * "Secure Programming for Linux and Unix HOWTO", * http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/introduction.html. * Copyright (C) 1999-2001 David A. Wheeler. * Licensed under the MIT license; see Appendix C of the HOWTO. * Thanks, David, for the clearest explanation of the issues * that I've seen. * * I also referred to H. Chen, D. Dean, and D. Wagner, * "Model checking one million lines of C code", * In: Network and Distributed System Security Symposium, pp 171-185, * San Diego, CA, February 2004; * http://www.cs.ucdavis.edu/~hchen/paper/ndss04.pdf. * Wheeler's implementation obeys Chen et al's "Property 5", * governing secure use of tempfiles. */ int esl_tmpfile(char *basename6X, FILE **ret_fp) { char *tmpdir = NULL; char *path = NULL; FILE *fp = NULL; int fd; int status; mode_t old_mode; /* Determine what tmp directory to use, and construct the * file name. */ if (getuid() == geteuid() && getgid() == getegid()) { tmpdir = getenv("TMPDIR"); if (tmpdir == NULL) tmpdir = getenv("TMP"); } if (tmpdir == NULL) tmpdir = "/tmp"; if ((status = esl_FileConcat(tmpdir, basename6X, &path)) != eslOK) goto ERROR; old_mode = umask(077); if ((fd = mkstemp(path)) < 0) ESL_XEXCEPTION(eslESYS, "mkstemp() failed."); umask(old_mode); if ((fp = fdopen(fd, "w+b")) == NULL) ESL_XEXCEPTION(eslESYS, "fdopen() failed."); if (unlink(path) < 0) ESL_XEXCEPTION(eslESYS, "unlink() failed."); *ret_fp = fp; free(path); return eslOK; ERROR: if (path != NULL) free(path); if (fp != NULL) fclose(fp); *ret_fp = NULL; return status; } /* Function: esl_tmpfile_named() * * Purpose: Open a persistent temporary file relative to the current * working directory. The file name is constructed from the * argument, which must be a modifiable string * ending in the six characters "XXXXXX". These are * replaced by a unique character string by a call to POSIX * . For example, might be * on input, and on return; or, to * put the tmp file in a subdirectory under the current * working directory, something like * on input resulting in something like * on return. The tmpfile is opened * for reading and writing (in mode with permissions * 0600) and the opened handle is returned through * . * * The created tmpfile is persistent: it will be visible in * a directory listing, and will remain after program * termination unless the caller explicitly removes it by a * or call. * * To use this function securely, if you reopen the * tmpfile, you must only reopen it for reading, not * writing, and you must not trust the contents. * * Because the will be modified, it cannot be * a string constant (especially on a picky compiler like * gcc). You have to declare it with something like * * not * * because a compiler is allowed to make the <*tmpfile> version * a constant. * * Returns: on success, contains the name of the * tmpfile, and contains a new stream for the * opened file. * * on failure, and is returned NULL and * the contents of are undefined. The most * common reason for a failure will be that the caller does * not have write permission for the directory that * is in. Easel handles this as a normal (user) * failure, not an exception, because these permissions are * most likely in the user's control (in contrast to * , which always uses a system * that should always be user-writable on a properly * configured POSIX system). * * Xref: STL11/85. */ int esl_tmpfile_named(char *basename6X, FILE **ret_fp) { FILE *fp; mode_t old_mode; int fd; *ret_fp = NULL; old_mode = umask(077); if ((fd = mkstemp(basename6X)) < 0) return eslFAIL; umask(old_mode); if ((fp = fdopen(fd, "w+b")) == NULL) return eslFAIL; *ret_fp = fp; return eslOK; } /* Function: esl_getcwd() * Synopsis: Gets the path for the current working directory. * * Purpose: Returns the path for the current working directory * in <*ret_cwd>, as reported by POSIX . * <*ret_cmd> is allocated here and must be freed by * the caller. * * Returns: on success, and <*ret_cwd> points to * the pathname of the current working directory. * * If is unavailable on this system, * returns and <*ret_cwd> is . * * If the pathname length exceeds a set limit (16384 char), * returns and <*ret_cwd> is . * * Throws: on allocation failure; <*ret_cwd> is . * on getcwd() failure; <*ret_cwd> is . * * Xref: J7/54. */ int esl_getcwd(char **ret_cwd) { char *cwd = NULL; int status = eslOK; #ifdef _POSIX_VERSION int nalloc = 256; int maxalloc = 16384; do { ESL_ALLOC(cwd, sizeof(char) * nalloc); if (getcwd(cwd, nalloc) == NULL) { if (errno != ERANGE) ESL_XEXCEPTION(eslESYS, "unexpected getcwd() error"); if (nalloc * 2 > maxalloc) { status = eslERANGE; goto ERROR; } free(cwd); cwd = NULL; nalloc *= 2; } } while (cwd == NULL); *ret_cwd = cwd; return status; ERROR: if (cwd) free(cwd); *ret_cwd = NULL; return status; #else *ret_cwd = NULL; return eslEUNIMPLEMENTED; #endif } /*----------------- end of file path/name functions ------------------------*/ /***************************************************************** * 8. Typed comparison routines. *****************************************************************/ /* Function: esl_DCompare() * * Purpose: Compare two floating point scalars and for approximate equality. * Return if equal, if not. * * Equality is defined by being within a relative * epsilon , as <2*fabs(a-b)/(a+b)> $\leq$ . * Additionally, we catch the special cases where * and/or are 0 or -0. If both are, return ; if * one is, check that the absolute value of the other is * $\leq$ . * * and work on and * scalars, respectively. */ int esl_DCompare(double a, double b, double tol) { if (isinf(a) && isinf(b)) return eslOK; if (isnan(a) && isnan(b)) return eslOK; if (!isfinite(a) || !isfinite(b)) return eslFAIL; if (a == b) return eslOK; if (fabs(a) == 0. && fabs(b) <= tol) return eslOK; if (fabs(b) == 0. && fabs(a) <= tol) return eslOK; if (2.*fabs(a-b) / fabs(a+b) <= tol) return eslOK; return eslFAIL; } int esl_FCompare(float a, float b, float tol) { if (isinf(a) && isinf(b)) return eslOK; if (isnan(a) && isnan(b)) return eslOK; if (!isfinite(a) || !isfinite(b)) return eslFAIL; if (a == b) return eslOK; if (fabs(a) == 0. && fabs(b) <= tol) return eslOK; if (fabs(b) == 0. && fabs(a) <= tol) return eslOK; if (2.*fabs(a-b) / fabs(a+b) <= tol) return eslOK; return eslFAIL; } /* Function: esl_DCompareAbs() * * Purpose: Compare two floating point scalars and for * approximate equality, by absolute difference. Return * if equal, if not. * * Equality is defined as for finite * ; or , when either value is not * finite. * * Generally it is preferable to compare floating point * numbers for equality using relative difference: see * , and also Knuth's Seminumerical * Algorithms. However, cases arise where absolute * difference comparison is preferred. One such case is in * comparing the log probability values of DP matrices, * where numerical error tends to accumulate on an absolute * scale, dependent more on the number of terms than on * their magnitudes. DP cells with values that happen to be * very close to zero can have high relative differences. */ int esl_DCompareAbs(double a, double b, double tol) { if (isinf(a) && isinf(b)) return eslOK; if (isnan(a) && isnan(b)) return eslOK; if (!isfinite(a) || !isfinite(b)) return eslFAIL; if (fabs(a-b) <= tol) return eslOK; return eslFAIL; } int esl_FCompareAbs(float a, float b, float tol) { if (isinf(a) && isinf(b)) return eslOK; if (isnan(a) && isnan(b)) return eslOK; if (!isfinite(a) || !isfinite(b)) return eslFAIL; if (fabs(a-b) <= tol) return eslOK; return eslFAIL; } /* Function: esl_CCompare() * Synopsis: Compare two optional strings for equality. * * Purpose: Compare two optional strings and * for equality. * * If they're non- and identical up to their * -terminator, return . * * If they're both (unset), return . * * Otherwise, they're not identical; return . */ int esl_CCompare(char *s1, char *s2) { if (s1 == NULL && s2 == NULL) return eslOK; if (s1 == NULL || s2 == NULL) return eslFAIL; if (strcmp(s1, s2) != 0) return eslFAIL; return eslOK; } /*-------------- end, typed comparison routines --------------------*/ /***************************************************************** * 9. Unit tests. *****************************************************************/ #ifdef eslEASEL_TESTDRIVE static void utest_IsInteger(void) { char *goodones[] = { " 99 " }; char *badones[] = { "", " 99 foo " }; int ngood = sizeof(goodones) / sizeof(char *); int nbad = sizeof(badones) / sizeof(char *); int i; for (i = 0; i < ngood; i++) if (! esl_str_IsInteger(goodones[i])) esl_fatal("esl_str_IsInteger() should have recognized %s", goodones[i]); for (i = 0; i < nbad; i++) if ( esl_str_IsInteger(badones[i])) esl_fatal("esl_str_IsInteger() should not have recognized %s", badones[i]); } static void utest_IsReal(void) { char *goodones[] = { "99", " \t 99", "-99.00", "+99.00e-12", "+0xabc.defp-12", " +INFINITY", "-nan" }; char *badones[] = { "", "FIBB_BOVIN/67-212", /* testing for a fixed bug, 17 Dec 2012, reported by ER */ }; int ngood = sizeof(goodones) / sizeof(char *); int nbad = sizeof(badones) / sizeof(char *); int i; for (i = 0; i < ngood; i++) if (! esl_str_IsReal(goodones[i])) esl_fatal("esl_str_IsReal() should have recognized %s", goodones[i]); for (i = 0; i < nbad; i++) if ( esl_str_IsReal(badones[i])) esl_fatal("esl_str_IsReal() should not have recognized %s", badones[i]); } static void utest_strmapcat(void) { char *msg = "esl_strmapcat() unit test failed"; ESL_DSQ inmap[128]; char *pfx = "testing testing"; char *append = "one two three"; char *bad = "1 2 three"; char *dest; int64_t L1; esl_pos_t L2; int x; /* a simple input map, for testing */ for (x = 0; x < 128; x++) inmap[x] = eslDSQ_ILLEGAL; for (x = 'a'; x < 'z'; x++) inmap[x] = x; for (x = 'A'; x < 'Z'; x++) inmap[x] = x; inmap[' '] = eslDSQ_IGNORED; inmap[0] = '?'; L1 = strlen(pfx); L2 = strlen(append); if ( ( esl_strdup (pfx, L1, &dest)) != eslOK) esl_fatal(msg); if ( ( esl_strmapcat(inmap, &dest, &L1, append, L2)) != eslOK) esl_fatal(msg); if ( strcmp(dest, "testing testingonetwothree") != 0) esl_fatal(msg); free(dest); L1 = -1; L2 = -1; if ( ( esl_strdup (pfx, L1, &dest)) != eslOK) esl_fatal(msg); if ( ( esl_strmapcat(inmap, &dest, &L1, append, L2)) != eslOK) esl_fatal(msg); if ( strcmp(dest, "testing testingonetwothree") != 0) esl_fatal(msg); free(dest); L1 = 0; dest = NULL; if ( ( esl_strmapcat(inmap, &dest, &L1, pfx, -1)) != eslOK) esl_fatal(msg); if ( ( esl_strmapcat(inmap, &dest, &L1, append, -1)) != eslOK) esl_fatal(msg); if ( strcmp(dest, "testingtestingonetwothree") != 0) esl_fatal(msg); free(dest); if ( ( esl_strdup(pfx, -1, &dest)) != eslOK) esl_fatal(msg); L1 = 8; if ( ( esl_strmapcat(inmap, &dest, &L1, bad, -1)) != eslEINVAL) esl_fatal(msg); if ( strcmp(dest, "testing ??three") != 0) esl_fatal(msg); free(dest); } static void utest_strtok(void) { char msg[] = "esl_strtok() unit test failed"; char *teststring; char *s; char *tok; int toklen; char endc; if (esl_strdup("This is\t a sentence.", -1, &teststring) != eslOK) esl_fatal(msg); s = teststring; if (esl_strtok(&s, " ", &tok) != eslOK) esl_fatal(msg); if (strcmp(tok, "This") != 0) esl_fatal(msg); if (*s != 'i') esl_fatal(msg); if (esl_strtok_adv(&s, " \t", &tok, &toklen, &endc) != eslOK) esl_fatal(msg); if (strcmp(tok, "is") != 0) esl_fatal(msg); if (*s != ' ') esl_fatal(msg); if (toklen != 2) esl_fatal(msg); if (endc != '\t') esl_fatal(msg); if (esl_strtok_adv(&s, "\n", &tok, NULL, NULL) != eslOK) esl_fatal(msg); if (strcmp(tok, " a sentence.") != 0) esl_fatal(msg); if (*s != '\0') esl_fatal(msg); free(teststring); return; } static void utest_sprintf(void) { char msg[] = "unit tests for esl_[v]sprintf() failed"; int num = 99; char *what = "beer"; char *s = NULL; if (esl_sprintf(&s, "%d bottles of %s", num, what) != eslOK) esl_fatal(msg); if (strcmp(s, "99 bottles of beer") != 0) esl_fatal(msg); free(s); if (esl_sprintf(&s, NULL) != eslOK) esl_fatal(msg); if (s != NULL) esl_fatal(msg); } static void utest_FileExists(void) { char msg[] = "FileExists unit test failed"; char tmpfile[32] = "esltmpXXXXXX"; FILE *fp = NULL; #ifdef _POSIX_VERSION struct stat st; mode_t mode; #endif /* create a tmpfile */ if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg); fprintf(fp, "Unit test.\n"); fclose(fp); if (! esl_FileExists(tmpfile)) esl_fatal(msg); #ifdef _POSIX_VERSION /* The FileExists doesn't just test existence; it also checks read permission */ if (stat(tmpfile, &st) != 0) esl_fatal(msg); mode = st.st_mode & ~S_IRUSR; if (chmod(tmpfile, mode) != 0) esl_fatal(msg); if (esl_FileExists(tmpfile)) esl_fatal(msg); #endif remove(tmpfile); if (esl_FileExists(tmpfile)) esl_fatal(msg); return; } static void utest_tmpfile_named(void) { char msg[] = "tmpfile_named unit test failed"; char tmpfile[32] = "esltmpXXXXXX"; FILE *fp = NULL; char buf[256]; if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg); fprintf(fp, "Unit test.\n"); fclose(fp); if ((fp = fopen(tmpfile, "r")) == NULL) esl_fatal(msg); if (fgets(buf, 256, fp) == NULL) esl_fatal(msg); if (strcmp(buf, "Unit test.\n") != 0) esl_fatal(msg); fclose(fp); remove(tmpfile); return; } #endif /*eslEASEL_TESTDRIVE*/ /***************************************************************** * 10. Test driver. *****************************************************************/ #ifdef eslEASEL_TESTDRIVE /* gcc -g -Wall -o easel_utest -I. -L. -DeslEASEL_TESTDRIVE easel.c -leasel -lm * ./easel_utest */ #include "easel.h" int main(void) { #ifdef eslTEST_THROWING esl_exception_SetHandler(&esl_nonfatal_handler); #endif utest_IsInteger(); utest_IsReal(); utest_strmapcat(); utest_strtok(); utest_sprintf(); utest_FileExists(); utest_tmpfile_named(); return eslOK; } #endif /*eslEASEL_TESTDRIVE*/ /***************************************************************** * 11. Examples. *****************************************************************/ #ifdef eslEASEL_EXAMPLE /*::cexcerpt::easel_example_tmpfiles::begin::*/ /* gcc -g -Wall -o example -I. -L. -DeslEASEL_EXAMPLE_TMPFILES easel.c -leasel -lm * ./example */ #include "easel.h" int main(void) { char tmpfile1[32] = "esltmpXXXXXX"; /* a transient, secure tmpfile: 6 X's are important */ char tmpfile2[32] = "esltmpXXXXXX"; /* a named tmpfile */ FILE *fp = NULL; char buf[256]; /* Example of using a secure, unnamed tmpfile. * Note, the new tmpfile is automatically deleted, so to cleanup, just fclose() the FILE */ esl_tmpfile(tmpfile1, &fp); fprintf(fp, "Hello world!\n"); rewind(fp); fgets(buf, 256, fp); printf("first temp file says: %s\n", buf); fclose(fp); /* Example of reasonably securely using a named tmpfile. * To cleanup, must both fclose() the FILE and remove() the file by name */ esl_tmpfile_named(tmpfile2, &fp); fprintf(fp, "Hello insecure world!\n"); fclose(fp); /* tmpfile2 now exists on disk and can be closed/reopened */ fp = fopen(tmpfile2, "r"); fgets(buf, 256, fp); printf("second temp file says: %s\n", buf); fclose(fp); remove(tmpfile2); /* disk file cleanup necessary with this version. */ return eslOK; } /*::cexcerpt::easel_example_tmpfiles::end::*/ #endif /*eslEASEL_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: easel.c 940 2015-01-22 19:34:21Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/easel.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_wuss.h0000664361611702660230000000221012473612610015366 0ustar wheelerteddy/* RNA secondary structure markup in WUSS notation. * * SRE, Tue Feb 15 10:15:28 2005 * SVN $Id: esl_wuss.h 791 2012-08-22 18:03:16Z rivase $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_wuss.h $ */ #ifndef eslWUSS_INCLUDED #define eslWUSS_INCLUDED extern int esl_wuss2ct(char *ss, int len, int *ct); extern int esl_ct2wuss(int *ct, int n, char *ss); extern int esl_ct2simplewuss(int *ct, int n, char *ss); extern int esl_wuss2kh(char *ss, char *kh); extern int esl_kh2wuss(char *kh, char *ss); extern int esl_wuss_full(char *oldss, char *newss); extern int esl_wuss_nopseudo(char *ss1, char *ss2); #endif /*eslWUSS_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_alphabet.tex0000664361611702660230000005733012473612605016537 0ustar wheelerteddyThe \eslmod{alphabet} module contains routines for digitizing alphabetic biosequences. It is convenient to represent nucleotides and amino acids as array indices 0..3 or 0..19, respectively, for efficiency and other reasons. It is also convenient to index the residues in a biosequence in 1..L coordinates instead of the C language's 0..L-1 array representation, partly for human readability, and also because some codes (dynamic programming alignment algorithms, for example) have boundary conditions where initializing a boundary at coordinate 0 is convenient. Real biosequences do not consist of just four or twenty different canonical symbols, though. The \eslmod{alphabet} module provides mechanisms for dealing with several other biosequence coding issues: \begin{itemize} \item Degenerate residue symbols representing uncertainties, including both IUPAC/IUBMB standard one-letter nomenclature and nonstandard extensions such as the use of \ccode{J} to mean isoleucine or leucine (\ccode{I|L}) in protein sequences determined by mass spec; \item Symbols for ``any residue'' (N in DNA/RNA; X in amino acid sequences) and ``not a residue'' (a ``translated'' stop codon '*' in protein sequence; \item Standard and nonstandard symbols for unusual residues, such as selenocysteine (\ccode{U}) and pyrrolysine (\ccode{O}) in proteins; \item \emph{Ad hoc} symbols representing modified residues, such as the slew of one-letter codes used to annotate posttranscriptionally modified nucleotides in the Sprinzl tRNA database \citep{Sprinzl98}; \item Case-insensitivity of input sequences, for instance allowing both \ccode{a} and \ccode{A} to mean alanine in amino acid sequences; \item Tolerating common malpractices in the field, like the use of \ccode{X} instead of \ccode{N} as a degeneracy code in nucleic acid sequence; \item The semantic difference between a gap symbol and a missing data symbol in sequence alignments. \end{itemize} The \eslmod{alphabet} module provides standard defaults for protein, RNA, and DNA alphabets which follow both community standards and IUPAC/IUBMB nomenclature for representing sequence residues in one-letter ASCII characters. Additionally, the design of the \eslmod{alphabet} module is flexible enough to allow an application to customize its own alphabet, to deal with these issues almost any way it chooses. Table~\ref{tbl:alphabet_api} lists the functions in the \eslmod{alphabet} API. Easel maintains alphabet information in an \ccode{ESL\_ALPHABET} structure. An application usually creates its alphabet once, possibly even as a global variable. A digitized sequence \ccode{dsq} is an \ccode{unsigned char *} array of length \ccode{L+2}, where \ccode{dsq[1..L]} are digitized residues, and \ccode{dsq[0]} and \ccode{dsq[L+1]} are sentinel bytes (of value \ccode{eslSENTINEL}, 127). \begin{table}[hbp] \begin{center} \begin{tabular}{ll}\hline \multicolumn{2}{c}{\textbf{The \ccode{ESL\_ALPHABET} object}}\\ \ccode{esl\_alphabet\_Create()} & Create alphabet of standard type. \\ \ccode{esl\_alphabet\_CreateCustom()} & Create a custom alphabet. \\ \ccode{esl\_alphabet\_SetEquiv()} & Define an equivalent symbol. \\ \ccode{esl\_alphabet\_SetCaseInsensitive()} & Make an alphabet's input map case insensitive. \\ \ccode{esl\_alphabet\_SetDegeneracy()} & Define degenerate symbol in custom alphabet. \\ \ccode{esl\_alphabet\_Destroy()} & Frees an alphabet object. \\ \multicolumn{2}{c}{\textbf{Digitized sequences}}\\ \ccode{esl\_abc\_CreateDsq()} & Digitize a sequence into new \ccode{dsq} space. \\ \ccode{esl\_abc\_Digitize()} & Digitize a sequence into existing \ccode{dsq} space. \\ \multicolumn{2}{c}{\textbf{Other functions}}\\ \ccode{esl\_abc\_\{I,F,D\}AvgScore()} & Calculate avg score of degenerate residue.\\ \ccode{esl\_abc\_\{I,F,D\}ExpectScore()} & Calculate expected score of degenerate residue.\\ \ccode{esl\_abc\_Type()} & Convert internal alphabet type code to output string.\\ \ccode{esl\_abc\_\{F,D\}Count()} & Count a digital symbol towards a countvector.\\ \ccode{esl\_abc\_DigitizeSymbol()} & Returns digital code for one ASCII character.\\ \ccode{esl\_abc\_XIsDegenerate()} & Returns TRUE given code for a degeneracy.\\ \ccode{esl\_abc\_XIsBasic()} & Returns TRUE given code for a fundamental residue.\\ \ccode{esl\_abc\_XIsGap()} & Returns TRUE given code for a gap.\\ \ccode{esl\_abc\_CIsDegenerate()} & Returns TRUE given a degenerate character.\\ \ccode{esl\_abc\_CIsBasic()} & Returns TRUE given a fundamental residue.\\ \ccode{esl\_abc\_CIsGap()} & Returns TRUE given a gap character.\\ \hline \end{tabular} \end{center} \caption{The \eslmod{alphabet} API.} \label{tbl:alphabet_api} \end{table} \subsection{An example of using the alphabet API} Figure~\ref{fig:alphabet_example} shows an example of creating a DNA alphabet and digitizing a short DNA sequence. \begin{figure} \input{cexcerpts/alphabet_example} \caption{An example of using the \eslmod{alphabet} module.} \label{fig:alphabet_example} \end{figure} \begin{itemize} \item A standard biosequence alphabet is created using \ccode{esl\_alphabet\_Create(type)}, where \ccode{type} can be \ccode{eslDNA}, \ccode{eslRNA}, or \ccode{eslAMINO}. \item An input sequence \ccode{seq} of length \ccode{L} is digitized according to alphabet \ccode{a}, creating a newly allocated digital sequence \ccode{dsq}, by calling \ccode{esl\_dsq\_Create(a, seq, L, \&dsq)}. The caller must free \ccode{dsq} using \ccode{free(dsq)}. Alternatively, if the caller has already allocated \ccode{L+2} (or more) bytes in \ccode{dsq}, it can call \ccode{esl\_dsq\_Set(a, seq, L, dsq)}, which is the non-allocating version of \ccode{esl\_dsq\_Create()}. \item For an input sequence of length \ccode{L}, the digitized sequence \ccode{dsq} is a \ccode{char *} array of \ccode{L+2} bytes. \ccode{dsq[0]} and \ccode{dsq[L+1]} contain a sentinel byte of value \ccode{eslSENTINEL} (127). Positions \ccode{1..L} hold the residues, where values \ccode{0..3} encode \ccode{ACGT} in DNA sequences, \ccode{0..3} encode \ccode{ACGU} in RNA sequences, and \ccode{0..19} encode \ccode{AC..WY} in amino acid sequences. \item Both sequence-digitizing functions return \ccode{eslEINVAL} if the input sequence contains characters that are not in the alphabet. Because input sequences are often provided by a user (not the program), this is a common error that the application must check for. \end{itemize} \subsection{Concepts and terminology} A \esldef{symbol} is a 7-bit ASCII input character, representing a residue, gap, nonresidue, or degeneracy. A \esldef{code} is the digital internal representation of the symbol as an \ccode{unsigned char} in the range $0..127$, suitable for use as an array index. The \eslmod{alphabet} module translates input symbols into internal digital codes. We distinguish between an input alphabet, an internal alphabet, and a canonical alphabet. The \esldef{input alphabet} consists of all the symbols that Easel allows in an input biosequence character string. The \esldef{internal alphabet} is the standardized one-letter alphabet that Easel deals with. The \esldef{canonical alphabet} is the fundamental set of 4 nucleotides or 20 amino acids. Easel deals with all of the complications of sequence encoding using two concepts, equivalency and degeneracy. \esldef{Equivalency} defines how the input alphabet maps to the internal alphabet. \esldef{Degeneracy} defines how the internal alphabet maps to the canonical alphabet. Equivalent residues are symbols that are accepted in an input sequence character string and silently translated into an appropriate internal code. Characters in the input alphabet are mapped many-to-one to the internal alphabet using an \esldef{input map}. One use of equivalency is to map both lower and upper case input to the same internal symbol. Another use is to allow several different input characters to mean a gap, 'any' symbol, or 'nonresidue' symbol. Another use is to silently accept and ``fix'' nonstandard but common input ``errors'', such as tolerating the use of X to mean N in nucleic acid sequences. Degenerate residues are codes in the internal alphabet that are mapped one-to-many onto canonical residue codes, using a \esldef{degeneracy map}. In addition to mapping the degeneracy codes onto the canonical alphabet, the degeneracy mechanism is also used to deal with unusual and modified residues. Selenocysteine, for instance, is represented by default as a \ccode{U}, but treated as a degenerate code for \ccode{C} (cysteine). The rationale for this will be described in more detail below. \subsubsection{The internal alphabet} Easel's internal alphabet is a string (\ccode{a->sym}) of length \ccode{Kp}, which contains: \begin{itemize} \item the \ccode{K} symbols of the canonical alphabet; \item a standard gap symbol; \item (optionally) any other degenerate, unusual, or modified residue codes; \item a mandatory ``any'' symbol (a completely degenerate residue); \item a mandatory ``not-a-residue'' symbol; \item a mandatory ``missing data'' symbol. \end{itemize} Residues \ccode{0..K-1} must be the canonical alphabet. Residue \ccode{K} must be the gap symbol. Residues \ccode{K+1..Kp-4} must be the degenerate and modified residue symbols (there can be zero of these). Residue \ccode{Kp-3} must be the completely degenerate symbol (such as \ccode{X} for protein sequence or \ccode{N} for nucleic acid sequence); all alphabets must have such a symbol. Residue \ccode{Kp-2} must be the not-a-residue symbol. Residue \ccode{Kp-1} must be the missing data symbol. Because the 'any' symbol, 'not-a-residue' symbol, and the two kinds of gap symbols are mandatory in any alphabet, \ccode{Kp} $\geq$ \ccode {K+4}. Aside from these constraints, symbols may occur in any order. The digital code used for each residue is then the index of a residue in this string, \ccode{0..Kp-1}. The only other value that can appear in a digitized sequence is \ccode{eslSENTINEL} (127), the sentinel byte in positions \ccode{0} and \ccode{L+1} of a digitized sequence of length \ccode{L}. The rationale for the ordering is the following. Most applications will define residue scores in vectors and matrices that are smaller than the full range of the internal alphabet; for instance, it's common to only have \ccode{K} scores for the canonical residues. As much as possible, we want array indices to be the same whether we're accessing the full internal alphabet or a smaller score vector or matrix. So: we expect many applications to have score vectors or matrices that only contain the \ccode{K} canonical residues, so the canonical residues go first. We expect some applications to treat gaps as an extra symbol, and provide \ccode{K+1} position-specific scores or a \ccode{K+1} $\times$ \ccode{K+1} score matrix, so the gap character is next. We expect a few applications to optimize degeneracy scoring by precalculating them in \ccode{Kp-2} vectors or $Kp-2 \times Kp-2$ matrices, so the degeneracies go next (the gap character at $K$ might then go unused in the score vectors and matrices, but that's a minor inefficiency). The 'any' symbol should be at a predictable position in the degeneracy list, so it's arbitrarily placed at the end, in position \ccode{Kp-3}. The most robust applications will also handle the not-a-residue symbol (they may see translated stop codons), so it's next. Finally, the missing data symbol is expected to always require special handling when it occurs, rather than appearing in a score vector or matrix, so it's put last. \subsection{The standard alphabets: DNA, RNA, protein} The three standard internal alphabets are: \begin{table}[h] \begin{tabular}{llccrr} \textbf{Type} & \ccode{sym} & \textbf{equivs} & \textbf{gaps} & \ccode{K} & \ccode{Kp} \\ \ccode{eslRNA} & \ccode{ACGU-RYMKSWHBVDN*\~} & T=U; X=N & \ccode{-\_.} & 4 & 18 \\ \ccode{eslDNA} & \ccode{ACGT-RYMKSWHBVDN*\~} & U=T; X=N & \ccode{-\_.} & 4 & 18 \\ \ccode{eslAMINO} & \ccode{ACDEFGHIKLMNPQRSTVWY-BJZOUX*\~} & & \ccode{-\_.} & 20 & 29 \\ \end{tabular} \end{table} The \ccode{sym} string contains all the symbols that can be handled internally, and all the residues that can be represented when a digitized sequence is converted back to text. An application might still convert some characters for its own purposes before displaying an alphabetic string; for instance, to use different gap symbols for insertions versus deletions, or to use upper/lower case conventions to represent match/insert positions in a profile HMM alignment. The standard DNA and RNA alphabets follow published IUBMB recommendations (``Nomenclature for incompletely specified bases in nucleic acid'' \citep{IUBMB85}), with an addition of X as an equivalence for N (acquiescing to the \emph{de facto} BLAST filter standard of using X's to mask residues), and equivalencing T to U in RNA sequences (and vice versa in DNA). The one-letter code for amino acids follows section 3AA-21 of the IUPAC recommendations \citep{IUPAC84}. The code is augmented by U for selenocysteine, as recommended in 1999 by the JCBN/NC-IUBMB Newsletter (\url{http://www.chem.qmul.ac.uk/iubmb/newsletter/1999/item3.html}). It is also augmented by O for pyrrolysine and J for a leucine/isoleucine ambiguity (from a mass spectrometry experiment), following usage in the RESID database (\url{http://www.ebi.ac.uk/RESID/}). \subsection{Degenerate residues} The symbols from \ccode{K+1..Kp-4} in the internal alphabet are all treated as degenerate residues. When creating a custom alphabet, each degenerate symbol is initialized by calling \ccode{esl\_alphabet\_SetDegeneracy(alphabet, c, syms)} to assign degenerate alphabetic symbol \ccode{c} to the alphabetic symbols in the string \ccode{syms}. For example, \ccode{esl\_alphabet\_SetDegeneracy(a, 'R', \"AG\")} assigns R (purine) to mean A or G. For the standard biosequence alphabets, this is done automatically to define the proper degeneracy codes. For amino acid alphabets, the default code is: \begin{cchunk} esl_alphabet_SetDegeneracy(a, 'B', "ND"); esl_alphabet_SetDegeneracy(a, 'J', "IL"); esl_alphabet_SetDegeneracy(a, 'Z', "QE"); \end{cchunk} For RNA alphabets, the default code is: \begin{cchunk} esl_alphabet_SetDegeneracy(a, 'R', "AG"); esl_alphabet_SetDegeneracy(a, 'Y', "CU"); esl_alphabet_SetDegeneracy(a, 'M', "AC"); esl_alphabet_SetDegeneracy(a, 'K', "GU"); esl_alphabet_SetDegeneracy(a, 'S', "CG"); esl_alphabet_SetDegeneracy(a, 'W', "AU"); esl_alphabet_SetDegeneracy(a, 'H', "ACU"); esl_alphabet_SetDegeneracy(a, 'B', "CGU"); esl_alphabet_SetDegeneracy(a, 'V', "ACG"); esl_alphabet_SetDegeneracy(a, 'D', "AGU"); \end{cchunk} For DNA alphabets, the calls are is the same as for RNA code, but with \ccode{T} in place of \ccode{U}. \subsubsection{Implementation: the degeneracy map} The alphabet's degeneracy map is implemented in an array \ccode{a->degen[0..Kp-1][0..K-1]} of 1/0 (TRUE/FALSE) flags. \ccode{a->degen[x][y] == TRUE} indicates that the residue set $D(x)$ for degeneracy code \ccode{x} contains base residue \ccode{y}. \ccode{a->ndegen[x]} contains the cardinality $|D(x)|$, how many base residues are represented by degeneracy code \ccode{x}. For the two kinds of gap symbols, the degeneracy map is empty; all flags are FALSE and the cardinality is 0. Because character \ccode{Kp-3} in the internal alphabet is automatically assumed to be an ``any'' character (such as 'N' for DNA or RNA, 'X' for protein), \ccode{a->degen[Kp-3][i] = 1} for all $i=0..K-1$, and \ccode{a->ndegen[Kp-3] = K}. The storage of the degeneracy map is a little wasteful. We really only need rows \ccode{a->degen[K+1..Kp-3]}, but optimizing this would create some index translation hassles, and it doesn't seem worth it. \subsection{Equivalent residues} The concept of equivalent residues allows an input symbol to be mapped to a different internal symbol. One use of equivalence is to map both lower and upper case input to the same internal representation. Another use is to allow several different input characters to mean a gap. Another use is to silently accept and ``fix'' nonstandard but common input ``errors'', such as the use of T instead of U in RNA sequences (or vice versa in DNA), or the use of X instead of N as an ambiguity code in nucleic acid sequences. The call \ccode{esl\_alphabet\_SetEquiv(a, 'U', 'T')}, for example, makes an alphabet interpret \ccode{U} as a \ccode{T} (encoding both as \ccode{3}, in the case of the standard DNA and RNA alphabets). All three standard alphabets accept \ccode{\_} or \ccode{.} symbols as equivalences for the standard gap symbol \ccode{-}. An application can define additional gap characters, such as \ccode{,}, by calling \ccode{esl\_alphabet\_SetSynonym(a, ',', '-')} on one of the standard alphabets to define additional equivalences (that is, you don't have to create a custom alphabet to add new equivalences). \ccode{esl\_alphabet\_SetCaseInsensitive()} maps both upper case and lower case input alphabetic characters map to their equivalent in the internal alphabet in a case-insensitive manner. This function works only on residues that have already been declared to be part of the alphabet, so when defining a custom alphabet, it must be called after all individual equivalences have been defined. The standard alphabets are always set to be case insensitive. \subsubsection{Implementation of equivalent residues: the input map} Internally, an \textbf{input map}, \ccode{a->inmap[0..127]}, specifies how an input ASCII 7-bit text symbol is converted to digital code. \ccode{a->inmap['T'] = 3} in the standard DNA alphabet, for example, and the call \ccode{esl\_alphabet\_SetSynonym(a, 'U', 'T')} sets \ccode{a->inmap['U'] = a->inmap['T']}. The elements in input maps are of type \ccode{unsigned char}. Legal values are 0..127 (values that can be cast to the \ccode{unsigned char} codes in a digitized sequence) and two additional flags with negative values, \ccode{eslILLEGAL\_CHAR} (255) and \ccode{eslIGNORED\_CHAR} (254). \subsection{Unusual or modified residues} In addition to the canonical 4 or 20 residues and their ambiguity codes, there are many unusual and/or modified residues. For instance, there are many posttranscriptional or posttranslational modifications on residues in RNAs and proteins. Some databases try to capture this information in a single-letter alphabetic code, such as the Sprinzl transfer RNA database \cite{Sprinzl98}. Additionally, and perhaps more importantly, proteins are known to contain at least two additional genetically encoded amino acids, selenocysteine and pyrrolysine. Selenocysteine is represented by a \ccode{U} according to the IUPAC standard, and pyrrolysine is represented by a \ccode{O} in the RESID database at EBI. Unusual one-letter residue codes pose a tradeoff issue for sequence analysis applications. On the one hand, an application should recognize symbols for unusual or modified residues, and be able to represent them both internally and in any sequence output. For example, no application should read an input selenocysteine residue (\ccode{U}) and output it as a cysteine (\ccode{C}) -- this changes the original sequence and causes data corruption.\footnote{However, at least one the main public protein databases (UniProt) has already chosen to replace all selenocysteines with \ccode{C} and all pyrrolysines with \ccode{K}, for fear of breaking legacy sequence analysis software. So, this data corruption is already a fact of life.} On the other hand, most sequence analysis applications would not want to take the trouble to define a canonical alphabet larger than the usual 4 or 20 residues, and then have to parameterize that alphabet, just to be able to handle a few rare residues. (Pyrrolysine, for example, has only been found in a handful of proteins in a few Archaea.) It is useful to be able to deal with probability parameters and scores only for the canonical alphabet. However (on yet another hand!) in some cases one \emph{would} want to write a specialized application that parameterizes unusual residues as part of its canonical alphabet -- for instance, an application for analyzing posttranscriptional tRNA modifications, for example. Therefore, Easel must not force an input selenocysteine or pyrrolysine (or any other unusual residue) to be recoded as an arbitrary symbol (such as cysteine or lysine). That is, unusual symbols cannot be treated as equivalences, but must be allowed to be part of the internal alphabet. However, Easel \emph{can} allow unusual symbols to be treated as noncanonical, and \emph{score} them as some other arbitrary residue, as a reasonable approximation. Thus for most purposes, unusual symbols are best handled as a special kind of degeneracy, with a one-to-one degeneracy map from the unusual symbol to the ``closest'' canonical residue. Therefore, the default amino acid alphabet accepts selenocysteine (\ccode{U}) and pyrrolysine symbols (\ccode{O}) and represents them in the internal alphabet, and maps them as ``degeneracies'' onto cysteine (\ccode{C}) and lysine (\ccode{K}), respectively. When that behavior is not suitable, an application can also define any custom alphabet it chooses, as described below. \subsection{Creating a custom alphabet} Figure~\ref{fig:alphabet_example2} shows an example of creating a customized 22-letter amino acid alphabet that includes the \ccode{U} selenocysteine code and the \ccode{O} pyrrolysine code. \begin{figure} \input{cexcerpts/alphabet_example2} \caption{An example of creating a custom alphabet.} \label{fig:alphabet_example2} \end{figure} \subsection{Scoring degenerate residues} To score a degenerate residue code $x$, Easel provides two strategies. One set of functions assigns an average score: \[ S(x) = \frac{\sum_{y \in D(x)} S(y) } { |D(x)| }, \] where $D(x)$ is the set of residues $y$ represented by degeneracy code $x$ (for example, $D(\mbox{R}) = \{ \mbox{A,G} \}$), $| D(x) |$ is the number of residues that the degeneracy code includes, and $S(y)$ is the score of a base residue $y$. Because scores $S(y)$ are commonly kept as integers, floats, or doubles, depending on the application, three functions are provided that differ only in the storage type of the scores: \ccode{esl\_abc\_IAvgScore(a,x,sc)}, \ccode{esl\_abc\_FAvgScore(a,x,sc)}, and \ccode{esl\_abc\_DAvgScore(a,x,sc)} calculate and return the average score of residue \ccode{x} in alphabet \ccode{a} given a base score vector \ccode{sc[0]..sc[K-1]} for integers, floats, and doubles, respectively. A second set of functions assigns an expected score, weighted by an expected occurrence probability $p_y$ of the residues $y$ (often the random background frequencies): \[ S(x) = \frac{\sum_{y \in D(x)} p_y S(y) } { \sum_{y \in D(x)} p_y }, \] These three functions are \ccode{esl\_abc\_IExpectScore(a,x,sc,p)}, \ccode{esl\_abc\_FExpectScore(a,x,sc,p)}, and \ccode{esl\_abc\_DExpectScore(a,x,sc,p)}. For the integer and float versions, the probability vector is in floats; for the double version, the probability vector is in doubles. For efficiency reasons, an application might choose to preculate scores for all possible degenerate codes it might see. HMMER, for example, turns probability vectors of length \ccode{K} into score residues of length \ccode{Kp}. An application might also choose to score residues on-the-fly, using score vectors of length \ccode{K}. Each input residue \ccode{x} would then have to be tested to see if it is degenerate, before scoring it appropriately. \ccode{esl\_abc\_IsBasic(a, x)} returns \ccode{TRUE} if \ccode{x} is in the basic set of \ccode{K} residues in alphabet \ccode{a}, and \ccode{FALSE} otherwise. Similarly, \ccode{esl\_abc\_IsGap(a,x)} tests whether $x$ is a gap, and \ccode{esl\_abc\_IsDegenerate(a,x)} tests whether $x$ is a degenerate residue. hmmer-3.1b2/easel/esl_msafile_a2m.h0000664361611702660230000000222212473612607016555 0ustar wheelerteddy/* i/o of multiple sequence alignment files in dotless UCSC A2M format */ #ifndef eslMSAFILE_A2M_INCLUDED #define eslMSAFILE_A2M_INCLUDED #include "esl_msa.h" #include "esl_msafile.h" extern int esl_msafile_a2m_SetInmap (ESLX_MSAFILE *afp); extern int esl_msafile_a2m_GuessAlphabet(ESLX_MSAFILE *afp, int *ret_type); extern int esl_msafile_a2m_Read (ESLX_MSAFILE *afp, ESL_MSA **ret_msa); extern int esl_msafile_a2m_Write (FILE *fp, const ESL_MSA *msa); #endif /* eslMSAFILE_A2M_INCLUDED */ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msafile_a2m.h 708 2011-07-20 12:49:10Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msafile_a2m.h $ *****************************************************************/ hmmer-3.1b2/easel/esl_mixgev.c0000664361611702660230000005574212473612606015706 0ustar wheelerteddy/* esl_mixgev.c * Statistical routines for mixtures of generalized extreme value * distributions. * * xref SRE:STL9/139 */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_vectorops.h" #include "esl_stats.h" #include "esl_gev.h" #include "esl_mixgev.h" #ifdef eslAUGMENT_RANDOM #include "esl_dirichlet.h" /* for uniform sampling of a probability vector */ #include "esl_random.h" #endif #ifdef eslAUGMENT_MINIMIZER #include "esl_minimizer.h" #endif /**************************************************************************** * Routines for the ESL_MIXGEV object ****************************************************************************/ /* Function: esl_mixgev_Create() * * Purpose: Creates an object to hold parameters for a -component * mixture of generalized extreme value distributions. * * Parameters in the object are initialized ($q_k = * \frac{1}{K}$, $\mu_k = 0$, $\lambda_k = 1$, $\alpha_k = * 0$), but the caller will want to set these according to * its own purposes. * * After an object is created, the caller can constrain any * of the components to be a Gumbel (that is, constrain * $\alpha_k = 0$ by calling . * * Args: K - number of components in the mixture * * Returns: ptr to newly allocated/initialized object. * * Throws: on allocation failure. */ ESL_MIXGEV * esl_mixgev_Create(int K) { ESL_MIXGEV *mg = NULL; int k; int status; ESL_ALLOC(mg, sizeof(ESL_MIXGEV)); mg->q = mg->mu = mg->lambda = mg->alpha = mg->wrk = NULL; mg->isgumbel = NULL; mg->K = K; ESL_ALLOC(mg->q, sizeof(double) * K); ESL_ALLOC(mg->mu, sizeof(double) * K); ESL_ALLOC(mg->lambda, sizeof(double) * K); ESL_ALLOC(mg->alpha, sizeof(double) * K); ESL_ALLOC(mg->wrk, sizeof(double) * K); ESL_ALLOC(mg->isgumbel, sizeof(int) * K); for (k = 0; k < K; k++) { mg->q[k] = 1. / (double) K; mg->mu[k] = 0.; mg->lambda[k] = 1.; mg->alpha[k] = 0.; mg->isgumbel[k] = FALSE; } return mg; ERROR: esl_mixgev_Destroy(mg); return NULL; } /* Function: esl_mixgev_Destroy() * * Purpose: Deallocates the mixture GEV parameter object . * * Args: mg - ptr to the object to be deallocated. * * Returns: (void) */ void esl_mixgev_Destroy(ESL_MIXGEV *mg) { if (mg == NULL) return; if (mg->q != NULL) free(mg->q); if (mg->mu != NULL) free(mg->mu); if (mg->lambda != NULL) free(mg->lambda); if (mg->alpha != NULL) free(mg->alpha); if (mg->wrk != NULL) free(mg->wrk); if (mg->isgumbel != NULL) free(mg->isgumbel); free(mg); } /* Function: esl_mixgev_Copy() * * Purpose: Makes a copy of the mixture GEV parameter object * in . Caller must have already allocated to have * (at least) the same number of components as . * * Args: src - object to be copied * dest - allocated object to copy into * * Returns: on success. * * Throws: if isn't allocated with enough * components to hold a copy of . */ int esl_mixgev_Copy(ESL_MIXGEV *src, ESL_MIXGEV *dest) { int k; if (dest->K < src->K) ESL_EXCEPTION(eslEINCOMPAT, "mixture GEV too small to copy into"); for (k = 0; k < src->K; k++) { dest->q[k] = src->q[k]; dest->mu[k] = src->mu[k]; dest->lambda[k] = src->lambda[k]; dest->alpha[k] = src->alpha[k]; dest->isgumbel[k] = src->isgumbel[k]; } dest->K = src->K; return eslOK; } /* Function: esl_mixgev_ForceGumbel() * * Purpose: Constrain component of the mixture GEV * to be a Gumbel (that is, constrain $\alpha=0$ for * that component. This constraint will be obeyed by * any subsequent calls to parameter fitting routines. * * Normally would be called just after creating the * object, as part of its configuration before trying to * fit some observed data to a mixture GEV. * * Args: mg - mixture GEV object being configured * which - which component to constrain to a Gumbel * * Returns: on success. */ int esl_mixgev_ForceGumbel(ESL_MIXGEV *mg, int which) { mg->isgumbel[which] = TRUE; return eslOK; } /*----------------- end ESL_MIXGEV object maintenance ----------------------*/ /**************************************************************************** * Routines for evaluating densities and distributions ****************************************************************************/ /* Function: esl_mixgev_pdf() * * Purpose: Returns the probability density function $P(X=x)$ for * quantile , given mixture GEV parameters . */ double esl_mixgev_pdf(double x, ESL_MIXGEV *mg) { double pdf = 0.; int k; for (k = 0; k < mg->K; k++) pdf += mg->q[k] * esl_gev_pdf(x, mg->mu[k], mg->lambda[k], mg->alpha[k]); return pdf; } /* Function: esl_mixgev_logpdf() * * Purpose: Returns the log of the PDF ($\log P(X=x)$) for quantile , * given mixture GEV parameters . */ double esl_mixgev_logpdf(double x, ESL_MIXGEV *mg) { int k; for (k = 0; k < mg->K; k++) if (mg->q[k] == 0.0) mg->wrk[k] = -eslINFINITY; else mg->wrk[k] = log(mg->q[k]) + esl_gev_logpdf(x, mg->mu[k], mg->lambda[k], mg->alpha[k]); return esl_vec_DLogSum(mg->wrk, mg->K); } /* Function: esl_mixgev_cdf() * * Purpose: Returns the cumulative distribution function $P(X \leq x)$ * for quantile , given mixture GEV parameters . */ double esl_mixgev_cdf(double x, ESL_MIXGEV *mg) { double cdf = 0.; int k; for (k = 0; k < mg->K; k++) cdf += mg->q[k] * esl_gev_cdf(x, mg->mu[k], mg->lambda[k], mg->alpha[k]); return cdf; } /* Function: esl_mixgev_logcdf() * * Purpose: Returns the log of the CDF $\log P(X \leq x)$ * for quantile , given mixture GEV parameters . */ double esl_mixgev_logcdf(double x, ESL_MIXGEV *mg) { int k; for (k = 0; k < mg->K; k++) if (mg->q[k] == 0.0) mg->wrk[k] = -eslINFINITY; else mg->wrk[k] = log(mg->q[k]) + esl_gev_logcdf(x, mg->mu[k], mg->lambda[k], mg->alpha[k]); return esl_vec_DLogSum(mg->wrk, mg->K); } /* Function: esl_mixgev_surv() * * Purpose: Returns the survivor function $P(X > x)$ (1-CDF) * for quantile , given mixture GEV parameters . */ double esl_mixgev_surv(double x, ESL_MIXGEV *mg) { double srv = 0.; int k; for (k = 0; k < mg->K; k++) srv += mg->q[k] * esl_gev_surv(x, mg->mu[k], mg->lambda[k], mg->alpha[k]); return srv; } /* Function: esl_mixgev_logsurv() * * Purpose: Returns the log survivor function $\log P(X > x)$ (log(1-CDF)) * for quantile , given mixture GEV parameters . */ double esl_mixgev_logsurv(double x, ESL_MIXGEV *mg) { int k; for (k = 0; k < mg->K; k++) { mg->wrk[k] = log(mg->q[k]); mg->wrk[k] += esl_gev_logsurv(x, mg->mu[k], mg->lambda[k], mg->alpha[k]); } return esl_vec_DLogSum(mg->wrk, mg->K); } /* Function: esl_mixgev_invcdf() * * Purpose: Calculates the inverse CDF for a mixture GEV , * returning the quantile at which the CDF is

, * where $0 < p < 1$. * * The inverse CDF of a mixture model has no analytical * expression as far as I'm aware. The calculation here is * a brute force bisection search in using the CDF * function. It will suffice for a small number of calls * (for plotting applications, for example), but beware, it is not * efficient. */ double esl_mixgev_invcdf(double p, ESL_MIXGEV *mg) { double x1, x2, xm; /* low, high guesses at x */ double f1, f2, fm; double tol = 1e-6; x2 = esl_vec_DMin(mg->mu, mg->K); x1 = x2 - 1.; do { /* bracket, left side */ x1 = x1 + 2.*(x2-x1); f1 = esl_mixgev_cdf(x1, mg); } while (f1 > p); do { /* bracket, right side */ x2 = x2 + 2.*(x2-x1); f2 = esl_mixgev_cdf(x2, mg); } while (f2 < p); do { /* bisection */ xm = (x1+x2) / 2.; fm = esl_mixgev_cdf(xm, mg); if (fm > p) x2 = xm; else if (fm < p) x1 = xm; else return xm; /* unlikely case of fm==p */ } while ( (x2-x1)/(x1+x2+1e-9) > tol); xm = (x1+x2) / 2.; return xm; } /*-------------------- end densities & distributions ------------------------*/ /**************************************************************************** * Generic API routines: for general interface w/ histogram module ****************************************************************************/ /* Function: esl_mixgev_generic_pdf() * * Purpose: Generic-API wrapper around , taking * a void ptr to a parameter structure. */ double esl_mixgev_generic_pdf(double x, void *params) { ESL_MIXGEV *mg = (ESL_MIXGEV *) params; return esl_mixgev_pdf(x, mg); } /* Function: esl_mixgev_generic_cdf() * * Purpose: Generic-API wrapper around , taking * a void ptr to a parameter structure. */ double esl_mixgev_generic_cdf(double x, void *params) { ESL_MIXGEV *mg = (ESL_MIXGEV *) params; return esl_mixgev_cdf(x, mg); } /* Function: esl_mixgev_generic_surv() * * Purpose: Generic-API wrapper around , taking * a void ptr to a parameter structure. */ double esl_mixgev_generic_surv(double x, void *params) { ESL_MIXGEV *mg = (ESL_MIXGEV *) params; return esl_mixgev_surv(x, mg); } /* Function: esl_mixgev_generic_invcdf() * * Purpose: Generic-API wrapper around , taking * a void ptr to a parameter structure. */ double esl_mixgev_generic_invcdf(double p, void *params) { ESL_MIXGEV *mg = (ESL_MIXGEV *) params; return esl_mixgev_invcdf(p, mg); } /*------------------------ end generic API ---------------------------------*/ /**************************************************************************** * Routines for dumping plots to xmgrace XY format ****************************************************************************/ /* Function: esl_mixgev_Plot() * * Purpose: Plot some function (for instance, ) * for mixture GEV parameters , for a range of * quantiles x from to in steps of ; * output to an open stream in xmgrace XY input format. * * Returns: on success. * * Throws: on any system write error. */ int esl_mixgev_Plot(FILE *fp, ESL_MIXGEV *mg, double (*func)(double x, ESL_MIXGEV *mg), double xmin, double xmax, double xstep) { double x; for (x = xmin; x <= xmax; x += xstep) if (fprintf(fp, "%f\t%g\n", x, (*func)(x, mg)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "mixgev plot write failed"); if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "mixgev plot write failed"); return eslOK; } /*-------------------- end plot dumping routines ---------------------------*/ /**************************************************************************** * Routines for sampling (requires augmentation w/ random module) ****************************************************************************/ #ifdef eslAUGMENT_RANDOM /* Function: esl_mixgev_Sample() * * Purpose: Sample a random variate x from a mixture GEV , * given random number source . */ double esl_mixgev_Sample(ESL_RANDOMNESS *r, ESL_MIXGEV *mg) { int k; k = esl_rnd_DChoose(r, mg->q, mg->K); return esl_gev_Sample(r, mg->mu[k], mg->lambda[k], mg->alpha[k]); } #endif /*eslAUGMENT_RANDOM*/ /*--------------------------- end sampling ---------------------------------*/ /**************************************************************************** * Maximum likelihood fitting to mixture GEV distributions ****************************************************************************/ #ifdef eslAUGMENT_MINIMIZER struct mixgev_data { double *x; int n; double *wrk; /* workspace vector [0..K-1]*/ ESL_MIXGEV *mg; }; /* Given mixture GEV parameters in ; * do appropriate c.o.v.'s to unconstrained real parameters * and fill in the packed parameter vector

. * * First K-1 are Q_1..Q_K-1 mixture coefficient parameters; Q_0 implicitly 0; * cov is q_k = e^{Q_k} / \sum_j e^{Q_j}, * so Q_k = log(q_k) - log(q_0). * Then K components: mu, lambda, optional alpha; * mu, alpha are already unconstrained real; * lambda cov is lambda = e^w, w = log(lambda). */ static void mixgev_pack_paramvector(double *p, int np, ESL_MIXGEV *mg) { int i; /* counter in parameter vector p */ int k; /* counter in mixture components */ double z; /* tmp variable */ /* mixture coefficients */ z = log(mg->q[0]); i = 0; for (k = 1; k < mg->K; k++) p[i++] = log(mg->q[k]) - z; /* gev parameters */ for (k = 0; k < mg->K; k++) { p[i++] = mg->mu[k]; p[i++] = log(mg->lambda[k]); if (! mg->isgumbel[k]) p[i++] = mg->alpha[k]; } /* assert(i==np) in debugging, if you want */ } /* Same as above but in reverse: given parameter vector

, * do appropriate c.o.v. back to desired parameter space, and * fill in the mixture GEV structure . */ static void mixgev_unpack_paramvector(double *p, int np, ESL_MIXGEV *mg) { int i; /* counter in parameter vector p */ int k; /* counter in mixture components */ double z; /* tmp variable */ /* Fetch the params in their c.o.v. space first */ i = 0; mg->q[0] = 0; /* implicitly */ for (k = 1; k < mg->K; k++) mg->q[k] = p[i++]; for (k = 0; k < mg->K; k++) { mg->mu[k] = p[i++]; mg->lambda[k] = p[i++]; if (!mg->isgumbel[k]) mg->alpha[k] = p[i++]; else mg->alpha[k] = 0.; } assert(i==np); /* Convert mix coefficients back to probabilities; * their c.o.v. is q_k = e^{Q_k} / \sum_k e^{Q_k} * which rearranges to exp(Q_k - log[\sum_k e^Q_k]), * and we have the DLogSum() function to compute the log sum. */ z = esl_vec_DLogSum(mg->q, mg->K); for (k = 0; k < mg->K; k++) mg->q[k] = exp(mg->q[k] - z); /* lambda c.o.v. is \lambda = e^w */ for (k = 0; k < mg->K; k++) mg->lambda[k] = exp(mg->lambda[k]); } static double mixgev_complete_func(double *p, int np, void *dptr) { struct mixgev_data *data = (struct mixgev_data *) dptr; ESL_MIXGEV *mg = data->mg; int i; double logL; /* Use the current parameter vector (in its unconstrained * real c.o.v. space) to deduce what the current mixture GEV * parameters are: */ mixgev_unpack_paramvector(p, np, mg); /* Calculate the log likelihood: */ logL = 0; for (i = 0; i < data->n; i++) logL += esl_mixgev_logpdf(data->x[i], mg); /* return the NLL */ return -logL; } /* Function: esl_mixgev_FitGuess() * * Purpose: Make initial randomized guesses at the parameters * of mixture GEV , using random number generator * and observed data consisting of values * . This guess is a suitable starting * point for a parameter optimization routine, such * as . * * Specifically, we estimate one 'central' guess * for a single Gumbel fit to the data, using the * method of moments. Then we add $\pm 10\%$ to that 'central' * $\mu$ and $\lambda$ to get each component * $\mu_i$ and $\lambda_i$. The $\alpha_i$ parameters * are generated by sampling uniformly from $-0.1..0.1$. * Mixture coefficients $q_i$ are sampled uniformly. * * Args: r - randomness source * x - vector of observed data values to fit, 0..n-1 * n - number of values in * mg - mixture GEV to put guessed params into * * Returns: on success. */ int esl_mixgev_FitGuess(ESL_RANDOMNESS *r, double *x, int n, ESL_MIXGEV *mg) { double mean, variance; double mu, lambda; int k; esl_stats_DMean(x, n, &mean, &variance); lambda = eslCONST_PI / sqrt(6.*variance); mu = mean - 0.57722/lambda; esl_dirichlet_DSampleUniform(r, mg->K, mg->q); for (k = 0; k < mg->K; k++) { mg->mu[k] = mu + 0.2 * mu * (esl_random(r) - 0.5); mg->lambda[k] = lambda + 0.2 * lambda * (esl_random(r) - 0.5); if (mg->isgumbel[k]) mg->alpha[k] = 0.; else mg->alpha[k] = 0.2 * (esl_random(r) - 0.5); } return eslOK; } /* Function: esl_mixgev_FitComplete() * * Purpose: Given observed data values , and * an initial guess at a mixture GEV fit to those data * , use conjugate gradient descent to perform * a locally optimal maximum likelihood mixture * GEV parameter fit to the data. * * To obtain a reasonable initial guess for , * see . * * Args: x - observed data, . * n - number of samples in * mg - mixture GEV to estimate, w/ params set to * an initial guess. * * Returns: on success, and contains local * ML estimate for mixture GEV parameters. * * Throws: on allocation error, and is unchanged * from its initial state. */ int esl_mixgev_FitComplete(double *x, int n, ESL_MIXGEV *mg) { struct mixgev_data data; int status; double *p = NULL; double *u = NULL; double *wrk = NULL; double tol; int np; double fx; int k; int i; tol = 1e-6; /* Determine number of free parameters and allocate */ np = mg->K-1; /* K-1 mix coefficients free */ for (k = 0; k < mg->K; k++) np += (mg->isgumbel[k])? 2 : 3; ESL_ALLOC(p, sizeof(double) * np); ESL_ALLOC(u, sizeof(double) * np); ESL_ALLOC(wrk, sizeof(double) * np * 4); /* Copy shared info into the "data" structure */ data.x = x; data.n = n; data.wrk = wrk; data.mg = mg; /* From mg, create the parameter vector. */ mixgev_pack_paramvector(p, np, mg); /* Define the step size vector u. */ i = 0; for (k = 1; k < mg->K; k++) u[i++] = 1.0; for (k = 0; k < mg->K; k++) { u[i++] = 1.0; u[i++] = 1.0; if (! mg->isgumbel[k]) u[i++] = 0.02; } ESL_DASSERT1( (np == i) ); /* Feed it all to the mighty optimizer. */ status = esl_min_ConjugateGradientDescent(p, u, np, &mixgev_complete_func, NULL, (void *) (&data), tol, wrk, &fx); if (status != eslOK) goto ERROR; /* Convert the final parameter vector back to a mixture GEV */ mixgev_unpack_paramvector(p, np, mg); free(p); free(u); free(wrk); return eslOK; ERROR: if (p != NULL) free(p); if (u != NULL) free(u); if (wrk != NULL) free(wrk); return status; } #endif /*eslAUGMENT_MINIMIZER*/ /*--------------------------- end fitting ----------------------------------*/ /**************************************************************************** * Example main() ****************************************************************************/ #ifdef eslMIXGEV_EXAMPLE /*::cexcerpt::mixgev_example::begin::*/ /* compile: gcc -g -Wall -I. -L. -o example -DeslMIXGEV_EXAMPLE esl_mixgev.c -leasel -lm * run: ./example */ #include #include #include "easel.h" #include "esl_mixgev.h" #include "esl_random.h" int main(int argc, char **argv) { FILE *fp; ESL_RANDOMNESS *r; /* source of random numbers */ ESL_MIXGEV *mg; /* mixture GEV to sample from */ ESL_MIXGEV *emg; /* estimated mixture GEV */ double *x; /* sampled dataset */ int n = 100000; /* number of samples */ int i; int k; double nll; double min, max; r = esl_randomness_Create(42); mg = esl_mixgev_Create(2); mg->q[0] = 0.85; mg->q[1] = 0.15; mg->mu[0] = -2.72; mg->mu[1] = -2.0; mg->lambda[0] = 2.5; mg->lambda[1] = 1.0; mg->alpha[0] = 0.; mg->alpha[1] = 0.09; nll = 0.; min = 99999; max = -99999; x = malloc(sizeof(double) * n); for (i = 0; i < n; i++) { x[i] = esl_mixgev_Sample(r, mg); nll -= esl_mixgev_logpdf(x[i], mg); if (x[i] > max) max = x[i]; if (x[i] < min) min = x[i]; } printf("NLL of known mixGEV: %g\n", nll); /* Dump the raw data samples to an R file. */ fp = fopen("data.out", "w"); fprintf(fp, " val\n"); for (i = 0; i < n; i++) fprintf(fp, "%d %f\n", i+1, x[i]); fclose(fp); emg = esl_mixgev_Create(2); esl_mixgev_FitGuess(r, x, n, emg); /* esl_mixgev_Copy(mg, emg); */ esl_mixgev_ForceGumbel(emg, 0); esl_mixgev_FitComplete(x, n, emg); printf("Component q mu lambda alpha\n"); for (k=0; k < 2; k++) printf("%d\t%7.4f\t%7.2f\t%7.4f\t%7.4f\n", k, emg->q[k], emg->mu[k], emg->lambda[k], emg->alpha[k]); nll = 0.; for (i = 0; i < n; i++) nll -= esl_mixgev_logpdf(x[i], emg); printf("NLL of fitted mixGEV: %g\n", nll); /* Dump some R commands for showing these distributions */ printf("library(ismev)\n"); printf("library(evd)\n"); printf("d <- read.table(\"data.out\")$val\n"); printf("plot(density(d,bw=0.2), log=\"y\")\n"); printf("min <- %f\n", min); printf("max <- %f\n", max); printf("xax <- seq(min-2, max+5, by=0.1)\n"); printf("cc <- xax - xax\n"); printf("zc <- xax - xax\n"); for (k = 0; k < mg->K; k++) { printf("c%d <- %f * dgev(xax, %f, %f, %f)\n", k, mg->q[k], mg->mu[k], 1./mg->lambda[k], mg->alpha[k]); printf("cc <- cc + c%d\n", k); printf("lines(xax, c%d, col=\"blue\")\n", k); } for (k = 0; k < emg->K; k++) { printf("z%d <- %f * dgev(xax, %f, %f, %f)\n", k, emg->q[k], emg->mu[k], 1./emg->lambda[k], emg->alpha[k]); printf("zc <- zc + z%d\n", k); printf("lines(xax, z%d, col=\"blue\")\n", k); } printf("lines(xax, cc, col=\"green\")\n"); printf("lines(xax, zc, col=\"red\")\n"); esl_mixgev_Destroy(mg); esl_mixgev_Destroy(emg); esl_randomness_Destroy(r); free(x); return 0; } /*::cexcerpt::mixgev_example::end::*/ #endif /*eslMIXGEV_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_mixgev.c 727 2011-10-24 17:17:32Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_mixgev.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_regexp.c0000664361611702660230000015153412473612607015676 0ustar wheelerteddy/* regexp.c * Regular expression matching on strings. * ***************************************************************** * This is a wrapper around a modified version of Henry Spencer's * regex library. Spencer's copyright notice appears below, after my * wrappers, prefacing the section that includes his code. I believe * you can obtain the original code from: * ftp://ftp.zoo.toronto.edu/pub/bookregex.tar.Z * Thanks, Henry! * * My modifications are generally limited to converting error handling * to Easel conventions, internalizing Spencer's code as all * static to this module, and some cosmetic changes to names * for namespace protection reasons. I am responsible for any * errors that I've introduced into Spencer's code. * ***************************************************************** * nomenclature note: * A "machine" is a persistent ESL_REGEXP object, which contains * an NDFA for a pattern, but the NDFA may change throughout * the life of the machine. * * An "NDFA" (nondeterministic finite automaton) refers to * an internal esl__regexp structure, which is Spencer's * compiled pattern-program. We try to compile an NDFA once per * pattern. * * A "pattern" refers to actual regular expression we're trying * to match, represented as an ASCII string. * ***************************************************************** * error handling note: (xref STL9/p2) * We expect that the input pattern may be provided by the user, * and so a very common error will be an invalid regular expression * syntax. There are 9 types of syntax errors caught by the * regcomp() code and its friends. All of them generate an * eslESYNTAX error, with a terse message. Under the default * error handler this message will be printed and the code will halt. * If you do not want invalid input regex syntax to halt your application, * you can install a custom error handler that can handle * the eslESYNTAX errors as you wish. ***************************************************************** * TODO: * - would be great to have an esl_regexp_Sample(), which sampled * strings from a regexp. We could use this in unit tests that * need to stress edge cases (generating strings with unusual * but legal characters, for example). We would probably want * to implement some artificial limits on repeat operators, * to keep length of sampled seq reasonable. */ #include "esl_config.h" #include #include #include #include #include "easel.h" #include "esl_regexp.h" /* Forward declarations of Spencer's API as static, internalized in my module. */ static esl__regexp *regcomp(const char *exp); static int regexec(register esl__regexp *prog, const char *str); /* his regsub() is present but unused, ifdef'd out to silence compilers; uncomment to reactivate */ /* static int regsub(const esl__regexp *rp, const char *source, char *dest); */ #ifdef DEBUG static void regdump(esl__regexp *r); #endif /***************************************************************** * Easel's regexp API *****************************************************************/ /* Function: esl_regexp_Create() * Incept: SRE, Fri Jan 7 10:55:48 2005 [St. Louis] * * Purpose: Creates a new machine. * * Throws: NULL on allocation failure. * * Xref: STL9/p1 */ ESL_REGEXP * esl_regexp_Create(void) { int status; ESL_REGEXP *machine = NULL; ESL_ALLOC(machine, sizeof(ESL_REGEXP)); machine->ndfa = NULL; return machine; ERROR: return NULL; } /* Function: esl_regexp_Destroy() * Incept: SRE, Fri Jan 7 11:12:20 2005 [St. Louis] * * Purpose: Destroy a machine created by . * * Returns: void. */ void esl_regexp_Destroy(ESL_REGEXP *machine) { /* Spencer's clever alloc for the NDFA allows us to free it w/ free() */ if (machine->ndfa != NULL) free(machine->ndfa); free(machine); return; } /* Function: esl_regexp_Match() * Incept: SRE, Fri Jan 7 11:24:02 2005 [St. Louis] * * Purpose: Determine if string matches the regular expression , * using a . * * Returns: if matches ; if it doesn't. * * Throws: if the couldn't be compiled for any reason. * Throws or if something * went wrong in the search phase. * (At the failure point, an error was generated with an appropriate * code and message; an code, for example, may have * been generated to indicate that the is an invalid syntax.) */ int esl_regexp_Match(ESL_REGEXP *machine, const char *pattern, const char *s) { if (machine->ndfa != NULL) { free(machine->ndfa); machine->ndfa = NULL; } if ((machine->ndfa = regcomp(pattern)) == NULL) return eslEINVAL; return regexec(machine->ndfa, s); } /* Function: esl_regexp_Compile() * Incept: SRE, Sat Jan 8 09:56:21 2005 [St. Louis] * * Purpose: Precompile an NDFA for and store it in * a , in preparation for using the same * pattern for multiple searches (see * ). * * Returns: on success. * * Throws: if compilation fails. */ int esl_regexp_Compile(ESL_REGEXP *machine, const char *pattern) { if (machine->ndfa != NULL) { free(machine->ndfa); machine->ndfa = NULL; } if ((machine->ndfa = regcomp(pattern)) == NULL) return eslEINVAL; return eslOK; } /* Function: esl_regexp_MultipleMatches() * Incept: SRE, Sat Jan 8 10:01:27 2005 [St. Louis] * * Purpose: Given a that contains a precompiled NDFA (see * , search it against a . * pointed to by . When a match is found, returns * , and resets to point at the next character * after the matched substring. (This may be * trailing NUL byte if the matched substring is at the * very end of the string.) If no match is found in the * string, returns . * * Because is changed, the caller should * initialize and use a temporary pointer into the string * to be searched, not the caller's own pointer to the * target string. * * Example: * s = string; * while (esl_regexp_MultipleMatches(m, &s) == eslOK) * // process one match at a time//; * * Throws: or if something goes awry internally * during the search. */ int esl_regexp_MultipleMatches(ESL_REGEXP *machine, char **sptr) { int status; status = regexec(machine->ndfa, *sptr); if (status == eslOK) *sptr = machine->ndfa->endp[0]; /* endp points exactly where we want. */ else *sptr = NULL; return status; } /* Function: esl_regexp_SubmatchDup() * Incept: SRE, Sat Jan 8 11:12:29 2005 [St. Louis] * * Purpose: Given a that has just got done matching * some pattern against a target string, * retrieve a substring that matched the pattern * or one of the ()'d parts of it. indicates * which submatch to retrieve. 0 is the complete * match; 1..15 (assuming the default =16) * are up to 15 ()'d submatches in the pattern. * * Returns: ptr to an allocated, NUL-terminated string containing * the matched part of the string. Caller is responsible * for free'ing this string. * * Throws: NULL on any internal failure. */ char * esl_regexp_SubmatchDup(ESL_REGEXP *machine, int elem) { char *s; int len; int status; if (elem >= ESL_REGEXP_NSUB || elem < 0) ESL_XEXCEPTION(eslEINVAL, "bad elem arg"); if (machine->ndfa->startp[elem] == NULL || machine->ndfa->endp[elem] == NULL) ESL_XEXCEPTION(eslEINVAL, "no such submatch recorded"); len = machine->ndfa->endp[elem] - machine->ndfa->startp[elem]; ESL_ALLOC(s, sizeof(char) * (len+1)); strncpy(s, machine->ndfa->startp[elem], len); s[len] = '\0'; return s; ERROR: return NULL; } /* Function: esl_regexp_SubmatchCopy() * Incept: SRE, Sat Jan 8 11:12:29 2005 [St. Louis] * * Purpose: Given a that has just got done matching some * pattern against a target string, copy a substring that * matched the pattern or one of the ()'d parts of it into * a provided with chars of space allocated. * indicates which submatch to retrieve. 0 is * the complete match; 1..15 (assuming the default * =16) are up to 15 ()'d submatches in * the pattern. * * Returns: on success, and buffer contains the NUL-terminated * substring. * * Throws: on any of several possible internal failures, * including the being too small to contain the * substring. */ int esl_regexp_SubmatchCopy(ESL_REGEXP *machine, int elem, char *buffer, int nc) { int len; int status; if (elem >= ESL_REGEXP_NSUB || elem < 0) ESL_XEXCEPTION(eslEINVAL, "bad elem arg"); if (machine->ndfa->startp[elem] == NULL || machine->ndfa->endp[elem] == NULL) ESL_XEXCEPTION(eslEINVAL, "no such submatch recorded"); len = machine->ndfa->endp[elem] - machine->ndfa->startp[elem]; if (len >= nc) ESL_XEXCEPTION(eslEINVAL, "buffer too small to hold submatch"); strncpy(buffer, machine->ndfa->startp[elem], len); buffer[len] = '\0'; return eslOK; ERROR: buffer[0] = '\0'; return status; } /* Function: esl_regexp_SubmatchCoords() * Incept: SRE, Sat Jan 8 11:46:11 2005 [St. Louis] * * Purpose: Given a that has just got done matching some * pattern against a target string, find the start/end * coordinates of the substring that matched the * pattern or one of the ()'d parts of it, relative to * a pointer on the target string. Return the result * through the ptrs and . * indicates which submatch to retrieve. 0 is the * complete match; 1..15 (assuming the default * = 16) are up to 15 ()'d submatches in * the pattern. * * The coordinates given in zero-offset convention relative * to an . will usually be a pointer to * the complete target string, in which case the coords * would be [0..L-1]. However, one can extract coords * relative to any other in the target string, * even including an downstream of the match, so * relative coords can be negative, ranging from -(L-1) to * (L-1). * * Coords will be correct even if the match was * found by a call against * a temp pointer into the target string. * * Returns: on success, and and * are set to the start/end coordinates of the submatch. * * Throws: on internal failures. * The function is incapable of detecting a case in * where is not in the same string that the * matched like it should be. If a caller does * this, the function may appear to succeed, but start and end * coords will be garbage. */ int esl_regexp_SubmatchCoords(ESL_REGEXP *machine, char *origin, int elem, int *ret_start, int *ret_end) { int status; if (elem >= ESL_REGEXP_NSUB || elem < 0) ESL_XEXCEPTION(eslEINVAL, "bad elem arg"); if (machine->ndfa->startp[elem] == NULL || machine->ndfa->endp[elem] == NULL) ESL_XEXCEPTION(eslEINVAL, "no such submatch recorded"); *ret_start = machine->ndfa->startp[elem] - origin; *ret_end = machine->ndfa->endp[elem] - origin - 1; return eslOK; ERROR: *ret_start = 0; *ret_end = 0; return status; } /* Function: esl_regexp_ParseCoordString() * * Purpose: Given a string of the format required for a * range (.., e.g. 10..23 or 39-91) parse out * the start and end, and return them within the variables * and . * * Returns: on success, and and * are set to the start/end coordinates of the parse. * * Throws: if a regexp match is not made, and * if the start or end values are not parsed. */ int esl_regexp_ParseCoordString(const char *cstring, uint32_t *ret_start, uint32_t *ret_end) { ESL_REGEXP *re = esl_regexp_Create(); char tok1[32]; char tok2[32]; if (esl_regexp_Match(re, "^(\\d+)\\D+(\\d*)$", cstring) != eslOK) return eslESYNTAX; if (esl_regexp_SubmatchCopy(re, 1, tok1, 32) != eslOK) return eslFAIL; if (esl_regexp_SubmatchCopy(re, 2, tok2, 32) != eslOK) return eslFAIL; *ret_start = atol(tok1); *ret_end = (tok2[0] == '\0') ? 0 : atol(tok2); /* '0' is invalid start, check for that */ if(*ret_start == 0) esl_fatal("-c takes arg of positive integer subseq coords .., read 0 as "); esl_regexp_Destroy(re); return eslOK; } /*=================== end of the exposed API ==========================================*/ /************************************************************************************** * This next big chunk of code is: * Copyright (c) 1986, 1993, 1995 by University of Toronto. * Written by Henry Spencer. Not derived from licensed software. * * Permission is granted to anyone to use this software for any * purpose on any computer system, and to redistribute it in any way, * subject to the following restrictions: * * 1. The author is not responsible for the consequences of use of * this software, no matter how awful, even if they arise * from defects in it. * * 2. The origin of this software must not be misrepresented, either * by explicit claim or by omission. * * 3. Altered versions must be plainly marked as such, and must not * be misrepresented (by explicit claim or omission) as being * the original software. * * 4. This notice must not be removed or altered. */ /* * regcomp and regexec -- regsub and regerror are elsewhere */ /* * The first byte of the regexp internal "program" is actually this magic * number; the start node begins in the second byte. */ #define REGMAGIC 0234 /* * The "internal use only" fields in regexp.h are present to pass info from * compile to execute that permits the execute phase to run lots faster on * simple cases. They are: * * regstart char that must begin a match; '\0' if none obvious * reganch is the match anchored (at beginning-of-line only)? * regmust string (pointer into program) that match must include, or NULL * regmlen length of regmust string * * Regstart and reganch permit very fast decisions on suitable starting points * for a match, cutting down the work a lot. Regmust permits fast rejection * of lines that cannot possibly match. The regmust tests are costly enough * that regcomp() supplies a regmust only if the r.e. contains something * potentially expensive (at present, the only such thing detected is * or + * at the start of the r.e., which can involve a lot of backup). Regmlen is * supplied because the test in regexec() needs it and regcomp() is computing * it anyway. */ /* * Structure for regexp "program". This is essentially a linear encoding * of a nondeterministic finite-state machine (aka syntax charts or * "railroad normal form" in parsing technology). Each node is an opcode * plus a "next" pointer, possibly plus an operand. "Next" pointers of * all nodes except BRANCH implement concatenation; a "next" pointer with * a BRANCH on both ends of it is connecting two alternatives. (Here we * have one of the subtle syntax dependencies: an individual BRANCH (as * opposed to a collection of them) is never concatenated with anything * because of operator precedence.) The operand of some types of node is * a literal string; for others, it is a node leading into a sub-FSM. In * particular, the operand of a BRANCH node is the first node of the branch. * (NB this is *not* a tree structure: the tail of the branch connects * to the thing following the set of BRANCHes.) The opcodes are: */ /* definition number opnd? meaning */ #define END 0 /* no End of program. */ #define BOL 1 /* no Match beginning of line. */ #define EOL 2 /* no Match end of line. */ #define ANY 3 /* no Match any character. */ #define ANYOF 4 /* str Match any of these. */ #define ANYBUT 5 /* str Match any but one of these. */ #define BRANCH 6 /* node Match this, or the next..\&. */ #define BACK 7 /* no "next" ptr points backward. */ #define EXACTLY 8 /* str Match this string. */ #define NOTHING 9 /* no Match empty string. */ #define STAR 10 /* node Match this 0 or more times. */ #define PLUS 11 /* node Match this 1 or more times. */ #define OPEN 20 /* no Sub-RE starts here. */ /* OPEN+1 is number 1, etc. */ #define CLOSE 30 /* no Analogous to OPEN. */ /* * Opcode notes: * * BRANCH The set of branches constituting a single choice are hooked * together with their "next" pointers, since precedence prevents * anything being concatenated to any individual branch. The * "next" pointer of the last BRANCH in a choice points to the * thing following the whole choice. This is also where the * final "next" pointer of each individual branch points; each * branch starts with the operand node of a BRANCH node. * * BACK Normal "next" pointers all implicitly point forward; BACK * exists to make loop structures possible. * * STAR,PLUS '?', and complex '*' and '+', are implemented as circular * BRANCH structures using BACK. Simple cases (one character * per match) are implemented with STAR and PLUS for speed * and to minimize recursive plunges. * * OPEN,CLOSE ...are numbered at compile time. */ /* * A node is one char of opcode followed by two chars of "next" pointer. * "Next" pointers are stored as two 8-bit pieces, high order first. The * value is a positive offset from the opcode of the node containing it. * An operand, if any, simply follows the node. (Note that much of the * code generation knows about this implicit relationship.) * * Using two bytes for the "next" pointer is vast overkill for most things, * but allows patterns to get big without disasters. */ #define OP(p) (*(p)) #define NEXT(p) (((*((p)+1)&0177)<<8) + (*((p)+2)&0377)) #define OPERAND(p) ((p) + 3) /* * Utility definitions. */ #define ISREPN(c) ((c) == '*' || (c) == '+' || (c) == '?') #define META "^$.[()|?+*\\" /* * Flags to be passed up and down. */ #define HASWIDTH 01 /* Known never to match null string. */ #define SIMPLE 02 /* Simple enough to be STAR/PLUS operand. */ #define SPSTART 04 /* Starts with * or +. */ #define WORST 0 /* Worst case. */ /* * Work-variable struct for regcomp(). */ struct comp { char *regparse; /* Input-scan pointer. */ int regnpar; /* () count. */ char *regcode; /* Code-emit pointer; ®dummy = don't. */ char regdummy[3]; /* NOTHING, 0 next ptr */ long regsize; /* Code size. */ }; #define EMITTING(cp) ((cp)->regcode != (cp)->regdummy) /* * Forward declarations for regcomp()'s friends. */ static char *reg(struct comp *cp, int paren, int *flagp); static char *regbranch(struct comp *cp, int *flagp); static char *regpiece(struct comp *cp, int *flagp); static char *regatom(struct comp *cp, int *flagp); static char *regnode(register struct comp *cp, char op); static char *regnext(char *node); static void regc(struct comp *cp, char c); static void reginsert(struct comp *cp, char op, char *opnd); static void regtail(struct comp *cp, char *p, char *val); static void regoptail(struct comp *cp, char *p, char *val); static char *regescape(struct comp *cp, char c); /* - regcomp - compile a regular expression into internal code * * We can't allocate space until we know how big the compiled form will be, * but we can't compile it (and thus know how big it is) until we've got a * place to put the code. So we cheat: we compile it twice, once with code * generation turned off and size counting turned on, and once "for real". * This also means that we don't allocate space until we are sure that the * thing really will compile successfully, and we never have to move the * code and thus invalidate pointers into it. (Note that it has to be in * one piece because free() must be able to free it all.) * * Beware that the optimization-preparation code in here knows about some * of the structure of the compiled regexp. * * Returns valid ptr on success. * Throws NULL on internal errors, or if is invalid. * * Regular expressions with invalid syntax will fail to compile somewhere, * generating an eslESYNTAX error with a terse but useful message. * */ static esl__regexp * regcomp(const char *exp) { int status; register esl__regexp *r = NULL; register char *scan; int flags; struct comp co; if (exp == NULL) ESL_XEXCEPTION(eslEINVAL, "NULL argument to regcomp"); /* First pass: determine size, legality. */ co.regparse = (char *)exp; co.regnpar = 1; co.regsize = 0L; co.regdummy[0] = NOTHING; co.regdummy[1] = co.regdummy[2] = 0; co.regcode = co.regdummy; regc(&co, REGMAGIC); if (reg(&co, 0, &flags) == NULL) goto ERROR; /* Small enough for pointer-storage convention? */ if (co.regsize >= 0x7fffL) /* Probably could be 0xffffL. */ ESL_XEXCEPTION(eslEMEM, "regexp too big"); /* Allocate space. */ ESL_ALLOC(r, sizeof(esl__regexp) + (size_t)co.regsize); /* Second pass: emit code. */ co.regparse = (char *)exp; co.regnpar = 1; co.regcode = r->program; regc(&co, REGMAGIC); if (reg(&co, 0, &flags) == NULL) goto ERROR; /* Dig out information for optimizations. */ r->regstart = '\0'; /* Worst-case defaults. */ r->reganch = 0; r->regmust = NULL; r->regmlen = 0; scan = r->program+1; /* First BRANCH. */ if (OP(regnext(scan)) == END) { /* Only one top-level choice. */ scan = OPERAND(scan); /* Starting-point info. */ if (OP(scan) == EXACTLY) r->regstart = *OPERAND(scan); else if (OP(scan) == BOL) r->reganch = 1; /* * If there's something expensive in the r.e., find the * longest literal string that must appear and make it the * regmust. Resolve ties in favor of later strings, since * the regstart check works with the beginning of the r.e. * and avoiding duplication strengthens checking. Not a * strong reason, but sufficient in the absence of others. */ if (flags&SPSTART) { register char *longest = NULL; register size_t len = 0; for (; scan != NULL; scan = regnext(scan)) if (OP(scan) == EXACTLY && strlen(OPERAND(scan)) >= len) { longest = OPERAND(scan); len = strlen(OPERAND(scan)); } r->regmust = longest; r->regmlen = (int)len; } } return(r); ERROR: if (r != NULL) free(r); return NULL; } /* - reg - regular expression, i.e. main body or parenthesized thing * * Caller must absorb opening parenthesis. * * Combining parenthesis handling with the base level of regular expression * is a trifle forced, but the need to tie the tails of the branches to what * follows makes it hard to avoid. */ static char * reg(register struct comp *cp, int paren, int *flagp) { int status; register char *ret = NULL; /* SRE: NULL init added to silence gcc */ register char *br; register char *ender; register int parno = 0; /* SRE: init added to silence gcc */ int flags; *flagp = HASWIDTH; /* Tentatively. */ if (paren) { /* Make an OPEN node. */ if (cp->regnpar >= ESL_REGEXP_NSUB) ESL_XEXCEPTION(eslESYNTAX, "too many ()"); parno = cp->regnpar; cp->regnpar++; ret = regnode(cp, OPEN+parno); } /* Pick up the branches, linking them together. */ br = regbranch(cp, &flags); if (br == NULL) return(NULL); if (paren) regtail(cp, ret, br); /* OPEN -> first. */ else ret = br; *flagp &= ~(~flags&HASWIDTH); /* Clear bit if bit 0. */ *flagp |= flags&SPSTART; while (*cp->regparse == '|') { cp->regparse++; br = regbranch(cp, &flags); if (br == NULL) return(NULL); regtail(cp, ret, br); /* BRANCH -> BRANCH. */ *flagp &= ~(~flags&HASWIDTH); *flagp |= flags&SPSTART; } /* Make a closing node, and hook it on the end. */ ender = regnode(cp, (paren) ? CLOSE+parno : END); regtail(cp, ret, ender); /* Hook the tails of the branches to the closing node. */ for (br = ret; br != NULL; br = regnext(br)) regoptail(cp, br, ender); /* Check for proper termination. */ if (paren && *cp->regparse++ != ')') { ESL_XEXCEPTION(eslESYNTAX, "unterminated ()"); } else if (!paren && *cp->regparse != '\0') { if (*cp->regparse == ')') { ESL_XEXCEPTION(eslESYNTAX, "unmatched ()"); } else ESL_XEXCEPTION(eslECORRUPT, "internal error: junk on end"); /* NOTREACHED */ } return(ret); ERROR: return NULL; } /* - regbranch - one alternative of an | operator * * Implements the concatenation operator. */ static char * regbranch(register struct comp *cp, int *flagp) { register char *ret; register char *chain; register char *latest; int flags; register int c; *flagp = WORST; /* Tentatively. */ ret = regnode(cp, BRANCH); chain = NULL; while ((c = *cp->regparse) != '\0' && c != '|' && c != ')') { latest = regpiece(cp, &flags); if (latest == NULL) return(NULL); *flagp |= flags&HASWIDTH; if (chain == NULL) /* First piece. */ *flagp |= flags&SPSTART; else regtail(cp, chain, latest); chain = latest; } if (chain == NULL) /* Loop ran zero times. */ (void) regnode(cp, NOTHING); return(ret); } /* - regpiece - something followed by possible [*+?] * * Note that the branching code sequences used for ? and the general cases * of * and + are somewhat optimized: they use the same NOTHING node as * both the endmarker for their branch list and the body of the last branch. * It might seem that this node could be dispensed with entirely, but the * endmarker role is not redundant. * * Returns valid ptr on success. * Throws NULL on errors. */ static char * regpiece(register struct comp *cp, int *flagp) { int status; register char *ret; register char op; register char *next; int flags; ret = regatom(cp, &flags); if (ret == NULL) return(NULL); op = *cp->regparse; if (!ISREPN(op)) { *flagp = flags; return(ret); } if (!(flags&HASWIDTH) && op != '?') ESL_XEXCEPTION(eslESYNTAX, "*+ operand could be empty"); switch (op) { case '*': *flagp = WORST|SPSTART; break; case '+': *flagp = WORST|SPSTART|HASWIDTH; break; case '?': *flagp = WORST; break; } if (op == '*' && (flags&SIMPLE)) reginsert(cp, STAR, ret); else if (op == '*') { /* Emit x* as (x&|), where & means "self". */ reginsert(cp, BRANCH, ret); /* Either x */ regoptail(cp, ret, regnode(cp, BACK)); /* and loop */ regoptail(cp, ret, ret); /* back */ regtail(cp, ret, regnode(cp, BRANCH)); /* or */ regtail(cp, ret, regnode(cp, NOTHING)); /* null. */ } else if (op == '+' && (flags&SIMPLE)) reginsert(cp, PLUS, ret); else if (op == '+') { /* Emit x+ as x(&|), where & means "self". */ next = regnode(cp, BRANCH); /* Either */ regtail(cp, ret, next); regtail(cp, regnode(cp, BACK), ret); /* loop back */ regtail(cp, next, regnode(cp, BRANCH)); /* or */ regtail(cp, ret, regnode(cp, NOTHING)); /* null. */ } else if (op == '?') { /* Emit x? as (x|) */ reginsert(cp, BRANCH, ret); /* Either x */ regtail(cp, ret, regnode(cp, BRANCH)); /* or */ next = regnode(cp, NOTHING); /* null. */ regtail(cp, ret, next); regoptail(cp, ret, next); } cp->regparse++; if (ISREPN(*cp->regparse)) ESL_XEXCEPTION(eslESYNTAX, "nested *?+"); return(ret); ERROR: return NULL; } /* - regatom - the lowest level * * Optimization: gobbles an entire sequence of ordinary characters so that * it can turn them into a single node, which is smaller to store and * faster to run. Backslashed characters are exceptions, each becoming a * separate node; the code is simpler that way and it's not worth fixing. * * Returns valid ptr on success. * Throws NULL on an error. */ static char * regatom(register struct comp *cp, int *flagp) { register char *ret; int flags; int status; *flagp = WORST; /* Tentatively. */ switch (*cp->regparse++) { case '^': ret = regnode(cp, BOL); break; case '$': ret = regnode(cp, EOL); break; case '.': ret = regnode(cp, ANY); *flagp |= HASWIDTH|SIMPLE; break; case '[': { register int range; register int rangeend; register int c; if (*cp->regparse == '^') { /* Complement of range. */ ret = regnode(cp, ANYBUT); cp->regparse++; } else ret = regnode(cp, ANYOF); if ((c = *cp->regparse) == ']' || c == '-') { regc(cp, c); cp->regparse++; } while ((c = *cp->regparse++) != '\0' && c != ']') { /* SRE: inserted code for \t, \n, \r, \f here: * c is the \, and cp->regparse is an alphanumeric. */ if (c == '\\') { c = *cp->regparse++; switch (c) { case 'f': regc(cp, '\f'); break; case 'n': regc(cp, '\n'); break; case 'r': regc(cp, '\r'); break; case 't': regc(cp, '\t'); break; case '\\': regc(cp, '\\'); break; default: ESL_XEXCEPTION(eslESYNTAX, "Invalid \\ escape inside range operator"); break; } }/*end SRE*/ else if (c != '-') regc(cp, c); else if ((c = *cp->regparse) == ']' || c == '\0') regc(cp, '-'); else { range = (unsigned char)*(cp->regparse-2); rangeend = (unsigned char)c; if (range > rangeend) ESL_XEXCEPTION(eslESYNTAX, "invalid [] range"); for (range++; range <= rangeend; range++) regc(cp, range); cp->regparse++; } } regc(cp, '\0'); if (c != ']') ESL_XEXCEPTION(eslESYNTAX, "unmatched []"); *flagp |= HASWIDTH|SIMPLE; break; } case '(': ret = reg(cp, 1, &flags); if (ret == NULL) return NULL; *flagp |= flags&(HASWIDTH|SPSTART); break; case '\0': case '|': case ')': /* supposed to be caught earlier */ ESL_XEXCEPTION(eslECORRUPT, "internal error: \\0|) unexpected"); /*NOTREACHED*/ break; case '?': case '+': case '*': ESL_XEXCEPTION(eslESYNTAX, "?+* follows nothing"); /*NOTREACHED*/ break; case '\\': if (*cp->regparse == '\0') ESL_XEXCEPTION(eslESYNTAX, "trailing \\"); if (! isalnum(*cp->regparse)) { ret = regnode(cp, EXACTLY); /* SRE: original Spencer code */ regc(cp, *cp->regparse++); regc(cp, '\0'); } else { /* SRE: my dropped in escape-code handling */ ret = regescape(cp, *cp->regparse); } *flagp |= HASWIDTH|SIMPLE; break; default: { register size_t len; register char ender; cp->regparse--; len = strcspn(cp->regparse, META); if (len == 0) ESL_XEXCEPTION(eslECORRUPT, "strcspn 0"); ender = *(cp->regparse+len); if (len > 1 && ISREPN(ender)) len--; /* Back off clear of ?+* operand. */ *flagp |= HASWIDTH; if (len == 1) *flagp |= SIMPLE; ret = regnode(cp, EXACTLY); for (; len > 0; len--) regc(cp, *cp->regparse++); regc(cp, '\0'); break; } } return(ret); ERROR: return NULL; } /* - regnode - emit a node */ static char * /* Location. */ regnode(register struct comp *cp, char op) { register char *const ret = cp->regcode; register char *ptr; if (!EMITTING(cp)) { cp->regsize += 3; return(ret); } ptr = ret; *ptr++ = op; *ptr++ = '\0'; /* Null next pointer. */ *ptr++ = '\0'; cp->regcode = ptr; return(ret); } /* - regc - emit (if appropriate) a byte of code */ static void regc(register struct comp *cp, char b) { if (EMITTING(cp)) *cp->regcode++ = b; else cp->regsize++; } /* - reginsert - insert an operator in front of already-emitted operand * * Means relocating the operand. */ static void reginsert(register struct comp *cp, char op, char *opnd) { register char *place; if (!EMITTING(cp)) { cp->regsize += 3; return; } (void) memmove(opnd+3, opnd, (size_t)(cp->regcode - opnd)); cp->regcode += 3; place = opnd; /* Op node, where operand used to be. */ *place++ = op; *place++ = '\0'; *place++ = '\0'; return; } /* - regtail - set the next-pointer at the end of a node chain */ static void regtail(register struct comp *cp, char *p, char *val) { register char *scan; register char *temp; register int offset; if (!EMITTING(cp)) return; /* Find last node. */ for (scan = p; (temp = regnext(scan)) != NULL; scan = temp) continue; offset = (OP(scan) == BACK) ? scan - val : val - scan; *(scan+1) = (offset>>8)&0177; *(scan+2) = offset&0377; return; } /* - regoptail - regtail on operand of first argument; nop if operandless */ static void regoptail(register struct comp *cp, char *p, char *val) { /* "Operandless" and "op != BRANCH" are synonymous in practice. */ if (!EMITTING(cp) || OP(p) != BRANCH) return; regtail(cp, OPERAND(p), val); return; } /* * regexec and friends */ /* * Work-variable struct for regexec(). */ struct exec { char *reginput; /* String-input pointer. */ char *regbol; /* Beginning of input, for ^ check. */ char **regstartp; /* Pointer to startp array. */ char **regendp; /* Ditto for endp. */ }; /* * Forwards. */ static int regtry(struct exec *ep, esl__regexp *rp, char *string); static int regmatch(struct exec *ep, char *prog); static int regrepeat(struct exec *ep, char *node, size_t *ret_count); #ifdef DEBUG static int regnarrate = 0; static char *regprop(char *op); #endif /* - regexec - match a regexp against a string * * Returns on match; for no match. * Throws , on internal errors. */ static int regexec(register esl__regexp *prog, const char *str) { register char *string = (char *)str; /* avert const poisoning */ register char *s; struct exec ex; int code; /* Be paranoid. */ if (prog == NULL || string == NULL) ESL_EXCEPTION(eslEINCONCEIVABLE, "NULL argument to regexec"); /* Check validity of program. */ if ((unsigned char)*prog->program != REGMAGIC) ESL_EXCEPTION(eslECORRUPT, "corrupted regexp"); /* If there is a "must appear" string, look for it. */ if (prog->regmust != NULL && strstr(string, prog->regmust) == NULL) return eslEOD; /* Mark beginning of line for ^ . */ ex.regbol = string; ex.regstartp = prog->startp; ex.regendp = prog->endp; /* Simplest case: anchored match need be tried only once. */ if (prog->reganch) return(regtry(&ex, prog, string)); /* Messy cases: unanchored match. */ if (prog->regstart != '\0') { /* We know what char it must start with. */ for (s = string; s != NULL; s = strchr(s+1, prog->regstart)) if ((code = regtry(&ex, prog, s)) != eslEOD) return code; /* match, or throwing an error up */ return eslEOD; /* no match in string */ } else { /* We don't -- general case. */ for (s = string; *s != '\0'; s++) if ((code = regtry(&ex, prog, s)) != eslEOD) return code; /* match, or throw an error up */ return eslEOD; /* reached end of string, no match */ } /* NOTREACHED */ } /* - regtry - try match at specific point * * Returns on success, failure. * Throws , on internal errors. */ static int regtry(register struct exec *ep, esl__regexp *prog, char *string) { register int i; register char **stp; register char **enp; int code; ep->reginput = string; stp = prog->startp; enp = prog->endp; for (i = ESL_REGEXP_NSUB; i > 0; i--) { *stp++ = NULL; *enp++ = NULL; } if ((code = regmatch(ep, prog->program + 1)) == eslOK) { prog->startp[0] = string; prog->endp[0] = ep->reginput; return eslOK; } else return code; /* eslEOD for normal non-match; or other thrown codes */ } /* - regmatch - main matching routine * * Conceptually the strategy is simple: check to see whether the current * node matches, call self recursively to see whether the rest matches, * and then act accordingly. In practice we make some effort to avoid * recursion, in particular by going through "ordinary" nodes (that don't * need to know whether the rest of the match failed) by a loop instead of * by recursion. * * Returns on success, on failure. * Throws , on internal errors. */ static int regmatch(register struct exec *ep, char *prog) { register char *scan; /* Current node. */ char *next; /* Next node. */ int code; /* error code */ #ifdef DEBUG if (prog != NULL && regnarrate) fprintf(stderr, "%s(\n", regprop(prog)); #endif for (scan = prog; scan != NULL; scan = next) { #ifdef DEBUG if (regnarrate) fprintf(stderr, "%s...\n", regprop(scan)); #endif next = regnext(scan); switch (OP(scan)) { case BOL: if (ep->reginput != ep->regbol) return eslEOD; break; case EOL: if (*ep->reginput != '\0') return eslEOD; break; case ANY: if (*ep->reginput == '\0') return eslEOD; ep->reginput++; break; case EXACTLY: { register size_t len; register char *const opnd = OPERAND(scan); /* Inline the first character, for speed. */ if (*opnd != *ep->reginput) return eslEOD; len = strlen(opnd); if (len > 1 && strncmp(opnd, ep->reginput, len) != 0) return eslEOD; ep->reginput += len; break; } case ANYOF: if (*ep->reginput == '\0' || strchr(OPERAND(scan), *ep->reginput) == NULL) return eslEOD; ep->reginput++; break; case ANYBUT: if (*ep->reginput == '\0' || strchr(OPERAND(scan), *ep->reginput) != NULL) return eslEOD; ep->reginput++; break; case NOTHING: break; case BACK: break; case OPEN+1: case OPEN+2: case OPEN+3: case OPEN+4: case OPEN+5: case OPEN+6: case OPEN+7: case OPEN+8: case OPEN+9: { register const int no = OP(scan) - OPEN; register char *const input = ep->reginput; if ((code = regmatch(ep, next)) == eslOK) { /* * Don't set startp if some later * invocation of the same parentheses * already has. */ if (ep->regstartp[no] == NULL) ep->regstartp[no] = input; return eslOK; } else return code; /* usually eslEOD, except on error */ /*NOTREACHED*/ break; } case CLOSE+1: case CLOSE+2: case CLOSE+3: case CLOSE+4: case CLOSE+5: case CLOSE+6: case CLOSE+7: case CLOSE+8: case CLOSE+9: { register const int no = OP(scan) - CLOSE; register char *const input = ep->reginput; if ((code = regmatch(ep, next)) == eslOK) { /* * Don't set endp if some later * invocation of the same parentheses * already has. */ if (ep->regendp[no] == NULL) ep->regendp[no] = input; return eslOK; } else return code; /* usually eslEOD, except on error */ /*NOTREACHED*/ break; } case BRANCH: { register char *const save = ep->reginput; if (OP(next) != BRANCH) /* No choice. */ next = OPERAND(scan); /* Avoid recursion. */ else { while (OP(scan) == BRANCH) { if ((code = regmatch(ep, OPERAND(scan))) != eslEOD) return code; /* usually eslOK, but also a thrown error*/ ep->reginput = save; scan = regnext(scan); } return eslEOD; /*NOTREACHED*/ } break; } case STAR: case PLUS: { register const char nextch = (OP(next) == EXACTLY) ? *OPERAND(next) : '\0'; register char *const save = ep->reginput; register const size_t min = (OP(scan) == STAR) ? 0 : 1; size_t no; if (regrepeat(ep, OPERAND(scan), &no) != eslOK) return eslEINCONCEIVABLE; for (++no; no > min; no--) { ep->reginput = save + no - 1; /* If it could work, try it. */ if (nextch == '\0' || *ep->reginput == nextch) if (regmatch(ep, next) == eslOK) return eslOK; } return eslEOD; /*NOTREACHED*/ break; } case END: return eslOK; /* Success! */ break; default: ESL_EXCEPTION(eslECORRUPT, "regexp corruption"); /*NOTREACHED*/ break; } } /* * We get here only if there's trouble -- normally "case END" is * the terminating point. */ ESL_EXCEPTION(eslECORRUPT, "corrupted pointers"); } /* - regrepeat - report how many times something simple would match, * via * Returns on success. * Throws - if node isn't a repeating one. */ static int regrepeat(register struct exec *ep, char *node, size_t *ret_count) { register size_t count; register char *scan; register char ch; switch (OP(node)) { case ANY: *ret_count = strlen(ep->reginput); return eslOK; case EXACTLY: ch = *OPERAND(node); count = 0; for (scan = ep->reginput; *scan == ch; scan++) count++; *ret_count = count; return eslOK; /*NOTREACHED*/ break; case ANYOF: *ret_count = strspn(ep->reginput, OPERAND(node)); return eslOK; /*NOTREACHED*/ break; case ANYBUT: *ret_count = strcspn(ep->reginput, OPERAND(node)); return eslOK; /*NOTREACHED*/ break; default: /* Oh dear. Called inappropriately. */ ESL_EXCEPTION(eslEINCONCEIVABLE, "bad call of regrepeat"); /*NOTREACHED*/ break; } /* NOTREACHED */ return eslEINCONCEIVABLE; } /* - regnext - dig the "next" pointer out of a node */ static char * regnext(register char *p) { register const int offset = NEXT(p); if (offset == 0) return(NULL); return((OP(p) == BACK) ? p-offset : p+offset); } #ifdef DEBUG /* - regdump - dump a regexp onto stdout in vaguely comprehensible form */ static void regdump(esl__regexp *r) { register char *s; register char op = EXACTLY; /* Arbitrary non-END op. */ register char *next; s = r->program + 1; while (op != END) { /* While that wasn't END last time... */ op = OP(s); printf("%2d%s", s-r->program, regprop(s)); /* Where, what. */ next = regnext(s); if (next == NULL) /* Next ptr. */ printf("(0)"); else printf("(%d)", (s-r->program)+(next-s)); s += 3; if (op == ANYOF || op == ANYBUT || op == EXACTLY) { /* Literal string, where present. */ while (*s != '\0') { putchar(*s); s++; } s++; } putchar('\n'); } /* Header fields of interest. */ if (r->regstart != '\0') printf("start `%c' ", r->regstart); if (r->reganch) printf("anchored "); if (r->regmust != NULL) printf("must have \"%s\"", r->regmust); printf("\n"); } /* - regprop - printable representation of opcode */ static char * regprop(char *op) { register char *p; static char buf[50]; (void) strcpy(buf, ":"); switch (OP(op)) { case BOL: p = "BOL"; break; case EOL: p = "EOL"; break; case ANY: p = "ANY"; break; case ANYOF: p = "ANYOF"; break; case ANYBUT: p = "ANYBUT"; break; case BRANCH: p = "BRANCH"; break; case EXACTLY: p = "EXACTLY"; break; case NOTHING: p = "NOTHING"; break; case BACK: p = "BACK"; break; case END: p = "END"; break; case OPEN+1: case OPEN+2: case OPEN+3: case OPEN+4: case OPEN+5: case OPEN+6: case OPEN+7: case OPEN+8: case OPEN+9: sprintf(buf+strlen(buf), "OPEN%d", OP(op)-OPEN); p = NULL; break; case CLOSE+1: case CLOSE+2: case CLOSE+3: case CLOSE+4: case CLOSE+5: case CLOSE+6: case CLOSE+7: case CLOSE+8: case CLOSE+9: sprintf(buf+strlen(buf), "CLOSE%d", OP(op)-CLOSE); p = NULL; break; case STAR: p = "STAR"; break; case PLUS: p = "PLUS"; break; default: p = "[corrupted!]"; break; } if (p != NULL) (void) strcat(buf, p); return(buf); } #endif /*DEBUG*/ /* SRE: regsub() currently disabled; it is useful, but currently * unused. ifdef'ing it out silences zealous compiler warnings */ #if 0 /* - regsub - perform substitutions after a regexp match * * Returns on success. * Throws , on internal errors. */ static int regsub(const esl__regexp *rp, const char *source, char *dest) { register esl__regexp * const prog = (esl__regexp *)rp; register char *src = (char *)source; register char *dst = dest; register char c; register int no; register size_t len; if (prog == NULL || source == NULL || dest == NULL) ESL_EXCEPTION(eslEINCONCEIVABLE, "NULL parameter to regsub"); if ((unsigned char)*(prog->program) != REGMAGIC) ESL_EXCEPTION(eslECORRUPT, "damaged regexp"); while ((c = *src++) != '\0') { if (c == '&') no = 0; else if (c == '\\' && isdigit((int) (*src))) no = *src++ - '0'; else no = -1; if (no < 0) { /* Ordinary character. */ if (c == '\\' && (*src == '\\' || *src == '&')) c = *src++; *dst++ = c; } else if (prog->startp[no] != NULL && prog->endp[no] != NULL && prog->endp[no] > prog->startp[no]) { len = prog->endp[no] - prog->startp[no]; (void) strncpy(dst, prog->startp[no], len); dst += len; if (*(dst-1) == '\0') /* strncpy hit NUL. */ ESL_EXCEPTION(eslECORRUPT, "damaged match string"); } } *dst++ = '\0'; return eslOK; } #endif /* regsub() currently disabled */ /*============= end of Spencer's copyrighted regexp code =============================*/ /* Spencer's code originally handled a backslashed alphanum * like \t as t: in regatom(), the logic was: * ret = regnode(cp, EXACTLY); * regc(cp, *cp->regparse++); * regc(cp, '\0'); * Here we provide a drop-in replacement for these lines. * We create an EXACTLY node for escapes, and a ANYBUT * or ANYOF node for character classes. Then * instead of pushing the char *cp->regparse onto the machine * and incrementing cp->regparse, we interpret an alphanumeric * character as an escape code, push one or more appropriate * chars onto the machine, and advance regparse, * before returning control to Spencer. * * that is: cp->regparse points to c when we come in, * and it's an alphanumeric following a \. On return, * we've advanced cp->regparse by one. */ static char * regescape(struct comp *cp, char c) { int status; char *ret; char x; switch (c) { /* escapes: */ case 'f': ret = regnode(cp, EXACTLY); regc(cp, '\f'); break; case 'n': ret = regnode(cp, EXACTLY); regc(cp, '\n'); break; case 'r': ret = regnode(cp, EXACTLY); regc(cp, '\r'); break; case 't': ret = regnode(cp, EXACTLY); regc(cp, '\t'); break; /* character classes: */ case 'd': ret = regnode(cp, ANYOF); for (x = '0'; x <= '9'; x++) regc(cp, x); break; case 'D': ret = regnode(cp, ANYBUT); for (x = '0'; x <= '9'; x++) regc(cp, x); break; case 'w': ret = regnode(cp, ANYOF); for (x = '0'; x <= '9'; x++) regc(cp, x); for (x = 'a'; x <= 'z'; x++) regc(cp, x); for (x = 'A'; x <= 'Z'; x++) regc(cp, x); regc(cp, '_'); break; case 'W': ret = regnode(cp, ANYBUT); for (x = '0'; x <= '9'; x++) regc(cp, x); for (x = 'a'; x <= 'z'; x++) regc(cp, x); for (x = 'A'; x <= 'Z'; x++) regc(cp, x); regc(cp, '_'); break; case 's': ret = regnode(cp, ANYOF); regc(cp, ' '); regc(cp, '\t'); regc(cp, '\n'); regc(cp, '\r'); regc(cp, '\f'); break; case 'S': ret = regnode(cp, ANYBUT); regc(cp, ' '); regc(cp, '\t'); regc(cp, '\n'); regc(cp, '\r'); regc(cp, '\f'); break; default: ESL_XEXCEPTION(eslESYNTAX, "invalid \\ escape code"); /*NOTREACHED*/ break; } regc(cp, '\0'); cp->regparse++; return ret; ERROR: return NULL; } /***************************************************************** * 3 code examples, and the test driver *****************************************************************/ #ifdef eslREGEXP_EXAMPLE1 /* Single match example. * Find first match of in ; * print coords of complete match. * * gcc -g -Wall -o example1 -I. -DeslREGEXP_EXAMPLE1 regexp.c easel.c * ./example1 */ #include /* for printf() */ #include "easel.h" #include "esl_regexp.h" int main(int argc, char **argv) { ESL_REGEXP *m; char *pattern; char *string; int status; int i,j; pattern = argv[1]; string = argv[2]; m = esl_regexp_Create(); status = esl_regexp_Match(m, pattern, string); if (status == eslOK) { esl_regexp_SubmatchCoords(m, string, 0, &i, &j); printf("Pattern matches string at positions %d..%d\n", i+1, j+1); } else if (status == eslEOD) { printf("Pattern does not match in string.\n"); } esl_regexp_Destroy(m); exit(0); } #endif /* eslREGEXP_EXAMPLE1*/ #ifdef eslREGEXP_EXAMPLE2 /* Multiple match example. * Matches against multiple times, until * no more matches are found. * * gcc -g -Wall -o example2 -I. -DeslREGEXP_EXAMPLE2 regexp.c easel.c * ./example2 */ #include /* for printf() */ #include "easel.h" #include "esl_regexp.h" int main(int argc, char **argv) { char *pattern; char *string; ESL_REGEXP *m; int status; int i,j; char *s; char buf[256]; int n = 0; pattern = argv[1]; string = argv[2]; m = esl_regexp_Create(); esl_regexp_Compile(m, pattern); s = string; while ((status = esl_regexp_MultipleMatches(m, &s)) == eslOK) { n++; esl_regexp_SubmatchCoords(m, string, 0, &i, &j); esl_regexp_SubmatchCopy(m, 0, buf, 256); printf("Match #%d: positions %d..%d sequence: %s\n", n, i+1, j+1, buf); } esl_regexp_Destroy(m); exit(0); } #endif /* eslREGEXP_EXAMPLE2 */ #ifdef eslREGEXP_EXAMPLE3 /* Token parsing example. * Match a that contains ()-tokens * against ; parse out the submatches to each () token. * * gcc -g -Wall -o example3 -I. -DeslREGEXP_EXAMPLE3 regexp.c easel.c * ./example3 */ #include /* for atoi() */ #include /* for printf() */ #include "easel.h" #include "esl_regexp.h" int main(int argc, char **argv) { char *pattern; char *string; int ntok; ESL_REGEXP *m; int status; int i,j; char *token; int n; pattern = argv[1]; string = argv[2]; ntok = atoi(argv[3]); m = esl_regexp_Create(); status = esl_regexp_Match(m, pattern, string); if (status == eslOK) { for (n = 1; n <= ntok; n++) { esl_regexp_SubmatchCoords(m, string, n, &i, &j); token = esl_regexp_SubmatchDup(m, n); printf("token #%d: %d..%d, %s\n", n, i+1, j+1, token); free(token); } } esl_regexp_Destroy(m); exit(0); } #endif /*eslREGEXP_EXAMPLE3*/ #ifdef eslREGEXP_TESTDRIVE /* A test driver exercises every function in the * external API at least once, and tries to uncover * obvious problems. * * gcc -g -Wall -o test -I. -DeslREGEXP_TESTDRIVE regexp.c easel.c * ./test */ int main(void) { ESL_REGEXP *m; char *pattern; char *string; char *s; char buf[64]; int status; int i,j; int n; m = esl_regexp_Create(); string = "aaafoobarfoooobazfo..aaa"; /* simple matching test. */ pattern = "foo"; if (esl_regexp_Match(m, pattern, string) != eslOK) abort(); esl_regexp_SubmatchCoords(m, string, 0, &i, &j); if (i != 3 || j != 5) abort(); s = esl_regexp_SubmatchDup(m, 0); if (strcmp(s, "foo") != 0) abort(); free(s); esl_regexp_SubmatchCopy(m, 0, buf, 64); if (strcmp(buf, "foo") != 0) abort(); /* test all the metacharacters in one pattern; * and token 2 extraction grabs "oobaz" 13..17 */ pattern = "^aaaa*(foo|bar|baz)+([aboz]+).o\\.[^a-z]aaa?$"; if (esl_regexp_Match(m, pattern, string) != eslOK) abort(); esl_regexp_SubmatchCoords(m, string, 2, &i, &j); if (i != 12 || j != 16) abort(); s = esl_regexp_SubmatchDup(m, 2); if (strcmp(s, "oobaz") != 0) abort(); free(s); /* test multiple matching: * this pattern hits five times in the sequence, w/ * variations on foo. */ pattern = "bar|foo*|baz"; esl_regexp_Compile(m, pattern); s = string; n = 0; while ((status = esl_regexp_MultipleMatches(m, &s)) == eslOK) { n++; esl_regexp_SubmatchCopy(m, 0, buf, 64); if ((n == 1 && strcmp(buf, "foo") != 0) || (n == 2 && strcmp(buf, "bar") != 0) || (n == 3 && strcmp(buf, "foooo") != 0) || (n == 4 && strcmp(buf, "baz") != 0) || (n == 5 && strcmp(buf, "fo") != 0)) abort(); } if (n != 5) abort(); esl_regexp_Destroy(m); exit(0); } #endif /* test driver */ /*============= end of test driver and example code =============================*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_regexp.c 862 2013-04-12 18:56:42Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_regexp.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_fileparser.tex0000664361611702660230000001003012473612606017076 0ustar wheelerteddy The \eslmod{fileparser} module parses simple input text data files that consist of whitespace-delimited tokens. Data files can contain blank lines and comments. Comments are defined by a single character; for instance, a \verb+#+ character commonly means that everything following the \verb+#+ on the line is a comment. Two different styles of token input are supported. The simplest style reads tokens one at a time, regardless of what line they occur on, until the file ends. You can also read in a line-oriented way, in which you get one data line at a time, then read all the tokens on that line; this style lets you count how many tokens occur on a data line, which allows better checking of your input. The module implements one object, an \ccode{ESL\_FILEPARSER}, that holds the open input stream and the state of the parser. The functions in the API are summarized in Table~\ref{tbl:fileparser_api}. \begin{table}[hbp] \begin{center} {\scriptsize \begin{tabular}{|lp{3.5in}|}\hline \hyperlink{func:esl_fileparser_Open()}{\ccode{esl\_fileparser\_Open()}} & Open a file for parsing.\\ \hyperlink{func:esl_fileparser_Create()}{\ccode{esl\_fileparser\_Create()}} & Associate already open stream with a new parser.\\ \hyperlink{func:esl_fileparser_SetCommentChar()}{\ccode{esl\_fileparser\_SetCommentChar()}} & Set character that defines start of a comment.\\ \hyperlink{func:esl_fileparser_NextLine()}{\ccode{esl\_fileparser\_NextLine()}} & Advance the parser to next line containing a token.\\ \hyperlink{func:esl_fileparser_GetToken()}{\ccode{esl\_fileparser\_GetToken()}} & Get the next token in the file.\\ \hyperlink{func:esl_fileparser_GetTokenOnLine()}{\ccode{esl\_fileparser\_GetTokenOnLine()}} & Get the next token on the current line.\\ \hyperlink{func:esl_fileparser_Destroy()}{\ccode{esl\_fileparser\_Destroy()}} & Deallocate a parser that was \ccode{Create()}'d.\\ \hyperlink{func:esl_fileparser_Close()}{\ccode{esl\_fileparser\_Close()}} & Close a parser that was \ccode{Open()}'d.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{fileparser} API.} \label{tbl:fileparser_api} \end{table} \subsection{Example of using the fileparser API} An example that opens a file, reads all its tokens one at a time, and prints out token number, token length, and the token itself: \input{cexcerpts/fileparser_example} A single character can be defined to serve as a comment character (often \ccode{\#}), using the \ccode{esl\_fileparser\_SetCommentChar()} call. The parser will ignore the comment character, and the remainder of any line following a comment character. Each call to \ccode{esl\_fileparser\_GetToken()} retrieves one whitespace-delimited token from the input stream; the call returns \ccode{eslOK} if a token is parsed, and \ccode{eslEOF} when there are no more tokens in the file. Whitespace is defined as space, tab, newline, or carriage return (\verb+" \t\n\r"+). When the caller is done, the fileparser is closed with \ccode{esl\_fileparser\_Close()}. \subsection{A second example: line-oriented parsing} The \ccode{esl\_fileparser\_GetToken()} call provides a simple style of parsing a file: read one token at a time until the file ends, regardless of what line the tokens are on. However, you may want to know how many tokens are on a given data line, either because you know how many there should be (and you want to verify) or because you don't (and you need to allocate some variable-size data structure appropriately). The following is an example that reads a file line by line: \input{cexcerpts/fileparser_example2} The output from this example is, for each data line, the actual line number (starting from 1), the data line number (a count that excludes comments and blank lines), and the number of tokens on the line. Note the use of \ccode{efp->linenumber} to obtain the current line in the file. You can use this to produce informative error messages. If a token is not what you expected, you probably want to provide some diagnostic output to the user, and \ccode{efp->linenumber} lets you direct the user to the line that the failure occurred at. hmmer-3.1b2/easel/esl_stack.h0000664361611702660230000000573612473612607015520 0ustar wheelerteddy/* Pushdown stacks for integers, pointers, and characters. * * nstack - SRE 1 March 2000. [Seattle] * mstack - SRE, Fri Oct 10 10:18:16 2003 [St. Louis] * cstack - SRE, Mon Oct 13 12:57:56 2003 [St. Louis] * Incorp into easel - SRE, Sun Dec 26 07:39:02 2004 [Zaragoza] * * SVN $Id: esl_stack.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_stack.h $ */ #ifndef eslSTACK_INCLUDED #define eslSTACK_INCLUDED #include "esl_config.h" #define ESL_STACK_INITALLOC 128 /* initial allocation; realloc by doubling */ #ifdef HAVE_PTHREAD #include #endif #ifdef eslAUGMENT_RANDOM #include "esl_random.h" #endif /*eslAUGMENT_RANDOM*/ typedef struct esl_stack_s { int *idata; /* integer data stack */ void **pdata; /* pointer data stack */ char *cdata; /* character data stack */ int n; /* current (topmost) elem in data */ int nalloc; /* # of elems allocated right now */ #ifdef HAVE_PTHREAD int do_mutex; /* TRUE if we need to mutex-protect this stack */ int do_cond; /* TRUE if pushers want to notify poppers */ pthread_mutex_t *mutex; /* protect while operating on stacks */ pthread_cond_t *cond; /* for pushers to notify poppers */ #endif } ESL_STACK; extern ESL_STACK *esl_stack_ICreate(void); extern ESL_STACK *esl_stack_CCreate(void); extern ESL_STACK *esl_stack_PCreate(void); extern int esl_stack_Reuse(ESL_STACK *s); extern void esl_stack_Destroy(ESL_STACK *s); extern int esl_stack_IPush(ESL_STACK *ns, int x); extern int esl_stack_CPush(ESL_STACK *cs, char c); extern int esl_stack_PPush(ESL_STACK *ps, void *p); extern int esl_stack_IPop(ESL_STACK *ns, int *ret_x); extern int esl_stack_CPop(ESL_STACK *cs, char *ret_c); extern int esl_stack_PPop(ESL_STACK *ps, void **ret_p); extern int esl_stack_ObjectCount(ESL_STACK *s); extern char *esl_stack_Convert2String(ESL_STACK *cs); extern int esl_stack_DiscardTopN(ESL_STACK *s, int n); extern int esl_stack_DiscardSelected(ESL_STACK *s, int (*discard_func)(void *, void *), void *param); #ifdef eslAUGMENT_RANDOM extern int esl_stack_Shuffle(ESL_RANDOMNESS *r, ESL_STACK *s); #endif /*eslAUGMENT_RANDOM*/ #ifdef HAVE_PTHREAD extern int esl_stack_UseMutex (ESL_STACK *s); extern int esl_stack_UseCond (ESL_STACK *s); extern int esl_stack_ReleaseCond(ESL_STACK *s); #endif #endif /*eslSTACK_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_scorematrix.c0000664361611702660230000034350012473612607016740 0ustar wheelerteddy/* Routines for manipulating sequence alignment score matrices, * such as the BLOSUM and PAM matrices. * * Contents: * 1. The ESL_SCOREMATRIX object. * 2. Some classic score matrices. * 3. Deriving a score matrix probabilistically. * 4. Reading/writing matrices from/to files. * 5. Implicit probabilistic basis, I: given bg. * 6. Implicit probabilistic basis, II: bg unknown. [Yu/Altschul03,05] * 7. Experiment driver. * 8 Utility programs. * 9. Unit tests. * 10. Test driver. * 11. Example program. * 12. License and copyright. */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_composition.h" #include "esl_dmatrix.h" #include "esl_fileparser.h" #include "esl_rootfinder.h" #include "esl_ratematrix.h" #include "esl_scorematrix.h" #include "esl_vectorops.h" /***************************************************************** *# 1. The ESL_SCOREMATRIX object *****************************************************************/ /* Function: esl_scorematrix_Create() * Synopsis: Allocate and initialize an object. * * Purpose: Allocates a score matrix for alphabet , initializes * all scores to zero. * * Args: abc - pointer to digital alphabet * * Returns: a pointer to the new object. * * Throws: on allocation failure. */ ESL_SCOREMATRIX * esl_scorematrix_Create(const ESL_ALPHABET *abc) { ESL_SCOREMATRIX *S = NULL; int status; int i; ESL_ALLOC(S, sizeof(ESL_SCOREMATRIX)); S->s = NULL; S->K = abc->K; S->Kp = abc->Kp; S->isval = NULL; S->abc_r = abc; S->nc = 0; S->outorder = NULL; S->name = NULL; S->path = NULL; ESL_ALLOC(S->s, sizeof(int *) * abc->Kp); for (i = 0; i < abc->Kp; i++) S->s[i] = NULL; ESL_ALLOC(S->isval, sizeof(char) * abc->Kp); for (i = 0; i < abc->Kp; i++) S->isval[i] = FALSE; ESL_ALLOC(S->outorder, sizeof(char) * (abc->Kp+1)); S->outorder[0] = '\0'; /* init to empty string. */ ESL_ALLOC(S->s[0], sizeof(int) * abc->Kp * abc->Kp); for (i = 1; i < abc->Kp; i++) S->s[i] = S->s[0] + abc->Kp * i; for (i = 0; i < abc->Kp*abc->Kp; i++) S->s[0][i] = 0; return S; ERROR: esl_scorematrix_Destroy(S); return NULL; } /* Function: esl_scorematrix_Copy() * Synopsis: Copy matrix to . * * Purpose: Copy score matrix into . Caller * has allocated for the same alphabet as * . * * Returns: on success. * * Throws: if isn't allocated for * the same alphabet as . * on allocation error. */ int esl_scorematrix_Copy(const ESL_SCOREMATRIX *src, ESL_SCOREMATRIX *dest) { int i,j; int status; if (src->abc_r->type != dest->abc_r->type || src->K != dest->K || src->Kp != dest->Kp) ESL_EXCEPTION(eslEINCOMPAT, "source and dest score matrix types don't match"); for (i = 0; i < src->Kp; i++) for (j = 0; j < src->Kp; j++) dest->s[i][j] = src->s[i][j]; for (i = 0; i < src->Kp; i++) dest->isval[i] = src->isval[i]; dest->nc = src->nc; for (i = 0; i < src->nc; i++) dest->outorder[i] = src->outorder[i]; dest->outorder[dest->nc] = '\0'; if ((status = esl_strdup(src->name, -1, &(dest->name))) != eslOK) return status; if ((status = esl_strdup(src->path, -1, &(dest->path))) != eslOK) return status; return eslOK; } /* Function: esl_scorematrix_Clone() * Synopsis: Allocate a duplicate of a matrix. * * Purpose: Allocates a new matrix and makes it a duplicate * of . Return a pointer to the new matrix. * * Throws: on allocation failure. */ ESL_SCOREMATRIX * esl_scorematrix_Clone(const ESL_SCOREMATRIX *S) { ESL_SCOREMATRIX *dup = NULL; if ((dup = esl_scorematrix_Create(S->abc_r)) == NULL) return NULL; if (esl_scorematrix_Copy(S, dup) != eslOK) { esl_scorematrix_Destroy(dup); return NULL; } return dup; } /* Function: esl_scorematrix_Compare() * Synopsis: Compare two matrices for equality. * * Purpose: Compares two score matrices. Returns if they * are identical, if they differ. Every aspect * of the two matrices is compared. * * The annotation (name, filename path) are not * compared; we may want to compare an internally * generated scorematrix to one read from a file. */ int esl_scorematrix_Compare(const ESL_SCOREMATRIX *S1, const ESL_SCOREMATRIX *S2) { int a,b; if (strcmp(S1->outorder, S2->outorder) != 0) return eslFAIL; if (S1->nc != S2->nc) return eslFAIL; for (a = 0; a < S1->nc; a++) if (S1->isval[a] != S2->isval[a]) return eslFAIL; for (a = 0; a < S1->Kp; a++) for (b = 0; b < S1->Kp; b++) if (S1->s[a][b] != S2->s[a][b]) return eslFAIL; return eslOK; } /* Function: esl_scorematrix_CompareCanon() * Synopsis: Compares scores of canonical residues for equality. * * Purpose: Compares the scores of canonical residues in * two score matrices and for equality. * Returns if they are identical, * if they differ. Peripheral aspects of the scoring matrices * having to do with noncanonical residues, output * order, and suchlike are ignored. */ int esl_scorematrix_CompareCanon(const ESL_SCOREMATRIX *S1, const ESL_SCOREMATRIX *S2) { int a,b; for (a = 0; a < S1->K; a++) for (b = 0; b < S1->K; b++) if (S1->s[a][b] != S2->s[a][b]) return eslFAIL; return eslOK; } /* Function: esl_scorematrix_Max() * Synopsis: Returns maximum value in score matrix. * * Purpose: Returns the maximum value in score matrix . */ int esl_scorematrix_Max(const ESL_SCOREMATRIX *S) { int i,j; int max = S->s[0][0]; for (i = 0; i < S->K; i++) for (j = 0; j < S->K; j++) if (S->s[i][j] > max) max = S->s[i][j]; return max; } /* Function: esl_scorematrix_Min() * Synopsis: Returns minimum value in score matrix. * * Purpose: Returns the minimum value in score matrix . */ int esl_scorematrix_Min(const ESL_SCOREMATRIX *S) { int i,j; int min = S->s[0][0]; for (i = 0; i < S->K; i++) for (j = 0; j < S->K; j++) if (S->s[i][j] < min) min = S->s[i][j]; return min; } /* Function: esl_scorematrix_IsSymmetric() * Synopsis: Returns for symmetric matrix. * * Purpose: Returns if matrix is symmetric, * or if it's not. */ int esl_scorematrix_IsSymmetric(const ESL_SCOREMATRIX *S) { int i,j; for (i = 0; i < S->K; i++) for (j = i; j < S->K; j++) if (S->s[i][j] != S->s[j][i]) return FALSE; return TRUE; } /* Function: esl_scorematrix_ExpectedScore() * Synopsis: Calculates the expected score of a matrix. * * Purpose: Calculates the expected score of a matrix , * given background frequencies and ; * return it in <*ret_E>. * * The expected score is defined as * $\sum_{ab} f_a f_b \sigma_{ab}$. * * The expected score is in whatever units the score matrix * is in. If you know $\lambda$, you can convert it to * units of bits ($\log 2$) by multiplying it by $\lambda / * \log 2$. * * Args: S - score matrix * fi - background frequencies $f_i$ (0..K-1) * fj - background frequencies $f_j$ (0..K-1) * ret_E - RETURN: expected score * * Returns: on success. */ int esl_scorematrix_ExpectedScore(ESL_SCOREMATRIX *S, double *fi, double *fj, double *ret_E) { double E = 0.; int a,b; for (a = 0; a < S->K; a++) for (b = 0; b < S->K; b++) E += fi[a] * fj[b] * (double) S->s[a][b]; *ret_E = E; return eslOK; } /* Function: esl_scorematrix_RelEntropy() * Synopsis: Calculates relative entropy of a matrix. * * Purpose: Calculates the relative entropy of score matrix in * bits, given its background distributions and and * its scale . * * The relative entropy is defined as $\sum_{ab} p_{ab} * \log_2 \frac{p_{ab}} {f_a f_b}$, the average score (in * bits) of homologous aligned sequences. In general it is * $\geq 0$ (and certainly so in the case when background * frequencies $f_a$ and $f_b$ are the marginals of the * $p_{ab}$ joint ptobabilities). * * Args: S - score matrix * fi - background freqs for sequence i * fj - background freqs for sequence j * lambda - scale factor $\lambda$ for * ret_D - RETURN: relative entropy. * * Returns: on success, and contains the relative * entropy. * * Throws: on allocation error. * if the implied $p_{ij}$'s don't sum to one, * probably indicating that was not the correct * for , , and . * In either exception, is returned as 0.0. */ int esl_scorematrix_RelEntropy(const ESL_SCOREMATRIX *S, const double *fi, const double *fj, double lambda, double *ret_D) { int status; double pij; double sum = 0.; int i,j; double D = 0; for (i = 0; i < S->K; i++) for (j = 0; j < S->K; j++) { pij = fi[i] * fj[j] * exp(lambda * (double) S->s[i][j]); sum += pij; if (pij > 0.) D += pij * log(pij / (fi[i] * fj[j])); } if (esl_DCompare(sum, 1.0, 1e-3) != eslOK) ESL_XEXCEPTION(eslEINVAL, "pij's don't sum to one (%.4f): bad lambda or bad bg?", sum); D /= eslCONST_LOG2; *ret_D = D; return eslOK; ERROR: *ret_D = 0.; return status; } /* Function: esl_scorematrix_JointToConditionalOnQuery() * Synopsis: Convert a joint probability matrix to conditional probs P(b|a) * * Purpose: Given a joint probability matrix

involving the codes for gap, * nonresidue, and missing data (codes ,, and * ) are 0.0, not probabilities. Only rows/columns * are valid probability vectors. * * Returns: on success. * * Throws: (no abnormal error conditions) * * Xref: J9/87. */ int esl_scorematrix_JointToConditionalOnQuery(const ESL_ALPHABET *abc, ESL_DMATRIX *P) { int a,b; /* P(b|a) = P(ab) / P(a) * and P(a) = P(a,X), the value at [a][Kp-3] */ for (a = 0; a < abc->Kp-2; a++) for (b = 0; b < abc->Kp-2; b++) P->mx[a][b] = (P->mx[a][abc->Kp-3] == 0.0 ? 0.0 : P->mx[a][b] / P->mx[a][abc->Kp-3]); return eslOK; } /* Function: esl_scorematrix_Destroy() * Synopsis: Frees a matrix. * * Purpose: Frees a score matrix. */ void esl_scorematrix_Destroy(ESL_SCOREMATRIX *S) { if (S == NULL) return; if (S->s != NULL) { if (S->s[0] != NULL) free(S->s[0]); free(S->s); } if (S->isval != NULL) free(S->isval); if (S->outorder != NULL) free(S->outorder); if (S->name != NULL) free(S->name); if (S->path != NULL) free(S->path); free(S); return; } /*------------------- end, scorematrix object -------------------*/ /***************************************************************** *# 2. Some classic score matrices. *****************************************************************/ /* PAM30, PAM70, PAM120, PAM240, BLOSUM45, BLOSUM50, BLOSUM62, BLOSUM80, BLOSUM90 */ /* Standard matrices are reformatted to Easel static data by the UTILITY1 program; see below */ /* TODO: Instead of storing the classical low-precision versions of * these, we should recalculate each one from its original * probabilistic basis, and store it at higher integer precision, * allowing the Yu/Altschul procedure to work. If we do that, we might also store * lambda and background probabilities. */ #define eslAADIM 29 struct esl_scorematrix_aa_preload_s { char *name; int matrix[eslAADIM][eslAADIM]; }; static const struct esl_scorematrix_aa_preload_s ESL_SCOREMATRIX_AA_PRELOADS[] = { { "PAM30", { /* A C D E F G H I K L M N P Q R S T V W Y - B J Z O U X * ~ */ { 6, -6, -3, -2, -8, -2, -7, -5, -7, -6, -5, -4, -2, -4, -7, 0, -1, -2, -13, -8, 0, -3, 0, -3, 0, 0, -3, -17, 0, }, /* A */ { -6, 10, -14, -14, -13, -9, -7, -6, -14, -15, -13, -11, -8, -14, -8, -3, -8, -6, -15, -4, 0, -12, 0, -14, 0, 0, -9, -17, 0, }, /* C */ { -3, -14, 8, 2, -15, -3, -4, -7, -4, -12, -11, 2, -8, -2, -10, -4, -5, -8, -15, -11, 0, 6, 0, 1, 0, 0, -5, -17, 0, }, /* D */ { -2, -14, 2, 8, -14, -4, -5, -5, -4, -9, -7, -2, -5, 1, -9, -4, -6, -6, -17, -8, 0, 1, 0, 6, 0, 0, -5, -17, 0, }, /* E */ { -8, -13, -15, -14, 9, -9, -6, -2, -14, -3, -4, -9, -10, -13, -9, -6, -9, -8, -4, 2, 0, -10, 0, -13, 0, 0, -8, -17, 0, }, /* F */ { -2, -9, -3, -4, -9, 6, -9, -11, -7, -10, -8, -3, -6, -7, -9, -2, -6, -5, -15, -14, 0, -3, 0, -5, 0, 0, -5, -17, 0, }, /* G */ { -7, -7, -4, -5, -6, -9, 9, -9, -6, -6, -10, 0, -4, 1, -2, -6, -7, -6, -7, -3, 0, -1, 0, -1, 0, 0, -5, -17, 0, }, /* H */ { -5, -6, -7, -5, -2, -11, -9, 8, -6, -1, -1, -5, -8, -8, -5, -7, -2, 2, -14, -6, 0, -6, 0, -6, 0, 0, -5, -17, 0, }, /* I */ { -7, -14, -4, -4, -14, -7, -6, -6, 7, -8, -2, -1, -6, -3, 0, -4, -3, -9, -12, -9, 0, -2, 0, -4, 0, 0, -5, -17, 0, }, /* K */ { -6, -15, -12, -9, -3, -10, -6, -1, -8, 7, 1, -7, -7, -5, -8, -8, -7, -2, -6, -7, 0, -9, 0, -7, 0, 0, -6, -17, 0, }, /* L */ { -5, -13, -11, -7, -4, -8, -10, -1, -2, 1, 11, -9, -8, -4, -4, -5, -4, -1, -13, -11, 0, -10, 0, -5, 0, 0, -5, -17, 0, }, /* M */ { -4, -11, 2, -2, -9, -3, 0, -5, -1, -7, -9, 8, -6, -3, -6, 0, -2, -8, -8, -4, 0, 6, 0, -3, 0, 0, -3, -17, 0, }, /* N */ { -2, -8, -8, -5, -10, -6, -4, -8, -6, -7, -8, -6, 8, -3, -4, -2, -4, -6, -14, -13, 0, -7, 0, -4, 0, 0, -5, -17, 0, }, /* P */ { -4, -14, -2, 1, -13, -7, 1, -8, -3, -5, -4, -3, -3, 8, -2, -5, -5, -7, -13, -12, 0, -3, 0, 6, 0, 0, -5, -17, 0, }, /* Q */ { -7, -8, -10, -9, -9, -9, -2, -5, 0, -8, -4, -6, -4, -2, 8, -3, -6, -8, -2, -10, 0, -7, 0, -4, 0, 0, -6, -17, 0, }, /* R */ { 0, -3, -4, -4, -6, -2, -6, -7, -4, -8, -5, 0, -2, -5, -3, 6, 0, -6, -5, -7, 0, -1, 0, -5, 0, 0, -3, -17, 0, }, /* S */ { -1, -8, -5, -6, -9, -6, -7, -2, -3, -7, -4, -2, -4, -5, -6, 0, 7, -3, -13, -6, 0, -3, 0, -6, 0, 0, -4, -17, 0, }, /* T */ { -2, -6, -8, -6, -8, -5, -6, 2, -9, -2, -1, -8, -6, -7, -8, -6, -3, 7, -15, -7, 0, -8, 0, -6, 0, 0, -5, -17, 0, }, /* V */ { -13, -15, -15, -17, -4, -15, -7, -14, -12, -6, -13, -8, -14, -13, -2, -5, -13, -15, 13, -5, 0, -10, 0, -14, 0, 0, -11, -17, 0, }, /* W */ { -8, -4, -11, -8, 2, -14, -3, -6, -9, -7, -11, -4, -13, -12, -10, -7, -6, -7, -5, 10, 0, -6, 0, -9, 0, 0, -7, -17, 0, }, /* Y */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* - */ { -3, -12, 6, 1, -10, -3, -1, -6, -2, -9, -10, 6, -7, -3, -7, -1, -3, -8, -10, -6, 0, 6, 0, 0, 0, 0, -5, -17, 0, }, /* B */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* J */ { -3, -14, 1, 6, -13, -5, -1, -6, -4, -7, -5, -3, -4, 6, -4, -5, -6, -6, -14, -9, 0, 0, 0, 6, 0, 0, -5, -17, 0, }, /* Z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* O */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* U */ { -3, -9, -5, -5, -8, -5, -5, -5, -5, -6, -5, -3, -5, -5, -6, -3, -4, -5, -11, -7, 0, -5, 0, -5, 0, 0, -5, -17, 0, }, /* X */ { -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 0, -17, 0, -17, 0, 0, -17, 1, 0, }, /* * */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* ~ */ }}, { "PAM70", { /* A C D E F G H I K L M N P Q R S T V W Y - B J Z O U X * ~ */ { 5, -4, -1, -1, -6, 0, -4, -2, -4, -4, -3, -2, 0, -2, -4, 1, 1, -1, -9, -5, 0, -1, 0, -1, 0, 0, -2, -11, 0, }, /* A */ { -4, 9, -9, -9, -8, -6, -5, -4, -9, -10, -9, -7, -5, -9, -5, -1, -5, -4, -11, -2, 0, -8, 0, -9, 0, 0, -6, -11, 0, }, /* C */ { -1, -9, 6, 3, -10, -1, -1, -5, -2, -8, -7, 3, -4, 0, -6, -1, -2, -5, -10, -7, 0, 5, 0, 2, 0, 0, -3, -11, 0, }, /* D */ { -1, -9, 3, 6, -9, -2, -2, -4, -2, -6, -4, 0, -3, 2, -5, -2, -3, -4, -11, -6, 0, 2, 0, 5, 0, 0, -3, -11, 0, }, /* E */ { -6, -8, -10, -9, 8, -7, -4, 0, -9, -1, -2, -6, -7, -9, -7, -4, -6, -5, -2, 4, 0, -7, 0, -9, 0, 0, -5, -11, 0, }, /* F */ { 0, -6, -1, -2, -7, 6, -6, -6, -5, -7, -6, -1, -3, -4, -6, 0, -3, -3, -10, -9, 0, -1, 0, -3, 0, 0, -3, -11, 0, }, /* G */ { -4, -5, -1, -2, -4, -6, 8, -6, -3, -4, -6, 1, -2, 2, 0, -3, -4, -4, -5, -1, 0, 0, 0, 1, 0, 0, -3, -11, 0, }, /* H */ { -2, -4, -5, -4, 0, -6, -6, 7, -4, 1, 1, -3, -5, -5, -3, -4, -1, 3, -9, -4, 0, -4, 0, -4, 0, 0, -3, -11, 0, }, /* I */ { -4, -9, -2, -2, -9, -5, -3, -4, 6, -5, 0, 0, -4, -1, 2, -2, -1, -6, -7, -7, 0, -1, 0, -2, 0, 0, -3, -11, 0, }, /* K */ { -4, -10, -8, -6, -1, -7, -4, 1, -5, 6, 2, -5, -5, -3, -6, -6, -4, 0, -4, -4, 0, -6, 0, -4, 0, 0, -4, -11, 0, }, /* L */ { -3, -9, -7, -4, -2, -6, -6, 1, 0, 2, 10, -5, -5, -2, -2, -3, -2, 0, -8, -7, 0, -6, 0, -3, 0, 0, -3, -11, 0, }, /* M */ { -2, -7, 3, 0, -6, -1, 1, -3, 0, -5, -5, 6, -3, -1, -3, 1, 0, -5, -6, -3, 0, 5, 0, -1, 0, 0, -2, -11, 0, }, /* N */ { 0, -5, -4, -3, -7, -3, -2, -5, -4, -5, -5, -3, 7, -1, -2, 0, -2, -3, -9, -9, 0, -4, 0, -2, 0, 0, -3, -11, 0, }, /* P */ { -2, -9, 0, 2, -9, -4, 2, -5, -1, -3, -2, -1, -1, 7, 0, -3, -3, -4, -8, -8, 0, -1, 0, 5, 0, 0, -2, -11, 0, }, /* Q */ { -4, -5, -6, -5, -7, -6, 0, -3, 2, -6, -2, -3, -2, 0, 8, -1, -4, -5, 0, -7, 0, -4, 0, -2, 0, 0, -3, -11, 0, }, /* R */ { 1, -1, -1, -2, -4, 0, -3, -4, -2, -6, -3, 1, 0, -3, -1, 5, 2, -3, -3, -5, 0, 0, 0, -2, 0, 0, -1, -11, 0, }, /* S */ { 1, -5, -2, -3, -6, -3, -4, -1, -1, -4, -2, 0, -2, -3, -4, 2, 6, -1, -8, -4, 0, -1, 0, -3, 0, 0, -2, -11, 0, }, /* T */ { -1, -4, -5, -4, -5, -3, -4, 3, -6, 0, 0, -5, -3, -4, -5, -3, -1, 6, -10, -5, 0, -5, 0, -4, 0, 0, -2, -11, 0, }, /* V */ { -9, -11, -10, -11, -2, -10, -5, -9, -7, -4, -8, -6, -9, -8, 0, -3, -8, -10, 13, -3, 0, -7, 0, -10, 0, 0, -7, -11, 0, }, /* W */ { -5, -2, -7, -6, 4, -9, -1, -4, -7, -4, -7, -3, -9, -8, -7, -5, -4, -5, -3, 9, 0, -4, 0, -7, 0, 0, -5, -11, 0, }, /* Y */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* - */ { -1, -8, 5, 2, -7, -1, 0, -4, -1, -6, -6, 5, -4, -1, -4, 0, -1, -5, -7, -4, 0, 5, 0, 1, 0, 0, -2, -11, 0, }, /* B */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* J */ { -1, -9, 2, 5, -9, -3, 1, -4, -2, -4, -3, -1, -2, 5, -2, -2, -3, -4, -10, -7, 0, 1, 0, 5, 0, 0, -3, -11, 0, }, /* Z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* O */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* U */ { -2, -6, -3, -3, -5, -3, -3, -3, -3, -4, -3, -2, -3, -2, -3, -1, -2, -2, -7, -5, 0, -2, 0, -3, 0, 0, -3, -11, 0, }, /* X */ { -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 0, -11, 0, -11, 0, 0, -11, 1, 0, }, /* * */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* ~ */ }}, { "PAM120", { /* A C D E F G H I K L M N P Q R S T V W Y - B J Z O U X * ~ */ { 3, -3, 0, 0, -4, 1, -3, -1, -2, -3, -2, -1, 1, -1, -3, 1, 1, 0, -7, -4, 0, 0, 0, -1, 0, 0, -1, -8, 0, }, /* A */ { -3, 9, -7, -7, -6, -4, -4, -3, -7, -7, -6, -5, -4, -7, -4, 0, -3, -3, -8, -1, 0, -6, 0, -7, 0, 0, -4, -8, 0, }, /* C */ { 0, -7, 5, 3, -7, 0, 0, -3, -1, -5, -4, 2, -3, 1, -3, 0, -1, -3, -8, -5, 0, 4, 0, 3, 0, 0, -2, -8, 0, }, /* D */ { 0, -7, 3, 5, -7, -1, -1, -3, -1, -4, -3, 1, -2, 2, -3, -1, -2, -3, -8, -5, 0, 3, 0, 4, 0, 0, -1, -8, 0, }, /* E */ { -4, -6, -7, -7, 8, -5, -3, 0, -7, 0, -1, -4, -5, -6, -5, -3, -4, -3, -1, 4, 0, -5, 0, -6, 0, 0, -3, -8, 0, }, /* F */ { 1, -4, 0, -1, -5, 5, -4, -4, -3, -5, -4, 0, -2, -3, -4, 1, -1, -2, -8, -6, 0, 0, 0, -2, 0, 0, -2, -8, 0, }, /* G */ { -3, -4, 0, -1, -3, -4, 7, -4, -2, -3, -4, 2, -1, 3, 1, -2, -3, -3, -3, -1, 0, 1, 0, 1, 0, 0, -2, -8, 0, }, /* H */ { -1, -3, -3, -3, 0, -4, -4, 6, -3, 1, 1, -2, -3, -3, -2, -2, 0, 3, -6, -2, 0, -3, 0, -3, 0, 0, -1, -8, 0, }, /* I */ { -2, -7, -1, -1, -7, -3, -2, -3, 5, -4, 0, 1, -2, 0, 2, -1, -1, -4, -5, -5, 0, 0, 0, -1, 0, 0, -2, -8, 0, }, /* K */ { -3, -7, -5, -4, 0, -5, -3, 1, -4, 5, 3, -4, -3, -2, -4, -4, -3, 1, -3, -2, 0, -4, 0, -3, 0, 0, -2, -8, 0, }, /* L */ { -2, -6, -4, -3, -1, -4, -4, 1, 0, 3, 8, -3, -3, -1, -1, -2, -1, 1, -6, -4, 0, -4, 0, -2, 0, 0, -2, -8, 0, }, /* M */ { -1, -5, 2, 1, -4, 0, 2, -2, 1, -4, -3, 4, -2, 0, -1, 1, 0, -3, -4, -2, 0, 3, 0, 0, 0, 0, -1, -8, 0, }, /* N */ { 1, -4, -3, -2, -5, -2, -1, -3, -2, -3, -3, -2, 6, 0, -1, 1, -1, -2, -7, -6, 0, -2, 0, -1, 0, 0, -2, -8, 0, }, /* P */ { -1, -7, 1, 2, -6, -3, 3, -3, 0, -2, -1, 0, 0, 6, 1, -2, -2, -3, -6, -5, 0, 0, 0, 4, 0, 0, -1, -8, 0, }, /* Q */ { -3, -4, -3, -3, -5, -4, 1, -2, 2, -4, -1, -1, -1, 1, 6, -1, -2, -3, 1, -5, 0, -2, 0, -1, 0, 0, -2, -8, 0, }, /* R */ { 1, 0, 0, -1, -3, 1, -2, -2, -1, -4, -2, 1, 1, -2, -1, 3, 2, -2, -2, -3, 0, 0, 0, -1, 0, 0, -1, -8, 0, }, /* S */ { 1, -3, -1, -2, -4, -1, -3, 0, -1, -3, -1, 0, -1, -2, -2, 2, 4, 0, -6, -3, 0, 0, 0, -2, 0, 0, -1, -8, 0, }, /* T */ { 0, -3, -3, -3, -3, -2, -3, 3, -4, 1, 1, -3, -2, -3, -3, -2, 0, 5, -8, -3, 0, -3, 0, -3, 0, 0, -1, -8, 0, }, /* V */ { -7, -8, -8, -8, -1, -8, -3, -6, -5, -3, -6, -4, -7, -6, 1, -2, -6, -8, 12, -2, 0, -6, 0, -7, 0, 0, -5, -8, 0, }, /* W */ { -4, -1, -5, -5, 4, -6, -1, -2, -5, -2, -4, -2, -6, -5, -5, -3, -3, -3, -2, 8, 0, -3, 0, -5, 0, 0, -3, -8, 0, }, /* Y */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* - */ { 0, -6, 4, 3, -5, 0, 1, -3, 0, -4, -4, 3, -2, 0, -2, 0, 0, -3, -6, -3, 0, 4, 0, 2, 0, 0, -1, -8, 0, }, /* B */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* J */ { -1, -7, 3, 4, -6, -2, 1, -3, -1, -3, -2, 0, -1, 4, -1, -1, -2, -3, -7, -5, 0, 2, 0, 4, 0, 0, -1, -8, 0, }, /* Z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* O */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* U */ { -1, -4, -2, -1, -3, -2, -2, -1, -2, -2, -2, -1, -2, -1, -2, -1, -1, -1, -5, -3, 0, -1, 0, -1, 0, 0, -2, -8, 0, }, /* X */ { -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, 0, -8, 0, 0, -8, 1, 0, }, /* * */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* ~ */ }}, { "PAM240", { /* A C D E F G H I K L M N P Q R S T V W Y - B J Z O U X * ~ */ { 2, -2, 0, 0, -4, 1, -1, -1, -1, -2, -1, 0, 1, 0, -2, 1, 1, 0, -6, -4, 0, 0, 0, 0, 0, 0, 0, -8, 0, }, /* A */ { -2, 12, -5, -6, -5, -4, -4, -2, -6, -6, -5, -4, -3, -6, -4, 0, -2, -2, -8, 0, 0, -5, 0, -6, 0, 0, -3, -8, 0, }, /* C */ { 0, -5, 4, 4, -6, 1, 1, -2, 0, -4, -3, 2, -1, 2, -1, 0, 0, -2, -7, -4, 0, 3, 0, 3, 0, 0, -1, -8, 0, }, /* D */ { 0, -6, 4, 4, -6, 0, 1, -2, 0, -3, -2, 1, -1, 3, -1, 0, 0, -2, -7, -4, 0, 3, 0, 3, 0, 0, -1, -8, 0, }, /* E */ { -4, -5, -6, -6, 9, -5, -2, 1, -5, 2, 0, -4, -5, -5, -5, -3, -3, -1, 0, 7, 0, -5, 0, -5, 0, 0, -2, -8, 0, }, /* F */ { 1, -4, 1, 0, -5, 5, -2, -3, -2, -4, -3, 0, -1, -1, -3, 1, 0, -1, -7, -5, 0, 0, 0, 0, 0, 0, -1, -8, 0, }, /* G */ { -1, -4, 1, 1, -2, -2, 7, -3, 0, -2, -2, 2, 0, 3, 2, -1, -1, -2, -3, 0, 0, 1, 0, 2, 0, 0, -1, -8, 0, }, /* H */ { -1, -2, -2, -2, 1, -3, -3, 5, -2, 2, 2, -2, -2, -2, -2, -1, 0, 4, -5, -1, 0, -2, 0, -2, 0, 0, -1, -8, 0, }, /* I */ { -1, -6, 0, 0, -5, -2, 0, -2, 5, -3, 0, 1, -1, 1, 3, 0, 0, -3, -4, -5, 0, 1, 0, 0, 0, 0, -1, -8, 0, }, /* K */ { -2, -6, -4, -3, 2, -4, -2, 2, -3, 6, 4, -3, -3, -2, -3, -3, -2, 2, -2, -1, 0, -4, 0, -3, 0, 0, -1, -8, 0, }, /* L */ { -1, -5, -3, -2, 0, -3, -2, 2, 0, 4, 7, -2, -2, -1, 0, -2, -1, 2, -4, -3, 0, -2, 0, -2, 0, 0, -1, -8, 0, }, /* M */ { 0, -4, 2, 1, -4, 0, 2, -2, 1, -3, -2, 2, -1, 1, 0, 1, 0, -2, -4, -2, 0, 2, 0, 1, 0, 0, 0, -8, 0, }, /* N */ { 1, -3, -1, -1, -5, -1, 0, -2, -1, -3, -2, -1, 6, 0, 0, 1, 0, -1, -6, -5, 0, -1, 0, 0, 0, 0, -1, -8, 0, }, /* P */ { 0, -6, 2, 3, -5, -1, 3, -2, 1, -2, -1, 1, 0, 4, 1, -1, -1, -2, -5, -4, 0, 1, 0, 3, 0, 0, -1, -8, 0, }, /* Q */ { -2, -4, -1, -1, -5, -3, 2, -2, 3, -3, 0, 0, 0, 1, 6, 0, -1, -3, 2, -4, 0, -1, 0, 0, 0, 0, -1, -8, 0, }, /* R */ { 1, 0, 0, 0, -3, 1, -1, -1, 0, -3, -2, 1, 1, -1, 0, 2, 1, -1, -3, -3, 0, 0, 0, 0, 0, 0, 0, -8, 0, }, /* S */ { 1, -2, 0, 0, -3, 0, -1, 0, 0, -2, -1, 0, 0, -1, -1, 1, 3, 0, -5, -3, 0, 0, 0, -1, 0, 0, 0, -8, 0, }, /* T */ { 0, -2, -2, -2, -1, -1, -2, 4, -3, 2, 2, -2, -1, -2, -3, -1, 0, 4, -6, -3, 0, -2, 0, -2, 0, 0, -1, -8, 0, }, /* V */ { -6, -8, -7, -7, 0, -7, -3, -5, -4, -2, -4, -4, -6, -5, 2, -3, -5, -6, 17, 0, 0, -5, 0, -6, 0, 0, -4, -8, 0, }, /* W */ { -4, 0, -4, -4, 7, -5, 0, -1, -5, -1, -3, -2, -5, -4, -4, -3, -3, -3, 0, 10, 0, -3, 0, -4, 0, 0, -2, -8, 0, }, /* Y */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* - */ { 0, -5, 3, 3, -5, 0, 1, -2, 1, -4, -2, 2, -1, 1, -1, 0, 0, -2, -5, -3, 0, 3, 0, 2, 0, 0, -1, -8, 0, }, /* B */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* J */ { 0, -6, 3, 3, -5, 0, 2, -2, 0, -3, -2, 1, 0, 3, 0, 0, -1, -2, -6, -4, 0, 2, 0, 3, 0, 0, -1, -8, 0, }, /* Z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* O */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* U */ { 0, -3, -1, -1, -2, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, 0, 0, -1, -4, -2, 0, -1, 0, -1, 0, 0, -1, -8, 0, }, /* X */ { -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, 0, -8, 0, 0, -8, 1, 0, }, /* * */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* ~ */ }}, { "BLOSUM45", { /* A C D E F G H I K L M N P Q R S T V W Y - B J Z O U X * ~ */ { 5, -1, -2, -1, -2, 0, -2, -1, -1, -1, -1, -1, -1, -1, -2, 1, 0, 0, -2, -2, 0, -1, 0, -1, 0, 0, 0, -5, 0, }, /* A */ { -1, 12, -3, -3, -2, -3, -3, -3, -3, -2, -2, -2, -4, -3, -3, -1, -1, -1, -5, -3, 0, -2, 0, -3, 0, 0, -2, -5, 0, }, /* C */ { -2, -3, 7, 2, -4, -1, 0, -4, 0, -3, -3, 2, -1, 0, -1, 0, -1, -3, -4, -2, 0, 5, 0, 1, 0, 0, -1, -5, 0, }, /* D */ { -1, -3, 2, 6, -3, -2, 0, -3, 1, -2, -2, 0, 0, 2, 0, 0, -1, -3, -3, -2, 0, 1, 0, 4, 0, 0, -1, -5, 0, }, /* E */ { -2, -2, -4, -3, 8, -3, -2, 0, -3, 1, 0, -2, -3, -4, -2, -2, -1, 0, 1, 3, 0, -3, 0, -3, 0, 0, -1, -5, 0, }, /* F */ { 0, -3, -1, -2, -3, 7, -2, -4, -2, -3, -2, 0, -2, -2, -2, 0, -2, -3, -2, -3, 0, -1, 0, -2, 0, 0, -1, -5, 0, }, /* G */ { -2, -3, 0, 0, -2, -2, 10, -3, -1, -2, 0, 1, -2, 1, 0, -1, -2, -3, -3, 2, 0, 0, 0, 0, 0, 0, -1, -5, 0, }, /* H */ { -1, -3, -4, -3, 0, -4, -3, 5, -3, 2, 2, -2, -2, -2, -3, -2, -1, 3, -2, 0, 0, -3, 0, -3, 0, 0, -1, -5, 0, }, /* I */ { -1, -3, 0, 1, -3, -2, -1, -3, 5, -3, -1, 0, -1, 1, 3, -1, -1, -2, -2, -1, 0, 0, 0, 1, 0, 0, -1, -5, 0, }, /* K */ { -1, -2, -3, -2, 1, -3, -2, 2, -3, 5, 2, -3, -3, -2, -2, -3, -1, 1, -2, 0, 0, -3, 0, -2, 0, 0, -1, -5, 0, }, /* L */ { -1, -2, -3, -2, 0, -2, 0, 2, -1, 2, 6, -2, -2, 0, -1, -2, -1, 1, -2, 0, 0, -2, 0, -1, 0, 0, -1, -5, 0, }, /* M */ { -1, -2, 2, 0, -2, 0, 1, -2, 0, -3, -2, 6, -2, 0, 0, 1, 0, -3, -4, -2, 0, 4, 0, 0, 0, 0, -1, -5, 0, }, /* N */ { -1, -4, -1, 0, -3, -2, -2, -2, -1, -3, -2, -2, 9, -1, -2, -1, -1, -3, -3, -3, 0, -2, 0, -1, 0, 0, -1, -5, 0, }, /* P */ { -1, -3, 0, 2, -4, -2, 1, -2, 1, -2, 0, 0, -1, 6, 1, 0, -1, -3, -2, -1, 0, 0, 0, 4, 0, 0, -1, -5, 0, }, /* Q */ { -2, -3, -1, 0, -2, -2, 0, -3, 3, -2, -1, 0, -2, 1, 7, -1, -1, -2, -2, -1, 0, -1, 0, 0, 0, 0, -1, -5, 0, }, /* R */ { 1, -1, 0, 0, -2, 0, -1, -2, -1, -3, -2, 1, -1, 0, -1, 4, 2, -1, -4, -2, 0, 0, 0, 0, 0, 0, 0, -5, 0, }, /* S */ { 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, 0, -1, -1, -1, 2, 5, 0, -3, -1, 0, 0, 0, -1, 0, 0, 0, -5, 0, }, /* T */ { 0, -1, -3, -3, 0, -3, -3, 3, -2, 1, 1, -3, -3, -3, -2, -1, 0, 5, -3, -1, 0, -3, 0, -3, 0, 0, -1, -5, 0, }, /* V */ { -2, -5, -4, -3, 1, -2, -3, -2, -2, -2, -2, -4, -3, -2, -2, -4, -3, -3, 15, 3, 0, -4, 0, -2, 0, 0, -2, -5, 0, }, /* W */ { -2, -3, -2, -2, 3, -3, 2, 0, -1, 0, 0, -2, -3, -1, -1, -2, -1, -1, 3, 8, 0, -2, 0, -2, 0, 0, -1, -5, 0, }, /* Y */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* - */ { -1, -2, 5, 1, -3, -1, 0, -3, 0, -3, -2, 4, -2, 0, -1, 0, 0, -3, -4, -2, 0, 4, 0, 2, 0, 0, -1, -5, 0, }, /* B */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* J */ { -1, -3, 1, 4, -3, -2, 0, -3, 1, -2, -1, 0, -1, 4, 0, 0, -1, -3, -2, -2, 0, 2, 0, 4, 0, 0, -1, -5, 0, }, /* Z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* O */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* U */ { 0, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, -2, -1, 0, -1, 0, -1, 0, 0, -1, -5, 0, }, /* X */ { -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, 0, -5, 0, -5, 0, 0, -5, 1, 0, }, /* * */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* ~ */ }}, { "BLOSUM50", { /* A C D E F G H I K L M N P Q R S T V W Y - B J Z O U X * ~ */ { 5, -1, -2, -1, -3, 0, -2, -1, -1, -2, -1, -1, -1, -1, -2, 1, 0, 0, -3, -2, 0, -2, 0, -1, 0, 0, -1, -5, 0, }, /* A */ { -1, 13, -4, -3, -2, -3, -3, -2, -3, -2, -2, -2, -4, -3, -4, -1, -1, -1, -5, -3, 0, -3, 0, -3, 0, 0, -2, -5, 0, }, /* C */ { -2, -4, 8, 2, -5, -1, -1, -4, -1, -4, -4, 2, -1, 0, -2, 0, -1, -4, -5, -3, 0, 5, 0, 1, 0, 0, -1, -5, 0, }, /* D */ { -1, -3, 2, 6, -3, -3, 0, -4, 1, -3, -2, 0, -1, 2, 0, -1, -1, -3, -3, -2, 0, 1, 0, 5, 0, 0, -1, -5, 0, }, /* E */ { -3, -2, -5, -3, 8, -4, -1, 0, -4, 1, 0, -4, -4, -4, -3, -3, -2, -1, 1, 4, 0, -4, 0, -4, 0, 0, -2, -5, 0, }, /* F */ { 0, -3, -1, -3, -4, 8, -2, -4, -2, -4, -3, 0, -2, -2, -3, 0, -2, -4, -3, -3, 0, -1, 0, -2, 0, 0, -2, -5, 0, }, /* G */ { -2, -3, -1, 0, -1, -2, 10, -4, 0, -3, -1, 1, -2, 1, 0, -1, -2, -4, -3, 2, 0, 0, 0, 0, 0, 0, -1, -5, 0, }, /* H */ { -1, -2, -4, -4, 0, -4, -4, 5, -3, 2, 2, -3, -3, -3, -4, -3, -1, 4, -3, -1, 0, -4, 0, -3, 0, 0, -1, -5, 0, }, /* I */ { -1, -3, -1, 1, -4, -2, 0, -3, 6, -3, -2, 0, -1, 2, 3, 0, -1, -3, -3, -2, 0, 0, 0, 1, 0, 0, -1, -5, 0, }, /* K */ { -2, -2, -4, -3, 1, -4, -3, 2, -3, 5, 3, -4, -4, -2, -3, -3, -1, 1, -2, -1, 0, -4, 0, -3, 0, 0, -1, -5, 0, }, /* L */ { -1, -2, -4, -2, 0, -3, -1, 2, -2, 3, 7, -2, -3, 0, -2, -2, -1, 1, -1, 0, 0, -3, 0, -1, 0, 0, -1, -5, 0, }, /* M */ { -1, -2, 2, 0, -4, 0, 1, -3, 0, -4, -2, 7, -2, 0, -1, 1, 0, -3, -4, -2, 0, 4, 0, 0, 0, 0, -1, -5, 0, }, /* N */ { -1, -4, -1, -1, -4, -2, -2, -3, -1, -4, -3, -2, 10, -1, -3, -1, -1, -3, -4, -3, 0, -2, 0, -1, 0, 0, -2, -5, 0, }, /* P */ { -1, -3, 0, 2, -4, -2, 1, -3, 2, -2, 0, 0, -1, 7, 1, 0, -1, -3, -1, -1, 0, 0, 0, 4, 0, 0, -1, -5, 0, }, /* Q */ { -2, -4, -2, 0, -3, -3, 0, -4, 3, -3, -2, -1, -3, 1, 7, -1, -1, -3, -3, -1, 0, -1, 0, 0, 0, 0, -1, -5, 0, }, /* R */ { 1, -1, 0, -1, -3, 0, -1, -3, 0, -3, -2, 1, -1, 0, -1, 5, 2, -2, -4, -2, 0, 0, 0, 0, 0, 0, -1, -5, 0, }, /* S */ { 0, -1, -1, -1, -2, -2, -2, -1, -1, -1, -1, 0, -1, -1, -1, 2, 5, 0, -3, -2, 0, 0, 0, -1, 0, 0, 0, -5, 0, }, /* T */ { 0, -1, -4, -3, -1, -4, -4, 4, -3, 1, 1, -3, -3, -3, -3, -2, 0, 5, -3, -1, 0, -4, 0, -3, 0, 0, -1, -5, 0, }, /* V */ { -3, -5, -5, -3, 1, -3, -3, -3, -3, -2, -1, -4, -4, -1, -3, -4, -3, -3, 15, 2, 0, -5, 0, -2, 0, 0, -3, -5, 0, }, /* W */ { -2, -3, -3, -2, 4, -3, 2, -1, -2, -1, 0, -2, -3, -1, -1, -2, -2, -1, 2, 8, 0, -3, 0, -2, 0, 0, -1, -5, 0, }, /* Y */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* - */ { -2, -3, 5, 1, -4, -1, 0, -4, 0, -4, -3, 4, -2, 0, -1, 0, 0, -4, -5, -3, 0, 5, 0, 2, 0, 0, -1, -5, 0, }, /* B */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* J */ { -1, -3, 1, 5, -4, -2, 0, -3, 1, -3, -1, 0, -1, 4, 0, 0, -1, -3, -2, -2, 0, 2, 0, 5, 0, 0, -1, -5, 0, }, /* Z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* O */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* U */ { -1, -2, -1, -1, -2, -2, -1, -1, -1, -1, -1, -1, -2, -1, -1, -1, 0, -1, -3, -1, 0, -1, 0, -1, 0, 0, -1, -5, 0, }, /* X */ { -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, 0, -5, 0, -5, 0, 0, -5, 1, 0, }, /* * */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* ~ */ }}, { "BLOSUM62", { /* A C D E F G H I K L M N P Q R S T V W Y - B J Z O U X * ~ */ { 4, 0, -2, -1, -2, 0, -2, -1, -1, -1, -1, -2, -1, -1, -1, 1, 0, 0, -3, -2, 0, -2, 0, -1, 0, 0, 0, -4, 0, }, /* A */ { 0, 9, -3, -4, -2, -3, -3, -1, -3, -1, -1, -3, -3, -3, -3, -1, -1, -1, -2, -2, 0, -3, 0, -3, 0, 0, -2, -4, 0, }, /* C */ { -2, -3, 6, 2, -3, -1, -1, -3, -1, -4, -3, 1, -1, 0, -2, 0, -1, -3, -4, -3, 0, 4, 0, 1, 0, 0, -1, -4, 0, }, /* D */ { -1, -4, 2, 5, -3, -2, 0, -3, 1, -3, -2, 0, -1, 2, 0, 0, -1, -2, -3, -2, 0, 1, 0, 4, 0, 0, -1, -4, 0, }, /* E */ { -2, -2, -3, -3, 6, -3, -1, 0, -3, 0, 0, -3, -4, -3, -3, -2, -2, -1, 1, 3, 0, -3, 0, -3, 0, 0, -1, -4, 0, }, /* F */ { 0, -3, -1, -2, -3, 6, -2, -4, -2, -4, -3, 0, -2, -2, -2, 0, -2, -3, -2, -3, 0, -1, 0, -2, 0, 0, -1, -4, 0, }, /* G */ { -2, -3, -1, 0, -1, -2, 8, -3, -1, -3, -2, 1, -2, 0, 0, -1, -2, -3, -2, 2, 0, 0, 0, 0, 0, 0, -1, -4, 0, }, /* H */ { -1, -1, -3, -3, 0, -4, -3, 4, -3, 2, 1, -3, -3, -3, -3, -2, -1, 3, -3, -1, 0, -3, 0, -3, 0, 0, -1, -4, 0, }, /* I */ { -1, -3, -1, 1, -3, -2, -1, -3, 5, -2, -1, 0, -1, 1, 2, 0, -1, -2, -3, -2, 0, 0, 0, 1, 0, 0, -1, -4, 0, }, /* K */ { -1, -1, -4, -3, 0, -4, -3, 2, -2, 4, 2, -3, -3, -2, -2, -2, -1, 1, -2, -1, 0, -4, 0, -3, 0, 0, -1, -4, 0, }, /* L */ { -1, -1, -3, -2, 0, -3, -2, 1, -1, 2, 5, -2, -2, 0, -1, -1, -1, 1, -1, -1, 0, -3, 0, -1, 0, 0, -1, -4, 0, }, /* M */ { -2, -3, 1, 0, -3, 0, 1, -3, 0, -3, -2, 6, -2, 0, 0, 1, 0, -3, -4, -2, 0, 3, 0, 0, 0, 0, -1, -4, 0, }, /* N */ { -1, -3, -1, -1, -4, -2, -2, -3, -1, -3, -2, -2, 7, -1, -2, -1, -1, -2, -4, -3, 0, -2, 0, -1, 0, 0, -2, -4, 0, }, /* P */ { -1, -3, 0, 2, -3, -2, 0, -3, 1, -2, 0, 0, -1, 5, 1, 0, -1, -2, -2, -1, 0, 0, 0, 3, 0, 0, -1, -4, 0, }, /* Q */ { -1, -3, -2, 0, -3, -2, 0, -3, 2, -2, -1, 0, -2, 1, 5, -1, -1, -3, -3, -2, 0, -1, 0, 0, 0, 0, -1, -4, 0, }, /* R */ { 1, -1, 0, 0, -2, 0, -1, -2, 0, -2, -1, 1, -1, 0, -1, 4, 1, -2, -3, -2, 0, 0, 0, 0, 0, 0, 0, -4, 0, }, /* S */ { 0, -1, -1, -1, -2, -2, -2, -1, -1, -1, -1, 0, -1, -1, -1, 1, 5, 0, -2, -2, 0, -1, 0, -1, 0, 0, 0, -4, 0, }, /* T */ { 0, -1, -3, -2, -1, -3, -3, 3, -2, 1, 1, -3, -2, -2, -3, -2, 0, 4, -3, -1, 0, -3, 0, -2, 0, 0, -1, -4, 0, }, /* V */ { -3, -2, -4, -3, 1, -2, -2, -3, -3, -2, -1, -4, -4, -2, -3, -3, -2, -3, 11, 2, 0, -4, 0, -3, 0, 0, -2, -4, 0, }, /* W */ { -2, -2, -3, -2, 3, -3, 2, -1, -2, -1, -1, -2, -3, -1, -2, -2, -2, -1, 2, 7, 0, -3, 0, -2, 0, 0, -1, -4, 0, }, /* Y */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* - */ { -2, -3, 4, 1, -3, -1, 0, -3, 0, -4, -3, 3, -2, 0, -1, 0, -1, -3, -4, -3, 0, 4, 0, 1, 0, 0, -1, -4, 0, }, /* B */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* J */ { -1, -3, 1, 4, -3, -2, 0, -3, 1, -3, -1, 0, -1, 3, 0, 0, -1, -2, -3, -2, 0, 1, 0, 4, 0, 0, -1, -4, 0, }, /* Z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* O */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* U */ { 0, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, -1, 0, 0, -1, -2, -1, 0, -1, 0, -1, 0, 0, -1, -4, 0, }, /* X */ { -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 0, -4, 0, -4, 0, 0, -4, 1, 0, }, /* * */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* ~ */ }}, { "BLOSUM80", { /* A C D E F G H I K L M N P Q R S T V W Y - B J Z O U X * ~ */ { 7, -1, -3, -2, -4, 0, -3, -3, -1, -3, -2, -3, -1, -2, -3, 2, 0, -1, -5, -4, 0, -3, 0, -2, 0, 0, -1, -8, 0, }, /* A */ { -1, 13, -7, -7, -4, -6, -7, -2, -6, -3, -3, -5, -6, -5, -6, -2, -2, -2, -5, -5, 0, -6, 0, -7, 0, 0, -4, -8, 0, }, /* C */ { -3, -7, 10, 2, -6, -3, -2, -7, -2, -7, -6, 2, -3, -1, -3, -1, -2, -6, -8, -6, 0, 6, 0, 1, 0, 0, -3, -8, 0, }, /* D */ { -2, -7, 2, 8, -6, -4, 0, -6, 1, -6, -4, -1, -2, 3, -1, -1, -2, -4, -6, -5, 0, 1, 0, 6, 0, 0, -2, -8, 0, }, /* E */ { -4, -4, -6, -6, 10, -6, -2, -1, -5, 0, 0, -6, -6, -5, -5, -4, -4, -2, 0, 4, 0, -6, 0, -6, 0, 0, -3, -8, 0, }, /* F */ { 0, -6, -3, -4, -6, 9, -4, -7, -3, -7, -5, -1, -5, -4, -4, -1, -3, -6, -6, -6, 0, -2, 0, -4, 0, 0, -3, -8, 0, }, /* G */ { -3, -7, -2, 0, -2, -4, 12, -6, -1, -5, -4, 1, -4, 1, 0, -2, -3, -5, -4, 3, 0, -1, 0, 0, 0, 0, -2, -8, 0, }, /* H */ { -3, -2, -7, -6, -1, -7, -6, 7, -5, 2, 2, -6, -5, -5, -5, -4, -2, 4, -5, -3, 0, -6, 0, -6, 0, 0, -2, -8, 0, }, /* I */ { -1, -6, -2, 1, -5, -3, -1, -5, 8, -4, -3, 0, -2, 2, 3, -1, -1, -4, -6, -4, 0, -1, 0, 1, 0, 0, -2, -8, 0, }, /* K */ { -3, -3, -7, -6, 0, -7, -5, 2, -4, 6, 3, -6, -5, -4, -4, -4, -3, 1, -4, -2, 0, -7, 0, -5, 0, 0, -2, -8, 0, }, /* L */ { -2, -3, -6, -4, 0, -5, -4, 2, -3, 3, 9, -4, -4, -1, -3, -3, -1, 1, -3, -3, 0, -5, 0, -3, 0, 0, -2, -8, 0, }, /* M */ { -3, -5, 2, -1, -6, -1, 1, -6, 0, -6, -4, 9, -4, 0, -1, 1, 0, -5, -7, -4, 0, 5, 0, -1, 0, 0, -2, -8, 0, }, /* N */ { -1, -6, -3, -2, -6, -5, -4, -5, -2, -5, -4, -4, 12, -3, -3, -2, -3, -4, -7, -6, 0, -4, 0, -2, 0, 0, -3, -8, 0, }, /* P */ { -2, -5, -1, 3, -5, -4, 1, -5, 2, -4, -1, 0, -3, 9, 1, -1, -1, -4, -4, -3, 0, -1, 0, 5, 0, 0, -2, -8, 0, }, /* Q */ { -3, -6, -3, -1, -5, -4, 0, -5, 3, -4, -3, -1, -3, 1, 9, -2, -2, -4, -5, -4, 0, -2, 0, 0, 0, 0, -2, -8, 0, }, /* R */ { 2, -2, -1, -1, -4, -1, -2, -4, -1, -4, -3, 1, -2, -1, -2, 7, 2, -3, -6, -3, 0, 0, 0, -1, 0, 0, -1, -8, 0, }, /* S */ { 0, -2, -2, -2, -4, -3, -3, -2, -1, -3, -1, 0, -3, -1, -2, 2, 8, 0, -5, -3, 0, -1, 0, -2, 0, 0, -1, -8, 0, }, /* T */ { -1, -2, -6, -4, -2, -6, -5, 4, -4, 1, 1, -5, -4, -4, -4, -3, 0, 7, -5, -3, 0, -6, 0, -4, 0, 0, -2, -8, 0, }, /* V */ { -5, -5, -8, -6, 0, -6, -4, -5, -6, -4, -3, -7, -7, -4, -5, -6, -5, -5, 16, 3, 0, -8, 0, -5, 0, 0, -5, -8, 0, }, /* W */ { -4, -5, -6, -5, 4, -6, 3, -3, -4, -2, -3, -4, -6, -3, -4, -3, -3, -3, 3, 11, 0, -5, 0, -4, 0, 0, -3, -8, 0, }, /* Y */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* - */ { -3, -6, 6, 1, -6, -2, -1, -6, -1, -7, -5, 5, -4, -1, -2, 0, -1, -6, -8, -5, 0, 6, 0, 0, 0, 0, -3, -8, 0, }, /* B */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* J */ { -2, -7, 1, 6, -6, -4, 0, -6, 1, -5, -3, -1, -2, 5, 0, -1, -2, -4, -5, -4, 0, 0, 0, 6, 0, 0, -1, -8, 0, }, /* Z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* O */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* U */ { -1, -4, -3, -2, -3, -3, -2, -2, -2, -2, -2, -2, -3, -2, -2, -1, -1, -2, -5, -3, 0, -3, 0, -1, 0, 0, -2, -8, 0, }, /* X */ { -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, 0, -8, 0, 0, -8, 1, 0, }, /* * */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* ~ */ }}, { "BLOSUM90", { /* A C D E F G H I K L M N P Q R S T V W Y - B J Z O U X * ~ */ { 5, -1, -3, -1, -3, 0, -2, -2, -1, -2, -2, -2, -1, -1, -2, 1, 0, -1, -4, -3, 0, -2, 0, -1, 0, 0, -1, -6, 0, }, /* A */ { -1, 9, -5, -6, -3, -4, -5, -2, -4, -2, -2, -4, -4, -4, -5, -2, -2, -2, -4, -4, 0, -4, 0, -5, 0, 0, -3, -6, 0, }, /* C */ { -3, -5, 7, 1, -5, -2, -2, -5, -1, -5, -4, 1, -3, -1, -3, -1, -2, -5, -6, -4, 0, 4, 0, 0, 0, 0, -2, -6, 0, }, /* D */ { -1, -6, 1, 6, -5, -3, -1, -4, 0, -4, -3, -1, -2, 2, -1, -1, -1, -3, -5, -4, 0, 0, 0, 4, 0, 0, -2, -6, 0, }, /* E */ { -3, -3, -5, -5, 7, -5, -2, -1, -4, 0, -1, -4, -4, -4, -4, -3, -3, -2, 0, 3, 0, -4, 0, -4, 0, 0, -2, -6, 0, }, /* F */ { 0, -4, -2, -3, -5, 6, -3, -5, -2, -5, -4, -1, -3, -3, -3, -1, -3, -5, -4, -5, 0, -2, 0, -3, 0, 0, -2, -6, 0, }, /* G */ { -2, -5, -2, -1, -2, -3, 8, -4, -1, -4, -3, 0, -3, 1, 0, -2, -2, -4, -3, 1, 0, -1, 0, 0, 0, 0, -2, -6, 0, }, /* H */ { -2, -2, -5, -4, -1, -5, -4, 5, -4, 1, 1, -4, -4, -4, -4, -3, -1, 3, -4, -2, 0, -5, 0, -4, 0, 0, -2, -6, 0, }, /* I */ { -1, -4, -1, 0, -4, -2, -1, -4, 6, -3, -2, 0, -2, 1, 2, -1, -1, -3, -5, -3, 0, -1, 0, 1, 0, 0, -1, -6, 0, }, /* K */ { -2, -2, -5, -4, 0, -5, -4, 1, -3, 5, 2, -4, -4, -3, -3, -3, -2, 0, -3, -2, 0, -5, 0, -4, 0, 0, -2, -6, 0, }, /* L */ { -2, -2, -4, -3, -1, -4, -3, 1, -2, 2, 7, -3, -3, 0, -2, -2, -1, 0, -2, -2, 0, -4, 0, -2, 0, 0, -1, -6, 0, }, /* M */ { -2, -4, 1, -1, -4, -1, 0, -4, 0, -4, -3, 7, -3, 0, -1, 0, 0, -4, -5, -3, 0, 4, 0, -1, 0, 0, -2, -6, 0, }, /* N */ { -1, -4, -3, -2, -4, -3, -3, -4, -2, -4, -3, -3, 8, -2, -3, -2, -2, -3, -5, -4, 0, -3, 0, -2, 0, 0, -2, -6, 0, }, /* P */ { -1, -4, -1, 2, -4, -3, 1, -4, 1, -3, 0, 0, -2, 7, 1, -1, -1, -3, -3, -3, 0, -1, 0, 4, 0, 0, -1, -6, 0, }, /* Q */ { -2, -5, -3, -1, -4, -3, 0, -4, 2, -3, -2, -1, -3, 1, 6, -1, -2, -3, -4, -3, 0, -2, 0, 0, 0, 0, -2, -6, 0, }, /* R */ { 1, -2, -1, -1, -3, -1, -2, -3, -1, -3, -2, 0, -2, -1, -1, 5, 1, -2, -4, -3, 0, 0, 0, -1, 0, 0, -1, -6, 0, }, /* S */ { 0, -2, -2, -1, -3, -3, -2, -1, -1, -2, -1, 0, -2, -1, -2, 1, 6, -1, -4, -2, 0, -1, 0, -1, 0, 0, -1, -6, 0, }, /* T */ { -1, -2, -5, -3, -2, -5, -4, 3, -3, 0, 0, -4, -3, -3, -3, -2, -1, 5, -3, -3, 0, -4, 0, -3, 0, 0, -2, -6, 0, }, /* V */ { -4, -4, -6, -5, 0, -4, -3, -4, -5, -3, -2, -5, -5, -3, -4, -4, -4, -3, 11, 2, 0, -6, 0, -4, 0, 0, -3, -6, 0, }, /* W */ { -3, -4, -4, -4, 3, -5, 1, -2, -3, -2, -2, -3, -4, -3, -3, -3, -2, -3, 2, 8, 0, -4, 0, -3, 0, 0, -2, -6, 0, }, /* Y */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* - */ { -2, -4, 4, 0, -4, -2, -1, -5, -1, -5, -4, 4, -3, -1, -2, 0, -1, -4, -6, -4, 0, 4, 0, 0, 0, 0, -2, -6, 0, }, /* B */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* J */ { -1, -5, 0, 4, -4, -3, 0, -4, 1, -4, -2, -1, -2, 4, 0, -1, -1, -3, -4, -3, 0, 0, 0, 4, 0, 0, -1, -6, 0, }, /* Z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* O */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* U */ { -1, -3, -2, -2, -2, -2, -2, -2, -1, -2, -1, -2, -2, -1, -2, -1, -1, -2, -3, -2, 0, -2, 0, -1, 0, 0, -2, -6, 0, }, /* X */ { -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, 0, -6, 0, -6, 0, 0, -6, 1, 0, }, /* * */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* ~ */ }}, }; #define eslNTDIM 18 struct esl_scorematrix_nt_preload_s { char *name; int matrix[eslNTDIM][eslNTDIM]; }; static const struct esl_scorematrix_nt_preload_s ESL_SCOREMATRIX_NT_PRELOADS[] = { { "DNA1", { /* A C G T - R Y M K S W H B V D N * ~ */ { 41, -32, -26, -26, 0, 18, -29, 17, -26, -29, 18, 6, -28, 6, 7, 0, -38, 0, }, /*A*/ { -32, 39, -38, -17, 0, -35, 18, 15, -26, 14, -24, 6, 6, 3, -28, -1, -38, 0, }, /*C*/ { -26, -38, 46, -31, 0, 22, -34, -32, 21, 20, -29, -32, 8, 9, 10, 1, -38, 0, }, /*G*/ { -26, -17, -31, 39, 0, -28, 18, -21, 15, -23, 16, 7, 7, -24, 5, 0, -38, 0, }, /*T*/ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /*-*/ { 18, -35, 22, -28, 0, 20, -32, -2, 3, 1, 0, -9, -7, 7, 8, 1, -38, 0, }, /*R*/ { -29, 18, -34, 18, 0, -32, 18, 0, -1, -1, 0, 7, 6, -9, -9, -1, -38, 0, }, /*Y*/ { 17, 15, -32, -21, 0, -2, 0, 16, -26, -3, 1, 6, -8, 4, -7, -1, -38, 0, }, /*M*/ { -26, -26, 21, 15, 0, 3, -1, -26, 18, 3, -1, -8, 7, -5, 7, 1, -38, 0, }, /*K*/ { -29, 14, 20, -23, 0, 1, -1, -3, 3, 17, -26, -9, 7, 6, -6, 0, -38, 0, }, /*S*/ { 18, -24, -29, 16, 0, 0, 0, 1, -1, -26, 17, 7, -8, -7, 6, 0, -38, 0, }, /*W*/ { 6, 6, -32, 7, 0, -9, 7, 6, -8, -9, 7, 7, -3, -3, -3, 0, -38, 0, }, /*H*/ { -28, 6, 8, 7, 0, -7, 6, -8, 7, 7, -8, -3, 7, -2, -2, 0, -38, 0, }, /*B*/ { 6, 3, 9, -24, 0, 7, -9, 4, -5, 6, -7, -3, -2, 6, -1, 0, -38, 0, }, /*V*/ { 7, -28, 10, 5, 0, 8, -9, -7, 7, -6, 6, -3, -2, -1, 7, 0, -38, 0, }, /*D*/ { 0, -1, 1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /*N*/ { -38, -38, -38, -38, 0, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 0, -38, 0, }, /***/ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /*~*/ }}, }; /* Function: esl_scorematrix_Set() * Synopsis: Set one of several standard matrices. * * Purpose: Set the allocated score matrix to standard score * matrix , where is the name of one of * several matrices built-in to Easel. For example, * . * * The alphabet for (abc_r>) must be set already. * * Built-in amino acid score matrices in Easel include * BLOSUM45, BLOSUM50, BLOSUM62, BLOSUM80, BLOSUM90, PAM30, * PAM70, PAM120, and PAM240. * * Returns: on success, and the scores in are set. * * if is not available as a built-in matrix * for the alphabet that's set in . * * Throws: on allocation error. */ int esl_scorematrix_Set(const char *name, ESL_SCOREMATRIX *S) { int which; int x, y; if (S->abc_r->type == eslAMINO) { int nmat = sizeof(ESL_SCOREMATRIX_AA_PRELOADS) / sizeof(struct esl_scorematrix_aa_preload_s); for (which = 0; which < nmat; which++) if (strcmp(ESL_SCOREMATRIX_AA_PRELOADS[which].name, name) == 0) break; if (which >= nmat) return eslENOTFOUND; strcpy(S->outorder, "ARNDCQEGHILKMFPSTWYVBZX*"); /* All standard PAM, BLOSUM matrices have same list of valid * residues. If that ever changes, make a data elem in the * structures above. */ /* Transfer scores from static built-in storage */ for (x = 0; x < S->Kp; x++) for (y = 0; y < S->Kp; y++) S->s[x][y] = ESL_SCOREMATRIX_AA_PRELOADS[which].matrix[x][y]; } else if (S->abc_r->type == eslDNA || S->abc_r->type == eslRNA) { int nmat = sizeof(ESL_SCOREMATRIX_NT_PRELOADS) / sizeof(struct esl_scorematrix_nt_preload_s); for (which = 0; which < nmat; which++) if (strcmp(ESL_SCOREMATRIX_NT_PRELOADS[which].name, name) == 0) break; if (which >= nmat) return eslENOTFOUND; strcpy(S->outorder, "ACGTRYMKSWHBVDN"); /* Transfer scores from static built-in storage */ for (x = 0; x < S->Kp; x++) for (y = 0; y < S->Kp; y++) S->s[x][y] = ESL_SCOREMATRIX_NT_PRELOADS[which].matrix[x][y]; } else return eslENOTFOUND; /* no DNA matrices are built in yet! */ /* Use list to set */ S->nc = strlen(S->outorder); for (y = 0; y < S->nc; y++) { x = esl_abc_DigitizeSymbol(S->abc_r, S->outorder[y]); S->isval[x] = TRUE; } /* Copy the name */ if (esl_strdup(name, -1, &(S->name)) != eslOK) return eslEMEM; return eslOK; } /* Function: esl_scorematrix_SetIdentity() * Synopsis: Set matrix to +1 match, 0 mismatch. * * Purpose: Sets score matrix to be +1 for a match, * 0 for a mismatch. may be for any alphabet. * * Rarely useful in real use, but may be useful to create * simple examples (including debugging). * * Returns: on success, and the scores in are set. */ int esl_scorematrix_SetIdentity(ESL_SCOREMATRIX *S) { int a; int x; for (a = 0; a < S->abc_r->Kp*S->abc_r->Kp; a++) S->s[0][a] = 0; for (a = 0; a < S->K; a++) S->s[a][a] = 1; for (x = 0; x < S->K; x++) S->isval[x] = TRUE; for (x = S->abc_r->K; x < S->Kp; x++) S->isval[x] = FALSE; strncpy(S->outorder, S->abc_r->sym, S->K); S->outorder[S->K] = '\0'; S->nc = S->K; return eslOK; } /*---------------- end, some classic score matrices --------*/ /***************************************************************** *# 3. Deriving a score matrix probabilistically. *****************************************************************/ /* Function: esl_scorematrix_SetFromProbs() * Synopsis: Set matrix from target and background probabilities. * * Purpose: Sets the scores in a new score matrix from target joint * probabilities in

, query background probabilities , and * target background probabilities , with scale factor : * $s_{ij} = \frac{1}{\lambda} \frac{p_{ij}}{f_i f_j}$. * * Size of everything must match the canonical alphabet * size in . That is, abc->K> is the canonical * alphabet size of ;

must contain $K times K$ * probabilities $P_{ij}$, and , must be vectors of * K probabilities. All probabilities must be nonzero. * * Args: S - score matrix to set scores in * lambda - scale factor * P - matrix of joint probabilities P_ij (KxK) * fi - query background probabilities (0..K-1) * fj - target background probabilities * * Returns: on success, and contains the calculated score matrix. */ int esl_scorematrix_SetFromProbs(ESL_SCOREMATRIX *S, double lambda, const ESL_DMATRIX *P, const double *fi, const double *fj) { int i,j; double sc; for (i = 0; i < S->abc_r->K; i++) for (j = 0; j < S->abc_r->K; j++) { sc = log(P->mx[i][j] / (fi[i] * fj[j])) / lambda; S->s[i][j] = (int) (sc + (sc>0 ? 0.5 : -0.5)); /* that's rounding to the nearest integer */ } for (i = 0; i < S->abc_r->K; i++) S->isval[i] = TRUE; S->nc = S->abc_r->K; strncpy(S->outorder, S->abc_r->sym, S->abc_r->K); S->outorder[S->nc] = '\0'; return eslOK; } /* Function: esl_scorematrix_SetWAG() * Synopsis: Set matrix using the WAG evolutionary model. * * Purpose: Parameterize an amino acid score matrix using the WAG * rate matrix \citep{WhelanGoldman01} as the underlying * evolutionary model, at a distance of * substitutions/site, with scale factor . * * Args: S - score matrix to set parameters in. Must be created for * an amino acid alphabet. * lambda - scale factor for scores * t - distance to exponentiate WAG to, in substitutions/site * * Returns: on success, and the 20x20 residue scores in are set. * * Throws: if isn't an allocated amino acid score matrix. * on allocation failure. */ int esl_scorematrix_SetWAG(ESL_SCOREMATRIX *S, double lambda, double t) { int status; int i,j; ESL_DMATRIX *Q = NULL; ESL_DMATRIX *P = NULL; static double wagpi[20]; if (S->K != 20) ESL_EXCEPTION(eslEINVAL, "Must be using an amino acid alphabet (K=20) to make WAG-based matrices"); if (( Q = esl_dmatrix_Create(20, 20)) == NULL) goto ERROR; if (( P = esl_dmatrix_Create(20, 20)) == NULL) goto ERROR; if ( esl_composition_WAG(wagpi) != eslOK) goto ERROR; if ( esl_rmx_SetWAG(Q, wagpi) != eslOK) goto ERROR; if ( esl_dmx_Exp(Q, t, P) != eslOK) goto ERROR; for (i = 0; i < 20; i++) for (j = 0; j < 20; j++) P->mx[i][j] *= wagpi[i]; /* P_ij = P(j|i) pi_i */ esl_scorematrix_SetFromProbs(S, lambda, P, wagpi, wagpi); if ((status = esl_strdup("WAG", -1, &(S->name))) != eslOK) goto ERROR; esl_dmatrix_Destroy(Q); esl_dmatrix_Destroy(P); return eslOK; ERROR: if (Q != NULL) esl_dmatrix_Destroy(Q); if (Q != NULL) esl_dmatrix_Destroy(P); return status; } /*--------------- end, deriving score matrices ------------------*/ /***************************************************************** *# 4. Reading/writing matrices from/to files *****************************************************************/ /* Function: esl_scorematrix_Read() * Synopsis: Read a standard matrix input file. * * Purpose: Given a pointer to an open file parser for a file * containing a score matrix (such as a PAM or BLOSUM * matrix), parse the file and create a new score matrix * object. The scores are expected to be for the alphabet * . * * The score matrix file is in the format that BLAST or * FASTA use. The first line is a header contains N * single-letter codes for the residues. Each of N * subsequent rows optionally contains a residue row label * (in the same order as the columns), followed by N * residue scores. (Older matrix files do not contain the * leading row label; newer ones do.) The residues may * appear in any order. They must minimally include the * canonical K residues (K=4 for DNA, K=20 for protein), * and may also contain none, some, or all degeneracy * codes. Any other residue code that is not in the Easel * digital alphabet (including, in particular, the '*' code * for a stop codon) is ignored by the parser. * * Returns: on success, and points to a newly allocated * score matrix. * * Returns on parsing error; in which case, is * returned , and errbuf> contains an informative * error message. * * Throws: on allocation error. */ int esl_scorematrix_Read(ESL_FILEPARSER *efp, const ESL_ALPHABET *abc, ESL_SCOREMATRIX **ret_S) { int status; ESL_SCOREMATRIX *S = NULL; int *map = NULL; /* maps col/row index to digital alphabet x */ char *tok; int toklen; int c, x; int row,col; /* Allocate the matrix */ if ((S = esl_scorematrix_Create(abc)) == NULL) { status = eslEMEM; goto ERROR; } /* Make sure we've got the comment character set properly in the fileparser. * Score matrices use #. */ esl_fileparser_SetCommentChar(efp, '#'); /* Look for the first non-blank, non-comment line in the file. That line * gives us the single-letter codes in the order that the file's using. */ if ((status = esl_fileparser_NextLine(efp)) != eslOK) ESL_XFAIL(eslEFORMAT, efp->errbuf, "file appears to be empty"); /* Read the characters: count them and store them in order in label[0..nc-1]. * nc cannot exceed Kp+1 in our expected alphabet (+1, for the stop character *) */ S->nc = 0; while ((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) == eslOK) { if (S->nc >= abc->Kp) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Header contains more residues than expected for alphabet"); if (toklen != 1) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Header can only contain single-char labels; %s is invalid", tok); S->outorder[S->nc++] = *tok; } if (status != eslEOL) ESL_XFAIL(status, efp->errbuf, "Unexpected failure of esl_fileparser_GetTokenOnLine()"); S->outorder[S->nc] = '\0'; /* NUL terminate */ /* Verify that these labels for the score matrix seem plausible, given our alphabet. * This sets S->isval array: which residues we have scores for. * It also sets the map[] array, which maps coord in label[] to x in alphabet. */ ESL_ALLOC(map, sizeof(int) * S->nc); for (c = 0; c < S->nc; c++) { if (esl_abc_CIsValid(abc, S->outorder[c])) { x = esl_abc_DigitizeSymbol(abc, S->outorder[c]); map[c] = x; S->isval[x] = TRUE; } else ESL_XFAIL(eslEFORMAT, efp->errbuf, "Don't know how to deal with residue %c in matrix file", S->outorder[c]); } for (x = 0; x < abc->K; x++) if (! S->isval[x]) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Expected to see a column for residue %c", abc->sym[x]); /* Read nc rows, one at a time; * on each row, read nc+1 or nc tokens, of which nc are scores (may lead with a label or not) */ for (row = 0; row < S->nc; row++) { if ((status = esl_fileparser_NextLine(efp)) != eslOK) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Unexpectedly ran out of lines in file"); for (col = 0; col < S->nc; col++) { if ((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Unexpectedly ran out of fields on line"); if (col == 0 && *tok == S->outorder[row]) { col--; continue; } /* skip leading label */ S->s[map[row]][map[col]] = atoi(tok); } if ((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslEOL) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Too many fields on line"); } if ((status = esl_fileparser_NextLine(efp)) != eslEOF) ESL_XFAIL(eslEFORMAT, efp->errbuf, "Too many lines in file"); /* Annotate the score matrix */ if ((status = esl_strdup (efp->filename, -1, &(S->path))) != eslOK) goto ERROR; if ((status = esl_FileTail(efp->filename, FALSE, &(S->name))) != eslOK) goto ERROR; free(map); *ret_S = S; return eslOK; ERROR: esl_scorematrix_Destroy(S); if (map != NULL) free(map); *ret_S = NULL; return status; } /* Function: esl_scorematrix_Write() * Synopsis: Write a BLAST-compatible score matrix file. * * Purpose: Writes a score matrix to an open stream , in * format compatible with BLAST, FASTA, and other common * sequence alignment software. * * Returns: on success. * * Throws: on any system write error, such as filled disk. */ int esl_scorematrix_Write(FILE *fp, const ESL_SCOREMATRIX *S) { int a,b; int x,y; int nc = S->nc; /* The header line, with column labels for residues */ if (fprintf(fp, " ") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "score matrix write failed"); for (a = 0; a < nc; a++) { if (fprintf(fp, " %c ", S->outorder[a]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "score matrix write failed"); } if (fprintf(fp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "score matrix write failed"); /* The data */ for (a = 0; a < nc; a++) { if (fprintf(fp, "%c ", S->outorder[a]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "score matrix write failed"); for (b = 0; b < nc; b++) { x = esl_abc_DigitizeSymbol(S->abc_r, S->outorder[a]); y = esl_abc_DigitizeSymbol(S->abc_r, S->outorder[b]); if (fprintf(fp, "%3d ", S->s[x][y]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "score matrix write failed"); } if (fprintf(fp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "score matrix write failed"); } return eslOK; } /*-------------- end, reading/writing matrices ------------------*/ /***************************************************************** *# 5. Implicit probabilistic basis, I: given bg. *****************************************************************/ static int set_degenerate_probs(const ESL_ALPHABET *abc, ESL_DMATRIX *P, double *fi, double *fj); struct lambda_params { const double *fi; const double *fj; const ESL_SCOREMATRIX *S; }; static int lambda_fdf(double lambda, void *params, double *ret_fx, double *ret_dfx) { struct lambda_params *p = (struct lambda_params *) params; int i,j; double tmp; *ret_fx = 0.; *ret_dfx = 0.; for (i = 0; i < p->S->K; i++) for (j = 0; j < p->S->K; j++) { tmp = p->fi[i] * p->fj[j] * exp(lambda * (double) p->S->s[i][j]); *ret_fx += tmp; *ret_dfx += tmp * (double) p->S->s[i][j]; } *ret_fx -= 1.0; return eslOK; } /* Function: esl_scorematrix_ProbifyGivenBG() * Synopsis: Obtain $P_{ij}$ for matrix with known $\lambda$ and background. * * Purpose: Given a score matrix and known query and target * background frequencies and respectively, calculate scale * and implicit target probabilities \citep{Altschul01}. * Optionally returns either (or both) in and . * * The implicit target probabilities are returned in a * newly allocated $Kp \times Kp$ , over both * the canonical (typically K=4 or K=20) residues in the * residue alphabet, and the degenerate residue codes. * Values involving degenerate residue codes are marginal * probabilities (i.e. summed over the degeneracy). * Only actual residue degeneracy can have nonzero values * for ; by convention, all values involving the * special codes for gap, nonresidue, and missing data * (, , ) are 0. * * If the caller wishes to convert this joint probability * matrix to conditionals, it can take advantage of the * fact that the degenerate probability is our * marginalized , and is . * i.e., . * Those X values are mx[i][esl_abc_GetUnknown(abc)]>, * mx[esl_abc_GetUnknown(abc)][j]>; equivalently, just use * code for X. * * By convention, i is always the query sequence, and j is * always the target. We do not assume symmetry in the * scoring system, though that is usually the case. * * Args: S - score matrix * fi - background frequencies for query sequence i * fj - background frequencies for target sequence j * opt_lambda - optRETURN: calculated $\lambda$ parameter * opt_P - optRETURN: implicit target probabilities $p_{ij}$; a KxK DMATRIX. * * Returns: on success, <*ret_lambda> contains the * calculated $\lambda$ parameter, and <*ret_P> points to * the target probability matrix (which is allocated here, * and must be free'd by caller with . * * Throws: on allocation error; * if matrix is invalid and has no solution for $\lambda$; * if the solver fails to find $\lambda$. * In these cases, <*ret_lambda> is 0.0, and <*ret_P> is . */ int esl_scorematrix_ProbifyGivenBG(const ESL_SCOREMATRIX *S, const double *fi, const double *fj, double *opt_lambda, ESL_DMATRIX **opt_P) { ESL_ROOTFINDER *R = NULL; ESL_DMATRIX *P = NULL; struct lambda_params p; double lambda_guess; double lambda; int i,j; double fx, dfx; int status; /* First, solve for lambda by rootfinding. */ /* Set up the data passed to the lambda_fdf function. */ p.fi = fi; p.fj = fj; p.S = S; /* Bracket the root. * It's important that we come at the root from the far side, where * f(lambda) is positive; else we may identify the root we don't want * at lambda=0. */ lambda_guess = 1. / (double) esl_scorematrix_Max(S); for (; lambda_guess < 50.; lambda_guess *= 2.0) { lambda_fdf(lambda_guess, &p, &fx, &dfx); if (fx > 0) break; } if (fx <= 0) ESL_EXCEPTION(eslEINVAL, "Failed to bracket root for solving lambda"); /* Create a solver and find lambda by Newton/Raphson */ if (( R = esl_rootfinder_CreateFDF(lambda_fdf, &p) ) == NULL) { status = eslEMEM; goto ERROR; } if (( status = esl_root_NewtonRaphson(R, lambda_guess, &lambda)) != eslOK) goto ERROR; /* Now, given solution for lambda, calculate P */ if (opt_P != NULL) { if ((P = esl_dmatrix_Create(S->Kp, S->Kp)) == NULL) { status = eslEMEM; goto ERROR; } for (i = 0; i < S->K; i++) for (j = 0; j < S->K; j++) P->mx[i][j] = fi[i] * fj[j] * exp(lambda * (double) S->s[i][j]); set_degenerate_probs(S->abc_r, P, NULL, NULL); } esl_rootfinder_Destroy(R); if (opt_lambda != NULL) *opt_lambda = lambda; if (opt_P != NULL) *opt_P = P; return eslOK; ERROR: if (R != NULL) esl_rootfinder_Destroy(R); if (opt_lambda != NULL) *opt_lambda = 0.; if (opt_P != NULL) *opt_P = NULL; return status; } /* set_degenerate_probs() * * Used by both esl_scorematrix_Probify() and * esl_scorematrix_ProbifyGivenBG() to set degenerate residue * probabilities once probs for canonical residues are known. * * Input: P->mx[i][j] are joint probabilities p_ij for the canonical * alphabet 0..abc->K-1, but P matrix is allocated for Kp X Kp. * * Calculate marginal sums for all i,j pairs involving degeneracy * codes. Fill in [i][j'=K..Kp-1], [i'=K..Kp-1][j], and * [i'=K..Kp-1][j'=K..Kp-1] for degeneracies i',j'. Any p_ij involving * a gap (K), nonresidue (Kp-2), or missing data (Kp-1) character is * set to 0.0 by convention. * * Don't assume symmetry. * * If or background probability vectors are non-, set * them too. (Corresponding to the assumption of background = * marginal probs, rather than background being given.) This takes * advantage of the fact that P(X,i) is already the marginalized p_i, * and P(j,X) is p_j. */ static int set_degenerate_probs(const ESL_ALPHABET *abc, ESL_DMATRIX *P, double *fi, double *fj) { int i,j; /* indices into canonical codes */ int ip,jp; /* indices into degenerate codes */ /* sum to get [i=0..K] canonicals to [jp=K+1..Kp-3] degeneracies; * and [jp=K,Kp-2,Kp-1] set to 0.0 */ for (i = 0; i < abc->K; i++) { P->mx[i][abc->K] = 0.0; for (jp = abc->K+1; jp < abc->Kp-2; jp++) { P->mx[i][jp] = 0.0; for (j = 0; j < abc->K; j++) if (abc->degen[jp][j]) P->mx[i][jp] += P->mx[i][j]; } P->mx[i][abc->Kp-2] = 0.0; P->mx[i][abc->Kp-1] = 0.0; } esl_vec_DSet(P->mx[abc->K], abc->Kp, 0.0); /* gap row: all 0.0 by convention */ /* [ip][all] */ for (ip = abc->K+1; ip < abc->Kp-2; ip++) { /* [ip][j]: degenerate i, canonical j */ for (j = 0; j < abc->K; j++) { P->mx[ip][j] = 0.0; for (i = 0; i < abc->K; i++) if (abc->degen[ip][i]) P->mx[ip][j] += P->mx[i][j]; } P->mx[ip][abc->K] = 0.0; /* [ip][jp]: both positions degenerate */ for (jp = abc->K+1; jp < abc->Kp-2; jp++) { P->mx[ip][jp] = 0.0; for (j = 0; j < abc->K; j++) if (abc->degen[jp][j]) P->mx[ip][jp] += P->mx[ip][j]; } P->mx[ip][abc->Kp-2] = 0.0; P->mx[ip][abc->Kp-1] = 0.0; } esl_vec_DSet(P->mx[abc->Kp-2], abc->Kp, 0.0); /* nonresidue data * row, all 0.0 */ esl_vec_DSet(P->mx[abc->Kp-1], abc->Kp, 0.0); /* missing data ~ row, all 0.0 */ if (fi != NULL) { /* fi[i'] = p(i',X) */ fi[abc->K] = 0.0; for (ip = abc->K+1; ip < abc->Kp-2; ip++) fi[ip] = P->mx[ip][abc->Kp-3]; fi[abc->Kp-2] = 0.0; fi[abc->Kp-1] = 0.0; } if (fj != NULL) { /* fj[j'] = p(X,j')*/ fj[abc->K] = 0.0; for (jp = abc->K+1; jp < abc->Kp-2; jp++) fj[jp] = P->mx[abc->Kp-3][jp]; fj[abc->Kp-2] = 0.0; fj[abc->Kp-1] = 0.0; } return eslOK; } /*------------- end, implicit prob basis, bg known --------------*/ /***************************************************************** *# 6. Implicit probabilistic basis, II: bg unknown *****************************************************************/ /* This section implements one of the key ideas in Yu and Altschul, * PNAS 100:15688, 2003 [YuAltschul03], and Yu and Altschul, * Bioinformatics 21:902-911, 2005 [YuAltschul05]: * * Given a valid score matrix, calculate its probabilistic * basis (P_ij, f_i, f_j, and lambda), on the assumption that * the background probabilities are the marginals of P_ij. * * However, this procedure appears to be unreliable. * There are often numerous invalid solutions with negative * probabilities, and the Yu/Altschul Y function (that we've solving * for its root) is often discontinuous. Although Yu and Altschul say * they can just keep searching for solutions until a valid one is * found, and "this procedure presents no difficulties in practice", I * don't see how. * * For example, run the procedure on PAM190 and PAM200. For PAM190 * you will obtain a valid solution with lambda = 0.2301. For PAM200 * you will obtain an *invalid* solution with lambda = 0.2321, and * negative probabilities f_{ENT} (and all p_ij involving ENT and * the other 17 aa). There is a discontinuity in the function, but * it's not near these lambdas, it's at about lambda=0.040, so it's * not that we fell into a discontinuity: the bisection procedure on * lambda is working smoothly. And if you calculate a score matrix again * from the invalid PAM200 solution, you get PAM200 back, so it's not * that there's an obvious bug -- we do obtain a "solution" to PAM200, * just not one with positive probabilities. It's not obvious how * we could find a different solution to PAM200 than the invalid one! * * What we're going to do [xref J7/126, Apr 2011] is to deprecate * the Yu/Altschul procedure altogether. */ struct yualtschul_params { ESL_DMATRIX *S; /* pointer to the KxK score matrix w/ values cast to doubles */ ESL_DMATRIX *M; /* not a param per se: alloc'ed storage for M matrix provided to the objective function */ ESL_DMATRIX *Y; /* likewise, alloc'ed storage for Y (M^-1) matrix provided to obj function */ }; /* yualtschul_scorematrix_validate * See start of section 3, p. 903, YuAltschul05 * (Implementation could be more efficient here; don't really have * to sweep the entire matrix twice to do this.) */ static int yualtschul_scorematrix_validate(const ESL_SCOREMATRIX *S) { int i, j; int has_neg, has_pos; /* each row must have at least one positive and one negative score */ for (i = 0; i < S->K; i++) { has_neg = has_pos = FALSE; for (j = 0; j < S->K; j++) { if (S->s[i][j] > 0) has_pos = TRUE; if (S->s[i][j] < 0) has_neg = TRUE; } if (! has_pos || ! has_neg) return eslFAIL; } /* ditto for columns */ for (j = 0; j < S->K; j++) { has_neg = has_pos = FALSE; for (i = 0; i < S->K; i++) { if (S->s[i][j] > 0) has_pos = TRUE; if (S->s[i][j] < 0) has_neg = TRUE; } if (! has_pos || ! has_neg) return eslFAIL; } return eslOK; } /* upper bound bracketing lambda solution: eqn (12) in [YuAltschul05] */ static double yualtschul_upper_bound(const ESL_DMATRIX *Sd) { int i; double minimax; double maxlambda; /* minimax = c in YuAltschul05 p.903 = smallest of the max scores in each row/col */ minimax = esl_vec_DMax(Sd->mx[0], Sd->n); for (i = 1; i < Sd->n; i++) minimax = ESL_MIN(minimax, esl_vec_DMax(Sd->mx[i], Sd->n)); maxlambda = log((double) Sd->n) / minimax; /* eqn (12), YuAltschul05 */ return maxlambda; } static int yualtschul_solution_validate(const ESL_DMATRIX *P, const double *fi, const double *fj) { if ( esl_dmx_Min(P) < 0.0) return eslFAIL; if ( esl_vec_DMin(fi, P->n) < 0.0) return eslFAIL; if ( esl_vec_DMin(fj, P->n) < 0.0) return eslFAIL; return eslOK; } /* yualtschul_func() * * This is the objective function we try to find a root of. * Its prototype is dictated by the esl_rootfinder API. */ static int yualtschul_func(double lambda, void *params, double *ret_fx) { int status; struct yualtschul_params *p = (struct yualtschul_params *) params; ESL_DMATRIX *S = p->S; ESL_DMATRIX *M = p->M; ESL_DMATRIX *Y = p->Y; int i,j; /* the M matrix has entries M_ij = e^{lambda * s_ij} */ for (i = 0; i < S->n; i++) for (j = 0; j < S->n; j++) M->mx[i][j] = exp(lambda * S->mx[i][j]); /* the Y matrix is the inverse of M */ if ((status = esl_dmx_Invert(M, Y)) != eslOK) return status; /* We're trying to find the root of \sum_ij Y_ij - 1 = 0 */ *ret_fx = esl_dmx_Sum(Y) - 1.; return eslOK; } /* yualtschul_engine() * * This function backcalculates the probabilistic basis for a score * matrix S, when S is a double-precision matrix. Providing this * as a separate "engine" and writing esl_scorematrix_Probify() * as a wrapper around it allows us to separately test inaccuracy * due to numerical performance of our linear algebra, versus * inaccuracy due to integer roundoff in integer scoring matrices. * * It is not uncommon for this to fail when S is derived from * integer scores. Because the scores may have been provided by the * user, and this may be our first chance to detect the "user error" * of an invalid matrix, this engine returns as a normal error * if it can't reach a valid solution. */ static int yualtschul_engine(ESL_DMATRIX *S, ESL_DMATRIX *P, double *fi, double *fj, double *ret_lambda) { int status; ESL_ROOTFINDER *R = NULL; struct yualtschul_params p; double lambda; double xl, xr; double fx; int i,j; /* Set up a bisection method to find lambda */ p.S = S; p.M = p.Y = NULL; if ((p.M = esl_dmatrix_Create(S->n, S->n)) == NULL) { status = eslEMEM; goto ERROR; } if ((p.Y = esl_dmatrix_Create(S->n, S->n)) == NULL) { status = eslEMEM; goto ERROR; } if ((R = esl_rootfinder_Create(yualtschul_func, &p)) == NULL) { status = eslEMEM; goto ERROR; } /* Identify suitable brackets on lambda. */ xr = yualtschul_upper_bound(S); for (xl = xr; xl > 1e-10; xl /= 1.6) { if ((status = yualtschul_func(xl, &p, &fx)) != eslOK) goto ERROR; if (fx > 0.) break; } if (fx <= 0.) { status = eslEINVAL; goto ERROR; } for (; xr < 100.; xr *= 1.6) { if ((status = yualtschul_func(xr, &p, &fx)) != eslOK) goto ERROR; if (fx < 0.) break; } if (fx >= 0.) { status = eslEINVAL; goto ERROR; } /* Find lambda by bisection */ if (( status = esl_root_Bisection(R, xl, xr, &lambda)) != eslOK) goto ERROR; /* Find fi, fj from Y: fi are column sums, fj are row sums */ for (i = 0; i < S->n; i++) { fi[i] = 0.; for (j = 0; j < S->n; j++) fi[i] += p.Y->mx[j][i]; } for (j = 0; j < S->n; j++) { fj[j] = 0.; for (i = 0; i < S->n; i++) fj[j] += p.Y->mx[j][i]; } /* Find p_ij */ for (i = 0; i < S->n; i++) for (j = 0; j < S->n; j++) P->mx[i][j] = fi[i] * fj[j] * p.M->mx[i][j]; *ret_lambda = lambda; esl_dmatrix_Destroy(p.M); esl_dmatrix_Destroy(p.Y); esl_rootfinder_Destroy(R); return eslOK; ERROR: if (p.M != NULL) esl_dmatrix_Destroy(p.M); if (p.Y != NULL) esl_dmatrix_Destroy(p.Y); if (R != NULL) esl_rootfinder_Destroy(R); return status; } /* Function: esl_scorematrix_Probify() * Synopsis: Calculate the probabilistic basis of a score matrix. * * Purpose: Reverse engineering of a score matrix: given a "valid" * substitution matrix , obtain implied joint * probabilities $p_{ij}$, query composition $f_i$, target * composition $f_j$, and scale $\lambda$, by assuming that * $f_i$ and $f_j$ are the appropriate marginals of $p_{ij}$. * Optionally return any or all of these solutions in * <*opt_P>, <*opt_fi>, <*opt_fj>, and <*opt_lambda>. * * The calculation is run only on canonical residue scores * $0..K-1$ in S, to calculate joint probabilities for all * canonical residues. Joint and background probabilities * involving degenerate residues are then calculated by * appropriate marginalizations. See notes on * about how probabilities * involving degeneracy codes are calculated. * * This implements an algorithm described in * \citep{YuAltschul03} and \citep{YuAltschul05}. * * Although this procedure may succeed in many cases, * it is unreliable and should be used with great caution. * Yu and Altschul note that it can find invalid solutions * (negative probabilities), and although they say that one * can keep searching until a valid solution is found, * one can produce examples where this does not seem to be * the case. The caller MUST check return status, and * MUST expect . * * Args: S - score matrix * opt_P - optRETURN: Kp X Kp matrix of implied target probs $p_{ij}$ * opt_fi - optRETURN: vector of Kp $f_i$ background probs, 0..Kp-1 * opt_fj - optRETURN: vector of Kp $f_j$ background probs, 0..Kp-1 * opt_lambda - optRETURN: calculated $\lambda$ parameter * * Returns: on success, and , , , and * point to the results (for any of these that were passed non-). * * , , and , if requested, are new * allocations, and must be freed by the caller. * * Returns if the algorithm fails to determine a valid solution, * but the solution is still returned (and caller needs to free). * * Returns if input score matrix isn't valid (sensu YuAltschul05); * now , , are returned NULL and is returned * as 0. * * Throws: on allocation failure. * * Xref: SRE:J1/35; SRE:J7/126. */ int esl_scorematrix_Probify(const ESL_SCOREMATRIX *S, ESL_DMATRIX **opt_P, double **opt_fi, double **opt_fj, double *opt_lambda) { int status; ESL_DMATRIX *Sd = NULL; ESL_DMATRIX *P = NULL; double *fi = NULL; double *fj = NULL; double lambda; int i,j; /* Check the input matrix for validity */ if ( yualtschul_scorematrix_validate(S) != eslOK) { status = eslEINVAL; goto ERROR; } if (( Sd = esl_dmatrix_Create(S->K, S->K)) == NULL) {status = eslEMEM; goto ERROR; } if (( P = esl_dmatrix_Create(S->Kp, S->Kp)) == NULL) {status = eslEMEM; goto ERROR; } ESL_ALLOC(fi, sizeof(double) * S->Kp); ESL_ALLOC(fj, sizeof(double) * S->Kp); /* Construct a double-precision dmatrix from S. * I've tried integrating over the rounding uncertainty by * averaging over trials with values jittered by +/- 0.5, * but it doesn't appear to help. */ for (i = 0; i < S->K; i++) for (j = 0; j < S->K; j++) Sd->mx[i][j] = (double) S->s[i][j]; /* Reverse engineer the doubles */ if ((status = yualtschul_engine(Sd, P, fi, fj, &lambda)) != eslOK) goto ERROR; set_degenerate_probs(S->abc_r, P, fi, fj); /* Done. */ if (yualtschul_solution_validate(P, fi, fj) != eslOK) status = eslENORESULT; else status = eslOK; esl_dmatrix_Destroy(Sd); if (opt_P != NULL) *opt_P = P; else esl_dmatrix_Destroy(P); if (opt_fi != NULL) *opt_fi = fi; else free(fi); if (opt_fj != NULL) *opt_fj = fj; else free(fj); if (opt_lambda != NULL) *opt_lambda = lambda; return status; ERROR: if (Sd != NULL) esl_dmatrix_Destroy(Sd); if (P != NULL) esl_dmatrix_Destroy(P); if (fi != NULL) free(fi); if (fj != NULL) free(fj); if (opt_P != NULL) *opt_P = NULL; if (opt_fi != NULL) *opt_fi = NULL; if (opt_fj != NULL) *opt_fj = NULL; if (opt_lambda != NULL) *opt_lambda = 0.; return status; } /*---------- end, implicit prob basis, bg unknown ---------------*/ /***************************************************************** * 7. Experiment driver *****************************************************************/ #ifdef eslSCOREMATRIX_EXPERIMENT #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_dmatrix.h" #include "esl_getopts.h" #include "esl_scorematrix.h" #include "esl_vectorops.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, {"-l", eslARG_REAL, "0.3466", NULL, NULL, NULL, NULL, NULL, "set base lambda (units of score mx) to ", 0}, {"-s", eslARG_REAL, "1.0", NULL, NULL, NULL, NULL, NULL, "additional scale factor applied to lambda", 0}, {"-t", eslARG_REAL, "1.37", NULL, NULL, NULL, NULL, NULL, "set WAG time (branch length) to ", 0}, {"--yfile", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save xy file of Yu/Altschul root eqn to ", 0}, {"--mfile", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "save WAG score matrix to ", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "Yu/Altschul experiment driver for scorematrix module"; /* yualtschul_graph_dump() * Dump an XY plot of (\sum Y -1) vs. lambda for a score matrix. * X-axis of graph starts at , ends at , stepping by . */ static int yualtschul_graph_dump(FILE *ofp, ESL_SCOREMATRIX *S, double scale, double lambda0, double lambda1, double stepsize) { struct yualtschul_params p; int a,b; double fx; double lambda; /* Set up a bisection method to find lambda */ p.S = esl_dmatrix_Create(S->K, S->K); p.M = esl_dmatrix_Create(S->K, S->K); p.Y = esl_dmatrix_Create(S->K, S->K); for (a = 0; a < S->K; a++) for (b = 0; b < S->K; b++) p.S->mx[a][b] = (double) S->s[a][b]; for (lambda = lambda0; lambda <= lambda1; lambda += stepsize) { yualtschul_func(lambda/scale, &p, &fx); fprintf(ofp, "%f %f\n", lambda, fx); } fprintf(ofp, "&\n"); fprintf(ofp, "%f 0.0\n", lambda0); fprintf(ofp, "%f 0.0\n", lambda1); fprintf(ofp, "&\n"); esl_dmatrix_Destroy(p.S); esl_dmatrix_Destroy(p.M); esl_dmatrix_Destroy(p.Y); return 0; } int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); /* protein matrices 20x20 */ ESL_DMATRIX *Q = esl_dmatrix_Create(abc->K, abc->K); /* WAG rate matrix */ ESL_DMATRIX *P0 = esl_dmatrix_Create(abc->K, abc->K); /* p_ij joint probabilities calculated from WAG */ double *wagpi = malloc(sizeof(double) * abc->K); ESL_SCOREMATRIX *S0 = esl_scorematrix_Create(abc); /* score matrix calculated from WAG p_ij's */ double lambda0 = esl_opt_GetReal(go, "-l"); double t = esl_opt_GetReal(go, "-t"); double scale = esl_opt_GetReal(go, "-s"); char *yfile = esl_opt_GetString(go, "--yfile"); char *mfile = esl_opt_GetString(go, "--mfile"); ESL_DMATRIX *P = NULL; /* p_ij's from Yu/Altschul reverse eng of S0 */ double *fi = NULL; double *fj = NULL; double lambda; double D; int status; /* Calculate an integer score matrix from a probabilistic rate matrix (WAG) */ esl_scorematrix_SetWAG(S0, lambda0/scale, t); esl_composition_WAG(wagpi); printf("WAG matrix calculated at t=%.3f, lambda=%.4f (/%.1f)\n", t, lambda0, scale); /* Save the matrix, if asked */ if (mfile) { FILE *ofp = NULL; if ( (ofp = fopen(mfile, "w")) == NULL) esl_fatal("failed to open %s for writing scorematrix", mfile); strcpy(S0->outorder, "ARNDCQEGHILKMFPSTWYV"); esl_scorematrix_Write(ofp, S0); fclose(ofp); } /* Because of integer roundoff, the actual probability basis is a little different */ esl_scorematrix_ProbifyGivenBG(S0, wagpi, wagpi, &lambda, NULL); printf("Integer roundoff shifts implicit lambda (given wagpi's) to %.4f (/%.1f)\n", lambda*scale, scale); printf("Scores in matrix range from %d to %d\n", esl_scorematrix_Min(S0), esl_scorematrix_Max(S0)); esl_scorematrix_RelEntropy(S0, wagpi, wagpi, lambda, &D); printf("Relative entropy: %.3f bits\n", D); if (yfile) { FILE *ofp = NULL; if ( (ofp = fopen(yfile, "w")) == NULL) esl_fatal("failed to open XY file %s for writing\n", yfile); yualtschul_graph_dump(ofp, S0, scale, 0.01, 1.0, 0.0001); fclose(ofp); printf("XY plot of Yu/Altschul rootfinding saved to : %s\n", yfile); } status = esl_scorematrix_Probify(S0, &P, &fi, &fj, &lambda); printf("Yu/Altschul reverse engineering gives lambda = %.4f (/%.1f)\n", lambda*scale, scale); //printf("fi's are: \n"); esl_vec_DDump(stdout, fi, S0->K, abc->sym); if (status != eslOK) printf("however, the solution is INVALID!\n"); else printf("and the joint and marginals are a valid probabilistic basis.\n"); free(fj); free(fi); esl_scorematrix_Destroy(S0); esl_dmatrix_Destroy(P); esl_dmatrix_Destroy(P0); esl_dmatrix_Destroy(Q); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /* eslSCOREMATRIX_EXPERIMENT */ /*------------------ end, experiment driver ---------------------*/ /***************************************************************** * 8. Utility programs *****************************************************************/ /* Reformat a score matrix file into Easel internal digital alphabet order, suitable for making * one of the static data structures in our section of preloaded matrices. */ #ifdef eslSCOREMATRIX_UTILITY1 /* gcc -g -Wall -o utility -I. -L. -DeslSCOREMATRIX_UTILITY1 esl_scorematrix.c -leasel -lm ./utility BLOSUM62 */ #include "easel.h" #include "esl_alphabet.h" #include "esl_scorematrix.h" #include "esl_fileparser.h" int main(int argc, char **argv) { char *infile = argv[1]; ESL_ALPHABET *abc; ESL_FILEPARSER *efp; ESL_SCOREMATRIX *S; int x,y; abc = esl_alphabet_Create(eslAMINO); if (esl_fileparser_Open(infile, NULL, &efp) != eslOK) esl_fatal("Failed to open %s\n", infile); if (esl_scorematrix_Read(efp, abc, &S) != eslOK) esl_fatal("parse failed: %s", efp->errbuf); printf(" /*"); for (y = 0; y < abc->Kp; y++) printf(" %c ", abc->sym[y]); printf(" */\n"); for (x = 0; x < abc->Kp; x++) { printf(" { "); for (y = 0; y < abc->Kp; y++) printf("%3d, ", S->s[x][y]); printf(" }, /* %c */\n", abc->sym[x]); } esl_scorematrix_Destroy(S); esl_fileparser_Close(efp); esl_alphabet_Destroy(abc); return eslOK; } #endif /*eslSCOREMATRIX_UTILITY1*/ /* Utility 2: joint or conditional probabilities from BLOSUM62 (depending on how compiled) */ #ifdef eslSCOREMATRIX_UTILITY2 /* gcc -g -Wall -o utility2 -I. -L. -DeslSCOREMATRIX_UTILITY2 esl_scorematrix.c -leasel -lm ./utility2 */ #include "easel.h" #include "esl_alphabet.h" #include "esl_dmatrix.h" #include "esl_scorematrix.h" int main(int argc, char **argv) { ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); ESL_SCOREMATRIX *S = esl_scorematrix_Create(abc); ESL_DMATRIX *Q = NULL; double *fa = NULL; double *fb = NULL; double slambda; int a,b; esl_scorematrix_Set("BLOSUM62", S); esl_scorematrix_Probify(S, &Q, &fa, &fb, &slambda); #if 0 esl_scorematrix_JointToConditionalOnQuery(abc, Q); /* Q->mx[a][b] is now P(b | a) */ #endif esl_dmatrix_Dump(stdout, Q, abc->sym, abc->sym); esl_dmatrix_Destroy(Q); esl_scorematrix_Destroy(S); esl_alphabet_Destroy(abc); return eslOK; } #endif /*eslSCOREMATRIX_UTILITY2*/ /***************************************************************** * 9. Unit tests. *****************************************************************/ #ifdef eslSCOREMATRIX_TESTDRIVE #include static void utest_ReadWrite(ESL_ALPHABET *abc, ESL_SCOREMATRIX *S) { char tmpfile[16] = "esltmpXXXXXX"; FILE *fp = NULL; ESL_SCOREMATRIX *S2 = NULL; ESL_FILEPARSER *efp = NULL; if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal("failed to open tmp file"); if (esl_scorematrix_Write(fp, S) != eslOK) esl_fatal("failed to write test matrix"); fclose(fp); if (esl_fileparser_Open(tmpfile, NULL, &efp) != eslOK) esl_fatal("failed to open tmpfile containing BLOSUM62 matrix"); if (esl_scorematrix_Read(efp, abc, &S2) != eslOK) esl_fatal("failed to read tmpfile containing BLOSUM62 matrix"); if (esl_scorematrix_Compare(S, S2) != eslOK) esl_fatal("the two test matrices aren't identical"); remove(tmpfile); esl_fileparser_Close(efp); esl_scorematrix_Destroy(S2); return; } static void utest_ProbifyGivenBG(ESL_SCOREMATRIX *S0, ESL_DMATRIX *P0, double *wagpi, double lambda0) { char *msg = "ProbifyGivenBG() unit test failed"; ESL_DMATRIX *P = NULL; double sum = 0.0; double lambda; int a,b; if (esl_scorematrix_ProbifyGivenBG(S0, wagpi, wagpi, &lambda, &P) != eslOK) esl_fatal(msg); if (esl_DCompare(lambda0, lambda, 1e-3) != eslOK) esl_fatal("lambda is wrong"); for (a = 0; a < 20; a++) /* you can't just call esl_dmx_Sum(P), because P includes */ for (b = 0; b < 20; b++) /* marginalized degeneracies */ sum += P->mx[a][b]; if (esl_DCompare(sum, 1.0, 1e-9) != eslOK) esl_fatal("P doesn't sum to 1"); for (a = 0; a < 20; a++) /* for the same reason, you can't dmatrix_Compare P and P0 */ for (b = 0; b < 20; b++) if (esl_DCompare(P0->mx[a][b], P->mx[a][b], 1e-2) != eslOK) esl_fatal("P is wrong"); esl_dmatrix_Destroy(P); return; } /* The scores->pij reverse engineering engine works with scores in doubles, * so we can separate effects of rounding to integers in standard * score matrices. */ static void utest_yualtschul(ESL_DMATRIX *P0, double *wagpi) { char *msg = "reverse engineering engine test failed"; ESL_DMATRIX *S = NULL; /* original score matrix, in double form, not rounded to ints (calculated from P, fi, fj) */ ESL_DMATRIX *P = NULL; /* backcalculated P_ij joint probabilities */ double *fi = NULL; /* backcalculated f_i query composition */ double *fj = NULL; /* backcalculated f'_j target composition */ double lambda0; /* true lambda */ double lambda; /* backcalculated lambda */ double sum = 0.0; int i,j; /* Allocations */ if (( S = esl_dmatrix_Create(20, 20)) == NULL) esl_fatal(msg); if (( P = esl_dmatrix_Create(20, 20)) == NULL) esl_fatal(msg); if ((fi = malloc(sizeof(double) * 20)) == NULL) esl_fatal(msg); if ((fj = malloc(sizeof(double) * 20)) == NULL) esl_fatal(msg); /* Make a WAG-based score matrix in double-precision, without rounding to integers */ lambda0 = 0.3; for (i = 0; i < 20; i++) for (j = 0; j < 20; j++) S->mx[i][j] = log(P0->mx[i][j] / (wagpi[i] * wagpi[j])) / lambda0; /* Reverse engineer it in double precision */ if ( yualtschul_engine(S, P, fi, fj, &lambda) != eslOK) esl_fatal("reverse engineering engine failed"); /* Validate the solution (expect more accuracy from this than from integer scores) */ if (esl_DCompare(lambda0, lambda, 1e-4) != eslOK) esl_fatal("failed to get right lambda"); for (i = 0; i < 20; i++) /* you can't just call esl_dmx_Sum(P), because P includes */ for (j = 0; j < 20; j++) /* marginalized degeneracies */ sum += P->mx[i][j]; if (esl_DCompare(sum, 1.0, 1e-6) != eslOK) esl_fatal("reconstructed P doesn't sum to 1"); for (i = 0; i < 20; i++) /* for the same reason, you can't dmatrix_Compare P and P0 */ for (j = 0; j < 20; j++) if (esl_DCompare(P0->mx[i][j], P->mx[i][j], 1e-2) != eslOK) esl_fatal("failed to recover correct P_ij"); for (i = 0; i < 20; i++) { if (esl_DCompare(fi[i], fj[i], 1e-6) != eslOK) esl_fatal("background fi, fj not the same"); if (esl_DCompare(wagpi[i], fi[i], 1e-3) != eslOK) esl_fatal("failed to reconstruct WAG backgrounds"); } free(fj); free(fi); esl_dmatrix_Destroy(S); esl_dmatrix_Destroy(P); return; } /* utest_Probify() * This tests Probify on a matrix that was calculated from probabilities in the first * place. It verifies that the reconstructed Pij matrix matches the original Pij's * that the score matrix was built from. */ static void utest_Probify(ESL_SCOREMATRIX *S0, ESL_DMATRIX *P0, double *wagpi, double lambda0) { ESL_DMATRIX *P = NULL; double *fi = NULL; double *fj = NULL; double lambda; /* reconstructed lambda */ double sum = 0.0; int i,j; if (esl_scorematrix_Probify(S0, &P, &fi, &fj, &lambda) != eslOK) esl_fatal("reverse engineering failed"); /* Validate the solution, gingerly (we expect significant error due to integer roundoff) */ if (esl_DCompare(lambda0, lambda, 0.01) != eslOK) esl_fatal("failed to get right lambda"); for (i = 0; i < 20; i++) /* you can't just call esl_dmx_Sum(P), because P includes */ for (j = 0; j < 20; j++) /* marginalized degeneracies */ sum += P->mx[i][j]; if (esl_DCompare(sum, 1.0, 1e-6) != eslOK) esl_fatal("reconstructed P doesn't sum to 1"); for (i = 0; i < 20; i++) /* for the same reason, you can't dmatrix_Compare P and P0 */ for (j = 0; j < 20; j++) if (esl_DCompare(P0->mx[i][j], P->mx[i][j], 0.1) != eslOK) esl_fatal("failed to recover correct P_ij"); free(fj); free(fi); esl_dmatrix_Destroy(P); return; } /* utest_ProbifyBLOSUM() * This tests Probify on a score matrix where the original Pij's are treated as * unknown. It verifies that if you create a new score matrix from the reconstructed * Pij's, you get the original score matrix back. BLOSUM62 makes a good example, * hence the name. */ static void utest_ProbifyBLOSUM(ESL_SCOREMATRIX *BL62) { char *msg = "failure in ProbifyBLOSUM() unit test"; ESL_DMATRIX *P = NULL; double *fi = NULL; double *fj = NULL; double lambda; ESL_SCOREMATRIX *S2 = NULL; if (( S2 = esl_scorematrix_Clone(BL62)) == NULL) esl_fatal(msg); if (esl_scorematrix_Probify(BL62, &P, &fi, &fj, &lambda) != eslOK) esl_fatal(msg); if (esl_scorematrix_SetFromProbs(S2, lambda, P, fi, fj) != eslOK) esl_fatal(msg); if (esl_scorematrix_CompareCanon(BL62, S2) != eslOK) esl_fatal(msg); free(fj); free(fi); esl_scorematrix_Destroy(S2); esl_dmatrix_Destroy(P); return; } #endif /*eslSCOREMATRIX_TESTDRIVE*/ /***************************************************************** * 10. Test driver. *****************************************************************/ /* gcc -g -Wall -I. -L. -o test -DeslSCOREMATRIX_TESTDRIVE esl_scorematrix.c -leasel -lm ./test */ #ifdef eslSCOREMATRIX_TESTDRIVE #include "easel.h" #include "esl_scorematrix.h" int main(int argc, char **argv) { ESL_ALPHABET *abc = NULL; /* amino acid alphabet */ ESL_SCOREMATRIX *BL62= NULL; /* BLOSUM62 matrix */ ESL_SCOREMATRIX *S0 = NULL; /* original score matrix (calculated from P, fi, fj) */ ESL_DMATRIX *P0 = NULL; /* original P_ij joint probabilities */ ESL_DMATRIX *Q = NULL; /* WAG rate matrix */ double lambda0; /* true lambda used to construct S */ double t; int i,j; static double wagpi[20]; /* Allocations */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("allocation of alphabet failed"); if ((BL62= esl_scorematrix_Create(abc)) == NULL) esl_fatal("allocation of BLOSUM62 failed"); if ((S0 = esl_scorematrix_Create(abc)) == NULL) esl_fatal("allocation of scorematrix failed"); if ((P0 = esl_dmatrix_Create(abc->K, abc->K)) == NULL) esl_fatal("P allocation failed"); if ((Q = esl_dmatrix_Create(abc->K, abc->K)) == NULL) esl_fatal("Q allocation failed"); /* Make a BLOSUM matrix */ if ( esl_scorematrix_Set("BLOSUM62", BL62) != eslOK) esl_fatal("failed to set a BLOSUM matrix"); /* Make a WAG-based score matrix with small lambda. */ lambda0 = 0.00635; t = 2.0; esl_scorematrix_SetWAG(S0, lambda0, t); esl_composition_WAG(wagpi); /* Redo some calculations to get the known probabilistic basis of that S */ if ( esl_rmx_SetWAG(Q, wagpi) != eslOK) esl_fatal("failed to set WAG"); if ( esl_dmx_Exp(Q, t, P0) != eslOK) esl_fatal("failed to exponentiate WAG"); for (i = 0; i < 20; i++) for (j = 0; j < 20; j++) P0->mx[i][j] *= wagpi[i]; /* P_ij = P(j|i) pi_i */ /* The unit test battery */ utest_ReadWrite(abc, BL62); utest_ReadWrite(abc, S0); utest_ProbifyGivenBG(S0, P0, wagpi, lambda0); utest_yualtschul(P0, wagpi); utest_Probify(S0, P0, wagpi, lambda0); utest_ProbifyBLOSUM(BL62); esl_dmatrix_Destroy(Q); esl_dmatrix_Destroy(P0); esl_scorematrix_Destroy(BL62); esl_scorematrix_Destroy(S0); esl_alphabet_Destroy(abc); return 0; } #endif /*eslSCOREMATRIX_TESTDRIVE*/ /***************************************************************** * 11. Example program *****************************************************************/ #ifdef eslSCOREMATRIX_EXAMPLE /*::cexcerpt::scorematrix_example::begin::*/ #include "easel.h" #include "esl_alphabet.h" #include "esl_fileparser.h" #include "esl_dmatrix.h" #include "esl_vectorops.h" #include "esl_scorematrix.h" int main(int argc, char **argv) { char *scorefile = argv[1]; ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); ESL_FILEPARSER *efp = NULL; ESL_SCOREMATRIX *S = NULL; ESL_DMATRIX *P1 = NULL; /* implicit probability basis, bg unknown */ ESL_DMATRIX *P2 = NULL; /* implicit probability basis, bg known */ double *fi = NULL; double *fj = NULL; double lambda, D, E; int vstatus; /* Input an amino acid score matrix from a file. */ if ( esl_fileparser_Open(scorefile, NULL, &efp) != eslOK) esl_fatal("failed to open score file %s", scorefile); if ( esl_scorematrix_Read(efp, abc, &S) != eslOK) esl_fatal("failed to read matrix from %s", scorefile); esl_fileparser_Close(efp); /* Try to reverse engineer it to get implicit probabilistic model. This may fail! */ vstatus = esl_scorematrix_Probify(S, &P1, &fi, &fj, &lambda); if (vstatus == eslOK) { /* Print some info, and the joint probabilities. */ esl_scorematrix_RelEntropy (S, fi, fj, lambda, &D); esl_scorematrix_ExpectedScore(S, fi, fj, &E); printf("By Yu/Altschul (2003,2005) procedure:\n"); printf("Lambda = %.4f\n", lambda); printf("Relative entropy = %.4f bits\n", D); printf("Expected score = %.4f bits\n", E * lambda * eslCONST_LOG2R); printf("p_ij's are:\n"); esl_dmatrix_Dump(stdout, P1, abc->sym, abc->sym); printf("fi's are:\n"); esl_vec_DDump(stdout, fi, S->K, abc->sym); printf("fj's are:\n"); esl_vec_DDump(stdout, fj, S->K, abc->sym); printf("============================================================\n\n"); } else { printf("Yu/Altschul procedure FAILS to find a valid implicit probability basis!\n"); printf("Lambda = %.4f\n", lambda); printf("p_ij's are:\n"); esl_dmatrix_Dump(stdout, P1, abc->sym, abc->sym); printf("fi's are:\n"); esl_vec_DDump(stdout, fi, S->K, abc->sym); printf("fj's are:\n"); esl_vec_DDump(stdout, fj, S->K, abc->sym); printf("============================================================\n\n"); esl_composition_BL62(fi); esl_composition_BL62(fj); } /* Now reverse engineer it again, this time using "known" background probs */ esl_scorematrix_ProbifyGivenBG(S, fi, fj, &lambda, &P2); esl_scorematrix_RelEntropy (S, fi, fj, lambda, &D); esl_scorematrix_ExpectedScore(S, fi, fj, &E); printf("By solving for lambda from given background frequencies:\n"); printf("Lambda = %.4f\n", lambda); printf("Relative entropy = %.4f bits\n", D); printf("Expected score = %.4f bits\n", E * lambda * eslCONST_LOG2R); printf("p_ij's are:\n"); esl_dmatrix_Dump(stdout, P2, abc->sym, abc->sym); printf("fi's are:\n"); esl_vec_DDump(stdout, fi, S->K, abc->sym); printf("fj's are:\n"); esl_vec_DDump(stdout, fj, S->K, abc->sym); printf("============================================================\n\n"); /* Now recalculate a score matrix from the probabilistic basis */ printf("Before:\n"); esl_scorematrix_Write(stdout, S); printf("After:\n"); esl_scorematrix_SetFromProbs(S, lambda, P2, fi, fj); esl_scorematrix_Write(stdout, S); free(fi); free(fj); esl_dmatrix_Destroy(P1); esl_dmatrix_Destroy(P2); esl_scorematrix_Destroy(S); esl_alphabet_Destroy(abc); return 0; } /*::cexcerpt::scorematrix_example::end::*/ #endif /*eslSCOREMATRIX_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_scorematrix.c 860 2013-04-05 01:43:50Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_scorematrix.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_gamma.tex0000664361611702660230000000325712473612606016041 0ustar wheelerteddy \begin{tabular}{lcll}\hline Variate & $x$ & \ccode{double} & $\mu \leq x < \infty$ \\ Location & $\mu$ & \ccode{double} & $-\infty < \mu < \infty$\\ Scale & $\lambda$ & \ccode{double} & $\lambda > 0$ \\ Shape & $\tau$ & \ccode{double} & $\tau > 0$ \\ \hline \end{tabular} The probability density function (PDF) is: \begin{equation} P(X=x) = \frac{\lambda^{\tau}}{\Gamma(\tau)} (x-\mu)^{\tau-1} e^{-\lambda (x - \mu)} \label{eqn:gamma_pdf} \end{equation} The cumulative distribution function (CDF) does not have an analytical expression. It is calculated numerically, using the incomplete Gamma function (\ccode{esl\_stats\_IncompleteGamma()}). The ``standard Gamma distribution'' has $\mu = 0$, $\lambda = 1$. \subsection{Sampling} \subsection{Parameter estimation} \subsubsection{Complete data; known location} We usually know the location $\mu$. It is often 0, or in the case of fitting a gamma density to a right tail, we know the threshold $\mu$ at which we truncated the tail. Given a complete dataset of $N$ observed samples $x_i$ ($i=1..N$) and a \emph{known} location parameter $\mu$, maximum likelihood estimation of $\lambda$ and $\tau$ is performed by first solving this rootfinding equation for $\hat{\tau}$ by binary search: \begin{equation} \log \hat{\tau} - \Psi(\hat{\tau}) - \log \left[ \frac{1}{N} \sum_{i=1}^{N} (x_i - \mu) \right] + \frac{1}{N} \sum_{i=1}^N \log (x_i - \mu) \label{eqn:gamma_tau_root} \end{equation} then using that to obtain $\hat{\lambda}$: \begin{equation} \hat{\lambda} = \frac{N \hat{\tau}} {\sum_{i=1}^{N} (x_i - \mu)} \end{equation} Equation~\ref{eqn:gamma_tau_root} decreases as $\tau$ increases. hmmer-3.1b2/easel/esl_msafile2.c0000664361611702660230000020746712473612607016115 0ustar wheelerteddy/* Memory-efficient multiple sequence alignment i/o from Pfam format * * Legacy interface, now that ESLX_MSAFILE is rewritten. Just enough * of the old interface is retained to support --small option in * various tools, for reading Pfam format in memory-efficient ways. * * Table of contents: * 1. The ESL_MSAFILE2 object * 2. Memory efficient read/write in Pfam format * 3. Legacy Stockholm parsing tools * 4. Unit tests * 5. Test driver * 6. Copyright and license information. * * to-do: * :: add memory-efficient interface in ESLX_MSAFILE * :: add memory-efficient ESL_MSA w/ API * :: add space-efficient MSA file format */ #include #include #include #include #include "esl_msa.h" /* ESL_MSA structure */ #include "esl_msafile.h" /* preferred msafile interface, inc. fmt codes shared w/ ESL_MSAFILE2 */ #include "esl_msafile2.h" /* legacy ESL_MSAFILE2 interface */ #include "esl_vectorops.h" #include "esl_wuss.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" /* digital alphabet */ #endif #ifdef eslAUGMENT_KEYHASH #include "esl_keyhash.h" /* string hashes, for mapping unique seq names */ #endif #ifdef eslAUGMENT_SSI #include "esl_ssi.h" /* indexing large flatfiles on disk */ #endif static int msafile2_getline(ESL_MSAFILE2 *afp); static int is_blankline(char *s); static int parse_gf(ESL_MSA *msa, char *buf); static int parse_gc(ESL_MSA *msa, char *buf); static int parse_comment(ESL_MSA *msa, char *buf); /***************************************************************** *# 1. The ESL_MSAFILE2 object *****************************************************************/ static int msafile2_open(const char *filename, const char *env, ESL_MSAFILE2 **ret_afp); /* Function: esl_msafile2_Open() * Synopsis: Open an MSA file for small-memory input. * * Purpose: Open an alignment database file , which must be * in Pfam format (), and prepare for * reading information through the legacy small-memory * interface. Return the opened file pointer in . * * There are one or two special cases for . If * is "-", then the alignment is read from * . If ends in ".gz", then the file is * assumed to be compressed by gzip, and it is opened as a * pipe from . (Auto-decompression of gzipp'ed files * is only available on POSIX-compliant systems w/ popen(), when * is defined at compile-time.) * * If is non-NULL, then we look for in * one or more directories in a colon-delimited list * that is the value of the environment variable . * For example, if we had * * in the environment, a profile HMM application * might pass "HMMERDB" as . * * Returns: on success, and is set to point at * an open . Caller frees this file pointer with * . * * Returns if cannot be opened. * * Throws: on allocation failure. * * Note: Implemented as a wrapper around msafile2_open(), because * esl_msafile2_OpenDigital() shares almost all the same code. */ int esl_msafile2_Open(const char *filename, const char *env, ESL_MSAFILE2 **ret_afp) { return msafile2_open(filename, env, ret_afp); } /* Function: esl_msafile2_Close() * Synopsis: Closes an open MSA file. * * Purpose: Close an open . */ void esl_msafile2_Close(ESL_MSAFILE2 *afp) { if (afp == NULL) return; #ifdef HAVE_POPEN /* gzip functionality */ if (afp->do_gzip && afp->f != NULL) pclose(afp->f); #endif if (!afp->do_gzip && ! afp->do_stdin && afp->f != NULL) fclose(afp->f); if (afp->fname != NULL) free(afp->fname); if (afp->buf != NULL) free(afp->buf); #ifdef eslAUGMENT_SSI if (afp->ssi != NULL) esl_ssi_Close(afp->ssi); #endif /* eslAUGMENT_SSI*/ if (afp->msa_cache != NULL) esl_msa_Destroy(afp->msa_cache); free(afp); } #ifdef eslAUGMENT_ALPHABET /* Function: esl_msafile2_OpenDigital() * Synopsis: Open an msa file for digital input. * * Purpose: Same as , except the alignment file * will be read into a digitized internal representation, * using internal alphabet , rather than the default * internal ASCII text representation. * * The file must be in Pfam format (). * * Args: abc - pointer to internal alphabet * filename - name of alignment data file to open; * if "*.gz", attempt to read through using ; * or "-" for stdin * env - NULL, or the name of an environment variable from which * to retrieve a colon-delimited directory list to search * for in. (e.g. "HMMERDB") * ret_msafp - RETURN: open . * * Returns: on success, and is set to point at * an open . Caller frees this file pointer with * . * * if cannot be opened; * if doesn't seem to be in Pfam format. * * Throws: on allocation failure. * if format autodetection is attempted on * stdin or a gzip -dc pipe. */ int esl_msafile2_OpenDigital(const ESL_ALPHABET *abc, const char *filename, const char *env, ESL_MSAFILE2 **ret_msafp) { ESL_MSAFILE2 *msafp; int status; if ((status = msafile2_open(filename, env, &msafp)) != eslOK) return status; msafp->abc = abc; msafp->do_digital = TRUE; *ret_msafp = msafp; return eslOK; } #endif /*eslAUGMENT_ALPHABET*/ /* msafile2_open(): * this is the routine that actually opens an ESL_MSAFILE2; * esl_msafile2_Open() and esl_msafile2_OpenDigital() are wrappers around it. */ static int msafile2_open(const char *filename, const char *env, ESL_MSAFILE2 **ret_afp) { ESL_MSAFILE2 *afp = NULL; char *ssifile = NULL; char *envfile = NULL; char *cmd = NULL; int n = strlen(filename); int status; ESL_ALLOC(afp, sizeof(ESL_MSAFILE2)); afp->f = NULL; afp->fname = NULL; afp->linenumber = 0; afp->errbuf[0] = '\0'; afp->buf = NULL; afp->buflen = 0; afp->do_gzip = FALSE; afp->do_stdin = FALSE; afp->format = eslMSAFILE_PFAM; /* legacy interface is stripped down to support ONLY --small, Pfam */ afp->do_digital = FALSE; afp->abc = NULL; afp->ssi = NULL; afp->msa_cache = NULL; if (strcmp(filename, "-") == 0) { afp->f = stdin; afp->do_stdin = TRUE; if ((status = esl_strdup("[STDIN]", -1, &(afp->fname))) != eslOK) goto ERROR; } #ifdef HAVE_POPEN /* popen(), pclose() aren't portable to non-POSIX systems; * disable this section in strict ANSI C mode. */ /* tricky: if n= length of a string s, then * s+n-i repositions pointer s at the last i chars * of the string. */ else if (n > 3 && strcmp(filename+n-3, ".gz") == 0) { /* Note that popen() will return "successfully" * if file doesn't exist, because gzip works fine * and prints an error! So we have to check for * existence of file ourself. */ if (! esl_FileExists(filename)) { status = eslENOTFOUND; goto ERROR; } ESL_ALLOC(cmd, sizeof(char) * (n+1+strlen("gzip -dc "))); sprintf(cmd, "gzip -dc %s", filename); if ((afp->f = popen(cmd, "r")) == NULL) { status = eslENOTFOUND; goto ERROR; } if ((status = esl_strdup(filename, n, &(afp->fname))) != eslOK) goto ERROR; afp->do_gzip = TRUE; } #endif /*HAVE_POPEN*/ else /* Normal file open or env file open: set ssifile */ { /* When we open a file, it may be either in the current * directory, or in the directory indicated by the env * argument - and we construct an SSI filename accordingly. * (Whether or not we're SSI augmented, in fact, for simplicity.) */ if ((afp->f = fopen(filename, "r")) != NULL) { if (esl_strdup(filename, n, &ssifile) != eslOK) goto ERROR; if (esl_strcat(&ssifile, n, ".ssi", 4) != eslOK) goto ERROR; if ((status = esl_strdup(filename, n, &(afp->fname))) != eslOK) goto ERROR; } else if (esl_FileEnvOpen(filename, env, &(afp->f), &envfile) == eslOK) { if (esl_strdup(envfile, n, &ssifile) != eslOK) goto ERROR; if (esl_strcat(&ssifile, n, ".ssi", 4) != eslOK) goto ERROR; if ((status = esl_strdup(envfile, n, &(afp->fname))) != eslOK) goto ERROR; } else { status = eslENOTFOUND; goto ERROR;} } #ifdef eslAUGMENT_SSI /* If augmented by SSI indexing: * Open the SSI index file. If it doesn't exist, or * it's corrupt, or some error happens, afp->ssi stays NULL. * We should warn, probably, or provide some way for caller to * to know that we've opened the index successfully or not. */ status = esl_ssi_Open(ssifile, &(afp->ssi)); #endif if (envfile != NULL) free(envfile); if (ssifile != NULL) free(ssifile); if (cmd != NULL) free(cmd); *ret_afp = afp; return eslOK; ERROR: if (envfile != NULL) free(envfile); if (ssifile != NULL) free(ssifile); if (cmd != NULL) free(cmd); if (afp != NULL) esl_msafile2_Close(afp); *ret_afp = NULL; return status; } /*--------------- end, ESL_MSAFILE2 object ----------------------*/ /*------------------ end, digital mode -------------------------*/ /****************************************************************************** * 2. Memory efficient routines for PFAM format *****************************************************************************/ static int get_pp_idx(ESL_ALPHABET *abc, char ppchar); static int gapize_string(char *src_str, int64_t src_len, int64_t dst_len, int *ngapA, char gapchar, char **ret_dst_str); static void shrink_string(char *str, const int *useme, int len); static int determine_spacelen(char *s); /* Function: esl_msafile2_ReadInfoPfam() * Synopsis: Read Pfam formatted MSA information but not sequence data. * * Purpose: Read the next alignment from an open Stockholm Pfam * (non-interleaved, one line per seq) format alignment file * and store all non-sequence information (comments, * GF annotation and GC annotation) in a new msa object. * * This function is not as rigorous about validating the * input msa as the other read functions that store the full * alignment. Here, we only verify that there is only one * line for the first sequence read. Verifying that all * sequences are only one line would require storing and * looking up all sequence names. * * Many optional return values () allow this function * to serve the diverse needs of the miniapps that can run * in a memory-efficient mode (esl-alimerge, esl-alimask, * esl-alistat, esl-ssdraw). For any that are unwanted, pass * . * * Args: afp - open alignment file pointer * listfp - if non-NULL, dump each sequence name we read * to listfp, separated by newlines * abc - alphabet to use, only nec and used if one * of the opt_*_ct arrays is non-NULL * known_alen - known length of the alignment, -1 if unknown * must not be -1, if known_rf != NULL or * known_ss_cons != NULL. * known_rf - known RF annot. (msa->rf) for this alignment, * might be known from prev call of this func, * for example. NULL if unknown. * known_ss_cons - the known SS_cons annotation (msa->ss_cons) * for this alignment, NULL if unknown. * ret_msa - RETURN: msa with comments, GC, GF * annotation but no sequence info (nor GS, GR), * pass NULL if not wanted. * opt_nseq - optRETURN: number of sequences in msa * opt_alen - optRETURN: length of first aligned sequence * opt_ngs - optRETURN: number of GS lines in alignment * opt_maxname - optRETURN: maximum seqname length * opt_maxgf - optRETURN: maximum GF tag length * opt_maxgc - optRETURN: maximum GC tag length * opt_maxgr - optRETURN: maximum GR tag length * opt_abc_ct - optRETURN: [0..apos..alen-1][0..abc->K] * per position count of each symbol in abc over all seqs * opt_pp_ct - optRETURN: [0..apos..alen-1][0..11], * per position count of PPs over all seqs, * [11] is gaps, [10] is '*', [0-9] are '0'-'9' * opt_bp_ct - optRETURN: [0..apos..alen-1][0..abc->K-1][0..abc->K-1] * per position count of each possible basepair * in alignment, for pair apos:apos2, where * apos < apos2 and apos:apos2 form a basepair * in . If non-NULL, * must be non-NULL. * opt_spos_ct - optRETURN: [0..apos..alen-1] per position count * of first nongap residue in each sequence, * ex: opt_spos_ct[100] = x means x seqs have their * first nongap residue at position 100 * opt_epos_ct - optRETURN: [0..apos..alen-1] same as opt_spos_ct, * except for final position instead of first * * Returns: on success. Returns if there are no more * alignments in , and is set to NULL and * are set to 0. * if parse fails because of a file format * problem, in which case errbuf> is set to contain a * formatted message that indicates the cause of the * problem, is set to and are set * to 0. * * Throws: on allocation error. * * Xref: ~nawrockie/notebook/9_1206_esl_msa_mem_efficient/ */ int esl_msafile2_ReadInfoPfam(ESL_MSAFILE2 *afp, FILE *listfp, ESL_ALPHABET *abc, int64_t known_alen, char *known_rf, char *known_ss_cons, ESL_MSA **ret_msa, int *opt_nseq, int64_t *opt_alen, int *opt_ngs, int *opt_maxname, int *opt_maxgf, int *opt_maxgc, int *opt_maxgr, double ***opt_abc_ct, double ***opt_pp_ct, double ****opt_bp_ct, int **opt_spos_ct, int **opt_epos_ct) { char *s; /* pointer to current character in afp */ int status; /* easel status code */ int status2; /* another easel status code */ ESL_MSA *msa = NULL; /* the msa we're creating */ int nseq = 0; /* number of sequences read */ int64_t alen = -1; /* length of the alignment */ int ngs = 0; /* number of GS lines read */ int maxname = 0; /* max length seq name */ int maxgf = 0; /* max length GF tag */ int maxgc = 0; /* max length GC tag */ int maxgr = 0; /* max length GR tag */ char *seqname; /* ptr to a sequence name */ int namelen; /* length of a sequence name */ char *first_seqname = NULL; /* name of first sequence read */ char *gf, *gc, *gr; /* for storing '#=GF', '#=GC', '#=GR', temporarily */ char *tag; /* a GC or GR tag */ int taglen; /* length of a tag */ char *text; /* text string */ int textlen; /* length of text string */ int i, x; /* counters */ int j; /* position for a right half of a bp */ int apos; /* counter over alignment positions */ double **abc_ct = NULL; /* [0..alen-1][0..abc->K] per position count of each residue in abc and gaps over all seqs */ double ***bp_ct = NULL; /* [0..alen-1][0..abc->Kp][0..abc->Kp], count of each possible base pair at each position, over all sequences, missing and nonresidues are *not counted* base pairs are indexed by 'i' for a base pair between positions i and j, where i < j. */ int nppvals = 12; /* '0'-'9' = 0-9, '*' = 10, gap = '11' */ double **pp_ct = NULL; /* [0..alen-1][0..nppvals-1] per position count of each possible PP char over all seqs */ int ppidx; /* index for 2nd dim of pp_ct array */ int *spos_ct = NULL; /* [0..alen-1] number of seqs that start (have first nongap residue) at each position */ int *epos_ct = NULL; /* [0..alen-1] number of seqs that end (have final nongap residue) at each position */ ESL_DSQ *tmp_dsq = NULL; /* temporary digitized sequence, only used if opt_abc_ct != NULL */ int *a2rf_map = NULL; /* [0..apos..known_alen-1] = rfpos, nongap RF position apos maps to, * -1 if apos is not a nongap RF position */ int *ct = NULL; /* 0..known_alen-1 base pair partners array for known_ss_cons */ char *ss_nopseudo = NULL; /* no-pseudoknot version of known_ss_cons */ if(afp->format != eslMSAFILE_PFAM) ESL_EXCEPTION(eslEINCONCEIVABLE, "only non-interleaved (1 line /seq, Pfam) Stockholm formatted files can be read in small memory mode"); if(opt_abc_ct != NULL && abc == NULL) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, abc == NULL, opt_abc_ct != NULL"); if(opt_pp_ct != NULL && abc == NULL) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, abc == NULL, opt_pp_ct != NULL"); if(opt_bp_ct != NULL && abc == NULL) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, abc == NULL, opt_bp_ct != NULL"); if(opt_spos_ct != NULL && abc == NULL) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, abc == NULL, opt_spos_ct != NULL"); if(opt_epos_ct != NULL && abc == NULL) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, abc == NULL, opt_epos_ct != NULL"); if(opt_spos_ct != NULL && known_alen == -1) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, opt_spos_ct != NULL, known_alen == -1"); if(opt_epos_ct != NULL && known_alen == -1) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, opt_epos_ct != NULL, known_alen == -1"); if(opt_bp_ct != NULL && known_ss_cons == NULL) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, known_ss_cons == NULL, opt_bp_ct != NULL"); if(known_rf != NULL && known_alen == -1) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, known_rf != NULL, known_alen == -1"); if(known_ss_cons != NULL && known_alen == -1) ESL_FAIL(eslEINVAL, afp->errbuf, "contract violation, known_ss_cons != NULL, known_alen == -1"); if (feof(afp->f)) { status = eslEOF; goto ERROR; } afp->errbuf[0] = '\0'; /* Preliminaries */ /* allocate and initialize spos_ct and epos_ct, if we'll return them */ if(opt_spos_ct != NULL || opt_epos_ct != NULL) { ESL_ALLOC(spos_ct, sizeof(int) * known_alen); ESL_ALLOC(epos_ct, sizeof(int) * known_alen); esl_vec_ISet(spos_ct, known_alen, 0); esl_vec_ISet(epos_ct, known_alen, 0); } /* if bp_ct != NULL, determine the ct array from the known_ss_cons, and allocate the bp_ct */ if(opt_bp_ct != NULL) { /* contract enforces that if this is true, known_ss_cons != NULL and known_alen != -1 */ /* get ct array which defines the consensus base pairs */ ESL_ALLOC(ct, sizeof(int) * (known_alen+1)); ESL_ALLOC(ss_nopseudo, sizeof(char) * (known_alen+1)); esl_wuss_nopseudo(known_ss_cons, ss_nopseudo); if ((status = esl_wuss2ct(ss_nopseudo, known_alen, ct)) != eslOK) ESL_FAIL(status, afp->errbuf, "consensus structure string is inconsistent."); ESL_ALLOC(bp_ct, sizeof(double **) * known_alen); for(apos = 0; apos < known_alen; apos++) { /* careful ct is indexed 1..alen, not 0..alen-1 */ if(ct[(apos+1)] > (apos+1)) { /* apos+1 is an 'i' in an i:j pair, where i < j */ ESL_ALLOC(bp_ct[apos], sizeof(double *) * (abc->Kp)); for(x = 0; x < abc->Kp; x++) { ESL_ALLOC(bp_ct[apos][x], sizeof(double) * (abc->Kp)); esl_vec_DSet(bp_ct[apos][x], abc->Kp, 0.); } } else { /* apos+1 is not an 'i' in an i:j pair, where i < j, set to NULL */ bp_ct[apos] = NULL; } } } /* end of preliminaries */ /* Initialize allocation of the MSA: * We won't store any sequence information, so initial blocksize is * 0 seqs of 0 length. */ #ifdef eslAUGMENT_ALPHABET if (afp->do_digital == TRUE && (msa = esl_msa_CreateDigital(afp->abc, 16, -1)) == NULL) { status = eslEMEM; goto ERROR; } #endif if (afp->do_digital == FALSE && (msa = esl_msa_Create(16, -1)) == NULL) { status = eslEMEM; goto ERROR; } if (msa == NULL) { status = eslEMEM; goto ERROR; } /* Check the magic Stockholm header line. * We have to skip blank lines here, else we perceive * trailing blank lines in a file as a format error when * reading in multi-record mode. */ do { if ((status = msafile2_getline(afp)) != eslOK) goto ERROR; /* includes EOF */ } while (is_blankline(afp->buf)); if (strncmp(afp->buf, "# STOCKHOLM 1.", 14) != 0) ESL_XFAIL(eslEFORMAT, afp->errbuf, "parse failed (line %d): missing \"# STOCKHOLM\" header", afp->linenumber); /* Read the alignment file one line at a time. */ while ((status2 = msafile2_getline(afp)) == eslOK) { s = afp->buf; while (*s == ' ' || *s == '\t') s++; /* skip leading whitespace */ if (*s == '#') { if(strncmp(s, "#=GF", 4) == 0) { if (ret_msa != NULL) { if ((status = parse_gf(msa, s)) != eslOK) ESL_XFAIL(status, afp->errbuf, "parse failed (line %d): bad #=GF line", afp->linenumber); } else if (opt_maxgf != NULL) { /* we need to parse out GF tag len to see if it is > maxgf */ s = afp->buf; if (esl_strtok (&s, " \t\n\r", &gf) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GF line", afp->linenumber); if (esl_strtok_adv(&s, " \t\n\r", &tag, &taglen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GF line", afp->linenumber); maxgf = ESL_MAX(maxgf, taglen); } } else if (strncmp(s, "#=GC", 4) == 0) { if (ret_msa != NULL) { if ((status = parse_gc(msa, s)) != eslOK) ESL_XFAIL(status, afp->errbuf, "parse failed (line %d): bad #=GC line", afp->linenumber); } else if (opt_maxgc != NULL) { /* we need to parse out GC tag len to see if it is > maxgc */ s = afp->buf; if (esl_strtok (&s, " \t\n\r", &gc) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GC line", afp->linenumber); if (esl_strtok_adv(&s, " \t\n\r", &tag, &taglen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GC line", afp->linenumber); maxgc = ESL_MAX(maxgc, taglen); } } else if (strncmp(s, "#=GS", 4) == 0) { ngs++; } else if (strncmp(s, "#=GR", 4) == 0) { if(opt_maxgr != NULL || opt_pp_ct != NULL) { s = afp->buf; if (esl_strtok (&s, " \t\n\r", &gr) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line", afp->linenumber); if (esl_strtok_adv(&s, " \t\n\r", &seqname, &namelen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line", afp->linenumber); if (esl_strtok_adv(&s, " \t\n\r", &tag, &taglen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line", afp->linenumber); maxgr = ESL_MAX(maxgr, taglen); if(opt_pp_ct != NULL) { if (strncmp(tag, "PP", 2) == 0) { if (esl_strtok_adv(&s, " \t\n\r", &text, &textlen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR PP line", afp->linenumber); /* verify, or set alignment length */ if(alen == -1) { /* first aligned text line, need to allocate pp_ct, and possibly abc_ct, spos_ct, epos_ct */ alen = textlen; if(known_alen != -1 && known_alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): known alen (%" PRId64 " passed in) != actual alen (%d)", afp->linenumber, known_alen, textlen); ESL_ALLOC(pp_ct, sizeof(double *) * alen); for(apos = 0; apos < alen; apos++) { ESL_ALLOC(pp_ct[apos], sizeof(double) * nppvals); esl_vec_DSet(pp_ct[apos], nppvals, 0.); } if(opt_abc_ct != NULL || opt_bp_ct != NULL) { ESL_ALLOC(tmp_dsq, (alen+2) * sizeof(ESL_DSQ)); } if(opt_abc_ct != NULL) { ESL_ALLOC(abc_ct, sizeof(double *) * alen); for(apos = 0; apos < alen; apos++) { ESL_ALLOC(abc_ct[apos], sizeof(double) * (abc->K+1)); esl_vec_DSet(abc_ct[apos], (abc->K+1), 0.); } } } else if(alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR PP line, len %d, expected %" PRId64, afp->linenumber, textlen, alen); for(apos = 0; apos < alen; apos++) { /* update appropriate PP count */ if((ppidx = get_pp_idx(abc, text[apos])) == -1) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR PP char: %c", afp->linenumber, text[apos]); pp_ct[apos][ppidx] += 1.; } } } } } else if (ret_msa != NULL && ((status = parse_comment(msa, s)) != eslOK)) { ESL_XFAIL(status, afp->errbuf, "parse failed (line %d): bad comment line", afp->linenumber); } } /* end of 'if (*s == '#')' */ else if (strncmp(s, "//", 2) == 0) break; /* normal way out */ else if (*s == '\n' || *s == '\r') continue; else { /* sequence line */ if(listfp != NULL || opt_maxname != NULL || opt_alen != NULL || opt_abc_ct != NULL || opt_spos_ct != NULL || opt_epos_ct != NULL) { /* we need to parse out the seqname */ s = afp->buf; if (esl_strtok_adv(&s, " \t\n\r", &seqname, &namelen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad sequence line", afp->linenumber); if (listfp != NULL) fprintf(listfp, "%s\n", seqname); maxname = ESL_MAX(maxname, namelen); if (opt_alen != NULL || opt_abc_ct != NULL || opt_spos_ct != NULL || opt_epos_ct != NULL) { /* we need to parse out the seq */ if (esl_strtok_adv(&s, " \t\n\r", &text, &textlen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad sequence line", afp->linenumber); /* if first aligned seq read, store it's name, else see if it is an additional line of first aseq */ if(nseq == 0) { if ((status = esl_strdup(seqname, -1, &(first_seqname))) != eslOK) goto ERROR; } else if(strcmp(first_seqname, seqname) == 0) { ESL_XFAIL(eslEFORMAT, afp->errbuf, "parse failed (line %d): two seqs with same name. Alignment may be in interleaved Stockholm. Reformat to Pfam with esl-reformat.", afp->linenumber); } if(alen == -1) { /* first aligned text line, need to allocate pp_ct, and possibly abc_ct, spos_ct, epos_ct */ alen = textlen; if(known_alen != -1 && known_alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): known alen (%" PRId64 " passed in) != actual alen (%d)", afp->linenumber, known_alen, textlen); if(opt_abc_ct != NULL || opt_bp_ct != NULL) { ESL_ALLOC(tmp_dsq, (alen+2) * sizeof(ESL_DSQ)); } if(opt_abc_ct != NULL) { ESL_ALLOC(abc_ct, sizeof(double *) * alen); for(apos = 0; apos < alen; apos++) { ESL_ALLOC(abc_ct[apos], sizeof(double) * (abc->K+1)); esl_vec_DSet(abc_ct[apos], (abc->K+1), 0.); } } if(opt_pp_ct != NULL) { ESL_ALLOC(pp_ct, sizeof(double *) * alen); for(apos = 0; apos < alen; apos++) { ESL_ALLOC(pp_ct[apos], sizeof(double) * nppvals); esl_vec_DSet(pp_ct[apos], nppvals, 0.); } } } else if(alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad aligned seq line, len %d, expected %" PRId64, afp->linenumber, textlen, alen); if(opt_abc_ct != NULL || opt_bp_ct != NULL) { /* update appropriate abc and/or bp count. first, digitize the text */ if((status = esl_abc_Digitize(abc, text, tmp_dsq)) != eslOK) ESL_XFAIL(status, afp->errbuf, "small mem parse failed (line %d): problem digitizing sequence", afp->linenumber); } if(opt_abc_ct != NULL) { for(apos = 0; apos < alen; apos++) { /* update appropriate abc count, careful, tmp_dsq ranges from 1..alen (not 0..alen-1) */ if((status = esl_abc_DCount(abc, abc_ct[apos], tmp_dsq[apos+1], 1.0)) != eslOK) ESL_XFAIL(status, afp->errbuf, "small mem parse failed (line %d): problem counting residue %d", afp->linenumber, apos+1); } } if(opt_bp_ct != NULL) { for(apos = 0; apos < alen; apos++) { /* update appropriate abc count, careful, tmp_dsq ranges from 1..alen (not 0..alen-1) */ if(bp_ct[apos] != NULL) { /* our flag for whether position (apos+1) is an 'i' in an i:j pair where i < j */ j = ct[apos+1] - 1; /* ct is indexed 1..alen */ bp_ct[apos][tmp_dsq[(apos+1)]][tmp_dsq[(j+1)]]++; } } } if(opt_spos_ct != NULL) { for(apos = 0; apos < alen; apos++) { /* find first non-gap position */ if(! esl_abc_XIsGap(abc, tmp_dsq[apos+1])) { spos_ct[apos]++; break; } } } if(opt_epos_ct != NULL) { /* find final non-gap position */ for(apos = alen-1; apos >= 0; apos--) { if(! esl_abc_XIsGap(abc, tmp_dsq[apos+1])) { epos_ct[apos]++; break; } } } } } nseq++; } } /* If we saw a normal // end, we would've successfully read a line, * so when we get here, status (from the line read) should be eslOK. */ if (status2 != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "parse failed (line %d): didn't find // at end of alignment", afp->linenumber); /* if we're returning maxgc and an msa, determine maxgc, which we didn't do above b/c we parsed GC lines with parse_gc() * If msa != NULL, we already know maxgc */ if(ret_msa != NULL && opt_maxgc != NULL) { for(i = 0; i < msa->ngc; i++) maxgc = ESL_MAX(maxgc, strlen(msa->gc_tag[i])); if (msa->rf != NULL) maxgc = ESL_MAX(maxgc, 2); /* 2 == strlen("RF") */ if (msa->mm != NULL) maxgc = ESL_MAX(maxgc, 2); /* 2 == strlen("MM") */ if (msa->ss_cons != NULL) maxgc = ESL_MAX(maxgc, 7); /* 7 == strlen("SS_cons") */ if (msa->sa_cons != NULL) maxgc = ESL_MAX(maxgc, 7); /* 7 == strlen("SA_cons") */ if (msa->pp_cons != NULL) maxgc = ESL_MAX(maxgc, 7); /* 7 == strlen("PP_cons") */ } /* same as for maxgc, but now for maxgf */ if(ret_msa != NULL && opt_maxgf != NULL) { for(i = 0; i < msa->ngf; i++) maxgf = ESL_MAX(maxgf, strlen(msa->gf_tag[i])); if (msa->name != NULL) maxgf = ESL_MAX(maxgf, 2); /* 2 == strlen("ID") */ if (msa->desc != NULL) maxgf = ESL_MAX(maxgf, 2); /* 2 == strlen("DE") */ if (msa->acc != NULL) maxgf = ESL_MAX(maxgf, 2); /* 2 == strlen("AC") */ if (msa->au != NULL) maxgf = ESL_MAX(maxgf, 2); /* 2 == strlen("AU") */ } if (first_seqname) free(first_seqname); if (tmp_dsq) free(tmp_dsq); if (ct) free(ct); if (ss_nopseudo) free(ss_nopseudo); if (a2rf_map) free(a2rf_map); if (ret_msa) *ret_msa = msa; else if (msa) esl_msa_Destroy(msa); if (opt_nseq) *opt_nseq = nseq; if (opt_alen) *opt_alen = alen; if (opt_ngs) *opt_ngs = ngs; if (opt_maxname) *opt_maxname = maxname; if (opt_maxgf) *opt_maxgf = maxgf; if (opt_maxgc) *opt_maxgc = maxgc; if (opt_maxgr) *opt_maxgr = maxgr; if (opt_abc_ct) *opt_abc_ct = abc_ct; else if (abc_ct) esl_Free2D((void **) abc_ct, alen); if (opt_pp_ct) *opt_pp_ct = pp_ct; else if (pp_ct) esl_Free2D((void **) pp_ct, alen); if (opt_bp_ct) *opt_bp_ct = bp_ct; else if (bp_ct) esl_Free3D((void ***) bp_ct, known_alen, abc->Kp); if (opt_spos_ct) *opt_spos_ct = spos_ct; else if (spos_ct) free(spos_ct); if (opt_epos_ct) *opt_epos_ct = epos_ct; else if (epos_ct) free(epos_ct); return eslOK; ERROR: if (first_seqname) free(first_seqname); if (tmp_dsq) free(tmp_dsq); if (ct) free(ct); if (ss_nopseudo) free(ss_nopseudo); if (a2rf_map) free(a2rf_map); if (msa) esl_msa_Destroy(msa); if (pp_ct) esl_Free2D((void **) pp_ct, alen); if (abc_ct) esl_Free2D((void **) abc_ct, alen); if (bp_ct) esl_Free3D((void ***) bp_ct, known_alen, abc->Kp); if (spos_ct) free(spos_ct); if (epos_ct) free(epos_ct); if (ret_msa) *ret_msa = NULL; if (opt_nseq) *opt_nseq = 0; if (opt_alen) *opt_alen = 0; if (opt_ngs) *opt_ngs = 0; if (opt_maxname) *opt_maxname = 0; if (opt_maxgf) *opt_maxgf = 0; if (opt_maxgc) *opt_maxgc = 0; if (opt_maxgr) *opt_maxgr = 0; if (opt_pp_ct) *opt_pp_ct = NULL; if (opt_abc_ct) *opt_abc_ct = NULL; if (opt_bp_ct) *opt_bp_ct = NULL; if (opt_spos_ct) *opt_spos_ct = NULL; if (opt_epos_ct) *opt_epos_ct = NULL; return status; } #ifdef eslAUGMENT_KEYHASH /* Function: esl_msafile2_RegurgitatePfam() * Synopsis: Read and write next Pfam formatted MSA without storing it. * * Purpose: Read and immediately write each line of a MSA after * optionally modifying aligned data by either adding all * gap columns or removing some columns. Do this without * creating an msa object, so memory usage is minimized. * * The alignment file must be in Pfam format (1 * line/seq non-interleaved Stockholm). The arguments * specify which parts of the alignment to write. * specifies which positions to keep in aligned strings, if * NULL then all are kept. specifies how many gap * characters to add after each aligned position, if NULL * then none are added. Only one of and * can be non-NULL. * * If one of the or keyhashes are * non-NULL, they specify names of sequences (and affiliated * annotation) to output () or not output * (). Only one of these may be non-NULL. * * , , and specify the max * length sequence name, GF tag, GC tag, and GR tag, and can * be provided by a caller that knows their values, e.g. as * revealed by a previous call to . * If any are -1, the caller didn't know the value, and the * spacing in the alignment file we read in will be * preserved. An example of useful non -1 values is if we're * merging multiple alignments into a single alignment, and * the spacing of any given alignment should change when all * alignments are considered (like what the esl-alimerge * miniapp does). * * This function is not as rigorous about validating the * input as the other read functions that store the full * alignment. Here, we verify that there is only one line * for the first sequence read (verifying that all sequences * are only one line would require storing and looking up * all sequence names), that each aligned data line (, * GC, GR) are all the same length. The aligned length must * equal if it is not passed in as -1 (indicating * caller doesn't know alignment length). If or * is non-NULL, must not be -1. * * Aligned sequence residues are not checked to make sure * they are consistent with an alphabet, they are simply * rewritten as they are read from the input file. * * Args: afp - open alignment file pointer * ofp - output file pointer * maxname - maximum length of a sequence name (-1 if unknown) * maxgf - maximum length of a GF tag (-1 if unknown) * maxgc - maximum length of a GC tag (-1 if unknown) * maxgr - maximum length of a GR tag (-1 if unknown) * do_header - TRUE to write magic Stockholm header at top to ofp * do_trailer - TRUE to write '//' at end to ofp * do_blanks - TRUE to regurgitate blank lines, FALSE not to * do_comments - TRUE to write comments to ofp * do_gf - TRUE to write GF annotation to ofp * do_gs - TRUE to write GS annotation to ofp * do_gc - TRUE to write GC annotation to ofp * do_gr - TRUE to write GR annotation to ofp * do_aseq - TRUE to write aligned sequences to ofp * seqs2regurg - keyhash of names of the sequences to write, all others * will not be written. Associated annotation (GS, GR) * will be written for these sequences only. Must be NULL * if seqs2skip is non-NULL (enforced by contract). * If both are NULL all seqs are written. * seqs2skip - keyhash of names of the sequences to skip (not write), * all others will be written. Associated annotation (GS, GR) * will not be written for these sequences. Must be NULL * if seqs2regurg is NULL (enforced by contract). * If both are NULL all seqs are written. * useme - [0..apos..exp_alen-1] TRUE to include position apos in output of * aligned data (GC,GR,aseq), FALSE to remove it, can be NULL * add2me - [0..apos..exp_alen-1] number of all gaps to add after each * position of aligned data (GC,GR,aseq), can be NULL * exp_alen - expected alignment length, -1 if unknown, which * is okay as long as useme == add2me == NULL * gapchar2add - gap character, only relevant if add2me != NULL * opt_nseq_read - RETURN: optional, number of aligned sequences read * opt_nseq_regurged - RETURN: optional, number of aligned sequences regurgitated, * same as opt_nseq_read unless seqs2regurg != NULL or * seqs2skip != NULL. * * Returns: on success. * Returns if there are no more alignments in . * if parse fails because of a file format problem, * in which case errbuf> is set to contain a formatted message * that indicates the cause of the problem. * * Throws: on allocation error. * * Xref: ~nawrockie/notebook/9_1206_esl_msa_mem_efficient/ */ int esl_msafile2_RegurgitatePfam(ESL_MSAFILE2 *afp, FILE *ofp, int maxname, int maxgf, int maxgc, int maxgr, int do_header, int do_trailer, int do_blanks, int do_comments, int do_gf, int do_gs, int do_gc, int do_gr, int do_aseq, ESL_KEYHASH *seqs2regurg, ESL_KEYHASH *seqs2skip, int *useme, int *add2me, int exp_alen, char gapchar2add, int *opt_nseq_read, int *opt_nseq_regurged) { char *s = NULL; int status; int status2; char *seqname = NULL; char *first_seqname = NULL; char *text = NULL; char *gapped_text = NULL; char *tag = NULL; char *gf = NULL; char *gc = NULL; char *gs = NULL; char *gr = NULL; int curmargin, curmargin2, namelen, spacelen, spacelen2, textlen, taglen; int gaps2addlen; int margin; /* width of left hand side margin */ int flushpoint = 10000; /* number of lines read at which to flush ofp */ int nseq_read = 0; int nseq_regurged = 0; /* contract check */ if ( ofp == NULL) ESL_EXCEPTION(eslEINCONCEIVABLE, "ofp is NULL"); if ( afp->format != eslMSAFILE_PFAM) ESL_EXCEPTION(eslEINCONCEIVABLE, "only Pfam (1 line /seq) Stockholm formatted files allowed in small mem mode"); if(add2me != NULL && useme != NULL) ESL_EXCEPTION(eslEINCONCEIVABLE, "add2me and useme both non-NULL"); if((add2me != NULL || useme != NULL) && exp_alen == -1) ESL_EXCEPTION(eslEINCONCEIVABLE, "exp_alen == -1, but add2me or useme non-NULL"); if(seqs2regurg != NULL && seqs2skip != NULL) ESL_EXCEPTION(eslEINVAL, "seqs2regurg and seqs2skip both non-NULL, only one may be"); gaps2addlen = (add2me == NULL) ? 0 : esl_vec_ISum(add2me, (exp_alen+1)); margin = -1; if (maxgf != -1 && maxgf < 2) maxgf = 2; if (maxname != -1) margin = maxname+1; if (maxgc > 0 && maxgc+6 > margin) margin = maxgc+6; if (maxgr > 0 && maxname+maxgr+7 > margin) margin = maxname+maxgr+7; /* if margin is still -1, we'll use the same spacing we read in from the file */ if (feof(afp->f)) { status = eslEOF; goto ERROR; } afp->errbuf[0] = '\0'; /* Check the magic Stockholm header line. * We have to skip blank lines here, else we perceive * trailing blank lines in a file as a format error when * reading in multi-record mode. */ do { if ((status = msafile2_getline(afp)) != eslOK) goto ERROR; /* includes EOF */ } while (is_blankline(afp->buf)); if (strncmp(afp->buf, "# STOCKHOLM 1.", 14) != 0) ESL_XFAIL(eslEFORMAT, afp->errbuf, "parse failed (line %d): missing \"# STOCKHOLM\" header", afp->linenumber); if(do_header) fprintf(ofp, "%s", afp->buf); /* Read the alignment file one line at a time. */ while ((status2 = msafile2_getline(afp)) == eslOK) { if(afp->linenumber % flushpoint == 0) fflush(ofp); s = afp->buf; while (*s == ' ' || *s == '\t') s++; /* skip leading whitespace */ if (*s == '#') { if (strncmp(s, "#=GF", 4) == 0) { if (do_gf) { if(maxgf == -1) { /* just print line as is */ fprintf(ofp, "%s", afp->buf); } else { /* parse line into temporary strings, then print it out with correct formatting */ s = afp->buf; if (esl_strtok(&s, " \t\n\r", &gf) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GF line", afp->linenumber); if (esl_strtok(&s, " \t\n\r", &tag) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GF line", afp->linenumber); if (esl_strtok(&s, "\n\r", &text) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GF line", afp->linenumber); fprintf(ofp, "#=GF %-*s %s\n", maxgf, tag, text); } } } else if (strncmp(s, "#=GC", 4) == 0) { if(do_gc) { /* parse line into temporary strings */ s = afp->buf; if (esl_strtok (&s, " \t\n\r", &gc) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GC line", afp->linenumber); if (esl_strtok_adv(&s, " \t\n\r", &tag, &taglen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GC line", afp->linenumber); spacelen = determine_spacelen(s); if (esl_strtok_adv(&s, " \t\n\r", &text, &textlen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GC line", afp->linenumber); /* verify alignment length */ if(exp_alen == -1) exp_alen = textlen; else if(exp_alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GC line, len %d, expected %d", afp->linenumber, textlen, exp_alen); /* determine margin length of sequence name field for output formatting */ curmargin = (margin == -1) ? taglen + spacelen : margin - 6; /* output, after optionally removing some characters (if useme != NULL) or adding gaps (if add2me != NULL) (contract enforces only one can be non-null) */ if(useme != NULL) { /* if this is a GC SS_cons line, remove broken basepairs first - only if it's in WUSS RNA format (NOT for a protein SS!) */ if (strncmp(tag, "SS_cons", 7) == 0 && afp->abc && (afp->abc->type == eslRNA || afp->abc->type == eslDNA)) { if((status = esl_msa_RemoveBrokenBasepairsFromSS(text, afp->errbuf, textlen, useme)) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GC SS_cons line", afp->linenumber); } shrink_string(text, useme, exp_alen); /* this is done in place on text */ } if(add2me != NULL) { if((status = gapize_string(text, textlen, textlen + gaps2addlen, add2me, gapchar2add, &gapped_text)) != eslOK) goto ERROR; fprintf(ofp, "#=GC %-*s %s\n", curmargin, tag, gapped_text); free(gapped_text); } else { fprintf(ofp, "#=GC %-*s %s\n", curmargin, tag, text); } } } else if (strncmp(s, "#=GS", 4) == 0) { /* we don't validate the sequence exists, this would require storing all seqnames */ if (do_gs) { if(maxname == -1 && seqs2regurg == NULL) { /* just print line as is */ fprintf(ofp, "%s", afp->buf); } else { /* parse line into temporary strings, then print it out with correct formatting */ if((seqs2regurg == NULL && seqs2skip == NULL) || (seqs2regurg != NULL && (status = esl_keyhash_Lookup(seqs2regurg, seqname, -1, NULL)) == eslOK) || (seqs2skip != NULL && (status = esl_keyhash_Lookup(seqs2skip, seqname, -1, NULL)) == eslENOTFOUND)) { /* this if() will evaluate as TRUE if seqs2regurg and seqs2skip are both NULL, or the seqname exists in seqs2regurg or does not exist in seqs2skip, else it will return FALSE */ s = afp->buf; if (esl_strtok(&s, " \t\n\r", &gs) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GS line", afp->linenumber); if (esl_strtok(&s, " \t\n\r", &seqname) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GS line", afp->linenumber); if (esl_strtok(&s, " \t\n\r", &tag) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GS line", afp->linenumber); if (esl_strtok(&s, "\n\r", &text) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GS line", afp->linenumber); fprintf(ofp, "#=GS %-*s %s %s\n", maxname, seqname, tag, text); } } } } else if (strncmp(s, "#=GR", 4) == 0) { if(do_gr) { /* parse line into temporary strings */ s = afp->buf; if (esl_strtok (&s, " \t\n\r", &gr) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line", afp->linenumber); if (esl_strtok_adv(&s, " \t\n\r", &seqname, &namelen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line", afp->linenumber); spacelen = determine_spacelen(s); if (esl_strtok_adv(&s, " \t\n\r", &tag, &taglen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line", afp->linenumber); spacelen2 = determine_spacelen(s); if (esl_strtok_adv(&s, " \t\n\r", &text, &textlen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line", afp->linenumber); /* verify alignment length */ if(exp_alen == -1) exp_alen = textlen; else if(exp_alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR line, len %d, expected %d", afp->linenumber, textlen, exp_alen); /* determine length of fields for output formatting */ curmargin = (maxname == -1) ? namelen + spacelen : maxname; curmargin2 = (maxname == -1) ? taglen + spacelen2 : margin - maxname - 7; /* determine if we should regurgitate GR for this sequence or not */ if((seqs2regurg == NULL && seqs2skip == NULL) || (seqs2regurg != NULL && (status = esl_keyhash_Lookup(seqs2regurg, seqname, -1, NULL)) == eslOK) || (seqs2skip != NULL && (status = esl_keyhash_Lookup(seqs2skip, seqname, -1, NULL)) == eslENOTFOUND)) { /* this if() will evaluate as TRUE if seqs2regurg and seqs2skip are both NULL, or the seqname exists in seqs2regurg or does not exist in seqs2skip, else it will return FALSE */ /* output GR, after optionally removing some characters (if useme != NULL) or adding gaps (if add2me != NULL) (contract enforces only one can be non-null) */ if(useme != NULL) { /* if this is a GR SS line, remove broken basepairs first */ if( strncmp(tag, "SS", 2) == 0 && afp->abc && (afp->abc->type == eslRNA || afp->abc->type == eslDNA)) { if((status = esl_msa_RemoveBrokenBasepairsFromSS(text, afp->errbuf, textlen, useme)) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad #=GR SS line", afp->linenumber); } shrink_string(text, useme, exp_alen); /* this is done in place on text */ } if(add2me != NULL) { if((status = gapize_string(text, textlen, textlen + gaps2addlen, add2me, gapchar2add, &gapped_text)) != eslOK) goto ERROR; fprintf(ofp, "#=GR %-*s %-*s %s\n", curmargin, seqname, curmargin2, tag, gapped_text); free(gapped_text); } else { fprintf(ofp, "#=GR %-*s %-*s %s\n", curmargin, seqname, curmargin2, tag, text); } } } } else if (do_comments) fprintf(ofp, "%s", afp->buf); /* print comment line, if desired */ } /* end of 'if (*s == '#')' */ else if (strncmp(s, "//", 2) == 0) { if(do_trailer) fprintf(ofp, "%s", afp->buf); break; /* normal way out */ } else if (*s == '\n' || *s == '\r') { if(do_blanks) { fprintf(ofp, "%s", afp->buf); } continue; } else { /* sequence line */ if(do_aseq) { /* parse line into temporary strings */ s = afp->buf; if (esl_strtok_adv(&s, " \t\n\r", &seqname, &namelen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad sequence line", afp->linenumber); spacelen = determine_spacelen(s); if (esl_strtok_adv(&s, " \t\n\r", &text, &textlen, NULL) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad sequence line", afp->linenumber); /* verify alignment length */ if((exp_alen != -1) && (exp_alen != textlen)) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): bad seq line, len %d, expected %d", afp->linenumber, textlen, exp_alen); /* determine length of sequence name field for output formatting */ curmargin = (margin == -1) ? namelen + spacelen : margin-1; /* make sure we haven't just read a second line of the first sequence in file (we must be in Pfam 1 line/seq file) */ if(nseq_read == 0) { if ((status = esl_strdup(seqname, -1, &(first_seqname))) != eslOK) goto ERROR; } else if(strcmp(first_seqname, seqname) == 0) { ESL_XFAIL(eslEFORMAT, afp->errbuf, "parse failed (line %d): two seqs named %s. Alignment appears to be in Stockholm format. Reformat to Pfam with esl-reformat.", afp->linenumber, seqname); } nseq_read++; /* determine if we should regurgitate this sequence or not */ if((seqs2regurg == NULL && seqs2skip == NULL) || (seqs2regurg != NULL && (status = esl_keyhash_Lookup(seqs2regurg, seqname, -1, NULL)) == eslOK) || (seqs2skip != NULL && (status = esl_keyhash_Lookup(seqs2skip, seqname, -1, NULL)) == eslENOTFOUND)) { /* this if() will evaluate as TRUE if seqs2regurg and seqs2skip are both NULL, or the seqname exists in seqs2regurg or does not exist in seqs2skip, else it will return FALSE */ /* output sequence, after optionally removing some characters (if useme != NULL) or adding gaps (if add2me != NULL) (contract enforces only one can be non-null) */ nseq_regurged++; if(useme != NULL) shrink_string(text, useme, exp_alen); /* this is done in place on text */ if(add2me != NULL) { if((status = gapize_string(text, textlen, textlen + gaps2addlen, add2me, gapchar2add, &gapped_text)) != eslOK) goto ERROR; fprintf(ofp, "%-*s %s\n", curmargin, seqname, gapped_text); free(gapped_text); } else { fprintf(ofp, "%-*s %s\n", curmargin, seqname, text); } } } } } /* If we saw a normal // end, we would've successfully read a line, * so when we get here, status (from the line read) should be eslOK. */ if (status2 != eslOK) ESL_XFAIL(eslEFORMAT, afp->errbuf, "small mem parse failed (line %d): didn't find // at end of alignment", afp->linenumber); if (first_seqname != NULL) free(first_seqname); if (opt_nseq_read != NULL) *opt_nseq_read = nseq_read; if (opt_nseq_regurged != NULL) *opt_nseq_regurged = nseq_regurged; return eslOK; ERROR: return status; } #endif /* get_pp_idx * * Given a GR PP or GC PP_cons character, return the appropriate index * in a pp_ct[] vector. * '0' return 0; * '1' return 1; * '2' return 2; * '3' return 3; * '4' return 4; * '5' return 5; * '6' return 6; * '7' return 7; * '8' return 8; * '9' return 9; * '*' return 10; * gap return 11; * * Anything else (including missing or nonresidue) return -1; * * This mapping of PP chars to return values should probably be * stored in some internal map structure somewhere, instead of * only existing in this function as used by esl_msafile2_ReadInfoPfam(). */ static int get_pp_idx(ESL_ALPHABET *abc, char ppchar) { if(esl_abc_CIsGap(abc, ppchar)) return 11; if(ppchar == '*') return 10; if(ppchar == '9') return 9; if(ppchar == '8') return 8; if(ppchar == '7') return 7; if(ppchar == '6') return 6; if(ppchar == '5') return 5; if(ppchar == '4') return 4; if(ppchar == '3') return 3; if(ppchar == '2') return 2; if(ppchar == '1') return 1; if(ppchar == '0') return 0; return -1; } /* gapize_string * * Given a string, create a new one that is a copy of it, * but with gaps added before each position (apos) as specified * by ngapA[0..apos..len]. specifies the gap character * to add. * * ngapA[0] - number of gaps to add before first posn * ngapA[apos] - number of gaps to add before posn apos * ngapA[len] - number of gaps to add after final posn * * ret_str is allocated here. * * Returns eslOK on success. * eslEMEM on memory error. */ static int gapize_string(char *src_str, int64_t src_len, int64_t dst_len, int *ngapA, char gapchar, char **ret_dst_str) { int status; int src_apos = 0; int dst_apos = 0; int i; char *dst_str; ESL_ALLOC(dst_str, sizeof(char) * (dst_len+1)); dst_str[dst_len] = '\0'; /* add gaps before first position */ for(i = 0; i < ngapA[0]; i++) dst_str[dst_apos++] = gapchar; /* add gaps after every position */ for(src_apos = 0; src_apos < src_len; src_apos++) { dst_str[dst_apos++] = src_str[src_apos]; for(i = 0; i < ngapA[(src_apos+1)]; i++) dst_str[dst_apos++] = gapchar; } *ret_dst_str = dst_str; return eslOK; ERROR: return eslEMEM; } /* shrink_string * * Remove some characters of a string in place. * If useme[0..pos..len-1] == FALSE, remove position pos. * */ static void shrink_string(char *str, const int *useme, int len) { int opos, npos; for (opos = 0, npos = 0; opos < len; opos++) { if (useme[opos] == FALSE) continue; str[npos++] = str[opos]; } str[npos] = '\0'; return; } /* determine_spacelen * * Determine number of consecutive ' ' characters * in the string pointed to by s. */ static int determine_spacelen(char *s) { int spacelen = 0; while (*s == ' ') { spacelen++; s++; } return spacelen; } /*------------- end, memory efficient Pfam i/o -----------------*/ /***************************************************************** * 3. Legacy Stockholm parsing tools *****************************************************************/ /* msafile_getline(): * load the next line of into buf>. * Returns eslOK on success, eslEOF on normal eof. * Throws eslEMEM on alloc failure. */ static int msafile2_getline(ESL_MSAFILE2 *afp) { int status; status = esl_fgets(&(afp->buf), &(afp->buflen), afp->f); afp->linenumber++; return status; } static int is_blankline(char *s) { for (; *s != '\0'; s++) if (! isspace((int) *s)) return FALSE; return TRUE; } /* Format of a GF line: * #=GF * Returns eslOK on success; eslEFORMAT on parse failure. * Throws eslEMEM on allocation failure. */ static int parse_gf(ESL_MSA *msa, char *buf) { char *gf; char *tag; char *text; char *tok; char *s; int n; int status; s = buf; if (esl_strtok(&s, " \t\n\r", &gf) != eslOK) return eslEFORMAT; if (esl_strtok(&s, " \t\n\r", &tag) != eslOK) return eslEFORMAT; /* special case: accept a blank #=GF CC line. Otherwise, is required. */ while (isspace(*s)) s++; status = esl_strtok_adv(&s, "\n\r", &text, &n, NULL); if (status == eslEOL) { if (strcmp(tag, "CC") != 0) return eslEFORMAT; } else if (status != eslOK) { return eslEFORMAT; } if (strcmp(tag, "ID") == 0) status = esl_strdup(text, n, &(msa->name)); else if (strcmp(tag, "AC") == 0) status = esl_strdup(text, n, &(msa->acc)); else if (strcmp(tag, "DE") == 0) status = esl_strdup(text, n, &(msa->desc)); else if (strcmp(tag, "AU") == 0) status = esl_strdup(text, n, &(msa->au)); else if (strcmp(tag, "GA") == 0) { /* Pfam has GA1, GA2. Rfam just has GA1. */ s = text; if ((esl_strtok(&s, " \t\n\r", &tok)) != eslOK) return eslEFORMAT; msa->cutoff[eslMSA_GA1] = atof(tok); msa->cutset[eslMSA_GA1] = TRUE; if ((esl_strtok(&s, " \t\n\r", &tok)) == eslOK) { msa->cutoff[eslMSA_GA2] = atof(tok); msa->cutset[eslMSA_GA2] = TRUE; } status = eslOK; } else if (strcmp(tag, "NC") == 0) { s = text; if ((esl_strtok(&s, " \t\n\r", &tok)) != eslOK) return eslEFORMAT; msa->cutoff[eslMSA_NC1] = atof(tok); msa->cutset[eslMSA_NC1] = TRUE; if ((esl_strtok(&s, " \t\n\r", &tok)) == eslOK) { msa->cutoff[eslMSA_NC2] = atof(tok); msa->cutset[eslMSA_NC2] = TRUE; } status = eslOK; } else if (strcmp(tag, "TC") == 0) { s = text; if ((esl_strtok(&s, " \t\n\r", &tok)) != eslOK) return eslEFORMAT; msa->cutoff[eslMSA_TC1] = atof(tok); msa->cutset[eslMSA_TC1] = TRUE; if ((esl_strtok(&s, "\t\n\r", &tok)) == eslOK) { msa->cutoff[eslMSA_TC2] = atof(tok); msa->cutset[eslMSA_TC2] = TRUE; } status = eslOK; } else if (strcmp(tag, "CC") == 0 && text == NULL) status = esl_msa_AddGF (msa, tag, -1, "", -1); else status = esl_msa_AddGF(msa, tag, -1, text, -1); return status; } /* parse_gc(): * Format of a GC line: * #=GC */ static int parse_gc(ESL_MSA *msa, char *buf) { char *gc; char *tag; char *text; char *s; int len; int status; s = buf; if (esl_strtok (&s, " \t\n\r", &gc) != eslOK) return eslEFORMAT; if (esl_strtok (&s, " \t\n\r", &tag) != eslOK) return eslEFORMAT; if (esl_strtok_adv(&s, " \t\n\r", &text, &len, NULL) != eslOK) return eslEFORMAT; if (strcmp(tag, "SS_cons") == 0) status = esl_strcat(&(msa->ss_cons), -1, text, len); else if (strcmp(tag, "SA_cons") == 0) status = esl_strcat(&(msa->sa_cons), -1, text, len); else if (strcmp(tag, "PP_cons") == 0) status = esl_strcat(&(msa->pp_cons), -1, text, len); else if (strcmp(tag, "RF") == 0) status = esl_strcat(&(msa->rf), -1, text, len); else if (strcmp(tag, "MM") == 0) status = esl_strcat(&(msa->mm), -1, text, len); else status = esl_msa_AppendGC(msa, tag, text); return status; } /* parse_comment(): * comments are simply stored verbatim, not parsed */ static int parse_comment(ESL_MSA *msa, char *buf) { char *s; char *comment; s = buf + 1; /* skip leading '#' */ if (*s == '\n' || *s == '\r') { *s = '\0'; comment = s; } /* deal with blank comment */ else if (esl_strtok(&s, "\n\r", &comment)!= eslOK) return eslEFORMAT; return (esl_msa_AddComment(msa, comment, -1)); } /*-------------- end, legacy stockholm parser -------------------*/ /***************************************************************** * 4. Unit tests *****************************************************************/ #ifdef eslMSAFILE2_TESTDRIVE /* write_known_pfam_msa() * Write a known MSA to a tmpfile in Pfam Stockholm format. */ static void write_known_pfam_msa(FILE *ofp) { fprintf(ofp, "# STOCKHOLM 1.0\n"); fprintf(ofp, "#=GF ID pfam-test\n"); fprintf(ofp, "#=GS seq2 DE seq2 is interesting\n"); fprintf(ofp, "seq1 --ACDEFGHIK~LMNPQRS-TVWYACDEFGHIKLMNPQRSTVWY~~~\n"); fprintf(ofp, "seq2 aaACDEFGHIK~LMNPQRS-TVWYACDEFGHIKLMNPQRSTVWYyyy\n"); fprintf(ofp, "seq3 aaACDEFGHIK~LMNPQRS-TVWYACDEFGHIKLMNPQRSTVWYyyy\n"); fprintf(ofp, "#=GC RF ..xxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...\n"); fprintf(ofp, "//\n"); return; } static void utest_ReadInfoPfam(char *filename) { char *msg = "ReadInfo() unit test failure"; ESL_MSAFILE2 *mfp = NULL; ESL_MSA *msa = NULL; int nseq = 0; int64_t alen = 0; int ngs = 0; int maxname = 0; int maxgf = 0; int maxgc = 0; int maxgr = 0; if (esl_msafile2_Open(filename, NULL, &mfp) != eslOK) esl_fatal(msg); if (esl_msafile2_ReadInfoPfam(mfp, NULL, NULL, -1, NULL, NULL, &msa, &nseq, &alen, &ngs, &maxname, &maxgf, &maxgc, &maxgr, NULL, NULL, NULL, NULL, NULL) != eslOK) esl_fatal(msg); if (msa->nseq != 0) esl_fatal("bad msa->nseq"); if (msa->alen != -1) esl_fatal("bad msa->alen"); if (nseq != 3) esl_fatal("bad nseq"); if (alen != 47) esl_fatal("bad alen"); if (ngs != 1) esl_fatal("bad ngs"); if (maxname != 4) esl_fatal("bad maxname"); if (maxgf != 2) esl_fatal("bad maxgf"); if (maxgc != 2) esl_fatal("bad maxgc"); if (maxgr != 0) esl_fatal("bad maxgr"); esl_msa_Destroy(msa); if (esl_msafile2_ReadInfoPfam(mfp, NULL, NULL, -1, NULL, NULL, &msa, &nseq, &alen, &ngs, &maxname, &maxgf, &maxgc, &maxgr, NULL, NULL, NULL, NULL, NULL) != eslEOF) esl_fatal(msg); if (msa != NULL) esl_fatal(msg); if (nseq != 0 || alen != 0 || ngs != 0 || maxname != 0 || maxgf != 0 || maxgc != 0 || maxgr != 0) esl_fatal("bad nseq"); esl_msafile2_Close(mfp); } static void utest_RegurgitatePfam(char *filename) { char *msg = "RegurgitatePfam() unit test failure"; ESL_MSAFILE2 *mfp = NULL; ESLX_MSAFILE *afp = NULL; char tmpfile[16] = "esltmpXXXXXX"; FILE *fp = NULL; ESL_MSA *msa1 = NULL; ESL_MSA *msa2 = NULL; /* regurgitate msa in filename to tmpfile (an msa structure will not be created) */ if (esl_msafile2_Open(filename, NULL, &mfp) != eslOK) esl_fatal(msg); if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal(msg); if (esl_msafile2_RegurgitatePfam(mfp, fp, -1, -1, -1, -1, /* maxname, maxgf, maxgc, maxgr unknown: output msa formatting will match input msa formatting */ TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, /* do_header, do_trailer, do_blanks, do_comments, do_gf, do_gs, do_gc, do_gr, do_aseq: print all components */ NULL, /* seqs2regurg: if non-NULL specifies which sequences to keep in output */ NULL, /* seqs2skip: if non-NULL specifies which sequences to skip in output */ NULL, /* useme: if non-NULL specifies which columns to keep in output */ NULL, /* add2me: if non-NULL specifies how many gap columns to add in output */ -1, /* expected alignment length, unknown (must not be if useme != NULL or add2me != NULL */ '.', /* gapchar2add, irrelevant since add2me is NULL */ NULL, /* don't return num seqs read */ NULL) /* don't return num seqs read */ != eslOK) esl_fatal(msg); fclose(fp); esl_msafile2_Close(mfp); /* Using normal interface, read in msa from filename as msa1 */ if (eslx_msafile_Open(NULL, filename, NULL, eslMSAFILE_PFAM, NULL, &afp) != eslOK) esl_fatal(msg); if (eslx_msafile_Read(afp, &msa1) != eslOK) esl_fatal(msg); eslx_msafile_Close(afp); /* Using normal interface, read in msa from tmpfile as msa2 */ if (eslx_msafile_Open(NULL, tmpfile, NULL, eslMSAFILE_PFAM, NULL, &afp) != eslOK) esl_fatal(msg); if (eslx_msafile_Read(afp, &msa2) != eslOK) esl_fatal(msg); eslx_msafile_Close(afp); if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal(msg); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); remove(tmpfile); } #endif /* eslMSAFILE2_TESTDRIVE */ /*------------------ end, unit tests ----------------------------*/ /***************************************************************** * 5. Test driver *****************************************************************/ #ifdef eslMSAFILE2_TESTDRIVE /* compile: gcc -g -Wall -I. -L. -o esl_msafile2_utest -DeslMSAFILE2_TESTDRIVE esl_msafile2.c -leasel -lm * (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile2_utest -DeslMSAFILE2_TESTDRIVE esl_msafile2.c -leasel -lm * run: ./esl_msafile2_utest */ #include "esl_config.h" #include #include "easel.h" #include "esl_getopts.h" #include "esl_msafile2.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for legacy memory-efficient Pfam format input/output"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); FILE *fp = NULL; char tmpfile[16] = "esltmpXXXXXX"; if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal("failed to create tmpfile"); write_known_pfam_msa(fp); fclose(fp); utest_ReadInfoPfam(tmpfile); utest_RegurgitatePfam(tmpfile); remove(tmpfile); esl_getopts_Destroy(go); exit(0); } #endif /*eslMSAFILE2_TESTDRIVE*/ /*----------------- end, test driver ----------------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msafile2.c $ * SVN $Id: esl_msafile2.c 832 2012-12-07 15:01:15Z eddys $ *****************************************************************/ hmmer-3.1b2/easel/esl_alphabet.h0000664361611702660230000001660012473612605016161 0ustar wheelerteddy/* Digital representation of biosequence symbols in Easel. */ #ifndef eslALPHABET_INCLUDED #define eslALPHABET_INCLUDED #include /* isascii() */ #include "easel.h" /* Flags for alphabet types. */ #define eslUNKNOWN 0 /* 0=unknown is easel-wide convention; don't change */ #define eslRNA 1 #define eslDNA 2 #define eslAMINO 3 #define eslCOINS 4 /* for toy examples */ #define eslDICE 5 /* also for toy examples */ #define eslNONSTANDARD 6 /* Structure: ESL_ALPHABET */ typedef struct { int type; /* eslDNA, eslRNA, eslAMINO, eslNONSTANDARD, etc. */ int K; /* uniq alphabet size: 4 or 20 */ int Kp; /* total size: alphabet + degen + gap + missing */ char *sym; /* "ACGT-RYMKSWHBVDN~", for instance [0..Kp-1] */ ESL_DSQ inmap[128]; /* inmap['A'] = 0, etc: dsq[] index for a symbol */ char **degen; /* 1/0, which syms inc which res [0..Kp-1][0..K-1] */ int *ndegen; /* # of degenerate residues per code [0..Kp-1] */ ESL_DSQ *complement; /* maps sym to complements, [0..Kp-1]; NULL if not DNA/RNA */ } ESL_ALPHABET; /* 1. An ESL_ALPHABET object. */ extern ESL_ALPHABET *esl_alphabet_Create(int type); extern ESL_ALPHABET *esl_alphabet_CreateCustom(const char *alphabet, int K, int Kp); extern int esl_alphabet_SetEquiv(ESL_ALPHABET *a, char sym, char c); extern int esl_alphabet_SetCaseInsensitive(ESL_ALPHABET *a); extern int esl_alphabet_SetDegeneracy(ESL_ALPHABET *a, char c, char *ds); extern int esl_alphabet_SetIgnored(ESL_ALPHABET *a, const char *ignoredchars); extern size_t esl_alphabet_Sizeof(ESL_ALPHABET *a); extern void esl_alphabet_Destroy(ESL_ALPHABET *a); /* 2. Digitized sequences. */ extern int esl_abc_CreateDsq(const ESL_ALPHABET *a, const char *seq, ESL_DSQ **ret_dsq); extern int esl_abc_Digitize (const ESL_ALPHABET *a, const char *seq, ESL_DSQ *dsq); extern int esl_abc_Textize (const ESL_ALPHABET *a, const ESL_DSQ *dsq, int64_t L, char *seq); extern int esl_abc_TextizeN (const ESL_ALPHABET *a, const ESL_DSQ *dptr, int64_t L, char *buf); extern int esl_abc_dsqcpy(const ESL_DSQ *dsq, int64_t L, ESL_DSQ *dcopy); extern int esl_abc_dsqdup(const ESL_DSQ *dsq, int64_t L, ESL_DSQ **ret_dup); extern int esl_abc_dsqcat (const ESL_DSQ *inmap, ESL_DSQ **dsq, int64_t *L, const char *s, esl_pos_t n); extern int esl_abc_dsqcat_noalloc(const ESL_DSQ *inmap, ESL_DSQ *dsq, int64_t *L, const char *s, esl_pos_t n); extern int64_t esl_abc_dsqlen(const ESL_DSQ *dsq); extern int64_t esl_abc_dsqrlen(const ESL_ALPHABET *a, const ESL_DSQ *dsq); extern int esl_abc_CDealign(const ESL_ALPHABET *abc, char *s, const ESL_DSQ *ref_ax, int64_t *opt_rlen); extern int esl_abc_XDealign(const ESL_ALPHABET *abc, ESL_DSQ *x, const ESL_DSQ *ref_ax, int64_t *opt_rlen); extern int esl_abc_ConvertDegen2X(const ESL_ALPHABET *abc, ESL_DSQ *dsq); /* 3. Other routines in the API. */ extern int esl_abc_GuessAlphabet(const int64_t *ct, int *ret_type); extern double esl_abc_Match (const ESL_ALPHABET *a, ESL_DSQ x, ESL_DSQ y, double *p); extern int esl_abc_IAvgScore (const ESL_ALPHABET *a, ESL_DSQ x, const int *sc); extern float esl_abc_FAvgScore (const ESL_ALPHABET *a, ESL_DSQ x, const float *sc); extern double esl_abc_DAvgScore (const ESL_ALPHABET *a, ESL_DSQ x, const double *sc); extern int esl_abc_IExpectScore(const ESL_ALPHABET *a, ESL_DSQ x, const int *sc, const float *p); extern float esl_abc_FExpectScore(const ESL_ALPHABET *a, ESL_DSQ x, const float *sc, const float *p); extern double esl_abc_DExpectScore(const ESL_ALPHABET *a, ESL_DSQ x, const double *sc, const double *p); extern int esl_abc_IAvgScVec (const ESL_ALPHABET *a, int *sc); extern int esl_abc_FAvgScVec (const ESL_ALPHABET *a, float *sc); extern int esl_abc_DAvgScVec (const ESL_ALPHABET *a, double *sc); extern int esl_abc_IExpectScVec(const ESL_ALPHABET *a, int *sc, const float *p); extern int esl_abc_FExpectScVec(const ESL_ALPHABET *a, float *sc, const float *p); extern int esl_abc_DExpectScVec(const ESL_ALPHABET *a, double *sc, const double *p); extern int esl_abc_FCount (const ESL_ALPHABET *a, float *ct, ESL_DSQ x, float wt); extern int esl_abc_DCount (const ESL_ALPHABET *a, double *ct, ESL_DSQ x, double wt); extern int esl_abc_EncodeType (char *typestring); extern char *esl_abc_DecodeType (int type); extern int esl_abc_ValidateSeq(const ESL_ALPHABET *a, const char *seq, int64_t L, char *errbuf); /* In the tests below, remember the rules of order in internal alphabets: * Canonical alphabet Gap Degeneracies Any None Missing * 0..K-1 K K+1..Kp-4 (Kp-3) (Kp-2) (Kp-1) * ACGT - RYMKSWHBVD N * ~ DNA: K=4 Kp=18 * ACDEFGHIKLMNPQRSTVWY - BJZOU X * ~ protein: K=20 Kp=29 * * ESL_DSQ is an unsigned 8-bit type, so don't test for >= 0 or compilers will complain. */ #define esl_abc_DigitizeSymbol(a, c) ((a)->inmap[(int)c]) #define esl_abc_XIsValid(a, x) ((x) < (a)->Kp) #define esl_abc_XIsResidue(a, x) ((x) < (a)->K || ((x) > (a)->K && (x) < (a)->Kp-2)) #define esl_abc_XIsCanonical(a, x) ((x) < (a)->K) #define esl_abc_XIsGap(a, x) ((x) == (a)->K) #define esl_abc_XIsDegenerate(a, x) ((x) > (a)->K && (x) < (a)->Kp-2) #define esl_abc_XIsUnknown(a, x) ((x) == (a)->Kp-3) #define esl_abc_XIsNonresidue(a, x) ((x) == (a)->Kp-2) #define esl_abc_XIsMissing(a, x) ((x) == (a)->Kp-1) #define esl_abc_XGetGap(a) ((a)->K) #define esl_abc_XGetUnknown(a) ((a)->Kp-3) #define esl_abc_XGetNonresidue(a) ((a)->Kp-2) #define esl_abc_XGetMissing(a) ((a)->Kp-1) #define esl_abc_CIsValid(a, c) (isascii(c) && (a)->inmap[(int)c] < (a)->Kp) #define esl_abc_CIsResidue(a, c) ((a)->inmap[(int)c] < (a)->K || ((a)->inmap[(int)c] > (a)->K && (a)->inmap[(int)c] < (a)->Kp-2)) #define esl_abc_CIsCanonical(a, c) ((a)->inmap[(int)c] < (a)->K) #define esl_abc_CIsGap(a, c) ((a)->inmap[(int)c] == (a)->K) #define esl_abc_CIsDegenerate(a, c) ((a)->inmap[(int)c] > (a)->K && (a)->inmap[(int)c] < (a)->Kp-2) #define esl_abc_CIsUnknown(a, c) ((a)->inmap[(int)c] == (a)->Kp-3) #define esl_abc_CIsNonresidue(a, c) ((a)->inmap[(int)c] == (a)->Kp-2) #define esl_abc_CIsMissing(a, c) ((a)->inmap[(int)c] == (a)->Kp-1) #define esl_abc_CGetGap(a) ((a)->sym[(int)(a)->K]) #define esl_abc_CGetUnknown(a) ((a)->sym[(int)(a)->Kp-3]) #define esl_abc_CGetNonresidue(a) ((a)->sym[(int)(a)->Kp-2]) #define esl_abc_CGetMissing(a) ((a)->sym[(int)(a)->Kp-1]) #endif /*eslALPHABET_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_exponential.c0000664361611702660230000005331512473612606016727 0ustar wheelerteddy/* Statistical routines for exponential distributions. * * Contents: * 1. Routines for evaluating densities and distributions * 2. Generic API routines: for general interface w/ histogram module * 3. Routines for dumping plots for files * 4. Routines for sampling (requires random module) * 5. Maximum likelihood fitting * 6. Stats driver * 7. Unit tests * 8. Test driver * 9. Example * 10. Copyright and license information * * xref STL9/138 */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_stats.h" #include "esl_exponential.h" #ifdef eslAUGMENT_RANDOM #include "esl_random.h" #endif #ifdef eslAUGMENT_HISTOGRAM #include "esl_histogram.h" #endif /**************************************************************************** * 1. Routines for evaluating densities and distributions ****************************************************************************/ /* lambda > 0 * mu <= x < infinity * * watch out: * - any lambda > 0 is valid... including infinity. Fitting code * may try to test such lambdas, and it must get back valid numbers, * never an NaN, or it will fail. IEEE754 allows us * to calculate log(inf) = inf, exp(-inf) = 0, and exp(inf) = inf. * But inf-inf = NaN, so Don't Do That. */ /* Function: esl_exp_pdf() * * Purpose: Calculates the probability density function for the * exponential, $P(X=x)$, given value , offset , * and decay parameter . */ double esl_exp_pdf(double x, double mu, double lambda) { if (x < mu) return 0.; return (lambda * exp(-lambda*(x-mu))); } /* Function: esl_exp_logpdf() * * Purpose: Calculates the log probability density function for the * exponential, $P(X=x)$, given value , offset , * and decay parameter . */ double esl_exp_logpdf(double x, double mu, double lambda) { if (x < mu) return -eslINFINITY; if (lambda == eslINFINITY) { /* limit as lambda->inf: avoid inf-inf! */ if (x == mu) return eslINFINITY; else return -eslINFINITY; } return (log(lambda) - lambda*(x-mu)); } /* Function: esl_exp_cdf() * * Purpose: Calculates the cumulative distribution function for the * exponential, $P(X \leq x)$, given value , offset , * and decay parameter . */ double esl_exp_cdf(double x, double mu, double lambda) { double y = lambda*(x-mu); /* y>=0 because lambda>0 and x>=mu */ if (x < mu) return 0.; /* 1-e^-y ~ y for small |y| */ if (y < eslSMALLX1) return y; else return 1 - exp(-y); } /* Function: esl_exp_logcdf() * * Purpose: Calculates the log of the cumulative distribution function * for the exponential, $log P(X \leq x)$, given value , * offset , and decay parameter . */ double esl_exp_logcdf(double x, double mu, double lambda) { double y = lambda * (x-mu); double ey = exp(-y); if (x < mu) return -eslINFINITY; /* When y is small, 1-e^-y = y, so answer is log(y); * when y is large, exp(-y) is small, log(1-exp(-y)) = -exp(-y). */ if (y == 0) return -eslINFINITY; /* don't allow NaN */ else if (y < eslSMALLX1) return log(y); else if (ey < eslSMALLX1) return -ey; else return log(1-ey); } /* Function: esl_exp_surv() * * Purpose: Calculates the survivor function, $P(X>x)$ (that is, 1-CDF, * the right tail probability mass) for an exponential distribution, * given value , offset , and decay parameter . */ double esl_exp_surv(double x, double mu, double lambda) { if (x < mu) return 1.0; return exp(-lambda * (x-mu)); } /* Function: esl_exp_logsurv() * * Purpose: Calculates the log survivor function, $\log P(X>x)$ (that is, * log(1-CDF), the log of the right tail probability mass) for an * exponential distribution, given value , offset , and * decay parameter . */ double esl_exp_logsurv(double x, double mu, double lambda) { if (x < mu) return 0.0; return -lambda * (x-mu); } /* Function: esl_exp_invcdf() * * Purpose: Calculates the inverse of the CDF; given a value * $0 <= p < 1$, returns the value $x$ at which the CDF * has that value. */ double esl_exp_invcdf(double p, double mu, double lambda) { return mu - 1/lambda * log(1. - p); } /* Function: esl_exp_invsurv() * * Purpose: Calculates the inverse of the survivor function, the score * at which the right tail's mass is $0 <= p < 1$, for an * exponential function with parameters and . */ double esl_exp_invsurv(double p, double mu, double lambda) { return mu - 1./lambda * log(p); } /*------------------ end of densities and distributions --------------------*/ /*------------------ end of densities and distributions --------------------*/ /***************************************************************** * 2. Generic API routines: for general interface w/ histogram module *****************************************************************/ /* Function: esl_exp_generic_pdf() * * Purpose: Generic-API version of PDF. */ double esl_exp_generic_pdf(double x, void *params) { double *p = (double *) params; return esl_exp_pdf(x, p[0], p[1]); } /* Function: esl_exp_generic_cdf() * * Purpose: Generic-API version of CDF. */ double esl_exp_generic_cdf(double x, void *params) { double *p = (double *) params; return esl_exp_cdf(x, p[0], p[1]); } /* Function: esl_exp_generic_surv() * * Purpose: Generic-API version of survival function. */ double esl_exp_generic_surv(double x, void *params) { double *p = (double *) params; return esl_exp_surv(x, p[0], p[1]); } /* Function: esl_exp_generic_invcdf() * * Purpose: Generic-API version of inverse CDF. */ double esl_exp_generic_invcdf(double p, void *params) { double *v = (double *) params; return esl_exp_invcdf(p, v[0], v[1]); } /*------------------------- end of generic API --------------------------*/ /**************************************************************************** * 3. Routines for dumping plots for files ****************************************************************************/ /* Function: esl_exp_Plot() * * Purpose: Plot some exponential function (for instance, * ) for parameters and , for * a range of values x from to in steps of ; * output to an open stream in xmgrace XY input format. * * Returns: on success. * * Throws: on any system write error, such as a filled disk. */ int esl_exp_Plot(FILE *fp, double mu, double lambda, double (*func)(double x, double mu, double lambda), double xmin, double xmax, double xstep) { double x; for (x = xmin; x <= xmax; x += xstep) if (fprintf(fp, "%f\t%g\n", x, (*func)(x, mu, lambda)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "exponential plot write failed"); if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "exponential plot write failed"); return eslOK; } /*-------------------- end plot dumping routines ---------------------------*/ /**************************************************************************** * 4. Routines for sampling (requires augmentation w/ random module) ****************************************************************************/ #ifdef eslAUGMENT_RANDOM /* Function: esl_exp_Sample() * * Purpose: Sample an exponential random variate * by the transformation method, given offset * and decay parameter . */ double esl_exp_Sample(ESL_RANDOMNESS *r, double mu, double lambda) { double p, x; p = esl_rnd_UniformPositive(r); x = mu - 1./lambda * log(p); /* really log(1-p), but if p uniform on 0..1 * then so is 1-p. */ return x; } #endif /*eslAUGMENT_RANDOM*/ /*--------------------------- end sampling ---------------------------------*/ /**************************************************************************** * 5. Maximum likelihood fitting ****************************************************************************/ /* Function: esl_exp_FitComplete() * * Purpose: Given an array of samples , fit * them to an exponential distribution. * Return maximum likelihood parameters and . * * Args: x - complete exponentially-distributed data [0..n-1] * n - number of samples in (n>0) * ret_mu - lower bound of the distribution (all x_i >= mu) * ret_lambda - RETURN: maximum likelihood estimate of lambda * * Returns: on success. * * Throws: if n=0 (no data). * * Xref: STL9/138. */ int esl_exp_FitComplete(double *x, int n, double *ret_mu, double *ret_lambda) { double mu, mean; int i; if (!n) ESL_EXCEPTION(eslEINVAL, "empty data vector provided for exponential fit"); /* ML mu is the lowest score. mu=x is ok in the exponential. */ mu = x[0]; for (i = 1; i < n; i++) if (x[i] < mu) mu = x[i]; mean = 0.; for (i = 0; i < n; i++) mean += x[i] - mu; mean /= (double) n; *ret_mu = mu; *ret_lambda = 1./mean; /* ML estimate trivial & analytic */ return eslOK; } /* Function: esl_exp_FitCompleteScale() * * Purpose: Given an array of samples , fit * them to an exponential distribution of known location * parameter . Return maximum likelihood scale * parameter . * * All $x_i \geq \mu$. * * Args: x - complete exponentially-distributed data [0..n-1] * n - number of samples in * mu - lower bound of the distribution (all x_i >= mu) * ret_lambda - RETURN: maximum likelihood estimate of lambda * * Returns: on success. * * Xref: J1/49. */ int esl_exp_FitCompleteScale(double *x, int n, double mu, double *ret_lambda) { double mean; int i; mean = 0.; for (i = 0; i < n; i++) mean += x[i] - mu; mean /= (double) n; *ret_lambda = 1./mean; /* ML estimate trivial & analytic */ return eslOK; } #ifdef eslAUGMENT_HISTOGRAM /* Function: esl_exp_FitCompleteBinned() * * Purpose: Fit a complete exponential distribution to the observed * binned data in a histogram , where each * bin i holds some number of observed samples x with values from * lower bound l to upper bound u (that is, $l < x \leq u$); * find maximum likelihood parameters $\mu,\lambda$ and * return them in <*ret_mu>, <*ret_lambda>. * * If the binned data in were set to focus on * a tail by virtual censoring, the "complete" exponential is * fitted to this tail. The caller then also needs to * remember what fraction of the probability mass was in this * tail. * * The ML estimate for $mu$ is the smallest observed * sample. For complete data, is generally set to * the smallest observed sample value, except in the * special case of a "rounded" complete dataset, where * is set to the lower bound of the smallest * occupied bin. For tails, is set to the cutoff * threshold , where we are guaranteed that is * at the lower bound of a bin (by how the histogram * object sets tails). * * The ML estimate for has an analytical * solution, so this routine is fast. * * If all the data are in one bin, the ML estimate of * $\lambda$ will be $\infty$. This is mathematically correct, * but is probably a situation the caller wants to avoid, perhaps * by choosing smaller bins. * * This function currently cannot fit an exponential tail * to truly censored, binned data, because it assumes that * all bins have equal width, but in true censored data, the * lower cutoff may fall anywhere in the first bin. * * Returns: on success. * * Throws: if dataset is true-censored. */ int esl_exp_FitCompleteBinned(ESL_HISTOGRAM *g, double *ret_mu, double *ret_lambda) { int i; double ai, bi, delta; double sa, sb; double mu = 0.; if (g->dataset_is == COMPLETE) { if (g->is_rounded) mu = esl_histogram_Bin2LBound(g, g->imin); else mu = g->xmin; } else if (g->dataset_is == VIRTUAL_CENSORED) /* i.e., we'll fit to tail */ mu = g->phi; else if (g->dataset_is == TRUE_CENSORED) ESL_EXCEPTION(eslEINVAL, "can't fit true censored dataset"); delta = g->w; sa = sb = 0.; for (i = g->cmin; i <= g->imax; i++) /* for each occupied bin */ { if (g->obs[i] == 0) continue; ai = esl_histogram_Bin2LBound(g,i); bi = esl_histogram_Bin2UBound(g,i); sa += g->obs[i] * (ai-mu); sb += g->obs[i] * (bi-mu); } *ret_mu = mu; *ret_lambda = 1/delta * (log(sb) - log(sa)); return eslOK; } #endif /*eslAUGMENT_HISTOGRAM*/ /**************************************************************************** * 6. Stats driver ****************************************************************************/ #ifdef eslEXPONENTIAL_STATS /* Compiles statistics on the accuracy of ML estimation of an exponential tail. * compile: gcc -g -O2 -Wall -I. -L. -o stats -DeslEXPONENTIAL_STATS esl_exponential.c -leasel -lm * run: ./stats > stats.out * * Output is, for each trial: * * * To get mean, stddev of lambda estimates: * % ./stats | avg -f2 */ #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_exponential.h" int main(int argc, char **argv) { ESL_RANDOMNESS *r = esl_randomness_Create(0); int ntrials; /* number of estimates to gather */ int N; /* number of samples collected to make each estimate */ double mu, lambda; /* parametric location, scale */ double est_mu, est_lambda; /* estimated location, scale */ int trial; int i; double *x; /* Configuration: (change & recompile as needed) */ ntrials = 1000; mu = 0.; lambda = 0.693; N = 95; x = malloc(sizeof(double) *N); for (trial = 0; trial < ntrials; trial++) { for (i = 0; i < N; i++) x[i] = esl_exp_Sample(r, mu, lambda); esl_exp_FitComplete(x, N, &est_mu, &est_lambda); /* est_mu = mu; esl_exp_FitCompleteScale(x, N, est_mu, &est_lambda); */ printf("%4d %8.4f %8.4f\n", i, est_mu, est_lambda); } free(x); return 0; } #endif /*eslEXPONENTIAL_STATS*/ /**************************************************************************** * 7. Unit tests ****************************************************************************/ /**************************************************************************** * 8. Test driver ****************************************************************************/ #ifdef eslEXPONENTIAL_TESTDRIVE /* Compile: gcc -g -Wall -I. -L. -o test -DeslEXPONENTIAL_TESTDRIVE esl_exponential.c -leasel -lm */ #include #include #include #include "easel.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_exponential.h" int main(int argc, char **argv) { ESL_HISTOGRAM *h; ESL_RANDOMNESS *r; double mu = 10.0; double lambda = 1.0; int n = 10000; double binwidth = 0.1; double emu, elambda; int i; double x; double *data; int ndata; int opti; int be_verbose = FALSE; char *plotfile = NULL; FILE *pfp = stdout; int plot_pdf = FALSE; int plot_logpdf = FALSE; int plot_cdf = FALSE; int plot_logcdf = FALSE; int plot_surv = FALSE; int plot_logsurv = FALSE; int xmin_set = FALSE; double xmin; int xmax_set = FALSE; double xmax; int xstep_set = FALSE; double xstep; for (opti = 1; opti < argc && *(argv[opti]) == '-'; opti++) { if (strcmp(argv[opti], "-m") == 0) mu = atof(argv[++opti]); else if (strcmp(argv[opti], "-l") == 0) lambda = atof(argv[++opti]); else if (strcmp(argv[opti], "-n") == 0) n = atoi(argv[++opti]); else if (strcmp(argv[opti], "-o") == 0) plotfile = argv[++opti]; else if (strcmp(argv[opti], "-v") == 0) be_verbose = TRUE; else if (strcmp(argv[opti], "-w") == 0) binwidth = atof(argv[++opti]); else if (strcmp(argv[opti], "-C") == 0) plot_cdf = TRUE; else if (strcmp(argv[opti], "-LC") == 0) plot_logcdf = TRUE; else if (strcmp(argv[opti], "-P") == 0) plot_pdf = TRUE; else if (strcmp(argv[opti], "-LP") == 0) plot_logpdf = TRUE; else if (strcmp(argv[opti], "-S") == 0) plot_surv = TRUE; else if (strcmp(argv[opti], "-LS") == 0) plot_logsurv = TRUE; else if (strcmp(argv[opti], "-XL") == 0) { xmin_set = TRUE; xmin = atof(argv[++opti]); } else if (strcmp(argv[opti], "-XH") == 0) { xmax_set = TRUE; xmax = atof(argv[++opti]); } else if (strcmp(argv[opti], "-XS") == 0) { xstep_set = TRUE; xstep = atof(argv[++opti]); } else ESL_EXCEPTION(eslEINVAL, "bad option"); } if (be_verbose) printf("Parametric: mu = %f lambda = %f\n", mu, lambda); r = esl_randomness_Create(0); h = esl_histogram_CreateFull(mu, 100., binwidth); if (plotfile != NULL) { if ((pfp = fopen(plotfile, "w")) == NULL) ESL_EXCEPTION(eslFAIL, "Failed to open plotfile"); } if (! xmin_set) xmin = mu; if (! xmax_set) xmax = mu+20* (1./lambda); if (! xstep_set) xstep = 0.1; for (i = 0; i < n; i++) { x = esl_exp_Sample(r, mu, lambda); esl_histogram_Add(h, x); } esl_histogram_GetData(h, &data, &ndata); esl_exp_FitComplete(data, ndata, &emu, &elambda); if (be_verbose) printf("Complete data fit: mu = %f lambda = %f\n", emu, elambda); if (fabs( (emu-mu)/mu ) > 0.01) ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted mu > 1%\n"); if (fabs( (elambda-lambda)/lambda ) > 0.10) ESL_EXCEPTION(eslFAIL, "Error in (complete) fitted lambda > 10%\n"); esl_exp_FitCompleteBinned(h, &emu, &elambda); if (be_verbose) printf("Binned data fit: mu = %f lambda = %f\n", emu, elambda); if (fabs( (emu-mu)/mu ) > 0.01) ESL_EXCEPTION(eslFAIL, "Error in (binned) fitted mu > 1%\n"); if (fabs( (elambda-lambda)/lambda ) > 0.10) ESL_EXCEPTION(eslFAIL, "Error in (binned) fitted lambda > 10%\n"); if (plot_pdf) esl_exp_Plot(pfp, mu, lambda, &esl_exp_pdf, xmin, xmax, xstep); if (plot_logpdf) esl_exp_Plot(pfp, mu, lambda, &esl_exp_logpdf, xmin, xmax, xstep); if (plot_cdf) esl_exp_Plot(pfp, mu, lambda, &esl_exp_cdf, xmin, xmax, xstep); if (plot_logcdf) esl_exp_Plot(pfp, mu, lambda, &esl_exp_logcdf, xmin, xmax, xstep); if (plot_surv) esl_exp_Plot(pfp, mu, lambda, &esl_exp_surv, xmin, xmax, xstep); if (plot_logsurv) esl_exp_Plot(pfp, mu, lambda, &esl_exp_logsurv, xmin, xmax, xstep); if (plotfile != NULL) fclose(pfp); esl_randomness_Destroy(r); esl_histogram_Destroy(h); return 0; } #endif /*eslEXPONENTIAL_TESTDRIVE*/ /**************************************************************************** * 9. Example ****************************************************************************/ #ifdef eslEXPONENTIAL_EXAMPLE /*::cexcerpt::exp_example::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslEXPONENTIAL_EXAMPLE\ -DeslAUGMENT_HISTOGRAM -DeslAUGMENT_RANDOM -DeslAUGMENT_STATS\ esl_exponential.c esl_histogram.c esl_random.c esl_stats.c easel.c -lm */ #include #include "easel.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_exponential.h" int main(int argc, char **argv) { double mu = -50.0; double lambda = 0.5; ESL_RANDOMNESS *r = esl_randomness_Create(0); ESL_HISTOGRAM *h = esl_histogram_CreateFull(mu, 100., 0.1); int n = 10000; double emu, elambda; int i; double x; double *data; int ndata; for (i = 0; i < n; i++) { x = esl_exp_Sample(r, mu, lambda); esl_histogram_Add(h, x); } esl_histogram_GetData(h, &data, &ndata); /* Plot the empirical (sampled) and expected survivals */ esl_histogram_PlotSurvival(stdout, h); esl_exp_Plot(stdout, mu, lambda, &esl_exp_surv, h->xmin, h->xmax, 0.1); /* ML fit to complete data, and plot fitted survival curve */ esl_exp_FitComplete(data, ndata, &emu, &elambda); esl_exp_Plot(stdout, emu, elambda, &esl_exp_surv, h->xmin, h->xmax, 0.1); /* ML fit to binned data, plot fitted survival curve */ esl_exp_FitCompleteBinned(h, &emu, &elambda); esl_exp_Plot(stdout, emu, elambda, &esl_exp_surv, h->xmin, h->xmax, 0.1); esl_randomness_Destroy(r); esl_histogram_Destroy(h); return 0; } /*::cexcerpt::exp_example::end::*/ #endif /*eslEXPONENTIAL_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_exponential.c 770 2012-06-06 19:33:59Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_exponential.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_msa_testfiles/0000775361611702660230000000000012473272234017067 5ustar wheelerteddyhmmer-3.1b2/easel/esl_msa_testfiles/selex/0000775361611702660230000000000012473610606020206 5ustar wheelerteddyhmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.bad.110000664361611702660230000000050712473612606022222 0ustar wheelerteddyseq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx seq1 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY hmmer-3.1b2/easel/esl_msa_testfiles/selex/00MANIFEST0000664361611702660230000000270012473612606021500 0ustar wheelerteddy# in whole file in last alignment # ---------------- ----------------- # nali nseq nres nseq nres # ---- ---- ---- ---- ---- selex.good.1 eslOK amino 1 5 20 5 20 selex.good.2 eslOK amino 1 5 40 5 40 selex.good.3 eslOK amino 1 7 40 7 40 # selex.bad.1 eslEOF /no alignment data found/ selex.bad.2 eslEFORMAT /\(line 11\): expected \d+ lines/ selex.bad.3 eslEFORMAT /\(line 1\): #=SS must follow/ selex.bad.4 eslEFORMAT /\(line 4\): #=SA must follow/ selex.bad.5 eslEFORMAT /\(line 7\): too many #=RF lines/ selex.bad.6 eslEFORMAT /\(line 7\): too many #=CS lines/ selex.bad.7 eslEFORMAT /\(line 7\): too many #=SS lines/ selex.bad.8 eslEFORMAT /\(line 5\): too many #=SA lines/ selex.bad.9 eslEFORMAT /\(line 8\): #=RF line isn't in expected order/ selex.bad.10 eslEFORMAT /\(line 9\): #=CS line isn't in expected order/ selex.bad.11 eslEFORMAT /\(line 9\): #=SS line isn't in expected order/ selex.bad.12 eslEFORMAT /\(line 8\): #=SA line isn't in expected order/ selex.bad.13 eslEFORMAT /\(line 11\): seq line isn't in expected order/ selex.bad.14 eslEFORMAT /\(line 10\): expected seq \S+, saw/ hmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.bad.120000664361611702660230000000050712473612606022223 0ustar wheelerteddyseq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY #=SA xxxxxxxxxxxxxxxxxxxx #=SA xxxxxxxxxxxxxxxxxxxx seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY hmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.good.10000664361611702660230000000020212473612607022334 0ustar wheelerteddyseq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY hmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.bad.140000664361611702660230000000042212473612606022221 0ustar wheelerteddyseq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seqX ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY hmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.bad.100000664361611702660230000000051012473612606022213 0ustar wheelerteddyseq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY #=CS xxxxxxxxxxxxxxxxxxxx #=CS xxxxxxxxxxxxxxxxxxxx seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY hmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.bad.20000664361611702660230000000036112473612606022140 0ustar wheelerteddy# Number of lines in each block must be the same. seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY hmmer-3.1b2/easel/esl_msa_testfiles/selex/.dropbox.attr0000775361611702660230000000000212473272234022631 0ustar wheelerteddy{}hmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.good.20000664361611702660230000000171612473612607022350 0ustar wheelerteddy# DOS format (\r\n), and doesn't end in a newline. # #=RF xxxxxxxxxxxxxxxxxxxx #=CS xxxxxxxxxxxxxxxxxxxx seq1 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx #=SA xxxxxxxxxxxxxxxxxxxx seq2 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx #=SA xxxxxxxxxxxxxxxxxxxx seq3 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx #=SA xxxxxxxxxxxxxxxxxxxx seq4 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx #=SA xxxxxxxxxxxxxxxxxxxx seq5 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx #=SA xxxxxxxxxxxxxxxxxxxx #=RF xxxxxxxxxxxxxxxxxxxx #=CS xxxxxxxxxxxxxxxxxxxx seq1 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx #=SA xxxxxxxxxxxxxxxxxxxx seq2 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx #=SA xxxxxxxxxxxxxxxxxxxx seq3 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx #=SA xxxxxxxxxxxxxxxxxxxx seq4 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx #=SA xxxxxxxxxxxxxxxxxxxx seq5 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx #=SA xxxxxxxxxxxxxxxxxxxxhmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.bad.90000664361611702660230000000050612473612607022151 0ustar wheelerteddyseq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY #=RF xxxxxxxxxxxxxxxxxxxx seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY #=RF xxxxxxxxxxxxxxxxxxxx seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY hmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.bad.50000664361611702660230000000030412473612606022140 0ustar wheelerteddy# # #=RF xxxxxxxxxxxxxxxxxxxx seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY #=RF xxxxxxxxxxxxxxxxxxxx seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY hmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.bad.60000664361611702660230000000027612473612606022151 0ustar wheelerteddyseq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY #=CS xxxxxxxxxxxxxxxxxxxx #=CS xxxxxxxxxxxxxxxxxxxx hmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.bad.70000664361611702660230000000045212473612606022146 0ustar wheelerteddyseq1 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx seq2 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx seq3 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx #=SS xxxxxxxxxxxxxxxxxxxx seq4 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx seq5 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx hmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.bad.10000664361611702660230000000005412473612606022136 0ustar wheelerteddy # No alignment data. # Should return EOF. hmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.bad.30000664361611702660230000000024312473612606022140 0ustar wheelerteddy#=SS xxxxxxxxxxxxxxxxxxxx seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY hmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.good.30000664361611702660230000000064412473612607022350 0ustar wheelerteddy #=CS #=RF seq1 ACDEFGHIKLMNPQRSTVWY long_name GHIKLMNPQRSTVWY blank_seq_all_gaps seq2 ACDEF---KLMNPQRSTVWY seq3 ACDEF...KLMNPQRSTVWY # embedded comments ok seq4 ACDEFGHIKLMNPQRSTVWY seq5 CDEFGHIKLMNPQRSTVWY #=SS #=SA #=CS #=RF seq1 ACDEFGHIKLMNPQRSTVWY long_name GHIKLMNPQRSTVWY blank_seq_all_gaps seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY #=SS #=SAhmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.bad.40000664361611702660230000000025112473612606022140 0ustar wheelerteddy# # #=SA xxxxxxxxxxxxxxxxxxxx seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY hmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.bad.80000664361611702660230000000027612473612606022153 0ustar wheelerteddyseq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY #=SA xxxxxxxxxxxxxxxxxxxx #=SA xxxxxxxxxxxxxxxxxxxx seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY hmmer-3.1b2/easel/esl_msa_testfiles/selex/selex.bad.130000664361611702660230000000050712473612606022224 0ustar wheelerteddyseq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx seq4 ACDEFGHIKLMNPQRSTVWY seq5 ACDEFGHIKLMNPQRSTVWY seq1 ACDEFGHIKLMNPQRSTVWY seq2 ACDEFGHIKLMNPQRSTVWY seq3 ACDEFGHIKLMNPQRSTVWY seq4 ACDEFGHIKLMNPQRSTVWY #=SS xxxxxxxxxxxxxxxxxxxx seq5 ACDEFGHIKLMNPQRSTVWY hmmer-3.1b2/easel/esl_msa_testfiles/.dropbox.attr0000775361611702660230000000000212473272215021510 0ustar wheelerteddy{}hmmer-3.1b2/easel/esl_rootfinder.h0000664361611702660230000000402112473612607016550 0ustar wheelerteddy/* Finding roots of functions. * * SRE, Fri Apr 6 10:01:43 2007 [Janelia] * SVN $Id: esl_rootfinder.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_rootfinder.h $ */ #ifndef ESL_ROOTFINDER_INCLUDED #define ESL_ROOTFINDER_INCLUDED #include "esl_config.h" typedef struct { int (*func)(double, void*, double*); int (*fdf) (double, void*, double*, double*); void *params; double xl; double fl; double xr; double fr; double x0; double f0; double x; double fx; double dfx; int iter; double abs_tolerance; double rel_tolerance; double residual_tol; int max_iter; } ESL_ROOTFINDER; extern ESL_ROOTFINDER *esl_rootfinder_Create (int (*func)(double, void*, double*), void *params); extern ESL_ROOTFINDER *esl_rootfinder_CreateFDF(int (*fdf) (double, void*, double*, double*), void *params); extern int esl_rootfinder_SetBrackets(ESL_ROOTFINDER *R, double xl, double xr); extern int esl_rootfinder_SetAbsoluteTolerance(ESL_ROOTFINDER *R, double tol); extern int esl_rootfinder_SetRelativeTolerance(ESL_ROOTFINDER *R, double tol); extern int esl_rootfinder_SetResidualTolerance(ESL_ROOTFINDER *R, double tol); extern int esl_rootfinder_SetMaxIterations(ESL_ROOTFINDER *R, int maxiter); extern void esl_rootfinder_Destroy(ESL_ROOTFINDER *R); extern int esl_root_Bisection(ESL_ROOTFINDER *R, double xl, double xr, double *ret_x); extern int esl_root_NewtonRaphson(ESL_ROOTFINDER *R, double guess, double *ret_x); #endif /*eslROOTFINDER_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/testsuite/0000775361611702660230000000000012473613140015406 5ustar wheelerteddyhmmer-3.1b2/easel/testsuite/driver_report.pl0000775361611702660230000000767612473612611020656 0ustar wheelerteddy#! /usr/bin/perl # Make sure that all drivers compile. # (Eventually, we should also make sure they run! But that # means tracking their command-line arguments.) # # In all easel modules, we look for lines like # #ifdef eslFOO_(EXAMPLE|TESTDRIVE|REGRESSION|BENCHMARK|STATS)* # that precede one or more example main()'s, then we compile the # module with that #define. # # Usage: from testsuite directory: # ./driver_report.pl # # This assumes you've already compiled the library. To recompile # from scratch, do # ./driver_report.pl -c # # Some regression tests run against the old squid library. # squid must be installed and compiled; all drivers are linked # against -lsquid. # The path to squid's headers and libraries is assumed to be ~/src/squid. # This location can be overridden by setting SQUIDSRC in the environment. # # SRE, Fri Mar 2 10:01:44 2007 (Janelia) # SVN $Id: driver_report.pl 664 2011-02-27 17:08:36Z eddys $ require "getopts.pl"; &Getopts('c'); if ($opt_c) { $do_recompile = 1; } if ($ENV{'CC'} ne "") { $CC = $ENV{'CC'}; } else { $CC = "gcc"; } if ($ENV{'CFLAGS'} ne "") { $CFLAGS = $ENV{'CFLAGS'}; } else { $CFLAGS = "-g -Wall"; } if ($ENV{'SQUIDSRC'} ne "") { $SQUIDSRC = $ENV{'SQUIDSRC'}; } else { $SQUIDSRC = "/groups/eddys/home/eddys/src/squid"; } $progname = "drivertest"; print("Driver code compilation test for Easel:\n"); print("(Compiling with $CC $CFLAGS -L$SQUIDSRC -I$SQUIDSRC)\n\n"); if ($do_recompile) { print("Recompiling... "); `(cd ..; make clean > /dev/null)`; if ($? != 0) { print "[make clean failed]\n"; exit; } `(cd ..; ./configure --enable-debugging > /dev/null)`; if ($? != 0) { print "[configure failed]\n"; exit; } `(cd ..; make > /dev/null)`; if ($? != 0) { print "[make failed]\n"; exit; } print "ok.\n\n"; } @modules = <../esl_*.c>; unshift(@modules, "../easel.c"); $nmodules = 0; $ndrivers = 0; $nfailures = 0; $no_testdriver= 0; $no_example = 0; foreach $module (@modules) { $module =~ /^\.\.\/(\S+)/; $basecfile = $1; $nmodules++; printf("%-20s ", $basecfile); open(DRIVERFLAGS, qq/grep -E "#ifdef esl.*_(EXAMPLE|TESTDRIVE|REGRESSION|BENCHMARK|STATS)" $module | /) || die; $has_example = $has_testdriver = 0; $n = 0; while () { /^#ifdef (esl\S+_(EXAMPLE|TESTDRIVE|REGRESSION|BENCHMARK|STATS)\d*)/; $flag = $1; $type = $2; if ($saw_flag{$flag}) { next; } if ($type eq "EXAMPLE") { $has_example = 1; } if ($type eq "TESTDRIVE") { $has_testdriver = 1; } if ($n == 0) { printf("%-30s ", $flag); } else { printf("%20s %-30s ", "", $flag); } $n++; $ndrivers++; `$CC $CFLAGS -I.. -L.. -L$SQUIDSRC -I$SQUIDSRC -o drivertest -D$flag $module -leasel -lsquid -lm >& /dev/null`; if ($? != 0) { print("[FAILED]\n"); $nfailures++; } else { print("ok.\n"); } $saw_flag{$flag} = 1; } if ($n == 0) { print "[NO DRIVERS PRESENT]\n"; } close DRIVERFLAGS; if (! $has_testdriver) { push @notestdrivelist, $module; $no_testdriver++;} if (! $has_example) { push @noexamplelist, $module; $no_example++; } } printf("\nOf %d total modules in Easel:\n", $nmodules); if ($no_example == 0) { printf(" - All %d have at least one example main()\n", $nmodules); } else { printf(" - %d do not have an example main()\n", $no_example); foreach $module (@noexamplelist) { printf(" %s\n", $module); } } if ($no_testdriver == 0) { printf(" - All %d have at least one test driver main()\n", $nmodules); } else { printf(" - %d do not have a test driver main()\n", $no_testdriver); foreach $module (@notestdrivelist) { printf(" %s\n", $module); } } print "\n"; if ($nfailures == 0) { printf("All of the %d driver main()'s compile successfully\n", $ndrivers); } else { printf("%d of the %d driver main()'s fail to compile\n", $nfailures, $ndrivers); } unlink $progname; hmmer-3.1b2/easel/testsuite/e2.sh0000775361611702660230000000123712473612611016260 0ustar wheelerteddy#! /bin/sh # Usage: ./e2.sh # Example: ./e2.sh ../miniapps/esl-seqstat ../formats/stockholm.1 # # This tests that % cat foo.sto | esl-seqstat - # produces an error message: Format of seqfile - unrecognized. # whereas % cat foo.sto | esl-seqstat --informat stockholm - # succeeds prog=$1 alifile=$2 output=`cat $alifile | $prog - 2>&1 | head -n 1 | grep -c "^Format of seqfile - unrecognized."` if test "$output" = 0 then echo "FAIL" exit 1 fi output=`cat $alifile | $prog --informat stockholm - 2>&1` if test $? -gt 0 then echo "FAIL" exit 1 fi echo "ok" exit 0 hmmer-3.1b2/easel/testsuite/valgrind_report.pl0000775361611702660230000000637312473612611021162 0ustar wheelerteddy#! /usr/bin/perl # Run the testsuite under Valgrind, to check for memory leakage. # # Usage: from testsuite directory: # testsuite/valgrind_report.pl # This assumes you've already compiled the library. To recompile # from scratch, do # ./driver_report.pl -c # # SRE, Fri Mar 2 08:37:48 2007 [Janelia] # SVN $Id: valgrind_report.pl 231 2008-03-25 14:43:57Z eddys $ require "getopts.pl"; &Getopts('c'); if ($opt_c) { $do_recompile = 1; } if ($ENV{'CC'} ne "") { $CC = $ENV{'CC'}; } else { $CC = "gcc"; } if ($ENV{'CFLAGS'} ne "") { $CFLAGS = $ENV{'CFLAGS'}; } else { $CFLAGS = "-g -Wall"; } printf("Memory leak testing for Easel, using valgrind:\n\n"); if ($do_recompile) { print("Recompiling... "); `(cd ..; make clean > /dev/null)`; if ($? != 0) { print "[make clean failed]\n"; exit; } `(cd ..; ./configure --enable-debugging > /dev/null)`; if ($? != 0) { print "[configure failed]\n"; exit; } `(cd ..; make > /dev/null)`; if ($? != 0) { print "[make failed]\n"; exit; } print "ok.\n\n"; } @modules = <../esl_*.c>; unshift(@modules, "../easel.c"); $nmodules = 0; $npresent = 0; $ncompiled = 0; $nsuccess = 0; $nleaking = 0; foreach $module (@modules) { $module =~ /^\.\.\/(\S+)/; $basecfile = $1; $nmodules++; # create the eslDMATRIX_TESTDRIVE flag and dmatrix_utest program name from esl_dmatrix.c if ($basecfile =~ /^(esl_)?(\S+).c/) { $base = $2; $progname = $base."_utest"; $base =~ tr/a-z/A-Z/; $flag = "esl".$base."_TESTDRIVE"; } printf("%-20s ", $basecfile); # one way to fail: there isn't a test driver at all `grep $flag $module`; if ($? != 0) { printf(" [NO DRIVER]\n"); next; } $npresent++; `$CC $CFLAGS -I.. -L.. -o $progname -D$flag $module -leasel -lm >& /dev/null`; if ($? != 0) { printf(" [COMPILE FAILED]\n"); next; }; $ncompiled++; push @proglist, $progname; $output = `valgrind ./$progname 2>&1`; if ($? != 0) { printf(" [VALGRIND FAILED]\n"); next; }; $nsuccess++; if ($output =~ /malloc\/free: in use at exit: (\S+) bytes in (\S+) blocks/) { if ($1 > 0) { $nleaking++; print("[LEAK DETECTED ]\n"); } else { print("ok.\n"); } } else { print "<< problem parsing valgrind output >>\n"; } } printf("\nOf %d total modules in Easel:\n", $nmodules); if ($npresent != $nmodules) { printf(" - %d have test drivers, %d do not\n", $npresent, $nmodules-$npresent); } else { printf(" - All %d have test drivers\n", $npresent); } if ($ncompiled != $npresent) { printf(" - %d compiled, %d did not\n", $ncompiled, $npresent-$ncompiled); } else { printf(" - All %d compiled\n", $ncompiled); } if ($nsuccess != $ncompiled) { printf(" - %d ran successfully, %d did not\n", $nsuccess, $ncompiled-$nsuccess); } else { printf(" - All %d ran successfully\n", $nsuccess); } print "\n"; if ($nleaking == 0) { printf("None of %d .c's with running test drivers) show memory leaks\n", $nsuccess); } else { printf("%d of %d .c's with running test drivers) are leaking.\n", $nleaking, $nsuccess); } unlink @proglist; hmmer-3.1b2/easel/testsuite/coverage_report.pl0000775361611702660230000000727712473612611021153 0ustar wheelerteddy#! /usr/bin/perl # Measures testsuite coverage (as percentage of source lines), # using gcov. # # Usage: from testsuite directory: # ./coverage_report.pl # # This assumes you've already compiled the library. To recompile # from scratch, do # ./coverage_report.pl -c # # It assumes you have 'sloccount' installed, so it can count # ANSI C lines in files with no test driver. If you don't, use # ./coverage_report.pl -s # # SRE, Thu Mar 1 19:22:57 2007 (Janelia) # SVN $Id: coverage_report.pl 231 2008-03-25 14:43:57Z eddys $ require "getopts.pl"; $have_sloccount = 1; &Getopts('cs'); if ($opt_c) { $do_recompile = 1; } if ($opt_s) { $have_sloccount = 0; } if ($ENV{'CC'} ne "") { $CC = $ENV{'CC'}; } else { $CC = "gcc"; } $CFLAGS = "-g -Wall -fprofile-arcs -ftest-coverage"; printf("Code coverage test for Easel, using gcov:\n\n"); if ($do_recompile) { print("Recompiling... "); `(cd ..; make clean > /dev/null)`; if ($? != 0) { print "[make clean failed]\n"; exit; } `(cd ..; ./configure --enable-gcov > /dev/null)`; if ($? != 0) { print "[configure failed]\n"; exit; } `(cd ..; make > /dev/null)`; if ($? != 0) { print "[make failed]\n"; exit; } print "ok.\n\n"; } @modules = <../esl_*.c>; unshift(@modules, "../easel.c"); $nmodules = 0; $npresent = 0; $ncompiled = 0; $nsuccess = 0; $nlines = 0; $nlines_covered = 0; foreach $module (@modules) { $module =~ /^\.\.\/(\S+)/; $basecfile = $1; $nmodules++; # create the eslDMATRIX_TESTDRIVE flag and dmatrix_utest program name from esl_dmatrix.c if ($module =~ /^\.\.\/(esl_)?(\S+).c/) { $base = $2; $progname = $base."_utest"; $base =~ tr/a-z/A-Z/; $flag = "esl".$base."_TESTDRIVE"; } printf("%-20s ", $basecfile); # one way to fail: there isn't a test driver at all `grep $flag $module`; if ($? != 0) { printf("%6.2f%% coverage [driver ABSENT]\n", 0); push @nodriverlist, $module; next; } $npresent++; `$CC $CFLAGS -I.. -L.. -o $progname -D$flag $module -leasel -lm >& /dev/null`; if ($? != 0) { printf("%6.2f%% coverage [compilation FAILED]\n", 0); next; }; $ncompiled++; `./$progname >& /dev/null`; if ($? != 0) { printf("%6.2f%% coverage [test driver FAILED ]\n", 0); next; }; $nsuccess++; $output = `gcov $module`; if ($output =~ /File.*$module.*\nLines executed:\s*(\d+\.\d+)% of\s+(\d+)/) { $pct_cvg = $1; $nlines += $2; $nlines_covered += $1*$2/100; printf("%6.2f%% coverage\n", $pct_cvg); } else {die "failed to parse gcov output";} } if ($have_sloccount) { foreach $badmodule (@nodriverlist) { $output = `sloccount $badmodule`; if ($output =~ /ansic:\s+(\d+)/) { $nlines_nodrivers += $1; } else { die("failed to parse sloccount output"); } } } printf("\nOf %d total modules in Easel:\n", $nmodules); if ($npresent != $nmodules) { printf(" - %d have test drivers, %d do not\n", $npresent, $nmodules-$npresent); } else { printf(" - All %d have test drivers\n", $npresent); } if ($ncompiled != $npresent) { printf(" - %d compiled, %d did not\n", $ncompiled, $npresent-$ncompiled); } else { printf(" - All %d compiled\n", $ncompiled); } if ($nsuccess != $ncompiled) { printf(" - %d ran successfully, %d did not\n", $nsuccess, $ncompiled-$nsuccess); } else { printf(" - All %d ran successfully\n", $nsuccess); } print "\n"; printf("Total coverage (of .c's with test drivers): %.2f%%\n", 100.*$nlines_covered / $nlines); if ($have_sloccount) { printf("Total coverage (including .c files without drivers yet): %.2f%%\n", 100.*$nlines_covered / ($nlines+$nlines_nodrivers)); } hmmer-3.1b2/easel/testsuite/trna-5.stk0000664361611702660230000000212512473612611017241 0ustar wheelerteddy# STOCKHOLM 1.0 #=GF AU Infernal 0.1 tRNA1 GCGGAUUUAGCUCAGUuGGG.AGAGCGCCAGACUGAAGAUCUGGAGGuCCUGUGUUCGAUCCACAGAAUUCGCA #=GR tRNA1 PP ****************9887.***************************************************** tRNA2 UCCGAUAUAGUGUAAC.GGCuAUCACAUCACGCUUUCACCGUGGAGA.CCGGGGUUCGACUCCCCGUAUCGGAG #=GR tRNA2 PP ****************.8888**************************.************************** tRNA3 UCCGUGAUAGUUUAAU.GGUcAGAAUGGGCGCUUGUCGCGUGCCAGA.UCGGGGUUCAAUUCCCCGUCGCGGAG #=GR tRNA3 PP ****************.******************************.************************** tRNA4 GCUCGUAUGGCGCAGU.GGU.AGCGCAGCAGAUUGCAAAUCUGUUGGuCCUUAGUUCGAUCCUGAGUGCGAGCU #=GR tRNA4 PP ****************.***.***************************************************** tRNA5 ....ACAUGGCGCAGUuGGU.AGCGCGCUUCCCUUGCAAGGAAGAGGuCAUCGGUUCGAUUCCGGUUGC..... #=GR tRNA5 PP ....****************.************************************************..... #=GC SS_cons (((((((,,<<<<___.___._>>>>,<<<<<_______>>>>>,,,.,<<<<<_______>>>>>))))))): #=GC RF gccccugUAGcucAaU.GGU.AgagCauuggaCUuuuAAuccaaagg.ugugGGUUCgAaUCCcaccaggggcA // hmmer-3.1b2/easel/testsuite/.dropbox.attr0000775361611702660230000000000212473272026020034 0ustar wheelerteddy{}hmmer-3.1b2/easel/testsuite/i3-blank-gf.pl0000775361611702660230000000511112473612611017740 0ustar wheelerteddy#! /usr/bin/perl # Bug #e5: blank text line following #=GF handled improperly. # # Easel was allowing blank text, because we want to allow blank #=GF CC # lines for line spacing in human-readable comments. # # Problem is that then blank DE or AC lines are also accepted. HMMER # then propagates blank DESC or ACC lines to its save files. But HMMER # save file parser strictly requires DESC or ACC . # # SRE, Tue Jul 13 10:46:02 2010 # SVN $Id: i3-blank-gf.pl 715 2011-08-03 21:04:24Z eddys $ BEGIN { $builddir = shift; $srcdir = shift; $tmppfx = shift; } # Verify that we have all the executables we need for the test. if (! -x "$builddir/miniapps/esl-reformat") { die "FAIL: didn't find esl-reformat binary in $builddir/miniapps\n"; } # Create four test files # .sto1: AC, DE followed by spaces; invalid format # .sto2: AC, DE followed by \n; invalid format # .sto3, CC followed by spaces; valid format # .sto4, CC followed by \n; valid format open(MSA1, ">$tmppfx.sto1") || die "FAIL: couldn't create $tmppfx.sto1\n"; print MSA1 << "EOF"; # STOCKHOLM 1.0 #=GF AC #=GF DE seq1 ACGTACGTACGT seq2 ACGTACGTACGT // EOF close MSA1; open(MSA2, ">$tmppfx.sto2") || die "FAIL: couldn't create $tmppfx.sto2\n"; print MSA2 << "EOF"; # STOCKHOLM 1.0 #=GF AC #=GF DE seq1 ACGTACGTACGT seq2 ACGTACGTACGT // EOF close MSA2; open(MSA3, ">$tmppfx.sto3") || die "FAIL: couldn't create $tmppfx.sto3\n"; print MSA3 << "EOF"; # STOCKHOLM 1.0 #=GF CC seq1 ACGTACGTACGT seq2 ACGTACGTACGT // EOF close MSA3; open(MSA4, ">$tmppfx.sto4") || die "FAIL: couldn't create $tmppfx.sto4\n"; print MSA4 << "EOF"; # STOCKHOLM 1.0 #=GF CC seq1 ACGTACGTACGT seq2 ACGTACGTACGT // EOF close MSA4; $output = `$builddir/miniapps/esl-reformat stockholm $tmppfx.sto1 2>&1`; if ($? == 0) { die "FAIL: blank AC,DE lines should be invalid Stockholm format (bug #e5) (1)\n"; } $output = `$builddir/miniapps/esl-reformat stockholm $tmppfx.sto2 2>&1`; if ($? == 0) { die "FAIL: blank AC,DE lines should be invalid Stockholm format (bug #e5) (2)\n"; } $output = `$builddir/miniapps/esl-reformat stockholm $tmppfx.sto3`; if ($? != 0) { die "FAIL: blank CC line should be valid Stockholm format (1)\n"; } if ($output !~ /#=GF CC/) { die "FAIL: blank CC line did not propagate\n"; } $output = `$builddir/miniapps/esl-reformat stockholm $tmppfx.sto4`; if ($? != 0) { die "FAIL: blank CC line should be valid Stockholm format (2)\n"; } if ($output !~ /#=GF CC/) { die "FAIL: blank CC line did not propagate\n"; } print "ok\n"; unlink <$tmppfx.sto*>; exit 0; hmmer-3.1b2/easel/testsuite/Makefile.in0000664361611702660230000000446412473612611017465 0ustar wheelerteddytop_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ @top_srcdir@ SHELL = /bin/sh CC = @CC@ CFLAGS = @CFLAGS@ @PTHREAD_CFLAGS@ @PIC_FLAGS@ CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ SIMDFLAGS = @SIMD_CFLAGS@ DEFS = @DEFS@ LIBS = @LIBGSL@ @LIBS@ -lm MPILIBS = @MPILIBS@ SQCLEVEL = 2 QUIET_SUBDIR0 = +${MAKE} -C #space separator after -c QUIET_SUBDIR1 = ifndef V QUIET_CC = @echo ' ' CC $@; QUIET_GEN = @echo ' ' GEN $@; QUIET_AR = @echo ' ' AR $@; QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR1 = ; echo ' ' SUBDIR $$subdir; \ ${MAKE} -C $$subdir endif .PHONY: check dcheck clean distclean check: @echo @echo Running Easel test suite... @echo @${srcdir}/../devkit/sqc ${SQCLEVEL} ${srcdir}/testsuite.sqc .. ${srcdir}/.. dcheck: @echo Running developer testsuite... @echo -n Running unit tests... @${srcdir}/../devkit/sqc ${SQCLEVEL} ${srcdir}/testsuite.sqc .. ${srcdir}/.. > utest.report @echo done. [See utest.report] @echo -n Testing that all drivers compile... @env CC="${CC}" CFLAGS="${CFLAGS}" ./driver_report.pl > driver.report @echo done. [See driver.report] @echo -n Measuring test code coverage... @env CC="${CC}" CFLAGS="${CFLAGS}" ./coverage_report.pl > coverage.report @echo done. [See coverage.report] @echo -n Looking for memory leaks... @env CC="${CC}" CFLAGS="${CFLAGS}" ./valgrind_report.pl > valgrind.report @echo done. [See valgrind.report] @cat driver.report coverage.report valgrind.report utest.report > dcheck.report @echo @echo Finished developer testsuite. @echo For a complete report, see dcheck.report. clean: -rm -f *.gcno *.gcda *.gcov -rm -f esltmp?????? -rm -f *.o *~ -rm -f driver.report coverage.report valgrind.report utest.report -rm -f ${PROGS} distclean: clean rm Makefile ################################################################ # Easel - a library of C functions for biological sequence analysis # Version h3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # Easel is distributed under the Janelia Farm Software License, a BSD # license. See the LICENSE file for more details. ################################################################hmmer-3.1b2/easel/testsuite/i1-degen-residues.pl0000775361611702660230000001275612473612611021175 0ustar wheelerteddy#! /usr/bin/perl # Integration tests of reading all valid protein sequence residue characters. # # Usage: ./i1-degen-residues.pl # Example: ./i1-degen-residues.pl .. .. foo # # SRE, Tue Feb 2 13:09:58 2010 [Janelia] # SVN $Id: i1-degen-residues.pl 715 2011-08-03 21:04:24Z eddys $ $top_builddir = shift; $top_srcdir = shift; $tmppfx = shift; # Make sure that any files/executables we need to access are present. if (! -x "$top_builddir/miniapps/esl-reformat") { die "FAIL: esl-reformat not found in $top_builddir/miniapps\n"; } if (! -x "$top_builddir/miniapps/esl-shuffle") { die "FAIL: esl-shuffle not found in $top_builddir/miniapps\n"; } if (! -x "$top_builddir/miniapps/esl-sfetch") { die "FAIL: esl-sfetch not found in $top_builddir/miniapps\n"; } if (! -x "$top_builddir/miniapps/esl-seqstat") { die "FAIL: esl-seqstat not found in $top_builddir/miniapps\n"; } $reformat = "$top_builddir/miniapps/esl-reformat"; $shuffle = "$top_builddir/miniapps/esl-shuffle"; $sfetch = "$top_builddir/miniapps/esl-sfetch"; $seqstat = "$top_builddir/miniapps/esl-seqstat"; # Create test amino acid and sequence files. if (! open(DNAFP, ">$tmppfx.dna")) { print "FAIL: couldn't open $tmppfx.dna for writing"; exit 1; } if (! open(AAFP, ">$tmppfx.aa")) { print "FAIL: couldn't open $tmppfx.aa for writing"; exit 1; } if (! open(BADFP, ">$tmppfx.bad")) { print "FAIL: couldn't open $tmppfx.bad for writing"; exit 1; } print AAFP <<"EOF"; >test ACDEFGHIKLMNPQRSTVWYBJZOUX*acdefghiklmnpqrstvwybjzoux EOF print DNAFP <<"EOF"; >test ACGTRYMKSWHBVDN*acgtrymkswhbvdn* EOF print BADFP <<"EOF"; >test ACGTRYMKSWHBVDN%acgtrymkswhbvdn% EOF # esl-reformat tests system("$reformat fasta $tmppfx.dna > $tmppfx.out 2>&1"); if ($? != 0) { print "FAIL: reformat failed on .dna test\n"; exit 1; } system("diff $tmppfx.dna $tmppfx.out > /dev/null 2>&1"); if ($? != 0) { print "FAIL: reformat changed .dna test\n"; exit 1; } system("$reformat fasta $tmppfx.aa > $tmppfx.out 2>&1"); if ($? != 0) { print "FAIL: reformat failed on .aa test\n"; exit 1; } system("diff $tmppfx.aa $tmppfx.out > /dev/null 2>&1"); if ($? != 0) { print "FAIL: reformat changed .aa test\n"; exit 1; } $output = `$reformat fasta $tmppfx.bad 2>&1`; if ($? == 0) { print "FAIL: reformat should have failed on .bad test\n"; exit 1; } if (! $output =~ /Illegal character %/) { print "FAIL: reformat should have found illegal % in .bad test\n"; exit 1; } # esl-seqstat tests $output = `$seqstat --dna $tmppfx.dna 2>&1`; if ($? != 0) { print "FAIL: seqstat failed on .dna test\n"; exit 1; } ($n) = $output =~ /Total # residues:\s+(\d+)/; if ($n != 32) { print "FAIL: seqstat sees wrong residue count ($n) in .dna test\n"; exit 1; } $output = `$seqstat $tmppfx.aa 2>&1`; if ($? != 0) { print "FAIL: seqstat failed on .aa test\n"; exit 1; } ($n) = $output =~ /Total # residues:\s+(\d+)/; if ($n != 53) { print "FAIL: seqstat sees wrong residue count ($n) in .aa test\n"; exit 1; } $output = `$seqstat $tmppfx.bad 2>&1`; if ($? == 0) { print "FAIL: seqstat should have failed on .bad test\n"; exit 1; } # esl-shuffle tests system("$shuffle $tmppfx.dna > $tmppfx.out 2>&1"); if ($? != 0) { print "FAIL: shuffle failed on .dna test\n"; exit 1; } system("$seqstat --dna -c $tmppfx.out > $tmppfx.out2 2>&1"); if ($? != 0) { print "FAIL: seqstat -c failed on shuffled .dna\n"; exit 1; } system("$seqstat --dna -c $tmppfx.dna > $tmppfx.out3 2>&1"); if ($? != 0) { print "FAIL: seqstat -c failed on .dna test\n"; exit 1; } system("diff $tmppfx.out2 $tmppfx.out3 > /dev/null 2>&1"); if ($? != 0) { print "FAIL: shuffle changed .dna composition\n"; exit 1; } system("$shuffle $tmppfx.aa > $tmppfx.out 2>&1"); if ($? != 0) { print "FAIL: shuffle failed on .aa test\n"; exit 1; } system("$seqstat -c $tmppfx.out > $tmppfx.out2 2>&1"); if ($? != 0) { print "FAIL: seqstat -c failed on shuffled .aa\n"; exit 1; } system("$seqstat -c $tmppfx.aa > $tmppfx.out3 2>&1"); if ($? != 0) { print "FAIL: seqstat -c failed on .aa test\n"; exit 1; } system("diff $tmppfx.out2 $tmppfx.out3 > /dev/null 2>&1"); if ($? != 0) { print "FAIL: shuffle changed .aa composition\n"; exit 1; } $output = `$shuffle $tmppfx.bad 2>&1`; if ($? == 0) { print "FAIL: shuffle should have failed on .bad test\n"; exit 1; } # esl-sfetch tests system("$sfetch --index $tmppfx.aa >/dev/null 2>&1"); if ($? != 0) { print "FAIL: sfetch --index failed on .aa test\n"; exit 1; } $output = `$sfetch -c 27..27 $tmppfx.aa test 2>&1 | grep -v "^>"`; if ($? != 0) { print "FAIL: sfetch failed on .aa test\n"; exit 1; } if (! $output =~ /^\*/) { print "FAIL: sfetch didn't retrieve * on .aa test ($output)\n"; exit 1; } system("$sfetch --index $tmppfx.dna >/dev/null 2>&1"); if ($? != 0) { print "FAIL: sfetch --index failed on .dna test\n"; exit 1; } $output = `$sfetch -c 16..16 $tmppfx.aa test 2>&1 | grep -v "^>"`; if ($? != 0) { print "FAIL: sfetch failed on .dna test\n"; exit 1; } if (! $output =~ /^\*/) { print "FAIL: sfetch didn't retrieve * on .dna test ($output)\n"; exit 1; } $output = `$sfetch --index $tmppfx.bad 2>&1`; if ($? == 0) { print "FAIL: sfetch --index should have failed on .bad test\n"; exit 1; } print "ok\n"; unlink "$tmppfx.dna"; unlink "$tmppfx.dna.ssi"; unlink "$tmppfx.aa"; unlink "$tmppfx.aa.ssi"; unlink "$tmppfx.bad"; unlink "$tmppfx.bad.ssi"; unlink "$tmppfx.out"; exit 0; hmmer-3.1b2/easel/testsuite/testsuite.sqc0000664361611702660230000001606312473612611020157 0ustar wheelerteddy# Easel's test suite, in sqc command format ################################################################# # Test drivers for each module. ################################################################ 1 exercise alphabet-utest @esl_alphabet_utest@ 1 exercise buffer-utest @esl_buffer_utest@ 1 exercise cluster-utest @esl_cluster_utest@ 1 exercise dirichlet-utest @esl_dirichlet_utest@ 1 exercise distance-utest @esl_distance_utest@ 1 exercise dmatrix-utest @esl_dmatrix_utest@ 1 exercise easel-utest @easel_utest@ 1 exercise exponential-utest @esl_exponential_utest@ 1 exercise fileparser-utest @esl_fileparser_utest@ 1 exercise gamma-utest @esl_gamma_utest@ 1 exercise getopts-utest @esl_getopts_utest@ 1 exercise gumbel-utest @esl_gumbel_utest@ 1 exercise histogram-utest @esl_histogram_utest@ 1 exercise hyperexp-utest @esl_hyperexp_utest@ 1 exercise keyhash-utest @esl_keyhash_utest@ 1 exercise mem-utest @esl_mem_utest@ 1 exercise msa-utest @esl_msa_utest@ 1 exercise msafile @esl_msafile_utest@ 1 exercise msafile2 @esl_msafile2_utest@ 1 exercise msafile-a2m @esl_msafile_a2m_utest@ 1 exercise msafile-afa @esl_msafile_afa_utest@ 1 exercise msafile-clustal @esl_msafile_clustal_utest@ 1 exercise msafile-phylip @esl_msafile_phylip_utest@ 1 exercise msafile-psiblast @esl_msafile_psiblast_utest@ 1 exercise msafile-selex @esl_msafile_selex_utest@ 1 exercise msafile-stockholm @esl_msafile_stockholm_utest@ 1 exercise msacluster-utest @esl_msacluster_utest@ 1 exercise msaweight-utest @esl_msaweight_utest@ 1 exercise random-utest @esl_random_utest@ 1 exercise randomseq-utest @esl_randomseq_utest@ 1 exercise ratematrix-utest @esl_ratematrix_utest@ 1 exercise recorder-utest @esl_recorder_utest@ 1 exercise regexp-utest @esl_regexp_utest@ 1 exercise rootfinder-utest @esl_rootfinder_utest@ 1 exercise scorematrix-utest @esl_scorematrix_utest@ 1 exercise sq-utest @esl_sq_utest@ 1 exercise sqio-utest @esl_sqio_utest@ 1 exercise sse-utest @esl_sse_utest@ 1 exercise ssi-utest @esl_ssi_utest@ 1 exercise stack-utest @esl_stack_utest@ 1 exercise stats-utest @esl_stats_utest@ 1 exercise stretchexp-utest @esl_stretchexp_utest@ 1 exercise tree-utest @esl_tree_utest@ 1 exercise vectorops-utest @esl_vectorops_utest@ 1 exercise weibull-utest @esl_weibull_utest@ 1 exercise wuss-utest @esl_wuss_utest@ 1 exercise e2 !testsuite/e2.sh! @miniapps/esl-seqstat@ !formats/stockholm.1! 1 exercise degen-residues !testsuite/i1-degen-residues.pl! @@ !! %TESTPFX% 1 exercise ncbi-indices !testsuite/i2-ncbi-indices.pl! @@ !! %TESTPFX% 1 exercise blank-gf !testsuite/i3-blank-gf.pl! @@ !! %TESTPFX% 1 exercise esl-afetch !miniapps/esl-afetch.itest.pl! @miniapps/esl-afetch@ %TESTPFX% 1 exercise esl-alimanip !miniapps/esl-alimanip.itest.pl! @miniapps/esl-alimanip@ %TESTPFX% 1 exercise esl-alimap !miniapps/esl-alimap.itest.pl! @miniapps/esl-alimap@ %TESTPFX% 1 exercise esl-alimask !miniapps/esl-alimask.itest.pl! @miniapps/esl-alimask@ %TESTPFX% 1 exercise esl-alimerge !miniapps/esl-alimerge.itest.pl! @miniapps/esl-alimerge@ %TESTPFX% 1 exercise esl-alistat !miniapps/esl-alistat.itest.pl! @miniapps/esl-alistat@ %TESTPFX% 1 exercise esl-compalign !miniapps/esl-compalign.itest.pl! @miniapps/esl-compalign@ %TESTPFX% 1 exercise esl-construct !miniapps/esl-construct.itest.pl! @miniapps/esl-construct@ %TESTPFX% 1 exercise esl-mask !miniapps/esl-mask.itest.pl! @miniapps/esl-mask@ %TESTPFX% 1 exercise esl-seqrange !miniapps/esl-seqrange.itest.pl! @miniapps/esl-seqrange@ @miniapps/esl-sfetch@ %TESTPFX% 1 exercise esl-shuffle !miniapps/esl-shuffle.itest.pl! @miniapps/esl-shuffle@ %TESTPFX% 1 exercise esl-ssdraw !miniapps/esl-ssdraw.itest.pl! @miniapps/esl-ssdraw@ !testsuite/trna-ssdraw.ps! !testsuite/trna-5.stk! %TESTPFX% # Still to do: # gev # minimizer # mixgev # mpi # normal # paml # swat # interface_gsl # interface_lapack ################################################################ # valgrind tests (optional. 'make SQCLEVEL=3 check' ################################################################ 3 valgrind alphabet-utest @esl_alphabet_utest@ 3 valgrind cluster-utest @esl_cluster_utest@ 3 valgrind dirichlet-utest @esl_dirichlet_utest@ 3 valgrind distance-utest @esl_distance_utest@ 3 valgrind dmatrix-utest @esl_dmatrix_utest@ 3 valgrind easel-utest @easel_utest@ 3 valgrind exponential-utest @esl_exponential_utest@ 3 valgrind fileparser-utest @esl_fileparser_utest@ 3 valgrind gamma-utest @esl_gamma_utest@ 3 valgrind getopts-utest @esl_getopts_utest@ 3 valgrind gumbel-utest @esl_gumbel_utest@ 3 valgrind histogram-utest @esl_histogram_utest@ 3 valgrind hyperexp-utest @esl_hyperexp_utest@ 3 valgrind keyhash-utest @esl_keyhash_utest@ 3 valgrind mem-utest @esl_mem_utest@ 3 valgrind msa-utest @esl_msa_utest@ 3 valgrind msafile @esl_msafile_utest@ 3 valgrind msafile2 @esl_msafile2_utest@ 3 valgrind msafile-a2m @esl_msafile_a2m_utest@ 3 valgrind msafile-afa @esl_msafile_afa_utest@ 3 valgrind msafile-clustal @esl_msafile_clustal_utest@ 3 valgrind msafile-phylip @esl_msafile_phylip_utest@ 3 valgrind msafile-psiblast @esl_msafile_psiblast_utest@ 3 valgrind msafile-selex @esl_msafile_selex_utest@ 3 valgrind msafile-stockholm @esl_msafile_stockholm_utest@ 3 valgrind msacluster-utest @esl_msacluster_utest@ 3 valgrind msaweight-utest @esl_msaweight_utest@ 3 valgrind random-utest @esl_random_utest@ 3 valgrind randomseq-utest @esl_randomseq_utest@ 3 valgrind ratematrix-utest @esl_ratematrix_utest@ 3 valgrind recorder-utest @esl_recorder_utest@ 3 valgrind regexp-utest @esl_regexp_utest@ 3 valgrind rootfinder-utest @esl_rootfinder_utest@ 3 valgrind scorematrix-utest @esl_scorematrix_utest@ 3 valgrind sq-utest @esl_sq_utest@ 3 valgrind sqio-utest @esl_sqio_utest@ 3 valgrind sse-utest @esl_sse_utest@ 3 valgrind ssi-utest @esl_ssi_utest@ 3 valgrind stack-utest @esl_stack_utest@ 3 valgrind stats-utest @esl_stats_utest@ 3 valgrind stretchexp-utest @esl_stretchexp_utest@ 3 valgrind tree-utest @esl_tree_utest@ 3 valgrind vectorops-utest @esl_vectorops_utest@ 3 valgrind weibull-utest @esl_weibull_utest@ 3 valgrind wuss-utest @esl_wuss_utest@ ### esl_buffer_utest exercises valgrind bug #258294 on OSX ### still open in valgrind 3.6.1 (Feb 2011) ### reinstate the test when valgrind updates # 3 valgrind buffer-utest @esl_buffer_utest@ ################################################################ # SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/testsuite/testsuite.sqc $ # SVN $Id: testsuite.sqc 714 2011-07-29 21:26:26Z eddys $ ################################################################ hmmer-3.1b2/easel/testsuite/i2-ncbi-indices.pl0000775361611702660230000001234712473612611020616 0ustar wheelerteddy#! /usr/bin/perl # Testing that we can read FASTA files, even if they have NCBI # formatted BLAST databases in the same directory. # # (This failed in Jan 2010 because the embryonic NCBI db parser # automatically opened the NCBI files instead of the FASTA file, # but did not have an implementation of esl_sqio_ReadWindow().) # # Usage: ./i2-ncbi-indices # Example: ./i2-ncbi-indices . . tmp # # SRE, Tue Feb 2 12:43:04 2010 [Janelia] # SVN $Id: i2-ncbi-indices.pl 715 2011-08-03 21:04:24Z eddys $ # # This idiom (as opposed to just "use foo;") allows you to gracefully # catch the case of a missing Perl module: eval "use MIME::Base64 ()"; $have_base64 = 1 unless $@; if (! $have_base64) { die "FAIL: MIME:Base64 perl module required for this test\n"; } $top_builddir = shift; $top_srcdir = shift; $tmppfx = shift; # Make sure that any files/executables we need to access are present. if (! -x "$top_builddir/miniapps/esl-seqstat") { die "FAIL: esl-seqstat not found in $top_builddir/miniapps\n"; } # Generate the test files. See notes below, at the function. &write_testfiles($tmppfx); # The bug we're catching is that esl-seqstat would fail because # esl_sqio_ReadWindow() returned eslEUNIMPLEMENTED. # $output = `$top_builddir/miniapps/esl-seqstat -a $tmppfx.fa 2>&1`; if ($? != 0) { die "FAIL: esl-seqstat fails to read BLAST-formatted FASTA file\n"; } # We could check more (like whether the output was what we expected) # but that's all we need for the bug in question. print "ok\n"; unlink "$tmppfx.fa"; unlink "$tmppfx.fa.phr"; unlink "$tmppfx.fa.pin"; unlink "$tmppfx.fa.psq"; exit 0; # We want to test NCBI BLAST data formats, without requiring that the # user has "formatdb" installed. # # So we want to carry a payload of premade files; but the files are # binary. # # So we carry them base64-encoded, and decode them into tmp files. # # The test files were created by # % esl-shuffle -G --amino -L 60 -N 10 > test.fa # % formatdb -i test.fa # % base64 test.fa.phr # % base64 test.fa.pin # % base64 test.fa.psq # sub write_testfiles { local($pfx) = @_; $fafile = ">random0\ LFGSQIVARDDPSSVLRDIGGSVRPRNEICKIKQKEGQNGLNHDPVKNTWEDESKKQAFA\ >random1\ EIARLAAQLRETPAEKAIADIYLEDCLDFIAVTSFTATSDPLEGAGGWEKVNREAPFESA\ >random2\ IVLNNSVDYYIPSIHTAFNGLVLPGSKVPVSFFQQPGSLLTNATILGFDLLDLAVAEGLL\ >random3\ LSMKVPRFGKNKREDNLQLRLGPPKYPSWNAMVRAHASKFYAVNRGVFIGSLPIQFVEKR\ >random4\ VKLTTGAKVLDLTFYHYCEAAISDQMLQATLNQAIGHNARETILTSAQQLDPAYRSDQVW\ >random5\ LLFEQVLSFDHGEYRAHGLQRTLRQVLILIAALMVLPEQTKTGDLSPACKLANATVSGKL\ >random6\ LERDNAAGMIALASNSEFNIEGCQKYGSKGGLESQGKMKITNQYTSEIDVYERPENVLGF\ >random7\ MEAPAWDTPGLGASFQASDEAPPELSLTLHNNPQVAMRKKVVRVSALTLTRPRHLLIMFA\ >random8\ SSLNCLQMGLPRRLQWADDPDSDNTAPNAPLVSFKNVHMVLAEEFEGYRIAIVVSYPFDR\ >random9\ KKQVADVLELVIEGENQRSMVVLPTGKRFEIESAWGVGRPFPSTQGLIMNLYMAKDRAAT\ "; $phr_encoded = "\ MIAwgKCAGgdyYW5kb20wAAChgDCAqoAwgKCAGglCTF9PUkRfSUQAAKGAoIACAQAAAAAAAAAAAAAA\ AACigAIBAAAAAAAAADCAMICggBoHcmFuZG9tMQAAoYAwgKqAMICggBoJQkxfT1JEX0lEAAChgKCA\ AgEBAAAAAAAAAAAAAAAAooACAQAAAAAAAAAwgDCAoIAaB3JhbmRvbTIAAKGAMICqgDCAoIAaCUJM\ X09SRF9JRAAAoYCggAIBAgAAAAAAAAAAAAAAAKKAAgEAAAAAAAAAMIAwgKCAGgdyYW5kb20zAACh\ gDCAqoAwgKCAGglCTF9PUkRfSUQAAKGAoIACAQMAAAAAAAAAAAAAAACigAIBAAAAAAAAADCAMICg\ gBoHcmFuZG9tNAAAoYAwgKqAMICggBoJQkxfT1JEX0lEAAChgKCAAgEEAAAAAAAAAAAAAAAAooAC\ AQAAAAAAAAAwgDCAoIAaB3JhbmRvbTUAAKGAMICqgDCAoIAaCUJMX09SRF9JRAAAoYCggAIBBQAA\ AAAAAAAAAAAAAKKAAgEAAAAAAAAAMIAwgKCAGgdyYW5kb202AAChgDCAqoAwgKCAGglCTF9PUkRf\ SUQAAKGAoIACAQYAAAAAAAAAAAAAAACigAIBAAAAAAAAADCAMICggBoHcmFuZG9tNwAAoYAwgKqA\ MICggBoJQkxfT1JEX0lEAAChgKCAAgEHAAAAAAAAAAAAAAAAooACAQAAAAAAAAAwgDCAoIAaB3Jh\ bmRvbTgAAKGAMICqgDCAoIAaCUJMX09SRF9JRAAAoYCggAIBCAAAAAAAAAAAAAAAAKKAAgEAAAAA\ AAAAMIAwgKCAGgdyYW5kb205AAChgDCAqoAwgKCAGglCTF9PUkRfSUQAAKGAoIACAQkAAAAAAAAA\ AAAAAACigAIBAAAAAAAAAA=="; $pin_encoded = "\ AAAABAAAAAEAAAAHdGVzdC5mYQAAABlGZWIgMiwgMjAxMCAxMToxMyBBTQAAAAAAAAAAClgCAAAA\ AAAAAAAAPAAAAAAAAABGAAAAjAAAANIAAAEYAAABXgAAAaQAAAHqAAACMAAAAnYAAAK8AAAAAQAA\ AD4AAAB7AAAAuAAAAPUAAAEyAAABbwAAAawAAAHpAAACJgAAAmM="; $psq_encoded = "\ AAsGBxEPCRMBEAQEDhEREwsQBAkHBxETEA4QDQUJAwoJCg8KBQcPDQcLDQgEDhMKDRIUBQQFEQoK\ DwEGAQAFCQEQCwEBDwsQBRIOAQUKAQkBBAkWCwUEAwsEBgkBExIRBhIBEhEEDgsFBwEHBxQFChMN\ EAUBDgYFEQEACRMLDQ0REwQWFgkOEQkIEgEGDQcLEwsOBxEKEw4TEQYGDw8OBxELCxINARIJCwcG\ BAsLBAsBEwEFBwsLAAsRDAoTDhAGBwoNChAFBA0LDwsQCwcODgoWDhEUDQEMExABCAERCgYWARMN\ EAcTBgkHEQsOCQ8GEwUKEAATCgsSEgcBChMLBAsSBhYIFgMFAQEJEQQPDAsPARILDQ8BCQcIDQEQ\ BRIJCxIRAQ8PCwQOARYQEQQPExQACwsGBQ8TCxEGBAgHBRYQAQgHCw8QEgsQDxMLCQsJAQELDBML\ DgUPEgoSBwQLEQ4BAwoLAQ0BEhMRBwoLAAsFEAQNAQEHDAkBCwERDREFBg0JBQcDDwoWBxEKBwcL\ BREPBwoMCgkSDQ8WEhEFCQQTFgUQDgUNEwsHBgAMBQEOARQEEg4HCwcBEQYPAREEBQEODgULEQsS\ CwgNDQ4PEwEMEAoKExMQExEBCxILEhAOEAgLCwkMBgEAERELDQMLDwwHCw4QEAsPFAEEBA4EEQQN\ EgEODQEOCxMRBgoNEwgMEwsBBQUGBQcWEAkBCRMTERYOBgQQAAoKDxMBBBMLBQsTCQUHBQ0PEBEM\ ExMLDhIHChAGBQkFEQEUBxMHEA4GDhESDwcLCQwNCxYMAQoEEAEBEgA="; open(FAFILE, ">$pfx.fa") || die; print FAFILE $fafile; close (FAFILE); open(PHRFILE, ">$pfx.fa.phr"); print PHRFILE MIME::Base64::decode_base64($phr_encoded); close PHRFILE; open(PINFILE, ">$pfx.fa.pin"); print PINFILE MIME::Base64::decode_base64($pin_encoded); close PINFILE; open(PSQFILE, ">$pfx.fa.psq"); print PSQFILE MIME::Base64::decode_base64($psq_encoded); close PSQFILE; } hmmer-3.1b2/easel/testsuite/trna-ssdraw.ps0000664361611702660230000001302712473612611020224 0ustar wheelerteddy% begin ignore % % trna-ssdraw.ps: % An esl-ssdraw postscript template file for drawing % tRNA secondary structure diagrams. The input alignment % must be of consensus length (nongap RF length) of 71. % This corresponds to the Rfam 9.1 RF00005 tRNA model % (http://rfam.sanger.ac.uk/). That is, this template % file can be used with alignments generated by Infernal's % 'cmalign' program using the Rfam 9.1 tRNA CM. % % setup defaults /Helvetica findfont 8.00 scalefont setfont 0.00 0.00 0.00 1.00 setcmykcolor 1.00 setlinewidth % end ignore % begin modelname % tRNA % end modelname % begin legend % 34 -80. -30. 10 0. % end legend % begin scale 1.7 1.7 scale % end scale % begin regurgitate /Helvetica findfont 6.00 scalefont setfont 0.00 0.00 0.00 1.00 setcmykcolor (5') 164.00 400.00 moveto show (3') 192.00 408.00 moveto show 1.00 setlinewidth 0.00 0.00 0.00 1.00 setcmykcolor 165.50 238.00 188.50 238.00 newpath moveto lineto stroke 166.00 244.00 166.00 238.00 newpath moveto lineto stroke 188.00 244.00 188.00 238.00 newpath moveto lineto stroke (anticodon) 164.25 230.00 moveto show % end regurgitate % begin ignore % reset 8.0 fontsize /Helvetica findfont 8.00 scalefont setfont % end ignore % begin text positiontext (20) 124.00 297.00 moveto show (40) 194.50 287.00 moveto show (60) 211.00 354.00 moveto show % end text positiontext % begin lines positionticks 151.82 331.76 148.86 338.65 newpath moveto lineto stroke 122.05 310.19 124.69 303.17 newpath moveto lineto stroke 168.09 273.73 160.81 275.55 newpath moveto lineto stroke 186.00 289.00 193.50 289.00 newpath moveto lineto stroke 215.00 326.00 215.00 318.50 newpath moveto lineto stroke 215.00 344.00 215.00 351.50 newpath moveto lineto stroke 185.91 394.27 193.19 392.45 newpath moveto lineto stroke % end lines positionticks % begin ignore % set color to grey for bpconnect lines 0.00 0.00 0.00 0.50 setcmykcolor % end ignore % begin lines bpconnects 179.00 394.00 175.00 394.00 newpath moveto lineto stroke 179.00 386.00 175.00 386.00 newpath moveto lineto stroke 179.00 378.00 175.00 378.00 newpath moveto lineto stroke 179.00 370.00 175.00 370.00 newpath moveto lineto stroke 179.00 362.00 175.00 362.00 newpath moveto lineto stroke 179.00 354.00 175.00 354.00 newpath moveto lineto stroke 179.00 346.00 175.00 346.00 newpath moveto lineto stroke 153.00 321.00 153.00 325.00 newpath moveto lineto stroke 145.00 321.00 145.00 325.00 newpath moveto lineto stroke 137.00 321.00 137.00 325.00 newpath moveto lineto stroke 129.00 321.00 129.00 325.00 newpath moveto lineto stroke 179.00 304.00 175.00 304.00 newpath moveto lineto stroke 179.00 296.00 175.00 296.00 newpath moveto lineto stroke 179.00 288.00 175.00 288.00 newpath moveto lineto stroke 179.00 280.00 175.00 280.00 newpath moveto lineto stroke 179.00 272.00 175.00 272.00 newpath moveto lineto stroke 191.00 337.00 191.00 333.00 newpath moveto lineto stroke 199.00 337.00 199.00 333.00 newpath moveto lineto stroke 207.00 337.00 207.00 333.00 newpath moveto lineto stroke 215.00 337.00 215.00 333.00 newpath moveto lineto stroke 223.00 337.00 223.00 333.00 newpath moveto lineto stroke % end lines bpconnects % begin ignore % reset color to black 0.00 0.00 0.00 1.00 setcmykcolor % end ignore % begin text nucleotides (G) 168.00 392.00 moveto show (C) 168.00 384.00 moveto show (G) 168.00 376.00 moveto show (G) 168.00 368.00 moveto show (A) 168.00 360.00 moveto show (U) 168.00 352.00 moveto show (U) 168.00 344.00 moveto show (U) 162.00 338.00 moveto show (A) 156.00 332.00 moveto show % nucleotide 10 on next line (G) 150.00 326.00 moveto show (C) 142.00 326.00 moveto show (U) 134.00 326.00 moveto show (C) 126.00 326.00 moveto show (A) 118.00 330.00 moveto show (G) 110.00 332.00 moveto show (U) 102.00 328.00 moveto show (U) 99.00 320.00 moveto show (G) 102.00 312.00 moveto show (G) 110.00 308.00 moveto show % nucleotide 20 on next line (A) 118.00 310.00 moveto show (G) 126.00 314.00 moveto show (A) 134.00 314.00 moveto show (G) 142.00 314.00 moveto show (C) 150.00 314.00 moveto show (G) 159.00 308.00 moveto show (C) 168.00 302.00 moveto show (C) 168.00 294.00 moveto show (A) 168.00 286.00 moveto show (G) 168.00 278.00 moveto show % nucleotide 30 on next line (A) 168.00 270.00 moveto show (C) 164.00 262.00 moveto show (U) 162.00 254.00 moveto show (G) 166.00 246.00 moveto show (A) 174.00 243.00 moveto show (A) 182.00 246.00 moveto show (G) 186.00 254.00 moveto show (A) 184.00 262.00 moveto show (U) 180.00 270.00 moveto show (C) 180.00 278.00 moveto show % nucleotide 40 on next line (U) 180.00 286.00 moveto show (G) 180.00 294.00 moveto show (G) 180.00 302.00 moveto show (A) 188.00 306.00 moveto show (G) 196.00 306.00 moveto show (U) 200.00 314.00 moveto show (U) 192.00 318.00 moveto show (C) 188.00 326.00 moveto show (U) 196.00 326.00 moveto show (G) 204.00 326.00 moveto show % nucleotide 50 on next line (U) 212.00 326.00 moveto show (G) 220.00 326.00 moveto show (U) 228.00 322.00 moveto show (U) 236.00 320.00 moveto show (C) 244.00 324.00 moveto show (G) 247.00 332.00 moveto show (A) 244.00 340.00 moveto show (U) 236.00 344.00 moveto show (C) 228.00 342.00 moveto show (C) 220.00 338.00 moveto show % nucleotide 60 on next line (A) 212.00 338.00 moveto show (C) 204.00 338.00 moveto show (A) 196.00 338.00 moveto show (G) 188.00 338.00 moveto show (A) 180.00 344.00 moveto show (A) 180.00 352.00 moveto show (U) 180.00 360.00 moveto show (U) 180.00 368.00 moveto show (C) 180.00 376.00 moveto show (G) 180.00 384.00 moveto show % nucleotide 70 on next line (C) 180.00 392.00 moveto show (A) 184.00 400.00 moveto show % end text nucleotides % begin ignore showpage % end ignore hmmer-3.1b2/easel/esl_ssi.tex0000664361611702660230000005305012473612607015552 0ustar wheelerteddyThe \eslmod{ssi} module is for creating and using ``SSI'' (sequence/subsequence index) files. SSI indexes flatfile databases by names and/or accessions, enabling fast sequence record retrieval. An SSI index is a binary file that stores sequence names or accessions as \emph{keys}, associating them with information about the sequence record, including its location (file name and disk offset), so that it can be looked up rapidly. It differentiates between \emph{primary keys} and \emph{secondary keys} (aliases). There is one and only one primary key per record. There can be more than one secondary key (alias) per sequence. Both primary and secondary keys must be unique identifiers (no two records have the same key). For example, a program for sequence retrieval might create an SSI index with accessions as primary keys and names as secondary keys (or the other way around). Records can also be retrieved by number from the list of primary keys. This may be useful for distributed data-parallel applications, which can use SSI to rapidly position individual processes at different record ranges in a flatfile database. A single SSI file can index a sequence database that consists of more than one individual sequence file. For example, the GenBank database is distributed as a large number of flatfiles; one SSI file can index them all. When records are consistently formatted, SSI indices can allow a specific subsequence in a sequence record to be identified rapidly. This is useful when the sequence records are very large, such as whole assembled genomes or chromosomes. Although SSI indices are designed with sequence databases in mind, SSI can also be used to index records in other types of flatfile databases. For example, HMMER uses SSI to index HMM databases, and the \eslmod{msa} module can use SSI to index Stockholm format multiple alignment databases like Pfam and Rfam. SSI can handle large amounts of data. It is capable of indexing tens of thousands of files and hundreds of trillions of sequence records. The lengths of primary keys, secondary keys, or filenames are effectively unlimited, and individual sequence records may be many trillions of residues long, orders of magnitude larger than the largest complete chromosomes. SSI indexing is effectively limited only by the size of the SSI index file itself (up to 8 exabytes, on 64-bit filesystems). Binary SSI indices are portable between different machines.\footnote{The sole exception is that SSI indices built for 64-bit filesystems might not be readable on a fully 32-bit filesystem.} Table~\ref{tbl:ssi_api} lists the functions in the \eslmod{ssi} API. A \eslmod{ESL\_SSI} object is used for reading an index, and a \eslmod{ESL\_NEWSSI} object is used for creating one. There is also a set of functions for portable binary file i/o. % Table generated by autodoc -t esl_ssi.c (so don't edit here, edit esl_ssi.c:) \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \apisubhead{Using (reading) an SSI index.}\\ \hyperlink{func:esl_ssi_Open()}{\ccode{esl\_ssi\_Open()}} & Open an SSI index as an \ccode{ESL\_SSI}.\\ \hyperlink{func:esl_ssi_FindName()}{\ccode{esl\_ssi\_FindName()}} & Look up a primary or secondary key.\\ \hyperlink{func:esl_ssi_FindNumber()}{\ccode{esl\_ssi\_FindNumber()}} & Look up the n'th primary key.\\ \hyperlink{func:esl_ssi_FindSubseq()}{\ccode{esl\_ssi\_FindSubseq()}} & Look up a specific subsequence's start.\\ \hyperlink{func:esl_ssi_FileInfo()}{\ccode{esl\_ssi\_FileInfo()}} & Retrieve a file name and format code.\\ \hyperlink{func:esl_ssi_Close()}{\ccode{esl\_ssi\_Close()}} & Close an SSI index.\\ \apisubhead{Creating (writing) new SSI files.}\\ \hyperlink{func:esl_newssi_Open()}{\ccode{esl\_newssi\_Open()}} & Open a new \ccode{ESL\_NEWSSI}.\\ \hyperlink{func:esl_newssi_AddFile()}{\ccode{esl\_newssi\_AddFile()}} & Add a filename to a growing index.\\ \hyperlink{func:esl_newssi_SetSubseq()}{\ccode{esl\_newssi\_SetSubseq()}} & Declare that file is suitable for fast subseq lookup.\\ \hyperlink{func:esl_newssi_AddKey()}{\ccode{esl\_newssi\_AddKey()}} & Add a primary key to a growing index.\\ \hyperlink{func:esl_newssi_AddAlias()}{\ccode{esl\_newssi\_AddAlias()}} & Add a secondary key (alias) to a growing index.\\ \hyperlink{func:esl_newssi_Write()}{\ccode{esl\_newssi\_Write()}} & Save a new index to an SSI file.\\ \hyperlink{func:esl_newssi_Close()}{\ccode{esl\_newssi\_Destroy()}} & Close an \ccode{ESL\_NEWSSI}.\\ \apisubhead{Portable binary i/o}\\ \hyperlink{func:esl_byteswap()}{\ccode{esl\_byteswap()}} & Description.\\ \hyperlink{func:esl_ntoh16()}{\ccode{esl\_ntoh16()}} & Description.\\ \hyperlink{func:esl_hton16()}{\ccode{esl\_hton16()}} & Description.\\ %\hyperlink{func:esl_fread_i16()}{\ccode{esl\_fread\_i16()}} & Description.\\ %\hyperlink{func:esl_fwrite_i16()}{\ccode{esl\_fwrite\_i16()}} & Description.\\ \ccode{esl\_fread\_i16()} & Description.\\ \ccode{esl\_fwrite\_i16()} & Description.\\ \hyperlink{func:esl_fread_offset()}{\ccode{esl\_fread\_offset()}} & Description.\\ \hyperlink{func:esl_fwrite_offset()}{\ccode{esl\_fwrite\_offset()}} & Description.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{ssi} API.} \label{tbl:ssi_api} \end{table} \subsection{Example: creating an SSI index} Figure~\ref{fig:ssi_example} shows a program that creates an SSI index for a FASTA sequence file, in which sequence records start with a line like: \begin{cchunk} >SEQ_NAME Rest of the line is a free-text description. \end{cchunk} \begin{figure} \input{cexcerpts/ssi_example} \caption{An example of indexing the sequence records in a FASTA file.} \label{fig:ssi_example} \end{figure} \begin{itemize} \item A new index is created (\ccode{esl\_newssi\_Open()}). You can name an SSI index anything you want, but for an index of a single file, \Easel\ generally defaults to assuming an \ccode{.ssi} suffix is appended to the filename. That's what the example does here. \item Each file to be indexed is added to the index by a call to \ccode{esl\_newssi\_AddFile()}. This returns a \emph{file handle} (\ccode{fh}) that you will need when you add primary keys. In this example, there is only one file and only one file handle. \item You need to determine the disk offset at the exact beginning of each sequence record. You retrieve your current position in the file using an \ccode{ftello()} call. \item You add each primary key to the index with a \ccode{esl\_newssi\_AddKey()} call. You provide the handle of the file that key is in, and the offset to the start of this key's sequence record. \item The \ccode{esl\_fgets()} function (part of the \eslmod{easel} foundation module) is a way of reading text files line by line, no matter how long each line might be: \ccode{esl\_fgets()} reallocates its buffer as needed. \item \ccode{esl\_newssi\_Write()} saves the index to an open file. \item Finally, the index structure is freed by \ccode{esl\_newssi\_Close()}. \end{itemize} To compile and run the program, given a FASTA file \ccode{foo.fa} that you provide: \begin{cchunk} % cc -o example -DeslSSI_EXAMPLE esl_ssi.c -leasel -lm % ./example foo.fa \end{cchunk} This will create a new SSI file called \ccode{foo.fa.ssi}. \subsection{An example of using an SSI index} Figure~\ref{fig:ssi_example2} shows a program that retrieves a FASTA sequence record by its name, using an SSI index. \begin{figure} \input{cexcerpts/ssi_example2} \caption{Example of using an SSI index to retrieve a sequence by name from a FASTA file.} \label{fig:ssi_example2} \end{figure} \begin{itemize} \item \ccode{esl\_ssi\_Open()} opens the SSI index file. \item \ccode{esl\_ssi\_FindName()} looks up the record by its name. Primary keys are checked first, then secondary keys. If it is found, \ccode{fh} contains a file handle (what file it's in), and \ccode{offset} contains the position of the desired record in that file. \item The file handle \ccode{fh} is looked up in the file index with \ccode{esl\_ssi\_FileInfo()}, and the name of the file and a format code are returned. The format code is useful if you need to hand the filename off to different kinds of file parsers, depending on what file type it is. (SSI can index files in heterogenous formats.) \item After that, you use the retrieved information however you need, independent of the SSI index. The example emphasizes this, by freeing the SSI index immediately with \ccode{esl\_ssi\_Destroy()} after it knows \ccode{fafile} and \ccode{offset}. The example opens the file, positions the disk with \ccode{fseeko()}, and reads a sequence record out of it one line at a time, until it reaches EOF or the start of the next sequence record. \end{itemize} \subsection{SSI file format} There are four sections to the SSI file: \begin{sreitems}{\textbf{Secondary keys}} \item[\textbf{Header}] Contains a magic number indicating SSI version number, followed by information about the number and sizes of items in the index. \item[\textbf{Files}] Contains one or more \emph{file records}, one per sequence file that's indexed. These contain information about the individual files. \item[\textbf{Primary keys}] Contains one or more \emph{primary key records}, one per primary key. \item[\textbf{Secondary keys}] Contains one or more \emph{secondary key records}, one per secondary key. \end{sreitems} All numeric quantities are stored as fixed-width unsigned integers in network (bigendian) order, for crossplatform portability of the index files, using types \ccode{uint16\_t}, \ccode{uint32\_t}, and \ccode{uint64\_t}.\footnote{These types are available on C99-compliant systems. On other systems, \Easel\ automatically defines appropriate substitutes at configuration time.} Values may need to be cast to signed quantities elsewhere in \Easel, so only half of their dynamic range is valid (e.g. 0..32,767 for values of type \ccode{uint16\_t}; 0..2,146,483,647 (2 billion) for \ccode{uint32\_t}; and 0..9.22e18 (9 million trillion) for \ccode{uint64\_t}). File offsets (type \ccode{off\_t}) are assumed to be either 32-bit or 64-bit signed integers. Easel uses 64-bit offsets if at all possible on your system. The size of \ccode{off\_t} for the system that created the SSI file is stored in the SSI header, for portability to other systems that try to read the SSI file. \subsubsection{Header section} The header section contains: \vspace{1em} \begin{tabular}{llrr} Variable & Description & Bytes & Type \\\hline \ccode{magic} & SSI version magic number. & 4 & \ccode{uint32\_t}\\ \ccode{flags} & Optional behavior flags (see below) & 4 & \ccode{uint32\_t}\\ \ccode{offsz} & \ccode{off\_t} size on system that made index & 4 & \ccode{uint32\_t}\\ \ccode{nfiles} & Number of files in file section. & 2 & \ccode{uint16\_t}\\ \ccode{nprimary} & Number of primary keys indexed. & 8 & \ccode{uint64\_t}\\ \ccode{nsecondary} & Number of secondary keys indexed. & 8 & \ccode{uint64\_t}\\ \ccode{flen} & Length of filenames (incl. '\verb+\0+') & 4 & \ccode{uint32\_t}\\ \ccode{plen} & Length of primary key names (incl. '\verb+\0+') & 4 & \ccode{uint32\_t}\\ \ccode{slen} & Length of sec. key names (incl. '\verb+\0+') & 4 & \ccode{uint32\_t}\\ \ccode{frecsize} & \# of bytes in a file record & 4 & \ccode{uint32\_t}\\ \ccode{precsize} & \# of bytes in a primary key record & 4 & \ccode{uint32\_t}\\ \ccode{srecsize} & \# of bytes in a sec. key record & 4 & \ccode{uint32\_t}\\ \ccode{foffset} & disk offset, start of file records & \dag & \ccode{off\_t}\\ \ccode{poffset} & disk offset, start of primary key recs & \dag & \ccode{off\_t}\\ \ccode{soffset} & disk offset, start of sec. key records & \dag & \ccode{off\_t}\\ \end{tabular} \vspace{1em} The \ccode{flags} field is currently unused. It is stored for possible future use, for any optional behaviors that may need to be implemented. The reason to explicitly record various record sizes (\ccode{frecsize}, \ccode{precsize}, \ccode{srecsize}) and index file positions (\ccode{foffset}, \ccode{poffset}, \ccode{soffset}) is to allow for future extensions. Using explicit offsets means we can add more fields in future versions of SSI without breaking older SSI parsers. The format is meant to be both forwards- and backwards-compatible. \subsubsection{File section} The file section consists of \ccode{nfiles} file records. Each record is \ccode{frecsize} bytes long, and contains: \vspace{1em} \begin{tabular}{llrr} Variable & Description & Bytes & Type \\\hline \ccode{filename} & Name of file (possibly including full path) & \ccode{flen} & \ccode{char *}\\ \ccode{format} & Format code for file & 4 & \ccode{uint32\_t} \\ \ccode{flags} & Optional behavior flags & 4 & \ccode{uint32\_t} \\ \ccode{bpl} & Bytes per sequence data line & 4 & \ccode{uint32\_t} \\ \ccode{rpl} & Residues per sequence data line & 4 & \ccode{uint32\_t} \\\hline \end{tabular} \vspace{1em} When a SSI file is written, \ccode{frecsize} is equal to the sum of the sizes above. When a SSI file is read by a parser, it is possible that \ccode{frecsize} is larger than the parser expects, if the parser is expecting an older version of the SSI format, because additional fields might be present. The parser will only try to parse data up to the \ccode{frecsize} it expected to see, but still knows the (possibly larger) \ccode{frecsize} that is operative in this SSI file, for purposes of skipping around in the index file. An SSI index might reside in the same directory as the data file(s) it indexes, so \ccode{filename} might be relative to the location of the SSI index. Alternatively, \ccode{filename} might be a full path. These semantics are not enforced by the \eslmod{ssi} module. Rather, this is an issue for an SSI-enabled application to define for itself. SSI-enabled applications would typically include program(s) for creating indices and program(s) for using them. Different applications might employ different conventions for where the indices are expected to be, relative to the sequence files, so long as that convention is consistently applied by both index creator and index user. Similarly, the \eslmod{ssi} module does not specify the meaning of the \ccode{format} code. An SSI-enabled application may use this field to associate any useful format code (or indeed, any other number) with each indexed file. A typical use, though, would be sequence file format codes like \ccode{eslSQFILE\_FASTA} or \ccode{eslMSAFILE\_STOCKHOLM} from the \eslmod{sqio} or \eslmod{msa} modules. Only one possible optional behavior flag is currently defined: \vspace{1em} \begin{tabular}{lll} Flag & Value& Note\\ \hline \ccode{eslSSI\_FASTSUBSEQ} & $1 \ll 0$ & Fast subseq retrieval is possible for this file.\\\hline \end{tabular} \vspace{1em} When \ccode{eslSSI\_FASTSUBSEQ} is set, \ccode{bpl} and \ccode{rpl} are nonzero. These can then be used to calculate the offset of subsequence positions in the data file. This optional behavior is described in detail a bit later. \subsubsection{Primary key section} The primary key section consists of \ccode{nprimary} records. Each record is \ccode{precsize} bytes long, and contains: \vspace{1em} \begin{tabular}{llrr} Variable & Description & Bytes & Type \\\hline \ccode{key} & Key name (seq name, identifier, accession) & \ccode{plen}& \ccode{char *}\\ \ccode{fnum} & File number (0..nfiles-1) & 2 & \ccode{uint16\_t}\\ \ccode{r\_off} & Offset to start of record & \ddag & \ccode{off\_t}\\ \ccode{d\_off} & Offset to start of sequence data & \ddag & \ccode{off\_t}\\ \ccode{len} & Length of data (e.g. seq length, residues) & 8 & \ccode{uint64\_t} \\\hline \end{tabular} \vspace{1em} The two offsets are sequence file offsets that may be either 8 or 4 bytes (indicated by \ddag above). They are usually 64-bit (8 byte) signed integers. If an SSI index is created on an older system that only allows 32-bit offsets (and hence cannot have files $>$2 GB), they are 32-bit (4-byte) signed integers. \ccode{r\_off} (the \emph{record offset}) indicates the position of the first byte of the record. \ccode{d\_off} (the \emph{data offset}) is optional. It indicated the position of the first byte of the data in the record (the sequence itself, for example), after any header information. If \ccode{eslSSI\_FASTSUBSEQ} is set on this key's file, \ccode{d\_off} can be used to calculate a disk position close to (and possibly exactly at) the start of any subsequence. \ccode{len} is the length of the data record. It is optional, because some kinds of records that SSI might be used to index may not have a meaningful length. The units of length are application-defined (i.e.\ defined by whatever creates the SSI index for a particular file); but for sequences, \ccode{len} is almost certainly in residues. In subsequence retrieval, a \ccode{len} in residues is necessary for bounds checking. \subsubsection{Secondary key section} The secondary key section consists of \ccode{nsecondary} records. Each record is \ccode{srecsize} bytes long, and contains: \vspace{1em} \begin{tabular}{llrr} Variable & Description & Bytes & Type \\\hline \ccode{key} & Key name (seq name, identifier, accession) & \ccode{slen}& \ccode{char *}\\ \ccode{pkey} & Primary key & \ccode{plen}& \ccode{char *}\\\hline \end{tabular} \vspace{1em} That is, secondary keys are simply associated with primary keys as \emph{aliases}. There can be many secondary keys for a given record. However, all keys (primary and secondary) must be unique: no key can occur more than once in the index. \subsection{Fast subsequence retrieval} In some files (notably whole chromosomal DNA sequences) the size of each sequence is large. It may be slow (even prohibitively slow) to extract a desired subsequence, even if an SSI index says how to find the sequence record quickly, if you had to read the entire sequence into memory just to extract the right part of it. SSI uses a simple but effective technique to find subsequences. Provided that he sequence data file is consistently formatted so that each line in each record (except the last one) is of the same length, in both bytes and residues, we can determine a disk offset of the start of any subsequence by arithmetic. \Easel\ refers to such a file as ``well-formatted''. For example, a simple well-formatted FASTA file with 50 residues per line might have 51 bytes on every sequence line (counting the '\verb+\0+') but for the last line in each record (\ccode{bpl}=51, \ccode{rpl}=50). Position $i$ in a sequence $1..L$ will be on line $l = (i-1)/\mbox{\ccode{rpl}}$, and line $l$ starts at disk offset $l * \mbox{\ccode{bpl}}$ relative to the start of the sequence data. If there are no nonsequence characters in the data line except the terminal '\verb+\0+' (which is true iff \ccode{bpl} = \ccode{rpl}+1 and 1 residue = 1 byte), we can precisely identify the disk position of any residue $i$ (\emph{single residue resolution}): \[ \mbox{relative offset of residue $i$} = \left((i-1)/\mbox{\ccode{rpl}}\right)*\mbox{\ccode{bpl}} + (i-1) \% \mbox{ \ccode{rpl}} \] Even for sequence data lines with extra characters (e.g. spaces, coordinates, whatever), we can still identify the start of the text line that residue $i$ is on (\emph{line resolution}). A parser can be positioned at the beginning of the appropriate line $l$, which starts at residue $(l*\mbox{\ccode{rpl}}) + 1$, and it can start reading from there (e.g. the line that $i$ is on) rather than the beginning of the whole sequence record. When creating an index, your application is responsible for determining if \ccode{bpl} and \ccode{rpl} are consistent throughout a file. If so, you may call \ccode{esl\_newssi\_SetSubseq()} on that file's handle to set \ccode{bpl}, \ccode{rpl}, and the \ccode{eslSSI\_FASTSUBSEQ} flag. Then, when using that index, you can use the \ccode{esl\_ssi\_FindSubseq()} call to retrieve not only the filehandle \ccode{fh} and record offset \ccode{r\_off} for a key; you also provide a desired start position \ccode{requested\_start} for the subsequence you want to retrieve, and the routine gives you back a data offset \ccode{d\_off}, which corresponds to a actual starting position \ccode{actual\_start} that is also returned. For single residue resolution, \ccode{actual\_start} is \ccode{requested\_start}, and the data offset \ccode{d\_off} will position you right at the residue you want; you position the file with \ccode{fseeko()} and start reading your subsequence immediately. When we can only achieve line resolution, \ccode{actual\_start} is $\leq$ \ccode{requested\_start}; you position the disk to the start of the appropriate line with \ccode{fseeko()}, start reading, and skip zero or more residues to reach your \ccode{requested\_start}. Your application should be prepared to deal with line resolution; it should not assume that \ccode{requested\_start} and \ccode{actual\_start} are identical. Data is always read ``left to right''. To read a reverse complemented strand in DNA files, you must read your subsequence in forward orientation first, and reverse complement it later. hmmer-3.1b2/easel/esl_sse.h0000664361611702660230000001771412473612607015204 0ustar wheelerteddy /* Vectorized routines for Intel/AMD, using Streaming SIMD Extensions (SSE). * * This header file, unusually, provides many complete function * implementations; this is so that they can be inlined by the * compiler, for maximum efficiency. * * Contents: * 1. Function declarations (from esl_sse.c) * 2. Inlined utilities for ps vectors (4 floats in __m128) * 3. Inlined utilities for epu8 vectors (16 uchars in __m128i) */ #ifdef HAVE_SSE2 #ifndef eslSSE_INCLUDED #define eslSSE_INCLUDED #include "easel.h" #include #include /* SSE */ #include /* SSE2 */ /* Some compilers (gcc 3.4) did not implement SSE2 cast functions * on the theory that they're unnecessary no-ops -- but then * code that has proper SSE cast calls doesn't compile. Provide * the no-ops. */ #ifndef HAVE_SSE2_CAST #define _mm_castps_si128(x) (__m128i)(x) #define _mm_castsi128_ps(x) (__m128)(x) #endif /***************************************************************** * 1. Function declarations (from esl_sse.c) *****************************************************************/ extern __m128 esl_sse_logf(__m128 x); extern __m128 esl_sse_expf(__m128 x); extern void esl_sse_dump_ps(FILE *fp, __m128 v); /***************************************************************** * 2. Inline utilities for ps vectors (4 floats in __m128) *****************************************************************/ /* Function: esl_sse_select_ps() * Synopsis: SSE equivalent of * * Purpose: Vector select. Returns a vector where * is all 0's; where is all 1's. * * Useful for avoiding conditional branches. For example, * to implement \ccode{if (a > 0) a += a;}: * * \begin{cchunk} * mask = _mm_cmpgt_ps(a, _mm_setzero_ps()); * twoa = _mm_add_ps(a, a); * a = esl_sse_select_ps(a, twoa, mask); * \end{cchunk} * * Notes: As recommended by the Altivec/SSE Migration Guide, * Apple Computer, Inc. */ static inline __m128 esl_sse_select_ps(__m128 a, __m128 b, __m128 mask) { b = _mm_and_ps(b, mask); a = _mm_andnot_ps(mask, a); return _mm_or_ps(a,b); } /* Function: esl_sse_any_gt_ps() * Synopsis: Returns TRUE if any a[z] > b[z] * * Purpose: Returns TRUE if any a[z] > b[z] in two * vectors of floats. * * Xref: From Apple Altivec/SSE migration guide. */ static inline int esl_sse_any_gt_ps(__m128 a, __m128 b) { __m128 mask = _mm_cmpgt_ps(a,b); int maskbits = _mm_movemask_ps( mask ); return maskbits != 0; } /* Function: esl_sse_hmax_ps() * Synopsis: Find the maximum of elements in a vector. * * Purpose: Find the maximum valued element in the four float elements * in , and return that maximum value in <*ret_max>. * * Xref: J3/90 for benchmarking of some alternative implementations. */ static inline void esl_sse_hmax_ps(__m128 a, float *ret_max) { a = _mm_max_ps(a, _mm_shuffle_ps(a, a, _MM_SHUFFLE(0, 3, 2, 1))); a = _mm_max_ps(a, _mm_shuffle_ps(a, a, _MM_SHUFFLE(1, 0, 3, 2))); _mm_store_ss(ret_max, a); } /* Function: esl_sse_hmin_ps() * Synopsis: Find the minimum of elements in a vector. * * Purpose: Find the minimum valued element in the four float elements * in and return that minimum value in <*ret_min>. */ static inline void esl_sse_hmin_ps(__m128 a, float *ret_min) { a = _mm_min_ps(a, _mm_shuffle_ps(a, a, _MM_SHUFFLE(0, 3, 2, 1))); a = _mm_min_ps(a, _mm_shuffle_ps(a, a, _MM_SHUFFLE(1, 0, 3, 2))); _mm_store_ss(ret_min, a); } /* Function: esl_sse_hsum_ps() * Synopsis: Takes the horizontal sum of elements in a vector. * * Purpose: Add the four float elements in vector ; return * that sum in <*ret_sum>. */ static inline void esl_sse_hsum_ps(__m128 a, float *ret_sum) { a = _mm_add_ps(a, _mm_shuffle_ps(a, a, _MM_SHUFFLE(0, 3, 2, 1))); a = _mm_add_ps(a, _mm_shuffle_ps(a, a, _MM_SHUFFLE(1, 0, 3, 2))); _mm_store_ss(ret_sum, a); } /* Function: esl_sse_rightshift_ps() * Synopsis: Shift vector elements to the right. * * Purpose: Returns a vector containing * <{ b[0] a[0] a[1] a[2] }>: * i.e. shift the values in to the * right, and load the first value of * into the first slot. */ static inline __m128 esl_sse_rightshift_ps(__m128 a, __m128 b) { return _mm_move_ss(_mm_shuffle_ps(a, a, _MM_SHUFFLE(2, 1, 0, 0)), b); } /* Function: esl_sse_leftshift_ps() * Synopsis: Shift vector elements to the left. * * Purpose: Returns a vector containing * <{ a[1] a[2] a[3] b[0]}>: * i.e. shift the values in to the * left and load the first value of * into the first slot. */ static inline __m128 esl_sse_leftshift_ps(__m128 a, __m128 b) { register __m128 v = _mm_move_ss(a, b); /* now b[0] a[1] a[2] a[3] */ return _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 3, 2, 1)); /* now a[1] a[2] a[3] b[0] */ } /***************************************************************** * 3. Inlined utilities for epu8 vectors (16 uchars in __m128i) *****************************************************************/ /* Function: esl_sse_any_gt_epu8() * Synopsis: Returns TRUE if any a[z] > b[z]. * * Purpose: Return TRUE if any b[z]> for * in two vectors of unsigned chars. * * We need this incantation because SSE provides * no instruction. * * For equality tests, note that works fine * for unsigned ints though there is no * instruction either). * * See vec_any_gt */ static inline int esl_sse_any_gt_epu8(__m128i a, __m128i b) { __m128i mask = _mm_cmpeq_epi8(_mm_max_epu8(a,b), b); /* anywhere a>b, mask[z] = 0x0; elsewhere 0xff */ int maskbits = _mm_movemask_epi8(_mm_xor_si128(mask, _mm_cmpeq_epi8(mask, mask))); /* the xor incantation is a bitwise inversion */ return maskbits != 0; } static inline int esl_sse_any_gt_epi16(__m128i a, __m128i b) { return (_mm_movemask_epi8(_mm_cmpgt_epi16(a,b)) != 0); } /* Function: esl_sse_hmax_epu8() * Synopsis: Return the max of the 16 elements in epu8 vector. * * Purpose: Returns the maximum value of the 16 elements in * an vector. */ static inline uint8_t esl_sse_hmax_epu8(__m128i a) { a = _mm_max_epu8(a, _mm_srli_si128(a, 8)); a = _mm_max_epu8(a, _mm_srli_si128(a, 4)); a = _mm_max_epu8(a, _mm_srli_si128(a, 2)); a = _mm_max_epu8(a, _mm_srli_si128(a, 1)); return (uint8_t) _mm_extract_epi16(a, 0); /* only low-order 8 bits set; so _epi16 or _epi8 equiv; _epi8 is SSE4.1 */ } /* Function: esl_sse_hmax_epi16() * Synopsis: Return the max of the 8 elements in epi16 vector. * * Purpose: Returns the maximum value of the 16 elements in * an vector. */ static inline int16_t esl_sse_hmax_epi16(__m128i a) { a = _mm_max_epi16(a, _mm_srli_si128(a, 8)); a = _mm_max_epi16(a, _mm_srli_si128(a, 4)); a = _mm_max_epi16(a, _mm_srli_si128(a, 2)); return (int16_t) _mm_extract_epi16(a, 0); /* only low-order 8 bits set; so _epi16 or _epi8 equiv; _epi8 is SSE4.1 */ } #endif /*eslSSE_INCLUDED*/ #endif /*HAVE_SSE2*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_sse.h 745 2012-02-07 13:15:41Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_sse.h $ *****************************************************************/ hmmer-3.1b2/easel/esl_normal.tex0000664361611702660230000000126612473612607016246 0ustar wheelerteddy \begin{tabular}{lcll}\hline Variate & $x$ & \ccode{double} & $ -\infty < x < \infty$ \\ Location & $\mu$ & \ccode{double} & $-\infty < \mu < \infty$\\ Scale & $\sigma$ & \ccode{double} & $\sigma > 0$ \\ \hline \end{tabular} The probability density function (PDF) is: \begin{equation} PDF = P(X=x) = \frac{1}{\sigma \sqrt{2\pi}} e^{\frac{-(x-\mu)^2}{2\sigma^2}}. \end{equation} The cumulative distribution function (CDF) does not have a convenient closed-form expression. It is derived numerically in terms of the error function, $\mbox{erf}()$: \begin{equation} CDF = P(X0$; the bracket $0..100$ makes the example find only the positive root): \input{cexcerpts/rootfinder_example} To use the Newton/Raphson method, you provide a function that computes $f(x)$ and its first derivative $df(x)/dx$, and you provide an initial guess for the root $x$. An example of using the Newton/Raphson method to compute the root of the same function above (which has a derivative $df(x)/dx = 2ax + b$) is: \input{cexcerpts/rootfinder_example2} In this example, because the initial guess was negative, the other root gets found. Currently, just these two rootfinding algorithms are implemented. The bisection method does not require derivative information, and it requires the caller to provide an interval $(x_L..x_R)$ in which the root lies ($f(x_L)$ and $f(x_R)$ have opposite signs). Newton/Raphson uses derivative information, and it only needs an initial guess for $x$, not an interval. Thus there are two different \ccode{\_Create*()} routines, \ccode{esl\_rootfinder\_CreateBracketer()} for initializing a bisection method, and \ccode{esl\_rootfinder\_CreatePolisher()} for initializing a Newton/Raphson method. The reason for the more general names (\ccode{CreateBracketer()} and \ccode{CreatePolisher()} is that I expect other rootfinding algorithms (if we ever implement any) will group similarly: bracketing methods without derivative information, and ``polishing'' methods that use derivative information. But this may be misguided, and may change in the future. hmmer-3.1b2/easel/esl_ratematrix.tex0000664361611702660230000000015612473612607017133 0ustar wheelerteddyThe \eslmod{ratematrix} module implements continuous-time Markov evolutionary models of residue subsitution. hmmer-3.1b2/easel/config.guess0000664361611702660230000012513312473612604015703 0ustar wheelerteddy#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2004-06-11' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amd64:OpenBSD:*:*) echo x86_64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; cats:OpenBSD:*:*) echo arm-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; luna88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mipseb-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit 0 ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha*:OpenVMS:*:*) echo alpha-hp-vms exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; *:OS400:*:*) echo powerpc-ibm-os400 exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) # Determine whether the default compiler uses glibc. eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #if __GLIBC__ >= 2 LIBC=gnu #else LIBC= #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` # GNU/KFreeBSD systems have a "k" prefix to indicate we are using # FreeBSD's kernel, but not the complete OS. case ${LIBC} in gnu) kernel_only='k' ;; esac echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:[34]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) case `uname -p` in *86) UNAME_PROCESSOR=i686 ;; powerpc) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: hmmer-3.1b2/easel/esl_gev.h0000664361611702660230000000444612473612606015170 0ustar wheelerteddy/* esl_gev.h * Generalized extreme value (GEV) distributions. * * SRE, Tue Jul 12 09:15:56 2005 * SVN $Id: esl_gev.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_gev.h $ */ #ifndef eslGEV_INCLUDED #define eslGEV_INCLUDED #ifdef eslAUGMENT_RANDOM #include #endif extern double esl_gev_pdf (double x, double mu, double lambda, double alpha); extern double esl_gev_logpdf (double x, double mu, double lambda, double alpha); extern double esl_gev_cdf (double x, double mu, double lambda, double alpha); extern double esl_gev_logcdf (double x, double mu, double lambda, double alpha); extern double esl_gev_surv (double x, double mu, double lambda, double alpha); extern double esl_gev_logsurv(double x, double mu, double lambda, double alpha); extern double esl_gev_invcdf (double p, double mu, double lambda, double alpha); extern double esl_gev_generic_pdf (double x, void *params); extern double esl_gev_generic_cdf (double x, void *params); extern double esl_gev_generic_surv (double x, void *params); extern double esl_gev_generic_invcdf(double p, void *params); extern int esl_gev_Plot(FILE *fp, double mu, double lambda, double alpha, double (*func)(double x, double mu, double lambda, double alpha), double xmin, double xmax, double xstep); #ifdef eslAUGMENT_RANDOM extern double esl_gev_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double alpha); #endif #ifdef eslAUGMENT_MINIMIZER extern int esl_gev_FitComplete(double *x, int n, double *ret_mu, double *ret_lambda, double *ret_alpha); extern int esl_gev_FitCensored(double *x, int n, int z, double phi, double *ret_mu, double *ret_lambda, double *ret_alpha); #endif /*eslAUGMENT_MINIMIZER*/ #endif /*eslGEV_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_sqio_ascii.c0000664361611702660230000037003212473612607016523 0ustar wheelerteddy/* Unaligned ascii sequence file i/o. * * Contents: * 1. An object, in text mode. * 2. An object, in digital mode. [with ] * 3. Miscellaneous routines. * 4. Sequence reading (sequential). * 5. Sequence/subsequence fetching, random access [with ] * 6. Internal routines shared by parsers. * 7. Internal routines for EMBL format (including UniProt, TrEMBL) * 8. Internal routines for GenBank format * 9. Internal routines for FASTA format * 10. Internal routines for DAEMON format * 11. Internal routines for HMMPGMD format * 12. Copyright and license. * * This module shares remote evolutionary homology with Don Gilbert's * seminal, public domain ReadSeq package, though the last common * ancestor was circa 1991 and no recognizable vestiges are likely to * remain. Thanks Don! * */ #include "esl_config.h" #include #include #include #include #include #include "easel.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h"/* alphabet aug adds digital sequences */ #endif #ifdef eslAUGMENT_MSA #include "esl_msa.h"/* msa aug adds ability to read MSAs as unaligned seqs */ #include "esl_msafile.h" #endif #ifdef eslAUGMENT_SSI #include "esl_ssi.h"/* ssi aug adds ability to randomly access sequences/subsequences */ #endif #include "esl_sqio.h" #include "esl_sq.h" /* format specific routines */ static int sqascii_GuessFileFormat(ESL_SQFILE *sqfp, int *ret_fmt); static int sqascii_Position (ESL_SQFILE *sqfp, off_t offset); static void sqascii_Close (ESL_SQFILE *sqfp); static int sqascii_SetDigital (ESL_SQFILE *sqfp, const ESL_ALPHABET *abc); static int sqascii_GuessAlphabet (ESL_SQFILE *sqfp, int *ret_type); static int sqascii_Read (ESL_SQFILE *sqfp, ESL_SQ *sq); static int sqascii_ReadInfo (ESL_SQFILE *sqfp, ESL_SQ *sq); static int sqascii_ReadSequence (ESL_SQFILE *sqfp, ESL_SQ *sq); static int sqascii_ReadWindow (ESL_SQFILE *sqfp, int C, int W, ESL_SQ *sq); static int sqascii_ReadBlock (ESL_SQFILE *sqfp, ESL_SQ_BLOCK *sqBlock, int max_residues, int max_sequences, int long_target); static int sqascii_Echo (ESL_SQFILE *sqfp, const ESL_SQ *sq, FILE *ofp); static int sqascii_IsRewindable (const ESL_SQFILE *sqfp); static const char *sqascii_GetError (const ESL_SQFILE *sqfp); #ifdef eslAUGMENT_SSI static int sqascii_OpenSSI (ESL_SQFILE *sqfp, const char *ssifile_hint); static int sqascii_PositionByKey (ESL_SQFILE *sqfp, const char *key); static int sqascii_PositionByNumber(ESL_SQFILE *sqfp, int which); static int sqascii_Fetch (ESL_SQFILE *sqfp, const char *key, ESL_SQ *sq); static int sqascii_FetchInfo (ESL_SQFILE *sqfp, const char *key, ESL_SQ *sq); static int sqascii_FetchSubseq (ESL_SQFILE *sqfp, const char *source, int64_t start, int64_t end, ESL_SQ *sq); #endif /*eslAUGMENT_SSI*/ /* Internal routines shared by parsers. */ static int loadmem (ESL_SQFILE *sqfp); static int loadbuf (ESL_SQFILE *sqfp); static int nextchar (ESL_SQFILE *sqfp, char *ret_c); static int seebuf (ESL_SQFILE *sqfp, int64_t maxn, int64_t *opt_nres, int64_t *opt_endpos); static void addbuf (ESL_SQFILE *sqfp, ESL_SQ *sq, int64_t nres); static void skipbuf (ESL_SQFILE *sqfp, int64_t nskip); static int read_nres(ESL_SQFILE *sqfp, ESL_SQ *sq, int64_t nskip, int64_t nres, int64_t *opt_actual_nres); static int skip_whitespace(ESL_SQFILE *sqfp); /* EMBL format; also UniProt, TrEMBL */ static void config_embl(ESL_SQFILE *sqfp); static void inmap_embl (ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap); static int header_embl(ESL_SQFILE *sqfp, ESL_SQ *sq); static int skip_embl (ESL_SQFILE *sqfp, ESL_SQ *sq); static int end_embl (ESL_SQFILE *sqfp, ESL_SQ *sq); /* GenBank format; also DDBJ */ static void config_genbank(ESL_SQFILE *sqfp); static void inmap_genbank (ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap); static int header_genbank(ESL_SQFILE *sqfp, ESL_SQ *sq); static int skip_genbank (ESL_SQFILE *sqfp, ESL_SQ *sq); static int end_genbank (ESL_SQFILE *sqfp, ESL_SQ *sq); /* FASTA format */ static void config_fasta(ESL_SQFILE *sqfp); static void inmap_fasta (ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap); static int header_fasta(ESL_SQFILE *sqfp, ESL_SQ *sq); static int skip_fasta (ESL_SQFILE *sqfp, ESL_SQ *sq); static int end_fasta (ESL_SQFILE *sqfp, ESL_SQ *sq); /* DAEMON format */ static void config_daemon(ESL_SQFILE *sqfp); static void inmap_daemon (ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap); static int end_daemon (ESL_SQFILE *sqfp, ESL_SQ *sq); /* HMMPGMD format */ static int fileheader_hmmpgmd(ESL_SQFILE *sqfp); /***************************************************************** *# 1. An object, in text mode. *****************************************************************/ /* Function: esl_sqascii_Open() * Synopsis: Open a sequence file for reading. * * Purpose: Open a sequence file for reading. * The opened is returned through . * * The format of the file is asserted to be (for * example, ). If is * then the routine attempts to * autodetect the file format. * * There are two special cases for . If * is "-", the sequence data are read from a * pipe. If ends in ".gz", the file is * assumed to be compressed with , and it is opened * by a pipe from . Reading gzip files only works * on POSIX-compliant systems that have pipes * (specifically, the POSIX.2 popen() call). * * Returns: on success, and <*ret_sqfp> points to a new * open . Caller deallocates this object with * . * * Returns if can't be found or * opened. Returns if the file is empty, or * if autodetection is attempted and the format can't be * determined. On any error condition, <*ret_sqfp> is * returned NULL. * * Throws: on allocation failure. */ int esl_sqascii_Open(char *filename, int format, ESL_SQFILE *sqfp) { int status;/* return status from an ESL call */ int n; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; /* before we go any further, make sure we can handle the format */ if (format == eslSQFILE_NCBI) return eslENOTFOUND; /* Default initializations */ ascii->fp = NULL; ascii->do_gzip = FALSE; ascii->do_stdin = FALSE; ascii->do_buffer = FALSE; ascii->mem = NULL; ascii->allocm = 0; ascii->mn = 0; ascii->mpos = 0; ascii->moff = -1; ascii->is_recording = FALSE; ascii->buf = NULL; ascii->boff = 0; ascii->balloc = 0; ascii->nc = 0; ascii->bpos = 0; ascii->L = 0; ascii->linenumber = 1; ascii->bookmark_offset = 0; ascii->bookmark_linenum = 0; ascii->is_linebased = FALSE; ascii->eof_is_ok = FALSE; ascii->parse_header = NULL; ascii->skip_header = NULL; ascii->parse_end = NULL; ascii->afp = NULL; ascii->msa = NULL; ascii->idx = -1; ascii->ssifile = NULL; ascii->rpl = -1; /* -1 = not set yet */ ascii->bpl = -1; /* (ditto) */ ascii->prvrpl = -1; /* (ditto) */ ascii->prvbpl = -1; /* (ditto) */ ascii->currpl = -1; ascii->curbpl = -1; ascii->ssi = NULL; /* MSA formats are handled entirely by msafile module - * let it handle stdin, .gz, etc */ if (! esl_sqio_IsAlignment(format)) { if (strcmp(filename, "-") == 0) /* stdin special case */ { ascii->fp = stdin; ascii->do_stdin = TRUE; } else { /* Check the current working directory first. */ if ((ascii->fp = fopen(filename, "r")) == NULL) { status = eslENOTFOUND; goto ERROR; } } /* Deal with the .gz special case: to popen(), "success" only means * it found and executed gzip -dc. If gzip -dc doesn't find our * file, popen() still blithely returns success, so we have to be * sure the file exists. That's why we fopen()'ed it above, only to * close it and popen() it here. */ #ifdef HAVE_POPEN n = strlen(filename); if (n > 3 && strcmp(filename+n-3, ".gz") == 0) { char *cmd; fclose(ascii->fp); ESL_ALLOC(cmd, sizeof(char) * (n+1+strlen("gzip -dc "))); sprintf(cmd, "gzip -dc %s", filename); ascii->fp = popen(cmd, "r"); if (ascii->fp == NULL) { status = eslENOTFOUND; goto ERROR; } ascii->do_gzip = TRUE; free(cmd); } #endif /*HAVE_POPEN*/ /* If we don't know the format yet, try to autodetect it now. */ if (format == eslSQFILE_UNKNOWN) { status = sqascii_GuessFileFormat(sqfp, &format); if (status == eslOK) sqfp->format = format; else if (status != eslEFORMAT) goto ERROR; /* might still be eslSQFILE_UNKNOWN, for MSA files */ } /* If the format is still unknown, it may be an MSA file. The * msafile module is capable of autodetecting format even in a .gz * or stdin pipe, but the stuff above has already read from these * nonrewindable sources, trying to guess an unaligned format. We * could open a second .gz pipe, but that's ugly; and in any case, * we can't rewind stdin. Eventually, this will get resolved, by * having sqio open an ESL_BUFFER, then doing an * eslx_msafile_OpenBuffer() if we need to hand control to the * msafile module. For now, sqio is already documented to be * unable to autodetect MSA file formats in stdin or .gz pipes, * so leave it that way. */ if (format == eslSQFILE_UNKNOWN && (ascii->do_gzip || ascii->do_stdin)) { status = eslEFORMAT; goto ERROR; } } /* If format is definitely an MSA, open it through the msafile interface. * Or, if format is still unknown, try to open the file as an MSA file, * using msafile autodetection. */ #ifdef eslAUGMENT_MSA if (format == eslSQFILE_UNKNOWN || esl_sqio_IsAlignment(format)) { status = eslx_msafile_Open(NULL, filename, NULL, format, NULL, &(ascii->afp)); if (status != eslOK) { status = eslEFORMAT; goto ERROR; } /* This was our last attempt. Failure to open == failure to detect format */ sqfp->format = format = ascii->afp->format; } #endif if (format == eslSQFILE_UNKNOWN) { status = eslEFORMAT; goto ERROR; } /* Configure the 's parser and inmaps for this format. */ if (!esl_sqio_IsAlignment(format)) { switch (format) { case eslSQFILE_EMBL: config_embl(sqfp); inmap_embl(sqfp, NULL); break; case eslSQFILE_UNIPROT: config_embl(sqfp); inmap_embl(sqfp, NULL); break; case eslSQFILE_GENBANK: config_genbank(sqfp); inmap_genbank(sqfp, NULL); break; case eslSQFILE_DDBJ: config_genbank(sqfp); inmap_genbank(sqfp, NULL); break; case eslSQFILE_FASTA: config_fasta(sqfp); inmap_fasta(sqfp, NULL); break; case eslSQFILE_DAEMON: config_daemon(sqfp); inmap_daemon(sqfp, NULL); break; case eslSQFILE_HMMPGMD: config_fasta(sqfp); inmap_fasta(sqfp, NULL); break; default:status = eslEFORMAT; goto ERROR; } /* Preload the first line or chunk of file. */ status = loadbuf(sqfp); if (status == eslEOF) { status = eslEFORMAT; goto ERROR; } else if (status != eslOK) { goto ERROR; } /* hmmpgmd is a special case: we need to skip first line before parsing it. * generalize that a little: this could be a section for parsing a file header, * and leaving the buf positioned at the first char of the first record * (just as expected if there's no file header) */ switch (format) { case eslSQFILE_HMMPGMD: status = fileheader_hmmpgmd(sqfp); break; default: status = eslOK; break; } if (status != eslOK) goto ERROR; } else { ascii->is_linebased = TRUE; ascii->eof_is_ok = FALSE; /* no-op for msa's */ ascii->parse_header = NULL; /* no-op for msa's */ ascii->skip_header = NULL; /* no-op for msa's */ ascii->parse_end = NULL; /* no-op for msa's */ } /* initialize the function pointers for the ascii routines */ sqfp->position = &sqascii_Position; sqfp->close = &sqascii_Close; sqfp->set_digital = &sqascii_SetDigital; sqfp->guess_alphabet = &sqascii_GuessAlphabet; sqfp->is_rewindable = &sqascii_IsRewindable; sqfp->read = &sqascii_Read; sqfp->read_info = &sqascii_ReadInfo; sqfp->read_seq = &sqascii_ReadSequence; sqfp->read_window = &sqascii_ReadWindow; sqfp->echo = &sqascii_Echo; sqfp->read_block = &sqascii_ReadBlock; #ifdef eslAUGMENT_SSI sqfp->open_ssi = &sqascii_OpenSSI; sqfp->pos_by_key = &sqascii_PositionByKey; sqfp->pos_by_number = &sqascii_PositionByNumber; sqfp->fetch = &sqascii_Fetch; sqfp->fetch_info = &sqascii_FetchInfo; sqfp->fetch_subseq = &sqascii_FetchSubseq; #endif sqfp->get_error = &sqascii_GetError; return eslOK; ERROR: sqascii_Close(sqfp); return status; } /* Function: sqascii_GuessFileFormat() * Synopsis: Guess the format of an open . * * Purpose: Try to guess the sequence file format of , and * return the format code in <*ret_fmt>. * * First we attempt to guess based on the 's * suffix. <*.fa> is assumed to be in FASTA format; <*.gb> * is assumed to be in GenBank format. * * If that fails, we attempt to guess based on peeking at * the first nonblank line of . If the line * starts with $>$, we assume FASTA format; if the line * starts with , we assume EMBL format; if the line * starts with or it contains the string we assume GenBank format. * * If that fails too, return an error, and * <*ret_fmt> is set to . * * Returns: on success, and <*ret_fmt> contains * a valid sequence file format code, such as * . * * Returns if we opened but it * contains no nonblank lines, or if we peeked at the first * nonblank line and still couldn't guess the format; * <*ret_fmt> is then . * * Throws: on allocation failure. */ static int sqascii_GuessFileFormat(ESL_SQFILE *sqfp, int *ret_fmt) { int n = strlen(sqfp->filename); const char *sfx = NULL; int is_gzip = FALSE; int nsfx; int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; /* On any premature exit, *ret_fmt is eslSQFILE_UNKNOWN */ *ret_fmt = eslSQFILE_UNKNOWN; /* Is gzip'ed? Look at suffix. */ if (n > 3 && strcmp(sqfp->filename+n-3, ".gz") == 0) is_gzip = TRUE; /* Locate the suffix that might indicate format (ignore .gz) */ for (nsfx = 1, sfx = sqfp->filename + n - 1 - (is_gzip ? 3 : 0); sfx != sqfp->filename && *sfx != '.'; sfx--) nsfx++; /* now sfx points either to filename (we didn't find a suffix) or to the . of the suffix, * and nsfx is the suffix length inclusive of the . */ /* Attempt to guess file format based on file name suffix. */ if (strncmp(sfx, ".fa", 3) == 0) { *ret_fmt = eslSQFILE_FASTA; return eslOK; } else if (strncmp(sfx, ".gb", 3) == 0) { *ret_fmt = eslSQFILE_GENBANK; return eslOK; } /* If that didn't work, we'll have a peek at the stream; * turn recording on, and set for line based input. */ if (ascii->is_recording == -1) ESL_EXCEPTION(eslEINVAL, "sq file already too advanced"); ascii->is_recording = TRUE; ascii->is_linebased = TRUE; loadbuf(sqfp);/* now ascii->buf is a line of the file */ /* get first nonblank line */ while (esl_str_IsBlank(ascii->buf)) { status = loadbuf(sqfp); if (status == eslEOF) ESL_XFAIL(eslEFORMAT, ascii->errbuf, "No data found in file"); else if (status != eslOK) goto ERROR; } /* formats that can be determined from the first line: */ if (*(ascii->buf) == '>') *ret_fmt = eslSQFILE_FASTA; else if (strncmp(ascii->buf, "ID ", 5) == 0) *ret_fmt = eslSQFILE_EMBL; else if (strncmp(ascii->buf, "LOCUS ", 8) == 0) *ret_fmt = eslSQFILE_GENBANK; else if (strstr(ascii->buf, "Genetic Sequence Data Bank") != NULL) *ret_fmt = eslSQFILE_GENBANK; /* reset the sqfp */ ascii->mpos = 0; ascii->is_recording = FALSE; ascii->is_linebased = FALSE; free(ascii->buf); ascii->buf = NULL; ascii->balloc = 0; return (*ret_fmt == eslSQFILE_UNKNOWN) ? eslEFORMAT : eslOK; ERROR: ascii->mpos = 0; ascii->is_recording = FALSE; ascii->is_linebased = FALSE; if (ascii->buf != NULL) { free(ascii->buf); ascii->balloc = 0; } return status; } /* Function: sqascii_Position() * Synopsis: Reposition an open sequence file to an offset. * * Purpose: Reposition an open to offset . * would usually be the first byte of a * desired sequence record. * * Only normal sequence files can be positioned to a * nonzero offset. If corresponds to a standard * input stream or gzip -dc stream, it may not be * repositioned. If corresponds to a multiple * sequence alignment file, the only legal * is 0, to rewind the file to the beginning and * be able to read the entire thing again. * * After is called on a nonzero * , linenumber> and other bookkeeping * information is unknown. If caller knows it, it should * set it explicitly. * * See the SSI module for manipulating offsets and indices. * * Returns: on success; * if no data can be read from this position. * * Throws: if the fseeko() or fread() call fails. * on (re-)allocation failure. * if the is not positionable. * if in trying to rewind an alignment file * by closing and reopening it, the open fails. * On errors, the state of is indeterminate, and * it should not be used again. */ static int sqascii_Position(ESL_SQFILE *sqfp, off_t offset) { int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (ascii->do_stdin) ESL_EXCEPTION(eslEINVAL, "can't Position() in standard input"); if (ascii->do_gzip) ESL_EXCEPTION(eslEINVAL, "can't Position() in a gzipped file"); if (offset < 0) ESL_EXCEPTION(eslEINVAL, "bad offset"); if (offset > 0 && ascii->afp != NULL) ESL_EXCEPTION(eslEINVAL, "can't use esl_sqfile_Position() w/ nonzero offset on MSA file"); if (esl_sqio_IsAlignment(sqfp->format)) {/* msa file: close and reopen. maybe sometime we'll have esl_msafile_Rewind() */ /* we have already verified that offset==0 for MSA file */ eslx_msafile_Close(ascii->afp); if (ascii->msa != NULL) esl_msa_Destroy(ascii->msa); ascii->afp = NULL; ascii->msa = NULL; ascii->idx = 0; /* we know we successfully opened it the first time, so a failure to reopen is an exception, not a user-reportable normal error. ENOTFOUND is the only normal error; EFORMAT error can't occur because we know the format and don't use autodetection. */ status = eslx_msafile_Open(NULL, sqfp->filename, NULL, sqfp->format, NULL, &(ascii->afp)); if (status == eslENOTFOUND) ESL_EXCEPTION(eslENOTFOUND, "failed to reopen alignment file"); else if (status != eslOK) return status; } else/* normal case: unaligned sequence file */ { if (fseeko(ascii->fp, offset, SEEK_SET) != 0) ESL_EXCEPTION(eslESYS, "fseeko() failed"); ascii->currpl = -1; ascii->curbpl = -1; ascii->prvrpl = -1; ascii->prvbpl = -1; ascii->linenumber = (offset == 0) ? 1 : -1; /* -1 is "unknown" */ ascii->L = -1; ascii->mpos = ascii->mn;/* this forces loadbuf to load new data */ if ((status = loadbuf(sqfp)) != eslOK) return status; } return eslOK; } /* Function: sqascii_Close() * Synopsis: Close a sequence file. * * Purpose: Closes an open . * * Returns: (void). */ static void sqascii_Close(ESL_SQFILE *sqfp) { ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; #ifdef HAVE_POPEN if (ascii->do_gzip) pclose(ascii->fp); else #endif if (! ascii->do_stdin && ascii->fp != NULL) fclose(ascii->fp); if (ascii->ssifile != NULL) free(ascii->ssifile); if (ascii->mem != NULL) free(ascii->mem); if (ascii->balloc > 0) free(ascii->buf); #ifdef eslAUGMENT_SSI if (ascii->ssi != NULL) esl_ssi_Close(ascii->ssi); #endif #ifdef eslAUGMENT_MSA if (ascii->afp != NULL) eslx_msafile_Close(ascii->afp); if (ascii->msa != NULL) esl_msa_Destroy(ascii->msa); #endif /*eslAUGMENT_MSA*/ ascii->do_gzip = FALSE; ascii->do_stdin = FALSE; ascii->fp = NULL; ascii->ssifile = NULL; ascii->mem = NULL; ascii->balloc = 0; ascii->buf = NULL; ascii->ssi = NULL; ascii->afp = NULL; ascii->msa = NULL; return; } /*------------------- ESL_SQFILE open/close -----------------------*/ /***************************************************************** *# 2. An object, in digital mode [with ] *****************************************************************/ #ifdef eslAUGMENT_ALPHABET /* Function: sqascii_SetDigital() * Synopsis: Set an open to read in digital mode. * * Purpose: Given an that's already been opened, * configure it to expect subsequent input to conform * to the digital alphabet . * * Calling is * equivalent to . The two-step * version is useful when you need a * call in between, guessing * the file's alphabet in text mode before you set it to * digital mode. * * Returns: on success. */ static int sqascii_SetDigital(ESL_SQFILE *sqfp, const ESL_ALPHABET *abc) { int status = eslOK; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (!esl_sqio_IsAlignment(sqfp->format)) { switch (sqfp->format) { case eslSQFILE_EMBL: inmap_embl(sqfp, abc->inmap); break; case eslSQFILE_UNIPROT: inmap_embl(sqfp, abc->inmap); break; case eslSQFILE_GENBANK: inmap_genbank(sqfp, abc->inmap); break; case eslSQFILE_DDBJ: inmap_genbank(sqfp, abc->inmap); break; case eslSQFILE_FASTA: inmap_fasta(sqfp, abc->inmap); break; case eslSQFILE_DAEMON: inmap_daemon(sqfp, abc->inmap); break; default: status = eslEFORMAT; break; } } else { #ifdef eslAUGMENT_MSA eslx_msafile_SetDigital(ascii->afp, abc); #else status = eslEFORMAT; #endif } return status; } /* Function: sqascii_GuessAlphabet() * Synopsis: Guess the alphabet of an open . * * Purpose: After opening , attempt to guess what alphabet * its sequences are in, by inspecting the first sequence * in the file, and return this alphabet type in <*ret_type>. * * Returns: on success, and <*ret_type> is set to , * , or . * * Returns and sets <*ret_type> to * if the first sequence (or alignment) * in the file contains no more than ten residues total, * or if its alphabet cannot be guessed (i.e. it contains * IUPAC degeneracy codes, but no amino acid specific * residues). * * Returns if a parse error is encountered in * trying to read the sequence file. errbuf> is set * to a useful error message if this occurs, * linenumber> is the line on which the error * occurred, and <*ret_type> is set to . * * Returns and sets <*ret_type> to * if the file appears to be empty. * * Throws: on allocation error; * on unimaginable internal errors. */ static int sqascii_GuessAlphabet(ESL_SQFILE *sqfp, int *ret_type) { ESL_SQ *sq = NULL; int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; /* Special case: for MSA files, hand this off to msafile_GuessAlphabet. */ #ifdef eslAUGMENT_MSA if (esl_sqio_IsAlignment(sqfp->format)) return eslx_msafile_GuessAlphabet(ascii->afp, ret_type); #endif /* set the sqfp to record; we'll rewind afterwards and use the recording */ ascii->is_recording = TRUE; if ((sq = esl_sq_Create()) == NULL) { status = eslEMEM; goto ERROR; } status = sqascii_ReadWindow(sqfp, 0, 4000, sq); if (status == eslEOF) { status = eslENODATA; goto ERROR; } else if (status != eslOK) goto ERROR; if ((status = esl_sq_GuessAlphabet(sq, ret_type)) != eslOK) goto ERROR; /* reset the sqfp, so it uses the recording next */ ascii->mpos = 0; ascii->is_recording = FALSE; if ((status = loadbuf(sqfp)) != eslOK) ESL_EXCEPTION(status, "buffer load failed, but shouldn't have"); esl_sq_Destroy(sq); return eslOK; ERROR: esl_sq_Destroy(sq); *ret_type = eslUNKNOWN; return status; } #endif /*eslAUGMENT_ALPHABET*/ /*-------------- end, digital mode ESL_SQFILE -------------------*/ /***************************************************************** *# 3. Miscellaneous routines *****************************************************************/ /* Function: sqascii_IsRewindable() * Synopsis: Return if can be rewound. * * Purpose: Returns if can be rewound (positioned * to an offset of zero), in order to read it a second * time. */ static int sqascii_IsRewindable(const ESL_SQFILE *sqfp) { if (sqfp->data.ascii.do_gzip == TRUE) return FALSE; if (sqfp->data.ascii.do_stdin == TRUE) return FALSE; return TRUE; } /* Function: sqascii_GetError() * Synopsis: Return if can be rewound. * * Purpose: Returns if can be rewound (positioned * to an offset of zero), in order to read it a second * time. */ static const char * sqascii_GetError(const ESL_SQFILE *sqfp) { return sqfp->data.ascii.errbuf; } /***************************************************************** *# 4. Sequence reading (sequential) *****************************************************************/ /* Function: sqascii_Read() * Synopsis: Read the next sequence from a file. * * Purpose: Reads the next sequence from open sequence file into * . Caller provides an allocated and initialized , which * will be internally reallocated if its space is insufficient. * * Returns: on success; the new sequence is stored in . * * Returns when there is no sequence left in the * file (including first attempt to read an empty file). * * Returns if there's a problem with the format, * such as an illegal character; the line number that the parse * error occurs on is in linenumber>, and an informative * error message is placed in errbuf>. * * Throws: on allocation failure; * on internal error. */ static int sqascii_Read(ESL_SQFILE *sqfp, ESL_SQ *sq) { int status; int64_t epos; int64_t n; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; #ifdef eslAUGMENT_MSA if (esl_sqio_IsAlignment(sqfp->format)) { ESL_SQ *tmpsq = NULL; if (ascii->msa == NULL || ascii->idx >= ascii->msa->nseq) { /* we need to load a new alignment? */ esl_msa_Destroy(ascii->msa); status = eslx_msafile_Read(ascii->afp, &(ascii->msa)); if (status == eslEFORMAT) { /* oops, a parse error; upload the error info from afp to sqfp */ ascii->linenumber = ascii->afp->linenumber; strcpy(ascii->errbuf, ascii->afp->errmsg); /* errbufs same size! */ return eslEFORMAT; } if (status != eslOK) return status; ascii->idx = 0; } /* grab next seq from alignment */ /* this is inefficient; it goes via a temporarily allocated copy of the sequence */ status = esl_sq_FetchFromMSA(ascii->msa, ascii->idx, &tmpsq); esl_sq_GrowTo(sq, tmpsq->n); esl_sq_Copy(tmpsq, sq); esl_sq_Destroy(tmpsq); ascii->idx++; sq->start = 1; sq->end = sq->n; sq->C = 0; sq->W = sq->n; sq->L = sq->n; return eslOK; } #endif /* Main case: read next seq from sqfp's stream */ if (ascii->nc == 0) return eslEOF; if ((status = ascii->parse_header(sqfp, sq)) != eslOK) return status; /* EOF, EFORMAT */ do { if ((status = seebuf(sqfp, -1, &n, &epos)) == eslEFORMAT) return status; if (esl_sq_GrowTo(sq, sq->n + n) != eslOK) return eslEMEM; addbuf(sqfp, sq, n); ascii->L += n; sq->eoff = ascii->boff + epos - 1; if (status == eslEOD) break; } while ((status = loadbuf(sqfp)) == eslOK); if (status == eslEOF) { if (! ascii->eof_is_ok) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Unexpected EOF; file truncated?"); if ((status = ascii->parse_end(sqfp, sq)) != eslOK) return status; } else if (status == eslEOD) { ascii->bpos = epos; if ((status = ascii->parse_end(sqfp, sq)) != eslOK) return status; } else if (status != eslOK) return status; if (sq->dsq != NULL) sq->dsq[sq->n+1] = eslDSQ_SENTINEL; else sq->seq[sq->n] = '\0'; sq->start = 1; sq->end = sq->n; sq->C = 0; sq->W = sq->n; sq->L = sq->n; return eslOK; } /* Function: sqascii_ReadInfo() * Synopsis: Read sequence info, but not the sequence itself. * * Purpose: Read the next sequence from open sequence file , * but don't store the sequence (or secondary structure). * Upon successful return, holds all the available * information about the sequence -- its name, accession, * description, and overall length L>. * * This is useful for indexing sequence files, where * individual sequences might be ginormous, and we'd rather * avoid reading complete seqs into memory. * * Returns: on success. */ static int sqascii_ReadInfo(ESL_SQFILE *sqfp, ESL_SQ *sq) { int status; int64_t epos; int64_t n; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; #ifdef eslAUGMENT_MSA if (esl_sqio_IsAlignment(sqfp->format)) { ESL_SQ *tmpsq = NULL; if (ascii->msa == NULL || ascii->idx >= ascii->msa->nseq) { /* we need to load a new alignment? */ esl_msa_Destroy(ascii->msa); status = eslx_msafile_Read(ascii->afp, &(ascii->msa)); if (status == eslEFORMAT) { /* oops, a parse error; upload the error info from afp to sqfp */ ascii->linenumber = ascii->afp->linenumber; strcpy(ascii->errbuf, ascii->afp->errmsg); /* errbufs same size! */ return eslEFORMAT; } if (status != eslOK) return status; ascii->idx = 0; } /* grab next seq from alignment */ /* this is inefficient; it goes via a temporarily allocated copy of the sequence */ status = esl_sq_FetchFromMSA(ascii->msa, ascii->idx, &tmpsq); if (tmpsq->dsq != NULL) tmpsq->dsq[1] = eslDSQ_SENTINEL; else tmpsq->seq[0] = '\0'; esl_sq_Copy(tmpsq, sq); esl_sq_Destroy(tmpsq); ascii->idx++; if (sq->dsq != NULL) sq->dsq[1] = eslDSQ_SENTINEL; else sq->seq[0] = '\0'; if (sq->ss != NULL) { free(sq->ss); sq->ss = NULL; } sq->n = 0; sq->start = 0; sq->end = 0; sq->C = 0; sq->W = 0; return eslOK; } #endif if (ascii->nc == 0) return eslEOF; if ((status = ascii->parse_header(sqfp, sq)) != eslOK) return status; /* EOF, EFORMAT */ ascii->L = 0; do { status = seebuf(sqfp, -1, &n, &epos); ascii->L += n; sq->eoff = ascii->boff + epos - 1; if (status == eslEFORMAT) return status; if (status == eslEOD) break; } while ((status = loadbuf(sqfp)) == eslOK); if (status == eslEOF) { if (! ascii->eof_is_ok) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Unexpected EOF; file truncated?"); } else if (status == eslEOD) { ascii->bpos = epos; if ((status = ascii->parse_end(sqfp, sq)) != eslOK) return status; } else if (status != eslOK) return status; sq->L = ascii->L; /* Set coord system for an info-only ESL_SQ */ if (sq->dsq != NULL) sq->dsq[1] = eslDSQ_SENTINEL; else sq->seq[0] = '\0'; if (sq->ss != NULL) { free(sq->ss); sq->ss = NULL; } sq->n = 0; sq->start = 0; sq->end = 0; sq->C = 0; sq->W = 0; return eslOK; } /* Function: sqascii_ReadSequence() * Synopsis: Read the next sequence from a file. * * Purpose: Reads the next sequence from open sequence file into * . Caller provides an allocated and initialized , which * will be internally reallocated if its space is insufficient. * * Returns: on success; the new sequence is stored in . * * Returns when there is no sequence left in the * file (including first attempt to read an empty file). * * Returns if there's a problem with the format, * such as an illegal character; the line number that the parse * error occurs on is in linenumber>, and an informative * error message is placed in errbuf>. * * Throws: on allocation failure; * on internal error. */ static int sqascii_ReadSequence(ESL_SQFILE *sqfp, ESL_SQ *sq) { int status; int64_t epos; int64_t n; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; #ifdef eslAUGMENT_MSA if (esl_sqio_IsAlignment(sqfp->format)) { ESL_SQ *tmpsq = NULL; if (ascii->msa == NULL || ascii->idx >= ascii->msa->nseq) { /* we need to load a new alignment? */ esl_msa_Destroy(ascii->msa); status = eslx_msafile_Read(ascii->afp, &(ascii->msa)); if (status == eslEFORMAT) { /* oops, a parse error; upload the error info from afp to sqfp */ ascii->linenumber = ascii->afp->linenumber; strcpy(ascii->errbuf, ascii->afp->errmsg); /* errbufs same size! */ return eslEFORMAT; } if (status != eslOK) return status; ascii->idx = 0; } /* grab next seq from alignment */ /* this is inefficient; it goes via a temporarily allocated copy of the sequence */ status = esl_sq_FetchFromMSA(ascii->msa, ascii->idx, &tmpsq); esl_sq_GrowTo(sq, tmpsq->n); esl_sq_Copy(tmpsq, sq); esl_sq_Destroy(tmpsq); ascii->idx++; sq->start = 1; sq->end = sq->n; sq->C = 0; sq->W = sq->n; sq->L = sq->n; return eslOK; } #endif /* Main case: read next seq from sqfp's stream */ if (ascii->nc == 0) return eslEOF; if ((status = ascii->skip_header(sqfp, sq)) != eslOK) return status; /* EOF, EFORMAT */ do { if ((status = seebuf(sqfp, -1, &n, &epos)) == eslEFORMAT) return status; if (esl_sq_GrowTo(sq, sq->n + n) != eslOK) return eslEMEM; addbuf(sqfp, sq, n); ascii->L += n; sq->eoff = ascii->boff + epos - 1; if (status == eslEOD) break; } while ((status = loadbuf(sqfp)) == eslOK); if (status == eslEOF) { if (! ascii->eof_is_ok) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Unexpected EOF; file truncated?"); if ((status = ascii->parse_end(sqfp, sq)) != eslOK) return status; } else if (status == eslEOD) { ascii->bpos = epos; if ((status = ascii->parse_end(sqfp, sq)) != eslOK) return status; } else if (status != eslOK) return status; if (sq->dsq != NULL) sq->dsq[sq->n+1] = eslDSQ_SENTINEL; else sq->seq[sq->n] = '\0'; sq->start = 1; sq->end = sq->n; sq->C = 0; sq->W = sq->n; sq->L = sq->n; return eslOK; } /* Function: sqascii_ReadWindow() * Synopsis: Read next window of sequence. * * Purpose: Read a next window of residues from open file , * keeping residues from the previous window as * context, and keeping previous annotation in the * as before. * * If this is the first window of a new sequence record, * is ignored (there's no previous context yet), and * the annotation fields of the (name, accession, and * description) are initialized by reading the sequence * record's header. This is the only time the annotation * fields are initialized. * * On return, dsq[]> contains the window and its * context; residues <1..sq->C> are the previous context, * and residues C+1..sq->n> are the new window. The * start and end coordinates of the whole * (including context) in the original source sequence are * start..sq->end>. (Or, for text mode sequences, * seq[0..sq->C-1,sq->C..sq->n-1]>, while and * coords are still <1..L>.) * * When a sequence record is completed and no more data * remain, is returned, with an ``info'' * structure (containing the annotation and the total * sequence length , but no sequence). (The total * sequence length is unknown in until this * return.) * * The caller may then do one of two things before calling * again; it can reset the sequence * with to continue reading the next * sequence in the file, or it can set a negative as a * signal to read windows from the reverse complement * (Crick) strand. Reverse complement reading only works * for nucleic acid sequence. * * If you read the reverse complement strand, you must read * the whole thing, calling with * negative windows until is returned again * with an empty (info-only) structure. When that * is reached, the is repositioned at the * start of the next sequence record; the caller should now * the , and the next * call must have a positive , corresponding to starting * to read the Watson strand of the next sequence. * * Note that the interface is designed for * an idiom of sequential reading of complete sequences in * overlapping windows, possibly on both strands; if you * want more freedom to move around in the sequence * grabbing windows in another order, you can use the * interface. * * Reading the reverse complement strand requires file * repositioning, so it will not work on non-repositionable * streams like gzipped files or a stdin pipe. Moreover, * for reverse complement input to be efficient, the * sequence file should have consistent line lengths, * suitable for SSI's fast subsequence indexing. * * Returns: on success; now contains next window of * sequence, with at least 1 new residue. The number * of new residues is W>; C> residues are * saved from the previous window. Caller may now * process residues dsq[sq->C+1]..sq->dsq[sq->n]>. * * if no new residues were read for this sequence * and strand, and now contains an empty info-only * structure (annotation and are valid). Before calling * again, caller will either want * to make negative (to start reading the Crick strand * of the current sequence), or it will want to reset the * (with ) to go on the next sequence. * * if we've already returned before to * signal the end of the previous seq record, and moreover, * there's no more sequence records in the file. * * if an invalid residue is found in the * sequence, or if you attempt to take the reverse * complement of a sequence that can't be reverse * complemented. * * Throws: if you try to read a reverse window before * you've read forward strand. * * if something goes awry internally in the * coordinate system. * * on allocation error. */ static int sqascii_ReadWindow(ESL_SQFILE *sqfp, int C, int W, ESL_SQ *sq) { int actual_start; int64_t nres; int64_t line; off_t offset; int status; ESL_SQ *tmpsq = NULL; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; #ifdef eslAUGMENT_MSA if (esl_sqio_IsAlignment(sqfp->format)) { /* special: if we're initializing a revcomp window read, back ascii->idx up one */ if (W < 0 && sq->start == 0) ascii->idx--; if (ascii->msa == NULL || ascii->idx >= ascii->msa->nseq) { /* need new alignment? */ esl_msa_Destroy(ascii->msa); status = eslx_msafile_Read(ascii->afp, &(ascii->msa)); if (status == eslEFORMAT) { /* oops, a parse error; upload the error info from afp to sqfp */ ascii->linenumber = ascii->afp->linenumber; strcpy(ascii->errbuf, ascii->afp->errmsg); /* errbufs same size! */ return eslEFORMAT; } else if (status != eslOK) goto ERROR; ascii->idx = 0; } /* grab appropriate seq from alignment into tmpsq */ if ((status = esl_sq_FetchFromMSA(ascii->msa, ascii->idx, &tmpsq)) != eslOK) goto ERROR; /*by default, tmpsq is an ascii sequence, convert it to digital if that's what sq is*/ if (sq->seq == NULL) esl_sq_Digitize(sq->abc, tmpsq); /* Figure out tmpsq coords we'll put in sq */ if (W > 0) {/* forward strand */ sq->C = ESL_MIN(sq->n, C); sq->start = sq->end - sq->C + 1; sq->end = ESL_MIN(tmpsq->L, sq->end + W); sq->n = sq->end - sq->start + 1; sq->W = sq->n - sq->C; } else {/* reverse strand */ if (sq->L == -1) ESL_XEXCEPTION(eslESYNTAX, "Can't read reverse complement until you've read forward strand"); sq->C = ESL_MIN(sq->n, sq->end + C - 1); sq->end = (sq->start == 0 ? sq->L : sq->end + sq->C - 1); sq->start = ESL_MAX(1, sq->end + W - sq->C - 1); sq->n = sq->end - sq->start + 1; sq->W = sq->n - sq->C; } if (sq->W == 0)/* no new sequence? that's the EOD case */ { sq->start = 0; sq->end = 0; sq->C = 0; sq->W = 0; sq->n = 0; sq->L = tmpsq->L; if (sq->dsq != NULL) sq->dsq[1] = eslDSQ_SENTINEL; else sq->seq[0] = '\0'; ascii->idx++; esl_sq_Destroy(tmpsq); return eslEOD; } /* Copy the sequence frag. */ if (tmpsq->ss != NULL && sq->ss == NULL) ESL_ALLOC(sq->ss, sizeof(char) * (sq->salloc)); /* this *must* be for salloc */ esl_sq_GrowTo(sq, sq->n); if (tmpsq->seq != NULL) {/* text mode */ memcpy(sq->seq, tmpsq->seq + sq->start - 1, sizeof(char) * sq->n); sq->seq[sq->n] = '\0'; if (tmpsq->ss != NULL) { memcpy(sq->ss, tmpsq->ss + sq->start - 1, sizeof(char) * sq->n); sq->ss[sq->n] = '\0'; } } else { memcpy(sq->dsq + 1, tmpsq->dsq + sq->start, sizeof(ESL_DSQ) * sq->n); sq->dsq[sq->n+1] = eslDSQ_SENTINEL; if (tmpsq->ss != NULL) { memcpy(sq->ss + 1, tmpsq->ss + sq->start, sizeof(char) * sq->n); sq->ss[sq->n+1] = '\0'; } } if (W < 0 && (status = esl_sq_ReverseComplement(sq)) != eslOK) ESL_XFAIL(eslEINVAL, ascii->errbuf, "Can't reverse complement that sequence window"); /* Copy annotation */ if ((status = esl_sq_SetName (sq, tmpsq->name)) != eslOK) goto ERROR; if ((status = esl_sq_SetSource (sq, tmpsq->name)) != eslOK) goto ERROR; if ((status = esl_sq_SetAccession(sq, tmpsq->acc)) != eslOK) goto ERROR; if ((status = esl_sq_SetDesc (sq, tmpsq->desc)) != eslOK) goto ERROR; sq->roff = -1; sq->doff = -1; sq->eoff = -1; sq->hoff = -1; esl_sq_Destroy(tmpsq); return eslOK; } #endif /* we've completely handled the alignment file case above. */ /* Now for the normal case: we're reading a normal unaligned seq file, not an alignment. */ /* Negative W indicates reverse complement direction */ if (W < 0) { if (sq->L == -1) ESL_EXCEPTION(eslESYNTAX, "Can't read reverse complement until you've read forward strand"); if (sq->end == 1) { /* last end == 1 means last window was the final one on reverse strand, * so we're EOD; jump back to last forward position. */ if (ascii->bookmark_offset > 0) { if (esl_sqfile_Position(sqfp, ascii->bookmark_offset) != eslOK) ESL_EXCEPTION(eslECORRUPT, "Failed to reposition seq file at last forward bookmark"); ascii->linenumber = ascii->bookmark_linenum; } else { ascii->nc = 0;/* signals EOF */ } ascii->bookmark_offset = 0; ascii->bookmark_linenum = 0; sq->start = 0; sq->end = 0; sq->C = 0; sq->W = 0; sq->n = 0; /* sq->L stays as it is */ if (sq->dsq != NULL) sq->dsq[1] = eslDSQ_SENTINEL; else sq->seq[0] = '\0'; return eslEOD; } /* If s == 0, we haven't read any reverse windows yet; * init reading from sq->L */ W = -W; if (sq->start == 0) { sq->start = ESL_MAX(1, (sq->L - W + 1)); sq->end = sq->L; sq->C = 0; sq->W = sq->end - sq->start + 1; ascii->curbpl = -1; ascii->currpl = -1; ascii->prvbpl = -1; ascii->prvrpl = -1; ascii->linenumber = -1; ascii->L = -1; } else { /* Else, we're continuing to next window; prv was .. */ sq->C = ESL_MIN(C, sq->L - sq->end + 1); /* based on prev window's end */ sq->end = sq->end + sq->C - 1; /* also based on prev end */ sq->start = ESL_MAX(1, (sq->end - W - sq->C + 1)); sq->W = sq->end - sq->start + 1 - sq->C; } /* Now position for a subseq fetch of on fwd strand, using SSI offset calc */ if (sq->doff == 0) ESL_EXCEPTION(eslECORRUPT, "can't happen: sq didn't store data offset"); if (ascii->bpl == 0 || ascii->rpl == 0) /* no help; brute force resolution. */ { offset = sq->doff; actual_start = 1; } else if (ascii->bpl == ascii->rpl+1) /* residue resolution */ { line = (sq->start-1) / ascii->rpl; /* data line #0.. that is on */ offset = sq->doff + line * ascii->bpl + (sq->start-1)%ascii->rpl; actual_start = sq->start; } else/* line resolution */ { line = (sq->start-1) / ascii->rpl; /* data line #0.. that is on */ offset = sq->doff + line * ascii->bpl; actual_start = 1 + line * ascii->rpl; } if (esl_sqfile_Position(sqfp, offset) != eslOK) ESL_EXCEPTION(eslECORRUPT, "Failed to reposition seq file for reverse window read"); /* grab the subseq and rev comp it */ if ((status = esl_sq_GrowTo(sq, sq->C+sq->W)) != eslOK) return status; sq->n = 0; status = read_nres(sqfp, sq, (sq->start - actual_start), (sq->end - sq->start + 1), &nres); if (status != eslOK || nres < (sq->end - sq->start + 1)) ESL_EXCEPTION(eslECORRUPT, "Failed to extract %d..%d", sq->start, sq->end); status = esl_sq_ReverseComplement(sq); if (status == eslEINVAL) ESL_FAIL(eslEINVAL, ascii->errbuf, "can't reverse complement that seq - it's not DNA/RNA"); else if (status != eslOK) return status; return eslOK; } /* Else, we're reading the forward strand */ else { /* sq->start == 0 means we haven't read any windows on this sequence yet... * it's a new record, and we need to initialize with the header and * the first window. This is the only case that we're allowed to return * EOF from. */ if (sq->start == 0) { if (ascii->nc == 0) return eslEOF; if ((status = ascii->parse_header(sqfp, sq)) != eslOK) return status; /* EOF, EFORMAT */ sq->start = 1; sq->C = 0;/* no context in first window */ sq->L = -1;/* won't be known 'til EOD. */ ascii->L = 0;/* init to 0, so we can count residues as we go */ esl_sq_SetSource(sq, sq->name); /* the buf> is now positioned at the start of seq data */ /* ascii->linenumber is ok where it is */ /* the header_*() routines initialized rpl,bpl bookkeeping at start of seq line, * and also sq->doff,roff. */ } else { /* else we're reading a window other than first; slide context over. */ sq->C = ESL_MIN(C, sq->n); /* if the case where the window is smaller than the context and the * context is not full, it is not necessary to move the context part * of the sequence that has been read in. */ if (sq->C >= C) { /* now handle the case where the context is full */ if (sq->seq != NULL) memmove(sq->seq, sq->seq + sq->n - sq->C, sq->C); else memmove(sq->dsq+1, sq->dsq + sq->n - sq->C + 1, sq->C); sq->start = ascii->L - sq->C + 1; sq->n = C; } } if ((status = esl_sq_GrowTo(sq, C+W)) != eslOK) return status; /* EMEM */ status = read_nres(sqfp, sq, 0, W, &nres); ascii->L += nres; if (status == eslEOD) { /* Forward strand is done. 0 residues were read. Return eslEOD and an empty (info) . */ if ((status = ascii->parse_end(sqfp, sq)) != eslOK) return status; sq->start = 0; sq->end = 0; sq->C = 0; sq->W = 0; sq->L = ascii->L; sq->n = 0; if (ascii->nc > 0) { ascii->bookmark_offset = ascii->boff+ascii->bpos; /* remember where the next seq starts. */ //ascii->bookmark_linenum = ascii->bookmark_linenum; } else { ascii->bookmark_offset = 0; /* signals for EOF, no more seqs */ ascii->bookmark_linenum = 0; } if (sq->dsq != NULL) sq->dsq[1] = eslDSQ_SENTINEL; /* erase the saved context */ else sq->seq[0] = '\0'; return eslEOD; } else if (status == eslOK) { /* Forward strand is still in progress. <= W residues were read. Return eslOK. */ sq->end = sq->start + sq->C + nres - 1; sq->W = nres; return eslOK; } else return status;/* EFORMAT,EMEM */ } /*NOTREACHED*/ return eslOK; ERROR: if (tmpsq != NULL) esl_sq_Destroy(tmpsq); return status; } /* Function: sqascii_ReadBlock() * Synopsis: Read the next block of sequences from a file. * * Purpose: Reads a block of sequences from open sequence file into * . * * In the case that is false, the sequences are * expected to be protein - individual sequences won't be long * so read them in one-whole-sequence at a time. If is set * to a number > 0 read sequences, up to at most * MAX_RESIDUE_COUNT residues. * * If is true, the sequences are expected to be DNA. * Because sequences in a DNA database can exceed MAX_RESIDUE_COUNT, * this function uses ReadWindow to read chunks of sequence no * larger than , and must allow for the possibility that a * request will be made to continue reading a partly-read * sequence. This case also respects the limit. * * Returns: on success; the new sequence is stored in . * * Returns when there is no sequence left in the * file (including first attempt to read an empty file). * * Returns if there's a problem with the format, * such as an illegal character; the line number that the parse * error occurs on is in linenumber>, and an informative * error message is placed in errbuf>. * * Throws: on allocation failure; * on internal error. */ static int sqascii_ReadBlock(ESL_SQFILE *sqfp, ESL_SQ_BLOCK *sqBlock, int max_residues, int max_sequences, int long_target) { int i = 0; int size = 0; int status = eslOK; ESL_SQ *tmpsq = NULL; sqBlock->count = 0; if (max_sequences < 1 || max_sequences > sqBlock->listSize) max_sequences = sqBlock->listSize; if (max_residues < 1) max_residues = MAX_RESIDUE_COUNT; if ( !long_target ) { /* in these cases, an individual sequence won't ever be really long, so just read in a sequence at a time */ for (i = 0; i < max_sequences && size < MAX_RESIDUE_COUNT; ++i) { status = sqascii_Read(sqfp, sqBlock->list + i); if (status != eslOK) break; size += sqBlock->list[i].n; ++sqBlock->count; } } else { /* DNA, not an alignment. Might be really long sequences */ tmpsq = esl_sq_Create(); //if complete flag is set to FALSE, then the prior block must have ended with a window that was a possibly //incomplete part of it's full sequence. Read another overlapping window. if (! sqBlock->complete ) { //overloading C as indicator of how big C should be for this window reading action status = sqascii_ReadWindow(sqfp, sqBlock->list->C, max_residues, sqBlock->list); if (status == eslOK) { sqBlock->count = i = 1; size = sqBlock->list->n - sqBlock->list->C; sqBlock->list->L = sqfp->data.ascii.L; if (size == max_residues) { // Filled the block with a single very long window. sqBlock->complete = FALSE; // default value, unless overridden below status = skip_whitespace(sqfp); if ( status != eslOK ) { // either EOD or end of buffer (EOF) was reached before the next character was seen sqBlock->complete = TRUE; status = eslOK; } if(tmpsq != NULL) esl_sq_Destroy(tmpsq); return status; } else { // Burn off EOD (see notes for similar entry ~25 lines below), then go fetch the next sequence esl_sq_Reuse(tmpsq); tmpsq->start = sqBlock->list->start ; tmpsq->C = 0; status = sqascii_ReadWindow(sqfp, 0, max_residues, tmpsq); if (status != eslEOD) { if(tmpsq != NULL) esl_sq_Destroy(tmpsq); return status; //surprising } //sqBlock->list->L = tmpsq->L; } } else if (status == eslEOD) { // turns out there isn't any more of the sequence to read, after all } else { if(tmpsq != NULL) esl_sq_Destroy(tmpsq); return status; } } // otherwise, just start at the beginning for ( ; i < max_sequences && size < max_residues; ++i) { esl_sq_Reuse(tmpsq); esl_sq_Reuse(sqBlock->list + i); status = sqascii_ReadWindow(sqfp, 0, max_residues , sqBlock->list + i); if (status != eslOK && status != eslEOD) break; /* end of sequences (eslEOF), or we read an empty seq (eslEOD) or error (other) */ size += sqBlock->list[i].n - sqBlock->list[i].C; sqBlock->list[i].L = sqfp->data.ascii.L; ++(sqBlock->count); if (size >= max_residues) { // a full window worth of sequence has been read; did we reach the end of the final sequence in the block? sqBlock->complete = FALSE; // default value, unless overridden below status = skip_whitespace(sqfp); if ( status != eslOK ) { // either EOD or end of buffer (EOF) was reached before the next character was seen sqBlock->complete = TRUE; status = eslOK; } if(tmpsq != NULL) esl_sq_Destroy(tmpsq); return status; } else if(status == eslEOD) { /* We've read an empty sequence of length 0, rare, but * possible, and we need to be able to handle it * gracefully. Ensure L is 0, set status to eslOK and move * on, we've already incremented sqBlock->count by 1 * above. This means our block may contain zero-length * sequences when we return (that is, we still add these * seqs onto the block instead of skipping them altogether). */ sqBlock->list[i].L = 0; /* actually, this should already be 0... */ status = eslOK; } else { /* Sequence finished, but haven't yet reached max_residues. Need to burn off the EOD value that will be returned by the next ReadWindow call. Can just use a tmp sq, after setting a couple values ReadWindow needs to see for correct processing. */ esl_sq_Reuse(tmpsq); tmpsq->start = sqBlock->list[i].start ; tmpsq->C = 0; status = sqascii_ReadWindow(sqfp, 0, max_residues, tmpsq); if (status != eslEOD) { if(tmpsq != NULL) esl_sq_Destroy(tmpsq); return status; //surprising } //sqBlock->list[i].L = tmpsq->L; status = eslOK; } } } /* EOF will be returned only in the case were no sequences were read */ if (status == eslEOF && i > 0) status = eslOK; sqBlock->complete = TRUE; if(tmpsq != NULL) esl_sq_Destroy(tmpsq); return status; } /* Function: sqascii_Echo() * Synopsis: Echo a sequence's record onto output stream. * * Purpose: Given a complete that we have read by some means * from an open ; echo that sequence's record * onto the output stream . * * This allows records to be regurgitated exactly as they * appear, rather than writing the subset of information * stored in an . in the miniapps uses * this, for example. * * Because this relies on repositioning the , it * cannot be called on non-positionable streams (stdin or * gzipped files). Because it relies on the sequence lying * in a contiguous sequence of bytes in the file, it cannot * be called on a sequence in a multiple alignment file. * Trying to do so throws an exception. * * Returns: on success. * * Throws: if isn't a repositionable sequence file. * if we run out of data, probably from bad offsets * on allocation failure. * on system call failures. * * */ static int sqascii_Echo(ESL_SQFILE *sqfp, const ESL_SQ *sq, FILE *ofp) { int status; int64_t save_linenumber; int save_currpl; int save_curbpl; int save_prvrpl; int save_prvbpl; int64_t save_L; int n; int nwritten; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (ascii->do_stdin) ESL_EXCEPTION(eslEINVAL, "can't Echo() a sequence from standard input"); if (ascii->do_gzip) ESL_EXCEPTION(eslEINVAL, "can't Echo() a sequence from a gzipped file"); if (esl_sqio_IsAlignment(sqfp->format)) ESL_EXCEPTION(eslEINVAL, "can't Echo() a sequence from an alignment file"); if (sq->roff == -1 || sq->eoff == -1) ESL_EXCEPTION(eslEINVAL, "can't Echo() a sequence without disk offset info"); save_linenumber = ascii->linenumber; save_currpl = ascii->currpl; save_curbpl = ascii->curbpl; save_prvrpl = ascii->prvrpl; save_prvbpl = ascii->prvbpl; save_L = ascii->L; status = esl_sqfile_Position(sqfp, sq->roff); if (status == eslEOF) ESL_EXCEPTION(eslECORRUPT, "repositioning failed; bad offset?"); else if (status != eslOK) return status; while (ascii->boff + ascii->nc <= sq->eoff) { if (fwrite(ascii->buf, sizeof(char), ascii->nc, ofp) != ascii->nc) ESL_EXCEPTION(eslESYS, "fwrite() failed"); if (loadbuf(sqfp) != eslOK) ESL_EXCEPTION(eslECORRUPT, "repositioning failed; bad offset?"); } n = sq->eoff - ascii->boff + 1; nwritten = fwrite(ascii->buf, sizeof(char), n, ofp); if (nwritten != n) ESL_EXCEPTION(eslESYS, "fwrite() failed"); status = esl_sqfile_Position(sqfp, sq->roff); if (status == eslEOF) ESL_EXCEPTION(eslECORRUPT, "repositioning failed; bad offset?"); else if (status != eslOK) return status; ascii->linenumber = save_linenumber; ascii->currpl = save_currpl; ascii->curbpl = save_curbpl; ascii->prvrpl = save_prvrpl; ascii->prvbpl = save_prvbpl; ascii->L = save_L; return eslOK; } /*------------------ end, sequential sequence input -------------*/ /***************************************************************** *# 5. Sequence/subsequence fetching, random access [with ] *****************************************************************/ #ifdef eslAUGMENT_SSI /* Function: sqascii_OpenSSI() * Synopsis: Opens an SSI index associated with a sequence file. * * Purpose: Opens an SSI index file associated with the already open * sequence file . If successful, the necessary * information about the open SSI file is stored internally * in . * * The SSI index file name is determined in one of two * ways, depending on whether a non- * is provided. * * If is , the default for * constructing the SSI filename from the sequence * filename, by using exactly the same path (if any) for * the sequence filename, and appending the suffix <.ssi>. * For example, the SSI index for is , for * <./foo.fa> is <./foo.fa.ssi>, and for * is . * * If is , this exact fully * qualified path is used as the SSI file name. * * Returns: on success, and ssi> is now internally * valid. * * if no SSI index file is found; * if it's found, but appears to be in incorrect format; * if the SSI file uses 64-bit offsets but we're on * a system that doesn't support 64-bit file offsets. * * Throws: if the open sequence file doesn't * correspond to a normal sequence flatfile -- we can't * random access in .gz compressed files, standard input, * or multiple alignment files that we're reading * sequentially. * * Throws on allocation error. */ static int sqascii_OpenSSI(ESL_SQFILE *sqfp, const char *ssifile_hint) { int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (ascii->do_gzip) ESL_EXCEPTION(eslEINVAL, "can't open an SSI index for a .gz compressed seq file"); if (ascii->do_stdin) ESL_EXCEPTION(eslEINVAL, "can't open an SSI index for standard input"); if (ascii->afp != NULL) ESL_EXCEPTION(eslEINVAL, "can't open an SSI index for sequential input from an MSA"); if (ssifile_hint == NULL) { if ((status = esl_strdup(sqfp->filename, -1, &(ascii->ssifile))) != eslOK) return status; if ((status = esl_strcat(&(ascii->ssifile), -1, ".ssi", 4)) != eslOK) return status; } else { if ((status = esl_strdup(ssifile_hint, -1, &(ascii->ssifile))) != eslOK) return status; } return esl_ssi_Open(ascii->ssifile, &(ascii->ssi)); } /* Function: sqascii_PositionByKey() * Synopsis: Use SSI to reposition seq file to a particular sequence. * * Purpose: Reposition so that the next sequence we read will * be the one named (or accessioned) . * * linenumber> is reset to be relative to the start * of the record named , rather than the start of the * file. * * Returns: on success, and the file is repositioned * so that the next call will read the * sequence named . * * Returns if isn't found in the * index; in this case, the position of in the file * is unchanged. * * Returns if something goes wrong trying to * read the index, almost certainly indicating a format * problem in the SSI file. * * Returns if, after repositioning, we fail to * load the next line or buffer from the sequence file; * this probably also indicates a format problem in the SSI * file. * * Throws: on allocation error; * if there's no open SSI index in ; * if the fails. * * In all these cases, the state of becomes * undefined, and the caller should not use it again. */ static int sqascii_PositionByKey(ESL_SQFILE *sqfp, const char *key) { uint16_t fh; off_t offset; int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (ascii->ssi == NULL) ESL_EXCEPTION(eslEINVAL,"Need an open SSI index to call esl_sqfile_PositionByKey()"); if ((status = esl_ssi_FindName(ascii->ssi, key, &fh, &offset, NULL, NULL)) != eslOK) return status; return esl_sqfile_Position(sqfp, offset); } /* Function: sqascii_PositionByNumber() * Synopsis: Use SSI to reposition by sequence number * * Purpose: Reposition so that the next sequence we * read will be the 'th sequence, where * is <0..sqfp->ssi->nprimary-1>. * * linenumber> is reset to be relative to the start * of the record named , rather than the start of the * file. * * Returns: on success, and the file is repositioned. * * Returns if there is no sequence number * in the index; in this case, the position of * in the file is unchanged. * * Returns if something goes wrong trying to * read the index, almost certainly indicating a format * problem in the SSI file. * * Returns if, after repositioning, we fail to * load the next line or buffer from the sequence file; * this probably also indicates a format problem in the SSI * file. * * Throws: on allocation error; * if there's no open SSI index in ; * if the fails. * * In all these cases, the state of becomes * undefined, and the caller should not use it again. */ static int sqascii_PositionByNumber(ESL_SQFILE *sqfp, int which) { uint16_t fh; off_t offset; int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (ascii->ssi == NULL) ESL_EXCEPTION(eslEINVAL,"Need open SSI index to call esl_sqfile_PositionByNumber()"); if ((status = esl_ssi_FindNumber(ascii->ssi, which, &fh, &offset, NULL, NULL, NULL)) != eslOK) return status; return esl_sqfile_Position(sqfp, offset); } /* Function: sqascii_Fetch() * Synopsis: Fetch a complete sequence, using SSI indexing. * * Purpose: Fetch a sequence named (or accessioned) from * the repositionable, open sequence file . * The open must have an open SSI index. * The sequence is returned in . * * Returns: on soccess. * if no SSI index is present, or if can't * be repositioned. * if isn't found in the file. * if either the index file or the sequence file * can't be parsed, because of unexpected format issues. * * Throws: on allocation error. */ static int sqascii_Fetch(ESL_SQFILE *sqfp, const char *key, ESL_SQ *sq) { int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (ascii->ssi == NULL) ESL_FAIL(eslEINVAL, ascii->errbuf, "No SSI index for %s; can't fetch subsequences", sqfp->filename); if ((status = sqascii_PositionByKey(sqfp, key)) != eslOK) return status; if ((status = sqascii_Read(sqfp, sq)) != eslOK) return status; return eslOK; } /* Function: sqascii_FetchInfo() * Synopsis: Fetch a sequence's info, using SSI indexing. * * Purpose: Fetch a sequence named (or accessioned) from * the repositionable, open sequence file , reading * all info except the sequence (and secondary structure). * The open must have an open SSI index. * The sequence info is returned in . * * Returns: on soccess. * if no SSI index is present, or if can't * be repositioned. * if isn't found in the file. * if either the index file or the sequence file * can't be parsed, because of unexpected format issues. * * Throws: on allocation error. */ static int sqascii_FetchInfo(ESL_SQFILE *sqfp, const char *key, ESL_SQ *sq) { int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (ascii->ssi == NULL) ESL_FAIL(eslEINVAL, ascii->errbuf, "No SSI index for %s; can't fetch subsequences", sqfp->filename); if ((status = sqascii_PositionByKey(sqfp, key)) != eslOK) return status; if ((status = sqascii_ReadInfo(sqfp, sq)) != eslOK) return status; return eslOK; } /* Function: sqascii_FetchSubseq() * Synopsis: Fetch a subsequence, using SSI indexing. * * Purpose: Fetch subsequence from a sequence named (or * accessioned) , in the repositionable, open sequence file . * The open must have an SSI index. Put the * subsequence in . * * As a special case, if is 0, the subsequence is * fetched all the way to the end, so you don't need to * look up the sequence length to fetch a suffix. * * The caller may want to rename/reaccession/reannotate the * subsequence. Upon successful return, name> is set * to , and source> is set to * The accession and description acc> and * desc> are set to the accession and description of * the source sequence. * * Returns: on success. * if no SSI index is present, or if can't * be repositioned. * if isn't found in the file. * if either the index file or the sequence file * can't be parsed, because of unexpected format issues. * if the coords don't lie entirely * within the sequence. * * Throws: on allocation errors. */ static int sqascii_FetchSubseq(ESL_SQFILE *sqfp, const char *source, int64_t start, int64_t end, ESL_SQ *sq) { uint16_t fh;/* SSI file handle */ off_t r_off, d_off; int64_t L; int64_t actual_start; int64_t nskip; int64_t nres; int64_t n; int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (ascii->ssi == NULL) ESL_FAIL(eslEINVAL, ascii->errbuf, "No SSI index for %s; can't fetch subsequences", sqfp->filename); /* Find sequence info in the index */ status = esl_ssi_FindSubseq(ascii->ssi, source, start, &fh, &r_off, &d_off, &L, &actual_start); if (status == eslENOTFOUND) ESL_FAIL(status, ascii->errbuf, "Didn't find sequence %s in the index", source); else if (status == eslEFORMAT) ESL_FAIL(status, ascii->errbuf, "Failure reading SSI index; corrupt or bad format"); else if (status == eslERANGE) ESL_FAIL(status, ascii->errbuf, "Requested start %" PRIi64 " isn't in the sequence %s", start, source); else if (status != eslOK) ESL_FAIL(status, ascii->errbuf, "Unexpected failure in finding subseq offset"); /* The special case of end=0, asking for suffix fetch */ if (end == 0) end = L; /* Validate coords if we can */ if (start > end) ESL_FAIL(eslERANGE, ascii->errbuf, "Subsequence start %" PRIi64 " is greater than end %" PRIi64 "\n", start, end); if (L > 0 && end > L) ESL_FAIL(eslERANGE, ascii->errbuf, "Subsequence end %" PRIi64 " is greater than length %" PRIi64 "\n", end, L); /* Position the file at the record header; read the header info */ status = esl_sqfile_Position(sqfp, r_off); if (status == eslEOF) ESL_FAIL(status, ascii->errbuf, "Position appears to be off the end of the file"); else if (status == eslEINVAL) ESL_FAIL(status, ascii->errbuf, "Sequence file is not repositionable"); else if (status != eslOK) ESL_FAIL(status, ascii->errbuf, "Failure in positioning sequence file"); if ((status = ascii->parse_header(sqfp, sq)) != eslOK) return status; /* Position the file close to the subseq: either at the start of the line * where the subseq starts, or exactly at the residue. */ if (d_off != 0) { status = esl_sqfile_Position(sqfp, d_off); if (status == eslEOF) ESL_FAIL(eslERANGE, ascii->errbuf, "Position appears to be off the end of the file"); else if (status == eslEINVAL) ESL_FAIL(status, ascii->errbuf, "Sequence file is not repositionable"); else if (status != eslOK) ESL_FAIL(status, ascii->errbuf, "Failure in positioning sequence file"); } /* even if we didn't have a data offset, we're positioned at the * start of the sequence anyway, because we parsed the full header */ nskip = start - actual_start; /* how many residues do we still need to skip to reach start */ nres = end - start + 1; /* how many residues do we need to read as subseq */ if ((status = esl_sq_GrowTo(sq, nres)) != eslOK) return status; status = read_nres(sqfp, sq, nskip, nres, &n); if (status != eslOK || n < nres) ESL_EXCEPTION(eslEINCONCEIVABLE, "Failed to fetch subsequence residues -- corrupt coords?"); /* Set the coords */ sq->start = start; sq->end = end; sq->C = 0; sq->W = sq->n; sq->L = (L > 0 ? L : -1); esl_sq_FormatName(sq, "%s/%d-%d", source, start, end); esl_sq_SetSource (sq, source); return eslOK; } #endif /*eslAUGMENT_SSI*/ /*------------- end, random sequence access with SSI -------------------*/ /***************************************************************** * 6. Internal routines shared by parsers *****************************************************************/ /* loadmem() * * Load the next block of data from stream into mem buffer, * either concatenating to previous buffer (if we're recording) or * overwriting (if not). * * This block is loaded at sqfp->mem + sqfp->mpos. * * Upon return: * sqfp->mem now contains up to eslREADBUFSIZE more chars * sqfp->mpos is position of first byte in newly read block * sqfp->allocm may have increased by eslREADBUFSIZE, if we concatenated * sqfp->mn is # of chars in ; is pos of last byte in new block * * Returns (and mpos == mn) if no new data can be read; * Returns (and mpos < mn) if new data is read. * Throws on allocation error. */ static int loadmem(ESL_SQFILE *sqfp) { void *tmp; int n; int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (ascii->do_buffer) { ascii->mpos = 0; ascii->mn = 0; } else if (ascii->is_recording == TRUE) { if (ascii->mem == NULL) ascii->moff = ftello(ascii->fp); /* first time init of the offset */ ESL_RALLOC(ascii->mem, tmp, sizeof(char) * (ascii->allocm + eslREADBUFSIZE)); ascii->allocm += eslREADBUFSIZE; n = fread(ascii->mem + ascii->mpos, sizeof(char), eslREADBUFSIZE, ascii->fp); ascii->mn += n; } else { if (ascii->mem == NULL) { ESL_ALLOC(ascii->mem, sizeof(char) * eslREADBUFSIZE); ascii->allocm = eslREADBUFSIZE; } ascii->is_recording = -1;/* no more recording is possible now */ ascii->mpos = 0; ascii->moff = ftello(ascii->fp); n = fread(ascii->mem, sizeof(char), eslREADBUFSIZE, ascii->fp); /* see note [1] below */ ascii->mn = n; } return (n == 0 ? eslEOF : eslOK); ERROR: return status; } /* [1] Be alert for a possible problem above in that fread(). * Farrar had inserted an alternative case as follows: * "If we are reading from stdin, buffered read cannot be used * because if will block until EOF or the buffer is full, ie * eslREADBUFSIZE characters have been read. Usually this would * not be a problem, unless stdin is from a pipe. In that case * if the sequence is less than eslREADBUFSIZE we would block. * * NOTE: any changes to the IO stream ascii->fp, such as fseek, * might not have any affect on the file descriptor for the stream. * * if (ascii->do_stdin) { * n = read(fileno(ascii->fp), ascii->mem, eslREADBUFSIZE); * } else { * ... * * but that's a bug, because you can't mix read and fread; * the i17-stdin.pl test fails, in particular. */ /* loadbuf() * Set sqfp->buf to contain next line of data, or point to next block. * This might just mean working with previously buffered memory in mem> * or might require reading new data from fp>. * * Reset sqfp->boff to be the position of the start of the block/line. * Reset sqfp->bpos to 0. * Reset sqfp->nc to the number of chars (bytes) in the new block/line. * Returns eslOK on success; eslEOF if there's no more data in the file. * (sqfp->nc == 0 is the same as eslEOF: no data in the new buffer.) * Can throw an error. */ static int loadbuf(ESL_SQFILE *sqfp) { void *tmp; char *nlp; int n; int status = eslOK; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (! ascii->is_linebased) { if (ascii->mpos >= ascii->mn) { if ((status = loadmem(sqfp)) == eslEMEM) return status; } ascii->buf = ascii->mem + ascii->mpos; ascii->boff = ascii->moff + ascii->mpos; ascii->balloc = 0; ascii->bpos = 0; ascii->nc = ascii->mn - ascii->mpos; ascii->mpos += ascii->mn; } else { /* Copy next line from into . Might require new load(s) into . */ if (ascii->mpos >= ascii->mn) { if ((status = loadmem(sqfp)) == eslEMEM) return status; } ascii->boff = ascii->moff + ascii->mpos; ascii->nc = 0; nlp = memchr(ascii->mem + ascii->mpos, '\n', ascii->mn - ascii->mpos); while (nlp == NULL) { n = ascii->mn - ascii->mpos; while (ascii->nc + n + 1 > ascii->balloc) { /* +1: it'll hold the terminal \0 */ ESL_RALLOC(ascii->buf, tmp, sizeof(char) * (ascii->balloc + eslREADBUFSIZE)); ascii->balloc += eslREADBUFSIZE; } memcpy(ascii->buf + ascii->nc, ascii->mem + ascii->mpos, n); ascii->mpos += n; ascii->nc += n; status = loadmem(sqfp); if (status == eslEOF) { break; } else if (status != eslOK) return status; nlp = memchr(ascii->mem + ascii->mpos, '\n', ascii->mn - ascii->mpos); } if (status != eslEOF) { n = nlp - (ascii->mem + ascii->mpos) + 1; /* inclusive of \n */ if (ascii->nc + n + 1 > ascii->balloc) { ESL_RALLOC(ascii->buf, tmp, sizeof(char) * (ascii->balloc + eslREADBUFSIZE)); ascii->balloc += eslREADBUFSIZE; } memcpy(ascii->buf + ascii->nc, ascii->mem + ascii->mpos, n); ascii->mpos += n; ascii->nc += n; } ascii->bpos = 0; ascii->buf[ascii->nc] = '\0'; } return (ascii->nc == 0 ? eslEOF : eslOK); ERROR: return status; } /* nextchar() * * Load next char from sqfp->buf into <*ret_c> and sets sqfp->bpos to * its position; usually this is c = sqfp->buf[++sqfp->bpos], but * we will refill the buffer w/ fresh fread() when needed, in which * case c = sqfp->buf[0] and sqfp->bpos = 0. * * Returns on success. * Return if we ran out of data in . * May throw an error. */ static int nextchar(ESL_SQFILE *sqfp, char *ret_c) { int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; ascii->bpos++; if (ascii->nc == ascii->bpos && (status = loadbuf(sqfp)) != eslOK) return status; *ret_c = ascii->buf[ascii->bpos]; return eslOK; } /* seebuf() * * Examine and validate the current buffer buf> from its * current position bpos> until either the buffer ends (we run * out of characters) or the sequence data ends (we see whatever * character indicates EOD in this format) or we've seen * residues. If is passed as -1, parse the entire buffer, * without a residue limit. * * There are three possible outcomes: * : The buffer is all residues that belong to the current * seq we're parsing (or chars we can ignore), at least * up to the residue limit (if present). * : Part of the buffer may be residues, but the current sequence * ends in this buffer (before was reached). * : Somewhere before we reached the end of the buffer or * the sequence record, we saw an illegal character. * * On : * *opt_nres is the number of residues in the buffer (up to ) * *opt_endpos is sqfp->nc (off the end of the buffer by one) * The caller will want to deal with the buffer, then load the next one. * * On : same as OK, except: * *opt_endpos is where sqfp->bpos *would* be at when we saw the EOD * signal (the next '>', in FASTA files) had we been parsing residues * Therefore on EOD, the caller will want to deal with the <*opt_nres> * residues in this buffer, then reposition the buffer by * bpos = *opt_epos> (without reloading the buffer), so * the next read will pick up there. * * On : * ascii->errbuf contains informative message about the format error. * * seebuf() also handles linenumber and SSI bookkeeping in * . Every newline character seen increments (thus, * on EFORMAT return, linenumber is set to the line on which the bad * char occurred). ,,, keep track of # of bytes, * residues on the current,prev line; they keep state across calls to seebuf(). * , are tracking whether there's a constant number of * bytes/residues per line; these are either -1 for "not set yet", 0 * for "no, not constant", or a number > 0. Because of this bookkeeping, it's important * to make sure that never counts the same byte twice (hence * the need for the limit, which ReadWindow() uses.) */ static int seebuf(ESL_SQFILE *sqfp, int64_t maxn, int64_t *opt_nres, int64_t *opt_endpos) { int bpos; int64_t nres = 0; int64_t nres2 = 0;/* an optimization for determining lastrpl from nres, without incrementing lastrpl on every char */ int sym; ESL_DSQ x; int lasteol; int status = eslOK; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; lasteol = ascii->bpos - 1; if (maxn == -1) maxn = ascii->nc; /* makes for a more efficient test. nc is a guaranteed upper bound on nres */ for (bpos = ascii->bpos; nres < maxn && bpos < ascii->nc; bpos++) { sym = ascii->buf[bpos]; //printf ("nres: %d, bpos: %d (%d)\n", nres, bpos, sym); if (!isascii(sym)) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": non-ASCII character %c in sequence", ascii->linenumber, sym); x = sqfp->inmap[sym]; if (x <= 127) nres++; else if (x == eslDSQ_EOL) { if (ascii->curbpl != -1) ascii->curbpl += bpos - lasteol; if (ascii->currpl != -1) ascii->currpl += nres - nres2; nres2 += nres - nres2; if (ascii->rpl != 0 && ascii->prvrpl != -1) { /* need to ignore counts on last line in record, hence cur/prv */ if (ascii->rpl == -1) ascii->rpl = ascii->prvrpl; /* init */ else if (ascii->prvrpl != ascii->rpl) ascii->rpl = 0; /* inval*/ } if (ascii->bpl != 0 && ascii->prvbpl != -1) { if (ascii->bpl == -1) ascii->bpl = ascii->prvbpl; /* init */ else if (ascii->prvbpl != ascii->bpl) ascii->bpl = 0; /* inval */ } ascii->prvbpl = ascii->curbpl; ascii->prvrpl = ascii->currpl; ascii->curbpl = 0; ascii->currpl = 0; lasteol = bpos; if (ascii->linenumber != -1) ascii->linenumber++; } else if (x == eslDSQ_ILLEGAL) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": illegal character %c", ascii->linenumber, sym); else if (x == eslDSQ_EOD) { status = eslEOD; break; } else if (x != eslDSQ_IGNORED) ESL_FAIL(eslEFORMAT, ascii->errbuf, "inmap corruption?"); } if (ascii->curbpl != -1) ascii->curbpl += bpos - lasteol - 1; if (ascii->currpl != -1) ascii->currpl += nres - nres2; if (opt_nres != NULL) *opt_nres = nres; if (opt_endpos != NULL) *opt_endpos = bpos; return status; } /* addbuf() * Add residues from the current buffer buf> to . * This is designed to work when we're constructing a complete * sequence (add the whole buffer); when we're adding a suffix * of the buffer (bpos> is skipped ahead already); * or when we're adding a prefix of the buffer (terminating a subseq * or window load). * * The caller must know that there are at least residues in * this buffer, and that all the characters are valid in the * format and alphabet, via a previous call to . * * The caller also must have already allocated to hold at least * more residues. * * On input: * sqfp->buf[] contains an fread() buffer * sqfp->bpos is set to where we're going to start parsing residues * sqfp->nc is the length of * * On return: * sqfp->buf[] still contains the same buffer (no new freads here) * sqfp->bpos is set after the last residue we parsed * sq->seq/dsq now holds new residues * sq->n is incremented by */ static void addbuf(ESL_SQFILE *sqfp, ESL_SQ *sq, int64_t nres) { ESL_DSQ x; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (sq->dsq != NULL) { while (nres) { x = sq->abc->inmap[(int) ascii->buf[ascii->bpos++]]; if (x <= 127) { nres--; sq->dsq[++sq->n] = x; } } /* we skipped IGNORED, EOL. EOD, ILLEGAL don't occur; seebuf() already checked */ } else { while (nres) { x = sqfp->inmap[(int) ascii->buf[ascii->bpos++]]; if (x <= 127) { nres--; sq->seq[sq->n++] = x; } } } } /* skipbuf() * Like addbuf(), but we skip residues instead of * reading them. */ static void skipbuf(ESL_SQFILE *sqfp, int64_t nskip) { ESL_DSQ x; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; while (nskip) { x = sqfp->inmap[(int) ascii->buf[ascii->bpos++]]; if (x <= 127) nskip--;/* skip IGNORED, EOL. */ } } /* skip_whitespace() * Like skipbuf(), but instead of skipping a fixed number of * residues, skip forward until one of three conditions is met: * * (1) end of the sequence record (a character indicating * the beginning of a new sequence); set ascii->bpos * to the beginning of the new record, and return eslEOD; * (2) a non-whitespace character in the current sequence is * reached that does not indicate the end of a sequence * record; set ascii->bpos to that character's position, * and return eslOK; * (3) end of file; return eslEOF. * */ static int skip_whitespace(ESL_SQFILE *sqfp) { int status; int c; ESL_DSQ x; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (ascii->nc == 0) return eslEOF; c = (int) ascii->buf[ascii->bpos]; x = sqfp->inmap[c]; while ( isspace(c) ) { ascii->bpos++; if (ascii->bpos == ascii->nc) if ((status = loadbuf(sqfp)) == eslEOF) return eslEOF; c = (int) ascii->buf[ascii->bpos]; x = sqfp->inmap[c]; } if (x == eslDSQ_EOD) return eslEOD; return eslOK; } /* read_nres() * Read the next residues from after skipping residues, then stop. * * Returns and <0 < *ret_actual_nres <= nres> if it succeeded, and * there's more residues in the current seq record. * Returns and <*ret_actual_nres == 0> if no more residues are * seen in the sequence record. * * Even on , the is appropriately terminated here, * and n> is left the way it was (no new residues added - but there * may have been saved context C from a previous window). * * Returns on any parsing problem, and errbuf> is set. * * On , sqfp->bpos is positioned on the next character past the last residue we store; * on , sqfp->bpos is positioned for reading the next sequence. * * FetchSubseq() uses this with , , and expects an * with <*opt_actual_nres = nres>. On , or if fewer than * residues are obtained, the coords must've been screwed up, * because we didn't read the whole subseq we asked for. * * ReadWindow() on forward strand uses this with , . * The last window might normally return with * <*ret_actual_nres == 0>, and now bpos> is positioned at the * start of the next sequence on , and at the next residue on * . * * ReadWindow() in reverse complement acts like a subseq fetch. * */ static int read_nres(ESL_SQFILE *sqfp, ESL_SQ *sq, int64_t nskip, int64_t nres, int64_t *opt_actual_nres) { int64_t n; int64_t epos; int64_t actual_nres = 0; int status = eslOK; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; status = seebuf(sqfp, nskip+nres, &n, &epos); while (status == eslOK && nskip - n > 0) { nskip -= n; if ((status = loadbuf(sqfp)) == eslEOF) break; status = seebuf(sqfp, nskip+nres, &n, &epos); } if (status == eslEOF) { if (! ascii->eof_is_ok) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Premature EOF before end of seq record"); if (nskip > 0) ESL_EXCEPTION(eslECORRUPT, "premature EOD while trying to skip residues"); n = 0; } else if (status == eslEOD) { if (n < nskip) ESL_EXCEPTION(eslECORRUPT, "premature EOD while trying to skip residues"); } else if (status != eslOK) return status; skipbuf(sqfp, nskip); n -= nskip; while (status == eslOK && nres - n > 0) { addbuf(sqfp, sq, n); actual_nres += n; nres -= n; if ((status = loadbuf(sqfp)) == eslEOF) break; status = seebuf(sqfp, nres, &n, &epos); } if (status == eslEOF) { if (! ascii->eof_is_ok) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Premature EOF before end of seq record"); n = 0; } else if (status == eslEFORMAT) { return status; } n = ESL_MIN(nres, n); addbuf(sqfp, sq, n); /* bpos now at last residue + 1 if OK/EOD, 0 if EOF */ actual_nres += n; if (sq->dsq != NULL) sq->dsq[sq->n+1] = eslDSQ_SENTINEL; else sq->seq[sq->n] = '\0'; if (status == eslEOD) { ascii->bpos = epos; } if (opt_actual_nres != NULL) *opt_actual_nres = actual_nres; return (actual_nres == 0 ? eslEOD : eslOK); } /*--------------- end, buffer-based parsers --------------------*/ /***************************************************************** *# 7. Internal routines for EMBL format (including UniProt, TrEMBL) *****************************************************************/ /* EMBL and UniProt protein sequence database format. * See: http://us.expasy.org/sprot/userman.html * and: http://www.ebi.ac.uk/embl/Documentation/User_manual/usrman.html#3 * We use the same parser for both formats, so we have to be * careful to only parse the conserved intersection of these two * very similar formats. */ static void config_embl(ESL_SQFILE *sqfp) { ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; ascii->is_linebased = TRUE; ascii->eof_is_ok = FALSE;/* records end with // */ ascii->parse_header = &header_embl; ascii->skip_header = &skip_embl; ascii->parse_end = &end_embl; } static void inmap_embl(ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap) { int x; if (abc_inmap != NULL) { for (x = 0; x < 128; x++) sqfp->inmap[x] = abc_inmap[x]; } else { for (x = 0; x < 128; x++) sqfp->inmap[x] = eslDSQ_ILLEGAL; for (x = 'A'; x <= 'Z'; x++) sqfp->inmap[x] = x; for (x = 'a'; x <= 'z'; x++) sqfp->inmap[x] = x; } for (x = '0'; x <= '9'; x++) sqfp->inmap[x] = eslDSQ_IGNORED; /* EMBL DNA sequence format puts coordinates after each line */ sqfp->inmap['*'] = '*'; /* accept * as a nonresidue/stop codon character */ sqfp->inmap[' '] = eslDSQ_IGNORED; sqfp->inmap['\t'] = eslDSQ_IGNORED; sqfp->inmap['\n'] = eslDSQ_IGNORED; sqfp->inmap['\r'] = eslDSQ_IGNORED;/* DOS eol compatibility */ sqfp->inmap['/'] = eslDSQ_EOD; } /* header_embl() * * See: http://us.expasy.org/sprot/userman.html * And: http://www.ebi.ac.uk/embl/Documentation/User_manual/usrman.html#3 * Our parser must work on the highest common denominator of EMBL DNA * and UniProt protein sequence files. * * sqfp->buf is the first (ID) line of the entry, or a blank line before * it (in which case we'll scan forwards skipping blank lines to find * the ID line). * * On success, returns and: * sq->name contains sequence name (and may have been reallocated, changing sq->nalloc) * sq->acc contains seq accession (and may have been reallocated, changing sq->aalloc) * sq->desc contains description line (and may have been reallocated, changing sq->dalloc) * sq->roff has been set to the record offset * sq->doff has been set to the data offset (start of sequence line) * sqfp->buf is the first seq line. * * If no more seqs are found in the file, returns . * On parse failure, returns , leaves as mesg in ascii->errbuf. * * May also throw on allocation errors. */ static int header_embl(ESL_SQFILE *sqfp, ESL_SQ *sq) { char *s; char *tok; int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; /* Find first line: * "Each entry must begin with an identification line (ID)..." * "The two-character line-type code that begins each line is always * followed by three blanks..." */ if (ascii->nc == 0) return eslEOF; while (esl_str_IsBlank(ascii->buf)) { if ((status = loadbuf(sqfp)) == eslEOF) return eslEOF; /* normal */ else if (status != eslOK) return status; /* abnormal */ } /* ID line is defined as: * ID ENTRY_NAME DATA_CLASS; MOLECULE_TYPE; SEQUENCE_LENGTH. * We're only after the ENTRY_NAME. * Examples: * ID SNRPA_DROME STANDARD; PRT; 216 AA. * ID SNRPA_DROME Reviewed; 216 AA. * ID X06347; SV 1; linear; mRNA; STD; HUM; 1209 BP. */ if (strncmp(ascii->buf, "ID ", 5) != 0) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to find ID line", ascii->linenumber); s = ascii->buf+5; if ((status = esl_strtok(&s, " ;", &tok)) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to parse name on ID line", ascii->linenumber); if ((status = esl_sq_SetName(sq, tok)) != eslOK) return status; sq->roff = ascii->boff;/* record the offset of the ID line */ /* Look for SQ line; parsing optional info as we go. */ do { if ((status = loadbuf(sqfp)) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to find SQ line", ascii->linenumber); /* "The format of the AC line is: * AC AC_number_1;[ AC_number_2;]...[ AC_number_N;] * Researchers who wish to cite entries in their publications * should always cite the first accession number. This is * commonly referred to as the 'primary accession * number'." * * Examples: * AC P43332; Q9W4D7; * AC X06347; * * Note that Easel only stores primary accessions. * Because there can be more than one accession line, we check to * see if the accession is already set before storing a line. */ if (strncmp(ascii->buf, "AC ", 5) == 0 && sq->acc[0] == '\0') { s = ascii->buf+5; if ((status = esl_strtok(&s, ";", &tok)) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to parse accession on AC line", ascii->linenumber); if ((status = esl_sq_SetAccession(sq, tok)) != eslOK) return status; } /* "The format of the DE line is: * DE Description. * ...In cases where more than one DE line is required, the text is * only divided between words and only the last DE line is * terminated by a period." * * Examples: * DE U1 small nuclear ribonucleoprotein A (U1 snRNP protein A) (U1-A) (Sex * DE determination protein snf). * * DE Human mRNA for U1 small nuclear RNP-specific A protein * * DE RecName: Full=U1 small nuclear ribonucleoprotein A; * DE Short=U1 snRNP protein A; * DE Short=U1-A; * DE AltName: Full=Sex determination protein snf; * * We'll make no attempt to parse the structured UniProt description header, * for the moment. */ if (strncmp(ascii->buf, "DE ", 5) == 0) { s = ascii->buf+5; esl_strchop(s, ascii->nc-5); if ((status = esl_sq_AppendDesc(sq, s)) != eslOK) ESL_FAIL(status, ascii->errbuf, "Line %" PRId64 ": failed to parse description on DE line", ascii->linenumber); } /* UniProt: "The format of the SQ line is: * SQ SEQUENCE XXXX AA; XXXXX MW; XXXXXXXXXXXXXXXX CRC64;" * EMBL: "The SQ (SeQuence header) line marks the beginning of * the sequence data and Gives a summary of its content. * An example is: * SQ Sequence 1859 BP; 609 A; 314 C; 355 G; 581 T; 0 other;" * * We don't parse this line; we just look for it as the last line * before the sequence starts. */ } while (strncmp(ascii->buf, "SQ ", 5) != 0); if (loadbuf(sqfp) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Failed to find any sequence"); sq->hoff = ascii->boff - 1; sq->doff = ascii->boff; return eslOK; } /* skip_embl() * * Skip past the EMBL header and position to start of the sequence line. * * On success, returns and: * sq->roff has been set to the record offset * sq->doff has been set to the data offset (start of sequence line) * sqfp->buf is the first seq line. * * If no more seqs are found in the file, returns . * On parse failure, returns , leaves as mesg in ascii->errbuf. * * May also throw on allocation errors. */ static int skip_embl(ESL_SQFILE *sqfp, ESL_SQ *sq) { int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; /* Find first line: * "Each entry must begin with an identification line (ID)..." * "The two-character line-type code that begins each line is always * followed by three blanks..." */ if (ascii->nc == 0) return eslEOF; while (esl_str_IsBlank(ascii->buf)) { if ((status = loadbuf(sqfp)) == eslEOF) return eslEOF; /* normal */ else if (status != eslOK) return status; /* abnormal */ } /* ID line */ if (strncmp(ascii->buf, "ID ", 5) != 0) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to find ID line", ascii->linenumber); sq->roff = ascii->boff;/* record the offset of the ID line */ /* zero out the name, accession and description */ sq->name[0] = '\0'; sq->acc[0] = '\0'; sq->desc[0] = '\0'; /* Look for SQ line; parsing optional info as we go. */ do { if ((status = loadbuf(sqfp)) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to find SQ line", ascii->linenumber); } while (strncmp(ascii->buf, "SQ ", 5) != 0); if (loadbuf(sqfp) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Failed to find any sequence"); sq->hoff = ascii->boff - 1; sq->doff = ascii->boff; return eslOK; } static int end_embl(ESL_SQFILE *sqfp, ESL_SQ *sq) { int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (strncmp(ascii->buf, "//", 2) != 0) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": did not find // terminator at end of seq record", ascii->linenumber); sq->eoff = ascii->boff + ascii->nc - 1; status = loadbuf(sqfp); if (status == eslEOF) return eslOK; /* ok, actually. */ else if (status == eslOK) return eslOK; else return status; } /*---------------------- EMBL format ---------------------------------*/ /***************************************************************** *# 8. Internal routines for GenBank format *****************************************************************/ /* NCBI GenBank sequence database format. * See GenBank release notes; for example, * ftp://ftp.ncbi.nih.gov/genbank/gbrel.txt */ static void config_genbank(ESL_SQFILE *sqfp) { ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; ascii->is_linebased = TRUE; ascii->eof_is_ok = FALSE;/* records end with // */ ascii->parse_header = &header_genbank; ascii->skip_header = &skip_genbank; ascii->parse_end = &end_genbank; } static void inmap_genbank(ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap) { int x; if (abc_inmap != NULL) { for (x = 0; x < 128; x++) sqfp->inmap[x] = abc_inmap[x]; } else { for (x = 0; x < 128; x++) sqfp->inmap[x] = eslDSQ_ILLEGAL; for (x = 'A'; x <= 'Z'; x++) sqfp->inmap[x] = x; for (x = 'a'; x <= 'z'; x++) sqfp->inmap[x] = x; } for (x = '0'; x <= '9'; x++) sqfp->inmap[x] = eslDSQ_IGNORED; sqfp->inmap['*'] = '*'; /* accept * as a nonresidue/stop codon character */ sqfp->inmap[' '] = eslDSQ_IGNORED; sqfp->inmap['\t'] = eslDSQ_IGNORED; sqfp->inmap['\n'] = eslDSQ_IGNORED; sqfp->inmap['\r'] = eslDSQ_IGNORED;/* DOS eol compatibility */ sqfp->inmap['/'] = eslDSQ_EOD; } /* header_genbank() * * sqfp->buf is the first (LOCUS) line of the entry, or a line before * it (in which case we'll scan forwards to find the LOCUS line - even * skipping non-blank lines, because there are sometimes headers at * the start of GenBank files). * * On success, returns and: * sq->name contains sequence name (and may have been reallocated, changing sq->nalloc) * sq->acc contains seq accession (and may have been reallocated, changing sq->aalloc) * sq->desc contains description line (and may have been reallocated, changing sq->dalloc) * sq->roff has been set to the record offset * sq->doff has been set to the data offset (start of sequence line) * sqfp->buf is the first seq line. * * If no more seqs are found in the file, returns . * On parse failure, returns , leaves as mesg in ascii->errbuf. * * May also throw on allocation errors. */ static int header_genbank(ESL_SQFILE *sqfp, ESL_SQ *sq) { char *s; char *tok; int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; /* Find LOCUS line, allowing for ignoration of a file header. */ if (ascii->nc == 0) return eslEOF; while (strncmp(ascii->buf, "LOCUS ", 8) != 0) { if ((status = loadbuf(sqfp)) == eslEOF) return eslEOF; /* normal */ else if (status != eslOK) return status; /* abnormal */ } s = ascii->buf+12; if ((status = esl_strtok(&s, " ", &tok)) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to parse name on LOCUS line", ascii->linenumber); if ((status = esl_sq_SetName(sq, tok)) != eslOK) return status; sq->roff = ascii->boff;/* record the disk offset to the LOCUS line */ /* Look for ORIGIN line, parsing optional info as we go. */ do { if ((status = loadbuf(sqfp)) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Failed to find ORIGIN line"); /* Optional VERSION line is parsed as "accession". */ if (strncmp(ascii->buf, "VERSION ", 10) == 0) { s = ascii->buf+12; if ((status = esl_strtok(&s, " ", &tok)) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": failed to parse VERSION line", ascii->linenumber); if ((status = esl_sq_SetAccession(sq, tok)) != eslOK) return status; } /* Optional DEFINITION Line is parsed as "description". */ if (strncmp(ascii->buf, "DEFINITION ", 11) == 0) { s = ascii->buf+12; esl_strchop(s, ascii->nc); if ((status = esl_sq_AppendDesc(sq, s)) != eslOK) ESL_FAIL(status, ascii->errbuf, "Line %" PRId64 ": failed to parse desc on DEFINITION line", ascii->linenumber); } } while (strncmp(ascii->buf, "ORIGIN", 6) != 0); if (loadbuf(sqfp) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Failed to find any sequence"); sq->hoff = ascii->boff - 1; sq->doff = ascii->boff; return eslOK; } /* skip_genbank() * * Skip past the GenBank header and position to start of the sequence line. * * On success, returns and: * sq->roff has been set to the record offset * sq->doff has been set to the data offset (start of sequence line) * sqfp->buf is the first seq line. * * If no more seqs are found in the file, returns . * On parse failure, returns , leaves as mesg in ascii->errbuf. * * May also throw on allocation errors. */ static int skip_genbank(ESL_SQFILE *sqfp, ESL_SQ *sq) { int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; /* Find LOCUS line, allowing for ignoration of a file header. */ if (ascii->nc == 0) return eslEOF; while (strncmp(ascii->buf, "LOCUS ", 8) != 0) { if ((status = loadbuf(sqfp)) == eslEOF) return eslEOF; /* normal */ else if (status != eslOK) return status; /* abnormal */ } sq->roff = ascii->boff;/* record the disk offset to the LOCUS line */ /* zero out the name, accession and description */ sq->name[0] = '\0'; sq->acc[0] = '\0'; sq->desc[0] = '\0'; /* Look for ORIGIN line, parsing optional info as we go. */ do { if ((status = loadbuf(sqfp)) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Failed to find ORIGIN line"); } while (strncmp(ascii->buf, "ORIGIN", 6) != 0); if (loadbuf(sqfp) != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Failed to find any sequence"); sq->hoff = ascii->boff - 1; sq->doff = ascii->boff; return eslOK; } static int end_genbank(ESL_SQFILE *sqfp, ESL_SQ *sq) { int status; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (strncmp(ascii->buf, "//", 2) != 0) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": did not find // terminator at end of seq record", ascii->linenumber); sq->eoff = ascii->boff + ascii->nc - 1; status = loadbuf(sqfp); if (status == eslEOF) return eslOK; /* ok, actually; we'll detect EOF on next sq read */ else if (status == eslOK) return eslOK; else return status; } /*----------------- end GenBank format -------------------------------*/ /***************************************************************** *# 9. Internal routines for FASTA format *****************************************************************/ static void config_fasta(ESL_SQFILE *sqfp) { ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; ascii->is_linebased = FALSE; ascii->eof_is_ok = TRUE; ascii->parse_header = &header_fasta; ascii->skip_header = &skip_fasta; ascii->parse_end = &end_fasta; } static void inmap_fasta(ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap) { int x; if (abc_inmap != NULL) { for (x = 0; x < 128; x++) sqfp->inmap[x] = abc_inmap[x]; } else { for (x = 0; x < 128; x++) sqfp->inmap[x] = eslDSQ_ILLEGAL; for (x = 'A'; x <= 'Z'; x++) sqfp->inmap[x] = x; for (x = 'a'; x <= 'z'; x++) sqfp->inmap[x] = x; } sqfp->inmap['*'] = '*'; /* accept * as a nonresidue/stop codon character */ sqfp->inmap[' '] = eslDSQ_IGNORED; sqfp->inmap['\t'] = eslDSQ_IGNORED; sqfp->inmap['\r'] = eslDSQ_IGNORED;/* DOS eol compatibility */ sqfp->inmap['\n'] = eslDSQ_EOL; sqfp->inmap['>'] = eslDSQ_EOD; /* \n is special - fasta reader detects it as an eol */ } /* header_fasta() * * sqfp->buf[sqfp->bpos] is sitting at the start of a FASTA record, or * at a space before it (in which case we'll advance, skipping whitespace, * until a > is reached). * Parse the header line, storing name and description in . * * On success, returns and: * sq->name contains sequence name (and may have been reallocated, changing sq->nalloc) * sq->desc contains description line (and may have been reallocated, changing sq->dalloc) * sq->roff has been set to the record offset * sq->doff has been set to the data offset (start of sequence line) * sqfp->buf[sqfp->bpos] is sitting at the start of the seq line. * sqfp->currpl,curbpl set to 0, to start bookkeeping data line lengths * * If no more seqs are found in the file, returns . * On parse failure, return , leaves as mesg in ascii->errbuf. * * May also throw on allocation errors. */ static int header_fasta(ESL_SQFILE *sqfp, ESL_SQ *sq) { char c; int status = eslOK; void *tmp; int pos; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; /* make sure there are characters in the buffer */ if (ascii->nc == ascii->bpos && (status = loadbuf(sqfp)) != eslOK) return status; c = ascii->buf[ascii->bpos]; while (status == eslOK && isspace(c)) status = nextchar(sqfp, &c); /* skip space (including \n) */ if (status == eslEOF) return eslEOF; if (status == eslOK && c == '>') { /* accept the > */ sq->roff = ascii->boff + ascii->bpos; /* store SSI record offset */ status = nextchar(sqfp, &c); } else if (c != '>') ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": unexpected char %c; expected FASTA to start with >", ascii->linenumber, c); while (status == eslOK && (c == '\t' || c == ' ')) status = nextchar(sqfp, &c); /* skip space */ /* Store the name (space delimited) */ pos = 0; while (status == eslOK && ! isspace(c)) { sq->name[pos++] = c; if (pos == sq->nalloc-1) { ESL_RALLOC(sq->name, tmp, sq->nalloc*2); sq->nalloc*=2; } status = nextchar(sqfp, &c); } if (pos == 0) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": no FASTA name found", ascii->linenumber); sq->name[pos] = '\0'; while (status == eslOK && (c == '\t' || c == ' ')) status = nextchar(sqfp, &c); /* skip space */ /* Store the description (end-of-line delimited) */ pos = 0; while (status == eslOK && c != '\n' && c != '\r') { sq->desc[pos++] = c; if (pos == sq->dalloc-1) { ESL_RALLOC(sq->desc, tmp, sq->dalloc*2); sq->dalloc*= 2; } status = nextchar(sqfp, &c); } sq->desc[pos] = '\0'; sq->hoff = ascii->boff + ascii->bpos; while (status == eslOK && (c == '\n' || c == '\r')) status = nextchar(sqfp, &c); /* skip past eol (DOS \r\n, MAC \r, UNIX \n */ if (status != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Premature EOF in parsing FASTA name/description line"); sq->doff = ascii->boff + ascii->bpos; ascii->prvrpl = ascii->prvbpl = -1; ascii->currpl = ascii->curbpl = 0; ascii->linenumber++; return eslOK; ERROR: return status;/* eslEMEM, from failed realloc */ } /* skip_fasta() * * Skip past the fasta header and position to start of the sequence line. * * On success, returns and: * sq->roff has been set to the record offset * sq->doff has been set to the data offset (start of sequence line) * sqfp->buf[sqfp->bpos] is sitting at the start of the seq line. * sqfp->currpl,curbpl set to 0, to start bookkeeping data line lengths * * If no more seqs are found in the file, returns . * On parse failure, return , leaves as mesg in ascii->errbuf. * * May also throw on allocation errors. */ static int skip_fasta(ESL_SQFILE *sqfp, ESL_SQ *sq) { char c; int status = eslOK; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; c = ascii->buf[ascii->bpos]; while (status == eslOK && isspace(c)) status = nextchar(sqfp, &c); /* skip space (including \n) */ if (status == eslEOF) return eslEOF; if (status != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Unexpected parsing error %d", status); if (c != '>') ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": unexpected char %c; expecting '>'", ascii->linenumber, c); sq->roff = ascii->boff + ascii->bpos; /* store SSI record offset */ /* zero out the name, accession and description */ sq->name[0] = '\0'; sq->acc[0] = '\0'; sq->desc[0] = '\0'; status = nextchar(sqfp, &c); /* skip to end of line */ while (status == eslOK && c != '\n' && c != '\r') status = nextchar(sqfp, &c); sq->doff = ascii->boff + ascii->bpos; /* skip past end of line */ while (status == eslOK && (c == '\n' || c == '\r')) status = nextchar(sqfp, &c); if (status != eslOK) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Premature EOF in parsing FASTA name/description line"); sq->doff = ascii->boff + ascii->bpos; ascii->linenumber++; return eslOK; } static int end_fasta(ESL_SQFILE *sqfp, ESL_SQ *sq) { ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (ascii->bpos < ascii->nc) { if (ascii->buf[ascii->bpos] != '>') ESL_FAIL(eslEFORMAT, ascii->errbuf, "Whoops, FASTA reader is corrupted"); sq->eoff = ascii->boff + ascii->bpos - 1; /* this puts eoff at the last \n */ } /* else, EOF, and we don't have to do anything. */ return eslOK; } /* Function: esl_sqascii_WriteFasta() * Synopsis: Write a sequence in FASTA foramt * * Purpose: Write sequence in FASTA format to the open stream . * * If is TRUE, then store record, data, and end * offsets in ; this ability is used by unit tests. * * Returns: on success. * * Throws: on allocation failure. * on system write error. */ int esl_sqascii_WriteFasta(FILE *fp, ESL_SQ *sq, int save_offsets) { char buf[61]; int64_t pos; if (save_offsets) sq->roff = ftello(fp); if (fprintf(fp, ">%s", sq->name) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "fasta seq write failed"); if (sq->acc[0] != 0 && fprintf(fp, " %s", sq->acc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "fasta seq write failed"); if (sq->desc[0] != 0 && fprintf(fp, " %s", sq->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "fasta seq write failed"); if (save_offsets) sq->hoff = ftello(fp); if (fputc('\n', fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "fasta seq write failed"); buf[60] = '\0'; if (save_offsets) sq->doff = ftello(fp); for (pos = 0; pos < sq->n; pos += 60) { if (sq->dsq != NULL) esl_abc_TextizeN(sq->abc, sq->dsq+pos+1, 60, buf); else strncpy(buf, sq->seq+pos, 60); if (fprintf(fp, "%s\n", buf) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "fasta seq write failed"); } if (save_offsets) sq->eoff = ftello(fp) - 1; return eslOK; } /*------------------- end of FASTA i/o ---------------------------*/ /***************************************************************** *# 10. Internal routines for DAEMON format *****************************************************************/ /* Special case FASTA format where each sequence is terminated with "//". * * The use case is where the sequences are being read from a pipe and a * way is needed to signal the end of the sequence so it can be processed. * The next sequence might not be in the pipe, so the usual '>' is not * present to signal the end of the sequence. Also, an EOF is not * an option, since the daemon might run continuously. */ static void config_daemon(ESL_SQFILE *sqfp) { ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; ascii->is_linebased = FALSE; ascii->eof_is_ok = FALSE; ascii->parse_header = &header_fasta; ascii->skip_header = &skip_fasta; ascii->parse_end = &end_daemon; } static void inmap_daemon(ESL_SQFILE *sqfp, const ESL_DSQ *abc_inmap) { int x; if (abc_inmap != NULL) { for (x = 0; x < 128; x++) sqfp->inmap[x] = abc_inmap[x]; } else { for (x = 0; x < 128; x++) sqfp->inmap[x] = eslDSQ_ILLEGAL; for (x = 'A'; x <= 'Z'; x++) sqfp->inmap[x] = x; for (x = 'a'; x <= 'z'; x++) sqfp->inmap[x] = x; } sqfp->inmap['*'] = '*'; /* accept * as a nonresidue/stop codon character */ sqfp->inmap[' '] = eslDSQ_IGNORED; sqfp->inmap['\t'] = eslDSQ_IGNORED; sqfp->inmap['\r'] = eslDSQ_IGNORED;/* DOS eol compatibility */ sqfp->inmap['\n'] = eslDSQ_EOL; sqfp->inmap['/'] = eslDSQ_EOD; /* \n is special - fasta reader detects it as an eol */ } /* end_daemon() * * Special case FASTA format where each sequence is terminated with "//". * * The use case is were the sequences are being read from a pipe and a * way is needed to signal the end of the sequence so it can be processed. */ static int end_daemon(ESL_SQFILE *sqfp, ESL_SQ *sq) { char c; ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if (ascii->nc < 3) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Whoops, DAEMON input stream is corrupted"); c = ascii->buf[ascii->bpos++]; if (c != '/') ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": did not find // terminator at end of seq record", ascii->linenumber); c = ascii->buf[ascii->bpos++]; if (c != '/') ESL_FAIL(eslEFORMAT, ascii->errbuf, "Line %" PRId64 ": did not find // terminator at end of seq record", ascii->linenumber); /* skip to end of line */ while (c != '\n' && c != '\r' && ascii->bpos < ascii->nc) c = ascii->buf[ascii->bpos++]; /* skip past end of line */ while ((c == '\n' || c == '\r') && ascii->bpos < ascii->nc) c = ascii->buf[ascii->bpos++]; return eslOK; } /* esl_sqascii_Parse() * * Parse a sequence already read into a buffer. */ int esl_sqascii_Parse(char *buf, int size, ESL_SQ *sq, int format) { int status; int64_t epos; int64_t n; ESL_SQFILE sqfp; ESL_SQASCII_DATA *ascii = &sqfp.data.ascii; /* fill in a dummy esl_sqfile structure used to parse buf */ ascii->fp = NULL; ascii->do_gzip = FALSE; ascii->do_stdin = FALSE; ascii->do_buffer = TRUE; ascii->mem = buf; ascii->allocm = 0; ascii->mn = size; ascii->mpos = 0; ascii->moff = -1; ascii->is_recording = FALSE; ascii->buf = NULL; ascii->boff = 0; ascii->balloc = 0; ascii->nc = 0; ascii->bpos = 0; ascii->L = 0; ascii->linenumber = 1; ascii->afp = NULL; ascii->msa = NULL; ascii->idx = -1; ascii->ssifile = NULL; ascii->rpl = -1;/* -1 = not set yet */ ascii->bpl = -1;/* (ditto) */ ascii->prvrpl = -1;/* (ditto) */ ascii->prvbpl = -1;/* (ditto) */ ascii->currpl = -1; ascii->curbpl = -1; ascii->ssi = NULL; /* Configure the 's parser and inmaps for this format. */ switch (format) { case eslSQFILE_EMBL: case eslSQFILE_UNIPROT: config_embl(&sqfp); inmap_embl(&sqfp, NULL); break; case eslSQFILE_GENBANK: case eslSQFILE_DDBJ: config_genbank(&sqfp); inmap_genbank(&sqfp, NULL); break; case eslSQFILE_FASTA: config_fasta(&sqfp); inmap_fasta(&sqfp, NULL); break; case eslSQFILE_DAEMON: config_daemon(&sqfp); inmap_daemon(&sqfp, NULL); break; default: return eslEFORMAT; } /* Main case: read next seq from sqfp's stream */ if ((status = ascii->parse_header(&sqfp, sq)) != eslOK) return status; /* EOF, EFORMAT */ do { if ((status = seebuf(&sqfp, -1, &n, &epos)) == eslEFORMAT) return status; if (esl_sq_GrowTo(sq, sq->n + n) != eslOK) return eslEMEM; addbuf(&sqfp, sq, n); ascii->L += n; sq->eoff = ascii->boff + epos - 1; if (status == eslEOD) break; } while ((status = loadbuf(&sqfp)) == eslOK); if (status == eslEOF) { if (! ascii->eof_is_ok) ESL_FAIL(eslEFORMAT, ascii->errbuf, "Unexpected EOF; file truncated?"); if ((status = ascii->parse_end(&sqfp, sq)) != eslOK) return status; } else if (status == eslEOD) { ascii->bpos = epos; if ((status = ascii->parse_end(&sqfp, sq)) != eslOK) return status; } else if (status != eslOK) return status; if (sq->dsq != NULL) sq->dsq[sq->n+1] = eslDSQ_SENTINEL; else sq->seq[sq->n] = '\0'; sq->start = 1; sq->end = sq->n; sq->C = 0; sq->W = sq->n; sq->L = sq->n; if (ascii->balloc > 0) free(ascii->buf); return eslOK; } /*-------------------- end of DAEMON ----------------------------*/ /***************************************************************** *# 11. Internal routines for HMMPGMD format *****************************************************************/ static int fileheader_hmmpgmd(ESL_SQFILE *sqfp) { ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; char c; int status = eslOK; /* We've just loaded first buffer, after an Open. First char should be the # of the hmmpgmd file, * but let's tolerate leading whitespace anyway */ c = ascii->buf[ascii->bpos]; while (status == eslOK && isspace(c)) status = nextchar(sqfp, &c); /* skip space (including \n, \r) */ if (status == eslEOF) return eslEOF; if (c != '#') ESL_FAIL(eslEFORMAT, ascii->errbuf, "hmmpgmd file expected to start with #"); /* skip first line; remainder of file is FASTA format */ while (status == eslOK && (c != '\n' && c != '\r')) status = nextchar(sqfp, &c); if (status == eslEOF) return eslEOF; /* next character read should be the '>' of the first FASTA record. We're properly positioned at "start of file". */ return eslOK; } /*-------------------- end of HMMPGMD ---------------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_sqio_ascii.c 880 2013-07-08 18:24:38Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_sqio_ascii.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_distance.c0000664361611702660230000013245412473612606016175 0ustar wheelerteddy/* Pairwise identities, distances, and distance matrices. * * Contents: * 1. Pairwise distances for aligned text sequences. * 2. Pairwise distances for aligned digital seqs. [alphabet] * 3. Distance matrices for aligned text sequences. [dmatrix] * 4. Distance matrices for aligned digital sequences. [alphabet,dmatrix] * 5. Average pairwise identity for multiple alignments. [alphabet,random] * 6. Private (static) functions. * 7. Unit tests. * 8. Test driver. * 9. Example. * 10. Copyright notice and license. * */ #include "esl_config.h" #include #include #include #include "easel.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif #ifdef eslAUGMENT_DMATRIX #include "esl_dmatrix.h" #endif #ifdef eslAUGMENT_RANDOM #include "esl_random.h" #endif #include "esl_distance.h" /* Forward declaration of our static functions. */ static int jukescantor(int n1, int n2, int alphabet_size, double *opt_distance, double *opt_variance); /***************************************************************** * 1. Pairwise distances for aligned text sequences. *****************************************************************/ /* Function: esl_dst_CPairId() * Synopsis: Pairwise identity of two aligned text strings. * Incept: SRE, Mon Apr 17 20:06:07 2006 [St. Louis] * * Purpose: Calculates pairwise fractional identity between two * aligned character strings and . * Return this distance in ; return the * number of identities counted in ; and * return the denominator in * . * * Alphabetic symbols <[a-zA-Z]> are compared * case-insensitively for identity. Any nonalphabetic * character is assumed to be a gap symbol. * * This simple comparison rule is unaware of synonyms and * degeneracies in biological alphabets. For a more * sophisticated and biosequence-aware comparison, use * digitized sequences and the function * instead. Note that currently does * not correctly handle degeneracies, but is set up to. * * Args: asq1 - aligned character string 1 * asq2 - aligned character string 2 * opt_pid - optRETURN: pairwise identity, 0<=x<=1 * opt_nid - optRETURN: # of identities * opt_n - optRETURN: denominator MIN(len1,len2) * * Returns: on success. , , * contain the answers (for whichever were passed non-NULL). * * Throws: if the strings are different lengths * (not aligned). */ int esl_dst_CPairId(const char *asq1, const char *asq2, double *opt_pid, int *opt_nid, int *opt_n) { int status; int idents; /* total identical positions */ int len1, len2; /* lengths of seqs */ int i; /* position in aligned seqs */ idents = len1 = len2 = 0; for (i = 0; asq1[i] != '\0' && asq2[i] != '\0'; i++) { if (isalpha(asq1[i])) len1++; if (isalpha(asq2[i])) len2++; if (isalpha(asq1[i]) && isalpha(asq2[i]) && toupper(asq1[i]) == toupper(asq2[i])) idents++; } if (asq1[i] != '\0' || asq2[i] != '\0') ESL_XEXCEPTION(eslEINVAL, "strings not same length, not aligned"); if (opt_pid != NULL) *opt_pid = ( len1==0 ? 0. : (double) idents / (double) ESL_MIN(len1,len2)); if (opt_nid != NULL) *opt_nid = idents; if (opt_n != NULL) *opt_n = len1; return eslOK; ERROR: if (opt_pid != NULL) *opt_pid = 0.; if (opt_nid != NULL) *opt_nid = 0; if (opt_n != NULL) *opt_n = 0; return status; } /* Function: esl_dst_CJukesCantor() * Synopsis: Jukes-Cantor distance for two aligned strings. * Incept: SRE, Tue Apr 18 14:00:37 2006 [St. Louis] * * Purpose: Calculate the generalized Jukes-Cantor distance between * two aligned character strings and , in * substitutions/site, for an alphabet of residues * ( for nucleic acid, for proteins). The * maximum likelihood estimate for the distance is * optionally returned in . The large-sample * variance for the distance estimate is * optionally returned in . * * Alphabetic symbols <[a-zA-Z]> are compared * case-insensitively to count the number of identities * () and mismatches (>). Any nonalphabetic * character is assumed to be a gap symbol, and aligned * columns containing gap symbols are ignored. The * fractional difference used to calculate the * Jukes/Cantor distance is . * * Args: K - size of the alphabet (4 or 20) * as1 - 1st aligned seq, 0..L-1, \0-terminated * as2 - 2nd aligned seq, 0..L-1, \0-terminated * opt_distance - optRETURN: ML estimate of distance d * opt_variance - optRETURN: large-sample variance of d * * Returns: on success. * * Infinite distances are possible, in which case distance * and variance are both . Caller has to deal * with this case as it sees fit, perhaps by enforcing * an arbitrary maximum distance. * * Throws: if the two strings aren't the same length (and * thus can't have been properly aligned). * if no aligned residues were counted. * On either failure, distance and variance are both returned * as . */ int esl_dst_CJukesCantor(int K, const char *as1, const char *as2, double *opt_distance, double *opt_variance) { int status; int n1, n2; /* number of observed identities, substitutions */ int i; /* position in aligned seqs */ /* 1. Count identities, mismatches. */ n1 = n2 = 0; for (i = 0; as1[i] != '\0' && as2[i] != '\0'; i++) { if (isalpha(as1[i]) && isalpha(as2[i])) { if (toupper(as1[i]) == toupper(as2[i])) n1++; else n2++; } } if (as1[i] != '\0' || as2[i] != '\0') ESL_XEXCEPTION(eslEINVAL, "strings not same length, not aligned"); return jukescantor(n1, n2, K, opt_distance, opt_variance); /* can throw eslEDIVZERO */ ERROR: if (opt_distance != NULL) *opt_distance = HUGE_VAL; if (opt_variance != NULL) *opt_variance = HUGE_VAL; return status; } /*------- end, pairwise distances for aligned text seqs ---------*/ /***************************************************************** * 2. Pairwise distances for aligned digitized sequences. [alphabet] *****************************************************************/ #ifdef eslAUGMENT_ALPHABET /* Function: esl_dst_XPairId() * Synopsis: Pairwise identity of two aligned digital seqs. * Incept: SRE, Tue Apr 18 09:24:05 2006 [St. Louis] * * Purpose: Digital version of : and * are digitized aligned sequences, in alphabet * . Otherwise, same as except * that only canonical residues are counted and checked for * identity, while (which has no * alphabet) counts and checks identity of all alphanumeric * characters. * * This function does not use to handle * degeneracies but it is set up to do so. Doing that would * require that be changed to a float or double, * or its meaning be changed to be the number of canonical * identities. * * Args: abc - digital alphabet in use * ax1 - aligned digital seq 1 * ax2 - aligned digital seq 2 * opt_pid - optRETURN: pairwise identity, 0<=x<=1 * opt_nid - optRETURN: # of identities * opt_n - optRETURN: denominator MIN(len1,len2) * * Returns: on success. , , * contain the answers, for any of these that were passed * non- pointers. * * Throws: if the strings are different lengths (not aligned). */ int esl_dst_XPairId(const ESL_ALPHABET *abc, const ESL_DSQ *ax1, const ESL_DSQ *ax2, double *opt_distance, int *opt_nid, int *opt_n) { int status; int idents; /* total identical positions */ int len1, len2; /* lengths of seqs */ int i; /* position in aligned seqs */ idents = len1 = len2 = 0; for (i = 1; ax1[i] != eslDSQ_SENTINEL && ax2[i] != eslDSQ_SENTINEL; i++) { if (esl_abc_XIsCanonical(abc, ax1[i])) len1++; if (esl_abc_XIsCanonical(abc, ax2[i])) len2++; if (esl_abc_XIsCanonical(abc, ax1[i]) && esl_abc_XIsCanonical(abc, ax2[i]) && ax1[i] == ax2[i]) idents++; } if (len2 < len1) len1 = len2; if (ax1[i] != eslDSQ_SENTINEL || ax2[i] != eslDSQ_SENTINEL) ESL_XEXCEPTION(eslEINVAL, "strings not same length, not aligned"); if (opt_distance != NULL) *opt_distance = ( len1==0 ? 0. : (double) idents / (double) len1 ); if (opt_nid != NULL) *opt_nid = idents; if (opt_n != NULL) *opt_n = len1; return eslOK; ERROR: if (opt_distance != NULL) *opt_distance = 0.; if (opt_nid != NULL) *opt_nid = 0; if (opt_n != NULL) *opt_n = 0; return status; } /* Function: esl_dst_XJukesCantor() * Synopsis: Jukes-Cantor distance for two aligned digitized seqs. * Incept: SRE, Tue Apr 18 15:26:51 2006 [St. Louis] * * Purpose: Calculate the generalized Jukes-Cantor distance between two * aligned digital strings and , in substitutions/site, * using alphabet to evaluate identities and differences. * The maximum likelihood estimate for the distance is optionally returned in * . The large-sample variance for the distance * estimate is optionally returned in . * * Identical to , except that it takes * digital sequences instead of character strings. * * Args: abc - bioalphabet to use for comparisons * ax - 1st digital aligned seq * ay - 2nd digital aligned seq * opt_distance - optRETURN: ML estimate of distance d * opt_variance - optRETURN: large-sample variance of d * * Returns: on success. As in , the * distance and variance may be infinite, in which case they * are returned as . * * Throws: if the two strings aren't the same length (and * thus can't have been properly aligned). * if no aligned residues were counted. * On either failure, the distance and variance are set * to . */ int esl_dst_XJukesCantor(const ESL_ALPHABET *abc, const ESL_DSQ *ax, const ESL_DSQ *ay, double *opt_distance, double *opt_variance) { int status; int n1, n2; /* number of observed identities, substitutions */ int i; /* position in aligned seqs */ n1 = n2 = 0; for (i = 1; ax[i] != eslDSQ_SENTINEL && ay[i] != eslDSQ_SENTINEL; i++) { if (esl_abc_XIsCanonical(abc, ax[i]) && esl_abc_XIsCanonical(abc, ay[i])) { if (ax[i] == ay[i]) n1++; else n2++; } } if (ax[i] != eslDSQ_SENTINEL || ay[i] != eslDSQ_SENTINEL) ESL_XEXCEPTION(eslEINVAL, "strings not same length, not aligned"); return jukescantor(n1, n2, abc->K, opt_distance, opt_variance); ERROR: if (opt_distance != NULL) *opt_distance = HUGE_VAL; if (opt_variance != NULL) *opt_variance = HUGE_VAL; return status; } #endif /*eslAUGMENT_ALPHABET*/ /*---------- end pairwise distances, digital seqs --------------*/ /***************************************************************** * 3. Distance matrices for aligned text sequences. *****************************************************************/ #ifdef eslAUGMENT_DMATRIX /* Function: esl_dst_CPairIdMx() * Synopsis: NxN identity matrix for N aligned text sequences. * Incept: SRE, Thu Apr 27 08:46:08 2006 [New York] * * Purpose: Given a multiple sequence alignment , consisting * of aligned character strings; calculate * a symmetric fractional pairwise identity matrix by $N(N-1)/2$ * calls to , and return it in * . * * Args: as - aligned seqs (all same length), [0..N-1] * N - # of aligned sequences * ret_S - RETURN: symmetric fractional identity matrix * * Returns: on success, and contains the fractional * identity matrix. Caller free's with * . * * Throws: if a seq has a different * length than others. On failure, is returned * and state of inputs is unchanged. */ int esl_dst_CPairIdMx(char **as, int N, ESL_DMATRIX **ret_S) { ESL_DMATRIX *S = NULL; int status; int i,j; if (( S = esl_dmatrix_Create(N,N) ) == NULL) goto ERROR; for (i = 0; i < N; i++) { S->mx[i][i] = 1.; for (j = i+1; j < N; j++) { status = esl_dst_CPairId(as[i], as[j], &(S->mx[i][j]), NULL, NULL); if (status != eslOK) ESL_XEXCEPTION(status, "Pairwise identity calculation failed at seqs %d,%d\n", i,j); S->mx[j][i] = S->mx[i][j]; } } if (ret_S != NULL) *ret_S = S; else esl_dmatrix_Destroy(S); return eslOK; ERROR: if (S != NULL) esl_dmatrix_Destroy(S); if (ret_S != NULL) *ret_S = NULL; return status; } /* Function: esl_dst_CDiffMx() * Synopsis: NxN difference matrix for N aligned text sequences. * Incept: SRE, Fri Apr 28 06:27:20 2006 [New York] * * Purpose: Same as , but calculates * the fractional difference instead of the * fractional identity for each pair. * * Args: as - aligned seqs (all same length), [0..N-1] * N - # of aligned sequences * ret_D - RETURN: symmetric fractional difference matrix * * Returns: on success, and contains the * fractional difference matrix. Caller free's with * . * * Throws: if any seq has a different * length than others. On failure, is returned * and state of inputs is unchanged. */ int esl_dst_CDiffMx(char **as, int N, ESL_DMATRIX **ret_D) { ESL_DMATRIX *D = NULL; int status; int i,j; status = esl_dst_CPairIdMx(as, N, &D); if (status != eslOK) goto ERROR; for (i = 0; i < N; i++) { D->mx[i][i] = 0.; for (j = i+1; j < N; j++) { D->mx[i][j] = 1. - D->mx[i][j]; D->mx[j][i] = D->mx[i][j]; } } if (ret_D != NULL) *ret_D = D; else esl_dmatrix_Destroy(D); return eslOK; ERROR: if (D != NULL) esl_dmatrix_Destroy(D); if (ret_D != NULL) *ret_D = NULL; return status; } /* Function: esl_dst_CJukesCantorMx() * Synopsis: NxN Jukes/Cantor distance matrix for N aligned text seqs. * Incept: SRE, Tue Apr 18 16:00:16 2006 [St. Louis] * * Purpose: Given a multiple sequence alignment , consisting of * aligned character sequences in an alphabet of * letters (usually 4 for DNA, 20 for protein); * calculate a symmetric Jukes/Cantor pairwise distance * matrix for all sequence pairs, and optionally return the distance * matrix in , and optionally return a symmetric matrix of the * large-sample variances for those ML distance estimates * in . * * Infinite distances (and variances) are possible; they * are represented as in and . Caller must * be prepared to deal with them as appropriate. * * Args: K - size of the alphabet (usually 4 or 20) * aseq - aligned sequences [0.nseq-1][0..L-1] * nseq - number of aseqs * opt_D - optRETURN: [0..nseq-1]x[0..nseq-1] symmetric distance mx * opt_V - optRETURN: matrix of variances. * * Returns: on success. and contain the * distance matrix (and variances); caller frees these with * . * * Throws: if any pair of sequences have differing lengths * (and thus cannot have been properly aligned). * if some pair of sequences had no aligned * residues. On failure, and are both returned * and state of inputs is unchanged. */ int esl_dst_CJukesCantorMx(int K, char **aseq, int nseq, ESL_DMATRIX **opt_D, ESL_DMATRIX **opt_V) { int status; ESL_DMATRIX *D = NULL; ESL_DMATRIX *V = NULL; int i,j; if (( D = esl_dmatrix_Create(nseq, nseq) ) == NULL) goto ERROR; if (( V = esl_dmatrix_Create(nseq, nseq) ) == NULL) goto ERROR; for (i = 0; i < nseq; i++) { D->mx[i][i] = 0.; V->mx[i][i] = 0.; for (j = i+1; j < nseq; j++) { status = esl_dst_CJukesCantor(K, aseq[i], aseq[j], &(D->mx[i][j]), &(V->mx[i][j])); if (status != eslOK) ESL_XEXCEPTION(status, "J/C calculation failed at seqs %d,%d", i,j); D->mx[j][i] = D->mx[i][j]; V->mx[j][i] = V->mx[i][j]; } } if (opt_D != NULL) *opt_D = D; else esl_dmatrix_Destroy(D); if (opt_V != NULL) *opt_V = V; else esl_dmatrix_Destroy(V); return eslOK; ERROR: if (D != NULL) esl_dmatrix_Destroy(D); if (V != NULL) esl_dmatrix_Destroy(V); if (opt_D != NULL) *opt_D = NULL; if (opt_V != NULL) *opt_V = NULL; return status; } #endif /*eslAUGMENT_DMATRIX*/ /*----------- end, distance matrices for aligned text seqs ---------*/ /***************************************************************** * 4. Distance matrices for aligned digital sequences. *****************************************************************/ #if defined(eslAUGMENT_ALPHABET) && defined(eslAUGMENT_DMATRIX) /* Function: esl_dst_XPairIdMx() * Synopsis: NxN identity matrix for N aligned digital seqs. * Incept: SRE, Thu Apr 27 09:08:11 2006 [New York] * * Purpose: Given a digitized multiple sequence alignment , consisting * of aligned digital sequences in alphabet ; calculate * a symmetric pairwise fractional identity matrix by $N(N-1)/2$ * calls to , and return it in . * * Args: abc - digital alphabet in use * ax - aligned dsq's, [0..N-1][1..alen] * N - number of aligned sequences * ret_S - RETURN: NxN matrix of fractional identities * * Returns: on success, and contains the distance * matrix. Caller is obligated to free with * . * * Throws: if a seq has a different * length than others. On failure, is returned * and state of inputs is unchanged. */ int esl_dst_XPairIdMx(const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, ESL_DMATRIX **ret_S) { int status; ESL_DMATRIX *S = NULL; int i,j; if (( S = esl_dmatrix_Create(N,N) ) == NULL) goto ERROR; for (i = 0; i < N; i++) { S->mx[i][i] = 1.; for (j = i+1; j < N; j++) { status = esl_dst_XPairId(abc, ax[i], ax[j], &(S->mx[i][j]), NULL, NULL); if (status != eslOK) ESL_XEXCEPTION(status, "Pairwise identity calculation failed at seqs %d,%d\n", i,j); S->mx[j][i] = S->mx[i][j]; } } if (ret_S != NULL) *ret_S = S; else esl_dmatrix_Destroy(S); return eslOK; ERROR: if (S != NULL) esl_dmatrix_Destroy(S); if (ret_S != NULL) *ret_S = NULL; return status; } /* Function: esl_dst_XDiffMx() * Synopsis: NxN difference matrix for N aligned digital seqs. * Incept: SRE, Fri Apr 28 06:37:29 2006 [New York] * * Purpose: Same as , but calculates fractional * difference <1-s> instead of fractional identity for * each pair. * * Args: abc - digital alphabet in use * ax - aligned dsq's, [0..N-1][1..alen] * N - number of aligned sequences * ret_D - RETURN: NxN matrix of fractional differences * * Returns: on success, and contains the difference * matrix; caller is obligated to free with * . * * Throws: if a seq has a different * length than others. On failure, is returned * and state of inputs is unchanged. */ int esl_dst_XDiffMx(const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, ESL_DMATRIX **ret_D) { int status; ESL_DMATRIX *D = NULL; int i,j; status = esl_dst_XPairIdMx(abc, ax, N, &D); if (status != eslOK) goto ERROR; for (i = 0; i < N; i++) { D->mx[i][i] = 0.; for (j = i+1; j < N; j++) { D->mx[i][j] = 1. - D->mx[i][j]; D->mx[j][i] = D->mx[i][j]; } } if (ret_D != NULL) *ret_D = D; else esl_dmatrix_Destroy(D); return eslOK; ERROR: if (D != NULL) esl_dmatrix_Destroy(D); if (ret_D != NULL) *ret_D = NULL; return status; } /* Function: esl_dst_XJukesCantorMx() * Synopsis: NxN Jukes/Cantor distance matrix for N aligned digital seqs. * Incept: SRE, Thu Apr 27 08:38:08 2006 [New York City] * * Purpose: Given a digitized multiple sequence alignment , * consisting of aligned digital sequences in * bioalphabet , calculate a symmetric Jukes/Cantor * pairwise distance matrix for all sequence pairs; * optionally return the distance matrix in and * a matrix of the large-sample variances for those ML distance * estimates in . * * Infinite distances (and variances) are possible. They * are represented as in and . Caller must * be prepared to deal with them as appropriate. * * Args: abc - bioalphabet for * ax - aligned digital sequences [0.nseq-1][1..L] * nseq - number of aseqs * opt_D - optRETURN: [0..nseq-1]x[0..nseq-1] symmetric distance mx * opt_V - optRETURN: matrix of variances. * * Returns: on success. (and optionally ) contain the * distance matrix (and variances). Caller frees these with * . * * Throws: if any pair of sequences have differing lengths * (and thus cannot have been properly aligned). * if some pair of sequences had no aligned * residues. On failure, and are both returned * and state of inputs is unchanged. */ int esl_dst_XJukesCantorMx(const ESL_ALPHABET *abc, ESL_DSQ **ax, int nseq, ESL_DMATRIX **opt_D, ESL_DMATRIX **opt_V) { ESL_DMATRIX *D = NULL; ESL_DMATRIX *V = NULL; int status; int i,j; if (( D = esl_dmatrix_Create(nseq, nseq) ) == NULL) goto ERROR; if (( V = esl_dmatrix_Create(nseq, nseq) ) == NULL) goto ERROR; for (i = 0; i < nseq; i++) { D->mx[i][i] = 0.; V->mx[i][i] = 0.; for (j = i+1; j < nseq; j++) { status = esl_dst_XJukesCantor(abc, ax[i], ax[j], &(D->mx[i][j]), &(V->mx[i][j])); if (status != eslOK) ESL_XEXCEPTION(status, "J/C calculation failed at digital aseqs %d,%d", i,j); D->mx[j][i] = D->mx[i][j]; V->mx[j][i] = V->mx[i][j]; } } if (opt_D != NULL) *opt_D = D; else esl_dmatrix_Destroy(D); if (opt_V != NULL) *opt_V = V; else esl_dmatrix_Destroy(V); return eslOK; ERROR: if (D != NULL) esl_dmatrix_Destroy(D); if (V != NULL) esl_dmatrix_Destroy(V); if (opt_D != NULL) *opt_D = NULL; if (opt_V != NULL) *opt_V = NULL; return status; } #endif /*eslAUGMENT_ALPHABET && eslAUGMENT_DMATRIX*/ /*------- end, distance matrices for digital alignments ---------*/ /***************************************************************** * 5. Average pairwise identity for multiple alignments *****************************************************************/ #ifdef eslAUGMENT_RANDOM /* Function: esl_dst_CAverageId() * Synopsis: Calculate avg identity for multiple alignment * Incept: SRE, Fri May 18 15:02:38 2007 [Janelia] * * Purpose: Calculates the average pairwise fractional identity in * a multiple sequence alignment , consisting of * aligned character sequences of identical length. * * If an exhaustive calculation would require more than * pairwise comparisons, then instead of * looking at all pairs, calculate the average over a * stochastic sample of random pairs. * This allows the routine to work efficiently even on very * deep MSAs. * * Each fractional pairwise identity (range $[0..$ pid $..1]$ * is calculated using . * * Returns: on success, and <*ret_id> contains the average * fractional identity. * * Throws: on allocation failure. * if any of the aligned sequence pairs aren't * of the same length. * In either case, <*ret_id> is set to 0. */ int esl_dst_CAverageId(char **as, int N, int max_comparisons, double *ret_id) { int status; double id; double sum = 0.; int i,j,n; if (N <= 1) { *ret_id = 1.; return eslOK; } *ret_id = 0.; /* Is nseq small enough that we can average over all pairwise comparisons? */ if ((N * (N-1) / 2) <= max_comparisons) { for (i = 0; i < N; i++) for (j = i+1; j < N; j++) { if ((status = esl_dst_CPairId(as[i], as[j], &id, NULL, NULL)) != eslOK) return status; sum += id; } sum /= (double) (N * (N-1) / 2); } /* If nseq is large, calculate average over a stochastic sample. */ else { ESL_RANDOMNESS *r = esl_randomness_Create(0); for (n = 0; n < max_comparisons; n++) { do { i = esl_rnd_Roll(r, N); j = esl_rnd_Roll(r, N); } while (j == i); /* make sure j != i */ if ((status = esl_dst_CPairId(as[i], as[j], &id, NULL, NULL)) != eslOK) return status; sum += id; } sum /= (double) max_comparisons; esl_randomness_Destroy(r); } *ret_id = sum; return eslOK; } #endif /* eslAUGMENT_RANDOM */ #if defined(eslAUGMENT_RANDOM) && defined(eslAUGMENT_ALPHABET) /* Function: esl_dst_XAverageId() * Synopsis: Calculate avg identity for digital MSA * Incept: SRE, Fri May 18 15:19:14 2007 [Janelia] * * Purpose: Calculates the average pairwise fractional identity in * a digital multiple sequence alignment , consisting of * aligned digital sequences of identical length. * * If an exhaustive calculation would require more than * pairwise comparisons, then instead of * looking at all pairs, calculate the average over a * stochastic sample of random pairs. * This allows the routine to work efficiently even on very * deep MSAs. * * Each fractional pairwise identity (range $[0..$ pid $..1]$ * is calculated using . * * Returns: on success, and <*ret_id> contains the average * fractional identity. * * Throws: on allocation failure. * if any of the aligned sequence pairs aren't * of the same length. * In either case, <*ret_id> is set to 0. */ int esl_dst_XAverageId(const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, int max_comparisons, double *ret_id) { int status; double id; double sum = 0.; int i,j,n; if (N <= 1) { *ret_id = 1.; return eslOK; } *ret_id = 0.; /* Is N small enough that we can average over all pairwise comparisons? watch out for numerical overflow in this: Pfam N's easily overflow when squared */ if (N <= max_comparisons && N <= sqrt(2. * max_comparisons) && (N * (N-1) / 2) <= max_comparisons) { for (i = 0; i < N; i++) for (j = i+1; j < N; j++) { if ((status = esl_dst_XPairId(abc, ax[i], ax[j], &id, NULL, NULL)) != eslOK) return status; sum += id; } sum /= (double) (N * (N-1) / 2); } /* If nseq is large, calculate average over a stochastic sample. */ else { ESL_RANDOMNESS *r = esl_randomness_Create(0); for (n = 0; n < max_comparisons; n++) { do { i = esl_rnd_Roll(r, N); j = esl_rnd_Roll(r, N); } while (j == i); /* make sure j != i */ if ((status = esl_dst_XPairId(abc, ax[i], ax[j], &id, NULL, NULL)) != eslOK) return status; sum += id; } sum /= (double) max_comparisons; esl_randomness_Destroy(r); } *ret_id = sum; return eslOK; } #endif /* eslAUGMENT_RANDOM && eslAUGMENT_ALPHABET */ /***************************************************************** * 6. Private (static) functions *****************************************************************/ /* jukescantor() * * The generalized Jukes/Cantor distance calculation. * Given identities and differences, for a * base alphabet size of (4 or 20); * calculate J/C distance in substitutions/site and * return it in ; calculate large-sample * variance and return it in . * * Returns if there are no data (). */ static int jukescantor(int n1, int n2, int alphabet_size, double *opt_distance, double *opt_variance) { int status; double D, K, N; double x; double distance, variance; ESL_DASSERT1( (n1 >= 0) ); ESL_DASSERT1( (n2 >= 0) ); ESL_DASSERT1( (alphabet_size >= 0) ); if (n1+n2 == 0) { status = eslEDIVZERO; goto ERROR; } K = (double) alphabet_size; D = (double) n2 / (double) (n1+n2); N = (double) (n1+n2); x = 1. - D * K/(K-1.); if (x <= 0.) { distance = HUGE_VAL; variance = HUGE_VAL; } else { distance = -log(x) * K/(K-1); variance = exp( 2.*K*distance/(K-1) ) * D * (1.-D) / N; } if (opt_distance != NULL) *opt_distance = distance; if (opt_variance != NULL) *opt_variance = variance; return eslOK; ERROR: if (opt_distance != NULL) *opt_distance = HUGE_VAL; if (opt_variance != NULL) *opt_variance = HUGE_VAL; return status; } /*--------------- end of private functions ----------------------*/ /***************************************************************** * 7. Unit tests. *****************************************************************/ #ifdef eslDISTANCE_TESTDRIVE /* Each unit test is given an alignment with certain known * properties: * seqs 0,1 are identical * seqs 0,2 are completely different * seqs 3..N are random * The alignment may contain gaps, so don't assume that the * # of compared residues == alignment length. The alignment * contains only canonical residues, because one of our tests * is that C and X functions give the same results. */ static int utest_CPairId(char **as, int N) { double pid; int nid; int nres; int L; int i,j; /* Self comparison gives identity = 1. */ L = strlen(as[0]); if (esl_dst_CPairId(as[0], as[0], &pid, &nid, &nres) != eslOK) abort(); if (pid != 1.0 || nid != L || nres > L) abort(); /* So does 0,1 comparison */ if (esl_dst_CPairId(as[0], as[1], &pid, &nid, &nres) != eslOK) abort(); if (pid != 1.0 || nid != L || nres > L) abort(); /* 0,2 comparison gives 0.0, 0 */ if (esl_dst_CPairId(as[0], as[2], &pid, &nid, &nres) != eslOK) abort(); if (pid != 0.0 || nid != 0 || nres > L) abort(); /* remaining comparisons shouldn't fail */ for (i = 3; i < N; i++) for (j = i; j < N; j++) { if (esl_dst_CPairId(as[i], as[j], &pid, &nid, &nres) != eslOK) abort(); if (pid < 0. || pid > 1. || nid < 0 || nid > L || nres > L) abort(); } /* API should accept NULL for return values */ if (esl_dst_CPairId(as[0], as[0], NULL, NULL, NULL) != eslOK) abort(); return eslOK; } static int utest_CJukesCantor(int K, char **as, int N) { double d, V; int i,j; /* Self comparison gives distance = 0. */ if (esl_dst_CJukesCantor(K, as[0], as[0], &d, &V) != eslOK) abort(); if (d != 0.0) abort(); /* So does 0,1 comparison */ if (esl_dst_CJukesCantor(K, as[0], as[1], &d, &V) != eslOK) abort(); if (d != 0.0) abort(); /* 0,2 comparison gives infinite distance (HUGE_VAL) */ if (esl_dst_CJukesCantor(K, as[0], as[2], &d, &V) != eslOK) abort(); if (d != HUGE_VAL) abort(); /* remaining comparisons shouldn't fail */ for (i = 3; i < N; i++) for (j = i; j < N; j++) if (esl_dst_CJukesCantor(K, as[i], as[j], &d, &V) != eslOK) abort(); /* API should accept NULL for return values */ if (esl_dst_CJukesCantor(K, as[0], as[0], NULL, NULL) != eslOK) abort(); return eslOK; } #ifdef eslAUGMENT_ALPHABET static int utest_XPairId(ESL_ALPHABET *abc, char **as, ESL_DSQ **ax, int N) { double pid, pid2; int nid, nid2; int nres, nres2; int dL, L; int i,j; /* Self comparison gives identity = 1. */ dL = esl_abc_dsqlen(ax[0]); L = strlen(as[0]); if (dL != L) abort(); if (esl_dst_XPairId(abc, ax[0], ax[0], &pid, &nid, &nres) != eslOK) abort(); if (pid != 1.0 || nid != L || nres > dL) abort(); /* So does 0,1 comparison */ if (esl_dst_XPairId(abc, ax[0], ax[1], &pid, &nid, &nres) != eslOK) abort(); if (pid != 1.0 || nid != L || nres > L) abort(); /* 0,2 comparison gives 0.0, 0 */ if (esl_dst_XPairId(abc, ax[0], ax[2], &pid, &nid, &nres) != eslOK) abort(); if (pid != 0.0 || nid != 0 || nres > L) abort(); /* remaining comparisons shouldn't fail, and should be identical to text mode */ for (i = 3; i < N; i++) for (j = i; j < N; j++) { if (esl_dst_XPairId(abc, ax[i], ax[j], &pid, &nid, &nres) != eslOK) abort(); if (esl_dst_CPairId(as[i], as[j], &pid2, &nid2, &nres2) != eslOK) abort(); if (pid < 0. || pid > 1. || nid < 0 || nid > L || nres > L) abort(); if (pid != pid2 || nid != nid2 || nres != nres2) abort(); } /* API should accept NULL for return values */ if (esl_dst_XPairId(abc, ax[0], ax[0], NULL, NULL, NULL) != eslOK) abort(); return eslOK; } static int utest_XJukesCantor(ESL_ALPHABET *abc, char **as, ESL_DSQ **ax, int N) { double d, V; int i,j; /* Self comparison gives distance = 0. */ if (esl_dst_XJukesCantor(abc, ax[0], ax[0], &d, &V) != eslOK) abort(); if (d != 0.0) abort(); /* So does 0,1 comparison */ if (esl_dst_XJukesCantor(abc, ax[0], ax[1], &d, &V) != eslOK) abort(); if (d != 0.0) abort(); /* 0,2 comparison gives infinite distance (HUGE_VAL) */ if (esl_dst_XJukesCantor(abc, ax[0], ax[2], &d, &V) != eslOK) abort(); if (d != HUGE_VAL) abort(); /* remaining comparisons shouldn't fail */ for (i = 3; i < N; i++) for (j = i; j < N; j++) if (esl_dst_XJukesCantor(abc, ax[i], ax[j], &d, &V) != eslOK) abort(); /* API should accept NULL for return values */ if (esl_dst_XJukesCantor(abc, ax[0], ax[0], NULL, NULL) != eslOK) abort(); return eslOK; } #endif /*eslAUGMENT_ALPHABET*/ #ifdef eslAUGMENT_DMATRIX static int utest_CPairIdMx(char **as, int N) { ESL_DMATRIX *S; int i,j; double pid; if (esl_dst_CPairIdMx(as, N, &S) != eslOK) abort(); for (i = 0; i < N; i++) if (S->mx[i][i] != 1.0) abort(); pid = 0.; for (i = 3; i < N; i++) for (j = i+1; j < N; j++) pid += S->mx[i][j]; pid /= (double) ((N-3) * (N-4) / 2); /* first 3 don't count */ if (pid < 0.15 || pid > 0.35) abort(); /* should be 0.25 */ esl_dmatrix_Destroy(S); return eslOK; } static int utest_CDiffMx(char **as, int N) { ESL_DMATRIX *D; int i,j; double diff; if (esl_dst_CDiffMx(as, N, &D) != eslOK) abort(); for (i = 0; i < N; i++) if (D->mx[i][i] != 0.0) abort(); diff = 0.; for (i = 3; i < N; i++) for (j = i+1; j < N; j++) diff += D->mx[i][j]; diff /= (double) ((N-3) * (N-4) / 2); /* first 3 don't count */ if (diff < 0.65 || diff > 0.85) abort(); /* should be 0.75 */ esl_dmatrix_Destroy(D); return eslOK; } static int utest_CJukesCantorMx(int K, char **as, int N) { ESL_DMATRIX *D, *V; /* just a crash test */ if (esl_dst_CJukesCantorMx(K, as, N, &D, &V) != eslOK) abort(); esl_dmatrix_Destroy(D); esl_dmatrix_Destroy(V); return eslOK; } #endif /*eslAUGMENT_DMATRIX*/ #if defined (eslAUGMENT_ALPHABET) && defined (eslAUGMENT_DMATRIX) static int utest_XPairIdMx(ESL_ALPHABET *abc, char **as, ESL_DSQ **ax, int N) { ESL_DMATRIX *S, *S2; int i, j; if (esl_dst_XPairIdMx(abc, ax, N, &S) != eslOK) abort(); if (esl_dst_CPairIdMx(as, N, &S2) != eslOK) abort(); for (i = 0; i < N; i++) for (j = i; j < N; j++) if (fabs(S->mx[i][j] - S2->mx[j][i]) > 0.01) abort(); esl_dmatrix_Destroy(S); esl_dmatrix_Destroy(S2); return eslOK; } static int utest_XDiffMx(ESL_ALPHABET *abc, char **as, ESL_DSQ **ax, int N) { ESL_DMATRIX *D, *D2; int i, j; if (esl_dst_XDiffMx(abc, ax, N, &D) != eslOK) abort(); if (esl_dst_CDiffMx(as, N, &D2) != eslOK) abort(); for (i = 0; i < N; i++) for (j = i; j < N; j++) if (fabs(D->mx[i][j] - D2->mx[j][i]) > 0.01) abort(); esl_dmatrix_Destroy(D); esl_dmatrix_Destroy(D2); return eslOK; } static int utest_XJukesCantorMx(ESL_ALPHABET *abc, char **as, ESL_DSQ **ax, int N) { ESL_DMATRIX *D, *D2, *V, *V2; int i, j; if (esl_dst_XJukesCantorMx(abc, ax, N, &D, &V) != eslOK) abort(); if (esl_dst_CJukesCantorMx(abc->K, as, N, &D2, &V2) != eslOK) abort(); for (i = 0; i < N; i++) for (j = i; j < N; j++) { if (fabs(D->mx[i][j] - D2->mx[j][i]) > 0.01) abort(); if (fabs(V->mx[i][j] - V2->mx[j][i]) > 0.01) abort(); } esl_dmatrix_Destroy(D); esl_dmatrix_Destroy(D2); esl_dmatrix_Destroy(V); esl_dmatrix_Destroy(V2); return eslOK; } #endif /*eslAUGMENT_ALPHABET && eslAUGMENT_DMATRIX*/ /*------------------ end of unit tests --------------------------*/ #endif /* eslDISTANCE_TESTDRIVE */ /***************************************************************** * 8. Test driver. *****************************************************************/ /* gcc -g -Wall -o testdriver -I. -DeslDISTANCE_TESTDRIVE esl_distance.c esl_getopts.c esl_random.c easel.c -lm gcc -g -Wall -o testdriver -I. -DeslDISTANCE_TESTDRIVE\ -DeslAUGMENT_ALPHABET \ esl_distance.c esl_getopts.c esl_random.c \ esl_alphabet.c easel.c -lm gcc -g -Wall -o testdriver -I. -DeslDISTANCE_TESTDRIVE\ -DeslAUGMENT_DMATRIX \ esl_distance.c esl_getopts.c esl_random.c \ esl_dmatrix.c easel.c -lm gcc -g -Wall -o testdriver -I. -DeslDISTANCE_TESTDRIVE\ -DeslALPHABET -DeslAUGMENT_DMATRIX \ esl_distance.c esl_getopts.c esl_random.c \ esl_alphabet.c esl_dmatrix.c easel.c -lm gcc -g -Wall -o testdriver -I. -L. -DeslDISTANCE_TESTDRIVE esl_distance.c -leasel -lm */ #ifdef eslDISTANCE_TESTDRIVE #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_distance.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif #ifdef eslAUGMENT_DMATRIX #include "esl_dmatrix.h" #endif static ESL_OPTIONS options[] = { /* name type def env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { "-N", eslARG_INT, "10", NULL,"n>3", NULL, NULL, NULL, "number of iid seqs in alignment",0}, { "-L", eslARG_INT, "50", NULL,"n>0", NULL, NULL, NULL, "length of seqs in alignment", 0}, { "--seed", eslARG_INT, "42", NULL,"n>=0",NULL, NULL, NULL, "random # seed", 0}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "Usage: ./testdrive-distance [-options]"; int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; ESL_RANDOMNESS *r = NULL; char **as = NULL; /* aligned character seqs (random, iid) */ int N,L; /* # of seqs, and their aligned lengths */ int seed; int i,j; int status; double p[4]; /* ACGT probabilities */ #ifdef eslAUGMENT_ALPHABET ESL_DSQ **ax = NULL; /* digitized alignment */ ESL_ALPHABET *abc = NULL; #endif /* Process command line */ go = esl_getopts_Create(options); esl_opt_ProcessCmdline(go, argc, argv); esl_opt_VerifyConfig(go); if (esl_opt_GetBoolean(go, "-h") == TRUE) { puts(usage); puts("\n where options are:"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* 0=all docgroups; 2=indentation; 80=width */ return 0; } L = esl_opt_GetInteger(go, "-L"); N = esl_opt_GetInteger(go, "-N"); seed = esl_opt_GetInteger(go, "--seed"); if (esl_opt_ArgNumber(go) != 0) { puts("Incorrect number of command line arguments."); puts(usage); return 1; } esl_getopts_Destroy(go); /* Create a random DNA alignment; * force it to obey the conventions of the unit tests: * 0,1 are identical * 0,2 are completely dissimilar */ r = esl_randomness_Create(seed); for (i = 0; i < 4; i++) p[i] = 0.25; ESL_ALLOC(as, sizeof(char *) * N); for (i = 0; i < N; i++) ESL_ALLOC(as[i], sizeof(char) * (L+1)); esl_rsq_IID(r, "ACGT", p, 4, L, as[0]); strcpy(as[1], as[0]); esl_rsq_IID(r, "ACGT", p, 4, L, as[2]); for (j = 0; j < L; j++) while (as[2][j] == as[0][j]) as[2][j] = "ACGT"[esl_rnd_Roll(r, 4)]; for (i = 3; i < N; i++) esl_rsq_IID(r, "ACGT", p, 4, L, as[i]); #ifdef eslAUGMENT_ALPHABET abc = esl_alphabet_Create(eslDNA); ESL_ALLOC(ax, sizeof(ESL_DSQ *) * N); for (i = 0; i < N; i++) esl_abc_CreateDsq(abc, as[i], &(ax[i])); #endif /*eslAUGMENT_ALPHABET*/ /* Unit tests */ if (utest_CPairId(as, N) != eslOK) return eslFAIL; if (utest_CJukesCantor(4, as, N) != eslOK) return eslFAIL; #ifdef eslAUGMENT_ALPHABET if (utest_XPairId(abc, as, ax, N) != eslOK) return eslFAIL; if (utest_XJukesCantor(abc, as, ax, N) != eslOK) return eslFAIL; #endif /*eslAUGMENT_ALPHABET*/ #ifdef eslAUGMENT_DMATRIX if (utest_CPairIdMx(as, N) != eslOK) return eslFAIL; if (utest_CDiffMx(as, N) != eslOK) return eslFAIL; if (utest_CJukesCantorMx(4, as, N) != eslOK) return eslFAIL; #endif /* eslAUGMENT_DMATRIX*/ #if defined (eslAUGMENT_ALPHABET) && defined (eslAUGMENT_DMATRIX) if (utest_XPairIdMx(abc, as, ax, N) != eslOK) return eslFAIL; if (utest_XDiffMx(abc, as, ax, N) != eslOK) return eslFAIL; if (utest_XJukesCantorMx(abc, as, ax, N) != eslOK) return eslFAIL; #endif esl_randomness_Destroy(r); esl_Free2D((void **) as, N); #ifdef eslAUGMENT_ALPHABET esl_alphabet_Destroy(abc); esl_Free2D((void **) ax, N); #endif return eslOK; ERROR: return eslFAIL; } #endif /*eslDISTANCE_TESTDRIVE*/ /***************************************************************** * 9. Example. *****************************************************************/ #ifdef eslDISTANCE_EXAMPLE /*::cexcerpt::distance_example::begin::*/ /* gcc -g -Wall -o example -I. -DeslDISTANCE_EXAMPLE esl_distance.c\ esl_dmatrix.c esl_msa.c easel.c -lm ./example */ #include "easel.h" #include "esl_distance.h" #include "esl_dmatrix.h" #include "esl_msa.h" int main(int argc, char **argv) { ESLX_MSAFILE *afp; ESL_MSA *msa; ESL_DMATRIX *P; int i,j; double min, avg, max; int status; if ((status = eslx_msafile_Open(NULL, argv[1], NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); if ((status = eslx_msafile_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); esl_dst_CPairIdMx(msa->aseq, msa->nseq, &P); min = 1.0; max = 0.0; avg = 0.0; for (i = 0; i < msa->nseq; i++) for (j = i+1; j < msa->nseq; j++) { avg += P->mx[i][j]; if (P->mx[i][j] < min) min = P->mx[i][j]; if (P->mx[i][j] > max) max = P->mx[i][j]; } avg /= (double) (msa->nseq * (msa->nseq-1) / 2); printf("Average pairwise %% id: %.1f%%\n", avg * 100.); printf("Minimum pairwise %% id: %.1f%%\n", min * 100.); printf("Maximum pairwise %% id: %.1f%%\n", max * 100.); esl_dmatrix_Destroy(P); esl_msa_Destroy(msa); eslx_msafile_Close(afp); return 0; } /*::cexcerpt::distance_example::end::*/ #endif /*eslDISTANCE_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_distance.c 887 2013-09-24 09:41:22Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_distance.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_histogram.c0000664361611702660230000020466712473612606016406 0ustar wheelerteddy/* Collecting and displaying histograms. * * 1. Creating/destroying histograms and collecting data. * 2. Declarations about the binned data before parameter fitting. * 3. Routines for accessing data samples in a full histogram. * 4. Setting expected counts * 5. Output and display of binned data. * 6. Test driver. * 7. Examples. */ #include "esl_config.h" #include #include #include #include #include #include "easel.h" #include "esl_stats.h" #include "esl_histogram.h" #include "esl_vectorops.h" static int esl_histogram_sort(ESL_HISTOGRAM *h); /***************************************************************** * 1. Creating/destroying histograms and collecting data. *****************************************************************/ /* Function: esl_histogram_Create() * Synopsis: Create a new . * * Purpose: Creates and returns a new histogram object, initially * allocated to count scores $>$ and $<=$ into * bins of width . Thus, a total of -/ bins * are initially created. * * The lower bound and the width permanently * determine the offset and width of the binning, but not * the range. For example, would init the object to collect scores into * 400 bins $[-100< x \leq -99.5],[-99.5 < x \leq * -99.0]...[99.5 and only * needs to be an initial guess. The histogram object will * reallocate itself dynamically as needed to accommodate * scores that exceed current bounds. * * You can be sloppy about ; it does not have to * exactly match a bin upper bound. The initial allocation * is for all full-width bins with upper bounds $\leq * xmax$. * * creates a simplified histogram * object that collates only the "display" histogram. For * a more complex object that also keeps the raw data samples, * better suited for fitting distributions and goodness-of-fit * testing, use . * * Args: bmin - caller guesses that minimum score will be > bmin * bmax - caller guesses that max score will be <= bmax * w - size of bins (1.0, for example) * * Returns: ptr to new object, which caller is responsible * for free'ing with . * * Throws: on allocation failure. */ ESL_HISTOGRAM * esl_histogram_Create(double bmin, double bmax, double w) { ESL_HISTOGRAM *h = NULL; int status; int i; ESL_ALLOC(h, sizeof(ESL_HISTOGRAM)); h->xmin = DBL_MAX; /* xmin/xmax are the observed min/max */ h->xmax = -DBL_MAX; h->n = 0; h->obs = NULL; /* will get allocated below... */ h->bmin = bmin; /* bmin/bmax are the allocated bounds */ h->bmax = bmax; h->nb = (int)((bmax-bmin)/w); h->imin = h->nb; h->imax = -1; h->w = w; h->x = NULL; h->nalloc = 0; h->phi = 0.; h->cmin = h->imin; /* sentinel: no observed data yet */ h->z = 0; h->Nc = 0; h->No = 0; h->expect = NULL; /* 'til a Set*() call */ h->emin = -1; /* sentinel: no expected counts yet */ h->tailbase = 0.; /* unused unless is_tailfit TRUE */ h->tailmass = 1.0; /* <= 1.0 if is_tailfit TRUE */ h->is_full = FALSE; h->is_done = FALSE; h->is_sorted = FALSE; h->is_tailfit = FALSE; h->is_rounded = FALSE; h->dataset_is = COMPLETE; ESL_ALLOC(h->obs, sizeof(uint64_t) * h->nb); for (i = 0; i < h->nb; i++) h->obs[i] = 0; return h; ERROR: esl_histogram_Destroy(h); return NULL; } /* Function: esl_histogram_CreateFull() * Synopsis: A to keep all data samples. * * Purpose: Alternative form of that * creates a more complex histogram that will contain not just the * display histogram, but also keeps track of all * the raw sample values. Having a complete vector of raw * samples improves distribution-fitting and goodness-of-fit * tests, but will consume more memory. */ ESL_HISTOGRAM * esl_histogram_CreateFull(double bmin, double bmax, double w) { int status; ESL_HISTOGRAM *h = esl_histogram_Create(bmin, bmax, w); if (h == NULL) return NULL; h->n = 0; /* make sure */ h->nalloc = 128; /* arbitrary initial allocation size */ ESL_ALLOC(h->x, sizeof(double) * h->nalloc); h->is_full = TRUE; return h; ERROR: esl_histogram_Destroy(h); return NULL; } /* Function: esl_histogram_Destroy() * Synopsis: Frees a . * * Purpose: Frees an object . */ void esl_histogram_Destroy(ESL_HISTOGRAM *h) { if (h == NULL) return; if (h->x != NULL) free(h->x); if (h->obs != NULL) free(h->obs); if (h->expect != NULL) free(h->expect); free(h); return; } /* Function: esl_histogram_Score2Bin() * Synopsis: Given a real-valued ; calculate integer bin * * Purpose: For a real-valued , figure out what bin it would * go into in the histogram ; return this value in * <*ret_b>. * * Returns: on success. * * Throws: if bin would exceed the range of * an integer; for instance, if isn't finite. * * Xref: J5/122. Replaces earlier macro implementation; * we needed to range check better. */ int esl_histogram_Score2Bin(ESL_HISTOGRAM *h, double x, int *ret_b) { int status; if (! isfinite(x)) ESL_XEXCEPTION(eslERANGE, "value added to histogram is not finite"); x = ceil( ((x - h->bmin) / h->w) - 1.); /* x is now the bin number as a double, which we will convert to * int. Because x is a double (64-bit), we know all ints are exactly * represented. Check for under/overflow before conversion. */ if (x < (double) INT_MIN || x > (double) INT_MAX) ESL_XEXCEPTION(eslERANGE, "value %f isn't going to fit in histogram", x); *ret_b = (int) x; return eslOK; ERROR: *ret_b = 0; return status; } /* Function: esl_histogram_Add() * Synopsis: Add a sample to the histogram. * * Purpose: Adds score to a histogram . * * The histogram will be automatically reallocated as * needed if the score is smaller or larger than the * current allocated bounds. * * Returns: on success. * * Throws: on reallocation failure. * * if is beyond the reasonable range for * the histogram to store -- either because it isn't finite, * or because the histogram would need to allocate a number * of bins that exceeds . * * Throws for cases where something has been done * to the histogram that requires it to be 'finished', and * adding more data is prohibited; for example, * if tail or censoring information has already been set. * On either failure, initial state of is preserved. */ int esl_histogram_Add(ESL_HISTOGRAM *h, double x) { int status; void *tmp; int b; /* what bin we're in */ int nnew; /* # of new bins created by a reallocation */ int bi; /* Censoring info must only be set on a finished histogram; * don't allow caller to add data after configuration has been declared */ if (h->is_done) ESL_EXCEPTION(eslEINVAL, "can't add more data to this histogram"); /* If we're a full histogram, check whether we need to reallocate * the full data vector. */ if (h->is_full && h->nalloc == h->n) { ESL_RALLOC(h->x, tmp, sizeof(double) * h->nalloc * 2); h->nalloc *= 2; } /* Which bin will we want to put x into? */ if ((status = esl_histogram_Score2Bin(h,x, &b)) != eslOK) return status; /* Make sure we have that bin. Realloc as needed. * If that reallocation succeeds, we can no longer fail; * so we can change the state of h. */ if (b < 0) /* Reallocate below? */ { nnew = -b*2; /* overallocate by 2x */ if (nnew > INT_MAX - h->nb) ESL_EXCEPTION(eslERANGE, "value %f requires unreasonable histogram bin number", x); ESL_RALLOC(h->obs, tmp, sizeof(uint64_t) * (nnew+ h->nb)); memmove(h->obs+nnew, h->obs, sizeof(uint64_t) * h->nb); h->nb += nnew; b += nnew; h->bmin -= nnew*h->w; h->imin += nnew; h->cmin += nnew; if (h->imax > -1) h->imax += nnew; for (bi = 0; bi < nnew; bi++) h->obs[bi] = 0; } else if (b >= h->nb) /* Reallocate above? */ { nnew = (b-h->nb+1) * 2; /* 2x overalloc */ if (nnew > INT_MAX - h->nb) ESL_EXCEPTION(eslERANGE, "value %f requires unreasonable histogram bin number", x); ESL_RALLOC(h->obs, tmp, sizeof(uint64_t) * (nnew+ h->nb)); for (bi = h->nb; bi < h->nb+nnew; bi++) h->obs[bi] = 0; if (h->imin == h->nb) { /* boundary condition of no data yet*/ h->imin+=nnew; h->cmin+=nnew; } h->bmax += nnew*h->w; h->nb += nnew; } /* If we're a full histogram, then we keep the raw x value, * reallocating as needed. */ if (h->is_full) h->x[h->n] = x; h->is_sorted = FALSE; /* not any more! */ /* Bump the bin counter, and all the data sample counters. */ h->obs[b]++; h->n++; h->Nc++; h->No++; if (b > h->imax) h->imax = b; if (b < h->imin) { h->imin = b; h->cmin = b; } if (x > h->xmax) h->xmax = x; if (x < h->xmin) h->xmin = x; return eslOK; ERROR: return status; } /* esl_histogram_sort() * * Purpose: Sort the raw scores in a full histogram, from smallest to * largest. Has no effect on a normal histogram, or on a full * histogram that is already sorted. * * Returns: on success. * Upon return, x[h->n-1]> is the high score, x[0]> is the * low score. */ int esl_histogram_sort(ESL_HISTOGRAM *h) { if (h->is_sorted) return eslOK; /* already sorted, don't do anything */ if (! h->is_full) return eslOK; /* nothing to sort */ esl_vec_DSortIncreasing(h->x, h->n); h->is_sorted = TRUE; return eslOK; } /***************************************************************** * 2. Declarations about the binned data before parameter fitting *****************************************************************/ /* Function: esl_histogram_DeclareCensoring() * Synopsis: Collected data were left-censored. * * Purpose: Declare that the dataset collected in is known to be a * censored distribution, where samples were unobserved because * they had values $\leq$ some threshold ($\phi$). * * No more data can be added to the histogram with <_Add()> * after censoring information has been set. * * This function is for "true" censored datasets, where * the histogram truly contains no observed points * $x \leq \phi$, and the number that were censored is known * to be . * * Returns: on success. * * Throws: if you try to set to a value that is * greater than the minimum stored in the histogram. */ int esl_histogram_DeclareCensoring(ESL_HISTOGRAM *h, int z, double phi) { if (phi > h->xmin) ESL_EXCEPTION(eslEINVAL, "no uncensored x can be <= phi"); h->phi = phi; h->cmin = h->imin; h->z = z; h->Nc = h->n + z; h->No = h->n; h->dataset_is = TRUE_CENSORED; h->is_done = TRUE; return eslOK; } /* Function: esl_histogram_DeclareRounding() * Synopsis: Declare collected data were no more accurate than bins. * * Purpose: Declare that the data sample values in the histogram * are rounded off. Ideally, your bins in should exactly * match the rounding procedure. This raises a flag that * binned parameter fitting routines will use when they set * an origin, using the lower bound of the bin instead of * the lowest raw value in the bin. */ int esl_histogram_DeclareRounding(ESL_HISTOGRAM *h) { h->is_rounded = TRUE; return eslOK; } /* Function: esl_histogram_SetTail() * Synopsis: Declare only tail $>$ some threshold is considered "observed". * * Purpose: Suggest a threshold to split a histogram * into "unobserved" data (values $\leq \phi$) and "observed" * data (values $> \phi$). * * The suggested is revised downwards to a $\phi$ at the next * bin lower bound, because operations on binned data in * need to know unambiguously whether all the data in a given bin * will be counted as observed or unobserved. * * The probability mass that is in the resulting right tail * is optionally returned in . You need to know * this number if you're fitting a distribution solely to the * tail (an exponential tail, for example). * * Any data point $x_i \leq \phi$ is then considered to be * in a censored (unobserved) region for purposes of parameter * fitting, calculating expected binned counts, * and binned goodness-of-fit tests. * * No more data can be added to the histogram after * censoring information has been set. * * This function defines a "virtual" left-censoring: the * histogram actually contains complete data, but appropriate * flags are set to demarcate the "observed" data in the right * tail. * * Returns: on success. * * Throws: if is an unreasonable value that * can't be converted to an integer bin value. */ int esl_histogram_SetTail(ESL_HISTOGRAM *h, double phi, double *ret_newmass) { int b; int status; /* Usually, put true phi at the next bin lower bound, but * watch for a special case where phi is already exactly equal to a * bin upper bound. */ if ((status = esl_histogram_Score2Bin(h,phi, &(h->cmin))) != eslOK) return status; if (phi == esl_histogram_Bin2UBound(h,h->cmin)) h->phi = phi; else h->phi = esl_histogram_Bin2LBound(h, h->cmin); h->z = 0; for (b = h->imin; b < h->cmin; b++) h->z += h->obs[b]; h->Nc = h->n; /* (redundant) */ h->No = h->n - h->z; h->dataset_is = VIRTUAL_CENSORED; h->is_done = TRUE; if (ret_newmass != NULL) *ret_newmass = (double) h->No / (double) h->Nc; return eslOK; } /* Function: esl_histogram_SetTailByMass() * Synopsis: Declare only right tail mass is considered "observed". * * Purpose: Given a histogram (with or without raw data samples), * find a cutoff score that at least fraction of the samples * exceed. This threshold is stored internally in the histogram * as phi>. The number of "virtually censored" samples (to the * left, with scores $\leq \phi$) is stored internally in z>. * * The identified cutoff score must be a lower bound for some bin * (bins can't be partially censored). The censored mass * will thus usually be a bit greater than , as the * routine will find the highest satisfactory phi>. The * narrower the bin widths, the more accurately the routine * will be able to satisfy the requested . The actual * probability mass in the right tail is optionally returned * in . You need to know this number if you're * fitting a distribution solely to the tail (an exponential tail, * for example). It is safe for to point at * , in which case the suggested will be overwritten * with the actual mass upon return. * * This function defines that the binned data will be * fitted either as a tail, or as a (virtually) left-censored dataset. * * Returns: on success. */ int esl_histogram_SetTailByMass(ESL_HISTOGRAM *h, double pmass, double *ret_newmass) { int b; uint64_t sum = 0; for (b = h->imax; b >= h->imin; b--) { sum += h->obs[b]; if (sum >= (pmass * (double)h->n)) break; } h->phi = esl_histogram_Bin2LBound(h,b); h->z = h->n - sum; h->cmin = b; h->Nc = h->n; /* (redundant) */ h->No = h->n - h->z; h->dataset_is = VIRTUAL_CENSORED; h->is_done = TRUE; if (ret_newmass != NULL) *ret_newmass = (double) h->No / (double) h->Nc; return eslOK; } /***************************************************************** * 3. Routines for accessing data samples in a full histogram. *****************************************************************/ /* Function: esl_histogram_GetRank() * Synopsis: Retrieve n'th high score. * * Purpose: Retrieve the 'th highest score from a * full histogram . is <1..n>, for * total samples in the histogram; return it through * . * * If the raw scores aren't sorted, they are sorted * first (an $N \log N$ operation). * * This can be called at any time, even during data * collection, to see the current 'th highest score. * * Returns: on success. * * Throws: if the histogram is display-only, * or if isn't in the range 1..n. */ int esl_histogram_GetRank(ESL_HISTOGRAM *h, int rank, double *ret_x) { if (! h->is_full) ESL_EXCEPTION(eslEINVAL, "esl_histogram_GetRank() needs a full histogram"); if (rank > h->n) ESL_EXCEPTION(eslEINVAL, "no such rank: not that many scores in the histogram"); if (rank < 1) ESL_EXCEPTION(eslEINVAL, "histogram rank must be a value from 1..n"); esl_histogram_sort(h); /* make sure */ *ret_x = h->x[h->n - rank]; return eslOK; } /* Function: esl_histogram_GetData() * Synopsis: Retrieve vector of all raw scores. * * Purpose: Retrieve the raw data values from the histogram . * Return them in the vector , and the number * of values in . The values are indexed <[0..n-1]>, * from smallest to largest ( is the high score). * * is a pointer to internal memory in the histogram . * The histogram is still responsible for that storage; * its memory will be free'd when you call * . * * You can only call this after you have finished collecting * all the data. Subsequent calls to * will fail. * * Internal note: * The prohibition against adding more data (by raising * the h->is_done flag) is because we're passing a pointer * to internal data storage back to the caller. Subsequent * calls to Add() will modify that memory -- in the worst case, * if Add() has to reallocate that storage, completely invalidating * the pointer that the caller has a copy of. We want to make * sure that the pointer stays valid. * * Args: h - histogram to retrieve data values from * ret_x - RETURN: pointer to the data samples, [0..n-1] * ret_n - RETURN: number of data samples * * Returns: on success. * * Throws: if the histogram is not a full histogram. */ int esl_histogram_GetData(ESL_HISTOGRAM *h, double **ret_x, int *ret_n) { if (! h->is_full) ESL_EXCEPTION(eslEINVAL, "not a full histogram"); esl_histogram_sort(h); *ret_x = h->x; *ret_n = h->n; h->is_done = TRUE; return eslOK; } /* Function: esl_histogram_GetTail() * Synopsis: Retrieve all raw scores above some threshold. * * Purpose: Given a full histogram , retrieve all data values * above the threshold in the right (high scoring) * tail, as a ptr to an array of values * indexed <[0..n-1]> from lowest to highest score. * Optionally, it also returns the number of values in * rest of the histogram in ; * this number is useful if you are going to fit * the tail as a left-censored distribution. * * The test is strictly greater than , not greater * than or equal to. * * is a pointer to internal memory in the histogram . * The histogram is still responsible for that storage; * its memory will be free'd when you call * . * * You can only call this after you have finished collecting * all the data. Subsequent calls to * will fail. * * Args: h - histogram to retrieve the tail from * phi - threshold: tail is all scores > phi * ret_x - optRETURN: ptr to vector of data values [0..n-1] * ret_n - optRETURN: number of data values in tail * ret_z - optRETURN: number of data values not in tail. * * Returns: on success. * * Throws: if the histogram is not a full histogram. */ int esl_histogram_GetTail(ESL_HISTOGRAM *h, double phi, double **ret_x, int *ret_n, int *ret_z) { int hi, lo, mid; if (! h->is_full) ESL_EXCEPTION(eslEINVAL, "not a full histogram"); esl_histogram_sort(h); if (h->n == 0) mid = h->n; /* we'll return NULL, 0, n */ else if (h->x[0] > phi) mid = 0; /* we'll return x, n, 0 */ else if (h->x[h->n-1] <= phi) mid = h->n; /* we'll return NULL, 0, n */ else /* binary search, faster than a brute force scan */ { lo = 0; hi = h->n-1; /* know hi>0, because above took care of n=0 and n=1 cases */ while (1) { mid = (lo + hi + 1) / 2; /* +1 makes mid round up, mid=0 impossible */ if (h->x[mid] <= phi) lo = mid; /* we're too far left */ else if (h->x[mid-1] > phi) hi = mid; /* we're too far right */ else break; /* ta-da! */ } } if (ret_x != NULL) *ret_x = h->x + mid; if (ret_n != NULL) *ret_n = h->n - mid; if (ret_z != NULL) *ret_z = mid; h->is_done = TRUE; return eslOK; } /* Function: esl_histogram_GetTailByMass() * Synopsis: Retrieve all raw scores in right tail mass. * * Purpose: Given a full histogram , retrieve the data values in * the right (high scoring) tail, as a pointer * to an array of values indexed <[0..n-1]> from * lowest to highest score. The tail is defined by a * given mass fraction threshold ; the mass in the returned * tail is $\leq$ this threshold. is a probability, * so it must be $\geq 0$ and $\leq 1$. * * Optionally, the number of values in the rest of the * histogram can be returned in . This is useful * if you are going to fit the tail as a left-censored * distribution. * * is a pointer to internal memory in . * The histogram remains responsible for its storage, * which will be free'd when you call . * As a consequence, you can only call * after you have finished * collecting data. Subsequent calls to * will fail. * * Args: h - histogram to retrieve the tail from * pmass - fractional mass threshold; tail contains <= pmass * ret_x - optRETURN: ptr to vector of data values [0..n-1] * ret_n - optRETURN: number of data values in tail x * ret_z - optRETURN: number of data values not in tail * * Returns: on success. * * Throws: if the histogram is not a full histogram, * or is not a probability. */ int esl_histogram_GetTailByMass(ESL_HISTOGRAM *h, double pmass, double **ret_x, int *ret_n, int *ret_z) { uint64_t n; if (! h->is_full) ESL_EXCEPTION(eslEINVAL, "not a full histogram"); if (pmass < 0. || pmass > 1.) ESL_EXCEPTION(eslEINVAL, "pmass not a probability"); esl_histogram_sort(h); n = (uint64_t) ((double) h->n * pmass); /* rounds down, guaranteeing <= pmass */ if (ret_x != NULL) *ret_x = h->x + (h->n - n); if (ret_n != NULL) *ret_n = n; if (ret_z != NULL) *ret_z = h->n - n; h->is_done = TRUE; return eslOK; } /***************************************************************** * 4. Setting expected counts *****************************************************************/ /* Function: esl_histogram_SetExpect() * Synopsis: Set expected counts for complete distribution. * * Purpose: Given a histogram containing some number of empirically * observed binned counts, and a pointer to a function <(*cdf)()> * that describes the expected cumulative distribution function * (CDF) for the complete data, conditional on some parameters * ; calculate the expected counts in each bin of the * histogram, and hold that information internally in the structure. * * The caller provides a function <(*cdf)()> that calculates * the CDF via a generic interface, taking only two * arguments: a quantile and a void pointer to whatever * parameters it needs, which it will cast and interpret. * The void pointer to the given parameters is * just passed along to the generic <(*cdf)()> function. The * caller will probably implement this <(*cdf)()> function as * a wrapper around its real CDF function that takes * explicit (non-void-pointer) arguments. * * Returns: on success. * * Throws: on allocation failure; state of is preserved. */ int esl_histogram_SetExpect(ESL_HISTOGRAM *h, double (*cdf)(double x, void *params), void *params) { int status; int i; double ai,bi; /* ai < x <= bi : lower,upper bounds in bin */ if (h->expect == NULL) ESL_ALLOC(h->expect, sizeof(double) * h->nb); for (i = 0; i < h->nb; i++) { ai = esl_histogram_Bin2LBound(h, i); bi = esl_histogram_Bin2UBound(h, i); h->expect[i] = h->Nc * ( (*cdf)(bi, params) - (*cdf)(ai, params) ); if (h->emin == -1 && h->expect[i] > 0.) h->emin = i; } h->is_done = TRUE; return eslOK; ERROR: return status; } /* Function: esl_histogram_SetExpectedTail() * Synopsis: Set expected counts for right tail. * * Purpose: Given a histogram , and a pointer to a generic function * <(*cdf)()> that describes the expected cumulative * distribution function for the right (high-scoring) tail * starting at (all expected $>$ ) and * containing a fraction of the complete data * distribution ( $\geq 0$ and $\leq 1$); * set the expected binned counts for all complete bins * $\geq$ . * * If falls within a bin, that bin is considered * to be incomplete, and the next higher bin is the starting * point. * * Args: h - finished histogram * base_val - threshold for the tail: all expected x > base_val * pmass - fractional mass in the tail: 0 <= pmass <= 1 * cdf - generic-interface CDF function describing the tail * params - void pointer to parameters for (*cdf)() * * Returns: on success. * * Throws: on memory allocation failure. * if isn't a reasonable value within * the histogram (it converts to a bin value outside * integer range). */ int esl_histogram_SetExpectedTail(ESL_HISTOGRAM *h, double base_val, double pmass, double (*cdf)(double x, void *params), void *params) { int status; int b; double ai, bi; if (h->expect == NULL) ESL_ALLOC(h->expect, sizeof(double) * h->nb); if ((status = esl_histogram_Score2Bin(h, base_val, &(h->emin))) != eslOK) return status; h->emin += 1; esl_vec_DSet(h->expect, h->emin, 0.); for (b = h->emin; b < h->nb; b++) { ai = esl_histogram_Bin2LBound(h, b); bi = esl_histogram_Bin2UBound(h, b); h->expect[b] = pmass * (double) h->Nc * ( (*cdf)(bi, params) - (*cdf)(ai, params) ); } h->tailbase = base_val; h->tailmass = pmass; h->is_tailfit = TRUE; h->is_done = TRUE; return eslOK; ERROR: return status; } /***************************************************************** * 5. Output and display of binned data. *****************************************************************/ /* Function: esl_histogram_Write() * Synopsis: Write a "pretty" ASCII histogram to a stream. * * Purpose: Print a "prettified" display histogram to a file * pointer . Deliberately a look-and-feel clone of * Bill Pearson's excellent FASTA output. * * Also displays expected binned counts, if they've been * set. * * Display will only work well if the bin width (w) is 0.1 * or more, because the score labels are only shown to one * decimal point. * * Args: fp - open file to print to (stdout works) * h - histogram to print * * Returns: on success. * * Throws: on any system write error, such as a * filled disk. */ int esl_histogram_Write(FILE *fp, ESL_HISTOGRAM *h) { int i; double x; uint64_t maxbar; int imode; uint64_t units; int num; char buffer[81]; /* output line buffer */ int pos; /* position in output line buffer */ uint64_t lowcount, highcount; int ilowbound, ihighbound; int emptybins = 3; /* Find out how we'll scale the histogram. We have 58 characters to * play with on a standard 80-column terminal display: leading "%6.1f * %6d %6d|" occupies 21 chars. Save the peak position, we'll use * it later. */ maxbar = 0; imode = 0; for (i = 0; i < h->nb; i++) if (h->obs[i] > maxbar) { maxbar = h->obs[i]; /* max height */ imode = i; } /* Truncate histogram display on both sides, ad hoc fashion. * Start from the peak; then move out until we see empty bins, * and stop. */ for (num = 0, ihighbound = imode; ihighbound < h->imax; ihighbound++) { if (h->obs[ihighbound] > 0) { num = 0; continue; } /* reset */ if (++num == emptybins) { break; } /* stop */ } for (num = 0, ilowbound = imode; ilowbound > h->imin; ilowbound--) { if (h->obs[ilowbound] > 0) { num = 0; continue; } /* reset */ if (++num == emptybins) { break; } /* stop */ } /* collect counts outside of bounds */ for (lowcount = 0, i = h->imin; i < ilowbound; i++) lowcount += h->obs[i]; for (highcount = 0, i = h->imax; i > ihighbound; i--) highcount += h->obs[i]; /* maxbar might need to be raised now; then set our units */ if (lowcount > maxbar) maxbar = lowcount; if (highcount > maxbar) maxbar = highcount; units = ((maxbar-1)/ 58) + 1; /* Print the histogram */ if (fprintf(fp, "%6s %6s %6s (one = represents %llu sequences)\n", "score", "obs", "exp", (unsigned long long) units) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram write failed"); if (fprintf(fp, "%6s %6s %6s\n", "-----", "---", "---") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram write failed"); buffer[80] = '\0'; buffer[79] = '\n'; for (i = h->imin; i <= h->imax; i++) { memset(buffer, ' ', 79 * sizeof(char)); x = i*h->w + h->bmin; /* Deal with special cases at edges */ if (i < ilowbound) continue; else if (i > ihighbound) continue; else if (i == ilowbound && i != h->imin) { sprintf(buffer, "<%5.1f %6llu %6s|", x+h->w, (unsigned long long) lowcount, "-"); if (lowcount > 0) { num = 1+(lowcount-1) / units; for (pos = 21; num > 0; num--) buffer[pos++] = '='; } if (fputs(buffer, fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram write failed"); continue; } else if (i == ihighbound && i != h->imax) { sprintf(buffer, ">%5.1f %6llu %6s|", x, (unsigned long long) highcount, "-"); if (highcount > 0) { num = 1+(highcount-1) / units; for (pos = 21; num > 0; num--) buffer[pos++] = '='; } if (fputs(buffer, fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram write failed"); continue; } /* Deal with most cases */ if (h->obs[i] < 1000000) /* displayable in 6 figures or less? */ { if (h->expect != NULL) sprintf(buffer, "%6.1f %6llu %6d|", x, (unsigned long long) h->obs[i], (int) h->expect[i]); else sprintf(buffer, "%6.1f %6llu %6s|", x, (unsigned long long) h->obs[i], "-"); } else { if (h->expect != NULL) sprintf(buffer, "%6.1f %6.2e %6.2e|", x, (double) h->obs[i], h->expect[i]); else sprintf(buffer, "%6.1f %6.2e %6s|", x, (double) h->obs[i], "-"); } buffer[21] = ' '; /* sprintf writes a null char; replace it */ /* Mark the histogram bar for observed hits */ if (h->obs[i] > 0) { num = 1 + (h->obs[i]-1) / units; for (pos = 21; num > 0; num--) buffer[pos++] = '='; } /* Mark the theoretically expected value * (The test > 0. also suffices to remove any censored region.) */ if (h->expect != NULL && h->expect[i] > 0.) { pos = 21 + (int)(h->expect[i]-1) / units; if (pos >= 78) pos = 78; /* be careful of buffer bounds */ buffer[pos] = '*'; } /* Print the line */ if (fputs(buffer, fp) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram write failed"); } return eslOK; } /* Function: esl_histogram_Plot() * Synopsis: Output a histogram in xmgrace XY format. * * Purpose: Print observed (and expected, if set) binned counts * in a histogram to open file pointer * in xmgrace XY input file format. * * Returns: on success. * * Throws: on any system write error. */ int esl_histogram_Plot(FILE *fp, ESL_HISTOGRAM *h) { int i; double x; /* First data set is the observed histogram */ for (i = h->imin; i <= h->imax; i++) if (h->obs[i] > 0) { x = esl_histogram_Bin2LBound(h,i); if (fprintf(fp, "%f %llu\n", x, (unsigned long long) h->obs[i]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram plot write failed"); } if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram plot write failed"); /* Second data set is the theoretical (expected) histogram */ if (h->expect != NULL) { for (i = 0; i < h->nb; i++) if (h->expect[i] > 0.) /* >0 suffices to remove censored region */ { x = esl_histogram_Bin2LBound(h,i); if (fprintf(fp, "%.2f %g\n", x, h->expect[i]) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram plot write failed"); } if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram plot write failed"); } return eslOK; } /* Function: esl_histogram_PlotSurvival() * Synopsis: Output $P(X>x)$ in xmgrace XY format. * * Purpose: Given a histogram , output the observed (and * expected, if available) survival function $P(X>x)$ * to file pointer in xmgrace XY input file format. * * One point is plotted per bin, so the narrower the * bin width, the more smooth and accurate the resulting * plots will be. * * As a special case, always plot the highest score with * survival probability 1/N, if it occurred in a bin with * other samples. This is to prevent a survival plot from * looking like it was artificially truncated. * * Returns: on success. * * Throws: on any system write error. */ int esl_histogram_PlotSurvival(FILE *fp, ESL_HISTOGRAM *h) { int i; uint64_t c = 0; double esum; double ai; /* The observed binned counts: */ if (h->obs[h->imax] > 1) if (fprintf(fp, "%f\t%g\n", h->xmax, 1.0 / (double) h->Nc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram survival plot write failed"); for (i = h->imax; i >= h->imin; i--) { if (h->obs[i] > 0) { c += h->obs[i]; ai = esl_histogram_Bin2LBound(h, i); if (fprintf(fp, "%f\t%g\n", ai, (double) c / (double) h->Nc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram survival plot write failed"); } } if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram survival plot write failed"); /* The expected binned counts: */ if (h->expect != NULL) { esum = 0.; for (i = h->nb-1; i >= 0; i--) { if (h->expect[i] > 0.) { esum += h->expect[i]; /* some worry about 1+eps=1 problem here */ ai = esl_histogram_Bin2LBound(h, i); if (fprintf(fp, "%f\t%g\n", ai, esum / (double) h->Nc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram survival plot write failed"); } } if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram survival plot write failed"); } return eslOK; } /* Function: esl_histogram_PlotQQ() * Synopsis: Output a Q-Q plot in xmgrace XY format. * * Purpose: Given a histogram containing an empirically observed * distribution, and a pointer to a function <(*invcdf)()> * for an expected inverse cumulative distribution * function conditional on some parameters ; * output a Q-Q plot in xmgrace XY format to file . * * Same domain limits as goodness-of-fit testing: output * is restricted to overlap between observed data (excluding * any censored data) and expected data (which may be limited * if only a tail was fit). * * Returns: on success. * * Throws: on any system write error. */ int esl_histogram_PlotQQ(FILE *fp, ESL_HISTOGRAM *h, double (*invcdf)(double x, void *params), void *params) { int i; double cdf; double bi; int bbase; uint64_t sum; /* on censored data, start counting observed cdf at z, not 0 */ if (h->dataset_is == TRUE_CENSORED || h->dataset_is == VIRTUAL_CENSORED) sum = h->z; else sum = 0; /* Determine smallest bin included in goodness of fit eval */ bbase = h->cmin; if (h->is_tailfit && h->emin > bbase) bbase = h->emin; for (i = h->cmin; i < bbase; i++) sum += h->obs[i]; /* The q-q plot: */ for (i = bbase; i < h->imax; i++) /* avoid last bin where upper cdf=1.0 */ { sum += h->obs[i]; cdf = (double) sum / (double) h->Nc; if (h->is_tailfit) cdf = (cdf + h->tailmass - 1.) / (h->tailmass); bi = esl_histogram_Bin2UBound(h, i); if (fprintf(fp, "%f\t%f\n", bi, (*invcdf)(cdf, params)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram QQ plot write failed"); } if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram QQ plot write failed"); /* Plot a 45-degree expected QQ line: */ bi = esl_histogram_Bin2LBound(h, bbase); if (fprintf(fp, "%f\t%f\n", bi, bi) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram QQ plot write failed"); if (fprintf(fp, "%f\t%f\n", h->xmax, h->xmax) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram QQ plot write failed"); if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "histogram QQ plot write failed"); return eslOK; } /* Function: esl_histogram_Goodness() * Synopsis: Evaluate fit between observed, expected. * * Purpose: Given a histogram with observed and expected counts, * where, for the expected counts, ($\geq 0$) * parameters were fitted (and thus should be subtracted * from the degrees of freedom); * Perform a G-test and/or a $\chi^2$ test for goodness of * fit between observed and expected, and optionally return * the number of bins the data were sorted into * (), the G statistic and its probability ( and * ), and the $\chi^2$ statistic and its probability * ( and ). * * If a goodness-of-fit probability is less than some threshold * (usually taken to be 0.01 or 0.05), that is considered to * be evidence that the observed data are unlikely to be consistent * with the tested distribution. * * The two tests should give similar * probabilities. However, both tests are sensitive to * arbitrary choices in how the data are binned, and * neither seems to be on an entirely sound theoretical footing. * * Returns: on success. * * Throws: if expected counts have not been set in * the histogram; or on different internal * errors that can arise in calculating the probabilities; * on internal allocation failure. */ int esl_histogram_Goodness(ESL_HISTOGRAM *h, int nfitted, int *ret_nbins, double *ret_G, double *ret_Gp, double *ret_X2, double *ret_X2p) { uint64_t *obs = NULL; /* observed in bin i, [0..nb-1] */ double *exp = NULL; /* expected in bin i, [0..nb-1] */ double *topx = NULL; /* all values in bin i <= topx[i] */ int nb; /* # of re-bins */ uint64_t minc; /* minimum target # of counts/bin */ int i,b; double G, Gp; double X2, X2p; double tmp; int status; int bbase; uint64_t hmax; uint64_t nobs; double nexp; if (h->expect == NULL) ESL_EXCEPTION(eslEINVAL, "no expected counts in that histogram"); /* Determine the smallest histogram bin included in * the goodness of fit evaluation. */ bbase = h->cmin; if (h->is_tailfit && h->emin > bbase) bbase = h->emin; /* How many observed total counts are in the evaluated range, * and what is the maximum in any given histogram bin? */ nobs = 0; hmax = 0; for (i = bbase; i <= h->imax; i++) { nobs += h->obs[i]; if (h->obs[i] > hmax) hmax = h->obs[i]; } /* Figure out how many eval bins we'd like to have, then allocate * for re-binning. * Number of bins for goodness-of-fit tests like G and X^2 * is crucial but arbitrary, unfortunately. Some literature suggests * using 2*n^{0.4}, which gives: * n nbins #/bin * ----- ------ ------ * 1000 31 32 * 10000 79 127 * 100000 200 500 * 1000000 502 1992 * * The most important thing seems to be to get the # of counts * in each bin to be roughly equal. */ nb = 2* (int) pow((double) nobs, 0.4); /* "desired" nb. */ minc = 1 + nobs / (2*nb); /* arbitrarily set min = 1/2 of the target # */ ESL_ALLOC(obs, sizeof(uint64_t) * (nb*2+1)); /* final nb must be <= 2*nb+1 */ ESL_ALLOC(exp, sizeof(double) * (nb*2+1)); ESL_ALLOC(topx, sizeof(double) * (nb*2+1)); /* Determine the observed counts in each bin: that is, partition * the in the evaluated region. * Sweep left to right on the histogram bins, * collecting sum of counts, dropping the sum into the next re-bin * whenever we have more than counts. */ nobs = 0; nexp = 0.; for (i = 0, b = bbase; b <= h->imax; b++) { nobs += h->obs[b]; nexp += h->expect[b]; /* if we have enough counts, drop into bin i: */ if (nobs >= minc && nexp >= minc) { ESL_DASSERT1( (i < (nb*2+1)) ); obs[i] = nobs; exp[i] = nexp; topx[i] = esl_histogram_Bin2UBound(h,b); nobs = 0; nexp = 0.; i++; } } obs[i-1] += nobs; /* add the right tail to final bin */ exp[i-1] += nexp; topx[i-1] = esl_histogram_Bin2UBound(h, h->imax); nb = i; /* nb is now actual # of bins, not target */ /* Calculate the X^2 statistic: \sum (obs_i - exp_i)^2 / exp_i */ X2 = 0.; for (i = 0; i < nb; i++) { tmp = (double) obs[i] - exp[i]; X2 += tmp*tmp / exp[i]; } /* X^2 is distributed approximately chi^2. */ if (nb-nfitted >= 0 && X2 != eslINFINITY) { status = esl_stats_ChiSquaredTest(nb-nfitted, X2, &X2p); if (status != eslOK) return status; } else X2p = 0.; /* The G test assumes that #exp=#obs (the X^2 test didn't). * If that's not true, renormalize to make it so. */ nobs = 0; nexp = 0.; for (i = 0; i < nb; i++) { nobs += obs[i]; nexp += exp[i]; } for (i = 0; i < nb; i++) exp[i] = exp[i] * (double) nobs / nexp; /* Calculate the G statistic: 2 * LLR */ G = 0.; for (i = 0; i < nb; i++) G += (double) obs[i] * log ((double) obs[i] / exp[i]); G *= 2; /* G is distributed approximately as \chi^2. * -1 is because total #obs=#exp (which is must be) */ ESL_DASSERT1( (G >= 0.)); if (nb-nfitted-1 >= 0 && G != eslINFINITY) { status = esl_stats_ChiSquaredTest(nb-nfitted-1, G, &Gp); if (status != eslOK) return status; } else Gp = 0.; if (ret_nbins != NULL) *ret_nbins = nb; if (ret_G != NULL) *ret_G = G; if (ret_Gp != NULL) *ret_Gp = Gp; if (ret_X2 != NULL) *ret_X2 = X2; if (ret_X2p != NULL) *ret_X2p = X2p; free(obs); free(exp); free(topx); return eslOK; ERROR: if (ret_nbins != NULL) *ret_nbins = 0; if (ret_G != NULL) *ret_G = 0.; if (ret_Gp != NULL) *ret_Gp = 0.; if (ret_X2 != NULL) *ret_X2 = 0.; if (ret_X2p != NULL) *ret_X2p = 0.; if (obs != NULL) free(obs); if (exp != NULL) free(exp); if (topx != NULL) free(topx); return status; } /***************************************************************** * 6. Test driver. *****************************************************************/ #ifdef eslHISTOGRAM_TESTDRIVE /* compile: * gcc -g -Wall -I. -L. -o test -DeslHISTOGRAM_TESTDRIVE esl_histogram.c -leasel -lm * run: * ./test -t1; ./test -t2; ./test -t3; ./test -t4; ./test -t5 * * -t1 - complete data, fit to complete Gumbel\n\ * -t2 - complete data, high scores fit as censored Gumbel\n\ * -t3 - complete data, high scores fit to exponential tail\n\ * -t4 - censored data, fit as censored Gumbel\n\ * -t5 - complete data, binned, high scores fit to exponential tail\n\ * * Some suggestions for manual testing: * ./test -t1 -j1 -v --surv test.xy; xmgrace test.xy * examine survivor plot fit, for -t1 * do -t2 thru -t5 too * * ./test -t1 --j1 -v -qq test.xy; xmgrace test.xy * examine QQ plot fit, for -t1 * do -t2 thru -t5 too * * ./test -t1 -v > foo * grep "^Estimated" foo | awk '{print $9}' | sort -g > test.xy * Look for straight line fit to G-test p values. * sub $9->$13 for chi-squared * sub Estimated -> Parametric for the parametric fits */ #include #include #include "easel.h" #include "esl_stats.h" #include "esl_gumbel.h" #include "esl_exponential.h" #include "esl_random.h" #include "esl_getopts.h" static ESL_OPTIONS options[] = { /* name type default env_var range toggles reqs incompat */ { "-j", eslARG_INT, "100", NULL, "n>0", NULL, NULL, NULL, "number of trials", 0 }, { "-m", eslARG_INT, "0", NULL, "n>=0", NULL, NULL, NULL, "number of test samples", 0 }, { "-n", eslARG_INT, "10000", NULL, "n>0", NULL, NULL, NULL, "number of training samples", 0 }, { "-t", eslARG_INT, "1", NULL, "1<=n<=5", NULL, NULL, NULL, "test type choice, 1-5", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose?", 0 }, { "--ascii", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "output ASCII histogram to ", 0 }, { "--cmass", eslARG_REAL, "0.7", NULL, "0<=x<=1", NULL, NULL, NULL, "set virtual censoring mass to ", 0 }, { "--lambda", eslARG_REAL, "0.8", NULL, "x>0", NULL, NULL, NULL, "set Gumbel lambda param to ", 0 }, { "--mu", eslARG_REAL, "10.0", NULL, NULL, NULL, NULL, NULL, "set Gumbel mu param to ", 0 }, { "--phi", eslARG_REAL, "10.0", NULL, NULL, NULL, NULL, NULL, "set censoring threshold to ", 0 }, { "--plot", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "output histogram to xmgrace file ", 0 }, { "--qq", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "output Q-Q goodness of fit to xmgrace file ", 0 }, { "--surv", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "output survival plot to xmgrace file ", 0 }, { "--tail", eslARG_REAL, "0.1", NULL, "0<=x<=1", NULL, NULL, NULL, "set tail mass for fitting to ", 0 }, { 0,0,0,0,0,0,0,0,0,0 }, }; static void binmacro_utest(void) { char *msg = "esl_histogram: binmacro unit test failure"; ESL_HISTOGRAM *h = esl_histogram_Create(-100, 100, 1.0); double trialx[3] = { -42.42, 0, 42.42 }; double x, ai, bi; int i,b; /* test bin<->score conversion macros. */ for (i = 0; i < 3; i++) { x = trialx[i]; esl_histogram_Score2Bin(h, x, &b); ai = esl_histogram_Bin2LBound(h, b); bi = esl_histogram_Bin2UBound(h, b); if (x <= ai || x > bi) esl_fatal(msg); } esl_histogram_Destroy(h); return; } static void valuerange_utest(void) { char *msg = "esl_histogram: value range unit test failure"; ESL_HISTOGRAM *h = esl_histogram_Create(-100, 100, 1.0); int b; esl_exception_SetHandler(&esl_nonfatal_handler); if (esl_histogram_Score2Bin(h, eslINFINITY, &b) != eslERANGE) esl_fatal(msg); if (esl_histogram_Score2Bin(h, -eslINFINITY, &b) != eslERANGE) esl_fatal(msg); if (esl_histogram_Score2Bin(h, eslNaN, &b) != eslERANGE) esl_fatal(msg); if (esl_histogram_Score2Bin(h, 1e20, &b) != eslERANGE) esl_fatal(msg); if (esl_histogram_Score2Bin(h, -1e20, &b) != eslERANGE) esl_fatal(msg); esl_exception_ResetDefaultHandler(); esl_histogram_Destroy(h); return; } int main(int argc, char **argv) { ESL_GETOPTS *go; ESL_RANDOMNESS *r; ESL_HISTOGRAM *h; ESL_HISTOGRAM *h1; double p[2]; /* parametric mu, lambda */ double ep[2]; /* estimated mu, lambda */ double avg_ep[2]; /* average estimated mu, lambda over many trials */ int ntrials, trial; int ntrain, ntest; int test_type; enum { COLLECT_COMPLETE, COLLECT_CENSORED } cstrategy; enum { FIT_BINNED, FIT_SAMPLES } bstrategy; enum { FIT_COMPLETE, FIT_CENSORED, FIT_TAIL} fstrategy; double phi; /* censoring threshold */ int z; double cmass; double tailmass, save_tailmass; int nfitted; int nbins; double G, Gp, X2, X2p, minGp, minX2p; int verbose; FILE *outfp; char *ascfile, *plotfile, *survfile, *qqfile; int i; double x; double *xv; int n; go = esl_getopts_Create(options); esl_opt_ProcessCmdline(go, argc, argv); test_type = esl_opt_GetInteger(go, "-t"); ntrials = esl_opt_GetInteger(go, "-j"); ntrain = esl_opt_GetInteger(go, "-n"); ntest = esl_opt_GetInteger(go, "-m"); verbose = esl_opt_GetBoolean(go, "-v"); cmass = esl_opt_GetReal (go, "--cmass"); p[1] = esl_opt_GetReal (go, "--lambda"); p[0] = esl_opt_GetReal (go, "--mu"); phi = esl_opt_GetReal (go, "--phi"); save_tailmass = esl_opt_GetReal (go, "--tail"); ascfile = esl_opt_GetString (go, "--ascii"); plotfile = esl_opt_GetString (go, "--plot"); qqfile = esl_opt_GetString (go, "--qq"); survfile = esl_opt_GetString (go, "--surv"); esl_getopts_Destroy(go); r = esl_randomness_Create(42); avg_ep[0] = 0.; avg_ep[1] = 0.; minGp = 1.; minX2p = 1.; tailmass = save_tailmass; if (test_type == 1) { cstrategy = COLLECT_COMPLETE; bstrategy = FIT_SAMPLES; fstrategy = FIT_COMPLETE; } else if (test_type == 2) { cstrategy = COLLECT_COMPLETE; bstrategy = FIT_SAMPLES; fstrategy = FIT_CENSORED; } else if (test_type == 3) { cstrategy = COLLECT_COMPLETE; bstrategy = FIT_SAMPLES; fstrategy = FIT_TAIL; } else if (test_type == 4) { cstrategy = COLLECT_CENSORED; bstrategy = FIT_SAMPLES; fstrategy = FIT_CENSORED; } else if (test_type == 5) { cstrategy = COLLECT_COMPLETE; bstrategy = FIT_BINNED; fstrategy = FIT_TAIL; } for (trial = 0; trial < ntrials; trial++) { /* Collection of the training data in . * Data set can either be complete, true censored, or virtual censored. */ h = esl_histogram_CreateFull(-100, 100, 0.1); z = 0; for (i = 0; i < ntrain; i++) { x = esl_gumbel_Sample(r, p[0], p[1]); if (cstrategy != COLLECT_CENSORED || x > phi) esl_histogram_Add(h, x); else z++; } if (cstrategy == COLLECT_CENSORED) esl_histogram_DeclareCensoring(h, z, phi); /* Parameter fitting. * We test for four of twelve possible combinations of * collection strategy, binned vs. raw data, and complete, * censored, vs. tail fitting. * 1. complete Gumbel data, raw, fit to a Gumbel. * 2. complete Gumbel data, raw, tail fit as a censored Gumbel * 3. complete Gumbel data, raw, tail fit to an exponential tail * 4. censored Gumbel data, raw, censored fit to a Gumbel * 5 complete Gumbel data, binned, fit to an exponential tail. */ if (cstrategy == COLLECT_COMPLETE && bstrategy == FIT_SAMPLES && fstrategy == FIT_COMPLETE) { esl_histogram_GetData(h, &xv, &n); esl_gumbel_FitComplete(xv, n, &(ep[0]), &ep[1]); } else if (cstrategy == COLLECT_COMPLETE && bstrategy == FIT_SAMPLES && fstrategy == FIT_CENSORED) { esl_histogram_GetTailByMass(h, cmass, &xv, &n, &z); esl_gumbel_FitCensored(xv, n, z, xv[0], &(ep[0]), &ep[1]); } else if (cstrategy == COLLECT_COMPLETE && bstrategy == FIT_SAMPLES && fstrategy == FIT_TAIL) { esl_histogram_GetTailByMass(h, tailmass, &xv, &n, &z); esl_exp_FitComplete(xv, n, &(ep[0]), &ep[1]); } else if (cstrategy == COLLECT_CENSORED && bstrategy == FIT_SAMPLES && fstrategy == FIT_CENSORED) { esl_histogram_GetData(h, &xv, &n); esl_gumbel_FitCensored(xv, n, h->z, h->phi, &(ep[0]), &ep[1]); } else if (cstrategy == COLLECT_COMPLETE && bstrategy == FIT_BINNED && fstrategy == FIT_TAIL) { tailmass = save_tailmass; /* reset to original for each trial. */ esl_histogram_SetTailByMass(h, tailmass, &tailmass); esl_exp_FitCompleteBinned(h, &(ep[0]), &ep[1]); } else ESL_EXCEPTION(eslEINVAL, "not a scenario we currently test"); /* Keep track of average estimated mu, lambda * for automated testing purposes. */ avg_ep[0] += ep[0] / (double) ntrials; avg_ep[1] += ep[1] / (double) ntrials; /* Test data can either be the same as the training data, * or a new test set. */ if (ntest > 0) { h1 = esl_histogram_CreateFull(-100.05, 100.05, 0.2); z = 0; for (i = 0; i < ntest; i++) { x = esl_gumbel_Sample(r, p[0], p[1]); if (cstrategy != COLLECT_CENSORED || x > phi) esl_histogram_Add(h1, x); else z++; } if (cstrategy == COLLECT_CENSORED) esl_histogram_DeclareCensoring(h, z, phi); } else h1 = h; /* Set expected binned counts in the test data, h1: */ if (fstrategy == FIT_TAIL) esl_histogram_SetExpectedTail(h1, ep[0], tailmass, &esl_exp_generic_cdf, ep); else esl_histogram_SetExpect(h1, &esl_gumbel_generic_cdf, ep); /* Evaluate goodness-of-fit */ nfitted = (ntest == 0)? 2 : 0; esl_histogram_Goodness(h1, nfitted, &nbins, &G, &Gp, &X2, &X2p); /* Track minimum goodness of fit probs, for automated testing */ if (Gp < minGp) minGp = Gp; if (X2p < minX2p) minX2p = X2p; if (verbose) printf("Estimated: %6.2f %6.4f nb %4d G %g\tGp %g\tX2 %g\tX2p %g\n", ep[0], ep[1], nbins, G, Gp, X2, X2p); /* Output files, if requested. * (Best if ntrials=1. Will overwrite previous trials.) */ if (ascfile != NULL) { outfp = fopen(ascfile, "w"); esl_histogram_Write(outfp, h1); fclose(outfp); } if (plotfile != NULL) { outfp = fopen(plotfile, "w"); esl_histogram_Plot(outfp, h1); fclose(outfp); } if (survfile != NULL) { outfp = fopen(survfile, "w"); esl_histogram_PlotSurvival(outfp, h1); fclose(outfp); } if (qqfile != NULL) { outfp = fopen(qqfile, "w"); if (fstrategy == FIT_TAIL) esl_histogram_PlotQQ(outfp, h1, &esl_exp_generic_invcdf, ep); else esl_histogram_PlotQQ(outfp, h1, &esl_gumbel_generic_invcdf, ep); fclose(outfp); } esl_histogram_Destroy(h); if (ntest > 0) esl_histogram_Destroy(h1); } /* Trap badness in an automated test. */ if (fstrategy != FIT_TAIL && fabs(avg_ep[0] - p[0]) > 0.1) ESL_EXCEPTION(eslFAIL, "Something awry with Gumbel mu fit"); if (fabs(avg_ep[1] - p[1]) > 0.1) ESL_EXCEPTION(eslFAIL, "Something awry with lambda fit"); if (minGp < 1. / (1000. * ntrials)) ESL_EXCEPTION(eslFAIL, "Something awry with G-test"); if (minX2p < 1. / (1000. * ntrials)) ESL_EXCEPTION(eslFAIL, "Something awry with chi squared test"); /* Smaller final tests */ binmacro_utest(); valuerange_utest(); esl_randomness_Destroy(r); return 0; } #endif /*eslHISTOGRAM_TESTDRIVE*/ /***************************************************************** * 7. Examples *****************************************************************/ /***************************************************************** * Five example main()'s for five use cases: * - complete data, fit to complete Gumbel * - complete data, high scores fit as censored Gumbel * - complete data, high scores fit to exponential tail * - censored data, fit as censored Gumbel * - complete data, binned, high scores fit to exponential tail * * (These same five cases are tested by ./test -t1 through ./test -t5.) *****************************************************************/ /* Case 1. Complete data fit to complete Gumbel. * compile: gcc -I. -L. -o example -DeslHISTOGRAM_EXAMPLE esl_histogram.c -leasel -lm * run: ./example */ #ifdef eslHISTOGRAM_EXAMPLE /*::cexcerpt::histogram_example::begin::*/ #include "easel.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_gumbel.h" int main(int argc, char **argv) { ESL_RANDOMNESS *r = esl_randomness_Create(0); ESL_HISTOGRAM *h = esl_histogram_CreateFull(-100, 100, 0.2); int nsamples = 10000; double mu = 10.0; double lambda = 0.8; double params[2]; int i; double x; double *xv; int n; double G, Gp, X2, X2p; for (i = 0; i < nsamples; i++) { x = esl_gumbel_Sample(r, mu, lambda); esl_histogram_Add(h, x); } esl_histogram_GetData(h, &xv, &n); esl_gumbel_FitComplete(xv, n, &mu, &lambda); params[0] = mu; params[1] = lambda; esl_histogram_SetExpect(h, &esl_gumbel_generic_cdf, ¶ms); esl_histogram_Write(stdout, h); esl_histogram_Goodness(h, 0, NULL, &G, &Gp, &X2, &X2p); printf("G = %f p = %f\n", G, Gp); printf("X^2 = %f p = %f\n", X2, X2p); esl_histogram_Destroy(h); esl_randomness_Destroy(r); return 0; } /*::cexcerpt::histogram_example::end::*/ #endif /*eslHISTOGRAM_EXAMPLE*/ /* Case 2. complete data, high scores fit as censored Gumbel * compile: gcc -I. -L. -o example -DeslHISTOGRAM_EXAMPLE2 esl_histogram.c -leasel -lm * run: ./example */ #ifdef eslHISTOGRAM_EXAMPLE2 /*::cexcerpt::histogram_example2::begin::*/ #include "easel.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_gumbel.h" int main(int argc, char **argv) { ESL_RANDOMNESS *r = esl_randomness_Create(0); ESL_HISTOGRAM *h = esl_histogram_CreateFull(-100, 100, 0.2); int nsamples = 10000; double mu = 10.0; double lambda = 0.8; double params[2]; int i; double x; double *xv; int n, z; double G, Gp, X2, X2p; for (i = 0; i < nsamples; i++) { x = esl_gumbel_Sample(r, mu, lambda); esl_histogram_Add(h, x); } esl_histogram_GetTailByMass(h, 0.5, &xv, &n, &z); /* fit to right 50% */ esl_gumbel_FitCensored(xv, n, z, xv[0], &mu, &lambda); params[0] = mu; params[1] = lambda; esl_histogram_SetExpect(h, &esl_gumbel_generic_cdf, ¶ms); esl_histogram_Write(stdout, h); esl_histogram_Goodness(h, 0, NULL, &G, &Gp, &X2, &X2p); printf("G = %f p = %f\n", G, Gp); printf("X^2 = %f p = %f\n", X2, X2p); esl_histogram_Destroy(h); esl_randomness_Destroy(r); return 0; } /*::cexcerpt::histogram_example2::end::*/ #endif /*eslHISTOGRAM_EXAMPLE2*/ /* Case 3. complete data, high scores fit to exponential tail * compile: gcc -I. -L. -o example -DeslHISTOGRAM_EXAMPLE3 esl_histogram.c -leasel -lm * run: ./example */ #ifdef eslHISTOGRAM_EXAMPLE3 /*::cexcerpt::histogram_example3::begin::*/ #include "easel.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_gumbel.h" #include "esl_exponential.h" int main(int argc, char **argv) { ESL_RANDOMNESS *r = esl_randomness_Create(0); ESL_HISTOGRAM *h = esl_histogram_CreateFull(-100, 100, 0.2); int nsamples = 10000; double mu = 10.0; double lambda = 0.8; double params[2]; int i; double x; double *xv; int n; double G, Gp, X2, X2p; for (i = 0; i < nsamples; i++) { x = esl_gumbel_Sample(r, mu, lambda); esl_histogram_Add(h, x); } esl_histogram_GetTailByMass(h, 0.1, &xv, &n, NULL); /* fit to 10% tail */ esl_exp_FitComplete(xv, n, &mu, &lambda); params[0] = mu; params[1] = lambda; esl_histogram_SetExpectedTail(h, mu, 0.1, &esl_exp_generic_cdf, ¶ms); esl_histogram_Write(stdout, h); esl_histogram_Goodness(h, 0, NULL, &G, &Gp, &X2, &X2p); printf("G = %f p = %f\n", G, Gp); printf("X^2 = %f p = %f\n", X2, X2p); esl_histogram_Destroy(h); esl_randomness_Destroy(r); return 0; } /*::cexcerpt::histogram_example3::end::*/ #endif /*eslHISTOGRAM_EXAMPLE3*/ /* Case 4. censored data, high scores fit as a censored Gumbel tail * compile: gcc -I. -L. -o example -DeslHISTOGRAM_EXAMPLE4 esl_histogram.c -leasel -lm * run: ./example */ #ifdef eslHISTOGRAM_EXAMPLE4 /*::cexcerpt::histogram_example4::begin::*/ #include "easel.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_gumbel.h" int main(int argc, char **argv) { ESL_RANDOMNESS *r = esl_randomness_Create(0); ESL_HISTOGRAM *h = esl_histogram_CreateFull(-100, 100, 0.2); int nsamples = 10000; double mu = 10.0; double lambda = 0.8; double phi = 9.0; double params[2]; int i; double x; double *xv; int n, z; double G, Gp, X2, X2p; z = 0; for (i = 0; i < nsamples; i++) { x = esl_gumbel_Sample(r, mu, lambda); if (x > phi) esl_histogram_Add(h, x); else z++; } esl_histogram_GetData(h, &xv, &n); esl_gumbel_FitCensored(xv, n, z, phi, &mu, &lambda); params[0] = mu; params[1] = lambda; esl_histogram_SetExpect(h, &esl_gumbel_generic_cdf, ¶ms); esl_histogram_Write(stdout, h); esl_histogram_Goodness(h, 0, NULL, &G, &Gp, &X2, &X2p); printf("G = %f p = %f\n", G, Gp); printf("X^2 = %f p = %f\n", X2, X2p); esl_histogram_Destroy(h); esl_randomness_Destroy(r); return 0; } /*::cexcerpt::histogram_example4::end::*/ #endif /*eslHISTOGRAM_EXAMPLE4*/ /* Case 5. complete data, binned high scores fit to exponential tail * compile: gcc -I. -L. -o example -DeslHISTOGRAM_EXAMPLE5 esl_histogram.c -leasel -lm * run: ./example */ #ifdef eslHISTOGRAM_EXAMPLE5 /*::cexcerpt::histogram_example5::begin::*/ #include "easel.h" #include "esl_random.h" #include "esl_histogram.h" #include "esl_gumbel.h" #include "esl_exponential.h" int main(int argc, char **argv) { ESL_RANDOMNESS *r = esl_randomness_Create(0); ESL_HISTOGRAM *h = esl_histogram_Create(-100, 100, 1.0); int nsamples = 10000; double mu = 10.0; double lambda = 0.8; double params[2]; int i; double x; double actual_mass; double G, Gp, X2, X2p; for (i = 0; i < nsamples; i++) { x = esl_gumbel_Sample(r, mu, lambda); x = ceil(x); /* crudely simulate an x of limited precision */ esl_histogram_Add(h, x); } esl_histogram_SetTailByMass(h, 0.1, &actual_mass); esl_histogram_DeclareRounding(h); esl_exp_FitCompleteBinned(h, &mu, &lambda); params[0] = mu; params[1] = lambda; esl_histogram_SetExpectedTail(h, mu, actual_mass, &esl_exp_generic_cdf, ¶ms); esl_histogram_Write(stdout, h); esl_histogram_Goodness(h, 0, NULL, &G, &Gp, &X2, &X2p); printf("G = %f p = %f\n", G, Gp); printf("X^2 = %f p = %f\n", X2, X2p); esl_histogram_Destroy(h); esl_randomness_Destroy(r); return 0; } /*::cexcerpt::histogram_example5::end::*/ #endif /*eslHISTOGRAM_EXAMPLE5*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_histogram.c 841 2013-01-02 09:52:58Z rivase $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_histogram.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_dmatrix.h0000664361611702660230000001040012473612606016042 0ustar wheelerteddy/* Double-precision two-dimensional matrices, and some linear algebra * * SRE, Tue Jul 13 14:41:07 2004 [St. Louis] * SVN $Id: esl_dmatrix.h 755 2012-03-21 11:30:23Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_dmatrix.h $ */ #ifndef eslDMATRIX_INCLUDED #define eslDMATRIX_INCLUDED #include typedef struct { /*mx, mx[0] are allocated. */ /*::cexcerpt::dmatrix_obj::begin::*/ double **mx; /* mx[i][j] is i'th row, j'th col */ int n; /* rows */ int m; /* columns */ enum { eslGENERAL, eslUPPER } type; /*::cexcerpt::dmatrix_obj::end::*/ int ncells; /* number of valid cells (nxm in standard matrix) */ } ESL_DMATRIX; typedef struct { int *pi; int n; } ESL_PERMUTATION; /* 1. The ESL_DMATRIX object. */ extern ESL_DMATRIX *esl_dmatrix_Create(int n, int m); extern ESL_DMATRIX *esl_dmatrix_CreateUpper(int n); extern int esl_dmatrix_Destroy(ESL_DMATRIX *A); extern int esl_dmatrix_Copy (const ESL_DMATRIX *src, ESL_DMATRIX *dest); extern ESL_DMATRIX *esl_dmatrix_Clone (const ESL_DMATRIX *old); extern int esl_dmatrix_Compare (const ESL_DMATRIX *A, const ESL_DMATRIX *B, double tol); extern int esl_dmatrix_CompareAbs (const ESL_DMATRIX *A, const ESL_DMATRIX *B, double tol); extern int esl_dmatrix_Set (ESL_DMATRIX *A, double x); extern int esl_dmatrix_SetZero (ESL_DMATRIX *A); extern int esl_dmatrix_SetIdentity(ESL_DMATRIX *A); /* 2. Debugging/validation for ESL_DMATRIX. */ extern int esl_dmatrix_Dump(FILE *ofp, const ESL_DMATRIX *A, const char *rowlabel, const char *collabel); /* 3. The ESL_PERMUTATION object. */ extern ESL_PERMUTATION *esl_permutation_Create(int n); extern int esl_permutation_Destroy(ESL_PERMUTATION *P); extern int esl_permutation_Reuse(ESL_PERMUTATION *P); /* 4. Debugging/validation for ESL_PERMUTATION. */ extern int esl_permutation_Dump(FILE *ofp, const ESL_PERMUTATION *P, const char *rowlabel, const char *collabel); /* 5. The rest of the dmatrix API. */ extern double esl_dmx_Max (const ESL_DMATRIX *A); extern double esl_dmx_Min (const ESL_DMATRIX *A); extern double esl_dmx_Sum (const ESL_DMATRIX *A); extern int esl_dmx_MinMax(const ESL_DMATRIX *A, double *ret_min, double *ret_max); extern int esl_dmx_FrobeniusNorm(const ESL_DMATRIX *A, double *ret_fnorm); extern int esl_dmx_Multiply(const ESL_DMATRIX *A, const ESL_DMATRIX *B, ESL_DMATRIX *C); extern int esl_dmx_Exp(const ESL_DMATRIX *Q, double t, ESL_DMATRIX *P); extern int esl_dmx_Transpose(ESL_DMATRIX *A); extern int esl_dmx_Add(ESL_DMATRIX *A, const ESL_DMATRIX *B); extern int esl_dmx_Scale(ESL_DMATRIX *A, double k); extern int esl_dmx_AddScale(ESL_DMATRIX *A, double k, const ESL_DMATRIX *B); extern int esl_dmx_Permute_PA(const ESL_PERMUTATION *P, const ESL_DMATRIX *A, ESL_DMATRIX *B); extern int esl_dmx_LUP_decompose(ESL_DMATRIX *A, ESL_PERMUTATION *P); extern int esl_dmx_LU_separate(const ESL_DMATRIX *LU, ESL_DMATRIX *L, ESL_DMATRIX *U); extern int esl_dmx_Invert(const ESL_DMATRIX *A, ESL_DMATRIX *Ai); /* 6. Optional: interoperability with GSL */ #ifdef HAVE_LIBGSL #include extern int esl_dmx_MorphGSL(const ESL_DMATRIX *E, gsl_matrix **ret_G); extern int esl_dmx_UnmorphGSL(const gsl_matrix *G, ESL_DMATRIX **ret_E); #endif /* 7. Optional: interfaces to LAPACK */ #ifdef HAVE_LIBLAPACK extern int esl_dmx_Diagonalize(const ESL_DMATRIX *A, double **ret_Er, double **ret_Ei, ESL_DMATRIX **ret_UL, ESL_DMATRIX **ret_UR); #endif #endif /*eslDMATRIX_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/demotic/0000775361611702660230000000000012473610602015001 5ustar wheelerteddyhmmer-3.1b2/easel/demotic/blast2profmark0000775361611702660230000000017612473612604017670 0ustar wheelerteddy#! /usr/bin/perl use demotic_blast; while (&demotic_blast::parse(\*STDIN)) { &demotic_blast::profmarkout(\*STDOUT); } hmmer-3.1b2/easel/demotic/demotic_blast.pm0000664361611702660230000002105612473612604020160 0ustar wheelerteddy############################################################################ # demotic_blast package # Parses blast output, stores extracted information in convenient vars. # Works for both WU-BLAST and NCBI BLAST output files, # and for PSIBLAST runs from checkpoint files (as I use in profmark). # (SRE originated, 10/2000) # # SVN $Id$ ############################################################################ package demotic_blast; # parse(\*STDIN) would parse BLAST output # coming in via stdin. # sub parse (*) { my $fh = shift; my $parsing_header = 1; my $parsing_hitlist = 0; my $parsing_alilist = 0; my $is_wublast = 0; my $target; my $firstchunk; # Initialize everything... so we can call the parser # repeatedly, one call per BLAST output. # # This section also documents what's available in # variables within the package. # # Arrays are indexed [0..nhits-1] or [0..nali-1] # $queryname = ""; # Name of the query sequence $querydesc = ""; # Description line for the query (or "") $querylen = 0; # Length of the query in residues $db = ""; # Name of the target database file $db_nseq = 0; # Number of sequences in the target database $db_nletters = ""; # Number of residues in the target database # (stored as a string so we can have large #'s) # The top hit list (still in rank order) $nhits = 0; # Number of entries in the hit list @hit_target = (); # Target sequence name (by rank) %target_desc = (); # Target sequence description (by targ name) @hit_bitscore = (); # Raw score (by rank) @hit_Eval = (); # E-val (by rank) # The alignment output (in order it came in) # all indexed by # of alignment [0..nali-1] $nali = 0; # Number of alignments @ali_target = (); # Target sequence name @ali_score = (); # Raw score of alignment @ali_bitscore = (); # bit score @ali_evalue = (); # E-value @ali_pvalue = (); # P-value @ali_nident = (); # Number of identical residues @ali_alen = (); # Length of alignment @ali_identity = (); # Percent identity @ali_npos = (); # Number of positives (similar positions) @ali_positive = (); # Percent of positions matched or similar @ali_qstart = (); # Start position on query @ali_qend = (); # End position on query @ali_tstart = (); # Start position on target @ali_tend = (); # End position on target @ali_qali = (); # Aligned string from query @ali_tali = (); # Aligned string from target (subject) # Now, loop over the lines of our input, and parse 'em. # while (<$fh>) { if ($parsing_header) { if (/^\s*\*+ No hits found \*+\s*$/) { return 1; } if (/^Sequences producing /) { # wu and ncbi share this $parsing_header = 0; $parsing_hitlist = 1; <$fh>; # This discards the next (blank) line (ncbi, wu) next; } elsif (/^Query=\s*(\S*)\s*(.*)\s*$/) { # allows blank query $queryname = $1; $querydesc = $2; chomp $querydesc; if ($queryname eq "") { $queryname = "unnamed_query"; } while (1) { $_ = <$fh>; # perl quirk: unless part of a while() # loop, line must be explicitly assigned # to $_ or else it will be lost. if (/^\s+\((\S+) letters/) { $querylen = $1; last; } elsif (/^Length=(\d+)/) { $querylen = $1; last; } # NCBI elsif (/^\s*( .+)\s*$/) { $querydesc .= $1; chomp $querydesc; } } } elsif (/^Database:\s*(.+)\s*$/) { $db = $1; $_ = <$fh>; if (/^\s+(\S+) sequences; (\S+) total letters/) { $db_nseq = $1; $db_nletters = $2; $db_nseq =~ s/,//g; $db_nletters =~ s/,//g; } } elsif (/^Copyright.+Washington University/) { $is_wublast = 1; } } elsif ($parsing_hitlist) { # WUBLAST: Sequences producing High-scoring Segment Pairs: Score P(N) N # 2-Hacid_dh/1/17-338/439-757 domains: PTXD_PSEST/5-326 O28... 299 4.7e-27 1 # NCBI+: Sequences producing significant alignments: (Bits) Value # 2-Hacid_dh/4/753-1076/1224-1507 domains: Q20595_CAEEL/181-504 P... 95.1 4e-20 # NCBI: Sequences producing significant alignments: (bits) Value # 2-Hacid_dh/4/753-1076/1224-1507 domains: Q20595_CAEEL/181-504 PD... 95 4e-20 # In NCBI E-values, beware "e-xxx" without any leading number. # In NCBI+, beware bit scores can now be real numbers, not just integers. # if (/^\s*$/) { $parsing_hitlist = 0; $parsing_alilist = 1; next; } elsif (( $is_wublast && /^\s*(\S+)\s+(.+)\s+(\d+)\s+(\S+)\s+\d+\s*$/) || (! $is_wublast && /^\s*(\S+)\s+(.+)\s+(\S+)\s+(\S+)\s*$/)) { $hit_target[$nhits] = $1; $target_desc{$1} = $2; $hit_bitscore[$nhits] = $3; if ($is_wublast) { $hit_Eval[$nhits] = $4; } # actually WU reports P-value else { $hit_Eval[$nhits] = &repair_evalue($4); } $nhits++; } } elsif ($parsing_alilist) { if (/^>\s*(\S+)\s*(.*)$/) { $target = $1; $target_desc{$target} = $2; $_ = <$fh>; if (/^\s+Length = (\S+)/) { $target_len{$target} = $1; } } elsif (/^ Score =\s+(\d+) \((\S+) bits\), Expect = (\S+),?/) { # WU $nali++; $ali_target[$nali-1] = $target; $ali_score[$nali-1] = $1; $ali_bitscore[$nali-1] = $2; $ali_evalue[$nali-1] = $3; } elsif (/^ Score =\s+(\S+) bits \((\S+)\),\s*Expect = (\S+),?/) { # NCBI $nali++; $ali_target[$nali-1] = $target; $ali_bitscore[$nali-1] = $1; $ali_score[$nali-1] = $2; $ali_evalue[$nali-1] = &repair_evalue($3); } elsif (/^ Identities = (\d+)\/(\d+) \((\d+)%\).+Positives = (\d+).+\((\d+)%/) { # NCBI or WU $ali_nident[$nali-1] = $1; $ali_alen[$nali-1] = $2; $ali_identity[$nali-1] = $3; $ali_npos[$nali-1] = $4; $ali_positive[$nali-1] = $5; $firstchunk = 1; } elsif (/^ Identities = (\d+)\/(\d+) \((\d+)%\).+/) { # NCBI megablast : no Positives $ali_nident[$nali-1] = $1; $ali_alen[$nali-1] = $2; $ali_identity[$nali-1] = $3; $ali_npos[$nali-1] = $1; $ali_positive[$nali-1] = $3; $firstchunk = 1; } elsif (/^Query:?\s+(\d+)\s+(\S+)\s+(\d+)\s*$/) { if ($firstchunk) { $ali_qstart[$nali-1] = $1; } $ali_qali[$nali-1] .= $2; $ali_qend[$nali-1] = $3; } elsif (/^Sbjct:?\s+(\d+)\s+(\S+)\s+(\d+)\s*$/) { if ($firstchunk) { $ali_tstart[$nali-1] = $1; } $ali_tali[$nali-1] .= $2; $ali_tend[$nali-1] = $3; $firstchunk = 0; } elsif (/^BLAST/) { return 1; } # normal return; output from a new query is starting elsif (/^Effective search space used:/) { return 1; } #normal end of query for NCBI BLAST+ } } # this closes the loop over lines in the input stream. if ($parsing_alilist) { return 1; } else { return 0; } } # NCBI BLAST now has a nasty habit of abbreviating # 1e-100 as e-100, which isn't a number format. sub repair_evalue { my $value = shift; if ($value =~ /^e-\d+$/) { $value = "1$value"; } $value; } sub exblxout { my $ofh = shift; my $i; for ($i = 0; $i <= $nali-1; $i++) { printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\n", $ali_evalue[$i], $ali_identity[$i], $ali_tstart[$i], $ali_tend[$i], $ali_target[$i], $ali_qstart[$i], $ali_qend[$i], $queryname; } } sub tblout { my $ofh = shift; my $i; for ($i = 0; $i <= $nali-1; $i++) { printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\t%s\n", $ali_evalue[$i], $ali_identity[$i], $ali_qstart[$i], $ali_qend[$i], $queryname, $ali_tstart[$i], $ali_tend[$i], $ali_target[$i], $target_desc{$ali_target[$i]}; } } sub gffout { my $ofh = shift; my $source = shift; my $feature = shift; my $i; my $strand; for ($i = 0; $i <= $nali-1; $i++) { if ($ali_qstart[$i] > $ali_qend[$i]) { $strand = "-"; } else { $strand = "+"; } printf $ofh "%s\t%s\t%s\t%d\t%d\t%.1f\t%s\t.\tgene \"%s\"\n", $ali_target[$i], $source, $feature, $ali_tstart[$i], $ali_tend[$i], $ali_bitscore[$i], $strand, $queryname; } } sub profmarkout { my $ofh = shift; my $i; for ($i = 0; $i < $nhits; $i++) { printf $ofh "%g\t%.1f\t%s\t%s\n", $hit_Eval[$i], $hit_bitscore[$i], $hit_target[$i], $queryname; } } 1; __END__ hmmer-3.1b2/easel/demotic/fasta2profmark0000775361611702660230000000017712473612605017663 0ustar wheelerteddy#! /usr/bin/perl use demotic_fasta; while (&demotic_fasta::parse(\*STDIN)) { &demotic_fasta::profmarkout(\*STDOUT); } hmmer-3.1b2/easel/demotic/regress/0000775361611702660230000000000012473610605016456 5ustar wheelerteddyhmmer-3.1b2/easel/demotic/regress/ncbi-blastp-tbl.out0000664361611702660230000000376712473612605022203 0ustar wheelerteddy1e-88 90 1 181 sp|P55685|Y4WG_RHISN 1 181 sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp. 3.8 32 42 93 sp|P55685|Y4WG_RHISN 52 97 sp|B2VCH7|MTLD_ERWT9 Mannitol-1-phosphate 5-dehydrogenase 7.3 34 111 154 sp|P55685|Y4WG_RHISN 129 172 sp|Q9CZP0|UFSP1_MOUSE Ufm1-specific protease 1 OS=Mus musculus e-171 87 1 345 sp|Q1XGE2|HAC1_ASPOR 1 345 sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus e-115 67 13 344 sp|Q1XGE2|HAC1_ASPOR 18 348 sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS=Emericella 2e-15 88 58 100 sp|Q1XGE2|HAC1_ASPOR 93 135 sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS=Trichoderma 1e-07 68 63 100 sp|Q1XGE2|HAC1_ASPOR 16 56 sp|P41546|HAC1_YEAST Transcriptional activator HAC1 0.010 33 60 139 sp|Q1XGE2|HAC1_ASPOR 65 144 sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabidopsis 0.12 32 60 139 sp|Q1XGE2|HAC1_ASPOR 66 142 sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanum 1.5 28 80 150 sp|Q1XGE2|HAC1_ASPOR 182 252 sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-binding protein 1.6 40 227 292 sp|Q1XGE2|HAC1_ASPOR 205 267 sp|A1URL3|PYRD_BARBK Dihydroorotate dehydrogenase OS=Bartonella 1.9 28 80 150 sp|Q1XGE2|HAC1_ASPOR 235 305 sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-binding protein 2.1 28 80 150 sp|Q1XGE2|HAC1_ASPOR 240 310 sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-binding protein 2.6 26 68 150 sp|Q1XGE2|HAC1_ASPOR 224 306 sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-binding protein 2.9 26 68 150 sp|Q1XGE2|HAC1_ASPOR 224 306 sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-binding protein 5.7 26 73 143 sp|Q1XGE2|HAC1_ASPOR 68 138 sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=Arabidopsis 5.8 29 68 143 sp|Q1XGE2|HAC1_ASPOR 52 137 sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos taurus GN=XBP1 9.0 26 80 146 sp|Q1XGE2|HAC1_ASPOR 186 252 sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-binding protein 9.3 26 80 146 sp|Q1XGE2|HAC1_ASPOR 190 256 sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-binding protein hmmer-3.1b2/easel/demotic/regress/wu-blastp-tbl.out0000664361611702660230000012544412473612605021720 0ustar wheelerteddy9.1e-90 100 1 181 sp|P55685|Y4WG_RHISN 1 181 sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp. (strain 1.3 48 141 173 sp|P55685|Y4WG_RHISN 31 62 sp|Q07074|YH007_YEAST Uncharacterized protein YHR007C-A OS=Saccharomyces 5.2 28 42 167 sp|P55685|Y4WG_RHISN 107 231 sp|Q8XVA0|Y2931_RALSO UPF0135 protein RSc2931 OS=Ralstonia solanacearum 5.4 24 29 149 sp|P55685|Y4WG_RHISN 89 209 sp|P33890|TIR2_YEAST Cold shock-induced protein TIR2 OS=Saccharomyces 5.6 27 39 151 sp|P55685|Y4WG_RHISN 317 431 sp|A7HGP8|CH602_ANADF 60 kDa chaperonin 2 OS=Anaeromyxobacter sp. (strain 9.0 34 34 101 sp|P55685|Y4WG_RHISN 6 80 sp|Q608F1|Y1541_METCA UPF0350 protein MCA1541 OS=Methylococcus capsulatus 9.6e-182 100 1 345 sp|Q1XGE2|HAC1_ASPOR 1 345 sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus oryzae 1.5e-137 78 13 344 sp|Q1XGE2|HAC1_ASPOR 18 348 sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS=Emericella nidulans 1.8e-31 42 7 209 sp|Q1XGE2|HAC1_ASPOR 43 238 sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS=Trichoderma reesei 1.8e-31 26 253 344 sp|Q1XGE2|HAC1_ASPOR 361 450 sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS=Trichoderma reesei 9.3e-14 32 67 270 sp|Q1XGE2|HAC1_ASPOR 23 216 sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS=Saccharomyces 3.4e-12 31 10 152 sp|Q1XGE2|HAC1_ASPOR 12 157 sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabidopsis thaliana GN=HY5 7.0e-09 36 60 154 sp|Q1XGE2|HAC1_ASPOR 66 157 sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanum lycopersicum GN=HY5 3.2e-08 33 60 206 sp|Q1XGE2|HAC1_ASPOR 42 196 sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos taurus GN=XBP1 PE=2 SV=1 3.2e-08 29 16 187 sp|Q1XGE2|HAC1_ASPOR 10 186 sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Homo sapiens GN=XBP1 PE=1 SV=2 3.7e-08 32 4 152 sp|Q1XGE2|HAC1_ASPOR 210 360 sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive element-binding protein 3-like 1.9e-07 35 73 143 sp|Q1XGE2|HAC1_ASPOR 68 138 sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=Arabidopsis thaliana 9.6e-07 29 41 228 sp|Q1XGE2|HAC1_ASPOR 727 906 sp|A3LYI0|NST1_PICST Stress response protein NST1 OS=Pichia stipitis GN=NST1 0.11 25 40 206 sp|Q1XGE2|HAC1_ASPOR 742 901 sp|A3LYI0|NST1_PICST Stress response protein NST1 OS=Pichia stipitis GN=NST1 6.4e-06 30 14 157 sp|Q1XGE2|HAC1_ASPOR 228 368 sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive element-binding protein 3-like 6.4e-06 30 14 157 sp|Q1XGE2|HAC1_ASPOR 228 368 sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive element-binding protein 3-like 6.5e-06 24 18 297 sp|Q1XGE2|HAC1_ASPOR 234 518 sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive element-binding protein 3-like 1.2e-05 27 26 207 sp|Q1XGE2|HAC1_ASPOR 138 318 sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-binding protein 3 OS=Mus 1.4e-05 28 4 152 sp|Q1XGE2|HAC1_ASPOR 218 368 sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive element-binding protein 3-like 2.3e-05 30 14 228 sp|Q1XGE2|HAC1_ASPOR 223 433 sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element-binding protein 3-like 2.4e-05 24 46 270 sp|Q1XGE2|HAC1_ASPOR 363 593 sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper transcription factor F 3.0e-05 30 14 228 sp|Q1XGE2|HAC1_ASPOR 224 434 sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive element-binding protein 3-like 6.0e-05 28 69 145 sp|Q1XGE2|HAC1_ASPOR 21 97 sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcriptional factor ATF-like 3 6.0e-05 33 83 145 sp|Q1XGE2|HAC1_ASPOR 28 90 sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcriptional factor ATF-like 3 6.4e-05 29 14 230 sp|Q1XGE2|HAC1_ASPOR 224 434 sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive element-binding protein 3-like 7.2e-05 25 15 229 sp|Q1XGE2|HAC1_ASPOR 2294 2516 sp|O88778|BSN_RAT Protein bassoon OS=Rattus norvegicus GN=Bsn PE=1 SV=3 0.039 24 12 189 sp|Q1XGE2|HAC1_ASPOR 2318 2504 sp|O88778|BSN_RAT Protein bassoon OS=Rattus norvegicus GN=Bsn PE=1 SV=3 0.00011 31 29 157 sp|Q1XGE2|HAC1_ASPOR 244 368 sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element-binding protein 3-like 0.00012 27 3 236 sp|Q1XGE2|HAC1_ASPOR 429 680 sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kinase 7 OS=Mus musculus 0.00013 27 24 151 sp|Q1XGE2|HAC1_ASPOR 160 284 sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive element-binding protein 3-like 0.00016 31 71 160 sp|Q1XGE2|HAC1_ASPOR 17 103 sp|Q16520|BATF_HUMAN Basic leucine zipper transcriptional factor ATF-like 0.00017 29 18 146 sp|Q1XGE2|HAC1_ASPOR 119 256 sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-binding protein 3-like 0.30 30 70 145 sp|Q1XGE2|HAC1_ASPOR 180 269 sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-binding protein 3-like 0.00020 29 80 182 sp|Q1XGE2|HAC1_ASPOR 195 296 sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF2 OS=Petroselinum crispum 0.00021 30 83 145 sp|Q1XGE2|HAC1_ASPOR 28 90 sp|P97876|BATF3_RAT Basic leucine zipper transcriptional factor ATF-like 3 0.00029 26 31 251 sp|Q1XGE2|HAC1_ASPOR 515 729 sp|Q5B3C8|NST1_EMENI Stress response protein nst1 OS=Emericella nidulans 0.00030 33 48 162 sp|Q1XGE2|HAC1_ASPOR 214 318 sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-binding protein 3-like 0.00030 28 15 56 sp|Q1XGE2|HAC1_ASPOR 130 171 sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-binding protein 3-like 0.00032 26 48 275 sp|Q1XGE2|HAC1_ASPOR 213 434 sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-binding protein 3-like 0.00032 22 18 154 sp|Q1XGE2|HAC1_ASPOR 204 338 sp|Q6NW59|ATF4_DANRE Cyclic AMP-dependent transcription factor ATF-4 OS=Danio 0.00032 40 73 135 sp|Q1XGE2|HAC1_ASPOR 52 114 sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Rattus norvegicus GN=Xbp1 PE=2 0.00034 28 18 160 sp|Q1XGE2|HAC1_ASPOR 212 349 sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcription factor ATF-4 OS=Mus 0.00044 31 66 160 sp|Q1XGE2|HAC1_ASPOR 258 351 sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcription factor ATF-4 OS=Homo 0.00045 28 71 160 sp|Q1XGE2|HAC1_ASPOR 17 103 sp|O35284|BATF_MOUSE Basic leucine zipper transcriptional factor ATF-like 0.00053 28 72 222 sp|Q1XGE2|HAC1_ASPOR 145 290 sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus GN=Fosb PE=2 SV=1 0.00059 26 29 163 sp|Q1XGE2|HAC1_ASPOR 171 307 sp|Q90888|MAFB_CHICK Transcription factor MafB OS=Gallus gallus GN=MAFB PE=1 0.00059 26 29 163 sp|Q1XGE2|HAC1_ASPOR 171 307 sp|Q90370|MAFB_COTJA Transcription factor MafB OS=Coturnix coturnix japonica 0.00071 34 73 143 sp|Q1XGE2|HAC1_ASPOR 52 130 sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mus musculus GN=Xbp1 PE=2 SV=2 0.00084 25 68 216 sp|Q1XGE2|HAC1_ASPOR 109 261 sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattus norvegicus GN=Fosl2 PE=2 0.00090 28 48 227 sp|Q1XGE2|HAC1_ASPOR 218 383 sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-binding protein 3-like 0.00097 24 43 203 sp|Q1XGE2|HAC1_ASPOR 675 844 sp|A4R2R1|NST1_MAGGR Stress response protein NST1 OS=Magnaporthe grisea 5.1 24 35 142 sp|Q1XGE2|HAC1_ASPOR 614 718 sp|A4R2R1|NST1_MAGGR Stress response protein NST1 OS=Magnaporthe grisea 0.0011 34 83 167 sp|Q1XGE2|HAC1_ASPOR 201 281 sp|O57342|MAFA_COTJA Transcription factor MafA OS=Coturnix coturnix japonica 0.0012 26 47 193 sp|Q1XGE2|HAC1_ASPOR 5 156 sp|O60675|MAFK_HUMAN Transcription factor MafK OS=Homo sapiens GN=MAFK PE=1 0.0012 29 64 232 sp|Q1XGE2|HAC1_ASPOR 88 263 sp|P15407|FOSL1_HUMAN Fos-related antigen 1 OS=Homo sapiens GN=FOSL1 PE=1 SV=1 0.0014 33 48 162 sp|Q1XGE2|HAC1_ASPOR 214 318 sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-binding protein 3-like 0.0014 26 15 56 sp|Q1XGE2|HAC1_ASPOR 130 171 sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-binding protein 3-like 0.0015 25 9 221 sp|Q1XGE2|HAC1_ASPOR 105 326 sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mus musculus GN=Enah PE=1 SV=2 0.0015 27 72 222 sp|Q1XGE2|HAC1_ASPOR 145 290 sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens GN=FOSB PE=1 SV=1 0.0016 33 16 119 sp|Q1XGE2|HAC1_ASPOR 188 291 sp|Q2VZV0|IF2_MAGSA Translation initiation factor IF-2 OS=Magnetospirillum 0.0017 26 47 193 sp|Q1XGE2|HAC1_ASPOR 5 156 sp|Q61827|MAFK_MOUSE Transcription factor MafK OS=Mus musculus GN=Mafk PE=2 0.0018 30 8 150 sp|Q1XGE2|HAC1_ASPOR 370 508 sp|P29747|CREBA_DROME Cyclic AMP response element-binding protein A 0.0018 66 10 21 sp|Q1XGE2|HAC1_ASPOR 71 82 sp|P29747|CREBA_DROME Cyclic AMP response element-binding protein A 0.0019 30 74 237 sp|Q1XGE2|HAC1_ASPOR 125 298 sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocricetus auratus GN=FOS PE=3 0.0019 26 72 209 sp|Q1XGE2|HAC1_ASPOR 145 284 sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familiaris GN=FOSB PE=3 SV=1 0.0020 31 54 146 sp|Q1XGE2|HAC1_ASPOR 192 280 sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive element-binding protein 3-like 0.0020 31 54 146 sp|Q1XGE2|HAC1_ASPOR 192 280 sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive element-binding protein 3-like 0.0020 30 66 160 sp|Q1XGE2|HAC1_ASPOR 255 347 sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcription factor ATF-4 OS=Rattus 0.0020 22 6 254 sp|Q1XGE2|HAC1_ASPOR 39 286 sp|P79702|FOS_CYPCA Proto-oncogene c-Fos OS=Cyprinus carpio GN=fos PE=2 SV=1 0.0021 31 35 142 sp|Q1XGE2|HAC1_ASPOR 111 219 sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Homo sapiens GN=ENAH PE=1 SV=2 0.045 30 37 142 sp|Q1XGE2|HAC1_ASPOR 102 207 sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Homo sapiens GN=ENAH PE=1 SV=2 0.20 28 49 173 sp|Q1XGE2|HAC1_ASPOR 177 302 sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Homo sapiens GN=ENAH PE=1 SV=2 0.0023 25 68 216 sp|Q1XGE2|HAC1_ASPOR 108 260 sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus musculus GN=Fosl2 PE=2 SV=1 0.0027 29 26 172 sp|Q1XGE2|HAC1_ASPOR 277 424 sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcription factor ATF-7 OS=Pongo 0.0028 29 26 172 sp|Q1XGE2|HAC1_ASPOR 288 435 sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcription factor ATF-7 OS=Homo 0.0030 27 14 163 sp|Q1XGE2|HAC1_ASPOR 174 319 sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS=Homo sapiens GN=MAFB PE=1 0.0032 28 42 208 sp|Q1XGE2|HAC1_ASPOR 92 255 sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase 11A OS=Homo sapiens 0.0032 26 259 302 sp|Q1XGE2|HAC1_ASPOR 622 665 sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase 11A OS=Homo sapiens 0.0033 30 63 185 sp|Q1XGE2|HAC1_ASPOR 159 282 sp|O43889|CREB3_HUMAN Cyclic AMP-responsive element-binding protein 3 OS=Homo 0.0034 26 19 146 sp|Q1XGE2|HAC1_ASPOR 210 338 sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcription factor ATF-4 OS=Bos 0.0035 29 26 143 sp|Q1XGE2|HAC1_ASPOR 277 392 sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcription factor ATF-7 OS=Mus 0.0037 37 79 149 sp|Q1XGE2|HAC1_ASPOR 218 296 sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Arabidopsis thaliana GN=GBF1 3.9 29 23 144 sp|Q1XGE2|HAC1_ASPOR 191 306 sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Arabidopsis thaliana GN=GBF1 0.0038 26 20 221 sp|Q1XGE2|HAC1_ASPOR 105 301 sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive element-binding protein 3 OS=Bos 0.0038 33 60 146 sp|Q1XGE2|HAC1_ASPOR 170 252 sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-binding protein 3-like 0.0038 50 19 36 sp|Q1XGE2|HAC1_ASPOR 29 46 sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-binding protein 3-like 0.0039 26 14 163 sp|Q1XGE2|HAC1_ASPOR 174 319 sp|P54842|MAFB_RAT Transcription factor MafB OS=Rattus norvegicus GN=Mafb PE=1 0.0039 27 3 236 sp|Q1XGE2|HAC1_ASPOR 429 655 sp|A5PKJ4|MK07_BOVIN Mitogen-activated protein kinase 7 OS=Bos taurus GN=MAPK7 0.0040 26 2 237 sp|Q1XGE2|HAC1_ASPOR 57 297 sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus musculus GN=Fos PE=1 SV=1 0.0045 25 41 172 sp|Q1XGE2|HAC1_ASPOR 629 763 sp|O13024|INCEA_XENLA Inner centromere protein A OS=Xenopus laevis GN=incenp-A 0.26 33 67 146 sp|Q1XGE2|HAC1_ASPOR 484 567 sp|O13024|INCEA_XENLA Inner centromere protein A OS=Xenopus laevis GN=incenp-A 5.3 28 38 154 sp|Q1XGE2|HAC1_ASPOR 584 703 sp|O13024|INCEA_XENLA Inner centromere protein A OS=Xenopus laevis GN=incenp-A 0.0050 27 14 163 sp|Q1XGE2|HAC1_ASPOR 174 319 sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS=Macaca fascicularis GN=MAFB 0.0050 28 41 230 sp|Q1XGE2|HAC1_ASPOR 747 930 sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initiation factor 3 subunit A 0.0051 29 74 237 sp|Q1XGE2|HAC1_ASPOR 125 297 sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scrofa GN=FOS PE=3 SV=2 0.0052 31 74 237 sp|Q1XGE2|HAC1_ASPOR 125 297 sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein OS=FBJ murine osteosarcoma 0.0057 24 74 223 sp|Q1XGE2|HAC1_ASPOR 4 163 sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS=Schizosaccharomyces pombe 0.0062 25 47 193 sp|Q1XGE2|HAC1_ASPOR 5 156 sp|Q90596|MAFK_CHICK Transcription factor MafK OS=Gallus gallus GN=MAFK PE=1 0.0063 25 29 163 sp|Q1XGE2|HAC1_ASPOR 176 312 sp|Q504L8|MAFB_XENTR Transcription factor MafB OS=Xenopus tropicalis GN=mafb 0.0065 25 16 273 sp|Q1XGE2|HAC1_ASPOR 1009 1269 sp|Q1DQC1|PAN1_COCIM Actin cytoskeleton-regulatory complex protein PAN1 0.0065 26 14 163 sp|Q1XGE2|HAC1_ASPOR 174 319 sp|P54841|MAFB_MOUSE Transcription factor MafB OS=Mus musculus GN=Mafb PE=1 0.0078 22 41 219 sp|Q1XGE2|HAC1_ASPOR 800 987 sp|Q5A2K0|NST1_CANAL Stress response protein NST1 OS=Candida albicans GN=NST1 7.0 24 41 151 sp|Q1XGE2|HAC1_ASPOR 729 840 sp|Q5A2K0|NST1_CANAL Stress response protein NST1 OS=Candida albicans GN=NST1 0.0079 25 19 233 sp|Q1XGE2|HAC1_ASPOR 146 364 sp|Q8VCH8|UBXN4_MOUSE UBX domain-containing protein 4 OS=Mus musculus GN=Ubxn4 0.0080 25 8 199 sp|Q1XGE2|HAC1_ASPOR 138 322 sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive element-binding protein 3-like 0.0081 27 64 232 sp|Q1XGE2|HAC1_ASPOR 90 267 sp|P10158|FOSL1_RAT Fos-related antigen 1 OS=Rattus norvegicus GN=Fosl1 PE=2 0.0081 28 16 163 sp|Q1XGE2|HAC1_ASPOR 9 155 sp|P97875|JDP2_MOUSE Jun dimerization protein 2 OS=Mus musculus GN=Jdp2 PE=1 0.0081 28 16 163 sp|Q1XGE2|HAC1_ASPOR 9 155 sp|Q78E65|JDP2_RAT Jun dimerization protein 2 OS=Rattus norvegicus GN=Jdp2 0.0086 29 68 185 sp|Q1XGE2|HAC1_ASPOR 108 227 sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Homo sapiens GN=FOSL2 PE=1 SV=1 0.0087 32 89 167 sp|Q1XGE2|HAC1_ASPOR 205 281 sp|O42290|MAFA_CHICK Transcription factor MafA OS=Gallus gallus GN=MAFA PE=1 0.011 20 66 223 sp|Q1XGE2|HAC1_ASPOR 83 237 sp|A1C9M5|KAPC_ASPCL Putative transcription factor kapC OS=Aspergillus 0.011 47 299 315 sp|Q1XGE2|HAC1_ASPOR 269 285 sp|A1C9M5|KAPC_ASPCL Putative transcription factor kapC OS=Aspergillus 0.011 26 3 236 sp|Q1XGE2|HAC1_ASPOR 429 680 sp|P0C865|MK07_RAT Mitogen-activated protein kinase 7 OS=Rattus norvegicus 0.013 33 50 143 sp|Q1XGE2|HAC1_ASPOR 609 700 sp|Q15424|SAFB1_HUMAN Scaffold attachment factor B1 OS=Homo sapiens GN=SAFB 0.014 23 7 259 sp|Q1XGE2|HAC1_ASPOR 282 518 sp|O60841|IF2P_HUMAN Eukaryotic translation initiation factor 5B OS=Homo 0.014 23 6 259 sp|Q1XGE2|HAC1_ASPOR 278 518 sp|Q5RDE1|IF2P_PONAB Eukaryotic translation initiation factor 5B OS=Pongo 0.015 32 14 145 sp|Q1XGE2|HAC1_ASPOR 291 435 sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5-like protein 6 0.016 29 39 165 sp|Q1XGE2|HAC1_ASPOR 764 903 sp|A9V549|EIF3A_MONBE Eukaryotic translation initiation factor 3 subunit A 1.9 24 49 188 sp|Q1XGE2|HAC1_ASPOR 768 901 sp|A9V549|EIF3A_MONBE Eukaryotic translation initiation factor 3 subunit A 0.016 27 46 223 sp|Q1XGE2|HAC1_ASPOR 294 477 sp|Q9UKV3|ACINU_HUMAN Apoptotic chromatin condensation inducer in the nucleus 0.017 29 39 210 sp|Q1XGE2|HAC1_ASPOR 79 238 sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS=Xenopus laevis GN=stambp 0.018 26 6 180 sp|Q1XGE2|HAC1_ASPOR 281 460 sp|Q4QRL3|CC88B_MOUSE Coiled-coil domain-containing protein 88B OS=Mus 1.6 29 74 154 sp|Q1XGE2|HAC1_ASPOR 1164 1243 sp|Q4QRL3|CC88B_MOUSE Coiled-coil domain-containing protein 88B OS=Mus 0.019 28 74 237 sp|Q1XGE2|HAC1_ASPOR 125 297 sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo sapiens GN=FOS PE=1 SV=1 0.019 29 74 237 sp|Q1XGE2|HAC1_ASPOR 125 297 sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus norvegicus GN=Fos PE=1 SV=1 0.019 27 28 157 sp|Q1XGE2|HAC1_ASPOR 13 131 sp|P19880|YAP1_YEAST AP-1-like transcription factor YAP1 OS=Saccharomyces 0.019 21 160 269 sp|Q1XGE2|HAC1_ASPOR 438 545 sp|P19880|YAP1_YEAST AP-1-like transcription factor YAP1 OS=Saccharomyces 0.019 35 73 153 sp|Q1XGE2|HAC1_ASPOR 644 724 sp|Q8CH25|SLTM_MOUSE SAFB-like transcription modulator OS=Mus musculus GN=Sltm 0.069 28 39 151 sp|Q1XGE2|HAC1_ASPOR 597 709 sp|Q8CH25|SLTM_MOUSE SAFB-like transcription modulator OS=Mus musculus GN=Sltm 0.020 35 73 153 sp|Q1XGE2|HAC1_ASPOR 645 725 sp|Q9NWH9|SLTM_HUMAN SAFB-like transcription modulator OS=Homo sapiens GN=SLTM 0.15 28 39 151 sp|Q1XGE2|HAC1_ASPOR 598 710 sp|Q9NWH9|SLTM_HUMAN SAFB-like transcription modulator OS=Homo sapiens GN=SLTM 0.020 25 2 148 sp|Q1XGE2|HAC1_ASPOR 142 290 sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Homo sapiens GN=HLF PE=2 SV=1 0.020 25 2 148 sp|Q1XGE2|HAC1_ASPOR 142 290 sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus musculus GN=Hlf PE=2 SV=1 0.021 27 74 219 sp|Q1XGE2|HAC1_ASPOR 489 640 sp|Q6CBW0|NST1_YARLI Stress response protein NST1 OS=Yarrowia lipolytica 0.045 27 48 194 sp|Q1XGE2|HAC1_ASPOR 477 629 sp|Q6CBW0|NST1_YARLI Stress response protein NST1 OS=Yarrowia lipolytica 1.2 23 44 224 sp|Q1XGE2|HAC1_ASPOR 441 606 sp|Q6CBW0|NST1_YARLI Stress response protein NST1 OS=Yarrowia lipolytica 7.0 27 37 154 sp|Q1XGE2|HAC1_ASPOR 368 480 sp|Q6CBW0|NST1_YARLI Stress response protein NST1 OS=Yarrowia lipolytica 0.85 26 43 141 sp|Q1XGE2|HAC1_ASPOR 389 483 sp|Q6CBW0|NST1_YARLI Stress response protein NST1 OS=Yarrowia lipolytica 0.85 27 129 216 sp|Q1XGE2|HAC1_ASPOR 633 721 sp|Q6CBW0|NST1_YARLI Stress response protein NST1 OS=Yarrowia lipolytica 0.022 30 73 153 sp|Q1XGE2|HAC1_ASPOR 607 689 sp|Q498L2|SLTM_XENLA SAFB-like transcription modulator OS=Xenopus laevis 0.022 26 29 83 sp|Q1XGE2|HAC1_ASPOR 456 509 sp|Q498L2|SLTM_XENLA SAFB-like transcription modulator OS=Xenopus laevis 0.045 20 6 83 sp|Q1XGE2|HAC1_ASPOR 120 195 sp|Q498L2|SLTM_XENLA SAFB-like transcription modulator OS=Xenopus laevis 0.023 25 9 123 sp|Q1XGE2|HAC1_ASPOR 1 122 sp|Q1E554|CGR1_COCIM rRNA-processing protein CGR1 OS=Coccidioides immitis 0.023 27 15 144 sp|Q1XGE2|HAC1_ASPOR 47 181 sp|Q91496|FOS_TETFL Proto-oncogene c-Fos OS=Tetraodon fluviatilis GN=fos PE=3 0.023 26 62 200 sp|Q1XGE2|HAC1_ASPOR 455 605 sp|Q9ESN9|JIP3_MOUSE C-Jun-amino-terminal kinase-interacting protein 3 OS=Mus 0.023 31 8 65 sp|Q1XGE2|HAC1_ASPOR 266 322 sp|Q9ESN9|JIP3_MOUSE C-Jun-amino-terminal kinase-interacting protein 3 OS=Mus 0.023 25 15 248 sp|Q1XGE2|HAC1_ASPOR 48 279 sp|P53450|FOS_TAKRU Proto-oncogene c-Fos OS=Takifugu rubripes GN=fos PE=3 SV=1 0.024 22 43 187 sp|Q1XGE2|HAC1_ASPOR 343 478 sp|Q05682|CALD1_HUMAN Caldesmon OS=Homo sapiens GN=CALD1 PE=1 SV=2 0.49 25 73 239 sp|Q1XGE2|HAC1_ASPOR 541 702 sp|Q05682|CALD1_HUMAN Caldesmon OS=Homo sapiens GN=CALD1 PE=1 SV=2 4.7 25 43 133 sp|Q1XGE2|HAC1_ASPOR 315 400 sp|Q05682|CALD1_HUMAN Caldesmon OS=Homo sapiens GN=CALD1 PE=1 SV=2 0.49 24 32 84 sp|Q1XGE2|HAC1_ASPOR 425 477 sp|Q05682|CALD1_HUMAN Caldesmon OS=Homo sapiens GN=CALD1 PE=1 SV=2 0.024 28 74 237 sp|Q1XGE2|HAC1_ASPOR 125 297 sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos taurus GN=FOS PE=2 SV=2 0.024 29 74 237 sp|Q1XGE2|HAC1_ASPOR 125 298 sp|Q56TT7|FOS_PHOCM Proto-oncogene c-Fos OS=Phodopus campbelli GN=FOS PE=3 0.025 24 66 223 sp|Q1XGE2|HAC1_ASPOR 85 240 sp|Q0CEI3|KAPC_ASPTN Putative transcription factor kapC OS=Aspergillus terreus 0.025 24 9 250 sp|Q1XGE2|HAC1_ASPOR 628 858 sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide exchange factor 18 OS=Mus 0.025 24 8 181 sp|Q1XGE2|HAC1_ASPOR 14 192 sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein OS=Drosophila melanogaster 0.026 25 7 149 sp|Q1XGE2|HAC1_ASPOR 530 669 sp|A2AJI0|MA7D1_MOUSE MAP7 domain-containing protein 1 OS=Mus musculus 0.41 22 6 172 sp|Q1XGE2|HAC1_ASPOR 570 748 sp|A2AJI0|MA7D1_MOUSE MAP7 domain-containing protein 1 OS=Mus musculus 0.048 25 7 145 sp|Q1XGE2|HAC1_ASPOR 58 202 sp|A2AJI0|MA7D1_MOUSE MAP7 domain-containing protein 1 OS=Mus musculus 0.048 27 133 204 sp|Q1XGE2|HAC1_ASPOR 524 589 sp|A2AJI0|MA7D1_MOUSE MAP7 domain-containing protein 1 OS=Mus musculus 0.028 33 50 143 sp|Q1XGE2|HAC1_ASPOR 609 699 sp|Q5R452|SAFB1_PONAB Scaffold attachment factor B1 OS=Pongo abelii GN=SAFB 0.029 29 80 199 sp|Q1XGE2|HAC1_ASPOR 207 322 sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive element-binding protein 3-like 0.029 25 43 149 sp|Q1XGE2|HAC1_ASPOR 319 432 sp|Q9D439|CCD11_MOUSE Coiled-coil domain-containing protein 11 OS=Mus musculus 0.029 27 64 232 sp|Q1XGE2|HAC1_ASPOR 88 265 sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus musculus GN=Fosl1 PE=2 SV=2 0.029 25 29 163 sp|Q1XGE2|HAC1_ASPOR 171 309 sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS=Xenopus laevis GN=mafb PE=2 0.030 30 74 153 sp|Q1XGE2|HAC1_ASPOR 268 347 sp|Q54RZ9|BZPG_DICDI Probable basic-leucine zipper transcription factor G 0.030 24 1 215 sp|Q1XGE2|HAC1_ASPOR 208 432 sp|A0JMK9|CAF1A_DANRE Chromatin assembly factor 1 subunit A OS=Danio rerio 0.030 31 236 286 sp|Q1XGE2|HAC1_ASPOR 524 569 sp|A0JMK9|CAF1A_DANRE Chromatin assembly factor 1 subunit A OS=Danio rerio 0.031 26 68 207 sp|Q1XGE2|HAC1_ASPOR 108 249 sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gallus gallus GN=FOSL2 PE=1 0.031 22 66 223 sp|Q1XGE2|HAC1_ASPOR 85 236 sp|A2R346|KAPC_ASPNC Putative transcription factor kapC OS=Aspergillus niger 0.031 28 74 237 sp|Q1XGE2|HAC1_ASPOR 126 298 sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis catus GN=FOS PE=2 SV=1 0.034 25 49 150 sp|Q1XGE2|HAC1_ASPOR 326 428 sp|P26042|MOES_PIG Moesin OS=Sus scrofa GN=MSN PE=2 SV=3 0.043 30 66 157 sp|Q1XGE2|HAC1_ASPOR 297 384 sp|P26042|MOES_PIG Moesin OS=Sus scrofa GN=MSN PE=2 SV=3 0.034 25 49 150 sp|Q1XGE2|HAC1_ASPOR 326 428 sp|Q2HJ49|MOES_BOVIN Moesin OS=Bos taurus GN=MSN PE=2 SV=3 0.056 31 66 145 sp|Q1XGE2|HAC1_ASPOR 297 367 sp|Q2HJ49|MOES_BOVIN Moesin OS=Bos taurus GN=MSN PE=2 SV=3 0.035 26 48 255 sp|Q1XGE2|HAC1_ASPOR 60 271 sp|A5FV21|IF2_ACICJ Translation initiation factor IF-2 OS=Acidiphilium cryptum 0.56 24 27 229 sp|Q1XGE2|HAC1_ASPOR 27 238 sp|A5FV21|IF2_ACICJ Translation initiation factor IF-2 OS=Acidiphilium cryptum 0.035 27 32 205 sp|Q1XGE2|HAC1_ASPOR 8 187 sp|A6SCT6|DBP3_BOTFB ATP-dependent RNA helicase dbp3 OS=Botryotinia fuckeliana 0.036 32 35 168 sp|Q1XGE2|HAC1_ASPOR 754 892 sp|Q7PGE8|EIF3A_ANOGA Eukaryotic translation initiation factor 3 subunit A 0.037 26 39 216 sp|Q1XGE2|HAC1_ASPOR 488 676 sp|O77788|NFM_BOVIN Neurofilament medium polypeptide OS=Bos taurus GN=NEFM 0.038 24 17 178 sp|Q1XGE2|HAC1_ASPOR 151 317 sp|Q9JTB5|IF2_NEIMA Translation initiation factor IF-2 OS=Neisseria 0.038 24 17 178 sp|Q1XGE2|HAC1_ASPOR 151 317 sp|Q9JYD2|IF2_NEIMB Translation initiation factor IF-2 OS=Neisseria 0.038 24 17 178 sp|Q1XGE2|HAC1_ASPOR 151 317 sp|A1KV51|IF2_NEIMF Translation initiation factor IF-2 OS=Neisseria 0.039 24 17 162 sp|Q1XGE2|HAC1_ASPOR 49 179 sp|P0C5H8|KAPC_EMENI Putative transcription factor kapC OS=Emericella nidulans 0.040 30 5 149 sp|Q1XGE2|HAC1_ASPOR 610 764 sp|Q80YR5|SAFB2_MOUSE Scaffold attachment factor B2 OS=Mus musculus GN=Safb2 0.040 29 74 237 sp|Q1XGE2|HAC1_ASPOR 125 298 sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodopus roborovskii GN=FOS PE=3 0.042 30 83 167 sp|Q1XGE2|HAC1_ASPOR 203 284 sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS=Xenopus tropicalis GN=mafa 0.043 25 49 150 sp|Q1XGE2|HAC1_ASPOR 326 428 sp|P26038|MOES_HUMAN Moesin OS=Homo sapiens GN=MSN PE=1 SV=3 0.056 31 66 145 sp|Q1XGE2|HAC1_ASPOR 297 367 sp|P26038|MOES_HUMAN Moesin OS=Homo sapiens GN=MSN PE=1 SV=3 0.044 25 2 148 sp|Q1XGE2|HAC1_ASPOR 142 290 sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattus norvegicus GN=Hlf PE=2 0.045 28 29 142 sp|Q1XGE2|HAC1_ASPOR 216 324 sp|A0JMT0|CA1AB_XENLA Chromatin assembly factor 1 subunit A-B OS=Xenopus 0.058 22 8 210 sp|Q1XGE2|HAC1_ASPOR 234 432 sp|A0JMT0|CA1AB_XENLA Chromatin assembly factor 1 subunit A-B OS=Xenopus 0.045 28 48 180 sp|Q1XGE2|HAC1_ASPOR 824 957 sp|Q6Y7W6|PERQ2_HUMAN PERQ amino acid-rich with GYF domain-containing protein 0.045 27 1 33 sp|Q1XGE2|HAC1_ASPOR 429 461 sp|Q6Y7W6|PERQ2_HUMAN PERQ amino acid-rich with GYF domain-containing protein 0.046 29 48 163 sp|Q1XGE2|HAC1_ASPOR 33 155 sp|Q8WYK2|JDP2_HUMAN Jun dimerization protein 2 OS=Homo sapiens GN=JDP2 PE=1 0.047 30 52 143 sp|Q1XGE2|HAC1_ASPOR 194 284 sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive element-binding protein 5 OS=Mus 0.047 22 2 193 sp|Q1XGE2|HAC1_ASPOR 410 608 sp|Q9C0A6|SETD5_HUMAN SET domain-containing protein 5 OS=Homo sapiens GN=SETD5 0.047 25 22 233 sp|Q1XGE2|HAC1_ASPOR 156 366 sp|Q92575|UBXN4_HUMAN UBX domain-containing protein 4 OS=Homo sapiens GN=UBXN4 0.047 25 22 233 sp|Q1XGE2|HAC1_ASPOR 156 366 sp|Q5R4I3|UBXN4_PONAB UBX domain-containing protein 4 OS=Pongo abelii GN=UBXN4 0.049 39 80 142 sp|Q1XGE2|HAC1_ASPOR 181 242 sp|P14233|TGA1B_TOBAC TGACG-sequence-specific DNA-binding protein TGA-1B 0.049 24 17 178 sp|Q1XGE2|HAC1_ASPOR 151 317 sp|A9M1D5|IF2_NEIM0 Translation initiation factor IF-2 OS=Neisseria 0.050 27 80 175 sp|Q1XGE2|HAC1_ASPOR 546 644 sp|Q554P0|BZPJ_DICDI Probable basic-leucine zipper transcription factor J 0.051 25 43 146 sp|Q1XGE2|HAC1_ASPOR 279 378 sp|Q8N9W4|GG6L2_HUMAN Golgin subfamily A member 6-like protein 2 OS=Homo 3.7 26 48 138 sp|Q1XGE2|HAC1_ASPOR 361 453 sp|Q8N9W4|GG6L2_HUMAN Golgin subfamily A member 6-like protein 2 OS=Homo 4.8 19 35 142 sp|Q1XGE2|HAC1_ASPOR 302 409 sp|Q8N9W4|GG6L2_HUMAN Golgin subfamily A member 6-like protein 2 OS=Homo 7.9 24 43 142 sp|Q1XGE2|HAC1_ASPOR 404 509 sp|Q8N9W4|GG6L2_HUMAN Golgin subfamily A member 6-like protein 2 OS=Homo 0.051 31 71 124 sp|Q1XGE2|HAC1_ASPOR 3 54 sp|Q8N300|CCD23_HUMAN Coiled-coil domain-containing protein 23 OS=Homo sapiens 0.054 31 41 149 sp|Q1XGE2|HAC1_ASPOR 174 289 sp|O81025|P2A03_ARATH Putative protein PHLOEM PROTEIN 2-LIKE A3 OS=Arabidopsis 0.056 25 49 150 sp|Q1XGE2|HAC1_ASPOR 326 428 sp|O35763|MOES_RAT Moesin OS=Rattus norvegicus GN=Msn PE=1 SV=3 0.26 28 66 145 sp|Q1XGE2|HAC1_ASPOR 297 367 sp|O35763|MOES_RAT Moesin OS=Rattus norvegicus GN=Msn PE=1 SV=3 8.9 29 73 168 sp|Q1XGE2|HAC1_ASPOR 379 475 sp|O35763|MOES_RAT Moesin OS=Rattus norvegicus GN=Msn PE=1 SV=3 0.057 28 44 210 sp|Q1XGE2|HAC1_ASPOR 361 536 sp|Q9Z220|TSG10_RAT Testis-specific gene 10 protein OS=Rattus norvegicus 0.058 26 39 176 sp|Q1XGE2|HAC1_ASPOR 651 787 sp|Q32N93|INCEB_XENLA Inner centromere protein B OS=Xenopus laevis GN=incenp-B 1.2 30 67 146 sp|Q1XGE2|HAC1_ASPOR 502 585 sp|Q32N93|INCEB_XENLA Inner centromere protein B OS=Xenopus laevis GN=incenp-B 3.3 24 46 177 sp|Q1XGE2|HAC1_ASPOR 645 771 sp|Q32N93|INCEB_XENLA Inner centromere protein B OS=Xenopus laevis GN=incenp-B 9.0 26 41 157 sp|Q1XGE2|HAC1_ASPOR 610 737 sp|Q32N93|INCEB_XENLA Inner centromere protein B OS=Xenopus laevis GN=incenp-B 0.058 29 32 211 sp|Q1XGE2|HAC1_ASPOR 177 354 sp|Q95XZ5|NPBL_CAEEL Nipped-B-like protein pqn-85 OS=Caenorhabditis elegans 0.061 27 74 171 sp|Q1XGE2|HAC1_ASPOR 801 901 sp|Q6CT90|EIF3A_KLULA Eukaryotic translation initiation factor 3 subunit A 0.061 25 4 232 sp|Q1XGE2|HAC1_ASPOR 634 845 sp|Q5F489|TAF3_CHICK Transcription initiation factor TFIID subunit 3 OS=Gallus 0.061 35 80 156 sp|Q1XGE2|HAC1_ASPOR 246 326 sp|P42775|GBF2_ARATH G-box-binding factor 2 OS=Arabidopsis thaliana GN=GBF2 0.062 28 18 154 sp|Q1XGE2|HAC1_ASPOR 283 415 sp|Q55EQ3|Y9086_DICDI Uncharacterized abhydrolase domain-containing protein 0.079 25 13 187 sp|Q1XGE2|HAC1_ASPOR 324 487 sp|Q55EQ3|Y9086_DICDI Uncharacterized abhydrolase domain-containing protein 1.6 31 67 187 sp|Q1XGE2|HAC1_ASPOR 639 756 sp|Q55EQ3|Y9086_DICDI Uncharacterized abhydrolase domain-containing protein 0.062 29 73 151 sp|Q1XGE2|HAC1_ASPOR 1105 1180 sp|Q54LU8|Y8646_DICDI Probable serine/threonine-protein kinase DDB_G0286465 0.062 21 7 85 sp|Q1XGE2|HAC1_ASPOR 536 614 sp|Q54LU8|Y8646_DICDI Probable serine/threonine-protein kinase DDB_G0286465 0.25 32 43 70 sp|Q1XGE2|HAC1_ASPOR 755 782 sp|Q54LU8|Y8646_DICDI Probable serine/threonine-protein kinase DDB_G0286465 0.068 27 29 183 sp|Q1XGE2|HAC1_ASPOR 22 188 sp|P94517|YSCB_BACSU Uncharacterized protein yscB OS=Bacillus subtilis GN=yscB 0.069 23 54 174 sp|Q1XGE2|HAC1_ASPOR 799 924 sp|Q2UKG6|EIF3A_ASPOR Eukaryotic translation initiation factor 3 subunit A 0.071 24 49 226 sp|Q1XGE2|HAC1_ASPOR 517 693 sp|Q9Y592|CCD41_HUMAN Coiled-coil domain-containing protein 41 OS=Homo sapiens 6.7 26 32 146 sp|Q1XGE2|HAC1_ASPOR 192 307 sp|Q9Y592|CCD41_HUMAN Coiled-coil domain-containing protein 41 OS=Homo sapiens 0.072 24 13 267 sp|Q1XGE2|HAC1_ASPOR 284 545 sp|Q6Y7W8|PERQ2_MOUSE PERQ amino acid-rich with GYF domain-containing protein 0.091 28 48 180 sp|Q1XGE2|HAC1_ASPOR 825 958 sp|Q6Y7W8|PERQ2_MOUSE PERQ amino acid-rich with GYF domain-containing protein 0.091 33 10 46 sp|Q1XGE2|HAC1_ASPOR 434 472 sp|Q6Y7W8|PERQ2_MOUSE PERQ amino acid-rich with GYF domain-containing protein 0.072 35 246 265 sp|Q1XGE2|HAC1_ASPOR 1169 1188 sp|Q6Y7W8|PERQ2_MOUSE PERQ amino acid-rich with GYF domain-containing protein 0.072 33 75 136 sp|Q1XGE2|HAC1_ASPOR 202 263 sp|Q8X229|FCR3_CANAL Fluconazole resistance protein 3 OS=Candida albicans 0.072 24 49 150 sp|Q1XGE2|HAC1_ASPOR 326 428 sp|P26041|MOES_MOUSE Moesin OS=Mus musculus GN=Msn PE=1 SV=3 0.26 28 66 145 sp|Q1XGE2|HAC1_ASPOR 297 367 sp|P26041|MOES_MOUSE Moesin OS=Mus musculus GN=Msn PE=1 SV=3 0.074 25 55 271 sp|Q1XGE2|HAC1_ASPOR 941 1150 sp|Q9TW28|MYOM_DICDI Myosin-M heavy chain OS=Dictyostelium discoideum GN=myoM 0.20 28 46 205 sp|Q1XGE2|HAC1_ASPOR 943 1098 sp|Q9TW28|MYOM_DICDI Myosin-M heavy chain OS=Dictyostelium discoideum GN=myoM 0.077 24 32 294 sp|Q1XGE2|HAC1_ASPOR 107 375 sp|Q9NZ53|PDXL2_HUMAN Podocalyxin-like protein 2 OS=Homo sapiens GN=PODXL2 0.078 30 52 143 sp|Q1XGE2|HAC1_ASPOR 345 435 sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive element-binding protein 5 OS=Homo 0.079 27 14 203 sp|Q1XGE2|HAC1_ASPOR 664 845 sp|Q5HZG4|TAF3_MOUSE Transcription initiation factor TFIID subunit 3 OS=Mus 4.4 23 72 229 sp|Q1XGE2|HAC1_ASPOR 697 842 sp|Q5HZG4|TAF3_MOUSE Transcription initiation factor TFIID subunit 3 OS=Mus 4.4 24 4 89 sp|Q1XGE2|HAC1_ASPOR 485 567 sp|Q5HZG4|TAF3_MOUSE Transcription initiation factor TFIID subunit 3 OS=Mus 7.0 33 17 74 sp|Q1XGE2|HAC1_ASPOR 240 294 sp|Q5HZG4|TAF3_MOUSE Transcription initiation factor TFIID subunit 3 OS=Mus 0.080 23 41 183 sp|Q1XGE2|HAC1_ASPOR 70 203 sp|A0LE19|IF2_MAGSM Translation initiation factor IF-2 OS=Magnetococcus sp. 0.081 24 41 221 sp|Q1XGE2|HAC1_ASPOR 246 432 sp|Q869E1|DNLI1_DICDI DNA ligase 1 OS=Dictyostelium discoideum GN=lig1 PE=3 3.5 23 32 209 sp|Q1XGE2|HAC1_ASPOR 227 407 sp|Q869E1|DNLI1_DICDI DNA ligase 1 OS=Dictyostelium discoideum GN=lig1 PE=3 0.085 27 48 149 sp|Q1XGE2|HAC1_ASPOR 736 839 sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2 0.49 25 30 152 sp|Q1XGE2|HAC1_ASPOR 122 247 sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2 0.63 24 35 146 sp|Q1XGE2|HAC1_ASPOR 428 540 sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2 1.0 25 49 146 sp|Q1XGE2|HAC1_ASPOR 498 596 sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2 1.3 25 49 146 sp|Q1XGE2|HAC1_ASPOR 470 568 sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2 2.2 22 49 154 sp|Q1XGE2|HAC1_ASPOR 526 634 sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2 3.7 30 75 154 sp|Q1XGE2|HAC1_ASPOR 366 443 sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2 3.7 24 49 138 sp|Q1XGE2|HAC1_ASPOR 554 646 sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2 3.7 26 41 154 sp|Q1XGE2|HAC1_ASPOR 631 738 sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2 4.7 23 40 151 sp|Q1XGE2|HAC1_ASPOR 711 827 sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2 4.7 23 32 154 sp|Q1XGE2|HAC1_ASPOR 650 772 sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2 6.1 27 40 142 sp|Q1XGE2|HAC1_ASPOR 596 704 sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2 6.1 25 40 154 sp|Q1XGE2|HAC1_ASPOR 568 674 sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2 0.088 32 63 155 sp|Q1XGE2|HAC1_ASPOR 192 277 sp|O70191|ATF5_MOUSE Cyclic AMP-dependent transcription factor ATF-5 OS=Mus 0.089 36 77 131 sp|Q1XGE2|HAC1_ASPOR 38 91 sp|Q39140|TGA6_ARATH Transcription factor TGA6 OS=Arabidopsis thaliana GN=TGA6 0.089 27 73 221 sp|Q1XGE2|HAC1_ASPOR 52 196 sp|Q68EL6|NFIL3_DANRE Nuclear factor interleukin-3-regulated protein OS=Danio 0.089 28 43 146 sp|Q1XGE2|HAC1_ASPOR 390 495 sp|Q55FW7|GLE1_DICDI Nucleoporin GLE1 OS=Dictyostelium discoideum GN=gle1 PE=3 1.8 26 48 145 sp|Q1XGE2|HAC1_ASPOR 377 466 sp|Q55FW7|GLE1_DICDI Nucleoporin GLE1 OS=Dictyostelium discoideum GN=gle1 PE=3 0.096 28 43 142 sp|Q1XGE2|HAC1_ASPOR 468 570 sp|Q3TLH4|BA2L2_MOUSE Protein BAT2-like 2 OS=Mus musculus GN=Bat2l2 PE=1 SV=2 9.4 23 7 149 sp|Q1XGE2|HAC1_ASPOR 345 482 sp|Q3TLH4|BA2L2_MOUSE Protein BAT2-like 2 OS=Mus musculus GN=Bat2l2 PE=1 SV=2 0.096 23 140 270 sp|Q1XGE2|HAC1_ASPOR 1816 1953 sp|Q3TLH4|BA2L2_MOUSE Protein BAT2-like 2 OS=Mus musculus GN=Bat2l2 PE=1 SV=2 3.0 28 158 210 sp|Q1XGE2|HAC1_ASPOR 1768 1818 sp|Q3TLH4|BA2L2_MOUSE Protein BAT2-like 2 OS=Mus musculus GN=Bat2l2 PE=1 SV=2 0.096 23 49 188 sp|Q1XGE2|HAC1_ASPOR 81 221 sp|Q04323|UBXN1_HUMAN UBX domain-containing protein 1 OS=Homo sapiens GN=UBXN1 9.9 30 74 208 sp|Q1XGE2|HAC1_ASPOR 83 210 sp|Q04323|UBXN1_HUMAN UBX domain-containing protein 1 OS=Homo sapiens GN=UBXN1 0.097 29 59 150 sp|Q1XGE2|HAC1_ASPOR 223 319 sp|P23922|HBP1A_WHEAT Transcription factor HBP-1a OS=Triticum aestivum PE=2 0.099 35 71 133 sp|Q1XGE2|HAC1_ASPOR 176 239 sp|Q9C5Q2|AI5L3_ARATH ABSCISIC ACID-INSENSITIVE 5-like protein 3 0.10 22 32 142 sp|Q1XGE2|HAC1_ASPOR 168 280 sp|Q54TD7|DDX24_DICDI ATP-dependent RNA helicase ddx24 OS=Dictyostelium 0.10 26 17 178 sp|Q1XGE2|HAC1_ASPOR 151 298 sp|Q5F797|IF2_NEIG1 Translation initiation factor IF-2 OS=Neisseria 0.10 26 17 178 sp|Q1XGE2|HAC1_ASPOR 151 298 sp|B4RMZ3|IF2_NEIG2 Translation initiation factor IF-2 OS=Neisseria 0.10 24 41 231 sp|Q1XGE2|HAC1_ASPOR 310 493 sp|Q86AH4|Y8592_DICDI Putative uncharacterized protein DDB_G0271982 0.11 24 39 169 sp|Q1XGE2|HAC1_ASPOR 616 747 sp|Q8IIG7|YPF05_PLAF7 Uncharacterized protein PF11_0207 OS=Plasmodium 0.11 26 36 210 sp|Q1XGE2|HAC1_ASPOR 1257 1435 sp|B2KI97|THOC2_RHIFE THO complex subunit 2 OS=Rhinolophus ferrumequinum 0.11 25 43 188 sp|Q1XGE2|HAC1_ASPOR 931 1070 sp|Q9UM54|MYO6_HUMAN Myosin-VI OS=Homo sapiens GN=MYO6 PE=1 SV=4 8.2 24 11 149 sp|Q1XGE2|HAC1_ASPOR 877 1018 sp|Q9UM54|MYO6_HUMAN Myosin-VI OS=Homo sapiens GN=MYO6 PE=1 SV=4 0.12 25 16 224 sp|Q1XGE2|HAC1_ASPOR 583 779 sp|Q3KQU3|MA7D1_HUMAN MAP7 domain-containing protein 1 OS=Homo sapiens 3.1 28 16 135 sp|Q1XGE2|HAC1_ASPOR 555 680 sp|Q3KQU3|MA7D1_HUMAN MAP7 domain-containing protein 1 OS=Homo sapiens 8.4 25 16 145 sp|Q1XGE2|HAC1_ASPOR 68 200 sp|Q3KQU3|MA7D1_HUMAN MAP7 domain-containing protein 1 OS=Homo sapiens 0.17 26 14 154 sp|Q1XGE2|HAC1_ASPOR 441 582 sp|Q14244|MAP7_HUMAN Ensconsin OS=Homo sapiens GN=MAP7 PE=1 SV=1 0.12 21 75 188 sp|Q1XGE2|HAC1_ASPOR 556 674 sp|Q14244|MAP7_HUMAN Ensconsin OS=Homo sapiens GN=MAP7 PE=1 SV=1 0.12 31 11 71 sp|Q1XGE2|HAC1_ASPOR 335 403 sp|Q14244|MAP7_HUMAN Ensconsin OS=Homo sapiens GN=MAP7 PE=1 SV=1 0.12 29 62 158 sp|Q1XGE2|HAC1_ASPOR 73 163 sp|P29596|ATF3_RAT Cyclic AMP-dependent transcription factor ATF-3 OS=Rattus 0.12 25 18 201 sp|Q1XGE2|HAC1_ASPOR 380 569 sp|Q5TM26|BAT2_MACMU Large proline-rich protein BAT2 OS=Macaca mulatta GN=BAT2 0.12 27 43 176 sp|Q1XGE2|HAC1_ASPOR 642 792 sp|Q0IHP2|INCE_XENTR Inner centromere protein OS=Xenopus tropicalis GN=incenp 5.5 27 41 149 sp|Q1XGE2|HAC1_ASPOR 589 697 sp|Q0IHP2|INCE_XENTR Inner centromere protein OS=Xenopus tropicalis GN=incenp 0.13 28 18 146 sp|Q1XGE2|HAC1_ASPOR 478 606 sp|Q9NQS7|INCE_HUMAN Inner centromere protein OS=Homo sapiens GN=INCENP PE=1 0.58 24 37 151 sp|Q1XGE2|HAC1_ASPOR 627 738 sp|Q9NQS7|INCE_HUMAN Inner centromere protein OS=Homo sapiens GN=INCENP PE=1 1.2 24 39 151 sp|Q1XGE2|HAC1_ASPOR 607 724 sp|Q9NQS7|INCE_HUMAN Inner centromere protein OS=Homo sapiens GN=INCENP PE=1 1.6 27 41 172 sp|Q1XGE2|HAC1_ASPOR 666 808 sp|Q9NQS7|INCE_HUMAN Inner centromere protein OS=Homo sapiens GN=INCENP PE=1 7.2 21 34 196 sp|Q1XGE2|HAC1_ASPOR 25 175 sp|Q9NQS7|INCE_HUMAN Inner centromere protein OS=Homo sapiens GN=INCENP PE=1 0.13 24 73 337 sp|Q1XGE2|HAC1_ASPOR 200 459 sp|Q5HZY0|UBXN4_RAT UBX domain-containing protein 4 OS=Rattus norvegicus 0.13 30 63 167 sp|Q1XGE2|HAC1_ASPOR 32 134 sp|Q90595|MAFF_CHICK Transcription factor MafF OS=Gallus gallus GN=MAFF PE=1 0.13 27 80 231 sp|Q1XGE2|HAC1_ASPOR 851 996 sp|Q6ZSZ5|ARHGI_HUMAN Rho guanine nucleotide exchange factor 18 OS=Homo 0.13 22 36 151 sp|Q1XGE2|HAC1_ASPOR 299 416 sp|Q7PS12|MOEH_ANOGA Moesin/ezrin/radixin homolog 1 OS=Anopheles gambiae 0.13 28 43 179 sp|Q1XGE2|HAC1_ASPOR 261 399 sp|P12957|CALD1_CHICK Caldesmon OS=Gallus gallus GN=CALD1 PE=1 SV=2 0.17 23 31 216 sp|Q1XGE2|HAC1_ASPOR 278 457 sp|P12957|CALD1_CHICK Caldesmon OS=Gallus gallus GN=CALD1 PE=1 SV=2 9.7 22 52 239 sp|Q1XGE2|HAC1_ASPOR 472 660 sp|P12957|CALD1_CHICK Caldesmon OS=Gallus gallus GN=CALD1 PE=1 SV=2 0.13 34 76 133 sp|Q1XGE2|HAC1_ASPOR 206 262 sp|Q08DA8|ATF1_BOVIN Cyclic AMP-dependent transcription factor ATF-1 OS=Bos 0.14 26 26 139 sp|Q1XGE2|HAC1_ASPOR 52 172 sp|Q94126|CES2_CAEEL Cell death specification protein 2 OS=Caenorhabditis 0.14 29 34 133 sp|Q1XGE2|HAC1_ASPOR 21 114 sp|O66547|Y157_AQUAE Uncharacterized protein aq_157 OS=Aquifex aeolicus 0.14 28 35 140 sp|Q1XGE2|HAC1_ASPOR 681 787 sp|A6ZRZ0|NST1_YEAS7 Stress response protein NST1 OS=Saccharomyces cerevisiae 1.4 24 41 231 sp|Q1XGE2|HAC1_ASPOR 669 849 sp|A6ZRZ0|NST1_YEAS7 Stress response protein NST1 OS=Saccharomyces cerevisiae 6.1 22 43 149 sp|Q1XGE2|HAC1_ASPOR 633 737 sp|A6ZRZ0|NST1_YEAS7 Stress response protein NST1 OS=Saccharomyces cerevisiae 0.14 28 35 140 sp|Q1XGE2|HAC1_ASPOR 681 787 sp|P53935|NST1_YEAST Stress response protein NST1 OS=Saccharomyces cerevisiae 1.4 24 41 231 sp|Q1XGE2|HAC1_ASPOR 669 849 sp|P53935|NST1_YEAST Stress response protein NST1 OS=Saccharomyces cerevisiae 6.1 22 43 149 sp|Q1XGE2|HAC1_ASPOR 633 737 sp|P53935|NST1_YEAST Stress response protein NST1 OS=Saccharomyces cerevisiae 0.14 23 24 281 sp|Q1XGE2|HAC1_ASPOR 48 304 sp|A3BYC1|HOX25_ORYSJ Homeobox-leucine zipper protein HOX25 OS=Oryza sativa 0.14 24 36 206 sp|Q1XGE2|HAC1_ASPOR 1257 1429 sp|B1AZI6|THOC2_MOUSE THO complex subunit 2 OS=Mus musculus GN=Thoc2 PE=3 SV=1 0.15 24 6 203 sp|Q1XGE2|HAC1_ASPOR 2186 2384 sp|Q9H254|SPTN4_HUMAN Spectrin beta chain, brain 3 OS=Homo sapiens GN=SPTBN4 0.15 23 16 223 sp|Q1XGE2|HAC1_ASPOR 44 237 sp|Q2UNX4|KAPC_ASPOR Putative transcription factor kapC OS=Aspergillus oryzae 0.15 34 82 176 sp|Q1XGE2|HAC1_ASPOR 487 581 sp|Q9JJ50|HGS_RAT Hepatocyte growth factor-regulated tyrosine kinase substrate 0.15 29 6 68 sp|Q1XGE2|HAC1_ASPOR 277 355 sp|Q9JJ50|HGS_RAT Hepatocyte growth factor-regulated tyrosine kinase substrate 0.15 29 62 158 sp|Q1XGE2|HAC1_ASPOR 73 163 sp|Q2KII1|ATF3_BOVIN Cyclic AMP-dependent transcription factor ATF-3 OS=Bos 0.15 28 17 139 sp|Q1XGE2|HAC1_ASPOR 260 388 sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcription factor ATF-6 beta 0.16 25 18 234 sp|Q1XGE2|HAC1_ASPOR 378 584 sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BAT2 OS=Mus musculus GN=Bat2 0.16 28 80 232 sp|Q1XGE2|HAC1_ASPOR 137 292 sp|Q4I877|NDE1_GIBZE Nuclear distribution protein nudE homolog 1 OS=Gibberella 0.16 28 74 183 sp|Q1XGE2|HAC1_ASPOR 218 339 sp|Q84WU4|GOGC3_ARATH Golgin candidate 3 OS=Arabidopsis thaliana GN=GC3 PE=1 0.16 23 19 188 sp|Q1XGE2|HAC1_ASPOR 46 221 sp|Q499N6|UBXN1_RAT UBX domain-containing protein 1 OS=Rattus norvegicus 0.16 27 72 144 sp|Q1XGE2|HAC1_ASPOR 201 273 sp|B4PPK2|FOSL_DROYA Transcription factor kayak OS=Drosophila yakuba GN=kay 0.16 35 183 239 sp|Q1XGE2|HAC1_ASPOR 382 438 sp|B4PPK2|FOSL_DROYA Transcription factor kayak OS=Drosophila yakuba GN=kay 0.16 38 10 43 sp|Q1XGE2|HAC1_ASPOR 95 127 sp|B4PPK2|FOSL_DROYA Transcription factor kayak OS=Drosophila yakuba GN=kay 0.17 25 37 221 sp|Q1XGE2|HAC1_ASPOR 1022 1198 sp|A4R8N4|PAN1_MAGGR Actin cytoskeleton-regulatory complex protein PAN1 0.17 26 41 209 sp|Q1XGE2|HAC1_ASPOR 1024 1201 sp|B2AWS3|PAN1_PODAN Actin cytoskeleton-regulatory complex protein PAN1 0.17 22 21 216 sp|Q1XGE2|HAC1_ASPOR 1296 1485 sp|Q92545|TM131_HUMAN Transmembrane protein 131 OS=Homo sapiens GN=TMEM131 0.17 24 4 191 sp|Q1XGE2|HAC1_ASPOR 41 230 sp|Q38W81|IF2_LACSS Translation initiation factor IF-2 OS=Lactobacillus sakei 0.17 30 83 163 sp|Q1XGE2|HAC1_ASPOR 276 355 sp|Q789F3|MAF_CHICK Transcription factor Maf OS=Gallus gallus GN=MAF PE=1 SV=1 0.17 24 19 146 sp|Q1XGE2|HAC1_ASPOR 131 254 sp|P49716|CEBPD_HUMAN CCAAT/enhancer-binding protein delta OS=Homo sapiens 0.49 29 60 154 sp|Q1XGE2|HAC1_ASPOR 153 248 sp|P49716|CEBPD_HUMAN CCAAT/enhancer-binding protein delta OS=Homo sapiens 0.17 35 77 133 sp|Q1XGE2|HAC1_ASPOR 206 261 sp|P81269|ATF1_MOUSE Cyclic AMP-dependent transcription factor ATF-1 OS=Mus 0.18 30 83 163 sp|Q1XGE2|HAC1_ASPOR 276 355 sp|P23091|MAF_AVIS4 Transforming protein Maf OS=Avian musculoaponeurotic 0.18 35 77 133 sp|Q1XGE2|HAC1_ASPOR 208 263 sp|P18846|ATF1_HUMAN Cyclic AMP-dependent transcription factor ATF-1 OS=Homo 0.18 23 41 160 sp|Q1XGE2|HAC1_ASPOR 586 702 sp|Q07283|TRHY_HUMAN Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2 0.23 26 41 154 sp|Q1XGE2|HAC1_ASPOR 546 658 sp|Q07283|TRHY_HUMAN Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2 0.30 26 40 151 sp|Q1XGE2|HAC1_ASPOR 253 359 sp|Q07283|TRHY_HUMAN Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2 3.7 28 48 151 sp|Q1XGE2|HAC1_ASPOR 241 347 sp|Q07283|TRHY_HUMAN Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2 3.7 24 41 154 sp|Q1XGE2|HAC1_ASPOR 956 1071 sp|Q07283|TRHY_HUMAN Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2 3.7 26 43 151 sp|Q1XGE2|HAC1_ASPOR 440 557 sp|Q07283|TRHY_HUMAN Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2 4.7 29 43 151 sp|Q1XGE2|HAC1_ASPOR 1297 1404 sp|Q07283|TRHY_HUMAN Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2 0.18 29 107 235 sp|Q1XGE2|HAC1_ASPOR 178 296 sp|Q4X1V0|NDE1_ASPFU Nuclear distribution protein nudE homolog 1 4.6 24 80 204 sp|Q1XGE2|HAC1_ASPOR 162 287 sp|Q4X1V0|NDE1_ASPFU Nuclear distribution protein nudE homolog 1 0.18 30 81 120 sp|Q1XGE2|HAC1_ASPOR 40 77 sp|Q4X1V0|NDE1_ASPFU Nuclear distribution protein nudE homolog 1 0.18 25 77 135 sp|Q1XGE2|HAC1_ASPOR 12 70 sp|Q8R1H8|BATF2_MOUSE Basic leucine zipper transcriptional factor ATF-like 2 0.18 29 137 200 sp|Q1XGE2|HAC1_ASPOR 117 184 sp|Q8R1H8|BATF2_MOUSE Basic leucine zipper transcriptional factor ATF-like 2 0.19 26 31 159 sp|Q1XGE2|HAC1_ASPOR 11 140 sp|Q66J36|NFIL3_XENLA Nuclear factor interleukin-3-regulated protein 0.19 23 36 177 sp|Q1XGE2|HAC1_ASPOR 242 376 sp|P13816|GARP_PLAFF Glutamic acid-rich protein OS=Plasmodium falciparum 0.19 25 76 142 sp|Q1XGE2|HAC1_ASPOR 137 203 sp|P38749|YAP3_YEAST AP-1-like transcription factor YAP3 OS=Saccharomyces 0.19 24 80 285 sp|Q1XGE2|HAC1_ASPOR 588 784 sp|Q3UIW5|RNF10_MOUSE RING finger protein 10 OS=Mus musculus GN=Rnf10 PE=2 0.19 19 1 57 sp|Q1XGE2|HAC1_ASPOR 546 602 sp|Q3UIW5|RNF10_MOUSE RING finger protein 10 OS=Mus musculus GN=Rnf10 PE=2 0.19 40 73 131 sp|Q1XGE2|HAC1_ASPOR 37 91 sp|P23923|HBP1B_WHEAT Transcription factor HBP-1b(c38) OS=Triticum aestivum 0.19 24 49 226 sp|Q1XGE2|HAC1_ASPOR 516 692 sp|Q9D5R3|CCD41_MOUSE Coiled-coil domain-containing protein 41 OS=Mus musculus 0.20 23 35 193 sp|Q1XGE2|HAC1_ASPOR 737 898 sp|Q9QXL2|KI21A_MOUSE Kinesin-like protein KIF21A OS=Mus musculus GN=Kif21a 0.20 25 62 200 sp|Q1XGE2|HAC1_ASPOR 454 604 sp|Q9UPT6|JIP3_HUMAN C-Jun-amino-terminal kinase-interacting protein 3 OS=Homo 0.20 31 8 65 sp|Q1XGE2|HAC1_ASPOR 265 321 sp|Q9UPT6|JIP3_HUMAN C-Jun-amino-terminal kinase-interacting protein 3 OS=Homo 0.20 22 6 250 sp|Q1XGE2|HAC1_ASPOR 784 1016 sp|P16884|NFH_RAT Neurofilament heavy polypeptide OS=Rattus norvegicus GN=Nefh 0.20 29 62 158 sp|Q1XGE2|HAC1_ASPOR 73 163 sp|Q60765|ATF3_MOUSE Cyclic AMP-dependent transcription factor ATF-3 OS=Mus 0.20 26 64 163 sp|Q1XGE2|HAC1_ASPOR 142 244 sp|Q9N0J3|CEBPD_SHEEP CCAAT/enhancer-binding protein delta OS=Ovis aries 0.20 20 39 235 sp|Q1XGE2|HAC1_ASPOR 632 820 sp|A5DLJ8|NST1_PICGU Stress response protein NST1 OS=Pichia guilliermondii hmmer-3.1b2/easel/demotic/regress/.dropbox.attr0000775361611702660230000000000212473272073021103 0ustar wheelerteddy{}hmmer-3.1b2/easel/demotic/regress/ssearch-profmark.out0000664361611702660230000002044712473612605022467 0ustar wheelerteddy1.4e-78 292.6 sp|P55685|Y4WG_RHISN sp|P55685|Y4WG_RHISN 4.1 32.9 sp|Q7SY73|ABH6B_XENLA sp|P55685|Y4WG_RHISN 1.6e-109 397.3 sp|Q1XGE2|HAC1_ASPOR sp|Q1XGE2|HAC1_ASPOR 2e-82 307.2 sp|Q8TFU8|HAC1_EMENI sp|Q1XGE2|HAC1_ASPOR 1.7e-15 85.3 sp|Q8TFF3|HAC1_TRIRE sp|Q1XGE2|HAC1_ASPOR 4.9e-06 52.9 sp|P41546|HAC1_YEAST sp|Q1XGE2|HAC1_ASPOR 0.00016 47.5 sp|O24646|HY5_ARATH sp|Q1XGE2|HAC1_ASPOR 0.0042 43.3 sp|P17861|XBP1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0048 43.1 sp|Q3SZZ2|XBP1_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.0068 43.6 sp|A1L224|CR3L2_DANRE sp|Q1XGE2|HAC1_ASPOR 0.0083 41.6 sp|Q9SM50|HY5_SOLLC sp|Q1XGE2|HAC1_ASPOR 0.0097 43.1 sp|Q8BH52|CR3L2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.01 43.3 sp|Q54WN7|BZPF_DICDI sp|Q1XGE2|HAC1_ASPOR 0.021 43.3 sp|A3LYI0|NST1_PICST sp|Q1XGE2|HAC1_ASPOR 0.028 41.6 sp|Q66HA2|CR3L1_RAT sp|Q1XGE2|HAC1_ASPOR 0.035 41.1 sp|Q3SYZ3|CR3L3_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.036 41.2 sp|Q9Z125|CR3L1_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.045 40.9 sp|Q96BA8|CR3L1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.045 40.9 sp|Q70SY1|CR3L2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.058 40.5 sp|Q5RCM9|CR3L2_PONAB sp|Q1XGE2|HAC1_ASPOR 0.071 39.9 sp|Q61817|CREB3_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.074 40.2 sp|A2VD01|CR3L2_XENLA sp|Q1XGE2|HAC1_ASPOR 0.076 39.9 sp|Q08CW8|CR3L4_XENTR sp|Q1XGE2|HAC1_ASPOR 0.082 40.0 sp|Q6QDP7|CR3L2_RAT sp|Q1XGE2|HAC1_ASPOR 0.12 38.9 sp|P13346|FOSB_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.14 39.2 sp|Q91XE9|CR3L3_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.14 40.7 sp|Q5A2K0|NST1_CANAL sp|Q1XGE2|HAC1_ASPOR 0.17 37.2 sp|Q8W191|HYH_ARATH sp|Q1XGE2|HAC1_ASPOR 0.17 38.3 sp|Q9TUB3|FOSB_CANFA sp|Q1XGE2|HAC1_ASPOR 0.19 38.7 sp|Q5FVM5|CR3L3_RAT sp|Q1XGE2|HAC1_ASPOR 0.2 37.8 sp|P0C5H8|KAPC_EMENI sp|Q1XGE2|HAC1_ASPOR 0.25 37.8 sp|P53539|FOSB_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.29 37.6 sp|P79702|FOS_CYPCA sp|Q1XGE2|HAC1_ASPOR 0.3 39.3 sp|Q0D9R7|ARFS_ORYSJ sp|Q1XGE2|HAC1_ASPOR 0.32 37.1 sp|P15407|FOSL1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.37 39.0 sp|Q5B3C8|NST1_EMENI sp|Q1XGE2|HAC1_ASPOR 0.38 38.5 sp|Q9WVS8|MK07_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.4 37.3 sp|O97930|FOS_PIG sp|Q1XGE2|HAC1_ASPOR 0.41 37.1 sp|Q06507|ATF4_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.59 36.5 sp|Q90370|MAFB_COTJA sp|Q1XGE2|HAC1_ASPOR 0.59 36.5 sp|Q90888|MAFB_CHICK sp|Q1XGE2|HAC1_ASPOR 0.7 36.8 sp|Q68CJ9|CR3L3_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.73 35.3 sp|Q09926|PCR1_SCHPO sp|Q1XGE2|HAC1_ASPOR 0.74 39.8 sp|O88778|BSN_RAT sp|Q1XGE2|HAC1_ASPOR 0.77 36.8 sp|Q8VCH8|UBXN4_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.79 36.3 sp|Q9D2A5|CR3L4_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.79 38.1 sp|A4R2R1|NST1_MAGGR sp|Q1XGE2|HAC1_ASPOR 0.85 36.1 sp|P18848|ATF4_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.92 36.1 sp|O88479|FOS_MESAU sp|Q1XGE2|HAC1_ASPOR 0.94 37.1 sp|A5PKJ4|MK07_BOVIN sp|Q1XGE2|HAC1_ASPOR 1 37.9 sp|Q1DQC1|PAN1_COCIM sp|Q1XGE2|HAC1_ASPOR 1 35.9 sp|P01101|FOS_MOUSE sp|Q1XGE2|HAC1_ASPOR 1 35.8 sp|Q6NW59|ATF4_DANRE sp|Q1XGE2|HAC1_ASPOR 1.1 37.9 sp|Q76LL6|FHOD3_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.1 35.9 sp|Q8TEY5|CR3L4_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.1 35.9 sp|Q99090|CPRF2_PETCR sp|Q1XGE2|HAC1_ASPOR 1.2 36.1 sp|Q5R9C9|ATF7_PONAB sp|Q1XGE2|HAC1_ASPOR 1.2 36.1 sp|P17544|ATF7_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.2 35.8 sp|Q5UEM8|CR3L4_MACFA sp|Q1XGE2|HAC1_ASPOR 1.3 35.4 sp|P51145|FOSL2_RAT sp|Q1XGE2|HAC1_ASPOR 1.3 35.6 sp|P01100|FOS_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.4 36.6 sp|Q03173|ENAH_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.4 35.3 sp|Q9Y5Q3|MAFB_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.5 34.9 sp|Q9R1S4|XBP1_RAT sp|Q1XGE2|HAC1_ASPOR 1.5 35.4 sp|P01102|FOS_MSVFB sp|Q1XGE2|HAC1_ASPOR 1.5 34.9 sp|P10158|FOSL1_RAT sp|Q1XGE2|HAC1_ASPOR 1.6 37.1 sp|Q6Y7W8|PERQ2_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.6 35.1 sp|P15408|FOSL2_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.7 35.4 sp|Q502F0|CR3LA_DANRE sp|Q1XGE2|HAC1_ASPOR 1.8 34.7 sp|A2R346|KAPC_ASPNC sp|Q1XGE2|HAC1_ASPOR 1.8 34.9 sp|Q2PFS4|MAFB_MACFA sp|Q1XGE2|HAC1_ASPOR 1.8 35.2 sp|Q8R0S1|ATF7_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.9 34.6 sp|P48755|FOSL1_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.9 36.1 sp|Q9UQ88|CD11A_HUMAN sp|Q1XGE2|HAC1_ASPOR 2 33.4 sp|Q16520|BATF_HUMAN sp|Q1XGE2|HAC1_ASPOR 2 34.6 sp|Q0CEI3|KAPC_ASPTN sp|Q1XGE2|HAC1_ASPOR 2 34.7 sp|P54842|MAFB_RAT sp|Q1XGE2|HAC1_ASPOR 2 35.4 sp|P29747|CREBA_DROME sp|Q1XGE2|HAC1_ASPOR 2 34.7 sp|P47930|FOSL2_MOUSE sp|Q1XGE2|HAC1_ASPOR 2.1 35.1 sp|Q63ZM7|STABP_XENLA sp|Q1XGE2|HAC1_ASPOR 2.1 34.9 sp|Q91496|FOS_TETFL sp|Q1XGE2|HAC1_ASPOR 2.1 34.4 sp|O35426|XBP1_MOUSE sp|Q1XGE2|HAC1_ASPOR 2.2 34.7 sp|Q9ES19|ATF4_RAT sp|Q1XGE2|HAC1_ASPOR 2.3 34.2 sp|O02756|CEBPD_BOVIN sp|Q1XGE2|HAC1_ASPOR 2.3 34.6 sp|P54841|MAFB_MOUSE sp|Q1XGE2|HAC1_ASPOR 2.3 34.4 sp|A1C9M5|KAPC_ASPCL sp|Q1XGE2|HAC1_ASPOR 2.3 34.7 sp|Q8SQ19|CREB3_BOVIN sp|Q1XGE2|HAC1_ASPOR 2.4 34.7 sp|O77628|FOS_BOVIN sp|Q1XGE2|HAC1_ASPOR 2.4 35.7 sp|Q6NS15|MED15_XENLA sp|Q1XGE2|HAC1_ASPOR 2.5 33.9 sp|P94517|YSCB_BACSU sp|Q1XGE2|HAC1_ASPOR 2.5 34.4 sp|Q504L8|MAFB_XENTR sp|Q1XGE2|HAC1_ASPOR 2.5 34.2 sp|O57342|MAFA_COTJA sp|Q1XGE2|HAC1_ASPOR 2.7 34.6 sp|P12841|FOS_RAT sp|Q1XGE2|HAC1_ASPOR 2.7 34.6 sp|Q8HZP6|FOS_FELCA sp|Q1XGE2|HAC1_ASPOR 2.7 34.6 sp|Q56TT7|FOS_PHOCM sp|Q1XGE2|HAC1_ASPOR 2.7 35.7 sp|Q2VZV0|IF2_MAGSA sp|Q1XGE2|HAC1_ASPOR 2.8 34.4 sp|Q3ZCH6|ATF4_BOVIN sp|Q1XGE2|HAC1_ASPOR 2.8 34.9 sp|Q5HZY0|UBXN4_RAT sp|Q1XGE2|HAC1_ASPOR 2.8 35.6 sp|P0C865|MK07_RAT sp|Q1XGE2|HAC1_ASPOR 2.9 33.9 sp|Q9N0J3|CEBPD_SHEEP sp|Q1XGE2|HAC1_ASPOR 2.9 34.4 sp|Q5UEM7|CR3L4_RAT sp|Q1XGE2|HAC1_ASPOR 3 35.6 sp|A0JMK9|CAF1A_DANRE sp|Q1XGE2|HAC1_ASPOR 3.2 35.9 sp|Q96JK9|MAML3_HUMAN sp|Q1XGE2|HAC1_ASPOR 3.2 32.7 sp|Q9NR55|BATF3_HUMAN sp|Q1XGE2|HAC1_ASPOR 3.2 36.2 sp|Q9C0A6|SETD5_HUMAN sp|Q1XGE2|HAC1_ASPOR 3.4 35.2 sp|B3DM43|SOX5_XENTR sp|Q1XGE2|HAC1_ASPOR 3.5 35.4 sp|A5FV21|IF2_ACICJ sp|Q1XGE2|HAC1_ASPOR 3.6 34.0 sp|Q8K1L0|CREB5_MOUSE sp|Q1XGE2|HAC1_ASPOR 3.6 36.9 sp|Q9H254|SPTN4_HUMAN sp|Q1XGE2|HAC1_ASPOR 3.6 36.0 sp|B2AWS3|PAN1_PODAN sp|Q1XGE2|HAC1_ASPOR 4 32.7 sp|Q61827|MAFK_MOUSE sp|Q1XGE2|HAC1_ASPOR 4 32.7 sp|O60675|MAFK_HUMAN sp|Q1XGE2|HAC1_ASPOR 4.2 35.9 sp|Q4QRL3|CC88B_MOUSE sp|Q1XGE2|HAC1_ASPOR 4.3 33.9 sp|P53450|FOS_TAKRU sp|Q1XGE2|HAC1_ASPOR 4.4 37.2 sp|Q9UPA5|BSN_HUMAN sp|Q1XGE2|HAC1_ASPOR 4.4 37.2 sp|O88737|BSN_MOUSE sp|Q1XGE2|HAC1_ASPOR 4.5 33.5 sp|P42774|GBF1_ARATH sp|Q1XGE2|HAC1_ASPOR 4.6 34.9 sp|Q7ZVN7|MED15_DANRE sp|Q1XGE2|HAC1_ASPOR 4.6 33.4 sp|O42290|MAFA_CHICK sp|Q1XGE2|HAC1_ASPOR 4.7 35.2 sp|A9V549|EIF3A_MONBE sp|Q1XGE2|HAC1_ASPOR 4.8 32.0 sp|Q9D275|BATF3_MOUSE sp|Q1XGE2|HAC1_ASPOR 4.8 34.4 sp|Q5RCJ1|CIP4_PONAB sp|Q1XGE2|HAC1_ASPOR 5 33.7 sp|O43889|CREB3_HUMAN sp|Q1XGE2|HAC1_ASPOR 5.1 32.0 sp|O35284|BATF_MOUSE sp|Q1XGE2|HAC1_ASPOR 5.1 33.2 sp|Q2UNX4|KAPC_ASPOR sp|Q1XGE2|HAC1_ASPOR 5.1 34.0 sp|Q02930|CREB5_HUMAN sp|Q1XGE2|HAC1_ASPOR 5.2 35.0 sp|Q6P9R4|ARHGI_MOUSE sp|Q1XGE2|HAC1_ASPOR 5.3 34.9 sp|Q5F489|TAF3_CHICK sp|Q1XGE2|HAC1_ASPOR 5.3 34.9 sp|Q5HZG4|TAF3_MOUSE sp|Q1XGE2|HAC1_ASPOR 5.4 35.4 sp|Q9UKV3|ACINU_HUMAN sp|Q1XGE2|HAC1_ASPOR 5.4 34.9 sp|Q5KGK5|EIF3A_CRYNE sp|Q1XGE2|HAC1_ASPOR 5.5 33.5 sp|Q56TN0|FOS_PHORO sp|Q1XGE2|HAC1_ASPOR 6.1 34.5 sp|Q3KQU3|MA7D1_HUMAN sp|Q1XGE2|HAC1_ASPOR 6.1 34.0 sp|Q15642|CIP4_HUMAN sp|Q1XGE2|HAC1_ASPOR 6.2 33.5 sp|Q1LYG4|CR3LB_DANRE sp|Q1XGE2|HAC1_ASPOR 6.4 33.0 sp|Q6DE84|MAFB_XENLA sp|Q1XGE2|HAC1_ASPOR 6.6 33.0 sp|P18625|FOSL2_CHICK sp|Q1XGE2|HAC1_ASPOR 6.7 36.0 sp|Q3UHR0|BAHC1_MOUSE sp|Q1XGE2|HAC1_ASPOR 6.8 32.9 sp|Q8BW74|HLF_MOUSE sp|Q1XGE2|HAC1_ASPOR 6.8 32.9 sp|Q16534|HLF_HUMAN sp|Q1XGE2|HAC1_ASPOR 6.9 33.9 sp|Q9NZ53|PDXL2_HUMAN sp|Q1XGE2|HAC1_ASPOR 6.9 35.7 sp|Q7TSC1|BAT2_MOUSE sp|Q1XGE2|HAC1_ASPOR 7.1 34.0 sp|O35451|ATF6B_MOUSE sp|Q1XGE2|HAC1_ASPOR 7.2 34.0 sp|Q99941|ATF6B_HUMAN sp|Q1XGE2|HAC1_ASPOR 7.3 34.2 sp|Q3UIW5|RNF10_MOUSE sp|Q1XGE2|HAC1_ASPOR 7.5 35.2 sp|Q6C908|PAN1_YARLI sp|Q1XGE2|HAC1_ASPOR 7.8 35.0 sp|Q9W705|NCOA2_XENLA sp|Q1XGE2|HAC1_ASPOR 7.9 34.7 sp|O60841|IF2P_HUMAN sp|Q1XGE2|HAC1_ASPOR 7.9 35.7 sp|P15205|MAP1B_RAT sp|Q1XGE2|HAC1_ASPOR 8.3 33.2 sp|Q9M7Q3|AI5L6_ARATH sp|Q1XGE2|HAC1_ASPOR 8.3 33.2 sp|Q69022|EBNA2_EBVA8 sp|Q1XGE2|HAC1_ASPOR 8.3 34.2 sp|Q9ES64|USH1C_MOUSE sp|Q1XGE2|HAC1_ASPOR 8.4 32.5 sp|Q4U1U2|MAFA_XENTR sp|Q1XGE2|HAC1_ASPOR 8.5 33.2 sp|P29681|IMPE2_DROME sp|Q1XGE2|HAC1_ASPOR 8.6 34.0 sp|Q54Y73|BZPD_DICDI sp|Q1XGE2|HAC1_ASPOR 8.6 32.5 sp|Q64709|HLF_RAT sp|Q1XGE2|HAC1_ASPOR 8.8 35.3 sp|Q6MG48|BAT2_RAT sp|Q1XGE2|HAC1_ASPOR 9 34.2 sp|Q54HX6|MYBI_DICDI sp|Q1XGE2|HAC1_ASPOR 9.1 31.5 sp|Q90596|MAFK_CHICK sp|Q1XGE2|HAC1_ASPOR 9.2 33.7 sp|Q4VYS1|FOXP2_XENLA sp|Q1XGE2|HAC1_ASPOR 9.5 32.8 sp|Q54NF3|Y6434_DICDI sp|Q1XGE2|HAC1_ASPOR 9.5 34.7 sp|Q0CPW4|PAN1_ASPTN sp|Q1XGE2|HAC1_ASPOR 9.7 33.3 sp|Q8N8S7|ENAH_HUMAN sp|Q1XGE2|HAC1_ASPOR 9.7 33.2 sp|Q00312|RBF1_CANAL sp|Q1XGE2|HAC1_ASPOR 9.9 35.2 sp|P48634|BAT2_HUMAN sp|Q1XGE2|HAC1_ASPOR hmmer-3.1b2/easel/demotic/regress/ncbi-blastp-profmark.out0000664361611702660230000000171712473612605023234 0ustar wheelerteddy1e-88 325.0 sp|P55685|Y4WG_RHISN sp|P55685|Y4WG_RHISN 3.8 31.0 sp|B2VCH7|MTLD_ERWT9 sp|P55685|Y4WG_RHISN 7.3 30.0 sp|Q9CZP0|UFSP1_MOUSE sp|P55685|Y4WG_RHISN 0 602.0 sp|Q1XGE2|HAC1_ASPOR sp|Q1XGE2|HAC1_ASPOR 0 416.0 sp|Q8TFU8|HAC1_EMENI sp|Q1XGE2|HAC1_ASPOR 2e-15 84.0 sp|Q8TFF3|HAC1_TRIRE sp|Q1XGE2|HAC1_ASPOR 1e-07 58.0 sp|P41546|HAC1_YEAST sp|Q1XGE2|HAC1_ASPOR 0.01 41.0 sp|O24646|HY5_ARATH sp|Q1XGE2|HAC1_ASPOR 0.12 38.0 sp|Q9SM50|HY5_SOLLC sp|Q1XGE2|HAC1_ASPOR 1.5 34.0 sp|Q61817|CREB3_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.6 34.0 sp|A1URL3|PYRD_BARBK sp|Q1XGE2|HAC1_ASPOR 1.9 34.0 sp|Q3SYZ3|CR3L3_BOVIN sp|Q1XGE2|HAC1_ASPOR 2.1 33.0 sp|Q68CJ9|CR3L3_HUMAN sp|Q1XGE2|HAC1_ASPOR 2.6 33.0 sp|Q5FVM5|CR3L3_RAT sp|Q1XGE2|HAC1_ASPOR 2.9 33.0 sp|Q91XE9|CR3L3_MOUSE sp|Q1XGE2|HAC1_ASPOR 5.7 32.0 sp|Q8W191|HYH_ARATH sp|Q1XGE2|HAC1_ASPOR 5.8 32.0 sp|Q3SZZ2|XBP1_BOVIN sp|Q1XGE2|HAC1_ASPOR 9 32.0 sp|Q5UEM7|CR3L4_RAT sp|Q1XGE2|HAC1_ASPOR 9.3 32.0 sp|Q9D2A5|CR3L4_MOUSE sp|Q1XGE2|HAC1_ASPOR hmmer-3.1b2/easel/demotic/regress/hmmsearch-tbl.out0000664361611702660230000016124612473612605021751 0ustar wheelerteddy4.5 0 88 116 US2 50 78 sp|P06485|US02_HHV11 1.1e-43 0 2 126 US2 111 247 sp|P06485|US02_HHV11 9.8e-43 0 1 126 US2 110 246 sp|P13292|US02_HHV2H 5.9e-40 0 1 124 US2 1 116 sp|Q05106|US453_GAHVG 1.1e-39 0 1 124 US2 111 265 sp|P32517|US02_EHV1K 1.7e-37 0 1 112 US2 111 245 sp|P28964|US02_EHV1B 9.8e-36 0 1 110 US2 105 208 sp|Q08099|US02_BHV1S 8.8e-22 0 1 125 US2 135 255 sp|P24382|US02_SUHVN 7.1e-05 0 51 107 US2 208 262 sp|Q9ZK80|ATPG_HELPJ 7.1e-05 0 51 107 US2 208 262 sp|P56082|ATPG_HELPY 7.8e-05 0 51 107 US2 208 262 sp|B2UUP1|ATPG_HELPS 7.8e-05 0 51 107 US2 208 262 sp|B6JMX3|ATPG_HELP2 0.00013 0 52 107 US2 209 262 sp|Q17Y79|ATPG_HELAH 0.00018 0 51 107 US2 208 262 sp|B5Z8D1|ATPG_HELPG 0.0002 0 51 107 US2 208 262 sp|Q1CSD4|ATPG_HELPH 1.3e-42 0 1 138 Glyco_transf_28 3 142 sp|A7Z4E5|MURG_BACA2 4e-41 0 1 138 Glyco_transf_28 3 142 sp|Q65JY0|MURG_BACLD 4 0 13 106 Glyco_transf_28 203 234 sp|Q65JY0|MURG_BACLD 4.9e-42 0 1 138 Glyco_transf_28 3 142 sp|P37585|MURG_BACSU 2.4e-41 0 1 138 Glyco_transf_28 3 142 sp|A8FCY1|MURG_BACP2 7.9e-40 0 1 139 Glyco_transf_28 3 143 sp|Q812W5|MURG1_BACCR 7e-41 0 2 138 Glyco_transf_28 6 142 sp|A3MY90|MURG_ACTP2 7.9e-40 0 1 139 Glyco_transf_28 3 143 sp|A0RHT1|MURG2_BACAH 7.9e-40 0 1 139 Glyco_transf_28 3 143 sp|Q636B6|MURG1_BACCZ 7.9e-40 0 1 139 Glyco_transf_28 3 143 sp|Q81JG5|MURG1_BACAN 7.9e-40 0 1 139 Glyco_transf_28 3 143 sp|Q732F8|MURG1_BACC1 3.2e-40 0 1 138 Glyco_transf_28 3 142 sp|B7GGI2|MURG_ANOFW 7.5e-40 0 1 139 Glyco_transf_28 3 143 sp|A7GRN6|MURG_BACCN 2.5e-40 0 2 138 Glyco_transf_28 6 142 sp|B0BRH7|MURG_ACTPJ 2.5e-40 0 2 138 Glyco_transf_28 6 142 sp|B3GZK8|MURG_ACTP7 2e-39 0 1 139 Glyco_transf_28 3 143 sp|Q6HEQ4|MURG1_BACHK 7.1e-40 0 1 138 Glyco_transf_28 3 142 sp|O07670|MURG_ENTHR 4e-39 0 2 138 Glyco_transf_28 9 145 sp|A7FM66|MURG_YERP3 6.1 0 38 108 Glyco_transf_28 266 342 sp|A7FM66|MURG_YERP3 4e-39 0 2 138 Glyco_transf_28 9 145 sp|B1JK81|MURG_YERPY 6.1 0 38 108 Glyco_transf_28 266 342 sp|B1JK81|MURG_YERPY 4e-39 0 2 138 Glyco_transf_28 9 145 sp|B2K4E6|MURG_YERPB 6.1 0 38 108 Glyco_transf_28 266 342 sp|B2K4E6|MURG_YERPB 4e-39 0 2 138 Glyco_transf_28 9 145 sp|Q66EK5|MURG_YERPS 6.1 0 38 108 Glyco_transf_28 266 342 sp|Q66EK5|MURG_YERPS 2.5e-39 0 2 138 Glyco_transf_28 9 145 sp|A1JJJ3|MURG_YERE8 4.8e-39 0 2 138 Glyco_transf_28 9 145 sp|A9MQC2|MURG_SALAR 5.2 0 38 108 Glyco_transf_28 266 342 sp|A9MQC2|MURG_SALAR 8.1e-40 0 1 138 Glyco_transf_28 3 144 sp|P64869|Y1526_MYCTU 8.1e-40 0 1 138 Glyco_transf_28 3 144 sp|P64870|Y1553_MYCBO 1e-39 0 2 138 Glyco_transf_28 8 144 sp|Q65RY6|MURG_MANSM 3.7e-39 0 2 138 Glyco_transf_28 7 143 sp|B2VD91|MURG_ERWT9 1.3e-39 0 2 138 Glyco_transf_28 7 143 sp|Q4QLF8|MURG_HAEI8 1.3e-39 0 2 138 Glyco_transf_28 7 143 sp|A5UIR2|MURG_HAEIG 1.3e-39 0 2 138 Glyco_transf_28 7 143 sp|P45065|MURG_HAEIN 9.8e-39 0 2 138 Glyco_transf_28 9 145 sp|A9R124|MURG_YERPG 5.3 0 38 116 Glyco_transf_28 266 350 sp|A9R124|MURG_YERPG 9.8e-39 0 2 138 Glyco_transf_28 9 145 sp|Q1C214|MURG_YERPA 5.3 0 38 116 Glyco_transf_28 266 350 sp|Q1C214|MURG_YERPA 9.8e-39 0 2 138 Glyco_transf_28 9 145 sp|Q1CMM7|MURG_YERPN 5.3 0 38 116 Glyco_transf_28 266 350 sp|Q1CMM7|MURG_YERPN 9.8e-39 0 2 138 Glyco_transf_28 9 145 sp|Q8ZIE9|MURG_YERPE 5.3 0 38 116 Glyco_transf_28 266 350 sp|Q8ZIE9|MURG_YERPE 6.2e-39 0 1 138 Glyco_transf_28 3 142 sp|O07109|MURG_ENTFA 4.3e-39 0 1 138 Glyco_transf_28 7 144 sp|A3QIM1|MURG_SHELP 6.2e-39 0 2 138 Glyco_transf_28 9 145 sp|A8G9S7|MURG_SERP5 6e-39 0 2 138 Glyco_transf_28 9 145 sp|B7LWF6|MURG_ESCF3 7.6e-39 0 2 138 Glyco_transf_28 9 145 sp|A7MIE5|MURG_ENTS8 7.1e-39 0 2 138 Glyco_transf_28 9 145 sp|C6DEU3|MURG_PECCP 2.4e-38 0 2 138 Glyco_transf_28 4 142 sp|Q88V81|MURG_LACPL 1.5e-38 0 2 138 Glyco_transf_28 9 145 sp|Q8Z9G9|MURG_SALTI 3.5e-38 0 2 138 Glyco_transf_28 9 145 sp|B4F111|MURG_PROMH 4 0 38 116 Glyco_transf_28 271 355 sp|B4F111|MURG_PROMH 2.5e-38 0 1 138 Glyco_transf_28 8 145 sp|A0L1P2|MURG_SHESA 2.9 0 54 117 Glyco_transf_28 285 357 sp|A0L1P2|MURG_SHESA 2.5e-38 0 1 138 Glyco_transf_28 8 145 sp|Q0HZR6|MURG_SHESR 2.9 0 54 117 Glyco_transf_28 285 357 sp|Q0HZR6|MURG_SHESR 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B5BLC2|MURG_SALPK 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|Q5PDC8|MURG_SALPA 4.1e-39 0 1 138 Glyco_transf_28 3 142 sp|Q9K9T0|MURG_BACHD 5.2e-39 0 1 138 Glyco_transf_28 3 142 sp|Q8Y5M2|MURG_LISMO 2.3e-38 0 2 138 Glyco_transf_28 9 145 sp|A9MZL9|MURG_SALPB 2.3e-38 0 2 138 Glyco_transf_28 9 145 sp|B4TJ87|MURG_SALHS 2.3e-38 0 2 138 Glyco_transf_28 9 145 sp|B4TXH8|MURG_SALSV 2.3e-38 0 2 138 Glyco_transf_28 9 145 sp|B5F7W4|MURG_SALA4 2.3e-38 0 2 138 Glyco_transf_28 9 145 sp|Q8ZRU3|MURG_SALTY 2.3e-38 0 2 138 Glyco_transf_28 9 145 sp|B4SU50|MURG_SALNS 2.6e-38 0 1 138 Glyco_transf_28 8 145 sp|A1REZ6|MURG_SHESW 2.6e-38 0 1 138 Glyco_transf_28 8 145 sp|A4Y2N6|MURG_SHEPC 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|A6T4N3|MURG_KLEP7 2.3e-38 0 2 138 Glyco_transf_28 9 145 sp|B5RH64|MURG_SALG2 1.1e-38 0 2 138 Glyco_transf_28 9 145 sp|A8ALK6|MURG_CITK8 2.3e-38 0 2 138 Glyco_transf_28 9 145 sp|Q57TD0|MURG_SALCH 3.9e-38 0 1 138 Glyco_transf_28 8 145 sp|A6WID1|MURG_SHEB8 8 0 54 116 Glyco_transf_28 287 356 sp|A6WID1|MURG_SHEB8 3.9e-38 0 1 138 Glyco_transf_28 8 145 sp|A9KY29|MURG_SHEB9 8 0 54 116 Glyco_transf_28 287 356 sp|A9KY29|MURG_SHEB9 3.9e-38 0 1 138 Glyco_transf_28 8 145 sp|B8E698|MURG_SHEB2 8 0 54 116 Glyco_transf_28 287 356 sp|B8E698|MURG_SHEB2 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B5Y1U7|MURG_KLEP3 3.9e-38 0 1 138 Glyco_transf_28 8 145 sp|A3CZM1|MURG_SHEB5 8.1 0 54 116 Glyco_transf_28 287 356 sp|A3CZM1|MURG_SHEB5 1.6e-38 0 2 138 Glyco_transf_28 6 142 sp|Q7U336|MURG_HAEDU 8.7e-39 0 2 138 Glyco_transf_28 8 144 sp|B7VJ03|MURG_VIBSL 1.1e-38 0 2 138 Glyco_transf_28 8 144 sp|Q0I1D3|MURG_HAES1 2.3e-38 0 2 138 Glyco_transf_28 9 145 sp|B5FI72|MURG_SALDC 2.4e-38 0 1 138 Glyco_transf_28 3 142 sp|A2RJQ4|MURG_LACLM 2.4e-38 0 1 138 Glyco_transf_28 3 142 sp|Q02XY0|MURG_LACLS 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B7MNU9|MURG_ECO81 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B7NHJ6|MURG_ECO7I 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B7UIE0|MURG_ECO27 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|Q0TLP9|MURG_ECOL5 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|Q8FL64|MURG_ECOL6 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|A1A7D5|MURG_ECOK1 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B7MAL3|MURG_ECO45 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|Q1RGA5|MURG_ECOUT 2.2e-38 0 2 138 Glyco_transf_28 9 145 sp|Q6D0I3|MURG_ERWCT 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B5YZC6|MURG_ECO5E 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|Q8X9Y8|MURG_ECO57 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|A7ZHI1|MURG_ECO24 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B1LG27|MURG_ECOSM 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B6HZ67|MURG_ECOSE 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B7M133|MURG_ECO8A 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B7N7W3|MURG_ECOLU 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|Q326E5|MURG_SHIBS 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|Q3Z5R9|MURG_SHISS 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|Q32K02|MURG_SHIDS 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B2U295|MURG_SHIB3 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B1IR88|MURG_ECOLC 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B1XC67|MURG_ECODH 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|C4ZRI5|MURG_ECOBW 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|P17443|MURG_ECOLI 1.7e-38 0 2 138 Glyco_transf_28 9 145 sp|A7ZW42|MURG_ECOHS 6e-38 0 2 138 Glyco_transf_28 9 145 sp|A4TQ83|MURG_YERPP 5.3 0 38 116 Glyco_transf_28 266 350 sp|A4TQ83|MURG_YERPP 4.7e-38 0 1 138 Glyco_transf_28 3 142 sp|Q9CF92|MURG_LACLA 5.8e-38 0 2 138 Glyco_transf_28 9 145 sp|B5R2M4|MURG_SALEP 2.3e-38 0 2 138 Glyco_transf_28 9 145 sp|Q0T8A7|MURG_SHIF8 2.3e-38 0 2 138 Glyco_transf_28 9 145 sp|Q83MN4|MURG_SHIFL 1.2e-37 0 1 138 Glyco_transf_28 8 145 sp|Q8CX35|MURG_SHEON 2.6 0 54 117 Glyco_transf_28 285 357 sp|Q8CX35|MURG_SHEON 1.7e-38 0 1 138 Glyco_transf_28 3 142 sp|B8DBP8|MURG_LISMH 1.9e-38 0 1 138 Glyco_transf_28 3 142 sp|A0AKD5|MURG_LISW6 2.3e-38 0 1 138 Glyco_transf_28 3 142 sp|Q9ZBA5|MURG_STRCO 2.1e-38 0 1 138 Glyco_transf_28 3 142 sp|Q929Y2|MURG_LISIN 2.1e-38 0 2 137 Glyco_transf_28 6 141 sp|B8F3B6|MURG_HAEPS 2.5e-38 0 1 138 Glyco_transf_28 8 145 sp|Q0HE83|MURG_SHESM 2.2e-38 0 1 138 Glyco_transf_28 3 142 sp|C1KWY8|MURG_LISMC 2.2e-38 0 1 138 Glyco_transf_28 3 142 sp|Q71XX8|MURG_LISMF 2.3e-38 0 2 138 Glyco_transf_28 10 146 sp|A1S2F9|MURG_SHEAM 3.5e-38 0 2 137 Glyco_transf_28 7 142 sp|A5UCW8|MURG_HAEIE 1.9e-36 0 2 138 Glyco_transf_28 4 142 sp|Q03QH5|MURG_LACBA 1.6 0 63 130 Glyco_transf_28 295 355 sp|Q03QH5|MURG_LACBA 3.9e-38 0 2 138 Glyco_transf_28 8 144 sp|Q8DEL0|MURG_VIBVU 3.9e-38 0 2 138 Glyco_transf_28 8 144 sp|Q7MNV1|MURG_VIBVY 4.4e-38 0 1 138 Glyco_transf_28 5 142 sp|Q3IFY0|MURG_PSEHT 6.7e-38 0 2 138 Glyco_transf_28 9 145 sp|B7LFW0|MURG_ECO55 4.2e-38 0 1 138 Glyco_transf_28 10 147 sp|B1KKX7|MURG_SHEWM 7.4e-38 0 1 138 Glyco_transf_28 3 141 sp|Q49929|Y2348_MYCLE 1.7e-37 0 2 138 Glyco_transf_28 9 145 sp|Q7N147|MURG_PHOLL 1.4e-37 0 1 138 Glyco_transf_28 10 147 sp|A8H984|MURG_SHEPA 1e-37 0 1 138 Glyco_transf_28 3 142 sp|Q820F6|MURG_STRAW 3.4e-37 0 2 138 Glyco_transf_28 4 142 sp|Q1WTA0|MURG_LACS1 1.4e-37 0 1 137 Glyco_transf_28 3 141 sp|Q9X4H4|MURG_STRCU 1.3e-37 0 1 138 Glyco_transf_28 10 147 sp|Q12SC6|MURG_SHEDO 1.1e-37 0 2 138 Glyco_transf_28 9 145 sp|P57817|MURG_PASMU 1.9e-37 0 2 138 Glyco_transf_28 8 144 sp|Q87SG4|MURG_VIBPA 2.5e-37 0 1 138 Glyco_transf_28 10 147 sp|B0TQN7|MURG_SHEHH 3e-37 0 1 138 Glyco_transf_28 3 142 sp|C4L5U5|MURG_EXISA 2.1e-37 0 1 138 Glyco_transf_28 6 143 sp|A9M2H3|MURG_NEIM0 2e-37 0 2 138 Glyco_transf_28 8 144 sp|Q6LMF6|MURG_PHOPR 3.1e-37 0 2 138 Glyco_transf_28 9 145 sp|Q5E2Q0|MURG_VIBF1 2.8e-37 0 1 138 Glyco_transf_28 3 143 sp|P64865|Y1524_MYCTU 2.8e-37 0 1 138 Glyco_transf_28 3 143 sp|P64866|Y1551_MYCBO 3.1e-37 0 2 138 Glyco_transf_28 9 145 sp|B5FB35|MURG_VIBFM 4.4e-36 0 2 138 Glyco_transf_28 4 142 sp|B2GB78|MURG_LACF3 9 0 72 114 Glyco_transf_28 201 243 sp|B2GB78|MURG_LACF3 3.6e-37 0 2 138 Glyco_transf_28 9 145 sp|B6ELH5|MURG_ALISL 4.3e-37 0 2 138 Glyco_transf_28 4 140 sp|B8CWJ6|MURG_HALOH 4e-37 0 2 138 Glyco_transf_28 8 144 sp|A7MXR6|MURG_VIBHB 5.8e-36 0 2 138 Glyco_transf_28 4 142 sp|A5VJ33|MURG_LACRD 5.7 0 64 129 Glyco_transf_28 299 357 sp|A5VJ33|MURG_LACRD 5.8e-36 0 2 138 Glyco_transf_28 4 142 sp|B2G6K5|MURG_LACRJ 5.7 0 64 129 Glyco_transf_28 299 357 sp|B2G6K5|MURG_LACRJ 5.6e-37 0 1 138 Glyco_transf_28 4 143 sp|Q182Y6|MURG_CLOD6 6.3e-37 0 2 135 Glyco_transf_28 9 142 sp|Q2NVV1|MURG_SODGM 6.4e-37 0 1 138 Glyco_transf_28 11 148 sp|Q07WI5|MURG_SHEFN 5.3e-37 0 1 138 Glyco_transf_28 6 143 sp|A1KVL3|MURG_NEIMF 5.3e-37 0 1 138 Glyco_transf_28 6 143 sp|Q9K0Y2|MURG_NEIMB 9.9e-37 0 1 138 Glyco_transf_28 10 147 sp|B8CNL1|MURG_SHEPW 2.5e-36 0 2 138 Glyco_transf_28 6 142 sp|C4LA25|MURG_TOLAT 1.1e-36 0 1 138 Glyco_transf_28 10 147 sp|Q9F1N0|MURG_SHEVI 1.2e-36 0 2 138 Glyco_transf_28 9 145 sp|A5F5M9|MURG_VIBC3 1.7e-36 0 1 137 Glyco_transf_28 3 141 sp|Q03W35|MURG_LEUMM 7.9e-37 0 1 138 Glyco_transf_28 7 146 sp|A3Q1L8|MURG_MYCSJ 7.9e-37 0 1 138 Glyco_transf_28 7 146 sp|A1UI54|MURG_MYCSK 7.9e-37 0 1 138 Glyco_transf_28 7 146 sp|Q1B6X1|MURG_MYCSS 6.9e-37 0 2 138 Glyco_transf_28 9 145 sp|C3LQU6|MURG_VIBCM 6.9e-37 0 2 138 Glyco_transf_28 9 145 sp|Q9KPG7|MURG_VIBCH 1.4e-36 0 1 138 Glyco_transf_28 10 147 sp|A8FQA0|MURG_SHESH 2.9e-36 0 1 138 Glyco_transf_28 6 143 sp|B4RQC5|MURG_NEIG2 2.9e-36 0 1 138 Glyco_transf_28 6 143 sp|Q5F6L8|MURG_NEIG1 2.8e-36 0 1 138 Glyco_transf_28 3 142 sp|B1I4C4|MURG_DESAP 1.4e-36 0 1 134 Glyco_transf_28 4 137 sp|Q6A9Q2|MURG_PROAC 1.2e-35 0 2 138 Glyco_transf_28 4 142 sp|B3WDY2|MURG_LACCB 1.2e-35 0 2 138 Glyco_transf_28 4 142 sp|Q039R7|MURG_LACC3 1e-35 0 2 138 Glyco_transf_28 4 142 sp|A4J2B1|MURG_DESRM 4.1e-36 0 2 137 Glyco_transf_28 17 152 sp|Q47VQ9|MURG_COLP3 3.6e-36 0 1 135 Glyco_transf_28 3 139 sp|B2A2H2|MURG_NATTJ 4.2e-36 0 1 130 Glyco_transf_28 6 135 sp|Q6NGC8|MURG_CORDI 5.1e-36 0 1 138 Glyco_transf_28 5 142 sp|B4RWX9|MURG_ALTMD 6.5e-36 0 1 138 Glyco_transf_28 6 143 sp|Q9JSZ7|MURG_NEIMA 9.2e-35 0 1 130 Glyco_transf_28 8 137 sp|B0KFS6|MURG_PSEPG 7.8 0 34 55 Glyco_transf_28 209 258 sp|B0KFS6|MURG_PSEPG 8.9e-36 0 1 137 Glyco_transf_28 5 141 sp|A4XQS4|MURG_PSEMY 9e-36 0 1 137 Glyco_transf_28 5 141 sp|Q48EF8|MURG_PSE14 4.6e-36 0 2 138 Glyco_transf_28 4 142 sp|Q8R9G6|MURG_THETN 8.3e-35 0 1 130 Glyco_transf_28 8 137 sp|A5W8Q0|MURG_PSEP1 5.5e-35 0 1 134 Glyco_transf_28 8 141 sp|Q1I5B8|MURG_PSEE4 1.2e-35 0 1 137 Glyco_transf_28 5 141 sp|Q87WY5|MURG_PSESM 1e-35 0 1 138 Glyco_transf_28 4 141 sp|C3L230|MURG_CLOB6 1.2e-35 0 2 138 Glyco_transf_28 52 188 sp|A1WC06|MURG_ACISJ 1.2e-35 0 2 138 Glyco_transf_28 52 188 sp|B9MFR2|MURG_DIAST 6.3e-36 0 1 138 Glyco_transf_28 31 175 sp|B8ZQQ0|MURG_MYCLB 6.3e-36 0 1 138 Glyco_transf_28 31 175 sp|O69552|MURG_MYCLE 3.6e-35 0 1 138 Glyco_transf_28 5 142 sp|Q893R7|MURG_CLOTE 1.2e-35 0 1 138 Glyco_transf_28 4 141 sp|A7GGX9|MURG_CLOBL 1.2e-35 0 1 138 Glyco_transf_28 4 141 sp|B1IKH3|MURG_CLOBK 1.2e-35 0 1 138 Glyco_transf_28 4 141 sp|C1FUF9|MURG_CLOBJ 1.2e-35 0 1 138 Glyco_transf_28 4 141 sp|A5I5J5|MURG_CLOBH 1.2e-35 0 1 138 Glyco_transf_28 4 141 sp|A7FX11|MURG_CLOB1 1.3e-35 0 1 137 Glyco_transf_28 5 141 sp|Q4ZNZ0|MURG_PSEU2 7.7e-35 0 1 138 Glyco_transf_28 8 147 sp|A4XI04|MURG_CALS8 2e-35 0 1 138 Glyco_transf_28 17 161 sp|A0R016|MURG_MYCS2 3.5e-35 0 1 137 Glyco_transf_28 3 143 sp|A8YUN9|MURG_LACH4 9.9e-36 0 1 139 Glyco_transf_28 3 143 sp|A1SL80|MURG_NOCSJ 1.3e-34 0 1 130 Glyco_transf_28 8 137 sp|Q88N76|MURG_PSEPK 2.4e-35 0 1 138 Glyco_transf_28 4 141 sp|B1KYH7|MURG_CLOBM 2.7e-35 0 1 138 Glyco_transf_28 3 142 sp|Q24TE6|MURG_DESHY 3.1e-35 0 1 137 Glyco_transf_28 5 141 sp|Q3K744|MURG_PSEPF 3e-34 0 1 130 Glyco_transf_28 8 137 sp|B1J3L2|MURG_PSEPW 2e-34 0 2 138 Glyco_transf_28 4 142 sp|B0K3H0|MURG_THEPX 2e-34 0 2 138 Glyco_transf_28 4 142 sp|B0K8K7|MURG_THEP3 2.7e-34 0 1 138 Glyco_transf_28 3 142 sp|A3DE27|MURG_CLOTH 4.1e-35 0 1 138 Glyco_transf_28 32 175 sp|A1TAW8|MURG_MYCVP 1.3e-34 0 1 138 Glyco_transf_28 3 142 sp|B8FT56|MURG_DESHD 4.1e-35 0 1 137 Glyco_transf_28 4 141 sp|Q9RWP0|MURG_DEIRA 3.1e-34 0 1 135 Glyco_transf_28 12 146 sp|B2I1J5|MURG_ACIBC 3.1e-34 0 1 135 Glyco_transf_28 12 146 sp|B0V9F5|MURG_ACIBY 3.1e-34 0 1 135 Glyco_transf_28 12 146 sp|B7GV73|MURG_ACIB3 3.1e-34 0 1 135 Glyco_transf_28 12 146 sp|B7ICE5|MURG_ACIB5 4.4e-35 0 1 138 Glyco_transf_28 3 142 sp|A5D145|MURG_PELTS 3.1e-34 0 1 135 Glyco_transf_28 12 146 sp|A3M9Y1|MURG_ACIBT 1.1e-34 0 1 134 Glyco_transf_28 4 137 sp|A9KK83|MURG_CLOPH 1.3e-34 0 1 134 Glyco_transf_28 5 138 sp|C3KCT0|MURG_PSEFS 1.7e-34 0 2 138 Glyco_transf_28 4 142 sp|Q03EY2|MURG_PEDPA 2.2e-34 0 1 138 Glyco_transf_28 34 178 sp|A0QF52|MURG_MYCA1 3.7e-33 0 1 137 Glyco_transf_28 3 143 sp|Q04B72|MURG_LACDB 7.8 0 71 102 Glyco_transf_28 204 235 sp|Q04B72|MURG_LACDB 3.7e-33 0 1 137 Glyco_transf_28 3 143 sp|Q1GAT5|MURG_LACDA 7.8 0 71 102 Glyco_transf_28 204 235 sp|Q1GAT5|MURG_LACDA 1.6e-34 0 1 134 Glyco_transf_28 5 138 sp|Q4K6J3|MURG_PSEF5 1e-33 0 1 135 Glyco_transf_28 12 146 sp|B0VNZ9|MURG_ACIBS 8.8e-34 0 1 137 Glyco_transf_28 3 143 sp|Q5FKV2|MURG_LACAC 1.3e-33 0 2 138 Glyco_transf_28 6 142 sp|A0KPX2|MURG_AERHH 2.4e-34 0 1 132 Glyco_transf_28 6 137 sp|A1WYU3|MURG_HALHL 5.5e-34 0 1 138 Glyco_transf_28 34 178 sp|Q73YQ8|MURG_MYCPA 3.9e-34 0 1 137 Glyco_transf_28 3 141 sp|B1MXW0|MURG_LEUCK 6.1e-34 0 1 138 Glyco_transf_28 5 142 sp|Q604V7|MURG_METCA 4.2e-34 0 1 134 Glyco_transf_28 6 139 sp|B2V1X5|MURG_CLOBA 6e-34 0 1 137 Glyco_transf_28 9 145 sp|A1U3F8|MURG_MARAV 4.4e-33 0 1 138 Glyco_transf_28 3 142 sp|A8MH36|MURG_ALKOO 9.3e-34 0 1 136 Glyco_transf_28 6 141 sp|B2TLE0|MURG_CLOBB 2.7e-33 0 2 138 Glyco_transf_28 6 142 sp|A4SI56|MURG_AERS4 2.2e-33 0 1 137 Glyco_transf_28 4 140 sp|C4Z1B5|MURG_EUBE2 1.2e-33 0 1 136 Glyco_transf_28 5 140 sp|C1DQ99|MURG_AZOVD 3.2e-33 0 1 137 Glyco_transf_28 12 148 sp|Q6F703|MURG_ACIAD 9.4e-34 0 1 138 Glyco_transf_28 3 141 sp|B1YIT7|MURG_EXIS2 2.1e-33 0 1 137 Glyco_transf_28 4 141 sp|C1CW40|MURG_DEIDV 3.3e-33 0 1 132 Glyco_transf_28 3 136 sp|Q47QW9|MURG_THEFY 1.6e-33 0 1 138 Glyco_transf_28 6 143 sp|A0Q182|MURG_CLONN 9.4e-34 0 1 138 Glyco_transf_28 38 185 sp|A1KKJ6|MURG_MYCBP 9.4e-34 0 1 138 Glyco_transf_28 38 185 sp|C1AQ69|MURG_MYCBT 9.4e-34 0 1 138 Glyco_transf_28 38 185 sp|Q7VEP8|MURG_MYCBO 1.8e-33 0 1 138 Glyco_transf_28 3 142 sp|B0S0Z5|MURG_FINM2 8.7e-33 0 1 137 Glyco_transf_28 5 141 sp|B7UZJ0|MURG_PSEA8 8.7e-33 0 1 137 Glyco_transf_28 5 141 sp|Q02H28|MURG_PSEAB 8.7e-33 0 1 137 Glyco_transf_28 5 141 sp|Q9HW01|MURG_PSEAE 1.4e-33 0 1 138 Glyco_transf_28 22 166 sp|A0PTI7|MURG_MYCUA 8.7e-33 0 1 137 Glyco_transf_28 5 141 sp|A6VB85|MURG_PSEA7 2.6e-33 0 1 135 Glyco_transf_28 4 137 sp|A9KER3|MURG_COXBN 2.6e-33 0 1 135 Glyco_transf_28 4 137 sp|A9NA44|MURG_COXBR 2.6e-33 0 1 135 Glyco_transf_28 4 137 sp|B6J2Q3|MURG_COXB2 2.6e-33 0 1 135 Glyco_transf_28 4 137 sp|B6J5K3|MURG_COXB1 2.6e-33 0 1 135 Glyco_transf_28 4 137 sp|Q820X3|MURG_COXBU 5.2e-33 0 1 137 Glyco_transf_28 3 143 sp|Q042P9|MURG_LACGA 1.7e-33 0 1 138 Glyco_transf_28 22 166 sp|B2HGR6|MURG_MYCMM 4.8e-33 0 1 132 Glyco_transf_28 5 136 sp|Q0VS02|MURG_ALCBS 1.9e-33 0 1 133 Glyco_transf_28 5 139 sp|Q0RNP1|MURG_FRAAA 3.7e-33 0 1 131 Glyco_transf_28 3 135 sp|Q2RK79|MURG_MOOTA 2.2e-33 0 1 137 Glyco_transf_28 4 141 sp|Q1IXV9|MURG_DEIGD 9.8e-33 0 1 137 Glyco_transf_28 3 143 sp|Q74JY4|MURG_LACJO 6.9e-33 0 1 138 Glyco_transf_28 4 141 sp|A5MZ55|MURG_CLOK5 6.5e-33 0 2 138 Glyco_transf_28 8 144 sp|A1TKD1|MURG_ACIAC 7.6e-33 0 1 139 Glyco_transf_28 7 148 sp|B7J0L2|MURG_BORBZ 7.6e-33 0 1 139 Glyco_transf_28 7 148 sp|O51708|MURG_BORBU 7.4e-33 0 2 138 Glyco_transf_28 16 152 sp|Q15Q17|MURG_PSEA6 1e-32 0 2 138 Glyco_transf_28 743 878 sp|A7A179|ATG26_YEAS7 8.5e-33 0 1 137 Glyco_transf_28 4 142 sp|Q1D0T0|MURG_MYXXD 4.5e-33 0 1 138 Glyco_transf_28 9 146 sp|Q1QVG7|MURG_CHRSD 4.6e-33 0 1 132 Glyco_transf_28 5 136 sp|A4VIH8|MURG_PSEU5 1.5e-32 0 3 138 Glyco_transf_28 2 143 sp|Q38XM8|MURG_LACSS 1.5e-32 0 2 138 Glyco_transf_28 8 144 sp|A1SU19|MURG_PSYIN 1.3e-32 0 1 138 Glyco_transf_28 4 141 sp|Q31I59|MURG_THICR 1.5e-32 0 1 138 Glyco_transf_28 3 142 sp|Q04ET0|MURG_OENOB 6.1e-33 0 1 138 Glyco_transf_28 6 143 sp|Q2KVG0|MURG_BORA1 1.3e-32 0 1 138 Glyco_transf_28 4 142 sp|Q5R0M1|MURG_IDILO 1.8e-32 0 1 136 Glyco_transf_28 4 139 sp|Q5WAE4|MURG_BACSK 2.4e-32 0 1 131 Glyco_transf_28 5 137 sp|Q2JD50|MURG_FRASC 1.6e-32 0 1 138 Glyco_transf_28 5 142 sp|B5ELC3|MURG_ACIF5 1.6e-32 0 1 138 Glyco_transf_28 5 142 sp|B7J3V2|MURG_ACIF2 1.4e-32 0 1 139 Glyco_transf_28 7 148 sp|Q0SM88|MURG_BORAP 1.9e-32 0 1 138 Glyco_transf_28 6 143 sp|Q4FQV9|MURG_PSYA2 5.1e-32 0 1 138 Glyco_transf_28 4 141 sp|Q730T5|MURG2_BACC1 4.6e-32 0 2 138 Glyco_transf_28 7 143 sp|Q1LSW5|MURG_BAUCH 1.7e-32 0 1 139 Glyco_transf_28 4 146 sp|Q9WY74|MURG_THEMA 1.7e-32 0 1 139 Glyco_transf_28 4 146 sp|B1L9S1|MURG_THESQ 1.7e-32 0 1 139 Glyco_transf_28 4 146 sp|A5IKI9|MURG_THEP1 2.6e-32 0 1 138 Glyco_transf_28 22 160 sp|A4FLW0|MURG_SACEN 2.3e-32 0 2 138 Glyco_transf_28 8 142 sp|Q9RNM6|MURG_ZYMMO 3.5e-32 0 2 138 Glyco_transf_28 743 878 sp|Q06321|ATG26_YEAST 2.2e-32 0 1 138 Glyco_transf_28 15 152 sp|Q9PF81|MURG_XYLFA 1.4e-32 0 1 138 Glyco_transf_28 21 158 sp|Q5GW41|MURG_XANOR 2.5e-32 0 1 139 Glyco_transf_28 15 154 sp|B2S3B6|MURG_TREPS 2.5e-32 0 1 139 Glyco_transf_28 15 154 sp|O83535|MURG_TREPA 3e-32 0 3 138 Glyco_transf_28 2 137 sp|Q0AJE1|MURG_NITEC 1.8e-32 0 1 138 Glyco_transf_28 6 143 sp|B3PCM0|MURG_CELJU 3.6e-32 0 2 139 Glyco_transf_28 4 143 sp|A5G8K0|MURG_GEOUR 2.2e-32 0 1 138 Glyco_transf_28 38 185 sp|A5U4I0|MURG_MYCTA 2.2e-32 0 1 138 Glyco_transf_28 38 185 sp|O06224|MURG_MYCTU 2.3e-32 0 1 130 Glyco_transf_28 13 144 sp|Q4JW95|MURG_CORJK 5.8e-32 0 1 137 Glyco_transf_28 6 142 sp|Q97GY4|MURG_CLOAB 4.5e-32 0 1 137 Glyco_transf_28 8 142 sp|Q9Z702|MURG_CHLPN 5e-32 0 1 138 Glyco_transf_28 6 143 sp|Q1Q944|MURG_PSYCK 9.8e-32 0 1 137 Glyco_transf_28 10 145 sp|C0RE70|MURG_BRUMB 9.8e-32 0 1 137 Glyco_transf_28 10 145 sp|Q8YI66|MURG_BRUME 6.7e-32 0 1 138 Glyco_transf_28 22 159 sp|Q3BXF2|MURG_XANC5 9.8e-32 0 1 137 Glyco_transf_28 10 145 sp|B2S6Q4|MURG_BRUA1 9.8e-32 0 1 137 Glyco_transf_28 10 145 sp|Q2YLY5|MURG_BRUA2 9.8e-32 0 1 137 Glyco_transf_28 10 145 sp|Q57C78|MURG_BRUAB 7.2e-32 0 1 138 Glyco_transf_28 7 147 sp|Q660A8|MURG_BORGA 6.7e-32 0 1 137 Glyco_transf_28 3 141 sp|B8I6H3|MURG_CLOCE 9.8e-32 0 1 137 Glyco_transf_28 10 145 sp|A5VRH7|MURG_BRUO2 9.8e-32 0 1 137 Glyco_transf_28 10 145 sp|B0CHM0|MURG_BRUSI 7.1e-32 0 1 133 Glyco_transf_28 8 142 sp|A0JV94|MURG_ARTS2 7.2e-32 0 1 138 Glyco_transf_28 3 142 sp|A6TS61|MURG_ALKMQ 7.1e-32 0 1 137 Glyco_transf_28 5 142 sp|C5D4C2|MURG_GEOSW 9.8e-32 0 1 137 Glyco_transf_28 10 145 sp|A9M690|MURG_BRUC2 1.1e-31 0 1 138 Glyco_transf_28 21 158 sp|Q8PPA8|MURG_XANAC 9.8e-32 0 1 137 Glyco_transf_28 10 145 sp|Q8CY39|MURG_BRUSU 8.9e-32 0 2 138 Glyco_transf_28 8 144 sp|A1WRL1|MURG_VEREI 2.4e-31 0 1 138 Glyco_transf_28 4 141 sp|Q812T8|MURG2_BACCR 8.4e-32 0 1 138 Glyco_transf_28 15 152 sp|B0U4Z7|MURG_XYLFM 9.4e-32 0 1 137 Glyco_transf_28 5 142 sp|A4IJS4|MURG_GEOTN 5.8e-32 0 1 138 Glyco_transf_28 21 158 sp|Q2NZB8|MURG_XANOM 1.3e-31 0 1 137 Glyco_transf_28 6 144 sp|A5FIY3|MURG_FLAJ1 2.8e-31 0 2 139 Glyco_transf_28 9 146 sp|Q39JX0|MURG_BURS3 1.7e-31 0 1 138 Glyco_transf_28 10 155 sp|C1A0X5|MURG_RHOE4 3.3e-31 0 2 138 Glyco_transf_28 4 142 sp|Q748D6|MURG_GEOSL 2.4e-31 0 1 137 Glyco_transf_28 4 140 sp|Q820Y4|MURG_TROWT 2.4e-31 0 1 137 Glyco_transf_28 4 140 sp|Q83HK1|MURG_TROW8 2.3e-31 0 1 129 Glyco_transf_28 3 132 sp|A4QFM3|MURG_CORGB 3.1e-31 0 2 138 Glyco_transf_28 4 142 sp|Q39YL9|MURG_GEOMG 2.2e-31 0 1 139 Glyco_transf_28 7 148 sp|A1R0I9|MURG_BORT9 3.5e-31 0 2 137 Glyco_transf_28 4 141 sp|Q3AAE6|MURG_CARHZ 2.3e-31 0 1 129 Glyco_transf_28 3 132 sp|Q8NNN5|MURG_CORGL 3.5e-31 0 1 135 Glyco_transf_28 6 140 sp|Q0TNP7|MURG_CLOP1 3.5e-31 0 1 135 Glyco_transf_28 6 140 sp|Q8XIQ1|MURG_CLOPE 3.5e-31 0 1 135 Glyco_transf_28 6 140 sp|Q0SRB4|MURG_CLOPS 3.4e-31 0 1 138 Glyco_transf_28 17 162 sp|Q5YYX9|MURG_NOCFA 2.6e-31 0 2 138 Glyco_transf_28 4 142 sp|A7HH67|MURG_ANADF 4.7e-31 0 3 138 Glyco_transf_28 2 137 sp|Q82VS3|MURG_NITEU 2.4e-31 0 1 138 Glyco_transf_28 22 159 sp|B0RVA5|MURG_XANCB 5.2e-31 0 2 139 Glyco_transf_28 9 146 sp|Q2SZI3|MURG_BURTA 3.2e-31 0 1 137 Glyco_transf_28 6 141 sp|Q11GS5|MURG_MESSB 2.4e-31 0 1 138 Glyco_transf_28 22 159 sp|Q4UQX0|MURG_XANC8 2.4e-31 0 1 138 Glyco_transf_28 22 159 sp|Q8PCK0|MURG_XANCP 6e-31 0 2 139 Glyco_transf_28 9 146 sp|A3NZL5|MURG_BURP0 2.9e-31 0 1 137 Glyco_transf_28 6 141 sp|Q98KB3|MURG_RHILO 6.2e-31 0 1 138 Glyco_transf_28 5 142 sp|Q0A6K2|MURG_ALHEH 6.1e-31 0 1 137 Glyco_transf_28 5 141 sp|A5IGA6|MURG_LEGPC 4.7e-31 0 1 137 Glyco_transf_28 5 142 sp|Q5L3H6|MURG_GEOKA 5.2e-31 0 1 135 Glyco_transf_28 3 139 sp|A0LTM3|MURG_ACIC1 7.6e-31 0 2 137 Glyco_transf_28 4 141 sp|Q3A2G6|MURG_PELCD 9.8e-30 0 1 136 Glyco_transf_28 3 140 sp|Q0AYQ8|MURG_SYNWW 1.3e-30 0 2 138 Glyco_transf_28 7 143 sp|Q1LIM6|MURG_RALME 3.7e-30 0 1 137 Glyco_transf_28 6 141 sp|Q92NL9|MURG_RHIME 3.9e-30 0 1 135 Glyco_transf_28 2 134 sp|Q72JP9|MURG_THET2 5e-31 0 1 138 Glyco_transf_28 14 153 sp|A1R5F8|MURG_ARTAT 8.6e-31 0 1 138 Glyco_transf_28 12 149 sp|Q87AF9|MURG_XYLFT 8.8e-31 0 1 138 Glyco_transf_28 15 152 sp|B2I9B3|MURG_XYLF2 9.9e-31 0 1 137 Glyco_transf_28 6 141 sp|A6WZQ6|MURG_OCHA4 1.5e-30 0 2 139 Glyco_transf_28 9 146 sp|A1V0R8|MURG_BURMS 1.5e-30 0 2 139 Glyco_transf_28 9 146 sp|A2S5U5|MURG_BURM9 1.5e-30 0 2 139 Glyco_transf_28 9 146 sp|A3MR63|MURG_BURM7 1.5e-30 0 2 139 Glyco_transf_28 9 146 sp|Q62GS7|MURG_BURMA 1.5e-30 0 2 139 Glyco_transf_28 9 146 sp|Q63QJ7|MURG_BURPS 1.5e-30 0 2 139 Glyco_transf_28 9 146 sp|A3NDW4|MURG_BURP6 1.6e-30 0 1 132 Glyco_transf_28 5 136 sp|Q3J789|MURG_NITOC 1.1e-30 0 1 135 Glyco_transf_28 6 140 sp|Q8K9T4|MURG_BUCAP 1.4e-30 0 2 139 Glyco_transf_28 4 143 sp|B9M172|MURG_GEOSF 1.9e-30 0 2 139 Glyco_transf_28 4 143 sp|B5EBQ1|MURG_GEOBB 1.9e-30 0 2 139 Glyco_transf_28 9 146 sp|Q3JND8|MURG_BURP1 1.5e-30 0 2 137 Glyco_transf_28 4 140 sp|Q1IKH0|MURG_ACIBL 2.6e-30 0 2 138 Glyco_transf_28 8 141 sp|P74657|MURG_SYNY3 1.7e-30 0 2 139 Glyco_transf_28 9 146 sp|B1YSS4|MURG_BURA4 1.7e-30 0 2 139 Glyco_transf_28 9 146 sp|Q0BIK1|MURG_BURCM 3.9e-30 0 1 138 Glyco_transf_28 4 141 sp|Q6HDR3|MURG2_BACHK 3.9e-30 0 1 138 Glyco_transf_28 4 141 sp|Q81JE6|MURG2_BACAN 2.3e-30 0 2 138 Glyco_transf_28 8 144 sp|Q0K6M4|MURG_RALEH 2.6e-30 0 1 137 Glyco_transf_28 5 141 sp|Q5WY98|MURG_LEGPL 3.9e-30 0 1 138 Glyco_transf_28 4 141 sp|A0RIN0|MURG3_BACAH 2.9e-30 0 1 138 Glyco_transf_28 6 143 sp|Q7W4B4|MURG_BORPA 2.6e-30 0 1 137 Glyco_transf_28 5 141 sp|Q5X6U5|MURG_LEGPA 2.6e-30 0 1 137 Glyco_transf_28 5 141 sp|Q5ZXC4|MURG_LEGPH 2e-30 0 1 136 Glyco_transf_28 6 141 sp|A6M1F0|MURG_CLOB8 2e-30 0 1 135 Glyco_transf_28 6 140 sp|B8D7B9|MURG_BUCAT 2e-30 0 1 135 Glyco_transf_28 6 140 sp|P57311|MURG_BUCAI 3.6e-30 0 1 138 Glyco_transf_28 6 143 sp|Q7VUQ3|MURG_BORPE 3.6e-30 0 1 138 Glyco_transf_28 6 143 sp|Q7WFS2|MURG_BORBR 6.3e-30 0 2 139 Glyco_transf_28 10 147 sp|B2SYX6|MURG_BURPP 2.9e-30 0 1 137 Glyco_transf_28 7 141 sp|B0B8Y7|MURG_CHLT2 2.9e-30 0 1 137 Glyco_transf_28 7 141 sp|B0BAL6|MURG_CHLTB 2.6e-30 0 1 135 Glyco_transf_28 6 140 sp|B8D914|MURG_BUCA5 4.2e-30 0 1 138 Glyco_transf_28 5 142 sp|Q47AA4|MURG_DECAR 4.1e-30 0 2 139 Glyco_transf_28 9 146 sp|A4JB94|MURG_BURVG 4e-30 0 1 138 Glyco_transf_28 5 142 sp|Q2Y638|MURG_NITMU 4.6e-30 0 2 139 Glyco_transf_28 10 147 sp|B2JHG0|MURG_BURP8 4.6e-30 0 1 137 Glyco_transf_28 7 141 sp|O84766|MURG_CHLTR 4.6e-30 0 1 137 Glyco_transf_28 7 141 sp|Q3KKT1|MURG_CHLTA 6.2e-30 0 2 138 Glyco_transf_28 4 142 sp|A1AU61|MURG_PELPD 6.3e-30 0 1 138 Glyco_transf_28 5 144 sp|Q2LR48|MURG_SYNAS 5.6e-30 0 2 138 Glyco_transf_28 9 143 sp|Q2G995|MURG_NOVAD 7.5e-30 0 2 138 Glyco_transf_28 9 145 sp|A5EY03|MURG_DICNV 3.6e-30 0 1 130 Glyco_transf_28 10 140 sp|Q8FNU0|MURG_COREF 8.1e-30 0 2 139 Glyco_transf_28 9 146 sp|A9AI96|MURG_BURM1 6.9e-30 0 2 138 Glyco_transf_28 36 177 sp|Q21SW9|MURG_RHOFD 8.8e-30 0 1 138 Glyco_transf_28 3 142 sp|B5YFT4|MURG_THEYD 1.2e-29 0 1 138 Glyco_transf_28 790 924 sp|A7KAK6|ATG26_PICAN 1.2e-29 0 2 138 Glyco_transf_28 8 144 sp|Q46WZ4|MURG_RALEJ 2e-29 0 2 139 Glyco_transf_28 10 147 sp|Q13TZ2|MURG_BURXL 1.9e-29 0 2 139 Glyco_transf_28 4 143 sp|C6DZK6|MURG_GEOSM 1.4e-29 0 1 138 Glyco_transf_28 4 135 sp|A8GVJ7|MURG_RICB8 1.4e-29 0 1 138 Glyco_transf_28 4 135 sp|Q1RI55|MURG_RICBR 9.1e-29 0 1 137 Glyco_transf_28 6 141 sp|B5ZWJ4|MURG_RHILW 1.8e-29 0 2 138 Glyco_transf_28 9 142 sp|B0JFZ1|MURG_MICAN 2.3e-29 0 2 138 Glyco_transf_28 9 141 sp|Q31KS7|MURG_SYNE7 2.4e-29 0 2 138 Glyco_transf_28 15 147 sp|Q5N140|MURG_SYNP6 2.9e-29 0 1 137 Glyco_transf_28 8 143 sp|Q14I26|MURG_FRAT1 2.9e-29 0 1 137 Glyco_transf_28 8 143 sp|Q5NGM4|MURG_FRATT 2.6e-29 0 1 138 Glyco_transf_28 7 144 sp|Q493Q1|MURG_BLOPB 1.9e-29 0 1 138 Glyco_transf_28 4 135 sp|Q92I58|MURG_RICCN 1.9e-29 0 1 138 Glyco_transf_28 4 135 sp|C3PND5|MURG_RICAE 1.9e-29 0 1 138 Glyco_transf_28 4 135 sp|C4K2A6|MURG_RICPU 1.8e-29 0 1 139 Glyco_transf_28 7 148 sp|B2S1A8|MURG_BORHD 1.9e-29 0 1 138 Glyco_transf_28 4 135 sp|A8GRZ6|MURG_RICRS 1.9e-29 0 1 138 Glyco_transf_28 4 135 sp|B0BXF6|MURG_RICRO 2.7e-29 0 2 138 Glyco_transf_28 9 145 sp|Q3SMH3|MURG_THIDA 3.1e-29 0 1 138 Glyco_transf_28 32 175 sp|Q21MG9|MURG_SACD2 1.2e-28 0 1 138 Glyco_transf_28 4 143 sp|B1IAM4|MURG_STRPI 1.2e-28 0 1 138 Glyco_transf_28 4 143 sp|Q04LK0|MURG_STRP2 1.2e-28 0 1 138 Glyco_transf_28 4 143 sp|Q8DQM1|MURG_STRR6 1.2e-28 0 1 138 Glyco_transf_28 4 143 sp|B2IN77|MURG_STRPS 1.2e-28 0 1 138 Glyco_transf_28 4 143 sp|C1CQG5|MURG_STRZT 1.2e-28 0 1 138 Glyco_transf_28 4 143 sp|C1CD52|MURG_STRZJ 4.3e-29 0 1 138 Glyco_transf_28 4 141 sp|Q634T3|MURG2_BACCZ 3.1e-29 0 2 138 Glyco_transf_28 8 149 sp|A1VST6|MURG_POLNA 6.1e-29 0 1 136 Glyco_transf_28 6 140 sp|A6UB85|MURG_SINMW 9.8e-29 0 1 138 Glyco_transf_28 4 143 sp|B9DNZ7|MURG_STACT 4.6e-29 0 2 139 Glyco_transf_28 9 146 sp|B4E6J2|MURG_BURCJ 4.6e-29 0 2 139 Glyco_transf_28 9 146 sp|B1JV78|MURG_BURCC 1.2e-28 0 1 138 Glyco_transf_28 4 143 sp|C1C649|MURG_STRP7 5.3e-29 0 1 135 Glyco_transf_28 6 140 sp|Q2S9Z2|MURG_HAHCH 1.3e-28 0 1 138 Glyco_transf_28 4 143 sp|B5E2Z9|MURG_STRP4 1.3e-28 0 1 138 Glyco_transf_28 4 143 sp|C1CJF3|MURG_STRZP 4.4e-29 0 1 138 Glyco_transf_28 6 143 sp|A9I4V2|MURG_BORPD 2.3e-29 0 2 137 Glyco_transf_28 5 142 sp|B0RIJ3|MURG_CLAMS 1.9e-28 0 1 138 Glyco_transf_28 4 143 sp|P0CB60|MURG_STRPN 1.9e-28 0 1 138 Glyco_transf_28 4 143 sp|B8ZMZ7|MURG_STRPJ 2e-28 0 1 137 Glyco_transf_28 6 141 sp|B3PTW0|MURG_RHIE6 5.8e-29 0 1 138 Glyco_transf_28 10 155 sp|Q0SHS1|MURG_RHOSR 5.4e-29 0 1 139 Glyco_transf_28 4 143 sp|Q313Q3|MURG_DESDG 5.4e-29 0 1 138 Glyco_transf_28 4 135 sp|A8F1I4|MURG_RICM5 4.5e-29 0 1 138 Glyco_transf_28 6 145 sp|A6H195|MURG_FLAPJ 4.6e-29 0 2 139 Glyco_transf_28 9 146 sp|A0K486|MURG_BURCH 4.6e-29 0 2 139 Glyco_transf_28 9 146 sp|Q1BZG3|MURG_BURCA 6e-29 0 2 138 Glyco_transf_28 35 176 sp|Q12EL5|MURG_POLSJ 7.9e-29 0 1 137 Glyco_transf_28 6 141 sp|Q8UDM8|MURG_AGRT5 6.1e-29 0 2 138 Glyco_transf_28 5 138 sp|B7K5Z6|MURG_CYAP8 1.4e-28 0 2 137 Glyco_transf_28 9 142 sp|Q2NCZ0|MURG_ERYLH 1.3e-28 0 1 138 Glyco_transf_28 763 897 sp|Q9Y751|ATG26_PICPG 7.5e-29 0 2 138 Glyco_transf_28 5 141 sp|Q5P6Z6|MURG_AZOSE 7.6e-29 0 1 137 Glyco_transf_28 6 140 sp|B6IRG2|MURG_RHOCS 7e-29 0 2 138 Glyco_transf_28 760 895 sp|A7TF84|ATG26_VANPO 3.1e-28 0 1 138 Glyco_transf_28 8 147 sp|Q2S528|MURG_SALRD 1.2e-28 0 1 137 Glyco_transf_28 8 143 sp|B2SGS8|MURG_FRATM 1.2e-28 0 1 137 Glyco_transf_28 8 143 sp|A4IX64|MURG_FRATW 1.1e-28 0 2 139 Glyco_transf_28 4 143 sp|Q67Q48|MURG_SYMTH 1.2e-28 0 1 138 Glyco_transf_28 997 1131 sp|Q6C8M8|ATG26_YARLI 1.2e-28 0 1 138 Glyco_transf_28 10 155 sp|C1AU55|MURG_RHOOB 1.2e-28 0 2 139 Glyco_transf_28 4 143 sp|B3E3Y2|MURG_GEOLS 1.4e-28 0 1 137 Glyco_transf_28 8 143 sp|A0Q766|MURG_FRATN 8.7e-29 0 2 138 Glyco_transf_28 5 138 sp|B1WVP7|MURG_CYAA5 1.2e-28 0 1 137 Glyco_transf_28 8 143 sp|B0TY93|MURG_FRAP2 1.5e-28 0 1 138 Glyco_transf_28 4 135 sp|Q68WW7|MURG_RICTY 1.3e-28 0 1 138 Glyco_transf_28 4 143 sp|Q6GGZ0|MURG_STAAR 2.4e-28 0 1 136 Glyco_transf_28 6 140 sp|B9JH51|MURG_AGRRK 2.1e-28 0 1 138 Glyco_transf_28 1050 1184 sp|Q6BN88|ATG26_DEBHA 2.8e-28 0 1 137 Glyco_transf_28 8 143 sp|A7NDC0|MURG_FRATF 2.8e-28 0 1 137 Glyco_transf_28 8 143 sp|Q0BL37|MURG_FRATO 2.8e-28 0 1 137 Glyco_transf_28 8 143 sp|Q2A2I7|MURG_FRATH 1.2e-28 0 2 137 Glyco_transf_28 5 142 sp|A5CS51|MURG_CLAM3 2e-28 0 1 138 Glyco_transf_28 4 135 sp|Q9ZDC0|MURG_RICPR 2.2e-28 0 1 138 Glyco_transf_28 3 142 sp|Q9ZK59|MURG_HELPJ 2.5e-28 0 2 138 Glyco_transf_28 9 142 sp|B7KGH1|MURG_CYAP7 2.4e-28 0 1 138 Glyco_transf_28 4 143 sp|Q4L6C8|MURG_STAHJ 1.6e-28 0 2 137 Glyco_transf_28 4 141 sp|B4UES1|MURG_ANASK 2.4e-28 0 1 137 Glyco_transf_28 6 141 sp|B9JY54|MURG_AGRVS 7.8e-28 0 1 136 Glyco_transf_28 6 140 sp|Q1ME33|MURG_RHIL3 4.5e-28 0 1 138 Glyco_transf_28 4 135 sp|A8EZ14|MURG_RICCK 6.7e-28 0 1 138 Glyco_transf_28 1017 1151 sp|Q5A950|ATG26_CANAL 2.9e-28 0 2 137 Glyco_transf_28 4 141 sp|Q2IG27|MURG_ANADE 3.6e-28 0 2 137 Glyco_transf_28 4 141 sp|B8J8E8|MURG_ANAD2 9.3e-28 0 1 136 Glyco_transf_28 6 140 sp|C3MEM9|MURG_RHISN 7.3e-28 0 1 138 Glyco_transf_28 3 142 sp|Q1CSB1|MURG_HELPH 7.9e-28 0 1 134 Glyco_transf_28 4 137 sp|P59424|MURG_BUCBP 2.4e-27 0 1 137 Glyco_transf_28 6 141 sp|Q2K6C1|MURG_RHIEC 7.3e-28 0 1 138 Glyco_transf_28 3 142 sp|O25770|MURG_HELPY 1e-27 0 1 135 Glyco_transf_28 7 143 sp|A0M527|MURG_GRAFK 7.3e-28 0 1 138 Glyco_transf_28 3 142 sp|B2UUR4|MURG_HELPS 8e-28 0 1 138 Glyco_transf_28 5 144 sp|Q3K2P3|MURG_STRA1 8e-28 0 1 138 Glyco_transf_28 5 144 sp|Q8CX15|MURG_STRA5 8e-28 0 1 138 Glyco_transf_28 5 144 sp|Q8E6P0|MURG_STRA3 8.6e-28 0 1 138 Glyco_transf_28 8 146 sp|Q7U346|MURG_BLOFL 8.5e-28 0 2 138 Glyco_transf_28 5 143 sp|Q5HPC0|MURG_STAEQ 8.5e-28 0 2 138 Glyco_transf_28 5 143 sp|Q8CMM3|MURG_STAES 1e-27 0 1 138 Glyco_transf_28 14 149 sp|Q01Q48|MURG_SOLUE 8.8e-28 0 1 138 Glyco_transf_28 3 142 sp|B5Z8F1|MURG_HELPG 1e-27 0 1 138 Glyco_transf_28 8 144 sp|Q5L524|MURG_CHLAB 1e-27 0 1 138 Glyco_transf_28 7 143 sp|Q255W4|MURG_CHLFF 1.2e-27 0 1 138 Glyco_transf_28 8 144 sp|Q820E0|MURG_CHLCV 6.1e-28 0 2 138 Glyco_transf_28 14 150 sp|Q8XVI7|MURG_RALSO 1.2e-27 0 1 138 Glyco_transf_28 4 135 sp|Q4ULT6|MURG_RICFE 1.2e-27 0 1 138 Glyco_transf_28 4 143 sp|Q49XM9|MURG_STAS1 1.2e-27 0 2 138 Glyco_transf_28 29 162 sp|Q119X8|MURG_TRIEI 2.3e-27 0 1 138 Glyco_transf_28 7 146 sp|Q03L97|MURG_STRTD 1.3e-27 0 2 138 Glyco_transf_28 9 147 sp|A0L5N1|MURG_MAGSM 7.5e-28 0 2 138 Glyco_transf_28 6 141 sp|B8H091|MURG_CAUCN 7.5e-28 0 2 138 Glyco_transf_28 6 141 sp|Q9A5A1|MURG_CAUCR 1.4e-27 0 1 138 Glyco_transf_28 4 135 sp|A8GNC7|MURG_RICAH 2.6e-27 0 1 138 Glyco_transf_28 5 144 sp|B5XMA2|MURG_STRPZ 1.4e-27 0 1 138 Glyco_transf_28 3 142 sp|B6JMZ5|MURG_HELP2 1.8e-27 0 4 138 Glyco_transf_28 945 1076 sp|A7ERM5|ATG26_SCLS1 2.1e-27 0 2 137 Glyco_transf_28 5 137 sp|Q7V466|MURG_PROMM 2e-27 0 2 137 Glyco_transf_28 5 137 sp|A2CDG1|MURG_PROM3 3.6e-27 0 1 138 Glyco_transf_28 7 146 sp|Q5M0D4|MURG_STRT1 3.6e-27 0 1 138 Glyco_transf_28 7 146 sp|Q5M4Y1|MURG_STRT2 1.9e-27 0 1 138 Glyco_transf_28 4 143 sp|A6QGX0|MURG_STAAE 1.9e-27 0 1 138 Glyco_transf_28 4 143 sp|Q2FYL5|MURG_STAA8 1.9e-27 0 1 138 Glyco_transf_28 4 143 sp|Q5HG02|MURG_STAAC 1.9e-27 0 1 138 Glyco_transf_28 4 143 sp|Q6G9E3|MURG_STAAS 1.9e-27 0 1 138 Glyco_transf_28 4 143 sp|Q8NWR4|MURG_STAAW 1.9e-27 0 1 138 Glyco_transf_28 4 143 sp|A5ISU9|MURG_STAA9 1.9e-27 0 1 138 Glyco_transf_28 4 143 sp|A6U1N8|MURG_STAA2 1.9e-27 0 1 138 Glyco_transf_28 4 143 sp|A7X2A2|MURG_STAA1 1.9e-27 0 1 138 Glyco_transf_28 4 143 sp|P65481|MURG_STAAM 1.9e-27 0 1 138 Glyco_transf_28 4 143 sp|P65482|MURG_STAAN 1.9e-27 0 1 138 Glyco_transf_28 4 143 sp|Q2YY01|MURG_STAAB 3.7e-27 0 1 137 Glyco_transf_28 12 150 sp|Q7MAW5|MURG_PORGI 3.8e-27 0 1 138 Glyco_transf_28 5 144 sp|A2RDL0|MURG_STRPG 3.8e-27 0 1 138 Glyco_transf_28 5 144 sp|Q5XB05|MURG_STRP6 4.4e-27 0 1 138 Glyco_transf_28 5 144 sp|Q1JAT5|MURG_STRPB 4.4e-27 0 1 138 Glyco_transf_28 5 144 sp|Q1JKY5|MURG_STRPC 3.7e-27 0 1 137 Glyco_transf_28 12 150 sp|B2RIF1|MURG_PORG3 4.2e-27 0 1 138 Glyco_transf_28 5 144 sp|C0M6J2|MURG_STRE4 4.9e-27 0 1 138 Glyco_transf_28 7 143 sp|A1UTC5|MURG_BARBK 5.3e-27 0 1 138 Glyco_transf_28 5 144 sp|C0MD54|MURG_STRS7 5.8e-27 0 1 138 Glyco_transf_28 5 144 sp|B4U1U4|MURG_STREM 4.7e-27 0 1 137 Glyco_transf_28 8 144 sp|A5CWW1|MURG_VESOH 7.3e-27 0 1 135 Glyco_transf_28 7 143 sp|A1A2E9|MURG_BIFAA 9e-27 0 1 138 Glyco_transf_28 5 144 sp|P65483|MURG_STRP1 9e-27 0 1 138 Glyco_transf_28 5 144 sp|P65484|MURG_STRP8 9e-27 0 1 138 Glyco_transf_28 5 144 sp|Q48SK9|MURG_STRPM 9e-27 0 1 138 Glyco_transf_28 5 144 sp|Q1J5S6|MURG_STRPF 5.4e-27 0 1 138 Glyco_transf_28 4 143 sp|A8Z3Z7|MURG_STAAT 5.4e-27 0 1 138 Glyco_transf_28 4 143 sp|Q2FH20|MURG_STAA3 9e-27 0 1 138 Glyco_transf_28 5 144 sp|Q1JG11|MURG_STRPD 7.1e-27 0 1 138 Glyco_transf_28 3 142 sp|Q17WB5|MURG_HELAH 6e-27 0 1 138 Glyco_transf_28 4 141 sp|C6BYG6|MURG_DESAD 1e-26 0 1 136 Glyco_transf_28 7 141 sp|Q6G2Q5|MURG_BARHE 9.9e-27 0 1 135 Glyco_transf_28 7 140 sp|A9IWA5|MURG_BART1 1e-26 0 1 137 Glyco_transf_28 7 144 sp|Q8CUL4|MURG_OCEIH 1e-26 0 1 137 Glyco_transf_28 6 144 sp|A6LEU3|MURG_PARD8 5.6e-27 0 2 133 Glyco_transf_28 5 138 sp|Q6AE64|MURG_LEIXX 1.2e-26 0 2 138 Glyco_transf_28 5 141 sp|A1K3U6|MURG_AZOSB 1.1e-26 0 1 137 Glyco_transf_28 8 142 sp|Q9PLG2|MURG_CHLMU 1.6e-26 0 1 138 Glyco_transf_28 7 142 sp|Q1GRX9|MURG_SPHAL 1.6e-26 0 3 138 Glyco_transf_28 781 913 sp|Q751Z4|ATG26_ASHGO 2.4e-26 0 1 138 Glyco_transf_28 4 143 sp|A4VTK4|MURG_STRSY 2.4e-26 0 1 138 Glyco_transf_28 4 143 sp|A4VZT9|MURG_STRS2 1.6e-26 0 2 138 Glyco_transf_28 4 146 sp|B3QWT7|MURG_CHLT3 1.4e-26 0 1 137 Glyco_transf_28 9 147 sp|Q6AJ53|MURG_DESPS 1.7e-26 0 1 139 Glyco_transf_28 4 146 sp|B9K6P7|MURG_THENN 3.3e-26 0 1 138 Glyco_transf_28 5 144 sp|Q8K6R7|MURG_STRP3 2.2e-26 0 1 138 Glyco_transf_28 1166 1303 sp|Q54IL5|UGT52_DICDI 3.3e-26 0 1 135 Glyco_transf_28 8 144 sp|B3DQN1|MURG_BIFLD 3.3e-26 0 1 135 Glyco_transf_28 8 144 sp|Q8CY50|MURG_BIFLO 3.3e-26 0 1 137 Glyco_transf_28 7 145 sp|Q6MIG1|MURG_BDEBA 2.7e-26 0 2 137 Glyco_transf_28 5 137 sp|Q7U3U6|MURG_SYNPX 4e-26 0 1 135 Glyco_transf_28 8 144 sp|B7GQ78|MURG_BIFLI 6.8e-26 0 2 138 Glyco_transf_28 956 1089 sp|Q0UY53|ATG26_PHANO 6.4e-26 0 1 138 Glyco_transf_28 6 145 sp|Q8DVE2|MURG_STRMU 2.3e-26 0 1 138 Glyco_transf_28 7 143 sp|Q6N411|MURG_RHOPA 5.6e-26 0 2 138 Glyco_transf_28 739 872 sp|Q6CUV2|ATG26_KLULA 3.6e-26 0 1 138 Glyco_transf_28 5 140 sp|Q1MPB9|MURG_LAWIP 3.5e-25 0 1 135 Glyco_transf_28 7 135 sp|Q8R5N5|MURG_FUSNN 6.7e-26 0 1 139 Glyco_transf_28 3 147 sp|Q3ANV3|MURG_CHLCH 1.2e-25 0 1 138 Glyco_transf_28 4 143 sp|A8AW15|MURG_STRGC 1.1e-25 0 1 138 Glyco_transf_28 4 142 sp|B8DP79|MURG_DESVM 8.2e-26 0 1 138 Glyco_transf_28 4 142 sp|Q728U8|MURG_DESVH 1e-25 0 2 138 Glyco_transf_28 960 1093 sp|Q8NJS1|ATG26_LEPMC 1.1e-25 0 4 138 Glyco_transf_28 1039 1170 sp|Q5KK25|ATG26_CRYNE 1.8e-25 0 2 135 Glyco_transf_28 9 139 sp|Q8YZI3|MURG_ANASP 1.8e-25 0 1 138 Glyco_transf_28 5 144 sp|B9DUV6|MURG_STRU0 1.4e-25 0 2 135 Glyco_transf_28 9 139 sp|Q3M935|MURG_ANAVT 1.4e-25 0 2 138 Glyco_transf_28 5 138 sp|Q7VDZ2|MURG_PROMA 1.4e-25 0 2 139 Glyco_transf_28 5 139 sp|Q0I6M0|MURG_SYNS3 1.7e-25 0 2 137 Glyco_transf_28 9 141 sp|B2J8J9|MURG_NOSP7 7.5e-26 0 2 138 Glyco_transf_28 5 138 sp|A5GPC2|MURG_SYNPW 8e-26 0 2 137 Glyco_transf_28 6 140 sp|B4RFS0|MURG_PHEZH 1.8e-25 0 1 138 Glyco_transf_28 4 142 sp|A1VBE8|MURG_DESVV 1.8e-25 0 1 139 Glyco_transf_28 4 144 sp|B7IHN7|MURG_THEAB 2.3e-25 0 4 138 Glyco_transf_28 1016 1147 sp|Q7S1I0|ATG26_NEUCR 2.1e-25 0 2 138 Glyco_transf_28 5 138 sp|Q3AVX2|MURG_SYNS9 2.7e-25 0 4 138 Glyco_transf_28 907 1038 sp|Q4WID6|ATG26_ASPFU 2.7e-25 0 4 138 Glyco_transf_28 916 1047 sp|A1CYS1|ATG26_NEOFI 3e-25 0 2 138 Glyco_transf_28 8 141 sp|Q8DHY4|MURG_THEEB 4.2e-25 0 1 137 Glyco_transf_28 9 147 sp|Q11RH5|MURG_CYTH3 2.9e-25 0 2 138 Glyco_transf_28 5 138 sp|A9BDG0|MURG_PROM4 6.4e-25 0 1 139 Glyco_transf_28 4 151 sp|Q73L91|MURG_TREDE 1.7e-25 0 2 138 Glyco_transf_28 5 141 sp|C4XK69|MURG_DESMR 4.1e-25 0 1 138 Glyco_transf_28 7 144 sp|A1BAL5|MURG_PARDP 7.3e-25 0 1 138 Glyco_transf_28 4 143 sp|A3CLN6|MURG_STRSV 4.4e-25 0 1 136 Glyco_transf_28 6 141 sp|A4SV74|MURG_POLSQ 4.6e-25 0 1 139 Glyco_transf_28 2 137 sp|O67238|MURG_AQUAE 5e-25 0 4 138 Glyco_transf_28 897 1028 sp|Q2U0C3|ATG26_ASPOR 7.8e-25 0 1 138 Glyco_transf_28 7 143 sp|Q3STS8|MURG_NITWN 5.7e-25 0 1 138 Glyco_transf_28 3 146 sp|A1BJX8|MURG_CHLPD 6.4e-25 0 1 137 Glyco_transf_28 5 141 sp|A1AWE8|MURG_RUTMC 5.7e-25 0 4 138 Glyco_transf_28 913 1044 sp|A1CFB3|ATG26_ASPCL 8.9e-25 0 1 135 Glyco_transf_28 8 141 sp|B8IN64|MURG_METNO 9e-25 0 1 135 Glyco_transf_28 7 140 sp|Q6G124|MURG_BARQU 8.8e-25 0 1 138 Glyco_transf_28 8 144 sp|Q2W0H3|MURG_MAGSA 9.4e-25 0 4 138 Glyco_transf_28 903 1034 sp|Q0CKU4|ATG26_ASPTN 1e-24 0 1 138 Glyco_transf_28 4 141 sp|B1ZU31|MURG_OPITP 1e-24 0 1 136 Glyco_transf_28 7 144 sp|A6L071|MURG_BACV8 1.2e-24 0 1 138 Glyco_transf_28 7 143 sp|Q1QNU3|MURG_NITHX 1.8e-24 0 1 139 Glyco_transf_28 4 141 sp|B2V7Y8|MURG_SULSY 1.9e-24 0 2 138 Glyco_transf_28 5 138 sp|Q3AGT7|MURG_SYNSC 1.8e-24 0 4 138 Glyco_transf_28 901 1032 sp|Q5B4C9|ATG26_EMENI 2.5e-24 0 2 138 Glyco_transf_28 5 138 sp|A5GW69|MURG_SYNR3 1.3e-24 0 1 138 Glyco_transf_28 8 144 sp|A4YZK3|MURG_BRASO 1.3e-24 0 1 136 Glyco_transf_28 19 153 sp|Q2RVU4|MURG_RHORT 3.1e-24 0 2 138 Glyco_transf_28 15 147 sp|Q2JW21|MURG_SYNJA 1.4e-24 0 1 138 Glyco_transf_28 8 144 sp|A5EPK4|MURG_BRASB 3.1e-24 0 4 138 Glyco_transf_28 889 1020 sp|A7KAN4|ATG26_PENCW 4.7e-24 0 2 136 Glyco_transf_28 15 145 sp|Q2JJR4|MURG_SYNJB 3.9e-24 0 4 138 Glyco_transf_28 902 1033 sp|A2QNQ5|ATG26_ASPNC 4.6e-24 0 1 134 Glyco_transf_28 6 138 sp|Q0AMW7|MURG_MARMM 9.2e-24 0 1 135 Glyco_transf_28 5 137 sp|Q812Y1|MURG3_BACCR 7.1e-24 0 1 138 Glyco_transf_28 3 146 sp|B4SH49|MURG_PELPB 7.7e-24 0 1 138 Glyco_transf_28 3 146 sp|B4S6Q9|MURG_PROA2 7.8e-24 0 2 135 Glyco_transf_28 8 137 sp|A8G2K3|MURG_PROM2 1e-23 0 1 137 Glyco_transf_28 7 142 sp|Q89FU7|MURG_BRAJA 1.5e-23 0 1 130 Glyco_transf_28 5 132 sp|A0RHC3|MURG1_BACAH 1.5e-23 0 1 135 Glyco_transf_28 5 140 sp|Q6MBS7|MURG_PARUW 1.7e-23 0 1 138 Glyco_transf_28 10 146 sp|Q0BXU2|MURG_HYPNA 1.3e-23 0 1 138 Glyco_transf_28 3 146 sp|Q8KGD4|MURG_CHLTE 1.4e-23 0 1 138 Glyco_transf_28 3 146 sp|B3QLW4|MURG_CHLP8 2e-23 0 2 138 Glyco_transf_28 5 141 sp|A6T2F8|MURG_JANMA 2.4e-23 0 1 138 Glyco_transf_28 4 140 sp|A5CEL6|MURG_ORITB 2.2e-23 0 1 133 Glyco_transf_28 8 140 sp|Q8D2Z6|MURG_WIGBR 4.2e-23 0 1 134 Glyco_transf_28 8 140 sp|B0UFC7|MURG_METS4 3.9e-23 0 2 137 Glyco_transf_28 2 137 sp|Q163J0|MURG_ROSDO 6.9e-23 0 2 138 Glyco_transf_28 5 141 sp|A4G8T8|MURG_HERAR 4.4e-23 0 2 137 Glyco_transf_28 7 142 sp|Q28NN5|MURG_JANSC 4.3e-23 0 2 135 Glyco_transf_28 8 137 sp|Q31CY4|MURG_PROM9 5.6e-23 0 1 133 Glyco_transf_28 8 139 sp|B1ZGP4|MURG_METPB 2.7e-23 0 2 137 Glyco_transf_28 7 142 sp|Q5LU63|MURG_SILPO 4.8e-23 0 1 138 Glyco_transf_28 4 140 sp|B3CRE9|MURG_ORITI 4.2e-23 0 2 137 Glyco_transf_28 7 142 sp|Q1GIV1|MURG_SILST 9.1e-23 0 2 138 Glyco_transf_28 6 142 sp|Q1GZ01|MURG_METFK 1.4e-22 0 1 137 Glyco_transf_28 3 143 sp|B3ET95|MURG_AMOA5 2.2e-22 0 1 137 Glyco_transf_28 7 145 sp|Q8A258|MURG_BACTN 9.7e-23 0 1 138 Glyco_transf_28 8 144 sp|Q211T8|MURG_RHOPB 9.8e-23 0 1 137 Glyco_transf_28 7 142 sp|Q2IYK8|MURG_RHOP2 7.2e-23 0 1 137 Glyco_transf_28 8 143 sp|B1LXZ4|MURG_METRJ 1.4e-22 0 2 135 Glyco_transf_28 8 137 sp|A2BNZ2|MURG_PROMS 1.8e-22 0 1 137 Glyco_transf_28 3 130 sp|C0R2W7|MURG_WOLWR 1.8e-22 0 1 137 Glyco_transf_28 3 130 sp|Q73I55|MURG_WOLPM 2.5e-22 0 1 133 Glyco_transf_28 8 139 sp|A9VWV3|MURG_METEP 2.5e-22 0 1 133 Glyco_transf_28 8 139 sp|B7KSC1|MURG_METC4 1.7e-22 0 2 138 Glyco_transf_28 5 138 sp|A2C027|MURG_PROM1 6.3e-22 0 2 137 Glyco_transf_28 7 142 sp|A3PHS8|MURG_RHOS1 4.9e-22 0 1 138 Glyco_transf_28 3 146 sp|A4SH02|MURG_PROVI 6.3e-22 0 2 137 Glyco_transf_28 7 142 sp|Q3J4M2|MURG_RHOS4 3e-22 0 2 130 Glyco_transf_28 9 133 sp|Q7V388|MURG_PROMP 3e-22 0 2 130 Glyco_transf_28 8 132 sp|A3PAR5|MURG_PROM0 1.8e-22 0 1 138 Glyco_transf_28 7 143 sp|Q07PT3|MURG_RHOP5 5.3e-22 0 1 137 Glyco_transf_28 7 142 sp|Q133X1|MURG_RHOPS 4.4e-22 0 1 137 Glyco_transf_28 16 154 sp|Q5LIJ7|MURG_BACFN 4.4e-22 0 1 137 Glyco_transf_28 16 154 sp|Q64ZM1|MURG_BACFR 4.4e-22 0 1 139 Glyco_transf_28 4 144 sp|A6LLF1|MURG_THEM4 4.2e-22 0 2 138 Glyco_transf_28 5 138 sp|Q46HH6|MURG_PROMT 1.4e-21 0 2 137 Glyco_transf_28 7 142 sp|A4WQD5|MURG_RHOS5 1.1e-21 0 2 130 Glyco_transf_28 9 133 sp|A2BUH4|MURG_PROM5 2.7e-21 0 1 135 Glyco_transf_28 3 128 sp|Q5GS79|MURG_WOLTR 4.4e-21 0 1 133 Glyco_transf_28 6 138 sp|Q7NPZ9|MURG_CHRVO 3.8e-20 0 19 139 Glyco_transf_28 2 121 sp|Q1AVX3|MURG_RUBXD 2.8 0 1 24 Glyco_transf_28 165 188 sp|Q1AVX3|MURG_RUBXD 4.2e-21 0 2 134 Glyco_transf_28 7 136 sp|Q7MBC4|MURG_GLOVI 5e-21 0 1 137 Glyco_transf_28 2 140 sp|Q7U322|MURG_HELHP 3.5e-21 0 1 138 Glyco_transf_28 3 146 sp|Q3B129|MURG_PELLD 1.2e-19 0 3 136 Glyco_transf_28 5 140 sp|Q30PK0|MURG_SULDN 2.4e-20 0 2 137 Glyco_transf_28 7 145 sp|A2SCY5|MURG_METPP 5.3e-19 0 1 136 Glyco_transf_28 2 139 sp|A0RP87|MURG_CAMFF 6.7 0 2 41 Glyco_transf_28 171 210 sp|A0RP87|MURG_CAMFF 1.1e-19 0 1 137 Glyco_transf_28 3 127 sp|B3CM87|MURG_WOLPP 1.4e-19 0 1 135 Glyco_transf_28 9 145 sp|A5FUL0|MURG_ACICJ 1.9e-19 0 1 131 Glyco_transf_28 3 135 sp|Q7MAD4|MURG_WOLSU 4.9e-19 0 1 135 Glyco_transf_28 4 139 sp|B2KE54|MURG_ELUMP 4e-19 0 1 133 Glyco_transf_28 3 141 sp|B3EIK8|MURG_CHLL2 2.5e-19 0 3 138 Glyco_transf_28 20 177 sp|A5UZT7|MURG_ROSS1 1.3e-18 0 1 134 Glyco_transf_28 5 142 sp|Q5FUJ5|MURG_GLUOX 7.8e-18 0 1 135 Glyco_transf_28 3 137 sp|A6Q722|MURG_SULNB 5.5e-18 0 1 138 Glyco_transf_28 4 135 sp|B8E325|MURG_DICTD 9.9e-18 0 1 138 Glyco_transf_28 3 142 sp|A6Q579|MURG_NITSB 2e-17 0 1 133 Glyco_transf_28 10 144 sp|Q0BV25|MURG_GRABC 2.4e-17 0 1 135 Glyco_transf_28 4 137 sp|Q5PB22|MURG_ANAMM 3.4e-17 0 1 137 Glyco_transf_28 3 141 sp|A7I265|MURG_CAMHC 1.1e-17 0 1 138 Glyco_transf_28 4 145 sp|A9FI55|MURG_SORC5 3e-17 0 1 138 Glyco_transf_28 4 135 sp|B5YEL3|MURG_DICT6 3.8e-16 0 1 136 Glyco_transf_28 3 140 sp|A8FM88|MURG_CAMJ8 5e-16 0 1 136 Glyco_transf_28 3 140 sp|Q5HU62|MURG_CAMJR 5e-16 0 1 136 Glyco_transf_28 3 140 sp|A1W027|MURG_CAMJJ 5e-16 0 1 136 Glyco_transf_28 3 140 sp|Q9PNQ2|MURG_CAMJE 1.1e-15 0 1 136 Glyco_transf_28 3 140 sp|A7H2Z9|MURG_CAMJD 3.1e-15 0 4 138 Glyco_transf_28 6 142 sp|A8F4X1|MURG_THELT 7e-12 0 1 138 Glyco_transf_28 4 142 sp|Q72R84|MURG_LEPIC 7e-12 0 1 138 Glyco_transf_28 4 142 sp|Q8F4J1|MURG_LEPIN 1.3e-11 0 1 138 Glyco_transf_28 5 138 sp|Q4FPK5|MURG_PELUB 2.7e-10 0 1 137 Glyco_transf_28 4 141 sp|Q04V94|MURG_LEPBJ 2.7e-10 0 1 137 Glyco_transf_28 4 141 sp|Q04Y82|MURG_LEPBL 1.8e-09 0 10 103 Glyco_transf_28 13 111 sp|Q8TTI1|Y452_METAC 5.5e-08 0 10 113 Glyco_transf_28 13 118 sp|Q8TTI0|Y453_METAC 2.2e-08 0 10 112 Glyco_transf_28 13 117 sp|Q8PWF3|Y1636_METMA 4.8e-08 0 6 93 Glyco_transf_28 11 104 sp|O34539|YJIC_BACSU 1.2e-07 0 1 59 Glyco_transf_28 10 75 sp|Q53685|OLED_STRAT 8e-08 0 10 112 Glyco_transf_28 13 117 sp|Q8PZB2|Y582_METMA 3.9e-07 0 11 126 Glyco_transf_28 14 131 sp|P21686|CRTX_PANAN 2.2e-06 0 9 54 Glyco_transf_28 33 78 sp|Q54387|MGT_STRLI 2.9e-06 0 15 125 Glyco_transf_28 18 125 sp|Q01330|CRTX_ESCVU 0.00065 0 1 53 Glyco_transf_28 4 56 sp|O31853|YOJK_BACSU 7.7 0 30 98 Glyco_transf_28 189 270 sp|O31853|YOJK_BACSU 8.6e-05 0 19 70 Glyco_transf_28 201 251 sp|B1YIY4|MTNA_EXIS2 7e-05 0 2 55 Glyco_transf_28 15 74 sp|Q0WW21|UGAGT_ARATH 0.00011 0 1 54 Glyco_transf_28 20 70 sp|Q9Z565|ILVC1_STRCO 9.1e-05 0 2 49 Glyco_transf_28 5 52 sp|O05496|YDHE_BACSU 0.00011 0 1 54 Glyco_transf_28 20 70 sp|Q9FBT8|ILVC2_STRCO 7.8e-05 0 1 55 Glyco_transf_28 13 83 sp|Q9SBL1|HMNGT_SORBI 0.00034 0 18 62 Glyco_transf_28 199 242 sp|B1I2P1|MTNA_DESAP 0.015 0 55 127 Glyco_transf_28 194 265 sp|A8AZU1|MUTL_STRGC 6.1 0 105 136 Glyco_transf_28 315 346 sp|A8AZU1|MUTL_STRGC 0.00034 0 20 91 Glyco_transf_28 173 244 sp|Q01198|LIGD_PSEPA 0.0021 0 2 31 Glyco_transf_28 209 239 sp|Q83RR8|NPD_SHIFL 0.00042 0 19 69 Glyco_transf_28 205 254 sp|C5D7U5|MTNA_GEOSW 0.017 0 56 127 Glyco_transf_28 195 265 sp|A3CR14|MUTL_STRSV 8.4 0 105 136 Glyco_transf_28 315 346 sp|A3CR14|MUTL_STRSV 0.00066 0 19 69 Glyco_transf_28 211 260 sp|Q88M09|MTNA_PSEPK 0.0008 0 18 69 Glyco_transf_28 203 253 sp|Q5L1E6|MTNA_GEOKA 0.0033 0 3 31 Glyco_transf_28 210 239 sp|Q8X8E0|NPD_ECO57 0.0031 0 3 33 Glyco_transf_28 210 241 sp|P75960|NPD_ECOLI 0.00037 0 1 50 Glyco_transf_28 10 61 sp|Q5V467|MAMA1_HALMA 0.0012 0 50 127 Glyco_transf_28 189 265 sp|C0MAS4|MUTL_STRE4 0.0025 0 3 36 Glyco_transf_28 210 244 sp|P0A2F2|NPD_SALTY 0.0025 0 3 36 Glyco_transf_28 210 244 sp|P0A2F3|NPD_SALTI 0.0014 0 56 127 Glyco_transf_28 195 265 sp|C0MGC4|MUTL_STRS7 0.00085 0 18 70 Glyco_transf_28 204 255 sp|Q65KK2|MTNA_BACLD 0.00089 0 19 63 Glyco_transf_28 211 254 sp|B0KTX5|MTNA_PSEPG 0.00072 0 19 64 Glyco_transf_28 211 255 sp|B1J5G5|MTNA_PSEPW 0.0009 0 19 63 Glyco_transf_28 211 254 sp|A5W7G2|MTNA_PSEP1 0.0015 0 18 69 Glyco_transf_28 203 253 sp|A4ILL1|MTNA_GEOTN 0.0014 0 56 127 Glyco_transf_28 195 265 sp|B4U0J7|MUTL_STREM 0.0033 0 3 31 Glyco_transf_28 210 239 sp|Q8FIM4|NPD_ECOL6 0.0013 0 1 55 Glyco_transf_28 20 83 sp|B2GFJ7|ILVC_KOCRD 0.0012 0 1 50 Glyco_transf_28 20 66 sp|B1VZ72|ILVC_STRGG 0.0013 0 1 50 Glyco_transf_28 20 66 sp|Q59818|ILVC_STRAW 0.0052 0 19 65 Glyco_transf_28 205 250 sp|Q731R7|MTNA_BACC1 0.0011 0 10 85 Glyco_transf_28 119 194 sp|B1GZW3|TPIS_UNCTG 0.011 0 13 108 Glyco_transf_28 25 121 sp|Q2IWS4|GLYA_RHOP2 0.0025 0 19 66 Glyco_transf_28 205 251 sp|A7GS56|MTNA_BACCN 0.0015 0 1 61 Glyco_transf_28 20 76 sp|B7KF23|ILVC_CYAP7 0.0018 0 23 126 Glyco_transf_28 138 237 sp|A5W1E8|RNZ_PSEP1 0.0028 0 2 52 Glyco_transf_28 20 67 sp|B3QSP0|ILVC_CHLT3 0.008 0 19 63 Glyco_transf_28 205 248 sp|O31662|MTNA_BACSU 0.004 0 1 60 Glyco_transf_28 20 75 sp|C1F6Z5|ILVC_ACIC5 2.3 0 63 125 Glyco_transf_28 93 143 sp|Q2G3S7|PYRB_NOVAD 0.09 0 22 47 Glyco_transf_28 199 225 sp|Q2G3S7|PYRB_NOVAD 4.2 0 56 96 Glyco_transf_28 349 387 sp|Q96LB3|IFT74_HUMAN 0.044 0 28 87 Glyco_transf_28 505 562 sp|Q96LB3|IFT74_HUMAN 0.0028 0 1 57 Glyco_transf_28 20 73 sp|A9AZM5|ILVC_HERA2 0.0069 0 18 59 Glyco_transf_28 19 69 sp|B8HSQ9|SURE_CYAP4 0.0043 0 14 73 Glyco_transf_28 601 661 sp|Q3SPL2|UVRC_NITWN 0.005 0 19 63 Glyco_transf_28 205 248 sp|A7Z3X0|MTNA_BACA2 0.078 0 21 118 Glyco_transf_28 40 134 sp|Q38W65|EFTS_LACSS 2.5 0 27 122 Glyco_transf_28 177 262 sp|Q38W65|EFTS_LACSS 0.0033 0 44 126 Glyco_transf_28 121 199 sp|C3JYK1|TIG_PSEFS 0.003 0 11 97 Glyco_transf_28 131 219 sp|Q1GZA6|BIOB_METFK 0.0044 0 19 66 Glyco_transf_28 205 251 sp|Q635P7|MTNA2_BACCZ 0.0032 0 1 73 Glyco_transf_28 12 87 sp|O48676|HTGT_ARATH 2.5 0 16 33 Glyco_transf_28 15 32 sp|Q8YRC9|THIOG_ANASP 0.25 0 87 133 Glyco_transf_28 315 361 sp|Q8YRC9|THIOG_ANASP 0.019 0 1 54 Glyco_transf_28 21 70 sp|Q8DW43|ILVC_STRMU 0.0041 0 19 66 Glyco_transf_28 205 251 sp|Q81MJ6|MTNA2_BACAN 0.014 0 13 107 Glyco_transf_28 24 119 sp|Q6N693|GLYA1_RHOPA 0.0035 0 16 73 Glyco_transf_28 14 69 sp|B0C915|MURD_ACAM1 0.0061 0 13 108 Glyco_transf_28 20 116 sp|Q2KA25|GLYA_RHIEC 0.011 0 13 107 Glyco_transf_28 32 127 sp|Q214H7|GLYA_RHOPB 0.0067 0 65 127 Glyco_transf_28 203 265 sp|B9DW70|MUTL_STRU0 0.0046 0 19 66 Glyco_transf_28 205 251 sp|A0RI38|MTNA2_BACAH 0.0046 0 19 66 Glyco_transf_28 205 251 sp|Q6HED3|MTNA2_BACHK 0.0042 0 14 73 Glyco_transf_28 602 662 sp|Q1QIR5|UVRC_NITHX 0.0085 0 1 50 Glyco_transf_28 21 66 sp|A8AVN4|ILVC_STRGC 0.024 0 17 68 Glyco_transf_28 40 90 sp|Q7V5V5|MURD_PROMM 0.0043 0 1 50 Glyco_transf_28 21 67 sp|Q47SB6|ILVC_THEFY 0.0032 0 1 47 Glyco_transf_28 21 64 sp|A4FMQ5|ILVC_SACEN 0.0022 0 30 121 Glyco_transf_28 11 103 sp|Q5V3R4|TRM56_HALMA 5.1 0 24 67 Glyco_transf_28 105 146 sp|B8GW68|ENO_CAUCN 0.066 0 13 48 Glyco_transf_28 184 219 sp|B8GW68|ENO_CAUCN 5.1 0 24 67 Glyco_transf_28 105 146 sp|Q9A7J9|ENO_CAUCR 0.066 0 13 48 Glyco_transf_28 184 219 sp|Q9A7J9|ENO_CAUCR 0.0049 0 1 54 Glyco_transf_28 4 59 sp|Q5V3F0|MAMA2_HALMA 0.0086 0 11 45 Glyco_transf_28 24 60 sp|B1LZ88|GLYA_METRJ 0.0038 0 11 97 Glyco_transf_28 128 216 sp|P94966|BIOB_METSK 0.0043 0 1 70 Glyco_transf_28 19 81 sp|Q3SHE4|ILVC_THIDA 0.015 0 13 107 Glyco_transf_28 25 120 sp|Q07MT9|GLYA_RHOP5 0.0047 0 17 63 Glyco_transf_28 202 247 sp|A9VRK3|MTNA1_BACWK 0.01 0 1 54 Glyco_transf_28 20 70 sp|A9GW78|ILVC_SORC5 0.0079 0 1 59 Glyco_transf_28 21 75 sp|Q5YRW2|ILVC_NOCFA 0.01 0 1 36 Glyco_transf_28 21 51 sp|A3CQ86|ILVC_STRSV 0.013 0 14 72 Glyco_transf_28 611 670 sp|Q21AW5|UVRC_RHOPB 0.0061 0 17 63 Glyco_transf_28 202 247 sp|Q81IK7|MTNA1_BACCR 5.6 0 15 31 Glyco_transf_28 21 37 sp|Q5FNN2|PYRG_GLUOX 0.34 0 2 45 Glyco_transf_28 137 183 sp|Q5FNN2|PYRG_GLUOX 0.0076 0 1 55 Glyco_transf_28 19 82 sp|Q2S9V9|ILVC_HAHCH 0.0042 0 2 79 Glyco_transf_28 3 75 sp|Q17QH8|D39U1_BOVIN 0.0057 0 1 47 Glyco_transf_28 20 63 sp|Q2J6V2|ILVC_FRASC 0.038 0 1 54 Glyco_transf_28 19 69 sp|A1WUW3|ILVC_HALHL 0.0093 0 15 70 Glyco_transf_28 20 71 sp|A8LMD0|PUR9_DINSH 0.0091 0 1 37 Glyco_transf_28 215 251 sp|C5BAT0|GCSP_EDWI9 0.011 0 1 48 Glyco_transf_28 21 65 sp|C1B2M1|ILVC_RHOOB 0.011 0 1 48 Glyco_transf_28 21 65 sp|Q0S2H3|ILVC_RHOSR 0.0062 0 17 63 Glyco_transf_28 202 247 sp|A0R946|MTNA1_BACAH 0.0062 0 17 63 Glyco_transf_28 202 247 sp|Q81ZC2|MTNA1_BACAN 0.0062 0 17 63 Glyco_transf_28 202 247 sp|Q6HP54|MTNA1_BACHK 0.011 0 16 108 Glyco_transf_28 23 116 sp|Q1MIU5|GLYA_RHIL3 0.0078 0 19 65 Glyco_transf_28 205 250 sp|A8FCG5|MTNA_BACP2 0.013 0 1 68 Glyco_transf_28 19 79 sp|Q63CV4|ILVC2_BACCZ 0.0084 0 1 68 Glyco_transf_28 20 81 sp|A4J179|ILVC_DESRM 0.0039 0 1 55 Glyco_transf_28 3 76 sp|Q9V030|PAAD_PYRAB 0.014 0 1 54 Glyco_transf_28 19 68 sp|Q81F27|ILVC2_BACCR 0.05 0 1 52 Glyco_transf_28 21 68 sp|Q03IJ9|ILVC_STRTD 0.05 0 1 52 Glyco_transf_28 21 68 sp|Q9F0I7|ILVC_STRTR 0.0082 0 14 90 Glyco_transf_28 88 168 sp|P26166|YBCC_RHOCA 0.0067 0 1 54 Glyco_transf_28 20 70 sp|B8I1T8|ILVC_CLOCE 0.066 0 1 35 Glyco_transf_28 21 50 sp|A4VXL3|ILVC_STRSY 0.066 0 1 35 Glyco_transf_28 21 50 sp|A4W3V8|ILVC_STRS2 0.0079 0 1 59 Glyco_transf_28 19 73 sp|Q3B594|ILVC_PELLD 0.026 0 65 128 Glyco_transf_28 203 266 sp|B1I8F2|MUTL_STRPI 0.026 0 65 128 Glyco_transf_28 203 266 sp|B2IS10|MUTL_STRPS 0.026 0 65 128 Glyco_transf_28 203 266 sp|B8ZKC9|MUTL_STRPJ 0.026 0 65 128 Glyco_transf_28 203 266 sp|P0A3R1|HEXB_STRPN 0.026 0 65 128 Glyco_transf_28 203 266 sp|P0A3R2|HEXB_STRR6 0.026 0 65 128 Glyco_transf_28 203 266 sp|Q04MR4|MUTL_STRP2 0.026 0 65 128 Glyco_transf_28 203 266 sp|C1CI68|MUTL_STRZP 0.026 0 65 128 Glyco_transf_28 203 266 sp|C1CP43|MUTL_STRZT 0.016 0 16 59 Glyco_transf_28 184 248 sp|Q8ZQE4|MACB_SALTY 0.016 0 16 59 Glyco_transf_28 184 248 sp|Q57R58|MACB_SALCH 0.0064 0 15 92 Glyco_transf_28 45 123 sp|Q64550|UD11_RAT 0.011 0 13 108 Glyco_transf_28 20 116 sp|B9JCX4|GLYA_AGRRK 0.016 0 16 59 Glyco_transf_28 184 248 sp|Q8Z824|MACB_SALTI 0.0047 0 43 134 Glyco_transf_28 80 181 sp|O94475|YC67_SCHPO 0.39 0 19 73 Glyco_transf_28 56 108 sp|P59837|RDH12_BOVIN 1.7 0 34 79 Glyco_transf_28 211 265 sp|P59837|RDH12_BOVIN 0.016 0 16 59 Glyco_transf_28 184 248 sp|Q5PGK9|MACB_SALPA 0.032 0 1 48 Glyco_transf_28 20 64 sp|Q02CM4|ILVC_SOLUE 0.019 0 3 21 Glyco_transf_28 208 226 sp|Q669P6|NPD_YERPS 0.019 0 3 21 Glyco_transf_28 208 226 sp|Q8ZFR1|NPD_YERPE 0.009 0 1 69 Glyco_transf_28 20 82 sp|B9KYS1|ILVC_THERP 0.023 0 1 48 Glyco_transf_28 20 64 sp|B4UAN4|ILVC_ANASK 0.023 0 1 48 Glyco_transf_28 20 64 sp|B8J829|ILVC_ANAD2 0.023 0 1 48 Glyco_transf_28 20 64 sp|Q2IJB7|ILVC_ANADE 0.0091 0 1 45 Glyco_transf_28 20 59 sp|Q0RDI8|ILVC_FRAAA 0.013 0 18 54 Glyco_transf_28 24 61 sp|P0ABQ0|COABC_ECOLI 0.013 0 18 54 Glyco_transf_28 24 61 sp|P0ABQ1|COABC_ECOL6 0.0085 0 1 64 Glyco_transf_28 20 76 sp|B2J2U6|ILVC_NOSP7 0.011 0 14 73 Glyco_transf_28 598 658 sp|Q89DG9|UVRC_BRAJA 0.009 0 1 63 Glyco_transf_28 17 73 sp|Q2S0M9|ILVC_SALRD 0.0086 0 1 59 Glyco_transf_28 22 76 sp|Q7NH80|ILVC_GLOVI 0.0081 0 1 54 Glyco_transf_28 21 71 sp|Q8G6V1|ILVC2_BIFLO 0.059 0 15 53 Glyco_transf_28 186 224 sp|Q2W698|ENO_MAGSA 0.0097 0 17 63 Glyco_transf_28 202 247 sp|Q63GN3|MTNA1_BACCZ 0.0096 0 1 54 Glyco_transf_28 20 70 sp|B0JRP2|ILVC_MICAN 0.027 0 65 128 Glyco_transf_28 203 266 sp|C1CBX8|MUTL_STRZJ 0.0097 0 12 80 Glyco_transf_28 114 184 sp|Q3SLY0|BIOB_THIDA 0.027 0 65 128 Glyco_transf_28 203 266 sp|B5E6C5|MUTL_STRP4 0.011 0 16 55 Glyco_transf_28 14 60 sp|B2J6I3|MURD_NOSP7 0.05 0 1 52 Glyco_transf_28 21 68 sp|Q5LXV0|ILVC_STRT1 0.05 0 1 52 Glyco_transf_28 21 68 sp|Q5M2F2|ILVC_STRT2 4.1 0 66 100 Glyco_transf_28 13 47 sp|C6A5E6|VATD_THESM 0.17 0 29 87 Glyco_transf_28 104 160 sp|C6A5E6|VATD_THESM 0.014 0 1 67 Glyco_transf_28 20 80 sp|Q2RIS6|ILVC_MOOTA 0.13 0 87 135 Glyco_transf_28 315 363 sp|Q3M859|THIOG_ANAVT 0.013 0 24 93 Glyco_transf_28 58 124 sp|Q5GS59|RLME_WOLTR 0.0049 0 2 54 Glyco_transf_28 21 70 sp|B8G7X1|ILVC_CHLAD 0.016 0 1 52 Glyco_transf_28 20 68 sp|C5C2I2|ILVC_BEUC1 0.022 0 2 54 Glyco_transf_28 20 69 sp|Q5SJ03|ILVC_THET8 0.022 0 2 54 Glyco_transf_28 20 69 sp|Q72JC8|ILVC_THET2 0.019 0 1 49 Glyco_transf_28 21 66 sp|Q4JUN9|ILVC_CORJK 0.013 0 14 72 Glyco_transf_28 607 666 sp|Q2J0X3|UVRC_RHOP2 0.028 0 1 36 Glyco_transf_28 21 51 sp|Q02YY8|ILVC_LACLS 0.016 0 1 57 Glyco_transf_28 20 70 sp|B9EBF4|ILVC_MACCJ 0.011 0 10 43 Glyco_transf_28 23 56 sp|Q43716|UFOG_PETHY 0.0099 0 15 56 Glyco_transf_28 20 60 sp|A5GUT4|SURE_SYNR3 0.012 0 2 64 Glyco_transf_28 20 76 sp|Q1ARE4|ILVC_RUBXD 0.033 0 2 48 Glyco_transf_28 21 64 sp|A6W7N6|ILVC_KINRD 0.25 0 23 52 Glyco_transf_28 129 158 sp|Q11039|DEAD_MYCTU 0.017 0 14 72 Glyco_transf_28 607 666 sp|Q13BM0|UVRC_RHOPS 0.0085 0 18 105 Glyco_transf_28 19 127 sp|Q8YMT3|SURE_ANASP 0.015 0 16 54 Glyco_transf_28 20 58 sp|Q319M0|SURE_PROM9 0.017 0 19 66 Glyco_transf_28 205 251 sp|A9VFD5|MTNA2_BACWK 3.5 0 47 107 Glyco_transf_28 15 73 sp|A1JRP2|NADA_YERE8 0.37 0 85 132 Glyco_transf_28 226 276 sp|A1JRP2|NADA_YERE8 0.032 0 1 36 Glyco_transf_28 21 51 sp|A2RKQ6|ILVC_LACLM 0.019 0 16 110 Glyco_transf_28 184 298 sp|Q32DZ9|MACB_SHIDS 0.018 0 1 59 Glyco_transf_28 20 74 sp|A5CPY6|ILVC_CLAM3 0.018 0 1 59 Glyco_transf_28 20 74 sp|B0RIN6|ILVC_CLAMS 0.024 0 57 127 Glyco_transf_28 196 265 sp|Q8K5J6|MUTL_STRP3 0.024 0 57 127 Glyco_transf_28 196 265 sp|Q99XN7|MUTL_STRP1 0.024 0 57 127 Glyco_transf_28 196 265 sp|B5XJ09|MUTL_STRPZ 0.024 0 57 127 Glyco_transf_28 196 265 sp|A2RGV3|MUTL_STRPG 0.024 0 57 127 Glyco_transf_28 196 265 sp|Q5X9H5|MUTL_STRP6 0.019 0 63 125 Glyco_transf_28 201 263 sp|Q3JYM6|MUTL_STRA1 0.019 0 63 125 Glyco_transf_28 201 263 sp|Q8E2R5|MUTL_STRA3 0.021 0 1 54 Glyco_transf_28 9 63 sp|Q9MB73|LGT_CITUN 0.02 0 17 54 Glyco_transf_28 21 58 sp|A8G678|SURE_PROM2 0.046 0 1 48 Glyco_transf_28 20 64 sp|A9WP08|ILVC_RENSM 0.0085 0 2 54 Glyco_transf_28 21 70 sp|A9WC26|ILVC_CHLAA 0.0085 0 2 54 Glyco_transf_28 21 70 sp|B9LGM7|ILVC_CHLSY 0.02 0 17 53 Glyco_transf_28 21 57 sp|A2BSJ2|SURE_PROMS 0.026 0 1 32 Glyco_transf_28 6 38 sp|Q9LR44|IABG1_ARATH 0.068 0 26 86 Glyco_transf_28 101 159 sp|O57731|VATD_PYRHO 0.027 0 17 50 Glyco_transf_28 21 53 sp|A3PEA4|SURE_PROM0 0.019 0 16 110 Glyco_transf_28 184 298 sp|P75831|MACB_ECOLI 0.02 0 16 110 Glyco_transf_28 184 298 sp|Q83LR7|MACB_SHIFL 0.02 0 16 110 Glyco_transf_28 184 298 sp|Q3Z3Q4|MACB_SHISS 0.029 0 15 108 Glyco_transf_28 183 296 sp|Q8XED0|MACB_ECO57 hmmer-3.1b2/easel/demotic/regress/psiblast-tbl.out0000664361611702660230000003106112473612605021612 0ustar wheelerteddy2e-73 25 1 307 A3CM55.1 76 400 sp|P78283|SECY_VIBCH Preprotein translocase subunit secY OS=Vibrio 3e-73 21 1 307 A3CM55.1 76 397 sp|P43804|SECY_HAEIN Preprotein translocase subunit secY 1e-72 22 1 307 A3CM55.1 75 394 sp|Q9HWF5|SECY_PSEAE Preprotein translocase subunit secY 4e-71 22 1 299 A3CM55.1 73 391 sp|Q59912|SECY_STRGB Preprotein translocase subunit secY 5e-70 19 1 299 A3CM55.1 69 383 sp|Q05217|SECY_STACT Preprotein translocase subunit secY 1e-68 22 1 302 A3CM55.1 72 393 sp|Q59916|SECY_STRGR Preprotein translocase subunit secY 3e-68 20 3 323 A3CM55.1 74 418 sp|O33006|SECY_MYCLE Preprotein translocase subunit secY 4e-68 21 1 305 A3CM55.1 73 397 sp|P38376|SECY_CORGL Preprotein translocase subunit secY 5e-68 21 1 302 A3CM55.1 79 397 sp|P77964|SECY_SYNY3 Preprotein translocase subunit secY 2e-67 22 1 308 A3CM55.1 69 397 sp|P27148|SECY_LACLC Preprotein translocase subunit secY 3e-67 21 1 289 A3CM55.1 69 373 sp|Q8CNF3|SECY_STAES Preprotein translocase subunit secY 3e-67 21 1 289 A3CM55.1 69 373 sp|Q5HM19|SECY_STAEQ Preprotein translocase subunit secY 3e-67 21 1 302 A3CM55.1 73 394 sp|P46785|SECY_STRCO Preprotein translocase subunit secY 4e-67 21 1 302 A3CM55.1 73 394 sp|P49977|SECY_STRLI Preprotein translocase subunit secY 4e-67 19 1 302 A3CM55.1 190 497 sp|P93690|SECY_SPIOL Preprotein translocase subunit secY, 5e-67 22 1 306 A3CM55.1 69 391 sp|Q7A086|SECY_STAAW Preprotein translocase subunit secY 5e-67 22 1 306 A3CM55.1 69 391 sp|Q6G791|SECY_STAAS Preprotein translocase subunit secY 5e-67 22 1 306 A3CM55.1 69 391 sp|Q6GEK3|SECY_STAAR Preprotein translocase subunit secY 5e-67 22 1 306 A3CM55.1 69 391 sp|Q7A468|SECY_STAAN Preprotein translocase subunit secY 5e-67 22 1 306 A3CM55.1 69 391 sp|Q99S39|SECY_STAAM Preprotein translocase subunit secY 5e-67 22 1 306 A3CM55.1 69 391 sp|Q5HDX8|SECY_STAAC Preprotein translocase subunit secY 5e-67 22 1 306 A3CM55.1 69 391 sp|O08387|SECY_STAA8 Preprotein translocase subunit secY 7e-67 22 1 308 A3CM55.1 69 397 sp|P58118|SECY_LACLA Preprotein translocase subunit secY 9e-67 20 1 323 A3CM55.1 75 421 sp|P0A5Z2|SECY_MYCTU Preprotein translocase subunit secY 9e-67 20 1 323 A3CM55.1 75 421 sp|P0A5Z3|SECY_MYCBO Preprotein translocase subunit secY 9e-67 21 1 302 A3CM55.1 73 394 sp|P43416|SECY_STRSC Preprotein translocase subunit secY 2e-66 17 1 302 A3CM55.1 171 478 sp|Q9XQU4|SECY_PEA Preprotein translocase subunit secY, 2e-66 23 1 307 A3CM55.1 76 399 sp|P0AGA5|SECY_SHIFL Preprotein translocase subunit secY 2e-66 23 1 307 A3CM55.1 76 399 sp|P0AGA2|SECY_ECOLI Preprotein translocase subunit secY 2e-66 23 1 307 A3CM55.1 76 399 sp|P0AGA3|SECY_ECOL6 Preprotein translocase subunit secY 2e-66 23 1 307 A3CM55.1 76 399 sp|P0AGA4|SECY_ECO57 Preprotein translocase subunit secY 8e-66 20 1 303 A3CM55.1 68 388 sp|Q05207|SECY_BACLD Preprotein translocase subunit secY 8e-66 17 1 302 A3CM55.1 195 502 sp|O63066|SECY_MAIZE Preprotein translocase subunit secY, 2e-65 19 1 306 A3CM55.1 68 392 sp|P16336|SECY_BACSU Preprotein translocase subunit secY 7e-65 22 1 300 A3CM55.1 68 385 sp|P38375|SECY_BACHD Preprotein translocase subunit secY 7e-65 18 1 303 A3CM55.1 193 501 sp|Q38885|SECY_ARATH Preprotein translocase subunit secY, 1e-64 21 1 301 A3CM55.1 83 394 sp|P0A4H1|SECY_SYNP6 Preprotein translocase subunit secY 1e-64 21 1 301 A3CM55.1 83 394 sp|P0A4H0|SECY_SYNE7 Preprotein translocase subunit secY 2e-64 17 1 303 A3CM55.1 198 506 sp|Q6ZG25|SECY_ORYSJ Preprotein translocase subunit secY, 8e-64 22 1 309 A3CM55.1 62 376 sp|P51297|SECY_PORPU Preprotein translocase subunit secY 1e-62 23 1 307 A3CM55.1 71 393 sp|O66491|SECY_AQUAE Preprotein translocase subunit secY OS=Aquifex 1e-62 19 1 325 A3CM55.1 70 407 sp|Q4UMQ9|SECY_RICFE Preprotein translocase subunit secY 3e-62 18 1 325 A3CM55.1 70 407 sp|Q68W98|SECY_RICTY Preprotein translocase subunit secY 4e-62 18 1 325 A3CM55.1 70 407 sp|Q92GY6|SECY_RICCN Preprotein translocase subunit secY 6e-62 18 1 325 A3CM55.1 70 407 sp|Q1RHP1|SECY_RICBR Preprotein translocase subunit secY 7e-62 22 1 303 A3CM55.1 68 370 sp|P38397|SECY_PYRSA Preprotein translocase subunit secY (Fragment) 9e-62 18 1 325 A3CM55.1 70 407 sp|Q9ZCS5|SECY_RICPR Preprotein translocase subunit secY 1e-61 21 1 303 A3CM55.1 73 405 sp|P28539|SECY_CHLTR Preprotein translocase subunit secY 1e-61 22 1 309 A3CM55.1 62 376 sp|Q1XDJ1|SECY_PORYE Preprotein translocase subunit secY 2e-60 19 1 303 A3CM55.1 68 378 sp|P28527|SECY_GUITH Preprotein translocase subunit secY 3e-60 20 1 307 A3CM55.1 77 400 sp|Q89A85|SECY_BUCBP Preprotein translocase subunit secY 6e-60 23 1 307 A3CM55.1 76 397 sp|P57571|SECY_BUCAI Preprotein translocase subunit secY 2e-58 23 1 307 A3CM55.1 76 399 sp|Q8K969|SECY_BUCAP Preprotein translocase subunit secY 9e-58 21 3 303 A3CM55.1 85 406 sp|Q59548|SECY_MYCPN Preprotein translocase subunit secY 2e-57 20 1 303 A3CM55.1 73 405 sp|Q9PJN1|SECY_CHLMU Preprotein translocase subunit secY 3e-57 19 1 303 A3CM55.1 73 394 sp|P33108|SECY_MICLU Preprotein translocase subunit secY 7e-57 25 3 303 A3CM55.1 82 401 sp|O52351|SECY_MYCGA Preprotein translocase subunit secY 2e-56 21 1 303 A3CM55.1 93 424 sp|P10250|SECY_MYCCT Preprotein translocase subunit secY 3e-56 22 3 302 A3CM55.1 83 403 sp|P47416|SECY_MYCGE Preprotein translocase subunit secY 9e-56 20 1 303 A3CM55.1 73 405 sp|Q9Z7S5|SECY_CHLPN Preprotein translocase subunit secY 6e-55 23 1 307 A3CM55.1 62 382 sp|O25879|SECY_HELPY Preprotein translocase subunit secY 7e-55 23 1 307 A3CM55.1 62 382 sp|Q9ZJS9|SECY_HELPJ Preprotein translocase subunit secY 6e-54 16 1 304 A3CM55.1 72 431 sp|O59442|SECY_PYRHO Preprotein translocase subunit secY 7e-54 21 1 265 A3CM55.1 76 356 sp|P49976|SECY_BUCAK Preprotein translocase subunit secY (Fragment) 8e-54 15 1 319 A3CM55.1 76 460 sp|Q870W0|SC61A_NEUCR Protein transport protein SEC61 subunit alpha 1e-53 15 1 304 A3CM55.1 72 431 sp|Q9V1V8|SECY_PYRAB Preprotein translocase subunit secY 1e-53 16 1 304 A3CM55.1 72 431 sp|Q8U019|SECY_PYRFU Preprotein translocase subunit secY 3e-53 13 1 304 A3CM55.1 75 441 sp|Q54XK2|SC61A_DICDI Protein transport protein Sec61 subunit alpha 5e-52 22 1 303 A3CM55.1 66 383 sp|P49461|SECY_ODOSI Preprotein translocase subunit secY 8e-52 18 1 303 A3CM55.1 72 381 sp|O51451|SECY_BORBU Preprotein translocase subunit secY 1e-51 15 1 321 A3CM55.1 75 462 sp|Q5NVM7|S61A2_PONAB Protein transport protein Sec61 subunit alpha 2e-51 15 1 304 A3CM55.1 76 442 sp|Q96TW8|SC61A_HANAN Protein transport protein SEC61 subunit alpha 2e-51 13 1 303 A3CM55.1 76 441 sp|P78979|SC61A_YARLI Protein transport protein SEC61 subunit alpha 3e-51 15 1 321 A3CM55.1 75 462 sp|Q9JLR1|S61A2_MOUSE Protein transport protein Sec61 subunit alpha 3e-51 15 1 321 A3CM55.1 75 462 sp|Q9H9S3|S61A2_HUMAN Protein transport protein Sec61 subunit alpha 3e-51 15 1 321 A3CM55.1 75 462 sp|Q2KHX4|S61A2_BOVIN Protein transport protein Sec61 subunit alpha 3e-51 13 1 321 A3CM55.1 75 462 sp|Q90ZM2|S61A1_DANRE Protein transport protein Sec61 subunit 3e-51 13 1 321 A3CM55.1 75 462 sp|Q8AY32|SC61A_GADOC Protein transport protein Sec61 subunit alpha 4e-51 13 1 321 A3CM55.1 75 462 sp|Q98SN8|S61A2_ONCMY Protein transport protein Sec61 subunit alpha 5e-51 14 1 321 A3CM55.1 75 462 sp|Q5EA68|S61A1_BOVIN Protein transport protein Sec61 subunit alpha 5e-51 14 1 321 A3CM55.1 75 462 sp|P61621|S61A1_RAT Protein transport protein Sec61 subunit alpha 5e-51 14 1 321 A3CM55.1 75 462 sp|Q5R5L5|S61A1_PONAB Protein transport protein Sec61 subunit alpha 5e-51 14 1 321 A3CM55.1 75 462 sp|P61620|S61A1_MOUSE Protein transport protein Sec61 subunit alpha 5e-51 14 1 321 A3CM55.1 75 462 sp|P61619|S61A1_HUMAN Protein transport protein Sec61 subunit alpha 6e-51 13 1 321 A3CM55.1 75 462 sp|Q7T278|SC61A_HARAN Protein transport protein Sec61 subunit alpha 6e-51 13 1 321 A3CM55.1 75 462 sp|Q7T277|SC61A_DISMA Protein transport protein Sec61 subunit alpha 7e-51 13 1 321 A3CM55.1 75 462 sp|Q8AY36|SC61A_PAGBO Protein transport protein Sec61 subunit alpha 7e-51 13 1 321 A3CM55.1 75 462 sp|Q8AY35|SC61A_NOTAN Protein transport protein Sec61 subunit alpha 8e-51 14 1 321 A3CM55.1 75 462 sp|Q8AY34|SC61A_HEMAM Protein transport protein Sec61 subunit alpha 8e-51 14 1 321 A3CM55.1 75 462 sp|Q90YL4|S61A2_DANRE Protein transport protein Sec61 subunit 9e-51 13 1 321 A3CM55.1 75 462 sp|Q8AY31|SC61A_BOVVA Protein transport protein Sec61 subunit alpha 1e-50 14 1 321 A3CM55.1 75 462 sp|P38377|S61A1_CANFA Protein transport protein Sec61 subunit alpha 1e-50 15 1 304 A3CM55.1 76 442 sp|Q9P8E3|SC61A_CANAL Protein transport protein SEC61 subunit alpha 2e-50 14 1 304 A3CM55.1 75 442 sp|Q6FRY3|SC61A_CANGA Protein transport protein SEC61 subunit alpha 2e-50 13 1 304 A3CM55.1 75 443 sp|Q752H7|SC61A_ASHGO Protein transport protein SEC61 subunit alpha 2e-50 20 1 310 A3CM55.1 109 441 sp|P25014|SECY_CYAPA Preprotein translocase subunit secY 3e-50 13 1 304 A3CM55.1 75 443 sp|Q6CPY9|SC61A_KLULA Protein transport protein SEC61 subunit alpha 4e-50 14 1 304 A3CM55.1 76 442 sp|Q6BN08|SC61A_DEBHA Protein transport protein SEC61 subunit alpha 4e-50 13 1 321 A3CM55.1 75 462 sp|Q8AY33|SC61A_BORSA Protein transport protein Sec61 subunit alpha 5e-50 13 1 321 A3CM55.1 75 462 sp|Q98SN9|S61A1_ONCMY Protein transport protein Sec61 subunit alpha 1e-48 18 1 303 A3CM55.1 62 368 sp|P46249|SECY_CYACA Preprotein translocase subunit secY 2e-48 14 1 304 A3CM55.1 76 443 sp|P32915|SC61A_YEAST Protein transport protein SEC61 4e-48 15 1 321 A3CM55.1 75 461 sp|Q25147|SC61A_HALRO Protein transport protein Sec61 subunit alpha 5e-48 15 1 298 A3CM55.1 73 413 sp|O26134|SECY_METTH Preprotein translocase subunit secY 5e-47 16 1 304 A3CM55.1 78 447 sp|P38379|SC61A_PYRSA Protein transport protein Sec61 subunit alpha 8e-46 19 1 303 A3CM55.1 62 364 sp|Q37143|SECY_ANTSP Preprotein translocase subunit secY 1e-45 14 1 304 A3CM55.1 69 399 sp|Q60175|SECY_METJA Preprotein translocase subunit secY 3e-44 19 1 320 A3CM55.1 66 396 sp|P28540|SECY_PAVLU Preprotein translocase subunit secY OS=Pavlova 5e-44 13 1 304 A3CM55.1 76 442 sp|P79088|SC61A_SCHPO Protein transport protein sec61 subunit alpha 6e-43 14 1 304 A3CM55.1 68 400 sp|P28541|SECY_METVA Preprotein translocase subunit secY 5e-42 13 1 304 A3CM55.1 73 417 sp|Q9YDD0|SECY_AERPE Preprotein translocase subunit secY 7e-42 11 1 304 A3CM55.1 73 452 sp|O28377|SECY_ARCFU Preprotein translocase subunit secY 3e-40 13 1 304 A3CM55.1 73 449 sp|P28542|SECY_HALMA Preprotein translocase subunit secY 4e-39 12 1 304 A3CM55.1 72 450 sp|Q9HPB1|SECY_HALSA Preprotein translocase subunit secY 2e-37 11 1 304 A3CM55.1 73 449 sp|Q977V3|SECY_HALVO Preprotein translocase subunit secY 2e-32 12 1 304 A3CM55.1 74 426 sp|P49978|SECY_SULAC Preprotein translocase subunit secY 9e-30 13 1 304 A3CM55.1 73 432 sp|Q9UX84|SECY_SULSO Preprotein translocase subunit secY 7e-29 15 1 304 A3CM55.1 78 448 sp|P38353|SSH1_YEAST Sec sixty-one protein homolog OS=Saccharomyces 1e-25 10 1 300 A3CM55.1 76 442 sp|O42965|YGMH_SCHPO Uncharacterized protein C19G7.17 5e-20 18 186 297 A3CM55.1 1 111 sp|P72179|SECY_PARDE Preprotein translocase subunit secY (Fragment) 1e-12 35 247 303 A3CM55.1 1 57 sp|P28620|SECY_BACST Preprotein translocase subunit secY (Fragment) 1.0 11 135 232 A3CM55.1 3061 3154 sp|P0C6V7|R1AB_BEV Replicase polyprotein 1ab OS=Berne virus GN=rep 1.1 11 135 232 A3CM55.1 3061 3154 sp|P0C6F3|R1A_BEV Replicase polyprotein 1a OS=Berne virus GN=1a PE=1 3.2 13 70 149 A3CM55.1 11 91 sp|Q49VR4|LTAS_STAS1 Glycerol phosphate lipoteichoic acid synthase 3.6 9 60 149 A3CM55.1 1 91 sp|Q5HR16|LTAS_STAEQ Glycerol phosphate lipoteichoic acid synthase 4.0 10 60 149 A3CM55.1 1 91 sp|Q8CQ10|LTAS_STAES Glycerol phosphate lipoteichoic acid synthase 4.4 8 42 155 A3CM55.1 142 270 sp|Q6P6T5|OCLN_RAT Occludin OS=Rattus norvegicus GN=Ocln PE=2 SV=1 5.7 13 44 146 A3CM55.1 332 436 sp|P94493|YNCC_BACSU Putative metabolite transport protein yncC 6.0 11 70 149 A3CM55.1 11 91 sp|Q7A1I3|LTAS_STAAW Glycerol phosphate lipoteichoic acid synthase 6.0 11 70 149 A3CM55.1 11 91 sp|Q6GBB1|LTAS_STAAS Glycerol phosphate lipoteichoic acid synthase 6.0 11 70 149 A3CM55.1 11 91 sp|Q6GIS3|LTAS_STAAR Glycerol phosphate lipoteichoic acid synthase 6.0 11 70 149 A3CM55.1 11 91 sp|Q7A6U1|LTAS_STAAN Glycerol phosphate lipoteichoic acid synthase 6.0 11 70 149 A3CM55.1 11 91 sp|Q99VQ4|LTAS_STAAM Glycerol phosphate lipoteichoic acid synthase 6.0 11 70 149 A3CM55.1 11 91 sp|Q5HHV4|LTAS_STAAC Glycerol phosphate lipoteichoic acid synthase 6.0 11 70 149 A3CM55.1 11 91 sp|Q2G093|LTAS_STAA8 Glycerol phosphate lipoteichoic acid synthase 6.0 11 70 149 A3CM55.1 11 91 sp|Q2FIS2|LTAS_STAA3 Glycerol phosphate lipoteichoic acid synthase 6.0 11 70 149 A3CM55.1 11 91 sp|Q2YSL2|LTAS_STAAB Glycerol phosphate lipoteichoic acid synthase 6.7 11 108 241 A3CM55.1 2926 3042 sp|P0C6V8|R1AB_BRV1 Replicase polyprotein 1ab OS=Breda virus 1 GN=rep 7.6 11 108 241 A3CM55.1 2926 3042 sp|P0C6F4|R1A_BRV1 Replicase polyprotein 1a OS=Breda virus 1 GN=1a hmmer-3.1b2/easel/demotic/regress/fasta-tbl.out0000664361611702660230000004264312473612605021077 0ustar wheelerteddy2e-70 100 1 181 sp|P55685|Y4WG_RHISN 1 181 sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=R 3.6 24 41 164 sp|P55685|Y4WG_RHISN 65 189 sp|Q7SY73|ABH6B_XENLA Monoacylglycerol lipase abhd6-B 2.8e-111 100 1 345 sp|Q1XGE2|HAC1_ASPOR 1 345 sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS 7e-84 78 13 344 sp|Q1XGE2|HAC1_ASPOR 18 348 sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS 1.3e-14 31 7 344 sp|Q1XGE2|HAC1_ASPOR 43 450 sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS 1.3e-06 32 63 270 sp|Q1XGE2|HAC1_ASPOR 16 216 sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS 4.5e-05 31 6 167 sp|Q1XGE2|HAC1_ASPOR 3 167 sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabid 0.0013 29 16 206 sp|Q1XGE2|HAC1_ASPOR 10 196 sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos ta 0.0015 32 4 152 sp|Q1XGE2|HAC1_ASPOR 210 360 sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive element-bi 0.0022 24 46 270 sp|Q1XGE2|HAC1_ASPOR 363 593 sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper tra 0.0026 36 60 154 sp|Q1XGE2|HAC1_ASPOR 66 157 sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanu 0.0062 25 4 290 sp|Q1XGE2|HAC1_ASPOR 214 499 sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element-bind 0.0079 26 4 232 sp|Q1XGE2|HAC1_ASPOR 215 445 sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive element-bi 0.01 26 4 232 sp|Q1XGE2|HAC1_ASPOR 215 445 sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive element-bi 0.004 26 41 332 sp|Q1XGE2|HAC1_ASPOR 727 1001 sp|A3LYI0|NST1_PICST Stress response protein NST1 OS=P 0.016 31 4 152 sp|Q1XGE2|HAC1_ASPOR 218 368 sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive element-bi 0.018 26 24 200 sp|Q1XGE2|HAC1_ASPOR 160 330 sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive element-bi 0.01 23 14 297 sp|Q1XGE2|HAC1_ASPOR 228 517 sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive element-bi 0.013 23 14 297 sp|Q1XGE2|HAC1_ASPOR 228 517 sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive element-bi 0.0021 24 18 297 sp|Q1XGE2|HAC1_ASPOR 234 518 sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive element-bi 0.0011 28 16 187 sp|Q1XGE2|HAC1_ASPOR 10 186 sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Homo s 0.031 25 9 222 sp|Q1XGE2|HAC1_ASPOR 76 290 sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus GN=F 0.056 35 73 143 sp|Q1XGE2|HAC1_ASPOR 68 138 sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=A 0.064 25 9 222 sp|Q1XGE2|HAC1_ASPOR 76 290 sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens GN=F 0.018 23 18 297 sp|Q1XGE2|HAC1_ASPOR 234 518 sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element-bind 0.0081 26 48 275 sp|Q1XGE2|HAC1_ASPOR 213 434 sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-bi 0.091 28 72 237 sp|Q1XGE2|HAC1_ASPOR 145 332 sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familiaris 0.11 28 18 160 sp|Q1XGE2|HAC1_ASPOR 212 349 sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcriptio 0.045 26 48 284 sp|Q1XGE2|HAC1_ASPOR 214 438 sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-bind 0.16 27 29 163 sp|Q1XGE2|HAC1_ASPOR 171 307 sp|Q90370|MAFB_COTJA Transcription factor MafB OS=Cotu 0.16 27 29 163 sp|Q1XGE2|HAC1_ASPOR 171 307 sp|Q90888|MAFB_CHICK Transcription factor MafB OS=Gall 0.1 28 9 237 sp|Q1XGE2|HAC1_ASPOR 55 297 sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scrofa G 0.073 27 48 258 sp|Q1XGE2|HAC1_ASPOR 214 432 sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-bi 0.22 31 66 160 sp|Q1XGE2|HAC1_ASPOR 258 351 sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcriptio 0.23 25 2 237 sp|Q1XGE2|HAC1_ASPOR 57 298 sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocricet 0.26 25 2 237 sp|Q1XGE2|HAC1_ASPOR 57 297 sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus muscul 0.16 26 48 236 sp|Q1XGE2|HAC1_ASPOR 218 404 sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-bi 0.27 29 54 199 sp|Q1XGE2|HAC1_ASPOR 192 329 sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive element-bi 0.27 28 80 198 sp|Q1XGE2|HAC1_ASPOR 195 312 sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF2 OS 0.28 26 26 168 sp|Q1XGE2|HAC1_ASPOR 277 424 sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcriptio 0.28 26 26 168 sp|Q1XGE2|HAC1_ASPOR 288 435 sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcriptio 0.3 29 54 199 sp|Q1XGE2|HAC1_ASPOR 192 329 sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive element-bi 0.37 28 14 163 sp|Q1XGE2|HAC1_ASPOR 174 319 sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS=Homo 0.37 25 2 237 sp|Q1XGE2|HAC1_ASPOR 57 297 sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein OS= 0.38 23 12 216 sp|Q1XGE2|HAC1_ASPOR 38 261 sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattus no 0.4 28 42 208 sp|Q1XGE2|HAC1_ASPOR 92 255 sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase 11A 0.075 27 3 236 sp|Q1XGE2|HAC1_ASPOR 429 680 sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kinase 0.41 26 8 199 sp|Q1XGE2|HAC1_ASPOR 138 322 sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive element-bi 0.42 24 4 222 sp|Q1XGE2|HAC1_ASPOR 39 253 sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Homo sa 0.45 27 26 143 sp|Q1XGE2|HAC1_ASPOR 277 392 sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcriptio 0.47 30 8 150 sp|Q1XGE2|HAC1_ASPOR 370 508 sp|P29747|CREBA_DROME Cyclic AMP response element-bind 0.47 28 14 163 sp|Q1XGE2|HAC1_ASPOR 174 319 sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS=Maca 0.41 27 51 190 sp|Q1XGE2|HAC1_ASPOR 23 183 sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Rattus n 0.53 27 14 163 sp|Q1XGE2|HAC1_ASPOR 174 319 sp|P54842|MAFB_RAT Transcription factor MafB OS=Rattus 0.54 24 4 216 sp|Q1XGE2|HAC1_ASPOR 39 260 sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus mus 0.55 33 16 119 sp|Q1XGE2|HAC1_ASPOR 188 291 sp|Q2VZV0|IF2_MAGSA Translation initiation factor IF-2 0.55 23 14 223 sp|Q1XGE2|HAC1_ASPOR 37 240 sp|Q0CEI3|KAPC_ASPTN Putative transcription factor kap 0.017 26 1 207 sp|Q1XGE2|HAC1_ASPOR 107 318 sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-bi 0.56 30 66 160 sp|Q1XGE2|HAC1_ASPOR 255 347 sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcription 0.6 27 14 163 sp|Q1XGE2|HAC1_ASPOR 174 319 sp|P54841|MAFB_MOUSE Transcription factor MafB OS=Mus 0.6 24 2 237 sp|Q1XGE2|HAC1_ASPOR 57 297 sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos taurus 0.62 20 66 223 sp|Q1XGE2|HAC1_ASPOR 83 237 sp|A1C9M5|KAPC_ASPCL Putative transcription factor kap 0.67 26 29 163 sp|Q1XGE2|HAC1_ASPOR 176 312 sp|Q504L8|MAFB_XENTR Transcription factor MafB OS=Xeno 0.7 34 83 167 sp|Q1XGE2|HAC1_ASPOR 201 281 sp|O57342|MAFA_COTJA Transcription factor MafA OS=Cotu 0.72 27 19 154 sp|Q1XGE2|HAC1_ASPOR 210 342 sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcriptio 0.75 33 60 146 sp|Q1XGE2|HAC1_ASPOR 170 252 sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-bind 0.68 27 8 237 sp|Q1XGE2|HAC1_ASPOR 54 297 sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus norve 0.69 28 71 172 sp|Q1XGE2|HAC1_ASPOR 17 125 sp|Q16520|BATF_HUMAN Basic leucine zipper transcriptio 0.59 27 51 190 sp|Q1XGE2|HAC1_ASPOR 23 183 sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mus mu 0.33 28 9 237 sp|Q1XGE2|HAC1_ASPOR 55 297 sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo sapie 0.93 27 52 168 sp|Q1XGE2|HAC1_ASPOR 194 315 sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive element-bi 0.14 22 43 227 sp|Q1XGE2|HAC1_ASPOR 675 868 sp|A4R2R1|NST1_MAGGR Stress response protein NST1 OS=M 0.2 29 18 146 sp|Q1XGE2|HAC1_ASPOR 119 256 sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-bi 0.68 26 9 237 sp|Q1XGE2|HAC1_ASPOR 55 298 sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis catu 1.1 28 69 145 sp|Q1XGE2|HAC1_ASPOR 21 97 sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcripti 1.2 27 52 168 sp|Q1XGE2|HAC1_ASPOR 345 466 sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive element-bi 1.2 30 31 149 sp|Q1XGE2|HAC1_ASPOR 176 296 sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Arabido 0.48 22 16 223 sp|Q1XGE2|HAC1_ASPOR 44 236 sp|A2R346|KAPC_ASPNC Putative transcription factor kap 1.3 33 85 167 sp|Q1XGE2|HAC1_ASPOR 201 281 sp|O42290|MAFA_CHICK Transcription factor MafA OS=Gall 1.3 30 63 185 sp|Q1XGE2|HAC1_ASPOR 159 282 sp|O43889|CREB3_HUMAN Cyclic AMP-responsive element-bi 1.4 24 7 183 sp|Q1XGE2|HAC1_ASPOR 282 455 sp|O60841|IF2P_HUMAN Eukaryotic translation initiation 1.1 30 48 230 sp|Q1XGE2|HAC1_ASPOR 735 930 sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initiatio 1.7 33 83 145 sp|Q1XGE2|HAC1_ASPOR 28 90 sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcripti 1.5 25 25 199 sp|Q1XGE2|HAC1_ASPOR 161 322 sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive element-bi 1.7 26 29 163 sp|Q1XGE2|HAC1_ASPOR 171 309 sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS=Xeno 1.1 27 18 222 sp|Q1XGE2|HAC1_ASPOR 378 571 sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BAT2 O 1.7 24 17 241 sp|Q1XGE2|HAC1_ASPOR 260 503 sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcripti 1.8 26 10 157 sp|Q1XGE2|HAC1_ASPOR 315 458 sp|Q54Y73|BZPD_DICDI Probable basic-leucine zipper tra 1.8 24 68 271 sp|Q1XGE2|HAC1_ASPOR 108 311 sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gallus 1.4 23 2 291 sp|Q1XGE2|HAC1_ASPOR 57 353 sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodopus r 1.8 28 71 160 sp|Q1XGE2|HAC1_ASPOR 17 103 sp|O35284|BATF_MOUSE Basic leucine zipper transcriptio 1.9 25 2 148 sp|Q1XGE2|HAC1_ASPOR 142 290 sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Homo sa 1.9 25 2 148 sp|Q1XGE2|HAC1_ASPOR 142 290 sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus mus 0.51 29 39 210 sp|Q1XGE2|HAC1_ASPOR 79 238 sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS=Xen 2.1 25 8 181 sp|Q1XGE2|HAC1_ASPOR 14 192 sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein OS=Dr 1.7 23 16 241 sp|Q1XGE2|HAC1_ASPOR 259 500 sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcripti 0.23 25 74 223 sp|Q1XGE2|HAC1_ASPOR 4 163 sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS=Schi 2.3 25 41 172 sp|Q1XGE2|HAC1_ASPOR 629 763 sp|O13024|INCEA_XENLA Inner centromere protein A OS=Xe 2.1 22 8 210 sp|Q1XGE2|HAC1_ASPOR 234 432 sp|A0JMT0|CA1AB_XENLA Chromatin assembly factor 1 subu 2.3 23 7 183 sp|Q1XGE2|HAC1_ASPOR 282 455 sp|Q5RDE1|IF2P_PONAB Eukaryotic translation initiation 2.3 30 83 167 sp|Q1XGE2|HAC1_ASPOR 203 284 sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS=Xeno 2.4 29 16 148 sp|Q1XGE2|HAC1_ASPOR 163 290 sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattus no 2.4 18 22 170 sp|Q1XGE2|HAC1_ASPOR 171 321 sp|Q54NF3|Y6434_DICDI Uncharacterized protein DDB_G028 2.5 27 15 143 sp|Q1XGE2|HAC1_ASPOR 278 412 sp|P15336|ATF2_HUMAN Cyclic AMP-dependent transcriptio 2.5 21 16 275 sp|Q1XGE2|HAC1_ASPOR 149 410 sp|Q553B1|DDX46_DICDI ATP-dependent RNA helicase ddx46 2.8 27 18 228 sp|Q1XGE2|HAC1_ASPOR 380 575 sp|P48634|BAT2_HUMAN Large proline-rich protein BAT2 O 2.8 25 18 251 sp|Q1XGE2|HAC1_ASPOR 380 589 sp|Q5TM26|BAT2_MACMU Large proline-rich protein BAT2 O 2.9 23 24 294 sp|Q1XGE2|HAC1_ASPOR 48 314 sp|A3BYC1|HOX25_ORYSJ Homeobox-leucine zipper protein 3.1 27 15 143 sp|Q1XGE2|HAC1_ASPOR 260 394 sp|P16951|ATF2_MOUSE Cyclic AMP-dependent transcriptio 3.1 19 5 221 sp|Q1XGE2|HAC1_ASPOR 119 331 sp|Q96RN5|MED15_HUMAN Mediator of RNA polymerase II tr 1.4 24 16 223 sp|Q1XGE2|HAC1_ASPOR 44 237 sp|Q2UNX4|KAPC_ASPOR Putative transcription factor kap 3.5 24 19 214 sp|Q1XGE2|HAC1_ASPOR 838 1039 sp|Q80U35|ARHGH_MOUSE Rho guanine nucleotide exchange 1.3 26 3 236 sp|Q1XGE2|HAC1_ASPOR 429 680 sp|P0C865|MK07_RAT Mitogen-activated protein kinase 7 3.5 27 16 163 sp|Q1XGE2|HAC1_ASPOR 9 155 sp|P97875|JDP2_MOUSE Jun dimerization protein 2 OS=Mus 3.5 27 16 163 sp|Q1XGE2|HAC1_ASPOR 9 155 sp|Q78E65|JDP2_RAT Jun dimerization protein 2 OS=Rattu 0.59 25 20 221 sp|Q1XGE2|HAC1_ASPOR 105 301 sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive element-bi 0.53 26 44 232 sp|Q1XGE2|HAC1_ASPOR 72 265 sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus mus 3.7 24 4 149 sp|Q1XGE2|HAC1_ASPOR 527 669 sp|A2AJI0|MA7D1_MOUSE MAP7 domain-containing protein 1 2.3 23 36 229 sp|Q1XGE2|HAC1_ASPOR 263 449 sp|Q00312|RBF1_CANAL Transcription factor RBF1 OS=Cand 3.7 26 18 229 sp|Q1XGE2|HAC1_ASPOR 220 425 sp|O35413|SRBS2_RAT Sorbin and SH3 domain-containing p 3.9 30 83 145 sp|Q1XGE2|HAC1_ASPOR 28 90 sp|P97876|BATF3_RAT Basic leucine zipper transcription 2.4 25 13 143 sp|Q1XGE2|HAC1_ASPOR 275 394 sp|O93602|ATF2_CHICK Cyclic AMP-dependent transcriptio 1.2 26 14 232 sp|Q1XGE2|HAC1_ASPOR 662 845 sp|Q5F489|TAF3_CHICK Transcription initiation factor T 4.3 28 48 194 sp|Q1XGE2|HAC1_ASPOR 477 629 sp|Q6CBW0|NST1_YARLI Stress response protein NST1 OS=Y 4.3 27 5 169 sp|Q1XGE2|HAC1_ASPOR 749 921 sp|Q9CXK9|RBM33_MOUSE RNA-binding protein 33 OS=Mus mu 4.4 27 80 175 sp|Q1XGE2|HAC1_ASPOR 546 644 sp|Q554P0|BZPJ_DICDI Probable basic-leucine zipper tra 4.4 27 18 154 sp|Q1XGE2|HAC1_ASPOR 283 415 sp|Q55EQ3|Y9086_DICDI Uncharacterized abhydrolase doma 4.7 26 41 173 sp|Q1XGE2|HAC1_ASPOR 723 857 sp|O75037|KI21B_HUMAN Kinesin-like protein KIF21B OS=H 4.8 22 26 217 sp|Q1XGE2|HAC1_ASPOR 1 186 sp|O14273|YET4_SCHPO Meiotically up-regulated protein 4.8 23 28 297 sp|Q1XGE2|HAC1_ASPOR 13 259 sp|P19880|YAP1_YEAST AP-1-like transcription factor YA 5.1 22 34 268 sp|Q1XGE2|HAC1_ASPOR 455 686 sp|Q6IPM2|IQCE_HUMAN IQ domain-containing protein E OS 5.3 31 83 175 sp|Q1XGE2|HAC1_ASPOR 243 326 sp|Q98UK4|MAF_DANRE Transcription factor Maf OS=Danio 5.3 17 6 186 sp|Q1XGE2|HAC1_ASPOR 661 844 sp|Q556Q3|IRLF_DICDI Probable serine/threonine-protein 5.4 39 80 142 sp|Q1XGE2|HAC1_ASPOR 181 242 sp|P14233|TGA1B_TOBAC TGACG-sequence-specific DNA-bind 5.4 35 73 153 sp|Q1XGE2|HAC1_ASPOR 644 724 sp|Q8CH25|SLTM_MOUSE SAFB-like transcription modulator 5.4 29 4 149 sp|Q1XGE2|HAC1_ASPOR 135 280 sp|O81025|P2A03_ARATH Putative protein PHLOEM PROTEIN 5.4 24 91 212 sp|Q1XGE2|HAC1_ASPOR 43 161 sp|P20226|TBP_HUMAN TATA-box-binding protein OS=Homo s 5.5 23 38 257 sp|Q1XGE2|HAC1_ASPOR 1078 1294 sp|Q4WG58|PAN1_ASPFU Actin cytoskeleton-regulatory com 5.5 23 38 257 sp|Q1XGE2|HAC1_ASPOR 1078 1294 sp|B0YC95|PAN1_ASPFC Actin cytoskeleton-regulatory com 5.6 26 41 143 sp|Q1XGE2|HAC1_ASPOR 288 394 sp|Q00969|ATF2_RAT Cyclic AMP-dependent transcription 2.2 31 35 142 sp|Q1XGE2|HAC1_ASPOR 111 219 sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Homo s 1.5 24 18 229 sp|Q1XGE2|HAC1_ASPOR 378 575 sp|Q6MG48|BAT2_RAT Large proline-rich protein BAT2 OS= 0.42 22 17 274 sp|Q1XGE2|HAC1_ASPOR 49 268 sp|P0C5H8|KAPC_EMENI Putative transcription factor kap 2 31 14 145 sp|Q1XGE2|HAC1_ASPOR 291 435 sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5-like 0.99 24 9 250 sp|Q1XGE2|HAC1_ASPOR 628 858 sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide exchange 6.1 35 73 153 sp|Q1XGE2|HAC1_ASPOR 645 725 sp|Q9NWH9|SLTM_HUMAN SAFB-like transcription modulator 6.3 25 70 317 sp|Q1XGE2|HAC1_ASPOR 217 472 sp|O60308|K0562_HUMAN Uncharacterized protein KIAA0562 6.4 24 53 294 sp|Q1XGE2|HAC1_ASPOR 21 254 sp|A2Z0Q0|HOX25_ORYSI Homeobox-leucine zipper protein 5.7 31 48 180 sp|Q1XGE2|HAC1_ASPOR 825 957 sp|Q6Y7W6|PERQ2_HUMAN PERQ amino acid-rich with GYF do 4.7 23 66 216 sp|Q1XGE2|HAC1_ASPOR 75 214 sp|Q4WA21|KAPC_ASPFU Putative transcription factor kap 6.9 25 41 169 sp|Q1XGE2|HAC1_ASPOR 724 856 sp|Q9QXL1|KI21B_MOUSE Kinesin-like protein KIF21B OS=M 7.2 27 41 208 sp|Q1XGE2|HAC1_ASPOR 96 272 sp|P21127|CD11B_HUMAN Cell division protein kinase 11B 7.2 30 83 163 sp|Q1XGE2|HAC1_ASPOR 276 355 sp|Q789F3|MAF_CHICK Transcription factor Maf OS=Gallus 7.3 25 39 269 sp|Q1XGE2|HAC1_ASPOR 542 766 sp|Q6A000|K0753_MOUSE Uncharacterized protein KIAA0753 7.4 30 83 163 sp|Q1XGE2|HAC1_ASPOR 276 355 sp|P23091|MAF_AVIS4 Transforming protein Maf OS=Avian 1.1 25 29 186 sp|Q1XGE2|HAC1_ASPOR 294 463 sp|Q5RCJ1|CIP4_PONAB Cdc42-interacting protein 4 OS=Po 7.5 22 2 291 sp|Q1XGE2|HAC1_ASPOR 12 294 sp|P23050|FOS_AVINK p55-v-Fos-transforming protein OS= 2.3 26 5 245 sp|Q1XGE2|HAC1_ASPOR 610 858 sp|Q80YR5|SAFB2_MOUSE Scaffold attachment factor B2 OS 7.5 25 80 267 sp|Q1XGE2|HAC1_ASPOR 851 1029 sp|Q6ZSZ5|ARHGI_HUMAN Rho guanine nucleotide exchange 6.8 28 8 155 sp|Q1XGE2|HAC1_ASPOR 155 277 sp|O70191|ATF5_MOUSE Cyclic AMP-dependent transcriptio 3 28 6 186 sp|Q1XGE2|HAC1_ASPOR 276 466 sp|A6NC98|CC88B_HUMAN Coiled-coil domain-containing pr 8 23 36 151 sp|Q1XGE2|HAC1_ASPOR 294 411 sp|B0WYY2|MOEH_CULQU Moesin/ezrin/radixin homolog 1 OS 8.3 22 2 291 sp|Q1XGE2|HAC1_ASPOR 57 339 sp|P11939|FOS_CHICK Proto-oncogene c-Fos OS=Gallus gal 8.4 26 112 243 sp|Q1XGE2|HAC1_ASPOR 13 152 sp|Q9XUS2|MED29_CAEEL Mediator of RNA polymerase II tr 5.3 23 66 223 sp|Q1XGE2|HAC1_ASPOR 75 231 sp|A1D9Z7|KAPC_NEOFI Putative transcription factor kap 4.2 23 2 222 sp|Q1XGE2|HAC1_ASPOR 33 242 sp|P29176|FOSX_MSVFR Transforming protein v-Fos/v-Fox 8.7 23 30 227 sp|Q1XGE2|HAC1_ASPOR 29 229 sp|Q09458|YQ37_CAEEL Uncharacterized protein C09F5.7 O 9 29 59 150 sp|Q1XGE2|HAC1_ASPOR 223 319 sp|P23922|HBP1A_WHEAT Transcription factor HBP-1a OS=T 6.3 26 23 143 sp|Q1XGE2|HAC1_ASPOR 572 699 sp|Q5R452|SAFB1_PONAB Scaffold attachment factor B1 OS 5.6 26 19 163 sp|Q1XGE2|HAC1_ASPOR 119 245 sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding protein d 9.2 25 9 254 sp|Q1XGE2|HAC1_ASPOR 105 350 sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mus mu 9.4 30 83 163 sp|Q1XGE2|HAC1_ASPOR 287 366 sp|P54843|MAF_MOUSE Transcription factor Maf OS=Mus mu 9.4 25 19 163 sp|Q1XGE2|HAC1_ASPOR 131 258 sp|P49716|CEBPD_HUMAN CCAAT/enhancer-binding protein d 1.4 22 29 272 sp|Q1XGE2|HAC1_ASPOR 294 542 sp|Q15642|CIP4_HUMAN Cdc42-interacting protein 4 OS=Ho 9.4 32 80 146 sp|Q1XGE2|HAC1_ASPOR 274 340 sp|Q54RZ9|BZPG_DICDI Probable basic-leucine zipper tra 5.2 25 48 270 sp|Q1XGE2|HAC1_ASPOR 936 1166 sp|Q5AXH3|TOF1_EMENI Topoisomerase 1-associated factor 9.6 31 73 153 sp|Q1XGE2|HAC1_ASPOR 607 689 sp|Q498L2|SLTM_XENLA SAFB-like transcription modulator 8.5 20 19 227 sp|Q1XGE2|HAC1_ASPOR 858 1076 sp|P0CB49|YLPM1_RAT YLP motif-containing protein 1 OS= 9.7 36 77 131 sp|Q1XGE2|HAC1_ASPOR 38 91 sp|Q39140|TGA6_ARATH Transcription factor TGA6 OS=Arab 10 24 41 154 sp|Q1XGE2|HAC1_ASPOR 277 386 sp|Q8N9W4|GG6L2_HUMAN Golgin subfamily A member 6-like hmmer-3.1b2/easel/demotic/regress/h2-tbl.out0000664361611702660230000003741012473612605020306 0ustar wheelerteddy3e-47 0 1 123 Orn_DAP_Arg_deC 285 391 sp|O29458|DCDA_ARCFU Diaminopimelate decarboxylase O 1.2e-46 0 1 123 Orn_DAP_Arg_deC 307 426 sp|Q9UQW9|DCOR_SCHPO Ornithine decarboxylase OS=Schi 8.4e-44 0 1 123 Orn_DAP_Arg_deC 292 398 sp|O27390|DCDA_METTH Diaminopimelate decarboxylase O 2.3e-43 0 1 123 Orn_DAP_Arg_deC 284 405 sp|Q9I8S4|DCOR2_XENLA Ornithine decarboxylase 2 OS=Xe 2.5e-43 0 1 123 Orn_DAP_Arg_deC 285 408 sp|P09057|DCOR_RAT Ornithine decarboxylase OS=Ratt 3.8e-43 0 1 123 Orn_DAP_Arg_deC 282 402 sp|P14019|DCOR_CRIGR Ornithine decarboxylase OS=Cric 3.9e-43 0 1 123 Orn_DAP_Arg_deC 285 408 sp|P00860|DCOR_MOUSE Ornithine decarboxylase OS=Mus 3.9e-43 0 1 123 Orn_DAP_Arg_deC 285 408 sp|P27119|DCOR_MUSPA Ornithine decarboxylase OS=Mus 8e-43 0 1 123 Orn_DAP_Arg_deC 275 398 sp|P27118|DCOR_CHICK Ornithine decarboxylase (Fragme 2.8e-42 0 1 123 Orn_DAP_Arg_deC 285 409 sp|P27120|DCOR1_XENLA Ornithine decarboxylase 1 OS=Xe 3e-42 0 1 123 Orn_DAP_Arg_deC 285 408 sp|P11926|DCOR_HUMAN Ornithine decarboxylase OS=Homo 2.1e-41 0 1 123 Orn_DAP_Arg_deC 285 408 sp|P27117|DCOR_BOVIN Ornithine decarboxylase OS=Bos 1.6e-40 0 1 123 Orn_DAP_Arg_deC 283 406 sp|P07805|DCOR_TRYBB Ornithine decarboxylase OS=Tryp 2.6e-40 0 1 123 Orn_DAP_Arg_deC 257 362 sp|Q9X1K5|DCDA_THEMA Diaminopimelate decarboxylase O 3.7e-39 0 1 123 Orn_DAP_Arg_deC 294 416 sp|P49725|DCOR_PANRE Ornithine decarboxylase OS=Pana 6.6e-39 0 1 123 Orn_DAP_Arg_deC 308 424 sp|O22616|DCOR_SOLLC Ornithine decarboxylase OS=Sola 7.3e-39 0 1 123 Orn_DAP_Arg_deC 326 471 sp|P27121|DCOR_NEUCR Ornithine decarboxylase OS=Neur 8.2e-39 0 1 123 Orn_DAP_Arg_deC 308 424 sp|P50134|DCOR_DATST Ornithine decarboxylase OS=Datu 4e-38 0 1 123 Orn_DAP_Arg_deC 329 460 sp|P08432|DCOR_YEAST Ornithine decarboxylase OS=Sacc 9.1e-38 0 1 123 Orn_DAP_Arg_deC 346 558 sp|Q8A2B1|SPEA_BACTN Biosynthetic arginine decarboxy 1.9e-37 0 1 123 Orn_DAP_Arg_deC 354 567 sp|Q9HUX1|SPEA_PSEAE Biosynthetic arginine decarboxy 2e-37 0 1 123 Orn_DAP_Arg_deC 343 556 sp|Q7NU27|SPEA_CHRVO Biosynthetic arginine decarboxy 2.5e-37 0 1 123 Orn_DAP_Arg_deC 309 415 sp|O69203|DCDA_ACTPA Diaminopimelate decarboxylase O 2.6e-37 0 1 123 Orn_DAP_Arg_deC 312 428 sp|Q8S3N2|DCOR_CAPAN Ornithine decarboxylase OS=Caps 3.1e-37 0 1 123 Orn_DAP_Arg_deC 279 397 sp|P00861|DCDA_ECOLI Diaminopimelate decarboxylase O 3.1e-37 0 1 123 Orn_DAP_Arg_deC 346 557 sp|Q7NE10|SPEA_GLOVI Biosynthetic arginine decarboxy 3.8e-37 0 1 123 Orn_DAP_Arg_deC 305 410 sp|Q58497|DCDA_METJA Diaminopimelate decarboxylase O 5.4e-37 0 1 123 Orn_DAP_Arg_deC 346 558 sp|Q5LIQ3|SPEA_BACFN Biosynthetic arginine decarboxy 5.4e-37 0 1 123 Orn_DAP_Arg_deC 346 558 sp|Q64ZT8|SPEA_BACFR Biosynthetic arginine decarboxy 1.3e-36 0 1 123 Orn_DAP_Arg_deC 354 567 sp|Q87VU3|SPEA_PSESM Biosynthetic arginine decarboxy 2.2e-36 0 1 123 Orn_DAP_Arg_deC 276 391 sp|P40807|DCOR1_DROME Ornithine decarboxylase 1 OS=Dr 2.3e-36 0 1 123 Orn_DAP_Arg_deC 343 555 sp|B0U1H6|SPEA_XYLFM Biosynthetic arginine decarboxy 2.3e-36 0 1 123 Orn_DAP_Arg_deC 343 555 sp|Q9PH02|SPEA_XYLFA Biosynthetic arginine decarboxy 4.1e-36 0 1 123 Orn_DAP_Arg_deC 285 390 sp|O05321|DCDA_PSEFL Diaminopimelate decarboxylase O 4.7e-36 0 1 123 Orn_DAP_Arg_deC 343 555 sp|B2I6M1|SPEA_XYLF2 Biosynthetic arginine decarboxy 4.7e-36 0 1 123 Orn_DAP_Arg_deC 343 555 sp|Q87F25|SPEA_XYLFT Biosynthetic arginine decarboxy 6.1e-36 0 1 123 Orn_DAP_Arg_deC 353 564 sp|Q8DHY6|SPEA_THEEB Biosynthetic arginine decarboxy 6.8e-36 0 1 123 Orn_DAP_Arg_deC 290 396 sp|O67262|DCDA_AQUAE Diaminopimelate decarboxylase O 1.3e-35 0 1 123 Orn_DAP_Arg_deC 354 567 sp|Q88QC7|SPEA_PSEPK Biosynthetic arginine decarboxy 4.2e-35 0 1 123 Orn_DAP_Arg_deC 282 406 sp|O14977|AZIN1_HUMAN Antizyme inhibitor 1 OS=Homo sa 4.2e-35 0 1 123 Orn_DAP_Arg_deC 282 406 sp|Q5R7K3|AZIN1_PONAB Antizyme inhibitor 1 OS=Pongo a 5.1e-35 0 1 123 Orn_DAP_Arg_deC 282 406 sp|O35484|AZIN1_MOUSE Antizyme inhibitor 1 OS=Mus mus 5.2e-35 0 1 123 Orn_DAP_Arg_deC 336 449 sp|Q50140|DCDA_MYCLE Diaminopimelate decarboxylase O 5.5e-35 0 1 123 Orn_DAP_Arg_deC 346 558 sp|A6L012|SPEA_BACV8 Biosynthetic arginine decarboxy 6.8e-35 0 1 123 Orn_DAP_Arg_deC 284 389 sp|P19572|DCDA_PSEAE Diaminopimelate decarboxylase O 7.9e-35 0 1 123 Orn_DAP_Arg_deC 395 606 sp|Q8YRP3|SPEA_ANASP Biosynthetic arginine decarboxy 1.2e-34 0 1 123 Orn_DAP_Arg_deC 301 409 sp|P23630|DCDA_BACSU Diaminopimelate decarboxylase O 2.2e-34 0 1 123 Orn_DAP_Arg_deC 286 403 sp|Q9ZBH5|DCDA_STRCO Diaminopimelate decarboxylase O 2.4e-34 0 1 123 Orn_DAP_Arg_deC 275 393 sp|Q8K9C4|DCDA_BUCAP Diaminopimelate decarboxylase O 2.7e-34 0 1 123 Orn_DAP_Arg_deC 345 558 sp|Q0ACK8|SPEA_ALHEH Biosynthetic arginine decarboxy 6.8e-34 0 1 123 Orn_DAP_Arg_deC 351 459 sp|Q949X7|DCDA1_ARATH Diaminopimelate decarboxylase 1 8.1e-34 0 1 123 Orn_DAP_Arg_deC 356 464 sp|Q94A94|DCDA2_ARATH Diaminopimelate decarboxylase 2 9.9e-34 0 1 123 Orn_DAP_Arg_deC 311 424 sp|P0A5M5|DCDA_MYCBO Diaminopimelate decarboxylase O 9.9e-34 0 1 123 Orn_DAP_Arg_deC 311 424 sp|P0A5M4|DCDA_MYCTU Diaminopimelate decarboxylase O 1.7e-33 0 1 123 Orn_DAP_Arg_deC 286 407 sp|P41931|DCOR_CAEEL Ornithine decarboxylase OS=Caen 1.9e-33 0 1 123 Orn_DAP_Arg_deC 266 371 sp|O50657|DCLO_SELRU Lysine/ornithine decarboxylase 2.4e-33 0 1 123 Orn_DAP_Arg_deC 286 391 sp|Q9KVL7|DCDA_VIBCH Diaminopimelate decarboxylase O 3.1e-33 0 1 123 Orn_DAP_Arg_deC 356 463 sp|Q6ZG77|DCDA_ORYSJ Probable diaminopimelate decarb 3.6e-33 0 1 123 Orn_DAP_Arg_deC 332 440 sp|Q55484|DCDA_SYNY3 Diaminopimelate decarboxylase O 8.1e-33 0 1 123 Orn_DAP_Arg_deC 276 381 sp|Q9JXM2|DCDA_NEIMB Diaminopimelate decarboxylase O 1e-32 0 1 123 Orn_DAP_Arg_deC 343 555 sp|Q8P448|SPEA_XANCP Biosynthetic arginine decarboxy 1.2e-32 0 1 123 Orn_DAP_Arg_deC 328 450 sp|Q54UF3|DCOR_DICDI Probable ornithine decarboxylas 1.3e-32 0 1 123 Orn_DAP_Arg_deC 289 394 sp|Q9Z661|DCDA_ZYMMO Diaminopimelate decarboxylase O 2.6e-32 0 1 123 Orn_DAP_Arg_deC 276 381 sp|Q9JWA6|DCDA_NEIMA Diaminopimelate decarboxylase O 3.6e-32 0 1 123 Orn_DAP_Arg_deC 276 390 sp|P40808|DCOR2_DROME Ornithine decarboxylase 2 OS=Dr 5.1e-32 0 1 123 Orn_DAP_Arg_deC 343 555 sp|Q8PFQ5|SPEA_XANAC Biosynthetic arginine decarboxy 9e-32 0 1 123 Orn_DAP_Arg_deC 270 377 sp|P56129|DCDA_HELPY Diaminopimelate decarboxylase O 1.4e-31 0 1 123 Orn_DAP_Arg_deC 275 393 sp|Q89AC6|DCDA_BUCBP Diaminopimelate decarboxylase O 1.4e-31 0 1 123 Orn_DAP_Arg_deC 324 468 sp|P78599|DCOR_CANAL Ornithine decarboxylase OS=Cand 1.8e-31 0 1 123 Orn_DAP_Arg_deC 355 571 sp|Q8DA54|SPEA_VIBVU Biosynthetic arginine decarboxy 1.8e-31 0 1 123 Orn_DAP_Arg_deC 354 570 sp|Q7MK24|SPEA_VIBVY Biosynthetic arginine decarboxy 1.8e-31 0 1 123 Orn_DAP_Arg_deC 350 566 sp|A4Y5Y9|SPEA_SHEPC Biosynthetic arginine decarboxy 1.8e-31 0 1 123 Orn_DAP_Arg_deC 350 566 sp|A1RKK8|SPEA_SHESW Biosynthetic arginine decarboxy 2e-31 0 1 123 Orn_DAP_Arg_deC 275 393 sp|P57513|DCDA_BUCAI Diaminopimelate decarboxylase O 2.1e-31 0 1 123 Orn_DAP_Arg_deC 253 357 sp|Q9RTK2|DCDA_DEIRA Diaminopimelate decarboxylase O 2.2e-31 0 1 123 Orn_DAP_Arg_deC 350 566 sp|B8CR70|SPEA_SHEPW Biosynthetic arginine decarboxy 3.2e-31 0 1 123 Orn_DAP_Arg_deC 350 566 sp|A3QDD8|SPEA_SHELP Biosynthetic arginine decarboxy 4.1e-31 0 1 123 Orn_DAP_Arg_deC 350 566 sp|B8EAI2|SPEA_SHEB2 Biosynthetic arginine decarboxy 4.1e-31 0 1 123 Orn_DAP_Arg_deC 350 566 sp|A3D3G2|SPEA_SHEB5 Biosynthetic arginine decarboxy 4.1e-31 0 1 123 Orn_DAP_Arg_deC 350 566 sp|A6WM65|SPEA_SHEB8 Biosynthetic arginine decarboxy 4.1e-31 0 1 123 Orn_DAP_Arg_deC 350 566 sp|A9KY70|SPEA_SHEB9 Biosynthetic arginine decarboxy 4.5e-31 0 1 123 Orn_DAP_Arg_deC 509 682 sp|P27116|DCOR_LEIDO Ornithine decarboxylase OS=Leis 6.6e-31 0 1 123 Orn_DAP_Arg_deC 350 566 sp|Q083L6|SPEA_SHEFN Biosynthetic arginine decarboxy 7e-31 0 1 123 Orn_DAP_Arg_deC 350 566 sp|Q8EFU5|SPEA_SHEON Biosynthetic arginine decarboxy 1e-30 0 1 123 Orn_DAP_Arg_deC 350 566 sp|B1KRD4|SPEA_SHEWM Biosynthetic arginine decarboxy 1.1e-30 0 1 123 Orn_DAP_Arg_deC 355 574 sp|Q7V3M9|SPEA_PROMP Biosynthetic arginine decarboxy 2.2e-30 0 1 123 Orn_DAP_Arg_deC 350 566 sp|A8FWJ3|SPEA_SHESH Biosynthetic arginine decarboxy 2.5e-30 0 1 123 Orn_DAP_Arg_deC 350 566 sp|Q0HJY2|SPEA_SHESM Biosynthetic arginine decarboxy 2.5e-30 0 1 123 Orn_DAP_Arg_deC 350 566 sp|Q0HW78|SPEA_SHESR Biosynthetic arginine decarboxy 2.7e-30 0 1 123 Orn_DAP_Arg_deC 282 406 sp|Q63764|AZIN1_RAT Antizyme inhibitor 1 OS=Rattus 2.9e-30 0 1 123 Orn_DAP_Arg_deC 270 377 sp|Q9ZME5|DCDA_HELPJ Diaminopimelate decarboxylase O 3.1e-30 0 1 123 Orn_DAP_Arg_deC 350 566 sp|A0KVN8|SPEA_SHESA Biosynthetic arginine decarboxy 3.1e-30 0 1 123 Orn_DAP_Arg_deC 372 588 sp|Q8ZHG8|SPEA_YERPE Biosynthetic arginine decarboxy 3.5e-30 0 1 123 Orn_DAP_Arg_deC 345 561 sp|B5XUB1|SPEA_KLEP3 Biosynthetic arginine decarboxy 3.5e-30 0 1 123 Orn_DAP_Arg_deC 350 566 sp|Q12LW6|SPEA_SHEDO Biosynthetic arginine decarboxy 3.6e-30 0 1 123 Orn_DAP_Arg_deC 355 574 sp|A2BNH3|SPEA_PROMS Biosynthetic arginine decarboxy 3.8e-30 0 1 123 Orn_DAP_Arg_deC 354 570 sp|Q87JS8|SPEA_VIBPA Biosynthetic arginine decarboxy 3.8e-30 0 1 123 Orn_DAP_Arg_deC 350 566 sp|A8H5G3|SPEA_SHEPA Biosynthetic arginine decarboxy 4.1e-30 0 1 123 Orn_DAP_Arg_deC 355 574 sp|A3PA96|SPEA_PROM0 Biosynthetic arginine decarboxy 4.6e-30 0 1 123 Orn_DAP_Arg_deC 301 409 sp|P41023|DCDA_BACMT Diaminopimelate decarboxylase O 4.8e-30 0 1 123 Orn_DAP_Arg_deC 350 566 sp|B0TQX3|SPEA_SHEHH Biosynthetic arginine decarboxy 4.8e-30 0 1 123 Orn_DAP_Arg_deC 355 574 sp|Q31DD8|SPEA_PROM9 Biosynthetic arginine decarboxy 4.9e-30 0 1 123 Orn_DAP_Arg_deC 491 605 sp|Q96412|SPE1_DIACA Arginine decarboxylase OS=Diant 5.9e-30 0 1 123 Orn_DAP_Arg_deC 350 566 sp|A1S712|SPEA_SHEAM Biosynthetic arginine decarboxy 8.8e-30 0 1 123 Orn_DAP_Arg_deC 355 574 sp|A8G243|SPEA_PROM2 Biosynthetic arginine decarboxy 1.1e-29 0 1 123 Orn_DAP_Arg_deC 355 574 sp|Q7VEG4|SPEA_PROMA Biosynthetic arginine decarboxy 1.3e-29 0 1 123 Orn_DAP_Arg_deC 346 562 sp|C4K6F4|SPEA_HAMD5 Biosynthetic arginine decarboxy 1.3e-29 0 1 123 Orn_DAP_Arg_deC 345 561 sp|B5F5L1|SPEA_SALA4 Biosynthetic arginine decarboxy 1.3e-29 0 1 123 Orn_DAP_Arg_deC 345 561 sp|Q57K30|SPEA_SALCH Biosynthetic arginine decarboxy 1.3e-29 0 1 123 Orn_DAP_Arg_deC 345 561 sp|B5FUJ7|SPEA_SALDC Biosynthetic arginine decarboxy 1.3e-29 0 1 123 Orn_DAP_Arg_deC 345 561 sp|B4THH1|SPEA_SALHS Biosynthetic arginine decarboxy 1.3e-29 0 1 123 Orn_DAP_Arg_deC 345 561 sp|A9N4N1|SPEA_SALPB Biosynthetic arginine decarboxy 1.3e-29 0 1 123 Orn_DAP_Arg_deC 345 561 sp|B4TV55|SPEA_SALSV Biosynthetic arginine decarboxy 1.3e-29 0 1 123 Orn_DAP_Arg_deC 371 587 sp|P60659|SPEA_SALTY Biosynthetic arginine decarboxy 1.3e-29 0 1 123 Orn_DAP_Arg_deC 371 587 sp|P60658|SPEA_SALTI Biosynthetic arginine decarboxy 1.3e-29 0 1 123 Orn_DAP_Arg_deC 345 561 sp|B4T5J3|SPEA_SALNS Biosynthetic arginine decarboxy 1.4e-29 0 1 123 Orn_DAP_Arg_deC 285 391 sp|P44316|DCDA_HAEIN Diaminopimelate decarboxylase O 1.4e-29 0 1 123 Orn_DAP_Arg_deC 355 532 sp|P22220|SPE1_AVESA Arginine decarboxylase OS=Avena 1.5e-29 0 1 123 Orn_DAP_Arg_deC 336 449 sp|Q9X5M1|DCDA_MYCS2 Diaminopimelate decarboxylase O 1.9e-29 0 1 123 Orn_DAP_Arg_deC 354 570 sp|Q9KLD1|SPEA_VIBCH Biosynthetic arginine decarboxy 2.2e-29 0 1 123 Orn_DAP_Arg_deC 371 587 sp|Q8XCX9|SPEA_ECO57 Biosynthetic arginine decarboxy 2.2e-29 0 1 123 Orn_DAP_Arg_deC 345 561 sp|B5YQD6|SPEA_ECO5E Biosynthetic arginine decarboxy 2.2e-29 0 1 123 Orn_DAP_Arg_deC 371 587 sp|Q8FE34|SPEA_ECOL6 Biosynthetic arginine decarboxy 2.2e-29 0 1 123 Orn_DAP_Arg_deC 345 561 sp|B1LDE8|SPEA_ECOSM Biosynthetic arginine decarboxy 2.6e-29 0 1 123 Orn_DAP_Arg_deC 345 561 sp|Q0T0V3|SPEA_SHIF8 Biosynthetic arginine decarboxy 2.6e-29 0 1 123 Orn_DAP_Arg_deC 371 587 sp|Q83Q93|SPEA_SHIFL Biosynthetic arginine decarboxy 3.3e-29 0 1 123 Orn_DAP_Arg_deC 346 561 sp|B9M6H6|SPEA_GEOSF Biosynthetic arginine decarboxy 3.4e-29 0 1 123 Orn_DAP_Arg_deC 371 587 sp|P21170|SPEA_ECOLI Biosynthetic arginine decarboxy 5.7e-29 0 1 123 Orn_DAP_Arg_deC 425 561 sp|B5EIW4|SPEA_GEOBB Biosynthetic arginine decarboxy 5.7e-29 0 1 123 Orn_DAP_Arg_deC 425 561 sp|C6E3V4|SPEA_GEOSM Biosynthetic arginine decarboxy 8.2e-29 0 1 123 Orn_DAP_Arg_deC 425 561 sp|A1AS90|SPEA_PELPD Biosynthetic arginine decarboxy 8.6e-29 0 1 123 Orn_DAP_Arg_deC 355 574 sp|A2BU00|SPEA_PROM5 Biosynthetic arginine decarboxy 6.4e-28 0 1 123 Orn_DAP_Arg_deC 324 437 sp|Q8RQM6|DCDA_COREF Diaminopimelate decarboxylase O 8.9e-28 0 1 123 Orn_DAP_Arg_deC 347 563 sp|B4F1A4|SPEA_PROMH Biosynthetic arginine decarboxy 1.5e-27 0 1 123 Orn_DAP_Arg_deC 396 615 sp|P74576|SPEA1_SYNY3 Biosynthetic arginine decarboxy 2.6e-27 0 1 123 Orn_DAP_Arg_deC 346 561 sp|A5GB52|SPEA_GEOUR Biosynthetic arginine decarboxy 2.9e-27 0 1 123 Orn_DAP_Arg_deC 351 570 sp|Q7U3S0|SPEA_SYNPX Biosynthetic arginine decarboxy 3.9e-27 0 1 123 Orn_DAP_Arg_deC 425 561 sp|A0A4W3|SPEA_GEOSL Biosynthetic arginine decarboxy 4.8e-27 0 1 123 Orn_DAP_Arg_deC 425 561 sp|Q39X78|SPEA_GEOMG Biosynthetic arginine decarboxy 5e-27 0 1 123 Orn_DAP_Arg_deC 350 566 sp|A1TY02|SPEA_MARAV Biosynthetic arginine decarboxy 6.4e-27 0 1 123 Orn_DAP_Arg_deC 372 586 sp|Q9RXR4|SPEA_DEIRA Biosynthetic arginine decarboxy 1e-26 0 1 123 Orn_DAP_Arg_deC 310 423 sp|P09890|DCDA_CORGL Diaminopimelate decarboxylase O 1.5e-26 0 1 123 Orn_DAP_Arg_deC 390 585 sp|O82475|SPE1_BRAJU Arginine decarboxylase OS=Brass 1.6e-26 0 1 123 Orn_DAP_Arg_deC 401 596 sp|Q39827|SPE1_SOYBN Arginine decarboxylase OS=Glyci 1.6e-26 0 1 123 Orn_DAP_Arg_deC 347 563 sp|Q7N121|SPEA_PHOLL Biosynthetic arginine decarboxy 1.8e-26 0 1 123 Orn_DAP_Arg_deC 346 561 sp|B3EAF3|SPEA_GEOLS Biosynthetic arginine decarboxy 1.8e-26 0 1 123 Orn_DAP_Arg_deC 355 566 sp|A5GWM2|SPEA_SYNR3 Biosynthetic arginine decarboxy 2.5e-26 0 1 123 Orn_DAP_Arg_deC 460 592 sp|Q7UTS2|SPEA_RHOBA Biosynthetic arginine decarboxy 3e-26 0 1 123 Orn_DAP_Arg_deC 301 409 sp|Q9KCM5|DCDA_BACHD Diaminopimelate decarboxylase O 3.1e-26 0 1 123 Orn_DAP_Arg_deC 286 409 sp|Q96A70|ADC_HUMAN Arginine decarboxylase OS=Homo 6.5e-26 0 1 123 Orn_DAP_Arg_deC 494 609 sp|Q43075|SPE1_PEA Arginine decarboxylase OS=Pisum 2.6e-25 0 1 123 Orn_DAP_Arg_deC 375 587 sp|P72587|SPEA2_SYNY3 Biosynthetic arginine decarboxy 3.7e-25 0 1 123 Orn_DAP_Arg_deC 355 574 sp|Q7TUJ9|SPEA_PROMM Biosynthetic arginine decarboxy 1e-24 0 1 123 Orn_DAP_Arg_deC 291 492 sp|P49726|SPE1_SOLLC Arginine decarboxylase OS=Solan 1.1e-24 0 1 123 Orn_DAP_Arg_deC 270 375 sp|Q9PII5|DCDA_CAMJE Diaminopimelate decarboxylase O 1.5e-24 0 1 123 Orn_DAP_Arg_deC 355 574 sp|A2CDK1|SPEA_PROM3 Biosynthetic arginine decarboxy 1.7e-24 0 1 123 Orn_DAP_Arg_deC 286 408 sp|Q8BVM4|ADC_MOUSE Antizyme inhibitor 2 OS=Mus mus 8e-24 0 1 123 Orn_DAP_Arg_deC 357 573 sp|Q9CL60|SPEA_PASMU Biosynthetic arginine decarboxy 1.5e-23 0 1 123 Orn_DAP_Arg_deC 481 596 sp|O23141|SPE2_ARATH Arginine decarboxylase 2 OS=Ara 1.6e-23 0 1 123 Orn_DAP_Arg_deC 401 598 sp|Q9SNN0|SPE1_ORYSJ Arginine decarboxylase 1 OS=Ory 8.9e-23 0 1 123 Orn_DAP_Arg_deC 278 383 sp|P31851|TABA_PSESZ Protein tabA OS=Pseudomonas syr 1.2e-22 0 1 123 Orn_DAP_Arg_deC 343 559 sp|Q9JT25|SPEA_NEIMA Biosynthetic arginine decarboxy 1.2e-22 0 1 123 Orn_DAP_Arg_deC 343 559 sp|Q9K0U3|SPEA_NEIMB Biosynthetic arginine decarboxy 1.8e-22 0 1 123 Orn_DAP_Arg_deC 381 547 sp|Q7XRA1|ADC2_ORYSJ Arginine decarboxylase 2 OS=Ory 1.5e-21 0 1 123 Orn_DAP_Arg_deC 385 584 sp|Q9SI64|SPE1_ARATH Arginine decarboxylase 1 OS=Ara 2.2e-21 0 1 123 Orn_DAP_Arg_deC 433 566 sp|C4L9A9|SPEA_TOLAT Biosynthetic arginine decarboxy 1.3e-18 0 1 123 Orn_DAP_Arg_deC 348 564 sp|A0KIP8|SPEA_AERHH Biosynthetic arginine decarboxy 3.6e-17 0 1 123 Orn_DAP_Arg_deC 348 564 sp|A4SPD6|SPEA_AERS4 Biosynthetic arginine decarboxy 0.0018 0 1 123 Orn_DAP_Arg_deC 324 439 sp|P55709|Y4YA_RHISN Uncharacterized protein y4yA OS 1.1 0 1 123 Orn_DAP_Arg_deC 341 406 sp|O81160|SPE2_THECC Arginine decarboxylase (Fragmen hmmer-3.1b2/easel/demotic/regress/psiblast-profmark.out0000664361611702660230000001322512473612605022654 0ustar wheelerteddy2e-73 276.0 sp|P78283|SECY_VIBCH A3CM55.1 3e-73 275.0 sp|P43804|SECY_HAEIN A3CM55.1 1e-72 273.0 sp|Q9HWF5|SECY_PSEAE A3CM55.1 4e-71 268.0 sp|Q59912|SECY_STRGB A3CM55.1 5e-70 264.0 sp|Q05217|SECY_STACT A3CM55.1 1e-68 260.0 sp|Q59916|SECY_STRGR A3CM55.1 3e-68 259.0 sp|O33006|SECY_MYCLE A3CM55.1 4e-68 258.0 sp|P38376|SECY_CORGL A3CM55.1 5e-68 258.0 sp|P77964|SECY_SYNY3 A3CM55.1 2e-67 256.0 sp|P27148|SECY_LACLC A3CM55.1 3e-67 255.0 sp|Q8CNF3|SECY_STAES A3CM55.1 3e-67 255.0 sp|Q5HM19|SECY_STAEQ A3CM55.1 3e-67 255.0 sp|P46785|SECY_STRCO A3CM55.1 4e-67 255.0 sp|P49977|SECY_STRLI A3CM55.1 4e-67 255.0 sp|P93690|SECY_SPIOL A3CM55.1 5e-67 254.0 sp|Q7A086|SECY_STAAW A3CM55.1 5e-67 254.0 sp|Q6G791|SECY_STAAS A3CM55.1 5e-67 254.0 sp|Q6GEK3|SECY_STAAR A3CM55.1 5e-67 254.0 sp|Q7A468|SECY_STAAN A3CM55.1 5e-67 254.0 sp|Q99S39|SECY_STAAM A3CM55.1 5e-67 254.0 sp|Q5HDX8|SECY_STAAC A3CM55.1 5e-67 254.0 sp|O08387|SECY_STAA8 A3CM55.1 7e-67 254.0 sp|P58118|SECY_LACLA A3CM55.1 9e-67 253.0 sp|P0A5Z2|SECY_MYCTU A3CM55.1 9e-67 253.0 sp|P0A5Z3|SECY_MYCBO A3CM55.1 9e-67 253.0 sp|P43416|SECY_STRSC A3CM55.1 2e-66 252.0 sp|Q9XQU4|SECY_PEA A3CM55.1 2e-66 252.0 sp|P0AGA5|SECY_SHIFL A3CM55.1 2e-66 252.0 sp|P0AGA2|SECY_ECOLI A3CM55.1 2e-66 252.0 sp|P0AGA3|SECY_ECOL6 A3CM55.1 2e-66 252.0 sp|P0AGA4|SECY_ECO57 A3CM55.1 8e-66 250.0 sp|Q05207|SECY_BACLD A3CM55.1 8e-66 250.0 sp|O63066|SECY_MAIZE A3CM55.1 2e-65 249.0 sp|P16336|SECY_BACSU A3CM55.1 7e-65 247.0 sp|P38375|SECY_BACHD A3CM55.1 7e-65 247.0 sp|Q38885|SECY_ARATH A3CM55.1 1e-64 246.0 sp|P0A4H1|SECY_SYNP6 A3CM55.1 1e-64 246.0 sp|P0A4H0|SECY_SYNE7 A3CM55.1 2e-64 246.0 sp|Q6ZG25|SECY_ORYSJ A3CM55.1 8e-64 244.0 sp|P51297|SECY_PORPU A3CM55.1 1e-62 240.0 sp|O66491|SECY_AQUAE A3CM55.1 1e-62 240.0 sp|Q4UMQ9|SECY_RICFE A3CM55.1 3e-62 238.0 sp|Q68W98|SECY_RICTY A3CM55.1 4e-62 238.0 sp|Q92GY6|SECY_RICCN A3CM55.1 6e-62 238.0 sp|Q1RHP1|SECY_RICBR A3CM55.1 7e-62 237.0 sp|P38397|SECY_PYRSA A3CM55.1 9e-62 237.0 sp|Q9ZCS5|SECY_RICPR A3CM55.1 1e-61 236.0 sp|P28539|SECY_CHLTR A3CM55.1 1e-61 236.0 sp|Q1XDJ1|SECY_PORYE A3CM55.1 2e-60 233.0 sp|P28527|SECY_GUITH A3CM55.1 3e-60 231.0 sp|Q89A85|SECY_BUCBP A3CM55.1 6e-60 231.0 sp|P57571|SECY_BUCAI A3CM55.1 2e-58 226.0 sp|Q8K969|SECY_BUCAP A3CM55.1 9e-58 224.0 sp|Q59548|SECY_MYCPN A3CM55.1 2e-57 222.0 sp|Q9PJN1|SECY_CHLMU A3CM55.1 3e-57 222.0 sp|P33108|SECY_MICLU A3CM55.1 7e-57 221.0 sp|O52351|SECY_MYCGA A3CM55.1 2e-56 219.0 sp|P10250|SECY_MYCCT A3CM55.1 3e-56 218.0 sp|P47416|SECY_MYCGE A3CM55.1 9e-56 217.0 sp|Q9Z7S5|SECY_CHLPN A3CM55.1 6e-55 214.0 sp|O25879|SECY_HELPY A3CM55.1 7e-55 214.0 sp|Q9ZJS9|SECY_HELPJ A3CM55.1 6e-54 211.0 sp|O59442|SECY_PYRHO A3CM55.1 7e-54 211.0 sp|P49976|SECY_BUCAK A3CM55.1 8e-54 210.0 sp|Q870W0|SC61A_NEUCR A3CM55.1 1e-53 210.0 sp|Q9V1V8|SECY_PYRAB A3CM55.1 1e-53 210.0 sp|Q8U019|SECY_PYRFU A3CM55.1 3e-53 208.0 sp|Q54XK2|SC61A_DICDI A3CM55.1 5e-52 205.0 sp|P49461|SECY_ODOSI A3CM55.1 8e-52 204.0 sp|O51451|SECY_BORBU A3CM55.1 1e-51 203.0 sp|Q5NVM7|S61A2_PONAB A3CM55.1 2e-51 203.0 sp|Q96TW8|SC61A_HANAN A3CM55.1 2e-51 203.0 sp|P78979|SC61A_YARLI A3CM55.1 3e-51 202.0 sp|Q9JLR1|S61A2_MOUSE A3CM55.1 3e-51 202.0 sp|Q9H9S3|S61A2_HUMAN A3CM55.1 3e-51 202.0 sp|Q2KHX4|S61A2_BOVIN A3CM55.1 3e-51 202.0 sp|Q90ZM2|S61A1_DANRE A3CM55.1 3e-51 202.0 sp|Q8AY32|SC61A_GADOC A3CM55.1 4e-51 201.0 sp|Q98SN8|S61A2_ONCMY A3CM55.1 5e-51 201.0 sp|Q5EA68|S61A1_BOVIN A3CM55.1 5e-51 201.0 sp|P61621|S61A1_RAT A3CM55.1 5e-51 201.0 sp|Q5R5L5|S61A1_PONAB A3CM55.1 5e-51 201.0 sp|P61620|S61A1_MOUSE A3CM55.1 5e-51 201.0 sp|P61619|S61A1_HUMAN A3CM55.1 6e-51 201.0 sp|Q7T278|SC61A_HARAN A3CM55.1 6e-51 201.0 sp|Q7T277|SC61A_DISMA A3CM55.1 7e-51 201.0 sp|Q8AY36|SC61A_PAGBO A3CM55.1 7e-51 201.0 sp|Q8AY35|SC61A_NOTAN A3CM55.1 8e-51 201.0 sp|Q8AY34|SC61A_HEMAM A3CM55.1 8e-51 201.0 sp|Q90YL4|S61A2_DANRE A3CM55.1 9e-51 200.0 sp|Q8AY31|SC61A_BOVVA A3CM55.1 1e-50 200.0 sp|P38377|S61A1_CANFA A3CM55.1 1e-50 199.0 sp|Q9P8E3|SC61A_CANAL A3CM55.1 2e-50 199.0 sp|Q6FRY3|SC61A_CANGA A3CM55.1 2e-50 199.0 sp|Q752H7|SC61A_ASHGO A3CM55.1 2e-50 199.0 sp|P25014|SECY_CYAPA A3CM55.1 3e-50 199.0 sp|Q6CPY9|SC61A_KLULA A3CM55.1 4e-50 198.0 sp|Q6BN08|SC61A_DEBHA A3CM55.1 4e-50 198.0 sp|Q8AY33|SC61A_BORSA A3CM55.1 5e-50 198.0 sp|Q98SN9|S61A1_ONCMY A3CM55.1 1e-48 193.0 sp|P46249|SECY_CYACA A3CM55.1 2e-48 193.0 sp|P32915|SC61A_YEAST A3CM55.1 4e-48 192.0 sp|Q25147|SC61A_HALRO A3CM55.1 5e-48 191.0 sp|O26134|SECY_METTH A3CM55.1 5e-47 188.0 sp|P38379|SC61A_PYRSA A3CM55.1 8e-46 184.0 sp|Q37143|SECY_ANTSP A3CM55.1 1e-45 183.0 sp|Q60175|SECY_METJA A3CM55.1 3e-44 179.0 sp|P28540|SECY_PAVLU A3CM55.1 5e-44 178.0 sp|P79088|SC61A_SCHPO A3CM55.1 6e-43 174.0 sp|P28541|SECY_METVA A3CM55.1 5e-42 171.0 sp|Q9YDD0|SECY_AERPE A3CM55.1 7e-42 171.0 sp|O28377|SECY_ARCFU A3CM55.1 3e-40 165.0 sp|P28542|SECY_HALMA A3CM55.1 4e-39 162.0 sp|Q9HPB1|SECY_HALSA A3CM55.1 2e-37 156.0 sp|Q977V3|SECY_HALVO A3CM55.1 2e-32 140.0 sp|P49978|SECY_SULAC A3CM55.1 9e-30 131.0 sp|Q9UX84|SECY_SULSO A3CM55.1 7e-29 127.0 sp|P38353|SSH1_YEAST A3CM55.1 1e-25 117.0 sp|O42965|YGMH_SCHPO A3CM55.1 5e-20 99.0 sp|P72179|SECY_PARDE A3CM55.1 1e-12 74.0 sp|P28620|SECY_BACST A3CM55.1 1 34.0 sp|P0C6V7|R1AB_BEV A3CM55.1 1.1 34.0 sp|P0C6F3|R1A_BEV A3CM55.1 3.2 33.0 sp|Q49VR4|LTAS_STAS1 A3CM55.1 3.6 33.0 sp|Q5HR16|LTAS_STAEQ A3CM55.1 4 32.0 sp|Q8CQ10|LTAS_STAES A3CM55.1 4.4 32.0 sp|Q6P6T5|OCLN_RAT A3CM55.1 5.7 32.0 sp|P94493|YNCC_BACSU A3CM55.1 6 32.0 sp|Q7A1I3|LTAS_STAAW A3CM55.1 6 32.0 sp|Q6GBB1|LTAS_STAAS A3CM55.1 6 32.0 sp|Q6GIS3|LTAS_STAAR A3CM55.1 6 32.0 sp|Q7A6U1|LTAS_STAAN A3CM55.1 6 32.0 sp|Q99VQ4|LTAS_STAAM A3CM55.1 6 32.0 sp|Q5HHV4|LTAS_STAAC A3CM55.1 6 32.0 sp|Q2G093|LTAS_STAA8 A3CM55.1 6 32.0 sp|Q2FIS2|LTAS_STAA3 A3CM55.1 6 32.0 sp|Q2YSL2|LTAS_STAAB A3CM55.1 6.7 32.0 sp|P0C6V8|R1AB_BRV1 A3CM55.1 7.6 32.0 sp|P0C6F4|R1A_BRV1 A3CM55.1 hmmer-3.1b2/easel/demotic/regress/phmmer-profmark.out0000664361611702660230000002641012473612605022323 0ustar wheelerteddy1.9e-115 387.7 sp|P55685|Y4WG_RHISN sp|P55685|Y4WG_RHISN 1.7 13.5 sp|A1VDW9|HEM1_DESVV sp|P55685|Y4WG_RHISN 2.1 13.1 sp|Q72C23|HEM1_DESVH sp|P55685|Y4WG_RHISN 2.8 12.7 sp|C0ZYA2|RIMP_RHOE4 sp|P55685|Y4WG_RHISN 2.9 12.7 sp|Q98G87|UBIG_RHILO sp|P55685|Y4WG_RHISN 3.6 12.4 sp|B2VCH7|MTLD_ERWT9 sp|P55685|Y4WG_RHISN 4.5 12.1 sp|A1WE19|RLMN_VEREI sp|P55685|Y4WG_RHISN 4.6 12.0 sp|Q2J713|RLMN_FRASC sp|P55685|Y4WG_RHISN 5.4 11.8 sp|Q9CZP0|UFSP1_MOUSE sp|P55685|Y4WG_RHISN 7.4 11.4 sp|Q21KT6|RLMN_SACD2 sp|P55685|Y4WG_RHISN 7.5 11.4 sp|Q7W7U1|NADD_BORPA sp|P55685|Y4WG_RHISN 7.9 11.3 sp|Q8C6Y6|ASB14_MOUSE sp|P55685|Y4WG_RHISN 8 11.3 sp|Q8Y3H7|Y003_RALSO sp|P55685|Y4WG_RHISN 8.1 11.2 sp|A4G4J9|RLMN_HERAR sp|P55685|Y4WG_RHISN 8.8 11.1 sp|B8F3W8|LEUC_HAEPS sp|P55685|Y4WG_RHISN 9.6 11.0 sp|Q07074|YH007_YEAST sp|P55685|Y4WG_RHISN 9.7 11.0 sp|A6SZX3|RLMN_JANMA sp|P55685|Y4WG_RHISN 9.7 11.0 sp|A2SHB8|RLMN_METPP sp|P55685|Y4WG_RHISN 2e-228 762.1 sp|Q1XGE2|HAC1_ASPOR sp|Q1XGE2|HAC1_ASPOR 1.2e-169 568.8 sp|Q8TFU8|HAC1_EMENI sp|Q1XGE2|HAC1_ASPOR 1.5e-26 98.4 sp|Q8TFF3|HAC1_TRIRE sp|Q1XGE2|HAC1_ASPOR 1.3e-12 52.6 sp|P41546|HAC1_YEAST sp|Q1XGE2|HAC1_ASPOR 6e-11 47.1 sp|O24646|HY5_ARATH sp|Q1XGE2|HAC1_ASPOR 4.6e-07 34.3 sp|Q3SZZ2|XBP1_BOVIN sp|Q1XGE2|HAC1_ASPOR 7.8e-07 33.6 sp|Q9SM50|HY5_SOLLC sp|Q1XGE2|HAC1_ASPOR 1.7e-06 32.5 sp|P17861|XBP1_HUMAN sp|Q1XGE2|HAC1_ASPOR 9.6e-06 30.0 sp|Q8W191|HYH_ARATH sp|Q1XGE2|HAC1_ASPOR 2.2e-05 28.8 sp|A1L224|CR3L2_DANRE sp|Q1XGE2|HAC1_ASPOR 6.8e-05 27.2 sp|Q9D2A5|CR3L4_MOUSE sp|Q1XGE2|HAC1_ASPOR 7.1e-05 27.1 sp|Q9R1S4|XBP1_RAT sp|Q1XGE2|HAC1_ASPOR 0.00017 25.8 sp|Q54WN7|BZPF_DICDI sp|Q1XGE2|HAC1_ASPOR 0.00023 25.5 sp|A2VD01|CR3L2_XENLA sp|Q1XGE2|HAC1_ASPOR 0.00023 25.4 sp|Q99090|CPRF2_PETCR sp|Q1XGE2|HAC1_ASPOR 0.00028 25.2 sp|Q5FVM5|CR3L3_RAT sp|Q1XGE2|HAC1_ASPOR 0.00029 25.1 sp|O35426|XBP1_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.00031 25.0 sp|Q61817|CREB3_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.00058 24.1 sp|Q91XE9|CR3L3_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0006 24.1 sp|O57342|MAFA_COTJA sp|Q1XGE2|HAC1_ASPOR 0.00063 24.0 sp|Q5UEM7|CR3L4_RAT sp|Q1XGE2|HAC1_ASPOR 0.00077 23.7 sp|Q08CW8|CR3L4_XENTR sp|Q1XGE2|HAC1_ASPOR 0.00091 23.5 sp|Q90370|MAFB_COTJA sp|Q1XGE2|HAC1_ASPOR 0.00095 23.4 sp|Q68CJ9|CR3L3_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.001 23.3 sp|Q1LYG4|CR3LB_DANRE sp|Q1XGE2|HAC1_ASPOR 0.0011 23.3 sp|Q502F0|CR3LA_DANRE sp|Q1XGE2|HAC1_ASPOR 0.0012 23.1 sp|Q90888|MAFB_CHICK sp|Q1XGE2|HAC1_ASPOR 0.0013 23.0 sp|Q3SYZ3|CR3L3_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.0014 22.9 sp|Q5RCM9|CR3L2_PONAB sp|Q1XGE2|HAC1_ASPOR 0.0014 22.9 sp|Q9Y5Q3|MAFB_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0016 22.7 sp|Q70SY1|CR3L2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0017 22.6 sp|Q6DE84|MAFB_XENLA sp|Q1XGE2|HAC1_ASPOR 0.0018 22.6 sp|Q9Z125|CR3L1_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0018 22.6 sp|Q8BH52|CR3L2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0021 22.3 sp|P54842|MAFB_RAT sp|Q1XGE2|HAC1_ASPOR 0.0021 22.3 sp|Q6QDP7|CR3L2_RAT sp|Q1XGE2|HAC1_ASPOR 0.0021 22.3 sp|Q16520|BATF_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0023 22.1 sp|P54841|MAFB_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0027 21.9 sp|Q2PFS4|MAFB_MACFA sp|Q1XGE2|HAC1_ASPOR 0.0029 21.8 sp|O42290|MAFA_CHICK sp|Q1XGE2|HAC1_ASPOR 0.003 21.8 sp|Q9NR55|BATF3_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0037 21.5 sp|Q96BA8|CR3L1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.004 21.4 sp|Q66HA2|CR3L1_RAT sp|Q1XGE2|HAC1_ASPOR 0.0043 21.3 sp|P17544|ATF7_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0053 21.0 sp|O43889|CREB3_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0054 20.9 sp|Q8R0S1|ATF7_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0057 20.9 sp|Q5R9C9|ATF7_PONAB sp|Q1XGE2|HAC1_ASPOR 0.0068 20.6 sp|O35284|BATF_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0084 20.3 sp|Q8SQ19|CREB3_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.0089 20.2 sp|Q8TEY5|CR3L4_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0097 20.1 sp|Q9D275|BATF3_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.012 19.9 sp|Q504L8|MAFB_XENTR sp|Q1XGE2|HAC1_ASPOR 0.012 19.8 sp|Q5UEM8|CR3L4_MACFA sp|Q1XGE2|HAC1_ASPOR 0.016 19.4 sp|Q4U1U2|MAFA_XENTR sp|Q1XGE2|HAC1_ASPOR 0.018 19.3 sp|P23091|MAF_AVIS4 sp|Q1XGE2|HAC1_ASPOR 0.018 19.2 sp|P81269|ATF1_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.019 19.2 sp|Q789F3|MAF_CHICK sp|Q1XGE2|HAC1_ASPOR 0.02 19.1 sp|P29747|CREBA_DROME sp|Q1XGE2|HAC1_ASPOR 0.02 19.0 sp|P18848|ATF4_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.024 18.8 sp|P54844|MAF_RAT sp|Q1XGE2|HAC1_ASPOR 0.024 18.8 sp|O75444|MAF_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.024 18.8 sp|P97876|BATF3_RAT sp|Q1XGE2|HAC1_ASPOR 0.025 18.8 sp|Q06507|ATF4_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.025 18.7 sp|A7Z017|MAF_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.026 18.7 sp|Q0V9K1|MAF_XENTR sp|Q1XGE2|HAC1_ASPOR 0.028 18.6 sp|Q08DA8|ATF1_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.029 18.5 sp|O60675|MAFK_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.03 18.5 sp|P54843|MAF_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.036 18.2 sp|P18846|ATF1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.039 18.1 sp|P42774|GBF1_ARATH sp|Q1XGE2|HAC1_ASPOR 0.039 18.1 sp|Q61827|MAFK_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.046 17.9 sp|P14233|TGA1B_TOBAC sp|Q1XGE2|HAC1_ASPOR 0.051 17.7 sp|Q6NW59|ATF4_DANRE sp|Q1XGE2|HAC1_ASPOR 0.067 17.3 sp|O24160|TGA21_TOBAC sp|Q1XGE2|HAC1_ASPOR 0.07 17.3 sp|Q98UK4|MAF_DANRE sp|Q1XGE2|HAC1_ASPOR 0.071 17.3 sp|A3KMR8|MAFA_DANRE sp|Q1XGE2|HAC1_ASPOR 0.078 17.1 sp|Q90596|MAFK_CHICK sp|Q1XGE2|HAC1_ASPOR 0.079 17.1 sp|Q3ZCH6|ATF4_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.086 17.0 sp|P97875|JDP2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.086 17.0 sp|Q78E65|JDP2_RAT sp|Q1XGE2|HAC1_ASPOR 0.092 16.9 sp|P12959|OP2_MAIZE sp|Q1XGE2|HAC1_ASPOR 0.093 16.9 sp|Q8K1L0|CREB5_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.093 16.9 sp|Q39140|TGA6_ARATH sp|Q1XGE2|HAC1_ASPOR 0.098 16.8 sp|P23923|HBP1B_WHEAT sp|Q1XGE2|HAC1_ASPOR 0.11 16.7 sp|Q00322|CEBPD_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.11 16.6 sp|Q39163|TGA5_ARATH sp|Q1XGE2|HAC1_ASPOR 0.12 16.5 sp|Q54RZ9|BZPG_DICDI sp|Q1XGE2|HAC1_ASPOR 0.12 16.5 sp|Q8CF90|MAFA_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.13 16.4 sp|Q9ES19|ATF4_RAT sp|Q1XGE2|HAC1_ASPOR 0.15 16.2 sp|P43273|TGA2_ARATH sp|Q1XGE2|HAC1_ASPOR 0.16 16.1 sp|Q98UK5|MAFB_DANRE sp|Q1XGE2|HAC1_ASPOR 0.17 16.0 sp|P16951|ATF2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.18 15.9 sp|P27925|CREB1_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.19 15.9 sp|P15336|ATF2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.19 15.9 sp|O35451|ATF6B_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.19 15.9 sp|Q2VZV0|IF2_MAGSA sp|Q1XGE2|HAC1_ASPOR 0.21 15.7 sp|Q6ZDF3|TRAB1_ORYSJ sp|Q1XGE2|HAC1_ASPOR 0.22 15.7 sp|Q6P788|ATF5_RAT sp|Q1XGE2|HAC1_ASPOR 0.22 15.6 sp|Q02930|CREB5_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.23 15.6 sp|Q66J36|NFIL3_XENLA sp|Q1XGE2|HAC1_ASPOR 0.29 15.3 sp|Q8NHW3|MAFA_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.37 14.9 sp|O88479|FOS_MESAU sp|Q1XGE2|HAC1_ASPOR 0.38 14.9 sp|P23922|HBP1A_WHEAT sp|Q1XGE2|HAC1_ASPOR 0.39 14.9 sp|Q90595|MAFF_CHICK sp|Q1XGE2|HAC1_ASPOR 0.39 14.8 sp|P53450|FOS_TAKRU sp|Q1XGE2|HAC1_ASPOR 0.43 14.7 sp|Q00969|ATF2_RAT sp|Q1XGE2|HAC1_ASPOR 0.43 14.7 sp|O97930|FOS_PIG sp|Q1XGE2|HAC1_ASPOR 0.51 14.5 sp|P79145|CREM_CANFA sp|Q1XGE2|HAC1_ASPOR 0.52 14.4 sp|Q99941|ATF6B_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.53 14.4 sp|P01101|FOS_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.54 14.4 sp|P15337|CREB1_RAT sp|Q1XGE2|HAC1_ASPOR 0.54 14.4 sp|P16220|CREB1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.54 14.4 sp|Q01147|CREB1_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.57 14.3 sp|O93602|ATF2_CHICK sp|Q1XGE2|HAC1_ASPOR 0.63 14.1 sp|Q90889|MAFG_CHICK sp|Q1XGE2|HAC1_ASPOR 0.64 14.1 sp|P79702|FOS_CYPCA sp|Q1XGE2|HAC1_ASPOR 0.64 14.1 sp|Q8X229|FCR3_CANAL sp|Q1XGE2|HAC1_ASPOR 0.65 14.1 sp|P12841|FOS_RAT sp|Q1XGE2|HAC1_ASPOR 0.71 14.0 sp|P49716|CEBPD_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.72 14.0 sp|Q554P0|BZPJ_DICDI sp|Q1XGE2|HAC1_ASPOR 0.74 13.9 sp|Q55E93|BZPE_DICDI sp|Q1XGE2|HAC1_ASPOR 0.75 13.9 sp|P51984|CREB_CHLVR sp|Q1XGE2|HAC1_ASPOR 0.77 13.9 sp|P01102|FOS_MSVFB sp|Q1XGE2|HAC1_ASPOR 0.81 13.8 sp|O77628|FOS_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.82 13.8 sp|Q8WYK2|JDP2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.86 13.7 sp|Q60925|DBP_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.9 13.6 sp|P14232|TGA1A_TOBAC sp|Q1XGE2|HAC1_ASPOR 0.96 13.6 sp|P16443|DBP_RAT sp|Q1XGE2|HAC1_ASPOR 0.97 13.5 sp|Q68EL6|NFIL3_DANRE sp|Q1XGE2|HAC1_ASPOR 0.98 13.5 sp|P01100|FOS_HUMAN sp|Q1XGE2|HAC1_ASPOR 1 13.5 sp|Q9C5Q2|AI5L3_ARATH sp|Q1XGE2|HAC1_ASPOR 1.1 13.4 sp|Q5FW38|NFIL3_XENTR sp|Q1XGE2|HAC1_ASPOR 1.1 13.4 sp|Q8HZP6|FOS_FELCA sp|Q1XGE2|HAC1_ASPOR 1.2 13.3 sp|Q9SJN0|ABI5_ARATH sp|Q1XGE2|HAC1_ASPOR 1.2 13.2 sp|P42777|GBF4_ARATH sp|Q1XGE2|HAC1_ASPOR 1.3 13.1 sp|P15407|FOSL1_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.3 13.1 sp|O15525|MAFG_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.4 13.0 sp|P40535|ACA2_YEAST sp|Q1XGE2|HAC1_ASPOR 1.5 12.9 sp|A7YY73|MAFF_BOVIN sp|Q1XGE2|HAC1_ASPOR 1.6 12.9 sp|Q8PY58|PSMR_METMA sp|Q1XGE2|HAC1_ASPOR 1.6 12.8 sp|Q56TN0|FOS_PHORO sp|Q1XGE2|HAC1_ASPOR 1.7 12.7 sp|P23050|FOS_AVINK sp|Q1XGE2|HAC1_ASPOR 1.8 12.6 sp|Q9LES3|AI5L2_ARATH sp|Q1XGE2|HAC1_ASPOR 2 12.5 sp|Q84JK2|FD_ARATH sp|Q1XGE2|HAC1_ASPOR 2 12.5 sp|A5PJV0|MAFG_BOVIN sp|Q1XGE2|HAC1_ASPOR 2 12.5 sp|O54790|MAFG_MOUSE sp|Q1XGE2|HAC1_ASPOR 2 12.5 sp|Q39234|TGA3_ARATH sp|Q1XGE2|HAC1_ASPOR 2.2 12.4 sp|P07049|CPPB_NEIGO sp|Q1XGE2|HAC1_ASPOR 2.2 12.3 sp|P11939|FOS_CHICK sp|Q1XGE2|HAC1_ASPOR 2.5 12.2 sp|P29176|FOSX_MSVFR sp|Q1XGE2|HAC1_ASPOR 2.5 12.2 sp|O54791|MAFF_MOUSE sp|Q1XGE2|HAC1_ASPOR 2.7 12.1 sp|Q8TI88|PSMR_METAC sp|Q1XGE2|HAC1_ASPOR 2.8 12.0 sp|O08750|NFIL3_MOUSE sp|Q1XGE2|HAC1_ASPOR 2.8 12.0 sp|Q76MX4|MAFG_RAT sp|Q1XGE2|HAC1_ASPOR 3 11.9 sp|P20482|CNC_DROME sp|Q1XGE2|HAC1_ASPOR 3.1 11.9 sp|Q90Z72|NFIL3_CHICK sp|Q1XGE2|HAC1_ASPOR 3.2 11.8 sp|Q9VWW0|CREBB_DROME sp|Q1XGE2|HAC1_ASPOR 3.2 11.8 sp|Q8BKJ9|SIRT7_MOUSE sp|Q1XGE2|HAC1_ASPOR 3.3 11.8 sp|Q56TT7|FOS_PHOCM sp|Q1XGE2|HAC1_ASPOR 3.3 11.8 sp|Q6IMZ0|NFIL3_RAT sp|Q1XGE2|HAC1_ASPOR 3.5 11.7 sp|P38749|YAP3_YEAST sp|Q1XGE2|HAC1_ASPOR 3.7 11.6 sp|Q08D88|NFIL3_BOVIN sp|Q1XGE2|HAC1_ASPOR 3.8 11.6 sp|Q16649|NFIL3_HUMAN sp|Q1XGE2|HAC1_ASPOR 3.8 11.6 sp|Q9C7S0|BZI60_ARATH sp|Q1XGE2|HAC1_ASPOR 3.9 11.6 sp|P78962|ATF21_SCHPO sp|Q1XGE2|HAC1_ASPOR 4 11.5 sp|Q1LZH5|CREM_BOVIN sp|Q1XGE2|HAC1_ASPOR 4.2 11.4 sp|B1MX63|THIE_LEUCK sp|Q1XGE2|HAC1_ASPOR 4.6 11.3 sp|Q5AVK6|NOP16_EMENI sp|Q1XGE2|HAC1_ASPOR 4.6 11.3 sp|Q9ULX9|MAFF_HUMAN sp|Q1XGE2|HAC1_ASPOR 4.6 11.3 sp|P53567|CEBPG_HUMAN sp|Q1XGE2|HAC1_ASPOR 4.8 11.2 sp|Q2V2M9|FHOD3_HUMAN sp|Q1XGE2|HAC1_ASPOR 4.9 11.2 sp|Q03060|CREM_HUMAN sp|Q1XGE2|HAC1_ASPOR 4.9 11.2 sp|O68007|BACB_BACLI sp|Q1XGE2|HAC1_ASPOR 5.1 11.2 sp|Q5VPE3|HOX2_ORYSJ sp|Q1XGE2|HAC1_ASPOR 5.1 11.2 sp|Q84U86|HOX2_ORYSI sp|Q1XGE2|HAC1_ASPOR 5.4 11.1 sp|Q65US7|THIE_MANSM sp|Q1XGE2|HAC1_ASPOR 5.4 11.1 sp|P07948|LYN_HUMAN sp|Q1XGE2|HAC1_ASPOR 5.4 11.1 sp|Q16534|HLF_HUMAN sp|Q1XGE2|HAC1_ASPOR 5.5 11.1 sp|Q9XGJ4|GGM13_GNEGN sp|Q1XGE2|HAC1_ASPOR 5.8 11.0 sp|P27921|JUND_CHICK sp|Q1XGE2|HAC1_ASPOR 5.9 10.9 sp|Q5XHX8|THEG_RAT sp|Q1XGE2|HAC1_ASPOR 6 10.9 sp|P18847|ATF3_HUMAN sp|Q1XGE2|HAC1_ASPOR 6.1 10.9 sp|P24068|OCS1_MAIZE sp|Q1XGE2|HAC1_ASPOR 6.2 10.9 sp|P20393|NR1D1_HUMAN sp|Q1XGE2|HAC1_ASPOR 6.3 10.9 sp|P13346|FOSB_MOUSE sp|Q1XGE2|HAC1_ASPOR 6.4 10.8 sp|P42775|GBF2_ARATH sp|Q1XGE2|HAC1_ASPOR 6.5 10.8 sp|Q09926|PCR1_SCHPO sp|Q1XGE2|HAC1_ASPOR 6.9 10.7 sp|P24813|YAP2_YEAST sp|Q1XGE2|HAC1_ASPOR 7 10.7 sp|Q64709|HLF_RAT sp|Q1XGE2|HAC1_ASPOR 7.3 10.6 sp|Q02100|SKO1_YEAST sp|Q1XGE2|HAC1_ASPOR 7.7 10.6 sp|P50198|LINX_PSEPA sp|Q1XGE2|HAC1_ASPOR 7.7 10.6 sp|Q6DGM8|JDP2_DANRE sp|Q1XGE2|HAC1_ASPOR 7.8 10.6 sp|A2Z0Q0|HOX25_ORYSI sp|Q1XGE2|HAC1_ASPOR 7.9 10.5 sp|Q9UPR3|SMG5_HUMAN sp|Q1XGE2|HAC1_ASPOR 8.1 10.5 sp|Q41558|HBP1C_WHEAT sp|Q1XGE2|HAC1_ASPOR 8.2 10.5 sp|O02756|CEBPD_BOVIN sp|Q1XGE2|HAC1_ASPOR 8.6 10.4 sp|Q63315|CAD22_RAT sp|Q1XGE2|HAC1_ASPOR 8.7 10.4 sp|Q9WTP5|CAD22_MOUSE sp|Q1XGE2|HAC1_ASPOR 9.3 10.3 sp|Q5FUV3|ATE_GLUOX sp|Q1XGE2|HAC1_ASPOR 9.5 10.3 sp|Q99091|CPRF3_PETCR sp|Q1XGE2|HAC1_ASPOR 9.5 10.3 sp|Q8BW74|HLF_MOUSE sp|Q1XGE2|HAC1_ASPOR 9.9 10.2 sp|Q9JLC6|TEF_MOUSE sp|Q1XGE2|HAC1_ASPOR 10 10.2 sp|Q92172|TEF_CHICK sp|Q1XGE2|HAC1_ASPOR hmmer-3.1b2/easel/demotic/regress/hmmsearch-profmark.out0000664361611702660230000013153712473612605023011 0ustar wheelerteddy4.2e-39 138.8 sp|P06485|US02_HHV11 US2 2e-38 136.6 sp|P13292|US02_HHV2H US2 1.6e-35 127.2 sp|Q05106|US453_GAHVG US2 2.3e-35 126.8 sp|P32517|US02_EHV1K US2 3.3e-33 119.8 sp|P28964|US02_EHV1B US2 2.1e-31 114.0 sp|Q08099|US02_BHV1S US2 1.8e-17 68.9 sp|P24382|US02_SUHVN US2 1.4 14.3 sp|Q9ZK80|ATPG_HELPJ US2 1.4 14.3 sp|P56082|ATPG_HELPY US2 1.5 14.2 sp|B2UUP1|ATPG_HELPS US2 1.5 14.2 sp|B6JMX3|ATPG_HELP2 US2 2.6 13.4 sp|Q17Y79|ATPG_HELAH US2 3.6 13.0 sp|B5Z8D1|ATPG_HELPG US2 3.9 12.9 sp|Q1CSD4|ATPG_HELPH US2 3e-40 142.2 sp|A7Z4E5|MURG_BACA2 Glyco_transf_28 3.6e-40 141.9 sp|Q65JY0|MURG_BACLD Glyco_transf_28 7.6e-40 140.8 sp|P37585|MURG_BACSU Glyco_transf_28 3e-39 138.9 sp|A8FCY1|MURG_BACP2 Glyco_transf_28 7.6e-39 137.6 sp|Q812W5|MURG1_BACCR Glyco_transf_28 1.1e-38 137.0 sp|A3MY90|MURG_ACTP2 Glyco_transf_28 1.5e-38 136.7 sp|A0RHT1|MURG2_BACAH Glyco_transf_28 1.5e-38 136.7 sp|Q636B6|MURG1_BACCZ Glyco_transf_28 1.5e-38 136.7 sp|Q81JG5|MURG1_BACAN Glyco_transf_28 1.8e-38 136.4 sp|Q732F8|MURG1_BACC1 Glyco_transf_28 2.7e-38 135.8 sp|B7GGI2|MURG_ANOFW Glyco_transf_28 2.9e-38 135.7 sp|A7GRN6|MURG_BACCN Glyco_transf_28 3.7e-38 135.4 sp|B0BRH7|MURG_ACTPJ Glyco_transf_28 3.7e-38 135.4 sp|B3GZK8|MURG_ACTP7 Glyco_transf_28 3.8e-38 135.3 sp|Q6HEQ4|MURG1_BACHK Glyco_transf_28 9.4e-38 134.1 sp|O07670|MURG_ENTHR Glyco_transf_28 1.6e-37 133.3 sp|A7FM66|MURG_YERP3 Glyco_transf_28 1.6e-37 133.3 sp|B1JK81|MURG_YERPY Glyco_transf_28 1.6e-37 133.3 sp|B2K4E6|MURG_YERPB Glyco_transf_28 1.6e-37 133.3 sp|Q66EK5|MURG_YERPS Glyco_transf_28 2e-37 133.0 sp|A1JJJ3|MURG_YERE8 Glyco_transf_28 2.2e-37 132.8 sp|A9MQC2|MURG_SALAR Glyco_transf_28 2.3e-37 132.8 sp|P64869|Y1526_MYCTU Glyco_transf_28 2.3e-37 132.8 sp|P64870|Y1553_MYCBO Glyco_transf_28 3.1e-37 132.4 sp|Q65RY6|MURG_MANSM Glyco_transf_28 3.5e-37 132.2 sp|B2VD91|MURG_ERWT9 Glyco_transf_28 3.6e-37 132.2 sp|Q4QLF8|MURG_HAEI8 Glyco_transf_28 3.8e-37 132.1 sp|A5UIR2|MURG_HAEIG Glyco_transf_28 4e-37 132.0 sp|P45065|MURG_HAEIN Glyco_transf_28 4.7e-37 131.8 sp|A9R124|MURG_YERPG Glyco_transf_28 4.7e-37 131.8 sp|Q1C214|MURG_YERPA Glyco_transf_28 4.7e-37 131.8 sp|Q1CMM7|MURG_YERPN Glyco_transf_28 4.7e-37 131.8 sp|Q8ZIE9|MURG_YERPE Glyco_transf_28 5.7e-37 131.5 sp|O07109|MURG_ENTFA Glyco_transf_28 5.8e-37 131.5 sp|A3QIM1|MURG_SHELP Glyco_transf_28 6e-37 131.5 sp|A8G9S7|MURG_SERP5 Glyco_transf_28 6.3e-37 131.4 sp|B7LWF6|MURG_ESCF3 Glyco_transf_28 7.1e-37 131.2 sp|A7MIE5|MURG_ENTS8 Glyco_transf_28 7.4e-37 131.2 sp|C6DEU3|MURG_PECCP Glyco_transf_28 8.3e-37 131.0 sp|Q88V81|MURG_LACPL Glyco_transf_28 8.9e-37 130.9 sp|Q8Z9G9|MURG_SALTI Glyco_transf_28 8.9e-37 130.9 sp|B4F111|MURG_PROMH Glyco_transf_28 9.9e-37 130.7 sp|A0L1P2|MURG_SHESA Glyco_transf_28 9.9e-37 130.7 sp|Q0HZR6|MURG_SHESR Glyco_transf_28 1.3e-36 130.4 sp|B5BLC2|MURG_SALPK Glyco_transf_28 1.3e-36 130.4 sp|Q5PDC8|MURG_SALPA Glyco_transf_28 1.3e-36 130.4 sp|Q9K9T0|MURG_BACHD Glyco_transf_28 1.4e-36 130.3 sp|Q8Y5M2|MURG_LISMO Glyco_transf_28 1.7e-36 130.0 sp|A9MZL9|MURG_SALPB Glyco_transf_28 1.7e-36 130.0 sp|B4TJ87|MURG_SALHS Glyco_transf_28 1.7e-36 130.0 sp|B4TXH8|MURG_SALSV Glyco_transf_28 1.7e-36 130.0 sp|B5F7W4|MURG_SALA4 Glyco_transf_28 1.7e-36 130.0 sp|Q8ZRU3|MURG_SALTY Glyco_transf_28 1.7e-36 130.0 sp|B4SU50|MURG_SALNS Glyco_transf_28 1.7e-36 130.0 sp|A1REZ6|MURG_SHESW Glyco_transf_28 1.7e-36 130.0 sp|A4Y2N6|MURG_SHEPC Glyco_transf_28 1.7e-36 130.0 sp|A6T4N3|MURG_KLEP7 Glyco_transf_28 1.7e-36 129.9 sp|B5RH64|MURG_SALG2 Glyco_transf_28 1.8e-36 129.9 sp|A8ALK6|MURG_CITK8 Glyco_transf_28 1.8e-36 129.9 sp|Q57TD0|MURG_SALCH Glyco_transf_28 1.8e-36 129.9 sp|A6WID1|MURG_SHEB8 Glyco_transf_28 1.8e-36 129.9 sp|A9KY29|MURG_SHEB9 Glyco_transf_28 1.8e-36 129.9 sp|B8E698|MURG_SHEB2 Glyco_transf_28 2e-36 129.8 sp|B5Y1U7|MURG_KLEP3 Glyco_transf_28 2.2e-36 129.6 sp|A3CZM1|MURG_SHEB5 Glyco_transf_28 2.4e-36 129.5 sp|Q7U336|MURG_HAEDU Glyco_transf_28 2.4e-36 129.5 sp|B7VJ03|MURG_VIBSL Glyco_transf_28 2.5e-36 129.5 sp|Q0I1D3|MURG_HAES1 Glyco_transf_28 2.5e-36 129.4 sp|B5FI72|MURG_SALDC Glyco_transf_28 2.6e-36 129.4 sp|A2RJQ4|MURG_LACLM Glyco_transf_28 2.6e-36 129.4 sp|Q02XY0|MURG_LACLS Glyco_transf_28 2.7e-36 129.3 sp|B7MNU9|MURG_ECO81 Glyco_transf_28 2.7e-36 129.3 sp|B7NHJ6|MURG_ECO7I Glyco_transf_28 2.7e-36 129.3 sp|B7UIE0|MURG_ECO27 Glyco_transf_28 2.7e-36 129.3 sp|Q0TLP9|MURG_ECOL5 Glyco_transf_28 2.7e-36 129.3 sp|Q8FL64|MURG_ECOL6 Glyco_transf_28 2.9e-36 129.2 sp|A1A7D5|MURG_ECOK1 Glyco_transf_28 2.9e-36 129.2 sp|B7MAL3|MURG_ECO45 Glyco_transf_28 2.9e-36 129.2 sp|Q1RGA5|MURG_ECOUT Glyco_transf_28 3.1e-36 129.1 sp|Q6D0I3|MURG_ERWCT Glyco_transf_28 3.1e-36 129.1 sp|B5YZC6|MURG_ECO5E Glyco_transf_28 3.1e-36 129.1 sp|Q8X9Y8|MURG_ECO57 Glyco_transf_28 3.1e-36 129.1 sp|A7ZHI1|MURG_ECO24 Glyco_transf_28 3.1e-36 129.1 sp|B1LG27|MURG_ECOSM Glyco_transf_28 3.1e-36 129.1 sp|B6HZ67|MURG_ECOSE Glyco_transf_28 3.1e-36 129.1 sp|B7M133|MURG_ECO8A Glyco_transf_28 3.1e-36 129.1 sp|B7N7W3|MURG_ECOLU Glyco_transf_28 3.1e-36 129.1 sp|Q326E5|MURG_SHIBS Glyco_transf_28 3.1e-36 129.1 sp|Q3Z5R9|MURG_SHISS Glyco_transf_28 3.2e-36 129.1 sp|Q32K02|MURG_SHIDS Glyco_transf_28 3.2e-36 129.1 sp|B2U295|MURG_SHIB3 Glyco_transf_28 3.2e-36 129.1 sp|B1IR88|MURG_ECOLC Glyco_transf_28 3.2e-36 129.1 sp|B1XC67|MURG_ECODH Glyco_transf_28 3.2e-36 129.1 sp|C4ZRI5|MURG_ECOBW Glyco_transf_28 3.2e-36 129.1 sp|P17443|MURG_ECOLI Glyco_transf_28 3.2e-36 129.1 sp|A7ZW42|MURG_ECOHS Glyco_transf_28 3.2e-36 129.1 sp|A4TQ83|MURG_YERPP Glyco_transf_28 3.5e-36 129.0 sp|Q9CF92|MURG_LACLA Glyco_transf_28 3.7e-36 128.9 sp|B5R2M4|MURG_SALEP Glyco_transf_28 3.8e-36 128.8 sp|Q0T8A7|MURG_SHIF8 Glyco_transf_28 3.8e-36 128.8 sp|Q83MN4|MURG_SHIFL Glyco_transf_28 4.1e-36 128.7 sp|Q8CX35|MURG_SHEON Glyco_transf_28 4.3e-36 128.7 sp|B8DBP8|MURG_LISMH Glyco_transf_28 4.6e-36 128.6 sp|A0AKD5|MURG_LISW6 Glyco_transf_28 5.2e-36 128.4 sp|Q9ZBA5|MURG_STRCO Glyco_transf_28 5.5e-36 128.3 sp|Q929Y2|MURG_LISIN Glyco_transf_28 5.8e-36 128.3 sp|B8F3B6|MURG_HAEPS Glyco_transf_28 5.9e-36 128.2 sp|Q0HE83|MURG_SHESM Glyco_transf_28 6e-36 128.2 sp|C1KWY8|MURG_LISMC Glyco_transf_28 6e-36 128.2 sp|Q71XX8|MURG_LISMF Glyco_transf_28 6.4e-36 128.1 sp|A1S2F9|MURG_SHEAM Glyco_transf_28 9.6e-36 127.5 sp|A5UCW8|MURG_HAEIE Glyco_transf_28 9.8e-36 127.5 sp|Q03QH5|MURG_LACBA Glyco_transf_28 1e-35 127.4 sp|Q8DEL0|MURG_VIBVU Glyco_transf_28 1e-35 127.4 sp|Q7MNV1|MURG_VIBVY Glyco_transf_28 1.3e-35 127.2 sp|Q3IFY0|MURG_PSEHT Glyco_transf_28 1.3e-35 127.1 sp|B7LFW0|MURG_ECO55 Glyco_transf_28 1.4e-35 127.0 sp|B1KKX7|MURG_SHEWM Glyco_transf_28 2.3e-35 126.3 sp|Q49929|Y2348_MYCLE Glyco_transf_28 2.3e-35 126.3 sp|Q7N147|MURG_PHOLL Glyco_transf_28 2.3e-35 126.3 sp|A8H984|MURG_SHEPA Glyco_transf_28 2.6e-35 126.1 sp|Q820F6|MURG_STRAW Glyco_transf_28 2.8e-35 126.1 sp|Q1WTA0|MURG_LACS1 Glyco_transf_28 3e-35 125.9 sp|Q9X4H4|MURG_STRCU Glyco_transf_28 4e-35 125.6 sp|Q12SC6|MURG_SHEDO Glyco_transf_28 4e-35 125.5 sp|P57817|MURG_PASMU Glyco_transf_28 4.3e-35 125.4 sp|Q87SG4|MURG_VIBPA Glyco_transf_28 4.4e-35 125.4 sp|B0TQN7|MURG_SHEHH Glyco_transf_28 4.7e-35 125.3 sp|C4L5U5|MURG_EXISA Glyco_transf_28 5.3e-35 125.1 sp|A9M2H3|MURG_NEIM0 Glyco_transf_28 7.1e-35 124.7 sp|Q6LMF6|MURG_PHOPR Glyco_transf_28 8.4e-35 124.5 sp|Q5E2Q0|MURG_VIBF1 Glyco_transf_28 8.7e-35 124.4 sp|P64865|Y1524_MYCTU Glyco_transf_28 8.7e-35 124.4 sp|P64866|Y1551_MYCBO Glyco_transf_28 9e-35 124.4 sp|B5FB35|MURG_VIBFM Glyco_transf_28 9.6e-35 124.3 sp|B2GB78|MURG_LACF3 Glyco_transf_28 1e-34 124.2 sp|B6ELH5|MURG_ALISL Glyco_transf_28 1.1e-34 124.1 sp|B8CWJ6|MURG_HALOH Glyco_transf_28 1.1e-34 124.1 sp|A7MXR6|MURG_VIBHB Glyco_transf_28 1.2e-34 124.1 sp|A5VJ33|MURG_LACRD Glyco_transf_28 1.2e-34 124.1 sp|B2G6K5|MURG_LACRJ Glyco_transf_28 1.4e-34 123.8 sp|Q182Y6|MURG_CLOD6 Glyco_transf_28 1.4e-34 123.8 sp|Q2NVV1|MURG_SODGM Glyco_transf_28 1.4e-34 123.8 sp|Q07WI5|MURG_SHEFN Glyco_transf_28 1.4e-34 123.8 sp|A1KVL3|MURG_NEIMF Glyco_transf_28 1.5e-34 123.7 sp|Q9K0Y2|MURG_NEIMB Glyco_transf_28 1.8e-34 123.4 sp|B8CNL1|MURG_SHEPW Glyco_transf_28 2e-34 123.3 sp|C4LA25|MURG_TOLAT Glyco_transf_28 2e-34 123.3 sp|Q9F1N0|MURG_SHEVI Glyco_transf_28 2.6e-34 122.9 sp|A5F5M9|MURG_VIBC3 Glyco_transf_28 2.7e-34 122.9 sp|Q03W35|MURG_LEUMM Glyco_transf_28 2.8e-34 122.8 sp|A3Q1L8|MURG_MYCSJ Glyco_transf_28 2.8e-34 122.8 sp|A1UI54|MURG_MYCSK Glyco_transf_28 2.8e-34 122.8 sp|Q1B6X1|MURG_MYCSS Glyco_transf_28 3.3e-34 122.6 sp|C3LQU6|MURG_VIBCM Glyco_transf_28 3.3e-34 122.6 sp|Q9KPG7|MURG_VIBCH Glyco_transf_28 4.3e-34 122.2 sp|A8FQA0|MURG_SHESH Glyco_transf_28 6.8e-34 121.5 sp|B4RQC5|MURG_NEIG2 Glyco_transf_28 6.8e-34 121.5 sp|Q5F6L8|MURG_NEIG1 Glyco_transf_28 7.6e-34 121.4 sp|B1I4C4|MURG_DESAP Glyco_transf_28 8e-34 121.3 sp|Q6A9Q2|MURG_PROAC Glyco_transf_28 8.6e-34 121.2 sp|B3WDY2|MURG_LACCB Glyco_transf_28 8.6e-34 121.2 sp|Q039R7|MURG_LACC3 Glyco_transf_28 9e-34 121.2 sp|A4J2B1|MURG_DESRM Glyco_transf_28 9.5e-34 121.1 sp|Q47VQ9|MURG_COLP3 Glyco_transf_28 1.1e-33 120.9 sp|B2A2H2|MURG_NATTJ Glyco_transf_28 1.7e-33 120.3 sp|Q6NGC8|MURG_CORDI Glyco_transf_28 1.7e-33 120.2 sp|B4RWX9|MURG_ALTMD Glyco_transf_28 1.8e-33 120.2 sp|Q9JSZ7|MURG_NEIMA Glyco_transf_28 1.9e-33 120.1 sp|B0KFS6|MURG_PSEPG Glyco_transf_28 2.5e-33 119.7 sp|A4XQS4|MURG_PSEMY Glyco_transf_28 2.5e-33 119.7 sp|Q48EF8|MURG_PSE14 Glyco_transf_28 2.6e-33 119.7 sp|Q8R9G6|MURG_THETN Glyco_transf_28 2.8e-33 119.6 sp|A5W8Q0|MURG_PSEP1 Glyco_transf_28 2.8e-33 119.5 sp|Q1I5B8|MURG_PSEE4 Glyco_transf_28 2.9e-33 119.5 sp|Q87WY5|MURG_PSESM Glyco_transf_28 3.4e-33 119.3 sp|C3L230|MURG_CLOB6 Glyco_transf_28 3.5e-33 119.3 sp|A1WC06|MURG_ACISJ Glyco_transf_28 3.5e-33 119.3 sp|B9MFR2|MURG_DIAST Glyco_transf_28 3.6e-33 119.2 sp|B8ZQQ0|MURG_MYCLB Glyco_transf_28 3.6e-33 119.2 sp|O69552|MURG_MYCLE Glyco_transf_28 3.7e-33 119.2 sp|Q893R7|MURG_CLOTE Glyco_transf_28 3.8e-33 119.1 sp|A7GGX9|MURG_CLOBL Glyco_transf_28 3.8e-33 119.1 sp|B1IKH3|MURG_CLOBK Glyco_transf_28 3.8e-33 119.1 sp|C1FUF9|MURG_CLOBJ Glyco_transf_28 3.8e-33 119.1 sp|A5I5J5|MURG_CLOBH Glyco_transf_28 3.8e-33 119.1 sp|A7FX11|MURG_CLOB1 Glyco_transf_28 3.8e-33 119.1 sp|Q4ZNZ0|MURG_PSEU2 Glyco_transf_28 4.3e-33 119.0 sp|A4XI04|MURG_CALS8 Glyco_transf_28 4.6e-33 118.9 sp|A0R016|MURG_MYCS2 Glyco_transf_28 5.1e-33 118.7 sp|A8YUN9|MURG_LACH4 Glyco_transf_28 5.6e-33 118.6 sp|A1SL80|MURG_NOCSJ Glyco_transf_28 5.8e-33 118.5 sp|Q88N76|MURG_PSEPK Glyco_transf_28 8.3e-33 118.0 sp|B1KYH7|MURG_CLOBM Glyco_transf_28 8.7e-33 118.0 sp|Q24TE6|MURG_DESHY Glyco_transf_28 9e-33 117.9 sp|Q3K744|MURG_PSEPF Glyco_transf_28 9.4e-33 117.9 sp|B1J3L2|MURG_PSEPW Glyco_transf_28 1e-32 117.8 sp|B0K3H0|MURG_THEPX Glyco_transf_28 1e-32 117.8 sp|B0K8K7|MURG_THEP3 Glyco_transf_28 1e-32 117.7 sp|A3DE27|MURG_CLOTH Glyco_transf_28 1.4e-32 117.3 sp|A1TAW8|MURG_MYCVP Glyco_transf_28 1.6e-32 117.1 sp|B8FT56|MURG_DESHD Glyco_transf_28 2.3e-32 116.6 sp|Q9RWP0|MURG_DEIRA Glyco_transf_28 2.5e-32 116.5 sp|B2I1J5|MURG_ACIBC Glyco_transf_28 2.5e-32 116.5 sp|B0V9F5|MURG_ACIBY Glyco_transf_28 2.5e-32 116.5 sp|B7GV73|MURG_ACIB3 Glyco_transf_28 2.5e-32 116.5 sp|B7ICE5|MURG_ACIB5 Glyco_transf_28 2.5e-32 116.5 sp|A5D145|MURG_PELTS Glyco_transf_28 2.9e-32 116.3 sp|A3M9Y1|MURG_ACIBT Glyco_transf_28 2.9e-32 116.3 sp|A9KK83|MURG_CLOPH Glyco_transf_28 3.6e-32 116.0 sp|C3KCT0|MURG_PSEFS Glyco_transf_28 4.5e-32 115.7 sp|Q03EY2|MURG_PEDPA Glyco_transf_28 4.8e-32 115.6 sp|A0QF52|MURG_MYCA1 Glyco_transf_28 5.3e-32 115.4 sp|Q04B72|MURG_LACDB Glyco_transf_28 5.3e-32 115.4 sp|Q1GAT5|MURG_LACDA Glyco_transf_28 6.7e-32 115.1 sp|Q4K6J3|MURG_PSEF5 Glyco_transf_28 7.5e-32 114.9 sp|B0VNZ9|MURG_ACIBS Glyco_transf_28 8.8e-32 114.7 sp|Q5FKV2|MURG_LACAC Glyco_transf_28 1.1e-31 114.5 sp|A0KPX2|MURG_AERHH Glyco_transf_28 1.2e-31 114.3 sp|A1WYU3|MURG_HALHL Glyco_transf_28 1.2e-31 114.3 sp|Q73YQ8|MURG_MYCPA Glyco_transf_28 1.2e-31 114.3 sp|B1MXW0|MURG_LEUCK Glyco_transf_28 1.3e-31 114.2 sp|Q604V7|MURG_METCA Glyco_transf_28 1.3e-31 114.2 sp|B2V1X5|MURG_CLOBA Glyco_transf_28 1.7e-31 113.8 sp|A1U3F8|MURG_MARAV Glyco_transf_28 2.1e-31 113.5 sp|A8MH36|MURG_ALKOO Glyco_transf_28 2.1e-31 113.5 sp|B2TLE0|MURG_CLOBB Glyco_transf_28 2.6e-31 113.2 sp|A4SI56|MURG_AERS4 Glyco_transf_28 3e-31 113.0 sp|C4Z1B5|MURG_EUBE2 Glyco_transf_28 3.1e-31 113.0 sp|C1DQ99|MURG_AZOVD Glyco_transf_28 3.1e-31 112.9 sp|Q6F703|MURG_ACIAD Glyco_transf_28 3.2e-31 112.9 sp|B1YIT7|MURG_EXIS2 Glyco_transf_28 5e-31 112.3 sp|C1CW40|MURG_DEIDV Glyco_transf_28 5.1e-31 112.2 sp|Q47QW9|MURG_THEFY Glyco_transf_28 5.3e-31 112.2 sp|A0Q182|MURG_CLONN Glyco_transf_28 5.3e-31 112.2 sp|A1KKJ6|MURG_MYCBP Glyco_transf_28 5.3e-31 112.2 sp|C1AQ69|MURG_MYCBT Glyco_transf_28 5.3e-31 112.2 sp|Q7VEP8|MURG_MYCBO Glyco_transf_28 6.3e-31 111.9 sp|B0S0Z5|MURG_FINM2 Glyco_transf_28 7.7e-31 111.7 sp|B7UZJ0|MURG_PSEA8 Glyco_transf_28 7.7e-31 111.7 sp|Q02H28|MURG_PSEAB Glyco_transf_28 7.7e-31 111.7 sp|Q9HW01|MURG_PSEAE Glyco_transf_28 7.8e-31 111.6 sp|A0PTI7|MURG_MYCUA Glyco_transf_28 8.2e-31 111.6 sp|A6VB85|MURG_PSEA7 Glyco_transf_28 8.5e-31 111.5 sp|A9KER3|MURG_COXBN Glyco_transf_28 8.6e-31 111.5 sp|A9NA44|MURG_COXBR Glyco_transf_28 8.6e-31 111.5 sp|B6J2Q3|MURG_COXB2 Glyco_transf_28 8.6e-31 111.5 sp|B6J5K3|MURG_COXB1 Glyco_transf_28 8.6e-31 111.5 sp|Q820X3|MURG_COXBU Glyco_transf_28 9.1e-31 111.4 sp|Q042P9|MURG_LACGA Glyco_transf_28 9.6e-31 111.4 sp|B2HGR6|MURG_MYCMM Glyco_transf_28 1e-30 111.2 sp|Q0VS02|MURG_ALCBS Glyco_transf_28 1.1e-30 111.2 sp|Q0RNP1|MURG_FRAAA Glyco_transf_28 1.2e-30 111.0 sp|Q2RK79|MURG_MOOTA Glyco_transf_28 1.3e-30 111.0 sp|Q1IXV9|MURG_DEIGD Glyco_transf_28 1.3e-30 111.0 sp|Q74JY4|MURG_LACJO Glyco_transf_28 1.5e-30 110.7 sp|A5MZ55|MURG_CLOK5 Glyco_transf_28 1.8e-30 110.5 sp|A1TKD1|MURG_ACIAC Glyco_transf_28 1.9e-30 110.4 sp|B7J0L2|MURG_BORBZ Glyco_transf_28 1.9e-30 110.4 sp|O51708|MURG_BORBU Glyco_transf_28 2e-30 110.3 sp|Q15Q17|MURG_PSEA6 Glyco_transf_28 2.1e-30 110.3 sp|A7A179|ATG26_YEAS7 Glyco_transf_28 2.3e-30 110.1 sp|Q1D0T0|MURG_MYXXD Glyco_transf_28 2.5e-30 110.0 sp|Q1QVG7|MURG_CHRSD Glyco_transf_28 2.6e-30 110.0 sp|A4VIH8|MURG_PSEU5 Glyco_transf_28 2.7e-30 109.9 sp|Q38XM8|MURG_LACSS Glyco_transf_28 3.3e-30 109.6 sp|A1SU19|MURG_PSYIN Glyco_transf_28 3.4e-30 109.6 sp|Q31I59|MURG_THICR Glyco_transf_28 3.4e-30 109.6 sp|Q04ET0|MURG_OENOB Glyco_transf_28 3.4e-30 109.6 sp|Q2KVG0|MURG_BORA1 Glyco_transf_28 3.6e-30 109.5 sp|Q5R0M1|MURG_IDILO Glyco_transf_28 3.7e-30 109.5 sp|Q5WAE4|MURG_BACSK Glyco_transf_28 3.7e-30 109.5 sp|Q2JD50|MURG_FRASC Glyco_transf_28 3.8e-30 109.4 sp|B5ELC3|MURG_ACIF5 Glyco_transf_28 3.8e-30 109.4 sp|B7J3V2|MURG_ACIF2 Glyco_transf_28 3.9e-30 109.4 sp|Q0SM88|MURG_BORAP Glyco_transf_28 4.2e-30 109.3 sp|Q4FQV9|MURG_PSYA2 Glyco_transf_28 4.5e-30 109.2 sp|Q730T5|MURG2_BACC1 Glyco_transf_28 4.8e-30 109.1 sp|Q1LSW5|MURG_BAUCH Glyco_transf_28 5.4e-30 108.9 sp|Q9WY74|MURG_THEMA Glyco_transf_28 5.5e-30 108.9 sp|B1L9S1|MURG_THESQ Glyco_transf_28 5.5e-30 108.9 sp|A5IKI9|MURG_THEP1 Glyco_transf_28 5.9e-30 108.8 sp|A4FLW0|MURG_SACEN Glyco_transf_28 6.6e-30 108.6 sp|Q9RNM6|MURG_ZYMMO Glyco_transf_28 7.1e-30 108.5 sp|Q06321|ATG26_YEAST Glyco_transf_28 7.2e-30 108.5 sp|Q9PF81|MURG_XYLFA Glyco_transf_28 7.9e-30 108.4 sp|Q5GW41|MURG_XANOR Glyco_transf_28 8.9e-30 108.2 sp|B2S3B6|MURG_TREPS Glyco_transf_28 8.9e-30 108.2 sp|O83535|MURG_TREPA Glyco_transf_28 9.2e-30 108.2 sp|Q0AJE1|MURG_NITEC Glyco_transf_28 1e-29 108.1 sp|B3PCM0|MURG_CELJU Glyco_transf_28 1.2e-29 107.8 sp|A5G8K0|MURG_GEOUR Glyco_transf_28 1.2e-29 107.8 sp|A5U4I0|MURG_MYCTA Glyco_transf_28 1.2e-29 107.8 sp|O06224|MURG_MYCTU Glyco_transf_28 1.3e-29 107.7 sp|Q4JW95|MURG_CORJK Glyco_transf_28 1.4e-29 107.6 sp|Q97GY4|MURG_CLOAB Glyco_transf_28 1.5e-29 107.4 sp|Q9Z702|MURG_CHLPN Glyco_transf_28 1.6e-29 107.4 sp|Q1Q944|MURG_PSYCK Glyco_transf_28 1.7e-29 107.3 sp|C0RE70|MURG_BRUMB Glyco_transf_28 1.7e-29 107.3 sp|Q8YI66|MURG_BRUME Glyco_transf_28 1.7e-29 107.3 sp|Q3BXF2|MURG_XANC5 Glyco_transf_28 1.9e-29 107.2 sp|B2S6Q4|MURG_BRUA1 Glyco_transf_28 1.9e-29 107.2 sp|Q2YLY5|MURG_BRUA2 Glyco_transf_28 1.9e-29 107.2 sp|Q57C78|MURG_BRUAB Glyco_transf_28 1.9e-29 107.1 sp|Q660A8|MURG_BORGA Glyco_transf_28 1.9e-29 107.1 sp|B8I6H3|MURG_CLOCE Glyco_transf_28 1.9e-29 107.1 sp|A5VRH7|MURG_BRUO2 Glyco_transf_28 1.9e-29 107.1 sp|B0CHM0|MURG_BRUSI Glyco_transf_28 2e-29 107.1 sp|A0JV94|MURG_ARTS2 Glyco_transf_28 2e-29 107.1 sp|A6TS61|MURG_ALKMQ Glyco_transf_28 2e-29 107.1 sp|C5D4C2|MURG_GEOSW Glyco_transf_28 2e-29 107.1 sp|A9M690|MURG_BRUC2 Glyco_transf_28 2e-29 107.0 sp|Q8PPA8|MURG_XANAC Glyco_transf_28 2e-29 107.0 sp|Q8CY39|MURG_BRUSU Glyco_transf_28 2.2e-29 106.9 sp|A1WRL1|MURG_VEREI Glyco_transf_28 2.7e-29 106.7 sp|Q812T8|MURG2_BACCR Glyco_transf_28 2.9e-29 106.6 sp|B0U4Z7|MURG_XYLFM Glyco_transf_28 3.1e-29 106.5 sp|A4IJS4|MURG_GEOTN Glyco_transf_28 3.2e-29 106.4 sp|Q2NZB8|MURG_XANOM Glyco_transf_28 4.6e-29 105.9 sp|A5FIY3|MURG_FLAJ1 Glyco_transf_28 6e-29 105.5 sp|Q39JX0|MURG_BURS3 Glyco_transf_28 6.9e-29 105.3 sp|C1A0X5|MURG_RHOE4 Glyco_transf_28 7.3e-29 105.3 sp|Q748D6|MURG_GEOSL Glyco_transf_28 8.2e-29 105.1 sp|Q820Y4|MURG_TROWT Glyco_transf_28 8.2e-29 105.1 sp|Q83HK1|MURG_TROW8 Glyco_transf_28 8.3e-29 105.1 sp|A4QFM3|MURG_CORGB Glyco_transf_28 8.5e-29 105.0 sp|Q39YL9|MURG_GEOMG Glyco_transf_28 8.5e-29 105.0 sp|A1R0I9|MURG_BORT9 Glyco_transf_28 8.7e-29 105.0 sp|Q3AAE6|MURG_CARHZ Glyco_transf_28 9.1e-29 104.9 sp|Q8NNN5|MURG_CORGL Glyco_transf_28 9.1e-29 104.9 sp|Q0TNP7|MURG_CLOP1 Glyco_transf_28 9.1e-29 104.9 sp|Q8XIQ1|MURG_CLOPE Glyco_transf_28 9.4e-29 104.9 sp|Q0SRB4|MURG_CLOPS Glyco_transf_28 1e-28 104.8 sp|Q5YYX9|MURG_NOCFA Glyco_transf_28 1.1e-28 104.7 sp|A7HH67|MURG_ANADF Glyco_transf_28 1.1e-28 104.6 sp|Q82VS3|MURG_NITEU Glyco_transf_28 1.2e-28 104.6 sp|B0RVA5|MURG_XANCB Glyco_transf_28 1.2e-28 104.6 sp|Q2SZI3|MURG_BURTA Glyco_transf_28 1.2e-28 104.5 sp|Q11GS5|MURG_MESSB Glyco_transf_28 1.3e-28 104.5 sp|Q4UQX0|MURG_XANC8 Glyco_transf_28 1.3e-28 104.5 sp|Q8PCK0|MURG_XANCP Glyco_transf_28 1.3e-28 104.4 sp|A3NZL5|MURG_BURP0 Glyco_transf_28 1.5e-28 104.3 sp|Q98KB3|MURG_RHILO Glyco_transf_28 1.5e-28 104.2 sp|Q0A6K2|MURG_ALHEH Glyco_transf_28 1.5e-28 104.2 sp|A5IGA6|MURG_LEGPC Glyco_transf_28 1.6e-28 104.2 sp|Q5L3H6|MURG_GEOKA Glyco_transf_28 1.7e-28 104.1 sp|A0LTM3|MURG_ACIC1 Glyco_transf_28 2.1e-28 103.7 sp|Q3A2G6|MURG_PELCD Glyco_transf_28 2.2e-28 103.7 sp|Q0AYQ8|MURG_SYNWW Glyco_transf_28 2.5e-28 103.5 sp|Q1LIM6|MURG_RALME Glyco_transf_28 2.6e-28 103.5 sp|Q92NL9|MURG_RHIME Glyco_transf_28 2.8e-28 103.4 sp|Q72JP9|MURG_THET2 Glyco_transf_28 2.8e-28 103.4 sp|A1R5F8|MURG_ARTAT Glyco_transf_28 2.9e-28 103.3 sp|Q87AF9|MURG_XYLFT Glyco_transf_28 3e-28 103.3 sp|B2I9B3|MURG_XYLF2 Glyco_transf_28 3.3e-28 103.1 sp|A6WZQ6|MURG_OCHA4 Glyco_transf_28 3.3e-28 103.1 sp|A1V0R8|MURG_BURMS Glyco_transf_28 3.3e-28 103.1 sp|A2S5U5|MURG_BURM9 Glyco_transf_28 3.3e-28 103.1 sp|A3MR63|MURG_BURM7 Glyco_transf_28 3.3e-28 103.1 sp|Q62GS7|MURG_BURMA Glyco_transf_28 3.3e-28 103.1 sp|Q63QJ7|MURG_BURPS Glyco_transf_28 3.3e-28 103.1 sp|A3NDW4|MURG_BURP6 Glyco_transf_28 3.9e-28 102.9 sp|Q3J789|MURG_NITOC Glyco_transf_28 3.9e-28 102.9 sp|Q8K9T4|MURG_BUCAP Glyco_transf_28 4e-28 102.9 sp|B9M172|MURG_GEOSF Glyco_transf_28 4e-28 102.9 sp|B5EBQ1|MURG_GEOBB Glyco_transf_28 4.2e-28 102.8 sp|Q3JND8|MURG_BURP1 Glyco_transf_28 4.2e-28 102.8 sp|Q1IKH0|MURG_ACIBL Glyco_transf_28 4.2e-28 102.8 sp|P74657|MURG_SYNY3 Glyco_transf_28 4.4e-28 102.7 sp|B1YSS4|MURG_BURA4 Glyco_transf_28 4.4e-28 102.7 sp|Q0BIK1|MURG_BURCM Glyco_transf_28 5.7e-28 102.4 sp|Q6HDR3|MURG2_BACHK Glyco_transf_28 5.7e-28 102.4 sp|Q81JE6|MURG2_BACAN Glyco_transf_28 6.2e-28 102.2 sp|Q0K6M4|MURG_RALEH Glyco_transf_28 6.4e-28 102.2 sp|Q5WY98|MURG_LEGPL Glyco_transf_28 6.5e-28 102.2 sp|A0RIN0|MURG3_BACAH Glyco_transf_28 6.7e-28 102.1 sp|Q7W4B4|MURG_BORPA Glyco_transf_28 6.7e-28 102.1 sp|Q5X6U5|MURG_LEGPA Glyco_transf_28 6.7e-28 102.1 sp|Q5ZXC4|MURG_LEGPH Glyco_transf_28 6.9e-28 102.1 sp|A6M1F0|MURG_CLOB8 Glyco_transf_28 7.7e-28 101.9 sp|B8D7B9|MURG_BUCAT Glyco_transf_28 7.7e-28 101.9 sp|P57311|MURG_BUCAI Glyco_transf_28 8.3e-28 101.8 sp|Q7VUQ3|MURG_BORPE Glyco_transf_28 8.4e-28 101.8 sp|Q7WFS2|MURG_BORBR Glyco_transf_28 8.7e-28 101.8 sp|B2SYX6|MURG_BURPP Glyco_transf_28 9.7e-28 101.6 sp|B0B8Y7|MURG_CHLT2 Glyco_transf_28 9.7e-28 101.6 sp|B0BAL6|MURG_CHLTB Glyco_transf_28 1e-27 101.5 sp|B8D914|MURG_BUCA5 Glyco_transf_28 1.1e-27 101.5 sp|Q47AA4|MURG_DECAR Glyco_transf_28 1.2e-27 101.4 sp|A4JB94|MURG_BURVG Glyco_transf_28 1.3e-27 101.2 sp|Q2Y638|MURG_NITMU Glyco_transf_28 1.5e-27 101.0 sp|B2JHG0|MURG_BURP8 Glyco_transf_28 1.5e-27 101.0 sp|O84766|MURG_CHLTR Glyco_transf_28 1.5e-27 101.0 sp|Q3KKT1|MURG_CHLTA Glyco_transf_28 1.8e-27 100.8 sp|A1AU61|MURG_PELPD Glyco_transf_28 1.8e-27 100.8 sp|Q2LR48|MURG_SYNAS Glyco_transf_28 1.8e-27 100.7 sp|Q2G995|MURG_NOVAD Glyco_transf_28 1.9e-27 100.7 sp|A5EY03|MURG_DICNV Glyco_transf_28 2e-27 100.6 sp|Q8FNU0|MURG_COREF Glyco_transf_28 2e-27 100.6 sp|A9AI96|MURG_BURM1 Glyco_transf_28 2.3e-27 100.4 sp|Q21SW9|MURG_RHOFD Glyco_transf_28 2.6e-27 100.2 sp|B5YFT4|MURG_THEYD Glyco_transf_28 2.7e-27 100.2 sp|A7KAK6|ATG26_PICAN Glyco_transf_28 3.1e-27 100.0 sp|Q46WZ4|MURG_RALEJ Glyco_transf_28 3.1e-27 100.0 sp|Q13TZ2|MURG_BURXL Glyco_transf_28 3.3e-27 99.9 sp|C6DZK6|MURG_GEOSM Glyco_transf_28 4.4e-27 99.5 sp|A8GVJ7|MURG_RICB8 Glyco_transf_28 4.4e-27 99.5 sp|Q1RI55|MURG_RICBR Glyco_transf_28 5.2e-27 99.2 sp|B5ZWJ4|MURG_RHILW Glyco_transf_28 5.4e-27 99.2 sp|B0JFZ1|MURG_MICAN Glyco_transf_28 5.8e-27 99.1 sp|Q31KS7|MURG_SYNE7 Glyco_transf_28 6e-27 99.1 sp|Q5N140|MURG_SYNP6 Glyco_transf_28 6.4e-27 99.0 sp|Q14I26|MURG_FRAT1 Glyco_transf_28 6.4e-27 99.0 sp|Q5NGM4|MURG_FRATT Glyco_transf_28 6.5e-27 98.9 sp|Q493Q1|MURG_BLOPB Glyco_transf_28 6.5e-27 98.9 sp|Q92I58|MURG_RICCN Glyco_transf_28 6.5e-27 98.9 sp|C3PND5|MURG_RICAE Glyco_transf_28 6.5e-27 98.9 sp|C4K2A6|MURG_RICPU Glyco_transf_28 6.6e-27 98.9 sp|B2S1A8|MURG_BORHD Glyco_transf_28 6.6e-27 98.9 sp|A8GRZ6|MURG_RICRS Glyco_transf_28 6.6e-27 98.9 sp|B0BXF6|MURG_RICRO Glyco_transf_28 6.7e-27 98.9 sp|Q3SMH3|MURG_THIDA Glyco_transf_28 6.7e-27 98.9 sp|Q21MG9|MURG_SACD2 Glyco_transf_28 8.7e-27 98.5 sp|B1IAM4|MURG_STRPI Glyco_transf_28 8.7e-27 98.5 sp|Q04LK0|MURG_STRP2 Glyco_transf_28 8.7e-27 98.5 sp|Q8DQM1|MURG_STRR6 Glyco_transf_28 8.7e-27 98.5 sp|B2IN77|MURG_STRPS Glyco_transf_28 8.8e-27 98.5 sp|C1CQG5|MURG_STRZT Glyco_transf_28 8.9e-27 98.5 sp|C1CD52|MURG_STRZJ Glyco_transf_28 9e-27 98.5 sp|Q634T3|MURG2_BACCZ Glyco_transf_28 9e-27 98.5 sp|A1VST6|MURG_POLNA Glyco_transf_28 9e-27 98.5 sp|A6UB85|MURG_SINMW Glyco_transf_28 9.2e-27 98.5 sp|B9DNZ7|MURG_STACT Glyco_transf_28 1e-26 98.3 sp|B4E6J2|MURG_BURCJ Glyco_transf_28 1.1e-26 98.3 sp|B1JV78|MURG_BURCC Glyco_transf_28 1.1e-26 98.2 sp|C1C649|MURG_STRP7 Glyco_transf_28 1.1e-26 98.2 sp|Q2S9Z2|MURG_HAHCH Glyco_transf_28 1.1e-26 98.2 sp|B5E2Z9|MURG_STRP4 Glyco_transf_28 1.1e-26 98.2 sp|C1CJF3|MURG_STRZP Glyco_transf_28 1.1e-26 98.1 sp|A9I4V2|MURG_BORPD Glyco_transf_28 1.3e-26 98.0 sp|B0RIJ3|MURG_CLAMS Glyco_transf_28 1.4e-26 97.9 sp|P0CB60|MURG_STRPN Glyco_transf_28 1.4e-26 97.9 sp|B8ZMZ7|MURG_STRPJ Glyco_transf_28 1.4e-26 97.8 sp|B3PTW0|MURG_RHIE6 Glyco_transf_28 1.5e-26 97.8 sp|Q0SHS1|MURG_RHOSR Glyco_transf_28 1.5e-26 97.7 sp|Q313Q3|MURG_DESDG Glyco_transf_28 1.6e-26 97.7 sp|A8F1I4|MURG_RICM5 Glyco_transf_28 1.6e-26 97.7 sp|A6H195|MURG_FLAPJ Glyco_transf_28 1.7e-26 97.6 sp|A0K486|MURG_BURCH Glyco_transf_28 1.7e-26 97.6 sp|Q1BZG3|MURG_BURCA Glyco_transf_28 1.7e-26 97.6 sp|Q12EL5|MURG_POLSJ Glyco_transf_28 1.8e-26 97.5 sp|Q8UDM8|MURG_AGRT5 Glyco_transf_28 2e-26 97.3 sp|B7K5Z6|MURG_CYAP8 Glyco_transf_28 2.1e-26 97.3 sp|Q2NCZ0|MURG_ERYLH Glyco_transf_28 2.1e-26 97.3 sp|Q9Y751|ATG26_PICPG Glyco_transf_28 2.1e-26 97.3 sp|Q5P6Z6|MURG_AZOSE Glyco_transf_28 2.3e-26 97.1 sp|B6IRG2|MURG_RHOCS Glyco_transf_28 2.4e-26 97.1 sp|A7TF84|ATG26_VANPO Glyco_transf_28 2.4e-26 97.1 sp|Q2S528|MURG_SALRD Glyco_transf_28 2.5e-26 97.0 sp|B2SGS8|MURG_FRATM Glyco_transf_28 2.6e-26 97.0 sp|A4IX64|MURG_FRATW Glyco_transf_28 2.7e-26 96.9 sp|Q67Q48|MURG_SYMTH Glyco_transf_28 3.1e-26 96.7 sp|Q6C8M8|ATG26_YARLI Glyco_transf_28 3.1e-26 96.7 sp|C1AU55|MURG_RHOOB Glyco_transf_28 3.2e-26 96.7 sp|B3E3Y2|MURG_GEOLS Glyco_transf_28 3.2e-26 96.7 sp|A0Q766|MURG_FRATN Glyco_transf_28 3.2e-26 96.7 sp|B1WVP7|MURG_CYAA5 Glyco_transf_28 3.8e-26 96.5 sp|B0TY93|MURG_FRAP2 Glyco_transf_28 3.8e-26 96.4 sp|Q68WW7|MURG_RICTY Glyco_transf_28 4.1e-26 96.4 sp|Q6GGZ0|MURG_STAAR Glyco_transf_28 5e-26 96.1 sp|B9JH51|MURG_AGRRK Glyco_transf_28 5.6e-26 95.9 sp|Q6BN88|ATG26_DEBHA Glyco_transf_28 6.1e-26 95.8 sp|A7NDC0|MURG_FRATF Glyco_transf_28 6.1e-26 95.8 sp|Q0BL37|MURG_FRATO Glyco_transf_28 6.1e-26 95.8 sp|Q2A2I7|MURG_FRATH Glyco_transf_28 6.5e-26 95.7 sp|A5CS51|MURG_CLAM3 Glyco_transf_28 6.6e-26 95.7 sp|Q9ZDC0|MURG_RICPR Glyco_transf_28 7.1e-26 95.6 sp|Q9ZK59|MURG_HELPJ Glyco_transf_28 7.7e-26 95.5 sp|B7KGH1|MURG_CYAP7 Glyco_transf_28 7.9e-26 95.4 sp|Q4L6C8|MURG_STAHJ Glyco_transf_28 9.3e-26 95.2 sp|B4UES1|MURG_ANASK Glyco_transf_28 9.8e-26 95.1 sp|B9JY54|MURG_AGRVS Glyco_transf_28 1.3e-25 94.7 sp|Q1ME33|MURG_RHIL3 Glyco_transf_28 1.4e-25 94.6 sp|A8EZ14|MURG_RICCK Glyco_transf_28 1.6e-25 94.5 sp|Q5A950|ATG26_CANAL Glyco_transf_28 1.6e-25 94.4 sp|Q2IG27|MURG_ANADE Glyco_transf_28 2e-25 94.1 sp|B8J8E8|MURG_ANAD2 Glyco_transf_28 2.1e-25 94.0 sp|C3MEM9|MURG_RHISN Glyco_transf_28 2.1e-25 94.0 sp|Q1CSB1|MURG_HELPH Glyco_transf_28 2.3e-25 93.9 sp|P59424|MURG_BUCBP Glyco_transf_28 2.3e-25 93.9 sp|Q2K6C1|MURG_RHIEC Glyco_transf_28 2.4e-25 93.9 sp|O25770|MURG_HELPY Glyco_transf_28 2.4e-25 93.9 sp|A0M527|MURG_GRAFK Glyco_transf_28 2.4e-25 93.9 sp|B2UUR4|MURG_HELPS Glyco_transf_28 2.4e-25 93.8 sp|Q3K2P3|MURG_STRA1 Glyco_transf_28 2.4e-25 93.8 sp|Q8CX15|MURG_STRA5 Glyco_transf_28 2.4e-25 93.8 sp|Q8E6P0|MURG_STRA3 Glyco_transf_28 2.4e-25 93.8 sp|Q7U346|MURG_BLOFL Glyco_transf_28 2.7e-25 93.7 sp|Q5HPC0|MURG_STAEQ Glyco_transf_28 2.7e-25 93.7 sp|Q8CMM3|MURG_STAES Glyco_transf_28 2.9e-25 93.6 sp|Q01Q48|MURG_SOLUE Glyco_transf_28 2.9e-25 93.6 sp|B5Z8F1|MURG_HELPG Glyco_transf_28 3.1e-25 93.5 sp|Q5L524|MURG_CHLAB Glyco_transf_28 3.2e-25 93.5 sp|Q255W4|MURG_CHLFF Glyco_transf_28 3.2e-25 93.5 sp|Q820E0|MURG_CHLCV Glyco_transf_28 3.3e-25 93.4 sp|Q8XVI7|MURG_RALSO Glyco_transf_28 3.6e-25 93.3 sp|Q4ULT6|MURG_RICFE Glyco_transf_28 3.9e-25 93.2 sp|Q49XM9|MURG_STAS1 Glyco_transf_28 3.9e-25 93.2 sp|Q119X8|MURG_TRIEI Glyco_transf_28 4e-25 93.2 sp|Q03L97|MURG_STRTD Glyco_transf_28 4e-25 93.1 sp|A0L5N1|MURG_MAGSM Glyco_transf_28 4.2e-25 93.1 sp|B8H091|MURG_CAUCN Glyco_transf_28 4.2e-25 93.1 sp|Q9A5A1|MURG_CAUCR Glyco_transf_28 4.4e-25 93.0 sp|A8GNC7|MURG_RICAH Glyco_transf_28 4.7e-25 92.9 sp|B5XMA2|MURG_STRPZ Glyco_transf_28 4.8e-25 92.9 sp|B6JMZ5|MURG_HELP2 Glyco_transf_28 5e-25 92.8 sp|A7ERM5|ATG26_SCLS1 Glyco_transf_28 5.1e-25 92.8 sp|Q7V466|MURG_PROMM Glyco_transf_28 5.7e-25 92.7 sp|A2CDG1|MURG_PROM3 Glyco_transf_28 5.8e-25 92.6 sp|Q5M0D4|MURG_STRT1 Glyco_transf_28 5.8e-25 92.6 sp|Q5M4Y1|MURG_STRT2 Glyco_transf_28 5.8e-25 92.6 sp|A6QGX0|MURG_STAAE Glyco_transf_28 5.8e-25 92.6 sp|Q2FYL5|MURG_STAA8 Glyco_transf_28 5.8e-25 92.6 sp|Q5HG02|MURG_STAAC Glyco_transf_28 5.8e-25 92.6 sp|Q6G9E3|MURG_STAAS Glyco_transf_28 5.8e-25 92.6 sp|Q8NWR4|MURG_STAAW Glyco_transf_28 5.8e-25 92.6 sp|A5ISU9|MURG_STAA9 Glyco_transf_28 5.8e-25 92.6 sp|A6U1N8|MURG_STAA2 Glyco_transf_28 5.8e-25 92.6 sp|A7X2A2|MURG_STAA1 Glyco_transf_28 5.8e-25 92.6 sp|P65481|MURG_STAAM Glyco_transf_28 5.8e-25 92.6 sp|P65482|MURG_STAAN Glyco_transf_28 6e-25 92.6 sp|Q2YY01|MURG_STAAB Glyco_transf_28 6.2e-25 92.5 sp|Q7MAW5|MURG_PORGI Glyco_transf_28 6.3e-25 92.5 sp|A2RDL0|MURG_STRPG Glyco_transf_28 6.4e-25 92.5 sp|Q5XB05|MURG_STRP6 Glyco_transf_28 7.5e-25 92.3 sp|Q1JAT5|MURG_STRPB Glyco_transf_28 7.5e-25 92.3 sp|Q1JKY5|MURG_STRPC Glyco_transf_28 9.4e-25 91.9 sp|B2RIF1|MURG_PORG3 Glyco_transf_28 1e-24 91.8 sp|C0M6J2|MURG_STRE4 Glyco_transf_28 1.3e-24 91.5 sp|A1UTC5|MURG_BARBK Glyco_transf_28 1.3e-24 91.5 sp|C0MD54|MURG_STRS7 Glyco_transf_28 1.4e-24 91.3 sp|B4U1U4|MURG_STREM Glyco_transf_28 1.4e-24 91.3 sp|A5CWW1|MURG_VESOH Glyco_transf_28 1.5e-24 91.3 sp|A1A2E9|MURG_BIFAA Glyco_transf_28 1.5e-24 91.2 sp|P65483|MURG_STRP1 Glyco_transf_28 1.5e-24 91.2 sp|P65484|MURG_STRP8 Glyco_transf_28 1.5e-24 91.2 sp|Q48SK9|MURG_STRPM Glyco_transf_28 1.6e-24 91.2 sp|Q1J5S6|MURG_STRPF Glyco_transf_28 1.6e-24 91.2 sp|A8Z3Z7|MURG_STAAT Glyco_transf_28 1.6e-24 91.2 sp|Q2FH20|MURG_STAA3 Glyco_transf_28 1.6e-24 91.2 sp|Q1JG11|MURG_STRPD Glyco_transf_28 1.8e-24 91.0 sp|Q17WB5|MURG_HELAH Glyco_transf_28 1.9e-24 90.9 sp|C6BYG6|MURG_DESAD Glyco_transf_28 2.3e-24 90.7 sp|Q6G2Q5|MURG_BARHE Glyco_transf_28 2.3e-24 90.7 sp|A9IWA5|MURG_BART1 Glyco_transf_28 2.8e-24 90.4 sp|Q8CUL4|MURG_OCEIH Glyco_transf_28 2.8e-24 90.4 sp|A6LEU3|MURG_PARD8 Glyco_transf_28 3.1e-24 90.2 sp|Q6AE64|MURG_LEIXX Glyco_transf_28 3.3e-24 90.2 sp|A1K3U6|MURG_AZOSB Glyco_transf_28 3.9e-24 89.9 sp|Q9PLG2|MURG_CHLMU Glyco_transf_28 4.1e-24 89.9 sp|Q1GRX9|MURG_SPHAL Glyco_transf_28 4.2e-24 89.8 sp|Q751Z4|ATG26_ASHGO Glyco_transf_28 4.4e-24 89.8 sp|A4VTK4|MURG_STRSY Glyco_transf_28 4.4e-24 89.8 sp|A4VZT9|MURG_STRS2 Glyco_transf_28 4.6e-24 89.7 sp|B3QWT7|MURG_CHLT3 Glyco_transf_28 4.6e-24 89.7 sp|Q6AJ53|MURG_DESPS Glyco_transf_28 5e-24 89.6 sp|B9K6P7|MURG_THENN Glyco_transf_28 5.9e-24 89.3 sp|Q8K6R7|MURG_STRP3 Glyco_transf_28 6.9e-24 89.1 sp|Q54IL5|UGT52_DICDI Glyco_transf_28 7.5e-24 89.0 sp|B3DQN1|MURG_BIFLD Glyco_transf_28 7.5e-24 89.0 sp|Q8CY50|MURG_BIFLO Glyco_transf_28 7.8e-24 89.0 sp|Q6MIG1|MURG_BDEBA Glyco_transf_28 8.4e-24 88.9 sp|Q7U3U6|MURG_SYNPX Glyco_transf_28 8.9e-24 88.8 sp|B7GQ78|MURG_BIFLI Glyco_transf_28 9.3e-24 88.7 sp|Q0UY53|ATG26_PHANO Glyco_transf_28 1.2e-23 88.4 sp|Q8DVE2|MURG_STRMU Glyco_transf_28 1.2e-23 88.4 sp|Q6N411|MURG_RHOPA Glyco_transf_28 1.2e-23 88.3 sp|Q6CUV2|ATG26_KLULA Glyco_transf_28 1.3e-23 88.3 sp|Q1MPB9|MURG_LAWIP Glyco_transf_28 1.3e-23 88.3 sp|Q8R5N5|MURG_FUSNN Glyco_transf_28 1.4e-23 88.1 sp|Q3ANV3|MURG_CHLCH Glyco_transf_28 1.4e-23 88.1 sp|A8AW15|MURG_STRGC Glyco_transf_28 2.2e-23 87.5 sp|B8DP79|MURG_DESVM Glyco_transf_28 2.4e-23 87.4 sp|Q728U8|MURG_DESVH Glyco_transf_28 3e-23 87.1 sp|Q8NJS1|ATG26_LEPMC Glyco_transf_28 3.4e-23 86.9 sp|Q5KK25|ATG26_CRYNE Glyco_transf_28 3.5e-23 86.8 sp|Q8YZI3|MURG_ANASP Glyco_transf_28 3.6e-23 86.8 sp|B9DUV6|MURG_STRU0 Glyco_transf_28 3.8e-23 86.7 sp|Q3M935|MURG_ANAVT Glyco_transf_28 3.8e-23 86.7 sp|Q7VDZ2|MURG_PROMA Glyco_transf_28 3.9e-23 86.7 sp|Q0I6M0|MURG_SYNS3 Glyco_transf_28 4.2e-23 86.6 sp|B2J8J9|MURG_NOSP7 Glyco_transf_28 4.2e-23 86.6 sp|A5GPC2|MURG_SYNPW Glyco_transf_28 4.5e-23 86.5 sp|B4RFS0|MURG_PHEZH Glyco_transf_28 5.2e-23 86.3 sp|A1VBE8|MURG_DESVV Glyco_transf_28 6.2e-23 86.1 sp|B7IHN7|MURG_THEAB Glyco_transf_28 6.3e-23 86.0 sp|Q7S1I0|ATG26_NEUCR Glyco_transf_28 6.7e-23 85.9 sp|Q3AVX2|MURG_SYNS9 Glyco_transf_28 7.2e-23 85.8 sp|Q4WID6|ATG26_ASPFU Glyco_transf_28 7.2e-23 85.8 sp|A1CYS1|ATG26_NEOFI Glyco_transf_28 7.8e-23 85.7 sp|Q8DHY4|MURG_THEEB Glyco_transf_28 8.1e-23 85.7 sp|Q11RH5|MURG_CYTH3 Glyco_transf_28 8.2e-23 85.6 sp|A9BDG0|MURG_PROM4 Glyco_transf_28 9e-23 85.5 sp|Q73L91|MURG_TREDE Glyco_transf_28 9.7e-23 85.4 sp|C4XK69|MURG_DESMR Glyco_transf_28 1e-22 85.3 sp|A1BAL5|MURG_PARDP Glyco_transf_28 1.2e-22 85.1 sp|A3CLN6|MURG_STRSV Glyco_transf_28 1.2e-22 85.1 sp|A4SV74|MURG_POLSQ Glyco_transf_28 1.4e-22 84.9 sp|O67238|MURG_AQUAE Glyco_transf_28 1.6e-22 84.7 sp|Q2U0C3|ATG26_ASPOR Glyco_transf_28 1.6e-22 84.7 sp|Q3STS8|MURG_NITWN Glyco_transf_28 1.6e-22 84.7 sp|A1BJX8|MURG_CHLPD Glyco_transf_28 1.7e-22 84.6 sp|A1AWE8|MURG_RUTMC Glyco_transf_28 1.7e-22 84.6 sp|A1CFB3|ATG26_ASPCL Glyco_transf_28 2.1e-22 84.4 sp|B8IN64|MURG_METNO Glyco_transf_28 2.2e-22 84.3 sp|Q6G124|MURG_BARQU Glyco_transf_28 2.2e-22 84.2 sp|Q2W0H3|MURG_MAGSA Glyco_transf_28 2.8e-22 83.9 sp|Q0CKU4|ATG26_ASPTN Glyco_transf_28 2.8e-22 83.9 sp|B1ZU31|MURG_OPITP Glyco_transf_28 2.9e-22 83.9 sp|A6L071|MURG_BACV8 Glyco_transf_28 2.9e-22 83.9 sp|Q1QNU3|MURG_NITHX Glyco_transf_28 3.8e-22 83.5 sp|B2V7Y8|MURG_SULSY Glyco_transf_28 4.9e-22 83.1 sp|Q3AGT7|MURG_SYNSC Glyco_transf_28 5.2e-22 83.0 sp|Q5B4C9|ATG26_EMENI Glyco_transf_28 7.1e-22 82.6 sp|A5GW69|MURG_SYNR3 Glyco_transf_28 7.4e-22 82.6 sp|A4YZK3|MURG_BRASO Glyco_transf_28 7.6e-22 82.5 sp|Q2RVU4|MURG_RHORT Glyco_transf_28 7.8e-22 82.5 sp|Q2JW21|MURG_SYNJA Glyco_transf_28 8e-22 82.4 sp|A5EPK4|MURG_BRASB Glyco_transf_28 9.4e-22 82.2 sp|A7KAN4|ATG26_PENCW Glyco_transf_28 1.1e-21 82.0 sp|Q2JJR4|MURG_SYNJB Glyco_transf_28 1.2e-21 81.9 sp|A2QNQ5|ATG26_ASPNC Glyco_transf_28 1.3e-21 81.8 sp|Q0AMW7|MURG_MARMM Glyco_transf_28 1.5e-21 81.5 sp|Q812Y1|MURG3_BACCR Glyco_transf_28 1.8e-21 81.3 sp|B4SH49|MURG_PELPB Glyco_transf_28 2e-21 81.2 sp|B4S6Q9|MURG_PROA2 Glyco_transf_28 2.5e-21 80.8 sp|A8G2K3|MURG_PROM2 Glyco_transf_28 2.7e-21 80.8 sp|Q89FU7|MURG_BRAJA Glyco_transf_28 3.5e-21 80.4 sp|A0RHC3|MURG1_BACAH Glyco_transf_28 3.7e-21 80.3 sp|Q6MBS7|MURG_PARUW Glyco_transf_28 3.9e-21 80.2 sp|Q0BXU2|MURG_HYPNA Glyco_transf_28 4.2e-21 80.1 sp|Q8KGD4|MURG_CHLTE Glyco_transf_28 4.2e-21 80.1 sp|B3QLW4|MURG_CHLP8 Glyco_transf_28 5.4e-21 79.8 sp|A6T2F8|MURG_JANMA Glyco_transf_28 7.8e-21 79.2 sp|A5CEL6|MURG_ORITB Glyco_transf_28 7.9e-21 79.2 sp|Q8D2Z6|MURG_WIGBR Glyco_transf_28 9.1e-21 79.0 sp|B0UFC7|MURG_METS4 Glyco_transf_28 1.2e-20 78.6 sp|Q163J0|MURG_ROSDO Glyco_transf_28 1.2e-20 78.6 sp|A4G8T8|MURG_HERAR Glyco_transf_28 1.3e-20 78.6 sp|Q28NN5|MURG_JANSC Glyco_transf_28 1.3e-20 78.6 sp|Q31CY4|MURG_PROM9 Glyco_transf_28 1.3e-20 78.5 sp|B1ZGP4|MURG_METPB Glyco_transf_28 1.5e-20 78.3 sp|Q5LU63|MURG_SILPO Glyco_transf_28 1.6e-20 78.3 sp|B3CRE9|MURG_ORITI Glyco_transf_28 1.8e-20 78.1 sp|Q1GIV1|MURG_SILST Glyco_transf_28 2.1e-20 77.8 sp|Q1GZ01|MURG_METFK Glyco_transf_28 2.3e-20 77.7 sp|B3ET95|MURG_AMOA5 Glyco_transf_28 2.4e-20 77.7 sp|Q8A258|MURG_BACTN Glyco_transf_28 2.6e-20 77.5 sp|Q211T8|MURG_RHOPB Glyco_transf_28 2.9e-20 77.4 sp|Q2IYK8|MURG_RHOP2 Glyco_transf_28 3.9e-20 77.0 sp|B1LXZ4|MURG_METRJ Glyco_transf_28 4.4e-20 76.8 sp|A2BNZ2|MURG_PROMS Glyco_transf_28 5.1e-20 76.6 sp|C0R2W7|MURG_WOLWR Glyco_transf_28 5.1e-20 76.6 sp|Q73I55|MURG_WOLPM Glyco_transf_28 5.9e-20 76.4 sp|A9VWV3|MURG_METEP Glyco_transf_28 6.1e-20 76.3 sp|B7KSC1|MURG_METC4 Glyco_transf_28 6.5e-20 76.3 sp|A2C027|MURG_PROM1 Glyco_transf_28 6.7e-20 76.2 sp|A3PHS8|MURG_RHOS1 Glyco_transf_28 7.9e-20 76.0 sp|A4SH02|MURG_PROVI Glyco_transf_28 7.9e-20 76.0 sp|Q3J4M2|MURG_RHOS4 Glyco_transf_28 9.5e-20 75.7 sp|Q7V388|MURG_PROMP Glyco_transf_28 9.9e-20 75.7 sp|A3PAR5|MURG_PROM0 Glyco_transf_28 1e-19 75.6 sp|Q07PT3|MURG_RHOP5 Glyco_transf_28 1.1e-19 75.5 sp|Q133X1|MURG_RHOPS Glyco_transf_28 1.2e-19 75.4 sp|Q5LIJ7|MURG_BACFN Glyco_transf_28 1.2e-19 75.4 sp|Q64ZM1|MURG_BACFR Glyco_transf_28 1.3e-19 75.3 sp|A6LLF1|MURG_THEM4 Glyco_transf_28 1.6e-19 75.0 sp|Q46HH6|MURG_PROMT Glyco_transf_28 2.4e-19 74.4 sp|A4WQD5|MURG_RHOS5 Glyco_transf_28 3.2e-19 74.0 sp|A2BUH4|MURG_PROM5 Glyco_transf_28 6.6e-19 73.0 sp|Q5GS79|MURG_WOLTR Glyco_transf_28 1e-18 72.4 sp|Q7NPZ9|MURG_CHRVO Glyco_transf_28 1.2e-18 72.2 sp|Q1AVX3|MURG_RUBXD Glyco_transf_28 1.3e-18 72.1 sp|Q7MBC4|MURG_GLOVI Glyco_transf_28 1.6e-18 71.8 sp|Q7U322|MURG_HELHP Glyco_transf_28 2e-18 71.4 sp|Q3B129|MURG_PELLD Glyco_transf_28 4.3e-18 70.4 sp|Q30PK0|MURG_SULDN Glyco_transf_28 7.3e-18 69.6 sp|A2SCY5|MURG_METPP Glyco_transf_28 1.2e-17 68.9 sp|A0RP87|MURG_CAMFF Glyco_transf_28 1.6e-17 68.5 sp|B3CM87|MURG_WOLPP Glyco_transf_28 3.5e-17 67.4 sp|A5FUL0|MURG_ACICJ Glyco_transf_28 5.3e-17 66.8 sp|Q7MAD4|MURG_WOLSU Glyco_transf_28 8.9e-17 66.1 sp|B2KE54|MURG_ELUMP Glyco_transf_28 1.2e-16 65.6 sp|B3EIK8|MURG_CHLL2 Glyco_transf_28 1.4e-16 65.4 sp|A5UZT7|MURG_ROSS1 Glyco_transf_28 3.1e-16 64.4 sp|Q5FUJ5|MURG_GLUOX Glyco_transf_28 6.5e-16 63.3 sp|A6Q722|MURG_SULNB Glyco_transf_28 1.6e-15 62.0 sp|B8E325|MURG_DICTD Glyco_transf_28 2.2e-15 61.6 sp|A6Q579|MURG_NITSB Glyco_transf_28 3.4e-15 61.0 sp|Q0BV25|MURG_GRABC Glyco_transf_28 4e-15 60.8 sp|Q5PB22|MURG_ANAMM Glyco_transf_28 4.1e-15 60.7 sp|A7I265|MURG_CAMHC Glyco_transf_28 6.3e-15 60.1 sp|A9FI55|MURG_SORC5 Glyco_transf_28 8.2e-15 59.7 sp|B5YEL3|MURG_DICT6 Glyco_transf_28 1.2e-13 56.0 sp|A8FM88|MURG_CAMJ8 Glyco_transf_28 1.5e-13 55.6 sp|Q5HU62|MURG_CAMJR Glyco_transf_28 1.5e-13 55.6 sp|A1W027|MURG_CAMJJ Glyco_transf_28 1.5e-13 55.6 sp|Q9PNQ2|MURG_CAMJE Glyco_transf_28 3.5e-13 54.5 sp|A7H2Z9|MURG_CAMJD Glyco_transf_28 7.2e-13 53.4 sp|A8F4X1|MURG_THELT Glyco_transf_28 1.8e-10 45.7 sp|Q72R84|MURG_LEPIC Glyco_transf_28 1.8e-10 45.7 sp|Q8F4J1|MURG_LEPIN Glyco_transf_28 4.2e-09 41.3 sp|Q4FPK5|MURG_PELUB Glyco_transf_28 7.7e-09 40.4 sp|Q04V94|MURG_LEPBJ Glyco_transf_28 7.7e-09 40.4 sp|Q04Y82|MURG_LEPBL Glyco_transf_28 3.4e-07 35.1 sp|Q8TTI1|Y452_METAC Glyco_transf_28 2.3e-06 32.4 sp|Q8TTI0|Y453_METAC Glyco_transf_28 2.4e-06 32.3 sp|Q8PWF3|Y1636_METMA Glyco_transf_28 7.8e-06 30.6 sp|O34539|YJIC_BACSU Glyco_transf_28 2e-05 29.3 sp|Q53685|OLED_STRAT Glyco_transf_28 2e-05 29.3 sp|Q8PZB2|Y582_METMA Glyco_transf_28 7.8e-05 27.4 sp|P21686|CRTX_PANAN Glyco_transf_28 0.00056 24.6 sp|Q54387|MGT_STRLI Glyco_transf_28 0.00067 24.4 sp|Q01330|CRTX_ESCVU Glyco_transf_28 0.012 20.4 sp|O31853|YOJK_BACSU Glyco_transf_28 0.013 20.2 sp|B1YIY4|MTNA_EXIS2 Glyco_transf_28 0.016 19.9 sp|Q0WW21|UGAGT_ARATH Glyco_transf_28 0.021 19.6 sp|Q9Z565|ILVC1_STRCO Glyco_transf_28 0.022 19.5 sp|O05496|YDHE_BACSU Glyco_transf_28 0.022 19.4 sp|Q9FBT8|ILVC2_STRCO Glyco_transf_28 0.023 19.4 sp|Q9SBL1|HMNGT_SORBI Glyco_transf_28 0.067 17.9 sp|B1I2P1|MTNA_DESAP Glyco_transf_28 0.08 17.6 sp|A8AZU1|MUTL_STRGC Glyco_transf_28 0.085 17.6 sp|Q01198|LIGD_PSEPA Glyco_transf_28 0.087 17.5 sp|Q83RR8|NPD_SHIFL Glyco_transf_28 0.089 17.5 sp|C5D7U5|MTNA_GEOSW Glyco_transf_28 0.11 17.2 sp|A3CR14|MUTL_STRSV Glyco_transf_28 0.12 17.1 sp|Q88M09|MTNA_PSEPK Glyco_transf_28 0.13 17.0 sp|Q5L1E6|MTNA_GEOKA Glyco_transf_28 0.14 16.9 sp|Q8X8E0|NPD_ECO57 Glyco_transf_28 0.14 16.9 sp|P75960|NPD_ECOLI Glyco_transf_28 0.14 16.9 sp|Q5V467|MAMA1_HALMA Glyco_transf_28 0.14 16.9 sp|C0MAS4|MUTL_STRE4 Glyco_transf_28 0.14 16.8 sp|P0A2F2|NPD_SALTY Glyco_transf_28 0.14 16.8 sp|P0A2F3|NPD_SALTI Glyco_transf_28 0.15 16.8 sp|C0MGC4|MUTL_STRS7 Glyco_transf_28 0.15 16.8 sp|Q65KK2|MTNA_BACLD Glyco_transf_28 0.15 16.7 sp|B0KTX5|MTNA_PSEPG Glyco_transf_28 0.16 16.7 sp|B1J5G5|MTNA_PSEPW Glyco_transf_28 0.16 16.7 sp|A5W7G2|MTNA_PSEP1 Glyco_transf_28 0.17 16.6 sp|A4ILL1|MTNA_GEOTN Glyco_transf_28 0.18 16.5 sp|B4U0J7|MUTL_STREM Glyco_transf_28 0.2 16.4 sp|Q8FIM4|NPD_ECOL6 Glyco_transf_28 0.21 16.3 sp|B2GFJ7|ILVC_KOCRD Glyco_transf_28 0.21 16.3 sp|B1VZ72|ILVC_STRGG Glyco_transf_28 0.22 16.2 sp|Q59818|ILVC_STRAW Glyco_transf_28 0.26 16.0 sp|Q731R7|MTNA_BACC1 Glyco_transf_28 0.29 15.8 sp|B1GZW3|TPIS_UNCTG Glyco_transf_28 0.33 15.7 sp|Q2IWS4|GLYA_RHOP2 Glyco_transf_28 0.36 15.5 sp|A7GS56|MTNA_BACCN Glyco_transf_28 0.37 15.5 sp|B7KF23|ILVC_CYAP7 Glyco_transf_28 0.39 15.4 sp|A5W1E8|RNZ_PSEP1 Glyco_transf_28 0.45 15.2 sp|B3QSP0|ILVC_CHLT3 Glyco_transf_28 0.46 15.2 sp|O31662|MTNA_BACSU Glyco_transf_28 0.51 15.0 sp|C1F6Z5|ILVC_ACIC5 Glyco_transf_28 0.55 14.9 sp|Q2G3S7|PYRB_NOVAD Glyco_transf_28 0.57 14.9 sp|Q96LB3|IFT74_HUMAN Glyco_transf_28 0.58 14.9 sp|A9AZM5|ILVC_HERA2 Glyco_transf_28 0.64 14.7 sp|B8HSQ9|SURE_CYAP4 Glyco_transf_28 0.68 14.6 sp|Q3SPL2|UVRC_NITWN Glyco_transf_28 0.68 14.6 sp|A7Z3X0|MTNA_BACA2 Glyco_transf_28 0.69 14.6 sp|Q38W65|EFTS_LACSS Glyco_transf_28 0.69 14.6 sp|C3JYK1|TIG_PSEFS Glyco_transf_28 0.71 14.6 sp|Q1GZA6|BIOB_METFK Glyco_transf_28 0.71 14.6 sp|Q635P7|MTNA2_BACCZ Glyco_transf_28 0.71 14.6 sp|O48676|HTGT_ARATH Glyco_transf_28 0.72 14.6 sp|Q8YRC9|THIOG_ANASP Glyco_transf_28 0.73 14.5 sp|Q8DW43|ILVC_STRMU Glyco_transf_28 0.73 14.5 sp|Q81MJ6|MTNA2_BACAN Glyco_transf_28 0.74 14.5 sp|Q6N693|GLYA1_RHOPA Glyco_transf_28 0.75 14.5 sp|B0C915|MURD_ACAM1 Glyco_transf_28 0.76 14.5 sp|Q2KA25|GLYA_RHIEC Glyco_transf_28 0.77 14.5 sp|Q214H7|GLYA_RHOPB Glyco_transf_28 0.79 14.4 sp|B9DW70|MUTL_STRU0 Glyco_transf_28 0.8 14.4 sp|A0RI38|MTNA2_BACAH Glyco_transf_28 0.81 14.4 sp|Q6HED3|MTNA2_BACHK Glyco_transf_28 0.83 14.4 sp|Q1QIR5|UVRC_NITHX Glyco_transf_28 0.84 14.3 sp|A8AVN4|ILVC_STRGC Glyco_transf_28 0.86 14.3 sp|Q7V5V5|MURD_PROMM Glyco_transf_28 0.9 14.2 sp|Q47SB6|ILVC_THEFY Glyco_transf_28 0.9 14.2 sp|A4FMQ5|ILVC_SACEN Glyco_transf_28 0.91 14.2 sp|Q5V3R4|TRM56_HALMA Glyco_transf_28 0.91 14.2 sp|B8GW68|ENO_CAUCN Glyco_transf_28 0.91 14.2 sp|Q9A7J9|ENO_CAUCR Glyco_transf_28 0.92 14.2 sp|Q5V3F0|MAMA2_HALMA Glyco_transf_28 0.96 14.2 sp|B1LZ88|GLYA_METRJ Glyco_transf_28 0.98 14.1 sp|P94966|BIOB_METSK Glyco_transf_28 1 14.1 sp|Q3SHE4|ILVC_THIDA Glyco_transf_28 1.1 14.0 sp|Q07MT9|GLYA_RHOP5 Glyco_transf_28 1.1 14.0 sp|A9VRK3|MTNA1_BACWK Glyco_transf_28 1.1 13.9 sp|A9GW78|ILVC_SORC5 Glyco_transf_28 1.1 13.9 sp|Q5YRW2|ILVC_NOCFA Glyco_transf_28 1.2 13.9 sp|A3CQ86|ILVC_STRSV Glyco_transf_28 1.2 13.8 sp|Q21AW5|UVRC_RHOPB Glyco_transf_28 1.3 13.7 sp|Q81IK7|MTNA1_BACCR Glyco_transf_28 1.3 13.7 sp|Q5FNN2|PYRG_GLUOX Glyco_transf_28 1.3 13.7 sp|Q2S9V9|ILVC_HAHCH Glyco_transf_28 1.4 13.6 sp|Q17QH8|D39U1_BOVIN Glyco_transf_28 1.4 13.6 sp|Q2J6V2|ILVC_FRASC Glyco_transf_28 1.4 13.6 sp|A1WUW3|ILVC_HALHL Glyco_transf_28 1.4 13.6 sp|A8LMD0|PUR9_DINSH Glyco_transf_28 1.4 13.6 sp|C5BAT0|GCSP_EDWI9 Glyco_transf_28 1.4 13.6 sp|C1B2M1|ILVC_RHOOB Glyco_transf_28 1.4 13.6 sp|Q0S2H3|ILVC_RHOSR Glyco_transf_28 1.4 13.6 sp|A0R946|MTNA1_BACAH Glyco_transf_28 1.4 13.6 sp|Q81ZC2|MTNA1_BACAN Glyco_transf_28 1.5 13.6 sp|Q6HP54|MTNA1_BACHK Glyco_transf_28 1.5 13.5 sp|Q1MIU5|GLYA_RHIL3 Glyco_transf_28 1.5 13.5 sp|A8FCG5|MTNA_BACP2 Glyco_transf_28 1.6 13.5 sp|Q63CV4|ILVC2_BACCZ Glyco_transf_28 1.6 13.4 sp|A4J179|ILVC_DESRM Glyco_transf_28 1.6 13.4 sp|Q9V030|PAAD_PYRAB Glyco_transf_28 1.7 13.4 sp|Q81F27|ILVC2_BACCR Glyco_transf_28 1.7 13.4 sp|Q03IJ9|ILVC_STRTD Glyco_transf_28 1.7 13.4 sp|Q9F0I7|ILVC_STRTR Glyco_transf_28 1.7 13.4 sp|P26166|YBCC_RHOCA Glyco_transf_28 1.7 13.4 sp|B8I1T8|ILVC_CLOCE Glyco_transf_28 1.7 13.3 sp|A4VXL3|ILVC_STRSY Glyco_transf_28 1.7 13.3 sp|A4W3V8|ILVC_STRS2 Glyco_transf_28 1.8 13.3 sp|Q3B594|ILVC_PELLD Glyco_transf_28 1.8 13.3 sp|B1I8F2|MUTL_STRPI Glyco_transf_28 1.8 13.3 sp|B2IS10|MUTL_STRPS Glyco_transf_28 1.8 13.3 sp|B8ZKC9|MUTL_STRPJ Glyco_transf_28 1.8 13.3 sp|P0A3R1|HEXB_STRPN Glyco_transf_28 1.8 13.3 sp|P0A3R2|HEXB_STRR6 Glyco_transf_28 1.8 13.3 sp|Q04MR4|MUTL_STRP2 Glyco_transf_28 1.8 13.3 sp|C1CI68|MUTL_STRZP Glyco_transf_28 1.8 13.3 sp|C1CP43|MUTL_STRZT Glyco_transf_28 1.8 13.3 sp|Q8ZQE4|MACB_SALTY Glyco_transf_28 1.8 13.3 sp|Q57R58|MACB_SALCH Glyco_transf_28 1.8 13.2 sp|Q64550|UD11_RAT Glyco_transf_28 1.8 13.2 sp|B9JCX4|GLYA_AGRRK Glyco_transf_28 1.9 13.2 sp|Q8Z824|MACB_SALTI Glyco_transf_28 1.9 13.2 sp|O94475|YC67_SCHPO Glyco_transf_28 1.9 13.2 sp|P59837|RDH12_BOVIN Glyco_transf_28 1.9 13.2 sp|Q5PGK9|MACB_SALPA Glyco_transf_28 2 13.1 sp|Q02CM4|ILVC_SOLUE Glyco_transf_28 2 13.1 sp|Q669P6|NPD_YERPS Glyco_transf_28 2 13.1 sp|Q8ZFR1|NPD_YERPE Glyco_transf_28 2 13.1 sp|B9KYS1|ILVC_THERP Glyco_transf_28 2 13.1 sp|B4UAN4|ILVC_ANASK Glyco_transf_28 2 13.1 sp|B8J829|ILVC_ANAD2 Glyco_transf_28 2 13.1 sp|Q2IJB7|ILVC_ANADE Glyco_transf_28 2.1 13.1 sp|Q0RDI8|ILVC_FRAAA Glyco_transf_28 2.1 13.1 sp|P0ABQ0|COABC_ECOLI Glyco_transf_28 2.1 13.1 sp|P0ABQ1|COABC_ECOL6 Glyco_transf_28 2.1 13.1 sp|B2J2U6|ILVC_NOSP7 Glyco_transf_28 2.1 13.0 sp|Q89DG9|UVRC_BRAJA Glyco_transf_28 2.1 13.0 sp|Q2S0M9|ILVC_SALRD Glyco_transf_28 2.2 13.0 sp|Q7NH80|ILVC_GLOVI Glyco_transf_28 2.2 13.0 sp|Q8G6V1|ILVC2_BIFLO Glyco_transf_28 2.2 13.0 sp|Q2W698|ENO_MAGSA Glyco_transf_28 2.3 12.9 sp|Q63GN3|MTNA1_BACCZ Glyco_transf_28 2.3 12.9 sp|B0JRP2|ILVC_MICAN Glyco_transf_28 2.3 12.9 sp|C1CBX8|MUTL_STRZJ Glyco_transf_28 2.3 12.9 sp|Q3SLY0|BIOB_THIDA Glyco_transf_28 2.4 12.9 sp|B5E6C5|MUTL_STRP4 Glyco_transf_28 2.5 12.8 sp|B2J6I3|MURD_NOSP7 Glyco_transf_28 2.5 12.8 sp|Q5LXV0|ILVC_STRT1 Glyco_transf_28 2.5 12.8 sp|Q5M2F2|ILVC_STRT2 Glyco_transf_28 2.6 12.8 sp|C6A5E6|VATD_THESM Glyco_transf_28 2.6 12.8 sp|Q2RIS6|ILVC_MOOTA Glyco_transf_28 2.6 12.7 sp|Q3M859|THIOG_ANAVT Glyco_transf_28 2.6 12.7 sp|Q5GS59|RLME_WOLTR Glyco_transf_28 2.7 12.7 sp|B8G7X1|ILVC_CHLAD Glyco_transf_28 2.8 12.7 sp|C5C2I2|ILVC_BEUC1 Glyco_transf_28 2.8 12.6 sp|Q5SJ03|ILVC_THET8 Glyco_transf_28 2.8 12.6 sp|Q72JC8|ILVC_THET2 Glyco_transf_28 2.9 12.6 sp|Q4JUN9|ILVC_CORJK Glyco_transf_28 2.9 12.6 sp|Q2J0X3|UVRC_RHOP2 Glyco_transf_28 2.9 12.6 sp|Q02YY8|ILVC_LACLS Glyco_transf_28 2.9 12.6 sp|B9EBF4|ILVC_MACCJ Glyco_transf_28 2.9 12.6 sp|Q43716|UFOG_PETHY Glyco_transf_28 3 12.6 sp|A5GUT4|SURE_SYNR3 Glyco_transf_28 3 12.6 sp|Q1ARE4|ILVC_RUBXD Glyco_transf_28 3 12.5 sp|A6W7N6|ILVC_KINRD Glyco_transf_28 3 12.5 sp|Q11039|DEAD_MYCTU Glyco_transf_28 3 12.5 sp|Q13BM0|UVRC_RHOPS Glyco_transf_28 3.1 12.5 sp|Q8YMT3|SURE_ANASP Glyco_transf_28 3.1 12.5 sp|Q319M0|SURE_PROM9 Glyco_transf_28 3.1 12.5 sp|A9VFD5|MTNA2_BACWK Glyco_transf_28 3.2 12.5 sp|A1JRP2|NADA_YERE8 Glyco_transf_28 3.3 12.4 sp|A2RKQ6|ILVC_LACLM Glyco_transf_28 3.5 12.3 sp|Q32DZ9|MACB_SHIDS Glyco_transf_28 3.5 12.3 sp|A5CPY6|ILVC_CLAM3 Glyco_transf_28 3.5 12.3 sp|B0RIN6|ILVC_CLAMS Glyco_transf_28 3.7 12.3 sp|Q8K5J6|MUTL_STRP3 Glyco_transf_28 3.7 12.3 sp|Q99XN7|MUTL_STRP1 Glyco_transf_28 3.7 12.3 sp|B5XJ09|MUTL_STRPZ Glyco_transf_28 3.8 12.2 sp|A2RGV3|MUTL_STRPG Glyco_transf_28 3.8 12.2 sp|Q5X9H5|MUTL_STRP6 Glyco_transf_28 3.9 12.2 sp|Q3JYM6|MUTL_STRA1 Glyco_transf_28 3.9 12.2 sp|Q8E2R5|MUTL_STRA3 Glyco_transf_28 4 12.2 sp|Q9MB73|LGT_CITUN Glyco_transf_28 4.1 12.1 sp|A8G678|SURE_PROM2 Glyco_transf_28 4.2 12.1 sp|A9WP08|ILVC_RENSM Glyco_transf_28 4.8 11.9 sp|A9WC26|ILVC_CHLAA Glyco_transf_28 4.8 11.9 sp|B9LGM7|ILVC_CHLSY Glyco_transf_28 4.9 11.9 sp|A2BSJ2|SURE_PROMS Glyco_transf_28 5 11.8 sp|Q9LR44|IABG1_ARATH Glyco_transf_28 5.2 11.8 sp|O57731|VATD_PYRHO Glyco_transf_28 5.6 11.7 sp|A3PEA4|SURE_PROM0 Glyco_transf_28 6.8 11.4 sp|P75831|MACB_ECOLI Glyco_transf_28 7.6 11.2 sp|Q83LR7|MACB_SHIFL Glyco_transf_28 7.7 11.2 sp|Q3Z3Q4|MACB_SHISS Glyco_transf_28 9.5 10.9 sp|Q8XED0|MACB_ECO57 Glyco_transf_28 hmmer-3.1b2/easel/demotic/regress/fasta-profmark.out0000664361611702660230000002211312473612605022125 0ustar wheelerteddy2e-70 265.5 sp|P55685|Y4WG_RHISN sp|P55685|Y4WG_RHISN 3.6 33.0 sp|Q7SY73|ABH6B_XENLA sp|P55685|Y4WG_RHISN 2.8e-111 403.1 sp|Q1XGE2|HAC1_ASPOR sp|Q1XGE2|HAC1_ASPOR 7e-84 312.1 sp|Q8TFU8|HAC1_EMENI sp|Q1XGE2|HAC1_ASPOR 1.6e-13 78.7 sp|Q8TFF3|HAC1_TRIRE sp|Q1XGE2|HAC1_ASPOR 9.7e-06 52.0 sp|P41546|HAC1_YEAST sp|Q1XGE2|HAC1_ASPOR 4.5e-05 49.2 sp|O24646|HY5_ARATH sp|Q1XGE2|HAC1_ASPOR 0.0013 45.1 sp|Q3SZZ2|XBP1_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.0015 45.8 sp|A1L224|CR3L2_DANRE sp|Q1XGE2|HAC1_ASPOR 0.0022 45.6 sp|Q54WN7|BZPF_DICDI sp|Q1XGE2|HAC1_ASPOR 0.0026 43.3 sp|Q9SM50|HY5_SOLLC sp|Q1XGE2|HAC1_ASPOR 0.0062 43.8 sp|Q66HA2|CR3L1_RAT sp|Q1XGE2|HAC1_ASPOR 0.0079 43.4 sp|Q9Z125|CR3L1_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.01 43.1 sp|Q96BA8|CR3L1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.013 43.9 sp|A3LYI0|NST1_PICST sp|Q1XGE2|HAC1_ASPOR 0.016 42.4 sp|A2VD01|CR3L2_XENLA sp|Q1XGE2|HAC1_ASPOR 0.018 41.9 sp|Q08CW8|CR3L4_XENTR sp|Q1XGE2|HAC1_ASPOR 0.018 42.2 sp|Q70SY1|CR3L2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.018 42.2 sp|Q5RCM9|CR3L2_PONAB sp|Q1XGE2|HAC1_ASPOR 0.026 41.7 sp|Q8BH52|CR3L2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.029 40.6 sp|P17861|XBP1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.031 40.8 sp|P13346|FOSB_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.056 38.8 sp|Q8W191|HYH_ARATH sp|Q1XGE2|HAC1_ASPOR 0.064 39.8 sp|P53539|FOSB_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.069 40.3 sp|Q6QDP7|CR3L2_RAT sp|Q1XGE2|HAC1_ASPOR 0.08 39.9 sp|Q3SYZ3|CR3L3_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.091 39.3 sp|Q9TUB3|FOSB_CANFA sp|Q1XGE2|HAC1_ASPOR 0.11 39.1 sp|Q06507|ATF4_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.13 39.2 sp|Q5FVM5|CR3L3_RAT sp|Q1XGE2|HAC1_ASPOR 0.16 38.4 sp|Q90370|MAFB_COTJA sp|Q1XGE2|HAC1_ASPOR 0.16 38.4 sp|Q90888|MAFB_CHICK sp|Q1XGE2|HAC1_ASPOR 0.2 38.3 sp|O97930|FOS_PIG sp|Q1XGE2|HAC1_ASPOR 0.22 38.5 sp|Q91XE9|CR3L3_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.22 38.1 sp|P18848|ATF4_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.23 38.1 sp|O88479|FOS_MESAU sp|Q1XGE2|HAC1_ASPOR 0.26 37.9 sp|P01101|FOS_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.27 38.2 sp|Q68CJ9|CR3L3_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.27 37.9 sp|Q8TEY5|CR3L4_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.27 37.9 sp|Q99090|CPRF2_PETCR sp|Q1XGE2|HAC1_ASPOR 0.28 38.2 sp|Q5R9C9|ATF7_PONAB sp|Q1XGE2|HAC1_ASPOR 0.28 38.2 sp|P17544|ATF7_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.3 37.8 sp|Q5UEM8|CR3L4_MACFA sp|Q1XGE2|HAC1_ASPOR 0.37 37.2 sp|Q9Y5Q3|MAFB_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.37 37.4 sp|P01102|FOS_MSVFB sp|Q1XGE2|HAC1_ASPOR 0.38 37.2 sp|P51145|FOSL2_RAT sp|Q1XGE2|HAC1_ASPOR 0.4 38.4 sp|Q9UQ88|CD11A_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.41 38.4 sp|Q9WVS8|MK07_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.41 37.4 sp|Q502F0|CR3LA_DANRE sp|Q1XGE2|HAC1_ASPOR 0.42 37.0 sp|P15408|FOSL2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.45 37.3 sp|Q8R0S1|ATF7_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.47 37.5 sp|P29747|CREBA_DROME sp|Q1XGE2|HAC1_ASPOR 0.47 36.8 sp|Q2PFS4|MAFB_MACFA sp|Q1XGE2|HAC1_ASPOR 0.52 36.4 sp|Q9R1S4|XBP1_RAT sp|Q1XGE2|HAC1_ASPOR 0.53 36.6 sp|P54842|MAFB_RAT sp|Q1XGE2|HAC1_ASPOR 0.54 36.7 sp|P47930|FOSL2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.55 38.0 sp|Q2VZV0|IF2_MAGSA sp|Q1XGE2|HAC1_ASPOR 0.55 36.4 sp|Q0CEI3|KAPC_ASPTN sp|Q1XGE2|HAC1_ASPOR 0.56 36.9 sp|Q61817|CREB3_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.56 36.7 sp|Q9ES19|ATF4_RAT sp|Q1XGE2|HAC1_ASPOR 0.6 36.5 sp|P54841|MAFB_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.6 36.7 sp|O77628|FOS_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.62 36.3 sp|A1C9M5|KAPC_ASPCL sp|Q1XGE2|HAC1_ASPOR 0.67 36.3 sp|Q504L8|MAFB_XENTR sp|Q1XGE2|HAC1_ASPOR 0.7 36.1 sp|O57342|MAFA_COTJA sp|Q1XGE2|HAC1_ASPOR 0.72 36.3 sp|Q3ZCH6|ATF4_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.75 36.3 sp|Q5UEM7|CR3L4_RAT sp|Q1XGE2|HAC1_ASPOR 0.77 36.4 sp|P12841|FOS_RAT sp|Q1XGE2|HAC1_ASPOR 0.77 34.7 sp|Q16520|BATF_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.84 35.7 sp|O35426|XBP1_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.86 36.2 sp|P01100|FOS_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.93 36.0 sp|Q8K1L0|CREB5_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.95 37.9 sp|A4R2R1|NST1_MAGGR sp|Q1XGE2|HAC1_ASPOR 0.96 36.0 sp|Q9D2A5|CR3L4_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.98 36.0 sp|Q8HZP6|FOS_FELCA sp|Q1XGE2|HAC1_ASPOR 1.1 34.2 sp|Q9NR55|BATF3_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.2 36.1 sp|Q02930|CREB5_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.2 35.4 sp|P42774|GBF1_ARATH sp|Q1XGE2|HAC1_ASPOR 1.3 35.2 sp|A2R346|KAPC_ASPNC sp|Q1XGE2|HAC1_ASPOR 1.3 35.2 sp|O42290|MAFA_CHICK sp|Q1XGE2|HAC1_ASPOR 1.3 35.7 sp|O43889|CREB3_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.4 37.1 sp|O60841|IF2P_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.5 36.7 sp|Q5KGK5|EIF3A_CRYNE sp|Q1XGE2|HAC1_ASPOR 1.7 33.5 sp|Q9D275|BATF3_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.7 35.4 sp|Q1LYG4|CR3LB_DANRE sp|Q1XGE2|HAC1_ASPOR 1.7 34.9 sp|Q6DE84|MAFB_XENLA sp|Q1XGE2|HAC1_ASPOR 1.7 37.7 sp|Q7TSC1|BAT2_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.7 36.1 sp|Q99941|ATF6B_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.8 36.3 sp|Q54Y73|BZPD_DICDI sp|Q1XGE2|HAC1_ASPOR 1.8 34.9 sp|P18625|FOSL2_CHICK sp|Q1XGE2|HAC1_ASPOR 1.8 35.1 sp|Q56TN0|FOS_PHORO sp|Q1XGE2|HAC1_ASPOR 1.8 33.5 sp|O35284|BATF_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.9 34.7 sp|Q16534|HLF_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.9 34.7 sp|Q8BW74|HLF_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.9 35.2 sp|Q63ZM7|STABP_XENLA sp|Q1XGE2|HAC1_ASPOR 2.1 35.2 sp|P29681|IMPE2_DROME sp|Q1XGE2|HAC1_ASPOR 2.2 35.7 sp|O35451|ATF6B_MOUSE sp|Q1XGE2|HAC1_ASPOR 2.3 33.6 sp|Q09926|PCR1_SCHPO sp|Q1XGE2|HAC1_ASPOR 2.3 36.0 sp|O13024|INCEA_XENLA sp|Q1XGE2|HAC1_ASPOR 2.3 36.0 sp|A0JMT0|CA1AB_XENLA sp|Q1XGE2|HAC1_ASPOR 2.3 36.4 sp|Q5RDE1|IF2P_PONAB sp|Q1XGE2|HAC1_ASPOR 2.3 34.4 sp|Q4U1U2|MAFA_XENTR sp|Q1XGE2|HAC1_ASPOR 2.4 34.4 sp|Q64709|HLF_RAT sp|Q1XGE2|HAC1_ASPOR 2.4 34.8 sp|Q54NF3|Y6434_DICDI sp|Q1XGE2|HAC1_ASPOR 2.5 35.1 sp|P15336|ATF2_HUMAN sp|Q1XGE2|HAC1_ASPOR 2.5 36.2 sp|Q553B1|DDX46_DICDI sp|Q1XGE2|HAC1_ASPOR 2.8 37.0 sp|P48634|BAT2_HUMAN sp|Q1XGE2|HAC1_ASPOR 2.8 37.0 sp|Q5TM26|BAT2_MACMU sp|Q1XGE2|HAC1_ASPOR 2.9 34.2 sp|A3BYC1|HOX25_ORYSJ sp|Q1XGE2|HAC1_ASPOR 3.1 34.7 sp|P16951|ATF2_MOUSE sp|Q1XGE2|HAC1_ASPOR 3.1 35.4 sp|Q96RN5|MED15_HUMAN sp|Q1XGE2|HAC1_ASPOR 3.3 33.8 sp|Q2UNX4|KAPC_ASPOR sp|Q1XGE2|HAC1_ASPOR 3.5 36.6 sp|Q80U35|ARHGH_MOUSE sp|Q1XGE2|HAC1_ASPOR 3.5 35.2 sp|P0C865|MK07_RAT sp|Q1XGE2|HAC1_ASPOR 3.5 32.9 sp|P97875|JDP2_MOUSE sp|Q1XGE2|HAC1_ASPOR 3.5 32.9 sp|Q78E65|JDP2_RAT sp|Q1XGE2|HAC1_ASPOR 3.6 34.1 sp|Q8SQ19|CREB3_BOVIN sp|Q1XGE2|HAC1_ASPOR 3.6 33.6 sp|P48755|FOSL1_MOUSE sp|Q1XGE2|HAC1_ASPOR 3.7 35.3 sp|A2AJI0|MA7D1_MOUSE sp|Q1XGE2|HAC1_ASPOR 3.7 34.6 sp|Q00312|RBF1_CANAL sp|Q1XGE2|HAC1_ASPOR 3.7 35.7 sp|O35413|SRBS2_RAT sp|Q1XGE2|HAC1_ASPOR 3.9 32.5 sp|P97876|BATF3_RAT sp|Q1XGE2|HAC1_ASPOR 3.9 34.4 sp|O93602|ATF2_CHICK sp|Q1XGE2|HAC1_ASPOR 3.9 35.3 sp|Q5F489|TAF3_CHICK sp|Q1XGE2|HAC1_ASPOR 4.3 35.1 sp|Q6CBW0|NST1_YARLI sp|Q1XGE2|HAC1_ASPOR 4.3 35.6 sp|Q9CXK9|RBM33_MOUSE sp|Q1XGE2|HAC1_ASPOR 4.4 34.9 sp|Q554P0|BZPJ_DICDI sp|Q1XGE2|HAC1_ASPOR 4.4 35.1 sp|Q55EQ3|Y9086_DICDI sp|Q1XGE2|HAC1_ASPOR 4.7 35.8 sp|O75037|KI21B_HUMAN sp|Q1XGE2|HAC1_ASPOR 4.8 34.5 sp|O14273|YET4_SCHPO sp|Q1XGE2|HAC1_ASPOR 4.8 34.5 sp|P19880|YAP1_YEAST sp|Q1XGE2|HAC1_ASPOR 5.1 34.5 sp|Q6IPM2|IQCE_HUMAN sp|Q1XGE2|HAC1_ASPOR 5.3 33.4 sp|Q98UK4|MAF_DANRE sp|Q1XGE2|HAC1_ASPOR 5.3 35.4 sp|Q556Q3|IRLF_DICDI sp|Q1XGE2|HAC1_ASPOR 5.4 32.9 sp|P14233|TGA1B_TOBAC sp|Q1XGE2|HAC1_ASPOR 5.4 35.0 sp|Q8CH25|SLTM_MOUSE sp|Q1XGE2|HAC1_ASPOR 5.4 33.8 sp|O81025|P2A03_ARATH sp|Q1XGE2|HAC1_ASPOR 5.4 33.4 sp|P20226|TBP_HUMAN sp|Q1XGE2|HAC1_ASPOR 5.5 35.5 sp|Q4WG58|PAN1_ASPFU sp|Q1XGE2|HAC1_ASPOR 5.5 35.5 sp|B0YC95|PAN1_ASPFC sp|Q1XGE2|HAC1_ASPOR 5.6 33.9 sp|Q00969|ATF2_RAT sp|Q1XGE2|HAC1_ASPOR 5.7 34.1 sp|Q8N8S7|ENAH_HUMAN sp|Q1XGE2|HAC1_ASPOR 5.8 35.9 sp|Q6MG48|BAT2_RAT sp|Q1XGE2|HAC1_ASPOR 5.9 33.0 sp|P0C5H8|KAPC_EMENI sp|Q1XGE2|HAC1_ASPOR 6 33.7 sp|Q9M7Q3|AI5L6_ARATH sp|Q1XGE2|HAC1_ASPOR 6 34.8 sp|Q6P9R4|ARHGI_MOUSE sp|Q1XGE2|HAC1_ASPOR 6.1 34.8 sp|Q9NWH9|SLTM_HUMAN sp|Q1XGE2|HAC1_ASPOR 6.3 34.6 sp|O60308|K0562_HUMAN sp|Q1XGE2|HAC1_ASPOR 6.4 32.8 sp|A2Z0Q0|HOX25_ORYSI sp|Q1XGE2|HAC1_ASPOR 6.4 35.1 sp|Q6Y7W6|PERQ2_HUMAN sp|Q1XGE2|HAC1_ASPOR 6.7 32.8 sp|Q4WA21|KAPC_ASPFU sp|Q1XGE2|HAC1_ASPOR 6.9 35.3 sp|Q9QXL1|KI21B_MOUSE sp|Q1XGE2|HAC1_ASPOR 7.2 34.2 sp|P21127|CD11B_HUMAN sp|Q1XGE2|HAC1_ASPOR 7.2 33.0 sp|Q789F3|MAF_CHICK sp|Q1XGE2|HAC1_ASPOR 7.3 34.4 sp|Q6A000|K0753_MOUSE sp|Q1XGE2|HAC1_ASPOR 7.4 33.1 sp|P23091|MAF_AVIS4 sp|Q1XGE2|HAC1_ASPOR 7.4 33.8 sp|Q5RCJ1|CIP4_PONAB sp|Q1XGE2|HAC1_ASPOR 7.5 32.8 sp|P23050|FOS_AVINK sp|Q1XGE2|HAC1_ASPOR 7.5 34.5 sp|Q80YR5|SAFB2_MOUSE sp|Q1XGE2|HAC1_ASPOR 7.5 34.7 sp|Q6ZSZ5|ARHGI_HUMAN sp|Q1XGE2|HAC1_ASPOR 7.7 32.6 sp|O70191|ATF5_MOUSE sp|Q1XGE2|HAC1_ASPOR 7.9 34.9 sp|A6NC98|CC88B_HUMAN sp|Q1XGE2|HAC1_ASPOR 8 33.6 sp|B0WYY2|MOEH_CULQU sp|Q1XGE2|HAC1_ASPOR 8.3 32.9 sp|P11939|FOS_CHICK sp|Q1XGE2|HAC1_ASPOR 8.4 33.1 sp|Q9XUS2|MED29_CAEEL sp|Q1XGE2|HAC1_ASPOR 8.6 32.4 sp|A1D9Z7|KAPC_NEOFI sp|Q1XGE2|HAC1_ASPOR 8.7 32.2 sp|P29176|FOSX_MSVFR sp|Q1XGE2|HAC1_ASPOR 8.7 32.9 sp|Q09458|YQ37_CAEEL sp|Q1XGE2|HAC1_ASPOR 9 32.7 sp|P23922|HBP1A_WHEAT sp|Q1XGE2|HAC1_ASPOR 9 34.1 sp|Q5R452|SAFB1_PONAB sp|Q1XGE2|HAC1_ASPOR 9 32.2 sp|O02756|CEBPD_BOVIN sp|Q1XGE2|HAC1_ASPOR 9.2 33.9 sp|Q03173|ENAH_MOUSE sp|Q1XGE2|HAC1_ASPOR 9.4 32.7 sp|P54843|MAF_MOUSE sp|Q1XGE2|HAC1_ASPOR 9.4 32.2 sp|P49716|CEBPD_HUMAN sp|Q1XGE2|HAC1_ASPOR 9.4 33.4 sp|Q15642|CIP4_HUMAN sp|Q1XGE2|HAC1_ASPOR 9.4 32.7 sp|Q54RZ9|BZPG_DICDI sp|Q1XGE2|HAC1_ASPOR 9.6 34.3 sp|Q5AXH3|TOF1_EMENI sp|Q1XGE2|HAC1_ASPOR 9.6 34.1 sp|Q498L2|SLTM_XENLA sp|Q1XGE2|HAC1_ASPOR 9.6 34.6 sp|P0CB49|YLPM1_RAT sp|Q1XGE2|HAC1_ASPOR 9.7 32.5 sp|Q39140|TGA6_ARATH sp|Q1XGE2|HAC1_ASPOR 10 33.4 sp|Q8N9W4|GG6L2_HUMAN sp|Q1XGE2|HAC1_ASPOR hmmer-3.1b2/easel/demotic/regress/phmmer-tbl.out0000664361611702660230000004175112473612605021270 0ustar wheelerteddy7.5e-120 0 1 181 sp|P55685|Y4WG_RHISN 1 181 sp|P55685|Y4WG_RHISN 0.00026 0 63 108 sp|P55685|Y4WG_RHISN 39 86 sp|A1VDW9|HEM1_DESVV 1.8 0 36 50 sp|P55685|Y4WG_RHISN 185 199 sp|A1VDW9|HEM1_DESVV 0.00033 0 63 108 sp|P55685|Y4WG_RHISN 39 86 sp|Q72C23|HEM1_DESVH 1.8 0 36 50 sp|P55685|Y4WG_RHISN 185 199 sp|Q72C23|HEM1_DESVH 0.00077 0 36 76 sp|P55685|Y4WG_RHISN 93 131 sp|C0ZYA2|RIMP_RHOE4 0.53 0 40 65 sp|P55685|Y4WG_RHISN 167 192 sp|C0ZYA2|RIMP_RHOE4 0.016 0 101 123 sp|P55685|Y4WG_RHISN 44 66 sp|Q98G87|UBIG_RHILO 0.02 0 71 103 sp|P55685|Y4WG_RHISN 122 156 sp|Q98G87|UBIG_RHILO 0.00046 0 44 96 sp|P55685|Y4WG_RHISN 54 100 sp|B2VCH7|MTLD_ERWT9 2.8 0 40 77 sp|P55685|Y4WG_RHISN 248 282 sp|B2VCH7|MTLD_ERWT9 0.0004 0 56 119 sp|P55685|Y4WG_RHISN 304 362 sp|A1WE19|RLMN_VEREI 6 0 77 108 sp|P55685|Y4WG_RHISN 135 156 sp|Q2J713|RLMN_FRASC 0.00027 0 42 119 sp|P55685|Y4WG_RHISN 324 395 sp|Q2J713|RLMN_FRASC 0.0004 0 107 155 sp|P55685|Y4WG_RHISN 126 173 sp|Q9CZP0|UFSP1_MOUSE 3.6 0 17 37 sp|P55685|Y4WG_RHISN 192 213 sp|Q9CZP0|UFSP1_MOUSE 1.4 0 74 156 sp|P55685|Y4WG_RHISN 105 129 sp|Q21KT6|RLMN_SACD2 0.0011 0 67 115 sp|P55685|Y4WG_RHISN 324 366 sp|Q21KT6|RLMN_SACD2 0.00035 0 105 152 sp|P55685|Y4WG_RHISN 146 193 sp|Q7W7U1|NADD_BORPA 0.02 0 124 158 sp|P55685|Y4WG_RHISN 216 249 sp|Q8C6Y6|ASB14_MOUSE 0.26 0 131 166 sp|P55685|Y4WG_RHISN 320 355 sp|Q8C6Y6|ASB14_MOUSE 0.68 0 149 178 sp|P55685|Y4WG_RHISN 522 553 sp|Q8C6Y6|ASB14_MOUSE 0.00044 0 64 101 sp|P55685|Y4WG_RHISN 22 59 sp|Q8Y3H7|Y003_RALSO 0.77 0 93 133 sp|P55685|Y4WG_RHISN 14 53 sp|A4G4J9|RLMN_HERAR 0.46 0 136 153 sp|P55685|Y4WG_RHISN 101 118 sp|A4G4J9|RLMN_HERAR 0.0085 0 67 117 sp|P55685|Y4WG_RHISN 321 365 sp|A4G4J9|RLMN_HERAR 0.00057 0 88 168 sp|P55685|Y4WG_RHISN 135 218 sp|B8F3W8|LEUC_HAEPS 0.00041 0 142 173 sp|P55685|Y4WG_RHISN 32 62 sp|Q07074|YH007_YEAST 0.76 0 93 133 sp|P55685|Y4WG_RHISN 13 52 sp|A6SZX3|RLMN_JANMA 0.49 0 136 153 sp|P55685|Y4WG_RHISN 100 117 sp|A6SZX3|RLMN_JANMA 0.0066 0 67 117 sp|P55685|Y4WG_RHISN 322 366 sp|A6SZX3|RLMN_JANMA 1.3 0 95 116 sp|P55685|Y4WG_RHISN 135 156 sp|A2SHB8|RLMN_METPP 0.00042 0 66 139 sp|P55685|Y4WG_RHISN 319 387 sp|A2SHB8|RLMN_METPP 8.7e-232 0 1 345 sp|Q1XGE2|HAC1_ASPOR 1 345 sp|Q1XGE2|HAC1_ASPOR 5.8e-173 0 11 344 sp|Q1XGE2|HAC1_ASPOR 16 348 sp|Q8TFU8|HAC1_EMENI 5.8e-30 0 47 119 sp|Q1XGE2|HAC1_ASPOR 82 154 sp|Q8TFF3|HAC1_TRIRE 7.1 0 209 234 sp|Q1XGE2|HAC1_ASPOR 287 308 sp|Q8TFF3|HAC1_TRIRE 0.52 0 315 344 sp|Q1XGE2|HAC1_ASPOR 421 450 sp|Q8TFF3|HAC1_TRIRE 5e-16 0 67 119 sp|Q1XGE2|HAC1_ASPOR 23 75 sp|P41546|HAC1_YEAST 2.7e-14 0 59 153 sp|Q1XGE2|HAC1_ASPOR 64 158 sp|O24646|HY5_ARATH 2.4e-10 0 68 145 sp|Q1XGE2|HAC1_ASPOR 52 139 sp|Q3SZZ2|XBP1_BOVIN 3.7e-10 0 72 148 sp|Q1XGE2|HAC1_ASPOR 75 151 sp|Q9SM50|HY5_SOLLC 9.4e-10 0 72 186 sp|Q1XGE2|HAC1_ASPOR 58 185 sp|P17861|XBP1_HUMAN 4.9e-09 0 72 144 sp|Q1XGE2|HAC1_ASPOR 67 139 sp|Q8W191|HYH_ARATH 1.5e-08 0 14 155 sp|Q1XGE2|HAC1_ASPOR 221 363 sp|A1L224|CR3L2_DANRE 4.1e-08 0 76 147 sp|Q1XGE2|HAC1_ASPOR 186 257 sp|Q9D2A5|CR3L4_MOUSE 4.2e-08 0 73 127 sp|Q1XGE2|HAC1_ASPOR 52 106 sp|Q9R1S4|XBP1_RAT 1.1e-07 0 46 175 sp|Q1XGE2|HAC1_ASPOR 363 498 sp|Q54WN7|BZPF_DICDI 1.6e-07 0 60 157 sp|Q1XGE2|HAC1_ASPOR 281 373 sp|A2VD01|CR3L2_XENLA 9.1e-08 0 77 162 sp|Q1XGE2|HAC1_ASPOR 192 277 sp|Q99090|CPRF2_PETCR 2.2e-07 0 77 154 sp|Q1XGE2|HAC1_ASPOR 233 310 sp|Q5FVM5|CR3L3_RAT 1.7e-07 0 73 127 sp|Q1XGE2|HAC1_ASPOR 52 106 sp|O35426|XBP1_MOUSE 1.7e-07 0 80 151 sp|Q1XGE2|HAC1_ASPOR 182 253 sp|Q61817|CREB3_MOUSE 2.3e-07 0 77 154 sp|Q1XGE2|HAC1_ASPOR 233 310 sp|Q91XE9|CR3L3_MOUSE 8.7 0 156 180 sp|Q1XGE2|HAC1_ASPOR 69 93 sp|O57342|MAFA_COTJA 2.3e-07 0 85 167 sp|Q1XGE2|HAC1_ASPOR 201 281 sp|O57342|MAFA_COTJA 4.8e-07 0 78 148 sp|Q1XGE2|HAC1_ASPOR 184 254 sp|Q5UEM7|CR3L4_RAT 3.5e-07 0 24 151 sp|Q1XGE2|HAC1_ASPOR 160 284 sp|Q08CW8|CR3L4_XENTR 1.8 0 115 178 sp|Q1XGE2|HAC1_ASPOR 15 81 sp|Q90370|MAFB_COTJA 1.4e-06 0 53 149 sp|Q1XGE2|HAC1_ASPOR 195 292 sp|Q90370|MAFB_COTJA 6.1e-07 0 77 161 sp|Q1XGE2|HAC1_ASPOR 237 321 sp|Q68CJ9|CR3L3_HUMAN 7.4e-07 0 78 160 sp|Q1XGE2|HAC1_ASPOR 205 286 sp|Q1LYG4|CR3LB_DANRE 8.1e-07 0 78 160 sp|Q1XGE2|HAC1_ASPOR 205 286 sp|Q502F0|CR3LA_DANRE 1.8 0 115 178 sp|Q1XGE2|HAC1_ASPOR 15 81 sp|Q90888|MAFB_CHICK 1.7e-06 0 52 149 sp|Q1XGE2|HAC1_ASPOR 194 292 sp|Q90888|MAFB_CHICK 5e-07 0 77 161 sp|Q1XGE2|HAC1_ASPOR 232 316 sp|Q3SYZ3|CR3L3_BOVIN 9.1e-07 0 54 159 sp|Q1XGE2|HAC1_ASPOR 270 370 sp|Q5RCM9|CR3L2_PONAB 8.3e-07 0 72 148 sp|Q1XGE2|HAC1_ASPOR 226 303 sp|Q9Y5Q3|MAFB_HUMAN 1e-06 0 54 159 sp|Q1XGE2|HAC1_ASPOR 270 370 sp|Q70SY1|CR3L2_HUMAN 0.52 0 115 182 sp|Q1XGE2|HAC1_ASPOR 15 86 sp|Q6DE84|MAFB_XENLA 1.7e-05 0 70 143 sp|Q1XGE2|HAC1_ASPOR 211 285 sp|Q6DE84|MAFB_XENLA 1.3e-06 0 59 160 sp|Q1XGE2|HAC1_ASPOR 271 366 sp|Q9Z125|CR3L1_MOUSE 1.1e-06 0 55 159 sp|Q1XGE2|HAC1_ASPOR 271 370 sp|Q8BH52|CR3L2_MOUSE 9.1e-07 0 72 148 sp|Q1XGE2|HAC1_ASPOR 226 303 sp|P54842|MAFB_RAT 1.3e-06 0 59 159 sp|Q1XGE2|HAC1_ASPOR 275 370 sp|Q6QDP7|CR3L2_RAT 9.3e-07 0 71 135 sp|Q1XGE2|HAC1_ASPOR 17 78 sp|Q16520|BATF_HUMAN 9.1e-07 0 72 148 sp|Q1XGE2|HAC1_ASPOR 226 303 sp|P54841|MAFB_MOUSE 1.1e-06 0 72 147 sp|Q1XGE2|HAC1_ASPOR 226 302 sp|Q2PFS4|MAFB_MACFA 8.7 0 156 180 sp|Q1XGE2|HAC1_ASPOR 69 93 sp|O42290|MAFA_CHICK 1.1e-06 0 84 167 sp|Q1XGE2|HAC1_ASPOR 200 281 sp|O42290|MAFA_CHICK 1.3e-06 0 70 143 sp|Q1XGE2|HAC1_ASPOR 22 95 sp|Q9NR55|BATF3_HUMAN 2.6e-06 0 60 156 sp|Q1XGE2|HAC1_ASPOR 272 362 sp|Q96BA8|CR3L1_HUMAN 1.6e-06 0 59 160 sp|Q1XGE2|HAC1_ASPOR 270 365 sp|Q66HA2|CR3L1_RAT 4.4e-06 0 46 141 sp|Q1XGE2|HAC1_ASPOR 310 401 sp|P17544|ATF7_HUMAN 3.6e-06 0 77 150 sp|Q1XGE2|HAC1_ASPOR 169 241 sp|O43889|CREB3_HUMAN 2.1e-06 0 46 140 sp|Q1XGE2|HAC1_ASPOR 299 389 sp|Q8R0S1|ATF7_MOUSE 5.4e-06 0 46 141 sp|Q1XGE2|HAC1_ASPOR 299 390 sp|Q5R9C9|ATF7_PONAB 3e-06 0 71 135 sp|Q1XGE2|HAC1_ASPOR 17 78 sp|O35284|BATF_MOUSE 4.8e-06 0 79 151 sp|Q1XGE2|HAC1_ASPOR 149 221 sp|Q8SQ19|CREB3_BOVIN 5.5e-06 0 78 150 sp|Q1XGE2|HAC1_ASPOR 212 284 sp|Q8TEY5|CR3L4_HUMAN 4.6e-06 0 81 143 sp|Q1XGE2|HAC1_ASPOR 26 88 sp|Q9D275|BATF3_MOUSE 1.3 0 116 182 sp|Q1XGE2|HAC1_ASPOR 16 86 sp|Q504L8|MAFB_XENTR 1.2e-05 0 54 147 sp|Q1XGE2|HAC1_ASPOR 201 295 sp|Q504L8|MAFB_XENTR 4.8e-06 0 78 150 sp|Q1XGE2|HAC1_ASPOR 212 284 sp|Q5UEM8|CR3L4_MACFA 1e-05 0 85 167 sp|Q1XGE2|HAC1_ASPOR 203 284 sp|Q4U1U2|MAFA_XENTR 1.4 0 114 168 sp|Q1XGE2|HAC1_ASPOR 15 68 sp|P23091|MAF_AVIS4 0.00013 0 85 148 sp|Q1XGE2|HAC1_ASPOR 276 339 sp|P23091|MAF_AVIS4 1e-05 0 75 131 sp|Q1XGE2|HAC1_ASPOR 204 259 sp|P81269|ATF1_MOUSE 1.4 0 114 168 sp|Q1XGE2|HAC1_ASPOR 15 68 sp|Q789F3|MAF_CHICK 0.00015 0 85 148 sp|Q1XGE2|HAC1_ASPOR 276 339 sp|Q789F3|MAF_CHICK 1.6e-05 0 64 149 sp|Q1XGE2|HAC1_ASPOR 427 507 sp|P29747|CREBA_DROME 1.3e-05 0 75 155 sp|Q1XGE2|HAC1_ASPOR 270 346 sp|P18848|ATF4_HUMAN 1.2 0 113 168 sp|Q1XGE2|HAC1_ASPOR 14 68 sp|P54844|MAF_RAT 0.00013 0 85 148 sp|Q1XGE2|HAC1_ASPOR 286 349 sp|P54844|MAF_RAT 1.3 0 113 168 sp|Q1XGE2|HAC1_ASPOR 14 68 sp|O75444|MAF_HUMAN 0.00017 0 85 147 sp|Q1XGE2|HAC1_ASPOR 290 352 sp|O75444|MAF_HUMAN 1.2e-05 0 81 143 sp|Q1XGE2|HAC1_ASPOR 26 88 sp|P97876|BATF3_RAT 9.7e-06 0 63 155 sp|Q1XGE2|HAC1_ASPOR 254 344 sp|Q06507|ATF4_MOUSE 1.4 0 113 168 sp|Q1XGE2|HAC1_ASPOR 14 68 sp|A7Z017|MAF_BOVIN 0.00017 0 85 147 sp|Q1XGE2|HAC1_ASPOR 294 356 sp|A7Z017|MAF_BOVIN 1.2 0 113 168 sp|Q1XGE2|HAC1_ASPOR 14 68 sp|Q0V9K1|MAF_XENTR 0.00021 0 85 146 sp|Q1XGE2|HAC1_ASPOR 267 328 sp|Q0V9K1|MAF_XENTR 1.9e-05 0 74 131 sp|Q1XGE2|HAC1_ASPOR 204 260 sp|Q08DA8|ATF1_BOVIN 1.2e-05 0 78 166 sp|Q1XGE2|HAC1_ASPOR 45 134 sp|O60675|MAFK_HUMAN 1.3 0 113 168 sp|Q1XGE2|HAC1_ASPOR 14 68 sp|P54843|MAF_MOUSE 0.00019 0 85 148 sp|Q1XGE2|HAC1_ASPOR 287 350 sp|P54843|MAF_MOUSE 2e-05 0 74 131 sp|Q1XGE2|HAC1_ASPOR 205 261 sp|P18846|ATF1_HUMAN 1.5e-05 0 77 142 sp|Q1XGE2|HAC1_ASPOR 216 281 sp|P42774|GBF1_ARATH 1.5e-05 0 78 165 sp|Q1XGE2|HAC1_ASPOR 45 133 sp|Q61827|MAFK_MOUSE 2.3e-05 0 80 140 sp|Q1XGE2|HAC1_ASPOR 181 240 sp|P14233|TGA1B_TOBAC 3.4e-05 0 47 144 sp|Q1XGE2|HAC1_ASPOR 230 327 sp|Q6NW59|ATF4_DANRE 6.1e-05 0 82 133 sp|Q1XGE2|HAC1_ASPOR 165 215 sp|O24160|TGA21_TOBAC 5.2 0 115 165 sp|Q1XGE2|HAC1_ASPOR 16 65 sp|Q98UK4|MAF_DANRE 8.2e-05 0 85 144 sp|Q1XGE2|HAC1_ASPOR 243 302 sp|Q98UK4|MAF_DANRE 4.2e-05 0 85 165 sp|Q1XGE2|HAC1_ASPOR 225 305 sp|A3KMR8|MAFA_DANRE 3.5e-05 0 84 164 sp|Q1XGE2|HAC1_ASPOR 52 132 sp|Q90596|MAFK_CHICK 5.2e-05 0 75 145 sp|Q1XGE2|HAC1_ASPOR 267 337 sp|Q3ZCH6|ATF4_BOVIN 3.5e-05 0 77 145 sp|Q1XGE2|HAC1_ASPOR 65 134 sp|P97875|JDP2_MOUSE 3.5e-05 0 77 145 sp|Q1XGE2|HAC1_ASPOR 65 134 sp|Q78E65|JDP2_RAT 5.8e-05 0 85 159 sp|Q1XGE2|HAC1_ASPOR 227 301 sp|P12959|OP2_MAIZE 2.9 0 141 170 sp|Q1XGE2|HAC1_ASPOR 19 48 sp|Q8K1L0|CREB5_MOUSE 3.7e-05 0 51 143 sp|Q1XGE2|HAC1_ASPOR 193 284 sp|Q8K1L0|CREB5_MOUSE 6.4e-05 0 77 131 sp|Q1XGE2|HAC1_ASPOR 38 91 sp|Q39140|TGA6_ARATH 7.3e-05 0 73 131 sp|Q1XGE2|HAC1_ASPOR 37 91 sp|P23923|HBP1B_WHEAT 8.1e-05 0 98 169 sp|Q1XGE2|HAC1_ASPOR 195 263 sp|Q00322|CEBPD_MOUSE 7e-05 0 79 131 sp|Q1XGE2|HAC1_ASPOR 40 91 sp|Q39163|TGA5_ARATH 8.4e-05 0 80 149 sp|Q1XGE2|HAC1_ASPOR 274 343 sp|Q54RZ9|BZPG_DICDI 8.2e-05 0 85 168 sp|Q1XGE2|HAC1_ASPOR 262 348 sp|Q8CF90|MAFA_MOUSE 5e-05 0 74 155 sp|Q1XGE2|HAC1_ASPOR 265 342 sp|Q9ES19|ATF4_RAT 0.0001 0 79 131 sp|Q1XGE2|HAC1_ASPOR 40 91 sp|P43273|TGA2_ARATH 1.5 0 132 182 sp|Q1XGE2|HAC1_ASPOR 36 86 sp|Q98UK5|MAFB_DANRE 8.5e-05 0 73 144 sp|Q1XGE2|HAC1_ASPOR 259 331 sp|Q98UK5|MAFB_DANRE 0.00015 0 64 125 sp|Q1XGE2|HAC1_ASPOR 316 376 sp|P16951|ATF2_MOUSE 3.2 0 140 211 sp|Q1XGE2|HAC1_ASPOR 20 94 sp|P27925|CREB1_BOVIN 0.0002 0 78 131 sp|Q1XGE2|HAC1_ASPOR 262 315 sp|P27925|CREB1_BOVIN 0.00016 0 63 125 sp|Q1XGE2|HAC1_ASPOR 333 394 sp|P15336|ATF2_HUMAN 0.00018 0 38 137 sp|Q1XGE2|HAC1_ASPOR 283 383 sp|O35451|ATF6B_MOUSE 0.00014 0 13 118 sp|Q1XGE2|HAC1_ASPOR 185 290 sp|Q2VZV0|IF2_MAGSA 0.00015 0 64 139 sp|Q1XGE2|HAC1_ASPOR 210 287 sp|Q6ZDF3|TRAB1_ORYSJ 0.0002 0 73 141 sp|Q1XGE2|HAC1_ASPOR 200 265 sp|Q6P788|ATF5_RAT 8.3 0 141 171 sp|Q1XGE2|HAC1_ASPOR 170 200 sp|Q02930|CREB5_HUMAN 8.8e-05 0 51 143 sp|Q1XGE2|HAC1_ASPOR 344 435 sp|Q02930|CREB5_HUMAN 0.0004 0 63 130 sp|Q1XGE2|HAC1_ASPOR 44 113 sp|Q66J36|NFIL3_XENLA 7 0 29 51 sp|Q1XGE2|HAC1_ASPOR 196 218 sp|Q66J36|NFIL3_XENLA 0.0002 0 85 167 sp|Q1XGE2|HAC1_ASPOR 255 335 sp|Q8NHW3|MAFA_HUMAN 0.0003 0 79 234 sp|Q1XGE2|HAC1_ASPOR 134 294 sp|O88479|FOS_MESAU 0.00024 0 64 137 sp|Q1XGE2|HAC1_ASPOR 232 306 sp|P23922|HBP1A_WHEAT 0.00018 0 84 167 sp|Q1XGE2|HAC1_ASPOR 52 134 sp|Q90595|MAFF_CHICK 0.0003 0 73 144 sp|Q1XGE2|HAC1_ASPOR 112 182 sp|P53450|FOS_TAKRU 2.3 0 17 42 sp|Q1XGE2|HAC1_ASPOR 316 340 sp|P53450|FOS_TAKRU 0.00044 0 64 125 sp|Q1XGE2|HAC1_ASPOR 316 376 sp|Q00969|ATF2_RAT 0.00031 0 79 146 sp|Q1XGE2|HAC1_ASPOR 134 200 sp|O97930|FOS_PIG 0.00033 0 80 131 sp|Q1XGE2|HAC1_ASPOR 299 350 sp|P79145|CREM_CANFA 0.00045 0 37 138 sp|Q1XGE2|HAC1_ASPOR 285 387 sp|Q99941|ATF6B_HUMAN 0.00033 0 79 146 sp|Q1XGE2|HAC1_ASPOR 134 200 sp|P01101|FOS_MOUSE 0.00021 0 78 131 sp|Q1XGE2|HAC1_ASPOR 278 331 sp|P15337|CREB1_RAT 0.00021 0 78 131 sp|Q1XGE2|HAC1_ASPOR 278 331 sp|P16220|CREB1_HUMAN 0.00021 0 78 131 sp|Q1XGE2|HAC1_ASPOR 278 331 sp|Q01147|CREB1_MOUSE 0.00044 0 66 129 sp|Q1XGE2|HAC1_ASPOR 319 380 sp|O93602|ATF2_CHICK 0.0003 0 84 165 sp|Q1XGE2|HAC1_ASPOR 52 134 sp|Q90889|MAFG_CHICK 0.00039 0 66 145 sp|Q1XGE2|HAC1_ASPOR 97 175 sp|P79702|FOS_CYPCA 0.0004 0 81 140 sp|Q1XGE2|HAC1_ASPOR 208 267 sp|Q8X229|FCR3_CANAL 0.00052 0 79 145 sp|Q1XGE2|HAC1_ASPOR 134 199 sp|P12841|FOS_RAT 0.00052 0 82 159 sp|Q1XGE2|HAC1_ASPOR 192 253 sp|P49716|CEBPD_HUMAN 0.00028 0 79 148 sp|Q1XGE2|HAC1_ASPOR 545 614 sp|Q554P0|BZPJ_DICDI 0.00029 0 85 146 sp|Q1XGE2|HAC1_ASPOR 248 309 sp|Q55E93|BZPE_DICDI 0.00043 0 76 131 sp|Q1XGE2|HAC1_ASPOR 184 239 sp|P51984|CREB_CHLVR 0.0004 0 79 146 sp|Q1XGE2|HAC1_ASPOR 134 200 sp|P01102|FOS_MSVFB 0.00052 0 79 144 sp|Q1XGE2|HAC1_ASPOR 134 198 sp|O77628|FOS_BOVIN 0.00035 0 78 145 sp|Q1XGE2|HAC1_ASPOR 67 134 sp|Q8WYK2|JDP2_HUMAN 0.00092 0 38 135 sp|Q1XGE2|HAC1_ASPOR 210 307 sp|Q60925|DBP_MOUSE 0.00058 0 85 125 sp|Q1XGE2|HAC1_ASPOR 74 114 sp|P14232|TGA1A_TOBAC 0.00092 0 38 135 sp|Q1XGE2|HAC1_ASPOR 210 307 sp|P16443|DBP_RAT 0.00059 0 71 131 sp|Q1XGE2|HAC1_ASPOR 50 111 sp|Q68EL6|NFIL3_DANRE 0.00069 0 79 144 sp|Q1XGE2|HAC1_ASPOR 134 198 sp|P01100|FOS_HUMAN 0.00059 0 70 133 sp|Q1XGE2|HAC1_ASPOR 175 239 sp|Q9C5Q2|AI5L3_ARATH 0.00083 0 71 132 sp|Q1XGE2|HAC1_ASPOR 60 122 sp|Q5FW38|NFIL3_XENTR 0.00076 0 79 144 sp|Q1XGE2|HAC1_ASPOR 135 199 sp|Q8HZP6|FOS_FELCA 0.00076 0 70 141 sp|Q1XGE2|HAC1_ASPOR 340 411 sp|Q9SJN0|ABI5_ARATH 0.00074 0 77 134 sp|Q1XGE2|HAC1_ASPOR 181 238 sp|P42777|GBF4_ARATH 0.00072 0 64 202 sp|Q1XGE2|HAC1_ASPOR 88 234 sp|P15407|FOSL1_HUMAN 0.00059 0 84 152 sp|Q1XGE2|HAC1_ASPOR 52 120 sp|O15525|MAFG_HUMAN 0.00098 0 85 133 sp|Q1XGE2|HAC1_ASPOR 427 475 sp|P40535|ACA2_YEAST 0.00069 0 84 174 sp|Q1XGE2|HAC1_ASPOR 52 139 sp|A7YY73|MAFF_BOVIN 0.075 0 110 154 sp|Q1XGE2|HAC1_ASPOR 26 70 sp|Q8PY58|PSMR_METMA 0.15 0 115 194 sp|Q1XGE2|HAC1_ASPOR 255 332 sp|Q8PY58|PSMR_METMA 0.0012 0 79 142 sp|Q1XGE2|HAC1_ASPOR 134 196 sp|Q56TN0|FOS_PHORO 0.0011 0 79 140 sp|Q1XGE2|HAC1_ASPOR 88 148 sp|P23050|FOS_AVINK 0.0011 0 68 126 sp|Q1XGE2|HAC1_ASPOR 207 268 sp|Q9LES3|AI5L2_ARATH 0.0014 0 66 133 sp|Q1XGE2|HAC1_ASPOR 197 264 sp|Q84JK2|FD_ARATH 0.0009 0 84 151 sp|Q1XGE2|HAC1_ASPOR 52 119 sp|A5PJV0|MAFG_BOVIN 0.0009 0 84 151 sp|Q1XGE2|HAC1_ASPOR 52 119 sp|O54790|MAFG_MOUSE 0.0014 0 77 131 sp|Q1XGE2|HAC1_ASPOR 90 144 sp|Q39234|TGA3_ARATH 0.0013 0 108 151 sp|Q1XGE2|HAC1_ASPOR 147 194 sp|P07049|CPPB_NEIGO 0.0015 0 79 140 sp|Q1XGE2|HAC1_ASPOR 133 193 sp|P11939|FOS_CHICK 0.0011 0 80 144 sp|Q1XGE2|HAC1_ASPOR 111 174 sp|P29176|FOSX_MSVFR 0.0011 0 84 168 sp|Q1XGE2|HAC1_ASPOR 52 133 sp|O54791|MAFF_MOUSE 0.075 0 110 154 sp|Q1XGE2|HAC1_ASPOR 26 70 sp|Q8TI88|PSMR_METAC 0.28 0 115 190 sp|Q1XGE2|HAC1_ASPOR 255 330 sp|Q8TI88|PSMR_METAC 0.0021 0 69 129 sp|Q1XGE2|HAC1_ASPOR 58 119 sp|O08750|NFIL3_MOUSE 0.0013 0 84 149 sp|Q1XGE2|HAC1_ASPOR 79 144 sp|Q76MX4|MAFG_RAT 0.0025 0 85 152 sp|Q1XGE2|HAC1_ASPOR 1197 1264 sp|P20482|CNC_DROME 0.0021 0 70 130 sp|Q1XGE2|HAC1_ASPOR 59 120 sp|Q90Z72|NFIL3_CHICK 0.0022 0 78 131 sp|Q1XGE2|HAC1_ASPOR 296 348 sp|Q9VWW0|CREBB_DROME 0.0019 0 74 164 sp|Q1XGE2|HAC1_ASPOR 19 111 sp|Q8BKJ9|SIRT7_MOUSE 0.0025 0 79 144 sp|Q1XGE2|HAC1_ASPOR 134 198 sp|Q56TT7|FOS_PHOCM 0.0023 0 69 129 sp|Q1XGE2|HAC1_ASPOR 58 119 sp|Q6IMZ0|NFIL3_RAT 0.00037 0 81 140 sp|Q1XGE2|HAC1_ASPOR 142 201 sp|P38749|YAP3_YEAST 0.0022 0 70 129 sp|Q1XGE2|HAC1_ASPOR 59 119 sp|Q08D88|NFIL3_BOVIN 0.0023 0 70 129 sp|Q1XGE2|HAC1_ASPOR 59 119 sp|Q16649|NFIL3_HUMAN 0.0026 0 80 142 sp|Q1XGE2|HAC1_ASPOR 137 199 sp|Q9C7S0|BZI60_ARATH 0.0022 0 74 143 sp|Q1XGE2|HAC1_ASPOR 261 327 sp|P78962|ATF21_SCHPO 0.0027 0 80 130 sp|Q1XGE2|HAC1_ASPOR 299 349 sp|Q1LZH5|CREM_BOVIN 0.0029 0 189 227 sp|Q1XGE2|HAC1_ASPOR 139 177 sp|B1MX63|THIE_LEUCK 0.0026 0 29 114 sp|Q1XGE2|HAC1_ASPOR 136 219 sp|Q5AVK6|NOP16_EMENI 0.0022 0 84 152 sp|Q1XGE2|HAC1_ASPOR 52 120 sp|Q9ULX9|MAFF_HUMAN 0.0023 0 90 147 sp|Q1XGE2|HAC1_ASPOR 58 112 sp|P53567|CEBPG_HUMAN 0.0081 0 56 167 sp|Q1XGE2|HAC1_ASPOR 412 524 sp|Q2V2M9|FHOD3_HUMAN 0.0028 0 80 130 sp|Q1XGE2|HAC1_ASPOR 299 349 sp|Q03060|CREM_HUMAN 0.0045 0 181 256 sp|Q1XGE2|HAC1_ASPOR 353 428 sp|O68007|BACB_BACLI 0.003 0 106 251 sp|Q1XGE2|HAC1_ASPOR 160 302 sp|Q5VPE3|HOX2_ORYSJ 0.003 0 106 251 sp|Q1XGE2|HAC1_ASPOR 160 302 sp|Q84U86|HOX2_ORYSI 0.0026 0 135 238 sp|Q1XGE2|HAC1_ASPOR 95 196 sp|Q65US7|THIE_MANSM 0.0034 0 36 87 sp|Q1XGE2|HAC1_ASPOR 15 67 sp|P07948|LYN_HUMAN 0.00042 0 21 145 sp|Q1XGE2|HAC1_ASPOR 163 287 sp|Q16534|HLF_HUMAN 0.0026 0 74 147 sp|Q1XGE2|HAC1_ASPOR 92 165 sp|Q9XGJ4|GGM13_GNEGN 0.0036 0 71 139 sp|Q1XGE2|HAC1_ASPOR 230 298 sp|P27921|JUND_CHICK 0.0034 0 117 205 sp|Q1XGE2|HAC1_ASPOR 218 300 sp|Q5XHX8|THEG_RAT 0.0034 0 76 158 sp|Q1XGE2|HAC1_ASPOR 82 163 sp|P18847|ATF3_HUMAN 0.0034 0 84 149 sp|Q1XGE2|HAC1_ASPOR 25 90 sp|P24068|OCS1_MAIZE 0.0043 0 83 197 sp|Q1XGE2|HAC1_ASPOR 173 288 sp|P20393|NR1D1_HUMAN 0.0039 0 69 164 sp|Q1XGE2|HAC1_ASPOR 142 236 sp|P13346|FOSB_MOUSE 0.0051 0 80 152 sp|Q1XGE2|HAC1_ASPOR 246 322 sp|P42775|GBF2_ARATH 0.0079 0 74 145 sp|Q1XGE2|HAC1_ASPOR 4 73 sp|Q09926|PCR1_SCHPO 0.0045 0 64 121 sp|Q1XGE2|HAC1_ASPOR 29 80 sp|P24813|YAP2_YEAST 0.00076 0 24 145 sp|Q1XGE2|HAC1_ASPOR 166 287 sp|Q64709|HLF_RAT 0.0047 0 79 120 sp|Q1XGE2|HAC1_ASPOR 425 466 sp|Q02100|SKO1_YEAST 0.0045 0 138 190 sp|Q1XGE2|HAC1_ASPOR 164 217 sp|P50198|LINX_PSEPA 0.0039 0 76 141 sp|Q1XGE2|HAC1_ASPOR 62 128 sp|Q6DGM8|JDP2_DANRE 0.0036 0 53 173 sp|Q1XGE2|HAC1_ASPOR 21 140 sp|A2Z0Q0|HOX25_ORYSI 0.0052 0 112 173 sp|Q1XGE2|HAC1_ASPOR 800 860 sp|Q9UPR3|SMG5_HUMAN 0.00044 0 77 131 sp|Q1XGE2|HAC1_ASPOR 183 236 sp|Q41558|HBP1C_WHEAT 0.005 0 74 164 sp|Q1XGE2|HAC1_ASPOR 171 246 sp|O02756|CEBPD_BOVIN 0.0068 0 254 299 sp|Q1XGE2|HAC1_ASPOR 713 759 sp|Q63315|CAD22_RAT 0.0068 0 254 299 sp|Q1XGE2|HAC1_ASPOR 713 759 sp|Q9WTP5|CAD22_MOUSE 1.4 0 177 224 sp|Q1XGE2|HAC1_ASPOR 2 49 sp|Q5FUV3|ATE_GLUOX 0.0033 0 137 193 sp|Q1XGE2|HAC1_ASPOR 48 102 sp|Q5FUV3|ATE_GLUOX 0.0068 0 77 132 sp|Q1XGE2|HAC1_ASPOR 190 248 sp|Q99091|CPRF3_PETCR 0.00051 0 23 145 sp|Q1XGE2|HAC1_ASPOR 165 287 sp|Q8BW74|HLF_MOUSE 0.0066 0 52 134 sp|Q1XGE2|HAC1_ASPOR 201 282 sp|Q9JLC6|TEF_MOUSE 0.0059 0 54 139 sp|Q1XGE2|HAC1_ASPOR 214 299 sp|Q92172|TEF_CHICK hmmer-3.1b2/easel/demotic/regress/wu-blastp-profmark.out0000664361611702660230000007013312473612605022752 0ustar wheelerteddy0 897.0 sp|P55685|Y4WG_RHISN sp|P55685|Y4WG_RHISN 1.34707 60.0 sp|Q07074|YH007_YEAST sp|P55685|Y4WG_RHISN 5.29832 74.0 sp|Q8XVA0|Y2931_RALSO sp|P55685|Y4WG_RHISN 5.29832 74.0 sp|P33890|TIR2_YEAST sp|P55685|Y4WG_RHISN 5.52146 78.0 sp|A7HGP8|CH602_ANADF sp|P55685|Y4WG_RHISN 9.21034 58.0 sp|Q608F1|Y1541_METCA sp|P55685|Y4WG_RHISN 0 1765.0 sp|Q1XGE2|HAC1_ASPOR sp|Q1XGE2|HAC1_ASPOR 0 1348.0 sp|Q8TFU8|HAC1_EMENI sp|Q1XGE2|HAC1_ASPOR 0 303.0 sp|Q8TFF3|HAC1_TRIRE sp|Q1XGE2|HAC1_ASPOR 9.30367e-14 184.0 sp|P41546|HAC1_YEAST sp|Q1XGE2|HAC1_ASPOR 3.39995e-12 170.0 sp|O24646|HY5_ARATH sp|Q1XGE2|HAC1_ASPOR 7e-09 140.0 sp|Q9SM50|HY5_SOLLC sp|Q1XGE2|HAC1_ASPOR 3.2e-08 150.0 sp|Q3SZZ2|XBP1_BOVIN sp|Q1XGE2|HAC1_ASPOR 3.2e-08 150.0 sp|P17861|XBP1_HUMAN sp|Q1XGE2|HAC1_ASPOR 3.7e-08 156.0 sp|A1L224|CR3L2_DANRE sp|Q1XGE2|HAC1_ASPOR 1.9e-07 127.0 sp|Q8W191|HYH_ARATH sp|Q1XGE2|HAC1_ASPOR 9.6e-07 148.0 sp|A3LYI0|NST1_PICST sp|Q1XGE2|HAC1_ASPOR 6.40002e-06 136.0 sp|Q70SY1|CR3L2_HUMAN sp|Q1XGE2|HAC1_ASPOR 6.40002e-06 136.0 sp|Q5RCM9|CR3L2_PONAB sp|Q1XGE2|HAC1_ASPOR 6.50002e-06 136.0 sp|Q8BH52|CR3L2_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.20001e-05 132.0 sp|Q61817|CREB3_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.40001e-05 133.0 sp|A2VD01|CR3L2_XENLA sp|Q1XGE2|HAC1_ASPOR 2.30003e-05 131.0 sp|Q66HA2|CR3L1_RAT sp|Q1XGE2|HAC1_ASPOR 2.40003e-05 132.0 sp|Q54WN7|BZPF_DICDI sp|Q1XGE2|HAC1_ASPOR 3.00005e-05 130.0 sp|Q9Z125|CR3L1_MOUSE sp|Q1XGE2|HAC1_ASPOR 6.00018e-05 104.0 sp|Q9NR55|BATF3_HUMAN sp|Q1XGE2|HAC1_ASPOR 6.00018e-05 104.0 sp|Q9D275|BATF3_MOUSE sp|Q1XGE2|HAC1_ASPOR 6.4002e-05 127.0 sp|Q96BA8|CR3L1_HUMAN sp|Q1XGE2|HAC1_ASPOR 7.20026e-05 136.0 sp|O88778|BSN_RAT sp|Q1XGE2|HAC1_ASPOR 0.000110006 125.0 sp|Q6QDP7|CR3L2_RAT sp|Q1XGE2|HAC1_ASPOR 0.000120007 127.0 sp|Q9WVS8|MK07_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.000130008 123.0 sp|Q08CW8|CR3L4_XENTR sp|Q1XGE2|HAC1_ASPOR 0.000160013 100.0 sp|Q16520|BATF_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.000170014 121.0 sp|Q9D2A5|CR3L4_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.00020002 121.0 sp|Q99090|CPRF2_PETCR sp|Q1XGE2|HAC1_ASPOR 0.000210022 99.0 sp|P97876|BATF3_RAT sp|Q1XGE2|HAC1_ASPOR 0.000290042 125.0 sp|Q5B3C8|NST1_EMENI sp|Q1XGE2|HAC1_ASPOR 0.000300045 115.0 sp|Q91XE9|CR3L3_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.000320051 120.0 sp|Q3SYZ3|CR3L3_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.000320051 118.0 sp|Q6NW59|ATF4_DANRE sp|Q1XGE2|HAC1_ASPOR 0.000320051 116.0 sp|Q9R1S4|XBP1_RAT sp|Q1XGE2|HAC1_ASPOR 0.000340058 118.0 sp|Q06507|ATF4_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.000440097 117.0 sp|P18848|ATF4_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.000440097 96.0 sp|O35284|BATF_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.00053014 116.0 sp|P13346|FOSB_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.000590174 115.0 sp|Q90888|MAFB_CHICK sp|Q1XGE2|HAC1_ASPOR 0.000590174 115.0 sp|Q90370|MAFB_COTJA sp|Q1XGE2|HAC1_ASPOR 0.000710252 113.0 sp|O35426|XBP1_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.000840353 114.0 sp|P51145|FOSL2_RAT sp|Q1XGE2|HAC1_ASPOR 0.000890396 116.0 sp|Q68CJ9|CR3L3_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.000970471 121.0 sp|A4R2R1|NST1_MAGGR sp|Q1XGE2|HAC1_ASPOR 0.00110061 112.0 sp|O57342|MAFA_COTJA sp|Q1XGE2|HAC1_ASPOR 0.00120072 103.0 sp|O60675|MAFK_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.00120072 111.0 sp|P15407|FOSL1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.00140098 115.0 sp|Q5FVM5|CR3L3_RAT sp|Q1XGE2|HAC1_ASPOR 0.00150113 117.0 sp|Q03173|ENAH_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.00150113 112.0 sp|P53539|FOSB_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.00160128 117.0 sp|Q2VZV0|IF2_MAGSA sp|Q1XGE2|HAC1_ASPOR 0.00170145 102.0 sp|Q61827|MAFK_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.00180162 117.0 sp|P29747|CREBA_DROME sp|Q1XGE2|HAC1_ASPOR 0.00190181 112.0 sp|O88479|FOS_MESAU sp|Q1XGE2|HAC1_ASPOR 0.00190181 111.0 sp|Q9TUB3|FOSB_CANFA sp|Q1XGE2|HAC1_ASPOR 0.002002 112.0 sp|Q8TEY5|CR3L4_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.002002 112.0 sp|Q5UEM8|CR3L4_MACFA sp|Q1XGE2|HAC1_ASPOR 0.002002 111.0 sp|Q9ES19|ATF4_RAT sp|Q1XGE2|HAC1_ASPOR 0.002002 111.0 sp|P79702|FOS_CYPCA sp|Q1XGE2|HAC1_ASPOR 0.00210221 114.0 sp|Q8N8S7|ENAH_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.00230265 110.0 sp|P47930|FOSL2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.00270365 112.0 sp|Q5R9C9|ATF7_PONAB sp|Q1XGE2|HAC1_ASPOR 0.00280393 112.0 sp|P17544|ATF7_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.00300451 109.0 sp|Q9Y5Q3|MAFB_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.00320513 118.0 sp|Q9UQ88|CD11A_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.00330546 110.0 sp|O43889|CREB3_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.00340579 109.0 sp|Q3ZCH6|ATF4_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.00350614 110.0 sp|Q8R0S1|ATF7_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.00370686 108.0 sp|P42774|GBF1_ARATH sp|Q1XGE2|HAC1_ASPOR 0.00380724 109.0 sp|Q8SQ19|CREB3_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.00380724 111.0 sp|Q5UEM7|CR3L4_RAT sp|Q1XGE2|HAC1_ASPOR 0.00390762 108.0 sp|P54842|MAFB_RAT sp|Q1XGE2|HAC1_ASPOR 0.00390762 113.0 sp|A5PKJ4|MK07_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.00400802 109.0 sp|P01101|FOS_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.00451016 113.0 sp|O13024|INCEA_XENLA sp|Q1XGE2|HAC1_ASPOR 0.00501254 107.0 sp|Q2PFS4|MAFB_MACFA sp|Q1XGE2|HAC1_ASPOR 0.00501254 113.0 sp|Q5KGK5|EIF3A_CRYNE sp|Q1XGE2|HAC1_ASPOR 0.00511305 108.0 sp|O97930|FOS_PIG sp|Q1XGE2|HAC1_ASPOR 0.00511305 108.0 sp|P01102|FOS_MSVFB sp|Q1XGE2|HAC1_ASPOR 0.00571631 100.0 sp|Q09926|PCR1_SCHPO sp|Q1XGE2|HAC1_ASPOR 0.0062193 98.0 sp|Q90596|MAFK_CHICK sp|Q1XGE2|HAC1_ASPOR 0.0062193 106.0 sp|Q504L8|MAFB_XENTR sp|Q1XGE2|HAC1_ASPOR 0.00652122 114.0 sp|Q1DQC1|PAN1_COCIM sp|Q1XGE2|HAC1_ASPOR 0.00652122 106.0 sp|P54841|MAFB_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.00783058 113.0 sp|Q5A2K0|NST1_CANAL sp|Q1XGE2|HAC1_ASPOR 0.00793137 108.0 sp|Q8VCH8|UBXN4_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.00793137 107.0 sp|Q502F0|CR3LA_DANRE sp|Q1XGE2|HAC1_ASPOR 0.00803217 104.0 sp|P10158|FOSL1_RAT sp|Q1XGE2|HAC1_ASPOR 0.00813298 98.0 sp|P97875|JDP2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.00813298 98.0 sp|Q78E65|JDP2_RAT sp|Q1XGE2|HAC1_ASPOR 0.00853633 105.0 sp|P15408|FOSL2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.00873807 104.0 sp|O42290|MAFA_CHICK sp|Q1XGE2|HAC1_ASPOR 0.0100503 103.0 sp|A1C9M5|KAPC_ASPCL sp|Q1XGE2|HAC1_ASPOR 0.0110609 109.0 sp|P0C865|MK07_RAT sp|Q1XGE2|HAC1_ASPOR 0.0130852 109.0 sp|Q15424|SAFB1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0140989 110.0 sp|O60841|IF2P_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0140989 110.0 sp|Q5RDE1|IF2P_PONAB sp|Q1XGE2|HAC1_ASPOR 0.0140989 105.0 sp|Q9M7Q3|AI5L6_ARATH sp|Q1XGE2|HAC1_ASPOR 0.0151136 109.0 sp|A9V549|EIF3A_MONBE sp|Q1XGE2|HAC1_ASPOR 0.0161294 110.0 sp|Q9UKV3|ACINU_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0161294 104.0 sp|Q63ZM7|STABP_XENLA sp|Q1XGE2|HAC1_ASPOR 0.018164 110.0 sp|Q4QRL3|CC88B_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.018164 103.0 sp|P01100|FOS_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.018164 103.0 sp|P12841|FOS_RAT sp|Q1XGE2|HAC1_ASPOR 0.0191828 96.0 sp|P19880|YAP1_YEAST sp|Q1XGE2|HAC1_ASPOR 0.0191828 108.0 sp|Q8CH25|SLTM_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0191828 108.0 sp|Q9NWH9|SLTM_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0202027 101.0 sp|Q16534|HLF_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0202027 101.0 sp|Q8BW74|HLF_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0212236 107.0 sp|Q6CBW0|NST1_YARLI sp|Q1XGE2|HAC1_ASPOR 0.0222456 105.0 sp|Q498L2|SLTM_XENLA sp|Q1XGE2|HAC1_ASPOR 0.0232686 89.0 sp|Q1E554|CGR1_COCIM sp|Q1XGE2|HAC1_ASPOR 0.0232686 102.0 sp|Q91496|FOS_TETFL sp|Q1XGE2|HAC1_ASPOR 0.0232686 98.0 sp|Q9ESN9|JIP3_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0232686 102.0 sp|P53450|FOS_TAKRU sp|Q1XGE2|HAC1_ASPOR 0.0232686 106.0 sp|Q05682|CALD1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0242927 102.0 sp|O77628|FOS_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.0242927 102.0 sp|Q56TT7|FOS_PHOCM sp|Q1XGE2|HAC1_ASPOR 0.0242927 100.0 sp|Q0CEI3|KAPC_ASPTN sp|Q1XGE2|HAC1_ASPOR 0.0242927 107.0 sp|Q6P9R4|ARHGI_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0253178 103.0 sp|P29681|IMPE2_DROME sp|Q1XGE2|HAC1_ASPOR 0.0253178 106.0 sp|A2AJI0|MA7D1_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0283995 106.0 sp|Q5R452|SAFB1_PONAB sp|Q1XGE2|HAC1_ASPOR 0.0283995 102.0 sp|Q1LYG4|CR3LB_DANRE sp|Q1XGE2|HAC1_ASPOR 0.0283995 103.0 sp|Q9D439|CCD11_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0294288 99.0 sp|P48755|FOSL1_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0294288 100.0 sp|Q6DE84|MAFB_XENLA sp|Q1XGE2|HAC1_ASPOR 0.0304592 101.0 sp|Q54RZ9|BZPG_DICDI sp|Q1XGE2|HAC1_ASPOR 0.0304592 109.0 sp|A0JMK9|CAF1A_DANRE sp|Q1XGE2|HAC1_ASPOR 0.0304592 100.0 sp|P18625|FOSL2_CHICK sp|Q1XGE2|HAC1_ASPOR 0.0314907 99.0 sp|A2R346|KAPC_ASPNC sp|Q1XGE2|HAC1_ASPOR 0.0314907 101.0 sp|Q8HZP6|FOS_FELCA sp|Q1XGE2|HAC1_ASPOR 0.0335568 103.0 sp|P26042|MOES_PIG sp|Q1XGE2|HAC1_ASPOR 0.0335568 103.0 sp|Q2HJ49|MOES_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.0345914 105.0 sp|A5FV21|IF2_ACICJ sp|Q1XGE2|HAC1_ASPOR 0.0345914 103.0 sp|A6SCT6|DBP3_BOTFB sp|Q1XGE2|HAC1_ASPOR 0.0356272 106.0 sp|Q7PGE8|EIF3A_ANOGA sp|Q1XGE2|HAC1_ASPOR 0.036664 105.0 sp|O77788|NFM_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.0387408 105.0 sp|Q9JTB5|IF2_NEIMA sp|Q1XGE2|HAC1_ASPOR 0.0387408 105.0 sp|Q9JYD2|IF2_NEIMB sp|Q1XGE2|HAC1_ASPOR 0.0387408 105.0 sp|A1KV51|IF2_NEIMF sp|Q1XGE2|HAC1_ASPOR 0.0387408 98.0 sp|P0C5H8|KAPC_EMENI sp|Q1XGE2|HAC1_ASPOR 0.0397809 105.0 sp|Q80YR5|SAFB2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0397809 100.0 sp|Q56TN0|FOS_PHORO sp|Q1XGE2|HAC1_ASPOR 0.0418642 98.0 sp|Q4U1U2|MAFA_XENTR sp|Q1XGE2|HAC1_ASPOR 0.0429075 102.0 sp|P26038|MOES_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0439519 98.0 sp|Q64709|HLF_RAT sp|Q1XGE2|HAC1_ASPOR 0.0449974 104.0 sp|A0JMT0|CA1AB_XENLA sp|Q1XGE2|HAC1_ASPOR 0.0449974 112.0 sp|Q6Y7W6|PERQ2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0460439 92.0 sp|Q8WYK2|JDP2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0470916 99.0 sp|Q8K1L0|CREB5_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0470916 106.0 sp|Q9C0A6|SETD5_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0470916 101.0 sp|Q92575|UBXN4_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0470916 101.0 sp|Q5R4I3|UBXN4_PONAB sp|Q1XGE2|HAC1_ASPOR 0.0491902 96.0 sp|P14233|TGA1B_TOBAC sp|Q1XGE2|HAC1_ASPOR 0.0491902 104.0 sp|A9M1D5|IF2_NEIM0 sp|Q1XGE2|HAC1_ASPOR 0.0502412 103.0 sp|Q554P0|BZPJ_DICDI sp|Q1XGE2|HAC1_ASPOR 0.0502412 102.0 sp|Q8N9W4|GG6L2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0512933 77.0 sp|Q8N300|CCD23_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0534008 100.0 sp|O81025|P2A03_ARATH sp|Q1XGE2|HAC1_ASPOR 0.0565704 101.0 sp|O35763|MOES_RAT sp|Q1XGE2|HAC1_ASPOR 0.0565704 102.0 sp|Q9Z220|TSG10_RAT sp|Q1XGE2|HAC1_ASPOR 0.0576291 103.0 sp|Q32N93|INCEB_XENLA sp|Q1XGE2|HAC1_ASPOR 0.0576291 107.0 sp|Q95XZ5|NPBL_CAEEL sp|Q1XGE2|HAC1_ASPOR 0.0608121 103.0 sp|Q6CT90|EIF3A_KLULA sp|Q1XGE2|HAC1_ASPOR 0.0608121 103.0 sp|Q5F489|TAF3_CHICK sp|Q1XGE2|HAC1_ASPOR 0.0618754 98.0 sp|P42775|GBF2_ARATH sp|Q1XGE2|HAC1_ASPOR 0.0618754 103.0 sp|Q55EQ3|Y9086_DICDI sp|Q1XGE2|HAC1_ASPOR 0.0618754 98.0 sp|Q54LU8|Y8646_DICDI sp|Q1XGE2|HAC1_ASPOR 0.0682788 94.0 sp|P94517|YSCB_BACSU sp|Q1XGE2|HAC1_ASPOR 0.0693501 103.0 sp|Q2UKG6|EIF3A_ASPOR sp|Q1XGE2|HAC1_ASPOR 0.071496 101.0 sp|Q9Y592|CCD41_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.071496 111.0 sp|Q6Y7W8|PERQ2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.071496 98.0 sp|Q8X229|FCR3_CANAL sp|Q1XGE2|HAC1_ASPOR 0.0725707 100.0 sp|P26041|MOES_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0747235 105.0 sp|Q9TW28|MYOM_DICDI sp|Q1XGE2|HAC1_ASPOR 0.076881 100.0 sp|Q9NZ53|PDXL2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0779615 99.0 sp|Q02930|CREB5_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0790432 102.0 sp|Q5HZG4|TAF3_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.080126 102.0 sp|A0LE19|IF2_MAGSM sp|Q1XGE2|HAC1_ASPOR 0.0812101 103.0 sp|Q869E1|DNLI1_DICDI sp|Q1XGE2|HAC1_ASPOR 0.0844692 104.0 sp|P22793|TRHY_SHEEP sp|Q1XGE2|HAC1_ASPOR 0.0888312 95.0 sp|O70191|ATF5_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0888312 96.0 sp|Q39140|TGA6_ARATH sp|Q1XGE2|HAC1_ASPOR 0.0888312 98.0 sp|Q68EL6|NFIL3_DANRE sp|Q1XGE2|HAC1_ASPOR 0.0899247 101.0 sp|Q55FW7|GLE1_DICDI sp|Q1XGE2|HAC1_ASPOR 0.0965109 89.0 sp|Q3TLH4|BA2L2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.0965109 95.0 sp|Q04323|UBXN1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.0965109 96.0 sp|P23922|HBP1A_WHEAT sp|Q1XGE2|HAC1_ASPOR 0.098716 94.0 sp|Q9C5Q2|AI5L3_ARATH sp|Q1XGE2|HAC1_ASPOR 0.102033 101.0 sp|Q54TD7|DDX24_DICDI sp|Q1XGE2|HAC1_ASPOR 0.103141 101.0 sp|Q5F797|IF2_NEIG1 sp|Q1XGE2|HAC1_ASPOR 0.103141 101.0 sp|B4RMZ3|IF2_NEIG2 sp|Q1XGE2|HAC1_ASPOR 0.10425 99.0 sp|Q86AH4|Y8592_DICDI sp|Q1XGE2|HAC1_ASPOR 0.105361 101.0 sp|Q8IIG7|YPF05_PLAF7 sp|Q1XGE2|HAC1_ASPOR 0.116534 103.0 sp|B2KI97|THOC2_RHIFE sp|Q1XGE2|HAC1_ASPOR 0.116534 102.0 sp|Q9UM54|MYO6_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.116534 100.0 sp|Q3KQU3|MA7D1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.116534 98.0 sp|Q14244|MAP7_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.116534 90.0 sp|P29596|ATF3_RAT sp|Q1XGE2|HAC1_ASPOR 0.116534 104.0 sp|Q5TM26|BAT2_MACMU sp|Q1XGE2|HAC1_ASPOR 0.127833 100.0 sp|Q0IHP2|INCE_XENTR sp|Q1XGE2|HAC1_ASPOR 0.127833 100.0 sp|Q9NQS7|INCE_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.127833 97.0 sp|Q5HZY0|UBXN4_RAT sp|Q1XGE2|HAC1_ASPOR 0.127833 87.0 sp|Q90595|MAFF_CHICK sp|Q1XGE2|HAC1_ASPOR 0.127833 101.0 sp|Q6ZSZ5|ARHGI_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.127833 98.0 sp|Q7PS12|MOEH_ANOGA sp|Q1XGE2|HAC1_ASPOR 0.139262 99.0 sp|P12957|CALD1_CHICK sp|Q1XGE2|HAC1_ASPOR 0.139262 93.0 sp|Q08DA8|ATF1_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.139262 91.0 sp|Q94126|CES2_CAEEL sp|Q1XGE2|HAC1_ASPOR 0.139262 88.0 sp|O66547|Y157_AQUAE sp|Q1XGE2|HAC1_ASPOR 0.139262 101.0 sp|A6ZRZ0|NST1_YEAS7 sp|Q1XGE2|HAC1_ASPOR 0.139262 101.0 sp|P53935|NST1_YEAST sp|Q1XGE2|HAC1_ASPOR 0.139262 94.0 sp|A3BYC1|HOX25_ORYSJ sp|Q1XGE2|HAC1_ASPOR 0.139262 102.0 sp|B1AZI6|THOC2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.150823 104.0 sp|Q9H254|SPTN4_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.150823 93.0 sp|Q2UNX4|KAPC_ASPOR sp|Q1XGE2|HAC1_ASPOR 0.150823 94.0 sp|Q9JJ50|HGS_RAT sp|Q1XGE2|HAC1_ASPOR 0.150823 89.0 sp|Q2KII1|ATF3_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.150823 98.0 sp|Q99941|ATF6B_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.150823 103.0 sp|Q7TSC1|BAT2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.150823 97.0 sp|Q4I877|NDE1_GIBZE sp|Q1XGE2|HAC1_ASPOR 0.162519 98.0 sp|Q84WU4|GOGC3_ARATH sp|Q1XGE2|HAC1_ASPOR 0.162519 93.0 sp|Q499N6|UBXN1_RAT sp|Q1XGE2|HAC1_ASPOR 0.162519 81.0 sp|B4PPK2|FOSL_DROYA sp|Q1XGE2|HAC1_ASPOR 0.162519 101.0 sp|A4R8N4|PAN1_MAGGR sp|Q1XGE2|HAC1_ASPOR 0.162519 101.0 sp|B2AWS3|PAN1_PODAN sp|Q1XGE2|HAC1_ASPOR 0.162519 102.0 sp|Q92545|TM131_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.174353 99.0 sp|Q38W81|IF2_LACSS sp|Q1XGE2|HAC1_ASPOR 0.174353 94.0 sp|Q789F3|MAF_CHICK sp|Q1XGE2|HAC1_ASPOR 0.174353 92.0 sp|P49716|CEBPD_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.174353 92.0 sp|P81269|ATF1_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.174353 94.0 sp|P23091|MAF_AVIS4 sp|Q1XGE2|HAC1_ASPOR 0.174353 92.0 sp|P18846|ATF1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.174353 102.0 sp|Q07283|TRHY_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.18633 95.0 sp|Q4X1V0|NDE1_ASPFU sp|Q1XGE2|HAC1_ASPOR 0.18633 79.0 sp|Q8R1H8|BATF2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.18633 95.0 sp|Q66J36|NFIL3_XENLA sp|Q1XGE2|HAC1_ASPOR 0.18633 97.0 sp|P13816|GARP_PLAFF sp|Q1XGE2|HAC1_ASPOR 0.18633 93.0 sp|P38749|YAP3_YEAST sp|Q1XGE2|HAC1_ASPOR 0.198451 99.0 sp|Q3UIW5|RNF10_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.198451 93.0 sp|P23923|HBP1B_WHEAT sp|Q1XGE2|HAC1_ASPOR 0.198451 97.0 sp|Q9D5R3|CCD41_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.198451 101.0 sp|Q9QXL2|KI21A_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.198451 95.0 sp|Q9UPT6|JIP3_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.198451 99.0 sp|P16884|NFH_RAT sp|Q1XGE2|HAC1_ASPOR 0.198451 88.0 sp|Q60765|ATF3_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.198451 91.0 sp|Q9N0J3|CEBPD_SHEEP sp|Q1XGE2|HAC1_ASPOR 0.198451 99.0 sp|A5DLJ8|NST1_PICGU sp|Q1XGE2|HAC1_ASPOR 0.210721 98.0 sp|A5DHL9|EIF3A_PICGU sp|Q1XGE2|HAC1_ASPOR 0.210721 92.0 sp|Q6NXA9|UBXN1_DANRE sp|Q1XGE2|HAC1_ASPOR 0.210721 91.0 sp|O02756|CEBPD_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.210721 97.0 sp|O88735|MAP7_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.210721 95.0 sp|Q99105|MYSU_RABIT sp|Q1XGE2|HAC1_ASPOR 0.223144 94.0 sp|Q9M7Q2|AI5L7_ARATH sp|Q1XGE2|HAC1_ASPOR 0.223144 95.0 sp|Q9HCM9|TRI39_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.223144 95.0 sp|Q1XHU0|TRI39_PANTR sp|Q1XGE2|HAC1_ASPOR 0.223144 93.0 sp|Q7SHT5|PXR1_NEUCR sp|Q1XGE2|HAC1_ASPOR 0.235722 71.0 sp|Q32LJ0|CCD23_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.235722 71.0 sp|Q99LQ4|CCD23_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.235722 71.0 sp|Q4KLG3|CCD23_RAT sp|Q1XGE2|HAC1_ASPOR 0.235722 99.0 sp|Q54XG7|DIMA_DICDI sp|Q1XGE2|HAC1_ASPOR 0.235722 86.0 sp|Q54CY3|Y4489_DICDI sp|Q1XGE2|HAC1_ASPOR 0.235722 100.0 sp|B0KWH8|THOC2_CALJA sp|Q1XGE2|HAC1_ASPOR 0.235722 96.0 sp|Q7Z4V5|HDGR2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.248461 102.0 sp|P15205|MAP1B_RAT sp|Q1XGE2|HAC1_ASPOR 0.248461 92.0 sp|Q98UK4|MAF_DANRE sp|Q1XGE2|HAC1_ASPOR 0.248461 108.0 sp|O75037|KI21B_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.248461 96.0 sp|Q02040|SF17A_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.248461 96.0 sp|P82179|TRDN_CANFA sp|Q1XGE2|HAC1_ASPOR 0.248461 95.0 sp|B0WYY2|MOEH_CULQU sp|Q1XGE2|HAC1_ASPOR 0.261365 99.0 sp|Q556Q3|IRLF_DICDI sp|Q1XGE2|HAC1_ASPOR 0.261365 87.0 sp|P18847|ATF3_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.274437 95.0 sp|Q5RCJ1|CIP4_PONAB sp|Q1XGE2|HAC1_ASPOR 0.274437 92.0 sp|Q1RM35|CC104_DANRE sp|Q1XGE2|HAC1_ASPOR 0.274437 90.0 sp|A2Z0Q0|HOX25_ORYSI sp|Q1XGE2|HAC1_ASPOR 0.274437 94.0 sp|P15336|ATF2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.274437 97.0 sp|O88453|SAFB1_RAT sp|Q1XGE2|HAC1_ASPOR 0.274437 99.0 sp|B0YC95|PAN1_ASPFC sp|Q1XGE2|HAC1_ASPOR 0.274437 99.0 sp|Q4WG58|PAN1_ASPFU sp|Q1XGE2|HAC1_ASPOR 0.287682 99.0 sp|A6NC98|CC88B_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.287682 99.0 sp|A6R7X5|PAN1_AJECN sp|Q1XGE2|HAC1_ASPOR 0.287682 98.0 sp|Q05D44|IF2P_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.301105 92.0 sp|P54843|MAF_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.301105 92.0 sp|O75444|MAF_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.301105 92.0 sp|A7Z017|MAF_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.314711 89.0 sp|A5PJN1|TAP26_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.314711 93.0 sp|O24160|TGA21_TOBAC sp|Q1XGE2|HAC1_ASPOR 0.314711 96.0 sp|Q54Y73|BZPD_DICDI sp|Q1XGE2|HAC1_ASPOR 0.314711 93.0 sp|Q5FW38|NFIL3_XENTR sp|Q1XGE2|HAC1_ASPOR 0.314711 91.0 sp|Q39163|TGA5_ARATH sp|Q1XGE2|HAC1_ASPOR 0.314711 85.0 sp|Q90889|MAFG_CHICK sp|Q1XGE2|HAC1_ASPOR 0.328504 95.0 sp|O35451|ATF6B_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.328504 107.0 sp|Q9QXL1|KI21B_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.328504 97.0 sp|Q5RG44|K1211_DANRE sp|Q1XGE2|HAC1_ASPOR 0.328504 100.0 sp|P48634|BAT2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.328504 96.0 sp|C0QTL9|IF2_PERMH sp|Q1XGE2|HAC1_ASPOR 0.328504 96.0 sp|P53352|INCE_CHICK sp|Q1XGE2|HAC1_ASPOR 0.34249 92.0 sp|Q8BKJ9|SIRT7_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.34249 91.0 sp|Q5XIB5|CCD86_RAT sp|Q1XGE2|HAC1_ASPOR 0.34249 93.0 sp|O93602|ATF2_CHICK sp|Q1XGE2|HAC1_ASPOR 0.34249 93.0 sp|P16951|ATF2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.34249 96.0 sp|Q5QTY8|IF2_IDILO sp|Q1XGE2|HAC1_ASPOR 0.34249 84.0 sp|Q6FUQ5|FYV7_CANGA sp|Q1XGE2|HAC1_ASPOR 0.34249 97.0 sp|P37934|MAAY3_SCHCO sp|Q1XGE2|HAC1_ASPOR 0.34249 92.0 sp|Q99089|CPRF1_PETCR sp|Q1XGE2|HAC1_ASPOR 0.356675 93.0 sp|Q3ZBU9|UBXN4_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.356675 94.0 sp|P34511|YMX3_CAEEL sp|Q1XGE2|HAC1_ASPOR 0.371064 96.0 sp|Q8C0Q2|ZHX3_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.371064 98.0 sp|Q5B5B0|PAN1_EMENI sp|Q1XGE2|HAC1_ASPOR 0.371064 95.0 sp|A2AG50|MA7D2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.371064 98.0 sp|Q4PBP6|NST1_USTMA sp|Q1XGE2|HAC1_ASPOR 0.371064 95.0 sp|Q7KZI7|MARK2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.371064 89.0 sp|Q03484|CEBPD_RAT sp|Q1XGE2|HAC1_ASPOR 0.385662 96.0 sp|Q80VM7|ANR24_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.385662 91.0 sp|P54844|MAF_RAT sp|Q1XGE2|HAC1_ASPOR 0.385662 96.0 sp|B1ZDQ8|IF2_METPB sp|Q1XGE2|HAC1_ASPOR 0.385662 94.0 sp|Q99LI8|HGS_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.385662 90.0 sp|Q6BUE3|PXR1_DEBHA sp|Q1XGE2|HAC1_ASPOR 0.385662 96.0 sp|Q7RWT1|EIF3A_NEUCR sp|Q1XGE2|HAC1_ASPOR 0.385662 90.0 sp|Q6ZDF3|TRAB1_ORYSJ sp|Q1XGE2|HAC1_ASPOR 0.400478 98.0 sp|Q8NI27|THOC2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.400478 98.0 sp|B1MTK1|THOC2_CALMO sp|Q1XGE2|HAC1_ASPOR 0.400478 93.0 sp|Q8N4C8|MINK1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.400478 91.0 sp|P42776|GBF3_ARATH sp|Q1XGE2|HAC1_ASPOR 0.415515 89.0 sp|A1D9Z7|KAPC_NEOFI sp|Q1XGE2|HAC1_ASPOR 0.415515 94.0 sp|Q4G091|MICLK_RAT sp|Q1XGE2|HAC1_ASPOR 0.415515 89.0 sp|Q6P788|ATF5_RAT sp|Q1XGE2|HAC1_ASPOR 0.415515 89.0 sp|Q9Y2D1|ATF5_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.415515 90.0 sp|P43273|TGA2_ARATH sp|Q1XGE2|HAC1_ASPOR 0.415515 88.0 sp|Q795Q5|YTTA_BACSU sp|Q1XGE2|HAC1_ASPOR 0.430783 93.0 sp|Q32LP2|RADI_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.430783 93.0 sp|Q9PU45|RADI_CHICK sp|Q1XGE2|HAC1_ASPOR 0.430783 93.0 sp|P35241|RADI_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.430783 93.0 sp|P26044|RADI_PIG sp|Q1XGE2|HAC1_ASPOR 0.430783 98.0 sp|Q2KHR3|QSER1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.446287 91.0 sp|Q54NF3|Y6434_DICDI sp|Q1XGE2|HAC1_ASPOR 0.446287 89.0 sp|Q99091|CPRF3_PETCR sp|Q1XGE2|HAC1_ASPOR 0.446287 102.0 sp|P30427|PLEC1_RAT sp|Q1XGE2|HAC1_ASPOR 0.446287 96.0 sp|Q553B1|DDX46_DICDI sp|Q1XGE2|HAC1_ASPOR 0.462035 96.0 sp|Q5AXH3|TOF1_EMENI sp|Q1XGE2|HAC1_ASPOR 0.462035 90.0 sp|Q0V9K1|MAF_XENTR sp|Q1XGE2|HAC1_ASPOR 0.462035 96.0 sp|A6RW62|NST1_BOTFB sp|Q1XGE2|HAC1_ASPOR 0.462035 96.0 sp|A7EMM3|NST1_SCLS1 sp|Q1XGE2|HAC1_ASPOR 0.462035 92.0 sp|Q869T2|Y7634_DICDI sp|Q1XGE2|HAC1_ASPOR 0.462035 97.0 sp|A1DC51|PAN1_NEOFI sp|Q1XGE2|HAC1_ASPOR 0.462035 94.0 sp|Q960X8|HRS_DROME sp|Q1XGE2|HAC1_ASPOR 0.462035 91.0 sp|Q5BJY9|K1C18_RAT sp|Q1XGE2|HAC1_ASPOR 0.462035 96.0 sp|Q6BUT3|NST1_DEBHA sp|Q1XGE2|HAC1_ASPOR 0.462035 97.0 sp|A1CD74|PAN1_ASPCL sp|Q1XGE2|HAC1_ASPOR 0.478036 87.0 sp|Q09202|YP23_CAEEL sp|Q1XGE2|HAC1_ASPOR 0.478036 96.0 sp|B2GUV7|IF2P_RAT sp|Q1XGE2|HAC1_ASPOR 0.478036 68.0 sp|A5F4W4|ZAPB_VIBC3 sp|Q1XGE2|HAC1_ASPOR 0.478036 68.0 sp|Q9KNP5|ZAPB_VIBCH sp|Q1XGE2|HAC1_ASPOR 0.478036 68.0 sp|C3LSB5|ZAPB_VIBCM sp|Q1XGE2|HAC1_ASPOR 0.494296 96.0 sp|P97820|M4K4_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.494296 93.0 sp|P34099|KAPC_DICDI sp|Q1XGE2|HAC1_ASPOR 0.494296 96.0 sp|O95819|M4K4_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.494296 88.0 sp|P11115|CPC1_NEUCR sp|Q1XGE2|HAC1_ASPOR 0.494296 88.0 sp|P42777|GBF4_ARATH sp|Q1XGE2|HAC1_ASPOR 0.494296 89.0 sp|A3KMR8|MAFA_DANRE sp|Q1XGE2|HAC1_ASPOR 0.494296 94.0 sp|O60132|TEA4_SCHPO sp|Q1XGE2|HAC1_ASPOR 0.494296 97.0 sp|Q7KQM6|PERQ1_DROME sp|Q1XGE2|HAC1_ASPOR 0.510826 91.0 sp|Q9ZLW8|PGBA_HELPJ sp|Q1XGE2|HAC1_ASPOR 0.510826 91.0 sp|O25249|PGBA_HELPY sp|Q1XGE2|HAC1_ASPOR 0.510826 83.0 sp|Q13164|MK07_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.510826 95.0 sp|Q1DXU0|EIF3A_COCIM sp|Q1XGE2|HAC1_ASPOR 0.527633 90.0 sp|O14964|HGS_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.527633 95.0 sp|Q0CUP6|EIF3A_ASPTN sp|Q1XGE2|HAC1_ASPOR 0.527633 97.0 sp|A5DXA0|NST1_LODEL sp|Q1XGE2|HAC1_ASPOR 0.527633 88.0 sp|Q4WA21|KAPC_ASPFU sp|Q1XGE2|HAC1_ASPOR 0.527633 96.0 sp|Q54GQ1|MTMR_DICDI sp|Q1XGE2|HAC1_ASPOR 0.527633 87.0 sp|P23614|BASP1_CHICK sp|Q1XGE2|HAC1_ASPOR 0.527633 93.0 sp|Q8SSQ0|GEFR_DICDI sp|Q1XGE2|HAC1_ASPOR 0.527633 97.0 sp|Q7Z4S6|KI21A_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.527633 80.0 sp|Q2KI00|F107B_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.527633 94.0 sp|Q08014|MEDB_GIALA sp|Q1XGE2|HAC1_ASPOR 0.544727 90.0 sp|Q9M7Q5|AI5L4_ARATH sp|Q1XGE2|HAC1_ASPOR 0.544727 90.0 sp|Q09458|YQ37_CAEEL sp|Q1XGE2|HAC1_ASPOR 0.544727 98.0 sp|Q6MG48|BAT2_RAT sp|Q1XGE2|HAC1_ASPOR 0.544727 94.0 sp|Q9WU62|INCE_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.562119 92.0 sp|P26043|RADI_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.562119 91.0 sp|Q12234|RUD3_YEAST sp|Q1XGE2|HAC1_ASPOR 0.562119 94.0 sp|Q98TA5|CA1AA_XENLA sp|Q1XGE2|HAC1_ASPOR 0.579818 76.0 sp|Q07E15|CTTB2_MUSPF sp|Q1XGE2|HAC1_ASPOR 0.579818 90.0 sp|Q1MTN9|RLF2_SCHPO sp|Q1XGE2|HAC1_ASPOR 0.579818 94.0 sp|P07197|NFM_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.579818 88.0 sp|Q6IP50|UBX1A_XENLA sp|Q1XGE2|HAC1_ASPOR 0.579818 88.0 sp|Q922Y1|UBXN1_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.597837 84.0 sp|Q5JR59|MTUS2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.597837 73.0 sp|P14918|EXTN_MAIZE sp|Q1XGE2|HAC1_ASPOR 0.616186 94.0 sp|C1D8X2|IF2_LARHH sp|Q1XGE2|HAC1_ASPOR 0.616186 93.0 sp|Q7SAF6|CEF1_NEUCR sp|Q1XGE2|HAC1_ASPOR 0.616186 67.0 sp|A6VLC4|ZAPB_ACTSZ sp|Q1XGE2|HAC1_ASPOR 0.634878 86.0 sp|P72929|Y1021_SYNY3 sp|Q1XGE2|HAC1_ASPOR 0.634878 92.0 sp|O14273|YET4_SCHPO sp|Q1XGE2|HAC1_ASPOR 0.653926 82.0 sp|Q6DGM8|JDP2_DANRE sp|Q1XGE2|HAC1_ASPOR 0.653926 91.0 sp|Q8GT73|BH119_ARATH sp|Q1XGE2|HAC1_ASPOR 0.653926 96.0 sp|C1FXW9|THOC2_DASNO sp|Q1XGE2|HAC1_ASPOR 0.673345 88.0 sp|P12270|TPR_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.693147 86.0 sp|P29176|FOSX_MSVFR sp|Q1XGE2|HAC1_ASPOR 0.693147 94.0 sp|Q9UPN4|AZI1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.71335 75.0 sp|P78559|MAP1A_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.71335 86.0 sp|Q5AVK6|NOP16_EMENI sp|Q1XGE2|HAC1_ASPOR 0.71335 79.0 sp|Q9H098|F107B_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.71335 88.0 sp|P20226|TBP_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.733969 89.0 sp|Q08E13|RNF10_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.733969 87.0 sp|Q9VL63|U430_DROME sp|Q1XGE2|HAC1_ASPOR 0.733969 92.0 sp|Q13061|TRDN_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.733969 93.0 sp|Q9ES64|USH1C_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.733969 92.0 sp|Q86AF3|BZPH_DICDI sp|Q1XGE2|HAC1_ASPOR 0.755023 98.0 sp|Q9Y520|BA2L2_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.755023 87.0 sp|Q9LES3|AI5L2_ARATH sp|Q1XGE2|HAC1_ASPOR 0.755023 89.0 sp|Q55E93|BZPE_DICDI sp|Q1XGE2|HAC1_ASPOR 0.776529 94.0 sp|Q15147|PLCB4_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.776529 94.0 sp|Q9QW07|PLCB4_RAT sp|Q1XGE2|HAC1_ASPOR 0.776529 88.0 sp|Q9QWW1|HOME2_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.776529 88.0 sp|Q98UK5|MAFB_DANRE sp|Q1XGE2|HAC1_ASPOR 0.776529 89.0 sp|Q9JJ89|CCD86_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.798508 92.0 sp|Q499E4|DZI1L_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.798508 87.0 sp|P34618|CEC1_CAEEL sp|Q1XGE2|HAC1_ASPOR 0.798508 95.0 sp|Q75JP5|Y2471_DICDI sp|Q1XGE2|HAC1_ASPOR 0.798508 94.0 sp|Q1E1H4|NST1_COCIM sp|Q1XGE2|HAC1_ASPOR 0.820981 96.0 sp|P05661|MYSA_DROME sp|Q1XGE2|HAC1_ASPOR 0.820981 98.0 sp|Q9UPA5|BSN_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.84397 88.0 sp|Q55D99|PAKA_DICDI sp|Q1XGE2|HAC1_ASPOR 0.84397 91.0 sp|A5PKL7|LZTS2_BOVIN sp|Q1XGE2|HAC1_ASPOR 0.84397 88.0 sp|Q7RWR8|CWC26_NEUCR sp|Q1XGE2|HAC1_ASPOR 0.84397 84.0 sp|P35710|SOX5_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.867501 75.0 sp|P24152|EXTN_SORBI sp|Q1XGE2|HAC1_ASPOR 0.867501 88.0 sp|Q9Z2Q8|FOS_CRIGR sp|Q1XGE2|HAC1_ASPOR 0.867501 85.0 sp|B4GIF2|EIF3J_DROPE sp|Q1XGE2|HAC1_ASPOR 0.867501 85.0 sp|Q8I1E5|EIF3J_DROPS sp|Q1XGE2|HAC1_ASPOR 0.891598 93.0 sp|Q9R269|PEPL_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.891598 82.0 sp|P35711|SOX5_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.891598 86.0 sp|Q9ZJP4|TONB_HELPJ sp|Q1XGE2|HAC1_ASPOR 0.891598 91.0 sp|Q6NY15|TSG10_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.891598 93.0 sp|Q9Y4D1|DAAM1_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.891598 91.0 sp|P28741|KIF3A_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.916291 94.0 sp|Q9PTD7|CING_XENLA sp|Q1XGE2|HAC1_ASPOR 0.916291 92.0 sp|O94685|UCP8_SCHPO sp|Q1XGE2|HAC1_ASPOR 0.916291 94.0 sp|P20482|CNC_DROME sp|Q1XGE2|HAC1_ASPOR 0.916291 90.0 sp|P56095|AP1_KLULA sp|Q1XGE2|HAC1_ASPOR 0.916291 85.0 sp|P51984|CREB_CHLVR sp|Q1XGE2|HAC1_ASPOR 0.941609 89.0 sp|Q00969|ATF2_RAT sp|Q1XGE2|HAC1_ASPOR 0.941609 90.0 sp|Q29GR8|MOEH_DROPS sp|Q1XGE2|HAC1_ASPOR 0.967584 88.0 sp|Q10PR4|HSFA9_ORYSJ sp|Q1XGE2|HAC1_ASPOR 0.967584 90.0 sp|Q15642|CIP4_HUMAN sp|Q1XGE2|HAC1_ASPOR 0.967584 93.0 sp|Q1LUE5|ZCH18_DANRE sp|Q1XGE2|HAC1_ASPOR 0.967584 93.0 sp|B0W6N3|EIF3A_CULQU sp|Q1XGE2|HAC1_ASPOR 0.967584 94.0 sp|Q5XJV7|SETD5_MOUSE sp|Q1XGE2|HAC1_ASPOR 0.967584 93.0 sp|B3EX63|CING_SORAR sp|Q1XGE2|HAC1_ASPOR 0.994252 94.0 sp|Q2UDY8|PAN1_ASPOR sp|Q1XGE2|HAC1_ASPOR 0.994252 91.0 sp|Q5R7F9|MA7D2_PONAB sp|Q1XGE2|HAC1_ASPOR 0.994252 87.0 sp|O88801|HOME2_RAT sp|Q1XGE2|HAC1_ASPOR 0.994252 88.0 sp|Q8R424|STABP_RAT sp|Q1XGE2|HAC1_ASPOR 1.02165 91.0 sp|Q6NS15|MED15_XENLA sp|Q1XGE2|HAC1_ASPOR 1.02165 89.0 sp|Q6RFY2|PHAR3_RAT sp|Q1XGE2|HAC1_ASPOR 1.02165 71.0 sp|Q8C2B3|HDAC7_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.02165 65.0 sp|Q54DE2|Y4323_DICDI sp|Q1XGE2|HAC1_ASPOR 1.02165 65.0 sp|P41425|Y020_NPVAC sp|Q1XGE2|HAC1_ASPOR 1.02165 65.0 sp|A3MZY9|ZAPB_ACTP2 sp|Q1XGE2|HAC1_ASPOR 1.02165 65.0 sp|B3H152|ZAPB_ACTP7 sp|Q1XGE2|HAC1_ASPOR 1.02165 98.0 sp|O88737|BSN_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.04982 83.0 sp|B7GKC7|GRPE_ANOFW sp|Q1XGE2|HAC1_ASPOR 1.04982 93.0 sp|Q9CXK9|RBM33_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.04982 84.0 sp|Q6CJZ6|MED2_KLULA sp|Q1XGE2|HAC1_ASPOR 1.04982 95.0 sp|P14105|MYH9_CHICK sp|Q1XGE2|HAC1_ASPOR 1.04982 92.0 sp|A1WLI3|IF2_VEREI sp|Q1XGE2|HAC1_ASPOR 1.04982 89.0 sp|Q62736|CALD1_RAT sp|Q1XGE2|HAC1_ASPOR 1.07881 95.0 sp|Q5F3P8|SET1B_CHICK sp|Q1XGE2|HAC1_ASPOR 1.07881 96.0 sp|Q96JK9|MAML3_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.07881 89.0 sp|Q5NVN6|CEP63_PONAB sp|Q1XGE2|HAC1_ASPOR 1.07881 89.0 sp|Q9ZKY5|PGBB_HELPJ sp|Q1XGE2|HAC1_ASPOR 1.10866 90.0 sp|P18850|ATF6A_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.10866 85.0 sp|Q8N1L9|BATF2_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.10866 95.0 sp|Q9HD67|MYO10_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.10866 89.0 sp|Q0VF49|K2012_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.10866 93.0 sp|Q9JM52|MINK1_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.10866 88.0 sp|Q90Z72|NFIL3_CHICK sp|Q1XGE2|HAC1_ASPOR 1.10866 86.0 sp|P23050|FOS_AVINK sp|Q1XGE2|HAC1_ASPOR 1.13943 86.0 sp|Q32PF6|DBP_BOVIN sp|Q1XGE2|HAC1_ASPOR 1.13943 86.0 sp|Q10586|DBP_HUMAN sp|Q1XGE2|HAC1_ASPOR 1.13943 86.0 sp|Q60925|DBP_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.13943 86.0 sp|P16443|DBP_RAT sp|Q1XGE2|HAC1_ASPOR 1.13943 90.0 sp|Q66H89|CCD41_RAT sp|Q1XGE2|HAC1_ASPOR 1.13943 93.0 sp|Q54IE8|IRLE_DICDI sp|Q1XGE2|HAC1_ASPOR 1.17118 91.0 sp|B4RXT8|IF2_ALTMD sp|Q1XGE2|HAC1_ASPOR 1.17118 90.0 sp|Q4R628|KIF3A_MACFA sp|Q1XGE2|HAC1_ASPOR 1.17118 89.0 sp|P46150|MOEH_DROME sp|Q1XGE2|HAC1_ASPOR 1.17118 88.0 sp|A2QUR1|SFH5_ASPNC sp|Q1XGE2|HAC1_ASPOR 1.20397 85.0 sp|P05411|JUN_AVIS1 sp|Q1XGE2|HAC1_ASPOR 1.20397 90.0 sp|Q5ZIA2|MAP7_CHICK sp|Q1XGE2|HAC1_ASPOR 1.20397 78.0 sp|Q09YM8|CTTB2_RABIT sp|Q1XGE2|HAC1_ASPOR 1.20397 92.0 sp|Q0CP15|NST1_ASPTN sp|Q1XGE2|HAC1_ASPOR 1.23787 83.0 sp|A8MPH9|FOSLD_DROME sp|Q1XGE2|HAC1_ASPOR 1.23787 98.0 sp|Q9QXS1|PLEC1_MOUSE sp|Q1XGE2|HAC1_ASPOR 1.23787 97.0 sp|Q9WVE9|ITSN1_RAT sp|Q1XGE2|HAC1_ASPOR 1.23787 82.0 sp|A2QC41|MED21_ASPNC sp|Q1XGE2|HAC1_ASPOR hmmer-3.1b2/easel/demotic/regress/h2-profmark.out0000664361611702660230000002065612473612605021352 0ustar wheelerteddy3e-47 173.5 sp|O29458|DCDA_ARCFU Orn_DAP_Arg_deC 1.2e-46 171.6 sp|Q9UQW9|DCOR_SCHPO Orn_DAP_Arg_deC 8.4e-44 162.1 sp|O27390|DCDA_METTH Orn_DAP_Arg_deC 2.3e-43 160.6 sp|Q9I8S4|DCOR2_XENLA Orn_DAP_Arg_deC 2.5e-43 160.5 sp|P09057|DCOR_RAT Orn_DAP_Arg_deC 3.8e-43 159.9 sp|P14019|DCOR_CRIGR Orn_DAP_Arg_deC 3.9e-43 159.8 sp|P00860|DCOR_MOUSE Orn_DAP_Arg_deC 3.9e-43 159.8 sp|P27119|DCOR_MUSPA Orn_DAP_Arg_deC 8e-43 158.8 sp|P27118|DCOR_CHICK Orn_DAP_Arg_deC 2.8e-42 157.0 sp|P27120|DCOR1_XENLA Orn_DAP_Arg_deC 3e-42 156.9 sp|P11926|DCOR_HUMAN Orn_DAP_Arg_deC 2.1e-41 154.1 sp|P27117|DCOR_BOVIN Orn_DAP_Arg_deC 1.6e-40 151.2 sp|P07805|DCOR_TRYBB Orn_DAP_Arg_deC 2.6e-40 150.5 sp|Q9X1K5|DCDA_THEMA Orn_DAP_Arg_deC 3.7e-39 146.6 sp|P49725|DCOR_PANRE Orn_DAP_Arg_deC 6.6e-39 145.8 sp|O22616|DCOR_SOLLC Orn_DAP_Arg_deC 7.3e-39 145.7 sp|P27121|DCOR_NEUCR Orn_DAP_Arg_deC 8.2e-39 145.5 sp|P50134|DCOR_DATST Orn_DAP_Arg_deC 4e-38 143.2 sp|P08432|DCOR_YEAST Orn_DAP_Arg_deC 9.1e-38 142.0 sp|Q8A2B1|SPEA_BACTN Orn_DAP_Arg_deC 1.9e-37 141.0 sp|Q9HUX1|SPEA_PSEAE Orn_DAP_Arg_deC 2e-37 140.9 sp|Q7NU27|SPEA_CHRVO Orn_DAP_Arg_deC 2.5e-37 140.6 sp|O69203|DCDA_ACTPA Orn_DAP_Arg_deC 2.6e-37 140.5 sp|Q8S3N2|DCOR_CAPAN Orn_DAP_Arg_deC 3.1e-37 140.3 sp|P00861|DCDA_ECOLI Orn_DAP_Arg_deC 3.1e-37 140.2 sp|Q7NE10|SPEA_GLOVI Orn_DAP_Arg_deC 3.8e-37 140.0 sp|Q58497|DCDA_METJA Orn_DAP_Arg_deC 5.4e-37 139.5 sp|Q5LIQ3|SPEA_BACFN Orn_DAP_Arg_deC 5.4e-37 139.5 sp|Q64ZT8|SPEA_BACFR Orn_DAP_Arg_deC 1.3e-36 138.1 sp|Q87VU3|SPEA_PSESM Orn_DAP_Arg_deC 2.2e-36 137.4 sp|P40807|DCOR1_DROME Orn_DAP_Arg_deC 2.3e-36 137.4 sp|B0U1H6|SPEA_XYLFM Orn_DAP_Arg_deC 2.3e-36 137.4 sp|Q9PH02|SPEA_XYLFA Orn_DAP_Arg_deC 4.1e-36 136.5 sp|O05321|DCDA_PSEFL Orn_DAP_Arg_deC 4.7e-36 136.3 sp|B2I6M1|SPEA_XYLF2 Orn_DAP_Arg_deC 4.7e-36 136.3 sp|Q87F25|SPEA_XYLFT Orn_DAP_Arg_deC 6.1e-36 136.0 sp|Q8DHY6|SPEA_THEEB Orn_DAP_Arg_deC 6.8e-36 135.8 sp|O67262|DCDA_AQUAE Orn_DAP_Arg_deC 1.3e-35 134.8 sp|Q88QC7|SPEA_PSEPK Orn_DAP_Arg_deC 4.2e-35 133.2 sp|O14977|AZIN1_HUMAN Orn_DAP_Arg_deC 4.2e-35 133.2 sp|Q5R7K3|AZIN1_PONAB Orn_DAP_Arg_deC 5.1e-35 132.9 sp|O35484|AZIN1_MOUSE Orn_DAP_Arg_deC 5.2e-35 132.9 sp|Q50140|DCDA_MYCLE Orn_DAP_Arg_deC 5.5e-35 132.8 sp|A6L012|SPEA_BACV8 Orn_DAP_Arg_deC 6.8e-35 132.5 sp|P19572|DCDA_PSEAE Orn_DAP_Arg_deC 7.9e-35 132.3 sp|Q8YRP3|SPEA_ANASP Orn_DAP_Arg_deC 1.2e-34 131.7 sp|P23630|DCDA_BACSU Orn_DAP_Arg_deC 2.2e-34 130.8 sp|Q9ZBH5|DCDA_STRCO Orn_DAP_Arg_deC 2.4e-34 130.6 sp|Q8K9C4|DCDA_BUCAP Orn_DAP_Arg_deC 2.7e-34 130.5 sp|Q0ACK8|SPEA_ALHEH Orn_DAP_Arg_deC 6.8e-34 129.2 sp|Q949X7|DCDA1_ARATH Orn_DAP_Arg_deC 8.1e-34 128.9 sp|Q94A94|DCDA2_ARATH Orn_DAP_Arg_deC 9.9e-34 128.6 sp|P0A5M5|DCDA_MYCBO Orn_DAP_Arg_deC 9.9e-34 128.6 sp|P0A5M4|DCDA_MYCTU Orn_DAP_Arg_deC 1.7e-33 127.8 sp|P41931|DCOR_CAEEL Orn_DAP_Arg_deC 1.9e-33 127.7 sp|O50657|DCLO_SELRU Orn_DAP_Arg_deC 2.4e-33 127.4 sp|Q9KVL7|DCDA_VIBCH Orn_DAP_Arg_deC 3.1e-33 126.9 sp|Q6ZG77|DCDA_ORYSJ Orn_DAP_Arg_deC 3.6e-33 126.7 sp|Q55484|DCDA_SYNY3 Orn_DAP_Arg_deC 8.1e-33 125.6 sp|Q9JXM2|DCDA_NEIMB Orn_DAP_Arg_deC 1e-32 125.2 sp|Q8P448|SPEA_XANCP Orn_DAP_Arg_deC 1.2e-32 125.0 sp|Q54UF3|DCOR_DICDI Orn_DAP_Arg_deC 1.3e-32 124.9 sp|Q9Z661|DCDA_ZYMMO Orn_DAP_Arg_deC 2.6e-32 123.9 sp|Q9JWA6|DCDA_NEIMA Orn_DAP_Arg_deC 3.6e-32 123.4 sp|P40808|DCOR2_DROME Orn_DAP_Arg_deC 5.1e-32 122.9 sp|Q8PFQ5|SPEA_XANAC Orn_DAP_Arg_deC 9e-32 122.1 sp|P56129|DCDA_HELPY Orn_DAP_Arg_deC 1.4e-31 121.5 sp|Q89AC6|DCDA_BUCBP Orn_DAP_Arg_deC 1.4e-31 121.5 sp|P78599|DCOR_CANAL Orn_DAP_Arg_deC 1.8e-31 121.1 sp|Q8DA54|SPEA_VIBVU Orn_DAP_Arg_deC 1.8e-31 121.1 sp|Q7MK24|SPEA_VIBVY Orn_DAP_Arg_deC 1.8e-31 121.1 sp|A4Y5Y9|SPEA_SHEPC Orn_DAP_Arg_deC 1.8e-31 121.1 sp|A1RKK8|SPEA_SHESW Orn_DAP_Arg_deC 2e-31 121.0 sp|P57513|DCDA_BUCAI Orn_DAP_Arg_deC 2.1e-31 120.9 sp|Q9RTK2|DCDA_DEIRA Orn_DAP_Arg_deC 2.2e-31 120.8 sp|B8CR70|SPEA_SHEPW Orn_DAP_Arg_deC 3.2e-31 120.3 sp|A3QDD8|SPEA_SHELP Orn_DAP_Arg_deC 4.1e-31 119.9 sp|B8EAI2|SPEA_SHEB2 Orn_DAP_Arg_deC 4.1e-31 119.9 sp|A3D3G2|SPEA_SHEB5 Orn_DAP_Arg_deC 4.1e-31 119.9 sp|A6WM65|SPEA_SHEB8 Orn_DAP_Arg_deC 4.1e-31 119.9 sp|A9KY70|SPEA_SHEB9 Orn_DAP_Arg_deC 4.5e-31 119.8 sp|P27116|DCOR_LEIDO Orn_DAP_Arg_deC 6.6e-31 119.2 sp|Q083L6|SPEA_SHEFN Orn_DAP_Arg_deC 7e-31 119.1 sp|Q8EFU5|SPEA_SHEON Orn_DAP_Arg_deC 1e-30 118.6 sp|B1KRD4|SPEA_SHEWM Orn_DAP_Arg_deC 1.1e-30 118.5 sp|Q7V3M9|SPEA_PROMP Orn_DAP_Arg_deC 2.2e-30 117.5 sp|A8FWJ3|SPEA_SHESH Orn_DAP_Arg_deC 2.5e-30 117.3 sp|Q0HJY2|SPEA_SHESM Orn_DAP_Arg_deC 2.5e-30 117.3 sp|Q0HW78|SPEA_SHESR Orn_DAP_Arg_deC 2.7e-30 117.2 sp|Q63764|AZIN1_RAT Orn_DAP_Arg_deC 2.9e-30 117.1 sp|Q9ZME5|DCDA_HELPJ Orn_DAP_Arg_deC 3.1e-30 117.0 sp|A0KVN8|SPEA_SHESA Orn_DAP_Arg_deC 3.1e-30 117.0 sp|Q8ZHG8|SPEA_YERPE Orn_DAP_Arg_deC 3.5e-30 116.8 sp|B5XUB1|SPEA_KLEP3 Orn_DAP_Arg_deC 3.5e-30 116.8 sp|Q12LW6|SPEA_SHEDO Orn_DAP_Arg_deC 3.6e-30 116.8 sp|A2BNH3|SPEA_PROMS Orn_DAP_Arg_deC 3.8e-30 116.7 sp|Q87JS8|SPEA_VIBPA Orn_DAP_Arg_deC 3.8e-30 116.7 sp|A8H5G3|SPEA_SHEPA Orn_DAP_Arg_deC 4.1e-30 116.6 sp|A3PA96|SPEA_PROM0 Orn_DAP_Arg_deC 4.6e-30 116.4 sp|P41023|DCDA_BACMT Orn_DAP_Arg_deC 4.8e-30 116.4 sp|B0TQX3|SPEA_SHEHH Orn_DAP_Arg_deC 4.8e-30 116.4 sp|Q31DD8|SPEA_PROM9 Orn_DAP_Arg_deC 4.9e-30 116.3 sp|Q96412|SPE1_DIACA Orn_DAP_Arg_deC 5.9e-30 116.1 sp|A1S712|SPEA_SHEAM Orn_DAP_Arg_deC 8.8e-30 115.5 sp|A8G243|SPEA_PROM2 Orn_DAP_Arg_deC 1.1e-29 115.2 sp|Q7VEG4|SPEA_PROMA Orn_DAP_Arg_deC 1.3e-29 114.9 sp|C4K6F4|SPEA_HAMD5 Orn_DAP_Arg_deC 1.3e-29 114.9 sp|B5F5L1|SPEA_SALA4 Orn_DAP_Arg_deC 1.3e-29 114.9 sp|Q57K30|SPEA_SALCH Orn_DAP_Arg_deC 1.3e-29 114.9 sp|B5FUJ7|SPEA_SALDC Orn_DAP_Arg_deC 1.3e-29 114.9 sp|B4THH1|SPEA_SALHS Orn_DAP_Arg_deC 1.3e-29 114.9 sp|A9N4N1|SPEA_SALPB Orn_DAP_Arg_deC 1.3e-29 114.9 sp|B4TV55|SPEA_SALSV Orn_DAP_Arg_deC 1.3e-29 114.9 sp|P60659|SPEA_SALTY Orn_DAP_Arg_deC 1.3e-29 114.9 sp|P60658|SPEA_SALTI Orn_DAP_Arg_deC 1.3e-29 114.9 sp|B4T5J3|SPEA_SALNS Orn_DAP_Arg_deC 1.4e-29 114.9 sp|P44316|DCDA_HAEIN Orn_DAP_Arg_deC 1.4e-29 114.8 sp|P22220|SPE1_AVESA Orn_DAP_Arg_deC 1.5e-29 114.7 sp|Q9X5M1|DCDA_MYCS2 Orn_DAP_Arg_deC 1.9e-29 114.4 sp|Q9KLD1|SPEA_VIBCH Orn_DAP_Arg_deC 2.2e-29 114.2 sp|Q8XCX9|SPEA_ECO57 Orn_DAP_Arg_deC 2.2e-29 114.2 sp|B5YQD6|SPEA_ECO5E Orn_DAP_Arg_deC 2.2e-29 114.2 sp|Q8FE34|SPEA_ECOL6 Orn_DAP_Arg_deC 2.2e-29 114.2 sp|B1LDE8|SPEA_ECOSM Orn_DAP_Arg_deC 2.6e-29 113.9 sp|Q0T0V3|SPEA_SHIF8 Orn_DAP_Arg_deC 2.6e-29 113.9 sp|Q83Q93|SPEA_SHIFL Orn_DAP_Arg_deC 3.3e-29 113.6 sp|B9M6H6|SPEA_GEOSF Orn_DAP_Arg_deC 3.4e-29 113.6 sp|P21170|SPEA_ECOLI Orn_DAP_Arg_deC 5.7e-29 112.8 sp|B5EIW4|SPEA_GEOBB Orn_DAP_Arg_deC 5.7e-29 112.8 sp|C6E3V4|SPEA_GEOSM Orn_DAP_Arg_deC 8.2e-29 112.3 sp|A1AS90|SPEA_PELPD Orn_DAP_Arg_deC 8.6e-29 112.2 sp|A2BU00|SPEA_PROM5 Orn_DAP_Arg_deC 6.4e-28 109.3 sp|Q8RQM6|DCDA_COREF Orn_DAP_Arg_deC 8.9e-28 108.8 sp|B4F1A4|SPEA_PROMH Orn_DAP_Arg_deC 1.5e-27 108.1 sp|P74576|SPEA1_SYNY3 Orn_DAP_Arg_deC 2.6e-27 107.3 sp|A5GB52|SPEA_GEOUR Orn_DAP_Arg_deC 2.9e-27 107.1 sp|Q7U3S0|SPEA_SYNPX Orn_DAP_Arg_deC 3.9e-27 106.7 sp|A0A4W3|SPEA_GEOSL Orn_DAP_Arg_deC 4.8e-27 106.4 sp|Q39X78|SPEA_GEOMG Orn_DAP_Arg_deC 5e-27 106.3 sp|A1TY02|SPEA_MARAV Orn_DAP_Arg_deC 6.4e-27 106.0 sp|Q9RXR4|SPEA_DEIRA Orn_DAP_Arg_deC 1e-26 105.3 sp|P09890|DCDA_CORGL Orn_DAP_Arg_deC 1.5e-26 104.8 sp|O82475|SPE1_BRAJU Orn_DAP_Arg_deC 1.6e-26 104.7 sp|Q39827|SPE1_SOYBN Orn_DAP_Arg_deC 1.6e-26 104.7 sp|Q7N121|SPEA_PHOLL Orn_DAP_Arg_deC 1.8e-26 104.5 sp|B3EAF3|SPEA_GEOLS Orn_DAP_Arg_deC 1.8e-26 104.5 sp|A5GWM2|SPEA_SYNR3 Orn_DAP_Arg_deC 2.5e-26 104.0 sp|Q7UTS2|SPEA_RHOBA Orn_DAP_Arg_deC 3e-26 103.8 sp|Q9KCM5|DCDA_BACHD Orn_DAP_Arg_deC 3.1e-26 103.7 sp|Q96A70|ADC_HUMAN Orn_DAP_Arg_deC 6.5e-26 102.6 sp|Q43075|SPE1_PEA Orn_DAP_Arg_deC 2.6e-25 100.6 sp|P72587|SPEA2_SYNY3 Orn_DAP_Arg_deC 3.7e-25 100.2 sp|Q7TUJ9|SPEA_PROMM Orn_DAP_Arg_deC 1e-24 98.7 sp|P49726|SPE1_SOLLC Orn_DAP_Arg_deC 1.1e-24 98.5 sp|Q9PII5|DCDA_CAMJE Orn_DAP_Arg_deC 1.5e-24 98.1 sp|A2CDK1|SPEA_PROM3 Orn_DAP_Arg_deC 1.7e-24 97.9 sp|Q8BVM4|ADC_MOUSE Orn_DAP_Arg_deC 8e-24 95.7 sp|Q9CL60|SPEA_PASMU Orn_DAP_Arg_deC 1.5e-23 94.8 sp|O23141|SPE2_ARATH Orn_DAP_Arg_deC 1.6e-23 94.7 sp|Q9SNN0|SPE1_ORYSJ Orn_DAP_Arg_deC 8.9e-23 92.2 sp|P31851|TABA_PSESZ Orn_DAP_Arg_deC 1.2e-22 91.8 sp|Q9JT25|SPEA_NEIMA Orn_DAP_Arg_deC 1.2e-22 91.8 sp|Q9K0U3|SPEA_NEIMB Orn_DAP_Arg_deC 1.8e-22 91.2 sp|Q7XRA1|ADC2_ORYSJ Orn_DAP_Arg_deC 1.5e-21 88.2 sp|Q9SI64|SPE1_ARATH Orn_DAP_Arg_deC 2.2e-21 87.6 sp|C4L9A9|SPEA_TOLAT Orn_DAP_Arg_deC 1.3e-18 78.4 sp|A0KIP8|SPEA_AERHH Orn_DAP_Arg_deC 3.6e-17 73.6 sp|A4SPD6|SPEA_AERS4 Orn_DAP_Arg_deC 0.0018 23.1 sp|P55709|Y4YA_RHISN Orn_DAP_Arg_deC 1.1 -9.6 sp|O81160|SPE2_THECC Orn_DAP_Arg_deC hmmer-3.1b2/easel/demotic/regress/ssearch-tbl.out0000664361611702660230000003766212473612605021436 0ustar wheelerteddy1.4e-78 100 1 181 sp|P55685|Y4WG_RHISN 1 181 sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=R 4.1 24 41 164 sp|P55685|Y4WG_RHISN 65 189 sp|Q7SY73|ABH6B_XENLA Monoacylglycerol lipase abhd6-B 1.6e-109 100 1 345 sp|Q1XGE2|HAC1_ASPOR 1 345 sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS 2e-82 78 13 344 sp|Q1XGE2|HAC1_ASPOR 18 348 sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS 1.7e-15 31 7 344 sp|Q1XGE2|HAC1_ASPOR 43 450 sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS 4.9e-06 32 63 270 sp|Q1XGE2|HAC1_ASPOR 16 216 sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS 0.00016 31 6 167 sp|Q1XGE2|HAC1_ASPOR 3 167 sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabid 0.0042 28 16 187 sp|Q1XGE2|HAC1_ASPOR 10 186 sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Homo s 0.0048 29 16 206 sp|Q1XGE2|HAC1_ASPOR 10 196 sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos ta 0.0068 32 4 152 sp|Q1XGE2|HAC1_ASPOR 210 360 sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive element-bi 0.0083 36 60 154 sp|Q1XGE2|HAC1_ASPOR 66 157 sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanu 0.0097 24 18 297 sp|Q1XGE2|HAC1_ASPOR 234 518 sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive element-bi 0.01 24 46 270 sp|Q1XGE2|HAC1_ASPOR 363 593 sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper tra 0.021 26 41 332 sp|Q1XGE2|HAC1_ASPOR 727 1001 sp|A3LYI0|NST1_PICST Stress response protein NST1 OS=P 0.028 25 4 290 sp|Q1XGE2|HAC1_ASPOR 214 499 sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element-bind 0.035 26 48 275 sp|Q1XGE2|HAC1_ASPOR 213 434 sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-bi 0.036 26 4 232 sp|Q1XGE2|HAC1_ASPOR 215 445 sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive element-bi 0.045 26 4 232 sp|Q1XGE2|HAC1_ASPOR 215 445 sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive element-bi 0.045 23 14 297 sp|Q1XGE2|HAC1_ASPOR 228 517 sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive element-bi 0.058 23 14 297 sp|Q1XGE2|HAC1_ASPOR 228 517 sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive element-bi 0.071 26 1 207 sp|Q1XGE2|HAC1_ASPOR 107 318 sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-bi 0.074 31 4 152 sp|Q1XGE2|HAC1_ASPOR 218 368 sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive element-bi 0.076 26 24 200 sp|Q1XGE2|HAC1_ASPOR 160 330 sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive element-bi 0.082 23 18 297 sp|Q1XGE2|HAC1_ASPOR 234 518 sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element-bind 0.12 25 9 222 sp|Q1XGE2|HAC1_ASPOR 76 290 sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus GN=F 0.14 27 48 258 sp|Q1XGE2|HAC1_ASPOR 214 432 sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-bi 0.14 20 32 334 sp|Q1XGE2|HAC1_ASPOR 788 1145 sp|Q5A2K0|NST1_CANAL Stress response protein NST1 OS=C 0.17 35 73 143 sp|Q1XGE2|HAC1_ASPOR 68 138 sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=A 0.17 28 72 237 sp|Q1XGE2|HAC1_ASPOR 145 332 sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familiaris 0.19 26 48 284 sp|Q1XGE2|HAC1_ASPOR 214 438 sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-bind 0.2 22 17 274 sp|Q1XGE2|HAC1_ASPOR 49 268 sp|P0C5H8|KAPC_EMENI Putative transcription factor kap 0.25 25 9 222 sp|Q1XGE2|HAC1_ASPOR 76 290 sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens GN=F 0.29 21 6 291 sp|Q1XGE2|HAC1_ASPOR 39 319 sp|P79702|FOS_CYPCA Proto-oncogene c-Fos OS=Cyprinus c 0.3 22 1 237 sp|Q1XGE2|HAC1_ASPOR 530 774 sp|Q0D9R7|ARFS_ORYSJ Auxin response factor 19 OS=Oryza 0.32 28 44 232 sp|Q1XGE2|HAC1_ASPOR 72 263 sp|P15407|FOSL1_HUMAN Fos-related antigen 1 OS=Homo sa 0.37 24 43 340 sp|Q1XGE2|HAC1_ASPOR 528 798 sp|Q5B3C8|NST1_EMENI Stress response protein nst1 OS=E 0.38 27 3 236 sp|Q1XGE2|HAC1_ASPOR 429 680 sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kinase 0.4 28 9 237 sp|Q1XGE2|HAC1_ASPOR 55 297 sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scrofa G 0.41 28 18 160 sp|Q1XGE2|HAC1_ASPOR 212 349 sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcriptio 0.59 27 29 163 sp|Q1XGE2|HAC1_ASPOR 171 307 sp|Q90370|MAFB_COTJA Transcription factor MafB OS=Cotu 0.59 27 29 163 sp|Q1XGE2|HAC1_ASPOR 171 307 sp|Q90888|MAFB_CHICK Transcription factor MafB OS=Gall 0.7 26 48 236 sp|Q1XGE2|HAC1_ASPOR 218 404 sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-bi 0.73 25 74 223 sp|Q1XGE2|HAC1_ASPOR 4 163 sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS=Schi 0.74 26 15 236 sp|Q1XGE2|HAC1_ASPOR 2294 2524 sp|O88778|BSN_RAT Protein bassoon OS=Rattus norvegicus 0.77 22 19 337 sp|Q1XGE2|HAC1_ASPOR 146 459 sp|Q8VCH8|UBXN4_MOUSE UBX domain-containing protein 4 0.79 29 18 146 sp|Q1XGE2|HAC1_ASPOR 119 256 sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-bi 0.79 22 43 227 sp|Q1XGE2|HAC1_ASPOR 675 868 sp|A4R2R1|NST1_MAGGR Stress response protein NST1 OS=M 0.85 31 66 160 sp|Q1XGE2|HAC1_ASPOR 258 351 sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcriptio 0.92 25 2 237 sp|Q1XGE2|HAC1_ASPOR 57 298 sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocricet 0.94 27 3 236 sp|Q1XGE2|HAC1_ASPOR 429 655 sp|A5PKJ4|MK07_BOVIN Mitogen-activated protein kinase 1 23 5 265 sp|Q1XGE2|HAC1_ASPOR 989 1264 sp|Q1DQC1|PAN1_COCIM Actin cytoskeleton-regulatory com 1 25 2 237 sp|Q1XGE2|HAC1_ASPOR 57 297 sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus muscul 1 22 18 154 sp|Q1XGE2|HAC1_ASPOR 204 338 sp|Q6NW59|ATF4_DANRE Cyclic AMP-dependent transcriptio 1.1 25 7 235 sp|Q1XGE2|HAC1_ASPOR 509 759 sp|Q76LL6|FHOD3_MOUSE FH1/FH2 domain-containing protei 1.1 29 54 199 sp|Q1XGE2|HAC1_ASPOR 192 329 sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive element-bi 1.1 28 80 198 sp|Q1XGE2|HAC1_ASPOR 195 312 sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF2 OS 1.2 26 26 168 sp|Q1XGE2|HAC1_ASPOR 277 424 sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcriptio 1.2 26 26 168 sp|Q1XGE2|HAC1_ASPOR 288 435 sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcriptio 1.2 29 54 199 sp|Q1XGE2|HAC1_ASPOR 192 329 sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive element-bi 1.3 23 12 216 sp|Q1XGE2|HAC1_ASPOR 38 261 sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattus no 1.3 28 9 237 sp|Q1XGE2|HAC1_ASPOR 55 297 sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo sapie 1.4 25 9 254 sp|Q1XGE2|HAC1_ASPOR 105 350 sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mus mu 1.4 28 14 163 sp|Q1XGE2|HAC1_ASPOR 174 319 sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS=Homo 1.5 27 51 190 sp|Q1XGE2|HAC1_ASPOR 23 183 sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Rattus n 1.5 25 2 237 sp|Q1XGE2|HAC1_ASPOR 57 297 sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein OS= 1.5 27 44 232 sp|Q1XGE2|HAC1_ASPOR 74 267 sp|P10158|FOSL1_RAT Fos-related antigen 1 OS=Rattus no 1.6 24 13 267 sp|Q1XGE2|HAC1_ASPOR 284 545 sp|Q6Y7W8|PERQ2_MOUSE PERQ amino acid-rich with GYF do 1.6 24 4 222 sp|Q1XGE2|HAC1_ASPOR 39 253 sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Homo sa 1.7 26 8 199 sp|Q1XGE2|HAC1_ASPOR 138 322 sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive element-bi 1.8 22 16 223 sp|Q1XGE2|HAC1_ASPOR 44 236 sp|A2R346|KAPC_ASPNC Putative transcription factor kap 1.8 28 14 163 sp|Q1XGE2|HAC1_ASPOR 174 319 sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS=Maca 1.8 27 26 143 sp|Q1XGE2|HAC1_ASPOR 277 392 sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcriptio 1.9 26 44 232 sp|Q1XGE2|HAC1_ASPOR 72 265 sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus mus 1.9 28 42 208 sp|Q1XGE2|HAC1_ASPOR 92 255 sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase 11A 2 28 71 172 sp|Q1XGE2|HAC1_ASPOR 17 125 sp|Q16520|BATF_HUMAN Basic leucine zipper transcriptio 2 23 14 223 sp|Q1XGE2|HAC1_ASPOR 37 240 sp|Q0CEI3|KAPC_ASPTN Putative transcription factor kap 2 27 14 163 sp|Q1XGE2|HAC1_ASPOR 174 319 sp|P54842|MAFB_RAT Transcription factor MafB OS=Rattus 2 30 8 150 sp|Q1XGE2|HAC1_ASPOR 370 508 sp|P29747|CREBA_DROME Cyclic AMP response element-bind 2 24 4 216 sp|Q1XGE2|HAC1_ASPOR 39 260 sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus mus 2.1 29 39 210 sp|Q1XGE2|HAC1_ASPOR 79 238 sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS=Xen 2.1 24 15 248 sp|Q1XGE2|HAC1_ASPOR 47 278 sp|Q91496|FOS_TETFL Proto-oncogene c-Fos OS=Tetraodon 2.1 27 51 190 sp|Q1XGE2|HAC1_ASPOR 23 183 sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mus mu 2.2 30 66 160 sp|Q1XGE2|HAC1_ASPOR 255 347 sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcription 2.3 26 19 163 sp|Q1XGE2|HAC1_ASPOR 119 245 sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding protein d 2.3 27 14 163 sp|Q1XGE2|HAC1_ASPOR 174 319 sp|P54841|MAFB_MOUSE Transcription factor MafB OS=Mus 2.3 20 66 223 sp|Q1XGE2|HAC1_ASPOR 83 237 sp|A1C9M5|KAPC_ASPCL Putative transcription factor kap 2.3 25 20 221 sp|Q1XGE2|HAC1_ASPOR 105 301 sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive element-bi 2.4 24 2 237 sp|Q1XGE2|HAC1_ASPOR 57 297 sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos taurus 2.4 20 30 297 sp|Q1XGE2|HAC1_ASPOR 282 540 sp|Q6NS15|MED15_XENLA Mediator of RNA polymerase II tr 2.5 26 7 183 sp|Q1XGE2|HAC1_ASPOR 28 188 sp|P94517|YSCB_BACSU Uncharacterized protein yscB OS=B 2.5 26 29 163 sp|Q1XGE2|HAC1_ASPOR 176 312 sp|Q504L8|MAFB_XENTR Transcription factor MafB OS=Xeno 2.5 34 83 167 sp|Q1XGE2|HAC1_ASPOR 201 281 sp|O57342|MAFA_COTJA Transcription factor MafA OS=Cotu 2.7 27 8 237 sp|Q1XGE2|HAC1_ASPOR 54 297 sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus norve 2.7 26 9 237 sp|Q1XGE2|HAC1_ASPOR 55 298 sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis catu 2.7 23 2 291 sp|Q1XGE2|HAC1_ASPOR 57 353 sp|Q56TT7|FOS_PHOCM Proto-oncogene c-Fos OS=Phodopus c 2.7 33 16 119 sp|Q1XGE2|HAC1_ASPOR 188 291 sp|Q2VZV0|IF2_MAGSA Translation initiation factor IF-2 2.8 27 19 154 sp|Q1XGE2|HAC1_ASPOR 210 342 sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcriptio 2.8 24 73 337 sp|Q1XGE2|HAC1_ASPOR 200 459 sp|Q5HZY0|UBXN4_RAT UBX domain-containing protein 4 OS 2.8 26 3 236 sp|Q1XGE2|HAC1_ASPOR 429 680 sp|P0C865|MK07_RAT Mitogen-activated protein kinase 7 2.9 26 19 163 sp|Q1XGE2|HAC1_ASPOR 118 244 sp|Q9N0J3|CEBPD_SHEEP CCAAT/enhancer-binding protein d 2.9 33 60 146 sp|Q1XGE2|HAC1_ASPOR 170 252 sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-bind 3 25 1 215 sp|Q1XGE2|HAC1_ASPOR 208 432 sp|A0JMK9|CAF1A_DANRE Chromatin assembly factor 1 subu 3.2 22 8 250 sp|Q1XGE2|HAC1_ASPOR 390 619 sp|Q96JK9|MAML3_HUMAN Mastermind-like protein 3 OS=Hom 3.2 28 69 145 sp|Q1XGE2|HAC1_ASPOR 21 97 sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcripti 3.2 21 2 331 sp|Q1XGE2|HAC1_ASPOR 410 760 sp|Q9C0A6|SETD5_HUMAN SET domain-containing protein 5 3.4 23 95 327 sp|Q1XGE2|HAC1_ASPOR 224 436 sp|B3DM43|SOX5_XENTR Transcription factor Sox-5 OS=Xen 3.5 26 41 255 sp|Q1XGE2|HAC1_ASPOR 41 271 sp|A5FV21|IF2_ACICJ Translation initiation factor IF-2 3.6 27 52 168 sp|Q1XGE2|HAC1_ASPOR 194 315 sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive element-bi 3.6 22 6 203 sp|Q1XGE2|HAC1_ASPOR 2186 2384 sp|Q9H254|SPTN4_HUMAN Spectrin beta chain, brain 3 OS= 3.6 23 16 333 sp|Q1XGE2|HAC1_ASPOR 1015 1335 sp|B2AWS3|PAN1_PODAN Actin cytoskeleton-regulatory com 4 26 47 193 sp|Q1XGE2|HAC1_ASPOR 5 156 sp|Q61827|MAFK_MOUSE Transcription factor MafK OS=Mus 4 26 47 193 sp|Q1XGE2|HAC1_ASPOR 5 156 sp|O60675|MAFK_HUMAN Transcription factor MafK OS=Homo 4.2 28 6 180 sp|Q1XGE2|HAC1_ASPOR 281 460 sp|Q4QRL3|CC88B_MOUSE Coiled-coil domain-containing pr 4.3 25 15 248 sp|Q1XGE2|HAC1_ASPOR 48 279 sp|P53450|FOS_TAKRU Proto-oncogene c-Fos OS=Takifugu r 4.4 25 16 189 sp|Q1XGE2|HAC1_ASPOR 2328 2510 sp|Q9UPA5|BSN_HUMAN Protein bassoon OS=Homo sapiens GN 4.4 24 16 189 sp|Q1XGE2|HAC1_ASPOR 2336 2518 sp|O88737|BSN_MOUSE Protein bassoon OS=Mus musculus GN 4.5 30 31 149 sp|Q1XGE2|HAC1_ASPOR 176 296 sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Arabido 4.6 20 58 297 sp|Q1XGE2|HAC1_ASPOR 322 573 sp|Q7ZVN7|MED15_DANRE Mediator of RNA polymerase II tr 4.6 33 85 167 sp|Q1XGE2|HAC1_ASPOR 201 281 sp|O42290|MAFA_CHICK Transcription factor MafA OS=Gall 4.7 27 41 231 sp|Q1XGE2|HAC1_ASPOR 770 966 sp|A9V549|EIF3A_MONBE Eukaryotic translation initiatio 4.8 33 83 145 sp|Q1XGE2|HAC1_ASPOR 28 90 sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcripti 4.8 25 29 186 sp|Q1XGE2|HAC1_ASPOR 294 463 sp|Q5RCJ1|CIP4_PONAB Cdc42-interacting protein 4 OS=Po 5 30 63 185 sp|Q1XGE2|HAC1_ASPOR 159 282 sp|O43889|CREB3_HUMAN Cyclic AMP-responsive element-bi 5.1 28 71 160 sp|Q1XGE2|HAC1_ASPOR 17 103 sp|O35284|BATF_MOUSE Basic leucine zipper transcriptio 5.1 24 16 223 sp|Q1XGE2|HAC1_ASPOR 44 237 sp|Q2UNX4|KAPC_ASPOR Putative transcription factor kap 5.1 27 52 168 sp|Q1XGE2|HAC1_ASPOR 345 466 sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive element-bi 5.2 24 9 250 sp|Q1XGE2|HAC1_ASPOR 628 858 sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide exchange 5.3 26 14 232 sp|Q1XGE2|HAC1_ASPOR 662 845 sp|Q5F489|TAF3_CHICK Transcription initiation factor T 5.3 27 14 203 sp|Q1XGE2|HAC1_ASPOR 664 845 sp|Q5HZG4|TAF3_MOUSE Transcription initiation factor T 5.4 25 46 283 sp|Q1XGE2|HAC1_ASPOR 294 535 sp|Q9UKV3|ACINU_HUMAN Apoptotic chromatin condensation 5.4 30 48 230 sp|Q1XGE2|HAC1_ASPOR 735 930 sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initiatio 5.5 23 2 291 sp|Q1XGE2|HAC1_ASPOR 57 353 sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodopus r 6.1 24 16 258 sp|Q1XGE2|HAC1_ASPOR 555 812 sp|Q3KQU3|MA7D1_HUMAN MAP7 domain-containing protein 1 6.1 22 29 272 sp|Q1XGE2|HAC1_ASPOR 294 542 sp|Q15642|CIP4_HUMAN Cdc42-interacting protein 4 OS=Ho 6.2 25 25 199 sp|Q1XGE2|HAC1_ASPOR 161 322 sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive element-bi 6.4 26 29 163 sp|Q1XGE2|HAC1_ASPOR 171 309 sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS=Xeno 6.6 24 68 271 sp|Q1XGE2|HAC1_ASPOR 108 311 sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gallus 6.7 23 8 338 sp|Q1XGE2|HAC1_ASPOR 860 1230 sp|Q3UHR0|BAHC1_MOUSE BAH and coiled-coil domain-conta 6.8 25 2 148 sp|Q1XGE2|HAC1_ASPOR 142 290 sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus mus 6.8 25 2 148 sp|Q1XGE2|HAC1_ASPOR 142 290 sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Homo sa 6.9 25 32 294 sp|Q1XGE2|HAC1_ASPOR 107 375 sp|Q9NZ53|PDXL2_HUMAN Podocalyxin-like protein 2 OS=Ho 6.9 27 18 222 sp|Q1XGE2|HAC1_ASPOR 378 571 sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BAT2 O 7.1 23 16 241 sp|Q1XGE2|HAC1_ASPOR 259 500 sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcripti 7.2 24 17 241 sp|Q1XGE2|HAC1_ASPOR 260 503 sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcripti 7.3 24 80 285 sp|Q1XGE2|HAC1_ASPOR 588 784 sp|Q3UIW5|RNF10_MOUSE RING finger protein 10 OS=Mus mu 7.5 26 16 311 sp|Q1XGE2|HAC1_ASPOR 1113 1403 sp|Q6C908|PAN1_YARLI Actin cytoskeleton-regulatory com 7.8 22 61 333 sp|Q1XGE2|HAC1_ASPOR 1188 1460 sp|Q9W705|NCOA2_XENLA Nuclear receptor coactivator 2 O 7.9 24 7 183 sp|Q1XGE2|HAC1_ASPOR 282 455 sp|O60841|IF2P_HUMAN Eukaryotic translation initiation 7.9 21 12 323 sp|Q1XGE2|HAC1_ASPOR 595 900 sp|P15205|MAP1B_RAT Microtubule-associated protein 1B 8.3 31 14 145 sp|Q1XGE2|HAC1_ASPOR 291 435 sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5-like 8.3 24 10 209 sp|Q1XGE2|HAC1_ASPOR 236 424 sp|Q69022|EBNA2_EBVA8 Epstein-Barr nuclear antigen 2 O 8.3 23 15 333 sp|Q1XGE2|HAC1_ASPOR 386 687 sp|Q9ES64|USH1C_MOUSE Harmonin OS=Mus musculus GN=Ush1 8.4 30 83 167 sp|Q1XGE2|HAC1_ASPOR 203 284 sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS=Xeno 8.5 25 8 181 sp|Q1XGE2|HAC1_ASPOR 14 192 sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein OS=Dr 8.6 26 10 157 sp|Q1XGE2|HAC1_ASPOR 315 458 sp|Q54Y73|BZPD_DICDI Probable basic-leucine zipper tra 8.6 29 16 148 sp|Q1XGE2|HAC1_ASPOR 163 290 sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattus no 8.8 24 18 229 sp|Q1XGE2|HAC1_ASPOR 378 575 sp|Q6MG48|BAT2_RAT Large proline-rich protein BAT2 OS= 9 17 36 252 sp|Q1XGE2|HAC1_ASPOR 628 845 sp|Q54HX6|MYBI_DICDI Myb-like protein I OS=Dictyosteli 9.1 25 47 193 sp|Q1XGE2|HAC1_ASPOR 5 156 sp|Q90596|MAFK_CHICK Transcription factor MafK OS=Gall 9.2 20 10 321 sp|Q1XGE2|HAC1_ASPOR 36 373 sp|Q4VYS1|FOXP2_XENLA Forkhead box protein P2 OS=Xenop 9.5 18 22 170 sp|Q1XGE2|HAC1_ASPOR 171 321 sp|Q54NF3|Y6434_DICDI Uncharacterized protein DDB_G028 9.5 24 16 268 sp|Q1XGE2|HAC1_ASPOR 1032 1284 sp|Q0CPW4|PAN1_ASPTN Actin cytoskeleton-regulatory com 9.7 31 35 142 sp|Q1XGE2|HAC1_ASPOR 111 219 sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Homo s 9.7 23 36 229 sp|Q1XGE2|HAC1_ASPOR 263 449 sp|Q00312|RBF1_CANAL Transcription factor RBF1 OS=Cand 9.9 27 18 228 sp|Q1XGE2|HAC1_ASPOR 380 575 sp|P48634|BAT2_HUMAN Large proline-rich protein BAT2 O hmmer-3.1b2/easel/demotic/h22tbl0000775361611702660230000000016012473612605016026 0ustar wheelerteddy#! /usr/bin/perl use demotic_h2; while (&demotic_h2::parse(\*STDIN)) { &demotic_h2::tblout(\*STDOUT); } hmmer-3.1b2/easel/demotic/h22profmark0000775361611702660230000000016512473612605017073 0ustar wheelerteddy#! /usr/bin/perl use demotic_h2; while (&demotic_h2::parse(\*STDIN)) { &demotic_h2::profmarkout(\*STDOUT); } hmmer-3.1b2/easel/demotic/.dropbox.attr0000775361611702660230000000000212473272026017427 0ustar wheelerteddy{}hmmer-3.1b2/easel/demotic/hmmer2tbl0000775361611702660230000000017112473612605016627 0ustar wheelerteddy#! /usr/bin/perl use demotic_hmmer; while (&demotic_hmmer::parse(\*STDIN)) { &demotic_hmmer::tblout(\*STDOUT); } hmmer-3.1b2/easel/demotic/test.pl0000664361611702660230000000067612473612605016333 0ustar wheelerteddy#! /usr/bin/perl use demotic_blast; $swiss_wu = "/misc/data0/databases/Uniprot/uniprot_sprot_wu.fasta"; open(BLAST, "blastp $swiss_wu example.fa 2>/dev/null |"); while (demotic_blast::parse(\*BLAST)) { for ($i = 0; $i < $demotic_blast::nhits; $i++) { printf "%.2g\t%.1f\t%s\t%s\n", $demotic_blast::hit_Eval[$i], $demotic_blast::hit_bitscore[$i], $demotic_blast::hit_target[$i], $demotic_blast::queryname; } } close BLAST; hmmer-3.1b2/easel/demotic/hmmer2profmark0000775361611702660230000000017612473612605017674 0ustar wheelerteddy#! /usr/bin/perl use demotic_hmmer; while (&demotic_hmmer::parse(\*STDIN)) { &demotic_hmmer::profmarkout(\*STDOUT); } hmmer-3.1b2/easel/demotic/examples/0000775361611702660230000000000012473610610016616 5ustar wheelerteddyhmmer-3.1b2/easel/demotic/examples/example.wu-blastp.out0000664361611702660230000116710012473612605022733 0ustar wheelerteddyBLASTP 2.0MP-WashU [04-May-2006] [linux26-x64-I32LPF64 2006-05-10T17:22:28] Copyright (C) 1996-2006 Washington University, Saint Louis, Missouri USA. All Rights Reserved. Reference: Gish, W. (1996-2006) http://blast.wustl.edu Query= sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp. (strain NGR234) GN=NGR_a00980 PE=4 SV=1 (181 letters; record 1) Database: uniprot_sprot_wu.fasta 516,081 sequences; 181,677,051 total letters. Searching....10....20....30....40....50....60....70....80....90....100% done Smallest Sum High Probability Sequences producing High-scoring Segment Pairs: Score P(N) N sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhiz... 897 9.1e-90 1 sp|Q07074|YH007_YEAST Uncharacterized protein YHR007C-A O... 60 0.74 1 sp|Q8XVA0|Y2931_RALSO UPF0135 protein RSc2931 OS=Ralstoni... 74 0.995 1 sp|P33890|TIR2_YEAST Cold shock-induced protein TIR2 OS=S... 74 0.995 1 sp|A7HGP8|CH602_ANADF 60 kDa chaperonin 2 OS=Anaeromyxoba... 78 0.996 1 sp|Q608F1|Y1541_METCA UPF0350 protein MCA1541 OS=Methyloc... 58 0.9999 1 >sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp. (strain NGR234) GN=NGR_a00980 PE=4 SV=1 Length = 181 Score = 897 (320.8 bits), Expect = 9.1e-90, P = 9.1e-90 Identities = 181/181 (100%), Positives = 181/181 (100%) Query: 1 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT 60 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT Sbjct: 1 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT 60 Query: 61 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF 120 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF Sbjct: 61 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF 120 Query: 121 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP 180 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP Sbjct: 121 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP 180 Query: 181 N 181 N Sbjct: 181 N 181 >sp|Q07074|YH007_YEAST Uncharacterized protein YHR007C-A OS=Saccharomyces cerevisiae GN=YHR007C-A PE=1 SV=2 Length = 71 Score = 60 (26.2 bits), Expect = 1.3, P = 0.74 Identities = 16/33 (48%), Positives = 21/33 (63%) Query: 141 LSISTVAGAEVHFIATERSLRELENQLTLLLEQ 173 LS+ T+ A VH+I T + + ENQL LLL Q Sbjct: 31 LSLPTLL-APVHYIPTRLTHHQAENQLFLLLFQ 62 >sp|Q8XVA0|Y2931_RALSO UPF0135 protein RSc2931 OS=Ralstonia solanacearum GN=RSc2931 PE=3 SV=1 Length = 248 Score = 74 (31.1 bits), Expect = 5.2, P = 0.995 Identities = 37/131 (28%), Positives = 56/131 (42%) Query: 42 GKMAEIDAILITDVNGIGTTADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQ 101 G A++ A+L + G DD+L ++ + + TT AF + +R+ + G Sbjct: 107 GNNAQLGALL--GIQPTGRFGDDELGWIGTLPEA--TTLGAFAEVVAARLDRMPLVIGGA 162 Query: 102 LQ--HQIATRTGKEERKFKPFAAAGFSVRAGLAADGSNSGMLSISTVA--GAEVHFIATE 157 + H I TG + F +AG V A + + S VA GA H ATE Sbjct: 163 DRPVHTIGWCTGGAQGWFDAAVSAGVDVYLSGEASEQTTHLARESGVAYIGAGHH--ATE 220 Query: 158 RS-LRELENQL 167 R +R L N L Sbjct: 221 RGGVRALGNHL 231 >sp|P33890|TIR2_YEAST Cold shock-induced protein TIR2 OS=Saccharomyces cerevisiae GN=TIR2 PE=2 SV=1 Length = 251 Score = 74 (31.1 bits), Expect = 5.4, P = 0.995 Identities = 30/124 (24%), Positives = 49/124 (39%) Query: 29 SKVFYRVAWLLGRGKMAEIDAILITDVNGIGTTADDQLAFVSLIADQGETTTVAFGPEIG 88 SK+ V W R + E++++L T +T A S +A ETT+ A Sbjct: 89 SKMLTMVPWYSSR-LLPELESLLGTSTTAASSTEASSAATSSAVASSSETTSSAVASS-- 145 Query: 89 SRIAASFMAACGQLQHQIATRTGKEERKFKPFAAAGFSVRAGLAADGSNSGMLSI---ST 145 S +S +A+ + AT + + S +A + S+S + S ST Sbjct: 146 SEATSSAVASSSEASSSAATSSAVASSSEATSSTVASSTKAASSTKASSSAVSSAVASST 205 Query: 146 VAGA 149 A A Sbjct: 206 KASA 209 >sp|A7HGP8|CH602_ANADF 60 kDa chaperonin 2 OS=Anaeromyxobacter sp. (strain Fw109-5) GN=groL2 PE=3 SV=1 Length = 547 Score = 78 (32.5 bits), Expect = 5.6, P = 0.996 Identities = 32/116 (27%), Positives = 48/116 (41%) Query: 39 LGRGKMAEIDAILITDVNGIGTTADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAA 98 LGR K ID T V+G G AD + A V I Q E TT + E A + Sbjct: 317 LGRAKRISIDKDNTTIVDGAGQKADIE-ARVKTIRAQIEETTSDYDREKLQERLAKLVGG 375 Query: 99 CGQLQHQIATRTGKEERKFK---PFAAAGFSVRAGLAADGSNSGMLSISTVAGAEV 151 + AT T +E+K + A +V G+ G + + ++ + G +V Sbjct: 376 VAVINVGAATETEMKEKKARVEDALHATRAAVEEGIVPGGGVAYLRAVKALEGVKV 431 >sp|Q608F1|Y1541_METCA UPF0350 protein MCA1541 OS=Methylococcus capsulatus GN=MCA1541 PE=3 SV=1 Length = 83 Score = 58 (25.5 bits), Expect = 9.0, P = 0.9999 Identities = 26/76 (34%), Positives = 35/76 (46%) Query: 34 RVAWLLGRGKMAEIDAILITDVNGIGTTAD--DQLAFVSLI----ADQGETTTVAFGPEI 87 R+ W RG MAE+D +L V+G AD ++ AF L+ AD T PE Sbjct: 6 RLLWSCRRG-MAELDRVLALYVHGAYQEADVSERQAFERLLDLQDADLWRCLTGLARPED 64 Query: 88 GS--RIAASFMAACGQ 101 + +AA A GQ Sbjct: 65 PALAALAAKLRALVGQ 80 Parameters: ctxfactor=1.00 E=10 Query ----- As Used ----- ----- Computed ---- Frame MatID Matrix name Lambda K H Lambda K H +0 0 BLOSUM62 0.318 0.129 0.360 same same same Q=9,R=2 0.244 0.0300 0.180 n/a n/a n/a Query Frame MatID Length Eff.Length E S W T X E2 S2 +0 0 181 181 9.8 75 3 11 22 0.41 32 31 0.40 35 Statistics: Database: /misc/data0/databases/Uniprot/uniprot_sprot_wu.fasta Title: uniprot_sprot_wu.fasta Posted: 9:42:10 AM EDT Apr 12, 2010 Created: 9:42:26 AM EDT Apr 12, 2010 Format: XDF-1 # of letters in database: 181,677,051 # of sequences in database: 516,081 # of database sequences satisfying E: 6 No. of states in DFA: 569 (121 KB) Total size of DFA: 245 KB (2103 KB) Time to generate neighborhood: 0.00u 0.00s 0.00t Elapsed: 00:00:00 No. of threads or processors used: 8 Search cpu time: 10.70u 0.06s 10.76t Elapsed: 00:00:01 Total cpu time: 10.70u 0.06s 10.76t Elapsed: 00:00:01 Start: Fri Apr 16 09:13:43 2010 End: Fri Apr 16 09:13:44 2010 EXIT CODE 0 BLASTP 2.0MP-WashU [04-May-2006] [linux26-x64-I32LPF64 2006-05-10T17:22:28] Copyright (C) 1996-2006 Washington University, Saint Louis, Missouri USA. All Rights Reserved. Reference: Gish, W. (1996-2006) http://blast.wustl.edu Query= sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus oryzae GN=hacA PE=2 SV=1 (345 letters; record 2) Database: uniprot_sprot_wu.fasta 516,081 sequences; 181,677,051 total letters. Searching....10....20....30....40....50....60....70....80....90....100% done Smallest Sum High Probability Sequences producing High-scoring Segment Pairs: Score P(N) N sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=As... 1765 9.6e-182 1 sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS=Em... 1348 1.5e-137 1 sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS=Tr... 303 1.8e-31 2 sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS=Sa... 184 9.3e-14 1 sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabidops... 170 3.4e-12 1 sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanum l... 140 7.0e-09 1 sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos tauru... 150 3.2e-08 1 sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Homo sapi... 150 3.2e-08 1 sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive element-bindi... 156 3.7e-08 1 sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=Arab... 127 1.9e-07 1 sp|A3LYI0|NST1_PICST Stress response protein NST1 OS=Pich... 148 9.6e-07 1 sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive element-bindi... 136 6.4e-06 1 sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive element-bindi... 136 6.4e-06 1 sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive element-bindi... 136 6.5e-06 1 sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-bindi... 132 1.2e-05 1 sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive element-bindi... 133 1.4e-05 1 sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element-binding... 131 2.3e-05 1 sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper transc... 132 2.4e-05 1 sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive element-bindi... 130 3.0e-05 1 sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcriptiona... 104 6.0e-05 1 sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcriptiona... 104 6.0e-05 1 sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive element-bindi... 127 6.4e-05 1 sp|O88778|BSN_RAT Protein bassoon OS=Rattus norvegicus GN... 136 7.2e-05 1 sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element-binding... 125 0.00011 1 sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kinase 7 O... 127 0.00012 1 sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive element-bindi... 123 0.00013 1 sp|Q16520|BATF_HUMAN Basic leucine zipper transcriptional... 100 0.00016 1 sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-bindi... 121 0.00017 1 sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF2 OS=Pe... 121 0.00020 1 sp|P97876|BATF3_RAT Basic leucine zipper transcriptional ... 99 0.00021 1 sp|Q5B3C8|NST1_EMENI Stress response protein nst1 OS=Emer... 125 0.00029 1 sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-bindi... 115 0.00030 2 sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-bindi... 120 0.00032 1 sp|Q6NW59|ATF4_DANRE Cyclic AMP-dependent transcription f... 118 0.00032 1 sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Rattus norv... 116 0.00032 1 sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcription f... 118 0.00034 1 sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcription f... 117 0.00044 1 sp|O35284|BATF_MOUSE Basic leucine zipper transcriptional... 96 0.00044 1 sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus GN=Fosb... 116 0.00053 1 sp|Q90888|MAFB_CHICK Transcription factor MafB OS=Gallus ... 115 0.00059 1 sp|Q90370|MAFB_COTJA Transcription factor MafB OS=Coturni... 115 0.00059 1 sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mus muscu... 113 0.00071 1 sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattus norve... 114 0.00084 1 sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-bindi... 116 0.00089 1 sp|A4R2R1|NST1_MAGGR Stress response protein NST1 OS=Magn... 121 0.00097 1 sp|O57342|MAFA_COTJA Transcription factor MafA OS=Coturni... 112 0.0011 1 sp|O60675|MAFK_HUMAN Transcription factor MafK OS=Homo sa... 103 0.0012 1 sp|P15407|FOSL1_HUMAN Fos-related antigen 1 OS=Homo sapie... 111 0.0012 1 sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-binding... 115 0.0014 2 sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mus muscu... 117 0.0015 1 sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens GN=FOSB... 112 0.0015 1 sp|Q2VZV0|IF2_MAGSA Translation initiation factor IF-2 OS... 117 0.0016 1 sp|Q61827|MAFK_MOUSE Transcription factor MafK OS=Mus mus... 102 0.0017 1 sp|P29747|CREBA_DROME Cyclic AMP response element-binding... 117 0.0018 2 sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocricetus ... 112 0.0019 1 sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familiaris GN=... 111 0.0019 1 sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive element-bindi... 112 0.0020 1 sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive element-bindi... 112 0.0020 1 sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcription fac... 111 0.0020 1 sp|P79702|FOS_CYPCA Proto-oncogene c-Fos OS=Cyprinus carp... 111 0.0020 1 sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Homo sapi... 114 0.0021 1 sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus muscul... 110 0.0023 1 sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcription f... 112 0.0027 1 sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcription f... 112 0.0028 1 sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS=Homo sa... 109 0.0030 1 sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase 11A OS... 118 0.0032 2 sp|O43889|CREB3_HUMAN Cyclic AMP-responsive element-bindi... 110 0.0033 1 sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcription f... 109 0.0034 1 sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcription f... 110 0.0035 1 sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Arabidopsi... 108 0.0037 1 sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive element-bindi... 109 0.0038 1 sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-binding... 111 0.0038 2 sp|P54842|MAFB_RAT Transcription factor MafB OS=Rattus no... 108 0.0039 1 sp|A5PKJ4|MK07_BOVIN Mitogen-activated protein kinase 7 O... 113 0.0039 1 sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus musculus ... 109 0.0040 1 sp|O13024|INCEA_XENLA Inner centromere protein A OS=Xenop... 113 0.0045 1 sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS=Macaca ... 107 0.0050 1 sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initiation f... 113 0.0050 1 sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scrofa GN=F... 108 0.0051 1 sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein OS=FBJ... 108 0.0051 1 sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS=Schizos... 100 0.0057 1 sp|Q90596|MAFK_CHICK Transcription factor MafK OS=Gallus ... 98 0.0062 1 sp|Q504L8|MAFB_XENTR Transcription factor MafB OS=Xenopus... 106 0.0062 1 sp|Q1DQC1|PAN1_COCIM Actin cytoskeleton-regulatory comple... 114 0.0065 1 sp|P54841|MAFB_MOUSE Transcription factor MafB OS=Mus mus... 106 0.0065 1 sp|Q5A2K0|NST1_CANAL Stress response protein NST1 OS=Cand... 113 0.0078 1 sp|Q8VCH8|UBXN4_MOUSE UBX domain-containing protein 4 OS=... 108 0.0079 1 sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive element-bindi... 107 0.0079 1 sp|P10158|FOSL1_RAT Fos-related antigen 1 OS=Rattus norve... 104 0.0080 1 sp|P97875|JDP2_MOUSE Jun dimerization protein 2 OS=Mus mu... 98 0.0081 1 sp|Q78E65|JDP2_RAT Jun dimerization protein 2 OS=Rattus n... 98 0.0081 1 sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Homo sapie... 105 0.0085 1 sp|O42290|MAFA_CHICK Transcription factor MafA OS=Gallus ... 104 0.0087 1 sp|A1C9M5|KAPC_ASPCL Putative transcription factor kapC O... 103 0.010 2 sp|P0C865|MK07_RAT Mitogen-activated protein kinase 7 OS=... 109 0.011 1 sp|Q15424|SAFB1_HUMAN Scaffold attachment factor B1 OS=Ho... 109 0.013 1 sp|O60841|IF2P_HUMAN Eukaryotic translation initiation fa... 110 0.014 1 sp|Q5RDE1|IF2P_PONAB Eukaryotic translation initiation fa... 110 0.014 1 sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5-like pr... 105 0.014 1 sp|A9V549|EIF3A_MONBE Eukaryotic translation initiation f... 109 0.015 1 sp|Q9UKV3|ACINU_HUMAN Apoptotic chromatin condensation in... 110 0.016 1 sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS=Xenopu... 104 0.016 1 sp|Q4QRL3|CC88B_MOUSE Coiled-coil domain-containing prote... 110 0.018 1 sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo sapiens ... 103 0.018 1 sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus norvegic... 103 0.018 1 sp|P19880|YAP1_YEAST AP-1-like transcription factor YAP1 ... 96 0.019 2 sp|Q8CH25|SLTM_MOUSE SAFB-like transcription modulator OS... 108 0.019 1 sp|Q9NWH9|SLTM_HUMAN SAFB-like transcription modulator OS... 108 0.019 1 sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Homo sapie... 101 0.020 1 sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus muscul... 101 0.020 1 sp|Q6CBW0|NST1_YARLI Stress response protein NST1 OS=Yarr... 107 0.021 1 sp|Q498L2|SLTM_XENLA SAFB-like transcription modulator OS... 105 0.022 2 sp|Q1E554|CGR1_COCIM rRNA-processing protein CGR1 OS=Cocc... 89 0.023 1 sp|Q91496|FOS_TETFL Proto-oncogene c-Fos OS=Tetraodon flu... 102 0.023 1 sp|Q9ESN9|JIP3_MOUSE C-Jun-amino-terminal kinase-interact... 98 0.023 2 sp|P53450|FOS_TAKRU Proto-oncogene c-Fos OS=Takifugu rubr... 102 0.023 1 sp|Q05682|CALD1_HUMAN Caldesmon OS=Homo sapiens GN=CALD1 ... 106 0.023 1 sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos taurus GN... 102 0.024 1 sp|Q56TT7|FOS_PHOCM Proto-oncogene c-Fos OS=Phodopus camp... 102 0.024 1 sp|Q0CEI3|KAPC_ASPTN Putative transcription factor kapC O... 100 0.024 1 sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide exchange fac... 107 0.024 1 sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein OS=Droso... 103 0.025 1 sp|A2AJI0|MA7D1_MOUSE MAP7 domain-containing protein 1 OS... 106 0.025 1 sp|Q5R452|SAFB1_PONAB Scaffold attachment factor B1 OS=Po... 106 0.028 1 sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive element-bindi... 102 0.028 1 sp|Q9D439|CCD11_MOUSE Coiled-coil domain-containing prote... 103 0.028 1 sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus muscul... 99 0.029 1 sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS=Xenopus... 100 0.029 1 sp|Q54RZ9|BZPG_DICDI Probable basic-leucine zipper transc... 101 0.030 1 sp|A0JMK9|CAF1A_DANRE Chromatin assembly factor 1 subunit... 109 0.030 2 sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gallus gal... 100 0.030 1 sp|A2R346|KAPC_ASPNC Putative transcription factor kapC O... 99 0.031 1 sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis catus G... 101 0.031 1 sp|P26042|MOES_PIG Moesin OS=Sus scrofa GN=MSN PE=2 SV=3 103 0.033 1 sp|Q2HJ49|MOES_BOVIN Moesin OS=Bos taurus GN=MSN PE=2 SV=3 103 0.033 1 sp|A5FV21|IF2_ACICJ Translation initiation factor IF-2 OS... 105 0.034 1 sp|A6SCT6|DBP3_BOTFB ATP-dependent RNA helicase dbp3 OS=B... 103 0.034 1 sp|Q7PGE8|EIF3A_ANOGA Eukaryotic translation initiation f... 106 0.035 1 sp|O77788|NFM_BOVIN Neurofilament medium polypeptide OS=B... 105 0.036 1 sp|Q9JTB5|IF2_NEIMA Translation initiation factor IF-2 OS... 105 0.038 1 sp|Q9JYD2|IF2_NEIMB Translation initiation factor IF-2 OS... 105 0.038 1 sp|A1KV51|IF2_NEIMF Translation initiation factor IF-2 OS... 105 0.038 1 sp|P0C5H8|KAPC_EMENI Putative transcription factor kapC O... 98 0.038 1 sp|Q80YR5|SAFB2_MOUSE Scaffold attachment factor B2 OS=Mu... 105 0.039 1 sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodopus robo... 100 0.039 1 sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS=Xenopus... 98 0.041 1 sp|P26038|MOES_HUMAN Moesin OS=Homo sapiens GN=MSN PE=1 SV=3 102 0.042 1 sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattus norve... 98 0.043 1 sp|A0JMT0|CA1AB_XENLA Chromatin assembly factor 1 subunit... 104 0.044 1 sp|Q6Y7W6|PERQ2_HUMAN PERQ amino acid-rich with GYF domai... 112 0.044 2 sp|Q8WYK2|JDP2_HUMAN Jun dimerization protein 2 OS=Homo s... 92 0.045 1 sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive element-bindi... 99 0.046 1 sp|Q9C0A6|SETD5_HUMAN SET domain-containing protein 5 OS=... 106 0.046 1 sp|Q92575|UBXN4_HUMAN UBX domain-containing protein 4 OS=... 101 0.046 1 sp|Q5R4I3|UBXN4_PONAB UBX domain-containing protein 4 OS=... 101 0.046 1 sp|P14233|TGA1B_TOBAC TGACG-sequence-specific DNA-binding... 96 0.048 1 sp|A9M1D5|IF2_NEIM0 Translation initiation factor IF-2 OS... 104 0.048 1 sp|Q554P0|BZPJ_DICDI Probable basic-leucine zipper transc... 103 0.049 1 sp|Q8N9W4|GG6L2_HUMAN Golgin subfamily A member 6-like pr... 102 0.049 1 sp|Q8N300|CCD23_HUMAN Coiled-coil domain-containing prote... 77 0.050 1 sp|O81025|P2A03_ARATH Putative protein PHLOEM PROTEIN 2-L... 100 0.052 1 sp|O35763|MOES_RAT Moesin OS=Rattus norvegicus GN=Msn PE=... 101 0.055 1 sp|Q9Z220|TSG10_RAT Testis-specific gene 10 protein OS=Ra... 102 0.055 1 sp|Q32N93|INCEB_XENLA Inner centromere protein B OS=Xenop... 103 0.056 1 sp|Q95XZ5|NPBL_CAEEL Nipped-B-like protein pqn-85 OS=Caen... 107 0.056 1 sp|Q6CT90|EIF3A_KLULA Eukaryotic translation initiation f... 103 0.059 1 sp|Q5F489|TAF3_CHICK Transcription initiation factor TFII... 103 0.059 1 sp|P42775|GBF2_ARATH G-box-binding factor 2 OS=Arabidopsi... 98 0.060 1 sp|Q55EQ3|Y9086_DICDI Uncharacterized abhydrolase domain-... 103 0.060 1 sp|Q54LU8|Y8646_DICDI Probable serine/threonine-protein k... 98 0.060 2 sp|P94517|YSCB_BACSU Uncharacterized protein yscB OS=Baci... 94 0.066 1 sp|Q2UKG6|EIF3A_ASPOR Eukaryotic translation initiation f... 103 0.067 1 sp|Q9Y592|CCD41_HUMAN Coiled-coil domain-containing prote... 101 0.069 1 sp|Q6Y7W8|PERQ2_MOUSE PERQ amino acid-rich with GYF domai... 111 0.069 2 sp|Q8X229|FCR3_CANAL Fluconazole resistance protein 3 OS=... 98 0.069 1 sp|P26041|MOES_MOUSE Moesin OS=Mus musculus GN=Msn PE=1 SV=3 100 0.070 1 sp|Q9TW28|MYOM_DICDI Myosin-M heavy chain OS=Dictyosteliu... 105 0.072 1 sp|Q9NZ53|PDXL2_HUMAN Podocalyxin-like protein 2 OS=Homo ... 100 0.074 1 sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive element-bindi... 99 0.075 1 sp|Q5HZG4|TAF3_MOUSE Transcription initiation factor TFII... 102 0.076 1 sp|A0LE19|IF2_MAGSM Translation initiation factor IF-2 OS... 102 0.077 1 sp|Q869E1|DNLI1_DICDI DNA ligase 1 OS=Dictyostelium disco... 103 0.078 1 sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH P... 104 0.081 1 sp|O70191|ATF5_MOUSE Cyclic AMP-dependent transcription f... 95 0.085 1 sp|Q39140|TGA6_ARATH Transcription factor TGA6 OS=Arabido... 96 0.085 1 sp|Q68EL6|NFIL3_DANRE Nuclear factor interleukin-3-regula... 98 0.085 1 sp|Q55FW7|GLE1_DICDI Nucleoporin GLE1 OS=Dictyostelium di... 101 0.086 1 sp|Q3TLH4|BA2L2_MOUSE Protein BAT2-like 2 OS=Mus musculus... 89 0.092 2 sp|Q04323|UBXN1_HUMAN UBX domain-containing protein 1 OS=... 95 0.092 1 sp|P23922|HBP1A_WHEAT Transcription factor HBP-1a OS=Trit... 96 0.092 1 sp|Q9C5Q2|AI5L3_ARATH ABSCISIC ACID-INSENSITIVE 5-like pr... 94 0.094 1 sp|Q54TD7|DDX24_DICDI ATP-dependent RNA helicase ddx24 OS... 101 0.097 1 sp|Q5F797|IF2_NEIG1 Translation initiation factor IF-2 OS... 101 0.098 1 sp|B4RMZ3|IF2_NEIG2 Translation initiation factor IF-2 OS... 101 0.098 1 sp|Q86AH4|Y8592_DICDI Putative uncharacterized protein DD... 99 0.099 1 sp|Q8IIG7|YPF05_PLAF7 Uncharacterized protein PF11_0207 O... 101 0.10 1 sp|B2KI97|THOC2_RHIFE THO complex subunit 2 OS=Rhinolophu... 103 0.11 1 sp|Q9UM54|MYO6_HUMAN Myosin-VI OS=Homo sapiens GN=MYO6 PE... 102 0.11 1 sp|Q3KQU3|MA7D1_HUMAN MAP7 domain-containing protein 1 OS... 100 0.11 1 sp|Q14244|MAP7_HUMAN Ensconsin OS=Homo sapiens GN=MAP7 PE... 98 0.11 2 sp|P29596|ATF3_RAT Cyclic AMP-dependent transcription fac... 90 0.11 1 sp|Q5TM26|BAT2_MACMU Large proline-rich protein BAT2 OS=M... 104 0.11 1 sp|Q0IHP2|INCE_XENTR Inner centromere protein OS=Xenopus ... 100 0.12 1 sp|Q9NQS7|INCE_HUMAN Inner centromere protein OS=Homo sap... 100 0.12 1 sp|Q5HZY0|UBXN4_RAT UBX domain-containing protein 4 OS=Ra... 97 0.12 1 sp|Q90595|MAFF_CHICK Transcription factor MafF OS=Gallus ... 87 0.12 1 sp|Q6ZSZ5|ARHGI_HUMAN Rho guanine nucleotide exchange fac... 101 0.12 1 sp|Q7PS12|MOEH_ANOGA Moesin/ezrin/radixin homolog 1 OS=An... 98 0.12 1 sp|P12957|CALD1_CHICK Caldesmon OS=Gallus gallus GN=CALD1... 99 0.13 1 sp|Q08DA8|ATF1_BOVIN Cyclic AMP-dependent transcription f... 93 0.13 1 sp|Q94126|CES2_CAEEL Cell death specification protein 2 O... 91 0.13 1 sp|O66547|Y157_AQUAE Uncharacterized protein aq_157 OS=Aq... 88 0.13 1 sp|A6ZRZ0|NST1_YEAS7 Stress response protein NST1 OS=Sacc... 101 0.13 1 sp|P53935|NST1_YEAST Stress response protein NST1 OS=Sacc... 101 0.13 1 sp|A3BYC1|HOX25_ORYSJ Homeobox-leucine zipper protein HOX... 94 0.13 1 sp|B1AZI6|THOC2_MOUSE THO complex subunit 2 OS=Mus muscul... 102 0.13 1 sp|Q9H254|SPTN4_HUMAN Spectrin beta chain, brain 3 OS=Hom... 104 0.14 1 sp|Q2UNX4|KAPC_ASPOR Putative transcription factor kapC O... 93 0.14 1 sp|Q9JJ50|HGS_RAT Hepatocyte growth factor-regulated tyro... 94 0.14 2 sp|Q2KII1|ATF3_BOVIN Cyclic AMP-dependent transcription f... 89 0.14 1 sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcription ... 98 0.14 1 sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BAT2 OS=M... 103 0.14 1 sp|Q4I877|NDE1_GIBZE Nuclear distribution protein nudE ho... 97 0.14 1 sp|Q84WU4|GOGC3_ARATH Golgin candidate 3 OS=Arabidopsis t... 98 0.15 1 sp|Q499N6|UBXN1_RAT UBX domain-containing protein 1 OS=Ra... 93 0.15 1 sp|B4PPK2|FOSL_DROYA Transcription factor kayak OS=Drosop... 81 0.15 3 sp|A4R8N4|PAN1_MAGGR Actin cytoskeleton-regulatory comple... 101 0.15 1 sp|B2AWS3|PAN1_PODAN Actin cytoskeleton-regulatory comple... 101 0.15 1 sp|Q92545|TM131_HUMAN Transmembrane protein 131 OS=Homo s... 102 0.15 1 sp|Q38W81|IF2_LACSS Translation initiation factor IF-2 OS... 99 0.16 1 sp|Q789F3|MAF_CHICK Transcription factor Maf OS=Gallus ga... 94 0.16 1 sp|P49716|CEBPD_HUMAN CCAAT/enhancer-binding protein delt... 92 0.16 1 sp|P81269|ATF1_MOUSE Cyclic AMP-dependent transcription f... 92 0.16 1 sp|P23091|MAF_AVIS4 Transforming protein Maf OS=Avian mus... 94 0.16 1 sp|P18846|ATF1_HUMAN Cyclic AMP-dependent transcription f... 92 0.16 1 sp|Q07283|TRHY_HUMAN Trichohyalin OS=Homo sapiens GN=TCHH... 102 0.16 1 sp|Q4X1V0|NDE1_ASPFU Nuclear distribution protein nudE ho... 95 0.17 2 sp|Q8R1H8|BATF2_MOUSE Basic leucine zipper transcriptiona... 79 0.17 2 sp|Q66J36|NFIL3_XENLA Nuclear factor interleukin-3-regula... 95 0.17 1 sp|P13816|GARP_PLAFF Glutamic acid-rich protein OS=Plasmo... 97 0.17 1 sp|P38749|YAP3_YEAST AP-1-like transcription factor YAP3 ... 93 0.17 1 sp|Q3UIW5|RNF10_MOUSE RING finger protein 10 OS=Mus muscu... 99 0.18 2 sp|P23923|HBP1B_WHEAT Transcription factor HBP-1b(c38) OS... 93 0.18 1 sp|Q9D5R3|CCD41_MOUSE Coiled-coil domain-containing prote... 97 0.18 1 sp|Q9QXL2|KI21A_MOUSE Kinesin-like protein KIF21A OS=Mus ... 101 0.18 1 sp|Q9UPT6|JIP3_HUMAN C-Jun-amino-terminal kinase-interact... 95 0.18 2 sp|P16884|NFH_RAT Neurofilament heavy polypeptide OS=Ratt... 99 0.18 1 sp|Q60765|ATF3_MOUSE Cyclic AMP-dependent transcription f... 88 0.18 1 sp|Q9N0J3|CEBPD_SHEEP CCAAT/enhancer-binding protein delt... 91 0.18 1 sp|A5DLJ8|NST1_PICGU Stress response protein NST1 OS=Pich... 99 0.18 1 sp|A5DHL9|EIF3A_PICGU Eukaryotic translation initiation f... 98 0.19 1 sp|Q6NXA9|UBXN1_DANRE UBX domain-containing protein 1 OS=... 92 0.19 1 sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding protein delt... 91 0.19 1 sp|O88735|MAP7_MOUSE Ensconsin OS=Mus musculus GN=Map7 PE... 97 0.19 1 sp|Q99105|MYSU_RABIT Myosin heavy chain, embryonic smooth... 95 0.19 1 sp|Q9M7Q2|AI5L7_ARATH ABSCISIC ACID-INSENSITIVE 5-like pr... 94 0.20 1 sp|Q9HCM9|TRI39_HUMAN Tripartite motif-containing protein... 95 0.20 1 sp|Q1XHU0|TRI39_PANTR Tripartite motif-containing protein... 95 0.20 1 sp|Q7SHT5|PXR1_NEUCR Protein pxr-1 OS=Neurospora crassa G... 93 0.20 1 sp|Q32LJ0|CCD23_BOVIN Coiled-coil domain-containing prote... 71 0.21 1 sp|Q99LQ4|CCD23_MOUSE Coiled-coil domain-containing prote... 71 0.21 1 sp|Q4KLG3|CCD23_RAT Coiled-coil domain-containing protein... 71 0.21 1 sp|Q54XG7|DIMA_DICDI Basic-leucine zipper transcription f... 99 0.21 1 sp|Q54CY3|Y4489_DICDI Putative uncharacterized protein DD... 86 0.21 1 sp|B0KWH8|THOC2_CALJA THO complex subunit 2 OS=Callithrix... 100 0.21 1 sp|Q7Z4V5|HDGR2_HUMAN Hepatoma-derived growth factor-rela... 96 0.21 1 sp|P15205|MAP1B_RAT Microtubule-associated protein 1B OS=... 102 0.22 3 sp|Q98UK4|MAF_DANRE Transcription factor Maf OS=Danio rer... 92 0.22 1 sp|O75037|KI21B_HUMAN Kinesin-like protein KIF21B OS=Homo... 108 0.22 2 sp|Q02040|SF17A_HUMAN Splicing factor, arginine/serine-ri... 96 0.22 1 sp|P82179|TRDN_CANFA Triadin OS=Canis familiaris GN=TRDN ... 96 0.22 1 sp|B0WYY2|MOEH_CULQU Moesin/ezrin/radixin homolog 1 OS=Cu... 95 0.22 1 sp|Q556Q3|IRLF_DICDI Probable serine/threonine-protein ki... 99 0.23 1 sp|P18847|ATF3_HUMAN Cyclic AMP-dependent transcription f... 87 0.23 1 sp|Q5RCJ1|CIP4_PONAB Cdc42-interacting protein 4 OS=Pongo... 95 0.24 1 sp|Q1RM35|CC104_DANRE Coiled-coil domain-containing prote... 92 0.24 1 sp|A2Z0Q0|HOX25_ORYSI Homeobox-leucine zipper protein HOX... 90 0.24 1 sp|P15336|ATF2_HUMAN Cyclic AMP-dependent transcription f... 94 0.24 1 sp|O88453|SAFB1_RAT Scaffold attachment factor B1 OS=Ratt... 97 0.24 1 sp|B0YC95|PAN1_ASPFC Actin cytoskeleton-regulatory comple... 99 0.24 1 sp|Q4WG58|PAN1_ASPFU Actin cytoskeleton-regulatory comple... 99 0.24 1 sp|A6NC98|CC88B_HUMAN Coiled-coil domain-containing prote... 99 0.25 1 sp|A6R7X5|PAN1_AJECN Actin cytoskeleton-regulatory comple... 99 0.25 1 sp|Q05D44|IF2P_MOUSE Eukaryotic translation initiation fa... 98 0.25 1 sp|P54843|MAF_MOUSE Transcription factor Maf OS=Mus muscu... 92 0.26 1 sp|O75444|MAF_HUMAN Transcription factor Maf OS=Homo sapi... 92 0.26 1 sp|A7Z017|MAF_BOVIN Transcription factor Maf OS=Bos tauru... 92 0.26 1 sp|A5PJN1|TAP26_BOVIN Thyroid transcription factor 1-asso... 89 0.27 1 sp|O24160|TGA21_TOBAC TGACG-sequence-specific DNA-binding... 93 0.27 1 sp|Q54Y73|BZPD_DICDI Probable basic-leucine zipper transc... 96 0.27 1 sp|Q5FW38|NFIL3_XENTR Nuclear factor interleukin-3-regula... 93 0.27 1 sp|Q39163|TGA5_ARATH Transcription factor TGA5 OS=Arabido... 91 0.27 1 sp|Q90889|MAFG_CHICK Transcription factor MafG OS=Gallus ... 85 0.27 1 sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcription ... 95 0.28 1 sp|Q9QXL1|KI21B_MOUSE Kinesin-like protein KIF21B OS=Mus ... 107 0.28 2 sp|Q5RG44|K1211_DANRE Uncharacterized protein KIAA1211 ho... 97 0.28 1 sp|P48634|BAT2_HUMAN Large proline-rich protein BAT2 OS=H... 100 0.28 1 sp|C0QTL9|IF2_PERMH Translation initiation factor IF-2 OS... 96 0.28 1 sp|P53352|INCE_CHICK Inner centromere protein OS=Gallus g... 96 0.28 1 sp|Q8BKJ9|SIRT7_MOUSE NAD-dependent deacetylase sirtuin-7... 92 0.29 1 sp|Q5XIB5|CCD86_RAT Coiled-coil domain-containing protein... 91 0.29 1 sp|O93602|ATF2_CHICK Cyclic AMP-dependent transcription f... 93 0.29 1 sp|P16951|ATF2_MOUSE Cyclic AMP-dependent transcription f... 93 0.29 1 sp|Q5QTY8|IF2_IDILO Translation initiation factor IF-2 OS... 96 0.29 1 sp|Q6FUQ5|FYV7_CANGA rRNA-processing protein FYV7 OS=Cand... 84 0.29 1 sp|P37934|MAAY3_SCHCO Mating-type protein A-alpha Y3 OS=S... 97 0.29 2 sp|Q99089|CPRF1_PETCR Common plant regulatory factor 1 OS... 92 0.29 1 sp|Q3ZBU9|UBXN4_BOVIN UBX domain-containing protein 4 OS=... 93 0.30 1 sp|P34511|YMX3_CAEEL Uncharacterized protein K06H7.3 OS=C... 94 0.30 1 sp|Q8C0Q2|ZHX3_MOUSE Zinc fingers and homeoboxes protein ... 96 0.31 1 sp|Q5B5B0|PAN1_EMENI Actin cytoskeleton-regulatory comple... 98 0.31 1 sp|A2AG50|MA7D2_MOUSE MAP7 domain-containing protein 2 OS... 95 0.31 1 sp|Q4PBP6|NST1_USTMA Stress response protein NST1 OS=Usti... 98 0.31 1 sp|Q7KZI7|MARK2_HUMAN Serine/threonine-protein kinase MAR... 95 0.31 1 sp|Q03484|CEBPD_RAT CCAAT/enhancer-binding protein delta ... 89 0.31 1 sp|Q80VM7|ANR24_MOUSE Ankyrin repeat domain-containing pr... 96 0.32 1 sp|P54844|MAF_RAT Transcription factor Maf OS=Rattus norv... 91 0.32 1 sp|B1ZDQ8|IF2_METPB Translation initiation factor IF-2 OS... 96 0.32 1 sp|Q99LI8|HGS_MOUSE Hepatocyte growth factor-regulated ty... 94 0.32 2 sp|Q6BUE3|PXR1_DEBHA Protein PXR1 OS=Debaryomyces hanseni... 90 0.32 1 sp|Q7RWT1|EIF3A_NEUCR Eukaryotic translation initiation f... 96 0.32 1 sp|Q6ZDF3|TRAB1_ORYSJ bZIP transcription factor TRAB1 OS=... 90 0.32 1 sp|Q8NI27|THOC2_HUMAN THO complex subunit 2 OS=Homo sapie... 98 0.33 1 sp|B1MTK1|THOC2_CALMO THO complex subunit 2 OS=Callicebus... 98 0.33 1 sp|Q8N4C8|MINK1_HUMAN Misshapen-like kinase 1 OS=Homo sap... 93 0.33 2 sp|P42776|GBF3_ARATH G-box-binding factor 3 OS=Arabidopsi... 91 0.33 1 sp|A1D9Z7|KAPC_NEOFI Putative transcription factor kapC O... 89 0.34 1 sp|Q4G091|MICLK_RAT MICAL C-terminal-like protein OS=Ratt... 94 0.34 1 sp|Q6P788|ATF5_RAT Cyclic AMP-dependent transcription fac... 89 0.34 1 sp|Q9Y2D1|ATF5_HUMAN Cyclic AMP-dependent transcription f... 89 0.34 1 sp|P43273|TGA2_ARATH Transcription factor TGA2 OS=Arabido... 90 0.34 1 sp|Q795Q5|YTTA_BACSU Uncharacterized membrane protein ytt... 88 0.34 1 sp|Q32LP2|RADI_BOVIN Radixin OS=Bos taurus GN=RDX PE=2 SV=1 93 0.35 1 sp|Q9PU45|RADI_CHICK Radixin OS=Gallus gallus GN=RDX PE=2... 93 0.35 1 sp|P35241|RADI_HUMAN Radixin OS=Homo sapiens GN=RDX PE=1 ... 93 0.35 1 sp|P26044|RADI_PIG Radixin OS=Sus scrofa GN=RDX PE=2 SV=1 93 0.35 1 sp|Q2KHR3|QSER1_HUMAN Glutamine and serine-rich protein 1... 98 0.35 1 sp|Q54NF3|Y6434_DICDI Uncharacterized protein DDB_G028529... 91 0.36 1 sp|Q99091|CPRF3_PETCR Light-inducible protein CPRF3 OS=Pe... 89 0.36 1 sp|P30427|PLEC1_RAT Plectin-1 OS=Rattus norvegicus GN=Ple... 102 0.36 1 sp|Q553B1|DDX46_DICDI ATP-dependent RNA helicase ddx46 OS... 96 0.36 1 sp|Q5AXH3|TOF1_EMENI Topoisomerase 1-associated factor 1 ... 96 0.37 1 sp|Q0V9K1|MAF_XENTR Transcription factor Maf OS=Xenopus t... 90 0.37 1 sp|A6RW62|NST1_BOTFB Stress response protein nst1 OS=Botr... 96 0.37 1 sp|A7EMM3|NST1_SCLS1 Stress response protein nst1 OS=Scle... 96 0.37 1 sp|Q869T2|Y7634_DICDI Putative uncharacterized protein DD... 92 0.37 1 sp|A1DC51|PAN1_NEOFI Actin cytoskeleton-regulatory comple... 97 0.37 1 sp|Q960X8|HRS_DROME Hepatocyte growth factor-regulated ty... 94 0.37 1 sp|Q5BJY9|K1C18_RAT Keratin, type I cytoskeletal 18 OS=Ra... 91 0.37 1 sp|Q6BUT3|NST1_DEBHA Stress response protein NST1 OS=Deba... 96 0.37 1 sp|A1CD74|PAN1_ASPCL Actin cytoskeleton-regulatory comple... 97 0.37 1 sp|Q09202|YP23_CAEEL Uncharacterized protein AH6.3 OS=Cae... 87 0.38 1 sp|B2GUV7|IF2P_RAT Eukaryotic translation initiation fact... 96 0.38 1 sp|A5F4W4|ZAPB_VIBC3 Cell division protein zapB OS=Vibrio... 68 0.38 1 sp|Q9KNP5|ZAPB_VIBCH Cell division protein zapB OS=Vibrio... 68 0.38 1 sp|C3LSB5|ZAPB_VIBCM Cell division protein zapB OS=Vibrio... 68 0.38 1 sp|P97820|M4K4_MOUSE Mitogen-activated protein kinase kin... 96 0.39 1 sp|P34099|KAPC_DICDI cAMP-dependent protein kinase cataly... 93 0.39 1 sp|O95819|M4K4_HUMAN Mitogen-activated protein kinase kin... 96 0.39 1 sp|P11115|CPC1_NEUCR Cross-pathway control protein 1 OS=N... 88 0.39 1 sp|P42777|GBF4_ARATH G-box-binding factor 4 OS=Arabidopsi... 88 0.39 1 sp|A3KMR8|MAFA_DANRE Transcription factor MafA OS=Danio r... 89 0.39 1 sp|O60132|TEA4_SCHPO Tip elongation aberrant protein Tea4... 94 0.39 1 sp|Q7KQM6|PERQ1_DROME PERQ amino acid-rich with GYF domai... 97 0.39 1 sp|Q9ZLW8|PGBA_HELPJ Plasminogen-binding protein pgbA OS=... 91 0.40 1 sp|O25249|PGBA_HELPY Plasminogen-binding protein pgbA OS=... 91 0.40 1 sp|Q13164|MK07_HUMAN Mitogen-activated protein kinase 7 O... 83 0.40 2 sp|Q1DXU0|EIF3A_COCIM Eukaryotic translation initiation f... 95 0.40 1 sp|O14964|HGS_HUMAN Hepatocyte growth factor-regulated ty... 90 0.41 2 sp|Q0CUP6|EIF3A_ASPTN Eukaryotic translation initiation f... 95 0.41 1 sp|A5DXA0|NST1_LODEL Stress response protein NST1 OS=Lodd... 97 0.41 1 sp|Q4WA21|KAPC_ASPFU Putative transcription factor kapC O... 88 0.41 1 sp|Q54GQ1|MTMR_DICDI Myotubularin-related protein DDB_G02... 96 0.41 1 sp|P23614|BASP1_CHICK Brain acid soluble protein 1 homolo... 87 0.41 1 sp|Q8SSQ0|GEFR_DICDI Ras guanine nucleotide exchange fact... 93 0.41 2 sp|Q7Z4S6|KI21A_HUMAN Kinesin-like protein KIF21A OS=Homo... 97 0.41 1 sp|Q2KI00|F107B_BOVIN Protein FAM107B OS=Bos taurus GN=FA... 80 0.41 1 sp|Q08014|MEDB_GIALA Median body protein OS=Giardia lambl... 94 0.41 1 sp|Q9M7Q5|AI5L4_ARATH ABSCISIC ACID-INSENSITIVE 5-like pr... 90 0.42 1 sp|Q09458|YQ37_CAEEL Uncharacterized protein C09F5.7 OS=C... 90 0.42 1 sp|Q6MG48|BAT2_RAT Large proline-rich protein BAT2 OS=Rat... 98 0.42 1 sp|Q9WU62|INCE_MOUSE Inner centromere protein OS=Mus musc... 94 0.42 1 sp|P26043|RADI_MOUSE Radixin OS=Mus musculus GN=Rdx PE=1 ... 92 0.43 1 sp|Q12234|RUD3_YEAST GRIP domain-containing protein RUD3 ... 91 0.43 1 sp|Q98TA5|CA1AA_XENLA Chromatin assembly factor 1 subunit... 94 0.43 1 sp|Q07E15|CTTB2_MUSPF Cortactin-binding protein 2 OS=Must... 76 0.44 3 sp|Q1MTN9|RLF2_SCHPO Chromatin assembly factor 1 subunit ... 90 0.44 2 sp|P07197|NFM_HUMAN Neurofilament medium polypeptide OS=H... 94 0.44 1 sp|Q6IP50|UBX1A_XENLA UBX domain-containing protein 1-A O... 88 0.44 1 sp|Q922Y1|UBXN1_MOUSE UBX domain-containing protein 1 OS=... 88 0.44 1 sp|Q5JR59|MTUS2_HUMAN Microtubule-associated tumor suppre... 84 0.45 2 sp|P14918|EXTN_MAIZE Extensin OS=Zea mays GN=HRGP PE=2 SV=1 73 0.45 2 sp|C1D8X2|IF2_LARHH Translation initiation factor IF-2 OS... 94 0.46 1 sp|Q7SAF6|CEF1_NEUCR Pre-mRNA-splicing factor cef-1 OS=Ne... 93 0.46 1 sp|A6VLC4|ZAPB_ACTSZ Cell division protein zapB OS=Actino... 67 0.46 1 sp|P72929|Y1021_SYNY3 Uncharacterized protein sll1021 OS=... 86 0.47 2 sp|O14273|YET4_SCHPO Meiotically up-regulated protein C8C... 92 0.47 1 sp|Q6DGM8|JDP2_DANRE Jun dimerization protein 2 OS=Danio ... 82 0.48 1 sp|Q8GT73|BH119_ARATH Transcription factor bHLH119 OS=Ara... 91 0.48 1 sp|C1FXW9|THOC2_DASNO THO complex subunit 2 OS=Dasypus no... 96 0.48 1 sp|P12270|TPR_HUMAN Nucleoprotein TPR OS=Homo sapiens GN=... 88 0.49 2 sp|P29176|FOSX_MSVFR Transforming protein v-Fos/v-Fox OS=... 86 0.50 1 sp|Q9UPN4|AZI1_HUMAN 5-azacytidine-induced protein 1 OS=H... 94 0.50 1 sp|P78559|MAP1A_HUMAN Microtubule-associated protein 1A O... 75 0.51 2 sp|Q5AVK6|NOP16_EMENI Nucleolar protein 16 OS=Emericella ... 86 0.51 1 sp|Q9H098|F107B_HUMAN Protein FAM107B OS=Homo sapiens GN=... 79 0.51 1 sp|P20226|TBP_HUMAN TATA-box-binding protein OS=Homo sapi... 88 0.51 1 sp|Q08E13|RNF10_BOVIN RING finger protein 10 OS=Bos tauru... 89 0.52 2 sp|Q9VL63|U430_DROME UPF0430 protein CG31712 OS=Drosophil... 87 0.52 1 sp|Q13061|TRDN_HUMAN Triadin OS=Homo sapiens GN=TRDN PE=1... 92 0.52 1 sp|Q9ES64|USH1C_MOUSE Harmonin OS=Mus musculus GN=Ush1c P... 93 0.52 1 sp|Q86AF3|BZPH_DICDI Probable basic-leucine zipper transc... 92 0.52 2 sp|Q9Y520|BA2L2_HUMAN Protein BAT2-like 2 OS=Homo sapiens... 98 0.53 1 sp|Q9LES3|AI5L2_ARATH ABSCISIC ACID-INSENSITIVE 5-like pr... 87 0.53 1 sp|Q55E93|BZPE_DICDI Probable basic-leucine zipper transc... 89 0.53 1 sp|Q15147|PLCB4_HUMAN 1-phosphatidylinositol-4,5-bisphosp... 94 0.54 1 sp|Q9QW07|PLCB4_RAT 1-phosphatidylinositol-4,5-bisphospha... 94 0.54 1 sp|Q9QWW1|HOME2_MOUSE Homer protein homolog 2 OS=Mus musc... 88 0.54 1 sp|Q98UK5|MAFB_DANRE Transcription factor MafB OS=Danio r... 88 0.54 1 sp|Q9JJ89|CCD86_MOUSE Coiled-coil domain-containing prote... 89 0.54 1 sp|Q499E4|DZI1L_MOUSE Zinc finger protein DZIP1L OS=Mus m... 92 0.55 1 sp|P34618|CEC1_CAEEL Chromo domain-containing protein cec... 87 0.55 1 sp|Q75JP5|Y2471_DICDI Calponin homology domain-containing... 95 0.55 2 sp|Q1E1H4|NST1_COCIM Stress response protein NST1 OS=Cocc... 94 0.55 1 sp|P05661|MYSA_DROME Myosin heavy chain, muscle OS=Drosop... 96 0.56 1 sp|Q9UPA5|BSN_HUMAN Protein bassoon OS=Homo sapiens GN=BS... 98 0.56 2 sp|Q55D99|PAKA_DICDI Serine/threonine-protein kinase pakA... 88 0.57 2 sp|A5PKL7|LZTS2_BOVIN Leucine zipper putative tumor suppr... 91 0.57 1 sp|Q7RWR8|CWC26_NEUCR Pre-mRNA-splicing factor cwc-26 OS=... 88 0.57 1 sp|P35710|SOX5_MOUSE Transcription factor SOX-5 OS=Mus mu... 84 0.57 3 sp|P24152|EXTN_SORBI Extensin OS=Sorghum bicolor GN=HRGP ... 75 0.58 2 sp|Q9Z2Q8|FOS_CRIGR Proto-oncogene c-Fos OS=Cricetulus gr... 88 0.58 1 sp|B4GIF2|EIF3J_DROPE Eukaryotic translation initiation f... 85 0.58 1 sp|Q8I1E5|EIF3J_DROPS Eukaryotic translation initiation f... 85 0.58 1 sp|Q9R269|PEPL_MOUSE Periplakin OS=Mus musculus GN=Ppl PE... 93 0.59 2 sp|P35711|SOX5_HUMAN Transcription factor SOX-5 OS=Homo s... 82 0.59 3 sp|Q9ZJP4|TONB_HELPJ Protein tonB OS=Helicobacter pylori ... 86 0.59 1 sp|Q6NY15|TSG10_MOUSE Testis-specific gene 10 protein OS=... 91 0.59 1 sp|Q9Y4D1|DAAM1_HUMAN Disheveled-associated activator of ... 93 0.59 1 sp|P28741|KIF3A_MOUSE Kinesin-like protein KIF3A OS=Mus m... 91 0.59 1 sp|Q9PTD7|CING_XENLA Cingulin OS=Xenopus laevis GN=cgn PE... 94 0.60 1 sp|O94685|UCP8_SCHPO UBA domain-containing protein 8 OS=S... 92 0.60 1 sp|P20482|CNC_DROME Segmentation protein cap'n'collar OS=... 94 0.60 1 sp|P56095|AP1_KLULA AP-1-like transcription factor OS=Klu... 90 0.60 1 sp|P51984|CREB_CHLVR Cyclic AMP-responsive element-bindin... 85 0.60 1 sp|Q00969|ATF2_RAT Cyclic AMP-dependent transcription fac... 89 0.61 1 sp|Q29GR8|MOEH_DROPS Moesin/ezrin/radixin homolog 1 OS=Dr... 90 0.61 1 sp|Q10PR4|HSFA9_ORYSJ Heat stress transcription factor A-... 88 0.62 1 sp|Q15642|CIP4_HUMAN Cdc42-interacting protein 4 OS=Homo ... 90 0.62 1 sp|Q1LUE5|ZCH18_DANRE Zinc finger CCCH domain-containing ... 93 0.62 1 sp|B0W6N3|EIF3A_CULQU Eukaryotic translation initiation f... 93 0.62 1 sp|Q5XJV7|SETD5_MOUSE SET domain-containing protein 5 OS=... 94 0.62 1 sp|B3EX63|CING_SORAR Cingulin OS=Sorex araneus GN=CGN PE=... 93 0.62 1 sp|Q2UDY8|PAN1_ASPOR Actin cytoskeleton-regulatory comple... 94 0.63 1 sp|Q5R7F9|MA7D2_PONAB MAP7 domain-containing protein 2 OS... 91 0.63 1 sp|O88801|HOME2_RAT Homer protein homolog 2 OS=Rattus nor... 87 0.63 1 sp|Q8R424|STABP_RAT STAM-binding protein OS=Rattus norveg... 88 0.63 1 sp|Q6NS15|MED15_XENLA Mediator of RNA polymerase II trans... 91 0.64 1 sp|Q6RFY2|PHAR3_RAT Phosphatase and actin regulator 3 OS=... 89 0.64 1 sp|Q8C2B3|HDAC7_MOUSE Histone deacetylase 7 OS=Mus muscul... 71 0.64 2 sp|Q54DE2|Y4323_DICDI Putative uncharacterized protein DD... 65 0.64 1 sp|P41425|Y020_NPVAC Uncharacterized 8.0 kDa protein in E... 65 0.64 1 sp|A3MZY9|ZAPB_ACTP2 Cell division protein zapB OS=Actino... 65 0.64 1 sp|B3H152|ZAPB_ACTP7 Cell division protein zapB OS=Actino... 65 0.64 1 sp|O88737|BSN_MOUSE Protein bassoon OS=Mus musculus GN=Bs... 98 0.64 1 sp|B7GKC7|GRPE_ANOFW Protein grpE OS=Anoxybacillus flavit... 83 0.65 1 sp|Q9CXK9|RBM33_MOUSE RNA-binding protein 33 OS=Mus muscu... 93 0.65 1 sp|Q6CJZ6|MED2_KLULA Mediator of RNA polymerase II transc... 84 0.65 2 sp|P14105|MYH9_CHICK Myosin-9 OS=Gallus gallus GN=MYH9 PE... 95 0.65 1 sp|A1WLI3|IF2_VEREI Translation initiation factor IF-2 OS... 92 0.65 1 sp|Q62736|CALD1_RAT Non-muscle caldesmon OS=Rattus norveg... 89 0.65 1 sp|Q5F3P8|SET1B_CHICK Histone-lysine N-methyltransferase ... 95 0.66 1 sp|Q96JK9|MAML3_HUMAN Mastermind-like protein 3 OS=Homo s... 96 0.66 2 sp|Q5NVN6|CEP63_PONAB Centrosomal protein of 63 kDa OS=Po... 89 0.66 1 sp|Q9ZKY5|PGBB_HELPJ Plasminogen-binding protein pgbB OS=... 89 0.66 1 sp|P18850|ATF6A_HUMAN Cyclic AMP-dependent transcription ... 90 0.67 1 sp|Q8N1L9|BATF2_HUMAN Basic leucine zipper transcriptiona... 85 0.67 1 sp|Q9HD67|MYO10_HUMAN Myosin-X OS=Homo sapiens GN=MYO10 P... 95 0.67 1 sp|Q0VF49|K2012_HUMAN Uncharacterized protein KIAA2012 OS... 89 0.67 1 sp|Q9JM52|MINK1_MOUSE Misshapen-like kinase 1 OS=Mus musc... 93 0.67 1 sp|Q90Z72|NFIL3_CHICK Nuclear factor interleukin-3-regula... 88 0.67 1 sp|P23050|FOS_AVINK p55-v-Fos-transforming protein OS=Avi... 86 0.67 1 sp|Q32PF6|DBP_BOVIN D site-binding protein OS=Bos taurus ... 86 0.68 1 sp|Q10586|DBP_HUMAN D site-binding protein OS=Homo sapien... 86 0.68 1 sp|Q60925|DBP_MOUSE D site-binding protein OS=Mus musculu... 86 0.68 1 sp|P16443|DBP_RAT D site-binding protein OS=Rattus norveg... 86 0.68 1 sp|Q66H89|CCD41_RAT Coiled-coil domain-containing protein... 90 0.68 1 sp|Q54IE8|IRLE_DICDI Probable serine/threonine-protein ki... 93 0.68 1 sp|B4RXT8|IF2_ALTMD Translation initiation factor IF-2 OS... 91 0.69 1 sp|Q4R628|KIF3A_MACFA Kinesin-like protein KIF3A OS=Macac... 90 0.69 1 sp|P46150|MOEH_DROME Moesin/ezrin/radixin homolog 1 OS=Dr... 89 0.69 1 sp|A2QUR1|SFH5_ASPNC Phosphatidylinositol transfer protei... 88 0.69 1 sp|P05411|JUN_AVIS1 Viral jun-transforming protein OS=Avi... 85 0.70 1 sp|Q5ZIA2|MAP7_CHICK Ensconsin OS=Gallus gallus GN=MAP7 P... 90 0.70 1 sp|Q09YM8|CTTB2_RABIT Cortactin-binding protein 2 OS=Oryc... 78 0.70 2 sp|Q0CP15|NST1_ASPTN Stress response protein nst1 OS=Aspe... 92 0.70 1 sp|A8MPH9|FOSLD_DROME Transcription factor kayak, isoform... 83 0.71 2 sp|Q9QXS1|PLEC1_MOUSE Plectin-1 OS=Mus musculus GN=Plec1 ... 98 0.71 1 sp|Q9WVE9|ITSN1_RAT Intersectin-1 OS=Rattus norvegicus GN... 97 0.71 2 sp|A2QC41|MED21_ASPNC Mediator of RNA polymerase II trans... 82 0.71 1 WARNING: Descriptions of 665 database sequences were not reported due to the limiting value of parameter V = 500. NOTE: You might consider using a low-complexity sequence filter to reduce the number of spurious matches that may be appearing in the output. See the filter and wordmask options at http://blast.wustl.edu/blast/parameters.html#filter. >sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus oryzae GN=hacA PE=2 SV=1 Length = 345 Score = 1765 (626.4 bits), Expect = 9.6e-182, P = 9.6e-182 Identities = 345/345 (100%), Positives = 345/345 (100%) Query: 1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG 60 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG Sbjct: 1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG 60 Query: 61 QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ 120 QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ Sbjct: 61 QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ 120 Query: 121 QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD 180 QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD Sbjct: 121 QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD 180 Query: 181 ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK 240 ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK Sbjct: 181 ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK 240 Query: 241 HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS 300 HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS Sbjct: 241 HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS 300 Query: 301 EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 345 EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC Sbjct: 301 EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 345 >sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS=Emericella nidulans GN=hacA PE=2 SV=2 Length = 350 Score = 1348 (479.6 bits), Expect = 1.5e-137, P = 1.5e-137 Identities = 262/332 (78%), Positives = 293/332 (88%) Query: 13 DSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP 72 +SLP TP+ EVPVLTVSPADTSL + +V Q KPEEKKPAKKRKSWGQELPVPKTNLPP Sbjct: 18 NSLPTTPSLEVPVLTVSPADTSLQTKNVVAQ-TKPEEKKPAKKRKSWGQELPVPKTNLPP 76 Query: 73 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE+EKI MEQQNQFLLQRL+QM Sbjct: 77 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLESEKIDMEQQNQFLLQRLAQM 136 Query: 133 EAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTP 192 EAENNRLSQQ+AQL+AEVRGSR +TP SPA+ SPTLTPTLFKQE DE+PL+RIPFPTP Sbjct: 137 EAENNRLSQQVAQLSAEVRGSRHSTPTSSSPASVSPTLTPTLFKQEGDEVPLDRIPFPTP 196 Query: 193 SLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLS 252 S++DYSPTLKPS+LAES D+ QHPAVSV GLEGD SAL LFDLG+ +KH T D+ APLS Sbjct: 197 SVTDYSPTLKPSSLAESPDLTQHPAVSVGGLEGDESALTLFDLGASIKHEPTHDLTAPLS 256 Query: 253 DDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAH 312 DDDF RLF+GDSS+E DSS+ EDG AFDVL+ GDLSAFPFDSMV+FD+EPVTLE +E + Sbjct: 257 DDDFRRLFNGDSSLESDSSLLEDGFAFDVLDSGDLSAFPFDSMVDFDTEPVTLEDLEQTN 316 Query: 313 GLPDETTCKTSSVQPGFGASTTRCDGQGIAAG 344 GL D +CK +S+QP GAST+RCDGQGIAAG Sbjct: 317 GLSDSASCKAASLQPSHGASTSRCDGQGIAAG 348 >sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS=Trichoderma reesei GN=hac1 PE=2 SV=1 Length = 451 Score = 303 (111.7 bits), Expect = 1.8e-31, Sum P(2) = 1.8e-31 Identities = 88/209 (42%), Positives = 112/209 (53%) Query: 7 KTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP 66 + M + DS+ A S + V+ S S EKKP KKRKSWGQ LP P Sbjct: 43 RDMMTPDSV-ADIDSRLSVIPESQDAEDDESHSTSATAPSTSEKKPVKKRKSWGQVLPEP 101 Query: 67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLL 126 KTNLPPRKRAKTEDEKEQRR+ERVLRNR AAQ+SRERKRLE+E LE ++N+ L Sbjct: 102 KTNLPPRKRAKTEDEKEQRRVERVLRNRRAAQSSRERKRLEVEALE-------KRNKELE 154 Query: 127 QRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLER 186 L ++ N L ++L + G + P S TL+ LF RD + Sbjct: 155 TLLINVQKTNLILVEELNRFRRS-SGVVTRSSSPLDSLQDSITLSQQLFGS-RDGQTMSN 212 Query: 187 IPFPTPSLSDY------SPTLKPSTLAES 209 P SL D +PT+ P++L+ S Sbjct: 213 ---PEQSLMDQIMRSAANPTVNPASLSPS 238 Score = 61 (26.5 bits), Expect = 1.8e-31, Sum P(2) = 1.8e-31 Identities = 25/95 (26%), Positives = 45/95 (47%) Query: 253 DDDFNRLFHGDSSV---EPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIE 309 DDD+ GDS+ P S ++ + + + + +A+ + N+ + L+ +E Sbjct: 361 DDDY---LAGDSAACFTNPLPSDYDFDINDFLTDDANHAAYDIVAASNYAAADRELD-LE 416 Query: 310 MAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAG 344 + H ++ + S QP GAS+ CD GIA G Sbjct: 417 I-HDPENQIPSRHSIQQPQSGASSHGCDDGGIAVG 450 >sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS=Saccharomyces cerevisiae GN=HAC1 PE=1 SV=2 Length = 238 Score = 184 (69.8 bits), Expect = 9.3e-14, P = 9.3e-14 Identities = 69/214 (32%), Positives = 103/214 (48%) Query: 67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ-NQFL 125 K+ LPPRKRAKT++EKEQRRIER+LRNR AA SRE+KRL ++ LE + +E N Sbjct: 23 KSTLPPRKRAKTKEEKEQRRIERILRNRRAAHQSREKKRLHLQYLERKCSLLENLLNSVN 82 Query: 126 LQRLSQME----AENNRLSQQLAQLA--AEVRGSRANTPMPGSPATASPTLTPTLFKQER 179 L++L+ E ++ L + RG+ +T S ++S T TP+ Sbjct: 83 LEKLADHEDALTCSHDAFVASLDEYRDFQSTRGASLDTR--ASSHSSSDTFTPS------ 134 Query: 180 DELPLERIPFPTPSLSDYSPTLKPSTLAES-SDVAQHPAVSVAGLEG--DGSALPLFDLG 236 PL P TL P ++ +S SD + + E + + LP D Sbjct: 135 ---PLNCTMEPA--------TLSPKSMRDSASDQETSWELQMFKTENVPESTTLPAVD-N 182 Query: 237 SDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS 270 ++L +A PL DD D+S++ D+ Sbjct: 183 NNLFDAVASPLADPLCDDIAGNSLPFDNSIDLDN 216 >sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabidopsis thaliana GN=HY5 PE=1 SV=1 Length = 168 Score = 170 (64.9 bits), Expect = 3.4e-12, P = 3.4e-12 Identities = 46/146 (31%), Positives = 69/146 (47%) Query: 10 SSVDSLPATPASEVPVLTVSP---ADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP 66 SS+ S +S P L + +D + E +E + + GQE Sbjct: 12 SSLPSSSERSSSSAPHLEIKEGIESDEEIRRVPEFGGEAVGKETSGRESGSATGQERTQA 71 Query: 67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLL 126 RKR +T EKE +R++R+LRNR +AQ +RERK+ + +LEN +E +N L Sbjct: 72 TVGESQRKRGRTPAEKENKRLKRLLRNRVSAQQARERKKAYLSELENRVKDLENKNSELE 131 Query: 127 QRLSQMEAENNRLSQQLAQLAAEVRG 152 +RLS ++ EN L L RG Sbjct: 132 ERLSTLQNENQMLRHILKNTTGNKRG 157 >sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanum lycopersicum GN=HY5 PE=2 SV=1 Length = 158 Score = 140 (54.3 bits), Expect = 7.0e-09, P = 7.0e-09 Identities = 35/95 (36%), Positives = 53/95 (55%) Query: 60 GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME 119 GQ P T RKR ++ +KE +R++R+LRNR +AQ +RERK+ + LE ++E Sbjct: 66 GQAQPSAGTQ---RKRGRSPADKENKRLKRLLRNRVSAQQARERKKAYLIDLEARVKELE 122 Query: 120 QQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154 +N L +RLS ++ EN L L A + R Sbjct: 123 TKNAELEERLSTLQNENQMLRHILKNTTAGAQEGR 157 >sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos taurus GN=XBP1 PE=2 SV=1 Length = 261 Score = 150 (57.9 bits), Expect = 3.2e-08, P = 3.2e-08 Identities = 53/160 (33%), Positives = 81/160 (50%) Query: 60 GQELPVPK--TNLPP--RKRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE 114 GQ+ P+ + +PP RKR + T E++ + R L+NR AAQT+R+RK+ M +LE + Sbjct: 42 GQQGASPEGASGVPPQARKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQ 101 Query: 115 KIQMEQQNQFLL---QRLSQ----MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS 167 + +E++NQ LL Q L + + EN L Q+L + A V A T G+ A Sbjct: 102 VVDLEEENQKLLLENQLLREKTHGLVVENQELRQRLG-MDALVTEEEAETKGNGAGLVAG 160 Query: 168 PTLTPTLFKQERDELPLERIPFPTPSLSDYSP-TLKPSTL 206 + L R PL+++ L + SP TL TL Sbjct: 161 SAESAAL----RLRAPLQQVQAQLSPLQNISPWTLMALTL 196 >sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Homo sapiens GN=XBP1 PE=1 SV=2 Length = 261 Score = 150 (57.9 bits), Expect = 3.2e-08, P = 3.2e-08 Identities = 55/186 (29%), Positives = 92/186 (49%) Query: 16 PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR 75 PA +V +L+ PA + A + P ++ + + S G +P+ RKR Sbjct: 10 PADGTPKVLLLSGQPASAAGAPAGQALPLMVPAQRGASPEAASGG----LPQA----RKR 61 Query: 76 AK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLL---QRLSQ 131 + T E++ + R L+NR AAQT+R+RK+ M +LE + + +E++NQ LL Q L + Sbjct: 62 QRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQKLLLENQLLRE 121 Query: 132 ----MEAENNRLSQQL------AQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDE 181 + EN L Q+L A+ AE +G+ P+ GS +A+ L L + + Sbjct: 122 KTHGLVVENQELRQRLGMDALVAEEEAEAKGNEVR-PVAGSAESAALRLRAPLQQVQAQL 180 Query: 182 LPLERI 187 PL+ I Sbjct: 181 SPLQNI 186 >sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Danio rerio GN=creb3l2 PE=2 SV=1 Length = 519 Score = 156 (60.0 bits), Expect = 3.7e-08, P = 3.7e-08 Identities = 51/156 (32%), Positives = 78/156 (50%) Query: 4 DMEKTMSSVDSL-PATPASEVPVLTVSP-ADTSLNSADVKTQEVKPEEKKPA-----KKR 56 D E + S V PA+P VL V+P A +SL+S+ + T K + P +KR Sbjct: 210 DSEGSQSPVHPCAPASPTQTPAVLKVAPRAPSSLSSSPLLTAPHKLQGSGPLLLTEEEKR 269 Query: 57 KSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKI 116 + PVP T LP K +EK ++I R ++N+ +AQ SR +K+ ++ LE + Sbjct: 270 TLIAEGYPVP-TKLPLSKA----EEKALKKIRRKIKNKISAQESRRKKKEYVDALEKKVE 324 Query: 117 QMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG 152 +N L +++ +E N L QQL L A V G Sbjct: 325 TCSNENHELRRKVENLECTNKSLLQQLHSLQAVVAG 360 >sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=Arabidopsis thaliana GN=HYH PE=1 SV=1 Length = 149 Score = 127 (49.8 bits), Expect = 1.9e-07, P = 1.9e-07 Identities = 25/71 (35%), Positives = 45/71 (63%) Query: 73 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132 R+R + +KE R ++R+LRNR +AQ +RERK++ + LE+ +++ N L +++S + Sbjct: 68 RRRGRNPVDKEYRSLKRLLRNRVSAQQARERKKVYVSDLESRANELQNNNDQLEEKISTL 127 Query: 133 EAENNRLSQQL 143 EN L + L Sbjct: 128 TNENTMLRKML 138 >sp|A3LYI0|NST1_PICST Stress response protein NST1 OS=Pichia stipitis GN=NST1 PE=3 SV=2 Length = 1234 Score = 148 (57.2 bits), Expect = 9.6e-07, P = 9.6e-07 Identities = 57/195 (29%), Positives = 95/195 (48%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100 + +E+K +E++ KK ++ ++ K L ++ K E+E++++ E+ + Q Sbjct: 727 RIEELKRKEEEHKKKVEAQQKKEEEAK-KLKEERKKKAEEERKKKEEEKRQKELLKKQKE 785 Query: 101 RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP 160 ER+RL++E ENE+++ EQQ L +++ N+L + AQL AE+ N Sbjct: 786 EERERLKLEAEENERLEKEQQE------LQELQESQNQLELESAQLPAEL-AEEINA--- 835 Query: 161 GSPATASPTLTPTLFKQERDELPLERIPFPT---PSLSDYSPTLKPSTLAESSDVAQ--- 214 SP + SPT L +Q P + PT P + ++P P A SS V Sbjct: 836 -SPDSFSPTKNH-LLEQLYQARP-SSVSGPTTISPPIQ-FTPEAVPPVAAVSSVVPSVVP 891 Query: 215 -HPAVSVAGLEGDGS 228 PA+S A L G GS Sbjct: 892 ISPALSGAILNGTGS 906 Score = 102 (41.0 bits), Expect = 0.11, P = 0.10 Identities = 43/168 (25%), Positives = 78/168 (46%) Query: 40 VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT 99 V+ Q+ K EE K K+ + E K R++ + +KE+ R ER L+ A Sbjct: 742 VEAQQKKEEEAKKLKEERKKKAEEERKKKEEEKRQKELLKKQKEEER-ER-LKLEAEENE 799 Query: 100 SRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEVRGSRANTP 158 E+++ E+++L+ + Q+E ++ L L++ + A + S L ++ +R ++ Sbjct: 800 RLEKEQQELQELQESQNQLELESAQLPAELAEEINASPDSFSPTKNHLLEQLYQARPSS- 858 Query: 159 MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTL 206 + G P T SP P F E P+ + PS+ SP L + L Sbjct: 859 VSG-PTTISP---PIQFTPEAVP-PVAAVSSVVPSVVPISPALSGAIL 901 >sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Homo sapiens GN=CREB3L2 PE=1 SV=2 Length = 520 Score = 136 (52.9 bits), Expect = 6.4e-06, P = 6.4e-06 Identities = 44/146 (30%), Positives = 70/146 (47%) Query: 14 SLPAT--PASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLP 71 SLP T P+ P + + + L +A K Q P +KR + P+P T LP Sbjct: 228 SLPQTHSPSRAAPRAPSALSSSPLLTAPHKLQGSGPLVLTEEEKRTLIAEGYPIP-TKLP 286 Query: 72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131 K +EK ++I R ++N+ +AQ SR +K+ M+ LE + +N L +++ Sbjct: 287 LSK----SEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEV 342 Query: 132 MEAENNRLSQQLAQLAAEVRGSRANT 157 +E N L QQL +L V G + T Sbjct: 343 LENTNRTLLQQLQKLQTLVMGKVSRT 368 >sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Pongo abelii GN=CREB3L2 PE=2 SV=1 Length = 520 Score = 136 (52.9 bits), Expect = 6.4e-06, P = 6.4e-06 Identities = 44/146 (30%), Positives = 70/146 (47%) Query: 14 SLPAT--PASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLP 71 SLP T P+ P + + + L +A K Q P +KR + P+P T LP Sbjct: 228 SLPQTHSPSRAAPRAPSALSSSPLLTAPHKLQGSGPLVLTEEEKRTLIAEGYPIP-TKLP 286 Query: 72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131 K +EK ++I R ++N+ +AQ SR +K+ M+ LE + +N L +++ Sbjct: 287 LTK----SEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEV 342 Query: 132 MEAENNRLSQQLAQLAAEVRGSRANT 157 +E N L QQL +L V G + T Sbjct: 343 LENTNRTLLQQLQKLQTLVMGKVSRT 368 >sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Mus musculus GN=Creb3l2 PE=2 SV=1 Length = 521 Score = 136 (52.9 bits), Expect = 6.5e-06, P = 6.5e-06 Identities = 71/291 (24%), Positives = 120/291 (41%) Query: 18 TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK 77 +PA +P + + + L +A K Q P +KR + P+P T LP K Sbjct: 234 SPARAMPRGPSALSTSPLLTAPHKLQGSGPLVLTEEEKRTLVAEGYPIP-TKLPLTK--- 289 Query: 78 TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN 137 +EK ++I R ++N+ +AQ SR +K+ M+ LE + +N L +++ +E N Sbjct: 290 -SEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNR 348 Query: 138 RLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTL-FKQERDELPLERIPFPTPS--- 193 L QQL +L V G + T T + + L F P+P+ + Sbjct: 349 TLLQQLQKLQTLVMGKVSRTCKLAGTQTGTCLMVVVLCFAVAFGSFFQGYGPYPSATKMA 408 Query: 194 LSDYSPTLKPST--LAESSDVA---QHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVA 248 L P +P T + S ++ +H + + L +D GS L S+ A Sbjct: 409 LPSQHPLSEPYTASVVRSRNLLIYEEHAPLEESSSPASAGELGGWDRGSSLLRASSGLEA 468 Query: 249 APLSDDDFNRLFHGDSSVEPDSSV-FEDGLAFDVLEGGD-LSAFPFDSMVN 297 P D + L ++S+E + + L LEG + L + VN Sbjct: 469 LPEVDLP-HFLISNETSLEKSVLLELQQHLVSSKLEGNETLKVVELERRVN 518 >sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-binding protein 3 OS=Mus musculus GN=Creb3 PE=2 SV=2 Length = 404 Score = 132 (51.5 bits), Expect = 1.2e-05, P = 1.2e-05 Identities = 54/194 (27%), Positives = 90/194 (46%) Query: 26 LTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQR 85 +T P + ++ + EEKK +K + L +P T LP K +E+ + Sbjct: 138 VTPLPGEERAAEQEMSRLILTEEEKKLLEK-----EGLTLPST-LPLTK----VEEQVLK 187 Query: 86 RIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQ 145 R+ R +RN+ AAQ SR++K++ + LE+ ++ QN+ L ++ ++E +N L QL + Sbjct: 188 RVRRKIRNKRAAQESRKKKKVYVVGLESRVLKYTAQNRELQNKVQRLEEQNLSLLDQLRK 247 Query: 146 LAAEVRGSRANTPMPGSPATASPT------LTPTLFKQE-RDELPLERIPF-----PTPS 193 L A V AN GS L P ++ + R +P E + PS Sbjct: 248 LQAMVI-EIANKTSSGSTCVLVLVFSFCLLLVPAMYSSDARGSVPAEYVVLHRKLRALPS 306 Query: 194 LSDYSPTLKPSTLA 207 D+ P KPS L+ Sbjct: 307 EDDHQP--KPSALS 318 >sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Xenopus laevis GN=creb3l2 PE=2 SV=1 Length = 525 Score = 133 (51.9 bits), Expect = 1.4e-05, P = 1.4e-05 Identities = 45/156 (28%), Positives = 77/156 (49%) Query: 4 DMEKTMSSVDSLP-ATPA-SEVPVLTVSPADTSLNSADVKTQEVKPEEKKPA-----KKR 56 D E S SLP ++P S+ + + ++L+++ + T K + P +KR Sbjct: 218 DSEGGQSPTRSLPPSSPVQSQAGGKMAARSPSALSNSPLLTAPHKLQGSGPLMLTEEEKR 277 Query: 57 KSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKI 116 + P+P T LP K +EK ++I R ++N+ +AQ SR +K+ M+ LE Sbjct: 278 TLVAEGYPIP-TKLPLTKA----EEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKRVE 332 Query: 117 QMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG 152 +N L +++ +E+ N L QQL +L A V G Sbjct: 333 NSSSENSELRKKVEVLESTNRTLLQQLQRLQAMVTG 368 >sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element-binding protein 3-like protein 1 OS=Rattus norvegicus GN=Creb3l1 PE=2 SV=1 Length = 520 Score = 131 (51.2 bits), Expect = 2.3e-05, P = 2.3e-05 Identities = 68/222 (30%), Positives = 102/222 (45%) Query: 14 SLPATPASEV-PVLTVSPA-DTS-LNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTN 69 SLP P+S V P+ S A TS L +A K Q P +KR + P+P T Sbjct: 223 SLP--PSSPVRPMARSSTAISTSPLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TK 279 Query: 70 LPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 LP K +EK +R+ R ++N+ +AQ SR +K+ +E LE + +N L +++ Sbjct: 280 LPLTKA----EEKALKRVRRKIKNKISAQESRRKKKEYVECLEKKVETYTSENNELWKKV 335 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF 189 +E N L QQL +L V S+ + P A+ T T + L L + Sbjct: 336 ETLETANRTLLQQLQKLQTLVT-SKISRPYK---MAATQTGTCLMVAALCFVLVLGSLAP 391 Query: 190 PTPSLSDYSPTLKPSTLAESSDVA--QHPAVSVAGLE-GDGS 228 P+ S S T+K +A S A Q P+ S+ + G GS Sbjct: 392 CLPAFSSGSKTVKEDPVAADSVYAASQMPSRSLLFYDDGAGS 433 >sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper transcription factor F OS=Dictyostelium discoideum GN=bzpF PE=3 SV=1 Length = 631 Score = 132 (51.5 bits), Expect = 2.4e-05, P = 2.4e-05 Identities = 57/233 (24%), Positives = 101/233 (43%) Query: 46 KPEEKKPAKKRKSWGQELPVPKTN----LPPRKRA--KTEDEKEQRRIERVLRNRAAAQT 99 K EE K KKRK + PV N L P ++E+ Q+R R+++NR AAQ Sbjct: 363 KKEEDKSIKKRK-FISSTPVKGENGGTTLIPTTDGGFNMDEERHQKRQRRLVKNREAAQL 421 Query: 100 SRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA-NTP 158 R+R++ ++ LE + + N R+ + +EN + +QL L V + + + P Sbjct: 422 FRQRQKAYIQDLEKKVSDLTGTNSEFRARVELLNSENKLIREQLLYLRNFVTQAVSFSFP 481 Query: 159 MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV 218 GS T SP+ F L P P L P ++ ++ A + Sbjct: 482 KGGSNGTNSPSGVADQFLNSILPPGLNS-PLPQGILPAGMNLQNPMIMSAIAEAASKNST 540 Query: 219 SVAGLEGDGSALPLFDLGSDLKHHSTDDVA-APLSDDDFNRLFHGDSSVEPDS 270 ++G+ P+ S L +S ++ PL++++ N + +++ P S Sbjct: 541 FRQNIQGNLLGTPIPSPQSSLTSNSGNNSPNKPLNNNNNNNNINNNNNNNPSS 593 >sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive element-binding protein 3-like protein 1 OS=Mus musculus GN=Creb3l1 PE=2 SV=2 Length = 519 Score = 130 (50.8 bits), Expect = 3.0e-05, P = 3.0e-05 Identities = 68/222 (30%), Positives = 102/222 (45%) Query: 14 SLPATPASEV-PVLTVSPA-DTS-LNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTN 69 SLP P+S V P+ S A TS L +A K Q P +KR + P+P T Sbjct: 224 SLP--PSSPVRPMARSSTAISTSPLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TK 280 Query: 70 LPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 LP K +EK +R+ R ++N+ +AQ SR +K+ +E LE + +N L +++ Sbjct: 281 LPLTKA----EEKALKRVRRKIKNKISAQESRRKKKEYVECLEKKVETYTSENNELWKKV 336 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF 189 +E N L QQL +L V S+ + P A+ T T + L L + Sbjct: 337 ETLETANRTLLQQLQKLQTLVT-SKISRPYK---MAATQTGTCLMVAALCFVLVLGSLVP 392 Query: 190 PTPSLSDYSPTLKPSTLAESSDVA--QHPAVSVAGLE-GDGS 228 P+ S S T+K +A S A Q P+ S+ + G GS Sbjct: 393 CLPAFSSGSMTVKEDPIAADSVYAASQMPSRSLLFYDDGAGS 434 >sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcriptional factor ATF-like 3 OS=Homo sapiens GN=BATF3 PE=1 SV=1 Length = 127 Score = 104 (41.7 bits), Expect = 6.0e-05, P = 6.0e-05 Identities = 22/77 (28%), Positives = 42/77 (54%) Query: 69 NLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQR 128 N P + + E + R++ R +NR AAQ SR+++ + +KL E +EQ+N L + Sbjct: 21 NQPQPQPQQQSPEDDDRKVRRREKNRVAAQRSRKKQTQKADKLHEEYESLEQENTMLRRE 80 Query: 129 LSQMEAENNRLSQQLAQ 145 + ++ E L++ L + Sbjct: 81 IGKLTEELKHLTEALKE 97 >sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcriptional factor ATF-like 3 OS=Mus musculus GN=Batf3 PE=2 SV=1 Length = 118 Score = 104 (41.7 bits), Expect = 6.0e-05, P = 6.0e-05 Identities = 21/63 (33%), Positives = 39/63 (61%) Query: 83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 + R++ R +NR AAQ SR+++ + +KL E +EQ+N L + +S+++ E LS+ Sbjct: 28 DDRKVRRREKNRVAAQRSRKKQTQKADKLHEEHESLEQENSVLRREISKLKEELRHLSEV 87 Query: 143 LAQ 145 L + Sbjct: 88 LKE 90 >sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive element-binding protein 3-like protein 1 OS=Homo sapiens GN=CREB3L1 PE=1 SV=1 Length = 519 Score = 127 (49.8 bits), Expect = 6.4e-05, P = 6.4e-05 Identities = 66/223 (29%), Positives = 101/223 (45%) Query: 14 SLPATPASEV-PVLTVSPA-DTS-LNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTN 69 SLP P+S V P+ S A TS L +A K Q P +KR + P+P T Sbjct: 224 SLP--PSSPVRPMARSSTAISTSPLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TK 280 Query: 70 LPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 LP K +EK +R+ R ++N+ +AQ SR +K+ +E LE + +N L +++ Sbjct: 281 LPLTKA----EEKALKRVRRKIKNKISAQESRRKKKEYVECLEKKVETFTSENNELWKKV 336 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF 189 +E N L QQL +L V ++ + P A+ T T + L L + Sbjct: 337 ETLENANRTLLQQLQKLQTLVT-NKISRPYK---MAATQTGTCLMVAALCFVLVLGSLVP 392 Query: 190 PTPSLSDYSPTLKPSTLAESS--DVAQHPAVSVAGLEGDGSAL 230 P S S T+K LA +Q P+ S+ + DG+ L Sbjct: 393 CLPEFSSGSQTVKEDPLAADGVYTASQMPSRSLLFYD-DGAGL 434 >sp|O88778|BSN_RAT Protein bassoon OS=Rattus norvegicus GN=Bsn PE=1 SV=3 Length = 3938 Score = 136 (52.9 bits), Expect = 7.2e-05, P = 7.2e-05 Identities = 59/227 (25%), Positives = 102/227 (44%) Query: 15 LPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRK 74 LPA A E P+ T +P + A V P +KPA + G V + ++ Sbjct: 2294 LPAGGAREEPLSTTAPPAV-IKEAPVAQAPAPPPGQKPAGDAAA-GSGSGVLGRPVMEKE 2351 Query: 75 RAKTEDE--KEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME---QQNQFLLQR- 128 A ED K+Q ++ ++ R R + R+ RL+ E+LE E+++++ ++ Q L+QR Sbjct: 2352 EASQEDRQRKQQEQLLQLERERVELEKLRQL-RLQ-EELERERVELQRHREEEQLLVQRE 2409 Query: 129 LSQMEA-ENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERI 187 L +++ +++ L QQ + A+ R L L +Q ++ ++ Sbjct: 2410 LQELQTIKHHVLQQQQEERQAQFALQREQLAQQRLQLEQIQQLQQQLQQQLEEQKQRQKA 2469 Query: 188 PFP-TPSLSDYSPTLKPSTLAESSDV---AQHPA-VSVAGLEGDGSA 229 PFP T P + LA++ H A ++VAG EG G A Sbjct: 2470 PFPATCEAPSRGPPPAATELAQNGQYWPPLTHTAFIAVAGTEGPGQA 2516 Score = 111 (44.1 bits), Expect = 0.039, P = 0.039 Identities = 47/191 (24%), Positives = 87/191 (45%) Query: 12 VDSLPATPASEVPVLTVSPADTS--LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTN 69 V PA P + P + S L ++ +E E+++ +K++ +L + Sbjct: 2318 VAQAPAPPPGQKPAGDAAAGSGSGVLGRPVMEKEEASQEDRQ--RKQQEQLLQLERERVE 2375 Query: 70 LPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ---QNQFLL 126 L ++ + ++E E+ R+E + R+R Q +R+ E++ +++ +Q +Q Q QF L Sbjct: 2376 LEKLRQLRLQEELERERVE-LQRHREEEQLLVQRELQELQTIKHHVLQQQQEERQAQFAL 2434 Query: 127 QR--LSQ--MEAEN-NRLSQQLAQLAAEVRGSRANTPMPGS---PATASPTLTPTLFKQE 178 QR L+Q ++ E +L QQL Q E + R P P + P+ P L + Sbjct: 2435 QREQLAQQRLQLEQIQQLQQQLQQQLEEQK-QRQKAPFPATCEAPSRGPPPAATELAQNG 2493 Query: 179 RDELPLERIPF 189 + PL F Sbjct: 2494 QYWPPLTHTAF 2504 >sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Rattus norvegicus GN=Creb3l2 PE=2 SV=1 Length = 521 Score = 125 (49.1 bits), Expect = 0.00011, P = 0.00011 Identities = 41/130 (31%), Positives = 63/130 (48%) Query: 29 SPADTS-LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRI 87 S TS L +A K Q P +KR + P+P T LP K +EK ++I Sbjct: 244 SALSTSPLLTAPHKLQGSGPLVLTEEEKRTLIAEGYPIP-TKLPLTK----SEEKALKKI 298 Query: 88 ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA 147 R ++N+ +AQ SR +K+ M+ LE + +N L +++ +E N L QQL +L Sbjct: 299 RRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQ 358 Query: 148 AEVRGSRANT 157 V G + T Sbjct: 359 TLVMGKVSRT 368 >sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kinase 7 OS=Mus musculus GN=Mapk7 PE=1 SV=1 Length = 806 Score = 127 (49.8 bits), Expect = 0.00012, P = 0.00012 Identities = 71/258 (27%), Positives = 109/258 (42%) Query: 3 CDMEKTMSSVDSLP--ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR---K 57 C ME S +LP + PA + LT+ PA + A K + + K A K K Sbjct: 429 CAME---SPPPALPPCSDPAPDTVDLTLQPAPPASELAPPKREGAISDNTKAALKAALLK 485 Query: 58 SWGQEL---PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE 114 S L P P ++ T E+++ R E+ R + A+ RE++R E E+ E Sbjct: 486 SLRSRLRDGPSAPLEAPEPRKPVTAQERQREREEKRRRRQERAK-EREKRRQERERKERG 544 Query: 115 KIQMEQQNQFLLQRLSQMEAENNR-LSQQLAQLAAEVRGSRANTPMPG-SPATASPTLTP 172 + + L L + ++N+R L ++ ++A + A P P +P++A PT TP Sbjct: 545 AGTLGGPSTDPLAGL--VLSDNDRSLLERWTRMARPPAPAPAPAPAPAPAPSSAQPTSTP 602 Query: 173 T-LFKQERDEL-PLERIPFPT--PSLSDYSPTLKPS--------TLAESSDVAQHPAVSV 220 T Q L P IP P P P +P+ T +S +A V Sbjct: 603 TGPVSQSTGPLQPAGSIPGPASQPVCPPPGPVPQPAGPIPAPLQTAPSTSLLASQSLVPP 662 Query: 221 AGLEGDGS--ALPLFDLG 236 +GL G G+ LP F G Sbjct: 663 SGLPGSGAPEVLPYFPSG 680 >sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Xenopus tropicalis GN=creb3l4 PE=2 SV=1 Length = 428 Score = 123 (48.4 bits), Expect = 0.00013, P = 0.00013 Identities = 36/129 (27%), Positives = 63/129 (48%) Query: 24 PVLTVSPADTSLNSAD-VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK 82 PV +P L AD + + PE ++++ QE NLP K +E+ Sbjct: 160 PVCKSTPLPIRLTPADLIAVDALYPELHLTEEEKRLLSQEGVALPNNLPLTKA----EER 215 Query: 83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 +++ R +RN+ +AQ SR RK+ ++ LE+ QNQ L +++ ++E N L Q Sbjct: 216 ILKKVRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSSQNQELHKKVVELEKHNISLITQ 275 Query: 143 LAQLAAEVR 151 L +L ++ Sbjct: 276 LRKLQTLIK 284 >sp|Q16520|BATF_HUMAN Basic leucine zipper transcriptional factor ATF-like OS=Homo sapiens GN=BATF PE=1 SV=1 Length = 125 Score = 100 (40.3 bits), Expect = 0.00016, P = 0.00016 Identities = 28/90 (31%), Positives = 45/90 (50%) Query: 71 PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLS 130 PP K+ ++D RR++R +NR AAQ SR+R+ + + L E +E+QN L + + Sbjct: 17 PPGKQDSSDDV---RRVQRREKNRIAAQKSRQRQTQKADTLHLESEDLEKQNAALRKEIK 73 Query: 131 QMEAENNRLSQQLAQLAAEVRGSRANTPMP 160 Q+ E + L A+TP P Sbjct: 74 QLTEELKYFTSVLNSHEPLCSVLAASTPSP 103 >sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Mus musculus GN=Creb3l4 PE=1 SV=1 Length = 370 Score = 121 (47.7 bits), Expect = 0.00017, P = 0.00017 Identities = 41/138 (29%), Positives = 68/138 (49%) Query: 18 TPASEVP-VLTVS--PADTSLNSAD-VKTQEVKPEEKKPAKKRKSW-----GQELPVPKT 68 TPA VP TVS P+D+ + V T+ P P+ + + Q L Sbjct: 119 TPALMVPDACTVSGLPSDSHRHILPRVSTRAPAPPAAMPSCQHHLFLTDEEKQLLAQEGI 178 Query: 69 NLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQR 128 LP +E+ ++I R +RN+ +AQ SR RK+ ++ LE+ +QNQ L ++ Sbjct: 179 TLPSHLPLTKAEERILKKIRRKIRNKQSAQDSRRRKKEYLDGLESRVAACSEQNQKLQRK 238 Query: 129 LSQMEAENNRLSQQLAQL 146 + ++E +N L +Q+ QL Sbjct: 239 VQELERQNIFLMEQVRQL 256 Score = 92 (37.4 bits), Expect = 0.30, P = 0.26 Identities = 27/90 (30%), Positives = 49/90 (54%) Query: 70 LPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE---------NEKIQ--- 117 LP +E+ ++I R +RN+ +AQ SR RK+ ++ LE N+K+Q Sbjct: 180 LPSHLPLTKAEERILKKIRRKIRNKQSAQDSRRRKKEYLDGLESRVAACSEQNQKLQRKV 239 Query: 118 --MEQQNQFLLQRLSQMEAENNRLSQQLAQ 145 +E+QN FL++++ Q++ + S + AQ Sbjct: 240 QELERQNIFLMEQVRQLQKLTAQTSSRAAQ 269 >sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF2 OS=Petroselinum crispum GN=CPRF2 PE=2 SV=2 Length = 401 Score = 121 (47.7 bits), Expect = 0.00020, P = 0.00020 Identities = 30/103 (29%), Positives = 50/103 (48%) Query: 80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRL 139 D + +R+ R+L NR +A+ SR RK+ M +LE + Q+ +N LL+RL+ + N Sbjct: 195 DPSDAKRVRRMLSNRESARRSRRRKQAHMTELETQVSQLRVENSSLLKRLTDISQRYNDA 254 Query: 140 SQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDEL 182 + L A++ RA M L P +F+ E+ Sbjct: 255 AVDNRVLKADIETMRAKVKMAEETVKRVTGLNP-MFQSMSSEI 296 >sp|P97876|BATF3_RAT Basic leucine zipper transcriptional factor ATF-like 3 OS=Rattus norvegicus GN=Batf3 PE=1 SV=1 Length = 133 Score = 99 (39.9 bits), Expect = 0.00021, P = 0.00021 Identities = 19/63 (30%), Positives = 39/63 (61%) Query: 83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 + R++ R +NR AAQ SR+++ + +KL E +EQ+N L + +++++ E L++ Sbjct: 28 DDRKVRRREKNRVAAQRSRKKQTQKSDKLHEEHESLEQENSVLRREIAKLKEELRHLTEA 87 Query: 143 LAQ 145 L + Sbjct: 88 LKE 90 >sp|Q5B3C8|NST1_EMENI Stress response protein nst1 OS=Emericella nidulans GN=nst1 PE=3 SV=1 Length = 1125 Score = 125 (49.1 bits), Expect = 0.00029, P = 0.00029 Identities = 60/227 (26%), Positives = 99/227 (43%) Query: 31 ADTSLNSADVKT-QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER 89 A + A K QE K EE++ K+ + +E + +RA+ E EK +R E Sbjct: 515 AQKAAEEAAAKAEQERKLEEQRKKKEEQRKKREA---ERKAQEEERARKEAEKHKRLREE 571 Query: 90 VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA---QL 146 R A + RE+K E ++ E K + E++ + L ++ ++ E E +Q + Sbjct: 572 RERQEEAERRQREQKEQEKKRREEAK-RKEREERELREQKAKQERERKAQDEQSRRERER 630 Query: 147 AAEVRGSRANTPMPGSPATASP-TLTPTLFKQERDELPLE-RIPFPTPSLSDYSPTLKPS 204 A+ + RA P SP + P + TP + K P + R P S S SP + S Sbjct: 631 VAQEQAKRAPNLQPVSPVSPPPESATPVVSKAPT---PAKGRRPSQQGSHSS-SPRSQ-S 685 Query: 205 TLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPL 251 AE+S V+ A + GS++P + G + H +PL Sbjct: 686 ASAEASQVSPRSAPLS---QSSGSSIPKYGSGHPILHPHPGAPMSPL 729 >sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Mus musculus GN=Creb3l3 PE=2 SV=1 Length = 479 Score = 115 (45.5 bits), Expect = 0.00030, Sum P(2) = 0.00030 Identities = 38/115 (33%), Positives = 59/115 (51%) Query: 48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107 +EKK K G LP T LP K +E+ ++I R +RN+ +AQ SR++K+ Sbjct: 214 DEKKLLAKE---GVTLP---TQLPLTKY----EERVLKKIRRKIRNKQSAQESRKKKKEY 263 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS 162 ++ LEN QNQ L +++ +E +N L +QL L A V S + G+ Sbjct: 264 IDGLENRMSACTAQNQELQRKVLHLEKQNLSLLEQLKHLQALVVQSTSKPAHAGT 318 Score = 47 (21.6 bits), Expect = 0.00030, Sum P(2) = 0.00030 Identities = 12/42 (28%), Positives = 19/42 (45%) Query: 15 LPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR 56 LP+TP E P V + +++ T + PEE + R Sbjct: 130 LPSTPCPEPPRTQVQESSVAIDLDMWSTDTLYPEEPAGSPSR 171 >sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Bos taurus GN=CREB3L3 PE=2 SV=1 Length = 456 Score = 120 (47.3 bits), Expect = 0.00032, P = 0.00032 Identities = 63/240 (26%), Positives = 102/240 (42%) Query: 48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107 +EKK K G LP T LP K +E+ ++I R +RN+ +AQ SR++K+ Sbjct: 213 DEKKLLAKE---GITLP---TQLPLTKY----EERMLKKIRRKIRNKQSAQESRKKKKEY 262 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS----- 162 ++ LE QNQ L +++ +E +N L +QL +L A V S + + G+ Sbjct: 263 IDGLETRMSACTAQNQELQRKVLHLEKQNLSLLEQLKKLQAIVVQSTSKSAQTGTCIAVL 322 Query: 163 ----PATASPTLTPTLFKQERDELPLERIP---FPTPSLSDYSPTLKPSTLAESSDVAQH 215 P+++P F R E P + P F +D + + P T A S+ A Sbjct: 323 LFSFALIVLPSISP--FASNRAESPGDFAPVRVFSRTLHNDAASRVAPDT-APGSE-APG 378 Query: 216 PAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFED 275 P + L+ P + + T + D D + L G+S E D + D Sbjct: 379 PGPNTGALQERSPGSP----PGEWESQDTRALDNSTEDLDNSTLVQGNSVKELDQATLLD 434 >sp|Q6NW59|ATF4_DANRE Cyclic AMP-dependent transcription factor ATF-4 OS=Danio rerio GN=atf4 PE=2 SV=1 Length = 339 Score = 118 (46.6 bits), Expect = 0.00032, P = 0.00032 Identities = 31/138 (22%), Positives = 69/138 (50%) Query: 18 TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK 77 TP E + S +D+ ++ V + +P+ + K + + P L R + Sbjct: 204 TPKEEQNISDCSDSDSGIS---VSGSPAHQSDLEPSSRAKPYSRPDPEASPALKGRVKTS 260 Query: 78 TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN 137 + K +++++++ +N+ AA R++KR+E E L +E ++E++N+ L ++ + E Sbjct: 261 SGAPKVEKKLKKMEQNKTAATRYRQKKRVEQESLNSECSELEKKNRELSEKADSLSREIQ 320 Query: 138 RLSQQLAQL-AAEVRGSR 154 L L ++ A+ R S+ Sbjct: 321 YLRDLLEEMRTAKQRKSK 338 >sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Rattus norvegicus GN=Xbp1 PE=2 SV=1 Length = 267 Score = 116 (45.9 bits), Expect = 0.00032, P = 0.00032 Identities = 26/64 (40%), Positives = 42/64 (65%) Query: 73 RKRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131 RKR + T E++ + R L+NR AAQT+R+RK+ M +LE + + +E++NQ LQ +Q Sbjct: 52 RKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQ-KLQLENQ 110 Query: 132 MEAE 135 + E Sbjct: 111 LLRE 114 >sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcription factor ATF-4 OS=Mus musculus GN=Atf4 PE=1 SV=1 Length = 349 Score = 118 (46.6 bits), Expect = 0.00034, P = 0.00034 Identities = 42/148 (28%), Positives = 69/148 (46%) Query: 18 TPASEVPVLTVSPADTSLNSAD--VKTQEVKPEE-KKPAKKRKSWGQELPVPKTNLPP-- 72 TP+ + +SP ++ L S T P+ P R S P PK PP Sbjct: 212 TPSDNDSGICMSP-ESYLGSPQHSPSTSRAPPDNLPSPGGSRGS-----PRPKPYDPPGV 265 Query: 73 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132 AK + EK ++++++ +N+ AA R++KR E E L E ++E++N+ L ++ + Sbjct: 266 SLTAKVKTEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKNEALKEKADSL 325 Query: 133 EAENNRLSQQLAQLAAEVRGSRANTPMP 160 E Q L L EVR +R +P Sbjct: 326 AKE----IQYLKDLIEEVRKARGQKRVP 349 >sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcription factor ATF-4 OS=Homo sapiens GN=ATF4 PE=1 SV=3 Length = 351 Score = 117 (46.2 bits), Expect = 0.00044, P = 0.00044 Identities = 31/98 (31%), Positives = 53/98 (54%) Query: 66 PKTNLPPRKR---AKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN 122 PK PP ++ AK + EK ++++++ +N+ AA R++KR E E L E ++E++N Sbjct: 258 PKPYDPPGEKMVAAKVKGEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKN 317 Query: 123 QFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP 160 + L +R + E Q L L EVR +R +P Sbjct: 318 EALKERADSLAKE----IQYLKDLIEEVRKARGKKRVP 351 >sp|O35284|BATF_MOUSE Basic leucine zipper transcriptional factor ATF-like OS=Mus musculus GN=Batf PE=2 SV=1 Length = 125 Score = 96 (38.9 bits), Expect = 0.00045, P = 0.00044 Identities = 26/90 (28%), Positives = 45/90 (50%) Query: 71 PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLS 130 PP K+ ++D R+++R +NR AAQ SR+R+ + + L E +E+QN L + + Sbjct: 17 PPGKQDSSDDV---RKVQRREKNRIAAQKSRQRQTQKADTLHLESEDLEKQNAALRKEIK 73 Query: 131 QMEAENNRLSQQLAQLAAEVRGSRANTPMP 160 Q+ E + L+ + TP P Sbjct: 74 QLTEELKYFTSVLSSHEPLCSVLASGTPSP 103 >sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus GN=Fosb PE=2 SV=1 Length = 338 Score = 116 (45.9 bits), Expect = 0.00053, P = 0.00053 Identities = 43/151 (28%), Positives = 65/151 (43%) Query: 72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131 PR+ T +E+E+RR+ R RN+ AA R R+R ++L+ E Q+E++ L +++ Sbjct: 145 PREETLTPEEEEKRRVRRE-RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAE 203 Query: 132 MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPT 191 ++ E RL L + P PG A T K++ L P P Sbjct: 204 LQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRDLPGSTSAKEDGFGWLLP--PPPP 261 Query: 192 PSLSDYSPTLKPSTLAESSDVAQHPAVSVAG 222 P L S P L S + H V V G Sbjct: 262 PPLPFQSSRDAPPNLTAS--LFTHSEVQVLG 290 >sp|Q90888|MAFB_CHICK Transcription factor MafB OS=Gallus gallus GN=MAFB PE=1 SV=1 Length = 311 Score = 115 (45.5 bits), Expect = 0.00059, P = 0.00059 Identities = 36/137 (26%), Positives = 68/137 (49%) Query: 29 SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ-RRI 87 +P+ +S +S ++T + + R S Q + + L R T+DE + ++ Sbjct: 171 TPSTSSSSSQQLQTSHQQHPPSSSVEDRFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQK 230 Query: 88 ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA 147 R L+NR AQ+ R ++ + LENEK Q+ QQ + L Q ++++ E + + +LA Sbjct: 231 RRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVTRLARERDAYKLKCEKLA 290 Query: 148 AE-VRGSRANTPMPGSP 163 + R + + + P SP Sbjct: 291 SNGFREAGSTSDNPSSP 307 >sp|Q90370|MAFB_COTJA Transcription factor MafB OS=Coturnix coturnix japonica GN=MAFB PE=1 SV=1 Length = 311 Score = 115 (45.5 bits), Expect = 0.00059, P = 0.00059 Identities = 36/137 (26%), Positives = 68/137 (49%) Query: 29 SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ-RRI 87 +P+ +S +S ++T + + R S Q + + L R T+DE + ++ Sbjct: 171 TPSTSSSSSQQLQTSHQQHPPSSSVEDRFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQK 230 Query: 88 ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA 147 R L+NR AQ+ R ++ + LENEK Q+ QQ + L Q ++++ E + + +LA Sbjct: 231 RRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVTRLARERDAYKLKCEKLA 290 Query: 148 AE-VRGSRANTPMPGSP 163 + R + + + P SP Sbjct: 291 SNGFREAGSTSDNPSSP 307 >sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mus musculus GN=Xbp1 PE=2 SV=2 Length = 267 Score = 113 (44.8 bits), Expect = 0.00071, P = 0.00071 Identities = 27/79 (34%), Positives = 45/79 (56%) Query: 73 RKRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN-------QF 124 RKR + T E++ + R L+NR AAQT+R+RK+ M +LE + + +E++N Q Sbjct: 52 RKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENHKLQLENQL 111 Query: 125 LLQRLSQMEAENNRLSQQL 143 L ++ + EN L +L Sbjct: 112 LREKTHGLVVENQELRTRL 130 >sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattus norvegicus GN=Fosl2 PE=2 SV=1 Length = 327 Score = 114 (45.2 bits), Expect = 0.00084, P = 0.00084 Identities = 41/158 (25%), Positives = 76/158 (48%) Query: 68 TNLPPRKRAK--TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125 T + R+R + + +E+E+RRI R RN+ AA R R+R EKL+ E ++E++ L Sbjct: 109 TTVGRRRRDEQLSPEEEEKRRIRRE-RNKLAAAKCRNRRRELTEKLQTETEELEEEKSGL 167 Query: 126 LQRLSQMEAENNRLSQQLA------QLAAEVRGSRANTPMPGSPATASPTLTPTLFKQER 179 + +++++ E +L L +++ E R S + + T S + P + KQE Sbjct: 168 QKEIAELQKEKEKLEFMLVAHGPVCKISPEERRSSPTSGVQSLRGTGS-AVGPVVVKQEP 226 Query: 180 DELPLERIPFPTPSLSDYSPT-LKPSTLAESSDVAQHP 216 E E P + + + +KP ++A + P Sbjct: 227 PE---EDSPSSSAGMDKTQRSVIKPISIAGGGFYGEEP 261 >sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Homo sapiens GN=CREB3L3 PE=1 SV=2 Length = 461 Score = 116 (45.9 bits), Expect = 0.00090, P = 0.00089 Identities = 52/180 (28%), Positives = 82/180 (45%) Query: 48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107 +EKK K G LP T LP K +E+ ++I R +RN+ +AQ SR++K+ Sbjct: 218 DEKKLLAKE---GITLP---TQLPLTKY----EERVLKKIRRKIRNKQSAQESRKKKKEY 267 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS 167 ++ LE QNQ L +++ +E +N L +QL +L A V S + + G+ A Sbjct: 268 IDGLETRMSACTAQNQELQRKVLHLEKQNLSLLEQLKKLQAIVVQSTSKSAQTGT-CVAV 326 Query: 168 PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDG 227 L+ L P P T S D++P S + ++ A +V G E G Sbjct: 327 LLLSFALIILPSIS-PFG--PNKTESPGDFAPVRVFSRTLHNDAASRVAADAVPGSEAPG 383 >sp|A4R2R1|NST1_MAGGR Stress response protein NST1 OS=Magnaporthe grisea GN=NST1 PE=3 SV=1 Length = 1319 Score = 121 (47.7 bits), Expect = 0.00097, P = 0.00097 Identities = 41/170 (24%), Positives = 85/170 (50%) Query: 43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK--EQRRIERVLRNRA--AAQ 98 Q K EE+K K+ + +E + +RA+ + E+ EQ R R + + A + Sbjct: 675 QRQKNEERKKKKEAQRKAEEEERQRKEAERLRRAQEQKERQAEQDRKAREAKEKEKKAKE 734 Query: 99 TSRERKRLEMEKLENE-KIQMEQQNQFLLQRLSQMEAENN-RLSQQLAQLAAEVRGSRAN 156 +++R++ E E E + + E+ ++ L++ ++++AE R +Q+ A+ A++ + AN Sbjct: 735 EAKQREKAARELKEREARERKEKADKERLEKEAKIKAEKEAREAQRKAERASQKATTLAN 794 Query: 157 TPMPGSPA---TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKP 203 P+P PA + +P P L + ++ + ++P P+L KP Sbjct: 795 VPVPTGPARRQSQAPNPAPALPQSQQASVASPQLPTAVPALPKLPTPQKP 844 Score = 87 (35.7 bits), Expect = 5.1, P = 0.994 Identities = 26/108 (24%), Positives = 52/108 (48%) Query: 35 LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR 94 L D +T++ K +++K A+KR+ + + RK A+ E+ +R E R Sbjct: 614 LAQEDRETEKRKAKKQKEAQKRRDKALQKKQAQAEEKARKDAEKAAEEAERLAEEQRRQE 673 Query: 95 AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 Q + ERK+ +K K + E++ + +RL + + + R ++Q Sbjct: 674 EQRQKNEERKK---KKEAQRKAEEEERQRKEAERLRRAQEQKERQAEQ 718 >sp|O57342|MAFA_COTJA Transcription factor MafA OS=Coturnix coturnix japonica GN=MAFA PE=1 SV=1 Length = 286 Score = 112 (44.5 bits), Expect = 0.0011, P = 0.0011 Identities = 29/85 (34%), Positives = 48/85 (56%) Query: 83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 +Q+R R L+NR AQ+ R ++ + LENEK Q++ Q + L Q +S++ E + ++ Sbjct: 201 KQKR--RTLKNRGYAQSCRYKRVQQRHILENEKCQLQSQVEQLKQEVSRLAKERDLYKEK 258 Query: 143 LAQLAAEVRGSRANTPMPGSPATAS 167 +LAA RG T P +P T + Sbjct: 259 YEKLAA--RGFPRETSPPAAPKTTA 281 >sp|O60675|MAFK_HUMAN Transcription factor MafK OS=Homo sapiens GN=MAFK PE=1 SV=1 Length = 156 Score = 103 (41.3 bits), Expect = 0.0012, P = 0.0012 Identities = 42/159 (26%), Positives = 73/159 (45%) Query: 47 PEEKKPAKKRKSWGQELPVPKTN---------LPPRKRAKTEDEK---EQRRIERVLRNR 94 P+ K K +K G+ PV + L R T++E +QRR R L+NR Sbjct: 5 PKPNKALKVKKEAGENAPVLSDDELVSMSVRELNQHLRGLTKEEVTRLKQRR--RTLKNR 62 Query: 95 AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154 A + R ++ + E+LE ++++++Q+ + L + S M E + L + L R + Sbjct: 63 GYAASCRIKRVTQKEELERQRVELQQEVEKLARENSSMRLELDALRSKYEALQTFAR-TV 121 Query: 155 ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPS 193 A P+ +P+ + T T+ K EL +PF S Sbjct: 122 ARGPV--APSKVATTSVITIVKST--ELSSTSVPFSAAS 156 >sp|P15407|FOSL1_HUMAN Fos-related antigen 1 OS=Homo sapiens GN=FOSL1 PE=1 SV=1 Length = 271 Score = 111 (44.1 bits), Expect = 0.0012, P = 0.0012 Identities = 54/184 (29%), Positives = 88/184 (47%) Query: 64 PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL------EMEKLENEKIQ 117 P P P ++ E+E E+RR+ R AAA+ RK L E +KLE+EK Sbjct: 88 PPPGVRRRPCEQISPEEE-ERRRVRRERNKLAAAKCRNRRKELTDFLQAETDKLEDEKSG 146 Query: 118 MEQQNQFLLQRLSQMEA--ENNRLSQQLAQLAAEV-RGSRANTPMPGSPATASP--TLTP 172 ++++ + L ++ ++E E +R ++ + A E GS + T P +P P +L+P Sbjct: 147 LQREIEELQKQKERLELVLEAHRPICKIPEGAKEGDTGSTSGTSSPPAPCRPVPCISLSP 206 Query: 173 -TLFKQERDELPLERIPFPTPSLSDYSPTLK---PSTLAESSDVAQHPAVSVAGLEGDGS 228 + + E P TPSL+ ++P+L PST E A + S +G D S Sbjct: 207 GPVLEPEALHTPTL---MTTPSLTPFTPSLVFTYPST-PEPCASAHRKSSSSSG---DPS 259 Query: 229 ALPL 232 + PL Sbjct: 260 SDPL 263 >sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Rattus norvegicus GN=Creb3l3 PE=2 SV=1 Length = 470 Score = 115 (45.5 bits), Expect = 0.0014, Sum P(2) = 0.0014 Identities = 38/115 (33%), Positives = 59/115 (51%) Query: 48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107 +EKK K G LP T LP K +E+ ++I R +RN+ +AQ SR++K+ Sbjct: 214 DEKKLLAKE---GVTLP---TQLPLTKY----EERVLKKIRRKIRNKQSAQESRKKKKEY 263 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS 162 ++ LEN QNQ L +++ +E +N L +QL L A V S + G+ Sbjct: 264 IDGLENRMSACTAQNQELQRKVLHLEKQNLSLLEQLKHLQALVVQSTSKPAHAGT 318 Score = 40 (19.1 bits), Expect = 0.0014, Sum P(2) = 0.0014 Identities = 11/42 (26%), Positives = 19/42 (45%) Query: 15 LPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR 56 LP+T E P V + +++ T + PEE+ + R Sbjct: 130 LPSTACPEPPRTQVHESSVAIDLDMWSTDTLYPEEQAGSPSR 171 >sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mus musculus GN=Enah PE=1 SV=2 Length = 802 Score = 117 (46.2 bits), Expect = 0.0015, P = 0.0015 Identities = 57/225 (25%), Positives = 97/225 (43%) Query: 9 MSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE-LPVPK 67 M +++ L + A++ V T + T+L + + PA+ + QE L + + Sbjct: 105 MHALEVLNSQEAAQSKV-TATQDSTNLRCIFCGPTLPRQNSQLPAQVQNGPSQEELEIQR 163 Query: 68 TNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQ 127 L ++R K E E+E+ ER+ R R + ER+RLE E+LE ++ + E + + Sbjct: 164 RQLQEQQRQK-ELERERMERERLERERLERERL-ERERLEQEQLERQRQEREHVERLERE 221 Query: 128 RLSQMEAENN-RLSQQLAQLAAEV----RGSRANTPMPGSPATASPTLTPTLFKQERDEL 182 RL ++E E R ++L QL E R R + P S ++ S P + Sbjct: 222 RLERLERERQERERERLEQLEREQVEWERERRMSNAAPSSDSSLSSAPLPEYSSCQPPSA 281 Query: 183 P----LERIPFPTPSLS-DYSP-TLKPSTLAESSDVAQHPAVSVA 221 P + I P + DY+ T P T + +H A A Sbjct: 282 PPPSYAKVISAPVSDATPDYAVVTALPPTSTPPTPPLRHAATRFA 326 >sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens GN=FOSB PE=1 SV=1 Length = 338 Score = 112 (44.5 bits), Expect = 0.0015, P = 0.0015 Identities = 42/151 (27%), Positives = 64/151 (42%) Query: 72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131 PR+ T +E+E+RR+ R RN+ AA R R+R ++L+ E Q+E++ L +++ Sbjct: 145 PREETLTPEEEEKRRVRRE-RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAE 203 Query: 132 MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPT 191 ++ E RL L + P PG P L P + D P P Sbjct: 204 LQKEKERLEFVLVAHKPGCKIPYEEGPGPG-PLAEVRDL-PGSAPAKEDGFSWLLPPPPP 261 Query: 192 PSLSDYSPTLKPSTLAESSDVAQHPAVSVAG 222 P L + P L S + H V V G Sbjct: 262 PPLPFQTSQDAPPNLTAS--LFTHSEVQVLG 290 >sp|Q2VZV0|IF2_MAGSA Translation initiation factor IF-2 OS=Magnetospirillum magneticum (strain AMB-1 / ATCC 700264) GN=infB PE=3 SV=1 Length = 872 Score = 117 (46.2 bits), Expect = 0.0016, P = 0.0016 Identities = 36/107 (33%), Positives = 57/107 (53%) Query: 16 PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR 75 P PA PV +PA + +T+E + EE++ AKKR + + PV +T P R+ Sbjct: 188 PVAPAQPKPVAAAAPAGDATAVPRARTEEEEEEEER-AKKRAAAHKPAPVKRTE-PRRRT 245 Query: 76 AK---TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME 119 K T+ + R ER R+ AA + +RER+RL+ + +EK+ E Sbjct: 246 GKLTITDALTDDDRSERG-RSLAAVKRARERERLKHMQKGSEKVIRE 291 >sp|Q61827|MAFK_MOUSE Transcription factor MafK OS=Mus musculus GN=Mafk PE=2 SV=1 Length = 156 Score = 102 (41.0 bits), Expect = 0.0017, P = 0.0017 Identities = 42/159 (26%), Positives = 72/159 (45%) Query: 47 PEEKKPAKKRKSWGQELPVPKTN---------LPPRKRAKTEDEK---EQRRIERVLRNR 94 P+ K K +K G+ PV + L R T++E +QRR R L+NR Sbjct: 5 PKPNKALKVKKEAGENAPVLSDDELVSMSVRELNQHLRGLTKEEVTRLKQRR--RTLKNR 62 Query: 95 AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154 A + R ++ + E+LE ++++++Q+ + L + S M E + L + L R + Sbjct: 63 GYAASCRIKRVTQKEELERQRVELQQEVEKLARENSSMRLELDALRSKYEALQTFAR-TV 121 Query: 155 ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPS 193 A P+ +P + T T+ K EL +PF S Sbjct: 122 ARGPV--TPTKVATTSVITIVKSA--ELSSTSVPFSAAS 156 >sp|P29747|CREBA_DROME Cyclic AMP response element-binding protein A OS=Drosophila melanogaster GN=CrebA PE=1 SV=2 Length = 516 Score = 117 (46.2 bits), Expect = 0.0018, Sum P(2) = 0.0018 Identities = 45/147 (30%), Positives = 72/147 (48%) Query: 8 TMSSVDSLPATPASEVPVLTVS--PADTSLNSADVK--TQEVKPEEKKPAKKRKSWGQEL 63 T SS S A+ +S +T + P T L S+ K T + E++ KR + Sbjct: 370 TRSSSGSASASGSSTSSTVTTTRQPIHTPLISSQPKGSTGTLLLTEEE---KRTLLAEGY 426 Query: 64 PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQ 123 P+P+ LP K +EK ++I R ++N+ +AQ SR +K+ M++LE + +N Sbjct: 427 PIPQ-KLPLTKA----EEKSLKKIRRKIKNKISAQESRRKKKEYMDQLERRVEILVTENH 481 Query: 124 FLLQRLSQMEAENNRLSQQLAQLAAEV 150 +RL +E N L QL +L A V Sbjct: 482 DYKKRLEGLEETNANLLSQLHKLQALV 508 Score = 38 (18.4 bits), Expect = 0.0018, Sum P(2) = 0.0018 Identities = 8/12 (66%), Positives = 9/12 (75%) Query: 10 SSVDSLPATPAS 21 S VDSLP +P S Sbjct: 71 SDVDSLPDSPKS 82 >sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocricetus auratus GN=FOS PE=3 SV=1 Length = 381 Score = 112 (44.5 bits), Expect = 0.0019, P = 0.0019 Identities = 54/176 (30%), Positives = 74/176 (42%) Query: 74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 +R K E +E+E+RRI R RN+ AA R R+R + L+ E Q+E + L + Sbjct: 125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEI 183 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183 + + E +L LA + + P AS LT P E +E LP Sbjct: 184 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMFVASLDLTGGLPEATTPESEEAFSLP 242 Query: 184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS-VAGLEGDGSALPLFDL-GS 237 L P P PSL AE D PA S +G E ++P DL GS Sbjct: 243 LLNDPEPKPSLEPVKSISNVELKAEPFDDFLFPASSRPSGSETTARSVPDMDLSGS 298 >sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familiaris GN=FOSB PE=3 SV=1 Length = 338 Score = 111 (44.1 bits), Expect = 0.0019, P = 0.0019 Identities = 37/141 (26%), Positives = 60/141 (42%) Query: 72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131 PR+ T +E+E+RR+ R RN+ AA R R+R ++L+ E Q+E++ L +++ Sbjct: 145 PREETLTPEEEEKRRVRRE-RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAE 203 Query: 132 MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDEL---PLERIP 188 ++ E RL L + P PG A K++ P P Sbjct: 204 LQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRDLPGSASTKEDGFSWLLPPPPAPP 263 Query: 189 FPTPSLSDYSPTLKPSTLAES 209 P + D +P L S S Sbjct: 264 LPFQTSQDAAPNLTASLFTHS 284 >sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Homo sapiens GN=CREB3L4 PE=1 SV=1 Length = 395 Score = 112 (44.5 bits), Expect = 0.0020, P = 0.0020 Identities = 30/94 (31%), Positives = 55/94 (58%) Query: 54 KKRKSWGQE-LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE 112 ++++ GQE + +P ++LP K +E+ +++ R +RN+ +AQ SR RK+ ++ LE Sbjct: 192 EEKRLLGQEGVSLP-SHLPLTKA----EERVLKKVRRKIRNKQSAQDSRRRKKEYIDGLE 246 Query: 113 NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146 + QNQ L +++ ++E N L QL QL Sbjct: 247 SRVAACSAQNQELQKKVQELERHNISLVAQLRQL 280 >sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Macaca fascicularis GN=CREB3L4 PE=2 SV=1 Length = 395 Score = 112 (44.5 bits), Expect = 0.0020, P = 0.0020 Identities = 30/94 (31%), Positives = 55/94 (58%) Query: 54 KKRKSWGQE-LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE 112 ++++ GQE + +P ++LP K +E+ +++ R +RN+ +AQ SR RK+ ++ LE Sbjct: 192 EEKRLLGQEGVSLP-SHLPLTKA----EERVLKKVRRKIRNKQSAQDSRRRKKEYIDGLE 246 Query: 113 NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146 + QNQ L +++ ++E N L QL QL Sbjct: 247 SRVAACSAQNQELQKKVQELERHNISLVAQLRQL 280 >sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcription factor ATF-4 OS=Rattus norvegicus GN=Atf4 PE=1 SV=1 Length = 347 Score = 111 (44.1 bits), Expect = 0.0020, P = 0.0020 Identities = 30/97 (30%), Positives = 51/97 (52%) Query: 66 PKTNLPP--RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQ 123 PK PP AK + EK ++++++ +N+ AA R++KR E E L E ++E++N+ Sbjct: 255 PKPYDPPGVSVTAKVKTEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKNE 314 Query: 124 FLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP 160 L ++ + E Q L L EVR +R +P Sbjct: 315 ALKEKADSLAKE----IQYLKDLIEEVRKARGKKRVP 347 >sp|P79702|FOS_CYPCA Proto-oncogene c-Fos OS=Cyprinus carpio GN=fos PE=2 SV=1 Length = 347 Score = 111 (44.1 bits), Expect = 0.0020, P = 0.0020 Identities = 58/256 (22%), Positives = 109/256 (42%) Query: 6 EKTMSSVDSLPATPA-SEVPVLT--VSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE 62 E ++SS +P A S P L V P +S+ ++ + P P K + G + Sbjct: 39 ELSVSSASFVPTVTAISSCPDLQWMVQPMVSSVAPSNGGARSYNPN---PYPKMRVTGTK 95 Query: 63 LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN 122 P +N R + +E+E++R+ R RN+ AA R R+R + L+ E ++E + Sbjct: 96 SP--NSNKRARAEQLSPEEEEKKRVRRE-RNKMAAAKCRNRRRELTDTLQAETDELEDEK 152 Query: 123 QFLLQRLSQMEAENNRLSQQLAQLAAEVR-GSRANTPMPGSPATASPTLTPTLFKQERDE 181 L ++ + E RL LA + S + +P+P + ++T ++ Sbjct: 153 SALQNDIANLLKEKERLEFILAAHKPICKIPSSSVSPIPAASVPEIHSITTSVVSTANAP 212 Query: 182 LPLERIP--FP-TPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSD 238 + F T S + T++ S L + + + ++ A LE ++P DL S Sbjct: 213 VTTSSSSSLFSSTASTDSFGSTVEISDLEPTLEESLE-LLAKAELE-TARSVPDVDLSSS 270 Query: 239 LKHHSTDDVAAPLSDD 254 L + + P ++D Sbjct: 271 LYARDWESLYTPANND 286 >sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Homo sapiens GN=ENAH PE=1 SV=2 Length = 591 Score = 114 (45.2 bits), Expect = 0.0021, P = 0.0021 Identities = 35/112 (31%), Positives = 57/112 (50%) Query: 35 LNSADVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEKEQRRIERVLRN 93 LNS + + + PA+ + QE L + + L ++R K E E+ R+ER Sbjct: 111 LNSQETGPTLPRQNSQLPAQVQNGPSQEELEIQRRQLQEQQRQK---ELERERLERERME 167 Query: 94 RAAAQTSR-ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA--ENNRLSQQ 142 R + R ER+RLE E+LE E+++ E+Q + +RL + E RL +Q Sbjct: 168 RERLERERLERERLERERLEQEQLERERQERERQERLERQERLERQERLERQ 219 Score = 102 (41.0 bits), Expect = 0.045, P = 0.044 Identities = 33/109 (30%), Positives = 55/109 (50%) Query: 37 SADVKTQEV-KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK--EQRRIERVLRN 93 SA + EV +E P R++ +LP N P ++ + + + EQ+R + + R Sbjct: 102 SAMMHALEVLNSQETGPTLPRQN--SQLPAQVQNGPSQEELEIQRRQLQEQQRQKELERE 159 Query: 94 RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 R + ER+RLE E+LE E+++ E+ Q L+R Q RL +Q Sbjct: 160 RLERERM-ERERLERERLERERLERERLEQEQLERERQERERQERLERQ 207 Score = 96 (38.9 bits), Expect = 0.20, P = 0.19 Identities = 38/132 (28%), Positives = 66/132 (50%) Query: 49 EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKE-QRRIERVLRNRAAAQTSRERKRLE 107 E++ ++ + ++L + ++R + ++ E Q R+ER R Q +ER+RLE Sbjct: 177 ERERLERERLEQEQLERERQERERQERLERQERLERQERLERQERLDRERQERQERERLE 236 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNR-LSQQLAQLAAE-----VRGSRANTPMPG 161 +LE E+ + E+Q Q L+R Q+E E R +S A + E V G ++ PG Sbjct: 237 --RLERERQERERQEQ--LER-EQLEWERERRISSAAAPASVETPLNSVLGD-SSASEPG 290 Query: 162 SPATASPTLTPT 173 A + P TP+ Sbjct: 291 LQAASQPAETPS 302 >sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus musculus GN=Fosl2 PE=2 SV=1 Length = 326 Score = 110 (43.8 bits), Expect = 0.0023, P = 0.0023 Identities = 41/158 (25%), Positives = 78/158 (49%) Query: 68 TNLPPRKRAK--TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125 T + R+R + + +E+E+RRI R RN+ AA R R+R EKL+ E ++E++ L Sbjct: 108 TTVGRRRRDEQLSPEEEEKRRIRRE-RNKLAAAKCRNRRRELTEKLQAETEELEEEKSGL 166 Query: 126 LQRLSQMEAENNRLS-QQLA-----QLAAEVRGSRANTPMPGSPATASPTLTPTLFKQER 179 + +++++ E +L ++A +++ E R S + + T S + P + KQE Sbjct: 167 QKEIAELQKEKEKLEFMKVAHGPVCKISPEERRSPPTSGLQSLRGTGS-AVGPVVVKQEP 225 Query: 180 DELPLERIPFPTPSLSDYSPT-LKPSTLAESSDVAQHP 216 E E P + + + +KP ++A + P Sbjct: 226 PE---EDSPSSSAGMDKTQRSVIKPISIAGGGFYGEEP 260 >sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcription factor ATF-7 OS=Pongo abelii GN=ATF7 PE=2 SV=1 Length = 483 Score = 112 (44.5 bits), Expect = 0.0027, P = 0.0027 Identities = 45/153 (29%), Positives = 72/153 (47%) Query: 26 LTVSPADTSLNSADVKTQEV--KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKE 83 + V A T + + ++Q + P+ PA+ + S Q P P T +R +T DE Sbjct: 277 MVVGSASTMVTARPEQSQILIQHPDAPSPAQPQVSPAQ--PTPSTG---GRRRRTVDEDP 331 Query: 84 QRRIERVL-RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 R +R L RNRAAA R++++L + LE + ++ QN L ++ + E +L Q Sbjct: 332 DERRQRFLERNRAAASRCRQKRKLWVSSLEKKAEELTSQNIQLSNEVTLLRNEVAQLKQL 391 Query: 143 L-AQLAAEVRGSRANTP-MPGSPATAS-PTLTP 172 L A V + T SP +S PT +P Sbjct: 392 LLAHKDCPVTALQKKTQGYLESPKESSEPTGSP 424 >sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcription factor ATF-7 OS=Homo sapiens GN=ATF7 PE=1 SV=2 Length = 494 Score = 112 (44.5 bits), Expect = 0.0028, P = 0.0028 Identities = 45/153 (29%), Positives = 72/153 (47%) Query: 26 LTVSPADTSLNSADVKTQEV--KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKE 83 + V A T + + ++Q + P+ PA+ + S Q P P T +R +T DE Sbjct: 288 MVVGTASTMVTARPEQSQILIQHPDAPSPAQPQVSPAQ--PTPSTG---GRRRRTVDEDP 342 Query: 84 QRRIERVL-RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 R +R L RNRAAA R++++L + LE + ++ QN L ++ + E +L Q Sbjct: 343 DERRQRFLERNRAAASRCRQKRKLWVSSLEKKAEELTSQNIQLSNEVTLLRNEVAQLKQL 402 Query: 143 L-AQLAAEVRGSRANTP-MPGSPATAS-PTLTP 172 L A V + T SP +S PT +P Sbjct: 403 LLAHKDCPVTALQKKTQGYLESPKESSEPTGSP 435 >sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS=Homo sapiens GN=MAFB PE=1 SV=2 Length = 323 Score = 109 (43.4 bits), Expect = 0.0030, P = 0.0030 Identities = 42/152 (27%), Positives = 70/152 (46%) Query: 14 SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR 73 S A+PA ++P P + SA E+ R S Q + + L Sbjct: 174 SSAASPAQQLPTSHPGPGPHATASATAAGGNGSVED------RFSDDQLVSMSVRELNRH 227 Query: 74 KRAKTEDEKEQ-RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132 R T+DE + ++ R L+NR AQ+ R ++ + LENEK Q+ QQ + L Q +S++ Sbjct: 228 LRGFTKDEVIRLKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRL 287 Query: 133 EAENNRLSQQLAQLA-AEVRGSRANTPMPGSP 163 E + + +LA + R + + + P SP Sbjct: 288 ARERDAYKVKCEKLANSGFREAGSTSDSPSSP 319 >sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase 11A OS=Homo sapiens GN=CDK11A PE=1 SV=3 Length = 780 Score = 118 (46.6 bits), Expect = 0.0032, Sum P(2) = 0.0032 Identities = 50/173 (28%), Positives = 79/173 (45%) Query: 42 TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR 101 +++ K +K K+++ W + V + RKR + E +K +R ER R A + SR Sbjct: 92 SRKEKVHHRKDEKRKEKW-KHARVKEREHERRKRHREEQDKARREWERQKRREMAREHSR 150 Query: 102 -ERKRLEM--EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA-QLAAEVRGSRAN- 156 ER RLE K E E+ EQQ + Q+ + AE R ++ +++A R R + Sbjct: 151 RERDRLEQLERKRERERKMREQQKEQREQKERERRAEERRKEREARREVSAHHRTMREDY 210 Query: 157 -TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAE 208 + S + SP P +ER EL R P + +P KP+ L E Sbjct: 211 SDKVKASHWSRSPPRPP----RERFELGDGR----KPGEARPAPAQKPAQLKE 255 Score = 39 (18.8 bits), Expect = 0.0032, Sum P(2) = 0.0032 Identities = 12/45 (26%), Positives = 21/45 (46%) Query: 259 LFHGDSSVEPDSSVFED-GLAFDVLEGGDLSAFPFDSMVNFDSEP 302 LF G+S ++ + VF++ G + + G S P + F P Sbjct: 622 LFPGNSEIDQINKVFKELGTPSEKIWPG-YSELPVVKKMTFSEHP 665 >sp|O43889|CREB3_HUMAN Cyclic AMP-responsive element-binding protein 3 OS=Homo sapiens GN=CREB3 PE=1 SV=1 Length = 395 Score = 110 (43.8 bits), Expect = 0.0033, P = 0.0033 Identities = 39/129 (30%), Positives = 67/129 (51%) Query: 63 LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN 122 L +P+T LP KTE E+ +R+ R +RN+ +AQ SR +K++ + LE+ ++ QN Sbjct: 159 LILPET-LP---LTKTE-EQILKRVRRKIRNKRSAQESRRKKKVYVGGLESRVLKYTAQN 213 Query: 123 QFLLQRLSQMEAENNRLSQQLAQLAAEV-----RGSRANTPMPGSPATASPTLTPTLFKQ 177 L ++ +E +N L QL +L A V + S ++T + + L P ++ Sbjct: 214 MELQNKVQLLEEQNLSLLDQLRKLQAMVIEISNKTSSSSTCILVLLVSFCLLLVPAMYSS 273 Query: 178 E-RDELPLE 185 + R LP E Sbjct: 274 DTRGSLPAE 282 >sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcription factor ATF-4 OS=Bos taurus GN=ATF4 PE=1 SV=1 Length = 348 Score = 109 (43.4 bits), Expect = 0.0034, P = 0.0034 Identities = 35/133 (26%), Positives = 65/133 (48%) Query: 19 PASEVPVLTVSPADTSLNSAD--VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR- 75 P+ + +SP D+SL S T P + + S G P P PP ++ Sbjct: 210 PSDNDSGICMSP-DSSLGSPQDSPSTSRGSPNKSLLSPGALS-GSSRPKPYD--PPGEKM 265 Query: 76 --AKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQME 133 AK + EK ++++++ +N+ AA R++KR E E L E ++E++N+ L ++ + Sbjct: 266 VAAKVKGEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKNEALKEKADSLA 325 Query: 134 AENNRLSQQLAQL 146 E L Q+ ++ Sbjct: 326 KEIQYLKDQIEEV 338 >sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcription factor ATF-7 OS=Mus musculus GN=Atf7 PE=1 SV=1 Length = 413 Score = 110 (43.8 bits), Expect = 0.0035, P = 0.0035 Identities = 36/121 (29%), Positives = 59/121 (48%) Query: 26 LTVSPADTSLNSADVKTQEV--KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKE 83 + V A T + + + Q + P+ PA+ + S Q P P T +R +T DE Sbjct: 277 MVVGTASTMVTARPEQNQILIQHPDAPSPAQPQVSPAQ--PTPSTG---GRRRRTVDEDP 331 Query: 84 QRRIERVL-RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 R +R L RNRAAA R++++L + LE + ++ QN L ++ + E +L Q Sbjct: 332 DERRQRFLERNRAAASRCRQKRKLWVSSLEKKAEELTSQNIQLSNEVTLLRNEVAQLKQL 391 Query: 143 L 143 L Sbjct: 392 L 392 >sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Arabidopsis thaliana GN=GBF1 PE=1 SV=2 Length = 315 Score = 108 (43.1 bits), Expect = 0.0037, P = 0.0037 Identities = 30/79 (37%), Positives = 48/79 (60%) Query: 79 EDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL---LQRLS----Q 131 +DE+E +R +R NR +A+ SR RK+ E E+L+ + +NQ L LQRLS + Sbjct: 218 KDERELKRQKRKQSNRESARRSRLRKQAECEQLQQRVESLSNENQSLRDELQRLSSECDK 277 Query: 132 MEAENNRLSQQLAQ-LAAE 149 +++ENN + +L + L AE Sbjct: 278 LKSENNSIQDELQRVLGAE 296 Score = 81 (33.6 bits), Expect = 3.9, P = 0.98 Identities = 38/127 (29%), Positives = 64/127 (50%) Query: 23 VPVLTVSPADTSLN-SADVKTQE----VKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK 77 VP+ V+P T+LN D+ + + VK E + +KRK +E ++ L RK+A Sbjct: 191 VPMKPVAPG-TNLNIGMDLWSSQAGVPVKDERELKRQKRKQSNRE-SARRSRL--RKQA- 245 Query: 78 TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN 137 E E+ Q+R+E + + + +R E +KL++E ++ + LQR+ EA N Sbjct: 246 -ECEQLQQRVESLSNENQSLRDELQRLSSECDKLKSENNSIQDE----LQRVLGAEAVAN 300 Query: 138 RLSQQLA 144 L Q A Sbjct: 301 -LEQNAA 306 >sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive element-binding protein 3 OS=Bos taurus GN=CREB3 PE=2 SV=2 Length = 368 Score = 109 (43.4 bits), Expect = 0.0038, P = 0.0038 Identities = 56/212 (26%), Positives = 97/212 (45%) Query: 20 ASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTE 79 A P+ PAD + + T+E EK+ +K G LP LP K Sbjct: 105 AQMTPLRVEEPADQEIARL-ILTEE----EKRLLEKE---GLTLP---GMLPLTKM---- 149 Query: 80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRL 139 +E+ +R+ R +RN+ +AQ SR +K++ + LE+ ++ QN L ++ +E +N L Sbjct: 150 EEQVLKRVRRKIRNKKSAQESRRKKKVYVGGLESRVLKYTAQNLELQNKVQLLEEQNLSL 209 Query: 140 SQQLAQLAAEV-----RGSRANTPMPGSPATASPTLTPTLFKQE-RDELPLER--IPFPT 191 QL +L A V + S ++T + + L P ++ + R LP E + Sbjct: 210 LDQLRRLQAMVIQTANKASSSSTCVLVLLFSFCLLLVPAMYSSDTRGSLPAEHRVLSRQL 269 Query: 192 PSL-SDYSPTLKPSTL-AESSDVAQHPAVSVA 221 +L S+ P L+P L +E + +P + A Sbjct: 270 RALPSEDPPQLEPPALQSEVPKDSLNPELQAA 301 >sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Rattus norvegicus GN=Creb3l4 PE=2 SV=1 Length = 367 Score = 111 (44.1 bits), Expect = 0.0038, Sum P(2) = 0.0038 Identities = 29/87 (33%), Positives = 50/87 (57%) Query: 60 GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME 119 GQE ++LP K +E+ ++I R +RN+ +AQ SR RK+ ++ LE+ Sbjct: 170 GQEGVTLPSHLPLTKA----EERILKKIRRKIRNKQSAQDSRRRKKEYIDGLESRVAACS 225 Query: 120 QQNQFLLQRLSQMEAENNRLSQQLAQL 146 +QNQ L +++ ++E +N L Q+ QL Sbjct: 226 EQNQKLQRKVQELERQNISLVAQVHQL 252 Score = 37 (18.1 bits), Expect = 0.0038, Sum P(2) = 0.0038 Identities = 9/18 (50%), Positives = 11/18 (61%) Query: 19 PASEVPVLTVSPADTSLN 36 P S+VP L S +D LN Sbjct: 29 PPSKVPGLQKSESDDFLN 46 >sp|P54842|MAFB_RAT Transcription factor MafB OS=Rattus norvegicus GN=Mafb PE=1 SV=1 Length = 323 Score = 108 (43.1 bits), Expect = 0.0039, P = 0.0039 Identities = 41/152 (26%), Positives = 70/152 (46%) Query: 14 SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR 73 S A+PA ++P P + +A E+ R S Q + + L Sbjct: 174 SSAASPAQQLPTSHPGPGPHAAAAATAAGSNGSVED------RFSDDQLVSMSVRELNRH 227 Query: 74 KRAKTEDEKEQ-RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132 R T+DE + ++ R L+NR AQ+ R ++ + LENEK Q+ QQ + L Q +S++ Sbjct: 228 LRGFTKDEVIRLKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRL 287 Query: 133 EAENNRLSQQLAQLA-AEVRGSRANTPMPGSP 163 E + + +LA + R + + + P SP Sbjct: 288 ARERDAYKVKCEKLANSGFREAGSTSDSPSSP 319 >sp|A5PKJ4|MK07_BOVIN Mitogen-activated protein kinase 7 OS=Bos taurus GN=MAPK7 PE=2 SV=1 Length = 781 Score = 113 (44.8 bits), Expect = 0.0039, P = 0.0039 Identities = 67/243 (27%), Positives = 94/243 (38%) Query: 3 CDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR---KSW 59 C ME + P PA + LT+ P + A K + + K A K KS Sbjct: 429 CAMESPPPAPLPCPG-PAPDTIDLTLQPPPPASEPAPPKKEGAISDNTKAALKAALLKSL 487 Query: 60 GQEL---PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKI 116 L P P ++ T E+++ R E+ R + A+ RE++R E E+ E Sbjct: 488 RSRLRDGPSAPLEAPEPRKPVTAQERQREREEKRRRRQERAK-EREKRRQERERKERGAG 546 Query: 117 QMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPT-LF 175 + L L + ++N+R L + R +R P +PATA P P Sbjct: 547 VSGGPSADPLAGL--VLSDNDR---SLLE-----RWTRMAQPPAPAPATARPPSPPAGPA 596 Query: 176 KQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDG--SALPLF 233 Q LP P P P+ P P T A S +A P V GL G S LP F Sbjct: 597 TQPTGPLPQPACPPPAPAAG---PAA-PQTTAASGLLAPQPLVPPPGLPGPSALSVLPYF 652 Query: 234 DLG 236 G Sbjct: 653 PSG 655 >sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus musculus GN=Fos PE=1 SV=1 Length = 380 Score = 109 (43.4 bits), Expect = 0.0040, P = 0.0040 Identities = 65/247 (26%), Positives = 101/247 (40%) Query: 2 SCDMEKTMSSVDSLPATPASEVPVL--TVSPADTSL-NSADVKTQEVKPEEKKPAKKRKS 58 S + T++++ + P P L +V+P+ T + + TQ + K S Sbjct: 57 SANFIPTVTAISTSPDLQWLVQPTLVSSVAPSQTRAPHPYGLPTQSAGAYARAGMVKTVS 116 Query: 59 WGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQM 118 G+ + + + + +E+E+RRI R RN+ AA R R+R + L+ E Q+ Sbjct: 117 GGRAQSIGRRG---KVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQL 172 Query: 119 EQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLF 175 E + L ++ + E +L LA + + P + AS LT P Sbjct: 173 EDEKSALQTEIANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMSVASLDLTGGLPEAS 231 Query: 176 KQERDE---LPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS-VAGLEGDGSALP 231 E +E LPL P P PSL AE D PA S +G E S +P Sbjct: 232 TPESEEAFTLPLLNDPEPKPSLEPVKSISNVELKAEPFDDFLFPASSRPSGSETSRS-VP 290 Query: 232 LFDL-GS 237 DL GS Sbjct: 291 DVDLSGS 297 >sp|O13024|INCEA_XENLA Inner centromere protein A OS=Xenopus laevis GN=incenp-A PE=1 SV=1 Length = 873 Score = 113 (44.8 bits), Expect = 0.0045, P = 0.0045 Identities = 35/137 (25%), Positives = 65/137 (47%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR-----NRA 95 + +E +KK A+ ++ QE + L ++R + E EKE+ E+ L+ RA Sbjct: 629 REEEELERQKKIAEAKRLAEQERE--RQLLAEKERLRAEREKERIEKEKALQLQRELERA 686 Query: 96 AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA 155 A + ++R+ E K ++ ++EQ+ Q +++ E R +++ A +AA Sbjct: 687 AQEKEQQRREAEERKKREQQERLEQERLRKEQEAKRLQEEEQRKAKEQAAVAASAPVMNV 746 Query: 156 NTPMPGSPATASPTLTP 172 M SPA S +TP Sbjct: 747 TVDMQNSPACESYEMTP 763 Score = 97 (39.2 bits), Expect = 0.26, P = 0.23 Identities = 29/86 (33%), Positives = 52/86 (60%) Query: 67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE--KIQMEQQNQF 124 K N P + KTE EKE++R++ LR + A+ R++K E +K + E K++ E++ + Sbjct: 484 KRNTPLKTDPKTE-EKERQRLD-ALRKKEEAELQRKQKIEEGKKRKQEELKVRREERLRK 541 Query: 125 LLQ---RLSQMEAENNR-LSQQLAQL 146 +LQ R+ Q+E E + + Q+ AQ+ Sbjct: 542 VLQARERVEQLEEEKKKKIEQKFAQI 567 Score = 85 (35.0 bits), Expect = 5.3, P = 0.995 Identities = 35/124 (28%), Positives = 58/124 (46%) Query: 38 ADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA----KTEDEKEQRRIERVLRN 93 A K K EE + +K++ + L V + R+ K +E+E R +++ Sbjct: 584 AKKKMTAKKQEEVECRRKQEEEARRLKVKQMEEEERRHQELLQKKREEEELERQKKIAEA 643 Query: 94 RAAAQTSRERKRL-EMEKL--ENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV 150 + A+ RER+ L E E+L E EK ++E++ LQR ++E QQ + AE Sbjct: 644 KRLAEQERERQLLAEKERLRAEREKERIEKEKALQLQR--ELERAAQEKEQQRRE--AEE 699 Query: 151 RGSR 154 R R Sbjct: 700 RKKR 703 >sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS=Macaca fascicularis GN=MAFB PE=2 SV=1 Length = 323 Score = 107 (42.7 bits), Expect = 0.0050, P = 0.0050 Identities = 42/152 (27%), Positives = 70/152 (46%) Query: 14 SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR 73 S A+PA ++P P + SA E+ R S Q + + L Sbjct: 174 SSAASPAQQLPTSHPGPGPHATASATAAGGNGSVED------RFSDDQLVSMSVRELNRH 227 Query: 74 KRAKTEDEKEQ-RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132 R T+DE + ++ R L+NR AQ+ R ++ + LENEK Q+ QQ + L Q +S++ Sbjct: 228 LRGFTKDEVIRLKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRL 287 Query: 133 EAENNRLSQQLAQLA-AEVRGSRANTPMPGSP 163 E + + +LA + R + + + P SP Sbjct: 288 ARERDAHKVKCEKLANSGFREAGSTSDSPSSP 319 >sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initiation factor 3 subunit A OS=Cryptococcus neoformans GN=TIF32 PE=3 SV=1 Length = 952 Score = 113 (44.8 bits), Expect = 0.0050, P = 0.0050 Identities = 55/195 (28%), Positives = 78/195 (40%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100 K +E K + ++ KRK +E + + ++ K E+E Q+ E RAAA Sbjct: 747 KIEEEKAQLREKVIKRKREEKERKLKEAREAEERKRKEEEEAAQKAEEEA---RAAAALE 803 Query: 101 RERKRLEMEKLENEKIQMEQQNQFLLQRL-SQMEAENNRLSQQLAQLAAEVRGSRANTPM 159 E E + E E Q Q L+R+ +Q E E L ++ A+ AA G A P Sbjct: 804 AEAAAAEQRRAEREA-----QRQSDLERIRAQQEREEEALRRRQAEKAAATSGGSAYRP- 857 Query: 160 PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDY----SPTLKPSTLAESSDVAQH 215 P T PT +P L R S SP PS A +S A + Sbjct: 858 PARAGTTPPTASPAPSSGGPSWLA-RRKAMEAQSAGGAPVASSPKPVPSNSAAASAPASN 916 Query: 216 PAVSVAGLEGDGSAL 230 S+AG E + AL Sbjct: 917 GPESIAG-EAEKPAL 930 >sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scrofa GN=FOS PE=3 SV=2 Length = 380 Score = 108 (43.1 bits), Expect = 0.0051, P = 0.0051 Identities = 51/175 (29%), Positives = 73/175 (41%) Query: 74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 +R K E +E+E+RRI R RN+ AA R R+R + L+ E Q+E + L + Sbjct: 125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEI 183 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183 + + E +L LA + + P + AS L+ P E +E LP Sbjct: 184 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMSVASLDLSGGLPEAATPESEEAFTLP 242 Query: 184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GS 237 L P P PS+ AE D PA S G ++P DL GS Sbjct: 243 LLNDPEPKPSVEPVKKVSSMELKAEPFDDFLFPASSRPGGSETARSVPDMDLSGS 297 >sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein OS=FBJ murine osteosarcoma virus GN=V-FOS PE=3 SV=1 Length = 381 Score = 108 (43.1 bits), Expect = 0.0052, P = 0.0051 Identities = 55/176 (31%), Positives = 75/176 (42%) Query: 74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 +R K E +E+E+RRI R RN+ AA R R+R + L+ E Q+E + L + Sbjct: 125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDKKSALQTEI 183 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183 + + E +L LA + + P + AS LT P E +E LP Sbjct: 184 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMSVASLDLTGGLPEASTPESEEAFTLP 242 Query: 184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS-VAGLEGDGSALPLFDL-GS 237 L P P PSL AE D PA S +G E S +P DL GS Sbjct: 243 LLNDPEPKPSLEPVKSISNVELKAEPFDDFLFPASSRPSGSETSRS-VPNVDLSGS 297 >sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS=Schizosaccharomyces pombe GN=pcr1 PE=1 SV=1 Length = 171 Score = 100 (40.3 bits), Expect = 0.0057, P = 0.0057 Identities = 40/163 (24%), Positives = 69/163 (42%) Query: 74 KRAKTEDEKEQRRIERVLRNRAAAQTSRERKR---LEMEKLENEKIQMEQQNQFLLQRLS 130 K+ + +DEK +R +ER NR AA R++K+ E+E+ N + ++ Q LL +L Sbjct: 4 KKKEVDDEKRRRILER---NRIAASKFRQKKKEWIKELEQTANAAFEQSKRLQLLLSQLQ 60 Query: 131 Q--MEAENNRLSQQLAQLAAEVRG-----SRANTPMPGSPATASPTLTP---TLFKQERD 180 Q ++ L+ Q Q + ++R A+ + P P + + Sbjct: 61 QEAFRLKSQLLAHQGCQCSVKIRSVLTDFQTAHNALHSQHMAYRPVQPPPGDNMLESVVS 120 Query: 181 ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL 223 P + P + P + PS+ +SD Q S AGL Sbjct: 121 VSPTQMHPSLQGLPPNQHPQMPPSSQQPNSDDVQQHMFSAAGL 163 >sp|Q90596|MAFK_CHICK Transcription factor MafK OS=Gallus gallus GN=MAFK PE=1 SV=1 Length = 156 Score = 98 (39.6 bits), Expect = 0.0062, P = 0.0062 Identities = 40/159 (25%), Positives = 73/159 (45%) Query: 47 PEEKKPAKKRKSWGQELPVPKTN---------LPPRKRAKTEDEK---EQRRIERVLRNR 94 P+ K K ++ G+ PV + L R T++E +QRR R L+NR Sbjct: 5 PKPNKALKVKEESGENAPVLSDDELVSMSVRELNQHLRGLTKEEVIRLKQRR--RTLKNR 62 Query: 95 AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154 A + R ++ + E+LE ++++++Q+ + L + S M+ E + L + L R + Sbjct: 63 GYAASCRIKRVTQKEELERQRVELQQEVEKLARENSSMKLELDALRSKYEALQTFAR-TV 121 Query: 155 ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPS 193 A P+ +P + T T+ K E+ +PF S Sbjct: 122 ARGPI--TPTKVATTSVITIVKSA--EISSSSVPFSAAS 156 >sp|Q504L8|MAFB_XENTR Transcription factor MafB OS=Xenopus tropicalis GN=mafb PE=2 SV=1 Length = 316 Score = 106 (42.4 bits), Expect = 0.0063, P = 0.0062 Identities = 35/137 (25%), Positives = 66/137 (48%) Query: 29 SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ-RRI 87 SP+ +S +S ++ + + + R S Q + + L R T+D+ + ++ Sbjct: 176 SPSGSSSSSQQLQNSHQQHQNSSAVEDRFSDDQLVSMSVRELNRHLRGFTKDDVIRLKQK 235 Query: 88 ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA 147 R L+NR AQ+ R ++ + LENEK Q+ QQ + L +S++ E + + +LA Sbjct: 236 RRTLKNRGYAQSCRFKRVQQKHHLENEKTQLIQQVEQLKLEVSRLARERDAYKIKCEKLA 295 Query: 148 -AEVRGSRANTPMPGSP 163 R + + + P SP Sbjct: 296 NTTFREAGSTSDNPSSP 312 >sp|Q1DQC1|PAN1_COCIM Actin cytoskeleton-regulatory complex protein PAN1 OS=Coccidioides immitis GN=PAN1 PE=3 SV=1 Length = 1485 Score = 114 (45.2 bits), Expect = 0.0065, P = 0.0065 Identities = 69/271 (25%), Positives = 102/271 (37%) Query: 16 PATPASEVPV-LTVS-PADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR 73 P P+ +V +T S A + +S + EEK+ A K++ QE + L Sbjct: 1009 PPPPSRKVRTDVTESVEAKKAEDSVVASKARAEQEEKERALKQEQEAQE--AERKQL--E 1064 Query: 74 KRAKTEDEKEQRRIERV-LRNRAAAQTSRERKRLEME----KLENEKIQMEQQNQFLLQR 128 AK ++E+ R E R RA + R+ K + E K + EK E++ + QR Sbjct: 1065 DEAKRQEEELAREKEAAQARLRALEEQVRQGKIKKQEEKRRKQQAEKEAKEKEARLAAQR 1124 Query: 129 --LSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPT---LTPTLFKQERDELP 183 L +A L +QL + E S P+ +P T++PT + P F Q P Sbjct: 1125 AELEAAQARERELQRQLENMGEEESSSDDEGPIEITPQTSTPTQSQVLPAPFPQPSP--P 1182 Query: 184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHS 243 +P P D +PS S P E + S P F L S Sbjct: 1183 TAALPVPAIQEPDQDVAREPSPTLPSPVETPEPVKQTLPPETE-SRNPYF---RQLSQQS 1238 Query: 244 TDDVAAPLSDDDFNRLFHGDSSVEPDS-SVF 273 A P + FH + E S S F Sbjct: 1239 APSAAQPTHEMQSTNPFHRLAQQESTSKSAF 1269 >sp|P54841|MAFB_MOUSE Transcription factor MafB OS=Mus musculus GN=Mafb PE=1 SV=1 Length = 323 Score = 106 (42.4 bits), Expect = 0.0065, P = 0.0065 Identities = 41/152 (26%), Positives = 70/152 (46%) Query: 14 SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR 73 S A+PA ++P P + +A E+ R S Q + + L Sbjct: 174 SSAASPAQQLPTSHPGPGPHATAAATAAGGNGSVED------RFSDDQLVSMSVRELNRH 227 Query: 74 KRAKTEDEKEQ-RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132 R T+DE + ++ R L+NR AQ+ R ++ + LENEK Q+ QQ + L Q +S++ Sbjct: 228 LRGFTKDEVIRLKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRL 287 Query: 133 EAENNRLSQQLAQLA-AEVRGSRANTPMPGSP 163 E + + +LA + R + + + P SP Sbjct: 288 ARERDAYKVKCEKLANSGFREAGSTSDSPSSP 319 >sp|Q5A2K0|NST1_CANAL Stress response protein NST1 OS=Candida albicans GN=NST1 PE=3 SV=1 Length = 1399 Score = 113 (44.8 bits), Expect = 0.0078, P = 0.0078 Identities = 42/189 (22%), Positives = 84/189 (44%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100 K +E K +E++ KK ++ Q+ L +R K E+E++Q+ E+ + Q Sbjct: 800 KIEEQKRKEEEHRKKVEAQ-QKREAEAKKLKEERRRKAEEERKQKEEEKKQKELLKKQKE 858 Query: 101 RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM- 159 E+++ E+ + + E+ + ++ + +R M +++ L++Q+ +++ + AN P+ Sbjct: 859 EEKRQKELLRKQREEEKEKEAARLEEERTKLMVNDDDELARQIEVEKSKLSAAVANNPLL 918 Query: 160 -------PGS-PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTL-AESS 210 PGS P T S P L + L F S P T +S Sbjct: 919 NHLYQPSPGSAPTTPSTANLPALSPLQSASAKLMSQQFEQQHQQQVSQEKLPQTSNIQSP 978 Query: 211 DVAQHPAVS 219 + HP++S Sbjct: 979 NQQPHPSIS 987 Score = 86 (35.3 bits), Expect = 7.0, P = 0.9991 Identities = 28/115 (24%), Positives = 62/115 (53%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100 K +E+K ++K K K Q+L K RK + + ++E++R+++ + +A + Sbjct: 729 KERELKKLKQKEKAKEKKRLQQLA--KEEERKRKEEELKAKEEEQRLQKE-KLKAEQKKR 785 Query: 101 RERKRLEMEKLENEKIQ----MEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151 +E RL+ E+ + +KI+ E++++ ++ + EAE +L ++ + A E R Sbjct: 786 KEEARLKKEEEKKKKIEEQKRKEEEHRKKVEAQQKREAEAKKLKEERRRKAEEER 840 >sp|Q8VCH8|UBXN4_MOUSE UBX domain-containing protein 4 OS=Mus musculus GN=Ubxn4 PE=1 SV=1 Length = 506 Score = 108 (43.1 bits), Expect = 0.0079, P = 0.0079 Identities = 57/225 (25%), Positives = 92/225 (40%) Query: 19 PASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKT 78 P S+ L +PA + + S E + + Q T R K Sbjct: 146 PESKNTELCETPATSDIKSDTATGGECTGHDSHSQEPHGCSNQRPAEDLTVRVERLTKKL 205 Query: 79 EDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN- 137 E+ +E++R E R + ER++ E L+ ++ Q E+ + +L+ S+ +AE+ Sbjct: 206 EERREEKRKEEAQRE---IKKEIERRKTGKEMLDYKRKQEEELTKRMLEERSREKAEDRA 262 Query: 138 ---RLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP---TLFKQE---RDELPLERIP 188 R+ QQ+A AE R +R A A+ LT T K+E RD + RI Sbjct: 263 ARERIKQQIALDRAE-RAARFAKTKEAEAAKAAALLTKQAGTEVKRESTARDRSTIARIQ 321 Query: 189 FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLF 233 F P S ++ PS A + Q A +V G+ S +F Sbjct: 322 FRLPDGSSFTNQF-PSD-APLEEARQFAAQTVGNTYGNFSLATMF 364 >sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive element-binding protein 3-like protein 3-A OS=Danio rerio GN=creb3l3a PE=2 SV=1 Length = 428 Score = 107 (42.7 bits), Expect = 0.0080, P = 0.0079 Identities = 50/195 (25%), Positives = 86/195 (44%) Query: 8 TMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK 67 T + ++ A PA+ P LTV D L+ +V + + + + L Sbjct: 138 TQCASETPQAQPATGFP-LTVK--DLLLSGTPETAAKVSQQSYQELILTEDEKRLLAKEG 194 Query: 68 TNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQ 127 LP + +E+ ++I R +RN+ +AQ SR++K+ ++ LE+ N L + Sbjct: 195 MTLPNQFPLTKYEERILKKIRRKIRNKQSAQESRKKKKEYIDGLESRMAACSAHNHELQR 254 Query: 128 RLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERI 187 ++ Q+E N L +QL +L A V +N P+ L+ TL LP + Sbjct: 255 KVFQLEKCNISLMEQLRRLQALVMNG-SNKPVQAGTCVLVLLLSFTLIL-----LPNLK- 307 Query: 188 PFPTPSLS---DYSP 199 PF +S D+SP Sbjct: 308 PFTDTKVSQHGDFSP 322 >sp|P10158|FOSL1_RAT Fos-related antigen 1 OS=Rattus norvegicus GN=Fosl1 PE=2 SV=1 Length = 275 Score = 104 (41.7 bits), Expect = 0.0081, P = 0.0080 Identities = 51/185 (27%), Positives = 84/185 (45%) Query: 64 PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL------EMEKLENEKIQ 117 P P P ++ E+E E+RR+ R AAA+ RK L E +KLE+EK Sbjct: 90 PPPGVRRRPCEQISPEEE-ERRRVRRERNKLAAAKCRNRRKELTDFLQAETDKLEDEKSG 148 Query: 118 MEQQNQFLLQRLSQMEA--ENNRLSQQLAQLAAEVRGSRANTPMPGSP-ATASPTLTPTL 174 ++++ + L ++ ++E E +R ++ + + G ++T GSP P P + Sbjct: 149 LQREIEELQKQKERLELVLEAHRPICKIPEEDKKDTGGTSSTSGAGSPPGPCRPV--PCI 206 Query: 175 FKQERDELPLERIPFPT----PSLSDYSPTLK---PSTLAESSDVAQHPAVSVAGLEGDG 227 L E + PT PSL+ ++P+L PST S + + S GD Sbjct: 207 SLSPGPVLEPEALHTPTLMTTPSLTPFTPSLVFTYPSTPEPCSSAHRKSSSS----SGDP 262 Query: 228 SALPL 232 S+ PL Sbjct: 263 SSDPL 267 >sp|P97875|JDP2_MOUSE Jun dimerization protein 2 OS=Mus musculus GN=Jdp2 PE=1 SV=2 Length = 163 Score = 98 (39.6 bits), Expect = 0.0081, P = 0.0081 Identities = 43/152 (28%), Positives = 71/152 (46%) Query: 16 PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR 75 P+ A +P L P T L S+ + T+E+K + + + L V K P+ Sbjct: 9 PSVTAGSLPGL--GPL-TGLPSSALTTEELKYADIRNIGAMIAPLHFLEV-KLGKRPQP- 63 Query: 76 AKTE-DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA 134 K+E DE+E+RR R +N+ AA R +K+ E L+ E ++E N L ++ +++ Sbjct: 64 VKSELDEEEERRKRRREKNKVAAARCRNKKKERTEFLQRESERLELMNAELKTQIEELKL 123 Query: 135 ENNRLSQQLAQLAAE--VRGSRANTP-MPGSP 163 E +L L + VR TP G+P Sbjct: 124 ERQQLILMLNRHRPTCIVRTDSVRTPESEGNP 155 >sp|Q78E65|JDP2_RAT Jun dimerization protein 2 OS=Rattus norvegicus GN=Jdp2 PE=1 SV=1 Length = 163 Score = 98 (39.6 bits), Expect = 0.0081, P = 0.0081 Identities = 43/152 (28%), Positives = 71/152 (46%) Query: 16 PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR 75 P+ A +P L P T L S+ + T+E+K + + + L V K P+ Sbjct: 9 PSVTAGSLPGL--GPL-TGLPSSALTTEELKYADIRNIGAMIAPLHFLEV-KLGKRPQP- 63 Query: 76 AKTE-DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA 134 K+E DE+E+RR R +N+ AA R +K+ E L+ E ++E N L ++ +++ Sbjct: 64 VKSELDEEEERRKRRREKNKVAAARCRNKKKERTEFLQRESERLELMNAELKTQIEELKL 123 Query: 135 ENNRLSQQLAQLAAE--VRGSRANTP-MPGSP 163 E +L L + VR TP G+P Sbjct: 124 ERQQLILMLNRHRPTCIVRTDSVRTPESEGNP 155 >sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Homo sapiens GN=FOSL2 PE=1 SV=1 Length = 326 Score = 105 (42.0 bits), Expect = 0.0086, P = 0.0085 Identities = 37/125 (29%), Positives = 64/125 (51%) Query: 68 TNLPPRKRAK--TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125 T + R+R + + +E+E+RRI R RN+ AA R R+R EKL+ E ++E++ L Sbjct: 108 TTVGRRRRDEQLSPEEEEKRRIRRE-RNKLAAAKCRNRRRELTEKLQAETEELEEEKSGL 166 Query: 126 LQRLSQMEAENNRLSQQLAQLAAEVRGS---RANTPMPG-SPA-TASPTLTPTLFKQERD 180 + +++++ E +L L + S R + P PG P + ++ + KQE Sbjct: 167 QKEIAELQKEKEKLEFMLVAHGPVCKISPEERRSPPAPGLQPMRSGGGSVGAVVVKQE-- 224 Query: 181 ELPLE 185 PLE Sbjct: 225 --PLE 227 >sp|O42290|MAFA_CHICK Transcription factor MafA OS=Gallus gallus GN=MAFA PE=1 SV=1 Length = 286 Score = 104 (41.7 bits), Expect = 0.0087, P = 0.0087 Identities = 26/79 (32%), Positives = 43/79 (54%) Query: 89 RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA 148 R L+NR AQ+ R ++ + LENEK Q++ Q + L Q +S++ E + ++ +LAA Sbjct: 205 RTLKNRGYAQSCRYKRVQQRHILENEKCQLQSQVEQLKQEVSRLAKERDLYKEKYEKLAA 264 Query: 149 EVRGSRANTPMPGSPATAS 167 RG P +P T + Sbjct: 265 --RGFPREPSPPAAPKTTA 281 >sp|A1C9M5|KAPC_ASPCL Putative transcription factor kapC OS=Aspergillus clavatus GN=kapC PE=3 SV=2 Length = 288 Score = 103 (41.3 bits), Expect = 0.011, Sum P(2) = 0.010 Identities = 33/159 (20%), Positives = 67/159 (42%) Query: 66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125 P+ +L ++ KT ++ +R +NRAA + R+RK + LE + E + Sbjct: 83 PQPDLSGQESPKTYGKRPLSTSKRAAQNRAAQRAFRQRKEAHIRDLEGKVKAYETMGE-- 140 Query: 126 LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MPGSPATASPTLTPTLFKQERDELPL 184 + ++AEN +L + + L + + ++ P +PG+ + P + Sbjct: 141 --AIKALQAENYQLREYIINLQSRLLDTQGEVPELPGNIDLSQPRGDIPVPAPPTSGTST 198 Query: 185 ERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL 223 +P P P+ + A + D+ ++VAGL Sbjct: 199 SAVPVPPPTAPQQPQPAQNQASAPNDDMNSLNRIAVAGL 237 Score = 38 (18.4 bits), Expect = 0.011, Sum P(2) = 0.010 Identities = 8/17 (47%), Positives = 10/17 (58%) Query: 299 DSEPVTLEGIEMAHGLP 315 D+ +TL E HGLP Sbjct: 269 DASELTLPKQEPTHGLP 285 >sp|P0C865|MK07_RAT Mitogen-activated protein kinase 7 OS=Rattus norvegicus GN=Mapk7 PE=1 SV=1 Length = 806 Score = 109 (43.4 bits), Expect = 0.011, P = 0.011 Identities = 69/258 (26%), Positives = 106/258 (41%) Query: 3 CDMEKTMSSVDSLP--ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR---K 57 C ME S +LP + PA + LT+ PA + A K + + K A K K Sbjct: 429 CAME---SPPPALPPCSGPAPDTVDLTLQPAPPASELAPPKREGAISDNTKAALKAALLK 485 Query: 58 SWGQEL---PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE 114 S L P P ++ T E+++ R E+ R + A+ RE++R E E+ E Sbjct: 486 SLRSRLRDGPSAPLEAPEPRKPVTAQERQREREEKRRRRQERAK-EREKRRQERERKERG 544 Query: 115 KIQMEQQNQFLLQRLSQMEAENNR-LSQQLAQLAAEVRGSRANTPMPG-SPATASPTLTP 172 + + L L + ++N+R L ++ ++A + A P P P++A PT P Sbjct: 545 AGTLGGPSTDPLAGL--VLSDNDRSLLERWTRMARPPVPAPAPAPAPTPKPSSAQPTSPP 602 Query: 173 T-LFKQERDEL-PLERIPFPT--PSLSDYSPTLKPS--------TLAESSDVAQHPAVSV 220 Q L P IP P P P +P+ T +S +A V Sbjct: 603 NGPVSQSTAPLQPAGSIPGPASQPVCPPPGPVPQPAGPVPAPLQTAPSTSLLASQSLVPP 662 Query: 221 AGLEGDGS--ALPLFDLG 236 +GL G G+ LP F G Sbjct: 663 SGLPGSGAPEVLPYFPSG 680 >sp|Q15424|SAFB1_HUMAN Scaffold attachment factor B1 OS=Homo sapiens GN=SAFB PE=1 SV=4 Length = 915 Score = 109 (43.4 bits), Expect = 0.013, P = 0.013 Identities = 32/95 (33%), Positives = 52/95 (54%) Query: 50 KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRLEM 108 K+P K R S ++ R +A+ E E E+ R+E + R R A Q R ER+R+E Sbjct: 609 KEPRKSRDSESHSRVRERSEREQRMQAQWERE-ERERLE-IARERLAFQRQRLERERMER 666 Query: 109 EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL 143 E+LE E++ +E + + +R+ + E E R Q+L Sbjct: 667 ERLERERMHVEHERRREQERIHR-EREELRRQQEL 700 >sp|O60841|IF2P_HUMAN Eukaryotic translation initiation factor 5B OS=Homo sapiens GN=EIF5B PE=1 SV=4 Length = 1220 Score = 110 (43.8 bits), Expect = 0.014, P = 0.014 Identities = 60/257 (23%), Positives = 109/257 (42%) Query: 7 KTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE--EKKPAKKRKSWGQELP 64 K+ +VD+ PASE T + A+ N D K ++ K + EK+ +K K G Sbjct: 282 KSKVTVDT-GVIPASEEKAETPTAAEDD-NEGDKKKKDKKKKKGEKEEKEKEKKKGPSKA 339 Query: 65 VPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF 124 K + K E+E+++R E R E KR E E+LE EK + ++Q + Sbjct: 340 TVKAMQEALAKLKEEEERQKREEEE----RIKRLEELEAKRKEEERLEQEKRERKKQKE- 394 Query: 125 LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPL 184 +R +++ E L++ +Q A R + A + + P+ +D LP Sbjct: 395 -KERKERLKKEGKLLTK--SQREARAR-AEATLKLLQAQGVEVPS---------KDSLPK 441 Query: 185 ERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL-EGDGSALPLF-DLGSDLKHH 242 +R + L+ ++ES ++ V G+ E + + P+ + D + Sbjct: 442 KRPIYEDKKRKKIPQQLESKEVSESMELCAAVEVMEQGVPEKEETPPPVEPEEEEDTEDA 501 Query: 243 STDDVAAPLSDDDFNRL 259 DD A SD++ ++ Sbjct: 502 GLDDWEAMASDEETEKV 518 >sp|Q5RDE1|IF2P_PONAB Eukaryotic translation initiation factor 5B OS=Pongo abelii GN=EIF5B PE=2 SV=2 Length = 1220 Score = 110 (43.8 bits), Expect = 0.014, P = 0.014 Identities = 61/260 (23%), Positives = 110/260 (42%) Query: 6 EKTMSSVDSLPA--TPASEVPVLTVSPADTSLNSADVKTQEVKPE--EKKPAKKRKSWGQ 61 E+T+ S +L PASE T + A+ N D K ++ K + EK+ +K K G Sbjct: 278 EETVKSKVTLDTGVIPASEEKAETPTAAEDD-NEGDKKKKDKKKKKGEKEEKEKEKKKGP 336 Query: 62 ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ 121 K + K E+E+++R E R E KR E E+LE EK + ++Q Sbjct: 337 SKATVKAMQEALAKLKEEEERQKREEEE----RIKRLEELEAKRKEEERLEQEKRERKKQ 392 Query: 122 NQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDE 181 + +R +++ E L++ +Q A R + A + + P+ +D Sbjct: 393 KE--KERKERLKKEGKLLTK--SQREARAR-AEATLKLLQAQGVEVPS---------KDS 438 Query: 182 LPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL-EGDGSALPLF-DLGSDL 239 LP +R + L+ ++ES ++ V G+ E + + P+ + D Sbjct: 439 LPKKRPIYEDKKRKKIPQQLESKEVSESMELCAAVEVMEQGVPEKEETPPPVEPEEEEDT 498 Query: 240 KHHSTDDVAAPLSDDDFNRL 259 + DD A SD++ ++ Sbjct: 499 EDAGLDDWEAMASDEETEKV 518 >sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5-like protein 6 OS=Arabidopsis thaliana GN=ABF3 PE=1 SV=1 Length = 454 Score = 105 (42.0 bits), Expect = 0.015, P = 0.014 Identities = 47/145 (32%), Positives = 72/145 (49%) Query: 14 SLPATPASEV-P-VLTVS--PADTSLNSA-DVKT----QEVKP-EEKKPAKKRKS-WGQE 62 S PAT EV P +L + P + +L A D KT V P + P KS Sbjct: 291 SQPATQCQEVKPSILGIHNHPMNNNLLQAVDFKTGVTVAAVSPGSQMSPDLTPKSALDAS 350 Query: 63 L-PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ 121 L PVP RK ++ +RR +R+++NR +A SR RK+ +LE E Q+++ Sbjct: 351 LSPVPYMFGRVRKTGAVLEKVIERRQKRMIKNRESAARSRARKQAYTMELEAEIAQLKEL 410 Query: 122 NQFLLQRLSQ-MEAENNRLSQQLAQ 145 N+ L ++ + ME + N+L + L Q Sbjct: 411 NEELQKKQVEIMEKQKNQLLEPLRQ 435 >sp|A9V549|EIF3A_MONBE Eukaryotic translation initiation factor 3 subunit A OS=Monosiga brevicollis GN=33388 PE=3 SV=1 Length = 1052 Score = 109 (43.4 bits), Expect = 0.016, P = 0.015 Identities = 41/140 (29%), Positives = 65/140 (46%) Query: 39 DVKTQEVKPEEKKP-AKKRKSWGQELPVPKTNLPPRKRAKTEDEK------EQRRI--ER 89 D +E E +K K + Q + K L +R + +EK EQRRI E Sbjct: 764 DAYIEEKTAERRKEYMAKLDDFKQRMQEQKIRLEREERERKREEKRRAEEEEQRRIKQEE 823 Query: 90 VLRNRAAAQTSRERKRLEMEKLEN-EKIQMEQQNQFLLQRLSQMEA-ENNRLSQQLAQLA 147 R + + RE++R E KLE E+ +ME+ + QR Q+ A E +LS AQ + Sbjct: 824 EDRKQREREAKREQERQEQLKLEEAERKKMEEATKLQRQREEQVRAREQEKLSNLSAQTS 883 Query: 148 AEV--RGSRANTPMPGSPAT 165 R +R++ P +P++ Sbjct: 884 QPTWKRSARSDAPTTAAPSS 903 Score = 90 (36.7 bits), Expect = 1.9, P = 0.85 Identities = 35/141 (24%), Positives = 63/141 (44%) Query: 49 EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEM 108 E+K A++RK + +L K + +K +E+E++R E+ RA + R K+ E Sbjct: 768 EEKTAERRKEYMAKLDDFKQRMQEQKIRLEREERERKREEK---RRAEEEEQRRIKQEEE 824 Query: 109 EKLENEK-IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS 167 ++ + E+ + EQ+ Q ++L EAE ++ + RA S +A Sbjct: 825 DRKQREREAKREQERQ---EQLKLEEAERKKMEEATKLQRQREEQVRAREQEKLSNLSAQ 881 Query: 168 PTLTPTLFKQERDELPLERIP 188 T PT + R + P P Sbjct: 882 -TSQPTWKRSARSDAPTTAAP 901 >sp|Q9UKV3|ACINU_HUMAN Apoptotic chromatin condensation inducer in the nucleus OS=Homo sapiens GN=ACIN1 PE=1 SV=1 Length = 1341 Score = 110 (43.8 bits), Expect = 0.016, P = 0.016 Identities = 53/190 (27%), Positives = 88/190 (46%) Query: 46 KPEEKKPAKKRKSWGQELP--VPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-E 102 K E K+ K G+E+P P+ + R + ++++++ R R R++ A+ S Sbjct: 294 KSREAPILKEFKEEGEEIPRVKPEEMMDERPKTRSQEQEVLERGGRFTRSQEEARKSHLA 353 Query: 103 RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN--RLSQ--QLAQLAA--EVRGSRAN 156 R++ E E ++ E++ Q L + + RL++ + A L A E S Sbjct: 354 RQQQEKEMKTTSPLEEEEREIKSSQGLKEKSKSPSPPRLTEDRKKASLVALPEQTASEEE 413 Query: 157 TPMPG-SPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD--VA 213 TP P + +SP P L +E E P+E P P P L SP P+T A++ + V+ Sbjct: 414 TPPPLLTKEASSPPPHPQLHSEEEIE-PMEG-PAP-PVLIQLSP---PNTDADTRELLVS 467 Query: 214 QHPAVSVAGL 223 QH V GL Sbjct: 468 QHTVQLVGGL 477 >sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS=Xenopus laevis GN=stambp PE=2 SV=1 Length = 416 Score = 104 (41.7 bits), Expect = 0.017, P = 0.016 Identities = 52/179 (29%), Positives = 77/179 (43%) Query: 39 DVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR---KRAKTEDEK---EQRRIERVLR 92 D KT V PE+K+ KK K E+ PK + KR K E E+ +QR+ E Sbjct: 79 DYKTANV-PEKKETLKKLK----EIAFPKAEELKKELHKRYKKEYEEYSEKQRKEEEERA 133 Query: 93 NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL-LQRLSQMEAENNRLSQQLAQLAAEVR 151 R A Q + ++ + L+ ++ Q EQ F + R ++EAE R+ Q ++ E Sbjct: 134 RRLALQQQLDAEKQRVALLKQQQEQQEQVQAFEEMMRRKELEAERLRILHQFSK--DEPE 191 Query: 152 GSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS 210 +P+ P P +TP L P P P D S LKPS+ +S Sbjct: 192 AEPLGSPL--IPGMNEPPVTPLL--------PSYGTVQPHPPAVDRS--LKPSSYGSNS 238 >sp|Q4QRL3|CC88B_MOUSE Coiled-coil domain-containing protein 88B OS=Mus musculus GN=Ccdc88b PE=1 SV=2 Length = 1481 Score = 110 (43.8 bits), Expect = 0.018, P = 0.018 Identities = 49/182 (26%), Positives = 76/182 (41%) Query: 6 EKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPV 65 EK +DS E + + +T SA K E+ EE + ++R L Sbjct: 281 EKAEQLLDSQAEVQGLEAEIRRLRQ-ETQALSAQAKRAELYREEAEALRERAGRLPRLQE 339 Query: 66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125 + +A E K Q ERVL A ++LE+ + + ++ Q+ L Sbjct: 340 ELRRCREKLQA-AEVFKGQLEEERVLSEALEASKVLLEEQLEVARERSARLHETQRENLL 398 Query: 126 LQ-RLSQMEAENNRLSQQLAQLAAE-----VRGSRANTPMPGSPATAS-PTLTPTLFKQE 178 L+ RL + A+ + L QL QL E + R+ P PGSP AS P P+L + Sbjct: 399 LRTRLGEAHADLDSLRHQLEQLVEENVELELELQRSLEPPPGSPGEASLPGAAPSLQDEV 458 Query: 179 RD 180 R+ Sbjct: 459 RE 460 Score = 92 (37.4 bits), Expect = 1.6, P = 0.81 Identities = 24/81 (29%), Positives = 42/81 (51%) Query: 74 KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQME 133 +R + E E+ Q + V R R Q R R + +LE E+ Q+E Q+Q L + Q++ Sbjct: 1164 RRLQNEHERAQMLLAEVSRERGELQGERGELRSRLARLELERAQLEIQSQQLRESNQQLD 1223 Query: 134 AENNRLSQQLAQLAAEVRGSR 154 RL+ Q +L ++R ++ Sbjct: 1224 LSACRLTTQ-CELLTQLRSAQ 1243 >sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo sapiens GN=FOS PE=1 SV=1 Length = 380 Score = 103 (41.3 bits), Expect = 0.019, P = 0.018 Identities = 50/175 (28%), Positives = 72/175 (41%) Query: 74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 +R K E +E+E+RRI R RN+ AA R R+R + L+ E Q+E + L + Sbjct: 125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEI 183 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183 + + E +L LA + + P + AS LT P + E +E LP Sbjct: 184 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMSVASLDLTGGLPEVATPESEEAFTLP 242 Query: 184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GS 237 L P P PS+ E D PA S ++P DL GS Sbjct: 243 LLNDPEPKPSVEPVKSISSMELKTEPFDDFLFPASSRPSGSETARSVPDMDLSGS 297 >sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus norvegicus GN=Fos PE=1 SV=1 Length = 380 Score = 103 (41.3 bits), Expect = 0.019, P = 0.018 Identities = 51/175 (29%), Positives = 71/175 (40%) Query: 74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 +R K E +E+E+RRI R RN+ AA R R+R + L+ E Q+E + L + Sbjct: 125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEI 183 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183 + + E +L LA + + P + S LT P E +E LP Sbjct: 184 ANLLKEKEKLEFILAAHRPACKIPN-DLGFPEEMSVTSLDLTGGLPEATTPESEEAFTLP 242 Query: 184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GS 237 L P P PSL AE D PA S ++P DL GS Sbjct: 243 LLNDPEPKPSLEPVKNISNMELKAEPFDDFLFPASSRPSGSETARSVPDVDLSGS 297 >sp|P19880|YAP1_YEAST AP-1-like transcription factor YAP1 OS=Saccharomyces cerevisiae GN=YAP1 PE=1 SV=2 Length = 650 Score = 96 (38.9 bits), Expect = 0.019, Sum P(2) = 0.019 Identities = 36/131 (27%), Positives = 61/131 (46%) Query: 28 VSPADTS-LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRR 86 VSP + + + E++ E ++ + G++ PK K +K +D + + Sbjct: 13 VSPGSLAEFEGSKSRHDEIENEHRRTGTRD---GEDSEQPKKK--GSKTSKKQDLDPETK 67 Query: 87 IERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146 +R +NRAA + RERK +M++LE +K+Q + Q Q E E L QL L Sbjct: 68 QKRTAQNRAAQRAFRERKERKMKELE-KKVQSLESIQ------QQNEVEATFLRDQLITL 120 Query: 147 AAEVRGSRANT 157 E++ R T Sbjct: 121 VNELKKYRPET 131 Score = 53 (23.7 bits), Expect = 0.019, Sum P(2) = 0.019 Identities = 25/114 (21%), Positives = 50/114 (43%) Query: 160 PGSPA---TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHP 216 PGS A+ P+L + ++++P P + + L+P + ++S + + Sbjct: 438 PGSTGIGNNAASNTNPSLLQSSKEDIPFINANLAFPDDNSTNIQLQPFSESQSQNKFDYD 497 Query: 217 AV-SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPD 269 + EG+ LF G L+ D AA +SDD+ + + + + EP+ Sbjct: 498 MFFRDSSKEGNN----LF--GEFLEDDDDDKKAANMSDDESSLIKNQLINEEPE 545 >sp|Q8CH25|SLTM_MOUSE SAFB-like transcription modulator OS=Mus musculus GN=Sltm PE=1 SV=1 Length = 1031 Score = 108 (43.1 bits), Expect = 0.019, P = 0.019 Identities = 30/84 (35%), Positives = 49/84 (58%) Query: 73 RKRAKTEDEKEQRRIERVLRNRAAAQTSR---ERKRLEMEKLENEKIQMEQQNQFLLQRL 129 R+R + E+E+R ER+ R R + R ER+R+E E+LE E+I++EQ+ + +R+ Sbjct: 644 RERIRIIREREER--ERLQRERERLEIERQKLERERMERERLERERIRIEQERRREAERI 701 Query: 130 SQMEAENNRLSQQLAQLAAEVRGS 153 ++ E R QQL + E R S Sbjct: 702 AREREELRRQQQQL-RYEQEKRNS 724 Score = 103 (41.3 bits), Expect = 0.069, P = 0.067 Identities = 33/117 (28%), Positives = 64/117 (54%) Query: 39 DVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK-TEDEKEQRRIERVLRNRAAA 97 D + +E+ P EK ++ + K + R+R + E E+ +R R++R R Sbjct: 597 DYRRKEILPFEKMKEQRLREHLVRFERLKQAVEFRRRKEIAERERRERERIRIIREREER 656 Query: 98 QT-SRERKRLEME--KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151 + RER+RLE+E KLE E+++ E+ + +R+ ++E E R ++++A+ E+R Sbjct: 657 ERLQRERERLEIERQKLERERMERERLER---ERI-RIEQERRREAERIAREREELR 709 >sp|Q9NWH9|SLTM_HUMAN SAFB-like transcription modulator OS=Homo sapiens GN=SLTM PE=1 SV=2 Length = 1034 Score = 108 (43.1 bits), Expect = 0.020, P = 0.019 Identities = 30/84 (35%), Positives = 49/84 (58%) Query: 73 RKRAKTEDEKEQRRIERVLRNRAAAQTSR---ERKRLEMEKLENEKIQMEQQNQFLLQRL 129 R+R + E+E+R ER+ R R + R ER+R+E E+LE E+I++EQ+ + +R+ Sbjct: 645 RERIRIIREREER--ERLQRERERLEIERQKLERERMERERLERERIRIEQERRKEAERI 702 Query: 130 SQMEAENNRLSQQLAQLAAEVRGS 153 ++ E R QQL + E R S Sbjct: 703 AREREELRRQQQQL-RYEQEKRNS 725 Score = 100 (40.3 bits), Expect = 0.15, P = 0.14 Identities = 33/117 (28%), Positives = 65/117 (55%) Query: 39 DVKTQEVKPEEK-KPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA 97 D + +E+ P EK K + R+ + + + R+R E E+ +R R++R R Sbjct: 598 DYRRKEILPFEKMKEQRLREHLVRFERLRRAMELRRRREIAERERRERERIRIIREREER 657 Query: 98 QT-SRERKRLEME--KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151 + RER+RLE+E KLE E+++ E+ + +R+ ++E E + ++++A+ E+R Sbjct: 658 ERLQRERERLEIERQKLERERMERERLER---ERI-RIEQERRKEAERIAREREELR 710 >sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Homo sapiens GN=HLF PE=2 SV=1 Length = 295 Score = 101 (40.6 bits), Expect = 0.020, P = 0.020 Identities = 39/151 (25%), Positives = 67/151 (44%) Query: 2 SCDMEKTMSSVDSLPA---TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS 58 +C M+ + LPA TP+ P P + AD+ + +E +KRK Sbjct: 142 NC-MQSPIRPGQLLPANRNTPSPIDPDTIQVPVGYEPDPADLALSSIPGQEMFDPRKRKF 200 Query: 59 WGQEL-PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQ 117 +EL P P RK +D K+ + R +N AA+ SR+ +RL+ ++ Sbjct: 201 SEEELKPQPMIK-KARKVFIPDDLKDDKYWARRRKNNMAAKRSRDARRLKENQIAIRASF 259 Query: 118 MEQQNQFLLQRLSQMEAENNRLSQQLAQLAA 148 +E++N L Q ++ + E + LA+ A Sbjct: 260 LEKENSALRQEVADLRKELGKCKNILAKYEA 290 >sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus musculus GN=Hlf PE=2 SV=1 Length = 295 Score = 101 (40.6 bits), Expect = 0.020, P = 0.020 Identities = 39/151 (25%), Positives = 67/151 (44%) Query: 2 SCDMEKTMSSVDSLPA---TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS 58 +C M+ + LPA TP+ P P + AD+ + +E +KRK Sbjct: 142 NC-MQSPIRPGQLLPANRNTPSPIDPDTIQVPVGYEPDPADLALSSIPGQEMFDPRKRKF 200 Query: 59 WGQEL-PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQ 117 +EL P P RK +D K+ + R +N AA+ SR+ +RL+ ++ Sbjct: 201 SEEELKPQPMIK-KARKVFIPDDLKDDKYWARRRKNNMAAKRSRDARRLKENQIAIRASF 259 Query: 118 MEQQNQFLLQRLSQMEAENNRLSQQLAQLAA 148 +E++N L Q ++ + E + LA+ A Sbjct: 260 LEKENSALRQEVADLRKELGKCKNILAKYEA 290 >sp|Q6CBW0|NST1_YARLI Stress response protein NST1 OS=Yarrowia lipolytica GN=NST1 PE=3 SV=1 Length = 889 Score = 107 (42.7 bits), Expect = 0.021, P = 0.021 Identities = 43/157 (27%), Positives = 72/157 (45%) Query: 74 KRAKTEDEKEQRRIERV-LRNRAAAQTSRERKRLEMEKLENEKIQMEQ-QNQFL-----L 126 +R + EKE+R E + R + RE++RLE E++ENE+++ E+ +N+ L Sbjct: 489 ERMRLAKEKEEREKEELRARQQQEEDERREKERLEEERIENERLEAERIENERLEKEREQ 548 Query: 127 QRLSQMEAENNRLSQQLA-QLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLE 185 QRL + E E R+ ++ Q E R RA+ +P S T P + L Sbjct: 549 QRLEE-EKERQRIKEEREKQKLEEEREKRASMSIPLSKPLPGKTQIPA----SQPGTSLG 603 Query: 186 RIPFPTPSLSDYSPT-LKPSTLAES--SDVAQHPAVS 219 + P P + +P + P + + + QH A S Sbjct: 604 GLQQPVPQAAPVAPVAMMPQSPSPQLPPGLTQHVAQS 640 Score = 104 (41.7 bits), Expect = 0.045, P = 0.044 Identities = 43/158 (27%), Positives = 75/158 (47%) Query: 48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRL 106 EEK+ A+ R+ + + + K +R K E Q++ E R + + R E +RL Sbjct: 477 EEKRLARIREM-EERMRLAKEK---EEREKEELRARQQQEEDERREKERLEEERIENERL 532 Query: 107 EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA---NTPMPGS- 162 E E++ENE+++ E++ Q L + + + R Q+L + E R S + + P+PG Sbjct: 533 EAERIENERLEKEREQQRLEEEKERQRIKEEREKQKLEE-EREKRASMSIPLSKPLPGKT 591 Query: 163 --PATASPTLTPTLFK---QERDELPLERIP-FPTPSL 194 PA+ T L + Q P+ +P P+P L Sbjct: 592 QIPASQPGTSLGGLQQPVPQAAPVAPVAMMPQSPSPQL 629 Score = 91 (37.1 bits), Expect = 1.2, P = 0.70 Identities = 42/181 (23%), Positives = 72/181 (39%) Query: 44 EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER 103 E K +EK+ K + E K ++A+ EKE++R+ R+ + ++E+ Sbjct: 441 ERKQQEKEREKAARKAASEA---KQKARQEEQARLAREKEEKRLARIREMEERMRLAKEK 497 Query: 104 KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSP 163 + E E+L + Q E+ + +RL + EN RL A + R Sbjct: 498 EEREKEELRARQ-QQEEDERREKERLEEERIENERLE------AERIENERLEKER--EQ 548 Query: 164 ATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL 223 K+ER++ LE S+S P KP ++ A P S+ GL Sbjct: 549 QRLEEEKERQRIKEEREKQKLEEEREKRASMS--IPLSKPLP-GKTQIPASQPGTSLGGL 605 Query: 224 E 224 + Sbjct: 606 Q 606 Score = 84 (34.6 bits), Expect = 7.0, P = 0.9990 Identities = 33/120 (27%), Positives = 59/120 (49%) Query: 37 SADVKT--QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR 94 +A VK Q+++ E+K ++++ Q+ K ++A E+EK + ER R + Sbjct: 368 AAQVKAELQQMEEEKKTLDLEKEARDQQRRERKKEKKRAQKAIKEEEKRKAAAEREEREK 427 Query: 95 AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154 A+ + ER RLE E+ + EK E++ R + EA+ ++ A+LA E R Sbjct: 428 REAEEA-ERLRLEAERKQQEK---EREKA---ARKAASEAKQKARQEEQARLAREKEEKR 480 Score = 76 (31.8 bits), Expect = 0.85, Sum P(2) = 0.57 Identities = 27/101 (26%), Positives = 48/101 (47%) Query: 43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102 +E + ++++ KK K Q+ + RK A +E+E+R E R R A+ ++ Sbjct: 389 KEARDQQRRERKKEKKRAQKAIKEEEK---RKAAAEREEREKREAEEAERLRLEAERKQQ 445 Query: 103 RKRLEM--EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQ 141 K E K +E Q +Q + RL++ E E RL++ Sbjct: 446 EKEREKAARKAASEAKQKARQEE--QARLAR-EKEEKRLAR 483 Score = 61 (26.5 bits), Expect = 0.85, Sum P(2) = 0.57 Identities = 25/91 (27%), Positives = 38/91 (41%) Query: 129 LSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIP 188 L+Q A++ L +L +TP PGS + + TL +L + + P P Sbjct: 633 LTQHVAQSQILLDRLTPDPTSRMTPERHTPSPGSTTSNAKTLLDSLLRPAQG--PSTPPP 690 Query: 189 FP-TP--SLSDYSPTLKPSTLAESSDVAQHP 216 P TP S+S +P T+ V Q P Sbjct: 691 GPGTPRSSISHVAPVGAIGTIGSPGQVNQQP 721 >sp|Q498L2|SLTM_XENLA SAFB-like transcription modulator OS=Xenopus laevis GN=sltm PE=2 SV=1 Length = 998 Score = 105 (42.0 bits), Expect = 0.022, Sum P(2) = 0.022 Identities = 26/84 (30%), Positives = 48/84 (57%) Query: 73 RKRAKTEDEKEQRRIERVLRNRAAAQTSR---ERKRLEMEKLENEKIQMEQQNQFLLQRL 129 R+R + +E+ ++R+ R R + R ER+R+E E+LE E+I++EQ+ + +R+ Sbjct: 607 RERERIRIMREREELDRLQRERERLEIERQKLERERMERERLERERIRIEQERRREAERI 666 Query: 130 SQMEAENNRLSQQLAQLAAEVRGS 153 ++ E R +QL + E R S Sbjct: 667 AREREELRRQQEQL-RFEQEKRNS 689 Score = 47 (21.6 bits), Expect = 0.022, Sum P(2) = 0.022 Identities = 15/56 (26%), Positives = 25/56 (44%) Query: 29 SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLP-PRKRAKTEDEKE 83 S +S+ D ++ + EKK K+ K +E T +P P K E+ K+ Sbjct: 456 SKTQSSVKKDDRRSSD--KAEKKDGKELKKDSKEKSESATTVPSPESSKKNEERKK 509 Score = 44 (20.5 bits), Expect = 0.045, Sum P(2) = 0.044 Identities = 16/78 (20%), Positives = 32/78 (41%) Query: 6 EKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPV 65 E++ + V+ L +E S D +D++ +E + +EKK QE+ Sbjct: 120 EESATFVNVLSTEEENETK--QTSHFDNPERGSDIQAEEAEEDEKKDVTGSGDVTQEISK 177 Query: 66 PKTNLPPRKRAKTEDEKE 83 P + + ++E E Sbjct: 178 PLHSGDNESELRIKEEME 195 >sp|Q1E554|CGR1_COCIM rRNA-processing protein CGR1 OS=Coccidioides immitis GN=CGR1 PE=3 SV=1 Length = 130 Score = 89 (36.4 bits), Expect = 0.023, P = 0.023 Identities = 32/124 (25%), Positives = 60/124 (48%) Query: 9 MSSVDSLPATPASE-VPVLTVSPADTSLNSADVKTQEVKPEEKK----PAKKRKSWGQEL 63 MSS + PA PA E P +PA + ++ + K P K + S+ + L Sbjct: 1 MSSTEPAPA-PAPEPAPAPAAAPAAAAAAPKGMRKNGKNWHDVKTPFRPTKGQTSYARRL 59 Query: 64 PVPKTNLPPRKRAKT-EDEKE---QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME 119 K +++ K ++EKE QRRI+ + ++R AA+ +ER EK+ ++++ Sbjct: 60 EERKAMAAIKEKEKEMKEEKEAERQRRIQAI-KDRRAAKEEKERYEKMAEKMHRKRVERR 118 Query: 120 QQNQ 123 ++ + Sbjct: 119 KRRE 122 >sp|Q91496|FOS_TETFL Proto-oncogene c-Fos OS=Tetraodon fluviatilis GN=fos PE=3 SV=1 Length = 374 Score = 102 (41.0 bits), Expect = 0.023, P = 0.023 Identities = 38/136 (27%), Positives = 59/136 (43%) Query: 15 LPATPASEVPVLTVSPADTSLN-SADVKTQEVKPEEKK-PAKKRKSWGQELPVPKTNLPP 72 L A+ AS VP +T L V P + P S+ + + + P Sbjct: 47 LTASSASFVPTVTAISTSPDLQWMVQPLVSSVAPSRRAHPYSPSPSYKRTVMRSGASKPH 106 Query: 73 RKRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQR 128 KR + E +E+E++RI R RN+ AA R R+R + L+ E Q+E + L Sbjct: 107 AKRGRVEQTTPEEEEKKRIRRE-RNKQAAAKCRNRRRELTDSLQAETDQLEAEKSSLQND 165 Query: 129 LSQMEAENNRLSQQLA 144 ++ + E RL LA Sbjct: 166 IANLLKEKERLEFILA 181 >sp|Q9ESN9|JIP3_MOUSE C-Jun-amino-terminal kinase-interacting protein 3 OS=Mus musculus GN=Mapk8ip3 PE=1 SV=1 Length = 1337 Score = 98 (39.6 bits), Expect = 0.023, Sum P(2) = 0.023 Identities = 40/152 (26%), Positives = 69/152 (45%) Query: 62 ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRN-RAAAQTSRERKRLEMEKL------ENE 114 E V K L K+AK + E + +E L+ ++ A T+R R E+E + E + Sbjct: 455 EQEVLKGELEAAKQAKVKLENRIKELEEELKRVKSEAVTARREPREEVEDVSSYLCTELD 514 Query: 115 KIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS---RANTPMPGSPATASPTLT 171 KI M Q+ +F ++++ E N+ ++L +L VR + RA+ P T+ Sbjct: 515 KIPMAQRRRFTRVEMARVLMERNQYKERLMELQEAVRWTEMIRASREHPSVQEKKKSTIW 574 Query: 172 P---TLFKQERDELPLERIPFPTPSLSDYSPT 200 LF P +R +P+ ++ SPT Sbjct: 575 QFFSRLFSSSSSPPPAKR-SYPSVNIHYKSPT 605 Score = 57 (25.1 bits), Expect = 0.023, Sum P(2) = 0.023 Identities = 18/58 (31%), Positives = 25/58 (43%) Query: 8 TMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPV 65 T S+ + TP S VP V+P + SL K K+ +KR S E+ V Sbjct: 266 TPSTTGTKSNTPTSSVPSAAVTPLNESLQPLGDYVSVTK-NNKQAREKRNSRNMEVQV 322 >sp|P53450|FOS_TAKRU Proto-oncogene c-Fos OS=Takifugu rubripes GN=fos PE=3 SV=1 Length = 376 Score = 102 (41.0 bits), Expect = 0.023, P = 0.023 Identities = 63/245 (25%), Positives = 104/245 (42%) Query: 15 LPATPASEVPVLTVSPADTSLN-SADVKTQEVKPEEKK-PAKKRKSWGQELPVPKTNLPP 72 L A+ AS +P +T L V P + P S+ + + + Sbjct: 48 LTASSASFIPTVTAISTSPDLQWMVQPLISSVAPSHRAHPYSPSPSYKRTVMRSAASKAH 107 Query: 73 RKRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQR 128 KR++ E +E+E++RI R RN+ AA R R+R + L+ E Q+E + L Sbjct: 108 GKRSRVEQTTPEEEEKKRIRRE-RNKQAAAKCRNRRRELTDTLQAETDQLEDEKSSLQND 166 Query: 129 LSQMEAENNRLSQQLA--QLAAEVRGSRANTPMPGSPATASPT---LTPTLFKQERDELP 183 ++ + E RL LA Q ++ S+ +T S + SP L+ T+ Q + +P Sbjct: 167 IANLLKEKERLEFILAAHQPICKIP-SQMDTDF--SVVSMSPVHACLSTTVSTQLQTSIP 223 Query: 184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHS 243 T S S ++ T S + SSD +S A + S + + DL S + S Sbjct: 224 --EATTVTSSHSTFTSTSN-SIFSGSSD----SLLSTATVSN--SVVKMTDLDSSVLEES 274 Query: 244 TDDVA 248 D +A Sbjct: 275 LDLLA 279 >sp|Q05682|CALD1_HUMAN Caldesmon OS=Homo sapiens GN=CALD1 PE=1 SV=2 Length = 793 Score = 106 (42.4 bits), Expect = 0.024, P = 0.023 Identities = 33/148 (22%), Positives = 74/148 (50%) Query: 43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102 Q +K EEK+ A++R+ +E K R+RA+ E+E E+ ++E RN+ Q + Sbjct: 343 QRIKEEEKRAAEERQRIKEE---EKRAAEERQRARAEEE-EKAKVEEQKRNK---QLEEK 395 Query: 103 RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS 162 ++ ++ K++ EK++ + + +++ ++ +A+ ++L + + E +G++ Sbjct: 396 KRAMQETKIKGEKVEQKIEGKWV----NEKKAQEDKLQTAVLKKQGEEKGTKVQAKREKL 451 Query: 163 PATASPTLTPTLFKQER---DELPLERI 187 PT K E+ D+ P E + Sbjct: 452 QED-KPTFKKEEIKDEKIKKDKEPKEEV 478 Score = 97 (39.2 bits), Expect = 0.49, Sum P(2) = 0.39 Identities = 42/168 (25%), Positives = 66/168 (39%) Query: 73 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132 R+R +TE E E ++++ + A ++KR E K+ E+ Q +Q + R + Sbjct: 541 RRRGETESE-EFEKLKQKQQEAALELEELKKKREERRKVLEEEEQRRKQEE--ADRKLRE 597 Query: 133 EAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLE-RIPFPT 191 E E RL +++ + AE R P G P F + L +E R F Sbjct: 598 EEEKRRLKEEIERRRAEAAEKRQKMPEDGLSDDKKPF---KCFTPKGSSLKIEERAEFLN 654 Query: 192 PSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL 239 S+ S A S + + +EG SA P SDL Sbjct: 655 KSVQKSSGVKSTHQAAIVSKIDSRLEQYTSAIEGTKSAKPTKPAASDL 702 Score = 85 (35.0 bits), Expect = 4.7, P = 0.991 Identities = 23/91 (25%), Positives = 47/91 (51%) Query: 43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102 + ++ EEK+ A++R+ +E K R+R K E+++ +R+ A R+ Sbjct: 315 ERMREEEKRAAEERQRIKEE---EKRAAEERQRIKEEEKRAAEERQRIKEEEKRAAEERQ 371 Query: 103 RKRLEMEKLENEKIQMEQQNQFLLQRLSQME 133 R R E E E K++ +++N+ L ++ M+ Sbjct: 372 RARAEEE--EKAKVEEQKRNKQLEEKKRAMQ 400 Score = 40 (19.1 bits), Expect = 0.49, Sum P(2) = 0.39 Identities = 13/53 (24%), Positives = 23/53 (43%) Query: 32 DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ 84 + L +A +K Q + K AK+ K + K + K K ++ KE+ Sbjct: 425 EDKLQTAVLKKQGEEKGTKVQAKREKLQEDKPTFKKEEIKDEKIKKDKEPKEE 477 >sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos taurus GN=FOS PE=2 SV=2 Length = 380 Score = 102 (41.0 bits), Expect = 0.024, P = 0.024 Identities = 50/175 (28%), Positives = 72/175 (41%) Query: 74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 +R K E +E+E+RRI R RN+ AA R R+R + L+ E Q+E + L + Sbjct: 125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEI 183 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183 + + E +L LA + + P + AS L+ P E +E LP Sbjct: 184 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMSVASLDLSGGLPEAATPESEEAFTLP 242 Query: 184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GS 237 L P P PS+ AE D PA S ++P DL GS Sbjct: 243 LLNDPEPKPSVEPVKSVGSMELKAEPFDDYMFPASSRPSGSETARSVPDMDLSGS 297 >sp|Q56TT7|FOS_PHOCM Proto-oncogene c-Fos OS=Phodopus campbelli GN=FOS PE=3 SV=1 Length = 381 Score = 102 (41.0 bits), Expect = 0.024, P = 0.024 Identities = 52/176 (29%), Positives = 73/176 (41%) Query: 74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 +R K E +E+E+RRI R RN+ AA R R+R + L+ E +E + L + Sbjct: 125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDHLEDEKSALQTEI 183 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183 + + E +L LA + + P + AS LT P E +E LP Sbjct: 184 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEDMSVASLDLTGGLPEATTPESEEAFSLP 242 Query: 184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS-VAGLEGDGSALPLFDL-GS 237 L P P SL AE D PA S +G E ++P DL GS Sbjct: 243 LLNDPEPKTSLEPVKSISNMELKAEPFDDFLFPASSRPSGSETTARSVPDMDLSGS 298 >sp|Q0CEI3|KAPC_ASPTN Putative transcription factor kapC OS=Aspergillus terreus (strain NIH 2624 / FGSC A1156) GN=kapC PE=3 SV=2 Length = 286 Score = 100 (40.3 bits), Expect = 0.025, P = 0.024 Identities = 39/161 (24%), Positives = 67/161 (41%) Query: 66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125 P+ P++ KT ++ +R +NRAA + R+RK + KLE Q++ Q + + Sbjct: 85 PQPEPAPQESPKTYGKRPLSTSKRAAQNRAAQRAFRQRKESYIRKLEE---QVKHQ-EAI 140 Query: 126 LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MPGSPATASPTLTPTLFKQERDELPL 184 + + AEN +L + + L + S+ P +PG+ P TL E Sbjct: 141 TEEYKALHAENYQLREYIINLQTRLLDSQGEVPELPGNIDLNQPRADLTLSAPELQRGNA 200 Query: 185 ERI-PFPT-PSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL 223 P P P P + + D+ ++VAGL Sbjct: 201 ASAGPAPAGPGPQQSQPNQNQG-VGPNDDMNSLNRIAVAGL 240 >sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide exchange factor 18 OS=Mus musculus GN=Arhgef18 PE=2 SV=1 Length = 1021 Score = 107 (42.7 bits), Expect = 0.025, P = 0.024 Identities = 61/246 (24%), Positives = 101/246 (41%) Query: 9 MSSVDSLPATPASEVP--VLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP 66 M S +SLP E+ V T+S SL + + Q+ E ++ A + + L Sbjct: 628 MPSTESLPTVLELELVHRVQTLSQLLLSLQAV-IAQQDSYVEMQRTAIQEREKQFRLQST 686 Query: 67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLL 126 + NL E E+ QR E+ RA + + + R E ++ E E+ + +Q+ + Sbjct: 687 RGNL------LLEQER-QRNFEKQREERAGVEKLQSQLRQEQQRWERERARQQQELELAG 739 Query: 127 QRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLER 186 RL + E E ++ Q+L Q E+ R + +ER+ L L R Sbjct: 740 ARLQEREGEARQMRQRLDQERTELERQRQAYQHDLERLREAQRAVD----RERERLELLR 795 Query: 187 IPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGS-ALPLFDLGSDLKHHS-T 244 F + L P LAE+ + P+ + GLEG + A GS + H + Sbjct: 796 -RFKKQNT--VPGALPPEVLAEAQPASHPPSFNGDGLEGHSAPAKAPGTQGSAMLHGTGP 852 Query: 245 DDVAAP 250 D+V P Sbjct: 853 DNVERP 858 >sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein OS=Drosophila melanogaster GN=ImpE2 PE=1 SV=1 Length = 466 Score = 103 (41.3 bits), Expect = 0.025, P = 0.025 Identities = 45/186 (24%), Positives = 86/186 (46%) Query: 8 TMSSVDSLPATPASEVPVLTVS----PADTSLNSADVKTQEVKPEEKKPA---KKRKSWG 60 + + V +LP A ++PV V P SL +VK +EVKPEE KP +K K Sbjct: 14 SQARVLNLPKE-AIDIPVAIVEDKEPPVALSLVKEEVKAEEVKPEEVKPIAQEEKAKDLK 72 Query: 61 QEL-PVPKTNLPPRKRAKTEDE-KEQRR--IERVLRNRAAAQTSRERKRLEMEKLENEKI 116 +E+ P K + + + +DE KE + I+ L+ + Q + +E L+ + + Sbjct: 73 EEVKPEIKPEIKEQPKPDIKDEIKEDLKADIKEELKEKIEEQINELPNAKPLE-LKEKSL 131 Query: 117 QMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLTPTLF 175 + E++ Q + + + Q E + ++ ++ E + + P + + L+P Sbjct: 132 EAEEKPQEIKEEVQQPE-----IKKEATEIKEEPAQNILKSLPAEETVVVPAEELSPNPV 186 Query: 176 KQERDE 181 +QE+ E Sbjct: 187 EQEQSE 192 >sp|A2AJI0|MA7D1_MOUSE MAP7 domain-containing protein 1 OS=Mus musculus GN=Map7d1 PE=1 SV=1 Length = 846 Score = 106 (42.4 bits), Expect = 0.026, P = 0.025 Identities = 37/143 (25%), Positives = 58/143 (40%) Query: 7 KTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP 66 K+ ++ + PA PAS P SP TQ + E PA P Sbjct: 530 KSRAAEEKEPAAPASPAPSPVPSPTPAQPQKEQSSTQ-IPAETAVPAVPAAPTAPPTAAP 588 Query: 67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLL 126 P + A T D +E R+ R +A Q RE + +++ E +K E+Q Sbjct: 589 SVT-PSKPMAGTTDREEATRLLAEKRRQAREQREREEQERKLQA-ERDKRMREEQLAREA 646 Query: 127 QRLSQMEAENNRLSQQLAQLAAE 149 + ++ EAE R +Q A+ A+ Sbjct: 647 EARAEREAEARRREEQEAREKAQ 669 Score = 95 (38.5 bits), Expect = 0.41, P = 0.34 Identities = 41/180 (22%), Positives = 81/180 (45%) Query: 6 EKTMSSVDSLPATPASEVPVLTVS-PADTSLNSADV------KTQEVKPEEKKPAKKRKS 58 E + +V + P P + P +T S P + + + K ++ + + ++ ++RK Sbjct: 570 ETAVPAVPAAPTAPPTAAPSVTPSKPMAGTTDREEATRLLAEKRRQAREQREREEQERKL 629 Query: 59 WGQ-ELPVPKTNLPPRKRAKTEDEKE-QRRIERVLRNRAAAQTSRERKRLEMEKLENE-- 114 + + + + L A+ E E E +RR E+ R +A A+ E++RL+ +K E E Sbjct: 630 QAERDKRMREEQLAREAEARAEREAEARRREEQEAREKAQAE-QEEQERLQKQKEEAEAR 688 Query: 115 -KIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA-NTPMPGSPATASPTLTP 172 + + E+Q Q + + E E ++L ++ R S A T + TA+ P Sbjct: 689 SREEAERQRQEREKHFQKEEQERQERRKRLEEIMKRTRKSEAAETKKQDAKETAANNSGP 748 Score = 92 (37.4 bits), Expect = 0.048, Sum P(2) = 0.047 Identities = 37/148 (25%), Positives = 67/148 (45%) Query: 7 KTMSSVDSLPATPASEVPVLTVSPA--DTSLNSADVKTQ-----EVKPEEKKPAKKRKSW 59 KT ++ LP P + ++ PA S++ K++ P E KP++ R S Sbjct: 58 KTATNPKQLPLEPGNPTGQISPQPAPPQEECPSSEAKSRGPTPTATGPREAKPSR-RSSQ 116 Query: 60 GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME 119 VP ++ PP K+ + E+ ++ + R A + +K + +EK E K E Sbjct: 117 PSPTTVPASDSPPAKQ-DVKKAGERHKLAKERREERAKYLAA-KKAVWLEKEEKAKALRE 174 Query: 120 QQNQFLLQRLSQ--MEAENNRLSQQLAQ 145 +Q Q +RL + ++AE R + + Q Sbjct: 175 KQLQERRRRLEEQRLKAEQRRAALEERQ 202 Score = 56 (24.8 bits), Expect = 0.048, Sum P(2) = 0.047 Identities = 20/72 (27%), Positives = 30/72 (41%) Query: 133 EAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTP 192 E +N+R S+ + S A +P+P SP A P +Q ++P E P Sbjct: 524 EDKNHRKSRAAEEKEPAAPASPAPSPVP-SPTPAQPQK-----EQSSTQIPAETAVPAVP 577 Query: 193 SLSDYSPTLKPS 204 + PT PS Sbjct: 578 AAPTAPPTAAPS 589 >sp|Q5R452|SAFB1_PONAB Scaffold attachment factor B1 OS=Pongo abelii GN=SAFB PE=2 SV=1 Length = 914 Score = 106 (42.4 bits), Expect = 0.028, P = 0.028 Identities = 32/95 (33%), Positives = 53/95 (55%) Query: 50 KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRLEM 108 K+P K R S + ++ R +A+ E E E+ R+E + R R A Q R ER+R+E Sbjct: 609 KEPRKSRDSESHRVR-ERSEREQRMQAQWERE-ERERLE-IARERLAFQRQRLERERMER 665 Query: 109 EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL 143 E+LE E++ +E + + +R+ + E E R Q+L Sbjct: 666 ERLERERMHVEHERRREQERIHR-EREELRRQQEL 699 >sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive element-binding protein 3-like protein 3-B OS=Danio rerio GN=creb3l3b PE=3 SV=2 Length = 428 Score = 102 (41.0 bits), Expect = 0.029, P = 0.028 Identities = 36/123 (29%), Positives = 61/123 (49%) Query: 80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRL 139 +E+ ++I R +RN+ +AQ SR++K+ ++ LE+ N L +++ Q+E N L Sbjct: 207 EERILKKIRRKIRNKQSAQESRKKKKEYIDGLESRMAACSAHNHELQRKVFQLEKCNISL 266 Query: 140 SQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS---D 196 +QL +L A V +N P+ L+ TL LP + PF +S D Sbjct: 267 MEQLRRLQALVMNG-SNKPVQAGTCVLVLLLSFTLIL-----LPNLK-PFTDTKVSQHGD 319 Query: 197 YSP 199 +SP Sbjct: 320 FSP 322 >sp|Q9D439|CCD11_MOUSE Coiled-coil domain-containing protein 11 OS=Mus musculus GN=Ccdc11 PE=2 SV=3 Length = 514 Score = 103 (41.3 bits), Expect = 0.029, P = 0.028 Identities = 29/114 (25%), Positives = 55/114 (48%) Query: 43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102 Q+++ E K +KR+ G+E + L R+ + EKE R+ ++ + A+ RE Sbjct: 319 QDLQDEADKKKQKREEMGREQKIYNDYLMQRREEEKAQEKELNRLLEDIKAKKLAEKDRE 378 Query: 103 -------RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149 RK+L E + K+Q++++ Q L+ ++ R+S+ L L E Sbjct: 379 LALQRAARKQLMNEVMNTRKLQVQERLQRKLREQEELALHEQRISESLKVLHQE 432 >sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus musculus GN=Fosl1 PE=2 SV=2 Length = 273 Score = 99 (39.9 bits), Expect = 0.029, P = 0.029 Identities = 51/185 (27%), Positives = 83/185 (44%) Query: 64 PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL------EMEKLENEKIQ 117 P P P ++ E+E E+RR+ R AAA+ RK L E +KLE+EK Sbjct: 88 PPPGVRRRPCEQISPEEE-ERRRVRRERNKLAAAKCRNRRKELTDFLQAETDKLEDEKSG 146 Query: 118 MEQQNQFLLQRLSQMEA--ENNRLSQQLAQLAAEVRGSRANTPMPGSP-ATASPTLTPTL 174 ++++ + L ++ ++E E +R ++ + + G +T SP A P P + Sbjct: 147 LQREIEELQKQKERLELVLEAHRPICKIPEGDKKDPGGSGSTSGASSPPAPGRPV--PCI 204 Query: 175 FKQERDELPLERIPFPT----PSLSDYSPTLK---PSTLAESSDVAQHPAVSVAGLEGDG 227 L E + PT PSL+ ++P+L PST S + + S GD Sbjct: 205 SLSPGPVLEPEALHTPTLMTTPSLTPFTPSLVFTYPSTPEPCSSAHRKSSSS----SGDP 260 Query: 228 SALPL 232 S+ PL Sbjct: 261 SSDPL 265 >sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS=Xenopus laevis GN=mafb PE=2 SV=1 Length = 313 Score = 100 (40.3 bits), Expect = 0.029, P = 0.029 Identities = 36/140 (25%), Positives = 67/140 (47%) Query: 29 SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ-RRI 87 SP+ +S +S + Q+ + + R S Q + + L R T+D+ + ++ Sbjct: 171 SPSGSSSSSQQLHHQQ-QHSSSSAVEDRFSDDQLVSMTVRELNRHLRGFTKDDVIRLKQK 229 Query: 88 ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA 147 R L+NR AQ+ R ++ + LE EK Q+ QQ + L Q +S++ E + + +LA Sbjct: 230 RRTLKNRGYAQSCRYKRVQQKHNLEGEKTQLVQQVEQLKQEVSRLARERDAYKIKCEKLA 289 Query: 148 ----AEVRGSRANTPMPGSP 163 + R + + + P SP Sbjct: 290 NNNSSNFREAGSTSDNPSSP 309 >sp|Q54RZ9|BZPG_DICDI Probable basic-leucine zipper transcription factor G OS=Dictyostelium discoideum GN=bzpG PE=3 SV=1 Length = 372 Score = 101 (40.6 bits), Expect = 0.030, P = 0.030 Identities = 24/80 (30%), Positives = 44/80 (55%) Query: 74 KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQME 133 K ++KE +R +R+++NR +A SR+RKR + LE+ ++ + + + LS +E Sbjct: 268 KELSQVEKKELKRQKRLIKNRESAHLSRQRKRERLTDLEHRVEELSSNSIDINKTLSSLE 327 Query: 134 AENNRLSQQLAQLAAEVRGS 153 EN L ++ QL + S Sbjct: 328 NENLILKAEVGQLFEVINDS 347 >sp|A0JMK9|CAF1A_DANRE Chromatin assembly factor 1 subunit A OS=Danio rerio GN=chaf1a PE=1 SV=1 Length = 863 Score = 109 (43.4 bits), Expect = 0.030, Sum P(2) = 0.030 Identities = 57/229 (24%), Positives = 99/229 (43%) Query: 1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS-LNSAD-VKTQEVKPEEKKPAKKRKS 58 +S + S + S P P+ P +PA TS +N+A+ VK + +K +++ K+R+ Sbjct: 208 LSTGSTSSASVIASSPE-PSKSAPT---TPASTSRINAANKVKRRSLKSVQEQEEKQRQR 263 Query: 59 WGQE-LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERK-RLEMEKLENEKI 116 +E L +K+ + KE++ E+ + + RE+K R E EK + K Sbjct: 264 DEKERLKQEAKAAKEKKKEEARKMKEEKEREKKEKKEKDEKERREKKERDEKEKADKLKA 323 Query: 117 QMEQQNQFLLQRLSQM--EAENNRLSQQLAQLAAEVRG-----SRANTPM-PGSPATASP 168 + EQ+ + +L + + E RL ++ ++ AE + T + P + A+A Sbjct: 324 KEEQRQMKIEAKLEEKRKKEEEKRLKEEKDRIKAEKAEITRFLQKPKTQLAPKTLASACG 383 Query: 169 TLTPTLFKQERDELPLERIPFPTPSLSDYSPTL-KP-STLAESSDVAQH 215 P K PL R+ L D L +P STL D H Sbjct: 384 KFAPFEIKAHMSLAPLTRVQCEDSVLEDLDRYLAQPDSTLNGLKDWTGH 432 Score = 40 (19.1 bits), Expect = 0.030, Sum P(2) = 0.030 Identities = 16/51 (31%), Positives = 19/51 (37%) Query: 236 GSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGD 286 G L H DD DDD + D P + E A + EGGD Sbjct: 524 GESLSHSEGDDDDEAGEDDDDD-----DGFFVPHGYLSEGEGALEDEEGGD 569 >sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gallus gallus GN=FOSL2 PE=1 SV=1 Length = 323 Score = 100 (40.3 bits), Expect = 0.031, P = 0.030 Identities = 39/146 (26%), Positives = 70/146 (47%) Query: 68 TNLPPRKRAK--TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125 T + R+R + + +E+E+RRI R RN+ AA R R+R EKL+ E +E++ L Sbjct: 108 TTVGRRRRDEQLSPEEEEKRRIRRE-RNKLAAAKCRNRRRELTEKLQAETEVLEEEKSVL 166 Query: 126 LQRLSQMEAENNRLSQQLAQLAAEVRGS---RANTPMPGSPATASPTLTPTLFKQERDEL 182 + +++++ E +L L + + S R + P + + + KQE E Sbjct: 167 QKEIAELQKEKEKLEFMLVAHSPVCKISPEERRSPPTSSLQSVRTGASGAVVVKQEPVE- 225 Query: 183 PLERIPFPTPSLSDYSPT-LKPSTLA 207 E IP + L + +KP ++A Sbjct: 226 --EEIPSSSLVLDKAQRSVIKPISIA 249 >sp|A2R346|KAPC_ASPNC Putative transcription factor kapC OS=Aspergillus niger (strain CBS 513.88 / FGSC A1513) GN=kapC PE=3 SV=2 Length = 283 Score = 99 (39.9 bits), Expect = 0.031, P = 0.031 Identities = 36/159 (22%), Positives = 69/159 (43%) Query: 66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125 P+ ++ KT ++ +R +NRAA + R+RK + KLE + + + N+ Sbjct: 85 PQPEPTGQESPKTYGKRPLSTSKRAAQNRAAQRAFRQRKESYIRKLEEQVKEFDNTNE-- 142 Query: 126 LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MPGSPATASPTLTPTLFKQERDELPL 184 + Q++AEN +L + + L + + S+ P +PG+ P ++ P Sbjct: 143 --TMKQLQAENYQLREYIINLQSRLLDSQGEVPELPGNIDLNQPRNDISV---PPPGAPA 197 Query: 185 ERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL 223 P P P + + A + D+ ++VAGL Sbjct: 198 ATGPAPGPGGAPQQMQVPNPGAATNEDMNSLNRIAVAGL 236 >sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis catus GN=FOS PE=2 SV=1 Length = 381 Score = 101 (40.6 bits), Expect = 0.031, P = 0.031 Identities = 50/175 (28%), Positives = 72/175 (41%) Query: 74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 +R K E +E+E+RRI R RN+ AA R R+R + L+ E Q+E + L + Sbjct: 126 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEI 184 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183 + + E +L LA + + P + AS L+ P E +E LP Sbjct: 185 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMSVASLDLSGGLPEAATPESEEAFTLP 243 Query: 184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GS 237 L P P PS+ AE D PA S ++P DL GS Sbjct: 244 LLNDPEPKPSVEPVKSISSMELKAEPFDDFLFPASSRPSGSETARSVPDMDLSGS 298 >sp|P26042|MOES_PIG Moesin OS=Sus scrofa GN=MSN PE=2 SV=3 Length = 577 Score = 103 (41.3 bits), Expect = 0.034, P = 0.033 Identities = 26/103 (25%), Positives = 52/103 (50%) Query: 49 EKKPAKKRKSWGQELPVPKTNLPPR-KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107 EKK + + +++ K L R K+ + + +K Q+ +E R A + R+R + E Sbjct: 326 EKKKREMAEKEKEKIEREKEELMERLKQIEEQTKKAQQELEEQTRRALALEQERKRAQSE 385 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV 150 EKL E+ + E+ + LL+ + +L+ ++A+L A + Sbjct: 386 AEKLAKERQEAEEAKEALLKASRDQKKTQEQLALEMAELTARI 428 Score = 102 (41.0 bits), Expect = 0.043, P = 0.042 Identities = 30/97 (30%), Positives = 51/97 (52%) Query: 66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125 P T + +A+ +EK Q+++ER L E+K+ EM + E EKI+ E++ L Sbjct: 297 PDTIEVQQMKAQAREEKHQKQMERAL-------LENEKKKREMAEKEKEKIEREKEE--L 347 Query: 126 LQRLSQMEAENNRLSQQLAQ-----LAAEVRGSRANT 157 ++RL Q+E + + Q+L + LA E RA + Sbjct: 348 MERLKQIEEQTKKAQQELEEQTRRALALEQERKRAQS 384 >sp|Q2HJ49|MOES_BOVIN Moesin OS=Bos taurus GN=MSN PE=2 SV=3 Length = 577 Score = 103 (41.3 bits), Expect = 0.034, P = 0.033 Identities = 26/103 (25%), Positives = 51/103 (49%) Query: 49 EKKPAKKRKSWGQELPVPKTNLPPR-KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107 EKK + + +++ K L R K+ + + +K Q+ +E R + R+R + E Sbjct: 326 EKKKREMAEKEKEKIEREKEELMERLKQIEEQTKKAQQELEEQTRRALELEQERKRAQSE 385 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV 150 EKL E+ + E+ + LLQ + +L+ ++A+L A + Sbjct: 386 AEKLAKERQEAEEAKEALLQASQDQKKTQEQLALEMAELTARI 428 Score = 101 (40.6 bits), Expect = 0.056, P = 0.055 Identities = 25/80 (31%), Positives = 45/80 (56%) Query: 66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125 P T + +A+ +EK Q+++ER L E+K+ EM + E EKI+ E++ L Sbjct: 297 PDTIEVQQMKAQAREEKHQKQMERAL-------LENEKKKREMAEKEKEKIEREKEE--L 347 Query: 126 LQRLSQMEAENNRLSQQLAQ 145 ++RL Q+E + + Q+L + Sbjct: 348 MERLKQIEEQTKKAQQELEE 367 >sp|A5FV21|IF2_ACICJ Translation initiation factor IF-2 OS=Acidiphilium cryptum (strain JF-5) GN=infB PE=3 SV=1 Length = 887 Score = 105 (42.0 bits), Expect = 0.035, P = 0.034 Identities = 59/225 (26%), Positives = 89/225 (39%) Query: 48 EEKKP-AKKRKSWGQELP--VPKTNLPPRKRAKTEDEKEQRRIERVLRNR------AAAQ 98 E +P A R S G P + R+RA E ++E R+E R + +AA+ Sbjct: 60 ETGRPSAPSRASGGAAAPRGLTAAEQAARQRAVVEQQREAARLEAERREQEKISILSAAE 119 Query: 99 TSRERKRLEMEKLEN-EKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT 157 +R + E E E+++ E++ +R + EAE R ++ AA + A + Sbjct: 120 EARRKAEEEARAAEEAERLRAEEE----ARRREEEEAERRRAAEASQATAAPPAPAAAAS 175 Query: 158 PMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPA 217 P PA PT P P R P P + S TL+ D + A Sbjct: 176 PRAAMPA---PTAAPA----RPGAAPARRTA-PVPPATSASETLRLRAARTGRD-EEEEA 226 Query: 218 VSVAGLEGDGSA------LPL-FDLGSDLKHHSTDDVAAPLSDDD 255 A G G+A +P +G D + + DV A LS DD Sbjct: 227 SRPARRPGSGAAPSRKPSVPAPKKVGDDRRRGARIDVQAALSGDD 271 Score = 94 (38.1 bits), Expect = 0.56, P = 0.43 Identities = 54/219 (24%), Positives = 81/219 (36%) Query: 27 TVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRR 86 TV + + +++ V+ E +K K+ + G E P P R + Sbjct: 27 TVDAGSVRQSFSHGRSKVVQVEVRK--KRGGAAGAETGRPSA--PSRASGGAAAPRGLTA 82 Query: 87 IERVLRNRAAAQTSRERKRLEMEKLENEKIQM-----------EQQNQFL--LQRLSQME 133 E+ R RA + RE RLE E+ E EKI + E++ + +RL + E Sbjct: 83 AEQAARQRAVVEQQREAARLEAERREQEKISILSAAEEARRKAEEEARAAEEAERL-RAE 141 Query: 134 AENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDELPLERIPFP 190 E R ++ A+ S+A P A ASP PT P R P Sbjct: 142 EEARRREEEEAERRRAAEASQATAAPPAPAAAASPRAAMPAPTAAPARPGAAPARRTA-P 200 Query: 191 TPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSA 229 P + S TL+ D + A A G G+A Sbjct: 201 VPPATSASETLRLRAARTGRD-EEEEASRPARRPGSGAA 238 >sp|A6SCT6|DBP3_BOTFB ATP-dependent RNA helicase dbp3 OS=Botryotinia fuckeliana (strain B05.10) GN=dbp3 PE=3 SV=1 Length = 592 Score = 103 (41.3 bits), Expect = 0.035, P = 0.034 Identities = 52/186 (27%), Positives = 84/186 (45%) Query: 32 DTSLNSAD--VKTQEVKP-EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE 88 DT LNS D +K K +EKK K++KS +++ P T P + + E KE RR Sbjct: 8 DTELNSGDNDIKISSKKSRKEKKDKKEKKS--KDVEEPTTESTPIE-VEVES-KEARRER 63 Query: 89 RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA 148 + L+ AQ + E++ E EK E I+ + +AE RL + L + Sbjct: 64 KRLKKEKKAQEA-EKETEEEEKSGVEAIEPASDANAAADAKAAKKAEKARL-KALKKEGK 121 Query: 149 EVRGSRANTPMPGSPATASPTLTPTLFKQERD--ELPLERIP-FPTP---SLSD---YSP 199 E + + +PA+ +P T + ++ + LP I F T +++D S Sbjct: 122 EEKADSTKSIETAAPASVTPQQNGTTYTEDPNLSGLPQSEIDSFLTTHFITITDPLSTSA 181 Query: 200 TLKPST 205 TL+P T Sbjct: 182 TLRPLT 187 >sp|Q7PGE8|EIF3A_ANOGA Eukaryotic translation initiation factor 3 subunit A OS=Anopheles gambiae GN=eIF3-S10 PE=3 SV=4 Length = 1121 Score = 106 (42.4 bits), Expect = 0.036, P = 0.035 Identities = 47/146 (32%), Positives = 65/146 (44%) Query: 35 LNSADVKTQEVKPEEKKP-AKKRKSWGQELPVP-KTNLPPR-------KRAK--TEDEKE 83 L DV Q++K E A+K K + Q L K L R +R K E E+E Sbjct: 754 LPDRDVYWQQLKNERGNQFAEKLKQFNQALEEERKRRLADRVVKRREERRMKWLKEKEEE 813 Query: 84 QRRIERVLRNRAAAQTSRERKRLEMEK-LENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 +RRIE LR + E R+E E+ E +IQ E+ Q ++L+ E R ++ Sbjct: 814 RRRIEEELRKQ-----KEEADRIERERRAEERRIQDEKNRQLAEKQLAIAEEVERRRREE 868 Query: 143 LAQLAAEVRGSRANTPMPGSPATASP 168 L Q+ E G R P G PA P Sbjct: 869 LEQMK-EADGRRERRPAAG-PAEPKP 892 >sp|O77788|NFM_BOVIN Neurofilament medium polypeptide OS=Bos taurus GN=NEFM PE=1 SV=3 Length = 926 Score = 105 (42.0 bits), Expect = 0.037, P = 0.036 Identities = 51/193 (26%), Positives = 86/193 (44%) Query: 39 DVKTQEVKP-EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA 97 +VK +E + EEK+ A++ ++ PV K P K + E E+E+ + E AA Sbjct: 488 EVKEEEAEEKEEKEEAEEEVVAAKKSPV-KATAPELKEEEGEKEEEEGQEEEEEEEEAAK 546 Query: 98 QTSRERKRLEME-KLENEKIQMEQQNQFLLQRLSQ---MEAENNRLSQQLAQ-------L 146 E E E E E+ + E++ + + + EA+ + ++ A+ L Sbjct: 547 SDQAEEGGSEKEGSSEKEEGEQEEEGETEAEGEGEEAAAEAKEEKKMEEKAEEVAPKEEL 606 Query: 147 AAEVR---GSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKP 203 AAE + +A +P+ SP T SPT K + P + P ++ SPT K Sbjct: 607 AAEAKVEKPEKAKSPVAKSPTTKSPTAKSPEAKSPEAKSPTAKSPTAKSPVAK-SPTAK- 664 Query: 204 STLAESSDVAQHP 216 S A+S + A+ P Sbjct: 665 SPEAKSPE-AKSP 676 >sp|Q9JTB5|IF2_NEIMA Translation initiation factor IF-2 OS=Neisseria meningitidis serogroup A GN=infB PE=3 SV=1 Length = 962 Score = 105 (42.0 bits), Expect = 0.038, P = 0.038 Identities = 41/169 (24%), Positives = 69/169 (40%) Query: 17 ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR- 75 A PA++ P T + A+T+ +A+ K E EK A K S P K P +R Sbjct: 151 AKPAAQKP--TEAKAETAPVAAETKPAEESKAEKAQADKMPSKKPAEPKEKAAKPKHERN 208 Query: 76 AKTEDEKEQRRI------ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 K +D K+ + + V+ AQ E +R + E + E+Q + + Sbjct: 209 GKGKDAKKPAKPAAPAVPQPVVSAEEQAQRDEEARRAAALRAHQEALLKEKQERQARREA 268 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE 178 + +AE + Q A+ + A P +PA + + P K+E Sbjct: 269 MKQQAEQQAKAAQEAKTGRQRPAKPAEKPQAAAPAVENKPVNPAKAKKE 317 >sp|Q9JYD2|IF2_NEIMB Translation initiation factor IF-2 OS=Neisseria meningitidis serogroup B GN=infB PE=3 SV=1 Length = 962 Score = 105 (42.0 bits), Expect = 0.038, P = 0.038 Identities = 41/169 (24%), Positives = 69/169 (40%) Query: 17 ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR- 75 A PA++ P T + A+T+ +A+ K E EK A K S P K P +R Sbjct: 151 AKPAAQKP--TEAKAETAPVAAETKPAEESKAEKAQADKMPSEKPAEPKEKAAKPKHERN 208 Query: 76 AKTEDEKEQRRI------ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 K +D K+ + + V+ AQ E +R + E + E+Q + + Sbjct: 209 GKGKDAKKPAKPAAPAVPQPVVSAEEQAQRDEEARRAAALRAHQEALLKEKQERQARREA 268 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE 178 + +AE + Q A+ + A P +PA + + P K+E Sbjct: 269 MKQQAEQQAKAAQEAKTGRQRPAKPAEKPQAAAPAVENKPVNPAKAKKE 317 >sp|A1KV51|IF2_NEIMF Translation initiation factor IF-2 OS=Neisseria meningitidis serogroup C / serotype 2a (strain ATCC 700532 / FAM18) GN=infB PE=3 SV=1 Length = 962 Score = 105 (42.0 bits), Expect = 0.038, P = 0.038 Identities = 41/169 (24%), Positives = 69/169 (40%) Query: 17 ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR- 75 A PA++ P T + A+T+ +A+ K E EK A K S P K P +R Sbjct: 151 AKPAAQKP--TEAKAETAPVAAETKPAEESKAEKAQADKMPSKKPAEPKEKAAKPKHERN 208 Query: 76 AKTEDEKEQRRI------ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 K +D K+ + + V+ AQ E +R + E + E+Q + + Sbjct: 209 GKGKDAKKPAKPAAPAVPQPVVSAEEQAQRDEEARRAAALRAHQEALLKEKQERQARREA 268 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE 178 + +AE + Q A+ + A P +PA + + P K+E Sbjct: 269 MKQQAEQQAKAAQEAKTGRQRPAKPAEKPQAAAPAVENKPVNPAKAKKE 317 >sp|P0C5H8|KAPC_EMENI Putative transcription factor kapC OS=Emericella nidulans GN=kapC PE=3 SV=1 Length = 278 Score = 98 (39.6 bits), Expect = 0.039, P = 0.038 Identities = 36/147 (24%), Positives = 65/147 (44%) Query: 17 ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA 76 A P P T SP D + + + P + PA+ + E P Sbjct: 49 AQPHHLQPTATTSPRDQNNIDPAISGGAMLPPSQPPAQPEPTVEDETP------------ 96 Query: 77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136 KT ++ +R +NRAA + R+RK + KLE E+++ + + + Q ++AEN Sbjct: 97 KTYGKRPLSTSKRAAQNRAAQRAFRQRKESYIRKLE-EQVK---EYEVMSQEYKALQAEN 152 Query: 137 NRLSQQLAQLAAEVRGSRANTP-MPGS 162 +L + + L + + S+ P +PG+ Sbjct: 153 YQLREYVINLQSRLLDSQGEVPELPGN 179 >sp|Q80YR5|SAFB2_MOUSE Scaffold attachment factor B2 OS=Mus musculus GN=Safb2 PE=1 SV=2 Length = 991 Score = 105 (42.0 bits), Expect = 0.040, P = 0.039 Identities = 50/163 (30%), Positives = 81/163 (49%) Query: 5 MEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ-----EVKPEEK-KPAKKRKS 58 ME+T+ +D P V + S D S S D K++ ++ +K K ++R+ Sbjct: 610 MERTVV-MDKSKGEPVISVKATSRSK-DRSSKSQDRKSEGREKRDILSFDKIKEQRERER 667 Query: 59 WGQ-ELPVPKTNLPPRKRAKTEDEKEQR------RIE--RVLRNRAAAQTSR---ERKRL 106 Q E + +T R+R + + E+EQR R E R+ R R Q R ER+RL Sbjct: 668 QRQREREIRETE---RRREREQREREQRLDAFQERREKARLQRERMQLQCQRQRLERERL 724 Query: 107 EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149 E E+LE E++++E++ + QR+ + E L +Q QL AE Sbjct: 725 ERERLERERMRVERERRKEQQRIMR---EREELRRQQEQLRAE 764 >sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodopus roborovskii GN=FOS PE=3 SV=1 Length = 381 Score = 100 (40.3 bits), Expect = 0.040, P = 0.039 Identities = 52/176 (29%), Positives = 73/176 (41%) Query: 74 KRAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 +R K E +E+E+RRI R RN+ AA R R+R + L+ E Q+E + L + Sbjct: 125 RRGKVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEI 183 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LP 183 + + E +L LA + + P + AS LT P E +E LP Sbjct: 184 ANLLKEKEKLEFILAAHRPACK-IPDDLGFPEDMSVASLDLTGGLPEAATPESEEAFSLP 242 Query: 184 LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS-VAGLEGDGSALPLFDL-GS 237 L P P SL AE D A S +G E ++P DL GS Sbjct: 243 LLNEPEPKTSLESVKSISSMELKAEPFDDFLFSASSRPSGSETTARSVPDMDLSGS 298 >sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS=Xenopus tropicalis GN=mafa PE=2 SV=1 Length = 289 Score = 98 (39.6 bits), Expect = 0.042, P = 0.041 Identities = 26/85 (30%), Positives = 47/85 (55%) Query: 83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 +Q+R R L+NR AQ+ R ++ + LE EK Q++ Q + L Q +S++ E + + Sbjct: 203 KQKR--RTLKNRGYAQSCRYKRVQQRHILETEKCQLQSQVEQLKQEVSRLAKERDLYKDK 260 Query: 143 LAQLAAEVRGSRANTPMPGSPATAS 167 +LA+ +R + P G+P A+ Sbjct: 261 YEKLASRSFTTRESPPQ-GNPGKAN 284 >sp|P26038|MOES_HUMAN Moesin OS=Homo sapiens GN=MSN PE=1 SV=3 Length = 577 Score = 102 (41.0 bits), Expect = 0.043, P = 0.042 Identities = 26/103 (25%), Positives = 51/103 (49%) Query: 49 EKKPAKKRKSWGQELPVPKTNLPPR-KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107 EKK + + +++ K L R K+ + + +K Q+ +E R + R+R + E Sbjct: 326 EKKKREMAEKEKEKIEREKEELMERLKQIEEQTKKAQQELEEQTRRALELEQERKRAQSE 385 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV 150 EKL E+ + E+ + LLQ + +L+ ++A+L A + Sbjct: 386 AEKLAKERQEAEEAKEALLQASRDQKKTQEQLALEMAELTARI 428 Score = 101 (40.6 bits), Expect = 0.056, P = 0.055 Identities = 25/80 (31%), Positives = 45/80 (56%) Query: 66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125 P T + +A+ +EK Q+++ER A E+K+ EM + E EKI+ E++ L Sbjct: 297 PDTIEVQQMKAQAREEKHQKQMER-------AMLENEKKKREMAEKEKEKIEREKEE--L 347 Query: 126 LQRLSQMEAENNRLSQQLAQ 145 ++RL Q+E + + Q+L + Sbjct: 348 MERLKQIEEQTKKAQQELEE 367 >sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattus norvegicus GN=Hlf PE=2 SV=1 Length = 295 Score = 98 (39.6 bits), Expect = 0.044, P = 0.043 Identities = 39/151 (25%), Positives = 66/151 (43%) Query: 2 SCDMEKTMSSVDSLPA---TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS 58 +C M+ + LPA TP+ P P + AD+ + E +KRK Sbjct: 142 NC-MQNPIRPGQLLPANRNTPSPIDPDTIQVPVGYEPDPADLALSSIPGPEMFDPRKRKF 200 Query: 59 WGQEL-PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQ 117 +EL P P RK +D K+ + R +N AA+ SR+ +RL+ ++ Sbjct: 201 SEEELKPQPMIK-KARKVFIPDDLKDDKYWARRRKNNMAAKRSRDARRLKENQIAIRASF 259 Query: 118 MEQQNQFLLQRLSQMEAENNRLSQQLAQLAA 148 +E++N L Q ++ + E + LA+ A Sbjct: 260 LEKENSALRQEVADLRKELGKCKNILAKYEA 290 >sp|A0JMT0|CA1AB_XENLA Chromatin assembly factor 1 subunit A-B OS=Xenopus laevis GN=chaf1a-B PE=2 SV=2 Length = 885 Score = 104 (41.7 bits), Expect = 0.045, P = 0.044 Identities = 32/114 (28%), Positives = 56/114 (49%) Query: 29 SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE 88 S + SL+S DV+T P+ G+ +N ++ KT+D+ E+R+ E Sbjct: 216 SSSPVSLSSPDVQTGSKFTNGSSPSTSTTPTGKAT----SNKTSAEKKKTKDKAEKRQAE 271 Query: 89 RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 + R A + +R K L +K E E+ Q E+ + +R + +AE NRL ++ Sbjct: 272 KEERE-CARREARAAKDLAKKKREGEREQREKDKKEKKEREDREKAEKNRLKEE 324 Score = 103 (41.3 bits), Expect = 0.058, P = 0.056 Identities = 47/206 (22%), Positives = 91/206 (44%) Query: 8 TMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK 67 T S S TP + S A+ + ++ + EE++ A++ ++L K Sbjct: 234 TNGSSPSTSTTPTGKATSNKTS-AEKKKTKDKAEKRQAEKEERECARREARAAKDLAKKK 292 Query: 68 TNLPPRKRAKTEDEKEQRRI-ERVLRNRAAAQTSRER-KRLEMEKLENEKIQMEQQNQFL 125 +R K + EK++R E+ +NR + +E+ + LE ++ E K + E++ + Sbjct: 293 REGEREQREKDKKEKKEREDREKAEKNRLKEEKKKEKLEALEAKQEEKRKKEEEKRQKEE 352 Query: 126 LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM-PGSPATASPTLTPTLFKQERDELPL 184 +RL + E R+ + A++ ++ + TP P + A + P K+ PL Sbjct: 353 EKRLKE---EEKRIKAEKAEITRFLQ--KPKTPQAPKTFARSCGKFAPFEIKKGMALAPL 407 Query: 185 ERIPFPTPSLSDYSPTLKPSTLAESS 210 RI F + + L+ T +ESS Sbjct: 408 CRIDFEQEASEELDIFLQEQT-SESS 432 >sp|Q6Y7W6|PERQ2_HUMAN PERQ amino acid-rich with GYF domain-containing protein 2 OS=Homo sapiens GN=GIGYF2 PE=1 SV=1 Length = 1299 Score = 112 (44.5 bits), Expect = 0.045, Sum P(2) = 0.044 Identities = 40/140 (28%), Positives = 73/140 (52%) Query: 48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107 EE++ ++ + +EL + K K A+ E+E+ QRR+E NR + R R E Sbjct: 824 EERRREEEERRKQEEL-LRKQEEEAAKWAR-EEEEAQRRLEE---NRLRMEEEAARLRHE 878 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEA----ENNRLSQQLAQL---AAEVRGSRANTPMP 160 E+ + +++++++Q + + QR Q EA + + QQLAQ+ ++ G ++NT Sbjct: 879 EEERKRKELEVQRQKELMRQRQQQQEALRRLQQQQQQQQLAQMKLPSSSTWGQQSNTTAC 938 Query: 161 GSPATASPTLTPTLFKQERD 180 S AT S L ++ER+ Sbjct: 939 QSQATLSLAEIQKL-EEERE 957 Score = 39 (18.8 bits), Expect = 0.045, Sum P(2) = 0.044 Identities = 9/33 (27%), Positives = 18/33 (54%) Query: 1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT 33 M D+++ +S + S A+P +P +P+ T Sbjct: 429 MVADVQQPLSQIPSDTASPLLILPPPVPNPSPT 461 >sp|Q8WYK2|JDP2_HUMAN Jun dimerization protein 2 OS=Homo sapiens GN=JDP2 PE=1 SV=1 Length = 163 Score = 92 (37.4 bits), Expect = 0.046, P = 0.045 Identities = 36/123 (29%), Positives = 56/123 (45%) Query: 48 EEKKPAKKRKSWGQELPVPKTNLPPRKR---AKTE-DEKEQRRIERVLRNRAAAQTSRER 103 EE K A R P+ + KR K+E DE+E+RR R +N+ AA R + Sbjct: 33 EELKYADIRNLGAMIAPLHFLEVKLGKRPQPVKSELDEEEERRKRRREKNKVAAARCRNK 92 Query: 104 KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE--VRGSRANTP-MP 160 K+ E L+ E ++E N L ++ +++ E +L L + VR TP Sbjct: 93 KKERTEFLQRESERLELMNAELKTQIEELKQERQQLILMLNRHRPTCIVRTDSVKTPESE 152 Query: 161 GSP 163 G+P Sbjct: 153 GNP 155 >sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive element-binding protein 5 OS=Mus musculus GN=Creb5 PE=2 SV=3 Length = 357 Score = 99 (39.9 bits), Expect = 0.047, P = 0.046 Identities = 28/92 (30%), Positives = 49/92 (53%) Query: 52 PAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKL 111 PA ++ Q + P+ R+R ED E+RR + + RNRAAA R+++++ + L Sbjct: 194 PATQQMQPTQTIQPPQPTGGRRRRVVDEDPDERRR-KFLERNRAAATRCRQKRKVWVMSL 252 Query: 112 ENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL 143 E + ++ Q N L +S ++ E +L Q L Sbjct: 253 EKKAEELTQTNMQLQNEVSMLKNEVAQLKQLL 284 >sp|Q9C0A6|SETD5_HUMAN SET domain-containing protein 5 OS=Homo sapiens GN=SETD5 PE=1 SV=2 Length = 1442 Score = 106 (42.4 bits), Expect = 0.047, P = 0.046 Identities = 45/204 (22%), Positives = 87/204 (42%) Query: 2 SCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQ 61 +C ++K + LP P P L A+T A K E++ + + + Q Sbjct: 410 NCPIQKRNPNATELPLLPPP--PSLPTIGAETRRRKARRKELEMEQQNEASEENNDQQSQ 467 Query: 62 ELPVPKTNLPPRKRAKTEDEKEQRRIERVL---RNRAAAQTSRERKRLE--MEKLENEKI 116 E+P T + +EK + E V+ N A ++ +RE +++E M EN + Sbjct: 468 EVPEKVTVSSDHEEVDNPEEKPEEEKEEVIDDQENLAHSRRTREDRKVEAIMHAFENLEK 527 Query: 117 QMEQQNQFLLQRLSQME----AENNRLSQQLAQLA--AEVRGSRANTPMPGSPATASPTL 170 + ++++Q L Q S +E + ++ A +EV S +N +P +P + Sbjct: 528 RKKRRDQPLEQSNSDVEITTTTSETPVGEETKTEAPESEVSNSVSNVTIPSTPQSVGVN- 586 Query: 171 TPTLFKQERDELPLER-IPFPTPS 193 T + ++ E+ +P P P+ Sbjct: 587 --TRRSSQAGDIAAEKLVPKPPPA 608 >sp|Q92575|UBXN4_HUMAN UBX domain-containing protein 4 OS=Homo sapiens GN=UBXN4 PE=1 SV=2 Length = 508 Score = 101 (40.6 bits), Expect = 0.047, P = 0.046 Identities = 58/224 (25%), Positives = 98/224 (43%) Query: 22 EVPVLTVSPADTSLN--SADVKTQEVKPE---EKKPAKKRKSWGQELPVPKTNLPPRKRA 76 E+P + + +DT+ SA T +P +++PA+ + L L R+ Sbjct: 156 EIPPTSDTKSDTATGGESAGHATSSQEPSGCSDQRPAEDLNIRVERLT---KKLEERREE 212 Query: 77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136 K ++E EQR I++ + R + + KR + E+L K +E++N+ ++ A Sbjct: 213 KRKEE-EQREIKKEIERRKTGKEMLDYKRKQEEELT--KRMLEERNR----EKAEDRAAR 265 Query: 137 NRLSQQLAQLAAEVRGSR-ANTPMPGSPATASPTLTPTL---FKQE---RDELPLERIPF 189 R+ QQ+A AE R +R A T A A+ L K+E R+ + RI F Sbjct: 266 ERIKQQIALDRAE-RAARFAKTKEEVEAAKAAALLAKQAEMEVKRESYARERSTVARIQF 324 Query: 190 PTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLF 233 P S ++ PS A + Q A +V G+ S +F Sbjct: 325 RLPDGSSFTNQF-PSD-APLEEARQFAAQTVGNTYGNFSLATMF 366 >sp|Q5R4I3|UBXN4_PONAB UBX domain-containing protein 4 OS=Pongo abelii GN=UBXN4 PE=2 SV=1 Length = 508 Score = 101 (40.6 bits), Expect = 0.047, P = 0.046 Identities = 58/224 (25%), Positives = 98/224 (43%) Query: 22 EVPVLTVSPADTSLN--SADVKTQEVKPE---EKKPAKKRKSWGQELPVPKTNLPPRKRA 76 E+P + + +DT+ SA T +P +++PA+ + L L R+ Sbjct: 156 EIPPTSDTKSDTATGGESAGHATSSQEPSGCSDQRPAEDLNIRVERLT---KKLEERREE 212 Query: 77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136 K ++E EQR I++ + R + + KR + E+L K +E++N+ ++ A Sbjct: 213 KRKEE-EQREIKKEIERRKTGKEMLDYKRKQEEELT--KRMLEERNR----EKAEDRAAR 265 Query: 137 NRLSQQLAQLAAEVRGSR-ANTPMPGSPATASPTLTPTL---FKQE---RDELPLERIPF 189 R+ QQ+A AE R +R A T A A+ L K+E R+ + RI F Sbjct: 266 ERIKQQIALDRAE-RAARFAKTKEEVEAAKAAALLAKQAEMEVKRESYARERSTVARIQF 324 Query: 190 PTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLF 233 P S ++ PS A + Q A +V G+ S +F Sbjct: 325 RLPDGSSFTNQF-PSD-APLEEARQFAAQTVGNTYGNFSLATMF 366 >sp|P14233|TGA1B_TOBAC TGACG-sequence-specific DNA-binding protein TGA-1B (Fragment) OS=Nicotiana tabacum GN=TGA1B PE=2 SV=1 Length = 242 Score = 96 (38.9 bits), Expect = 0.049, P = 0.048 Identities = 25/63 (39%), Positives = 40/63 (63%) Query: 80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRL 139 DE E++R R++RNR +AQ SR+RK+ +E+LE++ M Q L +++ + AEN L Sbjct: 181 DEDEKKRA-RLVRNRESAQLSRQRKKHYVEELEDKVRIMHSTIQDLNAKVAYIIAENATL 239 Query: 140 SQQ 142 Q Sbjct: 240 KTQ 242 >sp|A9M1D5|IF2_NEIM0 Translation initiation factor IF-2 OS=Neisseria meningitidis serogroup C (strain 053442) GN=infB PE=3 SV=1 Length = 962 Score = 104 (41.7 bits), Expect = 0.049, P = 0.048 Identities = 41/169 (24%), Positives = 69/169 (40%) Query: 17 ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR- 75 A PA++ P T + A+T+ +A+ K E EK A K S P K P +R Sbjct: 151 AKPAAQKP--TEAKAETAPVAAETKPAEESKAEKAQADKMPSKKPAEPKEKAAKPKHERN 208 Query: 76 AKTEDEKEQRRI------ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 K +D K+ + + V+ AQ E +R + E + E+Q + + Sbjct: 209 GKGKDAKKPAKPAAPAVPQPVVSAEEQAQRDEEARRAAALRAHQEALLKEKQERQARREA 268 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE 178 + +AE + Q A+ + A P +PA + + P K+E Sbjct: 269 MKQQAEQQAKAAQEAKTGRQRPAKPAEKPQAAAPALENKPVNPAKAKKE 317 >sp|Q554P0|BZPJ_DICDI Probable basic-leucine zipper transcription factor J OS=Dictyostelium discoideum GN=bzpJ PE=3 SV=1 Length = 787 Score = 103 (41.3 bits), Expect = 0.050, P = 0.049 Identities = 27/99 (27%), Positives = 52/99 (52%) Query: 80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRL 139 +EKE ++ R+++NR A SR R+++ +E +E + + Q + +L+ ++ EN L Sbjct: 546 EEKELKKQRRLVKNREYASQSRSRRKIYVENIETKLQKTNQDCASIKSQLNSVKEENKAL 605 Query: 140 SQQLAQLAAEVRGSRANTPMPG---SPATASPTLTPTLF 175 +QL L ++ + + G SP + T + TLF Sbjct: 606 KKQLYSLTNTLKSNPSLAEAFGKIFSPIGNNKTSSATLF 644 >sp|Q8N9W4|GG6L2_HUMAN Golgin subfamily A member 6-like protein 2 OS=Homo sapiens PE=2 SV=2 Length = 650 Score = 102 (41.0 bits), Expect = 0.051, P = 0.049 Identities = 27/105 (25%), Positives = 56/105 (53%) Query: 43 QEVKPEEKKPAKKR-KSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR 101 +E++ +EKK K+ K W QE L ++ E E++ RR E+ LR + + Sbjct: 279 EELREQEKKIRKQEEKMWRQE-----ERLREQEGKMREQEEKMRRQEKRLREQEKELREQ 333 Query: 102 ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146 E++ E +KL ++ QM++Q + + ++ +M + ++ +Q +L Sbjct: 334 EKELREQKKLREQEEQMQEQEEKMWEQEEKMREQEEKMWRQEERL 378 Score = 85 (35.0 bits), Expect = 3.7, P = 0.98 Identities = 25/93 (26%), Positives = 46/93 (49%) Query: 48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL- 106 EEK ++ K W QE + + R++ + ++E+R E+ R R + RE++++ Sbjct: 361 EEKMREQEEKMWRQEERLWEQEKQMREQEQKMRDQEERMWEQDERLREKEERMREQEKMW 420 Query: 107 -EMEKLENEKIQMEQQNQFLLQRLSQMEAENNR 138 ++EK+ EK EQ+ + Q E E R Sbjct: 421 EQVEKMREEKKMQEQEKKTRDQEEKMQEEERIR 453 Score = 84 (34.6 bits), Expect = 4.8, P = 0.992 Identities = 21/108 (19%), Positives = 54/108 (50%) Query: 35 LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR 94 L + K +E + + ++ K+ + +EL + L +K+ + ++E+ Q + E++ Sbjct: 302 LREQEGKMREQEEKMRRQEKRLREQEKELREQEKELREQKKLREQEEQMQEQEEKMWEQE 361 Query: 95 AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 + E+ + E+L ++ QM +Q Q + + +M ++ RL ++ Sbjct: 362 EKMREQEEKMWRQEERLWEQEKQMREQEQKMRDQEERMWEQDERLREK 409 Score = 82 (33.9 bits), Expect = 7.9, P = 0.9996 Identities = 26/108 (24%), Positives = 58/108 (53%) Query: 43 QEVKPEEKKPAKKRKSWGQ--ELPVPKTNLPPRKRAKTEDEK--EQRRI-ERVLRNRAAA 97 + ++ +E++ ++ K W Q ++ K K+ + ++EK E+ RI ER + R Sbjct: 404 ERLREKEERMREQEKMWEQVEKMREEKKMQEQEKKTRDQEEKMQEEERIREREKKMREEE 463 Query: 98 QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA---ENNRLSQQ 142 +T RE++ +M+K E E + +++ ++ QRL + + E ++ +Q Sbjct: 464 ETMREQEE-KMQKQE-ENMWEQEEKEWQQQRLPEQKEKLWEQEKMQEQ 509 >sp|Q8N300|CCD23_HUMAN Coiled-coil domain-containing protein 23 OS=Homo sapiens GN=CCDC23 PE=2 SV=1 Length = 66 Score = 77 (32.2 bits), Expect = 0.051, P = 0.050 Identities = 17/54 (31%), Positives = 33/54 (61%) Query: 71 PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF 124 PP ++ KT+ ++ R+E+ + ++A Q ++R+R E+ L ++EQQ QF Sbjct: 3 PPARKEKTKVKESVSRVEKA-KQKSAQQELKQRQRAEIYALNRVMTELEQQ-QF 54 >sp|O81025|P2A03_ARATH Putative protein PHLOEM PROTEIN 2-LIKE A3 OS=Arabidopsis thaliana GN=PP2A3 PE=2 SV=1 Length = 463 Score = 100 (40.3 bits), Expect = 0.054, P = 0.052 Identities = 38/120 (31%), Positives = 65/120 (54%) Query: 41 KTQEVKPEEKKPAKKR-KSWGQELP-VPKTNLPPRKRAKTEDEKEQRRIERVL--RNRAA 96 K ++ K E+ K R ++ G++ +P T RK K E+++ R ERV+ +NRA Sbjct: 174 KDEKKKVEQVKQLLARVENVGEQTGGIPYTYQLHRK-IKEENDERLREEERVIESKNRAE 232 Query: 97 AQTSRERKRLEMEKLENEKIQMEQ-QNQFLL------QRLSQMEAENNRLSQQLAQLAAE 149 A+ + ++ L MEK EK+QME+ +N+ L+ ++L + E NR +LA + E Sbjct: 233 AELAEMQQNLLMEK---EKLQMEEAKNKQLIAQAEANEKLMEQERAKNRAETELAAVMVE 289 >sp|O35763|MOES_RAT Moesin OS=Rattus norvegicus GN=Msn PE=1 SV=3 Length = 577 Score = 101 (40.6 bits), Expect = 0.056, P = 0.055 Identities = 26/103 (25%), Positives = 51/103 (49%) Query: 49 EKKPAKKRKSWGQELPVPKTNLPPR-KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107 EKK + + +++ K L + K+ + + +K Q+ +E R + R+R + E Sbjct: 326 EKKKRELAEKEKEKIEREKEELMEKLKQIEEQTKKAQQELEEQTRRALELEQERKRAQSE 385 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV 150 EKL E+ + E+ + LLQ + +L+ ++A+L A V Sbjct: 386 AEKLAKERQEAEEAKEALLQASRDQKKTQEQLASEMAELTARV 428 Score = 95 (38.5 bits), Expect = 0.26, P = 0.23 Identities = 23/80 (28%), Positives = 45/80 (56%) Query: 66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125 P T + +A+ +EK Q+++ER L E+K+ E+ + E EKI+ E++ L Sbjct: 297 PDTIEVQQMKAQAREEKHQKQMERAL-------LENEKKKRELAEKEKEKIEREKEE--L 347 Query: 126 LQRLSQMEAENNRLSQQLAQ 145 +++L Q+E + + Q+L + Sbjct: 348 MEKLKQIEEQTKKAQQELEE 367 Score = 81 (33.6 bits), Expect = 8.9, P = 0.9999 Identities = 29/99 (29%), Positives = 49/99 (49%) Query: 73 RKRAKTEDEK-EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ-NQF-LLQRL 129 RKRA++E EK + R E A Q SR++K+ + E+L +E ++ + +Q + ++ Sbjct: 379 RKRAQSEAEKLAKERQEAEEAKEALLQASRDQKKTQ-EQLASEMAELTARVSQLEMARKK 437 Query: 130 SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASP 168 + EAE Q+ Q E + T M +P A P Sbjct: 438 KESEAEECHQKAQMVQEDLEKTRAELKTAM-STPHVAEP 475 >sp|Q9Z220|TSG10_RAT Testis-specific gene 10 protein OS=Rattus norvegicus GN=Tsga10 PE=1 SV=2 Length = 712 Score = 102 (41.0 bits), Expect = 0.057, P = 0.055 Identities = 52/182 (28%), Positives = 76/182 (41%) Query: 44 EVKPEEKKPAKKRKSWGQELP-----VPKTNLPPRKRAKTEDEKEQRRIE-RVLRNRAAA 97 +VK E + +KK EL V TNL K +E +E L+N + Sbjct: 361 KVKQENQALSKKLNDTHNELSDIKQKVQDTNLEVNKLKNILKSEESTNLEVNKLKNILKS 420 Query: 98 QTSRERKRLEM--------EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149 + S R+ +E E EN+ Q+E +N L L EAE NRL +++ L E Sbjct: 421 EESENRQIMEQLRKANEDAENWENKARQLEAENNTLKLELITAEAEGNRLKEKVDALNRE 480 Query: 150 VRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPS-LSDYSPTLKPSTLAE 208 V N A TL +L K E + L+++ F S L+D S T + + Sbjct: 481 VE-QHLNAERSYKSQIA--TLHKSLVKMEEE---LQKVQFEKVSALADLSSTRELCIKLD 534 Query: 209 SS 210 SS Sbjct: 535 SS 536 >sp|Q32N93|INCEB_XENLA Inner centromere protein B OS=Xenopus laevis GN=incenp-B PE=2 SV=1 Length = 892 Score = 103 (41.3 bits), Expect = 0.058, P = 0.056 Identities = 38/144 (26%), Positives = 70/144 (48%) Query: 39 DVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL-PPRKRAKTEDEKE---QRRIERVLRNR 94 +++ Q+ E K+ A++ + +++ K L R+R + E EK QR +ER + + Sbjct: 651 EMERQKKMAEAKRLAEQERE--RQVFAEKERLRAERERERIEREKALQLQRELERAAQEK 708 Query: 95 AAAQTSRE--RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG 152 + E +KR + ++LE E+++ + Q + +RL E + + +Q A AA V Sbjct: 709 EQQRREAEERKKREQQQRLEQERLERLRTEQEV-KRLQ--EEQQRKAKEQAAAAAAPVMN 765 Query: 153 SRANTPMPGSPATASPTLTPTLFK 176 M SPA S +TP +K Sbjct: 766 --VTVDMQNSPACESYEMTPKSYK 787 Score = 91 (37.1 bits), Expect = 1.2, P = 0.70 Identities = 26/86 (30%), Positives = 52/86 (60%) Query: 67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF-- 124 K N P + K+E EKE++R++ LR + A+ R++K E +K + E++++ ++++ Sbjct: 502 KRNTPLKPDPKSE-EKERQRLD-ALRKKEEAELQRKQKIEEGKKRKQEELKLRREDRLRK 559 Query: 125 LLQ---RLSQMEAENNR-LSQQLAQL 146 +LQ R+ Q+E E + Q+ AQ+ Sbjct: 560 VLQARERVEQLEEEKKKKFEQKFAQI 585 Score = 87 (35.7 bits), Expect = 3.3, P = 0.96 Identities = 32/132 (24%), Positives = 61/132 (46%) Query: 46 KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKR 105 K E++ +++K + + + + A+ E + +R ER+ R +A Q RE +R Sbjct: 645 KKREEEEMERQKKMAEAKRLAEQERERQVFAEKERLRAERERERIEREKAL-QLQRELER 703 Query: 106 LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPAT 165 EK + + E++ + QRL Q E R Q++ +L E + +A + A Sbjct: 704 AAQEKEQQRREAEERKKREQQQRLEQERLERLRTEQEVKRLQEEQQ-RKAKEQ---AAAA 759 Query: 166 ASPTLTPTLFKQ 177 A+P + T+ Q Sbjct: 760 AAPVMNVTVDMQ 771 Score = 83 (34.3 bits), Expect = 9.0, P = 0.9999 Identities = 34/129 (26%), Positives = 62/129 (48%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTN---LPPRKRAKTEDEKEQRRIE--RVLRNRA 95 K +EV+ K+ + RK +++ + L +KR + E E++++ E R+ Sbjct: 610 KQEEVECRRKQEEEARKLKAKQMEEEERRHQELLQKKREEEEMERQKKMAEAKRLAEQER 669 Query: 96 AAQTSRERKRL----EMEKLENEK-IQMEQQNQFLLQRLSQM--EAENNRLSQQLAQLAA 148 Q E++RL E E++E EK +Q++++ + Q Q EAE + +Q +L Sbjct: 670 ERQVFAEKERLRAERERERIEREKALQLQRELERAAQEKEQQRREAEERKKREQQQRLEQ 729 Query: 149 EVRGSRANT 157 E R R T Sbjct: 730 E-RLERLRT 737 >sp|Q95XZ5|NPBL_CAEEL Nipped-B-like protein pqn-85 OS=Caenorhabditis elegans GN=pqn-85 PE=2 SV=2 Length = 2203 Score = 107 (42.7 bits), Expect = 0.058, P = 0.056 Identities = 58/197 (29%), Positives = 94/197 (47%) Query: 32 DTSLNSADVKTQEVK----PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRI 87 D+S+ S+ K E + +E+K ++RK QEL + KR + +EK Sbjct: 177 DSSVISSHQKLYEEQCRQIEKERKEQEERKR-KQELEEQRKRNEELKRLRIAEEKRLLEE 235 Query: 88 ERVLRNRAAAQTSRERKRLE-MEKLENEK---IQMEQQNQFLLQRLSQMEAENNRLSQQL 143 ++ LR + + E KRLE +LE+E+ +E Q Q +LQ+ M+AE N+ ++ Sbjct: 236 QQRLREQMERERLAEIKRLEEAARLEDERRIAADIEAQKQAMLQK---MQAEQNKHIAEV 292 Query: 144 AQLAAEV--RGSRANTPMPGSPATASPTLTPTLFKQERDELP--LERIPFPTPSLSDYS- 198 + +E+ R +R + PM TL T F LP L+ IPFP S+ D + Sbjct: 293 ERQRSELEERFARVSQPM---------TLVGTHF------LPNFLDMIPFPYESMVDSTL 337 Query: 199 PTL----KPSTLAESSD 211 P + + S + ES D Sbjct: 338 PQVFDMERDSAILESCD 354 >sp|Q6CT90|EIF3A_KLULA Eukaryotic translation initiation factor 3 subunit A OS=Kluyveromyces lactis GN=TIF32 PE=3 SV=1 Length = 925 Score = 103 (41.3 bits), Expect = 0.061, P = 0.059 Identities = 28/102 (27%), Positives = 55/102 (53%) Query: 74 KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ---NQFLLQRLS 130 K A+ E+ K+QR IE+V + R A+ + + +E E E E + E++ + +R++ Sbjct: 801 KEAQLEEAKKQR-IEQVRKERYEAKVAEIQAAIEAEAAEKEALAKEEELAKRRAERERIN 859 Query: 131 QMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATA-SPTLT 171 + E R +++ +L + GS ++P+P +P A +P T Sbjct: 860 KERDEIARKQREIEELLEKKNGSSRSSPVPSTPTPAPAPAQT 901 >sp|Q5F489|TAF3_CHICK Transcription initiation factor TFIID subunit 3 OS=Gallus gallus GN=TAF3 PE=2 SV=1 Length = 930 Score = 103 (41.3 bits), Expect = 0.061, P = 0.059 Identities = 60/236 (25%), Positives = 98/236 (41%) Query: 4 DMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE---EKKPAKKRKSWG 60 D EK P S P L + P + SL T P P K + Sbjct: 634 DKEKVKDKSKEDKIKPPS-AP-LVLPPKEMSLPLFSTPTAMRLPSMLPSLSPMLPEKLF- 690 Query: 61 QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ 120 ++ PK +K K + E+E+ + E+ +++ + RE+K E EK ++EKI++E Sbjct: 691 EDKEKPKEKKKDKKEKKKKKEREKDK-EKEKKDKEKERKEREKKEKEKEKHKHEKIKVEP 749 Query: 121 ---QNQFLLQRLS-QMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFK 176 ++ RL+ ++ A +++ A E + + TP+ P T P +P Sbjct: 750 VVPAPSPVIPRLTLRVGAGQDKIVISKVVPAPEAKPA---TPV-SRPKTPPPVPSPV--- 802 Query: 177 QERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL 232 P+ P P P + PT+ P+ L +S PAVS AG GS P+ Sbjct: 803 ----PAPVHVTPPPAPVPAPPQPTVSPALLPPAS-----PAVSAAG----GSKAPV 845 >sp|P42775|GBF2_ARATH G-box-binding factor 2 OS=Arabidopsis thaliana GN=GBF2 PE=1 SV=1 Length = 360 Score = 98 (39.6 bits), Expect = 0.061, P = 0.060 Identities = 29/81 (35%), Positives = 44/81 (54%) Query: 80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM--EAENN 137 +EKE +R +R NR +A+ SR RK+ E E+L + + +N L +L Q+ E+E Sbjct: 246 NEKEVKREKRKQSNRESARRSRLRKQAETEQLSVKVDALVAENMSLRSKLGQLNNESEKL 305 Query: 138 RLSQQ--LAQLAAEVRGSRAN 156 RL + L QL A+ G N Sbjct: 306 RLENEAILDQLKAQATGKTEN 326 >sp|Q55EQ3|Y9086_DICDI Uncharacterized abhydrolase domain-containing protein DDB_G0269086 OS=Dictyostelium discoideum GN=DDB_G0269086 PE=1 SV=2 Length = 937 Score = 103 (41.3 bits), Expect = 0.062, P = 0.060 Identities = 41/145 (28%), Positives = 66/145 (45%) Query: 18 TPASEVPVLTVSPADTSLNSADVKT-QEVKP--EEKKPAKKRKSWGQELPVPKTNLPPRK 74 +P+S + T S T+ + +E KP EE KP + PV + + P + Sbjct: 283 SPSSNINTTTTSTTTTTTTTTSSPVVEESKPVVEESKPVVEESK-----PVVEESKPVVE 337 Query: 75 RAKTE----DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLS 130 +K E D KE+ ER+ + AAA+ +ER +EK E E++ E + + + Sbjct: 338 ESKPEPVVDDSKEKEEKERLEKEEAAAKLEKER----LEKEEAERVAKEAEEKRIKD--- 390 Query: 131 QMEAENN-RLSQQLAQLAAEVRGSR 154 + EA+ N QQ A AA+ R Sbjct: 391 EKEAQENLEKQQQEAAAAAQAEKER 415 Score = 102 (41.0 bits), Expect = 0.079, P = 0.076 Identities = 44/176 (25%), Positives = 80/176 (45%) Query: 13 DSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP 72 +S P S+ PV+ S + ++ + K ++ + E+++ A K + E + Sbjct: 324 ESKPVVEESK-PVVEESKPEPVVDDSKEKEEKERLEKEEAAAKLEKERLEKEEAERVAKE 382 Query: 73 RKRAKTEDEKE-QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131 + + +DEKE Q +E+ + AAA E++RLE E E +K++ E+ + + Sbjct: 383 AEEKRIKDEKEAQENLEKQ-QQEAAAAAQAEKERLEKE--EADKLEKERLEA---EAAAA 436 Query: 132 MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERI 187 +AE RL + A AA+ R + A A L K+E D L E++ Sbjct: 437 AQAEKERLEAEAAA-AAQAEKER----LEAEAAAAVQAEKERLEKEEADRLEKEKL 487 Score = 90 (36.7 bits), Expect = 1.6, P = 0.80 Identities = 39/125 (31%), Positives = 58/125 (46%) Query: 67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER-KRLEMEKLENEKIQMEQQN-QF 124 K L A + EKE+ E AAAQ +ER ++ E E+LE EK++ E Q Sbjct: 639 KERLEAEAAAAAQAEKEKLEAEA----EAAAQAEKERLEKEEAERLEKEKLEAEAAAAQA 694 Query: 125 LLQRLSQMEAENNRLSQ-QLAQLAAEVRGSRANTP-MPGSPATASPTLTPTLFKQERDEL 182 +RL EAE +Q + +L AE ++A + A A+ L K+E + L Sbjct: 695 EKERL---EAEAAAAAQAEKEKLEAEAAAAQAEKERLEAEAAAAAQAEKERLEKEETERL 751 Query: 183 PLERI 187 ER+ Sbjct: 752 EKERL 756 >sp|Q54LU8|Y8646_DICDI Probable serine/threonine-protein kinase DDB_G0286465 OS=Dictyostelium discoideum GN=DDB_G0286465 PE=3 SV=1 Length = 1221 Score = 98 (39.6 bits), Expect = 0.062, Sum P(2) = 0.060 Identities = 23/79 (29%), Positives = 43/79 (54%) Query: 73 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132 +K+ K EKE + E+ + Q ER++LE ++LE ++++ EQQ + L+R + Sbjct: 1105 KKQEKENKEKENKEKEK---KQLEKQKQLEREKLEKDRLEKDRLEKEQQEKDCLEREKFL 1161 Query: 133 EAENNRLSQQLAQLAAEVR 151 E E Q+ +L E++ Sbjct: 1162 ENERLEKEQEREKLEKEIK 1180 Score = 52 (23.4 bits), Expect = 0.062, Sum P(2) = 0.060 Identities = 17/79 (21%), Positives = 32/79 (40%) Query: 7 KTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP 66 K S S +T S+V + + S + +S +S+ + K K+ Sbjct: 536 KESPSSSSTTSTSTSQVLIKSDSDSSSSASSSSSSSSSSSSSSSSSLPKSKNKSNRSKDN 595 Query: 67 KTNLPPRKRAKTEDEKEQR 85 ++ L P KR T+ +K + Sbjct: 596 QSKLDPEKRLLTKLKKSMK 614 Score = 46 (21.3 bits), Expect = 0.25, Sum P(2) = 0.22 Identities = 9/28 (32%), Positives = 18/28 (64%) Query: 43 QEVKPEEKKPAKKRKSWGQELPVPKTNL 70 ++ K +EK+ K+++ G+E +PK L Sbjct: 755 EKEKEKEKEKEKEKEEEGEEGNIPKEKL 782 >sp|P94517|YSCB_BACSU Uncharacterized protein yscB OS=Bacillus subtilis GN=yscB PE=4 SV=2 Length = 221 Score = 94 (38.1 bits), Expect = 0.068, P = 0.066 Identities = 47/170 (27%), Positives = 78/170 (45%) Query: 29 SPADTSLNSADVKTQEVKPEEK--KPAKKRK--SWGQELPVP-KTNLPPRKRAKTEDEKE 83 S + S VKT P+++ K KK K S + P T L RK AK E EK Sbjct: 22 STSSESKVETTVKTTAAFPQKELEKELKKLKPVSLDMKFESPLATELGKRK-AKEEAEK- 79 Query: 84 QRRI--------ERVLRNRAAAQTSRERKRL-EMEKLENEKI-QMEQQNQFLLQRLSQME 133 QR+I ER + + + ER+RL E + E +++ + E+Q + QR + ++ Sbjct: 80 QRQIAAEKKLEKEREAKRKKQQEEKAERQRLAEQQAAERQRLAEAERQAELERQRQAAIQ 139 Query: 134 AENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELP 183 E +++ Q A+ + + A + P ++S T+ +Q ELP Sbjct: 140 KEQKANAEKKRQSQAQRQQTEAPSSNSQDPPSSSSQTDKTI-QQPASELP 188 >sp|Q2UKG6|EIF3A_ASPOR Eukaryotic translation initiation factor 3 subunit A OS=Aspergillus oryzae GN=tif32 PE=3 SV=1 Length = 1038 Score = 103 (41.3 bits), Expect = 0.069, P = 0.067 Identities = 30/127 (23%), Positives = 60/127 (47%) Query: 54 KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN 113 K+ + + + + + +K+ + ++ +++RR ER R A + E +R++ E+ E Sbjct: 799 KRHEEFERRRKAAERDFEAKKKQRIKEVQDRRRRERAEREEAERRQKEEEERIKREE-EE 857 Query: 114 EKIQMEQQNQFLLQRLSQMEAENNRLS-----QQLAQLAAEVRGSRANTPMPGSPATASP 168 + E++ + L + ++ E E +L Q+ + AE R + T P PA A P Sbjct: 858 RAAKEEERRRVLAEEKAKREEERKKLDEIALKQKQREEEAEARRASRKTGFPEPPARAEP 917 Query: 169 TLT-PTL 174 T P L Sbjct: 918 ERTAPRL 924 >sp|Q9Y592|CCD41_HUMAN Coiled-coil domain-containing protein 41 OS=Homo sapiens GN=CCDC41 PE=1 SV=2 Length = 693 Score = 101 (40.6 bits), Expect = 0.071, P = 0.069 Identities = 44/183 (24%), Positives = 79/183 (43%) Query: 49 EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE- 107 EK +K+ W +E + R+ K KE+ + + + + + + KRL+ Sbjct: 517 EKTLEEKQIQWLEEKHKLHERITDREE-KYNQAKEKLQRAAIAQKKRKSLHENKLKRLQE 575 Query: 108 -MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATA 166 +E LE +K ++E +NQ L ++ E + RL ++L + R+ +P P TA Sbjct: 576 KVEVLEAKKEELETENQVLNRQNVPFE-DYTRLQKRLKDIQRRHNEFRSLILVPNMPPTA 634 Query: 167 SPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLA---ESSDVAQHPAVSVAGL 223 S + P F Q +P +PFP P + + + S L E + Q + G Sbjct: 635 S--INPVSF-QSSAMVPSMELPFP-PHMQEEQHQRELSLLRKRLEELETTQRKQLEELGS 690 Query: 224 EGD 226 G+ Sbjct: 691 SGE 693 Score = 83 (34.3 bits), Expect = 6.7, P = 0.999 Identities = 31/119 (26%), Positives = 54/119 (45%) Query: 32 DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL 91 + L + +++ E+ +K K G E V + ++ ++ + E QR R L Sbjct: 192 NVDLTKDSKRVEQLAREKVYLCQKLK--GLEAEVAELKAE-KENSEAQVENAQRIQVRQL 248 Query: 92 RNRAAAQTSRERKR----LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146 A S E ++ L E+LE E +QN FL+ +L + E E N LS ++ +L Sbjct: 249 AEMQATVRSLEAEKQSANLRAERLEKELQSSSEQNTFLINKLHKAEREINTLSSKVKEL 307 >sp|Q6Y7W8|PERQ2_MOUSE PERQ amino acid-rich with GYF domain-containing protein 2 OS=Mus musculus GN=Gigyf2 PE=1 SV=2 Length = 1291 Score = 111 (44.1 bits), Expect = 0.072, Sum P(2) = 0.069 Identities = 67/271 (24%), Positives = 111/271 (40%) Query: 13 DSLP--ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL 70 DSLP +E + T + L+ V+ + + PEE++ + G+E ++ Sbjct: 284 DSLPEWCLEDAEEEMGTFDSSGAFLSLKKVQKEPI-PEEQEMDFRPVEEGEERS--DSDS 340 Query: 71 PPRKRAKTEDEKEQRRIERVLRNRAAA-----QTSRERKR--LEMEKLENEKIQMEQQNQ 123 + AK D+ +R E+ R A A QTS R + E Q E++++ Sbjct: 341 SHNEEAKEPDKTNRREGEKTDRAGAEASEEVPQTSLSSARPGTPSDHQPQEATQFERKDE 400 Query: 124 FLLQRLSQMEAEN---NRLSQQLAQLAAEV--RGSRANTPMPGSPATASPTL--TPTLFK 176 +++ + E EN N LS ++ E + +TP+P P TASP L +P + Sbjct: 401 PKAEQVEKAEEENRSENSLSAKVPSRGDETVPASQQPSTPLP--PDTASPLLILSPPVPT 458 Query: 177 QERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLG 236 P+E P +S S +P + Q VA L+ SAL L Sbjct: 459 PSSASRPVETAAVEAPGMSSVST--EPDDEEGLKHLEQQAEKMVAYLQD--SALDDERLT 514 Query: 237 SDLKHHSTDDVAAPLSDDDFNRLFHGDSSVE 267 S L+ H V+ PL + + ++ D E Sbjct: 515 SKLQEHRAKGVSIPLMHEAMQKWYYKDPQGE 545 Score = 111 (44.1 bits), Expect = 0.091, Sum P(3) = 0.087 Identities = 40/140 (28%), Positives = 72/140 (51%) Query: 48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107 EE++ ++ + +EL + K K A+ E+E+ QRR+E NR + R R E Sbjct: 825 EERRREEEERRKQEEL-LRKQEEEAAKWAR-EEEEAQRRLEE---NRLRMEEEAARLRHE 879 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEA----ENNRLSQQLAQL---AAEVRGSRANTPMP 160 E+ + +++++++Q + QR Q EA + + QQLAQ+ ++ G ++NT Sbjct: 880 EEERKRKELELQRQKDLMRQRQQQQEALRRLQQQQQQQQLAQMKLPSSSTWGQQSNTATC 939 Query: 161 GSPATASPTLTPTLFKQERD 180 S AT S L ++ER+ Sbjct: 940 QSQATLSLAEIQKL-EEERE 958 Score = 39 (18.8 bits), Expect = 0.091, Sum P(3) = 0.087 Identities = 13/39 (33%), Positives = 20/39 (51%) Query: 10 SSVDSLPATPASEVPVLTVSPADTSLNSAD--VKTQEVK 46 S S P P + P+L +SP + +SA V+T V+ Sbjct: 434 SQQPSTPLPPDTASPLLILSPPVPTPSSASRPVETAAVE 472 Score = 38 (18.4 bits), Expect = 0.072, Sum P(2) = 0.069 Identities = 7/20 (35%), Positives = 12/20 (60%) Query: 246 DVAAPLSDDDFNRLFHGDSS 265 +V +P D+ R + GD+S Sbjct: 1169 EVESPYEVHDYTRAYLGDTS 1188 >sp|Q8X229|FCR3_CANAL Fluconazole resistance protein 3 OS=Candida albicans GN=FCR3 PE=3 SV=1 Length = 399 Score = 98 (39.6 bits), Expect = 0.072, P = 0.069 Identities = 21/62 (33%), Positives = 40/62 (64%) Query: 75 RAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA 134 R +E +E+ +++R +NRAA + RERK ++++LE + + E++ Q LL L Q++ Sbjct: 202 RDDSELTEEELQMKRKAQNRAAQRAFRERKESKLKELEAKLLASEEERQKLLDELEQIKK 261 Query: 135 EN 136 +N Sbjct: 262 QN 263 >sp|P26041|MOES_MOUSE Moesin OS=Mus musculus GN=Msn PE=1 SV=3 Length = 577 Score = 100 (40.3 bits), Expect = 0.072, P = 0.070 Identities = 25/103 (24%), Positives = 51/103 (49%) Query: 49 EKKPAKKRKSWGQELPVPKTNLPPR-KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107 EKK + + +++ K L + K+ + + +K Q+ +E R + R+R + E Sbjct: 326 EKKKRELAEKEKEKIEREKEELMEKLKQIEEQTKKAQQELEEQTRRALELEQERKRAQSE 385 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV 150 EKL E+ + E+ + LLQ + +L+ ++A+L A + Sbjct: 386 AEKLAKERQEAEEAKEALLQASRDQKKTQEQLASEMAELTARI 428 Score = 95 (38.5 bits), Expect = 0.26, P = 0.23 Identities = 23/80 (28%), Positives = 45/80 (56%) Query: 66 PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL 125 P T + +A+ +EK Q+++ER L E+K+ E+ + E EKI+ E++ L Sbjct: 297 PDTIEVQQMKAQAREEKHQKQMERAL-------LENEKKKRELAEKEKEKIEREKEE--L 347 Query: 126 LQRLSQMEAENNRLSQQLAQ 145 +++L Q+E + + Q+L + Sbjct: 348 MEKLKQIEEQTKKAQQELEE 367 >sp|Q9TW28|MYOM_DICDI Myosin-M heavy chain OS=Dictyostelium discoideum GN=myoM PE=1 SV=1 Length = 1737 Score = 105 (42.0 bits), Expect = 0.074, P = 0.072 Identities = 57/223 (25%), Positives = 92/223 (41%) Query: 55 KRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL-RNRAAAQTSRERKRLEMEKLEN 113 KRK ++ + + +R K E E+++R E+ L R R + ER+R E EK E Sbjct: 941 KRKEEERKKELERQRKEEEERQK-ELERQRREEEKELERKRKEEERELERQRKEEEK-EQ 998 Query: 114 EKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPA---TASPTL 170 E+ + E++ + ++ + E E R ++ + E S + + SP+ T + T Sbjct: 999 ERKRKEEEKEQERKKKEEKEIEKKRKEEEKKKKKNEQNLSLPSLDITNSPSLINTTTTTT 1058 Query: 171 TPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSAL 230 T T PL P PS PS+ + SS P+ L S Sbjct: 1059 TTTTTTTNTSSPPLSPPISPRPST--------PSSTSSSSSTTSSPSTKKQLLFKFNSIS 1110 Query: 231 PLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSV--EPDSS 271 L L L H S+ D++ N +GDS++ DSS Sbjct: 1111 NL--LSKSL-HGSSHSDKNSKEDNNSNNNNNGDSTIILSSDSS 1150 Score = 101 (40.6 bits), Expect = 0.20, P = 0.18 Identities = 46/164 (28%), Positives = 75/164 (45%) Query: 46 KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL-RNRAAAQTSRERK 104 K EE+K +R+ +E + R+ K E E++++ ER L R R + +ERK Sbjct: 943 KEEERKKELERQRKEEEERQKELERQRREEEK-ELERKRKEEERELERQRKEEEKEQERK 1001 Query: 105 RLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPA 164 R E EK E E+ + E++ + ++ + E + + Q L+ + ++ N+P + Sbjct: 1002 RKEEEK-EQERKKKEEKE--IEKKRKEEEKKKKKNEQNLSLPSLDI----TNSPSLINTT 1054 Query: 165 TASPTLTPTLFKQERDELPLERIPFP-TPSL--SDYSPTLKPST 205 T + T T T L P P TPS S S T PST Sbjct: 1055 TTTTTTTTTTTNTSSPPLSPPISPRPSTPSSTSSSSSTTSSPST 1098 >sp|Q9NZ53|PDXL2_HUMAN Podocalyxin-like protein 2 OS=Homo sapiens GN=PODXL2 PE=1 SV=1 Length = 605 Score = 100 (40.3 bits), Expect = 0.077, P = 0.074 Identities = 68/283 (24%), Positives = 109/283 (38%) Query: 32 DTSLNSADVKTQEVKPE--EKKPAKKRKSWGQELP-----VPKTNL--PPRKRAKTEDEK 82 D+SL+ V P+ EK + + S QELP +PK NL PP E+E+ Sbjct: 107 DSSLDLGPT-ADYVFPDLTEKAGSIEDTSQAQELPNLPSPLPKMNLVEPPWHMPPREEEE 165 Query: 83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ-NQFLLQRLSQMEAENNRLSQ 141 E+ E R + + E + E+ + + + + Q F L SQ + Sbjct: 166 EEEEEEE--REKEEVEKQEEEEEEELLPVNGSQEEAKPQVRDFSLTSSSQTPGATKSRHE 223 Query: 142 QLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFK---QERDELPLERIPFPTPSLSDYS 198 A+ G + M P+ P++TPT Q+ E P L Sbjct: 224 DSGDQASS--GVEVESSM--GPSLLLPSVTPTTVTPGDQDSTSQEAEATVLPAAGLG--- 276 Query: 199 PTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD---LGSDLKHHSTDDVAAPLSDDD 255 ++ E+S+ A A ++G + ALP F S +H D + + S Sbjct: 277 --VEFEAPQEASEEATAGAAGLSGQHEEVPALPSFPQTTAPSGAEHPDEDPLGSRTSAS- 333 Query: 256 FNRLFHGDSSVEPDSSVF-EDGLAFDVLEGGDLSA---FPFDS 294 + L GD + P S+ ++ L +LEG A P+DS Sbjct: 334 -SPLAPGDMELTPSSATLGQEDLNQQLLEGQAAEAQSRIPWDS 375 >sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive element-binding protein 5 OS=Homo sapiens GN=CREB5 PE=1 SV=2 Length = 508 Score = 99 (39.9 bits), Expect = 0.078, P = 0.075 Identities = 28/92 (30%), Positives = 49/92 (53%) Query: 52 PAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKL 111 PA ++ Q + P+ R+R ED E+RR + + RNRAAA R+++++ + L Sbjct: 345 PATQQMQPTQTIQPPQPTGGRRRRVVDEDPDERRR-KFLERNRAAATRCRQKRKVWVMSL 403 Query: 112 ENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL 143 E + ++ Q N L +S ++ E +L Q L Sbjct: 404 EKKAEELTQTNMQLQNEVSMLKNEVAQLKQLL 435 >sp|Q5HZG4|TAF3_MOUSE Transcription initiation factor TFIID subunit 3 OS=Mus musculus GN=Taf3 PE=1 SV=2 Length = 932 Score = 102 (41.0 bits), Expect = 0.079, P = 0.076 Identities = 55/202 (27%), Positives = 87/202 (43%) Query: 14 SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR 73 +LP S V V + PA + + + ++ KP+EK+ K +K Sbjct: 664 ALPLFSPSAVRVPAMLPAFSPMLPEKLFEEKEKPKEKERKKDKKE--------------- 708 Query: 74 KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ---QNQFLLQRLS 130 K+ K E EKE+ + ER R + RE++ E EK ++EKI++E ++ RL+ Sbjct: 709 KKKKKEKEKEKEKKER---EREKERREREKREKEKEKHKHEKIKVEPVIPAPSPVIPRLT 765 Query: 131 -QMEAENNRLSQQLAQLAAEVRGS----RANTPMPGS---PATASPT-LTPTLFKQERDE 181 ++ A +++ A E + + R TP P P SPT L P L Q Sbjct: 766 LRVGAGQDKIVISKVVPAPEAKPAPSLNRPKTPPPAPVPIPVRVSPTPLQPPLLTQAA-V 824 Query: 182 LPLERIPFPTPSLSDYSPTLKP 203 P +P P P+LS P Sbjct: 825 CPA-LMPSPAPALSGIGSAKAP 845 Score = 80 (33.2 bits), Expect = 4.4, Sum P(2) = 0.99 Identities = 38/160 (23%), Positives = 76/160 (47%) Query: 72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131 P+++ + +D+KE+++ + + + + RE++R E EK E EK + + + ++ + Sbjct: 697 PKEKERKKDKKEKKKKKEKEKEKEKKEREREKERREREKREKEK-EKHKHEKIKVEPV-- 753 Query: 132 MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPT 191 + A + + + ++ A + +P A +P+L R + P P P Sbjct: 754 IPAPSPVIPRLTLRVGAGQDKIVISKVVPAPEAKPAPSLN-------RPKTPP---PAPV 803 Query: 192 PSLSDYSPT-LKPSTLAESSDV-AQHPAVSVAGLEGDGSA 229 P SPT L+P L +++ A P+ + A L G GSA Sbjct: 804 PIPVRVSPTPLQPPLLTQAAVCPALMPSPAPA-LSGIGSA 842 Score = 50 (22.7 bits), Expect = 4.4, Sum P(2) = 0.99 Identities = 21/87 (24%), Positives = 40/87 (45%) Query: 4 DMEKTMSSVDSLPATPASEVPVLTVSPADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQE 62 +M T + S +P + P+ L +S DVK +++K E K KK++ Sbjct: 485 NMPPTFPYISSPSISPPTPEPLHKGYEEKAKLPSSVDVK-KKLKKELKTKLKKKEKQRDR 543 Query: 63 LPVPKTNLPPRKRAKTEDEKEQRRIER 89 + N ++R+K +D+ +R E+ Sbjct: 544 ERERERN---KERSKEKDKMREREKEK 567 Score = 48 (22.0 bits), Expect = 7.0, Sum P(2) = 0.9991 Identities = 20/59 (33%), Positives = 27/59 (45%) Query: 17 ATPASEVPVLTVSP-ADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRK 74 A P+ + P+L +P A + L A K E K K K S GQ+ PK L P + Sbjct: 240 APPSPQPPML--APFAKSQLPIA--KPLETKSFTPKTKTKASSPGQKTKSPKAALSPAR 294 >sp|A0LE19|IF2_MAGSM Translation initiation factor IF-2 OS=Magnetococcus sp. (strain MC-1) GN=infB PE=3 SV=1 Length = 949 Score = 102 (41.0 bits), Expect = 0.080, P = 0.077 Identities = 34/144 (23%), Positives = 63/144 (43%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER-VLRNRAAAQT 99 K +E+ EEKK A K G+E + + P AK ++ + +R+ E R +A + Sbjct: 70 KPEEI--EEKKEAPKSPKRGEERHILRPLTPEEIEAKQKELEAKRQAEEEAARQKAEQEA 127 Query: 100 SRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM 159 +R+++ E + + E+ + +Q Q + EA + ++ A+ AA + P Sbjct: 128 ARQKQEAEAARRKAEQ-EAARQKQ-------EAEAARRKAEEEAARAAAAAPAAPVAAPA 179 Query: 160 PGSPATASPTLTPTLFKQERDELP 183 +PA P + Q E P Sbjct: 180 EAAPAVPVAVAEPVVVAQPAPEAP 203 >sp|Q869E1|DNLI1_DICDI DNA ligase 1 OS=Dictyostelium discoideum GN=lig1 PE=3 SV=1 Length = 1192 Score = 103 (41.3 bits), Expect = 0.081, P = 0.078 Identities = 45/187 (24%), Positives = 84/187 (44%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTN-LPPR-KRAKTEDEKEQRRIERVLRNRAAAQ 98 K +E K +++K K+++ +EL K L + K K +++KE+ E+ + + + Sbjct: 246 KEKEEKDKKEKELKEKELKEKELKDKKEKELKEKEKELKDKEKKEKELKEKEKKEKEEKE 305 Query: 99 TSR-ERKRLEM-EKLENEKIQMEQQNQFLLQR-LSQMEAENNRL-SQQLAQLAAEVRGSR 154 + E+K E+ EK E EK + E + + L ++ L + E + L S + + R Sbjct: 306 KEKKEKKEKELKEKEEKEKKEKELKEKELKEKELKEKELKEKELTSPKKETIDISDLFKR 365 Query: 155 ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQ 214 AN S T++ + T KQ+ D P P+P L T +T +S Sbjct: 366 ANAEAKSSVPTSTSKNSKTNKKQKVDHKPTATTKKPSPVLEAKQSTTTTTTTTTTSTATT 425 Query: 215 HPAVSVA 221 + S++ Sbjct: 426 ISSKSIS 432 Score = 88 (36.0 bits), Expect = 3.5, P = 0.97 Identities = 44/189 (23%), Positives = 82/189 (43%) Query: 32 DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL 91 + L + K +E K +EKK +++ +EL K K K + EKE + E+ L Sbjct: 227 EKELKEKESKEKEKKEKEKKEKEEKDKKEKEL---KEKELKEKELKDKKEKELKEKEKEL 283 Query: 92 RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151 +++ + + K + EK E EK + E++ + L ++ + + E ++L + E++ Sbjct: 284 KDKEKKEKELKEKE-KKEKEEKEKEKKEKKEKELKEKEEKEKKEKELKEKELKE--KELK 340 Query: 152 GSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS--------DYSPTL-- 201 SP + ++ LFK+ E +P T S D+ PT Sbjct: 341 EKELKEKELTSPKKETIDISD-LFKRANAEAK-SSVPTSTSKNSKTNKKQKVDHKPTATT 398 Query: 202 -KPSTLAES 209 KPS + E+ Sbjct: 399 KKPSPVLEA 407 >sp|P22793|TRHY_SHEEP Trichohyalin OS=Ovis aries GN=TCHH PE=2 SV=2 Length = 1549 Score = 104 (41.7 bits), Expect = 0.085, P = 0.081 Identities = 29/104 (27%), Positives = 53/104 (50%) Query: 48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107 E+++ ++RK +EL + L K+ ED ++++ +E+V R Q RE++R E Sbjct: 736 EKRRQVRERKYLEEELQQEEDRLQREKQLLREDREKRQYLEKVELQREEEQLQREKRRQE 795 Query: 108 MEKL--ENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149 E+ E E ++ E++ Q+L + E E R + QL E Sbjct: 796 RERQYREEELLREEERLHRKEQQLQREECEKRRRQELERQLEEE 839 Score = 97 (39.2 bits), Expect = 0.49, P = 0.39 Identities = 33/130 (25%), Positives = 64/130 (49%) Query: 30 PADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQR---- 85 P D L +K QE++ ++ + K +E + + ++ E+E +QR Sbjct: 122 PQDRQLEERRLKRQELEELAEEEELREKQVRREQRLQRRE---QEEYGGEEELQQRPKGR 178 Query: 86 RIERVLRN--RAAAQTSRERKRLEMEKLENEKIQM-EQQNQFLLQRLSQMEAENNRLSQQ 142 +E +L R Q RER+RL++E+ + ++ ++ E+Q + LQ+ E + RL ++ Sbjct: 179 ELEELLNREQRFERQEQRERQRLQVEQQQRQRGELRERQEEVQLQKRETQELQRERLEEE 238 Query: 143 LAQLAAEVRG 152 QL + RG Sbjct: 239 -QQLQKQKRG 247 Score = 96 (38.9 bits), Expect = 0.63, P = 0.47 Identities = 28/115 (24%), Positives = 61/115 (53%) Query: 35 LNSADVKTQEVKPEEKKPAKKRKSWGQELPV-PKTNLPPRKRAKTEDEKEQRRIERV-LR 92 L + + Q + E+++ ++ K + +++ + + L +R K E+E++ +E+V LR Sbjct: 428 LQREEEQLQREEREKRRRQEREKQYLEKVELWEEEQLQREEREKRRQEREKQYLEKVELR 487 Query: 93 NRAAAQTS-RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146 Q RE++R E E+ EK++++++ Q LQR + + R Q L ++ Sbjct: 488 EEEQLQRQEREKRRQERERQYLEKVELQEEEQ--LQREEREKRRQERERQYLEKV 540 Score = 94 (38.1 bits), Expect = 1.0, P = 0.65 Identities = 26/101 (25%), Positives = 55/101 (54%) Query: 49 EKKPAKKRKSWGQELPVPKTN-LPPRKRAKTEDEKEQRRIERV-LRNRAAAQTS-RERKR 105 EK+ ++ + + +++ + + L +R K E+E++ +E+V L+ Q RE++R Sbjct: 498 EKRRQERERQYLEKVELQEEEQLQREEREKRRQERERQYLEKVELQEEEQLQRQEREKRR 557 Query: 106 LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146 E EK EK++++++ Q LQR + + R Q L ++ Sbjct: 558 QEREKQYLEKVELQEEEQ--LQRQERQKRRQEREKQYLEKV 596 Score = 93 (37.8 bits), Expect = 1.3, P = 0.74 Identities = 26/101 (25%), Positives = 56/101 (55%) Query: 49 EKKPAKKRKSWGQELPV-PKTNLPPRKRAKTEDEKEQRRIERV-LRNRAAAQTS-RERKR 105 EK+ ++ K + +++ + + L ++R K E+E++ +E+V L+ Q RE++R Sbjct: 470 EKRRQEREKQYLEKVELREEEQLQRQEREKRRQERERQYLEKVELQEEEQLQREEREKRR 529 Query: 106 LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146 E E+ EK++++++ Q LQR + + R Q L ++ Sbjct: 530 QERERQYLEKVELQEEEQ--LQRQEREKRRQEREKQYLEKV 568 Score = 91 (37.1 bits), Expect = 2.2, P = 0.89 Identities = 25/109 (22%), Positives = 56/109 (51%) Query: 49 EKKPAKKRKSWGQELPVPKTN-LPPRKRAKTEDEKEQRRIERV-LRNRAAAQTS-RERKR 105 EK+ ++ + + +++ + + L ++R K E+E++ +E+V L+ Q R+++R Sbjct: 526 EKRRQERERQYLEKVELQEEEQLQRQEREKRRQEREKQYLEKVELQEEEQLQRQERQKRR 585 Query: 106 LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154 E EK EK++++++ Q Q + E R + +L E + R Sbjct: 586 QEREKQYLEKVELQEEEQLQRQEREKRRQERERQYLEKVELQEEEQVQR 634 Score = 89 (36.4 bits), Expect = 3.7, P = 0.97 Identities = 25/81 (30%), Positives = 42/81 (51%) Query: 75 RAKTEDEKEQRRIERVLRNRAAAQTSRERK-RLEMEKLENEKIQMEQQNQFLLQRLSQME 133 R + E+E ++RR + Q E + RL+ EKL+ EK + E++ Q+ R +++ Sbjct: 366 RWQLEEESQRRRYTLYAKPAQREQVREEEQLRLKEEKLQREKRRQERERQY---REVELQ 422 Query: 134 AENNRLSQQLAQLAAEVRGSR 154 E RL ++ QL E R R Sbjct: 423 REEERLQREEEQLQREEREKR 443 Score = 89 (36.4 bits), Expect = 3.7, P = 0.97 Identities = 23/93 (24%), Positives = 50/93 (53%) Query: 49 EKKPAKKRKSWGQELPVPKTN-LPPRKRAKTEDEKEQRRIERV-LRNRAAAQTS-RERKR 105 EK+ ++ K + +++ + + L ++R K E+E++ +E+V L+ Q RE++R Sbjct: 554 EKRRQEREKQYLEKVELQEEEQLQRQERQKRRQEREKQYLEKVELQEEEQLQRQEREKRR 613 Query: 106 LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNR 138 E E+ EK++++++ Q Q + E R Sbjct: 614 QERERQYLEKVELQEEEQVQRQEREKRRQERER 646 Score = 89 (36.4 bits), Expect = 3.7, P = 0.97 Identities = 30/114 (26%), Positives = 59/114 (51%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100 + Q + E+++ ++R+ +EL + L ++ E E+E+RR ER R Sbjct: 631 QVQRQEREKRRQERERQYLEKELQRQEERLQEEEQLLRE-EREKRRQERE-RQYLEKVEL 688 Query: 101 RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154 +E ++L+ E E EK + E++ Q+L + +++ + RL ++ QL E R R Sbjct: 689 QEEEQLQRE--EREKRRQERERQYLEKE--ELQRQEERLQREKEQLQREDREKR 738 Score = 88 (36.0 bits), Expect = 4.7, P = 0.991 Identities = 28/117 (23%), Positives = 62/117 (52%) Query: 40 VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER---VLRNRAA 96 ++ +E++ +E++ ++++ +E + + RK + E ++E+ R++R +LR Sbjct: 711 LEKEELQRQEERLQREKEQLQREDREKRRQVRERKYLEEELQQEEDRLQREKQLLREDRE 770 Query: 97 AQTSRERKRL--EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151 + E+ L E E+L+ EK + E++ Q+ + L + E +R QQL + E R Sbjct: 771 KRQYLEKVELQREEEQLQREKRRQERERQYREEELLREEERLHRKEQQLQREECEKR 827 Score = 88 (36.0 bits), Expect = 4.7, P = 0.991 Identities = 29/125 (23%), Positives = 62/125 (49%) Query: 32 DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL 91 + L + + QE + ++ +KR+ + + K L ++ + E E+E+RR ER Sbjct: 650 EKELQRQEERLQEEEQLLREEREKRRQERERQYLEKVELQEEEQLQRE-EREKRRQERER 708 Query: 92 RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL--SQMEAENNRLSQQLAQLAAE 149 + + R+ +RL+ EK + ++ E++ Q ++ +++ E +RL ++ QL E Sbjct: 709 QYLEKEELQRQEERLQREKEQLQREDREKRRQVRERKYLEEELQQEEDRLQRE-KQLLRE 767 Query: 150 VRGSR 154 R R Sbjct: 768 DREKR 772 Score = 87 (35.7 bits), Expect = 6.1, P = 0.998 Identities = 31/111 (27%), Positives = 57/111 (51%) Query: 40 VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT 99 V+ QE + +++ +KR+ + + K L ++ + + E+E+RR ER R + Sbjct: 596 VELQEEEQLQRQEREKRRQERERQYLEKVELQEEEQVQRQ-EREKRRQERE-RQYLEKEL 653 Query: 100 SRERKRL-EMEKL---ENEKIQMEQQNQFL----LQRLSQMEAENNRLSQQ 142 R+ +RL E E+L E EK + E++ Q+L LQ Q++ E +Q Sbjct: 654 QRQEERLQEEEQLLREEREKRRQERERQYLEKVELQEEEQLQREEREKRRQ 704 Score = 87 (35.7 bits), Expect = 6.1, P = 0.998 Identities = 29/115 (25%), Positives = 59/115 (51%) Query: 40 VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT 99 V+ QE + +++ +KR+ ++ + K L ++ + + E+E+RR ER + + Sbjct: 568 VELQEEEQLQRQERQKRRQEREKQYLEKVELQEEEQLQRQ-EREKRRQERERQYLEKVEL 626 Query: 100 SRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154 E ++++ E EK + E++ Q+L + L + E RL ++ QL E R R Sbjct: 627 QEEE---QVQRQEREKRRQERERQYLEKELQRQE---ERLQEE-EQLLREEREKR 674 >sp|O70191|ATF5_MOUSE Cyclic AMP-dependent transcription factor ATF-5 OS=Mus musculus GN=Atf5 PE=1 SV=2 Length = 283 Score = 95 (38.5 bits), Expect = 0.088, P = 0.085 Identities = 30/93 (32%), Positives = 48/93 (51%) Query: 63 LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN 122 LP P P A T +++Q++ ++ N++AA R+RKR E E LE E +E +N Sbjct: 192 LPSPARPAPYPSPASTRGDRKQKKRDQ---NKSAALRYRQRKRAEGEALEGECQGLEARN 248 Query: 123 QFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA 155 + L +R +E E Q + L EV +R+ Sbjct: 249 RELRERAESVERE----IQYVKDLLIEVYKARS 277 >sp|Q39140|TGA6_ARATH Transcription factor TGA6 OS=Arabidopsis thaliana GN=TGA6 PE=1 SV=2 Length = 330 Score = 96 (38.9 bits), Expect = 0.089, P = 0.085 Identities = 20/55 (36%), Positives = 38/55 (69%) Query: 77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131 +++D+ +Q+ + R+ +NR AA+ SR RK+ +++LEN ++++ Q Q L QR Q Sbjct: 38 RSKDKLDQKTLRRLAQNREAARKSRLRKKAYVQQLENSRLKLTQLEQEL-QRARQ 91 >sp|Q68EL6|NFIL3_DANRE Nuclear factor interleukin-3-regulated protein OS=Danio rerio GN=nfil3 PE=2 SV=1 Length = 462 Score = 98 (39.6 bits), Expect = 0.089, P = 0.085 Identities = 42/152 (27%), Positives = 70/152 (46%) Query: 73 RKRAKTEDEKEQRRI-ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131 RKR DEK+ ER +N AA+ SRE++RL LEN+ + + ++N L L Sbjct: 52 RKREFIPDEKKDNLYWERRRKNNEAAKRSREKRRLNDMVLENKLMALGEENASLKAELLS 111 Query: 132 MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQER-DELPLERIPFP 190 ++ +S A A EV+ +T A ++P+ K +L R+ Sbjct: 112 LKLRFGLVSS--AAYAQEVQNISTSTA-----ALYQDFMSPSATKDSYPSDLEPTRLTSS 164 Query: 191 TPSLSDYSPTLKPSTLAESSDVAQ-HPAVSVA 221 S+ +SP S ++SS V Q P ++++ Sbjct: 165 CISVIKHSPHSALSDGSDSSTVTQGSPLINIS 196 >sp|Q55FW7|GLE1_DICDI Nucleoporin GLE1 OS=Dictyostelium discoideum GN=gle1 PE=3 SV=1 Length = 837 Score = 101 (40.6 bits), Expect = 0.089, P = 0.086 Identities = 30/107 (28%), Positives = 55/107 (51%) Query: 43 QEVKPEEKKPAKKRKSWGQELPVPKT--NLPPRKRAKTEDEKEQRRI-ERVLRNRAAAQT 99 QE K +++K K+ K Q+ + L K K + EKEQ++ E+ L+ Sbjct: 390 QEQKEKQEKLEKEEKEKEQQEQQKQLLIKLAKEKEEKEKFEKEQQQQKEKELQKEKELLQ 449 Query: 100 SRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL 146 +E+++ E EKL+ ++ Q +QQ Q Q+L Q + + N+ + L + Sbjct: 450 QKEKEK-EKEKLQQQQQQQQQQQQQQQQQLQQQQQQQNQQNNNLGYI 495 Score = 89 (36.4 bits), Expect = 1.8, P = 0.84 Identities = 26/98 (26%), Positives = 52/98 (53%) Query: 48 EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE 107 E+KK +K++ QE + L K E EKEQ+ ++ L + A + E+++ E Sbjct: 377 EQKKREEKQRQLQQEQKEKQEKLE-----KEEKEKEQQEQQKQLLIKLAKE-KEEKEKFE 430 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQ 145 E+ + ++ +++++ + L Q+ + E E +L QQ Q Sbjct: 431 KEQQQQKEKELQKEKELLQQK--EKEKEKEKLQQQQQQ 466 >sp|Q3TLH4|BA2L2_MOUSE Protein BAT2-like 2 OS=Mus musculus GN=Bat2l2 PE=1 SV=2 Length = 2828 Score = 89 (36.4 bits), Expect = 0.096, Sum P(2) = 0.092 Identities = 30/106 (28%), Positives = 54/106 (50%) Query: 43 QEVKPEEKKPA---KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT 99 +E + EE++ A +K K ++L + + P + + E EKE+ ER L + Sbjct: 468 EERRMEEQRKAACAEKLKQLDEKLGIIEKQPSPEELREREREKER---ERELEKEKEREL 524 Query: 100 SRER-KRLEMEKLENEKIQMEQQNQFL--LQRLSQMEAENNRLSQQ 142 +E+ K+ EME+ ++ ++EQQ + LQRL + E E Q+ Sbjct: 525 EKEQEKQREMERARQQEKELEQQREKEQELQRLREQEKEGEPKEQE 570 Score = 70 (29.7 bits), Expect = 9.4, Sum P(2) = 0.99992 Identities = 33/143 (23%), Positives = 55/143 (38%) Query: 7 KTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP 66 K SS D TP S V A ++ +S+ + TQ P K P K + QE P Sbjct: 345 KESSSEDQTAKTPESTENRKEVDEASSTKSSSQIPTQP--PVTKSPYGKGPPFNQERG-P 401 Query: 67 KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLL 126 ++LPP + + +R + R S+ E + + Q + + + Sbjct: 402 SSHLPPPPKLLAQQHPPPP--DRQIPGRQGPFPSKPPVPDNDEIWKQRRKQQSEISAAVE 459 Query: 127 QRLSQMEAENNRLSQQLAQLAAE 149 + + E E R+ +Q AE Sbjct: 460 RARKRREEEERRMEEQRKAACAE 482 Score = 67 (28.6 bits), Expect = 0.096, Sum P(2) = 0.092 Identities = 33/138 (23%), Positives = 52/138 (37%) Query: 140 SQQLAQLAAEVRGSRANTPMPGSPATASPTL-TPTL-FKQERDELPLERIP----FPTPS 193 S + LA+ + + ++P P ATA P++ TP + +PL P P Sbjct: 1816 SASIPILASALAPATVSSPTPVVSATAVPSISTPAVPASAPTASVPLAPASAASTVPPPG 1875 Query: 194 LSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDD-VAAPLS 252 L P P T ES+ + + G ++P L D VAAP Sbjct: 1876 LDSADPDPDPQTSPESTRLPSAQTSNGTDFVAAGKSMPTSQSHGSLTAELWDSKVAAPAV 1935 Query: 253 DDDFNRLFHGDSSVEPDS 270 +D ++ S +P S Sbjct: 1936 LNDISKKLGPISPPQPPS 1953 Score = 52 (23.4 bits), Expect = 3.0, Sum P(2) = 0.95 Identities = 15/53 (28%), Positives = 22/53 (41%) Query: 158 PMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS 210 P+P S + P T + P +P PTP L+ S T+ L +S Sbjct: 1768 PVPTSASAPVPASTSSPVTASSSSQP--SVPAPTPVLASASTTVSVPILTSAS 1818 >sp|Q04323|UBXN1_HUMAN UBX domain-containing protein 1 OS=Homo sapiens GN=UBXN1 PE=1 SV=2 Length = 297 Score = 95 (38.5 bits), Expect = 0.096, P = 0.092 Identities = 35/146 (23%), Positives = 69/146 (47%) Query: 49 EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL-RNRAAAQTSRERKRLE 107 E KPA + QE L +K+ + E+ +E+ +ER R R + S R+RL+ Sbjct: 81 EGKPALSEEE-RQEQTKRMLELVAQKQREREEREEREALERERQRRRQGQELSAARQRLQ 139 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSP---- 163 +++ E++ + + L+ + ++ + A+ A + GS + P P +P Sbjct: 140 EDEMRRAA---EERRREKAEELAARQRVREKIERDKAERAKKYGGSVGSQPPPVAPEPGP 196 Query: 164 ATASPTLTPTLFKQERDELPLE-RIP 188 +SP+ P K+E D+ ++ R+P Sbjct: 197 VPSSPSQEPPT-KREYDQCRIQVRLP 221 Score = 77 (32.2 bits), Expect = 9.9, P = 0.99995 Identities = 44/142 (30%), Positives = 64/142 (45%) Query: 74 KRAKTEDEKEQRRIERVLRNRAAAQTSRERK-RLEMEKLENEKIQMEQQNQFLL---QRL 129 K A +E+E+ Q + +R+L AQ RER+ R E E LE E+ Q +Q Q L QRL Sbjct: 83 KPALSEEER-QEQTKRMLE--LVAQKQREREEREEREALERER-QRRRQGQELSAARQRL 138 Query: 130 SQME---AENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLER 186 + E A R ++ +LAA R + A + ++ Q P+ Sbjct: 139 QEDEMRRAAEERRREKAEELAAR---QRVREKIERDKAERAKKYGGSVGSQPP---PVAP 192 Query: 187 IPFPTPSLSDYSPTLKPSTLAE 208 P P PS SP+ +P T E Sbjct: 193 EPGPVPS----SPSQEPPTKRE 210 >sp|P23922|HBP1A_WHEAT Transcription factor HBP-1a OS=Triticum aestivum PE=2 SV=1 Length = 349 Score = 96 (38.9 bits), Expect = 0.097, P = 0.092 Identities = 29/97 (29%), Positives = 49/97 (50%) Query: 59 WGQ--ELPVP--KTNLPPRK-RAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN 113 WG PVP + +P R + DE+E ++ +R L NR +A+ SR RK+ E E+L Sbjct: 223 WGATGSSPVPAMRGKVPSGSARGEQWDERELKKQKRKLSNRESARRSRLRKQAECEELGQ 282 Query: 114 EKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV 150 ++ +N L L +++ E L + L A++ Sbjct: 283 RAEALKSENSSLRIELDRIKKEYEELLSKNTSLKAKL 319 >sp|Q9C5Q2|AI5L3_ARATH ABSCISIC ACID-INSENSITIVE 5-like protein 3 OS=Arabidopsis thaliana GN=DPBF4 PE=1 SV=1 Length = 262 Score = 94 (38.1 bits), Expect = 0.099, P = 0.094 Identities = 23/65 (35%), Positives = 42/65 (64%) Query: 71 PPRKRAKTE--DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQR 128 P RKR E ++ +RR +R+++NR +A SR RK+ +LE + ++E++N+ L+R Sbjct: 176 PGRKRVAGEIVEKTVERRQKRMIKNRESAARSRARKQAYTHELEIKVSRLEEENE-KLRR 234 Query: 129 LSQME 133 L ++E Sbjct: 235 LKEVE 239 >sp|Q54TD7|DDX24_DICDI ATP-dependent RNA helicase ddx24 OS=Dictyostelium discoideum GN=ddx24 PE=3 SV=1 Length = 940 Score = 101 (40.6 bits), Expect = 0.10, P = 0.097 Identities = 26/114 (22%), Positives = 60/114 (52%) Query: 32 DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQR-RIERV 90 D + N + + +EVKP++K +K++ Q+ P + P +K K E +KE+ ++E Sbjct: 168 DDNDNDFEDEEEEVKPQQKLQKQKQQEQKQKQPQKQPQQPNKKNNKKELQKEEEEQMEEE 227 Query: 91 LRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNR--LSQQ 142 Q E K ++ + ++ +K++ ++Q + + ++++E R +S+Q Sbjct: 228 KEEEEVQQEEEEEKEIK-KPIKEKKVKTQKQIEAAKKNINKLEKIKKRKEISEQ 280 >sp|Q5F797|IF2_NEIG1 Translation initiation factor IF-2 OS=Neisseria gonorrhoeae (strain ATCC 700825 / FA 1090) GN=infB PE=3 SV=1 Length = 943 Score = 101 (40.6 bits), Expect = 0.10, P = 0.098 Identities = 43/162 (26%), Positives = 68/162 (41%) Query: 17 ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA 76 A PA++ P T + A+T+ +A+ K E K + KP +R G++ P P Sbjct: 151 AKPAAQKP--TEAKAETAPVAAETKPAEPKEKAVKPKHERNGKGKDAKKPAKPAAPAVPQ 208 Query: 77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136 +EQ + + R RAAA R E L EK Q+ Q + + Q +AE Sbjct: 209 PVVSAEEQAQRDEEAR-RAAAL------RAHQEALLKEK----QERQARREAMKQ-QAEQ 256 Query: 137 NRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE 178 + Q A+ + A P +PA + + P K+E Sbjct: 257 QAKAAQEAKTGRQRPAKPAEKPQAAAPAVENKPVNPAKAKKE 298 >sp|B4RMZ3|IF2_NEIG2 Translation initiation factor IF-2 OS=Neisseria gonorrhoeae (strain NCCP11945) GN=infB PE=3 SV=1 Length = 943 Score = 101 (40.6 bits), Expect = 0.10, P = 0.098 Identities = 43/162 (26%), Positives = 68/162 (41%) Query: 17 ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA 76 A PA++ P T + A+T+ +A+ K E K + KP +R G++ P P Sbjct: 151 AKPAAQKP--TEAKAETAPVAAETKPAEPKEKAVKPKHERNGKGKDAKKPAKPAAPAVPQ 208 Query: 77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136 +EQ + + R RAAA R E L EK Q+ Q + + Q +AE Sbjct: 209 PVVSAEEQAQRDEEAR-RAAAL------RAHQEALLKEK----QERQARREAMKQ-QAEQ 256 Query: 137 NRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE 178 + Q A+ + A P +PA + + P K+E Sbjct: 257 QAKAAQEAKTGRQRPAKPAEKPQAAAPAVENKPVNPAKAKKE 298 >sp|Q86AH4|Y8592_DICDI Putative uncharacterized protein DDB_G0271982 OS=Dictyostelium discoideum GN=DDB_G0271982 PE=4 SV=1 Length = 629 Score = 99 (39.9 bits), Expect = 0.10, P = 0.099 Identities = 47/192 (24%), Positives = 80/192 (41%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100 K +E + E++K +K K +E K R+R + + + +R ER + Sbjct: 310 KEKEKEKEKEKEKEKEKEIEKEREKEKEREREREREREREREREREREREREREKEKEKE 369 Query: 101 RERKRLEMEKLENEKIQMEQQNQFLLQRLS-QMEAENNRLSQQLAQLAAEVRGSRANTPM 159 RER+R E E+ E E+ E++ +F +R + E E +L+ + +R + + + Sbjct: 370 RERER-ERER-ERER---EREKEFEKERREREKEREREKLNITKDKEKQVIRETTIDETL 424 Query: 160 PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS 219 PT T K P+ P PS++ YS +L PS S A S Sbjct: 425 -NKETPHKPTPHITTKKSPNLTPPISSTASP-PSVTTYS-SLIPSIPTPQSAAATTTTPS 481 Query: 220 VAGLEGDGSALP 231 A L + +P Sbjct: 482 SATLTAVSATIP 493 >sp|Q8IIG7|YPF05_PLAF7 Uncharacterized protein PF11_0207 OS=Plasmodium falciparum (isolate 3D7) GN=PF11_0207 PE=4 SV=1 Length = 964 Score = 101 (40.6 bits), Expect = 0.11, P = 0.10 Identities = 33/134 (24%), Positives = 69/134 (51%) Query: 39 DVKTQEVKPEEKKPAKKRKSWGQELP--VPKTNLPPRKRAKTEDEKEQRRIERVLRNRAA 96 ++K +EVK E K+ ++ K +E+ + + ++ K E ++E + I+ L+N + Sbjct: 616 EIK-EEVKEEIKEVKEEIKEVKEEIKEEIKEVKEEIKEEVKEEIKEEIKEIKEELKNDIS 674 Query: 97 AQTSRERKRLEMEKLENEKIQMEQQNQFLLQR-LSQMEAENNRLSQQLAQLAAEVRGSRA 155 ++T++E K E +K E EK + + + Q+ L + E N +L +Q + E+R Sbjct: 675 SETTKEEKNTEHKKEETEKKKFIPKRVIMYQQELKEKEERNLKLLEQQRK-EREMRLQLI 733 Query: 156 NTPMPGSPATASPT 169 + G+ +T P+ Sbjct: 734 RSKTQGTSSTFIPS 747 >sp|B2KI97|THOC2_RHIFE THO complex subunit 2 OS=Rhinolophus ferrumequinum GN=THOC2 PE=3 SV=1 Length = 1576 Score = 103 (41.3 bits), Expect = 0.11, P = 0.11 Identities = 49/188 (26%), Positives = 88/188 (46%) Query: 36 NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRA 95 NS+ ++ VK +K+ K+++ +E P T P R +D KE+ + ER ++ Sbjct: 1257 NSSSNSSKTVKENDKEKGKEKEKEKKE-KTPATT--PEARILGKDGKEKPKEERPNKDEK 1313 Query: 96 AAQTSRERKRLEMEK---LENEKIQMEQQNQFL--LQRLSQMEAENNRLSQQLAQLAAEV 150 A +T + + EK + EK++ E+ + ++ S E E + + +A E+ Sbjct: 1314 ARETKERTPKSDKEKEKFKKEEKVKDEKFKTTVPNVESKSTQEKEREKEPSRERDIAKEM 1373 Query: 151 RGSRAN------TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS 204 + S+ N TP+ GS SP + + ER++ + P+PS +S T+K S Sbjct: 1374 K-SKENVKGGEKTPVSGS--LKSPVPRSDIAEPEREQKRRKIDTHPSPS---HSSTVKDS 1427 Query: 205 T--LAESS 210 L ESS Sbjct: 1428 LIELKESS 1435 >sp|Q9UM54|MYO6_HUMAN Myosin-VI OS=Homo sapiens GN=MYO6 PE=1 SV=4 Length = 1294 Score = 102 (41.0 bits), Expect = 0.11, P = 0.11 Identities = 37/146 (25%), Positives = 69/146 (47%) Query: 43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102 +E++ E K+ + K +E + L + K E+E+ ++R + R +A + Sbjct: 931 EEMEKERKRREEDEKRRRKEEEERRMKLEMEAKRKQEEEERKKREDDEKRIQAEVEAQLA 990 Query: 103 RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS 162 R++ E E + ++ E++++ L R++Q EAE L AQ +R S + P+ + Sbjct: 991 RQK-EEESQQQAVLEQERRDRELALRIAQSEAE---LISDEAQADLALRRSLDSYPVSKN 1046 Query: 163 PATASPTLTPTLFKQERDELPLERIP 188 T P +TP +E E L R P Sbjct: 1047 DGTR-PKMTPEQMAKEMSEF-LSRGP 1070 Score = 85 (35.0 bits), Expect = 8.2, P = 0.9997 Identities = 35/145 (24%), Positives = 69/145 (47%) Query: 11 SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL 70 S+D+L A S + +T ++ VK+ E + K+++ + L + + Sbjct: 877 SIDTLMAKIKSTM--MTQEQIQKEYDAL-VKSSEELLSALQKKKQQEEEAERLRRIQEEM 933 Query: 71 PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE--KIQMEQQNQFLLQR 128 ++ + EDEK +R+ E R + + R+++ E +K E++ +IQ E + Q Q+ Sbjct: 934 EKERKRREEDEKRRRKEEEERRMKLEMEAKRKQEEEERKKREDDEKRIQAEVEAQLARQK 993 Query: 129 L--SQMEA--ENNRLSQQLAQLAAE 149 SQ +A E R ++LA A+ Sbjct: 994 EEESQQQAVLEQERRDRELALRIAQ 1018 >sp|Q3KQU3|MA7D1_HUMAN MAP7 domain-containing protein 1 OS=Homo sapiens GN=MAP7D1 PE=1 SV=1 Length = 841 Score = 100 (40.3 bits), Expect = 0.12, P = 0.11 Identities = 53/211 (25%), Positives = 88/211 (41%) Query: 16 PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR 75 P TP+ + T T L A+ + Q + E++ ++R ++ + + L Sbjct: 583 PVTPSKPMAGTTDREEATRL-LAEKRRQAREQREREEQERRLQAERDKRMREEQLAREAE 641 Query: 76 AKTEDEKE-QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA 134 A+ E E E +RR E+ R +A A+ E++RL+ +K E E E+ + QRL Sbjct: 642 ARAEREAEARRREEQEAREKAQAE-QEEQERLQKQKEEAEARSREEAER---QRL----- 692 Query: 135 ENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLE-RIPFPTPS 193 E + QQ Q E R R M T ++ T KQ+ E P P + Sbjct: 693 EREKHFQQQEQERQE-RRKRLEEIMK---RTRKSEVSETKQKQDSKEANANGSSPEPVKA 748 Query: 194 LSDYSPTLKPSTLAESSDVAQHPAVSVAGLE 224 + SP L+ + + + Q P S+ E Sbjct: 749 VEARSPGLQKEAVQKEEPIPQEPQWSLPSKE 779 Score = 87 (35.7 bits), Expect = 3.1, P = 0.95 Identities = 36/128 (28%), Positives = 51/128 (39%) Query: 16 PATPASEVPVLTVSPADTS-LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRK 74 PA P E P +P D + L S V P + + L K + Sbjct: 555 PAPPQKEQPPAE-TPTDAAVLTSPPAPAPPVTPSKPMAGTTDREEATRLLAEKRRQAREQ 613 Query: 75 RAKTEDEK------EQRRIERVLRNRAAAQTSRERKRLEMEKLE-NEKIQMEQQNQFLLQ 127 R + E E+ ++R E L A A+ RE + E+ E EK Q EQ+ Q LQ Sbjct: 614 REREEQERRLQAERDKRMREEQLAREAEARAEREAEARRREEQEAREKAQAEQEEQERLQ 673 Query: 128 RLSQMEAE 135 + + EAE Sbjct: 674 KQKE-EAE 680 Score = 83 (34.3 bits), Expect = 8.4, P = 0.9998 Identities = 34/136 (25%), Positives = 64/136 (47%) Query: 16 PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKP--AKKRKSWGQELP--VPKTNLP 71 P +P+ +V P + S S++ K++ P P A+ + Q P VP ++ P Sbjct: 68 PESPSGQVGPRPAPPQEES-PSSEAKSRGPTPPAMGPRDARPPRRSSQPSPTAVPASDSP 126 Query: 72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131 P K+ + + E+ ++ + R A + +K + +EK E K E+Q Q +RL + Sbjct: 127 PTKQ-EVKKAGERHKLAKERREERAKYLAA-KKAVWLEKEEKAKALREKQLQERRRRLEE 184 Query: 132 --MEAENNRLSQQLAQ 145 ++AE R + + Q Sbjct: 185 QRLKAEQRRAALEERQ 200 >sp|Q14244|MAP7_HUMAN Ensconsin OS=Homo sapiens GN=MAP7 PE=1 SV=1 Length = 749 Score = 98 (39.6 bits), Expect = 0.17, P = 0.15 Identities = 39/146 (26%), Positives = 67/146 (45%) Query: 14 SLPATPASEVPVLTVSPADTSLNSADVKTQE--VKPEE--KKPAKKRKSWGQELPVPKTN 69 S PA P + +P+ T SA VKT PEE + A+KR+ ++ K Sbjct: 441 SAPAPAPVPTPAMVSAPSSTVNASASVKTSAGTTDPEEATRLLAEKRRLAREQRE--KEE 498 Query: 70 LPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL 129 R++ + E +K + +RV R + E +RLE E+ ++ Q+++Q + R Sbjct: 499 RERREQEELERQKREELAQRVAEERTTRR-EEESRRLEAEQAREKEEQLQRQAEERALR- 556 Query: 130 SQMEAEN-NRLSQQLAQLAAEVRGSR 154 + EAE R ++ A++ E R Sbjct: 557 EREEAERAQRQKEEEARVREEAERVR 582 Score = 92 (37.4 bits), Expect = 0.12, Sum P(2) = 0.11 Identities = 25/119 (21%), Positives = 57/119 (47%) Query: 75 RAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA 134 R + E E+ QR+ E R R A+ R+ + ++ E E+++ +++ + +++R + EA Sbjct: 556 REREEAERAQRQKEEEARVREEAERVRQEREKHFQREEQERLERKKRLEEIMKRTRRTEA 615 Query: 135 ENNRLSQQL-AQLA-AEVRGSRANTPMP---GSPATASPTLTPTLFKQERDELPLERIP 188 + + S Q +A + G + +P +P P +P + + ++ +E P Sbjct: 616 TDKKTSDQRNGDIAKGALTGGTEVSALPCTTNAPGNGKPVGSPHVVTSHQSKVTVESTP 674 Score = 51 (23.0 bits), Expect = 0.12, Sum P(2) = 0.11 Identities = 22/70 (31%), Positives = 32/70 (45%) Query: 11 SVDSLPATP--ASEVPVLTVSPADTSL------NSADVKTQ-EVKPEEKKPAKKRKSWGQ 61 S+ LP TP S +P +V A + N VK + +V+PE+K P K+ + Sbjct: 335 SLPHLPGTPRPTSSLPPGSVKAAPAQVRPPSPGNIRPVKREVKVEPEKKDPEKEPQKVAN 394 Query: 62 ELPVPKTNLP 71 E P K P Sbjct: 395 E-PSLKGRAP 403 >sp|P29596|ATF3_RAT Cyclic AMP-dependent transcription factor ATF-3 OS=Rattus norvegicus GN=Atf3 PE=2 SV=1 Length = 181 Score = 90 (36.7 bits), Expect = 0.12, P = 0.11 Identities = 29/99 (29%), Positives = 48/99 (48%) Query: 62 ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ 121 E+ V K+ + P EDE+++RR ER N+ AA R +K+ + E L+ E ++E Sbjct: 73 EMSVTKSEVAPE-----EDERKRRRRER---NKIAAAKCRNKKKEKTECLQKESEKLESV 124 Query: 122 NQFLLQRLSQMEAENNRLSQQLA--QLAAEVRGSRANTP 158 N L ++ +++ E L L + VR TP Sbjct: 125 NAELKAQIEELKNEKQHLIYMLNLHRPTCIVRAQNGRTP 163 >sp|Q5TM26|BAT2_MACMU Large proline-rich protein BAT2 OS=Macaca mulatta GN=BAT2 PE=3 SV=1 Length = 2160 Score = 104 (41.7 bits), Expect = 0.12, P = 0.11 Identities = 49/196 (25%), Positives = 84/196 (42%) Query: 18 TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRK---SWGQELPVPKTNLPPRK 74 +P SE+P + A+TS + + P+ P R +WG P PP K Sbjct: 380 SPNSELPPPKTAWAETS-RPPETEPGPPAPKPPLPPPHRGPAGNWGPPGDYPDRGGPPCK 438 Query: 75 RAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEA 134 EDE E R +R R +++++ S +R + E E+ E++ ++L +++ Sbjct: 439 PPAPEDEDEAWR-QR--RKQSSSEISLAVERARRRREEEERRMQEERRAACAEKLKRLDE 495 Query: 135 ENNRLSQQL-AQLAAEVRGSRANTPMPG------SPATASPTLTPTLFKQ--ERDELPLE 185 + ++L A+ AA P P +P SP PT K+ E + P Sbjct: 496 KFGAPDKRLKAEPAAPPAAPSTPAPPPAVPKELPAPLAPSPASAPTPEKEPEESAQAPPA 555 Query: 186 RIPFPTPSLSDYSPTL 201 + PTP ++ +PTL Sbjct: 556 QCT-PTPGVAA-APTL 569 >sp|Q0IHP2|INCE_XENTR Inner centromere protein OS=Xenopus tropicalis GN=incenp PE=2 SV=1 Length = 898 Score = 100 (40.3 bits), Expect = 0.12, P = 0.12 Identities = 42/152 (27%), Positives = 71/152 (46%) Query: 43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTED---EKEQRRIERV-LRNRAAAQ 98 Q+ + EE+ +K+ + + L + R+R + + EKE+ R ER + A Q Sbjct: 642 QKKREEEELERQKKIAEAKRLAEQRQAEQERERQREQQLLAEKERLRAERERIEREKALQ 701 Query: 99 TSRERKRLEMEKLEN-----EKIQMEQQNQFLLQRLSQM--EAENNRLSQQLAQLAAEVR 151 RE +R EK + E+ + EQQ + +RL ++ E E RL ++ + A E + Sbjct: 702 LQRELERAAQEKEQQRREAEERKKREQQERLEQERLERLHKEQEAKRLQEEQQRKAKE-Q 760 Query: 152 GSRANTP-------MPGSPATASPTLTPTLFK 176 + A+ P M SPA S +TP +K Sbjct: 761 AAAASAPVMNVTVDMQNSPACESYEMTPKSYK 792 Score = 85 (35.0 bits), Expect = 5.5, P = 0.996 Identities = 31/112 (27%), Positives = 56/112 (50%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP--RK-RAKTEDEKEQRRIERVLRNRAAA 97 K +E + E+K KK + QE + RK +AK +E+E+R + + + R Sbjct: 589 KVREDRMAEEKAKKKITAKKQEEVECRRRQEEEARKLKAKQMEEEERRHQDLLQKKREEE 648 Query: 98 QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149 + R++K E ++L ++ Q EQ+ + QR Q+ AE RL + ++ E Sbjct: 649 ELERQKKIAEAKRLAEQR-QAEQERE--RQREQQLLAEKERLRAERERIERE 697 >sp|Q9NQS7|INCE_HUMAN Inner centromere protein OS=Homo sapiens GN=INCENP PE=1 SV=3 Length = 918 Score = 100 (40.3 bits), Expect = 0.13, P = 0.12 Identities = 39/136 (28%), Positives = 66/136 (48%) Query: 18 TPASEVPVL-TVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA 76 TP+S P V P T L++ + Q + P KS+ K N P R Sbjct: 478 TPSSPCPASKVVRPLRTFLHTVQ-RNQMLMTPTSAPRSVMKSF------IKRNTPLRMDP 530 Query: 77 KTED-EKEQRRIERVLRNRAAAQTSRER-KRLEMEKLENEKIQMEQQNQFLLQ---RLSQ 131 K EKE++R+E + R A Q R++ + + +LE K++ E++ + +LQ R+ Q Sbjct: 531 KCSFVEKERQRLENLRRKEEAEQLRRQKVEEDKRRRLEEVKLKREERLRKVLQARERVEQ 590 Query: 132 MEAENNR-LSQQLAQL 146 M+ E + + Q+ AQ+ Sbjct: 591 MKEEKKKQIEQKFAQI 606 Score = 94 (38.1 bits), Expect = 0.58, P = 0.44 Identities = 28/116 (24%), Positives = 58/116 (50%) Query: 37 SADVKTQEVKPEEKKPAKKRK-SWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRA 95 +A K +EV+ K+ + R+ W Q+ + + ++ K E+EQ R+ + + Sbjct: 627 AAAKKMEEVEARRKQEEEARRLRWLQQEEEERRHQELLQKKK---EEEQERLRKAAEAKR 683 Query: 96 AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151 A+ RE++R E E+ E E+ + E++ Q ++ Q+ + R Q+ Q E++ Sbjct: 684 LAE-QREQERREQERREQERREQERREQERREQERQLAEQERRREQERLQAERELQ 738 Score = 91 (37.1 bits), Expect = 1.2, P = 0.71 Identities = 29/118 (24%), Positives = 56/118 (47%) Query: 39 DVKTQEVKPE---EKKPAKKRKSWG-QELPVPKTNLPPRKRAK-TEDEKEQRRIERVLRN 93 D KT++ K E E+K KK + +E+ + +R + + E+E+RR + +L+ Sbjct: 607 DEKTEKAKEERLAEEKAKKKAAAKKMEEVEARRKQEEEARRLRWLQQEEEERRHQELLQK 666 Query: 94 RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151 + + R RK E ++L ++ Q ++ + Q + E +Q QLA + R Sbjct: 667 KKEEEQERLRKAAEAKRLAEQREQERREQERREQERREQERREQERREQERQLAEQER 724 Score = 90 (36.7 bits), Expect = 1.6, P = 0.80 Identities = 40/144 (27%), Positives = 70/144 (48%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK-EQRRIERVLRNRAAAQT 99 K +E + E + A + K ++ + R++ + E E+ EQ R E+ R A + Sbjct: 666 KKKEEEQERLRKAAEAKRLAEQREQERREQERREQERREQERREQERREQE-RQLAEQER 724 Query: 100 SRERKRLEMEK--LENEK---IQMEQQNQFLLQRLSQMEAEN---NRLSQQLAQLAAEVR 151 RE++RL+ E+ E EK +Q EQ + L ++ + E + +L ++ + A E Sbjct: 725 RREQERLQAERELQEREKALRLQKEQLQRELEEKKKKEEQQRLAERQLQEEQEKKAKEAA 784 Query: 152 G-SRA-NTPMP-GSPATASPTLTP 172 G S+A N + SPA S +TP Sbjct: 785 GASKALNVTVDVQSPACTSYQMTP 808 Score = 84 (34.6 bits), Expect = 7.2, P = 0.9993 Identities = 35/165 (21%), Positives = 77/165 (46%) Query: 34 SLNSAD-VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL- 91 ++++ D V +E++ E ++ + S EL +PKT P +K + +++RRI V Sbjct: 25 NMDNKDLVWLEEIQEEAERMFTREFSKEPEL-MPKT--PSQK-----NRRKKRRISYVQD 76 Query: 92 RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151 NR + R++ +L + +++ + +++L+ + EN + +++ + AA Sbjct: 77 ENRDPIRRRLSRRKSRSSQLSSRRLRSKDS----VEKLATVVGENGSVLRRVTRAAAAAA 132 Query: 152 GSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSD 196 + P SP SPT+ K E + + +P +S+ Sbjct: 133 AATMALAAPSSPTPESPTMLTK--KPEDNHTQCQLVPVVEIGISE 175 >sp|Q5HZY0|UBXN4_RAT UBX domain-containing protein 4 OS=Rattus norvegicus GN=Ubxn4 PE=2 SV=1 Length = 506 Score = 97 (39.2 bits), Expect = 0.13, P = 0.12 Identities = 67/279 (24%), Positives = 116/279 (41%) Query: 73 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM 132 R K E+ +E++R E R + ER++ E L+ ++ Q E+ + +L+ S+ Sbjct: 200 RLTKKLEERREEKRKEEAQRE---IKKEIERRKTGKEMLDYKRKQEEELTKRMLEERSRE 256 Query: 133 EAENN----RLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTL---FKQE---RDEL 182 +AE+ R+ QQ+A AE R +R A A+ L K+E RD Sbjct: 257 KAEDRAARERIKQQIALDRAE-RAARFAKTKEAEAAKAAALLAKQAEAEVKRESSTRDRS 315 Query: 183 PLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD----LGSD 238 + RI F P S ++ PS A + Q A +V G+ S +F D Sbjct: 316 TIARIQFRLPDGSSFTNQF-PSD-APLEEARQFAAQTVGNTYGNFSLATMFPRREFTRED 373 Query: 239 LKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNF 298 K D AP + +S+ P SS G + +L G L +PF ++ Sbjct: 374 YKRKLLDLELAPSASVVLLPAGRPATSIVPSSS----GDIWTLL-GTVL--YPFLAIWRL 426 Query: 299 DSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCD 337 + ++ P +T+ + +S +P AS+++ + Sbjct: 427 ------ISNFLFSNPPPAQTSARATSTEPSNSASSSKSE 459 >sp|Q90595|MAFF_CHICK Transcription factor MafF OS=Gallus gallus GN=MAFF PE=1 SV=1 Length = 149 Score = 87 (35.7 bits), Expect = 0.13, P = 0.12 Identities = 32/106 (30%), Positives = 53/106 (50%) Query: 63 LPVPKTNLPPRKRAKTEDEK-EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ 121 L V + N R +K E + +QRR R L+NR A + R ++ + E+L+ +K+++E + Sbjct: 32 LSVRELNHHLRGLSKEEVARLKQRR--RTLKNRGYAASCRVKRVCQKEELQKQKMELEWE 89 Query: 122 NQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS 167 L + + M E + L + L R A+ P P ATAS Sbjct: 90 VDKLARENAAMRLELDTLRGKYEALQGFARTVAAHGP-PAKVATAS 134 >sp|Q6ZSZ5|ARHGI_HUMAN Rho guanine nucleotide exchange factor 18 OS=Homo sapiens GN=ARHGEF18 PE=1 SV=2 Length = 1173 Score = 101 (40.6 bits), Expect = 0.13, P = 0.12 Identities = 42/154 (27%), Positives = 69/154 (44%) Query: 80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRL 139 +++ QR E+ RAA + + + R E ++ E E+ Q+ + RL + E E +L Sbjct: 851 EQERQRNFEKQREERAALEKLQSQLRHEQQRWERERQWQHQELERAGARLQEREGEARQL 910 Query: 140 SQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSP 199 ++L Q AE+ R + ++ER EL L R+ + +P Sbjct: 911 RERLEQERAELERQRQAYQHDLERLREAQRAVER--ERERLEL-LRRL-----KKQNTAP 962 Query: 200 -TLKPSTLAESSDVAQHPAVSVAGLEGDG-SALP 231 L P TLAE+ + P+ + GLEG S LP Sbjct: 963 GALPPDTLAEAQPPSHPPSFNGEGLEGPRVSMLP 996 >sp|Q7PS12|MOEH_ANOGA Moesin/ezrin/radixin homolog 1 OS=Anopheles gambiae GN=Moe PE=3 SV=4 Length = 624 Score = 98 (39.6 bits), Expect = 0.13, P = 0.12 Identities = 26/118 (22%), Positives = 61/118 (51%) Query: 36 NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKE--QRRIERVLRN 93 ++ DV+ + + ++K AK+++ +L + +K+ + ED Q +ER N Sbjct: 299 DTIDVQQMKAQARDEKNAKQQEREKLQLALAARERAEKKQQEYEDRLRSMQEEMERKQAN 358 Query: 94 RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151 + AQ + R + ++ +++ K ++EQ+ L + + ++E N + + A+L E+R Sbjct: 359 LSEAQDTIRRLQEQLNQVQAAKEELEQRQNELHEMMQRLEETKNMEATERAKLEEEIR 416 >sp|P12957|CALD1_CHICK Caldesmon OS=Gallus gallus GN=CALD1 PE=1 SV=2 Length = 771 Score = 99 (39.9 bits), Expect = 0.13, P = 0.13 Identities = 41/144 (28%), Positives = 63/144 (43%) Query: 43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQT 99 + +K EE+K A + K +E K R+RAK E+EK E+R + R AA+ Sbjct: 261 ERLKAEEEKKAAEEKQKAEE---EKKAAEERERAKAEEEKRAAEERERAKAEEERKAAE- 316 Query: 100 SRERKRLEME-KLENEKIQMEQQNQFLLQRLSQME---AENNRLSQQLAQLAAEVRGSRA 155 RER + E E K E+ + E++ + +R E A R + + AAE R RA Sbjct: 317 ERERAKAEEERKAAEERAKAEEERKAAEERAKAEEERKAAEERAKAEKERKAAEER-ERA 375 Query: 156 NTPMPGSPATASPTLTPTLFKQER 179 A L K+++ Sbjct: 376 KAEEEKRAAEEKARLEAEKLKEKK 399 Score = 98 (39.6 bits), Expect = 0.17, P = 0.16 Identities = 44/188 (23%), Positives = 81/188 (43%) Query: 31 ADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERV 90 A+ +A+ + + EEK+ A++R+ E + R+RAK E+E++ ER Sbjct: 278 AEEEKKAAEERERAKAEEEKRAAEERERAKAE--EERKAAEERERAKAEEERKAAE-ERA 334 Query: 91 LRNRAAAQTSRERKRLEME-KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149 + + + ER + E E K E+ + E++ + +R E R +++ A+L AE Sbjct: 335 -KAEEERKAAEERAKAEEERKAAEERAKAEKERKAAEERERAKAEEEKRAAEEKARLEAE 393 Query: 150 VRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSD-YSPTLKPSTLAE 208 + M A L KQE D+ ++ SL + PT K + + Sbjct: 394 KLKEKKK--MEEKKAQEEKAQANLLRKQEEDKEA--KVEAKKESLPEKLQPTSKKDQVKD 449 Query: 209 SSDVAQHP 216 + D + P Sbjct: 450 NKDKEKAP 457 Score = 82 (33.9 bits), Expect = 9.7, P = 0.99994 Identities = 44/196 (22%), Positives = 76/196 (38%) Query: 52 PAKKRKSWGQELPVPKT----NLPPRKRAK--TEDEKEQRRIERVLRNRAAAQTSRERKR 105 P +K ++ +EL PK N R K E +++ + A +++R Sbjct: 472 PEQKAQNGERELTTPKLKSTENAFGRSNLKGAANAEAGSEKLKEKQQEAAVELDELKKRR 531 Query: 106 LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPAT 165 E K+ E+ Q ++Q + +R + E E R+ +++ + AE R P G Sbjct: 532 EERRKILEEEEQKKKQEE--AERKIREEEEKKRMKEEIERRRAEAAEKRQKVPEDGVSEE 589 Query: 166 ASPTLTPTLFKQERDELPLE-RIPFPTPSLSDYSPTLKPS-TLAESSDVAQHPAVSVAGL 223 P F + L +E R F S +KP+ T A S + + + Sbjct: 590 KKPF---KCFSPKGSSLKIEERAEFLNKSAQKSG--MKPAHTTAVVSKIDSRLEQYTSAV 644 Query: 224 EGDGSALPLFDLGSDL 239 G+ +A P SDL Sbjct: 645 VGNKAAKPAKPAASDL 660 >sp|Q08DA8|ATF1_BOVIN Cyclic AMP-dependent transcription factor ATF-1 OS=Bos taurus GN=ATF1 PE=2 SV=1 Length = 270 Score = 93 (37.8 bits), Expect = 0.13, P = 0.13 Identities = 20/58 (34%), Positives = 38/58 (65%) Query: 76 AKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQME 133 +KT+D + +R I R+++NR AA+ R +K+ ++ LEN +E QN+ L++ L ++ Sbjct: 206 SKTDDPQLKREI-RLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKTLK 262 >sp|Q94126|CES2_CAEEL Cell death specification protein 2 OS=Caenorhabditis elegans GN=ces-2 PE=1 SV=1 Length = 211 Score = 91 (37.1 bits), Expect = 0.14, P = 0.13 Identities = 33/123 (26%), Positives = 64/123 (52%) Query: 26 LTVSPADTSLNSADV--KTQEVKPEEK---KPAKKRKSW--GQELPVPKTNLPPRKRAKT 78 L + P D SL + ++ T+++K E++ P R S P+ + P RK + Sbjct: 52 LGILPFD-SLPTTNLLTPTKKIKLEDELCASPVSSRSSTVSSSHFSSPQRS-PSRKMSVP 109 Query: 79 --EDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136 E++K+ ER +N AA+ SR+ +R + E++ ++ +E++N L ++S +E E Sbjct: 110 IPEEKKDSAYFERRRKNNDAAKRSRDARRQKEEQIASKAHALERENMQLRGKVSSLEQEA 169 Query: 137 NRL 139 +L Sbjct: 170 AQL 172 >sp|O66547|Y157_AQUAE Uncharacterized protein aq_157 OS=Aquifex aeolicus GN=aq_157 PE=3 SV=1 Length = 162 Score = 88 (36.0 bits), Expect = 0.14, P = 0.13 Identities = 30/102 (29%), Positives = 60/102 (58%) Query: 34 SLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRN 93 SL+ A V T +V E K AK + EL + L ++ E +K+ +++ L + Sbjct: 21 SLDFACVDTNKVIRESKFIAKAQT----EL---RKELEKYQKLIQEKQKKLEALKKSLES 73 Query: 94 RAAAQTSRERKRLEMEKLENE--KIQMEQQNQFLLQRLSQME 133 +A ++ ++E+K E+E+LE+E K+Q+E Q++ L ++ +++E Sbjct: 74 KALSEKAKEKKAKEIEQLEDELRKLQVEAQSK-LSRKKAELE 114 >sp|A6ZRZ0|NST1_YEAS7 Stress response protein NST1 OS=Saccharomyces cerevisiae (strain YJM789) GN=NST1 PE=3 SV=1 Length = 1240 Score = 101 (40.6 bits), Expect = 0.14, P = 0.13 Identities = 32/112 (28%), Positives = 61/112 (54%) Query: 35 LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR 94 L +++ +E + ++ + AK++K +E K L ++R + EK++++ E + R R Sbjct: 681 LEEREMRRREAQRKKVEEAKRKKD--EER---KRRLEEQQRREEMQEKQRKQKEELKRKR 735 Query: 95 AAAQTS-RERKRLEMEKLENEKIQMEQQ-----NQFLLQRLSQMEAENNRLS 140 + RE+KRLE EKL+ EK + E+Q + Q+L++ + N LS Sbjct: 736 EEEKKRIREQKRLEQEKLQKEKEEEERQRLIAEDALRKQKLNEEQTSANILS 787 Score = 92 (37.4 bits), Expect = 1.4, P = 0.74 Identities = 47/193 (24%), Positives = 78/193 (40%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100 K +E K KK ++R+ +E K RK+ DE+ +RR+E R + Sbjct: 669 KREEEKERLKKELEEREMRRREAQRKKVEEAKRKK----DEERKRRLEEQQRREEMQEKQ 724 Query: 101 RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP 160 R++K K E EK ++ +Q + ++L Q E E + +A+ A +R + N Sbjct: 725 RKQKEELKRKREEEKKRIREQKRLEQEKL-QKEKEEEERQRLIAEDA--LRKQKLNEEQ- 780 Query: 161 GSPATASPTLTPTLFKQERDELPLERIPFP--TPSLSDYSPTLKPSTLAESSDVAQHPAV 218 T++ L+ F + P+ P T D S ++ L + VA V Sbjct: 781 ----TSANILSAKPFTENGVGNPVSSQSHPNMTNYQEDNSCSINDEILKMVNSVAASKPV 836 Query: 219 SVAGLEGDGSALP 231 S G LP Sbjct: 837 SPTGFNVHDLLLP 849 Score = 86 (35.3 bits), Expect = 6.1, P = 0.998 Identities = 25/110 (22%), Positives = 55/110 (50%) Query: 43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102 +E + + +K KK+K +E + ++ K + E+E+ R+++ L R + + Sbjct: 633 EEKRKKREKEEKKQKKREKEKEKKRLQQLAKEEEKRKREEEKERLKKELEEREMRRREAQ 692 Query: 103 RKRLE---MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149 RK++E +K E K ++E+Q QR +M+ + + ++L + E Sbjct: 693 RKKVEEAKRKKDEERKRRLEEQ-----QRREEMQEKQRKQKEELKRKREE 737 >sp|P53935|NST1_YEAST Stress response protein NST1 OS=Saccharomyces cerevisiae GN=NST1 PE=1 SV=1 Length = 1240 Score = 101 (40.6 bits), Expect = 0.14, P = 0.13 Identities = 32/112 (28%), Positives = 61/112 (54%) Query: 35 LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR 94 L +++ +E + ++ + AK++K +E K L ++R + EK++++ E + R R Sbjct: 681 LEEREMRRREAQRKKVEEAKRKKD--EER---KRRLEEQQRREEMQEKQRKQKEELKRKR 735 Query: 95 AAAQTS-RERKRLEMEKLENEKIQMEQQ-----NQFLLQRLSQMEAENNRLS 140 + RE+KRLE EKL+ EK + E+Q + Q+L++ + N LS Sbjct: 736 EEEKKRIREQKRLEQEKLQKEKEEEERQRLIAEDALRKQKLNEEQTSANILS 787 Score = 92 (37.4 bits), Expect = 1.4, P = 0.74 Identities = 47/193 (24%), Positives = 78/193 (40%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100 K +E K KK ++R+ +E K RK+ DE+ +RR+E R + Sbjct: 669 KREEEKERLKKELEEREMRRREAQRKKVEEAKRKK----DEERKRRLEEQQRREEMQEKQ 724 Query: 101 RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP 160 R++K K E EK ++ +Q + ++L Q E E + +A+ A +R + N Sbjct: 725 RKQKEELKRKREEEKKRIREQKRLEQEKL-QKEKEEEERQRLIAEDA--LRKQKLNEEQ- 780 Query: 161 GSPATASPTLTPTLFKQERDELPLERIPFP--TPSLSDYSPTLKPSTLAESSDVAQHPAV 218 T++ L+ F + P+ P T D S ++ L + VA V Sbjct: 781 ----TSANILSAKPFTENGVGNPVSSQSHPNMTNYQEDNSCSINDEILKMVNSVAASKPV 836 Query: 219 SVAGLEGDGSALP 231 S G LP Sbjct: 837 SPTGFNVHDLLLP 849 Score = 86 (35.3 bits), Expect = 6.1, P = 0.998 Identities = 25/110 (22%), Positives = 55/110 (50%) Query: 43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102 +E + + +K KK+K +E + ++ K + E+E+ R+++ L R + + Sbjct: 633 EEKRKKREKEEKKQKKREKEKEKKRLQQLAKEEEKRKREEEKERLKKELEEREMRRREAQ 692 Query: 103 RKRLE---MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE 149 RK++E +K E K ++E+Q QR +M+ + + ++L + E Sbjct: 693 RKKVEEAKRKKDEERKRRLEEQ-----QRREEMQEKQRKQKEELKRKREE 737 >sp|A3BYC1|HOX25_ORYSJ Homeobox-leucine zipper protein HOX25 OS=Oryza sativa subsp. japonica GN=HOX25 PE=2 SV=2 Length = 320 Score = 94 (38.1 bits), Expect = 0.14, P = 0.13 Identities = 62/269 (23%), Positives = 107/269 (39%) Query: 24 PVLTVSPADTSLNSADVKTQEVKPEEK----KPAKKRKSWGQELPVPKTNLPPRKRAKTE 79 P LT + + L D+ + +E+ A+KR+ +++ + + KR K E Sbjct: 48 PFLTTTHDELELQMEDLVDELYGVDEQGSSSAAARKRRLTAEQVRALERSFEEEKR-KLE 106 Query: 80 DEKEQRRIER--VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN 137 E++ R + + A R R + ++LE + ++ + LL + + A+N Sbjct: 107 PERKSELARRLGIAPRQVAVWFQNRRARWKTKQLELDFDRLRAAHDELLAGRTALAADNE 166 Query: 138 RLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDY 197 L Q+ L +++ + +P P SPA A T P + LE L D Sbjct: 167 SLRSQVILLTEKLQAN-GKSPSP-SPAPAEQTAVPAA-PESAKSFQLEE----GRRLYDA 219 Query: 198 SPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP--LFDLGSDLKHHSTDDVAAPLSDDD 255 + + +T VA PA VA + P F S DD SDDD Sbjct: 220 AGSTT-TTNGGGGGVAM-PAARVAAARAASNDSPESYFAGARSPPSSSEDDCGGAGSDDD 277 Query: 256 F---NRLFHGDSSVEPDSSVFEDGLAFDV 281 + + L D+++ D+ FE +A V Sbjct: 278 YPSSSVLLPVDATLVGDA--FEHAVAATV 304 >sp|B1AZI6|THOC2_MOUSE THO complex subunit 2 OS=Mus musculus GN=Thoc2 PE=3 SV=1 Length = 1594 Score = 102 (41.0 bits), Expect = 0.14, P = 0.13 Identities = 44/182 (24%), Positives = 83/182 (45%) Query: 36 NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRA 95 NS + VK +K+ K+++ +E P T P RA +D KE+ + ER + Sbjct: 1257 NSGSNSNKAVKENDKEKVKEKEKEKKE-KTPATT--PEARALGKDSKEKPKEERPNKEDK 1313 Query: 96 AAQTSRERKRLEMEKLENEKIQMEQQNQF-----LLQRLSQMEAENNRLSQQLAQLAAEV 150 A +T + + EK + +K + + +F +++ S E E + + +A E+ Sbjct: 1314 ARETKERTPKSDKEKEKFKKEEKAKDEKFKTTVPIVESKSTQEREREKEPSRERDVAKEM 1373 Query: 151 RGSRAN------TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS 204 + S+ N TP+ GS SP + + +R++ + P+PS +S T+K S Sbjct: 1374 K-SKENVKGGEKTPVSGS--LKSPVPRSDISEPDREQKRRKIDSHPSPS---HSSTVKDS 1427 Query: 205 TL 206 + Sbjct: 1428 LI 1429 >sp|Q9H254|SPTN4_HUMAN Spectrin beta chain, brain 3 OS=Homo sapiens GN=SPTBN4 PE=1 SV=2 Length = 2564 Score = 104 (41.7 bits), Expect = 0.15, P = 0.14 Identities = 51/210 (24%), Positives = 80/210 (38%) Query: 6 EKTMSSVDSLPATPASEVPV-LTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELP 64 E+ +D LP P P L +P D +A+ E+ +P +R QE Sbjct: 2186 ERLQPRIDRLPEIPGRVEPAALPAAPED----AAETPATPAAAEQVRPRPER----QESA 2237 Query: 65 VPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF 124 LP R+R + ++ +Q E R R Q S E + L + QME++ + Sbjct: 2238 DRAEELPRRRRPERQESVDQSE-EAARRRRPERQESAEHEAAHSLTLGRYE-QMERRRER 2295 Query: 125 LLQRLSQMEAENNRL---------SQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLF 175 +RL + E+ + LA + +++ A +P P+ P P Sbjct: 2296 RERRLERQESSEQEMPIRGDLVKGKATLADIVEQLQEKEAGPGLPAGPSLPQPRELPPGR 2355 Query: 176 KQERDELPLERIPFPT-PSLSDY-SPTLKP 203 ELP ER P P P D P +P Sbjct: 2356 LPNGLELP-ERTPRPDRPRARDRPKPRRRP 2384 >sp|Q2UNX4|KAPC_ASPOR Putative transcription factor kapC OS=Aspergillus oryzae GN=kapC PE=3 SV=2 Length = 284 Score = 93 (37.8 bits), Expect = 0.15, P = 0.14 Identities = 49/213 (23%), Positives = 86/213 (40%) Query: 16 PATPASEVPVL---TVSPAD-TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLP 71 P PA++ P + T SP D +++ A + + P + + GQE P Sbjct: 44 PQPPAAQPPHMQPNTTSPRDQNNIDPAISGAAMLSGPPQTPPQPEPT-GQESP------- 95 Query: 72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131 KT ++ +R +NRAA + R+RK + KLE + + + ++ Sbjct: 96 -----KTYGKRPLSTSKRAAQNRAAQRAFRQRKESYIRKLEEQVKEFDTMSE----AFKA 146 Query: 132 MEAENNRLSQQLAQLAAEVRGSRANTP-MPGSPATASPTLTPTLFKQERDELPLERIPFP 190 ++AEN +L + + L + + S+ P +PG+ + P T Q P Sbjct: 147 LQAENYQLREYIINLQSRLLESQGEVPELPGNIDLSQPR-TDLNVPQPGAGPATTSSSAP 205 Query: 191 TPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL 223 P S P A + D+ ++VAGL Sbjct: 206 APP-SGAQQAQPPQGAASNDDMNSLNRIAVAGL 237 >sp|Q9JJ50|HGS_RAT Hepatocyte growth factor-regulated tyrosine kinase substrate OS=Rattus norvegicus GN=Hgs PE=1 SV=1 Length = 776 Score = 94 (38.1 bits), Expect = 0.15, Sum P(2) = 0.14 Identities = 34/100 (34%), Positives = 52/100 (52%) Query: 82 KEQRRIERVLRNRAAAQTSRERKRLEMEKLE--NEKIQ--MEQQNQFLLQRLSQMEAENN 137 +E+ R E+ LR RAA + R+R+ +KLE +K Q +E Q Q +QRL + E E Sbjct: 487 REEHR-EK-LR-RAAEEAERQRQIQLAQKLEIMRQKKQEYLEVQRQLAIQRLQEQEKERQ 543 Query: 138 -RLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFK 176 RL QQ + ++R P+P + A PT L++ Sbjct: 544 MRLEQQ--KQTVQMRAQMPAFPLPYAQLQAMPTAGGVLYQ 581 Score = 48 (22.0 bits), Expect = 0.15, Sum P(2) = 0.14 Identities = 23/79 (29%), Positives = 35/79 (44%) Query: 6 EKTMSSVDSLPATPASE-VPVLTVSPADTSLNSADVKT-----QEVKPE----------E 49 ++ M + A P SE P+ + +P SL S+ V + +++ PE E Sbjct: 277 KERMRQKSTYTAHPKSEPAPLASSAPPAGSLYSSPVNSSAPLAEDIDPELARYLNRNYWE 336 Query: 50 KKPAKKRKSWGQELPVPKT 68 KK + RKS PVP T Sbjct: 337 KKQEEARKSPTPSAPVPLT 355 >sp|Q2KII1|ATF3_BOVIN Cyclic AMP-dependent transcription factor ATF-3 OS=Bos taurus GN=ATF3 PE=2 SV=1 Length = 181 Score = 89 (36.4 bits), Expect = 0.15, P = 0.14 Identities = 29/99 (29%), Positives = 47/99 (47%) Query: 62 ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ 121 E+ V K + P EDE+++RR ER N+ AA R +K+ + E L+ E ++E Sbjct: 73 EMSVTKAEVAPE-----EDERKKRRRER---NKIAAAKCRNKKKEKTECLQKESEKLESV 124 Query: 122 NQFLLQRLSQMEAENNRLSQQLA--QLAAEVRGSRANTP 158 N L ++ +++ E L L + VR TP Sbjct: 125 NAELKAQIEELKNEKQHLIYMLNLHRPTCIVRAQNGRTP 163 >sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcription factor ATF-6 beta OS=Homo sapiens GN=ATF6B PE=1 SV=2 Length = 703 Score = 98 (39.6 bits), Expect = 0.15, P = 0.14 Identities = 39/135 (28%), Positives = 62/135 (45%) Query: 17 ATPASEVPVLT--VSPADTS---LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLP 71 A P S +L V P S L ++ Q P P +RKS P+P + P Sbjct: 260 AVPPSTTVLLQSLVQPPPVSPVVLIQGAIRVQPEGPAPSLPRPERKSI-VPAPMPGNSCP 318 Query: 72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN-------EKIQMEQQNQF 124 P D K +R +R+++NR +A SR +K+ ++ LE + Q+ ++N Sbjct: 319 PEV-----DAKLLKRQQRMIKNRESACQSRRKKKEYLQGLEARLQAVLADNQQLRRENAA 373 Query: 125 LLQRLSQMEAENNRL 139 L +RL + AEN+ L Sbjct: 374 LRRRLEALLAENSEL 388 >sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BAT2 OS=Mus musculus GN=Bat2 PE=1 SV=1 Length = 2158 Score = 103 (41.3 bits), Expect = 0.16, P = 0.14 Identities = 58/227 (25%), Positives = 93/227 (40%) Query: 18 TPASEVPVLTVSPADTSL--NSADVKTQEVKPEEKKPAKKRK-----SWGQELPVPKTNL 70 +P SE+P P T+ N+ +T+ P K P +WG P Sbjct: 378 SPGSELP-----PPKTAWTENARPSETEPAPPTPKPPPPPPHRGPVGNWGPPGDYPDRGG 432 Query: 71 PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLS 130 PP K EDE E R +R R +++++ S +R + E E+ E++ ++L Sbjct: 433 PPCKPPAPEDEDEAWR-QR--RKQSSSEISLAVERARRRREEEERRMQEERRAACAEKLK 489 Query: 131 QMEAENNRLSQQL-AQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF 189 +++ + ++L A+ AA P P +PA +P L P + K+ L P Sbjct: 490 RLDEKFGAPDKRLKAEPAA---------P-PVTPA--APALPPVVPKEIPAAPALPPTPT 537 Query: 190 PTPSLSDYSPTLKPST-LAESSDVAQHPA-VSVAGLEGDGSALPLFD 234 PTP P P A S VA P VS G + ++ F+ Sbjct: 538 PTPEKEPEEPAQAPPVQAAPSPGVAPVPTLVSGGGCTANSNSSGSFE 584 >sp|Q4I877|NDE1_GIBZE Nuclear distribution protein nudE homolog 1 OS=Gibberella zeae GN=NDE1 PE=3 SV=1 Length = 583 Score = 97 (39.2 bits), Expect = 0.16, P = 0.14 Identities = 46/161 (28%), Positives = 74/161 (45%) Query: 80 DEKEQRRIERVLRNRAA---AQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136 + K + IER + + RE+ R+E ++L E ++ + + L + + E+ + Sbjct: 137 ESKYNQAIERAVMMEEEIKIGEQEREQLRIESQRLREELGDLKIEAELLQDKFKKQESRH 196 Query: 137 -NRLSQQLAQLAAEV-RGSRANTPMPGSPATASPTLTPTLFKQ-ERDELPLERIPFP-TP 192 + +S L+ LA+ G A+ PGS A++ TPT K D L +P P +P Sbjct: 197 LSTISTDLSVLASPTFDGHPAS---PGSTASSPLITTPTDSKSMTEDGDTLSELPDPPSP 253 Query: 193 SLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG-DGSALPL 232 +SD S L P +A S A VS + L D S PL Sbjct: 254 PMSDVSAPL-PK-VAASRPSAHRRTVSRSRLPSTDISTTPL 292 >sp|Q84WU4|GOGC3_ARATH Golgin candidate 3 OS=Arabidopsis thaliana GN=GC3 PE=1 SV=1 Length = 712 Score = 98 (39.6 bits), Expect = 0.16, P = 0.15 Identities = 35/122 (28%), Positives = 64/122 (52%) Query: 74 KRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME---QQNQFL---LQ 127 +R ++E KE+ R+ +N+ + + S+ R L+ + LE + +QM+ Q++ + ++ Sbjct: 218 ERKRSESFKEELESMRLDKNKTSMEISKMRSELDAKLLEIKHLQMKLTGQESHAIGPGME 277 Query: 128 RLSQ----MEAENNRLSQQLAQLAAEVRGSRANTPMPGSP-ATASPTLTP-TLFKQERDE 181 L + +E ENN L + ++L A + SR T P AT S T P TL K++ + Sbjct: 278 HLKEVNKALEKENNELKLKRSELEAALEESRKLTNSKVFPDATESLTRHPSTLDKEKPES 337 Query: 182 LP 183 P Sbjct: 338 FP 339 >sp|Q499N6|UBXN1_RAT UBX domain-containing protein 1 OS=Rattus norvegicus GN=Ubxn1 PE=2 SV=2 Length = 297 Score = 93 (37.8 bits), Expect = 0.16, P = 0.15 Identities = 43/181 (23%), Positives = 78/181 (43%) Query: 19 PASEVPVLTVSPADTSLNSADVKTQEVKPE-------EKKPAKKRKSWGQELPVPKTNLP 71 P + P+ T P L +++V PE E KP + QE L Sbjct: 46 PDVDEPLET--PLSHILGREPTPSEQVGPEGSGSAAGESKPVLTEEE-RQEQTKRMLELV 102 Query: 72 PRKRAKTEDEKEQRRIERVL-RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLS 130 +K+ + E+ +E+ +ER R R + S R++L+ +++ + ++ L Sbjct: 103 AQKQREREEREEREALEREKQRRRQGQELSAARQKLQEDEIRRAAEERRREKAEELAARQ 162 Query: 131 QMEAENNRLSQQLAQLAAEVRGSRANTPM--PGSPATASPTLTPTLFKQERDELPLE-RI 187 ++ + R + AQ GSR++ P PG P +SP P K+E D+ ++ R+ Sbjct: 163 RVREKIERDKAERAQKYGGTVGSRSSPPATDPG-PVPSSPRQEPPT-KREYDQCRIQVRL 220 Query: 188 P 188 P Sbjct: 221 P 221 >sp|B4PPK2|FOSL_DROYA Transcription factor kayak OS=Drosophila yakuba GN=kay PE=3 SV=1 Length = 552 Score = 81 (33.6 bits), Expect = 0.16, Sum P(3) = 0.15 Identities = 20/73 (27%), Positives = 36/73 (49%) Query: 72 PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131 P + E+EQ+R R RN+ AA R+R+ + +L E Q+E++ + + + Sbjct: 201 PNRSTNMTPEEEQKRAVRRERNKQAAARCRKRRVDQTNELTEEVEQLEKRGDSMRKEIEA 260 Query: 132 MEAENNRLSQQLA 144 + N+L LA Sbjct: 261 LTMSKNQLEYCLA 273 Score = 53 (23.7 bits), Expect = 0.16, Sum P(3) = 0.15 Identities = 21/59 (35%), Positives = 27/59 (45%) Query: 183 PLERIPFPTPSLSDY--SPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL 239 P +RI P S + TL T A S + Q P S A + G GSA P+ GS + Sbjct: 382 PSKRITLPPMSTMPHVHMSTLMTPTGASSGSL-QTPITSTAPV-GFGSAFPVTTNGSSI 438 Score = 42 (19.8 bits), Expect = 0.16, Sum P(3) = 0.15 Identities = 13/34 (38%), Positives = 20/34 (58%) Query: 10 SSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ 43 S V+SLP PA +V + S ++ S N++ TQ Sbjct: 95 SGVNSLPIQPAYDVNLAQGSDSEDS-NASYNDTQ 127 >sp|A4R8N4|PAN1_MAGGR Actin cytoskeleton-regulatory complex protein PAN1 OS=Magnaporthe grisea GN=PAN1 PE=3 SV=1 Length = 1431 Score = 101 (40.6 bits), Expect = 0.17, P = 0.15 Identities = 48/191 (25%), Positives = 79/191 (41%) Query: 37 SADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAA 96 +A E KP P++K +E K +R E E++QR++ + A Sbjct: 1022 AASAPKTEAKPPPPPPSRKAAP-DRETAAKKAE---EERLAQEQEEQQRQMREM---EAK 1074 Query: 97 AQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRAN 156 A+ + E E +E+Q L R ++EA R + QL E + Sbjct: 1075 AKAEEDALARENSAAEARLKALEEQEAKLAARRQEIEAAKRREEELQRQL--EAMNEEGS 1132 Query: 157 TPMPGSPATASPTL-TPTLFKQERDELPLERIPFPTPSLSD-YSPTLKP--STLAESSD- 211 + PA +P TPT+ QE LER P P P +++ + + P L++SS+ Sbjct: 1133 SSDDDEPAQITPQASTPTVGSQE-----LERKPSPPPQVAEPKTESRNPYFRMLSQSSEG 1187 Query: 212 -VAQHPAVSVA 221 + P SV+ Sbjct: 1188 PTSVSPQASVS 1198 >sp|B2AWS3|PAN1_PODAN Actin cytoskeleton-regulatory complex protein PAN1 OS=Podospora anserina GN=PAN1 PE=3 SV=1 Length = 1441 Score = 101 (40.6 bits), Expect = 0.17, P = 0.15 Identities = 48/180 (26%), Positives = 80/180 (44%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRK---RAKT-EDEKEQRRIERVLRNRAA 96 K + + EE+ A+K + E + R+ RAK EDE + R E R +A Sbjct: 1024 KVDDRRAEEEAAARKAEEGRLERERGEQERQTRELEERAKDQEDELAKERAEADARLKAL 1083 Query: 97 AQTSRERKRLEMEKLENEKIQM---EQQNQFLLQRLSQMEAENNRLSQQLAQLAA-EVRG 152 + R+ K + E+ +K M ++Q L QR +++EA R + QL A +V Sbjct: 1084 EEQVRQGKLKKEEEKRKKKAAMAEAKEQEAKLAQRRAEIEAARKREEELRKQLEALDVED 1143 Query: 153 SRANT---PMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAES 209 S ++ P +P ++PTL + ++ P P P P S P + S+ AE+ Sbjct: 1144 SSSDDDEGPEQITPQASTPTLGGSQVGGSQELEPAPPTPVPAPVQSP--PQIVTSSPAET 1201 >sp|Q92545|TM131_HUMAN Transmembrane protein 131 OS=Homo sapiens GN=TMEM131 PE=1 SV=2 Length = 1834 Score = 102 (41.0 bits), Expect = 0.17, P = 0.15 Identities = 45/200 (22%), Positives = 83/200 (41%) Query: 21 SEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTED 80 S++ L + D + D EV E+ P+ KS G+ P+ + PP+K+ + E Sbjct: 1296 SDITSL-IEAMDKDFDHHDSPALEVFTEQP-PSPLPKSKGKGKPLQRKVKPPKKQEEKEK 1353 Query: 81 EKEQRRIERVLRNRAA----AQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136 + + + E L++ A + T+ E + E L E + ++ Q + ++ ++ Sbjct: 1354 KGKGKPQEDELKDSLADDDSSSTTTETSNPDTEPLLKEDTEKQKGKQAMPEKHESEMSQV 1413 Query: 137 NRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSD 196 + S++L + E+ P P++ TP L ++R LP +IP PT S Sbjct: 1414 KQKSKKLLNIKKEI-------PTDVKPSSLELPYTPPLESKQRRNLP-SKIPLPTAMTSG 1465 Query: 197 YSPTLKPSTLAESSDVAQHP 216 T S V P Sbjct: 1466 SKSRNAQKTKGTSKLVDNRP 1485 >sp|Q38W81|IF2_LACSS Translation initiation factor IF-2 OS=Lactobacillus sakei subsp. sakei (strain 23K) GN=infB PE=3 SV=1 Length = 937 Score = 99 (39.9 bits), Expect = 0.17, P = 0.16 Identities = 48/198 (24%), Positives = 75/198 (37%) Query: 4 DMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQEL 63 + EKT+ + ATPA+ P +P A K++ K + K A +R+ + Sbjct: 41 NQEKTLRAAFQTKATPAASKPATPAAP------KASEKSESGKIKINKTAIRRRPEADKK 94 Query: 64 PVPKTNLPPRKRAKTEDEKE--QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ 121 P +N P+ A + Q R N +A+ + R N + + Sbjct: 95 PAQHSNNRPQANANRNGQASNGQNRTNNARPNNNSARPNNSRPNTNSRPNNNSQNRSTSA 154 Query: 122 NQ--FLLQRLSQMEAENNR----LSQQLAQLAAEVRGSR--ANTPMPGSPATASPTLTPT 173 N L +++SQ A R + QQ Q A+ + R AN P P + AS P+ Sbjct: 155 NHPMSLQEQISQANARRQRTQERIQQQREQREADEKKRREQANRPRP-TRNNASNN-RPS 212 Query: 174 LFKQERDELPLERIPFPT 191 K P P PT Sbjct: 213 NGKPTNGARPTTNSPRPT 230 >sp|Q789F3|MAF_CHICK Transcription factor Maf OS=Gallus gallus GN=MAF PE=1 SV=1 Length = 359 Score = 94 (38.1 bits), Expect = 0.17, P = 0.16 Identities = 25/82 (30%), Positives = 47/82 (57%) Query: 83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 +Q+R R L+NR AQ+ R ++ + LE+EK Q+ QQ + L Q +S++ E + ++ Sbjct: 276 KQKR--RTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVEHLKQEISRLVRERDAYKEK 333 Query: 143 LAQLAAE-VRGSRANTPMPGSP 163 +L + R + +++ P SP Sbjct: 334 YEKLVSNGFRENGSSSDNPSSP 355 >sp|P49716|CEBPD_HUMAN CCAAT/enhancer-binding protein delta OS=Homo sapiens GN=CEBPD PE=1 SV=2 Length = 269 Score = 92 (37.4 bits), Expect = 0.17, P = 0.16 Identities = 32/130 (24%), Positives = 57/130 (43%) Query: 19 PASEVPVLTVSPADT--SLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA 76 P S +P + A T SL +A T PE + + ++ P P KR Sbjct: 131 PGSLLPAQVAACAQTVVSLAAAGQPTPPTSPEPPRSSPRQTP----APGPAREKSAGKRG 186 Query: 77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136 E R +R RN A + SR++ + ++++ + +++ +N+ L QR+ Q+ + Sbjct: 187 PDRGSPEYR--QRRERNNIAVRKSRDKAKRRNQEMQQKLVELSAENEKLHQRVEQLTRDL 244 Query: 137 NRLSQQLAQL 146 L Q QL Sbjct: 245 AGLRQFFKQL 254 Score = 88 (36.0 bits), Expect = 0.49, P = 0.39 Identities = 29/98 (29%), Positives = 48/98 (48%) Query: 60 GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE-RKRLEMEKLENEKIQ- 117 GQ P P + PPR + R E+ R + S E R+R E + K + Sbjct: 153 GQPTP-PTSPEPPRSSPRQTPAPGPAR-EKSAGKRGPDRGSPEYRQRRERNNIAVRKSRD 210 Query: 118 -MEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154 +++NQ + Q+L ++ AEN +L Q++ QL ++ G R Sbjct: 211 KAKRRNQEMQQKLVELSAENEKLHQRVEQLTRDLAGLR 248 >sp|P81269|ATF1_MOUSE Cyclic AMP-dependent transcription factor ATF-1 OS=Mus musculus GN=Atf1 PE=2 SV=1 Length = 269 Score = 92 (37.4 bits), Expect = 0.17, P = 0.16 Identities = 20/57 (35%), Positives = 37/57 (64%) Query: 77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQME 133 KT+D + +R I R+++NR AA+ R +K+ ++ LEN +E QN+ L++ L ++ Sbjct: 206 KTDDPQLRREI-RLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKTLK 261 >sp|P23091|MAF_AVIS4 Transforming protein Maf OS=Avian musculoaponeurotic fibrosarcoma virus AS42 GN=V-MAF PE=1 SV=1 Length = 369 Score = 94 (38.1 bits), Expect = 0.18, P = 0.16 Identities = 25/82 (30%), Positives = 47/82 (57%) Query: 83 EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ 142 +Q+R R L+NR AQ+ R ++ + LE+EK Q+ QQ + L Q +S++ E + ++ Sbjct: 276 KQKR--RTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVEHLKQEISRLVRERDAYKEK 333 Query: 143 LAQLAAE-VRGSRANTPMPGSP 163 +L + R + +++ P SP Sbjct: 334 YEKLVSNGFRENGSSSDNPSSP 355 >sp|P18846|ATF1_HUMAN Cyclic AMP-dependent transcription factor ATF-1 OS=Homo sapiens GN=ATF1 PE=1 SV=2 Length = 271 Score = 92 (37.4 bits), Expect = 0.18, P = 0.16 Identities = 20/57 (35%), Positives = 37/57 (64%) Query: 77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQME 133 KT+D + +R I R+++NR AA+ R +K+ ++ LEN +E QN+ L++ L ++ Sbjct: 208 KTDDPQLKREI-RLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKTLK 263 >sp|Q07283|TRHY_HUMAN Trichohyalin OS=Homo sapiens GN=TCHH PE=1 SV=2 Length = 1943 Score = 102 (41.0 bits), Expect = 0.18, P = 0.16 Identities = 28/120 (23%), Positives = 65/120 (54%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100 + Q +K E+++ ++R +E+ + +R K E+ +E+RR +++L++ + Sbjct: 586 RQQRLKREQEERLEQRLK-REEVERLEQEERREQRLKREEPEEERR-QQLLKSEEQEERR 643 Query: 101 RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP 160 +++ R E ++ ++++ E++ + L QRL + E E R Q+LA+ E R + +P Sbjct: 644 QQQLRREQQERREQRLKREEEEERLEQRLKR-EHEEERREQELAEEEQEQARERIKSRIP 702 Score = 101 (40.6 bits), Expect = 0.23, P = 0.21 Identities = 31/116 (26%), Positives = 59/116 (50%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA-KTEDEKEQRRIERVLRNRAAAQT 99 + Q +K EE+K ++ + +E + + R + K E+E+ Q+R++R R + Sbjct: 546 REQLLKREEEKRLEQER---REQRLKREQEERRDQLLKREEERRQQRLKREQEERLEQRL 602 Query: 100 SRER-KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154 RE +RLE E+ ++++ E+ + Q+L + E + R QQL + E R R Sbjct: 603 KREEVERLEQEERREQRLKREEPEEERRQQLLKSEEQEERRQQQLRREQQERREQR 658 Score = 100 (40.3 bits), Expect = 0.30, P = 0.26 Identities = 30/112 (26%), Positives = 61/112 (54%) Query: 40 VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT 99 ++ +E K +E++P ++R+ +E + K +R + E+E++Q+R+ R + R + Sbjct: 253 LRKEEEKLQEEEPQRQRELQEEEEQLRKLERQELRRERQEEEQQQQRLRREQQLRRKQE- 311 Query: 100 SRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151 ER+ + E+ E ++ + EQQ + Q+L + + E R QQL + E R Sbjct: 312 -EERREQQEERREQQE-RREQQEERREQQLRREQEE--RREQQLRREQEEER 359 Score = 90 (36.7 bits), Expect = 3.7, P = 0.97 Identities = 31/108 (28%), Positives = 57/108 (52%) Query: 48 EEKKPAKKRKS-WGQELPVPKTNLPPRKRAKTEDEKEQRRIER--VLRNRAAAQTSRERK 104 EE+K +KR++ +E + P R+R E+E++ R++ER + R R + ++R Sbjct: 241 EEEKEWRKRETVLRKEEEKLQEEEPQRQRELQEEEEQLRKLERQELRRERQEEEQQQQRL 300 Query: 105 RLEME-KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR 151 R E + + + E+ + EQQ + Q+ + E + R QQL + E R Sbjct: 301 RREQQLRRKQEEERREQQEERREQQ-ERREQQEERREQQLRREQEERR 347 Score = 90 (36.7 bits), Expect = 3.7, P = 0.97 Identities = 29/119 (24%), Positives = 59/119 (49%) Query: 41 KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100 + ++ + ++K K+ + G+E P + K+ + E+E +Q E++LR + Sbjct: 956 RERQYRKDKKLQQKEEQLLGEE-PEKRRRQEREKKYREEEELQQEE-EQLLREEREKRRR 1013 Query: 101 RE-----RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR 154 +E RK+ E+++ E E++ E++ + LQ + E L Q+ QL E R +R Sbjct: 1014 QEWERQYRKKDELQQ-EEEQLLREEREKRRLQERERQYREEEELQQEEEQLLGEERETR 1071 Score = 90 (36.7 bits), Expect = 3.7, P = 0.97 Identities = 32/119 (26%), Positives = 59/119 (49%) Query: 43 QEVKPEE-KKPAKKRKSW-GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR----NRAA 96 QE + + K+ ++R+ W +E + RK+ D++E+RR ER L+ R Sbjct: 440 QERREQRLKREQEERRDWLKREEETERHEQERRKQQLKRDQEEERR-ERWLKLEEEERRE 498 Query: 97 AQTSRERK-RLEMEKLENEKIQMEQQNQFLLQRL---SQMEAENNRLSQQLAQLAAEVR 151 Q RE++ R E E+ ++++ +++ + L QRL Q+ E +QL + E R Sbjct: 499 QQERREQQLRREQEERREQRLKRQEEEERLQQRLRSEQQLRREQEERREQLLKREEEKR 557 Score = 89 (36.4 bits), Expect = 4.7, P = 0.991 Identities = 33/111 (29%), Positives = 55/111 (49%) Query: 43 QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE 102 ++++ EE+K AK+R QE KR + E +++ R E++L+ R Q R Sbjct: 1297 EQLEREEQKEAKRRDRKSQEEKQLLREEREEKRRRQETDRKFREEEQLLQEREE-QPLRR 1355 Query: 103 RKRLEMEKLENEKIQMEQQNQFLL--QRLSQMEAENNRLSQQLAQLAAEVR 151 ++R + + E E EQ +FL QRL + E E L ++ QL + R Sbjct: 1356 QER-DRKFREEELRHQEQGRKFLEEEQRLRRQERERKFLKEE-QQLRCQER 1404 >sp|Q4X1V0|NDE1_ASPFU Nuclear distribution protein nudE homolog 1 OS=Aspergillus fumigatus GN=nde1 PE=3 SV=1 Length = 621 Score = 95 (38.5 bits), Expect = 0.18, Sum P(2) = 0.17 Identities = 39/131 (29%), Positives = 63/131 (48%) Query: 107 EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP-GSPAT 165 EM E E+ ++ +NQ L LS ++ E + ++L AE++ SR P+ SP+T Sbjct: 178 EMRAGEQEREKLRIENQRLRDELSDLKIETEIIHEKLRN--AELQNSRRRKPISLRSPST 235 Query: 166 ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHP-AVSVAGLE 224 TP LF + P I +P S +PTLK S ++ ++ P + S + L Sbjct: 236 PQ---TPDLFNRS----PASSI-VSSPLFS--TPTLKTSLMSATATPPSPPISESSSSLR 285 Query: 225 GDGSALPLFDL 235 +A+P F L Sbjct: 286 KSMNAMPGFPL 296 Score = 84 (34.6 bits), Expect = 4.6, P = 0.99 Identities = 33/134 (24%), Positives = 62/134 (46%) Query: 80 DEKEQRRIERVL---RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN 136 + K IER + A + RE+ R+E ++L +E ++ + + + ++L E +N Sbjct: 162 ESKYNVAIERAVLLEEEMRAGEQEREKLRIENQRLRDELSDLKIETEIIHEKLRNAELQN 221 Query: 137 NRLSQQLAQLAAEVRGSRANTP-----MPGSPATASPTL-TPTLFKQERDELPLERIPFP 190 +R + ++ + S TP P S +SP TPTL + + P P Sbjct: 222 SRRRKPISLRSP----STPQTPDLFNRSPASSIVSSPLFSTPTL---KTSLMSATATP-P 273 Query: 191 TPSLSDYSPTLKPS 204 +P +S+ S +L+ S Sbjct: 274 SPPISESSSSLRKS 287 Score = 44 (20.5 bits), Expect = 0.18, Sum P(2) = 0.17 Identities = 12/40 (30%), Positives = 22/40 (55%) Query: 81 EKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ 120 + R +E L A S +R+RL EK+++ K ++E+ Sbjct: 40 QASSRELEAELEKDIEA--SEKRERLLKEKVDSLKYEVEE 77 >sp|Q8R1H8|BATF2_MOUSE Basic leucine zipper transcriptional factor ATF-like 2 OS=Mus musculus GN=Batf2 PE=2 SV=1 Length = 277 Score = 79 (32.9 bits), Expect = 0.18, Sum P(2) = 0.17 Identities = 15/59 (25%), Positives = 35/59 (59%) Query: 77 KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAE 135 +T+ + Q+++++ +NR AAQ SR++ + + L + +E+QN L + + ++ E Sbjct: 12 ETDLGESQKQLKKKQKNRVAAQRSRQKHTSKADALHQQHESLEKQNHALRKEIQALQTE 70 Score = 52 (23.4 bits), Expect = 0.18, Sum P(2) = 0.17 Identities = 20/68 (29%), Positives = 27/68 (39%) Query: 137 NRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF----PTP 192 N +QL RA PG + SP L P+L + + R P P+P Sbjct: 117 NGCQEQLGLFQTPGSSPRAQHLSPGPCSHESPGLLPSLLPSLAFDPLMVRTPLAQLSPSP 176 Query: 193 SLSDYSPT 200 LS SP+ Sbjct: 177 VLSASSPS 184 >sp|Q66J36|NFIL3_XENLA Nuclear factor interleukin-3-regulated protein OS=Xenopus laevis GN=nfil3 PE=2 SV=1 Length = 456 Score = 95 (38.5 bits), Expect = 0.19, P = 0.17 Identities = 35/132 (26%), Positives = 62/132 (46%) Query: 31 ADTSLNSADVKTQEVKP-EEKKPAKKRKSWGQELPVP-KTNLPPRKRAKTEDEKEQRRI- 87 AD+ + + V + + E + + LPV K++ RKR DEK+ Sbjct: 11 ADSRMENILVLSSNIPDMSESMDSSNDMLYSDGLPVKNKSSSCRRKREFIPDEKKDAMYW 70 Query: 88 ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA 147 E+ +N AA+ SRE++RL LEN+ I + ++N L L ++ + +S A Sbjct: 71 EKRRKNNEAAKRSREKRRLNDMVLENKLIALGEENASLKTELLSLKLKFGLISS--TSYA 128 Query: 148 AEVRGSRANTPM 159 E++ ++T M Sbjct: 129 QEIQKVTSSTAM 140 >sp|P13816|GARP_PLAFF Glutamic acid-rich protein OS=Plasmodium falciparum (isolate FC27 / Papua New Guinea) GN=GARP PE=4 SV=1 Length = 678 Score = 97 (39.2 bits), Expect = 0.19, P = 0.17 Identities = 33/142 (23%), Positives = 65/142 (45%) Query: 36 NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRA 95 N ++ K ++ + EE +K Q+ K K+ K ++EKE+++ E+ + Sbjct: 242 NISEDKKEDHQQEEMLKTLDKKERKQKEKEMKEQEKIEKKKKKQEEKEKKKQEKERKK-- 299 Query: 96 AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA 155 Q +ERK+ E E + +KI+ E++ + ++ + + N + Q +E + Sbjct: 300 --QEKKERKQKEKEMKKQKKIEKERKKKEEKEKKKKKHDKENEETMQQPDQTSEETNNEI 357 Query: 156 NTPMPGSPATASPTLTPTLFKQ 177 P+P SP T TP K+ Sbjct: 358 MVPLP-SPLT--DVTTPEEHKE 376 >sp|P38749|YAP3_YEAST AP-1-like transcription factor YAP3 OS=Saccharomyces cerevisiae GN=YAP3 PE=1 SV=1 Length = 330 Score = 93 (37.8 bits), Expect = 0.19, P = 0.17 Identities = 17/67 (25%), Positives = 39/67 (58%) Query: 76 AKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAE 135 A E+ + + ++ +NRAA + RERK M++L+++ ++ E+ Q LL+ + ++ Sbjct: 137 AHNENVPDDSKAKKKAQNRAAQKAFRERKEARMKELQDKLLESERNRQSLLKEIEELRKA 196 Query: 136 NNRLSQQ 142 N ++ + Sbjct: 197 NTEINAE 203 >sp|Q3UIW5|RNF10_MOUSE RING finger protein 10 OS=Mus musculus GN=Rnf10 PE=2 SV=2 Length = 804 Score = 99 (39.9 bits), Expect = 0.19, Sum P(2) = 0.18 Identities = 51/209 (24%), Positives = 87/209 (41%) Query: 80 DEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRL 139 D+ E+R+ +R + +A + RER R+EME EN++ + L+ L Q A N+ Sbjct: 588 DDIEKRKRQR--QKKAREERRRER-RIEME--ENKRQGRYPEVHIPLENLQQFPAFNSYT 642 Query: 140 ---SQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSD 196 L + E G+ + +P+ SP + + L L P F SL D Sbjct: 643 CPSDSALGPTSTEGHGALSLSPLSRSPGSHADFLLTPLSPTASQGSP----SFCVGSLED 698 Query: 197 YSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDF 256 SP L + + A + D S +P + SD + ++D V P + F Sbjct: 699 DSPFLSFAQMLRVGKAKADGWPKTAPKKDDNSLVPPAPVDSDGESDNSDRVPVPSFQNSF 758 Query: 257 NRLFHGDSSVEPDSSVFEDGLAFDVLEGG 285 ++ + ++ D+ D L+ D GG Sbjct: 759 SQAIEA-AFMKLDTPATSDPLSED--RGG 784 Score = 42 (19.8 bits), Expect = 0.19, Sum P(2) = 0.18 Identities = 11/57 (19%), Positives = 27/57 (47%) Query: 1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRK 57 MS D+ + + LP T + L + P S + ++ + +++ +++ KK + Sbjct: 546 MSEDVRQRHRYLSHLPLTCEFSICELALQPPVVSKETLEMFSDDIEKRKRQRQKKAR 602 >sp|P23923|HBP1B_WHEAT Transcription factor HBP-1b(c38) OS=Triticum aestivum PE=2 SV=1 Length = 332 Score = 93 (37.8 bits), Expect = 0.19, P = 0.18 Identities = 24/59 (40%), Positives = 36/59 (61%) Query: 73 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ 131 R R K D+K RR+ + NR AA+ SR RK+ +++LEN ++++ Q Q L QR Q Sbjct: 37 RSRDKNGDQKTMRRLAQ---NREAARKSRLRKKAYVQQLENSRLKLTQLEQEL-QRARQ 91 >sp|Q9D5R3|CCD41_MOUSE Coiled-coil domain-containing protein 41 OS=Mus musculus GN=Ccdc41 PE=2 SV=2 Length = 692 Score = 97 (39.2 bits), Expect = 0.19, P = 0.18 Identities = 44/182 (24%), Positives = 78/182 (42%) Query: 49 EKKPAKKRKSWGQELPVPKTNLPPRKRAKTE-DEKEQRRIERVLRNRAAAQTSRERKRLE 107 EK +K+ W +E + R+ + EK QR + ++ + +R + + Sbjct: 516 EKTLEEKQIQWLEEKHKLHERITDREEKYNQAKEKLQRAATAQKKRKSLHENKLKRLQEK 575 Query: 108 MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS 167 +E LE +K ++E +NQ L ++ E E RL ++L + R+ +P P TAS Sbjct: 576 VEVLEAKKEELETENQVLNRQNVPFE-EYTRLQKRLKDIQRRHNEFRSLILVPNMPPTAS 634 Query: 168 PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLA---ESSDVAQHPAVSVAGLE 224 ++P F Q +P + FP P L + + S L E + Q + G Sbjct: 635 --ISPANF-QSAVTVPGAELSFP-PHLQEEQHQRELSLLRKRLEELETTQRKQLEELGSP 690 Query: 225 GD 226 G+ Sbjct: 691 GE 692 >sp|Q9QXL2|KI21A_MOUSE Kinesin-like protein KIF21A OS=Mus musculus GN=Kif21a PE=1 SV=2 Length = 1672 Score = 101 (40.6 bits), Expect = 0.20, P = 0.18 Identities = 39/164 (23%), Positives = 77/164 (46%) Query: 35 LNSADVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEKEQRRIERVLRN 93 L +A + + + + K+ K Q+ + + KT + K+ K E EK R+ RN Sbjct: 737 LQTAQKEHARLLKNQSQYEKQLKKLQQDVMEMKKTKVRLMKQMKEEQEKA--RLTESRRN 794 Query: 94 RAAAQTSRE-RKR-LEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA-QLAAEV 150 R AQ ++ RKR ++ LE +K E + + ++ + + +S ++A ++ ++ Sbjct: 795 REIAQLKKDQRKRDHQLRLLEAQKRNQEVVLRRKTEEVTALRRQVRPMSDKVAGKVTRKL 854 Query: 151 RGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIP-FPTPS 193 S + P GS A + T Q++ +P+ R+ PTP+ Sbjct: 855 SSSESPAPDTGSSAASGEADTSRPGTQQKMRIPVARVQALPTPT 898 >sp|Q9UPT6|JIP3_HUMAN C-Jun-amino-terminal kinase-interacting protein 3 OS=Homo sapiens GN=MAPK8IP3 PE=1 SV=3 Length = 1336 Score = 95 (38.5 bits), Expect = 0.20, Sum P(2) = 0.18 Identities = 38/152 (25%), Positives = 69/152 (45%) Query: 62 ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRN-RAAAQTSRERKRLEMEKL------ENE 114 E V + L K+AK + E + +E L+ ++ A +R + E E + E++ Sbjct: 454 EQEVLRGELEAAKQAKVKLENRIKELEEELKRVKSEAIIARREPKEEAEDVSSYLCTESD 513 Query: 115 KIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS---RANTPMPGSPATASPTLT 171 KI M Q+ +F ++++ E N+ ++L +L VR + RA+ P T+ Sbjct: 514 KIPMAQRRRFTRVEMARVLMERNQYKERLMELQEAVRWTEMIRASREHPSVQEKKKSTIW 573 Query: 172 P---TLFKQERDELPLERIPFPTPSLSDYSPT 200 LF P +R P+P+ ++ SPT Sbjct: 574 QFFSRLFSSSSSPPPAKR-PYPSVNIHYKSPT 604 Score = 51 (23.0 bits), Expect = 0.20, Sum P(2) = 0.18 Identities = 18/58 (31%), Positives = 25/58 (43%) Query: 8 TMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPV 65 T S+ + TP S VP V+P + SL K K+ +KR S E+ V Sbjct: 265 TPSTTGTKSNTPTSSVPSAAVTPLNESLQPLGDYGVGSK-NSKRAREKRDSRNMEVQV 321 >sp|P16884|NFH_RAT Neurofilament heavy polypeptide OS=Rattus norvegicus GN=Nefh PE=1 SV=4 Length = 1072 Score = 99 (39.9 bits), Expect = 0.20, P = 0.18 Identities = 57/248 (22%), Positives = 93/248 (37%) Query: 6 EKTMSSVDSLPATPAS-EVPVLTVSPADTSLNSAD-VKTQEVK-PEEKKPAKKRKSWGQE 62 EK S V PA + P SP S + KT +VK PE K PAK+ + Sbjct: 784 EKAKSPVKEEIKPPAEVKSPEKAKSPMKEEAKSPEKAKTLDVKSPEAKTPAKEEAKRPAD 843 Query: 63 LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN 122 + P+ P K EKE+ R E+V + ++ E E++ E K ++E++ Sbjct: 844 IRSPEQVKSPAKEEAKSPEKEETRTEKVAPKKEEVKSPVE----EVKAKEPPK-KVEEEK 898 Query: 123 QFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDEL 182 + E++ + ++ + AE + P SP A K+++ Sbjct: 899 TPATPKTEVKESKKDEAPKEAQKPKAEEKEPLTEKPKD-SPGEAKKEEA----KEKKAAA 953 Query: 183 PLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHH 242 P E TP+ KP AE + A+ P+ + +P D K Sbjct: 954 PEEE----TPAKLGVKEEAKPKEKAEDAK-AKEPSKPSEKEKPKKEEVPAAPEKKDTKEE 1008 Query: 243 STDDVAAP 250 T + P Sbjct: 1009 KTTESKKP 1016 >sp|Q60765|ATF3_MOUSE Cyclic AMP-dependent transcription factor ATF-3 OS=Mus musculus GN=Atf3 PE=2 SV=1 Length = 181 Score = 88 (36.0 bits), Expect = 0.20, P = 0.18 Identities = 29/99 (29%), Positives = 47/99 (47%) Query: 62 ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ 121 E+ V K+ P EDE+++RR ER N+ AA R +K+ + E L+ E ++E Sbjct: 73 EMSVTKSEAAPE-----EDERKRRRRER---NKIAAAKCRNKKKEKTECLQKESEKLESV 124 Query: 122 NQFLLQRLSQMEAENNRLSQQLA--QLAAEVRGSRANTP 158 N L ++ +++ E L L + VR TP Sbjct: 125 NAELKAQIEELKNEKQHLIYMLNLHRPTCIVRAQNGRTP 163 >sp|Q9N0J3|CEBPD_SHEEP CCAAT/enhancer-binding protein delta OS=Ovis aries GN=CEBPD PE=3 SV=1 Length = 255 Score = 91 (37.1 bits), Expect = 0.20, P = 0.18 Identities = 28/104 (26%), Positives = 51/104 (49%) Query: 64 PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE-RKRLEMEKLENEKIQ--MEQ 120 P P + P +R+ R ++ R + S E R+R E + K + ++ Sbjct: 142 PTPPASPDPPRRSPAPPAPGPAR-DKAAGKRGPDRGSPEYRQRRERNNIAVRKSRDKAKR 200 Query: 121 QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRAN-TPMPGSP 163 +NQ + Q+L ++ AEN +L Q++ QL ++ G R +PG+P Sbjct: 201 RNQEMQQKLVELSAENEKLQQRVEQLTRDLAGLRRFFKQLPGAP 244 >sp|A5DLJ8|NST1_PICGU Stress response protein NST1 OS=Pichia guilliermondii GN=NST1 PE=3 SV=2 Length = 1107 Score = 99 (39.9 bits), Expect = 0.20, P = 0.18 Identities = 42/202 (20%), Positives = 91/202 (45%) Query: 39 DVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQ 98 D + + + EE+ ++ + +EL + R K E+EK +R E L+ A + Sbjct: 632 DEERRRKEEEERAREEELRLKQEELRAEQKRRKEEARQKKEEEKRKRIEELRLKKEAEKK 691 Query: 99 TSRERKRLEME-KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT 157 E++R E E K + E+ E++ + ++++ Q++ E +Q + + Sbjct: 692 KQEEKERKERELKEKKERESKEKEEREMMEKKEQLKKEQQPKVEQTQE--------KPQA 743 Query: 158 PMPGSPATASPTLT-PTLFKQERDELPLERIPFPTPSLSD-YSPTLKPSTLAES--SDVA 213 P P + ++P+++ P +Q+ L+ PT L + S L+ +L + S ++ Sbjct: 744 P-PSQTSQSNPSVSDPISSRQDNSVSSLD----PTHDLQNAISSGLEQLSLGQQPMSHIS 798 Query: 214 QHPAVSVAGLEGDGSALPLFDL 235 P+ S++ L + P D+ Sbjct: 799 SQPSQSISQLPIQPPSQPFLDM 820 WARNING: HSPs involving 915 database sequences were not reported due to the limiting value of parameter B = 250. NOTE: You may want to consider using a low-complexity sequence filter to reduce the number of spurious matches that may be appearing in the output. See the filter option at http://blast.wustl.edu/blast/parameters.html#filter. Parameters: ctxfactor=1.00 E=10 Query ----- As Used ----- ----- Computed ---- Frame MatID Matrix name Lambda K H Lambda K H +0 0 BLOSUM62 0.309 0.127 0.355 same same same Q=9,R=2 0.244 0.0300 0.180 n/a n/a n/a Query Frame MatID Length Eff.Length E S W T X E2 S2 +0 0 345 345 8.6 80 3 11 23 0.50 34 33 0.45 37 Statistics: Database: /misc/data0/databases/Uniprot/uniprot_sprot_wu.fasta Title: uniprot_sprot_wu.fasta Posted: 9:42:10 AM EDT Apr 12, 2010 Created: 9:42:26 AM EDT Apr 12, 2010 Format: XDF-1 # of letters in database: 181,677,051 # of sequences in database: 516,081 # of database sequences satisfying E: 1165 No. of states in DFA: 594 (126 KB) Total size of DFA: 363 KB (2145 KB) Time to generate neighborhood: 0.00u 0.00s 0.00t Elapsed: 00:00:00 No. of threads or processors used: 8 Search cpu time: 26.59u 0.08s 26.67t Elapsed: 00:00:04 Total cpu time: 37.32u 0.15s 37.47t Elapsed: 00:00:05 Start: Fri Apr 16 09:13:43 2010 End: Fri Apr 16 09:13:48 2010 NOTES ISSUED: 2 WARNINGS ISSUED: 2 EXIT CODE 0 hmmer-3.1b2/easel/demotic/examples/example.psiblast.out0000664361611702660230000065746012473612605022652 0ustar wheelerteddyBLASTP 2.2.22 [Sep-27-2009] Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), "Gapped BLAST and PSI-BLAST: a new generation of protein database search programs", Nucleic Acids Res. 25:3389-3402. Reference for composition-based statistics: Schaffer, Alejandro A., L. Aravind, Thomas L. Madden, Sergei Shavirin, John L. Spouge, Yuri I. Wolf, Eugene V. Koonin, and Stephen F. Altschul (2001), "Improving the accuracy of PSI-BLAST protein database searches with composition-based statistics and other refinements", Nucleic Acids Res. 29:2994-3005. Query= A3CM55.1 (328 letters) Database: uniprot_sprot.fasta 516,081 sequences; 181,677,051 total letters Searching..................................................done Score E Sequences producing significant alignments: (bits) Value sp|P78283|SECY_VIBCH Preprotein translocase subunit secY OS=Vibr... 276 2e-73 sp|P43804|SECY_HAEIN Preprotein translocase subunit secY OS=Haem... 275 3e-73 sp|Q9HWF5|SECY_PSEAE Preprotein translocase subunit secY OS=Pseu... 273 1e-72 sp|Q59912|SECY_STRGB Preprotein translocase subunit secY OS=Stre... 268 4e-71 sp|Q05217|SECY_STACT Preprotein translocase subunit secY OS=Stap... 264 5e-70 sp|Q59916|SECY_STRGR Preprotein translocase subunit secY OS=Stre... 260 1e-68 sp|O33006|SECY_MYCLE Preprotein translocase subunit secY OS=Myco... 259 3e-68 sp|P38376|SECY_CORGL Preprotein translocase subunit secY OS=Cory... 258 4e-68 sp|P77964|SECY_SYNY3 Preprotein translocase subunit secY OS=Syne... 258 5e-68 sp|P27148|SECY_LACLC Preprotein translocase subunit secY OS=Lact... 256 2e-67 sp|Q8CNF3|SECY_STAES Preprotein translocase subunit secY OS=Stap... 255 3e-67 sp|Q5HM19|SECY_STAEQ Preprotein translocase subunit secY OS=Stap... 255 3e-67 sp|P46785|SECY_STRCO Preprotein translocase subunit secY OS=Stre... 255 3e-67 sp|P49977|SECY_STRLI Preprotein translocase subunit secY OS=Stre... 255 4e-67 sp|P93690|SECY_SPIOL Preprotein translocase subunit secY, chloro... 255 4e-67 sp|Q7A086|SECY_STAAW Preprotein translocase subunit secY OS=Stap... 254 5e-67 sp|Q6G791|SECY_STAAS Preprotein translocase subunit secY OS=Stap... 254 5e-67 sp|Q6GEK3|SECY_STAAR Preprotein translocase subunit secY OS=Stap... 254 5e-67 sp|Q7A468|SECY_STAAN Preprotein translocase subunit secY OS=Stap... 254 5e-67 sp|Q99S39|SECY_STAAM Preprotein translocase subunit secY OS=Stap... 254 5e-67 sp|Q5HDX8|SECY_STAAC Preprotein translocase subunit secY OS=Stap... 254 5e-67 sp|O08387|SECY_STAA8 Preprotein translocase subunit secY OS=Stap... 254 5e-67 sp|P58118|SECY_LACLA Preprotein translocase subunit secY OS=Lact... 254 7e-67 sp|P0A5Z2|SECY_MYCTU Preprotein translocase subunit secY OS=Myco... 253 9e-67 sp|P0A5Z3|SECY_MYCBO Preprotein translocase subunit secY OS=Myco... 253 9e-67 sp|P43416|SECY_STRSC Preprotein translocase subunit secY OS=Stre... 253 9e-67 sp|Q9XQU4|SECY_PEA Preprotein translocase subunit secY, chloropl... 252 2e-66 sp|P0AGA5|SECY_SHIFL Preprotein translocase subunit secY OS=Shig... 252 2e-66 sp|P0AGA2|SECY_ECOLI Preprotein translocase subunit secY OS=Esch... 252 2e-66 sp|P0AGA3|SECY_ECOL6 Preprotein translocase subunit secY OS=Esch... 252 2e-66 sp|P0AGA4|SECY_ECO57 Preprotein translocase subunit secY OS=Esch... 252 2e-66 sp|Q05207|SECY_BACLD Preprotein translocase subunit secY OS=Baci... 250 8e-66 sp|O63066|SECY_MAIZE Preprotein translocase subunit secY, chloro... 250 8e-66 sp|P16336|SECY_BACSU Preprotein translocase subunit secY OS=Baci... 249 2e-65 sp|P38375|SECY_BACHD Preprotein translocase subunit secY OS=Baci... 247 7e-65 sp|Q38885|SECY_ARATH Preprotein translocase subunit secY, chloro... 247 7e-65 sp|P0A4H1|SECY_SYNP6 Preprotein translocase subunit secY OS=Syne... 246 1e-64 sp|P0A4H0|SECY_SYNE7 Preprotein translocase subunit secY OS=Syne... 246 1e-64 sp|Q6ZG25|SECY_ORYSJ Preprotein translocase subunit secY, chloro... 246 2e-64 sp|P51297|SECY_PORPU Preprotein translocase subunit secY OS=Porp... 244 8e-64 sp|O66491|SECY_AQUAE Preprotein translocase subunit secY OS=Aqui... 240 1e-62 sp|Q4UMQ9|SECY_RICFE Preprotein translocase subunit secY OS=Rick... 240 1e-62 sp|Q68W98|SECY_RICTY Preprotein translocase subunit secY OS=Rick... 238 3e-62 sp|Q92GY6|SECY_RICCN Preprotein translocase subunit secY OS=Rick... 238 4e-62 sp|Q1RHP1|SECY_RICBR Preprotein translocase subunit secY OS=Rick... 238 6e-62 sp|P38397|SECY_PYRSA Preprotein translocase subunit secY (Fragme... 237 7e-62 sp|Q9ZCS5|SECY_RICPR Preprotein translocase subunit secY OS=Rick... 237 9e-62 sp|P28539|SECY_CHLTR Preprotein translocase subunit secY OS=Chla... 236 1e-61 sp|Q1XDJ1|SECY_PORYE Preprotein translocase subunit secY OS=Porp... 236 1e-61 sp|P28527|SECY_GUITH Preprotein translocase subunit secY OS=Guil... 233 2e-60 sp|Q89A85|SECY_BUCBP Preprotein translocase subunit secY OS=Buch... 231 3e-60 sp|P57571|SECY_BUCAI Preprotein translocase subunit secY OS=Buch... 231 6e-60 sp|Q8K969|SECY_BUCAP Preprotein translocase subunit secY OS=Buch... 226 2e-58 sp|Q59548|SECY_MYCPN Preprotein translocase subunit secY OS=Myco... 224 9e-58 sp|Q9PJN1|SECY_CHLMU Preprotein translocase subunit secY OS=Chla... 222 2e-57 sp|P33108|SECY_MICLU Preprotein translocase subunit secY OS=Micr... 222 3e-57 sp|O52351|SECY_MYCGA Preprotein translocase subunit secY OS=Myco... 221 7e-57 sp|P10250|SECY_MYCCT Preprotein translocase subunit secY OS=Myco... 219 2e-56 sp|P47416|SECY_MYCGE Preprotein translocase subunit secY OS=Myco... 218 3e-56 sp|Q9Z7S5|SECY_CHLPN Preprotein translocase subunit secY OS=Chla... 217 9e-56 sp|O25879|SECY_HELPY Preprotein translocase subunit secY OS=Heli... 214 6e-55 sp|Q9ZJS9|SECY_HELPJ Preprotein translocase subunit secY OS=Heli... 214 7e-55 sp|O59442|SECY_PYRHO Preprotein translocase subunit secY OS=Pyro... 211 6e-54 sp|P49976|SECY_BUCAK Preprotein translocase subunit secY (Fragme... 211 7e-54 sp|Q870W0|SC61A_NEUCR Protein transport protein SEC61 subunit al... 210 8e-54 sp|Q9V1V8|SECY_PYRAB Preprotein translocase subunit secY OS=Pyro... 210 1e-53 sp|Q8U019|SECY_PYRFU Preprotein translocase subunit secY OS=Pyro... 210 1e-53 sp|Q54XK2|SC61A_DICDI Protein transport protein Sec61 subunit al... 208 3e-53 sp|P49461|SECY_ODOSI Preprotein translocase subunit secY OS=Odon... 205 5e-52 sp|O51451|SECY_BORBU Preprotein translocase subunit secY OS=Borr... 204 8e-52 sp|Q5NVM7|S61A2_PONAB Protein transport protein Sec61 subunit al... 203 1e-51 sp|Q96TW8|SC61A_HANAN Protein transport protein SEC61 subunit al... 203 2e-51 sp|P78979|SC61A_YARLI Protein transport protein SEC61 subunit al... 203 2e-51 sp|Q9JLR1|S61A2_MOUSE Protein transport protein Sec61 subunit al... 202 3e-51 sp|Q9H9S3|S61A2_HUMAN Protein transport protein Sec61 subunit al... 202 3e-51 sp|Q2KHX4|S61A2_BOVIN Protein transport protein Sec61 subunit al... 202 3e-51 sp|Q90ZM2|S61A1_DANRE Protein transport protein Sec61 subunit al... 202 3e-51 sp|Q8AY32|SC61A_GADOC Protein transport protein Sec61 subunit al... 202 3e-51 sp|Q98SN8|S61A2_ONCMY Protein transport protein Sec61 subunit al... 201 4e-51 sp|Q5EA68|S61A1_BOVIN Protein transport protein Sec61 subunit al... 201 5e-51 sp|P61621|S61A1_RAT Protein transport protein Sec61 subunit alph... 201 5e-51 sp|Q5R5L5|S61A1_PONAB Protein transport protein Sec61 subunit al... 201 5e-51 sp|P61620|S61A1_MOUSE Protein transport protein Sec61 subunit al... 201 5e-51 sp|P61619|S61A1_HUMAN Protein transport protein Sec61 subunit al... 201 5e-51 sp|Q7T278|SC61A_HARAN Protein transport protein Sec61 subunit al... 201 6e-51 sp|Q7T277|SC61A_DISMA Protein transport protein Sec61 subunit al... 201 6e-51 sp|Q8AY36|SC61A_PAGBO Protein transport protein Sec61 subunit al... 201 7e-51 sp|Q8AY35|SC61A_NOTAN Protein transport protein Sec61 subunit al... 201 7e-51 sp|Q8AY34|SC61A_HEMAM Protein transport protein Sec61 subunit al... 201 8e-51 sp|Q90YL4|S61A2_DANRE Protein transport protein Sec61 subunit al... 201 8e-51 sp|Q8AY31|SC61A_BOVVA Protein transport protein Sec61 subunit al... 200 9e-51 sp|P38377|S61A1_CANFA Protein transport protein Sec61 subunit al... 200 1e-50 sp|Q9P8E3|SC61A_CANAL Protein transport protein SEC61 subunit al... 199 1e-50 sp|Q6FRY3|SC61A_CANGA Protein transport protein SEC61 subunit al... 199 2e-50 sp|Q752H7|SC61A_ASHGO Protein transport protein SEC61 subunit al... 199 2e-50 sp|P25014|SECY_CYAPA Preprotein translocase subunit secY OS=Cyan... 199 2e-50 sp|Q6CPY9|SC61A_KLULA Protein transport protein SEC61 subunit al... 199 3e-50 sp|Q6BN08|SC61A_DEBHA Protein transport protein SEC61 subunit al... 198 4e-50 sp|Q8AY33|SC61A_BORSA Protein transport protein Sec61 subunit al... 198 4e-50 sp|Q98SN9|S61A1_ONCMY Protein transport protein Sec61 subunit al... 198 5e-50 sp|P46249|SECY_CYACA Preprotein translocase subunit secY OS=Cyan... 193 1e-48 sp|P32915|SC61A_YEAST Protein transport protein SEC61 OS=Sacchar... 193 2e-48 sp|Q25147|SC61A_HALRO Protein transport protein Sec61 subunit al... 192 4e-48 sp|O26134|SECY_METTH Preprotein translocase subunit secY OS=Meth... 191 5e-48 sp|P38379|SC61A_PYRSA Protein transport protein Sec61 subunit al... 188 5e-47 sp|Q37143|SECY_ANTSP Preprotein translocase subunit secY OS=Anti... 184 8e-46 sp|Q60175|SECY_METJA Preprotein translocase subunit secY OS=Meth... 183 1e-45 sp|P28540|SECY_PAVLU Preprotein translocase subunit secY OS=Pavl... 179 3e-44 sp|P79088|SC61A_SCHPO Protein transport protein sec61 subunit al... 178 5e-44 sp|P28541|SECY_METVA Preprotein translocase subunit secY OS=Meth... 174 6e-43 sp|Q9YDD0|SECY_AERPE Preprotein translocase subunit secY OS=Aero... 171 5e-42 sp|O28377|SECY_ARCFU Preprotein translocase subunit secY OS=Arch... 171 7e-42 sp|P28542|SECY_HALMA Preprotein translocase subunit secY OS=Halo... 165 3e-40 sp|Q9HPB1|SECY_HALSA Preprotein translocase subunit secY OS=Halo... 162 4e-39 sp|Q977V3|SECY_HALVO Preprotein translocase subunit secY OS=Halo... 156 2e-37 sp|P49978|SECY_SULAC Preprotein translocase subunit secY OS=Sulf... 140 2e-32 sp|Q9UX84|SECY_SULSO Preprotein translocase subunit secY OS=Sulf... 131 9e-30 sp|P38353|SSH1_YEAST Sec sixty-one protein homolog OS=Saccharomy... 127 7e-29 sp|O42965|YGMH_SCHPO Uncharacterized protein C19G7.17 OS=Schizos... 117 1e-25 sp|P72179|SECY_PARDE Preprotein translocase subunit secY (Fragme... 99 5e-20 sp|P28620|SECY_BACST Preprotein translocase subunit secY (Fragme... 74 1e-12 sp|P0C6V7|R1AB_BEV Replicase polyprotein 1ab OS=Berne virus GN=r... 34 1.0 sp|P0C6F3|R1A_BEV Replicase polyprotein 1a OS=Berne virus GN=1a ... 34 1.1 sp|Q49VR4|LTAS_STAS1 Glycerol phosphate lipoteichoic acid syntha... 33 3.2 sp|Q5HR16|LTAS_STAEQ Glycerol phosphate lipoteichoic acid syntha... 33 3.6 sp|Q8CQ10|LTAS_STAES Glycerol phosphate lipoteichoic acid syntha... 32 4.0 sp|Q6P6T5|OCLN_RAT Occludin OS=Rattus norvegicus GN=Ocln PE=2 SV=1 32 4.4 sp|P94493|YNCC_BACSU Putative metabolite transport protein yncC ... 32 5.7 sp|Q7A1I3|LTAS_STAAW Glycerol phosphate lipoteichoic acid syntha... 32 6.0 sp|Q6GBB1|LTAS_STAAS Glycerol phosphate lipoteichoic acid syntha... 32 6.0 sp|Q6GIS3|LTAS_STAAR Glycerol phosphate lipoteichoic acid syntha... 32 6.0 sp|Q7A6U1|LTAS_STAAN Glycerol phosphate lipoteichoic acid syntha... 32 6.0 sp|Q99VQ4|LTAS_STAAM Glycerol phosphate lipoteichoic acid syntha... 32 6.0 sp|Q5HHV4|LTAS_STAAC Glycerol phosphate lipoteichoic acid syntha... 32 6.0 sp|Q2G093|LTAS_STAA8 Glycerol phosphate lipoteichoic acid syntha... 32 6.0 sp|Q2FIS2|LTAS_STAA3 Glycerol phosphate lipoteichoic acid syntha... 32 6.0 sp|Q2YSL2|LTAS_STAAB Glycerol phosphate lipoteichoic acid syntha... 32 6.0 sp|P0C6V8|R1AB_BRV1 Replicase polyprotein 1ab OS=Breda virus 1 G... 32 6.7 sp|P0C6F4|R1A_BRV1 Replicase polyprotein 1a OS=Breda virus 1 GN=... 32 7.6 >sp|P78283|SECY_VIBCH Preprotein translocase subunit secY OS=Vibrio cholerae GN=secY PE=3 SV=2 Length = 444 Score = 276 bits (706), Expect = 2e-73, Method: Composition-based stats. Identities = 82/326 (25%), Positives = 158/326 (48%), Gaps = 20/326 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+ ++G+ P++S+ ++ Q+ V L++L E + RR TLV+A Q++ Sbjct: 76 SILALGIMPYISASIVVQLLTVVH-PALAELKKEGEAGRRKISQYTRYGTLVLATFQAIG 134 Query: 55 LVLNLPLQ--EAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMI 111 + LP +D T ++ T+ L+ GT FL+WL + G+G +++ A ++ Sbjct: 135 IATGLPNMVNNLVVIDQTMFTLIATVSLVTGTMFLMWLGEQITERGIGNGISILIFAGIV 194 Query: 112 AYIPQDIWNSIQELKIS---SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFK 168 A +P+ I +I++ + L L L+ V + +Y V +ER + RI VN K Sbjct: 195 AGLPKAIGQTIEQARQGELHVLLLLLIAVLAFAVIYFVVFMERGQRRIVVNYAKRQQGRK 254 Query: 169 ----KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHF--LQPENQLIEQWIEALSMG 222 + ++L +++N AG +P ++A +++ P + ALS G Sbjct: 255 VFAAQSTHLPLKINMAGVIPAIFASSIILFPGTLAQWFGQNGESSTFGWLTDVSLALSPG 314 Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282 P + +LY I + + + + A+ ++KSG ++ + PG T +YI+ ++T Sbjct: 315 QPLYVMLYAAAIIFFCFFYTALVFNPRETADNLKKSGAFVPGIRPGEQTAKYIDKVMTRL 374 Query: 283 ALVGAFYLILISGLP-MMVVLVDIRY 307 L GA Y+ I +P M+V ++R+ Sbjct: 375 TLAGALYITFICLIPEFMMVAWNVRF 400 >sp|P43804|SECY_HAEIN Preprotein translocase subunit secY OS=Haemophilus influenzae GN=secY PE=3 SV=1 Length = 441 Score = 275 bits (704), Expect = 3e-73, Method: Composition-based stats. Identities = 71/324 (21%), Positives = 143/324 (44%), Gaps = 19/324 (5%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54 S+ ++G+ P++S+ ++ Q+ A L++L E T+V A IQ+VA Sbjct: 76 SILALGIMPYISASIVIQLLATVS-PALAELKKEGAAGQRKISKYTRYATVVFATIQAVA 134 Query: 55 LVLNLPLQ--EAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMI 111 + LP + + L+ GT FL+WL + G+G ++V ++ Sbjct: 135 ISTGLPNMLSGLVPNVGFSFYFTSVVSLVTGTMFLMWLGEQITERGIGNGISILVFGGIV 194 Query: 112 AYIPQDIWNSIQELKISSLW---LALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRF- 167 A +P I +I++ + + L L+ Y V VER + RI V Sbjct: 195 AGLPSAILQTIEQARQGQMHPLVLLLIAAIVFAVTYFVVFVERGQRRIRVEYAKRQQGRQ 254 Query: 168 ---KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSP 224 ++L +++N A MP ++A +++ P + + + L+ G P Sbjct: 255 ILGGHSTHLPLKVNMANVMPAIFASSIILFPATLTQWFGQ-NDKFEWLNNLSMLLNPGQP 313 Query: 225 AWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFAL 284 + ++Y + I + + + + A+ ++KSG +I + PG T RYI+ ++T L Sbjct: 314 LYLLVYAVAIIFFSFFYTAMQYNPRDTADNLKKSGAFIPGIRPGEQTSRYIDKVMTRLTL 373 Query: 285 VGAFYLILISGLPMMV-VLVDIRY 307 +G Y+ + +P ++ D+++ Sbjct: 374 IGGLYVTFVCLVPYIMTSAWDVKF 397 >sp|Q9HWF5|SECY_PSEAE Preprotein translocase subunit secY OS=Pseudomonas aeruginosa GN=secY PE=3 SV=1 Length = 442 Score = 273 bits (698), Expect = 1e-72, Method: Composition-based stats. Identities = 73/322 (22%), Positives = 155/322 (48%), Gaps = 17/322 (5%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++S+ +I Q+ + L +L E + RR T+V+AL+Q++ Sbjct: 75 SIFALGIMPYISASIIMQLMT-AISPQLEQLKKEGESGRRKISQYTRYGTVVLALVQAIG 133 Query: 55 LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113 + + L Q A + + +AG F++WL + G+G M++ A ++A Sbjct: 134 MSVGLGSQGVAFSNDFGFYFVAVTTFVAGAMFMMWLGEQITERGVGNGISMLIFAGIVAG 193 Query: 114 IPQDIWNSIQELKISSLWLALML---VFSLVFLYLAVTVERSKYRIPVNKINIHNRFK-- 168 +P+ I S + + + + ++ + ++ + V +ER + RI V+ K Sbjct: 194 LPRAIGQSFESARQGDINIFALIGVGLLAVAIIAFVVFIERGQRRIAVHYAKRQQGRKVF 253 Query: 169 --KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAW 226 + S+L +++N AG +P ++A +++ P + ++ +A++ G P Sbjct: 254 AAQTSHLPLKVNMAGVIPAIFASSILLFPASLGSWFGQSEGLG-WLQDVAQAIAPGQPLN 312 Query: 227 FILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVG 286 +L+ I + + + +AE ++KSG +I + PG + RYI+G++T + G Sbjct: 313 ILLFTAGIVFFCFFYTALMFNPKDVAENLKKSGAFIPGIRPGEQSARYIDGVLTRLTMFG 372 Query: 287 AFYLILISGLP-MMVVLVDIRY 307 A Y+ + LP +VV + + Sbjct: 373 ALYMTAVCLLPQFLVVAAHVPF 394 >sp|Q59912|SECY_STRGB Preprotein translocase subunit secY OS=Streptomyces galbus GN=secY PE=3 SV=1 Length = 437 Score = 268 bits (686), Expect = 4e-71, Method: Composition-based stats. Identities = 71/322 (22%), Positives = 142/322 (44%), Gaps = 26/322 (8%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54 ++F++G+ P++++ +I Q+ V L L E Q LT+ +A++Q Sbjct: 73 TIFALGIMPYITASIILQLLTVV-IPRLEALKKEGQAGTAKITQYTRYLTVALAILQGTG 131 Query: 55 LVLNLPLQEAAG----------VDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-I 103 LV G + + + AGT ++WL +L G+G Sbjct: 132 LVATARSAPLFGRCSVGGQIVPDQSIFTTITMVICMTAGTCVVMWLGELITDRGIGNGMS 191 Query: 104 MIVMASMIAYIPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVNKI 161 +++ S+ A P +W ++ ++ W+ ++ L+ + L V VE+++ RIPV Sbjct: 192 ILMFISIAATFPSALWAIKKQGTLAGGWIEFGTVIAVGLIMVALVVFVEQAQRRIPVQYA 251 Query: 162 ----NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIE 217 + +Y+ +++N AG +P+++A +L+ IP +EQ Sbjct: 252 KRMIGRRSYGGTSTYIPLKVNQAGVIPVIFASSLLYIPALVAQFAGGNSGWKSWVEQ--N 309 Query: 218 ALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277 P + + Y L I A + I+ + +++A+ M+K G +I + G T Y++ Sbjct: 310 LTKGDHPIYIVTYFLLIVFFAFFYVAISFNPEEVADNMKKYGGFIPGIRAGRPTAEYLSY 369 Query: 278 LVTYFALVGAFYLILISGLPMM 299 ++ G+ YL LI+ +P M Sbjct: 370 VLNRITWPGSLYLGLIALVPTM 391 >sp|Q05217|SECY_STACT Preprotein translocase subunit secY OS=Staphylococcus carnosus (strain TM300) GN=secY PE=3 SV=2 Length = 430 Score = 264 bits (676), Expect = 5e-70, Method: Composition-based stats. Identities = 62/319 (19%), Positives = 149/319 (46%), Gaps = 24/319 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++++ ++ Q+ + ++ + R+ +++A IQS+ Sbjct: 69 SIFAMGIMPYITASIVMQLLQMDIVPKFTEWAKQGDVGRKKLNNVTRYFAIILAFIQSIG 128 Query: 55 LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 + +L +VL GT FL+WL + G+G +I+ A + Sbjct: 129 MAFQFNNYLKGALIIDPSPMSYLLIAIVLTTGTAFLLWLGEQITQYGVGNGISIIIFAGI 188 Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163 ++ +P + Q+ + L +A +++ ++ AV V ++ +IP+ Sbjct: 189 LSTLPSSLIQFYQQAFVGQSDTTMAWLQVAGLVIGLVLLTMGAVYVLQAVRKIPIQYAKK 248 Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220 + +YL +++N AG +P+++AM +P+ + P+ +Q + Sbjct: 249 QSTQRLGSNATYLPLKVNSAGVIPVIFAMAFFLLPRTLTMFF----PKADWAQQIANTAN 304 Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280 S ++Y++ I +AF+ ++ +++++ ++K G Y+ + PG T++YI ++ Sbjct: 305 PSSNIGMVIYIILIIAFTYFYAFVQVNPEKMSDNLKKQGSYVPGIRPGEQTKKYITKVLY 364 Query: 281 YFALVGAFYLILISGLPMM 299 VG+ +L +I+ LP++ Sbjct: 365 RLTFVGSIFLAVIAILPIL 383 >sp|Q59916|SECY_STRGR Preprotein translocase subunit secY OS=Streptomyces griseus GN=secY PE=3 SV=1 Length = 437 Score = 260 bits (664), Expect = 1e-68, Method: Composition-based stats. Identities = 73/325 (22%), Positives = 147/325 (45%), Gaps = 26/325 (8%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54 ++F++G+ P++++ +I Q+ V L L E Q LT+ +A++Q Sbjct: 72 TIFALGIMPYITASIILQLLTVV-IPRLEALKKEGQSGTAKITQYTRYLTVALAILQGTG 130 Query: 55 LVLNLPLQ----------EAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIM 104 LV + ++ L + AGT ++WL +L G+G + Sbjct: 131 LVATARSGALFQNCSVGSQIVADKSIFTTIIMVLTMTAGTPPVMWLGELITDRGIGNGMS 190 Query: 105 I-VMASMIAYIPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVN-- 159 I + S+ A P +W + K++ W+ +++ V + L V VE+++ RIPV Sbjct: 191 IPMFISIAATFPGALWAIKESGKLADGWIEFGTVILIGFVMVALVVFVEQAQRRIPVQLP 250 Query: 160 --KINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIE 217 I + +Y+ +++N AG +P+++A +L+ IP + + I+ Sbjct: 251 KRMIGRRSYGGTSTYIPLKVNQAGVIPVIFASSLLYIPALIVQFSNSQAGWATWIQD--N 308 Query: 218 ALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277 ++ P + Y + I A + I+ + D++A+ M+K G +I + G T Y++ Sbjct: 309 FVTGDHPYYIATYFVLIVFFAFFYVAISFNPDEVADNMKKYGGFIPGIRAGRPTAEYLSY 368 Query: 278 LVTYFALVGAFYLILISGLPMMVVL 302 ++ G+ YL LI+ +P M + Sbjct: 369 VLNRITWPGSLYLGLIALVPTMALA 393 >sp|O33006|SECY_MYCLE Preprotein translocase subunit secY OS=Mycobacterium leprae GN=secY PE=3 SV=1 Length = 438 Score = 259 bits (662), Expect = 3e-68, Method: Composition-based stats. Identities = 70/348 (20%), Positives = 146/348 (41%), Gaps = 30/348 (8%) Query: 3 FSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVALV 56 +VG+ P++++ +I Q+ V +L E Q L + +A++Q+ ++V Sbjct: 74 LTVGVMPYITASIIVQLLTVV-IPRFEELRKEGQAGQAKMTQYTRYLAIALAVLQATSIV 132 Query: 57 LNLPLQE--------AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVM 107 +V+ LV+ G ++W+ +L G+G +++ Sbjct: 133 ALAANGGLLQGCQEDIISDQSIFSLVVIVLVMTGGAALVMWMGELITERGIGNGMSLLIF 192 Query: 108 ASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI----NI 163 + A IP + + + A + + +LV + V VE+ + RIPV Sbjct: 193 VGIAARIPAEGKQILDS--RGGVIFAAVCLAALVIIVGVVFVEQGQRRIPVQYAKRMVGR 250 Query: 164 HNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQP---ENQLIEQWIEALS 220 +YL +++N AG +P+++A +L+ IP ++ ++ + LS Sbjct: 251 RMYGGTSTYLPLKVNQAGVIPVIFASSLIYIPHLITQLVRSGSGGVGKSWWDKFVGTYLS 310 Query: 221 -MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLV 279 P + +Y I + + + D+ A+ M+K G +I + PG T Y+ ++ Sbjct: 311 DPADPVYINIYFGLIIFFTYFYVSVTFNPDERADEMKKFGGFIPGIRPGRPTADYLRYVL 370 Query: 280 TYFALVGAFYLILISGLPMMVVLVD----IRYLRLSMIPGIFMIFIGM 323 + L G+ YL I+ LP + + + ++ L + MI +G+ Sbjct: 371 SRITLPGSIYLGAIAVLPNLFLQIGNGGEVQNLPFGGTAVLIMIGVGL 418 >sp|P38376|SECY_CORGL Preprotein translocase subunit secY OS=Corynebacterium glutamicum GN=secY PE=3 SV=1 Length = 440 Score = 258 bits (660), Expect = 4e-68, Method: Composition-based stats. Identities = 71/328 (21%), Positives = 146/328 (44%), Gaps = 26/328 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54 S+F++G+ P++++ +I Q+ V +L E Q LT+ +AL+QS Sbjct: 73 SIFAIGIMPYITASIIVQLLTVV-IPHFEELKKEGQSGQAKMMQYTRYLTVALALLQSSG 131 Query: 55 LV--------LNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMI 105 +V L ++ + +++ + + AG ++W+ +L G+G ++ Sbjct: 132 IVALADREQLLGAGIRVLSADRNFFDLIVLVITMTAGAVLVMWMGELITEKGVGNGMSLL 191 Query: 106 VMASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI---- 161 + A + +P D N + + A++L L+ + V VE+ + RIPV Sbjct: 192 IFAGIATRLPTDGMNIL--GNSGGVVFAVVLASVLILVIGVVFVEQGQRRIPVQYAKRMV 249 Query: 162 NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQ---PENQLIEQWIEA 218 +YL +++N AG +P+++A +L+ +P I++ +N I Sbjct: 250 GRRQYGGSSTYLPLKVNQAGVIPVIFASSLIYMPVLITQIVNSGSLEVSDNWWQRNIIAH 309 Query: 219 LS-MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277 L S + +LY + + + + AE M+K G +I + PG T Y+ Sbjct: 310 LQTPSSWQYIVLYFALTIFFSYFYVSVQYDPAEQAENMKKYGGFIPGIRPGRPTAEYLGF 369 Query: 278 LVTYFALVGAFYLILISGLPMMVVLVDI 305 ++ VG+ YL +I+ LP +++ + + Sbjct: 370 VMNRLLFVGSLYLAVIAVLPNIMLDLGV 397 >sp|P77964|SECY_SYNY3 Preprotein translocase subunit secY OS=Synechocystis sp. (strain PCC 6803) GN=secY PE=3 SV=1 Length = 442 Score = 258 bits (659), Expect = 5e-68, Method: Composition-based stats. Identities = 70/320 (21%), Positives = 150/320 (46%), Gaps = 19/320 (5%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 +F++G+ P++++ +I Q+ + E + RR + +IQ + Sbjct: 79 GIFALGILPYINASIIMQLLTAAIPALEDLQKNEGEAGRRKISQYSRYIAFGWCIIQGLG 138 Query: 55 LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113 L + L L+ A + L + AG+ F++W+++L G+G +++ +++A Sbjct: 139 LTVGL-LRPYANNYGPLFIFQTVLAITAGSMFVMWISELITERGIGNGASLLIFVNIVAT 197 Query: 114 IPQDIWNSIQ----ELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHN---- 165 +PQ + +I+ + S + L+++ LV + V V+ RIP+ Sbjct: 198 LPQTLGQTIEYAQSGGRQSITAVVLLMLVFLVMIVGIVFVQEGTRRIPIISARRQVGKKL 257 Query: 166 RFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHF---LQPENQLIEQWIEALSMG 222 ++ SYL +RLN G MPI++A ++ +P L ++ Q AL G Sbjct: 258 YRERTSYLPLRLNQGGVMPIIFASAVLILPSSLAGFATGNEGLGGFGEIFVQISNALRPG 317 Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282 + + ++Y + IF + +A + ++ + +++ ++K G I + PG T +Y+ G++ Sbjct: 318 TWVYTVVYSVMIFFFSYFYASLIVNPEDVSKNLKKMGSSIPGIRPGKKTEQYLEGVLNRL 377 Query: 283 ALVGAFYLILISGLPMMVVL 302 +GA +L ++ LP+ V Sbjct: 378 TFLGAIFLSFVATLPIFVEQ 397 >sp|P27148|SECY_LACLC Preprotein translocase subunit secY OS=Lactococcus lactis subsp. cremoris GN=secY PE=3 SV=3 Length = 439 Score = 256 bits (654), Expect = 2e-67, Method: Composition-based stats. Identities = 74/329 (22%), Positives = 159/329 (48%), Gaps = 21/329 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 SLF++G+SP++++ +I Q+ + + + + RR +TLV+A+ QS+ Sbjct: 69 SLFAMGVSPYITASIIVQLLQMDILPKFVEWSKQGEIGRRKLNQATRYITLVLAMAQSIG 128 Query: 55 LVLNLPLQE---AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 + ++ ++L G+ + W+ + G G +I+ A + Sbjct: 129 ITAGFQAMSSLNIVQNPNWQSYLMIGVLLTTGSMVVTWMGEQINEKGFGSGVSVIIFAGI 188 Query: 111 IAYIPQDIWNSIQELKI---------SSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI 161 ++ IP I + E + S +++ +++ ++V +Y+ V++++ ++P+ Sbjct: 189 VSGIPSAIKSVYDEKFLNVRPSEIPMSWIFVIGLILSAIVIIYVTTFVQQAERKVPIQYT 248 Query: 162 NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPEN-QLIEQWIEALS 220 + SYL +R+NPAG +P+++A ++ + P L + Q N + ALS Sbjct: 249 KLTQGAPTSSYLPLRVNPAGVIPVIFAGSITTAPATILQFLQRSQGSNVGWLSTLQNALS 308 Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280 + + Y L I + ++F+ ++ +++AE +QK G YI +V PG T +Y++ L+ Sbjct: 309 YTTWTGMLFYALLIVLFTFFYSFVQVNPEKMAENLQKQGSYIPSVRPGKGTEKYVSRLLM 368 Query: 281 YFALVGAFYLILISGLPMMVVL-VDIRYL 308 A VG+ +L LIS +P+ + + Sbjct: 369 RLATVGSLFLGLISIIPIAAQNVWGLPKI 397 >sp|Q8CNF3|SECY_STAES Preprotein translocase subunit secY OS=Staphylococcus epidermidis (strain ATCC 12228) GN=secY PE=3 SV=1 Length = 430 Score = 255 bits (652), Expect = 3e-67, Method: Composition-based stats. Identities = 65/309 (21%), Positives = 146/309 (47%), Gaps = 24/309 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++++ ++ Q+ + ++ + + RR +++A IQS+ Sbjct: 69 SIFAMGIMPYITASIVMQLLQMDIVPKFTEWAKQGEMGRRKINNVTRYFAIILAFIQSIG 128 Query: 55 LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 + + +L +VL AGT FLIWL D G+G +I+ A + Sbjct: 129 MAFQFNNYLKGQLIIEKSVMSYLLIAVVLTAGTAFLIWLGDQITQFGVGNGISLIIFAGI 188 Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163 ++ +P + Q + + L + ++V ++ A+ V +K +IP+ Sbjct: 189 LSTLPSSLEQFAQSVFVGQDDTSLAWLKILGLIVALILLTVGAIFVLEAKRKIPIQYAKK 248 Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220 + + +YL +++N AG +P+++AM +P+ L P+ + + + + Sbjct: 249 QSAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLFF----PKAEWAQNIADTAN 304 Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280 S I+Y++ I A +AF+ ++ +++A+ ++K G Y+ + PG T++YI ++ Sbjct: 305 PSSNIGMIIYVVLIIAFAYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364 Query: 281 YFALVGAFY 289 VG+ + Sbjct: 365 RLTFVGSIF 373 >sp|Q5HM19|SECY_STAEQ Preprotein translocase subunit secY OS=Staphylococcus epidermidis (strain ATCC 35984 / RP62A) GN=secY PE=3 SV=1 Length = 430 Score = 255 bits (652), Expect = 3e-67, Method: Composition-based stats. Identities = 65/309 (21%), Positives = 146/309 (47%), Gaps = 24/309 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++++ ++ Q+ + ++ + + RR +++A IQS+ Sbjct: 69 SIFAMGIMPYITASIVMQLLQMDIVPKFTEWAKQGEMGRRKINNVTRYFAIILAFIQSIG 128 Query: 55 LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 + + +L +VL AGT FLIWL D G+G +I+ A + Sbjct: 129 MAFQFNNYLKGQLIIEKSVMSYLLIAVVLTAGTAFLIWLGDQITQFGVGNGISLIIFAGI 188 Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163 ++ +P + Q + + L + ++V ++ A+ V +K +IP+ Sbjct: 189 LSTLPSSLEQFAQSVFVGQDDTSLAWLKILGLIVALILLTVGAIFVLEAKRKIPIQYAKK 248 Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220 + + +YL +++N AG +P+++AM +P+ L P+ + + + + Sbjct: 249 QSAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLFF----PKAEWAQNIADTAN 304 Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280 S I+Y++ I A +AF+ ++ +++A+ ++K G Y+ + PG T++YI ++ Sbjct: 305 PSSNIGMIIYVVLIIAFAYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364 Query: 281 YFALVGAFY 289 VG+ + Sbjct: 365 RLTFVGSIF 373 >sp|P46785|SECY_STRCO Preprotein translocase subunit secY OS=Streptomyces coelicolor GN=secY PE=3 SV=2 Length = 437 Score = 255 bits (652), Expect = 3e-67, Method: Composition-based stats. Identities = 71/325 (21%), Positives = 146/325 (44%), Gaps = 26/325 (8%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54 ++F++G+ P++++ +I Q+ V L L E Q LT+ +A++Q Sbjct: 73 TVFALGIMPYITASIILQLLTVV-IPRLEALKKEGQAGTAKITQYTRYLTVALAILQGTG 131 Query: 55 LVLNLPLQ----------EAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-I 103 LV + V+ + + AGT ++WL +L G+G Sbjct: 132 LVATARSGALFSGCTVAGQIVPDQAIFTTVVMVICMTAGTCVVMWLGELITDRGIGNGMS 191 Query: 104 MIVMASMIAYIPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVNKI 161 +++ S+ A P +W ++ +++ W+ +++ LV + L V VE+++ RIPV Sbjct: 192 ILMFISIAATFPSALWAIKKQGELADGWIEFGTVILVGLVMVGLVVFVEQAQRRIPVQYA 251 Query: 162 ----NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIE 217 + +Y+ +++N AG +P+++A +L+ IP + + I + Sbjct: 252 KRMIGRRSYGGTSTYIPLKVNQAGVIPVIFASSLLYIPALIVQFSNSTAGWATWITK--N 309 Query: 218 ALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277 + ILY I A + I+ + +++A+ M+K G +I + G T Y++ Sbjct: 310 LADTAATPHIILYFFLIVFFAFFYVAISFNPEEVADNMKKYGGFIPGIRAGRPTAEYLSY 369 Query: 278 LVTYFALVGAFYLILISGLPMMVVL 302 ++ G+ YL LI+ +P M + Sbjct: 370 VLNRITWPGSLYLGLIALVPTMALA 394 >sp|P49977|SECY_STRLI Preprotein translocase subunit secY OS=Streptomyces lividans GN=secY PE=3 SV=1 Length = 437 Score = 255 bits (651), Expect = 4e-67, Method: Composition-based stats. Identities = 71/325 (21%), Positives = 146/325 (44%), Gaps = 26/325 (8%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54 ++F++G+ P++++ +I Q+ V L L E Q LT+ +A++Q Sbjct: 73 TVFALGIMPYITASIILQLLTVV-IPRLEALKKEGQAGTAKITQYTRYLTVALAILQGTG 131 Query: 55 LVLNLPLQ----------EAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-I 103 LV + V+ + + AGT ++WL +L G+G Sbjct: 132 LVATARSGALFSGCTVAGQIVPDQAIFTTVVMVICMTAGTCVVMWLGELITDRGIGNGMS 191 Query: 104 MIVMASMIAYIPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVNKI 161 +++ S+ A P +W ++ +++ W+ +++ LV + L V VE+++ RIPV Sbjct: 192 ILMFISIAATFPSALWAIKKQGELADGWIEFGTVILVGLVMVGLVVFVEQAQRRIPVQYA 251 Query: 162 ----NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIE 217 + +Y+ +++N AG +P+++A +L+ IP + + I + Sbjct: 252 KRMIGRRSYGGTSTYIPLKVNQAGVIPVIFASSLLYIPALIVQFSNSTAGWATWITK--N 309 Query: 218 ALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277 + ILY I A + I+ + +++A+ M+K G +I + G T Y++ Sbjct: 310 LADTAATPHIILYFFLIVFFAFFYVAISFNPEEVADNMKKYGGFIPGIRAGRPTAEYLSY 369 Query: 278 LVTYFALVGAFYLILISGLPMMVVL 302 ++ G+ YL LI+ +P M + Sbjct: 370 VLNRITWPGSLYLGLIALVPTMALA 394 >sp|P93690|SECY_SPIOL Preprotein translocase subunit secY, chloroplastic OS=Spinacia oleracea GN=SECY PE=2 SV=1 Length = 545 Score = 255 bits (651), Expect = 4e-67, Method: Composition-based stats. Identities = 62/315 (19%), Positives = 151/315 (47%), Gaps = 20/315 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 + S+G+ P++++ +++Q+ + E + R+ ++ AL+Q++ Sbjct: 190 GICSLGIVPFINAQIVFQLLSQVYPKLQDLQKKEGEAGRKKIKQYTQYASVGFALVQAIG 249 Query: 55 LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113 VL L + T ++ ++L G+ F +L + + + LG +++ ++I+Y Sbjct: 250 QVLFL--RPYVNDYSTEWVLSSVILLTLGSVFTTYLGERISDLKLGNGTSLLIFTNIISY 307 Query: 114 IPQDIWNSIQELKISSLW--LALMLVFSLVFLYLAVTVERSKYRIPVNKI----NIHNRF 167 +P ++ E + LA+++V + ++ V V+ ++ +IP+N Sbjct: 308 LPASFGRTVAEAYQEGNYTGLAIIVVSFVSLVFGIVYVQEAERKIPMNYASRYSGKSGGL 367 Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227 +K +YL ++N AG MPI+++ + +S+P ++++ AL+ G + Sbjct: 368 QKSAYLPFKVNSAGVMPIIFSTSSLSLPATLARFTGLD-----ILKKAAVALTPGGSFYL 422 Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287 +L I + F+ + D ++E++++ G I V PG +T YI +++ +++G+ Sbjct: 423 PTNILLIAFFNYYYTFLQLDPDDVSEQLKRQGASIPLVRPGKSTAAYIKTVLSRISVLGS 482 Query: 288 FYLILISGLPMMVVL 302 +L +++ P +V Sbjct: 483 GFLAILAAGPAVVEQ 497 >sp|Q7A086|SECY_STAAW Preprotein translocase subunit secY OS=Staphylococcus aureus (strain MW2) GN=secY PE=3 SV=1 Length = 430 Score = 254 bits (650), Expect = 5e-67, Method: Composition-based stats. Identities = 72/327 (22%), Positives = 152/327 (46%), Gaps = 25/327 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++++ ++ Q+ + S+ + + RR L + +A IQS+ Sbjct: 69 SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG 128 Query: 55 LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 + +L LVL AGT FLIWL D G+G +I+ A + Sbjct: 129 MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI 188 Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163 ++ +P + Q + L + +LV ++ A+ V + +IP+ Sbjct: 189 LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK 248 Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220 + +YL +++N AG +P+++AM +P+ L P+ + + A + Sbjct: 249 QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLF----YPDKEWAQNIANAAN 304 Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280 S ++Y++ I + +AF+ ++ +++A+ ++K G Y+ + PG T++YI ++ Sbjct: 305 PSSNVGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364 Query: 281 YFALVGAFYLILISGLPMMVV-LVDIR 306 VG+ +L +IS LP++ + + Sbjct: 365 RLTFVGSIFLAVISILPILATKFMGLP 391 >sp|Q6G791|SECY_STAAS Preprotein translocase subunit secY OS=Staphylococcus aureus (strain MSSA476) GN=secY PE=3 SV=1 Length = 430 Score = 254 bits (650), Expect = 5e-67, Method: Composition-based stats. Identities = 72/327 (22%), Positives = 152/327 (46%), Gaps = 25/327 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++++ ++ Q+ + S+ + + RR L + +A IQS+ Sbjct: 69 SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG 128 Query: 55 LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 + +L LVL AGT FLIWL D G+G +I+ A + Sbjct: 129 MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI 188 Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163 ++ +P + Q + L + +LV ++ A+ V + +IP+ Sbjct: 189 LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK 248 Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220 + +YL +++N AG +P+++AM +P+ L P+ + + A + Sbjct: 249 QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLF----YPDKEWAQNIANAAN 304 Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280 S ++Y++ I + +AF+ ++ +++A+ ++K G Y+ + PG T++YI ++ Sbjct: 305 PSSNVGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364 Query: 281 YFALVGAFYLILISGLPMMVV-LVDIR 306 VG+ +L +IS LP++ + + Sbjct: 365 RLTFVGSIFLAVISILPILATKFMGLP 391 >sp|Q6GEK3|SECY_STAAR Preprotein translocase subunit secY OS=Staphylococcus aureus (strain MRSA252) GN=secY PE=3 SV=1 Length = 430 Score = 254 bits (650), Expect = 5e-67, Method: Composition-based stats. Identities = 72/327 (22%), Positives = 152/327 (46%), Gaps = 25/327 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++++ ++ Q+ + S+ + + RR L + +A IQS+ Sbjct: 69 SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG 128 Query: 55 LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 + +L LVL AGT FLIWL D G+G +I+ A + Sbjct: 129 MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI 188 Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163 ++ +P + Q + L + +LV ++ A+ V + +IP+ Sbjct: 189 LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK 248 Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220 + +YL +++N AG +P+++AM +P+ L P+ + + A + Sbjct: 249 QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLF----YPDKEWAQNIANAAN 304 Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280 S ++Y++ I + +AF+ ++ +++A+ ++K G Y+ + PG T++YI ++ Sbjct: 305 PSSNVGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364 Query: 281 YFALVGAFYLILISGLPMMVV-LVDIR 306 VG+ +L +IS LP++ + + Sbjct: 365 RLTFVGSIFLAVISILPILATKFMGLP 391 >sp|Q7A468|SECY_STAAN Preprotein translocase subunit secY OS=Staphylococcus aureus (strain N315) GN=secY PE=1 SV=1 Length = 430 Score = 254 bits (650), Expect = 5e-67, Method: Composition-based stats. Identities = 72/327 (22%), Positives = 152/327 (46%), Gaps = 25/327 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++++ ++ Q+ + S+ + + RR L + +A IQS+ Sbjct: 69 SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG 128 Query: 55 LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 + +L LVL AGT FLIWL D G+G +I+ A + Sbjct: 129 MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI 188 Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163 ++ +P + Q + L + +LV ++ A+ V + +IP+ Sbjct: 189 LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK 248 Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220 + +YL +++N AG +P+++AM +P+ L P+ + + A + Sbjct: 249 QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLF----YPDKEWAQNIANAAN 304 Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280 S ++Y++ I + +AF+ ++ +++A+ ++K G Y+ + PG T++YI ++ Sbjct: 305 PSSNVGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364 Query: 281 YFALVGAFYLILISGLPMMVV-LVDIR 306 VG+ +L +IS LP++ + + Sbjct: 365 RLTFVGSIFLAVISILPILATKFMGLP 391 >sp|Q99S39|SECY_STAAM Preprotein translocase subunit secY OS=Staphylococcus aureus (strain Mu50 / ATCC 700699) GN=secY PE=3 SV=1 Length = 430 Score = 254 bits (650), Expect = 5e-67, Method: Composition-based stats. Identities = 72/327 (22%), Positives = 152/327 (46%), Gaps = 25/327 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++++ ++ Q+ + S+ + + RR L + +A IQS+ Sbjct: 69 SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG 128 Query: 55 LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 + +L LVL AGT FLIWL D G+G +I+ A + Sbjct: 129 MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI 188 Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163 ++ +P + Q + L + +LV ++ A+ V + +IP+ Sbjct: 189 LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK 248 Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220 + +YL +++N AG +P+++AM +P+ L P+ + + A + Sbjct: 249 QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLF----YPDKEWAQNIANAAN 304 Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280 S ++Y++ I + +AF+ ++ +++A+ ++K G Y+ + PG T++YI ++ Sbjct: 305 PSSNVGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364 Query: 281 YFALVGAFYLILISGLPMMVV-LVDIR 306 VG+ +L +IS LP++ + + Sbjct: 365 RLTFVGSIFLAVISILPILATKFMGLP 391 >sp|Q5HDX8|SECY_STAAC Preprotein translocase subunit secY OS=Staphylococcus aureus (strain COL) GN=secY PE=3 SV=1 Length = 430 Score = 254 bits (650), Expect = 5e-67, Method: Composition-based stats. Identities = 72/327 (22%), Positives = 152/327 (46%), Gaps = 25/327 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++++ ++ Q+ + S+ + + RR L + +A IQS+ Sbjct: 69 SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG 128 Query: 55 LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 + +L LVL AGT FLIWL D G+G +I+ A + Sbjct: 129 MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI 188 Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163 ++ +P + Q + L + +LV ++ A+ V + +IP+ Sbjct: 189 LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK 248 Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220 + +YL +++N AG +P+++AM +P+ L P+ + + A + Sbjct: 249 QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLF----YPDKEWAQNIANAAN 304 Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280 S ++Y++ I + +AF+ ++ +++A+ ++K G Y+ + PG T++YI ++ Sbjct: 305 PSSNVGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364 Query: 281 YFALVGAFYLILISGLPMMVV-LVDIR 306 VG+ +L +IS LP++ + + Sbjct: 365 RLTFVGSIFLAVISILPILATKFMGLP 391 >sp|O08387|SECY_STAA8 Preprotein translocase subunit secY OS=Staphylococcus aureus (strain NCTC 8325) GN=secY PE=3 SV=2 Length = 430 Score = 254 bits (650), Expect = 5e-67, Method: Composition-based stats. Identities = 72/327 (22%), Positives = 152/327 (46%), Gaps = 25/327 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++++ ++ Q+ + S+ + + RR L + +A IQS+ Sbjct: 69 SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG 128 Query: 55 LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 + +L LVL AGT FLIWL D G+G +I+ A + Sbjct: 129 MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI 188 Query: 111 IAYIPQDIWNSIQELKIS-------SLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163 ++ +P + Q + L + +LV ++ A+ V + +IP+ Sbjct: 189 LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK 248 Query: 164 HNR---FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220 + +YL +++N AG +P+++AM +P+ L P+ + + A + Sbjct: 249 QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLF----YPDKEWAQNIANAAN 304 Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280 S ++Y++ I + +AF+ ++ +++A+ ++K G Y+ + PG T++YI ++ Sbjct: 305 PSSNVGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLY 364 Query: 281 YFALVGAFYLILISGLPMMVV-LVDIR 306 VG+ +L +IS LP++ + + Sbjct: 365 RLTFVGSIFLAVISILPILATKFMGLP 391 >sp|P58118|SECY_LACLA Preprotein translocase subunit secY OS=Lactococcus lactis subsp. lactis GN=secY PE=3 SV=1 Length = 439 Score = 254 bits (649), Expect = 7e-67, Method: Composition-based stats. Identities = 74/329 (22%), Positives = 159/329 (48%), Gaps = 21/329 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 SLF++G+SP++++ +I Q+ + + + + RR +TLV+A+ QS+ Sbjct: 69 SLFAMGVSPYITASIIVQLLQMDILPKFVEWSKQGEIGRRKLNQATRYITLVLAMAQSIG 128 Query: 55 LVLNLPLQE---AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 + ++ +L G+ + W+ + G G +I+ A + Sbjct: 129 ITAGFQAMSSLNIVQNPNWQSYLMIGAILTTGSMVVTWMGEQINEKGFGSGVSVIIFAGI 188 Query: 111 IAYIPQDIWNSIQELKI---------SSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI 161 ++ IP + + E + S L++ +++ +++ +Y+ V++++ ++P+ Sbjct: 189 VSSIPSAVKSVYDEKFLNVRPSEIPMSWLFVIGLVLSAIIIIYVTTFVQQAERKVPIQYT 248 Query: 162 NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPEN-QLIEQWIEALS 220 + SYL +R+NPAG +P+++A ++ + P L + Q N + +ALS Sbjct: 249 KLTQGAPTSSYLPLRVNPAGVIPVIFAGSITTAPATILQFLQRSQGSNVGWLSTLQDALS 308 Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280 + + Y L I + ++F+ ++ +++AE +QK G YI +V PG T +Y++ L+ Sbjct: 309 YTTWTGMLFYALLIVLFTFFYSFVQVNPEKMAENLQKQGSYIPSVRPGKGTEKYVSRLLM 368 Query: 281 YFALVGAFYLILISGLPMMVVL-VDIRYL 308 A VGA +L LIS +P+ + + Sbjct: 369 RLATVGALFLGLISIIPIAAQNVWGLPKI 397 >sp|P0A5Z2|SECY_MYCTU Preprotein translocase subunit secY OS=Mycobacterium tuberculosis GN=secY PE=3 SV=1 Length = 441 Score = 253 bits (648), Expect = 9e-67, Method: Composition-based stats. Identities = 70/350 (20%), Positives = 149/350 (42%), Gaps = 30/350 (8%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54 ++F+VG+ P++++ +I Q+ V +L E Q L + +A++Q+ + Sbjct: 75 TVFAVGVMPYITASIIVQLLTVV-IPRFEELRKEGQAGQSKMTQYTRYLAIALAILQATS 133 Query: 55 LVLNLPLQE--------AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMI 105 +V +V+ LV+ G ++W+ +L G+G ++ Sbjct: 134 IVALAANGGLLQGCSLDIIADQSIFTLVVIVLVMTGGAALVMWMGELITERGIGNGMSLL 193 Query: 106 VMASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI---- 161 + + A IP + + ++ + + +L+ + V VE+ + RIPV Sbjct: 194 IFVGIAARIPAEGQSILES--RGGVVFTAVCAAALIIIVGVVFVEQGQRRIPVQYAKRMV 251 Query: 162 NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQP---ENQLIEQWIEA 218 +YL +++N AG +P+++A +L+ IP +I + + Sbjct: 252 GRRMYGGTSTYLPLKVNQAGVIPVIFASSLIYIPHLITQLIRSGSGVVGNSWWDKFVGTY 311 Query: 219 LS-MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277 LS + + +Y I + I + D+ A+ M+K G +I + PG T Y+ Sbjct: 312 LSDPSNLVYIGIYFGLIIFFTYFYVSITFNPDERADEMKKFGGFIPGIRPGRPTADYLRY 371 Query: 278 LVTYFALVGAFYLILISGLPMMVVLVD----IRYLRLSMIPGIFMIFIGM 323 +++ L G+ YL +I+ LP + + + ++ L + MI +G+ Sbjct: 372 VLSRITLPGSIYLGVIAVLPNLFLQIGAGGTVQNLPFGGTAVLIMIGVGL 421 >sp|P0A5Z3|SECY_MYCBO Preprotein translocase subunit secY OS=Mycobacterium bovis GN=secY PE=3 SV=1 Length = 441 Score = 253 bits (648), Expect = 9e-67, Method: Composition-based stats. Identities = 70/350 (20%), Positives = 149/350 (42%), Gaps = 30/350 (8%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54 ++F+VG+ P++++ +I Q+ V +L E Q L + +A++Q+ + Sbjct: 75 TVFAVGVMPYITASIIVQLLTVV-IPRFEELRKEGQAGQSKMTQYTRYLAIALAILQATS 133 Query: 55 LVLNLPLQE--------AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMI 105 +V +V+ LV+ G ++W+ +L G+G ++ Sbjct: 134 IVALAANGGLLQGCSLDIIADQSIFTLVVIVLVMTGGAALVMWMGELITERGIGNGMSLL 193 Query: 106 VMASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI---- 161 + + A IP + + ++ + + +L+ + V VE+ + RIPV Sbjct: 194 IFVGIAARIPAEGQSILES--RGGVVFTAVCAAALIIIVGVVFVEQGQRRIPVQYAKRMV 251 Query: 162 NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQP---ENQLIEQWIEA 218 +YL +++N AG +P+++A +L+ IP +I + + Sbjct: 252 GRRMYGGTSTYLPLKVNQAGVIPVIFASSLIYIPHLITQLIRSGSGVVGNSWWDKFVGTY 311 Query: 219 LS-MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277 LS + + +Y I + I + D+ A+ M+K G +I + PG T Y+ Sbjct: 312 LSDPSNLVYIGIYFGLIIFFTYFYVSITFNPDERADEMKKFGGFIPGIRPGRPTADYLRY 371 Query: 278 LVTYFALVGAFYLILISGLPMMVVLVD----IRYLRLSMIPGIFMIFIGM 323 +++ L G+ YL +I+ LP + + + ++ L + MI +G+ Sbjct: 372 VLSRITLPGSIYLGVIAVLPNLFLQIGAGGTVQNLPFGGTAVLIMIGVGL 421 >sp|P43416|SECY_STRSC Preprotein translocase subunit secY OS=Streptomyces scabies GN=secY PE=3 SV=1 Length = 437 Score = 253 bits (648), Expect = 9e-67, Method: Composition-based stats. Identities = 70/325 (21%), Positives = 144/325 (44%), Gaps = 26/325 (8%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54 ++F++G+ P++++ +I Q+ V L L E Q LT+ +A++Q Sbjct: 73 TIFALGIMPYITASIILQLLTVV-IPRLEALKKEGQSGTAKITQYTRYLTVALAVLQGTG 131 Query: 55 LVLNLPLQEAAG----------VDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-I 103 LV D + + + AGT ++WL +L G+G Sbjct: 132 LVATARSGALFSQCPQANNIVPDDSIFTTLTMVVTMTAGTAVVMWLGELITDRGIGNGMS 191 Query: 104 MIVMASMIAYIPQDIWNSIQELKI--SSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI 161 +++ S+ A P +W+ ++ + + +++ LV + L V VE+++ RIPV Sbjct: 192 ILMFISIAATFPSALWSIKEQGDLAGGWIEFGIVIAVGLVMVALVVFVEQAQRRIPVQYA 251 Query: 162 ----NIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIE 217 + +Y+ +++N AG +P+++A +L+ IP + I++ Sbjct: 252 KRMIGRRSYGGTSTYIPLKVNQAGIIPVIFASSLLYIPALVVQFSGSTAGWAAWIQK--N 309 Query: 218 ALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277 +PA +Y I A + I+ + +++A+ M+K G +I + G T Y++ Sbjct: 310 LADTAAPAHITVYFFLIIFFAFFYVAISFNPEEVADNMKKYGGFIPGIRAGRPTAEYLSY 369 Query: 278 LVTYFALVGAFYLILISGLPMMVVL 302 ++ G+ YL LI+ +P M + Sbjct: 370 VLNRITWPGSLYLGLIALVPTMALA 394 >sp|Q9XQU4|SECY_PEA Preprotein translocase subunit secY, chloroplastic OS=Pisum sativum GN=SECY PE=2 SV=1 Length = 527 Score = 252 bits (645), Expect = 2e-66, Method: Composition-based stats. Identities = 56/315 (17%), Positives = 145/315 (46%), Gaps = 20/315 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54 + S+G+ P++++ +++Q+ A E + ++ A++Q++ Sbjct: 171 GICSLGIVPFINAQIVFQLLAQVYPKLQDLQKKEGEAGRKKLLQYTRYASVGFAIVQAIG 230 Query: 55 LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113 VL L + A T + ++L G+ F ++ + + LG +++ ++I+Y Sbjct: 231 QVLFL--RPYANDFTTEWALTSVILLTLGSVFTTYIGEQITELKLGNGTSLLIFTNIISY 288 Query: 114 IPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVNKINI----HNRF 167 +P + + + ++ L ++V + + V V+ ++ +IP+N + Sbjct: 289 LPASFGRTFSQAFSDANYVGLVTIIVSFFLLVLGIVYVQEAERKIPINYASRFTSKSGGI 348 Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227 +K +YL ++N +G MPI+++ + +++P + + AL+ G + Sbjct: 349 EKSAYLPFKVNSSGVMPIIFSTSSLALPGTLARFTGLSSLKTAAV-----ALNPGGSFYL 403 Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287 +L I + F+ + D ++E++++ G I V PG +T +I +++ +++G+ Sbjct: 404 PFNILLIAFFNYYYTFLQLDPDDVSEQLKRQGASIPLVRPGKSTATFIKTVLSRISVLGS 463 Query: 288 FYLILISGLPMMVVL 302 +L +++ P +V Sbjct: 464 TFLAILAAGPAVVEQ 478 >sp|P0AGA5|SECY_SHIFL Preprotein translocase subunit secY OS=Shigella flexneri GN=secY PE=3 SV=1 Length = 443 Score = 252 bits (645), Expect = 2e-66, Method: Composition-based stats. Identities = 76/326 (23%), Positives = 151/326 (46%), Gaps = 21/326 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++S+ +I Q+ V L+++ E + RR TLV+A+ QS+ Sbjct: 76 SIFALGIMPYISASIIIQLLTVVH-PTLAEIKKEGESGRRKISQYTRYGTLVLAIFQSIG 134 Query: 55 LVLNLPLQE----AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIV-MAS 109 + LP + L+ GT FL+WL + G+G I I+ A Sbjct: 135 IATGLPNMPGMQGLVINPGFAFYFTAVVSLVTGTMFLMWLGEQITERGIGNGISIIIFAG 194 Query: 110 MIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTV---ERSKYRIPVNKINIHNR 166 ++A +P I ++I++ + L ++L+ +++ + V ER + RI VN Sbjct: 195 IVAGLPPAIAHTIEQARQGDLHFLVLLLVAVLVFAVTFFVVFVERGQRRIVVNYAKRQQG 254 Query: 167 FK----KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222 + + ++L +++N AG +P ++A +++ P N + L G Sbjct: 255 RRVYAAQSTHLPLKVNMAGVIPAIFASSIILFPATIASWFGGGTGWN-WLTTISLYLQPG 313 Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282 P + +LY I + + + + A+ ++KSG ++ + PG T +YI+ ++T Sbjct: 314 QPLYVLLYASAIIFFCFFYTALVFNPRETADNLKKSGAFVPGIRPGEQTAKYIDKVMTRL 373 Query: 283 ALVGAFYLILISGLPMMV-VLVDIRY 307 LVGA Y+ I +P + + + + Sbjct: 374 TLVGALYITFICLIPEFMRDAMKVPF 399 >sp|P0AGA2|SECY_ECOLI Preprotein translocase subunit secY OS=Escherichia coli (strain K12) GN=secY PE=1 SV=1 Length = 443 Score = 252 bits (645), Expect = 2e-66, Method: Composition-based stats. Identities = 76/326 (23%), Positives = 151/326 (46%), Gaps = 21/326 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++S+ +I Q+ V L+++ E + RR TLV+A+ QS+ Sbjct: 76 SIFALGIMPYISASIIIQLLTVVH-PTLAEIKKEGESGRRKISQYTRYGTLVLAIFQSIG 134 Query: 55 LVLNLPLQE----AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIV-MAS 109 + LP + L+ GT FL+WL + G+G I I+ A Sbjct: 135 IATGLPNMPGMQGLVINPGFAFYFTAVVSLVTGTMFLMWLGEQITERGIGNGISIIIFAG 194 Query: 110 MIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTV---ERSKYRIPVNKINIHNR 166 ++A +P I ++I++ + L ++L+ +++ + V ER + RI VN Sbjct: 195 IVAGLPPAIAHTIEQARQGDLHFLVLLLVAVLVFAVTFFVVFVERGQRRIVVNYAKRQQG 254 Query: 167 FK----KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222 + + ++L +++N AG +P ++A +++ P N + L G Sbjct: 255 RRVYAAQSTHLPLKVNMAGVIPAIFASSIILFPATIASWFGGGTGWN-WLTTISLYLQPG 313 Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282 P + +LY I + + + + A+ ++KSG ++ + PG T +YI+ ++T Sbjct: 314 QPLYVLLYASAIIFFCFFYTALVFNPRETADNLKKSGAFVPGIRPGEQTAKYIDKVMTRL 373 Query: 283 ALVGAFYLILISGLPMMV-VLVDIRY 307 LVGA Y+ I +P + + + + Sbjct: 374 TLVGALYITFICLIPEFMRDAMKVPF 399 >sp|P0AGA3|SECY_ECOL6 Preprotein translocase subunit secY OS=Escherichia coli O6 GN=secY PE=3 SV=1 Length = 443 Score = 252 bits (645), Expect = 2e-66, Method: Composition-based stats. Identities = 76/326 (23%), Positives = 151/326 (46%), Gaps = 21/326 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++S+ +I Q+ V L+++ E + RR TLV+A+ QS+ Sbjct: 76 SIFALGIMPYISASIIIQLLTVVH-PTLAEIKKEGESGRRKISQYTRYGTLVLAIFQSIG 134 Query: 55 LVLNLPLQE----AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIV-MAS 109 + LP + L+ GT FL+WL + G+G I I+ A Sbjct: 135 IATGLPNMPGMQGLVINPGFAFYFTAVVSLVTGTMFLMWLGEQITERGIGNGISIIIFAG 194 Query: 110 MIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTV---ERSKYRIPVNKINIHNR 166 ++A +P I ++I++ + L ++L+ +++ + V ER + RI VN Sbjct: 195 IVAGLPPAIAHTIEQARQGDLHFLVLLLVAVLVFAVTFFVVFVERGQRRIVVNYAKRQQG 254 Query: 167 FK----KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222 + + ++L +++N AG +P ++A +++ P N + L G Sbjct: 255 RRVYAAQSTHLPLKVNMAGVIPAIFASSIILFPATIASWFGGGTGWN-WLTTISLYLQPG 313 Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282 P + +LY I + + + + A+ ++KSG ++ + PG T +YI+ ++T Sbjct: 314 QPLYVLLYASAIIFFCFFYTALVFNPRETADNLKKSGAFVPGIRPGEQTAKYIDKVMTRL 373 Query: 283 ALVGAFYLILISGLPMMV-VLVDIRY 307 LVGA Y+ I +P + + + + Sbjct: 374 TLVGALYITFICLIPEFMRDAMKVPF 399 >sp|P0AGA4|SECY_ECO57 Preprotein translocase subunit secY OS=Escherichia coli O157:H7 GN=secY PE=3 SV=1 Length = 443 Score = 252 bits (645), Expect = 2e-66, Method: Composition-based stats. Identities = 76/326 (23%), Positives = 151/326 (46%), Gaps = 21/326 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++S+ +I Q+ V L+++ E + RR TLV+A+ QS+ Sbjct: 76 SIFALGIMPYISASIIIQLLTVVH-PTLAEIKKEGESGRRKISQYTRYGTLVLAIFQSIG 134 Query: 55 LVLNLPLQE----AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIV-MAS 109 + LP + L+ GT FL+WL + G+G I I+ A Sbjct: 135 IATGLPNMPGMQGLVINPGFAFYFTAVVSLVTGTMFLMWLGEQITERGIGNGISIIIFAG 194 Query: 110 MIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTV---ERSKYRIPVNKINIHNR 166 ++A +P I ++I++ + L ++L+ +++ + V ER + RI VN Sbjct: 195 IVAGLPPAIAHTIEQARQGDLHFLVLLLVAVLVFAVTFFVVFVERGQRRIVVNYAKRQQG 254 Query: 167 FK----KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222 + + ++L +++N AG +P ++A +++ P N + L G Sbjct: 255 RRVYAAQSTHLPLKVNMAGVIPAIFASSIILFPATIASWFGGGTGWN-WLTTISLYLQPG 313 Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282 P + +LY I + + + + A+ ++KSG ++ + PG T +YI+ ++T Sbjct: 314 QPLYVLLYASAIIFFCFFYTALVFNPRETADNLKKSGAFVPGIRPGEQTAKYIDKVMTRL 373 Query: 283 ALVGAFYLILISGLPMMV-VLVDIRY 307 LVGA Y+ I +P + + + + Sbjct: 374 TLVGALYITFICLIPEFMRDAMKVPF 399 >sp|Q05207|SECY_BACLD Preprotein translocase subunit secY OS=Bacillus licheniformis (strain DSM 13 / ATCC 14580) GN=secY PE=3 SV=2 Length = 431 Score = 250 bits (640), Expect = 8e-66, Method: Composition-based stats. Identities = 68/325 (20%), Positives = 147/325 (45%), Gaps = 26/325 (8%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+ ++G+ P++++ +I Q+ + ++ + + RR T+V+ IQ++ Sbjct: 68 SILAMGIMPYITASIIIQLLQMDVVPKFTEWSKQGEVGRRKLAQFTRYFTIVLGFIQALG 127 Query: 55 LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 + +L +VL AGT FL+WL + + G+G +I+ A + Sbjct: 128 MSYGFNNMAGGALITDPGVGTYLLIAIVLTAGTAFLMWLGEQITSHGVGNGISIIIFAGI 187 Query: 111 IAYIPQDIWNSI--------QELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKIN 162 +A IPQ I +L + + + ++LV L + + ++++ +I + Sbjct: 188 VAGIPQTINQIYAQQFVDAGDQLFLQIIKVVVILVAILAIVVGVIFIQQAVRKISIQYAK 247 Query: 163 IHNR----FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEA 218 R + ++L +++NPAG +P+++A+ ++ P+ N + Sbjct: 248 GSGRSPVPGGQSTHLPLKVNPAGVIPVIFAVAFITTPRTVATFFGSNDVTN----WIQKT 303 Query: 219 LSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGL 278 P +Y I +AF+ ++ +Q+A+ ++K G YI V PG T+ I + Sbjct: 304 FDYTHPVGMGVYAALIIAFTYFYAFVQVNPEQMADNLKKQGGYIPGVRPGKMTQDRITSI 363 Query: 279 VTYFALVGAFYLILISGLPMMVVLV 303 + VG+ +L +I+ LP++ V + Sbjct: 364 LYRLTFVGSIFLAVIAILPVLFVNI 388 >sp|O63066|SECY_MAIZE Preprotein translocase subunit secY, chloroplastic OS=Zea mays GN=SECY PE=2 SV=1 Length = 553 Score = 250 bits (640), Expect = 8e-66, Method: Composition-based stats. Identities = 56/315 (17%), Positives = 148/315 (46%), Gaps = 20/315 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54 + S+G+ P++++ +++Q+ A E + ++ A++Q++ Sbjct: 195 GICSLGIVPFINAQIVFQLLAQLYPKLQDLQRKEGEAGRKKVLQYTRYASVGFAIVQAIG 254 Query: 55 LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113 VL L + T ++ +L G+ F ++ + + + LG +++ S+I+Y Sbjct: 255 QVLYL--RPYVNDFSTEWVLTSVTLLTLGSVFTTFIGERISDLKLGNGTSLLIFTSIISY 312 Query: 114 IPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVNKINIHNRF---- 167 +P ++ + ++ L +++ L+ + V V+ ++ +IP+N + ++ Sbjct: 313 LPASFGRTVAQAFQDGNYVGLLTIILSFLLLVLGIVYVQEAERKIPLNYASRYSSRTGEL 372 Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227 ++ +YL ++N +G MPI+++ + +++P +++ AL+ G + Sbjct: 373 QRSAYLPFKVNSSGVMPIIFSTSSLALPGTLARFSGLDF-----LKKAAIALNPGGALYL 427 Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287 +L I + F+ + D ++E++++ G I V PG +T YI ++ +++G+ Sbjct: 428 PTNVLLIAFFNYYYTFLQLDPDDLSEQLKRQGASIPLVRPGKSTAAYIKTVLNRISVLGS 487 Query: 288 FYLILISGLPMMVVL 302 +L +++ P +V Sbjct: 488 AFLAVLAAGPSLVEQ 502 >sp|P16336|SECY_BACSU Preprotein translocase subunit secY OS=Bacillus subtilis GN=secY PE=3 SV=1 Length = 431 Score = 249 bits (636), Expect = 2e-65, Method: Composition-based stats. Identities = 65/329 (19%), Positives = 148/329 (44%), Gaps = 27/329 (8%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G++P++++ +I Q+ + ++ + + RR T+V+ IQ++ Sbjct: 68 SIFAMGITPYITASIIIQLLQMDVVPKFTEWSKQGEVGRRKLAQFTRYFTIVLGFIQALG 127 Query: 55 LVLNLPL---QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 + + ++ LVL GT FL+WL + + G+G +I+ A + Sbjct: 128 MSYGFNNLANGMLIEKSGVSTYLIIALVLTGGTAFLMWLGEQITSHGVGNGISIIIFAGI 187 Query: 111 IAYIPQDIWNSIQELKISS--------LWLALMLVFSLVFLYLAVTVERSKYRIPVNKIN 162 ++ IP+ I + + S + +AL+++ L + + ++++ +I + Sbjct: 188 VSSIPKTIGQIYETQFVGSNDQLFIHIVKVALLVIAILAVIVGVIFIQQAVRKIAIQYAK 247 Query: 163 IHN----RFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEA 218 + ++L +++NPAG +P+++A+ + P+ N + + Sbjct: 248 GTGRSPAGGGQSTHLPLKVNPAGVIPVIFAVAFLITPRTIASFFG----TNDVTKWIQNN 303 Query: 219 LSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGL 278 P +Y+ I +AF+ ++ +Q+A+ ++K G YI V PG T+ I + Sbjct: 304 FDNTHPVGMAIYVALIIAFTYFYAFVQVNPEQMADNLKKQGGYIPGVRPGKMTQDRITSI 363 Query: 279 VTYFALVGAFYLILISGLP-MMVVLVDIR 306 + VG+ +L +IS LP + + Sbjct: 364 LYRLTFVGSIFLAVISILPIFFIQFAGLP 392 >sp|P38375|SECY_BACHD Preprotein translocase subunit secY OS=Bacillus halodurans GN=secY PE=3 SV=2 Length = 430 Score = 247 bits (632), Expect = 7e-65, Method: Composition-based stats. Identities = 71/321 (22%), Positives = 149/321 (46%), Gaps = 24/321 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++++ ++ Q+ + ++ E + RR T+V+ IQ++ Sbjct: 68 SIFAMGIMPYITASIVMQLLQMDVVPKFAEWAKEGEAGRRKLAQFTRYGTIVLGFIQALG 127 Query: 55 LVLNLP--LQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMI 111 + + ++ + LVL AGT FL+WL + A G+G +I+ A + Sbjct: 128 MSVGFNNFFPGLIPNPSVSVYLFIALVLTAGTAFLMWLGEQITAKGVGNGISIIIFAGIA 187 Query: 112 AYIPQDIWNSI--------QELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163 A IP + ++L ++ + + L+ + L + + V+++ +IPV Sbjct: 188 AGIPNGLNLIYSTRIQDAGEQLFLNIVVILLLALAILAIIVGVIFVQQALRKIPVQYAKR 247 Query: 164 HNRF----KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEAL 219 + ++L +++N AG +P+++A++L P + P + IE Sbjct: 248 LVGRNPVGGQSTHLPLKVNAAGVIPVIFALSLFIFPPTVAGLFGSDHPVAAWV---IETF 304 Query: 220 SMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLV 279 P +Y L I + FI ++ +++AE ++K G YI + PG AT+ YI ++ Sbjct: 305 DYTHPIGMAVYALLIIGFTYFYTFIQVNPERMAENLKKQGGYIPGIRPGKATQTYITRIL 364 Query: 280 TYFALVGAFYLILISGLPMMV 300 VG+ +L +++ LP+ Sbjct: 365 YRLTFVGSLFLAVVAILPVFF 385 >sp|Q38885|SECY_ARATH Preprotein translocase subunit secY, chloroplastic OS=Arabidopsis thaliana GN=SECY PE=1 SV=2 Length = 551 Score = 247 bits (632), Expect = 7e-65, Method: Composition-based stats. Identities = 58/316 (18%), Positives = 143/316 (45%), Gaps = 20/316 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54 + S+G+ P++++ +++Q+ A E + ++ A++Q++ Sbjct: 193 GICSLGIVPFINAQIVFQLLAQVYPKLQDLQKKEGEAGRKKILQYTRYASVGFAIVQAIG 252 Query: 55 LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113 V L + T +V +L G+ ++ + + + LG +++ S+I+Y Sbjct: 253 QVFYL--RPYVNDFSTEWVVSSVTLLTLGSVLTTYIGERISDLKLGNGTSLLIFTSIISY 310 Query: 114 IPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVNKINIH----NRF 167 +P + E + L ++V L+ + V V+ ++ +IP+N + + Sbjct: 311 LPASFGRTTAEALQEGNYTGLGTIVVSFLLLVLGIVYVQEAERKIPLNYASRYTSKAGGL 370 Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227 +K +YL ++N AG MPI+++ + +++P ++ AL+ G + Sbjct: 371 QKSAYLPFKVNSAGVMPIIFSTSSLALPATLARFTGI-----SALKNVAFALTPGGSFYL 425 Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287 +L I + F+ + D ++E++++ G I V PG +T +I ++ +++G+ Sbjct: 426 PTNILLIAFFNYYYTFLQLDPDDVSEQLKRQGASIPLVRPGKSTALFIKTVLGRISVLGS 485 Query: 288 FYLILISGLPMMVVLV 303 +L +++ P +V + Sbjct: 486 AFLAVLAAGPAVVEQI 501 >sp|P0A4H1|SECY_SYNP6 Preprotein translocase subunit secY OS=Synechococcus sp. (strain ATCC 27144 / PCC 6301 / SAUG 1402/1) GN=secY PE=3 SV=1 Length = 439 Score = 246 bits (630), Expect = 1e-64, Method: Composition-based stats. Identities = 68/319 (21%), Positives = 150/319 (47%), Gaps = 25/319 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 +F++G+ P++++ +I Q+ + E + RR ++L AL+QS+ Sbjct: 83 GVFALGILPYINASIILQLLTAAVPALEDLQKNEGEAGRRKIAQLTRYVSLGWALLQSIV 142 Query: 55 LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113 + + + A + L L+AG+ F++W+++L G+G +++ +++A Sbjct: 143 IAVW--VTRYAVTPGPLFTIQTALALVAGSMFVMWISELITERGIGNGASLLIFLNIVAT 200 Query: 114 IPQDIWNSIQELKISS----LWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI----HN 165 +P+ + +++ + + ++L+ L + V V+ RIPV Sbjct: 201 LPRSLQQTLELAQSGDRSTVGGIVILLIVFLATIVGIVFVQEGTRRIPVVSARRQVGNRV 260 Query: 166 RFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGS-- 223 ++ SYL +RLN G MPI++A ++ +P N+++ + LS Sbjct: 261 YSERSSYLPLRLNQGGVMPIIFASAILVLPFSLANFT-----SNEVVLRIANYLSPNGPT 315 Query: 224 -PAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282 + + YL+ I + ++ + ++ +A+ ++K G I V PG AT +Y+ G++ Sbjct: 316 PWIYALFYLVLIVAFSYFYSSLILNPVDLAQNLKKMGSSIPGVRPGRATSQYVQGVLNRL 375 Query: 283 ALVGAFYLILISGLPMMVV 301 ++GA +L L++ +P V Sbjct: 376 TILGAVFLGLVAIIPTAVE 394 >sp|P0A4H0|SECY_SYNE7 Preprotein translocase subunit secY OS=Synechococcus elongatus (strain PCC 7942) GN=secY PE=3 SV=1 Length = 439 Score = 246 bits (630), Expect = 1e-64, Method: Composition-based stats. Identities = 68/319 (21%), Positives = 150/319 (47%), Gaps = 25/319 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 +F++G+ P++++ +I Q+ + E + RR ++L AL+QS+ Sbjct: 83 GVFALGILPYINASIILQLLTAAVPALEDLQKNEGEAGRRKIAQLTRYVSLGWALLQSIV 142 Query: 55 LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113 + + + A + L L+AG+ F++W+++L G+G +++ +++A Sbjct: 143 IAVW--VTRYAVTPGPLFTIQTALALVAGSMFVMWISELITERGIGNGASLLIFLNIVAT 200 Query: 114 IPQDIWNSIQELKISS----LWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI----HN 165 +P+ + +++ + + ++L+ L + V V+ RIPV Sbjct: 201 LPRSLQQTLELAQSGDRSTVGGIVILLIVFLATIVGIVFVQEGTRRIPVVSARRQVGNRV 260 Query: 166 RFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGS-- 223 ++ SYL +RLN G MPI++A ++ +P N+++ + LS Sbjct: 261 YSERSSYLPLRLNQGGVMPIIFASAILVLPFSLANFT-----SNEVVLRIANYLSPNGPT 315 Query: 224 -PAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282 + + YL+ I + ++ + ++ +A+ ++K G I V PG AT +Y+ G++ Sbjct: 316 PWIYALFYLVLIVAFSYFYSSLILNPVDLAQNLKKMGSSIPGVRPGRATSQYVQGVLNRL 375 Query: 283 ALVGAFYLILISGLPMMVV 301 ++GA +L L++ +P V Sbjct: 376 TILGAVFLGLVAIIPTAVE 394 >sp|Q6ZG25|SECY_ORYSJ Preprotein translocase subunit secY, chloroplastic OS=Oryza sativa subsp. japonica GN=SECY PE=2 SV=1 Length = 556 Score = 246 bits (629), Expect = 2e-64, Method: Composition-based stats. Identities = 54/316 (17%), Positives = 148/316 (46%), Gaps = 20/316 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54 + S+G+ P++++ +++Q+ A E + ++ A++Q++ Sbjct: 198 GICSLGIVPFINAQIVFQLLAQLYPKLQDLQKKEGEAGRKKVLQYTRYASVGFAIVQAIG 257 Query: 55 LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113 VL L + T ++ +L G+ F ++ + + + LG +++ S+I+Y Sbjct: 258 QVLFL--RPYVNDFSTEWVLTSVTLLTLGSVFTTFIGERISDLKLGNGTSLLIFTSIISY 315 Query: 114 IPQDIWNSIQELKISSLWLAL--MLVFSLVFLYLAVTVERSKYRIPVNKINI----HNRF 167 +P ++ + ++ L +++ L + V V+ ++ +IP+N + Sbjct: 316 LPASFGRTVAQAFQDGNYVGLLTIILSFLFLVLGIVYVQEAERKIPLNYASRYSSRSGGL 375 Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227 ++ +YL ++N +G MPI+++ + +++P + +++ +L+ G + Sbjct: 376 QRSAYLPFKVNSSGVMPIIFSTSSLALPGTLARFTGL-----EFLKKAAISLNPGGALYI 430 Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287 +L I + F+ + D ++E++++ G I V PG +T +I +++ +++G+ Sbjct: 431 PTNVLLIAFFNYYYTFLQLDPDDLSEQLKRQGASIPLVRPGKSTAAFIKTVLSNISVLGS 490 Query: 288 FYLILISGLPMMVVLV 303 +L +++ P +V + Sbjct: 491 AFLAVLAAGPSVVEQI 506 >sp|P51297|SECY_PORPU Preprotein translocase subunit secY OS=Porphyra purpurea GN=secY PE=3 SV=1 Length = 411 Score = 244 bits (623), Expect = 8e-64, Method: Composition-based stats. Identities = 73/323 (22%), Positives = 149/323 (46%), Gaps = 22/323 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR-------MLLTLVIALIQSV 53 +F++G+ P+++S ++ Q+ L KL E E R L L A +QS Sbjct: 62 GIFALGIVPYINSSIVMQLLT-KIIPDLEKLQKEEGELGRQKITQITRYLALGWATLQSG 120 Query: 54 ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIA 112 A+ + ++ T + L L AG+ ++WL++L G+G +++ ++++ Sbjct: 121 AISIW--VKPYVFNWNFTFVCESVLALTAGSMIIMWLSELITEKGIGNGASLLIFQNIVS 178 Query: 113 YIPQDIWNSIQELKISS--LWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKK- 169 +P++ S + S+ + L +V L+ + + + V+ RI + + Sbjct: 179 GLPKNFTQSFFDANYSNTSIKFGLFIVIFLLMIIITIFVQEGTRRIKIISARQLGKSSIL 238 Query: 170 --YSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227 SYL ++LN G MPI++A +++P Y + +N + Q + + Sbjct: 239 DPNSYLPLKLNQGGVMPIVFASASMALPAYLTQLT-----QNTFLLQVLYLFCPNGSLYL 293 Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287 +LY + I + + I ++ + IA ++K G I N+ PG AT Y+ ++ +GA Sbjct: 294 VLYSVLILFFSYFYTSIVMNPEDIATNLKKMGASIPNIRPGQATIDYLQVILNRLTFLGA 353 Query: 288 FYLILISGLPMMVVLV-DIRYLR 309 +L ++ +P ++ V I+ LR Sbjct: 354 TFLFTVALIPFIIEKVAQIQNLR 376 >sp|O66491|SECY_AQUAE Preprotein translocase subunit secY OS=Aquifex aeolicus GN=secY PE=1 SV=1 Length = 429 Score = 240 bits (612), Expect = 1e-62, Method: Composition-based stats. Identities = 77/329 (23%), Positives = 156/329 (47%), Gaps = 28/329 (8%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ-------ERRRMLLTLVIALIQSV 53 ++F++G+ P++S+ ++ Q+ V+ L +L E LTL +A +QS+ Sbjct: 71 TVFALGVMPYISASIMMQLLTVA-IPSLQRLAKEEGDYGRYKINEYTKYLTLFVATVQSL 129 Query: 54 ALVLNLPLQ------EAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIV 106 + + Q + +++ L L+AGT FL+W+ D G+G +I+ Sbjct: 130 GIAFWIRGQVSPKGIPVVENPGISFILITVLTLVAGTMFLVWIADRITEKGIGNGASLII 189 Query: 107 MASMIAYIPQDIWNSIQELKISS---LWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI 163 A ++A P + +++K L L L++ + + V V+ ++ RIP+ Sbjct: 190 FAGIVANFPNAVIQFYEKVKTGDIGPLTLLLIIALIIAIIVGIVYVQEAERRIPIQYPGR 249 Query: 164 HNRF----KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEAL 219 + +YL I++NPAG +PI++A L+ IP L + +N I+ + Sbjct: 250 QVGRQLYAGRKTYLPIKINPAGVIPIIFAQALLLIPSTLLNFV-----QNPFIKVIADMF 304 Query: 220 SMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLV 279 G+ + LY+ I + + I+ ++AE + K+G +I V PG T +Y+ ++ Sbjct: 305 QPGAIFYNFLYVTFIVFFTYFYTAVLINPVELAENLHKAGAFIPGVRPGQDTVKYLERII 364 Query: 280 TYFALVGAFYLILISGLPMMVVLV-DIRY 307 GA +L +I+ +P+++ + +I + Sbjct: 365 NRLIFFGALFLSVIALIPILISVWFNIPF 393 >sp|Q4UMQ9|SECY_RICFE Preprotein translocase subunit secY OS=Rickettsia felis GN=secY PE=3 SV=1 Length = 433 Score = 240 bits (612), Expect = 1e-62, Method: Composition-based stats. Identities = 66/344 (19%), Positives = 155/344 (45%), Gaps = 25/344 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++ + P++++ +I Q+ +V+ + L L E + +R LT+++A Q+ Sbjct: 70 SIFALAIMPYITASIIIQLMSVAYKP-LENLKKEGEVGKRKVNQLSRYLTVLLASFQAYG 128 Query: 55 LVLNL-----PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMA 108 + ++L + V + L+ GT L+WL + G+G +I+ Sbjct: 129 VAISLESIVTNTGPVVILAGFFFRVTTVITLVVGTMLLMWLGEQITQRGIGNGTSLIIFI 188 Query: 109 SMIAYIPQDIWNSIQELKISSLWLALMLVFSL---VFLYLAVTVERSKYRIPVNKINIH- 164 +I+ +P I + + + +L + L + V + + + E+++ ++ V Sbjct: 189 GIISGVPSAIISMFELSRKGALSPLIALAVCIGVVVLIAIIIFFEKAQRKLLVQYPKRQV 248 Query: 165 ---NRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSM 221 + +++ ++LN +G +P ++A +++ P ++ + L Sbjct: 249 GNKIYGGEATHMPLKLNTSGVIPPIFASSILLFPATLANF---SNSNSETMGMLTYYLGH 305 Query: 222 GSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTY 281 G P + +LY+ I + + I + ++ A ++K G YI PG T Y + ++T Sbjct: 306 GKPVYILLYVALIMFFSFFYTAIVFNSEETANNLRKYGAYIPGKRPGKNTSDYFDYILTR 365 Query: 282 FALVGAFYLILISGLPMMVVLVDIRYLRLSMIPGIFMIFIGMVF 325 ++G YL +I +P ++ ++ + LS+ F+I + +V Sbjct: 366 LTVIGGIYLSVICVIPELL--MNKYVISLSLGGTSFLIVVNVVL 407 >sp|Q68W98|SECY_RICTY Preprotein translocase subunit secY OS=Rickettsia typhi GN=secY PE=3 SV=1 Length = 433 Score = 238 bits (609), Expect = 3e-62, Method: Composition-based stats. Identities = 65/344 (18%), Positives = 157/344 (45%), Gaps = 25/344 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++ + P++++ +I Q+ +V+ + L L E + +R LT+++A Q+ Sbjct: 70 SIFALAIMPYITASIIIQLMSVAYKP-LENLKKEGESGKRKINQLSRYLTVLLASFQAYG 128 Query: 55 LVLNL-----PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMA 108 + L+L + V + L+ GT L+WL + G+G +I+ Sbjct: 129 VALSLESMVTNTGPVVILAGFFFRVTTVITLVVGTMLLMWLGEQITQRGIGNGTSLIIFI 188 Query: 109 SMIAYIPQDIWNSIQELKISSLWLAL---MLVFSLVFLYLAVTVERSKYRIPVNKINIH- 164 +I+ +P I + + + +L + + + ++ + + + E+++ ++ V Sbjct: 189 GIISGVPSAIISMFELSRKGALSPLIAITVCIGVVLLIAIIIFFEKAQRKLLVQYPKRQV 248 Query: 165 ---NRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSM 221 + +++ ++LN +G +P ++A +++ P ++ + L Sbjct: 249 GNKIYGGEATHMPLKLNTSGVIPPIFASSILLFPTTLANF---SNSNSETMSMLSYYLGH 305 Query: 222 GSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTY 281 G P + +LY++ I + + I + ++ A ++K G YI PG T Y + ++T Sbjct: 306 GKPVYILLYVVLIMFFSFFYTAIVFNSEETANNLRKYGAYIPGKRPGKNTSDYFDYILTR 365 Query: 282 FALVGAFYLILISGLPMMVVLVDIRYLRLSMIPGIFMIFIGMVF 325 ++G YL +I +P ++ ++ + LS+ F+I + +V Sbjct: 366 LTVIGGLYLSIICVIPELL--MNKYVISLSLGGTSFLIVVNVVL 407 >sp|Q92GY6|SECY_RICCN Preprotein translocase subunit secY OS=Rickettsia conorii GN=secY PE=3 SV=1 Length = 433 Score = 238 bits (608), Expect = 4e-62, Method: Composition-based stats. Identities = 65/344 (18%), Positives = 155/344 (45%), Gaps = 25/344 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++ + P++++ +I Q+ +V+ + L L E + +R LT+++A Q+ Sbjct: 70 SIFALAIMPYITASIIIQLMSVAYKP-LENLKKEGEVGKRKVNQLSRYLTVLLASFQAYG 128 Query: 55 LVLNL-----PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMA 108 + ++L + + + L+ GT L+WL + G+G +I+ Sbjct: 129 VAISLESIVTNTGPVVILAGFFFRITTVITLVVGTMLLMWLGEQITQRGIGNGTSLIIFI 188 Query: 109 SMIAYIPQDIWNSIQELKISSLWLALMLVFSL---VFLYLAVTVERSKYRIPVNKINIH- 164 +I+ +P I + + + +L + + + V + + + ER++ ++ V Sbjct: 189 GIISGVPSAIISMFELSRKGALSPLIAIAVCIGVVVLIAIIIFFERAQRKLLVQYPKRQV 248 Query: 165 ---NRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSM 221 + +++ ++LN +G +P ++A +++ P ++ + L Sbjct: 249 GNKIYGGEATHMPLKLNTSGVIPPIFASSILLFPATLANF---SNSNSETMGMLTYYLGH 305 Query: 222 GSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTY 281 G P + +LY+ I + + I + ++ A ++K G YI PG T Y + ++T Sbjct: 306 GKPVYILLYVALIMFFSFFYTAIVFNSEETANNLRKYGAYIPGKRPGKNTSDYFDYILTR 365 Query: 282 FALVGAFYLILISGLPMMVVLVDIRYLRLSMIPGIFMIFIGMVF 325 ++G YL +I +P ++ ++ + LS+ F+I + +V Sbjct: 366 LTVIGGIYLSVICVIPELL--MNKYVISLSLGGTSFLIVVNVVL 407 >sp|Q1RHP1|SECY_RICBR Preprotein translocase subunit secY OS=Rickettsia bellii (strain RML369-C) GN=secY PE=3 SV=1 Length = 433 Score = 238 bits (607), Expect = 6e-62, Method: Composition-based stats. Identities = 65/344 (18%), Positives = 156/344 (45%), Gaps = 25/344 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++ + P++++ +I Q+ +V+ + L L E + +R LT+++A +Q+ Sbjct: 70 SIFALAIMPYITASIIIQLMSVAYKP-LENLKKEGEAGKRKINQLSRYLTVLLASLQAYG 128 Query: 55 LVLNL-----PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMA 108 + ++L + + + L+ GT L+WL + G+G +I+ Sbjct: 129 VAVSLESIVTNTGPVVIIPGLFFKITTVITLVVGTMLLMWLGEQITQRGIGNGTSLIIFI 188 Query: 109 SMIAYIPQDIWNSIQELKISSLWLALMLVFS---LVFLYLAVTVERSKYRIPVNKINIH- 164 +I+ +P I + + + +L + + ++ + + + E+++ ++ V Sbjct: 189 GIISGVPSAIISMFELSRKGALSPLVAIAVCAGVVILISIIIFFEKAQRKLLVQYPKRQV 248 Query: 165 ---NRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSM 221 +Y+ ++LN +G +P ++A +++ P ++++ L Sbjct: 249 GNKIYGGDSTYMPLKLNTSGVIPPIFASSILLFPATLANF---SSSNSEIMNMLTYYLGH 305 Query: 222 GSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTY 281 G P + +LY+ I + + I + ++ A ++K G YI PG T Y + ++T Sbjct: 306 GKPIYILLYVALIMFFSFFYTAIVFNSEETANNLRKYGAYIPGKRPGKNTSEYFDYILTR 365 Query: 282 FALVGAFYLILISGLPMMVVLVDIRYLRLSMIPGIFMIFIGMVF 325 +VG YL +I +P ++ ++ + LS+ F+I + +V Sbjct: 366 LTVVGGIYLSVICIIPELL--MNKYVISLSLGGTSFLIVVNVVL 407 >sp|P38397|SECY_PYRSA Preprotein translocase subunit secY (Fragment) OS=Pyrenomonas salina GN=secY PE=3 SV=1 Length = 412 Score = 237 bits (606), Expect = 7e-62, Method: Composition-based stats. Identities = 70/314 (22%), Positives = 146/314 (46%), Gaps = 22/314 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLE-VQERRRM------LLTLVIALIQSV 53 +F++G+ P++++ ++ Q A + L KL E + R+ L A IQS+ Sbjct: 68 GIFALGIVPYINASIVIQ-LATTSIPNLEKLQKEEGEAGRQKISQITRYRALGWAAIQSL 126 Query: 54 ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIA 112 + ++ + +V TL L G+ ++W ++ G+G +++ ++IA Sbjct: 127 GVSFW--VRPYVFNWDSQFVVQMTLALTTGSMLIMWFSEQITEKGIGNGPSLLIFINIIA 184 Query: 113 YIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSY 172 +P+ I + ++ L+++ S+ + + +Y I + + H K+ SY Sbjct: 185 GLPKLIQQKSNAISSTNQTTELVVLASISVYDSRIFIRDRRYYI-LQTVGRH--CKQTSY 241 Query: 173 LDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSP---AWFIL 229 L +RLN G MPI++A ++ +P Y +I +NQ + + + LS S + I Sbjct: 242 LPLRLNQGGVMPIIFASAILVLPAYLGQVI-----QNQFVLKLVTLLSPNSSDKNLYLIF 296 Query: 230 YLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFY 289 Y I + +A + I+ + +++ ++K I V PG AT Y+ + +GA + Sbjct: 297 YFSLILFFSYFYASLIINPNDVSQNLKKMESSIPGVRPGKATTDYLQKTLNRLTFLGALF 356 Query: 290 LILISGLPMMVVLV 303 L I+ +P ++ + Sbjct: 357 LAFIAVVPSIIENI 370 >sp|Q9ZCS5|SECY_RICPR Preprotein translocase subunit secY OS=Rickettsia prowazekii GN=secY PE=3 SV=1 Length = 433 Score = 237 bits (605), Expect = 9e-62, Method: Composition-based stats. Identities = 65/344 (18%), Positives = 156/344 (45%), Gaps = 25/344 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++ + P++++ +I Q+ +V+ + L L E + +R LT+++A Q+ Sbjct: 70 SIFALAIMPYITASIIIQLMSVAYKP-LENLKKEGETGKRKINQLSRYLTVLLASFQAYG 128 Query: 55 LVLNL-----PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMA 108 + L+L + V + L+ GT L+WL + G+G +I+ Sbjct: 129 VALSLESMVTNTGPVVILAGFFFRVTTVITLVVGTILLMWLGEQITQRGIGNGTSLIIFI 188 Query: 109 SMIAYIPQDIWNSIQELKISSLWLAL---MLVFSLVFLYLAVTVERSKYRIPVNKINIH- 164 +I+ +P I + + + +L + + + ++ + + + E+++ ++ V Sbjct: 189 GIISGVPSAIISMFELSRKGALSPLIAITVCIGVVLLIAIIIFFEKAQRKLLVQYPKRQV 248 Query: 165 ---NRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSM 221 + +++ ++LN +G +P ++A +++ P + + L Sbjct: 249 GNKIYGGEATHMPLKLNTSGVIPPIFASSILLFPTTLASF---SNSNSDTMSMLTYYLGH 305 Query: 222 GSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTY 281 G P + +LY++ I + + I + ++ A ++K G YI PG T Y + ++T Sbjct: 306 GKPVYILLYVVLIMFFSFFYTAIVFNSEETANNLRKYGAYIPGKRPGKNTSDYFDYILTR 365 Query: 282 FALVGAFYLILISGLPMMVVLVDIRYLRLSMIPGIFMIFIGMVF 325 ++G YL +I +P ++ ++ + LS+ F+I + +V Sbjct: 366 LTVIGGIYLSVICVIPELL--MNKYVISLSLGGTSFLIVVNVVL 407 >sp|P28539|SECY_CHLTR Preprotein translocase subunit secY OS=Chlamydia trachomatis GN=secY PE=3 SV=3 Length = 457 Score = 236 bits (604), Expect = 1e-61, Method: Composition-based stats. Identities = 71/336 (21%), Positives = 146/336 (43%), Gaps = 36/336 (10%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRML------LTLVIALIQSV- 53 ++ ++G+ P++S+ +I Q+ V ++ + +R L TLV+A +QS+ Sbjct: 73 TVIALGVVPYISASIIVQLLVVFMPTLQREMRESPDQGKRKLGRMTRLFTLVLACVQSLL 132 Query: 54 -------------ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLG 100 +VL L + +V++ GT L+W+ + + G+G Sbjct: 133 FAKFALRMNLVVPGIVLPAMLSLKLFGVPWVFYLTTVVVMITGTLLLMWVGEQISDKGIG 192 Query: 101 GSIMIVMA-SMIAYIPQDIWNSIQELKISS--------LWLALMLVFSLVFLYLAVTVER 151 I +++ ++A P + + +L + S + L ++ + L V + Sbjct: 193 NGISLIITLGILASFPSVLGSIFNKLNLGSQDPSEFGIVSLLILCAVFVFVLMATVLIIE 252 Query: 152 SKYRIPVNKINI----HNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQP 207 +IPV SYL +++N AG +P+++A +L+ P + Sbjct: 253 GMRKIPVQHARRIIGRREVVGGGSYLPLKVNYAGVIPVIFASSLLMFPATIGQFL---SS 309 Query: 208 ENQLIEQWIEALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYP 267 E+ +++ LS GS A+ I Y+L I + +QIA M+K+G +I + Sbjct: 310 ESSWLKRIATMLSPGSVAYSIFYVLLIIFFTYFWTATQFRPEQIASEMKKNGAFIPGIRQ 369 Query: 268 GGATRRYINGLVTYFALVGAFYLILISGLPMMVVLV 303 G T+ Y+ + L+GA +L +++ LP ++ + Sbjct: 370 GKPTQTYLEYTMNRVTLLGAVFLAVVAILPSILGRI 405 >sp|Q1XDJ1|SECY_PORYE Preprotein translocase subunit secY OS=Porphyra yezoensis GN=secY PE=3 SV=1 Length = 411 Score = 236 bits (604), Expect = 1e-61, Method: Composition-based stats. Identities = 74/323 (22%), Positives = 148/323 (45%), Gaps = 22/323 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR-------MLLTLVIALIQSV 53 +F++G+ P+++S ++ Q+ L KL E E R L L A +QS Sbjct: 62 GIFALGIVPYINSSIVMQLLT-KIVPNLEKLQKEEGELGRQKITQITRYLALGWATLQSG 120 Query: 54 ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIA 112 A+ + ++ + L L AG+ ++WL++L G+G +++ ++++ Sbjct: 121 AISIW--VKPYVFNWNFAFVCESVLALTAGSMIIMWLSELITEKGIGNGASLLIFQNIVS 178 Query: 113 YIPQDIWNSIQELKI--SSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKK- 169 +P++ S + +SL L + L+ + + + V+ RI + + Sbjct: 179 GLPKNFTQSFFDASYSNASLKFGLFIAIFLLMIIITICVQEGTRRIKIISARQLGKSSIL 238 Query: 170 --YSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227 SYL ++LN G MPI++A +++P Y II +N+ + Q + + Sbjct: 239 DPNSYLPLKLNQGGVMPIVFASASMALPSYLTQII-----QNKTLLQILYLFCPNGSLYL 293 Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287 +LY I + + I ++ + IA ++K G I N+ PG AT Y+ ++ +GA Sbjct: 294 LLYCALILFFSYFYTSIVMNPEDIAINLKKMGASIPNIRPGQATIDYLQVILNRLTFLGA 353 Query: 288 FYLILISGLPMMVVLV-DIRYLR 309 +L ++ +P ++ V I+ LR Sbjct: 354 SFLFTVALIPFIIEKVTQIQNLR 376 >sp|P28527|SECY_GUITH Preprotein translocase subunit secY OS=Guillardia theta GN=secY PE=3 SV=2 Length = 420 Score = 233 bits (594), Expect = 2e-60, Method: Composition-based stats. Identities = 63/316 (19%), Positives = 143/316 (45%), Gaps = 18/316 (5%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR-------MLLTLVIALIQSV 53 +F++G+ P++++ +I Q A + L KL E E R + LV ALIQS+ Sbjct: 68 GVFALGIVPYINASIIVQ-LATNSIPSLEKLQKEEGELGRQKIVQLTRYVALVWALIQSI 126 Query: 54 ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIA 112 + ++ + +L L G+ ++W ++ G+G +++ ++I+ Sbjct: 127 GVSFW--VRPYVFNWDLNFVFAMSLTLTIGSMLIMWFSEQITEKGIGNGPSLLIFINIIS 184 Query: 113 YIPQDIWNSIQELKISSLWLALMLVFSLV--FLYLAVTVERSKYRIPVNKINIHNRF--- 167 +P+ + + IQ +++ L + ++ + + + ++ RIP+ + Sbjct: 185 GLPKLLQSQIQSTRLNIQALDIFVLVFIFSVMIIGIIFIQEGIKRIPIISARQLGKGQMD 244 Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWF 227 K SYL ++LN +G MPI++A ++ +P Y ++ Q + + S + Sbjct: 245 NKTSYLPLKLNQSGVMPIIFASAVLVLPAYLAQLVSNEQLRT--VLHLFDGTSNNKLLYL 302 Query: 228 ILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGA 287 + Y I + + + ++ + +++ ++K I V PG AT Y+ + +GA Sbjct: 303 LFYFTLILFFSYFYTSLILNPNDVSKNLKKMESSIYGVRPGKATTEYLQKTLNRLTFLGA 362 Query: 288 FYLILISGLPMMVVLV 303 +L I+ +P ++ + Sbjct: 363 LFLAFIAIVPNIIETL 378 >sp|Q89A85|SECY_BUCBP Preprotein translocase subunit secY OS=Buchnera aphidicola subsp. Baizongia pistaciae GN=secY PE=3 SV=1 Length = 441 Score = 231 bits (591), Expect = 3e-60, Method: Composition-based stats. Identities = 68/326 (20%), Positives = 152/326 (46%), Gaps = 21/326 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++SS +I Q+ + ++ + ++ R +TL++A +QS Sbjct: 77 SIFALGIMPFISSSIIVQILTLIH-PKFIEMKKDGEQGRHRINKYIRYITLILAALQSFG 135 Query: 55 LVLNLPLQE----AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASM 110 + ++LP + + + L+ GT FL+WL +L G+G I I++ S Sbjct: 136 MSISLPNIPGLKDVIIDPSISFYGIAIISLITGTIFLMWLGELITEKGIGNGISIIIFSG 195 Query: 111 -IAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYL---AVTVERSKYRIPVNKINI--- 163 ++ +P N++++++ SL + L +V + V +ERS+ +I ++ Sbjct: 196 IVSGLPSSFLNTVEKVRQGSLHVLLFCFIGIVIFLVTLLVVYIERSQRKITISYAKRNLG 255 Query: 164 -HNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222 ++L ++LN +G +P ++A ++V P + + + L Sbjct: 256 HRTYSMNSTHLPLKLNMSGVIPAIFASSIVLFPATIASWFGNRD-HFKWLVDIVFYLQPT 314 Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282 P + + Y+ I + + + + A+ ++KSG +I + PG T +YIN ++ Sbjct: 315 KPLYILTYITAIIFFCFFYTGLAFNPRETADNLKKSGAFILGIRPGEKTAQYINKIMLRL 374 Query: 283 ALVGAFYLILISGLPMMV-VLVDIRY 307 +G+ Y+ I +P ++ +D+ + Sbjct: 375 TFLGSMYMAFICLVPELMRFFMDVPF 400 >sp|P57571|SECY_BUCAI Preprotein translocase subunit secY OS=Buchnera aphidicola subsp. Acyrthosiphon pisum GN=secY PE=3 SV=1 Length = 437 Score = 231 bits (589), Expect = 6e-60, Method: Composition-based stats. Identities = 75/326 (23%), Positives = 157/326 (48%), Gaps = 23/326 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLVIALIQSVA 54 S+F++G+ P++S+ +I Q+ + LS++ E + TL++AL+QS+ Sbjct: 76 SIFALGIMPYISASIIIQLLTLVY-PTLSEIKKEGESGRHRINQYTRYATLILALVQSIG 134 Query: 55 LVLNLPL----QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASM 110 + + LP + ++ + L+ T FL+WL +L G+G I I++ Sbjct: 135 IAMTLPNIAGIRSIIINTDFYFYLIAIISLVTSTMFLMWLGELITEYGIGNGISIIIFIG 194 Query: 111 IAY-IPQDIWNSIQELKISSLWLALMLVFSLV---FLYLAVTVERSKYRIPVNKINIHNR 166 I +P I N+I++ + L + L L L+ ++L V +ER + +I V+ Sbjct: 195 IIAGLPSAIGNTIEKTRQGDLHILLFLFILLLIFSVIFLVVFMERGQRKIVVHYAQRQQG 254 Query: 167 FKKY----SYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222 + Y ++L +++N AG +P ++A ++V P + + ++ + + + L Sbjct: 255 RRIYETPSTHLPLKINMAGVIPAIFASSIVLFPATIISW---CKVNHEWLTKILFYLQPN 311 Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282 + ILY+ I + + + + A+ ++KSG +I + PG T +YIN ++ Sbjct: 312 QFLYLILYISAIVFFCFFYTGLVFNPRETADNLKKSGAFISGIRPGEQTAKYINKIMLRL 371 Query: 283 ALVGAFYLILISGLPMMV-VLVDIRY 307 LVG+ Y+ I +P + +++ + Sbjct: 372 TLVGSLYITFICLIPEFMRSAMNVPF 397 >sp|Q8K969|SECY_BUCAP Preprotein translocase subunit secY OS=Buchnera aphidicola subsp. Schizaphis graminum GN=secY PE=3 SV=1 Length = 439 Score = 226 bits (576), Expect = 2e-58, Method: Composition-based stats. Identities = 76/326 (23%), Positives = 156/326 (47%), Gaps = 21/326 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++SS +I Q+ + LS++ E + R TLV+AL QS+ Sbjct: 76 SIFALGIMPYISSSIIIQLLTLV-IPSLSEIKKEGEVGRTKINQYTRYTTLVLALFQSIG 134 Query: 55 LVLNLP----LQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMAS 109 +V +LP + + ++L+ GT FL+WL +L G +I+ Sbjct: 135 IVTSLPKISGMNQIIIHPDFYFYFTAIIILVTGTMFLMWLGELITECGIGNGISIIIFIG 194 Query: 110 MIAYIPQDIWNSIQELKISSLWLALMLVFSLVFL---YLAVTVERSKYRIPVNKINIHNR 166 +IA +P I ++I++ + L + L L ++ +L V +ERS+ +I ++ Sbjct: 195 IIAGLPSAIVHTIEQTRQGDLHILLFLCVLILIFSVVFLVVFIERSQRKIIIHYAQRQKG 254 Query: 167 FK----KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222 + + ++L +++N AG +P ++A ++V P + + L++ Sbjct: 255 RRIYSTQSTHLPLKINMAGVIPAIFASSVVLFPVTIISWFGID-RKCYLLKTIFFYFQPN 313 Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282 P + ILY+ +I + + + + A+ ++KSG +I + PG T +YIN ++ Sbjct: 314 QPLYLILYVFSIIFFCFFYTGLVFNPRETADNLKKSGGFISGIRPGEQTAKYINKIMIRL 373 Query: 283 ALVGAFYLILISGLPMMV-VLVDIRY 307 L G+ Y+ I +P + +++ + Sbjct: 374 TLFGSLYIAFICLIPEFMRSAMNVPF 399 >sp|Q59548|SECY_MYCPN Preprotein translocase subunit secY OS=Mycoplasma pneumoniae GN=secY PE=3 SV=1 Length = 477 Score = 224 bits (571), Expect = 9e-58, Method: Composition-based stats. Identities = 70/326 (21%), Positives = 157/326 (48%), Gaps = 29/326 (8%) Query: 3 FSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRML------LTLVIALIQSVALV 56 F+VG+SP++S+ ++ Q+ + LSKL + RR + +TL AL+QS A++ Sbjct: 85 FAVGISPYISAQIVMQLLSTDLIPPLSKLVNSGEVGRRKIEMITRIITLPFALVQSFAVI 144 Query: 57 LNLPLQE------AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMAS 109 + + + + + AGTY ++L D + G+G I +++++ Sbjct: 145 QIATNSGGGSSPITLKNNGSDFVAFYIIAMTAGTYLSVFLGDTISKKGIGNGITLLILSG 204 Query: 110 MIAYIPQDIWN----------SIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVN 159 ++A +P+ +I +++ + + + L+ + + +IP+ Sbjct: 205 ILAQLPEGFIAAYSVLSGVVVTINATLTTAISFFIYFMAFVTLLFATTFITQETRKIPIQ 264 Query: 160 KINIHNRFKKY--SYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIE 217 + + YL I++N AG +P+++A +++SIP QP+ + + Sbjct: 265 QSGQGLVTESSALPYLPIKVNSAGVIPVIFASSIMSIPVTIAQF----QPQTESRWFVED 320 Query: 218 ALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277 LS+ P +LY + + + + +++I I+ +++A+ +KSG +I + PG T ++I Sbjct: 321 YLSLSKPTGIVLYGILVILFSFFYSYIQINPERLAKNFEKSGRFIPGIRPGKDTEKHIAR 380 Query: 278 LVTYFALVGAFYLILISGLPMMVVLV 303 ++ +GA +L +I+ +P +V + Sbjct: 381 VLVRINFIGAPFLTVIAIIPYIVSAL 406 >sp|Q9PJN1|SECY_CHLMU Preprotein translocase subunit secY OS=Chlamydia muridarum GN=secY PE=3 SV=1 Length = 457 Score = 222 bits (567), Expect = 2e-57, Method: Composition-based stats. Identities = 69/336 (20%), Positives = 144/336 (42%), Gaps = 36/336 (10%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRML------LTLVIALIQSV- 53 ++ ++G+ P++S+ +I Q+ V ++ + +R L TL++A +QS+ Sbjct: 73 TVIALGVVPYISASIIVQLLVVFMPTLQREMREAPDQGKRKLGRMTRLFTLLLACVQSLL 132 Query: 54 -------------ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLG 100 +VL L + +V+ GT L+W+ + + G+G Sbjct: 133 FAKFALRMNLVVPGIVLPAMLSLKLFGIPCVFYLTTVVVMTTGTLLLMWIGEQISDKGIG 192 Query: 101 GSIMIVMA-SMIAYIPQDIWNSIQELKISS--------LWLALMLVFSLVFLYLAVTVER 151 I +++ M+A P + + +L + S + L ++ + L V + Sbjct: 193 NGISLIITLGMLASFPSVLGSIFNKLNLGSQDPSEFGIVSLLVLCAVFVFVLMATVLIIE 252 Query: 152 SKYRIPVNKINI----HNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQP 207 ++PV SYL +++N AG +P+++A +L+ P + Sbjct: 253 GVRKVPVQHARRIIGRREVLGGGSYLPLKVNYAGVIPVIFASSLLMFPATIGQFL---SS 309 Query: 208 ENQLIEQWIEALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYP 267 E+ +++ LS GS + I Y+L I + +QIA M+K+G +I + Sbjct: 310 ESSWLKRIATMLSPGSVVYSIFYVLLIIFFTYFWTATQFRPEQIASEMKKNGAFIPGIRQ 369 Query: 268 GGATRRYINGLVTYFALVGAFYLILISGLPMMVVLV 303 G T+ Y+ + L+GA +L +++ LP ++ + Sbjct: 370 GKPTQSYLEYTMNRVTLLGAVFLAVVAILPSILGRI 405 >sp|P33108|SECY_MICLU Preprotein translocase subunit secY OS=Micrococcus luteus GN=secY PE=3 SV=1 Length = 436 Score = 222 bits (566), Expect = 3e-57, Method: Composition-based stats. Identities = 65/326 (19%), Positives = 132/326 (40%), Gaps = 27/326 (8%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER------RRMLLTLV-------- 46 S+F++G+ P++++ +I Q+ V +L E + LTL Sbjct: 73 SVFALGIMPYITASIIVQLLRVV-IPRFEQLHQERRRGQATLTQYTRYLTLALALLQATT 131 Query: 47 IALIQSVALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMI 105 +A + +L L ++L + L G ++W + G+G ++ Sbjct: 132 MASLARTGALLGCSL-PLLRDGSILTVLLVVIALTTGCLIVMWFGERITENGVGNGMSLL 190 Query: 106 VMASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHN 165 + S+ A P + +Q A+++ L+ + V VE S+ RIPV Sbjct: 191 IFTSIAAGFPAGLGQVVQT--QGWRVFAIVMGIGLLTMLAIVFVEESQRRIPVQYAKRQI 248 Query: 166 R----FKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQ--LIEQWIEAL 219 +Y+ +++N A +P+++A +++ +P + I Sbjct: 249 GSRTVGGSSTYIPVKVNMANVIPVIFASSVLMLPGILIQFNTPQDGSAPAPWITWLSRYF 308 Query: 220 -SMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGL 278 S P + LY L I + I + +I++ M++ G +I P G T RY+ + Sbjct: 309 GSGDHPVYMALYFLLIIGFTYFYVSITFNPVEISDNMKRYGGFIPASAPAGPTERYLQYV 368 Query: 279 VTYFAL-VGAFYLILISGLPMMVVLV 303 ++ VGA YL +++ +P++ V Sbjct: 369 ISRITFVVGALYLGIVAMIPLIAFAV 394 >sp|O52351|SECY_MYCGA Preprotein translocase subunit secY OS=Mycoplasma gallisepticum GN=secY PE=3 SV=2 Length = 498 Score = 221 bits (563), Expect = 7e-57, Method: Composition-based stats. Identities = 82/324 (25%), Positives = 156/324 (48%), Gaps = 27/324 (8%) Query: 3 FSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVALV 56 F+VG+SP++S+ +I Q+ + LSKL + RR +TL A++Q+ A++ Sbjct: 82 FAVGISPYISAQIIMQLLSTDLIPPLSKLAKSGELGRRRIELITRFVTLPFAVVQAFAII 141 Query: 57 LNLPLQEAAG----VDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMASMI 111 + Q + + AGTY I++ D+ + G+G I +++++ ++ Sbjct: 142 ALINNQRNGAIRFENGGILHQAFYIVTMTAGTYIGIFIGDIISKKGVGNGITLLILSGIL 201 Query: 112 AYIPQDIWNSI----------QELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKI 161 A +P + S++ +L + LV L V S RIP+ + Sbjct: 202 ARLPDGFIVMYRVLGGVIISTNPILTSAINFSLYFLAFLVLLLAISFVNSSTRRIPIQQT 261 Query: 162 NIHNRFK--KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEAL 219 K YL I+LN AG +P+++A +++SIP QP+++ + L Sbjct: 262 GEGMVLGNEKLPYLPIKLNAAGVIPVIFASSIMSIPITIAEF----QPQSEARWFVEDYL 317 Query: 220 SMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLV 279 S+ +P LY++ I I +++I I+ +Q+AE KS ++I V PG T ++I ++ Sbjct: 318 SLRTPVGISLYVILIIIFTFFYSYIQINPEQLAENFNKSHKFIPGVRPGLDTEKHITKVL 377 Query: 280 TYFALVGAFYLILISGLPMMVVLV 303 +GA +L +++ +P ++ LV Sbjct: 378 MRINFIGAPFLAIVAVIPYIISLV 401 >sp|P10250|SECY_MYCCT Preprotein translocase subunit secY OS=Mycoplasma capricolum subsp. capricolum (strain California kid / ATCC 27343 / NCTC 10154) GN=secY PE=3 SV=2 Length = 482 Score = 219 bits (558), Expect = 2e-56, Method: Composition-based stats. Identities = 70/332 (21%), Positives = 157/332 (47%), Gaps = 29/332 (8%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRML------LTLVIALIQSVA 54 S+ ++G+SP++++ +I Q+ + L++ + R+ L + + AL+Q+ A Sbjct: 93 SILALGVSPYITASIIVQLLSTDVIPVLTRWSKSGERGRKKLDKLTKIIMIPFALMQAEA 152 Query: 55 LVLNLPLQEAAGVD---------MTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMI 105 + L Q +L LV++ G++F++W+ D G+G I I Sbjct: 153 TIFTLSSQGLIIPGWDNTNAIANSAFYYILIPLVMLGGSFFMLWIADQITIKGIGNGISI 212 Query: 106 VMASMIAY-IPQDIWNSIQE-----------LKISSLWLALMLVFSLVFLYLAVTVERSK 153 V+ I +P ++ ++ + L + + L+ + V + ++ Sbjct: 213 VIFIGIIISMPSNLKSTFEYWVSNSGEEANIFFSGLLNFMIYISVFLLVILSVVIMNEAE 272 Query: 154 YRIPVNKINI--HNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQL 211 +IP+ + + + YL ++LN AG +P+++A ++S P II + P++ Sbjct: 273 RKIPIQQTGSGLTDSSEHTPYLPLKLNNAGVIPVIFASAIISTPITISQIIEAVNPDSGF 332 Query: 212 IEQWIEALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGAT 271 + + LS + ++ + I + ++ + I+ ++IAE QKSG +I + PG T Sbjct: 333 VIFTRDYLSFNTWWGISIFGILIVLFTFLYSQVQINPEKIAENFQKSGTFIPGIKPGKDT 392 Query: 272 RRYINGLVTYFALVGAFYLILISGLPMMVVLV 303 +Y+ G++ ++VG+ +L +I+ LP ++ + Sbjct: 393 TKYLTGIINRLSVVGSVFLAIIALLPYVISKL 424 >sp|P47416|SECY_MYCGE Preprotein translocase subunit secY OS=Mycoplasma genitalium GN=secY PE=3 SV=1 Length = 475 Score = 218 bits (557), Expect = 3e-56, Method: Composition-based stats. Identities = 73/325 (22%), Positives = 158/325 (48%), Gaps = 29/325 (8%) Query: 3 FSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRML------LTLVIALIQSVALV 56 F+VG+SP++S+ +I Q+ + LSKL + RR + +TL AL+Q+ A++ Sbjct: 83 FAVGISPYISAQIIMQLLSTDLIPPLSKLVNSGEVGRRKIEMITRIITLPFALVQAFAVI 142 Query: 57 LNLPLQEAAG------VDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMAS 109 + + + + AGTY ++L D + G+G I +++++ Sbjct: 143 QIATNAGTGSSPISLANSGSEFIAFYIIAMTAGTYMAVFLGDTISKKGVGNGITLLILSG 202 Query: 110 MIAYIPQDIWNSIQELK----------ISSLWLALMLVFSLVFLYLAVTVERSKYRIPVN 159 +++ +PQ + L +++ + + LV L+ + ++ +IP+ Sbjct: 203 ILSQLPQGFIAAYNVLSGIVITLTPQLTAAISFFIYFLAFLVLLFATTFITQATRKIPIQ 262 Query: 160 KINIH--NRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIE 217 + + K YL I++N AG +P+++A +++SIP QP+ + + Sbjct: 263 QSGQGLVSEVKTLPYLPIKVNAAGVIPVIFASSIMSIPVTIAQF----QPQTESRWFVED 318 Query: 218 ALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYING 277 LS+ +P LY + + + + +++I I+ +++A+ +KSG +I + PG T ++I Sbjct: 319 YLSLSTPVGIFLYAVLVILFSFFYSYIQINPERLAKNFEKSGRFIPGIRPGNDTEKHIAR 378 Query: 278 LVTYFALVGAFYLILISGLPMMVVL 302 ++ +GA +L +I+ +P +V Sbjct: 379 VLIRINFIGAPFLTVIAIIPYIVSY 403 >sp|Q9Z7S5|SECY_CHLPN Preprotein translocase subunit secY OS=Chlamydia pneumoniae GN=secY PE=3 SV=1 Length = 457 Score = 217 bits (553), Expect = 9e-56, Method: Composition-based stats. Identities = 68/336 (20%), Positives = 146/336 (43%), Gaps = 36/336 (10%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSV- 53 ++ ++G+ P++S+ +I Q+F V ++ + +R L T+ +A+IQS+ Sbjct: 73 TVIALGVVPYISASIIVQLFLVFMPALQREMRESSDQGKRRIGRLTRLFTVALAVIQSLL 132 Query: 54 -------------ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLG 100 +VL L + +V+ GT L+W+ + + G+G Sbjct: 133 FAKFALRMNLTIPGIVLPTLLSSKLFGVPWIFYITTVVVMTTGTLLLMWIGEQISDKGIG 192 Query: 101 GSIMIVMA-SMIAYIPQDIWNSIQELKISS--------LWLALMLVFSLVFLYLAVTVER 151 I +++A +++ P + + + +L + S + + ++ + + L + + Sbjct: 193 NGISLIIALGILSSFPSVLGSIVNKLNLGSQDSSDLGLISILILALVFVFVLITTILIIE 252 Query: 152 SKYRIPVNKINI----HNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQP 207 +IPV SYL +++N AG +P+++A +L+ P I Sbjct: 253 GVRKIPVQYARRVIGRREVPGGGSYLPLKVNYAGVIPVIFASSLLMFPATIGQFI---AS 309 Query: 208 ENQLIEQWIEALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYP 267 E+ +++ L+ GS + I Y+L I + +QIA M+K+ +I + Sbjct: 310 ESSWMKRIAALLAPGSLVYSICYVLLIIFFTYFWTATQFHPEQIASEMKKNNAFIPGIRQ 369 Query: 268 GGATRRYINGLVTYFALVGAFYLILISGLPMMVVLV 303 G T+ Y+ + L+GA +L I+ LP ++ + Sbjct: 370 GKPTQHYLEYTMNRVTLLGALFLAAIAILPSLLGCL 405 >sp|O25879|SECY_HELPY Preprotein translocase subunit secY OS=Helicobacter pylori GN=secY PE=3 SV=1 Length = 420 Score = 214 bits (546), Expect = 6e-55, Method: Composition-based stats. Identities = 75/326 (23%), Positives = 159/326 (48%), Gaps = 24/326 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR-----MLLTLVIALIQSVAL 55 S+ S+G+ P+++S +I ++ + + L+K+ E ++ LT++I LIQ+V++ Sbjct: 62 SIISLGIMPYITSSIIMELLS-ATFPNLAKMKKERDGMQKYMQIVRYLTILITLIQAVSV 120 Query: 56 VLN-----LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMAS 109 + A +DM M++ ++ GT L+W+ + G+G +I+ A Sbjct: 121 SVGLRSISGGANGAIMIDMQVFMIVSAFSMLTGTMLLMWIGEQITQRGVGNGISLIIFAG 180 Query: 110 MIAYIPQDIWNSIQELKISSLWLA---LMLVFSLVFLYLAVTVERSKYRIPVNKIN---- 162 +++ IP I + + + + +++ L ++ + VE ++ RIP++ Sbjct: 181 IVSGIPSAISGTFNLVNTGVINILMLIGIVLIVLATIFAIIYVELAERRIPISYARKVVM 240 Query: 163 IHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222 + + +Y+ I+LN +G +P ++A L+ P L N+ ++ + LS Sbjct: 241 QNQNKRIMNYIPIKLNLSGVIPPIFASALLVFPSTILQ----QATSNKTLQAVADFLSPQ 296 Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282 A+ IL L I A ++ I + IA+ ++++G YI + PG T ++N + + Sbjct: 297 GYAYNILMFLLIIFFAYFYSSIVFNSKDIADNLRRNGGYIPGLRPGEGTSSFLNSVASKL 356 Query: 283 ALVGAFYLILISGLPMMVV-LVDIRY 307 L G+ YL LIS +P ++V + + + Sbjct: 357 TLWGSLYLALISTVPWILVKAMGVPF 382 >sp|Q9ZJS9|SECY_HELPJ Preprotein translocase subunit secY OS=Helicobacter pylori J99 GN=secY PE=3 SV=1 Length = 420 Score = 214 bits (546), Expect = 7e-55, Method: Composition-based stats. Identities = 75/326 (23%), Positives = 159/326 (48%), Gaps = 24/326 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR-----MLLTLVIALIQSVAL 55 S+ S+G+ P+++S +I ++ + + L+K+ E ++ LT++I LIQ+V++ Sbjct: 62 SIISLGIMPYITSSIIMELLS-ATFPNLAKMKKERDGMQKYMQIVRYLTILITLIQAVSV 120 Query: 56 VLN-----LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMAS 109 + A +DM M++ ++ GT L+W+ + G+G +I+ A Sbjct: 121 SVGLRSISGGANGAIMIDMQVFMIVSAFSMLTGTMLLMWIGEQITQRGVGNGISLIIFAG 180 Query: 110 MIAYIPQDIWNSIQELKISSLWLA---LMLVFSLVFLYLAVTVERSKYRIPVNKIN---- 162 +++ IP I + + + + +++ L ++ + VE ++ RIP++ Sbjct: 181 IVSGIPSAISGTFNLVNTGVINILMLIGIVLIVLATIFAIIYVELAERRIPISYARKVVM 240 Query: 163 IHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222 + + +Y+ I+LN +G +P ++A L+ P L N+ ++ + LS Sbjct: 241 QNQNKRIMNYIPIKLNLSGVIPPIFASALLVFPSTILQ----QATSNKTLQAIADFLSPQ 296 Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYF 282 A+ IL L I A ++ I + IA+ ++++G YI + PG T ++N + + Sbjct: 297 GYAYNILMFLLIIFFAYFYSSIVFNSKDIADNLRRNGGYIPGLRPGEGTSSFLNAVASKL 356 Query: 283 ALVGAFYLILISGLPMMVV-LVDIRY 307 L G+ YL LIS +P ++V + + + Sbjct: 357 TLWGSLYLALISTVPWILVKAMGVPF 382 >sp|O59442|SECY_PYRHO Preprotein translocase subunit secY OS=Pyrococcus horikoshii GN=secY PE=3 SV=1 Length = 468 Score = 211 bits (538), Expect = 6e-54, Method: Composition-based stats. Identities = 59/364 (16%), Positives = 127/364 (34%), Gaps = 64/364 (17%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR---MLLTLVIALIQSVALVL 57 S+ ++G+ P +++ +I Q+ S+ + L E + + + ++ + ++ VL Sbjct: 72 SILTLGIGPIVTAGIILQLLVGSELIRLDLANPEDRRFYQALQRVFSVFMCFFEAAIWVL 131 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMA--------- 108 TI L + L G LI L +L + G+G I + +A Sbjct: 132 GGAFGRVGVDVTYTIATLMIIQLALGGIILIVLDELVSKWGIGSGISLFIAAGVSQRILT 191 Query: 109 -------------------SMIAYIPQDIWNSIQELKISSLWL------ALMLVFSLVFL 143 +++ IP I + + +L+ + + +++ Sbjct: 192 RSLNPLTDPNIIDPLTGKPAIVGAIPYFIQHILDGDLKGALYRGGSAPDMIAVTATIIVF 251 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLII- 202 + V E + IP+ + R + I+ +PI+ L + Q + ++ Sbjct: 252 LVVVYFESMRVEIPLGYRGVTIRGR----YPIKFLYVSNIPIILTFALYANIQLWARVLD 307 Query: 203 --------HFLQPENQLIEQWIEALSMGSPAWF--------ILYLLTIFILALAFAFI-- 244 F I ++ + + I+YL+ I +L F F+ Sbjct: 308 RFGHPWLGRFDPVTGNPIGGFVLYVIPPRNIFTVIDNPVRAIIYLILTIIFSLLFGFLWV 367 Query: 245 ---NISGDQIAERMQKSGEYIENVYPGGAT-RRYINGLVTYFALVGAFYLILISGLPMMV 300 + IA ++Q++G I T R + + Y G+ + LIS L + Sbjct: 368 ELTGLDARTIARQLQRAGLQIPGFRRDPRTLERVLQKYIPYVTFWGSLTVALISVLADFL 427 Query: 301 VLVD 304 + Sbjct: 428 GALG 431 >sp|P49976|SECY_BUCAK Preprotein translocase subunit secY (Fragment) OS=Buchnera aphidicola subsp. Acyrthosiphon kondoi GN=secY PE=3 SV=1 Length = 356 Score = 211 bits (537), Expect = 7e-54, Method: Composition-based stats. Identities = 62/283 (21%), Positives = 124/283 (43%), Gaps = 20/283 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 S+F++G+ P++S+ +I Q+ V L+++ E + RR TLV+A+ QS+ Sbjct: 76 SIFALGIMPYISASIIIQLLTVVH-PALAEVKKEGEAGRRKISQYTRYGTLVLAIFQSIG 134 Query: 55 LVLNLPLQE----AAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAM-GLGGSIMIVMAS 109 + LP + L+ GT FL+WL + G +I+ A Sbjct: 135 IATGLPNMPGMQGLVMNPGFAFYFTAVVSLVTGTMFLMWLGEQITERGIGNGISIIIFAG 194 Query: 110 MIAYIPQDIWNSIQELKISSLW---LALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNR 166 ++A +P + ++I++ + L L L+ V + V +ER + RI VN Sbjct: 195 IVAGLPPAVAHTIEQARQGDLHFLLLLLVAVLVFAVTFFVVFIERGQRRIVVNYAKRQQG 254 Query: 167 FK----KYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMG 222 + + ++L +++N AG +P ++A +++ P N + L G Sbjct: 255 RRVYAAQSTHLPLKVNMAGVIPAIFASSIILFPATIASWFGGGTGWN-WLTTVSLYLQPG 313 Query: 223 SPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENV 265 P + +LY I + + + + A+ ++KSG ++ + Sbjct: 314 QPLYVLLYASAIIFFCFFYTALVFNPRETADNLKKSGAFVPGI 356 >sp|Q870W0|SC61A_NEUCR Protein transport protein SEC61 subunit alpha OS=Neurospora crassa GN=sec-61 PE=3 SV=1 Length = 476 Score = 210 bits (536), Expect = 8e-54, Method: Composition-based stats. Identities = 61/391 (15%), Positives = 131/391 (33%), Gaps = 78/391 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLS---KLPLEVQERRRMLLTLVIALIQSVALVL 57 +L +G++P +SS +++Q+ A + + ++ K E+ + + L +++++ + V Sbjct: 76 TLMELGITPIISSGMVFQLLAGTHMIDVNLDLKADRELYQTAQKLFAVILSIGTATVYVF 135 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGS-IMIVMASMIAYI- 114 + I+ L L L+ +I L +L GLG + + ++ I Sbjct: 136 TGLYGPPS-DLGAGIVFLLILQLVVAGMIVILLDELLQKGYGLGSGISLFIATNICESIM 194 Query: 115 -----PQDI----WNSIQELKISSLWLALM----------------------LVFSLVFL 143 P I + I+ L + L+ +LV Sbjct: 195 WKAFSPTSINTGRGPEYEGAVIALFHLLMTWDNKQRALYEAFYRQNLPNIMNLLATLVVF 254 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203 + ++ + IPV Y IRL MPIM L S +++ Sbjct: 255 AAVIYLQGFRVEIPVKSSRQRGARGSY---PIRLFYTSNMPIMLQSALSSNVFLISQMLY 311 Query: 204 FLQPEN------------------QLIEQWIEALSMGSPA-----------WFILYLLTI 234 EN + + +S +I Y+LT Sbjct: 312 SRFSENLLVRLFGVWEAKEGTAQLSAVSGLVYYMSPPLNFKDALLDPIHTAVYIAYMLTA 371 Query: 235 FILALAFAFINI---SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLI 291 + +I + S +A++++ G + + + + ++ A G + Sbjct: 372 -CAVFSKTWIEVSGSSPRDVAKQLKDQGLVMAGHRE-QSMYKELKRIIPTAAAFGGACIG 429 Query: 292 LISGLPMMVVLVDI---RYLRLSMIPGIFMI 319 +S ++ + L +++I G F I Sbjct: 430 ALSVASDLMGALGSGTGTLLAVTIIYGYFEI 460 >sp|Q9V1V8|SECY_PYRAB Preprotein translocase subunit secY OS=Pyrococcus abyssi GN=secY PE=3 SV=1 Length = 468 Score = 210 bits (536), Expect = 1e-53, Method: Composition-based stats. Identities = 57/364 (15%), Positives = 128/364 (35%), Gaps = 64/364 (17%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR---MLLTLVIALIQSVALVL 57 S+ ++G+ P +++ +I Q+ S+ + L E + + + ++ + +++ VL Sbjct: 72 SILTLGIGPIVTAGIILQLLVGSEIIKLDLANPEDRRFYQALQRVFSVFMCFLEAAIWVL 131 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMA--------- 108 I L L L G LI L +L + G+G I + +A Sbjct: 132 GGAFGRVGVDVTYAIAALMILQLAFGGIILIVLDELVSKWGIGSGISLFIAAGVSQRILT 191 Query: 109 -------------------SMIAYIPQDIWNSIQELKISSLWLALM------LVFSLVFL 143 +++ IP I + ++ +L+ ++ +++ Sbjct: 192 RSLNPLTDPNIIDPLTGKPAIVGAIPYFIQHILKGDLKGALYRGGTAPDMMAVIATIIVF 251 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLII- 202 + V E + IP+ + R + IR +PI+ L + Q + ++ Sbjct: 252 LVVVYFESMRVEIPLGYRGVTIRGR----YPIRFLYVSNIPIILTFALYANIQLWARVLD 307 Query: 203 --------HFLQPENQLIEQWIEALSMGSPAWFIL--------YLLTIFILALAFAFI-- 244 F + ++ + + ++ YL+ I +L F F+ Sbjct: 308 RLGHPWLGTFDPTTGNPVGGFVLYVIPPRSIFTVIDNPVRALVYLILTVISSLIFGFLWV 367 Query: 245 ---NISGDQIAERMQKSGEYIENVYPGGAT-RRYINGLVTYFALVGAFYLILISGLPMMV 300 + IA ++Q++G I T R + + Y G+ + LI+ L + Sbjct: 368 ELTGLDARTIARQLQRAGLQIPGFRRDPRTLERVLQKYIPYVTFWGSLTVALIAVLADFL 427 Query: 301 VLVD 304 + Sbjct: 428 GALG 431 >sp|Q8U019|SECY_PYRFU Preprotein translocase subunit secY OS=Pyrococcus furiosus GN=secY PE=3 SV=1 Length = 468 Score = 210 bits (535), Expect = 1e-53, Method: Composition-based stats. Identities = 59/364 (16%), Positives = 129/364 (35%), Gaps = 64/364 (17%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR---MLLTLVIALIQSVALVL 57 S+ ++G+ P +++ +I Q+ S+ + L E + + + ++ + ++ +L Sbjct: 72 SILTLGIGPIVTAGIILQLLVGSEIIKLDLANPEDRRFYQALQRVFSVFMCFFEAAVWIL 131 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMA--------- 108 I VL L L G LI L +L + G+G I + +A Sbjct: 132 GGAFGRVGVDVTYAIAVLMILQLAMGGIVLIILDELVSKWGIGSGISLFIAAGVSQTILT 191 Query: 109 -------------------SMIAYIPQDIWNSIQELKISSLWL------ALMLVFSLVFL 143 +++ IP I + ++ +++ L +V ++V Sbjct: 192 RSLNPLTDPNIIDPLTGQPAIVGAIPYFIQHILKGDLWGAIYRGGSAPDMLSVVATIVVF 251 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLII- 202 ++ V E + IP+ + R IR +PI+ L + Q + ++ Sbjct: 252 FIVVYFESMRVEIPLGYRGVTVRGS----YPIRFLYVSNIPIILTFALYANIQLWARVLD 307 Query: 203 --------HFLQPENQLIEQWIEALSMGSPAW--------FILYLLTIFILALAFAFI-- 244 F I ++ + + I+YL+ I +L F ++ Sbjct: 308 RLGHPWLGRFDPTTGSPISGFVLYVIPPRNIFSVIDNPVRAIVYLILTVIFSLLFGYLWV 367 Query: 245 ---NISGDQIAERMQKSGEYIENVYPGGAT-RRYINGLVTYFALVGAFYLILISGLPMMV 300 + IA ++Q++G I T + + + Y G+ + LI+ L + Sbjct: 368 ELTGLDARSIARQLQRAGLQIPGFRRDPRTLEKVLQRYIPYVTFWGSLTVALIAVLADFL 427 Query: 301 VLVD 304 + Sbjct: 428 GALG 431 >sp|Q54XK2|SC61A_DICDI Protein transport protein Sec61 subunit alpha OS=Dictyostelium discoideum GN=sec61a PE=3 SV=1 Length = 475 Score = 208 bits (531), Expect = 3e-53, Method: Composition-based stats. Identities = 50/373 (13%), Positives = 127/373 (34%), Gaps = 75/373 (20%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ---ERRRMLLTLVIALIQSVALVL 57 +L +G+SP ++S ++ Q+ A +K + + + + + L ++I + Q VA + Sbjct: 75 TLMELGISPIVTSGMVMQLLAGAKLIEIDQSVKADRDLFSAAQKLFGMLICVGQGVAYIW 134 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGS-IMIVMASMIAYI- 114 + + A + L L L ++ L +L G+G + + ++ I Sbjct: 135 SGSYGDPAVLGFGNC-FLIVLQLFFAGIIVMLLDELLQKGYGIGSGISLFIATNICETIV 193 Query: 115 -----PQDI----WNSIQELKISSLWLALM----------------------LVFSLVFL 143 P + + I+ L L L+ +++ Sbjct: 194 WKTFSPTTVSVGKGTEFEGAVIALFHLLLTRNDKVRALKEAFYRQNLPNITNLLATVLIF 253 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203 + + + + +PV + + Y I+L +PI+ LVS + +++ Sbjct: 254 MVVIYFQGFRVDLPVKSTRVSGQQGTY---PIKLFYTSNIPIILQSALVSNLYFISQLLY 310 Query: 204 FLQPEN------------------QLIEQWIEALS-----------MGSPAWFILYLLTI 234 P+N + +S ++I ++LT Sbjct: 311 RRFPDNILVNLFGAWRTSEYSQQMIPVSGLTYYISSPNNMSAVLADPFHALFYITFMLTS 370 Query: 235 FILALAFAFINI---SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLI 291 L + +I + S +A++++ ++ + + +N + A G + Sbjct: 371 CAL-FSKVWIEVSGSSARDVAKQLKDQQMTMKGHR-DTSVIKELNRYIPTAAAFGGLCIG 428 Query: 292 LISGLPMMVVLVD 304 ++ + + + Sbjct: 429 ALTVVADFMGAIG 441 >sp|P49461|SECY_ODOSI Preprotein translocase subunit secY OS=Odontella sinensis GN=secY PE=3 SV=1 Length = 425 Score = 205 bits (521), Expect = 5e-52, Method: Composition-based stats. Identities = 72/323 (22%), Positives = 142/323 (43%), Gaps = 25/323 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM-------LLTLVIALIQSV 53 LF++ + P++++ +I Q+ VS GLSKL E R LLTL +LIQS Sbjct: 66 GLFTLNIFPYINASIIMQLL-VSLLPGLSKLQKEGGAEARRSINSLTRLLTLGWSLIQST 124 Query: 54 ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIA 112 ++ L + A + + L G ++WL+++ GLG +++ ++++ Sbjct: 125 SVAFYL--KRALFEWNLVLAFEIVIWLTTGAMIVLWLSEIITEYGLGNGPSLLIYTNIVS 182 Query: 113 YIPQDIWNSI--QELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI------- 163 +P + I K+ L V LY V ++ ++ + Sbjct: 183 SLPGFVKQVITESSGKVPIGSWLLSGFVLFVALYGIVLLQEGMRKVYLISSKQLNQTSLP 242 Query: 164 ---HNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALS 220 + + Y+ +R N AG MPI+ ++ IP F+ + L+ LI + S Sbjct: 243 FSGSSNLESGYYIPLRFNQAGVMPIILTTAVLVIP-TFIYNLGLLRILTPLITLPVFVKS 301 Query: 221 MGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVT 280 +++ Y + I + +L ++ I ++ +++ +QK I + PG T Y+ ++ Sbjct: 302 Y-KIIYWVSYFVLILLFSLFYSTIVVNPKDLSDELQKMAVSIPGIRPGVETTFYLKQVMK 360 Query: 281 YFALVGAFYLILISGLPMMVVLV 303 L+GA L L++ LP ++ + Sbjct: 361 RVTLLGAIMLALLATLPNIIQAI 383 >sp|O51451|SECY_BORBU Preprotein translocase subunit secY OS=Borrelia burgdorferi GN=secY PE=3 SV=1 Length = 434 Score = 204 bits (519), Expect = 8e-52, Method: Composition-based stats. Identities = 59/314 (18%), Positives = 144/314 (45%), Gaps = 15/314 (4%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQE----RRRMLLTLVIALIQSVALV 56 S+F + + P++S+ +I Q+ S + + LT+V A++Q A Sbjct: 72 SIFMLSIGPYISASIIVQLLVYSFPSLKKMQEGDGGRQKTKKYTKYLTIVAAVVQGYATS 131 Query: 57 LNL-PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI 114 L + A + + + L + GT+ L+W + G+G +I+ + ++ + Sbjct: 132 LYAKGIPGAVTIPFYRYIFVAILTVTTGTFILLWFGEQINQRGVGNGTSLIIFSGIVVRL 191 Query: 115 PQDIWNSIQEL-----KISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKK 169 ++N Q + ++ +++ L++ ++ + L + +++ RI ++ ++ Sbjct: 192 QAALFNLFQSMQDPSQNVNPVFVILIISIFILVVILIIYEYKAQMRIAIHYARANSNNTV 251 Query: 170 YSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWFIL 229 SYL I+LNP+G +P+++A L+++P L I+ + + Q + L + L Sbjct: 252 SSYLPIKLNPSGVLPVIFASVLITLP---LQILSGFAETSSIARQILSYLRPNGFYYTFL 308 Query: 230 YLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFY 289 ++ I ++ I +S I+ ++K+G I + +Y++ ++ G+ + Sbjct: 309 NVILIIGFTYFYSKIQLSPKDISNNIRKNGGTIPGIKSDE-MEKYLDEIMNKTLFSGSIF 367 Query: 290 LILISGLPMMVVLV 303 L +I+ +P +V + Sbjct: 368 LSIIAIIPFLVQNI 381 >sp|Q5NVM7|S61A2_PONAB Protein transport protein Sec61 subunit alpha isoform 2 OS=Pongo abelii GN=SEC61A2 PE=2 SV=1 Length = 476 Score = 203 bits (518), Expect = 1e-51, Method: Composition-based stats. Identities = 60/392 (15%), Positives = 126/392 (32%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + Q++ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + A + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPAEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 ---PQDI----WNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 P I + I+ L L+ ++ + Sbjct: 195 ASSPTTINTGRGTEFEGAVIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +YS I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYSSYPIKLFYTSNIPIILQSALVSNLYVISQMLSVR 311 Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFIL------YLLTIFILAL 239 N + LS IL + IF+L Sbjct: 312 FSGNFLVNLLGQWADVSGGGPARSYPVGGLCYYLSPPESMGAILEDPVHVVVYIIFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRDTSMVHE-LNRYIPTAAAFGGLCIGA 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S L + + L +++I F IF+ Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q96TW8|SC61A_HANAN Protein transport protein SEC61 subunit alpha OS=Hansenula anomala GN=SEC61 PE=3 SV=1 Length = 479 Score = 203 bits (516), Expect = 2e-51, Method: Composition-based stats. Identities = 59/372 (15%), Positives = 129/372 (34%), Gaps = 73/372 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLS---KLPLEVQERRRMLLTLVIALIQSVALVL 57 +L +G+SP +SS +++Q+ ++ L ++ K E + + L +++++ Q+ VL Sbjct: 76 TLMELGISPIVSSGMVFQLLQGTQLLDVNLESKTDRETFQTAQKLFAILLSIGQATVYVL 135 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMI----- 111 + + +L L L+ +I L +L GLG I + MA+ I Sbjct: 136 TGIYGRPS-DLGVGVCLLLILQLVFAGIIVILLDELLQKGYGLGSGISLFMATNICEQIF 194 Query: 112 --AYIPQDI----WNSIQELKISSLWLALM----------------------LVFSLVFL 143 A+ P + + + ++ L + L+ + + Sbjct: 195 WKAFAPTTVNNGRGDEFEGAVVALFHLLSVRKDKRRALVEAFYRQNLPNIFQLLATFIVF 254 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203 +L V ++ +Y IPV + Y I+L PIM L S ++ Sbjct: 255 FLVVYLQGFRYEIPVRSTRQRGQNGLY---PIKLFYTSNTPIMLQSALTSNFFIISQMLF 311 Query: 204 FLQPENQLIE------------------QWIEALSMG--------SPAWFILYLLTIFIL 237 P N ++ + P ++Y+ + + Sbjct: 312 QRFPLNPVVRLFGVWDARPGSAQLFASNGLAYYIQPPLSLTEALLDPIKTVIYVSFVLSV 371 Query: 238 ALAFA--FINIS---GDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F+ +I IS +A++ + G I + + + ++ A G + Sbjct: 372 CALFSKTWIEISGTAPRDVAKQFKDQGLVIAG-RRETSVYKELKRIIPTAAAFGGASIGA 430 Query: 293 ISGLPMMVVLVD 304 +S ++ + Sbjct: 431 LSVACDLLGTLG 442 >sp|P78979|SC61A_YARLI Protein transport protein SEC61 subunit alpha OS=Yarrowia lipolytica GN=SEC61 PE=3 SV=2 Length = 471 Score = 203 bits (516), Expect = 2e-51, Method: Composition-based stats. Identities = 50/371 (13%), Positives = 119/371 (32%), Gaps = 73/371 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLS---KLPLEVQERRRMLLTLVIALIQSVALVL 57 SL +G++P +SS +++Q+ ++ + ++ K E+ + + L ++++L Q+ VL Sbjct: 76 SLMELGITPIVSSGMVFQLLGGTQLIEVNMDLKSDRELYQTAQKLFAIILSLGQATVYVL 135 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGS-IMIVMASMIAYI- 114 + +L L+ +I L +L GLG + + ++ I Sbjct: 136 TGMYGPPK-DLGVGVCLLLIFQLVLAALVVILLDELLQKGYGLGSGISLFIATNICEQIF 194 Query: 115 ---------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFL 143 + + ++ + L LV ++ Sbjct: 195 WKAFAPTTVNKGRGYEFEGAIVAFVHLLFTRKDKKRAIIEAFTRQDLPNMSQLVTTVAIF 254 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203 + ++ + IPV + + I+L +PIM L S ++ Sbjct: 255 AAVIYLQGFRVDIPVKSSKQRGPYGVF---PIKLFYTSNLPIMLQSALTSNIFIISQMLF 311 Query: 204 FLQPEN------------------QLIEQWIEALSMG--------SPAWFILYLLTIFIL 237 P N + + P ++Y+ + + Sbjct: 312 KKFPTNVLVRLLGVWDGREGMQQLFPVSGIAYYMQPPFNAKEALADPVKTVIYIAFVLGV 371 Query: 238 ALAFAFINI-----SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F+ I S +A++ ++ G I A + + ++ A G + Sbjct: 372 CAVFSATWIEISGSSPRDVAKQFKEQGLVIAGRRETSAY-KELKRIIPTAAAFGGATIGA 430 Query: 293 ISGLPMMVVLV 303 +S ++ + Sbjct: 431 LSVASDLLGAL 441 >sp|Q9JLR1|S61A2_MOUSE Protein transport protein Sec61 subunit alpha isoform 2 OS=Mus musculus GN=Sec61a2 PE=2 SV=3 Length = 476 Score = 202 bits (514), Expect = 3e-51, Method: Composition-based stats. Identities = 59/392 (15%), Positives = 126/392 (32%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + Q++ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + A + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPAEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 ---PQDI----WNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 P I + I+ L L+ ++ + Sbjct: 195 AFSPTTINTGRGTEFEGAVIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +YS I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYSSYPIKLFYTSNIPIILQSALVSNLYVISQMLSVR 311 Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFI------LYLLTIFILAL 239 N + LS I + + IF+L Sbjct: 312 FSGNFLVNLLGQWADVSGGGPARSYPVGGLCYYLSPPESMGAIFEDPVHVVVYIIFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRDTSMVHE-LNRYIPTAAAFGGLCIGA 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S L + + L +++I F IF+ Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q9H9S3|S61A2_HUMAN Protein transport protein Sec61 subunit alpha isoform 2 OS=Homo sapiens GN=SEC61A2 PE=2 SV=3 Length = 476 Score = 202 bits (514), Expect = 3e-51, Method: Composition-based stats. Identities = 59/392 (15%), Positives = 126/392 (32%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + Q++ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + A + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPAEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 ---PQDI----WNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 P I + I+ L L+ ++ + Sbjct: 195 AFSPTTINTGRGTEFEGAVIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +YS I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYSSYPIKLFYTSNIPIILQSALVSNLYVISQMLSVR 311 Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFI------LYLLTIFILAL 239 N + LS I + + IF+L Sbjct: 312 FSGNFLVNLLGQWADVSGGGPARSYPVGGLCYYLSPPESMGAIFEDPVHVVVYIIFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRDTSMVHE-LNRYIPTAAAFGGLCIGA 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S L + + L +++I F IF+ Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q2KHX4|S61A2_BOVIN Protein transport protein Sec61 subunit alpha isoform 2 OS=Bos taurus GN=SEC61A2 PE=2 SV=3 Length = 476 Score = 202 bits (514), Expect = 3e-51, Method: Composition-based stats. Identities = 59/392 (15%), Positives = 126/392 (32%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + Q++ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + A + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPAEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 ---PQDI----WNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 P I + I+ L L+ ++ + Sbjct: 195 AFSPTTINTGRGTEFEGAVIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +YS I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYSSYPIKLFYTSNIPIILQSALVSNLYVISQMLSVR 311 Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFI------LYLLTIFILAL 239 N + LS I + + IF+L Sbjct: 312 FSGNFLVNLLGQWADVSGGGPARSYPVGGLCYYLSPPESMGAIFEDPVHVVVYIIFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRDTSMVHE-LNRYIPTAAAFGGLCIGA 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S L + + L +++I F IF+ Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q90ZM2|S61A1_DANRE Protein transport protein Sec61 subunit alpha-like 1 OS=Danio rerio GN=sec61al1 PE=2 SV=3 Length = 476 Score = 202 bits (514), Expect = 3e-51, Method: Composition-based stats. Identities = 53/392 (13%), Positives = 124/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + Q++ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311 Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFIL------YLLTIFILAL 239 N + LS +L + +F+L Sbjct: 312 FSGNFLVNLLGTWSDTSSGGPARAYPVGGLCYYLSPPESFGSVLDDPVHAVIYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S + + + L +++I F IF+ Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q8AY32|SC61A_GADOC Protein transport protein Sec61 subunit alpha OS=Gadus ogac GN=sec61a PE=2 SV=3 Length = 476 Score = 202 bits (514), Expect = 3e-51, Method: Composition-based stats. Identities = 53/392 (13%), Positives = 123/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + Q++ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +V+ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLVIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311 Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFIL------YLLTIFILAL 239 N + S +L + +F+L Sbjct: 312 FSGNFLVNLLGTWSDTSTGGPARAYPVGGLCYYFSPPESFGSVLDDPVHASIYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S + + + L +++I F IF+ Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q98SN8|S61A2_ONCMY Protein transport protein Sec61 subunit alpha isoform B OS=Oncorhynchus mykiss GN=sec61ab PE=2 SV=3 Length = 476 Score = 201 bits (513), Expect = 4e-51, Method: Composition-based stats. Identities = 52/392 (13%), Positives = 122/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + Q++ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSDMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLLATVFVFGV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311 Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFIL------YLLTIFILAL 239 N + S +L + F+L Sbjct: 312 FSGNFLVNLLGTWSDTSSGGPARAYPVGGLCYYFSPPESFGSVLDDPIHAAIYICFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S + + + L +++I F IF+ Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q5EA68|S61A1_BOVIN Protein transport protein Sec61 subunit alpha isoform 1 OS=Bos taurus GN=SEC61A1 PE=2 SV=3 Length = 476 Score = 201 bits (513), Expect = 5e-51, Method: Composition-based stats. Identities = 56/392 (14%), Positives = 124/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L + I + QS+ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMTITIGQSIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGVCLLITIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGMEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATIFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSAR 311 Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239 N L+ LS +L + +F+L Sbjct: 312 FSGNLLVSLLGTWSDTSSGGPARAYPVGGLCYYLSPPESFGSVLEDPVHAVVYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGA 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S L + + L +++I F IF+ Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|P61621|S61A1_RAT Protein transport protein Sec61 subunit alpha isoform 1 OS=Rattus norvegicus GN=Sec61a1 PE=2 SV=2 Length = 476 Score = 201 bits (513), Expect = 5e-51, Method: Composition-based stats. Identities = 56/392 (14%), Positives = 125/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + QS+ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQSIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLLITIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGMEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATIFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSAR 311 Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239 N L+ LS +L + +F+L Sbjct: 312 FSGNLLVSLLGTWSDTSSGGPARAYPVGGLCYYLSPPESFGSVLEDPVHAVVYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGA 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S L + + L +++I F IF+ Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q5R5L5|S61A1_PONAB Protein transport protein Sec61 subunit alpha isoform 1 OS=Pongo abelii GN=SEC61A1 PE=2 SV=3 Length = 476 Score = 201 bits (513), Expect = 5e-51, Method: Composition-based stats. Identities = 56/392 (14%), Positives = 125/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + QS+ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQSIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLLITIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGMEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATIFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSAR 311 Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239 N L+ LS +L + +F+L Sbjct: 312 FSGNLLVSLLGTWSDTSSGGPARAYPVGGLCYYLSPPESFGSVLEDPVHAVVYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGA 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S L + + L +++I F IF+ Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|P61620|S61A1_MOUSE Protein transport protein Sec61 subunit alpha isoform 1 OS=Mus musculus GN=Sec61a1 PE=2 SV=2 Length = 476 Score = 201 bits (513), Expect = 5e-51, Method: Composition-based stats. Identities = 56/392 (14%), Positives = 125/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + QS+ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQSIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLLITIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGMEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATIFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSAR 311 Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239 N L+ LS +L + +F+L Sbjct: 312 FSGNLLVSLLGTWSDTSSGGPARAYPVGGLCYYLSPPESFGSVLEDPVHAVVYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGA 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S L + + L +++I F IF+ Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|P61619|S61A1_HUMAN Protein transport protein Sec61 subunit alpha isoform 1 OS=Homo sapiens GN=SEC61A1 PE=1 SV=2 Length = 476 Score = 201 bits (513), Expect = 5e-51, Method: Composition-based stats. Identities = 56/392 (14%), Positives = 125/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + QS+ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQSIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLLITIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGMEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATIFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSAR 311 Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239 N L+ LS +L + +F+L Sbjct: 312 FSGNLLVSLLGTWSDTSSGGPARAYPVGGLCYYLSPPESFGSVLEDPVHAVVYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGA 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S L + + L +++I F IF+ Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q7T278|SC61A_HARAN Protein transport protein Sec61 subunit alpha OS=Harpagifer antarcticus GN=sec61a PE=2 SV=3 Length = 476 Score = 201 bits (512), Expect = 6e-51, Method: Composition-based stats. Identities = 54/392 (13%), Positives = 125/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + Q++ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNILNLIATVFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311 Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239 N L+ LS +L + +F+L Sbjct: 312 FSGNFLVNLLGTWSDATSGGPARAYPVAGLCYYLSPPESFGSVLDDPVHAAIYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S + + + L +++I F IF+ Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q7T277|SC61A_DISMA Protein transport protein Sec61 subunit alpha OS=Dissostichus mawsoni GN=sec61a PE=2 SV=3 Length = 476 Score = 201 bits (512), Expect = 6e-51, Method: Composition-based stats. Identities = 54/392 (13%), Positives = 125/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + Q++ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNILNLIATVFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311 Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239 N L+ LS +L + +F+L Sbjct: 312 FSGNFLVNLLGTWSDATSGGPARAYPVAGLCYYLSPPESFGSVLDDPVHAAIYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S + + + L +++I F IF+ Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q8AY36|SC61A_PAGBO Protein transport protein Sec61 subunit alpha OS=Pagothenia borchgrevinki GN=sec61a PE=2 SV=3 Length = 476 Score = 201 bits (511), Expect = 7e-51, Method: Composition-based stats. Identities = 54/392 (13%), Positives = 125/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + Q++ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNILNLIATVFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311 Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239 N L+ LS +L + +F+L Sbjct: 312 FSGNFLVNLLGTWSDATSGGPARAYPVAGLCYYLSPPESFGSVLDDPVHAAIYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S + + + L +++I F IF+ Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q8AY35|SC61A_NOTAN Protein transport protein Sec61 subunit alpha OS=Notothenia angustata GN=sec61a PE=2 SV=3 Length = 476 Score = 201 bits (511), Expect = 7e-51, Method: Composition-based stats. Identities = 54/392 (13%), Positives = 125/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + Q++ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNILNLIATVFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311 Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239 N L+ LS +L + +F+L Sbjct: 312 FSGNFLVNLLGTWSDATSGGPARAYPVAGLCYYLSPPESFGSVLDDPVHAAIYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S + + + L +++I F IF+ Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q8AY34|SC61A_HEMAM Protein transport protein Sec61 subunit alpha OS=Hemitripterus americanus GN=sec61a PE=2 SV=3 Length = 476 Score = 201 bits (511), Expect = 8e-51, Method: Composition-based stats. Identities = 55/392 (14%), Positives = 126/392 (32%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K +G+ P + + L ++I + Q++ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIGVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREGFYRQNLPNLMNLIATVFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311 Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239 N L+ LS +L + +F+L Sbjct: 312 FSGNFLVNLLGTWSDATSGGPARAYPVAGLCYYLSPPESFGSVLDDPVHAGIYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S + + + L +++I F IF+ Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q90YL4|S61A2_DANRE Protein transport protein Sec61 subunit alpha-like 2 OS=Danio rerio GN=sec61al2 PE=2 SV=3 Length = 476 Score = 201 bits (511), Expect = 8e-51, Method: Composition-based stats. Identities = 55/392 (14%), Positives = 124/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + Q+V V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAVVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATIFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311 Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFIL------YLLTIFILAL 239 N + LS +L + IF+L Sbjct: 312 FSGNFLVNLLGTWSDTSTGGPARAYPVGGLCYYLSPPESFGTVLEDPIHAIIYIIFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S + + + L +++I F IF+ Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q8AY31|SC61A_BOVVA Protein transport protein Sec61 subunit alpha OS=Bovichtus variegatus GN=sec61a PE=2 SV=3 Length = 476 Score = 200 bits (510), Expect = 9e-51, Method: Composition-based stats. Identities = 53/392 (13%), Positives = 125/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G++P ++S LI Q+ A +K + + P + + L ++I + Q++ V+ Sbjct: 75 TLMELGIAPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQAIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFGPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311 Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239 N L+ LS +L + +F+L Sbjct: 312 FSGNFLVNLLGTWSDATTSGPARAYPVAGLCYYLSPPESFGSVLDDPVHAVIYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S + + + L +++I F IF+ Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|P38377|S61A1_CANFA Protein transport protein Sec61 subunit alpha isoform 1 OS=Canis familiaris GN=SEC61A1 PE=1 SV=3 Length = 476 Score = 200 bits (510), Expect = 1e-50, Method: Composition-based stats. Identities = 56/392 (14%), Positives = 125/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + QS+ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQSIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLLITIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGMEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATIFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSAR 311 Query: 206 QPENQLIE--------------------QWIEALSMGSPAWFIL------YLLTIFILAL 239 N L+ LS +L + +F+L Sbjct: 312 FSGNLLVSLLGTWSDTSSGGPARAYPVGGLCHYLSPPESFGSVLEDPVHAVVYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGA 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S L + + L +++I F IF+ Sbjct: 431 LSVLADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q9P8E3|SC61A_CANAL Protein transport protein SEC61 subunit alpha OS=Candida albicans GN=SEC61 PE=3 SV=1 Length = 479 Score = 199 bits (508), Expect = 1e-50, Method: Composition-based stats. Identities = 57/374 (15%), Positives = 122/374 (32%), Gaps = 77/374 (20%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPL---EVQERRRMLLTLVIALIQSVALVL 57 +L +G+SP +SS +++Q+ +K + + E + + LL +++A+ Q+ VL Sbjct: 76 TLMELGISPIVSSGMLFQLLQGTKIIHVDMQNKNDRETFQTAQKLLAILLAVGQATVYVL 135 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMI----- 111 + + + +L L L+ + +I L +L GLG + + A+ Sbjct: 136 TGMYGPPSSLGVGVCSLL-ILQLVFASTIVILLDELLQKGYGLGSGVSLFTATNTCEQVF 194 Query: 112 --AYIP----QDIWNSIQELKISSLWLALM----------------------LVFSLVFL 143 A+ P ++ L L+ +L+ Sbjct: 195 WKAFAPTTSTSAKGTEFDGAVVAMFHLLGSRKDKKRALIESFYRPNLPNMFQLLATLLVF 254 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203 + V ++ + +P+ + Y IRL +PIM L S ++ Sbjct: 255 FAVVYLQGFRIELPMKSTRQRGPYGSY---PIRLFYTSNIPIMLESALASNIFIISQLLF 311 Query: 204 FLQPENQLIE------------------QWIEALSMGSPAWFILYLLTIFILALAFAFI- 244 P N ++ + P F LL + AF+ Sbjct: 312 MRWPNNLFVKLLGTWDARAGSSQLYANGGLAYYIQP--PFNFTDALLDPIKTTIYIAFVL 369 Query: 245 --------------NISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYL 290 S +A++ ++ G I A + + ++ A G + Sbjct: 370 GSCAVFSTTWIEISGTSPRDVAKQFKEQGLVIAGHRDTSAY-KELKKIIHIAAAFGGATI 428 Query: 291 ILISGLPMMVVLVD 304 +S + ++ + Sbjct: 429 GALSVVCDLMGTLG 442 >sp|Q6FRY3|SC61A_CANGA Protein transport protein SEC61 subunit alpha OS=Candida glabrata GN=SEC61 PE=3 SV=1 Length = 479 Score = 199 bits (507), Expect = 2e-50, Method: Composition-based stats. Identities = 54/373 (14%), Positives = 119/373 (31%), Gaps = 74/373 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR---MLLTLVIALIQSVALVL 57 +L +G+SP ++S +I+Q ++ L +S E +E + + +++ Q++ +V+ Sbjct: 75 TLMELGVSPIITSSMIFQFLQGTQLLQVSLDSKEDRELYQIAQKVCAIILTFGQALVVVM 134 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMIA---- 112 + I +L LM ++ ++ L +L GLG I + A+ IA Sbjct: 135 TGNYGSPS-DLGIAISLLLIFQLMFASFIVLLLDELLTKGYGLGSGISLFTATNIAENIF 193 Query: 113 -------YIPQDIWNSIQELKISSLWLALM----------------------LVFSLVFL 143 + + I+ L + ++ ++ Sbjct: 194 WKAFAPTTVNSGRGKEFEGAVIAFFHLLAVRKDKKRALVEAFYRENLPNMFQVIATVFVF 253 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203 + ++ +Y +PV + + + I+L PIM L S I+ Sbjct: 254 LFVLYLQGFRYELPVKSTKVR---GQMAIYPIKLFYTSNTPIMLQSALSSNIFLISQILF 310 Query: 204 FLQPENQ-------------------LIEQWIEALSMGSPAWFILY------LLTIFILA 238 P N + L L + T F+L Sbjct: 311 QKYPSNPVIRLFGVWGIRPGTNGPQVPLSGISYYLQPIGSLKMALLDPIKTVIYTAFVLG 370 Query: 239 LAFAFIN-------ISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLI 291 F S +A++ ++ G I + + + ++ A G + Sbjct: 371 TCALFSKTWIEISGTSAKDVAKQFKEQGMVINGKRET-SVYKELKKIIPTAAAFGGATIG 429 Query: 292 LISGLPMMVVLVD 304 +S ++ + Sbjct: 430 ALSVGSDLLGALG 442 >sp|Q752H7|SC61A_ASHGO Protein transport protein SEC61 subunit alpha OS=Ashbya gossypii GN=SEC61 PE=3 SV=1 Length = 480 Score = 199 bits (507), Expect = 2e-50, Method: Composition-based stats. Identities = 50/374 (13%), Positives = 123/374 (32%), Gaps = 75/374 (20%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ---ERRRMLLTLVIALIQSVALVL 57 +L +G+SP ++S +I+Q ++ L ++ + + + + + +V+ L Q++ +VL Sbjct: 75 TLMELGVSPIITSSMIFQFLQGTQLLQVNLESKQDRELFQIAQKVCAIVLTLGQAIVVVL 134 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDL-NAAMGLGGSIMIVMASMIA---- 112 I +L L L+ ++ ++ L +L GLG I + A+ IA Sbjct: 135 TGNYGS-VSNLGIAISLLLILQLVFASFIVLLLDELLIKGYGLGSGISLFTATNIAEQIF 193 Query: 113 -------YIPQDIWNSIQELKISSLWLALM----------------------LVFSLVFL 143 + + ++ L + ++ ++ Sbjct: 194 WKAFAPTTVNNGRGTEFEGAVVALFHLLSVRKDKKRALVEAFYRDYLPNMFQVLSTVFVF 253 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203 + ++ +Y +PV + Y I+L PIM L S +++ Sbjct: 254 LFVLYLQGFRYELPVRSTRTRGQVGSY---PIKLFYTSNTPIMLQSALTSNIFLTSQLLY 310 Query: 204 FLQPENQLIE--------------------QWIEALSMG--------SPAWFILYLLTIF 235 P N +++ + P ++Y+ + Sbjct: 311 QKFPNNPIVKMLGVWGTRSDAPYSPNAAISGLSYYIQPPFSFTEALLDPIKTVVYVTFVL 370 Query: 236 ILALAFAFINIS-----GDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYL 290 F+ I ++++ ++ G I + R + ++ A G + Sbjct: 371 GACAMFSRTWIDVSGTSPRDVSKQFKEQGLVING-RRETSVYRELKKVIPTAAAFGGATI 429 Query: 291 ILISGLPMMVVLVD 304 +S ++ + Sbjct: 430 GALSVGSDLLGTLG 443 >sp|P25014|SECY_CYAPA Preprotein translocase subunit secY OS=Cyanophora paradoxa GN=secY PE=3 SV=2 Length = 492 Score = 199 bits (507), Expect = 2e-50, Method: Composition-based stats. Identities = 70/337 (20%), Positives = 138/337 (40%), Gaps = 31/337 (9%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQE-------RRRMLLTLVIALIQSV 53 F++G+ P+M++ Q+ L + E +E + LT++ A IQS+ Sbjct: 109 GFFTLGILPYMNASFFLQVLT-KILPSLERFQKEQEEIAQREFKKWTRYLTVIWAFIQSI 167 Query: 54 ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMASMIA 112 + ++ A + + + L G ++ + + +GL +++ ++IA Sbjct: 168 VISWIW-IRPYALNWDFFLGLKVVVALTLGAVIVMIIAEQITEIGLTNGSSLLIFINIIA 226 Query: 113 YIPQDIWNSIQE----LKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFK 168 IP I L L L S + +++ + ++ S +PV + Sbjct: 227 RIPNSIEQLFNSNINWTFPMISSLILSLSLSFITMFVIIGLQESGRPVPVLIARQEAERQ 286 Query: 169 KY-------------SYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQW 215 K+ +Y+ +L PAG MP+++A T+ + +FL + Q Sbjct: 287 KFNEPITEAERRKTQAYIFFQLLPAGIMPVIFASTIFDL--ALPAFTNFLLQQGNWGYQL 344 Query: 216 IEALSMGSPAWFILYLLTIFILALAFAF-INISGDQIAERMQKSGEYIENVYPGGATRRY 274 I++ S YL+TI + + +A I I+ +AE + I V PG T+ Y Sbjct: 345 IKSFPFNSLFKDFCYLITIMLFSSNYALTIMINPKTLAENLNSMNALIPGVRPGSETKVY 404 Query: 275 INGLVTYFALVGAFYLILISGLPMMVV-LVDIRYLRL 310 L+ +G+F L L+ LP +V + + L++ Sbjct: 405 SEQLIHRLNFIGSFVLALVCILPSIVERSLGLPKLQI 441 >sp|Q6CPY9|SC61A_KLULA Protein transport protein SEC61 subunit alpha OS=Kluyveromyces lactis GN=SEC61 PE=3 SV=1 Length = 480 Score = 199 bits (506), Expect = 3e-50, Method: Composition-based stats. Identities = 51/374 (13%), Positives = 124/374 (33%), Gaps = 75/374 (20%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR---MLLTLVIALIQSVALVL 57 +L +G+SP ++S +I+Q ++ L ++ + +E + + +++ Q++ +VL Sbjct: 75 TLMELGVSPIITSSMIFQFLQGTQLLQVNMENKQDRELYQIAQKVFAILLTFGQAIVVVL 134 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMI----- 111 + + I +L L+ ++ ++ L +L + GLG I + A+ I Sbjct: 135 TGNYGKPS-DLGLAISLLLIFQLIFASFTVLLLDELLSKGYGLGSGISLFTATNIAEQIT 193 Query: 112 --AYIPQDI----WNSIQELKISSLWLALM----------------------LVFSLVFL 143 A+ P + + I+ L + + ++ Sbjct: 194 WKAFAPTTVNVGRGQEFEGAVIALFHLLAIRKDKKRALVEAFYRENLPNMFQVFSTIGVF 253 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203 + ++ +Y +P+ ++ Y I+L PIM L S I++ Sbjct: 254 LSVLYLQGFRYELPIKSTRTRGQYGSY---PIKLFYTSNTPIMLQSALTSNIFLISQILY 310 Query: 204 FLQPENQLIE--------------------QWIEALSMG--------SPAWFILYLLTIF 235 N L++ + P ++Y+ + Sbjct: 311 QRFSTNPLVKLLGVWGTRAGAPAGQQVALSGLSYYIQPPFSVTDALLDPIKTVVYVGFVL 370 Query: 236 ILALAFAFINI-----SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYL 290 F+ I S +A++ + G I + + ++ A G + Sbjct: 371 GACALFSKTWIEISGTSPRDVAKQFKDQGLTINGKRET-NVYKELKKIIPTAAAFGGAVI 429 Query: 291 ILISGLPMMVVLVD 304 +S ++ + Sbjct: 430 GALSVGSDLLGTLG 443 >sp|Q6BN08|SC61A_DEBHA Protein transport protein SEC61 subunit alpha OS=Debaryomyces hansenii GN=SEC61 PE=3 SV=1 Length = 479 Score = 198 bits (504), Expect = 4e-50, Method: Composition-based stats. Identities = 55/372 (14%), Positives = 123/372 (33%), Gaps = 73/372 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ---ERRRMLLTLVIALIQSVALVL 57 +L +G+SP +S+ +++Q+ +K + + + + + L +++A+ Q+ VL Sbjct: 76 TLMELGISPIVSAGMVFQLLQGTKLITVDMSNKNDRDQFQTAQKLFAILLAVGQATVYVL 135 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMI----- 111 + + ++L ++ AG +I L +L GLG I + A+ + Sbjct: 136 TGMYGPPSSLGTGVCLLLVLQLVFAG-IVVILLDELLQKGYGLGSGISLFTATNVCEQVF 194 Query: 112 --AYIPQ----DIWNSIQELKISSLWLALM----------------------LVFSLVFL 143 A+ P + ++ L L+ ++ Sbjct: 195 WKAFAPTTSNIGKGTEFEGAVVALFHLLGSRKDKKRALLEAFYRSHLPNMFQLIATVFVF 254 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203 L V ++ + +P+ + Y IRL +PIM L S ++ Sbjct: 255 LLVVYLQGFRIELPIKSTRQRGPYGLY---PIRLFYTSNIPIMLQSALSSNIFIISQMLF 311 Query: 204 FLQPENQLIE------------------QWIEALSMG--------SPAWFILYLLTIFIL 237 P N ++ + P I+Y++ + Sbjct: 312 VRWPNNIFVKILGSWDTRQGAAQLYAVSGLAYYIQPPLSFTEALLDPIKTIIYIIFVLGS 371 Query: 238 ALAFAFINI-----SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F+ I S +A++ ++ G I A R + ++ A G + Sbjct: 372 CAVFSTTWIEISGASPRDVAKQFKEQGLVIAGHRDTSAY-RELKKIIPTAAAFGGATIGA 430 Query: 293 ISGLPMMVVLVD 304 +S ++ + Sbjct: 431 LSVFCDLMGTLG 442 >sp|Q8AY33|SC61A_BORSA Protein transport protein Sec61 subunit alpha OS=Boreogadus saida GN=sec61a PE=2 SV=3 Length = 476 Score = 198 bits (504), Expect = 4e-50, Method: Composition-based stats. Identities = 54/392 (13%), Positives = 126/392 (32%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + Q++ V+ Sbjct: 75 TLMELGISPIVTSDLIMQLLAGAKIIEVGDSPKDRALFNGAQKLFGMIITIGQAIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +V+ + +AG L+ L GLG +++ ++ I Sbjct: 135 GMYGDPSEMGAGICLVIIIQLFVAGLIVLLLDELLQKGYGLGSGISLLIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLMNLIATVFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311 Query: 206 QPENQL--------------------IEQWIEALSMGSPAWFIL------YLLTIFILAL 239 N + + LS +L + +F+L Sbjct: 312 FSGNFIVNLLGTWSDTSTGGPARAYPVGGLCYFLSPPESFGSVLDDPVHAAIYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMRGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S + + + L +++I F IF+ Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|Q98SN9|S61A1_ONCMY Protein transport protein Sec61 subunit alpha isoform A OS=Oncorhynchus mykiss GN=sec61aa PE=2 SV=3 Length = 476 Score = 198 bits (503), Expect = 5e-50, Method: Composition-based stats. Identities = 54/392 (13%), Positives = 124/392 (31%), Gaps = 75/392 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G+SP ++S LI Q+ A +K + + P + + L ++I + QS+ V+ Sbjct: 75 TLMELGISPIVTSGLIMQLLAGAKIIEVGDTPKDRALFNGAQKLFGMIITIGQSIVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAYI--- 114 + + + +++ + +AG L+ L GLG + + ++ I Sbjct: 135 GMYGDPSEMGAGICLLIIIQLFVAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 115 -------PQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 + I+ L L+ ++ + Sbjct: 195 AFSPTTVNTGRGTEFEGAIIALFHLLATRTDKVRALREAFYRQNLPNLLNLIATVFVFAV 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +Y+ I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYNTYPIKLFYTSNIPIILQSALVSNLYVISQMLSTR 311 Query: 206 QPEN--------------------QLIEQWIEALSMGSPAWFIL------YLLTIFILAL 239 N + LS +L + +F+L Sbjct: 312 FSGNFLVNLLGTWSDTSTGGPARAYPVGGLCYFLSPPESFGSVLDDPIHAAIYIVFMLGS 371 Query: 240 AFAFINI-------SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLIL 292 F S +A+++++ + +N + A G + Sbjct: 372 CAFFSKTWIEVSGSSAKDVAKQLKEQQMVMGGHRETSMVHE-LNRYIPTAAAFGGLCIGG 430 Query: 293 ISGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 +S + + + L +++I F IF+ Sbjct: 431 LSVMADFLGAIGSGTGILLAVTIIYQYFEIFV 462 >sp|P46249|SECY_CYACA Preprotein translocase subunit secY OS=Cyanidium caldarium GN=secY PE=3 SV=2 Length = 410 Score = 193 bits (492), Expect = 1e-48, Method: Composition-based stats. Identities = 59/313 (18%), Positives = 134/313 (42%), Gaps = 16/313 (5%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERR------RMLLTLVIALIQSVA 54 S+F++G+ P++++ + Q+ + + E + + L+ A I+S+A Sbjct: 62 SVFALGIIPYINATITIQILSSAFPALKKLQSEEGEIGKKKLNKITKYLSFCFAFIESLA 121 Query: 55 LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113 +VL L Q+ A +V TL+L++G ++WL D + G+G +I+ ++ + Sbjct: 122 IVLRL--QKYAFDWNLYFIVQTTLILISGAMLVMWLADNISYKGIGTGASVIIFVNIASA 179 Query: 114 IPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINI---HNRFKKY 170 + + N + I L A + + V V+ + ++P+ + + Sbjct: 180 FAKFLLNQLFVHSIKFLDFASYFALIVFSIACIVFVQEAIRKVPIISAKQLDSTSFYSND 239 Query: 171 SYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWFILY 230 +L +R+N G MPI+ A +L+++ Y + +I + + +LY Sbjct: 240 YFLPLRINQGGVMPIILASSLLALVDYVIRY----GLSTLQAVYFINDILPFKILFLLLY 295 Query: 231 LLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYL 290 I + + ++ +++ ++K+ I ++ PG T ++ + L G+ +L Sbjct: 296 SAFIIFFNYLYCSLVLNCFELSNNLKKASVVIPSIRPGKMTEKFFKDTLDNLTLFGSGFL 355 Query: 291 ILISGLPMMVVLV 303 I P + V Sbjct: 356 AFIVLAPNFLEFV 368 >sp|P32915|SC61A_YEAST Protein transport protein SEC61 OS=Saccharomyces cerevisiae GN=SEC61 PE=1 SV=1 Length = 480 Score = 193 bits (491), Expect = 2e-48, Method: Composition-based stats. Identities = 54/373 (14%), Positives = 124/373 (33%), Gaps = 74/373 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGL---SKLPLEVQERRRMLLTLVIALIQSVALVL 57 +L +G+SP ++S +I+Q ++ L + SK E+ + + + +++ L Q++ +V+ Sbjct: 76 TLLELGVSPIITSSMIFQFLQGTQLLQIRPESKQDRELFQIAQKVCAIILILGQALVVVM 135 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMIA---- 112 + + + +L LM + ++ L +L + GLG I + A+ IA Sbjct: 136 TGNYGAPSDLGLPIC-LLLIFQLMFASLIVMLLDELLSKGYGLGSGISLFTATNIAEQIF 194 Query: 113 -------YIPQDIWNSIQELKISSLWLALM----------------------LVFSLVFL 143 + + I+ L + ++ ++ Sbjct: 195 WRAFAPTTVNSGRGKEFEGAVIAFFHLLAVRKDKKRALVEAFYRTNLPNMFQVLMTVAIF 254 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203 + ++ +Y +P+ + + Y I+L PIM L S I+ Sbjct: 255 LFVLYLQGFRYELPIRSTKVRGQIGIY---PIKLFYTSNTPIMLQSALTSNIFLISQILF 311 Query: 204 FLQPENQLIE-------------------QWIEALSM------------GSPAWFILYLL 232 P N LI + + + L Sbjct: 312 QKYPTNPLIRLIGVWGIRPGTQGPQMALSGLAYYIQPLMSLSEALLDPIKTIVYITFVLG 371 Query: 233 TIFILALAFAFIN-ISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLI 291 + + + + I+ S IA++ + G I + R + ++ A G + Sbjct: 372 SCAVFSKTWIEISGTSPRDIAKQFKDQGMVINGKRET-SIYRELKKIIPTAAAFGGATIG 430 Query: 292 LISGLPMMVVLVD 304 +S ++ + Sbjct: 431 ALSVGSDLLGTLG 443 >sp|Q25147|SC61A_HALRO Protein transport protein Sec61 subunit alpha OS=Halocynthia roretzi PE=2 SV=1 Length = 475 Score = 192 bits (488), Expect = 4e-48, Method: Composition-based stats. Identities = 59/391 (15%), Positives = 131/391 (33%), Gaps = 74/391 (18%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEV--QERRRMLLTLVIALIQSVALVLN 58 +L +G++P ++S LI Q+ A +K + + P + + L ++I + Q+V V+ Sbjct: 75 TLMELGITPIVTSGLIMQLLAGAKLIEVGDTPKDRALFNGAQKLFGMIITIGQAVVYVMT 134 Query: 59 LPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASMI------- 111 + + + +++ + +A L+ L GLG I + +A+ I Sbjct: 135 GMYGDPSDMGAGICLLIIIQLFIASLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK 194 Query: 112 ----AYIPQDIWNSIQELKISSLWLALM----------------------LVFSLVFLYL 145 A + + I+ L L +++ + Sbjct: 195 SFSPATVNTGRGTEFEGAVIALFHLLATRSDKVRALREAFYRPNLPNLMNLSATILVFGI 254 Query: 146 AVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFL 205 + + + +P+ +YS I+L +PI+ LVS ++ Sbjct: 255 VIYFQGFRVDLPIKSAR---YRGQYSSYPIKLFYTSNIPIILQSALVSGLYVISQMLAIR 311 Query: 206 QPENQLIEQ-------------------WIEALSMGSPAWFI-------LYLLTIFILAL 239 N I LS + + L +T + + Sbjct: 312 FRGNFFIGLLGVWEDVEGGGPARSYPVALCYYLSPPESFFSMFLDPIHGLLYITFMLGSC 371 Query: 240 AF---AFINIS---GDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLILI 293 AF +I +S +A+++++ + + +N + A G + + Sbjct: 372 AFFSKTWIEVSGSAAKDVAKQLKEQQMVMRGHRE-KSMIHELNRYIPTAAAFGGLCIGAL 430 Query: 294 SGLPMMVVLVDIR---YLRLSMIPGIFMIFI 321 S L + + L +++I F IF+ Sbjct: 431 SVLADFIGAIGSGTGILLAVTIIYQYFEIFV 461 >sp|O26134|SECY_METTH Preprotein translocase subunit secY OS=Methanobacterium thermoautotrophicum GN=secY PE=3 SV=1 Length = 456 Score = 191 bits (486), Expect = 5e-48, Method: Composition-based stats. Identities = 52/345 (15%), Positives = 118/345 (34%), Gaps = 51/345 (14%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ---ERRRMLLTLVIALIQSVALVL 57 S+ ++G+ P +S+ +I Q+ K L L E + + + LL +V +++ VL Sbjct: 73 SILTLGIGPIVSASIILQLLVGGKILKLDLSRHEDKAFFQGLQKLLAIVFTFFEALIFVL 132 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASMIA----- 112 L +A + + L L G +I+L ++ + G G + + +A+ ++ Sbjct: 133 TGSLAPSA----PQFVWVLILQLTIGGILIIFLDEVVSKWGFGSGVGLFIAAGVSQEIIV 188 Query: 113 -----------------YIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYR 155 I ++ + L ++ + + V E + Sbjct: 189 GAFNPLSAPTQPGVPAGRITGFLYLLFTGQSPDFQYYVLPVLALIAVFLVVVYAESMRVE 248 Query: 156 IPVNK-INIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQ-------P 207 IP++ +R A MP++ L+ Q + L Sbjct: 249 IPISMGGGKRLSRGAVGKYPLRFIYASNMPVILTSALLLNVQLLANVFQKLGYPILGTVS 308 Query: 208 ENQLIEQWIEALSMGS--------PAWFILYLLTIFILALAFAFI-----NISGDQIAER 254 Q ++ L+ P + Y + L + FA++ NI +A + Sbjct: 309 NGQAVDGLAYLLTAPRSIDALILDPFRVVFYAVVFIGLCVLFAWLWVEISNIGPRHVARQ 368 Query: 255 MQKSGEYIENVYPGG-ATRRYINGLVTYFALVGAFYLILISGLPM 298 + + G I + + + ++G ++ L++ + Sbjct: 369 LYQMGMQIPGFRSSRGQFEKILKRYIPTITILGGAFVGLLAFVAD 413 >sp|P38379|SC61A_PYRSA Protein transport protein Sec61 subunit alpha OS=Pyrenomonas salina PE=2 SV=1 Length = 494 Score = 188 bits (478), Expect = 5e-47, Method: Composition-based stats. Identities = 62/374 (16%), Positives = 132/374 (35%), Gaps = 74/374 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ---ERRRMLLTLVIALIQSVALVL 57 +L +G+SP ++S L+ Q+ A SK + + + E + + + LL ++I + +SVA VL Sbjct: 78 TLMELGISPIVTSGLVMQLLAGSKIIDVDQGTKEDKTLFQGAQKLLGILITIGESVAYVL 137 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMI----- 111 + + + +L + L +I L +L G+G +I + +A+ + Sbjct: 138 SGMYGDVKDLGAGN-AILIIVQLFTSGIIVICLDELLQKGYGIGSAISLFIATNVCESIV 196 Query: 112 ------AYIPQDIWNSIQELKISSLWLALM----------------------LVFSLVFL 143 I + ++ L + L+ +++ Sbjct: 197 WKSFSPTTINTGRGTEFEGALVALFQLMITKTDKVRALQEAFYRQNLPNVTNLLATVLVF 256 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203 L V + + +P+ ++ I+L MPI+ LVS + I++ Sbjct: 257 VLVVYFQGFQVELPITPAKSKGMAGQF--YPIKLFYTSNMPIILQTALVSNLYFISQILY 314 Query: 204 FLQPENQLI--------------------EQWIEALSMGSPAWFIL------YLLTIFIL 237 PEN +I +S + I+ L IFIL Sbjct: 315 KRYPENIIIHILGRWEEPEMSVSGQMRPVGGIAYYISPLNSFAEIVSDPVHALLYIIFIL 374 Query: 238 ALAFAFIN-------ISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYL 290 A F S ++++++ ++ + +R +N + A G + Sbjct: 375 ASCALFSKTWIQVSGTSASDVSKQLRDQQMVMKGFRAS-SMQRELNRYIPTAAAFGGMCI 433 Query: 291 ILISGLPMMVVLVD 304 +S + + + Sbjct: 434 GALSIVADFMGAIG 447 >sp|Q37143|SECY_ANTSP Preprotein translocase subunit secY OS=Antithamnion sp. GN=secY PE=3 SV=1 Length = 405 Score = 184 bits (467), Expect = 8e-46, Method: Composition-based stats. Identities = 61/315 (19%), Positives = 141/315 (44%), Gaps = 24/315 (7%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRM------LLTLVIALIQSVA 54 +F++G+ P++ + +I Q+ + E + R+ LTL+ ALIQS++ Sbjct: 62 GIFALGIVPYIYASIIIQLLIKLIPYLENLQKEEGEIGRQKINQLTRYLTLLWALIQSLS 121 Query: 55 LVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASMIAY 113 + + + + L + +W +++ + G+G +++ ++I+ Sbjct: 122 IAIWINHM------YLIHLFELCASLTTSSMIAMWFSEIISEYGVGNGPSLLIFQNIISS 175 Query: 114 IPQDIWNSIQELKISSLWL--ALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYS 171 IP+++ N + ++ L +L+L F ++ L + + ++ + +I + + + + Sbjct: 176 IPKNLQNYTFNIGTTNTVLNGSLILSFGIIILIINILIQEGERKIAILSAKQLGKINELN 235 Query: 172 Y---LDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWFI 228 + ++LN G MP ++A +V + N I Q+I + Sbjct: 236 HKVIFLLKLNQGGVMPFVFASAVV------HTFLFISNNTNSKITQFINLFLPNQFLYLP 289 Query: 229 LYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAF 288 LYL+ I + + + ++ + IA+ ++K G I N+ PG T +Y+N + L+GA Sbjct: 290 LYLIFIITFSYVYTSLILNPEDIAKNLKKMGASIPNIRPGSETIKYLNTRINRLTLIGAC 349 Query: 289 YLILISGLPMMVVLV 303 +L I+ P + + Sbjct: 350 FLFTITLFPTITYYI 364 >sp|Q60175|SECY_METJA Preprotein translocase subunit secY OS=Methanocaldococcus jannaschii GN=secY PE=1 SV=2 Length = 436 Score = 183 bits (466), Expect = 1e-45, Method: Composition-based stats. Identities = 48/338 (14%), Positives = 127/338 (37%), Gaps = 41/338 (12%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ---ERRRMLLTLVIALIQSVALVL 57 +L ++G+ P +++ +I Q+ S + + E + + + LL++++ +++V V Sbjct: 69 TLITLGIGPIVTAGIIMQLLVGSGIIQMDLSIPENRALFQGCQKLLSIIMCFVEAVLFVG 128 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMASMIAYI-- 114 + + L + + G+ LI+L ++ + G+G I + + A + I Sbjct: 129 AGAFG----ILTPLLAFLVIIQIAFGSIILIYLDEIVSKYGIGSGIGLFIAAGVSQTIFV 184 Query: 115 -----PQDIWNSIQELKISSLWLALM--LVFSLVFLYLAVTVERSKYRIPVNKINIHNRF 167 +W + L + + ++ +++ + V E + IP+ I Sbjct: 185 GALGPEGYLWKFLNSLIQGVPNIEYIAPIIGTIIVFLMVVYAECMRVEIPLAHGRIKGAV 244 Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH-------FLQPENQLIEQWIEALS 220 KY I+ +P++ A L + Q + L ++ + ++ LS Sbjct: 245 GKY---PIKFVYVSNIPVILAAALFANIQLWGLALYRMGIPILGHYEGGRAVDGIAYYLS 301 Query: 221 MG--------SPAWFILYLLTIFILALAFAFI-----NISGDQIAERMQKSGEYIENVYP 267 P I+Y++ + I + F + +A+R+ G I+ Sbjct: 302 TPYGLSSVISDPIHAIVYMIAMIITCVMFGIFWVETTGLDPKSMAKRIGSLGMAIKGFRK 361 Query: 268 G-GATRRYINGLVTYFALVGAFYLILISGLPMMVVLVD 304 A + + ++ + ++ ++ + + + Sbjct: 362 SEKAIEHRLKRYIPPLTVMSSAFVGFLATIANFIGALG 399 >sp|P28540|SECY_PAVLU Preprotein translocase subunit secY OS=Pavlova lutherii GN=secY PE=3 SV=2 Length = 419 Score = 179 bits (455), Expect = 3e-44, Method: Composition-based stats. Identities = 67/337 (19%), Positives = 146/337 (43%), Gaps = 23/337 (6%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQE-------RRRMLLTLVIALIQSV 53 S+ ++GL P+ S+ L Q V KL E E R +LT++ +I+S Sbjct: 66 SILTLGLGPFFSASLAVQFL-VKLYPAFEKLQNEEGEEGRKTIVRYTRILTVLFCIIESF 124 Query: 54 ALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMASMIA 112 L +L + + + + G+ L+WL+++ G+G ++++ ++ Sbjct: 125 FLSNSL--RSFVFNWNSISYFVVAAAVTTGSLVLVWLSEVITERGIGNGSSLLILIGNLS 182 Query: 113 YIPQDI----WNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRF- 167 I ++S+ S+L++ +++ + L + + +IPV Sbjct: 183 RFRFLINKDDFDSLNVSSQSNLYIIYIIITLVSMLIFSTLSQEGARKIPVVSAKQLIDGV 242 Query: 168 ---KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSP 224 + SY+ IR AG +PI+++ +++ I L N ++++++ Sbjct: 243 EDDMRRSYIPIRFGQAGVVPIIFSSSILLF---LTTSIKQLPNANIATRVILDSVNLQQI 299 Query: 225 AWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFAL 284 +F +L+ I + + I +S IA+ ++K I++ PG AT+ YI + + Sbjct: 300 FYFFTFLVLIIFFSFFYTLIILSPSDIAKNLKKMSSVIQDTKPGVATKVYIRKFILQASF 359 Query: 285 VGAFYLILISGLPMMV-VLVDIRYLRLSMIPGIFMIF 320 VG+ L + +P ++ + + L +S I + + F Sbjct: 360 VGSILLSALILIPSILAAALGVHPLSISGITSLILSF 396 >sp|P79088|SC61A_SCHPO Protein transport protein sec61 subunit alpha OS=Schizosaccharomyces pombe GN=sec61 PE=2 SV=1 Length = 479 Score = 178 bits (452), Expect = 5e-44, Method: Composition-based stats. Identities = 49/371 (13%), Positives = 118/371 (31%), Gaps = 71/371 (19%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRR---MLLTLVIALIQSVALVL 57 +L +G+SP ++S ++ Q+ S+ + ++ +E + L ++IA Q+ A VL Sbjct: 76 TLMELGISPIVTSSMLVQLLVGSQLIEVNMELKSDREMYQLVQKFLAIIIAFGQATAYVL 135 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASM------- 110 + ++L + A L+ L GLG I + +A++ Sbjct: 136 TGMYGRPQDLGAGICLLLILQLAAASLIVLLLDELLQKGYGLGSGISLFIATINCENIFW 195 Query: 111 IAYIPQDI----WNSIQELKISSLWLALM-----------------------------LV 137 A+ P + I+ +++ Sbjct: 196 KAFSPTTYHIANGVQFEGAVINFVYVMFTWDNKAAALYQAFFRSGLTSSQIQLPNLWNFF 255 Query: 138 FSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQY 197 +L+ + + ++ + IP+ + ++L PIM L S + Sbjct: 256 ATLLVFGVVIYLQDFRVEIPIRSQKFRGYRSTF---PVKLLYTSNTPIMLQSALTSNLFF 312 Query: 198 FLLIIHFLQPENQLIE-----------QWIEALSMGSPAWFILY-----LLTIFILALAF 241 ++ N L+ LS + L L+ +F A Sbjct: 313 ASRLLFNRFSSNFLVRFLGVWEQTATSGLSYYLSPPASFQDALIDPIHTLVYVFFTMFAC 372 Query: 242 AFIN--------ISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLILI 293 A + S +A++++ + G + + + ++ A + + + Sbjct: 373 ALFSKLWIEVSGASPRDVAKQLKSQQLVMAGHREG-SMYKELKRIIPTAAWLSGAVVGAL 431 Query: 294 SGLPMMVVLVD 304 + ++ + Sbjct: 432 AVASDLLGALG 442 >sp|P28541|SECY_METVA Preprotein translocase subunit secY OS=Methanococcus vannielii GN=secY PE=3 SV=1 Length = 438 Score = 174 bits (443), Expect = 6e-43, Method: Composition-based stats. Identities = 49/340 (14%), Positives = 121/340 (35%), Gaps = 43/340 (12%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ---ERRRMLLTLVIALIQSVALVL 57 +L ++G+ P +++ +I Q+ S+ + L + + + L + + +++V V Sbjct: 68 TLITLGIGPIVTAGIIMQLLVGSELISLDLSKPMNRALFQGLQKLFGIFLCFLEAVMFVG 127 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMASMIAYI-- 114 V +T+ ++ L L G +I+L ++ + G+G I + + A + I Sbjct: 128 AGAFG----VVNSTLALILVLQLALGAILVIYLDEIVSRYGIGSGIGLFIAAGVAQTIFV 183 Query: 115 -----PQDIWNSIQELKISSLWL----ALMLVFSLVFLYLAVTVERSKYRIPVNKINIHN 165 +W + + SL + L ++ +L + V VE + IP+ + Sbjct: 184 GAFGAEGYLWKFFSAMSVGSLGIAFEYILPILSTLFVFLVVVYVESIRVEIPLAHGRVKG 243 Query: 166 RFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH-------FLQPENQLIEQWIEA 218 KY I+ +P++ A L + Q + + + + Sbjct: 244 AVGKY---PIKFIYVSNLPVILAAALFANIQLWGMFLDRMGYPILGQYSNGTAVSGIAYY 300 Query: 219 LSMG--------SPAWFILYLLTIFILALAFAFI-----NISGDQIAERMQKSGEYIENV 265 S P I Y L + I + F + +A+++ I+ Sbjct: 301 FSTPYGISNIISDPLHAIFYTLMMVIFCILFGLFWVETSGLDAKSMAKKLGNLDMAIKGF 360 Query: 266 YPG-GATRRYINGLVTYFALVGAFYLILISGLPMMVVLVD 304 + + + + ++G+ ++ ++ + Sbjct: 361 RKSQKSIEQRLKRYIKPITVMGSAFVGFLAAAADFTGALG 400 >sp|Q9YDD0|SECY_AERPE Preprotein translocase subunit secY OS=Aeropyrum pernix GN=secY PE=3 SV=2 Length = 457 Score = 171 bits (435), Expect = 5e-42, Method: Composition-based stats. Identities = 47/348 (13%), Positives = 120/348 (34%), Gaps = 47/348 (13%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER---RRMLLTLVIALIQSVALVL 57 +L +G+ P +++ LI Q+ +K + L E + + + +L L A +++VA + Sbjct: 73 TLMELGIGPIVTASLIIQVLVGAKIIKLDLADPEGRRKFTSAQKVLALAFAALEAVAFTV 132 Query: 58 NLPL-QEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGG-SIMIVMASMIAYI 114 A L +L L G +I+ ++ G+G + ++A + + Sbjct: 133 GGRYWVGTAIEPGPLDYALVSLQLFLGALLVIYFDEVMQKGWGIGSAISLFILAGVAQGV 192 Query: 115 PQDIWNSIQELKISSLWLALML--------------------VFSLVFLYLAVTVERSKY 154 I+ +I + + ++ +L + L V ++ + Sbjct: 193 VWSIFGTIPGVAQDYGLVPAIISNPDLTLLARPNGFPDLTGFFTTLAAIILLVYLQAMRV 252 Query: 155 RIPVNKINIHNRFKKYSYLDIRLNPAGGMPI----MYAMTLVSIPQYFLLIIHFLQPENQ 210 IP+ S + ++ +PI + L+ + + + Q Sbjct: 253 EIPITSER---FKGIRSRVPLQFIYVTNIPILLVGILVSDLLLVQRLLADYLGVESRAYQ 309 Query: 211 LIEQWIEALSMGS--------PAWFILYLLTIFILALAFAFI-----NISGDQIAERMQK 257 + + LS P +++ + +L++ F ++ ++ + AER+ K Sbjct: 310 IYSSIVYYLSPPRGVVQSIADPVKTAVFIASWTVLSIVFGYMWVEIAGLNPREQAERLIK 369 Query: 258 SGEYIENVYPGGAT-RRYINGLVTYFALVGAFYLILISGLPMMVVLVD 304 G I + R + + + + + + + + Sbjct: 370 GGLAIPGMRSDPRVLERVLRRYIYPLTFLSSLIVAALVIVADIFGAYG 417 >sp|O28377|SECY_ARCFU Preprotein translocase subunit secY OS=Archaeoglobus fulgidus GN=secY PE=3 SV=1 Length = 493 Score = 171 bits (434), Expect = 7e-42, Method: Composition-based stats. Identities = 44/383 (11%), Positives = 123/383 (32%), Gaps = 82/383 (21%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERR---RMLLTLVIALIQSVALVL 57 S+ ++G+ P +++ +I Q+ + + L E + + L V+ ++++ + Sbjct: 73 SIIALGIGPIVTASIILQLLVGAGIIKLDLTNPEDRAAYQDFQRFLVFVMIAVEAIPQIA 132 Query: 58 NL------PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGS-IMIVMASM 110 L GV I L + L G ++++ ++ + G+G + ++A + Sbjct: 133 GGLLKPDLNLAAQLGVSPGIISFLIFIQLFIGGVLIVYMDEVVSKWGIGSGVSLFILAGI 192 Query: 111 IAYIPQDIW----------------------------NSIQELKISSLWLALMLVFSL-- 140 I ++ ++ L + ++ + Sbjct: 193 AQSIVVGLFNWVIPPNSAMPAGIIPRWIWIAQNYPLDQLFTGSGLAFLLIQGGILALITT 252 Query: 141 -VFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFL 199 + L V E ++ IP+ ++ I+L A +P+++ L + Sbjct: 253 AAIILLVVFFEGTRVEIPLAHAVARGARGRF---PIKLIYASVLPMIFVRALQANVVALG 309 Query: 200 LII-------HFLQPENQLIEQWIEALSM----------------------GSPAWFILY 230 ++ + + + L ++ Sbjct: 310 QVLHARGVTIFGEFVNGKAVSGLMFFLQPVSSPYDWIPSLVKSQGAAFAAIPDWMIYLHL 369 Query: 231 LLTIFILALA---FAFI-----NISGDQIAERMQKSGEYIENVYPGGAT-RRYINGLVTY 281 L+ IL + FA+ + +A ++ KSG + R ++ + Sbjct: 370 LIDALILVVGGIIFAWFWVETSGMDARTVASQIAKSGMQVPGFRKSPQVLERVLSRYIPK 429 Query: 282 FALVGAFYLILISGLPMMVVLVD 304 ++G + +++ + M+ + Sbjct: 430 VTILGGAIIGILTLVANMLGTIG 452 >sp|P28542|SECY_HALMA Preprotein translocase subunit secY OS=Haloarcula marismortui GN=secY PE=3 SV=2 Length = 487 Score = 165 bits (419), Expect = 3e-40, Method: Composition-based stats. Identities = 51/380 (13%), Positives = 129/380 (33%), Gaps = 79/380 (20%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ----ERRRMLLTLVIALIQSVALV 56 S+ +G+ P +++ ++ Q+ + LGL+ + + LL LV+ + + +V Sbjct: 73 SIMQLGIGPIVTASIVLQLLGGADLLGLNTQDDPRDQILYQGLQKLLVLVMICLTGLPMV 132 Query: 57 LNLPLQEA-------AGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMA 108 A G+ + L + G ++++ ++ + G+G I + ++A Sbjct: 133 FAGGFLPADTAVANSLGIGTAGVQWLIFAQMFVGGVLILFMDEVISKWGVGSGIGLFIVA 192 Query: 109 SMIAYI------PQDIWNSIQELKISSLWL-----------------------ALMLVFS 139 + + + NS + L++ L L + Sbjct: 193 GVSQRLVGGLLTAPFLGNSEGIIYTWYLFITGERGTGPVLAADGLQTVLLQGELLGLFTT 252 Query: 140 LVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFL 199 ++ + V E + IP++ + ++ ++L A +P++ L + Q+ Sbjct: 253 VLIFAVVVYAESVRVEIPLSNARVKGARGRF---PVKLIYASVLPMILVRALQANIQFLG 309 Query: 200 LIIH--------------FLQPENQLIEQWIEALSMGSPAWFI---------------LY 230 I++ QP L S G W++ + Sbjct: 310 RILNAQLGSMPAFLGTYANGQPTGGLFYFLAPIQSRGDWMWWLEGTAQPVWQILTRVGID 369 Query: 231 LLTIFILALAFAFI-----NISGDQIAERMQKSGEYIENVYPGGAT-RRYINGLVTYFAL 284 L + + FA ++ + A+++ SG I + + + + Sbjct: 370 LFVMLVGGAVFAVFWVETTDMGPEATAKQIHNSGMQIPGFRQNVGVIEKVLERYIPQVTV 429 Query: 285 VGAFYLILISGLPMMVVLVD 304 +G + L++ + M+ + Sbjct: 430 IGGALVGLLAVMANMLGTIG 449 >sp|Q9HPB1|SECY_HALSA Preprotein translocase subunit secY OS=Halobacterium salinarium GN=secY PE=3 SV=1 Length = 491 Score = 162 bits (410), Expect = 4e-39, Method: Composition-based stats. Identities = 48/383 (12%), Positives = 123/383 (32%), Gaps = 83/383 (21%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQE----RRRMLLTLVIALIQSVALV 56 ++ +G+ P +++ ++ Q+ + LGL + + L V+ ++ +V Sbjct: 72 TVLQLGIGPIVTASIVLQLLGGANLLGLDTDNDPRDQAIYQGLQKFLVGVMVVLTGAPMV 131 Query: 57 LNLPLQEAAGV-------DMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMI---- 105 + + + VL + AG L+++ ++ + G+G I + Sbjct: 132 FLGNFLQPSQQLAQSMPGGAFGVEVLIFAQIAAGGILLLFMDEVISKWGVGSGIGLFIVA 191 Query: 106 ----------------------------VMASMIAYIPQDIWNSIQELKISSLWLALMLV 137 ++ ++ +P + S E + + L+ Sbjct: 192 GVSQSLVGGLVFWEGGVGSQGLLPTWFDIIVGNVSNMPPLLSGSGIEFLLMQAGILG-LL 250 Query: 138 FSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQY 197 +L + V E + IP++ + ++ ++L A +P++ L + Q+ Sbjct: 251 TTLFIYVVVVYAESVRVEIPLSHARVKGARGRF---PVKLIYASVLPMILVRALQANIQF 307 Query: 198 FLL-----------IIHFLQPENQLIEQWIEAL----SMGSPAWFI-------LYLLTIF 235 + Q+ L S + W+ +L Sbjct: 308 LGQILNSTLASMPTWLGVYGGNGQVTGGLFYYLAPIYSPNAWMWWTSGATAARWQVLIRI 367 Query: 236 ILALAFAFI-------------NISGDQIAERMQKSGEYIENVYPGGAT-RRYINGLVTY 281 + L+F I ++ D A ++Q SG I + + + Sbjct: 368 AIDLSFMIIGGAIFAIFWVETADMGPDATARQIQNSGMQIPGFRKNQGVIEKVMERYIPQ 427 Query: 282 FALVGAFYLILISGLPMMVVLVD 304 ++G + L++ + M+ + Sbjct: 428 VTVIGGALVGLLAVMANMLGTIG 450 >sp|Q977V3|SECY_HALVO Preprotein translocase subunit secY OS=Halobacterium volcanii GN=secY PE=3 SV=1 Length = 488 Score = 156 bits (395), Expect = 2e-37, Method: Composition-based stats. Identities = 45/380 (11%), Positives = 124/380 (32%), Gaps = 79/380 (20%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQ----ERRRMLLTLVIALIQSVALV 56 S+ +G+ P +++ ++ Q+ + LGL + + LL V+ + + +V Sbjct: 73 SVLQLGIGPIVTASIVLQLLGGADLLGLDTDNNPRDQVLYQGLQKLLVGVMICLTGLPMV 132 Query: 57 LNLPLQEA-------AGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSI-MIVMA 108 A G+ + L + G ++++ ++ + G+G + + ++A Sbjct: 133 FAGNFLPADQAVATSLGIGTVGVKGLIFAQIAVGGVLILFMDEIVSKWGVGSGVGLFIIA 192 Query: 109 SMIAYI------------PQDIWNSIQELKISSLWLALM---LVFSLVF----------- 142 + + + + + ++ L L+ ++ Sbjct: 193 GVSQQLVGGLFSWQGLGGTSGFFATWIGIITGAIELPASPTDLLSTVFLGQGQLLALITT 252 Query: 143 ---LYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFL 199 + V E + IP++ + ++ ++L A +P++ L + Q+ Sbjct: 253 LLIFGIVVYAESVRVEIPLSHARVKGARGRF---PVKLIYASVLPMILVRALQANIQFLG 309 Query: 200 LIIHFLQP----------ENQLIEQWIEALSM----GSPAWF---------------ILY 230 ++ Q+ + L+ WF ++ Sbjct: 310 RFLNSSWVGMPAWLGQYTSGQVTGGLLYYLAPIQSRSDWMWFLGLTSADPLDIAIRVLID 369 Query: 231 LLTIFILALAFAFI-----NISGDQIAERMQKSGEYIENVYPGGAT-RRYINGLVTYFAL 284 L+ + + FA + A+++Q SG I R + + + Sbjct: 370 LIFMIVGGAVFAIFWVETTGMGPKSTAQQIQNSGMQIPGFRRNPQVIERVMERYIPQVTV 429 Query: 285 VGAFYLILISGLPMMVVLVD 304 +G + L++ + M+ + Sbjct: 430 IGGALVGLLAVMANMLGTIG 449 >sp|P49978|SECY_SULAC Preprotein translocase subunit secY OS=Sulfolobus acidocaldarius GN=secY PE=3 SV=1 Length = 463 Score = 140 bits (353), Expect = 2e-32, Method: Composition-based stats. Identities = 46/357 (12%), Positives = 113/357 (31%), Gaps = 57/357 (15%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRMLLTLVIALIQSVALVLNLP 60 +L +G+ P ++S LI Q+ SK + + E + + +ALI + Sbjct: 74 TLAQLGIGPVITSGLIMQILVGSKLINVDLTTQEGKSKFTQ-AEKALALIFIIVESSLFG 132 Query: 61 LQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGS-IMIVMASM-------- 110 + ++ + L+ +Y ++ L ++ GLG + +MA + Sbjct: 133 YVFTRATSNILLPIIVVVQLIIASYIILLLDEMIQKGWGLGSGVSLFIMAGIMKVIFWNM 192 Query: 111 ------------IAYIPQDIWNSIQELKISSLWL-----------ALMLVFSLVFLYLAV 147 + + P + + + L + L+ ++ L V Sbjct: 193 FGIVSVQSQNLPVGFFPLLVSYITSGRNLQEIVLNTSSTTPYQPDLIGLIATVGLTILIV 252 Query: 148 TVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHF-LQ 206 + + IPV + + + + +P+++ L + Q F + + Sbjct: 253 YLVNTNIYIPVTTQRLRGIR---TTVPLNFLYVSSIPVIFVSVLGADIQLFASLANSISN 309 Query: 207 PENQLIEQWIEALSMG-------------SPAWFILYLLTIFILALAFAFI-----NISG 248 + ++ A P +Y +L++ F + + Sbjct: 310 SASGILTDIANAFFFPPQGVPHSVYALVVDPVGAAIYAAVFIVLSIVFGMLWIDVAGLDP 369 Query: 249 DQIAERMQKSGEYIENVYPGGA-TRRYINGLVTYFALVGAFYLILISGLPMMVVLVD 304 AE+M +SG I + ++ + + + LI+ + + Sbjct: 370 KTQAEQMIRSGIEIPGMRTNPRIIEGILSKYIYALGFFSSLIVGLIAVVATFLGTYG 426 >sp|Q9UX84|SECY_SULSO Preprotein translocase subunit secY OS=Sulfolobus solfataricus GN=secY PE=3 SV=1 Length = 469 Score = 131 bits (329), Expect = 9e-30, Method: Composition-based stats. Identities = 49/363 (13%), Positives = 118/363 (32%), Gaps = 62/363 (17%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQER---RRMLLTLVIALIQSVALVL 57 +L +G+ P +++ LI Q+ A SK + + + + + + L + L++S Sbjct: 73 TLAQLGIGPIITAGLIMQILAGSKLISIDLNDPDDRVKFTEAQKGLAFIFILVESALFGY 132 Query: 58 NLPLQEAAGVDMTTIMV-LDTLVLMAGTYFLIWLTDLNAA-MGLGGS-IMIVMASM---- 110 L + + L+ TY ++ L +L GLG + ++A + Sbjct: 133 VLARTSTTINASILFIAGIVIAQLIVATYLILLLDELIQKGWGLGSGVSLFILAGVMKIM 192 Query: 111 ----------------IAYIPQDIWNSIQELKISSLWL-----------ALMLVFSLVFL 143 I + P + +L + + LV ++ + Sbjct: 193 FWDMFGIASVSSQNLPIGFFPALFTALASHSDVLNLIVNTSTKNLFQPDLVGLVTTIALI 252 Query: 144 YLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIH 203 + + + IPV + + + + +P+++ L S Q F + Sbjct: 253 IITIYLTTMTIEIPVTSQKLRGIRRT---IPLNFLYVSSIPVIFVAVLGSDIQLFASLAS 309 Query: 204 FLQPENQLIEQWI---------EALSMGSPAWFIL-------YLLTIFILALAFAFI--- 244 ++ P I + + S +L Y + +L++ F + Sbjct: 310 YVSPSASNILNTVSGVFFFPPPNSAIPHSIYAVVLDPLGALEYAVVFIVLSILFGILWVD 369 Query: 245 --NISGDQIAERMQKSGEYIENVYPG-GATRRYINGLVTYFALVGAFYLILISGLPMMVV 301 + A+++ ++G I V + + A + + LI+ ++ Sbjct: 370 VAGLDPATQAQQLVEAGIEIPGVRNNPKIIEGILARYIYPLAFFSSIIVGLIAVFATLLG 429 Query: 302 LVD 304 Sbjct: 430 AYG 432 >sp|P38353|SSH1_YEAST Sec sixty-one protein homolog OS=Saccharomyces cerevisiae GN=SSH1 PE=1 SV=1 Length = 490 Score = 127 bits (321), Expect = 7e-29, Method: Composition-based stats. Identities = 60/376 (15%), Positives = 119/376 (31%), Gaps = 77/376 (20%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRMLLTLVIALIQSVALVLNLP 60 +L GL P +SS LI Q+ A K + ++ ++ LT V A++Q V L Sbjct: 78 TLLEFGLFPNISSGLILQLLAGLKVIKVN-FKIQSDRELFQSLTKVFAIVQYVILTNIFI 136 Query: 61 LQEAAGVDMTTIMV-LDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMIVMASMIAY----- 113 G D++ + + L L+ F L ++ G MI+ +IA Sbjct: 137 FAGYFGDDLSVVQIGLINFQLVGAGIFTTLLAEVIDKGFGFSSGAMIINTVVIATNLVAD 196 Query: 114 ----------------IPQDIWNSIQELKISSLWLALMLVFSL---------------VF 142 + N IQ L+ ++ + Sbjct: 197 TFGVSQIKVGEDDQTEAQGALINLIQGLRSKHKTFIGGIISAFNRDYLPNLTTTIIVLAI 256 Query: 143 LYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLII 202 + ++ + +P+ Y I+L G + ++++ T++ F ++ Sbjct: 257 AIIVCYLQSVRVELPIRSTRARGTNNVY---PIKLLYTGCLSVLFSYTILFYIHIFAFVL 313 Query: 203 HFLQPENQLI--------------------EQWIEALSMGSPAW---------FILYLLT 233 L +N+ + L+ + + FI Y Sbjct: 314 IQLVAKNEPTHIICKIMGHYENANNLLAVPTFPLSLLAPPTSFFKGVTQQPLTFITYSAF 373 Query: 234 IFILALAF-----AFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAF 288 I + + F A S +A + G + + +N ++ A+ GA Sbjct: 374 ILVTGIWFADKWQAISGSSARDVALEFKDQGITLMG-RREQNVAKELNKVIPIAAVTGAS 432 Query: 289 YLILISGLPMMVVLVD 304 L LI+ + + L Sbjct: 433 VLSLITVIGESLGLKG 448 >sp|O42965|YGMH_SCHPO Uncharacterized protein C19G7.17 OS=Schizosaccharomyces pombe GN=SPBC19G7.17 PE=2 SV=2 Length = 475 Score = 117 bits (294), Expect = 1e-25, Method: Composition-based stats. Identities = 40/372 (10%), Positives = 127/372 (34%), Gaps = 77/372 (20%) Query: 1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLS---KLPLEVQERRRMLLTLVIALIQSVALVL 57 L GL+P S + Q+ A K++ ++ + + + + +++ ++ LI +V V Sbjct: 76 GLMITGLAPIYLSSFLLQILASKKKIAVNFNLIIDRVLFQNAQKVVSALLYLILAVTYVS 135 Query: 58 NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAA-MGLGGSIMI-----VMASM- 110 + + + + ++ L + I+L ++ GLG ++ ++ ++ Sbjct: 136 SGYYGSFSDLGIFRF-IMLILQIFLPGIVCIYLCEIIEKGHGLGSGPVLLLGSHILGNIM 194 Query: 111 ----------------------IAYIPQDIWNSIQE-------LKISSLWLALMLVFSLV 141 + ++++ + L S + + + Sbjct: 195 WDVLSLHRYPVNESGDSQYQGALVGFAFNLFSFKNKFSSLRSILFRSEGLSFVQFLVCIA 254 Query: 142 FLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLI 201 + + +P+ + + + ++L +P++Y +++S F Sbjct: 255 VFATFMYTLNIRIDVPIRSSRVRGVRQNF---PLKLLYTSVIPLIYFYSILSHLLVFAYA 311 Query: 202 IHFLQPEN--------------------QLIEQWIEALSMG--------SPAWFILYLLT 233 ++ L P + QL+ + L P ++Y +T Sbjct: 312 LYSLCPNSLITRLLVQYSPIDTFAEHKLQLVGGLVYFLYPPLGLSEALLHPVHTVIYTIT 371 Query: 234 IFILALAFAFINIS-----GDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAF 288 + + + F+ + ++ + +++ I + + ++ A + AF Sbjct: 372 LICITIYFSLLWMNATAGGPRDVLLFFKENQLVIAGYREATML-KELEKIIPIAAKLSAF 430 Query: 289 YLILISGLPMMV 300 ++ ++S + + Sbjct: 431 FVSILSVIAGIF 442 >sp|P72179|SECY_PARDE Preprotein translocase subunit secY (Fragment) OS=Paracoccus denitrificans GN=secY PE=3 SV=1 Length = 182 Score = 98.7 bits (245), Expect = 5e-20, Method: Composition-based stats. Identities = 21/113 (18%), Positives = 48/113 (42%), Gaps = 3/113 (2%) Query: 186 MYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWFILYLLTIFILALAFAF-I 244 ++A +L+ +P ++ + G P + + + I + + + Sbjct: 1 IFASSLLLLPVTISTFSGNQ--TGPIMSTVLAYFGPGQPLYLLFFAAMIVFFTYFYTYNV 58 Query: 245 NISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLILISGLP 297 + + +AE ++ G +I + PG T Y+ +VT ++G+ YL + LP Sbjct: 59 SFKTEDVAENLKNQGGFIPGIRPGKRTEDYLTYVVTRVLVIGSAYLAFVCLLP 111 >sp|P28620|SECY_BACST Preprotein translocase subunit secY (Fragment) OS=Bacillus stearothermophilus GN=secY PE=3 SV=1 Length = 99 Score = 74.0 bits (181), Expect = 1e-12, Method: Composition-based stats. Identities = 20/57 (35%), Positives = 35/57 (61%) Query: 247 SGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLILISGLPMMVVLV 303 + +Q+AE ++K G YI + PG T+ Y+ ++ LVG+ +L +I+ LP+ V V Sbjct: 1 NPEQMAENLKKQGGYIPGIRPGKNTQEYVTRILYRLTLVGSVFLAVIAVLPVFFVNV 57 >sp|P0C6V7|R1AB_BEV Replicase polyprotein 1ab OS=Berne virus GN=rep PE=1 SV=1 Length = 6857 Score = 34.4 bits (78), Expect = 1.0, Method: Composition-based stats. Identities = 12/102 (11%), Positives = 39/102 (38%), Gaps = 12/102 (11%) Query: 135 MLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSI 194 + +V ++ + + + I + ++ FK ++Y+ +L + +++ +V + Sbjct: 3061 YVFVFIVVIFTVIFLILIRLYIVM-----YSYFKVFTYVVFKLLFVNIIMVLF---VVCL 3112 Query: 195 PQYFLLIIHFLQPE----NQLIEQWIEALSMGSPAWFILYLL 232 P ++ L + P +++L+ L Sbjct: 3113 PPLVPGVVFVLALWLCDSVMFLLYLAFLSLFILPWFYVLFFL 3154 >sp|P0C6F3|R1A_BEV Replicase polyprotein 1a OS=Berne virus GN=1a PE=1 SV=1 Length = 4569 Score = 34.4 bits (78), Expect = 1.1, Method: Composition-based stats. Identities = 12/102 (11%), Positives = 39/102 (38%), Gaps = 12/102 (11%) Query: 135 MLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSI 194 + +V ++ + + + I + ++ FK ++Y+ +L + +++ +V + Sbjct: 3061 YVFVFIVVIFTVIFLILIRLYIVM-----YSYFKVFTYVVFKLLFVNIIMVLF---VVCL 3112 Query: 195 PQYFLLIIHFLQPE----NQLIEQWIEALSMGSPAWFILYLL 232 P ++ L + P +++L+ L Sbjct: 3113 PPLVPGVVFVLALWLCDSVMFLLYLAFLSLFILPWFYVLFFL 3154 >sp|Q49VR4|LTAS_STAS1 Glycerol phosphate lipoteichoic acid synthase OS=Staphylococcus saprophyticus subsp. saprophyticus (strain ATCC 15305 / DSM 20229) GN=ltaS PE=3 SV=1 Length = 646 Score = 32.8 bits (74), Expect = 3.2, Method: Composition-based stats. Identities = 11/81 (13%), Positives = 25/81 (30%), Gaps = 1/81 (1%) Query: 70 TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128 +L L + TYF ++ GL I+++ + + I+ + K Sbjct: 11 FAFFILTVLTVTLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLIALVLSIFLFFKGKKAF 70 Query: 129 SLWLALMLVFSLVFLYLAVTV 149 + + + V Sbjct: 71 WFIFIGGFILTFLLYANVVYF 91 >sp|Q5HR16|LTAS_STAEQ Glycerol phosphate lipoteichoic acid synthase OS=Staphylococcus epidermidis (strain ATCC 35984 / RP62A) GN=ltaS PE=3 SV=1 Length = 646 Score = 32.8 bits (74), Expect = 3.6, Method: Composition-based stats. Identities = 9/91 (9%), Positives = 26/91 (28%), Gaps = 1/91 (1%) Query: 60 PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDI 118 + + +L + TYF ++ GL I+++ + + + Sbjct: 1 MSLPKKKIGIFAFFLLTVFTITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLIALVLSV 60 Query: 119 WNSIQELKISSLWLALMLVFSLVFLYLAVTV 149 + + K + + + V Sbjct: 61 FLFFKGKKAFWFIFIGGFLLTFLLYANVVYF 91 >sp|Q8CQ10|LTAS_STAES Glycerol phosphate lipoteichoic acid synthase OS=Staphylococcus epidermidis (strain ATCC 12228) GN=ltaS PE=3 SV=1 Length = 646 Score = 32.4 bits (73), Expect = 4.0, Method: Composition-based stats. Identities = 10/91 (10%), Positives = 26/91 (28%), Gaps = 1/91 (1%) Query: 60 PLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDI 118 + + +L + TYF ++ GL I+I+ + + + Sbjct: 1 MSLPKKKIGIFAFFLLTVFTITLKTYFSYYVDFSLGVKGLVQNLILIMNPYSLIALVLSV 60 Query: 119 WNSIQELKISSLWLALMLVFSLVFLYLAVTV 149 + + K + + + V Sbjct: 61 FLFFKGKKAFWFIFIGGFLLTFLLYANVVYF 91 >sp|Q6P6T5|OCLN_RAT Occludin OS=Rattus norvegicus GN=Ocln PE=2 SV=1 Length = 523 Score = 32.4 bits (73), Expect = 4.4, Method: Composition-based stats. Identities = 11/132 (8%), Positives = 42/132 (31%), Gaps = 21/132 (15%) Query: 42 LLTLVIALIQSVALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLG- 100 L I S+ + + ++ +++ + + G ++++ + MG+ Sbjct: 142 LAMAAFCFIASLVIFVTSVIRSGMSRTRRYYLIVIIVSAILG--IMVFIATIVYIMGVNP 199 Query: 101 ----GSIMI---VMASMIAYI--PQDIWNSIQELK--------ISSLWLALMLVFSLVFL 143 M + + + P + + ++ + L + + F Sbjct: 200 TAQASGSMYGSQIYT-ICSQFYTPGGTGLYVDQYLYHYCVVDPQEAIAIVLGFMIIVAFA 258 Query: 144 YLAVTVERSKYR 155 + V +++ + Sbjct: 259 LIIVFAVKTRRK 270 >sp|P94493|YNCC_BACSU Putative metabolite transport protein yncC OS=Bacillus subtilis GN=yncC PE=3 SV=2 Length = 471 Score = 32.0 bits (72), Expect = 5.7, Method: Composition-based stats. Identities = 14/105 (13%), Positives = 38/105 (36%), Gaps = 2/105 (1%) Query: 44 TLVIALIQSVALVLNLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAM--GLGG 101 T + LI ++VL+ + V T++ L + G + + ++ GLG Sbjct: 332 TTALLLIAIFSIVLDGSMALPYVVLSLTVLFLAFMQGCVGPVTWLVIAEIFPQRLRGLGS 391 Query: 102 SIMIVMASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLA 146 I + ++ ++ + + S + + ++ + Sbjct: 392 GISVFFLWILNFVIGFAFPILLSSVGLSFTFFIFVALGVLAIGFV 436 >sp|Q7A1I3|LTAS_STAAW Glycerol phosphate lipoteichoic acid synthase OS=Staphylococcus aureus (strain MW2) GN=ltaS PE=1 SV=1 Length = 646 Score = 32.0 bits (72), Expect = 6.0, Method: Composition-based stats. Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%) Query: 70 TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128 +L + + TYF ++ GL I+++ + + ++ + K Sbjct: 11 FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70 Query: 129 SLWLALMLVFSLVFLYLAVTV 149 + + + V Sbjct: 71 WFMFIGGFLLTFLLYANVVYF 91 >sp|Q6GBB1|LTAS_STAAS Glycerol phosphate lipoteichoic acid synthase OS=Staphylococcus aureus (strain MSSA476) GN=ltaS PE=3 SV=1 Length = 646 Score = 32.0 bits (72), Expect = 6.0, Method: Composition-based stats. Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%) Query: 70 TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128 +L + + TYF ++ GL I+++ + + ++ + K Sbjct: 11 FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70 Query: 129 SLWLALMLVFSLVFLYLAVTV 149 + + + V Sbjct: 71 WFMFIGGFLLTFLLYANVVYF 91 >sp|Q6GIS3|LTAS_STAAR Glycerol phosphate lipoteichoic acid synthase OS=Staphylococcus aureus (strain MRSA252) GN=ltaS PE=3 SV=1 Length = 646 Score = 32.0 bits (72), Expect = 6.0, Method: Composition-based stats. Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%) Query: 70 TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128 +L + + TYF ++ GL I+++ + + ++ + K Sbjct: 11 FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70 Query: 129 SLWLALMLVFSLVFLYLAVTV 149 + + + V Sbjct: 71 WFMFIGGFLLTFLLYANVVYF 91 >sp|Q7A6U1|LTAS_STAAN Glycerol phosphate lipoteichoic acid synthase OS=Staphylococcus aureus (strain N315) GN=ltaS PE=1 SV=1 Length = 646 Score = 32.0 bits (72), Expect = 6.0, Method: Composition-based stats. Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%) Query: 70 TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128 +L + + TYF ++ GL I+++ + + ++ + K Sbjct: 11 FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70 Query: 129 SLWLALMLVFSLVFLYLAVTV 149 + + + V Sbjct: 71 WFMFIGGFLLTFLLYANVVYF 91 >sp|Q99VQ4|LTAS_STAAM Glycerol phosphate lipoteichoic acid synthase OS=Staphylococcus aureus (strain Mu50 / ATCC 700699) GN=ltaS PE=1 SV=1 Length = 646 Score = 32.0 bits (72), Expect = 6.0, Method: Composition-based stats. Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%) Query: 70 TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128 +L + + TYF ++ GL I+++ + + ++ + K Sbjct: 11 FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70 Query: 129 SLWLALMLVFSLVFLYLAVTV 149 + + + V Sbjct: 71 WFMFIGGFLLTFLLYANVVYF 91 >sp|Q5HHV4|LTAS_STAAC Glycerol phosphate lipoteichoic acid synthase OS=Staphylococcus aureus (strain COL) GN=ltaS PE=3 SV=1 Length = 646 Score = 32.0 bits (72), Expect = 6.0, Method: Composition-based stats. Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%) Query: 70 TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128 +L + + TYF ++ GL I+++ + + ++ + K Sbjct: 11 FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70 Query: 129 SLWLALMLVFSLVFLYLAVTV 149 + + + V Sbjct: 71 WFMFIGGFLLTFLLYANVVYF 91 >sp|Q2G093|LTAS_STAA8 Glycerol phosphate lipoteichoic acid synthase OS=Staphylococcus aureus (strain NCTC 8325) GN=ltaS PE=1 SV=1 Length = 646 Score = 32.0 bits (72), Expect = 6.0, Method: Composition-based stats. Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%) Query: 70 TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128 +L + + TYF ++ GL I+++ + + ++ + K Sbjct: 11 FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70 Query: 129 SLWLALMLVFSLVFLYLAVTV 149 + + + V Sbjct: 71 WFMFIGGFLLTFLLYANVVYF 91 >sp|Q2FIS2|LTAS_STAA3 Glycerol phosphate lipoteichoic acid synthase OS=Staphylococcus aureus (strain USA300) GN=ltaS PE=3 SV=1 Length = 646 Score = 32.0 bits (72), Expect = 6.0, Method: Composition-based stats. Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%) Query: 70 TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128 +L + + TYF ++ GL I+++ + + ++ + K Sbjct: 11 FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70 Query: 129 SLWLALMLVFSLVFLYLAVTV 149 + + + V Sbjct: 71 WFMFIGGFLLTFLLYANVVYF 91 >sp|Q2YSL2|LTAS_STAAB Glycerol phosphate lipoteichoic acid synthase OS=Staphylococcus aureus (strain bovine RF122 / ET3-1) GN=ltaS PE=3 SV=1 Length = 646 Score = 32.0 bits (72), Expect = 6.0, Method: Composition-based stats. Identities = 9/81 (11%), Positives = 25/81 (30%), Gaps = 1/81 (1%) Query: 70 TTIMVLDTLVLMAGTYFLIWLTDLNAAMGL-GGSIMIVMASMIAYIPQDIWNSIQELKIS 128 +L + + TYF ++ GL I+++ + + ++ + K Sbjct: 11 FAFFLLTVITITLKTYFSYYVDFSLGVKGLVQNLILLMNPYSLVALVLSVFLFFKGKKAF 70 Query: 129 SLWLALMLVFSLVFLYLAVTV 149 + + + V Sbjct: 71 WFMFIGGFLLTFLLYANVVYF 91 >sp|P0C6V8|R1AB_BRV1 Replicase polyprotein 1ab OS=Breda virus 1 GN=rep PE=2 SV=1 Length = 6733 Score = 31.7 bits (71), Expect = 6.7, Method: Composition-based stats. Identities = 16/137 (11%), Positives = 48/137 (35%), Gaps = 23/137 (16%) Query: 108 ASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRF 167 +++ +P + + + + + + + L + + V + F Sbjct: 2926 TNIVECLP-----TFEIISPYVFVVLVAIFTIVFLFLLRMYI--------VMY----SYF 2968 Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPE-NQLIEQWIEA--LSMGSP 224 K ++Y+ +L + +++ +V +P ++ L + + LS+ Sbjct: 2969 KVFTYVVFKLLFVNTVMVLF---VVCLPPLVPGVVFVLALWLCDSVVFLLYLAVLSLFIL 3025 Query: 225 AWFILYLLTIFILALAF 241 WF + L + + F Sbjct: 3026 PWFYVMLFVLIVGGFVF 3042 >sp|P0C6F4|R1A_BRV1 Replicase polyprotein 1a OS=Breda virus 1 GN=1a PE=3 SV=1 Length = 4445 Score = 31.7 bits (71), Expect = 7.6, Method: Composition-based stats. Identities = 16/137 (11%), Positives = 48/137 (35%), Gaps = 23/137 (16%) Query: 108 ASMIAYIPQDIWNSIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRF 167 +++ +P + + + + + + + L + + V + F Sbjct: 2926 TNIVECLP-----TFEIISPYVFVVLVAIFTIVFLFLLRMYI--------VMY----SYF 2968 Query: 168 KKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPE-NQLIEQWIEA--LSMGSP 224 K ++Y+ +L + +++ +V +P ++ L + + LS+ Sbjct: 2969 KVFTYVVFKLLFVNTVMVLF---VVCLPPLVPGVVFVLALWLCDSVVFLLYLAVLSLFIL 3025 Query: 225 AWFILYLLTIFILALAF 241 WF + L + + F Sbjct: 3026 PWFYVMLFVLIVGGFVF 3042 Database: uniprot_sprot.fasta Posted date: Apr 12, 2010 9:48 AM Number of letters in database: 181,677,051 Number of sequences in database: 516,081 Lambda K H 0.320 0.164 0.454 Lambda K H 0.267 0.0500 0.140 Matrix: BLOSUM62 Gap Penalties: Existence: 11, Extension: 1 Number of Hits to DB: 133,748,572 Number of Sequences: 516081 Number of extensions: 6364856 Number of successful extensions: 37324 Number of sequences better than 10.0: 789 Number of HSP's better than 10.0 without gapping: 141 Number of HSP's successfully gapped in prelim test: 648 Number of HSP's that attempted gapping in prelim test: 35714 Number of HSP's gapped (non-prelim): 1353 length of query: 328 length of database: 181,677,051 effective HSP length: 117 effective length of query: 211 effective length of database: 121,295,574 effective search space: 25593366114 effective search space used: 25593366114 T: 11 A: 40 X1: 16 ( 7.4 bits) X2: 38 (14.6 bits) X3: 64 (24.7 bits) S1: 40 (21.1 bits) S2: 70 (31.3 bits) hmmer-3.1b2/easel/demotic/examples/example.phmmer.out0000664361611702660230000100007212473612605022277 0ustar wheelerteddy# phmmer :: search a protein sequence against a protein database # HMMER 3.0 (March 2010); http://hmmer.org/ # Copyright (C) 2010 Howard Hughes Medical Institute. # Freely distributed under the GNU General Public License (GPLv3). # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # query sequence file: example.fa # target sequence database: /misc/data0/databases/Uniprot/uniprot_sprot.fasta # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Query: sp|P55685|Y4WG_RHISN [L=181] Description: Uncharacterized protein y4wG OS=Rhizobium sp. (strain NGR234) GN=NGR_a00980 PE=4 SV=1 Scores for complete sequences (score includes all domains): --- full sequence --- --- best 1 domain --- -#dom- E-value score bias E-value score bias exp N Sequence Description ------- ------ ----- ------- ------ ----- ---- -- -------- ----------- 1.9e-115 387.7 2.1 2.1e-115 387.6 1.4 1.0 1 sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizob ------ inclusion threshold ------ 1.7 13.5 0.0 7.4 11.4 0.0 1.9 2 sp|A1VDW9|HEM1_DESVV Glutamyl-tRNA reductase OS=Desulfovibr 2.1 13.1 0.0 9.5 11.0 0.0 1.9 2 sp|Q72C23|HEM1_DESVH Glutamyl-tRNA reductase OS=Desulfovibr 2.8 12.7 0.1 22 9.8 0.1 2.0 2 sp|C0ZYA2|RIMP_RHOE4 Ribosome maturation factor rimP OS=Rho 2.9 12.7 0.1 4.7e+02 5.5 0.0 2.2 2 sp|Q98G87|UBIG_RHILO 3-demethylubiquinone-9 3-methyltransfe 3.6 12.4 0.1 13 10.6 0.0 1.8 2 sp|B2VCH7|MTLD_ERWT9 Mannitol-1-phosphate 5-dehydrogenase O 4.5 12.1 0.5 11 10.8 0.3 1.7 1 sp|A1WE19|RLMN_VEREI Ribosomal RNA large subunit methyltran 4.6 12.0 1.0 7.6 11.3 0.1 1.8 2 sp|Q2J713|RLMN_FRASC Ribosomal RNA large subunit methyltran 5.4 11.8 0.0 12 10.7 0.0 1.5 2 sp|Q9CZP0|UFSP1_MOUSE Ufm1-specific protease 1 OS=Mus muscul 7.4 11.4 0.2 32 9.3 0.0 1.9 2 sp|Q21KT6|RLMN_SACD2 Ribosomal RNA large subunit methyltran 7.5 11.4 0.0 9.9 11.0 0.0 1.3 1 sp|Q7W7U1|NADD_BORPA Probable nicotinate-nucleotide adenyly 7.9 11.3 0.9 5.7e+02 5.2 0.0 3.1 3 sp|Q8C6Y6|ASB14_MOUSE Ankyrin repeat and SOCS box protein 14 8 11.3 0.1 13 10.6 0.1 1.4 1 sp|Q8Y3H7|Y003_RALSO UPF0161 protein RSc0003 OS=Ralstonia s 8.1 11.2 0.7 2.4e+02 6.4 0.0 2.8 3 sp|A4G4J9|RLMN_HERAR Ribosomal RNA large subunit methyltran 8.8 11.1 0.2 16 10.2 0.2 1.4 1 sp|B8F3W8|LEUC_HAEPS 3-isopropylmalate dehydratase large su 9.6 11.0 0.0 12 10.7 0.0 1.1 1 sp|Q07074|YH007_YEAST Uncharacterized protein YHR007C-A OS=S 9.7 11.0 1.5 1.9e+02 6.8 0.1 2.8 3 sp|A6SZX3|RLMN_JANMA Ribosomal RNA large subunit methyltran 9.7 11.0 2.6 12 10.7 0.4 2.0 2 sp|A2SHB8|RLMN_METPP Ribosomal RNA large subunit methyltran Domain annotation for each sequence (and alignments): >> sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp. (strain NGR234) GN=NGR_a00980 PE=4 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 387.6 1.4 7.5e-120 2.1e-115 1 181 [] 1 181 [] 1 181 [] 1.00 Alignments for each domain: == domain 1 score: 387.6 bits; conditional E-value: 7.5e-120 sp|P55685|Y4WG_RHISN 1 ltascrirrnsnsaqkstlgwsalstsdskvfyrvawllgrgklaeidailitdvngigttaddqlafvsliadqgetttvafgpeigs 89 +tascrirrnsnsaqkst+gwsalstsdskvfyrvawllgrgk+aeidailitdvngigttaddqlafvsliadqgetttvafgpeigs sp|P55685|Y4WG_RHISN 1 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGTTADDQLAFVSLIADQGETTTVAFGPEIGS 89 8**************************************************************************************** PP sp|P55685|Y4WG_RHISN 90 riaasflaacgqlqhqiatrtgkeerkfkpfaaagfsvraglaadgsnsgllsistvagaevhfiaterslrelenqltllleqlrlrs 178 riaasf+aacgqlqhqiatrtgkeerkfkpfaaagfsvraglaadgsnsg+lsistvagaevhfiaterslrelenqltllleqlrlrs sp|P55685|Y4WG_RHISN 90 RIAASFMAACGQLQHQIATRTGKEERKFKPFAAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRS 178 ***************************************************************************************** PP sp|P55685|Y4WG_RHISN 179 rpn 181 rpn sp|P55685|Y4WG_RHISN 179 RPN 181 **8 PP >> sp|A1VDW9|HEM1_DESVV Glutamyl-tRNA reductase OS=Desulfovibrio vulgaris subsp. vulgaris (strain DP4) GN=hemA PE=3 SV= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.4 0.0 0.00026 7.4 63 108 .. 39 86 .. 10 104 .. 0.76 2 ? -1.1 0.0 1.8 5e+04 36 50 .. 185 199 .. 172 225 .. 0.83 Alignments for each domain: == domain 1 score: 11.4 bits; conditional E-value: 0.00026 sp|P55685|Y4WG_RHISN 63 ddqlafvsli..adqgetttvafgpeigsriaasflaacgqlqhqiat 108 dd ++ v ++ +++ e v+ gpe+ sr+ ++ aa gq++h++a sp|A1VDW9|HEM1_DESVV 39 DDVVSEVLILstCNRVEILAVGRGPEVVSRVLRGWAAARGQCEHDLAP 86 55554444431156778889999*********************9985 PP == domain 2 score: -1.1 bits; conditional E-value: 1.8 sp|P55685|Y4WG_RHISN 36 awllgrgklaeidai 50 a l+g g +ae+ a sp|A1VDW9|HEM1_DESVV 185 AMLIGAGEMAELAAT 199 789999999999775 PP >> sp|Q72C23|HEM1_DESVH Glutamyl-tRNA reductase OS=Desulfovibrio vulgaris (strain Hildenborough / ATCC 29579 / NCIMB 83 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.0 0.0 0.00033 9.5 63 108 .. 39 86 .. 10 104 .. 0.76 2 ? -1.1 0.0 1.8 5e+04 36 50 .. 185 199 .. 172 225 .. 0.83 Alignments for each domain: == domain 1 score: 11.0 bits; conditional E-value: 0.00033 sp|P55685|Y4WG_RHISN 63 ddqlafvsli..adqgetttvafgpeigsriaasflaacgqlqhqiat 108 dd ++ v ++ +++ e v+ gpe+ sr+ ++ aa gq++h++a sp|Q72C23|HEM1_DESVH 39 DDVVSEVLILstCNRVEILAVGRGPEVVSRVLRGWSAARGQCEHDLAP 86 55554444431156778889999*********************9985 PP == domain 2 score: -1.1 bits; conditional E-value: 1.8 sp|P55685|Y4WG_RHISN 36 awllgrgklaeidai 50 a l+g g +ae+ a sp|Q72C23|HEM1_DESVH 185 AMLIGAGEMAELAAT 199 789999999999775 PP >> sp|C0ZYA2|RIMP_RHOE4 Ribosome maturation factor rimP OS=Rhodococcus erythropolis (strain PR4 / NBRC 100887) GN=rimP # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.8 0.1 0.00077 22 36 76 .. 93 131 .. 82 148 .. 0.83 2 ? 0.6 0.0 0.53 1.5e+04 40 65 .. 167 192 .. 155 200 .. 0.86 Alignments for each domain: == domain 1 score: 9.8 bits; conditional E-value: 0.00077 sp|P55685|Y4WG_RHISN 36 awllgrgklaeidailitdvngigttaddqlafvsliadqg 76 w rg+ a+id t v+ igt dd +a v i+ +g sp|C0ZYA2|RIMP_RHOE4 93 HWRRARGRKARIDLAGETVVGRIGTLNDDSVAVV--IGGRG 131 699**************************99976..45555 PP == domain 2 score: 0.6 bits; conditional E-value: 0.53 sp|P55685|Y4WG_RHISN 40 grgklaeidailitdvngigttaddq 65 g+ da+ +td +g+ + dd+ sp|C0ZYA2|RIMP_RHOE4 167 PEGRAVPSDAVDLTDDSGVDSVEDDE 192 56888899************999997 PP >> sp|Q98G87|UBIG_RHILO 3-demethylubiquinone-9 3-methyltransferase OS=Rhizobium loti GN=ubiG PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 5.5 0.0 0.016 4.7e+02 101 123 .. 44 66 .. 32 95 .. 0.81 2 ? 5.2 0.0 0.02 5.8e+02 71 103 .. 122 156 .. 107 175 .. 0.83 Alignments for each domain: == domain 1 score: 5.5 bits; conditional E-value: 0.016 sp|P55685|Y4WG_RHISN 101 qlqhqiatrtgkeerkfkpfaaa 123 ++ qia r g++ r +pf + sp|Q98G87|UBIG_RHILO 44 YIRDQIAARFGRDPRAARPFEGL 66 5789****************754 PP == domain 2 score: 5.2 bits; conditional E-value: 0.02 sp|P55685|Y4WG_RHISN 71 liadqgetttvafgpeigsriaa..sflaacgqlq 103 +ad get v e+ ++a f+a cgq+ sp|Q98G87|UBIG_RHILO 122 DLADAGETFDVILNMEVVEHVADidLFVAKCGQMV 156 589*****************99633699*****85 PP >> sp|B2VCH7|MTLD_ERWT9 Mannitol-1-phosphate 5-dehydrogenase OS=Erwinia tasmaniensis (strain DSM 17950 / Et1/99) GN=mtl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.6 0.0 0.00046 13 44 96 .. 54 100 .. 45 113 .. 0.76 2 ? -1.7 0.0 2.8 7.9e+04 40 77 .. 248 282 .. 233 293 .. 0.78 Alignments for each domain: == domain 1 score: 10.6 bits; conditional E-value: 0.00046 sp|P55685|Y4WG_RHISN 44 laeidailitdvngigttaddqlafvsliadqgetttvafgpeigsriaasfl 96 +a+i+ ++ vn + +++dd +a lia+ + t a gp+i riaa++ sp|B2VCH7|MTLD_ERWT9 54 QAQIE--IVNGVNAVHSSSDDIIA---LIAEV-DIVTTAVGPQILERIAAGMA 100 55554..56788999999998655...67765.5667799*********9865 PP == domain 2 score: -1.7 bits; conditional E-value: 2.8 sp|P55685|Y4WG_RHISN 40 grgklaeidailitdvngigttaddqlafvsliadqge 77 +g + e a+li g ad + a+++ i ++ e sp|B2VCH7|MTLD_ERWT9 248 VQGAMEESGAVLIK---RYGFAADKHAAYIQKIINRFE 282 56888888888875...568889999999988887766 PP >> sp|A1WE19|RLMN_VEREI Ribosomal RNA large subunit methyltransferase N OS=Verminephrobacter eiseniae (strain EF01-2) G # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.8 0.3 0.0004 11 56 119 .. 304 362 .. 276 388 .. 0.77 Alignments for each domain: == domain 1 score: 10.8 bits; conditional E-value: 0.0004 sp|P55685|Y4WG_RHISN 56 ngigttaddq.lafvsliadqgetttvafgpeigsriaasflaacgqlqhqiatrtgkeerkfkp 119 +g+ +a dq laf ++++ g ttv g+ ia aacgql ++ rt er k sp|A1WE19|RLMN_VEREI 304 SGLLRSAHDQiLAFAQVLGAAGIVTTVRK--TRGDDIA----AACGQLAGDVRDRTRVAERMAKQ 362 5666777777479************9974..5677776....69************999998775 PP >> sp|Q2J713|RLMN_FRASC Ribosomal RNA large subunit methyltransferase N OS=Frankia sp. (strain CcI3) GN=rlmN PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? -2.8 0.1 6 1.7e+05 77 108 .. 135 156 .. 120 169 .. 0.57 2 ? 11.3 0.1 0.00027 7.6 42 119 .. 324 395 .. 316 413 .. 0.74 Alignments for each domain: == domain 1 score: -2.8 bits; conditional E-value: 6 sp|P55685|Y4WG_RHISN 77 etttvafgpeigsriaasflaacgqlqhqiat 108 + tv+ + g+ +++ f+a t sp|Q2J713|RLMN_FRASC 135 DRATVCVSSQAGCGMGCPFCA----------T 156 445555555555555555544..........2 PP == domain 2 score: 11.3 bits; conditional E-value: 0.00027 sp|P55685|Y4WG_RHISN 42 gklaeidailitdvngigtta...ddqlafvsliadqgetttvafgpeigsriaasflaacgqlqhqiatrtgkeerkfkp 119 g+la+++ i + +g a q afv + d+g ttv g ia aacgql + gk er +p sp|Q2J713|RLMN_FRASC 324 GRLAHVNLIPLNPTGGSSWRAsapAGQRAFVRRLRDRGIVTTVRD--TRGREIA----AACGQLAAE---PAGKPERTDRP 395 6778888888877777655441114799**************974..4566666....69***9755...55777777776 PP >> sp|Q9CZP0|UFSP1_MOUSE Ufm1-specific protease 1 OS=Mus musculus GN=Ufsp1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.7 0.0 0.0004 12 107 155 .. 126 173 .. 104 189 .. 0.84 2 ? -2.1 0.0 3.6 1e+05 17 37 .. 192 213 .. 180 215 .. 0.71 Alignments for each domain: == domain 1 score: 10.7 bits; conditional E-value: 0.0004 sp|P55685|Y4WG_RHISN 107 atrtgkeerkfkpfaaagfsvraglaadgsnsgllsistvagaevhfia 155 + g eer + f +g v g ad ++ ll+i+ g+ev+ + sp|Q9CZP0|UFSP1_MOUSE 126 G-LRGEEERLYSHFTTGGGPVMVGGDADAQSKALLGICEGPGSEVYVLI 173 3.459***************************************98765 PP == domain 2 score: -2.1 bits; conditional E-value: 3.6 sp|P55685|Y4WG_RHISN 17 stlgwsal.stsdskvfyrvaw 37 + +gw+ + s ds fy +++ sp|Q9CZP0|UFSP1_MOUSE 192 GWVGWQKVkSVFDSNSFYNLCF 213 4578876537789999998875 PP >> sp|Q21KT6|RLMN_SACD2 Ribosomal RNA large subunit methyltransferase N OS=Saccharophagus degradans (strain 2-40 / ATCC # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? -0.8 0.0 1.4 4e+04 74 156 .. 105 129 .. 83 158 .. 0.62 2 ? 9.3 0.0 0.0011 32 67 115 .. 324 366 .. 312 381 .. 0.81 Alignments for each domain: == domain 1 score: -0.8 bits; conditional E-value: 1.4 sp|P55685|Y4WG_RHISN 74 dqgetttvafgpeigsriaasflaacgqlqhqiatrtgkeerkfkpfaaagfsvraglaadgsnsgllsistvagaevhfiat 156 +g+ t++ ++g+ + +sf+a t sp|Q21KT6|RLMN_SACD2 105 PDGDRGTLCVSSQVGCSLDCSFCA----------------------------------------------------------T 129 234444555555555555555544..........................................................3 PP == domain 2 score: 9.3 bits; conditional E-value: 0.0011 sp|P55685|Y4WG_RHISN 67 afvsliadqgetttvafgpeigsriaasflaacgqlqhqiatrtgkeer 115 f +++ d g tttv g+ + aacgql q+ rt + +r sp|Q21KT6|RLMN_SACD2 324 RFQQILIDAGYTTTVRT--TRGDD----IDAACGQLAGQVNDRTKRSQR 366 58889999999999974..34554....5689************88776 PP >> sp|Q7W7U1|NADD_BORPA Probable nicotinate-nucleotide adenylyltransferase OS=Bordetella parapertussis GN=nadD PE=3 SV= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.0 0.0 0.00035 9.9 105 152 .. 146 193 .. 100 197 .] 0.73 Alignments for each domain: == domain 1 score: 11.0 bits; conditional E-value: 0.00035 sp|P55685|Y4WG_RHISN 105 qiatrtgkeerkfkpfaaagfsvraglaadgsnsgllsistvagaevh 152 a r +e f p+a + ++r laad + +gll a h sp|Q7W7U1|NADD_BORPA 146 LAAHRRQLHELPFAPMAVSASDIRQRLAADAATDGLLPEPVAAYIATH 193 34557778999*************************987666655555 PP >> sp|Q8C6Y6|ASB14_MOUSE Ankyrin repeat and SOCS box protein 14 OS=Mus musculus GN=Asb14 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 5.2 0.0 0.02 5.7e+02 124 158 .. 216 249 .. 205 256 .. 0.83 2 ? 1.6 0.0 0.26 7.3e+03 131 166 .. 320 355 .. 309 361 .. 0.86 3 ? 0.2 0.1 0.68 1.9e+04 149 178 .. 522 553 .. 518 554 .. 0.76 Alignments for each domain: == domain 1 score: 5.2 bits; conditional E-value: 0.02 sp|P55685|Y4WG_RHISN 124 gfsvraglaadgsnsgllsistvagaevhfiater 158 gf+ laa+g+++g++++ ga+vh a++ sp|Q8C6Y6|ASB14_MOUSE 216 GFTP-LALAAQGGHTGIMQLLLQKGADVHSQASDS 249 6654.469*********************988775 PP == domain 2 score: 1.6 bits; conditional E-value: 0.26 sp|P55685|Y4WG_RHISN 131 laadgsnsgllsistvagaevhfiaterslrelenq 166 +aa g++ +l + ag +v+f+ +r ++ ++q sp|Q8C6Y6|ASB14_MOUSE 320 CAAAGAHPHCLELLIQAGFDVNFMLDQRIRKHYDDQ 355 68899999*****************99988887776 PP == domain 3 score: 0.2 bits; conditional E-value: 0.68 sp|P55685|Y4WG_RHISN 149 aevhfi.aterslrelen.qltllleqlrlrs 178 e+hfi a rsl++l + ++ ++ +lrlr+ sp|Q8C6Y6|ASB14_MOUSE 522 PEIHFIlANPRSLQHLCRlKIRKCMGRLRLRC 553 589*9847789**9986526777888888885 PP >> sp|Q8Y3H7|Y003_RALSO UPF0161 protein RSc0003 OS=Ralstonia solanacearum GN=RSc0003 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.6 0.1 0.00044 13 64 101 .. 22 59 .. 10 68 .. 0.90 Alignments for each domain: == domain 1 score: 10.6 bits; conditional E-value: 0.00044 sp|P55685|Y4WG_RHISN 64 dqlafvsliadqgetttvafgpeigsriaasflaacgq 101 q+ f+ ++d + + gp igs +aa l+ c sp|Q8Y3H7|Y003_RALSO 22 AQCRFLPTCSDYARDAVLTHGPAIGSYLAAKRLCRCHP 59 5889999***************************9975 PP >> sp|A4G4J9|RLMN_HERAR Ribosomal RNA large subunit methyltransferase N OS=Herminiimonas arsenicoxydans GN=rlmN PE=3 SV # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 0.1 0.0 0.77 2.2e+04 93 133 .. 14 53 .. 10 72 .. 0.82 2 ? 0.8 0.0 0.46 1.3e+04 136 153 .. 101 118 .. 79 143 .. 0.78 3 ? 6.4 0.0 0.0085 2.4e+02 67 117 .. 321 365 .. 289 375 .. 0.80 Alignments for each domain: == domain 1 score: 0.1 bits; conditional E-value: 0.77 sp|P55685|Y4WG_RHISN 93 asflaacgqlqhqiatrtgkeerkfkpfaaagfsvraglaa 133 a+ +a cg+l + r + +r + f+a+ f+ la sp|A4G4J9|RLMN_HERAR 14 AQLIAYCGELGEK-PFRAKQLQRWIHQFGASDFDAMTDLAK 53 677899**99876.578888899999*****9999888875 PP == domain 2 score: 0.8 bits; conditional E-value: 0.46 sp|P55685|Y4WG_RHISN 136 snsgllsistvagaevhf 153 n g l+ist ag+ v+ sp|A4G4J9|RLMN_HERAR 101 ENRGTLCISTQAGCAVNC 118 589999999999998753 PP == domain 3 score: 6.4 bits; conditional E-value: 0.0085 sp|P55685|Y4WG_RHISN 67 afvsliadqgetttvafgpeigsriaasflaacgqlqhqiatrtgkeerkf 117 af +++ d g tt+ g+ ++ aacgql ++ rt ++r sp|A4G4J9|RLMN_HERAR 321 AFAQVLMDGGLVTTIRK--TRGD----DIDAACGQLAGEVQDRTRVQDRMK 365 78888888888888753..3344....45689************9998864 PP >> sp|B8F3W8|LEUC_HAEPS 3-isopropylmalate dehydratase large subunit OS=Haemophilus parasuis serovar 5 (strain SH0165) G # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.2 0.2 0.00057 16 88 168 .. 135 218 .. 90 229 .. 0.79 Alignments for each domain: == domain 1 score: 10.2 bits; conditional E-value: 0.00057 sp|P55685|Y4WG_RHISN 88 gsriaasflaacgqlqhqiatrtgkeerkfkpfaaagfsvraglaadgsnsgllsistvagaevhfia.terslrel..enqlt 168 g+ a +f + +++h +at+t k+ r k vr g+ a +++ +t+ag+ h + + ++r+l e+++t sp|B8F3W8|LEUC_HAEPS 135 GAFGALAFGIGTSEVEHVLATQTVKQARAKKMKIEVRGKVREGITAKDIVLAIIGKTTMAGGTGHVVEfCGEAIRDLsmEGRMT 218 33446678888999**************99988888889***********************9998752456777752244555 PP >> sp|Q07074|YH007_YEAST Uncharacterized protein YHR007C-A OS=Saccharomyces cerevisiae GN=YHR007C-A PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.7 0.0 0.00041 12 142 173 .. 32 62 .. 27 68 .. 0.83 Alignments for each domain: == domain 1 score: 10.7 bits; conditional E-value: 0.00041 sp|P55685|Y4WG_RHISN 142 sistvagaevhfiaterslrelenqltllleq 173 s+ t+ a vh+i t+ + ++ enql lll q sp|Q07074|YH007_YEAST 32 SLPTLL-APVHYIPTRLTHHQAENQLFLLLFQ 62 555554.78*******************9987 PP >> sp|A6SZX3|RLMN_JANMA Ribosomal RNA large subunit methyltransferase N OS=Janthinobacterium sp. (strain Marseille) GN= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 0.1 0.0 0.76 2.2e+04 93 133 .. 13 52 .. 10 71 .. 0.81 2 ? 0.7 0.0 0.49 1.4e+04 136 153 .. 100 117 .. 75 135 .. 0.77 3 ? 6.8 0.1 0.0066 1.9e+02 67 117 .. 322 366 .. 307 376 .. 0.78 Alignments for each domain: == domain 1 score: 0.1 bits; conditional E-value: 0.76 sp|P55685|Y4WG_RHISN 93 asflaacgqlqhqiatrtgkeerkfkpfaaagfsvraglaa 133 a+ +a cg+l + r + +r + f+a+ f+ la sp|A6SZX3|RLMN_JANMA 13 AQLIAYCGELGEK-PFRAKQLQRWIHQFGASDFDAMTDLAK 52 6778999999866.5788888999999****9999888875 PP == domain 2 score: 0.7 bits; conditional E-value: 0.49 sp|P55685|Y4WG_RHISN 136 snsgllsistvagaevhf 153 n g l+ist ag+ v+ sp|A6SZX3|RLMN_JANMA 100 ENRGTLCISTQAGCAVNC 117 589999999999998753 PP == domain 3 score: 6.8 bits; conditional E-value: 0.0066 sp|P55685|Y4WG_RHISN 67 afvsliadqgetttvafgpeigsriaasflaacgqlqhqiatrtgkeerkf 117 af +++ d g ttv g+ ++ aacgql ++ rt ++r sp|A6SZX3|RLMN_JANMA 322 AFAQVLMDAGIVTTVRK--TRGD----DIDAACGQLAGEVQDRTRVQDRMK 366 78888899999888863..3444....45689************9998864 PP >> sp|A2SHB8|RLMN_METPP Ribosomal RNA large subunit methyltransferase N OS=Methylibium petroleiphilum (strain PM1) GN=r # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? -0.7 0.0 1.3 3.8e+04 95 116 .. 135 156 .. 78 166 .. 0.59 2 ? 10.7 0.4 0.00042 12 66 139 .. 319 387 .. 291 393 .. 0.77 Alignments for each domain: == domain 1 score: -0.7 bits; conditional E-value: 1.3 sp|P55685|Y4WG_RHISN 95 flaacgqlqhqiatrtgkeerk 116 ++a + +hq+ r g er sp|A2SHB8|RLMN_METPP 135 IVAQLWHAEHQLRARLGTTERV 156 4445555667777777777765 PP == domain 2 score: 10.7 bits; conditional E-value: 0.00042 sp|P55685|Y4WG_RHISN 66 lafvsliadqgetttvafgpeigsriaasflaacgqlqhqiatrtgkeerkfk.pfaaagfsvraglaadgsnsg 139 af +l+ d g ttv g+ ++ aacgql ++ rt + r + p+a ++ ad + sg sp|A2SHB8|RLMN_METPP 319 QAFAQLLVDGGLVTTVRR--TRGD----DIDAACGQLAGEVQDRTNAQARMRRaPIAIRPIDSAVQRRADAAPSG 387 489999999999999964..3354....45689************999885443888887777777777777766 PP Internal pipeline statistics summary: ------------------------------------- Query model(s): 1 (181 nodes) Target sequences: 516081 (181677051 residues) Passed MSV filter: 11913 (0.0230836); expected 10321.6 (0.02) Passed bias filter: 11913 (0.0230836); expected 10321.6 (0.02) Passed Vit filter: 1904 (0.00368934); expected 516.1 (0.001) Passed Fwd filter: 38 (7.36319e-05); expected 5.2 (1e-05) Initial search space (Z): 516081 [actual number of targets] Domain search space (domZ): 18 [number of targets reported over threshold] # CPU time: 6.07u 0.08s 00:00:06.15 Elapsed: 00:00:02.46 # Mc/sec: 13367.30 // Query: sp|Q1XGE2|HAC1_ASPOR [L=345] Description: Transcriptional activator hacA OS=Aspergillus oryzae GN=hacA PE=2 SV=1 Scores for complete sequences (score includes all domains): --- full sequence --- --- best 1 domain --- -#dom- E-value score bias E-value score bias exp N Sequence Description ------- ------ ----- ------- ------ ----- ---- -- -------- ----------- 2e-228 762.1 3.5 2.2e-228 762.0 2.4 1.0 1 sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspe 1.2e-169 568.8 2.3 1.5e-169 568.6 1.6 1.0 1 sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS=Emer 1.5e-26 98.4 9.3 1.5e-26 98.4 6.4 3.2 3 sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS=Tric 1.3e-12 52.6 5.6 1.3e-12 52.6 3.9 1.7 1 sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS=Sacc 6e-11 47.1 2.6 6.9e-11 46.9 1.8 1.1 1 sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabidopsi 4.6e-07 34.3 0.7 6e-07 33.9 0.5 1.3 1 sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos taurus 7.8e-07 33.6 5.7 9.5e-07 33.3 3.9 1.1 1 sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanum ly 1.7e-06 32.5 2.8 2.4e-06 32.0 2.0 1.3 1 sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Homo sapien 9.6e-06 30.0 4.8 1.2e-05 29.6 3.4 1.1 1 sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=Arabi 2.2e-05 28.8 0.0 3.8e-05 28.0 0.0 1.3 1 sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive element-binding 6.8e-05 27.2 2.5 0.0001 26.6 1.7 1.3 1 sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-binding 7.1e-05 27.1 3.1 0.00011 26.6 2.2 1.4 1 sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Rattus norv 0.00017 25.8 0.5 0.00027 25.2 0.3 1.3 1 sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper transcri 0.00023 25.5 0.8 0.0004 24.7 0.2 1.6 1 sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive element-binding 0.00023 25.4 4.5 0.00023 25.4 3.1 1.6 1 sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF2 OS=Petro 0.00028 25.2 0.2 0.00056 24.2 0.2 1.4 1 sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-binding 0.00029 25.1 3.1 0.00044 24.5 2.2 1.3 1 sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mus musculu 0.00031 25.0 0.1 0.00043 24.5 0.0 1.2 1 sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-binding 0.00058 24.1 0.3 0.00058 24.1 0.2 1.7 1 sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-binding 0.0006 24.1 2.0 0.0006 24.1 1.4 1.8 2 sp|O57342|MAFA_COTJA Transcription factor MafA OS=Coturnix 0.00063 24.0 3.1 0.0012 23.1 2.2 1.4 1 sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-binding 0.00077 23.7 2.0 0.00089 23.5 0.3 1.7 1 sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive element-binding 0.00091 23.5 3.2 0.0035 21.5 1.0 2.0 2 sp|Q90370|MAFB_COTJA Transcription factor MafB OS=Coturnix 0.00095 23.4 0.1 0.0015 22.7 0.0 1.4 1 sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-binding 0.001 23.3 0.4 0.0019 22.4 0.3 1.3 1 sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive element-binding 0.0011 23.3 0.6 0.0021 22.3 0.4 1.4 1 sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive element-binding 0.0012 23.1 3.7 0.0043 21.3 1.3 2.0 2 sp|Q90888|MAFB_CHICK Transcription factor MafB OS=Gallus ga 0.0013 23.0 0.2 0.0013 23.0 0.1 1.6 1 sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-binding 0.0014 22.9 0.1 0.0023 22.2 0.1 1.3 1 sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive element-binding 0.0014 22.9 1.3 0.0021 22.3 0.2 1.8 1 sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS=Homo sapi 0.0016 22.7 0.1 0.0027 22.0 0.1 1.3 1 sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive element-binding 0.0017 22.6 1.7 0.044 17.9 0.8 2.1 2 sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS=Xenopus l 0.0018 22.6 0.0 0.0032 21.7 0.0 1.5 1 sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive element-binding 0.0018 22.6 0.1 0.0028 21.9 0.0 1.2 1 sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive element-binding 0.0021 22.3 1.7 0.0023 22.2 0.2 1.7 1 sp|P54842|MAFB_RAT Transcription factor MafB OS=Rattus no 0.0021 22.3 0.1 0.0032 21.7 0.0 1.2 1 sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element-binding 0.0021 22.3 0.2 0.0024 22.1 0.2 1.0 1 sp|Q16520|BATF_HUMAN Basic leucine zipper transcriptional f 0.0023 22.1 0.3 0.0023 22.1 0.2 1.8 1 sp|P54841|MAFB_MOUSE Transcription factor MafB OS=Mus muscu 0.0027 21.9 0.3 0.0027 21.9 0.2 1.8 1 sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS=Macaca fa 0.0029 21.8 2.4 0.0029 21.8 1.6 1.8 2 sp|O42290|MAFA_CHICK Transcription factor MafA OS=Gallus ga 0.003 21.8 3.8 0.0033 21.6 2.6 1.1 1 sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcriptional f 0.0037 21.5 0.0 0.0066 20.7 0.0 1.5 1 sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive element-binding 0.004 21.4 0.0 0.004 21.4 0.0 1.6 1 sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element-binding 0.0043 21.3 3.0 0.011 19.9 2.1 1.7 1 sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcription fac 0.0053 21.0 0.9 0.0092 20.2 0.6 1.3 1 sp|O43889|CREB3_HUMAN Cyclic AMP-responsive element-binding 0.0054 20.9 2.2 0.0054 20.9 1.5 1.7 1 sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcription fac 0.0057 20.9 3.2 0.014 19.6 2.2 1.6 1 sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcription fac 0.0068 20.6 0.1 0.0076 20.5 0.1 1.1 1 sp|O35284|BATF_MOUSE Basic leucine zipper transcriptional f 0.0084 20.3 0.3 0.012 19.8 0.2 1.2 1 sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive element-binding 0.0089 20.2 5.8 0.014 19.6 3.7 1.5 1 sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive element-binding 0.0097 20.1 4.3 0.012 19.9 2.9 1.1 1 sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcriptional f ------ inclusion threshold ------ 0.012 19.9 4.4 0.029 18.5 1.1 2.0 2 sp|Q504L8|MAFB_XENTR Transcription factor MafB OS=Xenopus t 0.012 19.8 5.2 0.012 19.8 3.6 1.8 1 sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive element-binding 0.016 19.4 2.1 0.026 18.7 1.5 1.3 1 sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS=Xenopus t 0.018 19.3 1.8 0.32 15.1 1.3 2.0 2 sp|P23091|MAF_AVIS4 Transforming protein Maf OS=Avian musc 0.018 19.2 0.4 0.026 18.7 0.3 1.2 1 sp|P81269|ATF1_MOUSE Cyclic AMP-dependent transcription fac 0.019 19.2 1.6 0.38 14.9 1.2 2.0 2 sp|Q789F3|MAF_CHICK Transcription factor Maf OS=Gallus gal 0.02 19.1 0.1 0.042 18.0 0.1 1.5 1 sp|P29747|CREBA_DROME Cyclic AMP response element-binding pr 0.02 19.0 0.5 0.034 18.3 0.3 1.3 1 sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcription fac 0.024 18.8 1.8 0.33 15.1 0.9 2.1 2 sp|P54844|MAF_RAT Transcription factor Maf OS=Rattus nor 0.024 18.8 1.5 0.43 14.7 1.0 2.1 2 sp|O75444|MAF_HUMAN Transcription factor Maf OS=Homo sapie 0.024 18.8 3.3 0.032 18.4 2.3 1.1 1 sp|P97876|BATF3_RAT Basic leucine zipper transcriptional f 0.025 18.8 0.3 0.025 18.8 0.2 1.7 1 sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcription fac 0.025 18.7 1.5 0.43 14.7 1.0 2.1 2 sp|A7Z017|MAF_BOVIN Transcription factor Maf OS=Bos taurus 0.026 18.7 1.7 0.53 14.4 1.2 2.2 2 sp|Q0V9K1|MAF_XENTR Transcription factor Maf OS=Xenopus tr 0.028 18.6 0.3 0.047 17.9 0.2 1.4 1 sp|Q08DA8|ATF1_BOVIN Cyclic AMP-dependent transcription fac 0.029 18.5 0.3 0.03 18.5 0.2 1.1 1 sp|O60675|MAFK_HUMAN Transcription factor MafK OS=Homo sapi 0.03 18.5 2.0 0.48 14.5 1.1 2.1 2 sp|P54843|MAF_MOUSE Transcription factor Maf OS=Mus muscul 0.036 18.2 0.3 0.05 17.8 0.2 1.2 1 sp|P18846|ATF1_HUMAN Cyclic AMP-dependent transcription fac 0.039 18.1 1.9 0.039 18.1 1.3 2.2 1 sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Arabidopsis 0.039 18.1 0.4 0.039 18.1 0.3 1.1 1 sp|Q61827|MAFK_MOUSE Transcription factor MafK OS=Mus muscu 0.046 17.9 0.9 0.058 17.6 0.6 1.1 1 sp|P14233|TGA1B_TOBAC TGACG-sequence-specific DNA-binding pr 0.051 17.7 0.6 0.086 17.0 0.4 1.3 1 sp|Q6NW59|ATF4_DANRE Cyclic AMP-dependent transcription fac 0.067 17.3 2.3 0.15 16.2 1.6 1.6 1 sp|O24160|TGA21_TOBAC TGACG-sequence-specific DNA-binding pr 0.07 17.3 2.8 0.21 15.7 1.3 1.9 2 sp|Q98UK4|MAF_DANRE Transcription factor Maf OS=Danio reri 0.071 17.3 0.8 0.11 16.7 0.6 1.2 1 sp|A3KMR8|MAFA_DANRE Transcription factor MafA OS=Danio rer 0.078 17.1 0.7 0.09 16.9 0.5 1.1 1 sp|Q90596|MAFK_CHICK Transcription factor MafK OS=Gallus ga 0.079 17.1 0.5 0.13 16.4 0.3 1.4 1 sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcription fac 0.086 17.0 1.2 0.088 17.0 0.8 1.1 1 sp|P97875|JDP2_MOUSE Jun dimerization protein 2 OS=Mus musc 0.086 17.0 1.2 0.088 17.0 0.8 1.1 1 sp|Q78E65|JDP2_RAT Jun dimerization protein 2 OS=Rattus n 0.092 16.9 0.2 0.15 16.2 0.2 1.3 1 sp|P12959|OP2_MAIZE Regulatory protein opaque-2 OS=Zea may 0.093 16.9 6.4 0.093 16.9 4.4 2.1 2 sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive element-binding 0.093 16.9 4.3 0.16 16.1 3.0 1.3 1 sp|Q39140|TGA6_ARATH Transcription factor TGA6 OS=Arabidops 0.098 16.8 4.3 0.19 15.9 2.9 1.4 1 sp|P23923|HBP1B_WHEAT Transcription factor HBP-1b(c38) OS=Tr 0.11 16.7 1.0 0.21 15.7 0.7 1.6 1 sp|Q00322|CEBPD_MOUSE CCAAT/enhancer-binding protein delta O 0.11 16.6 3.2 0.18 15.9 2.2 1.3 1 sp|Q39163|TGA5_ARATH Transcription factor TGA5 OS=Arabidops 0.12 16.5 1.0 0.21 15.7 0.7 1.3 1 sp|Q54RZ9|BZPG_DICDI Probable basic-leucine zipper transcri 0.12 16.5 0.5 0.21 15.7 0.3 1.3 1 sp|Q8CF90|MAFA_MOUSE Transcription factor MafA OS=Mus muscu 0.13 16.4 0.2 0.13 16.4 0.2 1.8 1 sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcription fac 0.15 16.2 3.5 0.26 15.4 2.4 1.3 1 sp|P43273|TGA2_ARATH Transcription factor TGA2 OS=Arabidops 0.16 16.1 5.8 0.22 15.7 1.5 2.1 2 sp|Q98UK5|MAFB_DANRE Transcription factor MafB OS=Danio rer 0.17 16.0 1.5 0.38 14.9 1.0 1.6 1 sp|P16951|ATF2_MOUSE Cyclic AMP-dependent transcription fac 0.18 15.9 2.1 0.5 14.5 0.1 2.1 2 sp|P27925|CREB1_BOVIN Cyclic AMP-responsive element-binding 0.19 15.9 1.4 0.41 14.8 1.0 1.6 1 sp|P15336|ATF2_HUMAN Cyclic AMP-dependent transcription fac 0.19 15.9 2.6 0.46 14.6 1.8 1.6 1 sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcription fac 0.19 15.9 7.0 0.36 15.0 4.8 1.4 1 sp|Q2VZV0|IF2_MAGSA Translation initiation factor IF-2 OS= 0.21 15.7 1.1 0.37 14.9 0.8 1.5 1 sp|Q6ZDF3|TRAB1_ORYSJ bZIP transcription factor TRAB1 OS=Ory 0.22 15.7 1.6 0.5 14.5 1.1 1.6 1 sp|Q6P788|ATF5_RAT Cyclic AMP-dependent transcription fac 0.22 15.6 6.7 0.22 15.6 4.7 2.2 2 sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive element-binding 0.23 15.6 0.3 1 13.5 0.1 1.9 2 sp|Q66J36|NFIL3_XENLA Nuclear factor interleukin-3-regulated 0.29 15.3 0.6 0.52 14.4 0.4 1.3 1 sp|Q8NHW3|MAFA_HUMAN Transcription factor MafA OS=Homo sapi 0.37 14.9 0.5 0.76 13.9 0.3 1.5 1 sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocricetus a 0.38 14.9 0.1 0.62 14.2 0.0 1.3 1 sp|P23922|HBP1A_WHEAT Transcription factor HBP-1a OS=Triticu 0.39 14.9 0.2 0.45 14.6 0.1 1.0 1 sp|Q90595|MAFF_CHICK Transcription factor MafF OS=Gallus ga 0.39 14.8 3.0 0.76 13.9 0.4 2.1 2 sp|P53450|FOS_TAKRU Proto-oncogene c-Fos OS=Takifugu rubri 0.43 14.7 2.8 1.1 13.3 1.9 1.7 1 sp|Q00969|ATF2_RAT Cyclic AMP-dependent transcription fac 0.43 14.7 0.2 0.78 13.8 0.2 1.5 1 sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scrofa GN= 0.51 14.5 0.1 0.84 13.7 0.1 1.5 1 sp|P79145|CREM_CANFA cAMP-responsive element modulator OS=C 0.52 14.4 2.9 1.1 13.3 2.0 1.6 1 sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcription fac 0.53 14.4 0.1 0.85 13.7 0.1 1.4 1 sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus musculus G 0.54 14.4 0.1 0.54 14.4 0.1 1.8 1 sp|P15337|CREB1_RAT Cyclic AMP-responsive element-binding 0.54 14.4 0.1 0.54 14.4 0.1 1.9 1 sp|P16220|CREB1_HUMAN Cyclic AMP-responsive element-binding 0.54 14.4 0.1 0.54 14.4 0.1 1.9 1 sp|Q01147|CREB1_MOUSE Cyclic AMP-responsive element-binding 0.57 14.3 3.5 1.1 13.3 2.4 1.5 1 sp|O93602|ATF2_CHICK Cyclic AMP-dependent transcription fac 0.63 14.1 0.7 0.75 13.9 0.5 1.1 1 sp|Q90889|MAFG_CHICK Transcription factor MafG OS=Gallus ga 0.64 14.1 0.1 1 13.5 0.1 1.3 1 sp|P79702|FOS_CYPCA Proto-oncogene c-Fos OS=Cyprinus carpi 0.64 14.1 3.7 1 13.5 2.5 1.2 1 sp|Q8X229|FCR3_CANAL Fluconazole resistance protein 3 OS=Ca 0.65 14.1 0.3 1.3 13.1 0.2 1.6 1 sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus norvegi 0.71 14.0 4.9 1.3 13.1 3.4 1.4 1 sp|P49716|CEBPD_HUMAN CCAAT/enhancer-binding protein delta O 0.72 14.0 0.3 0.72 14.0 0.2 1.7 1 sp|Q554P0|BZPJ_DICDI Probable basic-leucine zipper transcri 0.74 13.9 0.1 0.74 13.9 0.1 2.2 1 sp|Q55E93|BZPE_DICDI Probable basic-leucine zipper transcri 0.75 13.9 0.2 1.1 13.4 0.1 1.2 1 sp|P51984|CREB_CHLVR Cyclic AMP-responsive element-binding 0.77 13.9 0.2 1 13.4 0.1 1.3 1 sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein OS=FBJ 0.81 13.8 0.1 1.3 13.1 0.0 1.6 1 sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos taurus GN= 0.82 13.8 4.0 0.9 13.6 2.7 1.1 1 sp|Q8WYK2|JDP2_HUMAN Jun dimerization protein 2 OS=Homo sap 0.86 13.7 1.4 2.3 12.3 1.0 1.8 1 sp|Q60925|DBP_MOUSE D site-binding protein OS=Mus musculus 0.9 13.6 0.6 1.5 12.9 0.4 1.3 1 sp|P14232|TGA1A_TOBAC TGACG-sequence-specific DNA-binding pr 0.96 13.6 1.4 2.3 12.3 1.0 1.7 1 sp|P16443|DBP_RAT D site-binding protein OS=Rattus norve 0.97 13.5 0.0 1.5 12.9 0.0 1.3 1 sp|Q68EL6|NFIL3_DANRE Nuclear factor interleukin-3-regulated 0.98 13.5 0.2 1.7 12.7 0.2 1.5 1 sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo sapiens G 1 13.5 2.7 1.5 12.9 1.9 1.2 1 sp|Q9C5Q2|AI5L3_ARATH ABSCISIC ACID-INSENSITIVE 5-like prote 1.1 13.4 0.2 2.1 12.4 0.2 1.4 1 sp|Q5FW38|NFIL3_XENTR Nuclear factor interleukin-3-regulated 1.1 13.4 0.1 1.9 12.5 0.1 1.5 1 sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis catus GN 1.2 13.3 3.1 1.9 12.6 2.2 1.3 1 sp|Q9SJN0|ABI5_ARATH Protein ABSCISIC ACID-INSENSITIVE 5 OS 1.2 13.2 3.6 1.9 12.6 2.5 1.2 1 sp|P42777|GBF4_ARATH G-box-binding factor 4 OS=Arabidopsis 1.3 13.1 6.2 1.8 12.6 4.3 1.2 1 sp|P15407|FOSL1_HUMAN Fos-related antigen 1 OS=Homo sapiens 1.3 13.1 0.6 1.5 12.9 0.4 1.1 1 sp|O15525|MAFG_HUMAN Transcription factor MafG OS=Homo sapi 1.4 13.0 0.1 2.5 12.2 0.0 1.3 1 sp|P40535|ACA2_YEAST ATF/CREB activator 2 OS=Saccharomyces 1.5 12.9 0.2 1.7 12.7 0.2 1.1 1 sp|A7YY73|MAFF_BOVIN Transcription factor MafF OS=Bos tauru 1.6 12.9 0.4 1.9e+02 6.0 0.1 2.1 2 sp|Q8PY58|PSMR_METMA Proteasome-activating nucleotidase OS= 1.6 12.8 0.5 3.2 11.8 0.4 1.5 1 sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodopus robor 1.7 12.7 1.1 2.8 12.0 0.8 1.4 1 sp|P23050|FOS_AVINK p55-v-Fos-transforming protein OS=Avia 1.8 12.6 2.3 2.8 12.0 1.6 1.2 1 sp|Q9LES3|AI5L2_ARATH ABSCISIC ACID-INSENSITIVE 5-like prote 2 12.5 2.7 3.5 11.7 1.8 1.4 1 sp|Q84JK2|FD_ARATH Protein FD OS=Arabidopsis thaliana GN= 2 12.5 0.7 2.3 12.3 0.5 1.1 1 sp|A5PJV0|MAFG_BOVIN Transcription factor MafG OS=Bos tauru 2 12.5 0.7 2.3 12.3 0.5 1.1 1 sp|O54790|MAFG_MOUSE Transcription factor MafG OS=Mus muscu 2 12.5 2.7 3.4 11.7 1.9 1.3 1 sp|Q39234|TGA3_ARATH Transcription factor TGA3 OS=Arabidops 2.2 12.4 1.4 3.3 11.8 1.0 1.3 1 sp|P07049|CPPB_NEIGO Cryptic plasmid protein B OS=Neisseria 2.2 12.3 1.2 3.8 11.6 0.9 1.4 1 sp|P11939|FOS_CHICK Proto-oncogene c-Fos OS=Gallus gallus 2.5 12.2 0.0 2.9 12.0 0.0 1.3 1 sp|P29176|FOSX_MSVFR Transforming protein v-Fos/v-Fox OS=FB 2.5 12.2 0.9 2.9 12.0 0.6 1.1 1 sp|O54791|MAFF_MOUSE Transcription factor MafF OS=Mus muscu 2.7 12.1 0.3 1.9e+02 6.0 0.1 2.1 2 sp|Q8TI88|PSMR_METAC Proteasome-activating nucleotidase OS= 2.8 12.0 0.4 5.5 11.1 0.3 1.4 1 sp|O08750|NFIL3_MOUSE Nuclear factor interleukin-3-regulated 2.8 12.0 0.7 3.4 11.7 0.5 1.1 1 sp|Q76MX4|MAFG_RAT Transcription factor MafG OS=Rattus no 3 11.9 1.2 6.4 10.9 0.8 1.5 1 sp|P20482|CNC_DROME Segmentation protein cap'n'collar OS=D 3.1 11.9 0.3 5.3 11.1 0.2 1.3 1 sp|Q90Z72|NFIL3_CHICK Nuclear factor interleukin-3-regulated 3.2 11.8 2.4 5.6 11.0 1.7 1.3 1 sp|Q9VWW0|CREBB_DROME Cyclic AMP response element-binding pr 3.2 11.8 2.0 4.9 11.2 1.4 1.3 1 sp|Q8BKJ9|SIRT7_MOUSE NAD-dependent deacetylase sirtuin-7 OS 3.3 11.8 0.2 6.3 10.9 0.1 1.5 1 sp|Q56TT7|FOS_PHOCM Proto-oncogene c-Fos OS=Phodopus campb 3.3 11.8 0.5 5.8 11.0 0.3 1.3 1 sp|Q6IMZ0|NFIL3_RAT Nuclear factor interleukin-3-regulated 3.5 11.7 5.3 0.94 13.6 1.6 1.4 1 sp|P38749|YAP3_YEAST AP-1-like transcription factor YAP3 OS 3.7 11.6 0.4 5.5 11.0 0.2 1.2 1 sp|Q08D88|NFIL3_BOVIN Nuclear factor interleukin-3-regulated 3.8 11.6 0.4 5.9 11.0 0.3 1.2 1 sp|Q16649|NFIL3_HUMAN Nuclear factor interleukin-3-regulated 3.8 11.6 3.0 6.6 10.8 2.1 1.3 1 sp|Q9C7S0|BZI60_ARATH bZIP transcription factor 60 OS=Arabid 3.9 11.6 0.8 5.5 11.1 0.6 1.2 1 sp|P78962|ATF21_SCHPO Transcription factor atf21 OS=Schizosa 4 11.5 0.1 6.9 10.7 0.1 1.5 1 sp|Q1LZH5|CREM_BOVIN cAMP-responsive element modulator OS=B 4.2 11.4 0.0 7.3 10.7 0.0 1.3 1 sp|B1MX63|THIE_LEUCK Thiamine-phosphate pyrophosphorylase O 4.6 11.3 2.8 6.7 10.8 2.0 1.2 1 sp|Q5AVK6|NOP16_EMENI Nucleolar protein 16 OS=Emericella nid 4.6 11.3 1.0 5.5 11.1 0.7 1.1 1 sp|Q9ULX9|MAFF_HUMAN Transcription factor MafF OS=Homo sapi 4.6 11.3 0.4 5.7 11.0 0.3 1.2 1 sp|P53567|CEBPG_HUMAN CCAAT/enhancer-binding protein gamma O 4.8 11.2 0.7 21 9.2 0.3 2.1 1 sp|Q2V2M9|FHOD3_HUMAN FH1/FH2 domain-containing protein 3 OS 4.9 11.2 0.1 7.1 10.7 0.1 1.3 1 sp|Q03060|CREM_HUMAN cAMP-responsive element modulator OS=H 4.9 11.2 0.1 11 10.0 0.1 1.5 1 sp|O68007|BACB_BACLI Bacitracin synthase 2 OS=Bacillus lich 5.1 11.2 0.5 7.6 10.6 0.4 1.2 1 sp|Q5VPE3|HOX2_ORYSJ Homeobox-leucine zipper protein HOX2 O 5.1 11.2 0.5 7.6 10.6 0.4 1.2 1 sp|Q84U86|HOX2_ORYSI Homeobox-leucine zipper protein HOX2 O 5.4 11.1 0.0 6.6 10.8 0.0 1.1 1 sp|Q65US7|THIE_MANSM Thiamine-phosphate pyrophosphorylase O 5.4 11.1 0.2 8.6 10.4 0.2 1.2 1 sp|P07948|LYN_HUMAN Tyrosine-protein kinase Lyn OS=Homo sa 5.4 11.1 9.6 1.1 13.4 4.3 1.6 1 sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Homo sapien 5.5 11.1 0.9 6.6 10.8 0.6 1.2 1 sp|Q9XGJ4|GGM13_GNEGN MADS-box protein GGM13 OS=Gnetum gnemo 5.8 11.0 0.6 9.2 10.3 0.4 1.3 1 sp|P27921|JUND_CHICK Transcription factor jun-D OS=Gallus g 5.9 10.9 1.0 8.8 10.4 0.7 1.2 1 sp|Q5XHX8|THEG_RAT Testicular haploid expressed gene prot 6 10.9 2.3 8.7 10.4 1.6 1.2 1 sp|P18847|ATF3_HUMAN Cyclic AMP-dependent transcription fac 6.1 10.9 5.5 8.7 10.4 3.8 1.2 1 sp|P24068|OCS1_MAIZE Ocs element-binding factor 1 OS=Zea ma 6.2 10.9 6.0 11 10.1 4.2 1.3 1 sp|P20393|NR1D1_HUMAN Nuclear receptor subfamily 1 group D m 6.3 10.9 12.2 10 10.2 8.1 1.6 1 sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus GN=Fosb P 6.4 10.8 2.1 13 9.8 1.5 1.4 1 sp|P42775|GBF2_ARATH G-box-binding factor 2 OS=Arabidopsis 6.5 10.8 11.4 20 9.2 7.9 1.8 1 sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS=Schizosac 6.9 10.7 2.2 11 10.0 1.5 1.3 1 sp|P24813|YAP2_YEAST AP-1-like transcription activator YAP2 7 10.7 9.2 1.9 12.5 4.4 1.5 1 sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattus norv 7.3 10.6 0.4 12 9.9 0.3 1.3 1 sp|Q02100|SKO1_YEAST CRE-binding bZIP protein SKO1 OS=Sacch 7.7 10.6 0.0 11 10.0 0.0 1.2 1 sp|P50198|LINX_PSEPA 2,5-dichloro-2,5-cyclohexadiene-1,4-di 7.7 10.6 5.8 10 10.2 4.0 1.1 1 sp|Q6DGM8|JDP2_DANRE Jun dimerization protein 2 OS=Danio re 7.8 10.6 0.5 9.1 10.3 0.4 1.2 1 sp|A2Z0Q0|HOX25_ORYSI Homeobox-leucine zipper protein HOX25 7.9 10.5 0.5 13 9.8 0.3 1.2 1 sp|Q9UPR3|SMG5_HUMAN Protein SMG5 OS=Homo sapiens GN=SMG5 P 8.1 10.5 6.6 1.1 13.3 1.4 1.9 1 sp|Q41558|HBP1C_WHEAT Transcription factor HBP-1b(c1) (Fragm 8.2 10.5 11.7 13 9.9 7.9 1.5 1 sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding protein delta O 8.6 10.4 0.2 17 9.4 0.2 1.4 1 sp|Q63315|CAD22_RAT Cadherin-22 OS=Rattus norvegicus GN=Cd 8.7 10.4 0.2 17 9.4 0.2 1.4 1 sp|Q9WTP5|CAD22_MOUSE Cadherin-22 OS=Mus musculus GN=Cdh22 P 9.3 10.3 3.3 8.4 10.5 0.5 1.8 2 sp|Q5FUV3|ATE_GLUOX Putative arginyl-tRNA--protein transfe 9.5 10.3 5.0 17 9.4 3.5 1.4 1 sp|Q99091|CPRF3_PETCR Light-inducible protein CPRF3 OS=Petro 9.5 10.3 10.3 1.3 13.1 4.4 1.5 1 sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus musculu 9.9 10.2 0.4 17 9.5 0.3 1.4 1 sp|Q9JLC6|TEF_MOUSE Thyrotroph embryonic factor OS=Mus mus 10 10.2 0.5 15 9.6 0.4 1.2 1 sp|Q92172|TEF_CHICK Transcription factor VBP OS=Gallus gal Domain annotation for each sequence (and alignments): >> sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus oryzae GN=hacA PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 762.0 2.4 8.7e-232 2.2e-228 1 345 [] 1 345 [] 1 345 [] 1.00 Alignments for each domain: == domain 1 score: 762.0 bits; conditional E-value: 8.7e-232 sp|Q1XGE2|HAC1_ASPOR 1 lscdlektlssvdslpatpasevpvltvspadtslnsadvktqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrrier 89 +scd+ekt+ssvdslpatpasevpvltvspadtslnsadvktqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrrier sp|Q1XGE2|HAC1_ASPOR 1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER 89 8**************************************************************************************** PP sp|Q1XGE2|HAC1_ASPOR 90 vlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatasptltptlfkqe 178 vlrnraaaqtsrerkrle+eklenekiq+eqqnqfllqrlsq+eaennrlsqqlaqlaaevrgsrantp+pgspatasptltptlfkqe sp|Q1XGE2|HAC1_ASPOR 90 VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE 178 ***************************************************************************************** PP sp|Q1XGE2|HAC1_ASPOR 179 rdelpleripfptpslsdysptlkpstlaessdvaqhpavsvaglegdgsalplfdlgsdlkhhstddvaaplsdddfnrlfhgdssve 267 rdelpleripfptpslsdysptlkpstlaessdvaqhpavsvaglegdgsalplfdlgsdlkhhstddvaaplsdddfnrlfhgdssve sp|Q1XGE2|HAC1_ASPOR 179 RDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVE 267 ***************************************************************************************** PP sp|Q1XGE2|HAC1_ASPOR 268 pdssvfedglafdvleggdlsafpfdslvnfdsepvtlegielahglpdettcktssvqpgfgasttrcdgqgiaagc 345 pdssvfedglafdvleggdlsafpfds+vnfdsepvtlegie+ahglpdettcktssvqpgfgasttrcdgqgiaagc sp|Q1XGE2|HAC1_ASPOR 268 PDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 345 ****************************************************************************** PP >> sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS=Emericella nidulans GN=hacA PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 568.6 1.6 5.8e-173 1.5e-169 11 344 .. 16 348 .. 9 349 .. 0.98 Alignments for each domain: == domain 1 score: 568.6 bits; conditional E-value: 5.8e-173 sp|Q1XGE2|HAC1_ASPOR 11 svdslpatpasevpvltvspadtslnsadvktqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqt 99 +slp tp+ evpvltvspadtsl++ +v q kpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqt sp|Q8TFU8|HAC1_EMENI 16 FANSLPTTPSLEVPVLTVSPADTSLQTKNVVAQ-TKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT 103 4689*************************9876.7****************************************************** PP sp|Q1XGE2|HAC1_ASPOR 100 srerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatasptltptlfkqerdelplerip 188 srerkrle+ekle+eki++eqqnqfllqrl+q+eaennrlsqq+aql+aevrgsr +tp spa+ sptltptlfkqe de+pl+rip sp|Q8TFU8|HAC1_EMENI 104 SRERKRLEMEKLESEKIDMEQQNQFLLQRLAQMEAENNRLSQQVAQLSAEVRGSRHSTPTSSSPASVSPTLTPTLFKQEGDEVPLDRIP 192 ***************************************************************************************** PP sp|Q1XGE2|HAC1_ASPOR 189 fptpslsdysptlkpstlaessdvaqhpavsvaglegdgsalplfdlgsdlkhhstddvaaplsdddfnrlfhgdssvepdssvfedgl 277 fptps++dysptlkps+laes d+ qhpavsv+glegd sal lfdlg+ +kh t d+ aplsdddf+rlf+gdss+e dss+ edg+ sp|Q8TFU8|HAC1_EMENI 193 FPTPSVTDYSPTLKPSSLAESPDLTQHPAVSVGGLEGDESALTLFDLGASIKHEPTHDLTAPLSDDDFRRLFNGDSSLESDSSLLEDGF 281 ***************************************************************************************** PP sp|Q1XGE2|HAC1_ASPOR 278 afdvleggdlsafpfdslvnfdsepvtlegielahglpdettcktssvqpgfgasttrcdgqgiaag 344 afdvl+ gdlsafpfds+v+fd+epvtle +e+ +gl d +ck +s+qp gast+rcdgqgiaag sp|Q8TFU8|HAC1_EMENI 282 AFDVLDSGDLSAFPFDSMVDFDTEPVTLEDLEQTNGLSDSASCKAASLQPSHGASTSRCDGQGIAAG 348 ******************************************************************9 PP >> sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS=Trichoderma reesei GN=hac1 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.4 6.4 5.8e-30 1.5e-26 47 119 .. 82 154 .. 45 184 .. 0.86 2 ? -0.5 0.0 7.1 1.8e+04 209 234 .. 287 308 .. 278 351 .. 0.70 3 ? 3.2 0.0 0.52 1.3e+03 315 344 .. 421 450 .. 356 451 .] 0.83 Alignments for each domain: == domain 1 score: 98.4 bits; conditional E-value: 5.8e-30 sp|Q1XGE2|HAC1_ASPOR 47 peekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqle 119 ekkp kkrkswgq lp pktnlpprkraktedekeqrr+ervlrnr aaq+srerkrle+e le + +le sp|Q8TFF3|HAC1_TRIRE 82 TSEKKPVKKRKSWGQVLPEPKTNLPPRKRAKTEDEKEQRRVERVLRNRRAAQSSRERKRLEVEALEKRNKELE 154 469*************************************************************997765554 PP == domain 2 score: -0.5 bits; conditional E-value: 7.1 sp|Q1XGE2|HAC1_ASPOR 209 ssdvaqhpavsvaglegdgsalplfd 234 s+d q+pavs++g d +a+p+f sp|Q8TFF3|HAC1_TRIRE 287 STDSTQRPAVSIGG---D-AAVPVFS 308 67778888888754...3.5667763 PP == domain 3 score: 3.2 bits; conditional E-value: 0.52 sp|Q1XGE2|HAC1_ASPOR 315 pdettcktssvqpgfgasttrcdgqgiaag 344 ++ + s qp gas+ cd gia g sp|Q8TFF3|HAC1_TRIRE 421 ENQIPSRHSIQQPQSGASSHGCDDGGIAVG 450 455566778889****************98 PP >> sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS=Saccharomyces cerevisiae GN=HAC1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 52.6 3.9 5e-16 1.3e-12 67 119 .. 23 75 .. 12 145 .. 0.85 Alignments for each domain: == domain 1 score: 52.6 bits; conditional E-value: 5e-16 sp|Q1XGE2|HAC1_ASPOR 67 ktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqle 119 k+ lpprkrakt++ekeqrrier+lrnr aa+ sre+krl+l+ le++ le sp|P41546|HAC1_YEAST 23 KSTLPPRKRAKTKEEKEQRRIERILRNRRAAHQSREKKRLHLQYLERKCSLLE 75 789******************************************98765555 PP >> sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabidopsis thaliana GN=HY5 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 46.9 1.8 2.7e-14 6.9e-11 59 153 .. 64 158 .. 49 167 .. 0.89 Alignments for each domain: == domain 1 score: 46.9 bits; conditional E-value: 2.7e-14 sp|Q1XGE2|HAC1_ASPOR 59 wgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147 gqe + rkr++t eke +r++r+lrnr +aq +rerk+ l len+ +le +n l +rls l+ en+ l + l sp|O24646|HY5_ARATH 64 TGQERTQATVGESQRKRGRTPAEKENKRLKRLLRNRVSAQQARERKKAYLSELENRVKDLENKNSELEERLSTLQNENQMLRHILKNTT 152 57777777777789******************************************************************999998888 PP sp|Q1XGE2|HAC1_ASPOR 148 aevrgs 153 + rg+ sp|O24646|HY5_ARATH 153 GNKRGG 158 888876 PP >> sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos taurus GN=XBP1 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 33.9 0.5 2.4e-10 6e-07 68 145 .. 52 139 .. 10 208 .. 0.72 Alignments for each domain: == domain 1 score: 33.9 bits; conditional E-value: 2.4e-10 sp|Q1XGE2|HAC1_ASPOR 68 tnlpp..rkrak.tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfll.......qrlsqleaennrlsqqlaq 145 +++pp rkr + t+ e++ ++r l+nr aaqt+r+rk+ ++ le++ ++le++nq ll ++ l en+ l q+l++ sp|Q3SZZ2|XBP1_BOVIN 52 SGVPPqaRKRQRlTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQKLLlenqllrEKTHGLVVENQELRQRLGM 139 56677334554436778999***********************************999876622211112233455667777776654 PP >> sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanum lycopersicum GN=HY5 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 33.3 3.9 3.7e-10 9.5e-07 72 148 .. 75 151 .. 62 158 .] 0.89 Alignments for each domain: == domain 1 score: 33.3 bits; conditional E-value: 3.7e-10 sp|Q1XGE2|HAC1_ASPOR 72 prkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148 rkr+++ +ke +r++r+lrnr +aq +rerk+ l le + +le +n l +rls l+ en+ l + l a sp|Q9SM50|HY5_SOLLC 75 QRKRGRSPADKENKRLKRLLRNRVSAQQARERKKAYLIDLEARVKELETKNAELEERLSTLQNENQMLRHILKNTTA 151 69*****************************************99********************999887766555 PP >> sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Homo sapiens GN=XBP1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 32.0 2.0 9.4e-10 2.4e-06 72 186 .. 58 185 .. 14 194 .. 0.72 Alignments for each domain: == domain 1 score: 32.0 bits; conditional E-value: 9.4e-10 sp|Q1XGE2|HAC1_ASPOR 72 prkrak.tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfll.......qrlsqleaennrlsqqlaq..la... 147 rkr + t+ e++ ++r l+nr aaqt+r+rk+ ++ le++ ++le++nq ll ++ l en+ l q+l++ l sp|P17861|XBP1_HUMAN 58 ARKRQRlTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQKLLlenqllrEKTHGLVVENQELRQRLGMdaLVaee 146 366655367788999**********************************9998765332111133445667898899888652232122 PP sp|Q1XGE2|HAC1_ASPOR 148 .aevrgsrantplpgspatasptltptlfkqerdelpler 186 ae +g+ p+ gs +a+ l l + + + pl+ sp|P17861|XBP1_HUMAN 147 eAEAKGNEV-RPVAGSAESAALRLRAPLQQVQAQLSPLQN 185 234444433.477788777777777666655555556665 PP >> sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=Arabidopsis thaliana GN=HYH PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 29.6 3.4 4.9e-09 1.2e-05 72 144 .. 67 139 .. 56 146 .. 0.93 Alignments for each domain: == domain 1 score: 29.6 bits; conditional E-value: 4.9e-09 sp|Q1XGE2|HAC1_ASPOR 72 prkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144 r+r++ +ke r ++r+lrnr +aq +rerk++ + le++ +l+ n+ l +++s l en l ++l sp|Q8W191|HYH_ARATH 67 KRRRGRNPVDKEYRSLKRLLRNRVSAQQARERKKVYVSDLESRANELQNNNDQLEEKISTLTNENTMLRKMLI 139 69999*************************************************************9998876 PP >> sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Danio rerio GN=creb3l2 PE=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 28.0 0.0 1.5e-08 3.8e-05 14 155 .. 221 363 .. 208 384 .. 0.80 Alignments for each domain: == domain 1 score: 28.0 bits; conditional E-value: 1.5e-08 sp|Q1XGE2|HAC1_ASPOR 14 slpatpasevpvltvsp.adtslnsadvktqevkpeekkpa.....kkrkswgqelpvpktnlpprkraktedekeqrriervlrnra 95 + pa+p + vl v+p a +sl+s+ + t k + p kr + pvp t lp k +ek ++i+r ++n+ sp|A1L224|CR3L2_DANRE 221 CAPASPTQTPAVLKVAPrAPSSLSSSPLLTAPHKLQGSGPLllteeEKRTLIAEGYPVP-TKLPLSK----AEEKALKKIRRKIKNKI 303 56999999889999999567899999999988888888875222225777778888888.6777544....468999*********** PP sp|Q1XGE2|HAC1_ASPOR 96 aaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsra 155 +aq sr++k+ ++ le + + +n+ l +++ le+ n l qql l a v g sp|A1L224|CR3L2_DANRE 304 SAQESRRKKKEYVDALEKKVETCSNENHELRRKVENLECTNKSLLQQLHSLQAVVAGKVP 363 **********99*****98888999****************************9999644 PP >> sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Mus musculus GN=Creb3l4 PE=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 26.6 1.7 4.1e-08 0.0001 76 147 .. 186 257 .. 114 274 .. 0.85 Alignments for each domain: == domain 1 score: 26.6 bits; conditional E-value: 4.1e-08 sp|Q1XGE2|HAC1_ASPOR 76 aktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147 +e+ ++i+r +rn+ +aq sr+rk+ l+ le++ + +qnq l +++++le +n l +q+ ql sp|Q9D2A5|CR3L4_MOUSE 186 LTKAEERILKKIRRKIRNKQSAQDSRRRKKEYLDGLESRVAACSEQNQKLQRKVQELERQNIFLMEQVRQLQ 257 44456788999*****************************************************99998875 PP >> sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Rattus norvegicus GN=Xbp1 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 26.6 2.2 4.2e-08 0.00011 73 127 .. 52 106 .. 37 148 .. 0.82 Alignments for each domain: == domain 1 score: 26.6 bits; conditional E-value: 4.2e-08 sp|Q1XGE2|HAC1_ASPOR 73 rkrak.tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllq 127 rkr + t+ e++ ++r l+nr aaqt+r+rk+ ++ le++ ++le++nq l q sp|Q9R1S4|XBP1_RAT 52 RKRQRlTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQKL-Q 106 55554267788999***********************************99965.3 PP >> sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper transcription factor F OS=Dictyostelium discoideum GN=bzpF PE=3 S # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 25.2 0.3 1.1e-07 0.00027 46 175 .. 363 498 .. 347 593 .. 0.76 Alignments for each domain: == domain 1 score: 25.2 bits; conditional E-value: 1.1e-07 sp|Q1XGE2|HAC1_ASPOR 46 kpeekkpakkrkswgqelpvpk....tnlpp.rkr.aktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqr 128 k ee k kkrk pv t l p ++e++q+r +r+++nr aaq r+r++ ++ le + +l n + r sp|Q54WN7|BZPF_DICDI 363 KKEEDKSIKKRKFI-SSTPVKGenggTTLIPtTDGgFNMDEERHQKRQRRLVKNREAAQLFRQRQKAYIQDLEKKVSDLTGTNSEFRAR 450 56677777777754.44566431122444440443135677899******************************999******9999** PP sp|Q1XGE2|HAC1_ASPOR 129 lsqleaennrlsqqlaqlaaevrgs.rantplpgspatasptltptlf 175 + l +en + +ql l v + + p gs +t sp+ f sp|Q54WN7|BZPF_DICDI 451 VELLNSENKLIREQLLYLRNFVTQAvSFSFPKGGSNGTNSPSGVADQF 498 *****************9988765415678999999999998665555 PP >> sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Xenopus laevis GN=creb3l2 PE # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 24.7 0.2 1.6e-07 0.0004 60 157 .. 281 373 .. 241 392 .. 0.82 Alignments for each domain: == domain 1 score: 24.7 bits; conditional E-value: 1.6e-07 sp|Q1XGE2|HAC1_ASPOR 60 gqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147 + p+p t lp k +ek ++i+r ++n+ +aq sr++k+ ++ le + +n l +++ le+ n+ l qql +l sp|A2VD01|CR3L2_XENLA 281 AEGYPIP-TKLPLTK----AEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKRVENSSSENSELRKKVEVLESTNRTLLQQLQRLQ 363 5556666.5666543....368999****************************99889999*************************** PP sp|Q1XGE2|HAC1_ASPOR 148 aevrgsrant 157 a v g ++ sp|A2VD01|CR3L2_XENLA 364 AMVTGKVTRS 373 ***9976554 PP >> sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF2 OS=Petroselinum crispum GN=CPRF2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 25.4 3.1 9.1e-08 0.00023 77 162 .. 192 277 .. 187 312 .. 0.87 Alignments for each domain: == domain 1 score: 25.4 bits; conditional E-value: 9.1e-08 sp|Q1XGE2|HAC1_ASPOR 77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgs 162 + d + +r++r+l nr +a+ sr+rk+ ++ le + ql+ +n ll+rl+++ + n + + l a++ ra + sp|Q99090|CPRF2_PETCR 192 RNGDPSDAKRVRRMLSNRESARRSRRRKQAHMTELETQVSQLRVENSSLLKRLTDISQRYNDAAVDNRVLKADIETMRAKVKMAEE 277 56788999*************************************************99999999999999999999999888655 PP >> sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Rattus norvegicus GN=Creb3l3 P # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 24.2 0.2 2.2e-07 0.00056 77 154 .. 233 310 .. 219 328 .. 0.85 Alignments for each domain: == domain 1 score: 24.2 bits; conditional E-value: 2.2e-07 sp|Q1XGE2|HAC1_ASPOR 77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsr 154 +e+ ++i+r +rn+ +aq sr++k+ ++ len+ + qnq l +++ +le +n l +ql +l a v s sp|Q5FVM5|CR3L3_RAT 233 TKYEERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQRKVLHLEKQNLSLLEQLKHLQALVVQST 310 4456788899***********************************************************999876554 PP >> sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mus musculus GN=Xbp1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 24.5 2.2 1.7e-07 0.00044 73 127 .. 52 106 .. 36 135 .. 0.80 Alignments for each domain: == domain 1 score: 24.5 bits; conditional E-value: 1.7e-07 sp|Q1XGE2|HAC1_ASPOR 73 rkrak.tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllq 127 rkr + t+ e++ ++r l+nr aaqt+r+rk+ ++ le++ ++le++n+ l q sp|O35426|XBP1_MOUSE 52 RKRQRlTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENHKL-Q 106 55554267788999*********************************9998754.3 PP >> sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-binding protein 3 OS=Mus musculus GN=Creb3 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 24.5 0.0 1.7e-07 0.00043 80 151 .. 182 253 .. 163 315 .. 0.88 Alignments for each domain: == domain 1 score: 24.5 bits; conditional E-value: 1.7e-07 sp|Q1XGE2|HAC1_ASPOR 80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevr 151 +e+ +r++r +rn+ aaq sr++k++ + le++ ++ qn+ l ++++le +n l +ql +l a v sp|Q61817|CREB3_MOUSE 182 EEQVLKRVRRKIRNKRAAQESRKKKKVYVVGLESRVLKYTAQNRELQNKVQRLEEQNLSLLDQLRKLQAMVI 253 4566799***********************************************************999774 PP >> sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Mus musculus GN=Creb3l3 PE=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 24.1 0.2 2.3e-07 0.00058 77 154 .. 233 310 .. 219 329 .. 0.85 Alignments for each domain: == domain 1 score: 24.1 bits; conditional E-value: 2.3e-07 sp|Q1XGE2|HAC1_ASPOR 77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsr 154 +e+ ++i+r +rn+ +aq sr++k+ ++ len+ + qnq l +++ +le +n l +ql +l a v s sp|Q91XE9|CR3L3_MOUSE 233 TKYEERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQRKVLHLEKQNLSLLEQLKHLQALVVQST 310 4456788899***********************************************************999876554 PP >> sp|O57342|MAFA_COTJA Transcription factor MafA OS=Coturnix coturnix japonica GN=MAFA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? -0.8 0.1 8.7 2.2e+04 156 180 .. 69 93 .. 22 97 .. 0.76 2 ! 24.1 1.4 2.3e-07 0.0006 85 167 .. 201 281 .. 174 285 .. 0.85 Alignments for each domain: == domain 1 score: -0.8 bits; conditional E-value: 8.7 sp|Q1XGE2|HAC1_ASPOR 156 ntplpgspatasptltptlfkqerd 180 p pg+ +a+pt p k + + sp|O57342|MAFA_COTJA 69 CAPSPGGQPSAGPTAAPLGSKPQLE 93 4688888888999988876666655 PP == domain 2 score: 24.1 bits; conditional E-value: 2.3e-07 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatas 167 ++ +r l+nr+ aq++r ++ + + lenek+ql+ q + l q +s+l e++ ++ +laa rg t p +p t + sp|O57342|MAFA_COTJA 201 KQKRRTLKNRGYAQSCRYKRVQQRHILENEKCQLQSQVEQLKQEVSRLAKERDLYKEKYEKLAA--RGFPRETSPPAAPKTTA 281 445699***********988888999************************************98..89888898899998865 PP >> sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Rattus norvegicus GN=Creb3l4 P # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 23.1 2.2 4.8e-07 0.0012 78 148 .. 184 254 .. 165 270 .. 0.83 Alignments for each domain: == domain 1 score: 23.1 bits; conditional E-value: 4.8e-07 sp|Q1XGE2|HAC1_ASPOR 78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148 +e+ ++i+r +rn+ +aq sr+rk+ ++ le++ + +qnq l +++++le +n l q+ ql sp|Q5UEM7|CR3L4_RAT 184 KAEERILKKIRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSEQNQKLQRKVQELERQNISLVAQVHQLQK 254 346788899**************************************************999988888753 PP >> sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Xenopus tropicalis GN=creb3l # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 23.5 0.3 3.5e-07 0.00089 24 151 .. 160 284 .. 150 296 .. 0.76 Alignments for each domain: == domain 1 score: 23.5 bits; conditional E-value: 3.5e-07 sp|Q1XGE2|HAC1_ASPOR 24 pvltvspadtslnsadvk.tqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrlelek 110 pv+ +p l ad+ + + pe ++ qe nlp k +e+ ++++r +rn+ +aq sr+rk+ ++ sp|Q08CW8|CR3L4_XENTR 160 PVCKSTPLPIRLTPADLIaVDALYPELHLTEEEKRLLSQEGVALPNNLPLTK----AEERILKKVRRKIRNKQSAQDSRRRKKEYIDG 243 4444555555566666430344556666555566666677655557888655....3578889999********************** PP sp|Q1XGE2|HAC1_ASPOR 111 lenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevr 151 le++ + qnq l +++ +le +n l ql +l ++ sp|Q08CW8|CR3L4_XENTR 244 LESRVAACSSQNQELHKKVVELEKHNISLITQLRKLQTLIK 284 ********************************999877665 PP >> sp|Q90370|MAFB_COTJA Transcription factor MafB OS=Coturnix coturnix japonica GN=MAFB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 1.5 0.0 1.8 4.5e+03 115 178 .. 15 81 .. 8 103 .. 0.70 2 ! 21.5 1.0 1.4e-06 0.0035 53 149 .. 195 292 .. 168 309 .. 0.71 Alignments for each domain: == domain 1 score: 1.5 bits; conditional E-value: 1.8 sp|Q1XGE2|HAC1_ASPOR 115 kiqleqqnqfllqrlsqle...aennrlsqqlaqlaaevrgsrantpl..pgspatasptltptlfkqe 178 + +e n+f l++++ + ++n+r ++++ +l gs ++tp+ p s +sp+++pt k + sp|Q90370|MAFB_COTJA 15 PLAMEYVNDFDLMKFDVKKeplGRNDRSGRHCTRLQ--PAGSVSSTPIstPCSSVPSSPSFSPTEQKTH 81 567888888888877643312257788888877764..4677777775446777778999999976655 PP == domain 2 score: 21.5 bits; conditional E-value: 1.4e-06 sp|Q1XGE2|HAC1_ASPOR 53 akkrkswgqelpvpktnlpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrls 140 r s q + + l + r+ t+de + ++ +r l+nr+ aq++r ++ + + lenek ql qq + l q +++l e++ sp|Q90370|MAFB_COTJA 195 VEDRFSDDQLVSMSVRELNRHLRGFTKDEVIRlKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVTRLARERDAYK 283 555666666666666667777888999987552556799***********988888999*********************999998877 PP sp|Q1XGE2|HAC1_ASPOR 141 qqlaqlaae 149 ++ +la+ sp|Q90370|MAFB_COTJA 284 LKCEKLASN 292 777777654 PP >> sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Homo sapiens GN=CREB3L3 PE=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.7 0.0 6.1e-07 0.0015 77 161 .. 237 321 .. 222 385 .. 0.85 Alignments for each domain: == domain 1 score: 22.7 bits; conditional E-value: 6.1e-07 sp|Q1XGE2|HAC1_ASPOR 77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpg 161 +e+ ++i+r +rn+ +aq sr++k+ ++ le + + qnq l +++ +le +n l +ql +l a v s + + + g sp|Q68CJ9|CR3L3_HUMAN 237 TKYEERVLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNLSLLEQLKKLQAIVVQSTSKSAQTG 321 345678889*************************************************************998877776666655 PP >> sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive element-binding protein 3-like protein 3-B OS=Danio rerio GN=creb3l3b PE # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.4 0.3 7.4e-07 0.0019 78 160 .. 205 286 .. 190 305 .. 0.85 Alignments for each domain: == domain 1 score: 22.4 bits; conditional E-value: 7.4e-07 sp|Q1XGE2|HAC1_ASPOR 78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplp 160 +e+ ++i+r +rn+ +aq sr++k+ ++ le++ + +n+ l +++ qle n l +ql +l a v + +n p+ sp|Q1LYG4|CR3LB_DANRE 205 KYEERILKKIRRKIRNKQSAQESRKKKKEYIDGLESRMAACSAHNHELQRKVFQLEKCNISLMEQLRRLQALVMNG-SNKPVQ 286 346788899************************************************************9988643.466655 PP >> sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive element-binding protein 3-like protein 3-A OS=Danio rerio GN=creb3l3a PE # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.3 0.4 8.1e-07 0.0021 78 160 .. 205 286 .. 187 305 .. 0.85 Alignments for each domain: == domain 1 score: 22.3 bits; conditional E-value: 8.1e-07 sp|Q1XGE2|HAC1_ASPOR 78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplp 160 +e+ ++i+r +rn+ +aq sr++k+ ++ le++ + +n+ l +++ qle n l +ql +l a v + +n p+ sp|Q502F0|CR3LA_DANRE 205 KYEERILKKIRRKIRNKQSAQESRKKKKEYIDGLESRMAACSAHNHELQRKVFQLEKCNISLMEQLRRLQALVMNG-SNKPVQ 286 446788899************************************************************9988643.466655 PP >> sp|Q90888|MAFB_CHICK Transcription factor MafB OS=Gallus gallus GN=MAFB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 1.5 0.0 1.8 4.5e+03 115 178 .. 15 81 .. 8 103 .. 0.70 2 ! 21.3 1.3 1.7e-06 0.0043 52 149 .. 194 292 .. 167 309 .. 0.71 Alignments for each domain: == domain 1 score: 1.5 bits; conditional E-value: 1.8 sp|Q1XGE2|HAC1_ASPOR 115 kiqleqqnqfllqrlsqle...aennrlsqqlaqlaaevrgsrantpl..pgspatasptltptlfkqe 178 + +e n+f l++++ + ++n+r ++++ +l gs ++tp+ p s +sp+++pt k + sp|Q90888|MAFB_CHICK 15 PLAMEYVNDFDLMKFDVKKeplGRNDRSGRHCTRLQ--PAGSVSSTPIstPCSSVPSSPSFSPTEQKTH 81 567888888888877643312257788888877764..4677777775446777778999999976655 PP == domain 2 score: 21.3 bits; conditional E-value: 1.7e-06 sp|Q1XGE2|HAC1_ASPOR 52 pakkrkswgqelpvpktnlpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrl 139 r s q + + l + r+ t+de + ++ +r l+nr+ aq++r ++ + + lenek ql qq + l q +++l e++ sp|Q90888|MAFB_CHICK 194 SVEDRFSDDQLVSMSVRELNRHLRGFTKDEVIRlKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVTRLARERDAY 282 4555666666666666677777889999997552556799***********988888999*********************99999887 PP sp|Q1XGE2|HAC1_ASPOR 140 sqqlaqlaae 149 ++ +la+ sp|Q90888|MAFB_CHICK 283 KLKCEKLASN 292 7777777654 PP >> sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Bos taurus GN=CREB3L3 PE=2 S # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 23.0 0.1 5e-07 0.0013 77 161 .. 232 316 .. 217 371 .. 0.88 Alignments for each domain: == domain 1 score: 23.0 bits; conditional E-value: 5e-07 sp|Q1XGE2|HAC1_ASPOR 77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpg 161 +e+ ++i+r +rn+ +aq sr++k+ ++ le + + qnq l +++ +le +n l +ql +l a v s + + + g sp|Q3SYZ3|CR3L3_BOVIN 232 TKYEERMLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNLSLLEQLKKLQAIVVQSTSKSAQTG 316 4456788899************************************************************998877766655555 PP >> sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Pongo abelii GN=CREB3L2 PE=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.2 0.1 9.1e-07 0.0023 54 159 .. 270 370 .. 226 388 .. 0.78 Alignments for each domain: == domain 1 score: 22.2 bits; conditional E-value: 9.1e-07 sp|Q1XGE2|HAC1_ASPOR 54 kkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsq 141 kr + p+p t lp k +ek ++i+r ++n+ +aq sr++k+ ++ le + + +n l +++ le n+ l q sp|Q5RCM9|CR3L2_PONAB 270 EKRTLIAEGYPIP-TKLPLTK----SEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQ 352 5555666667776.5676544....468999****************************988889999******************** PP sp|Q1XGE2|HAC1_ASPOR 142 qlaqlaaevrgsrantpl 159 ql +l v g ++t sp|Q5RCM9|CR3L2_PONAB 353 QLQKLQTLVMGKVSRTCK 370 *******99998777754 PP >> sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS=Homo sapiens GN=MAFB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.3 0.2 8.3e-07 0.0021 72 148 .. 226 303 .. 170 321 .. 0.78 Alignments for each domain: == domain 1 score: 22.3 bits; conditional E-value: 8.3e-07 sp|Q1XGE2|HAC1_ASPOR 72 prkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148 + r+ t+de + ++ +r l+nr+ aq++r ++ + + lenek ql qq + l q +s+l e++ ++ +la sp|Q9Y5Q3|MAFB_HUMAN 226 RHLRGFTKDEVIRlKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLAN 303 55677788886541556799***********988888999**********************9999887666655553 PP >> sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Homo sapiens GN=CREB3L2 PE=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.0 0.1 1e-06 0.0027 54 159 .. 270 370 .. 226 388 .. 0.78 Alignments for each domain: == domain 1 score: 22.0 bits; conditional E-value: 1e-06 sp|Q1XGE2|HAC1_ASPOR 54 kkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsq 141 kr + p+p t lp k +ek ++i+r ++n+ +aq sr++k+ ++ le + + +n l +++ le n+ l q sp|Q70SY1|CR3L2_HUMAN 270 EKRTLIAEGYPIP-TKLPLSK----SEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQ 352 5566666667777.6676543....468999****************************988889999******************** PP sp|Q1XGE2|HAC1_ASPOR 142 qlaqlaaevrgsrantpl 159 ql +l v g ++t sp|Q70SY1|CR3L2_HUMAN 353 QLQKLQTLVMGKVSRTCK 370 *******99998777754 PP >> sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS=Xenopus laevis GN=mafb PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 3.2 0.0 0.52 1.3e+03 115 182 .. 15 86 .. 8 100 .. 0.76 2 ! 17.9 0.8 1.7e-05 0.044 70 143 .. 211 285 .. 168 310 .. 0.78 Alignments for each domain: == domain 1 score: 3.2 bits; conditional E-value: 0.52 sp|Q1XGE2|HAC1_ASPOR 115 kiqleqqnqfllqrls.qleaennrlsqqlaql.aaevrgsrantpl..pgspatasptltptlfkqerdel 182 + +e n+f l++++ + e ++r ++ + q+ + gs ++tp+ p s +sp+++pt k + d+l sp|Q6DE84|MAFB_XENLA 15 PLAMEYLNDFDLMKFDvKKEPLGGRPDRAIRQCnRLQPTGSVSSTPIstPCSSVPSSPSFSPTEHKTHLDDL 86 567888888888877624556667777777776234778999999975578888999******999998887 PP == domain 2 score: 17.9 bits; conditional E-value: 1.7e-05 sp|Q1XGE2|HAC1_ASPOR 70 lpprkraktedek.eqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqql 143 l + r+ t+d+ + ++ +r l+nr+ aq++r ++ + + le+ek ql qq + l q +s+l e++ ++ sp|Q6DE84|MAFB_XENLA 211 LNRHLRGFTKDDViRLKQKRRTLKNRGYAQSCRYKRVQQKHNLEGEKTQLVQQVEQLKQEVSRLARERDAYKIKC 285 5555677777765144566799***********99888999**********************999987665554 PP >> sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive element-binding protein 3-like protein 1 OS=Mus musculus GN=Creb3l1 PE=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 21.7 0.0 1.3e-06 0.0032 59 160 .. 271 366 .. 215 434 .. 0.73 Alignments for each domain: == domain 1 score: 21.7 bits; conditional E-value: 1.3e-06 sp|Q1XGE2|HAC1_ASPOR 59 wgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaql 146 + p+p t lp k +ek +r++r ++n+ +aq sr++k+ +e le + +n l +++ le n+ l qql +l sp|Q9Z125|CR3L1_MOUSE 271 IAEGYPIP-TKLPLTK----AEEKALKRVRRKIKNKISAQESRRKKKEYVECLEKKVETYTSENNELWKKVETLETANRTLLQQLQKL 353 55556666.5666543....368999*********************99****9877778899999*******************999 PP sp|Q1XGE2|HAC1_ASPOR 147 aaevrgsrantplp 160 v s+ + p sp|Q9Z125|CR3L1_MOUSE 354 QTLVT-SKISRPYK 366 88775.55555554 PP >> sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Mus musculus GN=Creb3l2 PE=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 21.9 0.0 1.1e-06 0.0028 55 159 .. 271 370 .. 230 391 .. 0.79 Alignments for each domain: == domain 1 score: 21.9 bits; conditional E-value: 1.1e-06 sp|Q1XGE2|HAC1_ASPOR 55 krkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqq 142 kr + p+p t lp k +ek ++i+r ++n+ +aq sr++k+ ++ le + + +n l +++ le n+ l qq sp|Q8BH52|CR3L2_MOUSE 271 KRTLVAEGYPIP-TKLPLTK----SEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQ 353 555555566666.5666543....468999****************************988889999********************* PP sp|Q1XGE2|HAC1_ASPOR 143 laqlaaevrgsrantpl 159 l +l v g ++t sp|Q8BH52|CR3L2_MOUSE 354 LQKLQTLVMGKVSRTCK 370 ******99998777754 PP >> sp|P54842|MAFB_RAT Transcription factor MafB OS=Rattus norvegicus GN=Mafb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.2 0.2 9.1e-07 0.0023 72 148 .. 226 303 .. 172 321 .. 0.78 Alignments for each domain: == domain 1 score: 22.2 bits; conditional E-value: 9.1e-07 sp|Q1XGE2|HAC1_ASPOR 72 prkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148 + r+ t+de + ++ +r l+nr+ aq++r ++ + + lenek ql qq + l q +s+l e++ ++ +la sp|P54842|MAFB_RAT 226 RHLRGFTKDEVIRlKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLAN 303 55677788886541556799***********988888999**********************9999887666655553 PP >> sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element-binding protein 3-like protein 2 OS=Rattus norvegicus GN=Creb3l2 P # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 21.7 0.0 1.3e-06 0.0032 59 159 .. 275 370 .. 234 387 .. 0.81 Alignments for each domain: == domain 1 score: 21.7 bits; conditional E-value: 1.3e-06 sp|Q1XGE2|HAC1_ASPOR 59 wgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147 + p+p t lp k +ek ++i+r ++n+ +aq sr++k+ ++ le + + +n l +++ le n+ l qql +l sp|Q6QDP7|CR3L2_RAT 275 IAEGYPIP-TKLPLTK----SEEKALKKIRRKIKNKISAQESRRKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQ 358 55556666.5666543....468999****************************988889999************************** PP sp|Q1XGE2|HAC1_ASPOR 148 aevrgsrantpl 159 v g ++t sp|Q6QDP7|CR3L2_RAT 359 TLVMGKVSRTCK 370 *99998777754 PP >> sp|Q16520|BATF_HUMAN Basic leucine zipper transcriptional factor ATF-like OS=Homo sapiens GN=BATF PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.1 0.2 9.3e-07 0.0024 71 135 .. 17 78 .. 12 108 .. 0.82 Alignments for each domain: == domain 1 score: 22.1 bits; conditional E-value: 9.3e-07 sp|Q1XGE2|HAC1_ASPOR 71 pprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleae 135 pp k+ + + rr++r +nr aaq sr+r+ + + l+ e +le+qn l + + ql e sp|Q16520|BATF_HUMAN 17 PPGKQ---DSSDDVRRVQRREKNRIAAQKSRQRQTQKADTLHLESEDLEKQNAALRKEIKQLTEE 78 44444...44445799***************************************9999998766 PP >> sp|P54841|MAFB_MOUSE Transcription factor MafB OS=Mus musculus GN=Mafb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.1 0.2 9.1e-07 0.0023 72 148 .. 226 303 .. 172 321 .. 0.79 Alignments for each domain: == domain 1 score: 22.1 bits; conditional E-value: 9.1e-07 sp|Q1XGE2|HAC1_ASPOR 72 prkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148 + r+ t+de + ++ +r l+nr+ aq++r ++ + + lenek ql qq + l q +s+l e++ ++ +la sp|P54841|MAFB_MOUSE 226 RHLRGFTKDEVIRlKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLAN 303 45677788886541556799***********988888999**********************9999887666655553 PP >> sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS=Macaca fascicularis GN=MAFB PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 21.9 0.2 1.1e-06 0.0027 72 147 .. 226 302 .. 170 321 .. 0.77 Alignments for each domain: == domain 1 score: 21.9 bits; conditional E-value: 1.1e-06 sp|Q1XGE2|HAC1_ASPOR 72 prkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147 + r+ t+de + ++ +r l+nr+ aq++r ++ + + lenek ql qq + l q +s+l e++ ++ +la sp|Q2PFS4|MAFB_MACFA 226 RHLRGFTKDEVIRlKQKRRTLKNRGYAQSCRYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAHKVKCEKLA 302 55677788886541556799***********988888999********************99988876554444444 PP >> sp|O42290|MAFA_CHICK Transcription factor MafA OS=Gallus gallus GN=MAFA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? -0.8 0.1 8.7 2.2e+04 156 180 .. 69 93 .. 22 97 .. 0.76 2 ! 21.8 1.6 1.1e-06 0.0029 84 167 .. 200 281 .. 174 286 .] 0.81 Alignments for each domain: == domain 1 score: -0.8 bits; conditional E-value: 8.7 sp|Q1XGE2|HAC1_ASPOR 156 ntplpgspatasptltptlfkqerd 180 p pg+ +a+pt p k + + sp|O42290|MAFA_CHICK 69 CAPSPGGQPSAGPTAAPLGSKPQLE 93 4688888888999988876666655 PP == domain 2 score: 21.8 bits; conditional E-value: 1.1e-06 sp|Q1XGE2|HAC1_ASPOR 84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatas 167 ++ +r l+nr+ aq++r ++ + + lenek+ql+ q + l q +s+l e++ ++ +laa rg p +p t + sp|O42290|MAFA_CHICK 200 LKQNRRTLKNRGYAQSCRYKRVQQRHILENEKCQLQSQVEQLKQEVSRLAKERDLYKEKYEKLAA--RGFPREPSPPAAPKTTA 281 3556799***********988888999****************************9****99998..67655555567776654 PP >> sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcriptional factor ATF-like 3 OS=Homo sapiens GN=BATF3 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 21.6 2.6 1.3e-06 0.0033 70 143 .. 22 95 .. 12 124 .. 0.79 Alignments for each domain: == domain 1 score: 21.6 bits; conditional E-value: 1.3e-06 sp|Q1XGE2|HAC1_ASPOR 70 lpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqql 143 p + + e ++r+++r +nr aaq sr+++ + +kl+ e leq+n +l + +++l e +l++ l sp|Q9NR55|BATF3_HUMAN 22 QPQPQPQQQSPEDDDRKVRRREKNRVAAQRSRKKQTQKADKLHEEYESLEQENTMLRREIGKLTEELKHLTEAL 95 33333334445667788889999*********************************999999998888887766 PP >> sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive element-binding protein 3-like protein 1 OS=Homo sapiens GN=CREB3L1 PE=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 20.7 0.0 2.6e-06 0.0066 60 156 .. 272 362 .. 219 434 .. 0.79 Alignments for each domain: == domain 1 score: 20.7 bits; conditional E-value: 2.6e-06 sp|Q1XGE2|HAC1_ASPOR 60 gqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147 + p+p t lp k +ek +r++r ++n+ +aq sr++k+ +e le + + +n l +++ le n+ l qql +l sp|Q96BA8|CR3L1_HUMAN 272 AEGYPIP-TKLPLTK----AEEKALKRVRRKIKNKISAQESRRKKKEYVECLEKKVETFTSENNELWKKVETLENANRTLLQQLQKLQ 354 5556666.5666543....468999*********************99*****988889999**********************9998 PP sp|Q1XGE2|HAC1_ASPOR 148 aevrgsran 156 v + sp|Q96BA8|CR3L1_HUMAN 355 TLVTNK-IS 362 877543.33 PP >> sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element-binding protein 3-like protein 1 OS=Rattus norvegicus GN=Creb3l1 P # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 21.4 0.0 1.6e-06 0.004 59 160 .. 270 365 .. 215 432 .. 0.76 Alignments for each domain: == domain 1 score: 21.4 bits; conditional E-value: 1.6e-06 sp|Q1XGE2|HAC1_ASPOR 59 wgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147 + p+p t lp k +ek +r++r ++n+ +aq sr++k+ +e le + +n l +++ le n+ l qql +l sp|Q66HA2|CR3L1_RAT 270 IAEGYPIP-TKLPLTK----AEEKALKRVRRKIKNKISAQESRRKKKEYVECLEKKVETYTSENNELWKKVETLETANRTLLQQLQKLQ 353 55556666.5666543....368999*********************99****9877778899999*******************9998 PP sp|Q1XGE2|HAC1_ASPOR 148 aevrgsrantplp 160 v s+ + p sp|Q66HA2|CR3L1_RAT 354 TLVT-SKISRPYK 365 8775.45555543 PP >> sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcription factor ATF-7 OS=Homo sapiens GN=ATF7 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 19.9 2.1 4.4e-06 0.011 46 141 .. 310 401 .. 285 419 .. 0.69 Alignments for each domain: == domain 1 score: 19.9 bits; conditional E-value: 4.4e-06 sp|Q1XGE2|HAC1_ASPOR 46 kpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqlea 134 p+ pa+ + s q p p t+ r+r +++ ++rr + + rnraaa +r++++l + le + +l qn l ++ l+ sp|P17544|ATF7_HUMAN 310 HPDAPSPAQPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEKKAEELTSQNIQLSNEVTLLRN 394 4666777777766555..788886..344444444455666566669********************9999999999777776666665 PP sp|Q1XGE2|HAC1_ASPOR 135 ennrlsq 141 e +l q sp|P17544|ATF7_HUMAN 395 EVAQLKQ 401 5555554 PP >> sp|O43889|CREB3_HUMAN Cyclic AMP-responsive element-binding protein 3 OS=Homo sapiens GN=CREB3 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 20.2 0.6 3.6e-06 0.0092 77 150 .. 169 241 .. 157 255 .. 0.89 Alignments for each domain: == domain 1 score: 20.2 bits; conditional E-value: 3.6e-06 sp|Q1XGE2|HAC1_ASPOR 77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaev 150 kte e+ +r++r +rn+ +aq sr++k++ + le++ ++ qn+ l +++ le +n l +ql +l a v sp|O43889|CREB3_HUMAN 169 KTE-EQILKRVRRKIRNKRSAQESRRKKKVYVGGLESRVLKYTAQNMELQNKVQLLEEQNLSLLDQLRKLQAMV 241 555.456789*********************************************************9998876 PP >> sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcription factor ATF-7 OS=Mus musculus GN=Atf7 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 20.9 1.5 2.1e-06 0.0054 46 140 .. 299 389 .. 274 401 .. 0.68 Alignments for each domain: == domain 1 score: 20.9 bits; conditional E-value: 2.1e-06 sp|Q1XGE2|HAC1_ASPOR 46 kpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqlea 134 p+ pa+ + s q p p t+ r+r +++ ++rr + + rnraaa +r++++l + le + +l qn l ++ l+ sp|Q8R0S1|ATF7_MOUSE 299 HPDAPSPAQPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEKKAEELTSQNIQLSNEVTLLRN 383 4666777777766555..788886..344444444455666566669********************9999999999777766666665 PP sp|Q1XGE2|HAC1_ASPOR 135 ennrls 140 e +l sp|Q8R0S1|ATF7_MOUSE 384 EVAQLK 389 555554 PP >> sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcription factor ATF-7 OS=Pongo abelii GN=ATF7 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 19.6 2.2 5.4e-06 0.014 46 141 .. 299 390 .. 275 408 .. 0.70 Alignments for each domain: == domain 1 score: 19.6 bits; conditional E-value: 5.4e-06 sp|Q1XGE2|HAC1_ASPOR 46 kpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqlea 134 p+ pa+ + s q p p t+ r+r +++ ++rr + + rnraaa +r++++l + le + +l qn l ++ l+ sp|Q5R9C9|ATF7_PONAB 299 HPDAPSPAQPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEKKAEELTSQNIQLSNEVTLLRN 383 4666677777766555..788886..344444444455666566669********************9999999999777776666665 PP sp|Q1XGE2|HAC1_ASPOR 135 ennrlsq 141 e +l q sp|Q5R9C9|ATF7_PONAB 384 EVAQLKQ 390 5555554 PP >> sp|O35284|BATF_MOUSE Basic leucine zipper transcriptional factor ATF-like OS=Mus musculus GN=Batf PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 20.5 0.1 3e-06 0.0076 71 135 .. 17 78 .. 12 107 .. 0.82 Alignments for each domain: == domain 1 score: 20.5 bits; conditional E-value: 3e-06 sp|Q1XGE2|HAC1_ASPOR 71 pprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleae 135 pp k+ + + r+++r +nr aaq sr+r+ + + l+ e +le+qn l + + ql e sp|O35284|BATF_MOUSE 17 PPGKQDSS---DDVRKVQRREKNRIAAQKSRQRQTQKADTLHLESEDLEKQNAALRKEIKQLTEE 78 55554444...45688999999*********************************9999998766 PP >> sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive element-binding protein 3 OS=Bos taurus GN=CREB3 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 19.8 0.2 4.8e-06 0.012 79 151 .. 149 221 .. 134 274 .. 0.88 Alignments for each domain: == domain 1 score: 19.8 bits; conditional E-value: 4.8e-06 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevr 151 +e+ +r++r +rn+ +aq sr++k++ + le++ ++ qn l +++ le +n l +ql +l a v sp|Q8SQ19|CREB3_BOVIN 149 MEEQVLKRVRRKIRNKKSAQESRRKKKVYVGGLESRVLKYTAQNLELQNKVQLLEEQNLSLLDQLRRLQAMVI 221 3466779***************************************9999*99***************99875 PP >> sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Homo sapiens GN=CREB3L4 PE=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 19.6 3.7 5.5e-06 0.014 78 150 .. 212 284 .. 191 299 .. 0.85 Alignments for each domain: == domain 1 score: 19.6 bits; conditional E-value: 5.5e-06 sp|Q1XGE2|HAC1_ASPOR 78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaev 150 +e+ ++++r +rn+ +aq sr+rk+ ++ le++ + qnq l +++++le +n l ql ql + sp|Q8TEY5|CR3L4_HUMAN 212 KAEERVLKKVRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSAQNQELQKKVQELERHNISLVAQLRQLQTLI 284 346788899******************************************************9999997654 PP >> sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcriptional factor ATF-like 3 OS=Mus musculus GN=Batf3 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 19.9 2.9 4.6e-06 0.012 81 143 .. 26 88 .. 12 96 .. 0.86 Alignments for each domain: == domain 1 score: 19.9 bits; conditional E-value: 4.6e-06 sp|Q1XGE2|HAC1_ASPOR 81 ekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqql 143 + ++r+++r +nr aaq sr+++ + +kl+ e leq+n l + +s+l+ e ++ls+ l sp|Q9D275|BATF3_MOUSE 26 KDDDRKVRRREKNRVAAQRSRKKQTQKADKLHEEHESLEQENSVLRREISKLKEELRHLSEVL 88 335677888889*****************************************9999998766 PP >> sp|Q504L8|MAFB_XENTR Transcription factor MafB OS=Xenopus tropicalis GN=mafb PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 1.9 0.0 1.3 3.3e+03 116 182 .. 16 86 .. 8 100 .. 0.70 2 ? 18.5 1.1 1.2e-05 0.029 54 147 .. 201 295 .. 173 314 .. 0.66 Alignments for each domain: == domain 1 score: 1.9 bits; conditional E-value: 1.3 sp|Q1XGE2|HAC1_ASPOR 116 iqleqqnqfllqrls.qleaennrlsqqlaql.aaevrgsrantpl..pgspatasptltptlfkqerdel 182 + +e n+f l++++ + e ++r ++ + + + gs ++tp+ p s +sp+++pt k + del sp|Q504L8|MAFB_XENTR 16 LAMEYVNDFDLMKFDvKKEPLGGRPDRAIRPCnRLQPTGSVSSTPIstPCSSVPSSPSFSPTEQKTHMDEL 86 56677777766666523444555555555444134667888888864577888899999999999999997 PP == domain 2 score: 18.5 bits; conditional E-value: 1.2e-05 sp|Q1XGE2|HAC1_ASPOR 54 kkrkswgqelpvpktnlpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsq 141 r s q + + l + r+ t+d+ + ++ +r l+nr+ aq++r ++ + + lenek ql qq + l +s+l e++ sp|Q504L8|MAFB_XENTR 201 EDRFSDDQLVSMSVRELNRHLRGFTKDDVIRlKQKRRTLKNRGYAQSCRFKRVQQKHHLENEKTQLIQQVEQLKLEVSRLARERDAYKI 289 55555555555555666667788887775441566799***********988888999********99998888888888888776655 PP sp|Q1XGE2|HAC1_ASPOR 142 qlaqla 147 ++ +la sp|Q504L8|MAFB_XENTR 290 KCEKLA 295 444444 PP >> sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Macaca fascicularis GN=CREB3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 19.8 3.6 4.8e-06 0.012 78 150 .. 212 284 .. 191 299 .. 0.85 Alignments for each domain: == domain 1 score: 19.8 bits; conditional E-value: 4.8e-06 sp|Q1XGE2|HAC1_ASPOR 78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaev 150 +e+ ++++r +rn+ +aq sr+rk+ ++ le++ + qnq l +++++le +n l ql ql + sp|Q5UEM8|CR3L4_MACFA 212 KAEERVLKKVRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSAQNQELQKKVQELERHNISLVAQLRQLQTLI 284 346788899******************************************************9999997654 PP >> sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS=Xenopus tropicalis GN=mafa PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.7 1.5 1e-05 0.026 85 167 .. 203 284 .. 181 288 .. 0.83 Alignments for each domain: == domain 1 score: 18.7 bits; conditional E-value: 1e-05 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatas 167 ++ +r l+nr+ aq++r ++ + + le ek+ql+ q + l q +s+l e++ ++ +la++ +r + p g+p+ a+ sp|Q4U1U2|MAFA_XENTR 203 KQKRRTLKNRGYAQSCRYKRVQQRHILETEKCQLQSQVEQLKQEVSRLAKERDLYKDKYEKLASRSFTTRES-PPQGNPGKAN 284 445699***********988888999***************************99999999*9998888765.5568888775 PP >> sp|P23091|MAF_AVIS4 Transforming protein Maf OS=Avian musculoaponeurotic fibrosarcoma virus AS42 GN=V-MAF PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 1.8 0.0 1.4 3.7e+03 114 168 .. 15 68 .. 6 80 .. 0.72 2 ? 15.1 1.3 0.00013 0.32 85 148 .. 276 339 .. 253 362 .. 0.78 Alignments for each domain: == domain 1 score: 1.8 bits; conditional E-value: 1.4 sp|Q1XGE2|HAC1_ASPOR 114 ekiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspatasp 168 + +e n+f l+++ + e +r+ q+++l a gs ++tp+ +p+++ p sp|P23091|MAF_AVIS4 15 SPLAMEYVNDFDLMKFEvkKEPVETDRIISQCGRLIA--GGSLSSTPMS-TPCSSVP 68 5678999999988886511455799999999999987..5999999994.3444333 PP == domain 2 score: 15.1 bits; conditional E-value: 0.00013 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148 ++ +r l+nr+ aq++r ++ + + le+ek ql qq + l q +s+l e++ ++ +l + sp|P23091|MAF_AVIS4 276 KQKRRTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVEHLKQEISRLVRERDAYKEKYEKLVS 339 445699***********988889999**********************9999988887777765 PP >> sp|P81269|ATF1_MOUSE Cyclic AMP-dependent transcription factor ATF-1 OS=Mus musculus GN=Atf1 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.7 0.3 1e-05 0.026 75 131 .. 204 259 .. 167 265 .. 0.84 Alignments for each domain: == domain 1 score: 18.7 bits; conditional E-value: 1e-05 sp|Q1XGE2|HAC1_ASPOR 75 raktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 kt+d + rr r+++nr aa+ +r++k+ ++ len+ le qn+ l++ l sp|P81269|ATF1_MOUSE 204 TTKTDDPQ-LRREIRLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKT 259 46776665.566669************99999999****************998865 PP >> sp|Q789F3|MAF_CHICK Transcription factor Maf OS=Gallus gallus GN=MAF PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 1.8 0.0 1.4 3.5e+03 114 168 .. 15 68 .. 6 81 .. 0.72 2 ? 14.9 1.2 0.00015 0.38 85 148 .. 276 339 .. 254 357 .. 0.79 Alignments for each domain: == domain 1 score: 1.8 bits; conditional E-value: 1.4 sp|Q1XGE2|HAC1_ASPOR 114 ekiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspatasp 168 + +e n+f l+++ + e +r+ q+++l a gs ++tp+ +p+++ p sp|Q789F3|MAF_CHICK 15 SPLAMEYVNDFDLMKFEvkKEPVETDRIISQCGRLIA--GGSLSSTPMS-TPCSSVP 68 5678999999988886511455799999999999987..5999999994.3443333 PP == domain 2 score: 14.9 bits; conditional E-value: 0.00015 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148 ++ +r l+nr+ aq++r ++ + + le+ek ql qq + l q +s+l e++ ++ +l + sp|Q789F3|MAF_CHICK 276 KQKRRTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVEHLKQEISRLVRERDAYKEKYEKLVS 339 445699***********988889999**********************9999988877766654 PP >> sp|P29747|CREBA_DROME Cyclic AMP response element-binding protein A OS=Drosophila melanogaster GN=CrebA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.0 0.1 1.6e-05 0.042 64 149 .. 427 507 .. 383 513 .. 0.84 Alignments for each domain: == domain 1 score: 18.0 bits; conditional E-value: 1.6e-05 sp|Q1XGE2|HAC1_ASPOR 64 pvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaae 149 p+p+ lp k +ek ++i+r ++n+ +aq sr++k+ +++le++ l +n+ +rl le n l ql +l a sp|P29747|CREBA_DROME 427 PIPQ-KLPLTK----AEEKSLKKIRRKIKNKISAQESRRKKKEYMDQLERRVEILVTENHDYKKRLEGLEETNANLLSQLHKLQAL 507 5554.344322....4689999***************************98777788899999*******9999999999998775 PP >> sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcription factor ATF-4 OS=Homo sapiens GN=ATF4 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.3 0.3 1.3e-05 0.034 75 155 .. 270 346 .. 242 351 .] 0.80 Alignments for each domain: == domain 1 score: 18.3 bits; conditional E-value: 1.3e-05 sp|Q1XGE2|HAC1_ASPOR 75 raktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsra 155 ak + ek +++++++ +n+ aa r++kr e+e l +e +le++n+ l +r + l e q l +l evr +r+ sp|P18848|ATF4_HUMAN 270 AAKVKGEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKNEALKERADSLAKEI----QYLKDLIEEVRKARG 346 48999*************************************************99987775....445555555655554 PP >> sp|P54844|MAF_RAT Transcription factor Maf OS=Rattus norvegicus GN=Maf PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 2.0 0.0 1.2 3.1e+03 113 168 .. 14 68 .. 5 87 .. 0.74 2 ? 15.1 0.9 0.00013 0.33 85 148 .. 286 349 .. 264 368 .. 0.78 Alignments for each domain: == domain 1 score: 2.0 bits; conditional E-value: 1.2 sp|Q1XGE2|HAC1_ASPOR 113 nekiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspatasp 168 + +e n+f l+++ + e +r+ q+++l a gs ++tp+ +p+++ p sp|P54844|MAF_RAT 14 TSPLAMEYVNDFDLMKFEvkKEPVETDRIISQCGRLIA--GGSLSSTPMS-TPCSSVP 68 56678999999988886511456799999999999987..5999999994.3443333 PP == domain 2 score: 15.1 bits; conditional E-value: 0.00013 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148 ++ +r l+nr+ aq++r ++ + + le+ek ql qq + l q +s+l e++ ++ +l + sp|P54844|MAF_RAT 286 KQKRRTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVDHLKQEISRLVRERDAYKEKYEKLVS 349 445699***********988889999**********************9999988887777654 PP >> sp|O75444|MAF_HUMAN Transcription factor Maf OS=Homo sapiens GN=MAF PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 1.9 0.0 1.3 3.4e+03 113 168 .. 14 68 .. 5 80 .. 0.72 2 ? 14.7 1.0 0.00017 0.43 85 147 .. 290 352 .. 268 371 .. 0.78 Alignments for each domain: == domain 1 score: 1.9 bits; conditional E-value: 1.3 sp|Q1XGE2|HAC1_ASPOR 113 nekiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspatasp 168 + +e n+f l+++ + e +r+ q+++l a gs ++tp+ +p+++ p sp|O75444|MAF_HUMAN 14 TSPLAMEYVNDFDLMKFEvkKEPVETDRIISQCGRLIA--GGSLSSTPMS-TPCSSVP 68 56678999999988886511456799999999999987..5999999994.3444333 PP == domain 2 score: 14.7 bits; conditional E-value: 0.00017 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147 ++ +r l+nr+ aq++r ++ + + le+ek ql qq + l q +s+l e++ ++ +l sp|O75444|MAF_HUMAN 290 KQKRRTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVDHLKQEISRLVRERDAYKEKYEKLV 352 445699***********988889999**********************999998877766665 PP >> sp|P97876|BATF3_RAT Basic leucine zipper transcriptional factor ATF-like 3 OS=Rattus norvegicus GN=Batf3 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.4 2.3 1.2e-05 0.032 81 143 .. 26 88 .. 14 96 .. 0.86 Alignments for each domain: == domain 1 score: 18.4 bits; conditional E-value: 1.2e-05 sp|Q1XGE2|HAC1_ASPOR 81 ekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqql 143 + ++r+++r +nr aaq sr+++ + +kl+ e leq+n l + +++l+ e ++l++ l sp|P97876|BATF3_RAT 26 KDDDRKVRRREKNRVAAQRSRKKQTQKSDKLHEEHESLEQENSVLRREIAKLKEELRHLTEAL 88 335677888889***************************************999998888766 PP >> sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcription factor ATF-4 OS=Mus musculus GN=Atf4 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.8 0.2 9.7e-06 0.025 63 155 .. 254 344 .. 220 349 .] 0.80 Alignments for each domain: == domain 1 score: 18.8 bits; conditional E-value: 9.7e-06 sp|Q1XGE2|HAC1_ASPOR 63 lpvpktnlppr..kraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaae 149 p pk pp ak + ek +++++++ +n+ aa r++kr e+e l +e +le++n+ l ++ + l e q l +l e sp|Q06507|ATF4_MOUSE 254 SPRPKPYDPPGvsLTAKVKTEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKNEALKEKADSLAKEI----QYLKDLIEE 338 477777778862257999**********************************************999988887665....445555556 PP sp|Q1XGE2|HAC1_ASPOR 150 vrgsra 155 vr +r+ sp|Q06507|ATF4_MOUSE 339 VRKARG 344 665554 PP >> sp|A7Z017|MAF_BOVIN Transcription factor Maf OS=Bos taurus GN=MAF PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 1.9 0.0 1.4 3.5e+03 113 168 .. 14 68 .. 5 80 .. 0.72 2 ? 14.7 1.0 0.00017 0.43 85 147 .. 294 356 .. 272 375 .. 0.78 Alignments for each domain: == domain 1 score: 1.9 bits; conditional E-value: 1.4 sp|Q1XGE2|HAC1_ASPOR 113 nekiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspatasp 168 + +e n+f l+++ + e +r+ q+++l a gs ++tp+ +p+++ p sp|A7Z017|MAF_BOVIN 14 TSPLAMEYVNDFDLMKFEvkKEPVETDRIISQCGRLIA--GGSLSSTPMS-TPCSSVP 68 56678999999988886511456799999999999987..5999999994.3444333 PP == domain 2 score: 14.7 bits; conditional E-value: 0.00017 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147 ++ +r l+nr+ aq++r ++ + + le+ek ql qq + l q +s+l e++ ++ +l sp|A7Z017|MAF_BOVIN 294 KQKRRTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVDHLKQEISRLVRERDAYKEKYEKLV 356 445699***********988889999**********************999998877766665 PP >> sp|Q0V9K1|MAF_XENTR Transcription factor Maf OS=Xenopus tropicalis GN=maf PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 2.0 0.0 1.2 3.2e+03 113 168 .. 14 68 .. 5 78 .. 0.72 2 ? 14.4 1.2 0.00021 0.53 85 146 .. 267 328 .. 245 349 .. 0.78 Alignments for each domain: == domain 1 score: 2.0 bits; conditional E-value: 1.2 sp|Q1XGE2|HAC1_ASPOR 113 nekiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspatasp 168 + +e n+f l+++ + e +r+ q+++l a gs ++tp+ +p+++ p sp|Q0V9K1|MAF_XENTR 14 TSPLAMEYVNDFDLMKFEvkKEPVETDRIISQCGRLIA--GGSLSSTPMS-TPCSSVP 68 56678999999988886511456799999999999987..5999999994.4444333 PP == domain 2 score: 14.4 bits; conditional E-value: 0.00021 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaql 146 ++ +r l+nr+ aq++r ++ + + le+ek ql qq + l q +s+l e++ ++ +l sp|Q0V9K1|MAF_XENTR 267 KQKRRTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVEHLKQEISRLLRERDAYKEKYEKL 328 445699***********988889999*********************999988777666554 PP >> sp|Q08DA8|ATF1_BOVIN Cyclic AMP-dependent transcription factor ATF-1 OS=Bos taurus GN=ATF1 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 17.9 0.2 1.9e-05 0.047 74 131 .. 204 260 .. 165 268 .. 0.83 Alignments for each domain: == domain 1 score: 17.9 bits; conditional E-value: 1.9e-05 sp|Q1XGE2|HAC1_ASPOR 74 kraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 + +kt+d + +r i r+++nr aa+ +r++k+ ++ len+ le qn+ l++ l sp|Q08DA8|ATF1_BOVIN 204 QTSKTDDPQLKREI-RLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKT 260 45788887776666.89***********99999999****************998865 PP >> sp|O60675|MAFK_HUMAN Transcription factor MafK OS=Homo sapiens GN=MAFK PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.5 0.2 1.2e-05 0.03 78 166 .. 45 134 .. 9 155 .. 0.76 Alignments for each domain: == domain 1 score: 18.5 bits; conditional E-value: 1.2e-05 sp|Q1XGE2|HAC1_ASPOR 78 tedek.eqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspat 165 t++e + ++ +r l+nr+ a ++r ++ + e le+++++l+q+ + l + s ++ e + l + l r + p at sp|O60675|MAFK_HUMAN 45 TKEEVtRLKQRRRTLKNRGYAASCRIKRVTQKEELERQRVELQQEVEKLARENSSMRLELDALRSKYEALQTFARTVARGPVAPSKVAT 133 44433023445699************9999****************************9999998887777766654333333444444 PP sp|Q1XGE2|HAC1_ASPOR 166 a 166 sp|O60675|MAFK_HUMAN 134 T 134 3 PP >> sp|P54843|MAF_MOUSE Transcription factor Maf OS=Mus musculus GN=Maf PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 1.9 0.0 1.3 3.3e+03 113 168 .. 14 68 .. 5 80 .. 0.72 2 ? 14.5 1.1 0.00019 0.48 85 148 .. 287 350 .. 265 368 .. 0.78 Alignments for each domain: == domain 1 score: 1.9 bits; conditional E-value: 1.3 sp|Q1XGE2|HAC1_ASPOR 113 nekiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspatasp 168 + +e n+f l+++ + e +r+ q+++l a gs ++tp+ +p+++ p sp|P54843|MAF_MOUSE 14 TSPLAMEYVNDFDLMKFEvkKEPVETDRIISQCGRLIA--GGSLSSTPMS-TPCSSVP 68 56778999999988886511456799999999999987..5999999994.3444333 PP == domain 2 score: 14.5 bits; conditional E-value: 0.00019 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148 ++ +r l+nr+ aq++r ++ + + le+ek ql qq + l q +s+l e++ ++ +l + sp|P54843|MAF_MOUSE 287 KQKRRTLKNRGYAQSCRFKRVQQRHVLESEKNQLLQQVDHLKQEISRLVRERDAYKEKYEKLVS 350 445699***********988889999**********************9999988877766654 PP >> sp|P18846|ATF1_HUMAN Cyclic AMP-dependent transcription factor ATF-1 OS=Homo sapiens GN=ATF1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 17.8 0.2 2e-05 0.05 74 131 .. 205 261 .. 166 269 .. 0.83 Alignments for each domain: == domain 1 score: 17.8 bits; conditional E-value: 2e-05 sp|Q1XGE2|HAC1_ASPOR 74 kraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 + kt+d + +r i r+++nr aa+ +r++k+ ++ len+ le qn+ l++ l sp|P18846|ATF1_HUMAN 205 QTTKTDDPQLKREI-RLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKT 261 45788887766666.89***********99999999****************998865 PP >> sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Arabidopsis thaliana GN=GBF1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.1 1.3 1.5e-05 0.039 77 142 .. 216 281 .. 176 302 .. 0.82 Alignments for each domain: == domain 1 score: 18.1 bits; conditional E-value: 1.5e-05 sp|Q1XGE2|HAC1_ASPOR 77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqq 142 +de+e +r +r nr +a+ sr rk+ e+e+l+++ l +nq l + l++l +e ++l + sp|P42774|GBF1_ARATH 216 PVKDERELKRQKRKQSNRESARRSRLRKQAECEQLQQRVESLSNENQSLRDELQRLSSECDKLKSE 281 5689********************************998899999999976666666666555433 PP >> sp|Q61827|MAFK_MOUSE Transcription factor MafK OS=Mus musculus GN=Mafk PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.1 0.3 1.5e-05 0.039 78 165 .. 45 133 .. 9 155 .. 0.76 Alignments for each domain: == domain 1 score: 18.1 bits; conditional E-value: 1.5e-05 sp|Q1XGE2|HAC1_ASPOR 78 tedek.eqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspat 165 t++e + ++ +r l+nr+ a ++r ++ + e le+++++l+q+ + l + s ++ e + l + l r + p at sp|Q61827|MAFK_MOUSE 45 TKEEVtRLKQRRRTLKNRGYAASCRIKRVTQKEELERQRVELQQEVEKLARENSSMRLELDALRSKYEALQTFARTVARGPVTPTKVAT 133 44433023445699************9999**************************999999988877776665543333223333333 PP >> sp|P14233|TGA1B_TOBAC TGACG-sequence-specific DNA-binding protein TGA-1B (Fragment) OS=Nicotiana tabacum GN=TGA1B PE # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 17.6 0.6 2.3e-05 0.058 80 140 .. 181 240 .. 166 242 .] 0.83 Alignments for each domain: == domain 1 score: 17.6 bits; conditional E-value: 2.3e-05 sp|Q1XGE2|HAC1_ASPOR 80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrls 140 de e++r r++rnr +aq sr+rk+ +e le++ ++ q l +++ + aen l sp|P14233|TGA1B_TOBAC 181 DEDEKKR-ARLVRNRESAQLSRQRKKHYVEELEDKVRIMHSTIQDLNAKVAYIIAENATLK 240 5555555.6899*********************9877788899999999999999998775 PP >> sp|Q6NW59|ATF4_DANRE Cyclic AMP-dependent transcription factor ATF-4 OS=Danio rerio GN=atf4 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 17.0 0.4 3.4e-05 0.086 47 144 .. 230 327 .. 200 338 .. 0.75 Alignments for each domain: == domain 1 score: 17.0 bits; conditional E-value: 3.4e-05 sp|Q1XGE2|HAC1_ASPOR 47 peekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleae 135 + p+ + k + + p l r + + k +++++++ +n+ aa r++kr+e+e l +e +le++n+ l ++ + l e sp|Q6NW59|ATF4_DANRE 230 QSDLEPSSRAKPYSRPDPEASPALKGRVKTSSGAPKVEKKLKKMEQNKTAATRYRQKKRVEQESLNSECSELEKKNRELSEKADSLSRE 318 55667888888888766666666666666666778999**************************************9998888877766 PP sp|Q1XGE2|HAC1_ASPOR 136 nnrlsqqla 144 + l + l sp|Q6NW59|ATF4_DANRE 319 IQYLRDLLE 327 655544443 PP >> sp|O24160|TGA21_TOBAC TGACG-sequence-specific DNA-binding protein TGA-2.1 OS=Nicotiana tabacum GN=TGA21 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 16.2 1.6 6.1e-05 0.15 82 133 .. 165 215 .. 155 236 .. 0.79 Alignments for each domain: == domain 1 score: 16.2 bits; conditional E-value: 6.1e-05 sp|Q1XGE2|HAC1_ASPOR 82 keqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqle 133 +q+ ++r+ +nr aa+ sr rk+ +++len +++l q q l qr q+ sp|O24160|TGA21_TOBAC 165 LDQKTLRRLAQNREAARKSRLRKKAYVQQLENSRLKLSQLEQDL-QRARQQG 215 4788899999***************************9999975.6665543 PP >> sp|Q98UK4|MAF_DANRE Transcription factor Maf OS=Danio rerio GN=maf PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? -0.1 0.0 5.2 1.3e+04 115 165 .. 16 65 .. 5 86 .. 0.60 2 ? 15.7 1.3 8.2e-05 0.21 85 144 .. 243 302 .. 221 324 .. 0.81 Alignments for each domain: == domain 1 score: -0.1 bits; conditional E-value: 5.2 sp|Q1XGE2|HAC1_ASPOR 115 kiqleqqnqfllqrls..qleaennrlsqqlaqlaaevrgsrantplpgspat 165 + +e n+f l+++ + e +r q+++l a gs ++tp+ +p++ sp|Q98UK4|MAF_DANRE 16 PLAMEYVNDFDLMKFEvkKEPVEPDRSISQCSRLIA--GGSLSSTPMS-TPCS 65 556677777766665311233455555555555554..4667777773.3333 PP == domain 2 score: 15.7 bits; conditional E-value: 8.2e-05 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144 ++ +r l+nr+ aq++r ++ + + le+ek ql qq + l q +s+l e++ ++ sp|Q98UK4|MAF_DANRE 243 KQKRRTLKNRGYAQSCRYKRVQQRHVLEGEKTQLMQQVDHLKQEISRLVRERDAYKEKYE 302 445699***********988889999*********************9999887766655 PP >> sp|A3KMR8|MAFA_DANRE Transcription factor MafA OS=Danio rerio GN=mafa PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 16.7 0.6 4.2e-05 0.11 85 165 .. 225 305 .. 200 315 .] 0.83 Alignments for each domain: == domain 1 score: 16.7 bits; conditional E-value: 4.2e-05 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspat 165 ++ +r l+nr+ aq++r ++ + + le+ek+ l+ q + l q +++l e++ ++ +la++ + +nt p s sp|A3KMR8|MAFA_DANRE 225 KQKRRTLKNRGYAQSCRYKRVQQRHMLESEKCTLQSQVEQLKQDVARLIKERDLYKEKYEKLASRAFNGGGNTRDPSSGNH 305 445699***********998889999**************************************99999999988877554 PP >> sp|Q90596|MAFK_CHICK Transcription factor MafK OS=Gallus gallus GN=MAFK PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 16.9 0.5 3.5e-05 0.09 84 164 .. 52 132 .. 31 154 .. 0.74 Alignments for each domain: == domain 1 score: 16.9 bits; conditional E-value: 3.5e-05 sp|Q1XGE2|HAC1_ASPOR 84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspa 164 ++ +r l+nr+ a ++r ++ + e le+++++l+q+ + l + s ++ e + l + l r + p a sp|Q90596|MAFK_CHICK 52 LKQRRRTLKNRGYAASCRIKRVTQKEELERQRVELQQEVEKLARENSSMKLELDALRSKYEALQTFARTVARGPITPTKVA 132 3344699************9999***************************9999998887777666554333222233333 PP >> sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcription factor ATF-4 OS=Bos taurus GN=ATF4 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 16.4 0.3 5.2e-05 0.13 75 145 .. 267 337 .. 228 346 .. 0.86 Alignments for each domain: == domain 1 score: 16.4 bits; conditional E-value: 5.2e-05 sp|Q1XGE2|HAC1_ASPOR 75 raktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaq 145 ak + ek +++++++ +n+ aa r++kr e+e l +e +le++n+ l ++ + l e + l +q+ + sp|Q3ZCH6|ATF4_BOVIN 267 AAKVKGEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKNEALKEKADSLAKEIQYLKDQIEE 337 48999**********************************************99999999888888887754 PP >> sp|P97875|JDP2_MOUSE Jun dimerization protein 2 OS=Mus musculus GN=Jdp2 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 17.0 0.8 3.5e-05 0.088 77 145 .. 65 134 .. 9 157 .. 0.78 Alignments for each domain: == domain 1 score: 17.0 bits; conditional E-value: 3.5e-05 sp|Q1XGE2|HAC1_ASPOR 77 kte.dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaq 145 k+e de e+rr +r +n+ aa +r +k+ + e l++e +le +n l ++ +l+ e+++l +l + sp|P97875|JDP2_MOUSE 65 KSElDEEEERRKRRREKNKVAAARCRNKKKERTEFLQRESERLELMNAELKTQIEELKLERQQLILMLNR 134 3333888999999999****************************************99999998777654 PP >> sp|Q78E65|JDP2_RAT Jun dimerization protein 2 OS=Rattus norvegicus GN=Jdp2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 17.0 0.8 3.5e-05 0.088 77 145 .. 65 134 .. 9 157 .. 0.78 Alignments for each domain: == domain 1 score: 17.0 bits; conditional E-value: 3.5e-05 sp|Q1XGE2|HAC1_ASPOR 77 kte.dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaq 145 k+e de e+rr +r +n+ aa +r +k+ + e l++e +le +n l ++ +l+ e+++l +l + sp|Q78E65|JDP2_RAT 65 KSElDEEEERRKRRREKNKVAAARCRNKKKERTEFLQRESERLELMNAELKTQIEELKLERQQLILMLNR 134 3333888999999999****************************************99999998777654 PP >> sp|P12959|OP2_MAIZE Regulatory protein opaque-2 OS=Zea mays GN=O2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 16.2 0.2 5.8e-05 0.15 85 159 .. 227 301 .. 221 342 .. 0.88 Alignments for each domain: == domain 1 score: 16.2 bits; conditional E-value: 5.8e-05 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantpl 159 r+++ nr +a+ sr rk +l+ le++ ql+ +n ll+r++ l + n + + l a++ ra + sp|P12959|OP2_MAIZE 227 ERVRKKESNRESARRSRYRKAAHLKELEDQVAQLKAENSCLLRRIAALNQKYNDANVDNRVLRADMETLRAKVKM 301 46777778***************************************9999998888888888888877776655 PP >> sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive element-binding protein 5 OS=Mus musculus GN=Creb5 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 0.8 0.9 2.9 7.3e+03 141 170 .. 19 48 .. 10 124 .. 0.63 2 ? 16.9 4.4 3.7e-05 0.093 51 143 .. 193 284 .. 182 322 .. 0.80 Alignments for each domain: == domain 1 score: 0.8 bits; conditional E-value: 2.9 sp|Q1XGE2|HAC1_ASPOR 141 qqlaqlaaevrgsrantplpgspatasptl 170 +q + a + g+ n +pgs a p sp|Q8K1L0|CREB5_MOUSE 19 RQRQPMPASMPGTLPNPTMPGSSAVLMPME 48 455567788899999999999988877753 PP == domain 2 score: 16.9 bits; conditional E-value: 3.7e-05 sp|Q1XGE2|HAC1_ASPOR 51 kpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennr 138 pa ++ + q + p+ r+r ed +rr + + rnraaa +r+++++ + le + +l q n+ l +s+l+ e + sp|Q8K1L0|CREB5_MOUSE 193 SPATQQMQPTQTIQPPQPTGGRRRRVVDEDPD-ERRRKFLERNRAAATRCRQKRKVWVMSLEKKAEELTQTNMQLQNEVSMLKNEVAQ 279 57777777778888888777667777666655.55667889**********************9999***999999999999888877 PP sp|Q1XGE2|HAC1_ASPOR 139 lsqql 143 l q l sp|Q8K1L0|CREB5_MOUSE 280 LKQLL 284 77655 PP >> sp|Q39140|TGA6_ARATH Transcription factor TGA6 OS=Arabidopsis thaliana GN=TGA6 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 16.1 3.0 6.4e-05 0.16 77 131 .. 38 91 .. 33 102 .. 0.88 Alignments for each domain: == domain 1 score: 16.1 bits; conditional E-value: 6.4e-05 sp|Q1XGE2|HAC1_ASPOR 77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 +++d+ +q+ ++r+ +nr aa+ sr rk+ +++len +++l q q lqr q sp|Q39140|TGA6_ARATH 38 RSKDKLDQKTLRRLAQNREAARKSRLRKKAYVQQLENSRLKLTQLEQE-LQRARQ 91 5679999**********************************9998886.466555 PP >> sp|P23923|HBP1B_WHEAT Transcription factor HBP-1b(c38) OS=Triticum aestivum PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.9 2.9 7.3e-05 0.19 73 131 .. 37 91 .. 30 106 .. 0.81 Alignments for each domain: == domain 1 score: 15.9 bits; conditional E-value: 7.3e-05 sp|Q1XGE2|HAC1_ASPOR 73 rkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 r r k d+k +r r+ +nr aa+ sr rk+ +++len +++l q q lqr q sp|P23923|HBP1B_WHEAT 37 RSRDKNGDQKTMR---RLAQNREAARKSRLRKKAYVQQLENSRLKLTQLEQE-LQRARQ 91 6666666666665...5679*************************9998886.466555 PP >> sp|Q00322|CEBPD_MOUSE CCAAT/enhancer-binding protein delta OS=Mus musculus GN=Cebpd PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.7 0.7 8.1e-05 0.21 98 169 .. 195 263 .. 142 267 .. 0.79 Alignments for each domain: == domain 1 score: 15.7 bits; conditional E-value: 8.1e-05 sp|Q1XGE2|HAC1_ASPOR 98 qtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspataspt 169 + rer + ++k + + +++nq + q+l +l aen +l q++ ql ++ g r sp pt sp|Q00322|CEBPD_MOUSE 195 RQRRERNNIAVRK---SRDKAKRRNQEMQQKLVELSAENEKLHQRVEQLTRDLAGLRQFFKKLPSPPFLPPT 263 3345555555555...44456789999****************************99876655555555555 PP >> sp|Q39163|TGA5_ARATH Transcription factor TGA5 OS=Arabidopsis thaliana GN=TGA5 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.9 2.2 7e-05 0.18 79 131 .. 40 91 .. 34 109 .. 0.85 Alignments for each domain: == domain 1 score: 15.9 bits; conditional E-value: 7e-05 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 + + +q+ ++r+ +nr aa+ sr rk+ +++len +++l q q lqr q sp|Q39163|TGA5_ARATH 40 KSKMDQKTLRRLAQNREAARKSRLRKKAYVQQLENSRLKLTQLEQE-LQRARQ 91 4567899999*****************************9998886.466655 PP >> sp|Q54RZ9|BZPG_DICDI Probable basic-leucine zipper transcription factor G OS=Dictyostelium discoideum GN=bzpG PE=3 S # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.7 0.7 8.4e-05 0.21 80 149 .. 274 343 .. 262 352 .. 0.87 Alignments for each domain: == domain 1 score: 15.7 bits; conditional E-value: 8.4e-05 sp|Q1XGE2|HAC1_ASPOR 80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaae 149 ++ke +r +r+++nr +a+ sr+rkr +l le++ +l + + + ls le en l +++ql sp|Q54RZ9|BZPG_DICDI 274 EKKELKRQKRLIKNRESAHLSRQRKRERLTDLEHRVEELSSNSIDINKTLSSLENENLILKAEVGQLFEV 343 578999***************************9888888877788899********9999999998654 PP >> sp|Q8CF90|MAFA_MOUSE Transcription factor MafA OS=Mus musculus GN=Mafa PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.7 0.3 8.2e-05 0.21 85 168 .. 262 348 .. 237 356 .. 0.76 Alignments for each domain: == domain 1 score: 15.7 bits; conditional E-value: 8.2e-05 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevr.g..srantplpgspatasp 168 ++ +r l+nr+ aq++r ++ + + le+ek+ql+ q + l +++l e++ ++ +la++ g + a+ p spa a+p sp|Q8CF90|MAFA_MOUSE 262 KQKRRTLKNRGYAQSCRFKRVQQRHILESEKCQLQSQVEQLKLEVGRLAKERDLYKEKYEKLAGRGGpGgaGGAGFPREPSPAQAGP 348 445699***********988888999**********999999999999999999998888888753212113456666667777776 PP >> sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcription factor ATF-4 OS=Rattus norvegicus GN=Atf4 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 16.4 0.2 5e-05 0.13 74 155 .. 265 342 .. 230 347 .] 0.80 Alignments for each domain: == domain 1 score: 16.4 bits; conditional E-value: 5e-05 sp|Q1XGE2|HAC1_ASPOR 74 kraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsra 155 ak + ek +++++++ +n+ aa r++kr e+e l +e +le++n+ l ++ + l e q l +l evr +r+ sp|Q9ES19|ATF4_RAT 265 VTAKVKTEKLDKKLKKMEQNKTAATRYRQKKRAEQEALTGECKELEKKNEALKEKADSLAKEI----QYLKDLIEEVRKARG 342 46899999*******************************************999988887665....444555555555554 PP >> sp|P43273|TGA2_ARATH Transcription factor TGA2 OS=Arabidopsis thaliana GN=TGA2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.4 2.4 0.0001 0.26 79 131 .. 40 91 .. 31 103 .. 0.86 Alignments for each domain: == domain 1 score: 15.4 bits; conditional E-value: 0.0001 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 + + +q+ ++r+ +nr aa+ sr rk+ +++len +++l q q lqr q sp|P43273|TGA2_ARATH 40 KGKMDQKTLRRLAQNREAARKSRLRKKAYVQQLENSRLKLTQLEQE-LQRARQ 91 5567899999*****************************9998886.466655 PP >> sp|Q98UK5|MAFB_DANRE Transcription factor MafB OS=Danio rerio GN=mafb PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 1.7 0.1 1.5 3.9e+03 132 182 .. 36 86 .. 8 120 .. 0.64 2 ? 15.7 1.5 8.5e-05 0.22 73 144 .. 259 331 .. 241 354 .. 0.76 Alignments for each domain: == domain 1 score: 1.7 bits; conditional E-value: 1.5 sp|Q1XGE2|HAC1_ASPOR 132 leaennrlsqqlaqlaaevrgsrantpl..pgspatasptltptlfkqerdel 182 + a+++ +q+ +l + +gs ++tp+ p s +sp+++pt k + +el sp|Q98UK5|MAFB_DANRE 36 MAAHDRANIRQCNRL--QPQGSVSSTPIstPCSSVPSSPSFSPTEQKNHLEEL 86 333333333444444..567888888864477888889999999888777765 PP == domain 2 score: 15.7 bits; conditional E-value: 8.5e-05 sp|Q1XGE2|HAC1_ASPOR 73 rkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144 + r+ t+de + ++ +r l+nr+ aq++r ++ + + lenek ql q + l q +++l e++ ++ sp|Q98UK5|MAFB_DANRE 259 HLRGFTKDEVIRlKQKRRTLKNRGYAQSCRFKRVQQKHLLENEKTQLINQVEQLKQEINRLARERDAYKLKCE 331 5577788886541556799**********99888888899********9999999999999888876655544 PP >> sp|P16951|ATF2_MOUSE Cyclic AMP-dependent transcription factor ATF-2 OS=Mus musculus GN=Atf2 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.9 1.0 0.00015 0.38 64 125 .. 316 376 .. 262 402 .. 0.74 Alignments for each domain: == domain 1 score: 14.9 bits; conditional E-value: 0.00015 sp|Q1XGE2|HAC1_ASPOR 64 pvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfl 125 p + r+ra ed e+rr + + rnraaa +r+++++ ++ le + +l n l sp|P16951|ATF2_MOUSE 316 PQTQNTSGRRRRAANEDPDEKRR-KFLERNRAAASRCRQKRKVWVQSLEKKAEDLSSLNGQL 376 44444455678888888877776.6788******************9998776666655544 PP >> sp|P27925|CREB1_BOVIN Cyclic AMP-responsive element-binding protein 1 OS=Bos taurus GN=CREB1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 0.6 0.1 3.2 8.1e+03 140 211 .. 20 94 .. 10 104 .. 0.62 2 ? 14.5 0.1 0.0002 0.5 78 131 .. 262 315 .. 240 320 .. 0.86 Alignments for each domain: == domain 1 score: 0.6 bits; conditional E-value: 3.2 sp|Q1XGE2|HAC1_ASPOR 140 sqqlaqlaaevrgsrantplpgspatas.ptltptlfkqerdelpleripfptpsl..sdysptlkpstlaessd 211 sqq+ a + a+ +p + at+s pt+t + i ps+ s t++ st+aes d sp|P27925|CREB1_BOVIN 20 SQQMTVQAQPQIATLAQVSMPAAHATSSaPTVTLVQLPNGQTVQVHGVIQAAQPSViqSPQVQTVQISTIAESED 94 566665555556788999999999997537777555444333322233444444441155566777788888776 PP == domain 2 score: 14.5 bits; conditional E-value: 0.0002 sp|Q1XGE2|HAC1_ASPOR 78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 +e ++r r+++nr aa+ +r++k+ ++ len+ le qn+ l++ l sp|P27925|CREB1_BOVIN 262 PAEEAARKREVRLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKA 315 445667778889************99999999****************998865 PP >> sp|P15336|ATF2_HUMAN Cyclic AMP-dependent transcription factor ATF-2 OS=Homo sapiens GN=ATF2 PE=1 SV=4 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.8 1.0 0.00016 0.41 63 125 .. 333 394 .. 281 420 .. 0.75 Alignments for each domain: == domain 1 score: 14.8 bits; conditional E-value: 0.00016 sp|Q1XGE2|HAC1_ASPOR 63 lpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfl 125 p ++ r+ra ed e+rr + + rnraaa +r+++++ ++ le + +l n l sp|P15336|ATF2_HUMAN 333 TPQTQSTSGRRRRAANEDPDEKRR-KFLERNRAAASRCRQKRKVWVQSLEKKAEDLSSLNGQL 394 444555566789999999888777.6788******************9998776666655544 PP >> sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcription factor ATF-6 beta OS=Mus musculus GN=Atf6b PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.6 1.8 0.00018 0.46 38 137 .. 283 383 .. 257 391 .. 0.63 Alignments for each domain: == domain 1 score: 14.6 bits; conditional E-value: 0.00018 sp|Q1XGE2|HAC1_ASPOR 38 advktqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklen.......ekiql 118 + ++ q p p rks p+p ++pp ak +r +r+++nr +a sr++k+ l+ le + ql sp|O35451|ATF6B_MOUSE 283 GAIRVQPEGPAPAAPRPERKSIV-PAPMPGNSCPPEVDAK-----LLKRQQRMIKNRESACQSRRKKKEYLQGLEArlqavlaDNQQL 364 45666666666667777777764.5788889999986555.....5667788999**9998898888766666654110111133344 PP sp|Q1XGE2|HAC1_ASPOR 119 eqqnqfllqrlsqleaenn 137 +++n l +rl l aen+ sp|O35451|ATF6B_MOUSE 365 RRENAALRRRLEALLAENS 383 4555555555555555554 PP >> sp|Q2VZV0|IF2_MAGSA Translation initiation factor IF-2 OS=Magnetospirillum magneticum (strain AMB-1 / ATCC 700264) G # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.0 4.8 0.00014 0.36 13 118 .. 185 290 .. 176 325 .. 0.77 Alignments for each domain: == domain 1 score: 15.0 bits; conditional E-value: 0.00014 sp|Q1XGE2|HAC1_ASPOR 13 dslpatpasevpvltvspadtslnsadvktqevkpeekkpakkrkswgqelpvpktnlpprkrak...tedekeqrriervlrnraaaq 98 + p pa+ pv +pa + +t+e e akkr + + pv +t p r+ +k t+ ++ r er r+ aa + sp|Q2VZV0|IF2_MAGSA 185 PATPVAPAQPKPVAAAAPAGDATAVPRARTEEEEE-EEERAKKRAAAHKPAPVKRTE-PRRRTGKltiTDALTDDDRSERG-RSLAAVK 270 567899999**********9999999999998765.556699999999888888875.44444453224555667777774.7889999 PP sp|Q1XGE2|HAC1_ASPOR 99 tsrerkrleleklenekiql 118 +rer rl+ + +ek+ sp|Q2VZV0|IF2_MAGSA 271 RARERERLKHMQKGSEKVIR 290 99*****9876666777654 PP >> sp|Q6ZDF3|TRAB1_ORYSJ bZIP transcription factor TRAB1 OS=Oryza sativa subsp. japonica GN=TRAB1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.9 0.8 0.00015 0.37 64 139 .. 210 287 .. 174 312 .. 0.74 Alignments for each domain: == domain 1 score: 14.9 bits; conditional E-value: 0.00015 sp|Q1XGE2|HAC1_ASPOR 64 pvpktnlpprkraktedek.eqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq.leaennrl 139 p p ++ +r+ ek +rr +r+++nr +a sr rk+ le e +l++qn+ l ++ + +e + n + sp|Q6ZDF3|TRAB1_ORYSJ 210 PYPFEGVIRGRRSGGNVEKvVERRQRRMIKNRESAARSRARKQAYTMELEAEVQKLKEQNMELQKKQEEiMEMQKNFF 287 55555554444544444442689999*****************99999***999999999987766544367776655 PP >> sp|Q6P788|ATF5_RAT Cyclic AMP-dependent transcription factor ATF-5 OS=Rattus norvegicus GN=Atf5 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.5 1.1 0.0002 0.5 73 141 .. 200 265 .. 171 280 .. 0.75 Alignments for each domain: == domain 1 score: 14.5 bits; conditional E-value: 0.0002 sp|Q1XGE2|HAC1_ASPOR 73 rkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsq 141 a t+ +++q++ + +n++aa r+rkr e e le+e le +n+ l +r +e e + + + sp|Q6P788|ATF5_RAT 200 PSPASTRGDRKQKKRD---QNKSAALRYRQRKRAEGEALEGECQGLEARNRELRERAESVEREIQYVKD 265 3446666666665544...79***********************************9999988665544 PP >> sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive element-binding protein 5 OS=Homo sapiens GN=CREB5 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? -0.7 1.8 8.3 2.1e+04 141 171 .. 170 200 .. 144 276 .. 0.63 2 ? 15.6 4.7 8.8e-05 0.22 51 143 .. 344 435 .. 333 472 .. 0.80 Alignments for each domain: == domain 1 score: -0.7 bits; conditional E-value: 8.3 sp|Q1XGE2|HAC1_ASPOR 141 qqlaqlaaevrgsrantplpgspatasptlt 171 +q + a + g+ n +pgs a p sp|Q02930|CREB5_HUMAN 170 RQRQPMPASMPGTLPNPTMPGSSAVLMPMER 200 4555677888899999999999888777543 PP == domain 2 score: 15.6 bits; conditional E-value: 8.8e-05 sp|Q1XGE2|HAC1_ASPOR 51 kpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennr 138 pa ++ + q + p+ r+r ed +rr + + rnraaa +r+++++ + le + +l q n+ l +s+l+ e + sp|Q02930|CREB5_HUMAN 344 SPATQQMQPTQTIQPPQPTGGRRRRVVDEDPD-ERRRKFLERNRAAATRCRQKRKVWVMSLEKKAEELTQTNMQLQNEVSMLKNEVAQ 430 57777777778888787777667777666655.55667889**********************9999***999999999999888877 PP sp|Q1XGE2|HAC1_ASPOR 139 lsqql 143 l q l sp|Q02930|CREB5_HUMAN 431 LKQLL 435 77654 PP >> sp|Q66J36|NFIL3_XENLA Nuclear factor interleukin-3-regulated protein OS=Xenopus laevis GN=nfil3 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.5 0.1 0.0004 1 63 130 .. 44 113 .. 25 140 .. 0.79 2 ? -0.5 0.0 7 1.8e+04 29 51 .. 196 218 .. 179 228 .. 0.78 Alignments for each domain: == domain 1 score: 13.5 bits; conditional E-value: 0.0004 sp|Q1XGE2|HAC1_ASPOR 63 lpvp.ktnlpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrls 130 lpv k++ rkr dek++ e+ +n aa+ sre++rl len+ i l ++n l l sp|Q66J36|NFIL3_XENLA 44 LPVKnKSSSCRRKREFIPDEKKDaMYWEKRRKNNEAAKRSREKRRLNDMVLENKLIALGEENASLKTELL 113 66642555667899999998766155799999**************************999987766655 PP == domain 2 score: -0.5 bits; conditional E-value: 7 sp|Q1XGE2|HAC1_ASPOR 29 spadtslnsadvktqevkpeekk 51 s +++++s d+k+q++k e+ sp|Q66J36|NFIL3_XENLA 196 STIQSNCRSTDIKSQRIKQEQME 218 4556788999********99875 PP >> sp|Q8NHW3|MAFA_HUMAN Transcription factor MafA OS=Homo sapiens GN=MAFA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.4 0.4 0.0002 0.52 85 167 .. 255 335 .. 230 345 .. 0.74 Alignments for each domain: == domain 1 score: 14.4 bits; conditional E-value: 0.0002 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaev.rgsrantplpgspatas 167 ++ +r l+nr+ aq++r ++ + + le+ek+ql+ q + l +++l e++ ++ +la++ gs ++ g p s sp|Q8NHW3|MAFA_HUMAN 255 KQKRRTLKNRGYAQSCRFKRVQQRHILESEKCQLQSQVEQLKLEVGRLAKERDLYKEKYEKLAGRGgPGSAGGA---GFPREPS 335 445699***********988888999**********99999999999999999999998888875313443333...3333333 PP >> sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocricetus auratus GN=FOS PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.9 0.3 0.0003 0.76 79 234 .. 134 294 .. 118 303 .. 0.65 Alignments for each domain: == domain 1 score: 13.9 bits; conditional E-value: 0.0003 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatas 167 +e e+rri+r rn+ aa +r r+r + l+ e qle++ l ++ l e +l la ++ + +p as sp|O88479|FOS_MESAU 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRPACK-IPDDLGFPEEMFVAS 220 467788999885.899999999999999999************999999999999999998877765433332.223344555555555 PP sp|Q1XGE2|HAC1_ASPOR 168 ptlt...p...tlfkqerdelpleripfptpslsdysptlkpstlaessdvaqhpavs.vaglegdgsalplfd 234 lt p t +e lpl p p psl ae d +pa s +g e ++p +d sp|O88479|FOS_MESAU 221 LDLTgglPeatTPESEEAFSLPLLNDPEPKPSLEPVKSISNVELKAEPFDDFLFPASSrPSGSETTARSVPDMD 294 55552221111223445556777777777777776666666666666666666666552345555555555555 PP >> sp|P23922|HBP1A_WHEAT Transcription factor HBP-1a OS=Triticum aestivum PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.2 0.0 0.00024 0.62 64 137 .. 232 306 .. 220 328 .. 0.78 Alignments for each domain: == domain 1 score: 14.2 bits; conditional E-value: 0.00024 sp|Q1XGE2|HAC1_ASPOR 64 pvpktnlpp.rkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaenn 137 p + +p r+ de+e ++ +r l nr +a+ sr rk+ e+e l ++ l+ +n l l++++ e sp|P23922|HBP1A_WHEAT 232 PAMRGKVPSgSARGEQWDERELKKQKRKLSNRESARRSRLRKQAECEELGQRAEALKSENSSLRIELDRIKKEYE 306 33444555413577788********************************99988889999888777777776655 PP >> sp|Q90595|MAFF_CHICK Transcription factor MafF OS=Gallus gallus GN=MAFF PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.6 0.1 0.00018 0.45 84 167 .. 52 134 .. 31 144 .. 0.83 Alignments for each domain: == domain 1 score: 14.6 bits; conditional E-value: 0.00018 sp|Q1XGE2|HAC1_ASPOR 84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatas 167 ++ +r l+nr+ a ++r ++ ++ e l+ +k++le + + l + + ++ e + l + l + r a+ p p atas sp|Q90595|MAFF_CHICK 52 LKQRRRTLKNRGYAASCRVKRVCQKEELQKQKMELEWEVDKLARENAAMRLELDTLRGKYEALQGFARTVAAHGP-PAKVATAS 134 3344699*******************************9999999999999999999999999998888888877.77778876 PP >> sp|P53450|FOS_TAKRU Proto-oncogene c-Fos OS=Takifugu rubripes GN=fos PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.9 0.4 0.0003 0.76 73 144 .. 112 182 .. 41 223 .. 0.74 2 ? 1.1 0.0 2.3 5.8e+03 17 42 .. 316 340 .. 301 359 .. 0.73 Alignments for each domain: == domain 1 score: 13.9 bits; conditional E-value: 0.0003 sp|Q1XGE2|HAC1_ASPOR 73 rkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144 r t +e e++ri+r rn+ aa +r r+r + l+ e qle++ l ++ l e rl la sp|P53450|FOS_TAKRU 112 RVEQTTPEEEEKKRIRRE-RNKQAAAKCRNRRRELTDTLQAETDQLEDEKSSLQNDIANLLKEKERLEFILA 182 444557788889999886.788788888999998899**********9999999999999989888876665 PP == domain 2 score: 1.1 bits; conditional E-value: 2.3 sp|Q1XGE2|HAC1_ASPOR 17 atpasevpvltvspadtslnsadvkt 42 p + pv+t++pa t+l s+ v t sp|P53450|FOS_TAKRU 316 FEPLC-TPVVTCTPACTTLTSSFVFT 340 34433.69************998877 PP >> sp|Q00969|ATF2_RAT Cyclic AMP-dependent transcription factor ATF-2 OS=Rattus norvegicus GN=Atf2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.3 1.9 0.00044 1.1 64 125 .. 316 376 .. 283 402 .. 0.73 Alignments for each domain: == domain 1 score: 13.3 bits; conditional E-value: 0.00044 sp|Q1XGE2|HAC1_ASPOR 64 pvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfl 125 p + r+ra ed e+rr + + rnraaa +r+++++ ++ le + +l n l sp|Q00969|ATF2_RAT 316 PQTQNTSGRRRRAANEDPDEKRR-KFLERNRAAASRCRQKRKVWVQSLEKKAEDLSSLNGQL 376 44444445688888888887776.6788******************9998776666655544 PP >> sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scrofa GN=FOS PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.8 0.2 0.00031 0.78 79 146 .. 134 200 .. 77 302 .. 0.68 Alignments for each domain: == domain 1 score: 13.8 bits; conditional E-value: 0.00031 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaql 146 +e e+rri+r rn+ aa +r r+r + l+ e qle++ l ++ l e +l la sp|O97930|FOS_PIG 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAH 200 467788999885.899899999999999999***********99999999999888888887766643 PP >> sp|P79145|CREM_CANFA cAMP-responsive element modulator OS=Canis familiaris GN=CREM PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.7 0.1 0.00033 0.84 80 131 .. 299 350 .. 227 354 .. 0.89 Alignments for each domain: == domain 1 score: 13.7 bits; conditional E-value: 0.00033 sp|Q1XGE2|HAC1_ASPOR 80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 +e ++r r+++nr aa+ +r++k+ ++ len+ le qn+ l++ l sp|P79145|CREM_CANFA 299 EEATRKRELRLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKA 350 4556677789************99999999****************998865 PP >> sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcription factor ATF-6 beta OS=Homo sapiens GN=ATF6B PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.3 2.0 0.00045 1.1 37 138 .. 285 387 .. 252 393 .. 0.70 Alignments for each domain: == domain 1 score: 13.3 bits; conditional E-value: 0.00045 sp|Q1XGE2|HAC1_ASPOR 37 sadvktqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklen.......ekiq 117 ++ ++ q p p rks p+p ++pp ak +r +r+++nr +a sr++k+ l+ le + q sp|Q99941|ATF6B_HUMAN 285 QGAIRVQPEGPAPSLPRPERKSIV-PAPMPGNSCPPEVDAK-----LLKRQQRMIKNRESACQSRRKKKEYLQGLEArlqavlaDNQQ 366 455777777788888888899874.6799999999987665.....5567778999**998888888876666665411111113446 PP sp|Q1XGE2|HAC1_ASPOR 118 leqqnqfllqrlsqleaennr 138 l+++n l +rl l aen+ sp|Q99941|ATF6B_HUMAN 367 LRRENAALRRRLEALLAENSE 387 666677777777777777765 PP >> sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus musculus GN=Fos PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.7 0.1 0.00033 0.85 79 146 .. 134 200 .. 81 297 .. 0.74 Alignments for each domain: == domain 1 score: 13.7 bits; conditional E-value: 0.00033 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaql 146 +e e+rri+r rn+ aa +r r+r + l+ e qle++ l ++ l e +l la sp|P01101|FOS_MOUSE 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAH 200 467788999885.899889999999999999***********99999999999888888887766643 PP >> sp|P15337|CREB1_RAT Cyclic AMP-responsive element-binding protein 1 OS=Rattus norvegicus GN=Creb1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.4 0.1 0.00021 0.54 78 131 .. 278 331 .. 257 336 .. 0.86 Alignments for each domain: == domain 1 score: 14.4 bits; conditional E-value: 0.00021 sp|Q1XGE2|HAC1_ASPOR 78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 +e ++r r+++nr aa+ +r++k+ ++ len+ le qn+ l++ l sp|P15337|CREB1_RAT 278 PAEEAARKREVRLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKA 331 445667778889************99999999****************998865 PP >> sp|P16220|CREB1_HUMAN Cyclic AMP-responsive element-binding protein 1 OS=Homo sapiens GN=CREB1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.4 0.1 0.00021 0.54 78 131 .. 278 331 .. 257 336 .. 0.86 Alignments for each domain: == domain 1 score: 14.4 bits; conditional E-value: 0.00021 sp|Q1XGE2|HAC1_ASPOR 78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 +e ++r r+++nr aa+ +r++k+ ++ len+ le qn+ l++ l sp|P16220|CREB1_HUMAN 278 PAEEAARKREVRLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKA 331 445667778889************99999999****************998865 PP >> sp|Q01147|CREB1_MOUSE Cyclic AMP-responsive element-binding protein 1 OS=Mus musculus GN=Creb1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.4 0.1 0.00021 0.54 78 131 .. 278 331 .. 257 336 .. 0.86 Alignments for each domain: == domain 1 score: 14.4 bits; conditional E-value: 0.00021 sp|Q1XGE2|HAC1_ASPOR 78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 +e ++r r+++nr aa+ +r++k+ ++ len+ le qn+ l++ l sp|Q01147|CREB1_MOUSE 278 PAEEAARKREVRLMKNREAARECRRKKKEYVKCLENRVAVLENQNKTLIEELKA 331 445667778889************99999999****************998865 PP >> sp|O93602|ATF2_CHICK Cyclic AMP-dependent transcription factor ATF-2 OS=Gallus gallus GN=ATF2 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.3 2.4 0.00044 1.1 66 129 .. 319 380 .. 260 403 .. 0.68 Alignments for each domain: == domain 1 score: 13.3 bits; conditional E-value: 0.00044 sp|Q1XGE2|HAC1_ASPOR 66 pktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrl 129 p t+ r+ra ed e+rr + + rnraaa +r+++++ ++ le + +l n l + sp|O93602|ATF2_CHICK 319 PNTG-GRRRRAANEDPDEKRR-KFLERNRAAASRCRQKRKVWVQSLEKKAEDLSSLNGQLQNEV 380 3332.3477888888877776.6788******************99987766666665554444 PP >> sp|Q90889|MAFG_CHICK Transcription factor MafG OS=Gallus gallus GN=MAFG PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.9 0.5 0.0003 0.75 84 165 .. 52 134 .. 30 146 .. 0.70 Alignments for each domain: == domain 1 score: 13.9 bits; conditional E-value: 0.0003 sp|Q1XGE2|HAC1_ASPOR 84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaql..aaevrgsrantplpgspat 165 ++ +r l+nr+ a ++r ++ + e le +k +l+q+ + l + ++ e + l + l a+ tp+ g p t sp|Q90889|MAFG_CHICK 52 LKQRRRTLKNRGYAASCRVKRVTQKEELEKQKAELQQEVEKLASENASMKMELDALRSKYEALqnFARTVARSPVTPVRG-PLT 134 3444699************9999***************999999888888877777654433300333333334566666.333 PP >> sp|P79702|FOS_CYPCA Proto-oncogene c-Fos OS=Cyprinus carpio GN=fos PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.5 0.1 0.00039 1 66 145 .. 97 175 .. 39 207 .. 0.74 Alignments for each domain: == domain 1 score: 13.5 bits; conditional E-value: 0.00039 sp|Q1XGE2|HAC1_ASPOR 66 pktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaq 145 p +n r + +e e++r++r rn+ aa +r r+r + l+ e +le++ l ++ l e rl la sp|P79702|FOS_CYPCA 97 PNSNKRARAEQLSPEEEEKKRVRRE-RNKMAAAKCRNRRRELTDTLQAETDELEDEKSALQNDIANLLKEKERLEFILAA 175 4556555555556678888888775.8999999999999998999*********99999999999999999999877764 PP >> sp|Q8X229|FCR3_CANAL Fluconazole resistance protein 3 OS=Candida albicans GN=FCR3 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.5 2.5 0.0004 1 81 140 .. 208 267 .. 197 289 .. 0.87 Alignments for each domain: == domain 1 score: 13.5 bits; conditional E-value: 0.0004 sp|Q1XGE2|HAC1_ASPOR 81 ekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrls 140 e+ +++r +nraa + rerk +l+ le + + e+++q ll+ l q++ +n ++ sp|Q8X229|FCR3_CANAL 208 TEEELQMKRKAQNRAAQRAFRERKESKLKELEAKLLASEEERQKLLDELEQIKKQNISIA 267 4567788999******************************************99997665 PP >> sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus norvegicus GN=Fos PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.1 0.2 0.00052 1.3 79 145 .. 134 199 .. 116 297 .. 0.72 Alignments for each domain: == domain 1 score: 13.1 bits; conditional E-value: 0.00052 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaq 145 +e e+rri+r rn+ aa +r r+r + l+ e qle++ l ++ l e +l la sp|P12841|FOS_RAT 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAA 199 467788999885.899889999999999999***********9999998999888888888766654 PP >> sp|P49716|CEBPD_HUMAN CCAAT/enhancer-binding protein delta OS=Homo sapiens GN=CEBPD PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.1 3.4 0.00052 1.3 82 159 .. 192 253 .. 129 266 .. 0.53 Alignments for each domain: == domain 1 score: 13.1 bits; conditional E-value: 0.00052 sp|Q1XGE2|HAC1_ASPOR 82 keqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantpl 159 e + rer + ++ + + +++nq + q+l +l aen +l q++ ql ++ g r + sp|P49716|CEBPD_HUMAN 192 PE-------------YRQRRERNNIAVR---KSRDKAKRRNQEMQQKLVELSAENEKLHQRVEQLTRDLAGLRQFFKQ 253 11.............1222333333333...33445567777788888888888888888888888888887764432 PP >> sp|Q554P0|BZPJ_DICDI Probable basic-leucine zipper transcription factor J OS=Dictyostelium discoideum GN=bzpJ PE=3 S # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.0 0.2 0.00028 0.72 79 148 .. 545 614 .. 535 644 .. 0.85 Alignments for each domain: == domain 1 score: 14.0 bits; conditional E-value: 0.00028 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa 148 +eke ++ +r+++nr a sr r+++ +e +e + + q+ + +l+ ++ en l +ql l sp|Q554P0|BZPJ_DICDI 545 AEEKELKKQRRLVKNREYASQSRSRRKIYVENIETKLQKTNQDCASIKSQLNSVKEENKALKKQLYSLTN 614 46899999999**********************9866556666677888999************988865 PP >> sp|Q55E93|BZPE_DICDI Probable basic-leucine zipper transcription factor E OS=Dictyostelium discoideum GN=bzpE PE=3 S # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.9 0.1 0.00029 0.74 85 146 .. 248 309 .. 243 324 .. 0.88 Alignments for each domain: == domain 1 score: 13.9 bits; conditional E-value: 0.00029 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaql 146 r+ +r+l+nr aaq r+r++ + le++ le n l ++s+l en+ + +++ l sp|Q55E93|BZPE_DICDI 248 RKNRRLLKNREAAQLFRQRQKEYINSLESKASSLEASNTTALSKVSHLTEENQLMKDKVRYL 309 77789*******************************************99998887776655 PP >> sp|P51984|CREB_CHLVR Cyclic AMP-responsive element-binding protein OS=Chlorohydra viridissima GN=CREB PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.4 0.1 0.00043 1.1 76 131 .. 184 239 .. 149 243 .. 0.81 Alignments for each domain: == domain 1 score: 13.4 bits; conditional E-value: 0.00043 sp|Q1XGE2|HAC1_ASPOR 76 aktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 + +e ++r r+ +nr aa+ +r++k+ ++ len+ le qn+ l++ l sp|P51984|CREB_CHLVR 184 HQLAEEATRKRELRLYKNREAARECRRKKKEYVKCLENRVAVLENQNKALIEELKS 239 444566777788899***********99999999****************998865 PP >> sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein OS=FBJ murine osteosarcoma virus GN=V-FOS PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.4 0.1 0.0004 1 79 146 .. 134 200 .. 84 298 .. 0.73 Alignments for each domain: == domain 1 score: 13.4 bits; conditional E-value: 0.0004 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaql 146 +e e+rri+r rn+ aa +r r+r + l+ e qle++ l ++ l e +l la sp|P01102|FOS_MSVFB 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDKKSALQTEIANLLKEKEKLEFILAAH 200 467788999885.899999999999999999***********99999999999988888887766643 PP >> sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos taurus GN=FOS PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.1 0.0 0.00052 1.3 79 144 .. 134 198 .. 79 298 .. 0.81 Alignments for each domain: == domain 1 score: 13.1 bits; conditional E-value: 0.00052 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144 +e e+rri+r rn+ aa +r r+r + l+ e qle++ l ++ l e +l la sp|O77628|FOS_BOVIN 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILA 198 467788999885.899888899999999999**********9999888888888777777766555 PP >> sp|Q8WYK2|JDP2_HUMAN Jun dimerization protein 2 OS=Homo sapiens GN=JDP2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.6 2.7 0.00035 0.9 78 145 .. 67 134 .. 30 157 .. 0.81 Alignments for each domain: == domain 1 score: 13.6 bits; conditional E-value: 0.00035 sp|Q1XGE2|HAC1_ASPOR 78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaq 145 de e+rr +r +n+ aa +r +k+ + e l++e +le +n l ++ +l+ e+++l +l + sp|Q8WYK2|JDP2_HUMAN 67 ELDEEEERRKRRREKNKVAAARCRNKKKERTEFLQRESERLELMNAELKTQIEELKQERQQLILMLNR 134 34888999999999**********************************99999999999988776654 PP >> sp|Q60925|DBP_MOUSE D site-binding protein OS=Mus musculus GN=Dbp PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.3 1.0 0.00092 2.3 38 135 .. 210 307 .. 184 323 .. 0.69 Alignments for each domain: == domain 1 score: 12.3 bits; conditional E-value: 0.00092 sp|Q1XGE2|HAC1_ASPOR 38 advktqevkpeek.kpakkrkswgqel.pvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqf 124 ad+ + +e p + r s +el p p rk e++k+++ r +n aa+ sr+ +rl+ ++ + le++n sp|Q60925|DBP_MOUSE 210 ADLALSSIPGHETfDPRRHRFS-EEELkPQP-IMKKARKVQVPEEQKDEKYWSRRYKNNEAAKRSRDARRLKENQISVRAAFLEKENAL 296 4444444444443034444444.34441333.334567777789999*******************************99*******99 PP sp|Q1XGE2|HAC1_ASPOR 125 llqrlsqleae 135 l q + ++ e sp|Q60925|DBP_MOUSE 297 LRQEVVAVRQE 307 99987665555 PP >> sp|P14232|TGA1A_TOBAC TGACG-sequence-specific DNA-binding protein TGA-1A OS=Nicotiana tabacum GN=TGA1A PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.9 0.4 0.00058 1.5 85 125 .. 74 114 .. 59 133 .. 0.81 Alignments for each domain: == domain 1 score: 12.9 bits; conditional E-value: 0.00058 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfl 125 + ++r+ +nr aa+ sr rk+ +++len k++l q q l sp|P14232|TGA1A_TOBAC 74 KVLRRLAQNREAARKSRLRKKAYVQQLENSKLKLIQLEQEL 114 45678899***********************9988877755 PP >> sp|P16443|DBP_RAT D site-binding protein OS=Rattus norvegicus GN=Dbp PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.3 1.0 0.00092 2.3 38 135 .. 210 307 .. 184 323 .. 0.69 Alignments for each domain: == domain 1 score: 12.3 bits; conditional E-value: 0.00092 sp|Q1XGE2|HAC1_ASPOR 38 advktqevkpeek.kpakkrkswgqel.pvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqf 124 ad+ + +e p + r s +el p p rk e++k+++ r +n aa+ sr+ +rl+ ++ + le++n sp|P16443|DBP_RAT 210 ADLALSSIPGHETfDPRRHRFS-EEELkPQP-IMKKARKVQVPEEQKDEKYWSRRYKNNEAAKRSRDARRLKENQISVRAAFLEKENAL 296 4444444444443034444444.34441333.334567777789999*******************************99*******99 PP sp|Q1XGE2|HAC1_ASPOR 125 llqrlsqleae 135 l q + ++ e sp|P16443|DBP_RAT 297 LRQEVVAVRQE 307 99987665555 PP >> sp|Q68EL6|NFIL3_DANRE Nuclear factor interleukin-3-regulated protein OS=Danio rerio GN=nfil3 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.9 0.0 0.00059 1.5 71 131 .. 50 111 .. 39 184 .. 0.83 Alignments for each domain: == domain 1 score: 12.9 bits; conditional E-value: 0.00059 sp|Q1XGE2|HAC1_ASPOR 71 pprkraktedekeqr.riervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 rkr dek++ er +n aa+ sre++rl len+ + l ++n l l sp|Q68EL6|NFIL3_DANRE 50 CRRKREFIPDEKKDNlYWERRRKNNEAAKRSREKRRLNDMVLENKLMALGEENASLKAELLS 111 5688888888876551679**************************99999999877666655 PP >> sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo sapiens GN=FOS PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.7 0.2 0.00069 1.7 79 144 .. 134 198 .. 120 294 .. 0.79 Alignments for each domain: == domain 1 score: 12.7 bits; conditional E-value: 0.00069 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144 +e e+rri+r rn+ aa +r r+r + l+ e qle++ l ++ l e +l la sp|P01100|FOS_HUMAN 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILA 198 467788999885.899888899999999999**********9999988888888887777766555 PP >> sp|Q9C5Q2|AI5L3_ARATH ABSCISIC ACID-INSENSITIVE 5-like protein 3 OS=Arabidopsis thaliana GN=DPBF4 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.9 1.9 0.00059 1.5 70 133 .. 175 239 .. 165 242 .. 0.83 Alignments for each domain: == domain 1 score: 12.9 bits; conditional E-value: 0.00059 sp|Q1XGE2|HAC1_ASPOR 70 lpprkrakte..dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqle 133 p rkr e ++ +rr +r+++nr +a sr rk+ + le + +le++n+ l+rl ++e sp|Q9C5Q2|AI5L3_ARATH 175 APGRKRVAGEivEKTVERRQKRMIKNRESAARSRARKQAYTHELEIKVSRLEEENEK-LRRLKEVE 239 58889877662244568999**************************999*****996.57777665 PP >> sp|Q5FW38|NFIL3_XENTR Nuclear factor interleukin-3-regulated protein OS=Xenopus tropicalis GN=nfil3 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.4 0.2 0.00083 2.1 71 132 .. 60 122 .. 43 150 .. 0.78 Alignments for each domain: == domain 1 score: 12.4 bits; conditional E-value: 0.00083 sp|Q1XGE2|HAC1_ASPOR 71 pprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsql 132 rkr dek++ e+ +n aa+ sre++rl len+ i l ++n l l l sp|Q5FW38|NFIL3_XENTR 60 CRRKREFIPDEKKDaMYWEKRRKNNEAAKRSREKRRLNDMVLENKLIALGEENASLKTELLSL 122 46788888888766156799999**************************99998877666555 PP >> sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis catus GN=FOS PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.5 0.1 0.00076 1.9 79 144 .. 135 199 .. 124 298 .. 0.80 Alignments for each domain: == domain 1 score: 12.5 bits; conditional E-value: 0.00076 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144 +e e+rri+r rn+ aa +r r+r + l+ e qle++ l ++ l e +l la sp|Q8HZP6|FOS_FELCA 135 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILA 199 467788999885.899888899999999999**********9999888888888777777765554 PP >> sp|Q9SJN0|ABI5_ARATH Protein ABSCISIC ACID-INSENSITIVE 5 OS=Arabidopsis thaliana GN=ABI5 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.6 2.2 0.00076 1.9 70 141 .. 340 411 .. 327 435 .. 0.76 Alignments for each domain: == domain 1 score: 12.6 bits; conditional E-value: 0.00076 sp|Q1XGE2|HAC1_ASPOR 70 lpprkrakte..dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsq 141 l rkr ++ +rr +r+++nr +a sr rk+ le e ql+++n l + l++le ++ +q sp|Q9SJN0|ABI5_ARATH 340 LRGRKRVVDGpvEKVVERRQRRMIKNRESAARSRARKQAYTVELEAELNQLKEENAQLKHALAELERKRK--QQ 411 555666543210233579999*************************************999998876543..33 PP >> sp|P42777|GBF4_ARATH G-box-binding factor 4 OS=Arabidopsis thaliana GN=GBF4 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.6 2.5 0.00074 1.9 77 134 .. 181 238 .. 170 259 .. 0.84 Alignments for each domain: == domain 1 score: 12.6 bits; conditional E-value: 0.00074 sp|Q1XGE2|HAC1_ASPOR 77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqlea 134 d+ +r +r+++nr +a srerk+ + le +le++n+ ll+ + + sp|P42777|GBF4_ARATH 181 EAMDKAAAQRQKRMIKNRESAARSRERKQAYQVELETLAAKLEEENEQLLKEIEESTK 238 45677788899************************************99998876554 PP >> sp|P15407|FOSL1_HUMAN Fos-related antigen 1 OS=Homo sapiens GN=FOSL1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.6 4.3 0.00072 1.8 64 202 .. 88 234 .. 64 263 .. 0.61 Alignments for each domain: == domain 1 score: 12.6 bits; conditional E-value: 0.00072 sp|Q1XGE2|HAC1_ASPOR 64 pvpktnlpprkraktedekeqrriervlrnraaaqtsr.erkrl......eleklenekiqleqqnqfllqrlsqle..aennrlsqq 142 p p + p + e e e+rr++r rn+ aa +r +rk l e +kle+ek l+++ + l ++ +le e +r + sp|P15407|FOSL1_HUMAN 88 PPPGVRRRPCEQISPE-EEERRRVRRE-RNKLAAAKCRnRRKELtdflqaETDKLEDEKSGLQREIEELQKQKERLElvLEAHRPICK 173 5566666666665544.5577888776.666555555505554432222256778888777777666665555554422466777777 PP sp|Q1XGE2|HAC1_ASPOR 143 laqlaaev.rgsrantplpgspatasptltptlfkq.erdelpleripfptpslsdysptlk 202 + + a e gs ++t p +p+ p+++ + e + l + tpsl+ ++p+l sp|P15407|FOSL1_HUMAN 174 IPEGAKEGdTGSTSGTSSPPAPCRPVPCISLSPGPVlEPEALHTP-TLMTTPSLTPFTPSLV 234 777777642689999999999988888765433322033333333.3467899999999874 PP >> sp|O15525|MAFG_HUMAN Transcription factor MafG OS=Homo sapiens GN=MAFG PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.9 0.4 0.00059 1.5 84 152 .. 52 120 .. 30 144 .. 0.74 Alignments for each domain: == domain 1 score: 12.9 bits; conditional E-value: 0.00059 sp|Q1XGE2|HAC1_ASPOR 84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrg 152 ++ +r l+nr+ a ++r ++ + e le +k +l+q+ + l + ++ e + l + l r sp|O15525|MAFG_HUMAN 52 LKQRRRTLKNRGYAASCRVKRVTQKEELEKQKAELQQEVEKLASENASMKLELDALRSKYEALQTFART 120 3444699************9999***************9999999999999888887766655554443 PP >> sp|P40535|ACA2_YEAST ATF/CREB activator 2 OS=Saccharomyces cerevisiae GN=CST6 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.2 0.0 0.00098 2.5 85 133 .. 427 475 .. 363 484 .. 0.84 Alignments for each domain: == domain 1 score: 12.2 bits; conditional E-value: 0.00098 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqle 133 +r + + rnr aa +r+rk++ + +l+ e +++++n++ll++l+ e sp|P40535|ACA2_YEAST 427 KRARLLERNRIAASKCRQRKKVAQLQLQKEFNEIKDENRILLKKLNYYE 475 34444558***********************************998765 PP >> sp|A7YY73|MAFF_BOVIN Transcription factor MafF OS=Bos taurus GN=MAFF PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.7 0.2 0.00069 1.7 84 174 .. 52 139 .. 32 170 .. 0.74 Alignments for each domain: == domain 1 score: 12.7 bits; conditional E-value: 0.00069 sp|Q1XGE2|HAC1_ASPOR 84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatasptltp 172 ++ +r l+nr+ a ++r ++ ++ e l+ +k +le++ + l + + ++ e + l ++ l + r a g a +p sp|A7YY73|MAFF_BOVIN 52 LKQRRRTLKNRGYAASCRVKRVCQKEELQKQKSELEREVDKLARENAAMRLELDALRGKCEALQGFARSVAA---ARGPAALVAPASVI 137 3444699*******************************9999999999999988887776666555444332...33444445555555 PP sp|Q1XGE2|HAC1_ASPOR 173 tl 174 t+ sp|A7YY73|MAFF_BOVIN 138 TI 139 55 PP >> sp|Q8PY58|PSMR_METMA Proteasome-activating nucleotidase OS=Methanosarcina mazei GN=pan PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 6.0 0.1 0.075 1.9e+02 110 154 .. 26 70 .. 22 95 .. 0.82 2 ? 5.0 0.0 0.15 3.8e+02 115 194 .. 255 332 .. 236 374 .. 0.72 Alignments for each domain: == domain 1 score: 6.0 bits; conditional E-value: 0.075 sp|Q1XGE2|HAC1_ASPOR 110 klenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsr 154 ++++ qle +n fl +++sq+e+e + l q + e+r + sp|Q8PY58|PSMR_METMA 26 SVQDRVRQLESRNSFLEEQCSQIESEKRYLENQKIKYEREIRKLQ 70 566677799*********************999999999998655 PP == domain 2 score: 5.0 bits; conditional E-value: 0.15 sp|Q1XGE2|HAC1_ASPOR 115 kiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatasp.tltptlfkqerdelpleripfptpsl 194 i +++ + + +rl++ + ++ +++ l ql ae+ g + + at p l p + + r + l ++p+p + sp|Q8PY58|PSMR_METMA 255 IIFIDELDSIAARRLNETTGADREVQRTLMQLLAEMDGFDKRKNIRIIAATNRPdVLDPAILRPGRFDR-LVHVPMPG--I 332 4567778888999*******9*****************8777777778888888358899999998764.55666664..3 PP >> sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodopus roborovskii GN=FOS PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.8 0.4 0.0012 3.2 79 142 .. 134 196 .. 118 251 .. 0.83 Alignments for each domain: == domain 1 score: 11.8 bits; conditional E-value: 0.0012 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqq 142 +e e+rri+r rn+ aa +r r+r + l+ e qle++ l ++ l e +l sp|Q56TN0|FOS_PHORO 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFI 196 467788999885.899888899999999899**********99988888888777777666555 PP >> sp|P23050|FOS_AVINK p55-v-Fos-transforming protein OS=Avian retrovirus NK24 GN=V-FOS PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.0 0.8 0.0011 2.8 79 140 .. 88 148 .. 41 168 .. 0.83 Alignments for each domain: == domain 1 score: 12.0 bits; conditional E-value: 0.0011 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrls 140 +e e+rri+r rn+ aa +r r+r + l+ e qle++ l ++ l e +l sp|P23050|FOS_AVINK 88 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEEEKSALQAEIANLLKEKEKLE 148 467788999885.899889999999999999**********999888888877777766665 PP >> sp|Q9LES3|AI5L2_ARATH ABSCISIC ACID-INSENSITIVE 5-like protein 2 OS=Arabidopsis thaliana GN=DPBF3 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.0 1.6 0.0011 2.8 68 126 .. 207 268 .. 199 276 .. 0.82 Alignments for each domain: == domain 1 score: 12.0 bits; conditional E-value: 0.0011 sp|Q1XGE2|HAC1_ASPOR 68 tnlpprkrakted...ekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfll 126 t+ p rkr + + + +rr +r+++nr +a sr rk+ + le + +le++n+ l sp|Q9LES3|AI5L2_ARATH 207 TQTPGRKRVASGEvveKTVERRQKRMIKNRESAARSRARKQAYTHELEIKVSRLEEENERLR 268 77899999766542214458999**************************9999**9998765 PP >> sp|Q84JK2|FD_ARATH Protein FD OS=Arabidopsis thaliana GN=FD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.7 1.8 0.0014 3.5 66 133 .. 197 264 .. 188 281 .. 0.78 Alignments for each domain: == domain 1 score: 11.7 bits; conditional E-value: 0.0014 sp|Q1XGE2|HAC1_ASPOR 66 pktnlpprkraktede.keqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqle 133 p +++ +kr++ +e rr +r+++nr +a sr rk+ le e +l+ +n l ++ +ql+ sp|Q84JK2|FD_ARATH 197 PSSSFG-KKRGQDSNEgSGNRRHKRMIKNRESAARSRARKQAYTNELELEVAHLQAENARLKRQQDQLK 264 555554.455554444167899**************************999999999998877777664 PP >> sp|A5PJV0|MAFG_BOVIN Transcription factor MafG OS=Bos taurus GN=MAFG PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.3 0.5 0.0009 2.3 84 151 .. 52 119 .. 30 144 .. 0.73 Alignments for each domain: == domain 1 score: 12.3 bits; conditional E-value: 0.0009 sp|Q1XGE2|HAC1_ASPOR 84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevr 151 ++ +r l+nr+ a ++r ++ + e le +k +l+q+ + l + ++ e + l + l r sp|A5PJV0|MAFG_BOVIN 52 LKQRRRTLKNRGYAASCRVKRVTQKEELEKQKAELQQEVEKLASENASMKLELDALRSKYEALQNFAR 119 3444699************9999***************999999988888888877665544443333 PP >> sp|O54790|MAFG_MOUSE Transcription factor MafG OS=Mus musculus GN=Mafg PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.3 0.5 0.0009 2.3 84 151 .. 52 119 .. 30 144 .. 0.73 Alignments for each domain: == domain 1 score: 12.3 bits; conditional E-value: 0.0009 sp|Q1XGE2|HAC1_ASPOR 84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevr 151 ++ +r l+nr+ a ++r ++ + e le +k +l+q+ + l + ++ e + l + l r sp|O54790|MAFG_MOUSE 52 LKQRRRTLKNRGYAASCRVKRVTQKEELEKQKAELQQEVEKLASENASMKLELDALRSKYEALQNFAR 119 3444699************9999***************999999988888888877665544443333 PP >> sp|Q39234|TGA3_ARATH Transcription factor TGA3 OS=Arabidopsis thaliana GN=TGA3 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.7 1.9 0.0014 3.4 77 131 .. 90 144 .. 82 161 .. 0.82 Alignments for each domain: == domain 1 score: 11.7 bits; conditional E-value: 0.0014 sp|Q1XGE2|HAC1_ASPOR 77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 + ed+ ++ +r+ +nr aa+ sr rk+ ++++le +++l q q l++ +q sp|Q39234|TGA3_ARATH 90 QDEDRINDKMKRRLAQNREAARKSRLRKKAHVQQLEESRLKLSQLEQELVRARQQ 144 456666677778899*****************************99988876555 PP >> sp|P07049|CPPB_NEIGO Cryptic plasmid protein B OS=Neisseria gonorrhoeae GN=cppB PE=4 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.8 1.0 0.0013 3.3 108 151 .. 147 194 .. 122 204 .. 0.71 Alignments for each domain: == domain 1 score: 11.8 bits; conditional E-value: 0.0013 sp|Q1XGE2|HAC1_ASPOR 108 leklenekiqleqqnq....fllqrlsqleaennrlsqqlaqlaaevr 151 l le+ +eq+ + l +rl++le en l+qqla laae+ sp|P07049|CPPB_NEIGO 147 LAELESNHAAIEQRMMkaltHLGERLAELEQENTSLAQQLASLAAELE 194 5566666666666554111156689********************984 PP >> sp|P11939|FOS_CHICK Proto-oncogene c-Fos OS=Gallus gallus GN=FOS PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.6 0.9 0.0015 3.8 79 140 .. 133 193 .. 88 212 .. 0.83 Alignments for each domain: == domain 1 score: 11.6 bits; conditional E-value: 0.0015 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrls 140 +e e+rri+r rn+ aa +r r+r + l+ e qle++ l ++ l e +l sp|P11939|FOS_CHICK 133 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEEEKSALQAEIANLLKEKEKLE 193 467788999885.899889999999999999**********999888888877777666665 PP >> sp|P29176|FOSX_MSVFR Transforming protein v-Fos/v-Fox OS=FBR murine osteosarcoma virus GN=FOS-FOX PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.0 0.0 0.0011 2.9 80 144 .. 111 174 .. 54 239 .. 0.80 Alignments for each domain: == domain 1 score: 12.0 bits; conditional E-value: 0.0011 sp|Q1XGE2|HAC1_ASPOR 80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144 +e +rri+r rn+ aa +r r+r + l+ e qle++ l ++ l e +l la sp|P29176|FOSX_MSVFR 111 EEEVKRRIRR-ERNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILA 174 4555788877.5899999999999999999**********9999988888888877777766555 PP >> sp|O54791|MAFF_MOUSE Transcription factor MafF OS=Mus musculus GN=Maff PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.0 0.6 0.0011 2.9 84 168 .. 52 133 .. 32 154 .. 0.73 Alignments for each domain: == domain 1 score: 12.0 bits; conditional E-value: 0.0011 sp|Q1XGE2|HAC1_ASPOR 84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatasp 168 ++ +r l+nr+ a ++r ++ ++ e l+ +k +le++ + l + + ++ e + l ++ l + r a g a +p sp|O54791|MAFF_MOUSE 52 LKQRRRTLKNRGYAASCRVKRVCQKEELQKQKSELEREVDKLARENAAMRLELDALRGKCEALQGFARSVAA---ARGPAALVAP 133 3444699*******************************9999999999999888887666655554443322...2233333444 PP >> sp|Q8TI88|PSMR_METAC Proteasome-activating nucleotidase OS=Methanosarcina acetivorans GN=pan PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 6.0 0.1 0.075 1.9e+02 110 154 .. 26 70 .. 22 95 .. 0.82 2 ? 4.1 0.0 0.28 7.1e+02 115 190 .. 255 330 .. 236 363 .. 0.78 Alignments for each domain: == domain 1 score: 6.0 bits; conditional E-value: 0.075 sp|Q1XGE2|HAC1_ASPOR 110 klenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsr 154 ++++ qle +n fl +++sq+e+e + l q + e+r + sp|Q8TI88|PSMR_METAC 26 SVQDRVRQLESRNSFLEEQCSQIESEKRYLENQKIKYEREIRKLQ 70 566677799*********************999999999998655 PP == domain 2 score: 4.1 bits; conditional E-value: 0.28 sp|Q1XGE2|HAC1_ASPOR 115 kiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatasp.tltptlfkqerdelpleripfp 190 i +++ + + +rl++ + ++ +++ l ql ae+ g + + at p l p + + r + l ++p+p sp|Q8TI88|PSMR_METAC 255 IIFIDELDSIAARRLNETTGADREVQRTLMQLLAEMDGFDKRKNIRIIAATNRPdVLDPAILRPGRFDR-LVHVPMP 330 4567778888999******999****************8777777777888887357899999988764.5566665 PP >> sp|O08750|NFIL3_MOUSE Nuclear factor interleukin-3-regulated protein OS=Mus musculus GN=Nfil3 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.1 0.3 0.0021 5.5 69 129 .. 58 119 .. 51 142 .. 0.82 Alignments for each domain: == domain 1 score: 11.1 bits; conditional E-value: 0.0021 sp|Q1XGE2|HAC1_ASPOR 69 nlpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrl 129 + rkr dek++ e+ +n aa+ sre++rl len+ i l ++n l l sp|O08750|NFIL3_MOUSE 58 SACRRKREFIPDEKKDaMYWEKRRKNNEAAKRSREKRRLNDLVLENKLIALGEENATLKAEL 119 5567899999998766155789999**************************99998876655 PP >> sp|Q76MX4|MAFG_RAT Transcription factor MafG OS=Rattus norvegicus GN=Mafg PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.7 0.5 0.0013 3.4 84 149 .. 79 144 .. 57 170 .. 0.73 Alignments for each domain: == domain 1 score: 11.7 bits; conditional E-value: 0.0013 sp|Q1XGE2|HAC1_ASPOR 84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaae 149 ++ +r l+nr+ a ++r ++ + e le +k +l+q+ + l + ++ e + l + l sp|Q76MX4|MAFG_RAT 79 LKQRRRTLKNRGYAASCRVKRVTQKEELEKQKAELQQEVEKLASENASMKLELDALRSKYEALQNF 144 3444699************9999***************9999998888888888776655444433 PP >> sp|P20482|CNC_DROME Segmentation protein cap'n'collar OS=Drosophila melanogaster GN=cnc PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.9 0.8 0.0025 6.4 85 152 .. 1197 1264 .. 1154 1284 .. 0.82 Alignments for each domain: == domain 1 score: 10.9 bits; conditional E-value: 0.0025 sp|Q1XGE2|HAC1_ASPOR 85 rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrg 152 r i+r +n+ aaq +r+rk ++ le+e + ++ l q ++le+e+ r+s ++a+l +v sp|P20482|CNC_DROME 1197 RDIRRRGKNKVAAQNCRKRKLDQILTLEDEVNAVVKRKTQLNQDRDHLESERKRISNKFAMLHRHVFQ 1264 67889999**********************988888888899999****************9988754 PP >> sp|Q90Z72|NFIL3_CHICK Nuclear factor interleukin-3-regulated protein OS=Gallus gallus GN=NFIL3 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.1 0.2 0.0021 5.3 70 130 .. 59 120 .. 54 145 .. 0.81 Alignments for each domain: == domain 1 score: 11.1 bits; conditional E-value: 0.0021 sp|Q1XGE2|HAC1_ASPOR 70 lpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrls 130 rkr dek++ e+ +n aa+ sre++rl len+ i l ++n l l sp|Q90Z72|NFIL3_CHICK 59 ACRRKREFIPDEKKDaMYWEKRRKNNEAAKRSREKRRLNDLVLENKLIALGEENATLKAELL 120 557899999898766155789999**************************999988766655 PP >> sp|Q9VWW0|CREBB_DROME Cyclic AMP response element-binding protein B OS=Drosophila melanogaster GN=CrebB-17A PE=1 SV= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.0 1.7 0.0022 5.6 78 131 .. 296 348 .. 289 355 .. 0.85 Alignments for each domain: == domain 1 score: 11.0 bits; conditional E-value: 0.0022 sp|Q1XGE2|HAC1_ASPOR 78 tedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 ed+ ++r i r+ +nr aa+ +r++k+ ++ len+ le qn+ l++ l sp|Q9VWW0|CREBB_DROME 296 AEDQTRKREI-RLQKNREAARECRRKKKEYIKCLENRVAVLENQNKALIEELKS 348 4666666555.899***********99999******************998865 PP >> sp|Q8BKJ9|SIRT7_MOUSE NAD-dependent deacetylase sirtuin-7 OS=Mus musculus GN=Sirt7 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.2 1.4 0.0019 4.9 74 164 .. 19 111 .. 12 174 .. 0.75 Alignments for each domain: == domain 1 score: 11.2 bits; conditional E-value: 0.0019 sp|Q1XGE2|HAC1_ASPOR 74 kraktedekeq.rriervlrnraaaqtsrerkrl..eleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantp 158 +r + e+++e+ r++ r+lr aa + s e rl e e l e ++++ l +r ++ + l +++ +la+ vr +r sp|Q8BKJ9|SIRT7_MOUSE 19 RRLREEQQRERlRQVSRILRKAAAER-SAEEGRLlaESEDLVTELQGRSRRREGLKRRQEEVCDDPEELRRKVRELAGAVRSARHLVV 105 4556666666547899***9766555.55555542477889988777888888899999999899999**************998777 PP sp|Q1XGE2|HAC1_ASPOR 159 lpgspa 164 g+ sp|Q8BKJ9|SIRT7_MOUSE 106 YTGAGI 111 766654 PP >> sp|Q56TT7|FOS_PHOCM Proto-oncogene c-Fos OS=Phodopus campbelli GN=FOS PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.9 0.1 0.0025 6.3 79 144 .. 134 198 .. 118 301 .. 0.71 Alignments for each domain: == domain 1 score: 10.9 bits; conditional E-value: 0.0025 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqla 144 +e e+rri+r rn+ aa +r r+r + l+ e +le++ l ++ l e +l la sp|Q56TT7|FOS_PHOCM 134 PEEEEKRRIRRE-RNKMAAAKCRNRRRELTDTLQAETDHLEDEKSALQTEIANLLKEKEKLEFILA 198 467788999885.88888889999999889999999999999998888888888888777766655 PP >> sp|Q6IMZ0|NFIL3_RAT Nuclear factor interleukin-3-regulated protein OS=Rattus norvegicus GN=Nfil3 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.0 0.3 0.0023 5.8 69 129 .. 58 119 .. 51 140 .. 0.82 Alignments for each domain: == domain 1 score: 11.0 bits; conditional E-value: 0.0023 sp|Q1XGE2|HAC1_ASPOR 69 nlpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrl 129 + rkr dek++ e+ +n aa+ sre++rl len+ i l ++n l l sp|Q6IMZ0|NFIL3_RAT 58 SACRRKREFIPDEKKDaMYWEKRRKNNEAAKRSREKRRLNDLVLENKLIALGEENATLKAEL 119 5567899999998766155789999**************************99998776655 PP >> sp|P38749|YAP3_YEAST AP-1-like transcription factor YAP3 OS=Saccharomyces cerevisiae GN=YAP3 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.6 1.6 0.00037 0.94 81 140 .. 142 201 .. 127 211 .. 0.85 Alignments for each domain: == domain 1 score: 13.6 bits; conditional E-value: 0.00037 sp|Q1XGE2|HAC1_ASPOR 81 ekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrls 140 ++ + ++ +nraa + rerk +++ l+++ ++ e+ +q ll+ + +l+ n ++ sp|P38749|YAP3_YEAST 142 VPDDSKAKKKAQNRAAQKAFRERKEARMKELQDKLLESERNRQSLLKEIEELRKANTEIN 201 555666777889*************************************99998887765 PP >> sp|Q08D88|NFIL3_BOVIN Nuclear factor interleukin-3-regulated protein OS=Bos taurus GN=NFIL3 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.0 0.2 0.0022 5.5 70 129 .. 59 119 .. 52 142 .. 0.82 Alignments for each domain: == domain 1 score: 11.0 bits; conditional E-value: 0.0022 sp|Q1XGE2|HAC1_ASPOR 70 lpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrl 129 rkr dek++ e+ +n aa+ sre++rl len+ i l ++n l l sp|Q08D88|NFIL3_BOVIN 59 ACRRKREFIPDEKKDaMYWEKRRKNNEAAKRSREKRRLNDLVLENKLIALGEENATLKAEL 119 567899999898766155789999**************************99998876655 PP >> sp|Q16649|NFIL3_HUMAN Nuclear factor interleukin-3-regulated protein OS=Homo sapiens GN=NFIL3 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.0 0.3 0.0023 5.9 70 129 .. 59 119 .. 52 141 .. 0.82 Alignments for each domain: == domain 1 score: 11.0 bits; conditional E-value: 0.0023 sp|Q1XGE2|HAC1_ASPOR 70 lpprkraktedekeq.rriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrl 129 rkr dek++ e+ +n aa+ sre++rl len+ i l ++n l l sp|Q16649|NFIL3_HUMAN 59 ACRRKREFIPDEKKDaMYWEKRRKNNEAAKRSREKRRLNDLVLENKLIALGEENATLKAEL 119 567899999898766155789999**************************99998876655 PP >> sp|Q9C7S0|BZI60_ARATH bZIP transcription factor 60 OS=Arabidopsis thaliana GN=BZIP60 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.8 2.1 0.0026 6.6 80 142 .. 137 199 .. 132 215 .. 0.82 Alignments for each domain: == domain 1 score: 10.8 bits; conditional E-value: 0.0026 sp|Q1XGE2|HAC1_ASPOR 80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqq 142 d+ ++ +r +rnr aa srerk+ ++ le + le++ l + l + aen+ l sp|Q9C7S0|BZI60_ARATH 137 DDAVAKKRRRRVRNRDAAVRSRERKKEYVQDLEKKSKYLERECLRLGRMLECFVAENQSLRYC 199 444455556778**********************99999999988888888899999877654 PP >> sp|P78962|ATF21_SCHPO Transcription factor atf21 OS=Schizosaccharomyces pombe GN=atf21 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.1 0.6 0.0022 5.5 74 143 .. 261 327 .. 237 343 .. 0.72 Alignments for each domain: == domain 1 score: 11.1 bits; conditional E-value: 0.0022 sp|Q1XGE2|HAC1_ASPOR 74 kraktedekeqrriervlrnraaaqtsrerkrleleklenek.iqleqqnqfllqrlsqleaennrlsqql 143 t d k++r +e rnr aa +r++k+l + le i +e q++ l +sql+ e l ql sp|P78962|ATF21_SCHPO 261 SNNETPDMKRRRFLE---RNRIAASKCRQKKKLWTQNLEKTAhIACE-QSKALRILVSQLREEVICLKNQL 327 455677777666666...7*******************986515555.56667777899888877776654 PP >> sp|Q1LZH5|CREM_BOVIN cAMP-responsive element modulator OS=Bos taurus GN=CREM PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.7 0.1 0.0027 6.9 80 130 .. 299 349 .. 227 355 .. 0.89 Alignments for each domain: == domain 1 score: 10.7 bits; conditional E-value: 0.0027 sp|Q1XGE2|HAC1_ASPOR 80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrls 130 +e ++r r+++nr aa+ +r+rk+ ++ le++ le qn+ l++ l sp|Q1LZH5|CREM_BOVIN 299 EEATRKRELRLMKNREAAKECRRRKKEYVKCLESRVAVLEVQNKKLIEELE 349 4556677789****************99*******99*******9998876 PP >> sp|B1MX63|THIE_LEUCK Thiamine-phosphate pyrophosphorylase OS=Leuconostoc citreum (strain KM20) GN=thiE PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.7 0.0 0.0029 7.3 189 227 .. 139 177 .. 130 187 .. 0.91 Alignments for each domain: == domain 1 score: 10.7 bits; conditional E-value: 0.0029 sp|Q1XGE2|HAC1_ASPOR 189 fptpslsdysptlkpstlaessdvaqhpavsvaglegdg 227 f t s sd p + s l++ +a+hp v+++g++ d sp|B1MX63|THIE_LEUCK 139 FATTSKSDAKPPIGISGLSQLIRIAHHPIVAIGGIQRDN 177 8999********************************996 PP >> sp|Q5AVK6|NOP16_EMENI Nucleolar protein 16 OS=Emericella nidulans GN=nop16 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.8 2.0 0.0026 6.7 29 114 .. 136 219 .. 127 236 .. 0.74 Alignments for each domain: == domain 1 score: 10.8 bits; conditional E-value: 0.0026 sp|Q1XGE2|HAC1_ASPOR 29 spadtslnsadvktqevkpeekkpakkrkswgqelpvpktnlpprk...raktedekeqrriervlrnraaaqtsrerkrleleklen 113 +p + ln+ e+kp+ kk a + q+l + n+ p+k ++k e+e r ie+ n aa +r+rk +++ e+ sp|Q5AVK6|NOP16_EMENI 136 NPLNDPLNDLSDNEPEIKPQVKKAANQ---IVQQLEIQADNVAPKKprhQSKREEEWITRLIEKHGDNYAA--MARDRKLNPMQQTEG 218 688888999888999******999876...46999999999987552114555666666666666656554..579999999998887 PP sp|Q1XGE2|HAC1_ASPOR 114 e 114 + sp|Q5AVK6|NOP16_EMENI 219 D 219 6 PP >> sp|Q9ULX9|MAFF_HUMAN Transcription factor MafF OS=Homo sapiens GN=MAFF PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.1 0.7 0.0022 5.5 84 152 .. 52 120 .. 32 144 .. 0.74 Alignments for each domain: == domain 1 score: 11.1 bits; conditional E-value: 0.0022 sp|Q1XGE2|HAC1_ASPOR 84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrg 152 ++ +r l+nr+ a ++r ++ ++ e l+ +k +le++ + l + + ++ e + l ++ l + r sp|Q9ULX9|MAFF_HUMAN 52 LKQRRRTLKNRGYAASCRVKRVCQKEELQKQKSELEREVDKLARENAAMRLELDALRGKCEALQGFARS 120 3444699******************************99999999888988888877665555444443 PP >> sp|P53567|CEBPG_HUMAN CCAAT/enhancer-binding protein gamma OS=Homo sapiens GN=CEBPG PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.0 0.3 0.0023 5.7 90 147 .. 58 112 .. 21 117 .. 0.77 Alignments for each domain: == domain 1 score: 11.0 bits; conditional E-value: 0.0023 sp|Q1XGE2|HAC1_ASPOR 90 vlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqla 147 + rn + rer + ++ +++ +q+ q lqr++ql+ en rl ++ l sp|P53567|CEBPG_HUMAN 58 MDRNSDEYRQRRERNNMAVK---KSRLKSKQKAQDTLQRVNQLKEENERLEAKIKLLT 112 55565555566666666554...56888999999****************98887665 PP >> sp|Q2V2M9|FHOD3_HUMAN FH1/FH2 domain-containing protein 3 OS=Homo sapiens GN=FHOD3 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.2 0.3 0.0081 21 56 167 .. 412 524 .. 366 535 .. 0.72 Alignments for each domain: == domain 1 score: 9.2 bits; conditional E-value: 0.0081 sp|Q1XGE2|HAC1_ASPOR 56 rkswgqelpv.pktnlpprkraktedekeqrriervlrnr.aaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsq 141 r s g +p p +++ p + a+ e + +r++ + rer+r e e + ++i+ e++n+f + l ql ae + sp|Q2V2M9|FHOD3_HUMAN 412 RPSSGSSVPTtPTSSVSPPQEARWERSSPSGLLTSSFRQHqESLAAERERRRQEREE-RLQRIEREERNKFRYKYLEQLAAEEHEKEL 498 566677777525556777778888888877777776665414556779999998876.4579*****************999875433 PP sp|Q1XGE2|HAC1_ASPOR 142 qlaqlaaevrgsrantplpgspatas 167 + ++ + p +pa+ + sp|Q2V2M9|FHOD3_HUMAN 499 RSRSVSRGRADLSLDLTSPAAPACLA 524 32222222222223444455555554 PP >> sp|Q03060|CREM_HUMAN cAMP-responsive element modulator OS=Homo sapiens GN=CREM PE=1 SV=5 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.7 0.1 0.0028 7.1 80 130 .. 299 349 .. 230 355 .. 0.89 Alignments for each domain: == domain 1 score: 10.7 bits; conditional E-value: 0.0028 sp|Q1XGE2|HAC1_ASPOR 80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrls 130 +e ++r r+++nr aa+ +r+rk+ ++ le++ le qn+ l++ l sp|Q03060|CREM_HUMAN 299 EEATRKRELRLMKNREAAKECRRRKKEYVKCLESRVAVLEVQNKKLIEELE 349 4556677789****************99*******99*******9998876 PP >> sp|O68007|BACB_BACLI Bacitracin synthase 2 OS=Bacillus licheniformis GN=bacB PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.0 0.1 0.0045 11 181 256 .. 353 428 .. 325 464 .. 0.73 Alignments for each domain: == domain 1 score: 10.0 bits; conditional E-value: 0.0045 sp|Q1XGE2|HAC1_ASPOR 181 elpleripfptpslsdysptlkpstla..essdvaqhpavsvaglegdgsalplfdlgsdlkhhstddvaaplsdddf 256 l l+ p ++s+y t+k +tl e++d + gl d s plfd dl+h dd+a+ + f sp|O68007|BACB_BACLI 353 TLALRNRPKGNMTFSEYVQTVKNNTLKayENQDYQFDALIEHLGLTHDMSRNPLFDTMFDLQH--ADDFASEAGGGHF 428 5778888888999************95347888888888999*******************99..5788876665555 PP >> sp|Q5VPE3|HOX2_ORYSJ Homeobox-leucine zipper protein HOX2 OS=Oryza sativa subsp. japonica GN=HOX2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.6 0.4 0.003 7.6 106 251 .. 160 302 .. 135 307 .. 0.63 Alignments for each domain: == domain 1 score: 10.6 bits; conditional E-value: 0.003 sp|Q1XGE2|HAC1_ASPOR 106 leleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa.evr..gsrantplpgspatasptltptlfkqerdelpleripfpt 191 ++ ++ + + q e + ++l + + +l en rl ++la+l a + + a+ +p s a a+ t++p++ + p sp|Q5VPE3|HOX2_ORYSJ 160 FQNRRARTKLKQTEVDCEYLKRWCERLADENKRLEKELADLRAlKAApsPASASAMQPSSSAAATLTMCPSCRRVATAGAPH------Q 242 44444444444666677788888888999**********9976233311445677889999999999999876655444443......3 PP sp|Q1XGE2|HAC1_ASPOR 192 pslsdysptlkpstlaessdvaqhpavsvag...legdgsalplfdlgsdlkhhstddvaapl 251 p+ ++ p +t++ ss a av+vag l + +p +d +st + aapl sp|Q5VPE3|HOX2_ORYSJ 243 PNHQQCHPKS-NTTISSSSTAA--AAVAVAGgnvLPSHCQFFPAAAAAADRTSQSTWNAAAPL 302 5556666643.34555555544..456666633345555666666677788888888888887 PP >> sp|Q84U86|HOX2_ORYSI Homeobox-leucine zipper protein HOX2 OS=Oryza sativa subsp. indica GN=HOX2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.6 0.4 0.003 7.6 106 251 .. 160 302 .. 135 307 .. 0.63 Alignments for each domain: == domain 1 score: 10.6 bits; conditional E-value: 0.003 sp|Q1XGE2|HAC1_ASPOR 106 leleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaa.evr..gsrantplpgspatasptltptlfkqerdelpleripfpt 191 ++ ++ + + q e + ++l + + +l en rl ++la+l a + + a+ +p s a a+ t++p++ + p sp|Q84U86|HOX2_ORYSI 160 FQNRRARTKLKQTEVDCEYLKRWCERLADENKRLEKELADLRAlKAApsPASASAMQPSSSAAATLTMCPSCRRVATAGAPH------Q 242 44444444444666677788888888999**********9976233311445677889999999999999876655444443......3 PP sp|Q1XGE2|HAC1_ASPOR 192 pslsdysptlkpstlaessdvaqhpavsvag...legdgsalplfdlgsdlkhhstddvaapl 251 p+ ++ p +t++ ss a av+vag l + +p +d +st + aapl sp|Q84U86|HOX2_ORYSI 243 PNHQQCHPKS-NTTISSSSTAA--AAVAVAGgnvLPSHCQFFPAAAAAADRTSQSTWNAAAPL 302 5556666643.34555555544..456666633345555666666677788888888888887 PP >> sp|Q65US7|THIE_MANSM Thiamine-phosphate pyrophosphorylase OS=Mannheimia succiniciproducens (strain MBEL55E) GN=thiE # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.8 0.0 0.0026 6.6 135 238 .. 95 196 .. 54 199 .. 0.73 Alignments for each domain: == domain 1 score: 10.8 bits; conditional E-value: 0.0026 sp|Q1XGE2|HAC1_ASPOR 135 ennrlsqqlaqlaaevrgsrantplpgspatasptltptlfkqerdelpleri.p.fptpslsdysptlkpstlaessdva.qhpavsv 220 ++ +++q+ + +r +r n p+ g tl l ++r+++ + p fpt s +d+sp + + + + +++ + p+v++ sp|Q65US7|THIE_MANSM 95 DGIHVGQKDTAVETILRNTR-NKPIIGLS---INTLAQALANKDRQDIDYFGVgPiFPTNSKADHSPLVGMNFIRQIRQLGiDKPCVAI 179 55555555555555555554.67777754...457777777777777776655324*******************999986378***** PP sp|Q1XGE2|HAC1_ASPOR 221 aglegdgsalplfdlgsd 238 +g++ + +a+ l lg+d sp|Q65US7|THIE_MANSM 180 GGIKEESAAI-LRRLGAD 196 ***9876665.6777776 PP >> sp|P07948|LYN_HUMAN Tyrosine-protein kinase Lyn OS=Homo sapiens GN=LYN PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.4 0.2 0.0034 8.6 36 87 .. 15 67 .. 7 73 .. 0.84 Alignments for each domain: == domain 1 score: 10.4 bits; conditional E-value: 0.0034 sp|Q1XGE2|HAC1_ASPOR 36 nsadvktqevkpeekkp.akkrkswgqelpvpktnlpprkraktedekeqrri 87 ++ d+ktq v+ e+ + s q+ pvp ++l p +r +t+d eq i sp|P07948|LYN_HUMAN 15 DGVDLKTQPVRNTERTIyVRDPTSNKQQRPVPESQLLPGQRFQTKDPEEQGDI 67 5689*******9888761566678889********************999765 PP >> sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Homo sapiens GN=HLF PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.4 4.3 0.00042 1.1 21 145 .. 163 287 .. 141 293 .. 0.79 Alignments for each domain: == domain 1 score: 13.4 bits; conditional E-value: 0.00042 sp|Q1XGE2|HAC1_ASPOR 21 sevpvltvspadtslnsadvktqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrlele 109 p p + ad+ + +e +krk +el rk +d k+++ r +n aa+ sr+ +rl+ sp|Q16534|HLF_HUMAN 163 PIDPDTIQVPVGYEPDPADLALSSIPGQEMFDPRKRKFSEEELKPQPMIKKARKVFIPDDLKDDKYWARRRKNNMAAKRSRDARRLKEN 251 3334444457777778888888999999998889999888888533334467888889999**************************** PP sp|Q1XGE2|HAC1_ASPOR 110 klenekiqleqqnqfllqrlsqleaennrlsqqlaq 145 ++ + le++n l q +++l+ e +++ la+ sp|Q16534|HLF_HUMAN 252 QIAIRASFLEKENSALRQEVADLRKELGKCKNILAK 287 ********************9999998888777776 PP >> sp|Q9XGJ4|GGM13_GNEGN MADS-box protein GGM13 OS=Gnetum gnemon GN=GGM13 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.8 0.6 0.0026 6.6 74 147 .. 92 165 .. 75 230 .. 0.82 Alignments for each domain: == domain 1 score: 10.8 bits; conditional E-value: 0.0026 sp|Q1XGE2|HAC1_ASPOR 74 kraktedekeqrriervlrnraaaqtsrerkrleleklenekiql.eqqnqfllqrlsqleaennrlsqqlaqla 147 r k e+ek q i+r++ + t e +l + +le+ ++ ++nq +lq+l l+ + + l +q ++l+ sp|Q9XGJ4|GGM13_GNEGN 92 TRMKNENEKLQTNIRRMMGEDLTSLTMTELHHLGQ-QLESASSRVrSRKNQLMLQQLENLRRKERILEDQNSHLC 165 689**************************999975.57766555415789*****99988777666665544333 PP >> sp|P27921|JUND_CHICK Transcription factor jun-D OS=Gallus gallus GN=JUND PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.3 0.4 0.0036 9.2 71 139 .. 230 298 .. 195 308 .. 0.70 Alignments for each domain: == domain 1 score: 10.3 bits; conditional E-value: 0.0036 sp|Q1XGE2|HAC1_ASPOR 71 pprkraktedekeqrrier.vlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrl 139 pp d +e+ + er lrnr aa +r+rk ++ +le + l+ qn l s l+ + +l sp|P27921|JUND_CHICK 230 PPLSPI-DMDTQERIKAERkRLRNRIAASKCRKRKLERISRLEEKVKSLKSQNTELASTASLLREQVAQL 298 333333.344555555555269************999999999777778999987776666655554444 PP >> sp|Q5XHX8|THEG_RAT Testicular haploid expressed gene protein OS=Rattus norvegicus GN=Theg PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.4 0.7 0.0034 8.8 117 205 .. 218 300 .. 182 318 .. 0.76 Alignments for each domain: == domain 1 score: 10.4 bits; conditional E-value: 0.0034 sp|Q1XGE2|HAC1_ASPOR 117 qleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspatasptltptlfkqerdelpleripfptpslsdysptlkpst 205 le q l+rl+ + +nn s +++++ r ++ p p + a p tl +e d + p p p +sdy+ l+ +t sp|Q5XHX8|THEG_RAT 218 TLEYQASNRLKRLATPKIRNNIWSINMSEVSQVSRAAQMAVPTPRTLRLAKPRAPATLL-EEWDPM-----PKPKPYVSDYNRLLQLAT 300 45556666799*****************************************9877776.567755.....679999****99887655 PP >> sp|P18847|ATF3_HUMAN Cyclic AMP-dependent transcription factor ATF-3 OS=Homo sapiens GN=ATF3 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.4 1.6 0.0034 8.7 76 158 .. 82 163 .. 71 168 .. 0.79 Alignments for each domain: == domain 1 score: 10.4 bits; conditional E-value: 0.0034 sp|Q1XGE2|HAC1_ASPOR 76 aktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqql..aqlaaevrgsrantp 158 a ede+++rr e rn+ aa +r +k+ + e l+ e +le n l ++ +l+ e ++l +l + + vr + ++tp sp|P18847|ATF3_HUMAN 82 APEEDERKKRRRE---RNKIAAAKCRNKKKEKTECLQKESEKLESVNAELKAQIEELKNEKQHLIYMLnlHRPTCIVRAQNGRTP 163 4456666666655...7999999***************************99999999999988765411455666777777776 PP >> sp|P24068|OCS1_MAIZE Ocs element-binding factor 1 OS=Zea mays GN=OBF1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.4 3.8 0.0034 8.7 84 149 .. 25 90 .. 12 101 .. 0.77 Alignments for each domain: == domain 1 score: 10.4 bits; conditional E-value: 0.0034 sp|Q1XGE2|HAC1_ASPOR 84 qrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaae 149 +rr +r l nr +a+ sr rk+ +l+ l +e +l+ +n + r ++ ++ r+ q+ l a+ sp|P24068|OCS1_MAIZE 25 HRREKRRLSNRESARRSRLRKQQHLDELVQEVARLQADNARVAARARDIASQYTRVEQENTVLRAR 90 577778888999999999999999999999988888888888888888888888888876655543 PP >> sp|P20393|NR1D1_HUMAN Nuclear receptor subfamily 1 group D member 1 OS=Homo sapiens GN=NR1D1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.1 4.2 0.0043 11 83 197 .. 173 288 .. 159 298 .. 0.73 Alignments for each domain: == domain 1 score: 10.1 bits; conditional E-value: 0.0043 sp|Q1XGE2|HAC1_ASPOR 83 eqrriervlrnraaaqtsrerkrlel....eklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrantplpgspat. 165 e i r+ rnr+ q +r +k l + + ++ +i ++++++l + s + nn+ls q+ e ++ tp p +p+ sp|P20393|NR1D1_HUMAN 173 ENCSIVRINRNRC--QQCRFKKCLSVgmsrDAVRFGRIPKREKQRMLAEMQSAMNLANNQLSSQC---PLETSPTQHPTPGPMGPSPp 255 5556778888875..66777776654111145677788888888889999999999999999875...45666667777777666541 PP sp|Q1XGE2|HAC1_ASPOR 166 asptltptl.fkqerdelpleripfptpslsdy 197 +p +p + f q ++l r p p p++ d sp|P20393|NR1D1_HUMAN 256 PAPVPSPLVgFSQFPQQLTPPRSPSPEPTVEDV 288 4577777655999999************99885 PP >> sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus GN=Fosb PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.2 8.1 0.0039 10 69 164 .. 142 236 .. 130 297 .. 0.72 Alignments for each domain: == domain 1 score: 10.2 bits; conditional E-value: 0.0039 sp|Q1XGE2|HAC1_ASPOR 69 nlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsrant 157 pr t +e e+rr++r rn+ aa +r r+r ++l+ e qle++ l +++l+ e rl l ++ sp|P13346|FOSB_MOUSE 142 PRRPREETLTPEEEEKRRVRRE-RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEG 229 445788888999999***9885.89999999999999999*****************************99877655444444444455 PP sp|Q1XGE2|HAC1_ASPOR 158 plpgspa 164 p pg a sp|P13346|FOSB_MOUSE 230 PGPGPLA 236 5555544 PP >> sp|P42775|GBF2_ARATH G-box-binding factor 2 OS=Arabidopsis thaliana GN=GBF2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.8 1.5 0.0051 13 80 152 .. 246 322 .. 236 329 .. 0.80 Alignments for each domain: == domain 1 score: 9.8 bits; conditional E-value: 0.0051 sp|Q1XGE2|HAC1_ASPOR 80 dekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqq....laqlaaevrg 152 +eke +r +r nr +a+ sr rk+ e e+l + l +n+ l +l+ql e+ +l + l ql a+ g sp|P42775|GBF2_ARATH 246 NEKEVKREKRKQSNRESARRSRLRKQAETEQLSVKVDALVAENMSLRSKLGQLNNESEKLRLEneaiLDQLKAQATG 322 79999***************************998889999***********9877665543211224566666655 PP >> sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS=Schizosaccharomyces pombe GN=pcr1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.2 7.9 0.0079 20 74 145 .. 4 73 .. 1 169 [. 0.60 Alignments for each domain: == domain 1 score: 9.2 bits; conditional E-value: 0.0079 sp|Q1XGE2|HAC1_ASPOR 74 kraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqql.aq 145 k+ +dek++r +e rnr aa r++k+ ++ le+ +q++ l lsql+ e rl ql a+ sp|Q09926|PCR1_SCHPO 4 KKKEVDDEKRRRILE---RNRIAASKFRQKKKEWIKELEQTANAAFEQSKRLQLLLSQLQQEAFRLKSQLlAH 73 445567777666555...7***********9987777776665555555555556777777777776554122 PP >> sp|P24813|YAP2_YEAST AP-1-like transcription activator YAP2 OS=Saccharomyces cerevisiae GN=CAD1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.0 1.5 0.0045 11 64 121 .. 29 80 .. 15 105 .. 0.73 Alignments for each domain: == domain 1 score: 10.0 bits; conditional E-value: 0.0045 sp|Q1XGE2|HAC1_ASPOR 64 pvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqq 121 p k + p rkr +e + r r +nraa + r+rk +++ l+ +++l +q sp|P24813|YAP2_YEAST 29 PKRKVGRPGRKRIDSE--AKSR---RTAQNRAAQRAFRDRKEAKMKSLQE-RVELLEQ 80 5566777888876544..3334...6789****************99974.5544333 PP >> sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattus norvegicus GN=Hlf PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.5 4.4 0.00076 1.9 24 145 .. 166 287 .. 141 293 .. 0.76 Alignments for each domain: == domain 1 score: 12.5 bits; conditional E-value: 0.00076 sp|Q1XGE2|HAC1_ASPOR 24 pvltvspadtslnsadvktqevkpeekkpakkrkswgqel.pvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrlelekl 111 p p + ad+ + e +krk +el p p rk +d k+++ r +n aa+ sr+ +rl+ ++ sp|Q64709|HLF_RAT 166 PDTIQVPVGYEPDPADLALSSIPGPEMFDPRKRKFSEEELkPQPMI-KKARKVFIPDDLKDDKYWARRRKNNMAAKRSRDARRLKENQI 253 3334446666667788877777655565566777767777244444.457888889999****************************** PP sp|Q1XGE2|HAC1_ASPOR 112 enekiqleqqnqfllqrlsqleaennrlsqqlaq 145 + le++n l q +++l+ e +++ la+ sp|Q64709|HLF_RAT 254 AIRASFLEKENSALRQEVADLRKELGKCKNILAK 287 ******************9999998888777776 PP >> sp|Q02100|SKO1_YEAST CRE-binding bZIP protein SKO1 OS=Saccharomyces cerevisiae GN=SKO1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.9 0.3 0.0047 12 79 120 .. 425 466 .. 390 481 .. 0.83 Alignments for each domain: == domain 1 score: 9.9 bits; conditional E-value: 0.0047 sp|Q1XGE2|HAC1_ASPOR 79 edekeqrriervlrnraaaqtsrerkrleleklenekiqleq 120 +e+e++r e + rnr aa r+rk+ ++k+en+ e sp|Q02100|SKO1_YEAST 425 NEEQERKRKEFLERNRVAASKFRKRKKEYIKKIENDLQFYES 466 3567888999999**********************8655555 PP >> sp|P50198|LINX_PSEPA 2,5-dichloro-2,5-cyclohexadiene-1,4-diol dehydrogenase OS=Pseudomonas paucimobilis GN=linX PE=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.0 0.0 0.0045 11 138 190 .. 164 217 .. 158 225 .. 0.81 Alignments for each domain: == domain 1 score: 10.0 bits; conditional E-value: 0.0045 sp|Q1XGE2|HAC1_ASPOR 138 rlsqqlaqlaaevrgsrantplpgspata.sptltptlfkqerdelpleripfp 190 r+ + a l rg r nt +pg+ t + + p + kq+ ++p+ ++ p sp|P50198|LINX_PSEPA 164 RIMSKAAALEFVDRGVRVNTIVPGGMNTPiTANVPPDVLKQQTSQIPMGKLGDP 217 5566677777888**********9876641567899************998766 PP >> sp|Q6DGM8|JDP2_DANRE Jun dimerization protein 2 OS=Danio rerio GN=jdp2 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.2 4.0 0.0039 10 76 141 .. 62 128 .. 48 142 .. 0.82 Alignments for each domain: == domain 1 score: 10.2 bits; conditional E-value: 0.0039 sp|Q1XGE2|HAC1_ASPOR 76 aktede.keqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsq 141 k+ed+ ++r+ +r +n+ aa +r rk+ + + l+ e +le+ n l ++ +l++e+++l sp|Q6DGM8|JDP2_DANRE 62 IKSEDDdDDERKKRRREKNKVAAARCRNRKKERTDFLQKESERLEMLNSDLKSQIEELKSERQQLIV 128 566554145666677789*************************************999999988765 PP >> sp|A2Z0Q0|HOX25_ORYSI Homeobox-leucine zipper protein HOX25 OS=Oryza sativa subsp. indica GN=HOX25 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.3 0.4 0.0036 9.1 53 173 .. 21 140 .. 13 219 .. 0.79 Alignments for each domain: == domain 1 score: 10.3 bits; conditional E-value: 0.0036 sp|Q1XGE2|HAC1_ASPOR 53 akkrkswgqelpvpktnlpprkraktedek..eqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennr 138 a+kr+ +++ ++ kr k e e+ e r + ++ a + +r r + ++le + +l+ ++ ll + l a+n sp|A2Z0Q0|HOX25_ORYSI 21 ARKRRLTAEQVRALERSFEEEKR-KLEPERksELARRLGIAPRQVAVWFQNRRARWKTKQLELDFDRLRAAHDELLAGRAALAADNES 107 67777777777777777766665.444444013333334556667777788889999999999999999999999999999******* PP sp|Q1XGE2|HAC1_ASPOR 139 lsqqlaqlaaevrgsrantplpgspatasptltpt 173 l q+ l +++ + +p p spa a t p sp|A2Z0Q0|HOX25_ORYSI 108 LRSQVILLTEKLQA-NGKSPSP-SPAPAEQTAVPA 140 ****9988877764.5677887.799999888886 PP >> sp|Q9UPR3|SMG5_HUMAN Protein SMG5 OS=Homo sapiens GN=SMG5 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.8 0.3 0.0052 13 112 173 .. 800 860 .. 792 901 .. 0.78 Alignments for each domain: == domain 1 score: 9.8 bits; conditional E-value: 0.0052 sp|Q1XGE2|HAC1_ASPOR 112 enekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsr..antplpgspatasptltpt 173 e+e + ++ q qf r++q ea++nrl +++aql ++ s+ ++ +p + + sp l p sp|Q9UPR3|SMG5_HUMAN 800 EQESLLQQAQAQF---RMAQEEARRNRLMRDMAQLRLQLEVSQleGSLQQPKAQSAMSPYLVPD 860 5555555666666...899***************998776665115677888888899999886 PP >> sp|Q41558|HBP1C_WHEAT Transcription factor HBP-1b(c1) (Fragment) OS=Triticum aestivum PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.3 1.4 0.00044 1.1 77 131 .. 183 236 .. 142 250 .. 0.85 Alignments for each domain: == domain 1 score: 13.3 bits; conditional E-value: 0.00044 sp|Q1XGE2|HAC1_ASPOR 77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsq 131 k++d+ +++ ++r+ +nr aa+ sr rk+ ++ le+ +++l q q lqr q sp|Q41558|HBP1C_WHEAT 183 KSRDKLDHKSLRRLAQNREAARKSRLRKKAYIQNLESSRLKLTQLEQE-LQRARQ 236 778999999999****************************99998886.466555 PP >> sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding protein delta OS=Bos taurus GN=CEBPD PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.9 7.9 0.005 13 74 164 .. 171 246 .. 115 253 .. 0.57 Alignments for each domain: == domain 1 score: 9.9 bits; conditional E-value: 0.005 sp|Q1XGE2|HAC1_ASPOR 74 kraktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrlsqqlaqlaaevrgsra.ntplp 160 kr+ + e + rer + ++k + + +++nq + q+l +l aen +l+q++ ql ++ g r lp sp|O02756|CEBPD_BOVIN 171 KRGPDRGSPEY-------------RQRRERNNIAVRK---SRDKAKRRNQEMQQKLVELSAENEKLQQRVEQLTRDLAGLRRfFKQLP 242 33222222222.............2233344443333...333456777788888888888888888888888888888765145678 PP sp|Q1XGE2|HAC1_ASPOR 161 gspa 164 g+p sp|O02756|CEBPD_BOVIN 243 GAPF 246 8875 PP >> sp|Q63315|CAD22_RAT Cadherin-22 OS=Rattus norvegicus GN=Cdh22 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.4 0.2 0.0068 17 254 299 .. 713 759 .. 681 767 .. 0.80 Alignments for each domain: == domain 1 score: 9.4 bits; conditional E-value: 0.0068 sp|Q1XGE2|HAC1_ASPOR 254 ddfnrlfhgdssvepdssvfedglafdv.leggdlsafpfdslvnfd 299 + + l +g ss epd svf+d ++ v l dls p+d++ + sp|Q63315|CAD22_RAT 713 SERHSLPRGPSSPEPDFSVFRDFISRKVaLADADLSVPPYDAFQTYA 759 45567889****************998747899********987765 PP >> sp|Q9WTP5|CAD22_MOUSE Cadherin-22 OS=Mus musculus GN=Cdh22 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.4 0.2 0.0068 17 254 299 .. 713 759 .. 681 767 .. 0.80 Alignments for each domain: == domain 1 score: 9.4 bits; conditional E-value: 0.0068 sp|Q1XGE2|HAC1_ASPOR 254 ddfnrlfhgdssvepdssvfedglafdv.leggdlsafpfdslvnfd 299 + + l +g ss epd svf+d ++ v l dls p+d++ + sp|Q9WTP5|CAD22_MOUSE 713 SERHSLPRGPSSPEPDFSVFRDFISRKVaLADADLSVPPYDAFQTYA 759 45567889****************998747899********987765 PP >> sp|Q5FUV3|ATE_GLUOX Putative arginyl-tRNA--protein transferase OS=Gluconobacter oxydans GN=ate PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 1.9 0.0 1.4 3.5e+03 177 224 .. 2 49 .. 1 56 [. 0.89 2 ? 10.5 0.5 0.0033 8.4 137 193 .. 48 102 .. 39 127 .. 0.76 Alignments for each domain: == domain 1 score: 1.9 bits; conditional E-value: 1.4 sp|Q1XGE2|HAC1_ASPOR 177 qerdelpleripfptpslsdysptlkpstlaessdvaqhpavsvagle 224 q+r +l p p+p l d + + la + va h +s ag++ sp|Q5FUV3|ATE_GLUOX 2 QHRPQLFYTTAPAPCPYLPDRTERKVLTELAGPDAVALHNRLSQAGFR 49 78999999999**********99988899999999*********9987 PP == domain 2 score: 10.5 bits; conditional E-value: 0.0033 sp|Q1XGE2|HAC1_ASPOR 137 nrlsqqlaqlaaevrgsrantplpgspatasptltptlfkqerdelpleripfptps 193 r s+ +a a + g+ra tp+ at +pt t ++ ++ +l + ip p p+ sp|Q5FUV3|ATE_GLUOX 48 FRRSHAIAY-APVCVGCRACTPMRIPAATFAPTRTQKKIRSRHTDLVVNIIP-PVPT 102 455566654.45567**********9****************99**999997.5554 PP >> sp|Q99091|CPRF3_PETCR Light-inducible protein CPRF3 OS=Petroselinum crispum GN=CPRF3 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.4 3.5 0.0068 17 77 132 .. 190 248 .. 179 269 .. 0.81 Alignments for each domain: == domain 1 score: 9.4 bits; conditional E-value: 0.0068 sp|Q1XGE2|HAC1_ASPOR 77 ktedekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfl...lqrlsql 132 + de+e +r +r nr +a+ sr rk+ + + l+ + l ++n++l lqr+s+ sp|Q99091|CPRF3_PETCR 190 RVNDERELKRQRRKQSNRESARRSRLRKQAKSDELQERLDNLSKENRILrknLQRISEA 248 467999999999************************999999****9993334555544 PP >> sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus musculus GN=Hlf PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.1 4.4 0.00051 1.3 23 145 .. 165 287 .. 142 293 .. 0.79 Alignments for each domain: == domain 1 score: 13.1 bits; conditional E-value: 0.00051 sp|Q1XGE2|HAC1_ASPOR 23 vpvltvspadtslnsadvktqevkpeekkpakkrkswgqelpvpktnlpprkraktedekeqrriervlrnraaaqtsrerkrlelekl 111 p p + ad+ + +e +krk +el rk +d k+++ r +n aa+ sr+ +rl+ ++ sp|Q8BW74|HLF_MOUSE 165 DPDTIQVPVGYEPDPADLALSSIPGQEMFDPRKRKFSEEELKPQPMIKKARKVFIPDDLKDDKYWARRRKNNMAAKRSRDARRLKENQI 253 34444456777778888888899999998889999888888533334467888889999****************************** PP sp|Q1XGE2|HAC1_ASPOR 112 enekiqleqqnqfllqrlsqleaennrlsqqlaq 145 + le++n l q +++l+ e +++ la+ sp|Q8BW74|HLF_MOUSE 254 AIRASFLEKENSALRQEVADLRKELGKCKNILAK 287 ******************9999998888777776 PP >> sp|Q9JLC6|TEF_MOUSE Thyrotroph embryonic factor OS=Mus musculus GN=Tef PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.5 0.3 0.0066 17 52 134 .. 201 282 .. 152 292 .. 0.71 Alignments for each domain: == domain 1 score: 9.5 bits; conditional E-value: 0.0066 sp|Q1XGE2|HAC1_ASPOR 52 pakkrkswgqelpvpktnlpprkrakted.ekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqlea 134 p k r + +e p+ + k+ d +k+++ r +n aa+ sr+ +rl+ ++ + le++n l +++l+ sp|Q9JLC6|TEF_MOUSE 201 PRKHR--FAEEDLKPQPMIKKAKKVFVPDeQKDEKYWTRRKKNNVAAKRSRDARRLKENQITIRAAFLEKENTALRTEVAELRK 282 43333..3344444666666666666555157788889999****************999999999999999988777776665 PP >> sp|Q92172|TEF_CHICK Transcription factor VBP OS=Gallus gallus GN=TEF PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.6 0.4 0.0059 15 54 139 .. 214 299 .. 176 308 .. 0.76 Alignments for each domain: == domain 1 score: 9.6 bits; conditional E-value: 0.0059 sp|Q1XGE2|HAC1_ASPOR 54 kkrkswgqelpvpktnlpprkrakted.ekeqrriervlrnraaaqtsrerkrleleklenekiqleqqnqfllqrlsqleaennrl 139 +k+k ++l p+ + k+ d +k+++ r +n aa+ sr+ +rl+ ++ + le++n l +++l+ e +r+ sp|Q92172|TEF_CHICK 214 RKHKFTEEDL-KPQPMIKKAKKVFVPDeQKDEKYWTRRKKNNVAAKRSRDARRLKENQITIRAAFLEKENTALRTEVAELRKEVGRC 299 4555444444.3555555556655555167888889999*********************99999*****99999998888887775 PP Internal pipeline statistics summary: ------------------------------------- Query model(s): 1 (345 nodes) Target sequences: 516081 (181677051 residues) Passed MSV filter: 21797 (0.0422356); expected 10321.6 (0.02) Passed bias filter: 21797 (0.0422356); expected 10321.6 (0.02) Passed Vit filter: 6030 (0.0116842); expected 516.1 (0.001) Passed Fwd filter: 1516 (0.00293752); expected 5.2 (1e-05) Initial search space (Z): 516081 [actual number of targets] Domain search space (domZ): 203 [number of targets reported over threshold] # CPU time: 21.11u 0.09s 00:00:21.20 Elapsed: 00:00:03.64 # Mc/sec: 17219.39 // hmmer-3.1b2/easel/demotic/examples/example-single.fa.pin0000664361611702660230000000250012473612604022627 0ustar wheelerteddyexample-single.faApr 16, 2010 2:20 PMžåÚ¹[¶mÈ!zÕ0Šå>™òM©_ºnÉ$Ú 5 ë D Ÿ ú U ° f Á  s Î)…à9”ïH£þY´hÁuÐ*…à:•ðK§^¹oÊ%€Ù4êEŸúU° fÁwÒ-ˆã < — ò!M!¨""\"·##m#È$#$~$Ù%4%%ê&E& &û'V'±( (g(Â))v)Ñ*,*‡*â+=+˜+ó,N,©--_-»..s.Ï/+/‡/ã0=0™0õ1Q1­22c2¿33w3Ó4/4‹4ç5C5Ÿ5û6W6³77k7Ç8#`º*‚Õ' u ’ ã Cñ@ŠÙ)tÑ.ŒæC¯ !r"Ð$/%—&ö(X)¤*ù,6-¼/0†1ó3m4×6‰819Ï;_<ï>©@6A¹C<D¸F:G©I#J–L MvNõPvQ÷SyTüV}WþY[\…^_ab•cÿe‚gh‰jk¤m4nÈpYqrÉtudv«wôyAzƒ{Ç}~c»‚rƒÓ…0†ˆ‡ò‰FŠ˜‹÷aŽÊ2‘Œ’á”/•‚–ט5™•šëœ>’žè =¡‘¢å¤<¥œ¦ð¨C©¡ª÷¬P­¨¯°W±¬²ÿ´Wµ¶ö¸Q¹§ºú¼Q½¨¿ÀpÁÇÃ5ĈÅÞÇ0ȆÉãË9ÌÍüÏ\оÒ.Ó‡ÔÖÖ6׌ØáÚ4Û„hmmer-3.1b2/easel/demotic/examples/example-single.fa.psq0000664361611702660230000015560412473612604022662 0ustar wheelerteddy                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    hmmer-3.1b2/easel/demotic/examples/example-single.asnt0000664361611702660230000101403112473612604022424 0ustar wheelerteddyPssmWithParameters ::= { pssm { isProtein TRUE , numRows 28 , numColumns 328 , byRow FALSE , query seq { id { local str "A3CM55_STRSV/64-391" } , descr { title "A3CM55.1" } , inst { repr raw , mol aa , length 328 , seq-data ncbieaa "SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRMLLTLVIALIQSVALVL NLPLQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASMIAYIPQDIWNSIQELKISSLWLALM LVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPAGGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIE QWIEALSMGSPAWFILYLLTIFILALAFAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLI LISGLPMMVVLVDIRYLRLSMIPGIFMIFIGMVFSIK" } } , intermediateData { freqRatios { { 0, 10, 0 } , { 517881877, 10, -10 } , { 0, 10, 0 } , { 714899082, 10, -11 } , { 228880836, 10, -10 } , { 268767292, 10, -10 } , { 926243646, 10, -11 } , { 177664277, 10, -9 } , { 750670798, 10, -11 } , { 151849534, 10, -10 } , { 256189057, 10, -10 } , { 241985116, 10, -10 } , { 779851038, 10, -11 } , { 262995653, 10, -10 } , { 193119177, 10, -10 } , { 190809756, 10, -10 } , { 188907569, 10, -10 } , { 278285975, 10, -9 } , { 252640924, 10, -9 } , { 239733259, 10, -10 } , { 301431543, 10, -11 } , { 0, 10, 0 } , { 922884276, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 309934003, 10, -10 } , { 0, 10, 0 } , { 761463694, 10, -11 } , { 102434459, 10, -10 } , { 136310089, 10, -10 } , { 370679606, 10, -10 } , { 128089526, 10, -10 } , { 470654848, 10, -11 } , { 269738853, 10, -9 } , { 143356703, 10, -10 } , { 279228195, 10, -9 } , { 219154764, 10, -10 } , { 883310202, 10, -11 } , { 120484249, 10, -10 } , { 109846992, 10, -10 } , { 126030556, 10, -10 } , { 194750028, 10, -10 } , { 265561434, 10, -10 } , { 14184185, 10, -8 } , { 388859764, 10, -11 } , { 0, 10, 0 } , { 137166057, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 480691169, 10, -10 } , { 0, 10, 0 } , { 371625208, 10, -10 } , { 97373281, 10, -10 } , { 138789891, 10, -10 } , { 277587347, 10, -9 } , { 154229191, 10, -10 } , { 679239895, 10, -11 } , { 769688451, 10, -10 } , { 143752343, 10, -10 } , { 170383067, 10, -9 } , { 123393878, 10, -9 } , { 970797801, 10, -11 } , { 106990917, 10, -10 } , { 120008149, 10, -10 } , { 131851268, 10, -10 } , { 212793063, 10, -10 } , { 21134561, 10, -9 } , { 404227857, 10, -10 } , { 682154343, 10, -11 } , { 0, 10, 0 } , { 287824526, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 273381473, 10, -9 } , { 0, 10, 0 } , { 793699125, 10, -11 } , { 285083707, 10, -10 } , { 152041089, 10, -9 } , { 107433403, 10, -10 } , { 356813034, 10, -10 } , { 960120934, 10, -11 } , { 324819475, 10, -10 } , { 33836615, 10, -9 } , { 330877985, 10, -10 } , { 178294009, 10, -10 } , { 21991971, 10, -9 } , { 226825182, 10, -10 } , { 675526885, 10, -10 } , { 242426951, 10, -10 } , { 101397213, 10, -9 } , { 105859297, 10, -9 } , { 324821235, 10, -10 } , { 343454612, 10, -11 } , { 0, 10, 0 } , { 109353832, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 279029956, 10, -10 } , { 0, 10, 0 } , { 690582591, 10, -11 } , { 915515151, 10, -11 } , { 137969549, 10, -10 } , { 407323651, 10, -10 } , { 125373864, 10, -10 } , { 492239741, 10, -11 } , { 537970465, 10, -10 } , { 143908894, 10, -10 } , { 513958028, 10, -9 } , { 560468512, 10, -10 } , { 864034937, 10, -11 } , { 111873436, 10, -10 } , { 119726049, 10, -10 } , { 137034531, 10, -10 } , { 19221067, 10, -9 } , { 395565848, 10, -10 } , { 884935061, 10, -10 } , { 42315088, 10, -10 } , { 0, 10, 0 } , { 133349611, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 521043011, 10, -10 } , { 0, 10, 0 } , { 395647073, 10, -11 } , { 165085958, 10, -10 } , { 149149131, 10, -10 } , { 629041473, 10, -11 } , { 728081838, 10, -9 } , { 529836444, 10, -11 } , { 69541992, 10, -10 } , { 163975886, 10, -10 } , { 125317218, 10, -10 } , { 431478644, 10, -11 } , { 282753926, 10, -10 } , { 120080208, 10, -10 } , { 112367134, 10, -10 } , { 112732303, 10, -10 } , { 418475414, 10, -10 } , { 168886274, 10, -10 } , { 107718011, 10, -10 } , { 263254928, 10, -11 } , { 0, 10, 0 } , { 544827325, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 269123114, 10, -10 } , { 0, 10, 0 } , { 662177844, 10, -11 } , { 924567497, 10, -11 } , { 113055886, 10, -10 } , { 188272808, 10, -10 } , { 10825489, 10, -9 } , { 3797244, 10, -9 } , { 466658624, 10, -9 } , { 121011005, 10, -10 } , { 139010418, 10, -9 } , { 174964519, 10, -10 } , { 768618973, 10, -11 } , { 105094923, 10, -10 } , { 889797122, 10, -11 } , { 996523231, 10, -11 } , { 16820564, 10, -9 } , { 239260116, 10, -10 } , { 14079382, 10, -8 } , { 290212908, 10, -11 } , { 0, 10, 0 } , { 106564555, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 651836045, 10, -10 } , { 0, 10, 0 } , { 781024537, 10, -11 } , { 19095696, 10, -9 } , { 238724803, 10, -10 } , { 400185161, 10, -10 } , { 171606437, 10, -9 } , { 780789604, 10, -11 } , { 444159947, 10, -10 } , { 239987176, 10, -10 } , { 78305675, 10, -9 } , { 110857434, 10, -9 } , { 209535046, 10, -10 } , { 176368235, 10, -10 } , { 192807775, 10, -10 } , { 187586848, 10, -10 } , { 145120995, 10, -9 } , { 541169244, 10, -10 } , { 107052161, 10, -9 } , { 42829021, 10, -10 } , { 0, 10, 0 } , { 138758435, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 235486802, 10, -10 } , { 0, 10, 0 } , { 292325478, 10, -11 } , { 128488024, 10, -10 } , { 171059612, 10, -10 } , { 443449159, 10, -11 } , { 140896898, 10, -10 } , { 41603363, 10, -10 } , { 791342966, 10, -11 } , { 16173364, 10, -9 } , { 133914369, 10, -10 } , { 380402256, 10, -11 } , { 897470434, 10, -11 } , { 867146688, 10, -9 } , { 109400097, 10, -10 } , { 988127282, 10, -11 } , { 215213125, 10, -10 } , { 160988181, 10, -10 } , { 114180197, 10, -10 } , { 149967155, 10, -11 } , { 0, 10, 0 } , { 4677331, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 231868293, 10, -10 } , { 0, 10, 0 } , { 515627476, 10, -11 } , { 103128978, 10, -10 } , { 140849126, 10, -10 } , { 857300965, 10, -10 } , { 129438707, 10, -10 } , { 125724605, 10, -10 } , { 218663544, 10, -9 } , { 141202503, 10, -10 } , { 50321186, 10, -9 } , { 116478414, 10, -10 } , { 281882452, 10, -10 } , { 991475365, 10, -11 } , { 113551595, 10, -10 } , { 125513926, 10, -10 } , { 192719506, 10, -10 } , { 197983872, 10, -10 } , { 547083935, 10, -10 } , { 302290459, 10, -10 } , { 0, 10, 0 } , { 326422403, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 299375543, 10, -10 } , { 0, 10, 0 } , { 693821672, 10, -11 } , { 979999378, 10, -11 } , { 125734011, 10, -10 } , { 317157013, 10, -10 } , { 119861446, 10, -10 } , { 466807251, 10, -11 } , { 385988613, 10, -9 } , { 132441562, 10, -10 } , { 765620744, 10, -10 } , { 437383702, 10, -10 } , { 85172182, 10, -10 } , { 112242639, 10, -10 } , { 100281139, 10, -10 } , { 108615005, 10, -10 } , { 186997969, 10, -10 } , { 258986195, 10, -10 } , { 209667772, 10, -9 } , { 34458904, 10, -10 } , { 0, 10, 0 } , { 302059153, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 444446573, 10, -10 } , { 0, 10, 0 } , { 704389127, 10, -11 } , { 25917194, 10, -9 } , { 280341533, 10, -10 } , { 109040543, 10, -10 } , { 286424736, 10, -10 } , { 895690046, 10, -11 } , { 174602797, 10, -10 } , { 263898432, 10, -10 } , { 440952802, 10, -10 } , { 87128392, 10, -10 } , { 12749547, 10, -8 } , { 187144692, 10, -10 } , { 20126867, 10, -9 } , { 203045715, 10, -10 } , { 22419357, 10, -8 } , { 309183627, 10, -9 } , { 26381826, 10, -9 } , { 313791685, 10, -11 } , { 0, 10, 0 } , { 238214666, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 461839243, 10, -9 } , { 0, 10, 0 } , { 811554263, 10, -11 } , { 180415238, 10, -10 } , { 258756231, 10, -10 } , { 898054422, 10, -11 } , { 379210866, 10, -10 } , { 696657891, 10, -11 } , { 150176551, 10, -10 } , { 24127792, 10, -9 } , { 251716116, 10, -10 } , { 78187254, 10, -10 } , { 180547292, 10, -10 } , { 20003569, 10, -9 } , { 17862483, 10, -9 } , { 172759128, 10, -10 } , { 233917091, 10, -9 } , { 351634851, 10, -10 } , { 269180962, 10, -10 } , { 275650271, 10, -11 } , { 0, 10, 0 } , { 896786212, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 531551186, 10, -10 } , { 0, 10, 0 } , { 643117558, 10, -11 } , { 23519724, 10, -9 } , { 302119961, 10, -10 } , { 869147403, 10, -11 } , { 195476593, 10, -9 } , { 82637662, 10, -10 } , { 118842469, 10, -10 } , { 272157511, 10, -10 } , { 214810812, 10, -10 } , { 222772154, 10, -10 } , { 261807917, 10, -10 } , { 185078955, 10, -10 } , { 691177601, 10, -10 } , { 201748549, 10, -10 } , { 403685572, 10, -9 } , { 516753071, 10, -10 } , { 182059045, 10, -10 } , { 290200838, 10, -11 } , { 0, 10, 0 } , { 884172288, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 266488645, 10, -10 } , { 0, 10, 0 } , { 665676921, 10, -11 } , { 956393937, 10, -11 } , { 122199829, 10, -10 } , { 527788382, 10, -10 } , { 117668351, 10, -10 } , { 456326758, 10, -11 } , { 383522354, 10, -9 } , { 132566515, 10, -10 } , { 190234248, 10, -9 } , { 741110664, 10, -10 } , { 833890928, 10, -11 } , { 107903749, 10, -10 } , { 104355901, 10, -10 } , { 113726173, 10, -10 } , { 176993185, 10, -10 } , { 236063966, 10, -10 } , { 699475415, 10, -10 } , { 370304842, 10, -11 } , { 0, 10, 0 } , { 133558046, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 423832036, 10, -10 } , { 0, 10, 0 } , { 731611618, 10, -11 } , { 104024718, 10, -10 } , { 132303252, 10, -10 } , { 32987985, 10, -9 } , { 130177131, 10, -10 } , { 434031478, 10, -11 } , { 369971686, 10, -9 } , { 138251238, 10, -10 } , { 109103697, 10, -9 } , { 228025578, 10, -10 } , { 899620835, 10, -11 } , { 119473472, 10, -10 } , { 1022835, 10, -8 } , { 112766782, 10, -10 } , { 206685905, 10, -10 } , { 38817477, 10, -9 } , { 198570254, 10, -9 } , { 323785145, 10, -11 } , { 0, 10, 0 } , { 123957787, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 325551474, 10, -10 } , { 0, 10, 0 } , { 740015777, 10, -11 } , { 105952164, 10, -10 } , { 156901421, 10, -10 } , { 966005858, 10, -10 } , { 151583051, 10, -10 } , { 6180454, 10, -9 } , { 128868906, 10, -9 } , { 16553765, 10, -9 } , { 198853845, 10, -9 } , { 142202165, 10, -9 } , { 103071831, 10, -10 } , { 124046684, 10, -10 } , { 143265505, 10, -10 } , { 148285744, 10, -10 } , { 220129648, 10, -10 } , { 267885994, 10, -10 } , { 142167228, 10, -9 } , { 248428934, 10, -10 } , { 0, 10, 0 } , { 196996274, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 25090378, 10, -9 } , { 0, 10, 0 } , { 31882391, 10, -10 } , { 20457712, 10, -9 } , { 583375855, 10, -10 } , { 592488738, 10, -11 } , { 173401061, 10, -10 } , { 10598314, 10, -9 } , { 887873796, 10, -11 } , { 364593317, 10, -10 } , { 189255904, 10, -10 } , { 810071482, 10, -11 } , { 187197245, 10, -10 } , { 144439597, 10, -10 } , { 679384397, 10, -9 } , { 294879652, 10, -10 } , { 28777719, 10, -9 } , { 195695312, 10, -10 } , { 132730528, 10, -10 } , { 296468067, 10, -11 } , { 0, 10, 0 } , { 845437503, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 296773197, 10, -10 } , { 0, 10, 0 } , { 738145482, 10, -11 } , { 109216628, 10, -10 } , { 163468778, 10, -10 } , { 567404848, 10, -10 } , { 144716284, 10, -10 } , { 573227216, 10, -11 } , { 977193432, 10, -10 } , { 163638065, 10, -10 } , { 464328074, 10, -9 } , { 373940435, 10, -10 } , { 982774434, 10, -11 } , { 127293769, 10, -10 } , { 252991746, 10, -10 } , { 153717282, 10, -10 } , { 203885521, 10, -10 } , { 243630006, 10, -10 } , { 761529559, 10, -10 } , { 480392105, 10, -11 } , { 0, 10, 0 } , { 155118482, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 236259247, 10, -10 } , { 0, 10, 0 } , { 614892777, 10, -11 } , { 781567161, 10, -11 } , { 119070646, 10, -10 } , { 472639881, 10, -10 } , { 10791564, 10, -9 } , { 440833714, 10, -11 } , { 430092618, 10, -10 } , { 12482028, 10, -9 } , { 626735587, 10, -9 } , { 385036295, 10, -10 } , { 716754079, 10, -11 } , { 969378634, 10, -11 } , { 103931837, 10, -10 } , { 122798316, 10, -10 } , { 156000485, 10, -10 } , { 193633056, 10, -10 } , { 419204473, 10, -10 } , { 403218374, 10, -11 } , { 0, 10, 0 } , { 125620884, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 169512228, 10, -9 } , { 0, 10, 0 } , { 955945729, 10, -11 } , { 241578395, 10, -10 } , { 375887958, 10, -10 } , { 144888312, 10, -10 } , { 659472757, 10, -10 } , { 98124845, 10, -10 } , { 342868702, 10, -10 } , { 3418672, 10, -8 } , { 615930922, 10, -10 } , { 137214689, 10, -10 } , { 245101154, 10, -10 } , { 240348348, 10, -10 } , { 841844023, 10, -10 } , { 333807113, 10, -10 } , { 109121203, 10, -9 } , { 13073363, 10, -8 } , { 115358738, 10, -9 } , { 422154202, 10, -11 } , { 0, 10, 0 } , { 134286717, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 546747566, 10, -10 } , { 0, 10, 0 } , { 876887126, 10, -11 } , { 236936025, 10, -10 } , { 286274781, 10, -10 } , { 189546075, 10, -10 } , { 264733833, 10, -9 } , { 956429268, 10, -11 } , { 476198935, 10, -10 } , { 280184339, 10, -10 } , { 690557708, 10, -10 } , { 394589655, 10, -10 } , { 242416733, 10, -10 } , { 222283036, 10, -10 } , { 338423903, 10, -10 } , { 222164001, 10, -10 } , { 579838693, 10, -10 } , { 754818233, 10, -10 } , { 131275917, 10, -9 } , { 544843315, 10, -11 } , { 0, 10, 0 } , { 282371854, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 137693756, 10, -9 } , { 0, 10, 0 } , { 915286543, 10, -11 } , { 876606444, 10, -10 } , { 416009718, 10, -10 } , { 287136173, 10, -10 } , { 465460418, 10, -10 } , { 991533718, 10, -11 } , { 365393835, 10, -10 } , { 801928542, 10, -10 } , { 56845064, 10, -9 } , { 129405428, 10, -10 } , { 342324122, 10, -10 } , { 324296019, 10, -10 } , { 304615419, 10, -10 } , { 294494159, 10, -10 } , { 138111028, 10, -9 } , { 857308478, 10, -10 } , { 962959782, 10, -10 } , { 402392678, 10, -11 } , { 0, 10, 0 } , { 145663262, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 650172246, 10, -10 } , { 0, 10, 0 } , { 865486837, 10, -11 } , { 432182586, 10, -10 } , { 663221617, 10, -10 } , { 312456713, 10, -10 } , { 491507032, 10, -10 } , { 316430512, 10, -10 } , { 612228974, 10, -10 } , { 132554075, 10, -9 } , { 976781104, 10, -10 } , { 260486017, 10, -10 } , { 349858955, 10, -10 } , { 270814954, 10, -10 } , { 603890567, 10, -10 } , { 452036674, 10, -10 } , { 613175604, 10, -10 } , { 449244246, 10, -10 } , { 602342031, 10, -10 } , { 663358449, 10, -11 } , { 0, 10, 0 } , { 43964771, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 388658924, 10, -10 } , { 0, 10, 0 } , { 854161777, 10, -11 } , { 163427558, 10, -10 } , { 227504954, 10, -10 } , { 429604054, 10, -10 } , { 201784066, 10, -10 } , { 779013644, 10, -11 } , { 188721627, 10, -9 } , { 459215178, 10, -10 } , { 199343851, 10, -9 } , { 251909307, 10, -10 } , { 144116159, 10, -10 } , { 74888628, 10, -9 } , { 177391, 10, -7 } , { 350428975, 10, -10 } , { 326156756, 10, -10 } , { 320803095, 10, -10 } , { 109129193, 10, -9 } , { 530039074, 10, -11 } , { 0, 10, 0 } , { 311517884, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 37312112, 10, -9 } , { 0, 10, 0 } , { 548121663, 10, -11 } , { 147421063, 10, -10 } , { 199810079, 10, -10 } , { 129884375, 10, -10 } , { 168169875, 10, -10 } , { 53685634, 10, -10 } , { 182181612, 10, -9 } , { 352744611, 10, -10 } , { 117583498, 10, -9 } , { 120219293, 10, -10 } , { 115669917, 10, -10 } , { 400259469, 10, -9 } , { 199191915, 10, -10 } , { 144474498, 10, -10 } , { 355745468, 10, -10 } , { 353264503, 10, -10 } , { 417987056, 10, -10 } , { 271028385, 10, -11 } , { 0, 10, 0 } , { 89696021, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 943358527, 10, -10 } , { 0, 10, 0 } , { 814541561, 10, -11 } , { 595733415, 10, -10 } , { 789663739, 10, -10 } , { 167936737, 10, -10 } , { 85217137, 10, -9 } , { 232942096, 10, -10 } , { 245342656, 10, -10 } , { 109509138, 10, -9 } , { 667224249, 10, -10 } , { 137301873, 10, -10 } , { 563208029, 10, -10 } , { 521687235, 10, -10 } , { 583153009, 10, -10 } , { 725816483, 10, -10 } , { 860817319, 10, -10 } , { 509489304, 10, -10 } , { 376718553, 10, -10 } , { 50602371, 10, -10 } , { 0, 10, 0 } , { 24594851, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 328263016, 10, -10 } , { 0, 10, 0 } , { 744796729, 10, -11 } , { 116441556, 10, -10 } , { 191797323, 10, -10 } , { 978088583, 10, -10 } , { 15020654, 10, -9 } , { 637485084, 10, -11 } , { 68577667, 10, -9 } , { 268738641, 10, -10 } , { 337188711, 10, -9 } , { 283836687, 10, -10 } , { 10781794, 10, -9 } , { 129817603, 10, -10 } , { 440295399, 10, -10 } , { 170305253, 10, -10 } , { 224560937, 10, -10 } , { 264230682, 10, -10 } , { 152188749, 10, -9 } , { 518855602, 10, -11 } , { 0, 10, 0 } , { 19285881, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 707083393, 10, -10 } , { 0, 10, 0 } , { 597700701, 10, -11 } , { 17401882, 10, -8 } , { 164431194, 10, -9 } , { 999640867, 10, -11 } , { 571850348, 10, -10 } , { 124711194, 10, -10 } , { 195597559, 10, -10 } , { 57458904, 10, -9 } , { 25940193, 10, -9 } , { 842209858, 10, -11 } , { 901614039, 10, -10 } , { 230814388, 10, -10 } , { 481714288, 10, -10 } , { 44783385, 10, -9 } , { 115241171, 10, -9 } , { 603176471, 10, -10 } , { 28286973, 10, -9 } , { 317383426, 10, -11 } , { 0, 10, 0 } , { 107495161, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 563015015, 10, -10 } , { 0, 10, 0 } , { 671702416, 10, -11 } , { 668371862, 10, -10 } , { 133477273, 10, -9 } , { 166209675, 10, -10 } , { 291133515, 10, -10 } , { 122008397, 10, -10 } , { 394302067, 10, -10 } , { 139574725, 10, -9 } , { 128011275, 10, -9 } , { 372265172, 10, -10 } , { 471647729, 10, -10 } , { 233043546, 10, -10 } , { 570937259, 10, -10 } , { 644397248, 10, -10 } , { 457956524, 10, -10 } , { 506827552, 10, -10 } , { 363593347, 10, -10 } , { 439852729, 10, -11 } , { 0, 10, 0 } , { 138739339, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 695782429, 10, -10 } , { 0, 10, 0 } , { 844365786, 10, -11 } , { 389018854, 10, -10 } , { 43175918, 10, -9 } , { 481963505, 10, -10 } , { 346634629, 10, -10 } , { 93700982, 10, -10 } , { 608639048, 10, -10 } , { 328596973, 10, -10 } , { 210354553, 10, -9 } , { 393504201, 10, -10 } , { 277421119, 10, -10 } , { 188195337, 10, -10 } , { 592007664, 10, -10 } , { 240463587, 10, -10 } , { 662246753, 10, -10 } , { 670117892, 10, -10 } , { 512820844, 10, -10 } , { 568873052, 10, -10 } , { 0, 10, 0 } , { 204207793, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 683512837, 10, -10 } , { 0, 10, 0 } , { 613553154, 10, -11 } , { 10086215, 10, -8 } , { 694010276, 10, -10 } , { 110216759, 10, -10 } , { 334854578, 10, -10 } , { 200748677, 10, -10 } , { 239161486, 10, -10 } , { 139274301, 10, -9 } , { 381482052, 10, -10 } , { 108521641, 10, -10 } , { 779393614, 10, -10 } , { 715303659, 10, -10 } , { 108120842, 10, -9 } , { 713212067, 10, -10 } , { 745209854, 10, -10 } , { 517140677, 10, -10 } , { 379509887, 10, -10 } , { 361156185, 10, -11 } , { 0, 10, 0 } , { 126239317, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 357644638, 10, -10 } , { 0, 10, 0 } , { 441649283, 10, -11 } , { 422458537, 10, -10 } , { 602823978, 10, -10 } , { 906290493, 10, -11 } , { 443462846, 10, -10 } , { 184482299, 10, -10 } , { 278383083, 10, -10 } , { 321147719, 10, -9 } , { 409985848, 10, -10 } , { 884730144, 10, -11 } , { 548219086, 10, -10 } , { 105364821, 10, -9 } , { 520310956, 10, -10 } , { 878601371, 10, -10 } , { 492423312, 10, -10 } , { 278208526, 10, -10 } , { 204918521, 10, -10 } , { 293028117, 10, -11 } , { 0, 10, 0 } , { 10388996, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 451002078, 10, -10 } , { 0, 10, 0 } , { 390520652, 10, -11 } , { 923048756, 10, -10 } , { 417478676, 10, -9 } , { 764498911, 10, -11 } , { 221795301, 10, -10 } , { 10800431, 10, -9 } , { 121742315, 10, -10 } , { 375608834, 10, -10 } , { 214631714, 10, -10 } , { 130893466, 10, -10 } , { 292864928, 10, -10 } , { 50377521, 10, -9 } , { 892375566, 10, -10 } , { 256847553, 10, -10 } , { 862026856, 10, -10 } , { 267907914, 10, -10 } , { 329118681, 10, -10 } , { 275475359, 10, -11 } , { 0, 10, 0 } , { 892738056, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 514227909, 10, -10 } , { 0, 10, 0 } , { 562346657, 10, -11 } , { 105656107, 10, -9 } , { 950878489, 10, -10 } , { 109420142, 10, -10 } , { 283742381, 10, -9 } , { 992413077, 10, -11 } , { 170687918, 10, -10 } , { 355852654, 10, -10 } , { 574276037, 10, -10 } , { 911953255, 10, -11 } , { 41617785, 10, -9 } , { 341236873, 10, -10 } , { 367314029, 10, -10 } , { 757417822, 10, -10 } , { 617199419, 10, -10 } , { 383165135, 10, -10 } , { 333370859, 10, -10 } , { 358569543, 10, -11 } , { 0, 10, 0 } , { 987263141, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 610431247, 10, -10 } , { 0, 10, 0 } , { 476963122, 10, -11 } , { 101746549, 10, -9 } , { 183350925, 10, -9 } , { 459139222, 10, -10 } , { 129064916, 10, -9 } , { 124134623, 10, -10 } , { 138778066, 10, -10 } , { 690723178, 10, -10 } , { 275017555, 10, -10 } , { 875727939, 10, -11 } , { 281735548, 10, -10 } , { 202707847, 10, -10 } , { 760859366, 10, -10 } , { 120607096, 10, -9 } , { 431495355, 10, -10 } , { 277131879, 10, -10 } , { 199804033, 10, -10 } , { 435261503, 10, -11 } , { 0, 10, 0 } , { 230696441, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 120279138, 10, -9 } , { 0, 10, 0 } , { 655013019, 10, -11 } , { 326994242, 10, -10 } , { 14416255, 10, -8 } , { 113417356, 10, -10 } , { 397067487, 10, -10 } , { 126176073, 10, -10 } , { 280330811, 10, -10 } , { 474707015, 10, -10 } , { 413610216, 10, -10 } , { 147308615, 10, -10 } , { 489097726, 10, -10 } , { 217095492, 10, -10 } , { 141362352, 10, -9 } , { 106623778, 10, -9 } , { 851229774, 10, -10 } , { 350811058, 10, -10 } , { 701099256, 10, -10 } , { 375416475, 10, -11 } , { 0, 10, 0 } , { 122555783, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 63000171, 10, -9 } , { 0, 10, 0 } , { 578949141, 10, -11 } , { 244517534, 10, -10 } , { 5610681, 10, -8 } , { 275715069, 10, -10 } , { 35143833, 10, -8 } , { 87350744, 10, -10 } , { 34693054, 10, -9 } , { 940084526, 10, -10 } , { 549718693, 10, -10 } , { 215111853, 10, -10 } , { 391584121, 10, -10 } , { 180215961, 10, -10 } , { 231165651, 10, -10 } , { 510641048, 10, -10 } , { 425057729, 10, -10 } , { 494150865, 10, -10 } , { 249797484, 10, -10 } , { 393108608, 10, -11 } , { 0, 10, 0 } , { 11185898, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 126498353, 10, -9 } , { 0, 10, 0 } , { 143925783, 10, -10 } , { 183773659, 10, -10 } , { 322872504, 10, -10 } , { 364886468, 10, -10 } , { 69865455, 10, -9 } , { 13562522, 10, -9 } , { 304771922, 10, -10 } , { 699416379, 10, -10 } , { 848127968, 10, -10 } , { 123024095, 10, -10 } , { 19839534, 10, -9 } , { 178703578, 10, -10 } , { 486263334, 10, -10 } , { 165753965, 10, -9 } , { 40034077, 10, -9 } , { 281269012, 10, -10 } , { 304682628, 10, -10 } , { 223200969, 10, -10 } , { 0, 10, 0 } , { 116631344, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 3279151, 10, -8 } , { 0, 10, 0 } , { 462382531, 10, -11 } , { 215484058, 10, -10 } , { 434277571, 10, -10 } , { 261483794, 10, -10 } , { 213477755, 10, -10 } , { 172231653, 10, -10 } , { 137260424, 10, -10 } , { 103392278, 10, -9 } , { 266905912, 10, -10 } , { 938826416, 10, -11 } , { 232806908, 10, -10 } , { 172990152, 10, -10 } , { 211320261, 10, -9 } , { 222860369, 10, -9 } , { 406950698, 10, -10 } , { 149904204, 10, -9 } , { 205099762, 10, -10 } , { 345719866, 10, -11 } , { 0, 10, 0 } , { 117217896, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 297088208, 10, -10 } , { 0, 10, 0 } , { 358026551, 10, -11 } , { 197005575, 10, -10 } , { 391178337, 10, -10 } , { 774685382, 10, -11 } , { 205448968, 10, -10 } , { 949963603, 10, -11 } , { 124866705, 10, -10 } , { 386596539, 10, -9 } , { 24157251, 10, -9 } , { 232172358, 10, -10 } , { 209269679, 10, -10 } , { 168309251, 10, -10 } , { 621558626, 10, -10 } , { 237523579, 10, -9 } , { 322281722, 10, -10 } , { 233105452, 10, -10 } , { 302884934, 10, -10 } , { 268375534, 10, -11 } , { 0, 10, 0 } , { 929185091, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 298915619, 10, -10 } , { 0, 10, 0 } , { 638880908, 10, -11 } , { 116925705, 10, -10 } , { 174170506, 10, -10 } , { 633544475, 10, -10 } , { 276157577, 10, -10 } , { 133806383, 10, -10 } , { 627954666, 10, -10 } , { 172047941, 10, -10 } , { 217395927, 10, -9 } , { 15733418, 10, -9 } , { 120369539, 10, -10 } , { 125865975, 10, -10 } , { 140160277, 10, -10 } , { 157307562, 10, -10 } , { 386051993, 10, -10 } , { 237369782, 10, -10 } , { 875369654, 10, -10 } , { 978720354, 10, -11 } , { 0, 10, 0 } , { 276129227, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 948353356, 10, -10 } , { 0, 10, 0 } , { 237161571, 10, -10 } , { 124941807, 10, -10 } , { 178570506, 10, -10 } , { 125387121, 10, -9 } , { 410491814, 10, -10 } , { 68099301, 10, -10 } , { 765357665, 10, -10 } , { 186186761, 10, -10 } , { 290449395, 10, -9 } , { 215165697, 10, -10 } , { 118314161, 10, -10 } , { 144801388, 10, -10 } , { 140233658, 10, -10 } , { 234913738, 10, -10 } , { 291566022, 10, -10 } , { 334351582, 10, -10 } , { 770501498, 10, -10 } , { 597037063, 10, -11 } , { 0, 10, 0 } , { 226316403, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 167109947, 10, -9 } , { 0, 10, 0 } , { 861586638, 10, -11 } , { 222140424, 10, -10 } , { 401868467, 10, -10 } , { 117174383, 10, -10 } , { 798695427, 10, -10 } , { 774765283, 10, -11 } , { 241399438, 10, -10 } , { 273077468, 10, -10 } , { 488813533, 10, -10 } , { 18325079, 10, -9 } , { 237817015, 10, -10 } , { 214191498, 10, -10 } , { 206674005, 10, -10 } , { 203058194, 10, -10 } , { 135421973, 10, -9 } , { 268920674, 10, -9 } , { 592068329, 10, -10 } , { 343448839, 10, -11 } , { 0, 10, 0 } , { 109281132, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 644479047, 10, -10 } , { 0, 10, 0 } , { 869183592, 10, -11 } , { 135548155, 10, -10 } , { 196257078, 10, -10 } , { 529260225, 10, -10 } , { 352756255, 10, -10 } , { 635988147, 10, -11 } , { 159082671, 10, -9 } , { 423712329, 10, -10 } , { 212148498, 10, -9 } , { 396186944, 10, -10 } , { 124723874, 10, -10 } , { 15521052, 10, -9 } , { 157513265, 10, -10 } , { 185704758, 10, -10 } , { 280460531, 10, -10 } , { 317481833, 10, -10 } , { 158635363, 10, -9 } , { 471470581, 10, -11 } , { 0, 10, 0 } , { 171250108, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 917941468, 10, -10 } , { 0, 10, 0 } , { 203074754, 10, -10 } , { 156673822, 10, -10 } , { 206290511, 10, -10 } , { 577839787, 10, -10 } , { 926646531, 10, -10 } , { 678048028, 10, -11 } , { 117312157, 10, -9 } , { 208518583, 10, -10 } , { 149897962, 10, -9 } , { 196115921, 10, -10 } , { 145951979, 10, -10 } , { 557617925, 10, -10 } , { 154159664, 10, -10 } , { 166281036, 10, -10 } , { 37839221, 10, -9 } , { 337629283, 10, -10 } , { 160314634, 10, -9 } , { 485957133, 10, -11 } , { 0, 10, 0 } , { 177556942, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 502147261, 10, -10 } , { 0, 10, 0 } , { 688742734, 10, -11 } , { 100715551, 10, -10 } , { 150058922, 10, -10 } , { 143114297, 10, -9 } , { 161415366, 10, -10 } , { 632170761, 10, -11 } , { 951472415, 10, -10 } , { 152930879, 10, -10 } , { 273835537, 10, -9 } , { 698424712, 10, -10 } , { 956016412, 10, -11 } , { 116838231, 10, -10 } , { 129004042, 10, -10 } , { 142060415, 10, -10 } , { 214292656, 10, -10 } , { 228877031, 10, -10 } , { 515921535, 10, -10 } , { 907165489, 10, -10 } , { 0, 10, 0 } , { 254763647, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 388558643, 10, -9 } , { 0, 10, 0 } , { 677290258, 10, -10 } , { 165825272, 10, -10 } , { 241531359, 10, -10 } , { 125540035, 10, -10 } , { 556273732, 10, -10 } , { 726690111, 10, -11 } , { 524739051, 10, -10 } , { 233879044, 10, -10 } , { 353820367, 10, -10 } , { 988092546, 10, -11 } , { 162226818, 10, -10 } , { 200456717, 10, -10 } , { 171488161, 10, -10 } , { 170015533, 10, -10 } , { 748632202, 10, -10 } , { 907261705, 10, -10 } , { 437589872, 10, -10 } , { 361296514, 10, -11 } , { 0, 10, 0 } , { 275920502, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 542169101, 10, -10 } , { 0, 10, 0 } , { 336587569, 10, -10 } , { 132512753, 10, -10 } , { 178407895, 10, -10 } , { 124184765, 10, -9 } , { 188943476, 10, -10 } , { 682647252, 10, -11 } , { 134699989, 10, -9 } , { 180372913, 10, -10 } , { 222434946, 10, -9 } , { 268305362, 10, -10 } , { 126745556, 10, -10 } , { 146816764, 10, -10 } , { 138562558, 10, -10 } , { 157594266, 10, -10 } , { 441439826, 10, -10 } , { 511759563, 10, -10 } , { 101562268, 10, -9 } , { 601660311, 10, -11 } , { 0, 10, 0 } , { 237002469, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 468376173, 10, -10 } , { 0, 10, 0 } , { 810433708, 10, -11 } , { 150452747, 10, -10 } , { 301852741, 10, -10 } , { 629587254, 10, -10 } , { 117890319, 10, -9 } , { 627160437, 10, -11 } , { 172836329, 10, -9 } , { 186613302, 10, -10 } , { 161455142, 10, -9 } , { 262759529, 10, -10 } , { 135815013, 10, -10 } , { 148194607, 10, -10 } , { 143458029, 10, -10 } , { 151828348, 10, -10 } , { 278158032, 10, -10 } , { 300352892, 10, -10 } , { 155434371, 10, -9 } , { 469395111, 10, -11 } , { 0, 10, 0 } , { 171207309, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 532499116, 10, -10 } , { 0, 10, 0 } , { 370136212, 10, -11 } , { 248103056, 10, -10 } , { 14886055, 10, -8 } , { 211292574, 10, -10 } , { 191124532, 10, -10 } , { 110573166, 10, -10 } , { 11211082, 10, -9 } , { 382798789, 10, -10 } , { 408156991, 10, -10 } , { 89878358, 10, -10 } , { 20129265, 10, -9 } , { 159240994, 10, -10 } , { 466214282, 10, -9 } , { 300386696, 10, -10 } , { 337037917, 10, -10 } , { 52433255, 10, -9 } , { 165304847, 10, -10 } , { 31980049, 10, -10 } , { 0, 10, 0 } , { 983416644, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 28784064, 10, -8 } , { 0, 10, 0 } , { 842371073, 10, -11 } , { 213498044, 10, -10 } , { 285454515, 10, -10 } , { 119311466, 10, -10 } , { 111699358, 10, -9 } , { 845619225, 10, -11 } , { 280966326, 10, -10 } , { 27353614, 10, -9 } , { 289471494, 10, -10 } , { 883669215, 10, -11 } , { 223603919, 10, -10 } , { 212464243, 10, -10 } , { 200971524, 10, -10 } , { 279393576, 10, -10 } , { 245756208, 10, -9 } , { 396691974, 10, -10 } , { 411929282, 10, -10 } , { 354936624, 10, -11 } , { 0, 10, 0 } , { 272772182, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 809362258, 10, -10 } , { 0, 10, 0 } , { 931807104, 10, -11 } , { 167074327, 10, -10 } , { 297327699, 10, -10 } , { 607524451, 10, -10 } , { 340129192, 10, -10 } , { 785289737, 10, -11 } , { 147065439, 10, -9 } , { 220066525, 10, -10 } , { 157525597, 10, -9 } , { 206503714, 10, -10 } , { 157900464, 10, -10 } , { 177575297, 10, -10 } , { 168649277, 10, -10 } , { 179608751, 10, -10 } , { 429973494, 10, -10 } , { 955828482, 10, -10 } , { 131215929, 10, -9 } , { 554921369, 10, -11 } , { 0, 10, 0 } , { 369400078, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 141989963, 10, -9 } , { 0, 10, 0 } , { 879115799, 10, -11 } , { 212707027, 10, -10 } , { 258292101, 10, -10 } , { 271732886, 10, -10 } , { 232456275, 10, -9 } , { 792928621, 10, -11 } , { 588456915, 10, -10 } , { 258216143, 10, -10 } , { 61654873, 10, -9 } , { 173644605, 10, -10 } , { 215214244, 10, -10 } , { 586187844, 10, -10 } , { 18716428, 10, -9 } , { 190395099, 10, -10 } , { 759075243, 10, -10 } , { 487186763, 10, -10 } , { 11269974, 10, -8 } , { 428688931, 10, -11 } , { 0, 10, 0 } , { 132592013, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 453818167, 10, -10 } , { 0, 10, 0 } , { 826188057, 10, -11 } , { 1662583, 10, -8 } , { 353313126, 10, -10 } , { 596225113, 10, -10 } , { 203514156, 10, -10 } , { 11052454, 10, -9 } , { 135330496, 10, -9 } , { 239555808, 10, -10 } , { 128255171, 10, -9 } , { 606191893, 10, -10 } , { 155459033, 10, -10 } , { 16675846, 10, -9 } , { 456757586, 10, -10 } , { 203451267, 10, -10 } , { 321502439, 10, -10 } , { 581369968, 10, -10 } , { 11374046, 10, -8 } , { 271551723, 10, -10 } , { 0, 10, 0 } , { 943992843, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 117293343, 10, -9 } , { 0, 10, 0 } , { 89796754, 10, -10 } , { 166043642, 10, -10 } , { 227878798, 10, -10 } , { 265791906, 10, -10 } , { 365167521, 10, -10 } , { 645442047, 10, -11 } , { 883015516, 10, -10 } , { 221387151, 10, -10 } , { 659951075, 10, -10 } , { 148994327, 10, -10 } , { 167331269, 10, -10 } , { 178534307, 10, -10 } , { 164411363, 10, -10 } , { 224517385, 10, -10 } , { 124711873, 10, -9 } , { 651774535, 10, -10 } , { 277942631, 10, -9 } , { 34449301, 10, -10 } , { 0, 10, 0 } , { 132461859, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 787123668, 10, -10 } , { 0, 10, 0 } , { 932770191, 10, -11 } , { 190030999, 10, -10 } , { 261844901, 10, -10 } , { 939065809, 10, -10 } , { 417170378, 10, -10 } , { 100573089, 10, -10 } , { 682407598, 10, -10 } , { 253595197, 10, -10 } , { 198347823, 10, -9 } , { 454775753, 10, -10 } , { 30743301, 10, -9 } , { 189891439, 10, -10 } , { 291169904, 10, -10 } , { 218164516, 10, -10 } , { 580791179, 10, -10 } , { 533436176, 10, -10 } , { 749475231, 10, -10 } , { 265355113, 10, -10 } , { 0, 10, 0 } , { 410584331, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 627626284, 10, -10 } , { 0, 10, 0 } , { 845687316, 10, -11 } , { 250654304, 10, -10 } , { 305418526, 10, -10 } , { 353255126, 10, -10 } , { 155940026, 10, -9 } , { 107226614, 10, -10 } , { 536558568, 10, -10 } , { 30298977, 10, -9 } , { 723639465, 10, -10 } , { 13374127, 10, -9 } , { 434389792, 10, -10 } , { 363823357, 10, -10 } , { 321283969, 10, -10 } , { 32945286, 10, -9 } , { 971661868, 10, -10 } , { 121429313, 10, -9 } , { 450009705, 10, -10 } , { 590683351, 10, -10 } , { 0, 10, 0 } , { 420264541, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 875499356, 10, -10 } , { 0, 10, 0 } , { 249450085, 10, -10 } , { 207579851, 10, -10 } , { 247447495, 10, -10 } , { 772007782, 10, -10 } , { 195622845, 10, -9 } , { 903860133, 10, -11 } , { 519823376, 10, -10 } , { 259082186, 10, -10 } , { 182483754, 10, -9 } , { 179325519, 10, -10 } , { 292609429, 10, -10 } , { 199210789, 10, -10 } , { 188885957, 10, -10 } , { 325533864, 10, -10 } , { 405158773, 10, -10 } , { 353501663, 10, -10 } , { 427878582, 10, -10 } , { 209698708, 10, -10 } , { 0, 10, 0 } , { 208361406, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 81023738, 10, -9 } , { 0, 10, 0 } , { 995636507, 10, -11 } , { 374355846, 10, -10 } , { 415889305, 10, -10 } , { 232018716, 10, -10 } , { 945455314, 10, -10 } , { 153801072, 10, -10 } , { 428354206, 10, -10 } , { 403816011, 10, -10 } , { 61700549, 10, -9 } , { 469665525, 10, -10 } , { 109109639, 10, -9 } , { 963476791, 10, -10 } , { 357596045, 10, -10 } , { 437573361, 10, -10 } , { 878610961, 10, -10 } , { 571006382, 10, -10 } , { 450347187, 10, -10 } , { 692907471, 10, -11 } , { 0, 10, 0 } , { 413825864, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 548772585, 10, -10 } , { 0, 10, 0 } , { 863563903, 10, -11 } , { 264075933, 10, -10 } , { 301951615, 10, -10 } , { 794953646, 10, -10 } , { 523415056, 10, -10 } , { 25895084, 10, -9 } , { 555181526, 10, -10 } , { 294360001, 10, -10 } , { 117512632, 10, -9 } , { 212743253, 10, -10 } , { 870231993, 10, -10 } , { 206438621, 10, -10 } , { 230704893, 10, -10 } , { 326479576, 10, -10 } , { 58767462, 10, -9 } , { 445092952, 10, -10 } , { 718555335, 10, -10 } , { 246896566, 10, -10 } , { 0, 10, 0 } , { 115538652, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 95443967, 10, -9 } , { 0, 10, 0 } , { 819241333, 10, -11 } , { 284172591, 10, -10 } , { 412708844, 10, -10 } , { 206932117, 10, -10 } , { 203440602, 10, -9 } , { 122764696, 10, -10 } , { 264058084, 10, -10 } , { 600603144, 10, -10 } , { 643817218, 10, -10 } , { 3013838, 10, -8 } , { 401242387, 10, -10 } , { 443156603, 10, -10 } , { 737085999, 10, -10 } , { 804556337, 10, -10 } , { 648969052, 10, -10 } , { 465006386, 10, -10 } , { 49091918, 10, -9 } , { 531674125, 10, -11 } , { 0, 10, 0 } , { 186769874, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 702297703, 10, -10 } , { 0, 10, 0 } , { 63864632, 10, -10 } , { 649478032, 10, -10 } , { 524264241, 10, -10 } , { 263402928, 10, -10 } , { 18883427, 10, -8 } , { 105923991, 10, -10 } , { 162096513, 10, -10 } , { 523058412, 10, -10 } , { 331006061, 10, -10 } , { 904825727, 10, -11 } , { 348600049, 10, -10 } , { 170861288, 10, -9 } , { 460316263, 10, -10 } , { 889000991, 10, -10 } , { 919409733, 10, -10 } , { 335917458, 10, -10 } , { 269223383, 10, -10 } , { 405493524, 10, -11 } , { 0, 10, 0 } , { 124582174, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 102878322, 10, -9 } , { 0, 10, 0 } , { 873383302, 10, -11 } , { 217225573, 10, -10 } , { 308324483, 10, -10 } , { 4934614, 10, -8 } , { 376139774, 10, -10 } , { 122035165, 10, -10 } , { 583511529, 10, -10 } , { 371655136, 10, -10 } , { 997024128, 10, -10 } , { 157115476, 10, -10 } , { 290954548, 10, -10 } , { 157739587, 10, -9 } , { 32764144, 10, -9 } , { 234097214, 10, -10 } , { 601782826, 10, -10 } , { 665655617, 10, -10 } , { 789690333, 10, -10 } , { 721833528, 10, -11 } , { 0, 10, 0 } , { 839993595, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 118118121, 10, -9 } , { 0, 10, 0 } , { 108038857, 10, -10 } , { 235259286, 10, -10 } , { 322972114, 10, -10 } , { 469814606, 10, -10 } , { 834315523, 10, -10 } , { 107390784, 10, -10 } , { 848389372, 10, -10 } , { 367352813, 10, -10 } , { 106948137, 10, -9 } , { 191976539, 10, -10 } , { 229203365, 10, -10 } , { 373994336, 10, -10 } , { 285542857, 10, -10 } , { 340049575, 10, -10 } , { 842549149, 10, -10 } , { 49889583, 10, -9 } , { 112974786, 10, -9 } , { 63770888, 10, -10 } , { 0, 10, 0 } , { 357321341, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 770063694, 10, -10 } , { 0, 10, 0 } , { 963609815, 10, -11 } , { 592850378, 10, -10 } , { 509044829, 10, -10 } , { 709769097, 10, -10 } , { 100125996, 10, -9 } , { 112673606, 10, -10 } , { 785832223, 10, -10 } , { 360999504, 10, -10 } , { 838159689, 10, -10 } , { 253494419, 10, -10 } , { 398299623, 10, -10 } , { 356620403, 10, -10 } , { 302374535, 10, -10 } , { 31330105, 10, -9 } , { 822237596, 10, -10 } , { 516707361, 10, -10 } , { 840543137, 10, -10 } , { 630020129, 10, -11 } , { 0, 10, 0 } , { 234274602, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 399311635, 10, -10 } , { 0, 10, 0 } , { 700036583, 10, -11 } , { 156551217, 10, -9 } , { 663639197, 10, -10 } , { 15973473, 10, -9 } , { 452183879, 10, -10 } , { 181699133, 10, -10 } , { 658795214, 10, -10 } , { 324789214, 10, -10 } , { 941469382, 10, -10 } , { 26600902, 10, -9 } , { 142957929, 10, -9 } , { 526347685, 10, -10 } , { 326171459, 10, -10 } , { 250000722, 10, -10 } , { 602029271, 10, -10 } , { 490877723, 10, -10 } , { 5808101, 10, -8 } , { 377421393, 10, -11 } , { 0, 10, 0 } , { 12970601, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 615588591, 10, -10 } , { 0, 10, 0 } , { 688980103, 10, -11 } , { 993777358, 10, -10 } , { 3514122, 10, -8 } , { 218081211, 10, -10 } , { 15837724, 10, -8 } , { 909478705, 10, -11 } , { 242186277, 10, -10 } , { 358576822, 10, -10 } , { 706339539, 10, -10 } , { 11036233, 10, -9 } , { 291167416, 10, -10 } , { 149383843, 10, -9 } , { 316051325, 10, -10 } , { 267497936, 10, -10 } , { 587993043, 10, -10 } , { 34763248, 10, -9 } , { 56059589, 10, -9 } , { 835825853, 10, -10 } , { 0, 10, 0 } , { 207548261, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 84555073, 10, -9 } , { 0, 10, 0 } , { 845712612, 10, -11 } , { 709077402, 10, -10 } , { 386517033, 10, -10 } , { 41358786, 10, -9 } , { 147052687, 10, -9 } , { 126086541, 10, -10 } , { 425447413, 10, -10 } , { 335932813, 10, -10 } , { 580829899, 10, -10 } , { 283711632, 10, -10 } , { 904361176, 10, -10 } , { 461378269, 10, -10 } , { 341282271, 10, -10 } , { 256442992, 10, -10 } , { 972947147, 10, -10 } , { 747590437, 10, -10 } , { 410777355, 10, -10 } , { 543114095, 10, -11 } , { 0, 10, 0 } , { 305392348, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 681761127, 10, -10 } , { 0, 10, 0 } , { 869534854, 10, -11 } , { 206029268, 10, -10 } , { 267437095, 10, -10 } , { 954948155, 10, -10 } , { 905185627, 10, -10 } , { 999702588, 10, -11 } , { 834661613, 10, -10 } , { 258077973, 10, -10 } , { 105869698, 10, -9 } , { 169772214, 10, -10 } , { 206796146, 10, -10 } , { 828068176, 10, -10 } , { 245575008, 10, -10 } , { 203470463, 10, -10 } , { 903673649, 10, -10 } , { 598823053, 10, -10 } , { 68412671, 10, -9 } , { 275525433, 10, -10 } , { 0, 10, 0 } , { 458713398, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 76796074, 10, -9 } , { 0, 10, 0 } , { 989507477, 10, -11 } , { 242129072, 10, -10 } , { 363128663, 10, -10 } , { 654570175, 10, -10 } , { 758209589, 10, -10 } , { 117209582, 10, -10 } , { 802880209, 10, -10 } , { 338548839, 10, -10 } , { 123031009, 10, -9 } , { 280403791, 10, -10 } , { 358848414, 10, -10 } , { 282415128, 10, -10 } , { 377494326, 10, -10 } , { 43689719, 10, -9 } , { 63747989, 10, -9 } , { 730902237, 10, -10 } , { 859959532, 10, -10 } , { 699684667, 10, -11 } , { 0, 10, 0 } , { 394663205, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 383986496, 10, -10 } , { 0, 10, 0 } , { 526023391, 10, -10 } , { 372243315, 10, -10 } , { 422315063, 10, -10 } , { 18721268, 10, -8 } , { 218318129, 10, -10 } , { 266052717, 10, -10 } , { 83729054, 10, -9 } , { 210375495, 10, -10 } , { 103597878, 10, -9 } , { 162332772, 10, -10 } , { 175801838, 10, -10 } , { 158771309, 10, -10 } , { 170839935, 10, -10 } , { 177859263, 10, -10 } , { 605989075, 10, -10 } , { 563908638, 10, -10 } , { 84322066, 10, -9 } , { 140315944, 10, -10 } , { 0, 10, 0 } , { 482927266, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 857406209, 10, -10 } , { 0, 10, 0 } , { 224932609, 10, -10 } , { 210212225, 10, -10 } , { 380025934, 10, -10 } , { 3547043, 10, -8 } , { 426823409, 10, -10 } , { 144126143, 10, -10 } , { 675185466, 10, -10 } , { 390576473, 10, -10 } , { 107397742, 10, -9 } , { 307770315, 10, -10 } , { 205127408, 10, -10 } , { 365643127, 10, -10 } , { 44906807, 10, -9 } , { 302101931, 10, -10 } , { 620434566, 10, -10 } , { 559788132, 10, -10 } , { 819106823, 10, -10 } , { 324840959, 10, -10 } , { 0, 10, 0 } , { 119225732, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 775103898, 10, -10 } , { 0, 10, 0 } , { 18952567, 10, -9 } , { 126976767, 10, -10 } , { 17672127, 10, -9 } , { 116718769, 10, -9 } , { 339768466, 10, -10 } , { 667085091, 10, -11 } , { 124046461, 10, -9 } , { 178141643, 10, -10 } , { 213118879, 10, -9 } , { 213694161, 10, -10 } , { 117384793, 10, -10 } , { 147303732, 10, -10 } , { 136280472, 10, -10 } , { 154873381, 10, -10 } , { 284874102, 10, -10 } , { 344603897, 10, -10 } , { 128557811, 10, -9 } , { 239325663, 10, -10 } , { 0, 10, 0 } , { 239926138, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 447887764, 10, -10 } , { 0, 10, 0 } , { 850057957, 10, -11 } , { 182000089, 10, -10 } , { 527455375, 10, -10 } , { 460447954, 10, -10 } , { 195136523, 10, -10 } , { 776412189, 10, -11 } , { 105511322, 10, -9 } , { 347565293, 10, -10 } , { 251888105, 10, -9 } , { 388042742, 10, -10 } , { 158135932, 10, -10 } , { 170771115, 10, -10 } , { 430019461, 10, -10 } , { 216303457, 10, -10 } , { 341385272, 10, -10 } , { 834170783, 10, -10 } , { 105868747, 10, -9 } , { 498094091, 10, -11 } , { 0, 10, 0 } , { 169948958, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 822881267, 10, -10 } , { 0, 10, 0 } , { 963933856, 10, -11 } , { 331036797, 10, -10 } , { 254418557, 10, -10 } , { 244522667, 10, -10 } , { 252682085, 10, -10 } , { 821878605, 10, -11 } , { 144858389, 10, -9 } , { 242035178, 10, -10 } , { 146030435, 10, -9 } , { 51990153, 10, -9 } , { 185485996, 10, -10 } , { 193192776, 10, -10 } , { 190245617, 10, -10 } , { 195806648, 10, -10 } , { 698761524, 10, -10 } , { 93740337, 10, -9 } , { 121383489, 10, -9 } , { 499370555, 10, -11 } , { 0, 10, 0 } , { 321675752, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 889692638, 10, -10 } , { 0, 10, 0 } , { 219418166, 10, -10 } , { 16977821, 10, -9 } , { 213438452, 10, -10 } , { 450010219, 10, -10 } , { 318586932, 10, -10 } , { 674345107, 10, -11 } , { 17803841, 10, -8 } , { 210885806, 10, -10 } , { 845784353, 10, -10 } , { 176968544, 10, -10 } , { 301500665, 10, -10 } , { 299089689, 10, -10 } , { 156619814, 10, -10 } , { 165703756, 10, -10 } , { 653934419, 10, -10 } , { 697107107, 10, -10 } , { 188543445, 10, -9 } , { 409656664, 10, -11 } , { 0, 10, 0 } , { 158253602, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 844600323, 10, -10 } , { 0, 10, 0 } , { 864636458, 10, -11 } , { 137310275, 10, -10 } , { 217097575, 10, -10 } , { 634901115, 10, -10 } , { 197426071, 10, -10 } , { 678452194, 10, -11 } , { 137370339, 10, -9 } , { 20684299, 10, -9 } , { 243537695, 10, -9 } , { 224820427, 10, -10 } , { 124042576, 10, -10 } , { 155945231, 10, -10 } , { 432817744, 10, -10 } , { 17676484, 10, -9 } , { 294725333, 10, -10 } , { 353213888, 10, -10 } , { 142768226, 10, -9 } , { 493118025, 10, -11 } , { 0, 10, 0 } , { 179566707, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 110226833, 10, -9 } , { 0, 10, 0 } , { 170312709, 10, -10 } , { 223675963, 10, -10 } , { 424631306, 10, -10 } , { 137585409, 10, -10 } , { 274663115, 10, -10 } , { 102127392, 10, -10 } , { 457440649, 10, -10 } , { 351916125, 10, -10 } , { 909773281, 10, -10 } , { 142716509, 10, -10 } , { 221089275, 10, -10 } , { 200965948, 10, -10 } , { 191737494, 10, -9 } , { 279674306, 10, -10 } , { 883697376, 10, -10 } , { 103862118, 10, -9 } , { 101666132, 10, -9 } , { 14141079, 10, -9 } , { 0, 10, 0 } , { 12964501, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 370520143, 10, -10 } , { 0, 10, 0 } , { 707880302, 10, -11 } , { 952136071, 10, -11 } , { 14432869, 10, -9 } , { 506201841, 10, -10 } , { 135825923, 10, -10 } , { 538363909, 10, -11 } , { 872863881, 10, -10 } , { 153068843, 10, -10 } , { 43114469, 10, -8 } , { 105540347, 10, -9 } , { 901697854, 10, -11 } , { 11599677, 10, -9 } , { 131056077, 10, -10 } , { 1435768, 10, -8 } , { 197675288, 10, -10 } , { 237236506, 10, -10 } , { 742467529, 10, -10 } , { 451681455, 10, -11 } , { 0, 10, 0 } , { 145032976, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 922650515, 10, -10 } , { 0, 10, 0 } , { 8460038, 10, -9 } , { 166805175, 10, -10 } , { 223148536, 10, -10 } , { 77200332, 10, -9 } , { 230835797, 10, -10 } , { 681903293, 10, -11 } , { 851087327, 10, -10 } , { 219955611, 10, -10 } , { 736710051, 10, -10 } , { 355039342, 10, -10 } , { 179101517, 10, -10 } , { 177786297, 10, -10 } , { 165911261, 10, -10 } , { 174234379, 10, -10 } , { 468452352, 10, -10 } , { 244452791, 10, -9 } , { 144390883, 10, -9 } , { 44195878, 10, -10 } , { 0, 10, 0 } , { 169783134, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 17270701, 10, -8 } , { 0, 10, 0 } , { 953884894, 10, -11 } , { 19008654, 10, -9 } , { 258254222, 10, -10 } , { 615864909, 10, -10 } , { 753694381, 10, -10 } , { 79009225, 10, -10 } , { 598901281, 10, -10 } , { 254337044, 10, -10 } , { 127284497, 10, -9 } , { 20132914, 10, -9 } , { 196250554, 10, -10 } , { 20812842, 10, -9 } , { 189083516, 10, -10 } , { 197925582, 10, -10 } , { 626100067, 10, -10 } , { 148423901, 10, -9 } , { 770189159, 10, -10 } , { 492291309, 10, -11 } , { 0, 10, 0 } , { 17457472, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 132837522, 10, -9 } , { 0, 10, 0 } , { 519854851, 10, -11 } , { 182023883, 10, -10 } , { 186863815, 10, -10 } , { 746280747, 10, -11 } , { 562585923, 10, -9 } , { 608031437, 10, -11 } , { 938179963, 10, -11 } , { 196458175, 10, -10 } , { 165087272, 10, -10 } , { 547377854, 10, -11 } , { 199422357, 10, -10 } , { 388551301, 10, -10 } , { 136818038, 10, -10 } , { 135485852, 10, -10 } , { 784368922, 10, -10 } , { 222156441, 10, -10 } , { 152535022, 10, -10 } , { 292266743, 10, -11 } , { 0, 10, 0 } , { 67074614, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 126693159, 10, -9 } , { 0, 10, 0 } , { 170876107, 10, -10 } , { 23451555, 10, -9 } , { 285848496, 10, -10 } , { 116283943, 10, -10 } , { 163388638, 10, -9 } , { 809982504, 10, -11 } , { 199527748, 10, -10 } , { 275458071, 10, -10 } , { 579738839, 10, -10 } , { 100618847, 10, -10 } , { 260906252, 10, -10 } , { 215050099, 10, -10 } , { 204272073, 10, -10 } , { 204679639, 10, -10 } , { 187890417, 10, -9 } , { 206030937, 10, -9 } , { 303812514, 10, -10 } , { 35876244, 10, -10 } , { 0, 10, 0 } , { 106996218, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 730982369, 10, -10 } , { 0, 10, 0 } , { 172835711, 10, -10 } , { 123602314, 10, -10 } , { 181894203, 10, -10 } , { 595858997, 10, -10 } , { 187731839, 10, -10 } , { 845738263, 10, -11 } , { 153697334, 10, -9 } , { 190494384, 10, -10 } , { 136635042, 10, -9 } , { 125405603, 10, -9 } , { 121154569, 10, -10 } , { 216062402, 10, -10 } , { 160501822, 10, -10 } , { 162757547, 10, -10 } , { 280099006, 10, -10 } , { 351965056, 10, -10 } , { 113368865, 10, -9 } , { 609917078, 10, -11 } , { 0, 10, 0 } , { 719025941, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 313884373, 10, -10 } , { 0, 10, 0 } , { 741057529, 10, -11 } , { 108397039, 10, -10 } , { 146571433, 10, -10 } , { 168397873, 10, -9 } , { 145542501, 10, -10 } , { 608801436, 10, -11 } , { 166015154, 10, -9 } , { 149271339, 10, -10 } , { 219607236, 10, -9 } , { 253478787, 10, -10 } , { 983238283, 10, -11 } , { 19476054, 10, -9 } , { 113845078, 10, -10 } , { 134124266, 10, -10 } , { 21365314, 10, -9 } , { 304888094, 10, -10 } , { 135392859, 10, -9 } , { 59564317, 10, -10 } , { 0, 10, 0 } , { 248955156, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 570365499, 10, -10 } , { 0, 10, 0 } , { 259054574, 10, -10 } , { 130705152, 10, -10 } , { 183468541, 10, -10 } , { 227874728, 10, -10 } , { 259587117, 10, -10 } , { 576728761, 10, -11 } , { 114906954, 10, -9 } , { 186286692, 10, -10 } , { 252795853, 10, -9 } , { 32692735, 10, -9 } , { 125590291, 10, -10 } , { 153600173, 10, -10 } , { 145466134, 10, -10 } , { 159653642, 10, -10 } , { 356973572, 10, -10 } , { 698173806, 10, -10 } , { 192137988, 10, -9 } , { 414713528, 10, -11 } , { 0, 10, 0 } , { 139266996, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 313961632, 10, -10 } , { 0, 10, 0 } , { 705290302, 10, -11 } , { 109888753, 10, -10 } , { 159566122, 10, -10 } , { 208344654, 10, -10 } , { 147980635, 10, -10 } , { 57046724, 10, -10 } , { 168138507, 10, -9 } , { 172420092, 10, -10 } , { 201565919, 10, -9 } , { 212572448, 10, -9 } , { 112290394, 10, -10 } , { 125811686, 10, -10 } , { 152125014, 10, -10 } , { 149809328, 10, -10 } , { 247132249, 10, -10 } , { 774514307, 10, -10 } , { 895356451, 10, -10 } , { 390686658, 10, -11 } , { 0, 10, 0 } , { 121633918, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 190267055, 10, -10 } , { 0, 10, 0 } , { 145089381, 10, -10 } , { 709021186, 10, -11 } , { 117269755, 10, -10 } , { 974390201, 10, -10 } , { 132439102, 10, -10 } , { 652612244, 10, -11 } , { 404356947, 10, -10 } , { 110797501, 10, -10 } , { 168931582, 10, -9 } , { 109256919, 10, -10 } , { 706761165, 10, -11 } , { 809273311, 10, -11 } , { 101495356, 10, -10 } , { 10682736, 10, -9 } , { 149806634, 10, -10 } , { 150620771, 10, -10 } , { 351399858, 10, -10 } , { 376754321, 10, -9 } , { 0, 10, 0 } , { 104153065, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 284491042, 10, -10 } , { 0, 10, 0 } , { 701554362, 10, -11 } , { 420124764, 10, -10 } , { 16794166, 10, -9 } , { 833412309, 10, -10 } , { 141463754, 10, -10 } , { 576659823, 10, -11 } , { 1192066, 10, -7 } , { 156451674, 10, -10 } , { 387871277, 10, -9 } , { 646569569, 10, -10 } , { 107560679, 10, -10 } , { 11991648, 10, -9 } , { 129889736, 10, -10 } , { 143719666, 10, -10 } , { 203775614, 10, -10 } , { 23877503, 10, -9 } , { 579916173, 10, -10 } , { 49240717, 10, -10 } , { 0, 10, 0 } , { 171713789, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 969245945, 10, -10 } , { 0, 10, 0 } , { 235540132, 10, -10 } , { 198426905, 10, -9 } , { 654776057, 10, -10 } , { 868694928, 10, -11 } , { 283779054, 10, -9 } , { 834998585, 10, -11 } , { 121862761, 10, -10 } , { 26691894, 10, -9 } , { 203591, 10, -7 } , { 648963379, 10, -11 } , { 301933163, 10, -10 } , { 191553753, 10, -10 } , { 21068795, 10, -9 } , { 182867205, 10, -10 } , { 103721521, 10, -9 } , { 440064946, 10, -10 } , { 185610506, 10, -10 } , { 30059546, 10, -10 } , { 0, 10, 0 } , { 824180589, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 26391883, 10, -9 } , { 0, 10, 0 } , { 281201179, 10, -11 } , { 126988884, 10, -9 } , { 570974993, 10, -9 } , { 678805808, 10, -11 } , { 172672527, 10, -10 } , { 937901914, 10, -11 } , { 985450028, 10, -11 } , { 327647739, 10, -10 } , { 500581397, 10, -10 } , { 596470039, 10, -11 } , { 206018187, 10, -10 } , { 162068028, 10, -10 } , { 345719689, 10, -10 } , { 216784854, 10, -10 } , { 312034975, 10, -10 } , { 203737931, 10, -10 } , { 14214102, 10, -9 } , { 232226561, 10, -11 } , { 0, 10, 0 } , { 747394905, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 351851123, 10, -10 } , { 0, 10, 0 } , { 693289511, 10, -11 } , { 178226017, 10, -10 } , { 340290199, 10, -10 } , { 192312381, 10, -10 } , { 184721698, 10, -10 } , { 902255581, 10, -11 } , { 939003773, 10, -10 } , { 315636521, 10, -10 } , { 242423242, 10, -9 } , { 291846982, 10, -10 } , { 276693419, 10, -10 } , { 157858256, 10, -10 } , { 151831679, 10, -9 } , { 590248666, 10, -10 } , { 302161985, 10, -10 } , { 406191215, 10, -10 } , { 104744093, 10, -9 } , { 418954121, 10, -11 } , { 0, 10, 0 } , { 133105924, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 28526482, 10, -9 } , { 0, 10, 0 } , { 675253362, 10, -11 } , { 116982176, 10, -10 } , { 153994887, 10, -10 } , { 190543845, 10, -10 } , { 127634535, 10, -10 } , { 492627354, 10, -11 } , { 409506742, 10, -9 } , { 153235037, 10, -10 } , { 13134465, 10, -8 } , { 304979714, 10, -10 } , { 266972282, 10, -10 } , { 116072211, 10, -10 } , { 403246314, 10, -10 } , { 12603739, 10, -9 } , { 198013276, 10, -10 } , { 254631357, 10, -10 } , { 122160085, 10, -9 } , { 312127908, 10, -11 } , { 0, 10, 0 } , { 11225809, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 639525303, 10, -10 } , { 0, 10, 0 } , { 720407369, 10, -11 } , { 448893787, 10, -10 } , { 553757831, 10, -10 } , { 974136245, 10, -11 } , { 300499622, 10, -10 } , { 961843476, 10, -11 } , { 170873966, 10, -10 } , { 651950613, 10, -10 } , { 278881433, 10, -10 } , { 93185288, 10, -10 } , { 456351064, 10, -10 } , { 213964042, 10, -10 } , { 961022284, 10, -10 } , { 27096822, 10, -9 } , { 205477479, 10, -9 } , { 254881713, 10, -9 } , { 268542977, 10, -10 } , { 323225065, 10, -11 } , { 0, 10, 0 } , { 106194656, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 575785978, 10, -10 } , { 0, 10, 0 } , { 440373424, 10, -11 } , { 952703384, 10, -10 } , { 206243759, 10, -9 } , { 972580191, 10, -11 } , { 664536119, 10, -10 } , { 115791342, 10, -10 } , { 203419113, 10, -10 } , { 223999651, 10, -9 } , { 241226457, 10, -10 } , { 821125256, 10, -11 } , { 271511999, 10, -10 } , { 213682277, 10, -10 } , { 764995066, 10, -10 } , { 482917431, 10, -10 } , { 509916601, 10, -10 } , { 282245055, 10, -10 } , { 19656967, 10, -9 } , { 338747633, 10, -11 } , { 0, 10, 0 } , { 218556982, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 282885515, 10, -10 } , { 0, 10, 0 } , { 482224581, 10, -11 } , { 159210337, 10, -10 } , { 280908509, 10, -10 } , { 537161451, 10, -10 } , { 284313487, 10, -10 } , { 39557397, 10, -9 } , { 291440222, 10, -10 } , { 137332545, 10, -9 } , { 621445487, 10, -10 } , { 23547641, 10, -9 } , { 255297013, 10, -10 } , { 141562295, 10, -10 } , { 243843327, 10, -10 } , { 130597405, 10, -9 } , { 282173526, 10, -10 } , { 223313692, 10, -10 } , { 234337752, 10, -10 } , { 11799637, 10, -8 } , { 0, 10, 0 } , { 155567674, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 384864865, 10, -10 } , { 0, 10, 0 } , { 387518846, 10, -11 } , { 162479871, 10, -10 } , { 155574763, 10, -10 } , { 651337362, 10, -11 } , { 712148222, 10, -9 } , { 527771923, 10, -11 } , { 204323506, 10, -10 } , { 470071619, 10, -10 } , { 138763538, 10, -10 } , { 460581645, 10, -11 } , { 1831109, 10, -8 } , { 120694474, 10, -10 } , { 118893978, 10, -10 } , { 128917109, 10, -10 } , { 303881214, 10, -10 } , { 16550754, 10, -9 } , { 119393439, 10, -10 } , { 26539012, 10, -10 } , { 0, 10, 0 } , { 558106358, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 331078382, 10, -10 } , { 0, 10, 0 } , { 77950251, 10, -10 } , { 108403054, 10, -10 } , { 143338712, 10, -10 } , { 54544928, 10, -9 } , { 284960173, 10, -10 } , { 502444055, 10, -11 } , { 237290414, 10, -9 } , { 149537232, 10, -10 } , { 24529484, 10, -8 } , { 215305607, 10, -10 } , { 956531139, 10, -11 } , { 12535923, 10, -9 } , { 113821412, 10, -10 } , { 130201887, 10, -10 } , { 208933223, 10, -10 } , { 275589267, 10, -10 } , { 164533339, 10, -9 } , { 418927966, 10, -11 } , { 0, 10, 0 } , { 153909268, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 395527768, 10, -10 } , { 0, 10, 0 } , { 402936448, 10, -11 } , { 17079349, 10, -9 } , { 154066688, 10, -10 } , { 641687282, 10, -11 } , { 708995878, 10, -9 } , { 545751878, 10, -11 } , { 721729202, 10, -11 } , { 168359523, 10, -10 } , { 128844642, 10, -10 } , { 443452921, 10, -11 } , { 333019354, 10, -10 } , { 122455849, 10, -10 } , { 115945244, 10, -10 } , { 116442954, 10, -10 } , { 498368908, 10, -10 } , { 321038769, 10, -10 } , { 11092915, 10, -9 } , { 266316797, 10, -11 } , { 0, 10, 0 } , { 559749432, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 390998052, 10, -10 } , { 0, 10, 0 } , { 534907894, 10, -11 } , { 333195395, 10, -10 } , { 288284386, 10, -10 } , { 766912508, 10, -11 } , { 690298608, 10, -10 } , { 108264079, 10, -10 } , { 998470938, 10, -11 } , { 266997788, 10, -10 } , { 167285093, 10, -10 } , { 601936058, 10, -11 } , { 349016827, 10, -9 } , { 16078009, 10, -9 } , { 207419192, 10, -10 } , { 207300771, 10, -10 } , { 287576409, 10, -9 } , { 490468452, 10, -10 } , { 150930562, 10, -10 } , { 224729386, 10, -11 } , { 0, 10, 0 } , { 833486638, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 485150568, 10, -10 } , { 0, 10, 0 } , { 416815834, 10, -11 } , { 163071365, 10, -10 } , { 149907956, 10, -10 } , { 69816007, 10, -10 } , { 694977777, 10, -9 } , { 525713748, 10, -11 } , { 355323482, 10, -10 } , { 164911043, 10, -10 } , { 156965591, 10, -10 } , { 496352602, 10, -11 } , { 183836442, 10, -10 } , { 122294064, 10, -10 } , { 112982666, 10, -10 } , { 113588316, 10, -10 } , { 483167467, 10, -10 } , { 176645715, 10, -10 } , { 140259811, 10, -10 } , { 27075158, 10, -10 } , { 0, 10, 0 } , { 577700772, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 660115047, 10, -10 } , { 0, 10, 0 } , { 730879651, 10, -11 } , { 201520181, 10, -10 } , { 247641729, 10, -10 } , { 124359779, 10, -10 } , { 272135489, 10, -10 } , { 695087419, 10, -11 } , { 177368481, 10, -9 } , { 229658864, 10, -10 } , { 411277805, 10, -10 } , { 15635298, 10, -9 } , { 21423146, 10, -9 } , { 413725367, 10, -10 } , { 174299917, 10, -10 } , { 170840622, 10, -10 } , { 375959812, 10, -9 } , { 406188492, 10, -10 } , { 608086052, 10, -10 } , { 279996692, 10, -11 } , { 0, 10, 0 } , { 998722727, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 398252423, 10, -10 } , { 0, 10, 0 } , { 79476113, 10, -10 } , { 144474647, 10, -10 } , { 19498236, 10, -9 } , { 22493043, 10, -9 } , { 385279483, 10, -10 } , { 629549274, 10, -11 } , { 940311396, 10, -10 } , { 194609209, 10, -10 } , { 34561557, 10, -8 } , { 514742142, 10, -10 } , { 146228243, 10, -10 } , { 148997799, 10, -10 } , { 156940143, 10, -10 } , { 167909892, 10, -10 } , { 123155571, 10, -9 } , { 323086683, 10, -10 } , { 806158035, 10, -10 } , { 416914087, 10, -11 } , { 0, 10, 0 } , { 130255027, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 263475188, 10, -10 } , { 0, 10, 0 } , { 673778568, 10, -11 } , { 944055358, 10, -11 } , { 128518502, 10, -10 } , { 141249863, 10, -9 } , { 125294318, 10, -10 } , { 53544866, 10, -10 } , { 183374563, 10, -9 } , { 133841084, 10, -10 } , { 356916017, 10, -9 } , { 21421745, 10, -9 } , { 842201913, 10, -11 } , { 107890594, 10, -10 } , { 104179607, 10, -10 } , { 125252547, 10, -10 } , { 179469224, 10, -10 } , { 222531925, 10, -10 } , { 562932937, 10, -10 } , { 529016942, 10, -11 } , { 0, 10, 0 } , { 204080174, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 249599794, 10, -10 } , { 0, 10, 0 } , { 615277365, 10, -11 } , { 908229752, 10, -11 } , { 108967791, 10, -10 } , { 981436084, 10, -10 } , { 108668783, 10, -10 } , { 419691357, 10, -11 } , { 477520959, 10, -9 } , { 1166323, 10, -8 } , { 738471988, 10, -10 } , { 341638759, 10, -10 } , { 769442881, 10, -11 } , { 993897759, 10, -11 } , { 858505211, 10, -11 } , { 962977926, 10, -11 } , { 164035667, 10, -10 } , { 223124956, 10, -10 } , { 100032111, 10, -9 } , { 360845376, 10, -11 } , { 0, 10, 0 } , { 147351361, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 831365868, 10, -10 } , { 0, 10, 0 } , { 693390004, 10, -11 } , { 131923219, 10, -10 } , { 170961273, 10, -10 } , { 25852507, 10, -8 } , { 198339817, 10, -10 } , { 795567299, 10, -11 } , { 105562221, 10, -9 } , { 17005086, 10, -9 } , { 138391651, 10, -9 } , { 426074341, 10, -10 } , { 281103958, 10, -10 } , { 13127284, 10, -9 } , { 13037029, 10, -9 } , { 14858387, 10, -9 } , { 289439678, 10, -10 } , { 541401192, 10, -10 } , { 521329569, 10, -10 } , { 73761913, 10, -10 } , { 0, 10, 0 } , { 397565836, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 257770491, 10, -9 } , { 0, 10, 0 } , { 934362192, 10, -11 } , { 196659859, 10, -10 } , { 286951221, 10, -10 } , { 332439504, 10, -10 } , { 605539967, 10, -10 } , { 793067928, 10, -11 } , { 874418633, 10, -10 } , { 271292821, 10, -10 } , { 512463735, 10, -10 } , { 128606798, 10, -10 } , { 196799248, 10, -10 } , { 216305598, 10, -10 } , { 396971107, 10, -10 } , { 202466341, 10, -10 } , { 809289457, 10, -10 } , { 136842443, 10, -9 } , { 727664458, 10, -10 } , { 39422397, 10, -10 } , { 0, 10, 0 } , { 135440536, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 6912437, 10, -8 } , { 0, 10, 0 } , { 596050362, 10, -11 } , { 295051725, 10, -10 } , { 259891781, 10, -10 } , { 934440719, 10, -11 } , { 324434481, 10, -9 } , { 965248242, 10, -11 } , { 263927092, 10, -10 } , { 258165709, 10, -10 } , { 227952916, 10, -10 } , { 732601291, 10, -11 } , { 180177725, 10, -9 } , { 170617077, 10, -10 } , { 19111878, 10, -9 } , { 193253934, 10, -10 } , { 105393607, 10, -9 } , { 692877822, 10, -10 } , { 348843886, 10, -10 } , { 303768701, 10, -11 } , { 0, 10, 0 } , { 883054655, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 295763488, 10, -10 } , { 0, 10, 0 } , { 662025611, 10, -11 } , { 135820678, 10, -10 } , { 141051513, 10, -10 } , { 175825776, 10, -10 } , { 50372681, 10, -9 } , { 513097131, 10, -11 } , { 399483723, 10, -9 } , { 148019298, 10, -10 } , { 716453627, 10, -10 } , { 358793887, 10, -10 } , { 653178444, 10, -10 } , { 116130725, 10, -10 } , { 110905974, 10, -10 } , { 118757852, 10, -10 } , { 217740458, 10, -10 } , { 259931863, 10, -10 } , { 141075707, 10, -9 } , { 290617049, 10, -11 } , { 0, 10, 0 } , { 106925505, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 116736915, 10, -9 } , { 0, 10, 0 } , { 579852557, 10, -10 } , { 141924581, 10, -10 } , { 197403767, 10, -10 } , { 200169286, 10, -10 } , { 22759913, 10, -9 } , { 596552057, 10, -11 } , { 171819262, 10, -9 } , { 265754392, 10, -10 } , { 139599596, 10, -9 } , { 188855993, 10, -10 } , { 131362158, 10, -10 } , { 167354145, 10, -10 } , { 149193718, 10, -10 } , { 162402765, 10, -10 } , { 516495866, 10, -10 } , { 403283542, 10, -10 } , { 178468895, 10, -9 } , { 381059719, 10, -11 } , { 0, 10, 0 } , { 132439648, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 246177573, 10, -9 } , { 0, 10, 0 } , { 848651592, 10, -11 } , { 263293449, 10, -10 } , { 81277277, 10, -9 } , { 110477696, 10, -10 } , { 842773775, 10, -10 } , { 942319167, 10, -11 } , { 314939102, 10, -10 } , { 323706152, 10, -10 } , { 319248413, 10, -10 } , { 992294119, 10, -11 } , { 24209425, 10, -9 } , { 228935966, 10, -10 } , { 628216518, 10, -10 } , { 23493531, 10, -9 } , { 20495524, 10, -8 } , { 466366896, 10, -10 } , { 526630599, 10, -10 } , { 343734681, 10, -11 } , { 0, 10, 0 } , { 110479955, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 824788704, 10, -10 } , { 0, 10, 0 } , { 732017958, 10, -11 } , { 242934111, 10, -10 } , { 325313361, 10, -10 } , { 582626297, 10, -10 } , { 183641416, 10, -9 } , { 117100578, 10, -10 } , { 260484941, 10, -10 } , { 364038043, 10, -10 } , { 356793093, 10, -10 } , { 105877077, 10, -10 } , { 380747438, 10, -10 } , { 202728379, 10, -10 } , { 472847977, 10, -10 } , { 872162432, 10, -10 } , { 950683495, 10, -10 } , { 124968637, 10, -9 } , { 293349147, 10, -10 } , { 58905999, 10, -10 } , { 0, 10, 0 } , { 546882448, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 62580618, 10, -9 } , { 0, 10, 0 } , { 790511178, 10, -11 } , { 117836983, 10, -10 } , { 161404226, 10, -10 } , { 127906333, 10, -9 } , { 172030786, 10, -10 } , { 63289156, 10, -10 } , { 178382571, 10, -9 } , { 165634363, 10, -10 } , { 234634225, 10, -9 } , { 393525986, 10, -10 } , { 107370266, 10, -10 } , { 134402814, 10, -10 } , { 12841042, 10, -9 } , { 145898163, 10, -10 } , { 314714856, 10, -10 } , { 276621355, 10, -10 } , { 955945125, 10, -10 } , { 56981154, 10, -10 } , { 0, 10, 0 } , { 225074442, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 688995197, 10, -10 } , { 0, 10, 0 } , { 389559763, 10, -11 } , { 163655854, 10, -10 } , { 302824648, 10, -10 } , { 587709919, 10, -11 } , { 18403777, 10, -9 } , { 568286015, 10, -11 } , { 111720094, 10, -10 } , { 213632772, 10, -10 } , { 180471438, 10, -10 } , { 532030304, 10, -11 } , { 298275424, 10, -10 } , { 660196017, 10, -9 } , { 437323099, 10, -10 } , { 266537865, 10, -10 } , { 285060568, 10, -10 } , { 373925285, 10, -10 } , { 303305896, 10, -10 } , { 195732457, 10, -11 } , { 0, 10, 0 } , { 621949976, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 114589326, 10, -9 } , { 0, 10, 0 } , { 869637685, 10, -11 } , { 375987527, 10, -10 } , { 545942068, 10, -10 } , { 377203577, 10, -10 } , { 867964613, 10, -10 } , { 126555898, 10, -10 } , { 213058815, 10, -10 } , { 78953449, 10, -9 } , { 456098658, 10, -10 } , { 118377111, 10, -10 } , { 531619436, 10, -10 } , { 562500309, 10, -10 } , { 527397356, 10, -10 } , { 414188223, 10, -10 } , { 141110862, 10, -9 } , { 914208183, 10, -10 } , { 317402028, 10, -10 } , { 202460825, 10, -10 } , { 0, 10, 0 } , { 307690064, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 142434017, 10, -9 } , { 0, 10, 0 } , { 921723057, 10, -11 } , { 482250622, 10, -10 } , { 407809508, 10, -10 } , { 593487752, 10, -10 } , { 118640926, 10, -9 } , { 108330162, 10, -10 } , { 281976883, 10, -10 } , { 311162551, 10, -10 } , { 841148199, 10, -10 } , { 136067742, 10, -10 } , { 66298862, 10, -9 } , { 231242613, 10, -10 } , { 236835049, 10, -10 } , { 23640548, 10, -9 } , { 115253412, 10, -9 } , { 931347207, 10, -10 } , { 478115172, 10, -10 } , { 525059837, 10, -11 } , { 0, 10, 0 } , { 236192384, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 334035996, 10, -10 } , { 0, 10, 0 } , { 772232432, 10, -11 } , { 120426857, 10, -10 } , { 166964839, 10, -10 } , { 991884208, 10, -10 } , { 323484776, 10, -10 } , { 646869935, 10, -11 } , { 184292569, 10, -9 } , { 281846083, 10, -10 } , { 242343381, 10, -9 } , { 219354195, 10, -10 } , { 111206347, 10, -10 } , { 132499674, 10, -10 } , { 134815481, 10, -10 } , { 302335211, 10, -10 } , { 228736726, 10, -10 } , { 274610839, 10, -10 } , { 115890211, 10, -9 } , { 545723941, 10, -11 } , { 0, 10, 0 } , { 281056192, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 534318453, 10, -10 } , { 0, 10, 0 } , { 711993566, 10, -11 } , { 245797183, 10, -10 } , { 473555147, 10, -10 } , { 674072656, 10, -10 } , { 195275938, 10, -9 } , { 104767147, 10, -10 } , { 696113685, 10, -10 } , { 521328764, 10, -10 } , { 656247505, 10, -10 } , { 172334835, 10, -10 } , { 355701609, 10, -10 } , { 191684304, 10, -10 } , { 668259089, 10, -10 } , { 25858868, 10, -9 } , { 616623723, 10, -10 } , { 464626629, 10, -10 } , { 422560059, 10, -10 } , { 606965808, 10, -10 } , { 0, 10, 0 } , { 282751505, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 822525338, 10, -10 } , { 0, 10, 0 } , { 698899707, 10, -11 } , { 501544985, 10, -10 } , { 496045553, 10, -10 } , { 132235334, 10, -10 } , { 684378865, 10, -10 } , { 426505363, 10, -10 } , { 187781537, 10, -10 } , { 657971887, 10, -10 } , { 383283771, 10, -10 } , { 142374677, 10, -10 } , { 119169513, 10, -9 } , { 292506653, 10, -10 } , { 121142463, 10, -9 } , { 586845206, 10, -10 } , { 11183035, 10, -8 } , { 685775087, 10, -10 } , { 364942801, 10, -10 } , { 420413942, 10, -11 } , { 0, 10, 0 } , { 248793192, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 568737448, 10, -10 } , { 0, 10, 0 } , { 859301236, 10, -11 } , { 271642858, 10, -10 } , { 919353019, 10, -10 } , { 618508386, 10, -10 } , { 265835345, 10, -10 } , { 103453536, 10, -10 } , { 937955778, 10, -10 } , { 376998402, 10, -10 } , { 110989181, 10, -9 } , { 285389058, 10, -10 } , { 234158898, 10, -10 } , { 212058015, 10, -10 } , { 45768555, 10, -9 } , { 252136058, 10, -10 } , { 891832327, 10, -10 } , { 133046691, 10, -9 } , { 68539574, 10, -9 } , { 554382973, 10, -11 } , { 0, 10, 0 } , { 297639048, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 471711216, 10, -10 } , { 0, 10, 0 } , { 73356874, 10, -10 } , { 15364971, 10, -9 } , { 273328779, 10, -10 } , { 186370256, 10, -9 } , { 490933557, 10, -10 } , { 964636274, 10, -11 } , { 11198912, 10, -8 } , { 481983438, 10, -10 } , { 12346622, 10, -8 } , { 174695807, 10, -10 } , { 148570252, 10, -10 } , { 149419417, 10, -10 } , { 161866046, 10, -10 } , { 196263654, 10, -10 } , { 367466269, 10, -10 } , { 52170341, 10, -9 } , { 771782576, 10, -10 } , { 160885679, 10, -10 } , { 0, 10, 0 } , { 710307492, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 598584014, 10, -10 } , { 0, 10, 0 } , { 563850495, 10, -11 } , { 652120476, 10, -10 } , { 204582571, 10, -9 } , { 426632295, 10, -10 } , { 398735313, 10, -10 } , { 138253756, 10, -10 } , { 265482595, 10, -10 } , { 589838568, 10, -10 } , { 30140396, 10, -9 } , { 96512974, 10, -10 } , { 119537123, 10, -9 } , { 406344275, 10, -10 } , { 942005502, 10, -10 } , { 395418667, 10, -10 } , { 888524612, 10, -10 } , { 472340999, 10, -10 } , { 240956307, 10, -10 } , { 404649127, 10, -11 } , { 0, 10, 0 } , { 145991214, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 718614915, 10, -10 } , { 0, 10, 0 } , { 721430806, 10, -11 } , { 413143846, 10, -10 } , { 765119325, 10, -10 } , { 138999919, 10, -10 } , { 219411509, 10, -9 } , { 195425417, 10, -10 } , { 262472375, 10, -10 } , { 741762912, 10, -10 } , { 52225466, 10, -9 } , { 114811721, 10, -10 } , { 403771037, 10, -10 } , { 320163892, 10, -10 } , { 809951629, 10, -10 } , { 322952151, 10, -10 } , { 990618169, 10, -10 } , { 499341146, 10, -10 } , { 467762462, 10, -10 } , { 453273914, 10, -11 } , { 0, 10, 0 } , { 206023857, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 159881733, 10, -9 } , { 0, 10, 0 } , { 106710073, 10, -10 } , { 380841091, 10, -10 } , { 345578667, 10, -10 } , { 337367134, 10, -10 } , { 770672061, 10, -10 } , { 187118451, 10, -10 } , { 676630477, 10, -10 } , { 326227419, 10, -10 } , { 125540963, 10, -9 } , { 271312508, 10, -10 } , { 241158102, 10, -10 } , { 246951174, 10, -10 } , { 327849827, 10, -10 } , { 341252516, 10, -10 } , { 80213553, 10, -9 } , { 730290953, 10, -10 } , { 757648406, 10, -10 } , { 526771759, 10, -11 } , { 0, 10, 0 } , { 177648734, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 586564423, 10, -10 } , { 0, 10, 0 } , { 83834414, 10, -10 } , { 410263771, 10, -10 } , { 47355341, 10, -9 } , { 827021742, 10, -10 } , { 5227787, 10, -8 } , { 132838447, 10, -10 } , { 526713066, 10, -10 } , { 639916954, 10, -10 } , { 872708479, 10, -10 } , { 165127143, 10, -10 } , { 683668869, 10, -10 } , { 316978507, 10, -10 } , { 325110307, 10, -10 } , { 914554162, 10, -10 } , { 808910053, 10, -10 } , { 435353531, 10, -10 } , { 779221237, 10, -10 } , { 65671579, 10, -10 } , { 0, 10, 0 } , { 337368836, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 472146268, 10, -10 } , { 0, 10, 0 } , { 832499358, 10, -11 } , { 225725759, 10, -10 } , { 394623346, 10, -10 } , { 267539749, 10, -10 } , { 251513127, 10, -10 } , { 106206734, 10, -10 } , { 965211921, 10, -10 } , { 529285948, 10, -10 } , { 123246193, 10, -9 } , { 231817554, 10, -10 } , { 223731553, 10, -10 } , { 480102305, 10, -10 } , { 104915322, 10, -9 } , { 504435633, 10, -10 } , { 772966062, 10, -10 } , { 790556068, 10, -10 } , { 103904212, 10, -9 } , { 113121001, 10, -10 } , { 0, 10, 0 } , { 246382406, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 139281041, 10, -9 } , { 0, 10, 0 } , { 779265033, 10, -11 } , { 657134318, 10, -10 } , { 529232844, 10, -10 } , { 122003107, 10, -10 } , { 230686805, 10, -9 } , { 103597717, 10, -10 } , { 180727443, 10, -10 } , { 542515632, 10, -10 } , { 393403922, 10, -10 } , { 228911011, 10, -10 } , { 543377497, 10, -10 } , { 340505955, 10, -10 } , { 388242251, 10, -10 } , { 261434568, 10, -10 } , { 105459639, 10, -9 } , { 584005354, 10, -10 } , { 273743325, 10, -10 } , { 121876355, 10, -10 } , { 0, 10, 0 } , { 116380152, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 88959382, 10, -9 } , { 0, 10, 0 } , { 906288354, 10, -11 } , { 626877256, 10, -10 } , { 583545225, 10, -10 } , { 573738181, 10, -10 } , { 874915371, 10, -10 } , { 238432921, 10, -10 } , { 531968356, 10, -10 } , { 340558057, 10, -10 } , { 922432844, 10, -10 } , { 193596517, 10, -10 } , { 554770269, 10, -10 } , { 419322315, 10, -10 } , { 348812259, 10, -10 } , { 265294275, 10, -10 } , { 837422744, 10, -10 } , { 413195912, 10, -10 } , { 541481523, 10, -10 } , { 357329532, 10, -10 } , { 0, 10, 0 } , { 384071524, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 563126867, 10, -10 } , { 0, 10, 0 } , { 884871179, 10, -11 } , { 206339656, 10, -10 } , { 272258505, 10, -10 } , { 751790055, 10, -10 } , { 885242732, 10, -10 } , { 922484687, 10, -11 } , { 94251744, 10, -9 } , { 376954449, 10, -10 } , { 182121335, 10, -9 } , { 24787267, 10, -9 } , { 393665225, 10, -10 } , { 282090414, 10, -10 } , { 350467162, 10, -10 } , { 294091623, 10, -10 } , { 461356196, 10, -10 } , { 469740498, 10, -10 } , { 923619124, 10, -10 } , { 595661568, 10, -11 } , { 0, 10, 0 } , { 218640818, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 52273974, 10, -9 } , { 0, 10, 0 } , { 741997327, 10, -11 } , { 357029867, 10, -10 } , { 397440036, 10, -10 } , { 472853465, 10, -10 } , { 491996872, 10, -10 } , { 997372186, 10, -10 } , { 382468063, 10, -10 } , { 511387394, 10, -10 } , { 825051734, 10, -10 } , { 137378008, 10, -10 } , { 567538768, 10, -10 } , { 191181304, 10, -10 } , { 291450552, 10, -10 } , { 274749922, 10, -10 } , { 872950617, 10, -10 } , { 573928005, 10, -10 } , { 661513347, 10, -10 } , { 454147267, 10, -10 } , { 0, 10, 0 } , { 850007034, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 369027452, 10, -10 } , { 0, 10, 0 } , { 821398972, 10, -11 } , { 13095585, 10, -9 } , { 183310067, 10, -10 } , { 109524034, 10, -9 } , { 173606426, 10, -10 } , { 7063137, 10, -9 } , { 132425666, 10, -9 } , { 196539836, 10, -10 } , { 223060336, 10, -9 } , { 219030372, 10, -10 } , { 123886233, 10, -10 } , { 298950852, 10, -10 } , { 144546132, 10, -10 } , { 31695408, 10, -9 } , { 389862599, 10, -10 } , { 409756737, 10, -10 } , { 13595029, 10, -8 } , { 157405724, 10, -10 } , { 0, 10, 0 } , { 304181871, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 100699248, 10, -9 } , { 0, 10, 0 } , { 919926721, 10, -11 } , { 265364326, 10, -10 } , { 504327248, 10, -10 } , { 514272156, 10, -10 } , { 840231317, 10, -10 } , { 858350752, 10, -11 } , { 797342012, 10, -10 } , { 264417576, 10, -10 } , { 216464221, 10, -9 } , { 319309419, 10, -10 } , { 181984641, 10, -10 } , { 464967781, 10, -10 } , { 257044591, 10, -10 } , { 212339343, 10, -10 } , { 531191558, 10, -10 } , { 376491417, 10, -10 } , { 696827549, 10, -10 } , { 552074955, 10, -11 } , { 0, 10, 0 } , { 182616482, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 985199564, 10, -10 } , { 0, 10, 0 } , { 899174678, 10, -11 } , { 156764357, 10, -10 } , { 20904632, 10, -9 } , { 487151465, 10, -10 } , { 994335213, 10, -10 } , { 770870806, 10, -11 } , { 105217336, 10, -9 } , { 212994285, 10, -10 } , { 234792007, 10, -9 } , { 250641103, 10, -10 } , { 152221611, 10, -10 } , { 171055935, 10, -10 } , { 162542094, 10, -10 } , { 177472749, 10, -10 } , { 503959352, 10, -10 } , { 325350805, 10, -10 } , { 941073191, 10, -10 } , { 553751286, 10, -11 } , { 0, 10, 0 } , { 329490628, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 584749798, 10, -10 } , { 0, 10, 0 } , { 931725949, 10, -11 } , { 198357179, 10, -10 } , { 265937028, 10, -10 } , { 597962618, 10, -10 } , { 868825991, 10, -10 } , { 101015277, 10, -10 } , { 11211988, 10, -8 } , { 259411836, 10, -10 } , { 121216983, 10, -9 } , { 281596266, 10, -10 } , { 20158591, 10, -9 } , { 383552119, 10, -10 } , { 305036363, 10, -10 } , { 208961617, 10, -10 } , { 704448925, 10, -10 } , { 717512264, 10, -10 } , { 108298969, 10, -9 } , { 661745711, 10, -11 } , { 0, 10, 0 } , { 517683637, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 591155724, 10, -10 } , { 0, 10, 0 } , { 400011462, 10, -10 } , { 124467492, 10, -10 } , { 174500683, 10, -10 } , { 750937242, 10, -10 } , { 272501947, 10, -10 } , { 620578693, 10, -11 } , { 16559424, 10, -8 } , { 177285323, 10, -10 } , { 226547478, 10, -9 } , { 314467324, 10, -10 } , { 113407333, 10, -10 } , { 14367223, 10, -9 } , { 20057301, 10, -9 } , { 153543147, 10, -10 } , { 263665475, 10, -10 } , { 299952379, 10, -10 } , { 13113381, 10, -8 } , { 510135178, 10, -11 } , { 0, 10, 0 } , { 187950816, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 944780354, 10, -10 } , { 0, 10, 0 } , { 163452061, 10, -10 } , { 155520109, 10, -10 } , { 214103047, 10, -10 } , { 699720789, 10, -10 } , { 329246809, 10, -10 } , { 717864552, 10, -11 } , { 116568134, 10, -9 } , { 212738303, 10, -10 } , { 222545368, 10, -9 } , { 267653337, 10, -10 } , { 149172799, 10, -10 } , { 173284157, 10, -10 } , { 163422514, 10, -10 } , { 17844249, 10, -9 } , { 714846783, 10, -10 } , { 400801526, 10, -10 } , { 116863525, 10, -9 } , { 531483135, 10, -11 } , { 0, 10, 0 } , { 195079858, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 180432311, 10, -9 } , { 0, 10, 0 } , { 102568917, 10, -10 } , { 203625027, 10, -10 } , { 279702745, 10, -10 } , { 425528443, 10, -10 } , { 54443571, 10, -9 } , { 823297982, 10, -11 } , { 798863011, 10, -10 } , { 269826109, 10, -10 } , { 953341849, 10, -10 } , { 247466273, 10, -10 } , { 205680619, 10, -10 } , { 22087169, 10, -9 } , { 202600374, 10, -10 } , { 206446683, 10, -10 } , { 114540398, 10, -9 } , { 842119318, 10, -10 } , { 119050773, 10, -9 } , { 454691905, 10, -11 } , { 0, 10, 0 } , { 163601549, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 835279187, 10, -10 } , { 0, 10, 0 } , { 251663934, 10, -10 } , { 190488951, 10, -10 } , { 241267264, 10, -10 } , { 115678951, 10, -9 } , { 772294124, 10, -10 } , { 807933197, 10, -11 } , { 642606891, 10, -10 } , { 237255752, 10, -10 } , { 10526351, 10, -8 } , { 154267894, 10, -10 } , { 205545688, 10, -10 } , { 188901692, 10, -10 } , { 176009494, 10, -10 } , { 188805038, 10, -10 } , { 773451727, 10, -10 } , { 17306344, 10, -8 } , { 715619241, 10, -10 } , { 575073756, 10, -11 } , { 0, 10, 0 } , { 224050387, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 339290822, 10, -10 } , { 0, 10, 0 } , { 79583713, 10, -10 } , { 109321068, 10, -10 } , { 150178394, 10, -10 } , { 889924022, 10, -10 } , { 143465022, 10, -10 } , { 545389072, 10, -11 } , { 178444611, 10, -9 } , { 153806229, 10, -10 } , { 249639207, 10, -9 } , { 217957213, 10, -10 } , { 982704823, 10, -11 } , { 128042057, 10, -10 } , { 118006201, 10, -10 } , { 136491932, 10, -10 } , { 219616177, 10, -10 } , { 353102447, 10, -10 } , { 181322191, 10, -9 } , { 481945764, 10, -11 } , { 0, 10, 0 } , { 187136765, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 151754187, 10, -9 } , { 0, 10, 0 } , { 940785823, 10, -11 } , { 15640759, 10, -9 } , { 221115284, 10, -10 } , { 965668744, 10, -10 } , { 464866848, 10, -10 } , { 745350129, 10, -11 } , { 956863625, 10, -10 } , { 217589037, 10, -10 } , { 168460066, 10, -9 } , { 195555514, 10, -10 } , { 147764534, 10, -10 } , { 18127361, 10, -9 } , { 162990442, 10, -10 } , { 176840663, 10, -10 } , { 573929085, 10, -10 } , { 399143572, 10, -10 } , { 124134966, 10, -9 } , { 558533214, 10, -11 } , { 0, 10, 0 } , { 216952726, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 605681628, 10, -10 } , { 0, 10, 0 } , { 89125737, 10, -10 } , { 132132144, 10, -10 } , { 186334147, 10, -10 } , { 369195331, 10, -10 } , { 184386987, 10, -10 } , { 596340697, 10, -11 } , { 146976446, 10, -9 } , { 18921436, 10, -9 } , { 173995293, 10, -9 } , { 58247965, 10, -9 } , { 126374632, 10, -10 } , { 154380157, 10, -10 } , { 149485686, 10, -10 } , { 158985836, 10, -10 } , { 393344016, 10, -10 } , { 623760686, 10, -10 } , { 220353757, 10, -9 } , { 420564651, 10, -11 } , { 0, 10, 0 } , { 152760364, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 474893503, 10, -10 } , { 0, 10, 0 } , { 758688524, 10, -11 } , { 122244963, 10, -10 } , { 164417037, 10, -10 } , { 189129729, 10, -9 } , { 171005503, 10, -10 } , { 737691358, 10, -11 } , { 155732844, 10, -9 } , { 166131365, 10, -10 } , { 152085023, 10, -9 } , { 347599727, 10, -10 } , { 117128603, 10, -10 } , { 133194972, 10, -10 } , { 126868823, 10, -10 } , { 145615388, 10, -10 } , { 265584563, 10, -10 } , { 584833211, 10, -10 } , { 110744187, 10, -9 } , { 688236466, 10, -11 } , { 0, 10, 0 } , { 428507068, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 109551852, 10, -9 } , { 0, 10, 0 } , { 905594296, 10, -11 } , { 226273428, 10, -10 } , { 217413616, 10, -10 } , { 895973439, 10, -10 } , { 520824354, 10, -10 } , { 903051715, 10, -11 } , { 121456174, 10, -9 } , { 212955886, 10, -10 } , { 167445732, 10, -9 } , { 330870373, 10, -10 } , { 146630147, 10, -10 } , { 171336885, 10, -10 } , { 163944446, 10, -10 } , { 177473949, 10, -10 } , { 392652879, 10, -10 } , { 325884158, 10, -10 } , { 104256039, 10, -9 } , { 685985591, 10, -11 } , { 0, 10, 0 } , { 566846079, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 963027328, 10, -10 } , { 0, 10, 0 } , { 202087952, 10, -10 } , { 181346978, 10, -10 } , { 229371908, 10, -10 } , { 580817131, 10, -10 } , { 133196975, 10, -9 } , { 768209099, 10, -11 } , { 95661432, 10, -9 } , { 232996531, 10, -10 } , { 147701457, 10, -9 } , { 240535494, 10, -10 } , { 182053852, 10, -10 } , { 188789908, 10, -10 } , { 173692523, 10, -10 } , { 185801217, 10, -10 } , { 559890411, 10, -10 } , { 521483567, 10, -10 } , { 118545331, 10, -9 } , { 531892003, 10, -11 } , { 0, 10, 0 } , { 186605966, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 683257077, 10, -10 } , { 0, 10, 0 } , { 850200091, 10, -11 } , { 143083657, 10, -10 } , { 188523369, 10, -10 } , { 342100518, 10, -10 } , { 188547501, 10, -10 } , { 574473755, 10, -11 } , { 168284793, 10, -9 } , { 191728601, 10, -10 } , { 826384525, 10, -10 } , { 169263891, 10, -10 } , { 257292419, 10, -10 } , { 153765326, 10, -10 } , { 140676588, 10, -10 } , { 229533498, 10, -10 } , { 416908278, 10, -10 } , { 901468425, 10, -10 } , { 285298227, 10, -9 } , { 351940536, 10, -11 } , { 0, 10, 0 } , { 138843868, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 379665756, 10, -10 } , { 0, 10, 0 } , { 264137216, 10, -10 } , { 113244646, 10, -10 } , { 15411474, 10, -9 } , { 218769002, 10, -10 } , { 147157091, 10, -10 } , { 46724423, 10, -10 } , { 200981614, 10, -9 } , { 155504806, 10, -10 } , { 922386128, 10, -10 } , { 313569526, 10, -10 } , { 105806245, 10, -10 } , { 132905274, 10, -10 } , { 118216134, 10, -10 } , { 126990551, 10, -10 } , { 31229026, 10, -9 } , { 616551584, 10, -10 } , { 331609034, 10, -9 } , { 318825169, 10, -11 } , { 0, 10, 0 } , { 122811485, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 220466199, 10, -10 } , { 0, 10, 0 } , { 111775856, 10, -10 } , { 937507874, 10, -11 } , { 139618998, 10, -10 } , { 243129852, 10, -9 } , { 300647357, 10, -10 } , { 134368851, 10, -10 } , { 31331539, 10, -9 } , { 137100221, 10, -10 } , { 948695741, 10, -10 } , { 106363688, 10, -10 } , { 102670717, 10, -10 } , { 937131026, 10, -11 } , { 11043864, 10, -9 } , { 127807056, 10, -10 } , { 198971363, 10, -10 } , { 341895399, 10, -10 } , { 256177336, 10, -10 } , { 109077705, 10, -10 } , { 0, 10, 0 } , { 345303564, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 724848539, 10, -10 } , { 0, 10, 0 } , { 897277316, 10, -11 } , { 142397738, 10, -10 } , { 280223092, 10, -10 } , { 838346979, 10, -10 } , { 198974631, 10, -10 } , { 664887019, 10, -11 } , { 122773174, 10, -9 } , { 195375824, 10, -10 } , { 185352319, 10, -9 } , { 339186262, 10, -10 } , { 128248764, 10, -10 } , { 158206602, 10, -10 } , { 153545005, 10, -10 } , { 16471336, 10, -9 } , { 388424232, 10, -10 } , { 468409541, 10, -10 } , { 191727905, 10, -9 } , { 518522047, 10, -11 } , { 0, 10, 0 } , { 203175169, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 315013663, 10, -10 } , { 0, 10, 0 } , { 4059237, 10, -9 } , { 319579162, 10, -10 } , { 248245345, 10, -9 } , { 952224327, 10, -11 } , { 200650922, 10, -10 } , { 119296319, 10, -10 } , { 310361183, 10, -10 } , { 404417411, 10, -10 } , { 578392083, 10, -10 } , { 989314126, 10, -11 } , { 391707328, 10, -10 } , { 174932503, 10, -10 } , { 294489288, 10, -9 } , { 391710773, 10, -10 } , { 360627628, 10, -10 } , { 480902548, 10, -10 } , { 325554497, 10, -10 } , { 34572455, 10, -10 } , { 0, 10, 0 } , { 207441721, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 59002966, 10, -9 } , { 0, 10, 0 } , { 133734748, 10, -10 } , { 551457155, 10, -10 } , { 18776457, 10, -8 } , { 997504965, 10, -11 } , { 127650423, 10, -9 } , { 129094422, 10, -10 } , { 138581429, 10, -10 } , { 637621879, 10, -10 } , { 324560033, 10, -10 } , { 919185583, 10, -11 } , { 551158474, 10, -10 } , { 22262234, 10, -9 } , { 968867591, 10, -10 } , { 846336619, 10, -10 } , { 108978486, 10, -9 } , { 426174387, 10, -10 } , { 210953449, 10, -10 } , { 368634218, 10, -11 } , { 0, 10, 0 } , { 112553396, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 168690226, 10, -9 } , { 0, 10, 0 } , { 847740818, 10, -11 } , { 202111557, 10, -10 } , { 319823545, 10, -10 } , { 941894548, 10, -10 } , { 166195129, 10, -9 } , { 873039456, 10, -11 } , { 459563361, 10, -10 } , { 263630385, 10, -10 } , { 526520364, 10, -10 } , { 512044294, 10, -10 } , { 206586617, 10, -10 } , { 198155839, 10, -10 } , { 198173184, 10, -10 } , { 268086964, 10, -10 } , { 915682172, 10, -10 } , { 498016117, 10, -10 } , { 662255532, 10, -10 } , { 540126686, 10, -11 } , { 0, 10, 0 } , { 198304064, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 466079878, 10, -10 } , { 0, 10, 0 } , { 516824629, 10, -11 } , { 271271603, 10, -10 } , { 110620211, 10, -9 } , { 107334544, 10, -10 } , { 386766925, 10, -10 } , { 121369524, 10, -10 } , { 33744965, 10, -9 } , { 71348119, 10, -9 } , { 399598238, 10, -10 } , { 216403248, 10, -10 } , { 35827761, 10, -9 } , { 187579441, 10, -10 } , { 133038744, 10, -9 } , { 230818237, 10, -9 } , { 41448278, 10, -9 } , { 733808641, 10, -10 } , { 511842609, 10, -10 } , { 359748502, 10, -11 } , { 0, 10, 0 } , { 116804878, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 302812396, 10, -10 } , { 0, 10, 0 } , { 508688773, 10, -11 } , { 139254418, 10, -10 } , { 25083531, 10, -9 } , { 160173351, 10, -10 } , { 162173277, 10, -10 } , { 951908971, 10, -11 } , { 760989346, 10, -10 } , { 485295888, 10, -10 } , { 426973159, 10, -10 } , { 199427128, 10, -10 } , { 159945808, 10, -10 } , { 131106807, 10, -10 } , { 233474923, 10, -10 } , { 340919706, 10, -9 } , { 262846582, 10, -10 } , { 24718796, 10, -9 } , { 172954096, 10, -9 } , { 401905125, 10, -11 } , { 0, 10, 0 } , { 639956107, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 321601226, 10, -10 } , { 0, 10, 0 } , { 364306934, 10, -11 } , { 825235611, 10, -10 } , { 212394439, 10, -9 } , { 981655827, 10, -11 } , { 224695348, 10, -10 } , { 115305256, 10, -10 } , { 112399421, 10, -10 } , { 214530979, 10, -9 } , { 223447125, 10, -10 } , { 745669643, 10, -11 } , { 248156889, 10, -10 } , { 371724753, 10, -10 } , { 380779095, 10, -10 } , { 180471958, 10, -9 } , { 369352617, 10, -10 } , { 252263893, 10, -10 } , { 166047703, 10, -10 } , { 33217369, 10, -10 } , { 0, 10, 0 } , { 306433402, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 274395641, 10, -10 } , { 0, 10, 0 } , { 678362655, 10, -11 } , { 940726075, 10, -11 } , { 116631988, 10, -10 } , { 196323809, 10, -10 } , { 111163551, 10, -10 } , { 393631339, 10, -11 } , { 431792677, 10, -9 } , { 124682023, 10, -10 } , { 174022203, 10, -9 } , { 183615315, 10, -10 } , { 78588587, 10, -10 } , { 107553236, 10, -10 } , { 924735175, 10, -11 } , { 104108348, 10, -10 } , { 171974234, 10, -10 } , { 24289841, 10, -9 } , { 133971463, 10, -9 } , { 305012437, 10, -11 } , { 0, 10, 0 } , { 110027972, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 661333412, 10, -10 } , { 0, 10, 0 } , { 416404065, 10, -11 } , { 152381201, 10, -10 } , { 207744923, 10, -10 } , { 738863221, 10, -11 } , { 183736003, 10, -10 } , { 545709995, 10, -11 } , { 206304992, 10, -10 } , { 315503203, 10, -10 } , { 338019772, 10, -10 } , { 584999878, 10, -11 } , { 114498919, 10, -10 } , { 677391445, 10, -9 } , { 137877497, 10, -10 } , { 195521459, 10, -10 } , { 330948008, 10, -10 } , { 27208368, 10, -9 } , { 367747681, 10, -10 } , { 225041634, 10, -11 } , { 0, 10, 0 } , { 166124856, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 334066103, 10, -10 } , { 0, 10, 0 } , { 767531833, 10, -11 } , { 10258428, 10, -9 } , { 137432759, 10, -10 } , { 203633019, 10, -10 } , { 12894651, 10, -9 } , { 440902943, 10, -11 } , { 281132375, 10, -9 } , { 142657799, 10, -10 } , { 169666455, 10, -9 } , { 298515666, 10, -10 } , { 89242538, 10, -10 } , { 121989191, 10, -10 } , { 108572043, 10, -10 } , { 120094914, 10, -10 } , { 201455062, 10, -10 } , { 28196711, 10, -9 } , { 24908352, 10, -8 } , { 32977256, 10, -10 } , { 0, 10, 0 } , { 121690771, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 627638263, 10, -10 } , { 0, 10, 0 } , { 656818479, 10, -11 } , { 325931903, 10, -10 } , { 588863415, 10, -10 } , { 123001913, 10, -10 } , { 527867714, 10, -10 } , { 388450398, 10, -10 } , { 286788505, 10, -10 } , { 116117287, 10, -9 } , { 343759289, 10, -10 } , { 117120892, 10, -10 } , { 803917198, 10, -10 } , { 238466909, 10, -10 } , { 168544817, 10, -9 } , { 101411654, 10, -9 } , { 844782868, 10, -10 } , { 507998087, 10, -10 } , { 384401914, 10, -10 } , { 4374826, 10, -9 } , { 0, 10, 0 } , { 148306631, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 41631797, 10, -9 } , { 0, 10, 0 } , { 643911313, 10, -11 } , { 233530786, 10, -10 } , { 486010745, 10, -10 } , { 306065891, 10, -10 } , { 274452002, 10, -10 } , { 640383982, 10, -10 } , { 177404346, 10, -10 } , { 458418506, 10, -10 } , { 336877623, 10, -10 } , { 214608478, 10, -10 } , { 316151749, 10, -10 } , { 303853783, 10, -10 } , { 921550753, 10, -10 } , { 264418792, 10, -10 } , { 171924128, 10, -9 } , { 409481636, 10, -10 } , { 244021968, 10, -10 } , { 86148596, 10, -10 } , { 0, 10, 0 } , { 223117311, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 274469117, 10, -9 } , { 0, 10, 0 } , { 101669367, 10, -10 } , { 231048049, 10, -10 } , { 328729374, 10, -10 } , { 150560145, 10, -10 } , { 675522928, 10, -10 } , { 923679695, 10, -11 } , { 429238647, 10, -10 } , { 3229533, 10, -8 } , { 791861051, 10, -10 } , { 131914262, 10, -10 } , { 225894387, 10, -10 } , { 486673994, 10, -10 } , { 310565242, 10, -10 } , { 395162613, 10, -10 } , { 997364351, 10, -10 } , { 109169175, 10, -9 } , { 481008575, 10, -10 } , { 437360143, 10, -11 } , { 0, 10, 0 } , { 131713968, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 418718737, 10, -10 } , { 0, 10, 0 } , { 488177149, 10, -11 } , { 371402915, 10, -10 } , { 498159524, 10, -10 } , { 909019925, 10, -11 } , { 2132793, 10, -7 } , { 1049765, 10, -8 } , { 128048875, 10, -10 } , { 160637961, 10, -9 } , { 240297759, 10, -10 } , { 814317579, 10, -11 } , { 416294009, 10, -10 } , { 188183272, 10, -10 } , { 416295557, 10, -10 } , { 192269611, 10, -9 } , { 608479705, 10, -10 } , { 511111551, 10, -10 } , { 237238232, 10, -10 } , { 333339274, 10, -11 } , { 0, 10, 0 } , { 100504694, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 723741616, 10, -10 } , { 0, 10, 0 } , { 707159894, 10, -11 } , { 244312615, 10, -10 } , { 485717323, 10, -10 } , { 148382712, 10, -10 } , { 399153322, 10, -10 } , { 120610452, 10, -10 } , { 453045789, 10, -10 } , { 101867892, 10, -9 } , { 57671641, 10, -9 } , { 133039565, 10, -10 } , { 256264645, 10, -10 } , { 214774223, 10, -10 } , { 792377585, 10, -10 } , { 190879324, 10, -9 } , { 834113265, 10, -10 } , { 540098501, 10, -10 } , { 893587621, 10, -10 } , { 431792653, 10, -11 } , { 0, 10, 0 } , { 223677819, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 412182625, 10, -10 } , { 0, 10, 0 } , { 571497231, 10, -11 } , { 276233746, 10, -10 } , { 595379974, 10, -10 } , { 131017907, 10, -10 } , { 5778022, 10, -8 } , { 355793275, 10, -10 } , { 26079994, 10, -9 } , { 903963315, 10, -10 } , { 415257412, 10, -10 } , { 109715223, 10, -10 } , { 494107087, 10, -10 } , { 206046771, 10, -10 } , { 128639373, 10, -9 } , { 199535005, 10, -9 } , { 7787849, 10, -8 } , { 756289854, 10, -10 } , { 247991411, 10, -10 } , { 437729989, 10, -11 } , { 0, 10, 0 } , { 288708934, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 563678841, 10, -10 } , { 0, 10, 0 } , { 750492906, 10, -11 } , { 401406762, 10, -10 } , { 641869029, 10, -10 } , { 139883589, 10, -10 } , { 227229386, 10, -9 } , { 115114201, 10, -10 } , { 431544878, 10, -10 } , { 49599519, 10, -9 } , { 515954677, 10, -10 } , { 21310287, 10, -9 } , { 532266405, 10, -10 } , { 301534958, 10, -10 } , { 69286931, 10, -9 } , { 50401923, 10, -9 } , { 109367295, 10, -9 } , { 460514697, 10, -10 } , { 533081907, 10, -10 } , { 441138379, 10, -11 } , { 0, 10, 0 } , { 126211354, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 886316676, 10, -10 } , { 0, 10, 0 } , { 865214795, 10, -11 } , { 375392026, 10, -10 } , { 530926666, 10, -10 } , { 500887864, 10, -10 } , { 105957733, 10, -9 } , { 15268532, 10, -9 } , { 427885271, 10, -10 } , { 418897884, 10, -10 } , { 613111357, 10, -10 } , { 2130466, 10, -8 } , { 451381196, 10, -10 } , { 439377928, 10, -10 } , { 528422303, 10, -10 } , { 693184911, 10, -10 } , { 686487733, 10, -10 } , { 521886516, 10, -10 } , { 677294367, 10, -10 } , { 777490743, 10, -11 } , { 0, 10, 0 } , { 699500346, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 562930432, 10, -10 } , { 0, 10, 0 } , { 141464023, 10, -10 } , { 293612587, 10, -10 } , { 331632706, 10, -10 } , { 328744097, 10, -10 } , { 151873267, 10, -9 } , { 125491738, 10, -10 } , { 325487856, 10, -10 } , { 60954491, 10, -9 } , { 834815866, 10, -10 } , { 160315735, 10, -10 } , { 500402812, 10, -10 } , { 265990251, 10, -10 } , { 31345967, 10, -9 } , { 166338324, 10, -9 } , { 561633002, 10, -10 } , { 369534066, 10, -10 } , { 513097703, 10, -10 } , { 56306161, 10, -10 } , { 0, 10, 0 } , { 510946052, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 51733824, 10, -9 } , { 0, 10, 0 } , { 53951966, 10, -10 } , { 400571138, 10, -10 } , { 719126098, 10, -10 } , { 95981844, 10, -10 } , { 320461723, 10, -9 } , { 105539971, 10, -10 } , { 126987624, 10, -10 } , { 803747121, 10, -10 } , { 245110374, 10, -10 } , { 201934343, 10, -10 } , { 689809264, 10, -10 } , { 292996977, 10, -10 } , { 591611705, 10, -10 } , { 74783601, 10, -9 } , { 705362844, 10, -10 } , { 374683035, 10, -10 } , { 186241207, 10, -10 } , { 358508197, 10, -11 } , { 0, 10, 0 } , { 972802962, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 574154129, 10, -10 } , { 0, 10, 0 } , { 806541555, 10, -11 } , { 371796099, 10, -10 } , { 535269827, 10, -10 } , { 165049704, 10, -10 } , { 516584402, 10, -10 } , { 347132766, 10, -10 } , { 555347165, 10, -10 } , { 87751087, 10, -9 } , { 539828222, 10, -10 } , { 143039462, 10, -10 } , { 607352157, 10, -10 } , { 382720265, 10, -10 } , { 858641386, 10, -10 } , { 904158369, 10, -10 } , { 88358768, 10, -9 } , { 950587259, 10, -10 } , { 582810917, 10, -10 } , { 48115734, 10, -10 } , { 0, 10, 0 } , { 229329717, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 660834142, 10, -10 } , { 0, 10, 0 } , { 789208453, 10, -11 } , { 364080469, 10, -10 } , { 351283421, 10, -10 } , { 790879737, 10, -10 } , { 61296661, 10, -9 } , { 150111323, 10, -10 } , { 235757462, 10, -10 } , { 495479867, 10, -10 } , { 530800459, 10, -10 } , { 17302876, 10, -9 } , { 3596655, 10, -8 } , { 216844191, 10, -10 } , { 358667502, 10, -10 } , { 674745115, 10, -10 } , { 16197213, 10, -8 } , { 672348759, 10, -10 } , { 36690965, 10, -9 } , { 851393735, 10, -11 } , { 0, 10, 0 } , { 126523263, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 985971282, 10, -10 } , { 0, 10, 0 } , { 119970789, 10, -10 } , { 359302645, 10, -10 } , { 443742712, 10, -10 } , { 226955252, 10, -10 } , { 576054833, 10, -10 } , { 14189215, 10, -9 } , { 309687925, 10, -10 } , { 406422049, 10, -10 } , { 510606291, 10, -10 } , { 142090846, 10, -10 } , { 414745974, 10, -10 } , { 73730186, 10, -9 } , { 307932394, 10, -10 } , { 327143879, 10, -10 } , { 166664295, 10, -9 } , { 158457399, 10, -9 } , { 517524026, 10, -10 } , { 740033326, 10, -11 } , { 0, 10, 0 } , { 429257909, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 444460898, 10, -10 } , { 0, 10, 0 } , { 9185375, 10, -9 } , { 270429247, 10, -10 } , { 368011326, 10, -10 } , { 555553973, 10, -10 } , { 35591103, 10, -9 } , { 824349999, 10, -10 } , { 387446977, 10, -10 } , { 414728118, 10, -10 } , { 521415579, 10, -10 } , { 13547524, 10, -9 } , { 267342074, 10, -10 } , { 270339279, 10, -10 } , { 273514976, 10, -10 } , { 443239352, 10, -10 } , { 525164282, 10, -10 } , { 531917379, 10, -10 } , { 373143505, 10, -10 } , { 127426935, 10, -10 } , { 0, 10, 0 } , { 272380917, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 467128874, 10, -10 } , { 0, 10, 0 } , { 110573422, 10, -10 } , { 230842398, 10, -10 } , { 300737523, 10, -10 } , { 524346197, 10, -10 } , { 31161235, 10, -9 } , { 115930781, 10, -10 } , { 105690272, 10, -9 } , { 286376361, 10, -10 } , { 277178451, 10, -9 } , { 332276008, 10, -10 } , { 200626202, 10, -10 } , { 257725676, 10, -10 } , { 225329068, 10, -10 } , { 260428812, 10, -10 } , { 368935449, 10, -10 } , { 373331012, 10, -10 } , { 832701024, 10, -10 } , { 847774796, 10, -11 } , { 0, 10, 0 } , { 529655696, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 244074662, 10, -10 } , { 0, 10, 0 } , { 313790238, 10, -11 } , { 341410522, 10, -10 } , { 184839898, 10, -10 } , { 213043468, 10, -10 } , { 148265205, 10, -10 } , { 447998341, 10, -11 } , { 928535264, 10, -11 } , { 16830234, 10, -9 } , { 308875898, 10, -10 } , { 447532985, 10, -11 } , { 993080777, 10, -11 } , { 796055452, 10, -9 } , { 115228599, 10, -10 } , { 104678862, 10, -10 } , { 224852364, 10, -10 } , { 169201052, 10, -10 } , { 127420138, 10, -10 } , { 17593733, 10, -10 } , { 0, 10, 0 } , { 580661331, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 289917427, 10, -10 } , { 0, 10, 0 } , { 730306723, 10, -11 } , { 98653337, 10, -10 } , { 133768816, 10, -10 } , { 646464007, 10, -10 } , { 126316072, 10, -10 } , { 492359506, 10, -11 } , { 225721104, 10, -9 } , { 140557326, 10, -10 } , { 344045687, 10, -9 } , { 224190464, 10, -10 } , { 86181637, 10, -10 } , { 115737082, 10, -10 } , { 109232974, 10, -10 } , { 127794949, 10, -10 } , { 18762611, 10, -9 } , { 247080892, 10, -10 } , { 981598774, 10, -10 } , { 437465972, 10, -11 } , { 0, 10, 0 } , { 155709039, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 289213462, 10, -10 } , { 0, 10, 0 } , { 333495109, 10, -11 } , { 210206692, 10, -10 } , { 397566998, 10, -10 } , { 681756245, 10, -11 } , { 211797014, 10, -10 } , { 931691641, 10, -11 } , { 997082734, 10, -11 } , { 471400266, 10, -9 } , { 19755142, 10, -9 } , { 712137302, 10, -11 } , { 45332193, 10, -9 } , { 170286532, 10, -10 } , { 608593975, 10, -10 } , { 170847728, 10, -9 } , { 327407306, 10, -10 } , { 228811658, 10, -10 } , { 144868843, 10, -10 } , { 247846753, 10, -11 } , { 0, 10, 0 } , { 872650727, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 317954268, 10, -10 } , { 0, 10, 0 } , { 745612419, 10, -11 } , { 992122832, 10, -11 } , { 144272853, 10, -10 } , { 118078982, 10, -9 } , { 137456778, 10, -10 } , { 54795992, 10, -10 } , { 830504353, 10, -10 } , { 145977454, 10, -10 } , { 333816417, 10, -9 } , { 216579937, 10, -10 } , { 909348225, 10, -11 } , { 118928447, 10, -10 } , { 114709387, 10, -10 } , { 135369563, 10, -10 } , { 202216377, 10, -10 } , { 256633366, 10, -10 } , { 184915107, 10, -9 } , { 515881495, 10, -11 } , { 0, 10, 0 } , { 200339234, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 25532143, 10, -9 } , { 0, 10, 0 } , { 506513688, 10, -11 } , { 298389525, 10, -10 } , { 231457103, 10, -10 } , { 99193508, 10, -9 } , { 390534803, 10, -10 } , { 107419366, 10, -10 } , { 754069658, 10, -10 } , { 22268733, 10, -9 } , { 132138965, 10, -9 } , { 11339777, 10, -9 } , { 350257789, 10, -9 } , { 125255265, 10, -10 } , { 174331856, 10, -10 } , { 187548191, 10, -10 } , { 350222966, 10, -10 } , { 268122374, 10, -10 } , { 35892657, 10, -9 } , { 367727817, 10, -11 } , { 0, 10, 0 } , { 153039222, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 505399813, 10, -10 } , { 0, 10, 0 } , { 508305668, 10, -11 } , { 166984721, 10, -10 } , { 29616023, 10, -9 } , { 312072651, 10, -10 } , { 198426998, 10, -10 } , { 1493128, 10, -8 } , { 177399726, 10, -10 } , { 258184898, 10, -10 } , { 430906099, 10, -10 } , { 548999827, 10, -10 } , { 266412543, 10, -10 } , { 102810516, 10, -9 } , { 13174635, 10, -8 } , { 211717047, 10, -10 } , { 775891571, 10, -10 } , { 365844905, 10, -10 } , { 235223166, 10, -10 } , { 854783234, 10, -11 } , { 0, 10, 0 } , { 274957188, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 295459922, 10, -9 } , { 0, 10, 0 } , { 90913897, 10, -10 } , { 1966725, 10, -8 } , { 270235588, 10, -10 } , { 11512459, 10, -9 } , { 995451773, 10, -10 } , { 739727583, 10, -11 } , { 259464442, 10, -10 } , { 260133439, 10, -10 } , { 359886652, 10, -10 } , { 104337525, 10, -10 } , { 203368233, 10, -10 } , { 215624329, 10, -10 } , { 190755175, 10, -10 } , { 18979991, 10, -9 } , { 109461055, 10, -9 } , { 149859998, 10, -9 } , { 92864049, 10, -9 } , { 335317623, 10, -11 } , { 0, 10, 0 } , { 107554876, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 492478459, 10, -10 } , { 0, 10, 0 } , { 550242687, 10, -11 } , { 215003161, 10, -10 } , { 220951005, 10, -10 } , { 776033331, 10, -11 } , { 459631856, 10, -9 } , { 696788255, 10, -11 } , { 948015653, 10, -11 } , { 220080215, 10, -10 } , { 165034174, 10, -10 } , { 569103497, 10, -11 } , { 38446691, 10, -9 } , { 160197332, 10, -10 } , { 159470525, 10, -10 } , { 156773249, 10, -10 } , { 236626674, 10, -9 } , { 442666445, 10, -10 } , { 148089217, 10, -10 } , { 286654986, 10, -11 } , { 0, 10, 0 } , { 734534227, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 367712401, 10, -10 } , { 0, 10, 0 } , { 25933985, 10, -9 } , { 197974533, 10, -10 } , { 194759484, 10, -10 } , { 130841413, 10, -10 } , { 403378123, 10, -10 } , { 701084881, 10, -11 } , { 631058166, 10, -10 } , { 187321795, 10, -10 } , { 48790463, 10, -9 } , { 123266231, 10, -10 } , { 166684222, 10, -9 } , { 132904189, 10, -10 } , { 144110287, 10, -10 } , { 151572753, 10, -10 } , { 512992294, 10, -10 } , { 313674838, 10, -10 } , { 36911522, 10, -8 } , { 258376384, 10, -11 } , { 0, 10, 0 } , { 10460469, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 287733822, 10, -10 } , { 0, 10, 0 } , { 676264517, 10, -11 } , { 103503636, 10, -10 } , { 139019235, 10, -10 } , { 199536719, 10, -10 } , { 131055744, 10, -10 } , { 495644069, 10, -11 } , { 323881868, 10, -9 } , { 15140205, 10, -9 } , { 14955705, 10, -8 } , { 157098919, 10, -9 } , { 984983561, 10, -11 } , { 116438104, 10, -10 } , { 126885377, 10, -10 } , { 128193512, 10, -10 } , { 214277832, 10, -10 } , { 593756558, 10, -10 } , { 759576899, 10, -10 } , { 347693344, 10, -11 } , { 0, 10, 0 } , { 114311683, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 247364235, 10, -10 } , { 0, 10, 0 } , { 307011628, 10, -11 } , { 133329175, 10, -10 } , { 17685685, 10, -9 } , { 460221957, 10, -11 } , { 147753446, 10, -10 } , { 432109816, 10, -11 } , { 812307921, 10, -11 } , { 1668515, 10, -8 } , { 137476518, 10, -10 } , { 393440005, 10, -11 } , { 956471933, 10, -11 } , { 839390282, 10, -9 } , { 113456228, 10, -10 } , { 10273511, 10, -9 } , { 419394758, 10, -10 } , { 170990605, 10, -10 } , { 117627495, 10, -10 } , { 154905509, 10, -11 } , { 0, 10, 0 } , { 485466809, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 760616652, 10, -10 } , { 0, 10, 0 } , { 80083637, 10, -10 } , { 116433979, 10, -10 } , { 159104072, 10, -10 } , { 319501405, 10, -10 } , { 164829899, 10, -10 } , { 4987426, 10, -9 } , { 251586121, 10, -9 } , { 162267808, 10, -10 } , { 928206512, 10, -10 } , { 414043646, 10, -10 } , { 101647468, 10, -10 } , { 40969229, 10, -9 } , { 122520398, 10, -10 } , { 129872004, 10, -10 } , { 25007116, 10, -9 } , { 301544365, 10, -10 } , { 247675312, 10, -9 } , { 343955589, 10, -11 } , { 0, 10, 0 } , { 131646299, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 209760498, 10, -10 } , { 0, 10, 0 } , { 515464336, 10, -11 } , { 743255067, 10, -11 } , { 916828074, 10, -11 } , { 150161413, 10, -10 } , { 881632097, 10, -11 } , { 322040346, 10, -11 } , { 553227329, 10, -9 } , { 100206867, 10, -10 } , { 85324405, 10, -9 } , { 840237215, 10, -10 } , { 63547853, 10, -10 } , { 834566247, 10, -11 } , { 774725335, 10, -11 } , { 822892069, 10, -11 } , { 135883968, 10, -10 } , { 188384475, 10, -10 } , { 883336338, 10, -10 } , { 237095334, 10, -11 } , { 0, 10, 0 } , { 846884577, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 167578968, 10, -10 } , { 0, 10, 0 } , { 406019507, 10, -11 } , { 669594661, 10, -11 } , { 929309908, 10, -11 } , { 464468497, 10, -9 } , { 100208699, 10, -10 } , { 572618569, 10, -11 } , { 251575049, 10, -10 } , { 914258357, 10, -11 } , { 255368039, 10, -9 } , { 122442153, 10, -10 } , { 652974287, 10, -11 } , { 692817331, 10, -11 } , { 701077239, 10, -11 } , { 900130719, 10, -11 } , { 132135178, 10, -10 } , { 132872687, 10, -10 } , { 248530992, 10, -10 } , { 645879538, 10, -11 } , { 0, 10, 0 } , { 597925785, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 376092863, 10, -9 } , { 0, 10, 0 } , { 732795953, 10, -11 } , { 170875845, 10, -10 } , { 37729046, 10, -9 } , { 264936885, 10, -10 } , { 314430469, 10, -10 } , { 724675061, 10, -11 } , { 205360624, 10, -10 } , { 250473603, 10, -10 } , { 302568161, 10, -10 } , { 908571268, 10, -11 } , { 161473119, 10, -10 } , { 182165725, 10, -10 } , { 967466752, 10, -10 } , { 186609403, 10, -10 } , { 104568913, 10, -9 } , { 679287999, 10, -10 } , { 89507819, 10, -9 } , { 302437535, 10, -11 } , { 0, 10, 0 } , { 102474427, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 736431238, 10, -10 } , { 0, 10, 0 } , { 637685179, 10, -11 } , { 195772728, 10, -10 } , { 255284569, 10, -10 } , { 333417481, 10, -10 } , { 365352457, 10, -10 } , { 812374769, 10, -11 } , { 157472272, 10, -10 } , { 247706601, 10, -10 } , { 386827051, 10, -10 } , { 345715074, 10, -10 } , { 219668506, 10, -10 } , { 167433375, 10, -10 } , { 250765732, 10, -10 } , { 477366638, 10, -10 } , { 412865364, 10, -9 } , { 854900808, 10, -10 } , { 389801876, 10, -10 } , { 350382196, 10, -11 } , { 0, 10, 0 } , { 494768976, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 335982687, 10, -9 } , { 0, 10, 0 } , { 727686234, 10, -11 } , { 381162623, 10, -10 } , { 252010543, 10, -10 } , { 861750909, 10, -11 } , { 324020801, 10, -10 } , { 659218147, 10, -11 } , { 1601993, 10, -8 } , { 226586595, 10, -10 } , { 245071376, 10, -10 } , { 750456636, 10, -11 } , { 189922967, 10, -10 } , { 182503561, 10, -10 } , { 169790249, 10, -10 } , { 164106255, 10, -10 } , { 275834339, 10, -9 } , { 841784063, 10, -10 } , { 528216527, 10, -10 } , { 254600237, 10, -11 } , { 0, 10, 0 } , { 850303156, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 291873775, 10, -10 } , { 0, 10, 0 } , { 672426009, 10, -11 } , { 100626138, 10, -10 } , { 137086838, 10, -10 } , { 557184266, 10, -10 } , { 132249553, 10, -10 } , { 475346272, 10, -11 } , { 17849905, 10, -8 } , { 139713848, 10, -10 } , { 366041265, 10, -9 } , { 196274099, 10, -10 } , { 933935033, 10, -11 } , { 112734667, 10, -10 } , { 109374527, 10, -10 } , { 12467092, 10, -9 } , { 591855634, 10, -10 } , { 24439165, 10, -9 } , { 108365902, 10, -9 } , { 385588758, 10, -11 } , { 0, 10, 0 } , { 13483249, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 436254621, 10, -10 } , { 0, 10, 0 } , { 773445072, 10, -11 } , { 134796204, 10, -10 } , { 202354185, 10, -10 } , { 766916669, 10, -10 } , { 388530614, 10, -10 } , { 730084574, 10, -11 } , { 95790632, 10, -9 } , { 196685072, 10, -10 } , { 266546449, 10, -9 } , { 417938962, 10, -10 } , { 132418503, 10, -10 } , { 143596479, 10, -10 } , { 374825632, 10, -10 } , { 171526587, 10, -10 } , { 391498444, 10, -10 } , { 613716473, 10, -10 } , { 112522694, 10, -9 } , { 543838148, 10, -11 } , { 0, 10, 0 } , { 356624402, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 146230451, 10, -9 } , { 0, 10, 0 } , { 887259116, 10, -11 } , { 361516655, 10, -10 } , { 283803909, 10, -10 } , { 38924009, 10, -9 } , { 319262063, 10, -10 } , { 955825082, 10, -11 } , { 532001569, 10, -10 } , { 259298723, 10, -10 } , { 146564043, 10, -9 } , { 300341079, 10, -10 } , { 212277367, 10, -10 } , { 204381729, 10, -10 } , { 201504961, 10, -10 } , { 205165487, 10, -10 } , { 170634194, 10, -9 } , { 612796383, 10, -10 } , { 695316048, 10, -10 } , { 534203578, 10, -11 } , { 0, 10, 0 } , { 540881929, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 380362625, 10, -10 } , { 0, 10, 0 } , { 668304104, 10, -11 } , { 428051151, 10, -10 } , { 242077233, 10, -10 } , { 106644179, 10, -9 } , { 324848435, 10, -10 } , { 248179955, 10, -10 } , { 958705023, 10, -10 } , { 222117899, 10, -10 } , { 171856635, 10, -9 } , { 2227858, 10, -8 } , { 152293724, 10, -9 } , { 149946827, 10, -10 } , { 176432921, 10, -10 } , { 191142425, 10, -10 } , { 342699135, 10, -10 } , { 515831942, 10, -10 } , { 555636486, 10, -10 } , { 540184637, 10, -11 } , { 0, 10, 0 } , { 383396133, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 464405663, 10, -10 } , { 0, 10, 0 } , { 51527533, 10, -10 } , { 144840575, 10, -10 } , { 19696003, 10, -9 } , { 184110872, 10, -10 } , { 173065839, 10, -10 } , { 540801441, 10, -11 } , { 148727575, 10, -9 } , { 185912513, 10, -10 } , { 970744466, 10, -10 } , { 99579945, 10, -10 } , { 111359609, 10, -10 } , { 453600341, 10, -9 } , { 314469844, 10, -10 } , { 133701911, 10, -10 } , { 24651181, 10, -9 } , { 219033694, 10, -10 } , { 635616708, 10, -10 } , { 277792214, 10, -11 } , { 0, 10, 0 } , { 880331525, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 133190523, 10, -9 } , { 0, 10, 0 } , { 866960922, 10, -11 } , { 357081802, 10, -10 } , { 424088301, 10, -10 } , { 680379652, 10, -10 } , { 705900366, 10, -10 } , { 380251692, 10, -10 } , { 38820561, 10, -9 } , { 40139465, 10, -9 } , { 60898167, 10, -9 } , { 141059413, 10, -10 } , { 257732942, 10, -10 } , { 386396599, 10, -10 } , { 917518129, 10, -10 } , { 723072342, 10, -10 } , { 690962807, 10, -10 } , { 363476545, 10, -10 } , { 635535905, 10, -10 } , { 684716867, 10, -11 } , { 0, 10, 0 } , { 489214514, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 491830504, 10, -10 } , { 0, 10, 0 } , { 857505703, 10, -11 } , { 187143081, 10, -10 } , { 243579326, 10, -10 } , { 551820307, 10, -10 } , { 241454114, 10, -10 } , { 902792063, 10, -11 } , { 817071464, 10, -10 } , { 235482366, 10, -10 } , { 184524721, 10, -9 } , { 167880033, 10, -10 } , { 19106057, 10, -9 } , { 194588588, 10, -10 } , { 180186429, 10, -10 } , { 198453615, 10, -10 } , { 583509553, 10, -10 } , { 20942313, 10, -8 } , { 801255372, 10, -10 } , { 600810165, 10, -11 } , { 0, 10, 0 } , { 627077053, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 354455573, 10, -10 } , { 0, 10, 0 } , { 709581677, 10, -11 } , { 112077621, 10, -10 } , { 14905161, 10, -9 } , { 101595903, 10, -9 } , { 153475215, 10, -10 } , { 561105769, 10, -11 } , { 214999972, 10, -9 } , { 149743557, 10, -10 } , { 262281299, 10, -9 } , { 189892055, 10, -10 } , { 987064738, 10, -11 } , { 126558628, 10, -10 } , { 116330301, 10, -10 } , { 13439241, 10, -9 } , { 207762678, 10, -10 } , { 297393345, 10, -10 } , { 950929284, 10, -10 } , { 46270388, 10, -9 } , { 0, 10, 0 } , { 190799203, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 250491606, 10, -9 } , { 0, 10, 0 } , { 843179813, 10, -11 } , { 194291222, 10, -10 } , { 26158172, 10, -9 } , { 12747579, 10, -9 } , { 105171401, 10, -9 } , { 216342378, 10, -10 } , { 614724562, 10, -10 } , { 250164153, 10, -10 } , { 752824569, 10, -10 } , { 1129484, 10, -8 } , { 200433165, 10, -10 } , { 416192018, 10, -10 } , { 18674278, 10, -9 } , { 185683117, 10, -10 } , { 136408673, 10, -9 } , { 926752453, 10, -10 } , { 515767643, 10, -10 } , { 338205233, 10, -11 } , { 0, 10, 0 } , { 112383809, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 501081709, 10, -10 } , { 0, 10, 0 } , { 487069923, 10, -11 } , { 41590466, 10, -9 } , { 492689581, 10, -10 } , { 317319405, 10, -10 } , { 461282187, 10, -10 } , { 115593392, 10, -10 } , { 14997429, 10, -9 } , { 390709292, 10, -10 } , { 578515032, 10, -10 } , { 203699589, 10, -10 } , { 48170401, 10, -9 } , { 166489924, 10, -10 } , { 253144344, 10, -9 } , { 108845436, 10, -9 } , { 941065525, 10, -10 } , { 660808344, 10, -10 } , { 206445243, 10, -10 } , { 409837059, 10, -11 } , { 0, 10, 0 } , { 406401617, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 508579416, 10, -10 } , { 0, 10, 0 } , { 633795566, 10, -11 } , { 114330698, 10, -10 } , { 154487271, 10, -10 } , { 229100355, 10, -9 } , { 170159128, 10, -10 } , { 757250691, 10, -11 } , { 971205076, 10, -10 } , { 152221678, 10, -10 } , { 139918699, 10, -9 } , { 524616956, 10, -10 } , { 227285675, 10, -10 } , { 116826449, 10, -10 } , { 122081573, 10, -10 } , { 13675456, 10, -9 } , { 320348898, 10, -10 } , { 22852614, 10, -9 } , { 911269587, 10, -10 } , { 594048016, 10, -10 } , { 0, 10, 0 } , { 565477021, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 679235976, 10, -10 } , { 0, 10, 0 } , { 88851867, 10, -10 } , { 179231623, 10, -10 } , { 232104207, 10, -10 } , { 980487937, 10, -10 } , { 248548166, 10, -10 } , { 813218675, 10, -11 } , { 875576477, 10, -10 } , { 224351388, 10, -10 } , { 277363297, 10, -9 } , { 209659672, 10, -10 } , { 251606934, 10, -10 } , { 188526689, 10, -10 } , { 173054681, 10, -10 } , { 196713746, 10, -10 } , { 580982788, 10, -10 } , { 744615048, 10, -10 } , { 746115406, 10, -10 } , { 609885167, 10, -11 } , { 0, 10, 0 } , { 210663633, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 569965637, 10, -10 } , { 0, 10, 0 } , { 800343379, 10, -11 } , { 322844431, 10, -10 } , { 520226428, 10, -10 } , { 663574292, 10, -10 } , { 188822372, 10, -9 } , { 311358877, 10, -10 } , { 351472647, 10, -10 } , { 445619719, 10, -10 } , { 474367631, 10, -10 } , { 121747284, 10, -10 } , { 741451044, 10, -10 } , { 245079222, 10, -10 } , { 538076525, 10, -10 } , { 48785796, 10, -9 } , { 817256868, 10, -10 } , { 48313695, 10, -9 } , { 31628613, 10, -9 } , { 736447345, 10, -11 } , { 0, 10, 0 } , { 59141803, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 684094234, 10, -10 } , { 0, 10, 0 } , { 102434134, 10, -10 } , { 342073411, 10, -10 } , { 465270197, 10, -10 } , { 562684642, 10, -10 } , { 939359156, 10, -10 } , { 1457997, 10, -8 } , { 566950798, 10, -10 } , { 512305741, 10, -10 } , { 848935625, 10, -10 } , { 216173837, 10, -10 } , { 546008168, 10, -10 } , { 412870883, 10, -10 } , { 737361667, 10, -10 } , { 437778684, 10, -10 } , { 103548061, 10, -9 } , { 499251336, 10, -10 } , { 605532434, 10, -10 } , { 74634781, 10, -10 } , { 0, 10, 0 } , { 311252939, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 557912643, 10, -10 } , { 0, 10, 0 } , { 153168321, 10, -10 } , { 757273289, 10, -10 } , { 746418083, 10, -10 } , { 271380768, 10, -10 } , { 770494763, 10, -10 } , { 199914921, 10, -10 } , { 344402897, 10, -10 } , { 600332891, 10, -10 } , { 116390449, 10, -9 } , { 173140872, 10, -10 } , { 477438749, 10, -10 } , { 296364582, 10, -10 } , { 530536545, 10, -10 } , { 886274679, 10, -10 } , { 863171564, 10, -10 } , { 510009838, 10, -10 } , { 510431275, 10, -10 } , { 630627378, 10, -11 } , { 0, 10, 0 } , { 187694104, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 787085934, 10, -10 } , { 0, 10, 0 } , { 225325589, 10, -10 } , { 485053063, 10, -10 } , { 487021205, 10, -10 } , { 786817851, 10, -10 } , { 63693075, 10, -9 } , { 23115476, 10, -9 } , { 279343914, 10, -10 } , { 436918322, 10, -10 } , { 595788499, 10, -10 } , { 139568044, 10, -10 } , { 635901071, 10, -10 } , { 625559109, 10, -10 } , { 696345291, 10, -10 } , { 407089174, 10, -10 } , { 100834398, 10, -9 } , { 4667553, 10, -8 } , { 459921892, 10, -10 } , { 219004152, 10, -10 } , { 0, 10, 0 } , { 493891932, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 671976171, 10, -10 } , { 0, 10, 0 } , { 787742893, 10, -11 } , { 396890775, 10, -10 } , { 508095395, 10, -10 } , { 140713444, 10, -10 } , { 112128842, 10, -9 } , { 104492837, 10, -10 } , { 339479609, 10, -10 } , { 354583023, 10, -10 } , { 605415423, 10, -10 } , { 115436459, 10, -10 } , { 471909969, 10, -10 } , { 210355127, 10, -9 } , { 415354059, 10, -10 } , { 528916744, 10, -10 } , { 109319691, 10, -9 } , { 541670056, 10, -10 } , { 629824472, 10, -10 } , { 434240883, 10, -11 } , { 0, 10, 0 } , { 12714666, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 766360947, 10, -10 } , { 0, 10, 0 } , { 829447551, 10, -11 } , { 598790684, 10, -10 } , { 692105775, 10, -10 } , { 223070273, 10, -10 } , { 713308287, 10, -10 } , { 174176915, 10, -10 } , { 234574197, 10, -10 } , { 789825972, 10, -10 } , { 563630711, 10, -10 } , { 121990003, 10, -10 } , { 930966942, 10, -10 } , { 256251308, 10, -10 } , { 549420045, 10, -10 } , { 412097425, 10, -10 } , { 10165779, 10, -8 } , { 113544901, 10, -9 } , { 390434099, 10, -10 } , { 383680291, 10, -10 } , { 0, 10, 0 } , { 168928528, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 985219787, 10, -10 } , { 0, 10, 0 } , { 140053741, 10, -10 } , { 31299573, 10, -9 } , { 290773631, 10, -10 } , { 273700886, 10, -10 } , { 152915299, 10, -9 } , { 184578495, 10, -10 } , { 140783195, 10, -10 } , { 381270421, 10, -10 } , { 241531511, 10, -10 } , { 764246021, 10, -11 } , { 24349809, 10, -8 } , { 181754535, 10, -10 } , { 21199314, 10, -9 } , { 221809476, 10, -10 } , { 119495231, 10, -9 } , { 800699283, 10, -10 } , { 208839155, 10, -10 } , { 366880095, 10, -11 } , { 0, 10, 0 } , { 288391086, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 70033696, 10, -9 } , { 0, 10, 0 } , { 824200241, 10, -11 } , { 488650806, 10, -10 } , { 107607971, 10, -9 } , { 28818636, 10, -9 } , { 814804898, 10, -10 } , { 136440828, 10, -10 } , { 378189589, 10, -10 } , { 601178031, 10, -10 } , { 671987353, 10, -10 } , { 135214585, 10, -10 } , { 543327327, 10, -10 } , { 951416679, 10, -10 } , { 58531557, 10, -9 } , { 395289952, 10, -10 } , { 973419194, 10, -10 } , { 571590255, 10, -10 } , { 383221997, 10, -10 } , { 25294006, 10, -9 } , { 0, 10, 0 } , { 275095126, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 897508997, 10, -10 } , { 0, 10, 0 } , { 678012206, 10, -11 } , { 14471769, 10, -9 } , { 207251043, 10, -10 } , { 731442344, 10, -10 } , { 223500362, 10, -10 } , { 69207369, 10, -10 } , { 979169725, 10, -10 } , { 33060957, 10, -9 } , { 125274838, 10, -9 } , { 133369157, 10, -10 } , { 244934641, 10, -10 } , { 759247875, 10, -10 } , { 256122677, 10, -10 } , { 168805896, 10, -10 } , { 383289831, 10, -10 } , { 420263899, 10, -10 } , { 569953075, 10, -10 } , { 18716898, 10, -8 } , { 0, 10, 0 } , { 22485912, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 700729545, 10, -10 } , { 0, 10, 0 } , { 874550282, 10, -11 } , { 257086728, 10, -10 } , { 225218664, 10, -10 } , { 403203148, 10, -10 } , { 384983026, 10, -10 } , { 74418784, 10, -10 } , { 133012972, 10, -9 } , { 227153562, 10, -10 } , { 172026616, 10, -9 } , { 31755828, 10, -9 } , { 153078219, 10, -10 } , { 169184671, 10, -10 } , { 234714859, 10, -10 } , { 325205665, 10, -10 } , { 340882252, 10, -10 } , { 754876707, 10, -10 } , { 162470155, 10, -9 } , { 489765638, 10, -11 } , { 0, 10, 0 } , { 308830613, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 504424396, 10, -10 } , { 0, 10, 0 } , { 77372658, 10, -10 } , { 409184584, 10, -10 } , { 566092563, 10, -10 } , { 190186525, 10, -10 } , { 791607775, 10, -10 } , { 127494579, 10, -10 } , { 314725982, 10, -10 } , { 105111735, 10, -9 } , { 721904257, 10, -10 } , { 132590932, 10, -10 } , { 372931345, 10, -10 } , { 238567965, 10, -10 } , { 607094682, 10, -10 } , { 854376398, 10, -10 } , { 99322688, 10, -9 } , { 103829817, 10, -9 } , { 494108169, 10, -10 } , { 232785035, 10, -10 } , { 0, 10, 0 } , { 426935999, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 494565827, 10, -10 } , { 0, 10, 0 } , { 676856904, 10, -11 } , { 522738155, 10, -10 } , { 404810894, 10, -10 } , { 743130149, 10, -10 } , { 141407128, 10, -9 } , { 196013952, 10, -10 } , { 241613123, 10, -10 } , { 650500031, 10, -10 } , { 716628084, 10, -10 } , { 18421703, 10, -9 } , { 595334048, 10, -10 } , { 202219548, 10, -10 } , { 899013742, 10, -10 } , { 427144467, 10, -10 } , { 567158794, 10, -10 } , { 555335667, 10, -10 } , { 398117454, 10, -10 } , { 355118246, 10, -10 } , { 0, 10, 0 } , { 398415765, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 505790873, 10, -10 } , { 0, 10, 0 } , { 809071876, 10, -11 } , { 146592675, 10, -10 } , { 189723609, 10, -10 } , { 654512456, 10, -10 } , { 194919988, 10, -10 } , { 654261985, 10, -11 } , { 190872508, 10, -9 } , { 18789781, 10, -9 } , { 221515197, 10, -9 } , { 198166923, 10, -10 } , { 188202219, 10, -10 } , { 576803228, 10, -10 } , { 143375509, 10, -10 } , { 160834929, 10, -10 } , { 273459496, 10, -10 } , { 470146091, 10, -10 } , { 106015536, 10, -9 } , { 296391691, 10, -10 } , { 0, 10, 0 } , { 179939606, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 170089416, 10, -9 } , { 0, 10, 0 } , { 159833939, 10, -10 } , { 219006202, 10, -10 } , { 443607598, 10, -10 } , { 320122923, 10, -10 } , { 533387714, 10, -10 } , { 894746059, 10, -11 } , { 888692635, 10, -10 } , { 29696391, 10, -9 } , { 114308551, 10, -9 } , { 229097409, 10, -10 } , { 201114734, 10, -10 } , { 224848945, 10, -10 } , { 408445031, 10, -10 } , { 301652772, 10, -10 } , { 912410348, 10, -10 } , { 500483114, 10, -10 } , { 113450643, 10, -9 } , { 4707379, 10, -9 } , { 0, 10, 0 } , { 156523395, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 500835302, 10, -10 } , { 0, 10, 0 } , { 605480884, 10, -11 } , { 934504313, 10, -10 } , { 5570461, 10, -8 } , { 678596013, 10, -10 } , { 274755885, 10, -10 } , { 149320025, 10, -10 } , { 301157646, 10, -10 } , { 507432352, 10, -10 } , { 638371214, 10, -10 } , { 150140401, 10, -10 } , { 103126815, 10, -9 } , { 406126165, 10, -10 } , { 413280188, 10, -10 } , { 334064352, 10, -10 } , { 726264731, 10, -10 } , { 546868354, 10, -10 } , { 323257718, 10, -10 } , { 75891721, 10, -10 } , { 0, 10, 0 } , { 143356192, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 109590036, 10, -9 } , { 0, 10, 0 } , { 588253425, 10, -11 } , { 252535878, 10, -10 } , { 194531023, 10, -10 } , { 561513567, 10, -10 } , { 448234969, 10, -10 } , { 217351957, 10, -10 } , { 389863593, 10, -10 } , { 183573559, 10, -10 } , { 115638542, 10, -9 } , { 229235375, 10, -10 } , { 220983772, 10, -10 } , { 131672338, 10, -10 } , { 148083674, 10, -10 } , { 155712321, 10, -10 } , { 608658689, 10, -10 } , { 546956324, 10, -10 } , { 408809297, 10, -10 } , { 861056626, 10, -11 } , { 0, 10, 0 } , { 279672252, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 60110593, 10, -9 } , { 0, 10, 0 } , { 788702236, 10, -11 } , { 125415635, 10, -10 } , { 19219017, 10, -9 } , { 12082476, 10, -8 } , { 179122526, 10, -10 } , { 733540818, 10, -11 } , { 923120058, 10, -10 } , { 275533877, 10, -10 } , { 301920038, 10, -9 } , { 296734561, 10, -10 } , { 117662822, 10, -10 } , { 141104787, 10, -10 } , { 269618322, 10, -10 } , { 175580998, 10, -10 } , { 265181511, 10, -10 } , { 3811833, 10, -8 } , { 871953912, 10, -10 } , { 62522016, 10, -10 } , { 0, 10, 0 } , { 33952123, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 783628076, 10, -10 } , { 0, 10, 0 } , { 188989773, 10, -10 } , { 671308228, 10, -10 } , { 43363908, 10, -9 } , { 289661133, 10, -10 } , { 533785068, 10, -10 } , { 114184207, 10, -10 } , { 321490447, 10, -10 } , { 40950666, 10, -9 } , { 506091284, 10, -10 } , { 10747873, 10, -9 } , { 706917586, 10, -10 } , { 422533078, 10, -10 } , { 955629341, 10, -10 } , { 396898742, 10, -10 } , { 23330393, 10, -8 } , { 651052703, 10, -10 } , { 278296759, 10, -10 } , { 383411438, 10, -11 } , { 0, 10, 0 } , { 132540831, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 29057592, 10, -9 } , { 0, 10, 0 } , { 41881421, 10, -10 } , { 159542285, 10, -10 } , { 213546736, 10, -10 } , { 575186448, 10, -10 } , { 415445764, 10, -10 } , { 436634816, 10, -10 } , { 148855173, 10, -10 } , { 209914109, 10, -10 } , { 569849809, 10, -10 } , { 309905274, 10, -10 } , { 274326799, 10, -10 } , { 520603216, 10, -9 } , { 151924402, 10, -10 } , { 307196126, 10, -10 } , { 27104116, 10, -9 } , { 268819851, 10, -10 } , { 187216784, 10, -10 } , { 355861681, 10, -11 } , { 0, 10, 0 } , { 449845494, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 935686877, 10, -10 } , { 0, 10, 0 } , { 770567019, 10, -11 } , { 489170331, 10, -10 } , { 36057588, 10, -9 } , { 412706495, 10, -10 } , { 166031817, 10, -9 } , { 204254959, 10, -10 } , { 197126322, 10, -10 } , { 33392146, 10, -9 } , { 329068979, 10, -10 } , { 100225594, 10, -10 } , { 103103547, 10, -9 } , { 973812714, 10, -10 } , { 373542804, 10, -10 } , { 313471097, 10, -10 } , { 903444369, 10, -10 } , { 104151383, 10, -9 } , { 340222724, 10, -10 } , { 443135844, 10, -11 } , { 0, 10, 0 } , { 153980184, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 9516375, 10, -8 } , { 0, 10, 0 } , { 871207913, 10, -11 } , { 487555818, 10, -10 } , { 599853125, 10, -10 } , { 151289934, 10, -10 } , { 924320107, 10, -10 } , { 395534123, 10, -10 } , { 456509443, 10, -10 } , { 775427491, 10, -10 } , { 51272209, 10, -9 } , { 136523451, 10, -10 } , { 374143063, 10, -10 } , { 393588781, 10, -10 } , { 695265415, 10, -10 } , { 595344472, 10, -10 } , { 112695726, 10, -9 } , { 806524815, 10, -10 } , { 521511679, 10, -10 } , { 444569509, 10, -11 } , { 0, 10, 0 } , { 163916688, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 491689425, 10, -10 } , { 0, 10, 0 } , { 706344366, 10, -11 } , { 19018089, 10, -9 } , { 235469558, 10, -10 } , { 530694799, 10, -10 } , { 237465731, 10, -10 } , { 772763071, 10, -11 } , { 97181791, 10, -9 } , { 223749458, 10, -10 } , { 842944202, 10, -10 } , { 132260089, 10, -10 } , { 444839273, 10, -10 } , { 218988217, 10, -9 } , { 168787777, 10, -10 } , { 169531761, 10, -10 } , { 934809099, 10, -10 } , { 323284706, 10, -10 } , { 941270553, 10, -10 } , { 742321906, 10, -10 } , { 0, 10, 0 } , { 249716522, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 71152131, 10, -9 } , { 0, 10, 0 } , { 799285832, 10, -11 } , { 134335103, 10, -10 } , { 204739687, 10, -10 } , { 110687298, 10, -9 } , { 202836927, 10, -10 } , { 114730764, 10, -10 } , { 869354867, 10, -10 } , { 20171091, 10, -9 } , { 159474738, 10, -9 } , { 400488418, 10, -10 } , { 132020626, 10, -10 } , { 268252022, 10, -10 } , { 221558298, 10, -10 } , { 176428415, 10, -10 } , { 30109307, 10, -9 } , { 386552812, 10, -10 } , { 110363106, 10, -9 } , { 183431516, 10, -10 } , { 0, 10, 0 } , { 126377352, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 480857065, 10, -10 } , { 0, 10, 0 } , { 562579054, 10, -11 } , { 131288096, 10, -10 } , { 184310708, 10, -10 } , { 102807627, 10, -9 } , { 109321832, 10, -9 } , { 196419967, 10, -10 } , { 692431881, 10, -10 } , { 319251466, 10, -10 } , { 433306833, 10, -10 } , { 183743393, 10, -10 } , { 196349668, 10, -10 } , { 124607925, 10, -10 } , { 147867844, 10, -10 } , { 163972676, 10, -10 } , { 27175447, 10, -9 } , { 348716742, 10, -10 } , { 501222098, 10, -10 } , { 741191537, 10, -10 } , { 0, 10, 0 } , { 252005064, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 560381467, 10, -10 } , { 0, 10, 0 } , { 642332059, 10, -11 } , { 145358002, 10, -9 } , { 472351243, 10, -10 } , { 101846963, 10, -10 } , { 612908209, 10, -10 } , { 234749224, 10, -10 } , { 133185201, 10, -10 } , { 463246277, 10, -10 } , { 222462424, 10, -10 } , { 782822158, 10, -11 } , { 255736499, 10, -9 } , { 217278192, 10, -10 } , { 294869513, 10, -10 } , { 403238711, 10, -10 } , { 161398341, 10, -9 } , { 435790168, 10, -10 } , { 194176268, 10, -10 } , { 292647989, 10, -11 } , { 0, 10, 0 } , { 114031584, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 136229247, 10, -9 } , { 0, 10, 0 } , { 248670085, 10, -10 } , { 202497396, 10, -10 } , { 273632602, 10, -10 } , { 824449074, 10, -11 } , { 480672838, 10, -10 } , { 697682382, 10, -11 } , { 145882471, 10, -10 } , { 260311416, 10, -10 } , { 245494007, 10, -10 } , { 710894442, 10, -11 } , { 159704513, 10, -10 } , { 557030933, 10, -9 } , { 180520154, 10, -10 } , { 167571154, 10, -10 } , { 588555187, 10, -10 } , { 391978106, 10, -10 } , { 228082396, 10, -10 } , { 273312959, 10, -11 } , { 0, 10, 0 } , { 838134055, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 562580236, 10, -10 } , { 0, 10, 0 } , { 556005289, 10, -11 } , { 971883363, 10, -10 } , { 16553628, 10, -8 } , { 253724712, 10, -10 } , { 316367965, 10, -10 } , { 143022392, 10, -10 } , { 187260829, 10, -10 } , { 134340247, 10, -9 } , { 330298351, 10, -10 } , { 104229769, 10, -10 } , { 458881912, 10, -10 } , { 245041509, 10, -10 } , { 460525558, 10, -10 } , { 15730517, 10, -8 } , { 65665076, 10, -9 } , { 35728984, 10, -9 } , { 377735792, 10, -10 } , { 405661556, 10, -11 } , { 0, 10, 0 } , { 146426802, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 56254212, 10, -9 } , { 0, 10, 0 } , { 582439, 10, -8 } , { 24322843, 10, -8 } , { 155376007, 10, -9 } , { 103446998, 10, -10 } , { 341785283, 10, -10 } , { 238379721, 10, -10 } , { 156321091, 10, -10 } , { 629480599, 10, -10 } , { 267916992, 10, -10 } , { 899148713, 10, -11 } , { 41012435, 10, -9 } , { 253342519, 10, -10 } , { 806494439, 10, -10 } , { 463643925, 10, -10 } , { 853051564, 10, -10 } , { 736300728, 10, -10 } , { 229533128, 10, -10 } , { 343133576, 10, -11 } , { 0, 10, 0 } , { 120671764, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 479467818, 10, -10 } , { 0, 10, 0 } , { 100033415, 10, -10 } , { 174403753, 10, -10 } , { 273863931, 10, -10 } , { 245813503, 10, -10 } , { 211446385, 10, -10 } , { 800781349, 10, -11 } , { 13667358, 10, -8 } , { 274739025, 10, -10 } , { 14985226, 10, -8 } , { 570196002, 10, -10 } , { 170934385, 10, -10 } , { 18749468, 10, -9 } , { 46147312, 10, -9 } , { 329497383, 10, -10 } , { 373854954, 10, -10 } , { 815774557, 10, -10 } , { 180477963, 10, -9 } , { 471847133, 10, -11 } , { 0, 10, 0 } , { 163517944, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 459942482, 10, -9 } , { 0, 10, 0 } , { 104638787, 10, -10 } , { 212846605, 10, -10 } , { 317148714, 10, -10 } , { 114387393, 10, -10 } , { 48866886, 10, -9 } , { 852803317, 10, -11 } , { 19762792, 10, -9 } , { 298288228, 10, -10 } , { 330697497, 10, -10 } , { 10111737, 10, -9 } , { 205931078, 10, -10 } , { 253063499, 10, -10 } , { 21907889, 10, -9 } , { 212420418, 10, -10 } , { 156709745, 10, -9 } , { 416247081, 10, -10 } , { 359278648, 10, -10 } , { 352044044, 10, -11 } , { 0, 10, 0 } , { 113102598, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 453425367, 10, -10 } , { 0, 10, 0 } , { 559612711, 10, -11 } , { 129476362, 10, -9 } , { 157554455, 10, -9 } , { 115302726, 10, -10 } , { 33794224, 10, -9 } , { 144767677, 10, -10 } , { 210699199, 10, -10 } , { 16370499, 10, -8 } , { 456484229, 10, -10 } , { 108251433, 10, -10 } , { 638306278, 10, -10 } , { 26051178, 10, -9 } , { 668481371, 10, -10 } , { 771003253, 10, -10 } , { 733671842, 10, -10 } , { 418458708, 10, -10 } , { 24774792, 10, -9 } , { 373144746, 10, -11 } , { 0, 10, 0 } , { 127478204, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 352641768, 10, -10 } , { 0, 10, 0 } , { 473395974, 10, -11 } , { 451563226, 10, -10 } , { 115815706, 10, -9 } , { 898033891, 10, -11 } , { 331968986, 10, -10 } , { 168023472, 10, -10 } , { 121442499, 10, -10 } , { 648091157, 10, -10 } , { 236608989, 10, -10 } , { 943496434, 10, -11 } , { 252625931, 10, -9 } , { 201137788, 10, -10 } , { 194885956, 10, -9 } , { 7602439, 10, -8 } , { 509841939, 10, -10 } , { 338477012, 10, -10 } , { 180208275, 10, -10 } , { 33903801, 10, -10 } , { 0, 10, 0 } , { 11601413, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 336850167, 10, -10 } , { 0, 10, 0 } , { 834984234, 10, -11 } , { 116347474, 10, -10 } , { 172622778, 10, -10 } , { 104863061, 10, -9 } , { 163916017, 10, -10 } , { 709986854, 10, -11 } , { 91121094, 10, -9 } , { 182706551, 10, -10 } , { 353370315, 10, -9 } , { 878164167, 10, -10 } , { 110961483, 10, -10 } , { 136957332, 10, -10 } , { 155592805, 10, -10 } , { 173461013, 10, -10 } , { 234224623, 10, -10 } , { 278079036, 10, -10 } , { 608412278, 10, -10 } , { 652126107, 10, -11 } , { 0, 10, 0 } , { 232786557, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 498797866, 10, -10 } , { 0, 10, 0 } , { 532662737, 10, -11 } , { 303721833, 10, -10 } , { 654018275, 10, -10 } , { 123230737, 10, -10 } , { 634360504, 10, -10 } , { 256332306, 10, -10 } , { 314130805, 10, -10 } , { 294854335, 10, -9 } , { 323633143, 10, -10 } , { 110329234, 10, -10 } , { 47199233, 10, -9 } , { 237273939, 10, -10 } , { 940262894, 10, -10 } , { 882783027, 10, -10 } , { 465471209, 10, -10 } , { 327091869, 10, -10 } , { 333370969, 10, -10 } , { 409867176, 10, -11 } , { 0, 10, 0 } , { 248255009, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 426527295, 10, -10 } , { 0, 10, 0 } , { 504828712, 10, -11 } , { 877861561, 10, -10 } , { 103369678, 10, -9 } , { 98400955, 10, -10 } , { 327849051, 10, -10 } , { 137505967, 10, -10 } , { 141049335, 10, -10 } , { 265499168, 10, -9 } , { 267089464, 10, -10 } , { 944793578, 10, -11 } , { 784513918, 10, -10 } , { 245799467, 10, -10 } , { 54152399, 10, -9 } , { 115159226, 10, -9 } , { 703353893, 10, -10 } , { 352508278, 10, -10 } , { 205138445, 10, -10 } , { 340479354, 10, -11 } , { 0, 10, 0 } , { 120608907, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 89158293, 10, -9 } , { 0, 10, 0 } , { 793935098, 10, -11 } , { 292815566, 10, -10 } , { 496348838, 10, -10 } , { 320482177, 10, -10 } , { 470384157, 10, -10 } , { 149879759, 10, -10 } , { 265318772, 10, -10 } , { 420308795, 10, -10 } , { 757232715, 10, -10 } , { 692466663, 10, -10 } , { 585710069, 10, -10 } , { 226712473, 10, -10 } , { 154932244, 10, -9 } , { 338066638, 10, -10 } , { 13159674, 10, -8 } , { 417419553, 10, -10 } , { 344214742, 10, -10 } , { 61299565, 10, -10 } , { 0, 10, 0 } , { 506840071, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 619512453, 10, -10 } , { 0, 10, 0 } , { 575760418, 10, -11 } , { 455832669, 10, -10 } , { 452471333, 10, -10 } , { 940333263, 10, -11 } , { 491538657, 10, -9 } , { 188870005, 10, -10 } , { 108607514, 10, -10 } , { 289077578, 10, -10 } , { 198272273, 10, -10 } , { 706493025, 10, -11 } , { 472430393, 10, -10 } , { 187467081, 10, -10 } , { 545074646, 10, -10 } , { 207586676, 10, -10 } , { 729330963, 10, -10 } , { 277266781, 10, -10 } , { 166503905, 10, -10 } , { 379856465, 10, -11 } , { 0, 10, 0 } , { 935354912, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 132173817, 10, -9 } , { 0, 10, 0 } , { 101164895, 10, -10 } , { 23721452, 10, -9 } , { 435962091, 10, -10 } , { 215521593, 10, -10 } , { 121307367, 10, -9 } , { 99250212, 10, -10 } , { 633136039, 10, -10 } , { 396180858, 10, -10 } , { 118056408, 10, -9 } , { 786207804, 10, -10 } , { 234439376, 10, -10 } , { 231565709, 10, -10 } , { 265237957, 10, -10 } , { 350051463, 10, -10 } , { 870512457, 10, -10 } , { 458911987, 10, -10 } , { 682872187, 10, -10 } , { 510490698, 10, -11 } , { 0, 10, 0 } , { 152624729, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 796578517, 10, -10 } , { 0, 10, 0 } , { 891504666, 10, -11 } , { 237850702, 10, -10 } , { 515174853, 10, -10 } , { 133071382, 10, -9 } , { 300884054, 10, -10 } , { 139152427, 10, -10 } , { 415776583, 10, -10 } , { 320853709, 10, -10 } , { 689426113, 10, -10 } , { 163628341, 10, -10 } , { 22927759, 10, -9 } , { 209821143, 10, -10 } , { 651604859, 10, -10 } , { 259822622, 10, -10 } , { 924698942, 10, -10 } , { 658759036, 10, -10 } , { 103201988, 10, -9 } , { 911762979, 10, -11 } , { 0, 10, 0 } , { 820983252, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 329989386, 10, -10 } , { 0, 10, 0 } , { 813063161, 10, -11 } , { 116671814, 10, -10 } , { 142627711, 10, -10 } , { 235287072, 10, -10 } , { 137265286, 10, -10 } , { 49618091, 10, -10 } , { 412830738, 10, -9 } , { 155356283, 10, -10 } , { 11641287, 10, -8 } , { 564612174, 10, -10 } , { 987730942, 10, -11 } , { 130996172, 10, -10 } , { 118316454, 10, -10 } , { 127188268, 10, -10 } , { 212112975, 10, -10 } , { 29659707, 10, -9 } , { 118030121, 10, -9 } , { 36794212, 10, -10 } , { 0, 10, 0 } , { 132766978, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 633755849, 10, -10 } , { 0, 10, 0 } , { 526522469, 10, -11 } , { 238779739, 10, -10 } , { 485241445, 10, -10 } , { 988929924, 10, -11 } , { 258044378, 10, -10 } , { 886957975, 10, -11 } , { 153505769, 10, -10 } , { 69582759, 10, -9 } , { 32276217, 10, -9 } , { 233204112, 10, -10 } , { 357286757, 10, -10 } , { 524161361, 10, -9 } , { 370867377, 10, -10 } , { 447653748, 10, -10 } , { 451587316, 10, -10 } , { 286530343, 10, -10 } , { 217376377, 10, -10 } , { 312701312, 10, -11 } , { 0, 10, 0 } , { 180167782, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 634950597, 10, -10 } , { 0, 10, 0 } , { 576811117, 10, -11 } , { 40948123, 10, -9 } , { 236493195, 10, -10 } , { 983703044, 10, -11 } , { 547250341, 10, -9 } , { 806226181, 10, -11 } , { 122073492, 10, -10 } , { 240673195, 10, -10 } , { 411036737, 10, -10 } , { 723172056, 10, -11 } , { 567777232, 10, -10 } , { 17229413, 10, -9 } , { 1699609, 10, -8 } , { 16989614, 10, -9 } , { 633996758, 10, -10 } , { 258597512, 10, -10 } , { 173574912, 10, -10 } , { 366454254, 10, -11 } , { 0, 10, 0 } , { 826184002, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 446110155, 10, -10 } , { 0, 10, 0 } , { 930689747, 10, -11 } , { 188955383, 10, -10 } , { 26650192, 10, -9 } , { 101818937, 10, -9 } , { 234628481, 10, -10 } , { 437050198, 10, -10 } , { 155959121, 10, -9 } , { 432602632, 10, -10 } , { 951758931, 10, -10 } , { 319775229, 10, -10 } , { 190916813, 10, -10 } , { 190386542, 10, -10 } , { 208535777, 10, -10 } , { 358423145, 10, -10 } , { 4244424, 10, -8 } , { 475893109, 10, -10 } , { 136531535, 10, -9 } , { 651806569, 10, -11 } , { 0, 10, 0 } , { 288773346, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 402495463, 10, -10 } , { 0, 10, 0 } , { 355021417, 10, -11 } , { 1740439, 10, -8 } , { 339893453, 10, -10 } , { 999248233, 10, -11 } , { 194200016, 10, -10 } , { 115099321, 10, -10 } , { 10774056, 10, -9 } , { 947432376, 10, -10 } , { 244166135, 10, -10 } , { 791893043, 10, -11 } , { 213109015, 10, -10 } , { 145249708, 10, -10 } , { 329188612, 10, -10 } , { 562650852, 10, -9 } , { 314428467, 10, -10 } , { 22586983, 10, -9 } , { 159985565, 10, -10 } , { 337414822, 10, -11 } , { 0, 10, 0 } , { 30402675, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 639417278, 10, -10 } , { 0, 10, 0 } , { 651842218, 10, -11 } , { 362562412, 10, -10 } , { 69310141, 10, -9 } , { 109027649, 10, -10 } , { 317854018, 10, -10 } , { 106397607, 10, -10 } , { 169454658, 10, -10 } , { 715448119, 10, -10 } , { 30143295, 10, -9 } , { 906166826, 10, -11 } , { 344763191, 10, -10 } , { 411650197, 10, -9 } , { 502209474, 10, -10 } , { 656866496, 10, -10 } , { 725481559, 10, -10 } , { 456380647, 10, -10 } , { 245838984, 10, -10 } , { 383606033, 10, -11 } , { 0, 10, 0 } , { 114912675, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 675568272, 10, -10 } , { 0, 10, 0 } , { 732155053, 10, -11 } , { 764583795, 10, -10 } , { 48933922, 10, -9 } , { 121645422, 10, -10 } , { 388166104, 10, -9 } , { 108347846, 10, -10 } , { 153903493, 10, -10 } , { 317357609, 10, -10 } , { 26811706, 10, -9 } , { 842808073, 10, -11 } , { 750329481, 10, -10 } , { 235037816, 10, -10 } , { 238508977, 10, -10 } , { 233494927, 10, -10 } , { 908408828, 10, -10 } , { 489900933, 10, -10 } , { 224141678, 10, -10 } , { 453221022, 10, -11 } , { 0, 10, 0 } , { 111891809, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 54419974, 10, -9 } , { 0, 10, 0 } , { 731847209, 10, -11 } , { 379193751, 10, -10 } , { 103596747, 10, -9 } , { 139868859, 10, -10 } , { 682011584, 10, -10 } , { 145241076, 10, -10 } , { 237970094, 10, -10 } , { 156056625, 10, -9 } , { 456706345, 10, -10 } , { 128068098, 10, -10 } , { 382875221, 10, -10 } , { 819024421, 10, -10 } , { 833005001, 10, -10 } , { 978256502, 10, -10 } , { 817264777, 10, -10 } , { 452853998, 10, -10 } , { 473911567, 10, -10 } , { 488005358, 10, -11 } , { 0, 10, 0 } , { 150668047, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 101015904, 10, -9 } , { 0, 10, 0 } , { 827676807, 10, -11 } , { 738504245, 10, -10 } , { 923531919, 10, -10 } , { 1510221, 10, -8 } , { 726533601, 10, -10 } , { 140537362, 10, -10 } , { 367195445, 10, -10 } , { 613736483, 10, -10 } , { 483313954, 10, -10 } , { 347223868, 10, -10 } , { 534709093, 10, -10 } , { 105179944, 10, -9 } , { 735388448, 10, -10 } , { 603516286, 10, -10 } , { 870648698, 10, -10 } , { 430620662, 10, -10 } , { 371667063, 10, -10 } , { 466215159, 10, -11 } , { 0, 10, 0 } , { 144494214, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 464617825, 10, -10 } , { 0, 10, 0 } , { 877799726, 10, -11 } , { 201733248, 10, -10 } , { 259478762, 10, -10 } , { 25741826, 10, -9 } , { 241315031, 10, -10 } , { 751196232, 10, -11 } , { 650633229, 10, -10 } , { 254928552, 10, -10 } , { 516840166, 10, -10 } , { 387282712, 10, -10 } , { 230441962, 10, -10 } , { 20029912, 10, -9 } , { 193445635, 10, -10 } , { 198728648, 10, -10 } , { 735992464, 10, -10 } , { 372164094, 10, -9 } , { 113612272, 10, -9 } , { 399802135, 10, -11 } , { 0, 10, 0 } , { 215112688, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 12358072, 10, -8 } , { 0, 10, 0 } , { 743164023, 10, -11 } , { 431217323, 10, -10 } , { 207860361, 10, -9 } , { 133732115, 10, -10 } , { 36005288, 10, -9 } , { 284013242, 10, -10 } , { 386013116, 10, -10 } , { 791656799, 10, -10 } , { 370736774, 10, -10 } , { 115861264, 10, -10 } , { 34317587, 10, -9 } , { 264870901, 10, -10 } , { 717020208, 10, -10 } , { 523683173, 10, -10 } , { 991926941, 10, -10 } , { 596947924, 10, -10 } , { 380112108, 10, -10 } , { 425320649, 10, -11 } , { 0, 10, 0 } , { 191747045, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 667411204, 10, -10 } , { 0, 10, 0 } , { 660947351, 10, -11 } , { 75710136, 10, -9 } , { 101887943, 10, -9 } , { 204140758, 10, -10 } , { 593896607, 10, -10 } , { 313237958, 10, -10 } , { 271027524, 10, -10 } , { 157103198, 10, -9 } , { 427631922, 10, -10 } , { 122973386, 10, -10 } , { 33326555, 10, -9 } , { 255438591, 10, -10 } , { 601491988, 10, -10 } , { 111675713, 10, -9 } , { 620250448, 10, -10 } , { 467599523, 10, -10 } , { 549123548, 10, -10 } , { 427640215, 10, -11 } , { 0, 10, 0 } , { 161696209, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 33292574, 10, -9 } , { 0, 10, 0 } , { 639626643, 10, -11 } , { 184827558, 10, -10 } , { 645201551, 10, -10 } , { 84206791, 10, -9 } , { 203324463, 10, -10 } , { 410500332, 10, -10 } , { 579346098, 10, -10 } , { 265706777, 10, -10 } , { 497049464, 10, -10 } , { 124567492, 10, -10 } , { 173068214, 10, -10 } , { 159066889, 10, -10 } , { 215893228, 10, -10 } , { 516467441, 10, -10 } , { 298620628, 10, -10 } , { 262854868, 10, -10 } , { 81302133, 10, -9 } , { 125358613, 10, -10 } , { 0, 10, 0 } , { 308334045, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 340443744, 10, -10 } , { 0, 10, 0 } , { 847881865, 10, -11 } , { 116369929, 10, -10 } , { 163654085, 10, -10 } , { 499771957, 10, -10 } , { 15319688, 10, -9 } , { 591665838, 10, -11 } , { 1514963, 10, -7 } , { 171313283, 10, -10 } , { 38618659, 10, -8 } , { 38157175, 10, -9 } , { 105331457, 10, -10 } , { 136726062, 10, -10 } , { 137607715, 10, -10 } , { 158800545, 10, -10 } , { 314334194, 10, -10 } , { 286603908, 10, -10 } , { 803365262, 10, -10 } , { 509323507, 10, -11 } , { 0, 10, 0 } , { 168928713, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 67472008, 10, -9 } , { 0, 10, 0 } , { 66130248, 10, -10 } , { 781541653, 10, -10 } , { 106723829, 10, -9 } , { 111381922, 10, -10 } , { 454817891, 10, -10 } , { 152801604, 10, -10 } , { 167964618, 10, -10 } , { 142424053, 10, -9 } , { 301103403, 10, -10 } , { 106090713, 10, -10 } , { 113943874, 10, -9 } , { 260990032, 10, -10 } , { 802762208, 10, -10 } , { 737366097, 10, -10 } , { 890271225, 10, -10 } , { 759751663, 10, -10 } , { 2550525, 10, -8 } , { 382439098, 10, -11 } , { 0, 10, 0 } , { 131228715, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 494902123, 10, -10 } , { 0, 10, 0 } , { 560153655, 10, -11 } , { 381944956, 10, -10 } , { 557443858, 10, -10 } , { 257885603, 10, -10 } , { 698637192, 10, -10 } , { 150650105, 10, -10 } , { 179916164, 10, -10 } , { 157417415, 10, -9 } , { 337826218, 10, -10 } , { 106715575, 10, -10 } , { 278043356, 10, -10 } , { 210482544, 10, -10 } , { 529426392, 10, -10 } , { 207175211, 10, -9 } , { 507161761, 10, -10 } , { 556640825, 10, -10 } , { 323500068, 10, -10 } , { 617822907, 10, -11 } , { 0, 10, 0 } , { 783770519, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 400119588, 10, -10 } , { 0, 10, 0 } , { 845748697, 10, -11 } , { 138757456, 10, -10 } , { 200435548, 10, -10 } , { 488363248, 10, -10 } , { 178999363, 10, -10 } , { 121012204, 10, -10 } , { 138425801, 10, -9 } , { 204935223, 10, -10 } , { 104388034, 10, -9 } , { 183287682, 10, -10 } , { 140160734, 10, -10 } , { 154060345, 10, -10 } , { 157425042, 10, -10 } , { 229266121, 10, -10 } , { 305959128, 10, -10 } , { 676643114, 10, -10 } , { 188257777, 10, -9 } , { 854713942, 10, -11 } , { 0, 10, 0 } , { 156270882, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 435061358, 10, -10 } , { 0, 10, 0 } , { 855804798, 10, -11 } , { 119611609, 10, -10 } , { 16157666, 10, -9 } , { 261583075, 10, -10 } , { 155863278, 10, -10 } , { 569557961, 10, -11 } , { 26056838, 10, -8 } , { 173936604, 10, -10 } , { 238783592, 10, -9 } , { 753998803, 10, -10 } , { 106248897, 10, -10 } , { 139869946, 10, -10 } , { 140374552, 10, -10 } , { 151002568, 10, -10 } , { 23419196, 10, -9 } , { 3016624, 10, -8 } , { 102206782, 10, -9 } , { 435112384, 10, -11 } , { 0, 10, 0 } , { 144078064, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 446197771, 10, -10 } , { 0, 10, 0 } , { 685411011, 10, -11 } , { 436446557, 10, -10 } , { 356257133, 10, -10 } , { 199202915, 10, -10 } , { 38173639, 10, -9 } , { 269643008, 10, -10 } , { 290005248, 10, -10 } , { 49133914, 10, -9 } , { 536797424, 10, -10 } , { 21007669, 10, -9 } , { 113921258, 10, -9 } , { 244893338, 10, -9 } , { 253501871, 10, -10 } , { 261582797, 10, -10 } , { 835013316, 10, -10 } , { 782247752, 10, -10 } , { 342464805, 10, -10 } , { 533299288, 10, -11 } , { 0, 10, 0 } , { 655441055, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 503009036, 10, -10 } , { 0, 10, 0 } , { 584666544, 10, -11 } , { 240274446, 10, -10 } , { 406715284, 10, -10 } , { 150737437, 10, -10 } , { 260869955, 10, -10 } , { 132919059, 10, -10 } , { 326747259, 10, -10 } , { 821159837, 10, -10 } , { 349556615, 10, -10 } , { 108079644, 10, -10 } , { 422917542, 10, -10 } , { 811090272, 10, -10 } , { 629142224, 10, -10 } , { 266703508, 10, -9 } , { 470821585, 10, -10 } , { 110169845, 10, -9 } , { 282413248, 10, -10 } , { 468238884, 10, -11 } , { 0, 10, 0 } , { 440924797, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 133131887, 10, -9 } , { 0, 10, 0 } , { 103202822, 10, -10 } , { 150727304, 10, -10 } , { 21971692, 10, -9 } , { 409658489, 10, -10 } , { 260895448, 10, -10 } , { 697625684, 10, -11 } , { 124732517, 10, -9 } , { 221068513, 10, -10 } , { 23918394, 10, -8 } , { 246801835, 10, -10 } , { 136176289, 10, -10 } , { 186434085, 10, -10 } , { 168373032, 10, -10 } , { 184615253, 10, -10 } , { 381161154, 10, -10 } , { 45173742, 10, -9 } , { 123563607, 10, -9 } , { 504022704, 10, -11 } , { 0, 10, 0 } , { 173424012, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 175563748, 10, -9 } , { 0, 10, 0 } , { 963367693, 10, -11 } , { 254770856, 10, -10 } , { 315224652, 10, -10 } , { 131358091, 10, -10 } , { 521769643, 10, -10 } , { 899345116, 10, -11 } , { 303737935, 10, -10 } , { 303886769, 10, -10 } , { 633276719, 10, -10 } , { 121583447, 10, -10 } , { 579052761, 10, -10 } , { 237864273, 10, -10 } , { 226147155, 10, -10 } , { 229323795, 10, -10 } , { 104673204, 10, -9 } , { 281718206, 10, -9 } , { 400221093, 10, -10 } , { 379167663, 10, -11 } , { 0, 10, 0 } , { 122053448, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 102599249, 10, -9 } , { 0, 10, 0 } , { 881525461, 10, -11 } , { 136265594, 10, -10 } , { 198516728, 10, -10 } , { 186702654, 10, -9 } , { 238146344, 10, -10 } , { 806665943, 10, -11 } , { 665429111, 10, -10 } , { 193930247, 10, -10 } , { 160069155, 10, -9 } , { 234356256, 10, -10 } , { 128279141, 10, -10 } , { 158944393, 10, -10 } , { 148158492, 10, -10 } , { 168785666, 10, -10 } , { 330446771, 10, -10 } , { 364074471, 10, -10 } , { 127195326, 10, -9 } , { 33349052, 10, -9 } , { 0, 10, 0 } , { 339507015, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 440393015, 10, -10 } , { 0, 10, 0 } , { 895316324, 10, -11 } , { 145063658, 10, -10 } , { 201478438, 10, -10 } , { 135814793, 10, -9 } , { 203460497, 10, -10 } , { 78886449, 10, -10 } , { 10432399, 10, -8 } , { 200630628, 10, -10 } , { 177097472, 10, -9 } , { 360479594, 10, -10 } , { 13619281, 10, -9 } , { 476546796, 10, -10 } , { 156783511, 10, -10 } , { 175116758, 10, -10 } , { 383466867, 10, -10 } , { 44221352, 10, -9 } , { 124499443, 10, -9 } , { 359506593, 10, -10 } , { 0, 10, 0 } , { 307754124, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 502084946, 10, -10 } , { 0, 10, 0 } , { 509524518, 10, -11 } , { 208020997, 10, -10 } , { 194560553, 10, -10 } , { 791829163, 10, -11 } , { 645137055, 10, -9 } , { 666167553, 10, -11 } , { 878534549, 10, -11 } , { 209579158, 10, -10 } , { 157876633, 10, -10 } , { 546102974, 10, -11 } , { 236625291, 10, -10 } , { 153899574, 10, -10 } , { 145090173, 10, -10 } , { 144629305, 10, -10 } , { 904768869, 10, -10 } , { 233114311, 10, -10 } , { 135660914, 10, -10 } , { 325883275, 10, -11 } , { 0, 10, 0 } , { 695911891, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 200664177, 10, -9 } , { 0, 10, 0 } , { 88610363, 10, -10 } , { 26289662, 10, -9 } , { 32196175, 10, -9 } , { 10805005, 10, -9 } , { 211225909, 10, -9 } , { 915763852, 10, -11 } , { 154857352, 10, -10 } , { 305046147, 10, -10 } , { 264042218, 10, -10 } , { 866609035, 10, -11 } , { 284862375, 10, -10 } , { 236261889, 10, -10 } , { 225569263, 10, -10 } , { 218648448, 10, -10 } , { 26621877, 10, -8 } , { 45295706, 10, -9 } , { 261538137, 10, -10 } , { 357396914, 10, -11 } , { 0, 10, 0 } , { 106726788, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 145485943, 10, -9 } , { 0, 10, 0 } , { 162446051, 10, -10 } , { 182755519, 10, -10 } , { 258086715, 10, -10 } , { 473782424, 10, -10 } , { 504974503, 10, -10 } , { 818947174, 10, -11 } , { 983230998, 10, -10 } , { 257340409, 10, -10 } , { 194912805, 10, -9 } , { 293403206, 10, -10 } , { 169685589, 10, -10 } , { 51115137, 10, -9 } , { 194757326, 10, -10 } , { 206241542, 10, -10 } , { 59051652, 10, -9 } , { 455868215, 10, -10 } , { 803570624, 10, -10 } , { 547830328, 10, -11 } , { 0, 10, 0 } , { 186604024, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 34427866, 10, -9 } , { 0, 10, 0 } , { 509481138, 10, -10 } , { 133110177, 10, -10 } , { 183763566, 10, -10 } , { 221129487, 10, -9 } , { 189695962, 10, -10 } , { 124460146, 10, -10 } , { 681100254, 10, -10 } , { 18165551, 10, -9 } , { 963924059, 10, -10 } , { 225263726, 10, -10 } , { 139807479, 10, -10 } , { 137130833, 10, -10 } , { 14143175, 10, -9 } , { 163059771, 10, -10 } , { 347448586, 10, -10 } , { 613481972, 10, -10 } , { 7370224, 10, -8 } , { 108898224, 10, -10 } , { 0, 10, 0 } , { 14182971, 10, -8 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 378738645, 10, -10 } , { 0, 10, 0 } , { 915103653, 10, -11 } , { 117903863, 10, -10 } , { 170146776, 10, -10 } , { 28109302, 10, -9 } , { 155701178, 10, -10 } , { 573577291, 10, -11 } , { 139357991, 10, -9 } , { 177016215, 10, -10 } , { 345632627, 10, -9 } , { 365200633, 10, -10 } , { 105408359, 10, -10 } , { 144556191, 10, -10 } , { 141536732, 10, -10 } , { 161802307, 10, -10 } , { 235515853, 10, -10 } , { 313757106, 10, -10 } , { 154050666, 10, -9 } , { 470920991, 10, -11 } , { 0, 10, 0 } , { 154167303, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 205251157, 10, -9 } , { 0, 10, 0 } , { 896378365, 10, -11 } , { 241665372, 10, -10 } , { 288900344, 10, -10 } , { 302898696, 10, -10 } , { 290058157, 10, -9 } , { 884332549, 10, -11 } , { 325805086, 10, -10 } , { 288707099, 10, -10 } , { 340287893, 10, -10 } , { 101171712, 10, -10 } , { 256592036, 10, -10 } , { 230186464, 10, -10 } , { 206858164, 10, -10 } , { 20606356, 10, -9 } , { 105538193, 10, -9 } , { 665158049, 10, -10 } , { 328540547, 10, -10 } , { 438833448, 10, -11 } , { 0, 10, 0 } , { 130047398, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 133989191, 10, -9 } , { 0, 10, 0 } , { 10418721, 10, -9 } , { 161844381, 10, -10 } , { 234523362, 10, -10 } , { 923019708, 10, -10 } , { 361266907, 10, -10 } , { 804256444, 10, -11 } , { 886877367, 10, -10 } , { 232659075, 10, -10 } , { 194533855, 10, -9 } , { 233196772, 10, -10 } , { 15087379, 10, -9 } , { 194510196, 10, -10 } , { 175527261, 10, -10 } , { 193859298, 10, -10 } , { 418678349, 10, -10 } , { 506963755, 10, -10 } , { 117704206, 10, -9 } , { 636579305, 10, -11 } , { 0, 10, 0 } , { 245185901, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 365896003, 10, -10 } , { 0, 10, 0 } , { 896888356, 10, -11 } , { 119580265, 10, -10 } , { 159774073, 10, -10 } , { 268123299, 10, -10 } , { 149031387, 10, -10 } , { 537551728, 10, -11 } , { 239541538, 10, -9 } , { 168170863, 10, -10 } , { 269044351, 10, -9 } , { 257797304, 10, -10 } , { 102914367, 10, -10 } , { 141619603, 10, -10 } , { 129120915, 10, -10 } , { 147534888, 10, -10 } , { 227926768, 10, -10 } , { 313331268, 10, -10 } , { 147581679, 10, -9 } , { 432255393, 10, -11 } , { 0, 10, 0 } , { 148220639, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 299638054, 10, -9 } , { 0, 10, 0 } , { 751752729, 10, -10 } , { 223098572, 10, -10 } , { 312914894, 10, -10 } , { 1295922, 10, -8 } , { 446064267, 10, -10 } , { 868305974, 10, -11 } , { 351136401, 10, -10 } , { 29647722, 10, -9 } , { 396182672, 10, -10 } , { 114139633, 10, -10 } , { 226203041, 10, -10 } , { 248468153, 10, -10 } , { 220022215, 10, -10 } , { 215550592, 10, -10 } , { 161084586, 10, -9 } , { 752569776, 10, -10 } , { 571237983, 10, -10 } , { 382835407, 10, -11 } , { 0, 10, 0 } , { 121798133, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 7531428, 10, -8 } , { 0, 10, 0 } , { 10424355, 10, -9 } , { 155597893, 10, -10 } , { 214943315, 10, -10 } , { 342189343, 10, -10 } , { 432528084, 10, -10 } , { 673747717, 10, -11 } , { 135011525, 10, -9 } , { 217913289, 10, -10 } , { 179446427, 10, -9 } , { 313554644, 10, -10 } , { 146767517, 10, -10 } , { 182038315, 10, -10 } , { 166503887, 10, -10 } , { 181115286, 10, -10 } , { 357941887, 10, -10 } , { 618649579, 10, -10 } , { 194345112, 10, -9 } , { 477040785, 10, -11 } , { 0, 10, 0 } , { 170830749, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 779754187, 10, -10 } , { 0, 10, 0 } , { 100800507, 10, -10 } , { 155672513, 10, -10 } , { 209193531, 10, -10 } , { 422752051, 10, -10 } , { 71492891, 10, -9 } , { 708062479, 10, -11 } , { 143990221, 10, -9 } , { 217344648, 10, -10 } , { 202195154, 10, -9 } , { 415151633, 10, -10 } , { 145267349, 10, -10 } , { 177665267, 10, -10 } , { 167954319, 10, -10 } , { 182231377, 10, -10 } , { 337034028, 10, -10 } , { 360039832, 10, -10 } , { 137859312, 10, -9 } , { 524425378, 10, -11 } , { 0, 10, 0 } , { 180135767, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 194386925, 10, -9 } , { 0, 10, 0 } , { 675594674, 10, -11 } , { 207061379, 10, -10 } , { 287247603, 10, -10 } , { 861397362, 10, -11 } , { 319827064, 10, -10 } , { 72942949, 10, -10 } , { 15065738, 10, -9 } , { 270728224, 10, -10 } , { 253620914, 10, -10 } , { 748556931, 10, -11 } , { 167209337, 10, -10 } , { 498745357, 10, -9 } , { 189816204, 10, -10 } , { 176870804, 10, -10 } , { 868646774, 10, -10 } , { 316259966, 10, -10 } , { 244295783, 10, -10 } , { 278238773, 10, -11 } , { 0, 10, 0 } , { 881542719, 10, -11 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 576809889, 10, -10 } , { 0, 10, 0 } , { 793677668, 10, -11 } , { 155493596, 10, -9 } , { 570770648, 10, -10 } , { 599038993, 10, -10 } , { 369895459, 10, -10 } , { 141602743, 10, -10 } , { 444434311, 10, -10 } , { 342840845, 10, -10 } , { 626455728, 10, -10 } , { 240068081, 10, -10 } , { 998889999, 10, -10 } , { 230846118, 10, -10 } , { 279616785, 10, -10 } , { 262435365, 10, -10 } , { 909504185, 10, -10 } , { 764512186, 10, -10 } , { 424715386, 10, -10 } , { 172307064, 10, -10 } , { 0, 10, 0 } , { 454205512, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 427342761, 10, -10 } , { 0, 10, 0 } , { 880594859, 10, -11 } , { 134145756, 10, -10 } , { 186472017, 10, -10 } , { 133665336, 10, -9 } , { 188481036, 10, -10 } , { 784768683, 10, -11 } , { 149245212, 10, -9 } , { 19511124, 10, -9 } , { 20264351, 10, -8 } , { 837888349, 10, -10 } , { 125826852, 10, -10 } , { 151377208, 10, -10 } , { 160568408, 10, -10 } , { 175580504, 10, -10 } , { 266377614, 10, -10 } , { 309409014, 10, -10 } , { 90946517, 10, -9 } , { 712898624, 10, -11 } , { 0, 10, 0 } , { 27965938, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 691466612, 10, -10 } , { 0, 10, 0 } , { 102564379, 10, -10 } , { 153529962, 10, -10 } , { 227696588, 10, -10 } , { 547982995, 10, -10 } , { 223080251, 10, -10 } , { 777905076, 10, -11 } , { 106918701, 10, -9 } , { 251140216, 10, -10 } , { 235002996, 10, -9 } , { 474990904, 10, -10 } , { 14746425, 10, -9 } , { 180391406, 10, -10 } , { 189251494, 10, -10 } , { 36846651, 10, -9 } , { 345793211, 10, -10 } , { 516558998, 10, -10 } , { 135630533, 10, -9 } , { 580025196, 10, -11 } , { 0, 10, 0 } , { 20570262, 10, -9 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 692030134, 10, -10 } , { 0, 10, 0 } , { 789790153, 10, -11 } , { 391853281, 10, -10 } , { 10740184, 10, -8 } , { 383417495, 10, -10 } , { 231060635, 10, -9 } , { 116319741, 10, -10 } , { 358366619, 10, -10 } , { 360401515, 10, -10 } , { 71005069, 10, -9 } , { 203911596, 10, -10 } , { 287814116, 10, -10 } , { 228811847, 10, -10 } , { 44997154, 10, -9 } , { 262451869, 10, -10 } , { 829499932, 10, -10 } , { 419631724, 10, -10 } , { 634035178, 10, -10 } , { 548710918, 10, -11 } , { 0, 10, 0 } , { 236434127, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 250484066, 10, -9 } , { 0, 10, 0 } , { 101567397, 10, -10 } , { 336093334, 10, -10 } , { 413926269, 10, -10 } , { 499496721, 10, -10 } , { 448052935, 10, -10 } , { 120563198, 10, -10 } , { 276682197, 10, -10 } , { 568802795, 10, -10 } , { 694375352, 10, -10 } , { 142138613, 10, -10 } , { 451198751, 10, -10 } , { 259157841, 10, -10 } , { 665143468, 10, -10 } , { 30112052, 10, -9 } , { 749318419, 10, -10 } , { 742937998, 10, -10 } , { 466035791, 10, -10 } , { 564012253, 10, -11 } , { 0, 10, 0 } , { 334130431, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 49763193, 10, -9 } , { 0, 10, 0 } , { 100521213, 10, -10 } , { 144940084, 10, -10 } , { 202652473, 10, -10 } , { 314243883, 10, -10 } , { 198746562, 10, -10 } , { 75375228, 10, -10 } , { 176413994, 10, -9 } , { 209671347, 10, -10 } , { 205176295, 10, -9 } , { 551833452, 10, -10 } , { 130751131, 10, -10 } , { 170983665, 10, -10 } , { 169779837, 10, -10 } , { 183037487, 10, -10 } , { 287272293, 10, -10 } , { 357946515, 10, -10 } , { 142487681, 10, -9 } , { 322892354, 10, -10 } , { 0, 10, 0 } , { 309659031, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 552057147, 10, -10 } , { 0, 10, 0 } , { 640358765, 10, -11 } , { 840814826, 10, -10 } , { 398842876, 10, -10 } , { 113358289, 10, -10 } , { 386530703, 10, -9 } , { 230267981, 10, -10 } , { 133328747, 10, -10 } , { 415962743, 10, -10 } , { 23790003, 10, -9 } , { 821997491, 10, -11 } , { 106217542, 10, -9 } , { 22020376, 10, -9 } , { 466897864, 10, -10 } , { 263494367, 10, -10 } , { 543349144, 10, -10 } , { 319792265, 10, -10 } , { 192708719, 10, -10 } , { 430024744, 10, -11 } , { 0, 10, 0 } , { 114961691, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 571474729, 10, -10 } , { 0, 10, 0 } , { 124858836, 10, -10 } , { 182647338, 10, -10 } , { 248937234, 10, -10 } , { 29919864, 10, -9 } , { 239559384, 10, -10 } , { 762497216, 10, -11 } , { 149618198, 10, -9 } , { 245964803, 10, -10 } , { 155489128, 10, -9 } , { 281402789, 10, -10 } , { 159780681, 10, -10 } , { 218967719, 10, -10 } , { 187023633, 10, -10 } , { 208419881, 10, -10 } , { 351038384, 10, -10 } , { 464719172, 10, -10 } , { 223098719, 10, -9 } , { 542482148, 10, -11 } , { 0, 10, 0 } , { 195355515, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 726595248, 10, -10 } , { 0, 10, 0 } , { 742304868, 10, -11 } , { 314639743, 10, -10 } , { 506268244, 10, -10 } , { 125936823, 10, -10 } , { 365750734, 10, -10 } , { 130423437, 10, -10 } , { 198586921, 10, -10 } , { 675956533, 10, -10 } , { 36581224, 10, -9 } , { 112691748, 10, -10 } , { 266841789, 10, -10 } , { 41407322, 10, -8 } , { 664434392, 10, -10 } , { 947045795, 10, -10 } , { 536725292, 10, -10 } , { 385587257, 10, -10 } , { 290906322, 10, -10 } , { 459113237, 10, -11 } , { 0, 10, 0 } , { 137798607, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 367059742, 10, -10 } , { 0, 10, 0 } , { 71768412, 10, -10 } , { 284116161, 10, -10 } , { 315598564, 10, -10 } , { 240642075, 10, -9 } , { 306150486, 10, -10 } , { 179739563, 10, -10 } , { 331656268, 10, -10 } , { 599438781, 10, -10 } , { 683615963, 10, -10 } , { 163710597, 10, -10 } , { 911025421, 10, -10 } , { 175856056, 10, -10 } , { 236247247, 10, -10 } , { 305379173, 10, -10 } , { 415740809, 10, -10 } , { 322247622, 10, -10 } , { 359930937, 10, -10 } , { 135586338, 10, -10 } , { 0, 10, 0 } , { 1003281, 10, -7 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 452237831, 10, -10 } , { 0, 10, 0 } , { 118277096, 10, -10 } , { 151606937, 10, -10 } , { 2190649, 10, -8 } , { 410170897, 10, -10 } , { 198878133, 10, -10 } , { 776888604, 10, -11 } , { 112882516, 10, -9 } , { 231302027, 10, -10 } , { 330483969, 10, -9 } , { 40588069, 10, -9 } , { 134083658, 10, -10 } , { 18537867, 10, -9 } , { 186899652, 10, -10 } , { 22088258, 10, -9 } , { 292994754, 10, -10 } , { 380219255, 10, -10 } , { 933853353, 10, -10 } , { 68264763, 10, -10 } , { 0, 10, 0 } , { 208689164, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 481121339, 10, -10 } , { 0, 10, 0 } , { 591678373, 10, -11 } , { 331477542, 10, -10 } , { 706766732, 10, -10 } , { 136226568, 10, -10 } , { 331207861, 10, -10 } , { 20457819, 10, -9 } , { 177320457, 10, -10 } , { 107339605, 10, -9 } , { 408750748, 10, -10 } , { 145165748, 10, -10 } , { 381734657, 10, -10 } , { 257348378, 10, -10 } , { 112627103, 10, -9 } , { 302416226, 10, -9 } , { 552336855, 10, -10 } , { 392439666, 10, -10 } , { 264889191, 10, -10 } , { 534877679, 10, -11 } , { 0, 10, 0 } , { 174575927, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 471021698, 10, -10 } , { 0, 10, 0 } , { 122597719, 10, -10 } , { 160823261, 10, -10 } , { 222620352, 10, -10 } , { 412387035, 10, -10 } , { 204601584, 10, -10 } , { 78586271, 10, -10 } , { 129641174, 10, -9 } , { 236482048, 10, -10 } , { 284537785, 10, -9 } , { 402823826, 10, -10 } , { 139792429, 10, -10 } , { 192683208, 10, -10 } , { 187393607, 10, -10 } , { 219499311, 10, -10 } , { 304398201, 10, -10 } , { 403231276, 10, -10 } , { 106861144, 10, -9 } , { 675065982, 10, -11 } , { 0, 10, 0 } , { 212883567, 10, -10 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } , { 0, 10, 0 } } } } , params { pseudocount 0 , rpsdbparams { matrixName "BLOSUM62" , gapOpen 11 , gapExtend 1 } } } hmmer-3.1b2/easel/demotic/examples/example-single.sto0000664361611702660230000033227612473612604022301 0ustar wheelerteddy# STOCKHOLM 1.0 #=GF ID SecY #=GF AC PF00344.13 #=GF DE eubacterial secY protein #=GF PI secY; #=GF AU Finn RD #=GF SE Prosite #=GF GA 20.10 20.10; #=GF TC 20.10 21.30; #=GF NC 19.80 19.80; #=GF BM hmmbuild HMM.ann SEED.ann #=GF SM hmmsearch -Z 9421015 -E 1000 HMM pfamseq #=GF TP Family #=GF DR INTERPRO; IPR002208; #=GF DR PROSITE; PDOC00612; #=GF DR PRINTS; PR00303; #=GF DR TC; 3.A.5; #=GF DR SCOP; 1rh5; fa; #=GF SQ 158 #=GS A9B431_HERA2/73-422 AC A9B431.1 #=GS A8CRX1_9CHLR/78-422 AC A8CRX1.1 #=GS A2Y4E5_ORYSI/132-498 AC A2Y4E5.1 #=GS Q7UZW2_PROMP/80-422 AC Q7UZW2.1 #=GS Q7NKT4_GLOVI/79-416 AC Q7NKT4.1 #=GS SECY_GUITH/68-404 AC P28527.2 #=GS SECY_CYACA/62-394 AC P46249.2 #=GS Q85FU6_CYAME/42-325 AC Q85FU6.1 #=GS A0T0J6_PHATR/72-407 AC A0T0J6.1 #=GS SECY_CYAPA/109-459 AC P25014.2 #=GS Q4G351_EMIHU/63-407 AC Q4G351.1 #=GS SECY_PAVLU/66-404 AC P28540.2 #=GS Q6B8X0_GRATL/62-395 AC Q6B8X0.1 #=GS SECY_ANTSP/62-390 AC Q37143.1 #=GS A4RW47_OSTLU/65-398 AC A4RW47.1 #=GS A7PFA4_VITVI/131-465 AC A7PFA4.1 #=GS A7HM32_FERNB/75-404 AC A7HM32.1 #=GS A3CK84_STRSV/69-416 AC A3CK84.1 #=GS Q5FM71_LACAC/68-415 AC Q5FM71.1 #=GS Q03ZM6_LEUMM/68-416 AC Q03ZM6.1 #=GS SECY_STAA8/69-413 AC O08387.2 #=GS Q4MG72_BACCE/68-415 AC Q4MG72.1 #=GS Q6F1X5_MESFL/92-454 AC Q6F1X5.1 #=GS Q6KI36_MYCMO/87-436 AC Q6KI36.1 #=GS Q4A5I3_MYCS5/83-437 AC Q4A5I3.1 #=GS Q98Q01_MYCPU/90-438 AC Q98Q01.1 #=GS Q4AAF9_MYCHJ/85-434 AC Q4AAF9.1 #=GS Q9PQP1_UREPA/76-434 AC Q9PQP1.1 #=GS SECY_MYCGE/81-430 AC P47416.1 #=GS Q8EUD2_MYCPE/81-433 AC Q8EUD2.1 #=GS Q7X4E3_9MOLU/69-399 AC Q7X4E3.1 #=GS Q5Q069_ASTYP/59-398 AC Q5Q069.1 #=GS O21257_RECAM/57-372 AC O21257.1 #=GS Q74NB9_NANEQ/69-457 AC Q74NB9.1 #=GS Q2EMT2_METVO/30-379 AC Q2EMT2.1 #=GS A5UL65_METS3/72-433 AC A5UL65.1 #=GS SECY_METTH/73-436 AC O26134.1 #=GS SECY_PYRAB/72-448 AC Q9V1V8.1 #=GS Q8TZA9_METKA/75-435 AC Q8TZA9.1 #=GS Q9HIT0_THEAC/82-514 AC Q9HIT0.1 #=GS Q2QAQ7_9EURY/161-583 AC Q2QAQ7.1 #=GS Q0W1W5_UNCMA/75-487 AC Q0W1W5.1 #=GS SECY_ARCFU/73-471 AC O28377.1 #=GS Q8TRS4_METAC/72-470 AC Q8TRS4.1 #=GS A0B9U7_METTP/75-515 AC A0B9U7.1 #=GS SECY_HALMA/73-468 AC P28542.2 #=GS Q2FSG8_METHJ/73-458 AC Q2FSG8.1 #=GS A2SPM5_METLZ/73-458 AC A2SPM5.1 #=GS A0RUE4_CENSY/79-457 AC A0RUE4.1 #=GS A8ME75_CALMQ/77-461 AC A8ME75.1 #=GS A3MUZ2_PYRCJ/70-435 AC A3MUZ2.1 #=GS SECY_SULSO/73-449 AC Q9UX84.1 #=GS SECY_SULAC/74-443 AC P49978.1 #=GS A2BME2_HYPBU/73-444 AC A2BME2.1 #=GS SECY_AERPE/73-434 AC Q9YDD0.2 #=GS A1RWR3_THEPD/75-456 AC A1RWR3.1 #=GS SC61A_SCHPO/76-459 AC P79088.1 #=GS A7E5Q2_SCLS1/76-459 AC A7E5Q2.1 #=GS Q5KC69_CRYNE/75-459 AC Q5KC69.1 #=GS SC61A_ASHGO/75-460 AC Q752H7.1 #=GS Q59MJ6_CANAL/76-459 AC Q59MJ6.1 #=GS A7SJW4_NEMVE/75-458 AC A7SJW4.1 #=GS A0CFY2_PARTE/73-456 AC A0CFY2.1 #=GS Q22MG2_TETTH/151-538 AC Q22MG2.2 #=GS A0CU87_PARTE/77-460 AC A0CU87.1 #=GS Q7RLN0_PLAYO/121-506 AC Q7RLN0.1 #=GS Q4QGX4_LEIMA/77-467 AC Q4QGX4.1 #=GS A5JEK2_NOSBO/75-457 AC A5JEK2.1 #=GS A2DH65_TRIVA/75-462 AC A2DH65.1 #=GS Q2QM98_ORYSJ/88-448 AC Q2QM98.2 #=GS Q6AV46_ORYSJ/86-471 AC Q6AV46.1 #=GS Q6C854_YARLI/70-454 AC Q6C854.2 #=GS SSH1_YEAST/78-465 AC P38353.1 #=GS Q6BT20_DEBHA/78-475 AC Q6BT20.2 #=GS A5DE75_PICGU/20-414 AC A5DE75.1 #=GS A3GFV9_PICST/78-476 AC A3GFV9.2 #=GS A5DWJ5_LODEL/34-436 AC A5DWJ5.1 #=GS Q5A2C9_CANAL/5-404 AC Q5A2C9.1 #=GS Q74L41_LACJO/64-372 AC Q74L41.1 #=GS B3XPQ8_LACRE/65-377 AC B3XPQ8.1 #=GS A1C3L4_STRPA/70-403 AC A1C3L4.1 #=GS Q3DVD6_STRAG/65-395 AC Q3DVD6.1 #=GS A5LN99_STRPN/64-389 AC A5LN99.1 #=GS A3CM55_STRSV/64-391 AC A3CM55.1 #=GS Q03HZ8_PEDPA/65-396 AC Q03HZ8.1 #=GS A5IW80_STAA9/64-384 AC A5IW80.1 #=GS Q4L9N9_STAHJ/61-383 AC Q4L9N9.1 #=GS Q5HKR3_STAEQ/61-380 AC Q5HKR3.1 #=GS Q9RSK8_DEIRA/68-413 AC Q9RSK8.1 #=GS Q5SHQ8_THET8/71-413 AC Q5SHQ8.1 #=GS Q5SHQ8_THET8/71-413 DR PDB; 2zjs Y; 71-413; #=GS Q5SHQ8_THET8/71-413 DR PDB; 2zqp Y; 71-413; #=GS SECY_CORGL/73-424 AC P38376.1 #=GS A8LB12_FRASN/74-414 AC A8LB12.1 #=GS Q83NQ1_TROW8/73-424 AC Q83NQ1.1 #=GS Q8G3Z9_BIFLO/74-421 AC Q8G3Z9.1 #=GS A7B9M4_9ACTO/72-414 AC A7B9M4.1 #=GS SECY_CHLTR/73-433 AC P28539.3 #=GS Q1AU49_RUBXD/70-408 AC Q1AU49.1 #=GS Q8RIH6_FUSNN/75-411 AC Q8RIH6.1 #=GS A6DRC9_9BACT/79-428 AC A6DRC9.1 #=GS C0ACZ0_9BACT/94-454 AC C0ACZ0.1 #=GS Q1Q157_9BACT/75-434 AC Q1Q157.1 #=GS A6CGP8_9PLAN/77-435 AC A6CGP8.1 #=GS B4S5A8_PROA2/73-417 AC B4S5A8.1 #=GS Q2S3P5_SALRD/75-414 AC Q2S3P5.1 #=GS A1ZGT4_9SPHI/72-404 AC A1ZGT4.1 #=GS A6EHP4_9SPHI/71-408 AC A6EHP4.1 #=GS Q11QD2_CYTH3/72-411 AC Q11QD2.1 #=GS Q1VTY0_9FLAO/73-421 AC Q1VTY0.1 #=GS Q1NYZ7_9FLAO/72-422 AC Q1NYZ7.1 #=GS A5KHP6_CAMJE/62-402 AC A5KHP6.1 #=GS A4EA78_9ACTN/52-389 AC A4EA78.1 #=GS Q2GEC0_NEOSM/73-411 AC Q2GEC0.1 #=GS Q3YRM8_EHRCJ/72-412 AC Q3YRM8.1 #=GS Q5GSW3_WOLTR/77-416 AC Q5GSW3.1 #=GS Q0ANS0_MARMM/83-421 AC Q0ANS0.1 #=GS A7IPQ0_XANP2/80-418 AC A7IPQ0.1 #=GS SECY_RICCN/70-411 AC Q92GY6.1 #=GS Q2G8W0_NOVAD/80-430 AC Q2G8W0.1 #=GS A6E0Q6_9RHOB/73-411 AC A6E0Q6.1 #=GS Q1UZE8_9RICK/67-404 AC Q1UZE8.1 #=GS Q3R245_XYLFA/76-424 AC Q3R245.1 #=GS A4NK90_HAEIN/76-416 AC A4NK90.1 #=GS Q057C4_BUCCC/64-407 AC Q057C4.1 #=GS Q8D1Z2_WIGBR/82-424 AC Q8D1Z2.1 #=GS Q6F7T2_ACIAD/83-426 AC Q6F7T2.1 #=GS Q6Q8W8_9GAMM/67-407 AC Q6Q8W8.1 #=GS A9BRX1_DELAS/74-413 AC A9BRX1.1 #=GS Q7DDS8_NEIMB/73-410 AC Q7DDS8.1 #=GS Q5NHU8_FRATT/74-416 AC Q5NHU8.1 #=GS Q7WZR8_9GAMM/64-388 AC Q7WZR8.1 #=GS A5EX98_DICNV/69-412 AC A5EX98.1 #=GS Q6MJ32_BDEBA/70-415 AC Q6MJ32.1 #=GS B5EFS0_GEOBB/71-411 AC B5EFS0.1 #=GS A3EVQ1_9BACT/75-412 AC A3EVQ1.1 #=GS Q1MPP6_LAWIP/71-412 AC Q1MPP6.1 #=GS SECY_AQUAE/71-412 AC O66491.1 #=GS SECY_AQUAE/71-412 DR PDB; 3dl8 H; 71-412; #=GS SECY_AQUAE/71-412 DR PDB; 3dl8 G; 71-412; #=GS Q01WB2_SOLUE/74-438 AC Q01WB2.1 #=GS Q08ZH8_STIAU/26-370 AC Q08ZH8.1 #=GS A6GCG0_9DELT/70-411 AC A6GCG0.1 #=GS Q04PV8_LEPBJ/72-436 AC Q04PV8.1 #=GS SECY_BORBU/72-409 AC O51451.1 #=GS Q73PL2_TREDE/73-413 AC Q73PL2.1 #=GS Q67JW3_SYMTH/69-405 AC Q67JW3.1 #=GS A7FQ38_CLOB1/69-409 AC A7FQ38.1 #=GS A6LPT1_CLOB8/69-416 AC A6LPT1.1 #=GS Q0SQG4_CLOPS/69-409 AC Q0SQG4.1 #=GS A9KJH4_CLOPH/71-425 AC A9KJH4.1 #=GS A7VH89_9CLOT/71-420 AC A7VH89.1 #=GS A6BIS2_9FIRM/71-421 AC A6BIS2.1 #=GS A7VR33_9CLOT/71-423 AC A7VR33.1 #=GS A6NXF0_9BACE/71-437 AC A6NXF0.1 #=GS Q250L2_DESHY/70-413 AC Q250L2.1 #=GS Q8R7X3_THETN/69-402 AC Q8R7X3.1 #=GS A4XLR1_CALS8/69-419 AC A4XLR1.1 #=GS A3DJJ2_CLOTH/71-411 AC A3DJJ2.1 #=GS A8MLG0_ALKOO/69-408 AC A8MLG0.1 #=GS Q18CH6_CLOD6/69-406 AC Q18CH6.1 #=GS B8D0S8_HALOH/72-406 AC B8D0S8.1 A9B431_HERA2/73-422 SVAAMGVYPYITAQIIMQLL................IP.LIPALEQLSKE.GEQGRNRIQRYQYFLTVPLAYLQGYGQIKSLINSGINLFGTLNFS...........ITENFFQTFSILT..IMVSGSMFLVWMGELIDE.RGI.G.NGLSMIIFGGIV.TALPSM................................VY...QAITTSS......................SGNNVIG.........G........ILLLIVTLAT.VVGIVLITEGQRRIPVQYAKR...VRG.......NKVYGGQ..SSH.LPLKVNMAGMIPLIFAQSI..LIFPS...TVASYF.....WNPNGSG.........................FFN...............GVANFFVNSF......................................GPNGLAF.TLAMFVLVLLFTYFYA.LVMFNQQNLPEMLQRNGGFIPGIRPG.RNTEVYLTKVLNRITLIGAV.GLAVVAALP..YFVQQIT........................GL..........QIG.FSS.TGLL....IVVG....VAVD...TMR A8CRX1_9CHLR/78-422 SVAALGVYPYITASIIMTLL................TP.VIPKLTALSKE.GEAGRNKINTITHWLAVPTAALAGYSQLLLLQREGAVAQTE...................PLAAVAIVL..SIVAGTMFMVWLGEQITS.YGI.G.NGISLIIFAGIV.AGLPDM................................IG...RGLMASD.........................QFAG.........L........AVYAFMALLT.TVLIVIFTEAHRRIPVQYAQT...VIRS....GKMYRRGG...ESH.IPLRVNSAGMIPLIFASAL..VMLPG...LVASYFMAGSTEDP...............................................NFWNTIYNIFNSGASM.................................PGGLVY.WGLYFFMTIIFAFFYT.MVTFEQQDIPGTLQRQGGFVPGIRPG.KMTDQYLSGVIGRITWAGAL.FLGFVAIMP..FIAREVT........................GI..........QVIQLSS.FGML....IVVG....VALD...TMK A2Y4E5_ORYSI/132-498 SFFQLGISHQISASIVMQVLFYPLFGPALLFSNGNVLCHVLPSLEKLRKE.GLDGHEKIKGYIWWLSLGFALVAAFTVSCYSLQYSIYAASY..................RVKHVMITSL..FLVLGAMTMTWICDTISE.SGF.G.HGSSLIICVGIL.TGYTDT................................LH...KMLTQFS.....................GNWYSCWH.........Y........ILGIAGTFILVTMGAVLVTEGCRKIKLQYYGF......KLASGARSESSPVTEVEPY.IPFNINPTGMQPLLTTSYL..LAFPS...IMASIF.....GTQFW.............................E...............SLKETLNPKTS..VG..................................GGPWAY.YLTYAFLVFVFNIF...DIANLPKEISDYLNKMSARVPKIKPG.RATVEYLTKIQTSTRFWGGI.LLSLLATSS..LLLDRYL..........................RQ......INEGFSIGF.TSVL....IIVG....SIIE...LRR Q7UZW2_PROMP/80-422 GIFALGILPFINASIIIQLL................TA.SLPVLEDLQKNEGEAGRRKIAQITRYVSLGWGFLQSIIFSLILRQYAIEGISET.................AFV..LQTSI..ALVTGSMIVMWFSEIITE.KGI.G.QGASLVIFLNIV.ATLPKA................................LS...STIEKAQ....................TGDRGDVLG.........I........AVLLGVFLLT.IVGIIFVQEGARRIPIVSAKR...QIG........NSSLLPTRQSY.LPLKLNAGGVMPIIFASAL..IFLPI...TVANVT.....GNPIL.............................I...............KIAGSLNPGS.......................................SNPWPY.ALTFFALILGFSYFYA.SLTINPVDVASNLKKGGVAIPGVRPG.SNTANYLSGIQNRLTLLGGL.FLGSVAIIP..AAVERAT........................NV.........QTFQGLGA.TSLL....ILVG....VAID...TAK Q7NKT4_GLOVI/79-416 GVFMLGILPYINASIIMQLL................VP.VFPKLEDLQKNEGEQGRRQIAQYTRYLALGWAIIQSIGVAIYIKPFVADWSPL...................FV..IQTTL..ALTAGAIFVMWLGELITE.KGI.G.NGASLLIFVSIV.SSLPTA................................FS...QTFQLLQ.....................ADSSRVAG.........V........VVLLLVFLAM.IVGIVFVQEGTRRIPIISARR...QVG......PRRQQYQQQQTSY.LPLRVNQGGVMPIIFASSL..LYLPL...TFAQFA.....RN................................A...............TVDQVVNAI........................................SSGWIH.NILYLVLILFFSFFYA.TLIINPEDVSKNLKRMGSSIPGVRPG.TATSEYIAKVMNRLTFLGAI.FLSAVAIIP..TFVEQGT........................GI.........TTFNGLGA.TSLL....ILVG....VAID...TVR SECY_GUITH/68-404 GVFALGIVPYINASIIVQLA................TN.SIPSLEKLQKEEGELGRQKIVQLTRYVALVWALIQSIGVSFWVRPYVFNWDLN...................FV..FAMSL..TLTIGSMLIMWFSEQITE.KGI.G.NGPSLLIFINII.SGLPKL................................LQ...SQIQSTR......................LNIQALD.........I........FVLVFIFSVM.IIGIIFIQEGIKRIPIISARQ.............LGKGQMDNKTSY.LPLKLNQSGVMPIIFASAV..LVLPA...YLAQLV.....SNEQL.............................R...............TVLHLFDGTS.......................................NNKLLY.LLFYFTLILFFSYFYT.SLILNPNDVSKNLKKMESSIYGVRPG.KATTEYLQKTLNRLTFLGAL.FLAFIAIVP..NIIETLT........................NL.........SVFKGLGG.TSLL....IIVG....VQVD...TSK SECY_CYACA/62-394 SVFALGIIPYINATITIQIL................SS.AFPALKKLQSEEGEIGKKKLNKITKYLSFCFAFIESLAIVLRLQKYAFDWN.....................LYFIVQTTL..ILISGAMLVMWLADNISY.KGI.G.TGASVIIFVNIA.SAFAKF................................LL...NQLFVHS........................IKFLD.........F........ASYFALIVFS.IACIVFVQEAIRKVPIISAKQ.............LDSTSFYSNDYF.LPLRINQGGVMPIILASSL..LALVD...YVIRYG.....LST...............................L...............QAVYFINDIL.......................................PFKILF.LLLYSAFIIFFNYLYC.SLVLNCFELSNNLKKASVVIPSIRPG.KMTEKFFKDTLDNLTLFGSG.FLAFIVLAP..NFLEFVF........................HI.........RVFKGLAV.SSLL....IVVG....VAID...LIK Q85FU6_CYAME/42-325 GWFVLGIIPTINASIVMQIL................IS.IVPALTRLQKEEGEMGQKQIQKYTRYLTFFLAGIQAFTLSQQ..................................WCTWL..LIVSGAMLVMWLAEQMTH.KGI.G.NGTSIFVCSNIA.ANF...................................LH...HPIEAPW...............................................SLAMVVLIFT.MLGMIALQEAVRAIPILSAKQ...............LIQSIAQVYL.LPMRLNQGGVMPIIFASST..LALLH.................................................................................................................TWSIWW...LYVACIIFFSHFYN.LVIANPKELSENLNKMAVVIPSIRPG.AETQQYLNRTLNRMSWIGGI.ALSLIALLP..WLFSSLK....................................IFSGFGA.TSLL....IVIG....VSID...TMR A0T0J6_PHATR/72-407 GLFTLNIFPYINASILVQLI................LG.FSPKLSKLQKEGDLEGRRSINRLTRLITLMFALIQSVSLALYLKQILFNWN.....................YSLAIEIGL..WLTTGAMIVLWLSELITD.YGL.G.NGASLLIYTNII.SSLPNL................................SK...TILSENS.......................QNFTLG.........S........EIGIVLLIFTSLYGIVFLQEGVRIIPLISSKQ...LNQ.......SSLQDSVTSNNY.IPLRFNQAGVMPIILTTTI..LVVPN...YVNNLG.......................................L...............LPKIDLPINF......................................ESLNFVY.WIGYFVLILVFSSFYS.TIVLNPKDISDQLQKMAVTIPGIRPG.IQTTFYLKQVMKRITLLGTT.MLATLATIP..NFVESTL........................SI.........TSLNGLST.TSLL....ILAG....VVLD...LVR SECY_CYAPA/109-459 GFFTLGILPYMNASFFLQVL................TK.ILPSLERFQKEQEEIAQREFKKWTRYLTVIWAFIQSIVISWIWIRPYALNWD....................FFLGLKVVV..ALTLGAVIVMIIAEQITE.IGL.T.NGSSLLIFINII.ARIPNS................................IE...QLFNSNI..................NWT..FPMISS.........L........ILSLSLSFIT.MFVIIGLQESGRPVPVLIARQ...EAERQKFNEPITEAERRKTQAY.IFFQLLPAGIMPVIFASTIFDLALPA....FTNFL.....LQQG..............................N...............WGYQ.LIKSF......................................PFNSLFK.DFCYLITIMLFSSNYALTIMINPKTLAENLNSMNALIPGVRPG.SETKVYSEQLIHRLNFIGSF.VLALVCILP..SIVERSL........................GL.........PKLQILSP.VSIS....IALG....VAVD...TTR Q4G351_EMIHU/63-407 GIGSLGILPYINASIIIQLL................TP.LFPNLERLQKEEGELGRQQISRYTRYLTCIWAIVLSSAIAFFLIKPITFGWS....................LKLGLEIVL..SLTVGSILSMWFAELITE.ESL.G.NGSSMIIFINIV.GGIPNN................................LSSLSKTFSAAN......................LASAIPL.........L........LTGLGIYLGI.VLIIIFFQESYKKITIVSAKQLNLTTS......AQTQSERLANNSF.IPLKLNQGGIMPLVFSSTI..AVVFM...YPAQIL............................................................LSSALLTNAAGL..............................ASKLLTIYSFGINFVLVIFFSCFYV.SLVLKPKDMSENLGKMAYSIPGIRQG.KETTKYLEKVINRLAFIGGL.FLAFLAFFP..LFVGNFI....................................QFGLFKNLTSLL....ILIG....VITD...TTS SECY_PAVLU/66-404 SILTLGLGPFFSASLAVQFL................VK.LYPAFEKLQNEEGEEGRKTIVRYTRILTVLFCIIESFFLSNSLRSFVFNWN.....................SISYFVVAA..AVTTGSLVLVWLSEVITE.RGI.G.NGSSLLILIGNL.SRFRFLIN............................KDDF...DSLNVSS........................QSNLY.........I........IYIIITLVSM.LIFSTLSQEGARKIPVVSAKQ............LIDGVEDDMRRSY.IPIRFGQAGVVPIIFSSSI..LLFLT...TSIKQL.....PNA...............................N...............IATRVILDSV......................................NLQQIFY.FFTFLVLIIFFSFFYT.LIILSPSDIAKNLKKMSSVIQDTKPG.VATKVYIRKFILQASFVGSI.LLSALILIP..SILAAAL........................GV.........HPLSISGI.TSLI....LSFS....IIND...TVR Q6B8X0_GRATL/62-395 GIFALGIVPYINASIMMQLL................TK.LIPELENLQKEEGESGRQKIGQLTRYFTLIWSILQSIGISLWIKPYVFNWNYY...................FI..LDSII..ALGTGSLIIMWFAEIITE.YGI.G.NGASLLIFQNII.SGIPKN................................IQ...NYKINIY......................DKQTIIN.........G........SFLFLLFVLI.LIINILIQECKRKIMIVSAKQ.............LSKFTTSNPRSY.IPLKLNQGGVMPIVFASAT..MALPI...YFSNNI.....EV................................P...............NINNVINLFL.......................................PGRILY.FPAYGSLIIAFSYFYT.SLVLNPDDIAENLNKMGASIPSIRPG.SDTIRYISKILDKMTFMGGV.FLFIIALIP..SLIAYIT........................HT.........SLLQGLGT.TSLL....ILVG....VAID...TAK SECY_ANTSP/62-390 GIFALGIVPYIYASIIIQLL................IK.LIPYLENLQKEEGEIGRQKINQLTRYLTLLWALIQSLSIAIWINHMY.........................LIHLFELCA..SLTTSSMIAMWFSEIISE.YGV.G.NGPSLLIFQNII.SSIPKN................................LQ...NYTFNIG......................TTNTVLN.........G........SLILSFGIII.LIINILIQEGERKIAILSAKQ.............LGKINELNHKVI.FLLKLNQGGVMPFVFASAV..VHTFL...FISNNT.....NS................................................KITQFINLFL.......................................PNQFLY.LPLYLIFIITFSYVYT.SLILNPEDIAKNLKKMGASIPNIRPG.SETIKYLNTRINRLTLIGAC.FLFTITLFP..TITYYIF........................KI.........NTLKGLGA.TSLL....ILVG....VAID...TAK A4RW47_OSTLU/65-398 GIFSLGIVPYINSSIIFQLL................GS.VFPELKKLQKEEGEAGRRKFQQYQRYGALGFAIVQAVGQCLYVRPFVEDFTPI...................WL..FEQSC..ALTAGAMILMYIGELLNE.IKL.G.NGTSLLIFANIV.SALPSS................................VG...QTVSMAQ......................EKGDSSV.........L........AVFFGAFALT.TLGIVYVQEAERKIPMNYSTR..............FNAGGLAKSSY.LPFKVNSAGVMPIIFASSL..LALPA...TLTRFT.....DNGAV.............................L...............GVARFLSP.........................................GGGAGY.VPVNVAMICFFNYFYT.FLQLEPKDVADQLKRQGASIPGVRPG.AATRDYITRVLERLSVLGSV.FLGALALTP..GAVEQIT........................GL.........QTFRGFAG.TSLL....ILVG....VATD...SAR A7PFA4_VITVI/131-465 GICSLGIVPFINAQIVFQLL................TQ.IYPKLQDLQKREGETGRKKVLQYTRYASVGFALVQAIGQVLFLRPYVNDFSTQ...................WV..LSSVT..LLTLGSVLTTYIGERISD.LKL.G.NGTSLLIFTSII.SYLPAS................................FG...RTVAQAF......................QDGNYIG.........L........VIIIISFFLL.VLGIVYVQEAERKIPLNYASR............YTNKSGGLQKSTY.LPFKVNSSGVMPIIFSTSS..LALPG...TVSRFT.....GLAAL.............................K...............KAALALN..........................................PGGSLY.LPTNILLIAFFNYYYT.FLQLDPDDVSEQLKRQGASIPLVRPG.KSTAAFIKMVLSRISVLGSG.FLAILAAGP..SLVEQTT........................HL.........TAFRGFAG.TSVL....ILVG....CATD...TAR A7HM32_FERNB/75-404 SVFSMSVTPYINASIIMQLL................AS.IIPSLKELLKE.GEEGRKKFQHYTKNLTLGLAALQSFVVSFGLARSYQGIIAIN.................TWLFSFVSTV..SLVAGTMFLLWIGDRITE.KGI.G.NGVSIMIFAGIV.SRYPAY................................FR...SAVLG.........................NLNIFG.........W........IFLIAVAIFM.VVAIIYVQQAERRIKIEYATR...MVGR.....RIY..GGT..STY.LPIKVNHSGVIPIIFAWAI..ISIPE...AIAQIT.....GA................................Q...............WAIKLFS..........................................MQSPLM.MIIYALLIFFFTYFYS.VVVIDPKDISENIKRYGGFIPGIRAG.KPTEEYITFVLNRVTFLGAI.FLVGISLLP..YLVEGIT........................RV..........NIW.LGG.TSAL....IAVG....VALD...IAQ A3CK84_STRSV/69-416 SVFALGVSPYITASIVVQLL................QMDLLPKFVEWGKQ.GEVGRRKLNQATRYIALVLAFVQAIGITAGFDTLSRANLVAN................PNVQTYALICV..LLATGSMIVTWLGEQITD.KGY.G.NGVSMIIFAGIV.SAIPDMIK............................GIYE...DYFVNIP...................SERLTSSFIF.........V........GILIVAVLLI.IYFTTFVQQAEYKIPIQYTKV................AKGAPSSSY.LPLKVNPAGVIPVIFASSI..TAAPA...AIFQVV.....SALGYD...........................AD...............WVKTAQSLLA.......................................TTTISG.MFMYAFLIVLFTFFYT.FVQINPEKTAENLQKSGAYIPGVRPG.KGTEDYMSKLLRRLATVGSL.FLGFISILP..ILAKDVF........................GLT........DAVA.LGG.TSLL....IIIS....TGIE...GMK Q5FM71_LACAC/68-415 SIFSLGVSPYITAQIVIQLL................QMDIVPTLVEWGKQ.GEVGRRKTNQVTRYLTLVVAFVQSIGITLGFNALTQMGLVKNQ..............TPQTY..VEIAI..IMTAGTMLLTWLGDEITD.KGL.G.NGVSVIIFAGII.ARLPSGLW............................QIYK...EEIINNS..................ASDR.WQGILF.........F........IAVIVAILIV.TQLVTWVEQADRRIPIQYTRR...ATI...........SGS..ESF.LPLKVNVSGVIPVIFASSF..IITPA...TILMAF.....QRTQGD...........................QQ...............WFKV.LNQIF......................................SLQTTPG.VIIYTLLIILFTFFYA.FVQVNPEKLAENLQKQGAYIPSVWPG.KDTQNYISKMLIKLSTVGSI.FLGLVALLP..QLATNFW........................NLP........SSIG.LGG.TSLL....IVIG....VVLE...LSR Q03ZM6_LEUMM/68-416 SLFAMGVSPYVTAQIIVQLL................QLDIVPRFVEWSKQ.GEVGRRKLNNATRWLTLVLAFVQSVGITAGFNSLSSYGLVSQT...............NSVM..SFVVIGSVMTIGTFFAMWLGEMITE.KGL.G.NGVSMIIFAGII.AQAPEGFY............................EIFK...ENILQAD..................SSDM.LNGWIF.........V........VVLVIAMILV.VAFTTWSYEGTRRLQMQYTRS...ATS...........YGS..EAY.LPLKVNVSGVIPVIFASSF..ISTPQ...TVMLAF.....QDKYSS...........................AQ...............WYQI.MQQIF......................................SMTTLPG.AILYTALIVVFTYFYA.FVQVNPDKLSENLQKQGAYIVGVRPG.AETKAFVSKLLLNLSFVGSI.FLGVVALVP..LIASDVW........................GLN........EKIG.LGG.TSLL....ISIG....VALD...LIR SECY_STAA8/69-413 SIFAMGIVPYITASIVMQLL................QMDIVPKFSEWAKQ.GEVGRRKLNNVTRYLAISLAFIQSIGMAFQFNNYLKGALIIN................QSIMSYLLIAL..VLTAGTAFLIWLGDQITQ.FGV.G.NGISIIIFAGIL.STLPAS................................LI...QFGQTAF.................VGQEDTSLAWLK.........V........LGLLVSLILL.TVGAIYVLEAVRKIPIQYAKK.............QTAQRLGSQATY.LPLKVNSAGVIPVIFAMAF..FLLPR...TLTLFY.....PDK...............................E...............WAQNIANAAN.......................................PSSNVG.MVVYIVLIILFTYFYA.FVQVNPEKMADNLKKQGSYVPGIRPG.EQTKKYITKVLYRLTFVGSI.FLAVISILP..ILATKFM........................GLP........QSIQ.IGG.TSLL....IVIG....VAIE...TMK Q4MG72_BACCE/68-415 SIFAVGITPYITASIIVQLL................QMDVIPKFSEWAKQ.GEMGRKKSAQFTRYFTIILAFIQAIGMSYGFNNIAGGQLITD................QSWTTYLFIAT..VLTAGTAFLLWLGEQITA.NGV.G.NGISMIIFAGLV.AAIPNVAN............................QIYL...QQFQNAG....................DQLFMHIIK.........M........LLIGLVILAI.VVGVIYIQQAVRKIPIQYAKA...VSGN....NQ....YQGAKNTH.LPLKVNSAGVIPVIFASAF..LMTPR...TIAQLF.....PDSSIS............................K...............WLVANLD..........................................FAHPIG.MTLYVGLIVAFTYFYA.FIQVNPEQMAENLKKQNGYVPGIRPG.KSTEQYVTKILYRLTFIGAI.FLGAISILP..LVFTKIA........................TLP........PSAQ.IGG.TSLL....IIVG....VALE...TMK Q6F1X5_MESFL/92-454 SILALGVSPYITASIIVQLL................STDVVPILTRWNKS.GERGRKKLDKLTKVLMIPFALMQGIATIFTLQQQGV.....IEPGWSSD...NVLASPAFYY..VLVPL..VMLAGSYFMLWIADQITI.KGV.G.NGISIVIFIGII.VQLPNQIK............................ATYD...FWIPSNE..................SINVFFDGIIK.........F........SIYMLVFFVV.IFSVVLMNEAERKVPIQQTGS...GLI...........DSKDHTPY.LPLKLNNAGVIPVIFASAL..ISTPI...TIAQIIDPTASTSTVDS...........................AN...............AFVRFTQHYL......................................SFNTWWG.IGIFAVMIVLFTFLYA.QVQINPEKISENFQKSGTFIPGIKPG.KDTTNFLKGTINRLSLFGAI.FLAAIAALP..YVISKLT........................NLP........SQLA.IGG.TGLI....ICIS....VAIQ...TTQ Q6KI36_MYCMO/87-436 SIVALGISPFITASLVMQIL................QTKLFPPIYRLSQS.GPIGRRKINIITRAITIFLGVVQSMTIVSALSAQNSFISLTNEF.............NVFWYQFIILPV..ILIAGTVFSIFIGDQITD.KGV.G.NGTTLLIFTGIV.ITLPTQFT............................ATFN...ALVGEQQ..................RVSSLSNGIVT.........F........ISYVFGFIIL.MYIIGFVYNAERRIPIQQVGA...GRA...........KNEKELSY.LPIKINPGGISPIIFALII..ISFPQ...LFASVF.....PISNPF...........................RI...............WVESNLR..........................................PNNTIG.FILFISITFIFAIFFG.LQQSKVDKIAEDFAKNSTFIPGIKPG.QETETYLTGIVLRLCFFSAF.YLIIIGGMQFAQQLAGVP....................................ENISFGG.TSVI....ILVT....ASYE...TIT Q4A5I3_MYCS5/83-437 SIFALGISPFINASLIMMIL................QSRLFPMIYKLTQS.GPQGRRKLNIATRILTFIIAYPQAVFLTKSLTAGERNSSFITLVSI........DGFSVDLLVYFLLPM..ILISASLFALFLSEQITN.KGV.G.NGTSIIIMTGIA.ARLPFQMQ............................NAFK...IFVGDLS...................QSGTLVGILN.........F........VTYIFIYLAC.LMVIGIFYNAERRIPIQQTGA...GRS...........KALKEIGS.LPIKLNPAGIMPIIFAMLV..LSLPT...LIANIL.....PNDNYS...........................KQ...............WINENLQ..........................................FYKPLG.FSLLIIITFVFSLLMG.IQQSKVDKIAEDFAKNGTFIPKVTPG.EETQNYLVAIVFRLSFFSAF.YLVIIAGMQYVQIMTGIL...................................QPSIAFGG.TSLM....ILVS....VSIE...TIS Q98Q01_MYCPU/90-438 SIVSLGINPFITASLIMTIL................QSKLFPPIQKMSQS.GPLGRKKINVITRLLTLVFAFPQAIVLTQTLSRENGFISIDQEF.............KTIANIYVLLPL..ILVAGSLFTLFLSEQITD.KGI.G.NGTSLIIFSGIS.LSLPSQFR............................AAFN...VLVGTNK....................TTLFTGLIH.........F........LLYLFGYLLL.IVIIVFVYLAERRIPIQQTGA...GLS...........KNIKEMGS.LPIKVNPAGIMPVIFSMIV..ISFPL...LIAGLL.....DRSTSLV..........................RL...............WIERHLA..........................................FTHPIG.FSLLIIITFIFSIFMG.LQQSKIDKISEDFNKSGTFIPGLRPG.DQTENYLIDVVLRLSTFSAF.YLSILVSIQYIMQMAGMP....................................AAISFGG.TSMM....ILVS....VSLE...TID Q4AAF9_MYCHJ/85-434 SVVALGISPFITASLFMLIA................QTKLFPPIHRLSQS.GPAGRRKINIITRFLTLLVAVIQAVVLIRTVILNPDYGFVRLEI.............NTPVFIWLVLPL..VLVAGSLFSLFLAEQITD.KGV.G.NGTSLLIFSGIV.VGLPRRFQ............................HAFE...YLVDLSF...................SSSLISQVLS.........F........ILYIFGFLLI.LLIAIYVYLAERKIPIQQTGS...GMS...........KNIKEISI.LPLKLNPAGIMPVIFALII..VSLPT...LFSGFL.....DRNTSAV..........................RN...............WIDNNMQ..........................................IYHPIG.LIIFIVFNVSFSIIMS.LQQSRVDKIAQDFAKNSTFIPGIRPG.EQTEDYLISVVLRLSVFSAI.YLTFLGILQPVEIMLGLP....................................SAITISG.TSII....ILAT....TTLE...TIS Q9PQP1_UREPA/76-434 SLFAIGIGPYITAQIIMQLL................SSELVPPLAKLSKS.GERGRKKIEVITRIITLPLAVMQAVIIINLMTRANG.....FISIVSNA...PFAIGSPLFY..VTYIF..LMVGGTYISLFLADLISK.KGV.G.NGITLLILTGIV.ASLFNHFI............................AIFS...NLGSLTS.....................SKVSQIIG.........F........ILYILFYIMI.LIGVVFVNNSTRKIPVQQTGQ...ALI...........LDHEKLPF.LPIKIMTAGVMPVIFASSV..LAIPA...QVAEFL.....DKQ...............................S...............MGYYVIHNYF......................................IVDSWTG.LAIYVVLILLFTFFFS.YVQLNPPKMAEDIKKAGRFIPGVQVG.MDTEKHITKVIYRVNWIGAP.ILAFLACLP..HLVALVA........................KTINHGIPVIQPSTI.FGG.TSII....IMVT....ATLE...LWN SECY_MYCGE/81-430 SLFAVGISPYISAQIIMQLL................STDLIPPLSKLVNS.GEVGRRKIEMITRIITLPFALVQAFAVIQIATNAGT.....GSSPIS......LANSGSEFI..AFYII..AMTAGTYMAVFLGDTISK.KGV.G.NGITLLILSGIL.SQLPQGFI............................AAYN...VLSGIVI..................TLTPQLTAAIS.........F........FIYFLAFLVL.LFATTFITQATRKIPIQQSGQ...GLV...........SEVKTLPY.LPIKVNAAGVIPVIFASSI..MSIPV...TIAQFQ.....PQT...............................E...............SRWF.VEDYL......................................SLSTPVG.IFLYAVLVILFSFFYS.YIQINPERLAKNFEKSGRFIPGIRPG.NDTEKHIARVLIRINFIGAP.FLTVIAIIP..YIVSYFI........................RLP........NSLS.LGG.TGII....IIVT....AVVE...FIS Q8EUD2_MYCPE/81-433 SFMAIGVSPYITAQIIVQLL................SSDLIKPLTRLSKA.GERGKRKLEIITRLITIPFAIMQAYAVLSLAGTQGLVSSFFGQSA..........LSSVPAGQIILLLL..GMTAGTYLTIFISDIISK.RGV.G.NGVTLIILSGIV.ASIYPNFT............................SVFQ...VLTGSSQ...................ISNQLLRYFS.........F........AVYLVFFFLI.LLATTFVNGSVRKIPIQQIGQ...GLS...........KEVDEMPY.LPIKLNAAGVIPVIFASSI..MTIAP...TISQFL.....PSG...............................S...............AGSEFINEYL......................................SIERPVG.LVIYTVLIVLFGFFYS.HIQVNSEKLAENFQKSGKFIPGVKMG.EETQKYISKTLNRVNCIGVP.FLACLAIVP..YLITMTT........................GIP........NGIA.IGG.TGVI....IMVT....GSLD...FWS Q7X4E3_9MOLU/69-399 CILSLGVIPYVTASIVIQLS................QK.VFTFMKEWQEQ.GEKGKRKINIVTRVLTIFLSLGHGWALCQTEKLVLG........................PYLLFSTLF..FLTVGVFISIWLADLITS.KGL.G.NGISILIAVGMV.DKLFKT................................FK...YLLSNSN.......................GFETQR..................ILILVSYFVL.LILTIILSSAYLKIPINYAXN................RNNDKIDKY.IPIKLNTSGILPIILADTL..LNVIQ...QISMLF.....SKNG..............................................KVNEYIGIFVE..SR..................................SELGIY.FFVYILLIMLFSFFSS.FMTINPKDVAEHLSKQNAYLKDVQPG.LPTVKKIVREMFKITFLGSC.FLTLLASTP..DIINYLA........................GIK.......ISQNIPFSG.TSLL....IIVG....VALE...SIQ Q5Q069_ASTYP/59-398 TLFGLGITPYITASIVVQFL................QK.LLPICREWKDQ.GQMGKRKLNLLTRSLALFFAFGQSFAFLNSYSKLLVTSIS....................TRQLFLLAL..IATAGVAILIWFADLINS.KGI.G.NGTSILIVVSMS.HSLINLFA............................NLNK...SYLSKNT.....................FLTLKTFN.........F........ACIVLLLLLF.LIFTVVVQITSLKIPINYARN..................QSQGKSY.IPLKINSAGVMPVILAFAL..LQPFQ...ILAGVI.....GN................................D...............KLTKYVNLFTNTNSSN.................................NQINFFAIGFLVLLVIVLSFFSA.FMNVNPEDISEHLSKQDAYIAGLRPG.EQTTRYLANTLFKITVLGTV.FITALVVTP..ILMEHFL........................SL..........KDMKLGG.TSLL....IIVS....VALE...TIQ O21257_RECAM/57-372 SLFALNITPIITYLFLEQLY...................YIYSIPLISKK.KNLNKDLIKKYSVYIFLMISYLEGFIYLNHLYNTTSSSFLIFY..............LDNTINYLLCLN..FLVIGSCFLYFFAKLINI.YGI.G.KGLSFIIFINIV.GSFIDI................................FY...KYLIQIE.......................TLNVKY.........L........VFLLFVQCLFCGIIYFYIDFLFLKIPIIKLNF......VG..NENDNYNYLNYFQKY.QTSSLNLLGILPFILVYSIIYMLKLNLNSFLDLVF...............................................................................................................NIFLEMLCMMFIYLFL..........SRFLKKYLKFIYNINKN.NIYIEHINKNIYSIFFISHLYYLGILRDYCLFCFLFIF.............................................SKLF....FIIS...YLFIEIDFSFF Q74NB9_NANEQ/69-457 SIVSLGIGPIIIGYLLAELF...................IGSGELNIDIT.TEEGKRKFENLARFFMIVFGLFESIVMA.TIGWFKPSQFLISLFAMPFSFLGSNAFLIGYILAVLFIVA..QLMLGVILAYLLDDLSQK.WGF.T.SGINLFILATVS.RELFVQLFNPLTQIP..............GTPTPPIGKIP...QIFYFIS...................QGLYTEAIVV..................GLQLLVIVLV.ILLSVYFYMVKIPIPTSFGKI...................PEKSLR.YEVRLIYTGNIPVIFAFAF..LHQIL...LIAWVL.....QQLGIPLLG.....................TIENG...............HPINGLVAYIYPDTGFLISLILG...................NLTLDNLIRTITS.SLFFLGSSILFSIYFVLATGQDSEGLAKQLSKMFGRI.GLKRDYRIIKHYLDKIIPCVTVLGGF.IVGFLALLS..YWVSIPI.........................................GG.TSIL....LATM....ISYM...VYE Q2EMT2_METVO/30-379 TLITLGIGPIVTAGIIMQLL...................IGSELVKLDMS.KPDNRALFQGLQKAFGIFLCFLEAGMFV.LAGAFGALT......................PMMSLALIL..QLAIGAILLIYLDEIVSR.YGI.G.SGIGLFIAAGVS.QTIFVGALG.........................PQGYLW...KFFSALV...................SGSMGPALEY..................ILPILATIAV.FFVVVYAESIRVEIPLAHGRV...................KGAVGK.YPIKFIYVSNLPVILAAAL..FANFQ...LWGLVL.....YKIGFPLLG.....................TYSNG...............RAIDGIAYYFS...T.PYGLS......................SVISDPIHAIVY.TLFLIGFCVLFGLFWVETSGLDAKSMAQRLGGLNMAIKGFRKSNKSIENRLKRYIKPITVMGSA.FVGLLAALA..DFTGALG.........................................GG.TGVL....LTVS....IVYR...FYE A5UL65_METS3/72-433 SILTLGIGPIVTASIVLQLL...................VGSKLLDLDLS.SPEDKSQYQATQKILSIVFTMFEAGVLV.LTGSLVPIDNS....................YL..GVLFL..QLVIGAILIIYLDEVISK.WGF.G.SGIGLFIAAGVC.EAIIVGTFSFIPG.................PGGVYGGAIP...AFIQSFW.......................SSSIDF..........S......VLIPLIATAAV.FFVVVYGESMRVEIPISHGSV.............RGHGRIRGSVGK.YPLKFVYASNMPVILTSAL..LVNVS...LLASVF.....QKIGFPILG.....................EIVNG...............KAVSGIALYLS...T.PNDVS......................LLVTDPVRVIVY.AFFFLLCAVLFSYLWVEISGLNAKKISEQLYKSGIQIPGFRSSKRQLYKILKKYIPALTIISGL.YVGIIAFCA..DLTGALG.........................................GG.TGVL....LTVG....IIHK...IYE SECY_METTH/73-436 SILTLGIGPIVSASIILQLL...................VGGKILKLDLS.RHEDKAFFQGLQKLLAIVFTFFEALIFV.LTGSLAPSAPQF..................V....WVLIL..QLTIGGILIIFLDEVVSK.WGF.G.SGVGLFIAAGVS.QEIIVGAFNPLSAP...............TQPGVPAGRIT...GFLYLLF...................TGQSPDFQYY..................VLPVLALIAV.FLVVVYAESMRVEIPISMGGG...............KRLSRGAVGK.YPLRFIYASNMPVILTSAL..LLNVQ...LLANVF.....QKLGYPILG.....................TVSNG...............QAVDGLAYLLT...A.PRSID......................ALILDPFRVVFY.AVVFIGLCVLFAWLWVEISNIGPRHVARQLYQMGMQIPGFRSSRGQFEKILKRYIPTITILGGA.FVGLLAFVA..DLTGSLG.........................................GG.TGVL....LTVG....IVYR...LYE SECY_PYRAB/72-448 SILTLGIGPIVTAGIILQLL...................VGSEIIKLDLA.NPEDRRFYQALQRVFSVFMCFLEAAIWV.LGGAFGRVGVDV..................TYAIAALMIL..QLAFGGIILIVLDELVSK.WGI.G.SGISLFIAAGVS.QRILTRSLNPLTDPNII.........DPLTGKPAIVGAIP...YFIQHIL....................KGDLKGALYR......GGTA.....PDMMAVIATIIV.FLVVVYFESMRVEIPLGYRGV....................TIRGR.YPIRFLYVSNIPIILTFAL..YANIQ...LWARVL.....DRLGHPWLG.....................TFDPT.T............GNPVGGFVLYVI...P.PRSIF......................TVIDNPVRALVY.LILTVISSLIFGFLWVELTGLDARTIARQLQRAGLQIPGFRRDPRTLERVLQKYIPYVTFWGSL.TVALIAVLA..DFLGALG.........................................TG.TGIL....LTVG....ILYR...FYE Q8TZA9_METKA/75-435 SILTLGIGPIVTASILLQLL...................VGGDLIKLDLT.NPEDRRLFQGLQKLLAIVLCFFEGVMMV.FSGAAPPAEPS....................ILLEILLIL..QLALGGILVIFLDEVVSK.WGI.G.SGVGLFIVAGVS.SQIIIGAFNPLPSP...............QQPGRPAGAVW...AFLYSAM.....................QGTPDWTL..................LAPVIGAIIT.FLIVLYVEGMRVEIPIAFAGI...................RGARGR.FPVRLLYTSNIPVILASAL..FMNVR...LWALAF.....QRMGVPILG.....................KLDPR..............GQPISGLVYYLS...P.PNSIV......................KTLSDPLQALGY.MMAMVIASVFFAVLWVELTGMGPREIARHLHRAGLHIPGFRRDIRVLEKRLQKYIYPVTVMGGA.FVGFLAAGA..DLMGALG.........................................GG.TGVL....LTVS....ILYN...MYE Q9HIT0_THEAC/82-514 SLMDLGIGPIVTASIVMQLF...................VGAKIFNLDLQ.NAEDKAIYQGVQKLLVIIMIFVEAIPQA...FGYLVPDTKVVNSINA......VFPGYGEFLAQTIIIL..QLFFGSYLVFLMDEVVSK.YGI.G.SGISLFIAADVS.EQLFIGAFNWQALNNAL..........TYSLTNPPAGAFP...KMFYIIMHSS...........SSYLLT.NGVVQILF........SPP.....NPMIAVLGTLLI.FFLVAYFQSSKIELPISHERV...................RGARGR.YPLQLLYASNIPVILATAL..LANVS...MWTLLF.....WSSPVLSKVPILGH...........NPLLGSYPTT.AQATA...LNISATTPTGGLAYYLF...S.PNGLSDWLFPILQPS...GYQNILLGHTPLQEAIHIIVF.TAFMVGFSVLFAIFWIETTNMGASAVAKQIQASGMQIPGFRRDPRVMERVLKKYIPAITIFSGA.VVGLLAAGA..NLIGTVG.......................................DTSG.TGLL....LAVG....IIIQ...FYE Q2QAQ7_9EURY/161-583 SIMHLGIGPIVTGSIIMQLF...................AGAKIIKLDLG.DSDDKQLYQGVQKILVLIMIPVESIPQV...YGFLDASPALVSD.............FGQGWANAIIVS..QLFIGSLLVFLLDELVSK.WGI.G.SGISLFIAAGVA.QSTFVGTLSPLAVNPG...........AYGLQNPPAGTLP...MIFYTLRTAT...........FSEMVTANGFESILLGD.....AAHP.....NAVVALFSSVVV.FLVVAYAESSKLELPLTHGKV...................RGHRGQ.YPIRLVYASNIPVILMAAL..LANLN...MFTLLF.....WSHPTMSTVPILGSQGA.....WSIAPYLGSYDVG.Q............TQATDGFAWYAS...M.VNGVGDWLLPLLN......QSPDPYGHSLWQVVLHVITY.VTVMTLGSMMFAKFWIETTNMGAKDVAKQIENTGMQIPGFRKNPKVLERILMRYIPPVTLFSGA.FVGLLAAGA..DLLGTVG.......................................NATG.TGLL....LAVG....IILR...TYE Q0W1W5_UNCMA/75-487 SIILLGIGPIVMASIVLQLL...................VGAELIPLDTT.DPKDQAIFQGLQKLMVFVMIVVEALPQI..YGGFLLPDPAIAATL...........GVSTGIIQLLIFA..QVALGGVLILYMDEIVSK.WGI.G.SGVSLFIVAGIA.QALVGGIFNWNPPYPGQAMGLNVDIAGLGARENLPIGIIF...RWEWLLNNIG...........LSQLLTGENLIVLLY..........Q.....GEILALLATIII.FLLIVYVESTRIEIPLAHAAV...................RGARGK.FPVKLIYASVLPMILVRSL..QATLE...MVGLLL.....YRNGITFLGT....................FNQYN...............QPVDGLMFYIN...P.INGLSDWVPQLA........ALNYPGIQLWQIALHVFTD.AFILIAGGILFAIFWVETTGMGASRVARQIQKSGMQIPGFRRNEQVIEKVVSRYIPKVTVIGGA.FVGFLTLLS..SLFGILG.......................................AVSG.TGML....LAVS....ITYQ...LYE SECY_ARCFU/73-471 SIIALGIGPIVTASIILQLL...................VGAGIIKLDLT.NPEDRAAYQDFQRFLVFVMIAVEAIPQI..AGGLLKPDLNLAAQL...........GVSPGIISFLIFI..QLFIGGVLIVYMDEVVSK.WGI.G.SGVSLFILAGIA.QSIVVGLFNWVIPP................NSAMPAGIIP...RWIWIAQNYP...........LDQLFTGSGLAFLLI..........Q.....GGILALITTAAI.ILLVVFFEGTRVEIPLAHAVA...................RGARGR.FPIKLIYASVLPMIFVRAL..QANVV...ALGQVL.....HARGVTIFG.....................EFVNG...............KAVSGLMFFLQ...P.VSSPYDWIPSLVKS.....QGAAFAAIPDWMIYLHLLID.ALILVVGGIIFAWFWVETSGMDARTVASQIAKSGMQVPGFRKSPQVLERVLSRYIPKVTILGGA.IIGILTLVA..NMLGTIG.......................................NVSG.TGLL....LAVS....IAYR...FYE Q8TRS4_METAC/72-470 SLVLLGIGPIVTASIVLQLL...................VGADIIKMDLS.DPKDQAFFQGAQKFLVFVMIILEALPQL..LGGYIQPDPGLAATL...........NVGLGVITLLLLV..QIFIGGTLILFMDEVVSK.WGI.G.SGVGLFIVAGIS.QQIVTGIFNWEFE..................EGLPVGLIP...KWIYIAQNTG...........ADYLFSGEGLMFLLV..........R.....GGILALLSTVAI.FLLVVYVESTRIEIPLAHSAV...................RGARGR.FPVKLIYASVLPMILVRAL..QANIQ...MVGIIL.....ASRGITFLG.....................EFSGS...............KPLNGIMYYLA...P.IHSPYDWIPSLVRES...FASYGATAPAIWQIGLHVLAD.AIMLIGGGIIFALFWIETTGMGAKPTAQKIFNSGMQIPGFRRNIGSIEKVMQRYIPKVTVIGGA.FIGILTLVA..SLLGTLG.......................................SAGG.TGLL....LTVS....IVYR...LYE A0B9U7_METTP/75-515 SLMLLGIGPIVTASIVLQLL...................VGAEIIKLNLR.DPRDQAIFQGTQKALVFVMIVVEALPQI..TGGYLLPDQALATSL...........GVSLSIISLIIFL..QVCLGGVLILYMDEVVSK.WGI.G.SGVGLFIVAGVS.QQLVTGLFNWATG.................DGGLPIGIVP...KWISIIRLGLI.........GLDEIFTAEGLKFIFV..........T.....GGLLALISTVGI.ILLVVLVESTRIEIPLAHSRV...................RGARGR.FPVKLVYASVLPMILVRAL..QANIE...MLGALL.....TAKLGTVTTAETTAEGVRIVYTGYQSWLGTFLSSAKFDAATGAPISATSPQPVSGLMYYLS...P.IHGPSDWIPSMVSQSTPGLVELGINPIAGWQIWLHLLTD.TAFLIIGGIIFAIFWIETTGMGAKSIAAKIHASGLQIPGYRRSPVSIERLMERYIPKVTVIGGA.IIGLLTVIA..SLLGTLG.......................................GAGG.TGLL....LAVS....IMYR...LYE SECY_HALMA/73-468 SIMQLGIGPIVTASIVLQLL...................GGADLLGLNTQDDPRDQILYQGLQKLLVLVMICLTGLPMV.FAGGFLPADTAVANSL...........GIGTAGVQWLIFA..QMFVGGVLILFMDEVISK.WGV.G.SGIGLFIVAGVS.QRLVGGLLTAPF...................LGNSEGIIY...TWYLFITGERG..........TGPVLAADGLQTVLL..........Q.....GELLGLFTTVLI.FAVVVYAESVRVEIPLSNARV...................KGARGR.FPVKLIYASVLPMILVRAL..QANIQ...FLGRIL.....NAQLGSMPAFL..................GTYANG...............QPTGGLFYFLA...P.IQSRGDWMWWL...........EGTAQPVWQILTRVGID.LFVMLVGGAVFAVFWVETTDMGPEATAKQIHNSGMQIPGFRQNVGVIEKVLERYIPQVTVIGGA.LVGLLAVMA..NMLGTIG.......................................GVSG.TGLL....LTVS....ITYK...LYE Q2FSG8_METHJ/73-458 SIVHLGIGPIVTASIVLQLL...................KGADLIHIDTS.EIRGQIQYMGLQKLMIFIMIVVEALPMI..VGGFLKPDPAIASAL..........FGGNSGVLAILIFI..QICIGGVLIFLMDEVVTK.WGI.G.SGVGLFIIAGIS.EAIINGFINWAPV.................NDMYPVGFFP...RLFAVVL.....................DGANFIQY.........FG.....TDLIAFITTIAI.FILIVYVESTRVEIPLAHTQV...................RGARAR.FPVKLIYASVLPMILVRVL..QANVQ...MIGLFL.....NNIGITIFG.....................TFEGQ...............TPTGGLMWYLA...P.INHPSDWMWWMP.........SYVGGHAPWEVLIRLGID.TTIMVVGGAIFALFWVKTAGLDSKAVARQIQLSGMSIPGYRRNPAVLEKVLDRYIPRVTVIGGV.FIGIMSVVA..NLFGVIG.......................................AVSG.TGLL....LTVS....ITYR...LYE A2SPM5_METLZ/73-458 TILHLGIGPIVTASIVLQLL...................RGADLIKINTS.DQRGQVLYMGLQKVLIFVMIILEALPNV..LGGWMSADPAVSAFF...........GGNAGFVMLLIFL..QICIGGVLVMFMDEVVSK.WGI.G.SGVGLFIVAGVA.QGLINGFFNWEAT.................TDQFAVGFFP...RLFQVIA.....................DGSNFIEY.........FG.....LQLLALVTTVGL.FFIIVYVESTRIEIPLAHANV...................RGARSR.FPVKLVYASVLPMILVRVL..QANVQ...MIGMFL.....SSIGFTALG.....................EYNGS...............TPINGLMWYLA...P.INQPQDWMWWLS........SFTGTGHAVWEVILRVGID.CTVMILGGALFAIFWVKTAGLDSKHVARQIQNSGMQIPGYRRSPAVLERYLDRYIPRVTVIGGV.FIGLLSVMA..NMLGIIG.......................................FVGG.TGLL....LTVS....IIYR...LYE A0RUE4_CENSY/79-457 TLVELGIGPIVTAGLLMQLL...................RGSEILKFDFK.KPEERGIFQTATKMVSYVVIVVESSIYGIAVYGPGIADPS........................VLYILIGQLMASSIIIMFLDELIQKGWGL.G.SGISLFIMAGVA.QQILWSLFSPLPA.................GDGFAVGIFP...FIGQWAS..................VGMGNFEDIFFR......YNQL.....PSIFGLLLTGGV.LLILVYTQGMKIEIPIVSTKY...................RGFSAT.YPIKLMYVSNIPVILASAL..TANAI...FIGQMF.....WSNFNPRNDNIFL.............NVLAQFDLT.N...........PSTPIGGIVYYIT...P.PRGLD......................IAALDPMRAVGY.VLFMIGIVVVFGKLWVELGGLSPKSAAKNLLDADVQIPGFRRSNQPIEVLLNKYIPSVTIIGSM.ILGALAGAS..DVLGVFG.........................................SG.IGIL....LMVD....ILIN...YYN A8ME75_CALMQ/77-461 TLAQLGIGPIIIAGIIMELV...................AFSELMDVDLN.DPKDQARFTALTKLVAVIIAMFEGAFIM.STHQLTVAN......................AGLAFIVWL..QMLFGAVIVILLDDLISKGWGI.G.SGISLFILISII.RSIFQSTFMPVTV.................GAGELLGIIP...ALVAAVYSA.............AVSHTLAPLLSIVYR.......FNL.....PGLIGLIATIVL.GGFIAYVELMEVRIPLSFVQY...................GGYKMS.YPFKVMYVSVLPIIFTAYT..VALIYNGLYFIWTTYNPHNANALLNSIACIR...............VITTAKFG.TI..........NEPCPSSLIYYFT...V.VPY..........................NITPQYVVVH.ILMYVVLSVVFAYLWVNLAGLSAEDQARTMVSSGLSIPGFRASARSLAVHLKRYVNSLTFTSGL.LAGFIAALG..DVLGVYG.........................................TG.IGLI....LMVE....IIIQ...YYT A3MUZ2_PYRCJ/70-435 TLAHLGIGPIVIAGILMEVF...................AFSGVLNLDLN.KREDRLKFTLMLKWAALGIAALEATAYV.LGGQFGTVT......................PLGGVLIVL..QLLLATVIILLLDDLMSKGWGI.G.SAISLIIFLGVS.RQIFLSLFSWDTVQD.............SNGNTQVFGLLP...ALGVALYDL.............FTSGNANTLLGLVNRPL..TVNTYL.....PDFVGLVATILL.GYIILYLEMMKVNIPVASAQY...................RGIKFT.IPLRFVYVSVLPIIFTTYS..LLLVG...................QLLQ.....................PFAAN.N............PALITVLNVIFL...P.HRY...........................FDPLLIILN.FALYVALAIAFAWIWVQLAGLSAEDQARQFTQSQLHVPGFRQSERVLAKILERPINALTIISGF.IAGTFASLG..NVLGVWG.........................................GG.VGLI....LLVE....IALQ...YYA SECY_SULSO/73-449 TLAQLGIGPIITAGLIMQIL...................AGSKLISIDLN.DPDDRVKFTEAQKGLAFIFILVESALFGYVLARTSTTINASIL..............FIA....GIVIA..QLIVATYLILLLDELIQKGWGL.G.SGVSLFILAGVM.KIMFWDMFGIASVS................SQNLPIGFFP...ALFTALA...................SHSDVLNLIVNTSTKNLFQ.P......DLVGLVTTIAL.IIITIYLTTMTIEIPVTSQKL...................RGIRRT.IPLNFLYVSSIPVIFVAVL..GSDIQ...LFASLA..........SYVS.....................PSASN..............ILNTVSGVFFFPPPNSAIPHSIY.....................AVVLDPLGALEY.AVVFIVLSILFGILWVDVAGLDPATQAQQLVEAGIEIPGVRNNPKIIEGILARYIYPLAFFSSI.IVGLIAVFA..TLLGAYG.........................................TG.IGIL....LAVT....IAIQ...YYS SECY_SULAC/74-443 TLAQLGIGPVITSGLIMQIL...................VGSKLINVDLT.TQEGKSKFTQAEKALALIFIIVESSLFGYVFTRATSNILLP.......................IIVVV..QLIIASYIILLLDEMIQKGWGL.G.SGVSLFIMAGIM.KVIFWNMFGIVSVQ................SQNLPVGFFP...LLVSYIT...................SGRNLQEIVLNTSSTTPYQ.P......DLIGLIATVGL.TILIVYLVNTNIYIPVTTQRL...................RGIRTT.VPLNFLYVSSIPVIFVSVL..GADIQ...LFASLA..........NSIS.....................NSASG..............ILTDIANAFFFP..PQGVPHSVY.....................ALVVDPVGAAIY.AAVFIVLSIVFGMLWIDVAGLDPKTQAEQMIRSGIEIPGMRTNPRIIEGILSKYIYALGFFSSL.IVGLIAVVA..TFLGTYG.........................................TG.VGLL....LAIT....IAMQ...YYN A2BME2_HYPBU/73-444 TLMTLGIGPIVTAGIVLEVL...................VGGKLIELDLT.KPRDRKIFMGAQRTLALLFALLEAAAYV.IGCRFWISAFASSPEV..........CPPISTAVKIIVVL..QLVFATLVLMWFDEMIRNGWGI.G.SALSLFIVASVV.KGLFWQLAGSTKVAT.............PEGQPVYYGWLA...HVVSTGD.......................LGVLRR.........GM.....PDMVGFLATIAI.IMVLIYFQLMRVYIPVTSPRY...................GSIKTR.IPLNFIYVTNIPILFVAIA..VSDIK...VFEIVI.....ASLLGADN........................PLV...............RGMDVLYNYVS...P.PRGLL......................AAVADPLRTLTF.ALAWLALGLLFGFIWVEIAGLSPRQQAENLIKSGMELPGIRKNVKLLERILARYIYPLTVISSL.LVTTMAILA..DVFGAYG.........................................TG.SGLV....LLVG....IIYN...FYQ SECY_AERPE/73-434 TLMELGIGPIVTASLIIQVL...................VGAKIIKLDLA.DPEGRRKFTSAQKVLALAFAALEAVAFT.VGGRYWVGTAIEP.................GPLDYALVSL..QLFLGALLVIYFDEVMQKGWGI.G.SAISLFILAGVA.QGVVWSIFGTIPG..................VAQDYGLVP...AIISNPD.......................LTLLARP.......NGF.....PDLTGFFTTLAA.IILLVYLQAMRVEIPITSERF...................KGIRSR.VPLQFIYVTNIPILLVGIL..VSDLL...LVQRLL.....ADYLGVES........................RAY...............QIYSSIVYYLS...P.PRGVV......................QSIADPVKTAVF.IASWTVLSIVFGYMWVEIAGLNPREQAERLIKGGLAIPGMRSDPRVLERVLRRYIYPLTFLSSL.IVAALVIVA..DIFGAYG.........................................TG.TGLL....LAVG....IINQ...YYA A1RWR3_THEPD/75-456 TLIELGIGPIVTSGIVWELL...................VGSRIVNLDLT.TPEGRRTFAGLQKLTAFLFAALEAAAYI.LGGVYGALT......................QQQQIIVFV..QLFVASTFVILMNDMLEKGWGI.G.SAVSLFIAAGVA.QQIFWELFSPIGPL................GDGLYYGLFP...SLFSALV.................SGNSTLLMHVVVR......PSGY.....PDLVGFVGMVVM.LLLLTYMESMKITIPVSSVRF...................GGAKTR.IPLKFLYVSVMPVILVGAL..YANVV...MFTQAL.....WPRVNPGNQNPWL.............NVIAKYNYT.EY.........GPVPLPGSFVYYIS...P.PRSLA......................SALADPVHLVVY.SLLYIGFAVLFGVAWILTSGMDPETQAEQLAKAQLQIPGFRKSEKVIASMLKRYIWGLTILSSI.IIGVIAVVS..DIFRVMG.........................................GG.TGIL....LLVG....IIVQ...YYS SC61A_SCHPO/76-459 TLMELGISPIVTSSMLVQLL...................VGSQLIEVNME.LKSDREMYQLVQKFLAIIIAFGQATAYV.LTGMYG......RPQD...........LGAGIC..LLLIL..QLAAASLIVLLLDELLQKGYGL.G.SGISLFIATINC.ENIFWKAFSPTTYHI..............ANGVQFEGAVI...NFVYVMFT...............WDNKAAALYQAFFRSGLTSSQIQL.....PNLWNFFATLLV.FGVVIYLQDFRVEIPIRSQKF...................RGYRST.FPVKLLYTSNTPIMLQSAL..TSNLF...FASRLL.....FNRFSSNFLVR.................FLGVWEQ...............TATSGLSYYLS...P.PASFQ......................DALIDPIHTLVY.VFFTMFACALFSKLWIEVSGASPRDVAKQLKSQQLVMAGHRE..GSMYKELKRIIPTAAWLSGA.VVGALAVAS..DLLGALG.........................................SG.TAVL....LCTT....TIYG...YYE A7E5Q2_SCLS1/76-459 TLMELGITPIISSGMVFQLL...................AGTHLIDVNLD.LKADRELYQTAQKLFAIILSMGQATVYV.FTGLYG......QPSD...........LGAGVV..CLLIL..QLVVAGLIVILLDELLQKGYGL.G.SGISLFIATNIC.ESIIWKAFSPTTINT..............GRGPEFEGAVI...ALFHLLLT...............WPNKQRALQEAFYR.......QSL.....PNIMNLLATIVV.FAAVIYLQGFRVEIPVKSSRQ...................RGARGS.YPVRLFYTSNMPIMLQSAL..SSNIF...LISQML.....YSRFSENLLVQL................FGVWEPK.EGS........AQLFATSGIAYYMS...P.PLNFT......................DALLDPIHTAVY.ITYMLVACAIFSKTWIEVSGSSPRDVAKQLKDQGLVMAGHRE..QSMYKELKRIIPTAAAFGGA.CIGALSVGS..DLLGALG.........................................SG.TGIL....LAVT....IIYG...YFE Q5KC69_CRYNE/75-459 TLMELGITPIVTSGMIMQLL...................AGAQLIDVDFS.LKDDRALFGAAQKLFAMIISLGQATVYV.LTGLYG......SPSS...........LGAGVC..LLLIL..QLVSASLIVILLDELLTKGYGL.G.SGISLFIATNIC.ESIVWKAFSPNTVNT..............GRGPEFEGAII...ALIHLLFT...............WNDKTRALKEAFYR.......DRL.....PNIMNLLATVAV.FAAVIYLQGFRIEIPIKSSKM...................RGQRGT.YPVKLFYTSNMPIMLQSAL..TSNVF...LVSQML.....AGRFPDNLLVRL................LGVWEPM.ENN.......PTQLGAVSGIAYYMS...A.PHSLT......................SALKDPFHTVIY.IAFIVTACALFSKTWIEVSGSGPRDVAKQLKDQNMTLAGHRD..ASIYKELKRIIPTAAAFGGA.TLGLLSVVA..DMMGALG.........................................SG.TGIL....MATT....IIYG...YFE SC61A_ASHGO/75-460 TLMELGVSPIITSSMIFQFL...................QGTQLLQVNLE.SKQDRELFQIAQKVCAIVLTLGQAIVVV.LTGNYG......SVSN...........LGIAIS..LLLIL..QLVFASFIVLLLDELLIKGYGL.G.SGISLFTATNIA.EQIFWKAFAPTTVNN..............GRGTEFEGAVV...ALFHLLSV...............RKDKKRALVEAFYR.......DYL.....PNMFQVLSTVFV.FLFVLYLQGFRYELPVRSTRT...................RGQVGS.YPIKLFYTSNTPIMLQSAL..TSNIF...LTSQLL.....YQKFPNNPIVKM................LGVWGTR.SDAP......YSPNAAISGLSYYIQ...P.PFSFT......................EALLDPIKTVVY.VTFVLGACAMFSRTWIDVSGTSPRDVSKQFKEQGLVINGRRE..TSVYRELKKVIPTAAAFGGA.TIGALSVGS..DLLGTLG.........................................SG.TSIL....MATT....TIYG...YYE Q59MJ6_CANAL/76-459 TLMELGISPIVSSGMLFQLL...................QGTKIIHVDMQ.NKNDRETFQTAQKLLAILLAVGQATVYV.LTGMYG......PPSS...........LGVGVC..SLLIL..QLVFASTIVILLDELLQKGYGL.G.SGVSLFTATNTC.EQVFWKAFAPTTSTS..............AKGTEFDGAVV...AMFHLLGS...............RKDKKRALIESFYR.......PNL.....PNMFQLLATLLV.FFAVVYLQGFRIELPMKSTRQ...................RGPYGS.YPIRLFYTSNIPIMLESAL..ASNIF...IISQLL.....FMRWPNNLFVKL................LGTWDAR.AGS........SQLYANGGLAYYIQ...P.PFNFT......................DALLDPIKTTIY.IAFVLGSCAVFSTTWIEISGTSPRDVAKQFKEQGLVIAGHRD..TSAYKELKKIIPIAAAFGGA.TIGALSVVC..DLMGTLG.........................................SG.TSIL....LAVT....TIYG...YYE A7SJW4_NEMVE/75-458 TLMELGISPIVTSGLIMQLL...................AGSKIIEVGDT.PK.DRALFNGAQKLFGIIITIGQAVVYV.MTGMYG......DPSD...........LGPGIC..LLIII..QLFCAGLIVLLLDELLQKGYGL.G.SGISLFIATNIC.ETIVWKAFSPATINT..............GRGTEFEGAVI...ALFHLLAT...............RTDKVRGLREAFYR.......QNL.....PNLTNLIATIFV.FGIVIYFQGFRVDLPIKSARY...................RGQYSS.YPIKLFYTSNIPIILQSAL..VSNIY...VISQMM.....SAKFAGNFFVNL................LGTWEEA.GGG.......PARSYPVGGLCYYMS...P.PETVS......................HIIEDPVHACIY.IFFMLGSCAFFSKTWIDVSGSSAKDVAKQLKDQQMVMRGHRD..KSMVHELNRYIPTAAAFGGL.CIGALSVLA..DFLGAIG.........................................SG.TGIL....LAVT....IIYQ...YFE A0CFY2_PARTE/73-456 TLMELGISPIVTSGMILQFL...................SGVGFIEVNHS.VREDKVLFNAAQKLLSFIMAIAEGMAYI.WSGAYG......DINQ...........IGAGNA..ILILL..QLTFAGVIVTMLDEMLQKGYGL.G.SGISLFIATNVS.ENILWKSFSPITLST..............EAGTQFEGAII...NFFHLLFT...............KQNTLQALYYAFFR.......ESA.....PNLNNLLATLFV.ISLVIYLQGFRVEVPLASQKI...................RGLVSS.HGIKLFYTSNIPMIIQSTL..VQNVY...FLSQLL.....YRRFKTNFFVKL................LGTWQEA.EFG........GQSVPIGGLAYYMS...P.LRDVK......................DIINDPIHAVVY.VLFVVFMCGFFAKFWIQISGESAKDVARKFKDEQIKIKGLRE..ESMVKYLSGYIPVAAFCGGV.CIGLLTIVA..DILGAIG.........................................SG.TGIL....LAVT....IIYG...YFE Q22MG2_TETTH/151-538 TIMELGISPTVTAGMVMQLL...................VGAQILNIDQN.DPVQRSLYEGSQKLLGLIIAFFEAVAYV.WSGMYG......DIEK...........VGYGNA..LLIVL..QLTFAGIIVILLDDLLSKGHGL.GNSAISVFIAINIC.ETIIWKSFSPITYPIP............GFEKEQYEGAIL...NLFHSLFA...............IDNKFVALQNAFYR.......SHL.....PNLASLISTALI.FIVVVYFQGFKVDIALKNDRV...................RGAIQS.YPIKLFYTSNMPIILQSAL..ISNLY...FFSQIL.....YRNFNGNFIVGL................LGKWSIP.EAG.......GSHMVPVGGLVYYLS...P.PHGMI......................EVISDPLHTILY.VVFILTTCALFSKTWIQVSGSSVKDVAKQLKEQGMGLVGSRD..SGLKSHLKRYIPIAATFGGL.CIGALSVVA..DFIGVIG.........................................SG.TGIL....LAVN....IVYG...YFE A0CU87_PARTE/77-460 TLMELGISPMVTASMIMQLL...................AGAKLIDVDQN.VKEDKQLYSGAQKLLGILIAFGEAFAYV.WSGMYG......DLDK...........LGAGNA..ILIII..QLVFSAIVMIMIDELLSKGYGI.GNSGTSLFIAINIC.ENIMWKAFSPITHKT..............ELGLEYEGAII...ALLHGLFV...............QSDKISALQSAILR.......DSL.....PNLTNLLATVLV.FLIVIYFQGFKVDIPIKNNKV...................RGGLTS.YPIKLFYTSNIPIILQTAL..VSNLY...FLSQIL.....YRNFKGNFLIRL................LGYYQEL.EN.........GQTVPIGGLVYYVS...P.PRSIS......................EAIFDPIHTILY.TAFILGTCAVFSKTWIDVSGSSPKDVAKQLKEQDMQIVGYRD..SSMKDVLKRYIPIAASFGGM.CIGALTILA..DFLGAIG.........................................SG.TGIL....LSVT....IIYG...YFE Q7RLN0_PLAYO/121-506 TLMELGISPIVTSGMVMQLL...................AGSKIIDVDQS.LKEDRTLFQGAQKLLGLLITLGEAIAYV.VSGIYG......NLSE...........IGTGHA..ILIIL..QLFFAGVVVILLDELLQKGYGL.G.SGISLFIATNIC.ETIMWKSFSPTTINT..............DKGIEFEGAII...SLIYCLFT...............EFNKISALKKSFYR.......THA.....PNVTNLLATILV.FLIVIYLQGFRVDLSVKYQTV...................RGQQGT.YPIKLFYTSNIPIILQTAL..VSNLY...FFSQIL.....YKRFSNSILVNI................LGQWQEI.ESN........GTAVPIGGIAYYIS...P.PNSFA......................DITNDPFHTLIY.ISFVLVSCAFFSKTWIEVSGSSAKDVAKQLRDQHIGMRGHRDTPTSLTRVFNRYIPTAAAFGGM.CIGALTILA..DFLGALG.........................................SG.TGIL....LAVT....IIYQ...FYE Q4QGX4_LEIMA/77-467 TLMELGISPIVSASLILELL...................AGVRILTYDQN.NREERAVFEGFQKMMGLVITAVEAVAYV.SSGMYG......DPSR...........IGVVMC..GLIVL..QLMVATMICILLDELLQKGWGI.G.SGTSLFIATNVC.DTIIWKAFSPSTINT..............GRGAEFEGAII...AFFHLLVS...............RTDKVRALREAFYR.......PQL.....PNLTNIFSTAVV.FAVVVFFQGFRVPLMTKSKFN...................GNDRQP.YMIKLFYTSNMPIILQTSV..VSNIS...FFSQIL.....SRRFGNRNFLIN...............LLGRWEER.GYNGG....GSGQLFPVGGLAYYLV...P.PATFY......................DLLADPIHAIFY.VVFVLTSCAVFSRLWITISHTAPRDVAKQLASQGRWLVQARESEDDMTRLLEKYIPVAASFGGL.CVGALTIFA..DFLGAIG.........................................SG.TGIL....LSVT....MINQ...YYE A5JEK2_NOSBO/75-457 TLMDLGISPVVTASMIMQFL...................GMLELVKVDYN.VKEDKILHGAANRLISLIMTVGSAIVQV.LTGFYG......DPKA...........LGWTYC..ILLMV..QLIFSGVIIILLDELLQKGYGL.G.NGVNLFIASNVC.ESIMWRAFSPKVFFT..............GRGIEFEGSLI...AFFHLLIV...............RKNKFAALYEAFFR.......QNL.....PNMFSLVSTVVL.FAFVIYLQGLRVELKTESTQV...................RGQTGM.YPVKLLYSSTMPIIVQSYV..ISHIC...TISRFL.....YKRFPTYFLVRA................LGVWSSE.GS.........SKYQPIKGLCYYIL...P.PESIF......................DFKLRPFYFLFY.VLFTIISCSMLSRAWVEVSDNTPTQVASQMKKNKMTLKGVRE..VNCASVLSKYIPTAALLGGC.FTSLVVLIS..NLFDTIG.........................................SG.TNIF....LATS....IVHQ...YLE A2DH65_TRIVA/75-462 SLMEFGISPIVTSGMILQFL...................CSFGLINRNPS.DPEASALFDAAQKLAGIIMTAFQAGNAI.WSGEYG......IRGE...........IGFVNA..ALIMT..QLVSSAIVVILLDELCQNGYGI.G.SGISLFICTNIC.EMIMWRLFSFNHYSM..............GRGTEYEGLVI...AFFHYLFT...............RKNKLRALRDIVFR.......PQL.....PNLCQLFSTVIV.FGACVYFDQIKINIGLETTVN...................RARPEP.FEIKLFYCSNTPPIIQSTI..LSQLA...GFSRTI.....YFHWPESLATQI................FGVWRSH.NGMS......YDYSTPVSGLIYYLT...A.PQSIQ......................QTIHDPLHTIIY.LIFSLSSAGFISYYYLRFSNQAPADVAEALKKQHLTLKGHREDQKRLEKTLSRYIPTAAALGGI.LVALLSFVA..DFLSAFG.........................................SG.TGII....LAVS....IINQ...FTA Q2QM98_ORYSJ/88-448 TVMELGVAPVVTSWVVVRLL...................AALL........FDSDSSTTVASCELLARCLAYVTNASRL.VIG.........IAAALGM.....CGSGGAGNA..ALVVL..QLFAGGVVVVLADLLHETGYGVEGVSAASLLIATNAC.ERAVSHLFSPVKLRL.............AGAGPEFEGPVF...AVTHRVAAAP...........PSWRHKAGALLFTLLR.......LDL.....PNLSNYMTTCVM.FVLAVRLDETHLRRLYRSRPR...................RGTDEF.VPIKLLYTSAMPIMLHASA..VSAFC...V...............DAG.......................GGAA...............YPVGGLVYYVT...P.PSKLL......................VDPGLIHELLIH.SVFVVASCTLLSMAWAEASRSSAREFRTRVIGTGYFVW......DETSRRIDRVIAAAAAVGGF.AVGGLAVYA..GAVGAIG........................................EAG.PELL....FAVL....VIKN...LAE Q6AV46_ORYSJ/86-471 TVMELGITPVVTAGTLVQLL...................VGSNLVRADSS.NPDDRALLSAAQKLLSIVITAGEATAYV.LSGAYG......SVGV...........LGAGNA..VLVVL..QLVLGGMVAIFLDELLQKGYGF.G.SGISLFTAANTC.EGVVTRALSPATMDR..............GRGAEFVGAVT...AAAHLLAT...............RARKLSAVREAFFRGG...GGGSL.....PDLRGLAATCAV.FLAAVYLQGVRVALPVRPRNA..................PRSHRGGAYSVRLLYTSGMPVVLLSSA..VSSLY...VVSQAL.....YRRFGGSLLVD.................LLGKWTP.D...........AAVPVGGIAYYVT...A.PASAA......................SAAANPLHAAMY.VAFVLAACAALSRAWVVVSGSSSRDVARRLREQQMVMPGMRE..ASMQRELERYIPAAAALGGV.CVGALTVAA..DLMGAVG.........................................SG.AGML....LAVT....TVYQ...CYE Q6C854_YARLI/70-454 TLMELGVGPMVTSGIIFQIL...................GGFQALNVNFD.IRADRELFQSGQKIFALLLTFFHAIFLVFFAQTYGTISTDSAVS.............ELSLGAAVLIVA..QLTAAGLVLILLGEIVDKGYSF.G.SGSGLFTALSVS.QNFMWQNLALLKVHQEFVGS...IPALLMGLWKNGLFNFG...GSYRYVI...................ENSFFRQNLP.........N........LLQLYMSVAV.FMLTIYLNTFRVDIPIKSSRV...................RSLATA.FPVKLLYTGSMCLFLLSAF..SQNVL...IYSQSL.....YVQFPDNLMVQV................LGSWGADG..............SPVGGIAYYI.....SPNNF.........................GYDVIKMVLY.SVYTIVGCTLFSKYWAEISGSAPKDVAKQFQAQSIVIVGQRA..QSAPRELAKVIPVAAAVGGA.VVGAIVAFC..DIFGGLG........................................ASA.APMI....VAVT....SMNN...YFE SSH1_YEAST/78-465 TLLEFGLFPNISSGLILQLL...................AGLKVIKVNFK.IQSDRELFQSLTKVFAIVQYVILTNIFI.FAGYF.......GDD............LSVVQI..GLINF..QLVGAGIFTTLLAEVIDKGFGF.S.SGAMIINTVVIA.TNLVADTFGVSQIKVG............EDDQTEAQGALI...NLIQGLRSK..............HKTFIGGIISAFNR.......DYL.....PNLTTTIIVLAI.AIIVCYLQSVRVELPIRSTRA...................RGTNNV.YPIKLLYTGCLSVLFSYTI..LFYIH...IFAFVL.....IQLVAKNEPTHII..............CKIMGHYE.NAN........NLLAVPTFPLSLLA...P.PTSFFK.....................GVTQQPLTFITY.SAFILVTGIWFADKWQAISGSSARDVALEFKDQGITLMGRRE..QNVAKELNKVIPIAAVTGAS.VLSLITVIG..ESLGLKG.........................................KA.AGIV....VGIA....GGFS...LLE Q6BT20_DEBHA/78-475 TLLELGLLPVLTSAFIWQLS...................AGFRFINVNLN.LRSDRELYQSGQKLTSFIFAIVYGAGYI.FSGYYNNVIKGYNPFN..........GDSVPVTTLVLIFL..QIVTMSFVTTLMVEIFDKGYCF.G.SGVLCFVALQVA.TNLIRDVVGLELVSLP............NSNKFESYGAAM...NFIKNFR.................INFKSLNYNVLN.........SFTRSQLPNLSQFYIVLVT.VLVLIGVQNYRIELPIRSTKV...................RGMNNV.YPIRLFYTGALPILFAFTV..LTNLQ...VFGYFT.....STLLNNYSQLAASII.........GTWSLDTKSFNL..............NLTSGILYFL.....TPSKSLA.....................QSLLSPIRSVTY.GLAIITLSTWFAYRWSRISGSSPKDISKQFKEQGISISGKRD..ISITKELSRVIPVASVSGAF.VLAALAIAG..ELLGGLG.........................................KG.VAAI....IGVC....GAFG...ILE A5DE75_PICGU/20-414 TLLELGLLPVMTSAFLWQLA...................AGLRLVKVNLS.LRSERELFQTGQKLTSFILGIVYTAGLI.ASGYFAPALR..NQTGFE.......DSFPVTTY..VFIFL..QVFVMSAVMTLLVEVFDKGYGF.G.SGILCFIALQAA.SDLVKNIIGLEVVKLA............NSNKFESVGALM...NLIRSFSF................KTLGKNIYNSFNR.......EHL.....PNLTQVYITIVT.LLVVVALQNFRIELPIRSTRA...................RGMNNV.FPIRLLYTGALPLAFAYTV..LTNLQ...VLGYIA.....SQLLESYSPVASS..............VIGKWTID.YRS........SNLKVSSGILYFLS...P.PTSIL......................NTLVSPLKTAAF.TFVVIVLSAWFANIWSSISGSSPKDISKQFKEQGISIAGKRD..ISITKELSRVIPVASVSGAT.VLGLIAVAG..EVLGGAG.........................................KG.VGTI....IGVS....AAFG...VLE A3GFV9_PICST/78-476 TLFELGVLPVVTAAFFWQLA...................VGLKLVNVNLG.LRSDRELFQTGQKLTSFVLAIVYGVGLI.YSGYYDNAIRGYDPLSD.........STPYGWY..GLILF..QFLSWSFIITLIVEVFDKGYAF.G.SGALSFLALQTA.TNLIAELVGLEIFPIN............NSNKFESYGALI...NFTRNFSFDI...........SKIGTNVYNSFTRLQ.........LP......NFTSFYITVAT.TLAVVYLQNLRIELPIRSTRA...................RGMNNV.FPIRLLYTGALPVLFAYTV..IANIQ...YFGYLA.....YVVLQKANVSSFALSI.......IASFNLDSYSNRL..............NLTSGALYFF.....SSSPSLL.....................STILSPIRTVVY.SATVIVLATWFAEKWSYISGSAPKDISKQFKDQGISISGKRD..ISITKELSRVIPVAAVSGGF.ILAAIAVAG..DLLGGLG.........................................KS.AATI....VGVS....AAFS...VLE A5DWJ5_LODEL/34-436 SLLELGFLPIITSAFLWQLA...................AGLKLININLG.LRYDRELFQLGQKLTAWGLALIFSVGLI.YSGYYDNVIR..GYKVVGG.....SGGVPIWSY..LIIFT..QIFTWQIVLTLIVEIFDKGYGF.G.SGILSFLALQNA.TSFIAELVGLEMFPVV...........NNTLKFESLGALL...NLVRNFSIF.............SPTTTINQIWHAFTR.......VQL.....PNLTQFYITLAT.ILAVVLLQNFRTEISIRSTKV...................RGMNQM.FPIRLLYTGGLPVLFAYTV..IANLQ...VFGFIF.....EAALVKLTASPIVS............TLFANYVVE.PYS........NRLVIKSGVLYFFT...A.SQTLL......................QSIISPLRVVIY.SSTVVGLATWFAYKWSYIAGSSPKDISKQFKEQGISIAGKRD..ISITKEFAKIIPTAAVTGAF.ILSALAVTG..DYLGGLG.........................................RN.VASI....VGVS....SAFG...ILE Q5A2C9_CANAL/5-404 TLLELGLLPIITSAFIWQIA...................AGLRLINVNFK.LRIDRELFQTGQKLTSFIFSLIFAIGLI.YSGYYDNAIR..GYNPLQ.......DGIPYGSY..ALILL..QITAWSWIVTLLVEIFDKGYSF.G.SGILCFLAIQSS.TNFIANLLGLENFPVV............NSNKFESYGALM...NLIKNFSIF.............NPKQTVYQIWHSFFR.......IQL.....PNLTQFYISLAS.ILIVVALQNFRIELPIRSTKV...................RGMNNV.FPIRLLYTGGLPVLFAFTV..VANIQ...VVGYLI.....HSVLSKLGTSPIVI............SIIGNYVYN.PSS........NELDLNSGILNYFT...S.SSSLV......................ESIISPIKTTVY.SITIIVLAVWFANKWSYISGSSPKDISKQFKDQGISLAGKRD..ISITKELSRVIPVASVSGAF.ILSVVALIG..DFFGGLG.........................................YG.VASI....IGVT....ASFA...VLE Q74L41_LACJO/64-372 SIFSIGLNPLMFSMLIIQLL...................SFTHSFGFDA....LSPKQVQYLMQFLTMIITIIQAALLVFAFTNRRN........................GLEDFEMIL..ILSAGSCLVVWLCYRNMK.YGV.G.ASAPVILTSILN.GAIP.......................................NIISNVK..................LLLTMKYAWIW.........L........AALAIFILLL.IKFWLAFTKAYYPLKVVNPSL.................PASSNLMT.VPLGLNMAAMMMYMVGMAI..LTLPL...MVGRYF.....SSSSL..............................................................................................INNWVFQASFSAVMGILIFYFFT.FVNFDPKEQAKSFRNNHYYIPNIAPG.RPTQRYLNRLIWIIAFPGAV.LNAFQLVFG..LYGGNFL........................GN..............YAG.FAIIPMNVVMIT...........MFM B3XPQ8_LACRE/65-377 SLFMVGLNPLMIAMLIIQLL...................TMLRLFYFDT....LSMNQLMKIQQWLTLGFAIIQSTAVTLGLKITTG........................TLDSLAVIL..MLTAGSMFVVWLGNMNMK.FGI.G.GTITLILFNIIS.GSIP.......................................TLLRSIK..................MLAKQSYGPLW.........L........FLAAIAGCIV.LVFWVSFNRAYYPLKMINTSM.................SSHDRPII.LPIGLNMGAMMTYMVGMSL..LMVPT...LLANVL.....GPGSL..............................................................................................FANPYFNMVVSGILAFVLFYFFT.FVQFDPKAQAKAMLQGNNYILGVRPG.EPTRKYLRQILLHVSFLGAL.LNAIQLSFG..LLGGQVL........................GN..............FAG.LAIIPMNMIMIV....MFMQ...GIK A1C3L4_STRPA/70-403 TLFSLGIGPTMTMMILWRFL...................ITFKLI......GSWTSNKVNRLQFLLTLAIALLQSFGITNDSKFLLIFGYSH...................STLRIITII..LLTTGTFILNWLCKINSE.RGI.G..GMTVVILVNMI.LTFQSN................................II...RYFSVQQ........................FKFSS.........LI.....QYGLVFFVALSILIWFNILLYKGEYRIPIQRVGL................NTPYHASSY.LPIRVTPAGAMPFMYGMTL..MMLPPYIFVVLLHI.......................................................FPGNQILEYLSVHIG..................................LSQLPG.VICYIFLLYFLSIGFA.YYNYDPYEISKNMRNNGDYISGKKPG.EETIKYIQYVVNSFAQFGAF.TVIIFGGLP..MLAVLLQ..........................GQG....KNSVSIALLI.SNAY....IIVS....LLLG...VIE Q3DVD6_STRAG/65-395 GVFSLGIGPMMTTMILLRLF.........................TIGKYSSGVSQKVQQFRQNVVMLVIAIIQGLAITISFQYHNGFS......................LTKLLLATM..ILVTGAYIISWIGNLNAE.YGF.G..GMTILVVVGML.VGQFNN................................IP...LIFELFQ.......................DGYQLA.........I........ILFLLWTLVA.MYLMITFERSEYRIPVMRTSI................HNRLVDDAY.MPIKVNASGGMAFMYVYTL..LMFPQYIIILLRSI.....FPTN..............................P...............DITSYNDYFS.......................................LSSIQG.VVIYMILMLVLSVAFT.FVNIDPTKISEAMRESGDFIPNYRPG.KETQSYLSKICYLFGTFSGF.FMAFLGGVP..LLFALG...........................N.......DDLRTVSSM.TGIF....MMITGMSFMILDEFQVIR A5LN99_STRPN/64-389 SIFSVGLSPWMSAMILWQMF...................SFSKRLGLTST....SIEIQDRRKMYLTLMIAVIQSLAVSLRLPVQSSYSA.....................ILVVLMNTI..LLIAGTFFLVWLSDLNAS.MGI.G..GSIVILLSSMV.LNIPQD................................VL...ETFQTVH........................IPTGI.........I........VLLALLTLVF.SYLLALMYRARYLVPVNKIGL................HNRFKRYSY.LEIMLNPAGGMPYMYVMSF..LSVPAYLFILLGFI.....FPNH..............................S...............GLAALSKEFM.......................................IGKPLW.VYVYISVLFLFSIIFA.FVTMNGEEIADRMKKSGEYIYGIYPG.ADTSLFINRLVLRFSVIGGL.FNVVMAGGP..MLFVLF...........................D.......EKLLRLAMI.PGLF....MMFG....GMIF...TIR A3CM55_STRSV/64-391 SLFSVGLSPWMSSMLIWQMF...................AVSKRLGLSKL....PLEVQERRRMLLTLVIALIQSVALVLNLPLQEAAGVDM...................TTIMVLDTL..VLMAGTYFLIWLTDLNAA.MGL.G..GSIMIVMASMI.AYIPQD................................IW...NSIQELK........................ISSLW.........L........ALMLVFSLVF.LYLAVTVERSKYRIPVNKINI................HNRFKKYSY.LDIRLNPAGGMPIMYAMTL..VSIPQYFLLIIHFL.....QPEN..............................Q...............LIEQWIEALS.......................................MGSPAW.FILYLLTIFILALAFA.FINISGDQIAERMQKSGEYIENVYPG.GATRRYINGLVTYFALVGAF.YLILISGLP..MMVVLV...........................D.......IRYLRLSMI.PGIF....MIFI....GMVF...SIK Q03HZ8_PEDPA/65-396 SLFSVGLGPYMTGMILFQAI...................QLLDIDELNKI....NDYKRGMIQRWISFVIALLQTLQFIYTIREHINFSGIKVW...............GIDYNLIVAFF..VLVAGAMIVAWMSDMITK.YGI.G..GSGVLILPGMI.DSIPRV.....................................LLYGQGL......................GSGAVFF.........TP.....KLWLVLIISVAVVVIFTIFINKAELRIPLQRPFV.................QNDFSESY.LPIRVLAAGSMPFMFTTTV..FMIPS...YIGSFV.....PEG...............................................EFNRFVQNYV....A..................................FDNPVG.ILIYCSIIVFLGYVFS.FMNFQTERLTKNLKKSGDYIFNVVPG.TATRHYLNQRLFHLSTVANI.FFLIIVGTP..LIVGLYL..........................P.......EITNFAFVF.ANIL....ILIT....IIDT...TMD A5IW80_STAA9/64-384 NIFTLGLVPWLTSMIILMLI...................SYRNMDKYMKQ....TSLEKHYKERILTLILSVIQSYFVIHEYVSKERVH......................QDNIYLTIL..ILVTGTMLLVWLADKNSR.YGI...AGPMPIVMVSII.KSMMH......................................QKMEYID........................ASHIV..................IALLIILVIITLFILLFIELVEVRIPYIDLMN................VSATNMKSY.LSWKVNPAGSITLMMSISA..FVFLK...SGIHFI.........................................L............SMFNKSISDDMPM.LT..................................FDSPVG.ISVYLVIQMLLGYFLS.RFLINTKQKSKDFLKSGNYFSGVKPG.KDTERYLNYQARRVCWFGSA.LVTVIIGIP..LYFTLFV..........................P.......HLSTEIYFS.VQLI....VLVY....ISIN...IAE Q4L9N9_STAHJ/61-383 NVFSLGLGPWLTSLVIIMLL...................NYRNLDQATKQ....TRSEKHYKERIITIVFAIFQSYFVISTYIHNNFIK......................DSNIILLML..ILVAGTMLLVWLADQNIT.YGI...CGPMPIVLTSLI.KSLFNN.....................................QHFFKLS........................VSVLL..................LILVIVTLVIALLILLFIELSEYRLNYKDIMN................NSTNKTPTY.LAWKLNPAGSISIMISLSV..YVLLN...NMINLI.........................................A............TLLGSNANFEFL...S..................................FANPIG.IMFYIVLQIVLSYLLS.RFLINTKKKADEFLKNGNYFDPIRPG.RETERYLNSKARRVCWTGAI.LVALILAVP..LYSTLLV..........................P.......NLSTEIYFS.MQLI....ILVY....ISINIGETIR Q5HKR3_STAEQ/61-380 NIFSLGLGPWLSSMIILTLI...................NHKSNDKVKTQ....TRRERHFKERALTLIISAAQGFYIIHSYINKHAIK......................DSNMLILLL..VLITGTLLMVWLADQNTT.YGI...SGPMPIVLMSLV.KSIFN......................................THFPKLN........................SSASL..................ITMIIVLLVLALFILFFIELTEYRIEYNDIMN................ISAKDIPSY.LSWKLNPAGSISIMVSLSL..FMLTN...NIVNFI.........................................G...........RFIVNHNFETHVF...N..................................FTNPVG.ITIYLLLQMILGYFLS.RLLINTKRKSKEFLKNGNYFEGIQPG.QQTEKFLGSKARRICWFGSI.VVAIVLAIP..MYSALLV..........................P.......HLLKEVYFT.TQMI....VFVY....IGIN...IAE Q9RSK8_DEIRA/68-413 SIFALGVLPYITASIVIQLL................TT.TIPSLEKLSKE.GEEGRKKINQYTRYAAIALGAVQALFFSLYI..TSNPSFIAVGW.............DPGLFTVLVMVL..TQVAGIAFTMWIGERITE.VGI.G.NGISLIITAGII.AVYPRE................................IA...ATAQLLR.....................SEQTTLLS.........I........LAFIAVILVT.IAGIVYIYQAERRVPVTYARARGGAAGQ.....ARG..AGQ..ATW.LPIKVNQAGVIPVIFASAM..LIIPN...LIASAT.....ATRA..............................P...............EVNAWINSNL......................................TFGQPLY.LALESLLIFGFTYLYN.SVQFDPKRIAEQLREAGGFIPGVRPG.GPTADFLGRISGRLSLWGAI.FLVILTILP..QLVQKAT........................GI..........TTFQFSG.TGLL....IIVG....VALE...TLK Q5SHQ8_THET8/71-413 SIFALGIMPYITAAIIMQIL................VT.VVPALEKLSKE.GEEGRRIINQYTRIGGIALGAFQGFFLATAFLGAEGGRFLLPGW.............SPGPFFWFVVVV..TQVAGIALLLWMAERITE.YGI.G.NGTSLIIFAGIVVEWLPQ.................................IL...RTIGLIR.....................TGEVNLVA.........F........LFFLAFIVLA.FAGMAAVQQAERRIPVQYARK...VVGR.....RVY..GGQ..ATY.IPIKLNAAGVIPIIFAAAI..LQIPI...FLAAPF.....QDN...............................................PVLQGIANFF......................................NPTRPSG.LFIEVLLVILFTYVYT.AVQFDPKRIAESLREYGGFIPGIRPG.EPTVKFLEHIVSRLTLWGAL.FLGLVTLLP..QIIQNLT........................GI..........HSIAFSG.IGLL....IVVG....VALD...TLR #=GR Q5SHQ8_THET8/71-413 SS BTT----HCCCCCCCHHHHC................CC.CSCCHHHHHC-.-----CCHHHHHH------------HCCCCT--------S----.............----HHHHHHHH..HHH---HHHHHHHHHHCC.---.-.---CHHHH---CCCCCHH.................................HH...HH-----.....................-----CCH.........H........HHHHHHHHHH.H---HHHHC-EEEEEEE----...----.....---..---..ECE.EEEESS----HHHHHHHHH..CCHHH...HCCTT-.....TTS...............................................TTT---CCCC......................................-TTS---.-HHHHHHHHHHHHHHC.CTSSHHHHHHHHTT------------.-CCCCCCCCCCCCCCC----.----TTTHH..HHHCCC-........................--..........--GGG--.---T....TT--....-HHH...HHH SECY_CORGL/73-424 SIFAIGIMPYITASIIVQLL................TV.VIPHFEELKKE.GQSGQAKMMQYTRYLTVALALLQSSGIVALADREQLLGAGIRVLS...........ADRNFFDLIVLVI..TMTAGAVLVMWMGELITE.KGV.G.NGMSLLIFAGIA.TRLPTDGM............................NILG.................................NSGGVV.........F........AVVLASVLIL.VIGVVFVEQGQRRIPVQYAKR...MVGR.....RQY..GGS..STY.LPLKVNQAGVIPVIFASSL..IYMPV...LITQIV.....NSGSLEV.........................SDN...............WWQRNIIAHL......Q...............................TPSSWQY.IVLYFALTIFFSYFYV.SVQYDPAEQAENMKKYGGFIPGIRPG.RPTAEYLGFVMNRLLFVGSL.YLAVIAVLP..NIMLDL.........................GVDA.....GSAGATPFGG.TAIL....ILVS....VALT...TVK A8LB12_FRASN/74-414 SVFALGIMPYITSSIIIQLL................VV.VIPRLEQLKKE.GSSGEQKLTQYTRYLTVALGILQATGIVALARSGRL.....FPGCSA......QIIPDTSLFRIVTIVI..TMTAGTAVIMWMGELITA.RGV.G.NGMSLLIFTSIA.AALPSQGG............................RILQ.................................VAGGVV.........F........GLVILLGLAI.VVFVVFVEQSQRRIPVQYAKR...LIGR.....RMY..GGT..STY.LPIKVNQAGIIPVIFASSL..LQLPQ...LVGQVW.....SNQTFQ............................D...............FEQRYLSR.........................................GDHPLY.LVAYGALIIFFTYFYV.AITFNPTEVADNMRKYGGFIPGIRPG.RPTAEYLDHVLSRITLPGSL.FLGVITVLP..LALLNLT........................KD..........QPFPFAG.TSVL....IMVG....VGLE...TVK Q83NQ1_TROW8/73-424 SVFALGVMPYITSSIIIQLL................RV.VVPRFEQLYKQ.GQEGQAKLIQYTRYLTIGLAVLQSTTLITVARSGAL..FAASNSPACS.....SLLTDDSWYSTIIIVI..VMTAGTGLIMWLGELITE.RGI.G.NGMSILIFTSIA.AGFPGV................................LV...GVYQT..........................RGFGM.........F........STVVITSLVV.MVGVVFVEQSQRRVPVQYAKR...VVGR.....RIL..GGG..STY.LPIKLNMAGVVPVIFASAI..LRVPS...IIAQFS.....QPAPGQP.........................PAA...............WVVW.INENF......T...............................TGNSPFY.IALYFFMIVGFTYFYV.AVTFNPTEIADNMKNYGGFISGIRPG.VPTANYLSYIIKRITLPGSL.YLGIVSLIP..LIAFALF........................GLSA......DIP...LGG.TSVL....IMVG....VGLD...TVK Q8G3Z9_BIFLO/74-421 SIFALGVMPYITASIVVQLL................RV.VIPRFEALHKE.GQSGEAKLTQYTRYLTIGLAVLQSTTILVTARSGAL.....FNYQCD......QVIPDGSVFNLVVMVL..IMTGGTGLIMWMAELVTD.KGI.G.QGMSILIFMSIC.SGF...................................LP...QLWEIGY..................GTNGTDGDWLK.........F........GIVVGVLVVI.LIFVDFVELCQRRVPVQYTRR...MIGR.....KMY..GGS..STY.LPLKINMSGVIPPIFASSI..LAIPT...LIAQFG.....KSDQ..............................S...............WVKW.INANL......A...............................NTTSVWY.IALYALMIVFFCFFYT.SITFNPDETADNMKQYGGFIPGIRAG.NATSRYLTYVMNRLNTVGAV.YLLFVALIP..TVLIMAL........................GL.........NAKLPFGG.TTIL....IIAG....VGLD...TLR A7B9M4_9ACTO/72-414 SIFALGIMPYITASIIIQLL................RV.VIPRFDDLHKE.GQTGQAKLTQYTRYLTIFLGILQATTTISLARSGQL.....FQSCNH......DIIKDRSVMTFIMMII..VMMAGTGVIMWLGELITE.RGI.G.NGMSLLIFTSIA.ARLPEQ................................LL...SIGQA..........................GKWGS.........V........AAIVALLLLV.AIAVVYVEQAQRRIPVQYAKR...MIGR.....RQY..GGT..TTY.IPLKINMSGVIPVIFASSI..LALPP...MAAQFG.....SPND..............................K...............WVQW.ISAHF......................................TQGSSFY.LTIYALMTLFFTFFYT.AITFNPDEVADNMKKYGGFIPGYRAG.RPTAEYLRYVINRITSAGAL.YLVIIALLP..SLAIIPL........................QLS........SSQMPFGG.TTLL....IIIG....VGLQ...TVK SECY_CHLTR/73-433 TVIALGVVPYISASIIVQLL................VV.FMPTLQREMRESPDQGKRKLGRMTRLFTLVLACVQSLLFAKFALRMNL..VVPGIVLPAMLS.LKLFGVPWVFY..LTTVV..VMITGTLLLMWVGEQISD.KGI.G.NGISLIITLGIL.ASFPSV................................LGSIFNKLNLGS..................QDPS.EFGIVS.........L........LILCAVFVFV.LMATVLIIEGMRKIPVQHARR...IIGR....REVV..GG...GSY.LPLKVNYAGVIPVIFASSL..LMFPA...TIGQFL.....SSES..............................S...............WLKR.IATML......................................SPGSVAY.SIFYVLLIIFFTYFWT.ATQFRPEQIASEMKKNGAFIPGIRQG.KPTQTYLEYTMNRVTLLGAV.FLAVVAILP..SILGRIL........................RVDA......NVSYF.LGG.TAML....IVVG....VILD...TMK Q1AU49_RUBXD/70-408 SVFALGIMPYITAAIVMQLM................TV.AIPRLQELARE.GEVGQQKITQYTRVFTLALSFIQSVAMVLFLRSGQFGPVLAG................AGALDLFLVVV..TLTTGVMVTMWFGELITQ.RGL.G.NGISLIITASIL.SQAPNA................................VR...TLIE..........................DGSVLT.........M........VILGIIAVMI.VAAIVFVNEGQRRIPITYAKR...QVGR.....RMS..QGG..TTY.LPLKVNMAGVIPIIFASSL..LIFPV...VITQFA.....AGGDQS............................S...............WLFR.LAQIF......................................APPSAPY.LILYALLIVMFTYFYT.AVQFNPIEHADNLKKSGGYIPGIRPG.QPTALYLNSVLTRITLFGAV.FLAVIAVLP..YLITGAL........................NLP........NSIY.LGG.TSML....IVVG....VSLD...TVR Q8RIH6_FUSNN/75-411 SIFSLGIIPYINASIVVSLL................VS.IIPQLEEIQKE.GESGRNRITQWTRYLTIALAIIQGTGVCLWLQSVGLIYNPGI.................SFF..VRTIT..TLTAGTVFLMWVGEQISI.KGI.G.NGVSLIIFLNVI.SRAPSS................................VI...QTIQTMQ......................GNKFLIP.........L........LVLVAFLGTVTIAGIVLFQLGQRKIPIHYVGK...GFSS.....K....GGIGEKSF.IPLRLNTAGVMPVIFASVF..MLIPG...VIVNAL.....PSTL..............................................SIKTTLSIIF......................................GQNHPVY.MILYALVIMFFSFFYT.ALVFDPEKVAENLKQGGGTIPGIRPG.EETVEYLEGVASRITWGGGI.FLAIISILP..YVIFTSM........................GL..........PVY.FGG.TGII....IVVG....VALD...TIQ A6DRC9_9BACT/79-428 GV..LGIMPYITASIIMQLM................TP.VFPNLEKLQKD.GSHGRQKLNQYTRYMTIVICAVQSAMMAVAMHTPSK....LLGVPGFED...LVINKGSAFV..IQTTI..IVTASAILIMWLGEQITD.KGL.G.NGASIIITINVL.SSMPQA................................FA...AVYSK.Y..................QE.G.EWNLVQ.........I........LVVVGILFIV.TAATVALVQGMRKIPLKYARD...ASSR.....NAM..IEK..TSY.LPLKVNHAGVMPIIFASAL..MMFPP...MIINKI.....GG................................D...............FART.VAPYF......................................DFGSTSY.LIIQGVMILVFTFFWV.ATQFNPIQIADDLNRSGAFVPGHRPG.EPTSTFLNDTMTRITVAGAI.FLVILALLP..YVLMNAM........................GSGSTD..FIITQF..FGG.TSLL....IMVG....VVLQ...TMQ C0ACZ0_9BACT/94-454 AVCALGIMPYISASIIFQLM................TA.VVPSLARLQQE.GDVGRQKLSQYTRYATVLICLIQGALLILALENPTQLFGEGYDIARYGE...IVLVDRTWFL..ISSVI..FMTAGTMLLTWLGEQITQ.RGI.G.NGISLLITIGII.SDLPGA................................MGTLWTLLRAPV..................GT.Q.GISMIS.........L........TFMVILFFAV.TMGIIMVVQGQRKIPVQYAKR...VVGN.....KVM..GGQ..NSF.LPLKVNYSGVMPVIFASAI..LLFPQ...QIFRYL.....GAAFNL............................P...............FLIE.FSNNL......................................MRGHWVY.YVTMTLLILFFSYFWV.SVMFKPIQIAEDLKKYGGYIPGVRPG.EPTAKFLDFVMTRITLAGAI.FLTIIAVFP..DFLNAEL........................NVPQ......RISSF.FGG.TGML....ITVG....VILD...TMK Q1Q157_9BACT/75-434 AIFGLGVMPYISASIIFQLL................VG.VVPYLERLQKE.GEVGRKKINQYTRIATVGLCLFQAFVMTRTLYTVEF.....NGVPVIP.....VYLQGVSFQ..LMAAI..LLTTGTMILMWIGEQIEE.HGI.G.SGISIVIMVGII.ERLPWAF.............................NQIV...QNFTFSV..................APAEHQIGIVK.........L........LILLGMFFAI.VGGVVYITQGQRRIPIQQAKH...TRGR.....RVY..GGQ..RHF.LPLRVNQAGVMPIIFAQSL..LIFPA...AIMQGI.....QIRFEPGS........................VGY...............WITSRLSGIL......................................Q.EGVLY.VMLYILLITFFCYFWT.AIQFNPREMSNNMKDYGSFIPGIRPG.HRTAEYLESIMGKITLAGAA.FLSLIAILP..KLVAGGF........................ELNR......AIAGF.YGG.TGLL....IIVG....VALD...MVQ A6CGP8_9PLAN/77-435 TIFGLGIMPYISASIIFQLM................GT.VYPPLERLQKE.GEAGRKKINEYTRYATVVICLVQSFFWIRTLAGGFG.....SGTSLIL.....DGYQGLYFQ..IVATI..TMTTGTVFLMWIGEQIDA.YGI.G.NGISLLIMAGIL.ARMPQAGW............................SLIE...PAFEKGI..................ALGT.DTGIDR.........L........LILALVFVFV.VVWVIAITQGQRRIPIQSAKH...VRGR.....RVS..GGQ..RQS.LPLRVNQAGVMPIIFASSL..LMFPY...FLFHGL.....SQYF.ST.........................SAF...............W..AMLDEAF......Q..............................PMSRGFVY.TMSYVVLIYFFCYFWT.AITFNPKDMAENLKDYGSFIPGYRPG.ARTAAYLEQVMVRITYVGAA.FLSLVAIIP..TLVSTWL........................GVDF......LVASF.YGG.TGLL....IVVS....VVLD...LVN B4S5A8_PROA2/73-417 SIFSLGIMPYISASIIVQLL................GA.VTPYVQKLQKE.GEEGRQKINQYTRYGTVLIAALQAWGVSVSLASPSSFGTIVVP..............DPGFFFMMTTVL..ILTASTVFVMWLGEKITE.RGI.G.NGISLIIMIGIL.ARFPQS................................VI...AEFQSVS.....................LGSKNWII.........E........FIILALMVLI.VAAVVVLTVGTRRIPVQHAKR...VVGR.....KMY..GGS..TQY.IPMRVNTAGVMPIIFAQSI..MFLPN...TFLSFF.....PES...............................................EVMQNVATIF......................................SYDSWWY.ALMFGTMIVFFTYFYT.AIAFNPKEVADTMRRQGGFIPGVRPG.KSTADFIDNILTRITLPGAI.SLAFIAVLP..TFLTKFA........................NVTP......GFAQF.FGG.TSLL....IIVG....VGLD...TLQ Q2S3P5_SALRD/75-414 GIFALGIMPYITASIIIQLM................GA.VVPYFQKLQRE.GEEGRRRITQLTRYGTIGITALQSIGYSINLLAGATGRAVVIN..............STLFT..ITTVV..VLTSGTAFVMWLGERISE.DGI.G.NGISLIITIGII.AFLPQA................................LY...NEIGLI........................GDNFFI.........L........LVEIGVWVLV.AGAVVLVSQGMRRIPVQYAKR...VVGK.....KVQ..GGT..TQY.LPLRVNAAGVMPIIFAQSI..MFIPS...TIASFF.....PNN...............................................ATMQRVGGWF......S...............................DISSMSY.SAVFFVVVVFFTYFYT.AITVNPQEMADTMKRQGGFIPGIRPG.KQTSEFIDTVLTRITLPGSI.FLGLVAIFP..AFAMQA.........................GVSQ......GFAMF.YGG.TSLL....ILVQ....VTLD...TLQ A1ZGT4_9SPHI/72-404 SIFALGIMPYISASIVIQLM................EV.AVPYFQKLKKE.GESGFKKKTQITRYLTIVITAAQAIGYIQATIPSNAIMVSQL.................SFT..ISTVI..ILTAGTVFTMWLGEKIDD.RGI.G.QGISLLIMIGII.SRLPQS................................LV...EEVVARS.....................T.GSQVLI.........L........ILEMVVLFFV.VMSVVMLTEATRRIPIQYAKQ...VVGN.....RVY..GGQ..RQY.LPLKVNAAGVMPIIFAQAL..MFVPA...LITPYV.....GG.....................................................ASSAF......S...............................DITTWQY.NLVFGLLIIIFTYFYT.AISVNPKQIADDLKRNGGFIAGVKPG.SDTSEYIDKIMSKITLPGSI.WLAIVAILP..AIAVKF.........................GIQN......SFAQF.YGG.TSLL....IMVG....VVLN...TLQ A6EHP4_9SPHI/71-408 SILALGVMPYISASIVVQLL................GI.AVPSFQKMQKE.GESGRKKLNQITRYLTVAITAVQAVGYVKTQVPMEAIVIDHT.................LFF..VMATF..VLAAGTLFVMWLGEKITD.KGI.G.NGISLIIMVGII.ARLPIA................................LY...QEITSRI.....................VSDGGLIA.........L........VLEIVALFAV.VMFTIMIVQGVRKVPVQYAKR...IVGN.....RQF..GGV..RQY.IPLKVNAAGVMPIIFAQAL..MFIPA...TLTQFF.......................................P...............SLQNTWLVQF......S...............................DYTSLAY.SLTFAFLIIAFTFFYT.AITVNPTQMSDDMKKNGGFIPGIKPG.FATSSFIDDVISKITFPGAV.FLAIIAILP..SVAVKF.........................GIKS......EFAHF.YGG.TSLL....ILVG....VVLD...TLQ Q11QD2_CYTH3/72-411 SVFGLGIMPYISASIVLQLL................TF.AVPYFQRLQKD.GESGRKTINQYTRILTIFITVAQSIGYLAATLDEGMIYEGMN.................TPFMNVVRIV..TLISGTMFCMWIGERITE.KGI.G.NGISMLIMIGIV.SRLPFA................................LM...AEVSSKN.......................LEGALP.........L........LIEFAALFAV.IMLVVLVQQATRRIPIQYTKQ...IAGG.....KQV..IGQ..RQY.LPLKLIAAGVMPIIFAQSV..MFLPA...IIGSSF.....PDS...............................E...............FATT.IGSTM......S...............................DFTSWQY.NVAFATMIILFTYFYT.AITVNPNSIAEDLRRNGGFIPSVKPG.LATSEYIDDVLTKITLPGSI.FLALLAILP..AFASMT.........................GIEK......EFAYF.YGG.TSLL....IMIG....VVLD...TLQ Q1VTY0_9FLAO/73-421 SVFALGIMPYISASIVVQLM................TI.AIPYLQKLQKE.GDSGRKKITQITRWLTIAITLVQGPGYIINLYNILPSSAFLMD...............STFTFVVSSVI..ILTTGCIFAMWLGEKITD.KGI.G.NGISLLIMVGII.ATLPQA................................FI...QEFISRV....................TESNGGLIL.........I........LIELVIWFVI.ILAAVMLVRAVRQIPVQYARK..NASGK....FEKASVGGA..RQF.IPLRLNASGVMPIIFAQAI..MFIPA...AVAGLS.....DS................................................EMAQGITAAF......Q...............................NMFGFWY.SLVFGILIIVFTYFYT.AITVPTNKMADDLKRSGGFIPGIRPG.SETSEYLDRVMSQITLPGSI.FLALIAVFP..AVIVSLL........................NVQQ......GWGLF.FGG.TSLL....IMVG....VAID...TIQ Q1NYZ7_9FLAO/72-422 SILSLGIMPYISASILTQLM................CY.MFPSLYKIQQD.GEIGIKKINNITKVLTILISLIQAPVYITILISSNIKENPYNLILI.........HCKKIFI..ITSII..CITTGTFFTMWLGEKIND.KGI.G.NGNSLIIISGIL.SRFIYS................................II...SEIFNRL..................KNNNKLLGIII.........L........LFELFIWLLI.IGISIIIINFVKKIHIQYVNKFYLKNYS....SNEIYLRNE..MKF.LPLKVVYPGVMPIIFSQGI..LLIFI...TIFNKI.......................................N...............NLQL............................................SNNGIWY.NILYSILIIIITFFYT.FLSIPVNKISDDLKINGVYIPNRKPG.KDTCFFLKKIVSQIYLTGSL.LLVIIALLP..SIFISLGG.....................DKNF..........SLF.FGG.TTII....IIVG....GLLDIKYTIN A5KHP6_CAMJE/62-402 SIISLGIMPYITASIIMELL................AA.TFPNIGKMKKE..RDSMQKYMQIIRYATIVITLVQSIGVAIGLQSLHG..RGGAGVIM........VEDLNMFI..ALCAI..SMLAGTMLLMWLGEQITQ.RGI.G.NGISLIIFAGIV.SGIPRA................................IS...GTVGQ.I..................NS.G.EMNFLT.........A........FAIFALILIT.IGVIIYVELGERRIPISYSRK...VVMQ.....NQN..KRI..MNY.IPIKLNLSGVIPPIFASAI..LMFPT...TILQTS.....TN................................P...............YLQA.INDFL......................................NPNGYLF.HVLTFLFVIFFAYFYA.SIVFNAKDIAENLKKQGGFIPGIRPG.EGTSSYLNEVASRLTLSGSI.YLGLVATLP..WVLVKFM........................GV..........PFH.FGG.TSVL....IVVQ....VALD...TMR A4EA78_9ACTN/52-389 SVFSLGIMPYITSSIILQML................QA.VVPSLHELARE.GEVGQTKITQYSRYLTLALAILNSVGYLFLFKSFGISFNGAGA...............PEIIFDLMIVG..TLTAGAMLIMWIGELITQ.RGI.G.NGMSLIIFANIM.AGLPQA................................IF...SSTE........................GNAGGIIT.........M........VIICAIILLV.IPLIVFLERGQRRIPVSYAKR...VVGR.....RMM..GGQ..TTY.LPIKVNTAGVVPIIFASAL..LYFPA...QIAVFF.....PGIG..............................................WIQA.VASAL.......................................STGWLN.WVLNVVLIVFFAYFYT.SMVFNPDDTADNLKKQGGFIPGVRPG.RATAAYIKNALNKITLPSAV.FLALIAIVP..SIIFSFT........................GN.........HLIQAFGG.TSIL....IMVG....VVLD...TVD Q2GEC0_NEOSM/73-411 TLFALNVMPYIVSSIVVQIF................FS.MLKSEGKVSAE..FMNESRLSFYSKLVALFLAFFQGFIIVAGLERTKAFVGGNEE...............FYSLLKYTSVL..TLVCGTFSLIWLGQQINS.RGI.G.NGMSLIIFAGIV.AEMPAI................................FG...NLFSGIG.....................SPGSGILG.........I........FVSLSLLVFV.VFLVVLVERASKNIPVHYPRR......RT..WGSTH..GDA..ASN.IPVKINVSGVIPPIFANAL..ILFPL...TLANFS.....AE................................S...............HLGEFIIRYF......................................SVGQPLY.FLLHSCLLVFFCFFYS.DFVFNTTEISDSLKKGEAIVAGRRPG.ISTKRHLDYVLRRITVVGAA.YLVCICVVP..EIFRNYF........................GF..........DAI.ISG.TSLL....IIVN....VITD...LLS Q3YRM8_EHRCJ/72-412 TVFALNVMPYIVSSIIIQLL................SV.TVPRLNELRQN.GELGRMKINNYIRYMTIFFCIVQGSVILLGLEKMNS.....ENSIVV.......IDPGLLFR..IVGIS..SLLGGTMFLLWLGERINK.NGI.G.NGVSMIIFTGIV.AELPGS................................FS...SMFLL....................GKNG.NVPIFV.........I........LLMVLIFFAL.LLLIIFVEKSYRKILVQYPKR...QVKN.....KLY..GSS..STY.IPLKINISGVIPPIFANAL..LLSPI...TVANFH.....QGS...............................P...............WSDF.ILMYF......................................SSGKLLY.IVCYALLIIFFAFFYT.AFVFDAKETSEILKKNGGFVPGKRPG.NATCEYFNYVIKRLTVLGSI.YLTVICIIP..ELIRYNY........................SV..........SFT.LGG.TSFL....IIVN....VIID...TFS Q5GSW3_WOLTR/77-416 TILVLNVMPYIVASIVMQLL................SS.AVKGINEVKND.GELGRRRMNSYIRYMTIVFCIFQSVTILIGLERM.......NREGTLV.....VIEPGVMFR..TVGIF..SLLGGTMFLIWLGEQISA.SGI.G.NGISLIIFTGII.SELHNA................................FS...FLLT..L..................NKNG.SMSLLI.........I........LFVFVLFFLL.LLLIIFVESSYRKVTVQYPKK...QFK......RLH..SDD..FTY.IPLKINLSGVIPTIFANAI..LLTPV...SIANFY.....KGH...............................A...............FSDF.ILNYF......................................MANKVVY.IAAYLALIVFFNFFYT.NFIFNPEENADFLKKNGGFIPGRRPG.KHTSDYLQDIVFKLTFIGSA.YLVVICTVP..EVMRYYY........................DM..........PFI.FGG.TSLL....IIVN....VTTD...TIM Q0ANS0_MARMM/83-421 AIFVLNVMPYISASIIMQLM................SA.TIPSLEKLKKEGGEQGRQQINQYTRYLTVLLATGQAFAIAIGMNTPNS...EGVALAL.........NPGPFFL..ASTVI..TLVGATMLLLWLGEQITA.RGV.G.NGVSLIIFAGII.SAVPGV................................IG...GALSQ.A..................SS.T.GDGTVL.........V........VGGVLILVG..LLLVVFVERSQRRLLVQYPKR...QQGN.....RMV..GGD..TSF.LPLKLNTAGVIPPIFASSL..LLLPA...TAASFQ.....AQSGP.............................G...............WLQS.AVAIL......................................GPGSPWF.MMAYAAMIIFFCFFYT.SVVSNPDDMAENLRKYGGFLPGIRPG.KRTAEYIDFVMSRLTFIGAL.YLVLICMVP..MMM............................NP..........NTA.LGG.TSLL....IVVS....VTMD...TVS A7IPQ0_XANP2/80-418 AIFALNIMPYISASIIIQLL................TS.VSPTLEALKKE.GEAGRKQLNQYTRYLTVVLAVFQAYGIAVGLEG.......SGSVVA.........DPGWFFR..ITTVI..TLTGGTMFLMWLGEQITS.RGI.G.NGTSLIIFGGIV.AELPGA................................FV...RTLQL.G..................RE.G.AISTPL.........I........LAALVLAVVV.IAFIVFMERAQRRLLIQYPKR...QVGN.....RIY..EGQ..SSH.LPLKLNTSGVIPPIFASSL..LLIPT...TIASFL.....QGSGP.............................E...............WLQT.ITTHI......................................GHGRPAY.MVLYVLLIVFFCFFYT.AIVFNPVETADNLKKHGGFIPGIRPG.ERTAEYIDYVLTRITVVGAA.YIAAVCLFP..ELLISYA........................SL..........PFY.FGG.TSLL....IVVS....VTMD...TVS SECY_RICCN/70-411 SIFALAIMPYITASIIIQLM................SV.AYKPLENLKKE.GEVGKRKVNQLSRYLTVLLASFQAYGVAISLESIVT...NTGPVVI.........LAGFFFR..ITTVI..TLVVGTMLLMWLGEQITQ.RGI.G.NGTSLIIFIGII.SGVPSA................................II...SMFEL.S..................RK.G.ALS.PL.........I........AIAVCIGVVVLIAIIIFFERAQRKLLVQYPKR...QVGN.....KIY..GGE..ATH.MPLKLNTSGVIPPIFASSI..LLFPA...TLANF......SNSNS.............................E...............TMGM.LTYYL......................................GHGKPVY.ILLYVALIMFFSFFYT.AIVFNSEETANNLRKYGAYIPGKRPG.KNTSDYFDYILTRLTVIGGI.YLSVICVIP..ELLMNKY........................VI..........SLS.LGG.TSFL....IVVN....VVLD...TMT Q2G8W0_NOVAD/80-430 SLIALGVMPYITASIVVQLA................AS.LHPALAAMKKE.GESGRKKLNQYTRYGAVLLTAIQGWVLASGLEAYGA..SSGLQAVV.........NPGLLFR..VGAVI..SLIGGTMFLLWLGEQITS.RGI.G.NGVSLIIMAGIV.AQMPKF................................FG...NLFEG.G..................RT.G.SISPFL.........I........FGIVIMLIAL.VIGICFLERATRRLLIQYPKR...ATQR.....GMM..AAD..RSH.LPLKINTAGVIPPIFASSL..LLLPL...TITQFA.....GNSISPDT.......................KMGQ...............AIVT.LNQYL......................................GHGKPLY.MLFYALGIIFFSFFYT.AVVFNPEETAENLKKNGGFIPGIRPG.KNTANYLDYVLTRITVLGAA.YITVVCVVP..EFIMAET........................GM.........GTLF.FGG.TSLL....IVVN....VTVD...TIT A6E0Q6_9RHOB/73-411 GIFALGIMPYISASIIVQLM................TA.MVPALEQLKKE.GEQGRKKINQYTRYGTVALATLQSYGLAVSLQSGD......MVSN...........PGMFFI..ASCMI..TLIGGTMFLMWLGEQITA.RGV.G.NGISLIIFVGII.AEVPAA................................LA...QFFAS.G..................RS.G.AVSPAV.........I........VGVMLMVVAV.IAFVVFMERSLRKIHIQYPRR...QVGM.....KIY..DGG..SSH.LPVKVNPAGVIPAIFASSL..LLLPA...TITTFS.....GNTTN.............................P...............VLST.VMAYF......................................GPGQPLY.LLFFTIMIVFFAYFYTFNVAFKTDDVAENLKNQNGFIPGIRPG.KRTAEYLDFVVNRVLVIGSA.YLAAVCLLP..EILRNQF........................AI..........PFY.FGG.TSVL....IVVS....VTMD...TIQ Q1UZE8_9RICK/67-404 AIFALGIMPYISSSIIVQLL................TG.VSDYFKNLKAQ.GETGRAKITQITRYGTVILATIQGYGLSIGLQSSAD.....LVIN...........PGLFFT..ITAVS..TIVAGTMFLMWLGEQITQ.RGI.G.NGISLIIFAGIV.AEIPRA................................LV...TTFEL.G..................RT.G.AVSTIM.........I........IGIFVLLVAT.IMFIVFMERALRKILINYPKR...QMGN.....KMY..GGE..SSH.LPLKINQAGVIPAIFASAL..LLLPV...TFSNFS.....FSDND.............................T...............FLN..LSSYF......................................TQGQPLY.MLLYASGIIFFTFFYT.SITFNPTETADNLRKYGGFVPGIRPG.ENTALYIEKIVTKLTTIGAL.YLTIVCLMP..EFLIANY........................PI..........PFY.LGG.TSIL....IVVV....VAID...TVT Q3R245_XYLFA/76-424 SIFALNVMPYISASIVVQLA................TH.IFPSLKAMQKE.GESGRRKITQYSRIGAVILAVIQGGSIALALQNQTA..PGGAAVVY.........APGAAFV..MTAIV..ALTAGTVFLMWVGEQVTE.RGI.G.NGVSMIIFAGIV.AGLPGS................................VL...QTIDA.F..................RS.D.ALSLIS.........L........LIIVFIVLSF.TFFVVFVERGLRRIAVNYARR...VEGR.....NSY..MNK..SSF.LPLKLNMAGVIPPIFASSI..LAFPV...TLSIWS.....GQASSNTL........................FGA...............WLQR.VSSAL......................................GPGEPLH.MILFAVLIIGFAFFYT.ALVFSSQETADILKKSGALIPGIRPG.KATSDYVDGVLTRLTAVGSL.YLVIVCLLP..EFMQSRI........................GA..........SFH.FGG.TSLL....IAVV....VVMD...FIS A4NK90_HAEIN/76-416 SILALGIMPYISASIVIQLL................AT.VSPALAELKKE.GAAGQRKISKYTRYATVVFATIQAVAISTGLPNM.....LSGLVP..........NVGFSFY..FTSVV..SLVTGTMFLMWLGEQITE.RGI.G.NGISILVFGGIV.AGLPSA................................IL...QTIEQ.A..................RQ.G.QMHPLV.........L........LLIAAIVFAV.TYFVVFVERGQRRIRVEYAKR...QQGR.....QIL..GGH..STH.LPLKVNMANVMPAIFASSI..ILFPA...TLTQWF.....GQNDKF............................E...............WLNN.LSMLL......................................NPGQPLY.LLVYAVAIIFFSFFYT.AMQYNPRDTADNLKKSGAFIPGIRPG.EQTSRYIDKVMTRLTLIGGL.YVTFVCLVP..YIMTSAW........................DV..........KFY.FGG.TSLL....IVVV....VIMD...FIV Q057C4_BUCCC/64-407 SIFALGVMPYISSSIIVQLL................TL.ISSYLRNLKKE.GDIGKKTINQYTKYITFFLSIIQSIGVVISLPFLPGMKNIIVF...............ADCYFYIIAVV..SLVTGTIFLMWLGELITT.KGV.G.NGVSLIIFSGII.SGLPAS................................VI...RTYKLIK.....................IKNFSFLY.........V........FFLLLIIFFV.IFIVVFIEKSQRKIIVCYARR...QQGR.....RMY..TAH..HSY.LPLKLNMAGVIPVIFSSSL..IVFPS...ILLTYL.......................................R...............YVFNDYKKIIYFFDFL................................KFKHSIY.LIVNIILIIFFCFFYT.NIIFNVQDTANNLKKSGAFLPGIRPG.LKTAEYIKNIVFKLTTIGSI.YTVFICLIP..DIVRYFF........................KV..........PFN.FGG.TSLL....IVVV....VLIE...FIT Q8D1Z2_WIGBR/82-424 SIFSLGIMPHISASIIIQLL................TI.IHPKLSEIKKD.GEFGRRKINKYTRYGTLFLAIIQSISISISLPNMPG...MQELII..........NKGIEFY..ITTIT..SLVTGTIFLMWLGEQITS.RGI.G.NGISILIFSGII.AGLPIE................................VI...KSIEQ.A..................RQ.G.NLNIIT.........V........LISIILVFVI.TYFVVFIERGQRRVIVNYAMR...QKGR.....KIY..AAQ..ITH.LPLKVNMSGVIPAIFASSL..ILFPA...TIASWF.....GEGIGV............................K...............WMSK.IPYYL......................................EPGTFSY.SILYASAIMFFCFFYT.SLVFNSKDTADNLKKSGAFISGIRPG.IKTSQYINKIMMNLTLIGAT.YIALICLMP..DFFRVFI........................KS..........PFH.FGG.TSLL....IVVV....VTID...FMT Q6F7T2_ACIAD/83-426 SILALGIMPYISASIIVQLM................ST.VVPSLEALKKE.GEQGKRKINQYTRYGTLLLALVQGVGMCAGLIS.......QGITL..........TSGLAFY..IPAVT..SLVAGTMFLMWLGEQITE.RGI.G.NGISMIIFAGIV.AGLPNQ................................VI...QAFTS.V..................QN.G.QGSLIG.........I........VVFALLSLAV.LAAIVFIEKAQRRIPVNYAQK...QQGR.....RIF..TAQ..QTH.LPLKINMAGVIPAIFASSL..LLFPA...SLGQWL.....GSADPNAG.......................IVKR...............SLQD.LALVL......................................SPGQPLY.LMLFGTLIIFFCYFYT.ALVFSPKEVSENLKRSGAYVPGIRPG.EQTARYLDHILNRLTFIGAI.YITVVCLMP..MILQNSF........................GI..........PFH.LGG.TSLL....IVVV....VVMD...FMA Q6Q8W8_9GAMM/67-407 SIFALNVVPYISSAIIMQLF................SN.SIPYLQELKKD.GQAGRNKITQYTRYGTAILAFIQASALAVTLSA.......SGLAY..........VPGPTFF..VSAVF..SVVAGTMFLMWLGEQVSD.RGI.G.NGISIIIATSIL.TGIPGA................................IG...QALEQ.S..................RQ.G.DLSILL.........L........IGIGLLSMAV.IAVVVFIERGQRRITVNYAQR...QQGR.....RMM..QAQ..QSH.LPFKVNMAGVIPAIFASTF..LLFPA...SLSTWF.....GENESL............................S...............FLQS.FSLAL......................................NPGQPLY.ILVFAGLIISFCFIWL.ALTFNTKDVSDNLKRSGAYIAGIRPG.EQTANYIDNVLARLTVFGAI.YLTLICLLP..LALINFAG......................ISP..........TIS.IGG.TSVL....IIVV....VLMD...FMS A9BRX1_DELAS/74-413 TVFALGIMPYISASIIMQLM................TY.VVPTFEQLKKE.GESGRRKITQYTRYGTLGLAIFQSLGIAVALESSAG.....LVLS...........PGFGFR..LTAVV..SLTAGTMFLMWLGEQITE.RGL.G.NGISILIFGGIA.AGLPSS................................IG...GLLEL.V..................RT.G.AMSILA.........A........IFIVLVVAAV.TYFVVFVERGQRKILVNYARR...QVGN.....KVY..GGQ..SSH.LPLKLNMAGVIPPIFASSI..ILLPA...TVVNWF.....SAGESM............................R...............WLKD.IASTL......................................TPGQPIY.VMLYATAIIFFCFFYT.ALVFNSRETADNLKKSGAFIPGIRPG.DQTARYIDKILVRLTLAGAV.YITFVCLLP..EFLILKY........................NV..........PFY.FGG.TSLL....IIVV....VTMD...FMA Q7DDS8_NEIMB/73-410 SIFAIGIMPYISASIIVQLA................SE.ILPSLKALKKE.GEAGRKVITKYTRYGTVLLAILQSLGVASFVFQ.......QGIVV..........TSSFEFH..VSTVV..SLVTGTMFLMWLGEQITE.RGI.G.NGISLIITAGIA.SGIPSG................................IA...KLVTL.T..................NQ.G.SMSMLT.........A........LFIVFGALLL.IYLVVYFESAQRKIPIHYAKR...QFNG.....RA...GSQ..NTH.MPFKLNMAGVIPPIFASSI..ILFPS...TLLGWF.....GSADTN............................S...............VLHK.IAGLL......................................QHGQLLY.MALFAATVIFFCYFYT.ALVFSPKEMAENLKKSGAFVPGIRPG.EQTSRYLEKVVLRLTLFGAL.YITTICLIP..EFLTTVL........................NV..........PFY.LGG.TSLL....ILVV....VTMD...FST Q5NHU8_FRATT/74-416 SIFALGVMPYISASIIFQML................SA.VYPKFIELKKE.GESGQKKITQYTRYLTLALAIVQSFGIVAFVLHQ......DGLVTT.........NNMALFY..LTTIV..SVTTGSMFLMWLGEQITE.RGV.G.NGISLLIFSGIV.ANLPFE................................IS...NTLSQ.A..................NQ.H.VISYLS.........V........WVLLILLLLV.IAFVVFMESAQRKITVNYAKR...QQGR.....KMF..AAQ..TSH.LPLKLNMAGVIPAIFASSI..LMVPG...VLLGWL.....SNYNSL............................S...............WLAD.VAEML......................................QPGSIVY.TVVFAATIIFFCFFYT.SLVLNPKETADNLKKSGAYISGVRPG.EQTAKYIDAVMTRLTLVGSL.YITAICLLP..IFVVKFFA......................QGL..........SFT.FGG.TSLL....IVVV....VMMD...FMA Q7WZR8_9GAMM/64-388 SIFSIGLMPYISASIIMQVI................TG.MFLDVE........VSKHKLTSYLRYLTFMLSVIHSLVVSILFLEKSV.....VYY............KKSVVY..LTIIL..TFVTGAIFLMWLGEQITD.KGI.G.NGISLIILSGLV.SVIPNA................................LG...RTLFLTI..................KD.S.SWMYIQ.........I........FKVVSLVLIT.IILVVVIESGQIRIKVSYPRR...LIGK.....KLY..ATQ..SSY.LPLKLNMAGVIPAIFASSS..LIITA...SVG..........................................Q...............WINRSILPQL......................................SPGQPLY.IMFFVLSVIFYSFFYT.AIVLNAKEVSINFKKSGAFIHGMRPG.KQTAGFISKVSSRLNWFGAI.YIVFFSLIP..QLIMVYC........................KI..........PFC.GGG.ISIL....IMVV....VVLD...FLS A5EX98_DICNV/69-412 SLLALGVAPYISASIVMQLL................TH.MLPALKDLRQE.GSAGQKKITQYTRYFTLFLAIMQGFAISRTVMAAGMTISAGS.................GFL..LTATI..GLTAGALFMMWLGEQITE.RGI.G.NGISMLIFGGIA.VNMPSG................................IL...GLFNQAK.....................IGEIGYGR.........F........FLLLGIIVSL.FALIVYVERAQRRIKIHYAKR............QQFGTSAMGERFY.LPLKINMAGVIPAIFASAI..ITLLVSGLTLASSL.....PGAAG.............................R...............YLSDLAAGFH.......................................QGAWLY.IATFVLLIILFSFFYT.SIMFENRELADSLKKSSAFIQGFRPG.RQTADYIDTVQERLTFVGAF.YVAFVCVLP..SLVNMGS........................ASG........QVLFLFGG.TSLL....IAVV....VAMD...LMS Q6MJ32_BDEBA/70-415 SIFALGIMPYISSSIIFQLL................TS.AIPYLEALKKE.GEQGRRKINQYTRYATVALAIIQGYGISTWLMNSTS..PDGHPLVIA......PTVAFLPFQ..IMTII..TLTAGTCFIMWLGEQITE.RGI.G.NGTSLIIFTGIA.AAIPGG................................AQ...QLWEL.V..................RT.G.EMRFAL.........V........LLLVAFMVAI.IAAVIYMEVAQRRITVQYSQR...QGGG.....GMQ..SMQTPTSH.LPIKLNISGVIPPIFASSL..LMFPA...TMAQFV.....NT................................P...............WLKA.LQDSL......................................NPSGAIF.NIMFVALIVFFSFFYT.EIVFNPNDVAENLKKYGGFVPGVRAG.KSTADYIQRVLERVNVVGCI.YLCTICILP..GIMVSQF........................NV..........PFQ.FGG.TSLL....ILVG....VALD...TAQ B5EFS0_GEOBB/71-411 TVFALGIMPYISSSIIFQLL................TV.VLPAVEKLSKE.GDAGRKKIIQYTRYGTIVLAVVQAFGISIGLEAMRG..PAGELVVP.........NPGWGFR..LMTVI..TLTAGTAFIMWLGEQMSE.KGI.G.NGISLIIFAGIV.ARIPTA................................IG...NSFRL.I..................KT.G.ELSLFV.........L........LLIAAVMFAV.IAAVVFMERGQRRIPIHYAKR...VVGL.....KTV..GAQ..SSH.LPLKVNMAGVIPPIFASSI..IMFPA...TVGNFI.....DV................................P...............WVQA.ASKQL......................................APGKLLY.EVLFVAFIVFFCYFYT.AVTFNPVDVADNVKKQGGYVPGIRPG.KETSDFLDAVLTKLTFAGAI.YISAVCVLP..SILIGKF........................NL..........PFY.FGG.TSLL....IAVG....VGMD...TLS A3EVQ1_9BACT/75-412 TIFALGIMPYISASIILQLL................TV.VHPTLQAMAKE.GERGRKIITRYTRYLTVLIALVQSFGIALGLEGMNNGQ...FVPH...........PGWSFR..FIVVI..TLTAATTFVMWIGEQITE.RGV.G.NGISLIIFSGII.ARLPAA................................II...NTYKL....................YNQG.EISGFL.........I........LALVVMVFLI.VSSIVFIETARRKIPIQYAKR...LVGN.....KMM..GGQ..STH.IPFKINTAGVIPPIFASSL..ISFPA...IIAGFV.....SV................................P...............WIQS.FGKSL......................................SPGSFSY.TGLYVLLIVFFCFFYT.AVVLNPTDIAENMQKYGGYIPGVRPG.QKTVEYLYRVMNRITFVGAL.YLSIVCVIP..ELLIYQL........................HV..........PFY.FGG.TSLL....IVIG....VSLD...TAQ Q1MPP6_LAWIP/71-412 SVFALGIMPYISASIIMQLL................QV.IIPDFKRMAKEEGAAGRYKITQYTRYGTVIITLIQGIGIAIGLESMYS..PTNIPIVL.........EPGWVFR..IVTVL..TLTAGTVLIMWLGEQISE.KGI.G.NGISLIIFSGIV.VGIPGA................................IV...KTYQL.I..................IL.G.DMNILI.........A........LVLMLFMFAV.LTGVVFMERAQRRIPIQYAKR...QLGR.....KVY..GGQ..STH.LPLRVNTAGVIPPIFASSL..LLFPA...TMASFD.....IS................................D...............WLKD.IAVWF......................................SPSTILY.NCIFLVLIFFFCYFYT.AIIFDSKDISENLKKAGGFIPGIRPG.EKTCEYLDGVLSRLTLWGGV.YISIISILP..MMLISQF........................NV..........PFY.FGG.TSIL....ILVG....VAMD...FMS SECY_AQUAE/71-412 TVFALGVMPYISASIMMQLL................TV.AIPSLQRLAKEEGDYGRYKINEYTKYLTLFVATVQSLGIAFWIRGQVS..PKGIPVVE.........NPGISFI..LITVL..TLVAGTMFLVWIADRITE.KGI.G.NGASLIIFAGIV.ANFPNA................................VI...QFYEK.V..................KT.G.DIGPLT.........L........LLIIALIIAI.IVGIVYVQEAERRIPIQYPGR...QVGR.....QLY..AGR..KTY.LPIKINPAGVIPIIFAQAL..LLIPS...TLLNFV.....QN................................P...............FIKV.IADMF......................................QPGAIFY.NFLYVTFIVFFTYFYT.AVLINPVELAENLHKAGAFIPGVRPG.QDTVKYLERIINRLIFFGAL.FLSVIALIP..ILISVWF........................NI..........PFY.FGG.TTAL....IVVG....VALD...TFR #=GR SECY_AQUAE/71-412 SS -SS----HHHHHHHHHHHHH................HH.HSS-SSS-S--------HHHHHHHHHHHHHHHHHHH---HHHH----S..------SS.........----THH..HHHHH..HHH---HHHHHHHHHHHH.---.-.---HHHHH---T.TTTTTT................................SS...----S.S..................--.-.----HH.........H........HHHHHHHHHH.H-----S--------------...----.....---..---..---.-----------HHHHHHHH..HHHHH...HHHHS-.....SS................................-...............---T.TTTSS......................................----HHH.HHHHHHHHHHHHHHHH.T-TTHHHHHHHT--------------.-HHHHHHHHHHHHHHH---H.HHHHHHHHH..HHHTTSS........................--..........S--.---.-HHH....HH--....-HHH...HHH Q01WB2_SOLUE/74-438 TVFALGIMPYITASIILQLL................TV.VVPTLEKLQKE.GELGRRKITQWTRYLTIILSILQSFGISQGLMGM......QQGIVI.........NPGIGFV..FLTIL..SLTTGTAFIMWLGEQISE.RGV.G.NGMSLIIFTGIV.VGLPNA................................IA...NIYQH.V..................FTIH.DWGAIT.........L........IVLMALMVAV.VAFIVLVERGERRIPVQYAKR...VVGR.....RVM..GGQ..STH.MPLKVNAGGVIPVIFASSI..LAFPQ...TLAQFG.....WVKNL.............................P...............WLSK.TLATI......................................QHGEPMY.YVLFVAGIIFFCFFYV.SIIFNPNEAADNMRKYGGFIPGIRPG.RNTADYMNNILTKITVVGGI.YLAILCLIP..DIMISGIKLHHLWLVGDWIDRVAPRFILEGLGV..........NFY.FGG.TSLL....IVVG....VAMD...TIN Q08ZH8_STIAU/26-370 SIFGLGIMPYVSASIIMQLL................AV.VVPSLERLQKE.GASGRQKINQYTRYGSIVLSVVQGIGISRWLASLGR..SDAGQSGFNQI...VVPDDSAWFT..FMTVI..SLTAGTAFIMWLGERITE.RGI.G.NGISLIIFAGIV.AGLLPN................................GK...TLLDM.T..................AQ.G.AIEAAA.........L........VGLAVFMLFI.IAVVVYVERGMRRIPVQYAKR...MAGR.....RMF..AGQ..ATY.FPMKVNTSGVIPPIFAGAL..LSFPA...TLGTWF.......................................P...............FLQT.FRQGL......................................EGNPWLY.NGLFVLLVIFFAYFYT.ALTFRPDDVADNIKKQGGYIPGIRPG.RQTADFIERVLNRITFGGAI.YLATICVIP..TILTQWL........................QV..........PFA.FGG.TALL....IVVG....VALD...TVQ A6GCG0_9DELT/70-411 SVFALGIMPYISASIIMQLM................TV.VIPKLEQLQKE.GETGRRKINQYSRYGTVGLALVQGYFMASWLEGQNT.....PGQTLV.......LETGLPFK..LMTML..SLTAGTCFLMWLGEQITE.RGI.G.NGISLIIFAGII.ADMPTA................................SY...QLAQKAI..................DDPE.NFGPLP.........L........AMLLVVVLVV.IAFVVIMERGQRRIPVIYAKR...VVGK.....RMF..GGS..QNY.LPLRINNAGVIPPIFASSI..IMFPA...QIAGMT.....GN................................P...............YLQR.FAAAF......................................SYGNWLY.LTVYVALCIFFCYFYT.QIQFNPVDLADNLKKQNASIPGVRPG.KRTAEHIEAILGRLTFAGSW.YISAVCVLP..VFLQTEF........................NV..........PFY.YGG.TSLL....IVVG....VALD...TAQ Q04PV8_LEPBJ/72-436 SIFALGIMPYISSSIVMQLF................MV.LVPSLQKLQKE.GEEGRKKIGQYTKYGTVILCAIQSLAVIQLAKGWST..GTELEPARYPG..LINSSVVPYFY..LIGIL..SITTGTVLLIWLGEQITE.RGI.G.NGISLLIFAGII.GRLPES................................MV...QLFST.......................D.TMDALN.........V........LILLILLILL.ISLTVLLTQGVRKVPLQYGKQ...MVGR.....KMV..QAK..SQS.IPFKVNGANVMPIIFASSL..ILFPQ...TIIQWL.....SSSSE.............................Q...............WAGWAIIMDFFN.PFSQ..............................IWYHALFY.YIIYTSLIIFFAYFYT.AIQFNPAELAENLKKYGGFIPGIRPG.SHTKEYIEKVLNRITLPGAM.FLAGLALAP..YIIIKFL........................DLSSNS..GGGSLVYTFGG.TSLL....IMVG....VALE...TLK SECY_BORBU/72-409 SIFMLSIGPYISASIIVQLL................VY.SFPSLKKMQE..GDGGRQKTKKYTKYLTIVAAVVQGYATSLYAKGIPG.....AVTI...........PFYRYI..FVAIL..TVTTGTFILLWFGEQINQ.RGV.G.NGTSLIIFSGIV.VRLQAA................................LF...NLFQS.M..................QDPSQNVNPVF.........V........ILIISIFILV.VILIIYEYKAQMRIAIHYARA............NSN..NTV..SSY.LPIKLNPSGVLPVIFASVL..ITLPL...QILSGF.....AETS..............................S...............IARQ.ILSYL......................................RPNGFYY.TFLNVILIIGFTYFYS.KIQLSPKDISNNIRKNGGTIPGIKSD.E.MEKYLDEIMNKTLFSGSI.FLSIIAIIP..FLVQNIF........................RFPH......DVSRI.MGG.SSLL....IMVG....VALD...TLI Q73PL2_TREDE/73-413 SVFMLGVMPYISTQILMQLA................MI.IFPRLKKIAEE..DGGRKKIQVWTRIVTVFVALLQSSAVGTWARAIPGAVVISS.................PVLHLFITMV..TVTTGTMITVWMGEQITA.RGI.G.NGISMLIFAGIV.ARLPQA................................VW...ELIKLVS.....................NNELNLVF.........V........IIAFAMFVGI.IALVVYEQQGQRKIPVHYAKR...VIGR.....KMY..GGQ..NTY.IPFKINPSGVIPIIFASSF..LTFPL...MLSQMW.....GSNVS.............................................WLAS.VARFL......................................RSDGWGY.NVLYVVLIIFFAYFYT.QVALNPTEIAKQIRENGGSIPGIRT..DKTEEYLQKILNRLILPGSL.YLAAIAVLP..TVIQWAF........................SFPR......NISML.MGG.TSLL....ILVG....VDLD...TMS Q67JW3_SYMTH/69-405 AIVAMGVTPYINSSIIMQLL................TV.VIPRLEELQKE.GEEGRKKIQQYTRYGAVVLGLVQAFGIGYALRSYGAFYSNS...................WTTLFVIMV..SLTAGTALVMWIGEEITE.KGI.G.NGISLIIFANIV.SRLPYS................................IY...NEILL....................LRAG.QRNIFQ.........P........LLVAVVALLM.VVFVVIINEAVRKIPVEYAKR...VVGR.....RVV..GGQ..RTH.LPIRINQAGVIPLIFASSL..MYFPI...TIAGFF.....PNS...............................D...............FAVF.VGRYL......................................DTRSWWF.MLINALLIVFFTYFYT.AITFNPENVADNIKKNGGFIPGYRPG.RPTAEYLERVSSRLTLVGGL.FLAAVTILP..ITIMSLA........................GV.........QNAY.IGG.SSLL....IVVS....VALE...TTK A7FQ38_CLOB1/69-409 SIFAMGVVPYINSSIIMQLL................TI.ALPSLESLSKE.GEEGRKKIQQYTRYGAVILAVIQAFSTYAIIARAGALRDGS...................KLNLFIIII..TVTTASTFLMWFGDKITE.KGI.G.NGISLIIFVNIV.SRFPST................................IY...SIVGL....................QKAE.TVNFVE.........V........IVFIVIALAL.FLLVVIMNLGERRIPVQYAGR...AVGN.....KIY..KGQ..STH.IPINVNSSAVIGIIFAISV..MQFPI...TIGQFW.....PESAFY............................K...............FITLNQYSPF......................................RDKSIAY.IVLYFLLTVFFTWFYT.VVTFKPDEMAENMHKSSGFIPGIRPG.EPTAEYIERVITKSSIIGGT.FAAIIAVFP..IIMAAYS........................KF.........QGIS.FGG.TSML....IMVG....FALD...TIR A6LPT1_CLOB8/69-416 SILALGVMPYINASIIIQLL................TV.AIPQLEQLSKE.GDTGRKKIQNATRYVSLGIAFILAYGIFATISSSGATVGLT...................AIQKTIVVF..ALVVGTTFCMWLGDQLTV.KGI.G.NGTSILIFVNII.SRVPAT................................IA...SMMTL....................QQAG.SASIVE.........I........VLFGVFTVFL.LATILYFSLSERRIPVQYAGK..FASGN....SNMV..KSQ..STH.IPLSIIGSAVLAIIFSMSV..MDFPK...TIATLFGGVGESQKEWA............................K...............WVLNNPTSIF......................................NNKSWMY.MVLYAVLTIFFNWFYT.QITFKPDEMSENLHKSAGFVPGVRPG.EETTTYFERVLNRLSFIGGI.LAAVLAVTP..VMIQNYT........................QF.........QNIA.FSG.TGLL....IVIN....VALD...FTR Q0SQG4_CLOPS/69-409 SIFALGVVPYINASIIMQLL................TV.AIPKLEQLSKE.GDDGRKKIQKITRYASIVIGAITAYGSYVIIHNVGALKSNS...................PVSMFLILL..TLVVGSTFLMWLGDQITV.KGV.G.NGTSLIIFANIL.SSLPMT................................GY...QIYNL....................SKIG.KINVVE.........I........ALFIFFTLAL.LAGVIYLSLAERRITVQYAGK...AVGN.....KMM..KGQ..STH.IPLSIIGTTVIAIIFAMSV..MSFPT...TIAQFF.....PEAGWS............................Q...............WITGSSYSPF......................................NAKTWMY.PVLYALLTIFFTWFYT.QITFKPDEMAENMHKSSGFIPGIRPG.KPTEIYLEKVLNRISMFGGC.FAAIIAVVP..ILVANYT........................PF.........QGIQ.FGG.TSLL....ILVS....VSLE...IMR A9KJH4_CLOPH/71-425 SLFALGIGPYITSSIIMQLL................TI.AIPKLEEMQKD.GESGRKKIAEISRYVTIGLSIIESVAMVIGFSGSGALEGGL..................TFTNIVVITA..SFTAGSAILMWLGERITE.KGV.G.NGISVILLINIV.ANMPRD................................IY...GLIEKFV..................LGESVVKGVTA.........A........IIIVAVILLS.VVLIILLNAAQRKIAVQYAKK...VQGR.....KMV..GGQ..SSH.IPLKVNTAGVIPVIFAVSI..MQFPI...IIASFF.....GVQPARAY........................FWP...............KVLHMLNSQSWFNIKNG...............................EFKYTVG.VLIYMALIVFFAYFYT.SITFNPMEVANNMKKQGGFIPGIRPG.KPTTEYLTKVLNYIIFIGAI.GLMIVAIIP..IFFSGMF........................DA..........HVS.FSG.TSLI....IVVS....VVLE...TMK A7VH89_9CLOT/71-420 SIFALNVTPYITASIIIQLL................TI.AIPALEEMQKD.GEDGRKKITAITRFLTIGLAILESAGLAINFGRKGFMDSYN...................FWTVLTMIV..ILTGGSAFVMWLGERVTD.RGV.G.NGISIILLINIV.STMPND................................FK...NIYTQFI..................KDKDPVRMCLI.........A........LLVVAIVVCV.TILVCMLQGAERKIPVQYAKK...VQGR.....KQM..GGQ..SSN.IPLKVNTAGVIPVIFASSL..MAIPS...IITSLF.....GK.SPSGV........................GAK...............ILQG.MSQSYWF.NA.N...............................YPWGFLG.LAVYILLVFFFAYFYT.AITFNPMEIANNMKKSGGFVPGIRPG.KPTQDYLNKILNYIIFIGAV.GLLIVAMIP..MFFNGFF........................SV..........NVS.FGG.TSII....IVVG....VVIE...TMK A6BIS2_9FIRM/71-421 SVFALSITPYITSSIIVQLL................TI.AIPQLEEMQRD.GETGRKKIVAITRYLTVGLALIESGAMAVGFGRQGLLVKYN...................FVNAAIVVL..TLTAGSAFLMWIGERITE.KGV.G.NGISIVLVINII.SRIPSD................................MK...TLFDQFV..................KGKAIASACLA.........V........CVIIAIILAL.VVFTVILQDGERRIAVQYSQK...IVGR.....RSY..GGQ..STN.IPLKVNTAGVIPIIFSSSL..MQFPI...VIASFL.....GKDNGSGI........................GSE...............ILRG.LNQSNWCNPEQI..............................KYSW...G.LVLYIVLTVFFAYFYT.SITFNPLEIANNMKKSGGFIPGIRPG.RPTVEYLTKILNYIIFVGAC.GLILVQIVP..ILFNGWL........................GA..........KVS.FGG.TSLI....IIVS....VILE...TLK A7VR33_9CLOT/71-423 TLFAMSVTPYINSSIIMQLL................TV.AIPPLERMAKE.GEEGRKKIGAITRYVAVVLGLVQGLAYYLYLRGSSY.....EGTPIVTY...TEGAAGVFTA..IVIVL..VFTAGTAMMMWLGEQINQ.KGI.G.NGISILLFAGIV.ARLPDTVN............................ILVQ...ALQAAWQ..................APDSFGQYYFF.........V........PLFVIIFLAI.IWVIVFMNDAERRIPVQYAKR...VVGR.....KMY..GGQ..STH.LPIKVNMSGVMPIIFASSI..LTIPS...TIQLFV.....TPT...............................G...............FWKT.VLDAL......................................STTGWVY.ALIYFLLILMFAYFYV.AIQYNPIEMANNLRQNNGTIPGIRPG.KPTSDYIQKILSKITLIGAL.FLAVIALLP..IAFSAFT........................GM.........HNLM.MGG.TSVI....ILVG....VALD...TMK A6NXF0_9BACE/71-437 TVFALGVQPYINSSIIIQLL................TV.AIPALERLQKEGGEEGRKKIAAITRYTTVAIALLQGFGYFTLINANGLVGSDLP.................TWLAGIIIVL..TFTAGSAFVMWLGEQITE.FGI.G.NGISIILFAGIV.SRFPSM................................LM...NMVQGVQRWSMHLSDEEISAMSNGEAFRNSLVHPAM.........I........PLIIIGILAL.VVFIVFINDSERRIPVQYAKR...VVGR.....KMY..GGQ..SSH.IPLKVNMSGVMPIIFAQAI..ASLPA...TIAAFI.....P.................................G...............GMDSTFMKVF......................................DSNGLVY.AIVYFLLILGFSYFYA.TMQFNPIEVANNLKKNGGFVPGFRPG.KPTADFIYKVLNKITLFGAI.YLAVIALLP..IITSNII........................NLASGS..QMGRSLS.IGG.TSII....IVVG....VALE...TVK Q250L2_DESHY/70-413 SVFALSITPYITASIILQLL................TI.VIPSLERLAKE.GEFGRKKITQYTRYGTVILGFIQGFGMTFGLRGALIIPKPGM.................EWAIYLLVAL..ILTAGTAFLMWLGERITE.NGI.G.NGISLIIFAGIV.AGVPDA................................IK...RIAGL....................LSVG.EINVFS.........V........FGLIVIGLGI.IAGVVFIQEGQRRIQVQYAKR...VVGR.....RVY..GGQ..SSH.IPMKVNQAGVIPIIFAISL..LAFPS...TIATWM.....DPAS..............................A...............YVRF.VNTWF....VMN..............................GSLTSIPY.LIVYAVLIIFFTYFYT.AVSFNPVDVADNLKKYGGFIPGLRPG.RATSDYLSKILSRLTLAGGT.FLAMIAVLP..SLVIGLT........................GI.........PNIT.LGG.TSLL....IVVS....VALE...TMK Q8R7X3_THETN/69-402 TIFAMSIVPYINASIIMQLL................TI.AIPSLEQLAKE.GEEGRKKIAQYTRYLTVVLALIQAIGMTIGLRSAVINPT.....................FFRLTVIVI..TLTAGTTFLMWLGERITE.NGL.G.NGSSLIIFAGII.SRIPNM................................IY...LTHEY....................IKAG.TSNIFG.........A........IAFVVAELIM.IVLIILATEGQRRIPVQYAKR...VVGR.....RVY..GGQ..STH.IPIRINMAGVIPIIFAISL..LQFPQ...QLATFF.....PHS...............................S...............FYNF.VQKWL......................................STNGLIY.NLLDIFLIIGFTYFYT.AVIFNPQDISDNLKKYGGFIPGIRPG.KPTTEYLTKVLNRIVFVGAL.FLAFIATMP..VVLMNVT........................GL..........QLY.FGG.TALL....IAVG....VALD...TMK A4XLR1_CALS8/69-419 SIFAMSVTPYINSSIIMQLL................TI.AIPALEELAKQ.GEEGRKKLAEWTRYGTAILAFLQAVGIYFGLKNAQGLTGGVPVIT..........TQGQGFLGFITITL..ALTAGTVFLMWIGEQITE.NGI.G.NGISLLIFAGII.SRIPNG................................AV...SLWNYVA.................KLNEFSLTSIIG.........V........LLFLVMALAI.IVFIIVIQEGERRIPVQYAKR...IVGR.....RVY..GGQ..STH.IPIKVNIAGVIPIIFAISL..VMLPT...TIAQFF.....PNS...............................G...............FYKF.VKAYF......................................SSGSFWY.TFFYALFIIGFTYFYT.AIVFNPVEIANNLKNNGGFIPGIRPG.KPTVDFITRVLSKVTFAGAL.FLAFIAILP..TLVGLMFR......................HQL..........NIY.FGG.TSLL....IVVG....VALE...TIR A3DJJ2_CLOTH/71-411 TIFAMSITPYINASIIIQLL................TV.AIPKLEALAKE.GEEGRKAIAEYTRYGAVVLGFLQATAFYFGLAQAVNERN.....................VLSFITITL..TFTAGTAFLMWLGEQITE.YGI.G.NGISLLIFAGIV.SRGPRG................................ILYLWDLYRLER..................LGKG.ILGIFG.........V........LGVLLLFVVI.IASVVWVDQAERRIPVQYAKR...VVGR.....KMY..GGQ..STH.IPIKVNMAGVLPIIFATSF..VALPA...TIVGFF....FPNSTH.............................P....................VAEYF......R...............................SFQSRIEVAILTGLLIIFFTFFYT.FIQFNPVEVANNLKKNGGFIPGIRPG.KPTSDYIYKVVSRISWFSAL.FLAIIQILP..SLLQAIT........................GI.........RGIW.FAG.TSVL....ILVG....VALE...TVK A8MLG0_ALKOO/69-408 TIFALSISPYITSSIIMQLL................TI.AIPSLEALAKE.GEEGSKKIAQYQRYATIILALIQATGISVGLFRGALINQD....................TFSIIVVIL..TLTAGTAFLMWLGEQITE.KGI.G.NGISLLIFAGII.ASLPSS................................LF...TTFAL....................TKAG.QINPLA.........I........ILFIVIAIAM.IVAVVAIEAGTRKIPVQYAKR...VVGR.....KMY..GGQ..SSH.IPLKVNQSGVMPVIFAMSL..LQFPH...TIAYFI.....GSEG..............................G...............FAKF.LNTWL......SP............................TGMPGVFIY.NLLSAVLIIFFTYFYT.AITFNPVEISNNMKQNGGFIPGIRPG.KPTADYINKILTRITLSGAV.FLAIITIVP..TIVLGIT........................HI..........PIS.FGG.TTII....IIVG....VALE...TMK Q18CH6_CLOD6/69-406 SLFALGISPYITASIIIQLL................TV.GFESLAELQKS.GEEGKKKINKYTKYTALALAVVQALGITLGIVRSALISNS....................VFFITTVVI..TLVSASMLVMWIGDKITE.KGI.G.NGSSVIIFAGII.SRIPTD................................VI...KISQQ....................VKSG.EVAPWV.........I........VILAVVILLT.VTGVTFIQEATRKIPVQYAKR...VVGR.....KMY..GGQ..SSH.IPMKVNQSGVMPIIFASSL..LAFPQ...TIAMFM.....GPNAQ.............................A...............FVQKYLSMAT......................................EQGFWTY.RSIEILLIIFFSYFYT.TVSFNTEDISKNMKNNGGFIPGIRPG.EPTMDYLNRILTRLTLAGAT.FLAIIAMVP..ALTTHYM........................KV..........NMS.LAG.TSLL....IVVG....VALE...LKR B8D0S8_HALOH/72-406 TIFAMSITPYITASIILQLL................TG.VIPRLEELQKQ.GVEGRKKLTQYTRYGTVVLAIIQAFGITMLIGRHNVIVNPN...................LFNLMLIVI..SLTAGTAFLMWLGEQITD.KGI.G.NGISIIIFTSII.SRFPSY................................IH...RNWEL....................YKTG.DITALN.........I........LFFLVLAVVI.IAGVIFIQQGERRIPVQYSKR...VVGR.....KVY..GGR..STH.IPMRINQAGVIPVIFAQAV..LQFPT...VIAAVL.....PY................................G...............WAQD.IATAL......................................EPGKPVH.LVLYAAMIFFFTYFWT.AFTFNPEEVADNMRKSGAFIPGIRPG.KATENFLTRILVRVTLAGAI.FLTVIAIMP..YFISDIT........................RV..........RIS.FGG.TSLL....IMTG....VALQ...TMQ #=GC SS_cons BTT----HCCCCCCCHHHHC................CC.CSCCCCCHCC-------CCHHHHHHHHHHHHHHHHH-HCCCCC----S..-S----SS.........----THHHHHHHHH..HHH---HHHHHHHHHHCC.---.-.---CHHHH---CCCCCCCT................................CC...HH--S.S..................--.-.---CCH.........H........HHHHHHHHHH.H---HHCHC-EEEEEEE----...----.....---..---..ECE.EEEESS----HHHHHHHHH..CCHHH...HCCCT-.....TTS...............................-...............TTTT.TCCCC......................................-TTSHHH.HHHHHHHHHHHHHHHC.CTTTHHHHHHHCTT------------.-CCCCCCCCCCCCCCC---H.HHHHCCCHH..HHHCCCS........................--..........S-GGG--.-HHC....CC--....-HHH...HHH #=GC seq_cons olhuLGIhPaIoASIIhQLL...................shspLtclpcp.GcpGRc+lsphoRhholllullQuhuhshhhtths.........................hh..lhhll..pLssGohhlhWLuEhIoc.hGl.G.NGlSLlIhsuIl.sslsts................................lh...phhphh......................t..hshhh.........h........lhhllhhlhl.lhhllalppup++IPlpas+p.................tsp..psa.lPlKlNhuGVlPlIFAsul..lhhPt...hluphh......pt...............................t...............hhtp.lshhh.......................................hpshhY.hhlahshllhFuaFas.shshsPc-lAcsl++pGsaIPGlRPG.csTpcaLs+lls+lohhGul.aluhlullP..pllsshh.....................................h..huG.TulL....IhVu....lsl-...hhc // hmmer-3.1b2/easel/demotic/examples/.dropbox.attr0000775361611702660230000000000212473272210021240 0ustar wheelerteddy{}hmmer-3.1b2/easel/demotic/examples/example.h2.out0000664361611702660230000072514112473612604021331 0ustar wheelerteddyhmmsearch - search a sequence database with a profile HMM HMMER 2.3.2 (Oct 2003) Copyright (C) 1992-2003 HHMI/Washington University School of Medicine Freely distributed under the GNU General Public License (GPL) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HMM file: example.hmm2 [Orn_DAP_Arg_deC] Sequence database: /misc/data0/databases/Uniprot/uniprot_sprot.fasta per-sequence score cutoff: [none] per-domain score cutoff: [none] per-sequence Eval cutoff: <= 10 per-domain Eval cutoff: [none] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Query HMM: Orn_DAP_Arg_deC Accession: PF00278.15 Description: Pyridoxal-dependent decarboxylase, C-terminal sheet domain [HMM has been calibrated; E-values are empirical estimates] Scores for complete sequences (score includes all domains): Sequence Description Score E-value N -------- ----------- ----- ------- --- sp|O29458|DCDA_ARCFU Diaminopimelate decarboxylase O 173.5 3e-47 1 sp|Q9UQW9|DCOR_SCHPO Ornithine decarboxylase OS=Schi 171.6 1.2e-46 1 sp|O27390|DCDA_METTH Diaminopimelate decarboxylase O 162.1 8.4e-44 1 sp|Q9I8S4|DCOR2_XENLA Ornithine decarboxylase 2 OS=Xe 160.6 2.3e-43 1 sp|P09057|DCOR_RAT Ornithine decarboxylase OS=Ratt 160.5 2.5e-43 1 sp|P14019|DCOR_CRIGR Ornithine decarboxylase OS=Cric 159.9 3.8e-43 1 sp|P00860|DCOR_MOUSE Ornithine decarboxylase OS=Mus 159.8 3.9e-43 1 sp|P27119|DCOR_MUSPA Ornithine decarboxylase OS=Mus 159.8 3.9e-43 1 sp|P27118|DCOR_CHICK Ornithine decarboxylase (Fragme 158.8 8e-43 1 sp|P27120|DCOR1_XENLA Ornithine decarboxylase 1 OS=Xe 157.0 2.8e-42 1 sp|P11926|DCOR_HUMAN Ornithine decarboxylase OS=Homo 156.9 3e-42 1 sp|P27117|DCOR_BOVIN Ornithine decarboxylase OS=Bos 154.1 2.1e-41 1 sp|P07805|DCOR_TRYBB Ornithine decarboxylase OS=Tryp 151.2 1.6e-40 1 sp|Q9X1K5|DCDA_THEMA Diaminopimelate decarboxylase O 150.5 2.6e-40 1 sp|P49725|DCOR_PANRE Ornithine decarboxylase OS=Pana 146.6 3.7e-39 1 sp|O22616|DCOR_SOLLC Ornithine decarboxylase OS=Sola 145.8 6.6e-39 1 sp|P27121|DCOR_NEUCR Ornithine decarboxylase OS=Neur 145.7 7.3e-39 1 sp|P50134|DCOR_DATST Ornithine decarboxylase OS=Datu 145.5 8.2e-39 1 sp|P08432|DCOR_YEAST Ornithine decarboxylase OS=Sacc 143.2 4e-38 1 sp|Q8A2B1|SPEA_BACTN Biosynthetic arginine decarboxy 142.0 9.1e-38 1 sp|Q9HUX1|SPEA_PSEAE Biosynthetic arginine decarboxy 141.0 1.9e-37 1 sp|Q7NU27|SPEA_CHRVO Biosynthetic arginine decarboxy 140.9 2e-37 1 sp|O69203|DCDA_ACTPA Diaminopimelate decarboxylase O 140.6 2.5e-37 1 sp|Q8S3N2|DCOR_CAPAN Ornithine decarboxylase OS=Caps 140.5 2.6e-37 1 sp|P00861|DCDA_ECOLI Diaminopimelate decarboxylase O 140.3 3.1e-37 1 sp|Q7NE10|SPEA_GLOVI Biosynthetic arginine decarboxy 140.2 3.1e-37 1 sp|Q58497|DCDA_METJA Diaminopimelate decarboxylase O 140.0 3.8e-37 1 sp|Q5LIQ3|SPEA_BACFN Biosynthetic arginine decarboxy 139.5 5.4e-37 1 sp|Q64ZT8|SPEA_BACFR Biosynthetic arginine decarboxy 139.5 5.4e-37 1 sp|Q87VU3|SPEA_PSESM Biosynthetic arginine decarboxy 138.1 1.3e-36 1 sp|P40807|DCOR1_DROME Ornithine decarboxylase 1 OS=Dr 137.4 2.2e-36 1 sp|B0U1H6|SPEA_XYLFM Biosynthetic arginine decarboxy 137.4 2.3e-36 1 sp|Q9PH02|SPEA_XYLFA Biosynthetic arginine decarboxy 137.4 2.3e-36 1 sp|O05321|DCDA_PSEFL Diaminopimelate decarboxylase O 136.5 4.1e-36 1 sp|B2I6M1|SPEA_XYLF2 Biosynthetic arginine decarboxy 136.3 4.7e-36 1 sp|Q87F25|SPEA_XYLFT Biosynthetic arginine decarboxy 136.3 4.7e-36 1 sp|Q8DHY6|SPEA_THEEB Biosynthetic arginine decarboxy 136.0 6.1e-36 1 sp|O67262|DCDA_AQUAE Diaminopimelate decarboxylase O 135.8 6.8e-36 1 sp|Q88QC7|SPEA_PSEPK Biosynthetic arginine decarboxy 134.8 1.3e-35 1 sp|O14977|AZIN1_HUMAN Antizyme inhibitor 1 OS=Homo sa 133.2 4.2e-35 1 sp|Q5R7K3|AZIN1_PONAB Antizyme inhibitor 1 OS=Pongo a 133.2 4.2e-35 1 sp|O35484|AZIN1_MOUSE Antizyme inhibitor 1 OS=Mus mus 132.9 5.1e-35 1 sp|Q50140|DCDA_MYCLE Diaminopimelate decarboxylase O 132.9 5.2e-35 1 sp|A6L012|SPEA_BACV8 Biosynthetic arginine decarboxy 132.8 5.5e-35 1 sp|P19572|DCDA_PSEAE Diaminopimelate decarboxylase O 132.5 6.8e-35 1 sp|Q8YRP3|SPEA_ANASP Biosynthetic arginine decarboxy 132.3 7.9e-35 1 sp|P23630|DCDA_BACSU Diaminopimelate decarboxylase O 131.7 1.2e-34 1 sp|Q9ZBH5|DCDA_STRCO Diaminopimelate decarboxylase O 130.8 2.2e-34 1 sp|Q8K9C4|DCDA_BUCAP Diaminopimelate decarboxylase O 130.6 2.4e-34 1 sp|Q0ACK8|SPEA_ALHEH Biosynthetic arginine decarboxy 130.5 2.7e-34 1 sp|Q949X7|DCDA1_ARATH Diaminopimelate decarboxylase 1 129.2 6.8e-34 1 sp|Q94A94|DCDA2_ARATH Diaminopimelate decarboxylase 2 128.9 8.1e-34 1 sp|P0A5M5|DCDA_MYCBO Diaminopimelate decarboxylase O 128.6 9.9e-34 1 sp|P0A5M4|DCDA_MYCTU Diaminopimelate decarboxylase O 128.6 9.9e-34 1 sp|P41931|DCOR_CAEEL Ornithine decarboxylase OS=Caen 127.8 1.7e-33 1 sp|O50657|DCLO_SELRU Lysine/ornithine decarboxylase 127.7 1.9e-33 1 sp|Q9KVL7|DCDA_VIBCH Diaminopimelate decarboxylase O 127.4 2.4e-33 1 sp|Q6ZG77|DCDA_ORYSJ Probable diaminopimelate decarb 126.9 3.1e-33 1 sp|Q55484|DCDA_SYNY3 Diaminopimelate decarboxylase O 126.7 3.6e-33 1 sp|Q9JXM2|DCDA_NEIMB Diaminopimelate decarboxylase O 125.6 8.1e-33 1 sp|Q8P448|SPEA_XANCP Biosynthetic arginine decarboxy 125.2 1e-32 1 sp|Q54UF3|DCOR_DICDI Probable ornithine decarboxylas 125.0 1.2e-32 1 sp|Q9Z661|DCDA_ZYMMO Diaminopimelate decarboxylase O 124.9 1.3e-32 1 sp|Q9JWA6|DCDA_NEIMA Diaminopimelate decarboxylase O 123.9 2.6e-32 1 sp|P40808|DCOR2_DROME Ornithine decarboxylase 2 OS=Dr 123.4 3.6e-32 1 sp|Q8PFQ5|SPEA_XANAC Biosynthetic arginine decarboxy 122.9 5.1e-32 1 sp|P56129|DCDA_HELPY Diaminopimelate decarboxylase O 122.1 9e-32 1 sp|Q89AC6|DCDA_BUCBP Diaminopimelate decarboxylase O 121.5 1.4e-31 1 sp|P78599|DCOR_CANAL Ornithine decarboxylase OS=Cand 121.5 1.4e-31 1 sp|Q8DA54|SPEA_VIBVU Biosynthetic arginine decarboxy 121.1 1.8e-31 1 sp|Q7MK24|SPEA_VIBVY Biosynthetic arginine decarboxy 121.1 1.8e-31 1 sp|A4Y5Y9|SPEA_SHEPC Biosynthetic arginine decarboxy 121.1 1.8e-31 1 sp|A1RKK8|SPEA_SHESW Biosynthetic arginine decarboxy 121.1 1.8e-31 1 sp|P57513|DCDA_BUCAI Diaminopimelate decarboxylase O 121.0 2e-31 1 sp|Q9RTK2|DCDA_DEIRA Diaminopimelate decarboxylase O 120.9 2.1e-31 1 sp|B8CR70|SPEA_SHEPW Biosynthetic arginine decarboxy 120.8 2.2e-31 1 sp|A3QDD8|SPEA_SHELP Biosynthetic arginine decarboxy 120.3 3.2e-31 1 sp|B8EAI2|SPEA_SHEB2 Biosynthetic arginine decarboxy 119.9 4.1e-31 1 sp|A3D3G2|SPEA_SHEB5 Biosynthetic arginine decarboxy 119.9 4.1e-31 1 sp|A6WM65|SPEA_SHEB8 Biosynthetic arginine decarboxy 119.9 4.1e-31 1 sp|A9KY70|SPEA_SHEB9 Biosynthetic arginine decarboxy 119.9 4.1e-31 1 sp|P27116|DCOR_LEIDO Ornithine decarboxylase OS=Leis 119.8 4.5e-31 1 sp|Q083L6|SPEA_SHEFN Biosynthetic arginine decarboxy 119.2 6.6e-31 1 sp|Q8EFU5|SPEA_SHEON Biosynthetic arginine decarboxy 119.1 7e-31 1 sp|B1KRD4|SPEA_SHEWM Biosynthetic arginine decarboxy 118.6 1e-30 1 sp|Q7V3M9|SPEA_PROMP Biosynthetic arginine decarboxy 118.5 1.1e-30 1 sp|A8FWJ3|SPEA_SHESH Biosynthetic arginine decarboxy 117.5 2.2e-30 1 sp|Q0HJY2|SPEA_SHESM Biosynthetic arginine decarboxy 117.3 2.5e-30 1 sp|Q0HW78|SPEA_SHESR Biosynthetic arginine decarboxy 117.3 2.5e-30 1 sp|Q63764|AZIN1_RAT Antizyme inhibitor 1 OS=Rattus 117.2 2.7e-30 1 sp|Q9ZME5|DCDA_HELPJ Diaminopimelate decarboxylase O 117.1 2.9e-30 1 sp|A0KVN8|SPEA_SHESA Biosynthetic arginine decarboxy 117.0 3.1e-30 1 sp|Q8ZHG8|SPEA_YERPE Biosynthetic arginine decarboxy 117.0 3.1e-30 1 sp|B5XUB1|SPEA_KLEP3 Biosynthetic arginine decarboxy 116.8 3.5e-30 1 sp|Q12LW6|SPEA_SHEDO Biosynthetic arginine decarboxy 116.8 3.5e-30 1 sp|A2BNH3|SPEA_PROMS Biosynthetic arginine decarboxy 116.8 3.6e-30 1 sp|Q87JS8|SPEA_VIBPA Biosynthetic arginine decarboxy 116.7 3.8e-30 1 sp|A8H5G3|SPEA_SHEPA Biosynthetic arginine decarboxy 116.7 3.8e-30 1 sp|A3PA96|SPEA_PROM0 Biosynthetic arginine decarboxy 116.6 4.1e-30 1 sp|P41023|DCDA_BACMT Diaminopimelate decarboxylase O 116.4 4.6e-30 1 sp|B0TQX3|SPEA_SHEHH Biosynthetic arginine decarboxy 116.4 4.8e-30 1 sp|Q31DD8|SPEA_PROM9 Biosynthetic arginine decarboxy 116.4 4.8e-30 1 sp|Q96412|SPE1_DIACA Arginine decarboxylase OS=Diant 116.3 4.9e-30 1 sp|A1S712|SPEA_SHEAM Biosynthetic arginine decarboxy 116.1 5.9e-30 1 sp|A8G243|SPEA_PROM2 Biosynthetic arginine decarboxy 115.5 8.8e-30 1 sp|Q7VEG4|SPEA_PROMA Biosynthetic arginine decarboxy 115.2 1.1e-29 1 sp|C4K6F4|SPEA_HAMD5 Biosynthetic arginine decarboxy 114.9 1.3e-29 1 sp|B5F5L1|SPEA_SALA4 Biosynthetic arginine decarboxy 114.9 1.3e-29 1 sp|Q57K30|SPEA_SALCH Biosynthetic arginine decarboxy 114.9 1.3e-29 1 sp|B5FUJ7|SPEA_SALDC Biosynthetic arginine decarboxy 114.9 1.3e-29 1 sp|B4THH1|SPEA_SALHS Biosynthetic arginine decarboxy 114.9 1.3e-29 1 sp|A9N4N1|SPEA_SALPB Biosynthetic arginine decarboxy 114.9 1.3e-29 1 sp|B4TV55|SPEA_SALSV Biosynthetic arginine decarboxy 114.9 1.3e-29 1 sp|P60659|SPEA_SALTY Biosynthetic arginine decarboxy 114.9 1.3e-29 1 sp|P60658|SPEA_SALTI Biosynthetic arginine decarboxy 114.9 1.3e-29 1 sp|B4T5J3|SPEA_SALNS Biosynthetic arginine decarboxy 114.9 1.3e-29 1 sp|P44316|DCDA_HAEIN Diaminopimelate decarboxylase O 114.9 1.4e-29 1 sp|P22220|SPE1_AVESA Arginine decarboxylase OS=Avena 114.8 1.4e-29 1 sp|Q9X5M1|DCDA_MYCS2 Diaminopimelate decarboxylase O 114.7 1.5e-29 1 sp|Q9KLD1|SPEA_VIBCH Biosynthetic arginine decarboxy 114.4 1.9e-29 1 sp|Q8XCX9|SPEA_ECO57 Biosynthetic arginine decarboxy 114.2 2.2e-29 1 sp|B5YQD6|SPEA_ECO5E Biosynthetic arginine decarboxy 114.2 2.2e-29 1 sp|Q8FE34|SPEA_ECOL6 Biosynthetic arginine decarboxy 114.2 2.2e-29 1 sp|B1LDE8|SPEA_ECOSM Biosynthetic arginine decarboxy 114.2 2.2e-29 1 sp|Q0T0V3|SPEA_SHIF8 Biosynthetic arginine decarboxy 113.9 2.6e-29 1 sp|Q83Q93|SPEA_SHIFL Biosynthetic arginine decarboxy 113.9 2.6e-29 1 sp|B9M6H6|SPEA_GEOSF Biosynthetic arginine decarboxy 113.6 3.3e-29 1 sp|P21170|SPEA_ECOLI Biosynthetic arginine decarboxy 113.6 3.4e-29 1 sp|B5EIW4|SPEA_GEOBB Biosynthetic arginine decarboxy 112.8 5.7e-29 1 sp|C6E3V4|SPEA_GEOSM Biosynthetic arginine decarboxy 112.8 5.7e-29 1 sp|A1AS90|SPEA_PELPD Biosynthetic arginine decarboxy 112.3 8.2e-29 1 sp|A2BU00|SPEA_PROM5 Biosynthetic arginine decarboxy 112.2 8.6e-29 1 sp|Q8RQM6|DCDA_COREF Diaminopimelate decarboxylase O 109.3 6.4e-28 1 sp|B4F1A4|SPEA_PROMH Biosynthetic arginine decarboxy 108.8 8.9e-28 1 sp|P74576|SPEA1_SYNY3 Biosynthetic arginine decarboxy 108.1 1.5e-27 1 sp|A5GB52|SPEA_GEOUR Biosynthetic arginine decarboxy 107.3 2.6e-27 1 sp|Q7U3S0|SPEA_SYNPX Biosynthetic arginine decarboxy 107.1 2.9e-27 1 sp|A0A4W3|SPEA_GEOSL Biosynthetic arginine decarboxy 106.7 3.9e-27 1 sp|Q39X78|SPEA_GEOMG Biosynthetic arginine decarboxy 106.4 4.8e-27 1 sp|A1TY02|SPEA_MARAV Biosynthetic arginine decarboxy 106.3 5e-27 1 sp|Q9RXR4|SPEA_DEIRA Biosynthetic arginine decarboxy 106.0 6.4e-27 1 sp|P09890|DCDA_CORGL Diaminopimelate decarboxylase O 105.3 1e-26 1 sp|O82475|SPE1_BRAJU Arginine decarboxylase OS=Brass 104.8 1.5e-26 1 sp|Q39827|SPE1_SOYBN Arginine decarboxylase OS=Glyci 104.7 1.6e-26 1 sp|Q7N121|SPEA_PHOLL Biosynthetic arginine decarboxy 104.7 1.6e-26 1 sp|B3EAF3|SPEA_GEOLS Biosynthetic arginine decarboxy 104.5 1.8e-26 1 sp|A5GWM2|SPEA_SYNR3 Biosynthetic arginine decarboxy 104.5 1.8e-26 1 sp|Q7UTS2|SPEA_RHOBA Biosynthetic arginine decarboxy 104.0 2.5e-26 1 sp|Q9KCM5|DCDA_BACHD Diaminopimelate decarboxylase O 103.8 3e-26 1 sp|Q96A70|ADC_HUMAN Arginine decarboxylase OS=Homo 103.7 3.1e-26 1 sp|Q43075|SPE1_PEA Arginine decarboxylase OS=Pisum 102.6 6.5e-26 1 sp|P72587|SPEA2_SYNY3 Biosynthetic arginine decarboxy 100.6 2.6e-25 1 sp|Q7TUJ9|SPEA_PROMM Biosynthetic arginine decarboxy 100.2 3.7e-25 1 sp|P49726|SPE1_SOLLC Arginine decarboxylase OS=Solan 98.7 1e-24 1 sp|Q9PII5|DCDA_CAMJE Diaminopimelate decarboxylase O 98.5 1.1e-24 1 sp|A2CDK1|SPEA_PROM3 Biosynthetic arginine decarboxy 98.1 1.5e-24 1 sp|Q8BVM4|ADC_MOUSE Antizyme inhibitor 2 OS=Mus mus 97.9 1.7e-24 1 sp|Q9CL60|SPEA_PASMU Biosynthetic arginine decarboxy 95.7 8e-24 1 sp|O23141|SPE2_ARATH Arginine decarboxylase 2 OS=Ara 94.8 1.5e-23 1 sp|Q9SNN0|SPE1_ORYSJ Arginine decarboxylase 1 OS=Ory 94.7 1.6e-23 1 sp|P31851|TABA_PSESZ Protein tabA OS=Pseudomonas syr 92.2 8.9e-23 1 sp|Q9JT25|SPEA_NEIMA Biosynthetic arginine decarboxy 91.8 1.2e-22 1 sp|Q9K0U3|SPEA_NEIMB Biosynthetic arginine decarboxy 91.8 1.2e-22 1 sp|Q7XRA1|ADC2_ORYSJ Arginine decarboxylase 2 OS=Ory 91.2 1.8e-22 1 sp|Q9SI64|SPE1_ARATH Arginine decarboxylase 1 OS=Ara 88.2 1.5e-21 1 sp|C4L9A9|SPEA_TOLAT Biosynthetic arginine decarboxy 87.6 2.2e-21 1 sp|A0KIP8|SPEA_AERHH Biosynthetic arginine decarboxy 78.4 1.3e-18 1 sp|A4SPD6|SPEA_AERS4 Biosynthetic arginine decarboxy 73.6 3.6e-17 1 sp|P55709|Y4YA_RHISN Uncharacterized protein y4yA OS 23.1 0.0018 1 sp|O81160|SPE2_THECC Arginine decarboxylase (Fragmen -9.6 1.1 1 Parsed for domains: Sequence Domain seq-f seq-t hmm-f hmm-t score E-value -------- ------- ----- ----- ----- ----- ----- ------- sp|O29458|DCDA_ARCFU 1/1 285 391 .. 1 123 [] 173.5 3e-47 sp|Q9UQW9|DCOR_SCHPO 1/1 307 426 .. 1 123 [] 171.6 1.2e-46 sp|O27390|DCDA_METTH 1/1 292 398 .. 1 123 [] 162.1 8.4e-44 sp|Q9I8S4|DCOR2_XENLA 1/1 284 405 .. 1 123 [] 160.6 2.3e-43 sp|P09057|DCOR_RAT 1/1 285 408 .. 1 123 [] 160.5 2.5e-43 sp|P14019|DCOR_CRIGR 1/1 282 402 .. 1 123 [] 159.9 3.8e-43 sp|P00860|DCOR_MOUSE 1/1 285 408 .. 1 123 [] 159.8 3.9e-43 sp|P27119|DCOR_MUSPA 1/1 285 408 .. 1 123 [] 159.8 3.9e-43 sp|P27118|DCOR_CHICK 1/1 275 398 .. 1 123 [] 158.8 8e-43 sp|P27120|DCOR1_XENLA 1/1 285 409 .. 1 123 [] 157.0 2.8e-42 sp|P11926|DCOR_HUMAN 1/1 285 408 .. 1 123 [] 156.9 3e-42 sp|P27117|DCOR_BOVIN 1/1 285 408 .. 1 123 [] 154.1 2.1e-41 sp|P07805|DCOR_TRYBB 1/1 283 406 .. 1 123 [] 151.2 1.6e-40 sp|Q9X1K5|DCDA_THEMA 1/1 257 362 .. 1 123 [] 150.5 2.6e-40 sp|P49725|DCOR_PANRE 1/1 294 416 .. 1 123 [] 146.6 3.7e-39 sp|O22616|DCOR_SOLLC 1/1 308 424 .. 1 123 [] 145.8 6.6e-39 sp|P27121|DCOR_NEUCR 1/1 326 471 .. 1 123 [] 145.7 7.3e-39 sp|P50134|DCOR_DATST 1/1 308 424 .. 1 123 [] 145.5 8.2e-39 sp|P08432|DCOR_YEAST 1/1 329 460 .. 1 123 [] 143.2 4e-38 sp|Q8A2B1|SPEA_BACTN 1/1 346 558 .. 1 123 [] 142.0 9.1e-38 sp|Q9HUX1|SPEA_PSEAE 1/1 354 567 .. 1 123 [] 141.0 1.9e-37 sp|Q7NU27|SPEA_CHRVO 1/1 343 556 .. 1 123 [] 140.9 2e-37 sp|O69203|DCDA_ACTPA 1/1 309 415 .. 1 123 [] 140.6 2.5e-37 sp|Q8S3N2|DCOR_CAPAN 1/1 312 428 .. 1 123 [] 140.5 2.6e-37 sp|P00861|DCDA_ECOLI 1/1 279 397 .. 1 123 [] 140.3 3.1e-37 sp|Q7NE10|SPEA_GLOVI 1/1 346 557 .. 1 123 [] 140.2 3.1e-37 sp|Q58497|DCDA_METJA 1/1 305 410 .. 1 123 [] 140.0 3.8e-37 sp|Q5LIQ3|SPEA_BACFN 1/1 346 558 .. 1 123 [] 139.5 5.4e-37 sp|Q64ZT8|SPEA_BACFR 1/1 346 558 .. 1 123 [] 139.5 5.4e-37 sp|Q87VU3|SPEA_PSESM 1/1 354 567 .. 1 123 [] 138.1 1.3e-36 sp|P40807|DCOR1_DROME 1/1 276 391 .. 1 123 [] 137.4 2.2e-36 sp|B0U1H6|SPEA_XYLFM 1/1 343 555 .. 1 123 [] 137.4 2.3e-36 sp|Q9PH02|SPEA_XYLFA 1/1 343 555 .. 1 123 [] 137.4 2.3e-36 sp|O05321|DCDA_PSEFL 1/1 285 390 .. 1 123 [] 136.5 4.1e-36 sp|B2I6M1|SPEA_XYLF2 1/1 343 555 .. 1 123 [] 136.3 4.7e-36 sp|Q87F25|SPEA_XYLFT 1/1 343 555 .. 1 123 [] 136.3 4.7e-36 sp|Q8DHY6|SPEA_THEEB 1/1 353 564 .. 1 123 [] 136.0 6.1e-36 sp|O67262|DCDA_AQUAE 1/1 290 396 .. 1 123 [] 135.8 6.8e-36 sp|Q88QC7|SPEA_PSEPK 1/1 354 567 .. 1 123 [] 134.8 1.3e-35 sp|O14977|AZIN1_HUMAN 1/1 282 406 .. 1 123 [] 133.2 4.2e-35 sp|Q5R7K3|AZIN1_PONAB 1/1 282 406 .. 1 123 [] 133.2 4.2e-35 sp|O35484|AZIN1_MOUSE 1/1 282 406 .. 1 123 [] 132.9 5.1e-35 sp|Q50140|DCDA_MYCLE 1/1 336 449 .. 1 123 [] 132.9 5.2e-35 sp|A6L012|SPEA_BACV8 1/1 346 558 .. 1 123 [] 132.8 5.5e-35 sp|P19572|DCDA_PSEAE 1/1 284 389 .. 1 123 [] 132.5 6.8e-35 sp|Q8YRP3|SPEA_ANASP 1/1 395 606 .. 1 123 [] 132.3 7.9e-35 sp|P23630|DCDA_BACSU 1/1 301 409 .. 1 123 [] 131.7 1.2e-34 sp|Q9ZBH5|DCDA_STRCO 1/1 286 403 .. 1 123 [] 130.8 2.2e-34 sp|Q8K9C4|DCDA_BUCAP 1/1 275 393 .. 1 123 [] 130.6 2.4e-34 sp|Q0ACK8|SPEA_ALHEH 1/1 345 558 .. 1 123 [] 130.5 2.7e-34 sp|Q949X7|DCDA1_ARATH 1/1 351 459 .. 1 123 [] 129.2 6.8e-34 sp|Q94A94|DCDA2_ARATH 1/1 356 464 .. 1 123 [] 128.9 8.1e-34 sp|P0A5M5|DCDA_MYCBO 1/1 311 424 .. 1 123 [] 128.6 9.9e-34 sp|P0A5M4|DCDA_MYCTU 1/1 311 424 .. 1 123 [] 128.6 9.9e-34 sp|P41931|DCOR_CAEEL 1/1 286 407 .. 1 123 [] 127.8 1.7e-33 sp|O50657|DCLO_SELRU 1/1 266 371 .. 1 123 [] 127.7 1.9e-33 sp|Q9KVL7|DCDA_VIBCH 1/1 286 391 .. 1 123 [] 127.4 2.4e-33 sp|Q6ZG77|DCDA_ORYSJ 1/1 356 463 .. 1 123 [] 126.9 3.1e-33 sp|Q55484|DCDA_SYNY3 1/1 332 440 .. 1 123 [] 126.7 3.6e-33 sp|Q9JXM2|DCDA_NEIMB 1/1 276 381 .. 1 123 [] 125.6 8.1e-33 sp|Q8P448|SPEA_XANCP 1/1 343 555 .. 1 123 [] 125.2 1e-32 sp|Q54UF3|DCOR_DICDI 1/1 328 450 .. 1 123 [] 125.0 1.2e-32 sp|Q9Z661|DCDA_ZYMMO 1/1 289 394 .. 1 123 [] 124.9 1.3e-32 sp|Q9JWA6|DCDA_NEIMA 1/1 276 381 .. 1 123 [] 123.9 2.6e-32 sp|P40808|DCOR2_DROME 1/1 276 390 .. 1 123 [] 123.4 3.6e-32 sp|Q8PFQ5|SPEA_XANAC 1/1 343 555 .. 1 123 [] 122.9 5.1e-32 sp|P56129|DCDA_HELPY 1/1 270 377 .. 1 123 [] 122.1 9e-32 sp|Q89AC6|DCDA_BUCBP 1/1 275 393 .. 1 123 [] 121.5 1.4e-31 sp|P78599|DCOR_CANAL 1/1 324 468 .. 1 123 [] 121.5 1.4e-31 sp|Q8DA54|SPEA_VIBVU 1/1 355 571 .. 1 123 [] 121.1 1.8e-31 sp|Q7MK24|SPEA_VIBVY 1/1 354 570 .. 1 123 [] 121.1 1.8e-31 sp|A4Y5Y9|SPEA_SHEPC 1/1 350 566 .. 1 123 [] 121.1 1.8e-31 sp|A1RKK8|SPEA_SHESW 1/1 350 566 .. 1 123 [] 121.1 1.8e-31 sp|P57513|DCDA_BUCAI 1/1 275 393 .. 1 123 [] 121.0 2e-31 sp|Q9RTK2|DCDA_DEIRA 1/1 253 357 .. 1 123 [] 120.9 2.1e-31 sp|B8CR70|SPEA_SHEPW 1/1 350 566 .. 1 123 [] 120.8 2.2e-31 sp|A3QDD8|SPEA_SHELP 1/1 350 566 .. 1 123 [] 120.3 3.2e-31 sp|B8EAI2|SPEA_SHEB2 1/1 350 566 .. 1 123 [] 119.9 4.1e-31 sp|A3D3G2|SPEA_SHEB5 1/1 350 566 .. 1 123 [] 119.9 4.1e-31 sp|A6WM65|SPEA_SHEB8 1/1 350 566 .. 1 123 [] 119.9 4.1e-31 sp|A9KY70|SPEA_SHEB9 1/1 350 566 .. 1 123 [] 119.9 4.1e-31 sp|P27116|DCOR_LEIDO 1/1 509 682 .. 1 123 [] 119.8 4.5e-31 sp|Q083L6|SPEA_SHEFN 1/1 350 566 .. 1 123 [] 119.2 6.6e-31 sp|Q8EFU5|SPEA_SHEON 1/1 350 566 .. 1 123 [] 119.1 7e-31 sp|B1KRD4|SPEA_SHEWM 1/1 350 566 .. 1 123 [] 118.6 1e-30 sp|Q7V3M9|SPEA_PROMP 1/1 355 574 .. 1 123 [] 118.5 1.1e-30 sp|A8FWJ3|SPEA_SHESH 1/1 350 566 .. 1 123 [] 117.5 2.2e-30 sp|Q0HJY2|SPEA_SHESM 1/1 350 566 .. 1 123 [] 117.3 2.5e-30 sp|Q0HW78|SPEA_SHESR 1/1 350 566 .. 1 123 [] 117.3 2.5e-30 sp|Q63764|AZIN1_RAT 1/1 282 406 .. 1 123 [] 117.2 2.7e-30 sp|Q9ZME5|DCDA_HELPJ 1/1 270 377 .. 1 123 [] 117.1 2.9e-30 sp|A0KVN8|SPEA_SHESA 1/1 350 566 .. 1 123 [] 117.0 3.1e-30 sp|Q8ZHG8|SPEA_YERPE 1/1 372 588 .. 1 123 [] 117.0 3.1e-30 sp|B5XUB1|SPEA_KLEP3 1/1 345 561 .. 1 123 [] 116.8 3.5e-30 sp|Q12LW6|SPEA_SHEDO 1/1 350 566 .. 1 123 [] 116.8 3.5e-30 sp|A2BNH3|SPEA_PROMS 1/1 355 574 .. 1 123 [] 116.8 3.6e-30 sp|Q87JS8|SPEA_VIBPA 1/1 354 570 .. 1 123 [] 116.7 3.8e-30 sp|A8H5G3|SPEA_SHEPA 1/1 350 566 .. 1 123 [] 116.7 3.8e-30 sp|A3PA96|SPEA_PROM0 1/1 355 574 .. 1 123 [] 116.6 4.1e-30 sp|P41023|DCDA_BACMT 1/1 301 409 .. 1 123 [] 116.4 4.6e-30 sp|B0TQX3|SPEA_SHEHH 1/1 350 566 .. 1 123 [] 116.4 4.8e-30 sp|Q31DD8|SPEA_PROM9 1/1 355 574 .. 1 123 [] 116.4 4.8e-30 sp|Q96412|SPE1_DIACA 1/1 491 605 .. 1 123 [] 116.3 4.9e-30 sp|A1S712|SPEA_SHEAM 1/1 350 566 .. 1 123 [] 116.1 5.9e-30 sp|A8G243|SPEA_PROM2 1/1 355 574 .. 1 123 [] 115.5 8.8e-30 sp|Q7VEG4|SPEA_PROMA 1/1 355 574 .. 1 123 [] 115.2 1.1e-29 sp|C4K6F4|SPEA_HAMD5 1/1 346 562 .. 1 123 [] 114.9 1.3e-29 sp|B5F5L1|SPEA_SALA4 1/1 345 561 .. 1 123 [] 114.9 1.3e-29 sp|Q57K30|SPEA_SALCH 1/1 345 561 .. 1 123 [] 114.9 1.3e-29 sp|B5FUJ7|SPEA_SALDC 1/1 345 561 .. 1 123 [] 114.9 1.3e-29 sp|B4THH1|SPEA_SALHS 1/1 345 561 .. 1 123 [] 114.9 1.3e-29 sp|A9N4N1|SPEA_SALPB 1/1 345 561 .. 1 123 [] 114.9 1.3e-29 sp|B4TV55|SPEA_SALSV 1/1 345 561 .. 1 123 [] 114.9 1.3e-29 sp|P60659|SPEA_SALTY 1/1 371 587 .. 1 123 [] 114.9 1.3e-29 sp|P60658|SPEA_SALTI 1/1 371 587 .. 1 123 [] 114.9 1.3e-29 sp|B4T5J3|SPEA_SALNS 1/1 345 561 .. 1 123 [] 114.9 1.3e-29 sp|P44316|DCDA_HAEIN 1/1 285 391 .. 1 123 [] 114.9 1.4e-29 sp|P22220|SPE1_AVESA 1/1 355 532 .. 1 123 [] 114.8 1.4e-29 sp|Q9X5M1|DCDA_MYCS2 1/1 336 449 .. 1 123 [] 114.7 1.5e-29 sp|Q9KLD1|SPEA_VIBCH 1/1 354 570 .. 1 123 [] 114.4 1.9e-29 sp|Q8XCX9|SPEA_ECO57 1/1 371 587 .. 1 123 [] 114.2 2.2e-29 sp|B5YQD6|SPEA_ECO5E 1/1 345 561 .. 1 123 [] 114.2 2.2e-29 sp|Q8FE34|SPEA_ECOL6 1/1 371 587 .. 1 123 [] 114.2 2.2e-29 sp|B1LDE8|SPEA_ECOSM 1/1 345 561 .. 1 123 [] 114.2 2.2e-29 sp|Q0T0V3|SPEA_SHIF8 1/1 345 561 .. 1 123 [] 113.9 2.6e-29 sp|Q83Q93|SPEA_SHIFL 1/1 371 587 .. 1 123 [] 113.9 2.6e-29 sp|B9M6H6|SPEA_GEOSF 1/1 346 561 .. 1 123 [] 113.6 3.3e-29 sp|P21170|SPEA_ECOLI 1/1 371 587 .. 1 123 [] 113.6 3.4e-29 sp|B5EIW4|SPEA_GEOBB 1/1 425 561 .. 1 123 [] 112.8 5.7e-29 sp|C6E3V4|SPEA_GEOSM 1/1 425 561 .. 1 123 [] 112.8 5.7e-29 sp|A1AS90|SPEA_PELPD 1/1 425 561 .. 1 123 [] 112.3 8.2e-29 sp|A2BU00|SPEA_PROM5 1/1 355 574 .. 1 123 [] 112.2 8.6e-29 sp|Q8RQM6|DCDA_COREF 1/1 324 437 .. 1 123 [] 109.3 6.4e-28 sp|B4F1A4|SPEA_PROMH 1/1 347 563 .. 1 123 [] 108.8 8.9e-28 sp|P74576|SPEA1_SYNY3 1/1 396 615 .. 1 123 [] 108.1 1.5e-27 sp|A5GB52|SPEA_GEOUR 1/1 346 561 .. 1 123 [] 107.3 2.6e-27 sp|Q7U3S0|SPEA_SYNPX 1/1 351 570 .. 1 123 [] 107.1 2.9e-27 sp|A0A4W3|SPEA_GEOSL 1/1 425 561 .. 1 123 [] 106.7 3.9e-27 sp|Q39X78|SPEA_GEOMG 1/1 425 561 .. 1 123 [] 106.4 4.8e-27 sp|A1TY02|SPEA_MARAV 1/1 350 566 .. 1 123 [] 106.3 5e-27 sp|Q9RXR4|SPEA_DEIRA 1/1 372 586 .. 1 123 [] 106.0 6.4e-27 sp|P09890|DCDA_CORGL 1/1 310 423 .. 1 123 [] 105.3 1e-26 sp|O82475|SPE1_BRAJU 1/1 390 585 .. 1 123 [] 104.8 1.5e-26 sp|Q39827|SPE1_SOYBN 1/1 401 596 .. 1 123 [] 104.7 1.6e-26 sp|Q7N121|SPEA_PHOLL 1/1 347 563 .. 1 123 [] 104.7 1.6e-26 sp|B3EAF3|SPEA_GEOLS 1/1 346 561 .. 1 123 [] 104.5 1.8e-26 sp|A5GWM2|SPEA_SYNR3 1/1 355 566 .. 1 123 [] 104.5 1.8e-26 sp|Q7UTS2|SPEA_RHOBA 1/1 460 592 .. 1 123 [] 104.0 2.5e-26 sp|Q9KCM5|DCDA_BACHD 1/1 301 409 .. 1 123 [] 103.8 3e-26 sp|Q96A70|ADC_HUMAN 1/1 286 409 .. 1 123 [] 103.7 3.1e-26 sp|Q43075|SPE1_PEA 1/1 494 609 .. 1 123 [] 102.6 6.5e-26 sp|P72587|SPEA2_SYNY3 1/1 375 587 .. 1 123 [] 100.6 2.6e-25 sp|Q7TUJ9|SPEA_PROMM 1/1 355 574 .. 1 123 [] 100.2 3.7e-25 sp|P49726|SPE1_SOLLC 1/1 291 492 .. 1 123 [] 98.7 1e-24 sp|Q9PII5|DCDA_CAMJE 1/1 270 375 .. 1 123 [] 98.5 1.1e-24 sp|A2CDK1|SPEA_PROM3 1/1 355 574 .. 1 123 [] 98.1 1.5e-24 sp|Q8BVM4|ADC_MOUSE 1/1 286 408 .. 1 123 [] 97.9 1.7e-24 sp|Q9CL60|SPEA_PASMU 1/1 357 573 .. 1 123 [] 95.7 8e-24 sp|O23141|SPE2_ARATH 1/1 481 596 .. 1 123 [] 94.8 1.5e-23 sp|Q9SNN0|SPE1_ORYSJ 1/1 401 598 .. 1 123 [] 94.7 1.6e-23 sp|P31851|TABA_PSESZ 1/1 278 383 .. 1 123 [] 92.2 8.9e-23 sp|Q9JT25|SPEA_NEIMA 1/1 343 559 .. 1 123 [] 91.8 1.2e-22 sp|Q9K0U3|SPEA_NEIMB 1/1 343 559 .. 1 123 [] 91.8 1.2e-22 sp|Q7XRA1|ADC2_ORYSJ 1/1 381 547 .. 1 123 [] 91.2 1.8e-22 sp|Q9SI64|SPE1_ARATH 1/1 385 584 .. 1 123 [] 88.2 1.5e-21 sp|C4L9A9|SPEA_TOLAT 1/1 433 566 .. 1 123 [] 87.6 2.2e-21 sp|A0KIP8|SPEA_AERHH 1/1 348 564 .. 1 123 [] 78.4 1.3e-18 sp|A4SPD6|SPEA_AERS4 1/1 348 564 .. 1 123 [] 73.6 3.6e-17 sp|P55709|Y4YA_RHISN 1/1 324 439 .. 1 123 [] 23.1 0.0018 sp|O81160|SPE2_THECC 1/1 341 406 .] 1 123 [] -9.6 1.1 Alignments of top-scoring domains: sp|O29458|DCDA_ARCFU: domain 1 of 1, from 285 to 391: score 173.5, E = 3e-47 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L+t+V +vk+ g+ + fv+ +d+G++ + ++pa+y+ + sp|O29458| 285 VLITRVNAVKK-GY-KN--------FVA-VDAGFNVL-IRPAMYGSY 319 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv h++++ +++d+ep+e++t++GP+C+sgDvlar d++LP ++evGDl++ sp|O29458| 320 HRVAVANKMDAEPEEVYTVVGPICESGDVLAR-DRKLP---KVEVGDLIA 365 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* +fdaGAY+++++s++Ng+pr+aeVlv sp|O29458| 366 VFDAGAYGFVMSSQYNGRPRCAEVLV 391 sp|Q9UQW9|DCOR_SCHPO: domain 1 of 1, from 307 to 426: score 171.6, E = 1.2e-46 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal tL++nVi+++++++++k +yy++dGvygs ++++l+d++ sp|Q9UQW9| 307 TLAVNVIAKRKLDDEEK--------VMYYVNDGVYGS-LNCILFDHQ 344 CS --EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE... hpilpvsr.........ldeeptepvtlaGPtCdsgDvlarFdvsLPlHl hp++ v + +++ ++l ++ +++ ++GPtCds+Dv+a+ d +LP sp|Q9UQW9| 345 HPVARVLKcgsrfvyndLVGTGQHRCFIWGPTCDSLDVIAN-DAHLPY-- 391 CS ------EEEES-----SGCC-B-TTT--.-EEEEE elevGDllvffdaGAYteslasnFNgfprpaeVlv<-* el+vGD+++f+daGAYt ++as+FNgf+ +V++ sp|Q9UQW9| 392 ELNVGDWIYFEDAGAYTVAAASCFNGFKTSRIVYL 426 sp|O27390|DCDA_METTH: domain 1 of 1, from 292 to 398: score 162.1, E = 8.4e-44 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L+t+V ++ke ++ rk f++ +d+G++++ ++pa+y+ + sp|O27390| 292 YLLTRVNTIKE-SY-RK--------FAG-VDAGFNTL-LRPAMYGSY 326 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv h+il+ +r+ +ep e+ ++aG+ C+sgD +ar d++LP e+++GD l+ sp|O27390| 327 HHILVAERPLDEPSEKMDVAGNVCESGDLFAR-DRQLP---EINEGDVLA 372 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* +++aGAY +s++s++N++prpaeVlv sp|O27390| 373 IMNAGAYSFSMSSQYNSRPRPAEVLV 398 sp|Q9I8S4|DCOR2_XENLA: domain 1 of 1, from 284 to 405: score 160.6, E = 2.3e-43 CS EEEEEEEEEEE--S S-E........EEEEES----S- *->tLvtnVigvkergg..........drkldlnerlafvyylddGvygs +L++nVi++ke++ + ++++++++ + ++yy++dGvygs sp|Q9I8S4| 284 SLAVNVIAKKEVEHsvsddeenesSKS--------IMYYVNDGVYGS 322 CS .-CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE lpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvsLP +++ +d+ hp +++++++ +++p+++++l+GPtCd++D +a+ v+LP sp|Q9I8S4| 323 -FNCLVFDHAHPKPILHKkpSPDQPLYTSSLWGPTCDGLDQIAE-RVQLP 370 CS ...------EEEES-----SGCC-B-TTT--.-EEEEE lHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* el+vGD+l+f+++GAYt++++snFNgf++ ++ + sp|Q9I8S4| 371 ---ELHVGDWLLFENMGAYTIAASSNFNGFQQSPVHYA 405 sp|P09057|DCOR_RAT: domain 1 of 1, from 285 to 408: score 160.5, E = 2.5e-43 CS EEEEEEEEEEE--S S-E.. ......EEEEES----S-.-CH *->tLvtnVigvkergg.....drkld.lnerlafvyylddGvygslpdp tL++n+i++k++ +++++d+ d+ ne++ ++y ++dGvygs +++ sp|P09057| 285 TLAVNIIAKKTVWKeqtgsDDE-DeSNEQTLMYY-VNDGVYGS-FNC 328 CS HHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE...- alydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvsLPlHle +lyd+ h ++++++++++e+ ++++++GPtCd++D + + +sLP e sp|P09057| 329 ILYDHAHVKALLQKrpKPDEKYYSSSIWGPTCDGLDRIVE-RCSLP---E 374 CS -----EEEES-----SGCC-B-TTT--.-EEEEE levGDllvffdaGAYteslasnFNgfprpaeVlv<-* ++vGD+++f+++GAYt ++as+FNgf+rp++++v sp|P09057| 375 MHVGDWMLFENMGAYTVAAASTFNGFQRPNIYYV 408 sp|P14019|DCOR_CRIGR: domain 1 of 1, from 282 to 402: score 159.9, E = 3.8e-43 CS EEEEEEEEEEE--S S-E........EEEEES----S-. *->tLvtnVigvkergg.........drkldlnerlafvyylddGvygsl tL++n+i++k ++ ++++++++++++ f+yy++dGvygs sp|P14019| 282 TLAVNIIAKKIVSKgsddedessEQT--------FMYYVNDGVYGS- 319 CS -CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE. pdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvsLPl ++++lyd+ h ++++++++++e+ ++++++GPtCd++D + + + LP sp|P14019| 320 FNCILYDHAHVKPLLPKrpKPDEKYYSSSIWGPTCDGLDRIVE-RCNLP- 367 CS ..------EEEES-----SGCC-B-TTT--.-EEEEE HlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* e++vGD+++f+++GAYt ++as+FNgf+rp++++v sp|P14019| 368 --EMHVGDWMLFENMGAYTVAAASTFNGFQRPSIYYV 402 sp|P00860|DCOR_MOUSE: domain 1 of 1, from 285 to 408: score 159.8, E = 3.9e-43 CS EEEEEEEEEEE--S S-E........EEEEES---- *->tLvtnVigvkergg............drkldlnerlafvyylddGvy tL++n+i++k++ +++++++++++++++ f+yy++dGvy sp|P00860| 285 TLAVNIIAKKTVWKeqpgsddedesnEQT--------FMYYVNDGVY 323 CS S-.-CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEE gslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvs gs ++++lyd+ h ++++++++++e+ ++++++GPtCd++D + + + sp|P00860| 324 GS-FNCILYDHAHVKALLQKrpKPDEKYYSSSIWGPTCDGLDRIVE-RCN 371 CS EE...------EEEES-----SGCC-B-TTT--.-EEEEE LPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* LP e++vGD+++f+++GAYt ++as+FNgf+rp++++v sp|P00860| 372 LP---EMHVGDWMLFENMGAYTVAAASTFNGFQRPNIYYV 408 sp|P27119|DCOR_MUSPA: domain 1 of 1, from 285 to 408: score 159.8, E = 3.9e-43 CS EEEEEEEEEEE--S S-E........EEEEES---- *->tLvtnVigvkergg............drkldlnerlafvyylddGvy tL++n+i++k++ +++++++++++++++ f+yy++dGvy sp|P27119| 285 TLAVNIIAKKTVWKeqpgsddedesnEQT--------FMYYVNDGVY 323 CS S-.-CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEE gslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvs gs ++++lyd+ h ++++++++++e+ ++++++GPtCd++D + + + sp|P27119| 324 GS-FNCILYDHAHVKALLQKrpKPDEKYYSSSIWGPTCDGLDRIVE-RCN 371 CS EE...------EEEES-----SGCC-B-TTT--.-EEEEE LPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* LP e++vGD+++f+++GAYt ++as+FNgf+rp++++v sp|P27119| 372 LP---EMHVGDWMLFENMGAYTVAAASTFNGFQRPNIYYV 408 sp|P27118|DCOR_CHICK: domain 1 of 1, from 275 to 398: score 158.8, E = 8e-43 CS EEEEEEEEEEE--S S-E........EEEEES----S-.- *->tLvtnVigvkergg........drkldlnerlafvyylddGvygslp tL++n+i++k ++ ++++++++d++ n+++ ++y ++dGvygs + sp|P27118| 275 TLAVNIIAKKIVSKeqtgsddeDDV---NDKTLMYY-VNDGVYGS-F 316 CS CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE.. dpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvsLPlH +++lyd+ h +++++++++++ +++++++GPtCd++D + + + +P sp|P27118| 317 NCILYDHAHVKPVLQKrpKPDDGCYSCSIWGPTCDGLDRIVE-RCNMP-- 363 CS .------EEEES-----SGCC-B-TTT--.-EEEEE lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* el+vGD+++f+++GAYt ++as+FNgf+rp + +v sp|P27118| 364 -ELQVGDWILFENMGAYTVAAASTFNGFQRPTIHYV 398 sp|P27120|DCOR1_XENLA: domain 1 of 1, from 285 to 409: score 157.0, E = 2.8e-42 CS EEEEEEEEEEE--S S-E.. ......EEEEES----S-.-C *->tLvtnVigvkergg......drkld.lnerlafvyylddGvygslpd tL++n+i++k++ ++++++d+ d n+++ ++y ++dGvygs ++ sp|P27120| 285 TLAVNIIAKKVMVNeqsgsdDEE-DaANDKTLMYY-VNDGVYGS-FN 328 CS HHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE... palydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvsLPlHl ++l+d+ h +++ ++++++e+ ++++++GPtCd++D + + ++LP sp|P27120| 329 CILFDHAHVKPVLTKkpKPDEKFYSSSIWGPTCDGLDRIVE-RFELP--- 374 CS ------EEEES-----SGCC-B-TTT--.-EEEEE elevGDllvffdaGAYteslasnFNgfprpaeVlv<-* el+vGD+++f+++GAYt ++as+FNgf+rp ++v sp|P27120| 375 ELQVGDWMLFENMGAYTVAAASTFNGFQRPTLYYV 409 sp|P11926|DCOR_HUMAN: domain 1 of 1, from 285 to 408: score 156.9, E = 3e-42 CS EEEEEEEEEEE--S S-E........EEEEES---- *->tLvtnVigvkergg............drkldlnerlafvyylddGvy tL++n+i++k + +++++++++++++++ f+yy++dGvy sp|P11926| 285 TLAVNIIAKKIVLKeqtgsddedessEQT--------FMYYVNDGVY 323 CS S-.-CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEE gslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvs gs ++++lyd+ h ++++++++++e+ ++++++GPtCd++D + + + sp|P11926| 324 GS-FNCILYDHAHVKPLLQKrpKPDEKYYSSSIWGPTCDGLDRIVE-RCD 371 CS EE...------EEEES-----SGCC-B-TTT--.-EEEEE LPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* LP e++vGD+++f+++GAYt ++as+FNgf+rp +++v sp|P11926| 372 LP---EMHVGDWMLFENMGAYTVAAASTFNGFQRPTIYYV 408 sp|P27117|DCOR_BOVIN: domain 1 of 1, from 285 to 408: score 154.1, E = 2.1e-41 CS EEEEEEEEEEE--S S-E........EEEEES---- *->tLvtnVigvkergg............drkldlnerlafvyylddGvy tL++n+i++k + ++++++++++++dr+ f+yy++dGvy sp|P27117| 285 TLAVNIIAKKLVLKeqtgsddeeestDRT--------FMYYVNDGVY 323 CS S-.-CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEE gslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvs gs ++++lyd+ h ++++++++++e+ ++++++GPtCd++D + + + sp|P27117| 324 GS-FNCILYDHAHVKPLLQKrpKPDEKYYSSSIWGPTCDGLDRIVE-RCN 371 CS EE...------EEEES-----SGCC-B-TTT--.-EEEEE LPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* LP e++vGD+++f+++GAYt ++as+FNgf+rp +++v sp|P27117| 372 LP---EMHVGDWMLFENMGAYTVAAASTFNGFQRPTIYYV 408 sp|P07805|DCOR_TRYBB: domain 1 of 1, from 283 to 406: score 151.2, E = 1.6e-40 CS EEEEEEEEEEE--S S-E........EEEEES---- *->tLvtnVigvkergg............drkldlnerlafvyylddGvy tL++nVi++k+ +g +++ + + +++++ f+yy++dGvy sp|P07805| 283 TLAVNVIAKKVTPGvqtdvgahaesnAQS--------FMYYVNDGVY 321 CS S-.-CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEE gslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvs gs ++++lyd+ ++ +r++ ++e+++p++++GPtCd++D + + ++ sp|P07805| 322 GS-FNCILYDHAVVRPLPQRepIPNEKLYPSSVWGPTCDGLDQIVE-RYY 369 CS EE...------EEEES-----SGCC-B-TTT--.-EEEEE LPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* LP e++vG++l+f+d+GAYt + +s FNgf+ p +++v sp|P07805| 370 LP---EMQVGEWLLFEDMGAYTVVGTSSFNGFQSPTIYYV 406 sp|Q9X1K5|DCDA_THEMA: domain 1 of 1, from 257 to 362: score 150.5, E = 2.6e-40 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L+ +V+ vk+r+ + fv+ +d+G++ + ++paly a+ sp|Q9X1K5| 257 YLLLRVVLVKRRHN-KA--------FVV-VDGGMNVL-IRPALYSAY 292 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv h+i ++ ++++ +++++GP+C+sgDv+a d++LP e+e+GD+++ sp|Q9X1K5| 293 HRIFVLG--KQGKEMRADVVGPLCESGDVIAY-DRELP---EVEPGDIIA 336 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* +++aGAY++++++n+N+ rpaeVlv sp|Q9X1K5| 337 VENAGAYGYTMSNNYNSTTRPAEVLV 362 sp|P49725|DCOR_PANRE: domain 1 of 1, from 294 to 416: score 146.6, E = 3.7e-39 CS EEEEEEEEEEE--S S-E........EEEEES----S-.-C *->tLvtnVigvkergg.......drkldlnerlafvyylddGvygslpd ++ tnVi+ +++ ++ +++ d++ n+ +++y ++dGvygs ++ sp|P49725| 294 SVTTNVIASVKVPAsritekaDDV---NRDGYMYY-MNDGVYGS-FN 335 CS HHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE... palydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvsLPlHl + l+d+++p ++++++ep++pv+++GPtCd++D + + +P sp|P49725| 336 CKLFDHYQPRGMPLAehDADEPRFPVCVWGPTCDGLDQVEE-SSVMP--- 381 CS ------EEEES-----SGCC-B-TTT--.-EEEEE elevGDllvffdaGAYteslasnFNgfprpaeVlv<-* +l +GD+l+++d+GAYt+++as+FNgf p+++++ sp|P49725| 382 RLYEGDWLYYPDMGAYTSVAASTFNGFDKPKTYYF 416 sp|O22616|DCOR_SOLLC: domain 1 of 1, from 308 to 424: score 145.8, E = 6.6e-39 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalyda. tL+t++ig+++rg+ k ++ ++dG+ygs ++++lyd+ sp|O22616| 308 TLATTIIGKRVRGE-LK--------EYW-INDGLYGS-MNCVLYDHa 343 CS ---EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE... ...lhpilpvsr.....ldeeptepvtlaGPtCdsgDvlarFdvsLPlHl + + p ++ s++++ + +++t+p+t++GPtCd++D++ r d++LP sp|O22616| 344 tvtATPLACMSNrnnlnCGGSKTFPSTVFGPTCDALDTVLR-DYQLP--- 389 CS ------EEEES-----SGCC-B-TTT--.-EEEEE elevGDllvffdaGAYteslasnFNgfprpaeVlv<-* el+v+D+l+f+++GAYt +++snFNgf a+V sp|O22616| 390 ELQVNDWLIFPNMGAYTKAAGSNFNGFNTSAIVTH 424 sp|P27121|DCOR_NEUCR: domain 1 of 1, from 326 to 471: score 145.7, E = 7.3e-39 CS EEEEEEEEEEE--S S-E.. ......EEEEES-- *->tLvtnVigvkergg.............drkld.lnerlafvyylddG tL++n+i+++++ +++ + +++++ +d+ + +++++ ++vy ++dG sp|P27121| 326 TLACNIIARRTIQDgsavsvsdsssmsDDGSVnNGDARYMVY-VNDG 371 CS --S-.-CHHHHS----EEECSS -TTSSEEEEEEE-- vygslpdpalydalhpilpvsr..............ldeeptepvtlaGP +yg+ ++++++d++hp++ + r ++++ ++ ++ +e + +++++GP sp|P27121| 372 LYGN-FSSIMFDHQHPVAKILRaggrtmynsvaaheSSAEDAIEYSIWGP 420 CS ---TT--SEE.EEEEE...------EEEES-----SGCC-B-TTT--.-E tCdsgDvlarFdvsLPlHlelevGDllvffdaGAYteslasnFNgfprpa tCd+ D + + + + + l+vGD+l+f+d+GAYt + a++FNgf sp|P27121| 421 TCDGIDRITE-SIRFRE--ILDVGDWLYFEDMGAYTKCSATTFNGFSNEH 467 CS EEEE eVlv<-* V++ sp|P27121| 468 DVIY 471 sp|P50134|DCOR_DATST: domain 1 of 1, from 308 to 424: score 145.5, E = 8.2e-39 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalyda. tL+t++ig+++rg + y+++dG+ygs ++++lyd+ sp|P50134| 308 TLATTIIGKRVRG--EL--------REYWINDGLYGS-MNCVLYDHa 343 CS ---EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE... ...lhpilpvsr.....ldeeptepvtlaGPtCdsgDvlarFdvsLPlHl + + p ++ s++++ + +++t+p+t++GPtCd++D++ r d++LP sp|P50134| 344 tvnATPLACMSNrsnlnCGGSKTFPSTVFGPTCDALDTVLR-DYQLP--- 389 CS ------EEEES-----SGCC-B-TTT--.-EEEEE elevGDllvffdaGAYteslasnFNgfprpaeVlv<-* el+v+D+l+f+++GAYt +++snFNgf a+V sp|P50134| 390 ELQVNDWLIFPNMGAYTKAAGSNFNGFNTSAIVTH 424 sp|P08432|DCOR_YEAST: domain 1 of 1, from 329 to 460: score 143.2, E = 4e-38 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal tL+++Vi+++++++++ ++y ++dGvyg+ ++++l+d++ sp|P08432| 329 TLASHVIAKRKLSENEA--------MIY-TNDGVYGN-MNCILFDHQ 365 CS --EEECSS -TTSSEEEEEEE-----TT- hpilpvsr......................ldeeptepvtlaGPtCdsgD p + + +++ + + ++ ++++ ++ ++ ++e ++v+++GPtCd++D sp|P08432| 366 EPHPRTLYhnlefhyddfesttavldsinkTRSEYPYKVSIWGPTCDGLD 415 CS -SEE.EEEEE...------EEEES-----SGCC-B-TTT--.-EEEEE vlarFdvsLPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<- ++a+ ++++ + ++ vGD+ +f+ GAYt+s+a++FNgf+++a +++ sp|P08432| 416 CIAK-EYYMKH--DVIVGDWFYFPALGAYTSSAATQFNGFEQTADIVY 460 CS * sp|P08432| - - sp|Q8A2B1|SPEA_BACTN: domain 1 of 1, from 346 to 558: score 142.0, E = 9.1e-38 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+++V+ + ++++ +++++ ++ ++ ++ + ++ ++++ + sp|Q8A2B1| 346 VLIFEVLETATLPEwddeeeiapdahelvqelysiwdslnqnkmlea 392 CS S .................................................d ++ ++ +++ + +++ + +++ + ++ + +++ ++ ++ ++ + sp|Q8A2B1| 393 whdaqqireealdlfshgivdlktraqierlywsitreinqiagglkhaP 442 CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv + +++l++ la+ y++++++++slpd++++d+++pi+p++rlde p++++ sp|Q8A2B1| 443 DEFRgLSKLLADKYFCNFSLFQSLPDSWAIDQIFPIMPIQRLDEKPERSA 492 CS EEE-----TT--SEE. EEEEE.. .------EEEES-----SGC tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes tl + tCds++++a+F ++++ +LP+H+l+ + ++l++f++GAY+e+ sp|Q8A2B1| 493 TLQDITCDSDGKIANFistrnvAHYLPVHsLKKTEPYYLAVFLVGAYQEI 542 CS C-B-TTT--.-EEEEE lasnFNgfprpaeVlv<-* l++++N+f++++ V+v sp|Q8A2B1| 543 LGDMHNLFGDTNAVHV 558 sp|Q9HUX1|SPEA_PSEAE: domain 1 of 1, from 354 to 567: score 141.0, E = 1.9e-37 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t+V++v + +++ ++ + +++++ + + ++++ + +++ sp|Q9HUX1| 354 VLITQVTDVERHNDdvpkivdldeqpeivrwlaellgptdaemvtet 400 CS .................................................. + ++ ++ + +++ + ++ ++ ++ +++ + +++++ sp|Q9HUX1| 401 ywrathyigdaaaqyadgkislaqkalaeqcyfaicrrlhnqlkarqrsh 450 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEE drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptep +++ld+ln++la+ y+++++v++slpd+++++++ pilp++rl eep+++ sp|Q9HUX1| 451 RQVLDeLNDKLADKYICNFSVFQSLPDTWAIGQVLPILPLHRLGEEPDRR 500 CS EEEE-----TT--SEE. EEEEE.. .------EEEES-----SG vtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYte ++l + tCds++++ ++ ++++ + sLP+H+++ +++l+++f++GAY+e sp|Q9HUX1| 501 AVLQDLTCDSDGKITQYvdeqsiETSLPVHeVKEGEDYLIGVFLVGAYQE 550 CS CC-B-TTT--.-EEEEE slasnFNgfprpaeVlv<-* +l++++N+f++++ V v sp|Q9HUX1| 551 ILGDMHNLFGDTDSVNV 567 sp|Q7NU27|SPEA_CHRVO: domain 1 of 1, from 343 to 556: score 140.9, E = 2e-37 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nV++v +++++ + ++ ++ + + ++ + + ++++ ++ sp|Q7NU27| 343 VLLMNVTDVERLPDtvapidkaeelslplrklvelanlndeelvtei 389 CS .................................................. + ++ ++ ++ +++ + +++ ++ + + ++ +++ + +++++ sp|Q7NU27| 390 yyrashcvsevsemyaegrlslqekalaedlhatlcrrlhnqlqasqrsq 439 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEE drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptep ++++d+l++rla+ y+++++v++slpd++++d++ pi+pv+rl+e+pt++ sp|Q7NU27| 440 RQVYDeLTDRLADKYFCNFSVFQSLPDTWAIDQVLPIMPVHRLAEQPTRR 489 CS EEEE-----TT--SEE. EEEEE.. .------EEEES-----SG vtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYte ++l + tCds+++l ++ ++++ + s+ +H+++ +l+++f++GAY+e sp|Q7NU27| 490 AVLQDLTCDSDGKLKQYvdqqsiESSMSVHeVKQGDEYLIAVFLVGAYQE 539 CS CC-B-TTT--.-EEEEE slasnFNgfprpaeVlv<-* +l++++N+f++++ V v sp|Q7NU27| 540 ILGDMHNLFGDTDSVNV 556 sp|O69203|DCDA_ACTPA: domain 1 of 1, from 309 to 415: score 140.6, E = 2.5e-37 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal + +++V +vk+ g +r+ fv+ +d+G++++ p+paly+ + sp|O69203| 309 VTLYRVAAVKR-GVRRV--------FVA-VDGGMSDN-PRPALYGSR 344 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv + +++v+ ++++++pvt++G++C++gDvla+ dv+LP+ ++++GDll+ sp|O69203| 345 YAVRLVR--RGGRRAPVTVVGRHCEAGDVLAE-DVPLPE--DVRAGDLLA 389 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* ++ +GAY+++lasn+N ++rp++V v sp|O69203| 390 VPVTGAYHHALASNYNAVGRPPVVGV 415 sp|Q8S3N2|DCOR_CAPAN: domain 1 of 1, from 312 to 428: score 140.5, E = 2.6e-37 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalyda. tL+t++ig+++rg + y+++dG+ygs ++++lyd+ sp|Q8S3N2| 312 TLATTIIGKRVRG--DL--------REYWINDGLYGS-MNCVLYDHa 347 CS ---EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE... ...lhpilpvsr.....ldeeptepvtlaGPtCdsgDvlarFdvsLPlHl + + p ++ s++ + + +++ +p+t++GPtCd++D++ r d++ P sp|Q8S3N2| 348 tvtATPLACMSNrvnlnCSGSKMFPSTIFGPTCDALDTVLR-DYHVP--- 393 CS ------EEEES-----SGCC-B-TTT--.-EEEEE elevGDllvffdaGAYteslasnFNgfprpaeVlv<-* el+v+D+++f+++GAYt +++snFNgf a+V sp|Q8S3N2| 394 ELQVNDWVIFPNMGAYTKAAGSNFNGFNTSAIVTH 428 sp|P00861|DCDA_ECOLI: domain 1 of 1, from 279 to 397: score 140.3, E = 3.1e-37 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L+t+V +vk +g r fv +d+G++++ ++pa+y+ + sp|P00861| 279 VLITQVRSVKQMGS-RH--------FVL-VDAGFNDL-MRPAMYGSY 314 CS --EEECSS -TTSSEEEEEEE-----TT--S EE.EEEEE. hpilpvsr....ldeeptepvtlaGPtCdsgDvl.......arFdvsLPl h+i + +++++l+ +pt+++++aGP+C+sgDv++++++++ + +++LP sp|P00861| 315 HHISALAAdgrsLEHAPTVETVVAGPLCESGDVFtqqeggnVE-TRALP- 362 CS ..------EEEES-----SGCC-B-TTT--.-EEEEE HlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* e+++GD+lv +d+GAY+ s++sn+N++p+ +eVl+ sp|P00861| 363 --EVKAGDYLVLHDTGAYGASMSSNYNSRPLLPEVLF 397 sp|Q7NE10|SPEA_GLOVI: domain 1 of 1, from 346 to 557: score 140.2, E = 3.1e-37 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+ V+gv+++ ++++++ +++++ ++ ++ ++ ++++ ++ sp|Q7NE10| 346 VLVFDVMGVSHLQFgepepparnehsiirnlyetytqitpdnvqeaf 392 CS S- ................................................dr ++ ++ +++ + + + +++ + ++ + ++ + ++ + ++ sp|Q7NE10| 393 ndasqfkeealslfalgylglgeraraerlywgccekilnlvreldyiPD 442 CS E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEE kld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvt l++l++++a +yy++++v++s pd++++d+l+pi+p++rldeep ++ t sp|Q7NE10| 443 ELAdLEKNMASTYYCNFSVFQSAPDSWAIDQLFPIMPIHRLDEEPKARGT 492 CS EE-----TT--SEE. EEEEE.. .------EEEES-----SGCC laGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtesl la+ tCds++++++F + ++ + L lH++++e+ ++l++f+ GAY+e+l sp|Q7NE10| 493 LADLTCDSDGKIDQFidlrdvKGVLELHpVRPEEPYYLGMFLNGAYQEIL 542 CS -B-TTT--.-EEEEE asnFNgfprpaeVlv<-* ++++N+f+++++V++ sp|Q7NE10| 543 GDMHNLFGDTNTVHI 557 sp|Q58497|DCDA_METJA: domain 1 of 1, from 305 to 410: score 140.0, E = 3.8e-37 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L+ +V+++ke + k +v +d+G+++ ++pa+y+a+ sp|Q58497| 305 YLLGKVHHIKETPV-TK--------WVM-IDAGMNDM-MRPAMYEAY 340 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv h+i+ + + e+v++aG +C+s Dv++r d++L+ ++evGD l+ sp|Q58497| 341 HHIINCK--VKNEKEVVSIAGGLCESSDVFGR-DRELD---KVEVGDVLA 384 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* +fd+GAY++s+a+n+N ++rp Vl sp|Q58497| 385 IFDVGAYGISMANNYNARGRPRMVLT 410 sp|Q5LIQ3|SPEA_BACFN: domain 1 of 1, from 346 to 558: score 139.5, E = 5.4e-37 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+++V+ + +++ +++++ ++ ++ ++ + ++ ++++ + sp|Q5LIQ3| 346 VLIFEVLETATLPQwddeeeiapdahelvqelygiwdtlnqnkmlea 392 CS S .................................................d ++ ++ +++ + +++ + +++ + ++ + +++ ++ ++ ++ + sp|Q5LIQ3| 393 whdaqqireealdlfshgivdlktraqierlywsitreinqiagglkhaP 442 CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv + +++l++ la+ y++++++++slpd++++d+++pi+p++rlde p++++ sp|Q5LIQ3| 443 DEFRgLSKLLADKYFCNFSLFQSLPDSWAIDQIFPIMPIQRLDEKPDRSA 492 CS EEE-----TT--SEE. EEEEE.. .------EEEES-----SGC tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes tl + tCds++++a+F ++++ ++P+H+l+ ++ +++++f++GAY+e+ sp|Q5LIQ3| 493 TLQDITCDSDGKIANFistrnvAHYMPVHsLKQKEPYYVAVFLVGAYQEI 542 CS C-B-TTT--.-EEEEE lasnFNgfprpaeVlv<-* l++++N+f++++ V+v sp|Q5LIQ3| 543 LGDMHNLFGDTNAVHV 558 sp|Q64ZT8|SPEA_BACFR: domain 1 of 1, from 346 to 558: score 139.5, E = 5.4e-37 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+++V+ + +++ +++++ ++ ++ ++ + ++ ++++ + sp|Q64ZT8| 346 VLIFEVLETATLPQwddeeeiapdahelvqelygiwdtlnqnkmlea 392 CS S .................................................d ++ ++ +++ + +++ + +++ + ++ + +++ ++ ++ ++ + sp|Q64ZT8| 393 whdaqqireealdlfshgivdlktraqierlywsitreinqiagglkhaP 442 CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv + +++l++ la+ y++++++++slpd++++d+++pi+p++rlde p++++ sp|Q64ZT8| 443 DEFRgLSKLLADKYFCNFSLFQSLPDSWAIDQIFPIMPIQRLDEKPDRSA 492 CS EEE-----TT--SEE. EEEEE.. .------EEEES-----SGC tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes tl + tCds++++a+F ++++ ++P+H+l+ ++ +++++f++GAY+e+ sp|Q64ZT8| 493 TLQDITCDSDGKIANFistrnvAHYMPVHsLKQKEPYYVAVFLVGAYQEI 542 CS C-B-TTT--.-EEEEE lasnFNgfprpaeVlv<-* l++++N+f++++ V+v sp|Q64ZT8| 543 LGDMHNLFGDTNAVHV 558 sp|Q87VU3|SPEA_PSESM: domain 1 of 1, from 354 to 567: score 138.1, E = 1.3e-36 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv++V++v + +++ ++ ++++ +++ + + ++++ + +++ sp|Q87VU3| 354 MLVVQVTDVEKHNDevpkiadkeslpetvqwlvdllgptdiemvtet 400 CS .................................................. + ++ ++ ++ +++ + ++ +++ ++ ++ + +++++ sp|Q87VU3| 401 ywrathymsdiatqyadgkislaekalgeqcyfavcrrlynslkarqrsh 450 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEE drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptep +++ld+ln++la+ y+++++v++slpd+++++++ pilp++rldeep ++ sp|Q87VU3| 451 RQVLDeLNDKLADKYICNFSVFQSLPDTWAIGQVLPILPLHRLDEEPVRR 500 CS EEEE-----TT--SEE. EEEEE.. .------EEEES-----SG vtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYte ++l + tCds++++ ++ ++++ + s+P+H+l +++ll++f++GAY+e sp|Q87VU3| 501 AVLQDLTCDSDGKIKQYvdeqsiETSMPVHsLNEGEDYLLGIFLVGAYQE 550 CS CC-B-TTT--.-EEEEE slasnFNgfprpaeVlv<-* +l++++N+f++++ V + sp|Q87VU3| 551 ILGDMHNLFGDTDSVNI 567 sp|P40807|DCOR1_DROME: domain 1 of 1, from 276 to 391: score 137.4, E = 2.2e-36 CS EEEEEEEEEEE--S S-E........EEEEES----S-.-CHH *->tLvtnVigvkergg.....drkldlnerlafvyylddGvygslpdpa tLv+++++++e++ + ++ d + ++y l+dGvygs ++++ sp|P40807| 276 TLVCKIHAKREIRNeagklDTV--------MYY-LNDGVYGS-FNCI 312 CS HHS- ---EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...- lyda...lhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHle lyd++ + ++ + ++ p+ ++ ++GP+Cd++D++ + d +LP sp|P40807| 313 LYDHqvvIAEHYLDN-AESLPHLKSLIWGPSCDALDKISE-DLHLP---N 357 CS -----EEEES-----SGCC-B-TTT--.-EEEEE levGDllvffdaGAYteslasnFNgfprpaeVlv<-* l++GDll+f ++GAYt+ as FNgf+ p++ ++ sp|P40807| 358 LNRGDLLGFRNMGAYTMPIASAFNGFEVPKTLYF 391 sp|B0U1H6|SPEA_XYLFM: domain 1 of 1, from 343 to 555: score 137.4, E = 2.3e-36 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nV+ v +++++ ++ ++++ ++ ++ ++ + ++ + sp|B0U1H6| 343 VLIANVTEVEAVPEgrvpglcddepavvrhmreiygeldarpaielf 389 CS S .................................................d + ++ + ++ + ++ + ++ + ++ +++ +++ ++++++++ sp|B0U1H6| 390 yeaqhfhaeglaaytlgqidlvhrariddlfyaishgvrerlsheekshR 439 CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv ++ld+lnerl++ y+++++v+ s+pd +++++++pi+p++rl+e+pt++ sp|B0U1H6| 440 PVLDeLNERLVDKYFVNFSVFESIPDVWAINQIFPIVPIERLNEAPTRRG 489 CS EEE-----TT--SEE. EEEEE.. .------EEEES-----SGC tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes ++++ tCds++++ ++ ++++ d +LPlH l++ + ++++ff++GAY+e+ sp|B0U1H6| 490 VVCDLTCDSDGTVKQYveneslDSALPLHvLRHGEAYRIGFFLVGAYQEI 539 CS C-B-TTT--.-EEEEE lasnFNgfprpaeVlv<-* l++ +N+f++++ V v sp|B0U1H6| 540 LGDIHNLFGDTDAVEV 555 sp|Q9PH02|SPEA_XYLFA: domain 1 of 1, from 343 to 555: score 137.4, E = 2.3e-36 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nV+ v +++++ ++ ++++ ++ ++ ++ + ++ + sp|Q9PH02| 343 VLIANVTEVEAVPEgrvpgvcddepavvrhmreiygeldarpaielf 389 CS S .................................................d + ++ + ++ + ++ + ++ + ++ +++ +++ ++++++++ sp|Q9PH02| 390 yeaqhfhaeglaaytlgqidlvhrariddlfyaishgvrerlsheekshR 439 CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv ++ld+lnerl++ y+++++v+ s+pd +++++++pi+p++rl+e+pt++ sp|Q9PH02| 440 PVLDeLNERLVDKYFVNFSVFESIPDVWAINQIFPIVPIERLNEAPTRRG 489 CS EEE-----TT--SEE. EEEEE.. .------EEEES-----SGC tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes ++++ tCds++++ ++ ++++ d +LPlH l++ + ++++ff++GAY+e+ sp|Q9PH02| 490 VVCDLTCDSDGTVKQYveneslDSALPLHvLRHGEAYRIGFFLVGAYQEI 539 CS C-B-TTT--.-EEEEE lasnFNgfprpaeVlv<-* l++ +N+f++++ V v sp|Q9PH02| 540 LGDIHNLFGDTDAVEV 555 sp|O05321|DCDA_PSEFL: domain 1 of 1, from 285 to 390: score 136.5, E = 4.1e-36 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L+t+V + k+ +++++ f++ +d+ ++++ ++paly+a+ sp|O05321| 285 VLLTQVEYLKH-TEHKD--------FAI-VDAAMNDL-IRPALYQAW 320 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv + v+ ++++ +++++++GP+C+ gD+la+ ++L le+GDll+ sp|O05321| 321 MDVTAVR-PRDTAARSYDIVGPICETGDFLAK-GRELA----LEEGDLLA 364 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* +++aGAY+++++sn+N ++r+aeVlv sp|O05321| 365 VHSAGAYGFVMSSNYNTRGRCAEVLV 390 sp|B2I6M1|SPEA_XYLF2: domain 1 of 1, from 343 to 555: score 136.3, E = 4.7e-36 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nV+ v +++++ ++ ++++ ++ ++ ++ + ++ + sp|B2I6M1| 343 VLIANVTEVEAVPEgrvpgvcddepavvrhmreiygeldarpaielf 389 CS S .................................................d + ++ + ++ + ++ + ++ + ++ +++ +++ ++++++++ sp|B2I6M1| 390 yeaqhfhaeglaaytlgqidlvhrariddlfyaishgvrerlsheekshR 439 CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv ++ld+lnerl++ y+++++v+ s+pd +++++++pi+p++rl+e pt++ sp|B2I6M1| 440 PVLDeLNERLVDKYFVNFSVFESIPDVWAINQIFPIVPIERLNEVPTRRG 489 CS EEE-----TT--SEE. EEEEE.. .------EEEES-----SGC tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes ++++ tCds++++ ++ ++++ d +LPlH l++ + ++++ff++GAY+e+ sp|B2I6M1| 490 VVCDLTCDSDGTVKQYveneslDSALPLHvLRHGEAYRIGFFLVGAYQEI 539 CS C-B-TTT--.-EEEEE lasnFNgfprpaeVlv<-* l++ +N+f++++ V v sp|B2I6M1| 540 LGDIHNLFGDTDAVEV 555 sp|Q87F25|SPEA_XYLFT: domain 1 of 1, from 343 to 555: score 136.3, E = 4.7e-36 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nV+ v +++++ ++ ++++ ++ ++ ++ + ++ + sp|Q87F25| 343 VLIANVTEVEAVPEgrvpgvcddepavvrhmreiygeldarpaielf 389 CS S .................................................d + ++ + ++ + ++ + ++ + ++ +++ +++ ++++++++ sp|Q87F25| 390 yeaqhfhaeglaaytlgqidlvhrariddlfyaishgvrerlsheekshR 439 CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv ++ld+lnerl++ y+++++v+ s+pd +++++++pi+p++rl+e pt++ sp|Q87F25| 440 PVLDeLNERLVDKYFVNFSVFESIPDVWAINQIFPIVPIERLNEVPTRRG 489 CS EEE-----TT--SEE. EEEEE.. .------EEEES-----SGC tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes ++++ tCds++++ ++ ++++ d +LPlH l++ + ++++ff++GAY+e+ sp|Q87F25| 490 VVCDLTCDSDGTVKQYveneslDSALPLHvLRHGEAYRIGFFLVGAYQEI 539 CS C-B-TTT--.-EEEEE lasnFNgfprpaeVlv<-* l++ +N+f++++ V v sp|Q87F25| 540 LGDIHNLFGDTDAVEV 555 sp|Q8DHY6|SPEA_THEEB: domain 1 of 1, from 353 to 564: score 136.0, E = 6.1e-36 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nV+gv+e++ ++++ + +++ ++ ++ + ++++ ++ sp|Q8DHY6| 353 VLIFNVLGVSEVPKitpepataeehliirnlydtyqaidennyqeay 399 CS S- ................................................dr ++ + +++ + + + + +++ + ++ + + ++++ ++ sp|Q8DHY6| 400 ndalqfkgeaislfnfgylslperaraeslfwaccakilgiarqqeyvPD 449 CS E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEE kld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvt +l++l++ +a +yy++ +v++s pd++++d+l+pi+p++rldeepte+ + sp|Q8DHY6| 450 DLEdLEKIMASIYYINLSVFQSVPDSWAIDQLFPIMPIHRLDEEPTERGI 499 CS EE-----TT--SEE. EEEEE.. .------EEEES-----SGCC laGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtesl la+ tCds++++++F + ++ + L lH++++ + ++l+ f+ GAY+e++ sp|Q8DHY6| 500 LADLTCDSDGKIDQFidlrdvKSVLELHpFRPGEPYYLGLFLNGAYQEIM 549 CS -B-TTT--.-EEEEE asnFNgfprpaeVlv<-* ++ +N+f++++ V++ sp|Q8DHY6| 550 GNLHNLFGDTNAVHI 564 sp|O67262|DCDA_AQUAE: domain 1 of 1, from 290 to 396: score 135.8, E = 6.8e-36 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L+t+V k++g + f++ +d+G++++ ++p +y+a+ sp|O67262| 290 ILITQVQFLKDKGS-KH--------FII-VDAGMNDL-IRPSIYNAY 325 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv h+i+pv+ e + ++++++GP+C+ gD+la d++ e+++G++l+ sp|O67262| 326 HHIIPVE-TKERKKVVADIVGPICETGDFLAL-DREIE---EVQRGEYLA 370 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* +++aGAY+++++s++N +pr+aeVlv sp|O67262| 371 VLSAGAYGFAMSSHYNMRPRAAEVLV 396 sp|Q88QC7|SPEA_PSEPK: domain 1 of 1, from 354 to 567: score 134.8, E = 1.3e-35 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv +V++v + +++ ++ ++++ +++ + + ++++ + +++ sp|Q88QC7| 354 MLVIQVTDVEKHNDdvptienkealpetvqwlvdllgptdiemvtet 400 CS .................................................. + ++ ++ + +++ + +++ ++ ++ +++ + +++++ sp|Q88QC7| 401 ywrathymgdvaaqyadgklslgekalaeqcyfavcrrlhnslkarqrsh 450 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEE drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptep +++ld+ln++la+ y+++++v++slpd+++++++ pi+p++rldeep ++ sp|Q88QC7| 451 RQVLDeLNDKLADKYICNFSVFQSLPDTWAIGQVLPIIPLHRLDEEPMRR 500 CS EEEE-----TT--SEE. EEEEE.. .------EEEES-----SG vtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYte ++l + tCds+++++++ ++++ + s+P+H ++ +++ll++f++GAY+e sp|Q88QC7| 501 AVLQDLTCDSDGKINQYvdeqsiETSMPVHaVKEGEDYLLGVFLVGAYQE 550 CS CC-B-TTT--.-EEEEE slasnFNgfprpaeVlv<-* +l++++N+f++++ V + sp|Q88QC7| 551 ILGDMHNLFGDTDSVNI 567 sp|O14977|AZIN1_HUMAN: domain 1 of 1, from 282 to 406: score 133.2, E = 4.2e-35 CS EEEEEEEEEEE--S S-E........EEEEES--- *->tLvtnVigvkergg.............drkldlnerlafvyylddGv tL++n+i++k+++ ++ +++ ++++++++ f+yy++dGv sp|O14977| 282 TLAVNIIAKKVVENdkfpsgvektgsdEPA--------FMYYMNDGV 320 CS -S-.-CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EE ygslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdv ygs +++ l + l i+ v+++ +++ep+++++l+GP+Cd +D + + + sp|O14977| 321 YGS-FASKLSEDLNTIPEVHKkyKEDEPLFTSSLWGPSCDELDQIVE-SC 368 CS EEE...------EEEES-----SGCC-B-TTT--.-EEEEE sLPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* +LP el+vGD+l+f ++GA ++ s FN f+rpa++++ sp|O14977| 369 LLP---ELNVGDWLIFDNMGADSFHEPSAFNDFQRPAIYYM 406 sp|Q5R7K3|AZIN1_PONAB: domain 1 of 1, from 282 to 406: score 133.2, E = 4.2e-35 CS EEEEEEEEEEE--S S-E........EEEEES--- *->tLvtnVigvkergg.............drkldlnerlafvyylddGv tL++n+i++k+++ ++ +++ ++++++++ f+yy++dGv sp|Q5R7K3| 282 TLAVNIIAKKVVENdkfpsgvektgsdEPA--------FMYYMNDGV 320 CS -S-.-CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EE ygslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdv ygs +++ l + l i+ v+++ +++ep+++++l+GP+Cd +D + + + sp|Q5R7K3| 321 YGS-FASKLSEDLNTIPEVHKkyKEDEPLFTSSLWGPSCDELDQIVE-SC 368 CS EEE...------EEEES-----SGCC-B-TTT--.-EEEEE sLPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* +LP el+vGD+l+f ++GA ++ s FN f+rpa++++ sp|Q5R7K3| 369 LLP---ELNVGDWLIFDNMGADSFHEPSAFNDFQRPAIYYM 406 sp|O35484|AZIN1_MOUSE: domain 1 of 1, from 282 to 406: score 132.9, E = 5.1e-35 CS EEEEEEEEEEE--S S-E........EEEEES--- *->tLvtnVigvkergg.............drkldlnerlafvyylddGv tL++n+i++k+++ ++ +++ ++++++++ fvyy++dGv sp|O35484| 282 TLAVNIIAKKVVENdkfssgvekngsdEPA--------FVYYMNDGV 320 CS -S-.-CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EE ygslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdv ygs +++ l + l i+ v+++ +++ep+++++l+GP+Cd +D + + + sp|O35484| 321 YGS-FASKLSEDLNTIPEVHKkyKEDEPLFTSSLWGPSCDELDQIVE-SC 368 CS EEE...------EEEES-----SGCC-B-TTT--.-EEEEE sLPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* +LP el+vGD+l+f ++GA ++ s FN f+rpa++++ sp|O35484| 369 LLP---ELNVGDWLIFDNMGADSFHEPSAFNDFQRPAIYFM 406 sp|Q50140|DCDA_MYCLE: domain 1 of 1, from 336 to 449: score 132.9, E = 5.2e-35 CS EEEEEEEEEEE--S S-E........EEEEES----S-.-CHHH *->tLvtnVigvkergg....drkldlnerlafvyylddGvygslpdpal + +++V ++k+++ + + +r+ +v +d+G++++ +++al sp|Q50140| 336 ITLYEVGTIKDVDVsataHRR--------YVS-IDGGMSDN-IRTAL 372 CS HS----EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...----- ydalhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevG yda++ +++vsr ++p++p++++G +C+sgD++ r d + P +l++G sp|Q50140| 373 YDAQYDVRLVSRTSDAPAAPASIVGKHCESGDIVVR-DTWVPD--DLKPG 419 CS -EEEES-----SGCC-B-TTT--.-EEEEE DllvffdaGAYteslasnFNgfprpaeVlv<-* Dl+++ +GAY++sl+s++N ++rpa+V+v sp|Q50140| 420 DLVGVAATGAYCYSLSSRYNMLGRPAVVAV 449 sp|A6L012|SPEA_BACV8: domain 1 of 1, from 346 to 558: score 132.8, E = 5.5e-35 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+++V+ + ++++ +++ + ++++++ ++ + ++ ++++ + sp|A6L012| 346 VLIFEVLETATLPEmdedfevgendhelvhelyeiwdnlnqsrmvea 392 CS S .................................................d ++ ++ +++ + +++ + +++ + ++ + +++ ++ ++ ++ + sp|A6L012| 393 whdaqqireealdlfshgivdlktraqierlywsvtreinqiasglkhaP 442 CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv + +++l++ la+ y++++++++slpd++++d+++pi+p++rlde p++ + sp|A6L012| 443 DEFRkLDKLLADKYFCNFSLFQSLPDSWAIDQIFPIMPIQRLDEKPDRNA 492 CS EEE-----TT--SEE. EEEEE.. .------EEEES-----SGC tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes tl + tCds++++a+F +++ LP+H+l+ + +++++f++GAY+e+ sp|A6L012| 493 TLQDITCDSDGKIANFistryvSHDLPVHsLKGKDAYYIGVFLVGAYQEI 542 CS C-B-TTT--.-EEEEE lasnFNgfprpaeVlv<-* l++++N+f++++ V+v sp|A6L012| 543 LGDMHNLFGDTNAVHV 558 sp|P19572|DCDA_PSEAE: domain 1 of 1, from 284 to 389: score 132.5, E = 6.8e-35 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L+t+V + k+ +++++ f++ +d+ ++++ ++paly+a+ sp|P19572| 284 VLLTRVEYLKH-TEHKD--------FAI-VDAAMNDL-IRPALYQAW 319 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv + v+ ++++ ++++l+GP+C+ gD+la+ d+ L l++GDll+ sp|P19572| 320 MDVQAVR-PRDAAPRRYDLVGPICETGDFLAK-DRDLA----LAEGDLLA 363 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* + +aGAY+++++sn+N ++r+aeVlv sp|P19572| 364 VRSAGAYGFVMSSNYNTRGRAAEVLV 389 sp|Q8YRP3|SPEA_ANASP: domain 1 of 1, from 395 to 606: score 132.3, E = 7.9e-35 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++ V+++++++ ++++++++++++ + ++ ++ ++++ ++ sp|Q8YRP3| 395 VLIFDVLSTSDVPRdnpeppkegespvinylwetyqsinkenyqefy 441 CS S- ................................................dr ++ ++ +++ ++ + + + +++ + ++ ++ + ++++ ++ sp|Q8YRP3| 442 hdatqfkeeaisrfnlgilrlrerakaerlywaccqkildiirqhdyvPD 491 CS E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEE kld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvt l++l++ +a +yy++ +v++s pd++++d+l+pi+p++rldeept++ + sp|Q8YRP3| 492 ELEdLEKIMASIYYINLSVFQSAPDCWAIDQLFPIMPIHRLDEEPTQRGI 541 CS EE-----TT--SEE. EEEEE.. .------EEEES-----SGCC laGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtesl la+ tCds+++++rF + ++ + L lH++ + + +++++f+ GAY+e++ sp|Q8YRP3| 542 LADLTCDSDGKIDRFidlrdvKSVLELHpFQPGEPYYMGMFLNGAYQEIM 591 CS -B-TTT--.-EEEEE asnFNgfprpaeVlv<-* ++ +N+f++++ V++ sp|Q8YRP3| 592 GNLHNLFGDTNAVHI 606 sp|P23630|DCDA_BACSU: domain 1 of 1, from 301 to 409: score 131.7, E = 1.2e-34 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal t +++V + ke++g r+ +v+ +d+G++++ ++paly+a sp|P23630| 301 TTLYTVGSQKEVPGVRQ--------YVA-VDGGMNDN-IRPALYQAK 337 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv + + +r e+ + +v++aG +C+sgD l d+ LP e+++GDll+ sp|P23630| 338 YEAAAANRIGEAHDKTVSIAGKCCESGDMLIW-DIDLP---EVKEGDLLA 383 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* +f +GAY++s+a+n+N +prpa+V+v sp|P23630| 384 VFCTGAYGYSMANNYNRIPRPAVVFV 409 sp|Q9ZBH5|DCDA_STRCO: domain 1 of 1, from 286 to 403: score 130.8, E = 2.2e-34 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L+++V + k +g + fv +d+G++++ ++pa+y+ + sp|Q9ZBH5| 286 VLAAEVRAQKPVGS-NY--------FVL-VDAGFNDL-MRPAMYGSN 321 CS --EEECSS -TTSSEEEEEEE-----TT--SEE. EEEEE... hpilpvsr...ldeeptepvtlaGPtCdsgDvlarF......dvsLPlHl h++ ++++++ ++++ ++ ++laGP+C+sgDv+ + ++++ + v+ P sp|Q9ZBH5| 322 HRVSVLDAdgaPRASDARDTVLAGPLCESGDVFTQVeggdvePVPVP--- 368 CS ------EEEES-----SGCC-B-TTT--.-EEEEE elevGDllvffdaGAYteslasnFNgfprpaeVlv<-* +++vGDl+vf+d+GAY+ s++s++N++p+ +eVlv sp|Q9ZBH5| 369 RTDVGDLVVFHDTGAYGASMSSTYNSRPLIPEVLV 403 sp|Q8K9C4|DCDA_BUCAP: domain 1 of 1, from 275 to 393: score 130.6, E = 2.4e-34 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L+++V ++k++g+ + fv +d+G++++ ++p++y+ + sp|Q8K9C4| 275 ILISQVRAIKKMGD-KN--------FVL-IDAGFNDL-MRPTMYGSY 310 CS --EEECSS -TTSSEEEEEEE-----TT--SEE. EEEEE.. hpilpvsr....ldeeptepvtlaGPtCdsgDvlarF......dvsLPlH h++ +v +++++ +e++t +++ GP+C+sgD++ ++++++ ++++LP sp|Q8K9C4| 311 HHVSVVTKddrnIHETETIDTIIGGPLCESGDIFTQKeggnitTRKLP-- 358 CS .------EEEES-----SGCC-B-TTT--.-EEEEE lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* l++GD+l+f+d+GAY+ s++sn+N +p+ e+l+ sp|Q8K9C4| 359 -ILKIGDYLIFHDVGAYGASMSSNYNTRPLIQEILL 393 sp|Q0ACK8|SPEA_ALHEH: domain 1 of 1, from 345 to 558: score 130.5, E = 2.7e-34 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vi+ +++g+ + + + ++ ++ + ++ +++++ + sp|Q0ACK8| 345 VLITDVIDGDRVPGgadllapadaaprvlhelwtvwtgldrrhplea 391 CS .................................................. ++ ++ + ++ ++ + +++ + ++ + + ++ +++++++ sp|Q0ACK8| 392 yhdaahglaeaqelyahgvlnltdraraeriwqavchallqrldprrrph 441 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEE drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptep ++ ld+lne+la+ ++++++++s+pd +++d+++p+lp++rlde p+ + sp|Q0ACK8| 442 RELLDeLNEKLADKLFCNFSLFQSMPDVWAIDQIFPVLPLQRLDEPPASR 491 CS EEEE-----TT--SEE. EEEEE.. .------EEEES-----SG vtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYte ++l + tCds++++ + ++++ + +LPl+++++ + +ll++f++GAY+e sp|Q0ACK8| 492 AVLQDLTCDSDGCIRGYvdrdgvESTLPLPpWRPGEPYLLGIFLVGAYQE 541 CS CC-B-TTT--.-EEEEE slasnFNgfprpaeVlv<-* +l++++N+f+++ V v sp|Q0ACK8| 542 ILGDMHNLFGDTHSVNV 558 sp|Q949X7|DCDA1_ARATH: domain 1 of 1, from 351 to 459: score 129.2, E = 6.8e-34 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal ++v +V+gvk++g + f++ +d+++ + ++p lyda+ sp|Q949X7| 351 CFVNHVTGVKTNGT-KN--------FIV-IDGSMAEL-IRPSLYDAY 386 CS --EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE...------EE hpilpvsr.ldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDll ++i++vs++++e++ +++++GP C+s D+l++ d++LP ++ G l sp|Q949X7| 387 QHIELVSPpPAEAEVTKFDVVGPVCESADFLGK-DRELP---TPPQGAGL 432 CS EES-----SGCC-B-TTT--.-EEEEE vffdaGAYteslasnFNgfprpaeVlv<-* v++daGAY++s+as++N+ rp+e++v sp|Q949X7| 433 VVHDAGAYCMSMASTYNLKMRPPEYWV 459 sp|Q94A94|DCDA2_ARATH: domain 1 of 1, from 356 to 464: score 128.9, E = 8.1e-34 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal ++v +V+gvk++g + f++ +d+++ + ++p lyda+ sp|Q94A94| 356 CFVNHVTGVKTNGT-KN--------FIV-IDGSMAEL-IRPSLYDAY 391 CS --EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE...------EE hpilpvsr.ldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDll ++i++vs++++e++ +++++GP C+s D+l++ d++LP ++ G l sp|Q94A94| 392 QHIELVSPtPPEAEVTKFDVVGPVCESADFLGK-DRELP---TPPQGAGL 437 CS EES-----SGCC-B-TTT--.-EEEEE vffdaGAYteslasnFNgfprpaeVlv<-* v++daGAY++s+as++N+ rp+e++v sp|Q94A94| 438 VVHDAGAYCMSMASTYNLKMRPPEYWV 464 sp|P0A5M5|DCDA_MYCBO: domain 1 of 1, from 311 to 424: score 128.6, E = 9.9e-34 CS EEEEEEEEEEE--S S-E........EEEEES----S-.-CHHH *->tLvtnVigvkergg....drkldlnerlafvyylddGvygslpdpal + +++V +vk+++ + + +r+ +v +d+G++++ +++al sp|P0A5M5| 311 ITLYEVGTVKDVDVsataHRR--------YVS-VDGGMSDN-IRTAL 347 CS HS----EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...----- ydalhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevG y+a++ +++vsr ++p +p+ l+G +C+sgD++ r d + P ++++G sp|P0A5M5| 348 YGAQYDVRLVSRVSDAPPVPARLVGKHCESGDIIVR-DTWVPD--DIRPG 394 CS -EEEES-----SGCC-B-TTT--.-EEEEE DllvffdaGAYteslasnFNgfprpaeVlv<-* Dl+++ +GAY++sl+s++N ++rpa+V+v sp|P0A5M5| 395 DLVAVAATGAYCYSLSSRYNMVGRPAVVAV 424 sp|P0A5M4|DCDA_MYCTU: domain 1 of 1, from 311 to 424: score 128.6, E = 9.9e-34 CS EEEEEEEEEEE--S S-E........EEEEES----S-.-CHHH *->tLvtnVigvkergg....drkldlnerlafvyylddGvygslpdpal + +++V +vk+++ + + +r+ +v +d+G++++ +++al sp|P0A5M4| 311 ITLYEVGTVKDVDVsataHRR--------YVS-VDGGMSDN-IRTAL 347 CS HS----EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...----- ydalhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevG y+a++ +++vsr ++p +p+ l+G +C+sgD++ r d + P ++++G sp|P0A5M4| 348 YGAQYDVRLVSRVSDAPPVPARLVGKHCESGDIIVR-DTWVPD--DIRPG 394 CS -EEEES-----SGCC-B-TTT--.-EEEEE DllvffdaGAYteslasnFNgfprpaeVlv<-* Dl+++ +GAY++sl+s++N ++rpa+V+v sp|P0A5M4| 395 DLVAVAATGAYCYSLSSRYNMVGRPAVVAV 424 sp|P41931|DCOR_CAEEL: domain 1 of 1, from 286 to 407: score 127.8, E = 1.7e-33 CS EEEEEEEEEEE--S S-E........EEEEES---- *->tLvtnVigvkergg............drkldlnerlafvyylddGvy +Lv+n+i+ e++ ++ ++++++ ++ ++y ++dGvy sp|P41931| 286 SLVANIIHATEVPAskitkdpkdcadHGY--------MYY-INDGVY 323 CS S-.-CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEEE gslpdpalydalhpilpvsr.ldeeptepvtlaGPtCdsgDvlarFdvsL gs ++++l+d+ hpi + d+ + + +t++GPtCds+D + + + ++ sp|P41931| 324 GS-FNCILFDHAHPIGSPLFdTDRNEKFMSTIWGPTCDSLDLVED-KKLM 371 CS E...------EEEES-----SGCC-B-TTT--.-EEEEE PlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* P +++vG++l+++d+GAYt ++a++FNgf p +v sp|P41931| 372 P---KMNVGEWLYYPDMGAYTLAAATTFNGFSKPVPMYV 407 sp|O50657|DCLO_SELRU: domain 1 of 1, from 266 to 371: score 127.7, E = 1.9e-33 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal Lvt+Vig+k+rg+ + +++ ld G+yg+ ++ ++yd++ sp|O50657| 266 NLVTSVIGTKTRGE-QP--------WYI-LDEGIYGC-FSGIMYDHW 301 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv ++l + ++ p+t+ GP+Cd+ Dvl+r d++ P el++GD+++ sp|O50657| 302 TYPLHCF--GKGNKKPSTFGGPSCDGIDVLYR-DFMAP---ELKIGDKVL 345 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* + +G Yt++ a++FNgf +++++++ sp|O50657| 346 VTEMGSYTSVSATRFNGFYLAPTIIF 371 sp|Q9KVL7|DCDA_VIBCH: domain 1 of 1, from 286 to 391: score 127.4, E = 2.4e-33 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +Lvt+V k+ ++++ f++ +d+ ++++ ++paly+a+ sp|Q9KVL7| 286 VLVTKVEFLKH-TEHKN--------FAI-IDAAMNDL-IRPALYQAW 321 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv + i+p++ ++++++++++l+GP C+ D+l++ d+ L l++GDll+ sp|Q9KVL7| 322 QDIIPLR-PRQGEAQTYDLVGPVCETSDFLGK-DRDLV----LQEGDLLA 365 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* + + GAY+++++sn+N +pr aeV v sp|Q9KVL7| 366 VRSSGAYGFTMSSNYNTRPRVAEVMV 391 sp|Q6ZG77|DCDA_ORYSJ: domain 1 of 1, from 356 to 463: score 126.9, E = 3.1e-33 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal ++v +V+gvk++g + f++ +d+++ + ++p ly+a+ sp|Q6ZG77| 356 CFVNRVTGVKSNGT-KN--------FIV-VDGSMAEL-IRPSLYGAY 391 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv ++i++vs+ ++++ ++++++GP C+s D+l++ d++LP +++ G lv sp|Q6ZG77| 392 QHIELVSPSPDAEVATFDIVGPVCESADFLGK-DRELP---TPDKGAGLV 437 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* ++daGAY++s+as++N+ rp+e++v sp|Q6ZG77| 438 VHDAGAYCMSMASTYNLKLRPPEYWV 463 sp|Q55484|DCDA_SYNY3: domain 1 of 1, from 332 to 440: score 126.7, E = 3.6e-33 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal + +++V g+k+++ +r+ ++ +d+G++++ p+p+ y+ + sp|Q55484| 332 VTAYRVGGRKVVPNIRT--------YIS-VDGGMSDN-PRPITYQSV 368 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv +++++ +r+++e te+vt+aG +C+sgD+l + dv+LP e+GD++v sp|Q55484| 369 YRVALANRMNDEITETVTVAGKHCESGDILVK-DVALP---AAEPGDIMV 414 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* + +GAY +s+asn+N ++rpa Vlv sp|Q55484| 415 VAATGAYNHSMASNYNRLGRPAAVLV 440 sp|Q9JXM2|DCDA_NEIMB: domain 1 of 1, from 276 to 381: score 125.6, E = 8.1e-33 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L+t+V vk g+++ fv +d+ ++++ ++palyda+ sp|Q9JXM2| 276 SLLTRVEFVKY-GEEKN--------FVM-VDAAMNDL-MRPALYDAY 311 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv h+i+ v+ + t ++ ++GP+C+ gD+l++ d++ e+GDll+ sp|Q9JXM2| 312 HHIEAVE-TKDIATLTANIVGPICETGDFLGK-DRTIA----CEEGDLLL 355 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* + +aGAY+ s+asn+N + r+aeVlv sp|Q9JXM2| 356 IRSAGAYGASMASNYNARNRAAEVLV 381 sp|Q8P448|SPEA_XANCP: domain 1 of 1, from 343 to 555: score 125.2, E = 1e-32 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nV v ++++ ++ +++++ ++ ++ +++ + ++ + sp|Q8P448| 343 VLIANVSEVEQAPEgrvpdahddepaairhlreihdeldvrpavelf 389 CS S .................................................d ++ ++ + ++ + ++ + +++ + ++ ++ + + + ++++++ sp|Q8P448| 390 qeaqhfhaeglsayalgqidlthrariddlfyaiahgvrarlsfdekshR 439 CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv ++ld+lnerl++ y+++++v+ s+pd +++d+++pi+p++rl+e+p ++ sp|Q8P448| 440 PVLDeLNERLVDKYFVNFSVFESIPDVWAIDQVFPIVPIERLNEAPQRRG 489 CS EEE-----TT--SEE. EEEEE.. .------EEEES-----SGC tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes ++a+ tCds++ + + ++++ d sLPlH+l + + ++++ff++GAY+e+ sp|Q8P448| 490 IIADMTCDSDGMVKTYveneslDSSLPLHgLNPGESYRIGFFLVGAYQEI 539 CS C-B-TTT--.-EEEEE lasnFNgfprpaeVlv<-* l++ +N+f++++ V v sp|Q8P448| 540 LGDIHNLFGDTDAVEV 555 sp|Q54UF3|DCOR_DICDI: domain 1 of 1, from 328 to 450: score 125.0, E = 1.2e-32 CS EEEEEEEEEEE--S S-E........EEEEES--- *->tLvtnVigvkergg.............drkldlnerlafvyylddGv tL+++Vi+++++ +++++++++++++ r+ + yyl dGv sp|Q54UF3| 328 TLAVTVISKRSIKQednrqhprrtsnnMRQ--------YNYYLADGV 366 CS -S-.-CHHHHS- ---EEECSS-TTSSEEEEEEE-----TT--SEE.EEE ygslpdpalyda.lhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvs ygs ++ + +d+ +l++ + p+tl+GPtCds Dv+ + d + sp|Q54UF3| 367 YGS-FNNTKFDYaKVEPLLLK-PSTKQPTPCTLFGPTCDSIDVVLK-DTQ 413 CS EE...------EEEES-----SGCC-B-TTT--.-EEEEE LPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* P el++GD+l+f d+GAYt++ +s FNgf +p+++++ sp|Q54UF3| 414 IP---ELKIGDWLYFQDMGAYTIASSSSFNGFCPPPVYYY 450 sp|Q9Z661|DCDA_ZYMMO: domain 1 of 1, from 289 to 394: score 124.9, E = 1.3e-32 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L+++Vi +ke + fv+ ld+ ++++ +p+lyda+ sp|Q9Z661| 289 VLLSKVIRIKESKT-AR--------FVI-LDAAMNDL-VRPTLYDAY 324 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv h i v +++ t+ ++++GP C+ gD++ar ++s ++++Dl++ sp|Q9Z661| 325 HEIKAVT--PSAQTYQADIVGPVCETGDIFAR-NRSIS---AVKADDLMA 368 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* +++aGAY+ ++as +N++p+ aeV v sp|Q9Z661| 369 IMSAGAYGATMASAYNSRPLVAEVMV 394 sp|Q9JWA6|DCDA_NEIMA: domain 1 of 1, from 276 to 381: score 123.9, E = 2.6e-32 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal L+t+V vk g+++ fv +d+ ++++ ++palyda+ sp|Q9JWA6| 276 ALLTRVEFVKY-GEEKN--------FVM-VDAAMNDL-MRPALYDAY 311 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv h+i+ v+ + + ++ ++GP+C+ gD+l++ d++ e+GDll+ sp|Q9JWA6| 312 HHIEAVE-PKNIAPLTANIVGPICETGDFLGK-DRTIA----CEEGDLLL 355 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* + +aGAY+ s+asn+N + r+aeVlv sp|Q9JWA6| 356 IRSAGAYGASMASNYNARNRAAEVLV 381 sp|P40808|DCOR2_DROME: domain 1 of 1, from 276 to 390: score 123.4, E = 3.6e-32 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal tL+++V++++e++ ++ ++ +++yyl+dG++g + ++y+ sp|P40808| 276 TLICKVHAKREVRS-KD---GKLDTMMYYLNDGIFGAFAGMFYYPEE 318 CS --EEECSS -TTSSEEEEEEE-----TT--SEE.EEEEE...------EE hpilpvsr.ldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDll ++++ ++ ++ p +++++GP+Cd++D++ d +LP l++GDll sp|P40808| 319 VAPELYLDeAESLPKLKSVIWGPSCDAMDKIS--DLLLP---NLNPGDLL 363 CS EES-----SGCC-B-TTT--.-EEEEE vffdaGAYteslasnFNgfprpaeVlv<-* +f ++GAYt+ as FNgf p + ++ sp|P40808| 364 GFRNMGAYTMPIASPFNGFDVPETRFF 390 sp|Q8PFQ5|SPEA_XANAC: domain 1 of 1, from 343 to 555: score 122.9, E = 5.1e-32 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nV v ++++ ++ +++++ ++ ++ +++ + ++ + sp|Q8PFQ5| 343 VLIANVSEVEQAPEgrvpdahddepaairhlreihdeldvrpavelf 389 CS S .................................................d ++ ++ + ++ + ++ + +++ + ++ ++ + + + ++++++ sp|Q8PFQ5| 390 qeaqhfhaeglsayalgqidlthrariddlfyaiahgvrarlsfdekshR 439 CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv ++ld+lnerl++ y+++++v+ s+pd +++d+++pi+p++rl+e+p ++ sp|Q8PFQ5| 440 PVLDeLNERLVDKYFVNFSVFESIPDVWAIDQVFPIVPIERLNEAPQRRG 489 CS EEE-----TT--SEE. EEEEE.. .------EEEES-----SGC tlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAYtes ++a+ tCds++ + + ++++ d sLPlH+l + ++++ff++GAY+e+ sp|Q8PFQ5| 490 IIADMTCDSDGMVKTYveneslDSSLPLHrLNAGESYRIGFFLVGAYQEI 539 CS C-B-TTT--.-EEEEE lasnFNgfprpaeVlv<-* l++ +N+f++++ V v sp|Q8PFQ5| 540 LGDIHNLFGDTDAVEV 555 sp|P56129|DCDA_HELPY: domain 1 of 1, from 270 to 377: score 122.1, E = 9e-32 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal L+t+V++ k+ ++ fv+ +d+G+++ ++p ly+a sp|P56129| 270 ELITQVLYEKKAQN-KR--------FVV-VDAGMNDF-LRPSLYHAK 305 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv h i+++ + + + p++++GP C+s D++ + d +LP ele+GD+lv sp|P56129| 306 HAIRVITPSKGREISPCDVVGPVCESSDTFLK-DAHLP---ELEPGDKLV 351 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* ++ +GAY++s+as++N++p e ++ sp|P56129| 352 IEKVGAYGSSMASQYNSRPKLLELAL 377 sp|Q89AC6|DCDA_BUCBP: domain 1 of 1, from 275 to 393: score 121.5, E = 1.4e-31 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +Lv+++ +k+ + +r+ f+ +d G++++ ++pa+y+ + sp|Q89AC6| 275 ILVSEIRVIKK-TNNRT--------FIL-VDSGFNDL-IRPAMYGSY 310 CS --EEECSS -TTSSEEEEEEE-----TT--S EE. EEEEE.. hpilpvsr....ldeeptepvtlaGPtCdsgDvl..arF....dvsLPlH h+i +++r+++ + + t +++++GP+C+sgDv++++++++ +++ LP sp|Q89AC6| 311 HHISVIPRdgrcVNYDDTIEAVVCGPLCESGDVFtqNEYgdikTRILP-- 358 CS .------EEEES-----SGCC-B-TTT--.-EEEEE lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* +++GD+lvf+d+GAY+ s++sn+N++p+ +e+l+ sp|Q89AC6| 359 -NVQIGDFLVFHDTGAYGASMSSNYNSRPLIPEILF 393 sp|P78599|DCOR_CANAL: domain 1 of 1, from 324 to 468: score 121.5, E = 1.4e-31 CS EEEEEEEEEEE--S S-E........EEEEES----S-.-CH *->tLvtnVigvkergg......drkldlnerlafvyylddGvygslpdp tL+t++i++++++ +++++++++ ++a++y ++dGvyg+ +++ sp|P78599| 324 TLITHIIARRDLPTggnnnnNDM----TPSAMLY-INDGVYGN-LNC 364 CS HHHS----EEECSS -TTSSEEEEEEE- alydalhpilpvsr.......................ldeeptepvtlaG +l+d++ p + v ++++ +++ ++ + ++++++ + + ++++++G sp|P78599| 365 ILFDHQTPKVYVLTnenqlfykqemmrslsvnnnnnnNNKTDGFKFSIWG 414 CS ----TT--SEE.EEEEE...------EEEES-----SGCC-B-TTT-- PtCdsgDvlarFdvsLPlHlelevGDllvffdaGAYteslasnFNgfp.. PtCd++D++ +L + ++vGD+l f+++GAYt+++++ FNg+ ++ sp|P78599| 415 PTCDGLDCVSS-LAKLSK--NVQVGDWLFFENVGAYTSCASTKFNGLSsg 461 CS .-EEEEE rpaeVlv<-* +++ +v sp|P78599| 462 ETKTLYV 468 sp|Q8DA54|SPEA_VIBVU: domain 1 of 1, from 355 to 571: score 121.1, E = 1.8e-31 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nVig+ + ++ ++++++ + ++ ++ + +++++ + sp|Q8DA54| 355 VLISNVIGTETYKPetvtepeedfplllnnmwrswlnlhngtdaral 401 CS .................................................. + ++++++ + +++ ++ + +++ ++++ + + ++ ++++ sp|Q8DA54| 402 ieiyndtqsdlaevhsqfatgvltlehrawaeqtslriyyelnrlmstkn 451 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ ld+l+erla+ ++++++++slpd++++d+++p+lp+s l+++ sp|Q8DA54| 452 rfhRPILDeLSERLADKFFVNFSLFQSLPDSWGIDQVFPVLPLSGLQNAA 501 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds++ ++ + ++++ + +LP++ + ++ +l++ff++GA sp|Q8DA54| 502 DRRAVMLDITCDSDGAIDAYvdgqgiESTLPVPaWNEDEPYLMGFFLVGA 551 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f+++ V+v sp|Q8DA54| 552 YQEILGDMHNLFGDTHSVVV 571 sp|Q7MK24|SPEA_VIBVY: domain 1 of 1, from 354 to 570: score 121.1, E = 1.8e-31 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nVig+ + ++ ++++++ + ++ ++ + +++++ + sp|Q7MK24| 354 VLISNVIGTETYKPetvtepeedfplllnnmwrswlnlhngtdaral 400 CS .................................................. + ++++++ + +++ ++ + +++ ++++ + + ++ ++++ sp|Q7MK24| 401 ieiyndtqsdlaevhsqfatgvltlehrawaeqtslriyyelnrlmstkn 450 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ ld+l+erla+ ++++++++slpd++++d+++p+lp+s l+++ sp|Q7MK24| 451 rfhRPILDeLSERLADKFFVNFSLFQSLPDSWGIDQVFPVLPLSGLQNAA 500 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds++ ++ + ++++ + +LP++ + ++ +l++ff++GA sp|Q7MK24| 501 DRRAVMLDITCDSDGAIDAYvdgqgiESTLPVPaWNEDEPYLMGFFLVGA 550 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f+++ V+v sp|Q7MK24| 551 YQEILGDMHNLFGDTHSVVV 570 sp|A4Y5Y9|SPEA_SHEPC: domain 1 of 1, from 350 to 566: score 121.1, E = 1.8e-31 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ +++ +++++ ++ ++ ++ +++ +++ sp|A4Y5Y9| 350 VLITDVIGTEAYQPeniqppaeespqllhnmwhswseisgradqral 396 CS .................................................. + ++++++ ++ ++ ++ + ++ ++ + + ++ ++ ++++ sp|A4Y5Y9| 397 ieiyhdsqsdlqeaqslfalgqlslaerawaeqanlrvchevqgllstkn 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+lne+la+ ++++++++slpd +++d+++p+lp+s ld +p sp|A4Y5Y9| 447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ + e +l++ff++GA sp|A4Y5Y9| 497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSAESPYLIGFFLVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|A4Y5Y9| 547 YQEILGDMHNLFGDTNSAVV 566 sp|A1RKK8|SPEA_SHESW: domain 1 of 1, from 350 to 566: score 121.1, E = 1.8e-31 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ +++ +++++ ++ ++ ++ +++ +++ sp|A1RKK8| 350 VLITDVIGTEAYQPeniqppaeespqllhnmwhswseisgradqral 396 CS .................................................. + ++++++ ++ ++ ++ + ++ ++ + + ++ ++ ++++ sp|A1RKK8| 397 ieiyhdsqsdlqeaqslfalgqlslaerawaeqanlrvchevqgllstkn 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+lne+la+ ++++++++slpd +++d+++p+lp+s ld +p sp|A1RKK8| 447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ + e +l++ff++GA sp|A1RKK8| 497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSAESPYLIGFFLVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|A1RKK8| 547 YQEILGDMHNLFGDTNSAVV 566 sp|P57513|DCDA_BUCAI: domain 1 of 1, from 275 to 393: score 121.0, E = 2e-31 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L+++V ++k++g + fv +d G++++ ++p++y+ + sp|P57513| 275 ILISKVWATKKMGN-KN--------FVL-VDVGFNDL-MRPTMYGSY 310 CS --EEECSS -TTSSEEEEEEE-----TT--SEE. EEEEE.. hpilpvsr....ldeeptepvtlaGPtCdsgDvlarF......dvsLPlH h+i ++ ++++++e +t +++aGP+C+sgD++ ++++++ ++++LP sp|P57513| 311 HHISVIYGddrkMNEKETIDTVVAGPLCESGDIFTQKeggtvqTRKLP-- 358 CS .------EEEES-----SGCC-B-TTT--.-EEEEE lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* +++vGD+l+f+d+GAY+ +++sn+N +p+ +e+l+ sp|P57513| 359 -TIKVGDYLIFHDTGAYGAAMSSNYNTRPLIPEILL 393 sp|Q9RTK2|DCDA_DEIRA: domain 1 of 1, from 253 to 357: score 120.9, E = 2.1e-31 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L+t+V+g+k+ +g r f +d+G+ ++p ly+a sp|Q9RTK2| 253 WLLTRVVGTKR-TG-RN--------FCL-VDAGMTEF-LRPMLYGAS 287 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv hp +p d+ te++++aGP C+sgD +ar v+LP ++++G ll+ sp|Q9RTK2| 288 HPLYPMW--DALATEVWDVAGPACESGDLIAR-GVPLP---TPQRGHLLL 331 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* + aGAY+ s++s+++++prpaeVl+ sp|Q9RTK2| 332 IGEAGAYGASMSSTYLSRPRPAEVLW 357 sp|B8CR70|SPEA_SHEPW: domain 1 of 1, from 350 to 566: score 120.8, E = 2.2e-31 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ + ++ +++++ + ++ ++ ++ +++ +++ sp|B8CR70| 350 VLLTDVIGTESYKPetilppsedaplllqnmwqswtevsgkadqral 396 CS .................................................. + ++ +++ ++ ++ ++ + ++ ++ + + ++ +++ +++ sp|B8CR70| 397 ieifhdcqsdltevhslfalgqlsladrawaeqinlrvchelqgsmssky 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+lne+la+ ++++++++slpd +++d+++p++p+s ld +p sp|B8CR70| 447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVMPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ ++ e +l++ff++GA sp|B8CR70| 497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWTQESPYLIGFFLVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|B8CR70| 547 YQEILGDMHNLFGDTNSAVV 566 sp|A3QDD8|SPEA_SHELP: domain 1 of 1, from 350 to 566: score 120.3, E = 3.2e-31 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ + ++++ +++ ++ ++ ++ +++ +++ sp|A3QDD8| 350 VLITDVIGTEAYKPedlqapdeeapqqlknmwdswgevsgradqral 396 CS .................................................. + ++ +++ + ++ ++ + +++ ++ + + + ++ +++ sp|A3QDD8| 397 ieiyhdvqsdlaevhslfalgqmslsdrawaeqmnlrvcyelkgvmsgky 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++++d+lne+la+ ++++++++slpd +++d+++p++p+s ld p sp|A3QDD8| 447 rfhRPVIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVMPLSGLDKKP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ + e +l++ff++GA sp|A3QDD8| 497 ERRAVMLDITCDSDGTVDQYvdgqgiETTLPVPaWSAESPYLIGFFLVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|A3QDD8| 547 YQEILGDMHNLFGDTNSAVV 566 sp|B8EAI2|SPEA_SHEB2: domain 1 of 1, from 350 to 566: score 119.9, E = 4.1e-31 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ +++ +++++ ++ ++ ++ +++ +++ sp|B8EAI2| 350 VLITDVIGTEAYQPediqppaeespqllhnmwhswselsgradqral 396 CS .................................................. + ++++++ ++ ++ ++ + ++ ++ + + ++ ++ + ++ sp|B8EAI2| 397 ieiyhdsqsdlqeahslfalgqlslaerawaeqanlrvchevqgllsakn 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+lne+la+ ++++++++slpd +++d+++p+lp+s ld +p sp|B8EAI2| 447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ + + +l++ff++GA sp|B8EAI2| 497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSADSPYLIGFFLVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|B8EAI2| 547 YQEILGDMHNLFGDTNSAVV 566 sp|A3D3G2|SPEA_SHEB5: domain 1 of 1, from 350 to 566: score 119.9, E = 4.1e-31 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ +++ +++++ ++ ++ ++ +++ +++ sp|A3D3G2| 350 VLITDVIGTEAYQPediqppaeespqllhnmwhswselsgradqral 396 CS .................................................. + ++++++ ++ ++ ++ + ++ ++ + + ++ ++ + ++ sp|A3D3G2| 397 ieiyhdsqsdlqeahslfalgqlslaerawaeqanlrvchevqgllsakn 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+lne+la+ ++++++++slpd +++d+++p+lp+s ld +p sp|A3D3G2| 447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ + + +l++ff++GA sp|A3D3G2| 497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSADSPYLIGFFLVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|A3D3G2| 547 YQEILGDMHNLFGDTNSAVV 566 sp|A6WM65|SPEA_SHEB8: domain 1 of 1, from 350 to 566: score 119.9, E = 4.1e-31 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ +++ +++++ ++ ++ ++ +++ +++ sp|A6WM65| 350 VLITDVIGTEAYQPediqppaeespqllhnmwhswselsgradqral 396 CS .................................................. + ++++++ ++ ++ ++ + ++ ++ + + ++ ++ + ++ sp|A6WM65| 397 ieiyhdsqsdlqeahslfalgqlslaerawaeqanlrvchevqgllsakn 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+lne+la+ ++++++++slpd +++d+++p+lp+s ld +p sp|A6WM65| 447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ + + +l++ff++GA sp|A6WM65| 497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSADSPYLIGFFLVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|A6WM65| 547 YQEILGDMHNLFGDTNSAVV 566 sp|A9KY70|SPEA_SHEB9: domain 1 of 1, from 350 to 566: score 119.9, E = 4.1e-31 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ +++ +++++ ++ ++ ++ +++ +++ sp|A9KY70| 350 VLITDVIGTEAYQPediqppaeespqllhnmwhswselsgradqral 396 CS .................................................. + ++++++ ++ ++ ++ + ++ ++ + + ++ ++ + ++ sp|A9KY70| 397 ieiyhdsqsdlqeahslfalgqlslaerawaeqanlrvchevqgllsakn 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+lne+la+ ++++++++slpd +++d+++p+lp+s ld +p sp|A9KY70| 447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ + + +l++ff++GA sp|A9KY70| 497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSADSPYLIGFFLVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|A9KY70| 547 YQEILGDMHNLFGDTNSAVV 566 sp|P27116|DCOR_LEIDO: domain 1 of 1, from 509 to 682: score 119.8, E = 4.5e-31 CS EEEEEEEEEEE--S S-E.. ......EEEEES----S *->tLvtnVigvkergg..........drkld.lnerlafvyylddGvyg L++nV + ++++ ++ + +++ +++ ++++++ +y ++dG+y+ sp|P27116| 509 ALLMNVFASRTLRLsdvevsrqafQSVVSmDEPEEYQYY-VNDGLYH 554 CS -.-CHHHHS----EEECSS slpdpalydalhpilpvsr............................... s ++++l+d+ hp l++ +++++ ++ +++++ ++++++++ +++ sp|P27116| 555 S-FNCILFDHAHPTLLLLNdgdgadgvesgteaaavcseeegetslsgpl 603 CS -TTSSEEEEEEE-----TT--SEE.EEEEE...-- ...............ldeeptepvtlaGPtCdsgDvlarFdvsLPlHlel +++ + +++++ ++ p++ +t++GPtCds+D++ + ++++P e+ sp|P27116| 604 andplfmsawdrrrsFARRPLRITTIFGPTCDSMDCILK-KQPFP---EM 649 CS ----EEEES-----SGCC-B-TTT--.-EEEEE evGDllvffdaGAYteslasnFNgfprpaeVlv<-* + GD+l+++d+G Yt ++a FNgf +v sp|P27116| 650 KLGDWLLVPDMGSYTTAAAGFFNGFATRRLEWV 682 sp|Q083L6|SPEA_SHEFN: domain 1 of 1, from 350 to 566: score 119.2, E = 6.6e-31 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ ++++++ ++ ++ ++ + +++ +++ sp|Q083L6| 350 VLITDVIGTEAYQPeniqepsedapqllhnmwqswleisgrydqrai 396 CS .................................................. + ++++++ ++ ++ ++ + ++ ++ + + ++ ++ ++++ sp|Q083L6| 397 ieiyhdsqsdiseahslfavgqlsladrawaeqanlrvchevkgllsnnn 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++++d+lne+la+ ++++++++slpd +++d+++p+lp+s ld +p sp|Q083L6| 447 ryhRPVIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ + + +l++ff +GA sp|Q083L6| 497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSADSPYLIGFFMVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|Q083L6| 547 YQEILGDMHNLFGDTNSAVV 566 sp|Q8EFU5|SPEA_SHEON: domain 1 of 1, from 350 to 566: score 119.1, E = 7e-31 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ +++++++++ ++ ++ ++ +++ +++ sp|Q8EFU5| 350 VLITDVIGTEAYQVediqppeeespqllhnmwqswtelsgradqral 396 CS .................................................. + ++++++ ++ ++ ++ + ++ ++ + + ++ ++ ++++ sp|Q8EFU5| 397 ieiyhdsqsdlqeaqslfalgqlslaerawaeqanlrvchevqgllstkn 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+lne+la+ ++++++++slpd +++d+++p+lp+s ld +p sp|Q8EFU5| 447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ + e +l++ff +GA sp|Q8EFU5| 497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSAESPYLIGFFMVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|Q8EFU5| 547 YQEILGDMHNLFGDTNSAVV 566 sp|B1KRD4|SPEA_SHEWM: domain 1 of 1, from 350 to 566: score 118.6, E = 1e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ +++ ++ ++ ++ ++ ++ +++ +++ sp|B1KRD4| 350 VLITDVIGTEAYKPediqppaedapqllhnmwhswneisgradqral 396 CS .................................................. + ++ +++ ++ ++ ++ + +++ ++ + + ++ ++ +++ sp|B1KRD4| 397 ieiyhdcqsdltevhslfalgqlsltdrawaeqvnlrvchelqgvmssky 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+e+la+ ++++++++slpd +++d+++pi+p+s ld +p sp|B1KRD4| 447 rfhRPIIDeLTEKLADKFFVNFSLFQSLPDAWGIDQVFPIMPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ + e +l++ff++GA sp|B1KRD4| 497 ERRAVMLDITCDSDGTIDQYvdgqgiETTLPVPaWSAESPYLIGFFLVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ ++ sp|B1KRD4| 547 YQEILGDMHNLFGDTNSAVI 566 sp|Q7V3M9|SPEA_PROMP: domain 1 of 1, from 355 to 574: score 118.5, E = 1.1e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++n++g+++++ + + +++++++ ++ ++ ++ ++ ++++++ sp|Q7V3M9| 355 VLIFNILGTSHVSSqvkvsdqkkqsliitnlietlnqiknlrdkked 401 CS .................................................. ++ + ++ ++ +++ + + +++ ++ + ++ ++ sp|Q7V3M9| 402 lseiielwndakkfkedclvafrlgficleerayaeeltwacakeianql 451 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld ++++ +++l+++++ la +yy + +v+ s+pd++++++++pi+p++r+ sp|Q7V3M9| 452 enneiiHPDLSeITDTLASTYYANLSVFKSIPDTWAINQVFPIIPIHRHL 501 CS TSSEEEEEEE-----TT--SEE. EEEEE.. .------EEEES- eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd eep ++ +a+ tCds+++l++F ++++ + +L lH++e ++++l+++f sp|Q7V3M9| 502 EEPFCKGHFADLTCDSDGKLNNFidngkiKSLLNLHpPEKNNDYLIGIFM 551 CS ----SGCC-B-TTT--.-EEEEE aGAYteslasnFNgfprpaeVlv<-* aGAY+e+l++ +N+f+ ++++++ sp|Q7V3M9| 552 AGAYQEALGNFHNLFGNTNVIHI 574 sp|A8FWJ3|SPEA_SHESH: domain 1 of 1, from 350 to 566: score 117.5, E = 2.2e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ + ++++++ ++ ++ ++ ++ +++ +++ sp|A8FWJ3| 350 VLITDVIGTEAYKPevieepeteapqllhnmwqswsevsgradqral 396 CS .................................................. + ++ +++ ++ ++ ++ + +++ ++ + + ++ ++ +++ sp|A8FWJ3| 397 ieiyhdcqsdlsevhslfalgqlslserawaeqvnlrvchelrdvmspky 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+lne+la+ ++++++++slpd +++d+++pi+p+s ld +p sp|A8FWJ3| 447 rfhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPIMPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + + P++++ e +l++ff++GA sp|A8FWJ3| 497 ERRAVMLDITCDSDGTIDQYvdgqgiETTIPVPtWSAESPYLIGFFLVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|A8FWJ3| 547 YQEILGDMHNLFGDTNSAVV 566 sp|Q0HJY2|SPEA_SHESM: domain 1 of 1, from 350 to 566: score 117.3, E = 2.5e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ +++ +++++ ++ ++ ++ +++ +++ sp|Q0HJY2| 350 VLITDVIGTEAYQVediqppaeespqllhnmwqswtelsgradqral 396 CS .................................................. + ++++++ ++ ++ ++ + ++ ++ + + ++ ++ ++++ sp|Q0HJY2| 397 ieiyhdsqsdlqeaqslfalgqlslaerawaeqanlrvchevqgllstkn 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+lne+la+ ++++++++slpd +++d+++p+lp+s ld +p sp|Q0HJY2| 447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ + e +l++ff +GA sp|Q0HJY2| 497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSAESPYLMGFFMVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|Q0HJY2| 547 YQEILGDMHNLFGDTNSAVV 566 sp|Q0HW78|SPEA_SHESR: domain 1 of 1, from 350 to 566: score 117.3, E = 2.5e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ +++ +++++ ++ ++ ++ +++ +++ sp|Q0HW78| 350 VLITDVIGTEAYQVediqppaeespqllhnmwqswtelsgradqral 396 CS .................................................. + ++++++ ++ ++ ++ + ++ ++ + + ++ ++ ++++ sp|Q0HW78| 397 ieiyhdsqsdlqeaqslfalgqlslaerawaeqanlrvchevqgllstkn 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+lne+la+ ++++++++slpd +++d+++p+lp+s ld +p sp|Q0HW78| 447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ + e +l++ff +GA sp|Q0HW78| 497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSAESPYLMGFFMVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|Q0HW78| 547 YQEILGDMHNLFGDTNSAVV 566 sp|Q63764|AZIN1_RAT: domain 1 of 1, from 282 to 406: score 117.2, E = 2.7e-30 CS EEEEEEEEEEE--S S-E........EEEEES--- *->tLvtnVigvkergg.............drkldlnerlafvyylddGv tL++n+i++k+++ ++ +++ ++++++++ fvyy++dGv sp|Q63764| 282 TLAVNIIAKKVVENdklssgvekngsdEPA--------FVYYMNDGV 320 CS -S-.-CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EE ygslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdv ygs +++ l + l ++ v+++ +++ep+++++l+GP+Cd +D + + + sp|Q63764| 321 YGS-FASKLSEDLNTVPEVHKkyKEDEPLFTSSLWGPSCDELDQIVE-SC 368 CS EEE...------EEEES-----SGCC-B-TTT--.-EEEEE sLPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* +LP el vGD+l+f ++GA + s F +rpa++++ sp|Q63764| 369 LLP---ELSVGDWLIFDNMGADSLHGPSAFSDTQRPAIYFM 406 sp|Q9ZME5|DCDA_HELPJ: domain 1 of 1, from 270 to 377: score 117.1, E = 2.9e-30 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal L+t+V++ k+ ++ fv+ +d+G+++ ++p ly+a sp|Q9ZME5| 270 ELITQVLYEKKAQN-KR--------FVI-VDAGMNDF-LRPSLYHAK 305 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv h i+++ + + + p++++GP C+s D++ + d LP ele+GD+l+ sp|Q9ZME5| 306 HAIRVITPCGGREISPCDVVGPVCESSDTFLK-DANLP---ELEPGDKLA 351 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* ++ +GAY++s+as++N++p e ++ sp|Q9ZME5| 352 IEKVGAYGSSMASQYNSRPKLLELAL 377 sp|A0KVN8|SPEA_SHESA: domain 1 of 1, from 350 to 566: score 117.0, E = 3.1e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ +++ +++++ ++ ++ ++ +++ +++ sp|A0KVN8| 350 VLITDVIGTEAYQVeeiqppaeespqllhnmwqswteisgradqral 396 CS .................................................. + ++++++ ++ ++ ++ + ++ ++ + + ++ ++ ++++ sp|A0KVN8| 397 ieiyhdsqsdlqeaqslfalgqlslaerawaeqanlrvchevqgllstkn 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+lne+la+ ++++++++slpd +++d+++p+lp+s ld +p sp|A0KVN8| 447 ryhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ + e +l++ff +GA sp|A0KVN8| 497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWSAESPYLMGFFMVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|A0KVN8| 547 YQEILGDMHNLFGDTNSAVV 566 sp|Q8ZHG8|SPEA_YERPE: domain 1 of 1, from 372 to 588: score 117.0, E = 3.1e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+nVigv +++ ++++++ + ++ ++ ++ ++ ++++++++ sp|Q8ZHG8| 372 VLVSNVIGVERNEFcepqppeagapraleslwdtwqemqepenrrsl 418 CS .................................................. ++ ++++ + ++ +++ ++ + +++ ++ + ++ +++ ++++ sp|Q8ZHG8| 419 rewlhdsqmdlhdvhtqyahgmldlthrawaeqlylsicneiqkqldpsn 468 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld p sp|Q8ZHG8| 469 rahRPIIDeLQERMADKLYVNFSLFQSMPDAWGIDQLFPVLPLEGLDKPP 518 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds+++++++ ++++ ++ ++P +++e+ ll+ff +G sp|Q8ZHG8| 519 ERRAVLLDITCDSDGTIDHYidgdgvatTMPMPP-YDPENPPLLGFFMVG 567 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++a V v sp|Q8ZHG8| 568 AYQEILGNMHNLFGDTAAVDV 588 sp|B5XUB1|SPEA_KLEP3: domain 1 of 1, from 345 to 561: score 116.8, E = 3.5e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv ++++++ +++ ++ ++ ++ ++ + ++++++++ sp|B5XUB1| 345 VLVSNIIGVERNEYteatppaedaarplqsmwetwlemhetgnrrsl 391 CS .................................................. ++ ++++ + ++ + + ++++ + +++ ++ + ++ +++ ++++ sp|B5XUB1| 392 rewlhdsqmdlhdihigyssgtfnlqerawaeqlylnmchevqkqldpsn 441 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ +y+++++++s+pd +++d+l+p++p++ l+ +p sp|B5XUB1| 442 rahRPIIDeLQERMADKIYVNFSLFQSMPDAWGIDQLFPVMPLEGLNKSP 491 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|B5XUB1| 492 ERRAVLLDITCDSDGAIDHYvdgdgiatTMPMPE-YDPENPPMLGFFMVG 540 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|B5XUB1| 541 AYQEILGNMHNLFGDTEAVDV 561 sp|Q12LW6|SPEA_SHEDO: domain 1 of 1, from 350 to 566: score 116.8, E = 3.5e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ + + ++ ++ ++ ++ ++ +++++++ sp|Q12LW6| 350 VLITDVIGTEAYMPeniqapaedapqllhnmwqswteisgrhdqrai 396 CS .................................................. + ++++++ + ++ ++ + ++ ++++ + ++ ++ ++++ sp|Q12LW6| 397 ieiyhdsqsdiaeahslfavgqlslmdrawaeqtnlrvchevkgllsnnn 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++++d+lne+la+ ++++++++slpd +++d+++p+lp+ ld +p sp|Q12LW6| 447 ryhRPVIDeLNEKLADKLFVNFSLFQSLPDAWGIDQVFPVLPLTCLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++ +++++ +l++ff +GA sp|Q12LW6| 497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPaWDPANPYLIGFFMVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|Q12LW6| 547 YQEILGDMHNLFGDTNSAVV 566 sp|A2BNH3|SPEA_PROMS: domain 1 of 1, from 355 to 574: score 116.8, E = 3.6e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nV+g+++++ + + ++++++ ++ ++ + ++ ++++ + sp|A2BNH3| 355 VLIFNVLGTSHVSSklqifdkknqqliisnlldtfyelkklknkkin 401 CS .................................................. ++ + ++ ++ +++ + + + ++ ++ + ++ +++ sp|A2BNH3| 402 lsqiielwndakkfkedclvafrlgflslaerayaeeltwacakeisnnl 451 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld ++++ ++++l++++e la +yy + +++ s+pd++++++++pi+p++r+ sp|A2BNH3| 452 nndeinHPDLSeITETLASTYYANLSIFKSIPDSWAINQIFPIVPIHRHL 501 CS TSSEEEEEEE-----TT--SEE. EEEEE.. .------EEEES- eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd eep ++ +a+ tCds+++l++F ++++ + +L lH++e + ++l+++f sp|A2BNH3| 502 EEPFCKGNFADLTCDSDGKLNNFidngkiKSLLNLHkPEEDKDYLIGIFM 551 CS ----SGCC-B-TTT--.-EEEEE aGAYteslasnFNgfprpaeVlv<-* +GAY+e+l++ +N+f+ +++V++ sp|A2BNH3| 552 TGAYQEALGNLHNLFGSTNVVHI 574 sp|Q87JS8|SPEA_VIBPA: domain 1 of 1, from 354 to 570: score 116.7, E = 3.8e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nVig+ + ++ ++ + + + ++ ++ ++ +++++ + sp|Q87JS8| 354 VLISNVIGTETYQPeevhelgvdaplllqnmwrnwenlqdgtdaral 400 CS .................................................. + ++++++ + +++ ++ + +++ ++ + + + +++ ++++ sp|Q87JS8| 401 ieiyndtqsdlaevhsqfatgvlnleqrawaeqlslriyfelsrkmstkn 450 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ ld+l+erla+ ++++++++slpd +++d+++p+lp+s l +++ sp|Q87JS8| 451 rfhRPILDeLSERLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLGDAE 500 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds++ ++++ ++++ + +LP++ + + +l++ff++GA sp|Q87JS8| 501 ERRAVMLDITCDSDGAIDHYvdgqgiESTLPVPaWSKDKPYLMGFFLVGA 550 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f+++ +v sp|Q87JS8| 551 YQEILGDMHNLFGDTHSAVV 570 sp|A8H5G3|SPEA_SHEPA: domain 1 of 1, from 350 to 566: score 116.7, E = 3.8e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ +++ ++ ++ ++ ++ + +++ +++ sp|A8H5G3| 350 VLLTDVIGTEAYKPediqppaedapqllhnmwqswievsgkadqral 396 CS .................................................. + ++ +++ ++ ++ ++ + ++ ++ + + + +++ + + sp|A8H5G3| 397 ieiyhdcqsdltevhslfavgqlglaerawaeqvnlrvcyelqgsmsaky 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++++d+lne+la+ ++++++++slpd +++d+++p++p+s ld +p sp|A8H5G3| 447 rfhRPVIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVMPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA + +++ + tCds+++++++ ++++ + +LP++ ++ e +l++ff++GA sp|A8H5G3| 497 ESRAVMLDITCDSDGTVDQYvegqgiETTLPVPaWTQESPYLIGFFLVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|A8H5G3| 547 YQEILGDMHNLFGDTNSAVV 566 sp|A3PA96|SPEA_PROM0: domain 1 of 1, from 355 to 574: score 116.6, E = 4.1e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nV+g+++++ + + ++++++ ++ ++ + ++ ++++ + sp|A3PA96| 355 VLIFNVLGTSHVSSklqifdkknqqliisnlletyyelkklknkkin 401 CS .................................................. ++ + ++ ++ +++ + + + ++ ++ ++ +++ sp|A3PA96| 402 lsqiielwndakkfkedclvafrlgflslaerayaeelawacakeisnnl 451 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld ++++ ++++l++++e la +yy + +++ s+pd++++++++pi+p++r+ sp|A3PA96| 452 nndeinHPDLSeITETLASTYYANLSIFKSIPDSWAINQIFPIVPIHRHL 501 CS TSSEEEEEEE-----TT--SEE. EEEEE.. .------EEEES- eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd eep ++ +a+ tCds+++l++F ++++ + +L lH++e + ++l+++f sp|A3PA96| 502 EEPFCKGNFADLTCDSDGKLNNFiddgkiKSLLNLHePEKDKDYLIGIFM 551 CS ----SGCC-B-TTT--.-EEEEE aGAYteslasnFNgfprpaeVlv<-* +GAY+e+l++ +N+f+ +++V++ sp|A3PA96| 552 TGAYQEALGNLHNLFGSTNVVHI 574 sp|P41023|DCDA_BACMT: domain 1 of 1, from 301 to 409: score 116.4, E = 4.6e-30 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal t ++++ ++k+++ r +v+ +d+G++++ ++paly+a sp|P41023| 301 TTLYQIGSRKDVPNVRH--------YVA-VDGGMSDN-IRPALYNAK 337 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv + ++ +++ + +e+v++aG +C+sgD l d +LP + + +D+l+ sp|P41023| 338 YEAVLANKPLAKADETVSIAGKCCESGDMLIW-DLPLP---KADSDDILA 383 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* +f +GAY++s+a+n+N +prpa+V+v sp|P41023| 384 VFCTGAYGYSMANNYNRIPRPAVVFV 409 sp|B0TQX3|SPEA_SHEHH: domain 1 of 1, from 350 to 566: score 116.4, E = 4.8e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ ++ +++ ++ ++ ++ ++ + +++ +++ sp|B0TQX3| 350 VLLTDVIGTEAYKPediqppaedapqllhnmwqswvevsgkadqral 396 CS .................................................. + ++ +++ ++ ++ ++ + ++ ++ + + + +++ + + sp|B0TQX3| 397 ieifhdcqsdltevhslfavgqvglaerawaeqvnlrvcyelqgsmsaky 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+lne+la+ ++++++++slpd +++d+++p++p+s ld +p sp|B0TQX3| 447 rfhRPIIDeLNEKLADKFFVNFSLFQSLPDAWGIDQVFPVMPLSGLDKAP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA + +++ + tCds+++++++ ++++ + +LP++ ++ e +l++ff++GA sp|B0TQX3| 497 ESRAVMLDITCDSDGTIDQYvdgqgiETTLPVPaWTQESPYLIGFFLVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f++++ +v sp|B0TQX3| 547 YQEILGDMHNLFGDTNSAVV 566 sp|Q31DD8|SPEA_PROM9: domain 1 of 1, from 355 to 574: score 116.4, E = 4.8e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nV+g+++++ + + ++++++ ++ ++ + ++ ++++ + sp|Q31DD8| 355 VLIFNVLGTSHVSSklqifdkknqqliisnlletfyelkklknkkin 401 CS .................................................. ++ + ++ ++ +++ + + + ++ ++ + ++ +++ sp|Q31DD8| 402 lsqiielwndakkfkedclvafrlgflslaerayaeeltwacakeisknl 451 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld +++ ++++l++++e la +yy + +++ s+pd++++++++pi+p++r+ sp|Q31DD8| 452 nndainHPDLSeITETLASTYYANLSIFKSIPDSWAINQIFPIVPIHRHL 501 CS TSSEEEEEEE-----TT--SEE. EEEEE.. .------EEEES- eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd eep ++ +a+ tCds+++l++F ++++ + +L lH++e + ++l+++f sp|Q31DD8| 502 EEPFCKGNFADLTCDSDGKLNNFiddgkiKSLLNLHkPEEDKDYLIGIFM 551 CS ----SGCC-B-TTT--.-EEEEE aGAYteslasnFNgfprpaeVlv<-* +GAY+e+l++ +N+f+ +++V++ sp|Q31DD8| 552 TGAYQEALGNLHNLFGSTNVVHI 574 sp|Q96412|SPE1_DIACA: domain 1 of 1, from 491 to 605: score 116.3, E = 4.9e-30 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal Lv++ +gv + + +y ++ +v++s+pd +++++l sp|Q96412| 491 ELVSKALGVAD----GV--------CTYNVNLSVFTSIPDFWGIGQL 525 CS --EEECSS-TTSSEEEEEEE-----TT--SEE. EEEEE.. .----- hpilpvsrldeeptepvtlaGPtCdsgDvlarF...dvsLPlH.lelevG +pi+p++rld++p ++ +l + tCds++++++F +++ sLPlH+l +G sp|Q96412| 526 FPIMPIHRLDQQPKARGILSDLTCDSDGKIDKFigdESSLPLHeLSGGEG 575 CS -EEEES-----SGCC-B-TTT--.-EEEEE DllvffdaGAYteslasnFNgfprpaeVlv<-* ++l++f+ GAY e+l+ +N+f+ p++V v sp|Q96412| 576 YYLGMFLGGAYEEALGGVHNLFGGPSVVRV 605 sp|A1S712|SPEA_SHEAM: domain 1 of 1, from 350 to 566: score 116.1, E = 5.9e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+t Vig+ + ++ + ++++ ++ ++ ++ ++ +++ +++ sp|A1S712| 350 VLITDVIGTEAYSPedipapeeeapqllhnmwrswneissrldqral 396 CS .................................................. + ++++++ + ++ ++ + +++ ++ + ++ ++ + ++ sp|A1S712| 397 ieifhdtqsdlaeaqslfalgqlsledrawaeqcnlavchelqglmnarn 446 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+lne+la+ ++++++++slpd +++d+++p+lp+s ld p sp|A1S712| 447 ryqRPIIDeLNEKLADRFFVNFSLFQSLPDAWGIDQVFPVLPLSGLDKVP 496 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds+++++++ ++++ + +LP++++ e +l++ff++GA sp|A1S712| 497 ERRAVMLDITCDSDGIVDQYvdgqgiETTLPVPnWSAEDPYLIGFFLVGA 546 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++ +N+f++++ +v sp|A1S712| 547 YQEILGDLHNLFGDTNSAVV 566 sp|A8G243|SPEA_PROM2: domain 1 of 1, from 355 to 574: score 115.5, E = 8.8e-30 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nV+g+++++ + + ++++++ ++ ++ + ++ ++++ + sp|A8G243| 355 VLIFNVLGTSHVSSklkiyddkkqsliisnlietfyelkklknkkin 401 CS .................................................. ++ + ++ ++ +++ + + + ++ ++ + ++ ++ sp|A8G243| 402 lsqiielwndakkfkedclvafrlgflslaerayaeeltwacakeiannl 451 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld ++++ ++++l +++e la +yy + +++ s+pd++++++++pi+p++r+ sp|A8G243| 452 nndeinHPDLFeITETLASTYYANLSIFKSIPDCWAINQIFPIMPIHRHL 501 CS TSSEEEEEEE-----TT--SEE. EEEEE.. .------EEEES- eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd eep ++ +a+ tCds+++l+ F ++++ + +L lH++e + ++l+++f sp|A8G243| 502 EEPFCKGNFADLTCDSDGKLNSFinngkiKSLLNLHePEQDKDYLIGIFM 551 CS ----SGCC-B-TTT--.-EEEEE aGAYteslasnFNgfprpaeVlv<-* +GAY+e+l++ +N+f+ +++V++ sp|A8G243| 552 TGAYQEALGNLHNLFGNTNVVHI 574 sp|Q7VEG4|SPEA_PROMA: domain 1 of 1, from 355 to 574: score 115.2, E = 1.1e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nV+g+++++ + +++++ + ++ +++ ++ ++++ + sp|Q7VEG4| 355 ILIFNVLGTSSVPTqiaietsneclsvknlretlmilhqiceekkid 401 CS .................................................. ++ ++ ++ + +++ + + + + +++ + ++ + ++ + sp|Q7VEG4| 402 vsklqeawndalkfkedalnafrlgfidlterataeqltwacakqiaahl 451 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld +++ + ++ l+ +n++l+ +yy +++++ s pd++++++l+p lp++rl+ sp|Q7VEG4| 452 pndlkiPKELLaINKGLTETYYANISIFRSAPDTWAIQQLFPLLPIHRLQ 501 CS TSSEEEEEEE-----TT--SEE. EEEEE.. .------EEEES- eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd e p++ +a+ tCds+++larF ++++++++L lH+++ ++++++++f+ sp|Q7VEG4| 502 EKPDQLGHFADLTCDSDGKLARFinngqeKFLLELHtVKANENYWIGMFL 551 CS ----SGCC-B-TTT--.-EEEEE aGAYteslasnFNgfprpaeVlv<-* GAY+e++++ +N+f+ ++ +++ sp|Q7VEG4| 552 GGAYQEVMGNLHNLFGSTNAIHI 574 sp|C4K6F4|SPEA_HAMD5: domain 1 of 1, from 346 to 562: score 114.9, E = 1.3e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nVigv +++ ++++ +++++++ ++ + ++ ++++++++ sp|C4K6F4| 346 VLISNVIGVERNEFsppqapekhspraleslwytwqemqkpdhrhsl 392 CS .................................................. ++ ++++++ ++ +++ +++ + +++ ++ + ++ +++ ++++ sp|C4K6F4| 393 reclhdsqrdlqdvhtqythgildlkqrawaeqlylqichhiqkeldpsd 442 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + ++ ++d+l+er+a+ y+++++++slpd +++++l+pilp++ l++ p sp|C4K6F4| 443 rahRTMIDnLQERMADKLYVNFSLFQSLPDAWGINQLFPILPLEGLNQRP 492 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++l + tCds++++ ++ ++++ +LP ++++ e+ +l+ff +GA sp|C4K6F4| 493 ERRAVLLDITCDSDGIIEHYvdgdgvANTLPIPpYDAENPPILGFFMVGA 542 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f+++a+V v sp|C4K6F4| 543 YQEILGNMHNLFGDTAVVEV 562 sp|B5F5L1|SPEA_SALA4: domain 1 of 1, from 345 to 561: score 114.9, E = 1.3e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv ++++++++ + ++ ++ ++ ++ ++ ++++++++ sp|B5F5L1| 345 VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 391 CS .................................................. ++ ++++ + ++ + + +++ + +++ ++ + ++ +++ ++++ sp|B5F5L1| 392 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 441 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|B5F5L1| 442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|B5F5L1| 492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|B5F5L1| 541 AYQEILGNMHNLFGDTEAVDV 561 sp|Q57K30|SPEA_SALCH: domain 1 of 1, from 345 to 561: score 114.9, E = 1.3e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv ++++++++ + ++ ++ ++ ++ ++ ++++++++ sp|Q57K30| 345 VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 391 CS .................................................. ++ ++++ + ++ + + +++ + +++ ++ + ++ +++ ++++ sp|Q57K30| 392 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 441 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|Q57K30| 442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|Q57K30| 492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|Q57K30| 541 AYQEILGNMHNLFGDTEAVDV 561 sp|B5FUJ7|SPEA_SALDC: domain 1 of 1, from 345 to 561: score 114.9, E = 1.3e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv ++++++++ + ++ ++ ++ ++ ++ ++++++++ sp|B5FUJ7| 345 VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 391 CS .................................................. ++ ++++ + ++ + + +++ + +++ ++ + ++ +++ ++++ sp|B5FUJ7| 392 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 441 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|B5FUJ7| 442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|B5FUJ7| 492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|B5FUJ7| 541 AYQEILGNMHNLFGDTEAVDV 561 sp|B4THH1|SPEA_SALHS: domain 1 of 1, from 345 to 561: score 114.9, E = 1.3e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv ++++++++ + ++ ++ ++ ++ ++ ++++++++ sp|B4THH1| 345 VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 391 CS .................................................. ++ ++++ + ++ + + +++ + +++ ++ + ++ +++ ++++ sp|B4THH1| 392 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 441 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|B4THH1| 442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|B4THH1| 492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|B4THH1| 541 AYQEILGNMHNLFGDTEAVDV 561 sp|A9N4N1|SPEA_SALPB: domain 1 of 1, from 345 to 561: score 114.9, E = 1.3e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv ++++++++ + ++ ++ ++ ++ ++ ++++++++ sp|A9N4N1| 345 VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 391 CS .................................................. ++ ++++ + ++ + + +++ + +++ ++ + ++ +++ ++++ sp|A9N4N1| 392 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 441 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|A9N4N1| 442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|A9N4N1| 492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|A9N4N1| 541 AYQEILGNMHNLFGDTEAVDV 561 sp|B4TV55|SPEA_SALSV: domain 1 of 1, from 345 to 561: score 114.9, E = 1.3e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv ++++++++ + ++ ++ ++ ++ ++ ++++++++ sp|B4TV55| 345 VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 391 CS .................................................. ++ ++++ + ++ + + +++ + +++ ++ + ++ +++ ++++ sp|B4TV55| 392 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 441 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|B4TV55| 442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|B4TV55| 492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|B4TV55| 541 AYQEILGNMHNLFGDTEAVDV 561 sp|P60659|SPEA_SALTY: domain 1 of 1, from 371 to 587: score 114.9, E = 1.3e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv ++++++++ + ++ ++ ++ ++ ++ ++++++++ sp|P60659| 371 VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 417 CS .................................................. ++ ++++ + ++ + + +++ + +++ ++ + ++ +++ ++++ sp|P60659| 418 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 467 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|P60659| 468 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 517 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|P60659| 518 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 566 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|P60659| 567 AYQEILGNMHNLFGDTEAVDV 587 sp|P60658|SPEA_SALTI: domain 1 of 1, from 371 to 587: score 114.9, E = 1.3e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv ++++++++ + ++ ++ ++ ++ ++ ++++++++ sp|P60658| 371 VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 417 CS .................................................. ++ ++++ + ++ + + +++ + +++ ++ + ++ +++ ++++ sp|P60658| 418 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 467 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|P60658| 468 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 517 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|P60658| 518 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 566 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|P60658| 567 AYQEILGNMHNLFGDTEAVDV 587 sp|B4T5J3|SPEA_SALNS: domain 1 of 1, from 345 to 561: score 114.9, E = 1.3e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv ++++++++ + ++ ++ ++ ++ ++ ++++++++ sp|B4T5J3| 345 VLVSNIIGVERNEYtdptapaedapralqnlwetwqemhkpgtrrsl 391 CS .................................................. ++ ++++ + ++ + + +++ + +++ ++ + ++ +++ ++++ sp|B4T5J3| 392 rewlhdsqmdlhdihigyssgafslqerawaeqlylsmchevqkqldpqn 441 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|B4T5J3| 442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|B4T5J3| 492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|B4T5J3| 541 AYQEILGNMHNLFGDTEAVDV 561 sp|P44316|DCDA_HAEIN: domain 1 of 1, from 285 to 391: score 114.9, E = 1.4e-29 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +Lv++V + k+++ r f++ +d G+++ ++paly+a+ sp|P44316| 285 ILVAKVQYLKSNES-RN--------FAI-TDTGMNDM-IRPALYEAY 320 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv i+ ++r e + + ++++GP C+ D+l++ +++L +++GD+++ sp|P44316| 321 MNIVEIDRTLEREKAIYDVVGPVCETSDFLGK-QRELS----IAEGDYIA 365 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* +aGAY+ s++sn+N++ r+aeVlv sp|P44316| 366 QCSAGAYGASMSSNYNSRARTAEVLV 391 sp|P22220|SPE1_AVESA: domain 1 of 1, from 355 to 532: score 114.8, E = 1.4e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +++ + ++ + +++++ ++++ +++ ++ +++ ++++ + +++ sp|P22220| 355 MIILEALSAIPEPKddedeatteqlhgrirdlssklqptglsmssha 401 CS S-E........EEEEES----S-.- .........................drkldlnerlafvyylddGvygslp + ++++ + + +++ +++ +++ + + y+++ +v+ ++p sp|P22220| 402 vhikkhgiemyklgkklsksvttdaHTI--------YNYHMNLSVFSLMP 443 CS CHHHHS----EEECSS-TTSSEEEEEEE-----TT--SEE. EEEEE. dpalydalhpilpvsrldeeptepvtlaGPtCdsgDvlarF...dvsLPl d +++++l+p +pvsrlde pt+++tl++ tCds++++++F +++ ++Pl sp|P22220| 444 DYWGIQHLFPMMPVSRLDEKPTHKATLVDVTCDSDGKVDKFirdTETMPL 493 CS . .------EEEES-----SGCC-B-TTT--.-EEEEE H..lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* H+ ++ G++++++++GAY+e+l++ +N+f+ p+ V v sp|P22220| 494 HplDPKLGGYYVAVLLTGAYQEALSNKHNLFGGPSLVRV 532 sp|Q9X5M1|DCDA_MYCS2: domain 1 of 1, from 336 to 449: score 114.7, E = 1.5e-29 CS EEEEEEEEEEE--S S-E........EEEEES----S-.-CHHH *->tLvtnVigvkergg....drkldlnerlafvyylddGvygslpdpal + +++V +vk++ +++ +r+ +v +d+G++++ +++ l sp|Q9X5M1| 336 ITLYEVGTVKDVAVsqtaHRR--------YVS-VDGGMSDN-IRTSL 372 CS HS----EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...----- ydalhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevG y a++ ++vsr ++p + + ++G +C+sgD++ r d + ++++G sp|Q9X5M1| 373 YAAQYDARLVSRVSDAPPALARIVGKHCESGDIVVR-DTWVSD--DIAPG 419 CS -EEEES-----SGCC-B-TTT--.-EEEEE DllvffdaGAYteslasnFNgfprpaeVlv<-* Dl+++ +GAY++s++s++N++ rpa+V+v sp|Q9X5M1| 420 DLIGVAATGAYCYSMSSRYNLLCRPAVVAV 449 sp|Q9KLD1|SPEA_VIBCH: domain 1 of 1, from 354 to 570: score 114.4, E = 1.9e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+tnVig+ + ++ + ++ + + ++ ++ ++ +++++++ sp|Q9KLD1| 354 VLITNVIGTEAYSPeeipapgadapmllknmwrgfeevqhgtddral 400 CS .................................................. + ++++++ ++ +++ ++ + +++ ++ + + ++ +++ ++++ sp|Q9KLD1| 401 ieiyndtqsdlseahsqfatgvlnlehrawaeqlslriyhelrqkmsnkn 450 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ ld+l+erla+ ++++++++slpd +++d+++p+lp+s l+e + sp|Q9KLD1| 451 rfhRPILDeLQERLADKFFVNFSLFQSLPDAWGIDQVFPVLPLSGLEEMN 500 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++ + tCds++ + ++ ++++ + +LP++ ++ + +l++ff++GA sp|Q9KLD1| 501 DRRAVMLDITCDSDGAVEQYvegqgiESTLPVPaWTSDKPYLMGFFLVGA 550 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f+++ +v sp|Q9KLD1| 551 YQEILGDMHNLFGDTHSAVV 570 sp|Q8XCX9|SPEA_ECO57: domain 1 of 1, from 371 to 587: score 114.2, E = 2.2e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv +++++ ++ + ++ ++ ++ ++ ++ ++++++++ sp|Q8XCX9| 371 VLVSNIIGVERNEYtvptapaedapralqsmwetwqemhepgtrrsl 417 CS .................................................. ++ ++++ + ++ + + ++++ + +++ ++ + ++ +++ ++++ sp|Q8XCX9| 418 rewlhdsqmdlhdihigyssgtfslqerawaeqlylsmchevqkqldpqn 467 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|Q8XCX9| 468 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 517 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|Q8XCX9| 518 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 566 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|Q8XCX9| 567 AYQEILGNMHNLFGDTEAVDV 587 sp|B5YQD6|SPEA_ECO5E: domain 1 of 1, from 345 to 561: score 114.2, E = 2.2e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv +++++ ++ + ++ ++ ++ ++ ++ ++++++++ sp|B5YQD6| 345 VLVSNIIGVERNEYtvptapaedapralqsmwetwqemhepgtrrsl 391 CS .................................................. ++ ++++ + ++ + + ++++ + +++ ++ + ++ +++ ++++ sp|B5YQD6| 392 rewlhdsqmdlhdihigyssgtfslqerawaeqlylsmchevqkqldpqn 441 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|B5YQD6| 442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|B5YQD6| 492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|B5YQD6| 541 AYQEILGNMHNLFGDTEAVDV 561 sp|Q8FE34|SPEA_ECOL6: domain 1 of 1, from 371 to 587: score 114.2, E = 2.2e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv +++++ ++ + ++ ++ ++ ++ ++ ++++++++ sp|Q8FE34| 371 VLVSNIIGVERNEYtvptapaedapralqsmwetwqemhepgtrrsl 417 CS .................................................. ++ ++++ + ++ + + ++++ + +++ ++ + ++ +++ ++++ sp|Q8FE34| 418 rewlhdsqmdlhdihigyssgtfslqerawaeqlylsmchevqkqldpqn 467 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|Q8FE34| 468 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 517 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|Q8FE34| 518 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 566 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|Q8FE34| 567 AYQEILGNMHNLFGDTEAVDV 587 sp|B1LDE8|SPEA_ECOSM: domain 1 of 1, from 345 to 561: score 114.2, E = 2.2e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv +++++ ++ + ++ ++ ++ ++ ++ ++++++++ sp|B1LDE8| 345 VLVSNIIGVERNEYtvptapaedapralqsmwetwqemhepgtrrsl 391 CS .................................................. ++ ++++ + ++ + + ++++ + +++ ++ + ++ +++ ++++ sp|B1LDE8| 392 rewlhdsqmdlhdihigyssgtfslqerawaeqlylsmchevqkqldpqn 441 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|B1LDE8| 442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|B1LDE8| 492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|B1LDE8| 541 AYQEILGNMHNLFGDTEAVDV 561 sp|Q0T0V3|SPEA_SHIF8: domain 1 of 1, from 345 to 561: score 113.9, E = 2.6e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv +++++ ++ + ++ ++ ++ ++ ++ ++++++++ sp|Q0T0V3| 345 VLVSNIIGVERNEYtvptapvedapralqsmwetwqemhepgtrrsl 391 CS .................................................. ++ ++++ + ++ + + ++++ + +++ ++ + ++ +++ ++++ sp|Q0T0V3| 392 rewlhdsqmdlhdihigyssgtfslqerawaeqlylsmchevqkqldpqn 441 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|Q0T0V3| 442 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 491 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|Q0T0V3| 492 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 540 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|Q0T0V3| 541 AYQEILGNMHNLFGDTEAVDV 561 sp|Q83Q93|SPEA_SHIFL: domain 1 of 1, from 371 to 587: score 113.9, E = 2.6e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv +++++ ++ + ++ ++ ++ ++ ++ ++++++++ sp|Q83Q93| 371 VLVSNIIGVERNEYtvptapvedapralqsmwetwqemhepgtrrsl 417 CS .................................................. ++ ++++ + ++ + + ++++ + +++ ++ + ++ +++ ++++ sp|Q83Q93| 418 rewlhdsqmdlhdihigyssgtfslqerawaeqlylsmchevqkqldpqn 467 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|Q83Q93| 468 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 517 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|Q83Q93| 518 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 566 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|Q83Q93| 567 AYQEILGNMHNLFGDTEAVDV 587 sp|B9M6H6|SPEA_GEOSF: domain 1 of 1, from 346 to 561: score 113.6, E = 3.3e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +LvtnV+ + + + +++ +++ ++ ++ ++ + +++ ++ + sp|B9M6H6| 346 VLVTNVLNTNTQRLtpdfeeelaaaeklaptvkklvdihksidrysl 392 CS .................................................. +++ +++ + ++ + + + + +++ + ++ ++ ++ ++ + sp|B9M6H6| 393 redyhdtvqliqeavslfnlgyltlneramaewlygkiikkinsivekik 442 CS S-E........EEEEES----S-.-CHHHHS----EEEC ...........drkldlnerlafvyylddGvygslpdpalydalhpilpv + +++ ++ + + + +y+ ++++++s+pd++++d+l+pi+p+ sp|B9M6H6| 443 pipeelqnfqlALR--------QTYFANFSLFQSIPDSWAIDQLFPIVPI 484 CS SS-TTSSEEEEEEE-----TT--SEE. EEEEE.. .------EE srldeeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDll +rl++ p++ +++a+ tCds++ + F ++++++ LPlH+ + ++++++ sp|B9M6H6| 485 QRLNQKPDVIASIADITCDSDGEITSFvgengrTKFLPLHkIRKDEDYYI 534 CS EES-----SGCC-B-TTT--.-EEEEE vffdaGAYteslasnFNgfprpaeVlv<-* +ff+ GAY+e+l++++N+f++++ V++ sp|B9M6H6| 535 GFFLIGAYQEILGDMHNLFGDTNAVHI 561 sp|P21170|SPEA_ECOLI: domain 1 of 1, from 371 to 587: score 113.6, E = 3.4e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+n+igv +++++ ++ + ++ ++ ++ ++ ++ ++++++++ sp|P21170| 371 VLVSNIIGVERNEYtvptapaedapralqsmwetwqemhepgtrrsl 417 CS .................................................. ++ ++++ + ++ + + +++ + +++ ++ + ++ +++ ++++ sp|P21170| 418 rewlhdsqmdlhdihigyssgifslqerawaeqlylsmchevqkqldpqn 467 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++s+pd +++d+l+p+lp++ ld+ p sp|P21170| 468 rahRPIIDeLQERMADKMYVNFSLFQSMPDAWGIDQLFPVLPLEGLDQVP 517 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds++ ++++ ++++ ++ ++P+ +++e+ l+ff +G sp|P21170| 518 ERRAVLLDITCDSDGAIDHYidgdgiatTMPMPE-YDPENPPMLGFFMVG 566 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|P21170| 567 AYQEILGNMHNLFGDTEAVDV 587 sp|B5EIW4|SPEA_GEOBB: domain 1 of 1, from 425 to 561: score 112.8, E = 5.7e-29 CS EEEEEEEEEEE--S S-E........EEEEES- *->tLvtnVigvkergg...............drkldlnerlafvyyldd ++ +++i + ++ ++ +++ ++ + + +y+ ++ sp|B5EIW4| 425 WICSKIIRKINSIVekmkpipdelqnfqlSLR--------QTYFANF 463 CS ---S-.-CHHHHS----EEECSS-TTSSEEEEEEE-----TT--SEE. GvygslpdpalydalhpilpvsrldeeptepvtlaGPtCdsgDvlarF.. ++++s+pd++++d+l+pi+p++rlde p++ +++a+ tCds++ + F + sp|B5EIW4| 464 SLFQSIPDSWAIDQLFPIVPIQRLDEKPDVLTSIADITCDSDGEITSFvg 513 CS EEEEE.. .------EEEES-----SGCC-B-TTT--.-EEEEE ....dvsLPlH.lelevGDllvffdaGAYteslasnFNgfprpaeVlv<- +++++ +LPlH+ ++++ ++++ff+ GAY+e+l++++N+f++++ V++ sp|B5EIW4| 514 engrTKALPLHkIKVDEQYYIGFFLIGAYQEILGDMHNLFGDTNAVHI 561 CS * sp|B5EIW4| - - sp|C6E3V4|SPEA_GEOSM: domain 1 of 1, from 425 to 561: score 112.8, E = 5.7e-29 CS EEEEEEEEEEE--S S-E........EEEEES- *->tLvtnVigvkergg...............drkldlnerlafvyyldd ++ +++i + ++ ++ +++ ++ + + +y+ ++ sp|C6E3V4| 425 WICSKIIRKINSIVekmkpipdelqnfqlSLR--------QTYFANF 463 CS ---S-.-CHHHHS----EEECSS-TTSSEEEEEEE-----TT--SEE. GvygslpdpalydalhpilpvsrldeeptepvtlaGPtCdsgDvlarF.. ++++s+pd++++d+l+pi+p++rlde p++ +++a+ tCds++ + F + sp|C6E3V4| 464 SLFQSIPDSWAIDQLFPIVPIQRLDEKPDVLTSIADITCDSDGEITSFvg 513 CS EEEEE.. .------EEEES-----SGCC-B-TTT--.-EEEEE ....dvsLPlH.lelevGDllvffdaGAYteslasnFNgfprpaeVlv<- +++++ +LPlH+ ++++ ++++ff+ GAY+e+l++++N+f++++ V++ sp|C6E3V4| 514 engrTKALPLHkIKVDEQYYIGFFLIGAYQEILGDMHNLFGDTNAVHI 561 CS * sp|C6E3V4| - - sp|A1AS90|SPEA_PELPD: domain 1 of 1, from 425 to 561: score 112.3, E = 8.2e-29 CS EEEEEEEEEEE--S S-E........EEEEES- *->tLvtnVigvkergg...............drkldlnerlafvyyldd +L t++i + + ++ ++ +++ ++ + + +y+ ++ sp|A1AS90| 425 WLYTRIIKKINNLVekmkpvpeelqnfklSMR--------QTYFANF 463 CS ---S-.-CHHHHS----EEECSS-TTSSEEEEEEE-----TT--SEE. GvygslpdpalydalhpilpvsrldeeptepvtlaGPtCdsgDvlarF.. ++++s+pd++++d+l+pi+p++rl e p++ +++a+ tCds++ + F + sp|A1AS90| 464 SLFQSIPDSWAIDQLFPIMPIQRLGEKPDVIASIADITCDSDGEITSFvg 513 CS EEEEE.. .------EEEES-----SGCC-B-TTT--.-EEEEE ....dvsLPlH.lelevGDllvffdaGAYteslasnFNgfprpaeVlv<- +++++ +LPlH+ + ++ ++++ff+ GAY+e+l++ +N+f++++ V++ sp|A1AS90| 514 engrTKYLPLHkIRKNEEYYIGFFLIGAYQEILGDLHNLFGDTNAVHI 561 CS * sp|A1AS90| - - sp|A2BU00|SPEA_PROM5: domain 1 of 1, from 355 to 574: score 112.2, E = 8.6e-29 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++ V+g+++++ + + +++++++ ++ +++++ ++ ++++++ sp|A2BU00| 355 VLIFDVLGTSHVSSqikvshqkktsliiknlidthnqlknlrnkked 401 CS .................................................. ++ + ++ ++ +++ + + + +++ ++ + ++ +++ sp|A2BU00| 402 lseiielwndakkfkkdclvafrlgfislgerayaeeltwacakeisshl 451 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld ++++ +++l++++e l +yy + +v+ s+pd++++++++pi+p++r+ sp|A2BU00| 452 dnekiiHPDLSeITETLSSTYYANLSVFKSIPDTWAINQIFPIIPIHRHL 501 CS TSSEEEEEEE-----TT--SEE. EEEEE.. .------EEEES- eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd eep ++ +a+ tCds+++l++F ++++ + +L lH++e ++++l+++f sp|A2BU00| 502 EEPICKGNFADLTCDSDGKLNNFidngkiKSLLNLHrPEENNDYLIGIFM 551 CS ----SGCC-B-TTT--.-EEEEE aGAYteslasnFNgfprpaeVlv<-* aGAY+e+l++ +N+f+ ++++++ sp|A2BU00| 552 AGAYQEALGNFHNLFGNTNVIHI 574 sp|Q8RQM6|DCDA_COREF: domain 1 of 1, from 324 to 437: score 109.3, E = 6.4e-28 CS EEEEEEEEEEE--S S-E........EEEEES----S-.-CHHH *->tLvtnVigvkergg....drkldlnerlafvyylddGvygslpdpal + v++V ++k+++ ++++ r+ ++ +d+G++++ ++pal sp|Q8RQM6| 324 VTVYEVGTIKDVDVddetTRR--------YIS-VDGGMSDN-IRPAL 360 CS HS----EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...----- ydalhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevG y+a + ++vsr e++t + ++G +C+sgD+l + + + P +++ G sp|Q8RQM6| 361 YGAEYDARVVSRFTEGETTNTRVVGSHCESGDILIN-EATYPS--DIHTG 407 CS -EEEES-----SGCC-B-TTT--.-EEEEE DllvffdaGAYteslasnFNgfprpaeVlv<-* Dll+ +GAY+++++s++N f rpa+V v sp|Q8RQM6| 408 DLLALAATGAYCYAMSSRYNAFARPAVVSV 437 sp|B4F1A4|SPEA_PROMH: domain 1 of 1, from 347 to 563: score 108.8, E = 8.9e-28 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++nVigv +++ + +++ ++ +++ + ++ ++ ++++++++ sp|B4F1A4| 347 VLISNVIGVERNEFtaitppaedaprpiaslwetweemqtkgnsrsl 393 CS .................................................. ++ ++++ + ++ +++ ++ + +++ ++ + ++ + + ++++ sp|B4F1A4| 394 rewlhdsqldlhdvhtqyvhgmlslterawaeelylnicrhiqydldpsn 443 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+ + y+++++++slpd +++d+l+p+lp++ ld sp|B4F1A4| 444 rahRPIIDeLQERMSDKFYVNFSLFQSLPDAWGIDQLFPVLPIEGLDKPL 493 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA +++++l + tCds+++++++ ++++ + ++P + +++e ++ff +GA sp|B4F1A4| 494 DRRAVLLDITCDSDGIIDHYvdgdgvETTMPMPaYDPEYPPMIGFFMVGA 543 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f+++a V v sp|B4F1A4| 544 YQEILGNMHNLFGDTAAVDV 563 sp|P74576|SPEA1_SYNY3: domain 1 of 1, from 396 to 615: score 108.1, E = 1.5e-27 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L++ V+++ +++ + ++ +++++ ++ ++ ++ + ++ ++ + sp|P74576| 396 VLIFDVVATNDINPplpkvkgkdhailrnlmetwetitvdnyqeayh 442 CS S-E ...............................................drk + ++ +++ + + + + +++ + ++ ++ + ++++ +++ sp|P74576| 443 dveqfkteaislfnfgylglkerakaeelywaccrkilqicrqqeyvPDD 492 CS .. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEEE ld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvtl l++l+ +la +yy + +v++s pd++++d+l+pi+p++rldeept++ +l sp|P74576| 493 LEnLEVNLASIYYANMSVFQSAPDSWAIDQLFPIMPIHRLDEEPTQRGIL 542 CS E-----TT--SEE. EEEEE.. .------EEEES aGPtCdsgDvlarF......dvsLPlH...........lelevGDllvff a+ tCds++++++F + ++ + L lH+ + +++++++++e+ ++l++f sp|P74576| 543 ADITCDSDGKIDQFidlrdvKSVLELHplievhqpgtpPRVEP-YYLGMF 591 CS -----SGCC-B-TTT--.-EEEEE daGAYteslasnFNgfprpaeVlv<-* ++GAY+e++++ +N+f++ ++V++ sp|P74576| 592 LVGAYQEIMGNLHNLFGDINVVHI 615 sp|A5GB52|SPEA_GEOUR: domain 1 of 1, from 346 to 561: score 107.3, E = 2.6e-27 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +LvtnV+ + + + ++ + + ++ ++ ++ ++ ++ ++ ++ + sp|A5GB52| 346 VLVTNVLNTNTQNImpdfeatlneaeklaptvkklediyksidrysl 392 CS .................................................. +++ +++ + ++ + + + + +++ + ++ ++ ++ ++ + sp|A5GB52| 393 redyhdtlqliqeavslfnlgyltlndramaewlygkiirkinsivekik 442 CS S-E........EEEEES----S-.-CHHHHS----EEEC ...........drkldlnerlafvyylddGvygslpdpalydalhpilpv + +++ ++ + + +y+ ++++++s pd++++d+l+pi+p+ sp|A5GB52| 443 pipeelqnfqlSLR--------QTYFANFSLFQSVPDSWAIDQLFPIVPI 484 CS SS-TTSSEEEEEEE-----TT--SEE. EEEEE.. .------EE srldeeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDll +rl++ p++ +++a+ tCds++ + F ++++++ LPlH+ + ++ +++ sp|A5GB52| 485 QRLNQKPDVIASIADITCDSDGEITSFvgengrTKFLPLHkIRKDEAYYI 534 CS EES-----SGCC-B-TTT--.-EEEEE vffdaGAYteslasnFNgfprpaeVlv<-* +ff+ GAY+e+l++++N+f++++ V++ sp|A5GB52| 535 GFFLIGAYQEILGDMHNLFGDTNAVHI 561 sp|Q7U3S0|SPEA_SYNPX: domain 1 of 1, from 351 to 570: score 107.1, E = 2.9e-27 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. Lv+ V+g + ++ + ++ +++++ + ++ +++ + ++ +++ + + sp|Q7U3S0| 351 LLVFDVLGSSALSAsipnasgdepltvrnlrdtlvtiqelsgtadaq 397 CS .................................................. + ++ ++ + +++ + + + +++ + ++ + + ++ sp|Q7U3S0| 398 lvrlqeawndalkfkqdalaafrlgymglpdrasaeqltwacadaiaqrl 447 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld ++++ ++ l+ l+++la +yy + +++ s pd++++d+l+p++p+++l+ sp|Q7U3S0| 448 pkeqaiPEELAaLSKALAGTYYANLSIFRSAPDTWAIDQLFPVVPIQKLN 497 CS TSSEEEEEEE-----TT--SEE. EEEEE.. .------EEEES- eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd + pt+ + la+ tCds++ l+rF ++++++++L lH+l+ ++ +l++ f+ sp|Q7U3S0| 498 QRPTRLANLADLTCDSDGRLDRFigdgqpKQLLELHeLDDNNPYLIGLFL 547 CS ----SGCC-B-TTT--.-EEEEE aGAYteslasnFNgfprpaeVlv<-* GAY+e++++ +N+f+ ++ V++ sp|Q7U3S0| 548 SGAYQEVMGNLHNLFGTTNAVHI 570 sp|A0A4W3|SPEA_GEOSL: domain 1 of 1, from 425 to 561: score 106.7, E = 3.9e-27 CS EEEEEEEEEEE--S S-E........EEEEES *->tLvtnVigvkergg................drkldlnerlafvyyld +L +++ + g ++ ++ +++ ++ + + +y+ + sp|A0A4W3| 425 WLHGKILRKIN-GIvekikpipeelqnfqlSLR--------QTYFAN 462 CS ----S-.-CHHHHS----EEECSS-TTSSEEEEEEE-----TT--SEE. dGvygslpdpalydalhpilpvsrldeeptepvtlaGPtCdsgDvlarF. +++++s+pd++++d+l+pi+p++rl++ p++ +++a+ tCds++ + F sp|A0A4W3| 463 FSLFQSIPDSWAIDQLFPIVPIQRLNQKPDVMASIADITCDSDGEITSFv 512 CS EEEEE.. .------EEEES-----SGCC-B-TTT--.-EEEEE .....dvsLPlH.lelevGDllvffdaGAYteslasnFNgfprpaeVlv< ++++++ +LPlH+ + +++++++ff+ GAY+e+l++++N+f++++ V+v sp|A0A4W3| 513 gengrTKYLPLHkMRKDEDYFVGFFLIGAYQEILGDMHNLFGDTNAVHV 561 CS -* sp|A0A4W3| - - sp|Q39X78|SPEA_GEOMG: domain 1 of 1, from 425 to 561: score 106.4, E = 4.8e-27 CS EEEEEEEEEEE--S S-E........EEEEES *->tLvtnVigvkergg................drkldlnerlafvyyld +L +++ + g ++ ++ +++ ++ + + +y+ + sp|Q39X78| 425 WLHGKILRKIN-GIvekikpipeelqnfqlSLR--------QTYFAN 462 CS ----S-.-CHHHHS----EEECSS-TTSSEEEEEEE-----TT--SEE. dGvygslpdpalydalhpilpvsrldeeptepvtlaGPtCdsgDvlarF. +++++s+pd++++d+l+pi+p++rl++ p++ +++a+ tCds++ + F sp|Q39X78| 463 FSLFQSIPDSWAIDQLFPIVPIQRLNQKPDVMASIADITCDSDGEITSFv 512 CS EEEEE.. .------EEEES-----SGCC-B-TTT--.-EEEEE .....dvsLPlH.lelevGDllvffdaGAYteslasnFNgfprpaeVlv< ++++++ +LPlH+ + +++++++ff+ GAY+e+l++++N+f++++ V+v sp|Q39X78| 513 gengrTKYLPLHkIRKDEDYFVGFFLIGAYQEILGDMHNLFGDTNAVHV 561 CS -* sp|Q39X78| - - sp|A1TY02|SPEA_MARAV: domain 1 of 1, from 350 to 566: score 106.3, E = 5e-27 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +LvtnVi++ +++++++++ + + + ++ ++ ++ ++++++++ sp|A1TY02| 350 VLVTNVIDREY-PDnreptepaaeapaplqdlwrdleslqdedsprs 395 CS .................................................. + ++ + + + + ++ + +++ + ++ + + + + ++ sp|A1TY02| 396 laeiyhdilhamadvhaqfahgllslqeraqaetlyvrccrmlraeldsa 445 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTS ....drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldee ++ +++ +d+lne+la ++++++++slpd +++d+++p++p++ l+++ sp|A1TY02| 446 nrahREIIDeLNEKLAEKLFVNFSLFQSLPDVWGIDQIFPVMPINGLNRS 495 CS SEEEEEEE-----TT--SEE. EEEEE.. .------EEEES--- ptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaG +++++ + tCds++ ++++ ++++ + +LPl++ ++e l++ff +G sp|A1TY02| 496 LNRRAVIQDITCDSDGRIDQYvdgqgiETTLPLPeHDPESPLLMGFFMTG 545 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++ V v sp|A1TY02| 546 AYQEILGDMHNLFGDTHSVDV 566 sp|Q9RXR4|SPEA_DEIRA: domain 1 of 1, from 372 to 586: score 106.0, E = 6.4e-27 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+ V++v + + ++++ + +++++++ ++ ++ ++ + ++ sp|Q9RXR4| 372 VLILPVVDVTGPTRnledqeltvpgedshqivrdmyetlenismrny 418 CS .................................................. +++ ++ +++++ ++ + + + +++ +++ + ++ + ++++ sp|Q9RXR4| 419 resyndavgdkqtlhnlfdlgyvtledrargealfnailrkiakliqgek 468 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSE ..drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeept ++ l++l++ la+ ++++++++slpd ++++al+pi+p++rl+e+pt sp|Q9RXR4| 469 yvPDELEdLQKVLADKFICNFSLFQSLPDNWAIGALFPIVPLDRLNEQPT 518 CS EEEEEE-----TT--SEE. EEEEE...------EEEES-----S epvtlaGPtCdsgDvlarF......dvsLPlHlelevGDllvffdaGAYt + +tl++ tCds++++ +F + ++ + +LPlH + ++ ++l+ f++GAY+ sp|Q9RXR4| 519 RQATLVDITCDSDGKVEKFidlrdvKATLPLHEPGDRPYYLGAFLMGAYQ 568 CS GCC-B-TTT--.-EEEEE eslasnFNgfprpaeVlv<-* +l+s +N+f+ +e +v sp|Q9RXR4| 569 DVLGSAHNLFGKVSEAHV 586 sp|P09890|DCDA_CORGL: domain 1 of 1, from 310 to 423: score 105.3, E = 1e-26 CS EEEEEEEEEEE--S S-E........EEEEES----S-.-CHHH *->tLvtnVigvkergg....drkldlnerlafvyylddGvygslpdpal + +++V ++k+++ ++++ r+ +++ +d+G++++ ++pal sp|P09890| 310 VTIYEVGTTKDVHVdddkTRR--------YIA-VDGGMSDN-IRPAL 346 CS HS----EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...----- ydalhpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevG y+ + ++vsr +e+ +++ ++G +C+sgD+l + d P ++ G sp|P09890| 347 YGSEYDARVVSRFAEGDPVSTRIVGSHCESGDILIN-DEIYPS--DITSG 393 CS -EEEES-----SGCC-B-TTT--.-EEEEE DllvffdaGAYteslasnFNgfprpaeVlv<-* D+l+ +GAY+++++s++N f rpa+V v sp|P09890| 394 DFLALAATGAYCYAMSSRYNAFTRPAVVSV 423 sp|O82475|SPE1_BRAJU: domain 1 of 1, from 390 to 585: score 104.8, E = 1.5e-26 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+++ ++ +r+++++++ + ++ +++ +++ ++ + ++++ sp|O82475| 390 VLIFEAVSAGKRHEttpsdlqfllegyseeargdyenlydavmrgdr 436 CS S-E.. .............................................drkld ++ ++ +++ ++ ++++ + ++ + ++ + +++ +++d++ sp|O82475| 437 escllyvdqlkqrcveefkegslsieqlagvdglcewvtkeiggsDPV-- 484 CS ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEEEE-- lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvtlaGP +y ++ +v++s+pd +++d+l+pi+p++rld+ p ++ +l + sp|O82475| 485 ------LTYNVNLSVFHSIPDFWGIDQLFPIVPIHRLDQRPVARGILSDL 528 CS ---TT--SEE. EEEEE...------EEEES-----SGCC-B-TTT-- tCdsgDvlarF...dvsLPlHlelevGDllvffdaGAYteslasnFNgfp tCds++++++F +++ sLPlH ++G++l++f+ GAY e+l+ +N+f+ sp|O82475| 529 TCDSDGKINKFiggESSLPLHELDNNGYYLGMFLGGAYEEALGGVHNLFG 578 CS .-EEEEE rpaeVlv<-* p++V v sp|O82475| 579 GPSVVRV 585 sp|Q39827|SPE1_SOYBN: domain 1 of 1, from 401 to 596: score 104.7, E = 1.6e-26 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+++ +g+++ +g++ ++ + + ++ +++ + ++ +++ + sp|Q39827| 401 VLIFEAVGTSSTNGggappalsahylaeelsedygylselafrgdye 447 CS S-E... ............................................drkldl + +++ +++ ++ ++++ ++ ++ + ++ + + + sp|Q39827| 448 tclvyteemkercveqfkqgtvcmeqlaaveglcelvrkavgaaESV--- 494 CS .....EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEEEE--- nerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvtlaGPt y+++ ++++s pd +++++++pi+p++rlde p ++ +l + t sp|Q39827| 495 -----RRYHVNLSIFTSVPDAWGIEQVFPIIPIHRLDEKPSVRGILSDLT 539 CS --TT--SEE. EEEEE.. .------EEEES-----SGCC-B-TTT-- CdsgDvlarF...dvsLPlH.lelevGDllvffdaGAYteslasnFNgfp Cds++++++F +++ sLPlH+ e + ++l++f+ GAY e+l+ +N+f+ sp|Q39827| 540 CDSDGKIDKFingESSLPLHeMEGGRTYYLGMFLGGAYEEALGGVHNLFG 589 CS .-EEEEE rpaeVlv<-* p++V v sp|Q39827| 590 GPSVVRV 596 sp|Q7N121|SPEA_PHOLL: domain 1 of 1, from 347 to 563: score 104.7, E = 1.6e-26 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+nVigv +++ ++++++ ++ +++ ++ ++ ++ ++++++++ sp|Q7N121| 347 VLVSNVIGVERNEFtqttppaedasrpltslwetwqemhsegnrrsl 393 CS .................................................. +++ ++++ + ++ +++ ++ + +++ ++ + ++ +++ ++++ sp|Q7N121| 394 reslhdgqldlhdvhtqyahgmldlterawaeelylnicrriqqdldpsn 443 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ...drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep + +++ +d+l+er+a+ y+++++++slpd +++d+l+p+lp++ ld sp|Q7N121| 444 rahRPIIDeLQERMADKFYVNFSLFQSLPDAWGIDQLFPVLPIEGLDKPL 493 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds+++++++ ++++ + ++P ++++ ++ff +G sp|Q7N121| 494 DRRAVLLDITCDSDGIVDHYvdgdgvaaTMPMPA-YDPDCPPMIGFFMVG 542 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++a + v sp|Q7N121| 543 AYQEILGNMHNLFGDTAAIDV 563 sp|B3EAF3|SPEA_GEOLS: domain 1 of 1, from 346 to 561: score 104.5, E = 1.8e-26 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +LvtnV+ + + + ++ ++ ++ +++ ++ ++ + ++ ++ + sp|B3EAF3| 346 VLVTNVLNTNTQNLmpdyeqileemekpaptvkklldiyksidrysl 392 CS .................................................. +++ +++ + ++ + + + + +++ + ++ ++ ++ ++ + sp|B3EAF3| 393 redyhdtlqlineavslfnlgyltlqdraiaewlyskiikkinsivekik 442 CS S-E........EEEEES----S-.-CHHHHS----EEEC ...........drkldlnerlafvyylddGvygslpdpalydalhpilpv + +++ ++ + + + +y+ ++++++s+pd++++d+l+pi+p+ sp|B3EAF3| 443 pipeelqnfqlALR--------QTYFANFSLFQSIPDSWAIDQLFPIMPL 484 CS SS-TTSSEEEEEEE-----TT--SEE. EEEEE.. .------EE srldeeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDll +rl + p++ +++a+ tCds++ + F +++++ LP H+l+ ++++++ sp|B3EAF3| 485 QRLGQRPDVMASIADITCDSDGEITSFvgengrSKFLPMHkLKKDEDYYI 534 CS EES-----SGCC-B-TTT--.-EEEEE vffdaGAYteslasnFNgfprpaeVlv<-* +ff+ GAY+e+l++ +N+f++++ V++ sp|B3EAF3| 535 GFFLIGAYQEILGDLHNLFGDTNAVHI 561 sp|A5GWM2|SPEA_SYNR3: domain 1 of 1, from 355 to 566: score 104.5, E = 1.8e-26 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+nV+g + ++ ++ ++ +++ ++ +++ ++ ++++ ++ sp|A5GWM2| 355 VLVFNVLGQSGVNQpsipeavegealivrnlretlsgigpdnlqeaw 401 CS .................................................. ++ + +++ + + + +++++ ++ + + +++++ ++ sp|A5GWM2| 402 ndalkfkddalaafrlgylsltergkaeqlywaccsaiadllpgeeelpd 451 CS S-E........EEEEES----S-.-CHHHHS----EEECSS-T .......drkldlnerlafvyylddGvygslpdpalydalhpilpvsrld + ++ + + +yy + +v+ s pd++++d+l+p++p++rl+ sp|A5GWM2| 452 elkglkaAFA--------STYYANLSVFRSAPDTWAIDQLFPVMPIHRLE 493 CS TSSEEEEEEE-----TT--SEE. EEEEE.. .------EEEES- eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd e+p+e ++a+ tCds+++larF +++ + +L lH+l+ + ++++ f+ sp|A5GWM2| 494 EQPRELGSFADLTCDSDGKLARFiasgsaKPLLELHeLKDGEPYWIGLFL 543 CS ----SGCC-B-TTT--.-EEEEE aGAYteslasnFNgfprpaeVlv<-* GAY+e++++ +N+f+ ++ V + sp|A5GWM2| 544 GGAYQEVMGNLHNLFGSTNAVSI 566 sp|Q7UTS2|SPEA_RHOBA: domain 1 of 1, from 460 to 592: score 104.0, E = 2.5e-26 CS EEEEEEEEEEE--S S-E.. ......EEEEES----S-.-CHHHH *->tLvtnVigvkergg..drkld.lnerlafvyylddGvygslpdpaly + +V e +++++l++l++ l ++y+ ++++++s+pd++++ sp|Q7UTS2| 460 AICHRVRELAESMKerPDDLKhLDRMLSDIYFANFSLFQSMPDSWAI 506 CS S----EEECSS-TTSSEEEEEEE-----TT--SEE. EEEEE.. dalhpilpvsrldeeptepvtlaGPtCdsgDvlarF......dvsLPlH. d+l+pi+p++rl e p + ++l + tCds+++++ F +++++++L lH+ sp|Q7UTS2| 507 DQLFPIMPIHRLLEKPSRHAVLGDITCDSDGKVDAFvcgggrQRTLMLHp 556 CS .------EEEES-----SGCC-B-TTT--.-EEEEE lelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* l+ + + l++f +GAY+e+l++ +N+f+++ V+v sp|Q7UTS2| 557 LKSGEPYQLAVFMVGAYQEILGDLHNLFGDTHAVHV 592 sp|Q9KCM5|DCDA_BACHD: domain 1 of 1, from 301 to 409: score 103.8, E = 3e-26 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal t ++++ ++ke++ r ++ +d+G++++ ++paly+a sp|Q9KCM5| 301 TTLYTIGSRKEIPNVRH--------YLS-VDGGMSDN-LRPALYQAE 337 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv + ++ +r +e+p +++aG +C+sgD l d +LP e + D+l+ sp|Q9KCM5| 338 YEGALANRVNEQPVGMFSVAGKCCESGDMLIW-DLPLP---EANHEDILA 383 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* +f +GAY++s+a+n+N +prp++V+v sp|Q9KCM5| 384 VFCTGAYGYSMANNYNRIPRPPVVFV 409 sp|Q96A70|ADC_HUMAN: domain 1 of 1, from 286 to 409: score 103.7, E = 3.1e-26 CS EEEEEEEEEEE--S S-E........EEEEES---- *->tLvtnVigvkergg............drkldlnerlafvyylddGvy t+++++i++ke+ ++++++++++++ ++ +vy+ld Gvy sp|Q96A70| 286 TVAVSIIAKKEVLLdqpgreeengstSKT--------IVYHLDEGVY 324 CS S-.-CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEE gslpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvs g ++++l+d + p +++++++ e+p+++++l+GP d+ D++a+ + sp|Q96A70| 325 GI-FNSVLFDNICPTPILQKkpSTEQPLYSSSLWGPAVDGCDCVAE-GLW 372 CS EE...------EEEES-----SGCC-B-TTT--.-EEEEE LPlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* LP l+vGD+lvf ++GAYt ++s F g + + + + sp|Q96A70| 373 LP---QLHVGDWLVFDNMGAYTVGMGSPFWGTQACHITYA 409 sp|Q43075|SPE1_PEA: domain 1 of 1, from 494 to 609: score 102.6, E = 6.5e-26 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal L+t+ igvk+ ++ y+++ +v++s pd +++++l sp|Q43075| 494 DLITETIGVKD----PV--------KKYHVNLSVFTSVPDFWGINQL 528 CS --EEECSS-TTSSEEEEEEE-----TT--SEE. EEEEE.. .---- hpilpvsrldeeptepvtlaGPtCdsgDvlarF...dvsLPlH..lelev +pi+p++rlde pt++ +l + tCds++++++F +++ sLPlH+ + sp|Q43075| 529 FPIVPIHRLDEKPTARGILSDLTCDSDGKIDKFiggESSLPLHemEGHGG 578 CS --EEEES-----SGCC-B-TTT--.-EEEEE GDllvffdaGAYteslasnFNgfprpaeVlv<-* G++l++f+ G Y e+l+ +N+f+ p++V v sp|Q43075| 579 GYYLGMFLGGSYEEALGGLHNLFGGPSVVRV 609 sp|P72587|SPEA2_SYNY3: domain 1 of 1, from 375 to 587: score 100.6, E = 2.6e-25 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+ V+g +g +++++++++ ++ ++ + ++ + ++ +++ sp|P72587| 375 VLVFDVLGSNQ-TGfsephppdenahpllknlwecyetitaeqyqeq 420 CS S .................................................d ++ + +++ ++ + + + +++++ ++ + ++ + +++ + + sp|P72587| 421 yhdalqlkteasslfnfgylsltergqaeqihwaccrkifeitrqleyiP 470 CS -E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEE rkld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepv +++ l++ ++++yy++ +v++s p ++ d+l+pilp++ l+e p ++v sp|P72587| 471 EDFQaLDKIMTDIYYVNLSVFQSAPESWSLDQLFPILPIHHLNEKPSQRV 520 CS EEE-----TT--SEE. EEEEE.. .------EEEES-----SG tlaGPtCdsgDvlarF......dvsLPlH..lelevGDllvffdaGAYte +la+ tCds+++++rF + + + +L +H+ + ++l++f++GAY+e sp|P72587| 521 ILADLTCDSDGKIDRFidlwdvKSYLEVHplENDGNPYYLGMFLVGAYQE 570 CS CC-B-TTT--.-EEEEE slasnFNgfprpaeVlv<-* ++++ +N+f++ ++V++ sp|P72587| 571 IMGNLHNLFGDINVVHI 587 sp|Q7TUJ9|SPEA_PROMM: domain 1 of 1, from 355 to 574: score 100.2, E = 3.7e-25 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+ V+g+ +++g ++++ +++ + ++ +++ ++ ++++ ++ sp|Q7TUJ9| 355 ILVFDVLGTGTVPGaipkqtveepltihnlretlsgvmatqkgavse 401 CS .................................................. ++ ++ ++ + +++ + + + +++ ++ ++ + ++ sp|Q7TUJ9| 402 isrlqeawndaikfkedalaafrlgyislperalaeqltgacaeaimgql 451 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld + +++ +++l +l la +yy + +++ s pd++++++l+p +p++rl+ sp|Q7TUJ9| 452 pcnetiPDDLQsLRAVLASTYYANLSIFRSAPDTWAIEQLFPLMPIHRLN 501 CS TSSEEEEEEE-----TT--SEE. EEEEE.. .------EEEES- eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd eept+ +a+ tCds+++l+rF ++++++ +L lH+l+ ++ + +++f+ sp|Q7TUJ9| 502 EEPTQLGHFADLTCDSDGKLDRFigngqtKTLLELHnLRQNEAYMIGMFL 551 CS ----SGCC-B-TTT--.-EEEEE aGAYteslasnFNgfprpaeVlv<-* aGAY+e++++ +N+f+ ++ V++ sp|Q7TUJ9| 552 AGAYQEVMGNLHNLFGSTNAVHI 574 sp|P49726|SPE1_SOLLC: domain 1 of 1, from 291 to 492: score 98.7, E = 1e-24 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+++ ++ ++ + ++++++++ ++ ++ +++ + + ++ + + sp|P49726| 291 ILIFEAVSASTSHVstqpssgglqslvetlnedaradyrnlsaaavr 337 CS S- ................................................dr ++ ++ +++ +++ ++ ++++ + ++ ++ + ++ + d+ sp|P49726| 338 geydtcliysdqlkqrcveqfkdgsldieqlaavdsicdwvskaigvaDP 387 CS E........EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEEE kldlnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvtl + +y+++ +v++s+pd +++ +l+pi+p++rlde pt + +l sp|P49726| 388 V--------RTYHVNLSVFTSIPDFWGFSQLFPIVPIHRLDEKPTMRGIL 429 CS E-----TT--SEE. EEEEE.. .------EEEES-----SGCC- aGPtCdsgDvlarF...dvsLPlH....lelevGDllvffdaGAYtesla + tCds++++++F +++ sLPlH+ ++++ + ++l++f+ GAY e+l+ sp|P49726| 430 SDLTCDSDGKVDKFiggESSLPLHeigsGDGGR-YYLGMFLGGAYEEALG 478 CS B-TTT--.-EEEEE snFNgfprpaeVlv<-* +N+f+ p++V v sp|P49726| 479 GLHNLFGGPSVVRV 492 sp|Q9PII5|DCDA_CAMJE: domain 1 of 1, from 270 to 375: score 98.5, E = 1.1e-24 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +v++V++ k + ++ fv+ +d+ ++++ ++p ly+a+ sp|Q9PII5| 270 EFVCSVLYEKQNKT-KR--------FVV-VDGAMNDL-IRPSLYEAY 305 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv h i++ +++++ ++++G +C+sgD++a+ +sLP ++ +D++v sp|Q9PII5| 306 HEIILPY--NQGEESLCDVVGGICESGDFFAK-ARSLP---STQSDDIMV 349 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* + ++GAY++s++sn+N + e ++ sp|Q9PII5| 350 IKNTGAYGFSMSSNYNTRNKVCELAL 375 sp|A2CDK1|SPEA_PROM3: domain 1 of 1, from 355 to 574: score 98.1, E = 1.5e-24 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+ V+g+ +++g ++++++++ + ++ +++ + ++++ ++ sp|A2CDK1| 355 ILVFDVLGTGTVPGavpnqtgeepltihnlretlagvmatqkgaase 401 CS .................................................. ++ ++ ++ + +++ + + + +++ ++ + + ++ sp|A2CDK1| 402 isrlqeawndavkfkddalaafrlgyislteralaeqltwacaeaimgql 451 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-T ......drkld.lnerlafvyylddGvygslpdpalydalhpilpvsrld + +++ +++l +l la +yy + +++ s pd++++++l+p +p++rl sp|A2CDK1| 452 pchetiPDDLQgLRAVLAGTYYANLSIFRSAPDTWAIEQLFPLMPIHRLK 501 CS TSSEEEEEEE-----TT--SEE. EEEEE.. .------EEEES- eeptepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffd eept+ +a+ tCds+++l+rF ++++++ +L lH+l+ ++ + +++f+ sp|A2CDK1| 502 EEPTQLGHFADLTCDSDGKLDRFigngqtKTLLELHnLRQNEAYMIGMFL 551 CS ----SGCC-B-TTT--.-EEEEE aGAYteslasnFNgfprpaeVlv<-* aGAY+e++++ +N+f+ ++ V++ sp|A2CDK1| 552 AGAYQEVMGNLHNLFGSTNAVHI 574 sp|Q8BVM4|ADC_MOUSE: domain 1 of 1, from 286 to 408: score 97.9, E = 1.7e-24 CS EEEEEEEEEEE--S S-E........EEEEES----S *->tLvtnVigvkergg...........drkldlnerlafvyylddGvyg t+++++++++e+ ++ +++++++ ++ +vyyld Gvyg sp|Q8BVM4| 286 TVAVSIVAKREVLDqasreeqtgaaPKS--------IVYYLDEGVYG 324 CS -.-CHHHHS----EEECSS -TTSSEEEEEEE-----TT--SEE.EEEE slpdpalydalhpilpvsr..ldeeptepvtlaGPtCdsgDvlarFdvsL ++++l+d + p + +++++ +++p+++++l+GP ++ D++a+ +L sp|Q8BVM4| 325 V-FNSVLFDNTCPTPALQKkpSADQPLYSSSLWGPAVEGCDCVAE-GLWL 372 CS E...------EEEES-----SGCC-B-TTT--.-EEEEE PlHlelevGDllvffdaGAYteslasnFNgfprpaeVlv<-* P l+vGD+lvf ++GAYt s g + + + sp|Q8BVM4| 373 P---QLQVGDWLVFDNMGAYTVDTKSLLGGTQARRVTYA 408 sp|Q9CL60|SPEA_PASMU: domain 1 of 1, from 357 to 573: score 95.7, E = 8e-24 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+nVigv + ++ + ++ ++ ++ ++ + ++++++++ sp|Q9CL60| 357 VLVSNVIGVERYKFetlaapakdapsvlhsmwetwvdiqssrekrsl 403 CS .................................................. ++ ++++ + ++ +++ + + + +++ ++ + ++ ++ ++++ sp|Q9CL60| 404 rswihesqfdlsdvhnqynvgllnleqrawaeqlylnichevgqlfnekh 453 CS S-E .. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ..drk.ld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep +++r+ +d+l+er a+ y+++++++slpd +++d+l+p+ p+s+l++ sp|Q9CL60| 454 rsHRTiIDeLQERFADKLYVNFSLFQSLPDAWGIDQLFPVCPISNLNQPV 503 CS EEEEEEE-----TT--SEE. EEEEE.. .------EEEES---- tepvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGA ++++l + tCds+++++++ ++++ + ++P +++e ++ ll+ff +GA sp|Q9CL60| 504 SRRAVLLDITCDSDGTIDHYidgdgiTTTMPMPhYEEDNPPLLGFFMVGA 553 CS -SGCC-B-TTT--.-EEEEE YteslasnFNgfprpaeVlv<-* Y+e+l++++N+f+++++V v sp|Q9CL60| 554 YQEILGNMHNLFGDTSTVDV 573 sp|O23141|SPE2_ARATH: domain 1 of 1, from 481 to 596: score 94.8, E = 1.5e-23 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L + ig ++ ++ ++y ++ +v++s+pd +++d+l sp|O23141| 481 VL--KAIGASD----PV--------HTYNINLSVFTSIPDLWGIDQL 513 CS --EEECSS-TTSSEEEEEEE-----TT--SEE. EEEEE.. .- hpilpvsrldeeptepvtlaGPtCdsgDvlarF...dvsLPlH.....le +pi+p+++ld+ p ++ +l + tCds++++++F +++ sLPlH+ ++++ sp|O23141| 514 FPIVPIHKLDQRPGARGILSDLTCDSDGKINKFiggESSLPLHeldknGS 563 CS -----EEEES-----SGCC-B-TTT--.-EEEEE levGDllvffdaGAYteslasnFNgfprpaeVlv<-* + ++l++f+ GAY e+l+ +N+f+ p++V v sp|O23141| 564 GGR-YFLGMFLGGAYEEALGGVHNLFGGPSVVRV 596 sp|Q9SNN0|SPE1_ORYSJ: domain 1 of 1, from 401 to 598: score 94.7, E = 1.6e-23 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv++ + + +g+ ++ ++ ++ +++ + + ++ +++ sp|Q9SNN0| 401 VLVFEAFSASA-PGridpatgylldeltddchadyrnlmaaavrgdf 446 CS S-E.. .............................................drkld ++ ++ +++ ++ +++ + ++ ++ + ++ + ++ sp|Q9SNN0| 447 dtcalyadqlkrrcadqfkdgvlglehlaavdslceivargmgaaEPP-- 494 CS ......EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEEEE-- lnerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvtlaGP +y+++ +v++slpd +++++ +pi+p++rl e p++ +l + sp|Q9SNN0| 495 ------RTYHINLSVFTSLPDMWAIGQMFPIIPIQRLGERPAVDGVLSDL 538 CS ---TT--SEE. EEEEE.. .------EEEES-----SGCC-B-TT tCdsgDvlarF...dvsLPlH...lelevGDllvffdaGAYteslasnFN tCds++++++F ++ sLPlH+ ++ +G++l++f+ GAY+e+l+ +N sp|Q9SNN0| 539 TCDSDGKVDHFiggRHSLPLHelpVHGTRGYYLGMFLGGAYQEALGGLHN 588 CS T--.-EEEEE gfprpaeVlv<-* +f+ p++V v sp|Q9SNN0| 589 LFGGPSVVRV 598 sp|P31851|TABA_PSESZ: domain 1 of 1, from 278 to 383: score 92.2, E = 8.9e-23 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +Lv++Vi + ++g r +v+ ld++++++ ++p ly+a+ sp|P31851| 278 VLVSRVINRCSKG--RE--------IVG-LDASMSAL-MRPGLYGAY 312 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv h+ + d+ p+ +++++G +C+ D++a d++LP + +GDl + sp|P31851| 313 HHLTLPF-ADQRPEGVFDVVGALCENFDKFAV-DRLLP---SPLIGDLAL 357 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* ++d+GA +++++ ++Ng+ rpae + sp|P31851| 358 IHDTGAHGHAMGFTYNGRLRPAELML 383 sp|Q9JT25|SPEA_NEIMA: domain 1 of 1, from 343 to 559: score 91.8, E = 1.2e-22 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+nVigv + ++ + ++++ ++ ++ ++ ++ + ++++++ sp|Q9JT25| 343 VLVANVIGVERYKPrrldapspeaprvlhsmwetwtdisasrekrsl 389 CS .................................................. ++ ++++ + + +++ + + + ++ ++ + ++ ++ ++++ sp|Q9JT25| 390 rswihegqfdladvhnqynvgllslaqrawaeqlylnichevgelfnekh 439 CS S-E .. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ..drk.ld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep +++r+ +d+l+er a+ y+++++++slpd +++d+l+p+ p+ l+e sp|Q9JT25| 440 rsHRTiIDeLQERFADKLYVNFSLFQSLPDAWGIDQLFPVCPITGLNEPI 489 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds+++++++ ++++ ++ ++P ++ e+ ll+ff +G sp|Q9JT25| 490 ARRAVLLDITCDSDGTIDHYidgdgiagTMPMPD-YPEEEPPLLGFFMVG 538 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++a+ v sp|Q9JT25| 539 AYQEILGNMHNLFGDTATADV 559 sp|Q9K0U3|SPEA_NEIMB: domain 1 of 1, from 343 to 559: score 91.8, E = 1.2e-22 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lv+nVigv + ++ + ++++ ++ ++ ++ ++ + ++++++ sp|Q9K0U3| 343 VLVANVIGVERYKPrrldapspeaprvlhsmwetwtdisasrekrsl 389 CS .................................................. ++ ++++ + + +++ + + + ++ ++ + ++ ++ ++++ sp|Q9K0U3| 390 rswihegqfdladvhnqynvgllslaqrawaeqlylnichevgelfnekh 439 CS S-E .. ......EEEEES----S-.-CHHHHS----EEECSS-TTSS ..drk.ld.lnerlafvyylddGvygslpdpalydalhpilpvsrldeep +++r+ +d+l+er a+ y+++++++slpd +++d+l+p+ p+ l+e sp|Q9K0U3| 440 rsHRTiIDeLQERFADKLYVNFSLFQSLPDAWGIDQLFPVCPITGLNEPI 489 CS EEEEEEE-----TT--SEE. EEEEE...------EEEES--- tepvtlaGPtCdsgDvlarF........dvsLPlHlelevGDllvffdaG +++++l + tCds+++++++ ++++ ++ ++P ++ e+ ll+ff +G sp|Q9K0U3| 490 ARRAVLLDITCDSDGTIDHYidgdgiagTMPMPD-YPEEEPPLLGFFMVG 538 CS --SGCC-B-TTT--.-EEEEE AYteslasnFNgfprpaeVlv<-* AY+e+l++++N+f+++a+ v sp|Q9K0U3| 539 AYQEILGNMHNLFGDTATADV 559 sp|Q7XRA1|ADC2_ORYSJ: domain 1 of 1, from 381 to 547: score 91.2, E = 1.8e-22 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. L++++ + +++ ++ ++ +++++ + +++ + ++++ + + sp|Q7XRA1| 381 RLLSKIQDLSSKQPrtahtvnggggvdamhshavelkkhgiemykla 427 CS S-E........EEEEES----S-.-CHHHHS----EEEC ...........drkldlnerlafvyylddGvygslpdpalydalhpilpv ++ +++ +++ + + y+++ +v+ + pd +++++l+p +pv sp|Q7XRA1| 428 kklskrvtgdaNGI--------YNYHMNLSVFSLVPDFWGIGQLFPMMPV 469 CS SS-TTSSEEEEEEE-----TT--SEE. EEEEE.. .------E srldeeptepvtlaGPtCdsgDvlarF...dvsLPlH.....lelevGDl srl+e pt tl++ tCds++++ +F ++ v+LPlH+ ++ + G++ sp|Q7XRA1| 470 SRLNEKPTINGTLVDITCDSDGKVEKFirdAVTLPLHplddaAAEHGGYY 519 CS EEES-----SGCC-B-TTT--.-EEEEE lvffdaGAYteslasnFNgfprpaeVlv<-* ++ ++ GAY+e+la+ +N+f p V v sp|Q7XRA1| 520 VAALLSGAYQEALACKHNLFSGPTLVRV 547 sp|Q9SI64|SPE1_ARATH: domain 1 of 1, from 385 to 584: score 88.2, E = 1.5e-21 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +L+++ ++ ++++++++ ++ +++ +++ ++ + +++++ sp|Q9SI64| 385 VLIFEAVSAGQQHEtptdhqfmlegyseevrgdyenlygaamrgdre 431 CS S-E... ............................................drkldl + ++ +++ ++ ++++ + ++ + ++ + + + +d++ sp|Q9SI64| 432 scllyvdqlkqrcvegfkegslgieqlagvdglcewvikaigasDPV--- 478 CS .....EEEEES----S-.-CHHHHS----EEECSS-TTSSEEEEEEE--- nerlafvyylddGvygslpdpalydalhpilpvsrldeeptepvtlaGPt +y+++ +v++s+pd +++d+l+pi+p+++ld+ p+++ +l + t sp|Q9SI64| 479 -----LTYHVNLSVFTSIPDFWGIDQLFPIVPIHKLDQRPAARGILSDLT 523 CS --TT--SEE. EEEEE.. .------EEEES-----SGCC-B- CdsgDvlarF...dvsLPlH......lelevGDllvffdaGAYteslasn Cds++++++F +++ sLPlH+ ++++ + ++l++f+ GAY e+l+ sp|Q9SI64| 524 CDSDGKINKFiggESSLPLHemdnngCSGGR-YYLGMFLGGAYEEALGGV 572 CS TTT--.-EEEEE FNgfprpaeVlv<-* +N+f+ p++V v sp|Q9SI64| 573 HNLFGGPSVVRV 584 sp|C4L9A9|SPEA_TOLAT: domain 1 of 1, from 433 to 566: score 87.6, E = 2.2e-21 CS EEEEEEEEEEE--SS-E .. ......EEEEES----S-.-CHHHHS *->tLvtnVigvkerggdrk.ld.lnerlafvyylddGvygslpdpalyd +L +V+ +++ +r d+lne+la+ ++++++++slpd +++d sp|C4L9A9| 433 CLKLKVMLDPVNRMHRNlQDeLNEKLADKCFVNFSLFQSLPDAWGID 479 CS ----EEECSS-TTSSEEEEEEE-----TT--SEE. EEEEE.. alhpilpvsrldeeptepvtlaGPtCdsgDvlarF........dvsLPlH +++pi+p+s ld++pt++ ++ + tCds++ + ++ ++ + ++ ++P sp|C4L9A9| 480 QIFPIMPLSGLDQQPTRRGVIMDITCDSDGMIKEYvdgvgienSLPMP-- 527 CS .------ EEEES-----SGCC-B-TTT-- .-EEEEE lelevGD..llvffdaGAYteslasnFNgfp..rpaeVlv<-* e++++++++++ff++GAY+e+l++ +N+f++++ aeV++ sp|C4L9A9| 528 -EMRNDEtnYMGFFLVGAYQEILGDLHNLFGdtHSAEVCL 566 sp|A0KIP8|SPEA_AERHH: domain 1 of 1, from 348 to 564: score 78.4, E = 1.3e-18 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lvtn+ig + ++ + ++++ ++ ++ ++ + ++++++ sp|A0KIP8| 348 VLVTNIIGAEG-VEmndisapdddaptilqnmwkgwldlrsedpsll 393 CS .................................................. + +++ + ++ +++ + + + +++ + ++++ ++ ++ ++ sp|A0KIP8| 394 eifhdsvadlgdvntqytmgllnleqrawaemlhqntclalkellnpvnr 443 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSE .drkld..lnerlafvyylddGvygslpdpalydalhpilpvsrldeept ++r l+++l+e+la+ + ++++++slpd +++++++p++p+ l++ t sp|A0KIP8| 444 nHRALAdeLSEKLADKCFANFSLFQSLPDAWGIGQVFPVMPLAGLERPLT 493 CS EEEEEE-----TT--SEE. EEEEE.. .------EEEES----- epvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAY ++ +l + tCds++ + ++ ++ + + +LP + + ++ ++ff++GAY sp|A0KIP8| 494 RRGILMDITCDSDGQVEHYvdglgvESTLPMPvYGEHEECHVGFFLVGAY 543 CS SGCC-B-TTT-- .-EEEEE teslasnFNgfp..rpaeVlv<-* +e+l++ +N+f+++++aeV++ sp|A0KIP8| 544 QEILGDLHNLFGdtHCAEVWL 564 sp|A4SPD6|SPEA_AERS4: domain 1 of 1, from 348 to 564: score 73.6, E = 3.6e-17 CS EEEEEEEEEEE--S *->tLvtnVigvkergg................................. +Lvtn ig + ++ + ++++ ++ ++ ++ + ++++++ sp|A4SPD6| 348 VLVTNLIGAEG-VEmsdisapdedaptllqnmwqgwldlrgedpsll 393 CS .................................................. + +++ + ++ +++ + + + +++ + ++++ ++ ++ ++ sp|A4SPD6| 394 eifhdsvadlgdvntqytmgllnleqrawaemlhqntclalkemlnpvnr 443 CS S-E.. ......EEEEES----S-.-CHHHHS----EEECSS-TTSSE .drkld..lnerlafvyylddGvygslpdpalydalhpilpvsrldeept ++r l+++l+e+la+ + ++++++slpd +++++++p++p+ ld+ sp|A4SPD6| 444 nHRALAdeLSEKLADKCFANFSLFQSLPDAWGIGQVFPVMPLTGLDRPLS 493 CS EEEEEE-----TT--SEE. EEEEE.. .------EEEES----- epvtlaGPtCdsgDvlarF......dvsLPlH.lelevGDllvffdaGAY ++ +l + tCds++ + ++ ++ + + +LP +++e ++ +++ff++GAY sp|A4SPD6| 494 RRGILMDITCDSDGQVEHYvdglgvESTLPMPqYEENEVCYVGFFLVGAY 543 CS SGCC-B-TTT-- .-EEEEE teslasnFNgfp..rpaeVlv<-* +e+l++ +N+f+++++aeV++ sp|A4SPD6| 544 QEILGDLHNLFGdtHCAEVCL 564 sp|P55709|Y4YA_RHISN: domain 1 of 1, from 324 to 439: score 23.1, E = 0.0018 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal + v+++ vk +g + +v+++ ++ + ++ + sp|P55709| 324 ITVFRISRVKALGP-DS--------HVIFVEGSSFSA--CETWFASE 359 CS --EEECSS -TTSSEEEEEEE-----TT--S EE.EEEEE...--- hpilpvsr.....ldeeptepvtlaGPtCdsgDvl.arFdvsLPlHlele + i p+ + ++ + p +++ laG +C+ Dv+++r ++P ++ sp|P55709| 360 FLIDPILVpatkaTVQLPPVRAYLAGHSCLDEDVIsNR-WLTFPT--APR 406 CS ---EEEES-----SGCC-B -TTT--.-EEEEE vGDllvffdaGAYteslas.nFNgfprpaeVlv<-* +GDllv+ ++G Y++ l + F +p+pa ++v sp|P55709| 407 AGDLLVYANTGGYQMDLLEnEFHRHPMPARFCV 439 sp|O81160|SPE2_THECC: domain 1 of 1, from 341 to 406: score -9.6, E = 1.1 CS EEEEEEEEEEE--SS-E........EEEEES----S-.-CHHHHS-- *->tLvtnVigvkerggdrkldlnerlafvyylddGvygslpdpalydal +L + ig ++ ++ ++y ++ +v++s+pd +++d+l sp|O81160| 341 VL--KAIGASD----PV--------HTYNINLSVFTSIPDLWGIDQL 373 CS --EEECSS-TTSSEEEEEEE-----TT--SEE.EEEEE...------EEE hpilpvsrldeeptepvtlaGPtCdsgDvlarFdvsLPlHlelevGDllv +pi+p+++ld+ p ++ +l + tCds++++++ sp|O81160| 374 FPIVPIHKLDQRPGARGILSDLTCDSDGKINK------------------ 405 CS ES-----SGCC-B-TTT--.-EEEEE ffdaGAYteslasnFNgfprpaeVlv<-* + sp|O81160| 406 -------------------------F 406 Histogram of all scores: score obs exp (one = represents 368 sequences) ----- --- --- <-187 18 -|= -187 0 0| -186 0 0| -185 1 0|= -184 1 0|= -183 1 0|= -182 1 0|= -181 2 0|= -180 2 0|= -179 7 0|= -178 6 0|= -177 14 0|= -176 14 0|= -175 17 0|= -174 17 0|= -173 36 0|= -172 48 0|= -171 65 0|= -170 61 0|= -169 67 0|= -168 79 0|= -167 125 0|= -166 97 0|= -165 103 0|= -164 133 0|= -163 136 0|= -162 109 0|= -161 171 0|= -160 122 0|= -159 235 0|= -158 158 0|= -157 103 0|= -156 149 0|= -155 123 0|= -154 154 0|= -153 121 0|= -152 115 0|= -151 98 0|= -150 86 0|= -149 123 0|= -148 112 0|= -147 116 0|= -146 113 0|= -145 128 0|= -144 123 0|= -143 125 0|= -142 153 0|= -141 119 0|= -140 132 0|= -139 146 0|= -138 183 0|= -137 205 0|= -136 297 0|= -135 267 0|= -134 278 0|= -133 401 0|== -132 571 0|== -131 341 0|= -130 426 0|== -129 416 0|== -128 361 0|= -127 396 0|== -126 439 0|== -125 407 0|== -124 416 0|== -123 384 0|== -122 403 0|== -121 476 0|== -120 497 0|== -119 583 0|== -118 506 0|== -117 569 0|== -116 653 0|== -115 724 0|== -114 817 0|=== -113 975 0|=== -112 867 0|=== -111 1055 0|=== -110 1129 0|==== -109 1130 0|==== -108 1173 0|==== -107 1303 0|==== -106 1511 0|===== -105 1761 0|===== -104 1598 0|===== -103 1922 0|====== -102 1956 0|====== -101 2171 0|====== -100 2341 0|======= -99 2531 0|======= -98 2977 0|========= -97 3395 0|========== -96 3552 0|========== -95 3786 0|=========== -94 4681 0|============= -93 5018 0|============== -92 5434 0|=============== -91 5767 0|================ -90 6231 0|================= -89 7348 9|*=================== -88 8000 63|*===================== -87 8823 285|*======================= -86 9568 957|==*======================= -85 10619 2509|======*====================== -84 12082 5363|==============*================== -83 13504 9681|==========================*========== -82 14969 15206|=========================================* -81 15881 21295|============================================ * -80 17604 27128|================================================ * -79 18526 31969|=================================================== * -78 19609 35332|====================================================== * -77 20829 37040|========================================================= * -76 21100 37180|==========================================================* -75 21674 36011|==========================================================* -74 21586 33869|==========================================================* -73 20963 31094|========================================================= * -72 20694 27986|========================================================= * -71 19128 24780|==================================================== * -70 18231 21650|================================================== * -69 16942 18707|=============================================== * -68 14710 16019|======================================== * -67 13068 13616|====================================* -66 11524 11502|===============================* -65 9842 9668|==========================* -64 8643 8093|=====================*== -63 7470 6752|==================*== -62 6099 5617|===============*= -61 5084 4663|============*= -60 4216 3863|==========*= -59 3641 3195|========*= -58 2752 2640|=======* -57 2382 2179|=====*= -56 1809 1796|====* -55 1477 1480|====* -54 1200 1219|===* -53 943 1003|==* -52 814 825|==* -51 660 679|=* -50 542 558|=* -49 333 459|=* -48 341 377|=* -47 246 310|* -46 152 255|* -45 131 209|* -44 104 172|* -43 103 141|* -42 84 116|* -41 58 95|* -40 51 78|* -39 41 64|* -38 40 52|* -37 43 43|* -36 37 35|* -35 24 29|* -34 18 24|* -33 20 19|* -32 10 16|* -31 13 13|* -30 8 10|* -29 9 9|* -28 7 7|* -27 4 6|* -26 3 4|* -25 3 4|* -24 3 3|* -23 3 2|* > -22 171 -|= % Statistical details of theoretical EVD fit: mu = -75.9194 lambda = 0.1968 chi-sq statistic = 6930210.0000 P(chi-square) = 0 Total sequences searched: 516081 Whole sequence top hits: tophits_s report: Total hits: 450 Satisfying E cutoff: 170 Total memory: 106K Domain top hits: tophits_s report: Total hits: 450 Satisfying E cutoff: 450 Total memory: 1738K hmmer-3.1b2/easel/demotic/examples/example-single.pbl0000664361611702660230000041344412473612604022246 0ustar wheelerteddyA9B431_HERA2/73-422 SVAAMGVYPYITAQIIMQLL----------------IP-LIPALEQLSKE-GEQGRNRIQ A8CRX1_9CHLR/78-422 SVAALGVYPYITASIIMTLL----------------TP-VIPKLTALSKE-GEAGRNKIN A2Y4E5_ORYSI/132-498 SFFQLGISHQISASIVMQVLfyplfgpallfsngnvLChVLPSLEKLRKE-GLDGHEKIK Q7UZW2_PROMP/80-422 GIFALGILPFINASIIIQLL----------------TA-SLPVLEDLQKNeGEAGRRKIA Q7NKT4_GLOVI/79-416 GVFMLGILPYINASIIMQLL----------------VP-VFPKLEDLQKNeGEQGRRQIA SECY_GUITH/68-404 GVFALGIVPYINASIIVQLA----------------TN-SIPSLEKLQKEeGELGRQKIV SECY_CYACA/62-394 SVFALGIIPYINATITIQIL----------------SS-AFPALKKLQSEeGEIGKKKLN Q85FU6_CYAME/42-325 GWFVLGIIPTINASIVMQIL----------------IS-IVPALTRLQKEeGEMGQKQIQ A0T0J6_PHATR/72-407 GLFTLNIFPYINASILVQLI----------------LG-FSPKLSKLQKEgDLEGRRSIN SECY_CYAPA/109-459 GFFTLGILPYMNASFFLQVL----------------TK-ILPSLERFQKEqEEIAQREFK Q4G351_EMIHU/63-407 GIGSLGILPYINASIIIQLL----------------TP-LFPNLERLQKEeGELGRQQIS SECY_PAVLU/66-404 SILTLGLGPFFSASLAVQFL----------------VK-LYPAFEKLQNEeGEEGRKTIV Q6B8X0_GRATL/62-395 GIFALGIVPYINASIMMQLL----------------TK-LIPELENLQKEeGESGRQKIG SECY_ANTSP/62-390 GIFALGIVPYIYASIIIQLL----------------IK-LIPYLENLQKEeGEIGRQKIN A4RW47_OSTLU/65-398 GIFSLGIVPYINSSIIFQLL----------------GS-VFPELKKLQKEeGEAGRRKFQ A7PFA4_VITVI/131-465 GICSLGIVPFINAQIVFQLL----------------TQ-IYPKLQDLQKReGETGRKKVL A7HM32_FERNB/75-404 SVFSMSVTPYINASIIMQLL----------------AS-IIPSLKELLKE-GEEGRKKFQ A3CK84_STRSV/69-416 SVFALGVSPYITASIVVQLL----------------QMdLLPKFVEWGKQ-GEVGRRKLN Q5FM71_LACAC/68-415 SIFSLGVSPYITAQIVIQLL----------------QMdIVPTLVEWGKQ-GEVGRRKTN Q03ZM6_LEUMM/68-416 SLFAMGVSPYVTAQIIVQLL----------------QLdIVPRFVEWSKQ-GEVGRRKLN SECY_STAA8/69-413 SIFAMGIVPYITASIVMQLL----------------QMdIVPKFSEWAKQ-GEVGRRKLN Q4MG72_BACCE/68-415 SIFAVGITPYITASIIVQLL----------------QMdVIPKFSEWAKQ-GEMGRKKSA Q6F1X5_MESFL/92-454 SILALGVSPYITASIIVQLL----------------STdVVPILTRWNKS-GERGRKKLD Q6KI36_MYCMO/87-436 SIVALGISPFITASLVMQIL----------------QTkLFPPIYRLSQS-GPIGRRKIN Q4A5I3_MYCS5/83-437 SIFALGISPFINASLIMMIL----------------QSrLFPMIYKLTQS-GPQGRRKLN Q98Q01_MYCPU/90-438 SIVSLGINPFITASLIMTIL----------------QSkLFPPIQKMSQS-GPLGRKKIN Q4AAF9_MYCHJ/85-434 SVVALGISPFITASLFMLIA----------------QTkLFPPIHRLSQS-GPAGRRKIN Q9PQP1_UREPA/76-434 SLFAIGIGPYITAQIIMQLL----------------SSeLVPPLAKLSKS-GERGRKKIE SECY_MYCGE/81-430 SLFAVGISPYISAQIIMQLL----------------STdLIPPLSKLVNS-GEVGRRKIE Q8EUD2_MYCPE/81-433 SFMAIGVSPYITAQIIVQLL----------------SSdLIKPLTRLSKA-GERGKRKLE Q7X4E3_9MOLU/69-399 CILSLGVIPYVTASIVIQLS----------------QK-VFTFMKEWQEQ-GEKGKRKIN Q5Q069_ASTYP/59-398 TLFGLGITPYITASIVVQFL----------------QK-LLPICREWKDQ-GQMGKRKLN O21257_RECAM/57-372 SLFALNITPIITYLFLEQLY-------------------YIYSIPLISKK-KNLNKDLIK Q74NB9_NANEQ/69-457 SIVSLGIGPIIIGYLLAELF-------------------IGSGELNIDIT-TEEGKRKFE Q2EMT2_METVO/30-379 TLITLGIGPIVTAGIIMQLL-------------------IGSELVKLDMS-KPDNRALFQ A5UL65_METS3/72-433 SILTLGIGPIVTASIVLQLL-------------------VGSKLLDLDLS-SPEDKSQYQ SECY_METTH/73-436 SILTLGIGPIVSASIILQLL-------------------VGGKILKLDLS-RHEDKAFFQ SECY_PYRAB/72-448 SILTLGIGPIVTAGIILQLL-------------------VGSEIIKLDLA-NPEDRRFYQ Q8TZA9_METKA/75-435 SILTLGIGPIVTASILLQLL-------------------VGGDLIKLDLT-NPEDRRLFQ Q9HIT0_THEAC/82-514 SLMDLGIGPIVTASIVMQLF-------------------VGAKIFNLDLQ-NAEDKAIYQ Q2QAQ7_9EURY/161-583 SIMHLGIGPIVTGSIIMQLF-------------------AGAKIIKLDLG-DSDDKQLYQ Q0W1W5_UNCMA/75-487 SIILLGIGPIVMASIVLQLL-------------------VGAELIPLDTT-DPKDQAIFQ SECY_ARCFU/73-471 SIIALGIGPIVTASIILQLL-------------------VGAGIIKLDLT-NPEDRAAYQ Q8TRS4_METAC/72-470 SLVLLGIGPIVTASIVLQLL-------------------VGADIIKMDLS-DPKDQAFFQ A0B9U7_METTP/75-515 SLMLLGIGPIVTASIVLQLL-------------------VGAEIIKLNLR-DPRDQAIFQ SECY_HALMA/73-468 SIMQLGIGPIVTASIVLQLL-------------------GGADLLGLNTQdDPRDQILYQ Q2FSG8_METHJ/73-458 SIVHLGIGPIVTASIVLQLL-------------------KGADLIHIDTS-EIRGQIQYM A2SPM5_METLZ/73-458 TILHLGIGPIVTASIVLQLL-------------------RGADLIKINTS-DQRGQVLYM A0RUE4_CENSY/79-457 TLVELGIGPIVTAGLLMQLL-------------------RGSEILKFDFK-KPEERGIFQ A8ME75_CALMQ/77-461 TLAQLGIGPIIIAGIIMELV-------------------AFSELMDVDLN-DPKDQARFT A3MUZ2_PYRCJ/70-435 TLAHLGIGPIVIAGILMEVF-------------------AFSGVLNLDLN-KREDRLKFT SECY_SULSO/73-449 TLAQLGIGPIITAGLIMQIL-------------------AGSKLISIDLN-DPDDRVKFT SECY_SULAC/74-443 TLAQLGIGPVITSGLIMQIL-------------------VGSKLINVDLT-TQEGKSKFT A2BME2_HYPBU/73-444 TLMTLGIGPIVTAGIVLEVL-------------------VGGKLIELDLT-KPRDRKIFM SECY_AERPE/73-434 TLMELGIGPIVTASLIIQVL-------------------VGAKIIKLDLA-DPEGRRKFT A1RWR3_THEPD/75-456 TLIELGIGPIVTSGIVWELL-------------------VGSRIVNLDLT-TPEGRRTFA SC61A_SCHPO/76-459 TLMELGISPIVTSSMLVQLL-------------------VGSQLIEVNME-LKSDREMYQ A7E5Q2_SCLS1/76-459 TLMELGITPIISSGMVFQLL-------------------AGTHLIDVNLD-LKADRELYQ Q5KC69_CRYNE/75-459 TLMELGITPIVTSGMIMQLL-------------------AGAQLIDVDFS-LKDDRALFG SC61A_ASHGO/75-460 TLMELGVSPIITSSMIFQFL-------------------QGTQLLQVNLE-SKQDRELFQ Q59MJ6_CANAL/76-459 TLMELGISPIVSSGMLFQLL-------------------QGTKIIHVDMQ-NKNDRETFQ A7SJW4_NEMVE/75-458 TLMELGISPIVTSGLIMQLL-------------------AGSKIIEVGDT-PK-DRALFN A0CFY2_PARTE/73-456 TLMELGISPIVTSGMILQFL-------------------SGVGFIEVNHS-VREDKVLFN Q22MG2_TETTH/151-538 TIMELGISPTVTAGMVMQLL-------------------VGAQILNIDQN-DPVQRSLYE A0CU87_PARTE/77-460 TLMELGISPMVTASMIMQLL-------------------AGAKLIDVDQN-VKEDKQLYS Q7RLN0_PLAYO/121-506 TLMELGISPIVTSGMVMQLL-------------------AGSKIIDVDQS-LKEDRTLFQ Q4QGX4_LEIMA/77-467 TLMELGISPIVSASLILELL-------------------AGVRILTYDQN-NREERAVFE A5JEK2_NOSBO/75-457 TLMDLGISPVVTASMIMQFL-------------------GMLELVKVDYN-VKEDKILHG A2DH65_TRIVA/75-462 SLMEFGISPIVTSGMILQFL-------------------CSFGLINRNPS-DPEASALFD Q2QM98_ORYSJ/88-448 TVMELGVAPVVTSWVVVRLL-------------------AALL--------FDSDSSTTV Q6AV46_ORYSJ/86-471 TVMELGITPVVTAGTLVQLL-------------------VGSNLVRADSS-NPDDRALLS Q6C854_YARLI/70-454 TLMELGVGPMVTSGIIFQIL-------------------GGFQALNVNFD-IRADRELFQ SSH1_YEAST/78-465 TLLEFGLFPNISSGLILQLL-------------------AGLKVIKVNFK-IQSDRELFQ Q6BT20_DEBHA/78-475 TLLELGLLPVLTSAFIWQLS-------------------AGFRFINVNLN-LRSDRELYQ A5DE75_PICGU/20-414 TLLELGLLPVMTSAFLWQLA-------------------AGLRLVKVNLS-LRSERELFQ A3GFV9_PICST/78-476 TLFELGVLPVVTAAFFWQLA-------------------VGLKLVNVNLG-LRSDRELFQ A5DWJ5_LODEL/34-436 SLLELGFLPIITSAFLWQLA-------------------AGLKLININLG-LRYDRELFQ Q5A2C9_CANAL/5-404 TLLELGLLPIITSAFIWQIA-------------------AGLRLINVNFK-LRIDRELFQ Q74L41_LACJO/64-372 SIFSIGLNPLMFSMLIIQLL-------------------SFTHSFGFDA----LSPKQVQ B3XPQ8_LACRE/65-377 SLFMVGLNPLMIAMLIIQLL-------------------TMLRLFYFDT----LSMNQLM A1C3L4_STRPA/70-403 TLFSLGIGPTMTMMILWRFL-------------------ITFKLI------GSWTSNKVN Q3DVD6_STRAG/65-395 GVFSLGIGPMMTTMILLRLF-------------------------TIGKYsSGVSQKVQQ A5LN99_STRPN/64-389 SIFSVGLSPWMSAMILWQMF-------------------SFSKRLGLTST----SIEIQD A3CM55_STRSV/64-391 SLFSVGLSPWMSSMLIWQMF-------------------AVSKRLGLSKL----PLEVQE Q03HZ8_PEDPA/65-396 SLFSVGLGPYMTGMILFQAI-------------------QLLDIDELNKI----NDYKRG A5IW80_STAA9/64-384 NIFTLGLVPWLTSMIILMLI-------------------SYRNMDKYMKQ----TSLEKH Q4L9N9_STAHJ/61-383 NVFSLGLGPWLTSLVIIMLL-------------------NYRNLDQATKQ----TRSEKH Q5HKR3_STAEQ/61-380 NIFSLGLGPWLSSMIILTLI-------------------NHKSNDKVKTQ----TRRERH Q9RSK8_DEIRA/68-413 SIFALGVLPYITASIVIQLL----------------TT-TIPSLEKLSKE-GEEGRKKIN Q5SHQ8_THET8/71-413 SIFALGIMPYITAAIIMQIL----------------VT-VVPALEKLSKE-GEEGRRIIN SECY_CORGL/73-424 SIFAIGIMPYITASIIVQLL----------------TV-VIPHFEELKKE-GQSGQAKMM A8LB12_FRASN/74-414 SVFALGIMPYITSSIIIQLL----------------VV-VIPRLEQLKKE-GSSGEQKLT Q83NQ1_TROW8/73-424 SVFALGVMPYITSSIIIQLL----------------RV-VVPRFEQLYKQ-GQEGQAKLI Q8G3Z9_BIFLO/74-421 SIFALGVMPYITASIVVQLL----------------RV-VIPRFEALHKE-GQSGEAKLT A7B9M4_9ACTO/72-414 SIFALGIMPYITASIIIQLL----------------RV-VIPRFDDLHKE-GQTGQAKLT SECY_CHLTR/73-433 TVIALGVVPYISASIIVQLL----------------VV-FMPTLQREMREsPDQGKRKLG Q1AU49_RUBXD/70-408 SVFALGIMPYITAAIVMQLM----------------TV-AIPRLQELARE-GEVGQQKIT Q8RIH6_FUSNN/75-411 SIFSLGIIPYINASIVVSLL----------------VS-IIPQLEEIQKE-GESGRNRIT A6DRC9_9BACT/79-428 GV--LGIMPYITASIIMQLM----------------TP-VFPNLEKLQKD-GSHGRQKLN C0ACZ0_9BACT/94-454 AVCALGIMPYISASIIFQLM----------------TA-VVPSLARLQQE-GDVGRQKLS Q1Q157_9BACT/75-434 AIFGLGVMPYISASIIFQLL----------------VG-VVPYLERLQKE-GEVGRKKIN A6CGP8_9PLAN/77-435 TIFGLGIMPYISASIIFQLM----------------GT-VYPPLERLQKE-GEAGRKKIN B4S5A8_PROA2/73-417 SIFSLGIMPYISASIIVQLL----------------GA-VTPYVQKLQKE-GEEGRQKIN Q2S3P5_SALRD/75-414 GIFALGIMPYITASIIIQLM----------------GA-VVPYFQKLQRE-GEEGRRRIT A1ZGT4_9SPHI/72-404 SIFALGIMPYISASIVIQLM----------------EV-AVPYFQKLKKE-GESGFKKKT A6EHP4_9SPHI/71-408 SILALGVMPYISASIVVQLL----------------GI-AVPSFQKMQKE-GESGRKKLN Q11QD2_CYTH3/72-411 SVFGLGIMPYISASIVLQLL----------------TF-AVPYFQRLQKD-GESGRKTIN Q1VTY0_9FLAO/73-421 SVFALGIMPYISASIVVQLM----------------TI-AIPYLQKLQKE-GDSGRKKIT Q1NYZ7_9FLAO/72-422 SILSLGIMPYISASILTQLM----------------CY-MFPSLYKIQQD-GEIGIKKIN A5KHP6_CAMJE/62-402 SIISLGIMPYITASIIMELL----------------AA-TFPNIGKMKKE--RDSMQKYM A4EA78_9ACTN/52-389 SVFSLGIMPYITSSIILQML----------------QA-VVPSLHELARE-GEVGQTKIT Q2GEC0_NEOSM/73-411 TLFALNVMPYIVSSIVVQIF----------------FS-MLKSEGKVSAE--FMNESRLS Q3YRM8_EHRCJ/72-412 TVFALNVMPYIVSSIIIQLL----------------SV-TVPRLNELRQN-GELGRMKIN Q5GSW3_WOLTR/77-416 TILVLNVMPYIVASIVMQLL----------------SS-AVKGINEVKND-GELGRRRMN Q0ANS0_MARMM/83-421 AIFVLNVMPYISASIIMQLM----------------SA-TIPSLEKLKKEgGEQGRQQIN A7IPQ0_XANP2/80-418 AIFALNIMPYISASIIIQLL----------------TS-VSPTLEALKKE-GEAGRKQLN SECY_RICCN/70-411 SIFALAIMPYITASIIIQLM----------------SV-AYKPLENLKKE-GEVGKRKVN Q2G8W0_NOVAD/80-430 SLIALGVMPYITASIVVQLA----------------AS-LHPALAAMKKE-GESGRKKLN A6E0Q6_9RHOB/73-411 GIFALGIMPYISASIIVQLM----------------TA-MVPALEQLKKE-GEQGRKKIN Q1UZE8_9RICK/67-404 AIFALGIMPYISSSIIVQLL----------------TG-VSDYFKNLKAQ-GETGRAKIT Q3R245_XYLFA/76-424 SIFALNVMPYISASIVVQLA----------------TH-IFPSLKAMQKE-GESGRRKIT A4NK90_HAEIN/76-416 SILALGIMPYISASIVIQLL----------------AT-VSPALAELKKE-GAAGQRKIS Q057C4_BUCCC/64-407 SIFALGVMPYISSSIIVQLL----------------TL-ISSYLRNLKKE-GDIGKKTIN Q8D1Z2_WIGBR/82-424 SIFSLGIMPHISASIIIQLL----------------TI-IHPKLSEIKKD-GEFGRRKIN Q6F7T2_ACIAD/83-426 SILALGIMPYISASIIVQLM----------------ST-VVPSLEALKKE-GEQGKRKIN Q6Q8W8_9GAMM/67-407 SIFALNVVPYISSAIIMQLF----------------SN-SIPYLQELKKD-GQAGRNKIT A9BRX1_DELAS/74-413 TVFALGIMPYISASIIMQLM----------------TY-VVPTFEQLKKE-GESGRRKIT Q7DDS8_NEIMB/73-410 SIFAIGIMPYISASIIVQLA----------------SE-ILPSLKALKKE-GEAGRKVIT Q5NHU8_FRATT/74-416 SIFALGVMPYISASIIFQML----------------SA-VYPKFIELKKE-GESGQKKIT Q7WZR8_9GAMM/64-388 SIFSIGLMPYISASIIMQVI----------------TG-MFLDVE--------VSKHKLT A5EX98_DICNV/69-412 SLLALGVAPYISASIVMQLL----------------TH-MLPALKDLRQE-GSAGQKKIT Q6MJ32_BDEBA/70-415 SIFALGIMPYISSSIIFQLL----------------TS-AIPYLEALKKE-GEQGRRKIN B5EFS0_GEOBB/71-411 TVFALGIMPYISSSIIFQLL----------------TV-VLPAVEKLSKE-GDAGRKKII A3EVQ1_9BACT/75-412 TIFALGIMPYISASIILQLL----------------TV-VHPTLQAMAKE-GERGRKIIT Q1MPP6_LAWIP/71-412 SVFALGIMPYISASIIMQLL----------------QV-IIPDFKRMAKEeGAAGRYKIT SECY_AQUAE/71-412 TVFALGVMPYISASIMMQLL----------------TV-AIPSLQRLAKEeGDYGRYKIN Q01WB2_SOLUE/74-438 TVFALGIMPYITASIILQLL----------------TV-VVPTLEKLQKE-GELGRRKIT Q08ZH8_STIAU/26-370 SIFGLGIMPYVSASIIMQLL----------------AV-VVPSLERLQKE-GASGRQKIN A6GCG0_9DELT/70-411 SVFALGIMPYISASIIMQLM----------------TV-VIPKLEQLQKE-GETGRRKIN Q04PV8_LEPBJ/72-436 SIFALGIMPYISSSIVMQLF----------------MV-LVPSLQKLQKE-GEEGRKKIG SECY_BORBU/72-409 SIFMLSIGPYISASIIVQLL----------------VY-SFPSLKKMQE--GDGGRQKTK Q73PL2_TREDE/73-413 SVFMLGVMPYISTQILMQLA----------------MI-IFPRLKKIAEE--DGGRKKIQ Q67JW3_SYMTH/69-405 AIVAMGVTPYINSSIIMQLL----------------TV-VIPRLEELQKE-GEEGRKKIQ A7FQ38_CLOB1/69-409 SIFAMGVVPYINSSIIMQLL----------------TI-ALPSLESLSKE-GEEGRKKIQ A6LPT1_CLOB8/69-416 SILALGVMPYINASIIIQLL----------------TV-AIPQLEQLSKE-GDTGRKKIQ Q0SQG4_CLOPS/69-409 SIFALGVVPYINASIIMQLL----------------TV-AIPKLEQLSKE-GDDGRKKIQ A9KJH4_CLOPH/71-425 SLFALGIGPYITSSIIMQLL----------------TI-AIPKLEEMQKD-GESGRKKIA A7VH89_9CLOT/71-420 SIFALNVTPYITASIIIQLL----------------TI-AIPALEEMQKD-GEDGRKKIT A6BIS2_9FIRM/71-421 SVFALSITPYITSSIIVQLL----------------TI-AIPQLEEMQRD-GETGRKKIV A7VR33_9CLOT/71-423 TLFAMSVTPYINSSIIMQLL----------------TV-AIPPLERMAKE-GEEGRKKIG A6NXF0_9BACE/71-437 TVFALGVQPYINSSIIIQLL----------------TV-AIPALERLQKEgGEEGRKKIA Q250L2_DESHY/70-413 SVFALSITPYITASIILQLL----------------TI-VIPSLERLAKE-GEFGRKKIT Q8R7X3_THETN/69-402 TIFAMSIVPYINASIIMQLL----------------TI-AIPSLEQLAKE-GEEGRKKIA A4XLR1_CALS8/69-419 SIFAMSVTPYINSSIIMQLL----------------TI-AIPALEELAKQ-GEEGRKKLA A3DJJ2_CLOTH/71-411 TIFAMSITPYINASIIIQLL----------------TV-AIPKLEALAKE-GEEGRKAIA A8MLG0_ALKOO/69-408 TIFALSISPYITSSIIMQLL----------------TI-AIPSLEALAKE-GEEGSKKIA Q18CH6_CLOD6/69-406 SLFALGISPYITASIIIQLL----------------TV-GFESLAELQKS-GEEGKKKIN B8D0S8_HALOH/72-406 TIFAMSITPYITASIILQLL----------------TG-VIPRLEELQKQ-GVEGRKKLT A9B431_HERA2/73-422 RYQYFLTVPLAYLQGYGQIKSLINSGINLFGTLNFs-----------iTENFFQTFSILT A8CRX1_9CHLR/78-422 TITHWLAVPTAALAGYSQLLLLQREGAVAQTE-------------------PLAAVAIVL A2Y4E5_ORYSI/132-498 GYIWWLSLGFALVAAFTVSCYSLQYSIYAASY------------------RVKHVMITSL Q7UZW2_PROMP/80-422 QITRYVSLGWGFLQSIIFSLILRQYAIEGISET-----------------AFV--LQTSI Q7NKT4_GLOVI/79-416 QYTRYLALGWAIIQSIGVAIYIKPFVADWSPL-------------------FV--IQTTL SECY_GUITH/68-404 QLTRYVALVWALIQSIGVSFWVRPYVFNWDLN-------------------FV--FAMSL SECY_CYACA/62-394 KITKYLSFCFAFIESLAIVLRLQKYAFDWN---------------------LYFIVQTTL Q85FU6_CYAME/42-325 KYTRYLTFFLAGIQAFTLSQQ----------------------------------WCTWL A0T0J6_PHATR/72-407 RLTRLITLMFALIQSVSLALYLKQILFNWN---------------------YSLAIEIGL SECY_CYAPA/109-459 KWTRYLTVIWAFIQSIVISWIWIRPYALNWD--------------------FFLGLKVVV Q4G351_EMIHU/63-407 RYTRYLTCIWAIVLSSAIAFFLIKPITFGWS--------------------LKLGLEIVL SECY_PAVLU/66-404 RYTRILTVLFCIIESFFLSNSLRSFVFNWN---------------------SISYFVVAA Q6B8X0_GRATL/62-395 QLTRYFTLIWSILQSIGISLWIKPYVFNWNYY-------------------FI--LDSII SECY_ANTSP/62-390 QLTRYLTLLWALIQSLSIAIWINHMY-------------------------LIHLFELCA A4RW47_OSTLU/65-398 QYQRYGALGFAIVQAVGQCLYVRPFVEDFTPI-------------------WL--FEQSC A7PFA4_VITVI/131-465 QYTRYASVGFALVQAIGQVLFLRPYVNDFSTQ-------------------WV--LSSVT A7HM32_FERNB/75-404 HYTKNLTLGLAALQSFVVSFGLARSYQGIIAIN-----------------TWLFSFVSTV A3CK84_STRSV/69-416 QATRYIALVLAFVQAIGITAGFDTLSRANLVAN----------------PNVQTYALICV Q5FM71_LACAC/68-415 QVTRYLTLVVAFVQSIGITLGFNALTQMGLVKNQ--------------TPQTY--VEIAI Q03ZM6_LEUMM/68-416 NATRWLTLVLAFVQSVGITAGFNSLSSYGLVSQT---------------NSVM--SFVVI SECY_STAA8/69-413 NVTRYLAISLAFIQSIGMAFQFNNYLKGALIIN----------------QSIMSYLLIAL Q4MG72_BACCE/68-415 QFTRYFTIILAFIQAIGMSYGFNNIAGGQLITD----------------QSWTTYLFIAT Q6F1X5_MESFL/92-454 KLTKVLMIPFALMQGIATIFTLQQQGV-----IEPgwssd---nvlasPAFYY--VLVPL Q6KI36_MYCMO/87-436 IITRAITIFLGVVQSMTIVSALSAQNSFISLTNEF-------------NVFWYQFIILPV Q4A5I3_MYCS5/83-437 IATRILTFIIAYPQAVFLTKSLTAGERNSSFITLVsi--------dgfSVDLLVYFLLPM Q98Q01_MYCPU/90-438 VITRLLTLVFAFPQAIVLTQTLSRENGFISIDQEF-------------KTIANIYVLLPL Q4AAF9_MYCHJ/85-434 IITRFLTLLVAVIQAVVLIRTVILNPDYGFVRLEI-------------NTPVFIWLVLPL Q9PQP1_UREPA/76-434 VITRIITLPLAVMQAVIIINLMTRANG-----FISivsna---pfaigSPLFY--VTYIF SECY_MYCGE/81-430 MITRIITLPFALVQAFAVIQIATNAGT-----GSSpis------lansGSEFI--AFYII Q8EUD2_MYCPE/81-433 IITRLITIPFAIMQAYAVLSLAGTQGLVSSFFGQSa----------lsSVPAGQIILLLL Q7X4E3_9MOLU/69-399 IVTRVLTIFLSLGHGWALCQTEKLVLG------------------------PYLLFSTLF Q5Q069_ASTYP/59-398 LLTRSLALFFAFGQSFAFLNSYSKLLVTSIS--------------------TRQLFLLAL O21257_RECAM/57-372 KYSVYIFLMISYLEGFIYLNHLYNTTSSSFLIFY--------------LDNTINYLLCLN Q74NB9_NANEQ/69-457 NLARFFMIVFGLFESIVMA-TIGWFKPSQFLISLFampfsflgsnaflIGYILAVLFIVA Q2EMT2_METVO/30-379 GLQKAFGIFLCFLEAGMFV-LAGAFGALT----------------------PMMSLALIL A5UL65_METS3/72-433 ATQKILSIVFTMFEAGVLV-LTGSLVPIDNS--------------------YL--GVLFL SECY_METTH/73-436 GLQKLLAIVFTFFEALIFV-LTGSLAPSAPQF------------------V----WVLIL SECY_PYRAB/72-448 ALQRVFSVFMCFLEAAIWV-LGGAFGRVGVDV------------------TYAIAALMIL Q8TZA9_METKA/75-435 GLQKLLAIVLCFFEGVMMV-FSGAAPPAEPS--------------------ILLEILLIL Q9HIT0_THEAC/82-514 GVQKLLVIIMIFVEAIPQA---FGYLVPDTKVVNSina------vfpgYGEFLAQTIIIL Q2QAQ7_9EURY/161-583 GVQKILVLIMIPVESIPQV---YGFLDASPALVSD-------------FGQGWANAIIVS Q0W1W5_UNCMA/75-487 GLQKLMVFVMIVVEALPQI--YGGFLLPDPAIAATl-----------gVSTGIIQLLIFA SECY_ARCFU/73-471 DFQRFLVFVMIAVEAIPQI--AGGLLKPDLNLAAQl-----------gVSPGIISFLIFI Q8TRS4_METAC/72-470 GAQKFLVFVMIILEALPQL--LGGYIQPDPGLAATl-----------nVGLGVITLLLLV A0B9U7_METTP/75-515 GTQKALVFVMIVVEALPQI--TGGYLLPDQALATSl-----------gVSLSIISLIIFL SECY_HALMA/73-468 GLQKLLVLVMICLTGLPMV-FAGGFLPADTAVANSl-----------gIGTAGVQWLIFA Q2FSG8_METHJ/73-458 GLQKLMIFIMIVVEALPMI--VGGFLKPDPAIASAl----------fgGNSGVLAILIFI A2SPM5_METLZ/73-458 GLQKVLIFVMIILEALPNV--LGGWMSADPAVSAFf-----------gGNAGFVMLLIFL A0RUE4_CENSY/79-457 TATKMVSYVVIVVESSIYGIAVYGPGIADPS------------------------VLYIL A8ME75_CALMQ/77-461 ALTKLVAVIIAMFEGAFIM-STHQLTVAN----------------------AGLAFIVWL A3MUZ2_PYRCJ/70-435 LMLKWAALGIAALEATAYV-LGGQFGTVT----------------------PLGGVLIVL SECY_SULSO/73-449 EAQKGLAFIFILVESALFGYVLARTSTTINASIL--------------FIA----GIVIA SECY_SULAC/74-443 QAEKALALIFIIVESSLFGYVFTRATSNILLP-----------------------IIVVV A2BME2_HYPBU/73-444 GAQRTLALLFALLEAAAYV-IGCRFWISAFASSPEv----------cpPISTAVKIIVVL SECY_AERPE/73-434 SAQKVLALAFAALEAVAFT-VGGRYWVGTAIEP-----------------GPLDYALVSL A1RWR3_THEPD/75-456 GLQKLTAFLFAALEAAAYI-LGGVYGALT----------------------QQQQIIVFV SC61A_SCHPO/76-459 LVQKFLAIIIAFGQATAYV-LTGMYG------RPQd-----------lGAGIC--LLLIL A7E5Q2_SCLS1/76-459 TAQKLFAIILSMGQATVYV-FTGLYG------QPSd-----------lGAGVV--CLLIL Q5KC69_CRYNE/75-459 AAQKLFAMIISLGQATVYV-LTGLYG------SPSs-----------lGAGVC--LLLIL SC61A_ASHGO/75-460 IAQKVCAIVLTLGQAIVVV-LTGNYG------SVSn-----------lGIAIS--LLLIL Q59MJ6_CANAL/76-459 TAQKLLAILLAVGQATVYV-LTGMYG------PPSs-----------lGVGVC--SLLIL A7SJW4_NEMVE/75-458 GAQKLFGIIITIGQAVVYV-MTGMYG------DPSd-----------lGPGIC--LLIII A0CFY2_PARTE/73-456 AAQKLLSFIMAIAEGMAYI-WSGAYG------DINq-----------iGAGNA--ILILL Q22MG2_TETTH/151-538 GSQKLLGLIIAFFEAVAYV-WSGMYG------DIEk-----------vGYGNA--LLIVL A0CU87_PARTE/77-460 GAQKLLGILIAFGEAFAYV-WSGMYG------DLDk-----------lGAGNA--ILIII Q7RLN0_PLAYO/121-506 GAQKLLGLLITLGEAIAYV-VSGIYG------NLSe-----------iGTGHA--ILIIL Q4QGX4_LEIMA/77-467 GFQKMMGLVITAVEAVAYV-SSGMYG------DPSr-----------iGVVMC--GLIVL A5JEK2_NOSBO/75-457 AANRLISLIMTVGSAIVQV-LTGFYG------DPKa-----------lGWTYC--ILLMV A2DH65_TRIVA/75-462 AAQKLAGIIMTAFQAGNAI-WSGEYG------IRGe-----------iGFVNA--ALIMT Q2QM98_ORYSJ/88-448 ASCELLARCLAYVTNASRL-VIG---------IAAalgm-----cgsgGAGNA--ALVVL Q6AV46_ORYSJ/86-471 AAQKLLSIVITAGEATAYV-LSGAYG------SVGv-----------lGAGNA--VLVVL Q6C854_YARLI/70-454 SGQKIFALLLTFFHAIFLVFFAQTYGTISTDSAVS-------------ELSLGAAVLIVA SSH1_YEAST/78-465 SLTKVFAIVQYVILTNIFI-FAGYF-------GDD------------lSVVQI--GLINF Q6BT20_DEBHA/78-475 SGQKLTSFIFAIVYGAGYI-FSGYYNNVIKGYNPFn----------gdSVPVTTLVLIFL A5DE75_PICGU/20-414 TGQKLTSFILGIVYTAGLI-ASGYFAPALR--NQTgfe-------dsfPVTTY--VFIFL A3GFV9_PICST/78-476 TGQKLTSFVLAIVYGVGLI-YSGYYDNAIRGYDPLsd---------stPYGWY--GLILF A5DWJ5_LODEL/34-436 LGQKLTAWGLALIFSVGLI-YSGYYDNVIR--GYKvvgg-----sggvPIWSY--LIIFT Q5A2C9_CANAL/5-404 TGQKLTSFIFSLIFAIGLI-YSGYYDNAIR--GYNplq-------dgiPYGSY--ALILL Q74L41_LACJO/64-372 YLMQFLTMIITIIQAALLVFAFTNRRN------------------------GLEDFEMIL B3XPQ8_LACRE/65-377 KIQQWLTLGFAIIQSTAVTLGLKITTG------------------------TLDSLAVIL A1C3L4_STRPA/70-403 RLQFLLTLAIALLQSFGITNDSKFLLIFGYSH-------------------STLRIITII Q3DVD6_STRAG/65-395 FRQNVVMLVIAIIQGLAITISFQYHNGFS----------------------LTKLLLATM A5LN99_STRPN/64-389 RRKMYLTLMIAVIQSLAVSLRLPVQSSYSA---------------------ILVVLMNTI A3CM55_STRSV/64-391 RRRMLLTLVIALIQSVALVLNLPLQEAAGVDM-------------------TTIMVLDTL Q03HZ8_PEDPA/65-396 MIQRWISFVIALLQTLQFIYTIREHINFSGIKVW---------------GIDYNLIVAFF A5IW80_STAA9/64-384 YKERILTLILSVIQSYFVIHEYVSKERVH----------------------QDNIYLTIL Q4L9N9_STAHJ/61-383 YKERIITIVFAIFQSYFVISTYIHNNFIK----------------------DSNIILLML Q5HKR3_STAEQ/61-380 FKERALTLIISAAQGFYIIHSYINKHAIK----------------------DSNMLILLL Q9RSK8_DEIRA/68-413 QYTRYAAIALGAVQALFFSLYI--TSNPSFIAVGW-------------DPGLFTVLVMVL Q5SHQ8_THET8/71-413 QYTRIGGIALGAFQGFFLATAFLGAEGGRFLLPGW-------------SPGPFFWFVVVV SECY_CORGL/73-424 QYTRYLTVALALLQSSGIVALADREQLLGAGIRVLs-----------aDRNFFDLIVLVI A8LB12_FRASN/74-414 QYTRYLTVALGILQATGIVALARSGRL-----FPGcsa------qiipDTSLFRIVTIVI Q83NQ1_TROW8/73-424 QYTRYLTIGLAVLQSTTLITVARSGAL--FAASNSpacs-----slltDDSWYSTIIIVI Q8G3Z9_BIFLO/74-421 QYTRYLTIGLAVLQSTTILVTARSGAL-----FNYqcd------qvipDGSVFNLVVMVL A7B9M4_9ACTO/72-414 QYTRYLTIFLGILQATTTISLARSGQL-----FQScnh------diikDRSVMTFIMMII SECY_CHLTR/73-433 RMTRLFTLVLACVQSLLFAKFALRMNL--VVPGIVlpamls-lklfgvPWVFY--LTTVV Q1AU49_RUBXD/70-408 QYTRVFTLALSFIQSVAMVLFLRSGQFGPVLAG----------------AGALDLFLVVV Q8RIH6_FUSNN/75-411 QWTRYLTIALAIIQGTGVCLWLQSVGLIYNPGI-----------------SFF--VRTIT A6DRC9_9BACT/79-428 QYTRYMTIVICAVQSAMMAVAMHTPSK----LLGVpgfed---lvinkGSAFV--IQTTI C0ACZ0_9BACT/94-454 QYTRYATVLICLIQGALLILALENPTQLFGEGYDIaryge---ivlvdRTWFL--ISSVI Q1Q157_9BACT/75-434 QYTRIATVGLCLFQAFVMTRTLYTVEF-----NGVpvip-----vylqGVSFQ--LMAAI A6CGP8_9PLAN/77-435 EYTRYATVVICLVQSFFWIRTLAGGFG-----SGTslil-----dgyqGLYFQ--IVATI B4S5A8_PROA2/73-417 QYTRYGTVLIAALQAWGVSVSLASPSSFGTIVVP--------------DPGFFFMMTTVL Q2S3P5_SALRD/75-414 QLTRYGTIGITALQSIGYSINLLAGATGRAVVIN--------------STLFT--ITTVV A1ZGT4_9SPHI/72-404 QITRYLTIVITAAQAIGYIQATIPSNAIMVSQL-----------------SFT--ISTVI A6EHP4_9SPHI/71-408 QITRYLTVAITAVQAVGYVKTQVPMEAIVIDHT-----------------LFF--VMATF Q11QD2_CYTH3/72-411 QYTRILTIFITVAQSIGYLAATLDEGMIYEGMN-----------------TPFMNVVRIV Q1VTY0_9FLAO/73-421 QITRWLTIAITLVQGPGYIINLYNILPSSAFLMD---------------STFTFVVSSVI Q1NYZ7_9FLAO/72-422 NITKVLTILISLIQAPVYITILISSNIKENPYNLIli---------hcKKIFI--ITSII A5KHP6_CAMJE/62-402 QIIRYATIVITLVQSIGVAIGLQSLHG--RGGAGVim--------vedLNMFI--ALCAI A4EA78_9ACTN/52-389 QYSRYLTLALAILNSVGYLFLFKSFGISFNGAGA---------------PEIIFDLMIVG Q2GEC0_NEOSM/73-411 FYSKLVALFLAFFQGFIIVAGLERTKAFVGGNEE---------------FYSLLKYTSVL Q3YRM8_EHRCJ/72-412 NYIRYMTIFFCIVQGSVILLGLEKMNS-----ENSivv-------idpGLLFR--IVGIS Q5GSW3_WOLTR/77-416 SYIRYMTIVFCIFQSVTILIGLERM-------NREgtlv-----viepGVMFR--TVGIF Q0ANS0_MARMM/83-421 QYTRYLTVLLATGQAFAIAIGMNTPNS---EGVALal---------npGPFFL--ASTVI A7IPQ0_XANP2/80-418 QYTRYLTVVLAVFQAYGIAVGLEG-------SGSVva---------dpGWFFR--ITTVI SECY_RICCN/70-411 QLSRYLTVLLASFQAYGVAISLESIVT---NTGPVvi---------laGFFFR--ITTVI Q2G8W0_NOVAD/80-430 QYTRYGAVLLTAIQGWVLASGLEAYGA--SSGLQAvv---------npGLLFR--VGAVI A6E0Q6_9RHOB/73-411 QYTRYGTVALATLQSYGLAVSLQSGD------MVSn-----------pGMFFI--ASCMI Q1UZE8_9RICK/67-404 QITRYGTVILATIQGYGLSIGLQSSAD-----LVIn-----------pGLFFT--ITAVS Q3R245_XYLFA/76-424 QYSRIGAVILAVIQGGSIALALQNQTA--PGGAAVvy---------apGAAFV--MTAIV A4NK90_HAEIN/76-416 KYTRYATVVFATIQAVAISTGLPNM-----LSGLVp----------nvGFSFY--FTSVV Q057C4_BUCCC/64-407 QYTKYITFFLSIIQSIGVVISLPFLPGMKNIIVF---------------ADCYFYIIAVV Q8D1Z2_WIGBR/82-424 KYTRYGTLFLAIIQSISISISLPNMPG---MQELIi----------nkGIEFY--ITTIT Q6F7T2_ACIAD/83-426 QYTRYGTLLLALVQGVGMCAGLIS-------QGITl----------tsGLAFY--IPAVT Q6Q8W8_9GAMM/67-407 QYTRYGTAILAFIQASALAVTLSA-------SGLAy----------vpGPTFF--VSAVF A9BRX1_DELAS/74-413 QYTRYGTLGLAIFQSLGIAVALESSAG-----LVLs-----------pGFGFR--LTAVV Q7DDS8_NEIMB/73-410 KYTRYGTVLLAILQSLGVASFVFQ-------QGIVv----------tsSFEFH--VSTVV Q5NHU8_FRATT/74-416 QYTRYLTLALAIVQSFGIVAFVLHQ------DGLVtt---------nnMALFY--LTTIV Q7WZR8_9GAMM/64-388 SYLRYLTFMLSVIHSLVVSILFLEKSV-----VYY------------kKSVVY--LTIIL A5EX98_DICNV/69-412 QYTRYFTLFLAIMQGFAISRTVMAAGMTISAGS-----------------GFL--LTATI Q6MJ32_BDEBA/70-415 QYTRYATVALAIIQGYGISTWLMNSTS--PDGHPLvia------ptvaFLPFQ--IMTII B5EFS0_GEOBB/71-411 QYTRYGTIVLAVVQAFGISIGLEAMRG--PAGELVvp---------npGWGFR--LMTVI A3EVQ1_9BACT/75-412 RYTRYLTVLIALVQSFGIALGLEGMNNGQ---FVPh-----------pGWSFR--FIVVI Q1MPP6_LAWIP/71-412 QYTRYGTVIITLIQGIGIAIGLESMYS--PTNIPIvl---------epGWVFR--IVTVL SECY_AQUAE/71-412 EYTKYLTLFVATVQSLGIAFWIRGQVS--PKGIPVve---------npGISFI--LITVL Q01WB2_SOLUE/74-438 QWTRYLTIILSILQSFGISQGLMGM------QQGIvi---------npGIGFV--FLTIL Q08ZH8_STIAU/26-370 QYTRYGSIVLSVVQGIGISRWLASLGR--SDAGQSgfnqi---vvpddSAWFT--FMTVI A6GCG0_9DELT/70-411 QYSRYGTVGLALVQGYFMASWLEGQNT-----PGQtlv-------letGLPFK--LMTML Q04PV8_LEPBJ/72-436 QYTKYGTVILCAIQSLAVIQLAKGWST--GTELEParypg--linssvVPYFY--LIGIL SECY_BORBU/72-409 KYTKYLTIVAAVVQGYATSLYAKGIPG-----AVTi-----------pFYRYI--FVAIL Q73PL2_TREDE/73-413 VWTRIVTVFVALLQSSAVGTWARAIPGAVVISS-----------------PVLHLFITMV Q67JW3_SYMTH/69-405 QYTRYGAVVLGLVQAFGIGYALRSYGAFYSNS-------------------WTTLFVIMV A7FQ38_CLOB1/69-409 QYTRYGAVILAVIQAFSTYAIIARAGALRDGS-------------------KLNLFIIII A6LPT1_CLOB8/69-416 NATRYVSLGIAFILAYGIFATISSSGATVGLT-------------------AIQKTIVVF Q0SQG4_CLOPS/69-409 KITRYASIVIGAITAYGSYVIIHNVGALKSNS-------------------PVSMFLILL A9KJH4_CLOPH/71-425 EISRYVTIGLSIIESVAMVIGFSGSGALEGGL------------------TFTNIVVITA A7VH89_9CLOT/71-420 AITRFLTIGLAILESAGLAINFGRKGFMDSYN-------------------FWTVLTMIV A6BIS2_9FIRM/71-421 AITRYLTVGLALIESGAMAVGFGRQGLLVKYN-------------------FVNAAIVVL A7VR33_9CLOT/71-423 AITRYVAVVLGLVQGLAYYLYLRGSSY-----EGTpivty---tegaaGVFTA--IVIVL A6NXF0_9BACE/71-437 AITRYTTVAIALLQGFGYFTLINANGLVGSDLP-----------------TWLAGIIIVL Q250L2_DESHY/70-413 QYTRYGTVILGFIQGFGMTFGLRGALIIPKPGM-----------------EWAIYLLVAL Q8R7X3_THETN/69-402 QYTRYLTVVLALIQAIGMTIGLRSAVINPT---------------------FFRLTVIVI A4XLR1_CALS8/69-419 EWTRYGTAILAFLQAVGIYFGLKNAQGLTGGVPVIt----------tqGQGFLGFITITL A3DJJ2_CLOTH/71-411 EYTRYGAVVLGFLQATAFYFGLAQAVNERN---------------------VLSFITITL A8MLG0_ALKOO/69-408 QYQRYATIILALIQATGISVGLFRGALINQD--------------------TFSIIVVIL Q18CH6_CLOD6/69-406 KYTKYTALALAVVQALGITLGIVRSALISNS--------------------VFFITTVVI B8D0S8_HALOH/72-406 QYTRYGTVVLAIIQAFGITMLIGRHNVIVNPN-------------------LFNLMLIVI A9B431_HERA2/73-422 --IMVSGSMFLVWMGELIDE-RGI-G-NGLSMIIFGGIV-TALPSM-------------- A8CRX1_9CHLR/78-422 --SIVAGTMFMVWLGEQITS-YGI-G-NGISLIIFAGIV-AGLPDM-------------- A2Y4E5_ORYSI/132-498 --FLVLGAMTMTWICDTISE-SGF-G-HGSSLIICVGIL-TGYTDT-------------- Q7UZW2_PROMP/80-422 --ALVTGSMIVMWFSEIITE-KGI-G-QGASLVIFLNIV-ATLPKA-------------- Q7NKT4_GLOVI/79-416 --ALTAGAIFVMWLGELITE-KGI-G-NGASLLIFVSIV-SSLPTA-------------- SECY_GUITH/68-404 --TLTIGSMLIMWFSEQITE-KGI-G-NGPSLLIFINII-SGLPKL-------------- SECY_CYACA/62-394 --ILISGAMLVMWLADNISY-KGI-G-TGASVIIFVNIA-SAFAKF-------------- Q85FU6_CYAME/42-325 --LIVSGAMLVMWLAEQMTH-KGI-G-NGTSIFVCSNIA-ANF----------------- A0T0J6_PHATR/72-407 --WLTTGAMIVLWLSELITD-YGL-G-NGASLLIYTNII-SSLPNL-------------- SECY_CYAPA/109-459 --ALTLGAVIVMIIAEQITE-IGL-T-NGSSLLIFINII-ARIPNS-------------- Q4G351_EMIHU/63-407 --SLTVGSILSMWFAELITE-ESL-G-NGSSMIIFINIV-GGIPNN-------------- SECY_PAVLU/66-404 --AVTTGSLVLVWLSEVITE-RGI-G-NGSSLLILIGNL-SRFRFLin------------ Q6B8X0_GRATL/62-395 --ALGTGSLIIMWFAEIITE-YGI-G-NGASLLIFQNII-SGIPKN-------------- SECY_ANTSP/62-390 --SLTTSSMIAMWFSEIISE-YGV-G-NGPSLLIFQNII-SSIPKN-------------- A4RW47_OSTLU/65-398 --ALTAGAMILMYIGELLNE-IKL-G-NGTSLLIFANIV-SALPSS-------------- A7PFA4_VITVI/131-465 --LLTLGSVLTTYIGERISD-LKL-G-NGTSLLIFTSII-SYLPAS-------------- A7HM32_FERNB/75-404 --SLVAGTMFLLWIGDRITE-KGI-G-NGVSIMIFAGIV-SRYPAY-------------- A3CK84_STRSV/69-416 --LLATGSMIVTWLGEQITD-KGY-G-NGVSMIIFAGIV-SAIPDMik------------ Q5FM71_LACAC/68-415 --IMTAGTMLLTWLGDEITD-KGL-G-NGVSVIIFAGII-ARLPSGlw------------ Q03ZM6_LEUMM/68-416 gsVMTIGTFFAMWLGEMITE-KGL-G-NGVSMIIFAGII-AQAPEGfy------------ SECY_STAA8/69-413 --VLTAGTAFLIWLGDQITQ-FGV-G-NGISIIIFAGIL-STLPAS-------------- Q4MG72_BACCE/68-415 --VLTAGTAFLLWLGEQITA-NGV-G-NGISMIIFAGLV-AAIPNVan------------ Q6F1X5_MESFL/92-454 --VMLAGSYFMLWIADQITI-KGV-G-NGISIVIFIGII-VQLPNQik------------ Q6KI36_MYCMO/87-436 --ILIAGTVFSIFIGDQITD-KGV-G-NGTTLLIFTGIV-ITLPTQft------------ Q4A5I3_MYCS5/83-437 --ILISASLFALFLSEQITN-KGV-G-NGTSIIIMTGIA-ARLPFQmq------------ Q98Q01_MYCPU/90-438 --ILVAGSLFTLFLSEQITD-KGI-G-NGTSLIIFSGIS-LSLPSQfr------------ Q4AAF9_MYCHJ/85-434 --VLVAGSLFSLFLAEQITD-KGV-G-NGTSLLIFSGIV-VGLPRRfq------------ Q9PQP1_UREPA/76-434 --LMVGGTYISLFLADLISK-KGV-G-NGITLLILTGIV-ASLFNHfi------------ SECY_MYCGE/81-430 --AMTAGTYMAVFLGDTISK-KGV-G-NGITLLILSGIL-SQLPQGfi------------ Q8EUD2_MYCPE/81-433 --GMTAGTYLTIFISDIISK-RGV-G-NGVTLIILSGIV-ASIYPNft------------ Q7X4E3_9MOLU/69-399 --FLTVGVFISIWLADLITS-KGL-G-NGISILIAVGMV-DKLFKT-------------- Q5Q069_ASTYP/59-398 --IATAGVAILIWFADLINS-KGI-G-NGTSILIVVSMS-HSLINLfa------------ O21257_RECAM/57-372 --FLVIGSCFLYFFAKLINI-YGI-G-KGLSFIIFINIV-GSFIDI-------------- Q74NB9_NANEQ/69-457 --QLMLGVILAYLLDDLSQK-WGF-T-SGINLFILATVS-RELFVQlfnpltqip----- Q2EMT2_METVO/30-379 --QLAIGAILLIYLDEIVSR-YGI-G-SGIGLFIAAGVS-QTIFVGalg----------- A5UL65_METS3/72-433 --QLVIGAILIIYLDEVISK-WGF-G-SGIGLFIAAGVC-EAIIVGtfsfipg------- SECY_METTH/73-436 --QLTIGGILIIFLDEVVSK-WGF-G-SGVGLFIAAGVS-QEIIVGafnplsap------ SECY_PYRAB/72-448 --QLAFGGIILIVLDELVSK-WGI-G-SGISLFIAAGVS-QRILTRslnpltdpnii--- Q8TZA9_METKA/75-435 --QLALGGILVIFLDEVVSK-WGI-G-SGVGLFIVAGVS-SQIIIGafnplpsp------ Q9HIT0_THEAC/82-514 --QLFFGSYLVFLMDEVVSK-YGI-G-SGISLFIAADVS-EQLFIGafnwqalnnal--- Q2QAQ7_9EURY/161-583 --QLFIGSLLVFLLDELVSK-WGI-G-SGISLFIAAGVA-QSTFVGtlsplavnpg---- Q0W1W5_UNCMA/75-487 --QVALGGVLILYMDEIVSK-WGI-G-SGVSLFIVAGIA-QALVGGifnwnppypgqamg SECY_ARCFU/73-471 --QLFIGGVLIVYMDEVVSK-WGI-G-SGVSLFILAGIA-QSIVVGlfnwvipp------ Q8TRS4_METAC/72-470 --QIFIGGTLILFMDEVVSK-WGI-G-SGVGLFIVAGIS-QQIVTGifnwefe------- A0B9U7_METTP/75-515 --QVCLGGVLILYMDEVVSK-WGI-G-SGVGLFIVAGVS-QQLVTGlfnwatg------- SECY_HALMA/73-468 --QMFVGGVLILFMDEVISK-WGV-G-SGIGLFIVAGVS-QRLVGGlltapf-------- Q2FSG8_METHJ/73-458 --QICIGGVLIFLMDEVVTK-WGI-G-SGVGLFIIAGIS-EAIINGfinwapv------- A2SPM5_METLZ/73-458 --QICIGGVLVMFMDEVVSK-WGI-G-SGVGLFIVAGVA-QGLINGffnweat------- A0RUE4_CENSY/79-457 igQLMASSIIIMFLDELIQKgWGL-G-SGISLFIMAGVA-QQILWSlfsplpa------- A8ME75_CALMQ/77-461 --QMLFGAVIVILLDDLISKgWGI-G-SGISLFILISII-RSIFQStfmpvtv------- A3MUZ2_PYRCJ/70-435 --QLLLATVIILLLDDLMSKgWGI-G-SAISLIIFLGVS-RQIFLSlfswdtvqd----- SECY_SULSO/73-449 --QLIVATYLILLLDELIQKgWGL-G-SGVSLFILAGVM-KIMFWDmfgiasvs------ SECY_SULAC/74-443 --QLIIASYIILLLDEMIQKgWGL-G-SGVSLFIMAGIM-KVIFWNmfgivsvq------ A2BME2_HYPBU/73-444 --QLVFATLVLMWFDEMIRNgWGI-G-SALSLFIVASVV-KGLFWQlagstkvat----- SECY_AERPE/73-434 --QLFLGALLVIYFDEVMQKgWGI-G-SAISLFILAGVA-QGVVWSifgtipg------- A1RWR3_THEPD/75-456 --QLFVASTFVILMNDMLEKgWGI-G-SAVSLFIAAGVA-QQIFWElfspigpl------ SC61A_SCHPO/76-459 --QLAAASLIVLLLDELLQKgYGL-G-SGISLFIATINC-ENIFWKafspttyhi----- A7E5Q2_SCLS1/76-459 --QLVVAGLIVILLDELLQKgYGL-G-SGISLFIATNIC-ESIIWKafspttint----- Q5KC69_CRYNE/75-459 --QLVSASLIVILLDELLTKgYGL-G-SGISLFIATNIC-ESIVWKafspntvnt----- SC61A_ASHGO/75-460 --QLVFASFIVLLLDELLIKgYGL-G-SGISLFTATNIA-EQIFWKafapttvnn----- Q59MJ6_CANAL/76-459 --QLVFASTIVILLDELLQKgYGL-G-SGVSLFTATNTC-EQVFWKafapttsts----- A7SJW4_NEMVE/75-458 --QLFCAGLIVLLLDELLQKgYGL-G-SGISLFIATNIC-ETIVWKafspatint----- A0CFY2_PARTE/73-456 --QLTFAGVIVTMLDEMLQKgYGL-G-SGISLFIATNVS-ENILWKsfspitlst----- Q22MG2_TETTH/151-538 --QLTFAGIIVILLDDLLSKgHGL-GnSAISVFIAINIC-ETIIWKsfspitypip---- A0CU87_PARTE/77-460 --QLVFSAIVMIMIDELLSKgYGI-GnSGTSLFIAINIC-ENIMWKafspithkt----- Q7RLN0_PLAYO/121-506 --QLFFAGVVVILLDELLQKgYGL-G-SGISLFIATNIC-ETIMWKsfspttint----- Q4QGX4_LEIMA/77-467 --QLMVATMICILLDELLQKgWGI-G-SGTSLFIATNVC-DTIIWKafspstint----- A5JEK2_NOSBO/75-457 --QLIFSGVIIILLDELLQKgYGL-G-NGVNLFIASNVC-ESIMWRafspkvfft----- A2DH65_TRIVA/75-462 --QLVSSAIVVILLDELCQNgYGI-G-SGISLFICTNIC-EMIMWRlfsfnhysm----- Q2QM98_ORYSJ/88-448 --QLFAGGVVVVLADLLHETgYGVeGvSAASLLIATNAC-ERAVSHlfspvklrl----- Q6AV46_ORYSJ/86-471 --QLVLGGMVAIFLDELLQKgYGF-G-SGISLFTAANTC-EGVVTRalspatmdr----- Q6C854_YARLI/70-454 --QLTAAGLVLILLGEIVDKgYSF-G-SGSGLFTALSVS-QNFMWQnlallkvhqefvgs SSH1_YEAST/78-465 --QLVGAGIFTTLLAEVIDKgFGF-S-SGAMIINTVVIA-TNLVADtfgvsqikvg---- Q6BT20_DEBHA/78-475 --QIVTMSFVTTLMVEIFDKgYCF-G-SGVLCFVALQVA-TNLIRDvvglelvslp---- A5DE75_PICGU/20-414 --QVFVMSAVMTLLVEVFDKgYGF-G-SGILCFIALQAA-SDLVKNiiglevvkla---- A3GFV9_PICST/78-476 --QFLSWSFIITLIVEVFDKgYAF-G-SGALSFLALQTA-TNLIAElvgleifpin---- A5DWJ5_LODEL/34-436 --QIFTWQIVLTLIVEIFDKgYGF-G-SGILSFLALQNA-TSFIAElvglemfpvv---- Q5A2C9_CANAL/5-404 --QITAWSWIVTLLVEIFDKgYSF-G-SGILCFLAIQSS-TNFIANllglenfpvv---- Q74L41_LACJO/64-372 --ILSAGSCLVVWLCYRNMK-YGV-G-ASAPVILTSILN-GAIP---------------- B3XPQ8_LACRE/65-377 --MLTAGSMFVVWLGNMNMK-FGI-G-GTITLILFNIIS-GSIP---------------- A1C3L4_STRPA/70-403 --LLTTGTFILNWLCKINSE-RGI-G--GMTVVILVNMI-LTFQSN-------------- Q3DVD6_STRAG/65-395 --ILVTGAYIISWIGNLNAE-YGF-G--GMTILVVVGML-VGQFNN-------------- A5LN99_STRPN/64-389 --LLIAGTFFLVWLSDLNAS-MGI-G--GSIVILLSSMV-LNIPQD-------------- A3CM55_STRSV/64-391 --VLMAGTYFLIWLTDLNAA-MGL-G--GSIMIVMASMI-AYIPQD-------------- Q03HZ8_PEDPA/65-396 --VLVAGAMIVAWMSDMITK-YGI-G--GSGVLILPGMI-DSIPRV-------------- A5IW80_STAA9/64-384 --ILVTGTMLLVWLADKNSR-YGI---AGPMPIVMVSII-KSMMH--------------- Q4L9N9_STAHJ/61-383 --ILVAGTMLLVWLADQNIT-YGI---CGPMPIVLTSLI-KSLFNN-------------- Q5HKR3_STAEQ/61-380 --VLITGTLLMVWLADQNTT-YGI---SGPMPIVLMSLV-KSIFN--------------- Q9RSK8_DEIRA/68-413 --TQVAGIAFTMWIGERITE-VGI-G-NGISLIITAGII-AVYPRE-------------- Q5SHQ8_THET8/71-413 --TQVAGIALLLWMAERITE-YGI-G-NGTSLIIFAGIVvEWLPQ--------------- SECY_CORGL/73-424 --TMTAGAVLVMWMGELITE-KGV-G-NGMSLLIFAGIA-TRLPTDgm------------ A8LB12_FRASN/74-414 --TMTAGTAVIMWMGELITA-RGV-G-NGMSLLIFTSIA-AALPSQgg------------ Q83NQ1_TROW8/73-424 --VMTAGTGLIMWLGELITE-RGI-G-NGMSILIFTSIA-AGFPGV-------------- Q8G3Z9_BIFLO/74-421 --IMTGGTGLIMWMAELVTD-KGI-G-QGMSILIFMSIC-SGF----------------- A7B9M4_9ACTO/72-414 --VMMAGTGVIMWLGELITE-RGI-G-NGMSLLIFTSIA-ARLPEQ-------------- SECY_CHLTR/73-433 --VMITGTLLLMWVGEQISD-KGI-G-NGISLIITLGIL-ASFPSV-------------- Q1AU49_RUBXD/70-408 --TLTTGVMVTMWFGELITQ-RGL-G-NGISLIITASIL-SQAPNA-------------- Q8RIH6_FUSNN/75-411 --TLTAGTVFLMWVGEQISI-KGI-G-NGVSLIIFLNVI-SRAPSS-------------- A6DRC9_9BACT/79-428 --IVTASAILIMWLGEQITD-KGL-G-NGASIIITINVL-SSMPQA-------------- C0ACZ0_9BACT/94-454 --FMTAGTMLLTWLGEQITQ-RGI-G-NGISLLITIGII-SDLPGA-------------- Q1Q157_9BACT/75-434 --LLTTGTMILMWIGEQIEE-HGI-G-SGISIVIMVGII-ERLPWAf------------- A6CGP8_9PLAN/77-435 --TMTTGTVFLMWIGEQIDA-YGI-G-NGISLLIMAGIL-ARMPQAgw------------ B4S5A8_PROA2/73-417 --ILTASTVFVMWLGEKITE-RGI-G-NGISLIIMIGIL-ARFPQS-------------- Q2S3P5_SALRD/75-414 --VLTSGTAFVMWLGERISE-DGI-G-NGISLIITIGII-AFLPQA-------------- A1ZGT4_9SPHI/72-404 --ILTAGTVFTMWLGEKIDD-RGI-G-QGISLLIMIGII-SRLPQS-------------- A6EHP4_9SPHI/71-408 --VLAAGTLFVMWLGEKITD-KGI-G-NGISLIIMVGII-ARLPIA-------------- Q11QD2_CYTH3/72-411 --TLISGTMFCMWIGERITE-KGI-G-NGISMLIMIGIV-SRLPFA-------------- Q1VTY0_9FLAO/73-421 --ILTTGCIFAMWLGEKITD-KGI-G-NGISLLIMVGII-ATLPQA-------------- Q1NYZ7_9FLAO/72-422 --CITTGTFFTMWLGEKIND-KGI-G-NGNSLIIISGIL-SRFIYS-------------- A5KHP6_CAMJE/62-402 --SMLAGTMLLMWLGEQITQ-RGI-G-NGISLIIFAGIV-SGIPRA-------------- A4EA78_9ACTN/52-389 --TLTAGAMLIMWIGELITQ-RGI-G-NGMSLIIFANIM-AGLPQA-------------- Q2GEC0_NEOSM/73-411 --TLVCGTFSLIWLGQQINS-RGI-G-NGMSLIIFAGIV-AEMPAI-------------- Q3YRM8_EHRCJ/72-412 --SLLGGTMFLLWLGERINK-NGI-G-NGVSMIIFTGIV-AELPGS-------------- Q5GSW3_WOLTR/77-416 --SLLGGTMFLIWLGEQISA-SGI-G-NGISLIIFTGII-SELHNA-------------- Q0ANS0_MARMM/83-421 --TLVGATMLLLWLGEQITA-RGV-G-NGVSLIIFAGII-SAVPGV-------------- A7IPQ0_XANP2/80-418 --TLTGGTMFLMWLGEQITS-RGI-G-NGTSLIIFGGIV-AELPGA-------------- SECY_RICCN/70-411 --TLVVGTMLLMWLGEQITQ-RGI-G-NGTSLIIFIGII-SGVPSA-------------- Q2G8W0_NOVAD/80-430 --SLIGGTMFLLWLGEQITS-RGI-G-NGVSLIIMAGIV-AQMPKF-------------- A6E0Q6_9RHOB/73-411 --TLIGGTMFLMWLGEQITA-RGV-G-NGISLIIFVGII-AEVPAA-------------- Q1UZE8_9RICK/67-404 --TIVAGTMFLMWLGEQITQ-RGI-G-NGISLIIFAGIV-AEIPRA-------------- Q3R245_XYLFA/76-424 --ALTAGTVFLMWVGEQVTE-RGI-G-NGVSMIIFAGIV-AGLPGS-------------- A4NK90_HAEIN/76-416 --SLVTGTMFLMWLGEQITE-RGI-G-NGISILVFGGIV-AGLPSA-------------- Q057C4_BUCCC/64-407 --SLVTGTIFLMWLGELITT-KGV-G-NGVSLIIFSGII-SGLPAS-------------- Q8D1Z2_WIGBR/82-424 --SLVTGTIFLMWLGEQITS-RGI-G-NGISILIFSGII-AGLPIE-------------- Q6F7T2_ACIAD/83-426 --SLVAGTMFLMWLGEQITE-RGI-G-NGISMIIFAGIV-AGLPNQ-------------- Q6Q8W8_9GAMM/67-407 --SVVAGTMFLMWLGEQVSD-RGI-G-NGISIIIATSIL-TGIPGA-------------- A9BRX1_DELAS/74-413 --SLTAGTMFLMWLGEQITE-RGL-G-NGISILIFGGIA-AGLPSS-------------- Q7DDS8_NEIMB/73-410 --SLVTGTMFLMWLGEQITE-RGI-G-NGISLIITAGIA-SGIPSG-------------- Q5NHU8_FRATT/74-416 --SVTTGSMFLMWLGEQITE-RGV-G-NGISLLIFSGIV-ANLPFE-------------- Q7WZR8_9GAMM/64-388 --TFVTGAIFLMWLGEQITD-KGI-G-NGISLIILSGLV-SVIPNA-------------- A5EX98_DICNV/69-412 --GLTAGALFMMWLGEQITE-RGI-G-NGISMLIFGGIA-VNMPSG-------------- Q6MJ32_BDEBA/70-415 --TLTAGTCFIMWLGEQITE-RGI-G-NGTSLIIFTGIA-AAIPGG-------------- B5EFS0_GEOBB/71-411 --TLTAGTAFIMWLGEQMSE-KGI-G-NGISLIIFAGIV-ARIPTA-------------- A3EVQ1_9BACT/75-412 --TLTAATTFVMWIGEQITE-RGV-G-NGISLIIFSGII-ARLPAA-------------- Q1MPP6_LAWIP/71-412 --TLTAGTVLIMWLGEQISE-KGI-G-NGISLIIFSGIV-VGIPGA-------------- SECY_AQUAE/71-412 --TLVAGTMFLVWIADRITE-KGI-G-NGASLIIFAGIV-ANFPNA-------------- Q01WB2_SOLUE/74-438 --SLTTGTAFIMWLGEQISE-RGV-G-NGMSLIIFTGIV-VGLPNA-------------- Q08ZH8_STIAU/26-370 --SLTAGTAFIMWLGERITE-RGI-G-NGISLIIFAGIV-AGLLPN-------------- A6GCG0_9DELT/70-411 --SLTAGTCFLMWLGEQITE-RGI-G-NGISLIIFAGII-ADMPTA-------------- Q04PV8_LEPBJ/72-436 --SITTGTVLLIWLGEQITE-RGI-G-NGISLLIFAGII-GRLPES-------------- SECY_BORBU/72-409 --TVTTGTFILLWFGEQINQ-RGV-G-NGTSLIIFSGIV-VRLQAA-------------- Q73PL2_TREDE/73-413 --TVTTGTMITVWMGEQITA-RGI-G-NGISMLIFAGIV-ARLPQA-------------- Q67JW3_SYMTH/69-405 --SLTAGTALVMWIGEEITE-KGI-G-NGISLIIFANIV-SRLPYS-------------- A7FQ38_CLOB1/69-409 --TVTTASTFLMWFGDKITE-KGI-G-NGISLIIFVNIV-SRFPST-------------- A6LPT1_CLOB8/69-416 --ALVVGTTFCMWLGDQLTV-KGI-G-NGTSILIFVNII-SRVPAT-------------- Q0SQG4_CLOPS/69-409 --TLVVGSTFLMWLGDQITV-KGV-G-NGTSLIIFANIL-SSLPMT-------------- A9KJH4_CLOPH/71-425 --SFTAGSAILMWLGERITE-KGV-G-NGISVILLINIV-ANMPRD-------------- A7VH89_9CLOT/71-420 --ILTGGSAFVMWLGERVTD-RGV-G-NGISIILLINIV-STMPND-------------- A6BIS2_9FIRM/71-421 --TLTAGSAFLMWIGERITE-KGV-G-NGISIVLVINII-SRIPSD-------------- A7VR33_9CLOT/71-423 --VFTAGTAMMMWLGEQINQ-KGI-G-NGISILLFAGIV-ARLPDTvn------------ A6NXF0_9BACE/71-437 --TFTAGSAFVMWLGEQITE-FGI-G-NGISIILFAGIV-SRFPSM-------------- Q250L2_DESHY/70-413 --ILTAGTAFLMWLGERITE-NGI-G-NGISLIIFAGIV-AGVPDA-------------- Q8R7X3_THETN/69-402 --TLTAGTTFLMWLGERITE-NGL-G-NGSSLIIFAGII-SRIPNM-------------- A4XLR1_CALS8/69-419 --ALTAGTVFLMWIGEQITE-NGI-G-NGISLLIFAGII-SRIPNG-------------- A3DJJ2_CLOTH/71-411 --TFTAGTAFLMWLGEQITE-YGI-G-NGISLLIFAGIV-SRGPRG-------------- A8MLG0_ALKOO/69-408 --TLTAGTAFLMWLGEQITE-KGI-G-NGISLLIFAGII-ASLPSS-------------- Q18CH6_CLOD6/69-406 --TLVSASMLVMWIGDKITE-KGI-G-NGSSVIIFAGII-SRIPTD-------------- B8D0S8_HALOH/72-406 --SLTAGTAFLMWLGEQITD-KGI-G-NGISIIIFTSII-SRFPSY-------------- A9B431_HERA2/73-422 ------------------VY---QAITTSS----------------------SGNNVIG- A8CRX1_9CHLR/78-422 ------------------IG---RGLMASD-------------------------QFAG- A2Y4E5_ORYSI/132-498 ------------------LH---KMLTQFS---------------------GNWYSCWH- Q7UZW2_PROMP/80-422 ------------------LS---STIEKAQ--------------------TGDRGDVLG- Q7NKT4_GLOVI/79-416 ------------------FS---QTFQLLQ---------------------ADSSRVAG- SECY_GUITH/68-404 ------------------LQ---SQIQSTR----------------------LNIQALD- SECY_CYACA/62-394 ------------------LL---NQLFVHS------------------------IKFLD- Q85FU6_CYAME/42-325 ------------------LH---HPIEAPW------------------------------ A0T0J6_PHATR/72-407 ------------------SK---TILSENS-----------------------QNFTLG- SECY_CYAPA/109-459 ------------------IE---QLFNSNI------------------NWT--FPMISS- Q4G351_EMIHU/63-407 ------------------LSslsKTFSAAN----------------------LASAIPL- SECY_PAVLU/66-404 ----------------kdDF---DSLNVSS------------------------QSNLY- Q6B8X0_GRATL/62-395 ------------------IQ---NYKINIY----------------------DKQTIIN- SECY_ANTSP/62-390 ------------------LQ---NYTFNIG----------------------TTNTVLN- A4RW47_OSTLU/65-398 ------------------VG---QTVSMAQ----------------------EKGDSSV- A7PFA4_VITVI/131-465 ------------------FG---RTVAQAF----------------------QDGNYIG- A7HM32_FERNB/75-404 ------------------FR---SAVLG-------------------------NLNIFG- A3CK84_STRSV/69-416 ----------------giYE---DYFVNIP-------------------SERLTSSFIF- Q5FM71_LACAC/68-415 ----------------qiYK---EEIINNS------------------ASDR-WQGILF- Q03ZM6_LEUMM/68-416 ----------------eiFK---ENILQAD------------------SSDM-LNGWIF- SECY_STAA8/69-413 ------------------LI---QFGQTAF-----------------vGQEDTSLAWLK- Q4MG72_BACCE/68-415 ----------------qiYL---QQFQNAG--------------------DQLFMHIIK- Q6F1X5_MESFL/92-454 ----------------atYD---FWIPSNE------------------SINVFFDGIIK- Q6KI36_MYCMO/87-436 ----------------atFN---ALVGEQQ------------------RVSSLSNGIVT- Q4A5I3_MYCS5/83-437 ----------------naFK---IFVGDLS-------------------QSGTLVGILN- Q98Q01_MYCPU/90-438 ----------------aaFN---VLVGTNK--------------------TTLFTGLIH- Q4AAF9_MYCHJ/85-434 ----------------haFE---YLVDLSF-------------------SSSLISQVLS- Q9PQP1_UREPA/76-434 ----------------aiFS---NLGSLTS---------------------SKVSQIIG- SECY_MYCGE/81-430 ----------------aaYN---VLSGIVI------------------TLTPQLTAAIS- Q8EUD2_MYCPE/81-433 ----------------svFQ---VLTGSSQ-------------------ISNQLLRYFS- Q7X4E3_9MOLU/69-399 ------------------FK---YLLSNSN-----------------------GFETQR- Q5Q069_ASTYP/59-398 ----------------nlNK---SYLSKNT---------------------FLTLKTFN- O21257_RECAM/57-372 ------------------FY---KYLIQIE-----------------------TLNVKY- Q74NB9_NANEQ/69-457 ---------gtptppigkIP---QIFYFIS-------------------QGLYTEAIVV- Q2EMT2_METVO/30-379 --------------pqgyLW---KFFSALV-------------------SGSMGPALEY- A5UL65_METS3/72-433 ----------pggvyggaIP---AFIQSFW-----------------------SSSIDF- SECY_METTH/73-436 ---------tqpgvpagrIT---GFLYLLF-------------------TGQSPDFQYY- SECY_PYRAB/72-448 ------dpltgkpaivgaIP---YFIQHIL--------------------KGDLKGALYr Q8TZA9_METKA/75-435 ---------qqpgrpagaVW---AFLYSAM---------------------QGTPDWTL- Q9HIT0_THEAC/82-514 -------tysltnppagaFP---KMFYIIMhss-----------ssylLT-NGVVQILF- Q2QAQ7_9EURY/161-583 -------ayglqnppagtLP---MIFYTLRtat-----------fsemVTANGFESILLg Q0W1W5_UNCMA/75-487 lnvdiaglgarenlpigiIF---RWEWLLNnig-----------lsqlLTGENLIVLLY- SECY_ARCFU/73-471 ----------nsampagiIP---RWIWIAQnyp-----------ldqlFTGSGLAFLLI- Q8TRS4_METAC/72-470 -----------eglpvglIP---KWIYIAQntg-----------adylFSGEGLMFLLV- A0B9U7_METTP/75-515 ----------dgglpigiVP---KWISIIRlgli---------gldeiFTAEGLKFIFV- SECY_HALMA/73-468 -----------lgnsegiIY---TWYLFITgerg----------tgpvLAADGLQTVLL- Q2FSG8_METHJ/73-458 ----------ndmypvgfFP---RLFAVVL---------------------DGANFIQY- A2SPM5_METLZ/73-458 ----------tdqfavgfFP---RLFQVIA---------------------DGSNFIEY- A0RUE4_CENSY/79-457 ----------gdgfavgiFP---FIGQWAS------------------VGMGNFEDIFFr A8ME75_CALMQ/77-461 ----------gagellgiIP---ALVAAVYsa-------------avsHTLAPLLSIVYr A3MUZ2_PYRCJ/70-435 --------sngntqvfglLP---ALGVALYdl-------------ftsGNANTLLGLVNr SECY_SULSO/73-449 ----------sqnlpigfFP---ALFTALA-------------------SHSDVLNLIVn SECY_SULAC/74-443 ----------sqnlpvgfFP---LLVSYIT-------------------SGRNLQEIVLn A2BME2_HYPBU/73-444 --------pegqpvyygwLA---HVVSTGD-----------------------LGVLRR- SECY_AERPE/73-434 -----------vaqdyglVP---AIISNPD-----------------------LTLLARp A1RWR3_THEPD/75-456 ----------gdglyyglFP---SLFSALV-----------------sGNSTLLMHVVVr SC61A_SCHPO/76-459 ---------angvqfegaVI---NFVYVMFt---------------wdNKAAALYQAFFr A7E5Q2_SCLS1/76-459 ---------grgpefegaVI---ALFHLLLt---------------wpNKQRALQEAFYr Q5KC69_CRYNE/75-459 ---------grgpefegaII---ALIHLLFt---------------wnDKTRALKEAFYr SC61A_ASHGO/75-460 ---------grgtefegaVV---ALFHLLSv---------------rkDKKRALVEAFYr Q59MJ6_CANAL/76-459 ---------akgtefdgaVV---AMFHLLGs---------------rkDKKRALIESFYr A7SJW4_NEMVE/75-458 ---------grgtefegaVI---ALFHLLAt---------------rtDKVRGLREAFYr A0CFY2_PARTE/73-456 ---------eagtqfegaII---NFFHLLFt---------------kqNTLQALYYAFFr Q22MG2_TETTH/151-538 --------gfekeqyegaIL---NLFHSLFa---------------idNKFVALQNAFYr A0CU87_PARTE/77-460 ---------elgleyegaII---ALLHGLFv---------------qsDKISALQSAILr Q7RLN0_PLAYO/121-506 ---------dkgiefegaII---SLIYCLFt---------------efNKISALKKSFYr Q4QGX4_LEIMA/77-467 ---------grgaefegaII---AFFHLLVs---------------rtDKVRALREAFYr A5JEK2_NOSBO/75-457 ---------grgiefegsLI---AFFHLLIv---------------rkNKFAALYEAFFr A2DH65_TRIVA/75-462 ---------grgteyeglVI---AFFHYLFt---------------rkNKLRALRDIVFr Q2QM98_ORYSJ/88-448 --------agagpefegpVF---AVTHRVAaap-----------pswrHKAGALLFTLLr Q6AV46_ORYSJ/86-471 ---------grgaefvgaVT---AAAHLLAt---------------raRKLSAVREAFFr Q6C854_YARLI/70-454 ---ipallmglwknglfnFG---GSYRYVI-------------------ENSFFRQNLP- SSH1_YEAST/78-465 --------eddqteaqgaLI---NLIQGLRsk--------------hkTFIGGIISAFNr Q6BT20_DEBHA/78-475 --------nsnkfesygaAM---NFIKNFR-----------------iNFKSLNYNVLN- A5DE75_PICGU/20-414 --------nsnkfesvgaLM---NLIRSFSf----------------kTLGKNIYNSFNr A3GFV9_PICST/78-476 --------nsnkfesygaLI---NFTRNFSfdi-----------skigTNVYNSFTRLQ- A5DWJ5_LODEL/34-436 -------nntlkfeslgaLL---NLVRNFSif-------------sptTTINQIWHAFTr Q5A2C9_CANAL/5-404 --------nsnkfesygaLM---NLIKNFSif-------------npkQTVYQIWHSFFr Q74L41_LACJO/64-372 -----------------------NIISNVK------------------LLLTMKYAWIW- B3XPQ8_LACRE/65-377 -----------------------TLLRSIK------------------MLAKQSYGPLW- A1C3L4_STRPA/70-403 ------------------II---RYFSVQQ------------------------FKFSS- Q3DVD6_STRAG/65-395 ------------------IP---LIFELFQ-----------------------DGYQLA- A5LN99_STRPN/64-389 ------------------VL---ETFQTVH------------------------IPTGI- A3CM55_STRSV/64-391 ------------------IW---NSIQELK------------------------ISSLW- Q03HZ8_PEDPA/65-396 -----------------------LLYGQGL----------------------GSGAVFF- A5IW80_STAA9/64-384 -----------------------QKMEYID------------------------ASHIV- Q4L9N9_STAHJ/61-383 -----------------------QHFFKLS------------------------VSVLL- Q5HKR3_STAEQ/61-380 -----------------------THFPKLN------------------------SSASL- Q9RSK8_DEIRA/68-413 ------------------IA---ATAQLLR---------------------SEQTTLLS- Q5SHQ8_THET8/71-413 ------------------IL---RTIGLIR---------------------TGEVNLVA- SECY_CORGL/73-424 ----------------niLG---------------------------------NSGGVV- A8LB12_FRASN/74-414 ----------------riLQ---------------------------------VAGGVV- Q83NQ1_TROW8/73-424 ------------------LV---GVYQT--------------------------RGFGM- Q8G3Z9_BIFLO/74-421 ------------------LP---QLWEIGY------------------GTNGTDGDWLK- A7B9M4_9ACTO/72-414 ------------------LL---SIGQA--------------------------GKWGS- SECY_CHLTR/73-433 ------------------LGsifNKLNLGS------------------QDPS-EFGIVS- Q1AU49_RUBXD/70-408 ------------------VR---TLIE--------------------------DGSVLT- Q8RIH6_FUSNN/75-411 ------------------VI---QTIQTMQ----------------------GNKFLIP- A6DRC9_9BACT/79-428 ------------------FA---AVYSK-Y------------------QE-G-EWNLVQ- C0ACZ0_9BACT/94-454 ------------------MGtlwTLLRAPV------------------GT-Q-GISMIS- Q1Q157_9BACT/75-434 ----------------nqIV---QNFTFSV------------------APAEHQIGIVK- A6CGP8_9PLAN/77-435 ----------------slIE---PAFEKGI------------------ALGT-DTGIDR- B4S5A8_PROA2/73-417 ------------------VI---AEFQSVS---------------------LGSKNWII- Q2S3P5_SALRD/75-414 ------------------LY---NEIGLI------------------------GDNFFI- A1ZGT4_9SPHI/72-404 ------------------LV---EEVVARS---------------------T-GSQVLI- A6EHP4_9SPHI/71-408 ------------------LY---QEITSRI---------------------VSDGGLIA- Q11QD2_CYTH3/72-411 ------------------LM---AEVSSKN-----------------------LEGALP- Q1VTY0_9FLAO/73-421 ------------------FI---QEFISRV--------------------TESNGGLIL- Q1NYZ7_9FLAO/72-422 ------------------II---SEIFNRL------------------KNNNKLLGIII- A5KHP6_CAMJE/62-402 ------------------IS---GTVGQ-I------------------NS-G-EMNFLT- A4EA78_9ACTN/52-389 ------------------IF---SSTE------------------------GNAGGIIT- Q2GEC0_NEOSM/73-411 ------------------FG---NLFSGIG---------------------SPGSGILG- Q3YRM8_EHRCJ/72-412 ------------------FS---SMFLL--------------------GKNG-NVPIFV- Q5GSW3_WOLTR/77-416 ------------------FS---FLLT--L------------------NKNG-SMSLLI- Q0ANS0_MARMM/83-421 ------------------IG---GALSQ-A------------------SS-T-GDGTVL- A7IPQ0_XANP2/80-418 ------------------FV---RTLQL-G------------------RE-G-AISTPL- SECY_RICCN/70-411 ------------------II---SMFEL-S------------------RK-G-ALS-PL- Q2G8W0_NOVAD/80-430 ------------------FG---NLFEG-G------------------RT-G-SISPFL- A6E0Q6_9RHOB/73-411 ------------------LA---QFFAS-G------------------RS-G-AVSPAV- Q1UZE8_9RICK/67-404 ------------------LV---TTFEL-G------------------RT-G-AVSTIM- Q3R245_XYLFA/76-424 ------------------VL---QTIDA-F------------------RS-D-ALSLIS- A4NK90_HAEIN/76-416 ------------------IL---QTIEQ-A------------------RQ-G-QMHPLV- Q057C4_BUCCC/64-407 ------------------VI---RTYKLIK---------------------IKNFSFLY- Q8D1Z2_WIGBR/82-424 ------------------VI---KSIEQ-A------------------RQ-G-NLNIIT- Q6F7T2_ACIAD/83-426 ------------------VI---QAFTS-V------------------QN-G-QGSLIG- Q6Q8W8_9GAMM/67-407 ------------------IG---QALEQ-S------------------RQ-G-DLSILL- A9BRX1_DELAS/74-413 ------------------IG---GLLEL-V------------------RT-G-AMSILA- Q7DDS8_NEIMB/73-410 ------------------IA---KLVTL-T------------------NQ-G-SMSMLT- Q5NHU8_FRATT/74-416 ------------------IS---NTLSQ-A------------------NQ-H-VISYLS- Q7WZR8_9GAMM/64-388 ------------------LG---RTLFLTI------------------KD-S-SWMYIQ- A5EX98_DICNV/69-412 ------------------IL---GLFNQAK---------------------IGEIGYGR- Q6MJ32_BDEBA/70-415 ------------------AQ---QLWEL-V------------------RT-G-EMRFAL- B5EFS0_GEOBB/71-411 ------------------IG---NSFRL-I------------------KT-G-ELSLFV- A3EVQ1_9BACT/75-412 ------------------II---NTYKL--------------------YNQG-EISGFL- Q1MPP6_LAWIP/71-412 ------------------IV---KTYQL-I------------------IL-G-DMNILI- SECY_AQUAE/71-412 ------------------VI---QFYEK-V------------------KT-G-DIGPLT- Q01WB2_SOLUE/74-438 ------------------IA---NIYQH-V------------------FTIH-DWGAIT- Q08ZH8_STIAU/26-370 ------------------GK---TLLDM-T------------------AQ-G-AIEAAA- A6GCG0_9DELT/70-411 ------------------SY---QLAQKAI------------------DDPE-NFGPLP- Q04PV8_LEPBJ/72-436 ------------------MV---QLFST-----------------------D-TMDALN- SECY_BORBU/72-409 ------------------LF---NLFQS-M------------------QDPSQNVNPVF- Q73PL2_TREDE/73-413 ------------------VW---ELIKLVS---------------------NNELNLVF- Q67JW3_SYMTH/69-405 ------------------IY---NEILL--------------------LRAG-QRNIFQ- A7FQ38_CLOB1/69-409 ------------------IY---SIVGL--------------------QKAE-TVNFVE- A6LPT1_CLOB8/69-416 ------------------IA---SMMTL--------------------QQAG-SASIVE- Q0SQG4_CLOPS/69-409 ------------------GY---QIYNL--------------------SKIG-KINVVE- A9KJH4_CLOPH/71-425 ------------------IY---GLIEKFV------------------LGESVVKGVTA- A7VH89_9CLOT/71-420 ------------------FK---NIYTQFI------------------KDKDPVRMCLI- A6BIS2_9FIRM/71-421 ------------------MK---TLFDQFV------------------KGKAIASACLA- A7VR33_9CLOT/71-423 ----------------ilVQ---ALQAAWQ------------------APDSFGQYYFF- A6NXF0_9BACE/71-437 ------------------LM---NMVQGVQrwsmhlsdeeisamsngeAFRNSLVHPAM- Q250L2_DESHY/70-413 ------------------IK---RIAGL--------------------LSVG-EINVFS- Q8R7X3_THETN/69-402 ------------------IY---LTHEY--------------------IKAG-TSNIFG- A4XLR1_CALS8/69-419 ------------------AV---SLWNYVA-----------------kLNEFSLTSIIG- A3DJJ2_CLOTH/71-411 ------------------ILylwDLYRLER------------------LGKG-ILGIFG- A8MLG0_ALKOO/69-408 ------------------LF---TTFAL--------------------TKAG-QINPLA- Q18CH6_CLOD6/69-406 ------------------VI---KISQQ--------------------VKSG-EVAPWV- B8D0S8_HALOH/72-406 ------------------IH---RNWEL--------------------YKTG-DITALN- A9B431_HERA2/73-422 --------G--------ILLLIVTLAT-VVGIVLITEGQRRIPVQYAKR---VRG----- A8CRX1_9CHLR/78-422 --------L--------AVYAFMALLT-TVLIVIFTEAHRRIPVQYAQT---VIRs---- A2Y4E5_ORYSI/132-498 --------Y--------ILGIAGTFILvTMGAVLVTEGCRKIKLQYYGF------klasg Q7UZW2_PROMP/80-422 --------I--------AVLLGVFLLT-IVGIIFVQEGARRIPIVSAKR---QIG----- Q7NKT4_GLOVI/79-416 --------V--------VVLLLVFLAM-IVGIVFVQEGTRRIPIISARR---QVG----- SECY_GUITH/68-404 --------I--------FVLVFIFSVM-IIGIIFIQEGIKRIPIISARQ----------- SECY_CYACA/62-394 --------F--------ASYFALIVFS-IACIVFVQEAIRKVPIISAKQ----------- Q85FU6_CYAME/42-325 -----------------SLAMVVLIFT-MLGMIALQEAVRAIPILSAKQ----------- A0T0J6_PHATR/72-407 --------S--------EIGIVLLIFTsLYGIVFLQEGVRIIPLISSKQ---LNQ----- SECY_CYAPA/109-459 --------L--------ILSLSLSFIT-MFVIIGLQESGRPVPVLIARQ---EAErqkfn Q4G351_EMIHU/63-407 --------L--------LTGLGIYLGI-VLIIIFFQESYKKITIVSAKQlnlTTS----- SECY_PAVLU/66-404 --------I--------IYIIITLVSM-LIFSTLSQEGARKIPVVSAKQ----------- Q6B8X0_GRATL/62-395 --------G--------SFLFLLFVLI-LIINILIQECKRKIMIVSAKQ----------- SECY_ANTSP/62-390 --------G--------SLILSFGIII-LIINILIQEGERKIAILSAKQ----------- A4RW47_OSTLU/65-398 --------L--------AVFFGAFALT-TLGIVYVQEAERKIPMNYSTR----------- A7PFA4_VITVI/131-465 --------L--------VIIIISFFLL-VLGIVYVQEAERKIPLNYASR----------- A7HM32_FERNB/75-404 --------W--------IFLIAVAIFM-VVAIIYVQQAERRIKIEYATR---MVGr---- A3CK84_STRSV/69-416 --------V--------GILIVAVLLI-IYFTTFVQQAEYKIPIQYTKV----------- Q5FM71_LACAC/68-415 --------F--------IAVIVAILIV-TQLVTWVEQADRRIPIQYTRR---ATI----- Q03ZM6_LEUMM/68-416 --------V--------VVLVIAMILV-VAFTTWSYEGTRRLQMQYTRS---ATS----- SECY_STAA8/69-413 --------V--------LGLLVSLILL-TVGAIYVLEAVRKIPIQYAKK----------- Q4MG72_BACCE/68-415 --------M--------LLIGLVILAI-VVGVIYIQQAVRKIPIQYAKA---VSGn---- Q6F1X5_MESFL/92-454 --------F--------SIYMLVFFVV-IFSVVLMNEAERKVPIQQTGS---GLI----- Q6KI36_MYCMO/87-436 --------F--------ISYVFGFIIL-MYIIGFVYNAERRIPIQQVGA---GRA----- Q4A5I3_MYCS5/83-437 --------F--------VTYIFIYLAC-LMVIGIFYNAERRIPIQQTGA---GRS----- Q98Q01_MYCPU/90-438 --------F--------LLYLFGYLLL-IVIIVFVYLAERRIPIQQTGA---GLS----- Q4AAF9_MYCHJ/85-434 --------F--------ILYIFGFLLI-LLIAIYVYLAERKIPIQQTGS---GMS----- Q9PQP1_UREPA/76-434 --------F--------ILYILFYIMI-LIGVVFVNNSTRKIPVQQTGQ---ALI----- SECY_MYCGE/81-430 --------F--------FIYFLAFLVL-LFATTFITQATRKIPIQQSGQ---GLV----- Q8EUD2_MYCPE/81-433 --------F--------AVYLVFFFLI-LLATTFVNGSVRKIPIQQIGQ---GLS----- Q7X4E3_9MOLU/69-399 -----------------ILILVSYFVL-LILTIILSSAYLKIPINYAXN----------- Q5Q069_ASTYP/59-398 --------F--------ACIVLLLLLF-LIFTVVVQITSLKIPINYARN----------- O21257_RECAM/57-372 --------L--------VFLLFVQCLFcGIIYFYIDFLFLKIPIIKLNF------vg--n Q74NB9_NANEQ/69-457 -----------------GLQLLVIVLV-ILLSVYFYMVKIPIPTSFGKI----------- Q2EMT2_METVO/30-379 -----------------ILPILATIAV-FFVVVYAESIRVEIPLAHGRV----------- A5UL65_METS3/72-433 ---------s------vLIPLIATAAV-FFVVVYGESMRVEIPISHGSV----------- SECY_METTH/73-436 -----------------VLPVLALIAV-FLVVVYAESMRVEIPISMGGG----------- SECY_PYRAB/72-448 ------ggTa-----pdMMAVIATIIV-FLVVVYFESMRVEIPLGYRGV----------- Q8TZA9_METKA/75-435 -----------------LAPVIGAIIT-FLIVLYVEGMRVEIPIAFAGI----------- Q9HIT0_THEAC/82-514 -------sPp-----npMIAVLGTLLI-FFLVAYFQSSKIELPISHERV----------- Q2QAQ7_9EURY/161-583 d-----aaHp-----naVVALFSSVVV-FLVVAYAESSKLELPLTHGKV----------- Q0W1W5_UNCMA/75-487 ---------q-----geILALLATIII-FLLIVYVESTRIEIPLAHAAV----------- SECY_ARCFU/73-471 ---------q-----ggILALITTAAI-ILLVVFFEGTRVEIPLAHAVA----------- Q8TRS4_METAC/72-470 ---------r-----ggILALLSTVAI-FLLVVYVESTRIEIPLAHSAV----------- A0B9U7_METTP/75-515 ---------t-----ggLLALISTVGI-ILLVVLVESTRIEIPLAHSRV----------- SECY_HALMA/73-468 ---------q-----geLLGLFTTVLI-FAVVVYAESVRVEIPLSNARV----------- Q2FSG8_METHJ/73-458 --------Fg-----tdLIAFITTIAI-FILIVYVESTRVEIPLAHTQV----------- A2SPM5_METLZ/73-458 --------Fg-----lqLLALVTTVGL-FFIIVYVESTRIEIPLAHANV----------- A0RUE4_CENSY/79-457 ------ynQl-----psIFGLLLTGGV-LLILVYTQGMKIEIPIVSTKY----------- A8ME75_CALMQ/77-461 -------fNl-----pgLIGLIATIVL-GGFIAYVELMEVRIPLSFVQY----------- A3MUZ2_PYRCJ/70-435 pl--tvntYl-----pdFVGLVATILL-GYIILYLEMMKVNIPVASAQY----------- SECY_SULSO/73-449 tstknlfq-p------dLVGLVTTIAL-IIITIYLTTMTIEIPVTSQKL----------- SECY_SULAC/74-443 tssttpyq-p------dLIGLIATVGL-TILIVYLVNTNIYIPVTTQRL----------- A2BME2_HYPBU/73-444 --------Gm-----pdMVGFLATIAI-IMVLIYFQLMRVYIPVTSPRY----------- SECY_AERPE/73-434 -------nGf-----pdLTGFFTTLAA-IILLVYLQAMRVEIPITSERF----------- A1RWR3_THEPD/75-456 ------psGy-----pdLVGFVGMVVM-LLLLTYMESMKITIPVSSVRF----------- SC61A_SCHPO/76-459 sgltssqiQl-----pnLWNFFATLLV-FGVVIYLQDFRVEIPIRSQKF----------- A7E5Q2_SCLS1/76-459 -------qSl-----pnIMNLLATIVV-FAAVIYLQGFRVEIPVKSSRQ----------- Q5KC69_CRYNE/75-459 -------dRl-----pnIMNLLATVAV-FAAVIYLQGFRIEIPIKSSKM----------- SC61A_ASHGO/75-460 -------dYl-----pnMFQVLSTVFV-FLFVLYLQGFRYELPVRSTRT----------- Q59MJ6_CANAL/76-459 -------pNl-----pnMFQLLATLLV-FFAVVYLQGFRIELPMKSTRQ----------- A7SJW4_NEMVE/75-458 -------qNl-----pnLTNLIATIFV-FGIVIYFQGFRVDLPIKSARY----------- A0CFY2_PARTE/73-456 -------eSa-----pnLNNLLATLFV-ISLVIYLQGFRVEVPLASQKI----------- Q22MG2_TETTH/151-538 -------sHl-----pnLASLISTALI-FIVVVYFQGFKVDIALKNDRV----------- A0CU87_PARTE/77-460 -------dSl-----pnLTNLLATVLV-FLIVIYFQGFKVDIPIKNNKV----------- Q7RLN0_PLAYO/121-506 -------tHa-----pnVTNLLATILV-FLIVIYLQGFRVDLSVKYQTV----------- Q4QGX4_LEIMA/77-467 -------pQl-----pnLTNIFSTAVV-FAVVVFFQGFRVPLMTKSKFN----------- A5JEK2_NOSBO/75-457 -------qNl-----pnMFSLVSTVVL-FAFVIYLQGLRVELKTESTQV----------- A2DH65_TRIVA/75-462 -------pQl-----pnLCQLFSTVIV-FGACVYFDQIKINIGLETTVN----------- Q2QM98_ORYSJ/88-448 -------lDl-----pnLSNYMTTCVM-FVLAVRLDETHLRRLYRSRPR----------- Q6AV46_ORYSJ/86-471 gg---gggSl-----pdLRGLAATCAV-FLAAVYLQGVRVALPVRPRNA----------- Q6C854_YARLI/70-454 --------N--------LLQLYMSVAV-FMLTIYLNTFRVDIPIKSSRV----------- SSH1_YEAST/78-465 -------dYl-----pnLTTTIIVLAI-AIIVCYLQSVRVELPIRSTRA----------- Q6BT20_DEBHA/78-475 --------SftrsqlpnLSQFYIVLVT-VLVLIGVQNYRIELPIRSTKV----------- A5DE75_PICGU/20-414 -------eHl-----pnLTQVYITIVT-LLVVVALQNFRIELPIRSTRA----------- A3GFV9_PICST/78-476 --------Lp------nFTSFYITVAT-TLAVVYLQNLRIELPIRSTRA----------- A5DWJ5_LODEL/34-436 -------vQl-----pnLTQFYITLAT-ILAVVLLQNFRTEISIRSTKV----------- Q5A2C9_CANAL/5-404 -------iQl-----pnLTQFYISLAS-ILIVVALQNFRIELPIRSTKV----------- Q74L41_LACJO/64-372 --------L--------AALAIFILLL-IKFWLAFTKAYYPLKVVNPSL----------- B3XPQ8_LACRE/65-377 --------L--------FLAAIAGCIV-LVFWVSFNRAYYPLKMINTSM----------- A1C3L4_STRPA/70-403 --------Li-----qyGLVFFVALSIlIWFNILLYKGEYRIPIQRVGL----------- Q3DVD6_STRAG/65-395 --------I--------ILFLLWTLVA-MYLMITFERSEYRIPVMRTSI----------- A5LN99_STRPN/64-389 --------I--------VLLALLTLVF-SYLLALMYRARYLVPVNKIGL----------- A3CM55_STRSV/64-391 --------L--------ALMLVFSLVF-LYLAVTVERSKYRIPVNKINI----------- Q03HZ8_PEDPA/65-396 --------Tp-----klWLVLIISVAVvVIFTIFINKAELRIPLQRPFV----------- A5IW80_STAA9/64-384 -----------------IALLIILVIItLFILLFIELVEVRIPYIDLMN----------- Q4L9N9_STAHJ/61-383 -----------------LILVIVTLVIaLLILLFIELSEYRLNYKDIMN----------- Q5HKR3_STAEQ/61-380 -----------------ITMIIVLLVLaLFILFFIELTEYRIEYNDIMN----------- Q9RSK8_DEIRA/68-413 --------I--------LAFIAVILVT-IAGIVYIYQAERRVPVTYARArggAAGq---- Q5SHQ8_THET8/71-413 --------F--------LFFLAFIVLA-FAGMAAVQQAERRIPVQYARK---VVGr---- SECY_CORGL/73-424 --------F--------AVVLASVLIL-VIGVVFVEQGQRRIPVQYAKR---MVGr---- A8LB12_FRASN/74-414 --------F--------GLVILLGLAI-VVFVVFVEQSQRRIPVQYAKR---LIGr---- Q83NQ1_TROW8/73-424 --------F--------STVVITSLVV-MVGVVFVEQSQRRVPVQYAKR---VVGr---- Q8G3Z9_BIFLO/74-421 --------F--------GIVVGVLVVI-LIFVDFVELCQRRVPVQYTRR---MIGr---- A7B9M4_9ACTO/72-414 --------V--------AAIVALLLLV-AIAVVYVEQAQRRIPVQYAKR---MIGr---- SECY_CHLTR/73-433 --------L--------LILCAVFVFV-LMATVLIIEGMRKIPVQHARR---IIGr---- Q1AU49_RUBXD/70-408 --------M--------VILGIIAVMI-VAAIVFVNEGQRRIPITYAKR---QVGr---- Q8RIH6_FUSNN/75-411 --------L--------LVLVAFLGTVtIAGIVLFQLGQRKIPIHYVGK---GFSs---- A6DRC9_9BACT/79-428 --------I--------LVVVGILFIV-TAATVALVQGMRKIPLKYARD---ASSr---- C0ACZ0_9BACT/94-454 --------L--------TFMVILFFAV-TMGIIMVVQGQRKIPVQYAKR---VVGn---- Q1Q157_9BACT/75-434 --------L--------LILLGMFFAI-VGGVVYITQGQRRIPIQQAKH---TRGr---- A6CGP8_9PLAN/77-435 --------L--------LILALVFVFV-VVWVIAITQGQRRIPIQSAKH---VRGr---- B4S5A8_PROA2/73-417 --------E--------FIILALMVLI-VAAVVVLTVGTRRIPVQHAKR---VVGr---- Q2S3P5_SALRD/75-414 --------L--------LVEIGVWVLV-AGAVVLVSQGMRRIPVQYAKR---VVGk---- A1ZGT4_9SPHI/72-404 --------L--------ILEMVVLFFV-VMSVVMLTEATRRIPIQYAKQ---VVGn---- A6EHP4_9SPHI/71-408 --------L--------VLEIVALFAV-VMFTIMIVQGVRKVPVQYAKR---IVGn---- Q11QD2_CYTH3/72-411 --------L--------LIEFAALFAV-IMLVVLVQQATRRIPIQYTKQ---IAGg---- Q1VTY0_9FLAO/73-421 --------I--------LIELVIWFVI-ILAAVMLVRAVRQIPVQYARK--nASGk---- Q1NYZ7_9FLAO/72-422 --------L--------LFELFIWLLI-IGISIIIINFVKKIHIQYVNKfylKNYs---- A5KHP6_CAMJE/62-402 --------A--------FAIFALILIT-IGVIIYVELGERRIPISYSRK---VVMq---- A4EA78_9ACTN/52-389 --------M--------VIICAIILLV-IPLIVFLERGQRRIPVSYAKR---VVGr---- Q2GEC0_NEOSM/73-411 --------I--------FVSLSLLVFV-VFLVVLVERASKNIPVHYPRR------rt--w Q3YRM8_EHRCJ/72-412 --------I--------LLMVLIFFAL-LLLIIFVEKSYRKILVQYPKR---QVKn---- Q5GSW3_WOLTR/77-416 --------I--------LFVFVLFFLL-LLLIIFVESSYRKVTVQYPKK---QFK----- Q0ANS0_MARMM/83-421 --------V--------VGGVLILVG--LLLVVFVERSQRRLLVQYPKR---QQGn---- A7IPQ0_XANP2/80-418 --------I--------LAALVLAVVV-IAFIVFMERAQRRLLIQYPKR---QVGn---- SECY_RICCN/70-411 --------I--------AIAVCIGVVVlIAIIIFFERAQRKLLVQYPKR---QVGn---- Q2G8W0_NOVAD/80-430 --------I--------FGIVIMLIAL-VIGICFLERATRRLLIQYPKR---ATQr---- A6E0Q6_9RHOB/73-411 --------I--------VGVMLMVVAV-IAFVVFMERSLRKIHIQYPRR---QVGm---- Q1UZE8_9RICK/67-404 --------I--------IGIFVLLVAT-IMFIVFMERALRKILINYPKR---QMGn---- Q3R245_XYLFA/76-424 --------L--------LIIVFIVLSF-TFFVVFVERGLRRIAVNYARR---VEGr---- A4NK90_HAEIN/76-416 --------L--------LLIAAIVFAV-TYFVVFVERGQRRIRVEYAKR---QQGr---- Q057C4_BUCCC/64-407 --------V--------FFLLLIIFFV-IFIVVFIEKSQRKIIVCYARR---QQGr---- Q8D1Z2_WIGBR/82-424 --------V--------LISIILVFVI-TYFVVFIERGQRRVIVNYAMR---QKGr---- Q6F7T2_ACIAD/83-426 --------I--------VVFALLSLAV-LAAIVFIEKAQRRIPVNYAQK---QQGr---- Q6Q8W8_9GAMM/67-407 --------L--------IGIGLLSMAV-IAVVVFIERGQRRITVNYAQR---QQGr---- A9BRX1_DELAS/74-413 --------A--------IFIVLVVAAV-TYFVVFVERGQRKILVNYARR---QVGn---- Q7DDS8_NEIMB/73-410 --------A--------LFIVFGALLL-IYLVVYFESAQRKIPIHYAKR---QFNg---- Q5NHU8_FRATT/74-416 --------V--------WVLLILLLLV-IAFVVFMESAQRKITVNYAKR---QQGr---- Q7WZR8_9GAMM/64-388 --------I--------FKVVSLVLIT-IILVVVIESGQIRIKVSYPRR---LIGk---- A5EX98_DICNV/69-412 --------F--------FLLLGIIVSL-FALIVYVERAQRRIKIHYAKR----------- Q6MJ32_BDEBA/70-415 --------V--------LLLVAFMVAI-IAAVIYMEVAQRRITVQYSQR---QGGg---- B5EFS0_GEOBB/71-411 --------L--------LLIAAVMFAV-IAAVVFMERGQRRIPIHYAKR---VVGl---- A3EVQ1_9BACT/75-412 --------I--------LALVVMVFLI-VSSIVFIETARRKIPIQYAKR---LVGn---- Q1MPP6_LAWIP/71-412 --------A--------LVLMLFMFAV-LTGVVFMERAQRRIPIQYAKR---QLGr---- SECY_AQUAE/71-412 --------L--------LLIIALIIAI-IVGIVYVQEAERRIPIQYPGR---QVGr---- Q01WB2_SOLUE/74-438 --------L--------IVLMALMVAV-VAFIVLVERGERRIPVQYAKR---VVGr---- Q08ZH8_STIAU/26-370 --------L--------VGLAVFMLFI-IAVVVYVERGMRRIPVQYAKR---MAGr---- A6GCG0_9DELT/70-411 --------L--------AMLLVVVLVV-IAFVVIMERGQRRIPVIYAKR---VVGk---- Q04PV8_LEPBJ/72-436 --------V--------LILLILLILL-ISLTVLLTQGVRKVPLQYGKQ---MVGr---- SECY_BORBU/72-409 --------V--------ILIISIFILV-VILIIYEYKAQMRIAIHYARA----------- Q73PL2_TREDE/73-413 --------V--------IIAFAMFVGI-IALVVYEQQGQRKIPVHYAKR---VIGr---- Q67JW3_SYMTH/69-405 --------P--------LLVAVVALLM-VVFVVIINEAVRKIPVEYAKR---VVGr---- A7FQ38_CLOB1/69-409 --------V--------IVFIVIALAL-FLLVVIMNLGERRIPVQYAGR---AVGn---- A6LPT1_CLOB8/69-416 --------I--------VLFGVFTVFL-LATILYFSLSERRIPVQYAGK--fASGn---- Q0SQG4_CLOPS/69-409 --------I--------ALFIFFTLAL-LAGVIYLSLAERRITVQYAGK---AVGn---- A9KJH4_CLOPH/71-425 --------A--------IIIVAVILLS-VVLIILLNAAQRKIAVQYAKK---VQGr---- A7VH89_9CLOT/71-420 --------A--------LLVVAIVVCV-TILVCMLQGAERKIPVQYAKK---VQGr---- A6BIS2_9FIRM/71-421 --------V--------CVIIAIILAL-VVFTVILQDGERRIAVQYSQK---IVGr---- A7VR33_9CLOT/71-423 --------V--------PLFVIIFLAI-IWVIVFMNDAERRIPVQYAKR---VVGr---- A6NXF0_9BACE/71-437 --------I--------PLIIIGILAL-VVFIVFINDSERRIPVQYAKR---VVGr---- Q250L2_DESHY/70-413 --------V--------FGLIVIGLGI-IAGVVFIQEGQRRIQVQYAKR---VVGr---- Q8R7X3_THETN/69-402 --------A--------IAFVVAELIM-IVLIILATEGQRRIPVQYAKR---VVGr---- A4XLR1_CALS8/69-419 --------V--------LLFLVMALAI-IVFIIVIQEGERRIPVQYAKR---IVGr---- A3DJJ2_CLOTH/71-411 --------V--------LGVLLLFVVI-IASVVWVDQAERRIPVQYAKR---VVGr---- A8MLG0_ALKOO/69-408 --------I--------ILFIVIAIAM-IVAVVAIEAGTRKIPVQYAKR---VVGr---- Q18CH6_CLOD6/69-406 --------I--------VILAVVILLT-VTGVTFIQEATRKIPVQYAKR---VVGr---- B8D0S8_HALOH/72-406 --------I--------LFFLVLAVVI-IAGVIFIQQGERRIPVQYSKR---VVGr---- A9B431_HERA2/73-422 --NKvyGGQ--SSH-LPLKVNMAGMIPLIFAQSI--LIFPS---TVASYF-----WNPNG A8CRX1_9CHLR/78-422 gKMYrrGG---ESH-IPLRVNSAGMIPLIFASAL--VMLPG---LVASYFmagstEDP-- A2Y4E5_ORYSI/132-498 aRSEssPVTEVEPY-IPFNINPTGMQPLLTTSYL--LAFPS---IMASIF-----GTQFW Q7UZW2_PROMP/80-422 ---NssLLPTRQSY-LPLKLNAGGVMPIIFASAL--IFLPI---TVANVT-----GNPIL Q7NKT4_GLOVI/79-416 -PRRqqYQQQQTSY-LPLRVNQGGVMPIIFASSL--LYLPL---TFAQFA-----RN--- SECY_GUITH/68-404 --LGkgQMDNKTSY-LPLKLNQSGVMPIIFASAV--LVLPA---YLAQLV-----SNEQL SECY_CYACA/62-394 --LDstSFYSNDYF-LPLRINQGGVMPIILASSL--LALVD---YVIRYG-----LST-- Q85FU6_CYAME/42-325 ----liQSIAQVYL-LPMRLNQGGVMPIIFASST--LALLH------------------- A0T0J6_PHATR/72-407 --SSlqDSVTSNNY-IPLRFNQAGVMPIILTTTI--LVVPN---YVNNLG---------- SECY_CYAPA/109-459 ePITeaERRKTQAY-IFFQLLPAGIMPVIFASTIfdLALPA----FTNFL-----LQQG- Q4G351_EMIHU/63-407 -AQTqsERLANNSF-IPLKLNQGGIMPLVFSSTI--AVVFM---YPAQIL---------- SECY_PAVLU/66-404 -LIDgvEDDMRRSY-IPIRFGQAGVVPIIFSSSI--LLFLT---TSIKQL-----PNA-- Q6B8X0_GRATL/62-395 --LSkfTTSNPRSY-IPLKLNQGGVMPIVFASAT--MALPI---YFSNNI-----EV--- SECY_ANTSP/62-390 --LGkiNELNHKVI-FLLKLNQGGVMPFVFASAV--VHTFL---FISNNT-----NS--- A4RW47_OSTLU/65-398 ---FnaGGLAKSSY-LPFKVNSAGVMPIIFASSL--LALPA---TLTRFT-----DNGAV A7PFA4_VITVI/131-465 -YTNksGGLQKSTY-LPFKVNSSGVMPIIFSTSS--LALPG---TVSRFT-----GLAAL A7HM32_FERNB/75-404 -RIY--GGT--STY-LPIKVNHSGVIPIIFAWAI--ISIPE---AIAQIT-----GA--- A3CK84_STRSV/69-416 -----aKGAPSSSY-LPLKVNPAGVIPVIFASSI--TAAPA---AIFQVV-----SALGY Q5FM71_LACAC/68-415 ------SGS--ESF-LPLKVNVSGVIPVIFASSF--IITPA---TILMAF-----QRTQG Q03ZM6_LEUMM/68-416 ------YGS--EAY-LPLKVNVSGVIPVIFASSF--ISTPQ---TVMLAF-----QDKYS SECY_STAA8/69-413 --QTaqRLGSQATY-LPLKVNSAGVIPVIFAMAF--FLLPR---TLTLFY-----PDK-- Q4MG72_BACCE/68-415 nQ----YQGAKNTH-LPLKVNSAGVIPVIFASAF--LMTPR---TIAQLF-----PDSSI Q6F1X5_MESFL/92-454 ------DSKDHTPY-LPLKLNNAGVIPVIFASAL--ISTPI---TIAQIIdptasTSTVD Q6KI36_MYCMO/87-436 ------KNEKELSY-LPIKINPGGISPIIFALII--ISFPQ---LFASVF-----PISNP Q4A5I3_MYCS5/83-437 ------KALKEIGS-LPIKLNPAGIMPIIFAMLV--LSLPT---LIANIL-----PNDNY Q98Q01_MYCPU/90-438 ------KNIKEMGS-LPIKVNPAGIMPVIFSMIV--ISFPL---LIAGLL-----DRSTS Q4AAF9_MYCHJ/85-434 ------KNIKEISI-LPLKLNPAGIMPVIFALII--VSLPT---LFSGFL-----DRNTS Q9PQP1_UREPA/76-434 ------LDHEKLPF-LPIKIMTAGVMPVIFASSV--LAIPA---QVAEFL-----DKQ-- SECY_MYCGE/81-430 ------SEVKTLPY-LPIKVNAAGVIPVIFASSI--MSIPV---TIAQFQ-----PQT-- Q8EUD2_MYCPE/81-433 ------KEVDEMPY-LPIKLNAAGVIPVIFASSI--MTIAP---TISQFL-----PSG-- Q7X4E3_9MOLU/69-399 -----rNNDKIDKY-IPIKLNTSGILPIILADTL--LNVIQ---QISMLF-----SKNG- Q5Q069_ASTYP/59-398 -------QSQGKSY-IPLKINSAGVMPVILAFAL--LQPFQ---ILAGVI-----GN--- O21257_RECAM/57-372 eNDNynYLNYFQKY-QTSSLNLLGILPFILVYSIiyMLKLNlnsFLDLVF---------- Q74NB9_NANEQ/69-457 --------PEKSLR-YEVRLIYTGNIPVIFAFAF--LHQIL---LIAWVL-----QQLGI Q2EMT2_METVO/30-379 --------KGAVGK-YPIKFIYVSNLPVILAAAL--FANFQ---LWGLVL-----YKIGF A5UL65_METS3/72-433 --RGhgRIRGSVGK-YPLKFVYASNMPVILTSAL--LVNVS---LLASVF-----QKIGF SECY_METTH/73-436 ----krLSRGAVGK-YPLRFIYASNMPVILTSAL--LLNVQ---LLANVF-----QKLGY SECY_PYRAB/72-448 ---------TIRGR-YPIRFLYVSNIPIILTFAL--YANIQ---LWARVL-----DRLGH Q8TZA9_METKA/75-435 --------RGARGR-FPVRLLYTSNIPVILASAL--FMNVR---LWALAF-----QRMGV Q9HIT0_THEAC/82-514 --------RGARGR-YPLQLLYASNIPVILATAL--LANVS---MWTLLF-----WSSPV Q2QAQ7_9EURY/161-583 --------RGHRGQ-YPIRLVYASNIPVILMAAL--LANLN---MFTLLF-----WSHPT Q0W1W5_UNCMA/75-487 --------RGARGK-FPVKLIYASVLPMILVRSL--QATLE---MVGLLL-----YRNGI SECY_ARCFU/73-471 --------RGARGR-FPIKLIYASVLPMIFVRAL--QANVV---ALGQVL-----HARGV Q8TRS4_METAC/72-470 --------RGARGR-FPVKLIYASVLPMILVRAL--QANIQ---MVGIIL-----ASRGI A0B9U7_METTP/75-515 --------RGARGR-FPVKLVYASVLPMILVRAL--QANIE---MLGALL-----TAKLG SECY_HALMA/73-468 --------KGARGR-FPVKLIYASVLPMILVRAL--QANIQ---FLGRIL-----NAQLG Q2FSG8_METHJ/73-458 --------RGARAR-FPVKLIYASVLPMILVRVL--QANVQ---MIGLFL-----NNIGI A2SPM5_METLZ/73-458 --------RGARSR-FPVKLVYASVLPMILVRVL--QANVQ---MIGMFL-----SSIGF A0RUE4_CENSY/79-457 --------RGFSAT-YPIKLMYVSNIPVILASAL--TANAI---FIGQMF-----WSNFN A8ME75_CALMQ/77-461 --------GGYKMS-YPFKVMYVSVLPIIFTAYT--VALIYnglYFIWTTynphnANALL A3MUZ2_PYRCJ/70-435 --------RGIKFT-IPLRFVYVSVLPIIFTTYS--LLLVG------------------- SECY_SULSO/73-449 --------RGIRRT-IPLNFLYVSSIPVIFVAVL--GSDIQ---LFASLA---------- SECY_SULAC/74-443 --------RGIRTT-VPLNFLYVSSIPVIFVSVL--GADIQ---LFASLA---------- A2BME2_HYPBU/73-444 --------GSIKTR-IPLNFIYVTNIPILFVAIA--VSDIK---VFEIVI-----ASLLG SECY_AERPE/73-434 --------KGIRSR-VPLQFIYVTNIPILLVGIL--VSDLL---LVQRLL-----ADYLG A1RWR3_THEPD/75-456 --------GGAKTR-IPLKFLYVSVMPVILVGAL--YANVV---MFTQAL-----WPRVN SC61A_SCHPO/76-459 --------RGYRST-FPVKLLYTSNTPIMLQSAL--TSNLF---FASRLL-----FNRFS A7E5Q2_SCLS1/76-459 --------RGARGS-YPVRLFYTSNMPIMLQSAL--SSNIF---LISQML-----YSRFS Q5KC69_CRYNE/75-459 --------RGQRGT-YPVKLFYTSNMPIMLQSAL--TSNVF---LVSQML-----AGRFP SC61A_ASHGO/75-460 --------RGQVGS-YPIKLFYTSNTPIMLQSAL--TSNIF---LTSQLL-----YQKFP Q59MJ6_CANAL/76-459 --------RGPYGS-YPIRLFYTSNIPIMLESAL--ASNIF---IISQLL-----FMRWP A7SJW4_NEMVE/75-458 --------RGQYSS-YPIKLFYTSNIPIILQSAL--VSNIY---VISQMM-----SAKFA A0CFY2_PARTE/73-456 --------RGLVSS-HGIKLFYTSNIPMIIQSTL--VQNVY---FLSQLL-----YRRFK Q22MG2_TETTH/151-538 --------RGAIQS-YPIKLFYTSNMPIILQSAL--ISNLY---FFSQIL-----YRNFN A0CU87_PARTE/77-460 --------RGGLTS-YPIKLFYTSNIPIILQTAL--VSNLY---FLSQIL-----YRNFK Q7RLN0_PLAYO/121-506 --------RGQQGT-YPIKLFYTSNIPIILQTAL--VSNLY---FFSQIL-----YKRFS Q4QGX4_LEIMA/77-467 --------GNDRQP-YMIKLFYTSNMPIILQTSV--VSNIS---FFSQIL-----SRRFG A5JEK2_NOSBO/75-457 --------RGQTGM-YPVKLLYSSTMPIIVQSYV--ISHIC---TISRFL-----YKRFP A2DH65_TRIVA/75-462 --------RARPEP-FEIKLFYCSNTPPIIQSTI--LSQLA---GFSRTI-----YFHWP Q2QM98_ORYSJ/88-448 --------RGTDEF-VPIKLLYTSAMPIMLHASA--VSAFC---V--------------- Q6AV46_ORYSJ/86-471 -------PRSHRGGaYSVRLLYTSGMPVVLLSSA--VSSLY---VVSQAL-----YRRFG Q6C854_YARLI/70-454 --------RSLATA-FPVKLLYTGSMCLFLLSAF--SQNVL---IYSQSL-----YVQFP SSH1_YEAST/78-465 --------RGTNNV-YPIKLLYTGCLSVLFSYTI--LFYIH---IFAFVL-----IQLVA Q6BT20_DEBHA/78-475 --------RGMNNV-YPIRLFYTGALPILFAFTV--LTNLQ---VFGYFT-----STLLN A5DE75_PICGU/20-414 --------RGMNNV-FPIRLLYTGALPLAFAYTV--LTNLQ---VLGYIA-----SQLLE A3GFV9_PICST/78-476 --------RGMNNV-FPIRLLYTGALPVLFAYTV--IANIQ---YFGYLA-----YVVLQ A5DWJ5_LODEL/34-436 --------RGMNQM-FPIRLLYTGGLPVLFAYTV--IANLQ---VFGFIF-----EAALV Q5A2C9_CANAL/5-404 --------RGMNNV-FPIRLLYTGGLPVLFAFTV--VANIQ---VVGYLI-----HSVLS Q74L41_LACJO/64-372 ------PASSNLMT-VPLGLNMAAMMMYMVGMAI--LTLPL---MVGRYF-----SSSSL B3XPQ8_LACRE/65-377 ------SSHDRPII-LPIGLNMGAMMTYMVGMSL--LMVPT---LLANVL-----GPGSL A1C3L4_STRPA/70-403 -----nTPYHASSY-LPIRVTPAGAMPFMYGMTL--MMLPPyifVVLLHI---------- Q3DVD6_STRAG/65-395 -----hNRLVDDAY-MPIKVNASGGMAFMYVYTL--LMFPQyiiILLRSI-----FPTN- A5LN99_STRPN/64-389 -----hNRFKRYSY-LEIMLNPAGGMPYMYVMSF--LSVPAylfILLGFI-----FPNH- A3CM55_STRSV/64-391 -----hNRFKKYSY-LDIRLNPAGGMPIMYAMTL--VSIPQyflLIIHFL-----QPEN- Q03HZ8_PEDPA/65-396 ------QNDFSESY-LPIRVLAAGSMPFMFTTTV--FMIPS---YIGSFV-----PEG-- A5IW80_STAA9/64-384 -----vSATNMKSY-LSWKVNPAGSITLMMSISA--FVFLK---SGIHFI---------- Q4L9N9_STAHJ/61-383 -----nSTNKTPTY-LAWKLNPAGSISIMISLSV--YVLLN---NMINLI---------- Q5HKR3_STAEQ/61-380 -----iSAKDIPSY-LSWKLNPAGSISIMVSLSL--FMLTN---NIVNFI---------- Q9RSK8_DEIRA/68-413 -ARG--AGQ--ATW-LPIKVNQAGVIPVIFASAM--LIIPN---LIASAT-----ATRA- Q5SHQ8_THET8/71-413 -RVY--GGQ--ATY-IPIKLNAAGVIPIIFAAAI--LQIPI---FLAAPF-----QDN-- SECY_CORGL/73-424 -RQY--GGS--STY-LPLKVNQAGVIPVIFASSL--IYMPV---LITQIV-----NSGSL A8LB12_FRASN/74-414 -RMY--GGT--STY-LPIKVNQAGIIPVIFASSL--LQLPQ---LVGQVW-----SNQTF Q83NQ1_TROW8/73-424 -RIL--GGG--STY-LPIKLNMAGVVPVIFASAI--LRVPS---IIAQFS-----QPAPG Q8G3Z9_BIFLO/74-421 -KMY--GGS--STY-LPLKINMSGVIPPIFASSI--LAIPT---LIAQFG-----KSDQ- A7B9M4_9ACTO/72-414 -RQY--GGT--TTY-IPLKINMSGVIPVIFASSI--LALPP---MAAQFG-----SPND- SECY_CHLTR/73-433 rEVV--GG---GSY-LPLKVNYAGVIPVIFASSL--LMFPA---TIGQFL-----SSES- Q1AU49_RUBXD/70-408 -RMS--QGG--TTY-LPLKVNMAGVIPIIFASSL--LIFPV---VITQFA-----AGGDQ Q8RIH6_FUSNN/75-411 -K----GGIGEKSF-IPLRLNTAGVMPVIFASVF--MLIPG---VIVNAL-----PSTL- A6DRC9_9BACT/79-428 -NAM--IEK--TSY-LPLKVNHAGVMPIIFASAL--MMFPP---MIINKI-----GG--- C0ACZ0_9BACT/94-454 -KVM--GGQ--NSF-LPLKVNYSGVMPVIFASAI--LLFPQ---QIFRYL-----GAAFN Q1Q157_9BACT/75-434 -RVY--GGQ--RHF-LPLRVNQAGVMPIIFAQSL--LIFPA---AIMQGI-----QIRFE A6CGP8_9PLAN/77-435 -RVS--GGQ--RQS-LPLRVNQAGVMPIIFASSL--LMFPY---FLFHGL-----SQYF- B4S5A8_PROA2/73-417 -KMY--GGS--TQY-IPMRVNTAGVMPIIFAQSI--MFLPN---TFLSFF-----PES-- Q2S3P5_SALRD/75-414 -KVQ--GGT--TQY-LPLRVNAAGVMPIIFAQSI--MFIPS---TIASFF-----PNN-- A1ZGT4_9SPHI/72-404 -RVY--GGQ--RQY-LPLKVNAAGVMPIIFAQAL--MFVPA---LITPYV-----GG--- A6EHP4_9SPHI/71-408 -RQF--GGV--RQY-IPLKVNAAGVMPIIFAQAL--MFIPA---TLTQFF---------- Q11QD2_CYTH3/72-411 -KQV--IGQ--RQY-LPLKLIAAGVMPIIFAQSV--MFLPA---IIGSSF-----PDS-- Q1VTY0_9FLAO/73-421 fEKAsvGGA--RQF-IPLRLNASGVMPIIFAQAI--MFIPA---AVAGLS-----DS--- Q1NYZ7_9FLAO/72-422 sNEIylRNE--MKF-LPLKVVYPGVMPIIFSQGI--LLIFI---TIFNKI---------- A5KHP6_CAMJE/62-402 -NQN--KRI--MNY-IPIKLNLSGVIPPIFASAI--LMFPT---TILQTS-----TN--- A4EA78_9ACTN/52-389 -RMM--GGQ--TTY-LPIKVNTAGVVPIIFASAL--LYFPA---QIAVFF-----PGIG- Q2GEC0_NEOSM/73-411 gSTH--GDA--ASN-IPVKINVSGVIPPIFANAL--ILFPL---TLANFS-----AE--- Q3YRM8_EHRCJ/72-412 -KLY--GSS--STY-IPLKINISGVIPPIFANAL--LLSPI---TVANFH-----QGS-- Q5GSW3_WOLTR/77-416 -RLH--SDD--FTY-IPLKINLSGVIPTIFANAI--LLTPV---SIANFY-----KGH-- Q0ANS0_MARMM/83-421 -RMV--GGD--TSF-LPLKLNTAGVIPPIFASSL--LLLPA---TAASFQ-----AQSGP A7IPQ0_XANP2/80-418 -RIY--EGQ--SSH-LPLKLNTSGVIPPIFASSL--LLIPT---TIASFL-----QGSGP SECY_RICCN/70-411 -KIY--GGE--ATH-MPLKLNTSGVIPPIFASSI--LLFPA---TLANF------SNSNS Q2G8W0_NOVAD/80-430 -GMM--AAD--RSH-LPLKINTAGVIPPIFASSL--LLLPL---TITQFA-----GNSIS A6E0Q6_9RHOB/73-411 -KIY--DGG--SSH-LPVKVNPAGVIPAIFASSL--LLLPA---TITTFS-----GNTTN Q1UZE8_9RICK/67-404 -KMY--GGE--SSH-LPLKINQAGVIPAIFASAL--LLLPV---TFSNFS-----FSDND Q3R245_XYLFA/76-424 -NSY--MNK--SSF-LPLKLNMAGVIPPIFASSI--LAFPV---TLSIWS-----GQASS A4NK90_HAEIN/76-416 -QIL--GGH--STH-LPLKVNMANVMPAIFASSI--ILFPA---TLTQWF-----GQNDK Q057C4_BUCCC/64-407 -RMY--TAH--HSY-LPLKLNMAGVIPVIFSSSL--IVFPS---ILLTYL---------- Q8D1Z2_WIGBR/82-424 -KIY--AAQ--ITH-LPLKVNMSGVIPAIFASSL--ILFPA---TIASWF-----GEGIG Q6F7T2_ACIAD/83-426 -RIF--TAQ--QTH-LPLKINMAGVIPAIFASSL--LLFPA---SLGQWL-----GSADP Q6Q8W8_9GAMM/67-407 -RMM--QAQ--QSH-LPFKVNMAGVIPAIFASTF--LLFPA---SLSTWF-----GENES A9BRX1_DELAS/74-413 -KVY--GGQ--SSH-LPLKLNMAGVIPPIFASSI--ILLPA---TVVNWF-----SAGES Q7DDS8_NEIMB/73-410 -RA---GSQ--NTH-MPFKLNMAGVIPPIFASSI--ILFPS---TLLGWF-----GSADT Q5NHU8_FRATT/74-416 -KMF--AAQ--TSH-LPLKLNMAGVIPAIFASSI--LMVPG---VLLGWL-----SNYNS Q7WZR8_9GAMM/64-388 -KLY--ATQ--SSY-LPLKLNMAGVIPAIFASSS--LIITA---SVG------------- A5EX98_DICNV/69-412 -QQFgtSAMGERFY-LPLKINMAGVIPAIFASAI--ITLLVsglTLASSL-----PGAAG Q6MJ32_BDEBA/70-415 -GMQ--SMQTPTSH-LPIKLNISGVIPPIFASSL--LMFPA---TMAQFV-----NT--- B5EFS0_GEOBB/71-411 -KTV--GAQ--SSH-LPLKVNMAGVIPPIFASSI--IMFPA---TVGNFI-----DV--- A3EVQ1_9BACT/75-412 -KMM--GGQ--STH-IPFKINTAGVIPPIFASSL--ISFPA---IIAGFV-----SV--- Q1MPP6_LAWIP/71-412 -KVY--GGQ--STH-LPLRVNTAGVIPPIFASSL--LLFPA---TMASFD-----IS--- SECY_AQUAE/71-412 -QLY--AGR--KTY-LPIKINPAGVIPIIFAQAL--LLIPS---TLLNFV-----QN--- Q01WB2_SOLUE/74-438 -RVM--GGQ--STH-MPLKVNAGGVIPVIFASSI--LAFPQ---TLAQFG-----WVKNL Q08ZH8_STIAU/26-370 -RMF--AGQ--ATY-FPMKVNTSGVIPPIFAGAL--LSFPA---TLGTWF---------- A6GCG0_9DELT/70-411 -RMF--GGS--QNY-LPLRINNAGVIPPIFASSI--IMFPA---QIAGMT-----GN--- Q04PV8_LEPBJ/72-436 -KMV--QAK--SQS-IPFKVNGANVMPIIFASSL--ILFPQ---TIIQWL-----SSSSE SECY_BORBU/72-409 -NSN--NTV--SSY-LPIKLNPSGVLPVIFASVL--ITLPL---QILSGF-----AETS- Q73PL2_TREDE/73-413 -KMY--GGQ--NTY-IPFKINPSGVIPIIFASSF--LTFPL---MLSQMW-----GSNVS Q67JW3_SYMTH/69-405 -RVV--GGQ--RTH-LPIRINQAGVIPLIFASSL--MYFPI---TIAGFF-----PNS-- A7FQ38_CLOB1/69-409 -KIY--KGQ--STH-IPINVNSSAVIGIIFAISV--MQFPI---TIGQFW-----PESAF A6LPT1_CLOB8/69-416 sNMV--KSQ--STH-IPLSIIGSAVLAIIFSMSV--MDFPK---TIATLFggvgeSQKEW Q0SQG4_CLOPS/69-409 -KMM--KGQ--STH-IPLSIIGTTVIAIIFAMSV--MSFPT---TIAQFF-----PEAGW A9KJH4_CLOPH/71-425 -KMV--GGQ--SSH-IPLKVNTAGVIPVIFAVSI--MQFPI---IIASFF-----GVQPA A7VH89_9CLOT/71-420 -KQM--GGQ--SSN-IPLKVNTAGVIPVIFASSL--MAIPS---IITSLF-----GK-SP A6BIS2_9FIRM/71-421 -RSY--GGQ--STN-IPLKVNTAGVIPIIFSSSL--MQFPI---VIASFL-----GKDNG A7VR33_9CLOT/71-423 -KMY--GGQ--STH-LPIKVNMSGVMPIIFASSI--LTIPS---TIQLFV-----TPT-- A6NXF0_9BACE/71-437 -KMY--GGQ--SSH-IPLKVNMSGVMPIIFAQAI--ASLPA---TIAAFI-----P---- Q250L2_DESHY/70-413 -RVY--GGQ--SSH-IPMKVNQAGVIPIIFAISL--LAFPS---TIATWM-----DPAS- Q8R7X3_THETN/69-402 -RVY--GGQ--STH-IPIRINMAGVIPIIFAISL--LQFPQ---QLATFF-----PHS-- A4XLR1_CALS8/69-419 -RVY--GGQ--STH-IPIKVNIAGVIPIIFAISL--VMLPT---TIAQFF-----PNS-- A3DJJ2_CLOTH/71-411 -KMY--GGQ--STH-IPIKVNMAGVLPIIFATSF--VALPA---TIVGFF----fPNSTH A8MLG0_ALKOO/69-408 -KMY--GGQ--SSH-IPLKVNQSGVMPVIFAMSL--LQFPH---TIAYFI-----GSEG- Q18CH6_CLOD6/69-406 -KMY--GGQ--SSH-IPMKVNQSGVMPIIFASSL--LAFPQ---TIAMFM-----GPNAQ B8D0S8_HALOH/72-406 -KVY--GGR--STH-IPMRINQAGVIPVIFAQAV--LQFPT---VIAAVL-----PY--- A9B431_HERA2/73-422 sg-------------------------ffN---------------GVANFFVNSF----- A8CRX1_9CHLR/78-422 ---------------------------------------------NFWNTIYNIFnsgas A2Y4E5_ORYSI/132-498 -----------------------------E---------------SLKETLNPKTs--vg Q7UZW2_PROMP/80-422 -----------------------------I---------------KIAGSLNPGS----- Q7NKT4_GLOVI/79-416 -----------------------------A---------------TVDQVVNAI------ SECY_GUITH/68-404 -----------------------------R---------------TVLHLFDGTS----- SECY_CYACA/62-394 -----------------------------L---------------QAVYFINDIL----- Q85FU6_CYAME/42-325 ------------------------------------------------------------ A0T0J6_PHATR/72-407 -----------------------------L---------------LPKIDLPINF----- SECY_CYAPA/109-459 -----------------------------N---------------WGYQ-LIKSF----- Q4G351_EMIHU/63-407 --------------------------------------------------LSSALltnaa SECY_PAVLU/66-404 -----------------------------N---------------IATRVILDSV----- Q6B8X0_GRATL/62-395 -----------------------------P---------------NINNVINLFL----- SECY_ANTSP/62-390 ---------------------------------------------KITQFINLFL----- A4RW47_OSTLU/65-398 -----------------------------L---------------GVARFLSP------- A7PFA4_VITVI/131-465 -----------------------------K---------------KAALALN-------- A7HM32_FERNB/75-404 -----------------------------Q---------------WAIKLFS-------- A3CK84_STRSV/69-416 d---------------------------aD---------------WVKTAQSLLA----- Q5FM71_LACAC/68-415 d---------------------------qQ---------------WFKV-LNQIF----- Q03ZM6_LEUMM/68-416 s---------------------------aQ---------------WYQI-MQQIF----- SECY_STAA8/69-413 -----------------------------E---------------WAQNIANAAN----- Q4MG72_BACCE/68-415 s----------------------------K---------------WLVANLD-------- Q6F1X5_MESFL/92-454 s---------------------------aN---------------AFVRFTQHYL----- Q6KI36_MYCMO/87-436 f---------------------------rI---------------WVESNLR-------- Q4A5I3_MYCS5/83-437 s---------------------------kQ---------------WINENLQ-------- Q98Q01_MYCPU/90-438 lv--------------------------rL---------------WIERHLA-------- Q4AAF9_MYCHJ/85-434 av--------------------------rN---------------WIDNNMQ-------- Q9PQP1_UREPA/76-434 -----------------------------S---------------MGYYVIHNYF----- SECY_MYCGE/81-430 -----------------------------E---------------SRWF-VEDYL----- Q8EUD2_MYCPE/81-433 -----------------------------S---------------AGSEFINEYL----- Q7X4E3_9MOLU/69-399 ---------------------------------------------KVNEYIGIFVe--sr Q5Q069_ASTYP/59-398 -----------------------------D---------------KLTKYVNLFTntnss O21257_RECAM/57-372 ------------------------------------------------------------ Q74NB9_NANEQ/69-457 pllg---------------------tienG---------------HPINGLVAYIypdtg Q2EMT2_METVO/30-379 pllg---------------------tysnG---------------RAIDGIAYYFs---t A5UL65_METS3/72-433 pilg---------------------eivnG---------------KAVSGIALYLs---t SECY_METTH/73-436 pilg---------------------tvsnG---------------QAVDGLAYLLt---a SECY_PYRAB/72-448 pwlg---------------------tfdpT-t------------gNPVGGFVLYVi---p Q8TZA9_METKA/75-435 pilg---------------------kldpR--------------gQPISGLVYYLs---p Q9HIT0_THEAC/82-514 lskvpilgh-----------npllgsyptT-aqata---lnisatTPTGGLAYYLf---s Q2QAQ7_9EURY/161-583 mstvpilgsqga-----wsiapylgsydvG-q------------tQATDGFAWYAs---m Q0W1W5_UNCMA/75-487 tflgt--------------------fnqyN---------------QPVDGLMFYIn---p SECY_ARCFU/73-471 tifg---------------------efvnG---------------KAVSGLMFFLq---p Q8TRS4_METAC/72-470 tflg---------------------efsgS---------------KPLNGIMYYLa---p A0B9U7_METTP/75-515 tvttaettaegvrivytgyqswlgtflssAkfdaatgapisatspQPVSGLMYYLs---p SECY_HALMA/73-468 smpafl------------------gtyanG---------------QPTGGLFYFLa---p Q2FSG8_METHJ/73-458 tifg---------------------tfegQ---------------TPTGGLMWYLa---p A2SPM5_METLZ/73-458 talg---------------------eyngS---------------TPINGLMWYLa---p A0RUE4_CENSY/79-457 prndnifl-------------nvlaqfdlT-n-----------psTPIGGIVYYIt---p A8ME75_CALMQ/77-461 nsiacir---------------vittakfG-ti----------nePCPSSLIYYFt---v A3MUZ2_PYRCJ/70-435 qllq---------------------pfaaN-n------------pALITVLNVIFl---p SECY_SULSO/73-449 syvs---------------------psasN--------------iLNTVSGVFFFpppns SECY_SULAC/74-443 nsis---------------------nsasG--------------iLTDIANAFFFp--pq A2BME2_HYPBU/73-444 adn------------------------plV---------------RGMDVLYNYVs---p SECY_AERPE/73-434 ves------------------------raY---------------QIYSSIVYYLs---p A1RWR3_THEPD/75-456 pgnqnpwl-------------nviakynyT-ey---------gpvPLPGSFVYYIs---p SC61A_SCHPO/76-459 snflvr-----------------flgvweQ---------------TATSGLSYYLs---p A7E5Q2_SCLS1/76-459 enllvql----------------fgvwepK-egs--------aqlFATSGIAYYMs---p Q5KC69_CRYNE/75-459 dnllvrl----------------lgvwepM-enn-------ptqlGAVSGIAYYMs---a SC61A_ASHGO/75-460 nnpivkm----------------lgvwgtR-sdap------yspnAAISGLSYYIq---p Q59MJ6_CANAL/76-459 nnlfvkl----------------lgtwdaR-ags--------sqlYANGGLAYYIq---p A7SJW4_NEMVE/75-458 gnffvnl----------------lgtweeA-ggg-------parsYPVGGLCYYMs---p A0CFY2_PARTE/73-456 tnffvkl----------------lgtwqeA-efg--------gqsVPIGGLAYYMs---p Q22MG2_TETTH/151-538 gnfivgl----------------lgkwsiP-eag-------gshmVPVGGLVYYLs---p A0CU87_PARTE/77-460 gnflirl----------------lgyyqeL-en---------gqtVPIGGLVYYVs---p Q7RLN0_PLAYO/121-506 nsilvni----------------lgqwqeI-esn--------gtaVPIGGIAYYIs---p Q4QGX4_LEIMA/77-467 nrnflin---------------llgrweeR-gyngg----gsgqlFPVGGLAYYLv---p A5JEK2_NOSBO/75-457 tyflvra----------------lgvwssE-gs---------skyQPIKGLCYYIl---p A2DH65_TRIVA/75-462 eslatqi----------------fgvwrsH-ngms------ydysTPVSGLIYYLt---a Q2QM98_ORYSJ/88-448 dag-----------------------ggaA---------------YPVGGLVYYVt---p Q6AV46_ORYSJ/86-471 gsllvd-----------------llgkwtP-d-----------aaVPVGGIAYYVt---a Q6C854_YARLI/70-454 dnlmvqv----------------lgswgaDg--------------SPVGGIAYYI----- SSH1_YEAST/78-465 knepthii--------------ckimghyE-nan--------nllAVPTFPLSLLa---p Q6BT20_DEBHA/78-475 nysqlaasii---------gtwsldtksfNl--------------NLTSGILYFL----- A5DE75_PICGU/20-414 syspvass--------------vigkwtiD-yrs--------snlKVSSGILYFLs---p A3GFV9_PICST/78-476 kanvssfalsi-------iasfnldsysnRl--------------NLTSGALYFF----- A5DWJ5_LODEL/34-436 kltaspivs------------tlfanyvvE-pys--------nrlVIKSGVLYFFt---a Q5A2C9_CANAL/5-404 klgtspivi------------siignyvyN-pss--------nelDLNSGILNYFt---s Q74L41_LACJO/64-372 ------------------------------------------------------------ B3XPQ8_LACRE/65-377 ------------------------------------------------------------ A1C3L4_STRPA/70-403 ---------------------------------------------FPGNQILEYLsvhig Q3DVD6_STRAG/65-395 -----------------------------P---------------DITSYNDYFS----- A5LN99_STRPN/64-389 -----------------------------S---------------GLAALSKEFM----- A3CM55_STRSV/64-391 -----------------------------Q---------------LIEQWIEALS----- Q03HZ8_PEDPA/65-396 ---------------------------------------------EFNRFVQNYV----a A5IW80_STAA9/64-384 -------------------------------l------------sMFNKSISDDMpm-lt Q4L9N9_STAHJ/61-383 -------------------------------a------------tLLGSNANFEFl---s Q5HKR3_STAEQ/61-380 -------------------------------g-----------rfIVNHNFETHVf---n Q9RSK8_DEIRA/68-413 -----------------------------P---------------EVNAWINSNL----- Q5SHQ8_THET8/71-413 ---------------------------------------------PVLQGIANFF----- SECY_CORGL/73-424 ev-------------------------sdN---------------WWQRNIIAHL----- A8LB12_FRASN/74-414 q----------------------------D---------------FEQRYLSR------- Q83NQ1_TROW8/73-424 qp-------------------------paA---------------WVVW-INENF----- Q8G3Z9_BIFLO/74-421 -----------------------------S---------------WVKW-INANL----- A7B9M4_9ACTO/72-414 -----------------------------K---------------WVQW-ISAHF----- SECY_CHLTR/73-433 -----------------------------S---------------WLKR-IATML----- Q1AU49_RUBXD/70-408 s----------------------------S---------------WLFR-LAQIF----- Q8RIH6_FUSNN/75-411 ---------------------------------------------SIKTTLSIIF----- A6DRC9_9BACT/79-428 -----------------------------D---------------FART-VAPYF----- C0ACZ0_9BACT/94-454 l----------------------------P---------------FLIE-FSNNL----- Q1Q157_9BACT/75-434 pgs------------------------vgY---------------WITSRLSGIL----- A6CGP8_9PLAN/77-435 st-------------------------saF---------------W--AMLDEAF----- B4S5A8_PROA2/73-417 ---------------------------------------------EVMQNVATIF----- Q2S3P5_SALRD/75-414 ---------------------------------------------ATMQRVGGWF----- A1ZGT4_9SPHI/72-404 --------------------------------------------------ASSAF----- A6EHP4_9SPHI/71-408 -----------------------------P---------------SLQNTWLVQF----- Q11QD2_CYTH3/72-411 -----------------------------E---------------FATT-IGSTM----- Q1VTY0_9FLAO/73-421 ---------------------------------------------EMAQGITAAF----- Q1NYZ7_9FLAO/72-422 -----------------------------N---------------NLQL----------- A5KHP6_CAMJE/62-402 -----------------------------P---------------YLQA-INDFL----- A4EA78_9ACTN/52-389 ---------------------------------------------WIQA-VASAL----- Q2GEC0_NEOSM/73-411 -----------------------------S---------------HLGEFIIRYF----- Q3YRM8_EHRCJ/72-412 -----------------------------P---------------WSDF-ILMYF----- Q5GSW3_WOLTR/77-416 -----------------------------A---------------FSDF-ILNYF----- Q0ANS0_MARMM/83-421 -----------------------------G---------------WLQS-AVAIL----- A7IPQ0_XANP2/80-418 -----------------------------E---------------WLQT-ITTHI----- SECY_RICCN/70-411 -----------------------------E---------------TMGM-LTYYL----- Q2G8W0_NOVAD/80-430 pdt-----------------------kmgQ---------------AIVT-LNQYL----- A6E0Q6_9RHOB/73-411 -----------------------------P---------------VLST-VMAYF----- Q1UZE8_9RICK/67-404 -----------------------------T---------------FLN--LSSYF----- Q3R245_XYLFA/76-424 ntl------------------------fgA---------------WLQR-VSSAL----- A4NK90_HAEIN/76-416 f----------------------------E---------------WLNN-LSMLL----- Q057C4_BUCCC/64-407 -----------------------------R---------------YVFNDYKKIIyffdf Q8D1Z2_WIGBR/82-424 v----------------------------K---------------WMSK-IPYYL----- Q6F7T2_ACIAD/83-426 nag-----------------------ivkR---------------SLQD-LALVL----- Q6Q8W8_9GAMM/67-407 l----------------------------S---------------FLQS-FSLAL----- A9BRX1_DELAS/74-413 m----------------------------R---------------WLKD-IASTL----- Q7DDS8_NEIMB/73-410 n----------------------------S---------------VLHK-IAGLL----- Q5NHU8_FRATT/74-416 l----------------------------S---------------WLAD-VAEML----- Q7WZR8_9GAMM/64-388 -----------------------------Q---------------WINRSILPQL----- A5EX98_DICNV/69-412 -----------------------------R---------------YLSDLAAGFH----- Q6MJ32_BDEBA/70-415 -----------------------------P---------------WLKA-LQDSL----- B5EFS0_GEOBB/71-411 -----------------------------P---------------WVQA-ASKQL----- A3EVQ1_9BACT/75-412 -----------------------------P---------------WIQS-FGKSL----- Q1MPP6_LAWIP/71-412 -----------------------------D---------------WLKD-IAVWF----- SECY_AQUAE/71-412 -----------------------------P---------------FIKV-IADMF----- Q01WB2_SOLUE/74-438 -----------------------------P---------------WLSK-TLATI----- Q08ZH8_STIAU/26-370 -----------------------------P---------------FLQT-FRQGL----- A6GCG0_9DELT/70-411 -----------------------------P---------------YLQR-FAAAF----- Q04PV8_LEPBJ/72-436 -----------------------------Q---------------WAGWAIIMDFfn-pf SECY_BORBU/72-409 -----------------------------S---------------IARQ-ILSYL----- Q73PL2_TREDE/73-413 ---------------------------------------------WLAS-VARFL----- Q67JW3_SYMTH/69-405 -----------------------------D---------------FAVF-VGRYL----- A7FQ38_CLOB1/69-409 y----------------------------K---------------FITLNQYSPF----- A6LPT1_CLOB8/69-416 a----------------------------K---------------WVLNNPTSIF----- Q0SQG4_CLOPS/69-409 s----------------------------Q---------------WITGSSYSPF----- A9KJH4_CLOPH/71-425 ray------------------------fwP---------------KVLHMLNSQSwfnik A7VH89_9CLOT/71-420 sgv------------------------gaK---------------ILQG-MSQSYwf-na A6BIS2_9FIRM/71-421 sgi------------------------gsE---------------ILRG-LNQSNwcnpe A7VR33_9CLOT/71-423 -----------------------------G---------------FWKT-VLDAL----- A6NXF0_9BACE/71-437 -----------------------------G---------------GMDSTFMKVF----- Q250L2_DESHY/70-413 -----------------------------A---------------YVRF-VNTWF----v Q8R7X3_THETN/69-402 -----------------------------S---------------FYNF-VQKWL----- A4XLR1_CALS8/69-419 -----------------------------G---------------FYKF-VKAYF----- A3DJJ2_CLOTH/71-411 -----------------------------P--------------------VAEYF----- A8MLG0_ALKOO/69-408 -----------------------------G---------------FAKF-LNTWL----- Q18CH6_CLOD6/69-406 -----------------------------A---------------FVQKYLSMAT----- B8D0S8_HALOH/72-406 -----------------------------G---------------WAQD-IATAL----- A9B431_HERA2/73-422 ---------------------------------GPNGLAF-TLAMFVLVLLFTYFYA-LV A8CRX1_9CHLR/78-422 m---------------------------------PGGLVY-WGLYFFMTIIFAFFYT-MV A2Y4E5_ORYSI/132-498 ----------------------------------GGPWAY-YLTYAFLVFVFNIF---DI Q7UZW2_PROMP/80-422 ----------------------------------SNPWPY-ALTFFALILGFSYFYA-SL Q7NKT4_GLOVI/79-416 ----------------------------------SSGWIH-NILYLVLILFFSFFYA-TL SECY_GUITH/68-404 ----------------------------------NNKLLY-LLFYFTLILFFSYFYT-SL SECY_CYACA/62-394 ----------------------------------PFKILF-LLLYSAFIIFFNYLYC-SL Q85FU6_CYAME/42-325 ----------------------------------TWSIWW---LYVACIIFFSHFYN-LV A0T0J6_PHATR/72-407 ---------------------------------ESLNFVY-WIGYFVLILVFSSFYS-TI SECY_CYAPA/109-459 ---------------------------------PFNSLFK-DFCYLITIMLFSSNYAlTI Q4G351_EMIHU/63-407 gl------------------------------aSKLLTIYsFGINFVLVIFFSCFYV-SL SECY_PAVLU/66-404 ---------------------------------NLQQIFY-FFTFLVLIIFFSFFYT-LI Q6B8X0_GRATL/62-395 ----------------------------------PGRILY-FPAYGSLIIAFSYFYT-SL SECY_ANTSP/62-390 ----------------------------------PNQFLY-LPLYLIFIITFSYVYT-SL A4RW47_OSTLU/65-398 ----------------------------------GGGAGY-VPVNVAMICFFNYFYT-FL A7PFA4_VITVI/131-465 ----------------------------------PGGSLY-LPTNILLIAFFNYYYT-FL A7HM32_FERNB/75-404 ----------------------------------MQSPLM-MIIYALLIFFFTYFYS-VV A3CK84_STRSV/69-416 ----------------------------------TTTISG-MFMYAFLIVLFTFFYT-FV Q5FM71_LACAC/68-415 ---------------------------------SLQTTPG-VIIYTLLIILFTFFYA-FV Q03ZM6_LEUMM/68-416 ---------------------------------SMTTLPG-AILYTALIVVFTYFYA-FV SECY_STAA8/69-413 ----------------------------------PSSNVG-MVVYIVLIILFTYFYA-FV Q4MG72_BACCE/68-415 ----------------------------------FAHPIG-MTLYVGLIVAFTYFYA-FI Q6F1X5_MESFL/92-454 ---------------------------------SFNTWWG-IGIFAVMIVLFTFLYA-QV Q6KI36_MYCMO/87-436 ----------------------------------PNNTIG-FILFISITFIFAIFFG-LQ Q4A5I3_MYCS5/83-437 ----------------------------------FYKPLG-FSLLIIITFVFSLLMG-IQ Q98Q01_MYCPU/90-438 ----------------------------------FTHPIG-FSLLIIITFIFSIFMG-LQ Q4AAF9_MYCHJ/85-434 ----------------------------------IYHPIG-LIIFIVFNVSFSIIMS-LQ Q9PQP1_UREPA/76-434 ---------------------------------IVDSWTG-LAIYVVLILLFTFFFS-YV SECY_MYCGE/81-430 ---------------------------------SLSTPVG-IFLYAVLVILFSFFYS-YI Q8EUD2_MYCPE/81-433 ---------------------------------SIERPVG-LVIYTVLIVLFGFFYS-HI Q7X4E3_9MOLU/69-399 ----------------------------------SELGIY-FFVYILLIMLFSFFSS-FM Q5Q069_ASTYP/59-398 n---------------------------------NQINFFaIGFLVLLVIVLSFFSA-FM O21257_RECAM/57-372 -----------------------------------------NIFLEMLCMMFIYLFL--- Q74NB9_NANEQ/69-457 flislilg-------------------nltldnLIRTITS-SLFFLGSSILFSIYFVlAT Q2EMT2_METVO/30-379 -pygls----------------------svisdPIHAIVY-TLFLIGFCVLFGLFWVeTS A5UL65_METS3/72-433 -pndvs----------------------llvtdPVRVIVY-AFFFLLCAVLFSYLWVeIS SECY_METTH/73-436 -prsid----------------------alildPFRVVFY-AVVFIGLCVLFAWLWVeIS SECY_PYRAB/72-448 -prsif----------------------tvidnPVRALVY-LILTVISSLIFGFLWVeLT Q8TZA9_METKA/75-435 -pnsiv----------------------ktlsdPLQALGY-MMAMVIASVFFAVLWVeLT Q9HIT0_THEAC/82-514 -pnglsdwlfpilqps---gyqnillghtplqeAIHIIVF-TAFMVGFSVLFAIFWIeTT Q2QAQ7_9EURY/161-583 -vngvgdwllplln------qspdpyghslwqvVLHVITY-VTVMTLGSMMFAKFWIeTT Q0W1W5_UNCMA/75-487 -inglsdwvpqla--------alnypgiqlwqiALHVFTD-AFILIAGGILFAIFWVeTT SECY_ARCFU/73-471 -vsspydwipslvks-----qgaafaaipdwmiYLHLLID-ALILVVGGIIFAWFWVeTS Q8TRS4_METAC/72-470 -ihspydwipslvres---fasygatapaiwqiGLHVLAD-AIMLIGGGIIFALFWIeTT A0B9U7_METTP/75-515 -ihgpsdwipsmvsqstpglvelginpiagwqiWLHLLTD-TAFLIIGGIIFAIFWIeTT SECY_HALMA/73-468 -iqsrgdwmwwl-----------egtaqpvwqiLTRVGID-LFVMLVGGAVFAVFWVeTT Q2FSG8_METHJ/73-458 -inhpsdwmwwmp---------syvgghapwevLIRLGID-TTIMVVGGAIFALFWVkTA A2SPM5_METLZ/73-458 -inqpqdwmwwls--------sftgtghavwevILRVGID-CTVMILGGALFAIFWVkTA A0RUE4_CENSY/79-457 -prgld----------------------iaaldPMRAVGY-VLFMIGIVVVFGKLWVeLG A8ME75_CALMQ/77-461 -vpy--------------------------nitPQYVVVH-ILMYVVLSVVFAYLWVnLA A3MUZ2_PYRCJ/70-435 -hry---------------------------fdPLLIILN-FALYVALAIAFAWIWVqLA SECY_SULSO/73-449 aiphsiy---------------------avvldPLGALEY-AVVFIVLSILFGILWVdVA SECY_SULAC/74-443 gvphsvy---------------------alvvdPVGAAIY-AAVFIVLSIVFGMLWIdVA A2BME2_HYPBU/73-444 -prgll----------------------aavadPLRTLTF-ALAWLALGLLFGFIWVeIA SECY_AERPE/73-434 -prgvv----------------------qsiadPVKTAVF-IASWTVLSIVFGYMWVeIA A1RWR3_THEPD/75-456 -prsla----------------------saladPVHLVVY-SLLYIGFAVLFGVAWIlTS SC61A_SCHPO/76-459 -pasfq----------------------dalidPIHTLVY-VFFTMFACALFSKLWIeVS A7E5Q2_SCLS1/76-459 -plnft----------------------dalldPIHTAVY-ITYMLVACAIFSKTWIeVS Q5KC69_CRYNE/75-459 -phslt----------------------salkdPFHTVIY-IAFIVTACALFSKTWIeVS SC61A_ASHGO/75-460 -pfsft----------------------ealldPIKTVVY-VTFVLGACAMFSRTWIdVS Q59MJ6_CANAL/76-459 -pfnft----------------------dalldPIKTTIY-IAFVLGSCAVFSTTWIeIS A7SJW4_NEMVE/75-458 -petvs----------------------hiiedPVHACIY-IFFMLGSCAFFSKTWIdVS A0CFY2_PARTE/73-456 -lrdvk----------------------diindPIHAVVY-VLFVVFMCGFFAKFWIqIS Q22MG2_TETTH/151-538 -phgmi----------------------evisdPLHTILY-VVFILTTCALFSKTWIqVS A0CU87_PARTE/77-460 -prsis----------------------eaifdPIHTILY-TAFILGTCAVFSKTWIdVS Q7RLN0_PLAYO/121-506 -pnsfa----------------------ditndPFHTLIY-ISFVLVSCAFFSKTWIeVS Q4QGX4_LEIMA/77-467 -patfy----------------------dlladPIHAIFY-VVFVLTSCAVFSRLWItIS A5JEK2_NOSBO/75-457 -pesif----------------------dfklrPFYFLFY-VLFTIISCSMLSRAWVeVS A2DH65_TRIVA/75-462 -pqsiq----------------------qtihdPLHTIIY-LIFSLSSAGFISYYYLrFS Q2QM98_ORYSJ/88-448 -pskll----------------------vdpglIHELLIH-SVFVVASCTLLSMAWAeAS Q6AV46_ORYSJ/86-471 -pasaa----------------------saaanPLHAAMY-VAFVLAACAALSRAWVvVS Q6C854_YARLI/70-454 spnnf-------------------------gydVIKMVLY-SVYTIVGCTLFSKYWAeIS SSH1_YEAST/78-465 -ptsffk---------------------gvtqqPLTFITY-SAFILVTGIWFADKWQaIS Q6BT20_DEBHA/78-475 tpsksla---------------------qsllsPIRSVTY-GLAIITLSTWFAYRWSrIS A5DE75_PICGU/20-414 -ptsil----------------------ntlvsPLKTAAF-TFVVIVLSAWFANIWSsIS A3GFV9_PICST/78-476 ssspsll---------------------stilsPIRTVVY-SATVIVLATWFAEKWSyIS A5DWJ5_LODEL/34-436 -sqtll----------------------qsiisPLRVVIY-SSTVVGLATWFAYKWSyIA Q5A2C9_CANAL/5-404 -ssslv----------------------esiisPIKTTVY-SITIIVLAVWFANKWSyIS Q74L41_LACJO/64-372 ----------------------------------INNWVFqASFSAVMGILIFYFFT-FV B3XPQ8_LACRE/65-377 ----------------------------------FANPYFnMVVSGILAFVLFYFFT-FV A1C3L4_STRPA/70-403 ----------------------------------LSQLPG-VICYIFLLYFLSIGFA-YY Q3DVD6_STRAG/65-395 ----------------------------------LSSIQG-VVIYMILMLVLSVAFT-FV A5LN99_STRPN/64-389 ----------------------------------IGKPLW-VYVYISVLFLFSIIFA-FV A3CM55_STRSV/64-391 ----------------------------------MGSPAW-FILYLLTIFILALAFA-FI Q03HZ8_PEDPA/65-396 ----------------------------------FDNPVG-ILIYCSIIVFLGYVFS-FM A5IW80_STAA9/64-384 ----------------------------------FDSPVG-ISVYLVIQMLLGYFLS-RF Q4L9N9_STAHJ/61-383 ----------------------------------FANPIG-IMFYIVLQIVLSYLLS-RF Q5HKR3_STAEQ/61-380 ----------------------------------FTNPVG-ITIYLLLQMILGYFLS-RL Q9RSK8_DEIRA/68-413 ---------------------------------TFGQPLY-LALESLLIFGFTYLYN-SV Q5SHQ8_THET8/71-413 ---------------------------------NPTRPSG-LFIEVLLVILFTYVYT-AV SECY_CORGL/73-424 -q-------------------------------TPSSWQY-IVLYFALTIFFSYFYV-SV A8LB12_FRASN/74-414 ----------------------------------GDHPLY-LVAYGALIIFFTYFYV-AI Q83NQ1_TROW8/73-424 -t-------------------------------TGNSPFY-IALYFFMIVGFTYFYV-AV Q8G3Z9_BIFLO/74-421 -a-------------------------------NTTSVWY-IALYALMIVFFCFFYT-SI A7B9M4_9ACTO/72-414 ---------------------------------TQGSSFY-LTIYALMTLFFTFFYT-AI SECY_CHLTR/73-433 ---------------------------------SPGSVAY-SIFYVLLIIFFTYFWT-AT Q1AU49_RUBXD/70-408 ---------------------------------APPSAPY-LILYALLIVMFTYFYT-AV Q8RIH6_FUSNN/75-411 ---------------------------------GQNHPVY-MILYALVIMFFSFFYT-AL A6DRC9_9BACT/79-428 ---------------------------------DFGSTSY-LIIQGVMILVFTFFWV-AT C0ACZ0_9BACT/94-454 ---------------------------------MRGHWVY-YVTMTLLILFFSYFWV-SV Q1Q157_9BACT/75-434 ---------------------------------Q-EGVLY-VMLYILLITFFCYFWT-AI A6CGP8_9PLAN/77-435 -q------------------------------pMSRGFVY-TMSYVVLIYFFCYFWT-AI B4S5A8_PROA2/73-417 ---------------------------------SYDSWWY-ALMFGTMIVFFTYFYT-AI Q2S3P5_SALRD/75-414 -s-------------------------------DISSMSY-SAVFFVVVVFFTYFYT-AI A1ZGT4_9SPHI/72-404 -s-------------------------------DITTWQY-NLVFGLLIIIFTYFYT-AI A6EHP4_9SPHI/71-408 -s-------------------------------DYTSLAY-SLTFAFLIIAFTFFYT-AI Q11QD2_CYTH3/72-411 -s-------------------------------DFTSWQY-NVAFATMIILFTYFYT-AI Q1VTY0_9FLAO/73-421 -q-------------------------------NMFGFWY-SLVFGILIIVFTYFYT-AI Q1NYZ7_9FLAO/72-422 ---------------------------------SNNGIWY-NILYSILIIIITFFYT-FL A5KHP6_CAMJE/62-402 ---------------------------------NPNGYLF-HVLTFLFVIFFAYFYA-SI A4EA78_9ACTN/52-389 ----------------------------------STGWLN-WVLNVVLIVFFAYFYT-SM Q2GEC0_NEOSM/73-411 ---------------------------------SVGQPLY-FLLHSCLLVFFCFFYS-DF Q3YRM8_EHRCJ/72-412 ---------------------------------SSGKLLY-IVCYALLIIFFAFFYT-AF Q5GSW3_WOLTR/77-416 ---------------------------------MANKVVY-IAAYLALIVFFNFFYT-NF Q0ANS0_MARMM/83-421 ---------------------------------GPGSPWF-MMAYAAMIIFFCFFYT-SV A7IPQ0_XANP2/80-418 ---------------------------------GHGRPAY-MVLYVLLIVFFCFFYT-AI SECY_RICCN/70-411 ---------------------------------GHGKPVY-ILLYVALIMFFSFFYT-AI Q2G8W0_NOVAD/80-430 ---------------------------------GHGKPLY-MLFYALGIIFFSFFYT-AV A6E0Q6_9RHOB/73-411 ---------------------------------GPGQPLY-LLFFTIMIVFFAYFYTfNV Q1UZE8_9RICK/67-404 ---------------------------------TQGQPLY-MLLYASGIIFFTFFYT-SI Q3R245_XYLFA/76-424 ---------------------------------GPGEPLH-MILFAVLIIGFAFFYT-AL A4NK90_HAEIN/76-416 ---------------------------------NPGQPLY-LLVYAVAIIFFSFFYT-AM Q057C4_BUCCC/64-407 l--------------------------------KFKHSIY-LIVNIILIIFFCFFYT-NI Q8D1Z2_WIGBR/82-424 ---------------------------------EPGTFSY-SILYASAIMFFCFFYT-SL Q6F7T2_ACIAD/83-426 ---------------------------------SPGQPLY-LMLFGTLIIFFCYFYT-AL Q6Q8W8_9GAMM/67-407 ---------------------------------NPGQPLY-ILVFAGLIISFCFIWL-AL A9BRX1_DELAS/74-413 ---------------------------------TPGQPIY-VMLYATAIIFFCFFYT-AL Q7DDS8_NEIMB/73-410 ---------------------------------QHGQLLY-MALFAATVIFFCYFYT-AL Q5NHU8_FRATT/74-416 ---------------------------------QPGSIVY-TVVFAATIIFFCFFYT-SL Q7WZR8_9GAMM/64-388 ---------------------------------SPGQPLY-IMFFVLSVIFYSFFYT-AI A5EX98_DICNV/69-412 ----------------------------------QGAWLY-IATFVLLIILFSFFYT-SI Q6MJ32_BDEBA/70-415 ---------------------------------NPSGAIF-NIMFVALIVFFSFFYT-EI B5EFS0_GEOBB/71-411 ---------------------------------APGKLLY-EVLFVAFIVFFCYFYT-AV A3EVQ1_9BACT/75-412 ---------------------------------SPGSFSY-TGLYVLLIVFFCFFYT-AV Q1MPP6_LAWIP/71-412 ---------------------------------SPSTILY-NCIFLVLIFFFCYFYT-AI SECY_AQUAE/71-412 ---------------------------------QPGAIFY-NFLYVTFIVFFTYFYT-AV Q01WB2_SOLUE/74-438 ---------------------------------QHGEPMY-YVLFVAGIIFFCFFYV-SI Q08ZH8_STIAU/26-370 ---------------------------------EGNPWLY-NGLFVLLVIFFAYFYT-AL A6GCG0_9DELT/70-411 ---------------------------------SYGNWLY-LTVYVALCIFFCYFYT-QI Q04PV8_LEPBJ/72-436 sq------------------------------iWYHALFY-YIIYTSLIIFFAYFYT-AI SECY_BORBU/72-409 ---------------------------------RPNGFYY-TFLNVILIIGFTYFYS-KI Q73PL2_TREDE/73-413 ---------------------------------RSDGWGY-NVLYVVLIIFFAYFYT-QV Q67JW3_SYMTH/69-405 ---------------------------------DTRSWWF-MLINALLIVFFTYFYT-AI A7FQ38_CLOB1/69-409 ---------------------------------RDKSIAY-IVLYFLLTVFFTWFYT-VV A6LPT1_CLOB8/69-416 ---------------------------------NNKSWMY-MVLYAVLTIFFNWFYT-QI Q0SQG4_CLOPS/69-409 ---------------------------------NAKTWMY-PVLYALLTIFFTWFYT-QI A9KJH4_CLOPH/71-425 ng-------------------------------EFKYTVG-VLIYMALIVFFAYFYT-SI A7VH89_9CLOT/71-420 -n-------------------------------YPWGFLG-LAVYILLVFFFAYFYT-AI A6BIS2_9FIRM/71-421 qi------------------------------kYSW---G-LVLYIVLTVFFAYFYT-SI A7VR33_9CLOT/71-423 ---------------------------------STTGWVY-ALIYFLLILMFAYFYV-AI A6NXF0_9BACE/71-437 ---------------------------------DSNGLVY-AIVYFLLILGFSYFYA-TM Q250L2_DESHY/70-413 mn------------------------------gSLTSIPY-LIVYAVLIIFFTYFYT-AV Q8R7X3_THETN/69-402 ---------------------------------STNGLIY-NLLDIFLIIGFTYFYT-AV A4XLR1_CALS8/69-419 ---------------------------------SSGSFWY-TFFYALFIIGFTYFYT-AI A3DJJ2_CLOTH/71-411 -r-------------------------------SFQSRIEvAILTGLLIIFFTFFYT-FI A8MLG0_ALKOO/69-408 -sp----------------------------tgMPGVFIY-NLLSAVLIIFFTYFYT-AI Q18CH6_CLOD6/69-406 ---------------------------------EQGFWTY-RSIEILLIIFFSYFYT-TV B8D0S8_HALOH/72-406 ---------------------------------EPGKPVH-LVLYAAMIFFFTYFWT-AF A9B431_HERA2/73-422 MFNQQNLPEMLQRNGGFIPGIRPG-RNTEVYLTKVLNRITLIGAV-GLAVVAALP--YFV A8CRX1_9CHLR/78-422 TFEQQDIPGTLQRQGGFVPGIRPG-KMTDQYLSGVIGRITWAGAL-FLGFVAIMP--FIA A2Y4E5_ORYSI/132-498 ANLPKEISDYLNKMSARVPKIKPG-RATVEYLTKIQTSTRFWGGI-LLSLLATSS--LLL Q7UZW2_PROMP/80-422 TINPVDVASNLKKGGVAIPGVRPG-SNTANYLSGIQNRLTLLGGL-FLGSVAIIP--AAV Q7NKT4_GLOVI/79-416 IINPEDVSKNLKRMGSSIPGVRPG-TATSEYIAKVMNRLTFLGAI-FLSAVAIIP--TFV SECY_GUITH/68-404 ILNPNDVSKNLKKMESSIYGVRPG-KATTEYLQKTLNRLTFLGAL-FLAFIAIVP--NII SECY_CYACA/62-394 VLNCFELSNNLKKASVVIPSIRPG-KMTEKFFKDTLDNLTLFGSG-FLAFIVLAP--NFL Q85FU6_CYAME/42-325 IANPKELSENLNKMAVVIPSIRPG-AETQQYLNRTLNRMSWIGGI-ALSLIALLP--WLF A0T0J6_PHATR/72-407 VLNPKDISDQLQKMAVTIPGIRPG-IQTTFYLKQVMKRITLLGTT-MLATLATIP--NFV SECY_CYAPA/109-459 MINPKTLAENLNSMNALIPGVRPG-SETKVYSEQLIHRLNFIGSF-VLALVCILP--SIV Q4G351_EMIHU/63-407 VLKPKDMSENLGKMAYSIPGIRQG-KETTKYLEKVINRLAFIGGL-FLAFLAFFP--LFV SECY_PAVLU/66-404 ILSPSDIAKNLKKMSSVIQDTKPG-VATKVYIRKFILQASFVGSI-LLSALILIP--SIL Q6B8X0_GRATL/62-395 VLNPDDIAENLNKMGASIPSIRPG-SDTIRYISKILDKMTFMGGV-FLFIIALIP--SLI SECY_ANTSP/62-390 ILNPEDIAKNLKKMGASIPNIRPG-SETIKYLNTRINRLTLIGAC-FLFTITLFP--TIT A4RW47_OSTLU/65-398 QLEPKDVADQLKRQGASIPGVRPG-AATRDYITRVLERLSVLGSV-FLGALALTP--GAV A7PFA4_VITVI/131-465 QLDPDDVSEQLKRQGASIPLVRPG-KSTAAFIKMVLSRISVLGSG-FLAILAAGP--SLV A7HM32_FERNB/75-404 VIDPKDISENIKRYGGFIPGIRAG-KPTEEYITFVLNRVTFLGAI-FLVGISLLP--YLV A3CK84_STRSV/69-416 QINPEKTAENLQKSGAYIPGVRPG-KGTEDYMSKLLRRLATVGSL-FLGFISILP--ILA Q5FM71_LACAC/68-415 QVNPEKLAENLQKQGAYIPSVWPG-KDTQNYISKMLIKLSTVGSI-FLGLVALLP--QLA Q03ZM6_LEUMM/68-416 QVNPDKLSENLQKQGAYIVGVRPG-AETKAFVSKLLLNLSFVGSI-FLGVVALVP--LIA SECY_STAA8/69-413 QVNPEKMADNLKKQGSYVPGIRPG-EQTKKYITKVLYRLTFVGSI-FLAVISILP--ILA Q4MG72_BACCE/68-415 QVNPEQMAENLKKQNGYVPGIRPG-KSTEQYVTKILYRLTFIGAI-FLGAISILP--LVF Q6F1X5_MESFL/92-454 QINPEKISENFQKSGTFIPGIKPG-KDTTNFLKGTINRLSLFGAI-FLAAIAALP--YVI Q6KI36_MYCMO/87-436 QSKVDKIAEDFAKNSTFIPGIKPG-QETETYLTGIVLRLCFFSAF-YLIIIGGMQfaQQL Q4A5I3_MYCS5/83-437 QSKVDKIAEDFAKNGTFIPKVTPG-EETQNYLVAIVFRLSFFSAF-YLVIIAGMQyvQIM Q98Q01_MYCPU/90-438 QSKIDKISEDFNKSGTFIPGLRPG-DQTENYLIDVVLRLSTFSAF-YLSILVSIQyiMQM Q4AAF9_MYCHJ/85-434 QSRVDKIAQDFAKNSTFIPGIRPG-EQTEDYLISVVLRLSVFSAI-YLTFLGILQpvEIM Q9PQP1_UREPA/76-434 QLNPPKMAEDIKKAGRFIPGVQVG-MDTEKHITKVIYRVNWIGAP-ILAFLACLP--HLV SECY_MYCGE/81-430 QINPERLAKNFEKSGRFIPGIRPG-NDTEKHIARVLIRINFIGAP-FLTVIAIIP--YIV Q8EUD2_MYCPE/81-433 QVNSEKLAENFQKSGKFIPGVKMG-EETQKYISKTLNRVNCIGVP-FLACLAIVP--YLI Q7X4E3_9MOLU/69-399 TINPKDVAEHLSKQNAYLKDVQPG-LPTVKKIVREMFKITFLGSC-FLTLLASTP--DII Q5Q069_ASTYP/59-398 NVNPEDISEHLSKQDAYIAGLRPG-EQTTRYLANTLFKITVLGTV-FITALVVTP--ILM O21257_RECAM/57-372 -------SRFLKKYLKFIYNINKN-NIYIEHINKNIYSIFFISHLyYLGILRDYClfCFL Q74NB9_NANEQ/69-457 GQDSEGLAKQLSKMFGRI-GLKRDyRIIKHYLDKIIPCVTVLGGF-IVGFLALLS--YWV Q2EMT2_METVO/30-379 GLDAKSMAQRLGGLNMAIKGFRKSnKSIENRLKRYIKPITVMGSA-FVGLLAALA--DFT A5UL65_METS3/72-433 GLNAKKISEQLYKSGIQIPGFRSSkRQLYKILKKYIPALTIISGL-YVGIIAFCA--DLT SECY_METTH/73-436 NIGPRHVARQLYQMGMQIPGFRSSrGQFEKILKRYIPTITILGGA-FVGLLAFVA--DLT SECY_PYRAB/72-448 GLDARTIARQLQRAGLQIPGFRRDpRTLERVLQKYIPYVTFWGSL-TVALIAVLA--DFL Q8TZA9_METKA/75-435 GMGPREIARHLHRAGLHIPGFRRDiRVLEKRLQKYIYPVTVMGGA-FVGFLAAGA--DLM Q9HIT0_THEAC/82-514 NMGASAVAKQIQASGMQIPGFRRDpRVMERVLKKYIPAITIFSGA-VVGLLAAGA--NLI Q2QAQ7_9EURY/161-583 NMGAKDVAKQIENTGMQIPGFRKNpKVLERILMRYIPPVTLFSGA-FVGLLAAGA--DLL Q0W1W5_UNCMA/75-487 GMGASRVARQIQKSGMQIPGFRRNeQVIEKVVSRYIPKVTVIGGA-FVGFLTLLS--SLF SECY_ARCFU/73-471 GMDARTVASQIAKSGMQVPGFRKSpQVLERVLSRYIPKVTILGGA-IIGILTLVA--NML Q8TRS4_METAC/72-470 GMGAKPTAQKIFNSGMQIPGFRRNiGSIEKVMQRYIPKVTVIGGA-FIGILTLVA--SLL A0B9U7_METTP/75-515 GMGAKSIAAKIHASGLQIPGYRRSpVSIERLMERYIPKVTVIGGA-IIGLLTVIA--SLL SECY_HALMA/73-468 DMGPEATAKQIHNSGMQIPGFRQNvGVIEKVLERYIPQVTVIGGA-LVGLLAVMA--NML Q2FSG8_METHJ/73-458 GLDSKAVARQIQLSGMSIPGYRRNpAVLEKVLDRYIPRVTVIGGV-FIGIMSVVA--NLF A2SPM5_METLZ/73-458 GLDSKHVARQIQNSGMQIPGYRRSpAVLERYLDRYIPRVTVIGGV-FIGLLSVMA--NML A0RUE4_CENSY/79-457 GLSPKSAAKNLLDADVQIPGFRRSnQPIEVLLNKYIPSVTIIGSM-ILGALAGAS--DVL A8ME75_CALMQ/77-461 GLSAEDQARTMVSSGLSIPGFRASaRSLAVHLKRYVNSLTFTSGL-LAGFIAALG--DVL A3MUZ2_PYRCJ/70-435 GLSAEDQARQFTQSQLHVPGFRQSeRVLAKILERPINALTIISGF-IAGTFASLG--NVL SECY_SULSO/73-449 GLDPATQAQQLVEAGIEIPGVRNNpKIIEGILARYIYPLAFFSSI-IVGLIAVFA--TLL SECY_SULAC/74-443 GLDPKTQAEQMIRSGIEIPGMRTNpRIIEGILSKYIYALGFFSSL-IVGLIAVVA--TFL A2BME2_HYPBU/73-444 GLSPRQQAENLIKSGMELPGIRKNvKLLERILARYIYPLTVISSL-LVTTMAILA--DVF SECY_AERPE/73-434 GLNPREQAERLIKGGLAIPGMRSDpRVLERVLRRYIYPLTFLSSL-IVAALVIVA--DIF A1RWR3_THEPD/75-456 GMDPETQAEQLAKAQLQIPGFRKSeKVIASMLKRYIWGLTILSSI-IIGVIAVVS--DIF SC61A_SCHPO/76-459 GASPRDVAKQLKSQQLVMAGHRE--GSMYKELKRIIPTAAWLSGA-VVGALAVAS--DLL A7E5Q2_SCLS1/76-459 GSSPRDVAKQLKDQGLVMAGHRE--QSMYKELKRIIPTAAAFGGA-CIGALSVGS--DLL Q5KC69_CRYNE/75-459 GSGPRDVAKQLKDQNMTLAGHRD--ASIYKELKRIIPTAAAFGGA-TLGLLSVVA--DMM SC61A_ASHGO/75-460 GTSPRDVSKQFKEQGLVINGRRE--TSVYRELKKVIPTAAAFGGA-TIGALSVGS--DLL Q59MJ6_CANAL/76-459 GTSPRDVAKQFKEQGLVIAGHRD--TSAYKELKKIIPIAAAFGGA-TIGALSVVC--DLM A7SJW4_NEMVE/75-458 GSSAKDVAKQLKDQQMVMRGHRD--KSMVHELNRYIPTAAAFGGL-CIGALSVLA--DFL A0CFY2_PARTE/73-456 GESAKDVARKFKDEQIKIKGLRE--ESMVKYLSGYIPVAAFCGGV-CIGLLTIVA--DIL Q22MG2_TETTH/151-538 GSSVKDVAKQLKEQGMGLVGSRD--SGLKSHLKRYIPIAATFGGL-CIGALSVVA--DFI A0CU87_PARTE/77-460 GSSPKDVAKQLKEQDMQIVGYRD--SSMKDVLKRYIPIAASFGGM-CIGALTILA--DFL Q7RLN0_PLAYO/121-506 GSSAKDVAKQLRDQHIGMRGHRDTpTSLTRVFNRYIPTAAAFGGM-CIGALTILA--DFL Q4QGX4_LEIMA/77-467 HTAPRDVAKQLASQGRWLVQARESeDDMTRLLEKYIPVAASFGGL-CVGALTIFA--DFL A5JEK2_NOSBO/75-457 DNTPTQVASQMKKNKMTLKGVRE--VNCASVLSKYIPTAALLGGC-FTSLVVLIS--NLF A2DH65_TRIVA/75-462 NQAPADVAEALKKQHLTLKGHREDqKRLEKTLSRYIPTAAALGGI-LVALLSFVA--DFL Q2QM98_ORYSJ/88-448 RSSAREFRTRVIGTGYFVW------DETSRRIDRVIAAAAAVGGF-AVGGLAVYA--GAV Q6AV46_ORYSJ/86-471 GSSSRDVARRLREQQMVMPGMRE--ASMQRELERYIPAAAALGGV-CVGALTVAA--DLM Q6C854_YARLI/70-454 GSAPKDVAKQFQAQSIVIVGQRA--QSAPRELAKVIPVAAAVGGA-VVGAIVAFC--DIF SSH1_YEAST/78-465 GSSARDVALEFKDQGITLMGRRE--QNVAKELNKVIPIAAVTGAS-VLSLITVIG--ESL Q6BT20_DEBHA/78-475 GSSPKDISKQFKEQGISISGKRD--ISITKELSRVIPVASVSGAF-VLAALAIAG--ELL A5DE75_PICGU/20-414 GSSPKDISKQFKEQGISIAGKRD--ISITKELSRVIPVASVSGAT-VLGLIAVAG--EVL A3GFV9_PICST/78-476 GSAPKDISKQFKDQGISISGKRD--ISITKELSRVIPVAAVSGGF-ILAAIAVAG--DLL A5DWJ5_LODEL/34-436 GSSPKDISKQFKEQGISIAGKRD--ISITKEFAKIIPTAAVTGAF-ILSALAVTG--DYL Q5A2C9_CANAL/5-404 GSSPKDISKQFKDQGISLAGKRD--ISITKELSRVIPVASVSGAF-ILSVVALIG--DFF Q74L41_LACJO/64-372 NFDPKEQAKSFRNNHYYIPNIAPG-RPTQRYLNRLIWIIAFPGAV-LNAFQLVFG--LYG B3XPQ8_LACRE/65-377 QFDPKAQAKAMLQGNNYILGVRPG-EPTRKYLRQILLHVSFLGAL-LNAIQLSFG--LLG A1C3L4_STRPA/70-403 NYDPYEISKNMRNNGDYISGKKPG-EETIKYIQYVVNSFAQFGAF-TVIIFGGLP--MLA Q3DVD6_STRAG/65-395 NIDPTKISEAMRESGDFIPNYRPG-KETQSYLSKICYLFGTFSGF-FMAFLGGVP--LLF A5LN99_STRPN/64-389 TMNGEEIADRMKKSGEYIYGIYPG-ADTSLFINRLVLRFSVIGGL-FNVVMAGGP--MLF A3CM55_STRSV/64-391 NISGDQIAERMQKSGEYIENVYPG-GATRRYINGLVTYFALVGAF-YLILISGLP--MMV Q03HZ8_PEDPA/65-396 NFQTERLTKNLKKSGDYIFNVVPG-TATRHYLNQRLFHLSTVANI-FFLIIVGTP--LIV A5IW80_STAA9/64-384 LINTKQKSKDFLKSGNYFSGVKPG-KDTERYLNYQARRVCWFGSA-LVTVIIGIP--LYF Q4L9N9_STAHJ/61-383 LINTKKKADEFLKNGNYFDPIRPG-RETERYLNSKARRVCWTGAI-LVALILAVP--LYS Q5HKR3_STAEQ/61-380 LINTKRKSKEFLKNGNYFEGIQPG-QQTEKFLGSKARRICWFGSI-VVAIVLAIP--MYS Q9RSK8_DEIRA/68-413 QFDPKRIAEQLREAGGFIPGVRPG-GPTADFLGRISGRLSLWGAI-FLVILTILP--QLV Q5SHQ8_THET8/71-413 QFDPKRIAESLREYGGFIPGIRPG-EPTVKFLEHIVSRLTLWGAL-FLGLVTLLP--QII SECY_CORGL/73-424 QYDPAEQAENMKKYGGFIPGIRPG-RPTAEYLGFVMNRLLFVGSL-YLAVIAVLP--NIM A8LB12_FRASN/74-414 TFNPTEVADNMRKYGGFIPGIRPG-RPTAEYLDHVLSRITLPGSL-FLGVITVLP--LAL Q83NQ1_TROW8/73-424 TFNPTEIADNMKNYGGFISGIRPG-VPTANYLSYIIKRITLPGSL-YLGIVSLIP--LIA Q8G3Z9_BIFLO/74-421 TFNPDETADNMKQYGGFIPGIRAG-NATSRYLTYVMNRLNTVGAV-YLLFVALIP--TVL A7B9M4_9ACTO/72-414 TFNPDEVADNMKKYGGFIPGYRAG-RPTAEYLRYVINRITSAGAL-YLVIIALLP--SLA SECY_CHLTR/73-433 QFRPEQIASEMKKNGAFIPGIRQG-KPTQTYLEYTMNRVTLLGAV-FLAVVAILP--SIL Q1AU49_RUBXD/70-408 QFNPIEHADNLKKSGGYIPGIRPG-QPTALYLNSVLTRITLFGAV-FLAVIAVLP--YLI Q8RIH6_FUSNN/75-411 VFDPEKVAENLKQGGGTIPGIRPG-EETVEYLEGVASRITWGGGI-FLAIISILP--YVI A6DRC9_9BACT/79-428 QFNPIQIADDLNRSGAFVPGHRPG-EPTSTFLNDTMTRITVAGAI-FLVILALLP--YVL C0ACZ0_9BACT/94-454 MFKPIQIAEDLKKYGGYIPGVRPG-EPTAKFLDFVMTRITLAGAI-FLTIIAVFP--DFL Q1Q157_9BACT/75-434 QFNPREMSNNMKDYGSFIPGIRPG-HRTAEYLESIMGKITLAGAA-FLSLIAILP--KLV A6CGP8_9PLAN/77-435 TFNPKDMAENLKDYGSFIPGYRPG-ARTAAYLEQVMVRITYVGAA-FLSLVAIIP--TLV B4S5A8_PROA2/73-417 AFNPKEVADTMRRQGGFIPGVRPG-KSTADFIDNILTRITLPGAI-SLAFIAVLP--TFL Q2S3P5_SALRD/75-414 TVNPQEMADTMKRQGGFIPGIRPG-KQTSEFIDTVLTRITLPGSI-FLGLVAIFP--AFA A1ZGT4_9SPHI/72-404 SVNPKQIADDLKRNGGFIAGVKPG-SDTSEYIDKIMSKITLPGSI-WLAIVAILP--AIA A6EHP4_9SPHI/71-408 TVNPTQMSDDMKKNGGFIPGIKPG-FATSSFIDDVISKITFPGAV-FLAIIAILP--SVA Q11QD2_CYTH3/72-411 TVNPNSIAEDLRRNGGFIPSVKPG-LATSEYIDDVLTKITLPGSI-FLALLAILP--AFA Q1VTY0_9FLAO/73-421 TVPTNKMADDLKRSGGFIPGIRPG-SETSEYLDRVMSQITLPGSI-FLALIAVFP--AVI Q1NYZ7_9FLAO/72-422 SIPVNKISDDLKINGVYIPNRKPG-KDTCFFLKKIVSQIYLTGSL-LLVIIALLP--SIF A5KHP6_CAMJE/62-402 VFNAKDIAENLKKQGGFIPGIRPG-EGTSSYLNEVASRLTLSGSI-YLGLVATLP--WVL A4EA78_9ACTN/52-389 VFNPDDTADNLKKQGGFIPGVRPG-RATAAYIKNALNKITLPSAV-FLALIAIVP--SII Q2GEC0_NEOSM/73-411 VFNTTEISDSLKKGEAIVAGRRPG-ISTKRHLDYVLRRITVVGAA-YLVCICVVP--EIF Q3YRM8_EHRCJ/72-412 VFDAKETSEILKKNGGFVPGKRPG-NATCEYFNYVIKRLTVLGSI-YLTVICIIP--ELI Q5GSW3_WOLTR/77-416 IFNPEENADFLKKNGGFIPGRRPG-KHTSDYLQDIVFKLTFIGSA-YLVVICTVP--EVM Q0ANS0_MARMM/83-421 VSNPDDMAENLRKYGGFLPGIRPG-KRTAEYIDFVMSRLTFIGAL-YLVLICMVP--MMM A7IPQ0_XANP2/80-418 VFNPVETADNLKKHGGFIPGIRPG-ERTAEYIDYVLTRITVVGAA-YIAAVCLFP--ELL SECY_RICCN/70-411 VFNSEETANNLRKYGAYIPGKRPG-KNTSDYFDYILTRLTVIGGI-YLSVICVIP--ELL Q2G8W0_NOVAD/80-430 VFNPEETAENLKKNGGFIPGIRPG-KNTANYLDYVLTRITVLGAA-YITVVCVVP--EFI A6E0Q6_9RHOB/73-411 AFKTDDVAENLKNQNGFIPGIRPG-KRTAEYLDFVVNRVLVIGSA-YLAAVCLLP--EIL Q1UZE8_9RICK/67-404 TFNPTETADNLRKYGGFVPGIRPG-ENTALYIEKIVTKLTTIGAL-YLTIVCLMP--EFL Q3R245_XYLFA/76-424 VFSSQETADILKKSGALIPGIRPG-KATSDYVDGVLTRLTAVGSL-YLVIVCLLP--EFM A4NK90_HAEIN/76-416 QYNPRDTADNLKKSGAFIPGIRPG-EQTSRYIDKVMTRLTLIGGL-YVTFVCLVP--YIM Q057C4_BUCCC/64-407 IFNVQDTANNLKKSGAFLPGIRPG-LKTAEYIKNIVFKLTTIGSI-YTVFICLIP--DIV Q8D1Z2_WIGBR/82-424 VFNSKDTADNLKKSGAFISGIRPG-IKTSQYINKIMMNLTLIGAT-YIALICLMP--DFF Q6F7T2_ACIAD/83-426 VFSPKEVSENLKRSGAYVPGIRPG-EQTARYLDHILNRLTFIGAI-YITVVCLMP--MIL Q6Q8W8_9GAMM/67-407 TFNTKDVSDNLKRSGAYIAGIRPG-EQTANYIDNVLARLTVFGAI-YLTLICLLP--LAL A9BRX1_DELAS/74-413 VFNSRETADNLKKSGAFIPGIRPG-DQTARYIDKILVRLTLAGAV-YITFVCLLP--EFL Q7DDS8_NEIMB/73-410 VFSPKEMAENLKKSGAFVPGIRPG-EQTSRYLEKVVLRLTLFGAL-YITTICLIP--EFL Q5NHU8_FRATT/74-416 VLNPKETADNLKKSGAYISGVRPG-EQTAKYIDAVMTRLTLVGSL-YITAICLLP--IFV Q7WZR8_9GAMM/64-388 VLNAKEVSINFKKSGAFIHGMRPG-KQTAGFISKVSSRLNWFGAI-YIVFFSLIP--QLI A5EX98_DICNV/69-412 MFENRELADSLKKSSAFIQGFRPG-RQTADYIDTVQERLTFVGAF-YVAFVCVLP--SLV Q6MJ32_BDEBA/70-415 VFNPNDVAENLKKYGGFVPGVRAG-KSTADYIQRVLERVNVVGCI-YLCTICILP--GIM B5EFS0_GEOBB/71-411 TFNPVDVADNVKKQGGYVPGIRPG-KETSDFLDAVLTKLTFAGAI-YISAVCVLP--SIL A3EVQ1_9BACT/75-412 VLNPTDIAENMQKYGGYIPGVRPG-QKTVEYLYRVMNRITFVGAL-YLSIVCVIP--ELL Q1MPP6_LAWIP/71-412 IFDSKDISENLKKAGGFIPGIRPG-EKTCEYLDGVLSRLTLWGGV-YISIISILP--MML SECY_AQUAE/71-412 LINPVELAENLHKAGAFIPGVRPG-QDTVKYLERIINRLIFFGAL-FLSVIALIP--ILI Q01WB2_SOLUE/74-438 IFNPNEAADNMRKYGGFIPGIRPG-RNTADYMNNILTKITVVGGI-YLAILCLIP--DIM Q08ZH8_STIAU/26-370 TFRPDDVADNIKKQGGYIPGIRPG-RQTADFIERVLNRITFGGAI-YLATICVIP--TIL A6GCG0_9DELT/70-411 QFNPVDLADNLKKQNASIPGVRPG-KRTAEHIEAILGRLTFAGSW-YISAVCVLP--VFL Q04PV8_LEPBJ/72-436 QFNPAELAENLKKYGGFIPGIRPG-SHTKEYIEKVLNRITLPGAM-FLAGLALAP--YII SECY_BORBU/72-409 QLSPKDISNNIRKNGGTIPGIKSD-E-MEKYLDEIMNKTLFSGSI-FLSIIAIIP--FLV Q73PL2_TREDE/73-413 ALNPTEIAKQIRENGGSIPGIRT--DKTEEYLQKILNRLILPGSL-YLAAIAVLP--TVI Q67JW3_SYMTH/69-405 TFNPENVADNIKKNGGFIPGYRPG-RPTAEYLERVSSRLTLVGGL-FLAAVTILP--ITI A7FQ38_CLOB1/69-409 TFKPDEMAENMHKSSGFIPGIRPG-EPTAEYIERVITKSSIIGGT-FAAIIAVFP--IIM A6LPT1_CLOB8/69-416 TFKPDEMSENLHKSAGFVPGVRPG-EETTTYFERVLNRLSFIGGI-LAAVLAVTP--VMI Q0SQG4_CLOPS/69-409 TFKPDEMAENMHKSSGFIPGIRPG-KPTEIYLEKVLNRISMFGGC-FAAIIAVVP--ILV A9KJH4_CLOPH/71-425 TFNPMEVANNMKKQGGFIPGIRPG-KPTTEYLTKVLNYIIFIGAI-GLMIVAIIP--IFF A7VH89_9CLOT/71-420 TFNPMEIANNMKKSGGFVPGIRPG-KPTQDYLNKILNYIIFIGAV-GLLIVAMIP--MFF A6BIS2_9FIRM/71-421 TFNPLEIANNMKKSGGFIPGIRPG-RPTVEYLTKILNYIIFVGAC-GLILVQIVP--ILF A7VR33_9CLOT/71-423 QYNPIEMANNLRQNNGTIPGIRPG-KPTSDYIQKILSKITLIGAL-FLAVIALLP--IAF A6NXF0_9BACE/71-437 QFNPIEVANNLKKNGGFVPGFRPG-KPTADFIYKVLNKITLFGAI-YLAVIALLP--IIT Q250L2_DESHY/70-413 SFNPVDVADNLKKYGGFIPGLRPG-RATSDYLSKILSRLTLAGGT-FLAMIAVLP--SLV Q8R7X3_THETN/69-402 IFNPQDISDNLKKYGGFIPGIRPG-KPTTEYLTKVLNRIVFVGAL-FLAFIATMP--VVL A4XLR1_CALS8/69-419 VFNPVEIANNLKNNGGFIPGIRPG-KPTVDFITRVLSKVTFAGAL-FLAFIAILP--TLV A3DJJ2_CLOTH/71-411 QFNPVEVANNLKKNGGFIPGIRPG-KPTSDYIYKVVSRISWFSAL-FLAIIQILP--SLL A8MLG0_ALKOO/69-408 TFNPVEISNNMKQNGGFIPGIRPG-KPTADYINKILTRITLSGAV-FLAIITIVP--TIV Q18CH6_CLOD6/69-406 SFNTEDISKNMKNNGGFIPGIRPG-EPTMDYLNRILTRLTLAGAT-FLAIIAMVP--ALT B8D0S8_HALOH/72-406 TFNPEEVADNMRKSGAFIPGIRPG-KATENFLTRILVRVTLAGAI-FLTVIAIMP--YFI A9B431_HERA2/73-422 QQIT------------------------GL----------QIG-FSS-TGLL----IVVG A8CRX1_9CHLR/78-422 REVT------------------------GI----------QVIqLSS-FGML----IVVG A2Y4E5_ORYSI/132-498 DRYL--------------------------rq------inEGFsIGF-TSVL----IIVG Q7UZW2_PROMP/80-422 ERAT------------------------NV---------qTFQgLGA-TSLL----ILVG Q7NKT4_GLOVI/79-416 EQGT------------------------GI---------tTFNgLGA-TSLL----ILVG SECY_GUITH/68-404 ETLT------------------------NL---------sVFKgLGG-TSLL----IIVG SECY_CYACA/62-394 EFVF------------------------HI---------rVFKgLAV-SSLL----IVVG Q85FU6_CYAME/42-325 SSLK------------------------------------IFSgFGA-TSLL----IVIG A0T0J6_PHATR/72-407 ESTL------------------------SI---------tSLNgLST-TSLL----ILAG SECY_CYAPA/109-459 ERSL------------------------GL---------pKLQiLSP-VSIS----IALG Q4G351_EMIHU/63-407 GNFI------------------------------------QFGlFKNlTSLL----ILIG SECY_PAVLU/66-404 AAAL------------------------GV---------hPLSiSGI-TSLI----LSFS Q6B8X0_GRATL/62-395 AYIT------------------------HT---------sLLQgLGT-TSLL----ILVG SECY_ANTSP/62-390 YYIF------------------------KI---------nTLKgLGA-TSLL----ILVG A4RW47_OSTLU/65-398 EQIT------------------------GL---------qTFRgFAG-TSLL----ILVG A7PFA4_VITVI/131-465 EQTT------------------------HL---------tAFRgFAG-TSVL----ILVG A7HM32_FERNB/75-404 EGIT------------------------RV----------NIW-LGG-TSAL----IAVG A3CK84_STRSV/69-416 KDVF------------------------GLt--------dAVA-LGG-TSLL----IIIS Q5FM71_LACAC/68-415 TNFW------------------------NLp--------sSIG-LGG-TSLL----IVIG Q03ZM6_LEUMM/68-416 SDVW------------------------GLn--------eKIG-LGG-TSLL----ISIG SECY_STAA8/69-413 TKFM------------------------GLp--------qSIQ-IGG-TSLL----IVIG Q4MG72_BACCE/68-415 TKIA------------------------TLp--------pSAQ-IGG-TSLL----IIVG Q6F1X5_MESFL/92-454 SKLT------------------------NLp--------sQLA-IGG-TGLI----ICIS Q6KI36_MYCMO/87-436 AGVP------------------------------------ENIsFGG-TSVI----ILVT Q4A5I3_MYCS5/83-437 TGIL-----------------------------------qPSIaFGG-TSLM----ILVS Q98Q01_MYCPU/90-438 AGMP------------------------------------AAIsFGG-TSMM----ILVS Q4AAF9_MYCHJ/85-434 LGLP------------------------------------SAItISG-TSII----ILAT Q9PQP1_UREPA/76-434 ALVA------------------------KTinhgipviqpSTI-FGG-TSII----IMVT SECY_MYCGE/81-430 SYFI------------------------RLp--------nSLS-LGG-TGII----IIVT Q8EUD2_MYCPE/81-433 TMTT------------------------GIp--------nGIA-IGG-TGVI----IMVT Q7X4E3_9MOLU/69-399 NYLA------------------------GIk-------isQNIpFSG-TSLL----IIVG Q5Q069_ASTYP/59-398 EHFL------------------------SL----------KDMkLGG-TSLL----IIVS O21257_RECAM/57-372 FIF---------------------------------------------SKLF----FIIS Q74NB9_NANEQ/69-457 SIPI-----------------------------------------GG-TSIL----LATM Q2EMT2_METVO/30-379 GALG-----------------------------------------GG-TGVL----LTVS A5UL65_METS3/72-433 GALG-----------------------------------------GG-TGVL----LTVG SECY_METTH/73-436 GSLG-----------------------------------------GG-TGVL----LTVG SECY_PYRAB/72-448 GALG-----------------------------------------TG-TGIL----LTVG Q8TZA9_METKA/75-435 GALG-----------------------------------------GG-TGVL----LTVS Q9HIT0_THEAC/82-514 GTVG---------------------------------------dTSG-TGLL----LAVG Q2QAQ7_9EURY/161-583 GTVG---------------------------------------nATG-TGLL----LAVG Q0W1W5_UNCMA/75-487 GILG---------------------------------------aVSG-TGML----LAVS SECY_ARCFU/73-471 GTIG---------------------------------------nVSG-TGLL----LAVS Q8TRS4_METAC/72-470 GTLG---------------------------------------sAGG-TGLL----LTVS A0B9U7_METTP/75-515 GTLG---------------------------------------gAGG-TGLL----LAVS SECY_HALMA/73-468 GTIG---------------------------------------gVSG-TGLL----LTVS Q2FSG8_METHJ/73-458 GVIG---------------------------------------aVSG-TGLL----LTVS A2SPM5_METLZ/73-458 GIIG---------------------------------------fVGG-TGLL----LTVS A0RUE4_CENSY/79-457 GVFG-----------------------------------------SG-IGIL----LMVD A8ME75_CALMQ/77-461 GVYG-----------------------------------------TG-IGLI----LMVE A3MUZ2_PYRCJ/70-435 GVWG-----------------------------------------GG-VGLI----LLVE SECY_SULSO/73-449 GAYG-----------------------------------------TG-IGIL----LAVT SECY_SULAC/74-443 GTYG-----------------------------------------TG-VGLL----LAIT A2BME2_HYPBU/73-444 GAYG-----------------------------------------TG-SGLV----LLVG SECY_AERPE/73-434 GAYG-----------------------------------------TG-TGLL----LAVG A1RWR3_THEPD/75-456 RVMG-----------------------------------------GG-TGIL----LLVG SC61A_SCHPO/76-459 GALG-----------------------------------------SG-TAVL----LCTT A7E5Q2_SCLS1/76-459 GALG-----------------------------------------SG-TGIL----LAVT Q5KC69_CRYNE/75-459 GALG-----------------------------------------SG-TGIL----MATT SC61A_ASHGO/75-460 GTLG-----------------------------------------SG-TSIL----MATT Q59MJ6_CANAL/76-459 GTLG-----------------------------------------SG-TSIL----LAVT A7SJW4_NEMVE/75-458 GAIG-----------------------------------------SG-TGIL----LAVT A0CFY2_PARTE/73-456 GAIG-----------------------------------------SG-TGIL----LAVT Q22MG2_TETTH/151-538 GVIG-----------------------------------------SG-TGIL----LAVN A0CU87_PARTE/77-460 GAIG-----------------------------------------SG-TGIL----LSVT Q7RLN0_PLAYO/121-506 GALG-----------------------------------------SG-TGIL----LAVT Q4QGX4_LEIMA/77-467 GAIG-----------------------------------------SG-TGIL----LSVT A5JEK2_NOSBO/75-457 DTIG-----------------------------------------SG-TNIF----LATS A2DH65_TRIVA/75-462 SAFG-----------------------------------------SG-TGII----LAVS Q2QM98_ORYSJ/88-448 GAIG----------------------------------------EAG-PELL----FAVL Q6AV46_ORYSJ/86-471 GAVG-----------------------------------------SG-AGML----LAVT Q6C854_YARLI/70-454 GGLG----------------------------------------ASA-APMI----VAVT SSH1_YEAST/78-465 GLKG-----------------------------------------KA-AGIV----VGIA Q6BT20_DEBHA/78-475 GGLG-----------------------------------------KG-VAAI----IGVC A5DE75_PICGU/20-414 GGAG-----------------------------------------KG-VGTI----IGVS A3GFV9_PICST/78-476 GGLG-----------------------------------------KS-AATI----VGVS A5DWJ5_LODEL/34-436 GGLG-----------------------------------------RN-VASI----VGVS Q5A2C9_CANAL/5-404 GGLG-----------------------------------------YG-VASI----IGVT Q74L41_LACJO/64-372 GNFL------------------------GN--------------YAG-FAIIpmnvVMIT B3XPQ8_LACRE/65-377 GQVL------------------------GN--------------FAG-LAIIpmnmIMIV A1C3L4_STRPA/70-403 VLLQ--------------------------gqg----knsVSIaLLI-SNAY----IIVS Q3DVD6_STRAG/65-395 ALG---------------------------n-------ddLRTvSSM-TGIF----MMIT A5LN99_STRPN/64-389 VLF---------------------------d-------ekLLRlAMI-PGLF----MMFG A3CM55_STRSV/64-391 VLV---------------------------d-------irYLRlSMI-PGIF----MIFI Q03HZ8_PEDPA/65-396 GLYL--------------------------p-------eiTNFaFVF-ANIL----ILIT A5IW80_STAA9/64-384 TLFV--------------------------p-------hlSTEiYFS-VQLI----VLVY Q4L9N9_STAHJ/61-383 TLLV--------------------------p-------nlSTEiYFS-MQLI----ILVY Q5HKR3_STAEQ/61-380 ALLV--------------------------p-------hlLKEvYFT-TQMI----VFVY Q9RSK8_DEIRA/68-413 QKAT------------------------GI----------TTFqFSG-TGLL----IIVG Q5SHQ8_THET8/71-413 QNLT------------------------GI----------HSIaFSG-IGLL----IVVG SECY_CORGL/73-424 LDL-------------------------GVda-----gsaGATpFGG-TAIL----ILVS A8LB12_FRASN/74-414 LNLT------------------------KD----------QPFpFAG-TSVL----IMVG Q83NQ1_TROW8/73-424 FALF------------------------GLsa------diP---LGG-TSVL----IMVG Q8G3Z9_BIFLO/74-421 IMAL------------------------GL---------nAKLpFGG-TTIL----IIAG A7B9M4_9ACTO/72-414 IIPL------------------------QLs--------sSQMpFGG-TTLL----IIIG SECY_CHLTR/73-433 GRIL------------------------RVda------nvSYF-LGG-TAML----IVVG Q1AU49_RUBXD/70-408 TGAL------------------------NLp--------nSIY-LGG-TSML----IVVG Q8RIH6_FUSNN/75-411 FTSM------------------------GL----------PVY-FGG-TGII----IVVG A6DRC9_9BACT/79-428 MNAM------------------------GSgstd--fiitQF--FGG-TSLL----IMVG C0ACZ0_9BACT/94-454 NAEL------------------------NVpq------riSSF-FGG-TGML----ITVG Q1Q157_9BACT/75-434 AGGF------------------------ELnr------aiAGF-YGG-TGLL----IIVG A6CGP8_9PLAN/77-435 STWL------------------------GVdf------lvASF-YGG-TGLL----IVVS B4S5A8_PROA2/73-417 TKFA------------------------NVtp------gfAQF-FGG-TSLL----IIVG Q2S3P5_SALRD/75-414 MQA-------------------------GVsq------gfAMF-YGG-TSLL----ILVQ A1ZGT4_9SPHI/72-404 VKF-------------------------GIqn------sfAQF-YGG-TSLL----IMVG A6EHP4_9SPHI/71-408 VKF-------------------------GIks------efAHF-YGG-TSLL----ILVG Q11QD2_CYTH3/72-411 SMT-------------------------GIek------efAYF-YGG-TSLL----IMIG Q1VTY0_9FLAO/73-421 VSLL------------------------NVqq------gwGLF-FGG-TSLL----IMVG Q1NYZ7_9FLAO/72-422 ISLGg---------------------dkNF----------SLF-FGG-TTII----IIVG A5KHP6_CAMJE/62-402 VKFM------------------------GV----------PFH-FGG-TSVL----IVVQ A4EA78_9ACTN/52-389 FSFT------------------------GN---------hLIQaFGG-TSIL----IMVG Q2GEC0_NEOSM/73-411 RNYF------------------------GF----------DAI-ISG-TSLL----IIVN Q3YRM8_EHRCJ/72-412 RYNY------------------------SV----------SFT-LGG-TSFL----IIVN Q5GSW3_WOLTR/77-416 RYYY------------------------DM----------PFI-FGG-TSLL----IIVN Q0ANS0_MARMM/83-421 ----------------------------NP----------NTA-LGG-TSLL----IVVS A7IPQ0_XANP2/80-418 ISYA------------------------SL----------PFY-FGG-TSLL----IVVS SECY_RICCN/70-411 MNKY------------------------VI----------SLS-LGG-TSFL----IVVN Q2G8W0_NOVAD/80-430 MAET------------------------GM---------gTLF-FGG-TSLL----IVVN A6E0Q6_9RHOB/73-411 RNQF------------------------AI----------PFY-FGG-TSVL----IVVS Q1UZE8_9RICK/67-404 IANY------------------------PI----------PFY-LGG-TSIL----IVVV Q3R245_XYLFA/76-424 QSRI------------------------GA----------SFH-FGG-TSLL----IAVV A4NK90_HAEIN/76-416 TSAW------------------------DV----------KFY-FGG-TSLL----IVVV Q057C4_BUCCC/64-407 RYFF------------------------KV----------PFN-FGG-TSLL----IVVV Q8D1Z2_WIGBR/82-424 RVFI------------------------KS----------PFH-FGG-TSLL----IVVV Q6F7T2_ACIAD/83-426 QNSF------------------------GI----------PFH-LGG-TSLL----IVVV Q6Q8W8_9GAMM/67-407 INFAg----------------------iSP----------TIS-IGG-TSVL----IIVV A9BRX1_DELAS/74-413 ILKY------------------------NV----------PFY-FGG-TSLL----IIVV Q7DDS8_NEIMB/73-410 TTVL------------------------NV----------PFY-LGG-TSLL----ILVV Q5NHU8_FRATT/74-416 VKFFa----------------------qGL----------SFT-FGG-TSLL----IVVV Q7WZR8_9GAMM/64-388 MVYC------------------------KI----------PFC-GGG-ISIL----IMVV A5EX98_DICNV/69-412 NMGS------------------------ASg--------qVLFlFGG-TSLL----IAVV Q6MJ32_BDEBA/70-415 VSQF------------------------NV----------PFQ-FGG-TSLL----ILVG B5EFS0_GEOBB/71-411 IGKF------------------------NL----------PFY-FGG-TSLL----IAVG A3EVQ1_9BACT/75-412 IYQL------------------------HV----------PFY-FGG-TSLL----IVIG Q1MPP6_LAWIP/71-412 ISQF------------------------NV----------PFY-FGG-TSIL----ILVG SECY_AQUAE/71-412 SVWF------------------------NI----------PFY-FGG-TTAL----IVVG Q01WB2_SOLUE/74-438 ISGIklhhlwlvgdwidrvaprfileglGV----------NFY-FGG-TSLL----IVVG Q08ZH8_STIAU/26-370 TQWL------------------------QV----------PFA-FGG-TALL----IVVG A6GCG0_9DELT/70-411 QTEF------------------------NV----------PFY-YGG-TSLL----IVVG Q04PV8_LEPBJ/72-436 IKFL------------------------DLssns--gggsLVYtFGG-TSLL----IMVG SECY_BORBU/72-409 QNIF------------------------RFph------dvSRI-MGG-SSLL----IMVG Q73PL2_TREDE/73-413 QWAF------------------------SFpr------niSML-MGG-TSLL----ILVG Q67JW3_SYMTH/69-405 MSLA------------------------GV---------qNAY-IGG-SSLL----IVVS A7FQ38_CLOB1/69-409 AAYS------------------------KF---------qGIS-FGG-TSML----IMVG A6LPT1_CLOB8/69-416 QNYT------------------------QF---------qNIA-FSG-TGLL----IVIN Q0SQG4_CLOPS/69-409 ANYT------------------------PF---------qGIQ-FGG-TSLL----ILVS A9KJH4_CLOPH/71-425 SGMF------------------------DA----------HVS-FSG-TSLI----IVVS A7VH89_9CLOT/71-420 NGFF------------------------SV----------NVS-FGG-TSII----IVVG A6BIS2_9FIRM/71-421 NGWL------------------------GA----------KVS-FGG-TSLI----IIVS A7VR33_9CLOT/71-423 SAFT------------------------GM---------hNLM-MGG-TSVI----ILVG A6NXF0_9BACE/71-437 SNII------------------------NLasgs--qmgrSLS-IGG-TSII----IVVG Q250L2_DESHY/70-413 IGLT------------------------GI---------pNIT-LGG-TSLL----IVVS Q8R7X3_THETN/69-402 MNVT------------------------GL----------QLY-FGG-TALL----IAVG A4XLR1_CALS8/69-419 GLMFr----------------------hQL----------NIY-FGG-TSLL----IVVG A3DJJ2_CLOTH/71-411 QAIT------------------------GI---------rGIW-FAG-TSVL----ILVG A8MLG0_ALKOO/69-408 LGIT------------------------HI----------PIS-FGG-TTII----IIVG Q18CH6_CLOD6/69-406 THYM------------------------KV----------NMS-LAG-TSLL----IVVG B8D0S8_HALOH/72-406 SDIT------------------------RV----------RIS-FGG-TSLL----IMTG A9B431_HERA2/73-422 ----VAVD---TMR A8CRX1_9CHLR/78-422 ----VALD---TMK A2Y4E5_ORYSI/132-498 ----SIIE---LRR Q7UZW2_PROMP/80-422 ----VAID---TAK Q7NKT4_GLOVI/79-416 ----VAID---TVR SECY_GUITH/68-404 ----VQVD---TSK SECY_CYACA/62-394 ----VAID---LIK Q85FU6_CYAME/42-325 ----VSID---TMR A0T0J6_PHATR/72-407 ----VVLD---LVR SECY_CYAPA/109-459 ----VAVD---TTR Q4G351_EMIHU/63-407 ----VITD---TTS SECY_PAVLU/66-404 ----IIND---TVR Q6B8X0_GRATL/62-395 ----VAID---TAK SECY_ANTSP/62-390 ----VAID---TAK A4RW47_OSTLU/65-398 ----VATD---SAR A7PFA4_VITVI/131-465 ----CATD---TAR A7HM32_FERNB/75-404 ----VALD---IAQ A3CK84_STRSV/69-416 ----TGIE---GMK Q5FM71_LACAC/68-415 ----VVLE---LSR Q03ZM6_LEUMM/68-416 ----VALD---LIR SECY_STAA8/69-413 ----VAIE---TMK Q4MG72_BACCE/68-415 ----VALE---TMK Q6F1X5_MESFL/92-454 ----VAIQ---TTQ Q6KI36_MYCMO/87-436 ----ASYE---TIT Q4A5I3_MYCS5/83-437 ----VSIE---TIS Q98Q01_MYCPU/90-438 ----VSLE---TID Q4AAF9_MYCHJ/85-434 ----TTLE---TIS Q9PQP1_UREPA/76-434 ----ATLE---LWN SECY_MYCGE/81-430 ----AVVE---FIS Q8EUD2_MYCPE/81-433 ----GSLD---FWS Q7X4E3_9MOLU/69-399 ----VALE---SIQ Q5Q069_ASTYP/59-398 ----VALE---TIQ O21257_RECAM/57-372 ---yLFIEidfSFF Q74NB9_NANEQ/69-457 ----ISYM---VYE Q2EMT2_METVO/30-379 ----IVYR---FYE A5UL65_METS3/72-433 ----IIHK---IYE SECY_METTH/73-436 ----IVYR---LYE SECY_PYRAB/72-448 ----ILYR---FYE Q8TZA9_METKA/75-435 ----ILYN---MYE Q9HIT0_THEAC/82-514 ----IIIQ---FYE Q2QAQ7_9EURY/161-583 ----IILR---TYE Q0W1W5_UNCMA/75-487 ----ITYQ---LYE SECY_ARCFU/73-471 ----IAYR---FYE Q8TRS4_METAC/72-470 ----IVYR---LYE A0B9U7_METTP/75-515 ----IMYR---LYE SECY_HALMA/73-468 ----ITYK---LYE Q2FSG8_METHJ/73-458 ----ITYR---LYE A2SPM5_METLZ/73-458 ----IIYR---LYE A0RUE4_CENSY/79-457 ----ILIN---YYN A8ME75_CALMQ/77-461 ----IIIQ---YYT A3MUZ2_PYRCJ/70-435 ----IALQ---YYA SECY_SULSO/73-449 ----IAIQ---YYS SECY_SULAC/74-443 ----IAMQ---YYN A2BME2_HYPBU/73-444 ----IIYN---FYQ SECY_AERPE/73-434 ----IINQ---YYA A1RWR3_THEPD/75-456 ----IIVQ---YYS SC61A_SCHPO/76-459 ----TIYG---YYE A7E5Q2_SCLS1/76-459 ----IIYG---YFE Q5KC69_CRYNE/75-459 ----IIYG---YFE SC61A_ASHGO/75-460 ----TIYG---YYE Q59MJ6_CANAL/76-459 ----TIYG---YYE A7SJW4_NEMVE/75-458 ----IIYQ---YFE A0CFY2_PARTE/73-456 ----IIYG---YFE Q22MG2_TETTH/151-538 ----IVYG---YFE A0CU87_PARTE/77-460 ----IIYG---YFE Q7RLN0_PLAYO/121-506 ----IIYQ---FYE Q4QGX4_LEIMA/77-467 ----MINQ---YYE A5JEK2_NOSBO/75-457 ----IVHQ---YLE A2DH65_TRIVA/75-462 ----IINQ---FTA Q2QM98_ORYSJ/88-448 ----VIKN---LAE Q6AV46_ORYSJ/86-471 ----TVYQ---CYE Q6C854_YARLI/70-454 ----SMNN---YFE SSH1_YEAST/78-465 ----GGFS---LLE Q6BT20_DEBHA/78-475 ----GAFG---ILE A5DE75_PICGU/20-414 ----AAFG---VLE A3GFV9_PICST/78-476 ----AAFS---VLE A5DWJ5_LODEL/34-436 ----SAFG---ILE Q5A2C9_CANAL/5-404 ----ASFA---VLE Q74L41_LACJO/64-372 -----------MFM B3XPQ8_LACRE/65-377 ----MFMQ---GIK A1C3L4_STRPA/70-403 ----LLLG---VIE Q3DVD6_STRAG/65-395 gmsfMILDefqVIR A5LN99_STRPN/64-389 ----GMIF---TIR A3CM55_STRSV/64-391 ----GMVF---SIK Q03HZ8_PEDPA/65-396 ----IIDT---TMD A5IW80_STAA9/64-384 ----ISIN---IAE Q4L9N9_STAHJ/61-383 ----ISINigeTIR Q5HKR3_STAEQ/61-380 ----IGIN---IAE Q9RSK8_DEIRA/68-413 ----VALE---TLK Q5SHQ8_THET8/71-413 ----VALD---TLR SECY_CORGL/73-424 ----VALT---TVK A8LB12_FRASN/74-414 ----VGLE---TVK Q83NQ1_TROW8/73-424 ----VGLD---TVK Q8G3Z9_BIFLO/74-421 ----VGLD---TLR A7B9M4_9ACTO/72-414 ----VGLQ---TVK SECY_CHLTR/73-433 ----VILD---TMK Q1AU49_RUBXD/70-408 ----VSLD---TVR Q8RIH6_FUSNN/75-411 ----VALD---TIQ A6DRC9_9BACT/79-428 ----VVLQ---TMQ C0ACZ0_9BACT/94-454 ----VILD---TMK Q1Q157_9BACT/75-434 ----VALD---MVQ A6CGP8_9PLAN/77-435 ----VVLD---LVN B4S5A8_PROA2/73-417 ----VGLD---TLQ Q2S3P5_SALRD/75-414 ----VTLD---TLQ A1ZGT4_9SPHI/72-404 ----VVLN---TLQ A6EHP4_9SPHI/71-408 ----VVLD---TLQ Q11QD2_CYTH3/72-411 ----VVLD---TLQ Q1VTY0_9FLAO/73-421 ----VAID---TIQ Q1NYZ7_9FLAO/72-422 ----GLLDikyTIN A5KHP6_CAMJE/62-402 ----VALD---TMR A4EA78_9ACTN/52-389 ----VVLD---TVD Q2GEC0_NEOSM/73-411 ----VITD---LLS Q3YRM8_EHRCJ/72-412 ----VIID---TFS Q5GSW3_WOLTR/77-416 ----VTTD---TIM Q0ANS0_MARMM/83-421 ----VTMD---TVS A7IPQ0_XANP2/80-418 ----VTMD---TVS SECY_RICCN/70-411 ----VVLD---TMT Q2G8W0_NOVAD/80-430 ----VTVD---TIT A6E0Q6_9RHOB/73-411 ----VTMD---TIQ Q1UZE8_9RICK/67-404 ----VAID---TVT Q3R245_XYLFA/76-424 ----VVMD---FIS A4NK90_HAEIN/76-416 ----VIMD---FIV Q057C4_BUCCC/64-407 ----VLIE---FIT Q8D1Z2_WIGBR/82-424 ----VTID---FMT Q6F7T2_ACIAD/83-426 ----VVMD---FMA Q6Q8W8_9GAMM/67-407 ----VLMD---FMS A9BRX1_DELAS/74-413 ----VTMD---FMA Q7DDS8_NEIMB/73-410 ----VTMD---FST Q5NHU8_FRATT/74-416 ----VMMD---FMA Q7WZR8_9GAMM/64-388 ----VVLD---FLS A5EX98_DICNV/69-412 ----VAMD---LMS Q6MJ32_BDEBA/70-415 ----VALD---TAQ B5EFS0_GEOBB/71-411 ----VGMD---TLS A3EVQ1_9BACT/75-412 ----VSLD---TAQ Q1MPP6_LAWIP/71-412 ----VAMD---FMS SECY_AQUAE/71-412 ----VALD---TFR Q01WB2_SOLUE/74-438 ----VAMD---TIN Q08ZH8_STIAU/26-370 ----VALD---TVQ A6GCG0_9DELT/70-411 ----VALD---TAQ Q04PV8_LEPBJ/72-436 ----VALE---TLK SECY_BORBU/72-409 ----VALD---TLI Q73PL2_TREDE/73-413 ----VDLD---TMS Q67JW3_SYMTH/69-405 ----VALE---TTK A7FQ38_CLOB1/69-409 ----FALD---TIR A6LPT1_CLOB8/69-416 ----VALD---FTR Q0SQG4_CLOPS/69-409 ----VSLE---IMR A9KJH4_CLOPH/71-425 ----VVLE---TMK A7VH89_9CLOT/71-420 ----VVIE---TMK A6BIS2_9FIRM/71-421 ----VILE---TLK A7VR33_9CLOT/71-423 ----VALD---TMK A6NXF0_9BACE/71-437 ----VALE---TVK Q250L2_DESHY/70-413 ----VALE---TMK Q8R7X3_THETN/69-402 ----VALD---TMK A4XLR1_CALS8/69-419 ----VALE---TIR A3DJJ2_CLOTH/71-411 ----VALE---TVK A8MLG0_ALKOO/69-408 ----VALE---TMK Q18CH6_CLOD6/69-406 ----VALE---LKR B8D0S8_HALOH/72-406 ----VALQ---TMQ hmmer-3.1b2/easel/demotic/examples/example.sto0000664361611702660230000036470612473612605021026 0ustar wheelerteddy# STOCKHOLM 1.0 #=GF ID Orn_DAP_Arg_deC #=GF AC PF00278.15 #=GF DE Pyridoxal-dependent decarboxylase, C-terminal sheet domain #=GF AU Finn RD, Griffiths-Jones SR #=GF SE Prosite #=GF GA 20.10 20.10; #=GF TC 20.40 20.10; #=GF NC 19.80 20.00; #=GF BM hmmbuild HMM.ann SEED.ann #=GF SM hmmsearch -Z 9421015 -E 1000 HMM pfamseq #=GF TP Domain #=GF RN [1] #=GF RM 10378276 #=GF RT Structure of mammalian ornithine decarboxylase at 1.6 A #=GF RT resolution: stereochemical implications of PLP-dependent amino #=GF RT acid decarboxylases. #=GF RA Kern AD, Oliveira MA, Coffino P, Hackert ML; #=GF RL Structure Fold Des 1999;7:567-581. #=GF DR INTERPRO; IPR000183; #=GF DR PROSITE; PDOC00685; #=GF DR SCOP; 1qu4; fa; #=GF DR HOMSTRAD; Orn_Arg_deC_NC; #=GF DR HOMSTRAD; Orn_DAP_Arg_deC; #=GF CC These pyridoxal-dependent decarboxylases act on ornithine, #=GF CC lysine, arginine and related substrates. #=GF SQ 105 #=GS O14439_USTMA/296-443 AC O14439.1 #=GS O01579_CAEEL/298-416 AC O01579.1 #=GS AZIN1_HUMAN/282-406 AC O14977.2 #=GS ADC_MOUSE/286-408 AC Q8BVM4.1 #=GS Q7DFY1_SELRU/266-371 AC Q7DFY1.1 #=GS Q7UFM7_RHOBA/290-397 AC Q7UFM7.1 #=GS Q7MC63_VIBVY/293-399 AC Q7MC63.1 #=GS Q70GM6_CHLRE/256-376 AC Q70GM6.1 #=GS A8BFD3_GIALA/305-445 AC A8BFD3.1 #=GS DCOR_SOLLC/308-424 AC O22616.2 #=GS Q7PV11_ANOGA/282-398 AC Q7PV11.4 #=GS Q7Q083_ANOGA/289-408 AC Q7Q083.4 #=GS Q7PZ99_ANOGA/280-394 AC Q7PZ99.4 #=GS DCOR2_DROME/276-390 AC P40808.2 #=GS A9NCJ9_COXBR/264-371 AC A9NCJ9.1 #=GS Q98K89_RHILO/273-385 AC Q98K89.1 #=GS Q6SF82_9BACT/264-372 AC Q6SF82.1 #=GS Q9X2I6_THEMA/263-370 AC Q9X2I6.1 #=GS Q82VZ0_NITEU/286-391 AC Q82VZ0.1 #=GS Q5LXE4_SILPO/280-393 AC Q5LXE4.1 #=GS Q7CRV2_AGRT5/264-377 AC Q7CRV2.2 #=GS Q8PS97_METMA/278-390 AC Q8PS97.1 #=GS Q5YT58_NOCFA/255-366 AC Q5YT58.1 #=GS O69865_STRCO/277-392 AC O69865.1 #=GS Q5XQ82_9ARCH/314-419 AC Q5XQ82.1 #=GS Q604F1_METCA/244-348 AC Q604F1.1 #=GS Q7VZY7_BORPE/241-343 AC Q7VZY7.1 #=GS Q88IS0_PSEPK/241-343 AC Q88IS0.1 #=GS Q5HSR6_CAMJR/244-361 AC Q5HSR6.1 #=GS P73562_SYNY3/258-365 AC P73562.1 #=GS Q9RUH6_DEIRA/278-394 AC Q9RUH6.1 #=GS Q7MAL4_WOLSU/251-357 AC Q7MAL4.1 #=GS O24865_HELPY/267-385 AC O24865.1 #=GS Q5LVU5_SILPO/266-369 AC Q5LVU5.1 #=GS Q72EZ9_DESVH/261-367 AC Q72EZ9.1 #=GS Q57LZ4_SALCH/318-441 AC Q57LZ4.1 #=GS Q82HL1_STRAW/330-442 AC Q82HL1.1 #=GS Q75JL7_DICDI/295-407 AC Q75JL7.1 #=GS Q7WXK3_RALEH/291-407 AC Q7WXK3.1 #=GS Q7A862_STAAN/277-393 AC Q7A862.1 #=GS Q5SEM5_RALSO/282-398 AC Q5SEM5.1 #=GS Q76KY1_STRHA/280-393 AC Q76KY1.1 #=GS Q8RKC5_ERWCH/297-409 AC Q8RKC5.1 #=GS Q7CYS1_AGRT5/270-383 AC Q7CYS1.2 #=GS Q7N8H2_PHOLL/306-419 AC Q7N8H2.1 #=GS Q82VG2_NITEU/296-409 AC Q82VG2.1 #=GS Q5YWM9_NOCFA/340-451 AC Q5YWM9.1 #=GS Q72WM6_DESVH/318-424 AC Q72WM6.1 #=GS Q62F85_BURMA/278-395 AC Q62F85.1 #=GS Q7NPE5_GLOVI/307-415 AC Q7NPE5.1 #=GS Q7A0X5_STAAW/290-398 AC Q7A0X5.1 #=GS DCDA_MYCS2/336-449 AC Q9X5M1.1 #=GS DCDA_ACTPA/309-415 AC O69203.1 #=GS Q8TY23_METKA/277-383 AC Q8TY23.1 #=GS Q7N7F9_PHOLL/289-407 AC Q7N7F9.1 #=GS Q8F7A1_LEPIN/276-395 AC Q8F7A1.1 #=GS Q8GGR7_STRAZ/284-405 AC Q8GGR7.1 #=GS DCDA_METJA/305-410 AC Q58497.1 #=GS DCDA_METJA/305-410 DR PDB; 1tuf B; 315-420; #=GS DCDA_METJA/305-410 DR PDB; 1twi D; 315-420; #=GS DCDA_METJA/305-410 DR PDB; 1tuf A; 315-420; #=GS DCDA_METJA/305-410 DR PDB; 1twi A; 315-420; #=GS DCDA_METJA/305-410 DR PDB; 1twi C; 315-420; #=GS DCDA_METJA/305-410 DR PDB; 1twi B; 315-420; #=GS Q7ULZ0_RHOBA/283-389 AC Q7ULZ0.1 #=GS Q6SHW6_9BACT/289-395 AC Q6SHW6.1 #=GS Q5V5E3_HALMA/306-412 AC Q5V5E3.1 #=GS DCDA_METTH/292-398 AC O27390.1 #=GS Q87EA9_XYLFT/758-866 AC Q87EA9.1 #=GS DCDA1_ARATH/351-459 AC Q949X7.1 #=GS DCDA_PSEFL/285-390 AC O05321.1 #=GS Q5FPL4_GLUOX/282-390 AC Q5FPL4.1 #=GS Q9A681_CAUCR/288-394 AC Q9A681.1 #=GS Q5FEQ0_EHRRW/291-397 AC Q5FEQ0.1 #=GS Q7MT14_PORGI/263-379 AC Q7MT14.1 #=GS Q6MM66_BDEBA/286-391 AC Q6MM66.1 #=GS Q6L350_PICTO/286-391 AC Q6L350.1 #=GS Q97AJ0_THEVO/281-380 AC Q97AJ0.1 #=GS Q728N7_DESVH/285-394 AC Q728N7.1 #=GS Q62B72_BURMA/307-413 AC Q62B72.1 #=GS Q66B85_YERPS/267-374 AC Q66B85.1 #=GS Q5NIN9_FRATT/298-400 AC Q5NIN9.1 #=GS Q8XS02_RALSO/281-396 AC Q8XS02.1 #=GS SPEA_XYLFT/343-555 AC Q87F25.1 #=GS Q5NHM0_FRATT/327-467 AC Q5NHM0.1 #=GS SPEA_PROMP/355-574 AC Q7V3M9.1 #=GS SPEA_GLOVI/346-557 AC Q7NE10.1 #=GS Q6MQU4_BDEBA/373-587 AC Q6MQU4.1 #=GS Q72F01_DESVH/373-585 AC Q72F01.1 #=GS Q5SHU0_THET8/347-559 AC Q5SHU0.1 #=GS SPEA_BACTN/346-558 AC Q8A2B1.1 #=GS O25176_HELPY/412-542 AC O25176.1 #=GS SPE2_ARATH/396-596 AC O23141.1 #=GS O04429_DIACA/405-605 AC O04429.1 #=GS SPE1_AVESA/355-532 AC P22220.1 #=GS Q5X0L3_LEGPL/343-556 AC Q5X0L3.1 #=GS SPEA_CHRVO/343-556 AC Q7NU27.1 #=GS SPEA_VIBVY/354-570 AC Q7MK24.1 #=GS Q7PZA0_ANOGA/274-386 AC Q7PZA0.3 #=GS Q60D03_SOLDE/147-257 AC Q60D03.2 #=GS DCOR_NEUCR/326-471 AC P27121.1 #=GS DCOR_YEAST/329-460 AC P08432.1 #=GS DCOR_CANAL/324-468 AC P78599.1 #=GS Q84527_PBCV1/263-371 AC Q84527.1 #=GS Q84527_PBCV1/263-371 DR PDB; 2nv9 A; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nv9 H; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nv9 C; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nv9 F; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nva H; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nv9 E; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nva D; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nv9 D; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nv9 G; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nva C; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nva E; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nv9 B; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nva B; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nva F; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nva A; 263-371; #=GS Q84527_PBCV1/263-371 DR PDB; 2nva G; 263-371; #=GS Q5MNH7_NEOUN/277-400 AC Q5MNH7.1 #=GS Q58P26_ENTHI/268-382 AC Q58P26.1 #=GS O15696_PLAFA/807-931 AC O15696.1 #=GS DCOR_LEIDO/509-682 AC P27116.1 #=GS P78829_SCHPO/238-357 AC P78829.1 #=GS O76203_HAECO/287-407 AC O76203.1 #=GS DCOR_PANRE/294-416 AC P49725.1 O14439_USTMA/296-443 ALATNIIAVRRGEPSAAM..................................................................................DHVEAT........PKAQVMYY.QNDGLYGS.FNCVIFDHVKFIQSSDAGPRVRVRADDWVARG........................ASGECGRLALQQEAMTLESCSVWGPTCDSID.CV...RD.........HVELPK........GLQVGDWLVYENMGAYTICAAS.TFNGIR..RSEIRYT O01579_CAEEL/298-416 TLCTNVIGKRAMDAKFI...................................................................................TNDDFD.........DGVGFVYQTNDGVYGS.FGCKQMDI....KPLCKPLDVE............................................NDSEEQLHFGTILGPTLDGTD.VA..............QRLMKS.......RQLRVGEWLVWEQMGAFTIPVDS.EHS.....VPPVYYY AZIN1_HUMAN/282-406 TLAVNIIAKKVVENDKFP.................................................................................SGVEKTG.......SDEPAFMYY.MNDGVYGS.FASKLSED....LNTIPEVHKK............................................YKEDEPLFTSSLWGPSCDELD.QI...VE.........SCLLP.........ELNVGDWLIFDNMGADSFHEPS.AFNDFQ..RPAIYYM ADC_MOUSE/286-408 TVAVSIVAKREVLDQASR..................................................................................EEQTGA........APKSIVYY.LDEGVYGV.FNSVLFDN....TCPTPALQKK............................................PSADQPLYSSSLWGPAVEGCD.CV...AE.........GLWLP.........QLQVGDWLVFDNMGAYTVDTKS.LLGGTQ..ARRVTYA Q7DFY1_SELRU/266-371 NLVTSVIGTKTRG...........................................................................................EQ.............PWYILDEGIYGC.FSGIMYDH....WTYPLHCF................................................GKGNKKPSTFGGPSCDGID.VL...YR.........DFMAP.........ELKIGDKVLVTEMGSYTSVSAT.RFNGFY..LAPTIIF Q7UFM7_RHOBA/290-397 TLITRVIGKSRRWE..........................................................................................LP.............WFF.LDDGIYGS.FSGKIFDH....TDFPLLVEN..............................................DGSRETVPCVVAGPTCDSTD.IV...SR.........DQWLP.........DLEVGELVLVPSMGAYAAASAS.PFNGLP..MANSVAI Q7MC63_VIBVY/293-399 TSVASVMGQAEREG..........................................................................................QI.............WYY.LDDGIYGS.FSGLMFDD....ARYPLTTI...............................................KQGGELIPSVLSGPTCDSVD.VI...AE.........NILLP.........KLNNGDLVIGRTMGAYTSATAT.DFNFFK..RAQTIAL Q70GM6_CHLRE/256-376 TLLTPVYGQRDRVAAD.....................................................................................GSVKK.............DYW.LTDGLYGS.FNCILYDG....QNPGYKVVRSPL........................................MADSTDSRTFLSTLWGPTCDSAD.CV...YK.........DVTLP.........VLRNGDWLMWNNAGAYTVAGAC.DFNGIEFTTPGKLYV A8BFD3_GIALA/305-445 TLGTRIYGRRIIFDKIEDNS.............................................................................CLTEKEIME....SGKASINEVKYY.VGDGVYGY.YNAILFDH....VVPHLRFTDKHGNR...................................KELSGAHAGSSLNTSSIFGPTCDSLD.CI...LK.........ERKLP.........LLDVGDWVITDAFGAYTYAAAT.EFNGIP..HVSVVCC DCOR_SOLLC/308-424 TLATTIIGKRVRGE..........................................................................................LK.............EYW.INDGLYGS.MNCVLYDHATVTATPLACMSNRN.........................................NLNCGGSKTFPSTVFGPTCDALD.TV...LR.........DYQLP.........ELQVNDWLIFPNMGAYTKAAGS.NFNGFN..TSAIVTH #=GR DCOR_SOLLC/308-424 sAS ......................................................................................................................................................................................................................*......................................................................... Q7PV11_ANOGA/282-398 TLVSFVDSKRVMKEKQPD..................................................................................GTEKTR.............MYYYLNDGIFGT.FYCTAHEA....QPAIPIVER..............................................KTGAKDFPTSVWGPTCDVMD.LI...LP.........DVMLP.........ELNVGDSVVFENCGAYGQVLAC.RFNGFP..LPKVIAY Q7Q083_ANOGA/289-408 TLLTTVQGKKIVRDDA.....................................................................................GQIQQ.............MMYYINDGVFGTLFDWLSLREIKDLKRAVPLVRR.............................................EREHEPAFPTTIWGPTCDSTD.IV...CE.........DVPYP.........EHHIGDYIVFENLGAYGMTFAT.NFNGFP..KPTVQVY Q7PZ99_ANOGA/280-394 TLVTNVQSKRV.CLNAR...................................................................................TGTIDR.............MMYYLNDGVYAS.FNSILYDH....QVPQPKLIG..............................................GQAGKQYKSTLWGPTCDALD.QL...IE.........TIALP.........ELQIDDWVVFENMGAYTIPVAS.PFNGFE..LPKVYCY DCOR2_DROME/276-390 TLICKVHAKREVRSKD.....................................................................................GKLDT.............MMYYLNDGIFGAFAGMFYYPE....EVAPELYLD.............................................EAESLPKLKSVIWGPSCDAMD.KI...S..........DLLLP.........NLNPGDLLGFRNMGAYTMPIAS.PFNGFD..VPETRFF #=GR DCOR2_DROME/276-390 sAS ......................................................................................................................................................................................................................*......................................................................... A9NCJ9_COXBR/264-371 SVIVNVELRKDD...........................................................................................................ILY.INDGTYGSLFDAGIPHF....IFPVHLLRPK............................................HTADVDLLPFSFYGPTCDSLD.YM...KG.........PFYLPN........DIKAGDYIEIGQMGAYGRTLST.AFNGFK..QREGVIM Q98K89_RHILO/273-385 SLIVRVLLRKGK...........................................................................................................RLY.INDGIWASLSDSWTGKI....TLPARFIPDPAI.......................................RTRNGAEKNVVPFKVCGATCDSVD.IL...SR.........PFWLPE........TVDTGDWIEIGHIGAYSLSLRT.RFNGFY..PDTFVEV Q6SF82_9BACT/264-372 TLATQIKALRGL...........................................................................................................RTVFLNDGVYGL.LSEFRDLG....VSQRYQAWRA...........................................GSKLAGPSAAYTVFGPTCDSID.KL...PS.........PLHLPK........SIQEGDYLLFSEIGAYSLSLAT.AFNGYG..GCEIVAV Q9X2I6_THEMA/263-370 WLVTKVLLKSERSG..........................................................................................EK.............WVY.IDAGVFHG.LAETIQNF....EYEIRVLG...............................................KEREELEEYHLAGPTCDSVD.VI...YD.........RIFLPK........SITLNDLVCFINAGAYTVEYNT.RFNGIE..PPKMVFI Q82VZ0_NITEU/286-391 CFVCRVVGTATRNG..........................................................................................KR.............WMY.WDAGIFGGIIE..VSEG....LRYEILTQ................................................RNGSLIPWSVAGPTCDSVD.VL...MH.........DEMLPE........DIQENDFIFIPNAGAYTTSYAS.NFNGFP..LPDVVVI Q5LXE4_SILPO/280-393 AIAAEVLLVSRKSGH.......................................................................................DLHR.............WVY.LDIGKFSG.LAETMDEA....IRYQFLTE...............................................REHEPTGPCILAGPSCDSAD.VLY.EKK.........PVQLPL........GLRDGDRIVIRNCGAYTSTYASVGFNGFP..PLDVVAI Q7CRV2_AGRT5/264-377 VIKAEVVLVSK....................................................................................................KSDNDNHRWVF.LDIGKFGG.LAETMDEA....IRYPIRTE...............................................RDQDEMQPCVLAGPTCDSAD.VL...YEK.......NMYPLPV........SLTIGDEVLIEGTGAYTTTYSAVAFNGFE..PLKAYVI Q8PS97_METMA/278-390 IIVSEVIMIAKKARF.......................................................................................NQYK.............WVY.LDIGKFGG.LIETLDEC....IKYPIFCD................................................KKGCAEEVILAGPTCDSMD.ILY.EHH.........KYSFPH........TMRDGNRVYIFTTGAYTQSYSSICFNGFP..PLKAYVI Q5YT58_NOCFA/255-366 TIHAEVVAVRIAPD.........................................................................................GRR.............WVY.LDIGRYNG.MAETENEY....IAYRFVTE...............................................RDGDPVDEAVVAGPTCDGDD.VLY.QRT.........RVLLPT........TLRAGDRVQILDTGAYTASYSSVSFNGFP..PLTVHVS O69865_STRCO/277-392 AIRAHVVRLTERRAAD.....................................................................................GERQH.............WLY.LSCGKFNG.LYEM..DA....LQYRLVFPG..............................................HPDGPCVPAVVAGPTCDSDD.AYSHEEG.........LVPVPA........ALASGDPVWVLSCGAYATSYTTRGFNGFA..PLPYAFA Q5XQ82_9ARCH/314-419 MVVSVIGTAKRGD...........................................................................................NM.............WAY.IDAGIYSGLLDYVIKDK....VFEISILDR.............................................TEPSSKTYKYLLSGPTSDALD.FL...G..........EYSFKK........QLNAGDKLIIKNCGAYTFVLGT.HFGGFN.....HFGF Q604F1_METCA/244-348 YLVASVIDVFNSG...........................................................................................GK.............TVAVLDSSINHH.PEVFEYQR....SPRLAEV.................................................CEEGRETAILAGGTCLAGD.LF...G..........EYALPT........RPRIGDRLVFEDVGAYTLVKAN.RFNGHN..LPSIYRW Q7VZY7_BORPE/241-343 TLEVTVLDVMRNE............................................................................................K.............NLAIVDAATEAHMLDLLIYRM....SARVQP...................................................DQGPHRYVIYGNSCLAGD.VF...G..........EFSFES........PLQPGSRISIQDAAGYTMVKKN.WFNGVR..MPAIAIR Q88IS0_PSEPK/241-343 SLEVTVLDTLYNG............................................................................................K.............HLAVVDSSIEAHLLDLLIYRL....NAKMAP...................................................NDGEHTYMVCGKSCLAGD.IF...G..........EYQFDR........PLAIGDRLSFIDTAGYTMVKKN.WFNGLK..MPSIVVK Q5HSR6_CAMJR/244-361 NLVASVVDIIENE............................................................................................K.............QIAILDTSSEAHMPDTIIMPY....TSEVLNARILATRE....................................NEKISDLKENEFSYLLTGNTCLAGD.VM...G..........EYAFDK........KLKIGDKIVFLDQIHYTIVKNT.TFNGIR..LPNLMLL P73562_SYNY3/258-365 FLLSTVEDLIETP...........................................................................................EF.............THAMLDVSFTAHMPDCLEMPY....RPEVRGAR...............................................VPQTGDTVYRLGGSSCLAGD.FL...G..........DYAFDQ........PLQVGDRLIFEDMMHYTMVKTT.TFNGVH..HPAIGCL Q9RUH6_DEIRA/278-394 WLVSSVLDVVHNV............................................................................................K.............DAALLDVSVSAHMPDVLEMPY....RPRILGAGDPPLD.....................................DHREAQDTGSGYPYIIGGTTCLAGD.VV...G..........EYVFPH........ELKVGSRVVFDDMIHYTMVKTT.FFNGVK..HPDIGIL Q7MAL4_WOLSU/251-357 FLLGEVVDVVRNG............................................................................................M.............EIAILDISAAAHMPDCLEMPY....RPMVRGSA...............................................EAGEKRYSYRLGGPTCLAGD.VI...G..........DYSFDS........PLKVGDQLIFEDMIHYTIVKNN.TFNGVP..LPSIGVI O24865_HELPY/267-385 FLIASVIDIVQND............................................................................................Q.............EIAILDASFSAHMPDCLEMPY....RPSIFKVSVENDEE...................................LIEVEKGENQGAFSYFLGGPTCLAGD.FM...G..........SFSFET........PLKRGDKIVFQDMLHYTIVKNN.SFNGVP..LPSLARL Q5LVU5_SILPO/266-369 ILVGEILDLPSNG............................................................................................M.............DLAITDISATCHMPDVIEAPY....RPALMDE..................................................ADSGHTYRLGGPSCLAGD.VI...G..........DYTWDQ........PLTIGQRFAFLDQAHYSMVKTN.TFNGVP..LPTIALW Q72EZ9_DESVH/261-367 VLLCSVLDVVQAD............................................................................................V.............PVVILDTSAAAHMPDVLEMPY....RPGCIGSG...............................................LPDEKAWTCRLAGKSCLAGD.VV...G..........DYSFDR........PLRPGDRLAFLDMAIYSMVKTT.TFNGLQ..LPAIALY Q57LZ4_SALCH/318-441 VLLTEVSCEKRK...........................................................................................................TNYDLNGNVECH.VEWKFVDA....GYSVLSDSQHFDWFF.................................YVYNASRMTAAHDAWVKLAGPLCDGGD.YFHMGVKG.......EEFLLPK........ETHVGDIVAFLDAGAYAIESQT.VYNNRP..RTGVVMI Q82HL1_STRAW/330-442 TVVARVEYAKSAGG..........................................................................................RA.............VAV.THAGVQVA.TRTVYAPA....SWPLRITAYDA.........................................KGHPKAGPEVVQDVAGPACFAGD.LL...AV.........GRALP.........LLEQGDHVAALDTGAYYFAHHY.AYNSLA..RPGIYGF Q75JL7_DICDI/295-407 VVVSTVEYTKSSGD..........................................................................................RE.............IAI.CHAGANMY.IRTVYQFP....LWRIRVTIFDS.........................................NGEYKTGNEKITDIAGPCCFAAD.VL...VK.........ERLLP.........PIKKDDFIMAHDSGAYMLSSYS.HYNLRL..APPIFSF Q7WXK3_RALEH/291-407 YYAMEVIDVKHAFD..........................................................................................RA.............FVV.ACGGTHHF.RTPYAQGH....SHPFRVLPVESWR......................................YPFARPGVRDARVSVVGQLCTPKD.VL...AQ.........DAPVD.........SVRAGDMVVFPYAGAYAWHISHHDFLRHP..HPQHCYL Q7A862_STAAN/277-393 YYVTEVLDIKKVHG..........................................................................................AW.............YAI.LRGGTQQF.RLPVSWQH....NHPFEIYRYKDNP......................................YSFEKVSISRQDTTLVGQLCTPKD.VF...AR.........EVQID.........AISTGDVIVFKYAGAYGWSISHHDFLSHP..HPEFIYL Q5SEM5_RALSO/282-398 YYVTEVVDIKRNHG..........................................................................................KW.............FAV.LRGGTHHF.RLTASWQH....NHPFAIVPNAQWT......................................YPFARPSVQAQAVTLCGELCTPKD.VL...AR.........DVVVD.........RLSVGDRIVFQLAGAYGWHISHHDFLSHP..HPERRFV Q76KY1_STRHA/280-393 TLLTRVVNIKVSRG..........................................................................................RK.............FVV.IDAGINTF.GGMSGLGR....LLPVAVEPEYT.........................................GSAEATELTDVASLAGPLCTPGD.IL...GR.........EIRLP.........ELAPGDLVTIPNAGAYGVTASLLMFLGRP..APVEVVL Q8RKC5_ERWCH/297-409 LFVTRVNTLKTAGG..........................................................................................KT.............FAV.CDGGANCH.SAAAGLNSMLRKNFPLLRLGD..............................................NQGRPLQPYQVSGPLCTPTD.LL...GD.........NVLLP.........TLEVDDLIGITHSGAYGLTASPGSFLSFG..YPVEVMV Q7CYS1_AGRT5/270-383 LYVVEVNSVKT.......................................................................................................SRGTTFVV.TDGGMHHHLAASGNLGQIVKRNYPIVAPAM..............................................MQAAHDETATIVGPLCTPLD.TL...AR.........NATLP.........KLNAGDLLAILQSGAYGASASPGGFLSHT..VAKEVLV Q7N8H2_PHOLL/306-419 IYVTKIVERKISHD..........................................................................................MT.............FLV.TDGGMNHHLSASGNLGQLIRRNYPAIIGNK..............................................IKGEKRETVNIVGPLCTPLD.IL...VH.........QGDMS.........VATPGDLVVIFQSGAYGLSASPNNFLSQT..NAVEVLV Q82VG2_NITEU/296-409 IYVCRVLEKKISRG..........................................................................................QT.............FLV.TNGGLHHHLAASGNFGQVIRKNYPVAIGNK..............................................MKIDETEIVSVVGPLCTPLD.LL...AD.........RMELS.........RAEPGDLVVVFQSGAYGLTASPTAFLSHP..ASLEVLI Q5YWM9_NOCFA/340-451 LTLASVEFVKELGD..........................................................................................GT.............VLVTLDLSRDTVTPADQEVMV....DPLVLPGAR..............................................RDDGPAVGVYFAGRLCLERDLIT...TR.........QVFLPG........LPAPGDVVVFPNTAAYHMDLSA.STAARW..APPRRWV Q72WM6_DESVH/318-424 LLLTRVKAVKERPG.........................................................................................AEP.............FAI.TDGGRLSQ.AYPCDFEW....HEAFLAND...............................................LRRPLARAYTVTGRVCTRSD.WL...YR.........GKVMP.........ELASGDILAVLDAGAYFSSYAM.NF.AFP..RAAVVGV Q62F85_BURMA/278-395 VFVTRVRAVKVWDD..........................................................................................RV.............IAV.CDGGMSHN.FLLAKTEAVLKTWAAPTLVPAGT.........................................ADAHRAPNARPITFVGNTCNRAD.VI...GR.........LERHPR........LPQPGDFVVFSQCGAYHHSYTVSGFLSHK...PAQVYI Q7NPE5_GLOVI/307-415 ATAYTVGSTKTIPS.........................................................................................IRK.............YFS.VDGGMSDN.PRPITYKA....LYTAVVANK..............................................MHDGRREKVTVAGKHCESGD.VL...LR.........DVELP.........PLERGDCLVVFSTGAYNCSMAS.NYNRIP..RPAAVLV Q7A0X5_STAAW/290-398 VTLYEVGTIKEIPE.........................................................................................INK.............YVS.IDGGMSDH.IRTALYDA....KYQALLVN...............................................RNEEADDSVTIAGKLCESGD.II...IK.........DAKLPS........SVKRGDYLAILSTGAYHYSMAS.NYNQMQ..KPSVFFL DCDA_MYCS2/336-449 ITLYEVGTVKDVAVSQ.....................................................................................TAHRR.............YVS.VDGGMSDN.IRTSLYAA....QYDARLVSR..............................................VSDAPPALARIVGKHCESGD.IV...VR.........DTWVSD........DIAPGDLIGVAATGAYCYSMSS.RYNLLC..RPAVVAV DCDA_ACTPA/309-415 VTLYRVAAVKR.GV.........................................................................................RRV.............FVA.VDGGMSDN.PRPALYGS....RYAVRLVR................................................RGGRRAPVTVVGRHCEAGD.VL...AE.........DVPLPE........DVRAGDLLAVPVTGAYHHALAS.NYNAVG..RPPVVGV Q8TY23_METKA/277-383 ILVTSVRQVKR.GR..........................................................................................RR.............WVF.VDTGMNAL.IRPALYDA....YHEVVVHG...............................................GDYSATEKASVAGPLCESGD.VL...AE.........DRELPI........DISEGDLVVFLSAGAYCESMAS.NYNCYP..IPGSVVV Q7N7F9_PHOLL/289-407 VLMTEVRAVKQ.MG.........................................................................................NRN.............YVL.VDAGFNDL.MRPVMYGS....YHHISVLPADG..........................................RKIEQLPLRETLVAGPLCESGD.IF...TQVEG..GGIAPRALP.........PVQVGDYLVFHDTGAYGASMSS.NYNSRP..LISEVLF Q8F7A1_LEPIN/276-395 SILTTVDDVVS.TGP.......................................................................................GGYT.............FVK.LDAGMDVN.TRPSLYAA....KHPLVVVSKE............................................GVHSGKTADYVYVGHCCESGD.LF..............TQAEGGGPITRITGEAKLGDYVVMEGAGAYCSSMSTKNYNSFP..ETAEVLV Q8GGR7_STRAZ/284-405 SLVTKVIDKAD.TGA.......................................................................................EGNS.............FLK.INSGLTEI.ARPSYYGV....QHPIVSVPATG.........................................GAERAADDREEFNVVGHCCIAGD.VL..TAK.........QEELAPVP....LGRTEIGDYVVIERAGSYCSSMSMKNFNSYP..EAAEVLR DCDA_METJA/305-410 YLLGKVHHIKE.TP.........................................................................................VTK.............WVM.IDAGMNDM.MRPAMYEA....YHHIINCK................................................VKNEKEVVSIAGGLCESSD.VF...GR.........DRELD.........KVEVGDVLAIFDVGAYGISMAN.NYNARG..RPRMVLT #=GR DCDA_METJA/305-410 SS -EE--EEEEEE.-S.........................................................................................S-E.............EEE.E-----S-.-HHHHH--....---EEESS................................................--SSEEEEEEE-----TT-.--...--.........-EEEE.........-------EEES-------TT-B.-TTT--..--EEEEE Q7ULZ0_RHOBA/283-389 YLITKVINQKS.SY..........................................................................................KD.............YVG.VDACMSNL.MRPGMYGA....YHHITVMGK..............................................EDQPADRTVDIVGSLCENND.KF...AI.........DRKMP.........ATEVGDIAVIHDAGAHGHSMGF.QYNGRL..RSAEIVF Q6SHW6_9BACT/289-395 ILLAQVTGIKD.SY..........................................................................................KT.............FIG.LDAGMETL.MRPALYGA....VHRIYKVGA..............................................LMEEQNLTVDITGRICENTD.RL...AI.........DIPFP.........DVAEGDLIAIMDTGAYGYAMAH.QFNTRP..RPAEVLI Q5V5E3_HALMA/306-412 CILTEVNTVKE.TP.........................................................................................AAT.............VVG.VDASLATL.IRPAMFGS....YHPIRNVT...............................................APEREAEPVSVGGPCCTSAD.VF...CT.........DRPLA.........RPERTDLLAIGNAGAYGYELAN.QFHSQP..RPAEVAF DCDA_METTH/292-398 YLLTRVNTIKE.SY..........................................................................................RK.............FAG.VDAGFNTL.LRPAMYGS....YHHILVAER..............................................PLDEPSEKMDVAGNVCESGD.LF...AR.........DRQLP.........EINEGDVLAIMNAGAYSFSMSS.QYNSRP..RPAEVLV Q87EA9_XYLFT/758-866 VLLTRVTQVIE.KD.........................................................................................DIL.............RVG.LEAGMHTL.IRPALYDA....WHGVENLTR..............................................LDETPHVLCDVVGPICESSD.VF...GR.........RRHLPA........ATASGDLMLIADAGAYGFSMAS.TYNLRG..LPAEVVL DCDA1_ARATH/351-459 CFVNHVTGVKT.NG.........................................................................................TKN.............FIV.IDGSMAEL.IRPSLYDA....YQHIELVSP.............................................PPAEAEVTKFDVVGPVCESAD.FL...GK.........DRELP.........TPPQGAGLVVHDAGAYCMSMAS.TYNLKM..RPPEYWV DCDA_PSEFL/285-390 VLLTQVEYLKH.TE.........................................................................................HKD.............FAI.VDAAMNDL.IRPALYQA....WMDVTAVR...............................................PRDTAARSYDIVGPICETGD.FL...AK.........GRELA..........LEEGDLLAVHSAGAYGFVMSS.NYNTRG..RCAEVLV Q5FPL4_GLUOX/282-390 ILLTRVIETKA.GN..........................................................................................PD.............FVV.LDAAMNDL.ARPSLYES....WHGIMPVAP.............................................NGLTSLTKLWDIVGPVCESSD.IF...AR.........DRALPA........DTKRGDLIALLDTGAYGSVMSS.TYNTRP..LAAQVLI Q9A681_CAUCR/288-394 VLVSEVIHVHERPE.........................................................................................GRK.............FLV.IDAAMNDL.VRPAMYDA....FHDIRPVI................................................QRTGETVYDVVGPVCETGD.TF...TR.........DRALP.........PFAAGDLVAFMSAGAYGAAMAS.EYNTRP..LVPEVLV Q5FEQ0_EHRRW/291-397 ILLAKVLYHKS.NY.........................................................................................EKN.............HLV.LDTGMNDL.IRPALYNA....EHTIIPAV...............................................VSSKSHLSFDIVGPICESDD.TF...AY.........SYWIN.........NVDNNEIVAICTVGAYGSSMSS.NYNSRP..LVPEVIV Q7MT14_PORGI/263-379 SLITQVLYIKE.GK.........................................................................................AKK.............FAI.VDAGMTDL.VRPALYEA....HHQIRLVQPGEWT.....................................MRATSPSAALTEKYDVVGPICESSD.VF...ER.........ELLMP.........ELKRGDYLAIRSAGAYGAVMAS.SYNMRP..LPGSLFS Q6MM66_BDEBA/286-391 ALITQVQYIKE.TS.........................................................................................AKT.............FVI.VDAGMNHL.IRPSLYEA....THRIEPLK................................................RKDAAFVVDVVGPICESSD.FF...AK.........EISLT.........KVQEGDFVAIMDSGAYGYSMAS.VYNLQE..LPLEICI Q6L350_PICTO/286-391 IALATVTDLKN.YG..........................................................................................RS.............IAG.TDLGMNIL.IRPALYGA....VHEIICIN...............................................KNDDKLFNYDITGQICENTD.FT...GL.........NVKLP.........GLEPGDILGIMNAGAYVSSMSS.NYNSLS..RAAEVLI Q97AJ0_THEVO/281-380 ILVGKVYDVYN..............................................................................................G.............FVG.TDIGMNIN.IRHALYGA....EHRFYALT................................................GRSDEAEYIVTGQICENTD.VT...GR............LTG........KVQIGDLVAMYDAGAYIYSMSS.NYNGRF..RPTEVIV Q728N7_DESVH/285-394 LLLGSVHSVKS.NG.........................................................................................ANR.............YVG.TDLGFNVL.ARPVMYDA....HHDIEVYRED............................................GAPSDLLLPQTVVGNICESGD.II...AR.........NRPLP.........PVEEGDILGVLDAGAYGYVMSS.SYNQRM..RPAEVLI Q62B72_BURMA/307-413 MLVLRVAYVELKRN..........................................................................................RR.............FVG.LNGGFNLA.IEPAFYDL...PCEPVPCVR................................................RPGPAQSVCVAGNINEALD.VW...GN.........DVSLP.........PVEPGDFIALLNAGGYASSMSS.NHCLRG..QFRELAL Q66B85_YERPS/267-374 YLVTRIVFAKCR.............................................................................................Y.............STNVITTAVPGTNIRSAQYHN....HRKVLIIPE.............................................RPVNCEHSVADVYGSNCYEND.II...AK.........NVPVPF........DLSLDDKIAIFSCGAYDIMNSSDWIRK....RPPIIVI Q5NIN9_FRATT/298-400 ALLTTIVGTREQNE.........................................................................................DFQ.............SLI.TDAGIHTI...PTISTY....RHPIYHLK................................................TDSYHKKTLLLGPSCMQHD.FL...HD.........DIFLP.........KLEYGDKLLIDGVGAYNISRNN.EFIHLK....PSVIL Q8XS02_RALSO/281-396 VLLTGIKRDIVQH...........................................................................................SL.............GNIVVTDGSRMLMPSAQLRNR....AHHTVFLDAAF.........................................NEVVDYSRRCVAKVRGRSILRNDYIL...PG.........DVVAPE........TVKAGEYMLILDVGAYCATQHM.EFLNVP..PAGEVLV SPEA_XYLFT/343-555 VLIANVTEVEAVPEGRVPGVCDDEPAVVRHMREIYGELDARPAIELFYEAQHFHA.......EGLAAYTLGQIDLVHRARIDDLFYAISHGVRERLSHEEKSHRPV....LDELNERLVDKYFVNFSVFESIPDVWAINQ....IFPIVPIER..............................................LNEVPTRRGVVCDLTCDSDG.TV...KQYVE..NESLDSALPLH.....VLRHGEAYRIGFFLVGAYQEILGD.IHNLFG..DTDAVEV Q5NHM0_FRATT/327-467 LLITKPLIKQHESDIENEILHQ..........................................................................QWLDREVSLGELQSYLPQNQKNTQQAWLNFSIFQSLPDHWGIDQ....KFPILPLEF..............................................FNSYVTSEVKLYDISCDVDG.VV.....K......STSEYIEI........ATDNIEYIVFMCVGAYQGMLSA.KHNMLG..NISAVNI SPEA_PROMP/355-574 VLIFNILGTSHVSSQVKVSDQKKQSLIITNLIETLNQIKNLRDKKEDLSEIIELWNDAKKFKEDCLVAFRLGFICLEERAYAEELTWACAKEIANQLENNEIIHPD....LSEITDTLASTYYANLSVFKSIPDTWAINQ....VFPIIPIHR..............................................HLEEPFCKGHFADLTCDSDG.KL...NNFID..NGKIKSLLNLH.....PPEKNNDYLIGIFMAGAYQEALGN.FHNLFG..NTNVIHI SPEA_GLOVI/346-557 VLVFDVMGVSHLQFGEPEPPARNEHSIIRNLYETYTQITPDNVQEAFNDASQFKE........EALSLFALGYLGLGERARAERLYWGCCEKILNLVRELDYIPDE....LADLEKNMASTYYCNFSVFQSAPDSWAIDQ....LFPIMPIHR..............................................LDEEPKARGTLADLTCDSDG.KI...DQFID..LRDVKGVLELH.....PVRPEEPYYLGMFLNGAYQEILGD.MHNLFG..DTNTVHI Q6MQU4_BDEBA/373-587 VLVFNVMGVNDLHRHEPPRPATKTDHSIMQDMQYIFEKVNKDNINECFNDLEQAK.......QETLQLFTYGVLSLEQRAWCESMYFAIATKMIKLARATPDCEDI....VAALGKELCDTYFSNFSVFQSVPDSWAVGQ....LFPVIPIHR..............................................LGEEPKREATLADLTCDSDG.VI...EKFIDTASGEPKETIRLH.....QFTEGQQYYLGVFLTGAYQEILGD.LHNLFG..DTDAVHI Q72F01_DESVH/373-585 MLLFNILDVSRVEIGNLPDALPEDTPEPVRNMREVLAGMTLRNLQECYNDALYYR.......DAVRQLFLTGQVTLRQRTLSERLFWAIMKRIAQEKQKLKHVPKD....LAEIDVALADIYYGNFSVFQSLPDSWAIDQ....LFPVMPVHR..............................................LQELPSRQGILSDITCDSDG.RI...DHFID..PQGMKGTLDLH.....PLRDGEEYYLGVFLVGAYQETLGD.LHNLLG..DTNVVSV Q5SHU0_THET8/347-559 VLVLQVIDVIAPPGEARPSPPPPEAHPLVKELWESLQSLSPKNFQEVYHDAFADK.......ETLQTLYDLGLVSLRDRALAEEIFYHIARRVQTIAQNLPYVPDE....LEDLEKLLADKLVCNFSVFQSLPDAWAIHQ....LFPVVPLSR..............................................LLEPPTRRATLVDISCDSDG.KM...DRFID..LHDVRQTLPVH.....PVRPGEPYYLGVFLVGAYQDVLGS.NHNLFG..QVGEAHV SPEA_BACTN/346-558 VLIFEVLETATLPEWDDEEEIAPDAHELVQELYSIWDSLNQNKMLEAWHDAQQIR.......EEALDLFSHGIVDLKTRAQIERLYWSITREINQIAGGLKHAPDE....FRGLSKLLADKYFCNFSLFQSLPDSWAIDQ....IFPIMPIQR..............................................LDEKPERSATLQDITCDSDG.KI...ANFIS..TRNVAHYLPVH.....SLKKTEPYYLAVFLVGAYQEILGD.MHNLFG..DTNAVHV O25176_HELPY/412-542 VL..........AHLIVKKAV............................................................................QLLYVKDHN.D..ILRIQEQVQERYLLNCSFFQSLPDYWGLRQ....NFPVMPLNK..............................................LDEKPTRSASLWDITCDSDG.EI...A.F......DSTKPLFLHD....IDIDEEEYFLAFFLVGAYQEVLGM.KHNLFT..HPTEFSV SPE2_ARATH/396-596 VLIFEAVSADKPMVHQATPGDIQFLLEGNEEARANYEDLYAAVMRGDHESCLLY..........VDQLKQRCVEGFKEGVLSIEQLASVDGLCEWVLKAIGASDPV.............HTYNINLSVFTSIPDLWGIDQ....LFPIVPIHK..............................................LDQRPGARGILSDLTCDSDG.KI...NKFI.....GGESSLPLHEL.DKNGSGGR.YFLGMFLGGAYEEALGG.VHNLFG..GPSVVRV O04429_DIACA/405-605 ILVFEAVSSSSSASPPMPGSTLALDYLVDGLTDEVKGEYRSLTAAAMRGEYESCL.......MYSGMLKQRCVELFKDGCLGMEQLAAVDGLCELVSKALGVADGV.............CTYNVNLSVFTSIPDFWGIGQ....LFPIMPIHR..............................................LDQQPKARGILSDLTCDSDG.KI...DKFI.....GDESSLPLH.....ELSGGEGYYLGMFLGGAYEEALGG.VHNLFG..GPSVVRV SPE1_AVESA/355-532 MIILEALSAIPEPKDDEDEATTEQLHGRIRDLSSKLQPTGLS..................................MSSHAVHIKKHGIEMYKLGKKLSKSVTTDA..........HTIYNYHMNLSVFSLMPDYWGIQH....LFPMMPVSR..............................................LDEKPTHKATLVDVTCDSDG.KV...DKFI.....RDTETMPLHP....LDPKLGGYYVAVLLTGAYQEALSN.KHNLFG..GPSLVRV Q5X0L3_LEGPL/343-556 VLISNITDVEIINKAPVLPEISEDDSHVIRDIYDTYQAITDSSPTEIYNYAAHSLN......EAHSLFKHGVISLQEKAKVEAFYTNICMEIKDKLDEENPSEKAL....LMRINECMAAKIFCNISFFQSIPDAWAIGQ....IFPVAPISQ..............................................LNRTLSMHSVLQDLTCDSDG.TI...KQYPG..SSCVTTTLMLP.....SYDINNPYNIGFFLVGAYQEILGN.LHNLFG..DTNSLDV SPEA_CHRVO/343-556 VLLMNVTDVERLPDTVAPIDKAEELSLPLRKLVELANLNDEELVTEIYYRASHCVS......EVSEMYAEGRLSLQEKALAEDLHATLCRRLHNQLQASQRSQRQV....YDELTDRLADKYFCNFSVFQSLPDTWAIDQ....VLPIMPVHR..............................................LAEQPTRRAVLQDLTCDSDG.KL...KQYVD..QQSIESSMSVH.....EVKQGDEYLIAVFLVGAYQEILGD.MHNLFG..DTDSVNV SPEA_VIBVY/354-570 VLISNVIGTETYKPETVTEPEEDFPLLLNNMWRSWLNLHNGTDARALIEIYNDTQSD...LAEVHSQFATGVLTLEHRAWAEQTSLRIYYELNRLMSTKNRFHRPI....LDELSERLADKFFVNFSLFQSLPDSWGIDQ....VFPVLPLSG..............................................LQNAADRRAVMLDITCDSDG.AI...DAYVD..GQGIESTLPVP.....AWNEDEPYLMGFFLVGAYQEILGD.MHNLFG..DTHSVVV Q7PZA0_ANOGA/274-386 TALVNVVSKSYEKDVD.....................................................................................GAVVR.............VRYYVDDGLYDT.FDWCDDQG....SGPLLQED...............................................KRGAPCVRSVIYGRTMCEHD.VI...RE.........EISLP.........EHEIGDCLVFPNRGAYAKLLGR.GHNGFR..PTGTKVC Q60D03_SOLDE/147-257 TLVTHVIGKRVRG...........................................................................................EK.............IEYWIDEGIYGS.FRPTLYNS...CFVGIKTISM..............................................KESCEIGESTIYGPSCDSLD.AV...AV.........DIKLP.........ELELDDLIVFYDMGAYSKCAGT.KFNGFDMLSTPTYIV DCOR_NEUCR/326-471 TLACNIIARRTIQDGSAVSV.............................................................................SDSSSMSDD.G..SVNNGDARYMVY.VNDGLYGN.FSSIMFDH....QHPVAKILRAGGRTMY................................NSVAAHESSAEDAIEYSIWGPTCDGID.RI...TE.........SIRFRE........ILDVGDWLYFEDMGAYTKCSAT.TFNGFS..NEHDVIY #=GR DCOR_NEUCR/326-471 sAS ......................................................................................................................................................................................................................*......................................................................... DCOR_YEAST/329-460 TLASHVIAKRKLSE.........................................................................................NEA.............MIY.TNDGVYGN.MNCILFDH....QEPHPRTLYHNLEFHYDDFE........................STTAVLDSINKTRSEYPYKVSIWGPTCDGLD.CI...AK.........EYYMKH........DVIVGDWFYFPALGAYTSSAAT.QFNGFE..QTADIVY #=GR DCOR_YEAST/329-460 sAS ......................................................................................................................................................................................................................*......................................................................... DCOR_CANAL/324-468 TLITHIIARRDLPTGGN...................................................................................NNNNDM.........TPSAMLY.INDGVYGN.LNCILFDH....QTPKVYVLTNENQLFYKQEM.......................MRSLSVNNNNNNNNKTDGFKFSIWGPTCDGLD.CV...SS.........LAKLSK........NVQVGDWLFFENVGAYTSCAST.KFNGLSSGETKTLYV #=GR DCOR_CANAL/324-468 sAS ......................................................................................................................................................................................................................*......................................................................... Q84527_PBCV1/263-371 VLATQVIGKRVRD...........................................................................................GL.............YEYFFNESTYGG.FSNVIFEK....SVPTPQLLRD............................................VPDDEEYVPSVLYGCTCDGVD.VI...NH.........NVALP.........ELHIGDWVYFPSWGAYTNVLTT.SFNGFG...EYDVYY #=GR Q84527_PBCV1/263-371 SS EEEEEB---EE--...........................................................................................--.............EEEEBS------.-THHHHS-....-----EESS-............................................--TT--EEEEEEE--------.-S...EE.........EEEEE.........------EEEES-----SGGG--.------...-EEEEE Q5MNH7_NEOUN/277-400 YLAVKVVARRVNATAF.....................................................................................GHEPA............TRLY.INDGIYSNFMMRFIVNM....TFSPAAVIREGVW......................................HDQADHTMRGEACSLWGRSCDSND.CI...NR.........DCRLGP........EVRVGDWLVFKDMGAYTTVCNT.TFNGFT..SSNHTIY Q58P26_ENTHI/268-382 HLVSSLHGKRVRIQN.......................................................................................GKKQ.............IEYTSGDGLHGSFGCCIWFEK....QKSCECITQK............................................VNENTKMYESIIYGPSCNGSD.KV...A..........TQELPE........MEPGKDWLLFPNMGAYTISMAT.NFNGFE..ERNHVIY O15696_PLAFA/807-931 SKLGNITNIKKKVVNI.....................................................................................NDNRY...........NYFSYYVSDSIYGC.FSGIIFDE....YNRCPIYVIKNKN.....................................NPNQNFMNFNLYLANVFGQSCDGLD.MI...NS.........ITYLP.........ECYINDWLLYEYAGAYTFVSSS.NFNGFK..KCKKVYI DCOR_LEIDO/509-682 ALLMNVFASRTLRLSDVEVS..............................................................................RQAFQSVV.....SMDEPEEYQYY.VNDGLYHS.FNCILFDH....AHPTLLLLNDGDGADGVESGTEAAAVCSEEEGETSLSGPLANDPLFMSAWDRRRSFARRPLRITTIFGPTCDSMD.CI...LK.........KQPFP.........EMKLGDWLLVPDMGSYTTAAAG.FFNGFA..TRRLEWV #=GR DCOR_LEIDO/509-682 sAS ......................................................................................................................................................................................................................*......................................................................... P78829_SCHPO/238-357 TLAVNVIAKRKLDDE........................................................................................EKV.............MYY.VNDGVYGS.LNCILFDH....QHPVARVLKCGSR.....................................FVYNDLVGTGQHRCFIWGPTCDSLD.VI...AN.........DAHLPY........EPNVGDWIYFEDAGAYTVAAAS.CFNGFK..TSRIVYL O76203_HAECO/287-407 TLVCNIIHATEVSAEKIT..................................................................................KRPEDV........EERGFMYY.VNDGVYGS.FNCILFDH....VQPVGTPLF..............................................DEIAQEYPSTIWGPTCDSLD.KI....E.........DQKLMR........MMSVGEWIVYRNMGAYTCSAST.TFNGFQ..RPNAIYM DCOR_PANRE/294-416 SVTTNVIASVKVPASRIT..................................................................................EKADDV........NRDGYMYY.MNDGVYGS.FNCKLFDH....YQPRGMPLAE............................................HDADEPRFPVCVWGPTCDGLD.QV...EE.........SSVMP.........RLYEGDWLYYPDMGAYTSVAAS.TFNGFD..KPKTYYF #=GR DCOR_PANRE/294-416 sAS ......................................................................................................................................................................................................................*......................................................................... #=GC SS_cons EEEEEEEEEEE--S.........................................................................................S-E.............EEEEES----S-.-CHHHHS-....---EEECSS-............................................--TTSSEEEEEEE-----TT-.-S...EE.........EEEEE.........------EEEES-----SGCC-B.-TTT--...-EEEEE #=GC seq_cons sLlspVhsh+p.st..........................................................................................tt.............hhh.lssGhhsp.hsshhhst....hhslhhht...............................................hpspstttsslsGsoC-usD.hl...sp.........chhLP.........plp.GDhlshhssGAYshshus.saNuhs..tsshlhl // # STOCKHOLM 1.0 #=GF ID NIF3 #=GF AC PF01784.11 #=GF DE NIF3 (NGG1p interacting factor 3) #=GF PI DUF34; #=GF AU Bashton M, Bateman A #=GF SE Pfam-B_1006 (release 4.2) #=GF GA 23.40 23.40; #=GF TC 24.10 24.00; #=GF NC 22.00 23.30; #=GF BM hmmbuild HMM.ann SEED.ann #=GF SM hmmsearch -Z 9421015 -E 1000 HMM pfamseq #=GF TP Family #=GF RN [1] #=GF RM 8663102 #=GF RT Transcriptional activation by yeast PDR1p is inhibited by its #=GF RT association with NGG1p/ADA3p. #=GF RA Martens JA, Genereaux J, Saleh A, Brandl CJ; #=GF RL J Biol Chem 1996;271:15884-15890. #=GF RN [2] #=GF RM 11124544 #=GF RT Isolation and characterization of a novel human gene, NIF3L1, #=GF RT and its mouse ortholog, Nif3l1, highly conserved from bacteria #=GF RT to mammals. #=GF RA Tascou S, Uedelhoven J, Dixkens C, Nayernia K, Engel W, Burfeind #=GF RA P; #=GF RL Cytogenet Cell Genet 2000;90:330-336. #=GF DR INTERPRO; IPR002678; #=GF DR SCOP; 1nmp; fa; #=GF CC This family contains several NIF3 (NGG1p interacting factor 3) #=GF CC protein homologues. NIF3 interacts with the yeast #=GF CC transcriptional coactivator NGG1p which is part of the ADA #=GF CC complex, the exact function of this interaction is unknown #=GF CC [1,2]. #=GF SQ 122 #=GS Q6AQL0_DESPS/7-255 AC Q6AQL0.1 #=GS Q1NWG7_9DELT/9-267 AC Q1NWG7.1 #=GS Q1JZJ5_DESAC/11-364 AC Q1JZJ5.1 #=GS B3E3Z5_GEOLS/16-365 AC B3E3Z5.1 #=GS B5EBN8_GEOBB/8-355 AC B5EBN8.1 #=GS A0LHK1_SYNFM/6-257 AC A0LHK1.1 #=GS Q1ASW8_RUBXD/7-359 AC Q1ASW8.1 #=GS Q24T08_DESHY/7-373 AC Q24T08.1 #=GS Q67RW0_SYMTH/3-355 AC Q67RW0.1 #=GS A6NV06_9BACE/2-238 AC A6NV06.1 #=GS A7VVR8_9CLOT/6-241 AC A7VVR8.1 #=GS Q2S0R3_SALRD/53-405 AC Q2S0R3.1 #=GS A7V376_BACUN/5-351 AC A7V376.1 #=GS Q7MTC6_PORGI/5-351 AC Q7MTC6.1 #=GS Q11U42_CYTH3/6-352 AC Q11U42.1 #=GS A6ENK7_9BACT/5-358 AC A6ENK7.1 #=GS A3ZRR2_9PLAN/11-256 AC A3ZRR2.1 #=GS Q7UDY5_RHOBA/21-282 AC Q7UDY5.1 #=GS A4ECC5_9ACTN/5-252 AC A4ECC5.1 #=GS Q83GL0_TROWT/12-270 AC Q83GL0.1 #=GS A7BDB0_9ACTO/13-271 AC A7BDB0.1 #=GS A0LTB3_ACIC1/18-373 AC A0LTB3.1 #=GS Q6AFH9_LEIXX/10-259 AC Q6AFH9.1 #=GS Q6M3K0_CORGL/8-362 AC Q6M3K0.1 #=GS A8ZUC2_DESOH/8-358 AC A8ZUC2.1 #=GS Q6M164_METMP/5-237 AC Q6M164.1 #=GS A3MU59_PYRCJ/10-266 AC A3MU59.1 #=GS Q8TZC0_METKA/12-224 AC Q8TZC0.1 #=GS A5UKQ3_METS3/5-218 AC A5UKQ3.1 #=GS Q2FPY1_METHJ/5-230 AC Q2FPY1.1 #=GS Y1146_METTH/8-215 AC O27214.1 #=GS Q8TW44_METKA/6-234 AC Q8TW44.1 #=GS Q0W3L4_UNCMA/5-231 AC Q0W3L4.1 #=GS Q12Z61_METBU/5-232 AC Q12Z61.1 #=GS A0ZGU3_NODSP/5-248 AC A0ZGU3.1 #=GS Q310X0_DESDG/5-312 AC Q310X0.1 #=GS Q1MR73_LAWIP/5-246 AC Q1MR73.1 #=GS A1VDX4_DESVV/5-310 AC A1VDX4.1 #=GS Q7MQP7_WOLSU/6-230 AC Q7MQP7.1 #=GS Q7VIG7_HELHP/17-261 AC Q7VIG7.1 #=GS Y959_HELPY/6-231 AC O25613.1 #=GS A8EW77_ARCB4/5-232 AC A8EW77.1 #=GS Q30TF6_SULDN/5-228 AC Q30TF6.1 #=GS A7GZB8_CAMC5/5-228 AC A7GZB8.1 #=GS A7SAJ3_NEMVE/5-336 AC A7SAJ3.1 #=GS Q4CW43_TRYCR/7-273 AC Q4CW43.1 #=GS Q5KCX5_CRYNE/12-280 AC Q5KCX5.1 #=GS NIF3_SCHPO/9-265 AC O94404.1 #=GS Q7S5H9_NEUCR/62-330 AC Q7S5H9.2 #=GS A6SM83_BOTFB/24-302 AC A6SM83.1 #=GS Q5B6Z5_EMENI/15-342 AC Q5B6Z5.1 #=GS Q4KMJ5_DANRE/5-334 AC Q4KMJ5.1 #=GS A4IGP2_XENTR/5-334 AC A4IGP2.1 #=GS Q6P1B7_MOUSE/31-363 AC Q6P1B7.1 #=GS NIF3L_DICDI/12-341 AC Q55E83.1 #=GS Q8SV52_ENCCU/5-229 AC Q8SV52.1 #=GS Q6FQE2_CANGA/13-283 AC Q6FQE2.1 #=GS A3LS90_PICST/8-261 AC A3LS90.1 #=GS Q86F61_SCHJA/5-335 AC Q86F61.1 #=GS Q14P57_SPICI/5-233 AC Q14P57.1 #=GS Q2SRY9_MYCCT/5-244 AC Q2SRY9.1 #=GS Q6F1J4_MESFL/5-244 AC Q6F1J4.1 #=GS Q8EUT6_MYCPE/5-240 AC Q8EUT6.1 #=GS Q4A5V5_MYCS5/5-245 AC Q4A5V5.2 #=GS Q6KI02_MYCMO/6-252 AC Q6KI02.1 #=GS A5IY53_MYCAP/5-248 AC A5IY53.1 #=GS Q601Y7_MYCH2/5-239 AC Q601Y7.1 #=GS Y351_UREPA/10-250 AC Q9PQE0.1 #=GS Q7NB92_MYCGA/5-241 AC Q7NB92.1 #=GS Q3F0L5_BACTI/6-294 AC Q3F0L5.1 #=GS Q0SN38_BORAP/5-237 AC Q0SN38.1 #=GS A9B0A0_HERA2/5-242 AC A9B0A0.1 #=GS Q1IWV8_DEIGD/21-255 AC Q1IWV8.1 #=GS Q73KL0_TREDE/5-248 AC Q73KL0.1 #=GS Q2LUC1_SYNAS/5-241 AC Q2LUC1.1 #=GS Y1777_ARCFU/5-234 AC O28497.1 #=GS Y1424_PYRAB/5-239 AC Q9UYT3.1 #=GS Y1766_HALSA/5-242 AC Q9HP80.1 #=GS A8B7G6_GIALA/7-257 AC A8B7G6.1 #=GS A5EYD5_DICNV/5-236 AC A5EYD5.1 #=GS Q5WY60_LEGPL/6-241 AC Q5WY60.1 #=GS Y291_BUCAP/5-236 AC Q8K9N4.1 #=GS Q1Z5P6_PHOPR/5-241 AC Q1Z5P6.1 #=GS Q6FCJ5_ACIAD/6-241 AC Q6FCJ5.1 #=GS A2S764_BURM9/5-237 AC A2S764.1 #=GS A5CVR4_VESOH/6-235 AC A5CVR4.1 #=GS Q21U81_RHOFD/6-241 AC Q21U81.1 #=GS A6GMA8_9BURK/8-242 AC A6GMA8.1 #=GS A0L3K9_MAGSM/6-241 AC A0L3K9.1 #=GS A3YBU9_9GAMM/11-248 AC A3YBU9.1 #=GS Q6MC02_PARUW/7-241 AC Q6MC02.1 #=GS Y108_CHLTR/5-240 AC O84110.1 #=GS Q609U6_METCA/7-244 AC Q609U6.1 #=GS A9VML6_BACWK/5-238 AC A9VML6.1 #=GS A6TKN7_ALKMQ/5-263 AC A6TKN7.1 #=GS A4J511_DESRM/5-303 AC A4J511.1 #=GS Q3Z2K6_SHISS/9-274 AC Q3Z2K6.1 #=GS Q022B6_SOLUE/14-253 AC Q022B6.1 #=GS A4IP70_GEOTN/7-250 AC A4IP70.1 #=GS Y1125_STAEQ/5-353 AC Q5HNY9.1 #=GS A5KQA2_9FIRM/5-253 AC A5KQA2.1 #=GS Q8RE15_FUSNN/5-246 AC Q8RE15.1 #=GS A0Q1P0_CLONN/7-258 AC A0Q1P0.1 #=GS Q0TNV6_CLOP1/5-249 AC Q0TNV6.1 #=GS B8CXH0_HALOH/6-355 AC B8CXH0.1 #=GS Y1073_LACLA/5-244 AC Q9CGM3.1 #=GS A5LFS5_STRPN/5-252 AC A5LFS5.1 #=GS Q4ETV8_LISMO/8-360 AC Q4ETV8.1 #=GS Q038U7_LACC3/6-251 AC Q038U7.1 #=GS B3XRX7_LACRE/6-257 AC B3XRX7.1 #=GS Q5FJU7_LACAC/6-251 AC Q5FJU7.1 #=GS Q03Y42_LEUMM/5-248 AC Q03Y42.1 #=GS A8MG99_ALKOO/7-357 AC A8MG99.1 #=GS A4XK84_CALS8/6-353 AC A4XK84.1 #=GS B0K888_THEP3/7-356 AC B0K888.1 #=GS Q18BX9_CLOD6/5-352 AC Q18BX9.1 #=GS A0RIR2_BACAH/9-360 AC A0RIR2.1 #=GS A4J7B6_DESRM/6-358 AC A4J7B6.1 #=GS Q0AZ81_SYNWW/7-359 AC Q0AZ81.1 #=GS Q3AEW6_CARHZ/6-353 AC Q3AEW6.1 #=GS B8I6N4_CLOCE/5-249 AC B8I6N4.1 #=GS A3DDU7_CLOTH/7-355 AC A3DDU7.1 Q6AQL0_DESPS/7-255 DILESIEGDAPKSLA..E.SW.DNV.............................GL...LVG..........DKER..........................QVKRVLVGLDPTTSLLAEAIE......LG.ADTVITHHP...V.IF................HPLSAIDTS....TPVGIIIEQALL.H...........KISLIASHTNLDSAAS.GVSQALA.IAL.....GLE.........KCCPLLPSSEGI...............................................................................................................EGTGLGCL.AEFST.P....LLWEDFCDLLLERL.SV.........LS......VQVA.......G.SVPKRVA.....RVA..LCGGSGS..GFAE..KAYRAGA..D..VYITAEI...........KHDVARWA..EEC.....S......FC..LVDAGHYATEQFAVSL.....MANSLRRA..AGLSG...............WNIEV Q1NWG7_9DELT/9-267 KLLTLLDTVSPFSQA..A.AW.DNV.............................GL...MVG..........AVHR..........................EVSGILLALDPTPDLLEECRH......HH.CNTIITHHP...P.IF................HPLPSIRTD....QPEGQLVSQAIK.D...........DINLLACHTNLDVVAD.GVSDVLA.RLL.....GIT.........ASAPLEPLERPAGAQAA.....................................................................................................TGAKAPLSGFGRY.GQLAS.P....MAGEEFLARISDRL.KL.........PA......LSVA.......G.PIPRQVS.....TVA..VCGGSGS..ELAR..RAAEVGA..D..IYITAEV...........KHATARWA..ENR.....G......LC..VVDAGHFATENPVVAA.....WAELIKAQ.LATTGH................PVPV Q1JZJ5_DESAC/11-364 DLVGWLNRNYPQSLA..E.EW.DNV.............................GL...QVG..........DLNQ..........................EITKVMVALEPTEQTIKQAID......HH.CQLLISHHP...L.LF................KPLKKISKN....DETGRILFAAIQ.N...........NLAIVSAHTNLDHAAD.GLNDWLA.ECL.....DLG.........ATTPLLPPRSGDLVKLVVFVPEDDTDRVATALFKAGAGHIGGYDHCSFRNRGTGTFRPGTDTQP.......FIGQTGQDERVDEVRLETIVPRHRLAATLQRMEKAHPYEEVAYDLIPLENRRQDIGLGRI.GRLAE.P....LSLEELAHRCKDKL.DC.........AA......LRIV......AA.EQPRPVN.....KVA..VCGGSGA..SLIH..EAARQGA..D..VLITGDI...........KYHEAMAA..RSL.....G......LA..LIDAGHFATEHLMAPA.....LASRLDHY.SQTQGW................NMAI B3E3Z5_GEOLS/16-365 DIAGIINKKYPFRLA..E.DW.DNV.............................GL...QLG..........DTTK..........................SVTRIMVALDPLPQVITSALD......HN.CDLLVTHHP...L.IF................SPLRQITSS....TSTGNSLLLAAQ.G...........GLALLAMHTNYDIATD.GLNDLLA.DRI.....GLQ.........QTRPLKITSRDELIKLVVFVPEEQLATVRSALLPHAESIGNYQDCSFSTRGEGTFLPLAGAEP........AIGTIGKQEKVAEQRLELLLRRDQLSRAIRTLLAVHPYEEPAFDCYPLLNEAAAKGLGRI.GYLPE.P....VVLADWAGSVAKQL.DC.........ET......LRFV.......G.DTGRSIR.....KIA..LCSGSGS..SLLH..DAIRAGA..D..LLLTGDL...........KYHEAREA..EAQ.....G......IA..LLDAGHFGTEILMVAA.....IQEFLGNA.LAQAG..................HSV B5EBN8_GEOBB/8-355 DISGITGKIAPTHLA..E.SW.DNV.............................GL...QLG..........DPSS..........................QVSRIMVALDPGRPAVEAAVE......IG.CQLLITHHP...F.IF................TPLKKISTA....DETGRLAILALK.N...........DLSIISLHTNFDIAPG.GVNDLLA.GLL.....GIQ.........GAQPLRITGGDEYVKMVLFAPSGCEEKLLGALSPFMPHIGNYRDCSYQGEGTGRFTPLPGARP........FVGEVGASHAEPESRLEILLVKERIAAAVAALKGAHPYEEPAYDLYPVLNRGEAYGLGRI.GKLAE.P....VTAGAYALQVKERL.AA.........TG......VRLV.......G.DPARQVK.....KVA..LCGGSGA..SLIH..EAQRKGA..D..LLVTADV...........KYHEAREA..EAL.....G......LA..LLDAGHFSTEYPMVQG.....LAGQLRAA.LQAK....................RF A0LHK1_SYNFM/6-257 DVMDWVDAYAPFRFS..A.GW.DRC.............................GL...QVG..........DPEA..........................ELSRLLVALDPGSTTLGEALS......LK.CQCVVTHHP...L.IF................QPLESVRAD....VFPGKLIMTAVR.E...........GISLICAHTNLDAARA.GTNEQLA.RVF.....ALQ.........GVTPLEIDAAWQD............................................................................................................EPRYAGMGCV.GELPA.E....MSLDGLASFAAAAM.GG.........GA......VRVV.......G.EPGRSVR.....RVA..VCTGSGG..GLLD..AVITGRA..D..VYITGDV...........KYHDAMRA..EEH.....G......LA..VIDIGHFSSERVVLQP.....LAEYLRSRAVGQEA.................GLEV Q1ASW8_RUBXD/7-359 QVVEAVERLAPPELA..E.GW.DNC.............................GL...QVG..........DLSS..........................EVSRVLVALTPLPEVFDEAEE......EG.ADFLLLHHP...L.LF................RPVRSLDTS....GYPGDLVARAVR.A...........GITVYAAHTSYDAAPG.GVSEALA.AAL.....GLR.........GPLEV.VSPRGSLRKLVVFVPEEHADGVAEALAGEGAGVIGDYTHCTFRAPGTGTFLGGEASSP.......AVGERGRLERVPEVRLETVVPAHLARRAVAAAKAAHPYEEVALDLYPVDGHPQDCGYGRV.GRLPE.P....LSPEELRERVSEAL.GA.........PA......RLVA......NP.SPGERVE.....RVA..ALGGSGG..SFLP..EVAAAGA..G..AYVTGDL...........DYHDALLA..ESL.....G......LA..AIDAGHAPTELPALAP.....LARRLEEL.CGVPAA................ASRV Q24T08_DESHY/7-373 LIAQIIERVAPKAWA..E.EW.DNV.............................GL...LVG..........DFAA..........................PVERILVALDATPEVLQEARE......KD.VQLIVAHHP...I.LF................RALKNLRSD....NQSARLPIQMIQ.S...........GIAYYAAHTNLDQSPL.SSSWSLG.KAL.....ELE.........KMEHLKLTHAEKLVKLVTFVPKDHAEAVRQALVNVGVGEGITDGPHASEYAECFFTVVGTGMFRPLNNAHPTIGEVGELTRVEEIRLESILPENRIDRVVKALQKAHPYEEPAYDLIPLYNRGASRGYGVI.GYLKV.P....ESLGSFARKLSAGL.RKLAPASLAEEPK......VRAS.......G.NTEQILR.....KIA..IVNGSGG..SFIS..QALFKGA..D..LLITGDV...........DHHEVLDA..LEA.....G......LP..IMDMGHFWGEIPMVKT.....LAEHLKAE.KALAG..................VEV Q67RW0_SYMTH/3-355 NIAAYIEELAPLYWA..E.SW.DNV.............................GL...QVG..........DPGA..........................AVQRVLVALELTDPVLEEAES......LG.CDMVVVHHP...P.IF................RPLKALRFD....NRPARRLLRLIR.G...........GIALYAAHTNLDQAAG.MTNDTLA.AAA.....GLT.........EFEVLKQAGEERYVKLVVFVPRGHEDAVRDALAGAGAGHIGNYSHCTFQAPGTGTFLPLEGTNP.......FIGQQGRLERVEELRLETIVPESAAAQAVQAMIAAHPYEEVAYDLYPLANPGKVRGHGRI.GRLAQ.P....VSLAQLAERLKQAL.RT.........PA......VRVV.......G.DPERMVT.....TVA..VGAGAGA..DLIR..PAASRGA..D..VLVTGDV...........KYHEAQDA..LDL.....G......LA..LVDVGHYNSEAGAIGS.....LAAYLRER.LAADGH................PVEV A6NV06_9BACE/2-238 DVYRFLDGKAPFSTQ..M.SF.DNA.............................GF...LVG..........HGDK..........................EVHTILVALDITETVVEEAAQ......AG.AELIVSHHP...V.IF................LPAKHITDQ....DPSGRKLLALLE.Y...........NIAAICAHTNLDIAPG.GVNDALA.QAL.....GLE.........QIGPFS......................................................................................................................EDGLGRT.GVISG.A....LSAEAFAAQVKERL.GA.........NG......VRFV.........DGGRLVC.....KVA..VGGGACG..DMGP..AAIACGC..D..TFVTSDV...........KYHEFQEA..EAL.....G......LN..LIDAGHYPTENVVCPV.....LADWLQEG.FPDV....................RV A7VVR8_9CLOT/6-241 EIYRYLNEIAPFSTA..M.DF.DNA.............................GF...LVG..........DGKT..........................EVTKALVTLDITAQSVRQARE......KG.AQLIVSHHP...V.IF................HPLKRLLSN........SVPYLLAK.E...........GIGAICAHTNLDMAPG.GVNDCLA.AAL.....ELS.........GRMEVAFYG...................................................................................................................ELPCCVM.GTLAQ.P....MEPKSFAAFVKERL.SC.........EG......IRYV.........AGNRPVR.....KVA..LCSGAGG..EFLF..DAMEKGA..D..AFVTGEV...........KHHEILAA..KEA.....G......LT..LVDGGHFKTEDIAMEP.....LRERLSRA.FPGI....................EF Q2S0R3_SALRD/53-405 DITTALEAWAPPGSA..Q.DY.DNV.............................GL...QVG..........DASR..........................SVTSAVLALDATPAVLAEAKA......HD.AELVVTHHP...L.LF................RPLDGVTAD....GYVSNLALQFAE.A...........GIGLYSIHTNLDAAPE.GVSFALA.ERL.....GLT.........DVGFLDG.FADTLYKLAVFVPEDAFDEVRRALADAGAGRIGDYEACAFASEGTGFFKPGAGADP......HIGTAGGDVESAHERKLEVEVARWNLSSVMAALQEAHPYEEVAHDLYPVKQKNSRAGLGAL.GHLEA.P....MPLSAFLDRVATRL.DA.........GS......LRYA.......G.DPDATVE.....RVA..VCGGAGS..DFIG..TARGAGA..D..AYVTADV...........KYHEFFET..LGH.....DGT..PQMA..LVDPGHYETEALTEAL.....LRDRLRET.FPQV....................DW A7V376_BACUN/5-351 ELVSALERFAPLPLQ..D.GF.DNA.............................GL...QIG..........LTDA..........................EATGALLCLDVTEAVLDEAIA......LG.YNVVISHHP...L.IF................KGYKSITGR....DYVERCILKAIK.N...........DIVVYAAHTNLDNAPG.GVNFKIA.EKI.....GLK.........NVRILEA.KENALVKLTTFVPTAQAEDVRKALFDAGCGNIGNYDLCSYNMEGEGTFRAREGATP.......YCGAIGELHTEREVRIETIIPAYKKAATVKALLAAHPYEEPVYDIYPLQNSWPQAGAGVI.GELEV.P....ETELEFLKRIKKTF.EV.........GC......LRHN.......K.LLGREIQ.....TVA..LCGGAGA..FLMP..LAIRNRA..D..VFITGEI...........KYHDYFGH..DTD............IL..LAEIGHYESEQYTKEI.....FYTIIRDL.FPHF....................EV Q7MTC6_PORGI/5-351 DIIEAIEAVCPRAYQ..E.SY.DNS.............................GV...QVG..........DTKR..........................EATGALLCVDVTEAVLEEAIR......LG.CNLVIAHHP...I.LF................KPLKRLTGS....SYVERCVELAVR.H...........GLVLYAAHTNADNAPQ.GLNALLA.ERF.....GLL.........NTRPLEP.LQGKLLELVTFVPTEYADAVRQALWQAGAGRLGHYDCCSFSHAGTGTFRAAEGANP.......FVGAISELHHEAEERISLVLPAYRQGTVLQALHAAHPYELPAVSLIPLANDHPSAGGGIV.GDLPS.P....ISEREMLLHIKEVF.GL.........KV......LSHS.......A.WRERPLR.....RMA..ICGGSGA..FMWR..RAAQEGA..D..LFLTGEA...........KYNDFFDA..GEH............LL..LVTIGHYESEEVANEL.....FMRIISQK.FPTF....................AT Q11U42_CYTH3/6-352 DLISYLEQIAPLAYQ..E.DY.DNC.............................GL...LVG..........DRQQ..........................TCTGVVVCLDVIEEVVNEAIS......KG.YNLIVAHHP...F.IF................KGVKKITGS....NYVERIIIKAIQ.H...........NIAIYAIHTNLDNIEG.GVSGMLA.QKL.....GLI.........HTEILSP.KKGLLSKLVTFVPTTHTEQLLQGIFSTGAGSIGNYSECSYTVTGTGSFKPNEKANP.......TIGTANQAEQVEENRIEIIYPNHLERQVIRALHAHHPYEVPAYDLIALQNRNTEVGSGFV.GELEK.S....MTKEDFLAFITARL.SL.........TC......IRYT.......T.AFQGEIK.....KVA..LCGGSGS..FLLK..NAIASKA..D..VLITADF...........KYHDFFDA..EDR............IL..VCDIGHYESEIHTKEL.....LMNVLTKK.FANI....................AV A6ENK7_9BACT/5-358 EIINELELLAPQAYA..E.GF.DNT.............................GL...LVG..........DANA..........................EVSGILVTLDTLETIVDEAIA......SD.CNLIVSFHP...I.IF................SGLKKITGK....NYVERVVLKAIK.N...........DIAIYAIHTALDNSFN.GVNAGIC.DRL.....QLS.........NRKILIP.QKGTIKKLITYVPTEEATALKQALFNVGAGSIGNYDNCSFSTNGTGTYKGNENSNP.......VVGAKHEFIAADETQISVTFPKHLESIIIKTLHEAHSYEEVAYEVLTLENTNQHIGMGMI.GALKN.P....MEEADFLNYLKKQM.NV.........AV......VRHS.......S.LRNKTIK.....KVA..VLGGSGS..FAIA..AAKGAGA..D..VFITADL...........KYHDFYTA..ESE............IL..LADIGHYESEQFTKEL.....LHTFLSKK.ISNFAPA.............LSRGKV A3ZRR2_9PLAN/11-256 QLCRYLDQFAPVALA..E.SW.DNV.............................GL...LVG..........DRAA..........................AVNKLMTCLTITPEVVEEALA......GG.ANMIVAHHP...L.PF................RALKRITAD....DTVGRMLLQLIA.A...........GVAIYSPHTGFDSAAA.GINQQLA.AGL.....GLT.........DVSPLKPFDNPA..............................................................................................................LAPLGSGRY.GKLTA.P....QTLAQFAAVVREFL.QI.........EY......VQVV.......G.GADQKVT.....QPA..VACGAAG..EFLG..TAITLGC..D..CLLLGET...........NFHTSLEA..KAQ.....G......VA..LVLVGHYASERFAIET.....LADQLTAE.FSDL....................KC Q7UDY5_RHOBA/21-282 SICQSLSAIAPLKLA..E.EW.DNV.............................GL...LLG..........DRSA..........................EAHRILTCLTITPAVVEEATE......LA.ANLIVAHHP...L.PF................KPMARITTD....SAASAMVWNLCR.A...........GIAVYSAHTAYDSARL.GINEQWA.NRL.....DLT.........SIKPLTPSLDD................................................................................................................PTLGSGRY.GELSE.P....MTAREFLSFAAKSC.GS.........TR......PRLV.......G.DFDRSIR.....RVA..IGCGSGG..SFVG..AARRKGC..D..VLLTGEA...........TLHTCLEA..ENT.....G......LT..MALVGHHASERFAMET.....LAEQLLREIQPLHETFAGDQD...SSPPDPSGNWV A4ECC5_9ACTN/5-252 ELERALLARYPKADA..E.GW.DHV.............................GL...SVG..........DPAA..........................EIAGVACALDATEANVRRAQD......AG.ANVLLTHHP...V.YI................KAPEAFCPADASRPQCSAALYEAAR.C...........GVSIISLHTNLDCSHE..ARVCLS.ELL.....GAA.........PVSSLEHVDDP................................................................................................................EATGLGAL.ATLND.P....CTLRDLATRAATAFGSD.................PRVW........GEADRPCR.....TVA..ILGGSLG..DFGE..LAIAAGA..D..VVVTGEA...........GYHVAQDL..ALR.....G......LP..VILLGHDRSEEPFVDI.....LMNSAVDAGVDPR...................HAI Q83GL0_TROWT/12-270 VLCATFESMWPSSDA..C.EW.DNV.............................GL...LCG..........FPGL..........................SVERVHFVVDVTSATINEAIK......AG.ADLLVSHHP...L.IF................KPIKKLTCD....TYESFLLSQLIE.S...........KCALFSVHTNADIAPD.GLAQHWS.HLI.....GLR.........NVKPVRY....CPESPS.....................................................................................................VDSTETQYGFGRI.GDLAE.P....VSLYDFAKDLKAFL.PET.......VGG......IMVA.......G.DEAKEIH.....SAA..VVPGAGD..DFLD..LVLDLPA..D..VYVTSDL...........RHHPAVGF..REK.....GILIRKNTA..LICVSHWASEWLWLGY.....AAELIKKR.FPDL....................SI A7BDB0_9ACTO/13-271 DVMALMESWYPAATA..Q.SW.DRV.............................GL...IVG..........DPAA..........................PVRSILLALDPTAAIADQAVAGPSGDGQS.FDMVITHHP...L.LL................RGASFLPVT....DPKGGVVTTLIR.S...........GIALFNAHTNADVACD.GVATALA.DLI.....GLR.........DTTPLEP....CGTD.........................................................................................................AEGHEIGLGRV.GTVDE......TTLGSFADHVASVL.PAG.......PSG......LFVG.......G.DENATVQ.....RVA..VLGGAGD..SALE..VARAAGV..D..AYLTADL...........RHHPASEH..LEG.....G.....APA..LLCGSHWATESPWLPV.....LARKLREA.ARAADV................ELRV A0LTB3_ACIC1/18-373 DVVAVLNQLYPPALA..A.EW.DAV.............................GL...VCG..........EPSQ..........................AVRRILFAVDPVPSVAAEAIE......RG.VDLLVTHHP...L.YL................RGTSSVAAT....TAKGRVVHELIR.A...........GIALFTAHTNADHANP.GVSDALA.AAL.....GVT.........ELRPLDPLPAQPIDKLVTFAPADAVERILDVLSAAGAGAIGAYSRCAWTTDGIGTFRPNPGAHP.......TIGTIGRIETVPEVRVEMVLPRARRDAVIAALLAAHPYEEPAYDVIPLAERPGRAGTGRI.GRLDQ.P....ESLADFVDRVRAAL.PAT.......PGG......GRYA.......G.DPDRLVH.....IVA..VCGGAGD..GYLQ..TAAGAGA..D..VYVTADL...........RHHPASEI.TAET.....G......IA..LVDMPHWATEWPWLPD.....AAARLREA.LGAAGF................TVNI Q6AFH9_LEIXX/10-259 TVREAAETLWPLSGA..E.SW.DAP.............................GL...VCG..........DPAA..........................SVERILLAVDAVAATVEEAIE......TR.SDLLIAHHP...L.LL................RGVTSIAED....RYKGALLAKLIR.G...........GCALLAAHTNVDVVAQ.GTSAVLA.ARL.....GLT.........GTTP.......IVP..........................................................................................................AADGVTGIGRV.GTLSR.P....STLGALARSLAGLL.PPT.......AGG......VRAA.......G.DFHQPVS.....RVA..LCGGAGD..SLLG..SAAVLGA..D..VYITADL...........RHHPASEA..REQALAGGG......PA..LLDVSHWASEWLWLET.....AAGQLRAA.LPGL....................EV Q6M3K0_CORGL/8-362 DIRRILDEAYPPALA..E.SW.DKV.............................GL...ICG..........DPTE..........................SVKRVGLALDCTQAVADKAVD......MG.LDMLIIHHP...L.LL................RGVTSVAAD....EPKGKVIHTLIR.G...........GVALFSAHTNADSARP.GVNDKLA.ELV.....GIT.........AGRPIATRLLGGMDKWGVHVLPRMQRTLKKMLFDAGAGAIGDYRECAFEIEGTGQFRPVEGANPA....EGDVDKLFKSLELRIEFVAPRNLRARLTSVLREAHPYEEPAFDIVEMHSAESLENATGLGRV.GELPE.P....MRLADFVQQVANNL.PVT.......EWG......VRAT.......G.DPEQMVS.....RVA..VSSGSGD..SFLN..DVIKLGV..D..VYVTSDL...........RHHPVDEY..LRE....GG......PA..VIDTAHWASEFPWTSQ.....AQEILQDK.APQV....................EV A8ZUC2_DESOH/8-358 DMVAIMNRLAPPDLA..E.TW.DNC.............................GL...QAG..........CFDQ..........................EVKTVLVALDPSSAVVRDACD......RD.VDLLITHHP...L.FL................SPPRSVDFS....RMPGTAIFLAAT.H...........GLSIFSAHTNLDSAEG.GLNDRCA.ECI.....GLQ.........NVRVLSRAGQTDHVKLAFFVPVEHEARLLEALAATPAGAWGRYSSCSFSVRGTGRFQPLEGAVP......FIGRTGEIVAVEEVRVEAIVPRRDLDGVVRVLKQAHPYETMAYDVFPLAGGIEPLHGLGRI.GEVEP......STLEVFAGRVKQRF.GV.........DR......VGVA.......G.DMAMPVK.....TVA..VCSGAGS..SLIR..DFLTSGA..D..VFVSGDL...........KYHDAMAV..VEA.....G......RA..LIDVGHFETEHLVVEL.....LVDRLTRE.TAAAG..................YEV Q6M164_METMP/5-237 EIIKIIEKFAPKELAVPR....DNI.............................GL...QVG.........LNLEK..........................EVETLGIALDPSLEVIKKAES......EN.VDFLFTHHP...I.LK................DPIRNFTGP......IYKKLKILTK.K...........DIPLYSAHTNLDICKN.GLNDCLA.ELY.....NLK.........DVKNLY......................................................................................................................EDGLGRV.GTFDG.......TFEDILKITKENIFAV.........PQ......TVVP.......KSIYDKKQL.....KVA..VLSGYGLSQDSI...KYVSNFA..D..VYISGDL...........THHSKIIA..EEL.....G......IT..VIDGTHYGTEVYGLKS.....FLKYLEKN..........................I A3MU59_PYRCJ/10-266 DVVEVLESIAPPSLA..MEEHRNRL.............................GL...VVGPLHG..LEEV..............................AVERIGFSLNPSIRAIRAAVE......RG.AQLLVVHHE...YFLF...................PRAEDSAPVIYSYRDRVLELLRRH...........RLYLYAAHTNWDFAEG.GNFDTLA.RLL.....GLE..........ARPLPLKLGN................................................................................................................LVLKKAVLAAELPR.P....MKLRELAQYVKERL..............GL..RHIAYV........DGGREEVR.....RVA..LSTGGGFFVDFVV..QLADLGF..D..VYISGEL...........SEEAAEVA..KDL.....G......IG..LIAATHYQTEYIGMVE.....LRRRTEEE.LRRRG..................LQA Q8TZC0_METKA/12-224 GVLEVLEGLAPFDLA..V.EG.DEV.............................GL...VAG..........DPSD..........................SVDRVVVCLDLTPQLVRRLSP.........ETLVISHHP.........................................VPGPLLERV...........RSPVIVFHSNWDAARA...AEALA.EWL.....GLE.........DVRKPDPLAAE.........................................................................................................................GRFDG.......TLEDLLSRVEDAL.NP.........PE......IRVV.........ATKNRIH.....RVI..VVSGFGLSTDRFV.RLAAKEGA..D..AVVSGDL...........THRTAVVA..RVL.....G......VT..CVDATHARTELPGLKE.....LAEELSKR.LR.......................V A5UKQ3_METS3/5-218 EIIEFIDKNIPKNLA..L.EN.DEI.............................GFKKEYNL............NQ..........................DISSIKIFMDLYPEFDTQKTN..........TLILTHHP...P.LF...............N..........................P...........KTPTYTIHSNWDIING.GANEALA.ETL.....KLN.........VISPFDK.....................................................................................................................TTNIGRI.CKTDK.......SFGDFEKDILDSF............NE......IRIV......NKPSSSKKLN.....KIG..IVSGFGLKNSEYI.KLARKLNL..D..LLISGDL...........TQESAVLA..KNL.....N......IT..LIDLGHHSSEVPGLYK.....LKELLKPLN.........................I Q2FPY1_METHJ/5-230 ELFSRFEQDIPPSYA..V.PG.DQN.............................GY..................IGTLD...................PHIFDVQKILVLMDYILPESPNIDY.......SLYDLLVLHHP.......................PPIS......................P...........VIPTYVIHSNWDIVTG.GACDALA.DAL.....NIT.........SFDVLDE.....................................................................................................................STGIGRI.GGIDR.ETEDIITQGRFIHEIMATL.RV.........HD......IRTV.......NCNRFQPVG.....TIC..VISGFGLTPPLIS..KAISKGV..D..IVVSGDL...........THPGAVLA..KNA.....N......IT..LIDATHHATELPGLYR.....LGEMISSY....G...................LDV Y1146_METTH/8-215 SLIELMDRVAPPELA..L.PG.DRI.............................GYHGPEI.........................................EVEAVLVLMDYLEDVAVDG...........YDLLVLHHP.......................PEVE......................P...........PIPYLTVHSNWDVADG.GACDALA.DAL.....GLD.........VESFLDP.....................................................................................................................DTGVDRI.CRADL.......SLEELLE.RTGVL.NP.........ET......LRVV.........NPREYVD.....RVA..VVSGFGLSDKSLI.MRAWSEGV..S..AYLSGDL...........THGPAILG..RNM.....D......LT..LIDAGHHATEMPGLHR.....LREVI.ED.FG.......................V Q8TW44_METKA/6-234 EVIDFVEELAPPDLA..E.DW.DNP.............................GI...QVCP........PGGLD.........................RKAERVLVALDAT.HALERAGD.........ADLVLTHHP...L.LF................RPPRRIGGR......WYRVLRAVLE.A...........DAVFYAAHTNLDRAEG.GVADTLA.RRL.....NLR....................VE............................................................................................................REACDGFGRL.CEVPG.......SEEELLNALRNLS.PL.................TTVY.........GDWEGVS.....RVL..VVPGAAP.DGLVM..ECLRCGV..D..AVIAGEI...........KYHTRAEL..LEE.....G......IA..VVELGHEYSELPGVQE.....LARRVREE.FRD......................L Q0W3L4_UNCMA/5-231 DLVKLLEAIAPPDLA..E.DF.DHGK...........................IGL...IVP...........GYH..........................RVNKVATALDPTPFVIERAID......MH.AEAIVVHHT...L.IW................NPVTALTPD......MAGVLKLLLE.N...........DISLYSMHTNYDRAPG.GVNDTLA.DLL.....GLK.........DTVAVDLCRA..........................................................................................................................GVVET......QSLADFAASASRALKVD.................VEVV........GRLNKDVC.....TIV..TAAGSAFREALP...IAKQLNA..D..VLVSSEL...........RHDVIRDR..GNV.....A..........LISAPHYFTEAPAMKR.....LADVLNSKN.........................V Q12Z61_METBU/5-232 KVVETLEEIAPPELA..E.DF.DIDR...........................IGL...TLD...........LDN..........................DIKRIAVALDPTEYVLERAAQ......IG.ADMLITHHT...L.IF................HSVNLISKE......LAGLLKIAFD.N...........EISLYSMHTNYDSAKG.GVNDVLA.QRL.....GLN.........DVY.........................................................................................................................EVGMGRI.GTIDE......CPLDVFIDHVAKSLNTH.................LQYV.........GEKDTIK.....KVM..VFGGSGFKDDYLD..IARDNDV..D..AYVSAEL...........KHDVLRSY..DDL.....L..........LVDATHYATENPAMET.....LCERLKDL.LK.......................I A0ZGU3_NODSP/5-248 DLITWFEEWANPAWC..E.SW.DNC.............................GW...QIQ.........PGVLS..........................EKARVLVCLTPTLAVMQEAIA......LH.ANLIFAHHP...L.IF................SPLKSLCSG....EAIAEMARLAFT.H...........NIGIYSAHTNFDQVQD.GTADVLA.QIL.....DLQ.........SATPIVPTQA..................................................................................................................GLGYGRV.GLLEP.C....LTLQELLAKIHTRL.AP.........PH......LIFS......PTADLQQNIS.....RVA..VLGGSGA..SYIS..AVVKTQA..Q..VYLTSDC...........KFHQFQES..RDR.....H......LI..LIDAGHYATERPACDR.....LVQKFMSLNLDW......................V Q310X0_DESDG/5-312 DFIHMIERIAPVCGA..A.EW.DNS.............................GV...QVA..........SRCT..........................EIHSVAVALDPSEANIEKAVS......QG.ADFFLAHHP...L.AF.................KPQPLSGN....DSYFRSVSQLIT.N...........DICLYSAHTSLDANPA.GPVGWLA.ESL.....KLQ.........NCKTLEPTAASMQHRIIAPSAASGSIPAVIAGSIRCRHIQGIGYEF..........................................EFDTEDIVYETAADHIRQVLPAGTSLLKAEERAGRRELGLGIS.GSLPC.R....LSWHEFVQLLEKSVERT.................FWTT.......CGPVPETVE.....TVA..YCTGSGS..SLAE..TAFARGA..D..VFITGDV...........KYHTALDT..TGC................IIDVGHFSLEEEMMRR.....FAALLAAGAPD.......................L Q1MR73_LAWIP/5-246 NIINIIEEVAPLSVA..A.TW.DNS.............................GV...QVA..........SSQD..........................EIFCLAVCLDPTPESVYKASE......LG.ANMILSHHP...LGLR................PRFPTIIDN......YYSVLKLLLS.K...........NILLYSAHTSLDANLY.GPASWLA.EVL.....ELH.........ECSVLESIHTTNG............................................................................................................VSSQYGFGRI.GHFSS.P....VPVENFCQRIYPLIGEA.................VPRL.......IGELPRQIY.....RVA..FCPGAGA..EYAA..EAARQKA..D..ILITGDV...........KYHQALEF..........S......LP..VLDVGHFCLEEEMMRR.....FSQYLQSVLLD.......................V A1VDX4_DESVV/5-310 RIIETIEKTALPAAA..A.PW.DHC.............................GV...QVA..........AARD..........................DVHALAVCLDPTPDNVVKAAA......LG.ADFVLAHHP.....LL................LQPRYLDRV....DAHHEVVRTLLT.R...........DIWLYGAHTSLDANPA.GPVAWFA.DEL.....ALE.........GRRVLEPTFTRQRITHRIVGMGAHLAAVAALPAVLKARAGDDDLV............................................VSCNAEDWAQLEVALRALPDGDRPMLPMAPEYPAEVWGIGII.GDLPA.P....LAWDDFIRRVGQLV.PL.........DG......ATFC........GSPPPVIS.....RVG..YCTGSGS..SLAS..DAFAMNA..D..IFITGDV...........KYHTALDT..TGP................IIDVGHFSLEEEMMRR.....FALRLQEDLPD.......................V Q7MQP7_WOLSU/6-230 EVLGFLEEISPLALQ..E.PW.DNS.............................GL...LVG..........SGGE..........................EVNSIYVALEATLKLVESLPP.........HSLLITHHP...L.LF................KPLKALLWE....EYPANILRALIQ.K...........NLSLIALHTNFDQTH...LGRYVASEVL.....GFS........G............................................................................................................................VEMEGYV.GYFPL.K....MSTHELASHLKRAL.GL.........ER......IATV.........GQERYLE.....RGA..IITGSGG..SLAP..SIKA.....D..ALLTGDI...........KYHDAMIA..KSL.....G......IN..LFDIGHYESERFFGEI.....LASVLKKHLNHL......................I Q7VIG7_HELHP/17-261 EIYELCNTISPFNTQ..E.SW.DKS.............................GL...NLG..........SFHN..........................EYTDIVLCLEVNLAIALSLKP.........NTLLITHHP...L.FF................NPTAQMITD....TYPHNIAAILIR.K...........NCSLISLHTNFDKSH...LNTYLTHQIL.................QWHHFVPS....................................................................................................................EDGLLMS.GKIPP......ISLQKLAQDVCKKL.NA.........PSVSFVQGDDITFLNQESQASHTNDAIT.....EAY..VVCGSGC..SLLS..QIQPNPH..I..CLLTGDI...........KHHDAMMA..KSM.....G......IS..LIDIGHYESEKYFVEI.....FDSILQNVGYN.......................A Y959_HELPY/6-231 EVLVVLNRLSPFELQ..E.SW.DNS.............................GL...NVG..........SENS..........................EFSEIVACLEITLKIALNAPQ.........NALIITHHP...L.IF................KPLKTLNDE....IYPGNILKILIQ.K...........NVSVISMHTNFDKTH...LNKHFAHALLE..FDGLV.....................................................................................................................................EKGLMLV.KENAN......IEFDALVKKIKSSL.GV.........GS......LACV.........KSSQTIK.....DLA..FVCGSGA..SMFSSLKAQS........CLITGDV...........KYHDAMIA..QSL.....G......IS..LIDATHYYSERGFALI.....VAEILHSFNYL.......................V A8EW77_ARCB4/5-232 EIYDVLNEISPFELQ..E.KW.DNS.............................GI...LVG..........SFED..........................EIENVYISMDLDLELAKDLKP.........NSLIITHHP...L.IF................SGIKRVNFD....TYSTKILKELIK.K...........DISLISMHTNIDKTH...LNKYVIEKIL.....GFK........I............................................................................................................................ENSSEFI.SYCNV.N....MNFDELVKYVSNKL.NL.........KT......TKVV.........RSKEFIK.....DIA..VVTGSAM..SLLD..QIKA.....D..CFLTGDI...........KYHDAMEA..KAR.....N......IS..LIDIRHYESECYFNSLVE.TLLEEYLKKNKLK.......................A Q30TF6_SULDN/5-228 QIYDFLDSLSPFELQ..E.KW.DNS.............................GL...LVG..........DFNQ..........................DVKKIVLSIDVDESLIDSMEE.........GTLLITHHP...I.IF................GGLKQLEFN....KYPANLLQKMIQ.K...........NISNISMHTNFDQTH...LNEYVATEIL.....GYK........I............................................................................................................................AQKDGFV.AYLDI.D....EDFDFFALKVASAF.SL.........PH......AKCV.........KSSQRVK.....RVA..LTTGSGS..SLIK..SIKA.....D..CFLTGDI...........KYHDAMEA..KSI.....N......LS..MIDIGHFESERFFADI.....LFKHLKNLGLE.......................A A7GZB8_CAMC5/5-228 EIYKILDAIAPFDIQ..E.SW.DNS.............................GL...LVG..........SLES..........................EFERIYLSLDLSREILENALP.........NSLFITHHP...L.IF................KGLKSLNFS....YYPSNLIRKMIE.K...........NISLISMHTNADLAF...LNEHFTREIL.....GFE........P............................................................................................................................SEKDGFL.MYCEV.K....FSFDELACFLKEKL.RV.........ET......IRAV.........HAKDEIS.....RIC..VCTGSGA..DLIG..EVRA.....D..AFLTGDL...........KYHQALEA..KEN.....G......IN..LFDIGHFESERYFGAA.....LAKYLQNLEIE.......................V A7SAJ3_NEMVE/5-336 EVVSNLESWAPTSLA..E.KW.DNV.............................GL...LVE.........PSGQH..........................NVRSILLTNDLTEKVLQEAIE......KR.ANMIISYHP...P.IF................VPLKRLTSK....SFKERIIVKAIE.E...........RIAIYSPHTAFDAVFG.GVNDWLA.KGL.....GRG.........SVDPITYSMEACVKGCDYNVTAIAPSTEAAEKINSQINSLGGIGSNSIGKTERF...........................GDPALPKIVTHCSGDTLSAVMQILQSYTIYYLEIYQLAKKPIPGTGSGRL.CTLDT.P....VTLPDIIHRIKKHL.QL.........PH......LRVAY....APSKAKDTLLS.....TVA..LCAGSGA..SVL.....QGVAA..D..VYLTGEM...........SHHEVLEA..VSR.....G......VH..VILCEHSNTERGFLVP.....FRQQLYNM.LSGQ...................VQV Q4CW43_TRYCR/7-273 RVMVAMGEIAPLWLA..DQSW.DNV.............................GL...LVE.........SPDSN..........................NSGIVLLTVDLTPEVMEECLR......HN.VEVIVAYHP...P.IF................TAFKRLTLA....DPKQKIILQTVR.H...........GASIYSPHTSLDAAKG.GINDWLA.SIVDS.SG............ACRPIQPCECVNRHGNGGF.................................................................................................GGNDNDELSVGIGRL.VALHQ.P....KTMATLVNDIKTGL.RI.........PT......VRVSL....PHGWSGNTSVH.....SVA..ICAGSGS..SVF.....RMIREHVD..VLLSGEM...........GHHEVLAA..NAK.....G......QA..VILCEHTNTERGYLEKELLPKLQQKLEKG.VR.......................I Q5KCX5_CRYNE/12-280 LIKRVWERIAPLQLA..ERSW.DNV.............................GP...IIEA........PYPNP..........................SHRQVLLTIDLTPSVCAEALK......HPSLSLIVSYHP...P.IF................RGLKSLTLS....DPLQASLLKLSA.K...........GISVFAPHTSLDATPN.GINTWLI.KPFIPISISHD.........PIIPSDPLESF................................................................................................................EGAGMGRI.AKLSE.P....LDIRQAIKMVKDHL.SL.........DF......VQLAE.....PQPDVRKPIK.....SVA..VCAGSGG..SVF.....KGVEA..D..LLITGEM...........SHHEILAY..VAS.....G......TT..VILTNHTNTERPYLSHVLQPWLQEELNKE.TKDHSNEYG.........ANGGKWEV NIF3_SCHPO/9-265 KLKKVVESIYNPKLA..D.SW.DNT.............................GL...LLEA........PFPRT..........................NASSVLLTIDLTEKVAEEAIS......NKLVSSIVAYHP...I.IF................RGLKAITME....DPQQRSLLKLAA.E...........GIHVYSPHTAVDAAVD.GVNDWLA.QGIAGGRNNIK.........SVVPTQQNSVMA...............................................................................................................EAEGYGRI.CELKI.P....TTLRELVQRAKELT.GL.........QY......VQVC......APNGLDSHIS.....KVS..LCAGSGG..SVV.....MNTDA..D..LYFTGEL...........SHHQVLAA..MAK.....G......IS..VILCGHSNTERGYLKDVMCQKLASSFHKEGVDA.....................NV Q7S5H9_NEUCR/62-330 RVVAAMRALYPEQLA..DKAW.DNV.............................GL...LQENI......AVAGQD..........................VPQTVLLTNDLTVAVAEEAIR......KR.ASVIVSYHP...F.IF................RGLKSVTLA....DPQQRILLQLAQ.A...........NIAVYSPHTAVDAAPG.GMNDWLA.DMLDGHGVETKR.......SICQPISSSITASLP..........................................................................................................PAFFNSGYGRL.VELGH.P....VYLGNIIKAYAEGLGGL.........NH......IMIAA.....PKDKKVTTIR.....SVG..ICAGSGA..DVL.....KNCDA..D..MIVTGEM...........THHYALAL..TMK.....G......KV..VMTVFHSNSERKFLKKRLQPQLQAQLEKEGVKHP....................EV A6SM83_BOTFB/24-302 TVVLTTRGVSFVTYL..WGSFTDNI.............................QV...LLEA........PHREN.........................HLKDSVLLTVDLTKGVADEAIR......RK.DSIIITYHP...I.IF................RGLKAVTLA....NSQQSSLLRLAQ.E...........GISVYSPHTAVDAAPE.GLNDWLA.DIV.................TNRPLKKNQSVDTESIDHERSI..........................................................................................VNSIKDIPDGFEGAGYGRI.VRFKQ.P....QKLGDLVARMQSSL............QIGGRISGLSVAVPQSIPRGKKSSIEIS.....SIG..ICAGSGG..SML.....NGLDV..D..LLFTGEL...........SHHEALAA..VEQ.....G......KC..VVTAFHSNTERAYLKDRMQSALEEVMEGN.AD.......................I Q5B6Z5_EMENI/15-342 AVVNSMRKLYPESLA..DKSF.DNT.............................GL...LLEA.......PFNPTR.........................RQKNSVLLTIDLTKAVADEAIA......RK.DSVVVAYHP...I.IF................RGLKSLTFN....DPQQQSLLRLAA.E...........GISVYSPHTAVDATPG.GMGDWLC.DVVTGATTPSSS.......SSVADLESPPSALYSAPTYPKPGPVSPSTSSK........................................................................IIPHTRSTIHPSPAPVPSGLEDAGMGRL.VTFAE.P....QPLASVIDNIASGVGYP.........GG......IPIAIP...QSASVEDIKIR.....TVG..VCPGSGS..SVLM....KGVKQIPD..LLFTGEM...........SHHETLFA..IEN.....G......SV..VVALAHSNTERGYLRAVMKDKLEGVLKGEWAELRTEEGKGEEAGLNEVYEDETCEV Q4KMJ5_DANRE/5-334 GVLEVLEQLAPLSLA..E.SW.DNV.............................GL...LVE.........PSRPR..........................PIKTILLTNDLTAAVMDEAVG......MK.CDLIVSYHP...P.LF................RPFKRLLQK....DWKQRLAVRAIE.N...........GIGIFSPHTSWDSVEG.GVNDWLV.GGM.....GRG.........KVSVLSQAVSSGAQKHRVEFSCMDDGEVNSLLEQLRHTEGSETFQCTRINSES.............................GGQQVNLTCGSSALTGAVQILLSHPHASKSLNITQVQQPPLLGCGQGRL.SVLEE.P....VSVSTAVQKMKTHL.GL.........PH......LRLAL....GDQQTLDSMVK.....TVA..VCAGSGA..SVI.....QGVTA..D..LYITGEM...........SHHEVLDA..VSK.....G......TS..VILSEHSNSERGFLGV.....FRERLSAR.LDHT...................VSI A4IGP2_XENTR/5-334 SVVSRLNVLTPPALA..E.GW.DNV.............................GL...LVE.........PSPPH..........................QVHKLLLTNDLTEDVLDEAID......TG.ANMILSYHP...P.VF................KALKRITQK....SWKERLVVKALE.K...........HLAVYSPHTSCDALAN.GVNDWLA.RAL.....GPS.........KSVPLRASTSLTYPGGVGHLLEFRLDPAGNIMSRLNGIQGVSVCTSTARHDGD.............................NGTRVSLSCSQNALVEVLSILSEEPQVYNSLQLLTLQKPPLVDTGMGRL.CTLSE.P....VSIAAALERIKKHL.HL.........PH......LRLAL....GRGRTLESSVS.....MAA..VCAGSGS..SIL.....SGVPA..E..LYLTGEM...........SHHDVLDA..VAE.....G......RS..VVLCEHSNSERGYLQE.....LGGQIRQA.LEGQ...................VQV Q6P1B7_MOUSE/31-363 ALLSSLNDFASLSFA..E.SW.DNV.............................GL...LVE.........PSPPH..........................TVNTLFLTNDLTEEVMDEALQ......KK.ADFILSYHP...P.IF................RPMKHITWK....TWKECLVIRALE.N...........RVAVYSPHTAYDAAPQ.GVNSWLA.KGL.....GTC.........TTRPIHPSRAPDYPTEGAHRLEFSVNRSQDLDKVMSTLRGVGGVSVTSFPARCD..........................GEEQTRISLNCTQKTLMQVLAFLSQDRQLYQKTEILSLEKPLLLHTGMGRL.CTLDE.S....VSLAIMIERIKTHL.KL.........SH......LRLAL....GVGRTLESQVK.....VVA..LCAGSGG..SVL.....QGVEA..D..LYLTGEM...........SHHDVLDA..ASK.....G......IN..VILCEHSNTERGFLSE.....LQEMLGVH.FENK...................INI NIF3L_DICDI/12-341 EVLKKLGELIPLNLA..E.KW.DNV.............................GL...LVEP........SNTDS.........................MDIERIFLTNDLTEPVLQEAIN......EK.ASFIISYHP...P.LF................NQFKTVNQK....SISQRIAIKSIE.N...........RIPIYSPHSALDSCDG.GLNDWIS.NALIKLNSGKG.........RSKPITPYQESLKSTQKISIYLHTNQPLTAEILKQLELNSNFQFYSTDK.....................................IELSCDQQQLLILINLIKSFSNEIKNWDIINQEKVLSLNNGSGKL.VTLDDDG....IDIDVIVKGVKELF.NI.........EY......VRIGR.....PLSGESKKIK.....TIS..LCAGSGG..SVV.....FNAKA..D..LYLTGEL...........THHAILDA..CAK.....G......SY..VIVCDHSNSERDYLPQILKPNLEKLFNGR.IK.......................V Q8SV52_ENCCU/5-229 EVSKAIDRFASLRRA..KTDW.DNV.............................GV...IVD...........SGT..........................QDKKILLTIDLTEPVLEECIH......LG.VKNVVAYHP...I.IF................KAVKKLGSK.......ESIVIGCIK.N...........GINVFTPHSALDP....LMNTYVY.NMI.................NSGPFFYKKN..........................................................................................................................CGPNT......STIGNAIRILKERS.GL.........ES......FRIC........LAREHTME.....SVPEFMHVGVGA........TFRNVLLKNS..IVITGEM...........SHHDLLSC..IAN.....G......AS..VILMEHSNSERICLGH.....ISAKLKEE.LPEY....................EI Q6FQE2_CANGA/13-283 KALEVIRAAFPEKYA..DKSF.DNT.............................GL...LIDCSS....NEESHAN..........................NAVKMLLTVDLTSRVADEAVK......QG.CNLILAYHP...F.IF................PSWNRLNPQ...TNVQHASAIKLIQ.N...........NISVYSPHTAVDAVDG.GVNDWLV.ESLVPKTVNIT.........TKECIESTANTAP............................................................................................................HDPITGYGRY.FKLDK.A....VTLQEVVDVLKKNT.GL.........SH......VQIASLP.YEISGNLHHEVQ.....TVA..VCAGSGS..GVF.....RNLKETPD..LYVTGEL...........SHHEVLKY..KEM.....G......KA..VILCNHSNTERGYVKTSMLQLLKRHDTAGLLQD......................V A3LS90_PICST/8-261 RAVKAVQKFYPIALA..DKTW.DNT.............................GL...LLDSS......SDNIKS..........................DQLNILLTIDLTQSVAEEAVK......KS.ANFIVAYHP...F.IF................RGLKSITTK....DPQQRSLIKLIQ.N...........NISVYSPHTAVDSAYG.GVNDYLV.DGITY.GFDIQ.........SREAIEKDENA................................................................................................................QDCGMGRI.VTLKK.P....APLSKLIGNVKCSL.GL.........KY......VQIAR....GSGTSKDHEVS.....TIA..ICAGAGG..SVF.....KGIKA..D..LYFTGEL...........SHHEALYF..TES.....G......SS..IITTNHSNTERAFLKV.....IKKQLSET.LQDA....................NV Q86F61_SCHJA/5-335 KIIQLLDMYCLPHLA..E.KW.DNV.............................GL...LIE.........PSPPH..........................RVNKIFITNDLTEQVLDEAIS......QK.SGLIVSYHP...P.IF................SSLKKLTQQ....HWKQRVVIRCIE.N...........KIAVFSPHTGLDAKFG.GINDWLL.EPL.....AVR.........EKKSLTRSPAINQATSRLNVVMNQNFGDFVMSTGVGVCTTNIMSDAG.........................................LTAVVTCAESDLKRVLDMAEALQIFVVSKDTIQQTREEGCGRL.VTLQF.P....VHLKAVIAAYKKFL.NV.........EH......LTVAP....GLGKTLDCSVQ.....TVA..VCAGSGG..SLLC.QTPASFAA..D..LFITGEL...........SHHDRLEA..ISR.....G......IS..VILAGHSVTERGFFKERFIPDFRQLLSAV.YDPGDI...............PHLEL Q14P57_SPICI/5-233 KLYQEIETDFSLKVA..C.KW.DYS.............................GH...QYG............NKN........................HFVAKIMVCLDLTSEVITAAIA......KQ.INVIITHHP...F.CF................GKKKRIQRI....PYKQTIIELLNK.H...........QIAVYALHTNYD.....GLMNELILQEL.....NTQ.........KIVAFDDNL...........................................................................................................................TKIGHIS....LTADEIIMKLKAIF.KI.........TT......VQHN.......LPKLDQPIK.....TVA..LAAGAAG.N......VIANIDQNID..LFITGEV...........KWDQWVLA..NEK.....Q......LA..VICFNHY.MEDFFTAA.....FAGYLTRK.FPT......................L Q2SRY9_MYCCT/5-244 NIISYLNQLFNPKKA..S.NW.DHV.............................GF...QFE............YKKL.....................NNINISKVLVCLDLTNDCLEFAIS......NQ.IQLIITRHP...F.IF................NELKLEKKN....PNKKQMIKKLNK.H...........KILVFSIHTNYDSSIKQNLLEILN.KKL.................KINSFKKYGKDKE............................................................................................................SNL........FYLDQ.K....ISVNDLINDLKEIF.SL.........NQ......IRLN......SNISLDTKIK.....NFY..LTSGSGA........STMIENMLKD.CTFITGEV...........KWDQWIYA..NSN.....N......VN..LIEIGHY.AENHFIDD.....LKNKLQIK.FKD......................I Q6F1J4_MESFL/5-244 KLIKYLEKKFPANKA..Y.EW.DNV.............................GI...QKF............NKKVV...................NFDKEISNVLITMDLNNESLKQMEN......SK.IDFIITRHP...F.IF................NELKKEKEN....PFKKELIKYLTK.E...........DIYVFSIHTNYDICGYKAFIDLLT.NAF.................KIKSAKFPLFNKE............................................................................................................YLE........VNLNS.D....ISKDDLIQNLKNVF.QV.........KT......IQIN........SDENFKTS.....KFL..INQGSGA........SSMISKQIQD.CVFITGEA...........KWSDWIYA..NDN.....N......VT..LITVGHY.MENYFIND.....IEERLSNN.FKD......................I Q8EUT6_MYCPE/5-240 DFYYLLDSIYKIDSQ..D.EW.DNS.............................GI......Y.......EFGSDN..........................VLINPILSLDINLDVVDYAIE......NN.SNLILSHHP...V.FI................DPLDQKKKH......IKSIFQKLEE.H...........NISVISLHTCFDKNPK.GTTYQII.KRL.................KGFNISRSKKSPY.............................................................................................................LF........FGVSNSK....LTLADLVKKIKNNL.EI.........EY......VNVL.......SSKLDKNNNKPKHIKIA..AVGGSGS..SEIE.TIIKKDKI..D..FFITSEV...........KWHLWNKN..SQD.....Y......FT..ILEIPHS.VEKVFIKT.....IKEKFKN...........................I Q4A5V5_MYCS5/5-245 ELASFLEYLYPKDNA..E.EW.DPV.............................GF...SLS............YKN........................MLVRGVITCLDVTKEIVNFAIE......NN.YNFIVSHHP...FLFY...................EDLNEELNTYFYKKEIYELCKK.H...........KISLFSLHTNYDSDKN.GTSYQVA.KFL.....NLF.........DSPAHKELKTVSK............................................................................................................YAY........CFKDN......LSVSELAKAAKNSY.KI.........DS......LATN.......VSDLDAKFN.....SFC..IIAGSGA..SEIS.QLKRQYKI..D..LFLSSDF...........KWSDYLFY..DQS.....K......IN..FLEIAHL.QESVFALD.....LARLLNQH.FPD......................L Q6KI02_MYCMO/6-252 DLINYLESFYPFEKA..E.LW.DKV.............................GFSFLSKN............LK..........................QIKKILICLDFDFEAFEKVMK......ND.IDLIITHHP...F.YF..................EDTLEEEFLKNPYKSKIESVFKKLN...........NKSIYTLHTNFDNHFE.GTSYLIA.EQL.................GYTNFLKTNNN................................................................................................................Q........AVITKVN....ENFKDIVDKIKSSF.NF.........TY......VISN.......LKETDEIVKTKKTWKIA..IFAGAGD....IN..LINQFKDNYDFDLLITSDL...........KWNTLISLASNQK.....E......IN..YLIVPHK.IEEVFIAK.....IETLLKEK.FSN.....................KL A5IY53_MYCAP/5-248 KITNYLIKQYPLENK..E.EW.DPA.............................GW...SLK.........FNLSE..........................KINGIVVALDLTSEILEKALC......LN.ANLIITHHP...FKFY...................KTWEEEFINAPYKSQILKTLKQ.K...........RINVLCLHTNYDNHKF.GTSFQIA.KML.....DLE........QNIAHFENSNYP.........................................................................................................................IAIKNVN....FKFKELVLLINQKL.NL.........HQ......MRTNI....DFDESKNKIIK.....NIA..VFSGSGA....IS..EISKVDCTYD..LIITSDI...........KWSDWLTY..KEL.....K......IP..ILEISHL.DEQVFIYD.....IYNQLSSN.FRDI....................TI Q601Y7_MYCH2/5-239 EVGDFLLEKFPLQNC..Q.NW.DKC.............................GWQFLFDT........................................KFLGATICLDLTNDVLDFALK......NS.SNLIITHHP...FFFY...................QTKKEEYAYSPYKKKLTFLLKK.K...........LISVISLHTNFDSKEN.QTAFSII.KQCGFDFEKIE.........KIDEF...............................................................................................................................NILFQTS....ADFNEILKKISLNT.NL.........TT......FRSN........VEKNFFPK.....KVA..ILPGSGG...ILACLQAKKQKA..D..LIITSDL...........KWSDQITL..YHK.....K......IK..VLEIPHL.IEQVFVFE.....IERILKEK.YSK......................I Y351_UREPA/10-250 DILNFLTKKYDLSKA..E.AW.DKN.............................G.....LFF........D..EQ.........................QTINNVQIALDITDDVVNDAIL......NN.ANLIISHHP...L.FT................N..QDSNDEV.NYFVNIDLIEKIKK.N...........KISLIHLHTAFDASAN.GMSMQMA.KRL.....GL..............LNLKQDEQNP..........................................................................................................YLVV........GELKL.G....VSVDYISRIIKQKF.LS.........PI......IKYN......NVFRLETNLK.....KIG..IIGGSGY..KFAD.DAFNRYQL..D..MLITSDL...........KYHNWLDA..QAK.....K......QN..IIDMNHL.SESIFIDV.....IYDELTKF.YGND...................ANL Q7NB92_MYCGA/5-241 RITDWVLKEFPLRNQ..L.SF.DNA.............................KLINHKNL............TN..........................QLTKVLVCADYDRFNFELAKK......HN.ANLIISHHP.....MF................INHQDLKSD....AFIAKAYQDFYQ.N...........NRSFLVLHTAYDFSPN.GAHSYFF.KLL.................KIKKFDPNPINHY.............................................................................................................YR........FEID.......CSLEQLISDLKKI.............EYIDQVQYLSTA.........KFKKKLK.....KGL..ICLGSGYSSDQLDLELFKQY....D..LLITGDL...........KWSSWINA..INH.....E......IN..VIDIGHH.VESIFIDH.....IGELLVEK.FHD.....................QL Q3F0L5_BACTI/6-294 EIVSKLDIELDIKSF....GK.DSAFSQFIPMVYEPLKFDWKSVFEKDFVELFNGL...MLK............GD.........................ANVKKIFLAVFPTDEVLERFIE.....ESNSGDLLFMHHP...L.LMEC...........GDPKGVWGKGFV....PIKEKYIKQIKE.K...........KLSFYTCHVPMDYHANLGTSVAIA.KQL.....NAE.........IIDGFLTSSIN.................................................................................................................NEDLVLI.CNIEE......KSTSELTSHLKEIF..D.................IPYVD.....FEGKNINNVK.....KIA..IVAGCGDKVSWME..EAEKRGV..Q..AYITGEIHCHIDNEYGKQRYKQMMDY...VS.....N......TSMSLIGVSHSASEYLVHKT....LMKEWFENN.FD.......................I Q0SN38_BORAP/5-237 DLFFKLNSIFDIKKYEHV.DK.NLN.............................GL...QVGD........L..SA..........................EVNKVAFAVDASYSTLKEAKG.........NDFLITHHG...I.FW................SKKERIISN......MYNKVKFLIE.N...........NLALYSVHLPMDAHSVYSHSKVFS.DFL.....GLT.........NPFAFANYE...................................................................................................................GFNLGII.ADSA.......FSFSE....ILEKI.............KKKNKHILFSK.........KFKEKVN.....KVA..IVSGSGY.S.FFE..EALHYDI..D..LFITGDT...........SHQIYSLA..EEC.....G......VS..LIFAGHYFTETFGLIK.....LMEDFKIQ.ED.......................L A9B0A0_HERA2/5-242 ELVRYLDSYLQTAKF..R.DA.SLN.............................GL...QVE...........GRD..........................EVKTIALAVDASLQAIEAAIA......GN.ADLLLTHHG...L.FW................GNAQPLVGW......LGRRIKRLMA.A...........DCSLYTSHLPLDAHGEVGNNAQLL.KLL.....GWE.........MVQPFGDYR...................................................................................................................GQMLGFI.GQLTT.P....LSIEGLVAHVKSTL.AI.........PEN....EIKVW.......G.QTSRGIK.....RVG..VVSGDGA..SELE..QALRDGC..D..ALLTGEV...........NYAAVFPS..IEA.....D......MP..LICAGHYHTETLGVKA.....LGAHLEQT.FR.......................V Q1IWV8_DEIGD/21-255 TLVRWLNEYLNIGAY..P.DP.SLN.............................GL...QI.............EGT........................DTIRRVAASVDTSIKTLQDAAD......SG.ADLLLVHHG...L.FW................GKPLALTGP......HRTRVRTALM.A...........DLNLYAAHIPLDAHPEVGNNAMMA.RAL.....SLQ.........SLRPFGDWQ...................................................................................................................GHKIGLA.GELPF.S....QSLQD....FADRI............QKLTGEICLVHA.........GGQPQVQ.....RLG..IVSGSGA.S.AVA..EAAAAGL..D..TLLTGEP...........EHKHFHDA..FEY.....G......VN..VIYAGHYETEVFGVRA.....LAARLEEE.FG.......................L Q73KL0_TREDE/5-248 ELDLYFTELLNIDAFAAQ.DL.SQN.............................GV...QVQ............NSG........................KEIKKVAFAVDACLQSIKEAAE......RK.ADMLFVHHG...L.FW................SRSLRIMGN......HYHRIKALLD.N...........DIVLYAVHLPLDAHPLYGNNIGLA.RRL.....ELE.........NLKEFGMYR...................................................................................................................GLNIGFY.GSLPL.K....EGSEE.GLELDEIINKL.........FPQGEKPANILP.........FGPKKIK.....TIG..IISGGAA.S.EID..DAIALGL..D..LYITGEI...........EHITYHNA..LEN.....R......IN..VIAGGHYQTETVGVQL.....VAKKLELD.TN.......................L Q2LUC1_SYNAS/5-241 RITDYIDSYLDIHSY..H.DD.SAN.............................GL...QV.............ENT........................GNVKKIGLAVDACHESISRACR......AG.CDLLIVHHG...L.FW................GSQQLIVDN......HYQRIRALIM.A...........DLALYAAHIPLDAHPIIGHNRVIA.EHL.....DLE.........DIEPFALHH...................................................................................................................GKHIGVK.GRFRQ.S....GSRAE....AAIWI............EKELGACRGLLE.........FGPETIS.....TVA..VVAGSATDIELFR..ELKRDGI..D..FFVTGEP...........KYAAYHMA..KEF.....G......LN..IFYGGHYQTETFGIKA.....LGEHLQRL.FA.......................I Y1777_ARCFU/5-234 EVVRFLDDFLEINSY..Q.DV.SNN.............................GL...QV.............EGS........................EEVKKVAFAVDASMESFRAAKA......VN.ADMLVVHHG...L.IW................GGIGYIRGI......VKRRIEFLLR.S...........NLSLYAAHLPLDAHREVGNNAVIL.RKI.....GAE.........PQEEFGEYK...................................................................................................................GVKIGFS.AKLEK.A....TAVGE....IAEKL..............G...PAMVLP.........FGEERVR.....KVA..AVSGKGC.F.ALN..EAIDAGV..E..LFITGEP...........EHEAYHLA..KEG.....G......IN..VFFLGHYESEKFGVQS.....LMEVVREK.LG.......................I Y1424_PYRAB/5-239 EIVSFLDEYLSISSY..P.DK.SSN.............................GL...QV.............EGK........................EEVERIAFAVDACLDTIAKARA......FN.ADMLIVHHG...I.IW................GGVSYVKGL......FAKRLKALLS.S...........EMNLYVAHIPLDVHPEVGNNVQLL.KLL.....NLE.........PLEPFGEYK...................................................................................................................GIKIGYI.GEFEE.P....KPLPM....IAQIL..A.........EKLPVDYVRSYE.........FGLQEIK.....RVA..VVSGAGG.F.AIE..EA.SEKA..D..LLITGEI...........SHADYRTA..EDL.....R......VS..VIAAGHYATETLGVKA.....LMKLVREK.FG.......................V Y1766_HALSA/5-242 DVTSRYNDRLRVTDY..A.DA.ATN.............................GL...QVG............PGD........................RSVERIAFAVDAAAATISDAVE......WG.ADLLVVHHG...V.AW................GGLDAVTGR......EYDRIAALVD.G...........ECALYAAHLPLDGHPELGNAAHVA.DVL.....GLT.........QRSPFGDHS...................................................................................................................GEQIGLQ.GQLPD.P....TSAPA....LSKSLAAA.........LPTGDQPVQVLD.........VGPAELT.....DVA..VVTGSGA.D.WLR..EAEANGV..D..ALVTGEG...........KGKLYHEA..REA.....G......VS..VFLAGHYATETGGVRA.....L.EAVADD.WG.......................V A8B7G6_GIALA/7-257 QLLQFLSEVYEEQ....P.DG.QYN.............................GL...QV.............EGR........................KEIRTLVTGVSLCGDLIAEAVH......RN.ADAILVHHG...F.FG................KSFLRVTDS......IKKRLTPLLK.H...........DINLFAYHLPMDAHPIIGHNAQLC.KAA.....GLLLEKFYSCGCYCENPGNLSG..................................................................................................................LEIIRRL.SEFCD.RRAYEVDTRTP...QQNDLCSS.........TFYGTRVWPFNS.......SFAINSPPK.....RVY..ICSGGSS.G.LID..EI..EDV..D..LFIFGEP...........KESAISTA..RDR.....G......IS..MAALGHWRSEQPGLWA.....IGDLISKQ.LS.......................I A5EYD5_DICNV/5-236 FLVSHLNELLQIRKF..R.DY.APN.............................GL...QI.............AGR........................AEIQTVVTAVSASQAAIDFAVA......NN.ADALLVHHG...Y.FW...............KGEAAELVGV......KRKRIATLLH.H...........EINLLAYHLPLDQHATLGNNALFG.QAL.................SAHNISQSS...................................................................................................................FDDFLWQ.GDIET......VSASQ....WIAAV............EKILQRSIIAVG.........NTQKMIQ.....KIA..WCTGAAQ.D.LLL..QAHAEGA..D..AFLTGEY...........AERSYHEA..REC.....D......ML..FLVCGHHSTETFGVRA.....LGDYLAAT.QG.......................L Q5WY60_LEGPL/6-241 ELSLFLLDFLNCSQY..Q.DY.APN.............................GI...QV.............EGK........................DKIKRICTAVSASEDVISQAIE......QQ.ADALLVHHG...Y.FW...............KGENPVISGM......KRRRIAKLLG.H...........NMNLFAYHLPLDCHPELGNNASLA.NLL.....LIE.........SPEMHKVNN...................................................................................................................TANLLWS.GKLSK.A....MNSEQ....FSSFL............ERKLGRYPVHIA.........GNEKMIH.....SIA..WCTGAAQ.D.FIE..EAYQLSV..D..AYLSGEV...........SERTFYQA..MEL.....G......IQ..YFSCGHHATERFGIQS.....LGIYLANH.FD.......................L Y291_BUCAP/5-236 LLEKIINKKLSSDQY..S.DV.VPN.............................GL...QI.............EGE........................KIIKKIITGVTACQELLDKALS......YG.ANAIIVHHG...Y.FW...............KNESQCIHNM......TRKRLTTILS.N...........NINLYSWHIPLDIHPKLGNNAQIA.KKL.................NIRIKGY.....................................................................................................................ILPYLFW.GTLEE.N....INAFD....FSKKI............EKKYEKKPIHIY........ANAPIYIS.....RIA..WCSGRGQ.N.FIK..QAYNFGI..D..AFLTGEI...........SEETMHIA..KEL.....G......IH..FFSIGHHATEKDGIKS.....LGKWLNNK.YD.......................L Q1Z5P6_PHOPR/5-241 KLEAALNELLSPHLI..K.DY.CPN.............................GL...QV.............EGK........................TQVKKIITGVTACQALIERAIE......EK.ADALLVHHG...F.FW...............KGEPAEIRGM......KFRRIKALIE.N...........GINLYAYHLPLDVHPELGNNAKLA.QML.....ELE.........VIGGLEDGN...................................................................................................................PRSVAMY.GQLDK.T....ITGAE....LASRL............SIGLHREPLHIG........DNAPADIK.....TVG..WCTGGGQ.D.YID..LAAQKGL..D..AFISGEI...........SERTVHTA..REL.....G......IH..YFAAGHHATERYGVKA.....LGEWLAQE.HQ.......................F Q6FCJ5_ACIAD/6-241 EIVQWCDQTLSSNQF..K.DY.APN.............................GL...QI.............EGA........................SEVNHILCAVTASDAAIDAAIE......AG.ANVLLVHHG...Y.FW...............KGEPYPITGM......RGRRIKKLIQ.H...........NISLLAYHLPLDAHPSLGNNAAIA.DLL.....ELK.........HIEALDPNE...................................................................................................................KFPIGNI.GDLKQ.A....LSPEA....FKAKL............QDVFDFNIIHLP.........AQVESIQ.....KVG..FCTGGAQ.D.FIH..QAAVQGC..D..AYISGEV...........SERTFYEA..QEL.....N......VH..YYACGHHATERYGVQR.....LGKALSEH.FS.......................L A2S764_BURM9/5-237 ELELYLNNTLEIGRF..K.DY.SPN.............................GL...QV.............EGR........................RKIEKIATGVTASLAFLDRALE......WG.ADAVLVHHG...Y.FW...............RHEAPQITGR......KYQRLKRLLA.N...........DLNLFAFHLPLDAHPEFGNNAQLG.ERL.....GLI.........GDARFG......................................................................................................................DQDLGWL.ATLPM.P....VSLEH....FTAKV............ENTLGRAPLVLG.........DLDQQLR.....RVA..WCTGGAQ.S.FFD..AAIEAGA..D..VFLTGEV...........SEHVTHAA..AES.....G......VA..FVAAGHHATERFGIQA.....LGQHLSER.FD.......................L A5CVR4_VESOH/6-235 TLSEYCHDYLDVDTF..D.DY.CPN.............................GL...QI.............EGR........................QQIRKIIAGVSVNQDLIERVID......EK.ADALFVHHG...L.FW...............QNESLVITGI......KKNRIKILLE.K...........NINLFAYHLPLDAHLIVGNNIQLA.MHL.....NIV.........NPTPI.......................................................................................................................GDTLVWQ.GEVK.......LSLIE....VSQLV............QDITQRIPLVFG.........DLNQQIK.....KIA..WCTGDAQ.S.YIK..HAINIGA..D..CFITGEI...........SEQTPAIA..KEN.....N......IA..FISAGHYATERYGVQA.....LCQHLSEK.FN.......................V Q21U81_RHOFD/6-241 QLLQAFDALLQPERF..R.DY.GPN.............................GL...QV.............EGT........................DTVRKIVSGVTASRALIEAAIA......AQ.ADTIFVHHG...L.FW...............RAQDGRITGW......LKARLALLLA.A...........DINLFAYHLPLDAHAELGNNAQLG.LKL.....GLR.........ALTRFG......................................................................................................................EQELGFL.GEPMASAS..FASAET....LAQHI............EYVLNRPVALVG.........PAHSAIK.....KVA..WCSGGGQ.N.YFE..AAIAAGA..D..AFITGEI...........SEPQAHLA..REC.....G......VA..YLACGHHASERYGAPA.....VAAQVAAQ.FG.......................L A6GMA8_9BURK/8-242 VLEHDLRELLDQARM..S.DY.CPN.............................GL...QL.............EGK........................PRIQRLLTGVTASRALIELAAE......LN.ADAILVHHG...L.MW...............KGDPQVVTGF......RKERLQLALA.H...........DLNVFAYHLPLDKHPELGNNAQLG.NML.....GWP.........STRVVG......................................................................................................................DKGLVHL.GVLPT.P....QPLSA....LVRQV............SDVLGHHVQVEG.......NSDPERSVA.....TVA..WCTGGAP.G.YVE..EAALQGA..D..LYLTGEL...........SEPAVHVA..REC.....N......VS..LLGAGHHATERCGVKA.....LGEWIAQR.YG.......................I A0L3K9_MAGSM/6-241 EIETHLRNILQCDRI..D.DY.CPN.............................GV...QV.............RGG........................HNITRVVSGVTACMALFEAAVA......VN.AQLIITHHG...L.FW...............NKDPRVVEGM......LKHRLKLLLE.H...........DITLMGFHLPLDMHPELGNNAQIL.NRL.....QLI.........AGEPFGVYK...................................................................................................................GSALSKM.GHWEQ.S....LSLDQ....VQQKL............QKLFGGEPLVLP.........YGPPNIR.....KVA..VCSGGAP.E.LIH..EAVTAGA..D..LFLTGEA...........SEPVYHVA..REM.....G......IH..FVAAGHHRTEMFGVQA.....VGERLAQT.FS.......................L A3YBU9_9GAMM/11-248 AFEKKLTAILKPNKF..K.DY.APN.............................GL...QV.............QGC........................DEIAKVVTGVTACQALIDEAIR......LN.ADAIFVHHG...Y.FW...............KGESQVITGI......KYQRISRLIK.N...........DINLYAYHLPLDAHPELGNNAQLV.KMF.....NLK.........NPRSLQSYLPL.................................................................................................................DESIGVI.AEFEQ.A....LEIEQ....VKERI............EKALGRDVLFEA.........SGKKLIK.....TVA..LCSGGAQ.G.YIE..QAVEMDA..D..LYLTGEV...........SEQTIHLA..REH.....G......IH..FVAAGHHATERYGAKA.....MAKFIMEE.LG.......................V Q6MC02_PARUW/7-241 NLKELLTQIFPEEGL..I.DY.CPN.............................GL...QV.............EGK........................SEIKILATAVSASLNTIQMAIE......KN.VDALIVHHG...I.FW...............QRDSYVIEGT......KREKLFTLLK.S...........GVSLFAYHLPLDKHLILGNNWKAA.HDL.....GWE.........KLEPFAFMN...................................................................................................................GIPIGVK.GKIKP......TKREI....VKANL............ERYYQHSANCAL.........GGPELIQ.....TLA..LVSGGAH.K.SIL..DAGRDRV..D..AFITGSF...........DEPTWHQA..FEE.....K......IN..FYALGHSATERVGPQA.....LAKYLEEQ.LK.......................T Y108_CHLTR/5-240 DLLNILNELLHPEYF..S.DY.GPN.............................GL...QVG............NAQ........................TAIRKVAVAVTADLATIEKAIA......CE.ANVLLVHHG...I.FW...............KGMPYSITGI......LYQRMQRLME.G...........NIQLIAYHLPLDAHTTIGNNWKVA.RDL.....GWE.........QLESFGSS....................................................................................................................QPSLGVK.GVFPE......MEVHD....FISQL............SAYYQTPVLAKA........LGGKKRVS.....SAA..LISGGAY.R.EIS..EAKNQQV..D..CFITGNF...........DEPAWSLA..HEL.....A......IH..FLAFGHTATEKVGPKA.....LAQYLKGA.GL.......................E Q609U6_METCA/7-244 ALERFLAGLLNPGAF..A.DY.GPN.............................GL...QV.............EGR........................EEIRRIAFAVSATAHSIAAAAE......WQ.ADALIVHHG...L.FWK..............FHGARPLVGP......FARRVFPLVR.Q...........AINLFAYHLPLDAHPEIGNAAVLG.HRI.....GLG.........EQAPFGDHQ...................................................................................................................GCPTGVR.GRLRE.S....LPASA....LRERL............AEILEHPVLLAT........PDATAPVC.....TIG..IITGGAN.G.GWA..EAAKAGL..D..AYITGEM...........SEHDWHEA..QEA.....G......IH..MYAGGHNATERFGIQA.....LMERIGRD.LE.......................V A9VML6_BACWK/5-238 QFKEHITSLFEEHLN..KYGD.DEY.............................GF...TH...........ISKE..........................EFHKIGYTTNLTLETIEEAYQ......NG.VDMIVTHHA........................PWSFLFGM......EEACIEKLKE.Y...........EMNHFWIHLPLDFVKF.GTCTSLF.NEI.....GID.........TILEYSTYE...................................................................................................................EEELPGI.GEYKE.A....IPFSNLVEKLEERM..E.........EK......VKSW.......K.NHDRPVK.....RIA..ILTGAGNNTNLIE..RALEKGC..D..TYITGEK...........TLYTVQHA..KFK.....R......IN..LIVGSHTFTEVFGVES.....LARKLKER.DRA......................I A6TKN7_ALKMQ/5-263 EIMDIALELAGLNEI....PA.DS..............................GI...IVE............GE..........................HIKKVAIGVDMELAEMLLARD......LG.VDLVITHHPSGGS.PRINLHKVMDNQIDSMIRAGVPINKAQKALKEKKDEIERGLHVSNYDRAVSAAKLLKMPFMGIHTPTDILAERKVQGLLD.EKL.....................................................................................................................................................KEQPK......ATLQDIIKALETLP.EY.........QRTMAKPAVRVG.........AKDDYAG.....KTFVTMAGGTGGGKNVIK..AYFEAGV..G..TLVAMHM...........PEDVIKSV..REQ.....N......IG.NVVVAGHMASDSVGINE.....FAKALEEKG.........................I A4J511_DESRM/5-303 EIYDLVIKMGIEH.........DPR.............................GLEVVQKQLTKEKKKIEDLKEDEKKEVDQDRLFNPYTDTRVLYGELNREVKRILVGVDMEVAEVLLADRLE..EKGKKIDLIMAHHPEGKA.MAGLYDVMH.LQEDLLAQLGVPINVAEGIMAGRIAEVRRGLMPVNHNRAVDAARLLDIPLMCCHTPADNMVT....EYVQ.KKI.....................................................................................................................................................AENNC......ETLGDIVKVLKQIP.EYAAAVKTGAGPT......IVVG.........SKDRSAG.....KVFVDMTGGTSGSEDAYA..KLSTAGV..G..TLVVMHI...........SEKHRKEA..EKN.....H......VN..VIIAGHMASDSLGMNL.....ILDDLEKQG.........................V Q3Z2K6_SHISS/9-274 DLNCFLNSMVAVSQP....TV.DKII...........................FGA...EAT........................................LINKIGTCWIASMDVLRKAVF......EG.VNIIITHEP...T.FYSYADLEGDDLEFSWARKIMDYTRGELSYLKIIEQKKEFLHK.N...........NLVIIRCHDVMDREPTFGMSKALA.QQL.....ELD.........VTNIVA......................................................................................................................SDEMYCV.YAIDP......DSAINITKRFAKNL.............KIYNLPGIQFY........GDKARVVR.....TVG..IGAG.....CFCDPIQYMEYQA..DYYITINDSI..........KTWVQTQYS..KDS.....G......LP..MAVIGHSVAEEAGMRR.....LASYLDLHSGYPCIH...............FTGGC Q022B6_SOLUE/14-253 QVVERIQKNAGVPWQ..PESL.DTF..................................KAG..........DPAT..........................PVTGIATTGMATMDVLNRASK......AR.TNLVLTLEP...T.FF................GRLDPQAAN....DPVYAAKQEFIRKN...........ALVVWRFTDHWRARKPDPFPTGLA.AVL.....GST.....................................................................................................................................KYQVADDVFRYDVPP....ITLTVLAGDLAKRLKAR.........AG......IRVI........GDPQSRVR.....RIA..LLPGLST........LAAAMKALPECDLLLAGETREWE...SVEYVHDTVASG..QKK.....G..........MIMLGRVMSEDPGMNA.....CAGWLKTL.VPE......................V A4IP70_GEOTN/7-250 TVMERLTACVETRSP....TV.DTL.............................KYGDSSM.........................................EVKGIAVSFMPTYRVIEQAVQ......AG.ANLLISHEG...L.FYS.............HAGDAETMKND....PVYQEKVRLICE.S...........GIAIYRFHDQWHRYQPDGIMVGLV.RAL.....GWE....................SY............................................................................................................VSEYQSAATI.VTIPR......ILARDMVKYVKERL..............GI..SFIRVA........GDLSTICT.....RIG..LLAGYRGHGSLTI.PLFEKEKL..D..AIIYGEGPE.......WETPEYVRDA..VHQ.....G......KRKVLVVLGHAESEEPGMRY.....LAQKLREM.FPT......................I Y1125_STAEQ/5-353 ELMEVLNNHVPFHQA..E.SW.DNV.............................GL...LIG..........NDKL..........................DITGILTTLDCTDDVVNQAIE......LN.TNTIIAHHP...L.IF................KGVKRIVED....GY.GSIIRKLIQ.N...........NINLIALHTNLDVNPK.GVNRMLA.DQI.....GLE.........NISMINT.NSSYYYKVQTFIPKNYIEDFKDSLNELGLAKEGNYEYCFFESEGKGQFKPVGDAS........PYIGKLDSIEYVDEIKLEFMIKDNELEITKRAILDNHPYETPVFDFIKMNKESEYGLGII.GQLNQ.T....MTLDEFSEYAKKQL.NI.........PS......VRYT.......G.QHDSPIK.....KVA..IIGGSGI..GFEY..KASQLGA..D..VFVTGDI...........KHHDALDA..KIQ.....N......VN..LLDINHY.SEYVMKEG.....LKELLEKW.LFKYEN................QFPI A5KQA2_9FIRM/5-253 EIIQVIEASYPKEAA..L.DF.DNV.............................GL...LAG..........RLEK..........................EVSKVYLALDATEEVIDKAIA......LG.TDMLITHHP...L.IF................SPMKRVTDE....DFIGRRVVKLLQ.N...........DISYYAMHTNYDVL...GMAKLAE.DIL.....GIE.........KTYVLDVTMEKD..............................................................................................................GAEEGIGRI.GMLER.E....MTLEECCLYVKHKL.KL.........GS......VKVY.......G.DMKKNVH.....CLA..VSPGAGK..SAIM..PAIKKGA..D..VLVTGDI...........GHHDGIDA..VEQ.....G......LA..VIDAGHYGTEYIFIDD.....MKCFLHEK.LPVLDV...............MSIPI Q8RE15_FUSNN/5-246 DIINILEKKFPKINA..E.EW.DNI.............................GL...LIG..........DYDK..........................EVKKIQFSLDATLESIENAIS......EK.VDMLITHHP...I.IF................KAIKDITEQ....NILGKKIRNLIK.N...........DINVYSIHTNLDSSIE.GLNDYVL.KKI.....GIS.........EYKILDFDEEK.................................................................................................................NCGIGRI.FKLNE.E....KNLKKFIEELKLKL.KI.........LN......LRVI.......SNDLNKKIK.....KVA..LINGSAM..NYWK..KAKKEKV..D..LFITGDV...........SYHDALDA..LEN.....G......LS..VIDFGHYESEYFFYEI.....LIEELKDN....N...................LEF A0Q1P0_CLONN/7-258 DFKNIVEEFAPVKLK..L.SY.DNV.............................GL...MVG..........ELNN..........................EIGNILVTLDCTLDVIEEAKA......KN.CNFIFAHHP...L.LY................KKPSSITSE....TLVGRKILELIK.N...........NISLYSAHTNLDSVKD.GINDTVM.KLL.....KIK.........NCKTIEFSEGKDE............................................................................................................DDDVSGLGRV.GTLES.P....ITVKEMCNRVKEVL.NT.........PF......VRYI.......G.EDSKEIK.....TIA..VINGSGQ..DYFN..RARNMGA..E..CIITGDT...........TYHVISDY..NED.....G......VV..VIDGGHFPTEWIAFKD.....ICVRLQEK.IKEAGF................ENKI Q0TNV6_CLOP1/5-249 DIINIIEDIAPVNLK..E.GF.DNV.............................GL...MVG..........DREK..........................NITKILLALDCTEEVIKEAKE......MG.AELILTHHP...L.LF................RKPSTITTD....TLLGRKIISLIK.D...........DINLYSAHTNWDSVKG.GLNDTLV.EIL.....GFN.........KGIIMDKSPVD................................................................................................................SEAGIGRV.VELTK.E....MTVLEIINLIKSSL.GI.........KN......LRYA.......G.DLNEVIK.....KIA..IVNGSGQ..DFFG..DAKKLGA..D..LIITGDT...........TYHFVSDY..KEM.....G......LN..ILDIGHFNSEWPVLIK.....VSEKVKER.LDSD...................VEF B8CXH0_HALOH/6-355 NIVGVMNEIAPRFLA..M.DW.DNP.............................GL...QIG..........YFSQ..........................EINRVLVTLDVTEEVVEEAIE......EN.CQLIISHHP...L.LF................KGLKSIHDK....SYNGRVVLKAIK.N...........NIAVLSAHTNFDIVGS.GINDYLS.HLL.....GLS.........DIQPLKVTGEKPYIKLVVFIPESHFDVVRKEILDSGLAGFIGNYSHTSFSVKGEGTFKPLEGSN......PFTGQKGHLARVEELRLETIIPANNISKVIDIIKKVHPYEEVAYDLYPLNNTGEKYGLGRI.GLLEK.G....IKLVDFVDIVKEKL.GI.........RH......IRYT.......G.NYDNIVK.....RIA..VCSGSGG..DLIR..EARNKRA..D..LYITGDI...........KYHDAQLA..SEL.....G......LA..VVDAGHYGTEKHVKSL.....LVGLLTDK.FKEN....................GF Y1073_LACLA/5-244 DFMLEYEKFCPKELA..V.EG.DPV.............................GL...QVG..........NPND..........................ELTKVLVTLDIREQTVAEAKA......LG.VNLIIAKHP...L.IF................RPLSALTSM....NDQEKLVLDLAR.A...........GIAVYTSHTNIDVVTG.GLNDYFS.QLL.....GMT.........DIEVLDD.....................................................................................................................EEGLGRV.GNIEL......TELSVLTEKVKASF.GL.........DR......LRLIT.....YDHNLTQKIG.....RIA..ICGGSGG..KLWP..KALEKKA..D..IYITGDI...........YYHVGHDM..LSA.....G......LL..GIDPGHY.IEHAFIRL.....VADKLRSFDMGV.....................KI A5LFS5_STRPN/5-252 EVIQAYEAFCPQEFS..M.EG.DSR.............................GL...QIG..........TLDK..........................GIQRVMVALDIREETVAEAIE......KG.VDLIIVKHA...P.IF................RPIKDLLAS....RPQNQIYIDLIK.H...........DIAVYVSHTNIDIVEN.GLNDWFC.QML.....GIE.........ETTYLQE....T..............................................................................................................GPERGIGRI.GNI.Q.P....QTFWELAQQVKQVF.DL.........DS......LRMVHY...QEN.DLQKPIS.....RVA..ICGGSGQ..SFYK..DALAKGA..D..VYITGDI...........YYHTAQDM..LSD.....G......LL..ALDPGHY.IEVLFVEK.....IAALLTQW.KEKKGW................ELEI Q4ETV8_LISMO/8-360 EYTAIMEKIAPKKLA..M.EG.DPI.............................GL...QVG..........DLSR..........................KVRKIMFTLDVLEEVVDEAIE......KK.VDLIIAHHP...F.LY................RPTQHIDTT....TKQGKMIKKLIK.H...........DITVFAAHTNLDIAQG.GVNDILA.DLL.....HLQ.........NTTMIEETYSEPYCKIAVYVPENELESVRLALVNNGAGQIGTEYTECTFHTTGIGSFKPGANAN......PTIGEKDALTSVPEFKIEAIFPQYLTETITKAVKIAHPYEEPAIDVYTLEMQTYKEGLGRV.GMLPK.K....LGMVSFIDKLKTAF.AI.........DN......VRFI.......G.DLKTTVH.....KVA..IIGGDGN..KFIH..QAKSTGA..D..VFITGDV...........YYHTGHDL..LAI.....N......LP..TIDAGH.NIEKVMKGY.....LKNKMEEQ.AKILDY................EAEF Q038U7_LACC3/6-251 QIINRFEDFAPLSLA..W.ER.DPS.............................GL...QLG..........NPDK..........................PVKTVLVTLDVRPEVVTEAEA......IH.ADMIFSHHP...A.MF................RPVHNLDLR....VPQNAMYAQILK.D...........DLLVYAAHTNLDRVQD.GMNDWLA.EAL.....GLS.........QVVPFINEGE..................................................................................................................GANMGRI.GLLPD.K....IRLDAFVEQVKAAY.NV.........KG......LRVV.......ARDLDRLVQ.....KVA..ILGGDGG..DAFN..DAKQAGA..D..VFITGDV...........YYHTGHDM..LAA.....D......LP..VIDPGHH.IESIMKGK.....VATLINEW..ADAEG...............WDVKA B3XRX7_LACRE/6-257 QLIVRFEKFANPQLA..E.KW.DHV.............................GL...QIG..........NPDL..........................QITRLMTTLDVRPEVVDEAIE......QN.VDFIFAHHP...I.MF................HPAKDLDTR....DPQNAMYAKLLA.N...........NITVYAAHTNLDAANG.GMNDWLA.DQL.....HLT.........NTVPLVPAGNDPI............................................................................................................SGEPVGMGRI.GELAE.P....LTPQKFAKYCMDVF.GI.........RG......LRLIV....NPL.DQEREIK.....RVA..VLGGAGQ..DFYQ..QALEAGA..D..AYVTGDV...........SYHFAHDM..IAN.....H......LV..VIDSGHH.IEVVAAHQ.....LANLITQW.KNENN..................WQF Q5FJU7_LACAC/6-251 DIVERLRKDFPEDIA..S.QG.DPV.............................GM...QIG..........SMES..........................DVTNVMTTLDVRPQVVEEAVE......KG.VNLIISHHP...V.MF................RPAKNLDYA....NPQNAMYGNIIK.N...........NITVYSIHTNSDKAQN.GSADWQA.EEL.....GLK.........DIEPFCLDDD..................................................................................................................GIAMGRK.GKLPK.T....MSAYDFAFYVKDKM.DI.........KM......ARLI.......TASNEKPIT.....TVG..FICGDGG..KYWT..RALDDNL..D..AFITGDV...........YYHVGHDM..ISS.....G......LT..VVDPGHY.TENLFKYK.....VFDRLKKW..NKENN...............WNVGV Q03Y42_LEUMM/5-248 ELIDKIELFAPKQLA..E.EG.DPT.............................GL...QIG..........DPKQ..........................PVHRVMTALDVRPEVVQEAID......NQ.VNFIWAHHE...V.MF................FPAKNLDLS....QPQNRMYADLIQ.H...........HIVVYASHTNMDSAQG.GMNDWLA.EAL.....GIQ.........DVVPLVPNVDK.................................................................................................................KTGLGRI.GQLEQ.P....ISVQEYAVKIRDLF.HV.........QA......VRVI.......AKDVTKPIQ.....KIA..VLGGDGG..RWWR..VAQQAGA..D..AYVTADV...........YYHVGHDI..LAS.....N......FI..VIDPDHH.MEAIANEK.....MVDKVKEWFGDTV....................DV A8MG99_ALKOO/7-357 EIINIIENLAPLRYA..Y.QW.DNV.............................GL...QIG..........SRSD..........................EVQRILIALEVTDEVLEEAVK......NN.VDMIISHHP...L.IF................SPLKKIIKE....DLKGKLLYKAIR.N...........NISVYSTHTNMDIAPN.GLNDYVA.NLL.....GLK.........DMEVLDVTEKSTYYKLAVFTPVGHEEKVAEAICSAGAGHIGNYSNCTFRVNGTGTFLPLEGTNP.......FIGAQGQGEKVEEIKIETIVPQGNLKSVVKAMLKVHPYEEVAYDIYPLENEGPVLGIGRM.GYLPH.A....VSIADLANKIKDIF.NI.........EH......IKIA.......G.DLKAHIN.....KVA..IINGSGA..EYIK..LAMHRGC..Q..CVITGDV...........KYHDAQDA..ISQ.....G......MN..VIDMGHYHSEKVFPKL.....LIDYLSKK.VEEKD..................LNV A4XK84_CALS8/6-353 EIATFLENYFPKKLS..Y.DW.DNV.............................GL...QVG..........SFSA..........................KVDSILICVDVTEDVLNEAKD......LG.VRLVISHHP...L.IF................QGLKSIKDD....TPEGRLIIDTIK.N...........DIAILSFHTNADVSKH.GINFYLA.KLL.....NLE.........NIEGLSVKQKNGYFKIVVYVPSDYKDEVLEAMAQEGAGFVGKYSHCFFAVEGQGCFKPQEGANP.......FVGKIGELERVDEVRLESIVPEEKLKNVIKAMLKAHPYEEVAYDIYRLENDISYECIGVI.GQ..R.S....IEAENLIKELKEKL.NL.........SF......VKAS.........LVKNQFK.....KIA..IVSGSGK..DFIK..DVYFKGA..D..CFISGEI...........GHHGILLA..RSL.....G......LS..TIEIGHYESEKVFIDI.....VFELFDKF.DKKDK..................LKI B0K888_THEP3/7-356 VIASIMDKLAPRKFA..E.EW.DNV.............................GL...LVG..........DGSK..........................DVSKILVALDATFEVVKEAID......KK.VDMIVTHHP...L.IF................KPIKNVKAD....NPVGSLLIQLIK.N...........DISLYAAHTSFDIAPN.GMNDILC.NVL.....GIY.........DREVLDVTYSEGYKKIAVYVPQGYEEIVKNAMCNAGAGFIGNYSNSTFQTQGIGTYKPLEGTNP.......FIGEIGKIEKVEEVKIETVVPQKYLEKVINAMLNVHPYEEVAYDVYPLENLKEEYGLGRI.GTISE......TTLKELALQVKAKL.KI.........NN......LRVV.......G.DPNKKIK.....KVA..VCGGSGA..SLIH..KAVSRGA..D..VLITADI...........GYHDAVEA..QHL.....G......LS..LIDAGHFATENIAVRF.....IAEYIIDE.TQKQG..................NEI Q18BX9_CLOD6/5-352 SLTRKIEKKYPLNLA..E.DW.DNV.............................GL...IVG..........DFDM..........................DVKKVLVSLEANEDVIDEAIS......KN.IDLIVTHHP...F.IF................GKINKINSG....DLKGRLIQKLIK.N...........DISLYSMHTNFDIAFD.GLNDYFM.EIM.....EFG.........NSKVLDITKSENLYKLAVYVPHNYSDELRKVLSNSGAGHIGNYSDCTFSIEGEGQFKPLEGSNP.......FLGSVNDIETVNEVKIETVVPQKLLGGVISSMLDAHPYEEVAYDLYKLENKGEIFGLGRI.SKLDK.S....MTLESLSRKIKEKL.NM.........KH......IRVV.......G.NLSTDIT.....KVA..VVTGAGS..EFVK..KAKRQGA..E..VLITGDV...........KYHEAQDA..LDI.....G......MC..IVDCGHFDTEDIFKNV.....MKRFLDEF....SE..................IEV A0RIR2_BACAH/9-360 EIISLFESMYPKHLA..M.EG.DKI.............................GL...QIG..........ALNK..........................PVQHVLIALDVTEEVVDEAIQ......LG.ANVIIAHHP...L.IF................NPLKAIHTD....KAYGKIIEKCIK.N...........DIAIYAAHTNVDVAKG.GVNDLLA.EAL.....GLQ.........NTEVLAPTYAEEMKKIVVFVPETHAEEVRKALGDAGAGHIGNYSHCTFSSEGTGTFIPQEGTNP.......YIGETGQLERVEEVRIETIIPASLQRKVIKAIVTAHPYEEVAYDVYPLDNKGETLGLGKI.GYLQE.E....MTLGQFAEHVKKSL.DV.........KG......ARVV.......G.KLDDKVR.....KVA..VLGGDGN..KYIN..QAKFKGA..D..VYVTGDM...........YYHVAHDA..MML.....G......LN..IVDPGH.NVEKVMKQG.....VQKQLQEK.VDAKKL................NVNI A4J7B6_DESRM/6-358 EIVSMLEQIAPRHLA..E.EW.DNS.............................GW...QVG..........DPAA..........................GVSKVLLTLDVDAVVVREAVE......KQ.VNLIISHHP...L.LM................KGIKNIRLD....EPKGELIAQLIK.N...........NIGLYAAHTNLDSAAG.GVNEQLA.KRL.....GLQ.........NIEVLHPAKGEKHLKLVVFVPVQQVEGVQRAISQAGAGWIGNYSDCTFSVQGEGTFRPLEGTNP.......FIGQQGQLEQVAESRLETIVPASKIKTVLKAMLEAHPYEEVAYDLYPLENQTSNAGLGRI.GHLAE.T....QSFADFIIAVKEAL.GL.........AS......VKVG.......G.SMWKDVR.....RIA..VCGGSGA..ELWP..IAFAKGA..D..VYITGDI...........KYHTAQDM..LAS.....G......LN..FIDAGHFATEHVILPE.....LQRILSEA.CVKKNL................VVEF Q0AZ81_SYNWW/7-359 DIIGIMEEHFPPWLA..E.AW.DNS.............................GL...QLG..........STNK..........................AVKKAAVALDLDESILNQALE......LK.VAMIITHHP...L.FF................KPLKQINYE....SPVGRLIQRIVK.A...........GISVYAAHSNLDAAEK.GLNQILA.ELL.....GLQ.........DIDILGNHKKEELYKLVVFVPASHYEEVRRAINAAGAGFIGNYSDCSFRVRGTGTFRPGAGTQP.......FLGQEGELEEADEFRLETVVRKRELAQVMQAMQEAHPYEEVAFDIFRLEQAGKGYSMGRY.GFLPE.E....TKLGDYARQVKETL.GL.........EA......VRVV.......G.DLNKVIR.....KVA..IVSGSGA..SLIP..GISQQGV..D..LLVTGDL...........KYHEARDA..EAL.....G......LA..IIDAGHQGTEEIISPH.....LSRFLEKE.CQKRGM................KVDF Q3AEW6_CARHZ/6-353 EIAAVIEEKFPRKLA..M.EW.DNP.............................GW...QI...........YFEK..........................EVHKVLLALDITAATVDFALN......EK.VDLIITHHP...L.FF................KPLKSLTFE....RKETLPLLKLLE.K...........QISVYAIHTNLDVAFG.GINDYLA.ELL.....ELQ.........EVKPLGEEIFEKLYKLSVFVPESHWETVREAMGAAGAGFIGNYSHCTFNTRGIGTFLPLEGTNP.......YIGAVGKLERVEEVKIETIVPERLLAKVVKAMLKVHPYEEVAYDIYPLENKNYLGGMGRI.G.LTG.K....KSFKEFLALVAEKL.GI.........EN......LRYG.......G.DLNSVPK.....KVA..VVTGAGG..SYWP..KAKFAGA..D..IFLSGDI...........KYHEAVSM..IEA.....G......LN..FIDAGHWETERIFTEL.....LLPLLR....KIEGL................SIVV B8I6N4_CLOCE/5-249 DIINFLNEIAPWRYA..E.EW.DSV.............................GL...MVG..........SRES..........................YVTKILLCMDVTSDVISEAAQ......CG.AQMILSHHP...F.IF................SKLKSIDME....TFKGEQIANLIK.N...........NISVVSAHTNLDTAPG.GVNDTLA.ESL.....HLT.........NSRNLKPYMPKGL.............................................................................................................ECDLGMGKV.GELQN.S....KSFDEFVIDVKKSL.CI.........EN......LRII.......G.VKPKKVK.....KVA..VFCGSFD..DDLE..SLKSLKV..D..VLVTGDI...........KYHIALDA..AQM.....G......LC..IVDAGHFATERIILPK.....LRDTLNKR.FKE......................L A3DDU7_CLOTH/7-355 DIIKYMEELAPVSLA..E.DY.DNV.............................GL...LIG..........SRES..........................TVERIFVCLDVTSKTVDEAVA......KK.ADLIVSHHP...V.IF................KGLKRINED....DPKGNIIYKLIR.N...........NIGVYSAHTNLDVAHG.GVNNYLS.SIL.....GLK.........DIISLKDYKAEKLYKVVVFVPHESVDAVRDAMSRAGAGWIGNYSDCSFMTAGTGTFRPLEGTNP.......YIGTTGNLEKVDEYRIETVVSQRNLKKVIEAMIKVHPYEEVAYDVYPLEIKGRQYGMGNV.GVLDK.P....KSLDEFIAVVKEKL.GV.........KN......VRVI.......G.ETNKEIE.....KVA..VFCGSFD..RDVM..EAAKSKA..D..VLVTGDV...........KYHDAVDM..LEI.....G......MC..VIDAGHFNTERIIADR.....LAQLI.....KENFP................EVEV #=GC seq_cons clhphlcphhPhphu..p.sa.Dss.............................GL....ls............pp..........................plp+lhlslDso.pllccAlp......ts.sshllsHHP...l.ha................pshcplssp......htphlhpLlc.s...........sIslauhHTshDss.s.GhNshLA.chL.....slp.........shpsht......................................................................................................................thuhGhl.Gplsp.s....hohpphhthlpppl.th.........tt......lphs.........shspplp.....+VA..lsuGuGs..phlt..pAhptss..D..lalTG-l...........paHsshpA..ppt.....G......ls..llssGHatoEphhhpt.....ltchLppp.ht.......................l // hmmer-3.1b2/easel/demotic/examples/example.ncbi-blastp.out0000664361611702660230000004216312473612605023213 0ustar wheelerteddyBLASTP 2.2.22 [Sep-27-2009] Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), "Gapped BLAST and PSI-BLAST: a new generation of protein database search programs", Nucleic Acids Res. 25:3389-3402. Reference for compositional score matrix adjustment: Altschul, Stephen F., John C. Wootton, E. Michael Gertz, Richa Agarwala, Aleksandr Morgulis, Alejandro A. Schaffer, and Yi-Kuo Yu (2005) "Protein database searches using compositionally adjusted substitution matrices", FEBS J. 272:5101-5109. Query= sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp. (strain NGR234) GN=NGR_a00980 PE=4 SV=1 (181 letters) Database: uniprot_sprot.fasta 516,081 sequences; 181,677,051 total letters Searching..................................................done Score E Sequences producing significant alignments: (bits) Value sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium s... 325 1e-88 sp|B2VCH7|MTLD_ERWT9 Mannitol-1-phosphate 5-dehydrogenase OS=Erw... 31 3.8 sp|Q9CZP0|UFSP1_MOUSE Ufm1-specific protease 1 OS=Mus musculus G... 30 7.3 >sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp. (strain NGR234) GN=NGR_a00980 PE=4 SV=1 Length = 181 Score = 325 bits (832), Expect = 1e-88, Method: Compositional matrix adjust. Identities = 163/181 (90%), Positives = 163/181 (90%) Query: 1 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT 60 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT Sbjct: 1 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT 60 Query: 61 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF 120 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF Sbjct: 61 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF 120 Query: 121 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSXXXXXXXXXXXXXXXXXXSRP 180 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERS SRP Sbjct: 121 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP 180 Query: 181 N 181 N Sbjct: 181 N 181 >sp|B2VCH7|MTLD_ERWT9 Mannitol-1-phosphate 5-dehydrogenase OS=Erwinia tasmaniensis (strain DSM 17950 / Et1/99) GN=mtlD PE=3 SV=1 Length = 382 Score = 31.2 bits (69), Expect = 3.8, Method: Compositional matrix adjust. Identities = 17/52 (32%), Positives = 32/52 (61%), Gaps = 6/52 (11%) Query: 42 GKMAEIDAILITDVNGIGTTADDQLAFVSLIADQGETTTVAFGPEIGSRIAA 93 G+ A+I+ ++ VN + +++DD +A ++ + + T A GP+I RIAA Sbjct: 52 GEQAQIE--IVNGVNAVHSSSDDIIALIAEV----DIVTTAVGPQILERIAA 97 >sp|Q9CZP0|UFSP1_MOUSE Ufm1-specific protease 1 OS=Mus musculus GN=Ufsp1 PE=1 SV=1 Length = 217 Score = 30.0 bits (66), Expect = 7.3, Method: Compositional matrix adjust. Identities = 15/44 (34%), Positives = 22/44 (50%) Query: 111 GKEERKFKPFAAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFI 154 G+EER + F G V G AD + +L I G+EV+ + Sbjct: 129 GEEERLYSHFTTGGGPVMVGGDADAQSKALLGICEGPGSEVYVL 172 BLASTP 2.2.22 [Sep-27-2009] Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), "Gapped BLAST and PSI-BLAST: a new generation of protein database search programs", Nucleic Acids Res. 25:3389-3402. Reference for compositional score matrix adjustment: Altschul, Stephen F., John C. Wootton, E. Michael Gertz, Richa Agarwala, Aleksandr Morgulis, Alejandro A. Schaffer, and Yi-Kuo Yu (2005) "Protein database searches using compositionally adjusted substitution matrices", FEBS J. 272:5101-5109. Query= sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus oryzae GN=hacA PE=2 SV=1 (345 letters) Database: uniprot_sprot.fasta 516,081 sequences; 181,677,051 total letters Searching..................................................done Score E Sequences producing significant alignments: (bits) Value sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergill... 602 e-171 sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS=Emericell... 416 e-115 sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS=Trichoder... 84 2e-15 sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS=Saccharom... 58 1e-07 sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabidopsis thal... 41 0.010 sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanum lycopers... 38 0.12 sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-binding prot... 34 1.5 sp|A1URL3|PYRD_BARBK Dihydroorotate dehydrogenase OS=Bartonella ... 34 1.6 sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-binding prot... 34 1.9 sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-binding prot... 33 2.1 sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-binding protei... 33 2.6 sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-binding prot... 33 2.9 sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=Arabidopsis... 32 5.7 sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos taurus GN=XB... 32 5.8 sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-binding protei... 32 9.0 sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-binding prot... 32 9.3 >sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus oryzae GN=hacA PE=2 SV=1 Length = 345 Score = 602 bits (1552), Expect = e-171, Method: Compositional matrix adjust. Identities = 303/345 (87%), Positives = 303/345 (87%) Query: 1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVXXXXXXXXXXXXSWG 60 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV SWG Sbjct: 1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG 60 Query: 61 QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQ 120 QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS IQMEQ Sbjct: 61 QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ 120 Query: 121 QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMXXXXXXXXXXXXXXXFKQERD 180 QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM FKQERD Sbjct: 121 QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD 180 Query: 181 ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK 240 ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK Sbjct: 181 ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK 240 Query: 241 HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS 300 HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS Sbjct: 241 HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS 300 Query: 301 EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 345 EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC Sbjct: 301 EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 345 >sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS=Emericella nidulans GN=hacA PE=2 SV=2 Length = 350 Score = 416 bits (1069), Expect = e-115, Method: Compositional matrix adjust. Identities = 225/332 (67%), Positives = 254/332 (76%), Gaps = 1/332 (0%) Query: 13 DSLPATPASEVPVLTVSPADTSLNSADVKTQEVXXXXXXXXXXXXSWGQELPVPKTNLPP 72 +SLP TP+ EVPVLTVSPADTSL + +V Q SWGQELPVPKTNLPP Sbjct: 18 NSLPTTPSLEVPVLTVSPADTSLQTKNVVAQ-TKPEEKKPAKKRKSWGQELPVPKTNLPP 76 Query: 73 RKRAKTEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQRLSQM 132 RKRAKTEDEKEQRRIERVLRNRAAAQTS I MEQQNQFLLQRL+QM Sbjct: 77 RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLESEKIDMEQQNQFLLQRLAQM 136 Query: 133 EAENNRLSQQLAQLAAEVRGSRANTPMXXXXXXXXXXXXXXXFKQERDELPLERIPFPTP 192 EAENNRLSQQ+AQL+AEVRGSR +TP FKQE DE+PL+RIPFPTP Sbjct: 137 EAENNRLSQQVAQLSAEVRGSRHSTPTSSSPASVSPTLTPTLFKQEGDEVPLDRIPFPTP 196 Query: 193 SLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLS 252 S++DYSPTLKPS+LAES D+ QHPAVSV GLEGD SAL LFDLG+ +KH T D+ APLS Sbjct: 197 SVTDYSPTLKPSSLAESPDLTQHPAVSVGGLEGDESALTLFDLGASIKHEPTHDLTAPLS 256 Query: 253 DDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAH 312 DDDF RLF+GDSS+E DSS+ EDG AFDVL+ GDLSAFPFDSMV+FD+EPVTLE +E + Sbjct: 257 DDDFRRLFNGDSSLESDSSLLEDGFAFDVLDSGDLSAFPFDSMVDFDTEPVTLEDLEQTN 316 Query: 313 GLPDETTCKTSSVQPGFGASTTRCDGQGIAAG 344 GL D +CK +S+QP GAST+RCDGQGIAAG Sbjct: 317 GLSDSASCKAASLQPSHGASTSRCDGQGIAAG 348 >sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS=Trichoderma reesei GN=hac1 PE=2 SV=1 Length = 451 Score = 84.0 bits (206), Expect = 2e-15, Method: Compositional matrix adjust. Identities = 38/43 (88%), Positives = 40/43 (93%) Query: 58 SWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100 SWGQ LP PKTNLPPRKRAKTEDEKEQRR+ERVLRNR AAQ+S Sbjct: 93 SWGQVLPEPKTNLPPRKRAKTEDEKEQRRVERVLRNRRAAQSS 135 >sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS=Saccharomyces cerevisiae GN=HAC1 PE=1 SV=2 Length = 238 Score = 58.2 bits (139), Expect = 1e-07, Method: Compositional matrix adjust. Identities = 28/41 (68%), Positives = 33/41 (80%), Gaps = 3/41 (7%) Query: 63 LPVP---KTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS 100 L +P K+ LPPRKRAKT++EKEQRRIER+LRNR AA S Sbjct: 16 LAIPTNFKSTLPPRKRAKTKEEKEQRRIERILRNRRAAHQS 56 >sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabidopsis thaliana GN=HY5 PE=1 SV=1 Length = 168 Score = 41.2 bits (95), Expect = 0.010, Method: Compositional matrix adjust. Identities = 27/80 (33%), Positives = 39/80 (48%) Query: 60 GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQME 119 GQE RKR +T EKE +R++R+LRNR +AQ + +E Sbjct: 65 GQERTQATVGESQRKRGRTPAEKENKRLKRLLRNRVSAQQARERKKAYLSELENRVKDLE 124 Query: 120 QQNQFLLQRLSQMEAENNRL 139 +N L +RLS ++ EN L Sbjct: 125 NKNSELEERLSTLQNENQML 144 >sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanum lycopersicum GN=HY5 PE=2 SV=1 Length = 158 Score = 37.7 bits (86), Expect = 0.12, Method: Compositional matrix adjust. Identities = 26/80 (32%), Positives = 41/80 (51%), Gaps = 3/80 (3%) Query: 60 GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQME 119 GQ P T RKR ++ +KE +R++R+LRNR +AQ + ++E Sbjct: 66 GQAQPSAGTQ---RKRGRSPADKENKRLKRLLRNRVSAQQARERKKAYLIDLEARVKELE 122 Query: 120 QQNQFLLQRLSQMEAENNRL 139 +N L +RLS ++ EN L Sbjct: 123 TKNAELEERLSTLQNENQML 142 >sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-binding protein 3 OS=Mus musculus GN=Creb3 PE=2 SV=2 Length = 404 Score = 34.3 bits (77), Expect = 1.5, Method: Compositional matrix adjust. Identities = 20/71 (28%), Positives = 35/71 (49%) Query: 80 DEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQRLSQMEAENNRL 139 +E+ +R+ R +RN+ AAQ S ++ QN+ L ++ ++E +N L Sbjct: 182 EEQVLKRVRRKIRNKRAAQESRKKKKVYVVGLESRVLKYTAQNRELQNKVQRLEEQNLSL 241 Query: 140 SQQLAQLAAEV 150 QL +L A V Sbjct: 242 LDQLRKLQAMV 252 >sp|A1URL3|PYRD_BARBK Dihydroorotate dehydrogenase OS=Bartonella bacilliformis (strain ATCC 35685 / KC583) GN=pyrD PE=3 SV=1 Length = 362 Score = 33.9 bits (76), Expect = 1.6, Method: Compositional matrix adjust. Identities = 28/70 (40%), Positives = 36/70 (51%), Gaps = 11/70 (15%) Query: 227 GSALPLF-DLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGL---AFDVL 282 G ++P+F L DL DDVAA LS DF D V ++++F GL AF + Sbjct: 205 GFSIPIFLKLAPDLTEQELDDVAAELSLSDF------DGLVVSNTTLFRQGLKKSAF-MN 257 Query: 283 EGGDLSAFPF 292 EGG LS P Sbjct: 258 EGGGLSGRPL 267 >sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Bos taurus GN=CREB3L3 PE=2 SV=1 Length = 456 Score = 33.9 bits (76), Expect = 1.9, Method: Compositional matrix adjust. Identities = 20/71 (28%), Positives = 34/71 (47%) Query: 80 DEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQRLSQMEAENNRL 139 +E+ ++I R +RN+ +AQ S QNQ L +++ +E +N L Sbjct: 235 EERMLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNLSL 294 Query: 140 SQQLAQLAAEV 150 +QL +L A V Sbjct: 295 LEQLKKLQAIV 305 >sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Homo sapiens GN=CREB3L3 PE=1 SV=2 Length = 461 Score = 33.5 bits (75), Expect = 2.1, Method: Compositional matrix adjust. Identities = 20/71 (28%), Positives = 34/71 (47%) Query: 80 DEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQRLSQMEAENNRL 139 +E+ ++I R +RN+ +AQ S QNQ L +++ +E +N L Sbjct: 240 EERVLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNLSL 299 Query: 140 SQQLAQLAAEV 150 +QL +L A V Sbjct: 300 LEQLKKLQAIV 310 >sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Rattus norvegicus GN=Creb3l3 PE=2 SV=1 Length = 470 Score = 33.1 bits (74), Expect = 2.6, Method: Compositional matrix adjust. Identities = 22/83 (26%), Positives = 36/83 (43%) Query: 68 TNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQ 127 LP + +E+ ++I R +RN+ +AQ S QNQ L + Sbjct: 224 VTLPTQLPLTKYEERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQR 283 Query: 128 RLSQMEAENNRLSQQLAQLAAEV 150 ++ +E +N L +QL L A V Sbjct: 284 KVLHLEKQNLSLLEQLKHLQALV 306 >sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-binding protein 3-like protein 3 OS=Mus musculus GN=Creb3l3 PE=2 SV=1 Length = 479 Score = 33.1 bits (74), Expect = 2.9, Method: Compositional matrix adjust. Identities = 22/83 (26%), Positives = 36/83 (43%) Query: 68 TNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQ 127 LP + +E+ ++I R +RN+ +AQ S QNQ L + Sbjct: 224 VTLPTQLPLTKYEERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQR 283 Query: 128 RLSQMEAENNRLSQQLAQLAAEV 150 ++ +E +N L +QL L A V Sbjct: 284 KVLHLEKQNLSLLEQLKHLQALV 306 >sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=Arabidopsis thaliana GN=HYH PE=1 SV=1 Length = 149 Score = 32.3 bits (72), Expect = 5.7, Method: Compositional matrix adjust. Identities = 19/71 (26%), Positives = 35/71 (49%) Query: 73 RKRAKTEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQRLSQM 132 R+R + +KE R ++R+LRNR +AQ + +++ N L +++S + Sbjct: 68 RRRGRNPVDKEYRSLKRLLRNRVSAQQARERKKVYVSDLESRANELQNNNDQLEEKISTL 127 Query: 133 EAENNRLSQQL 143 EN L + L Sbjct: 128 TNENTMLRKML 138 >sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos taurus GN=XBP1 PE=2 SV=1 Length = 261 Score = 32.0 bits (71), Expect = 5.8, Method: Compositional matrix adjust. Identities = 25/86 (29%), Positives = 41/86 (47%), Gaps = 10/86 (11%) Query: 68 TNLPP--RKRAK-TEDEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQF 124 + +PP RKR + T E++ + R L+NR AAQT+ + +E++NQ Sbjct: 52 SGVPPQARKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQK 111 Query: 125 LL-------QRLSQMEAENNRLSQQL 143 LL ++ + EN L Q+L Sbjct: 112 LLLENQLLREKTHGLVVENQELRQRL 137 >sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Rattus norvegicus GN=Creb3l4 PE=2 SV=1 Length = 367 Score = 31.6 bits (70), Expect = 9.0, Method: Compositional matrix adjust. Identities = 18/67 (26%), Positives = 33/67 (49%) Query: 80 DEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQRLSQMEAENNRL 139 +E+ ++I R +RN+ +AQ S +QNQ L +++ ++E +N L Sbjct: 186 EERILKKIRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSEQNQKLQRKVQELERQNISL 245 Query: 140 SQQLAQL 146 Q+ QL Sbjct: 246 VAQVHQL 252 >sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-binding protein 3-like protein 4 OS=Mus musculus GN=Creb3l4 PE=1 SV=1 Length = 370 Score = 31.6 bits (70), Expect = 9.3, Method: Compositional matrix adjust. Identities = 18/67 (26%), Positives = 34/67 (50%) Query: 80 DEKEQRRIERVLRNRAAAQTSXXXXXXXXXXXXXXXIQMEQQNQFLLQRLSQMEAENNRL 139 +E+ ++I R +RN+ +AQ S +QNQ L +++ ++E +N L Sbjct: 190 EERILKKIRRKIRNKQSAQDSRRRKKEYLDGLESRVAACSEQNQKLQRKVQELERQNIFL 249 Query: 140 SQQLAQL 146 +Q+ QL Sbjct: 250 MEQVRQL 256 Database: uniprot_sprot.fasta Posted date: Apr 12, 2010 9:48 AM Number of letters in database: 181,677,051 Number of sequences in database: 516,081 Lambda K H 0.317 0.128 0.360 Gapped Lambda K H 0.267 0.0410 0.140 Matrix: BLOSUM62 Gap Penalties: Existence: 11, Extension: 1 Number of Sequences: 516081 Number of Hits to DB: 151,440,785 Number of extensions: 5635886 Number of successful extensions: 14148 Number of sequences better than 10.0: 43 Number of HSP's gapped: 14298 Number of HSP's successfully gapped: 44 Length of database: 181,677,051 Neighboring words threshold: 11 Window for multiple hits: 40 X1: 16 ( 7.3 bits) X2: 38 (14.6 bits) X3: 64 (24.7 bits) S1: 41 (21.7 bits) S2: 66 (30.0 bits) hmmer-3.1b2/easel/demotic/examples/example-single.fa.phr0000664361611702660230000003404312473612604022641 0ustar wheelerteddy0€0€ €A9B431_HERA2/73-422 A9B431.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €A8CRX1_9CHLR/78-422 A8CRX1.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €A2Y4E5_ORYSI/132-498 A2Y4E5.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q7UZW2_PROMP/80-422 Q7UZW2.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q7NKT4_GLOVI/79-416 Q7NKT4.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €SECY_GUITH/68-404 P28527.2¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €SECY_CYACA/62-394 P46249.2¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q85FU6_CYAME/42-325 Q85FU6.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €A0T0J6_PHATR/72-407 A0T0J6.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €SECY_CYAPA/109-459 P25014.2¡€0€ª€0€ € BL_ORD_ID¡€ € ¢€0€0€ €Q4G351_EMIHU/63-407 Q4G351.1¡€0€ª€0€ € BL_ORD_ID¡€ € ¢€0€0€ €SECY_PAVLU/66-404 P28540.2¡€0€ª€0€ € BL_ORD_ID¡€ € ¢€0€0€ €Q6B8X0_GRATL/62-395 Q6B8X0.1¡€0€ª€0€ € BL_ORD_ID¡€ € ¢€0€0€ €SECY_ANTSP/62-390 Q37143.1¡€0€ª€0€ € BL_ORD_ID¡€ € ¢€0€0€ €A4RW47_OSTLU/65-398 A4RW47.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €A7PFA4_VITVI/131-465 A7PFA4.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €A7HM32_FERNB/75-404 A7HM32.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €A3CK84_STRSV/69-416 A3CK84.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q5FM71_LACAC/68-415 Q5FM71.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q03ZM6_LEUMM/68-416 Q03ZM6.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €SECY_STAA8/69-413 O08387.2¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q4MG72_BACCE/68-415 Q4MG72.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q6F1X5_MESFL/92-454 Q6F1X5.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q6KI36_MYCMO/87-436 Q6KI36.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q4A5I3_MYCS5/83-437 Q4A5I3.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q98Q01_MYCPU/90-438 Q98Q01.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q4AAF9_MYCHJ/85-434 Q4AAF9.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q9PQP1_UREPA/76-434 Q9PQP1.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €SECY_MYCGE/81-430 P47416.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q8EUD2_MYCPE/81-433 Q8EUD2.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q7X4E3_9MOLU/69-399 Q7X4E3.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q5Q069_ASTYP/59-398 Q5Q069.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €O21257_RECAM/57-372 O21257.1¡€0€ª€0€ € BL_ORD_ID¡€ € ¢€0€0€ €Q74NB9_NANEQ/69-457 Q74NB9.1¡€0€ª€0€ € BL_ORD_ID¡€ €!¢€0€0€ €Q2EMT2_METVO/30-379 Q2EMT2.1¡€0€ª€0€ € BL_ORD_ID¡€ €"¢€0€0€ €A5UL65_METS3/72-433 A5UL65.1¡€0€ª€0€ € BL_ORD_ID¡€ €#¢€0€0€ €SECY_METTH/73-436 O26134.1¡€0€ª€0€ € BL_ORD_ID¡€ €$¢€0€0€ €SECY_PYRAB/72-448 Q9V1V8.1¡€0€ª€0€ € BL_ORD_ID¡€ €%¢€0€0€ €Q8TZA9_METKA/75-435 Q8TZA9.1¡€0€ª€0€ € BL_ORD_ID¡€ €&¢€0€0€ €Q9HIT0_THEAC/82-514 Q9HIT0.1¡€0€ª€0€ € BL_ORD_ID¡€ €'¢€0€0€ €Q2QAQ7_9EURY/161-583 Q2QAQ7.1¡€0€ª€0€ € BL_ORD_ID¡€ €(¢€0€0€ €Q0W1W5_UNCMA/75-487 Q0W1W5.1¡€0€ª€0€ € BL_ORD_ID¡€ €)¢€0€0€ €SECY_ARCFU/73-471 O28377.1¡€0€ª€0€ € BL_ORD_ID¡€ €*¢€0€0€ €Q8TRS4_METAC/72-470 Q8TRS4.1¡€0€ª€0€ € BL_ORD_ID¡€ €+¢€0€0€ €A0B9U7_METTP/75-515 A0B9U7.1¡€0€ª€0€ € BL_ORD_ID¡€ €,¢€0€0€ €SECY_HALMA/73-468 P28542.2¡€0€ª€0€ € BL_ORD_ID¡€ €-¢€0€0€ €Q2FSG8_METHJ/73-458 Q2FSG8.1¡€0€ª€0€ € BL_ORD_ID¡€ €.¢€0€0€ €A2SPM5_METLZ/73-458 A2SPM5.1¡€0€ª€0€ € BL_ORD_ID¡€ €/¢€0€0€ €A0RUE4_CENSY/79-457 A0RUE4.1¡€0€ª€0€ € BL_ORD_ID¡€ €0¢€0€0€ €A8ME75_CALMQ/77-461 A8ME75.1¡€0€ª€0€ € BL_ORD_ID¡€ €1¢€0€0€ €A3MUZ2_PYRCJ/70-435 A3MUZ2.1¡€0€ª€0€ € BL_ORD_ID¡€ €2¢€0€0€ €SECY_SULSO/73-449 Q9UX84.1¡€0€ª€0€ € BL_ORD_ID¡€ €3¢€0€0€ €SECY_SULAC/74-443 P49978.1¡€0€ª€0€ € BL_ORD_ID¡€ €4¢€0€0€ €A2BME2_HYPBU/73-444 A2BME2.1¡€0€ª€0€ € BL_ORD_ID¡€ €5¢€0€0€ €SECY_AERPE/73-434 Q9YDD0.2¡€0€ª€0€ € BL_ORD_ID¡€ €6¢€0€0€ €A1RWR3_THEPD/75-456 A1RWR3.1¡€0€ª€0€ € BL_ORD_ID¡€ €7¢€0€0€ €SC61A_SCHPO/76-459 P79088.1¡€0€ª€0€ € BL_ORD_ID¡€ €8¢€0€0€ €A7E5Q2_SCLS1/76-459 A7E5Q2.1¡€0€ª€0€ € BL_ORD_ID¡€ €9¢€0€0€ €Q5KC69_CRYNE/75-459 Q5KC69.1¡€0€ª€0€ € BL_ORD_ID¡€ €:¢€0€0€ €SC61A_ASHGO/75-460 Q752H7.1¡€0€ª€0€ € BL_ORD_ID¡€ €;¢€0€0€ €Q59MJ6_CANAL/76-459 Q59MJ6.1¡€0€ª€0€ € BL_ORD_ID¡€ €<¢€0€0€ €A7SJW4_NEMVE/75-458 A7SJW4.1¡€0€ª€0€ € BL_ORD_ID¡€ €=¢€0€0€ €A0CFY2_PARTE/73-456 A0CFY2.1¡€0€ª€0€ € BL_ORD_ID¡€ €>¢€0€0€ €Q22MG2_TETTH/151-538 Q22MG2.2¡€0€ª€0€ € BL_ORD_ID¡€ €?¢€0€0€ €A0CU87_PARTE/77-460 A0CU87.1¡€0€ª€0€ € BL_ORD_ID¡€ €@¢€0€0€ €Q7RLN0_PLAYO/121-506 Q7RLN0.1¡€0€ª€0€ € BL_ORD_ID¡€ €A¢€0€0€ €Q4QGX4_LEIMA/77-467 Q4QGX4.1¡€0€ª€0€ € BL_ORD_ID¡€ €B¢€0€0€ €A5JEK2_NOSBO/75-457 A5JEK2.1¡€0€ª€0€ € BL_ORD_ID¡€ €C¢€0€0€ €A2DH65_TRIVA/75-462 A2DH65.1¡€0€ª€0€ € BL_ORD_ID¡€ €D¢€0€0€ €Q2QM98_ORYSJ/88-448 Q2QM98.2¡€0€ª€0€ € BL_ORD_ID¡€ €E¢€0€0€ €Q6AV46_ORYSJ/86-471 Q6AV46.1¡€0€ª€0€ € BL_ORD_ID¡€ €F¢€0€0€ €Q6C854_YARLI/70-454 Q6C854.2¡€0€ª€0€ € BL_ORD_ID¡€ €G¢€0€0€ €SSH1_YEAST/78-465 P38353.1¡€0€ª€0€ € BL_ORD_ID¡€ €H¢€0€0€ €Q6BT20_DEBHA/78-475 Q6BT20.2¡€0€ª€0€ € BL_ORD_ID¡€ €I¢€0€0€ €A5DE75_PICGU/20-414 A5DE75.1¡€0€ª€0€ € BL_ORD_ID¡€ €J¢€0€0€ €A3GFV9_PICST/78-476 A3GFV9.2¡€0€ª€0€ € BL_ORD_ID¡€ €K¢€0€0€ €A5DWJ5_LODEL/34-436 A5DWJ5.1¡€0€ª€0€ € BL_ORD_ID¡€ €L¢€0€0€ €Q5A2C9_CANAL/5-404 Q5A2C9.1¡€0€ª€0€ € BL_ORD_ID¡€ €M¢€0€0€ €Q74L41_LACJO/64-372 Q74L41.1¡€0€ª€0€ € BL_ORD_ID¡€ €N¢€0€0€ €B3XPQ8_LACRE/65-377 B3XPQ8.1¡€0€ª€0€ € BL_ORD_ID¡€ €O¢€0€0€ €A1C3L4_STRPA/70-403 A1C3L4.1¡€0€ª€0€ € BL_ORD_ID¡€ €P¢€0€0€ €Q3DVD6_STRAG/65-395 Q3DVD6.1¡€0€ª€0€ € BL_ORD_ID¡€ €Q¢€0€0€ €A5LN99_STRPN/64-389 A5LN99.1¡€0€ª€0€ € BL_ORD_ID¡€ €R¢€0€0€ €A3CM55_STRSV/64-391 A3CM55.1¡€0€ª€0€ € BL_ORD_ID¡€ €S¢€0€0€ €Q03HZ8_PEDPA/65-396 Q03HZ8.1¡€0€ª€0€ € BL_ORD_ID¡€ €T¢€0€0€ €A5IW80_STAA9/64-384 A5IW80.1¡€0€ª€0€ € BL_ORD_ID¡€ €U¢€0€0€ €Q4L9N9_STAHJ/61-383 Q4L9N9.1¡€0€ª€0€ € BL_ORD_ID¡€ €V¢€0€0€ €Q5HKR3_STAEQ/61-380 Q5HKR3.1¡€0€ª€0€ € BL_ORD_ID¡€ €W¢€0€0€ €Q9RSK8_DEIRA/68-413 Q9RSK8.1¡€0€ª€0€ € BL_ORD_ID¡€ €X¢€0€0€ €Q5SHQ8_THET8/71-413 Q5SHQ8.1¡€0€ª€0€ € BL_ORD_ID¡€ €Y¢€0€0€ €SECY_CORGL/73-424 P38376.1¡€0€ª€0€ € BL_ORD_ID¡€ €Z¢€0€0€ €A8LB12_FRASN/74-414 A8LB12.1¡€0€ª€0€ € BL_ORD_ID¡€ €[¢€0€0€ €Q83NQ1_TROW8/73-424 Q83NQ1.1¡€0€ª€0€ € BL_ORD_ID¡€ €\¢€0€0€ €Q8G3Z9_BIFLO/74-421 Q8G3Z9.1¡€0€ª€0€ € BL_ORD_ID¡€ €]¢€0€0€ €A7B9M4_9ACTO/72-414 A7B9M4.1¡€0€ª€0€ € BL_ORD_ID¡€ €^¢€0€0€ €SECY_CHLTR/73-433 P28539.3¡€0€ª€0€ € BL_ORD_ID¡€ €_¢€0€0€ €Q1AU49_RUBXD/70-408 Q1AU49.1¡€0€ª€0€ € BL_ORD_ID¡€ €`¢€0€0€ €Q8RIH6_FUSNN/75-411 Q8RIH6.1¡€0€ª€0€ € BL_ORD_ID¡€ €a¢€0€0€ €A6DRC9_9BACT/79-428 A6DRC9.1¡€0€ª€0€ € BL_ORD_ID¡€ €b¢€0€0€ €C0ACZ0_9BACT/94-454 C0ACZ0.1¡€0€ª€0€ € BL_ORD_ID¡€ €c¢€0€0€ €Q1Q157_9BACT/75-434 Q1Q157.1¡€0€ª€0€ € BL_ORD_ID¡€ €d¢€0€0€ €A6CGP8_9PLAN/77-435 A6CGP8.1¡€0€ª€0€ € BL_ORD_ID¡€ €e¢€0€0€ €B4S5A8_PROA2/73-417 B4S5A8.1¡€0€ª€0€ € BL_ORD_ID¡€ €f¢€0€0€ €Q2S3P5_SALRD/75-414 Q2S3P5.1¡€0€ª€0€ € BL_ORD_ID¡€ €g¢€0€0€ €A1ZGT4_9SPHI/72-404 A1ZGT4.1¡€0€ª€0€ € BL_ORD_ID¡€ €h¢€0€0€ €A6EHP4_9SPHI/71-408 A6EHP4.1¡€0€ª€0€ € BL_ORD_ID¡€ €i¢€0€0€ €Q11QD2_CYTH3/72-411 Q11QD2.1¡€0€ª€0€ € BL_ORD_ID¡€ €j¢€0€0€ €Q1VTY0_9FLAO/73-421 Q1VTY0.1¡€0€ª€0€ € BL_ORD_ID¡€ €k¢€0€0€ €Q1NYZ7_9FLAO/72-422 Q1NYZ7.1¡€0€ª€0€ € BL_ORD_ID¡€ €l¢€0€0€ €A5KHP6_CAMJE/62-402 A5KHP6.1¡€0€ª€0€ € BL_ORD_ID¡€ €m¢€0€0€ €A4EA78_9ACTN/52-389 A4EA78.1¡€0€ª€0€ € BL_ORD_ID¡€ €n¢€0€0€ €Q2GEC0_NEOSM/73-411 Q2GEC0.1¡€0€ª€0€ € BL_ORD_ID¡€ €o¢€0€0€ €Q3YRM8_EHRCJ/72-412 Q3YRM8.1¡€0€ª€0€ € BL_ORD_ID¡€ €p¢€0€0€ €Q5GSW3_WOLTR/77-416 Q5GSW3.1¡€0€ª€0€ € BL_ORD_ID¡€ €q¢€0€0€ €Q0ANS0_MARMM/83-421 Q0ANS0.1¡€0€ª€0€ € BL_ORD_ID¡€ €r¢€0€0€ €A7IPQ0_XANP2/80-418 A7IPQ0.1¡€0€ª€0€ € BL_ORD_ID¡€ €s¢€0€0€ €SECY_RICCN/70-411 Q92GY6.1¡€0€ª€0€ € BL_ORD_ID¡€ €t¢€0€0€ €Q2G8W0_NOVAD/80-430 Q2G8W0.1¡€0€ª€0€ € BL_ORD_ID¡€ €u¢€0€0€ €A6E0Q6_9RHOB/73-411 A6E0Q6.1¡€0€ª€0€ € BL_ORD_ID¡€ €v¢€0€0€ €Q1UZE8_9RICK/67-404 Q1UZE8.1¡€0€ª€0€ € BL_ORD_ID¡€ €w¢€0€0€ €Q3R245_XYLFA/76-424 Q3R245.1¡€0€ª€0€ € BL_ORD_ID¡€ €x¢€0€0€ €A4NK90_HAEIN/76-416 A4NK90.1¡€0€ª€0€ € BL_ORD_ID¡€ €y¢€0€0€ €Q057C4_BUCCC/64-407 Q057C4.1¡€0€ª€0€ € BL_ORD_ID¡€ €z¢€0€0€ €Q8D1Z2_WIGBR/82-424 Q8D1Z2.1¡€0€ª€0€ € BL_ORD_ID¡€ €{¢€0€0€ €Q6F7T2_ACIAD/83-426 Q6F7T2.1¡€0€ª€0€ € BL_ORD_ID¡€ €|¢€0€0€ €Q6Q8W8_9GAMM/67-407 Q6Q8W8.1¡€0€ª€0€ € BL_ORD_ID¡€ €}¢€0€0€ €A9BRX1_DELAS/74-413 A9BRX1.1¡€0€ª€0€ € BL_ORD_ID¡€ €~¢€0€0€ €Q7DDS8_NEIMB/73-410 Q7DDS8.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q5NHU8_FRATT/74-416 Q5NHU8.1¡€0€ª€0€ € BL_ORD_ID¡€ €€¢€0€0€ €Q7WZR8_9GAMM/64-388 Q7WZR8.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €A5EX98_DICNV/69-412 A5EX98.1¡€0€ª€0€ € BL_ORD_ID¡€ €‚¢€0€0€ €Q6MJ32_BDEBA/70-415 Q6MJ32.1¡€0€ª€0€ € BL_ORD_ID¡€ €ƒ¢€0€0€ €B5EFS0_GEOBB/71-411 B5EFS0.1¡€0€ª€0€ € BL_ORD_ID¡€ €„¢€0€0€ €A3EVQ1_9BACT/75-412 A3EVQ1.1¡€0€ª€0€ € BL_ORD_ID¡€ €…¢€0€0€ €Q1MPP6_LAWIP/71-412 Q1MPP6.1¡€0€ª€0€ € BL_ORD_ID¡€ €†¢€0€0€ €SECY_AQUAE/71-412 O66491.1¡€0€ª€0€ € BL_ORD_ID¡€ €‡¢€0€0€ €Q01WB2_SOLUE/74-438 Q01WB2.1¡€0€ª€0€ € BL_ORD_ID¡€ €ˆ¢€0€0€ €Q08ZH8_STIAU/26-370 Q08ZH8.1¡€0€ª€0€ € BL_ORD_ID¡€ €‰¢€0€0€ €A6GCG0_9DELT/70-411 A6GCG0.1¡€0€ª€0€ € BL_ORD_ID¡€ €Š¢€0€0€ €Q04PV8_LEPBJ/72-436 Q04PV8.1¡€0€ª€0€ € BL_ORD_ID¡€ €‹¢€0€0€ €SECY_BORBU/72-409 O51451.1¡€0€ª€0€ € BL_ORD_ID¡€ €Œ¢€0€0€ €Q73PL2_TREDE/73-413 Q73PL2.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q67JW3_SYMTH/69-405 Q67JW3.1¡€0€ª€0€ € BL_ORD_ID¡€ €Ž¢€0€0€ €A7FQ38_CLOB1/69-409 A7FQ38.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €A6LPT1_CLOB8/69-416 A6LPT1.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€0€0€ €Q0SQG4_CLOPS/69-409 Q0SQG4.1¡€0€ª€0€ € BL_ORD_ID¡€ €‘¢€0€0€ €A9KJH4_CLOPH/71-425 A9KJH4.1¡€0€ª€0€ € BL_ORD_ID¡€ €’¢€0€0€ €A7VH89_9CLOT/71-420 A7VH89.1¡€0€ª€0€ € BL_ORD_ID¡€ €“¢€0€0€ €A6BIS2_9FIRM/71-421 A6BIS2.1¡€0€ª€0€ € BL_ORD_ID¡€ €”¢€0€0€ €A7VR33_9CLOT/71-423 A7VR33.1¡€0€ª€0€ € BL_ORD_ID¡€ €•¢€0€0€ €A6NXF0_9BACE/71-437 A6NXF0.1¡€0€ª€0€ € BL_ORD_ID¡€ €–¢€0€0€ €Q250L2_DESHY/70-413 Q250L2.1¡€0€ª€0€ € BL_ORD_ID¡€ €—¢€0€0€ €Q8R7X3_THETN/69-402 Q8R7X3.1¡€0€ª€0€ € BL_ORD_ID¡€ €˜¢€0€0€ €A4XLR1_CALS8/69-419 A4XLR1.1¡€0€ª€0€ € BL_ORD_ID¡€ €™¢€0€0€ €A3DJJ2_CLOTH/71-411 A3DJJ2.1¡€0€ª€0€ € BL_ORD_ID¡€ €š¢€0€0€ €A8MLG0_ALKOO/69-408 A8MLG0.1¡€0€ª€0€ € BL_ORD_ID¡€ €›¢€0€0€ €Q18CH6_CLOD6/69-406 Q18CH6.1¡€0€ª€0€ € BL_ORD_ID¡€ €œ¢€0€0€ €B8D0S8_HALOH/72-406 B8D0S8.1¡€0€ª€0€ € BL_ORD_ID¡€ €¢€hmmer-3.1b2/easel/demotic/examples/example-single.fa0000664361611702660230000017045512473612604022061 0ustar wheelerteddy>A9B431_HERA2/73-422 A9B431.1 SVAAMGVYPYITAQIIMQLLIPLIPALEQLSKEGEQGRNRIQRYQYFLTVPLAYLQGYGQ IKSLINSGINLFGTLNFSITENFFQTFSILTIMVSGSMFLVWMGELIDERGIGNGLSMII FGGIVTALPSMVYQAITTSSSGNNVIGGILLLIVTLATVVGIVLITEGQRRIPVQYAKRV RGNKVYGGQSSHLPLKVNMAGMIPLIFAQSILIFPSTVASYFWNPNGSGFFNGVANFFVN SFGPNGLAFTLAMFVLVLLFTYFYALVMFNQQNLPEMLQRNGGFIPGIRPGRNTEVYLTK VLNRITLIGAVGLAVVAALPYFVQQITGLQIGFSSTGLLIVVGVAVDTMR >A8CRX1_9CHLR/78-422 A8CRX1.1 SVAALGVYPYITASIIMTLLTPVIPKLTALSKEGEAGRNKINTITHWLAVPTAALAGYSQ LLLLQREGAVAQTEPLAAVAIVLSIVAGTMFMVWLGEQITSYGIGNGISLIIFAGIVAGL PDMIGRGLMASDQFAGLAVYAFMALLTTVLIVIFTEAHRRIPVQYAQTVIRSGKMYRRGG ESHIPLRVNSAGMIPLIFASALVMLPGLVASYFMAGSTEDPNFWNTIYNIFNSGASMPGG LVYWGLYFFMTIIFAFFYTMVTFEQQDIPGTLQRQGGFVPGIRPGKMTDQYLSGVIGRIT WAGALFLGFVAIMPFIAREVTGIQVIQLSSFGMLIVVGVALDTMK >A2Y4E5_ORYSI/132-498 A2Y4E5.1 SFFQLGISHQISASIVMQVLFYPLFGPALLFSNGNVLCHVLPSLEKLRKEGLDGHEKIKG YIWWLSLGFALVAAFTVSCYSLQYSIYAASYRVKHVMITSLFLVLGAMTMTWICDTISES GFGHGSSLIICVGILTGYTDTLHKMLTQFSGNWYSCWHYILGIAGTFILVTMGAVLVTEG CRKIKLQYYGFKLASGARSESSPVTEVEPYIPFNINPTGMQPLLTTSYLLAFPSIMASIF GTQFWESLKETLNPKTSVGGGPWAYYLTYAFLVFVFNIFDIANLPKEISDYLNKMSARVP KIKPGRATVEYLTKIQTSTRFWGGILLSLLATSSLLLDRYLRQINEGFSIGFTSVLIIVG SIIELRR >Q7UZW2_PROMP/80-422 Q7UZW2.1 GIFALGILPFINASIIIQLLTASLPVLEDLQKNEGEAGRRKIAQITRYVSLGWGFLQSII FSLILRQYAIEGISETAFVLQTSIALVTGSMIVMWFSEIITEKGIGQGASLVIFLNIVAT LPKALSSTIEKAQTGDRGDVLGIAVLLGVFLLTIVGIIFVQEGARRIPIVSAKRQIGNSS LLPTRQSYLPLKLNAGGVMPIIFASALIFLPITVANVTGNPILIKIAGSLNPGSSNPWPY ALTFFALILGFSYFYASLTINPVDVASNLKKGGVAIPGVRPGSNTANYLSGIQNRLTLLG GLFLGSVAIIPAAVERATNVQTFQGLGATSLLILVGVAIDTAK >Q7NKT4_GLOVI/79-416 Q7NKT4.1 GVFMLGILPYINASIIMQLLVPVFPKLEDLQKNEGEQGRRQIAQYTRYLALGWAIIQSIG VAIYIKPFVADWSPLFVIQTTLALTAGAIFVMWLGELITEKGIGNGASLLIFVSIVSSLP TAFSQTFQLLQADSSRVAGVVVLLLVFLAMIVGIVFVQEGTRRIPIISARRQVGPRRQQY QQQQTSYLPLRVNQGGVMPIIFASSLLYLPLTFAQFARNATVDQVVNAISSGWIHNILYL VLILFFSFFYATLIINPEDVSKNLKRMGSSIPGVRPGTATSEYIAKVMNRLTFLGAIFLS AVAIIPTFVEQGTGITTFNGLGATSLLILVGVAIDTVR >SECY_GUITH/68-404 P28527.2 GVFALGIVPYINASIIVQLATNSIPSLEKLQKEEGELGRQKIVQLTRYVALVWALIQSIG VSFWVRPYVFNWDLNFVFAMSLTLTIGSMLIMWFSEQITEKGIGNGPSLLIFINIISGLP KLLQSQIQSTRLNIQALDIFVLVFIFSVMIIGIIFIQEGIKRIPIISARQLGKGQMDNKT SYLPLKLNQSGVMPIIFASAVLVLPAYLAQLVSNEQLRTVLHLFDGTSNNKLLYLLFYFT LILFFSYFYTSLILNPNDVSKNLKKMESSIYGVRPGKATTEYLQKTLNRLTFLGALFLAF IAIVPNIIETLTNLSVFKGLGGTSLLIIVGVQVDTSK >SECY_CYACA/62-394 P46249.2 SVFALGIIPYINATITIQILSSAFPALKKLQSEEGEIGKKKLNKITKYLSFCFAFIESLA IVLRLQKYAFDWNLYFIVQTTLILISGAMLVMWLADNISYKGIGTGASVIIFVNIASAFA KFLLNQLFVHSIKFLDFASYFALIVFSIACIVFVQEAIRKVPIISAKQLDSTSFYSNDYF LPLRINQGGVMPIILASSLLALVDYVIRYGLSTLQAVYFINDILPFKILFLLLYSAFIIF FNYLYCSLVLNCFELSNNLKKASVVIPSIRPGKMTEKFFKDTLDNLTLFGSGFLAFIVLA PNFLEFVFHIRVFKGLAVSSLLIVVGVAIDLIK >Q85FU6_CYAME/42-325 Q85FU6.1 GWFVLGIIPTINASIVMQILISIVPALTRLQKEEGEMGQKQIQKYTRYLTFFLAGIQAFT LSQQWCTWLLIVSGAMLVMWLAEQMTHKGIGNGTSIFVCSNIAANFLHHPIEAPWSLAMV VLIFTMLGMIALQEAVRAIPILSAKQLIQSIAQVYLLPMRLNQGGVMPIIFASSTLALLH TWSIWWLYVACIIFFSHFYNLVIANPKELSENLNKMAVVIPSIRPGAETQQYLNRTLNRM SWIGGIALSLIALLPWLFSSLKIFSGFGATSLLIVIGVSIDTMR >A0T0J6_PHATR/72-407 A0T0J6.1 GLFTLNIFPYINASILVQLILGFSPKLSKLQKEGDLEGRRSINRLTRLITLMFALIQSVS LALYLKQILFNWNYSLAIEIGLWLTTGAMIVLWLSELITDYGLGNGASLLIYTNIISSLP NLSKTILSENSQNFTLGSEIGIVLLIFTSLYGIVFLQEGVRIIPLISSKQLNQSSLQDSV TSNNYIPLRFNQAGVMPIILTTTILVVPNYVNNLGLLPKIDLPINFESLNFVYWIGYFVL ILVFSSFYSTIVLNPKDISDQLQKMAVTIPGIRPGIQTTFYLKQVMKRITLLGTTMLATL ATIPNFVESTLSITSLNGLSTTSLLILAGVVLDLVR >SECY_CYAPA/109-459 P25014.2 GFFTLGILPYMNASFFLQVLTKILPSLERFQKEQEEIAQREFKKWTRYLTVIWAFIQSIV ISWIWIRPYALNWDFFLGLKVVVALTLGAVIVMIIAEQITEIGLTNGSSLLIFINIIARI PNSIEQLFNSNINWTFPMISSLILSLSLSFITMFVIIGLQESGRPVPVLIARQEAERQKF NEPITEAERRKTQAYIFFQLLPAGIMPVIFASTIFDLALPAFTNFLLQQGNWGYQLIKSF PFNSLFKDFCYLITIMLFSSNYALTIMINPKTLAENLNSMNALIPGVRPGSETKVYSEQL IHRLNFIGSFVLALVCILPSIVERSLGLPKLQILSPVSISIALGVAVDTTR >Q4G351_EMIHU/63-407 Q4G351.1 GIGSLGILPYINASIIIQLLTPLFPNLERLQKEEGELGRQQISRYTRYLTCIWAIVLSSA IAFFLIKPITFGWSLKLGLEIVLSLTVGSILSMWFAELITEESLGNGSSMIIFINIVGGI PNNLSSLSKTFSAANLASAIPLLLTGLGIYLGIVLIIIFFQESYKKITIVSAKQLNLTTS AQTQSERLANNSFIPLKLNQGGIMPLVFSSTIAVVFMYPAQILLSSALLTNAAGLASKLL TIYSFGINFVLVIFFSCFYVSLVLKPKDMSENLGKMAYSIPGIRQGKETTKYLEKVINRL AFIGGLFLAFLAFFPLFVGNFIQFGLFKNLTSLLILIGVITDTTS >SECY_PAVLU/66-404 P28540.2 SILTLGLGPFFSASLAVQFLVKLYPAFEKLQNEEGEEGRKTIVRYTRILTVLFCIIESFF LSNSLRSFVFNWNSISYFVVAAAVTTGSLVLVWLSEVITERGIGNGSSLLILIGNLSRFR FLINKDDFDSLNVSSQSNLYIIYIIITLVSMLIFSTLSQEGARKIPVVSAKQLIDGVEDD MRRSYIPIRFGQAGVVPIIFSSSILLFLTTSIKQLPNANIATRVILDSVNLQQIFYFFTF LVLIIFFSFFYTLIILSPSDIAKNLKKMSSVIQDTKPGVATKVYIRKFILQASFVGSILL SALILIPSILAAALGVHPLSISGITSLILSFSIINDTVR >Q6B8X0_GRATL/62-395 Q6B8X0.1 GIFALGIVPYINASIMMQLLTKLIPELENLQKEEGESGRQKIGQLTRYFTLIWSILQSIG ISLWIKPYVFNWNYYFILDSIIALGTGSLIIMWFAEIITEYGIGNGASLLIFQNIISGIP KNIQNYKINIYDKQTIINGSFLFLLFVLILIINILIQECKRKIMIVSAKQLSKFTTSNPR SYIPLKLNQGGVMPIVFASATMALPIYFSNNIEVPNINNVINLFLPGRILYFPAYGSLII AFSYFYTSLVLNPDDIAENLNKMGASIPSIRPGSDTIRYISKILDKMTFMGGVFLFIIAL IPSLIAYITHTSLLQGLGTTSLLILVGVAIDTAK >SECY_ANTSP/62-390 Q37143.1 GIFALGIVPYIYASIIIQLLIKLIPYLENLQKEEGEIGRQKINQLTRYLTLLWALIQSLS IAIWINHMYLIHLFELCASLTTSSMIAMWFSEIISEYGVGNGPSLLIFQNIISSIPKNLQ NYTFNIGTTNTVLNGSLILSFGIIILIINILIQEGERKIAILSAKQLGKINELNHKVIFL LKLNQGGVMPFVFASAVVHTFLFISNNTNSKITQFINLFLPNQFLYLPLYLIFIITFSYV YTSLILNPEDIAKNLKKMGASIPNIRPGSETIKYLNTRINRLTLIGACFLFTITLFPTIT YYIFKINTLKGLGATSLLILVGVAIDTAK >A4RW47_OSTLU/65-398 A4RW47.1 GIFSLGIVPYINSSIIFQLLGSVFPELKKLQKEEGEAGRRKFQQYQRYGALGFAIVQAVG QCLYVRPFVEDFTPIWLFEQSCALTAGAMILMYIGELLNEIKLGNGTSLLIFANIVSALP SSVGQTVSMAQEKGDSSVLAVFFGAFALTTLGIVYVQEAERKIPMNYSTRFNAGGLAKSS YLPFKVNSAGVMPIIFASSLLALPATLTRFTDNGAVLGVARFLSPGGGAGYVPVNVAMIC FFNYFYTFLQLEPKDVADQLKRQGASIPGVRPGAATRDYITRVLERLSVLGSVFLGALAL TPGAVEQITGLQTFRGFAGTSLLILVGVATDSAR >A7PFA4_VITVI/131-465 A7PFA4.1 GICSLGIVPFINAQIVFQLLTQIYPKLQDLQKREGETGRKKVLQYTRYASVGFALVQAIG QVLFLRPYVNDFSTQWVLSSVTLLTLGSVLTTYIGERISDLKLGNGTSLLIFTSIISYLP ASFGRTVAQAFQDGNYIGLVIIIISFFLLVLGIVYVQEAERKIPLNYASRYTNKSGGLQK STYLPFKVNSSGVMPIIFSTSSLALPGTVSRFTGLAALKKAALALNPGGSLYLPTNILLI AFFNYYYTFLQLDPDDVSEQLKRQGASIPLVRPGKSTAAFIKMVLSRISVLGSGFLAILA AGPSLVEQTTHLTAFRGFAGTSVLILVGCATDTAR >A7HM32_FERNB/75-404 A7HM32.1 SVFSMSVTPYINASIIMQLLASIIPSLKELLKEGEEGRKKFQHYTKNLTLGLAALQSFVV SFGLARSYQGIIAINTWLFSFVSTVSLVAGTMFLLWIGDRITEKGIGNGVSIMIFAGIVS RYPAYFRSAVLGNLNIFGWIFLIAVAIFMVVAIIYVQQAERRIKIEYATRMVGRRIYGGT STYLPIKVNHSGVIPIIFAWAIISIPEAIAQITGAQWAIKLFSMQSPLMMIIYALLIFFF TYFYSVVVIDPKDISENIKRYGGFIPGIRAGKPTEEYITFVLNRVTFLGAIFLVGISLLP YLVEGITRVNIWLGGTSALIAVGVALDIAQ >A3CK84_STRSV/69-416 A3CK84.1 SVFALGVSPYITASIVVQLLQMDLLPKFVEWGKQGEVGRRKLNQATRYIALVLAFVQAIG ITAGFDTLSRANLVANPNVQTYALICVLLATGSMIVTWLGEQITDKGYGNGVSMIIFAGI VSAIPDMIKGIYEDYFVNIPSERLTSSFIFVGILIVAVLLIIYFTTFVQQAEYKIPIQYT KVAKGAPSSSYLPLKVNPAGVIPVIFASSITAAPAAIFQVVSALGYDADWVKTAQSLLAT TTISGMFMYAFLIVLFTFFYTFVQINPEKTAENLQKSGAYIPGVRPGKGTEDYMSKLLRR LATVGSLFLGFISILPILAKDVFGLTDAVALGGTSLLIIISTGIEGMK >Q5FM71_LACAC/68-415 Q5FM71.1 SIFSLGVSPYITAQIVIQLLQMDIVPTLVEWGKQGEVGRRKTNQVTRYLTLVVAFVQSIG ITLGFNALTQMGLVKNQTPQTYVEIAIIMTAGTMLLTWLGDEITDKGLGNGVSVIIFAGI IARLPSGLWQIYKEEIINNSASDRWQGILFFIAVIVAILIVTQLVTWVEQADRRIPIQYT RRATISGSESFLPLKVNVSGVIPVIFASSFIITPATILMAFQRTQGDQQWFKVLNQIFSL QTTPGVIIYTLLIILFTFFYAFVQVNPEKLAENLQKQGAYIPSVWPGKDTQNYISKMLIK LSTVGSIFLGLVALLPQLATNFWNLPSSIGLGGTSLLIVIGVVLELSR >Q03ZM6_LEUMM/68-416 Q03ZM6.1 SLFAMGVSPYVTAQIIVQLLQLDIVPRFVEWSKQGEVGRRKLNNATRWLTLVLAFVQSVG ITAGFNSLSSYGLVSQTNSVMSFVVIGSVMTIGTFFAMWLGEMITEKGLGNGVSMIIFAG IIAQAPEGFYEIFKENILQADSSDMLNGWIFVVVLVIAMILVVAFTTWSYEGTRRLQMQY TRSATSYGSEAYLPLKVNVSGVIPVIFASSFISTPQTVMLAFQDKYSSAQWYQIMQQIFS MTTLPGAILYTALIVVFTYFYAFVQVNPDKLSENLQKQGAYIVGVRPGAETKAFVSKLLL NLSFVGSIFLGVVALVPLIASDVWGLNEKIGLGGTSLLISIGVALDLIR >SECY_STAA8/69-413 O08387.2 SIFAMGIVPYITASIVMQLLQMDIVPKFSEWAKQGEVGRRKLNNVTRYLAISLAFIQSIG MAFQFNNYLKGALIINQSIMSYLLIALVLTAGTAFLIWLGDQITQFGVGNGISIIIFAGI LSTLPASLIQFGQTAFVGQEDTSLAWLKVLGLLVSLILLTVGAIYVLEAVRKIPIQYAKK QTAQRLGSQATYLPLKVNSAGVIPVIFAMAFFLLPRTLTLFYPDKEWAQNIANAANPSSN VGMVVYIVLIILFTYFYAFVQVNPEKMADNLKKQGSYVPGIRPGEQTKKYITKVLYRLTF VGSIFLAVISILPILATKFMGLPQSIQIGGTSLLIVIGVAIETMK >Q4MG72_BACCE/68-415 Q4MG72.1 SIFAVGITPYITASIIVQLLQMDVIPKFSEWAKQGEMGRKKSAQFTRYFTIILAFIQAIG MSYGFNNIAGGQLITDQSWTTYLFIATVLTAGTAFLLWLGEQITANGVGNGISMIIFAGL VAAIPNVANQIYLQQFQNAGDQLFMHIIKMLLIGLVILAIVVGVIYIQQAVRKIPIQYAK AVSGNNQYQGAKNTHLPLKVNSAGVIPVIFASAFLMTPRTIAQLFPDSSISKWLVANLDF AHPIGMTLYVGLIVAFTYFYAFIQVNPEQMAENLKKQNGYVPGIRPGKSTEQYVTKILYR LTFIGAIFLGAISILPLVFTKIATLPPSAQIGGTSLLIIVGVALETMK >Q6F1X5_MESFL/92-454 Q6F1X5.1 SILALGVSPYITASIIVQLLSTDVVPILTRWNKSGERGRKKLDKLTKVLMIPFALMQGIA TIFTLQQQGVIEPGWSSDNVLASPAFYYVLVPLVMLAGSYFMLWIADQITIKGVGNGISI VIFIGIIVQLPNQIKATYDFWIPSNESINVFFDGIIKFSIYMLVFFVVIFSVVLMNEAER KVPIQQTGSGLIDSKDHTPYLPLKLNNAGVIPVIFASALISTPITIAQIIDPTASTSTVD SANAFVRFTQHYLSFNTWWGIGIFAVMIVLFTFLYAQVQINPEKISENFQKSGTFIPGIK PGKDTTNFLKGTINRLSLFGAIFLAAIAALPYVISKLTNLPSQLAIGGTGLIICISVAIQ TTQ >Q6KI36_MYCMO/87-436 Q6KI36.1 SIVALGISPFITASLVMQILQTKLFPPIYRLSQSGPIGRRKINIITRAITIFLGVVQSMT IVSALSAQNSFISLTNEFNVFWYQFIILPVILIAGTVFSIFIGDQITDKGVGNGTTLLIF TGIVITLPTQFTATFNALVGEQQRVSSLSNGIVTFISYVFGFIILMYIIGFVYNAERRIP IQQVGAGRAKNEKELSYLPIKINPGGISPIIFALIIISFPQLFASVFPISNPFRIWVESN LRPNNTIGFILFISITFIFAIFFGLQQSKVDKIAEDFAKNSTFIPGIKPGQETETYLTGI VLRLCFFSAFYLIIIGGMQFAQQLAGVPENISFGGTSVIILVTASYETIT >Q4A5I3_MYCS5/83-437 Q4A5I3.1 SIFALGISPFINASLIMMILQSRLFPMIYKLTQSGPQGRRKLNIATRILTFIIAYPQAVF LTKSLTAGERNSSFITLVSIDGFSVDLLVYFLLPMILISASLFALFLSEQITNKGVGNGT SIIIMTGIAARLPFQMQNAFKIFVGDLSQSGTLVGILNFVTYIFIYLACLMVIGIFYNAE RRIPIQQTGAGRSKALKEIGSLPIKLNPAGIMPIIFAMLVLSLPTLIANILPNDNYSKQW INENLQFYKPLGFSLLIIITFVFSLLMGIQQSKVDKIAEDFAKNGTFIPKVTPGEETQNY LVAIVFRLSFFSAFYLVIIAGMQYVQIMTGILQPSIAFGGTSLMILVSVSIETIS >Q98Q01_MYCPU/90-438 Q98Q01.1 SIVSLGINPFITASLIMTILQSKLFPPIQKMSQSGPLGRKKINVITRLLTLVFAFPQAIV LTQTLSRENGFISIDQEFKTIANIYVLLPLILVAGSLFTLFLSEQITDKGIGNGTSLIIF SGISLSLPSQFRAAFNVLVGTNKTTLFTGLIHFLLYLFGYLLLIVIIVFVYLAERRIPIQ QTGAGLSKNIKEMGSLPIKVNPAGIMPVIFSMIVISFPLLIAGLLDRSTSLVRLWIERHL AFTHPIGFSLLIIITFIFSIFMGLQQSKIDKISEDFNKSGTFIPGLRPGDQTENYLIDVV LRLSTFSAFYLSILVSIQYIMQMAGMPAAISFGGTSMMILVSVSLETID >Q4AAF9_MYCHJ/85-434 Q4AAF9.1 SVVALGISPFITASLFMLIAQTKLFPPIHRLSQSGPAGRRKINIITRFLTLLVAVIQAVV LIRTVILNPDYGFVRLEINTPVFIWLVLPLVLVAGSLFSLFLAEQITDKGVGNGTSLLIF SGIVVGLPRRFQHAFEYLVDLSFSSSLISQVLSFILYIFGFLLILLIAIYVYLAERKIPI QQTGSGMSKNIKEISILPLKLNPAGIMPVIFALIIVSLPTLFSGFLDRNTSAVRNWIDNN MQIYHPIGLIIFIVFNVSFSIIMSLQQSRVDKIAQDFAKNSTFIPGIRPGEQTEDYLISV VLRLSVFSAIYLTFLGILQPVEIMLGLPSAITISGTSIIILATTTLETIS >Q9PQP1_UREPA/76-434 Q9PQP1.1 SLFAIGIGPYITAQIIMQLLSSELVPPLAKLSKSGERGRKKIEVITRIITLPLAVMQAVI IINLMTRANGFISIVSNAPFAIGSPLFYVTYIFLMVGGTYISLFLADLISKKGVGNGITL LILTGIVASLFNHFIAIFSNLGSLTSSKVSQIIGFILYILFYIMILIGVVFVNNSTRKIP VQQTGQALILDHEKLPFLPIKIMTAGVMPVIFASSVLAIPAQVAEFLDKQSMGYYVIHNY FIVDSWTGLAIYVVLILLFTFFFSYVQLNPPKMAEDIKKAGRFIPGVQVGMDTEKHITKV IYRVNWIGAPILAFLACLPHLVALVAKTINHGIPVIQPSTIFGGTSIIIMVTATLELWN >SECY_MYCGE/81-430 P47416.1 SLFAVGISPYISAQIIMQLLSTDLIPPLSKLVNSGEVGRRKIEMITRIITLPFALVQAFA VIQIATNAGTGSSPISLANSGSEFIAFYIIAMTAGTYMAVFLGDTISKKGVGNGITLLIL SGILSQLPQGFIAAYNVLSGIVITLTPQLTAAISFFIYFLAFLVLLFATTFITQATRKIP IQQSGQGLVSEVKTLPYLPIKVNAAGVIPVIFASSIMSIPVTIAQFQPQTESRWFVEDYL SLSTPVGIFLYAVLVILFSFFYSYIQINPERLAKNFEKSGRFIPGIRPGNDTEKHIARVL IRINFIGAPFLTVIAIIPYIVSYFIRLPNSLSLGGTGIIIIVTAVVEFIS >Q8EUD2_MYCPE/81-433 Q8EUD2.1 SFMAIGVSPYITAQIIVQLLSSDLIKPLTRLSKAGERGKRKLEIITRLITIPFAIMQAYA VLSLAGTQGLVSSFFGQSALSSVPAGQIILLLLGMTAGTYLTIFISDIISKRGVGNGVTL IILSGIVASIYPNFTSVFQVLTGSSQISNQLLRYFSFAVYLVFFFLILLATTFVNGSVRK IPIQQIGQGLSKEVDEMPYLPIKLNAAGVIPVIFASSIMTIAPTISQFLPSGSAGSEFIN EYLSIERPVGLVIYTVLIVLFGFFYSHIQVNSEKLAENFQKSGKFIPGVKMGEETQKYIS KTLNRVNCIGVPFLACLAIVPYLITMTTGIPNGIAIGGTGVIIMVTGSLDFWS >Q7X4E3_9MOLU/69-399 Q7X4E3.1 CILSLGVIPYVTASIVIQLSQKVFTFMKEWQEQGEKGKRKINIVTRVLTIFLSLGHGWAL CQTEKLVLGPYLLFSTLFFLTVGVFISIWLADLITSKGLGNGISILIAVGMVDKLFKTFK YLLSNSNGFETQRILILVSYFVLLILTIILSSAYLKIPINYAXNRNNDKIDKYIPIKLNT SGILPIILADTLLNVIQQISMLFSKNGKVNEYIGIFVESRSELGIYFFVYILLIMLFSFF SSFMTINPKDVAEHLSKQNAYLKDVQPGLPTVKKIVREMFKITFLGSCFLTLLASTPDII NYLAGIKISQNIPFSGTSLLIIVGVALESIQ >Q5Q069_ASTYP/59-398 Q5Q069.1 TLFGLGITPYITASIVVQFLQKLLPICREWKDQGQMGKRKLNLLTRSLALFFAFGQSFAF LNSYSKLLVTSISTRQLFLLALIATAGVAILIWFADLINSKGIGNGTSILIVVSMSHSLI NLFANLNKSYLSKNTFLTLKTFNFACIVLLLLLFLIFTVVVQITSLKIPINYARNQSQGK SYIPLKINSAGVMPVILAFALLQPFQILAGVIGNDKLTKYVNLFTNTNSSNNQINFFAIG FLVLLVIVLSFFSAFMNVNPEDISEHLSKQDAYIAGLRPGEQTTRYLANTLFKITVLGTV FITALVVTPILMEHFLSLKDMKLGGTSLLIIVSVALETIQ >O21257_RECAM/57-372 O21257.1 SLFALNITPIITYLFLEQLYYIYSIPLISKKKNLNKDLIKKYSVYIFLMISYLEGFIYLN HLYNTTSSSFLIFYLDNTINYLLCLNFLVIGSCFLYFFAKLINIYGIGKGLSFIIFINIV GSFIDIFYKYLIQIETLNVKYLVFLLFVQCLFCGIIYFYIDFLFLKIPIIKLNFVGNEND NYNYLNYFQKYQTSSLNLLGILPFILVYSIIYMLKLNLNSFLDLVFNIFLEMLCMMFIYL FLSRFLKKYLKFIYNINKNNIYIEHINKNIYSIFFISHLYYLGILRDYCLFCFLFIFSKL FFIISYLFIEIDFSFF >Q74NB9_NANEQ/69-457 Q74NB9.1 SIVSLGIGPIIIGYLLAELFIGSGELNIDITTEEGKRKFENLARFFMIVFGLFESIVMAT IGWFKPSQFLISLFAMPFSFLGSNAFLIGYILAVLFIVAQLMLGVILAYLLDDLSQKWGF TSGINLFILATVSRELFVQLFNPLTQIPGTPTPPIGKIPQIFYFISQGLYTEAIVVGLQL LVIVLVILLSVYFYMVKIPIPTSFGKIPEKSLRYEVRLIYTGNIPVIFAFAFLHQILLIA WVLQQLGIPLLGTIENGHPINGLVAYIYPDTGFLISLILGNLTLDNLIRTITSSLFFLGS SILFSIYFVLATGQDSEGLAKQLSKMFGRIGLKRDYRIIKHYLDKIIPCVTVLGGFIVGF LALLSYWVSIPIGGTSILLATMISYMVYE >Q2EMT2_METVO/30-379 Q2EMT2.1 TLITLGIGPIVTAGIIMQLLIGSELVKLDMSKPDNRALFQGLQKAFGIFLCFLEAGMFVL AGAFGALTPMMSLALILQLAIGAILLIYLDEIVSRYGIGSGIGLFIAAGVSQTIFVGALG PQGYLWKFFSALVSGSMGPALEYILPILATIAVFFVVVYAESIRVEIPLAHGRVKGAVGK YPIKFIYVSNLPVILAAALFANFQLWGLVLYKIGFPLLGTYSNGRAIDGIAYYFSTPYGL SSVISDPIHAIVYTLFLIGFCVLFGLFWVETSGLDAKSMAQRLGGLNMAIKGFRKSNKSI ENRLKRYIKPITVMGSAFVGLLAALADFTGALGGGTGVLLTVSIVYRFYE >A5UL65_METS3/72-433 A5UL65.1 SILTLGIGPIVTASIVLQLLVGSKLLDLDLSSPEDKSQYQATQKILSIVFTMFEAGVLVL TGSLVPIDNSYLGVLFLQLVIGAILIIYLDEVISKWGFGSGIGLFIAAGVCEAIIVGTFS FIPGPGGVYGGAIPAFIQSFWSSSIDFSVLIPLIATAAVFFVVVYGESMRVEIPISHGSV RGHGRIRGSVGKYPLKFVYASNMPVILTSALLVNVSLLASVFQKIGFPILGEIVNGKAVS GIALYLSTPNDVSLLVTDPVRVIVYAFFFLLCAVLFSYLWVEISGLNAKKISEQLYKSGI QIPGFRSSKRQLYKILKKYIPALTIISGLYVGIIAFCADLTGALGGGTGVLLTVGIIHKI YE >SECY_METTH/73-436 O26134.1 SILTLGIGPIVSASIILQLLVGGKILKLDLSRHEDKAFFQGLQKLLAIVFTFFEALIFVL TGSLAPSAPQFVWVLILQLTIGGILIIFLDEVVSKWGFGSGVGLFIAAGVSQEIIVGAFN PLSAPTQPGVPAGRITGFLYLLFTGQSPDFQYYVLPVLALIAVFLVVVYAESMRVEIPIS MGGGKRLSRGAVGKYPLRFIYASNMPVILTSALLLNVQLLANVFQKLGYPILGTVSNGQA VDGLAYLLTAPRSIDALILDPFRVVFYAVVFIGLCVLFAWLWVEISNIGPRHVARQLYQM GMQIPGFRSSRGQFEKILKRYIPTITILGGAFVGLLAFVADLTGSLGGGTGVLLTVGIVY RLYE >SECY_PYRAB/72-448 Q9V1V8.1 SILTLGIGPIVTAGIILQLLVGSEIIKLDLANPEDRRFYQALQRVFSVFMCFLEAAIWVL GGAFGRVGVDVTYAIAALMILQLAFGGIILIVLDELVSKWGIGSGISLFIAAGVSQRILT RSLNPLTDPNIIDPLTGKPAIVGAIPYFIQHILKGDLKGALYRGGTAPDMMAVIATIIVF LVVVYFESMRVEIPLGYRGVTIRGRYPIRFLYVSNIPIILTFALYANIQLWARVLDRLGH PWLGTFDPTTGNPVGGFVLYVIPPRSIFTVIDNPVRALVYLILTVISSLIFGFLWVELTG LDARTIARQLQRAGLQIPGFRRDPRTLERVLQKYIPYVTFWGSLTVALIAVLADFLGALG TGTGILLTVGILYRFYE >Q8TZA9_METKA/75-435 Q8TZA9.1 SILTLGIGPIVTASILLQLLVGGDLIKLDLTNPEDRRLFQGLQKLLAIVLCFFEGVMMVF SGAAPPAEPSILLEILLILQLALGGILVIFLDEVVSKWGIGSGVGLFIVAGVSSQIIIGA FNPLPSPQQPGRPAGAVWAFLYSAMQGTPDWTLLAPVIGAIITFLIVLYVEGMRVEIPIA FAGIRGARGRFPVRLLYTSNIPVILASALFMNVRLWALAFQRMGVPILGKLDPRGQPISG LVYYLSPPNSIVKTLSDPLQALGYMMAMVIASVFFAVLWVELTGMGPREIARHLHRAGLH IPGFRRDIRVLEKRLQKYIYPVTVMGGAFVGFLAAGADLMGALGGGTGVLLTVSILYNMY E >Q9HIT0_THEAC/82-514 Q9HIT0.1 SLMDLGIGPIVTASIVMQLFVGAKIFNLDLQNAEDKAIYQGVQKLLVIIMIFVEAIPQAF GYLVPDTKVVNSINAVFPGYGEFLAQTIIILQLFFGSYLVFLMDEVVSKYGIGSGISLFI AADVSEQLFIGAFNWQALNNALTYSLTNPPAGAFPKMFYIIMHSSSSYLLTNGVVQILFS PPNPMIAVLGTLLIFFLVAYFQSSKIELPISHERVRGARGRYPLQLLYASNIPVILATAL LANVSMWTLLFWSSPVLSKVPILGHNPLLGSYPTTAQATALNISATTPTGGLAYYLFSPN GLSDWLFPILQPSGYQNILLGHTPLQEAIHIIVFTAFMVGFSVLFAIFWIETTNMGASAV AKQIQASGMQIPGFRRDPRVMERVLKKYIPAITIFSGAVVGLLAAGANLIGTVGDTSGTG LLLAVGIIIQFYE >Q2QAQ7_9EURY/161-583 Q2QAQ7.1 SIMHLGIGPIVTGSIIMQLFAGAKIIKLDLGDSDDKQLYQGVQKILVLIMIPVESIPQVY GFLDASPALVSDFGQGWANAIIVSQLFIGSLLVFLLDELVSKWGIGSGISLFIAAGVAQS TFVGTLSPLAVNPGAYGLQNPPAGTLPMIFYTLRTATFSEMVTANGFESILLGDAAHPNA VVALFSSVVVFLVVAYAESSKLELPLTHGKVRGHRGQYPIRLVYASNIPVILMAALLANL NMFTLLFWSHPTMSTVPILGSQGAWSIAPYLGSYDVGQTQATDGFAWYASMVNGVGDWLL PLLNQSPDPYGHSLWQVVLHVITYVTVMTLGSMMFAKFWIETTNMGAKDVAKQIENTGMQ IPGFRKNPKVLERILMRYIPPVTLFSGAFVGLLAAGADLLGTVGNATGTGLLLAVGIILR TYE >Q0W1W5_UNCMA/75-487 Q0W1W5.1 SIILLGIGPIVMASIVLQLLVGAELIPLDTTDPKDQAIFQGLQKLMVFVMIVVEALPQIY GGFLLPDPAIAATLGVSTGIIQLLIFAQVALGGVLILYMDEIVSKWGIGSGVSLFIVAGI AQALVGGIFNWNPPYPGQAMGLNVDIAGLGARENLPIGIIFRWEWLLNNIGLSQLLTGEN LIVLLYQGEILALLATIIIFLLIVYVESTRIEIPLAHAAVRGARGKFPVKLIYASVLPMI LVRSLQATLEMVGLLLYRNGITFLGTFNQYNQPVDGLMFYINPINGLSDWVPQLAALNYP GIQLWQIALHVFTDAFILIAGGILFAIFWVETTGMGASRVARQIQKSGMQIPGFRRNEQV IEKVVSRYIPKVTVIGGAFVGFLTLLSSLFGILGAVSGTGMLLAVSITYQLYE >SECY_ARCFU/73-471 O28377.1 SIIALGIGPIVTASIILQLLVGAGIIKLDLTNPEDRAAYQDFQRFLVFVMIAVEAIPQIA GGLLKPDLNLAAQLGVSPGIISFLIFIQLFIGGVLIVYMDEVVSKWGIGSGVSLFILAGI AQSIVVGLFNWVIPPNSAMPAGIIPRWIWIAQNYPLDQLFTGSGLAFLLIQGGILALITT AAIILLVVFFEGTRVEIPLAHAVARGARGRFPIKLIYASVLPMIFVRALQANVVALGQVL HARGVTIFGEFVNGKAVSGLMFFLQPVSSPYDWIPSLVKSQGAAFAAIPDWMIYLHLLID ALILVVGGIIFAWFWVETSGMDARTVASQIAKSGMQVPGFRKSPQVLERVLSRYIPKVTI LGGAIIGILTLVANMLGTIGNVSGTGLLLAVSIAYRFYE >Q8TRS4_METAC/72-470 Q8TRS4.1 SLVLLGIGPIVTASIVLQLLVGADIIKMDLSDPKDQAFFQGAQKFLVFVMIILEALPQLL GGYIQPDPGLAATLNVGLGVITLLLLVQIFIGGTLILFMDEVVSKWGIGSGVGLFIVAGI SQQIVTGIFNWEFEEGLPVGLIPKWIYIAQNTGADYLFSGEGLMFLLVRGGILALLSTVA IFLLVVYVESTRIEIPLAHSAVRGARGRFPVKLIYASVLPMILVRALQANIQMVGIILAS RGITFLGEFSGSKPLNGIMYYLAPIHSPYDWIPSLVRESFASYGATAPAIWQIGLHVLAD AIMLIGGGIIFALFWIETTGMGAKPTAQKIFNSGMQIPGFRRNIGSIEKVMQRYIPKVTV IGGAFIGILTLVASLLGTLGSAGGTGLLLTVSIVYRLYE >A0B9U7_METTP/75-515 A0B9U7.1 SLMLLGIGPIVTASIVLQLLVGAEIIKLNLRDPRDQAIFQGTQKALVFVMIVVEALPQIT GGYLLPDQALATSLGVSLSIISLIIFLQVCLGGVLILYMDEVVSKWGIGSGVGLFIVAGV SQQLVTGLFNWATGDGGLPIGIVPKWISIIRLGLIGLDEIFTAEGLKFIFVTGGLLALIS TVGIILLVVLVESTRIEIPLAHSRVRGARGRFPVKLVYASVLPMILVRALQANIEMLGAL LTAKLGTVTTAETTAEGVRIVYTGYQSWLGTFLSSAKFDAATGAPISATSPQPVSGLMYY LSPIHGPSDWIPSMVSQSTPGLVELGINPIAGWQIWLHLLTDTAFLIIGGIIFAIFWIET TGMGAKSIAAKIHASGLQIPGYRRSPVSIERLMERYIPKVTVIGGAIIGLLTVIASLLGT LGGAGGTGLLLAVSIMYRLYE >SECY_HALMA/73-468 P28542.2 SIMQLGIGPIVTASIVLQLLGGADLLGLNTQDDPRDQILYQGLQKLLVLVMICLTGLPMV FAGGFLPADTAVANSLGIGTAGVQWLIFAQMFVGGVLILFMDEVISKWGVGSGIGLFIVA GVSQRLVGGLLTAPFLGNSEGIIYTWYLFITGERGTGPVLAADGLQTVLLQGELLGLFTT VLIFAVVVYAESVRVEIPLSNARVKGARGRFPVKLIYASVLPMILVRALQANIQFLGRIL NAQLGSMPAFLGTYANGQPTGGLFYFLAPIQSRGDWMWWLEGTAQPVWQILTRVGIDLFV MLVGGAVFAVFWVETTDMGPEATAKQIHNSGMQIPGFRQNVGVIEKVLERYIPQVTVIGG ALVGLLAVMANMLGTIGGVSGTGLLLTVSITYKLYE >Q2FSG8_METHJ/73-458 Q2FSG8.1 SIVHLGIGPIVTASIVLQLLKGADLIHIDTSEIRGQIQYMGLQKLMIFIMIVVEALPMIV GGFLKPDPAIASALFGGNSGVLAILIFIQICIGGVLIFLMDEVVTKWGIGSGVGLFIIAG ISEAIINGFINWAPVNDMYPVGFFPRLFAVVLDGANFIQYFGTDLIAFITTIAIFILIVY VESTRVEIPLAHTQVRGARARFPVKLIYASVLPMILVRVLQANVQMIGLFLNNIGITIFG TFEGQTPTGGLMWYLAPINHPSDWMWWMPSYVGGHAPWEVLIRLGIDTTIMVVGGAIFAL FWVKTAGLDSKAVARQIQLSGMSIPGYRRNPAVLEKVLDRYIPRVTVIGGVFIGIMSVVA NLFGVIGAVSGTGLLLTVSITYRLYE >A2SPM5_METLZ/73-458 A2SPM5.1 TILHLGIGPIVTASIVLQLLRGADLIKINTSDQRGQVLYMGLQKVLIFVMIILEALPNVL GGWMSADPAVSAFFGGNAGFVMLLIFLQICIGGVLVMFMDEVVSKWGIGSGVGLFIVAGV AQGLINGFFNWEATTDQFAVGFFPRLFQVIADGSNFIEYFGLQLLALVTTVGLFFIIVYV ESTRIEIPLAHANVRGARSRFPVKLVYASVLPMILVRVLQANVQMIGMFLSSIGFTALGE YNGSTPINGLMWYLAPINQPQDWMWWLSSFTGTGHAVWEVILRVGIDCTVMILGGALFAI FWVKTAGLDSKHVARQIQNSGMQIPGYRRSPAVLERYLDRYIPRVTVIGGVFIGLLSVMA NMLGIIGFVGGTGLLLTVSIIYRLYE >A0RUE4_CENSY/79-457 A0RUE4.1 TLVELGIGPIVTAGLLMQLLRGSEILKFDFKKPEERGIFQTATKMVSYVVIVVESSIYGI AVYGPGIADPSVLYILIGQLMASSIIIMFLDELIQKGWGLGSGISLFIMAGVAQQILWSL FSPLPAGDGFAVGIFPFIGQWASVGMGNFEDIFFRYNQLPSIFGLLLTGGVLLILVYTQG MKIEIPIVSTKYRGFSATYPIKLMYVSNIPVILASALTANAIFIGQMFWSNFNPRNDNIF LNVLAQFDLTNPSTPIGGIVYYITPPRGLDIAALDPMRAVGYVLFMIGIVVVFGKLWVEL GGLSPKSAAKNLLDADVQIPGFRRSNQPIEVLLNKYIPSVTIIGSMILGALAGASDVLGV FGSGIGILLMVDILINYYN >A8ME75_CALMQ/77-461 A8ME75.1 TLAQLGIGPIIIAGIIMELVAFSELMDVDLNDPKDQARFTALTKLVAVIIAMFEGAFIMS THQLTVANAGLAFIVWLQMLFGAVIVILLDDLISKGWGIGSGISLFILISIIRSIFQSTF MPVTVGAGELLGIIPALVAAVYSAAVSHTLAPLLSIVYRFNLPGLIGLIATIVLGGFIAY VELMEVRIPLSFVQYGGYKMSYPFKVMYVSVLPIIFTAYTVALIYNGLYFIWTTYNPHNA NALLNSIACIRVITTAKFGTINEPCPSSLIYYFTVVPYNITPQYVVVHILMYVVLSVVFA YLWVNLAGLSAEDQARTMVSSGLSIPGFRASARSLAVHLKRYVNSLTFTSGLLAGFIAAL GDVLGVYGTGIGLILMVEIIIQYYT >A3MUZ2_PYRCJ/70-435 A3MUZ2.1 TLAHLGIGPIVIAGILMEVFAFSGVLNLDLNKREDRLKFTLMLKWAALGIAALEATAYVL GGQFGTVTPLGGVLIVLQLLLATVIILLLDDLMSKGWGIGSAISLIIFLGVSRQIFLSLF SWDTVQDSNGNTQVFGLLPALGVALYDLFTSGNANTLLGLVNRPLTVNTYLPDFVGLVAT ILLGYIILYLEMMKVNIPVASAQYRGIKFTIPLRFVYVSVLPIIFTTYSLLLVGQLLQPF AANNPALITVLNVIFLPHRYFDPLLIILNFALYVALAIAFAWIWVQLAGLSAEDQARQFT QSQLHVPGFRQSERVLAKILERPINALTIISGFIAGTFASLGNVLGVWGGGVGLILLVEI ALQYYA >SECY_SULSO/73-449 Q9UX84.1 TLAQLGIGPIITAGLIMQILAGSKLISIDLNDPDDRVKFTEAQKGLAFIFILVESALFGY VLARTSTTINASILFIAGIVIAQLIVATYLILLLDELIQKGWGLGSGVSLFILAGVMKIM FWDMFGIASVSSQNLPIGFFPALFTALASHSDVLNLIVNTSTKNLFQPDLVGLVTTIALI IITIYLTTMTIEIPVTSQKLRGIRRTIPLNFLYVSSIPVIFVAVLGSDIQLFASLASYVS PSASNILNTVSGVFFFPPPNSAIPHSIYAVVLDPLGALEYAVVFIVLSILFGILWVDVAG LDPATQAQQLVEAGIEIPGVRNNPKIIEGILARYIYPLAFFSSIIVGLIAVFATLLGAYG TGIGILLAVTIAIQYYS >SECY_SULAC/74-443 P49978.1 TLAQLGIGPVITSGLIMQILVGSKLINVDLTTQEGKSKFTQAEKALALIFIIVESSLFGY VFTRATSNILLPIIVVVQLIIASYIILLLDEMIQKGWGLGSGVSLFIMAGIMKVIFWNMF GIVSVQSQNLPVGFFPLLVSYITSGRNLQEIVLNTSSTTPYQPDLIGLIATVGLTILIVY LVNTNIYIPVTTQRLRGIRTTVPLNFLYVSSIPVIFVSVLGADIQLFASLANSISNSASG ILTDIANAFFFPPQGVPHSVYALVVDPVGAAIYAAVFIVLSIVFGMLWIDVAGLDPKTQA EQMIRSGIEIPGMRTNPRIIEGILSKYIYALGFFSSLIVGLIAVVATFLGTYGTGVGLLL AITIAMQYYN >A2BME2_HYPBU/73-444 A2BME2.1 TLMTLGIGPIVTAGIVLEVLVGGKLIELDLTKPRDRKIFMGAQRTLALLFALLEAAAYVI GCRFWISAFASSPEVCPPISTAVKIIVVLQLVFATLVLMWFDEMIRNGWGIGSALSLFIV ASVVKGLFWQLAGSTKVATPEGQPVYYGWLAHVVSTGDLGVLRRGMPDMVGFLATIAIIM VLIYFQLMRVYIPVTSPRYGSIKTRIPLNFIYVTNIPILFVAIAVSDIKVFEIVIASLLG ADNPLVRGMDVLYNYVSPPRGLLAAVADPLRTLTFALAWLALGLLFGFIWVEIAGLSPRQ QAENLIKSGMELPGIRKNVKLLERILARYIYPLTVISSLLVTTMAILADVFGAYGTGSGL VLLVGIIYNFYQ >SECY_AERPE/73-434 Q9YDD0.2 TLMELGIGPIVTASLIIQVLVGAKIIKLDLADPEGRRKFTSAQKVLALAFAALEAVAFTV GGRYWVGTAIEPGPLDYALVSLQLFLGALLVIYFDEVMQKGWGIGSAISLFILAGVAQGV VWSIFGTIPGVAQDYGLVPAIISNPDLTLLARPNGFPDLTGFFTTLAAIILLVYLQAMRV EIPITSERFKGIRSRVPLQFIYVTNIPILLVGILVSDLLLVQRLLADYLGVESRAYQIYS SIVYYLSPPRGVVQSIADPVKTAVFIASWTVLSIVFGYMWVEIAGLNPREQAERLIKGGL AIPGMRSDPRVLERVLRRYIYPLTFLSSLIVAALVIVADIFGAYGTGTGLLLAVGIINQY YA >A1RWR3_THEPD/75-456 A1RWR3.1 TLIELGIGPIVTSGIVWELLVGSRIVNLDLTTPEGRRTFAGLQKLTAFLFAALEAAAYIL GGVYGALTQQQQIIVFVQLFVASTFVILMNDMLEKGWGIGSAVSLFIAAGVAQQIFWELF SPIGPLGDGLYYGLFPSLFSALVSGNSTLLMHVVVRPSGYPDLVGFVGMVVMLLLLTYME SMKITIPVSSVRFGGAKTRIPLKFLYVSVMPVILVGALYANVVMFTQALWPRVNPGNQNP WLNVIAKYNYTEYGPVPLPGSFVYYISPPRSLASALADPVHLVVYSLLYIGFAVLFGVAW ILTSGMDPETQAEQLAKAQLQIPGFRKSEKVIASMLKRYIWGLTILSSIIIGVIAVVSDI FRVMGGGTGILLLVGIIVQYYS >SC61A_SCHPO/76-459 P79088.1 TLMELGISPIVTSSMLVQLLVGSQLIEVNMELKSDREMYQLVQKFLAIIIAFGQATAYVL TGMYGRPQDLGAGICLLLILQLAAASLIVLLLDELLQKGYGLGSGISLFIATINCENIFW KAFSPTTYHIANGVQFEGAVINFVYVMFTWDNKAAALYQAFFRSGLTSSQIQLPNLWNFF ATLLVFGVVIYLQDFRVEIPIRSQKFRGYRSTFPVKLLYTSNTPIMLQSALTSNLFFASR LLFNRFSSNFLVRFLGVWEQTATSGLSYYLSPPASFQDALIDPIHTLVYVFFTMFACALF SKLWIEVSGASPRDVAKQLKSQQLVMAGHREGSMYKELKRIIPTAAWLSGAVVGALAVAS DLLGALGSGTAVLLCTTTIYGYYE >A7E5Q2_SCLS1/76-459 A7E5Q2.1 TLMELGITPIISSGMVFQLLAGTHLIDVNLDLKADRELYQTAQKLFAIILSMGQATVYVF TGLYGQPSDLGAGVVCLLILQLVVAGLIVILLDELLQKGYGLGSGISLFIATNICESIIW KAFSPTTINTGRGPEFEGAVIALFHLLLTWPNKQRALQEAFYRQSLPNIMNLLATIVVFA AVIYLQGFRVEIPVKSSRQRGARGSYPVRLFYTSNMPIMLQSALSSNIFLISQMLYSRFS ENLLVQLFGVWEPKEGSAQLFATSGIAYYMSPPLNFTDALLDPIHTAVYITYMLVACAIF SKTWIEVSGSSPRDVAKQLKDQGLVMAGHREQSMYKELKRIIPTAAAFGGACIGALSVGS DLLGALGSGTGILLAVTIIYGYFE >Q5KC69_CRYNE/75-459 Q5KC69.1 TLMELGITPIVTSGMIMQLLAGAQLIDVDFSLKDDRALFGAAQKLFAMIISLGQATVYVL TGLYGSPSSLGAGVCLLLILQLVSASLIVILLDELLTKGYGLGSGISLFIATNICESIVW KAFSPNTVNTGRGPEFEGAIIALIHLLFTWNDKTRALKEAFYRDRLPNIMNLLATVAVFA AVIYLQGFRIEIPIKSSKMRGQRGTYPVKLFYTSNMPIMLQSALTSNVFLVSQMLAGRFP DNLLVRLLGVWEPMENNPTQLGAVSGIAYYMSAPHSLTSALKDPFHTVIYIAFIVTACAL FSKTWIEVSGSGPRDVAKQLKDQNMTLAGHRDASIYKELKRIIPTAAAFGGATLGLLSVV ADMMGALGSGTGILMATTIIYGYFE >SC61A_ASHGO/75-460 Q752H7.1 TLMELGVSPIITSSMIFQFLQGTQLLQVNLESKQDRELFQIAQKVCAIVLTLGQAIVVVL TGNYGSVSNLGIAISLLLILQLVFASFIVLLLDELLIKGYGLGSGISLFTATNIAEQIFW KAFAPTTVNNGRGTEFEGAVVALFHLLSVRKDKKRALVEAFYRDYLPNMFQVLSTVFVFL FVLYLQGFRYELPVRSTRTRGQVGSYPIKLFYTSNTPIMLQSALTSNIFLTSQLLYQKFP NNPIVKMLGVWGTRSDAPYSPNAAISGLSYYIQPPFSFTEALLDPIKTVVYVTFVLGACA MFSRTWIDVSGTSPRDVSKQFKEQGLVINGRRETSVYRELKKVIPTAAAFGGATIGALSV GSDLLGTLGSGTSILMATTTIYGYYE >Q59MJ6_CANAL/76-459 Q59MJ6.1 TLMELGISPIVSSGMLFQLLQGTKIIHVDMQNKNDRETFQTAQKLLAILLAVGQATVYVL TGMYGPPSSLGVGVCSLLILQLVFASTIVILLDELLQKGYGLGSGVSLFTATNTCEQVFW KAFAPTTSTSAKGTEFDGAVVAMFHLLGSRKDKKRALIESFYRPNLPNMFQLLATLLVFF AVVYLQGFRIELPMKSTRQRGPYGSYPIRLFYTSNIPIMLESALASNIFIISQLLFMRWP NNLFVKLLGTWDARAGSSQLYANGGLAYYIQPPFNFTDALLDPIKTTIYIAFVLGSCAVF STTWIEISGTSPRDVAKQFKEQGLVIAGHRDTSAYKELKKIIPIAAAFGGATIGALSVVC DLMGTLGSGTSILLAVTTIYGYYE >A7SJW4_NEMVE/75-458 A7SJW4.1 TLMELGISPIVTSGLIMQLLAGSKIIEVGDTPKDRALFNGAQKLFGIIITIGQAVVYVMT GMYGDPSDLGPGICLLIIIQLFCAGLIVLLLDELLQKGYGLGSGISLFIATNICETIVWK AFSPATINTGRGTEFEGAVIALFHLLATRTDKVRGLREAFYRQNLPNLTNLIATIFVFGI VIYFQGFRVDLPIKSARYRGQYSSYPIKLFYTSNIPIILQSALVSNIYVISQMMSAKFAG NFFVNLLGTWEEAGGGPARSYPVGGLCYYMSPPETVSHIIEDPVHACIYIFFMLGSCAFF SKTWIDVSGSSAKDVAKQLKDQQMVMRGHRDKSMVHELNRYIPTAAAFGGLCIGALSVLA DFLGAIGSGTGILLAVTIIYQYFE >A0CFY2_PARTE/73-456 A0CFY2.1 TLMELGISPIVTSGMILQFLSGVGFIEVNHSVREDKVLFNAAQKLLSFIMAIAEGMAYIW SGAYGDINQIGAGNAILILLQLTFAGVIVTMLDEMLQKGYGLGSGISLFIATNVSENILW KSFSPITLSTEAGTQFEGAIINFFHLLFTKQNTLQALYYAFFRESAPNLNNLLATLFVIS LVIYLQGFRVEVPLASQKIRGLVSSHGIKLFYTSNIPMIIQSTLVQNVYFLSQLLYRRFK TNFFVKLLGTWQEAEFGGQSVPIGGLAYYMSPLRDVKDIINDPIHAVVYVLFVVFMCGFF AKFWIQISGESAKDVARKFKDEQIKIKGLREESMVKYLSGYIPVAAFCGGVCIGLLTIVA DILGAIGSGTGILLAVTIIYGYFE >Q22MG2_TETTH/151-538 Q22MG2.2 TIMELGISPTVTAGMVMQLLVGAQILNIDQNDPVQRSLYEGSQKLLGLIIAFFEAVAYVW SGMYGDIEKVGYGNALLIVLQLTFAGIIVILLDDLLSKGHGLGNSAISVFIAINICETII WKSFSPITYPIPGFEKEQYEGAILNLFHSLFAIDNKFVALQNAFYRSHLPNLASLISTAL IFIVVVYFQGFKVDIALKNDRVRGAIQSYPIKLFYTSNMPIILQSALISNLYFFSQILYR NFNGNFIVGLLGKWSIPEAGGSHMVPVGGLVYYLSPPHGMIEVISDPLHTILYVVFILTT CALFSKTWIQVSGSSVKDVAKQLKEQGMGLVGSRDSGLKSHLKRYIPIAATFGGLCIGAL SVVADFIGVIGSGTGILLAVNIVYGYFE >A0CU87_PARTE/77-460 A0CU87.1 TLMELGISPMVTASMIMQLLAGAKLIDVDQNVKEDKQLYSGAQKLLGILIAFGEAFAYVW SGMYGDLDKLGAGNAILIIIQLVFSAIVMIMIDELLSKGYGIGNSGTSLFIAINICENIM WKAFSPITHKTELGLEYEGAIIALLHGLFVQSDKISALQSAILRDSLPNLTNLLATVLVF LIVIYFQGFKVDIPIKNNKVRGGLTSYPIKLFYTSNIPIILQTALVSNLYFLSQILYRNF KGNFLIRLLGYYQELENGQTVPIGGLVYYVSPPRSISEAIFDPIHTILYTAFILGTCAVF SKTWIDVSGSSPKDVAKQLKEQDMQIVGYRDSSMKDVLKRYIPIAASFGGMCIGALTILA DFLGAIGSGTGILLSVTIIYGYFE >Q7RLN0_PLAYO/121-506 Q7RLN0.1 TLMELGISPIVTSGMVMQLLAGSKIIDVDQSLKEDRTLFQGAQKLLGLLITLGEAIAYVV SGIYGNLSEIGTGHAILIILQLFFAGVVVILLDELLQKGYGLGSGISLFIATNICETIMW KSFSPTTINTDKGIEFEGAIISLIYCLFTEFNKISALKKSFYRTHAPNVTNLLATILVFL IVIYLQGFRVDLSVKYQTVRGQQGTYPIKLFYTSNIPIILQTALVSNLYFFSQILYKRFS NSILVNILGQWQEIESNGTAVPIGGIAYYISPPNSFADITNDPFHTLIYISFVLVSCAFF SKTWIEVSGSSAKDVAKQLRDQHIGMRGHRDTPTSLTRVFNRYIPTAAAFGGMCIGALTI LADFLGALGSGTGILLAVTIIYQFYE >Q4QGX4_LEIMA/77-467 Q4QGX4.1 TLMELGISPIVSASLILELLAGVRILTYDQNNREERAVFEGFQKMMGLVITAVEAVAYVS SGMYGDPSRIGVVMCGLIVLQLMVATMICILLDELLQKGWGIGSGTSLFIATNVCDTIIW KAFSPSTINTGRGAEFEGAIIAFFHLLVSRTDKVRALREAFYRPQLPNLTNIFSTAVVFA VVVFFQGFRVPLMTKSKFNGNDRQPYMIKLFYTSNMPIILQTSVVSNISFFSQILSRRFG NRNFLINLLGRWEERGYNGGGSGQLFPVGGLAYYLVPPATFYDLLADPIHAIFYVVFVLT SCAVFSRLWITISHTAPRDVAKQLASQGRWLVQARESEDDMTRLLEKYIPVAASFGGLCV GALTIFADFLGAIGSGTGILLSVTMINQYYE >A5JEK2_NOSBO/75-457 A5JEK2.1 TLMDLGISPVVTASMIMQFLGMLELVKVDYNVKEDKILHGAANRLISLIMTVGSAIVQVL TGFYGDPKALGWTYCILLMVQLIFSGVIIILLDELLQKGYGLGNGVNLFIASNVCESIMW RAFSPKVFFTGRGIEFEGSLIAFFHLLIVRKNKFAALYEAFFRQNLPNMFSLVSTVVLFA FVIYLQGLRVELKTESTQVRGQTGMYPVKLLYSSTMPIIVQSYVISHICTISRFLYKRFP TYFLVRALGVWSSEGSSKYQPIKGLCYYILPPESIFDFKLRPFYFLFYVLFTIISCSMLS RAWVEVSDNTPTQVASQMKKNKMTLKGVREVNCASVLSKYIPTAALLGGCFTSLVVLISN LFDTIGSGTNIFLATSIVHQYLE >A2DH65_TRIVA/75-462 A2DH65.1 SLMEFGISPIVTSGMILQFLCSFGLINRNPSDPEASALFDAAQKLAGIIMTAFQAGNAIW SGEYGIRGEIGFVNAALIMTQLVSSAIVVILLDELCQNGYGIGSGISLFICTNICEMIMW RLFSFNHYSMGRGTEYEGLVIAFFHYLFTRKNKLRALRDIVFRPQLPNLCQLFSTVIVFG ACVYFDQIKINIGLETTVNRARPEPFEIKLFYCSNTPPIIQSTILSQLAGFSRTIYFHWP ESLATQIFGVWRSHNGMSYDYSTPVSGLIYYLTAPQSIQQTIHDPLHTIIYLIFSLSSAG FISYYYLRFSNQAPADVAEALKKQHLTLKGHREDQKRLEKTLSRYIPTAAALGGILVALL SFVADFLSAFGSGTGIILAVSIINQFTA >Q2QM98_ORYSJ/88-448 Q2QM98.2 TVMELGVAPVVTSWVVVRLLAALLFDSDSSTTVASCELLARCLAYVTNASRLVIGIAAAL GMCGSGGAGNAALVVLQLFAGGVVVVLADLLHETGYGVEGVSAASLLIATNACERAVSHL FSPVKLRLAGAGPEFEGPVFAVTHRVAAAPPSWRHKAGALLFTLLRLDLPNLSNYMTTCV MFVLAVRLDETHLRRLYRSRPRRGTDEFVPIKLLYTSAMPIMLHASAVSAFCVDAGGGAA YPVGGLVYYVTPPSKLLVDPGLIHELLIHSVFVVASCTLLSMAWAEASRSSAREFRTRVI GTGYFVWDETSRRIDRVIAAAAAVGGFAVGGLAVYAGAVGAIGEAGPELLFAVLVIKNLA E >Q6AV46_ORYSJ/86-471 Q6AV46.1 TVMELGITPVVTAGTLVQLLVGSNLVRADSSNPDDRALLSAAQKLLSIVITAGEATAYVL SGAYGSVGVLGAGNAVLVVLQLVLGGMVAIFLDELLQKGYGFGSGISLFTAANTCEGVVT RALSPATMDRGRGAEFVGAVTAAAHLLATRARKLSAVREAFFRGGGGGSLPDLRGLAATC AVFLAAVYLQGVRVALPVRPRNAPRSHRGGAYSVRLLYTSGMPVVLLSSAVSSLYVVSQA LYRRFGGSLLVDLLGKWTPDAAVPVGGIAYYVTAPASAASAAANPLHAAMYVAFVLAACA ALSRAWVVVSGSSSRDVARRLREQQMVMPGMREASMQRELERYIPAAAALGGVCVGALTV AADLMGAVGSGAGMLLAVTTVYQCYE >Q6C854_YARLI/70-454 Q6C854.2 TLMELGVGPMVTSGIIFQILGGFQALNVNFDIRADRELFQSGQKIFALLLTFFHAIFLVF FAQTYGTISTDSAVSELSLGAAVLIVAQLTAAGLVLILLGEIVDKGYSFGSGSGLFTALS VSQNFMWQNLALLKVHQEFVGSIPALLMGLWKNGLFNFGGSYRYVIENSFFRQNLPNLLQ LYMSVAVFMLTIYLNTFRVDIPIKSSRVRSLATAFPVKLLYTGSMCLFLLSAFSQNVLIY SQSLYVQFPDNLMVQVLGSWGADGSPVGGIAYYISPNNFGYDVIKMVLYSVYTIVGCTLF SKYWAEISGSAPKDVAKQFQAQSIVIVGQRAQSAPRELAKVIPVAAAVGGAVVGAIVAFC DIFGGLGASAAPMIVAVTSMNNYFE >SSH1_YEAST/78-465 P38353.1 TLLEFGLFPNISSGLILQLLAGLKVIKVNFKIQSDRELFQSLTKVFAIVQYVILTNIFIF AGYFGDDLSVVQIGLINFQLVGAGIFTTLLAEVIDKGFGFSSGAMIINTVVIATNLVADT FGVSQIKVGEDDQTEAQGALINLIQGLRSKHKTFIGGIISAFNRDYLPNLTTTIIVLAIA IIVCYLQSVRVELPIRSTRARGTNNVYPIKLLYTGCLSVLFSYTILFYIHIFAFVLIQLV AKNEPTHIICKIMGHYENANNLLAVPTFPLSLLAPPTSFFKGVTQQPLTFITYSAFILVT GIWFADKWQAISGSSARDVALEFKDQGITLMGRREQNVAKELNKVIPIAAVTGASVLSLI TVIGESLGLKGKAAGIVVGIAGGFSLLE >Q6BT20_DEBHA/78-475 Q6BT20.2 TLLELGLLPVLTSAFIWQLSAGFRFINVNLNLRSDRELYQSGQKLTSFIFAIVYGAGYIF SGYYNNVIKGYNPFNGDSVPVTTLVLIFLQIVTMSFVTTLMVEIFDKGYCFGSGVLCFVA LQVATNLIRDVVGLELVSLPNSNKFESYGAAMNFIKNFRINFKSLNYNVLNSFTRSQLPN LSQFYIVLVTVLVLIGVQNYRIELPIRSTKVRGMNNVYPIRLFYTGALPILFAFTVLTNL QVFGYFTSTLLNNYSQLAASIIGTWSLDTKSFNLNLTSGILYFLTPSKSLAQSLLSPIRS VTYGLAIITLSTWFAYRWSRISGSSPKDISKQFKEQGISISGKRDISITKELSRVIPVAS VSGAFVLAALAIAGELLGGLGKGVAAIIGVCGAFGILE >A5DE75_PICGU/20-414 A5DE75.1 TLLELGLLPVMTSAFLWQLAAGLRLVKVNLSLRSERELFQTGQKLTSFILGIVYTAGLIA SGYFAPALRNQTGFEDSFPVTTYVFIFLQVFVMSAVMTLLVEVFDKGYGFGSGILCFIAL QAASDLVKNIIGLEVVKLANSNKFESVGALMNLIRSFSFKTLGKNIYNSFNREHLPNLTQ VYITIVTLLVVVALQNFRIELPIRSTRARGMNNVFPIRLLYTGALPLAFAYTVLTNLQVL GYIASQLLESYSPVASSVIGKWTIDYRSSNLKVSSGILYFLSPPTSILNTLVSPLKTAAF TFVVIVLSAWFANIWSSISGSSPKDISKQFKEQGISIAGKRDISITKELSRVIPVASVSG ATVLGLIAVAGEVLGGAGKGVGTIIGVSAAFGVLE >A3GFV9_PICST/78-476 A3GFV9.2 TLFELGVLPVVTAAFFWQLAVGLKLVNVNLGLRSDRELFQTGQKLTSFVLAIVYGVGLIY SGYYDNAIRGYDPLSDSTPYGWYGLILFQFLSWSFIITLIVEVFDKGYAFGSGALSFLAL QTATNLIAELVGLEIFPINNSNKFESYGALINFTRNFSFDISKIGTNVYNSFTRLQLPNF TSFYITVATTLAVVYLQNLRIELPIRSTRARGMNNVFPIRLLYTGALPVLFAYTVIANIQ YFGYLAYVVLQKANVSSFALSIIASFNLDSYSNRLNLTSGALYFFSSSPSLLSTILSPIR TVVYSATVIVLATWFAEKWSYISGSAPKDISKQFKDQGISISGKRDISITKELSRVIPVA AVSGGFILAAIAVAGDLLGGLGKSAATIVGVSAAFSVLE >A5DWJ5_LODEL/34-436 A5DWJ5.1 SLLELGFLPIITSAFLWQLAAGLKLININLGLRYDRELFQLGQKLTAWGLALIFSVGLIY SGYYDNVIRGYKVVGGSGGVPIWSYLIIFTQIFTWQIVLTLIVEIFDKGYGFGSGILSFL ALQNATSFIAELVGLEMFPVVNNTLKFESLGALLNLVRNFSIFSPTTTINQIWHAFTRVQ LPNLTQFYITLATILAVVLLQNFRTEISIRSTKVRGMNQMFPIRLLYTGGLPVLFAYTVI ANLQVFGFIFEAALVKLTASPIVSTLFANYVVEPYSNRLVIKSGVLYFFTASQTLLQSII SPLRVVIYSSTVVGLATWFAYKWSYIAGSSPKDISKQFKEQGISIAGKRDISITKEFAKI IPTAAVTGAFILSALAVTGDYLGGLGRNVASIVGVSSAFGILE >Q5A2C9_CANAL/5-404 Q5A2C9.1 TLLELGLLPIITSAFIWQIAAGLRLINVNFKLRIDRELFQTGQKLTSFIFSLIFAIGLIY SGYYDNAIRGYNPLQDGIPYGSYALILLQITAWSWIVTLLVEIFDKGYSFGSGILCFLAI QSSTNFIANLLGLENFPVVNSNKFESYGALMNLIKNFSIFNPKQTVYQIWHSFFRIQLPN LTQFYISLASILIVVALQNFRIELPIRSTKVRGMNNVFPIRLLYTGGLPVLFAFTVVANI QVVGYLIHSVLSKLGTSPIVISIIGNYVYNPSSNELDLNSGILNYFTSSSSLVESIISPI KTTVYSITIIVLAVWFANKWSYISGSSPKDISKQFKDQGISLAGKRDISITKELSRVIPV ASVSGAFILSVVALIGDFFGGLGYGVASIIGVTASFAVLE >Q74L41_LACJO/64-372 Q74L41.1 SIFSIGLNPLMFSMLIIQLLSFTHSFGFDALSPKQVQYLMQFLTMIITIIQAALLVFAFT NRRNGLEDFEMILILSAGSCLVVWLCYRNMKYGVGASAPVILTSILNGAIPNIISNVKLL LTMKYAWIWLAALAIFILLLIKFWLAFTKAYYPLKVVNPSLPASSNLMTVPLGLNMAAMM MYMVGMAILTLPLMVGRYFSSSSLINNWVFQASFSAVMGILIFYFFTFVNFDPKEQAKSF RNNHYYIPNIAPGRPTQRYLNRLIWIIAFPGAVLNAFQLVFGLYGGNFLGNYAGFAIIPM NVVMITMFM >B3XPQ8_LACRE/65-377 B3XPQ8.1 SLFMVGLNPLMIAMLIIQLLTMLRLFYFDTLSMNQLMKIQQWLTLGFAIIQSTAVTLGLK ITTGTLDSLAVILMLTAGSMFVVWLGNMNMKFGIGGTITLILFNIISGSIPTLLRSIKML AKQSYGPLWLFLAAIAGCIVLVFWVSFNRAYYPLKMINTSMSSHDRPIILPIGLNMGAMM TYMVGMSLLMVPTLLANVLGPGSLFANPYFNMVVSGILAFVLFYFFTFVQFDPKAQAKAM LQGNNYILGVRPGEPTRKYLRQILLHVSFLGALLNAIQLSFGLLGGQVLGNFAGLAIIPM NMIMIVMFMQGIK >A1C3L4_STRPA/70-403 A1C3L4.1 TLFSLGIGPTMTMMILWRFLITFKLIGSWTSNKVNRLQFLLTLAIALLQSFGITNDSKFL LIFGYSHSTLRIITIILLTTGTFILNWLCKINSERGIGGMTVVILVNMILTFQSNIIRYF SVQQFKFSSLIQYGLVFFVALSILIWFNILLYKGEYRIPIQRVGLNTPYHASSYLPIRVT PAGAMPFMYGMTLMMLPPYIFVVLLHIFPGNQILEYLSVHIGLSQLPGVICYIFLLYFLS IGFAYYNYDPYEISKNMRNNGDYISGKKPGEETIKYIQYVVNSFAQFGAFTVIIFGGLPM LAVLLQGQGKNSVSIALLISNAYIIVSLLLGVIE >Q3DVD6_STRAG/65-395 Q3DVD6.1 GVFSLGIGPMMTTMILLRLFTIGKYSSGVSQKVQQFRQNVVMLVIAIIQGLAITISFQYH NGFSLTKLLLATMILVTGAYIISWIGNLNAEYGFGGMTILVVVGMLVGQFNNIPLIFELF QDGYQLAIILFLLWTLVAMYLMITFERSEYRIPVMRTSIHNRLVDDAYMPIKVNASGGMA FMYVYTLLMFPQYIIILLRSIFPTNPDITSYNDYFSLSSIQGVVIYMILMLVLSVAFTFV NIDPTKISEAMRESGDFIPNYRPGKETQSYLSKICYLFGTFSGFFMAFLGGVPLLFALGN DDLRTVSSMTGIFMMITGMSFMILDEFQVIR >A5LN99_STRPN/64-389 A5LN99.1 SIFSVGLSPWMSAMILWQMFSFSKRLGLTSTSIEIQDRRKMYLTLMIAVIQSLAVSLRLP VQSSYSAILVVLMNTILLIAGTFFLVWLSDLNASMGIGGSIVILLSSMVLNIPQDVLETF QTVHIPTGIIVLLALLTLVFSYLLALMYRARYLVPVNKIGLHNRFKRYSYLEIMLNPAGG MPYMYVMSFLSVPAYLFILLGFIFPNHSGLAALSKEFMIGKPLWVYVYISVLFLFSIIFA FVTMNGEEIADRMKKSGEYIYGIYPGADTSLFINRLVLRFSVIGGLFNVVMAGGPMLFVL FDEKLLRLAMIPGLFMMFGGMIFTIR >A3CM55_STRSV/64-391 A3CM55.1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRMLLTLVIALIQSVALVLNLP LQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASMIAYIPQDIWN SIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPA GGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWFILYLLTIFILALA FAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLILISGLPMMV VLVDIRYLRLSMIPGIFMIFIGMVFSIK >Q03HZ8_PEDPA/65-396 Q03HZ8.1 SLFSVGLGPYMTGMILFQAIQLLDIDELNKINDYKRGMIQRWISFVIALLQTLQFIYTIR EHINFSGIKVWGIDYNLIVAFFVLVAGAMIVAWMSDMITKYGIGGSGVLILPGMIDSIPR VLLYGQGLGSGAVFFTPKLWLVLIISVAVVVIFTIFINKAELRIPLQRPFVQNDFSESYL PIRVLAAGSMPFMFTTTVFMIPSYIGSFVPEGEFNRFVQNYVAFDNPVGILIYCSIIVFL GYVFSFMNFQTERLTKNLKKSGDYIFNVVPGTATRHYLNQRLFHLSTVANIFFLIIVGTP LIVGLYLPEITNFAFVFANILILITIIDTTMD >A5IW80_STAA9/64-384 A5IW80.1 NIFTLGLVPWLTSMIILMLISYRNMDKYMKQTSLEKHYKERILTLILSVIQSYFVIHEYV SKERVHQDNIYLTILILVTGTMLLVWLADKNSRYGIAGPMPIVMVSIIKSMMHQKMEYID ASHIVIALLIILVIITLFILLFIELVEVRIPYIDLMNVSATNMKSYLSWKVNPAGSITLM MSISAFVFLKSGIHFILSMFNKSISDDMPMLTFDSPVGISVYLVIQMLLGYFLSRFLINT KQKSKDFLKSGNYFSGVKPGKDTERYLNYQARRVCWFGSALVTVIIGIPLYFTLFVPHLS TEIYFSVQLIVLVYISINIAE >Q4L9N9_STAHJ/61-383 Q4L9N9.1 NVFSLGLGPWLTSLVIIMLLNYRNLDQATKQTRSEKHYKERIITIVFAIFQSYFVISTYI HNNFIKDSNIILLMLILVAGTMLLVWLADQNITYGICGPMPIVLTSLIKSLFNNQHFFKL SVSVLLLILVIVTLVIALLILLFIELSEYRLNYKDIMNNSTNKTPTYLAWKLNPAGSISI MISLSVYVLLNNMINLIATLLGSNANFEFLSFANPIGIMFYIVLQIVLSYLLSRFLINTK KKADEFLKNGNYFDPIRPGRETERYLNSKARRVCWTGAILVALILAVPLYSTLLVPNLST EIYFSMQLIILVYISINIGETIR >Q5HKR3_STAEQ/61-380 Q5HKR3.1 NIFSLGLGPWLSSMIILTLINHKSNDKVKTQTRRERHFKERALTLIISAAQGFYIIHSYI NKHAIKDSNMLILLLVLITGTLLMVWLADQNTTYGISGPMPIVLMSLVKSIFNTHFPKLN SSASLITMIIVLLVLALFILFFIELTEYRIEYNDIMNISAKDIPSYLSWKLNPAGSISIM VSLSLFMLTNNIVNFIGRFIVNHNFETHVFNFTNPVGITIYLLLQMILGYFLSRLLINTK RKSKEFLKNGNYFEGIQPGQQTEKFLGSKARRICWFGSIVVAIVLAIPMYSALLVPHLLK EVYFTTQMIVFVYIGINIAE >Q9RSK8_DEIRA/68-413 Q9RSK8.1 SIFALGVLPYITASIVIQLLTTTIPSLEKLSKEGEEGRKKINQYTRYAAIALGAVQALFF SLYITSNPSFIAVGWDPGLFTVLVMVLTQVAGIAFTMWIGERITEVGIGNGISLIITAGI IAVYPREIAATAQLLRSEQTTLLSILAFIAVILVTIAGIVYIYQAERRVPVTYARARGGA AGQARGAGQATWLPIKVNQAGVIPVIFASAMLIIPNLIASATATRAPEVNAWINSNLTFG QPLYLALESLLIFGFTYLYNSVQFDPKRIAEQLREAGGFIPGVRPGGPTADFLGRISGRL SLWGAIFLVILTILPQLVQKATGITTFQFSGTGLLIIVGVALETLK >Q5SHQ8_THET8/71-413 Q5SHQ8.1 SIFALGIMPYITAAIIMQILVTVVPALEKLSKEGEEGRRIINQYTRIGGIALGAFQGFFL ATAFLGAEGGRFLLPGWSPGPFFWFVVVVTQVAGIALLLWMAERITEYGIGNGTSLIIFA GIVVEWLPQILRTIGLIRTGEVNLVAFLFFLAFIVLAFAGMAAVQQAERRIPVQYARKVV GRRVYGGQATYIPIKLNAAGVIPIIFAAAILQIPIFLAAPFQDNPVLQGIANFFNPTRPS GLFIEVLLVILFTYVYTAVQFDPKRIAESLREYGGFIPGIRPGEPTVKFLEHIVSRLTLW GALFLGLVTLLPQIIQNLTGIHSIAFSGIGLLIVVGVALDTLR >SECY_CORGL/73-424 P38376.1 SIFAIGIMPYITASIIVQLLTVVIPHFEELKKEGQSGQAKMMQYTRYLTVALALLQSSGI VALADREQLLGAGIRVLSADRNFFDLIVLVITMTAGAVLVMWMGELITEKGVGNGMSLLI FAGIATRLPTDGMNILGNSGGVVFAVVLASVLILVIGVVFVEQGQRRIPVQYAKRMVGRR QYGGSSTYLPLKVNQAGVIPVIFASSLIYMPVLITQIVNSGSLEVSDNWWQRNIIAHLQT PSSWQYIVLYFALTIFFSYFYVSVQYDPAEQAENMKKYGGFIPGIRPGRPTAEYLGFVMN RLLFVGSLYLAVIAVLPNIMLDLGVDAGSAGATPFGGTAILILVSVALTTVK >A8LB12_FRASN/74-414 A8LB12.1 SVFALGIMPYITSSIIIQLLVVVIPRLEQLKKEGSSGEQKLTQYTRYLTVALGILQATGI VALARSGRLFPGCSAQIIPDTSLFRIVTIVITMTAGTAVIMWMGELITARGVGNGMSLLI FTSIAAALPSQGGRILQVAGGVVFGLVILLGLAIVVFVVFVEQSQRRIPVQYAKRLIGRR MYGGTSTYLPIKVNQAGIIPVIFASSLLQLPQLVGQVWSNQTFQDFEQRYLSRGDHPLYL VAYGALIIFFTYFYVAITFNPTEVADNMRKYGGFIPGIRPGRPTAEYLDHVLSRITLPGS LFLGVITVLPLALLNLTKDQPFPFAGTSVLIMVGVGLETVK >Q83NQ1_TROW8/73-424 Q83NQ1.1 SVFALGVMPYITSSIIIQLLRVVVPRFEQLYKQGQEGQAKLIQYTRYLTIGLAVLQSTTL ITVARSGALFAASNSPACSSLLTDDSWYSTIIIVIVMTAGTGLIMWLGELITERGIGNGM SILIFTSIAAGFPGVLVGVYQTRGFGMFSTVVITSLVVMVGVVFVEQSQRRVPVQYAKRV VGRRILGGGSTYLPIKLNMAGVVPVIFASAILRVPSIIAQFSQPAPGQPPAAWVVWINEN FTTGNSPFYIALYFFMIVGFTYFYVAVTFNPTEIADNMKNYGGFISGIRPGVPTANYLSY IIKRITLPGSLYLGIVSLIPLIAFALFGLSADIPLGGTSVLIMVGVGLDTVK >Q8G3Z9_BIFLO/74-421 Q8G3Z9.1 SIFALGVMPYITASIVVQLLRVVIPRFEALHKEGQSGEAKLTQYTRYLTIGLAVLQSTTI LVTARSGALFNYQCDQVIPDGSVFNLVVMVLIMTGGTGLIMWMAELVTDKGIGQGMSILI FMSICSGFLPQLWEIGYGTNGTDGDWLKFGIVVGVLVVILIFVDFVELCQRRVPVQYTRR MIGRKMYGGSSTYLPLKINMSGVIPPIFASSILAIPTLIAQFGKSDQSWVKWINANLANT TSVWYIALYALMIVFFCFFYTSITFNPDETADNMKQYGGFIPGIRAGNATSRYLTYVMNR LNTVGAVYLLFVALIPTVLIMALGLNAKLPFGGTTILIIAGVGLDTLR >A7B9M4_9ACTO/72-414 A7B9M4.1 SIFALGIMPYITASIIIQLLRVVIPRFDDLHKEGQTGQAKLTQYTRYLTIFLGILQATTT ISLARSGQLFQSCNHDIIKDRSVMTFIMMIIVMMAGTGVIMWLGELITERGIGNGMSLLI FTSIAARLPEQLLSIGQAGKWGSVAAIVALLLLVAIAVVYVEQAQRRIPVQYAKRMIGRR QYGGTTTYIPLKINMSGVIPVIFASSILALPPMAAQFGSPNDKWVQWISAHFTQGSSFYL TIYALMTLFFTFFYTAITFNPDEVADNMKKYGGFIPGYRAGRPTAEYLRYVINRITSAGA LYLVIIALLPSLAIIPLQLSSSQMPFGGTTLLIIIGVGLQTVK >SECY_CHLTR/73-433 P28539.3 TVIALGVVPYISASIIVQLLVVFMPTLQREMRESPDQGKRKLGRMTRLFTLVLACVQSLL FAKFALRMNLVVPGIVLPAMLSLKLFGVPWVFYLTTVVVMITGTLLLMWVGEQISDKGIG NGISLIITLGILASFPSVLGSIFNKLNLGSQDPSEFGIVSLLILCAVFVFVLMATVLIIE GMRKIPVQHARRIIGRREVVGGGSYLPLKVNYAGVIPVIFASSLLMFPATIGQFLSSESS WLKRIATMLSPGSVAYSIFYVLLIIFFTYFWTATQFRPEQIASEMKKNGAFIPGIRQGKP TQTYLEYTMNRVTLLGAVFLAVVAILPSILGRILRVDANVSYFLGGTAMLIVVGVILDTM K >Q1AU49_RUBXD/70-408 Q1AU49.1 SVFALGIMPYITAAIVMQLMTVAIPRLQELAREGEVGQQKITQYTRVFTLALSFIQSVAM VLFLRSGQFGPVLAGAGALDLFLVVVTLTTGVMVTMWFGELITQRGLGNGISLIITASIL SQAPNAVRTLIEDGSVLTMVILGIIAVMIVAAIVFVNEGQRRIPITYAKRQVGRRMSQGG TTYLPLKVNMAGVIPIIFASSLLIFPVVITQFAAGGDQSSWLFRLAQIFAPPSAPYLILY ALLIVMFTYFYTAVQFNPIEHADNLKKSGGYIPGIRPGQPTALYLNSVLTRITLFGAVFL AVIAVLPYLITGALNLPNSIYLGGTSMLIVVGVSLDTVR >Q8RIH6_FUSNN/75-411 Q8RIH6.1 SIFSLGIIPYINASIVVSLLVSIIPQLEEIQKEGESGRNRITQWTRYLTIALAIIQGTGV CLWLQSVGLIYNPGISFFVRTITTLTAGTVFLMWVGEQISIKGIGNGVSLIIFLNVISRA PSSVIQTIQTMQGNKFLIPLLVLVAFLGTVTIAGIVLFQLGQRKIPIHYVGKGFSSKGGI GEKSFIPLRLNTAGVMPVIFASVFMLIPGVIVNALPSTLSIKTTLSIIFGQNHPVYMILY ALVIMFFSFFYTALVFDPEKVAENLKQGGGTIPGIRPGEETVEYLEGVASRITWGGGIFL AIISILPYVIFTSMGLPVYFGGTGIIIVVGVALDTIQ >A6DRC9_9BACT/79-428 A6DRC9.1 GVLGIMPYITASIIMQLMTPVFPNLEKLQKDGSHGRQKLNQYTRYMTIVICAVQSAMMAV AMHTPSKLLGVPGFEDLVINKGSAFVIQTTIIVTASAILIMWLGEQITDKGLGNGASIII TINVLSSMPQAFAAVYSKYQEGEWNLVQILVVVGILFIVTAATVALVQGMRKIPLKYARD ASSRNAMIEKTSYLPLKVNHAGVMPIIFASALMMFPPMIINKIGGDFARTVAPYFDFGST SYLIIQGVMILVFTFFWVATQFNPIQIADDLNRSGAFVPGHRPGEPTSTFLNDTMTRITV AGAIFLVILALLPYVLMNAMGSGSTDFIITQFFGGTSLLIMVGVVLQTMQ >C0ACZ0_9BACT/94-454 C0ACZ0.1 AVCALGIMPYISASIIFQLMTAVVPSLARLQQEGDVGRQKLSQYTRYATVLICLIQGALL ILALENPTQLFGEGYDIARYGEIVLVDRTWFLISSVIFMTAGTMLLTWLGEQITQRGIGN GISLLITIGIISDLPGAMGTLWTLLRAPVGTQGISMISLTFMVILFFAVTMGIIMVVQGQ RKIPVQYAKRVVGNKVMGGQNSFLPLKVNYSGVMPVIFASAILLFPQQIFRYLGAAFNLP FLIEFSNNLMRGHWVYYVTMTLLILFFSYFWVSVMFKPIQIAEDLKKYGGYIPGVRPGEP TAKFLDFVMTRITLAGAIFLTIIAVFPDFLNAELNVPQRISSFFGGTGMLITVGVILDTM K >Q1Q157_9BACT/75-434 Q1Q157.1 AIFGLGVMPYISASIIFQLLVGVVPYLERLQKEGEVGRKKINQYTRIATVGLCLFQAFVM TRTLYTVEFNGVPVIPVYLQGVSFQLMAAILLTTGTMILMWIGEQIEEHGIGSGISIVIM VGIIERLPWAFNQIVQNFTFSVAPAEHQIGIVKLLILLGMFFAIVGGVVYITQGQRRIPI QQAKHTRGRRVYGGQRHFLPLRVNQAGVMPIIFAQSLLIFPAAIMQGIQIRFEPGSVGYW ITSRLSGILQEGVLYVMLYILLITFFCYFWTAIQFNPREMSNNMKDYGSFIPGIRPGHRT AEYLESIMGKITLAGAAFLSLIAILPKLVAGGFELNRAIAGFYGGTGLLIIVGVALDMVQ >A6CGP8_9PLAN/77-435 A6CGP8.1 TIFGLGIMPYISASIIFQLMGTVYPPLERLQKEGEAGRKKINEYTRYATVVICLVQSFFW IRTLAGGFGSGTSLILDGYQGLYFQIVATITMTTGTVFLMWIGEQIDAYGIGNGISLLIM AGILARMPQAGWSLIEPAFEKGIALGTDTGIDRLLILALVFVFVVVWVIAITQGQRRIPI QSAKHVRGRRVSGGQRQSLPLRVNQAGVMPIIFASSLLMFPYFLFHGLSQYFSTSAFWAM LDEAFQPMSRGFVYTMSYVVLIYFFCYFWTAITFNPKDMAENLKDYGSFIPGYRPGARTA AYLEQVMVRITYVGAAFLSLVAIIPTLVSTWLGVDFLVASFYGGTGLLIVVSVVLDLVN >B4S5A8_PROA2/73-417 B4S5A8.1 SIFSLGIMPYISASIIVQLLGAVTPYVQKLQKEGEEGRQKINQYTRYGTVLIAALQAWGV SVSLASPSSFGTIVVPDPGFFFMMTTVLILTASTVFVMWLGEKITERGIGNGISLIIMIG ILARFPQSVIAEFQSVSLGSKNWIIEFIILALMVLIVAAVVVLTVGTRRIPVQHAKRVVG RKMYGGSTQYIPMRVNTAGVMPIIFAQSIMFLPNTFLSFFPESEVMQNVATIFSYDSWWY ALMFGTMIVFFTYFYTAIAFNPKEVADTMRRQGGFIPGVRPGKSTADFIDNILTRITLPG AISLAFIAVLPTFLTKFANVTPGFAQFFGGTSLLIIVGVGLDTLQ >Q2S3P5_SALRD/75-414 Q2S3P5.1 GIFALGIMPYITASIIIQLMGAVVPYFQKLQREGEEGRRRITQLTRYGTIGITALQSIGY SINLLAGATGRAVVINSTLFTITTVVVLTSGTAFVMWLGERISEDGIGNGISLIITIGII AFLPQALYNEIGLIGDNFFILLVEIGVWVLVAGAVVLVSQGMRRIPVQYAKRVVGKKVQG GTTQYLPLRVNAAGVMPIIFAQSIMFIPSTIASFFPNNATMQRVGGWFSDISSMSYSAVF FVVVVFFTYFYTAITVNPQEMADTMKRQGGFIPGIRPGKQTSEFIDTVLTRITLPGSIFL GLVAIFPAFAMQAGVSQGFAMFYGGTSLLILVQVTLDTLQ >A1ZGT4_9SPHI/72-404 A1ZGT4.1 SIFALGIMPYISASIVIQLMEVAVPYFQKLKKEGESGFKKKTQITRYLTIVITAAQAIGY IQATIPSNAIMVSQLSFTISTVIILTAGTVFTMWLGEKIDDRGIGQGISLLIMIGIISRL PQSLVEEVVARSTGSQVLILILEMVVLFFVVMSVVMLTEATRRIPIQYAKQVVGNRVYGG QRQYLPLKVNAAGVMPIIFAQALMFVPALITPYVGGASSAFSDITTWQYNLVFGLLIIIF TYFYTAISVNPKQIADDLKRNGGFIAGVKPGSDTSEYIDKIMSKITLPGSIWLAIVAILP AIAVKFGIQNSFAQFYGGTSLLIMVGVVLNTLQ >A6EHP4_9SPHI/71-408 A6EHP4.1 SILALGVMPYISASIVVQLLGIAVPSFQKMQKEGESGRKKLNQITRYLTVAITAVQAVGY VKTQVPMEAIVIDHTLFFVMATFVLAAGTLFVMWLGEKITDKGIGNGISLIIMVGIIARL PIALYQEITSRIVSDGGLIALVLEIVALFAVVMFTIMIVQGVRKVPVQYAKRIVGNRQFG GVRQYIPLKVNAAGVMPIIFAQALMFIPATLTQFFPSLQNTWLVQFSDYTSLAYSLTFAF LIIAFTFFYTAITVNPTQMSDDMKKNGGFIPGIKPGFATSSFIDDVISKITFPGAVFLAI IAILPSVAVKFGIKSEFAHFYGGTSLLILVGVVLDTLQ >Q11QD2_CYTH3/72-411 Q11QD2.1 SVFGLGIMPYISASIVLQLLTFAVPYFQRLQKDGESGRKTINQYTRILTIFITVAQSIGY LAATLDEGMIYEGMNTPFMNVVRIVTLISGTMFCMWIGERITEKGIGNGISMLIMIGIVS RLPFALMAEVSSKNLEGALPLLIEFAALFAVIMLVVLVQQATRRIPIQYTKQIAGGKQVI GQRQYLPLKLIAAGVMPIIFAQSVMFLPAIIGSSFPDSEFATTIGSTMSDFTSWQYNVAF ATMIILFTYFYTAITVNPNSIAEDLRRNGGFIPSVKPGLATSEYIDDVLTKITLPGSIFL ALLAILPAFASMTGIEKEFAYFYGGTSLLIMIGVVLDTLQ >Q1VTY0_9FLAO/73-421 Q1VTY0.1 SVFALGIMPYISASIVVQLMTIAIPYLQKLQKEGDSGRKKITQITRWLTIAITLVQGPGY IINLYNILPSSAFLMDSTFTFVVSSVIILTTGCIFAMWLGEKITDKGIGNGISLLIMVGI IATLPQAFIQEFISRVTESNGGLILILIELVIWFVIILAAVMLVRAVRQIPVQYARKNAS GKFEKASVGGARQFIPLRLNASGVMPIIFAQAIMFIPAAVAGLSDSEMAQGITAAFQNMF GFWYSLVFGILIIVFTYFYTAITVPTNKMADDLKRSGGFIPGIRPGSETSEYLDRVMSQI TLPGSIFLALIAVFPAVIVSLLNVQQGWGLFFGGTSLLIMVGVAIDTIQ >Q1NYZ7_9FLAO/72-422 Q1NYZ7.1 SILSLGIMPYISASILTQLMCYMFPSLYKIQQDGEIGIKKINNITKVLTILISLIQAPVY ITILISSNIKENPYNLILIHCKKIFIITSIICITTGTFFTMWLGEKINDKGIGNGNSLII ISGILSRFIYSIISEIFNRLKNNNKLLGIIILLFELFIWLLIIGISIIIINFVKKIHIQY VNKFYLKNYSSNEIYLRNEMKFLPLKVVYPGVMPIIFSQGILLIFITIFNKINNLQLSNN GIWYNILYSILIIIITFFYTFLSIPVNKISDDLKINGVYIPNRKPGKDTCFFLKKIVSQI YLTGSLLLVIIALLPSIFISLGGDKNFSLFFGGTTIIIIVGGLLDIKYTIN >A5KHP6_CAMJE/62-402 A5KHP6.1 SIISLGIMPYITASIIMELLAATFPNIGKMKKERDSMQKYMQIIRYATIVITLVQSIGVA IGLQSLHGRGGAGVIMVEDLNMFIALCAISMLAGTMLLMWLGEQITQRGIGNGISLIIFA GIVSGIPRAISGTVGQINSGEMNFLTAFAIFALILITIGVIIYVELGERRIPISYSRKVV MQNQNKRIMNYIPIKLNLSGVIPPIFASAILMFPTTILQTSTNPYLQAINDFLNPNGYLF HVLTFLFVIFFAYFYASIVFNAKDIAENLKKQGGFIPGIRPGEGTSSYLNEVASRLTLSG SIYLGLVATLPWVLVKFMGVPFHFGGTSVLIVVQVALDTMR >A4EA78_9ACTN/52-389 A4EA78.1 SVFSLGIMPYITSSIILQMLQAVVPSLHELAREGEVGQTKITQYSRYLTLALAILNSVGY LFLFKSFGISFNGAGAPEIIFDLMIVGTLTAGAMLIMWIGELITQRGIGNGMSLIIFANI MAGLPQAIFSSTEGNAGGIITMVIICAIILLVIPLIVFLERGQRRIPVSYAKRVVGRRMM GGQTTYLPIKVNTAGVVPIIFASALLYFPAQIAVFFPGIGWIQAVASALSTGWLNWVLNV VLIVFFAYFYTSMVFNPDDTADNLKKQGGFIPGVRPGRATAAYIKNALNKITLPSAVFLA LIAIVPSIIFSFTGNHLIQAFGGTSILIMVGVVLDTVD >Q2GEC0_NEOSM/73-411 Q2GEC0.1 TLFALNVMPYIVSSIVVQIFFSMLKSEGKVSAEFMNESRLSFYSKLVALFLAFFQGFIIV AGLERTKAFVGGNEEFYSLLKYTSVLTLVCGTFSLIWLGQQINSRGIGNGMSLIIFAGIV AEMPAIFGNLFSGIGSPGSGILGIFVSLSLLVFVVFLVVLVERASKNIPVHYPRRRTWGS THGDAASNIPVKINVSGVIPPIFANALILFPLTLANFSAESHLGEFIIRYFSVGQPLYFL LHSCLLVFFCFFYSDFVFNTTEISDSLKKGEAIVAGRRPGISTKRHLDYVLRRITVVGAA YLVCICVVPEIFRNYFGFDAIISGTSLLIIVNVITDLLS >Q3YRM8_EHRCJ/72-412 Q3YRM8.1 TVFALNVMPYIVSSIIIQLLSVTVPRLNELRQNGELGRMKINNYIRYMTIFFCIVQGSVI LLGLEKMNSENSIVVIDPGLLFRIVGISSLLGGTMFLLWLGERINKNGIGNGVSMIIFTG IVAELPGSFSSMFLLGKNGNVPIFVILLMVLIFFALLLLIIFVEKSYRKILVQYPKRQVK NKLYGSSSTYIPLKINISGVIPPIFANALLLSPITVANFHQGSPWSDFILMYFSSGKLLY IVCYALLIIFFAFFYTAFVFDAKETSEILKKNGGFVPGKRPGNATCEYFNYVIKRLTVLG SIYLTVICIIPELIRYNYSVSFTLGGTSFLIIVNVIIDTFS >Q5GSW3_WOLTR/77-416 Q5GSW3.1 TILVLNVMPYIVASIVMQLLSSAVKGINEVKNDGELGRRRMNSYIRYMTIVFCIFQSVTI LIGLERMNREGTLVVIEPGVMFRTVGIFSLLGGTMFLIWLGEQISASGIGNGISLIIFTG IISELHNAFSFLLTLNKNGSMSLLIILFVFVLFFLLLLLIIFVESSYRKVTVQYPKKQFK RLHSDDFTYIPLKINLSGVIPTIFANAILLTPVSIANFYKGHAFSDFILNYFMANKVVYI AAYLALIVFFNFFYTNFIFNPEENADFLKKNGGFIPGRRPGKHTSDYLQDIVFKLTFIGS AYLVVICTVPEVMRYYYDMPFIFGGTSLLIIVNVTTDTIM >Q0ANS0_MARMM/83-421 Q0ANS0.1 AIFVLNVMPYISASIIMQLMSATIPSLEKLKKEGGEQGRQQINQYTRYLTVLLATGQAFA IAIGMNTPNSEGVALALNPGPFFLASTVITLVGATMLLLWLGEQITARGVGNGVSLIIFA GIISAVPGVIGGALSQASSTGDGTVLVVGGVLILVGLLLVVFVERSQRRLLVQYPKRQQG NRMVGGDTSFLPLKLNTAGVIPPIFASSLLLLPATAASFQAQSGPGWLQSAVAILGPGSP WFMMAYAAMIIFFCFFYTSVVSNPDDMAENLRKYGGFLPGIRPGKRTAEYIDFVMSRLTF IGALYLVLICMVPMMMNPNTALGGTSLLIVVSVTMDTVS >A7IPQ0_XANP2/80-418 A7IPQ0.1 AIFALNIMPYISASIIIQLLTSVSPTLEALKKEGEAGRKQLNQYTRYLTVVLAVFQAYGI AVGLEGSGSVVADPGWFFRITTVITLTGGTMFLMWLGEQITSRGIGNGTSLIIFGGIVAE LPGAFVRTLQLGREGAISTPLILAALVLAVVVIAFIVFMERAQRRLLIQYPKRQVGNRIY EGQSSHLPLKLNTSGVIPPIFASSLLLIPTTIASFLQGSGPEWLQTITTHIGHGRPAYMV LYVLLIVFFCFFYTAIVFNPVETADNLKKHGGFIPGIRPGERTAEYIDYVLTRITVVGAA YIAAVCLFPELLISYASLPFYFGGTSLLIVVSVTMDTVS >SECY_RICCN/70-411 Q92GY6.1 SIFALAIMPYITASIIIQLMSVAYKPLENLKKEGEVGKRKVNQLSRYLTVLLASFQAYGV AISLESIVTNTGPVVILAGFFFRITTVITLVVGTMLLMWLGEQITQRGIGNGTSLIIFIG IISGVPSAIISMFELSRKGALSPLIAIAVCIGVVVLIAIIIFFERAQRKLLVQYPKRQVG NKIYGGEATHMPLKLNTSGVIPPIFASSILLFPATLANFSNSNSETMGMLTYYLGHGKPV YILLYVALIMFFSFFYTAIVFNSEETANNLRKYGAYIPGKRPGKNTSDYFDYILTRLTVI GGIYLSVICVIPELLMNKYVISLSLGGTSFLIVVNVVLDTMT >Q2G8W0_NOVAD/80-430 Q2G8W0.1 SLIALGVMPYITASIVVQLAASLHPALAAMKKEGESGRKKLNQYTRYGAVLLTAIQGWVL ASGLEAYGASSGLQAVVNPGLLFRVGAVISLIGGTMFLLWLGEQITSRGIGNGVSLIIMA GIVAQMPKFFGNLFEGGRTGSISPFLIFGIVIMLIALVIGICFLERATRRLLIQYPKRAT QRGMMAADRSHLPLKINTAGVIPPIFASSLLLLPLTITQFAGNSISPDTKMGQAIVTLNQ YLGHGKPLYMLFYALGIIFFSFFYTAVVFNPEETAENLKKNGGFIPGIRPGKNTANYLDY VLTRITVLGAAYITVVCVVPEFIMAETGMGTLFFGGTSLLIVVNVTVDTIT >A6E0Q6_9RHOB/73-411 A6E0Q6.1 GIFALGIMPYISASIIVQLMTAMVPALEQLKKEGEQGRKKINQYTRYGTVALATLQSYGL AVSLQSGDMVSNPGMFFIASCMITLIGGTMFLMWLGEQITARGVGNGISLIIFVGIIAEV PAALAQFFASGRSGAVSPAVIVGVMLMVVAVIAFVVFMERSLRKIHIQYPRRQVGMKIYD GGSSHLPVKVNPAGVIPAIFASSLLLLPATITTFSGNTTNPVLSTVMAYFGPGQPLYLLF FTIMIVFFAYFYTFNVAFKTDDVAENLKNQNGFIPGIRPGKRTAEYLDFVVNRVLVIGSA YLAAVCLLPEILRNQFAIPFYFGGTSVLIVVSVTMDTIQ >Q1UZE8_9RICK/67-404 Q1UZE8.1 AIFALGIMPYISSSIIVQLLTGVSDYFKNLKAQGETGRAKITQITRYGTVILATIQGYGL SIGLQSSADLVINPGLFFTITAVSTIVAGTMFLMWLGEQITQRGIGNGISLIIFAGIVAE IPRALVTTFELGRTGAVSTIMIIGIFVLLVATIMFIVFMERALRKILINYPKRQMGNKMY GGESSHLPLKINQAGVIPAIFASALLLLPVTFSNFSFSDNDTFLNLSSYFTQGQPLYMLL YASGIIFFTFFYTSITFNPTETADNLRKYGGFVPGIRPGENTALYIEKIVTKLTTIGALY LTIVCLMPEFLIANYPIPFYLGGTSILIVVVVAIDTVT >Q3R245_XYLFA/76-424 Q3R245.1 SIFALNVMPYISASIVVQLATHIFPSLKAMQKEGESGRRKITQYSRIGAVILAVIQGGSI ALALQNQTAPGGAAVVYAPGAAFVMTAIVALTAGTVFLMWVGEQVTERGIGNGVSMIIFA GIVAGLPGSVLQTIDAFRSDALSLISLLIIVFIVLSFTFFVVFVERGLRRIAVNYARRVE GRNSYMNKSSFLPLKLNMAGVIPPIFASSILAFPVTLSIWSGQASSNTLFGAWLQRVSSA LGPGEPLHMILFAVLIIGFAFFYTALVFSSQETADILKKSGALIPGIRPGKATSDYVDGV LTRLTAVGSLYLVIVCLLPEFMQSRIGASFHFGGTSLLIAVVVVMDFIS >A4NK90_HAEIN/76-416 A4NK90.1 SILALGIMPYISASIVIQLLATVSPALAELKKEGAAGQRKISKYTRYATVVFATIQAVAI STGLPNMLSGLVPNVGFSFYFTSVVSLVTGTMFLMWLGEQITERGIGNGISILVFGGIVA GLPSAILQTIEQARQGQMHPLVLLLIAAIVFAVTYFVVFVERGQRRIRVEYAKRQQGRQI LGGHSTHLPLKVNMANVMPAIFASSIILFPATLTQWFGQNDKFEWLNNLSMLLNPGQPLY LLVYAVAIIFFSFFYTAMQYNPRDTADNLKKSGAFIPGIRPGEQTSRYIDKVMTRLTLIG GLYVTFVCLVPYIMTSAWDVKFYFGGTSLLIVVVVIMDFIV >Q057C4_BUCCC/64-407 Q057C4.1 SIFALGVMPYISSSIIVQLLTLISSYLRNLKKEGDIGKKTINQYTKYITFFLSIIQSIGV VISLPFLPGMKNIIVFADCYFYIIAVVSLVTGTIFLMWLGELITTKGVGNGVSLIIFSGI ISGLPASVIRTYKLIKIKNFSFLYVFFLLLIIFFVIFIVVFIEKSQRKIIVCYARRQQGR RMYTAHHSYLPLKLNMAGVIPVIFSSSLIVFPSILLTYLRYVFNDYKKIIYFFDFLKFKH SIYLIVNIILIIFFCFFYTNIIFNVQDTANNLKKSGAFLPGIRPGLKTAEYIKNIVFKLT TIGSIYTVFICLIPDIVRYFFKVPFNFGGTSLLIVVVVLIEFIT >Q8D1Z2_WIGBR/82-424 Q8D1Z2.1 SIFSLGIMPHISASIIIQLLTIIHPKLSEIKKDGEFGRRKINKYTRYGTLFLAIIQSISI SISLPNMPGMQELIINKGIEFYITTITSLVTGTIFLMWLGEQITSRGIGNGISILIFSGI IAGLPIEVIKSIEQARQGNLNIITVLISIILVFVITYFVVFIERGQRRVIVNYAMRQKGR KIYAAQITHLPLKVNMSGVIPAIFASSLILFPATIASWFGEGIGVKWMSKIPYYLEPGTF SYSILYASAIMFFCFFYTSLVFNSKDTADNLKKSGAFISGIRPGIKTSQYINKIMMNLTL IGATYIALICLMPDFFRVFIKSPFHFGGTSLLIVVVVTIDFMT >Q6F7T2_ACIAD/83-426 Q6F7T2.1 SILALGIMPYISASIIVQLMSTVVPSLEALKKEGEQGKRKINQYTRYGTLLLALVQGVGM CAGLISQGITLTSGLAFYIPAVTSLVAGTMFLMWLGEQITERGIGNGISMIIFAGIVAGL PNQVIQAFTSVQNGQGSLIGIVVFALLSLAVLAAIVFIEKAQRRIPVNYAQKQQGRRIFT AQQTHLPLKINMAGVIPAIFASSLLLFPASLGQWLGSADPNAGIVKRSLQDLALVLSPGQ PLYLMLFGTLIIFFCYFYTALVFSPKEVSENLKRSGAYVPGIRPGEQTARYLDHILNRLT FIGAIYITVVCLMPMILQNSFGIPFHLGGTSLLIVVVVVMDFMA >Q6Q8W8_9GAMM/67-407 Q6Q8W8.1 SIFALNVVPYISSAIIMQLFSNSIPYLQELKKDGQAGRNKITQYTRYGTAILAFIQASAL AVTLSASGLAYVPGPTFFVSAVFSVVAGTMFLMWLGEQVSDRGIGNGISIIIATSILTGI PGAIGQALEQSRQGDLSILLLIGIGLLSMAVIAVVVFIERGQRRITVNYAQRQQGRRMMQ AQQSHLPFKVNMAGVIPAIFASTFLLFPASLSTWFGENESLSFLQSFSLALNPGQPLYIL VFAGLIISFCFIWLALTFNTKDVSDNLKRSGAYIAGIRPGEQTANYIDNVLARLTVFGAI YLTLICLLPLALINFAGISPTISIGGTSVLIIVVVLMDFMS >A9BRX1_DELAS/74-413 A9BRX1.1 TVFALGIMPYISASIIMQLMTYVVPTFEQLKKEGESGRRKITQYTRYGTLGLAIFQSLGI AVALESSAGLVLSPGFGFRLTAVVSLTAGTMFLMWLGEQITERGLGNGISILIFGGIAAG LPSSIGGLLELVRTGAMSILAAIFIVLVVAAVTYFVVFVERGQRKILVNYARRQVGNKVY GGQSSHLPLKLNMAGVIPPIFASSIILLPATVVNWFSAGESMRWLKDIASTLTPGQPIYV MLYATAIIFFCFFYTALVFNSRETADNLKKSGAFIPGIRPGDQTARYIDKILVRLTLAGA VYITFVCLLPEFLILKYNVPFYFGGTSLLIIVVVTMDFMA >Q7DDS8_NEIMB/73-410 Q7DDS8.1 SIFAIGIMPYISASIIVQLASEILPSLKALKKEGEAGRKVITKYTRYGTVLLAILQSLGV ASFVFQQGIVVTSSFEFHVSTVVSLVTGTMFLMWLGEQITERGIGNGISLIITAGIASGI PSGIAKLVTLTNQGSMSMLTALFIVFGALLLIYLVVYFESAQRKIPIHYAKRQFNGRAGS QNTHMPFKLNMAGVIPPIFASSIILFPSTLLGWFGSADTNSVLHKIAGLLQHGQLLYMAL FAATVIFFCYFYTALVFSPKEMAENLKKSGAFVPGIRPGEQTSRYLEKVVLRLTLFGALY ITTICLIPEFLTTVLNVPFYLGGTSLLILVVVTMDFST >Q5NHU8_FRATT/74-416 Q5NHU8.1 SIFALGVMPYISASIIFQMLSAVYPKFIELKKEGESGQKKITQYTRYLTLALAIVQSFGI VAFVLHQDGLVTTNNMALFYLTTIVSVTTGSMFLMWLGEQITERGVGNGISLLIFSGIVA NLPFEISNTLSQANQHVISYLSVWVLLILLLLVIAFVVFMESAQRKITVNYAKRQQGRKM FAAQTSHLPLKLNMAGVIPAIFASSILMVPGVLLGWLSNYNSLSWLADVAEMLQPGSIVY TVVFAATIIFFCFFYTSLVLNPKETADNLKKSGAYISGVRPGEQTAKYIDAVMTRLTLVG SLYITAICLLPIFVVKFFAQGLSFTFGGTSLLIVVVVMMDFMA >Q7WZR8_9GAMM/64-388 Q7WZR8.1 SIFSIGLMPYISASIIMQVITGMFLDVEVSKHKLTSYLRYLTFMLSVIHSLVVSILFLEK SVVYYKKSVVYLTIILTFVTGAIFLMWLGEQITDKGIGNGISLIILSGLVSVIPNALGRT LFLTIKDSSWMYIQIFKVVSLVLITIILVVVIESGQIRIKVSYPRRLIGKKLYATQSSYL PLKLNMAGVIPAIFASSSLIITASVGQWINRSILPQLSPGQPLYIMFFVLSVIFYSFFYT AIVLNAKEVSINFKKSGAFIHGMRPGKQTAGFISKVSSRLNWFGAIYIVFFSLIPQLIMV YCKIPFCGGGISILIMVVVVLDFLS >A5EX98_DICNV/69-412 A5EX98.1 SLLALGVAPYISASIVMQLLTHMLPALKDLRQEGSAGQKKITQYTRYFTLFLAIMQGFAI SRTVMAAGMTISAGSGFLLTATIGLTAGALFMMWLGEQITERGIGNGISMLIFGGIAVNM PSGILGLFNQAKIGEIGYGRFFLLLGIIVSLFALIVYVERAQRRIKIHYAKRQQFGTSAM GERFYLPLKINMAGVIPAIFASAIITLLVSGLTLASSLPGAAGRYLSDLAAGFHQGAWLY IATFVLLIILFSFFYTSIMFENRELADSLKKSSAFIQGFRPGRQTADYIDTVQERLTFVG AFYVAFVCVLPSLVNMGSASGQVLFLFGGTSLLIAVVVAMDLMS >Q6MJ32_BDEBA/70-415 Q6MJ32.1 SIFALGIMPYISSSIIFQLLTSAIPYLEALKKEGEQGRRKINQYTRYATVALAIIQGYGI STWLMNSTSPDGHPLVIAPTVAFLPFQIMTIITLTAGTCFIMWLGEQITERGIGNGTSLI IFTGIAAAIPGGAQQLWELVRTGEMRFALVLLLVAFMVAIIAAVIYMEVAQRRITVQYSQ RQGGGGMQSMQTPTSHLPIKLNISGVIPPIFASSLLMFPATMAQFVNTPWLKALQDSLNP SGAIFNIMFVALIVFFSFFYTEIVFNPNDVAENLKKYGGFVPGVRAGKSTADYIQRVLER VNVVGCIYLCTICILPGIMVSQFNVPFQFGGTSLLILVGVALDTAQ >B5EFS0_GEOBB/71-411 B5EFS0.1 TVFALGIMPYISSSIIFQLLTVVLPAVEKLSKEGDAGRKKIIQYTRYGTIVLAVVQAFGI SIGLEAMRGPAGELVVPNPGWGFRLMTVITLTAGTAFIMWLGEQMSEKGIGNGISLIIFA GIVARIPTAIGNSFRLIKTGELSLFVLLLIAAVMFAVIAAVVFMERGQRRIPIHYAKRVV GLKTVGAQSSHLPLKVNMAGVIPPIFASSIIMFPATVGNFIDVPWVQAASKQLAPGKLLY EVLFVAFIVFFCYFYTAVTFNPVDVADNVKKQGGYVPGIRPGKETSDFLDAVLTKLTFAG AIYISAVCVLPSILIGKFNLPFYFGGTSLLIAVGVGMDTLS >A3EVQ1_9BACT/75-412 A3EVQ1.1 TIFALGIMPYISASIILQLLTVVHPTLQAMAKEGERGRKIITRYTRYLTVLIALVQSFGI ALGLEGMNNGQFVPHPGWSFRFIVVITLTAATTFVMWIGEQITERGVGNGISLIIFSGII ARLPAAIINTYKLYNQGEISGFLILALVVMVFLIVSSIVFIETARRKIPIQYAKRLVGNK MMGGQSTHIPFKINTAGVIPPIFASSLISFPAIIAGFVSVPWIQSFGKSLSPGSFSYTGL YVLLIVFFCFFYTAVVLNPTDIAENMQKYGGYIPGVRPGQKTVEYLYRVMNRITFVGALY LSIVCVIPELLIYQLHVPFYFGGTSLLIVIGVSLDTAQ >Q1MPP6_LAWIP/71-412 Q1MPP6.1 SVFALGIMPYISASIIMQLLQVIIPDFKRMAKEEGAAGRYKITQYTRYGTVIITLIQGIG IAIGLESMYSPTNIPIVLEPGWVFRIVTVLTLTAGTVLIMWLGEQISEKGIGNGISLIIF SGIVVGIPGAIVKTYQLIILGDMNILIALVLMLFMFAVLTGVVFMERAQRRIPIQYAKRQ LGRKVYGGQSTHLPLRVNTAGVIPPIFASSLLLFPATMASFDISDWLKDIAVWFSPSTIL YNCIFLVLIFFFCYFYTAIIFDSKDISENLKKAGGFIPGIRPGEKTCEYLDGVLSRLTLW GGVYISIISILPMMLISQFNVPFYFGGTSILILVGVAMDFMS >SECY_AQUAE/71-412 O66491.1 TVFALGVMPYISASIMMQLLTVAIPSLQRLAKEEGDYGRYKINEYTKYLTLFVATVQSLG IAFWIRGQVSPKGIPVVENPGISFILITVLTLVAGTMFLVWIADRITEKGIGNGASLIIF AGIVANFPNAVIQFYEKVKTGDIGPLTLLLIIALIIAIIVGIVYVQEAERRIPIQYPGRQ VGRQLYAGRKTYLPIKINPAGVIPIIFAQALLLIPSTLLNFVQNPFIKVIADMFQPGAIF YNFLYVTFIVFFTYFYTAVLINPVELAENLHKAGAFIPGVRPGQDTVKYLERIINRLIFF GALFLSVIALIPILISVWFNIPFYFGGTTALIVVGVALDTFR >Q01WB2_SOLUE/74-438 Q01WB2.1 TVFALGIMPYITASIILQLLTVVVPTLEKLQKEGELGRRKITQWTRYLTIILSILQSFGI SQGLMGMQQGIVINPGIGFVFLTILSLTTGTAFIMWLGEQISERGVGNGMSLIIFTGIVV GLPNAIANIYQHVFTIHDWGAITLIVLMALMVAVVAFIVLVERGERRIPVQYAKRVVGRR VMGGQSTHMPLKVNAGGVIPVIFASSILAFPQTLAQFGWVKNLPWLSKTLATIQHGEPMY YVLFVAGIIFFCFFYVSIIFNPNEAADNMRKYGGFIPGIRPGRNTADYMNNILTKITVVG GIYLAILCLIPDIMISGIKLHHLWLVGDWIDRVAPRFILEGLGVNFYFGGTSLLIVVGVA MDTIN >Q08ZH8_STIAU/26-370 Q08ZH8.1 SIFGLGIMPYVSASIIMQLLAVVVPSLERLQKEGASGRQKINQYTRYGSIVLSVVQGIGI SRWLASLGRSDAGQSGFNQIVVPDDSAWFTFMTVISLTAGTAFIMWLGERITERGIGNGI SLIIFAGIVAGLLPNGKTLLDMTAQGAIEAAALVGLAVFMLFIIAVVVYVERGMRRIPVQ YAKRMAGRRMFAGQATYFPMKVNTSGVIPPIFAGALLSFPATLGTWFPFLQTFRQGLEGN PWLYNGLFVLLVIFFAYFYTALTFRPDDVADNIKKQGGYIPGIRPGRQTADFIERVLNRI TFGGAIYLATICVIPTILTQWLQVPFAFGGTALLIVVGVALDTVQ >A6GCG0_9DELT/70-411 A6GCG0.1 SVFALGIMPYISASIIMQLMTVVIPKLEQLQKEGETGRRKINQYSRYGTVGLALVQGYFM ASWLEGQNTPGQTLVLETGLPFKLMTMLSLTAGTCFLMWLGEQITERGIGNGISLIIFAG IIADMPTASYQLAQKAIDDPENFGPLPLAMLLVVVLVVIAFVVIMERGQRRIPVIYAKRV VGKRMFGGSQNYLPLRINNAGVIPPIFASSIIMFPAQIAGMTGNPYLQRFAAAFSYGNWL YLTVYVALCIFFCYFYTQIQFNPVDLADNLKKQNASIPGVRPGKRTAEHIEAILGRLTFA GSWYISAVCVLPVFLQTEFNVPFYYGGTSLLIVVGVALDTAQ >Q04PV8_LEPBJ/72-436 Q04PV8.1 SIFALGIMPYISSSIVMQLFMVLVPSLQKLQKEGEEGRKKIGQYTKYGTVILCAIQSLAV IQLAKGWSTGTELEPARYPGLINSSVVPYFYLIGILSITTGTVLLIWLGEQITERGIGNG ISLLIFAGIIGRLPESMVQLFSTDTMDALNVLILLILLILLISLTVLLTQGVRKVPLQYG KQMVGRKMVQAKSQSIPFKVNGANVMPIIFASSLILFPQTIIQWLSSSSEQWAGWAIIMD FFNPFSQIWYHALFYYIIYTSLIIFFAYFYTAIQFNPAELAENLKKYGGFIPGIRPGSHT KEYIEKVLNRITLPGAMFLAGLALAPYIIIKFLDLSSNSGGGSLVYTFGGTSLLIMVGVA LETLK >SECY_BORBU/72-409 O51451.1 SIFMLSIGPYISASIIVQLLVYSFPSLKKMQEGDGGRQKTKKYTKYLTIVAAVVQGYATS LYAKGIPGAVTIPFYRYIFVAILTVTTGTFILLWFGEQINQRGVGNGTSLIIFSGIVVRL QAALFNLFQSMQDPSQNVNPVFVILIISIFILVVILIIYEYKAQMRIAIHYARANSNNTV SSYLPIKLNPSGVLPVIFASVLITLPLQILSGFAETSSIARQILSYLRPNGFYYTFLNVI LIIGFTYFYSKIQLSPKDISNNIRKNGGTIPGIKSDEMEKYLDEIMNKTLFSGSIFLSII AIIPFLVQNIFRFPHDVSRIMGGSSLLIMVGVALDTLI >Q73PL2_TREDE/73-413 Q73PL2.1 SVFMLGVMPYISTQILMQLAMIIFPRLKKIAEEDGGRKKIQVWTRIVTVFVALLQSSAVG TWARAIPGAVVISSPVLHLFITMVTVTTGTMITVWMGEQITARGIGNGISMLIFAGIVAR LPQAVWELIKLVSNNELNLVFVIIAFAMFVGIIALVVYEQQGQRKIPVHYAKRVIGRKMY GGQNTYIPFKINPSGVIPIIFASSFLTFPLMLSQMWGSNVSWLASVARFLRSDGWGYNVL YVVLIIFFAYFYTQVALNPTEIAKQIRENGGSIPGIRTDKTEEYLQKILNRLILPGSLYL AAIAVLPTVIQWAFSFPRNISMLMGGTSLLILVGVDLDTMS >Q67JW3_SYMTH/69-405 Q67JW3.1 AIVAMGVTPYINSSIIMQLLTVVIPRLEELQKEGEEGRKKIQQYTRYGAVVLGLVQAFGI GYALRSYGAFYSNSWTTLFVIMVSLTAGTALVMWIGEEITEKGIGNGISLIIFANIVSRL PYSIYNEILLLRAGQRNIFQPLLVAVVALLMVVFVVIINEAVRKIPVEYAKRVVGRRVVG GQRTHLPIRINQAGVIPLIFASSLMYFPITIAGFFPNSDFAVFVGRYLDTRSWWFMLINA LLIVFFTYFYTAITFNPENVADNIKKNGGFIPGYRPGRPTAEYLERVSSRLTLVGGLFLA AVTILPITIMSLAGVQNAYIGGSSLLIVVSVALETTK >A7FQ38_CLOB1/69-409 A7FQ38.1 SIFAMGVVPYINSSIIMQLLTIALPSLESLSKEGEEGRKKIQQYTRYGAVILAVIQAFST YAIIARAGALRDGSKLNLFIIIITVTTASTFLMWFGDKITEKGIGNGISLIIFVNIVSRF PSTIYSIVGLQKAETVNFVEVIVFIVIALALFLLVVIMNLGERRIPVQYAGRAVGNKIYK GQSTHIPINVNSSAVIGIIFAISVMQFPITIGQFWPESAFYKFITLNQYSPFRDKSIAYI VLYFLLTVFFTWFYTVVTFKPDEMAENMHKSSGFIPGIRPGEPTAEYIERVITKSSIIGG TFAAIIAVFPIIMAAYSKFQGISFGGTSMLIMVGFALDTIR >A6LPT1_CLOB8/69-416 A6LPT1.1 SILALGVMPYINASIIIQLLTVAIPQLEQLSKEGDTGRKKIQNATRYVSLGIAFILAYGI FATISSSGATVGLTAIQKTIVVFALVVGTTFCMWLGDQLTVKGIGNGTSILIFVNIISRV PATIASMMTLQQAGSASIVEIVLFGVFTVFLLATILYFSLSERRIPVQYAGKFASGNSNM VKSQSTHIPLSIIGSAVLAIIFSMSVMDFPKTIATLFGGVGESQKEWAKWVLNNPTSIFN NKSWMYMVLYAVLTIFFNWFYTQITFKPDEMSENLHKSAGFVPGVRPGEETTTYFERVLN RLSFIGGILAAVLAVTPVMIQNYTQFQNIAFSGTGLLIVINVALDFTR >Q0SQG4_CLOPS/69-409 Q0SQG4.1 SIFALGVVPYINASIIMQLLTVAIPKLEQLSKEGDDGRKKIQKITRYASIVIGAITAYGS YVIIHNVGALKSNSPVSMFLILLTLVVGSTFLMWLGDQITVKGVGNGTSLIIFANILSSL PMTGYQIYNLSKIGKINVVEIALFIFFTLALLAGVIYLSLAERRITVQYAGKAVGNKMMK GQSTHIPLSIIGTTVIAIIFAMSVMSFPTTIAQFFPEAGWSQWITGSSYSPFNAKTWMYP VLYALLTIFFTWFYTQITFKPDEMAENMHKSSGFIPGIRPGKPTEIYLEKVLNRISMFGG CFAAIIAVVPILVANYTPFQGIQFGGTSLLILVSVSLEIMR >A9KJH4_CLOPH/71-425 A9KJH4.1 SLFALGIGPYITSSIIMQLLTIAIPKLEEMQKDGESGRKKIAEISRYVTIGLSIIESVAM VIGFSGSGALEGGLTFTNIVVITASFTAGSAILMWLGERITEKGVGNGISVILLINIVAN MPRDIYGLIEKFVLGESVVKGVTAAIIIVAVILLSVVLIILLNAAQRKIAVQYAKKVQGR KMVGGQSSHIPLKVNTAGVIPVIFAVSIMQFPIIIASFFGVQPARAYFWPKVLHMLNSQS WFNIKNGEFKYTVGVLIYMALIVFFAYFYTSITFNPMEVANNMKKQGGFIPGIRPGKPTT EYLTKVLNYIIFIGAIGLMIVAIIPIFFSGMFDAHVSFSGTSLIIVVSVVLETMK >A7VH89_9CLOT/71-420 A7VH89.1 SIFALNVTPYITASIIIQLLTIAIPALEEMQKDGEDGRKKITAITRFLTIGLAILESAGL AINFGRKGFMDSYNFWTVLTMIVILTGGSAFVMWLGERVTDRGVGNGISIILLINIVSTM PNDFKNIYTQFIKDKDPVRMCLIALLVVAIVVCVTILVCMLQGAERKIPVQYAKKVQGRK QMGGQSSNIPLKVNTAGVIPVIFASSLMAIPSIITSLFGKSPSGVGAKILQGMSQSYWFN ANYPWGFLGLAVYILLVFFFAYFYTAITFNPMEIANNMKKSGGFVPGIRPGKPTQDYLNK ILNYIIFIGAVGLLIVAMIPMFFNGFFSVNVSFGGTSIIIVVGVVIETMK >A6BIS2_9FIRM/71-421 A6BIS2.1 SVFALSITPYITSSIIVQLLTIAIPQLEEMQRDGETGRKKIVAITRYLTVGLALIESGAM AVGFGRQGLLVKYNFVNAAIVVLTLTAGSAFLMWIGERITEKGVGNGISIVLVINIISRI PSDMKTLFDQFVKGKAIASACLAVCVIIAIILALVVFTVILQDGERRIAVQYSQKIVGRR SYGGQSTNIPLKVNTAGVIPIIFSSSLMQFPIVIASFLGKDNGSGIGSEILRGLNQSNWC NPEQIKYSWGLVLYIVLTVFFAYFYTSITFNPLEIANNMKKSGGFIPGIRPGRPTVEYLT KILNYIIFVGACGLILVQIVPILFNGWLGAKVSFGGTSLIIIVSVILETLK >A7VR33_9CLOT/71-423 A7VR33.1 TLFAMSVTPYINSSIIMQLLTVAIPPLERMAKEGEEGRKKIGAITRYVAVVLGLVQGLAY YLYLRGSSYEGTPIVTYTEGAAGVFTAIVIVLVFTAGTAMMMWLGEQINQKGIGNGISIL LFAGIVARLPDTVNILVQALQAAWQAPDSFGQYYFFVPLFVIIFLAIIWVIVFMNDAERR IPVQYAKRVVGRKMYGGQSTHLPIKVNMSGVMPIIFASSILTIPSTIQLFVTPTGFWKTV LDALSTTGWVYALIYFLLILMFAYFYVAIQYNPIEMANNLRQNNGTIPGIRPGKPTSDYI QKILSKITLIGALFLAVIALLPIAFSAFTGMHNLMMGGTSVIILVGVALDTMK >A6NXF0_9BACE/71-437 A6NXF0.1 TVFALGVQPYINSSIIIQLLTVAIPALERLQKEGGEEGRKKIAAITRYTTVAIALLQGFG YFTLINANGLVGSDLPTWLAGIIIVLTFTAGSAFVMWLGEQITEFGIGNGISIILFAGIV SRFPSMLMNMVQGVQRWSMHLSDEEISAMSNGEAFRNSLVHPAMIPLIIIGILALVVFIV FINDSERRIPVQYAKRVVGRKMYGGQSSHIPLKVNMSGVMPIIFAQAIASLPATIAAFIP GGMDSTFMKVFDSNGLVYAIVYFLLILGFSYFYATMQFNPIEVANNLKKNGGFVPGFRPG KPTADFIYKVLNKITLFGAIYLAVIALLPIITSNIINLASGSQMGRSLSIGGTSIIIVVG VALETVK >Q250L2_DESHY/70-413 Q250L2.1 SVFALSITPYITASIILQLLTIVIPSLERLAKEGEFGRKKITQYTRYGTVILGFIQGFGM TFGLRGALIIPKPGMEWAIYLLVALILTAGTAFLMWLGERITENGIGNGISLIIFAGIVA GVPDAIKRIAGLLSVGEINVFSVFGLIVIGLGIIAGVVFIQEGQRRIQVQYAKRVVGRRV YGGQSSHIPMKVNQAGVIPIIFAISLLAFPSTIATWMDPASAYVRFVNTWFVMNGSLTSI PYLIVYAVLIIFFTYFYTAVSFNPVDVADNLKKYGGFIPGLRPGRATSDYLSKILSRLTL AGGTFLAMIAVLPSLVIGLTGIPNITLGGTSLLIVVSVALETMK >Q8R7X3_THETN/69-402 Q8R7X3.1 TIFAMSIVPYINASIIMQLLTIAIPSLEQLAKEGEEGRKKIAQYTRYLTVVLALIQAIGM TIGLRSAVINPTFFRLTVIVITLTAGTTFLMWLGERITENGLGNGSSLIIFAGIISRIPN MIYLTHEYIKAGTSNIFGAIAFVVAELIMIVLIILATEGQRRIPVQYAKRVVGRRVYGGQ STHIPIRINMAGVIPIIFAISLLQFPQQLATFFPHSSFYNFVQKWLSTNGLIYNLLDIFL IIGFTYFYTAVIFNPQDISDNLKKYGGFIPGIRPGKPTTEYLTKVLNRIVFVGALFLAFI ATMPVVLMNVTGLQLYFGGTALLIAVGVALDTMK >A4XLR1_CALS8/69-419 A4XLR1.1 SIFAMSVTPYINSSIIMQLLTIAIPALEELAKQGEEGRKKLAEWTRYGTAILAFLQAVGI YFGLKNAQGLTGGVPVITTQGQGFLGFITITLALTAGTVFLMWIGEQITENGIGNGISLL IFAGIISRIPNGAVSLWNYVAKLNEFSLTSIIGVLLFLVMALAIIVFIIVIQEGERRIPV QYAKRIVGRRVYGGQSTHIPIKVNIAGVIPIIFAISLVMLPTTIAQFFPNSGFYKFVKAY FSSGSFWYTFFYALFIIGFTYFYTAIVFNPVEIANNLKNNGGFIPGIRPGKPTVDFITRV LSKVTFAGALFLAFIAILPTLVGLMFRHQLNIYFGGTSLLIVVGVALETIR >A3DJJ2_CLOTH/71-411 A3DJJ2.1 TIFAMSITPYINASIIIQLLTVAIPKLEALAKEGEEGRKAIAEYTRYGAVVLGFLQATAF YFGLAQAVNERNVLSFITITLTFTAGTAFLMWLGEQITEYGIGNGISLLIFAGIVSRGPR GILYLWDLYRLERLGKGILGIFGVLGVLLLFVVIIASVVWVDQAERRIPVQYAKRVVGRK MYGGQSTHIPIKVNMAGVLPIIFATSFVALPATIVGFFFPNSTHPVAEYFRSFQSRIEVA ILTGLLIIFFTFFYTFIQFNPVEVANNLKKNGGFIPGIRPGKPTSDYIYKVVSRISWFSA LFLAIIQILPSLLQAITGIRGIWFAGTSVLILVGVALETVK >A8MLG0_ALKOO/69-408 A8MLG0.1 TIFALSISPYITSSIIMQLLTIAIPSLEALAKEGEEGSKKIAQYQRYATIILALIQATGI SVGLFRGALINQDTFSIIVVILTLTAGTAFLMWLGEQITEKGIGNGISLLIFAGIIASLP SSLFTTFALTKAGQINPLAIILFIVIAIAMIVAVVAIEAGTRKIPVQYAKRVVGRKMYGG QSSHIPLKVNQSGVMPVIFAMSLLQFPHTIAYFIGSEGGFAKFLNTWLSPTGMPGVFIYN LLSAVLIIFFTYFYTAITFNPVEISNNMKQNGGFIPGIRPGKPTADYINKILTRITLSGA VFLAIITIVPTIVLGITHIPISFGGTTIIIIVGVALETMK >Q18CH6_CLOD6/69-406 Q18CH6.1 SLFALGISPYITASIIIQLLTVGFESLAELQKSGEEGKKKINKYTKYTALALAVVQALGI TLGIVRSALISNSVFFITTVVITLVSASMLVMWIGDKITEKGIGNGSSVIIFAGIISRIP TDVIKISQQVKSGEVAPWVIVILAVVILLTVTGVTFIQEATRKIPVQYAKRVVGRKMYGG QSSHIPMKVNQSGVMPIIFASSLLAFPQTIAMFMGPNAQAFVQKYLSMATEQGFWTYRSI EILLIIFFSYFYTTVSFNTEDISKNMKNNGGFIPGIRPGEPTMDYLNRILTRLTLAGATF LAIIAMVPALTTHYMKVNMSLAGTSLLIVVGVALELKR >B8D0S8_HALOH/72-406 B8D0S8.1 TIFAMSITPYITASIILQLLTGVIPRLEELQKQGVEGRKKLTQYTRYGTVVLAIIQAFGI TMLIGRHNVIVNPNLFNLMLIVISLTAGTAFLMWLGEQITDKGIGNGISIIIFTSIISRF PSYIHRNWELYKTGDITALNILFFLVLAVVIIAGVIFIQQGERRIPVQYSKRVVGRKVYG GRSTHIPMRINQAGVIPVIFAQAVLQFPTVIAAVLPYGWAQDIATALEPGKPVHLVLYAA MIFFFTYFWTAFTFNPEEVADNMRKSGAFIPGIRPGKATENFLTRILVRVTLAGAIFLTV IAIMPYFISDITRVRISFGGTSLLIMTGVALQTMQ hmmer-3.1b2/easel/demotic/examples/example.ssearch.out0000664361611702660230000120053312473612605022443 0ustar wheelerteddy# /usr/local/fasta-36x2/bin/ssearch36_t -q example.fa /misc/data0/databases/Uniprot/uniprot_sprot.fasta SSEARCH searches a sequence data bank version 36.04 January, 2010 Please cite: T. F. Smith and M. S. Waterman, (1981) J. Mol. Biol. 147:195-197; W.R. Pearson (1991) Genomics 11:635-650 Query: example.fa 1>>>sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp. (strain NGR234) GN=NGR_a00980 - 181 aa Library: /misc/data0/databases/Uniprot/uniprot_sprot.fasta 181677051 residues in 516081 sequences opt E() < 20 552 0:= 22 4 0:= one = represents 790 library sequences 24 11 0:= 26 44 11:* 28 185 117:* 30 984 711:*= 32 3307 2749:===*= 34 8676 7455:=========*= 36 16592 15311:===================*== 38 27252 25304:================================*== 40 36214 35297:============================================*= 42 43422 43146:======================================================* 44 46626 47594:===========================================================* 46 47359 48476:===========================================================* 48 45135 46410:==========================================================* 50 40548 42349:==================================================== * 52 35616 37232:============================================== * 54 30462 31803:======================================= * 56 26378 26565:=================================* 58 21901 21809:===========================* 60 17755 17667:======================* 62 13618 14164:=================* 64 11354 11264:==============* 66 8741 8903:===========* 68 7286 7003:========*= 70 5736 5488:======*= 72 4389 4288:=====* 74 3439 3343:====* 76 2941 2602:===* 78 2125 2023:==* 80 1817 1571:=*= 82 1255 1201:=* 84 1079 952:=* 86 779 736:* 88 622 570:* inset = represents 7 library sequences 90 407 441:* 92 310 341:* :=======================================* 94 252 264:* :==================================== * 96 207 204:* :=============================* 98 169 158:* :======================*== 100 146 122:* :=================*=== 102 94 95:* :=============* 104 80 73:* :==========*= 106 44 57:* :======= * 108 42 44:* :======* 110 34 34:* :====* 112 24 26:* :===* 114 20 20:* :==* 116 20 16:* :==* 118 10 12:* :=* >120 18 9:* :=*= 181677051 residues in 516081 sequences Statistics: Expectation_n fit: rho(ln(x))= 6.5893+/-0.000186; mu= 5.4925+/- 0.010 mean_var=54.1928+/-11.354, 0's: 59 Z-trim: 59 B-trim: 3232 in 1/65 Lambda= 0.174222 statistics sampled from 60000 (279906) to 516065 sequences (mod: 1) Kolmogorov-Smirnov statistic: 0.0128 (N=29) at 42 Algorithm: Smith-Waterman (SSE2, Michael Farrar 2006) (7.1 Aug 2009) Parameters: BL50 matrix (15:-5), open/ext: -10/-2 Scan time: 12.010 The best scores are: s-w bits E(516081) sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG ( 181) 1141 292.6 1.4e-78 sp|Q7SY73|ABH6B_XENLA Monoacylglycerol lipase abhd ( 337) 108 32.9 4.1 >>sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=R (181 aa) s-w opt: 1141 Z-score: 1545.9 bits: 292.6 E(516081): 1.4e-78 Smith-Waterman score: 1141; 100.0% identity (100.0% similar) in 181 aa overlap (1-181:1-181) 10 20 30 40 50 60 sp|P55 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|P55 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT 10 20 30 40 50 60 70 80 90 100 110 120 sp|P55 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|P55 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF 70 80 90 100 110 120 130 140 150 160 170 180 sp|P55 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|P55 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP 130 140 150 160 170 180 sp|P55 N : sp|P55 N >>sp|Q7SY73|ABH6B_XENLA Monoacylglycerol lipase abhd6-B (337 aa) s-w opt: 108 Z-score: 137.2 bits: 32.9 E(516081): 4.1 Smith-Waterman score: 108; 24.6% identity (57.7% similar) in 130 aa overlap (41-164:65-189) 20 30 40 50 60 70 sp|P55 SNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGTTADDQLAFVS ::: .. ..:. ..:... : :..:. sp|Q7S IRIYYWYWRRALGMQVKYSSYGNYKFCYTARGKPGNKPSVLM--LHGFSAHKDMWLGMVK 40 50 60 70 80 90 80 90 100 110 120 sp|P55 LIADQGETTTVAF-GPEIGSRIAASFMAACGQLQ--HQIATRTGKEERKFKPFAAAGFSV .. . . . : . : : :: : .... :::.. ::.. : .. ::: .: :. sp|Q7S FLPKNLHLVCVDMPGHEGTSRSALDYYSICGQVKRIHQFVESIGLNK---KPFHLVGTSM 100 110 120 130 140 130 140 150 160 170 180 sp|P55 R---AGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRPN ::. : . . :.. . : . . . :..:. sp|Q7S GGNVAGVYAAQHPTHISSLTLICPAGLMYPIESKFLKQLKVLEKSGDNQRIPLIPSTAGE 150 160 170 180 190 200 sp|Q7S MEDMLRLCSFVRFKIPQQVLQGLIDERIPHNEFYRKLFLALVDEKSRHSLHENMNKIMAP 210 220 230 240 250 260 2>>>sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus oryzae GN=hacA - 345 aa Library: /misc/data0/databases/Uniprot/uniprot_sprot.fasta 181677051 residues in 516081 sequences opt E() < 20 549 0:= 22 0 0: one = represents 1023 library sequences 24 1 0:= 26 0 11:* 28 1 117:* 30 41 711:* 32 346 2748:= * 34 1976 7453:== * 36 6380 15306:======= * 38 17052 25295:================= * 40 31636 35284:=============================== * 42 47449 43131:==========================================*==== 44 57813 47577:==============================================*========== 46 61372 48459:===============================================*============ 48 56648 46394:=============================================*========== 50 48468 42334:=========================================*====== 52 40207 37219:====================================*=== 54 32033 31792:===============================* 56 25118 26556:=========================* 58 19256 21802:=================== * 60 14861 17661:=============== * 62 11182 14159:=========== * 64 8664 11260:========= * 66 7032 8900:======= * 68 5657 7000:======* 70 4343 5486:=====* 72 3344 4287:====* 74 2668 3342:===* 76 2281 2601:==* 78 1739 2022:=* 80 1412 1570:=* 82 1245 1201:=* 84 964 951:* 86 779 736:* 88 638 570:* inset = represents 9 library sequences 90 494 441:* 92 425 341:* :=====================================*== 94 339 264:* :=============================*======== 96 280 204:* :======================*========= 98 218 158:* :=================*======= 100 199 122:* :=============*========= 102 153 95:* :==========*====== 104 125 73:* :========*===== 106 106 57:* :======*===== 108 82 44:* :====*===== 110 99 34:* :===*======= 112 64 26:* :==*===== 114 66 20:* :==*===== 116 43 16:* :=*=== 118 30 12:* :=*== >120 203 9:* :*====================== 181677051 residues in 516081 sequences Statistics: Expectation_n fit: rho(ln(x))= 8.6553+/-0.00021; mu= 1.0570+/- 0.012 mean_var=116.4100+/-22.696, 0's: 69 Z-trim: 86 B-trim: 0 in 0/64 Lambda= 0.118872 statistics sampled from 60000 (216003) to 515883 sequences (mod: 1) Kolmogorov-Smirnov statistic: 0.0572 (N=29) at 40 Algorithm: Smith-Waterman (SSE2, Michael Farrar 2006) (7.1 Aug 2009) Parameters: BL50 matrix (15:-5), open/ext: -10/-2 Scan time: 17.720 The best scores are: s-w bits E(516081) sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hac ( 345) 2265 397.3 1.6e-109 sp|Q8TFU8|HAC1_EMENI Transcriptional activator hac ( 350) 1740 307.2 2e-82 sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac ( 451) 446 85.3 1.7e-15 sp|P41546|HAC1_YEAST Transcriptional activator HAC ( 238) 257 52.9 4.9e-06 sp|O24646|HY5_ARATH Transcription factor HY5 OS=Ar ( 168) 225 47.5 0.00016 sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Ho ( 261) 201 43.3 0.0042 sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bo ( 261) 200 43.1 0.0048 sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive elemen ( 519) 203 43.6 0.0068 sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=So ( 158) 191 41.6 0.0083 sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive elemen ( 521) 200 43.1 0.0097 sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper ( 631) 201 43.3 0.01 sp|A3LYI0|NST1_PICST Stress response protein NST1 (1234) 201 43.3 0.021 sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element- ( 520) 191 41.6 0.028 sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive elemen ( 456) 188 41.1 0.035 sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive elemen ( 519) 189 41.2 0.036 sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive elemen ( 519) 187 40.9 0.045 sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive elemen ( 520) 187 40.9 0.045 sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive elemen ( 520) 185 40.5 0.058 sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive elemen ( 404) 181 39.9 0.071 sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive elemen ( 525) 183 40.2 0.074 sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive elemen ( 428) 181 39.9 0.076 sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element- ( 521) 182 40.0 0.082 sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus ( 338) 175 38.9 0.12 sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive elemen ( 479) 177 39.2 0.14 sp|Q5A2K0|NST1_CANAL Stress response protein NST1 (1399) 186 40.7 0.14 sp|Q8W191|HYH_ARATH Transcription factor HY5-like ( 149) 165 37.2 0.17 sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familia ( 338) 172 38.3 0.17 sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element- ( 470) 174 38.7 0.19 sp|P0C5H8|KAPC_EMENI Putative transcription factor ( 278) 169 37.8 0.2 sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens ( 338) 169 37.8 0.25 sp|P79702|FOS_CYPCA Proto-oncogene c-Fos OS=Cyprin ( 347) 168 37.6 0.29 sp|Q0D9R7|ARFS_ORYSJ Auxin response factor 19 OS=O (1161) 178 39.3 0.3 sp|P15407|FOSL1_HUMAN Fos-related antigen 1 OS=Hom ( 271) 165 37.1 0.32 sp|Q5B3C8|NST1_EMENI Stress response protein nst1 (1125) 176 39.0 0.37 sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kin ( 806) 173 38.5 0.38 sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scro ( 380) 166 37.3 0.4 sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcri ( 349) 165 37.1 0.41 sp|Q90370|MAFB_COTJA Transcription factor MafB OS= ( 311) 161 36.5 0.59 sp|Q90888|MAFB_CHICK Transcription factor MafB OS= ( 311) 161 36.5 0.59 sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive elemen ( 461) 163 36.8 0.7 sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS= ( 171) 154 35.3 0.73 sp|O88778|BSN_RAT Protein bassoon OS=Rattus norveg (3938) 181 39.8 0.74 sp|Q8VCH8|UBXN4_MOUSE UBX domain-containing protei ( 506) 163 36.8 0.77 sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive elemen ( 370) 160 36.3 0.79 sp|A4R2R1|NST1_MAGGR Stress response protein NST1 (1319) 171 38.1 0.79 sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcri ( 351) 159 36.1 0.85 sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocr ( 381) 159 36.1 0.92 sp|A5PKJ4|MK07_BOVIN Mitogen-activated protein kin ( 781) 165 37.1 0.94 sp|Q1DQC1|PAN1_COCIM Actin cytoskeleton-regulatory (1485) 170 37.9 1 sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus mu ( 380) 158 35.9 1 sp|Q6NW59|ATF4_DANRE Cyclic AMP-dependent transcri ( 339) 157 35.8 1 sp|Q76LL6|FHOD3_MOUSE FH1/FH2 domain-containing pr (1578) 170 37.9 1.1 sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive elemen ( 395) 158 35.9 1.1 sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF ( 401) 158 35.9 1.1 sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcri ( 483) 159 36.1 1.2 sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcri ( 494) 159 36.1 1.2 sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive elemen ( 395) 157 35.8 1.2 sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattu ( 327) 155 35.4 1.3 sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo s ( 380) 156 35.6 1.3 sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mu ( 802) 162 36.6 1.4 sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS= ( 323) 154 35.3 1.4 sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Ratt ( 267) 152 34.9 1.5 sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein ( 381) 155 35.4 1.5 sp|P10158|FOSL1_RAT Fos-related antigen 1 OS=Rattu ( 275) 152 34.9 1.5 sp|Q6Y7W8|PERQ2_MOUSE PERQ amino acid-rich with GY (1291) 165 37.1 1.6 sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Hom ( 326) 153 35.1 1.6 sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive elemen ( 428) 155 35.4 1.7 sp|A2R346|KAPC_ASPNC Putative transcription factor ( 283) 151 34.7 1.8 sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS= ( 323) 152 34.9 1.8 sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcri ( 413) 154 35.2 1.8 sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus ( 273) 150 34.6 1.9 sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase ( 780) 159 36.1 1.9 sp|Q16520|BATF_HUMAN Basic leucine zipper transcri ( 125) 143 33.4 2 sp|Q0CEI3|KAPC_ASPTN Putative transcription factor ( 286) 150 34.6 2 sp|P54842|MAFB_RAT Transcription factor MafB OS=Ra ( 323) 151 34.7 2 sp|P29747|CREBA_DROME Cyclic AMP response element- ( 516) 155 35.4 2 sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus ( 326) 151 34.7 2 sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS ( 416) 153 35.1 2.1 sp|Q91496|FOS_TETFL Proto-oncogene c-Fos OS=Tetrao ( 374) 152 34.9 2.1 sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mu ( 267) 149 34.4 2.1 sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcript ( 347) 151 34.7 2.2 sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding prote ( 256) 148 34.2 2.3 sp|P54841|MAFB_MOUSE Transcription factor MafB OS= ( 323) 150 34.6 2.3 sp|A1C9M5|KAPC_ASPCL Putative transcription factor ( 288) 149 34.4 2.3 sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive elemen ( 368) 151 34.7 2.3 sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos ta ( 380) 151 34.7 2.4 sp|Q6NS15|MED15_XENLA Mediator of RNA polymerase I ( 777) 157 35.7 2.4 sp|P94517|YSCB_BACSU Uncharacterized protein yscB ( 221) 146 33.9 2.5 sp|Q504L8|MAFB_XENTR Transcription factor MafB OS= ( 316) 149 34.4 2.5 sp|O57342|MAFA_COTJA Transcription factor MafA OS= ( 286) 148 34.2 2.5 sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus n ( 380) 150 34.6 2.7 sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis ( 381) 150 34.6 2.7 sp|Q56TT7|FOS_PHOCM Proto-oncogene c-Fos OS=Phodop ( 381) 150 34.6 2.7 sp|Q2VZV0|IF2_MAGSA Translation initiation factor ( 872) 157 35.7 2.7 sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcri ( 348) 149 34.4 2.8 sp|Q5HZY0|UBXN4_RAT UBX domain-containing protein ( 506) 152 34.9 2.8 sp|P0C865|MK07_RAT Mitogen-activated protein kinas ( 806) 156 35.6 2.8 sp|Q9N0J3|CEBPD_SHEEP CCAAT/enhancer-binding prote ( 255) 146 33.9 2.9 sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element- ( 367) 149 34.4 2.9 sp|A0JMK9|CAF1A_DANRE Chromatin assembly factor 1 ( 863) 156 35.6 3 sp|Q96JK9|MAML3_HUMAN Mastermind-like protein 3 OS (1134) 158 35.9 3.2 sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcr ( 127) 139 32.7 3.2 sp|Q9C0A6|SETD5_HUMAN SET domain-containing protei (1442) 160 36.2 3.2 sp|B3DM43|SOX5_XENTR Transcription factor Sox-5 OS ( 753) 154 35.2 3.4 sp|A5FV21|IF2_ACICJ Translation initiation factor ( 887) 155 35.4 3.5 sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive elemen ( 357) 147 34.0 3.6 sp|Q9H254|SPTN4_HUMAN Spectrin beta chain, brain 3 (2564) 164 36.9 3.6 sp|B2AWS3|PAN1_PODAN Actin cytoskeleton-regulatory (1441) 159 36.0 3.6 sp|Q61827|MAFK_MOUSE Transcription factor MafK OS= ( 156) 139 32.7 4 sp|O60675|MAFK_HUMAN Transcription factor MafK OS= ( 156) 139 32.7 4 sp|Q4QRL3|CC88B_MOUSE Coiled-coil domain-containin (1481) 158 35.9 4.2 sp|P53450|FOS_TAKRU Proto-oncogene c-Fos OS=Takifu ( 376) 146 33.9 4.3 sp|Q9UPA5|BSN_HUMAN Protein bassoon OS=Homo sapien (3926) 166 37.2 4.4 sp|O88737|BSN_MOUSE Protein bassoon OS=Mus musculu (3942) 166 37.2 4.4 sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Ara ( 315) 144 33.5 4.5 sp|Q7ZVN7|MED15_DANRE Mediator of RNA polymerase I ( 809) 152 34.9 4.6 sp|O42290|MAFA_CHICK Transcription factor MafA OS= ( 286) 143 33.4 4.6 sp|A9V549|EIF3A_MONBE Eukaryotic translation initi (1052) 154 35.2 4.7 sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcr ( 118) 135 32.0 4.8 sp|Q5RCJ1|CIP4_PONAB Cdc42-interacting protein 4 O ( 601) 149 34.4 4.8 sp|O43889|CREB3_HUMAN Cyclic AMP-responsive elemen ( 395) 145 33.7 5 sp|O35284|BATF_MOUSE Basic leucine zipper transcri ( 125) 135 32.0 5.1 sp|Q2UNX4|KAPC_ASPOR Putative transcription factor ( 284) 142 33.2 5.1 sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive elemen ( 508) 147 34.0 5.1 sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide excha (1021) 153 35.0 5.2 sp|Q5F489|TAF3_CHICK Transcription initiation fact ( 930) 152 34.9 5.3 sp|Q5HZG4|TAF3_MOUSE Transcription initiation fact ( 932) 152 34.9 5.3 sp|Q9UKV3|ACINU_HUMAN Apoptotic chromatin condensa (1341) 155 35.4 5.4 sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initi ( 952) 152 34.9 5.4 sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodop ( 381) 144 33.5 5.5 sp|Q3KQU3|MA7D1_HUMAN MAP7 domain-containing prote ( 841) 150 34.5 6.1 sp|Q15642|CIP4_HUMAN Cdc42-interacting protein 4 O ( 601) 147 34.0 6.1 sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive elemen ( 428) 144 33.5 6.2 sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS= ( 313) 141 33.0 6.4 sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gal ( 323) 141 33.0 6.6 sp|Q3UHR0|BAHC1_MOUSE BAH and coiled-coil domain-c (2643) 159 36.0 6.7 sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus ( 295) 140 32.9 6.8 sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Hom ( 295) 140 32.9 6.8 sp|Q9NZ53|PDXL2_HUMAN Podocalyxin-like protein 2 O ( 605) 146 33.9 6.9 sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BA (2158) 157 35.7 6.9 sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcr ( 699) 147 34.0 7.1 sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcr ( 703) 147 34.0 7.2 sp|Q3UIW5|RNF10_MOUSE RING finger protein 10 OS=Mu ( 804) 148 34.2 7.3 sp|Q6C908|PAN1_YARLI Actin cytoskeleton-regulatory (1634) 154 35.2 7.5 sp|Q9W705|NCOA2_XENLA Nuclear receptor coactivator (1516) 153 35.0 7.8 sp|O60841|IF2P_HUMAN Eukaryotic translation initia (1220) 151 34.7 7.9 sp|P15205|MAP1B_RAT Microtubule-associated protein (2459) 157 35.7 7.9 sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5- ( 454) 142 33.2 8.3 sp|Q69022|EBNA2_EBVA8 Epstein-Barr nuclear antigen ( 454) 142 33.2 8.3 sp|Q9ES64|USH1C_MOUSE Harmonin OS=Mus musculus GN= ( 910) 148 34.2 8.3 sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS= ( 289) 138 32.5 8.4 sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein O ( 466) 142 33.2 8.5 sp|Q54Y73|BZPD_DICDI Probable basic-leucine zipper ( 834) 147 34.0 8.6 sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattu ( 295) 138 32.5 8.6 sp|Q6MG48|BAT2_RAT Large proline-rich protein BAT2 (2161) 155 35.3 8.8 sp|Q54HX6|MYBI_DICDI Myb-like protein I OS=Dictyos ( 977) 148 34.2 9 sp|Q90596|MAFK_CHICK Transcription factor MafK OS= ( 156) 132 31.5 9.1 sp|Q4VYS1|FOXP2_XENLA Forkhead box protein P2 OS=X ( 706) 145 33.7 9.2 sp|Q54NF3|Y6434_DICDI Uncharacterized protein DDB_ ( 412) 140 32.8 9.5 sp|Q0CPW4|PAN1_ASPTN Actin cytoskeleton-regulatory (1469) 151 34.7 9.5 sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Ho ( 591) 143 33.3 9.7 sp|Q00312|RBF1_CANAL Transcription factor RBF1 OS= ( 527) 142 33.2 9.7 sp|P48634|BAT2_HUMAN Large proline-rich protein BA (2157) 154 35.2 9.9 >>sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS (345 aa) s-w opt: 2265 Z-score: 2101.4 bits: 397.3 E(516081): 1.6e-109 Smith-Waterman score: 2265; 100.0% identity (100.0% similar) in 345 aa overlap (1-345:1-345) 10 20 30 40 50 60 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG 10 20 30 40 50 60 70 80 90 100 110 120 sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ 70 80 90 100 110 120 130 140 150 160 170 180 sp|Q1X QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|Q1X QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD 130 140 150 160 170 180 190 200 210 220 230 240 sp|Q1X ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|Q1X ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK 190 200 210 220 230 240 250 260 270 280 290 300 sp|Q1X HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|Q1X HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS 250 260 270 280 290 300 310 320 330 340 sp|Q1X EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC ::::::::::::::::::::::::::::::::::::::::::::: sp|Q1X EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 310 320 330 340 >>sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS (350 aa) s-w opt: 1740 Z-score: 1614.7 bits: 307.2 E(516081): 2e-82 Smith-Waterman score: 1740; 78.9% identity (94.3% similar) in 332 aa overlap (13-344:18-348) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKK .:::.::. ::::::::::::::.. .: .: .:::::::::: sp|Q8T MKSADRFSPVKMEDAFANSLPTTPSLEVPVLTVSPADTSLQTKNVVAQ-TKPEEKKPAKK 10 20 30 40 50 60 70 80 90 100 110 sp|Q1X RKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEK :::::::::::::::::::::::::::::::::::::::::::::::::::::::::.:: sp|Q8T RKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLESEK 60 70 80 90 100 110 120 130 140 150 160 170 sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLF :.::::::::::::.::::::::::::.:::.::::::: .:: .:::..::::::::: sp|Q8T IDMEQQNQFLLQRLAQMEAENNRLSQQVAQLSAEVRGSRHSTPTSSSPASVSPTLTPTLF 120 130 140 150 160 170 180 190 200 210 220 230 sp|Q1X KQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL ::: ::.::.::::::::..:::::::::.:::: :..:::::::.::::: ::: :::: sp|Q8T KQEGDEVPLDRIPFPTPSVTDYSPTLKPSSLAESPDLTQHPAVSVGGLEGDESALTLFDL 180 190 200 210 220 230 240 250 260 270 280 290 sp|Q1X GSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSM :...::. : :..:::::::: :::.::::.: :::..:::.:::::..::::::::::: sp|Q8T GASIKHEPTHDLTAPLSDDDFRRLFNGDSSLESDSSLLEDGFAFDVLDSGDLSAFPFDSM 240 250 260 270 280 290 300 310 320 330 340 sp|Q1X VNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC :.::.:::::: .:...:: : ..::..:.::. ::::.:::::::::: sp|Q8T VDFDTEPVTLEDLEQTNGLSDSASCKAASLQPSHGASTSRCDGQGIAAGSA 300 310 320 330 340 350 >>sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS (451 aa) s-w opt: 446 Z-score: 413.4 bits: 85.3 E(516081): 1.7e-15 Smith-Waterman score: 446; 31.1% identity (51.8% similar) in 421 aa overlap (7-344:43-450) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN . : . ::. : :.. :. : . . sp|Q8T EASPAESFLSAPGDNFTSLFADSTPSTLNPRDMMTPDSV-ADIDSRLSVIPESQDAEDDE 20 30 40 50 60 70 40 50 60 70 80 90 sp|Q1X SADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAA : .... . ::::.:::::::: :: :::::::::::::::::::::.::::::: : sp|Q8T SHSTSATAPSTSEKKPVKKRKSWGQVLPEPKTNLPPRKRAKTEDEKEQRRVERVLRNRRA 80 90 100 110 120 130 100 110 120 130 140 sp|Q1X AQTSRERKRLEMEKLENEKIQME-------QQNQFLLQRLSQMEAENNRLS--------- ::.::::::::.: ::... ..: . : .:...:.... .. .. sp|Q8T AQSSRERKRLEVEALEKRNKELETLLINVQKTNLILVEELNRFRRSSGVVTRSSSPLDSL 140 150 160 170 180 190 150 160 170 180 sp|Q1X QQLAQLAAEVRGSRANTPMPG------------------SPATASPTLTPTLFKQ-ERDE :. :. .. ::: . : . .::. ::.: : :. . : sp|Q8T QDSITLSQQLFGSRDGQTMSNPEQSLMDQIMRSAANPTVNPASLSPSLPPISDKEFQTKE 200 210 220 230 240 250 190 200 210 220 230 sp|Q1X LPLERIPFPTPSLSDYSPTLKPSTLAE--------SSDVAQHPAVSVAGLEGDGSALPLF :. . . : . .. : :.: .:.::::..: .:.:.: sp|Q8T EDEEQADEDEEMEQTWHETKEAAAAKEKNSKQSRVSTDSTQRPAVSIGG----DAAVPVF 260 270 280 290 300 240 250 260 270 sp|Q1X D-------LGSDLKHHSTDD----------VAAPLSDDDFNRLFHGDSSVEPDSSVFEDG . :: : :. :: ..: :. : . :.... . :..:. .: sp|Q8T SDDAGANCLGLDPVHQ--DDGPFSIGHSFGLSAALDADRY--LLESQLLASPNASTVDD- 310 320 330 340 350 360 280 290 300 310 sp|Q1X LAFDVLEGGDLSAF--PFDSMVNFDSEPVTLEGIEMA---------------------HG : : : . . : :. : .:: . . . : : sp|Q8T ---DYLAGDSAACFTNPLPSDYDFDINDFLTDDANHAAYDIVAASNYAAADRELDLEIHD 370 380 390 400 410 320 330 340 sp|Q1X LPDETTCKTSSVQPGFGASTTRCDGQGIAAGC .. . : :: :::. :: :::.: sp|Q8T PENQIPSRHSIQQPQSGASSHGCDDGGIAVGV 420 430 440 450 >>sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS (238 aa) s-w opt: 257 Z-score: 243.3 bits: 52.9 E(516081): 4.9e-06 Smith-Waterman score: 257; 32.9% identity (60.3% similar) in 219 aa overlap (63-270:16-216) 40 50 60 70 80 sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP---KTNLPPRKRAKTEDEKEQRRIER : .: :..:::::::::..::::::::: sp|P41 MEMTDFELTSNSQSNLAIPTNFKSTLPPRKRAKTKEEKEQRRIER 10 20 30 40 90 100 110 120 130 140 sp|Q1X VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ-NQFLLQRLSQME-AENNRLSQQLAQLA .:::: ::. :::.:::... :: . .:. :. :..:.. : : . . .:.: sp|P41 ILRNRRAAHQSREKKRLHLQYLERKCSLLENLLNSVNLEKLADHEDALTCSHDAFVASLD 50 60 70 80 90 100 150 160 170 180 190 200 sp|Q1X A--EVRGSR-ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS . ...: :. .: ..: :.::. ::. :. ::.:. sp|P41 EYRDFQSTRGASLDTRASSHSSSDTFTPS---------PLNCTMEPA--------TLSPK 110 120 130 140 210 220 230 240 250 260 sp|Q1X TLAES-SDVAQHPAVSVAGLEG--DGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFH .. .: :: ... :. ....:: : ...: .. .: :: :: . . sp|P41 SMRDSASDQETSWELQMFKTENVPESTTLPAVD-NNNLFDAVASPLADPLCDDIAGNSLP 150 160 170 180 190 200 270 280 290 300 310 320 sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK :.:.. :. sp|P41 FDNSIDLDNWRNPEAQSGLNSFELNDFFITS 210 220 230 >>sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabid (168 aa) s-w opt: 225 Z-score: 216.5 bits: 47.5 E(516081): 0.00016 Smith-Waterman score: 225; 31.8% identity (62.4% similar) in 170 aa overlap (6-167:3-167) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSV--DSLPATP---ASEVPVLTVSP---ADTSLNSADVKTQEVKPEEKKP :.. ::. .:::.. .: .: : .. .: . . :. .: . sp|O24 MQEQATSSLAASSLPSSSERSSSSAPHLEIKEGIESDEEIRRVPEFGGEAVGKETSG 10 20 30 40 50 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE .. .. ::: .. :::..: :::..:..:.::::..:: .::::. . .:: sp|O24 RESGSATGQERTQATVGESQRKRGRTPAEKENKRLKRLLRNRVSAQQARERKKAYLSELE 60 70 80 90 100 110 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP :. ..:..:. : .::: .. ::. : . : . ... ::. . :: : :: sp|O24 NRVKDLENKNSELEERLSTLQNENQMLRHILKNTTGNKRGGGG-----GSNADASL 120 130 140 150 160 180 190 200 210 220 230 sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL >>sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Homo s (261 aa) s-w opt: 201 Z-score: 190.7 bits: 43.3 E(516081): 0.0042 Smith-Waterman score: 201; 28.5% identity (58.6% similar) in 186 aa overlap (16-187:10-186) 10 20 30 40 50 60 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG :: . .: .:. .::... : . : .. . . : : sp|P17 MVVVAAAPNPADGTPKVLLLSGQPASAAGAPAGQALPLMVPAQRGASPEAASGG 10 20 30 40 50 70 80 90 100 110 sp|Q1X QELPVPKTNLPPRKRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME .:.. ::: . :. :.. ..: :.::.::::.:.::. .: .::.. ...: sp|P17 ----LPQA----RKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLE 60 70 80 90 100 120 130 140 150 160 sp|Q1X QQNQFLL-------QRLSQMEAENNRLSQQL------AQLAAEVRGSRANTPMPGSPATA ..:: :: .. . .::..: :.: :. ::..:... :. :: .: sp|P17 EENQKLLLENQLLREKTHGLVVENQELRQRLGMDALVAEEEAEAKGNEVR-PVAGSAESA 110 120 130 140 150 160 170 180 190 200 210 220 sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGD . : : . . . ::. : sp|P17 ALRLRAPLQQVQAQLSPLQNISPWILAVLTLQIQSLISCWAFWTTWTQSCSSNALPQSLP 170 180 190 200 210 220 >>sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos ta (261 aa) s-w opt: 200 Z-score: 189.7 bits: 43.1 E(516081): 0.0048 Smith-Waterman score: 200; 29.9% identity (56.9% similar) in 204 aa overlap (16-206:10-196) 10 20 30 40 50 60 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG ::. : .: .:. .:: :. : . : : sp|Q3S MVVVAPAQSPAAGAPKVLLLSGQPAATGGAPAGRALPVMVP------------G 10 20 30 40 70 80 90 100 110 sp|Q1X QELPVPK--TNLPP--RKRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEK :. :. ...:: ::: . :. :.. ..: :.::.::::.:.::. .: .::.. sp|Q3S QQGASPEGASGVPPQARKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQV 50 60 70 80 90 100 120 130 140 150 160 sp|Q1X IQMEQQNQFLL-------QRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASP ...:..:: :: .. . .::..: :.:. . : : .:.: :. .:. sp|Q3S VDLEEENQKLLLENQLLREKTHGLVVENQELRQRLG-MDALVTEEEAETKGNGAGLVAGS 110 120 130 140 150 160 170 180 190 200 210 220 sp|Q1X TLTPTLFKQERDELPLERIPFPTPSLSDYSP-TLKPSTLAESSDVAQHPAVSVAGLEGDG . . .: : . ::... :.. :: :: :: sp|Q3S AESAAL----RLRAPLQQVQAQLSPLQNISPWTLMALTLQTLSLTSCWAFCSTWTQSCSS 170 180 190 200 210 230 240 250 260 270 280 sp|Q1X SALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDL sp|Q3S DVLPQSLPAWSSSQKWTQKDPVPYRPPLLHPWGRHQPSWKPLMN 220 230 240 250 260 >>sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive element-bi (519 aa) s-w opt: 203 Z-score: 187.0 bits: 43.6 E(516081): 0.0068 Smith-Waterman score: 203; 32.7% identity (59.0% similar) in 156 aa overlap (4-152:210-360) 10 20 30 sp|Q1X MSCDMEKTMSSVDSL-PATPASEVPVLTVSP-A : : ..: : ::.:.. :: :.: : sp|A1L PHEVDQFLNLSPKGLECLQMPPTPPSSVGSDSEGSQSPVHPCAPASPTQTPAVLKVAPRA 180 190 200 210 220 230 40 50 60 70 80 sp|Q1X DTSLNSADVKTQEVKPEEKKP-----AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRR .::.:. . : : . . : .:: .. ::: :.:: : .:: .. sp|A1L PSSLSSSPLLTAPHKLQGSGPLLLTEEEKRTLIAEGYPVP-TKLPLSK----AEEKALKK 240 250 260 270 280 290 90 100 110 120 130 140 sp|Q1X IERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL :.: ..:. .:: ::..:. .. ::.. ..:. : ... ..: :. : ::: .: sp|A1L IRRKIKNKISAQESRRKKKEYVDALEKKVETCSNENHELRRKVENLECTNKSLLQQLHSL 300 310 320 330 340 350 150 160 170 180 190 200 sp|Q1X AAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTL : : : sp|A1L QAVVAGKVPRSCRVTGTQTSTCLMVVVLCFSLFLGSFYPGLSPCSSITKADLSREISIHD 360 370 380 390 400 410 >>sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanu (158 aa) s-w opt: 191 Z-score: 185.4 bits: 41.6 E(516081): 0.0083 Smith-Waterman score: 191; 36.8% identity (67.4% similar) in 95 aa overlap (60-154:66-157) 30 40 50 60 70 80 sp|Q1X PADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER :: : :. :::... .::..:..: sp|Q9S SDDEIRRVPEMGGEATGTTSASGRDGVSAAGQAQPSAGTQ---RKRGRSPADKENKRLKR 40 50 60 70 80 90 90 100 110 120 130 140 sp|Q1X VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE .::::..:: .::::. . :: . ..: .: : .::: .. ::. : . : . .: sp|Q9S LLRNRVSAQQARERKKAYLIDLEARVKELETKNAELEERLSTLQNENQMLRHILKNTTAG 100 110 120 130 140 150 150 160 170 180 190 200 sp|Q1X VRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAES .. .: sp|Q9S AQEGRK >>sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive element-bi (521 aa) s-w opt: 200 Z-score: 184.2 bits: 43.1 E(516081): 0.0097 Smith-Waterman score: 200; 24.1% identity (52.9% similar) in 291 aa overlap (18-297:234-518) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP .:: .: . . . : .: : : : sp|Q8B PTPPSSHSSDSEGSLSPNPRLHPFSLSQAHSPARAMPRGPSALSTSPLLTAPHKLQGSGP 210 220 230 240 250 260 50 60 70 80 90 100 sp|Q1X EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE .:: .. :.: :.:: : .:: ..:.: ..:. .:: ::..:. sp|Q8B LVLTEEEKRTLVAEGYPIP-TKLPLTK----SEEKALKKIRRKIKNKISAQESRRKKKEY 270 280 290 300 310 110 120 130 140 150 160 sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMPGSPATA :..::.. . .: : ... .: : : ::: .: . : :. . : . :. . . sp|Q8B MDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLAGTQTGT 320 330 340 350 360 370 170 180 190 200 210 sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV---AQHPAV .. : . :.:. . : . : .: : ...: .. .: . sp|Q8B CLMVVVLCFAVAFGSFFQGYGPYPSATKMALPSQHPLSEPYTASVVRSRNLLIYEEHAPL 380 390 400 410 420 430 220 230 240 250 260 270 sp|Q1X SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV-FEDGL .. .... : .: ::.: . :. : : : . :. ...:.: . . ... : sp|Q8B EESSSPASAGELGGWDRGSSLLRASSGLEALPEVDLP-HFLISNETSLEKSVLLELQQHL 440 450 460 470 480 490 280 290 300 310 320 330 sp|Q1X AFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRC . . :::.. :.. .. :: sp|Q8B VSSKLEGNETLKVVELERRVNATF 500 510 520 >>sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper tra (631 aa) s-w opt: 201 Z-score: 183.6 bits: 43.3 E(516081): 0.01 Smith-Waterman score: 201; 24.5% identity (55.4% similar) in 233 aa overlap (46-270:363-593) 20 30 40 50 60 70 sp|Q1X PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTN----LP : :: : :::: . . :: : : sp|Q54 NSNNISTQINNLNNNINNQNNQLNGSNNGKKKEEDKSIKKRK-FISSTPVKGENGGTTLI 340 350 360 370 380 390 80 90 100 110 120 sp|Q1X PRKRA--KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL : . . ..:..:.: .:...:: ::: :.:.. .. ::.. .. :. . :. sp|Q54 PTTDGGFNMDEERHQKRQRRLVKNREAAQLFRQRQKAYIQDLEKKVSDLTGTNSEFRARV 400 410 420 430 440 450 130 140 150 160 170 180 sp|Q1X SQMEAENNRLSQQLAQLAAEVRGSRA-NTPMPGSPATASPTLTPTLFKQERDELPLERIP ...::. . .:: : : . . . : :: .: ::. . : . : : sp|Q54 ELLNSENKLIREQLLYLRNFVTQAVSFSFPKGGSNGTNSPSGVADQFLNSILP-PGLNSP 460 470 480 490 500 510 190 200 210 220 230 240 sp|Q1X FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVA .: : .: .. ...:.. .. ...:. . :. . :.: .: .. sp|Q54 LPQGILPAGMNLQNPMIMSAIAEAASKNSTFRQNIQGNLLGTPIPSPQSSLTSNSGNNSP 520 530 540 550 560 570 250 260 270 280 290 300 sp|Q1X A-PLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG ::.... : ...... .:.: sp|Q54 NKPLNNNNNNNNINNNNNNNPSSPNNNLNNNNNISPNSSTSHQVPYLPQNTPPQQSTPNQ 580 590 600 610 620 630 >>sp|A3LYI0|NST1_PICST Stress response protein NST1 OS=P (1234 aa) s-w opt: 201 Z-score: 178.2 bits: 43.3 E(516081): 0.021 Smith-Waterman score: 201; 26.6% identity (54.6% similar) in 304 aa overlap (41-332:727-1001) 20 30 40 50 60 70 sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL . .:.: .:.. :: .. .. : .: sp|A3L ELKQKQEALKADQRRRKEEAKLKREEEKKKRIEELKRKEEEHKKKVEAQQKKEEEAK-KL 700 710 720 730 740 750 80 90 100 110 120 130 sp|Q1X PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLS ... :.:.:..... :. .. : .::.::..: :::... :::. :. sp|A3L KEERKKKAEEERKKKEEEKRQKELLKKQKEEERERLKLEAEENERLEKEQQE------LQ 760 770 780 790 800 140 150 160 170 180 190 sp|Q1X QMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFP ... .:.: . ::: ::. . .:: . ::: . :..: . : . : sp|A3L ELQESQNQLELESAQLPAEL-----AEEINASPDSFSPTKNH-LLEQLYQARP-SSVSGP 810 820 830 840 850 860 200 210 220 230 240 sp|Q1X T---PSLSDYSPTLKPSTLAESSDVAQ----HPAVSVAGLEGDGSALPLFDLGSDLKHHS : : .. ..: : . : :: : . ::.: : :.: :: : . . . . : sp|A3L TTISPPIQ-FTPEAVPPVAAVSSVVPSVVPISPALSGAILNGTGS--P--NSRNAMLYGS 870 880 890 900 910 250 260 270 280 290 sp|Q1X TDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE----DGLAFDV-LEGGDLSAFPFDSMVNF . .. : : : . :.. : :: . .: ... : .::: :. . .: sp|A3L SAQAQLP------NGLNSSTSNMSPWSSKSRLNSTSGASLQSNLFQPQLSASGFSPFNDF 920 930 940 950 960 970 300 310 320 330 340 sp|Q1X DSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC : :.: :: .. .. ...:.: ::. sp|A3L -STPATSAGI---GSVNVNAPLASTAVEPLAGANNGGVWNPSTTSSRNNSIWSNTPNLNN 980 990 1000 1010 1020 sp|A3L ASIWGNTLPSLAGGAGAGASTPSAAHTLPNSAPLASDNELIQVAAYNTFQMLQNSNQLEF 1030 1040 1050 1060 1070 1080 >>sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element-bind (520 aa) s-w opt: 191 Z-score: 175.9 bits: 41.6 E(516081): 0.028 Smith-Waterman score: 191; 25.3% identity (51.7% similar) in 300 aa overlap (4-290:214-499) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT : . ..: . :..:. . ... . . sp|Q66 AEPPEMSQFLKVTQEDLVQMPPTPPSSHGSDSDGSQSPRSLPPSSPVRPMARSSTAISTS 190 200 210 220 230 240 40 50 60 70 80 90 sp|Q1X SLNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR : .: : : .. : .:: .. :.: :.:: : .:: .:..: .. sp|Q66 PLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TKLPLTK----AEEKALKRVRRKIK 250 260 270 280 290 100 110 120 130 140 150 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG :. .:: ::..:. .: ::.. . ..:. : ... .:. : : ::: .: . : sp|Q66 NKISAQESRRKKKEYVECLEKKVETYTSENNELWKKVETLETANRTLLQQLQKLQTLVT- 300 310 320 330 340 350 160 170 180 190 200 210 sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV :. . :. .:. : : . : : . :..:. : :.: . .: .: sp|Q66 SKISRPYK---MAATQTGTCLMVAALCFVLVLGSLAPCLPAFSSGSKTVKEDPVAADSVY 360 370 380 390 400 410 220 230 240 250 260 sp|Q1X A--QHPAVSV------AGLEGDGSALPLFDL----GSDLKHHSTDDVAAPLSDDDFNRLF : : :. :. :: :: :. . : .:: . : : .: . : sp|Q66 AASQMPSRSLLFYDDGAGSWEDGHRGALLPVEPPEGWELKPGGP---AEPRPQDHL-RHD 420 430 440 450 460 470 270 280 290 300 310 320 sp|Q1X HGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTC :.:: .. .. ... :. ..: : sp|Q66 HADS-IHETTKYLRETWPEDTEDNGASPNFSHPKEWFHDRDLGPNTTIKLS 480 490 500 510 520 >>sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-bi (456 aa) s-w opt: 188 Z-score: 174.2 bits: 41.1 E(516081): 0.035 Smith-Waterman score: 188; 26.2% identity (53.3% similar) in 240 aa overlap (48-275:213-434) 20 30 40 50 60 70 sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK .::: :. : :: :.:: : sp|Q3S SSGDLQQHHLAAPHLLRPGTGHCQELVLTEDEKKLLAKE---GITLP---TQLPLTKY-- 190 200 210 220 230 80 90 100 110 120 130 sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN .:. ..:.: .::. .:: ::..:. .. ::.. ::: : ... ..: .: sp|Q3S --EERMLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNL 240 250 260 270 280 290 140 150 160 170 180 sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGS---------PATASPTLTPTLFKQERDELPLERIP : .:: .: : : : ... . :. . :...: : ..: : : . : sp|Q3S SLLEQLKKLQAIVVQSTSKSAQTGTCIAVLLFSFALIVLPSISP--FASNRAESPGDFAP 300 310 320 330 340 350 190 200 210 220 230 240 sp|Q1X ---FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTD : .: . . :.: : .:. : :. ....:. . . : .. . ..: sp|Q3S VRVFSRTLHNDAASRVAPDT-APGSE-APGPGPNTGALQERSPGSP----PGEWESQDTR 360 370 380 390 400 250 260 270 280 290 300 sp|Q1X DVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTL . : : . : .:.: : :.... : sp|Q3S ALDNSTEDLDNSTLVQGNSVKELDQATLLDCAPPEPAVSPGHVGLEAAGGEL 410 420 430 440 450 >>sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive element-bi (519 aa) s-w opt: 189 Z-score: 174.0 bits: 41.2 E(516081): 0.036 Smith-Waterman score: 189; 26.7% identity (53.8% similar) in 240 aa overlap (4-232:215-445) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT : . ..: . :..:. . ... . . sp|Q9Z AEPPEMSQFLKVTPEDLVQMPPTPPSSHGSDSDGSQSPRSLPPSSPVRPMARSSTAISTS 190 200 210 220 230 240 40 50 60 70 80 90 sp|Q1X SLNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR : .: : : .. : .:: .. :.: :.:: : .:: .:..: .. sp|Q9Z PLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TKLPLTK----AEEKALKRVRRKIK 250 260 270 280 290 100 110 120 130 140 150 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG :. .:: ::..:. .: ::.. . ..:. : ... .:. : : ::: .: . : sp|Q9Z NKISAQESRRKKKEYVECLEKKVETYTSENNELWKKVETLETANRTLLQQLQKLQTLVT- 300 310 320 330 340 350 160 170 180 190 200 210 sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV :. . :. .:. : : . : : . :..:. : :.: . .: .: sp|Q9Z SKISRPY---KMAATQTGTCLMVAALCFVLVLGSLVPCLPAFSSGSMTVKEDPIAADSVY 360 370 380 390 400 410 220 230 240 250 260 sp|Q1X A--QHPAVSV------AGL--EGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHG : : :. :. :: .: :. ::. sp|Q9Z AASQMPSRSLLFYDDGAGSWEDGRGALLPVEPPEGWELKPGGPAEQRPQDHLRHDRADSI 420 430 440 450 460 470 >>sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive element-bi (519 aa) s-w opt: 187 Z-score: 172.2 bits: 40.9 E(516081): 0.045 Smith-Waterman score: 187; 26.2% identity (53.3% similar) in 240 aa overlap (4-232:215-445) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT : . ..: . :..:. . ... . . sp|Q96 AEPLEVNQFLKVTPEDLVQMPPTPPSSHGSDSDGSQSPRSLPPSSPVRPMARSSTAISTS 190 200 210 220 230 240 40 50 60 70 80 90 sp|Q1X SLNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR : .: : : .. : .:: .. :.: :.:: : .:: .:..: .. sp|Q96 PLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TKLPLTK----AEEKALKRVRRKIK 250 260 270 280 290 100 110 120 130 140 150 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG :. .:: ::..:. .: ::.. . ..:. : ... .: : : ::: .: . : sp|Q96 NKISAQESRRKKKEYVECLEKKVETFTSENNELWKKVETLENANRTLLQQLQKLQTLVT- 300 310 320 330 340 350 160 170 180 190 200 210 sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS-- .. . :. .:. : : . : : . : .:. : :.: . :: .. sp|Q96 NKISRPY---KMAATQTGTCLMVAALCFVLVLGSLVPCLPEFSSGSQTVKEDPLAADGVY 360 370 380 390 400 410 220 230 240 250 260 sp|Q1X DVAQHPAVSV------AGLEGDGSA--LPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHG ..: :. :. ::: :: . ::. sp|Q96 TASQMPSRSLLFYDDGAGLWEDGRSTLLPMEPPDGWEINPGGPAEQRPRDHLQHDHLDST 420 430 440 450 460 470 >>sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive element-bi (520 aa) s-w opt: 187 Z-score: 172.2 bits: 40.9 E(516081): 0.045 Smith-Waterman score: 187; 23.9% identity (51.9% similar) in 297 aa overlap (14-297:228-517) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPAT--PASEVPVLTVSPADTSLNSADVK ::: : :. .: . ... : .: : sp|Q70 DHLHLPPTPPSSHGSDSEGSLSPNPRLHPFSLPQTHSPSRAAPRAPSALSSSPLLTAPHK 200 210 220 230 240 250 50 60 70 80 90 100 sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR : : .:: .. :.: :.:: : .:: ..:.: ..:. .:: :: sp|Q70 LQGSGPLVLTEEEKRTLIAEGYPIP-TKLPLSKS----EEKALKKIRRKIKNKISAQESR 260 270 280 290 300 310 110 120 130 140 150 160 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMP ..:. :..::.. . .: : ... .: : : ::: .: . : :. . : . sp|Q70 RKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLA 320 330 340 350 360 370 170 180 190 200 210 sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV--- :. . . .. : . :.:. . : . .: : ...: .. sp|Q70 GTQTGTCLMVVVLCFAVAFGSFFQGYGPYPSATKMALPSQHSLQEPYTASVVRSRNLLIY 380 390 400 410 420 430 220 230 240 250 260 270 sp|Q1X AQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV .: .. :... : .: ::.: . : . .. : .. ...:.: . . sp|Q70 EEHSPPEESSSPGSAGELGGWDRGSSLLRVSGLESRPDVDLPHF--IISNETSLEKSVLL 440 450 460 470 480 490 280 290 300 310 320 330 sp|Q1X -FEDGLAFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFG ... :. :::.. :.. .: :: sp|Q70 ELQQHLVSAKLEGNETLKVVELDRRVNTTF 500 510 520 >>sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive element-bi (520 aa) s-w opt: 185 Z-score: 170.3 bits: 40.5 E(516081): 0.058 Smith-Waterman score: 185; 23.9% identity (51.5% similar) in 297 aa overlap (14-297:228-517) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPAT--PASEVPVLTVSPADTSLNSADVK ::: : :. .: . ... : .: : sp|Q5R DHLHLPPTPPSSHGSDSEGSLSPNPRLHPFSLPQTHSPSRAAPRAPSALSSSPLLTAPHK 200 210 220 230 240 250 50 60 70 80 90 100 sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR : : .:: .. :.: :.:: : .:: ..:.: ..:. .:: :: sp|Q5R LQGSGPLVLTEEEKRTLIAEGYPIP-TKLPLTKS----EEKALKKIRRKIKNKISAQESR 260 270 280 290 300 310 110 120 130 140 150 160 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMP ..:. :..::.. . .: : ... .: : : ::: .: . : :. . : . sp|Q5R RKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLA 320 330 340 350 360 370 170 180 190 200 210 sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV--- :. . . .. : . :.:. . : . .: : ...: .. sp|Q5R GTQTGTCLMVVVLCFAVAFGSFFQGYGPYPSATKMALPSQHSLQEPYTASVVRSRNLLIY 380 390 400 410 420 430 220 230 240 250 260 270 sp|Q1X AQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV .: . :... : .: ::.: . : . .. : .. ...:.: . . sp|Q5R EEHSPPEEPSSPGSAGELGGWDRGSSLLRVSGLESRPDVDLPHF--IISNETSLEKSVLL 440 450 460 470 480 490 280 290 300 310 320 330 sp|Q1X -FEDGLAFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFG ... :. :::.. :.. .: :: sp|Q5R ELQQHLVSAKLEGNETLKVVELDRRVNTTF 500 510 520 >>sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-bi (404 aa) s-w opt: 181 Z-score: 168.6 bits: 39.9 E(516081): 0.071 Smith-Waterman score: 181; 26.7% identity (56.0% similar) in 225 aa overlap (1-207:107-318) 10 20 sp|Q1X MSCDMEKTMSSV--DSLP--ATPASEVPVL .:: .. .... ...: : . : . sp|Q61 LGSSSSSILHDHNYSLPQEHVSIDLGECEMISCRGRRELTGLAGSTFPFADTESFEKEGF 80 90 100 110 120 130 30 40 50 60 70 80 sp|Q1X TVSPADTSLNSADVKTQEV--KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ :.: .:. . ... :::: .:. : :: ..:: : .:. sp|Q61 HVTPLPGEERAAEQEMSRLILTEEEKKLLEKE---GLTLP---STLPLTKV----EEQVL 140 150 160 170 180 90 100 110 120 130 140 sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA .:..: .::. ::: ::..:.. . ::.. ... ::. : ......: .: : .:: sp|Q61 KRVRRKIRNKRAAQESRKKKKVYVVGLESRVLKYTAQNRELQNKVQRLEEQNLSLLDQLR 190 200 210 220 230 240 150 160 170 180 190 sp|Q1X QLAAEVRGSRANTPMPGSPA------TASPTLTPTLFKQE-RDELPLERIPF-----PTP .: : : :: :: . :.:...... : .: : . . : sp|Q61 KLQAMVI-EIANKTSSGSTCVLVLVFSFCLLLVPAMYSSDARGSVPAEYVVLHRKLRALP 250 260 270 280 290 300 200 210 220 230 240 250 sp|Q1X SLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLS : .:..: :::.:. sp|Q61 SEDDHQP--KPSALSSELPMDSTHQSLDSSEHMFLVSSNFSCVLYHAPQAEQPLHWPLWD 310 320 330 340 350 360 >>sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive element-bi (525 aa) s-w opt: 183 Z-score: 168.4 bits: 40.2 E(516081): 0.074 Smith-Waterman score: 183; 31.0% identity (55.7% similar) in 158 aa overlap (4-152:218-368) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVP------VLT : : .: . ::: :.: : . . sp|A2V VDQFLNLCPKEVAPTEALQMPPTPPSSHGSDSEGGQSPTRSLP--PSSPVQSQAGGKMAA 190 200 210 220 230 240 30 40 50 60 70 80 sp|Q1X VSPA---DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ ::. .. : .: : : : .:: .. :.: :.:: : .:: sp|A2V RSPSALSNSPLLTAPHKLQGSGPLMLTEEEKRTLVAEGYPIP-TKLPLTK----AEEKAL 250 260 270 280 290 300 90 100 110 120 130 140 sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA ..:.: ..:. .:: ::..:. :..::.. . ..:. : ... .:. : : ::: sp|A2V KKIRRKIKNKISAQESRRKKKEYMDSLEKRVENSSSENSELRKKVEVLESTNRTLLQQLQ 310 320 330 340 350 360 150 160 170 180 190 200 sp|Q1X QLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS .: : : : sp|A2V RLQAMVTGKVTRSCKAAGTQTGTCLMMVVLCFAVIFGSFTQNLDMYSSSSKTIHEPSQYS 370 380 390 400 410 420 >>sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive element-bi (428 aa) s-w opt: 181 Z-score: 168.2 bits: 39.9 E(516081): 0.076 Smith-Waterman score: 181; 26.9% identity (53.3% similar) in 182 aa overlap (24-200:160-330) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSAD-VKTQEVKPEEKKP :: .: :. :: . .. . :: . sp|Q08 MSSVISIQLAEDWNSAPLLIPESCIVNDLPPVCKSTPLPIRLTPADLIAVDALYPELHLT 130 140 150 160 170 180 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE .... .:: . .::: : .:. ....: .::. .:: ::.::. .. :: sp|Q08 EEEKRLLSQEGVALPNNLPLTK----AEERILKKVRRKIRNKQSAQDSRRRKKEYIDGLE 190 200 210 220 230 240 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP .. .::: : ... ..: .: : :: .: . .. . .. : .: . sp|Q08 SRVAACSSQNQELHKKVVELEKHNISLITQLRKLQTLIKQTSNKA------AQTSTCVLI 250 260 270 280 290 180 190 200 210 220 sp|Q1X TLFKQERDELPLERIPF---PTPSLSD-YSPTLKPSTLAESSDVAQHPAVSVAGLEGDGS ::. .: :: :. : : : :: sp|Q08 LLFSLALLVFP-SYSPFRSRPSASQEDSYRPTGVISRNILNKGGFSEVADPQASDTLHRA 300 310 320 330 340 350 230 240 250 260 270 280 sp|Q1X ALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLS sp|Q08 QQREEGDPGRHVVPPANPNPEETEPVSNRARTTPEPDEQVLAEPEAAILGQKGEPPGSDN 360 370 380 390 400 410 >>sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element-bind (521 aa) s-w opt: 182 Z-score: 167.5 bits: 40.0 E(516081): 0.082 Smith-Waterman score: 182; 23.4% identity (52.6% similar) in 291 aa overlap (18-297:234-518) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP .:. .: . . . : .: : : : sp|Q6Q PTPPSSHSSDSEGSLSPNPRLHPFSLSQAHSPGRAMPRGPSALSTSPLLTAPHKLQGSGP 210 220 230 240 250 260 50 60 70 80 90 100 sp|Q1X EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE .:: .. :.: :.:: : .:: ..:.: ..:. .:: ::..:. sp|Q6Q LVLTEEEKRTLIAEGYPIP-TKLPLTK----SEEKALKKIRRKIKNKISAQESRRKKKEY 270 280 290 300 310 110 120 130 140 150 160 sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMPGSPATA :..::.. . .: : ... .: : : ::: .: . : :. . : . :. . . sp|Q6Q MDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLAGTQTGT 320 330 340 350 360 370 170 180 190 200 210 sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV---AQHPAV .. : : .:. . : . : .: : ...: .. .: .. sp|Q6Q CLMVVVLCFAVAFGSLFQGYGLYPSATKMALPSQHPLSEPYTASVVRSRNLLIYEEHSSL 380 390 400 410 420 430 220 230 240 250 260 270 sp|Q1X SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV-FEDGL .. .... : .: ::.: . :. : : : . .. ..:.: . . ... : sp|Q6Q EESSSPASAGELGGWDRGSSLLRASSGLEALPEVDLP-HFIISKETSLEKSVLLELQQHL 440 450 460 470 480 490 280 290 300 310 320 330 sp|Q1X AFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRC . . :::.. :.. .. :: sp|Q6Q VSSKLEGNETLKVVELERRVNATF 500 510 520 >>sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus GN=F (338 aa) s-w opt: 175 Z-score: 164.5 bits: 38.9 E(516081): 0.12 Smith-Waterman score: 175; 25.7% identity (50.9% similar) in 222 aa overlap (9-222:76-290) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATP-ASEVPVLTVSPAD---TS .::. . . : ::. :. :.: : :: sp|P13 GLGEMPGSFVPTVTAITTSQDLQWLVQPTLISSMAQSQGQPLASQPPA--VDPYDMPGTS 50 60 70 80 90 100 40 50 60 70 80 90 sp|Q1X LNSADVKTQEVKPEEKK--PAKKRKSWGQELPVPKTNLP--PRKRAKTEDEKEQRRIERV .. ... . . :. . . : : : ::... : .:.:.::..: sp|P13 YSTPGLSAYSTGGASGSGGPSTSTTTSGPVSARPARARPRRPREETLTPEEEEKRRVRRE 110 120 130 140 150 160 100 110 120 130 140 150 sp|Q1X LRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV ::. :: :.:.: ..:. : :.:... : ....... :..:: :. sp|P13 -RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGC 170 180 190 200 210 220 160 170 180 190 200 210 sp|Q1X RGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS . . : :: : . : . ..: . : : : : : : .:. : sp|P13 KIPYEEGPGPGPLAEVRDL--PGSTSAKEDGFGWLLPPPPPPPLPFQSSRDAPPNLTAS- 230 240 250 260 270 220 230 240 250 260 270 sp|Q1X DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS . : :.: : sp|P13 -LFTHSEVQVLGDPFPVVSPSYTSSFVLTCPEVSAFAGAQRTSGSEQPSDPLNSPSLLAL 280 290 300 310 320 330 >>sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-bi (479 aa) s-w opt: 177 Z-score: 163.6 bits: 39.2 E(516081): 0.14 Smith-Waterman score: 177; 27.0% identity (54.1% similar) in 233 aa overlap (48-258:214-432) 20 30 40 50 60 70 sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK .::: :. : :: :.:: : sp|Q91 GSGDLQQHSLAASQLLGPGSGHCQELVLTEDEKKLLAKE---GVTLP---TQLPLTKY-- 190 200 210 220 230 80 90 100 110 120 130 sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN .:. ..:.: .::. .:: ::..:. .. :::. ::: : ... ..: .: sp|Q91 --EERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQRKVLHLEKQNL 240 250 260 270 280 290 140 150 160 170 180 sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGSPATAS---------PTLTPTLFKQERDELPLERIP : .:: .: : : : .. :. .. :...: :.... . : . .: sp|Q91 SLLEQLKHLQALVVQSTSKPAHAGTCIAVLLLSFALIILPSISP--FNSNKVDSPGDFVP 300 310 320 330 340 350 190 200 210 220 230 sp|Q1X -------FPTPSLSDYSPTLKPSTLAESS--DVAQ-HPAVSVAGLEGD-GSAL--PLFDL . . . : .: . :.. . . ::. : . : .:: .: :. : :..: sp|Q91 VRVFSRTLHNHAASRVAPDVTPGSEVPGPWPDVGTPHKGPSSGGLSADWGNFLEIPMLDN 360 370 380 390 400 410 240 250 260 270 280 290 sp|Q1X GSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSM .. .:: .: : .:..: sp|Q91 LTEELDNSTLVLAN--STEDLGRATLLDWVASEPLLSPGRVGLEIPGEMWLSWVPRWLRV 420 430 440 450 460 >>sp|Q5A2K0|NST1_CANAL Stress response protein NST1 OS=C (1399 aa) s-w opt: 186 Z-score: 163.3 bits: 40.7 E(516081): 0.14 Smith-Waterman score: 186; 20.1% identity (55.0% similar) in 358 aa overlap (32-334:788-1145) 10 20 30 40 50 sp|Q1X SCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSW-- .. :.. . : .... ...: ..::. sp|Q5A KRKEEELKAKEEEQRLQKEKLKAEQKKRKEEARLKKEEEKKKKIEEQKRKEEEHRKKVEA 760 770 780 790 800 810 60 70 80 90 100 110 sp|Q1X GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME :. . .: ..: :.:.:..:.. :. .. : .:... :. . . :. . . sp|Q5A QQKREAEAKKLKEERRRKAEEERKQKEEEKKQKELLKKQKEEEKRQKELLRKQREEEKEK 820 830 840 850 860 870 120 130 140 150 160 sp|Q1X QQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM--------PGS----PATAS . .. .: . : ....:..:. ... .. ::.:. ::: :.::. sp|Q5A EAARLEEERTKLMVNDDDELARQIEVEKSKLSAAVANNPLLNHLYQPSPGSAPTTPSTAN 880 890 900 910 920 930 170 180 190 200 sp|Q1X -PTLTPT-----------LFKQERDELPLERIPF----------PTPSLSDY--SPTLKP :.:.: . .:..... :..: : ::.:.. : .: sp|Q5A LPALSPLQSASAKLMSQQFEQQHQQQVSQEKLPQTSNIQSPNQQPHPSISSFQFSSEYNP 940 950 960 970 980 990 210 220 230 240 250 sp|Q1X --STLAESSDVAQHPAV-------SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDD :.. ..:.. ..:.. :. :.:.. .: . .: .:.... : . sp|Q5A NASVFHNNSSLLSNPSIMNSPRTTSTNLLNGNSPIVPNVTTNISLGATNTSNLSPWSSKS 1000 1010 1020 1030 1040 1050 260 270 280 290 300 sp|Q1X DFNRL------FHGDSSVEPDSSVFEDGLAFDVLEGGDLSAF-PF-DSMVNFDSEPVTLE .: : : : .. ... .:.. : ..:..: : : : .:. . . sp|Q5A RLNSLSNSTQPFIGGNQFTQTNTASFNGVGNAVQQSGNFSPFNAFSDPLVSDAFKAAGPA 1060 1070 1080 1090 1100 1110 310 320 330 340 sp|Q1X GIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC :.. : . .. ..:. : :..: :: sp|Q5A GMNSNIWLNSSNVGNNSGNQSGISAPTTTSTNTSSRNNSIWGNTNPNKVTEPSLLNNNNN 1120 1130 1140 1150 1160 1170 >>sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=A (149 aa) s-w opt: 165 Z-score: 161.8 bits: 37.2 E(516081): 0.17 Smith-Waterman score: 165; 35.2% identity (76.1% similar) in 71 aa overlap (73-143:68-138) 50 60 70 80 90 100 sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE :.:... .:: : ..:.::::..:: .:: sp|Q8W GSTCVLSSSADDGVNNPELDQTQNGVSTAKRRRGRNPVDKEYRSLKRLLRNRVSAQQARE 40 50 60 70 80 90 110 120 130 140 150 160 sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS ::.. . ::.. .....:. : ...: . ::. : ..: sp|Q8W RKKVYVSDLESRANELQNNNDQLEEKISTLTNENTMLRKMLINTRPKTDDNH 100 110 120 130 140 170 180 190 200 210 220 sp|Q1X PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAG >>sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familiaris (338 aa) s-w opt: 172 Z-score: 161.7 bits: 38.3 E(516081): 0.17 Smith-Waterman score: 172; 28.8% identity (51.3% similar) in 191 aa overlap (72-237:145-332) 50 60 70 80 90 100 sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR ::... : .:.:.::..: ::. :: : sp|Q9T GGASGSGGPSTSGTTSGPGPARPARARLRRPREETLTPEEEEKRRVRRE-RNKLAAAKCR 120 130 140 150 160 170 110 120 130 140 150 160 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPG .:.: ..:. : :.:... : ....... :..:: :. . . : :: sp|Q9T NRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPG 180 190 200 210 220 230 170 180 190 sp|Q1X S-------PATAS------------PTLTPTLFKQERDELPLERIPFPTPS----LSDYS :..:: : : :. .: : . : : :.: sp|Q9T PLAEVRDLPGSASTKEDGFSWLLPPPPAPPLPFQTSQDAAPNLTASLFTHSEVQVLGDPF 240 250 260 270 280 290 200 210 220 230 240 250 sp|Q1X PTLKPSTLAESSDVAQHPAVSV-AGLE-GDGSALPLFDLGSDLKHHSTDDVAAPLSDDDF :...:: :: : : ::. :: . .:: : :.: sp|Q9T PVVNPSY--TSSFVLTCPEVSAFAGTQRPSGSDQPTDPLNSPSLLAL 300 310 320 330 260 270 280 290 300 310 sp|Q1X NRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPD >>sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-bind (470 aa) s-w opt: 174 Z-score: 160.9 bits: 38.7 E(516081): 0.19 Smith-Waterman score: 174; 26.7% identity (52.6% similar) in 247 aa overlap (48-284:214-438) 20 30 40 50 60 70 sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK .::: :. : :: :.:: : sp|Q5F GGGDLQQHPLAASQLLGPGSGHCQELVLTEDEKKLLAKE---GVTLP---TQLPLTKY-- 190 200 210 220 230 80 90 100 110 120 130 sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN .:. ..:.: .::. .:: ::..:. .. :::. ::: : ... ..: .: sp|Q5F --EERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQRKVLHLEKQNL 240 250 260 270 280 290 140 150 160 170 180 sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGSPATAS---------PTLTPTLFKQERDELPLERIP : .:: .: : : : .. :. .. :...: : .. . : . :: sp|Q5F SLLEQLKHLQALVVQSTSKPAHAGTCIAVLLLSFVLIILPSISP--FTANKVDSPGDFIP 300 310 320 330 340 350 190 200 210 220 230 240 sp|Q1X FPTPSLSDYSPTLKPSTLAE-SSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDV . .: ::. . .. . ::. : : . .:....: : :. :. :: sp|Q5F -----VRVFSRTLHNHAASRVAPDVTPGPEVP-GPHKGSSGGLSA-DWGNFLEIPMLDD- 360 370 380 390 400 250 260 270 280 290 300 sp|Q1X AAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG : . : . : ..:. . ... : .: . : : sp|Q5F --PTEELDNTTLVLANSTEDLGRATLLDWVASEPLLGQMGLEIPGEEIWLSWVPRWLRVR 410 420 430 440 450 460 310 320 330 340 sp|Q1X IEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC sp|Q5F VVQDALGVL 470 >>sp|P0C5H8|KAPC_EMENI Putative transcription factor kap (278 aa) s-w opt: 169 Z-score: 160.5 bits: 37.8 E(516081): 0.2 Smith-Waterman score: 169; 22.3% identity (51.2% similar) in 260 aa overlap (17-274:49-268) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVK : : :. :.:: : . . .. . sp|P0C DHADQVLHDSLLAAQHLSQHPQQPRPQQPNAQPHHLQPTATTSPRDQNNIDPAISGGAML 20 30 40 50 60 70 50 60 70 80 90 100 sp|Q1X PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL : . ::. . . .: : :: .. .:. .:::: .. :.::. sp|P0C PPSQPPAQPEPTVEDETP------------KTYGKRPLSTSKRAAQNRAAQRAFRQRKES 80 90 100 110 120 110 120 130 140 150 160 sp|Q1X EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MPGSPAT ..::: :... . . . :. . ..::: .: . . .: ... :....: .::. sp|P0C YIRKLE-EQVK---EYEVMSQEYKALQAENYQLREYVINLQSRLLDSQGEVPELPGNIDL 130 140 150 160 170 180 170 180 190 200 210 220 sp|Q1X ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG .: : :. .: :.: .:. . :. : .:. . sp|P0C NQP----------RTEI---SVPQPAP---------RPGQAGASAPPQGSPQSQVSIAND 190 200 210 220 230 240 250 260 270 280 sp|Q1X DGSALP-LFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEG : ..: . . : ...: ... : ::.. : .:: ...:. . : sp|P0C DMNSLNRIAEAGLGMRKHPNEE--AFLSNNFQARRGRGDETADPSETKTEPPTHGLPMVS 230 240 250 260 270 290 300 310 320 330 340 sp|Q1X GDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAG >>sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens GN=F (338 aa) s-w opt: 169 Z-score: 158.9 bits: 37.8 E(516081): 0.25 Smith-Waterman score: 169; 25.7% identity (49.5% similar) in 222 aa overlap (9-222:76-290) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATP-ASEVPVLTVSPAD---TS .::. . . : ::. :: :.: : :: sp|P53 GLGEMPGSFVPTVTAITTSQDLQWLVQPTLISSMAQSQGQPLASQPPV--VDPYDMPGTS 50 60 70 80 90 100 40 50 60 70 80 90 sp|Q1X LNSADVKTQEVKPEEKK--PAKKRKSWGQELPVPKTNLP--PRKRAKTEDEKEQRRIERV .. .. . :. . . : : : ::... : .:.:.::..: sp|P53 YSTPGMSGYSSGGASGSGGPSTSGTTSGPGPARPARARPRRPREETLTPEEEEKRRVRRE 110 120 130 140 150 160 100 110 120 130 140 150 sp|Q1X LRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV ::. :: :.:.: ..:. : :.:... : ....... :..:: :. sp|P53 -RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGC 170 180 190 200 210 220 160 170 180 190 200 210 sp|Q1X RGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS . . : :: : . : ..: . : : : : . : .:. : sp|P53 KIPYEEGPGPGPLAEVRDL--PGSAPAKEDGFSWLLPPPPPPPLPFQTSQDAPPNLTAS- 230 240 250 260 270 220 230 240 250 260 270 sp|Q1X DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS . : :.: : sp|P53 -LFTHSEVQVLGDPFPVVNPSYTSSFVLTCPEVSAFAGAQRTSGSDQPSDPLNSPSLLAL 280 290 300 310 320 330 >>sp|P79702|FOS_CYPCA Proto-oncogene c-Fos OS=Cyprinus c (347 aa) s-w opt: 168 Z-score: 157.8 bits: 37.6 E(516081): 0.29 Smith-Waterman score: 168; 21.7% identity (55.5% similar) in 299 aa overlap (6-291:39-319) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPA-SEVPVLT--VSPAD : ..::.. .:.. : : : : :.: sp|P79 DCDASSRCSTASAAAESVACYPLNQTQKFTELSVSSASFVPTVTAISSCPDLQWMVQPMV 10 20 30 40 50 60 40 50 60 70 80 90 sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR .:. .. .. .:. : : . : . :..: : . . .:.:..:..: : sp|P79 SSVAPSNGGARSYNPN---PYPKMRVTGTK--SPNSNKRARAEQLSPEEEEKKRVRRE-R 70 80 90 100 110 120 100 110 120 130 140 150 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG :. :: :.:.: . :. : ..:.... : . .... :..:: :: . sp|P79 NKMAAAKCRNRRRELTDTLQAETDELEDEKSALQNDIANLLKEKERLEFILA-------A 130 140 150 160 170 160 170 180 190 200 210 sp|Q1X SRANTPMPGSPATASPTLT-PTLFKQERDELPLERIPFPTPSLSD-YSPTLKPSTLAESS . .:.: .. :. . : . . . . : : : :. .: : . .... . sp|P79 HKPICKIPSSSVSPIPAASVPEIHSITTSVVSTANAPVTTSSSSSLFSSTASTDSFGSTV 180 190 200 210 220 230 220 230 240 250 260 sp|Q1X DVAQ-HPAV-------SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHG .... .:.. . : :: . ..: ::.:.: .. ... .: ...:.. : sp|P79 EISDLEPTLEESLELLAKAELE-TARSVPDVDLSSSLYARDWESLYTP-ANNDLEPLCTP 240 250 260 270 280 290 270 280 290 300 310 320 sp|Q1X DSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKT . : ... ....: :. ..:: sp|P79 VVTRTPACTTYTSSFTFTYPEN---DVFPSCGPVHRRGSSSNDQSSDSLNSPTLLTL 300 310 320 330 340 >>sp|Q0D9R7|ARFS_ORYSJ Auxin response factor 19 OS=Oryza (1161 aa) s-w opt: 178 Z-score: 157.4 bits: 39.3 E(516081): 0.3 Smith-Waterman score: 178; 22.4% identity (58.4% similar) in 250 aa overlap (1-237:530-774) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSP .: .. . ....: : .: .: sp|Q0D NIQFNTPKLSQQMQPVNELAKAGIPLNQLGVSTKPQEQIHDASNLQRQQPSMNHMLPLSQ 500 510 520 530 540 550 40 50 60 70 80 90 sp|Q1X ADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERV :.:.:..:.: .:. ... . . .. . :. . ... . .....:.. ... sp|Q0D AQTNLGQAQVLVQNQMQQQHASSTQGQQPATSQPLLLPQQQQQQQQQQQQQQQQQQQQKL 560 570 580 590 600 610 100 110 120 130 140 sp|Q1X LRNRAAAQTSRERKRL-----EMEKLENEKIQM-EQQNQF-LLQRLSQMEAENNRLSQQ- :... .....: .. .: :...:. .:: :. :::.:.:.. .. ::: sp|Q0D LQQQQQQLLLQQQQQLSKMPAQLSSLANQQFQLTDQQLQLQLLQKLQQQQ--QSLLSQPA 620 630 640 650 660 670 150 160 170 180 190 sp|Q1X --LAQLAAEVRGSRANTPMPGSPATASPTLTPT-LFKQERDELPLERIPFPTPSLSDYSP :::: . .. : . . : ::. .. :. ..: . :.: : .. . sp|Q0D VTLAQLPLIQEQQKLLLDMQ-QQLSNSQTLSQQQMMPQQSTKVPSQNTPLPLPVQQEPQQ 680 690 700 710 720 730 200 210 220 230 240 250 sp|Q1X TL--KPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFN : : . ::..:..: :..:: . :: ::. :. sp|Q0D KLLQKQAMLADTSEAAVPPTTSVNVISTTGS--PLMTTGATHSVLTEEIPSCSTSPSTAN 740 750 760 770 780 790 260 270 280 290 300 310 sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE sp|Q0D GNHLLQPILGRNKHCSMINTEKVPQSAAPMSVPSSLEAVTATPRMMKDSPKLNHNVKQSV 800 810 820 830 840 850 >>sp|P15407|FOSL1_HUMAN Fos-related antigen 1 OS=Homo sa (271 aa) s-w opt: 165 Z-score: 157.0 bits: 37.1 E(516081): 0.32 Smith-Waterman score: 165; 28.3% identity (53.7% similar) in 205 aa overlap (44-232:72-263) 20 30 40 50 60 70 sp|Q1X SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR . .: . .:. : . : : : . : sp|P15 NTMSGSQELQWMVQPHFLGPSSYPRPLTYPQYSPPQPRPGVIR-ALG---PPPGVRRRPC 50 60 70 80 90 80 90 100 110 120 sp|Q1X KRAKTEDEKEQRRIERVLRNRAAAQTSRERKR-------LEMEKLENEKIQMEQQNQFLL .. . :.: :.::..: ::. :: :.:.. : .:::.:: .... . : sp|P15 EQISPEEE-ERRRVRRE-RNKLAAAKCRNRRKELTDFLQAETDKLEDEKSGLQREIEELQ 100 110 120 130 140 150 130 140 150 160 170 180 sp|Q1X QRLSQMEA--ENNRLSQQLAQLAAEV-RGSRANTPMPGSPATASP--TLTP-TLFKQERD .. ..: : .: .. . : : :: ..: : .: : .:.: ... : sp|P15 KQKERLELVLEAHRPICKIPEGAKEGDTGSTSGTSSPPAPCRPVPCISLSPGPVLEPEAL 160 170 180 190 200 210 190 200 210 220 230 sp|Q1X ELPLERIPFPTPSLSDYSPTL---KPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS . : . ::::. ..:.: ::: : :.. . : .: : :. :: sp|P15 HTPTL---MTTPSLTPFTPSLVFTYPST-PEPCASAHRKSSSSSG---DPSSDPLGSPTL 220 230 240 250 260 240 250 260 270 280 290 sp|Q1X DLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVN sp|P15 LAL 270 >>sp|Q5B3C8|NST1_EMENI Stress response protein nst1 OS=E (1125 aa) s-w opt: 176 Z-score: 155.8 bits: 39.0 E(516081): 0.37 Smith-Waterman score: 176; 24.5% identity (55.0% similar) in 302 aa overlap (43-340:528-798) 20 30 40 50 60 70 sp|Q1X DSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP :: : ::.. :... .: . . sp|Q5B KKRLAKLAKDEEKARREAQKAAEEAAAKAEQERKLEEQRKKKEEQRKKRE---AERKAQE 500 510 520 530 540 550 80 90 100 110 120 130 sp|Q1X RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQM ..::. : ::..: :. :.. : . .::.:. : .. :. : . ... .. :. .: sp|Q5B EERARKEAEKHKRLREERERQEEAERRQREQKEQEKKRREEAKRKEREERELREQKAKQE 560 570 580 590 600 610 140 150 160 170 180 sp|Q1X EAEN--NRLSQQLAQLAAEVRGSRANTPMPGSPATASP-TLTPTLFKQERDELPLE-RIP . .. .. :.. . .:. ...:: . .: ::.. : . ::.. : : . : : sp|Q5B RERKAQDEQSRRERERVAQEQAKRAPNLQPVSPVSPPPESATPVVSKAP---TPAKGRRP 620 630 640 650 660 670 190 200 210 220 230 240 sp|Q1X FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVA : :. :: . :. ::.:.:. . :. ...::..: . : . : . sp|Q5B SQQGSHSS-SPRSQ-SASAEASQVSPR---SAPLSQSSGSSIPKYGSGHPILHPHP---G 680 690 700 710 720 250 260 270 280 290 300 sp|Q1X APLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGI ::.: ..: : .. :.. .::. : .: ..: : ... :.:. sp|Q5B APMSP--LGRT-H-PPGLSPSNPPGLSGLVPRPPMGHELPTYPPHSSPYMNQ----LRGF 730 740 750 760 770 310 320 330 340 sp|Q1X EMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC .:.: : ::.... :.: sp|Q5B PAPNGIP---------VLPGMNGTRPMPPGRGFPLDAPGIPFHAQPPFSGIFSPQPSGLP 780 790 800 810 820 sp|Q5B HGHSRQPSNSFERSPLDTSAQPFPISRPSPIKRPPSTQQEQRNSRRDVDDLSAQLGSSAL 830 840 850 860 870 880 >>sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kinase (806 aa) s-w opt: 173 Z-score: 155.7 bits: 38.5 E(516081): 0.38 Smith-Waterman score: 173; 27.0% identity (51.0% similar) in 259 aa overlap (3-236:429-680) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLP--ATPASEVPVLTVSP : :: : .:: . :: .. ::..: sp|Q9W IRFQPSLQPVASEPVCPDVEMPSPWAPSGDCAME---SPPPALPPCSDPAPDTVDLTLQP 400 410 420 430 440 450 40 50 60 70 80 sp|Q1X ADTSLNSADVKTQEVKPEEKKPA------KKRKSWGQELPVPKTNLP-PRKRAKTEDEKE : . . : : . . .. : : :. .: .. : . : ::: . ...... sp|Q9W APPASELAPPKREGAISDNTKAALKAALLKSLRSRLRDGPSAPLEAPEPRKPVTAQERQR 460 470 480 490 500 510 90 100 110 120 130 140 sp|Q1X QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNR-LSQQ .:. .: : : ::..: : :. : . . : : . ..:.: : .. sp|Q9W EREEKR--RRRQERAKEREKRRQERERKERGAGTLGGPSTDPLAGL--VLSDNDRSLLER 520 530 540 550 560 570 150 160 170 180 190 sp|Q1X LAQLAAEVRGSRANTPMPG-SPATASPTLTPTL-FKQERDEL-PLERIPFPT--PSLSDY ...: . : .: :. .:..:.:: ::: .: : : :: :. : sp|Q9W WTRMARPPAPAPAPAPAPAPAPSSAQPTSTPTGPVSQSTGPLQPAGSIPGPASQPVCPPP 580 590 600 610 620 630 200 210 220 230 240 sp|Q1X SPTLKPS--------TLAESSDVAQHPAVSVAGLEGDGS--ALPLFDLGSDLKHHSTDDV .:. .:. : .: .:.. : .:: :.:. .:: : : sp|Q9W GPVPQPAGPIPAPLQTAPSTSLLASQSLVPPSGLPGSGAPEVLPYFPSGPPPPDPGLTPQ 640 650 660 670 680 690 250 260 270 280 290 300 sp|Q1X AAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG sp|Q9W PSTSESPDVNLVTQQLSKSQVEDPLPPVFSGTPKGSGAGYGVGFDLEEFLNQSFDMGVAD 700 710 720 730 740 750 >>sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scrofa G (380 aa) s-w opt: 166 Z-score: 155.2 bits: 37.3 E(516081): 0.4 Smith-Waterman score: 166; 28.4% identity (52.4% similar) in 250 aa overlap (9-237:55-297) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEV-PVLT--VSPADTSL .:::. .:.. : . : : :.:. .: sp|O97 DSLSYYHSPADSFSSMGSPVNAQDFCTDLAVSSVNFIPTVTAISISPDLQWLVQPTLVS- 30 40 50 60 70 80 40 50 60 70 80 sp|Q1X NSADVKTQEVKP----EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTE----DEKEQRRI . : .:. .: . : .: . . .: ... : :.:.: .:.:.::: sp|O97 SVAPSQTRAPHPYGVPTPSAGAYSRAGAVKTMPGGRAQSIGR-RGKVEQLSPEEEEKRRI 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA .: ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|O97 RRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHR 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X AEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTL . . .: ..:: :. : : .: ::: : : ::. :. sp|O97 PACKIPD-DLGFPEEMSVASLDLSGGLPEAATPESEEAFTLPLLNDPEPKPSVE---PVK 210 220 230 240 250 210 220 230 240 250 sp|Q1X KPSTL---AESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFN : :.. :: : :: : : . ..: .:: :: sp|O97 KVSSMELKAEPFDDFLFPASSRPGGSETARSVPDMDLSGSFYAADWEPLHGGSLGMGPMA 260 270 280 290 300 310 260 270 280 290 300 310 sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE sp|O97 TELEPLCTPVVTCTPSCTAYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTL 320 330 340 350 360 370 >>sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcriptio (349 aa) s-w opt: 165 Z-score: 155.0 bits: 37.1 E(516081): 0.41 Smith-Waterman score: 165; 28.4% identity (61.5% similar) in 148 aa overlap (18-160:212-349) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSAD--VKTQEV ::... . .:: .. :.: . .:... sp|Q06 GSEVDISEGDRKPDSAAYITLIPPCVKEEDTPSDNDSGICMSP-ESYLGSPQHSPSTSRA 190 200 210 220 230 240 50 60 70 80 90 100 sp|Q1X KPEE-KKPAKKRKSWGQELPVPKTNLPP--RKRAKTEDEKEQRRIERVLRNRAAAQTSRE :.. .:. .: : : :: :: ::.. :: ....... .:..:: :. sp|Q06 PPDNLPSPGGSRGS-----PRPKPYDPPGVSLTAKVKTEKLDKKLKKMEQNKTAATRYRQ 250 260 270 280 290 110 120 130 140 150 160 sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS .:: :.: : .: ..:..:. : .. ... : : : .: ::: .:.. .: sp|Q06 KKRAEQEALTGECKELEKKNEALKEKADSLAKEI----QYLKDLIEEVRKARGQKRVP 300 310 320 330 340 170 180 190 200 210 220 sp|Q1X PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAG >>sp|Q90370|MAFB_COTJA Transcription factor MafB OS=Cotu (311 aa) s-w opt: 161 Z-score: 152.2 bits: 36.5 E(516081): 0.59 Smith-Waterman score: 161; 27.3% identity (62.6% similar) in 139 aa overlap (29-163:171-307) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS .:. .: .: ...:.. . .. .. : : sp|Q90 HHQYPAVTHEDLAGSGHPHHHHHHHHHASPTPSTSSSSSQQLQTSHQQHPPSSSVEDRFS 150 160 170 180 190 200 60 70 80 90 100 110 sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK : . . .: . :. :.:: .:.: :.:.::. ::. : .. . ..::::: sp|Q90 DDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSCRYKRVQQKHHLENEK 210 220 230 240 250 120 130 140 150 160 170 sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLTPTL :. :: . : :..... : . . . .::.. : . ... :.:: sp|Q90 TQLIQQVEQLKQEVTRLARERDAYKLKCEKLASNGFREAGSTSDNPSSPEFFM 260 270 280 290 300 310 180 190 200 210 220 230 sp|Q1X FKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD >>sp|Q90888|MAFB_CHICK Transcription factor MafB OS=Gall (311 aa) s-w opt: 161 Z-score: 152.2 bits: 36.5 E(516081): 0.59 Smith-Waterman score: 161; 27.3% identity (62.6% similar) in 139 aa overlap (29-163:171-307) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS .:. .: .: ...:.. . .. .. : : sp|Q90 HHQYPAVTHEDLAGSGHPHHHHHHHHQASPTPSTSSSSSQQLQTSHQQHPPSSSVEDRFS 150 160 170 180 190 200 60 70 80 90 100 110 sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK : . . .: . :. :.:: .:.: :.:.::. ::. : .. . ..::::: sp|Q90 DDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSCRYKRVQQKHHLENEK 210 220 230 240 250 120 130 140 150 160 170 sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLTPTL :. :: . : :..... : . . . .::.. : . ... :.:: sp|Q90 TQLIQQVEQLKQEVTRLARERDAYKLKCEKLASNGFREAGSTSDNPSSPEFFM 260 270 280 290 300 310 180 190 200 210 220 230 sp|Q1X FKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD >>sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-bi (461 aa) s-w opt: 163 Z-score: 150.9 bits: 36.8 E(516081): 0.7 Smith-Waterman score: 163; 26.4% identity (52.7% similar) in 201 aa overlap (48-236:218-404) 20 30 40 50 60 70 sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK .::: :. : :: :.:: : sp|Q68 SSGDLQQHHLGASYLLRPGAGHCQELVLTEDEKKLLAKE---GITLP---TQLPLTKY-- 190 200 210 220 230 80 90 100 110 120 130 sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN .:. ..:.: .::. .:: ::..:. .. ::.. ::: : ... ..: .: sp|Q68 --EERVLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNL 240 250 260 270 280 290 140 150 160 170 180 sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGSPATAS---------PTLTPTLFKQERDELPLERIP : .:: .: : : : ... . :. ... :...: : .. : : . : sp|Q68 SLLEQLKKLQAIVVQSTSKSAQTGTCVAVLLLSFALIILPSISP--FGPNKTESPGDFAP 300 310 320 330 340 350 190 200 210 220 230 240 sp|Q1X ---FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTD : .: . . ... : . .: .... :. :: : : : sp|Q68 VRVFSRTLHNDAASRVAADAVPGSEAPGPRPEADTTREESPGS--PGADWGFQDTANLTN 360 370 380 390 400 410 250 260 270 280 290 300 sp|Q1X DVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTL sp|Q68 STEELDNATLVLRNATEGLGQVALLDWVAPGPSTGSGRAGLEAAGDEL 420 430 440 450 460 >>sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS=Schi (171 aa) s-w opt: 154 Z-score: 150.5 bits: 35.3 E(516081): 0.73 Smith-Waterman score: 154; 25.8% identity (55.8% similar) in 163 aa overlap (74-223:4-163) 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER :. ...:::..: .: ::: ::. :.. sp|Q09 MTAKKKEVDDEKRRRILE---RNRIAASKFRQK 10 20 30 110 120 130 140 150 sp|Q1X KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL-----AQLAAEVRG-----S :. ...::. .:.. : :::.. : ::..:: : ....:. . sp|Q09 KKEWIKELEQTANAAFEQSKRLQLLLSQLQQEAFRLKSQLLAHQGCQCSVKIRSVLTDFQ 40 50 60 70 80 90 160 170 180 190 200 210 sp|Q1X RANTPMPGSPATASPTLTP---TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS :.. . .. . :. : ..... . : . : . : . ::. .: sp|Q09 TAHNALHSQHMAYRPVQPPPGDNMLESVVSVSPTQMHPSLQGLPPNQHPQMPPSSQQPNS 100 110 120 130 140 150 220 230 240 250 260 270 sp|Q1X DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS : .:. :.::: sp|Q09 DDVQQHMFSAAGLPRSLGGPI 160 170 >>sp|O88778|BSN_RAT Protein bassoon OS=Rattus norvegicus (3938 aa) s-w opt: 181 Z-score: 150.4 bits: 39.8 E(516081): 0.74 Smith-Waterman score: 181; 26.0% identity (55.7% similar) in 235 aa overlap (15-236:2294-2524) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQE ::: : : :. :..: . .. : : sp|O88 STIPPAEGPVYLGKPAAAKASGAGGPPRPELPAGGAREEPLSTTAPP-AVIKEAPVAQAP 2270 2280 2290 2300 2310 2320 50 60 70 80 90 100 sp|Q1X VKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDE--KEQRRIERVLRNRAAAQTSRE . : .::: . :. : . ...:. ::. :.:... .. :.:. . :. sp|O88 APPPGQKPAGDAAA-GSGSGVLGRPVMEKEEASQEDRQRKQQEQLLQLERERVELEKLRQ 2330 2340 2350 2360 2370 2380 110 120 130 140 150 sp|Q1X RKRLEMEKLENEKIQME---QQNQFLLQR-LSQMEA-ENNRLSQQLAQLAAEVRGSRANT ::. :.:: :..... ...:.:.:: :..... ... :.:: . :. .: . sp|O88 L-RLQ-EELERERVELQRHREEEQLLVQRELQELQTIKHHVLQQQQEERQAQFALQREQL 2390 2400 2410 2420 2430 160 170 180 190 200 210 sp|Q1X PMPGSPATASPTLTPTLFKQERDELPLERIPFP-TPSLSDYSPTLKPSTLAESSDV---A . : : .: ... .. ::: : . .: . ::.... sp|O88 AQQRLQLEQIQQLQQQLQQQLEEQKQRQKAPFPATCEAPSRGPPPAATELAQNGQYWPPL 2440 2450 2460 2470 2480 2490 220 230 240 250 260 270 sp|Q1X QHPA-VSVAGLEGDGSAL-PLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSS : : ..::: :: :.: :.. : sp|O88 THTAFIAVAGTEGPGQAREPVLHRGLPSSASDMSLQTEEQWEAGRSGIKKRHSMPRLRDA 2500 2510 2520 2530 2540 2550 >>sp|Q8VCH8|UBXN4_MOUSE UBX domain-containing protein 4 (506 aa) s-w opt: 163 Z-score: 150.1 bits: 36.8 E(516081): 0.77 Smith-Waterman score: 163; 22.8% identity (51.4% similar) in 333 aa overlap (19-337:146-459) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE : :. : .:: ....: . : . sp|Q8V KGEASVTNDNQSESSVSTPSASFEPDVCENPESKNTELCETPATSDIKSDTATGGECTGH 120 130 140 150 160 170 50 60 70 80 90 100 sp|Q1X EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEM ... . . .:. : : : :...:..: :.. :. . ::.. sp|Q8V DSHSQEPHGCSNQRPAEDLTVRVERLTKKLEERREEKRKEEAQRE---IKKEIERRKTGK 180 190 200 210 220 230 110 120 130 140 150 160 sp|Q1X EKLENEKIQMEQQNQFLLQRLSQMEAEN----NRLSQQLAQLAAEVRGSRANTPMPGSPA : :. .. : :. .. .:.. :. .::. .:..::.: :: :..: . : sp|Q8V EMLDYKRKQEEELTKRMLEERSREKAEDRAARERIKQQIALDRAE-RAARFAKTKEAEAA 240 250 260 270 280 290 170 180 190 200 210 sp|Q1X TASPTLTP---TLFKQE---RDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV :. :: : :.: ::. . :: : :. :... . :: : .. : : sp|Q8V KAAALLTKQAGTEVKRESTARDRSTIARIQFRLPDGSSFTNQF-PSD-APLEEARQFAAQ 300 310 320 330 340 220 230 240 250 260 270 sp|Q1X SVAGLEGDGSALPLFD----LGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE .:.. :. : .: : :.. : :: . . : : .: .:. . sp|Q8V TVGNTYGNFSLATMFPRREFTREDYKRRLLDLELAPSA--SVVLLPAG----RPATSIVH 350 360 370 380 390 400 280 290 300 310 320 330 sp|Q1X DGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTT .. . :. .:: .. . :. . ... : .:. ...:..:. .::.. sp|Q8V SS-SGDIWTLLGTVLYPFLAIWRLISN------FLFSNPPPAQTSARATSTEPSNSASSS 410 420 430 440 450 340 sp|Q1X RCDGQGIAAGC . . sp|Q8V KSEKREPVRKRMLEKRGEDFKKEGKIYRLRTQDDGEDENNTWNGNSTQQM 460 470 480 490 500 >>sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-bi (370 aa) s-w opt: 160 Z-score: 149.9 bits: 36.3 E(516081): 0.79 Smith-Waterman score: 160; 29.7% identity (56.5% similar) in 138 aa overlap (18-146:119-256) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVP-VLTVS--PADTSLNSAD-VKTQ ::: :: . ::: :.:. . :.:. sp|Q9D EVVYDSGTLQGTQREAGPTFGLISIQIDQWTPALMVPDACTVSGLPSDSHRHILPRVSTR 90 100 110 120 130 140 50 60 70 80 90 sp|Q1X EVKPEEKKPAKKRKSW-----GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQ : :. ... . : : .:: . .:. ..:.: .::. .:: sp|Q9D APAPPAAMPSCQHHLFLTDEEKQLLAQEGITLPSHLPLTKAEERILKKIRRKIRNKQSAQ 150 160 170 180 190 200 100 110 120 130 140 150 sp|Q1X TSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP ::.::. .. ::.. .::: : ......: .: : .:. :: sp|Q9D DSRRRKKEYLDGLESRVAACSEQNQKLQRKVQELERQNIFLMEQVRQLQKLTAQTSSRAA 210 220 230 240 250 260 160 170 180 190 200 210 sp|Q1X MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV sp|Q9D QTSTCVLILLFSLALIILPSFSPFQGQSEARPEDYQLHGVISRNILTHENVTENLESPVL 270 280 290 300 310 320 >>sp|A4R2R1|NST1_MAGGR Stress response protein NST1 OS=M (1319 aa) s-w opt: 171 Z-score: 149.9 bits: 38.1 E(516081): 0.79 Smith-Waterman score: 171; 22.7% identity (56.7% similar) in 194 aa overlap (43-227:675-868) 20 30 40 50 60 70 sp|Q1X DSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP :. : ::.: :. . ..: . . sp|A4R AQAEEKARKDAEKAAEEAERLAEEQRRQEEQRQKNEERKKKKEAQRKAEEEERQRKEAER 650 660 670 680 690 700 80 90 100 110 120 sp|Q1X RKRAKTEDEK--EQRRIERVLRNRA--AAQTSRERKRLEMEKLENE-KIQMEQQNQFLLQ .::. . :. :: : : ... : . ...:.. : : : . . :. .. :. sp|A4R LRRAQEQKERQAEQDRKAREAKEKEKKAKEEAKQREKAARELKEREARERKEKADKERLE 710 720 730 740 750 760 130 140 150 160 170 180 sp|Q1X RLSQMEAENN-RLSQQLAQLAAEVRGSRANTPMPGSPA---TASPTLTPTLFKQERDELP . ....::.. : .:. :. :.. . ::.:.: .:: . .:. .:.: .... . sp|A4R KEAKIKAEKEAREAQRKAERASQKATTLANVPVPTGPARRQSQAPNPAPALPQSQQASVA 770 780 790 800 810 820 190 200 210 220 230 240 sp|Q1X LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHS ..: .:.: :: ... .. :.. . .: : sp|A4R SPQLPTAVPALPKLPTPQKPRRTSQQEPFTSGFAAQQVHGQGAGQYPAPPKAATPVHTSP 830 840 850 860 870 880 250 260 270 280 290 300 sp|Q1X TDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPV sp|A4R GPGGLLSKGSSSQGQSLHSQATSPLGTSLPTSTSLPTPFGMPHPPPNQHYPPGIGPLNAP 890 900 910 920 930 940 >>sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcriptio (351 aa) s-w opt: 159 Z-score: 149.4 bits: 36.1 E(516081): 0.85 Smith-Waterman score: 159; 31.6% identity (64.3% similar) in 98 aa overlap (66-160:258-351) 40 50 60 70 80 90 sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR---AKTEDEKEQRRIERVLR :: :: .. ::.. :: ....... . sp|P18 YLGSPQHSPSTRGSPNRSLPSPGVLCGSARPKPYDPPGEKMVAAKVKGEKLDKKLKKMEQ 230 240 250 260 270 280 100 110 120 130 140 150 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG :..:: :..:: :.: : .: ..:..:. : .: ... : : : .: ::: sp|P18 NKTAATRYRQKKRAEQEALTGECKELEKKNEALKERADSLAKEI----QYLKDLIEEVRK 290 300 310 320 330 340 160 170 180 190 200 210 sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV .:.. .: sp|P18 ARGKKRVP 350 >>sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocricet (381 aa) s-w opt: 159 Z-score: 148.7 bits: 36.1 E(516081): 0.92 Smith-Waterman score: 159; 25.9% identity (49.0% similar) in 247 aa overlap (2-237:57-298) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL--TVS : .. :...... : :.: .:. sp|O88 LSYYHSPADSFSSMGSPVNAQDFCTDLSVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA 30 40 50 60 70 80 30 40 50 60 70 80 sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE :..: . : : . . : : :. . . . . . . .:.:.:::. sp|O88 PSQTRAPHPYGVPTPSTGAYSRAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA : ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|O88 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK . . .: .:: :: : : .: ::: : : ::: . . sp|O88 ACKIPD-DLGFPEEMFVASLDLTGGLPEATTPESEEAFSLPLLNDPEPKPSLEPVKSISN 210 220 230 240 250 260 210 220 230 240 250 260 sp|Q1X PSTLAESSDVAQHPAVSV-AGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLF :: : :: : .: : . ..: .:: :: sp|O88 VELKAEPFDDFLFPASSRPSGSETTARSVPDMDLSGSFYAADWEPLHSSSLGMGPMVTEL 270 280 290 300 310 320 270 280 290 300 310 320 sp|Q1X HGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTC sp|O88 EPLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLAL 330 340 350 360 370 380 >>sp|A5PKJ4|MK07_BOVIN Mitogen-activated protein kinase (781 aa) s-w opt: 165 Z-score: 148.5 bits: 37.1 E(516081): 0.94 Smith-Waterman score: 165; 27.0% identity (48.0% similar) in 244 aa overlap (3-236:429-655) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPAD : ::. . :. :: .. ::..: sp|A5P IRFQPSLQPVASEPGCPDVEMPSPWAPSGDCAMESPPPAPLPCPG-PAPDTIDLTLQPPP 400 410 420 430 440 450 40 50 60 70 80 sp|Q1X TSLNSADVKTQEVKPEEKKPA------KKRKSWGQELPVPKTNLP-PRKRAKTEDEKEQR . . : : . . .. : : :. .: .. : . : ::: . .......: sp|A5P PASEPAPPKKEGAISDNTKAALKAALLKSLRSRLRDGPSAPLEAPEPRKPVTAQERQRER 460 470 480 490 500 510 90 100 110 120 130 140 sp|Q1X RIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQ . .: : : ::..: : :. : . : : . ..:.: .: . sp|A5P EEKR--RRRQERAKEREKRRQERERKERGAGVSGGPSADPLAGL--VLSDNDR---SLLE 520 530 540 550 560 570 150 160 170 180 190 200 sp|Q1X LAAEVRGSRANTPMPGSPATASPTLTPTL-FKQERDELPLERIPFPTPSLSDYSPTLKPS : .: : .:::: : :. : :: : :.:. . :. :. sp|A5P -----RWTRMAQPPAPAPATARPPSPPAGPATQPTGPLPQPACPPPAPAAG---PA-APQ 580 590 600 610 620 210 220 230 240 250 260 sp|Q1X TLAESSDVAQHPAVSVAGLEGDG--SALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHG : : :. .: .: : :: : . :.:: : : sp|A5P TTAASGLLAPQPLVPPPGLPGPSALSVLPYFPSGPPPPDPGGAPQPSTSESPDVTLVTQQ 630 640 650 660 670 680 270 280 290 300 310 320 sp|Q1X DSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKT sp|A5P LSKSQVEDPLPPVFSGTPKGSGAGYGVGFDLEEFLNQSFDMGVADGPQDGQADSASLSAS 690 700 710 720 730 740 >>sp|Q1DQC1|PAN1_COCIM Actin cytoskeleton-regulatory com (1485 aa) s-w opt: 170 Z-score: 148.0 bits: 37.9 E(516081): 1 Smith-Waterman score: 170; 23.6% identity (51.8% similar) in 284 aa overlap (5-265:989-1264) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVP---------- . . : : : : :.:. : sp|Q1D RQEREKREKEERRRRAEEEDAKREAERQKRLAQEKSPVTSPPPKPSSKKPPPPPSRKVRT 960 970 980 990 1000 1010 30 40 50 60 70 80 sp|Q1X -VLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKE : : . .:. .. ... :::. : :... .:: . . :: . : .: sp|Q1D DVTESVEAKKAEDSVVASKARAEQEEKERALKQEQEAQEAERKQLE-DEAKRQEEELARE 1020 1030 1040 1050 1060 1070 90 100 110 120 130 sp|Q1X QRRIERVLR--NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNR--- .. . :: .. . : . .... . .: . :: :.. .. :: ...:: . : sp|Q1D KEAAQARLRALEEQVRQGKIKKQEEKRRKQQAEKEAKEKEARLAAQR-AELEAAQARERE 1080 1090 1100 1110 1120 1130 140 150 160 170 180 190 sp|Q1X LSQQLAQLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDELPLERIPFPTPSLS :..:: ... : .: . :. .: :..:: . :. : : : .: :. . sp|Q1D LQRQLENMGEEESSSDDEGPIEITPQTSTPTQSQVLPAPFPQPSP--PTAALPVPAIQEP 1140 1150 1160 1170 1180 1190 200 210 220 230 240 250 sp|Q1X DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPL---- : . . .:: : . .:. .. : . : : : .:...:. ..: : sp|Q1D DQDVAREPSPTLPSPVETPEPVKQTLPPETE-SRNPYF---RQLSQQSAPSAAQPTHEMQ 1200 1210 1220 1230 1240 1250 260 270 280 290 300 310 sp|Q1X SDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMA : . :.:: . .:. sp|Q1D STNPFHRLAQQESTSKSAFTTDATVPGPLERKSRVRPEEDDWSAAESENESDEDDDRVAG 1260 1270 1280 1290 1300 1310 >>sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus muscul (380 aa) s-w opt: 158 Z-score: 147.8 bits: 35.9 E(516081): 1 Smith-Waterman score: 158; 25.2% identity (48.8% similar) in 246 aa overlap (2-237:57-297) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL--TVS : .. :...... : :.: .:. sp|P01 LSYYHSPADSFSSMGSPVNTQDFCADLSVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA 30 40 50 60 70 80 30 40 50 60 70 80 sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE :..: . . :: . . : : :. . . . . . . .:.:.:::. sp|P01 PSQTRAPHPYGLPTQSAGAYARAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA : ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|P01 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK . . .: ..:: :: : : .: ::: : : ::: . . sp|P01 ACKIPD-DLGFPEEMSVASLDLTGGLPEASTPESEEAFTLPLLNDPEPKPSLEPVKSISN 210 220 230 240 250 260 210 220 230 240 250 260 sp|Q1X PSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLFH :: : :: : . . ..: :: :: sp|P01 VELKAEPFDDFLFPASSRPSGSETSRSVPDVDLSGSFYAADWEPLHSNSLGMGPMVTELE 270 280 290 300 310 320 270 280 290 300 310 320 sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK sp|P01 PLCTPVVTCTPGCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLAL 330 340 350 360 370 380 >>sp|Q6NW59|ATF4_DANRE Cyclic AMP-dependent transcriptio (339 aa) s-w opt: 157 Z-score: 147.8 bits: 35.8 E(516081): 1 Smith-Waterman score: 157; 22.5% identity (63.8% similar) in 138 aa overlap (18-154:204-338) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP :: : . : .:.... :. . .. sp|Q6N APQDEHTEVPVLHPAGIMLSLSPSHIVVLLTPKEEQNISDCSDSDSGIS---VSGSPAHQ 180 190 200 210 220 230 50 60 70 80 90 100 sp|Q1X EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE . .:... : ... : . : : .... : ....... .:..:: :..::.: sp|Q6N SDLEPSSRAKPYSRPDPEASPALKGRVKTSSGAPKVEKKLKKMEQNKTAATRYRQKKRVE 240 250 260 270 280 290 110 120 130 140 150 160 sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL-AAEVRGSRANTPMPGSPATA .:.:..: ..:..:. : .. ... : . : . : .. .:. : :. sp|Q6N QESLNSECSELEKKNRELSEKADSLSREIQYLRDLLEEMRTAKQRKSKR 300 310 320 330 170 180 190 200 210 220 sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGD >>sp|Q76LL6|FHOD3_MOUSE FH1/FH2 domain-containing protei (1578 aa) s-w opt: 170 Z-score: 147.5 bits: 37.9 E(516081): 1.1 Smith-Waterman score: 170; 25.1% identity (52.5% similar) in 259 aa overlap (7-235:509-759) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN :. ..:.:: .: : ... . :. : sp|Q76 GGTSGPEASRPAARLLPPSPGLATRPSTAPKVSPTIDKLPYVPHSPFHLFSYDFEDSPLL 480 490 500 510 520 530 40 50 60 70 80 90 sp|Q1X SADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL----- . : : . . :.. . .:. . : : . : .. . .. : : sp|Q76 TKD-KGGDSQTENRYSNFSSNSFQSSRPSPGPSGSPSYASSFSSPQDTRSSPSGLLTSSF 540 550 560 570 580 590 100 110 120 130 140 sp|Q1X -RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF----LLQRLSQMEAENNRLSQQLAQL ... . . :::.: : :. . ..:. :..:.: : .: : .:...: . : :: sp|Q76 RQHQESLAAERERRRQEREE-RLQRIEREERNKFNREYLDKREEQRQARGERY-KYLEQL 600 610 620 630 640 650 150 160 170 180 190 sp|Q1X AAE----------VRGSRANTPM----PGSPATASPT-LTPTLFKQERDELPLERIPFPT ::: : .::. . :..:: ::. .:. .:: ::. : :: sp|Q76 AAETQEKEPRSQSVSRGRADLSLDLSLPAAPAPPSPSSQSPSADSQE--ALPVPSSP-PT 660 670 680 690 700 710 200 210 220 230 240 sp|Q1X ---PSLS--DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDD :..: :. : :. . .....: : . : :. . :...: sp|Q76 LQCPQVSGKDHEPELEAEAGQGADEASQDIASAHRGAES--QEEPVLELEPEERASLSEK 720 730 740 750 760 770 250 260 270 280 290 300 sp|Q1X VAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLE sp|Q76 ERQNEEVNERDNCSASSISSSSSTLEREEKEDKLSEDRATGLWSTSLQDVGVNGQCGDIL 780 790 800 810 820 830 >>sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive element-bi (395 aa) s-w opt: 158 Z-score: 147.5 bits: 35.9 E(516081): 1.1 Smith-Waterman score: 158; 29.3% identity (56.0% similar) in 150 aa overlap (54-199:192-329) 30 40 50 60 70 80 sp|Q1X PVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEK .... ::: . .: ..:: : .:. sp|Q8T AHAHILPRAGTVAPVPCTTLLPCQTLFLTDEEKRLLGQEGVSLP-SHLPLTK----AEER 170 180 190 200 210 90 100 110 120 130 140 sp|Q1X EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ ....: .::. .:: ::.::. .. ::.. ::: : ......: .: : : sp|Q8T VLKKVRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSAQNQELQKKVQELERHNISLVAQ 220 230 240 250 260 270 150 160 170 180 190 sp|Q1X LAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF---PTPSLSDYSP : :: . . :.: .. : .: . ::. :: :: : . ::.: sp|Q8T LRQLQTLI----AQTS--NKAAQTSTCVLILLFSLALIILP-SFSPFQSRPEAGSEDYQP 280 290 300 310 320 200 210 220 230 240 250 sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRL sp|Q8T HGVTSRNILTHKDVTENLETQVVESRLREPPGAKDANGSTRTLLEKMGGKPRPSGRIRSV 330 340 350 360 370 380 >>sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF2 OS (401 aa) s-w opt: 158 Z-score: 147.4 bits: 35.9 E(516081): 1.1 Smith-Waterman score: 158; 28.6% identity (61.3% similar) in 119 aa overlap (80-198:195-312) 50 60 70 80 90 100 sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME : .. .:..:.: :: .:. ::.::. .: sp|Q99 QVKSTTSGSSRDHSDDDDELEGETETTRNGDPSDAKRVRRMLSNRESARRSRRRKQAHMT 170 180 190 200 210 220 110 120 130 140 150 160 sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPT .::.. :.. .:. ::.::... . : . . : :... ::.. : . sp|Q99 ELETQVSQLRVENSSLLKRLTDISQRYNDAAVDNRVLKADIETMRAKVKMAEETVKRVTG 230 240 250 260 270 280 170 180 190 200 210 220 sp|Q1X LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSA :.: .:.. .:. . . : :: : sp|Q99 LNP-MFQSMSSEISTIGMQSFSGSPSDTSADTTQDGSKQHFYQPAPTSHMPAQDQKIQNG 290 300 310 320 330 340 >>sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcriptio (483 aa) s-w opt: 159 Z-score: 146.8 bits: 36.1 E(516081): 1.2 Smith-Waterman score: 159; 26.1% identity (62.7% similar) in 153 aa overlap (26-168:277-424) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV--KPEEKKPA ..:. :.: ... ..: . .:. .:: sp|Q5R PSGHPIPSEAKMRLKATLTHQVSSINGGCGMVVGSASTMVTARPEQSQILIQHPDAPSPA 250 260 270 280 290 300 60 70 80 90 100 110 sp|Q1X KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN . . : .: :.:.:. :.: .... ..:: . . ::::::. :....: . .::. sp|Q5R QPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEK 310 320 330 340 350 360 120 130 140 150 160 sp|Q1X EKIQMEQQNQFLLQRLSQMEAENNRLSQQL--------AQLAAEVRGSRANTPMPGSPAT . .. .:: : .... .. : .:.: : . : ...: ..: .: : sp|Q5R KAEELTSQNIQLSNEVTLLRNEVAQLKQLLLAHKDCPVTALQKKTQG-YLESPKESSEPT 370 380 390 400 410 420 170 180 190 200 210 220 sp|Q1X ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG .:: sp|Q5R GSPAPVIQHSSATAPSNGLSVRSAAEAVATSVLTQMASQRTELSMPIQSHVIMTPQSQSA 430 440 450 460 470 480 >>sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcriptio (494 aa) s-w opt: 159 Z-score: 146.6 bits: 36.1 E(516081): 1.2 Smith-Waterman score: 159; 26.1% identity (62.7% similar) in 153 aa overlap (26-168:288-435) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV--KPEEKKPA ..:. :.: ... ..: . .:. .:: sp|P17 PSGHPIPSEAKMRLKATLTHQVSSINGGCGMVVGTASTMVTARPEQSQILIQHPDAPSPA 260 270 280 290 300 310 60 70 80 90 100 110 sp|Q1X KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN . . : .: :.:.:. :.: .... ..:: . . ::::::. :....: . .::. sp|P17 QPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEK 320 330 340 350 360 370 120 130 140 150 160 sp|Q1X EKIQMEQQNQFLLQRLSQMEAENNRLSQQL--------AQLAAEVRGSRANTPMPGSPAT . .. .:: : .... .. : .:.: : . : ...: ..: .: : sp|P17 KAEELTSQNIQLSNEVTLLRNEVAQLKQLLLAHKDCPVTALQKKTQG-YLESPKESSEPT 380 390 400 410 420 430 170 180 190 200 210 220 sp|Q1X ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG .:: sp|P17 GSPAPVIQHSSATAPSNGLSVRSAAEAVATSVLTQMASQRTELSMPIQSHVIMTPQSQSA 440 450 460 470 480 490 >>sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive element-bi (395 aa) s-w opt: 157 Z-score: 146.6 bits: 35.8 E(516081): 1.2 Smith-Waterman score: 157; 29.3% identity (56.0% similar) in 150 aa overlap (54-199:192-329) 30 40 50 60 70 80 sp|Q1X PVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEK .... ::: . .: ..:: : .:. sp|Q5U AHAHILPRAGTLAPVPCTTLLPCQTLFLTDEEKRLLGQEGVSLP-SHLPLTK----AEER 170 180 190 200 210 90 100 110 120 130 140 sp|Q1X EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ ....: .::. .:: ::.::. .. ::.. ::: : ......: .: : : sp|Q5U VLKKVRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSAQNQELQKKVQELERHNISLVAQ 220 230 240 250 260 270 150 160 170 180 190 sp|Q1X LAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF---PTPSLSDYSP : :: . . :.: .. : .: . ::. :: :: : . ::.: sp|Q5U LRQLQTLI----AQTS--NKAAQTSTCVLILLFSLALIILP-SFSPFQGRPEAGPEDYQP 280 290 300 310 320 200 210 220 230 240 250 sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRL sp|Q5U HGVTSRNILTHKDITENLETQVVESRLREPPEAKDANDSTRTLLEKMGGKPRPSGRIGTV 330 340 350 360 370 380 >>sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattus no (327 aa) s-w opt: 155 Z-score: 146.2 bits: 35.4 E(516081): 1.3 Smith-Waterman score: 155; 23.1% identity (55.9% similar) in 229 aa overlap (12-216:38-261) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL---TVSPAD------ :: .:.. .. .:.. :.. : sp|P51 NFDTSSRGSSGSPAHAESYSSGGGGQQKFRVD-MPGSGSAFIPTINAITTTSQDLQWMVQ 10 20 30 40 50 60 40 50 60 70 80 sp|Q1X -TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPPRKRAK--TEDEKE : ..: . . .: :. . . :: : :.. :.: . . .:.: sp|P51 PTVITSMSNPYPRSHPYSPLPGLRSVPGHMALPRPGVIKTIGTTVGRRRRDEQLSPEEEE 70 80 90 100 110 120 90 100 110 120 130 140 sp|Q1X QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL .:::.: ::. :: :.:.: :::..: ..:.... : ....... :...: .: sp|P51 KRRIRRE-RNKLAAAKCRNRRRELTEKLQTETEELEEEKSGLQKEIAELQKEKEKLEFML 130 140 150 160 170 180 150 160 170 180 190 sp|Q1X AQLAAEVRGS---RANTPMPGSPAT--ASPTLTPTLFKQERDELPLERIPFPTPSLSDYS . . . : : ..: : . .. .. :.. ::: : : : . ... . sp|P51 VAHGPVCKISPEERRSSPTSGVQSLRGTGSAVGPVVVKQEP---PEEDSPSSSAGMDKTQ 190 200 210 220 230 240 200 210 220 230 240 250 sp|Q1X PT-LKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFN . .:: ..: .. ...: sp|P51 RSVIKPISIAGGGFYGEEPLHTPIVVTSTPAITPGTSNLVFTYPSVLEQESPASPSESCS 250 260 270 280 290 300 >>sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo sapie (380 aa) s-w opt: 156 Z-score: 146.0 bits: 35.6 E(516081): 1.3 Smith-Waterman score: 156; 28.2% identity (51.6% similar) in 248 aa overlap (9-237:55-297) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPA-SEVPVLT--VSPADTSL .::.. .:.. : : : : :.:: .: sp|P01 DSLSYYHSPADSFSSMGSPVNAQDFCTDLAVSSANFIPTVTAISTSPDLQWLVQPALVS- 30 40 50 60 70 80 40 50 60 70 80 sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR-----KRAKTE----DEKEQRR . : .:. .: :: . .... : :: : .:.:.: .:.:.:: sp|P01 SVAPSQTRAPHPF-GVPAPSAGAYSRA-GVVKTMTGGRAQSIGRRGKVEQLSPEEEEKRR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X IERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL :.: ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|P01 IRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAH 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X AAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPT . . .: ..:: :: : . : .: ::: : : ::. . sp|P01 RPACKIPD-DLGFPEEMSVASLDLTGGLPEVATPESEEAFTLPLLNDPEPKPSVEPVKSI 210 220 230 240 250 210 220 230 240 250 sp|Q1X LKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRL . .: : :: : . . ..: .:: :: sp|P01 SSMELKTEPFDDFLFPASSRPSGSETARSVPDMDLSGSFYAADWEPLHSGSLGMGPMATE 260 270 280 290 300 310 260 270 280 290 300 310 sp|Q1X FHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETT sp|P01 LEPLCTPVVTCTPSCTAYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLA 320 330 340 350 360 370 >>sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mus mu (802 aa) s-w opt: 162 Z-score: 145.5 bits: 36.6 E(516081): 1.4 Smith-Waterman score: 162; 25.9% identity (52.1% similar) in 259 aa overlap (9-254:105-350) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSA : ... : . :.. : :.. .:.: sp|Q03 QTFHQWRDARQVYGLNFGSKEDANVFASAMMHALEVLNSQEAAQSKV-TATQDSTNLRCI 80 90 100 110 120 130 40 50 60 70 80 90 sp|Q1X DVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA . . . ::. ... .:: : . . .: ..: : : :.:. . ::. :.: sp|Q03 FCGPTLPRQNSQLPAQVQNGPSQEELEIQRRQLQEQQRQK-ELERERMERERLERERLER 140 150 160 170 180 190 100 110 120 130 140 150 sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAE-NNRLSQQLAQLAAEV----RG . ::.:::.:.:: .. . :. ... .:: ..: : ..: ..: :: : : sp|Q03 ERL-ERERLEQEQLERQRQEREHVERLERERLERLERERQERERERLEQLEREQVEWERE 200 210 220 230 240 250 160 170 180 190 200 sp|Q1X SRANTPMPGSPATASPTLTPTLFK-QERDELPLERIPFPTPSLSDYSP-----TLKPSTL : .. :.: .. : . : . : . : . .:: .: : : : sp|Q03 RRMSNAAPSSDSSLSSAPLPEYSSCQPPSAPPPSYAKVISAPVSDATPDYAVVTALPPTS 260 270 280 290 300 310 210 220 230 240 250 260 sp|Q1X AESSDVAQHPAVSVAGLEGDGSAL-PLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSS . . .: :. : . :::. :. : :..: : ::. . sp|Q03 TPPTPPLRHAATRFA--TSLGSAFHPV------LPHYAT--VPRPLNKNSRPSSPVNTPS 320 330 340 350 360 270 280 290 300 310 320 sp|Q1X VEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSV sp|Q03 SQPPAAKSCAWPTSNFSPLPPSPPIMISSPPGKATGPRPVLPVCVSSPVPQMPPSPTAPN 370 380 390 400 410 420 >>sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS=Homo (323 aa) s-w opt: 154 Z-score: 145.4 bits: 35.3 E(516081): 1.4 Smith-Waterman score: 154; 28.6% identity (57.1% similar) in 154 aa overlap (14-163:174-319) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ : :.::...:. .:. . :: . sp|Q9Y AYPGAGVAHDELGPHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHATASATAAGG 150 160 170 180 190 200 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS . . :. : : : . . .: . :. :.:: .:.: :.:.::. ::. sp|Q9Y NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC 210 220 230 240 250 110 120 130 140 150 sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM : .. . ..::::: :. :: . : :..:.. : . . . .:: : . ... sp|Q9Y RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLANSGFREAGSTSDS 260 270 280 290 300 310 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS :.:: sp|Q9Y PSSPEFFL 320 >>sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Rattus n (267 aa) s-w opt: 152 Z-score: 145.1 bits: 34.9 E(516081): 1.5 Smith-Waterman score: 152; 27.6% identity (56.4% similar) in 163 aa overlap (51-190:23-183) 30 40 50 60 70 sp|Q1X SEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPP-R .::. .. .: :. .. : : sp|Q9R MVVVAAAPSAASAAPKVLLLSGQPASGGRALPLMVPGPRAAGSEASGTPQAR 10 20 30 40 50 80 90 100 110 120 sp|Q1X KRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQ-------FL :: . :. :.. ..: :.::.::::.:.::. .: .::.. ...:..:: .: sp|Q9R KRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQKLQLENQLL 60 70 80 90 100 110 130 140 150 160 170 sp|Q1X LQRLSQMEAENNRLSQQLAQLA--------AEVRGSRANTPMPGSPATASPTLTPTLFKQ .. . ::..: .:.. : :: .:. . . :: .:. : : .: sp|Q9R REKTHGLVIENQELRTRLGMNALVTEEVSEAESKGNGVRL-VAGSAESAALRLRAPL-QQ 120 130 140 150 160 170 180 190 200 210 220 230 sp|Q1X ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS . .: . :: sp|Q9R VQAQLSPPQNIFPWILTLLPLQILSLISFWAFWTSWTLSCFSNVLPQSLLIWRNSQRSTQ 180 190 200 210 220 230 >>sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein OS= (381 aa) s-w opt: 155 Z-score: 145.0 bits: 35.4 E(516081): 1.5 Smith-Waterman score: 155; 25.2% identity (48.8% similar) in 246 aa overlap (2-237:57-297) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL--TVS : .. :...... : :.: .:. sp|P01 LSYYHSPADSFSSMGSPVNTQDFCADLSVSSANFIPTVTATSTSPDLQWLVQPTLVSSVA 30 40 50 60 70 80 30 40 50 60 70 80 sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE :..: . . :: . . : : :. . . . . . . .:.:.:::. sp|P01 PSQTRAPHPYGLPTQSAGAYARAEMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA : ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|P01 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDKKSALQTEIANLLKEKEKLEFILAAHRP 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK . . .: ..:: :: : : .: ::: : : ::: . . sp|P01 ACKIPD-DLGFPEEMSVASLDLTGGLPEASTPESEEAFTLPLLNDPEPKPSLEPVKSISN 210 220 230 240 250 260 210 220 230 240 250 260 sp|Q1X PSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLFH :: : :: : . . ..: :: :: sp|P01 VELKAEPFDDFLFPASSRPSGSETSRSVPNVDLSGSFYAADWEPLHSNSLGMGPMVTELE 270 280 290 300 310 320 270 280 290 300 310 320 sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK sp|P01 PLCTPVVTCTPLLRLPELTHAAGPVSSQRRQGSRHPDVPLPELVHYREEKHVFPQRFPST 330 340 350 360 370 380 >>sp|P10158|FOSL1_RAT Fos-related antigen 1 OS=Rattus no (275 aa) s-w opt: 152 Z-score: 144.8 bits: 34.9 E(516081): 1.5 Smith-Waterman score: 152; 27.1% identity (53.6% similar) in 207 aa overlap (44-232:74-267) 20 30 40 50 60 70 sp|Q1X SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR . .: . .:. : . : : : . : sp|P10 NAVSGSQELQWMVQPHFLGPSGYPRPLTYPQYSPPQPRPGVIR-ALG---PPPGVRRRPC 50 60 70 80 90 80 90 100 110 120 sp|Q1X KRAKTEDEKEQRRIERVLRNRAAAQTSRERKR-------LEMEKLENEKIQMEQQNQFLL .. . :.: :.::..: ::. :: :.:.. : .:::.:: .... . : sp|P10 EQISPEEE-ERRRVRRE-RNKLAAAKCRNRRKELTDFLQAETDKLEDEKSGLQREIEELQ 100 110 120 130 140 150 130 140 150 160 170 sp|Q1X QRLSQMEA--ENNRLSQQLAQLAAEVRGSRANTPMPGSP-ATASP----TLTP-TLFKQE .. ..: : .: .. . . :. ..: ::: . : .:.: ... : sp|P10 KQKERLELVLEAHRPICKIPEEDKKDTGGTSSTSGAGSPPGPCRPVPCISLSPGPVLEPE 160 170 180 190 200 210 180 190 200 210 220 230 sp|Q1X RDELPLERIPFPTPSLSDYSPTL---KPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL . : . ::::. ..:.: ::: : . :.. . : .: : :. :: sp|P10 ALHTPTL---MTTPSLTPFTPSLVFTYPST-PEPCSSAHRKSSSSSG---DPSSDPLGSP 220 230 240 250 260 270 240 250 260 270 280 290 sp|Q1X GSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSM sp|P10 TLLAL >>sp|Q6Y7W8|PERQ2_MOUSE PERQ amino acid-rich with GYF do (1291 aa) s-w opt: 165 Z-score: 144.5 bits: 37.1 E(516081): 1.6 Smith-Waterman score: 165; 24.2% identity (51.3% similar) in 273 aa overlap (13-267:284-545) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPA--TPASEVPVLTVSPADTSLNSADV :::: .: . : . . . :. : sp|Q6Y RRFEFDFRDRDDERGYRRVRSGSGSIDDDRDSLPEWCLEDAEEEMGTFDSSGAFLSLKKV 260 270 280 290 300 310 50 60 70 80 90 100 sp|Q1X KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS . . . :::.. . :.: .. ..:: :. ..:. :.. .::.:..: sp|Q6Y QKEPI-PEEQEMDFRPVEEGEER--SDSDSSHNEEAKEPDKTNRREGEKT--DRAGAEAS 320 330 340 350 360 110 120 130 140 sp|Q1X RE---------RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN---NRLSQQLAQLAA .: : .. .: :.:.... ... . : :: : :: .. . . sp|Q6Y EEVPQTSLSSARPGTPSDHQPQEATQFERKDEPKAEQVEKAEEENRSENSLSAKVPSRGD 370 380 390 400 410 420 150 160 170 180 190 200 sp|Q1X EV--RGSRANTPMPGSPATASPTL--TPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS :. ... .::.: : :::: : .: . :.: .:..:. : .:. sp|Q6Y ETVPASQQPSTPLP--PDTASPLLILSPPVPTPSSASRPVETAAVEAPGMSSVST--EPD 430 440 450 460 470 480 210 220 230 240 250 260 sp|Q1X TLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDS . . :. :: :. ::: : : :..: . :. :: . ... .. : sp|Q6Y DEEGLKHLEQQAEKMVAYLQD--SALDDERLTSKLQEHRAKGVSIPLMHEAMQKWYYKDP 490 500 510 520 530 540 270 280 290 300 310 320 sp|Q1X SVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSS . : sp|Q6Y QGEIQGPFNNQEMAEWFQAGYFTMSLLVKRACDESFQPLGDIMKMWGRVPFSPGPAPPPH 550 560 570 580 590 600 >>sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Homo sa (326 aa) s-w opt: 153 Z-score: 144.4 bits: 35.1 E(516081): 1.6 Smith-Waterman score: 153; 24.9% identity (54.1% similar) in 233 aa overlap (4-222:39-253) 10 20 30 sp|Q1X MSCDMEKTMSS-VDSLPATPASEVPVLTVSPAD :: . :. . .. : .:. :.: sp|P15 FDTSSRGSSGSPAHAESYSSGGGGQQKFRVDMPGSGSAFIPTINAITTSQDLQWMVQP-- 10 20 30 40 50 60 40 50 60 70 80 sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPPRKRAK--TEDEKEQ : ..: . . .: :. . :: : :.. :.: . . .:.:. sp|P15 TVITSMSNPYPRSHPYSPLPGLASVPGHMALPRPGVIKTIGTTVGRRRRDEQLSPEEEEK 70 80 90 100 110 120 90 100 110 120 130 140 sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA :::.: ::. :: :.:.: :::. : ..:.... : ....... :...: .:. sp|P15 RRIRRE-RNKLAAAKCRNRRRELTEKLQAETEELEEEKSGLQKEIAELQKEKEKLEFMLV 130 140 150 160 170 180 150 160 170 180 190 sp|Q1X QLAAEVRGS---RANTPMPG-SPA-TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSP . . : : . : :: .: ... .. .. ::: ::: . :: sp|P15 AHGPVCKISPEERRSPPAPGLQPMRSGGGSVGAVVVKQE----PLE----------EDSP 190 200 210 220 230 200 210 220 230 240 250 sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRL . . . : ... . .: .:.:: sp|P15 SSSSAGLDKAQRSVIKP-ISIAGGFYGEEPLHTPIVVTSTPAVTPGTSNLVFTYPSVLEQ 240 250 260 270 280 290 >>sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive element-bi (428 aa) s-w opt: 155 Z-score: 144.1 bits: 35.4 E(516081): 1.7 Smith-Waterman score: 155; 26.8% identity (54.0% similar) in 198 aa overlap (8-199:138-322) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSP---ADTS :. . .. : ::. : :::. . : sp|Q50 VSQTQHSLNINFPFDFNGWETGFLPDQAGGTQCASETPQAQPATGFP-LTVKDLLLSGTP 110 120 130 140 150 160 40 50 60 70 80 90 sp|Q1X LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR ..: :. : . .:: . . .:. ..: : .:. ..:.: .::. sp|Q50 ETAAKVSQQSYQELILTEDEKRLLAKEGMTLPN-QFPLTKY----EERILKKIRRKIRNK 170 180 190 200 210 220 100 110 120 130 140 150 sp|Q1X AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR .:: ::..:. .. ::.. .:. : ... :.: : : .:: .: : : .. sp|Q50 QSAQESRKKKKEYIDGLESRMAACSAHNHELQRKVFQLEKCNISLMEQLRRLQALVMNG- 230 240 250 260 270 280 160 170 180 190 200 210 sp|Q1X ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS---DYSPTLKPSTLAESSD .: :. .. . :. ::. :: . :: ..: :.:: sp|Q50 SNKPVQAGTCVLVLLLSFTLIL-----LPNLK-PFTDTKVSQHGDFSPMRVQSRSLHNLQ 290 300 310 320 330 220 230 240 250 260 270 sp|Q1X VAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSS sp|Q50 SSRVLRNLDHPYSMTENAKILPRFPEDKTMEEIASLLGRLHRRPQFTEYDPESHNHSFDQ 340 350 360 370 380 390 >>sp|A2R346|KAPC_ASPNC Putative transcription factor kap (283 aa) s-w opt: 151 Z-score: 143.7 bits: 34.7 E(516081): 1.8 Smith-Waterman score: 151; 22.5% identity (52.1% similar) in 213 aa overlap (16-223:44-236) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL---TVSPAD-TSLNSADVK : :... : . :.:: : .... : sp|A2R QTSAQDHADQVLHDQLLAAHQHLSHPQQARPQGPTAQPPHMQPNTTSPRDQNNIDPAISG 20 30 40 50 60 70 50 60 70 80 90 100 sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR . .. . : . . . ::: : :: .. .:. .:::: .. : sp|A2R AAMLSGPPQTPPQPEPT-GQESP------------KTYGKRPLSTSKRAAQNRAAQRAFR 80 90 100 110 120 110 120 130 140 150 160 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MP .::. ..:::.. .... :. ..:..::: .: . . .: ... :....: .: sp|A2R QRKESYIRKLEEQVKEFDNTNE----TMKQLQAENYQLREYIINLQSRLLDSQGEVPELP 130 140 150 160 170 170 180 190 200 210 220 sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV :. .: .. : : : :. . . . : . :. . ..: sp|A2R GNIDLNQPRNDISV---PPPGAPAATGPAPGPGGAPQQMQVPNPGAATNEDMNSLNRIAV 180 190 200 210 220 230 230 240 250 260 270 280 sp|Q1X AGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFD ::: sp|A2R AGLGMRKHPNEEANFLGNNFQARRPRNDDGQPDGSEATKTEPGHGLPVVS 240 250 260 270 280 >>sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS=Maca (323 aa) s-w opt: 152 Z-score: 143.6 bits: 34.9 E(516081): 1.8 Smith-Waterman score: 152; 28.6% identity (57.1% similar) in 154 aa overlap (14-163:174-319) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ : :.::...:. .:. . :: . sp|Q2P AYPGAGVAHDELGPHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHATASATAAGG 150 160 170 180 190 200 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS . . :. : : : . . .: . :. :.:: .:.: :.:.::. ::. sp|Q2P NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC 210 220 230 240 250 110 120 130 140 150 sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM : .. . ..::::: :. :: . : :..:.. : . . . .:: : . ... sp|Q2P RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAHKVKCEKLANSGFREAGSTSDS 260 270 280 290 300 310 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS :.:: sp|Q2P PSSPEFFL 320 >>sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcriptio (413 aa) s-w opt: 154 Z-score: 143.4 bits: 35.2 E(516081): 1.8 Smith-Waterman score: 154; 27.5% identity (67.5% similar) in 120 aa overlap (26-143:277-392) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV--KPEEKKPA ..:. :.: ... ..: . .:. .:: sp|Q8R PSGHPMPSEAKMRLKATLTHQVSSINGGCGMVVGTASTMVTARPEQNQILIQHPDAPSPA 250 260 270 280 290 300 60 70 80 90 100 110 sp|Q1X KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN . . : .: :.:.:. :.: .... ..:: . . ::::::. :....: . .::. sp|Q8R QPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEK 310 320 330 340 350 360 120 130 140 150 160 170 sp|Q1X EKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPT . .. .:: : .... .. : .:.: : sp|Q8R KAEELTSQNIQLSNEVTLLRNEVAQLKQLLLAHKDCPVTALQKKTQGYLGK 370 380 390 400 410 >>sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus mus (273 aa) s-w opt: 150 Z-score: 143.0 bits: 34.6 E(516081): 1.9 Smith-Waterman score: 150; 26.9% identity (53.4% similar) in 208 aa overlap (44-232:72-265) 20 30 40 50 60 70 sp|Q1X SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR . .: . .:. : . : : : . : sp|P48 SIDSSSQELHWMVQPHFLGPTGYPRPLAYPQYSPPQPRPGVIR-ALG---PPPGVRRRPC 50 60 70 80 90 80 90 100 110 120 sp|Q1X KRAKTEDEKEQRRIERVLRNRAAAQTSRERKR-------LEMEKLENEKIQMEQQNQFLL .. . :.: :.::..: ::. :: :.:.. : .:::.:: .... . : sp|P48 EQISPEEE-ERRRVRRE-RNKLAAAKCRNRRKELTDFLQAETDKLEDEKSGLQREIEELQ 100 110 120 130 140 150 130 140 150 160 170 sp|Q1X QRLSQMEA--ENNRLSQQLAQLAAEVRGSRANT------PMPGSPATASPTLTP-TLFKQ .. ..: : .: .. . . :. ..: : :: :. .:.: ... sp|P48 KQKERLELVLEAHRPICKIPEGDKKDPGGSGSTSGASSPPAPGRPVPCI-SLSPGPVLEP 160 170 180 190 200 210 180 190 200 210 220 230 sp|Q1X ERDELPLERIPFPTPSLSDYSPTL---KPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD : . : . ::::. ..:.: ::: : . :.. . : .: : :. :: sp|P48 EALHTPTL---MTTPSLTPFTPSLVFTYPST-PEPCSSAHRKSSSSSG---DPSSDPLGS 220 230 240 250 260 240 250 260 270 280 290 sp|Q1X LGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDS sp|P48 PTLLAL 270 >>sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase 11A (780 aa) s-w opt: 159 Z-score: 143.0 bits: 36.1 E(516081): 1.9 Smith-Waterman score: 159; 28.9% identity (56.1% similar) in 173 aa overlap (42-208:92-255) 20 30 40 50 60 70 sp|Q1X VDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLP ... : ...: :....: .. : . . sp|Q9U IRNSPYRREDSMEDRGEEDDSLAIKPPQQMSRKEKVHHRKDEKRKEKW-KHARVKEREHE 70 80 90 100 110 120 80 90 100 110 120 sp|Q1X PRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRLEM--EKLENEKIQMEQQNQFLLQR ::: . :..: .:. :: : . : . :: :: :::. .: : :. . :::.. :. sp|Q9U RRKRHREEQDKARREWERQKRREMAREHSRRERDRLEQLERKRERERKMREQQKEQREQK 130 140 150 160 170 180 130 140 150 160 170 180 sp|Q1X LSQMEAENNRLSQQLA-QLAAEVRGSRAN--TPMPGSPATASPTLTPTLFKQERDELPLE . .::. : .. ...:. : : . . .: . :: : .:: :: sp|Q9U ERERRAEERRKEREARREVSAHHRTMREDYSDKVKASHWSRSPPRPP----RERFELGDG 190 200 210 220 230 190 200 210 220 230 240 sp|Q1X RIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTD : :. . .:. ::. : : sp|Q9U R----KPGEARPAPAQKPAQLKEEKMEERDLLSDLQDISDSERKTSSAESSSAESGSGSE 240 250 260 270 280 290 >>sp|Q16520|BATF_HUMAN Basic leucine zipper transcriptio (125 aa) s-w opt: 143 Z-score: 142.8 bits: 33.4 E(516081): 2 Smith-Waterman score: 143; 28.6% identity (56.2% similar) in 112 aa overlap (71-172:17-125) 50 60 70 80 90 100 sp|Q1X KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS :: :. ...: ::..: .:: ::: : sp|Q16 MPHSSDSSDSSFSRSPPPGKQDSSDDV---RRVQRREKNRIAAQKS 10 20 30 40 110 120 130 140 150 160 sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP :.:. . . :. :. ..:.:: : ....:. : . ... : . :.:: : sp|Q16 RQRQTQKADTLHLESEDLEKQNAALRKEIKQLTEELKYFTSVLNSHEPLCSVLAASTPSP 50 60 70 80 90 100 170 180 190 200 210 sp|Q1X G----------SPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS .: ..:: . : sp|Q16 PEVVYSAHAFHQPHVSSPRFQP 110 120 >>sp|Q0CEI3|KAPC_ASPTN Putative transcription factor kap (286 aa) s-w opt: 150 Z-score: 142.7 bits: 34.6 E(516081): 2 Smith-Waterman score: 150; 23.4% identity (53.7% similar) in 214 aa overlap (14-223:37-240) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ : : : ..: ...: . :.:. . : sp|Q0C PAPHPSMQTSAQDHADQVLHDQLLAAHQHLSHPQQPRPQAP--ATQPPHMQPNTASPRDQ 10 20 30 40 50 60 50 60 70 80 90 100 sp|Q1X E-VKPEEKKPAKKRKSWGQELPVPKTNLP-PRKRAKTEDEKEQRRIERVLRNRAAAQTSR . . : . : : .: : :.. :: .. .:. .:::: .. : sp|Q0C NNIDPAISGSAI----LGAPPQTPPQPEPAPQESPKTYGKRPLSTSKRAAQNRAAQRAFR 70 80 90 100 110 120 110 120 130 140 150 160 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MP .::. ..:::. :...: . . .. . ..::: .: . . .: ... :....: .: sp|Q0C QRKESYIRKLEE---QVKHQ-EAITEEYKALHAENYQLREYIINLQTRLLDSQGEVPELP 130 140 150 160 170 170 180 190 200 210 sp|Q1X GSPATASPTLTPTLFKQERDELPLERI-PFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS :. .: :: : .. : :. . : . . .. ..:. . .. sp|Q0C GNIDLNQPRADLTLSAPELQRGNAASAGPAPAGPGPQQSQPNQNQGVGPNDDMNSLNRIA 180 190 200 210 220 230 220 230 240 250 260 270 sp|Q1X VAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF :::: sp|Q0C VAGLGMRKHPNEDANYLGNNFQARRPRTDDNQTGATETTKQEPDGLPVVS 240 250 260 270 280 >>sp|P54842|MAFB_RAT Transcription factor MafB OS=Rattus (323 aa) s-w opt: 151 Z-score: 142.6 bits: 34.7 E(516081): 2 Smith-Waterman score: 151; 27.9% identity (57.8% similar) in 154 aa overlap (14-163:174-319) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ : :.::...:. .:. . .: . . sp|P54 GYPGAGVTHDELGPHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHAAAAATAAGS 150 160 170 180 190 200 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS . . :. : : : . . .: . :. :.:: .:.: :.:.::. ::. sp|P54 NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC 210 220 230 240 250 110 120 130 140 150 sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM : .. . ..::::: :. :: . : :..:.. : . . . .:: : . ... sp|P54 RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLANSGFREAGSTSDS 260 270 280 290 300 310 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS :.:: sp|P54 PSSPEFFL 320 >>sp|P29747|CREBA_DROME Cyclic AMP response element-bind (516 aa) s-w opt: 155 Z-score: 142.6 bits: 35.4 E(516081): 2 Smith-Waterman score: 155; 30.4% identity (55.4% similar) in 148 aa overlap (8-150:370-508) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVS--PADTSL : :: : :. .: ..:.. : : : sp|P29 LSPNATVSISVANPAGGESSVRVSRTAASITRSSSGSASASGSSTSSTVTTTRQPIHTPL 340 350 360 370 380 390 40 50 60 70 80 90 sp|Q1X NSADVKTQE---VKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR :.. : . . ::.: : .. :.:. .:: : .:: ..:.: .. sp|P29 ISSQPKGSTGTLLLTEEEK----RTLLAEGYPIPQ-KLPLTK----AEEKSLKKIRRKIK 400 410 420 430 440 450 100 110 120 130 140 150 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG :. .:: ::..:. :..:: . . .:. .:: .: : : .:: .: : : sp|P29 NKISAQESRRKKKEYMDQLERRVEILVTENHDYKKRLEGLEETNANLLSQLHKLQALVSK 460 470 480 490 500 510 160 170 180 190 200 210 sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV sp|P29 HNVKKS >>sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus mus (326 aa) s-w opt: 151 Z-score: 142.6 bits: 34.7 E(516081): 2 Smith-Waterman score: 151; 24.0% identity (56.3% similar) in 229 aa overlap (4-216:39-260) 10 20 30 sp|Q1X MSCDMEKTMSS-VDSLPATPASEVPVLTVSPAD :: . :. . .. : .:. :.: sp|P47 FDTSSRGSSGSPAHAESYSSGGGGQQKFRVDMPGSGSAFIPTINAITTSQDLQWMVQP-- 10 20 30 40 50 60 40 50 60 70 80 sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPPRKRAK--TEDEKEQ : ..: . . .: :. . :: : :.. :.: . . .:.:. sp|P47 TVITSMSNPYPRSHPYSPLPGLASVPGHMALPRPGVIKTIGTTVGRRRRDEQLSPEEEEK 70 80 90 100 110 120 90 100 110 120 130 140 sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLS-QQL :::.: ::. :: :.:.: :::. : ..:.... : ....... :...: ... sp|P47 RRIRRE-RNKLAAAKCRNRRRELTEKLQAETEELEEEKSGLQKEIAELQKEKEKLEFMKV 130 140 150 160 170 180 150 160 170 180 190 sp|Q1X A-----QLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYS : ... : : : .. . . .:.: .. :.. ::: : : : . ... . sp|P47 AHGPVCKISPEERRSPPTSGLQSLRGTGS-AVGPVVVKQEP---PEEDSPSSSAGMDKTQ 190 200 210 220 230 240 200 210 220 230 240 250 sp|Q1X PT-LKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFN . .:: ..: .. ...: sp|P47 RSVIKPISIAGGGFYGEEPLHTPIVVTSTPAITPGTSNLVFTYPNVLEQESPSSPSESCS 250 260 270 280 290 300 >>sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS=Xen (416 aa) s-w opt: 153 Z-score: 142.4 bits: 35.1 E(516081): 2.1 Smith-Waterman score: 153; 29.8% identity (53.0% similar) in 181 aa overlap (39-210:79-238) 10 20 30 40 50 60 sp|Q1X MSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKT : :: .: ::.:. :: : :. ::. sp|Q63 VYSGEGSIENAFILYNKYITLFIEKLPKHRDYKTANV-PEKKETLKKLK----EIAFPKA 50 60 70 80 90 100 70 80 90 100 110 120 sp|Q1X N-----LPPRKRAKTEDEKEQRRIERVLRNRAAA---QTSRERKRLEMEKLENEKIQMEQ . : : . . :. .:..: :. : : : : . :..:. . : ..: :.:: sp|Q63 EELKKELHKRYKKEYEEYSEKQRKEEEERARRLALQQQLDAEKQRVALLKQQQE--QQEQ 110 120 130 140 150 160 130 140 150 160 170 sp|Q1X QNQFL-LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQER . : ..: ...::: :. .:... :.. ..:. :. : .:: : sp|Q63 VQAFEEMMRRKELEAERLRILHQFSKDEPEAEP--LGSPL--IPGMNEPPVTPLL----- 170 180 190 200 210 180 190 200 210 220 230 sp|Q1X DELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL : : : : : ::::. . .: sp|Q63 ---PSYGTVQPHPPAVDRS--LKPSSYGSNSSGVTSDGLRHVKIPRDVCCKFLQLSENNT 220 230 240 250 260 240 250 260 270 280 290 sp|Q1X KHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFD sp|Q63 QRGVETCGILCGKLLQNEFTVTHVIVPKQSGGPDYCNTESEEELFLIQDQQGLITLGWIH 270 280 290 300 310 320 >>sp|Q91496|FOS_TETFL Proto-oncogene c-Fos OS=Tetraodon (374 aa) s-w opt: 152 Z-score: 142.4 bits: 34.9 E(516081): 2.1 Smith-Waterman score: 152; 24.1% identity (56.4% similar) in 241 aa overlap (15-248:47-278) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN-SADVKTQ : :. :: ::..:. .. .:. .. .. sp|Q91 SASPSDNVYYPSPAGSYSSMGSPQSQDLTDLTASSASFVPTVTAISTSPDLQWMVQPLVS 20 30 40 50 60 70 50 60 70 80 90 sp|Q1X EVKPEEK-KPAKKRKSWGQELPVPKTNLPPRKRAKTE----DEKEQRRIERVLRNRAAAQ : : .. .: . :. . . .. : ::...: .:.:..::.: ::. :: sp|Q91 SVAPSRRAHPYSPSPSYKRTVMRSGASKPHAKRGRVEQTTPEEEEKKRIRRE-RNKQAAA 80 90 100 110 120 130 100 110 120 130 140 150 sp|Q1X TSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR-GSRANT :.:.: ..:. : :.: ... : . .... :..:: :: . :. .. sp|Q91 KCRNRRRELTDSLQAETDQLEAEKSSLQNDIANLLKEKERLEFILAAHQPICKIPSQMDS 140 150 160 170 180 190 160 170 180 190 200 210 sp|Q1X PMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPA .: .. :: . . .. . : .: : :..: . :. .:. . sp|Q91 DFP--VVSMSP--VHAYLSTAASTQPQTSVPEATTVTSSHSTFTSTSNSIFGSN--SDSL 200 210 220 230 240 220 230 240 250 260 270 sp|Q1X VSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGL .:.: . . :.. . :: :.. ..: : .: sp|Q91 LSTATV--SDSVVKMTDLESSVLEESLDLLAKTEVETVEVPDVNLSSSLYTAQDWEPLHA 250 260 270 280 290 300 280 290 300 310 320 330 sp|Q1X AFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCD sp|Q91 TIGSSDFEPLCTPVVTCTPACTTITSSFVFTFPEAETFPTCCVAHRRGSNSNDQSSDSLS 310 320 330 340 350 360 >>sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mus mu (267 aa) s-w opt: 149 Z-score: 142.3 bits: 34.4 E(516081): 2.1 Smith-Waterman score: 149; 27.0% identity (57.7% similar) in 163 aa overlap (51-190:23-183) 30 40 50 60 70 sp|Q1X SEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPP-R .::. .. .: :. .. : : sp|O35 MVVVAAAPSAATAAPKVLLLSGQPASGGRALPLMVPGPRAAGSEASGTPQAR 10 20 30 40 50 80 90 100 110 120 sp|Q1X KRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN-------QFL :: . :. :.. ..: :.::.::::.:.::. .: .::.. ...:..: :.: sp|O35 KRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENHKLQLENQLL 60 70 80 90 100 110 130 140 150 160 170 sp|Q1X LQRLSQMEAENNRLSQQLAQLA--------AEVRGSRANTPMPGSPATASPTLTPTLFKQ .. . .::..: .:.. . .:..:: . . :: .:. : : .: sp|O35 REKTHGLVVENQELRTRLGMDTLDPDEVPEVEAKGSGVRL-VAGSAESAALRLCAPL-QQ 120 130 140 150 160 170 180 190 200 210 220 230 sp|Q1X ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS . .: . :: sp|O35 VQAQLSPPQNIFPWTLTLLPLQILSLISFWAFWTSWTLSCFSNVLPQSLLVWRNSQRSTQ 180 190 200 210 220 230 >>sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcription (347 aa) s-w opt: 151 Z-score: 142.0 bits: 34.7 E(516081): 2.2 Smith-Waterman score: 151; 30.9% identity (62.9% similar) in 97 aa overlap (66-160:255-347) 40 50 60 70 80 90 sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP--RKRAKTEDEKEQRRIERVLRN :: :: ::.. :: ....... .: sp|Q9E SYLGSPQHSPSTSRAPPDSLPSPGVPRGSRPKPYDPPGVSVTAKVKTEKLDKKLKKMEQN 230 240 250 260 270 280 100 110 120 130 140 150 sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS ..:: :..:: :.: : .: ..:..:. : .. ... : : : .: ::: . sp|Q9E KTAATRYRQKKRAEQEALTGECKELEKKNEALKEKADSLAKEI----QYLKDLIEEVRKA 290 300 310 320 330 340 160 170 180 190 200 210 sp|Q1X RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA :.. .: sp|Q9E RGKKRVP >>sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding protein d (256 aa) s-w opt: 148 Z-score: 141.7 bits: 34.2 E(516081): 2.3 Smith-Waterman score: 148; 26.7% identity (54.1% similar) in 146 aa overlap (19-163:119-245) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE :.: .:. ... :.: .. : . .: . : sp|O02 LLPGGPARLGGPGPAPRPLKREPDWGDGDAPGSLLPAQVAACAQTVVSLA-AAAQPTPPA 90 100 110 120 130 140 50 60 70 80 90 100 sp|Q1X EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEM .: :.: . : : . ::. . : : .: :: :.. ::.. . sp|O02 SPEP--PRRSPAPPAPGPARDKAAGKRGPDRGSPEYR--QRRERNNIAVRKSRDKAK--- 150 160 170 180 190 200 110 120 130 140 150 160 sp|Q1X EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG-SRANTPMPGSPATAS ..:: . :.: .. :::..:.:.. ::. .. : : .::.: sp|O02 -----------RRNQEMQQKLVELSAENEKLQQRVEQLTRDLAGLRRFFKQLPGAPFLPG 210 220 230 240 170 180 190 200 210 220 sp|Q1X PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDG sp|O02 AGAADAR 250 >>sp|P54841|MAFB_MOUSE Transcription factor MafB OS=Mus (323 aa) s-w opt: 150 Z-score: 141.7 bits: 34.6 E(516081): 2.3 Smith-Waterman score: 150; 27.9% identity (57.1% similar) in 154 aa overlap (14-163:174-319) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ : :.::...:. .:. . .: . sp|P54 GYPGAGVTHDDLGQHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHATAAATAAGG 150 160 170 180 190 200 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS . . :. : : : . . .: . :. :.:: .:.: :.:.::. ::. sp|P54 NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC 210 220 230 240 250 110 120 130 140 150 sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM : .. . ..::::: :. :: . : :..:.. : . . . .:: : . ... sp|P54 RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLANSGFREAGSTSDS 260 270 280 290 300 310 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS :.:: sp|P54 PSSPEFFL 320 >>sp|A1C9M5|KAPC_ASPCL Putative transcription factor kap (288 aa) s-w opt: 149 Z-score: 141.7 bits: 34.4 E(516081): 2.3 Smith-Waterman score: 149; 20.8% identity (56.0% similar) in 159 aa overlap (66-223:83-237) 40 50 60 70 80 90 sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRA :. .: .. :: .. .:. .::: sp|A1C HMQPTTPVARDQNNIDPAISGGAMLAGPQTPQPDLSGQESPKTYGKRPLSTSKRAAQNRA 60 70 80 90 100 110 100 110 120 130 140 150 sp|Q1X AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA : .. :.::. ... ::. :.. . . . .. ..::: .: . . .: ... ... sp|A1C AQRAFRQRKEAHIRDLEG-KVKAYET---MGEAIKALQAENYQLREYIINLQSRLLDTQG 120 130 140 150 160 160 170 180 190 200 210 sp|Q1X NTP-MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQ ..: .::. ..: . . .: : :. . . .. : ..:. . sp|A1C EVPELPGNIDLSQPRGDIPVPAPPTSGTSTSAVPVPPPTAPQQPQPAQNQASAPNDDMNS 170 180 190 200 210 220 220 230 240 250 260 270 sp|Q1X HPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE ..:::: sp|A1C LNRIAVAGLGMRKPPTEEANYLGNSFQQQARRVRPDDGQPDASELTLPKQEPTHGLPLIS 230 240 250 260 270 280 >>sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive element-bi (368 aa) s-w opt: 151 Z-score: 141.6 bits: 34.7 E(516081): 2.3 Smith-Waterman score: 151; 25.9% identity (54.7% similar) in 212 aa overlap (20-221:105-301) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEE :. .:. . ::: .. . :: sp|Q8S PCLVQHDHTYSLSQEHVSIDLDNESYEKERAQMTPLRVEEPAD-----QEIARLILTEEE 80 90 100 110 120 50 60 70 80 90 100 sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME :. .:. : :: :: : .:. .:..: .::. .:: ::..:.. . sp|Q8S KRLLEKE---GLTLP---GMLPLTKM----EEQVLKRVRRKIRNKKSAQESRRKKKVYVG 130 140 150 160 170 110 120 130 140 150 160 sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV-----RGSRANTPMPGSPA ::.. ... :: : .... .: .: : .:: .: : : ..: ..: . sp|Q8S GLESRVLKYTAQNLELQNKVQLLEEQNLSLLDQLRRLQAMVIQTANKASSSSTCVLVLLF 180 190 200 210 220 230 170 180 190 200 210 sp|Q1X TASPTLTPTLFKQE-RDELPLER--IPFPTPSL-SDYSPTLKPSTL-AESSDVAQHPAVS . :.:...... : :: :. . .: :. : :.: .: .: . .: .. sp|Q8S SFCLLLVPAMYSSDTRGSLPAEHRVLSRQLRALPSEDPPQLEPPALQSEVPKDSLNPELQ 240 250 260 270 280 290 220 230 240 250 260 270 sp|Q1X VAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF .: sp|Q8S AASNSCCLFHLMPQAPRAEPPLQLPLPDGFSGCSCPDSISPLHANLTREEGWLPTPSPTS 300 310 320 330 340 350 >>sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos taurus (380 aa) s-w opt: 151 Z-score: 141.3 bits: 34.7 E(516081): 2.4 Smith-Waterman score: 151; 24.0% identity (50.0% similar) in 246 aa overlap (2-237:57-297) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL--TVS : .. :...... : :.: .:. sp|O77 LSYYHSPADSFSSMGSPVNAQDYCTDLAVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA 30 40 50 60 70 80 30 40 50 60 70 80 sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE :..: . : : . . . : . :. . . . . . . .:.:.:::. sp|O77 PSQTRAPHPYGVPTPSAGAYSRAGVMKTMTGGRAQSIGRRG---KVEQLSPEEEEKRRIR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA : ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|O77 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK . . .: ..:: :. : : .: ::: : : ::. . . . sp|O77 ACKIPD-DLGFPEEMSVASLDLSGGLPEAATPESEEAFTLPLLNDPEPKPSVEPVKSVGS 210 220 230 240 250 260 210 220 230 240 250 260 sp|Q1X PSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLFH :: : . :: : . . ..: .:: :: sp|O77 MELKAEPFDDYMFPASSRPSGSETARSVPDMDLSGSFYAADWEPLHGGSLGMGPMATELE 270 280 290 300 310 320 270 280 290 300 310 320 sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK sp|O77 PLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLAL 330 340 350 360 370 380 >>sp|Q6NS15|MED15_XENLA Mediator of RNA polymerase II tr (777 aa) s-w opt: 157 Z-score: 141.1 bits: 35.7 E(516081): 2.4 Smith-Waterman score: 157; 20.1% identity (53.1% similar) in 273 aa overlap (30-297:282-540) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSW : . .. ... :.: ... . . sp|Q6N QRIAHLQQMQQMQQQQQQQQQQQQQQQQQPPPQQVMQLQQMQQQQVAQSQQQQLLSTQPQ 260 270 280 290 300 310 60 70 80 90 100 110 sp|Q1X GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERK-RLEMEKLENEKIQM . : : . ..: . : ..:.... . . :: : . ... . . .. ... :. sp|Q6N APSL-VAQGQIPSQVMPVTLTPQQQQQLKILQQVRAQQQQQAQHQAQQQAQQQAHQQAQQ 320 330 340 350 360 370 120 130 140 150 160 170 sp|Q1X EQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLT-PTLFKQ . :.: : .:. . . .:: :: ::. ....:. .. :... :. .: sp|Q6N QAQQQAQQQAAQQQAQQAAQQAQQQAQQAAQQQAAQAHLAAGQVTQNSIPVMSSPSPVQQ 380 390 400 410 420 430 180 190 200 210 220 230 sp|Q1X ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS . :. : :.:. :. : .:. :.:.. :: : ... . : : : sp|Q6N VQTPQPMPPPPQPSPQPSQ--PMSQPN-----SNVSSGPAPSPSSFMPSPSPQP---SQS 440 450 460 470 480 240 250 260 270 280 290 sp|Q1X DLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV-FEDGLAFDVLEGGDLSAF--PFDS . .. .. ..: : .: . .: . : :. :. .: :. .:: . :. sp|Q6N PASARTPQNFSVP-SPGPLNTPGNPNSVMSPASNNQSEEQQYLDKLK--QLSKYIEPLRR 490 500 510 520 530 300 310 320 330 340 sp|Q1X MVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC :.: sp|Q6N MINKIDKNEERKKDLSKMKSLLDILTDPNKRCPLKTLQKCEIALEKLKNDMAVPTPPPPT 540 550 560 570 580 590 >>sp|P94517|YSCB_BACSU Uncharacterized protein yscB OS=B (221 aa) s-w opt: 146 Z-score: 141.0 bits: 33.9 E(516081): 2.5 Smith-Waterman score: 146; 26.5% identity (56.9% similar) in 181 aa overlap (7-183:28-188) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVP--VLTVSPADTSLN- :. ..: . : : .:. . ..:.. ... sp|P94 MNKLIQLALFFTLMLTGCSNSSTSSESKVETTVKTTAAFPQKELEKELKKLKPVSLDMKF 10 20 30 40 50 60 40 50 60 70 80 90 sp|Q1X SADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAA . . :. : . :. :.:... . : . : :: : ..:: .:. : : sp|P94 ESPLATELGKRKAKEEAEKQRQIAAEKKLEKER--EAKRKKQQEEKAERQ-------RLA 70 80 90 100 110 100 110 120 130 140 150 sp|Q1X AQTSRERKRL-EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA : . ::.:: : :. . ..:.: : .:. .. .::..: :: : .:. .: . sp|P94 EQQAAERQRLAEAER----QAELERQRQAAIQKEQKANAEKKRQSQAQRQ-QTEAPSSNS 120 130 140 150 160 160 170 180 190 200 210 sp|Q1X NTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQH . : :.: . .. :. .: .::: sp|P94 QDP-PSSSSQTDKTI-----QQPASELPDDDGYGYEERKKWHDDQVEWGIKQGYIDPEDA 170 180 190 200 210 220 >>sp|Q504L8|MAFB_XENTR Transcription factor MafB OS=Xeno (316 aa) s-w opt: 149 Z-score: 140.9 bits: 34.4 E(516081): 2.5 Smith-Waterman score: 149; 26.6% identity (62.6% similar) in 139 aa overlap (29-163:176-312) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS ::. .: .: ...... . .... .. : : sp|Q50 QYQGLPHEEMGLPHQHPHHHHHHHHHQPSPSPSGSSSSSQQLQNSHQQHQNSSAVEDRFS 150 160 170 180 190 200 60 70 80 90 100 110 sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK : . . .: . :. :.:. .:.: :.:.::. ::. : .. . ..::::: sp|Q50 DDQLVSMSVRELNRHLRGFTKDDVIRLKQKR--RTLKNRGYAQSCRFKRVQQKHHLENEK 210 220 230 240 250 260 120 130 140 150 160 170 sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV-RGSRANTPMPGSPATASPTLTPTL :. :: . : ..:.. : . . . .:: . : . ... :.:: sp|Q50 TQLIQQVEQLKLEVSRLARERDAYKIKCEKLANTTFREAGSTSDNPSSPEFFM 270 280 290 300 310 180 190 200 210 220 230 sp|Q1X FKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD >>sp|O57342|MAFA_COTJA Transcription factor MafA OS=Cotu (286 aa) s-w opt: 148 Z-score: 140.8 bits: 34.2 E(516081): 2.5 Smith-Waterman score: 148; 34.1% identity (67.1% similar) in 85 aa overlap (83-167:201-281) 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE .:.: :.:.::. ::. : .. . . :: sp|O57 RFSDDQLVSMSVRELNRQLRGFSKEEVIRLKQKR--RTLKNRGYAQSCRYKRVQQRHILE 180 190 200 210 220 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP ::: :...: . : :..:.. : . ... .::: :: .: :..: :.. sp|O57 NEKCQLQSQVEQLKQEVSRLAKERDLYKEKYEKLAA--RGFPRETSPPAAPKTTAADFFM 230 240 250 260 270 280 180 190 200 210 220 230 sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL >>sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus norve (380 aa) s-w opt: 150 Z-score: 140.4 bits: 34.6 E(516081): 2.7 Smith-Waterman score: 150; 27.6% identity (50.4% similar) in 250 aa overlap (8-237:54-297) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPA-SEVPVLT--VSPADTS ..::.. .:.. : : : : :.: . sp|P12 GDSLSYYHSPADSFSSMGSPVNTQDFCADLSVSSANFIPTVTAISTSPDLQWLVQP---T 30 40 50 60 70 80 40 50 60 70 80 sp|Q1X LNSADVKTQEVKPEEKK-PAKKRKSWGQELPVPKTNLPPR-----KRAKTE----DEKEQ : :. . .: :. :. . .... : :: : .:.:.: .:.:. sp|P12 LVSSVAPSQTRAPHPYGLPTPSTGAYARA-GVVKTMSGGRAQSIGRRGKVEQLSPEEEEK 90 100 110 120 130 90 100 110 120 130 140 sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA :::.: ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|P12 RRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILA 140 150 160 170 180 190 150 160 170 180 190 sp|Q1X QLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYS . . .: ...: :: : : .: ::: : : ::: . sp|P12 AHRPACKIPN-DLGFPEEMSVTSLDLTGGLPEATTPESEEAFTLPLLNDPEPKPSLEPVK 200 210 220 230 240 250 200 210 220 230 240 250 sp|Q1X PTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFN . :: : :: : . . ..: :: :: sp|P12 NISNMELKAEPFDDFLFPASSRPSGSETARSVPDVDLSGSFYAADWEPLHSSSLGMGPMV 260 270 280 290 300 310 260 270 280 290 300 310 sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE sp|P12 TELEPLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTL 320 330 340 350 360 370 >>sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis catu (381 aa) s-w opt: 150 Z-score: 140.4 bits: 34.6 E(516081): 2.7 Smith-Waterman score: 150; 26.9% identity (50.6% similar) in 249 aa overlap (9-237:55-298) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPA-SEVPVLT--VSPADTSL .::.. .:.. : : : : :.: .: sp|Q8H DNLSYYHSPADSFSSMGSPVNAQDFCTDLAVSSANFIPTVTAISTSPDLQWLVQP---TL 30 40 50 60 70 80 40 50 60 70 80 sp|Q1X NSADVKTQEVKPEEKK-PAKKRKSWGQELPVPKTNLPPR-----KRAKTE----DEKEQR :. . .: :. :: . .... : .. : .:.:.: .:.:.: sp|Q8H VSSVAPSQTRAPHPYGVPAPSAGAYSRAGVVKTVTAGGRAQSIGRRGKVEQLSPEEEEKR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X RIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQ ::.: ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|Q8H RIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAA 150 160 170 180 190 200 150 160 170 180 190 sp|Q1X LAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSP . . .: ..:: :. : : .: ::: : : ::. . sp|Q8H HRPACKIPD-DLGFPEEMSVASLDLSGGLPEAATPESEEAFTLPLLNDPEPKPSVEPVKS 210 220 230 240 250 200 210 220 230 240 250 sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNR . :: : :: : . . ..: .:: :: sp|Q8H ISSMELKAEPFDDFLFPASSRPSGSETARSVPDMDLSGSFYAADWEPLHGGSLGMGPMAT 260 270 280 290 300 310 260 270 280 290 300 310 sp|Q1X LFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDET sp|Q8H ELEPLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCGAAHRKGSSSNEPSSDSLSSPTLL 320 330 340 350 360 370 >>sp|Q56TT7|FOS_PHOCM Proto-oncogene c-Fos OS=Phodopus c (381 aa) s-w opt: 150 Z-score: 140.4 bits: 34.6 E(516081): 2.7 Smith-Waterman score: 150; 23.5% identity (50.0% similar) in 306 aa overlap (2-291:57-353) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL--TVS : .. :...... : :.: .:. sp|Q56 LSYYHSPADSFSSMGSPVNAQDFCADLSVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA 30 40 50 60 70 80 30 40 50 60 70 80 sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE :..: . : : . . : : :. . . . . . . .:.:.:::. sp|Q56 PSQTRAPHPYGVPTPPTGAYSRAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA : ::. :: :.:.: . :. : ..:.... : ..... :...: :: sp|Q56 RE-RNKMAAAKCRNRRRELTDTLQAETDHLEDEKSALQTEIANLLKEKEKLEFILAAHRP 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK . . .: . ..:: :: : : .: ::: : : :: . . sp|Q56 ACKIPD-DLGFPEDMSVASLDLTGGLPEATTPESEEAFSLPLLNDPEPKTSLEPVKSISN 210 220 230 240 250 260 210 220 230 240 250 sp|Q1X PSTLAESSDVAQHPAVSV-AGLEGDGSALPLFDL-GS----DLKH-HSTDDVAAPLSDDD :: : :: : .: : . ..: .:: :: : . ::.. .:.. . sp|Q56 MELKAEPFDDFLFPASSRPSGSETTARSVPDMDLSGSFYAADWEPLHSSSLGMGPMATE- 270 280 290 300 310 320 260 270 280 290 300 310 sp|Q1X FNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLP .. : . :. ... ....: :. ..:: sp|Q56 LEPLCTPVVTCTPSCTTYTSSFVFTYPEA---DSFPSCAAAHRKGSSSNEPSSDSLSSPT 330 340 350 360 370 320 330 340 sp|Q1X DETTCKTSSVQPGFGASTTRCDGQGIAAGC sp|Q56 LLAL 380 >>sp|Q2VZV0|IF2_MAGSA Translation initiation factor IF-2 (872 aa) s-w opt: 157 Z-score: 140.2 bits: 35.7 E(516081): 2.7 Smith-Waterman score: 157; 33.6% identity (62.6% similar) in 107 aa overlap (16-119:188-291) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV :..::. :: ...:: . ..:.: sp|Q2V QSEPEAAAPAAEPVAPTAPVAAAPAPAPATPVAPAQPKPVAAAAPAGDATAVPRARTEEE 160 170 180 190 200 210 50 60 70 80 90 100 sp|Q1X KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK---TEDEKEQRRIERVLRNRAAAQTSRE . ::.. :::: . . :: .:. : :. .: :. .. : :: :. ::.. .:: sp|Q2V EEEEER-AKKRAAAHKPAPVKRTE-PRRRTGKLTITDALTDDDRSERG-RSLAAVKRARE 220 230 240 250 260 270 110 120 130 140 150 160 sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS :.::. . .::. : sp|Q2V RERLKHMQKGSEKVIREVIVPESITVQELANRMAVRGADVIKCLMRLGVMATINQNIDAD 280 290 300 310 320 330 >>sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcriptio (348 aa) s-w opt: 149 Z-score: 140.2 bits: 34.4 E(516081): 2.8 Smith-Waterman score: 149; 27.7% identity (61.0% similar) in 141 aa overlap (19-154:210-342) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE :... . .:: :.::.: . . . . sp|Q3Z LCSEVVIPEGDSKPDSTTTGFPQCIKEEDAPSDNDSGICMSP-DSSLGSPQDSPSTSRG- 180 190 200 210 220 230 50 60 70 80 90 100 sp|Q1X EKKPAKKRKSWG--QELPVPKTNLPPRKR---AKTEDEKEQRRIERVLRNRAAAQTSRER .: :. : : . :: :: .. ::.. :: ....... .:..:: :.. sp|Q3Z --SPNKSLLSPGALSGSSRPKPYDPPGEKMVAAKVKGEKLDKKLKKMEQNKTAATRYRQK 240 250 260 270 280 290 110 120 130 140 150 160 sp|Q1X KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSP :: :.: : .: ..:..:. : .. ... : . :..:. ::: .: sp|Q3Z KRAEQEALTGECKELEKKNEALKEKADSLAKEIQYLKDQIE----EVRKAREKKRVL 300 310 320 330 340 170 180 190 200 210 220 sp|Q1X ATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL >>sp|Q5HZY0|UBXN4_RAT UBX domain-containing protein 4 OS (506 aa) s-w opt: 152 Z-score: 140.0 bits: 34.9 E(516081): 2.8 Smith-Waterman score: 152; 24.4% identity (53.0% similar) in 279 aa overlap (73-337:200-459) 50 60 70 80 90 100 sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE : : :...:..: :.. :. . : sp|Q5H GECAGHDSLSQEPPGCSNQRPAEDLTVRVERLTKKLEERREEKRKEEAQRE---IKKEIE 170 180 190 200 210 220 110 120 130 140 150 sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN----NRLSQQLAQLAAEVRGSRANTP :.. : :. .. : :. .. .:.. :. .::. .:..::.: :: :..: sp|Q5H RRKTGKEMLDYKRKQEEELTKRMLEERSREKAEDRAARERIKQQIALDRAE-RAARFAKT 230 240 250 260 270 280 160 170 180 190 200 210 sp|Q1X MPGSPATASPTLTPTL---FKQE---RDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV . : :. :. :.: ::. . :: : :. :... . :: : .. sp|Q5H KEAEAAKAAALLAKQAEAEVKRESSTRDRSTIARIQFRLPDGSSFTNQF-PSD-APLEEA 290 300 310 320 330 340 220 230 240 250 260 sp|Q1X AQHPAVSVAGLEGDGSALPLFD----LGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEP : : .:.. :. : .: : :.. : :: .. . . .:. : sp|Q5H RQFAAQTVGNTYGNFSLATMFPRREFTREDYKRKLLDLELAPSASVVLLPAGRPATSIVP 350 360 370 380 390 400 270 280 290 300 310 320 sp|Q1X DSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPG .:: : . .: : : .:: .. . :. . ... : .:. ...:..:. sp|Q5H SSS----GDIWTLL-GTVL--YPFLAIWRLISNFL------FSNPPPAQTSARATSTEPS 410 420 430 440 450 330 340 sp|Q1X FGASTTRCDGQGIAAGC .::... . sp|Q5H NSASSSKSEKREPVRKRVLEKRGEDFKKEGKIYRLRTQDDGEDENNTWNGNSTQQM 460 470 480 490 500 >>sp|P0C865|MK07_RAT Mitogen-activated protein kinase 7 (806 aa) s-w opt: 156 Z-score: 139.9 bits: 35.6 E(516081): 2.8 Smith-Waterman score: 156; 26.3% identity (50.2% similar) in 259 aa overlap (3-236:429-680) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLP--ATPASEVPVLTVSP : :: : .:: . :: .. ::..: sp|P0C IRFQPSLQPVASEPVCPDVEMPSPWAPSGDCAME---SPPPALPPCSGPAPDTVDLTLQP 400 410 420 430 440 450 40 50 60 70 80 sp|Q1X ADTSLNSADVKTQEVKPEEKKPA------KKRKSWGQELPVPKTNLP-PRKRAKTEDEKE : . . : : . . .. : : :. .: .. : . : ::: . ...... sp|P0C APPASELAPPKREGAISDNTKAALKAALLKSLRSRLRDGPSAPLEAPEPRKPVTAQERQR 460 470 480 490 500 510 90 100 110 120 130 140 sp|Q1X QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNR-LSQQ .:. .: : : ::..: : :. : . . : : . ..:.: : .. sp|P0C EREEKR--RRRQERAKEREKRRQERERKERGAGTLGGPSTDPLAGL--VLSDNDRSLLER 520 530 540 550 560 570 150 160 170 180 190 sp|Q1X LAQLAAEVRGSRANTPMPG-SPATASPTLTPTL-FKQERDEL-PLERIPFPT--PSLSDY ...: . : .: : .:..:.:: :. .: : : :: :. : sp|P0C WTRMARPPVPAPAPAPAPTPKPSSAQPTSPPNGPVSQSTAPLQPAGSIPGPASQPVCPPP 580 590 600 610 620 630 200 210 220 230 240 sp|Q1X SPTLKPS--------TLAESSDVAQHPAVSVAGLEGDGS--ALPLFDLGSDLKHHSTDDV .:. .:. : .: .:.. : .:: :.:. .:: : : sp|P0C GPVPQPAGPVPAPLQTAPSTSLLASQSLVPPSGLPGSGAPEVLPYFPSGPPPPDPGLTPQ 640 650 660 670 680 690 250 260 270 280 290 300 sp|Q1X AAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG sp|P0C PSTSESPDVNLVTQQLSKSQVEDPLPPVFSGTPKGSGAGYGVGFDLEEFLNQSFDMGVAD 700 710 720 730 740 750 >>sp|Q9N0J3|CEBPD_SHEEP CCAAT/enhancer-binding protein d (255 aa) s-w opt: 146 Z-score: 139.9 bits: 33.9 E(516081): 2.9 Smith-Waterman score: 146; 26.7% identity (54.1% similar) in 146 aa overlap (19-163:118-244) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE :.: .:. ... :.: .. : . .: . : sp|Q9N LLPGGPARLGGPGPAPRPLKREPDWGDGDAPGSLLPAQVAACAQTVVSLAPA-AQPTPP- 90 100 110 120 130 140 50 60 70 80 90 100 sp|Q1X EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEM .: :.: . : : . ::. . : : .: :: :.. ::.. . sp|Q9N -ASPDPPRRSPAPPAPGPARDKAAGKRGPDRGSPEYR--QRRERNNIAVRKSRDKAK--- 150 160 170 180 190 110 120 130 140 150 160 sp|Q1X EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG-SRANTPMPGSPATAS ..:: . :.: .. :::..:.:.. ::. .. : : .::.: sp|Q9N -----------RRNQEMQQKLVELSAENEKLQQRVEQLTRDLAGLRRFFKQLPGAPFLPG 200 210 220 230 240 170 180 190 200 210 220 sp|Q1X PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDG sp|Q9N AGAADAR 250 >>sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-bind (367 aa) s-w opt: 149 Z-score: 139.7 bits: 34.4 E(516081): 2.9 Smith-Waterman score: 149; 33.3% identity (63.2% similar) in 87 aa overlap (60-146:170-252) 30 40 50 60 70 80 sp|Q1X PADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER ::: . ..:: : .:. ..:.: sp|Q5U PRVSTIAPPPPAALLSCQRLFLTDEEKHLLGQEGVTLPSHLPLTK----AEERILKKIRR 140 150 160 170 180 190 90 100 110 120 130 140 sp|Q1X VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE .::. .:: ::.::. .. ::.. .::: : ......: .: : :. :: sp|Q5U KIRNKQSAQDSRRRKKEYIDGLESRVAACSEQNQKLQRKVQELERQNISLVAQVHQLQKF 200 210 220 230 240 250 150 160 170 180 190 200 sp|Q1X VRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAES sp|Q5U TAQTSSRAAQTSTCVLILLFSLALIILPSFSPFQSQPEARSEGYQLHGVISRNILTHEDM 260 270 280 290 300 310 >>sp|A0JMK9|CAF1A_DANRE Chromatin assembly factor 1 subu (863 aa) s-w opt: 156 Z-score: 139.4 bits: 35.6 E(516081): 3 Smith-Waterman score: 156; 25.3% identity (55.5% similar) in 229 aa overlap (1-215:208-432) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSP .: .. : . : : :.. .:. .: sp|A0J DSDTEEEEEEEEEEEEQQQEAEVSHGNESVLSTGSTSSASVIASSPE-PSKSAPT---TP 180 190 200 210 220 230 40 50 60 70 80 sp|Q1X ADTS-LNSAD-VKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEKEQRRI :.:: .:.:. :: . .: ... :.:. .: : .:. ... ::... sp|A0J ASTSRINAANKVKRRSLKSVQEQEEKQRQRDEKERLKQEAKAAKEKKKEEARKMKEEKER 240 250 260 270 280 290 90 100 110 120 130 140 sp|Q1X ERVLRNRAAAQTSRERK-RLEMEKLENEKIQMEQQNQFLLQRLSQM--EAENNRLSQQLA :. ... . ::.: : : :: .. : . ::... . .: . . :..::... sp|A0J EKKEKKEKDEKERREKKERDEKEKADKLKAKEEQRQMKIEAKLEEKRKKEEEKRLKEEKD 300 310 320 330 340 350 150 160 170 180 190 sp|Q1X QLAAE----VRG-SRANTPM-PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYS .. :: .: .. .: . : . :.: ..: .: . . :: :. : : . sp|A0J RIKAEKAEITRFLQKPKTQLAPKTLASACGKFAPFEIKAHMSLAPLTRVQCEDSVLEDLD 360 370 380 390 400 410 200 210 220 230 240 250 sp|Q1X PTL-KP-STLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDF : .: ::: .: . : sp|A0J RYLAQPDSTLNGLKDWTGHKPRSSGPTRPRHSAQGDCVVITESQKADDGPDRSRYGRMKL 420 430 440 450 460 470 >>sp|Q96JK9|MAML3_HUMAN Mastermind-like protein 3 OS=Hom (1134 aa) s-w opt: 158 Z-score: 139.0 bits: 35.9 E(516081): 3.2 Smith-Waterman score: 158; 22.8% identity (53.1% similar) in 254 aa overlap (8-250:390-619) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNS : .:. :. .:::. :. :::. ...: sp|Q96 DPSHSPFAHVSMGSPQARPSSSGPPFSTVSTATSLPSVASTPAAPNPA--SSPANCAVQS 360 370 380 390 400 410 40 50 60 70 80 90 sp|Q1X ADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA .. .: : . : : . : : ... . . . . . :.. :: sp|Q96 PQTPNQAHTPGQAPP---RPGNGYLLNPAAVTVAGSASGPVAVPSSDMSPAEQLKQMAAQ 420 430 440 450 460 470 100 110 120 130 140 150 sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT : ..: .: ..: .... :..::.: :. .:.. ..:. :. . :. .. sp|Q96 Q--QQRAKLMQQKQQQQQQQQQQQQQ---QQQQQQQQHSNQTSNW-SPLGPP------SS 480 490 500 510 520 160 170 180 190 200 sp|Q1X PMPGSPATA----SPTLTPTLFKQERDELPLERIPFPTPSLSDYSP-------TLKPSTL :. :. :: :: . : :... .: . ....: : . .:..: sp|Q96 PY-GAAFTAEKPNSPMMYPQAFNNQNPIVPPMANNLQKTTMNNYLPQNHMNMINQQPNNL 530 540 550 560 570 580 210 220 230 240 250 260 sp|Q1X AESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSV . .: :: .. :.. :: ...::... : :: : sp|Q96 GTNSLNKQHNILTY------GNTKPLTHFNADLSQRMTPPVANPNKNPLMPYIQQQQQQQ 590 600 610 620 630 270 280 290 300 310 320 sp|Q1X EPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQ sp|Q96 QQQQQQQQQQQPPPPQLQAPRAHLSEDQKRLLLMKQKGVMNQPMAYAALPSHGQEQHPVG 640 650 660 670 680 690 >>sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcripti (127 aa) s-w opt: 139 Z-score: 139.0 bits: 32.7 E(516081): 3.2 Smith-Waterman score: 139; 28.6% identity (68.8% similar) in 77 aa overlap (69-145:21-97) 40 50 60 70 80 90 sp|Q1X DVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQ : : . . : ..:...: .::.::: sp|Q9N MSQGLPAAGSVLQRSVAAPGNQPQPQPQQQSPEDDDRKVRRREKNRVAAQ 10 20 30 40 50 100 110 120 130 140 150 sp|Q1X TSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP ::... . .::..: ..::.: .: ...... : ..:.. : . sp|Q9N RSRKKQTQKADKLHEEYESLEQENTMLRREIGKLTEELKHLTEALKEHEKMCPLLLCPMN 60 70 80 90 100 110 160 170 180 190 200 210 sp|Q1X MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV sp|Q9N FVPVPPRPDPVAGCLPR 120 >>sp|Q9C0A6|SETD5_HUMAN SET domain-containing protein 5 (1442 aa) s-w opt: 160 Z-score: 139.0 bits: 36.2 E(516081): 3.2 Smith-Waterman score: 160; 21.2% identity (49.9% similar) in 359 aa overlap (2-331:410-760) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPA .: ..: .. :: : : : . : sp|Q9C TKDAEVTIAFDYEYSNCNYKVDCACHKGNRNCPIQKRNPNATELPLLPPP--PSLPTIGA 380 390 400 410 420 430 40 50 60 70 80 90 sp|Q1X DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL .: .: : :.. ... .. . .::.: : .... . .:: ... :.:. sp|Q9C ETRRRKARRKELEMEQQNEASEENNDQQSQEVPEKVTVSSDHEEVDNPEEKPEEEKEEVI 440 450 460 470 480 490 100 110 120 130 140 sp|Q1X ---RNRAAAQTSRERKRLE--MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL .: : .. .:: ...: :. .:: . . ....: : : :..: .. ... sp|Q9C DDQENLAHSRRTREDRKVEAIMHAFENLEKRKKRRDQPLEQSNSDVEITTTTSETPVGEE 500 510 520 530 540 550 150 160 170 180 190 sp|Q1X A------AEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPS------- . .:: .: .:. .:..: ... . . .: : . .: : :. sp|Q9C TKTEAPESEVSNSVSNVTIPSTPQSVGVNTRRS--SQAGDIAAEKLVPKPPPAKPSRPRP 560 570 580 590 600 610 200 210 220 230 240 sp|Q1X ---LSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAA- .: : . ... ::. .: :.:: :: .: . . : :. . sp|Q9C KSRISRYRTSSAQRLKRQKQANAQQAELSQAALEEGGSN----SLVTPTEAGSLDSSGEN 620 630 640 650 660 670 250 260 270 280 290 300 sp|Q1X -PLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSA----FPFDSMVNFDSEPVT ::. .: . . : :. .: . . : : . .: : . . . ..:.. sp|Q9C RPLTGSDPTVVSITGSHVNRAASKYPKTKKYLVTEWLNDKAEKQECPVECPLRITTDPTV 680 690 700 710 720 730 310 320 330 340 sp|Q1X LEG-IEMAHGL-PDETTCKTSSVQPGFGASTTRCDGQGIAAGC : ..: :: . : : . ::. sp|Q9C LATTLNMLPGLIHSPLICTTPKHYIRFGSPFIPERRRRPLLPDGTFSSCKKRWIKQALEE 740 750 760 770 780 790 >>sp|B3DM43|SOX5_XENTR Transcription factor Sox-5 OS=Xen (753 aa) s-w opt: 154 Z-score: 138.6 bits: 35.2 E(516081): 3.4 Smith-Waterman score: 154; 23.3% identity (50.0% similar) in 236 aa overlap (95-327:224-436) 70 80 90 100 110 120 sp|Q1X VPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF ::.: ..:...:. : ..:.: .::. . sp|B3D EKERQLMAMINQLTSLREQLLAAHDEQKKLAASQIEKQRQQMELAKQQQEQIARQQQQLL 200 210 220 230 240 250 130 140 150 160 170 180 sp|Q1X LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQE---RDE :. .. .. ... :: : : : . .. :. . : : :. . : sp|B3D QQQHKINLLQQQIQVQGQLPPLMIPVFPPDQRT-LAAAAAAQQGFLIPPGFSYKPGCSDP 260 270 280 290 300 310 190 200 210 220 230 240 sp|Q1X LPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKH :.. :: . . .: : : : . .:: :..:. :. :: . sp|B3D YPVQLIPTTMAAAAAATPGLAPLQLQQLY-AAQLAAMQVS----PGAKLP------GVPP 320 330 340 350 360 250 260 270 280 290 300 sp|Q1X HSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSE . .....: : .: :.:. .: :: . .::: : : . : sp|B3D SNLSNAVSPSS-------IHTDKSTSSPPPKTKD----DVTQPLNLSAKPKGSDSKSPSS 370 380 390 400 410 310 320 330 340 sp|Q1X PVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC :.. . ... .: . :.::. : sp|B3D PTSPHIPRLSSALAHKPICSTSASTPLRVNSIDILSSITSPGYLNDHDAVTKAIQEARQM 420 430 440 450 460 470 >>sp|A5FV21|IF2_ACICJ Translation initiation factor IF-2 (887 aa) s-w opt: 155 Z-score: 138.2 bits: 35.4 E(516081): 3.5 Smith-Waterman score: 155; 26.7% identity (49.2% similar) in 240 aa overlap (41-255:41-271) 20 30 40 50 60 70 sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL ... :. : .: :. . : : :.. sp|A5F KGRLSLRPVNRGELGRTVDAGSVRQSFSHGRSKVVQVEVRK--KRGGAAGAETGRPSA-- 20 30 40 50 60 80 90 100 110 sp|Q1X PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQM------------ : : . . . :.. :.::... .:: ::: :. :.:::.. sp|A5F PSRASGGAAAPRGLTAAEQAARQRAVVEQQREAARLEAERREQEKISILSAAEEARRKAE 70 80 90 100 110 120 120 130 140 150 160 170 sp|Q1X -EQQNQFLLQRLSQMEAENNRLSQQLAQL--AAEVRGSRANTPMPG---SPATASPTLTP : . .:: . : : : .. :. :::. . : : :. :: .: : .: sp|A5F EEARAAEEAERL-RAEEEARRREEEEAERRRAAEASQATAAPPAPAAAASPRAAMP--AP 130 140 150 160 170 180 180 190 200 210 220 sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTL-------AESSDVAQHPAVSVAGLEG : . : .: :.: .. : ::. . :.: :..:. ..: . sp|A5F TAAPARPGAAPARRTA-PVPPATSASETLRLRAARTGRDEEEEASRPARRPGSGAAPSRK 190 200 210 220 230 240 230 240 250 260 270 280 sp|Q1X DGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGG . : .:.: .. . :: : :: :: sp|A5F PSVPAPK-KVGDDRRRGARIDVQAALSGDDERVRSLASVRRQRDRERRQAELERLRSDQV 250 260 270 280 290 300 >>sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive element-bi (357 aa) s-w opt: 147 Z-score: 138.1 bits: 34.0 E(516081): 3.6 Smith-Waterman score: 147; 27.6% identity (59.3% similar) in 123 aa overlap (52-168:194-315) 30 40 50 60 70 80 sp|Q1X EVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDE :: .. . : . :. . :.:. :: sp|Q8K HSHSHLHAHPAHHQTSPHPPLHTGNQAQVSPATQQMQPTQTIQPPQPTGGRRRRVVDEDP 170 180 190 200 210 220 90 100 110 120 130 140 sp|Q1X KEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQ :.:: . . :::::: :..... . .::.. .. : :. : ...:... : .:.: sp|Q8K DERRR-KFLERNRAAATRCRQKRKVWVMSLEKKAEELTQTNMQLQNEVSMLKNEVAQLKQ 230 240 250 260 270 280 150 160 170 180 190 sp|Q1X QL-----AQLAAEVRGSRAN-TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS : ..: . :.. .: . ::. : sp|Q8K LLLTHKDCPITAMQKESQGYLSPESSPPASPVPACSQQQVIQHNTITTSSSVSEVVGSST 290 300 310 320 330 340 200 210 220 230 240 250 sp|Q1X DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDD sp|Q8K LSQLTTHRTDLNPIL 350 >>sp|Q9H254|SPTN4_HUMAN Spectrin beta chain, brain 3 OS= (2564 aa) s-w opt: 164 Z-score: 138.1 bits: 36.9 E(516081): 3.6 Smith-Waterman score: 164; 22.5% identity (53.9% similar) in 204 aa overlap (6-203:2186-2384) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPV-LTVSPADTS :. . .: :: :. :. : ..: :.. sp|Q9H GLEPLARRASDTLSAEVRTRVGYVRQELKPERLQPRIDRLPEIPGRVEPAALPAAPEDAA 2160 2170 2180 2190 2200 2210 40 50 60 70 80 90 sp|Q1X LNSAD-VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRA--KTEDEKEQRRIERVL . : . ...:.: .: ....: . .:. : :... ..:. ..:: :: sp|Q9H ETPATPAAAEQVRP---RP-ERQESADRAEELPRRRRPERQESVDQSEEAARRRRPERQE 2220 2230 2240 2250 2260 2270 100 110 120 130 140 150 sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR . : : : :. . . :. . . . : .. .... . . ::... ... sp|Q9H SAEHEAAHSLTLGRYEQMERRRERRERRLERQESSEQEMPIRGDLVKGKATLADIVEQLQ 2280 2290 2300 2310 2320 2330 160 170 180 190 200 sp|Q1X GSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPT-PSLSDY-SPTLKPSTLAES ..:. .:..:. .: : . ::: :: : : : : .: .: sp|Q9H EKEAGPGLPAGPSLPQPRELPPGRLPNGLELP-ERTPRPDRPRARDRPKPRRRPRPREGG 2340 2350 2360 2370 2380 2390 210 220 230 240 250 260 sp|Q1X SDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPD sp|Q9H EGGGSRRSRSAPAQGGSAPAPPPPPTHTVQHEGFLLRKRELDANRKSSNRSWVSLYCVLS 2400 2410 2420 2430 2440 2450 >>sp|B2AWS3|PAN1_PODAN Actin cytoskeleton-regulatory com (1441 aa) s-w opt: 159 Z-score: 138.0 bits: 36.0 E(516081): 3.6 Smith-Waterman score: 159; 23.5% identity (50.4% similar) in 341 aa overlap (16-333:1015-1335) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV : :. ..: :. . ..: :..: sp|B2A AERQARIAEETGAPAPAAQAAVPKPEGKKPPPPPSRKTP--KVDDRRAEEEAAARKAEEG 990 1000 1010 1020 1030 1040 50 60 70 80 90 100 sp|Q1X KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKT-EDEKEQRRIERVLRNRAAAQTSRERK . :... ..:.. .:: ..::: ::: ..: : : .: . :. : sp|B2A RLERERGEQERQT--REL---------EERAKDQEDELAKERAEADARLKALEEQVRQGK 1050 1060 1070 1080 1090 110 120 130 140 150 sp|Q1X RLEMEKLENEKIQM---EQQNQFLLQRLSQMEAENNR---LSQQLAQLAAEVRGSRANT- . :. ...: : ..:. : :: ...:: .: : .:: : .: .: . sp|B2A LKKEEEKRKKKAAMAEAKEQEAKLAQRRAEIEAARKREEELRKQLEALDVEDSSSDDDEG 1100 1110 1120 1130 1140 1150 160 170 180 190 200 sp|Q1X PMPGSPATASPTLTPTLF--KQERDELPLERIPFPT---PSLSDYSPTLKPST------L : .: ...::: . .:: . : .: :. :.. ::. : sp|B2A PEQITPQASTPTLGGSQVGGSQELEPAPPTPVPAPVQSPPQIVTSSPAETESRNPYFRMR 1160 1170 1180 1190 1200 1210 210 220 230 240 250 260 sp|Q1X AESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSV :...... : . : . : :.... :. :. .::: . .: :.. sp|B2A AQAAETTPAPPAPPAPVAPPPPPQP--DVSTNPFHRMTQAAAAPAPSGPVSRKRPEDDGW 1220 1230 1240 1250 1260 270 280 290 300 310 320 sp|Q1X EPDSSVFEDGLAFDVLEGGD----LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKT :. .: : . :. :... : .:. .:.. : . : . : .: . sp|B2A GSDKE--DDDEDSDDDRPGQGAAHLASILFGTMA--PPRPLSATGDKSAAASPP-VTSPV 1270 1280 1290 1300 1310 1320 330 340 sp|Q1X SSVQPGFGASTTRCDGQGIAAGC .: :.. . : sp|B2A ASPPPAIPSPTAAGAPPAPPPPPPMPGMGAPPPPPPPPPMPGSGAPAAPPPPPPPAPGGA 1330 1340 1350 1360 1370 1380 >>sp|Q61827|MAFK_MOUSE Transcription factor MafK OS=Mus (156 aa) s-w opt: 139 Z-score: 137.3 bits: 32.7 E(516081): 4 Smith-Waterman score: 139; 26.4% identity (56.6% similar) in 159 aa overlap (47-193:5-156) 20 30 40 50 60 sp|Q1X ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTN------- :. .: : .: :.. :: . . sp|Q61 MTTNPKPNKALKVKKEAGENAPVLSDDELVSMSV 10 20 30 70 80 90 100 110 120 sp|Q1X --LPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF : . :. :..: .::: :.:.::. : . : .. . :.:: ......:. . sp|Q61 RELNQHLRGLTKEEVTRLKQRR--RTLKNRGYAASCRIKRVTQKEELERQRVELQQEVEK 40 50 60 70 80 90 130 140 150 160 170 180 sp|Q1X LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPL : .. :.:. : . : .. : . .: . : :. .:. .. : . :. :. :: sp|Q61 LARENSSMRLELDALRSKYEALQTFAR-TVARGPV--TPTKVATTSVITIVKSA--ELSS 100 110 120 130 140 190 200 210 220 230 240 sp|Q1X ERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHST .:: . : sp|Q61 TSVPFSAAS 150 >>sp|O60675|MAFK_HUMAN Transcription factor MafK OS=Homo (156 aa) s-w opt: 139 Z-score: 137.3 bits: 32.7 E(516081): 4 Smith-Waterman score: 139; 26.4% identity (56.6% similar) in 159 aa overlap (47-193:5-156) 20 30 40 50 60 sp|Q1X ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTN------- :. .: : .: :.. :: . . sp|O60 MTTNPKPNKALKVKKEAGENAPVLSDDELVSMSV 10 20 30 70 80 90 100 110 120 sp|Q1X --LPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF : . :. :..: .::: :.:.::. : . : .. . :.:: ......:. . sp|O60 RELNQHLRGLTKEEVTRLKQRR--RTLKNRGYAASCRIKRVTQKEELERQRVELQQEVEK 40 50 60 70 80 90 130 140 150 160 170 180 sp|Q1X LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPL : .. :.:. : . : .. : . .: . : :. .:. .. : . :. :. :: sp|O60 LARENSSMRLELDALRSKYEALQTFAR-TVARGPV--APSKVATTSVITIVKST--ELSS 100 110 120 130 140 190 200 210 220 230 240 sp|Q1X ERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHST .:: . : sp|O60 TSVPFSAAS 150 >>sp|Q4QRL3|CC88B_MOUSE Coiled-coil domain-containing pr (1481 aa) s-w opt: 158 Z-score: 136.9 bits: 35.9 E(516081): 4.2 Smith-Waterman score: 158; 28.6% identity (57.8% similar) in 185 aa overlap (6-180:281-460) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSL ::. . .:: . . :. . . .: sp|Q4Q NASAEGVSHHLALQLTNAKAQLRRLRQEVEEKAEQLLDSQAEVQGLEAEIRRLRQETQAL 260 270 280 290 300 310 40 50 60 70 80 90 sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK---TEDEKEQRRIERVLR ::..: :. :: . ..: . .:: . .: : : : .: : : . :::: sp|Q4Q -SAQAKRAELYREEAEALRERAG---RLPRLQEELR-RCREKLQAAEVFKGQLEEERVLS 320 330 340 350 360 100 110 120 130 140 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQ-RLSQMEAENNRLSQQLAQLAAE-- . :. ...::. . .. ... :....::. ::.. .:. . : .:: ::. : sp|Q4Q EALEASKVLLEEQLEVARERSARLHETQRENLLLRTRLGEAHADLDSLRHQLEQLVEENV 370 380 390 400 410 420 150 160 170 180 190 200 sp|Q1X ---VRGSRANTPMPGSPATAS-PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPST .. .:. : ::::. :: : .:.: . :. sp|Q4Q ELELELQRSLEPPPGSPGEASLPGAAPSLQDEVREAEAGRLRAVERENRELRGQLQMLQA 430 440 450 460 470 480 210 220 230 240 250 260 sp|Q1X LAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSS sp|Q4Q QLGSQHPLLEEQRENSRQPPVPNRDPATPSALHHSPQSPACQIGGEGSESLDLPSPASYS 490 500 510 520 530 540 >>sp|P53450|FOS_TAKRU Proto-oncogene c-Fos OS=Takifugu r (376 aa) s-w opt: 146 Z-score: 136.8 bits: 33.9 E(516081): 4.3 Smith-Waterman score: 146; 25.9% identity (57.5% similar) in 247 aa overlap (15-248:48-279) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN-------S : :. :: .:..:. .. .:. : sp|P53 ASPVGDNLYYPSPAGSYSSMGSPQSQDFTDLTASSASFIPTVTAISTSPDLQWMVQPLIS 20 30 40 50 60 70 40 50 60 70 80 90 sp|Q1X ADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK--TEDEKEQRRIERVLRNRA . . .....: .:. :: .. . :.. :.:.. : .:.:..::.: ::. sp|P53 SVAPSHRAHPYSPSPSYKRTV--MRSAASKAH-GKRSRVEQTTPEEEEKKRIRRE-RNKQ 80 90 100 110 120 130 100 110 120 130 140 150 sp|Q1X AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR-GSR :: :.:.: . :. : :.:.... : . .... :..:: :: . :. sp|P53 AAAKCRNRRRELTDTLQAETDQLEDEKSSLQNDIANLLKEKERLEFILAAHQPICKIPSQ 140 150 160 170 180 190 160 170 180 190 200 210 sp|Q1X ANTPMPGSPATASPT---LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD .: . : .. ::. :. :. : . .: . : : : .. : . : .. ::: sp|P53 MDTDF--SVVSMSPVHACLSTTVSTQLQTSIP--EATTVTSSHSTFTST-SNSIFSGSSD 200 210 220 230 240 220 230 240 250 260 270 sp|Q1X VAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSS .:.: . ..:.. . :: :.. ..: : .: sp|P53 ----SLLSTATV--SNSVVKMTDLDSSVLEESLDLLAKTEAETARSVPDVNLSNSLFAAQ 250 260 270 280 290 300 280 290 300 310 320 330 sp|Q1X VFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGA sp|P53 DWEPLHATISSSDFEPLCTPVVTCTPACTTLTSSFVFTFPEAETFPTCGVAHRRRSNSND 310 320 330 340 350 360 >>sp|Q9UPA5|BSN_HUMAN Protein bassoon OS=Homo sapiens GN (3926 aa) s-w opt: 166 Z-score: 136.5 bits: 37.2 E(516081): 4.4 Smith-Waterman score: 166; 25.7% identity (58.3% similar) in 187 aa overlap (16-189:2328-2510) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS--LNSADVKTQ :: :.. : ..:. : :. . . sp|Q9U RPEMPVGAAREEPLPTTTPAAIKEAAGAPAPAPLAGQKPPADAAPGGGSGALSRPGFEKE 2300 2310 2320 2330 2340 2350 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER :.. ::.. .:.. .: ...: .. . ..: :..:.: . :.: : .: sp|Q9U EASQEERQ--RKQQEQLLQLERERVELEKLRQLRLQEELERERVE-LQRHREEEQLLVQR 2360 2370 2380 2390 2400 2410 110 120 130 140 150 sp|Q1X KRLEMEKLENEKIQMEQ---QNQFLLQR--LSQ--MEAEN-NRLSQQLAQLAAEVRGSRA . :.. .... .:..: : :: ::: :.: .. :. ..:.::: : : . .: sp|Q9U ELQELQTIKHHVLQQQQEERQAQFALQREQLAQQRLQLEQIQQLQQQLQQQLEEQK-QRQ 2420 2430 2440 2450 2460 2470 160 170 180 190 200 210 sp|Q1X NTPMPGS---PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV ..:.:.. :. . : . : .. . :: . : sp|Q9U KAPFPAACEAPGRGPPLAAAELAQNGQYWPPLTHAAFIAMAGPEGLGQPREPVLHRGLPS 2480 2490 2500 2510 2520 2530 220 230 240 250 260 270 sp|Q1X AQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV sp|Q9U SASDMSLQTEEQWEASRSGIKKRHSMPRLRDACELESGTEPCVVRRIADSSVQTDDEDGE 2540 2550 2560 2570 2580 2590 >>sp|O88737|BSN_MOUSE Protein bassoon OS=Mus musculus GN (3942 aa) s-w opt: 166 Z-score: 136.5 bits: 37.2 E(516081): 4.4 Smith-Waterman score: 166; 24.2% identity (57.5% similar) in 186 aa overlap (16-189:2336-2518) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS--LNSADVKTQ :: : .. :. .. .. : :. . . sp|O88 PAGVAREEPFSTTAPAVIKEAPVAPAPGPAPAPPPGQKPAGEAAAGSGSGVLSRPASEKE 2310 2320 2330 2340 2350 2360 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER :.. :... .:.. .: ...: .. . ..: :..:.: . :.: : .: sp|O88 EASQEDRQ--RKQQEQLLQLERERVELEKLRQLRLQEELERERVE-LQRHREEEQLLVQR 2370 2380 2390 2400 2410 2420 110 120 130 140 150 sp|Q1X KRLEMEKLENEKIQMEQ---QNQFLLQR--LSQ--MEAENNRLSQQLAQLAAEVRGSRAN . :.. .... .:..: : :: ::: :.: .. :. . :: :: : . .: . sp|O88 ELQELQTIKQHVLQQQQEERQAQFALQREQLAQQRLQLEQIQQLQQQLQLQLEEQKQRQK 2430 2440 2450 2460 2470 2480 160 170 180 190 200 210 sp|Q1X TPMPGS---PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA .:.:.. :. . : . : .. . :: . : sp|O88 APFPATCEAPSRGPPPAATELAQNGQYWPPLTHAAFIAVAGTEGPGQPREPVLHRGLPSS 2490 2500 2510 2520 2530 2540 220 230 240 250 260 270 sp|Q1X QHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVF sp|O88 ASDMSLQTEEQWEAGRSGIKKRHSMPRLRDACEPESGPDPSTVRRIADSSVQTDDEEGEG 2550 2560 2570 2580 2590 2600 >>sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Arabido (315 aa) s-w opt: 144 Z-score: 136.3 bits: 33.5 E(516081): 4.5 Smith-Waterman score: 144; 30.7% identity (60.6% similar) in 127 aa overlap (31-149:176-296) 10 20 30 40 50 60 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG ::.: .:. . : : . . : sp|P42 VTAGSSDENDENANQQEQGSIRKPSFGQMLADASSQSTTGEIQGSVPMKPVAPGTNLNIG 150 160 170 180 190 200 70 80 90 100 110 120 sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ ..: ....: ..::.: .: .: :: .:. :: ::. : :.:... .. . sp|P42 MDLWSSQAGVP------VKDERELKRQKRKQSNRESARRSRLRKQAECEQLQQRVESLSN 210 220 230 240 250 130 140 150 160 170 sp|Q1X QNQFL---LQRLS----QMEAENNRLSQQLAQ-LAAEVRGSRANTPMPGSPATASPTLTP .:: : ::::: ....::: ....: . :.:: sp|P42 ENQSLRDELQRLSSECDKLKSENNSIQDELQRVLGAEAVANLEQNAAGSKDGEGTN 260 270 280 290 300 310 180 190 200 210 220 230 sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL >>sp|Q7ZVN7|MED15_DANRE Mediator of RNA polymerase II tr (809 aa) s-w opt: 152 Z-score: 136.2 bits: 34.9 E(516081): 4.6 Smith-Waterman score: 152; 20.8% identity (56.0% similar) in 259 aa overlap (58-297:322-573) 30 40 50 60 70 80 sp|Q1X VSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRI : :.. ::. ... .. ....: .. sp|Q7Z QMQQQQQLQVQAQGQPQVQGQGGAVQMPPHSQQQQVLVPQMVQGQHSQMSALSQQQQLKL 300 310 320 330 340 350 90 100 110 120 130 140 sp|Q1X ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA ..... : : ...... .... .... :..::.: :. .: . .. . :: .::. sp|Q7Z QQAMQARMQQQQQQQQQQQQQQQQQQQQQQQQQQQQ--QQQQQQHQQQQVQQVQQASQLT 360 370 380 390 400 150 160 170 180 190 sp|Q1X A-----------EV--RGSRA--NTPMPGSPATASPTLTPTLFKQERDELPLE-RIPFPT : .. : :: :. .: .:.. . : .. . :.. . : sp|Q7Z AVPGQMMPRPGMQIPPRLPRATPNSAIPQNPVAIGGQQMPQAQQMMSSPSPVQVQTPQSM 410 420 430 440 450 460 200 210 220 230 240 250 sp|Q1X PSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPL : . .:. .: . .. ..:.. :. : .:.. . : : . .:. .: . .: sp|Q7Z PPPPQPQPSPQPPS-SQPNSVSSGPTPSPGGFQPSPSPQPSQSPASSRTPQSYP-LQVP- 470 480 490 500 510 520 260 270 280 290 300 sp|Q1X SDDDFNRLFHGDSSVEP-DSSVFEDGLAFDVLEGGDLSAF--PFDSMVNFDSEPVTLEGI : .: . .: . : .: :: : .: :. .:: . :. :.: sp|Q7Z SPGPLNTPGNPSSVMSPAGASQSEDQLYMDKLR--QLSKYIEPLRRMINKIDKNEDRKKD 530 540 550 560 570 580 310 320 330 340 sp|Q1X EMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC sp|Q7Z LSKMKSLLNILTDPNTRCPLKTLQKCEIALEKLKNDMAVPTPPPPPVPCTKKQYLCQPIL 590 600 610 620 630 640 >>sp|O42290|MAFA_CHICK Transcription factor MafA OS=Gall (286 aa) s-w opt: 143 Z-score: 136.2 bits: 33.4 E(516081): 4.6 Smith-Waterman score: 143; 33.3% identity (67.9% similar) in 84 aa overlap (85-167:201-281) 60 70 80 90 100 110 sp|Q1X KRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE .. .:.:.::. ::. : .. . . :::: sp|O42 RFSDDQLVSMSVRELNRQLRGFSKEEVIRLKQNRRTLKNRGYAQSCRYKRVQQRHILENE 180 190 200 210 220 230 120 130 140 150 160 170 sp|Q1X KIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG-SRANTPMPGSPATASPTLTPT : :...: . : :..:.. : . ... .::: :: : .: :..: :.. sp|O42 KCQLQSQVEQLKQEVSRLAKERDLYKEKYEKLAA--RGFPREPSP-PAAPKTTAADFFM 240 250 260 270 280 180 190 200 210 220 230 sp|Q1X LFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLF >>sp|A9V549|EIF3A_MONBE Eukaryotic translation initiatio (1052 aa) s-w opt: 154 Z-score: 135.9 bits: 35.2 E(516081): 4.7 Smith-Waterman score: 154; 27.1% identity (56.2% similar) in 203 aa overlap (41-231:770-966) 20 30 40 50 60 70 sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL :: : . : :. :: . . . sp|A9V EKARVDHAKALGLKELLKAFAPDKDAYIEEKTAERRKEYMAKLDDFKQRMQEQKI-RLER 740 750 760 770 780 790 80 90 100 110 120 sp|Q1X PPRKRAKTE----DEKEQRRI--ERVLRNRAAAQTSRERKRLEMEKLEN-EKIQMEQQNQ :.: . : .:.::::: :. :.. ...::..: :. :::. :. .::. .. sp|A9V EERERKREEKRRAEEEEQRRIKQEEEDRKQREREAKREQERQEQLKLEEAERKKMEEATK 800 810 820 830 840 850 130 140 150 160 170 180 sp|Q1X FLLQRLSQMEA-ENNRLSQQLAQLAAEV--RGSRANTPMPGSPATASPTLTPTLFKQERD . :: :..: :...::. :: . . :..:...: ..:.. . . .: . . sp|A9V LQRQREEQVRAREQEKLSNLSAQTSQPTWKRSARSDAPTTAAPSS----MRVSSWKGDAS 860 870 880 890 900 910 190 200 210 220 230 sp|Q1X ELPLERIPFPTPSLSDYSPTLKP-STLAESSDVA-QHPAVSVAGLEGDGSALPLFDLGSD . . :: :: . . . : :.. .: : . . : .:: :. : sp|A9V DDSGRSQPF-RPSRGGERDSGRSFSGLGDRGDRAPRDTGRSFSGLGDRGDRAPRDTGRSF 920 930 940 950 960 970 240 250 260 270 280 290 sp|Q1X LKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNF sp|A9V SGLGDRAPRDFSGRSEPSRSGPRDFSGRSEAGRTSGERRALHVPSGGADKPSGDNVWRSS 980 990 1000 1010 1020 1030 >>sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcripti (118 aa) s-w opt: 135 Z-score: 135.9 bits: 32.0 E(516081): 4.8 Smith-Waterman score: 135; 33.3% identity (77.8% similar) in 63 aa overlap (83-145:28-90) 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE ..:...: .::.::: ::... . .::. sp|Q9D MSQGPPAVSVLQRSVDAPGNQPQSPKDDDRKVRRREKNRVAAQRSRKKQTQKADKLH 10 20 30 40 50 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP .:. ..::.:. : ...:... : .::. : . sp|Q9D EEHESLEQENSVLRREISKLKEELRHLSEVLKEHEKMCPLLLCPMNFVQLRSDPVASCLP 60 70 80 90 100 110 180 190 200 210 220 230 sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL sp|Q9D R >>sp|Q5RCJ1|CIP4_PONAB Cdc42-interacting protein 4 OS=Po (601 aa) s-w opt: 149 Z-score: 135.8 bits: 34.4 E(516081): 4.8 Smith-Waterman score: 149; 25.4% identity (54.2% similar) in 177 aa overlap (29-186:294-463) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR-K .:.:.::.. .. .:: . :...: : sp|Q5R DSQVLIELHKSGFARPGDVEFEDFSQPMNRAPSDSSLGTP----SDGRPELRGPGRSRTK 270 280 290 300 310 60 70 80 90 100 sp|Q1X SW--GQEL------------PVPKT--NLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR : :.. :::.. : :: :. . .: . .. : :. : sp|Q5R RWPFGKKNKPRPPPLSPLGGPVPSALPNGPPSPRSGRDPLAILSEISKSVKPRLASFRSL 320 330 340 350 360 370 110 120 130 140 150 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA--EVRGSRANTPM . .: . . .. ::: . : : :.: .. .:.... : : ... .::. sp|Q5R RGSRGTVVTEDFSHLPPEQQRKRLQQ---QLEERSRELQKEVDQREALKKMKDVYEKTPQ 380 390 400 410 420 430 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS :.::. : .: :: . :: .: ... sp|Q5R MGDPASLEPQITETLSNIERLKLEVQKYEAWLAEAESRVLSNRGDSLSRHARPPDPPTSA 440 450 460 470 480 490 >>sp|O43889|CREB3_HUMAN Cyclic AMP-responsive element-bi (395 aa) s-w opt: 145 Z-score: 135.4 bits: 33.7 E(516081): 5 Smith-Waterman score: 145; 30.2% identity (62.8% similar) in 129 aa overlap (63-185:159-282) 40 50 60 70 80 90 sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR : .:.: :: .::: :. .:..: .: sp|O43 TPQHMEELAEQEIARLVLTDEEKSLLEKEGLILPET-LP---LTKTE-EQILKRVRRKIR 130 140 150 160 170 180 100 110 120 130 140 150 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV-- :. .:: ::..:.. . ::.. ... ::. : .... .: .: : .:: .: : : sp|O43 NKRSAQESRRKKKVYVGGLESRVLKYTAQNMELQNKVQLLEEQNLSLLDQLRKLQAMVIE 190 200 210 220 230 240 160 170 180 190 200 sp|Q1X ---RGSRANTPMPGSPATASPTLTPTLFKQE-RDELPLERIPFPTPSLSDYSPTLKPSTL . : ..: . .. :.:...... : :: : sp|O43 ISNKTSSSSTCILVLLVSFCLLLVPAMYSSDTRGSLPAEHGVLSRQLRALPSEDPYQLEL 250 260 270 280 290 300 210 220 230 240 250 260 sp|Q1X AESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSV sp|O43 PALQSEVPKDSTHQWLDGSDCVLQAPGNTSCLLHYMPQAPSAEPPLEWPFPDLFSEPLCR 310 320 330 340 350 360 >>sp|O35284|BATF_MOUSE Basic leucine zipper transcriptio (125 aa) s-w opt: 135 Z-score: 135.4 bits: 32.0 E(516081): 5.1 Smith-Waterman score: 135; 28.9% identity (62.2% similar) in 90 aa overlap (71-160:17-103) 50 60 70 80 90 100 sp|Q1X KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS :: :. ...: :...: .:: ::: : sp|O35 MPHSSDSSDSSFSRSPPPGKQDSSDDV---RKVQRREKNRIAAQKS 10 20 30 40 110 120 130 140 150 160 sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP :.:. . . :. :. ..:.:: : ....:. : . ... :.. ..:: : sp|O35 RQRQTQKADTLHLESEDLEKQNAALRKEIKQLTEELKYFTSVLSSHEPLCSVLASGTPSP 50 60 70 80 90 100 170 180 190 200 210 220 sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV sp|O35 PEVVYSAHAFHQPHISSPRFQP 110 120 >>sp|Q2UNX4|KAPC_ASPOR Putative transcription factor kap (284 aa) s-w opt: 142 Z-score: 135.3 bits: 33.2 E(516081): 5.1 Smith-Waterman score: 142; 24.2% identity (51.6% similar) in 215 aa overlap (16-223:44-237) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL---TVSPAD-TSLNSADVK : ::.. : . :.:: : .... : sp|Q2U QTSAQDHADQVLHDQLLAAHQHLSHPQQPRPQPPAAQPPHMQPNTTSPRDQNNIDPAISG 20 30 40 50 60 70 50 60 70 80 90 100 sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR . .. . : . . . ::: : :: .. .:. .:::: .. : sp|Q2U AAMLSGPPQTPPQPEPT-GQESP------------KTYGKRPLSTSKRAAQNRAAQRAFR 80 90 100 110 120 110 120 130 140 150 sp|Q1X ERKRLEMEKLENEKIQMEQQNQF--LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP- .::. ..::: :: ..: . . .. ..::: .: . . .: ... :....: sp|Q2U QRKESYIRKLE------EQVKEFDTMSEAFKALQAENYQLREYIINLQSRLLESQGEVPE 130 140 150 160 170 160 170 180 190 200 210 sp|Q1X MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV .::. ..: : : :.: : . . :. : ..:. . . sp|Q2U LPGNIDLSQPR-TDLNVPQPGAGPATTSSSAPAPP-SGAQQAQPPQGAASNDDMNSLNRI 180 190 200 210 220 230 220 230 240 250 260 270 sp|Q1X SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLA .:::: sp|Q2U AVAGLGMRKHPNEEANYLGNNFTGRRTRPDETQADSEVTKTEQAPHGLPMVS 240 250 260 270 280 >>sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive element-bi (508 aa) s-w opt: 147 Z-score: 135.3 bits: 34.0 E(516081): 5.1 Smith-Waterman score: 147; 27.6% identity (59.3% similar) in 123 aa overlap (52-168:345-466) 30 40 50 60 70 80 sp|Q1X EVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDE :: .. . : . :. . :.:. :: sp|Q02 HSHSHLHAHPAHHQTSPHPPLHTGNQAQVSPATQQMQPTQTIQPPQPTGGRRRRVVDEDP 320 330 340 350 360 370 90 100 110 120 130 140 sp|Q1X KEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQ :.:: . . :::::: :..... . .::.. .. : :. : ...:... : .:.: sp|Q02 DERRR-KFLERNRAAATRCRQKRKVWVMSLEKKAEELTQTNMQLQNEVSMLKNEVAQLKQ 380 390 400 410 420 430 150 160 170 180 190 sp|Q1X QL-----AQLAAEVRGSRAN-TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS : ..: . :.. .: . ::. : sp|Q02 LLLTHKDCPITAMQKESQGYLSPESSPPASPVPACSQQQVIQHNTITTSSSVSEVVGSST 440 450 460 470 480 490 200 210 220 230 240 250 sp|Q1X DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDD sp|Q02 LSQLTTHRTDLNPIL 500 >>sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide exchange (1021 aa) s-w opt: 153 Z-score: 135.2 bits: 35.0 E(516081): 5.2 Smith-Waterman score: 153; 24.0% identity (52.8% similar) in 246 aa overlap (9-250:628-858) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVP--VLTVSPADTSLN : :..:::.. :. : :.: ::. sp|Q6P WQGPASSPDSRPCDNSAPSGCCEESPQAVEMPSTESLPTVLELELVHRVQTLSQLLLSLQ 600 610 620 630 640 650 40 50 60 70 80 90 sp|Q1X SADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAA .. . :. : .. : ... .: . :: ....:: .:. ..::. sp|Q6P AV-IAQQDSYVEMQRTAIQEREKQFRLQSTRGNL-------LLEQERQRNFEKQREERAG 660 670 680 690 700 100 110 120 130 140 150 sp|Q1X AQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRAN .. . . : :... : :. ...:. .. ::.. :.: .. :.: : .:.. .: sp|Q6P VEKLQSQLRQEQQRWERERARQQQELELAGARLQEREGEARQMRQRLDQERTELERQRQA 710 720 730 740 750 760 160 170 180 190 200 210 sp|Q1X TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHP . . .::..: : : : . .: : .:::.. ... : sp|Q6P YQHDLERLREAQRAVD----RERERLELLR-RFKKQNT--VPGALPPEVLAEAQPASHPP 770 780 790 800 810 820 220 230 240 250 260 270 sp|Q1X AVSVAGLEGDGS-ALPLFDLGSDLKHHS-TDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE . . :::: .. : :: . : . :.: : sp|Q6P SFNGDGLEGHSAPAKAPGTQGSAMLHGTGPDNVERPEVARWDSAPPESRPAKSDVPIQLL 830 840 850 860 870 880 280 290 300 310 320 330 sp|Q1X DGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTT sp|Q6P SATNQIQRQTAVQQQIPTKLAASTKGGKEKGSKSRGSQRWESSASFDLKQQLLLSKFIGK 890 900 910 920 930 940 >>sp|Q5F489|TAF3_CHICK Transcription initiation factor T (930 aa) s-w opt: 152 Z-score: 135.1 bits: 34.9 E(516081): 5.3 Smith-Waterman score: 152; 26.1% identity (52.7% similar) in 226 aa overlap (14-232:662-845) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLP--ATP-ASEVPVLTVSPADTSLNSADV ::: .:: : ..: .. :. . . . sp|Q5F KKDKEKVKDKSKEDKIKPPSAPLVLPPKEMSLPLFSTPTAMRLP--SMLPSLSPMLPEKL 640 650 660 670 680 50 60 70 80 90 100 sp|Q1X KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS .. ::.::: ::.: .:. . : .::... ... . sp|Q5F FEDKEKPKEKKKDKKEK---------------KKKKEREKDKEKEK-----KDKEKERKE 690 700 710 720 110 120 130 140 150 sp|Q1X RERKRLEMEKLENEKIQMEQ---QNQFLLQRLS-QMEAENNRLSQQLAQLAAEVRGSRAN ::.:. : :: ..:::..: . .. ::. .. : .... . . : : .. sp|Q5F REKKEKEKEKHKHEKIKVEPVVPAPSPVIPRLTLRVGAGQDKIVISKVVPAPE---AKPA 730 740 750 760 770 780 160 170 180 190 200 210 sp|Q1X TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHP ::. . : : :. .:. :.. : :.: . .::..:. : .: : sp|Q5F TPV-SRPKTPPPVPSPV-------PAPVHVTPPPAPVPAPPQPTVSPALLPPAS-----P 790 800 810 820 830 220 230 240 250 260 270 sp|Q1X AVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDG :::.:: :: :. sp|Q5F AVSAAG----GSKAPVRSVVTETVSTYVIRDEWGNQIWFCPGCNKPDDGSPMIGCDDCDD 840 850 860 870 880 >>sp|Q5HZG4|TAF3_MOUSE Transcription initiation factor T (932 aa) s-w opt: 152 Z-score: 135.1 bits: 34.9 E(516081): 5.3 Smith-Waterman score: 152; 27.2% identity (52.0% similar) in 202 aa overlap (14-203:664-845) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ .:: : : : .. :: . . . . sp|Q5H KRERERLKEKNREDKIKAPPTQLVLPPKEMALPLFSPSAVRVPAMLPAFSPMLPEKLFEE 640 650 660 670 680 690 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER . ::.::. : .: .:. : : :::... :: .: . ::. sp|Q5H KEKPKEKERKKDKK---------------EKKKKKEKEKEKEKKER---EREKERREREK 700 710 720 730 110 120 130 140 150 sp|Q1X KRLEMEKLENEKIQMEQ---QNQFLLQRLS-QMEAENNRLSQQLAQLAAEVRGS----RA .. : :: ..:::..: . .. ::. .. : .... . . : :.. . : sp|Q5H REKEKEKHKHEKIKVEPVIPAPSPVIPRLTLRVGAGQDKIVISKVVPAPEAKPAPSLNRP 740 750 760 770 780 790 160 170 180 190 200 210 sp|Q1X NTPMPGS---PATASPT-LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD .:: :. :. .::: : : :. : : .: :.:.:: . . : sp|Q5H KTPPPAPVPIPVRVSPTPLQPPLLTQAAVCPAL--MPSPAPALSGIGSAKAPVRSVVTET 800 810 820 830 840 850 220 230 240 250 260 270 sp|Q1X VAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSS sp|Q5H VSTYVIRDEWGNQIWICPGCNKPDDGSPMIGCDDCDDWYHWPCVGIMAAPPEEMQWFCPK 860 870 880 890 900 910 >>sp|Q9UKV3|ACINU_HUMAN Apoptotic chromatin condensation (1341 aa) s-w opt: 155 Z-score: 134.9 bits: 35.4 E(516081): 5.4 Smith-Waterman score: 155; 25.8% identity (55.1% similar) in 256 aa overlap (46-283:294-535) 20 30 40 50 60 70 sp|Q1X PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPV--PKTNLPPR : .: :. : :.:.: :. . : sp|Q9U DRNLKTEEEEEEEEEEEEDDEEEEGDDEGQKSREAPILKEFKEEGEEIPRVKPEEMMDER 270 280 290 300 310 320 80 90 100 110 120 sp|Q1X KRAKTEDEKEQRRIERVLRNRAAAQTS---RERKRLEMEK---LENEKIQMEQQNQFLLQ ........ .: : :.. :. : :.... ::. ::.:. .. ...: : . sp|Q9U PKTRSQEQEVLERGGRFTRSQEEARKSHLARQQQEKEMKTTSPLEEEEREI-KSSQGLKE 330 340 350 360 370 380 130 140 150 160 170 180 sp|Q1X RLSQMEAENNRLSQQLAQLAA--EVRGSRANTPMPG-SPATASPTLTPTLFKQERDELPL . .. ... :.:.: : .:. .:: : . ..:: : : ..:. : :. sp|Q9U KSKSPSPPRLTEDRKKASLVALPEQTASEEETPPPLLTKEASSPPPHPQLHSEEEIE-PM 390 400 410 420 430 440 190 200 210 220 230 240 sp|Q1X ERIPFPTPSLSDYSPTLKPSTLAESSD--VAQHPAVSVAGLEGDGSALPLFDLGSDLKHH : : : : : . :: :.: :.. . :.:: . :.:: :: . :: : . sp|Q9U EG-PAP-PVLIQLSP---PNTDADTRELLVSQHTVQLVGGLS------PLSS-PSDTKAE 450 460 470 480 250 260 270 280 290 sp|Q1X ST-----DDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVN : .. . :: . . . .....::.:. . : . . : sp|Q9U SPAEKVPEESVLPLVQKSTLADYSAQKDLEPESDRSAQPLPLKIEELALAKGITEECLKQ 490 500 510 520 530 540 300 310 320 330 340 sp|Q1X FDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC sp|Q9U PSLEQKEGRRASHTLLPSHRLKQSADSSSSRSSSSSSSSSRSRSRSPDSSGSRSHSPLRS 550 560 570 580 590 600 >>sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initiatio (952 aa) s-w opt: 152 Z-score: 134.9 bits: 34.9 E(516081): 5.4 Smith-Waterman score: 152; 30.7% identity (54.5% similar) in 202 aa overlap (48-230:735-930) 20 30 40 50 60 70 sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKK--RKSWGQELPVPKTNLPPRKR :: : ::. :.. .: . .. ::: sp|Q5K QRAARELKQRLGRMLEDYEAVKERIESQMQEELKAAKEEARRKIEEEKAQLREKVIKRKR 710 720 730 740 750 760 80 90 100 110 120 sp|Q1X AKTEDE-KEQRRIERVLRNRA--AAQTSRERKR----LEMEKL--ENEKIQMEQQNQFLL . : . :: :. :. :.. ::: ..:. : :: : :... . : : : : sp|Q5K EEKERKLKEAREAEERKRKEEEEAAQKAEEEARAAAALEAEAAAAEQRRAEREAQRQSDL 770 780 790 800 810 820 130 140 150 160 170 sp|Q1X QRL-SQMEAENNRLSQQLAQLAAEVRGSRANTPMPG----SPATASPTLT---PTLFKQE .:. .:.: :.. : .. :. :: . :. : : :. .: ::::. . :. . .. sp|Q5K ERIRAQQEREEEALRRRQAEKAAATSGGSAYRP-PARAGTTPPTASPAPSSGGPSWLARR 830 840 850 860 870 880 180 190 200 210 220 230 sp|Q1X RDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSD . :. : :: ::. : .: :.. :.:: :.. :: sp|Q5K KAMEAQSAGGAPVAS----SPKPVPSNSAAASAPASNGPESIAG-EAEKPALTGSVWRRG 890 900 910 920 930 240 250 260 270 280 290 sp|Q1X LKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNF sp|Q5K MGARRGMPSTRGGA 940 950 >>sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodopus r (381 aa) s-w opt: 144 Z-score: 134.8 bits: 33.5 E(516081): 5.5 Smith-Waterman score: 144; 23.5% identity (49.7% similar) in 306 aa overlap (2-291:57-353) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL--TVS : .. :...... : :.: .:. sp|Q56 LSYYHSPADSFSSMGSPVNAQDFCADLSVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA 30 40 50 60 70 80 30 40 50 60 70 80 sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE :..: . : : . . : : :. . . . . . . .:.:.:::. sp|Q56 PSQTRAPHPYGVPTPSTGAYSRAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA : ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|Q56 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK . . .: . ..:: :: : : .: ::: : : :: . . . sp|Q56 ACKIPD-DLGFPEDMSVASLDLTGGLPEAATPESEEAFSLPLLNEPEPKTSLESVKSISS 210 220 230 240 250 260 210 220 230 240 250 sp|Q1X PSTLAESSDVAQHPAVSV-AGLEGDGSALPLFDL-GS----DLKH-HSTDDVAAPLSDDD :: : : : .: : . ..: .:: :: : . ::.. .:.. . sp|Q56 MELKAEPFDDFLFSASSRPSGSETTARSVPDMDLSGSFYAADWEPLHSSSLGMGPMATE- 270 280 290 300 310 320 260 270 280 290 300 310 sp|Q1X FNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLP .. : . :. ... ....: : ..:: sp|Q56 LEPLCTPVVTCTPSCTTYTSSFVFTYPE---TDSFPSCAAAHRKGSSSNEPSSDSLSSPT 330 340 350 360 370 320 330 340 sp|Q1X DETTCKTSSVQPGFGASTTRCDGQGIAAGC sp|Q56 LLAL 380 >>sp|Q3KQU3|MA7D1_HUMAN MAP7 domain-containing protein 1 (841 aa) s-w opt: 150 Z-score: 134.0 bits: 34.5 E(516081): 6.1 Smith-Waterman score: 150; 24.6% identity (48.9% similar) in 264 aa overlap (16-258:555-812) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS-LNSADVKTQE :: : .: : . .:.:.. :.: . . sp|Q3K DKSQSKRRASNEKESAAPASPAPSPAPSPTPAPPQKEQPP-AETPTDAAVLTSPPAPAPP 530 540 550 560 570 580 50 60 70 80 90 sp|Q1X VKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK------EQRRIERVLRNRAAAQ : : . . . . .: . : ..: . :.:. ..: :. : .: :. sp|Q3K VTPSKPMAGTTDREEATRLLAEKRRQAREQREREEQERRLQAERDKRMREEQLAREAEAR 590 600 610 620 630 640 100 110 120 130 140 sp|Q1X TSRE---RKRLEMEKLENEKIQMEQQNQFLLQRL-------SQMEAENNRLSQQLA-QLA . :: :.: :.: :: : ::..: ::. :. ::: .:: .. : sp|Q3K AEREAEARRREEQEA--REKAQAEQEEQERLQKQKEEAEARSREEAERQRLEREKHFQQQ 650 660 670 680 690 700 150 160 170 180 190 200 sp|Q1X AEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLE-RIPFPTPSLSDYSPTLKPSTL . : : . : . .. : ::. : . : :. .. :: :. .. sp|Q3K EQERQERRKRLEEIMKRTRKSEVSETKQKQDSKEANANGSSPEPVKAVEARSPGLQKEAV 710 720 730 740 750 760 210 220 230 240 250 260 sp|Q1X AESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAA--PLSDDDFNRLFHGDS . . :.: :. . : .: : . . : :. . .. : .: ...: sp|Q3K QKEEPIPQEPQWSLPSKELPAS---LVNGLQPLPAHQENGFSTNGPSGDKSLSRTPETLL 770 780 790 800 810 270 280 290 300 310 320 sp|Q1X SVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSS sp|Q3K PFAEAEAFLKKAVVQSPQVTEVL 820 830 840 >>sp|Q15642|CIP4_HUMAN Cdc42-interacting protein 4 OS=Ho (601 aa) s-w opt: 147 Z-score: 133.9 bits: 34.0 E(516081): 6.1 Smith-Waterman score: 147; 22.4% identity (50.2% similar) in 263 aa overlap (29-272:294-542) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR-K .:.:.::.. . . .:: . :...: : sp|Q15 DSHVLIELHKSGFARPGDVEFEDFSQPMNRAPSDSSLGTPS----DGRPELRGPGRSRTK 270 280 290 300 310 60 70 80 90 100 sp|Q1X SW--GQEL------------PVPKT--NLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR : :.. :::.. : :: :. . .: . .. : :. : sp|Q15 RWPFGKKNKPRPPPLSPLGGPVPSALPNGPPSPRSGRDPLAILSEISKSVKPRLASFRSL 320 330 340 350 360 370 110 120 130 140 150 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA--EVRGSRANTPM . .: . . .. ::: . : : :.: .. .:.... : : ... .::. sp|Q15 RGSRGTVVTEDFSHLPPEQQRKRLQQ---QLEERSRELQKEVDQREALKKMKDVYEKTPQ 380 390 400 410 420 430 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS :.::. : .. :: . :: .: ... . . . ..:.. . . :: : sp|Q15 MGDPASLEPQIAETLSNIERLKLEVQKYEAWLAEAESRVLSNRGDSLSRHARPPDPPA-S 440 450 460 470 480 490 220 230 240 250 260 270 sp|Q1X VAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF . ...:: ..: :. : . . .: . : : :: : . sp|Q15 APPDSSSNSA------SQDTKESSEEPPSEESQDTPIYTEFDEDFEEEPTSPIGHCVAIY 500 510 520 530 540 280 290 300 310 320 330 sp|Q1X DVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQ sp|Q15 HFEGSSEGTISMAEGEDLSLMEEDKGDGWTRVRRKEGGEGYVPTSYLRVTLN 550 560 570 580 590 600 >>sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive element-bi (428 aa) s-w opt: 144 Z-score: 133.9 bits: 33.5 E(516081): 6.2 Smith-Waterman score: 144; 25.8% identity (55.1% similar) in 178 aa overlap (25-199:161-322) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAK .:. .: .. : . . . :..: sp|Q1L LPDQSGGTQCASETPQAQQTTGFPLTVKDLLLSGTPEPAAKVSQQSYQELILTEDEKRLL 140 150 160 170 180 190 60 70 80 90 100 110 sp|Q1X KRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE .. :. :: ...: : .:. ..:.: .::. .:: ::..:. .. ::.. sp|Q1L AKE--GMTLP---NQFPLTKY----EERILKKIRRKIRNKQSAQESRKKKKEYIDGLESR 200 210 220 230 240 120 130 140 150 160 170 sp|Q1X KIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTL .:. : ... :.: : : .:: .: : : .. .: :. .. . :. :: sp|Q1L MAACSAHNHELQRKVFQLEKCNISLMEQLRRLQALVMNG-SNKPVQAGTCVLVLLLSFTL 250 260 270 280 290 300 180 190 200 210 220 230 sp|Q1X FKQERDELPLERIPFPTPSLS---DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP . :: . :: ..: :.:: sp|Q1L IL-----LPNLK-PFTDTKVSQHGDFSPMRVQSRSLHNLQSSRVLRNLDHPYSMTENAKI 310 320 330 340 350 >>sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS=Xeno (313 aa) s-w opt: 141 Z-score: 133.6 bits: 33.0 E(516081): 6.4 Smith-Waterman score: 141; 26.8% identity (60.6% similar) in 142 aa overlap (29-163:171-309) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS ::. .: .: ... :. . .. .. : : sp|Q6D HQYQGVHHEEMGLPHHHPHHHQHQHHQTSPSPSGSSSSSQQLHHQQ-QHSSSSAVEDRFS 150 160 170 180 190 60 70 80 90 100 110 sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK : . . .: . :. :.:. .:.: :.:.::. ::. : .. . ..::.:: sp|Q6D DDQLVSMTVRELNRHLRGFTKDDVIRLKQKR--RTLKNRGYAQSCRYKRVQQKHNLEGEK 200 210 220 230 240 250 120 130 140 150 160 170 sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA----AEVRGSRANTPMPGSPATASPTLT :. :: . : :..:.. : . . . .:: .. : . ... :.:: sp|Q6D TQLVQQVEQLKQEVSRLARERDAYKIKCEKLANNNSSNFREAGSTSDNPSSPEFFM 260 270 280 290 300 310 180 190 200 210 220 230 sp|Q1X PTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP >>sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gallus (323 aa) s-w opt: 141 Z-score: 133.4 bits: 33.0 E(516081): 6.6 Smith-Waterman score: 141; 24.4% identity (54.8% similar) in 217 aa overlap (68-271:108-311) 40 50 60 70 80 90 sp|Q1X ADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK--TEDEKEQRRIERVLRNRA :.. :.: . . .:.:.:::.: ::. sp|P18 SHPYSHPLPPLSSVAGHTALQRPGVIKTIGTTVGRRRRDEQLSPEEEEKRRIRRE-RNKL 80 90 100 110 120 130 100 110 120 130 140 150 sp|Q1X AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS-- :: :.:.: :::. : .:.... : ....... :...: .:. . . : sp|P18 AAAKCRNRRRELTEKLQAETEVLEEEKSVLQKEIAELQKEKEKLEFMLVAHSPVCKISPE 140 150 160 170 180 190 160 170 180 190 200 sp|Q1X -RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSL---SDYSPTLKPSTLAES : . : . .. . . .. ::: :.:. .:. :: . ..:: ..: . sp|P18 ERRSPPTSSLQSVRTGASGAVVVKQE----PVEE-EIPSSSLVLDKAQRSVIKPISIAGG 200 210 220 230 240 250 210 220 230 240 250 260 sp|Q1X --SDVAQHPAVSVAGLEGDGSALPLFDLGSD---LKHHSTDDVAAPLSDDDFNRLFHGDS .. : . . : .. : . ::. . . .. : .::: .. : : sp|P18 YYGEEALNTPIVV-------TSTPAITPGSSNLVFTYPNVLDQESPLSPSESCSKAHRRS 260 270 280 290 300 270 280 290 300 310 320 sp|Q1X SVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSS : :.: sp|P18 SSSGDQSSDSLNSPTLLAL 310 320 >>sp|Q3UHR0|BAHC1_MOUSE BAH and coiled-coil domain-conta (2643 aa) s-w opt: 159 Z-score: 133.2 bits: 36.0 E(516081): 6.7 Smith-Waterman score: 159; 23.0% identity (49.5% similar) in 382 aa overlap (8-338:860-1230) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTV--SPADTSL .: :: :: :... .: .: : sp|Q3U SLWMGGHSYGLGHPALHQNLPPGFPASVPGSMPSVFPLPQDAATQLVILPSEPTPHTTPH 830 840 850 860 870 880 40 50 60 70 80 90 sp|Q1X NSADVKTQE-VKPE---EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL . :.: : . : . ::.. . :: :: .:.. ..: ... sp|Q3U TLAEVMDQASLWPPMYGARGPASHMQHPGQ--------LPVYSRSQLLRQQELYALQQQQ 890 900 910 920 930 940 100 110 120 130 140 sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL-LQRLSQMEAENNRLSQQLAQLAAE- ... : ...... .... .... :... .: : :::..:.. . . ..: . : : sp|Q3U QQQQQQQQQQQQQQQQQQQQQQQQQQQHRATQALELQRVAQFQRKPEDRHMELEEAAQEK 950 960 970 980 990 1000 150 160 170 180 190 sp|Q1X ----VRGSRANTPMP-GSPATASPTL--------TPTLFKQERDELPLER--IPFPTPSL .. : ::: :.:..:. : .::: : : : : sp|Q3U TPKSTHKPVALTPMAKGTPSSATAGLVKLSPCCQSPTLKTPASCPTPPPRPSAPCTLPIC 1010 1020 1030 1040 1050 1060 200 210 220 230 240 sp|Q1X SDYSP---TLKPSTLAESSDVAQHPAVSVAGLEGDGS-----------ALPLFDLGSDLK :: . :::. ..:. .:. ..... :: : . .:: .:::. sp|Q3U PTGSPGPGSKVPSTM-DKSEEGQRAGTNLTTLEPDLTPGLNPTAGLDLSLPSDVHSSDLQ 1070 1080 1090 1100 1110 1120 250 260 270 280 290 sp|Q1X HHSTDDVAAPLSDDDFNRLF-HGDSSVEPDSSVFEDGL---AFDVLEGGDLSAFPFDSMV .: ....: . . : : :. .. : :: : :. . ::. .: sp|Q3U DPKTMQTTTPGTRPEPPRTFLPGEPPPCSPRNLEEPGLLSRARDATQ--DLANLPPPVEG 1130 1140 1150 1160 1170 300 310 320 330 340 sp|Q1X NFDS----EPVTLEGIE------MAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC .. .: :::.. . .: :.: .:.:.: :. : .: sp|Q3U GLPPGKAEDPSPLEGLQALKFGDLLEGGGTEATGQTNSTQGGMQNERTVDQGAPQPPLGA 1180 1190 1200 1210 1220 1230 sp|Q3U TPQALEQEAGSPAALDKREGPQKVPDVAQLQEEETQLEESGGDSEVDWGTPNHSHPPKAL 1240 1250 1260 1270 1280 1290 >>sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus mus (295 aa) s-w opt: 140 Z-score: 133.2 bits: 32.9 E(516081): 6.8 Smith-Waterman score: 140; 25.8% identity (54.3% similar) in 151 aa overlap (2-148:142-290) 10 20 sp|Q1X MSCDMEKTMSSVDSLPA---TPASEVPVLTV .: :.. . . ::: ::. : sp|Q8B GLQPASSTAPSVMDLSSRATAPLHPGIPSPNC-MQSPIRPGQLLPANRNTPSPIDPDTIQ 120 130 140 150 160 170 30 40 50 60 70 80 sp|Q1X SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQEL-PVPKTNLPPRKRAKTEDEKEQRRI :. . ::. . . .: .::: .:: : : . :: .: :... sp|Q8B VPVGYEPDPADLALSSIPGQEMFDPRKRKFSEEELKPQPMIK-KARKVFIPDDLKDDKYW 180 190 200 210 220 90 100 110 120 130 140 sp|Q1X ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA : .: ::. ::. .::. ... . .:..:. : :...... : .. .. ::. sp|Q8B ARRRKNNMAAKRSRDARRLKENQIAIRASFLEKENSALRQEVADLRKELGKCKNILAKYE 230 240 250 260 270 280 150 160 170 180 190 200 sp|Q1X AEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLA : sp|Q8B ARHGPL 290 >>sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Homo sa (295 aa) s-w opt: 140 Z-score: 133.2 bits: 32.9 E(516081): 6.8 Smith-Waterman score: 140; 25.8% identity (54.3% similar) in 151 aa overlap (2-148:142-290) 10 20 sp|Q1X MSCDMEKTMSSVDSLPA---TPASEVPVLTV .: :.. . . ::: ::. : sp|Q16 GLQPASSAAPSVMDLSSRASAPLHPGIPSPNC-MQSPIRPGQLLPANRNTPSPIDPDTIQ 120 130 140 150 160 170 30 40 50 60 70 80 sp|Q1X SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQEL-PVPKTNLPPRKRAKTEDEKEQRRI :. . ::. . . .: .::: .:: : : . :: .: :... sp|Q16 VPVGYEPDPADLALSSIPGQEMFDPRKRKFSEEELKPQPMIK-KARKVFIPDDLKDDKYW 180 190 200 210 220 90 100 110 120 130 140 sp|Q1X ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA : .: ::. ::. .::. ... . .:..:. : :...... : .. .. ::. sp|Q16 ARRRKNNMAAKRSRDARRLKENQIAIRASFLEKENSALRQEVADLRKELGKCKNILAKYE 230 240 250 260 270 280 150 160 170 180 190 200 sp|Q1X AEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLA : sp|Q16 ARHGPL 290 >>sp|Q9NZ53|PDXL2_HUMAN Podocalyxin-like protein 2 OS=Ho (605 aa) s-w opt: 146 Z-score: 133.0 bits: 33.9 E(516081): 6.9 Smith-Waterman score: 146; 25.3% identity (51.9% similar) in 285 aa overlap (32-294:107-375) 10 20 30 40 50 sp|Q1X SCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE--EKKPAKKRKSW :.::. . . .. : :. :: . . : sp|Q9N PGSGFPSEENEESRILQPPQYFWEEEEELNDSSLDLGPT-ADYVFPDLTEKAGSIEDTSQ 80 90 100 110 120 130 60 70 80 90 100 sp|Q1X GQELP-----VPKTNL-------PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE .:::: .:: :: :::.. . :.:.:.:. :.: . : .:...: sp|Q9N AQELPNLPSPLPKMNLVEPPWHMPPREEEEEEEEEEEREKEEVEK-----QEEEEEEELL 140 150 160 170 180 190 110 120 130 140 150 160 sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS . .:. . : .: : :: . .. .. .. :. : .... : .:. sp|Q9N PVNGSQEEAK-PQVRDFSLTSSSQTPGATKSRHEDSGDQASS--GVEVESSM--GPSLLL 200 210 220 230 240 170 180 190 200 210 220 sp|Q1X PTLTPTLFKQ-ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGD :..::: ..: : :. . :. :.:. : :....: . . sp|Q9N PSVTPTTVTPGDQDSTSQEAEATVLPAAGLGVEFEAPQ---EASEEATAGAAGLSGQHEE 250 260 270 280 290 300 230 240 250 260 270 280 sp|Q1X GSALPLFDLG---SDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVF-EDGLAFDVL ::: : : .: . : ... : . . : :: . :.:... .. : ..: sp|Q9N VPALPSFPQTTAPSGAEHPDEDPLGSRTSAS--SPLAPGDMELTPSSATLGQEDLNQQLL 310 320 330 340 350 360 290 300 310 320 330 sp|Q1X EGGDLSA---FPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQ :: : .:.:: sp|Q9N EGQAAEAQSRIPWDSTQVICKDWSNLAGKNYIILNMTENIDCEVFRQHRGPQLLALVEEV 370 380 390 400 410 420 >>sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BAT2 O (2158 aa) s-w opt: 157 Z-score: 132.9 bits: 35.7 E(516081): 6.9 Smith-Waterman score: 157; 27.2% identity (48.4% similar) in 217 aa overlap (18-222:378-571) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSL--NSADVKTQEV .:.::.: : :. :. .:. . sp|Q7T RDSDEEGAEGHKDSQSAAAEEPETDGKKGTSPGSELP-----PPKTAWTENARPSETEPA 350 360 370 380 390 400 50 60 70 80 90 sp|Q1X KPEEKKPAKKRK-----SWGQELPVPKTNLPPRKRAKTEDEKE---QRRIERVLRNRAAA : : : . .:: : . :: : ::: : ::: . . :. sp|Q7T PPTPKPPPPPPHRGPVGNWGPPGDYPDRGGPPCKPPAPEDEDEAWRQRRKQSSSEISLAV 410 420 430 440 450 460 100 110 120 130 140 150 sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEVRGSRAN . .:.:.. : .....:. .. :.::.. . : ..::. :. :: sp|Q7T ERARRRREEEERRMQEERRAACAEK---LKRLDEKFGAPDKRLK---AEPAA-------- 470 480 490 500 160 170 180 190 200 210 sp|Q1X TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD-VAQH : : .:: .:.: :.. :. : : ::: :. : . : : :: sp|Q7T -P-PVTPA--APALPPVVPKEIPAAPALPPTPTPTPEKEPEEPAQAPPVQAAPSPGVAPV 510 520 530 540 550 560 220 230 240 250 260 270 sp|Q1X PAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFED :.. .: sp|Q7T PTLVSGGGCTANSNSSGSFEASPVEPQLPSKEGPEPPEEVPPPTTPPAPKMEPKGDGVGS 570 580 590 600 610 620 >>sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcripti (699 aa) s-w opt: 147 Z-score: 132.7 bits: 34.0 E(516081): 7.1 Smith-Waterman score: 147; 23.6% identity (50.8% similar) in 254 aa overlap (16-241:259-500) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS--LNSADVKTQ :.. : . :. .:: . : .. ...: sp|O35 SSGKAPATRKPPLQPKPVVLTTVPVPPRAGPTSAAVLLQPLVQQPAVSPVVLIQGAIRVQ 230 240 250 260 270 280 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER : : .::: :.: .. ::. : : .: .:...:: .: ::.. sp|O35 PEGPAPAAPRPERKSI-VPAPMPGNSCPPE-----VDAKLLKRQQRMIKNRESACQSRRK 290 300 310 320 330 340 110 120 130 140 150 sp|Q1X KRLEMEKLEN-------EKIQMEQQNQFLLQRLSQMEAENNRL-----SQQLAQLAAEVR :. .. :: .. :....: : .:: . :::. : ..... . . . sp|O35 KKEYLQGLEARLQAVLADNQQLRRENAALRRRLEALLAENSGLKLGSGNRKVVCIMVFLL 350 360 370 380 390 400 160 170 180 190 200 sp|Q1X GSRANT-PMPGSPATASPTLTPTLFKQE-RDELPLERIPFPTPSLSDYSPTLKPSTLAES : :. : .: ..: . ..: : . : . : :. . ..: : . sp|O35 FIAFNFGPVSISEPPPAP-MSPRMSREEPRPQRHLLGFSEPGPAHG-----MEPLREAAQ 410 420 430 440 450 210 220 230 240 250 sp|Q1X SDVAQHPAVS-------VAGLEGDGSALPLFDL-----GSDLKHHSTDDVAAPLSDDDFN : :.:. . .... : .. : : :: .:: .: sp|O35 SPGEQQPSSAGRPSFRNLTAFPGGAKELLLRDLDQLFLSSDCRHFNRTESLRLADELSGW 460 470 480 490 500 510 260 270 280 290 300 310 sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE sp|O35 VQRHQRGRRKIPHRAQERQKSQLRKKSPPVKPVPTQPPGPPERDPVGQLQLYRHPGRSQP 520 530 540 550 560 570 >>sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcripti (703 aa) s-w opt: 147 Z-score: 132.7 bits: 34.0 E(516081): 7.2 Smith-Waterman score: 147; 24.8% identity (51.2% similar) in 254 aa overlap (17-241:260-503) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLT--VSPADTS---LNSADVK :.: : . .: :.: .: : .. .. sp|Q99 DGSSGKALPTRKPPLQPKPVVLTTVPMPSRAVPPSTTVLLQSLVQPPPVSPVVLIQGAIR 230 240 250 260 270 280 50 60 70 80 90 100 sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR .: : . : .::: :.: .. ::. : : .: .:...:: .: :: sp|Q99 VQPEGPAPSLPRPERKSI-VPAPMPGNSCPPEV-----DAKLLKRQQRMIKNRESACQSR 290 300 310 320 330 340 110 120 130 140 sp|Q1X ERKRLEMEKLEN-------EKIQMEQQNQFLLQRLSQMEAENNRL-----SQQLAQLAAE ..:. .. :: .. :....: : .:: . :::..: ..... . . sp|Q99 RKKKEYLQGLEARLQAVLADNQQLRRENAALRRRLEALLAENSELKLGSGNRKVVCIMVF 350 360 370 380 390 400 150 160 170 180 190 sp|Q1X VRGSRANT-PMPGSPATASPTLTPTLFK---QERDEL-------PLERI-PFPTPSLSDY . : :. : ..: ..: . : : : .: :.. . :. : . sp|Q99 LLFIAFNFGPVSISEPPSAP-ISPRMNKGEPQPRRHLLGFSEQEPVQGVEPLQGSSQGPK 410 420 430 440 450 460 200 210 220 230 240 250 sp|Q1X SPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFN : .:. :... :. . : : . :: :.:: .: sp|Q99 EPQPSPTDQPSFSNLTAFPGGAKELLLRDLDQ--LF-LSSDCRHFNRTESLRLADELSGW 470 480 490 500 510 260 270 280 290 300 310 sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE sp|Q99 VQRHQRGRRKIPQRAQERQKSQPRKKSPPVKAVPIQPPGPPERDSVGQLQLYRHPDRSQP 520 530 540 550 560 570 >>sp|Q3UIW5|RNF10_MOUSE RING finger protein 10 OS=Mus mu (804 aa) s-w opt: 148 Z-score: 132.5 bits: 34.2 E(516081): 7.3 Smith-Waterman score: 148; 24.4% identity (55.0% similar) in 209 aa overlap (80-285:588-784) 50 60 70 80 90 100 sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME :. :.:. .: ...: . ::: :.::: sp|Q3U SHLPLTCEFSICELALQPPVVSKETLEMFSDDIEKRKRQR--QKKAREERRRER-RIEME 560 570 580 590 600 610 110 120 130 140 150 160 sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRL---SQQLAQLAAEVRGSRANTPMPGSPATA ::.. . .. :. :.:. : :. .. :. ..: .:. . .:. ::.. sp|Q3U --ENKRQGRYPEVHIPLENLQQFPAFNSYTCPSDSALGPTSTEGHGALSLSPLSRSPGSH 620 630 640 650 660 670 170 180 190 200 210 220 sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGD . : : . : : . :: : :: :. . . . . . ..: . : sp|Q3U ADFLLTPLSPTASQGSP----SFCVGSLEDDSPFLSFAQMLRVGKAKADGWPKTAPKKDD 680 690 700 710 720 230 240 250 260 270 280 sp|Q1X GSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGD .: .: . :: . ..: : .: ...:.. ... . .. :. . : :. : .:: sp|Q3U NSLVPPAPVDSDGESDNSDRVPVPSFQNSFSQAIEA-AFMKLDTPATSDPLSED--RGGK 730 740 750 760 770 780 290 300 310 320 330 340 sp|Q1X LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC sp|Q3U KRKRQKQKLLFSTSVVHTK 790 800 >>sp|Q6C908|PAN1_YARLI Actin cytoskeleton-regulatory com (1634 aa) s-w opt: 154 Z-score: 132.4 bits: 35.2 E(516081): 7.5 Smith-Waterman score: 154; 26.2% identity (50.6% similar) in 320 aa overlap (16-311:1113-1403) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVS-PADTSLNSADVKTQE ::: . .:.. :: ::: : : .: sp|Q6C SPAVASPAATPAVSSPAPVSRGVPAPAAATPATDPATTPAVPVSAPADDS----DSDDEE 1090 1100 1110 1120 1130 50 60 70 80 90 100 sp|Q1X VKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERK :: :.::. :: : . .:. :.::.:.. ::. : :: sp|Q6C Y---EKLMAQKRE---QEERFKKQQEADKKK---EEEKKQKK---------AAKEERMRK 1140 1150 1160 1170 1180 110 120 130 140 150 160 sp|Q1X -RLEMEKLEN-EKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG-SRANTPMPG : ::: : :: :.:. .. :::.. . :: .. .. . : . : . . sp|Q6C LREEMEANEAREKAWKESQS----KEAEADEAEGDVGAAALAAFSNKATAPSTTPTAVAA 1190 1200 1210 1220 1230 170 180 190 200 210 sp|Q1X SP--ATASPTLTPTLFKQERDELPLERI--------PFPTPSLSDYSPTLKPSTLAESSD .: ::..:. . :. :..:. :. . : .: :.:.: .. sp|Q6C TPPVATSTPSPAAPTVPAADDNNPFHRLNNGGDAAAAAPAAGGEDNNPFLRPGT--NQPI 1240 1250 1260 1270 1280 1290 220 230 240 250 260 sp|Q1X VAQHPA-VSVAGLEGDGSALP--LFDLGSDLKHHSTDDVAAPLS-DDDFNRLFHGDSSVE .: :: : : :. . : . . .. . ..:: .: :.: .. .: ...: sp|Q6C AAPSPASFSEAPKEAPKPVDPVKISNQRANQRAAKNDDDDWGMSSDEDDDQDYHRGNAAE 1300 1310 1320 1330 1340 1350 270 280 290 300 310 320 sp|Q1X PDSSVFEDGLAFDVLE----GGDLSAFPFDSMVNFD--SEPVTLEGIEMAHGLPDETTCK :..:. .: . . :. ..: : : . ::. ..:.: sp|Q6C LASQLFRT-MAPPIQRQPTGGAPITATPTGSAPAAPPAAPPVAPAAVEVAVAASEATPGP 1360 1370 1380 1390 1400 1410 330 340 sp|Q1X TSSVQPGFGASTTRCDGQGIAAGC sp|Q6C ESAPPAPPMPEINIPPATEAPSAPAATEAPPAPPSAPTTIETTHLPPPVDTHNDMSSSEF 1420 1430 1440 1450 1460 1470 >>sp|Q9W705|NCOA2_XENLA Nuclear receptor coactivator 2 O (1516 aa) s-w opt: 153 Z-score: 132.1 bits: 35.0 E(516081): 7.8 Smith-Waterman score: 153; 22.4% identity (54.8% similar) in 290 aa overlap (61-333:1188-1460) 40 50 60 70 80 90 sp|Q1X ADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERV :.: : .:. . : : : . sp|Q9W RPGLRPTGMVQNQPNQLRLQLQHRLQAQNRQQLMNPINNVSNMNLAMRPGVPGQLREQGP 1160 1170 1180 1190 1200 1210 100 110 120 130 140 sp|Q1X LRNRAAAQTSRE--RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA . . :: .:: ..:....:.... :..::.: :. .:.. .... .:: . : sp|Q9W INAQMLAQRQREILSQHLRQKQLQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQHRAM 1220 1230 1240 1250 1260 1270 150 160 170 180 190 200 sp|Q1X EVRGSRANTP--MPGSPATASPTLTPTLFKQERDELPLER-----IPFPTPSLSDYSPTL .:.. : : :: . . .: . . ...:. :: : : : .:: . sp|Q9W MMRSQGLAMPPNMVGSGGIPASINSPRIPQGSTQQFPFPPNYGTGIPSPPPFTSPFSP-V 1280 1290 1300 1310 1320 1330 210 220 230 240 250 sp|Q1X KPS----TLAESSDVAQHPAVSVAGLEGD--GSALPLFDLGSDLKHHSTDDVAAPLSDDD :: .:..:: ... .. :. :. :. :. .. ...:.. . . . .:... sp|Q9W PPSPGSQSLSHSSLHGSQMNLANQGIMGSMGGQYGPV--MNPQMQHNAFQFANSGMSQQS 1340 1350 1360 1370 1380 1390 260 270 280 290 300 310 sp|Q1X FNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVN--FDSEPVTLEGIEMAHG . : : .. :.: .. . : :.. .:..: ..:: :.: :.: sp|Q9W -DPGFTGATT--PQSPIMSPRM------GHIQSSMMQQSQANPAYQSE---LNG--WAQG 1400 1410 1420 1430 1440 320 330 340 sp|Q1X LPDETTCKTSSVQPGFGASTTRCDGQGIAAGC : .. ... : :: .. sp|Q9W NPAGNSMFSQQSPPHFGQQSGTSMYNSNNMNISVSMAANGNGMNNMNQMTGQINMTSVTS 1450 1460 1470 1480 1490 1500 >>sp|O60841|IF2P_HUMAN Eukaryotic translation initiation (1220 aa) s-w opt: 151 Z-score: 132.0 bits: 34.7 E(516081): 7.9 Smith-Waterman score: 151; 24.4% identity (58.3% similar) in 180 aa overlap (7-183:282-455) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN :. .::. . :::: . : . :. . : sp|O60 KLKEKEELETGKKDQSKQKESQRKFEEETVKSKVTVDT-GVIPASEEKAETPTAAEDD-N 260 270 280 290 300 40 50 60 70 80 90 sp|Q1X SADVKTQEVKPE--EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE-RVLRN .: : .. : . ::. .:.:. : . :. . : :.:...:. : :. : sp|O60 EGDKKKKDKKKKKGEKEEKEKEKKKGPSKATVKAMQEALAKLKEEEERQKREEEERIKRL 310 320 330 340 350 360 100 110 120 130 140 150 sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS . .:..:::.:: : .: : :.. . :.. ... ....: .. :. . .. . sp|O60 EELEAKRKEEERLEQEKRERKK-QKEKERKERLKKEGKLLTKSQREARARAEATLKLLQA 370 380 390 400 410 420 160 170 180 190 200 210 sp|Q1X RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA .. . .:.. . : : ..: ..: sp|O60 QG-VEVPSKDSL--PKKRPIYEDKKRKKIPQQLESKEVSESMELCAAVEVMEQGVPEKEE 430 440 450 460 470 480 >>sp|P15205|MAP1B_RAT Microtubule-associated protein 1B (2459 aa) s-w opt: 157 Z-score: 131.9 bits: 35.7 E(516081): 7.9 Smith-Waterman score: 157; 21.8% identity (54.5% similar) in 330 aa overlap (12-323:595-900) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVK :.: :.. .::: : . : .:.: sp|P15 PEATKASQVEKTPKVESKEKVIVKKDKPGKVESKPSVTEKEVP----SKEEQSPVKAEV- 570 580 590 600 610 50 60 70 80 90 sp|Q1X TQEVKPEEKKPAKKRKSWGQEL---PVPKTNLPPRKR-AKTEDEKEQRRIERVLRNRAAA .... : : . : : .:. : : . :.:. :: ::. .. :. ...: sp|P15 AEKAATESKPKVTKDKVVKKEIKTKPEEKKEEKPKKEVAKKEDKTPLKKDEKPKKEEAKK 620 630 640 650 660 670 100 110 120 130 140 150 sp|Q1X QTSRERKRLEMEKLENEKIQMEQ-----QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG . ..: :. : ..:..: .. : ... .. .... :... .... ... ... sp|P15 EIKKEIKKEEKKELKKE-VKKETPLKDAKKEVKKDEKKEVKKEEKEPKKEIKKISKDIKK 680 690 700 710 720 730 160 170 180 190 200 sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPT--LKP---STLA : ::. . :. : : . :.:. : .. :. . .:.: . . .: .: : sp|P15 S---TPLSDTKKPAA--LKPKVAKKEE---PTKKEPIAAGKLKDKGKVKVIKKEGKTTEA 740 750 760 770 780 790 210 220 230 240 250 260 sp|Q1X ESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGD---- .. :. ....::. ..: : : : .. : .:.. ::..: . sp|P15 AATAVGTAAVAAAAGVAASGPAKELEAERSLMS--SPEDLTK-----DFEELKAEEIDVA 800 810 820 830 840 270 280 290 300 310 320 sp|Q1X SSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTS ....:. ..:: . : :. .. .. :. : ::: ..: : :. . sp|P15 KDIKPQLELIEDEEKLKETEPGEAYVIQKETEVSKGSAESPDEGITTTEG---EGECEQT 850 860 870 880 890 900 330 340 sp|Q1X SVQPGFGASTTRCDGQGIAAGC sp|P15 PEELEPVEKQGVDDIEKFEDEGAGFEESSEAGDYEEKAETEEAEEPEEDGEDNVSGSASK 910 920 930 940 950 960 >>sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5-like (454 aa) s-w opt: 142 Z-score: 131.6 bits: 33.2 E(516081): 8.3 Smith-Waterman score: 142; 31.7% identity (55.9% similar) in 145 aa overlap (14-145:291-435) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEV-P-VLTVS--PADTSLNSA- : ::: .:: : .: . : ...: .: sp|Q9M QPQQLIQTQERPFPKQTTIAFSNTVDVVNRSQPATQCQEVKPSILGIHNHPMNNNLLQAV 270 280 290 300 310 320 40 50 60 70 80 90 sp|Q1X DVKT----QEVKP-EEKKPAKKRKSW--GQELPVPKTNLPPRKRAKTEDEKEQRRIERVL : :: :.: . .: :: .. ::: :: . . .. .:: .:.. sp|Q9M DFKTGVTVAAVSPGSQMSPDLTPKSALDASLSPVPYMFGRVRKTGAVLEKVIERRQKRMI 330 340 350 360 370 380 100 110 120 130 140 150 sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEV .:: .: :: ::. .:: : :... :. : .. . :: ..:.: . : : sp|Q9M KNRESAARSRARKQAYTMELEAEIAQLKELNEELQKKQVEIMEKQKNQLLEPLRQPWGMG 390 400 410 420 430 440 160 170 180 190 200 210 sp|Q1X RGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS sp|Q9M CKRQCLRRTLTGPW 450 >>sp|Q69022|EBNA2_EBVA8 Epstein-Barr nuclear antigen 2 O (454 aa) s-w opt: 142 Z-score: 131.6 bits: 33.2 E(516081): 8.3 Smith-Waterman score: 142; 24.4% identity (47.3% similar) in 205 aa overlap (10-209:236-424) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPAS-EVPVLTVSPADTSLNSA :. .:: :.: .: .:.:: .: sp|Q69 PPTAPQRLTLGHQLSLPPHPPPHQSTPHCSSDSTGLPPPPTSYSIPSMTLSPEPLPPPAA 210 220 230 240 250 260 40 50 60 70 80 90 sp|Q1X DVKTQE--VKPEEKKPAKKRKSWGQEL--PVPKTNLPPRKRAKTEDEKEQRRIERVLRNR .. . .. : : . :.: :. :: . . :. . : : :.: sp|Q69 PAHPLPGVIYDQQALPPTPGPPWWPPVRDPTPTTQTPPTNTKQGPDQGQGRG--R-WRGR 270 280 290 300 310 320 100 110 120 130 140 150 sp|Q1X AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR . : . : .:.:: . . . .. . .:: . . : : . . . : sp|Q69 G-----RSKGRGRMHKLPEPRRPGPDTSSPSMPQLSPVVS----LHQGQGPENSPTPGPS 330 340 350 360 370 160 170 180 190 200 210 sp|Q1X ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQ . :. .:.: ..: . : :. :: :: . : :::.:. : :: sp|Q69 TAGPVCRVTPSATPDISPIHEPESSDS---EEPPFLFPS-DWYPPTLEPAELDESWEGIF 380 390 400 410 420 220 230 240 250 260 270 sp|Q1X HPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE sp|Q69 ETTESHSSDEENVGGPSKRPRTSTQ 430 440 450 >>sp|Q9ES64|USH1C_MOUSE Harmonin OS=Mus musculus GN=Ush1 (910 aa) s-w opt: 148 Z-score: 131.5 bits: 34.2 E(516081): 8.3 Smith-Waterman score: 148; 23.1% identity (48.9% similar) in 333 aa overlap (15-333:386-687) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEV-PVLTVSPADTS-LNSADVKT :: : ..:: :: .: . . . : : sp|Q9E YRKEMEQISEEEEKFKKQWEEDWGSKEQLILPKTITAEVHPVPLRKPKSFGWFYRYDGKF 360 370 380 390 400 410 50 60 70 80 90 100 sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE .. . :. : . . :.: : .: ... : :. .. ... :: : ..: : sp|Q9E PTIRKKAKEKKKAKYDSLQDLRKNKKELEFEQKLYKEKEEMLEKEKQLKINRLAQEVS-E 420 430 440 450 460 470 110 120 130 140 150 160 sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS .: ..: :.:: .:. ..:: : .:: .:... :. .. : : sp|Q9E TEREDLE--ESEK------TQYWVERLCQ-----TRL-EQISSAENEIPEMTTGPPPP-- 480 490 500 510 170 180 190 200 210 sp|Q1X PATASPTLTPT--------LFKQERDELPLERIPFP--TPSLSDYSPTLKPSTLAESSDV : ..:: : : . :..::. . .: ::: : .: .. : : sp|Q9E PPSVSPLAPPLRRFAGGIHLHTTDLDDIPLDMFYYPPKTPSALPVMP--HPPSVNSPSKV 520 530 540 550 560 570 220 230 240 250 260 270 sp|Q1X AQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV :.. .: ...: : ... . : . .. . . ..: :. sp|Q9E PAPPVLPSSGHVSSSS--------SPWVQRTPPPIPIPPPPSIPTQDL---TPTRPLPSA 580 590 600 610 620 280 290 300 310 320 330 sp|Q1X FEDGLAFDVLEGGDLSAFPFDSM-VNFDS-EPVTLEGIEMAHGLPDETTCKTSSVQPGFG .:..:. .. :: . : :. .: : .: . : . .: : . . : : sp|Q9E LEEALGNHPFRTGD-PGHPADDWEANTHSGKPSSSPTTERSFPPAPKTFCPSPQPPRGPG 630 640 650 660 670 680 340 sp|Q1X ASTTRCDGQGIAAGC .:: sp|Q9E VSTISKPVMVHQEHNFVYRPAVKSEVLPQEMLKRMVVYQTAFRQDFRKYEEGFDPYSMFS 690 700 710 720 730 740 >>sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS=Xeno (289 aa) s-w opt: 138 Z-score: 131.5 bits: 32.5 E(516081): 8.4 Smith-Waterman score: 138; 30.6% identity (68.2% similar) in 85 aa overlap (83-167:203-284) 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE .:.: :.:.::. ::. : .. . . :: sp|Q4U RFSDEQLVSMSVRELNRQLRGFSKEEVIRLKQKR--RTLKNRGYAQSCRYKRVQQRHILE 180 190 200 210 220 230 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP .:: :...: . : :..:.. : . ... .::.. .: . :. :.:. :. sp|Q4U TEKCQLQSQVEQLKQEVSRLAKERDLYKDKYEKLASRSFTTRESPPQ-GNPGKANADFFM 240 250 260 270 280 180 190 200 210 220 230 sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL >>sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein OS=Dr (466 aa) s-w opt: 142 Z-score: 131.3 bits: 33.2 E(516081): 8.5 Smith-Waterman score: 142; 25.5% identity (57.1% similar) in 184 aa overlap (8-181:14-192) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVS----PADTSLNSADVKTQEVKPEEK ... : .:: : ..:: : :. :: . .::..:::::: sp|P29 MKPVALILVFLAISQARVLNLPKE-AIDIPVAIVEDKEPPVALSLVKEEVKAEEVKPEEV 10 20 30 40 50 60 70 80 90 100 sp|Q1X KP-AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME :: :...:. . : : :. : :.. :.. :. . .:. . ... sp|P29 KPIAQEEKAKDLKEEVKPEIKPEIKEQPKPDIKDE--IKEDLKADIKEEL-KEKIEEQIN 60 70 80 90 100 110 110 120 130 140 150 160 sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS-- .: : : .: ... : . . .: ... . .. . :.:.. :.. . . :: . sp|P29 ELPNAK-PLELKEKSLEAEEKPQEIKEEVQQPEIKKEATEIKEEPAQNILKSLPAEETVV 120 130 140 150 160 170 170 180 190 200 210 220 sp|Q1X -PT--LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLE :. :.:. .::..: sp|P29 VPAEELSPNPVEQEQSENQDAAHPQVRQATQATPTQQSTTQGNFVQQLIQNSPIGQFLNQ 180 190 200 210 220 230 >>sp|Q54Y73|BZPD_DICDI Probable basic-leucine zipper tra (834 aa) s-w opt: 147 Z-score: 131.3 bits: 34.0 E(516081): 8.6 Smith-Waterman score: 147; 26.9% identity (58.3% similar) in 156 aa overlap (10-157:315-458) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSAD :::. .: . . . .: .. ::. .. . sp|Q54 TSPSSPSTSNMFLTPMVTTTTTSETSSSSDSSVNIIPNNTNTITNIL-IKEEDTNNGNNN 290 300 310 320 330 340 40 50 60 70 80 90 sp|Q1X VKTQEVKPEEK-----KPAKKR---KSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL :... . . .: .. : :.: :: .. :: . . :::.. .. .:.. sp|Q54 KKSKKRTIDSRVQNIVHPLTREELLKIAGKE-PVQVVD-PPTH--NQEDERNVKKQRRLI 350 360 370 380 390 100 110 120 130 140 150 sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR .:: .:: :: ::.. .: ::. .. :.: :... : :. . ::::. sp|Q54 KNRESAQLSRMRKKIYIEDLEKTISDLTQDN-------SSLKEEVLYLQGLVKQLAAQNS 400 410 420 430 440 450 160 170 180 190 200 210 sp|Q1X GSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD .: :. sp|Q54 NSNNNSVIDINNNNVNNSQQQQQQHQQQQQLNNSNNNNNNNNNNSTNKQQQSKNVKAAGV 460 470 480 490 500 510 >>sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattus no (295 aa) s-w opt: 138 Z-score: 131.3 bits: 32.5 E(516081): 8.6 Smith-Waterman score: 138; 29.4% identity (55.9% similar) in 136 aa overlap (16-148:163-290) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPAS-EVPV-LTVSPADTSLNSADVKTQ : : . .::: .::: .:.: sp|Q64 PLHPGIPSPNCMQNPIRPGQLLPANRNTPSPIDPDTIQVPVGYEPDPADLALSSIP---- 140 150 160 170 180 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQEL-PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE :: : .::: .:: : : . :: .: :... : .: ::. ::. sp|Q64 --GPEMFDP-RKRKFSEEELKPQPMIK-KARKVFIPDDLKDDKYWARRRKNNMAAKRSRD 190 200 210 220 230 240 110 120 130 140 150 160 sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS .::. ... . .:..:. : :...... : .. .. ::. : sp|Q64 ARRLKENQIAIRASFLEKENSALRQEVADLRKELGKCKNILAKYEARHGPL 250 260 270 280 290 170 180 190 200 210 220 sp|Q1X PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAG >>sp|Q6MG48|BAT2_RAT Large proline-rich protein BAT2 OS= (2161 aa) s-w opt: 155 Z-score: 131.1 bits: 35.3 E(516081): 8.8 Smith-Waterman score: 155; 24.2% identity (50.2% similar) in 215 aa overlap (18-229:378-575) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP .:.::.: .. ...: : . : sp|Q6M RDSDEEGAEGHKDSQSAAGEEPETDGKKGTSPGSELPPPKTAWTENSRPSETEPAAPPIP 350 360 370 380 390 400 50 60 70 80 90 100 sp|Q1X EEKKPAKKRK---SWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERK . : .: .:: : . :: : ::: : : .: :...... : . sp|Q6M KPPPPPPHRGPVGNWGPPGDYPDRGGPPCKPPAPEDEDEAWR-QR--RKQSSSEISLAVE 410 420 430 440 450 460 110 120 130 140 150 160 sp|Q1X RLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPA : . .. :.:. ..:.. ..:.... .... .: :: . .. : :. : sp|Q6M RARRRREEEERRMQEERRAACAEKLKRLD---EKFGAPDKRLKAEPAAPPVTPPAPALPP 470 480 490 500 510 520 170 180 190 200 210 220 sp|Q1X TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLE .. : ::: :: : ::: . :. : . . .. : :: . . sp|Q6M VV-PKETPT-----PPALP--PTPTPTPEKDPEEPAHAPPVQSAPTQ-AGPPAPT--PVS 530 540 550 560 570 230 240 250 260 270 280 sp|Q1X GDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEG : :.: sp|Q6M GGGTASSTSSGSFEASPAEPQLPSKEGPEPPEEVPAPTTPPAPKVEPKGDGVGPTRQPPS 580 590 600 610 620 630 >>sp|Q54HX6|MYBI_DICDI Myb-like protein I OS=Dictyosteli (977 aa) s-w opt: 148 Z-score: 131.0 bits: 34.2 E(516081): 9 Smith-Waterman score: 148; 17.5% identity (58.7% similar) in 223 aa overlap (36-252:628-845) 10 20 30 40 50 60 sp|Q1X EKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPV ::.. :. . ... .... :. . sp|Q54 NNNNNNNNNINNNNNNNNGNNINNNNNNNNNSSNQIIQQQQQVQQQQMQQQQMMMQNQII 600 610 620 630 640 650 70 80 90 100 110 120 sp|Q1X PKTNLP-PRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF : .: :.... . . :..... .. . : ...... .... .... :..::.: sp|Q54 PTLPMPSPQSQVLQSQFQPQQQMQQQMQMQYQQQQQQQQQQQQQQQQQQQQQQQQQQQQ- 660 670 680 690 700 710 130 140 150 160 170 180 sp|Q1X LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDE-LP :. .:.. .... .::. : .. .. .:. : ... . .:. ...: . sp|Q54 --QQQQQQQQQQQQQQQQIYQ--QNLNSNSGNSSPNISSINGDFVRSPNYNNKKRPPPVN 720 730 740 750 760 770 190 200 210 220 230 sp|Q1X LERIPFPTPSLS---DYSPTLKPS-TLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL . : ::. :: ..::. .: .: .... . . . .. :. : : : : sp|Q54 VSRPEFPVTPLSGSPSHSPAQSPHYNLNNGNNNNGNGSSNSSSYSGNQSPLGLVPSPSLS 780 790 800 810 820 830 240 250 260 270 280 290 sp|Q1X KHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFD : . ...: : sp|Q54 LHPPSPLITSPTSHSIRWPGPLNNTLMYDYRRMEPSHGINYVPLQQSPHAPPQQSPHFNN 840 850 860 870 880 890 >>sp|Q90596|MAFK_CHICK Transcription factor MafK OS=Gall (156 aa) s-w opt: 132 Z-score: 130.9 bits: 31.5 E(516081): 9.1 Smith-Waterman score: 132; 25.2% identity (56.6% similar) in 159 aa overlap (47-193:5-156) 20 30 40 50 60 sp|Q1X ATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTN------- :. .: : .. :.. :: . . sp|Q90 MTTNPKPNKALKVKEESGENAPVLSDDELVSMSV 10 20 30 70 80 90 100 110 120 sp|Q1X --LPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQF : . :. :..: .::: :.:.::. : . : .. . :.:: ......:. . sp|Q90 RELNQHLRGLTKEEVIRLKQRR--RTLKNRGYAASCRIKRVTQKEELERQRVELQQEVEK 40 50 60 70 80 90 130 140 150 160 170 180 sp|Q1X LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPL : .. :.:. : . : .. : . .: . : :. .:. .. : . :. :. :. sp|Q90 LARENSSMKLELDALRSKYEALQTFAR-TVARGPI--TPTKVATTSVITIVKSA--EISS 100 110 120 130 140 190 200 210 220 230 240 sp|Q1X ERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHST .:: . : sp|Q90 SSVPFSAAS 150 >>sp|Q4VYS1|FOXP2_XENLA Forkhead box protein P2 OS=Xenop (706 aa) s-w opt: 145 Z-score: 130.8 bits: 33.7 E(516081): 9.2 Smith-Waterman score: 145; 20.1% identity (51.2% similar) in 344 aa overlap (10-321:36-373) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSAD :: :. .. .: : .: .. .. . . sp|Q4V ATETISNSSMNQNGMSTLSSQLDAGSRDGRSSSDT--SSEVSTVELLHLQQQQALQAARQ 10 20 30 40 50 60 40 50 60 70 80 90 sp|Q1X VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT . :. :.: ...:. ..:: . . : .. : .. .: ..:: . sp|Q4V LLLQQQTSGLKSPKNNEKQRPLQVPVSMAMMTP--QVITPQQMQQILQQQVLSPQQLQAL 70 80 90 100 110 120 100 110 120 130 140 150 sp|Q1X SRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-- .... . ... . ... .::.:. :: :.:.. .... .:: : . . .. . sp|Q4V LQQQQAVMLQQQQLQEFYKKQQEQLHLQLLQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ 130 140 150 160 170 180 160 170 180 190 sp|Q1X -------PMPGSPATASPTLTPTLF------------KQERDELPLER---IPFPTPSLS : ::. : . :. . .:.. : :.: : .: :: : sp|Q4V QQQQQPQPHPGKQAKEQQQLAAQQLVFQQQLLQMQQLQQQQHLLNLQRQGLISIP-PSQS 190 200 210 220 230 240 200 210 220 230 240 250 sp|Q1X DYSPTLKPSTLAESSDVAQ--HPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSD :.. ... : . ...: ..: .: .:: .... .:. ... : sp|Q4V ALPVQSLPQAGLSPAEIQQLWKEVTGVHSMEDNGIKHGGLDLTTNISSSTTSTTTSKASP 250 260 270 280 290 300 260 270 280 290 300 sp|Q1X D-DFNRLFHGDSSV---EPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIE . :..:..:: . ::: :. : .: : . .: . : :. .. sp|Q4V PITHHSLLNGQASVLSARRDSSSHEETGASHTLYGHGVCKWPGCENICEDFGQF-LKHLN 310 320 330 340 350 310 320 330 340 sp|Q1X MAHGLPDETT--CKTSSVQPGFGASTTRCDGQGIAAGC :.: :..: :. sp|Q4V NEHALDDRSTAQCRVQMQVVQQLEIQLSKERERLQAMMTHLHMRPSEPKPSPKPLNLVST 360 370 380 390 400 410 >>sp|Q54NF3|Y6434_DICDI Uncharacterized protein DDB_G028 (412 aa) s-w opt: 140 Z-score: 130.5 bits: 32.8 E(516081): 9.5 Smith-Waterman score: 140; 18.5% identity (63.1% similar) in 157 aa overlap (22-170:171-321) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPV-LTVSPADTSLNSADVKTQEVKPEEK ..:. .. ...: :: :. .:... sp|Q54 VECDFKMATNTPGSEQAQQQQQQQQQQQLGDIPIKQQITSSNNSGNS-----QQQQPQQQ 150 160 170 180 190 60 70 80 90 100 110 sp|Q1X KPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEK . ..... :. : . . .. . ....:..... :... : . ....:.... sp|Q54 QQQQQQQQQQQQQPQQQQQQQQPQQQQHLQQQHQQQVQQ-LQQQQLQQQQLQQQQLQQQQ 200 210 220 230 240 250 120 130 140 150 160 sp|Q1X LENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA----AEVRGSRANT---PMPGSP :.....:. : .:. . .:.. . . ::: :. :. . ..:. : .:: sp|Q54 LQQQQLQQPQLQQMQQPQQQQQQQQPQYTPQQLMQFQQMQQAQQQQQQAQQLQQQMGSSP 260 270 280 290 300 310 170 180 190 200 210 220 sp|Q1X ATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL . .:::. sp|Q54 THSSPTIKQEGLTGYTQIPQGGIINTNTNLNGTGGVSPNQPMPNSSPILPTNASSVVPPV 320 330 340 350 360 370 >>sp|Q0CPW4|PAN1_ASPTN Actin cytoskeleton-regulatory com (1469 aa) s-w opt: 151 Z-score: 130.5 bits: 34.7 E(516081): 9.5 Smith-Waterman score: 151; 24.8% identity (53.4% similar) in 266 aa overlap (16-268:1032-1284) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV :: :. .. . ... .... ..:: .. .: sp|Q0C LREQERQRRLAEERGTPAQPSTKPIGKKPPPAPPSRRARTDSADQSEAK-KAAD-EAAKV 1010 1020 1030 1040 1050 50 60 70 80 90 100 sp|Q1X KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRN-RAAAQTSRERK . .. : .... :: . . . :.: . : ::.. : :: . .: .. .: sp|Q0C EQTAREQAIREEQQVQEEETKRLEDEARQR-EEEFMKEKEAQEARLRALQEQVQQGKIKK 1060 1070 1080 1090 1100 1110 110 120 130 140 150 160 sp|Q1X RLEME-KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA--EVRGSRANTPMPG . : . : : :. ::. .. :: ...:: ..: : .: : : .: . : . sp|Q0C QEEKRRKEEAERRAKEQEAKLAAQR-AELEAAKERERQLQRELEAMEEESSSDDEGPEFA 1120 1130 1140 1150 1160 1170 170 180 190 200 210 220 sp|Q1X SPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAES-SDVAQHPAVSV .: ..::. : : : . : : : .: . . :. .. : :: : sp|Q0C TPRNGSPAQT---------EAPTAEAPPPPPPAPATAPPVPAIAEPEAPTSPATSPASSR 1180 1190 1200 1210 1220 230 240 250 260 270 sp|Q1X AGLEGDG-SALPLFD-LG--SDLKHHSTDDVAAPLSD----DDFNRLFHGDSSVEPDSSV :.: .. : : : .: .: . . ..:. :: . :.:: . . :. : sp|Q0C ANLSPEAESKNPWFKKIGQPADSQPAPVPQAATTPSDTHSTNPFHRLAQQQESTAPAFTG 1230 1240 1250 1260 1270 1280 280 290 300 310 320 330 sp|Q1X FEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGAS sp|Q0C SAPLERKTRARPEDDDDWSAAGSEFDSSDDEDDRAGGGSAKQLASILFGTMAPPRPLSAM 1290 1300 1310 1320 1330 1340 >>sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Homo s (591 aa) s-w opt: 143 Z-score: 130.4 bits: 33.3 E(516081): 9.7 Smith-Waterman score: 143; 31.2% identity (63.4% similar) in 112 aa overlap (35-142:111-219) 10 20 30 40 50 60 sp|Q1X MEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE-L ::: .. . . . ::. ... .:: : sp|Q8N RDARQVYGLNFGSKEDANVFASAMMHALEVLNSQETGPTLPRQNSQLPAQVQNGPSQEEL 90 100 110 120 130 140 70 80 90 100 110 120 sp|Q1X PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRLEMEKLENEKIQMEQQN . . .: ..: : : :..:.:: .: . : ::.::: :.::.:... :.:. sp|Q8N EIQRRQLQEQQRQK---ELERERLERERMERERLERERLERERLERERLEQEQLERERQE 150 160 170 180 190 130 140 150 160 170 180 sp|Q1X QFLLQRLSQME--AENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD . .:: ..: ...:: .: sp|Q8N RERQERLERQERLERQERLERQERLDRERQERQERERLERLERERQERERQEQLEREQLE 200 210 220 230 240 250 >>sp|Q00312|RBF1_CANAL Transcription factor RBF1 OS=Cand (527 aa) s-w opt: 142 Z-score: 130.4 bits: 33.2 E(516081): 9.7 Smith-Waterman score: 142; 23.0% identity (57.0% similar) in 200 aa overlap (36-229:263-449) 10 20 30 40 50 60 sp|Q1X EKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEE----KKPAKKRKSWGQ : : : .. ::.: .. .. . : sp|Q00 TTVKDATKRQRIAYTKRNKCAYRLVANLYPNEKDQKRKN-KPDEPGHNEENSRISEMWVL 240 250 260 270 280 290 70 80 90 100 110 120 sp|Q1X ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ .. :. : : : :.... :.: .. . .... :..:. .... :..:: sp|Q00 RMINPQHNHAPDPINK----KKRQKTSRTLVEKPINKP-HHHHLLQQEQQQQQQQQQQQQ 300 310 320 330 340 130 140 150 160 170 sp|Q1X NQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPT--LFKQER .: :. .: .: :.. .:: ::: ... . . .: .: . : : : .:. sp|Q00 QQ---QQQQQHNA-NSQAQQQAAQLQQQMQQQLQASGLPTTP-NYSELLGQLGQLSQQQS 350 360 370 380 390 400 180 190 200 210 220 230 sp|Q1X DELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL .. :..:: .. . .:. :.. : : :. .:..:....: sp|Q00 QQQQLHHIPQQRQRTQSQQSQQQPQQTAHGLD--QPDAAVIAAIEASAAAAVASQGSPNV 410 420 430 440 450 240 250 260 270 280 290 sp|Q1X KHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFD sp|Q00 TAAAVAALQHTQGNEHDAQQQQDRGGNNGGAIDSNVDPSLDPNVDPNVQAHDHSHGLRNS 460 470 480 490 500 510 >>sp|P48634|BAT2_HUMAN Large proline-rich protein BAT2 O (2157 aa) s-w opt: 154 Z-score: 130.2 bits: 35.2 E(516081): 9.9 Smith-Waterman score: 154; 27.0% identity (50.9% similar) in 222 aa overlap (18-228:380-575) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP .: :: :. .. :.:: ... : sp|P48 SDEEGAEGHRDSQSASGEERPPEADGKKGNSPNSEPPTPKTAWAETS-RPPETEPGPPAP 350 360 370 380 390 400 50 60 70 80 90 100 sp|Q1X EEKKPAKKRK---SWGQELPVPKTNLPPRKRAKTEDEKE---QRRIERVLRNRAAAQTSR . : .: .:: : . :: : ::: : ::: . . :.. .: sp|P48 KPPLPPPHRGPAGNWGPPGDYPDRGGPPCKPPAPEDEDEAWRQRRKQSSSEISLAVERAR 410 420 430 440 450 460 110 120 130 140 150 160 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEVRGSRANTPMP .:.. : .....:. .. :.::.. . : ..::. :. :: : : sp|P48 RRREEEERRMQEERRAACAEK---LKRLDEKFGAPDKRLK---AEPAA---------P-P 470 480 490 500 510 170 180 190 200 210 220 sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV ..:.: .: :.. : ::: : : :. : .: .: :.. . . :. .: sp|P48 AAPSTPAPP--PAVPK----ELPAP--PAPPPA-SAPTPEKEPEEPAQAPPAQSTPTPGV 520 530 540 550 560 230 240 250 260 270 sp|Q1X AG----LEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDG :. . : :: sp|P48 AAAPTLVSGGGSTSSTSSGSFEASPVEPQLPSKEGPEPPEEVPPPTTPPVPKVEPKGDGI 570 580 590 600 610 620 526 residues in 2 query sequences 181677051 residues in 516081 library sequences Tcomplib [36.04] (8 proc) start: Fri Apr 16 09:19:16 2010 done: Fri Apr 16 09:19:21 2010 Total Scan time: 29.730 Total Display time: 0.360 Function used was SSEARCH [version 36.04 January, 2010] hmmer-3.1b2/easel/demotic/examples/example.fa0000664361611702660230000000134112473612604020565 0ustar wheelerteddy>sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp. (strain NGR234) GN=NGR_a00980 PE=4 SV=1 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP N >sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus oryzae GN=hacA PE=2 SV=1 MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC hmmer-3.1b2/easel/demotic/examples/example-single-psiquery.fa0000664361611702660230000000055412473612604023730 0ustar wheelerteddy>A3CM55_STRSV/64-391 A3CM55.1 SLFSVGLSPWMSSMLIWQMFAVSKRLGLSKLPLEVQERRRMLLTLVIALIQSVALVLNLP LQEAAGVDMTTIMVLDTLVLMAGTYFLIWLTDLNAAMGLGGSIMIVMASMIAYIPQDIWN SIQELKISSLWLALMLVFSLVFLYLAVTVERSKYRIPVNKINIHNRFKKYSYLDIRLNPA GGMPIMYAMTLVSIPQYFLLIIHFLQPENQLIEQWIEALSMGSPAWFILYLLTIFILALA FAFINISGDQIAERMQKSGEYIENVYPGGATRRYINGLVTYFALVGAFYLILISGLPMMV VLVDIRYLRLSMIPGIFMIFIGMVFSIK hmmer-3.1b2/easel/demotic/examples/example.hmm20000664361611702660230000053324212473612605021055 0ustar wheelerteddyHMMER2.0 [2.3.2] NAME Orn_DAP_Arg_deC ACC PF00278.15 DESC Pyridoxal-dependent decarboxylase, C-terminal sheet domain LENG 123 ALPH Amino RF no CS yes MAP yes COM /groups/eddy/home/eddys/releases/hmmer-2.3.2/src/hmmbuild example.hmm2 example.sto COM /groups/eddy/home/eddys/releases/hmmer-2.3.2/src/hmmcalibrate example.hmm2 NSEQ 105 DATE Fri Apr 16 11:03:03 2010 CKSUM 1905 GA 20.1 20.1 TC 20.4 20.1 NC 19.8 20.0 XT -8455 -4 -1000 -1000 -8455 -4 -8455 -4 NULT -4 -8455 NULE 595 -1558 85 338 -294 453 -1158 197 249 902 -1085 -142 -21 -313 45 531 201 384 -1998 -644 EVD -75.919388 0.196776 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d b->m m->e -14 * -6727 1 -155 743 -6532 -5896 -780 -5734 -1012 875 -5491 -503 870 -1313 -5784 -5114 -5291 92 1979 1780 532 1378 1 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 -14 * 2 -1682 -4022 -6543 -5907 20 -5745 -4617 398 -2271 2820 -3223 -5391 -5795 -5125 -5302 -2634 -242 7 -4482 624 2 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -14 -11881 -6717 -894 -1115 -701 -1378 * * 3 722 -557 -6512 -1872 -3954 -2641 -1278 1497 -2668 1607 -1117 -5364 -5770 -5097 -2208 -4804 -2260 2317 -4458 -4116 3 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11867 -12909 -894 -1115 -1442 -662 * * 4 781 1635 -6517 -5881 640 -373 -4592 -3492 -5476 -1388 329 -2095 -5771 -5100 -5277 525 2693 622 -4458 171 4 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11867 -12909 -894 -1115 -1442 -662 * * 5 -3883 -5357 -2074 1459 -2040 -2288 1088 -5428 746 -5373 -4446 2000 -2200 728 1586 623 691 -2301 -5540 -4857 5 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11867 -12909 -894 -1115 -1442 -662 * * 6 -1426 -5583 -8811 -8513 -6360 -8668 -8868 1788 -8509 -2816 -5025 -8340 -2071 -8517 -8721 -8067 -6096 3514 -8205 -7636 6 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11867 -12909 -894 -1115 -1442 -662 * * 7 -1673 -5007 -1267 -19 -2017 -820 776 1913 -631 676 230 -245 -5065 -395 -728 -2172 447 1185 -5281 -167 7 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11867 -12909 -894 -1115 -1442 -662 * * 8 1096 -549 1742 -395 -762 1395 276 -2186 -3133 -983 -1302 -432 -4970 -877 -1016 241 27 -4892 -5490 1023 8 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11867 -12909 -894 -1115 -1442 -662 * * 9 -229 -5188 -1785 -1839 -5436 -4910 -1020 952 1650 -557 -4297 -3579 -5001 -345 410 -1235 729 2165 -5417 -4782 9 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11867 -12909 -894 -1115 -1442 -662 * * 10 -600 -5344 -2136 -198 -2009 -4861 -1131 -59 2674 -3187 -1379 -1844 -2433 -1334 1969 239 -1367 -406 -5531 -1732 10 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11867 -12909 -894 -1115 -1442 -662 * * 11 -860 -475 333 1492 -5677 -1611 1301 -109 348 -2890 -4445 -576 -2112 -556 1098 89 701 761 -5539 -688 11 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -338 -11867 -2261 -894 -1115 -1442 -662 * * 12 -321 -4996 -1638 -395 -5297 -1286 -3213 9 455 326 119 1051 -1112 -217 1735 -12 -2054 944 101 -1285 12 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -106 -11530 -3825 -894 -1115 -211 -2880 * * 13 -504 -729 478 15 -1016 1089 1111 -2218 -306 -2850 -340 541 1326 -759 526 349 76 -1022 -309 -1630 13 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -228 -11759 -2777 -894 -1115 -3468 -137 * * 14 -242 -5039 1770 933 -1801 1563 -721 -2161 -459 -1886 -4129 -174 -95 -1111 -469 -264 -991 -464 -5223 482 14 - -105 -440 237 138 -405 323 160 -556 176 -377 -675 246 317 80 91 304 73 -368 -262 -208 S -2192 -987 -1855 -4846 -51 -4737 -55 * * 15 115 -4610 1102 701 -4931 -112 1059 424 367 -1501 -3699 584 310 -854 706 -336 -53 -359 -4793 -4110 104 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 S -1 -11065 -12107 -894 -1115 -591 -1573 * * 16 -705 -5156 1135 146 -660 -230 -53 -2341 1335 -1367 -177 74 386 497 1733 -1890 -685 -1384 -5339 -552 105 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11656 -12698 -894 -1115 -764 -1282 * * 17 -211 -5273 397 -203 -2303 -1044 -875 -941 1435 -1074 663 -120 -1153 425 945 -1561 770 651 390 -353 106 - -150 -501 234 45 -382 399 105 -627 209 -464 -721 274 393 49 95 360 116 -370 -295 -250 E -3070 -4950 -237 -1101 -905 -3102 -179 * * 18 -1922 -1734 -4254 -3627 682 -3479 -2310 488 -3229 2158 -788 -3116 -3507 -2828 -3024 738 -1860 335 -2118 2030 111 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 . -4 -9069 -10112 -894 -1115 -5057 -44 * * 19 1009 -3015 1544 246 -3307 -248 -1256 -3038 264 226 1184 -1241 -2687 -806 269 641 -1549 -301 -3215 -2550 112 - -149 -502 235 52 -383 398 103 -628 210 -468 -713 276 394 43 99 358 115 -372 -297 -252 . -4402 -71 -10280 -12 -6930 -5520 -32 * * 20 -159 -2362 815 -1710 -2418 -2992 -1745 1755 -1629 1789 -1536 268 -3087 761 -2008 -155 -1770 -1834 -2738 -2270 114 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 . -3 -9325 -10367 -894 -1115 -3944 -97 * * 21 -407 -3479 723 1350 -3798 154 -1627 -3551 -1217 -3495 -2570 2119 -267 390 -1729 1140 580 -3100 -3662 -2975 115 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 . -3 -9672 -10714 -894 -1115 -4804 -53 * * 22 -2045 -3517 1732 1828 -3837 -3019 -1677 -557 1605 -3532 -2606 -1654 565 509 553 -1926 -323 -723 -3700 -3018 116 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 . -2 -9799 -10842 -894 -1115 -5367 -35 * * 23 544 1072 -289 424 -3885 87 862 -3636 701 -468 -2654 1199 486 248 1450 -1972 -346 -3186 -3748 -3065 117 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 . -2 -9861 -10903 -894 -1115 -5261 -38 * * 24 -625 -3445 -2090 403 -3692 -78 545 -3392 -1450 1414 1485 935 -3259 174 -276 134 367 154 -3674 -3039 118 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 . -2 -9926 -10968 -894 -1115 -5278 -38 * * 25 1936 946 -4718 -4086 784 -799 -2841 541 -3694 -2116 -1470 -3599 -4023 -227 -723 -3055 967 812 -2724 2044 119 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 . -2 -9986 -11028 -894 -1115 -10 -7116 * * 26 -2354 -993 765 -741 2318 -2313 261 56 -1928 -5062 2192 -1975 -1470 -322 -278 -671 -878 -306 3093 1303 120 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 27 697 -4060 -6143 -1035 -1022 -5673 -1474 126 -61 619 748 -412 -5727 -1681 -1275 -2400 246 1886 -378 1797 121 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 28 312 -4013 -6531 -5895 -104 233 -4605 666 -1543 -2001 -1105 -1805 -5784 -5113 -5290 -1365 -4127 1204 589 3721 122 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1315 -11881 -742 -894 -1115 -701 -1378 * * 29 -2952 -2780 -933 -4648 2176 -4498 179 1283 -4246 -769 -56 -149 -4548 -566 -4051 -3582 29 1007 1991 2686 123 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -10567 -11609 -894 -1115 -13 -6832 * * 30 -1799 2170 -6532 -5896 -1699 -2732 -4605 1539 -5491 1685 378 -5380 -5784 -1976 -5291 -1754 949 1754 -355 -4128 124 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 31 -5769 -946 3181 -2344 -7805 -1675 -84 -7682 -5228 -7569 -6819 3045 -6358 -4779 -1632 -1659 -730 -7166 -7755 -6824 125 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 S -1 -11881 -12923 -894 -1115 -701 -1378 * * 32 1413 221 2283 -680 1069 1075 -4568 302 -5350 -416 -3238 -5290 -5758 -5008 -5217 -1289 -243 -1641 -4491 -4144 126 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 33 -619 -807 -8268 -8621 -8231 3261 -7564 -8059 -8252 -8320 -7339 -1904 -6589 -7668 -7841 1895 -5360 -6713 -8451 -8447 127 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 34 -725 -4015 -6533 -5897 802 -5736 -4607 1501 -746 319 3032 -5382 -5786 -5115 -716 -1693 -63 1977 -4473 -4131 128 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 35 -1024 -5354 -1109 -335 2403 -4874 1499 -5413 -3117 -2899 -4445 1820 -1892 -856 -1712 6 -679 -4972 -335 2983 129 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 36 284 739 1001 -866 -5658 1983 1959 -1651 -1916 -2898 -68 -570 -4969 1365 -3626 -408 579 -1135 -5537 -4860 130 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 S -1 -11881 -12923 -894 -1115 -701 -1378 * * 37 -1145 316 -6511 -5877 -164 290 2549 -1140 -5476 909 -1105 1020 -5781 -1796 -5283 1948 -374 -1254 -4472 -579 131 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1456 -11881 -655 -894 -1115 -701 -1378 * * 38 -1236 -2788 -5320 -4686 1054 -4531 -3404 1409 -4285 1992 3208 -445 -4568 -3899 -4083 -3619 -625 -802 -3250 -2917 132 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 . -2 -10426 -11469 -894 -1115 -39 -5234 * * 39 -167 -3996 -6515 -5879 2326 -1666 -4588 1325 -5474 298 1651 -5363 2297 -5097 -1014 -1276 -1316 -934 -4454 -1470 133 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11864 -12906 -894 -1115 -1589 -583 * * 40 296 -681 2289 -430 -5583 -1095 -3534 -2534 -3126 -1724 -1027 1303 -4965 -3084 2286 221 -2198 -4897 -5491 -76 134 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 C -15 -11864 -6668 -894 -1115 -336 -2266 * * 41 -238 2953 -1955 71 -2041 -766 -77 -4122 -3883 -1250 -145 -1861 2289 -3779 -1963 862 385 -511 1342 -14 135 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 H -1 -11867 -12909 -894 -1115 -1455 -654 * * 42 1213 407 -6517 -5881 71 -636 -4591 1299 -225 -262 -928 -5366 -5770 -712 -5276 -116 407 625 3572 -1617 136 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 H -15 -11867 -6594 -894 -1115 -373 -2132 * * 43 459 -4501 -1172 287 -798 173 -3973 1060 -2022 1548 2146 -794 -5316 -672 -1974 -1338 -1391 -2282 -234 348 137 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 H -1 -11866 -12908 -894 -1115 -1488 -636 * * 44 -1781 -4053 -182 -5470 2057 -2605 -1129 1130 -2190 -633 1294 -2241 -2185 -432 -1951 -1117 -2035 -441 366 3258 138 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 H -1 -11866 -12908 -894 -1115 -364 -2165 * * 45 -1717 -5369 2610 1144 -1938 1098 507 -5441 -1261 -2908 -934 841 550 523 -443 -3776 -1912 -4991 -5553 -4870 139 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 S -1 -11881 -12923 -894 -1115 -701 -1378 * * 46 1568 -951 -1248 -809 -1026 -727 2740 -1428 -657 -2188 -286 -838 -2109 1930 -575 -149 -3841 -1517 -249 1165 140 - -151 -492 231 38 -381 394 101 -613 218 -462 -715 271 392 41 103 354 120 -360 -299 -254 - -144 -3402 -12923 -1732 -517 -701 -1378 * * 47 -801 -663 -1822 -555 -1150 -2359 846 308 -123 347 -4326 595 -5008 1356 375 -244 31 397 1833 1328 145 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 48 -940 -743 -2036 -822 2037 -2398 3343 -5328 -1242 -1597 -1338 -445 781 10 183 -1162 -910 -409 675 1291 146 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 49 -131 -5368 -509 -89 -2049 -945 1325 -5439 -1165 -1977 -1562 -3506 3047 -360 534 -459 -897 -4990 -5552 1125 147 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 50 -683 1237 -2448 -2599 158 -2705 -226 2391 -2531 -371 -210 -5285 612 -1131 -429 -4780 -391 1831 -4490 -4143 148 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 51 442 -4119 -5779 13 -674 -1882 -1050 636 -1454 946 1778 -4991 834 -2068 1036 -1694 -881 566 -4561 638 149 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 52 -326 1175 -2300 -1367 -404 -771 -27 569 -308 351 -1257 -302 2078 -207 -122 -1517 -908 855 -5260 -1685 150 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -25 -11881 -5894 -894 -1115 -701 -1378 * * 53 -230 695 -2143 -1084 -871 -1271 -1194 1251 -5454 1111 -172 -1953 -449 -5080 -5260 -2063 395 2007 -4449 296 151 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 C -27 -11856 -5791 -894 -1115 -1836 -474 * * 54 -560 -5319 365 333 -2017 -91 1721 -217 -739 -148 -4409 270 853 45 842 601 -183 -1026 -208 -4821 152 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 S -407 -11830 -2025 -894 -1115 -2491 -283 * * 55 131 -4934 333 -357 -6 -747 -3101 -1084 1074 -4949 83 192 7 256 2425 -3349 -1748 -409 -5119 187 153 - -127 -510 242 66 -370 395 120 -657 197 -481 -709 311 375 21 105 349 104 -374 -244 -237 S -1245 -791 -12466 -2841 -217 -912 -1094 * * 56 -1076 -673 326 -357 -183 -426 1033 -1567 786 967 804 -312 621 -724 854 -960 -1187 -266 -5335 -1358 200 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11683 -12725 -894 -1115 -341 -2249 * * 57 513 -781 1412 751 -5656 -532 450 -5407 -218 -752 -178 426 530 766 802 -504 -338 -741 -5519 -4836 201 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 T -1 -11845 -12887 -894 -1115 -217 -2843 * * 58 493 -5369 1490 1410 -5691 636 -254 -1731 -57 -5385 -4458 623 -2057 386 201 549 -204 -4991 -5553 -592 202 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 T -1 -11881 -12923 -894 -1115 -701 -1378 * * 59 215 330 537 1571 -1811 1046 -3531 -2681 -172 -1703 -214 -1884 -314 208 -101 347 343 -824 -5546 -1398 203 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 S -1 -11881 -12923 -894 -1115 -701 -1378 * * 60 -422 -954 -121 754 -5690 -239 -77 -5441 670 -722 -4458 443 2516 -25 218 -375 -2149 -2318 -5553 -618 204 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 S -1 -11881 -12923 -894 -1115 -701 -1378 * * 61 667 285 484 267 -2069 -620 920 -2436 -20 597 -316 -1867 -895 -851 657 -773 1458 -1164 -5539 -1553 205 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 62 314 304 -831 1098 1221 -1825 1259 -1014 -409 -970 -1097 -1780 -5020 230 1332 -1378 -1013 309 -717 1386 206 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 63 -797 -5364 -1341 750 -1887 -2331 -932 -1058 1082 -981 -4453 -1866 1937 -1558 961 454 613 227 -144 -4867 207 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 64 1130 2050 -6530 -5894 538 -98 -4605 -1876 -5489 -3861 -1130 -5379 -5784 -1032 -5290 1013 243 1427 537 2443 208 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 65 -4104 223 1355 -4598 -1203 -5450 -176 508 -351 -1083 -1217 -601 -5517 -1792 -378 1205 1931 1045 -4688 -1296 209 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 66 -7091 -6500 -9564 -9041 366 -9384 -8247 2131 -8885 1864 -1038 -9087 -8520 -7787 -8466 -8766 -6971 2348 -6814 -1672 210 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 67 1613 1081 -6521 -5885 340 -298 -4603 -3506 -5483 -1309 -3217 -5375 -5782 -467 -1983 -323 -275 1594 3554 1377 211 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 68 -9285 -8565 1438 -8544 -10076 3643 -8773 -10978 -9549 -10412 -10266 -8744 -8844 -9135 -9400 -9466 -9515 -10476 -8857 -9945 212 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 69 -2361 -730 -3780 -2141 -5595 -1786 -115 -16 -336 -365 -4401 329 3343 266 539 -1141 -2291 -2457 -5506 -4841 213 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 70 -1655 1194 -6543 -5910 -3988 -5739 233 685 -5506 571 -3236 -1805 -5796 -5130 -5308 1157 2937 -361 -4492 -4150 214 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 71 -5347 5748 -8186 -7892 -5766 -6727 -6957 -1820 -7577 -2760 -973 -2039 -7130 -7190 -7395 -2515 -5522 -2119 -6784 -6480 215 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 72 -4170 -522 3161 1734 -862 -5649 -4489 -2008 -5077 191 -771 -1039 -5705 -4796 -5065 -4709 635 -3514 -4541 -1231 216 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 73 1150 -5383 -3776 -341 -5724 754 -3571 -5473 -3154 -5421 -4496 -249 454 -1338 -505 2630 -1496 -1561 -5590 -4910 217 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 T -1 -11881 -12923 -894 -1115 -701 -1378 * * 74 -154 -684 1640 -4129 -4490 1632 67 -502 -1110 774 685 -5 -5368 -3872 -1888 -139 226 -335 -4848 -4407 218 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 T -1 -11881 -12923 -894 -1115 -701 -1378 * * 75 -9166 -8596 4011 -8037 -10030 1070 -8530 -10877 -9251 -10333 -10165 -8309 -8749 -8751 -9287 -9233 -9364 -10390 -8854 -9811 219 - -149 -500 233 43 -381 398 105 -627 210 -464 -721 275 393 45 96 359 117 -370 -295 -243 - -36 -5360 -12923 -70 -4402 -701 -1378 * * 76 -1206 2156 -6527 -2648 857 -5733 -4604 1334 1009 -419 -801 -5377 -5783 -493 -898 -4818 2 2226 -189 -485 221 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 77 -2414 -4146 -6676 -6041 1881 -5885 -4756 2300 -5639 1676 614 -5531 -5923 -5252 -5437 -4972 -861 1229 -191 -1485 222 - -151 -502 231 48 -382 399 117 -628 209 -468 -710 274 392 47 94 359 118 -371 -296 -237 S -150 -4118 -4593 -1137 -875 -701 -1378 * * 78 1676 146 160 -553 -5570 1390 0 -1553 -124 -938 -1153 252 -1020 -3032 -637 -722 -457 -369 -5464 604 226 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -197 -11820 -2970 -894 -1115 -1657 -550 * * 79 -2162 -5141 158 1079 -5462 -818 1251 -1393 1663 -2901 -4230 56 -1987 754 2238 -817 -1243 -1398 -5324 -1425 227 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -2423 -11639 -298 -894 -1115 -2508 -279 * * 80 -4102 -3772 -5476 -5223 3620 -105 -2492 -3441 857 -3412 -3055 -4306 -5199 -4195 -4447 -4349 -4042 -345 -1881 2833 228 - -157 -498 248 43 -392 405 100 -590 201 -471 -722 274 389 48 92 360 113 -361 -306 -261 . -4563 -63 -10441 -2180 -360 -25 -5869 * * 81 -2459 -5357 2559 1490 -5678 -750 -1031 -2226 1 -1583 -1395 617 -55 113 -143 -282 96 -4979 -5540 -4858 237 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11868 -12910 -894 -1115 -1413 -679 * * 82 -673 324 -5783 -47 503 -1350 -1196 807 -1464 -1079 -1232 -4988 -5652 506 1496 -145 -791 1423 -4547 1902 238 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11868 -12910 -894 -1115 -1413 -679 * * 83 432 -5274 -2217 442 -297 -4882 388 -5282 211 50 272 -3533 1027 175 -245 591 553 -199 1900 648 239 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11868 -12910 -894 -1115 -386 -2090 * * 84 -1601 -4045 -6565 -2579 1422 -5768 -966 -454 -5524 2757 1842 -5414 -5815 -5144 -5323 -4853 -4160 -314 -621 -1544 240 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 85 -1274 -5373 751 -615 -2076 -1635 -3533 -5444 -696 -5389 -285 -1044 3667 -3073 -1272 -633 -1489 -4995 -5557 -4874 241 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -823 -11881 -1202 -894 -1115 -701 -1378 * * 86 -504 -4596 -1323 785 -941 -358 1009 -686 1088 842 -3686 -967 -445 -299 335 -137 -258 244 -4781 -971 242 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 . -1837 -11058 -475 -894 -1115 -5707 -28 * * 87 -2493 -3105 -3828 -4056 -4777 -21 4919 -4828 -4196 -5063 -4275 -3527 1360 -4031 -4242 -2712 -2903 -12 -5069 -4613 243 - -150 -504 233 45 -385 395 102 -618 208 -463 -724 274 405 45 95 358 118 -370 -298 -253 . -4390 -72 -10267 -808 -1222 -5464 -33 * * 88 -1864 -1755 875 -3219 441 1046 -2214 -1257 -2892 1132 -955 -2882 5 -2585 187 -2433 -1804 1302 1989 864 250 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 . -3 -9320 -10362 -894 -1115 -24 -5911 * * 89 -566 -5357 981 1693 -5678 -1302 -3517 -1593 541 -1101 -256 -149 1244 -156 816 -128 273 -1801 -5540 -4858 251 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11868 -12910 -894 -1115 -391 -2074 * * 90 -1387 -498 -1503 -1097 -1906 -1961 433 763 -1031 2064 276 -5263 632 -1927 -5194 -4771 91 1208 -4495 -4147 252 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 91 211 -5369 205 1426 -5691 -128 507 -2545 1005 -2967 -4458 1077 -1238 1567 823 -553 -357 -4991 -5553 -650 253 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 92 56 -5354 -857 1287 -5668 -1632 -3534 1041 -1831 -874 -4445 425 1018 -311 231 -1106 -1433 1651 -5541 -1373 254 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -13 -11881 -6863 -894 -1115 -701 -1378 * * 93 -2742 -7199 284 -974 -7442 3437 -4893 -2264 -2243 -7186 -6383 196 -51 -1912 -5547 -5227 -2485 -6792 -7367 -6500 255 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11868 -12911 -894 -1115 -395 -2062 * * 94 -2834 -8548 3826 50 -8627 -6094 -5570 -8650 -6050 -8465 -7942 -2107 -6700 -2184 -7125 -2045 -6521 -8073 -8674 2022 256 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 95 -4181 255 -6387 -2796 739 -2675 -1035 112 17 1163 -1098 -2030 -2211 -2287 932 -2616 -4121 -643 3916 2319 257 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 96 -2928 -6191 -9320 -8877 -1204 -9162 -8403 2053 -8771 2179 441 -8848 -8491 -7950 -8528 -8549 -6679 2087 -7087 -7147 258 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 97 1595 -663 -6532 -1613 -982 982 -4605 243 -5490 168 -118 -5380 -5784 -2098 -5290 -1956 -2129 2089 -280 779 259 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 98 -1646 -4021 -6541 -5906 3201 -2723 -4615 2230 -5501 -1890 951 -5390 -5793 -5124 -5301 -4829 -2160 1356 686 289 260 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 99 -1778 -838 -41 1142 2032 -1180 1045 -1608 -729 656 1179 -1800 1315 -566 -138 -1482 -1362 -4963 -5536 -768 261 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 S -1 -11881 -12923 -894 -1115 -701 -1378 * * 100 -1260 -567 2398 -1280 -5665 -1153 -96 -5410 -3118 420 -1238 2269 -4968 534 -1926 395 -918 -2659 -5540 -197 262 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 101 1766 1859 -6526 -5890 -1741 -1963 -4604 -1184 -5486 -1947 3141 -2216 -5783 -1261 -2085 -425 1232 1198 -251 -4129 263 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 102 -710 -5603 -8373 -8603 -6927 3726 -7619 -1210 -8247 -3404 -1603 -6842 -6808 -7667 -7877 -5416 -5540 -5603 -7958 -7907 264 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 103 3545 -5494 -8121 -8474 -8213 -1254 1050 -2856 -8199 -8311 -7335 -6596 -6590 -7628 -7816 -1235 -5365 -6715 -8436 -8409 265 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 104 -8529 -7443 -2394 -9209 -1503 -8768 -1161 -7422 -8804 -6723 -6821 -7377 -8628 -7523 -8170 -8025 -8379 -7578 -4205 4909 266 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 105 -237 1755 -1797 -1506 -1853 1522 841 -2485 -3258 -5088 -1084 -967 -5041 1619 -3742 -118 2485 -2569 -5368 -1533 267 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 S -1 -11881 -12923 -894 -1115 -701 -1378 * * 106 -186 48 -2272 1030 741 -2401 380 889 -499 -459 1879 -1857 -5290 -965 -2036 748 -210 -363 949 1132 268 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 G -1 -11881 -12923 -894 -1115 -701 -1378 * * 107 873 1125 -1270 -1033 -4008 -5687 259 266 -5266 -2450 116 -5233 -713 -4943 -5169 2063 579 1643 -4501 -4152 269 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 C -1 -11881 -12923 -894 -1115 -701 -1378 * * 108 852 -569 -5819 -2482 -1817 -2695 -1024 -588 416 1376 3173 -1773 -5669 -1601 -1985 -219 -1366 -1375 -4555 1390 270 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 C -1 -11881 -12923 -894 -1115 -701 -1378 * * 109 1972 -5371 -1903 -3196 -5692 1273 59 -5442 -875 -5387 -4460 327 -2154 -1344 -1896 1962 140 -4993 -5554 -1547 271 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 110 -1109 150 298 -3749 -1973 -1344 592 -4394 -3633 -2784 831 1232 -531 -3554 -1896 2207 1971 -2218 -5046 -1504 272 - -151 -502 234 41 -383 399 119 -625 212 -466 -723 275 391 43 96 359 117 -364 -297 -252 B -247 -2672 -12923 -12 -6972 -701 -1378 * * 111 -342 25 -220 -135 -632 -480 29 -2448 -127 -1254 975 2077 -758 233 197 -105 955 -812 1150 -4866 274 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -701 -1378 * * 112 -8511 -7429 -8892 -9248 3788 -8773 2968 -2181 -8803 -3072 -6779 -7383 -8626 -7522 -8164 -8021 -2259 -7543 -4203 2799 275 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 T -16 -11881 -6512 -894 -1115 -701 -1378 * * 113 -2330 -577 -6759 -6317 -5141 -1571 -1237 -2035 -5825 20 -4364 4131 -6140 -5663 -1967 -2471 -4691 -4512 -5594 -5263 276 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 T -16 -11865 -6501 -894 -1115 -352 -2206 * * 114 -794 -892 -1990 -3274 -2029 2661 -757 -5150 -1693 970 -204 -763 -4996 -906 -1307 910 -616 -4780 -5422 -4784 277 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 T -19 -11865 -6309 -894 -1115 -1527 -615 * * 115 -4155 -3982 -6495 -5859 3395 -5702 1472 74 -2434 113 -1069 -5346 -5752 -619 1708 -4786 -2095 149 -4440 -39 278 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11847 -12889 -894 -1115 -2111 -380 * * 116 -1147 -895 -738 156 -2111 1589 -1295 -5408 499 -2125 -300 -415 2480 290 -348 -1187 -529 -4959 -86 -667 279 - -150 -501 232 42 -377 399 105 -627 210 -465 -711 275 393 44 95 360 119 -370 -295 -250 - -113 -5088 -4439 -995 -1005 -226 -2788 * * 117 -446 -5305 580 -447 -5625 -775 1449 -2469 -386 669 201 -115 844 116 1966 -1478 -483 -1060 -5489 -1547 282 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 . -1 -11814 -12857 -894 -1115 -976 -1024 * * 118 380 887 -2296 -1621 -1625 -5637 -4487 -1206 -5158 -913 -3229 -5150 3194 -4852 -324 -321 1356 -615 -4480 -4128 283 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11846 -12888 -894 -1115 -875 -1137 * * 119 1317 -5353 80 -51 -5674 235 -155 -5425 564 -2381 -4442 1076 1282 -847 -34 469 -31 -1174 -5537 -1538 284 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11864 -12906 -894 -1115 -339 -2256 * * 120 -5 -5016 -805 1834 -1147 -2532 895 1302 -1202 -1357 -296 -3705 -5079 -817 -1190 -41 423 1338 -5291 -1561 285 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 121 -522 -829 -6521 -2652 20 -1557 -1291 736 -2288 -819 -1156 -5375 -5782 -1960 -398 -4817 -1282 2966 -4471 1558 286 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 122 41 1046 -2331 -1647 456 -728 994 912 -5468 845 -17 -1068 -5780 -5097 -234 -1239 -2217 1112 1281 2048 287 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 E -1 -11881 -12923 -894 -1115 -701 -1378 * * 123 -1669 340 -6532 -5896 1095 -5734 -1166 1778 -2668 350 375 -5380 -5784 -5114 -1450 -1931 -1467 2315 486 1573 288 - * * * * * * * * * * * * * * * * * * * * E * * * * * * * * 0 // HMMER2.0 [2.3.2] NAME NIF3 ACC PF01784.11 DESC NIF3 (NGG1p interacting factor 3) LENG 350 ALPH Amino RF no CS no MAP yes COM /groups/eddy/home/eddys/releases/hmmer-2.3.2/src/hmmbuild example.hmm2 example.sto COM /groups/eddy/home/eddys/releases/hmmer-2.3.2/src/hmmcalibrate example.hmm2 NSEQ 122 DATE Fri Apr 16 11:03:03 2010 CKSUM 8888 GA 23.4 23.4 TC 24.1 24.0 NC 22.0 23.3 XT -8455 -4 -1000 -1000 -8455 -4 -8455 -4 NULT -4 -8455 NULE 595 -1558 85 338 -294 453 -1158 197 249 902 -1085 -142 -21 -313 45 531 201 384 -1998 -644 EVD -180.735001 0.124881 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d b->m m->e -12 * -6953 1 -1169 -5587 2255 2289 -2333 -1931 -3746 -5659 380 -1940 -4676 -119 -5181 915 6 -1098 -418 -1459 -5770 -5087 1 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 -12 * 2 -2251 -6145 -9105 -8594 349 -8711 -7768 2712 -8376 1740 -1230 -8380 -8291 -7700 -8142 -7963 -6537 1780 -6895 -1988 2 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 3 -436 490 -2634 -28 -1126 -2818 -4772 1894 -501 213 1375 -1964 -5967 -5188 -1707 -1138 56 1620 -4717 1194 3 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 4 -94 -651 695 1414 -2152 -598 -403 -5658 614 -1275 -4676 1188 -5181 875 762 705 -427 -1419 -5770 -1650 4 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 5 450 -4293 -2738 -1344 1690 -5878 215 1306 -250 -113 -454 -2370 -5933 -5063 379 -1161 -732 697 1971 1775 5 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 6 -1906 431 -6787 -6151 640 -5990 -4861 1710 -5746 2391 1857 -5636 -6037 -5367 -5546 -5075 -1724 109 -599 -395 6 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 7 -2642 -5590 1586 2611 -5911 -1420 -1344 -1596 -3330 -1038 -4679 1980 -5183 -904 102 -1818 -52 -5212 -5773 -5090 7 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 8 583 -5587 38 1753 -5908 -753 -3746 -2414 1539 -2515 -1338 -146 -5181 816 642 732 -730 -2896 -5770 -1722 8 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 9 -2038 -617 -673 -1612 1513 -5869 -440 1784 259 1299 651 -748 -5924 -2038 -1485 -2825 -1191 -135 1355 1008 9 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 10 2292 892 -6753 -6117 1518 -2694 -4826 -966 -5711 828 -3436 -5601 -6005 -5334 -5511 -410 -2535 -915 321 2249 10 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 11 -2349 -5587 0 -368 -2346 -1675 -1245 -2450 -1413 -2358 -4676 522 3647 -251 -2179 -315 -4053 -5208 -5770 -5087 11 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 12 -1996 -127 -6219 96 1328 -5867 -4709 695 812 953 -3500 -5335 1936 -405 -469 -1531 -683 396 -767 -4393 12 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 13 720 -1006 912 939 -2280 -1076 1720 -2735 740 -5603 -4676 840 -1410 331 402 1138 -1629 -5209 282 -2022 13 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -28 -12109 -5729 -894 -1115 -701 -1378 * * 14 -772 -5389 -898 -2060 -417 -1431 -3783 -1784 265 2082 -4499 47 -5206 403 -305 -150 -503 -1773 1436 1083 14 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12082 -13124 -894 -1115 -2065 -394 * * 15 2903 127 -6518 -5895 1119 -5897 -4758 -985 -1231 -2145 -1297 -1999 -1164 1389 -5404 -1484 -4313 -3646 -4685 1021 15 - -145 -501 232 45 -381 398 111 -627 210 -467 -721 275 395 44 95 358 116 -367 -295 -250 - -103 -5232 -4564 -995 -1005 -913 -1092 * * 16 -111 75 646 2620 -5766 -5029 -1135 -2600 -92 -1051 1440 -3673 -413 379 -522 -689 -3986 -873 320 -374 18 - -150 -501 231 47 -382 398 104 -628 217 -468 -722 274 392 47 97 358 118 -371 -296 -244 - -167 -3324 -6742 -16 -6482 -373 -2133 * * 17 -1057 -5579 2411 1610 -5900 147 -3735 -5651 51 -3121 -4668 -1165 -223 -1073 -3826 1462 -246 -5201 -5762 -5078 20 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12082 -13124 -894 -1115 -2055 -397 * * 18 -1362 -4364 -1437 -5153 1248 226 -1142 -3891 -1076 -1993 -3558 -2175 -2457 -4704 -2508 -4781 -4271 -668 5293 2095 21 - -149 -500 233 43 -381 398 105 -626 210 -466 -721 275 394 45 99 359 119 -370 -295 -250 - -26 -5828 -13124 -83 -4162 -235 -2732 * * 19 -925 1179 3914 -5962 -8518 -1479 -6770 -8385 -7260 -8523 -7664 -1258 -6835 -2109 -7688 -339 -5847 -2999 -8683 -8224 23 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 20 -1505 -5585 -3962 -949 -5906 -5088 910 -2608 112 -1842 -4675 3382 1765 -1025 -545 -682 -872 -5207 -5769 -808 24 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -15 -12109 -6657 -894 -1115 -701 -1378 * * 21 -483 1767 -2564 -6033 -1699 -2838 -4798 289 -5644 -1902 -3430 2111 -637 -5280 -1499 612 -275 2382 -4684 -1438 25 - -155 -506 233 45 -347 392 100 -614 214 -467 -714 273 393 43 93 357 111 -365 -283 -249 - -74 -4683 -6536 -3148 -173 -342 -2244 * * 22 -7717 -7960 -7442 -7630 -9670 3822 -7694 -9875 -1480 -9577 -9045 -7634 -8320 -2328 -7103 -7826 -7971 -9161 -8741 -9179 55 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -15 -12094 -6677 -894 -1115 -1617 -569 * * 23 -2402 -4268 -6789 -6154 619 -5994 -1183 -53 -5750 2880 -1205 -5639 -2502 -5366 -5547 -5079 -4384 95 1717 -187 56 - -152 -503 233 45 -374 399 116 -625 211 -465 -724 275 393 46 93 360 114 -366 -298 -253 - -128 -3904 -5770 -1575 -590 -840 -1179 * * 24 -4356 -4227 -6431 -1652 -1884 -5873 -4729 117 -1449 1395 861 -1453 -5926 3485 -5361 -553 -1390 -779 -4680 -1630 60 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12069 -13111 -894 -1115 -1219 -810 * * 25 -592 877 -2523 -6088 -1959 -5929 -1011 1603 -1089 515 -903 -1219 -5979 -2218 -5485 -5013 -4322 2913 -4666 -1585 61 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -287 -12083 -2475 -894 -1115 -2022 -408 * * 26 -1123 -643 -300 1246 -901 3047 -3452 -5358 -1012 -1936 -4378 -1611 -2061 -129 -3540 -2147 -1064 -4910 -5473 -4791 62 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2796 -11797 -225 -894 -1115 -3600 -124 * * 27 1498 1588 260 -1937 758 -2940 -1707 -1486 -1772 -108 -1095 367 1798 -1632 -2051 -143 -1584 -1358 -2319 1078 63 - -150 -503 229 54 -384 397 109 -622 217 -465 -724 274 392 42 92 361 116 -373 -298 -253 - -931 -1075 -10163 -1826 -478 -3439 -140 * * 28 -2311 -2585 1204 -531 1541 -3545 -2364 -2157 -2463 -19 -1776 -2599 2819 -2293 -2752 244 -2258 447 -2998 -2576 72 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -219 -9790 -2842 -894 -1115 -763 -1283 * * 29 -538 -345 2652 -1040 -758 -670 140 -1747 -2768 -1734 -4006 1302 -1798 -2725 -1595 1603 -1811 -4510 -5113 142 73 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11473 -12515 -894 -1115 -3133 -175 * * 30 -947 -4376 -959 -1928 1276 572 -837 -2029 -944 431 -822 -3664 2308 -3251 1092 -327 16 -1200 -4722 -1347 74 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11549 -12591 -894 -1115 -247 -2669 * * 31 40 -939 807 1901 -5840 -333 -335 -2615 -89 -1686 -4608 1338 -267 107 -533 689 -659 -5141 -5702 -236 75 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12039 -13081 -894 -1115 -3029 -189 * * 32 606 -5519 856 -320 -5840 1133 900 -5591 1259 -1808 -1504 815 -2379 936 201 336 -284 -5141 -5702 -5020 76 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2087 -12039 -388 -894 -1115 -3029 -189 * * 33 -778 764 -300 468 -3963 -39 -1801 -3713 1919 -3658 -2731 835 -3235 189 1633 -657 1198 -3264 -3825 -3142 77 - -155 -506 240 42 -376 395 106 -628 209 -460 -726 284 393 43 96 353 117 -363 -300 -242 - -244 -2686 -10996 -3264 -159 -3711 -115 * * 34 -131 -3897 984 535 -577 -1076 1861 -965 1033 -3913 1312 -2033 -839 711 1448 -208 40 -3519 -4080 -3397 102 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10259 -11301 -894 -1115 -9 -7324 * * 35 -609 -5587 744 2458 -2106 -2079 -1024 -2745 29 -1714 -4676 709 153 1024 -910 -141 -244 -1825 -5770 -2046 103 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 36 -629 -1047 -2491 -6110 -190 -5953 -1386 2354 -1263 -1225 -3437 -5597 -2576 -2261 -5508 -2809 -4347 2896 -4692 -1809 104 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 37 -990 -5587 -987 844 -2249 -1974 1502 -2464 1732 -2401 -4676 1149 -5180 623 890 501 1218 -2848 -5770 -5087 105 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 38 -1914 -1041 -2287 -2241 -5908 574 -524 -1760 2421 -5603 -4676 389 -5181 -1769 2305 155 486 -5209 -5770 -5087 106 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 39 -680 -5840 -9048 -8729 -6443 -8904 -8921 3001 -8702 -62 -1522 -8559 -2348 -8627 -8863 -8286 -6347 2557 -8224 -7742 107 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 40 1226 -1073 -6752 -6116 79 -318 -1357 -364 -2621 2139 1720 -5600 -6004 -1176 -5511 -5039 -2334 584 -4691 -37 108 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 41 -1525 28 -6788 -6153 1124 -5992 -4867 845 -5750 1468 -3467 -5639 -6041 -5374 -5551 -2101 1427 2260 -4731 -1455 109 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 42 2319 3368 -8274 -8327 -2171 511 -7163 -6782 -7927 -2466 -6344 -6699 -6732 -7419 -7589 87 2034 -2843 -7543 -7332 110 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 43 -2517 -4247 -6768 -6132 -1713 -2598 -4842 -183 -5727 2432 1044 281 -6020 -5350 -5527 -5055 -2152 2048 -176 -4365 111 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 44 -6066 -7643 3774 -204 -2008 -6159 -5463 -2365 -5650 -7661 -162 -1091 -6653 -5136 -6430 -570 800 -7240 -7930 -7047 112 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 45 1747 910 -6767 -6131 -1892 -5970 -4842 521 -5727 1288 -159 -5616 1730 -5349 -5527 -5055 -1668 1233 -4706 -244 113 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 46 -2665 1861 94 -1453 -5103 -2034 -4017 -1732 -3767 -1224 -4147 -122 -5401 -3695 -130 933 3140 -1928 -5324 -1738 114 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -13 -12109 -6794 -894 -1115 -701 -1378 * * 47 -256 -5567 -28 1840 -1312 -2685 -1192 -1662 -1005 647 634 -691 1584 461 -296 -100 -2336 -1804 -5752 -700 115 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12096 -13139 -894 -1115 -359 -2183 * * 48 1580 -5587 1563 2049 -1141 -2872 -323 -5659 -244 -5603 -4676 -2014 -284 862 -785 -342 -1154 -2923 -5770 -1798 116 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 49 -339 -920 -6757 -1187 -1187 -5962 -4834 200 -5717 253 -3443 -329 -6012 -5341 -5518 -160 1058 2871 -4700 -4358 117 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 50 405 -978 -2562 -6302 68 -6148 -5035 2248 -5905 1410 872 -5794 -6189 -5533 -5712 -2877 -4513 1967 -4893 -4550 118 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 51 -47 -5587 1930 2264 -5908 -2796 -3746 -5659 175 -1395 -4676 618 -2429 551 450 -1077 -714 -1903 -5770 -1856 119 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 52 -37 -5587 -44 2754 -21 -5088 -3746 -5658 798 -1323 -1437 -445 -5181 891 884 -1111 -4053 -5208 -5770 -1650 120 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 53 3483 608 -6846 -6214 -1779 -2936 -4932 -2227 -2630 -1373 -443 -5699 -6096 -5433 -5613 -5135 -4436 -1621 -4791 -4451 121 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -12109 -6918 -894 -1115 -701 -1378 * * 54 -200 32 -1455 -373 -4788 -2748 -4179 2655 468 136 -1189 -4370 -1622 -1766 -293 -1261 -1580 1165 -5117 -1486 122 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12098 -13140 -894 -1115 -1454 -655 * * 55 1116 -934 1094 2036 -1861 -1912 273 -5647 436 -3069 -4665 -353 -336 765 180 305 -4041 -5198 -5759 -1862 123 - -150 -501 233 50 -382 401 104 -628 211 -465 -722 274 394 44 94 359 116 -371 -296 -251 - -181 -5167 -3475 -1755 -507 -1454 -655 * * 56 51 -33 -4012 408 -2159 -1230 1479 -1098 1280 893 567 1199 -5134 425 333 -827 -1574 -1792 1012 -1778 130 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11962 -13004 -894 -1115 -2817 -221 * * 57 -2566 -5497 -179 -2085 -5818 2327 990 -5569 1457 -5513 -4587 2231 -2321 625 -402 -909 -3961 -5119 -5679 -4995 131 - -149 -500 232 42 -381 398 105 -627 212 -462 -721 275 393 45 95 362 117 -370 -295 -250 - -72 -4373 -13017 -34 -5410 -205 -2915 * * 58 2455 2546 -1771 -2723 -2094 -1914 -1442 -56 -5607 -2166 -3437 -201 -5975 -5253 -5450 -997 -951 1589 -4690 360 133 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12097 -13139 -894 -1115 -361 -2177 * * 59 -2065 -5937 3021 -513 -6250 -2744 -4039 -6010 -2129 -5950 -5036 2622 -5450 983 -2296 -18 -741 -5556 -6118 -5415 134 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 60 324 -940 -6758 -6122 1363 -5960 -4831 -1357 -5717 2374 2634 -2199 -6010 -5340 -5517 -2914 -739 212 -4696 -4354 135 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 61 -6950 -6379 -9549 -9137 -1292 -9440 -8815 3219 -9064 1733 -4313 -9123 -8772 -8296 -8870 -8857 -6886 1055 -7452 -7486 136 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 62 -7412 -6803 -9876 -9343 1002 -9722 -8544 2915 -9191 1103 -1071 -9435 -8787 -8028 -8737 -9124 -7282 2019 -729 -7234 137 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 63 1271 -4842 -7495 -6939 -4995 -6596 -5770 -2239 -6574 -1792 -1076 -6384 -6715 -6218 -6399 1687 2547 1551 -5626 -5277 138 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 64 -8548 -7657 -9047 -8870 -1965 -8826 5193 -7646 -1915 -3053 -7012 -7442 -8684 -7189 -1599 -8110 -8341 -7779 -4514 1937 139 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 65 -10068 -8941 -8614 -965 -10022 -8731 5431 -11325 -9792 -10673 -10610 -9232 -9187 -9513 -9585 -10274 -10202 -10986 -8996 -9816 140 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 66 -1903 -5824 -7117 -1878 -8491 1493 -7487 -8330 -8106 -8562 -7611 -6556 3921 -7476 -7986 -5421 -1644 -7018 -8696 -8574 141 - -150 -501 232 45 -382 403 105 -627 212 -467 -721 274 393 44 95 360 116 -370 -295 -250 - -111 -5657 -4212 -1551 -602 -701 -1378 * * 67 -1813 -4169 -6690 -6055 1819 -5893 -4765 1142 -5650 2176 -3369 -5539 1012 -5273 -5450 -2555 -1206 306 -4629 842 145 - -149 -500 232 42 -371 399 105 -627 212 -464 -721 275 393 45 95 358 117 -370 -295 -250 - -70 -4401 -13072 -34 -5435 -1362 -711 * * 68 -1940 -759 -7032 -6399 2695 -6251 -5119 2712 -6000 1052 1364 -5898 -915 -5594 -5792 -5341 -4621 -2435 -4932 -216 147 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12057 -13099 -894 -1115 -2697 -242 * * 69 -2485 -4188 -6705 -6069 3822 -2760 -4777 -1270 -2579 -820 -272 -5553 -5958 -5287 -1421 -4993 -2202 -3601 3864 1041 148 - -150 -494 247 45 -383 396 119 -621 206 -457 -694 273 385 45 87 358 108 -372 -285 -245 - -3075 -4018 -287 -3103 -179 -2697 -242 * * 70 -186 -3611 -2099 -1511 11 -3152 -1726 -3686 2411 -3603 -2706 1019 105 1771 1856 -2091 -2131 -3261 -3730 -3121 164 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -78 -9587 -4286 -894 -1115 -140 -3431 * * 71 -1745 -5467 -1219 -3296 -2254 1170 1409 -2306 1855 -1702 -4556 827 -499 -922 1989 422 -1513 -2688 -5651 -4969 165 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -16 -11986 -6569 -894 -1115 -1835 -474 * * 72 -240 -5484 -460 565 -5805 1747 -3643 -2202 294 -5500 -1334 -1023 2768 -443 -705 -576 -3950 -5106 -5667 -4985 166 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12001 -13043 -894 -1115 -2365 -311 * * 73 197 -4164 -2690 -2599 174 -5834 -1005 559 -1572 1855 668 -2381 1160 -2032 -5344 -758 -1097 969 616 -1779 167 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12015 -13057 -894 -1115 -503 -1764 * * 74 -1139 -5562 139 -99 -5884 -2034 -1300 -5634 2781 -1462 -4651 -777 281 1094 384 58 -1113 -5184 -322 -416 168 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -25 -12084 -5902 -894 -1115 -2010 -412 * * 75 272 -1081 42 -1583 -1144 -1770 115 -1482 503 -1786 -4625 331 -178 333 1667 1141 339 -472 -5720 136 169 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12060 -13102 -894 -1115 -2645 -251 * * 76 -2533 -4186 -6694 -1842 -983 -5905 -4776 2719 -995 1748 -193 -1140 -5955 -1795 -5459 -2609 -2050 1026 -418 -4301 170 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12060 -13102 -894 -1115 -2645 -251 * * 77 -1024 141 612 -173 -1884 -1194 124 -796 654 -1525 -1377 860 -2484 -1593 387 -731 2407 -320 -5716 -5036 171 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12060 -13102 -894 -1115 -2645 -251 * * 78 216 -1001 706 352 634 1712 -3702 -5594 -341 -752 -602 -1068 -872 -132 -1298 382 603 -2820 261 -980 172 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12060 -13102 -894 -1115 -2645 -251 * * 79 -517 -5538 1741 1218 -2327 -1908 -990 -494 375 -3284 1253 1169 -913 174 -41 461 -751 -1243 315 -5039 173 - -141 -506 229 36 -377 394 99 -620 211 -460 -715 281 390 39 92 358 115 -369 -301 -225 - -685 -3231 -1882 -1872 -460 -2645 -251 * * 80 -1962 -5108 2079 -1 -656 -499 -675 -2262 -493 -5124 -4197 1231 1187 -592 -147 132 1152 -1471 -5291 -430 178 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11603 -12645 -894 -1115 -5392 -35 * * 81 -361 -4295 -2014 -1350 754 -4960 -3688 -75 -626 -1036 -752 -1663 2240 -587 -973 -560 -1955 -634 1767 2837 179 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -19 -11603 -6290 -894 -1115 -286 -2474 * * 82 -2643 -702 -4755 -209 -1200 -5400 647 478 2114 -435 -267 -1164 555 1381 -1546 -1016 -761 622 -403 526 180 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12021 -13063 -894 -1115 -1492 -634 * * 83 345 -5528 -1997 754 -1304 1895 177 -2423 706 -5544 -4617 -113 -5122 1368 16 -186 -1662 -5150 -5712 1549 181 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12048 -13090 -894 -1115 -1837 -474 * * 84 338 -1159 -497 659 -2209 -1366 -354 -2630 1361 -3355 -4628 816 -5133 1102 2399 -207 -962 -5161 -5722 -5040 182 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12060 -13102 -894 -1115 -1507 -625 * * 85 -838 618 -6696 -6062 -4154 -5916 -4786 1695 408 1038 1635 -5556 -2629 -2313 1873 -175 -4311 776 -4657 -1464 183 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12073 -13115 -894 -1115 -2338 -318 * * 86 -332 -4198 -6715 -1687 -1777 -5919 -4790 2419 -1401 1580 -1193 -5564 -997 -5298 -2246 -5003 -2298 1429 -4656 879 184 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12073 -13115 -894 -1115 -2338 -318 * * 87 302 -4668 -4828 375 54 -1908 -479 865 1470 609 -1275 -4414 -5534 788 1034 -710 -1087 -919 -641 20 185 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12073 -13115 -894 -1115 -2338 -318 * * 88 -22 -5549 -286 -149 -560 -1178 -3712 -490 1957 414 -4638 -427 -884 1410 870 -2562 372 -2612 -5733 -1809 186 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12073 -13115 -894 -1115 -2338 -318 * * 89 1286 1044 -6818 -6184 -38 -6025 -4898 182 -5781 2678 61 -5672 -6068 -5398 -5580 -2728 -1601 -2219 -4751 -4415 187 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12073 -13115 -894 -1115 -2338 -318 * * 90 137 169 -6712 -2584 -1040 -5918 -68 2776 166 1324 253 -1303 -5968 -5296 -5474 -2820 -1534 -123 -4656 -1473 188 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12073 -13115 -894 -1115 -2338 -318 * * 91 -67 -5552 -923 1630 -5873 -2878 -1268 -5624 2215 -3226 -451 -3688 -2167 1754 1561 -1374 -619 -2519 -5735 -5052 189 - -150 -501 232 42 -382 398 105 -627 212 -464 -721 274 393 44 101 360 116 -367 -295 -250 - -88 -4081 -13115 -26 -5784 -191 -3015 * * 92 436 -841 -1033 -110 -5908 -574 2830 -5659 1026 -5603 -4676 2876 -959 -1761 -2164 -281 -4053 -2683 -5770 -811 191 - -137 -503 235 39 -384 395 109 -630 209 -459 -724 275 390 42 102 357 114 -366 -298 -247 - -29 -5657 -13151 -3385 -145 -701 -1378 * * 93 -1768 -5593 2221 -436 -5914 1650 -498 -5665 486 -3170 -4682 2500 -2429 -1022 24 -3999 -4058 -2773 -5776 -5093 203 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 94 -1901 1213 -6782 -6147 -4217 -5986 -4860 3501 -2589 691 626 -5632 -6035 -5367 -2258 -2760 -2347 -329 -4725 -4382 204 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 95 1575 -914 -5853 -5264 -4343 -554 -1433 -3891 -5018 -1718 -3564 1799 497 -2110 -5110 2060 -509 -36 -570 -784 205 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 96 -2046 -4252 -6773 -6138 -37 -5977 -1038 1326 -5734 2183 -3453 -2487 -6026 -5357 -5534 -5062 -1581 2196 -4712 -373 206 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 97 -7686 -7042 -9531 -9236 2147 -9280 -6513 1478 -8939 -114 267 -8481 -8662 -7744 -8402 -8559 -7531 -2062 -223 4013 207 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 98 2207 1305 -6435 -5950 -5530 -1365 -1179 -5104 -5728 -5420 -4722 -2453 -6253 -5523 -671 2461 273 -574 -253 -5582 208 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 99 1987 1187 -6753 -6117 394 -5954 -4826 825 -5711 330 1573 -5601 1334 -5334 -5511 -846 -2544 -794 -647 1520 209 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 100 -8799 -8407 -9472 -9840 -9476 -8455 5462 -10883 -9976 -10428 -10173 -9476 -8992 -9807 -9530 -9111 -2423 -10174 -8830 -9274 210 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 101 -5472 -5506 -734 -7737 -5885 -6792 -6915 -710 -7589 784 -4869 -6996 -7202 -7161 -7424 -275 3590 -2243 -6813 -6525 211 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 102 620 -768 -7570 -7575 -8163 -1961 -1071 -7953 -7487 -8176 -7239 3536 2168 -1897 -7476 14 -5523 -2505 -8355 -8181 212 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 103 -217 -1086 -6754 -6118 1568 -5956 -4827 -1118 -5713 2255 1199 -5602 -6006 -5335 -5512 -2843 -2224 -31 2639 1746 213 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 104 -7957 -8797 4199 -6020 -9373 -7466 -1062 -9970 -7498 -9638 -9246 -6400 -8024 -6923 -2262 -7650 -8076 -9451 -8872 -8633 214 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -14 -12109 -6746 -894 -1115 -701 -1378 * * 105 1925 28 -5541 -4962 -397 -2889 -539 1161 -55 -2952 -478 348 -2316 231 -130 921 -2533 650 -4854 -1508 215 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -14 -12096 -6727 -894 -1115 -1527 -615 * * 106 2194 615 -2255 -2127 -4863 -5387 3203 -1622 -1492 -1725 -1088 -10 -5467 -3857 -2002 114 -255 808 -5162 -1468 216 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -12082 -6902 -894 -1115 -2051 -399 * * 107 511 -1138 -939 171 432 -1390 1304 -1752 746 -1878 -4635 -756 2640 424 -262 -2434 -742 -1788 -5730 -1920 217 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -70 -12071 -4415 -894 -1115 -2392 -305 * * 108 -677 -5480 660 1364 -987 2021 -1169 -707 -266 -1826 -4570 1359 -353 -565 -3732 -1309 -476 -2566 -5665 -826 218 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1853 -12001 -468 -894 -1115 -3519 -132 * * 109 -2575 -2424 490 -4149 798 -4107 -2970 1190 -848 1877 -1625 -3704 -4158 -312 -447 -3185 -2516 1231 -2879 1008 219 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10150 -11192 -894 -1115 -158 -3270 * * 110 -2784 -5926 -5922 -5961 -7742 3720 -6126 -7438 -2348 -3166 -1557 -2213 -2059 -1980 -5815 -1888 -5550 -6658 -7730 -7392 220 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11999 -13041 -894 -1115 -456 -1885 * * 111 -665 -4207 -6726 -6090 -964 -5928 253 578 -5685 974 1837 1850 -954 -5308 -5485 -2019 793 1857 -4665 -4323 221 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12082 -13124 -894 -1115 -920 -1085 * * 112 308 668 -6007 -5411 -1862 -2084 -1074 -2237 -5141 -2812 -144 3714 -2145 -1883 -2263 826 -2216 -1622 -4765 -4401 222 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12095 -13137 -894 -1115 -342 -2244 * * 113 1015 -5576 2784 401 -23 -1360 -3749 -1825 -335 -5590 -1229 -1252 -5183 -235 -911 -1318 -72 -782 886 -213 223 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 114 525 611 -6114 -2621 -4285 -894 489 -761 -605 -312 136 -5277 -5904 1821 -2382 -1017 8 83 3751 1962 224 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 115 -2051 -879 -7341 -6708 841 -6573 -5436 949 -6315 2786 -286 -6222 -6561 -2223 -6096 -5669 -4925 488 349 -4910 225 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 116 2962 1192 -2408 -2847 -888 -590 -4811 -314 -5658 -848 -491 -2327 -5995 -1938 -5483 -298 -1160 -313 -4698 -1607 226 - -150 -501 232 44 -382 398 116 -627 209 -464 -721 274 393 44 97 360 118 -370 -295 -250 - -82 -4185 -13151 -28 -5719 -701 -1378 * * 117 -220 -5587 1403 1898 -5908 -2040 548 -2677 1682 -3379 -1544 850 -5181 1295 715 -1901 -4053 -5209 -5770 -5087 228 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 118 988 -77 -1553 -701 -1139 -573 -427 556 335 950 1222 -4117 -1509 482 1207 -1471 -2296 -163 -517 -4801 229 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 119 -2159 -914 -8720 -8110 -17 -8117 -6946 1044 -7781 3011 -496 -7782 -7811 -7080 -7479 -7277 -6252 -961 -6263 -1819 230 - -150 -505 235 40 -371 404 106 -619 210 -469 -725 273 393 40 93 359 121 -372 -299 -249 - -7274 -3634 -131 -1840 -473 -701 -1378 * * 120 -1183 -2220 622 753 691 191 -919 388 -592 -2169 -1352 844 -2325 -534 -1059 463 561 1061 -2502 -1926 235 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -152 -8589 -3359 -894 -1115 -182 -3073 * * 121 -1254 -5569 95 546 -5886 3041 214 -5641 -483 -3235 -4662 1299 -2347 -955 -3819 -1704 -4027 -5190 -5751 -5060 236 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11935 -12977 -894 -1115 -4099 -87 * * 122 -1164 -4065 -6584 -5948 91 -5786 -1218 1402 -2444 2621 -1124 -5432 -2479 -5166 -1481 -1695 -958 -1473 1902 -1706 237 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -16 -11935 -6518 -894 -1115 -4099 -87 * * 123 -2305 -1026 -250 1818 -1931 -350 -1048 -1146 955 -2230 -4495 -539 -2348 1727 128 -14 1303 -1815 -5589 -1839 238 - -150 -488 231 44 -377 399 104 -628 211 -465 -722 274 392 44 97 361 116 -371 -296 -245 - -4276 -5154 -120 -1801 -488 -4205 -80 * * 124 -1089 2492 -1903 -1368 -1763 406 -1271 1577 -1221 -1620 -903 -1441 772 1418 -1543 1348 -1103 -1154 -2111 -1677 247 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -817 -8273 -1220 -894 -1115 -130 -3541 * * 125 -469 -5432 1487 211 -5754 13 -335 -1504 1050 -5449 -1284 2065 -429 433 -1939 429 -557 -724 -5616 -1599 248 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11947 -12989 -894 -1115 -2823 -220 * * 126 -923 1880 -2592 -2611 -1124 -913 -4507 1923 -1615 -533 -376 -2247 -223 -1132 -12 -180 1161 1303 -504 -704 249 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11962 -13004 -894 -1115 -3892 -101 * * 127 -679 -913 -135 1487 -1006 -913 -298 -1175 1104 -2153 -1381 -912 -2144 -99 1492 73 599 -112 -5627 -778 250 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -14 -11962 -6687 -894 -1115 -3892 -101 * * 128 -357 -984 -2189 -85 -1156 -1229 304 286 -1191 -5193 190 359 2887 -3251 -1406 -125 -1449 848 -5459 -1781 251 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -13 -11948 -6889 -894 -1115 -2798 -224 * * 129 -2547 -4081 -6601 -5964 2591 -5802 -261 1243 -2629 2248 -1131 -5448 -1306 -5182 -5359 -2704 -2340 -121 -4539 -1298 252 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -39 -11952 -5227 -894 -1115 -3976 -95 * * 130 -131 -877 1617 1209 -1914 1022 -344 -1687 866 -1227 -4488 -920 -2071 -60 -826 273 -516 -830 -5582 -1596 253 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -85 -11913 -4132 -894 -1115 -3234 -162 * * 131 -1778 -5317 539 154 176 -2549 -800 -670 89 -606 -1169 186 2316 -19 -542 -294 -310 142 -5505 282 254 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -208 -11841 -2901 -894 -1115 -4629 -60 * * 132 -421 428 -213 -1244 -1847 -2479 972 -2151 -124 -430 -959 795 -606 -2978 -1830 1287 1468 -2075 -171 2123 255 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -33 -11634 -5484 -894 -1115 -2427 -297 * * 133 -677 -5193 -544 805 -924 248 547 -1499 1098 -331 358 562 363 1152 81 127 -2065 -1591 -5376 -131 256 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -315 -11695 -2352 -894 -1115 -5156 -41 * * 134 1045 -337 417 914 -704 -59 -3061 -811 679 -2654 -3988 831 -1002 -348 -322 805 -13 -1300 -5082 -1080 257 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -130 -11381 -3544 -894 -1115 -5800 -26 * * 135 -348 -4777 867 1371 -1480 432 -2942 -1781 563 -1735 -714 1278 547 -1038 -1359 367 -280 -530 173 -4280 258 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -321 -11252 -2329 -894 -1115 -2996 -193 * * 136 85 1390 823 59 -4949 115 -43 -879 892 -949 -430 573 660 483 -1334 25 425 -1713 -4813 -807 259 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -121 -11088 -3640 -894 -1115 -6147 -21 * * 137 -1602 -4454 -1182 318 -4745 -395 660 -266 -303 1190 423 -794 -513 95 -342 -2951 -1348 -914 -4656 2854 260 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -409 -10968 -2021 -894 -1115 -6252 -19 * * 138 -448 344 -174 -197 -823 -3753 1091 199 622 -1075 -2980 -2452 1095 -409 -878 28 -1012 938 -4118 2136 261 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -110 -10560 -3781 -894 -1115 -6515 -16 * * 139 -1175 -4093 -804 -761 -4415 48 -2247 -4165 3241 -4108 -3183 -2221 -3682 -234 -618 -352 819 -3716 -4274 -3592 262 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -36 -10451 -5379 -894 -1115 -6567 -15 * * 140 -1125 601 -4970 -1370 -2621 -1468 1144 1370 -3981 2143 253 -726 -17 -470 -3847 -1156 -2750 -73 921 -2773 263 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10417 -11459 -894 -1115 -6583 -15 * * 141 1146 -3848 4 -1967 -4090 60 -2258 -218 -530 -3830 -2959 -2262 -3681 -148 637 -361 -129 2387 -4081 -3451 264 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -80 -10417 -4226 -894 -1115 -6583 -15 * * 142 -340 -2574 -5090 -4454 -258 -408 216 208 -4050 -477 -1777 -3940 -4345 -3673 -3851 -3379 1600 2720 -3032 722 265 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10338 -11380 -894 -1115 -6616 -15 * * 143 -3292 -3604 -3763 -193 3647 -4456 1707 -3227 -3292 -3442 -2801 329 106 -3117 -3593 -1073 -3235 -955 -3197 1978 266 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -44 -10338 -5108 -894 -1115 -6616 -15 * * 144 -375 -2545 -4971 -4341 -349 -1211 -3113 731 -1086 -1195 -1748 -3865 -4296 -3592 -18 -1094 -845 3118 -3002 -2658 267 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10296 -11338 -894 -1115 -6633 -15 * * 145 -986 -2583 -5030 -4407 -2556 -4251 -3170 -2090 -4017 -94 479 -3908 3666 -3652 -3839 -360 -759 -569 -3059 38 268 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10296 -11338 -894 -1115 -6633 -15 * * 146 512 561 -2361 1959 -4099 -332 1123 -1071 195 -1484 332 -2114 -853 -221 -645 -257 819 225 -4036 -3382 269 - -149 -504 239 51 -377 400 107 -627 206 -471 -715 281 391 44 94 360 117 -374 -299 -254 - -5460 -74 -5189 -6 -7974 -6633 -15 * * 147 198 504 131 76 -4176 -1069 3563 -3918 -1649 -3879 175 -2044 -3496 1429 -592 -288 -577 -1143 -4059 1944 271 - -142 -504 230 49 -376 394 101 -627 208 -463 -725 276 391 44 91 359 117 -364 -287 -249 - -5421 -35 -11299 -6 -7974 -6648 -14 * * 148 248 -3895 2202 2342 -475 -1150 -2056 -942 -1636 -3910 -2984 -427 -810 15 -550 -886 -736 -3516 -4078 -3396 273 - -142 -504 233 51 -385 398 101 -627 209 -471 -725 271 396 44 101 357 121 -371 -299 -254 - -5421 -35 -11299 -6 -7974 -6648 -14 * * 149 -269 -2518 -820 -1140 -182 -4223 -3092 -580 -3937 1069 -1721 -3845 -4273 -3574 -3763 -1224 -753 2947 -2978 -2634 275 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10257 -11299 -894 -1115 -6648 -14 * * 150 811 -3719 -2374 -1824 -450 -1241 -2117 -3663 952 461 -2828 -377 -3540 512 2601 -933 -579 -989 -3949 -3316 276 - -147 -504 239 49 -385 395 101 -627 215 -469 -725 275 389 53 98 359 115 -371 -299 -254 - -5421 -35 -11299 -6 -7974 -6648 -14 * * 151 2787 -2620 -4232 423 -2591 -1277 -2913 -649 -970 -21 1332 -3461 -4146 -3135 -3437 -977 -2581 -47 -3062 -2696 278 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -42 -10257 -5150 -894 -1115 -6648 -14 * * 152 -2636 -2524 -1008 -4001 -2485 -1104 -2993 1540 -948 2344 2452 -3659 -718 -3368 -3603 -971 -2577 -1941 -2977 -2626 279 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 153 1172 1582 -4540 -1068 1685 -415 -2963 -512 -1035 73 -1720 332 -4170 -3314 -3562 1319 -570 65 1059 -2617 280 - -145 -504 239 41 -385 399 101 -627 210 -470 -725 285 393 54 96 357 113 -368 -299 -254 - -5380 -36 -11258 -6 -7933 -6663 -14 * * 154 2191 -3245 -2702 11 -552 -3581 342 -2964 -2037 290 247 -416 -3665 -55 -499 275 142 411 -3576 -3057 282 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 155 -1003 736 -2367 -1816 -3907 3098 -2100 -3599 -422 -1391 197 -422 -607 -90 -506 -946 -2360 -3246 -3905 -3281 283 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 156 2819 679 -4072 -97 -2583 -1276 373 -552 -3240 -365 -1803 -3351 -854 -3015 -648 -3062 -759 101 -3046 -2675 284 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 157 -148 882 -3629 -3058 -2773 2997 1307 -696 -2870 -459 -1964 -533 -3987 -2710 -641 -1095 -681 -2213 -3195 -2796 285 - -145 -504 228 43 -368 396 128 -620 208 -470 -725 276 389 47 99 359 115 -371 -274 -254 - -5380 -36 -11258 -6 -7933 -6663 -14 * * 158 -2634 -2473 -4894 -955 -252 1394 -3039 2992 -3878 -429 -1675 -3790 -4223 -353 -3708 -971 -571 -571 1298 -2585 287 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 159 -3625 -4369 -579 -3535 -5691 3282 -4321 30 -4667 -5575 -4855 1419 -4875 -4123 -5177 -1087 -3923 -233 -5976 -5440 288 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 160 -994 -3854 1064 -505 -429 599 373 27 -410 -3869 -2944 2804 -3456 -1563 -373 -921 77 -3474 -4039 646 289 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 161 -2410 -3668 202 -550 -3906 -275 -2088 -940 -1708 -3648 411 -322 -3510 679 -568 -2335 -661 -1114 -3903 3987 290 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 162 -2463 575 1513 126 501 -296 -2278 -2976 -2029 -1342 -2405 -2374 -3662 -1957 -607 2283 -724 -977 -3582 1361 291 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 163 -909 2076 1299 579 -4174 -3363 2704 -3923 -1603 -1644 -2945 841 -777 -61 -542 691 51 -1029 -4040 888 292 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -47 -10216 -5006 -894 -1115 -6663 -14 * * 164 -835 5013 -3632 -883 -254 -3883 1348 -2550 -2962 -2857 -2168 -487 -4037 -2802 -3208 961 -2613 -803 -3390 -2984 293 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -50 -10171 -4925 -894 -1115 -6679 -14 * * 165 750 901 -5604 -5273 1215 -868 -4241 -3517 -4930 -3857 -3168 -4347 -4580 -4552 -4772 1887 2712 -3243 -4387 -90 294 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -53 -10123 -4824 -894 -1115 -6695 -14 * * 166 -917 -2587 -556 -2992 3597 -3804 -2591 -472 -2797 -2453 -1776 -2985 -3870 -286 -577 720 -556 -2022 1164 875 295 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10072 -11114 -894 -1115 -6712 -14 * * 167 -87 -3730 -2118 725 1017 -190 -1902 -873 -200 -3744 240 470 -3336 687 1434 1257 639 -3349 -3916 -3235 296 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -56 -10072 -4762 -894 -1115 -6712 -14 * * 168 -143 -3426 -2229 -451 -3637 -3275 1950 47 -306 -3394 375 546 -671 -1535 -411 858 1318 1404 -3679 -36 297 - -145 -504 233 54 -385 398 102 -630 206 -470 -724 276 394 47 102 357 120 -370 -298 -253 - -5183 -41 -11061 -7 -7732 -6729 -14 * * 169 -4269 -5366 -3182 1076 -6168 3311 -3227 -5700 -379 -5431 -4735 -3299 -4862 -2833 -360 -4091 189 -5323 -5369 -5013 299 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10019 -11061 -894 -1115 -6729 -14 * * 170 -2225 1684 -459 658 -4000 770 -1859 519 -155 -3698 -2775 -1838 -3293 112 -315 -690 2651 -3303 -3871 -3192 300 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -99 -10019 -3935 -894 -1115 -6729 -14 * * 171 -2703 -3603 -392 -408 696 3241 -2449 -619 -2254 -3564 -2799 -2349 -3784 -2123 -448 -2702 -558 -3141 -3946 -3383 301 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -106 -9922 -3836 -894 -1115 -6757 -13 * * 172 -2421 1126 -3317 -2788 1762 147 -2711 -2954 -2577 -3211 -2477 -2825 -3799 1470 -178 -686 2997 -2713 -3666 -3230 302 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -9818 -10860 -894 -1115 -6784 -13 * * 173 -5051 -4563 -6429 -6412 4098 -5976 -2938 -4293 -5991 -1192 -3850 -5041 -5977 -5080 -5553 -874 961 -4326 -2239 1417 303 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -9818 -10860 -894 -1115 -6784 -13 * * 174 -2397 -2566 -3474 -2851 862 -3713 -2426 -403 2028 590 -1745 -2846 425 157 2319 -2742 -2327 -427 -2963 -2579 304 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -9818 -10860 -894 -1115 -6784 -13 * * 175 85 -3070 -4392 -3990 -3786 114 -3548 -3321 400 -304 -2953 -3629 3594 -3526 -3647 -2975 -2878 -596 -4160 -3815 305 - -148 -503 229 40 -384 403 102 -630 207 -454 -724 279 397 48 95 356 114 -367 -298 -253 - -4982 -47 -10860 -8 -7527 -6784 -13 * * 176 114 -3672 -2821 3132 -4752 1126 -3040 -4470 -2831 -1201 -3709 -2784 -418 -2678 -3295 -2768 407 -3911 -4815 -4242 307 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -9818 -10860 -894 -1115 -6784 -13 * * 177 948 -6019 777 -289 -6202 3137 -3354 -6138 -563 -5995 -5336 -76 -4530 -3024 -4500 -3739 -4160 -5598 -6191 -5151 308 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -9818 -10860 -894 -1115 -6784 -13 * * 178 2010 -3468 -1990 -255 -3795 -755 -1767 -3524 -1363 -3511 558 -5 -3182 -1320 -229 579 2263 -3105 -3712 -3052 309 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -9818 -10860 -894 -1115 -6784 -13 * * 179 -611 -3486 -192 -1382 -282 -3045 702 -3523 -1296 -3494 -2582 3129 393 906 -1800 682 -387 -609 -3683 -3013 310 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -181 -9818 -3098 -894 -1115 -6784 -13 * * 180 -3995 -4635 -3861 -4003 -6304 -4447 -4138 -6292 -3341 -6125 -5449 996 4064 -3869 -135 -4075 -4261 -5510 -5792 -5631 311 - -147 -502 231 43 -377 398 115 -628 208 -466 -722 278 400 43 94 357 115 -371 -296 -251 - -453 -1896 -10682 -1177 -843 -4742 -55 * * 181 46 -2133 -625 -3917 3118 -3829 -2697 652 -3533 -1982 -1336 -3446 -277 -3173 -3366 -2911 1291 -268 -2589 2006 319 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -9818 -10860 -894 -1115 -6784 -13 * * 182 -2563 1054 -4934 -4318 -2376 165 -3079 2918 -3931 -158 -1582 -3818 -4207 -3567 -3745 -3267 -360 1759 -2934 442 320 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -9818 -10860 -894 -1115 -6784 -13 * * 183 -3254 -4032 -315 -3268 -5578 3510 -3895 -396 -3800 -5425 -4669 -3341 -4509 -3644 -204 -3348 -401 -4570 -5684 -5191 321 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -9818 -10860 -894 -1115 -6784 -13 * * 184 1392 -3569 -1917 1689 -3896 -645 -1733 -3647 540 -3592 -2667 -1701 -3163 2041 -1822 -599 1545 -3197 -3760 -3077 322 - -150 -503 229 42 -384 398 102 -608 215 -467 -724 272 390 51 95 356 120 -362 -298 -253 - -4982 -47 -10860 -8 -7527 -6784 -13 * * 185 -2708 -4153 -139 -145 -224 3097 732 -4161 -2012 -1099 -3281 730 -3651 -1866 -2563 -704 -2670 -3747 -4356 -3644 324 - -148 -503 236 52 -384 395 108 -625 215 -469 -724 274 390 57 100 356 114 -373 -298 -253 - -4982 -47 -10860 -8 -7527 -6784 -13 * * 186 -677 -2135 -667 -3848 19 -953 -2678 955 -3478 2208 -1337 -3409 -3866 -170 -3333 610 -2225 521 -2591 -2245 326 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -9818 -10860 -894 -1115 -6784 -13 * * 187 185 -2770 -2758 3005 -2835 -3475 2124 475 -2166 -1004 -1963 -2430 -3583 -2066 -2517 -2485 422 -2213 -3179 -2724 327 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -9818 -10860 -894 -1115 -5783 -26 * * 188 -1 -3572 -1947 877 -3893 -909 663 -3643 1198 -3588 -2661 -1709 -3167 870 2261 153 796 -662 -3755 -3073 328 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -9869 -10911 -894 -1115 -5713 -28 * * 189 484 -2435 -4228 1329 -2439 -919 -2892 -1851 -3503 -917 -1672 -3458 -4050 -3209 -3478 -3047 -2465 3013 -2938 357 329 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -9922 -10964 -894 -1115 -5134 -42 * * 190 319 -3757 1718 2207 -4076 -947 649 -3828 -1497 -3772 -2848 517 1195 -1449 371 -2157 -2221 -780 -3940 -3254 330 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10019 -11061 -894 -1115 -6729 -14 * * 191 -3298 -4845 -157 3450 -5107 -82 -2805 -843 -2640 -4844 -4005 -2429 -537 -145 -3244 -3106 -3283 -793 -5047 -4274 331 - -151 -504 229 46 -376 395 102 -623 206 -466 -724 274 390 48 97 358 120 -350 -298 -249 - -5183 -41 -11061 -7 -7732 -6729 -14 * * 192 -3521 -3782 -4573 -3605 -312 -4589 -2894 -501 1702 -1250 -2915 -3531 -4584 742 3390 -3739 -3372 -652 -3985 -3690 333 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10019 -11061 -894 -1115 -5584 -30 * * 193 -3146 -2911 -5457 -845 -2943 -4821 -3762 2744 -726 1812 -2070 -4437 -651 -4171 -4332 -3935 -3094 1058 -3613 -3269 334 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10072 -11114 -894 -1115 -6712 -14 * * 194 -94 -4388 -2202 3313 -4745 -3659 -2506 -4504 -484 -1334 -3566 -243 -3878 -2076 -2684 733 -2889 -4050 -4624 -3917 335 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10072 -11114 -894 -1115 -4964 -47 * * 195 -945 -2439 -4845 -21 -2395 -4135 -3002 1100 -3833 1142 476 -3749 -783 -3475 -3668 -247 2539 132 -2896 -2552 336 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10171 -11213 -894 -1115 -5589 -30 * * 196 -2637 -2477 -4891 -1064 670 -4175 -3042 2445 -3876 -465 -1679 -721 -4225 -3517 -823 -243 642 2048 -2934 -2590 337 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 197 -875 2654 -838 -4341 524 -4183 -3054 646 -3937 607 641 -673 -633 -3560 -3738 -1054 -683 2255 -2921 -78 338 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 198 -934 782 -635 -2741 -2874 -1165 397 -541 -2584 -1266 -2037 -2842 3160 -2456 695 -333 102 13 -3257 -2832 339 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 199 1044 627 -2244 1164 -4187 -3369 -2026 -3937 992 -3881 -2955 437 -3462 2346 1635 -857 -2334 -956 -4048 -3367 340 - -147 -504 238 43 -385 395 123 -631 211 -470 -725 278 389 44 98 362 115 -374 -285 -239 - -5380 -36 -11258 -6 -7933 -6663 -14 * * 200 179 775 -2272 115 -4084 -1113 -2042 -891 607 1097 -2890 1587 -3473 689 1579 -2289 -732 -3399 -3995 -289 342 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 201 235 -3577 755 568 -3782 -3449 -2123 827 -531 1982 -2698 -2144 -3538 544 -580 -2369 -664 -925 -3834 -3230 343 - -142 -504 233 45 -385 399 101 -631 213 -466 -716 271 389 41 98 361 119 -371 -285 -248 - -5380 -36 -11258 -6 -7933 -6663 -14 * * 202 831 -3855 -2238 627 -4173 -321 -2022 -41 1195 -1571 -2944 -312 -3456 1407 690 679 521 -951 -4040 -3358 345 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 203 846 -2538 -772 -4151 -2508 -4196 -3065 731 -3805 -985 -1745 -3760 -4250 -378 -3697 -1100 589 2914 -3011 -2662 346 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 204 -221 -2771 -5354 -4740 -2771 -4598 -3508 2383 -4355 1256 1304 -4245 -4627 -3988 -662 -3697 156 1758 -3353 -3009 347 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 205 1089 -3864 -528 111 -4185 -3364 -2023 -3936 2279 -3880 -2953 461 -3457 1709 694 -236 -2330 -151 -4047 -3364 348 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 206 2587 -2547 -801 -1088 -383 -4086 -2923 658 -3485 -300 489 -3526 -4142 -3213 755 -1160 40 -573 -2994 -2635 349 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -6663 -14 * * 207 651 -2483 -4954 -4320 -2432 -4194 454 719 -844 1769 3405 -3826 -4243 -442 -3736 -3278 -2591 156 -2939 -2597 350 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10216 -11258 -894 -1115 -5628 -29 * * 208 -2593 -3147 -3047 -866 -3209 -3770 2151 1464 1214 1687 -2313 -2660 -3847 1447 -2635 -336 -2529 -973 -3506 -3041 351 - -138 -504 233 49 -385 395 101 -624 219 -466 -725 273 391 44 97 358 115 -374 -299 -254 - -5421 -35 -11299 -6 -7974 -6648 -14 * * 209 2461 -3194 136 -814 -348 -3662 1845 -2878 -2170 -3103 451 -2500 -826 598 -2580 -2613 -2455 1195 -3541 -200 353 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10257 -11299 -894 -1115 -6648 -14 * * 210 -887 -3727 -2420 -627 -3968 -3492 4655 -3659 -1783 -1507 -2848 -265 681 -1744 -620 -134 -2429 -984 -3969 -3347 354 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10257 -11299 -894 -1115 -6648 -14 * * 211 -2500 -3898 -2316 132 -4186 -3464 1355 -3916 -1739 -1516 -2998 -250 3459 530 -2240 -953 -735 -3503 -4099 785 355 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10257 -11299 -894 -1115 -6648 -14 * * 212 -205 -3376 -630 146 -3501 -3596 -2296 -3127 -2021 -1528 -2523 -2368 736 -1953 -627 -2539 -702 -1039 -3692 4082 356 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10257 -11299 -894 -1115 -6648 -14 * * 213 -244 -2963 -3287 3138 -3006 -1139 -2616 137 -2599 -1195 -2160 -2855 -3924 -2476 -2920 -275 -599 -2433 -3376 1305 357 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10257 -11299 -894 -1115 -6648 -14 * * 214 -2426 -3863 -544 3070 -657 -1069 -2065 -3909 250 -1671 362 -431 -3498 646 -2156 -2313 -720 -1161 -4055 -217 358 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10257 -11299 -894 -1115 -6648 -14 * * 215 -881 -3348 -720 -2114 -3470 -3586 -2281 22 -657 -3276 -2494 -311 1963 -1940 -549 -265 175 2456 -3664 -171 359 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10257 -11299 -894 -1115 -5613 -30 * * 216 2807 -2535 -5044 -4408 -224 -4254 254 -590 -4005 -43 -1738 -3897 194 -3630 -3808 -1096 -835 -19 1234 38 360 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10296 -11338 -894 -1115 -6633 -15 * * 217 -2654 -2723 143 -237 356 -4050 349 -648 -3158 -518 441 230 -878 -522 -3308 -3078 -2595 839 -3155 3639 361 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10296 -11338 -894 -1115 -6633 -15 * * 218 -2866 -2766 3236 -284 -251 -4360 -3230 1009 -3843 -19 -1954 -3820 -4418 -3545 -3821 128 -2810 149 -3261 -2903 362 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10296 -11338 -894 -1115 -6633 -15 * * 219 -2708 629 -846 -4412 -220 -4255 -3125 1676 -970 1797 399 -3899 95 -3632 -3810 -1054 -758 1262 -2992 -93 363 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10296 -11338 -894 -1115 -5533 -32 * * 220 -313 -2920 -3513 -2945 412 -1204 241 1107 -24 -1364 369 -485 -731 430 -3058 -1197 -860 -2366 -3328 3514 364 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10338 -11380 -894 -1115 -6616 -15 * * 221 -334 -3932 149 -556 -4238 -1152 -2135 -945 -585 76 -3025 -2116 3016 -59 118 -992 -36 -1180 -4125 -3451 365 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10338 -11380 -894 -1115 -4920 -48 * * 222 110 -3184 -3198 353 -3232 -3887 -2617 -928 -728 2226 -2354 -574 -879 346 -2871 -2854 11 900 -3559 -3099 366 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10417 -11459 -894 -1115 -6583 -15 * * 223 -13 -4032 879 2200 -4353 -352 -2193 -1033 1113 -982 228 -470 -65 923 -585 -2440 -2499 -3654 -4216 -397 367 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10417 -11459 -894 -1115 -4150 -84 * * 224 300 -4147 -876 -851 -4464 -533 -2321 -1420 -712 -4161 -50 3066 728 869 -2409 10 -2625 -1242 -4334 597 368 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -10560 -11602 -894 -1115 -2864 -213 * * 225 -402 -4440 483 290 -4761 -321 667 -1437 1100 -52 -3530 -2579 781 563 1038 -286 14 -580 -4624 288 369 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -10880 -11922 -894 -1115 -3343 -150 * * 226 -73 -4526 -78 952 -399 1474 -358 -805 -1222 250 -3623 837 -74 -2318 -464 -225 -133 -1571 230 -607 370 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11041 -12083 -894 -1115 -2700 -241 * * 227 -27 -440 -1489 1746 -428 -1272 -537 -4848 -776 -100 -3868 -1273 1279 849 586 291 -827 -1061 -4963 399 371 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -179 -11252 -3102 -894 -1115 -267 -2564 * * 228 -412 -736 706 1472 -2130 1457 -293 -1123 -182 -1271 -4470 135 -894 249 -1276 -261 -589 -63 -5565 -70 372 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11896 -12938 -894 -1115 -4349 -73 * * 229 492 1349 381 993 -604 -2740 -118 -127 -537 78 -4426 -1057 -2229 302 -474 -861 926 -507 -419 1350 373 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11896 -12938 -894 -1115 -4349 -73 * * 230 -1746 -889 -745 -715 -5704 3127 -1002 -2362 1 -5399 -358 112 -147 -670 -3631 -309 -2232 -5005 -5567 -4884 374 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11896 -12938 -894 -1115 -4349 -73 * * 231 -1643 191 -1625 -2723 257 -2838 -1313 1749 -2335 1771 2596 -5382 -5795 -2012 -5295 -386 -1480 -893 -4488 1165 375 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11896 -12938 -894 -1115 -4349 -73 * * 232 -703 -839 -2414 -2690 -4078 3498 -4493 -3621 -5063 -1215 -1092 -5099 -1965 -4788 -2163 -2659 -4118 -958 -4559 -1198 376 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11896 -12938 -894 -1115 -4349 -73 * * 233 -1661 895 -2101 -5862 966 -2400 -1268 -146 -728 -1069 244 -1388 -5792 -5101 3228 -4824 -1934 552 1446 -758 377 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11896 -12938 -894 -1115 -4349 -73 * * 234 -2506 -4031 -2101 -5880 -3985 -5744 -4614 2761 -645 940 239 -5380 -5794 -561 -2315 -942 -2287 1411 -441 964 378 - -147 -500 233 43 -381 398 105 -627 210 -466 -721 275 393 45 96 359 117 -366 -295 -250 - -34 -5420 -12938 -72 -4361 -45 -5026 * * 235 307 2285 -6733 -6098 419 3046 -4823 -2151 -1710 -4085 -1322 -2251 -6002 -5324 -5504 -1141 -2293 397 -4694 -1395 380 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -12109 -7088 -894 -1115 -701 -1378 * * 236 -962 -5574 -97 1759 -1302 -1286 507 -2567 825 -1860 -533 -333 -5171 534 665 -1808 1323 -230 -5758 1048 381 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -12099 -6941 -894 -1115 -395 -2063 * * 237 -2710 -137 -6741 -6105 1258 -5943 -4814 1293 -2559 2597 -3425 -1325 -1536 -1931 -5500 -2730 -2329 -246 -631 -534 382 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -12098 -6988 -894 -1115 -1440 -663 * * 238 204 -910 1717 1354 -2135 -1889 -1190 -5637 653 -5581 -1541 468 1949 -599 -1388 169 -444 -5187 -5748 -5065 383 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -40 -12087 -5214 -894 -1115 -262 -2589 * * 239 -797 105 -213 1706 -1230 -686 183 -1849 1050 -1140 -1526 218 -122 1487 72 -720 58 -651 -5732 -5050 384 - -150 -501 234 42 -382 397 104 -623 209 -467 -722 274 395 44 95 361 119 -364 -296 -251 - -477 -3742 -2273 -21 -6110 -2386 -306 * * 240 276 -565 -1171 230 -5558 -972 -3396 -5309 530 -5253 -4326 -18 3142 -2936 -995 647 -420 -4859 -5420 -4737 386 - -148 -501 234 46 -378 397 104 -624 209 -467 -722 274 392 44 97 359 118 -371 -296 -245 - -47 -4965 -12779 -1732 -517 -323 -2319 * * 241 -1000 791 -2180 -106 -555 -2818 -4693 1371 -50 789 2704 -5373 -5893 673 -5312 -1360 177 1109 -4664 -4313 391 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12045 -13087 -894 -1115 -125 -3594 * * 242 -1461 -5587 -282 -130 -5908 -1976 -1154 -5658 -161 -2236 -4676 -140 552 -3286 -1503 2279 2200 -2881 -5770 -1939 392 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 243 527 -4242 -6676 -1015 1572 -2079 -4811 38 -1843 2145 -397 -5565 -724 -2174 -1585 -2058 -1006 375 976 -4354 393 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 244 706 -5586 1263 1590 -2333 561 148 -1611 183 -2507 -4676 -1189 -1034 555 436 376 -2085 -1940 -723 -950 394 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 245 309 -5586 2192 2201 -2396 -1957 -1360 -1848 -749 -5602 -1509 296 -5181 831 -2177 -584 -731 -557 -5770 -1668 395 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -260 -12109 -2602 -894 -1115 -701 -1378 * * 246 -862 -712 -6541 -5905 3014 -5744 -4615 1180 -5500 1914 787 -5390 -2138 -5120 -5299 -4829 -4135 -946 -457 -219 396 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -16 -11850 -6527 -894 -1115 -3504 -133 * * 247 1882 1173 -6501 -2493 -3942 -2666 -4580 1898 -5462 646 -3191 -5352 -5757 -5086 -2376 -1161 -657 1681 -4447 -4105 397 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11849 -12891 -894 -1115 -4596 -61 * * 248 587 -928 842 745 -2023 -724 352 -1707 1643 -538 -1031 576 -4933 1126 414 -155 -1943 -2616 -5521 -4839 398 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -15 -11849 -6657 -894 -1115 -4596 -61 * * 249 -233 -5312 652 -526 145 -2447 1575 -443 1336 -939 -1192 -539 -4923 695 1805 -1160 -3793 -738 -5499 1294 399 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11834 -12877 -894 -1115 -36 -5338 * * 250 -117 -146 -6753 -6117 501 -5955 -4826 1867 -5712 1421 -450 -5601 -6005 -2059 -2515 -5039 -2348 2280 -647 -864 400 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 251 1149 -1119 -2236 -598 -5901 -2789 -1122 -1811 3032 -1809 -567 -1930 -5182 -552 -311 148 -1170 -2866 -5767 -1856 401 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 252 532 -1150 588 1966 -5908 -2018 -1254 -2640 1395 -2387 -4676 425 -2413 1173 -970 263 252 -5209 -5770 -5087 402 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 253 442 -5440 -2173 -3499 -370 -1095 1022 265 1455 -354 -4547 458 -5224 52 1547 637 -796 -272 -591 -5022 403 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -15 -12109 -6628 -894 -1115 -701 -1378 * * 254 -4408 -1001 -6754 -6118 1947 -5956 -4828 410 -5713 2604 602 -5603 -1307 -5335 -5513 -1858 -1121 -155 -4691 -831 404 - -148 -488 231 44 -377 403 104 -628 214 -468 -722 279 392 43 94 357 116 -371 -296 -251 - -564 -3252 -2195 -15 -6613 -1580 -587 * * 255 57 -895 186 -20 -5557 1618 -147 -5308 552 -2729 -4325 1856 490 -221 275 248 -1942 -2352 -5419 -1599 406 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11739 -12782 -894 -1115 -2742 -234 * * 256 364 720 -620 -1419 -1588 -2610 -982 1653 -2470 1540 -1043 -5210 25 -4930 -1872 -1079 -862 1182 -4402 -336 407 - -135 -504 229 45 -385 400 102 -630 209 -466 -724 271 396 41 92 357 125 -367 -298 -253 - -231 -3842 -3677 -2051 -398 -412 -2011 * * 257 -642 -5427 299 1811 -2096 178 -162 -5499 562 -1742 -4516 32 1695 849 -1317 -216 214 -5049 -573 -4927 417 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11941 -12983 -894 -1115 -2166 -364 * * 258 -129 -80 -572 -594 -223 772 2155 -1085 805 -5471 -1310 544 -1406 -347 307 331 517 -1890 -5639 1173 418 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2005 -11973 -414 -894 -1115 -1547 -605 * * 259 -948 -2834 -3138 -686 -2860 1137 -2455 1494 645 22 -2011 -386 -3782 -157 -2752 -2689 756 827 -3227 1500 419 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -95 -10136 -3996 -894 -1115 -6691 -14 * * 260 -2471 -2355 -445 -3861 646 870 -2831 -73 -656 1715 896 -3508 -658 -3214 -3448 -952 251 -1772 -2807 2066 420 - -150 -503 234 46 -380 406 107 -630 207 -470 -724 280 390 59 95 356 116 -370 -298 -253 - -5208 -170 -3575 -7 -7629 -6721 -14 * * 261 -630 -3568 -331 -229 -412 -883 2097 -770 1368 -931 -2662 -1766 -3216 212 2244 -2032 -378 184 -3763 -3092 422 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -9918 -10960 -894 -1115 -4503 -65 * * 262 -892 820 -499 204 -4067 -3256 1463 8 -324 -3764 -2838 -276 2271 903 -206 874 -2220 -828 -3933 776 423 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10089 -11131 -894 -1115 -5628 -29 * * 263 785 902 -4799 -995 127 483 656 785 -3789 -2254 -1607 -3708 1696 -3432 -627 -3177 -2502 1667 1387 330 424 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2 -10136 -11178 -894 -1115 -9 -7368 * * 264 -893 -4235 -2719 -6107 -544 -2056 -4824 1929 -5704 1625 -372 -1433 -912 -1317 -1706 -5037 -1087 2061 -4692 -4350 425 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 265 -540 -1055 -2309 -2183 -344 -2719 434 -1114 353 -1539 -536 -1852 -911 1067 3011 -728 -1025 133 -584 -5033 426 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 266 -425 -122 -6746 -2036 534 -5953 813 1050 -2719 518 -1292 -2239 -6003 -5330 -2498 -916 -105 2272 -4692 1829 427 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 267 1494 564 -2592 -1873 -4348 447 -4600 487 -2507 -1630 -3568 774 -324 -4772 -5095 -326 2 1742 1144 168 428 - -151 -504 224 28 -384 452 95 -632 204 -466 -749 275 405 43 85 362 100 -380 -308 -257 - -1959 -429 -13151 -1122 -888 -701 -1378 * * 268 -138 -5586 2357 130 -381 373 -460 -2594 562 -1969 -4675 952 -1017 -981 -878 449 -782 -1462 -772 -1933 438 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 269 -397 -5559 -1460 -256 -10 683 -153 -1707 448 1273 22 -701 908 -299 -579 -788 164 -698 -5750 -910 439 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 270 -984 -5587 1954 805 -2267 -832 45 -2414 745 -3331 -4676 1543 1134 389 -880 65 -1157 -2007 315 -5087 440 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 271 -391 -955 -320 776 -1253 -2890 163 -1303 1848 -5603 -1333 -301 -1005 1341 1757 44 246 -5209 -5770 -5087 441 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 272 -2000 -5583 -703 700 -1330 -1905 -495 -401 1151 -1019 658 285 1387 661 200 33 500 -655 -5767 35 442 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 273 -1749 262 -6772 -6137 -1117 -5976 -4849 2805 -5733 -267 -1088 -2138 -979 -2090 -5533 -5061 -2404 2556 -4714 -4371 443 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 274 -1963 478 -2244 -286 -5908 -933 1305 -5659 2388 -3184 -4676 208 -5180 968 1477 892 11 -5209 -5770 -1856 444 - -150 -501 231 42 -382 397 111 -623 218 -468 -722 274 395 44 94 358 121 -371 -280 -251 - -28 -5720 -13151 -2264 -337 -701 -1378 * * 275 -4118 -1071 -1047 -2241 -5907 -5092 -3750 -2798 2506 -5602 -1572 -1190 -5185 -1804 2347 59 1857 -2896 -5770 -5089 450 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 276 -1186 -4708 -7339 -6742 -611 -1936 -5556 2172 -6373 -1389 -1424 -6258 -2611 -6022 -6202 -5719 -2322 3183 -5397 -5043 451 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 277 3208 555 -6753 -6117 -943 857 -4827 -2157 -5712 -1551 -1160 -5601 -2343 -5335 -5512 -1990 -4348 -2265 -4692 -306 452 - -150 -501 235 45 -376 398 105 -627 209 -467 -721 274 393 44 95 358 119 -363 -295 -250 - -43 -5105 -13151 -996 -1004 -701 -1378 * * 278 -1467 -4369 -6904 -6271 -317 -6116 -4992 2264 -5871 883 349 -5762 -6155 -5488 -5671 -5204 -2393 2483 2231 -858 455 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 279 -998 4484 -6753 -6117 34 -1026 -1204 909 -5712 383 -3437 -2331 -6005 -5335 -5512 -1448 -1062 1580 -4692 -4350 456 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 280 1311 1656 -7285 -6996 -7037 1861 -6571 -6687 -6785 -3130 -6178 -231 300 -2206 -6866 1605 1462 -2687 -7360 -7064 457 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 281 -10421 -8931 -9885 -10273 -10452 3868 -9526 -11566 -10466 -10858 -10853 -10282 -9334 -10356 -9878 -10965 -10599 -11224 -9101 -10471 458 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -16 -12109 -6498 -894 -1115 -701 -1378 * * 282 1337 -684 24 -4759 -226 576 -4424 -4048 -2571 -2655 -3679 -4783 -5710 -4415 -2456 2804 -1378 -2297 -4910 -662 459 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12093 -13136 -894 -1115 -1642 -557 * * 283 1033 -1081 -8491 -8809 -1491 3486 -7717 -8101 -8391 -3235 -7424 -6823 -6797 -7838 -2250 -1206 -5563 -6858 -8532 -8477 460 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12093 -13136 -894 -1115 -1642 -557 * * 284 1379 -139 447 -3545 -614 1709 -1244 -2503 -1504 -1099 -578 -344 -996 1296 -3938 922 -1400 -4900 -5580 186 461 - -151 -502 233 41 -378 398 111 -629 215 -468 -723 276 391 43 96 365 117 -372 -297 -252 - -2382 -2834 -582 -11 -7022 -1642 -557 * * 285 -2636 -4108 1757 449 73 797 -2268 -1162 113 -4124 -3197 1110 -951 -211 -700 1018 84 -205 -4291 -3609 463 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1094 -10503 -913 -894 -1115 -151 -3332 * * 286 -2213 -279 1976 416 -104 -109 -3384 -5298 187 -5242 -4316 -211 -2058 -2925 -1180 2516 -3692 -4848 -5409 -4726 464 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11718 -12760 -894 -1115 -461 -1871 * * 287 -110 -4145 -1800 -206 2382 -2842 -4728 -1427 -5597 1539 520 -5494 -5909 -1822 -2327 -1358 -4255 688 1112 1923 465 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12015 -13057 -894 -1115 -1581 -587 * * 288 -261 -497 -6688 -2668 1394 -1883 -4760 2497 -5646 1344 -237 -5535 -2366 -5269 -5446 -4974 -2075 277 2318 166 466 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -180 -12042 -3095 -894 -1115 -2975 -196 * * 289 -279 -720 1062 1229 -2120 -330 1446 -828 673 -2213 644 326 476 -893 561 310 -2121 -1537 -5534 -1528 467 - -151 -489 233 43 -383 396 103 -624 210 -462 -713 273 397 50 96 358 117 -372 -297 -252 - -220 -2919 -6756 -427 -1965 -1264 -777 * * 290 144 -5439 857 1625 -5760 -2779 -1195 -616 761 302 -4528 -1941 -1473 1627 146 -420 -22 -1242 -5622 -4939 470 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11954 -12996 -894 -1115 -3957 -96 * * 291 3091 -686 -6603 -5967 411 -5805 -4677 718 -2420 -1107 -3287 -5451 -2259 -5185 -5362 -2665 -2250 15 -4542 62 471 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -28 -11954 -5743 -894 -1115 -59 -4634 * * 292 1027 -4748 -4719 -999 78 -2841 -1342 1039 1554 6 1101 -697 -5502 454 937 -694 -4166 -606 -588 -5 472 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12085 -13127 -894 -1115 -926 -1078 * * 293 993 -5574 -271 345 -461 289 -378 -1735 1047 -3347 -1389 986 -2470 1182 1015 158 -375 -2021 -5758 -5075 473 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -56 -12096 -4711 -894 -1115 -358 -2186 * * 294 1182 529 -221 352 -636 -2752 -3752 -758 956 287 563 -48 -5176 709 -244 -1000 -1043 182 -5600 621 474 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -16 -12054 -6573 -894 -1115 -2760 -230 * * 295 -1826 -5520 570 -1549 -2107 2903 -3679 -5592 1408 -3053 -4609 16 -990 63 -227 -2570 -2317 -5142 -5703 -5021 475 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12039 -13081 -894 -1115 -3024 -189 * * 296 2827 1985 -2450 -1877 -1784 -5886 -1356 -222 -5638 -133 -1134 -5529 -5936 -595 -5441 -4970 -4280 1337 -4625 -4282 476 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -3344 -12039 -150 -894 -1115 -3024 -189 * * 297 -1372 -1786 -1996 -1429 -1823 -2598 1693 1322 690 886 -961 1763 -2672 -1148 -1513 -1583 1367 -1246 -2167 -1728 477 - -150 -501 231 42 -382 397 104 -623 211 -467 -722 277 399 47 94 358 116 -368 -296 -239 - -3865 -104 -9742 -18 -6371 -20 -6213 * * 298 -6624 -8747 4035 -538 -8850 -1294 -5791 -2852 -6274 -8688 -8166 -4891 -6918 -561 -7351 -1974 -6738 -8291 -8897 -7712 479 - -150 -461 237 42 -377 397 104 -628 209 -467 -722 274 392 44 95 358 116 -371 -296 -236 - -71 -4385 -13140 -725 -1341 -382 -2104 * * 299 1401 2155 -7445 -6848 -1090 -6725 -5667 318 -6483 1605 -355 -6372 -6729 -6117 -6307 -5836 -68 2047 -5482 -5143 482 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 300 -7202 -6661 -9453 -8994 2861 -9128 -7195 -93 -8744 1582 -4071 -8621 -8525 -7737 -8328 -8403 -2351 -285 -6218 3238 483 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 301 -6775 -6220 -9410 -9033 -394 -9300 -8885 3120 -8981 1306 -4497 -8973 -8744 -8401 -8895 -8713 -6731 1855 -7642 -7570 484 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 302 -1262 -4975 -7515 -7124 -2051 -6016 -5860 -4991 -6737 -3230 -4676 -1990 -6466 -6327 -6514 882 3750 -2443 -5821 -1520 485 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 303 329 -5763 -2245 -8060 -8470 3496 -7639 -8304 -8296 -8552 -261 -6700 -6821 -7682 -8033 439 -5618 -6974 -8686 -8623 486 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 304 -6643 -8789 3192 2865 -8864 -6322 -175 -8888 -6285 -8702 -8182 -2237 -6930 -5500 -7366 -1858 -6755 -8310 -8912 -7723 487 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 305 -809 -816 -6753 -6117 -254 -1835 -4826 1955 -2398 1388 2021 -5601 -578 -5334 -5511 -5039 -380 1793 -4691 -1817 488 - -153 -489 231 56 -385 396 116 -626 211 -470 -725 274 392 45 95 357 113 -370 -262 -240 - -63 -4561 -13151 -2530 -274 -701 -1378 * * 306 -2682 -5587 -666 -1124 -5909 -725 -3747 -5659 2698 -5604 -4677 -1283 -2202 -3287 169 1629 974 -2462 -5771 708 500 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 307 -8472 -7545 -8859 1194 -1040 -3052 3855 -7474 -8737 -2301 -6904 -7514 -2213 -2165 -8222 -8100 -8338 -7595 2888 3530 501 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 308 -1094 -5587 270 -393 -5908 -2804 4676 -2672 -552 -5603 -4676 -1240 -87 -580 -344 -360 -4053 -2417 -5770 -1548 502 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 309 -142 -5504 2077 1195 -1409 -1977 -249 -1790 -3371 -2291 -4603 -1861 -110 972 -3872 -920 1610 554 -5710 -794 503 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 310 2219 -1014 -6751 -6115 788 -556 -4825 427 -2629 -1564 -279 -5600 -2618 -2071 -895 -2896 -1037 1025 2781 1326 504 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 311 -1340 -4639 -2556 -2404 -68 -5541 2887 290 -1439 1390 1600 -2008 -5615 1181 510 -160 -4221 21 -5035 -485 505 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 312 -71 -5530 2350 1566 -1277 -2014 -943 -559 -1410 26 -517 -1125 -2434 -1090 -2178 -353 -184 -949 344 116 506 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 313 3028 -787 -6749 -6114 -672 -1833 -556 -1606 -5709 -742 1358 -2136 -6004 -5332 -2441 -1296 -1094 -1490 -4691 1224 507 - -147 -500 233 43 -381 398 105 -627 210 -466 -721 275 393 45 96 361 119 -370 -295 -250 - -52 -5902 -5760 -652 -1460 -701 -1378 * * 314 -840 -916 -924 954 -1292 -1954 -1222 354 1489 384 -63 229 -5169 409 1325 -1726 -725 25 -5710 -1738 510 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12083 -13125 -894 -1115 -798 -1235 * * 315 899 -5574 687 2560 -1921 -1396 289 -2563 -1217 -3068 -625 428 -5169 -87 -2229 867 -2432 -1711 -5758 -5075 511 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12097 -13139 -894 -1115 -1461 -651 * * 316 95 1463 -609 -521 -2210 -2039 886 -943 959 981 948 863 -2402 922 410 107 -1666 -2689 -5750 -1850 512 - -146 -500 232 42 -381 402 105 -627 210 -465 -721 275 393 45 95 358 117 -370 -295 -250 - -93 -6018 -4403 -1529 -614 -372 -2139 * * 317 -1824 -5533 -289 -1325 -5855 3170 327 -5605 -227 -3134 -4623 1389 -5125 -1577 -774 -1771 -3999 -5156 -5716 -1585 518 - -148 -501 231 42 -382 399 104 -620 211 -465 -722 276 394 47 97 358 118 -371 -296 -251 - -81 -5304 -5091 -1869 -462 -652 -1459 * * 318 -2532 -4170 -6683 -6047 -540 -5890 -4761 2445 -755 1652 1043 -5534 -1060 -1069 -1557 -1432 -613 1072 -4628 -4286 525 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -12044 -13086 -894 -1115 -2947 -200 * * 319 1353 1452 -4569 -4012 -4845 -1711 1504 -1572 -2203 -713 -3942 2036 514 -1963 -1962 1125 739 -930 -5137 -1654 526 - -150 -501 232 42 -381 398 105 -627 212 -467 -709 278 393 44 95 360 116 -366 -295 -250 - -47 -4962 -13086 -753 -1298 -122 -3625 * * 320 -2054 -852 -6772 -6137 1060 -3003 -4849 891 -5733 1746 1200 -5622 -6025 -5356 -5533 -5061 -1664 2373 -4713 285 529 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 321 -790 -1100 -7735 -7154 604 -7054 -6024 3140 -6808 589 -513 -6703 -7024 -6431 -6638 -6180 -5266 1569 -5788 -420 530 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 322 557 954 3061 104 -1156 -1917 -4816 -1345 -5676 303 -929 -5578 -5998 -5308 -5493 -1152 -508 -81 -4695 -855 531 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 323 2015 2412 -6754 -6118 -616 -57 -4827 1593 -5713 -157 834 -5602 106 -5336 -5513 -2076 -1178 743 -4692 -4350 532 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 324 -1500 -6174 -1474 -303 -1402 3278 -4305 -6309 -3981 -6251 -5349 201 -184 -3868 -2452 -416 -137 -5841 -6423 -5706 533 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 325 -10320 -8913 -9757 -10035 -9858 -8870 5463 -11349 -9602 -10663 -10609 -10021 -9297 -9868 -2269 -10768 -10436 -11051 -8920 -9653 534 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -22 -12109 -6044 -894 -1115 -701 -1378 * * 326 -1327 -4596 -2274 -2449 1902 -5537 2630 -4184 -2325 -1230 -177 -2202 -5610 -2101 -4608 977 -622 -2194 2097 3270 535 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -232 -12087 -2751 -894 -1115 -269 -2556 * * 327 2014 -824 -2132 1302 -354 -562 -235 -5437 -1952 -5383 -882 1896 -871 -257 -258 -277 -3836 -1444 -510 -706 536 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11881 -12923 -894 -1115 -42 -5109 * * 328 -1765 -4255 -2543 -6046 -4214 -3002 -4824 38 -5661 -1657 164 -5570 -6001 -2024 -5492 2120 3060 -1069 -4716 -4372 537 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 329 -8164 -8910 -1363 3949 -9764 -7579 -7291 -10175 -7833 -9827 -9467 -6545 -8137 -7112 -8597 -7842 -8280 -9664 -9039 -9016 538 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 330 -1129 -1191 -538 378 -2348 -5101 484 -1326 460 -1466 -543 342 -5194 361 2394 -150 18 -355 1568 653 539 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 331 -1052 -1054 -1677 -1331 1811 425 98 1074 -2781 117 -3439 -5589 1811 -5321 -5502 -5035 -4346 1268 -4693 1380 540 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 332 542 -787 -6754 -6118 2653 2112 -4827 -834 -5713 -4083 1865 -5602 -6006 -5336 -5513 -5041 -820 -72 1582 973 541 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 333 -265 5 -6739 -2842 -1159 -2121 -1089 1397 361 1301 2190 -1004 -1064 -5327 -5506 -2960 -1137 1672 -4692 -1808 542 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 334 -361 -5587 538 1253 -2156 -513 -428 -1750 1569 -2366 -4676 59 425 1424 846 -556 -4053 -1836 -512 61 543 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 335 1315 -5571 469 318 -2416 -1487 631 107 610 109 -4662 -3730 -660 -572 709 -483 224 -467 -5759 -277 544 - -154 -496 231 40 -383 392 99 -625 214 -454 -690 271 398 58 97 355 112 -366 -288 -256 - -137 -3470 -13151 -2149 -369 -701 -1378 * * 336 -1262 -662 -8280 -7661 1293 -7606 -6454 1196 -7306 2645 1075 -7264 -7428 -6718 -7042 -6738 -5833 279 -599 -5794 550 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -12109 -6921 -894 -1115 -701 -1378 * * 337 2188 468 -2328 -48 -791 676 -1340 -1829 545 -1775 1249 -3861 -5257 634 357 -1018 -4078 -918 -5556 -301 551 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12098 -13140 -894 -1115 -374 -2130 * * 338 -54 -1071 1092 2178 -5908 -261 -3746 -2803 823 -3250 -4676 375 -2575 1053 923 -712 -769 -2831 -5770 -5087 552 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 339 -1414 -4812 -1405 -792 137 -5421 1251 -69 910 737 -525 -4306 -5500 1059 1392 -1374 -2520 -214 1978 1786 553 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - 0 -12109 -13151 -894 -1115 -701 -1378 * * 340 -2822 -5568 -2787 -7707 615 -7660 -6585 1049 -7376 2928 -484 -7317 -7500 -6851 -7152 -6806 -2490 -166 -6123 -5923 554 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -23 -12109 -6021 -894 -1115 -701 -1378 * * 341 -230 -5566 -556 1123 -5887 -1500 128 -2805 1586 -3302 -478 380 -5159 1002 1288 820 386 -1654 -5749 -1889 555 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -12087 -7066 -894 -1115 -812 -1216 * * 342 223 -5567 315 2160 -5888 -1035 -1341 -1683 1461 -2187 -4656 860 -2314 839 218 -63 -2065 -2876 -5750 -5067 556 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -15 -12088 -6652 -894 -1115 -1842 -472 * * 343 217 -5549 -287 1057 -23 -1032 1172 -5618 1478 -306 -310 432 -5148 627 822 -3961 -447 -1321 1896 -985 557 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2247 -12074 -342 -894 -1115 -2295 -329 * * 344 155 -3231 -302 -297 -271 1843 -1807 -609 -216 550 -2355 1719 -3221 -1402 -1933 -243 -2037 -2786 1341 -2895 558 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -289 -9829 -2470 -894 -1115 -160 -3251 * * 345 -718 554 -1351 -2529 2824 -1174 -1315 -544 -1166 1377 -1126 -2257 -1363 -1146 -5220 -2763 -577 262 -411 1025 559 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11930 -12972 -894 -1115 -1499 -630 * * 346 51 -5474 1479 120 -2041 764 -164 -5546 1119 -2333 -4563 -36 1419 534 571 2 -3940 -2810 -5657 -1376 560 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -582 -11991 -1593 -894 -1115 -3630 -121 * * 347 447 -4927 1668 758 -5248 -160 741 -1220 819 -919 -4017 572 -88 422 -1379 -1937 501 -786 160 -4428 561 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -405 -11410 -2034 -894 -1115 -3691 -116 * * 348 715 316 344 -188 83 -946 546 -282 657 -13 -3695 491 -668 665 447 -1682 -644 -91 -4792 156 562 - -151 -513 231 54 -377 414 119 -623 196 -462 -717 289 387 28 74 348 105 -346 -227 -252 - -1805 -487 -12119 -1982 -421 -3647 -120 * * 349 -239 -4711 199 2304 -5032 -417 -2870 -4783 862 -4727 -3800 1156 -80 1017 200 -543 -1392 -2035 163 -4211 583 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1 -11175 -12217 -894 -1115 -14 -6736 * * 350 -860 161 -6909 -2858 894 -6127 -5013 2305 -5884 767 -3572 -5773 -6169 -5512 -5690 -5216 -1702 2523 -585 -4528 584 - * * * * * * * * * * * * * * * * * * * * - * * * * * * * * 0 // hmmer-3.1b2/easel/demotic/examples/example.hmmsearch.out0000664361611702660230000543426312473612605022777 0ustar wheelerteddy# hmmsearch :: search profile(s) against a sequence database # HMMER 3.0 (March 2010); http://hmmer.org/ # Copyright (C) 2010 Howard Hughes Medical Institute. # Freely distributed under the GNU General Public License (GPLv3). # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # query HMM file: example.hmm # target sequence database: /misc/data0/databases/Uniprot/uniprot_sprot.fasta # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Query: US2 [M=126] Accession: PF02476.8 Description: US2 family Scores for complete sequences (score includes all domains): --- full sequence --- --- best 1 domain --- -#dom- E-value score bias E-value score bias exp N Sequence Description ------- ------ ----- ------- ------ ----- ---- -- -------- ----------- 4.2e-39 138.8 0.3 4.2e-39 138.8 0.2 1.7 2 sp|P06485|US02_HHV11 Protein US2 OS=Human herpesvirus 1 (st 2e-38 136.6 0.2 3.6e-38 135.8 0.1 1.4 1 sp|P13292|US02_HHV2H Protein US2 OS=Human herpesvirus 2 (st 1.6e-35 127.2 0.1 2.2e-35 126.8 0.0 1.1 1 sp|Q05106|US453_GAHVG Uncharacterized 16.6 kDa protein OS=Ga 2.3e-35 126.8 0.0 3.9e-35 126.0 0.0 1.3 1 sp|P32517|US02_EHV1K US1 protein OS=Equine herpesvirus 1 (s 3.3e-33 119.8 0.0 6.4e-33 118.9 0.0 1.5 1 sp|P28964|US02_EHV1B Gene 68 protein OS=Equine herpesvirus 2.1e-31 114.0 0.0 3.6e-31 113.2 0.0 1.4 1 sp|Q08099|US02_BHV1S Protein US2 homolog OS=Bovine herpesvi 1.8e-17 68.9 0.0 3.3e-17 68.1 0.0 1.4 1 sp|P24382|US02_SUHVN Protein US2 homolog OS=Suid herpesviru ------ inclusion threshold ------ 1.4 14.3 0.1 2.6 13.5 0.0 1.4 1 sp|Q9ZK80|ATPG_HELPJ ATP synthase gamma chain OS=Helicobact 1.4 14.3 0.1 2.6 13.5 0.0 1.4 1 sp|P56082|ATPG_HELPY ATP synthase gamma chain OS=Helicobact 1.5 14.2 0.1 2.9 13.3 0.0 1.4 1 sp|B2UUP1|ATPG_HELPS ATP synthase gamma chain OS=Helicobact 1.5 14.2 0.0 2.9 13.3 0.0 1.4 1 sp|B6JMX3|ATPG_HELP2 ATP synthase gamma chain OS=Helicobact 2.6 13.4 0.0 4.8 12.6 0.0 1.4 1 sp|Q17Y79|ATPG_HELAH ATP synthase gamma chain OS=Helicobact 3.6 13.0 0.0 6.6 12.2 0.0 1.4 1 sp|B5Z8D1|ATPG_HELPG ATP synthase gamma chain OS=Helicobact 3.9 12.9 0.0 7.3 12.0 0.0 1.4 1 sp|Q1CSD4|ATPG_HELPH ATP synthase gamma chain OS=Helicobact Domain annotation for each sequence (and alignments): >> sp|P06485|US02_HHV11 Protein US2 OS=Human herpesvirus 1 (strain 17) GN=US2 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? -2.0 0.0 4.5 1.6e+05 88 116 .. 50 78 .. 49 86 .. 0.74 2 ! 138.8 0.2 1.1e-43 4.2e-39 2 126 .] 111 247 .. 110 247 .. 0.97 Alignments for each domain: == domain 1 score: -2.0 bits; conditional E-value: 4.5 US2 88 vvdpealreeaslrppepakrseresske 116 vv+p+ lr +a++ + p+++++ ++++ sp|P06485|US02_HHV11 50 VVRPANLRRLAEPLMDLPKPTRPIVRTRS 78 67888888888888888888887777776 PP == domain 2 score: 138.8 bits; conditional E-value: 1.1e-43 US2 2 Lnsgiign.rpyhLWvlGAADLCkpvlelipgpk...RlvavkvpdawagksWalPdelkplltvewtpfeeaalskleallsakrlvY 86 L+++++++ r+yhLWv+GAADLC p+le++++ + R++a+k+pdaw+g++Wa+P+++ p++tv+wtpf++a++++le+lls+++++Y sp|P06485|US02_HHV11 111 LHRDQPSPpRLYHLWVVGAADLCVPFLEYAQKIRlgvRFIAIKTPDAWVGEPWAVPTRFLPEWTVAWTPFPAAPNHPLETLLSRYEYQY 199 888888888******************************************************************************** PP US2 87 avvdp..........ealreeaslrppepakrseresskeapsraaccis 126 +vv p ++lr++++l++p+pa++++ ++s++ r++cc++ sp|P06485|US02_HHV11 200 GVVLPgtngrerdcmRWLRSLIALHKPHPATPGPLTTSHP--VRRPCCAC 247 ***************************************9..******97 PP >> sp|P13292|US02_HHV2H Protein US2 OS=Human herpesvirus 2 (strain HG52) GN=US2 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 135.8 0.1 9.8e-43 3.6e-38 1 126 [] 110 246 .. 110 246 .. 0.95 Alignments for each domain: == domain 1 score: 135.8 bits; conditional E-value: 9.8e-43 US2 1 lLnsgiign.rpyhLWvlGAADLCkpvlelipgpk...RlvavkvpdawagksWalPdelkplltvewtpfeeaalskleallsakrlv 85 lL+++++g+ r+yhLWv+GAADLC p++e++++++ R++a+k++daw+g++W+lPd++ p++tv+wtpf++a++++le+lls+++++ sp|P13292|US02_HHV2H 110 LLHQERPGPhRLYHLWVVGAADLCVPFFEYAQKTRlgfRFIATKTNDAWVGEPWPLPDRFLPERTVSWTPFPAAPNHPLENLLSRYEYQ 198 599******99****************************************************************************** PP US2 86 Yavvdp........ealreeaslr.ppepakrseresskeapsraaccis 126 Y+vv p ++lr++++++ +p+pa+++++ ++++ ++++c+++ sp|P13292|US02_HHV2H 199 YGVVVPgdrersclRWLRSLVAPHnKPRPASSRPHPATHP--TQRPCFTC 246 ********************99996777777777777777..*****987 PP >> sp|Q05106|US453_GAHVG Uncharacterized 16.6 kDa protein OS=Gallid herpesvirus 2 (strain GA) GN=US453 PE=4 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.8 0.0 5.9e-40 2.2e-35 1 124 [. 1 116 [. 1 118 [. 0.89 Alignments for each domain: == domain 1 score: 126.8 bits; conditional E-value: 5.9e-40 US2 1 lLnsgiignrpyhLWvlGAADLCkpvlelipgpkRlvavkvpdawagksWalPdelkplltvewtpfeeaalskleallsakrlvYav 88 +L+s+++gn+p++LW++GAAD+C+ +le+ip pkRl+a+kv+++w+g++Wa+Pd++++llt++w+p ++++++++++++s + +vY++ sp|Q05106|US453_GAHVG 1 MLESEVSGNAPHSLWIVGAADICRIALECIPLPKRLLAIKVSGTWSGMPWAIPDNIQTLLTSTWEPKFDTPEDRAHFCDSDMVCVYKI 88 79************************************************************************************** PP US2 89 vdpealreeaslrppepakrseresske..apsraacc 124 +++ pp+p k++e e +++ +p r +cc sp|Q05106|US453_GAHVG 89 LGS----------PPNPLKPPEIEPPQMssTPGRLFCC 116 ***..........4444444444444444457889998 PP >> sp|P32517|US02_EHV1K US1 protein OS=Equine herpesvirus 1 (strain Kentucky A) GN=US1 PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.0 0.0 1.1e-39 3.9e-35 1 124 [. 111 265 .. 111 268 .. 0.90 Alignments for each domain: == domain 1 score: 126.0 bits; conditional E-value: 1.1e-39 US2 1 lLnsgiignrpyhLWvlGAADLCkpvlelipgpkRlvavkvpdawagksWalPd.......elkplltvewt................. 65 +Lns++i+n+pyhLWvlGAADLCkpv++lipgpkR+v+++++d++ +ksW +P+ e++p++tve + sp|P32517|US02_EHV1K 111 HLNSSLIINQPYHLWVLGAADLCKPVFDLIPGPKRMVYAEIADEF-HKSW-QPPfvcgklfETIPWTTVEHNhplklraaggedtvvge 197 7********************************************.****.7888***************4445556666677777888 PP US2 66 .pfeeaalskleallsakrlvYavvdp.......ealreeaslrppepakrseresske.apsraacc 124 +f+++++++l++++++ r++Yavvdp ++ r++ ++rp+e +r++r++s++ ap+r+ ++ sp|P32517|US02_EHV1K 198 cGFSKHSSNSLVHPPTVNRVIYAVVDParlreipAPGRPLPRRRPSEGGMRAPRRRSRApAPARSTAA 265 8**************************999999999999*****************999755555544 PP >> sp|P28964|US02_EHV1B Gene 68 protein OS=Equine herpesvirus 1 (strain Ab4p) GN=68 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.9 0.0 1.7e-37 6.4e-33 1 112 [. 111 245 .. 111 262 .. 0.82 Alignments for each domain: == domain 1 score: 118.9 bits; conditional E-value: 1.7e-37 US2 1 lLnsgiignrpyhLWvlGAADLCkpvlelipgpkRlvavkvpdawagksWalPd.......elkplltvewt................. 65 +Lns++i+n+pyhLWvlGAADLCkpv++lipgpkR+v+++++d++ +ksW +P+ e++p++tve + sp|P28964|US02_EHV1B 111 HLNSSLIINQPYHLWVLGAADLCKPVFDLIPGPKRMVYAEIADEF-HKSW-QPPfvcgklfETIPWTTVEHNhplklraaggedtvvge 197 7********************************************.****.7888***************4445556666677777888 PP US2 66 .pfeeaalskleallsakrlvYavvdpealreeaslrppepakrsere 112 +f+++++++l+ ++++kr++Yavvdp++lre ++ p p++r+ ++ sp|P28964|US02_EHV1B 198 cGFSKHSSNSLVRPPTVKRVIYAVVDPARLREIPAPGRPLPRRRPSEG 245 8**************************888887776644444443332 PP >> sp|Q08099|US02_BHV1S Protein US2 homolog OS=Bovine herpesvirus 1.2 (strain ST) PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 113.2 0.0 9.8e-36 3.6e-31 1 110 [. 105 208 .. 105 219 .. 0.94 Alignments for each domain: == domain 1 score: 113.2 bits; conditional E-value: 9.8e-36 US2 1 lLnsgiignrpyhLWvlGAADLCkpvlelipgpkRlvavkvpdawagksWalPdelkplltvewtpfeeaalskleallsakrlvYavv 89 lLnsg++g+rp+h+Wv+GAADL++p++++i++++Rlv++++++++ag++W+lP ++ p+++++w+p++++al +l+a + rlvY+vv sp|Q08099|US02_BHV1S 105 LLNSGRAGARPFHMWVFGAADLYAPIFAHIAATTRLVYAQLDCTFAGAAWRLP-RRGPAIASPWPPYDTPALPELVAGGVLLRLVYEVV 192 69************************************************999.9********************************** PP US2 90 dpealreeaslrppepakrse 110 d+ a++rp++++++++ sp|Q08099|US02_BHV1S 193 DR-----GAAPRPAKREPPCP 208 **.....88889888888765 PP >> sp|P24382|US02_SUHVN Protein US2 homolog OS=Suid herpesvirus 1 (strain NIA-3) GN=28K PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 68.1 0.0 8.8e-22 3.3e-17 1 125 [. 135 255 .. 135 256 .] 0.97 Alignments for each domain: == domain 1 score: 68.1 bits; conditional E-value: 8.8e-22 US2 1 lLnsgiignrpyhLWvlGAADLCkpvlelipgpkRlvavkvpdawagksWalPdelkplltvewtpfeeaalskleallsakrlvYavv 89 +Lnsg++g++p+hLW+lGAADLC++vl +++ R +a+ p+a++g++++ +++p+lt++ +al+ ++a + a+r+++a v sp|P24382|US02_SUHVN 135 YLNSGARGTAPIHLWILGAADLCDQVLLAAS---RSTAAGAPGAPTGARLT---RRRPGLTDA------DALDVIVAGIPATRAMFARV 211 8****************************99...****************5...9******99......9******************* PP US2 90 dp..........ealreeaslrppepakrseresskeapsraacci 125 ++ eal++++ +r + +++r+ r++ +e ++++c+i sp|P24382|US02_SUHVN 212 HNrswrhagewtEALHAQIVTRGDVRRRRGGRGNGRE--RAPRCTI 255 ************************************9..9999987 PP >> sp|Q9ZK80|ATPG_HELPJ ATP synthase gamma chain OS=Helicobacter pylori J99 GN=atpG PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.5 0.0 7.1e-05 2.6 51 107 .. 208 262 .. 203 283 .. 0.80 Alignments for each domain: == domain 1 score: 13.5 bits; conditional E-value: 7.1e-05 US2 51 alPdelkplltvewtpfeeaalskleallsakrlvYavvdpealreeaslrppepak 107 ++P+e+++ +t+e + e++ l++l+ + + + l Ya++d+ l +e s r ++ + sp|Q9ZK80|ATPG_HELPJ 208 PQPSETQETITSEPSGSEDEILDSLAEKYVEYSLYYALIDS--LAAEHSARMQAMDT 262 5899*************************************..44444444443333 PP >> sp|P56082|ATPG_HELPY ATP synthase gamma chain OS=Helicobacter pylori GN=atpG PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.5 0.0 7.1e-05 2.6 51 107 .. 208 262 .. 203 283 .. 0.80 Alignments for each domain: == domain 1 score: 13.5 bits; conditional E-value: 7.1e-05 US2 51 alPdelkplltvewtpfeeaalskleallsakrlvYavvdpealreeaslrppepak 107 ++P+e+++ +t+e + e++ l++l+ + + + l Ya++d+ l +e s r ++ + sp|P56082|ATPG_HELPY 208 PQPSETQETITSEPSGSEDEILDSLAEKYVEYSLYYALIDS--LAAEHSARMQAMDT 262 5899*************************************..44444444443333 PP >> sp|B2UUP1|ATPG_HELPS ATP synthase gamma chain OS=Helicobacter pylori (strain Shi470) GN=atpG PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.3 0.0 7.8e-05 2.9 51 107 .. 208 262 .. 203 283 .. 0.80 Alignments for each domain: == domain 1 score: 13.3 bits; conditional E-value: 7.8e-05 US2 51 alPdelkplltvewtpfeeaalskleallsakrlvYavvdpealreeaslrppepak 107 ++P+e+++ +t+e + e++ l++l+ + + + l Ya++d+ l +e s r ++ + sp|B2UUP1|ATPG_HELPS 208 PQPNETQETITSEPSGSEDEILDSLAEKYVEYSLYYALIDS--LAAEHSARMQAMDT 262 5899*************************************..44444444443333 PP >> sp|B6JMX3|ATPG_HELP2 ATP synthase gamma chain OS=Helicobacter pylori (strain P12) GN=atpG PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.3 0.0 7.8e-05 2.9 51 107 .. 208 262 .. 203 283 .. 0.80 Alignments for each domain: == domain 1 score: 13.3 bits; conditional E-value: 7.8e-05 US2 51 alPdelkplltvewtpfeeaalskleallsakrlvYavvdpealreeaslrppepak 107 ++P+e+++ +t+e + e++ l++l+ + + + l Ya++d+ l +e s r ++ + sp|B6JMX3|ATPG_HELP2 208 PQPNEVQETITSEPSGSEDEILDSLAEKYVEYSLYYALIDS--LAAEHSARMQAMDT 262 5899*************************************..44444444443333 PP >> sp|Q17Y79|ATPG_HELAH ATP synthase gamma chain OS=Helicobacter acinonychis (strain Sheeba) GN=atpG PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.6 0.0 0.00013 4.8 52 107 .. 209 262 .. 201 283 .. 0.80 Alignments for each domain: == domain 1 score: 12.6 bits; conditional E-value: 0.00013 US2 52 lPdelkplltvewtpfeeaalskleallsakrlvYavvdpealreeaslrppepak 107 +P+e ++ +t+e + e++ l++l+++ + + l Ya++d+ l +e s r ++ + sp|Q17Y79|ATPG_HELAH 209 QPSEAQETITSEPSGSEDEILDSLAKKYVEYSLYYALIDS--LAAEHSARMQAMDT 262 899*************************************..44444444443333 PP >> sp|B5Z8D1|ATPG_HELPG ATP synthase gamma chain OS=Helicobacter pylori (strain G27) GN=atpG PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.2 0.0 0.00018 6.6 51 107 .. 208 262 .. 203 283 .. 0.79 Alignments for each domain: == domain 1 score: 12.2 bits; conditional E-value: 0.00018 US2 51 alPdelkplltvewtpfeeaalskleallsakrlvYavvdpealreeaslrppepak 107 ++P+e ++ +t+e + e++ l++l+ + + + l Ya++d+ l +e s r ++ + sp|B5Z8D1|ATPG_HELPG 208 PQPSEAQETITSEPSGSEDEILDSLAEKYVEYSLYYALIDS--LAAEHSARMQAMDT 262 5899*************************************..44444444443333 PP >> sp|Q1CSD4|ATPG_HELPH ATP synthase gamma chain OS=Helicobacter pylori (strain HPAG1) GN=atpG PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.0 0.0 0.0002 7.3 51 107 .. 208 262 .. 203 283 .. 0.79 Alignments for each domain: == domain 1 score: 12.0 bits; conditional E-value: 0.0002 US2 51 alPdelkplltvewtpfeeaalskleallsakrlvYavvdpealreeaslrppepak 107 ++P+e ++ +t+e + e++ l++l+ + + + l Ya++d+ l +e s r ++ + sp|Q1CSD4|ATPG_HELPH 208 PQPNEAQETITSEPSGSEDEILDSLAEKYVEYSLYYALIDS--LAAEHSARMQAMDT 262 5899*************************************..44444444443333 PP Internal pipeline statistics summary: ------------------------------------- Query model(s): 1 (126 nodes) Target sequences: 516081 (181677051 residues) Passed MSV filter: 9110 (0.0176523); expected 10321.6 (0.02) Passed bias filter: 7603 (0.0147322); expected 10321.6 (0.02) Passed Vit filter: 423 (0.000819639); expected 516.1 (0.001) Passed Fwd filter: 17 (3.29406e-05); expected 5.2 (1e-05) Initial search space (Z): 516081 [actual number of targets] Domain search space (domZ): 14 [number of targets reported over threshold] # CPU time: 4.56u 0.07s 00:00:04.63 Elapsed: 00:00:01.60 # Mc/sec: 14307.07 // Query: Glyco_transf_28 [M=139] Accession: PF03033.13 Description: Glycosyltransferase family 28 N-terminal domain Scores for complete sequences (score includes all domains): --- full sequence --- --- best 1 domain --- -#dom- E-value score bias E-value score bias exp N Sequence Description ------- ------ ----- ------- ------ ----- ---- -- -------- ----------- 3e-40 142.2 0.0 7.6e-40 140.8 0.0 1.7 1 sp|A7Z4E5|MURG_BACA2 UDP-N-acetylglucosamine--N-acetylmuram 3.6e-40 141.9 0.0 2.3e-38 136.1 0.0 2.5 2 sp|Q65JY0|MURG_BACLD UDP-N-acetylglucosamine--N-acetylmuram 7.6e-40 140.8 0.0 2.8e-39 139.0 0.0 1.9 1 sp|P37585|MURG_BACSU UDP-N-acetylglucosamine--N-acetylmuram 3e-39 138.9 0.0 1.4e-38 136.8 0.0 2.0 1 sp|A8FCY1|MURG_BACP2 UDP-N-acetylglucosamine--N-acetylmuram 7.6e-39 137.6 0.0 4.4e-37 131.9 0.0 2.8 1 sp|Q812W5|MURG1_BACCR UDP-N-acetylglucosamine--N-acetylmuram 1.1e-38 137.0 0.5 4e-38 135.3 0.1 1.9 1 sp|A3MY90|MURG_ACTP2 UDP-N-acetylglucosamine--N-acetylmuram 1.5e-38 136.7 0.0 4.4e-37 131.9 0.0 2.7 1 sp|A0RHT1|MURG2_BACAH UDP-N-acetylglucosamine--N-acetylmuram 1.5e-38 136.7 0.0 4.4e-37 131.9 0.0 2.7 1 sp|Q636B6|MURG1_BACCZ UDP-N-acetylglucosamine--N-acetylmuram 1.5e-38 136.7 0.0 4.4e-37 131.9 0.0 2.7 1 sp|Q81JG5|MURG1_BACAN UDP-N-acetylglucosamine--N-acetylmuram 1.8e-38 136.4 0.0 4.4e-37 131.9 0.0 2.6 1 sp|Q732F8|MURG1_BACC1 UDP-N-acetylglucosamine--N-acetylmuram 2.7e-38 135.8 0.0 1.8e-37 133.1 0.0 2.3 1 sp|B7GGI2|MURG_ANOFW UDP-N-acetylglucosamine--N-acetylmuram 2.9e-38 135.7 0.1 4.2e-37 131.9 0.0 2.3 1 sp|A7GRN6|MURG_BACCN UDP-N-acetylglucosamine--N-acetylmuram 3.7e-38 135.4 0.4 1.4e-37 133.5 0.1 2.0 1 sp|B0BRH7|MURG_ACTPJ UDP-N-acetylglucosamine--N-acetylmuram 3.7e-38 135.4 0.4 1.4e-37 133.5 0.1 2.0 1 sp|B3GZK8|MURG_ACTP7 UDP-N-acetylglucosamine--N-acetylmuram 3.8e-38 135.3 0.0 1.1e-36 130.6 0.0 2.7 1 sp|Q6HEQ4|MURG1_BACHK UDP-N-acetylglucosamine--N-acetylmuram 9.4e-38 134.1 0.0 4e-37 132.0 0.0 2.0 1 sp|O07670|MURG_ENTHR UDP-N-acetylglucosamine--N-acetylmuram 1.6e-37 133.3 1.8 2.3e-36 129.6 0.3 2.5 2 sp|A7FM66|MURG_YERP3 UDP-N-acetylglucosamine--N-acetylmuram 1.6e-37 133.3 1.8 2.3e-36 129.6 0.3 2.5 2 sp|B1JK81|MURG_YERPY UDP-N-acetylglucosamine--N-acetylmuram 1.6e-37 133.3 1.8 2.3e-36 129.6 0.3 2.5 2 sp|B2K4E6|MURG_YERPB UDP-N-acetylglucosamine--N-acetylmuram 1.6e-37 133.3 1.8 2.3e-36 129.6 0.3 2.5 2 sp|Q66EK5|MURG_YERPS UDP-N-acetylglucosamine--N-acetylmuram 2e-37 133.0 1.5 1.4e-36 130.3 0.2 2.3 1 sp|A1JJJ3|MURG_YERE8 UDP-N-acetylglucosamine--N-acetylmuram 2.2e-37 132.8 2.4 2.7e-36 129.3 0.4 2.3 2 sp|A9MQC2|MURG_SALAR UDP-N-acetylglucosamine--N-acetylmuram 2.3e-37 132.8 1.5 4.5e-37 131.8 1.0 1.5 1 sp|P64869|Y1526_MYCTU Uncharacterized protein Rv1526c/MT1577 2.3e-37 132.8 1.5 4.5e-37 131.8 1.0 1.5 1 sp|P64870|Y1553_MYCBO Uncharacterized protein Mb1553c OS=Myc 3.1e-37 132.4 0.1 5.6e-37 131.5 0.1 1.5 1 sp|Q65RY6|MURG_MANSM UDP-N-acetylglucosamine--N-acetylmuram 3.5e-37 132.2 1.8 2.1e-36 129.7 0.2 2.4 1 sp|B2VD91|MURG_ERWT9 UDP-N-acetylglucosamine--N-acetylmuram 3.6e-37 132.2 0.1 7.4e-37 131.2 0.1 1.6 1 sp|Q4QLF8|MURG_HAEI8 UDP-N-acetylglucosamine--N-acetylmuram 3.8e-37 132.1 0.1 7.4e-37 131.2 0.1 1.5 1 sp|A5UIR2|MURG_HAEIG UDP-N-acetylglucosamine--N-acetylmuram 4e-37 132.0 0.1 7.4e-37 131.2 0.1 1.5 1 sp|P45065|MURG_HAEIN UDP-N-acetylglucosamine--N-acetylmuram 4.7e-37 131.8 2.7 5.5e-36 128.3 0.3 2.6 2 sp|A9R124|MURG_YERPG UDP-N-acetylglucosamine--N-acetylmuram 4.7e-37 131.8 2.7 5.5e-36 128.3 0.3 2.6 2 sp|Q1C214|MURG_YERPA UDP-N-acetylglucosamine--N-acetylmuram 4.7e-37 131.8 2.7 5.5e-36 128.3 0.3 2.6 2 sp|Q1CMM7|MURG_YERPN UDP-N-acetylglucosamine--N-acetylmuram 4.7e-37 131.8 2.7 5.5e-36 128.3 0.3 2.6 2 sp|Q8ZIE9|MURG_YERPE UDP-N-acetylglucosamine--N-acetylmuram 5.7e-37 131.5 0.0 3.5e-36 129.0 0.0 2.1 1 sp|O07109|MURG_ENTFA UDP-N-acetylglucosamine--N-acetylmuram 5.8e-37 131.5 1.2 2.4e-36 129.5 0.1 2.1 1 sp|A3QIM1|MURG_SHELP UDP-N-acetylglucosamine--N-acetylmuram 6e-37 131.5 1.3 3.5e-36 129.0 0.2 2.3 1 sp|A8G9S7|MURG_SERP5 UDP-N-acetylglucosamine--N-acetylmuram 6.3e-37 131.4 1.6 3.4e-36 129.0 0.3 2.2 1 sp|B7LWF6|MURG_ESCF3 UDP-N-acetylglucosamine--N-acetylmuram 7.1e-37 131.2 2.0 4.3e-36 128.7 0.2 2.3 1 sp|A7MIE5|MURG_ENTS8 UDP-N-acetylglucosamine--N-acetylmuram 7.4e-37 131.2 2.7 4e-36 128.8 0.2 2.6 1 sp|C6DEU3|MURG_PECCP UDP-N-acetylglucosamine--N-acetylmuram 8.3e-37 131.0 0.3 1.3e-35 127.1 0.1 2.4 1 sp|Q88V81|MURG_LACPL UDP-N-acetylglucosamine--N-acetylmuram 8.9e-37 130.9 1.2 8.3e-36 127.8 0.2 2.3 1 sp|Q8Z9G9|MURG_SALTI UDP-N-acetylglucosamine--N-acetylmuram 8.9e-37 130.9 2.2 1.9e-35 126.6 0.1 2.6 2 sp|B4F111|MURG_PROMH UDP-N-acetylglucosamine--N-acetylmuram 9.9e-37 130.7 2.6 1.4e-35 127.0 0.2 2.3 2 sp|A0L1P2|MURG_SHESA UDP-N-acetylglucosamine--N-acetylmuram 9.9e-37 130.7 2.6 1.4e-35 127.0 0.2 2.3 2 sp|Q0HZR6|MURG_SHESR UDP-N-acetylglucosamine--N-acetylmuram 1.3e-36 130.4 1.6 9.6e-36 127.5 0.3 2.3 1 sp|B5BLC2|MURG_SALPK UDP-N-acetylglucosamine--N-acetylmuram 1.3e-36 130.4 1.6 9.6e-36 127.5 0.3 2.3 1 sp|Q5PDC8|MURG_SALPA UDP-N-acetylglucosamine--N-acetylmuram 1.3e-36 130.4 0.6 2.3e-36 129.6 0.0 1.8 1 sp|Q9K9T0|MURG_BACHD UDP-N-acetylglucosamine--N-acetylmuram 1.4e-36 130.3 0.0 2.9e-36 129.2 0.0 1.6 1 sp|Q8Y5M2|MURG_LISMO UDP-N-acetylglucosamine--N-acetylmuram 1.7e-36 130.0 1.5 1.3e-35 127.1 0.3 2.3 1 sp|A9MZL9|MURG_SALPB UDP-N-acetylglucosamine--N-acetylmuram 1.7e-36 130.0 1.5 1.3e-35 127.1 0.3 2.3 1 sp|B4TJ87|MURG_SALHS UDP-N-acetylglucosamine--N-acetylmuram 1.7e-36 130.0 1.5 1.3e-35 127.1 0.3 2.3 1 sp|B4TXH8|MURG_SALSV UDP-N-acetylglucosamine--N-acetylmuram 1.7e-36 130.0 1.5 1.3e-35 127.1 0.3 2.3 1 sp|B5F7W4|MURG_SALA4 UDP-N-acetylglucosamine--N-acetylmuram 1.7e-36 130.0 1.5 1.3e-35 127.1 0.3 2.3 1 sp|Q8ZRU3|MURG_SALTY UDP-N-acetylglucosamine--N-acetylmuram 1.7e-36 130.0 1.5 1.3e-35 127.1 0.3 2.3 1 sp|B4SU50|MURG_SALNS UDP-N-acetylglucosamine--N-acetylmuram 1.7e-36 130.0 1.5 1.5e-35 127.0 0.2 2.3 1 sp|A1REZ6|MURG_SHESW UDP-N-acetylglucosamine--N-acetylmuram 1.7e-36 130.0 1.5 1.5e-35 127.0 0.2 2.3 1 sp|A4Y2N6|MURG_SHEPC UDP-N-acetylglucosamine--N-acetylmuram 1.7e-36 130.0 0.7 9.6e-36 127.5 0.1 2.2 1 sp|A6T4N3|MURG_KLEP7 UDP-N-acetylglucosamine--N-acetylmuram 1.7e-36 129.9 1.5 1.3e-35 127.1 0.3 2.3 1 sp|B5RH64|MURG_SALG2 UDP-N-acetylglucosamine--N-acetylmuram 1.8e-36 129.9 0.9 6.4e-36 128.1 0.2 2.1 1 sp|A8ALK6|MURG_CITK8 UDP-N-acetylglucosamine--N-acetylmuram 1.8e-36 129.9 1.5 1.3e-35 127.1 0.3 2.2 1 sp|Q57TD0|MURG_SALCH UDP-N-acetylglucosamine--N-acetylmuram 1.8e-36 129.9 1.6 2.2e-35 126.4 0.2 2.4 2 sp|A6WID1|MURG_SHEB8 UDP-N-acetylglucosamine--N-acetylmuram 1.8e-36 129.9 1.6 2.2e-35 126.4 0.2 2.4 2 sp|A9KY29|MURG_SHEB9 UDP-N-acetylglucosamine--N-acetylmuram 1.8e-36 129.9 1.6 2.2e-35 126.4 0.2 2.4 2 sp|B8E698|MURG_SHEB2 UDP-N-acetylglucosamine--N-acetylmuram 2e-36 129.8 0.7 9.6e-36 127.5 0.1 2.1 1 sp|B5Y1U7|MURG_KLEP3 UDP-N-acetylglucosamine--N-acetylmuram 2.2e-36 129.6 1.7 2.2e-35 126.4 0.2 2.3 2 sp|A3CZM1|MURG_SHEB5 UDP-N-acetylglucosamine--N-acetylmuram 2.4e-36 129.5 0.3 8.9e-36 127.7 0.1 2.0 1 sp|Q7U336|MURG_HAEDU UDP-N-acetylglucosamine--N-acetylmuram 2.4e-36 129.5 0.2 4.9e-36 128.5 0.1 1.5 1 sp|B7VJ03|MURG_VIBSL UDP-N-acetylglucosamine--N-acetylmuram 2.5e-36 129.5 0.4 6e-36 128.2 0.1 1.8 1 sp|Q0I1D3|MURG_HAES1 UDP-N-acetylglucosamine--N-acetylmuram 2.5e-36 129.4 1.2 1.3e-35 127.1 0.3 2.2 1 sp|B5FI72|MURG_SALDC UDP-N-acetylglucosamine--N-acetylmuram 2.6e-36 129.4 0.0 1.3e-35 127.1 0.0 2.1 1 sp|A2RJQ4|MURG_LACLM UDP-N-acetylglucosamine--N-acetylmuram 2.6e-36 129.4 0.0 1.3e-35 127.1 0.0 2.1 1 sp|Q02XY0|MURG_LACLS UDP-N-acetylglucosamine--N-acetylmuram 2.7e-36 129.3 1.5 9.4e-36 127.6 0.3 2.1 1 sp|B7MNU9|MURG_ECO81 UDP-N-acetylglucosamine--N-acetylmuram 2.7e-36 129.3 1.5 9.4e-36 127.6 0.3 2.1 1 sp|B7NHJ6|MURG_ECO7I UDP-N-acetylglucosamine--N-acetylmuram 2.7e-36 129.3 1.5 9.4e-36 127.6 0.3 2.1 1 sp|B7UIE0|MURG_ECO27 UDP-N-acetylglucosamine--N-acetylmuram 2.7e-36 129.3 1.5 9.4e-36 127.6 0.3 2.1 1 sp|Q0TLP9|MURG_ECOL5 UDP-N-acetylglucosamine--N-acetylmuram 2.7e-36 129.3 1.5 9.4e-36 127.6 0.3 2.1 1 sp|Q8FL64|MURG_ECOL6 UDP-N-acetylglucosamine--N-acetylmuram 2.9e-36 129.2 1.6 9.4e-36 127.6 0.3 2.1 1 sp|A1A7D5|MURG_ECOK1 UDP-N-acetylglucosamine--N-acetylmuram 2.9e-36 129.2 1.6 9.4e-36 127.6 0.3 2.1 1 sp|B7MAL3|MURG_ECO45 UDP-N-acetylglucosamine--N-acetylmuram 2.9e-36 129.2 1.6 9.4e-36 127.6 0.3 2.1 1 sp|Q1RGA5|MURG_ECOUT UDP-N-acetylglucosamine--N-acetylmuram 3.1e-36 129.1 2.3 1.2e-35 127.2 0.2 2.4 1 sp|Q6D0I3|MURG_ERWCT UDP-N-acetylglucosamine--N-acetylmuram 3.1e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|B5YZC6|MURG_ECO5E UDP-N-acetylglucosamine--N-acetylmuram 3.1e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|Q8X9Y8|MURG_ECO57 UDP-N-acetylglucosamine--N-acetylmuram 3.1e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|A7ZHI1|MURG_ECO24 UDP-N-acetylglucosamine--N-acetylmuram 3.1e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|B1LG27|MURG_ECOSM UDP-N-acetylglucosamine--N-acetylmuram 3.1e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|B6HZ67|MURG_ECOSE UDP-N-acetylglucosamine--N-acetylmuram 3.1e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|B7M133|MURG_ECO8A UDP-N-acetylglucosamine--N-acetylmuram 3.1e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|B7N7W3|MURG_ECOLU UDP-N-acetylglucosamine--N-acetylmuram 3.1e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|Q326E5|MURG_SHIBS UDP-N-acetylglucosamine--N-acetylmuram 3.1e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|Q3Z5R9|MURG_SHISS UDP-N-acetylglucosamine--N-acetylmuram 3.2e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|Q32K02|MURG_SHIDS UDP-N-acetylglucosamine--N-acetylmuram 3.2e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|B2U295|MURG_SHIB3 UDP-N-acetylglucosamine--N-acetylmuram 3.2e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|B1IR88|MURG_ECOLC UDP-N-acetylglucosamine--N-acetylmuram 3.2e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|B1XC67|MURG_ECODH UDP-N-acetylglucosamine--N-acetylmuram 3.2e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|C4ZRI5|MURG_ECOBW UDP-N-acetylglucosamine--N-acetylmuram 3.2e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|P17443|MURG_ECOLI UDP-N-acetylglucosamine--N-acetylmuram 3.2e-36 129.1 1.3 9.4e-36 127.6 0.3 2.1 1 sp|A7ZW42|MURG_ECOHS UDP-N-acetylglucosamine--N-acetylmuram 3.2e-36 129.1 2.9 3.4e-35 125.8 0.3 2.6 2 sp|A4TQ83|MURG_YERPP UDP-N-acetylglucosamine--N-acetylmuram 3.5e-36 129.0 0.1 2.6e-35 126.1 0.0 2.4 1 sp|Q9CF92|MURG_LACLA UDP-N-acetylglucosamine--N-acetylmuram 3.7e-36 128.9 1.2 3.2e-35 125.8 0.2 2.3 1 sp|B5R2M4|MURG_SALEP UDP-N-acetylglucosamine--N-acetylmuram 3.8e-36 128.8 1.1 1.3e-35 127.1 0.2 2.1 1 sp|Q0T8A7|MURG_SHIF8 UDP-N-acetylglucosamine--N-acetylmuram 3.8e-36 128.8 1.1 1.3e-35 127.1 0.2 2.1 1 sp|Q83MN4|MURG_SHIFL UDP-N-acetylglucosamine--N-acetylmuram 4.1e-36 128.7 2.5 6.6e-35 124.8 0.2 2.3 2 sp|Q8CX35|MURG_SHEON UDP-N-acetylglucosamine--N-acetylmuram 4.3e-36 128.7 0.0 9.4e-36 127.6 0.0 1.6 1 sp|B8DBP8|MURG_LISMH UDP-N-acetylglucosamine--N-acetylmuram 4.6e-36 128.6 0.0 1.1e-35 127.4 0.0 1.6 1 sp|A0AKD5|MURG_LISW6 UDP-N-acetylglucosamine--N-acetylmuram 5.2e-36 128.4 2.9 1.3e-35 127.1 1.0 2.2 1 sp|Q9ZBA5|MURG_STRCO UDP-N-acetylglucosamine--N-acetylmuram 5.5e-36 128.3 0.0 1.2e-35 127.3 0.0 1.6 1 sp|Q929Y2|MURG_LISIN UDP-N-acetylglucosamine--N-acetylmuram 5.8e-36 128.3 0.5 1.2e-35 127.3 0.1 1.7 1 sp|B8F3B6|MURG_HAEPS UDP-N-acetylglucosamine--N-acetylmuram 5.9e-36 128.2 2.6 1.4e-35 127.0 0.2 2.2 1 sp|Q0HE83|MURG_SHESM UDP-N-acetylglucosamine--N-acetylmuram 6e-36 128.2 0.0 1.3e-35 127.2 0.0 1.6 1 sp|C1KWY8|MURG_LISMC UDP-N-acetylglucosamine--N-acetylmuram 6e-36 128.2 0.0 1.3e-35 127.2 0.0 1.6 1 sp|Q71XX8|MURG_LISMF UDP-N-acetylglucosamine--N-acetylmuram 6.4e-36 128.1 0.1 1.3e-35 127.1 0.1 1.5 1 sp|A1S2F9|MURG_SHEAM UDP-N-acetylglucosamine--N-acetylmuram 9.6e-36 127.5 0.1 2e-35 126.5 0.0 1.6 1 sp|A5UCW8|MURG_HAEIE UDP-N-acetylglucosamine--N-acetylmuram 9.8e-36 127.5 1.0 1.1e-33 120.9 0.1 2.6 2 sp|Q03QH5|MURG_LACBA UDP-N-acetylglucosamine--N-acetylmuram 1e-35 127.4 0.3 2.2e-35 126.4 0.2 1.6 1 sp|Q8DEL0|MURG_VIBVU UDP-N-acetylglucosamine--N-acetylmuram 1e-35 127.4 0.3 2.2e-35 126.4 0.2 1.6 1 sp|Q7MNV1|MURG_VIBVY UDP-N-acetylglucosamine--N-acetylmuram 1.3e-35 127.2 0.1 2.5e-35 126.2 0.1 1.5 1 sp|Q3IFY0|MURG_PSEHT UDP-N-acetylglucosamine--N-acetylmuram 1.3e-35 127.1 1.5 3.8e-35 125.6 0.4 2.1 1 sp|B7LFW0|MURG_ECO55 UDP-N-acetylglucosamine--N-acetylmuram 1.4e-35 127.0 0.2 2.4e-35 126.3 0.1 1.4 1 sp|B1KKX7|MURG_SHEWM UDP-N-acetylglucosamine--N-acetylmuram 2.3e-35 126.3 0.1 4.2e-35 125.5 0.1 1.5 1 sp|Q49929|Y2348_MYCLE Uncharacterized glycosyltransferase ML 2.3e-35 126.3 1.8 9.4e-35 124.3 0.2 2.1 1 sp|Q7N147|MURG_PHOLL UDP-N-acetylglucosamine--N-acetylmuram 2.3e-35 126.3 0.3 7.8e-35 124.6 0.1 1.9 1 sp|A8H984|MURG_SHEPA UDP-N-acetylglucosamine--N-acetylmuram 2.6e-35 126.1 2.1 5.7e-35 125.0 0.7 2.0 1 sp|Q820F6|MURG_STRAW UDP-N-acetylglucosamine--N-acetylmuram 2.8e-35 126.1 0.0 1.9e-34 123.3 0.0 2.2 1 sp|Q1WTA0|MURG_LACS1 UDP-N-acetylglucosamine--N-acetylmuram 3e-35 125.9 0.7 7.7e-35 124.6 0.5 1.6 1 sp|Q9X4H4|MURG_STRCU UDP-N-acetylglucosamine--N-acetylmuram 4e-35 125.6 1.3 7.1e-35 124.7 0.2 2.0 1 sp|Q12SC6|MURG_SHEDO UDP-N-acetylglucosamine--N-acetylmuram 4e-35 125.5 3.0 6e-35 125.0 0.2 2.2 1 sp|P57817|MURG_PASMU UDP-N-acetylglucosamine--N-acetylmuram 4.3e-35 125.4 1.1 1.1e-34 124.2 0.2 2.0 1 sp|Q87SG4|MURG_VIBPA UDP-N-acetylglucosamine--N-acetylmuram 4.4e-35 125.4 0.5 1.4e-34 123.7 0.1 1.9 1 sp|B0TQN7|MURG_SHEHH UDP-N-acetylglucosamine--N-acetylmuram 4.7e-35 125.3 0.5 1.7e-34 123.5 0.0 2.0 1 sp|C4L5U5|MURG_EXISA UDP-N-acetylglucosamine--N-acetylmuram 5.3e-35 125.1 0.5 1.2e-34 124.0 0.1 1.7 1 sp|A9M2H3|MURG_NEIM0 UDP-N-acetylglucosamine--N-acetylmuram 7.1e-35 124.7 1.7 1.1e-34 124.1 0.2 1.9 1 sp|Q6LMF6|MURG_PHOPR UDP-N-acetylglucosamine--N-acetylmuram 8.4e-35 124.5 0.2 1.7e-34 123.5 0.1 1.5 1 sp|Q5E2Q0|MURG_VIBF1 UDP-N-acetylglucosamine--N-acetylmuram 8.7e-35 124.4 0.2 1.6e-34 123.6 0.2 1.5 1 sp|P64865|Y1524_MYCTU Uncharacterized glycosyltransferase Rv 8.7e-35 124.4 0.2 1.6e-34 123.6 0.2 1.5 1 sp|P64866|Y1551_MYCBO Uncharacterized glycosyltransferase Mb 9e-35 124.4 0.2 1.7e-34 123.5 0.1 1.5 1 sp|B5FB35|MURG_VIBFM UDP-N-acetylglucosamine--N-acetylmuram 9.6e-35 124.3 0.3 2.5e-33 119.7 0.2 2.3 2 sp|B2GB78|MURG_LACF3 UDP-N-acetylglucosamine--N-acetylmuram 1e-34 124.2 0.1 2e-34 123.3 0.1 1.5 1 sp|B6ELH5|MURG_ALISL UDP-N-acetylglucosamine--N-acetylmuram 1.1e-34 124.1 0.0 2.4e-34 123.0 0.0 1.6 1 sp|B8CWJ6|MURG_HALOH UDP-N-acetylglucosamine--N-acetylmuram 1.1e-34 124.1 1.2 2.3e-34 123.1 0.2 1.9 1 sp|A7MXR6|MURG_VIBHB UDP-N-acetylglucosamine--N-acetylmuram 1.2e-34 124.1 0.5 3.3e-33 119.3 0.0 2.4 2 sp|A5VJ33|MURG_LACRD UDP-N-acetylglucosamine--N-acetylmuram 1.2e-34 124.1 0.5 3.3e-33 119.3 0.0 2.4 2 sp|B2G6K5|MURG_LACRJ UDP-N-acetylglucosamine--N-acetylmuram 1.4e-34 123.8 0.0 3.2e-34 122.6 0.0 1.7 1 sp|Q182Y6|MURG_CLOD6 UDP-N-acetylglucosamine--N-acetylmuram 1.4e-34 123.8 0.2 3.6e-34 122.5 0.2 1.7 1 sp|Q2NVV1|MURG_SODGM UDP-N-acetylglucosamine--N-acetylmuram 1.4e-34 123.8 0.1 3.6e-34 122.4 0.0 1.8 1 sp|Q07WI5|MURG_SHEFN UDP-N-acetylglucosamine--N-acetylmuram 1.4e-34 123.8 0.6 3e-34 122.7 0.1 1.7 1 sp|A1KVL3|MURG_NEIMF UDP-N-acetylglucosamine--N-acetylmuram 1.5e-34 123.7 0.4 3e-34 122.7 0.1 1.6 1 sp|Q9K0Y2|MURG_NEIMB UDP-N-acetylglucosamine--N-acetylmuram 1.8e-34 123.4 0.2 5.6e-34 121.8 0.0 1.8 1 sp|B8CNL1|MURG_SHEPW UDP-N-acetylglucosamine--N-acetylmuram 2e-34 123.3 1.8 1.4e-33 120.6 0.4 2.1 1 sp|C4LA25|MURG_TOLAT UDP-N-acetylglucosamine--N-acetylmuram 2e-34 123.3 0.2 6.1e-34 121.7 0.0 1.8 1 sp|Q9F1N0|MURG_SHEVI UDP-N-acetylglucosamine--N-acetylmuram 2.6e-34 122.9 0.5 6.5e-34 121.6 0.4 1.7 1 sp|A5F5M9|MURG_VIBC3 UDP-N-acetylglucosamine--N-acetylmuram 2.7e-34 122.9 0.1 9.4e-34 121.1 0.1 1.9 1 sp|Q03W35|MURG_LEUMM UDP-N-acetylglucosamine--N-acetylmuram 2.8e-34 122.8 2.7 4.4e-34 122.2 1.3 1.7 1 sp|A3Q1L8|MURG_MYCSJ UDP-N-acetylglucosamine--N-acetylmuram 2.8e-34 122.8 2.7 4.4e-34 122.2 1.3 1.7 1 sp|A1UI54|MURG_MYCSK UDP-N-acetylglucosamine--N-acetylmuram 2.8e-34 122.8 2.7 4.4e-34 122.2 1.3 1.7 1 sp|Q1B6X1|MURG_MYCSS UDP-N-acetylglucosamine--N-acetylmuram 3.3e-34 122.6 1.5 3.9e-34 122.3 0.3 1.7 1 sp|C3LQU6|MURG_VIBCM UDP-N-acetylglucosamine--N-acetylmuram 3.3e-34 122.6 1.5 3.9e-34 122.3 0.3 1.7 1 sp|Q9KPG7|MURG_VIBCH UDP-N-acetylglucosamine--N-acetylmuram 4.3e-34 122.2 0.1 7.6e-34 121.4 0.1 1.4 1 sp|A8FQA0|MURG_SHESH UDP-N-acetylglucosamine--N-acetylmuram 6.8e-34 121.5 0.4 1.6e-33 120.3 0.1 1.8 1 sp|B4RQC5|MURG_NEIG2 UDP-N-acetylglucosamine--N-acetylmuram 6.8e-34 121.5 0.4 1.6e-33 120.3 0.1 1.8 1 sp|Q5F6L8|MURG_NEIG1 UDP-N-acetylglucosamine--N-acetylmuram 7.6e-34 121.4 1.3 1.6e-33 120.4 0.3 2.0 1 sp|B1I4C4|MURG_DESAP UDP-N-acetylglucosamine--N-acetylmuram 8e-34 121.3 1.6 8e-34 121.3 1.1 2.2 1 sp|Q6A9Q2|MURG_PROAC UDP-N-acetylglucosamine--N-acetylmuram 8.6e-34 121.2 0.3 6.8e-33 118.3 0.0 2.4 1 sp|B3WDY2|MURG_LACCB UDP-N-acetylglucosamine--N-acetylmuram 8.6e-34 121.2 0.3 6.8e-33 118.3 0.0 2.4 1 sp|Q039R7|MURG_LACC3 UDP-N-acetylglucosamine--N-acetylmuram 9e-34 121.2 0.2 5.8e-33 118.5 0.0 2.3 1 sp|A4J2B1|MURG_DESRM UDP-N-acetylglucosamine--N-acetylmuram 9.5e-34 121.1 0.1 2.3e-33 119.8 0.0 1.7 1 sp|Q47VQ9|MURG_COLP3 UDP-N-acetylglucosamine--N-acetylmuram 1.1e-33 120.9 0.0 2.1e-33 120.0 0.0 1.5 1 sp|B2A2H2|MURG_NATTJ UDP-N-acetylglucosamine--N-acetylmuram 1.7e-33 120.3 1.6 2.3e-33 119.8 0.3 1.9 1 sp|Q6NGC8|MURG_CORDI UDP-N-acetylglucosamine--N-acetylmuram 1.7e-33 120.2 1.5 2.9e-33 119.5 0.3 1.8 1 sp|B4RWX9|MURG_ALTMD UDP-N-acetylglucosamine--N-acetylmuram 1.8e-33 120.2 0.3 3.7e-33 119.2 0.1 1.6 1 sp|Q9JSZ7|MURG_NEIMA UDP-N-acetylglucosamine--N-acetylmuram 1.9e-33 120.1 0.6 5.2e-32 115.5 0.2 2.5 2 sp|B0KFS6|MURG_PSEPG UDP-N-acetylglucosamine--N-acetylmuram 2.5e-33 119.7 0.8 5e-33 118.7 0.2 1.8 1 sp|A4XQS4|MURG_PSEMY UDP-N-acetylglucosamine--N-acetylmuram 2.5e-33 119.7 1.1 5.1e-33 118.7 0.4 1.7 1 sp|Q48EF8|MURG_PSE14 UDP-N-acetylglucosamine--N-acetylmuram 2.6e-33 119.7 0.0 2.6e-33 119.7 0.0 1.7 1 sp|Q8R9G6|MURG_THETN UDP-N-acetylglucosamine--N-acetylmuram 2.8e-33 119.6 0.2 4.7e-32 115.6 0.2 2.3 1 sp|A5W8Q0|MURG_PSEP1 UDP-N-acetylglucosamine--N-acetylmuram 2.8e-33 119.5 1.3 3.1e-32 116.2 0.4 2.4 1 sp|Q1I5B8|MURG_PSEE4 UDP-N-acetylglucosamine--N-acetylmuram 2.9e-33 119.5 0.9 6.5e-33 118.4 0.3 1.8 1 sp|Q87WY5|MURG_PSESM UDP-N-acetylglucosamine--N-acetylmuram 3.4e-33 119.3 0.0 5.8e-33 118.5 0.0 1.4 1 sp|C3L230|MURG_CLOB6 UDP-N-acetylglucosamine--N-acetylmuram 3.5e-33 119.3 0.5 6.5e-33 118.4 0.1 1.7 1 sp|A1WC06|MURG_ACISJ UDP-N-acetylglucosamine--N-acetylmuram 3.5e-33 119.3 0.5 6.5e-33 118.4 0.1 1.7 1 sp|B9MFR2|MURG_DIAST UDP-N-acetylglucosamine--N-acetylmuram 3.6e-33 119.2 3.2 3.6e-33 119.2 2.2 2.3 1 sp|B8ZQQ0|MURG_MYCLB UDP-N-acetylglucosamine--N-acetylmuram 3.6e-33 119.2 3.2 3.6e-33 119.2 2.2 2.3 1 sp|O69552|MURG_MYCLE UDP-N-acetylglucosamine--N-acetylmuram 3.7e-33 119.2 0.0 2.1e-32 116.8 0.0 1.9 1 sp|Q893R7|MURG_CLOTE UDP-N-acetylglucosamine--N-acetylmuram 3.8e-33 119.1 0.0 6.5e-33 118.4 0.0 1.4 1 sp|A7GGX9|MURG_CLOBL UDP-N-acetylglucosamine--N-acetylmuram 3.8e-33 119.1 0.0 6.5e-33 118.4 0.0 1.4 1 sp|B1IKH3|MURG_CLOBK UDP-N-acetylglucosamine--N-acetylmuram 3.8e-33 119.1 0.0 6.5e-33 118.4 0.0 1.4 1 sp|C1FUF9|MURG_CLOBJ UDP-N-acetylglucosamine--N-acetylmuram 3.8e-33 119.1 0.0 6.5e-33 118.4 0.0 1.4 1 sp|A5I5J5|MURG_CLOBH UDP-N-acetylglucosamine--N-acetylmuram 3.8e-33 119.1 0.0 6.5e-33 118.4 0.0 1.4 1 sp|A7FX11|MURG_CLOB1 UDP-N-acetylglucosamine--N-acetylmuram 3.8e-33 119.1 1.1 7.4e-33 118.2 0.4 1.7 1 sp|Q4ZNZ0|MURG_PSEU2 UDP-N-acetylglucosamine--N-acetylmuram 4.3e-33 119.0 0.0 4.3e-32 115.7 0.0 2.2 1 sp|A4XI04|MURG_CALS8 UDP-N-acetylglucosamine--N-acetylmuram 4.6e-33 118.9 1.2 1.1e-32 117.6 0.8 1.7 1 sp|A0R016|MURG_MYCS2 UDP-N-acetylglucosamine--N-acetylmuram 5.1e-33 118.7 0.0 2e-32 116.8 0.0 2.0 1 sp|A8YUN9|MURG_LACH4 UDP-N-acetylglucosamine--N-acetylmuram 5.6e-33 118.6 0.6 5.6e-33 118.6 0.4 2.6 1 sp|A1SL80|MURG_NOCSJ UDP-N-acetylglucosamine--N-acetylmuram 5.8e-33 118.5 1.0 7.1e-32 115.0 0.3 2.4 1 sp|Q88N76|MURG_PSEPK UDP-N-acetylglucosamine--N-acetylmuram 8.3e-33 118.0 0.0 1.4e-32 117.3 0.0 1.4 1 sp|B1KYH7|MURG_CLOBM UDP-N-acetylglucosamine--N-acetylmuram 8.7e-33 118.0 2.7 1.5e-32 117.2 0.1 2.5 1 sp|Q24TE6|MURG_DESHY UDP-N-acetylglucosamine--N-acetylmuram 9e-33 117.9 1.5 1.8e-32 117.0 0.5 1.9 1 sp|Q3K744|MURG_PSEPF UDP-N-acetylglucosamine--N-acetylmuram 9.4e-33 117.9 0.7 1.7e-31 113.8 0.4 2.4 1 sp|B1J3L2|MURG_PSEPW UDP-N-acetylglucosamine--N-acetylmuram 1e-32 117.8 0.1 1.1e-31 114.4 0.0 2.4 1 sp|B0K3H0|MURG_THEPX UDP-N-acetylglucosamine--N-acetylmuram 1e-32 117.8 0.1 1.1e-31 114.4 0.0 2.4 1 sp|B0K8K7|MURG_THEP3 UDP-N-acetylglucosamine--N-acetylmuram 1e-32 117.7 0.0 1.5e-31 114.0 0.0 2.2 1 sp|A3DE27|MURG_CLOTH UDP-N-acetylglucosamine--N-acetylmuram 1.4e-32 117.3 3.8 2.3e-32 116.6 1.1 2.3 1 sp|A1TAW8|MURG_MYCVP UDP-N-acetylglucosamine--N-acetylmuram 1.6e-32 117.1 1.3 7.6e-32 114.9 0.2 2.5 1 sp|B8FT56|MURG_DESHD UDP-N-acetylglucosamine--N-acetylmuram 2.3e-32 116.6 1.2 2.3e-32 116.6 0.8 1.7 1 sp|Q9RWP0|MURG_DEIRA UDP-N-acetylglucosamine--N-acetylmuram 2.5e-32 116.5 1.3 1.8e-31 113.7 0.3 2.2 1 sp|B2I1J5|MURG_ACIBC UDP-N-acetylglucosamine--N-acetylmuram 2.5e-32 116.5 1.3 1.8e-31 113.7 0.3 2.2 1 sp|B0V9F5|MURG_ACIBY UDP-N-acetylglucosamine--N-acetylmuram 2.5e-32 116.5 1.3 1.8e-31 113.7 0.3 2.2 1 sp|B7GV73|MURG_ACIB3 UDP-N-acetylglucosamine--N-acetylmuram 2.5e-32 116.5 1.3 1.8e-31 113.7 0.3 2.2 1 sp|B7ICE5|MURG_ACIB5 UDP-N-acetylglucosamine--N-acetylmuram 2.5e-32 116.5 0.1 2.5e-32 116.5 0.0 2.0 1 sp|A5D145|MURG_PELTS UDP-N-acetylglucosamine--N-acetylmuram 2.9e-32 116.3 1.2 1.8e-31 113.7 0.3 2.2 1 sp|A3M9Y1|MURG_ACIBT UDP-N-acetylglucosamine--N-acetylmuram 2.9e-32 116.3 0.0 5.9e-32 115.3 0.0 1.6 1 sp|A9KK83|MURG_CLOPH UDP-N-acetylglucosamine--N-acetylmuram 3.6e-32 116.0 0.7 7.1e-32 115.0 0.5 1.5 1 sp|C3KCT0|MURG_PSEFS UDP-N-acetylglucosamine--N-acetylmuram 4.5e-32 115.7 0.0 9.5e-32 114.6 0.0 1.6 1 sp|Q03EY2|MURG_PEDPA UDP-N-acetylglucosamine--N-acetylmuram 4.8e-32 115.6 1.5 1.3e-31 114.2 1.0 1.7 1 sp|A0QF52|MURG_MYCA1 UDP-N-acetylglucosamine--N-acetylmuram 5.3e-32 115.4 0.0 2.1e-30 110.2 0.0 2.5 2 sp|Q04B72|MURG_LACDB UDP-N-acetylglucosamine--N-acetylmuram 5.3e-32 115.4 0.0 2.1e-30 110.2 0.0 2.5 2 sp|Q1GAT5|MURG_LACDA UDP-N-acetylglucosamine--N-acetylmuram 6.7e-32 115.1 2.3 9.1e-32 114.7 0.6 2.0 1 sp|Q4K6J3|MURG_PSEF5 UDP-N-acetylglucosamine--N-acetylmuram 7.5e-32 114.9 1.2 5.8e-31 112.1 0.3 2.2 1 sp|B0VNZ9|MURG_ACIBS UDP-N-acetylglucosamine--N-acetylmuram 8.8e-32 114.7 0.0 5e-31 112.3 0.0 2.1 1 sp|Q5FKV2|MURG_LACAC UDP-N-acetylglucosamine--N-acetylmuram 1.1e-31 114.5 2.0 7.3e-31 111.7 0.3 2.4 1 sp|A0KPX2|MURG_AERHH UDP-N-acetylglucosamine--N-acetylmuram 1.2e-31 114.3 4.6 1.4e-31 114.1 2.4 1.7 1 sp|A1WYU3|MURG_HALHL UDP-N-acetylglucosamine--N-acetylmuram 1.2e-31 114.3 2.2 3.1e-31 113.0 1.5 1.7 1 sp|Q73YQ8|MURG_MYCPA UDP-N-acetylglucosamine--N-acetylmuram 1.2e-31 114.3 1.0 2.2e-31 113.4 0.3 1.7 1 sp|B1MXW0|MURG_LEUCK UDP-N-acetylglucosamine--N-acetylmuram 1.3e-31 114.2 0.4 3.4e-31 112.8 0.3 1.7 1 sp|Q604V7|MURG_METCA UDP-N-acetylglucosamine--N-acetylmuram 1.3e-31 114.2 0.0 2.3e-31 113.3 0.0 1.4 1 sp|B2V1X5|MURG_CLOBA UDP-N-acetylglucosamine--N-acetylmuram 1.7e-31 113.8 0.2 3.4e-31 112.8 0.1 1.5 1 sp|A1U3F8|MURG_MARAV UDP-N-acetylglucosamine--N-acetylmuram 2.1e-31 113.5 0.0 2.5e-30 110.0 0.0 2.2 1 sp|A8MH36|MURG_ALKOO UDP-N-acetylglucosamine--N-acetylmuram 2.1e-31 113.5 0.0 5.3e-31 112.2 0.0 1.6 1 sp|B2TLE0|MURG_CLOBB UDP-N-acetylglucosamine--N-acetylmuram 2.6e-31 113.2 2.0 1.5e-30 110.7 0.3 2.4 1 sp|A4SI56|MURG_AERS4 UDP-N-acetylglucosamine--N-acetylmuram 3e-31 113.0 0.0 1.3e-30 111.0 0.0 1.9 1 sp|C4Z1B5|MURG_EUBE2 UDP-N-acetylglucosamine--N-acetylmuram 3.1e-31 113.0 0.3 6.9e-31 111.8 0.2 1.6 1 sp|C1DQ99|MURG_AZOVD UDP-N-acetylglucosamine--N-acetylmuram 3.1e-31 112.9 1.0 1.8e-30 110.5 0.3 2.1 1 sp|Q6F703|MURG_ACIAD UDP-N-acetylglucosamine--N-acetylmuram 3.2e-31 112.9 0.0 5.3e-31 112.2 0.0 1.4 1 sp|B1YIT7|MURG_EXIS2 UDP-N-acetylglucosamine--N-acetylmuram 5e-31 112.3 2.6 1.2e-30 111.1 1.8 1.6 1 sp|C1CW40|MURG_DEIDV UDP-N-acetylglucosamine--N-acetylmuram 5.1e-31 112.2 0.9 1.9e-30 110.4 0.3 1.9 1 sp|Q47QW9|MURG_THEFY UDP-N-acetylglucosamine--N-acetylmuram 5.3e-31 112.2 0.0 9e-31 111.4 0.0 1.4 1 sp|A0Q182|MURG_CLONN UDP-N-acetylglucosamine--N-acetylmuram 5.3e-31 112.2 1.4 5.3e-31 112.2 0.9 2.0 1 sp|A1KKJ6|MURG_MYCBP UDP-N-acetylglucosamine--N-acetylmuram 5.3e-31 112.2 1.4 5.3e-31 112.2 0.9 2.0 1 sp|C1AQ69|MURG_MYCBT UDP-N-acetylglucosamine--N-acetylmuram 5.3e-31 112.2 1.4 5.3e-31 112.2 0.9 2.0 1 sp|Q7VEP8|MURG_MYCBO UDP-N-acetylglucosamine--N-acetylmuram 6.3e-31 111.9 0.0 1e-30 111.3 0.0 1.3 1 sp|B0S0Z5|MURG_FINM2 UDP-N-acetylglucosamine--N-acetylmuram 7.7e-31 111.7 0.2 4.9e-30 109.0 0.2 2.1 1 sp|B7UZJ0|MURG_PSEA8 UDP-N-acetylglucosamine--N-acetylmuram 7.7e-31 111.7 0.2 4.9e-30 109.0 0.2 2.1 1 sp|Q02H28|MURG_PSEAB UDP-N-acetylglucosamine--N-acetylmuram 7.7e-31 111.7 0.2 4.9e-30 109.0 0.2 2.1 1 sp|Q9HW01|MURG_PSEAE UDP-N-acetylglucosamine--N-acetylmuram 7.8e-31 111.6 0.8 7.8e-31 111.6 0.5 2.2 1 sp|A0PTI7|MURG_MYCUA UDP-N-acetylglucosamine--N-acetylmuram 8.2e-31 111.6 0.2 4.9e-30 109.0 0.2 2.1 1 sp|A6VB85|MURG_PSEA7 UDP-N-acetylglucosamine--N-acetylmuram 8.5e-31 111.5 0.1 1.5e-30 110.7 0.1 1.4 1 sp|A9KER3|MURG_COXBN UDP-N-acetylglucosamine--N-acetylmuram 8.6e-31 111.5 0.1 1.5e-30 110.7 0.1 1.4 1 sp|A9NA44|MURG_COXBR UDP-N-acetylglucosamine--N-acetylmuram 8.6e-31 111.5 0.1 1.5e-30 110.7 0.1 1.4 1 sp|B6J2Q3|MURG_COXB2 UDP-N-acetylglucosamine--N-acetylmuram 8.6e-31 111.5 0.1 1.5e-30 110.7 0.1 1.4 1 sp|B6J5K3|MURG_COXB1 UDP-N-acetylglucosamine--N-acetylmuram 8.6e-31 111.5 0.1 1.5e-30 110.7 0.1 1.4 1 sp|Q820X3|MURG_COXBU UDP-N-acetylglucosamine--N-acetylmuram 9.1e-31 111.4 0.0 2.9e-30 109.8 0.0 1.9 1 sp|Q042P9|MURG_LACGA UDP-N-acetylglucosamine--N-acetylmuram 9.6e-31 111.4 1.3 9.6e-31 111.4 0.9 2.1 1 sp|B2HGR6|MURG_MYCMM UDP-N-acetylglucosamine--N-acetylmuram 1e-30 111.2 0.8 2.7e-30 109.9 0.2 1.8 1 sp|Q0VS02|MURG_ALCBS UDP-N-acetylglucosamine--N-acetylmuram 1.1e-30 111.2 2.3 1.1e-30 111.2 1.6 1.8 1 sp|Q0RNP1|MURG_FRAAA UDP-N-acetylglucosamine--N-acetylmuram 1.2e-30 111.0 2.9 2.1e-30 110.3 0.5 2.3 1 sp|Q2RK79|MURG_MOOTA UDP-N-acetylglucosamine--N-acetylmuram 1.3e-30 111.0 2.6 1.3e-30 111.0 1.8 1.7 1 sp|Q1IXV9|MURG_DEIGD UDP-N-acetylglucosamine--N-acetylmuram 1.3e-30 111.0 0.0 5.5e-30 108.9 0.0 2.0 1 sp|Q74JY4|MURG_LACJO UDP-N-acetylglucosamine--N-acetylmuram 1.5e-30 110.7 0.0 3.9e-30 109.4 0.0 1.7 1 sp|A5MZ55|MURG_CLOK5 UDP-N-acetylglucosamine--N-acetylmuram 1.8e-30 110.5 0.6 3.7e-30 109.5 0.4 1.5 1 sp|A1TKD1|MURG_ACIAC UDP-N-acetylglucosamine--N-acetylmuram 1.9e-30 110.4 0.0 4.3e-30 109.3 0.0 1.6 1 sp|B7J0L2|MURG_BORBZ UDP-N-acetylglucosamine--N-acetylmuram 1.9e-30 110.4 0.0 4.3e-30 109.3 0.0 1.6 1 sp|O51708|MURG_BORBU UDP-N-acetylglucosamine--N-acetylmuram 2e-30 110.3 1.0 4.2e-30 109.3 0.7 1.6 1 sp|Q15Q17|MURG_PSEA6 UDP-N-acetylglucosamine--N-acetylmuram 2.1e-30 110.3 0.0 5.7e-30 108.9 0.0 1.8 1 sp|A7A179|ATG26_YEAS7 Sterol 3-beta-glucosyltransferase OS=S 2.3e-30 110.1 0.5 4.8e-30 109.1 0.4 1.6 1 sp|Q1D0T0|MURG_MYXXD UDP-N-acetylglucosamine--N-acetylmuram 2.5e-30 110.0 1.0 2.5e-30 110.0 0.7 1.6 1 sp|Q1QVG7|MURG_CHRSD UDP-N-acetylglucosamine--N-acetylmuram 2.6e-30 110.0 0.5 2.6e-30 110.0 0.3 2.1 1 sp|A4VIH8|MURG_PSEU5 UDP-N-acetylglucosamine--N-acetylmuram 2.7e-30 109.9 0.0 8.3e-30 108.3 0.0 1.8 1 sp|Q38XM8|MURG_LACSS UDP-N-acetylglucosamine--N-acetylmuram 3.3e-30 109.6 0.4 8.3e-30 108.3 0.1 1.8 1 sp|A1SU19|MURG_PSYIN UDP-N-acetylglucosamine--N-acetylmuram 3.4e-30 109.6 0.0 7.1e-30 108.5 0.0 1.6 1 sp|Q31I59|MURG_THICR UDP-N-acetylglucosamine--N-acetylmuram 3.4e-30 109.6 0.0 8.7e-30 108.3 0.0 1.7 1 sp|Q04ET0|MURG_OENOB UDP-N-acetylglucosamine--N-acetylmuram 3.4e-30 109.6 0.9 3.4e-30 109.6 0.6 1.8 1 sp|Q2KVG0|MURG_BORA1 UDP-N-acetylglucosamine--N-acetylmuram 3.6e-30 109.5 0.3 7.1e-30 108.5 0.2 1.5 1 sp|Q5R0M1|MURG_IDILO UDP-N-acetylglucosamine--N-acetylmuram 3.7e-30 109.5 0.1 1e-29 108.1 0.0 1.7 1 sp|Q5WAE4|MURG_BACSK UDP-N-acetylglucosamine--N-acetylmuram 3.7e-30 109.5 3.4 1.3e-29 107.6 1.0 2.3 1 sp|Q2JD50|MURG_FRASC UDP-N-acetylglucosamine--N-acetylmuram 3.8e-30 109.4 1.3 8.8e-30 108.2 0.9 1.6 1 sp|B5ELC3|MURG_ACIF5 UDP-N-acetylglucosamine--N-acetylmuram 3.8e-30 109.4 1.3 8.8e-30 108.2 0.9 1.6 1 sp|B7J3V2|MURG_ACIF2 UDP-N-acetylglucosamine--N-acetylmuram 3.9e-30 109.4 0.0 7.7e-30 108.4 0.0 1.5 1 sp|Q0SM88|MURG_BORAP UDP-N-acetylglucosamine--N-acetylmuram 4.2e-30 109.3 0.3 1.1e-29 107.9 0.2 1.7 1 sp|Q4FQV9|MURG_PSYA2 UDP-N-acetylglucosamine--N-acetylmuram 4.5e-30 109.2 0.0 2.9e-29 106.6 0.0 2.2 1 sp|Q730T5|MURG2_BACC1 UDP-N-acetylglucosamine--N-acetylmuram 4.8e-30 109.1 0.0 2.6e-29 106.7 0.0 2.1 1 sp|Q1LSW5|MURG_BAUCH UDP-N-acetylglucosamine--N-acetylmuram 5.4e-30 108.9 0.2 9.8e-30 108.1 0.2 1.4 1 sp|Q9WY74|MURG_THEMA UDP-N-acetylglucosamine--N-acetylmuram 5.5e-30 108.9 0.2 9.8e-30 108.1 0.1 1.4 1 sp|B1L9S1|MURG_THESQ UDP-N-acetylglucosamine--N-acetylmuram 5.5e-30 108.9 0.2 9.8e-30 108.1 0.2 1.4 1 sp|A5IKI9|MURG_THEP1 UDP-N-acetylglucosamine--N-acetylmuram 5.9e-30 108.8 1.4 1.4e-29 107.5 0.6 1.9 1 sp|A4FLW0|MURG_SACEN UDP-N-acetylglucosamine--N-acetylmuram 6.6e-30 108.6 1.4 1.3e-29 107.7 0.9 1.5 1 sp|Q9RNM6|MURG_ZYMMO UDP-N-acetylglucosamine--N-acetylmuram 7.1e-30 108.5 0.0 1.9e-29 107.1 0.0 1.8 1 sp|Q06321|ATG26_YEAST Sterol 3-beta-glucosyltransferase OS=S 7.2e-30 108.5 3.0 1.2e-29 107.8 2.1 1.4 1 sp|Q9PF81|MURG_XYLFA UDP-N-acetylglucosamine--N-acetylmuram 7.9e-30 108.4 1.5 7.9e-30 108.4 1.0 1.9 1 sp|Q5GW41|MURG_XANOR UDP-N-acetylglucosamine--N-acetylmuram 8.9e-30 108.2 0.2 1.4e-29 107.6 0.1 1.3 1 sp|B2S3B6|MURG_TREPS UDP-N-acetylglucosamine--N-acetylmuram 8.9e-30 108.2 0.2 1.4e-29 107.6 0.1 1.3 1 sp|O83535|MURG_TREPA UDP-N-acetylglucosamine--N-acetylmuram 9.2e-30 108.2 0.0 1.7e-29 107.3 0.0 1.5 1 sp|Q0AJE1|MURG_NITEC UDP-N-acetylglucosamine--N-acetylmuram 1e-29 108.1 1.1 1e-29 108.1 0.8 1.8 1 sp|B3PCM0|MURG_CELJU UDP-N-acetylglucosamine--N-acetylmuram 1.2e-29 107.8 0.1 2e-29 107.0 0.1 1.4 1 sp|A5G8K0|MURG_GEOUR UDP-N-acetylglucosamine--N-acetylmuram 1.2e-29 107.8 1.4 1.2e-29 107.8 1.0 2.1 1 sp|A5U4I0|MURG_MYCTA UDP-N-acetylglucosamine--N-acetylmuram 1.2e-29 107.8 1.4 1.2e-29 107.8 1.0 2.1 1 sp|O06224|MURG_MYCTU UDP-N-acetylglucosamine--N-acetylmuram 1.3e-29 107.7 1.0 1.3e-29 107.7 0.7 2.2 1 sp|Q4JW95|MURG_CORJK UDP-N-acetylglucosamine--N-acetylmuram 1.4e-29 107.6 0.0 3.3e-29 106.4 0.0 1.6 1 sp|Q97GY4|MURG_CLOAB UDP-N-acetylglucosamine--N-acetylmuram 1.5e-29 107.4 0.0 2.5e-29 106.8 0.0 1.4 1 sp|Q9Z702|MURG_CHLPN UDP-N-acetylglucosamine--N-acetylmuram 1.6e-29 107.4 0.4 2.8e-29 106.6 0.3 1.4 1 sp|Q1Q944|MURG_PSYCK UDP-N-acetylglucosamine--N-acetylmuram 1.7e-29 107.3 0.5 5.5e-29 105.6 0.3 1.9 1 sp|C0RE70|MURG_BRUMB UDP-N-acetylglucosamine--N-acetylmuram 1.7e-29 107.3 0.5 5.5e-29 105.6 0.3 1.9 1 sp|Q8YI66|MURG_BRUME UDP-N-acetylglucosamine--N-acetylmuram 1.7e-29 107.3 1.3 3.8e-29 106.2 0.9 1.6 1 sp|Q3BXF2|MURG_XANC5 UDP-N-acetylglucosamine--N-acetylmuram 1.9e-29 107.2 0.5 5.5e-29 105.6 0.3 1.8 1 sp|B2S6Q4|MURG_BRUA1 UDP-N-acetylglucosamine--N-acetylmuram 1.9e-29 107.2 0.5 5.5e-29 105.6 0.3 1.8 1 sp|Q2YLY5|MURG_BRUA2 UDP-N-acetylglucosamine--N-acetylmuram 1.9e-29 107.2 0.5 5.5e-29 105.6 0.3 1.8 1 sp|Q57C78|MURG_BRUAB UDP-N-acetylglucosamine--N-acetylmuram 1.9e-29 107.1 0.0 4.1e-29 106.1 0.0 1.6 1 sp|Q660A8|MURG_BORGA UDP-N-acetylglucosamine--N-acetylmuram 1.9e-29 107.1 0.0 3.8e-29 106.2 0.0 1.5 1 sp|B8I6H3|MURG_CLOCE UDP-N-acetylglucosamine--N-acetylmuram 1.9e-29 107.1 0.5 5.5e-29 105.6 0.3 1.8 1 sp|A5VRH7|MURG_BRUO2 UDP-N-acetylglucosamine--N-acetylmuram 1.9e-29 107.1 0.5 5.5e-29 105.6 0.3 1.8 1 sp|B0CHM0|MURG_BRUSI UDP-N-acetylglucosamine--N-acetylmuram 2e-29 107.1 1.4 4e-29 106.1 0.7 1.8 1 sp|A0JV94|MURG_ARTS2 UDP-N-acetylglucosamine--N-acetylmuram 2e-29 107.1 0.0 4.1e-29 106.1 0.0 1.5 1 sp|A6TS61|MURG_ALKMQ UDP-N-acetylglucosamine--N-acetylmuram 2e-29 107.1 0.0 4e-29 106.1 0.0 1.5 1 sp|C5D4C2|MURG_GEOSW UDP-N-acetylglucosamine--N-acetylmuram 2e-29 107.1 0.5 5.5e-29 105.6 0.3 1.7 1 sp|A9M690|MURG_BRUC2 UDP-N-acetylglucosamine--N-acetylmuram 2e-29 107.0 1.6 6.1e-29 105.5 1.1 1.8 1 sp|Q8PPA8|MURG_XANAC UDP-N-acetylglucosamine--N-acetylmuram 2e-29 107.0 0.5 5.5e-29 105.6 0.3 1.7 1 sp|Q8CY39|MURG_BRUSU UDP-N-acetylglucosamine--N-acetylmuram 2.2e-29 106.9 1.6 5e-29 105.8 1.1 1.6 1 sp|A1WRL1|MURG_VEREI UDP-N-acetylglucosamine--N-acetylmuram 2.7e-29 106.7 0.0 1.3e-28 104.4 0.0 2.1 1 sp|Q812T8|MURG2_BACCR UDP-N-acetylglucosamine--N-acetylmuram 2.9e-29 106.6 3.7 4.8e-29 105.9 2.6 1.4 1 sp|B0U4Z7|MURG_XYLFM UDP-N-acetylglucosamine--N-acetylmuram 3.1e-29 106.5 0.0 5.3e-29 105.7 0.0 1.4 1 sp|A4IJS4|MURG_GEOTN UDP-N-acetylglucosamine--N-acetylmuram 3.2e-29 106.4 1.4 3.2e-29 106.4 0.9 1.9 1 sp|Q2NZB8|MURG_XANOM UDP-N-acetylglucosamine--N-acetylmuram 4.6e-29 105.9 0.0 7.6e-29 105.2 0.0 1.4 1 sp|A5FIY3|MURG_FLAJ1 UDP-N-acetylglucosamine--N-acetylmuram 6e-29 105.5 0.6 1.6e-28 104.2 0.4 1.7 1 sp|Q39JX0|MURG_BURS3 UDP-N-acetylglucosamine--N-acetylmuram 6.9e-29 105.3 3.5 9.4e-29 104.9 1.1 2.1 1 sp|C1A0X5|MURG_RHOE4 UDP-N-acetylglucosamine--N-acetylmuram 7.3e-29 105.3 0.3 1.8e-28 103.9 0.1 1.8 1 sp|Q748D6|MURG_GEOSL UDP-N-acetylglucosamine--N-acetylmuram 8.2e-29 105.1 0.1 1.3e-28 104.4 0.1 1.4 1 sp|Q820Y4|MURG_TROWT UDP-N-acetylglucosamine--N-acetylmuram 8.2e-29 105.1 0.1 1.3e-28 104.4 0.1 1.4 1 sp|Q83HK1|MURG_TROW8 UDP-N-acetylglucosamine--N-acetylmuram 8.3e-29 105.1 3.4 1.3e-28 104.5 0.9 2.2 1 sp|A4QFM3|MURG_CORGB UDP-N-acetylglucosamine--N-acetylmuram 8.5e-29 105.0 0.5 1.8e-28 104.0 0.1 1.7 1 sp|Q39YL9|MURG_GEOMG UDP-N-acetylglucosamine--N-acetylmuram 8.5e-29 105.0 0.0 1.3e-28 104.5 0.0 1.3 1 sp|A1R0I9|MURG_BORT9 UDP-N-acetylglucosamine--N-acetylmuram 8.7e-29 105.0 0.0 2e-28 103.9 0.0 1.6 1 sp|Q3AAE6|MURG_CARHZ UDP-N-acetylglucosamine--N-acetylmuram 9.1e-29 104.9 3.5 1.3e-28 104.5 0.9 2.2 1 sp|Q8NNN5|MURG_CORGL UDP-N-acetylglucosamine--N-acetylmuram 9.1e-29 104.9 0.0 2e-28 103.8 0.0 1.6 1 sp|Q0TNP7|MURG_CLOP1 UDP-N-acetylglucosamine--N-acetylmuram 9.1e-29 104.9 0.0 2e-28 103.8 0.0 1.6 1 sp|Q8XIQ1|MURG_CLOPE UDP-N-acetylglucosamine--N-acetylmuram 9.4e-29 104.9 0.0 2e-28 103.8 0.0 1.6 1 sp|Q0SRB4|MURG_CLOPS UDP-N-acetylglucosamine--N-acetylmuram 1e-28 104.8 2.6 1.9e-28 103.9 1.8 1.5 1 sp|Q5YYX9|MURG_NOCFA UDP-N-acetylglucosamine--N-acetylmuram 1.1e-28 104.7 2.7 1.5e-28 104.3 0.4 2.0 1 sp|A7HH67|MURG_ANADF UDP-N-acetylglucosamine--N-acetylmuram 1.1e-28 104.6 0.0 2.6e-28 103.5 0.0 1.6 1 sp|Q82VS3|MURG_NITEU UDP-N-acetylglucosamine--N-acetylmuram 1.2e-28 104.6 3.5 1.3e-28 104.4 1.4 1.9 1 sp|B0RVA5|MURG_XANCB UDP-N-acetylglucosamine--N-acetylmuram 1.2e-28 104.6 0.8 2.9e-28 103.3 0.5 1.7 1 sp|Q2SZI3|MURG_BURTA UDP-N-acetylglucosamine--N-acetylmuram 1.2e-28 104.5 1.3 1.8e-28 104.0 0.3 1.7 1 sp|Q11GS5|MURG_MESSB UDP-N-acetylglucosamine--N-acetylmuram 1.3e-28 104.5 3.6 1.3e-28 104.4 1.4 1.9 1 sp|Q4UQX0|MURG_XANC8 UDP-N-acetylglucosamine--N-acetylmuram 1.3e-28 104.5 3.6 1.3e-28 104.4 1.4 1.9 1 sp|Q8PCK0|MURG_XANCP UDP-N-acetylglucosamine--N-acetylmuram 1.3e-28 104.4 0.8 3.4e-28 103.1 0.5 1.7 1 sp|A3NZL5|MURG_BURP0 UDP-N-acetylglucosamine--N-acetylmuram 1.5e-28 104.3 2.8 1.7e-28 104.1 0.7 1.9 1 sp|Q98KB3|MURG_RHILO UDP-N-acetylglucosamine--N-acetylmuram 1.5e-28 104.2 1.6 3.5e-28 103.1 1.1 1.6 1 sp|Q0A6K2|MURG_ALHEH UDP-N-acetylglucosamine--N-acetylmuram 1.5e-28 104.2 0.0 3.4e-28 103.1 0.0 1.6 1 sp|A5IGA6|MURG_LEGPC UDP-N-acetylglucosamine--N-acetylmuram 1.6e-28 104.2 0.0 2.6e-28 103.5 0.0 1.4 1 sp|Q5L3H6|MURG_GEOKA UDP-N-acetylglucosamine--N-acetylmuram 1.7e-28 104.1 2.6 2.9e-28 103.3 0.9 2.1 1 sp|A0LTM3|MURG_ACIC1 UDP-N-acetylglucosamine--N-acetylmuram 2.1e-28 103.7 0.0 4.3e-28 102.8 0.0 1.5 1 sp|Q3A2G6|MURG_PELCD UDP-N-acetylglucosamine--N-acetylmuram 2.2e-28 103.7 0.2 5.5e-27 99.2 0.0 2.6 1 sp|Q0AYQ8|MURG_SYNWW UDP-N-acetylglucosamine--N-acetylmuram 2.5e-28 103.5 0.4 7.6e-28 102.0 0.1 1.9 1 sp|Q1LIM6|MURG_RALME UDP-N-acetylglucosamine--N-acetylmuram 2.6e-28 103.5 2.0 2.1e-27 100.5 0.5 2.2 1 sp|Q92NL9|MURG_RHIME UDP-N-acetylglucosamine--N-acetylmuram 2.8e-28 103.4 0.7 2.2e-27 100.4 0.3 2.1 1 sp|Q72JP9|MURG_THET2 UDP-N-acetylglucosamine--N-acetylmuram 2.8e-28 103.4 1.3 2.8e-28 103.4 0.9 2.3 1 sp|A1R5F8|MURG_ARTAT UDP-N-acetylglucosamine--N-acetylmuram 2.9e-28 103.3 3.7 4.9e-28 102.6 2.6 1.4 1 sp|Q87AF9|MURG_XYLFT UDP-N-acetylglucosamine--N-acetylmuram 3e-28 103.3 3.7 4.9e-28 102.6 2.6 1.4 1 sp|B2I9B3|MURG_XYLF2 UDP-N-acetylglucosamine--N-acetylmuram 3.3e-28 103.1 1.4 5.6e-28 102.4 0.3 1.9 1 sp|A6WZQ6|MURG_OCHA4 UDP-N-acetylglucosamine--N-acetylmuram 3.3e-28 103.1 0.7 8.6e-28 101.8 0.5 1.7 1 sp|A1V0R8|MURG_BURMS UDP-N-acetylglucosamine--N-acetylmuram 3.3e-28 103.1 0.7 8.6e-28 101.8 0.5 1.7 1 sp|A2S5U5|MURG_BURM9 UDP-N-acetylglucosamine--N-acetylmuram 3.3e-28 103.1 0.7 8.6e-28 101.8 0.5 1.7 1 sp|A3MR63|MURG_BURM7 UDP-N-acetylglucosamine--N-acetylmuram 3.3e-28 103.1 0.7 8.6e-28 101.8 0.5 1.7 1 sp|Q62GS7|MURG_BURMA UDP-N-acetylglucosamine--N-acetylmuram 3.3e-28 103.1 0.7 8.6e-28 101.8 0.5 1.7 1 sp|Q63QJ7|MURG_BURPS UDP-N-acetylglucosamine--N-acetylmuram 3.3e-28 103.1 0.7 8.6e-28 101.8 0.5 1.7 1 sp|A3NDW4|MURG_BURP6 UDP-N-acetylglucosamine--N-acetylmuram 3.9e-28 102.9 0.4 8.7e-28 101.8 0.3 1.6 1 sp|Q3J789|MURG_NITOC UDP-N-acetylglucosamine--N-acetylmuram 3.9e-28 102.9 0.0 6e-28 102.3 0.0 1.3 1 sp|Q8K9T4|MURG_BUCAP UDP-N-acetylglucosamine--N-acetylmuram 4e-28 102.9 0.4 7.8e-28 101.9 0.0 1.7 1 sp|B9M172|MURG_GEOSF UDP-N-acetylglucosamine--N-acetylmuram 4e-28 102.9 0.4 1.1e-27 101.5 0.0 1.9 1 sp|B5EBQ1|MURG_GEOBB UDP-N-acetylglucosamine--N-acetylmuram 4.2e-28 102.8 0.9 1.1e-27 101.5 0.6 1.7 1 sp|Q3JND8|MURG_BURP1 UDP-N-acetylglucosamine--N-acetylmuram 4.2e-28 102.8 1.1 8.4e-28 101.8 0.3 1.8 1 sp|Q1IKH0|MURG_ACIBL UDP-N-acetylglucosamine--N-acetylmuram 4.2e-28 102.8 0.1 1.4e-27 101.1 0.0 1.9 1 sp|P74657|MURG_SYNY3 UDP-N-acetylglucosamine--N-acetylmuram 4.4e-28 102.7 0.5 9.7e-28 101.6 0.4 1.6 1 sp|B1YSS4|MURG_BURA4 UDP-N-acetylglucosamine--N-acetylmuram 4.4e-28 102.7 0.5 9.7e-28 101.6 0.4 1.6 1 sp|Q0BIK1|MURG_BURCM UDP-N-acetylglucosamine--N-acetylmuram 5.7e-28 102.4 0.0 2.2e-27 100.5 0.0 1.9 1 sp|Q6HDR3|MURG2_BACHK UDP-N-acetylglucosamine--N-acetylmuram 5.7e-28 102.4 0.0 2.2e-27 100.5 0.0 1.9 1 sp|Q81JE6|MURG2_BACAN UDP-N-acetylglucosamine--N-acetylmuram 6.2e-28 102.2 0.9 1.3e-27 101.2 0.2 1.8 1 sp|Q0K6M4|MURG_RALEH UDP-N-acetylglucosamine--N-acetylmuram 6.4e-28 102.2 0.0 1.5e-27 101.0 0.0 1.6 1 sp|Q5WY98|MURG_LEGPL UDP-N-acetylglucosamine--N-acetylmuram 6.5e-28 102.2 0.0 2.2e-27 100.5 0.0 1.8 1 sp|A0RIN0|MURG3_BACAH UDP-N-acetylglucosamine--N-acetylmuram 6.7e-28 102.1 0.5 1.7e-27 100.9 0.4 1.7 1 sp|Q7W4B4|MURG_BORPA UDP-N-acetylglucosamine--N-acetylmuram 6.7e-28 102.1 0.0 1.5e-27 101.0 0.0 1.6 1 sp|Q5X6U5|MURG_LEGPA UDP-N-acetylglucosamine--N-acetylmuram 6.7e-28 102.1 0.0 1.5e-27 101.0 0.0 1.6 1 sp|Q5ZXC4|MURG_LEGPH UDP-N-acetylglucosamine--N-acetylmuram 6.9e-28 102.1 0.0 1.1e-27 101.4 0.0 1.4 1 sp|A6M1F0|MURG_CLOB8 UDP-N-acetylglucosamine--N-acetylmuram 7.7e-28 101.9 0.0 1.1e-27 101.4 0.0 1.2 1 sp|B8D7B9|MURG_BUCAT UDP-N-acetylglucosamine--N-acetylmuram 7.7e-28 101.9 0.0 1.1e-27 101.4 0.0 1.2 1 sp|P57311|MURG_BUCAI UDP-N-acetylglucosamine--N-acetylmuram 8.3e-28 101.8 0.5 2e-27 100.6 0.4 1.7 1 sp|Q7VUQ3|MURG_BORPE UDP-N-acetylglucosamine--N-acetylmuram 8.4e-28 101.8 0.5 2e-27 100.6 0.4 1.7 1 sp|Q7WFS2|MURG_BORBR UDP-N-acetylglucosamine--N-acetylmuram 8.7e-28 101.8 1.5 3.6e-27 99.8 0.3 2.1 1 sp|B2SYX6|MURG_BURPP UDP-N-acetylglucosamine--N-acetylmuram 9.7e-28 101.6 0.0 1.6e-27 100.9 0.0 1.4 1 sp|B0B8Y7|MURG_CHLT2 UDP-N-acetylglucosamine--N-acetylmuram 9.7e-28 101.6 0.0 1.6e-27 100.9 0.0 1.4 1 sp|B0BAL6|MURG_CHLTB UDP-N-acetylglucosamine--N-acetylmuram 1e-27 101.5 0.0 1.5e-27 101.0 0.0 1.2 1 sp|B8D914|MURG_BUCA5 UDP-N-acetylglucosamine--N-acetylmuram 1.1e-27 101.5 0.4 2.4e-27 100.4 0.3 1.6 1 sp|Q47AA4|MURG_DECAR UDP-N-acetylglucosamine--N-acetylmuram 1.2e-27 101.4 0.5 2.3e-27 100.4 0.3 1.5 1 sp|A4JB94|MURG_BURVG UDP-N-acetylglucosamine--N-acetylmuram 1.3e-27 101.2 0.1 2.2e-27 100.4 0.1 1.4 1 sp|Q2Y638|MURG_NITMU UDP-N-acetylglucosamine--N-acetylmuram 1.5e-27 101.0 1.1 2.6e-27 100.2 0.2 1.8 1 sp|B2JHG0|MURG_BURP8 UDP-N-acetylglucosamine--N-acetylmuram 1.5e-27 101.0 0.0 2.6e-27 100.2 0.0 1.4 1 sp|O84766|MURG_CHLTR UDP-N-acetylglucosamine--N-acetylmuram 1.5e-27 101.0 0.0 2.6e-27 100.2 0.0 1.4 1 sp|Q3KKT1|MURG_CHLTA UDP-N-acetylglucosamine--N-acetylmuram 1.8e-27 100.8 0.1 3.5e-27 99.8 0.0 1.5 1 sp|A1AU61|MURG_PELPD UDP-N-acetylglucosamine--N-acetylmuram 1.8e-27 100.8 0.0 3.6e-27 99.8 0.0 1.5 1 sp|Q2LR48|MURG_SYNAS UDP-N-acetylglucosamine--N-acetylmuram 1.8e-27 100.7 1.6 3.2e-27 99.9 0.6 1.8 1 sp|Q2G995|MURG_NOVAD UDP-N-acetylglucosamine--N-acetylmuram 1.9e-27 100.7 0.9 4.2e-27 99.5 0.3 1.8 1 sp|A5EY03|MURG_DICNV UDP-N-acetylglucosamine--N-acetylmuram 2e-27 100.6 5.4 2e-27 100.6 0.8 2.4 1 sp|Q8FNU0|MURG_COREF UDP-N-acetylglucosamine--N-acetylmuram 2e-27 100.6 0.9 4.5e-27 99.4 0.6 1.6 1 sp|A9AI96|MURG_BURM1 UDP-N-acetylglucosamine--N-acetylmuram 2.3e-27 100.4 0.2 3.9e-27 99.7 0.1 1.4 1 sp|Q21SW9|MURG_RHOFD UDP-N-acetylglucosamine--N-acetylmuram 2.6e-27 100.2 0.0 4.9e-27 99.3 0.0 1.5 1 sp|B5YFT4|MURG_THEYD UDP-N-acetylglucosamine--N-acetylmuram 2.7e-27 100.2 0.0 7e-27 98.8 0.0 1.8 1 sp|A7KAK6|ATG26_PICAN Sterol 3-beta-glucosyltransferase OS=P 3.1e-27 100.0 0.7 6.9e-27 98.9 0.1 1.8 1 sp|Q46WZ4|MURG_RALEJ UDP-N-acetylglucosamine--N-acetylmuram 3.1e-27 100.0 1.6 1.1e-26 98.1 0.3 2.1 1 sp|Q13TZ2|MURG_BURXL UDP-N-acetylglucosamine--N-acetylmuram 3.3e-27 99.9 0.2 1.1e-26 98.2 0.0 2.0 1 sp|C6DZK6|MURG_GEOSM UDP-N-acetylglucosamine--N-acetylmuram 4.4e-27 99.5 0.0 7.7e-27 98.7 0.0 1.4 1 sp|A8GVJ7|MURG_RICB8 UDP-N-acetylglucosamine--N-acetylmuram 4.4e-27 99.5 0.0 7.7e-27 98.7 0.0 1.4 1 sp|Q1RI55|MURG_RICBR UDP-N-acetylglucosamine--N-acetylmuram 5.2e-27 99.2 1.7 5.1e-26 96.0 0.7 2.2 1 sp|B5ZWJ4|MURG_RHILW UDP-N-acetylglucosamine--N-acetylmuram 5.4e-27 99.2 0.0 1e-26 98.3 0.0 1.5 1 sp|B0JFZ1|MURG_MICAN UDP-N-acetylglucosamine--N-acetylmuram 5.8e-27 99.1 0.2 1.3e-26 98.0 0.1 1.6 1 sp|Q31KS7|MURG_SYNE7 UDP-N-acetylglucosamine--N-acetylmuram 6e-27 99.1 0.2 1.3e-26 97.9 0.1 1.6 1 sp|Q5N140|MURG_SYNP6 UDP-N-acetylglucosamine--N-acetylmuram 6.4e-27 99.0 0.0 1.6e-26 97.6 0.0 1.7 1 sp|Q14I26|MURG_FRAT1 UDP-N-acetylglucosamine--N-acetylmuram 6.4e-27 99.0 0.0 1.6e-26 97.6 0.0 1.7 1 sp|Q5NGM4|MURG_FRATT UDP-N-acetylglucosamine--N-acetylmuram 6.5e-27 98.9 0.0 1.5e-26 97.8 0.0 1.6 1 sp|Q493Q1|MURG_BLOPB UDP-N-acetylglucosamine--N-acetylmuram 6.5e-27 98.9 0.0 1.1e-26 98.2 0.0 1.4 1 sp|Q92I58|MURG_RICCN UDP-N-acetylglucosamine--N-acetylmuram 6.5e-27 98.9 0.0 1.1e-26 98.2 0.0 1.4 1 sp|C3PND5|MURG_RICAE UDP-N-acetylglucosamine--N-acetylmuram 6.5e-27 98.9 0.0 1.1e-26 98.2 0.0 1.4 1 sp|C4K2A6|MURG_RICPU UDP-N-acetylglucosamine--N-acetylmuram 6.6e-27 98.9 0.0 1e-26 98.3 0.0 1.3 1 sp|B2S1A8|MURG_BORHD UDP-N-acetylglucosamine--N-acetylmuram 6.6e-27 98.9 0.0 1.1e-26 98.2 0.0 1.4 1 sp|A8GRZ6|MURG_RICRS UDP-N-acetylglucosamine--N-acetylmuram 6.6e-27 98.9 0.0 1.1e-26 98.2 0.0 1.4 1 sp|B0BXF6|MURG_RICRO UDP-N-acetylglucosamine--N-acetylmuram 6.7e-27 98.9 0.5 1.5e-26 97.8 0.4 1.6 1 sp|Q3SMH3|MURG_THIDA UDP-N-acetylglucosamine--N-acetylmuram 6.7e-27 98.9 0.9 1.7e-26 97.6 0.7 1.7 1 sp|Q21MG9|MURG_SACD2 UDP-N-acetylglucosamine--N-acetylmuram 8.7e-27 98.5 0.0 6.8e-26 95.6 0.0 2.2 1 sp|B1IAM4|MURG_STRPI UDP-N-acetylglucosamine--N-acetylmuram 8.7e-27 98.5 0.0 6.8e-26 95.6 0.0 2.2 1 sp|Q04LK0|MURG_STRP2 UDP-N-acetylglucosamine--N-acetylmuram 8.7e-27 98.5 0.0 6.8e-26 95.6 0.0 2.2 1 sp|Q8DQM1|MURG_STRR6 UDP-N-acetylglucosamine--N-acetylmuram 8.7e-27 98.5 0.0 6.8e-26 95.6 0.0 2.2 1 sp|B2IN77|MURG_STRPS UDP-N-acetylglucosamine--N-acetylmuram 8.8e-27 98.5 0.0 6.8e-26 95.6 0.0 2.2 1 sp|C1CQG5|MURG_STRZT UDP-N-acetylglucosamine--N-acetylmuram 8.9e-27 98.5 0.0 6.8e-26 95.6 0.0 2.2 1 sp|C1CD52|MURG_STRZJ UDP-N-acetylglucosamine--N-acetylmuram 9e-27 98.5 0.0 2.4e-26 97.1 0.0 1.7 1 sp|Q634T3|MURG2_BACCZ UDP-N-acetylglucosamine--N-acetylmuram 9e-27 98.5 0.3 1.7e-26 97.5 0.2 1.5 1 sp|A1VST6|MURG_POLNA UDP-N-acetylglucosamine--N-acetylmuram 9e-27 98.5 2.0 3.5e-26 96.6 0.8 2.1 1 sp|A6UB85|MURG_SINMW UDP-N-acetylglucosamine--N-acetylmuram 9.2e-27 98.5 0.0 5.5e-26 95.9 0.0 2.0 1 sp|B9DNZ7|MURG_STACT UDP-N-acetylglucosamine--N-acetylmuram 1e-26 98.3 0.5 2.6e-26 97.0 0.4 1.7 1 sp|B4E6J2|MURG_BURCJ UDP-N-acetylglucosamine--N-acetylmuram 1.1e-26 98.3 0.5 2.6e-26 97.0 0.4 1.7 1 sp|B1JV78|MURG_BURCC UDP-N-acetylglucosamine--N-acetylmuram 1.1e-26 98.2 0.0 6.8e-26 95.6 0.0 2.1 1 sp|C1C649|MURG_STRP7 UDP-N-acetylglucosamine--N-acetylmuram 1.1e-26 98.2 0.4 3e-26 96.8 0.2 1.7 1 sp|Q2S9Z2|MURG_HAHCH UDP-N-acetylglucosamine--N-acetylmuram 1.1e-26 98.2 0.0 7.6e-26 95.5 0.0 2.2 1 sp|B5E2Z9|MURG_STRP4 UDP-N-acetylglucosamine--N-acetylmuram 1.1e-26 98.2 0.0 7.6e-26 95.5 0.0 2.2 1 sp|C1CJF3|MURG_STRZP UDP-N-acetylglucosamine--N-acetylmuram 1.1e-26 98.1 0.4 2.5e-26 97.1 0.3 1.6 1 sp|A9I4V2|MURG_BORPD UDP-N-acetylglucosamine--N-acetylmuram 1.3e-26 98.0 2.0 1.3e-26 98.0 1.4 2.0 1 sp|B0RIJ3|MURG_CLAMS UDP-N-acetylglucosamine--N-acetylmuram 1.4e-26 97.9 0.0 1.1e-25 95.0 0.0 2.2 1 sp|P0CB60|MURG_STRPN UDP-N-acetylglucosamine--N-acetylmuram 1.4e-26 97.9 0.0 1e-25 95.0 0.0 2.2 1 sp|B8ZMZ7|MURG_STRPJ UDP-N-acetylglucosamine--N-acetylmuram 1.4e-26 97.8 1.6 1.1e-25 94.9 0.7 2.2 1 sp|B3PTW0|MURG_RHIE6 UDP-N-acetylglucosamine--N-acetylmuram 1.5e-26 97.8 1.9 3.3e-26 96.7 1.3 1.6 1 sp|Q0SHS1|MURG_RHOSR UDP-N-acetylglucosamine--N-acetylmuram 1.5e-26 97.7 2.4 3.1e-26 96.8 0.9 2.0 1 sp|Q313Q3|MURG_DESDG UDP-N-acetylglucosamine--N-acetylmuram 1.6e-26 97.7 0.0 3.1e-26 96.8 0.0 1.5 1 sp|A8F1I4|MURG_RICM5 UDP-N-acetylglucosamine--N-acetylmuram 1.6e-26 97.7 0.0 2.5e-26 97.0 0.0 1.3 1 sp|A6H195|MURG_FLAPJ UDP-N-acetylglucosamine--N-acetylmuram 1.7e-26 97.6 1.4 2.6e-26 97.0 0.4 1.8 1 sp|A0K486|MURG_BURCH UDP-N-acetylglucosamine--N-acetylmuram 1.7e-26 97.6 1.4 2.6e-26 97.0 0.4 1.8 1 sp|Q1BZG3|MURG_BURCA UDP-N-acetylglucosamine--N-acetylmuram 1.7e-26 97.6 0.3 3.4e-26 96.6 0.2 1.5 1 sp|Q12EL5|MURG_POLSJ UDP-N-acetylglucosamine--N-acetylmuram 1.8e-26 97.5 1.2 4.5e-26 96.2 0.9 1.6 1 sp|Q8UDM8|MURG_AGRT5 UDP-N-acetylglucosamine--N-acetylmuram 2e-26 97.3 0.1 3.4e-26 96.6 0.0 1.4 1 sp|B7K5Z6|MURG_CYAP8 UDP-N-acetylglucosamine--N-acetylmuram 2.1e-26 97.3 0.3 8e-26 95.4 0.2 2.0 1 sp|Q2NCZ0|MURG_ERYLH UDP-N-acetylglucosamine--N-acetylmuram 2.1e-26 97.3 0.0 7.3e-26 95.5 0.0 2.0 1 sp|Q9Y751|ATG26_PICPG Sterol 3-beta-glucosyltransferase OS=P 2.1e-26 97.3 0.3 4.2e-26 96.3 0.2 1.5 1 sp|Q5P6Z6|MURG_AZOSE UDP-N-acetylglucosamine--N-acetylmuram 2.3e-26 97.1 1.7 4.3e-26 96.3 1.1 1.5 1 sp|B6IRG2|MURG_RHOCS UDP-N-acetylglucosamine--N-acetylmuram 2.4e-26 97.1 0.0 3.9e-26 96.4 0.0 1.4 1 sp|A7TF84|ATG26_VANPO Sterol 3-beta-glucosyltransferase OS=V 2.4e-26 97.1 2.4 1.7e-25 94.3 1.4 2.1 1 sp|Q2S528|MURG_SALRD UDP-N-acetylglucosamine--N-acetylmuram 2.5e-26 97.0 0.0 6.5e-26 95.7 0.0 1.7 1 sp|B2SGS8|MURG_FRATM UDP-N-acetylglucosamine--N-acetylmuram 2.6e-26 97.0 0.0 6.5e-26 95.7 0.0 1.7 1 sp|A4IX64|MURG_FRATW UDP-N-acetylglucosamine--N-acetylmuram 2.7e-26 96.9 1.6 6.3e-26 95.7 1.1 1.7 1 sp|Q67Q48|MURG_SYMTH UDP-N-acetylglucosamine--N-acetylmuram 3.1e-26 96.7 0.0 6.6e-26 95.7 0.0 1.6 1 sp|Q6C8M8|ATG26_YARLI Sterol 3-beta-glucosyltransferase OS=Y 3.1e-26 96.7 2.1 7e-26 95.6 1.4 1.6 1 sp|C1AU55|MURG_RHOOB UDP-N-acetylglucosamine--N-acetylmuram 3.2e-26 96.7 0.1 6.8e-26 95.6 0.1 1.6 1 sp|B3E3Y2|MURG_GEOLS UDP-N-acetylglucosamine--N-acetylmuram 3.2e-26 96.7 0.0 8.1e-26 95.4 0.0 1.7 1 sp|A0Q766|MURG_FRATN UDP-N-acetylglucosamine--N-acetylmuram 3.2e-26 96.7 0.0 4.9e-26 96.1 0.0 1.3 1 sp|B1WVP7|MURG_CYAA5 UDP-N-acetylglucosamine--N-acetylmuram 3.8e-26 96.5 0.0 6.8e-26 95.6 0.0 1.4 1 sp|B0TY93|MURG_FRAP2 UDP-N-acetylglucosamine--N-acetylmuram 3.8e-26 96.4 0.0 8.7e-26 95.3 0.0 1.6 1 sp|Q68WW7|MURG_RICTY UDP-N-acetylglucosamine--N-acetylmuram 4.1e-26 96.4 0.0 7.5e-26 95.5 0.0 1.5 1 sp|Q6GGZ0|MURG_STAAR UDP-N-acetylglucosamine--N-acetylmuram 5e-26 96.1 0.6 1.4e-25 94.6 0.4 1.7 1 sp|B9JH51|MURG_AGRRK UDP-N-acetylglucosamine--N-acetylmuram 5.6e-26 95.9 0.0 1.2e-25 94.9 0.0 1.6 1 sp|Q6BN88|ATG26_DEBHA Sterol 3-beta-glucosyltransferase OS=D 6.1e-26 95.8 0.0 1.6e-25 94.5 0.0 1.7 1 sp|A7NDC0|MURG_FRATF UDP-N-acetylglucosamine--N-acetylmuram 6.1e-26 95.8 0.0 1.6e-25 94.5 0.0 1.7 1 sp|Q0BL37|MURG_FRATO UDP-N-acetylglucosamine--N-acetylmuram 6.1e-26 95.8 0.0 1.6e-25 94.5 0.0 1.7 1 sp|Q2A2I7|MURG_FRATH UDP-N-acetylglucosamine--N-acetylmuram 6.5e-26 95.7 2.5 6.5e-26 95.7 1.7 1.9 1 sp|A5CS51|MURG_CLAM3 UDP-N-acetylglucosamine--N-acetylmuram 6.6e-26 95.7 0.0 1.1e-25 94.9 0.0 1.4 1 sp|Q9ZDC0|MURG_RICPR UDP-N-acetylglucosamine--N-acetylmuram 7.1e-26 95.6 0.0 1.2e-25 94.8 0.0 1.4 1 sp|Q9ZK59|MURG_HELPJ UDP-N-acetylglucosamine--N-acetylmuram 7.7e-26 95.5 0.0 1.4e-25 94.6 0.0 1.4 1 sp|B7KGH1|MURG_CYAP7 UDP-N-acetylglucosamine--N-acetylmuram 7.9e-26 95.4 0.0 1.4e-25 94.6 0.0 1.4 1 sp|Q4L6C8|MURG_STAHJ UDP-N-acetylglucosamine--N-acetylmuram 9.3e-26 95.2 1.4 9.3e-26 95.2 0.9 1.7 1 sp|B4UES1|MURG_ANASK UDP-N-acetylglucosamine--N-acetylmuram 9.8e-26 95.1 3.1 1.4e-25 94.7 1.3 1.8 1 sp|B9JY54|MURG_AGRVS UDP-N-acetylglucosamine--N-acetylmuram 1.3e-25 94.7 1.4 4.4e-25 93.0 0.8 1.9 1 sp|Q1ME33|MURG_RHIL3 UDP-N-acetylglucosamine--N-acetylmuram 1.4e-25 94.6 0.0 2.5e-25 93.8 0.0 1.4 1 sp|A8EZ14|MURG_RICCK UDP-N-acetylglucosamine--N-acetylmuram 1.6e-25 94.5 0.0 3.8e-25 93.2 0.0 1.7 1 sp|Q5A950|ATG26_CANAL Sterol 3-beta-glucosyltransferase OS=C 1.6e-25 94.4 1.3 1.6e-25 94.4 0.9 1.7 1 sp|Q2IG27|MURG_ANADE UDP-N-acetylglucosamine--N-acetylmuram 2e-25 94.1 1.4 2e-25 94.1 1.0 1.7 1 sp|B8J8E8|MURG_ANAD2 UDP-N-acetylglucosamine--N-acetylmuram 2.1e-25 94.0 1.0 5.2e-25 92.8 0.7 1.7 1 sp|C3MEM9|MURG_RHISN UDP-N-acetylglucosamine--N-acetylmuram 2.1e-25 94.0 0.0 4.1e-25 93.1 0.0 1.5 1 sp|Q1CSB1|MURG_HELPH UDP-N-acetylglucosamine--N-acetylmuram 2.3e-25 93.9 0.0 4.4e-25 93.0 0.0 1.4 1 sp|P59424|MURG_BUCBP UDP-N-acetylglucosamine--N-acetylmuram 2.3e-25 93.9 1.4 1.3e-24 91.4 0.8 2.1 1 sp|Q2K6C1|MURG_RHIEC UDP-N-acetylglucosamine--N-acetylmuram 2.4e-25 93.9 0.0 4.1e-25 93.1 0.0 1.4 1 sp|O25770|MURG_HELPY UDP-N-acetylglucosamine--N-acetylmuram 2.4e-25 93.9 0.0 5.7e-25 92.6 0.0 1.6 1 sp|A0M527|MURG_GRAFK UDP-N-acetylglucosamine--N-acetylmuram 2.4e-25 93.9 0.0 4.1e-25 93.1 0.0 1.4 1 sp|B2UUR4|MURG_HELPS UDP-N-acetylglucosamine--N-acetylmuram 2.4e-25 93.8 0.0 4.5e-25 93.0 0.0 1.5 1 sp|Q3K2P3|MURG_STRA1 UDP-N-acetylglucosamine--N-acetylmuram 2.4e-25 93.8 0.0 4.5e-25 93.0 0.0 1.5 1 sp|Q8CX15|MURG_STRA5 UDP-N-acetylglucosamine--N-acetylmuram 2.4e-25 93.8 0.0 4.5e-25 93.0 0.0 1.5 1 sp|Q8E6P0|MURG_STRA3 UDP-N-acetylglucosamine--N-acetylmuram 2.4e-25 93.8 0.0 4.8e-25 92.9 0.0 1.5 1 sp|Q7U346|MURG_BLOFL UDP-N-acetylglucosamine--N-acetylmuram 2.7e-25 93.7 0.0 4.8e-25 92.9 0.0 1.4 1 sp|Q5HPC0|MURG_STAEQ UDP-N-acetylglucosamine--N-acetylmuram 2.7e-25 93.7 0.0 4.8e-25 92.9 0.0 1.4 1 sp|Q8CMM3|MURG_STAES UDP-N-acetylglucosamine--N-acetylmuram 2.9e-25 93.6 0.7 5.8e-25 92.6 0.3 1.7 1 sp|Q01Q48|MURG_SOLUE UDP-N-acetylglucosamine--N-acetylmuram 2.9e-25 93.6 0.0 4.9e-25 92.8 0.0 1.4 1 sp|B5Z8F1|MURG_HELPG UDP-N-acetylglucosamine--N-acetylmuram 3.1e-25 93.5 0.0 5.8e-25 92.6 0.0 1.5 1 sp|Q5L524|MURG_CHLAB UDP-N-acetylglucosamine--N-acetylmuram 3.2e-25 93.5 0.0 5.6e-25 92.7 0.0 1.4 1 sp|Q255W4|MURG_CHLFF UDP-N-acetylglucosamine--N-acetylmuram 3.2e-25 93.5 0.0 6.7e-25 92.4 0.0 1.5 1 sp|Q820E0|MURG_CHLCV UDP-N-acetylglucosamine--N-acetylmuram 3.3e-25 93.4 2.3 3.5e-25 93.3 0.2 2.0 1 sp|Q8XVI7|MURG_RALSO UDP-N-acetylglucosamine--N-acetylmuram 3.6e-25 93.3 0.0 6.6e-25 92.4 0.0 1.4 1 sp|Q4ULT6|MURG_RICFE UDP-N-acetylglucosamine--N-acetylmuram 3.9e-25 93.2 0.0 6.6e-25 92.4 0.0 1.4 1 sp|Q49XM9|MURG_STAS1 UDP-N-acetylglucosamine--N-acetylmuram 3.9e-25 93.2 0.0 6.5e-25 92.5 0.0 1.4 1 sp|Q119X8|MURG_TRIEI UDP-N-acetylglucosamine--N-acetylmuram 4e-25 93.2 0.0 1.3e-24 91.5 0.0 1.9 1 sp|Q03L97|MURG_STRTD UDP-N-acetylglucosamine--N-acetylmuram 4e-25 93.1 1.0 7.4e-25 92.3 0.7 1.5 1 sp|A0L5N1|MURG_MAGSM UDP-N-acetylglucosamine--N-acetylmuram 4.2e-25 93.1 3.7 4.2e-25 93.1 1.2 2.0 1 sp|B8H091|MURG_CAUCN UDP-N-acetylglucosamine--N-acetylmuram 4.2e-25 93.1 3.7 4.2e-25 93.1 1.2 2.0 1 sp|Q9A5A1|MURG_CAUCR UDP-N-acetylglucosamine--N-acetylmuram 4.4e-25 93.0 0.0 7.8e-25 92.2 0.0 1.4 1 sp|A8GNC7|MURG_RICAH UDP-N-acetylglucosamine--N-acetylmuram 4.7e-25 92.9 0.0 1.5e-24 91.3 0.0 1.9 1 sp|B5XMA2|MURG_STRPZ UDP-N-acetylglucosamine--N-acetylmuram 4.8e-25 92.9 0.0 7.7e-25 92.2 0.0 1.3 1 sp|B6JMZ5|MURG_HELP2 UDP-N-acetylglucosamine--N-acetylmuram 5e-25 92.8 0.0 1e-24 91.8 0.0 1.6 1 sp|A7ERM5|ATG26_SCLS1 Sterol 3-beta-glucosyltransferase OS=S 5.1e-25 92.8 0.3 1.2e-24 91.6 0.2 1.6 1 sp|Q7V466|MURG_PROMM UDP-N-acetylglucosamine--N-acetylmuram 5.7e-25 92.7 0.3 1.2e-24 91.7 0.2 1.5 1 sp|A2CDG1|MURG_PROM3 UDP-N-acetylglucosamine--N-acetylmuram 5.8e-25 92.6 0.0 2.1e-24 90.8 0.0 1.9 1 sp|Q5M0D4|MURG_STRT1 UDP-N-acetylglucosamine--N-acetylmuram 5.8e-25 92.6 0.0 2.1e-24 90.8 0.0 1.9 1 sp|Q5M4Y1|MURG_STRT2 UDP-N-acetylglucosamine--N-acetylmuram 5.8e-25 92.6 0.0 1.1e-24 91.7 0.0 1.5 1 sp|A6QGX0|MURG_STAAE UDP-N-acetylglucosamine--N-acetylmuram 5.8e-25 92.6 0.0 1.1e-24 91.7 0.0 1.5 1 sp|Q2FYL5|MURG_STAA8 UDP-N-acetylglucosamine--N-acetylmuram 5.8e-25 92.6 0.0 1.1e-24 91.7 0.0 1.5 1 sp|Q5HG02|MURG_STAAC UDP-N-acetylglucosamine--N-acetylmuram 5.8e-25 92.6 0.0 1.1e-24 91.7 0.0 1.5 1 sp|Q6G9E3|MURG_STAAS UDP-N-acetylglucosamine--N-acetylmuram 5.8e-25 92.6 0.0 1.1e-24 91.7 0.0 1.5 1 sp|Q8NWR4|MURG_STAAW UDP-N-acetylglucosamine--N-acetylmuram 5.8e-25 92.6 0.0 1.1e-24 91.7 0.0 1.5 1 sp|A5ISU9|MURG_STAA9 UDP-N-acetylglucosamine--N-acetylmuram 5.8e-25 92.6 0.0 1.1e-24 91.7 0.0 1.5 1 sp|A6U1N8|MURG_STAA2 UDP-N-acetylglucosamine--N-acetylmuram 5.8e-25 92.6 0.0 1.1e-24 91.7 0.0 1.5 1 sp|A7X2A2|MURG_STAA1 UDP-N-acetylglucosamine--N-acetylmuram 5.8e-25 92.6 0.0 1.1e-24 91.7 0.0 1.5 1 sp|P65481|MURG_STAAM UDP-N-acetylglucosamine--N-acetylmuram 5.8e-25 92.6 0.0 1.1e-24 91.7 0.0 1.5 1 sp|P65482|MURG_STAAN UDP-N-acetylglucosamine--N-acetylmuram 6e-25 92.6 0.0 1.1e-24 91.7 0.0 1.4 1 sp|Q2YY01|MURG_STAAB UDP-N-acetylglucosamine--N-acetylmuram 6.2e-25 92.5 0.0 2.1e-24 90.8 0.0 1.9 1 sp|Q7MAW5|MURG_PORGI UDP-N-acetylglucosamine--N-acetylmuram 6.3e-25 92.5 0.1 2.1e-24 90.8 0.0 1.9 1 sp|A2RDL0|MURG_STRPG UDP-N-acetylglucosamine--N-acetylmuram 6.4e-25 92.5 0.1 2.1e-24 90.8 0.0 1.9 1 sp|Q5XB05|MURG_STRP6 UDP-N-acetylglucosamine--N-acetylmuram 7.5e-25 92.3 0.0 2.5e-24 90.6 0.0 1.9 1 sp|Q1JAT5|MURG_STRPB UDP-N-acetylglucosamine--N-acetylmuram 7.5e-25 92.3 0.0 2.5e-24 90.6 0.0 1.9 1 sp|Q1JKY5|MURG_STRPC UDP-N-acetylglucosamine--N-acetylmuram 9.4e-25 91.9 0.0 2.1e-24 90.8 0.0 1.6 1 sp|B2RIF1|MURG_PORG3 UDP-N-acetylglucosamine--N-acetylmuram 1e-24 91.8 0.0 2.4e-24 90.6 0.0 1.6 1 sp|C0M6J2|MURG_STRE4 UDP-N-acetylglucosamine--N-acetylmuram 1.3e-24 91.5 1.0 2.8e-24 90.4 0.7 1.6 1 sp|A1UTC5|MURG_BARBK UDP-N-acetylglucosamine--N-acetylmuram 1.3e-24 91.5 0.0 3e-24 90.3 0.0 1.6 1 sp|C0MD54|MURG_STRS7 UDP-N-acetylglucosamine--N-acetylmuram 1.4e-24 91.3 0.0 3.2e-24 90.2 0.0 1.6 1 sp|B4U1U4|MURG_STREM UDP-N-acetylglucosamine--N-acetylmuram 1.4e-24 91.3 0.0 2.7e-24 90.5 0.0 1.5 1 sp|A5CWW1|MURG_VESOH UDP-N-acetylglucosamine--N-acetylmuram 1.5e-24 91.3 1.6 4.1e-24 89.9 1.1 1.7 1 sp|A1A2E9|MURG_BIFAA UDP-N-acetylglucosamine--N-acetylmuram 1.5e-24 91.2 0.0 5.1e-24 89.6 0.0 1.9 1 sp|P65483|MURG_STRP1 UDP-N-acetylglucosamine--N-acetylmuram 1.5e-24 91.2 0.0 5.1e-24 89.6 0.0 1.9 1 sp|P65484|MURG_STRP8 UDP-N-acetylglucosamine--N-acetylmuram 1.5e-24 91.2 0.0 5.1e-24 89.6 0.0 1.9 1 sp|Q48SK9|MURG_STRPM UDP-N-acetylglucosamine--N-acetylmuram 1.6e-24 91.2 0.0 5.1e-24 89.6 0.0 1.9 1 sp|Q1J5S6|MURG_STRPF UDP-N-acetylglucosamine--N-acetylmuram 1.6e-24 91.2 0.0 3e-24 90.3 0.0 1.5 1 sp|A8Z3Z7|MURG_STAAT UDP-N-acetylglucosamine--N-acetylmuram 1.6e-24 91.2 0.0 3e-24 90.3 0.0 1.5 1 sp|Q2FH20|MURG_STAA3 UDP-N-acetylglucosamine--N-acetylmuram 1.6e-24 91.2 0.0 5.1e-24 89.6 0.0 1.9 1 sp|Q1JG11|MURG_STRPD UDP-N-acetylglucosamine--N-acetylmuram 1.8e-24 91.0 0.0 4e-24 89.9 0.0 1.6 1 sp|Q17WB5|MURG_HELAH UDP-N-acetylglucosamine--N-acetylmuram 1.9e-24 90.9 0.1 3.4e-24 90.1 0.1 1.4 1 sp|C6BYG6|MURG_DESAD UDP-N-acetylglucosamine--N-acetylmuram 2.3e-24 90.7 0.5 5.7e-24 89.4 0.2 1.8 1 sp|Q6G2Q5|MURG_BARHE UDP-N-acetylglucosamine--N-acetylmuram 2.3e-24 90.7 0.2 5.6e-24 89.4 0.1 1.7 1 sp|A9IWA5|MURG_BART1 UDP-N-acetylglucosamine--N-acetylmuram 2.8e-24 90.4 0.0 5.7e-24 89.4 0.0 1.6 1 sp|Q8CUL4|MURG_OCEIH UDP-N-acetylglucosamine--N-acetylmuram 2.8e-24 90.4 0.0 5.6e-24 89.4 0.0 1.5 1 sp|A6LEU3|MURG_PARD8 UDP-N-acetylglucosamine--N-acetylmuram 3.1e-24 90.2 1.4 3.1e-24 90.2 1.0 1.7 1 sp|Q6AE64|MURG_LEIXX UDP-N-acetylglucosamine--N-acetylmuram 3.3e-24 90.2 0.2 6.9e-24 89.1 0.1 1.6 1 sp|A1K3U6|MURG_AZOSB UDP-N-acetylglucosamine--N-acetylmuram 3.9e-24 89.9 0.0 6.2e-24 89.3 0.0 1.3 1 sp|Q9PLG2|MURG_CHLMU UDP-N-acetylglucosamine--N-acetylmuram 4.1e-24 89.9 0.6 8.9e-24 88.8 0.4 1.6 1 sp|Q1GRX9|MURG_SPHAL UDP-N-acetylglucosamine--N-acetylmuram 4.2e-24 89.8 0.0 9.1e-24 88.7 0.0 1.6 1 sp|Q751Z4|ATG26_ASHGO Sterol 3-beta-glucosyltransferase OS=A 4.4e-24 89.8 0.1 1.3e-23 88.2 0.0 1.8 1 sp|A4VTK4|MURG_STRSY UDP-N-acetylglucosamine--N-acetylmuram 4.4e-24 89.8 0.1 1.3e-23 88.2 0.0 1.8 1 sp|A4VZT9|MURG_STRS2 UDP-N-acetylglucosamine--N-acetylmuram 4.6e-24 89.7 0.1 9.2e-24 88.7 0.0 1.5 1 sp|B3QWT7|MURG_CHLT3 UDP-N-acetylglucosamine--N-acetylmuram 4.6e-24 89.7 0.0 8e-24 88.9 0.0 1.4 1 sp|Q6AJ53|MURG_DESPS UDP-N-acetylglucosamine--N-acetylmuram 5e-24 89.6 0.6 9.4e-24 88.7 0.2 1.6 1 sp|B9K6P7|MURG_THENN UDP-N-acetylglucosamine--N-acetylmuram 5.9e-24 89.3 0.0 1.9e-23 87.7 0.0 1.9 1 sp|Q8K6R7|MURG_STRP3 UDP-N-acetylglucosamine--N-acetylmuram 6.9e-24 89.1 0.0 1.3e-23 88.3 0.0 1.5 1 sp|Q54IL5|UGT52_DICDI UDP-sugar-dependent glycosyltransferas 7.5e-24 89.0 0.6 1.9e-23 87.7 0.4 1.7 1 sp|B3DQN1|MURG_BIFLD UDP-N-acetylglucosamine--N-acetylmuram 7.5e-24 89.0 0.6 1.9e-23 87.7 0.4 1.7 1 sp|Q8CY50|MURG_BIFLO UDP-N-acetylglucosamine--N-acetylmuram 7.8e-24 89.0 0.0 1.8e-23 87.7 0.0 1.7 1 sp|Q6MIG1|MURG_BDEBA UDP-N-acetylglucosamine--N-acetylmuram 8.4e-24 88.9 0.6 1.5e-23 88.0 0.4 1.5 1 sp|Q7U3U6|MURG_SYNPX UDP-N-acetylglucosamine--N-acetylmuram 8.9e-24 88.8 0.6 2.2e-23 87.5 0.4 1.7 1 sp|B7GQ78|MURG_BIFLI UDP-N-acetylglucosamine--N-acetylmuram 9.3e-24 88.7 0.0 3.8e-23 86.7 0.0 2.1 1 sp|Q0UY53|ATG26_PHANO Sterol 3-beta-glucosyltransferase OS=P 1.2e-23 88.4 0.0 3.6e-23 86.8 0.0 1.8 1 sp|Q8DVE2|MURG_STRMU UDP-N-acetylglucosamine--N-acetylmuram 1.2e-23 88.4 2.0 1.3e-23 88.2 0.6 1.7 1 sp|Q6N411|MURG_RHOPA UDP-N-acetylglucosamine--N-acetylmuram 1.2e-23 88.3 0.0 3.2e-23 87.0 0.0 1.8 1 sp|Q6CUV2|ATG26_KLULA Sterol 3-beta-glucosyltransferase OS=K 1.3e-23 88.3 0.1 2e-23 87.6 0.1 1.3 1 sp|Q1MPB9|MURG_LAWIP UDP-N-acetylglucosamine--N-acetylmuram 1.3e-23 88.3 0.0 2e-22 84.4 0.0 2.2 1 sp|Q8R5N5|MURG_FUSNN UDP-N-acetylglucosamine--N-acetylmuram 1.4e-23 88.1 0.3 3.8e-23 86.7 0.1 1.8 1 sp|Q3ANV3|MURG_CHLCH UDP-N-acetylglucosamine--N-acetylmuram 1.4e-23 88.1 0.0 6.7e-23 85.9 0.0 2.1 1 sp|A8AW15|MURG_STRGC UDP-N-acetylglucosamine--N-acetylmuram 2.2e-23 87.5 1.7 5.9e-23 86.1 1.2 1.8 1 sp|B8DP79|MURG_DESVM UDP-N-acetylglucosamine--N-acetylmuram 2.4e-23 87.4 1.2 4.6e-23 86.5 0.8 1.5 1 sp|Q728U8|MURG_DESVH UDP-N-acetylglucosamine--N-acetylmuram 3e-23 87.1 0.0 5.9e-23 86.1 0.0 1.5 1 sp|Q8NJS1|ATG26_LEPMC Sterol 3-beta-glucosyltransferase OS=L 3.4e-23 86.9 0.0 6.2e-23 86.0 0.0 1.5 1 sp|Q5KK25|ATG26_CRYNE Sterol 3-beta-glucosyltransferase OS=C 3.5e-23 86.8 0.1 9.9e-23 85.4 0.0 1.8 1 sp|Q8YZI3|MURG_ANASP UDP-N-acetylglucosamine--N-acetylmuram 3.6e-23 86.8 0.0 1e-22 85.3 0.0 1.8 1 sp|B9DUV6|MURG_STRU0 UDP-N-acetylglucosamine--N-acetylmuram 3.8e-23 86.7 0.0 7.7e-23 85.7 0.0 1.6 1 sp|Q3M935|MURG_ANAVT UDP-N-acetylglucosamine--N-acetylmuram 3.8e-23 86.7 0.0 8.2e-23 85.7 0.0 1.6 1 sp|Q7VDZ2|MURG_PROMA UDP-N-acetylglucosamine--N-acetylmuram 3.9e-23 86.7 0.1 7.7e-23 85.7 0.1 1.5 1 sp|Q0I6M0|MURG_SYNS3 UDP-N-acetylglucosamine--N-acetylmuram 4.2e-23 86.6 0.1 9.6e-23 85.4 0.0 1.6 1 sp|B2J8J9|MURG_NOSP7 UDP-N-acetylglucosamine--N-acetylmuram 4.2e-23 86.6 0.3 4.2e-23 86.6 0.2 1.5 1 sp|A5GPC2|MURG_SYNPW UDP-N-acetylglucosamine--N-acetylmuram 4.5e-23 86.5 2.3 4.5e-23 86.5 1.6 1.8 1 sp|B4RFS0|MURG_PHEZH UDP-N-acetylglucosamine--N-acetylmuram 5.2e-23 86.3 1.4 1e-22 85.4 1.0 1.5 1 sp|A1VBE8|MURG_DESVV UDP-N-acetylglucosamine--N-acetylmuram 6.2e-23 86.1 0.0 1e-22 85.4 0.0 1.4 1 sp|B7IHN7|MURG_THEAB UDP-N-acetylglucosamine--N-acetylmuram 6.3e-23 86.0 0.0 1.3e-22 85.0 0.0 1.6 1 sp|Q7S1I0|ATG26_NEUCR Sterol 3-beta-glucosyltransferase OS=N 6.7e-23 85.9 0.4 1.2e-22 85.1 0.3 1.4 1 sp|Q3AVX2|MURG_SYNS9 UDP-N-acetylglucosamine--N-acetylmuram 7.2e-23 85.8 0.0 1.5e-22 84.8 0.0 1.6 1 sp|Q4WID6|ATG26_ASPFU Sterol 3-beta-glucosyltransferase OS=A 7.2e-23 85.8 0.0 1.5e-22 84.8 0.0 1.6 1 sp|A1CYS1|ATG26_NEOFI Sterol 3-beta-glucosyltransferase OS=N 7.8e-23 85.7 0.0 1.7e-22 84.6 0.0 1.6 1 sp|Q8DHY4|MURG_THEEB UDP-N-acetylglucosamine--N-acetylmuram 8.1e-23 85.7 0.4 2.4e-22 84.2 0.0 1.9 1 sp|Q11RH5|MURG_CYTH3 UDP-N-acetylglucosamine--N-acetylmuram 8.2e-23 85.6 0.1 1.6e-22 84.7 0.0 1.5 1 sp|A9BDG0|MURG_PROM4 UDP-N-acetylglucosamine--N-acetylmuram 9e-23 85.5 0.0 3.6e-22 83.6 0.0 2.0 1 sp|Q73L91|MURG_TREDE UDP-N-acetylglucosamine--N-acetylmuram 9.7e-23 85.4 0.8 9.7e-23 85.4 0.6 1.9 1 sp|C4XK69|MURG_DESMR UDP-N-acetylglucosamine--N-acetylmuram 1e-22 85.3 1.9 2.3e-22 84.2 1.3 1.6 1 sp|A1BAL5|MURG_PARDP UDP-N-acetylglucosamine--N-acetylmuram 1.2e-22 85.1 0.1 4.1e-22 83.4 0.0 1.9 1 sp|A3CLN6|MURG_STRSV UDP-N-acetylglucosamine--N-acetylmuram 1.2e-22 85.1 0.0 2.5e-22 84.1 0.0 1.6 1 sp|A4SV74|MURG_POLSQ UDP-N-acetylglucosamine--N-acetylmuram 1.4e-22 84.9 0.0 2.6e-22 84.0 0.0 1.4 1 sp|O67238|MURG_AQUAE UDP-N-acetylglucosamine--N-acetylmuram 1.6e-22 84.7 0.0 2.8e-22 83.9 0.0 1.4 1 sp|Q2U0C3|ATG26_ASPOR Sterol 3-beta-glucosyltransferase OS=A 1.6e-22 84.7 0.4 4.4e-22 83.3 0.3 1.8 1 sp|Q3STS8|MURG_NITWN UDP-N-acetylglucosamine--N-acetylmuram 1.6e-22 84.7 0.3 3.2e-22 83.7 0.2 1.5 1 sp|A1BJX8|MURG_CHLPD UDP-N-acetylglucosamine--N-acetylmuram 1.7e-22 84.6 0.0 3.6e-22 83.6 0.0 1.6 1 sp|A1AWE8|MURG_RUTMC UDP-N-acetylglucosamine--N-acetylmuram 1.7e-22 84.6 0.0 3.2e-22 83.7 0.0 1.5 1 sp|A1CFB3|ATG26_ASPCL Sterol 3-beta-glucosyltransferase OS=A 2.1e-22 84.4 2.1 5e-22 83.1 1.4 1.7 1 sp|B8IN64|MURG_METNO UDP-N-acetylglucosamine--N-acetylmuram 2.2e-22 84.3 0.8 5.1e-22 83.1 0.2 1.9 1 sp|Q6G124|MURG_BARQU UDP-N-acetylglucosamine--N-acetylmuram 2.2e-22 84.2 1.6 5e-22 83.1 1.1 1.6 1 sp|Q2W0H3|MURG_MAGSA UDP-N-acetylglucosamine--N-acetylmuram 2.8e-22 83.9 0.0 5.3e-22 83.0 0.0 1.5 1 sp|Q0CKU4|ATG26_ASPTN Sterol 3-beta-glucosyltransferase OS=A 2.8e-22 83.9 0.4 5.6e-22 82.9 0.2 1.6 1 sp|B1ZU31|MURG_OPITP UDP-N-acetylglucosamine--N-acetylmuram 2.9e-22 83.9 0.1 5.6e-22 82.9 0.0 1.5 1 sp|A6L071|MURG_BACV8 UDP-N-acetylglucosamine--N-acetylmuram 2.9e-22 83.9 0.3 6.6e-22 82.7 0.2 1.6 1 sp|Q1QNU3|MURG_NITHX UDP-N-acetylglucosamine--N-acetylmuram 3.8e-22 83.5 0.0 1e-21 82.1 0.0 1.7 1 sp|B2V7Y8|MURG_SULSY UDP-N-acetylglucosamine--N-acetylmuram 4.9e-22 83.1 0.2 1e-21 82.1 0.1 1.6 1 sp|Q3AGT7|MURG_SYNSC UDP-N-acetylglucosamine--N-acetylmuram 5.2e-22 83.0 0.0 1e-21 82.1 0.0 1.5 1 sp|Q5B4C9|ATG26_EMENI Sterol 3-beta-glucosyltransferase OS=E 7.1e-22 82.6 0.0 1.4e-21 81.7 0.0 1.5 1 sp|A5GW69|MURG_SYNR3 UDP-N-acetylglucosamine--N-acetylmuram 7.4e-22 82.6 0.8 7.4e-22 82.6 0.6 2.0 1 sp|A4YZK3|MURG_BRASO UDP-N-acetylglucosamine--N-acetylmuram 7.6e-22 82.5 1.9 7.6e-22 82.5 1.3 2.6 1 sp|Q2RVU4|MURG_RHORT UDP-N-acetylglucosamine--N-acetylmuram 7.8e-22 82.5 0.1 1.8e-21 81.3 0.1 1.6 1 sp|Q2JW21|MURG_SYNJA UDP-N-acetylglucosamine--N-acetylmuram 8e-22 82.4 0.8 8e-22 82.4 0.6 2.0 1 sp|A5EPK4|MURG_BRASB UDP-N-acetylglucosamine--N-acetylmuram 9.4e-22 82.2 0.0 1.8e-21 81.3 0.0 1.5 1 sp|A7KAN4|ATG26_PENCW Sterol 3-beta-glucosyltransferase OS=P 1.1e-21 82.0 0.2 2.7e-21 80.8 0.1 1.7 1 sp|Q2JJR4|MURG_SYNJB UDP-N-acetylglucosamine--N-acetylmuram 1.2e-21 81.9 0.0 2.2e-21 81.0 0.0 1.5 1 sp|A2QNQ5|ATG26_ASPNC Sterol 3-beta-glucosyltransferase OS=A 1.3e-21 81.8 2.4 2.6e-21 80.8 1.6 1.5 1 sp|Q0AMW7|MURG_MARMM UDP-N-acetylglucosamine--N-acetylmuram 1.5e-21 81.5 0.0 5.2e-21 79.8 0.0 1.8 1 sp|Q812Y1|MURG3_BACCR UDP-N-acetylglucosamine--N-acetylmuram 1.8e-21 81.3 2.2 4e-21 80.2 1.5 1.6 1 sp|B4SH49|MURG_PELPB UDP-N-acetylglucosamine--N-acetylmuram 2e-21 81.2 1.0 4.3e-21 80.1 0.4 1.8 1 sp|B4S6Q9|MURG_PROA2 UDP-N-acetylglucosamine--N-acetylmuram 2.5e-21 80.8 0.0 4.4e-21 80.0 0.0 1.4 1 sp|A8G2K3|MURG_PROM2 UDP-N-acetylglucosamine--N-acetylmuram 2.7e-21 80.8 0.3 5.9e-21 79.6 0.2 1.6 1 sp|Q89FU7|MURG_BRAJA UDP-N-acetylglucosamine--N-acetylmuram 3.5e-21 80.4 0.0 8.3e-21 79.2 0.0 1.6 1 sp|A0RHC3|MURG1_BACAH UDP-N-acetylglucosamine--N-acetylmuram 3.7e-21 80.3 0.0 8.3e-21 79.2 0.0 1.6 1 sp|Q6MBS7|MURG_PARUW UDP-N-acetylglucosamine--N-acetylmuram 3.9e-21 80.2 0.7 9.7e-21 78.9 0.5 1.7 1 sp|Q0BXU2|MURG_HYPNA UDP-N-acetylglucosamine--N-acetylmuram 4.2e-21 80.1 0.5 7.5e-21 79.3 0.3 1.4 1 sp|Q8KGD4|MURG_CHLTE UDP-N-acetylglucosamine--N-acetylmuram 4.2e-21 80.1 0.2 7.7e-21 79.3 0.1 1.5 1 sp|B3QLW4|MURG_CHLP8 UDP-N-acetylglucosamine--N-acetylmuram 5.4e-21 79.8 0.2 1.1e-20 78.7 0.1 1.5 1 sp|A6T2F8|MURG_JANMA UDP-N-acetylglucosamine--N-acetylmuram 7.8e-21 79.2 0.0 1.4e-20 78.5 0.0 1.4 1 sp|A5CEL6|MURG_ORITB UDP-N-acetylglucosamine--N-acetylmuram 7.9e-21 79.2 0.0 1.2e-20 78.6 0.0 1.3 1 sp|Q8D2Z6|MURG_WIGBR UDP-N-acetylglucosamine--N-acetylmuram 9.1e-21 79.0 1.4 2.4e-20 77.7 1.0 1.8 1 sp|B0UFC7|MURG_METS4 UDP-N-acetylglucosamine--N-acetylmuram 1.2e-20 78.6 0.7 2.2e-20 77.8 0.5 1.5 1 sp|Q163J0|MURG_ROSDO UDP-N-acetylglucosamine--N-acetylmuram 1.2e-20 78.6 0.2 3.9e-20 77.0 0.1 1.9 1 sp|A4G8T8|MURG_HERAR UDP-N-acetylglucosamine--N-acetylmuram 1.3e-20 78.6 1.6 2.5e-20 77.6 1.1 1.5 1 sp|Q28NN5|MURG_JANSC UDP-N-acetylglucosamine--N-acetylmuram 1.3e-20 78.6 0.0 2.4e-20 77.6 0.0 1.5 1 sp|Q31CY4|MURG_PROM9 UDP-N-acetylglucosamine--N-acetylmuram 1.3e-20 78.5 2.0 3.2e-20 77.3 1.4 1.7 1 sp|B1ZGP4|MURG_METPB UDP-N-acetylglucosamine--N-acetylmuram 1.5e-20 78.3 0.8 1.5e-20 78.3 0.6 1.8 1 sp|Q5LU63|MURG_SILPO UDP-N-acetylglucosamine--N-acetylmuram 1.6e-20 78.3 0.0 2.7e-20 77.5 0.0 1.4 1 sp|B3CRE9|MURG_ORITI UDP-N-acetylglucosamine--N-acetylmuram 1.8e-20 78.1 2.2 2.4e-20 77.7 0.6 1.9 1 sp|Q1GIV1|MURG_SILST UDP-N-acetylglucosamine--N-acetylmuram 2.1e-20 77.8 0.5 5.1e-20 76.6 0.3 1.7 1 sp|Q1GZ01|MURG_METFK UDP-N-acetylglucosamine--N-acetylmuram 2.3e-20 77.7 0.1 7.8e-20 76.0 0.0 1.9 1 sp|B3ET95|MURG_AMOA5 UDP-N-acetylglucosamine--N-acetylmuram 2.4e-20 77.7 0.2 1.2e-19 75.4 0.0 2.0 1 sp|Q8A258|MURG_BACTN UDP-N-acetylglucosamine--N-acetylmuram 2.6e-20 77.5 0.5 5.5e-20 76.5 0.3 1.6 1 sp|Q211T8|MURG_RHOPB UDP-N-acetylglucosamine--N-acetylmuram 2.9e-20 77.4 1.3 5.5e-20 76.5 0.5 1.8 1 sp|Q2IYK8|MURG_RHOP2 UDP-N-acetylglucosamine--N-acetylmuram 3.9e-20 77.0 4.1 4.1e-20 76.9 0.9 2.2 1 sp|B1LXZ4|MURG_METRJ UDP-N-acetylglucosamine--N-acetylmuram 4.4e-20 76.8 0.0 7.8e-20 76.0 0.0 1.4 1 sp|A2BNZ2|MURG_PROMS UDP-N-acetylglucosamine--N-acetylmuram 5.1e-20 76.6 0.0 9.9e-20 75.7 0.0 1.5 1 sp|C0R2W7|MURG_WOLWR UDP-N-acetylglucosamine--N-acetylmuram 5.1e-20 76.6 0.0 9.9e-20 75.7 0.0 1.5 1 sp|Q73I55|MURG_WOLPM UDP-N-acetylglucosamine--N-acetylmuram 5.9e-20 76.4 1.8 1.4e-19 75.2 1.3 1.7 1 sp|A9VWV3|MURG_METEP UDP-N-acetylglucosamine--N-acetylmuram 6.1e-20 76.3 1.8 1.4e-19 75.2 1.3 1.7 1 sp|B7KSC1|MURG_METC4 UDP-N-acetylglucosamine--N-acetylmuram 6.5e-20 76.3 0.0 9.5e-20 75.7 0.0 1.3 1 sp|A2C027|MURG_PROM1 UDP-N-acetylglucosamine--N-acetylmuram 6.7e-20 76.2 2.3 3.6e-19 73.9 0.7 2.4 1 sp|A3PHS8|MURG_RHOS1 UDP-N-acetylglucosamine--N-acetylmuram 7.9e-20 76.0 1.3 2.8e-19 74.2 1.2 1.7 1 sp|A4SH02|MURG_PROVI UDP-N-acetylglucosamine--N-acetylmuram 7.9e-20 76.0 2.2 3.6e-19 73.9 0.7 2.3 1 sp|Q3J4M2|MURG_RHOS4 UDP-N-acetylglucosamine--N-acetylmuram 9.5e-20 75.7 0.0 1.7e-19 74.9 0.0 1.4 1 sp|Q7V388|MURG_PROMP UDP-N-acetylglucosamine--N-acetylmuram 9.9e-20 75.7 0.0 1.7e-19 74.9 0.0 1.4 1 sp|A3PAR5|MURG_PROM0 UDP-N-acetylglucosamine--N-acetylmuram 1e-19 75.6 0.8 1e-19 75.6 0.6 1.9 1 sp|Q07PT3|MURG_RHOP5 UDP-N-acetylglucosamine--N-acetylmuram 1.1e-19 75.5 0.8 3e-19 74.1 0.6 1.8 1 sp|Q133X1|MURG_RHOPS UDP-N-acetylglucosamine--N-acetylmuram 1.2e-19 75.4 0.1 2.5e-19 74.4 0.1 1.6 1 sp|Q5LIJ7|MURG_BACFN UDP-N-acetylglucosamine--N-acetylmuram 1.2e-19 75.4 0.1 2.5e-19 74.4 0.1 1.6 1 sp|Q64ZM1|MURG_BACFR UDP-N-acetylglucosamine--N-acetylmuram 1.3e-19 75.3 0.0 2.5e-19 74.4 0.0 1.5 1 sp|A6LLF1|MURG_THEM4 UDP-N-acetylglucosamine--N-acetylmuram 1.6e-19 75.0 0.0 2.4e-19 74.4 0.0 1.3 1 sp|Q46HH6|MURG_PROMT UDP-N-acetylglucosamine--N-acetylmuram 2.4e-19 74.4 2.8 7.8e-19 72.8 1.1 2.2 1 sp|A4WQD5|MURG_RHOS5 UDP-N-acetylglucosamine--N-acetylmuram 3.2e-19 74.0 0.0 6e-19 73.1 0.0 1.5 1 sp|A2BUH4|MURG_PROM5 UDP-N-acetylglucosamine--N-acetylmuram 6.6e-19 73.0 0.0 1.5e-18 71.8 0.0 1.6 1 sp|Q5GS79|MURG_WOLTR UDP-N-acetylglucosamine--N-acetylmuram 1e-18 72.4 0.2 2.5e-18 71.1 0.1 1.6 1 sp|Q7NPZ9|MURG_CHRVO UDP-N-acetylglucosamine--N-acetylmuram 1.2e-18 72.2 3.1 2.1e-17 68.1 0.0 2.8 2 sp|Q1AVX3|MURG_RUBXD UDP-N-acetylglucosamine--N-acetylmuram 1.3e-18 72.1 0.1 2.4e-18 71.2 0.1 1.4 1 sp|Q7MBC4|MURG_GLOVI UDP-N-acetylglucosamine--N-acetylmuram 1.6e-18 71.8 0.0 2.8e-18 70.9 0.0 1.4 1 sp|Q7U322|MURG_HELHP UDP-N-acetylglucosamine--N-acetylmuram 2e-18 71.4 0.6 2e-18 71.4 0.5 1.5 1 sp|Q3B129|MURG_PELLD UDP-N-acetylglucosamine--N-acetylmuram 4.3e-18 70.4 0.1 6.9e-17 66.5 0.0 2.1 1 sp|Q30PK0|MURG_SULDN UDP-N-acetylglucosamine--N-acetylmuram 7.3e-18 69.6 0.3 1.4e-17 68.7 0.2 1.5 1 sp|A2SCY5|MURG_METPP UDP-N-acetylglucosamine--N-acetylmuram 1.2e-17 68.9 0.0 3e-16 64.4 0.0 2.1 2 sp|A0RP87|MURG_CAMFF UDP-N-acetylglucosamine--N-acetylmuram 1.6e-17 68.5 0.0 6.2e-17 66.6 0.0 2.0 1 sp|B3CM87|MURG_WOLPP UDP-N-acetylglucosamine--N-acetylmuram 3.5e-17 67.4 3.3 8.1e-17 66.2 2.3 1.7 1 sp|A5FUL0|MURG_ACICJ UDP-N-acetylglucosamine--N-acetylmuram 5.3e-17 66.8 0.0 1.1e-16 65.8 0.0 1.5 1 sp|Q7MAD4|MURG_WOLSU UDP-N-acetylglucosamine--N-acetylmuram 8.9e-17 66.1 0.0 2.8e-16 64.5 0.0 1.8 1 sp|B2KE54|MURG_ELUMP UDP-N-acetylglucosamine--N-acetylmuram 1.2e-16 65.6 0.4 2.2e-16 64.8 0.3 1.5 1 sp|B3EIK8|MURG_CHLL2 UDP-N-acetylglucosamine--N-acetylmuram 1.4e-16 65.4 3.3 1.4e-16 65.4 2.3 2.7 1 sp|A5UZT7|MURG_ROSS1 UDP-N-acetylglucosamine--N-acetylmuram 3.1e-16 64.4 0.8 7.2e-16 63.1 0.5 1.7 1 sp|Q5FUJ5|MURG_GLUOX UDP-N-acetylglucosamine--N-acetylmuram 6.5e-16 63.3 0.1 4.4e-15 60.6 0.0 2.2 1 sp|A6Q722|MURG_SULNB UDP-N-acetylglucosamine--N-acetylmuram 1.6e-15 62.0 0.0 3.1e-15 61.1 0.0 1.5 1 sp|B8E325|MURG_DICTD UDP-N-acetylglucosamine--N-acetylmuram 2.2e-15 61.6 0.0 5.6e-15 60.3 0.0 1.7 1 sp|A6Q579|MURG_NITSB UDP-N-acetylglucosamine--N-acetylmuram 3.4e-15 61.0 0.8 1.1e-14 59.3 0.5 1.9 1 sp|Q0BV25|MURG_GRABC UDP-N-acetylglucosamine--N-acetylmuram 4e-15 60.8 0.0 1.3e-14 59.0 0.0 1.9 1 sp|Q5PB22|MURG_ANAMM UDP-N-acetylglucosamine--N-acetylmuram 4.1e-15 60.7 0.0 1.9e-14 58.5 0.0 1.9 1 sp|A7I265|MURG_CAMHC UDP-N-acetylglucosamine--N-acetylmuram 6.3e-15 60.1 1.1 6.3e-15 60.1 0.8 2.2 1 sp|A9FI55|MURG_SORC5 UDP-N-acetylglucosamine--N-acetylmuram 8.2e-15 59.7 0.0 1.7e-14 58.7 0.0 1.6 1 sp|B5YEL3|MURG_DICT6 UDP-N-acetylglucosamine--N-acetylmuram 1.2e-13 56.0 0.0 2.1e-13 55.1 0.0 1.5 1 sp|A8FM88|MURG_CAMJ8 UDP-N-acetylglucosamine--N-acetylmuram 1.5e-13 55.6 0.0 2.8e-13 54.8 0.0 1.5 1 sp|Q5HU62|MURG_CAMJR UDP-N-acetylglucosamine--N-acetylmuram 1.5e-13 55.6 0.0 2.8e-13 54.8 0.0 1.5 1 sp|A1W027|MURG_CAMJJ UDP-N-acetylglucosamine--N-acetylmuram 1.5e-13 55.6 0.0 2.8e-13 54.8 0.0 1.5 1 sp|Q9PNQ2|MURG_CAMJE UDP-N-acetylglucosamine--N-acetylmuram 3.5e-13 54.5 0.0 6.4e-13 53.6 0.0 1.5 1 sp|A7H2Z9|MURG_CAMJD UDP-N-acetylglucosamine--N-acetylmuram 7.2e-13 53.4 0.0 1.8e-12 52.2 0.0 1.7 1 sp|A8F4X1|MURG_THELT UDP-N-acetylglucosamine--N-acetylmuram 1.8e-10 45.7 0.3 3.9e-09 41.3 0.2 2.3 1 sp|Q72R84|MURG_LEPIC UDP-N-acetylglucosamine--N-acetylmuram 1.8e-10 45.7 0.3 3.9e-09 41.3 0.2 2.3 1 sp|Q8F4J1|MURG_LEPIN UDP-N-acetylglucosamine--N-acetylmuram 4.2e-09 41.3 0.0 7.1e-09 40.5 0.0 1.4 1 sp|Q4FPK5|MURG_PELUB UDP-N-acetylglucosamine--N-acetylmuram 7.7e-09 40.4 0.3 1.5e-07 36.2 0.2 2.3 1 sp|Q04V94|MURG_LEPBJ UDP-N-acetylglucosamine--N-acetylmuram 7.7e-09 40.4 0.3 1.5e-07 36.2 0.2 2.3 1 sp|Q04Y82|MURG_LEPBL UDP-N-acetylglucosamine--N-acetylmuram 3.4e-07 35.1 0.0 9.9e-07 33.5 0.0 1.8 1 sp|Q8TTI1|Y452_METAC Uncharacterized glycosyltransferase MA 2.3e-06 32.4 0.0 3.1e-05 28.7 0.0 2.5 1 sp|Q8TTI0|Y453_METAC Uncharacterized glycosyltransferase MA 2.4e-06 32.3 0.0 1.2e-05 30.0 0.0 2.1 1 sp|Q8PWF3|Y1636_METMA Uncharacterized glycosyltransferase MM 7.8e-06 30.6 0.0 2.7e-05 28.9 0.0 2.0 1 sp|O34539|YJIC_BACSU Uncharacterized UDP-glucosyltransferas 2e-05 29.3 0.7 6.6e-05 27.6 0.1 2.2 1 sp|Q53685|OLED_STRAT Oleandomycin glycosyltransferase OS=St 2e-05 29.3 0.0 4.5e-05 28.2 0.0 1.6 1 sp|Q8PZB2|Y582_METMA Uncharacterized glycosyltransferase MM 7.8e-05 27.4 0.1 0.00022 25.9 0.1 1.7 1 sp|P21686|CRTX_PANAN Zeaxanthin glucosyltransferase OS=Pant 0.00056 24.6 0.0 0.0013 23.5 0.0 1.6 1 sp|Q54387|MGT_STRLI Macrolide glycosyltransferase OS=Strep 0.00067 24.4 0.3 0.0017 23.1 0.2 1.6 1 sp|Q01330|CRTX_ESCVU Zeaxanthin glucosyltransferase OS=Esch ------ inclusion threshold ------ 0.012 20.4 0.0 0.36 15.5 0.0 2.4 2 sp|O31853|YOJK_BACSU Uncharacterized UDP-glucosyltransferas 0.013 20.2 0.0 0.049 18.4 0.0 1.9 1 sp|B1YIY4|MTNA_EXIS2 Methylthioribose-1-phosphate isomerase 0.016 19.9 0.0 0.039 18.6 0.0 1.7 1 sp|Q0WW21|UGAGT_ARATH Anthocyanin 5-O-glucosyltransferase OS 0.021 19.6 0.4 0.064 18.0 0.0 2.0 1 sp|Q9Z565|ILVC1_STRCO Ketol-acid reductoisomerase 1 OS=Strep 0.022 19.5 0.0 0.051 18.3 0.0 1.7 1 sp|O05496|YDHE_BACSU Uncharacterized UDP-glucosyltransferas 0.022 19.4 0.3 0.064 18.0 0.0 1.9 1 sp|Q9FBT8|ILVC2_STRCO Ketol-acid reductoisomerase 2 OS=Strep 0.023 19.4 0.4 0.044 18.5 0.1 1.7 1 sp|Q9SBL1|HMNGT_SORBI Cyanohydrin beta-glucosyltransferase O 0.067 17.9 0.2 0.19 16.4 0.1 1.9 1 sp|B1I2P1|MTNA_DESAP Methylthioribose-1-phosphate isomerase 0.08 17.6 0.0 8.6 11.1 0.0 3.1 2 sp|A8AZU1|MUTL_STRGC DNA mismatch repair protein mutL OS=St 0.085 17.6 0.0 0.19 16.4 0.0 1.6 1 sp|Q01198|LIGD_PSEPA C alpha-dehydrogenase OS=Pseudomonas p 0.087 17.5 0.1 1.2 13.8 0.0 2.2 1 sp|Q83RR8|NPD_SHIFL NAD-dependent deacetylase OS=Shigella 0.089 17.5 0.0 0.24 16.1 0.0 1.7 1 sp|C5D7U5|MTNA_GEOSW Methylthioribose-1-phosphate isomerase 0.11 17.2 0.0 9.4 10.9 0.0 3.1 2 sp|A3CR14|MUTL_STRSV DNA mismatch repair protein mutL OS=St 0.12 17.1 0.0 0.37 15.5 0.0 1.8 1 sp|Q88M09|MTNA_PSEPK Methylthioribose-1-phosphate isomerase 0.13 17.0 0.0 0.45 15.2 0.0 1.9 1 sp|Q5L1E6|MTNA_GEOKA Methylthioribose-1-phosphate isomerase 0.14 16.9 0.1 1.9 13.2 0.0 2.2 1 sp|Q8X8E0|NPD_ECO57 NAD-dependent deacetylase OS=Escherich 0.14 16.9 0.1 1.8 13.3 0.0 2.2 1 sp|P75960|NPD_ECOLI NAD-dependent deacetylase OS=Escherich 0.14 16.9 0.8 0.21 16.3 0.5 1.5 1 sp|Q5V467|MAMA1_HALMA Methylaspartate mutase S chain 1 OS=Ha 0.14 16.9 0.0 0.65 14.7 0.0 2.1 1 sp|C0MAS4|MUTL_STRE4 DNA mismatch repair protein mutL OS=St 0.14 16.8 0.1 1.4 13.6 0.0 2.1 1 sp|P0A2F2|NPD_SALTY NAD-dependent deacetylase OS=Salmonell 0.14 16.8 0.1 1.4 13.6 0.0 2.1 1 sp|P0A2F3|NPD_SALTI NAD-dependent deacetylase OS=Salmonell 0.15 16.8 0.0 0.77 14.5 0.0 2.1 1 sp|C0MGC4|MUTL_STRS7 DNA mismatch repair protein mutL OS=St 0.15 16.8 0.0 0.48 15.1 0.0 1.8 1 sp|Q65KK2|MTNA_BACLD Methylthioribose-1-phosphate isomerase 0.15 16.7 0.0 0.5 15.1 0.0 1.9 1 sp|B0KTX5|MTNA_PSEPG Methylthioribose-1-phosphate isomerase 0.16 16.7 0.0 0.41 15.4 0.0 1.7 1 sp|B1J5G5|MTNA_PSEPW Methylthioribose-1-phosphate isomerase 0.16 16.7 0.0 0.51 15.1 0.0 1.9 1 sp|A5W7G2|MTNA_PSEP1 Methylthioribose-1-phosphate isomerase 0.17 16.6 0.1 0.86 14.3 0.0 2.1 1 sp|A4ILL1|MTNA_GEOTN Methylthioribose-1-phosphate isomerase 0.18 16.5 0.0 0.77 14.5 0.0 2.0 1 sp|B4U0J7|MUTL_STREM DNA mismatch repair protein mutL OS=St 0.2 16.4 0.1 1.9 13.2 0.0 2.2 1 sp|Q8FIM4|NPD_ECOL6 NAD-dependent deacetylase OS=Escherich 0.21 16.3 0.2 0.72 14.6 0.0 2.0 1 sp|B2GFJ7|ILVC_KOCRD Ketol-acid reductoisomerase OS=Kocuria 0.21 16.3 0.3 0.67 14.7 0.0 2.0 1 sp|B1VZ72|ILVC_STRGG Ketol-acid reductoisomerase OS=Strepto 0.22 16.2 0.2 0.73 14.5 0.0 2.0 1 sp|Q59818|ILVC_STRAW Ketol-acid reductoisomerase OS=Strepto 0.26 16.0 0.0 2.9 12.6 0.0 2.4 1 sp|Q731R7|MTNA_BACC1 Methylthioribose-1-phosphate isomerase 0.29 15.8 0.0 0.6 14.8 0.0 1.5 1 sp|B1GZW3|TPIS_UNCTG Triosephosphate isomerase OS=Unculture 0.33 15.7 0.1 6.3 11.5 0.0 2.4 1 sp|Q2IWS4|GLYA_RHOP2 Serine hydroxymethyltransferase OS=Rho 0.36 15.5 0.0 1.4 13.6 0.0 2.0 1 sp|A7GS56|MTNA_BACCN Methylthioribose-1-phosphate isomerase 0.37 15.5 0.0 0.85 14.3 0.0 1.6 1 sp|B7KF23|ILVC_CYAP7 Ketol-acid reductoisomerase OS=Cyanoth 0.39 15.4 0.0 1 14.1 0.0 1.6 1 sp|A5W1E8|RNZ_PSEP1 Ribonuclease Z OS=Pseudomonas putida ( 0.45 15.2 0.0 1.6 13.5 0.0 1.9 1 sp|B3QSP0|ILVC_CHLT3 Ketol-acid reductoisomerase OS=Chloroh 0.46 15.2 0.0 4.5 12.0 0.0 2.3 1 sp|O31662|MTNA_BACSU Methylthioribose-1-phosphate isomerase 0.51 15.0 0.2 2.2 13.0 0.1 2.1 1 sp|C1F6Z5|ILVC_ACIC5 Ketol-acid reductoisomerase OS=Acidoba 0.55 14.9 0.1 50 8.6 0.0 2.3 2 sp|Q2G3S7|PYRB_NOVAD Aspartate carbamoyltransferase OS=Novo 0.57 14.9 1.6 25 9.6 0.0 3.0 2 sp|Q96LB3|IFT74_HUMAN Intraflagellar transport protein 74 ho 0.58 14.9 0.2 1.6 13.5 0.1 1.8 1 sp|A9AZM5|ILVC_HERA2 Ketol-acid reductoisomerase OS=Herpeto 0.64 14.7 0.0 3.9 12.2 0.0 2.0 1 sp|B8HSQ9|SURE_CYAP4 5'-nucleotidase surE OS=Cyanothece sp. 0.68 14.6 0.0 2.4 12.9 0.0 1.9 1 sp|Q3SPL2|UVRC_NITWN UvrABC system protein C OS=Nitrobacter 0.68 14.6 0.0 2.8 12.6 0.0 1.8 1 sp|A7Z3X0|MTNA_BACA2 Methylthioribose-1-phosphate isomerase 0.69 14.6 0.4 44 8.8 0.1 2.2 2 sp|Q38W65|EFTS_LACSS Elongation factor Ts OS=Lactobacillus 0.69 14.6 0.0 1.9 13.2 0.0 1.7 1 sp|C3JYK1|TIG_PSEFS Trigger factor OS=Pseudomonas fluoresc 0.71 14.6 0.0 1.7 13.4 0.0 1.7 1 sp|Q1GZA6|BIOB_METFK Biotin synthase OS=Methylobacillus fla 0.71 14.6 0.0 2.5 12.8 0.0 2.0 1 sp|Q635P7|MTNA2_BACCZ Methylthioribose-1-phosphate isomerase 0.71 14.6 0.0 1.8 13.3 0.0 1.7 1 sp|O48676|HTGT_ARATH N-hydroxythioamide S-beta-glucosyltran 0.72 14.6 0.1 1.4e+02 7.1 0.0 2.9 2 sp|Q8YRC9|THIOG_ANASP Bifunctional protein thiO/thiG OS=Anab 0.73 14.5 0.0 11 10.8 0.0 2.4 1 sp|Q8DW43|ILVC_STRMU Ketol-acid reductoisomerase OS=Strepto 0.73 14.5 0.0 2.3 12.9 0.0 1.9 1 sp|Q81MJ6|MTNA2_BACAN Methylthioribose-1-phosphate isomerase 0.74 14.5 0.0 7.7 11.2 0.0 2.4 1 sp|Q6N693|GLYA1_RHOPA Serine hydroxymethyltransferase 1 OS=R 0.75 14.5 0.0 2 13.1 0.0 1.7 1 sp|B0C915|MURD_ACAM1 UDP-N-acetylmuramoylalanine--D-glutama 0.76 14.5 0.0 3.5 12.4 0.0 2.0 1 sp|Q2KA25|GLYA_RHIEC Serine hydroxymethyltransferase OS=Rhi 0.77 14.5 0.0 6.5 11.5 0.0 2.3 1 sp|Q214H7|GLYA_RHOPB Serine hydroxymethyltransferase OS=Rho 0.79 14.4 0.0 3.8 12.2 0.0 2.2 1 sp|B9DW70|MUTL_STRU0 DNA mismatch repair protein mutL OS=St 0.8 14.4 0.0 2.6 12.8 0.0 1.9 1 sp|A0RI38|MTNA2_BACAH Methylthioribose-1-phosphate isomerase 0.81 14.4 0.0 2.6 12.8 0.0 1.9 1 sp|Q6HED3|MTNA2_BACHK Methylthioribose-1-phosphate isomerase 0.83 14.4 0.0 2.4 12.9 0.0 1.8 1 sp|Q1QIR5|UVRC_NITHX UvrABC system protein C OS=Nitrobacter 0.84 14.3 0.0 4.8 11.9 0.0 2.3 1 sp|A8AVN4|ILVC_STRGC Ketol-acid reductoisomerase OS=Strepto 0.86 14.3 0.3 13 10.4 0.0 2.8 1 sp|Q7V5V5|MURD_PROMM UDP-N-acetylmuramoylalanine--D-glutama 0.9 14.2 0.1 2.4 12.9 0.1 1.8 1 sp|Q47SB6|ILVC_THEFY Ketol-acid reductoisomerase OS=Thermob 0.9 14.2 0.1 1.8 13.3 0.0 1.5 1 sp|A4FMQ5|ILVC_SACEN Ketol-acid reductoisomerase OS=Sacchar 0.91 14.2 0.1 1.3 13.8 0.0 1.3 1 sp|Q5V3R4|TRM56_HALMA tRNA ribose 2'-O-methyltransferase aTr 0.91 14.2 0.0 37 9.0 0.0 2.3 2 sp|B8GW68|ENO_CAUCN Enolase OS=Caulobacter crescentus (str 0.91 14.2 0.0 37 9.0 0.0 2.3 2 sp|Q9A7J9|ENO_CAUCR Enolase OS=Caulobacter crescentus GN=e 0.92 14.2 0.2 2.8 12.7 0.1 1.8 1 sp|Q5V3F0|MAMA2_HALMA Methylaspartate mutase S chain 2 OS=Ha 0.96 14.2 0.0 4.9 11.9 0.0 2.2 1 sp|B1LZ88|GLYA_METRJ Serine hydroxymethyltransferase OS=Met 0.98 14.1 0.0 2.1 13.0 0.0 1.5 1 sp|P94966|BIOB_METSK Biotin synthase OS=Methylobacillus sp. 1 14.1 0.1 2.4 12.9 0.1 1.7 1 sp|Q3SHE4|ILVC_THIDA Ketol-acid reductoisomerase OS=Thiobac 1.1 14.0 0.0 8.5 11.1 0.0 2.3 1 sp|Q07MT9|GLYA_RHOP5 Serine hydroxymethyltransferase OS=Rho 1.1 14.0 0.0 2.6 12.7 0.0 1.8 1 sp|A9VRK3|MTNA1_BACWK Methylthioribose-1-phosphate isomerase 1.1 13.9 0.3 5.6 11.7 0.1 2.2 1 sp|A9GW78|ILVC_SORC5 Ketol-acid reductoisomerase OS=Sorangi 1.1 13.9 0.0 4.5 12.0 0.0 2.0 1 sp|Q5YRW2|ILVC_NOCFA Ketol-acid reductoisomerase OS=Nocardi 1.2 13.9 0.0 5.6 11.7 0.0 2.2 1 sp|A3CQ86|ILVC_STRSV Ketol-acid reductoisomerase OS=Strepto 1.2 13.8 0.0 7.6 11.2 0.0 2.2 1 sp|Q21AW5|UVRC_RHOPB UvrABC system protein C OS=Rhodopseudo 1.3 13.7 0.0 3.5 12.4 0.0 1.8 1 sp|Q81IK7|MTNA1_BACCR Methylthioribose-1-phosphate isomerase 1.3 13.7 0.1 1.9e+02 6.7 0.0 3.2 2 sp|Q5FNN2|PYRG_GLUOX CTP synthase OS=Gluconobacter oxydans 1.3 13.7 0.1 4.3 12.0 0.1 2.0 1 sp|Q2S9V9|ILVC_HAHCH Ketol-acid reductoisomerase OS=Hahella 1.4 13.6 0.0 2.4 12.9 0.0 1.5 1 sp|Q17QH8|D39U1_BOVIN Epimerase family protein SDR39U1 OS=Bo 1.4 13.6 0.1 3.2 12.5 0.1 1.7 1 sp|Q2J6V2|ILVC_FRASC Ketol-acid reductoisomerase OS=Frankia 1.4 13.6 0.2 22 9.8 0.0 2.4 1 sp|A1WUW3|ILVC_HALHL Ketol-acid reductoisomerase OS=Halorho 1.4 13.6 0.1 5.3 11.8 0.1 2.0 1 sp|A8LMD0|PUR9_DINSH Bifunctional purine biosynthesis prote 1.4 13.6 0.2 5.1 11.8 0.1 2.0 1 sp|C5BAT0|GCSP_EDWI9 Glycine dehydrogenase [decarboxylating 1.4 13.6 0.0 6.3 11.5 0.0 2.0 1 sp|C1B2M1|ILVC_RHOOB Ketol-acid reductoisomerase OS=Rhodoco 1.4 13.6 0.0 6.3 11.5 0.0 2.0 1 sp|Q0S2H3|ILVC_RHOSR Ketol-acid reductoisomerase OS=Rhodoco 1.4 13.6 0.0 3.5 12.3 0.0 1.7 1 sp|A0R946|MTNA1_BACAH Methylthioribose-1-phosphate isomerase 1.4 13.6 0.0 3.5 12.3 0.0 1.7 1 sp|Q81ZC2|MTNA1_BACAN Methylthioribose-1-phosphate isomerase 1.5 13.6 0.0 3.5 12.3 0.0 1.7 1 sp|Q6HP54|MTNA1_BACHK Methylthioribose-1-phosphate isomerase 1.5 13.5 0.0 6 11.6 0.0 1.9 1 sp|Q1MIU5|GLYA_RHIL3 Serine hydroxymethyltransferase OS=Rhi 1.5 13.5 0.0 4.4 12.0 0.0 1.8 1 sp|A8FCG5|MTNA_BACP2 Methylthioribose-1-phosphate isomerase 1.6 13.5 0.7 7.3 11.3 0.1 2.2 1 sp|Q63CV4|ILVC2_BACCZ Ketol-acid reductoisomerase 2 OS=Bacil 1.6 13.4 0.0 4.7 11.9 0.0 1.8 1 sp|A4J179|ILVC_DESRM Ketol-acid reductoisomerase OS=Desulfo 1.6 13.4 0.0 2.2 13.0 0.0 1.3 1 sp|Q9V030|PAAD_PYRAB Probable aromatic acid decarboxylase O 1.7 13.4 0.7 7.7 11.2 0.1 2.2 1 sp|Q81F27|ILVC2_BACCR Ketol-acid reductoisomerase 2 OS=Bacil 1.7 13.4 0.0 28 9.4 0.0 2.6 1 sp|Q03IJ9|ILVC_STRTD Ketol-acid reductoisomerase OS=Strepto 1.7 13.4 0.0 28 9.4 0.0 2.6 1 sp|Q9F0I7|ILVC_STRTR Ketol-acid reductoisomerase OS=Strepto 1.7 13.4 0.1 4.6 11.9 0.0 1.7 1 sp|P26166|YBCC_RHOCA Uncharacterized 20.5 kDa protein in bc 1.7 13.4 0.2 3.8 12.2 0.1 2.1 1 sp|B8I1T8|ILVC_CLOCE Ketol-acid reductoisomerase OS=Clostri 1.7 13.3 0.1 37 9.0 0.0 2.7 1 sp|A4VXL3|ILVC_STRSY Ketol-acid reductoisomerase OS=Strepto 1.7 13.3 0.1 37 9.0 0.0 2.7 1 sp|A4W3V8|ILVC_STRS2 Ketol-acid reductoisomerase OS=Strepto 1.8 13.3 0.0 4.4 12.0 0.0 1.7 1 sp|Q3B594|ILVC_PELLD Ketol-acid reductoisomerase OS=Pelodic 1.8 13.3 0.0 15 10.3 0.0 2.5 1 sp|B1I8F2|MUTL_STRPI DNA mismatch repair protein mutL OS=St 1.8 13.3 0.0 15 10.3 0.0 2.5 1 sp|B2IS10|MUTL_STRPS DNA mismatch repair protein mutL OS=St 1.8 13.3 0.0 15 10.3 0.0 2.5 1 sp|B8ZKC9|MUTL_STRPJ DNA mismatch repair protein mutL OS=St 1.8 13.3 0.0 15 10.3 0.0 2.5 1 sp|P0A3R1|HEXB_STRPN DNA mismatch repair protein hexB OS=St 1.8 13.3 0.0 15 10.3 0.0 2.5 1 sp|P0A3R2|HEXB_STRR6 DNA mismatch repair protein hexB OS=St 1.8 13.3 0.0 15 10.3 0.0 2.5 1 sp|Q04MR4|MUTL_STRP2 DNA mismatch repair protein mutL OS=St 1.8 13.3 0.0 15 10.3 0.0 2.5 1 sp|C1CI68|MUTL_STRZP DNA mismatch repair protein mutL OS=St 1.8 13.3 0.0 15 10.3 0.0 2.5 1 sp|C1CP43|MUTL_STRZT DNA mismatch repair protein mutL OS=St 1.8 13.3 1.2 8.8 11.0 0.2 2.7 1 sp|Q8ZQE4|MACB_SALTY Macrolide export ATP-binding/permease 1.8 13.3 1.2 8.8 11.0 0.2 2.7 1 sp|Q57R58|MACB_SALCH Macrolide export ATP-binding/permease 1.8 13.2 0.0 3.6 12.3 0.0 1.5 1 sp|Q64550|UD11_RAT UDP-glucuronosyltransferase 1-1 OS=Rat 1.8 13.2 0.0 6 11.6 0.0 1.8 1 sp|B9JCX4|GLYA_AGRRK Serine hydroxymethyltransferase OS=Agr 1.9 13.2 1.2 8.8 11.0 0.2 2.6 1 sp|Q8Z824|MACB_SALTI Macrolide export ATP-binding/permease 1.9 13.2 0.0 2.7 12.7 0.0 1.2 1 sp|O94475|YC67_SCHPO Uncharacterized protein C1919.07 OS=Sc 1.9 13.2 0.0 2.2e+02 6.5 0.0 2.2 2 sp|P59837|RDH12_BOVIN Retinol dehydrogenase 12 OS=Bos taurus 1.9 13.2 0.8 8.8 11.0 0.2 2.4 1 sp|Q5PGK9|MACB_SALPA Macrolide export ATP-binding/permease 2 13.1 0.8 18 10.0 0.1 2.6 1 sp|Q02CM4|ILVC_SOLUE Ketol-acid reductoisomerase OS=Solibac 2 13.1 0.0 11 10.8 0.0 2.0 1 sp|Q669P6|NPD_YERPS NAD-dependent deacetylase OS=Yersinia 2 13.1 0.0 11 10.8 0.0 2.0 1 sp|Q8ZFR1|NPD_YERPE NAD-dependent deacetylase OS=Yersinia 2 13.1 0.1 5.1 11.8 0.1 1.7 1 sp|B9KYS1|ILVC_THERP Ketol-acid reductoisomerase OS=Thermom 2 13.1 0.4 13 10.5 0.1 2.3 1 sp|B4UAN4|ILVC_ANASK Ketol-acid reductoisomerase OS=Anaerom 2 13.1 0.4 13 10.5 0.1 2.3 1 sp|B8J829|ILVC_ANAD2 Ketol-acid reductoisomerase OS=Anaerom 2 13.1 0.4 13 10.5 0.1 2.3 1 sp|Q2IJB7|ILVC_ANADE Ketol-acid reductoisomerase OS=Anaerom 2.1 13.1 0.1 5.1 11.8 0.1 1.7 1 sp|Q0RDI8|ILVC_FRAAA Ketol-acid reductoisomerase OS=Frankia 2.1 13.1 1.1 7.1 11.3 0.0 2.3 1 sp|P0ABQ0|COABC_ECOLI Coenzyme A biosynthesis bifunctional p 2.1 13.1 1.1 7.1 11.3 0.0 2.3 1 sp|P0ABQ1|COABC_ECOL6 Coenzyme A biosynthesis bifunctional p 2.1 13.1 0.1 4.8 11.9 0.0 1.8 1 sp|B2J2U6|ILVC_NOSP7 Ketol-acid reductoisomerase OS=Nostoc 2.1 13.0 0.0 6.4 11.5 0.0 1.8 1 sp|Q89DG9|UVRC_BRAJA UvrABC system protein C OS=Bradyrhizob 2.1 13.0 0.1 5.1 11.8 0.1 1.6 1 sp|Q2S0M9|ILVC_SALRD Ketol-acid reductoisomerase OS=Salinib 2.2 13.0 0.0 4.9 11.9 0.0 1.7 1 sp|Q7NH80|ILVC_GLOVI Ketol-acid reductoisomerase OS=Gloeoba 2.2 13.0 0.1 4.5 12.0 0.1 1.6 1 sp|Q8G6V1|ILVC2_BIFLO Ketol-acid reductoisomerase 2 OS=Bifid 2.2 13.0 0.0 33 9.2 0.0 2.2 1 sp|Q2W698|ENO_MAGSA Enolase OS=Magnetospirillum magneticum 2.3 12.9 0.0 5.4 11.7 0.0 1.7 1 sp|Q63GN3|MTNA1_BACCZ Methylthioribose-1-phosphate isomerase 2.3 12.9 0.0 5.4 11.7 0.0 1.7 1 sp|B0JRP2|ILVC_MICAN Ketol-acid reductoisomerase OS=Microcy 2.3 12.9 0.0 15 10.3 0.0 2.3 1 sp|C1CBX8|MUTL_STRZJ DNA mismatch repair protein mutL OS=St 2.3 12.9 0.0 5.4 11.7 0.0 1.8 1 sp|Q3SLY0|BIOB_THIDA Biotin synthase OS=Thiobacillus denitr 2.4 12.9 0.0 15 10.3 0.0 2.3 1 sp|B5E6C5|MUTL_STRP4 DNA mismatch repair protein mutL OS=St 2.5 12.8 0.0 6 11.6 0.0 1.7 1 sp|B2J6I3|MURD_NOSP7 UDP-N-acetylmuramoylalanine--D-glutama 2.5 12.8 0.1 28 9.4 0.0 2.6 1 sp|Q5LXV0|ILVC_STRT1 Ketol-acid reductoisomerase OS=Strepto 2.5 12.8 0.1 28 9.4 0.0 2.6 1 sp|Q5M2F2|ILVC_STRT2 Ketol-acid reductoisomerase OS=Strepto 2.6 12.8 0.2 95 7.7 0.0 2.3 2 sp|C6A5E6|VATD_THESM V-type ATP synthase subunit D OS=Therm 2.6 12.8 0.1 7.7 11.2 0.0 1.8 1 sp|Q2RIS6|ILVC_MOOTA Ketol-acid reductoisomerase OS=Moorell 2.6 12.7 0.3 74 8.0 0.0 2.9 1 sp|Q3M859|THIOG_ANAVT Bifunctional protein thiO/thiG OS=Anab 2.6 12.7 0.0 7.4 11.3 0.0 1.7 1 sp|Q5GS59|RLME_WOLTR Ribosomal RNA large subunit methyltran 2.7 12.7 2.1 2.8 12.7 0.1 2.1 1 sp|B8G7X1|ILVC_CHLAD Ketol-acid reductoisomerase OS=Chlorof 2.8 12.7 0.3 9 11.0 0.1 2.0 1 sp|C5C2I2|ILVC_BEUC1 Ketol-acid reductoisomerase OS=Beutenb 2.8 12.6 0.3 13 10.5 0.1 2.1 1 sp|Q5SJ03|ILVC_THET8 Ketol-acid reductoisomerase OS=Thermus 2.8 12.6 0.3 13 10.5 0.1 2.1 1 sp|Q72JC8|ILVC_THET2 Ketol-acid reductoisomerase OS=Thermus 2.9 12.6 0.0 11 10.8 0.0 2.0 1 sp|Q4JUN9|ILVC_CORJK Ketol-acid reductoisomerase OS=Coryneb 2.9 12.6 0.0 7.5 11.3 0.0 1.7 1 sp|Q2J0X3|UVRC_RHOP2 UvrABC system protein C OS=Rhodopseudo 2.9 12.6 0.0 16 10.2 0.0 2.2 1 sp|Q02YY8|ILVC_LACLS Ketol-acid reductoisomerase OS=Lactoco 2.9 12.6 0.1 8.9 11.0 0.0 1.9 1 sp|B9EBF4|ILVC_MACCJ Ketol-acid reductoisomerase OS=Macroco 2.9 12.6 0.0 6 11.6 0.0 1.6 1 sp|Q43716|UFOG_PETHY Anthocyanidin 3-O-glucosyltransferase 3 12.6 0.0 5.6 11.7 0.0 1.4 1 sp|A5GUT4|SURE_SYNR3 5'-nucleotidase surE OS=Synechococcus 3 12.6 0.2 6.8 11.4 0.0 1.7 1 sp|Q1ARE4|ILVC_RUBXD Ketol-acid reductoisomerase OS=Rubroba 3 12.5 0.4 19 10.0 0.1 2.5 1 sp|A6W7N6|ILVC_KINRD Ketol-acid reductoisomerase OS=Kineoco 3 12.5 0.6 1.4e+02 7.1 0.0 3.1 1 sp|Q11039|DEAD_MYCTU Cold-shock DEAD box protein A homolog 3 12.5 0.1 9.5 10.9 0.0 1.8 1 sp|Q13BM0|UVRC_RHOPS UvrABC system protein C OS=Rhodopseudo 3.1 12.5 0.0 4.8 11.9 0.0 1.4 1 sp|Q8YMT3|SURE_ANASP 5'-nucleotidase surE OS=Anabaena sp. ( 3.1 12.5 0.0 8.6 11.1 0.0 1.7 1 sp|Q319M0|SURE_PROM9 5'-nucleotidase surE OS=Prochlorococcu 3.1 12.5 0.0 9.9 10.9 0.0 1.9 1 sp|A9VFD5|MTNA2_BACWK Methylthioribose-1-phosphate isomerase 3.2 12.5 0.0 2.1e+02 6.6 0.0 2.3 2 sp|A1JRP2|NADA_YERE8 Quinolinate synthase A OS=Yersinia ent 3.3 12.4 0.0 18 10.0 0.0 2.2 1 sp|A2RKQ6|ILVC_LACLM Ketol-acid reductoisomerase OS=Lactoco 3.5 12.3 0.5 11 10.7 0.1 2.1 1 sp|Q32DZ9|MACB_SHIDS Macrolide export ATP-binding/permease 3.5 12.3 0.1 10 10.8 0.1 1.8 1 sp|A5CPY6|ILVC_CLAM3 Ketol-acid reductoisomerase OS=Claviba 3.5 12.3 0.1 10 10.8 0.1 1.8 1 sp|B0RIN6|ILVC_CLAMS Ketol-acid reductoisomerase OS=Claviba 3.7 12.3 0.0 14 10.4 0.0 1.9 1 sp|Q8K5J6|MUTL_STRP3 DNA mismatch repair protein mutL OS=St 3.7 12.3 0.0 14 10.4 0.0 1.9 1 sp|Q99XN7|MUTL_STRP1 DNA mismatch repair protein mutL OS=St 3.7 12.3 0.0 14 10.4 0.0 1.9 1 sp|B5XJ09|MUTL_STRPZ DNA mismatch repair protein mutL OS=St 3.8 12.2 0.0 14 10.4 0.0 1.9 1 sp|A2RGV3|MUTL_STRPG DNA mismatch repair protein mutL OS=St 3.8 12.2 0.0 14 10.4 0.0 1.9 1 sp|Q5X9H5|MUTL_STRP6 DNA mismatch repair protein mutL OS=St 3.9 12.2 0.0 11 10.8 0.0 1.7 1 sp|Q3JYM6|MUTL_STRA1 DNA mismatch repair protein mutL OS=St 3.9 12.2 0.0 11 10.8 0.0 1.7 1 sp|Q8E2R5|MUTL_STRA3 DNA mismatch repair protein mutL OS=St 4 12.2 0.0 12 10.6 0.0 1.8 1 sp|Q9MB73|LGT_CITUN Limonoid UDP-glucosyltransferase OS=Ci 4.1 12.1 0.0 11 10.7 0.0 1.8 1 sp|A8G678|SURE_PROM2 5'-nucleotidase surE OS=Prochlorococcu 4.2 12.1 1.1 26 9.5 0.5 2.3 1 sp|A9WP08|ILVC_RENSM Ketol-acid reductoisomerase OS=Renibac 4.8 11.9 0.1 4.8 11.9 0.1 2.1 1 sp|A9WC26|ILVC_CHLAA Ketol-acid reductoisomerase OS=Chlorof 4.8 11.9 0.1 4.8 11.9 0.1 2.1 1 sp|B9LGM7|ILVC_CHLSY Ketol-acid reductoisomerase OS=Chlorof 4.9 11.9 0.0 12 10.7 0.0 1.8 1 sp|A2BSJ2|SURE_PROMS 5'-nucleotidase surE OS=Prochlorococcu 5 11.8 0.1 15 10.3 0.0 1.8 1 sp|Q9LR44|IABG1_ARATH Indole-3-acetate beta-glucosyltransfer 5.2 11.8 0.3 38 9.0 0.1 2.2 1 sp|O57731|VATD_PYRHO V-type ATP synthase subunit D OS=Pyroc 5.6 11.7 0.0 15 10.3 0.0 1.7 1 sp|A3PEA4|SURE_PROM0 5'-nucleotidase surE OS=Prochlorococcu 6.8 11.4 1.8 11 10.7 0.1 2.3 1 sp|P75831|MACB_ECOLI Macrolide export ATP-binding/permease 7.6 11.2 2.0 11 10.7 0.1 2.3 1 sp|Q83LR7|MACB_SHIFL Macrolide export ATP-binding/permease 7.7 11.2 2.0 11 10.7 0.1 2.3 1 sp|Q3Z3Q4|MACB_SHISS Macrolide export ATP-binding/permease 9.5 10.9 1.8 16 10.2 0.1 2.3 1 sp|Q8XED0|MACB_ECO57 Macrolide export ATP-binding/permease Domain annotation for each sequence (and alignments): >> sp|A7Z4E5|MURG_BACA2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 140.8 0.0 1.3e-42 7.6e-40 1 138 [. 3 142 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 140.8 bits; conditional E-value: 1.3e-42 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+A+ +e+qrr ++V+ ++t++gle+++ e +++++++i++ ++++kl s++++k++ ++lk+++k+k lk sp|A7Z4E5|MURG_BACA2 3 IAVSGGGTGGHIYPALAFIKEVQRRHPDVEflyIGTENGLEKKIvERENIPFRAIEIT-GFKRKL-SFENVKTVMRFLKGVKKSKSYLK 89 6899******************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 e+kpd+v+g+ggyv +++++aa++ gip++++Eqn++pg++nk+l++++n+v+ sp|A7Z4E5|MURG_BACA2 90 EFKPDAVIGTGGYVCGPVVYAAAKMGIPTIIHEQNSLPGITNKFLSKYVNKVA 142 ***************************************************97 PP >> sp|Q65JY0|MURG_BACLD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 136.1 0.0 4e-41 2.3e-38 1 138 [. 3 142 .. 3 143 .. 0.99 2 ? 3.2 0.0 4 2.2e+03 13 106 .. 203 234 .. 173 251 .. 0.60 Alignments for each domain: == domain 1 score: 136.1 bits; conditional E-value: 4e-41 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT+G+++Pa+A+ +e++r +V+ ++t++gle+ + e +g+++++i++ ++++kl s++++k++ ++lk++++ ke lk sp|Q65JY0|MURG_BACLD 3 IVVSGGGTGGHIYPALAFIKEVKRHHEDVEflyIGTEKGLEKNIvEREGIPFKAIEIT-GFKRKL-SFENVKTVMRFLKGVKECKEELK 89 799*******************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd+v+g+ggyv +++++aa+++gip++++Eqn++pgl+nk+l++++++v+ sp|Q65JY0|MURG_BACLD 90 RFKPDAVIGTGGYVCGPVVYAASKLGIPTIIHEQNSLPGLTNKFLSKYVDKVA 142 ***************************************************97 PP == domain 2 score: 3.2 bits; conditional E-value: 4 HHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EE CS Glyco_transf_28 13 ePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvad 101 e +A+ +eL++r+++V ++ +g+ + d sp|Q65JY0|MURG_BACLD 203 EAVIAMQNELKKRDYQV--------------------------------------------------------------LYVTGEVHYD 229 34455555555555555..............................................................5555555555 PP EE--H CS Glyco_transf_28 102 lalia 106 ++ a sp|Q65JY0|MURG_BACLD 230 KVTAA 234 55444 PP >> sp|P37585|MURG_BACSU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 139.0 0.0 4.9e-42 2.8e-39 1 138 [. 3 142 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 139.0 bits; conditional E-value: 4.9e-42 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+A+ +e+qrr ++V+ ++t++gle+++ e +++++++i++ ++++kl s++++k++ ++lk+++k+k l+ sp|P37585|MURG_BACSU 3 IAISGGGTGGHIYPALAFIKEVQRRHPNVEflyIGTENGLEKKIvERENIPFRSIEIT-GFKRKL-SFENVKTVMRFLKGVKKSKSYLA 89 6899******************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 e+kpd+v+g+ggyv +++++aa++ gip++v+Eqn++pg++nk+l++++n+v+ sp|P37585|MURG_BACSU 90 EFKPDAVIGTGGYVCGPVVYAAAKMGIPTIVHEQNSLPGITNKFLSKYVNKVA 142 ***************************************************97 PP >> sp|A8FCY1|MURG_BACP2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 136.8 0.0 2.4e-41 1.4e-38 1 138 [. 3 142 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 136.8 bits; conditional E-value: 2.4e-41 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT+G+++Pa+A+ +e++r ++V+ ++t++gle+++ e +++++++i++ ++++kl s++++k++ ++lk+++k+k lk sp|A8FCY1|MURG_BACP2 3 IVISGGGTGGHIYPALAFIKEVKRLHPDVEflyIGTENGLEKKIvERENIPFKAIEIS-GFKRKL-SFDNVKTVMRFLKGVQKSKSYLK 89 799*******************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 e+kpd+v+g+ggyv +++++aa++++ip++++Eqn++pg++nk+l+r++n+v+ sp|A8FCY1|MURG_BACP2 90 EFKPDAVIGTGGYVCGPVVYAASKLKIPTIIHEQNSLPGITNKFLARYVNKVA 142 ***************************************************97 PP >> sp|Q812W5|MURG1_BACCR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.9 0.0 7.9e-40 4.4e-37 1 139 [] 3 143 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 131.9 bits; conditional E-value: 7.9e-40 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 v+++ggGT+G+++Pa+Al re ++ +e r ++t++gle+++ ++ag+++++i + ++++k+ sl+++k++ ++lk+++++k+ + sp|Q812W5|MURG1_BACCR 3 VLVSGGGTGGHIYPALALIREIKKLNPEARflyIGTENGLESTIvPKAGIPFQSIVIS-GFKRKI-SLDNVKTVMRFLKGVQDSKRYI 88 7899******************************************************.******.********************** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 ++++pd+v+g+ggyv +++++aa+++gip++v+Eqn++pg++nk+l+r++++v+v sp|Q812W5|MURG1_BACCR 89 RRFNPDIVIGTGGYVCGPVVYAAAKLGIPTIVHEQNSVPGVTNKFLSRYVDKVAV 143 ****************************************************975 PP >> sp|A3MY90|MURG_ACTP2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 135.3 0.1 7e-41 4e-38 2 138 .. 6 142 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 135.3 bits; conditional E-value: 7e-41 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+areLq++G+e+r l+t++++e+ + +++g++++ i++ +l+ k+ + lk +++ +ka+ +a++i+k+++ sp|A3MY90|MURG_ACTP2 6 LVMAGGTGGHVFPAIAVARELQKQGWEIRwLGTKDRMEADLvPKHGIPIEFIQIS-GLKGKG-IGALLKAPFAIFKAVMQARKIIKNYQ 92 789*************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++ +iaa+l+g+p++++Eqn+++gl+n +l++ a +vl sp|A3MY90|MURG_ACTP2 93 PDAVLGMGGYVSGPGGIAAKLCGVPVILHEQNAVAGLTNVWLSKIARRVL 142 **********************************************9986 PP >> sp|A0RHT1|MURG2_BACAH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.9 0.0 7.9e-40 4.4e-37 1 139 [] 3 143 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 131.9 bits; conditional E-value: 7.9e-40 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 v+++ggGT+G+++Pa+Al re ++ +e r ++t++gle+++ ++ag+++++i + ++++k+ sl+++k++ ++lk+++++k+ + sp|A0RHT1|MURG2_BACAH 3 VLVSGGGTGGHIYPALALIREIKKLNPEARflyIGTENGLESTIvPKAGIPFQSIVIS-GFKRKI-SLDNVKTVMRFLKGVQDSKRYI 88 7899******************************************************.******.********************** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 ++++pd+v+g+ggyv +++++aa+++gip++v+Eqn++pg++nk+l+r++++v+v sp|A0RHT1|MURG2_BACAH 89 RRFNPDIVIGTGGYVCGPVVYAAAKLGIPTIVHEQNSVPGVTNKFLSRYVDKVAV 143 ****************************************************975 PP >> sp|Q636B6|MURG1_BACCZ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.9 0.0 7.9e-40 4.4e-37 1 139 [] 3 143 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 131.9 bits; conditional E-value: 7.9e-40 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 v+++ggGT+G+++Pa+Al re ++ +e r ++t++gle+++ ++ag+++++i + ++++k+ sl+++k++ ++lk+++++k+ + sp|Q636B6|MURG1_BACCZ 3 VLVSGGGTGGHIYPALALIREIKKLNPEARflyIGTENGLESTIvPKAGIPFQSIVIS-GFKRKI-SLDNVKTVMRFLKGVQDSKRYI 88 7899******************************************************.******.********************** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 ++++pd+v+g+ggyv +++++aa+++gip++v+Eqn++pg++nk+l+r++++v+v sp|Q636B6|MURG1_BACCZ 89 RRFNPDIVIGTGGYVCGPVVYAAAKLGIPTIVHEQNSVPGVTNKFLSRYVDKVAV 143 ****************************************************975 PP >> sp|Q81JG5|MURG1_BACAN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.9 0.0 7.9e-40 4.4e-37 1 139 [] 3 143 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 131.9 bits; conditional E-value: 7.9e-40 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 v+++ggGT+G+++Pa+Al re ++ +e r ++t++gle+++ ++ag+++++i + ++++k+ sl+++k++ ++lk+++++k+ + sp|Q81JG5|MURG1_BACAN 3 VLVSGGGTGGHIYPALALIREIKKLNPEARflyIGTENGLESTIvPKAGIPFQSIVIS-GFKRKI-SLDNVKTVMRFLKGVQDSKRYI 88 7899******************************************************.******.********************** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 ++++pd+v+g+ggyv +++++aa+++gip++v+Eqn++pg++nk+l+r++++v+v sp|Q81JG5|MURG1_BACAN 89 RRFNPDIVIGTGGYVCGPVVYAAAKLGIPTIVHEQNSVPGVTNKFLSRYVDKVAV 143 ****************************************************975 PP >> sp|Q732F8|MURG1_BACC1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.9 0.0 7.9e-40 4.4e-37 1 139 [] 3 143 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 131.9 bits; conditional E-value: 7.9e-40 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 v+++ggGT+G+++Pa+Al re ++ +e r ++t++gle+++ ++ag+++++i + ++++k+ sl+++k++ ++lk+++++k+ + sp|Q732F8|MURG1_BACC1 3 VLVSGGGTGGHIYPALALIREIKKLNPEARflyIGTENGLESTIvPKAGIPFQSIVIS-GFKRKI-SLDNVKTVMRFLKGVQDSKRYI 88 7899******************************************************.******.********************** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 ++++pd+v+g+ggyv +++++aa+++gip++v+Eqn++pg++nk+l+r++++v+v sp|Q732F8|MURG1_BACC1 89 RRFNPDIVIGTGGYVCGPVVYAAAKLGIPTIVHEQNSVPGVTNKFLSRYVDKVAV 143 ****************************************************975 PP >> sp|B7GGI2|MURG_ANOFW UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 133.1 0.0 3.2e-40 1.8e-37 1 138 [. 3 142 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 133.1 bits; conditional E-value: 3.2e-40 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT+G+++Pa+A+ +e++++ ++V ++t++gle+++ + +++++++i++ +l+++l s++++k++ ++ k++r+ k++lk sp|B7GGI2|MURG_ANOFW 3 IVVSGGGTGGHIYPALAFIHEVKKQHPNVDvlyIGTKKGLESTIvPRENIPFHAIDIS-GLKRSL-SFENVKTIVRFIKSVRACKKLLK 89 799*******************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpdvv+g+ggyv +++++aa+++gip++++Eqn+ipgl+n +l+r+an+v+ sp|B7GGI2|MURG_ANOFW 90 QYKPDVVLGTGGYVCGPVVYAAAKLGIPTIIHEQNSIPGLTNTFLSRYANKVA 142 ***************************************************97 PP >> sp|A7GRN6|MURG_BACCN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.9 0.0 7.5e-40 4.2e-37 1 139 [] 3 143 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 131.9 bits; conditional E-value: 7.5e-40 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+Al re ++ +e r ++t++gle+++ ++ag+++++i + ++++k+ s++++k++ ++ k+++++k+ ++ sp|A7GRN6|MURG_BACCN 3 ILVSGGGTGGHIYPALALIREIKKLHPEARflyIGTENGLESTIvPKAGIPFQSIVIS-GFKRKI-SFDNVKTVMRFVKGVQDSKRYIR 89 6899******************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 +++pdvv+g+ggyv +++++aa+++gip++v+Eqn++pg++nk+l+r++++v+v sp|A7GRN6|MURG_BACCN 90 RFNPDVVIGTGGYVCGPVVYAAAKLGIPTIVHEQNSVPGVTNKFLSRYVDKVAV 143 ***************************************************975 PP >> sp|B0BRH7|MURG_ACTPJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 133.5 0.1 2.5e-40 1.4e-37 2 138 .. 6 142 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 133.5 bits; conditional E-value: 2.5e-40 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+areLq++G+e+r l+t++++e+ + +++g++++ i++ +l+ k+ + lk +++ +ka+ +a++i+k+++ sp|B0BRH7|MURG_ACTPJ 6 LVMAGGTGGHVFPAIAVARELQKQGWEIRwLGTKDRMEADLvPKHGIPIEFIQIS-GLKGKG-IGALLKAPFAIFKAVMQARKIIKNYQ 92 789*************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++ +iaa+l+g+p++++Eqn+++gl+n +l++ a +vl sp|B0BRH7|MURG_ACTPJ 93 PDAVLGMGGYVSGPGGIAAKLCGVPVILHEQNAVAGLTNVWLSKIACRVL 142 *******************************************9987775 PP >> sp|B3GZK8|MURG_ACTP7 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 133.5 0.1 2.5e-40 1.4e-37 2 138 .. 6 142 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 133.5 bits; conditional E-value: 2.5e-40 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+areLq++G+e+r l+t++++e+ + +++g++++ i++ +l+ k+ + lk +++ +ka+ +a++i+k+++ sp|B3GZK8|MURG_ACTP7 6 LVMAGGTGGHVFPAIAVARELQKQGWEIRwLGTKDRMEADLvPKHGIPIEFIQIS-GLKGKG-IGALLKAPFAIFKAVMQARKIIKNYQ 92 789*************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++ +iaa+l+g+p++++Eqn+++gl+n +l++ a +vl sp|B3GZK8|MURG_ACTP7 93 PDAVLGMGGYVSGPGGIAAKLCGVPVILHEQNAVAGLTNVWLSKIACRVL 142 *******************************************9987775 PP >> sp|Q6HEQ4|MURG1_BACHK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 130.6 0.0 2e-39 1.1e-36 1 139 [] 3 143 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 130.6 bits; conditional E-value: 2e-39 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 v+++ggGT+G+++Pa+Al re ++ +e r ++t++gle+++ +++g+++++i + ++++k+ sl+++k++ ++lk+++++k+ + sp|Q6HEQ4|MURG1_BACHK 3 VLVSGGGTGGHIYPALALIREIKKLNPEARflyIGTENGLESTIvPKTGIPFQSIVIS-GFKRKI-SLDNVKTVMRFLKGVQDSKRYI 88 7899******************************************************.******.********************** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 ++++pd+v+g+ggyv +++++aa+++gip++v+Eqn++pg++nk+l+r++++v+v sp|Q6HEQ4|MURG1_BACHK 89 RRFNPDIVIGTGGYVCGPVVYAAAKLGIPTIVHEQNSVPGVTNKFLSRYVDKVAV 143 ****************************************************975 PP >> sp|O07670|MURG_ENTHR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 132.0 0.0 7.1e-40 4e-37 1 138 [. 3 142 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 132.0 bits; conditional E-value: 7.1e-40 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+A+ + +++++++ + +++++gle+++ +e+g+++++++++ ++++kl sl++lk+++ +lk++r+ak+ilk sp|O07670|MURG_ENTHR 3 ILVTGGGTGGHIYPALAFVNYVKTKEPNTEfmyVGAQRGLENKIvPETGMPFRTLEIQ-GFQRKL-SLHNLKTIQLFLKSIREAKKILK 89 799*******************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 e+kpdvv+g+ggyv++++++aa+++ ip++++Eqn++pg++nk+l+r++++++ sp|O07670|MURG_ENTHR 90 EFKPDVVIGTGGYVSGAVVYAASKLAIPTIIHEQNSVPGITNKFLSRYVDRIA 142 **************************************************986 PP >> sp|A7FM66|MURG_YERP3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.6 0.3 4e-39 2.3e-36 2 138 .. 9 145 .. 8 146 .. 0.98 2 ? 2.6 0.0 6.1 3.4e+03 38 108 .. 266 342 .. 253 356 .] 0.53 Alignments for each domain: == domain 1 score: 129.6 bits; conditional E-value: 4e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i++ +l+ k+ ++ l+ + + ++a+r+a +i+++++ sp|A7FM66|MURG_YERP3 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl sp|A7FM66|MURG_YERP3 96 PDVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145 ***********************************************997 PP == domain 2 score: 2.6 bits; conditional E-value: 6.1 HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS Glyco_transf_28 38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102 +++v++agl+a ++ + ++ ++ +l+ + ++++++++++ + sp|A7FM66|MURG_YERP3 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqPQFT------------------ATSVSSLLAGWDRATLLSMAERARSV 336 567899****99999998888666666555544444443332222..................22333333334444444444444444 PP E--HHH CS Glyco_transf_28 103 aliaal 108 a+ a+ sp|A7FM66|MURG_YERP3 337 AIPDAT 342 444333 PP >> sp|B1JK81|MURG_YERPY UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.6 0.3 4e-39 2.3e-36 2 138 .. 9 145 .. 8 146 .. 0.98 2 ? 2.6 0.0 6.1 3.4e+03 38 108 .. 266 342 .. 253 356 .] 0.53 Alignments for each domain: == domain 1 score: 129.6 bits; conditional E-value: 4e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i++ +l+ k+ ++ l+ + + ++a+r+a +i+++++ sp|B1JK81|MURG_YERPY 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl sp|B1JK81|MURG_YERPY 96 PDVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145 ***********************************************997 PP == domain 2 score: 2.6 bits; conditional E-value: 6.1 HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS Glyco_transf_28 38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102 +++v++agl+a ++ + ++ ++ +l+ + ++++++++++ + sp|B1JK81|MURG_YERPY 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqPQFT------------------ATSVSSLLAGWDRATLLSMAERARSV 336 567899****99999998888666666555544444443332222..................22333333334444444444444444 PP E--HHH CS Glyco_transf_28 103 aliaal 108 a+ a+ sp|B1JK81|MURG_YERPY 337 AIPDAT 342 444333 PP >> sp|B2K4E6|MURG_YERPB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.6 0.3 4e-39 2.3e-36 2 138 .. 9 145 .. 8 146 .. 0.98 2 ? 2.6 0.0 6.1 3.4e+03 38 108 .. 266 342 .. 253 356 .] 0.53 Alignments for each domain: == domain 1 score: 129.6 bits; conditional E-value: 4e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i++ +l+ k+ ++ l+ + + ++a+r+a +i+++++ sp|B2K4E6|MURG_YERPB 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl sp|B2K4E6|MURG_YERPB 96 PDVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145 ***********************************************997 PP == domain 2 score: 2.6 bits; conditional E-value: 6.1 HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS Glyco_transf_28 38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102 +++v++agl+a ++ + ++ ++ +l+ + ++++++++++ + sp|B2K4E6|MURG_YERPB 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqPQFT------------------ATSVSSLLAGWDRATLLSMAERARSV 336 567899****99999998888666666555544444443332222..................22333333334444444444444444 PP E--HHH CS Glyco_transf_28 103 aliaal 108 a+ a+ sp|B2K4E6|MURG_YERPB 337 AIPDAT 342 444333 PP >> sp|Q66EK5|MURG_YERPS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.6 0.3 4e-39 2.3e-36 2 138 .. 9 145 .. 8 146 .. 0.98 2 ? 2.6 0.0 6.1 3.4e+03 38 108 .. 266 342 .. 253 356 .] 0.53 Alignments for each domain: == domain 1 score: 129.6 bits; conditional E-value: 4e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i++ +l+ k+ ++ l+ + + ++a+r+a +i+++++ sp|Q66EK5|MURG_YERPS 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl sp|Q66EK5|MURG_YERPS 96 PDVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145 ***********************************************997 PP == domain 2 score: 2.6 bits; conditional E-value: 6.1 HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS Glyco_transf_28 38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102 +++v++agl+a ++ + ++ ++ +l+ + ++++++++++ + sp|Q66EK5|MURG_YERPS 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqPQFT------------------ATSVSSLLAGWDRATLLSMAERARSV 336 567899****99999998888666666555544444443332222..................22333333334444444444444444 PP E--HHH CS Glyco_transf_28 103 aliaal 108 a+ a+ sp|Q66EK5|MURG_YERPS 337 AIPDAT 342 444333 PP >> sp|A1JJJ3|MURG_YERE8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 130.3 0.2 2.5e-39 1.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 130.3 bits; conditional E-value: 2.5e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + ++ g+e+ i++ +l+ k+ ++ l+ + + ++a+r+ak+i+++++ sp|A1JJJ3|MURG_YERE8 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPKNGIEIDFIEIS-GLRGKG-LMAQLTAPVRIYRAVRQAKKIMRDYQ 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+l+gip++++Eqngi+gl+n++l+r a++vl sp|A1JJJ3|MURG_YERE8 96 PDVVLGMGGYVSGPGGLAAWLCGIPVVLHEQNGIAGLTNRWLARIAKKVL 145 ***********************************************997 PP >> sp|A9MQC2|MURG_SALAR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.3 0.4 4.8e-39 2.7e-36 2 138 .. 9 145 .. 8 146 .. 0.98 2 ? 2.9 0.0 5.2 2.9e+03 38 108 .. 266 342 .. 254 351 .. 0.63 Alignments for each domain: == domain 1 score: 129.3 bits; conditional E-value: 4.8e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g++++ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|A9MQC2|MURG_SALAR 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGINIEFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|A9MQC2|MURG_SALAR 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATTVM 145 *********************************************99885 PP == domain 2 score: 2.9 bits; conditional E-value: 5.2 HHHHHH---EEEE----..........S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHH CS Glyco_transf_28 38 eefveeagleavpigpd..........vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaal 108 ++++++agl+a ++ + ++l + ++++e ++ + +++ +l+ ++ d+++ +++++ ++ ++ a+ sp|A9MQC2|MURG_SALAR 266 VSEIAAAGLPAIFVPFQhkdrqqywnaLPLEN--AGAAKILEQPQF--TAEAVADTLAGWSRDTLLTMAERARAVSILDAT 342 466799*****999999888855555533333..223333333333..456667777777777777777777766666555 PP >> sp|P64869|Y1526_MYCTU Uncharacterized protein Rv1526c/MT1577 OS=Mycobacterium tuberculosis GN=Rv1526c PE=4 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.8 1.0 8.1e-40 4.5e-37 1 138 [. 3 144 .. 3 145 .. 0.98 Alignments for each domain: == domain 1 score: 131.8 bits; conditional E-value: 8.1e-40 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----................................S- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd................................vk 56 +vla++GTrGdveP++A+++eL+rrGh V++a+pp+l efve+agl+ v++gpd v+ sp|P64869|Y1526_MYCTU 3 FVLAVHGTRGDVEPCAAVGVELRRRGHAVHMAVPPNLIEFVESAGLTGVAYGPDsdeqintvaafvrnltraqnplnlaravkelfVE 90 89***********************************************************************************99* PP -----.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 57 lwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +wa e+ +tl++la+g adl++++++++g++anvaE+++ip ++++++p+++ng++ sp|P64869|Y1526_MYCTU 91 GWA--EMGTTLTTLADG--------------------------ADLVMTGQTYHGVAANVAEYYDIPAAALHHFPMQVNGQI 144 ***..99**********..........................*************************************97 PP >> sp|P64870|Y1553_MYCBO Uncharacterized protein Mb1553c OS=Mycobacterium bovis GN=Mb1553c PE=4 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.8 1.0 8.1e-40 4.5e-37 1 138 [. 3 144 .. 3 145 .. 0.98 Alignments for each domain: == domain 1 score: 131.8 bits; conditional E-value: 8.1e-40 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----................................S- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd................................vk 56 +vla++GTrGdveP++A+++eL+rrGh V++a+pp+l efve+agl+ v++gpd v+ sp|P64870|Y1553_MYCBO 3 FVLAVHGTRGDVEPCAAVGVELRRRGHAVHMAVPPNLIEFVESAGLTGVAYGPDsdeqintvaafvrnltraqnplnlaravkelfVE 90 89***********************************************************************************99* PP -----.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 57 lwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +wa e+ +tl++la+g adl++++++++g++anvaE+++ip ++++++p+++ng++ sp|P64870|Y1553_MYCBO 91 GWA--EMGTTLTTLADG--------------------------ADLVMTGQTYHGVAANVAEYYDIPAAALHHFPMQVNGQI 144 ***..99**********..........................*************************************97 PP >> sp|Q65RY6|MURG_MANSM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.5 0.1 1e-39 5.6e-37 2 138 .. 8 144 .. 7 145 .. 0.98 Alignments for each domain: == domain 1 score: 131.5 bits; conditional E-value: 1e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+a+ Lq++G++++ l+t++++e+++ +++g++++ i++ +l+ k+ + l +++ ++a+ +a++i+ ++k sp|Q65RY6|MURG_MANSM 8 LVMAGGTGGHVFPAIAVAQYLQKQGWDICwLGTKDRMEAQLvPKHGIPIEFIQIS-GLRGKG-IKALLGAPFAICRAIMQARKIILRQK 94 789****************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++ ++aa+l+g+p++++Eqn+++gl+n +l++ a++vl sp|Q65RY6|MURG_MANSM 95 PDAVLGMGGYVSGPGGVAAKLCGVPVILHEQNAVAGLTNVWLSKIAKRVL 144 ***********************************************997 PP >> sp|B2VD91|MURG_ERWT9 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.7 0.2 3.7e-39 2.1e-36 2 138 .. 7 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 129.7 bits; conditional E-value: 3.7e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g++++ i + +l+ k+ + l +++ ++a+r+a++i+k ++ sp|B2VD91|MURG_ERWT9 7 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIEFIRIS-GLRGKG-IKALLAAPLRIFNAWRQARAIMKAWQ 93 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B2VD91|MURG_ERWT9 94 PDVVLGMGGYVSGPGGLAAWSCGIPVVLHEQNGIAGLTNKWLAKIATKVM 143 ***********************************************986 PP >> sp|Q4QLF8|MURG_HAEI8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.2 0.1 1.3e-39 7.4e-37 2 138 .. 7 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 131.2 bits; conditional E-value: 1.3e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+a++Lq+++++++ l+t++++e+++ +++g++++ i++ +l+ k+ + l +++ ++a+ +ak+i++e+k sp|Q4QLF8|MURG_HAEI8 7 LVMAGGTGGHVFPAIAVAQTLQKQEWDICwLGTKDRMEAQLvPKYGIPIRFIQIS-GLRGKG-IKALLNAPFAIFRAVLQAKKIIQEEK 93 789****************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++a++aa+l+g+p++++Eqn+i+gl+nkll + a+ vl sp|Q4QLF8|MURG_HAEI8 94 PDAVLGMGGYVSGPAGVAAKLCGVPIILHEQNAIAGLTNKLLGKIATCVL 143 *******************************************9999886 PP >> sp|A5UIR2|MURG_HAEIG UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.2 0.1 1.3e-39 7.4e-37 2 138 .. 7 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 131.2 bits; conditional E-value: 1.3e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+a++Lq+++++++ l+t++++e+++ +++g++++ i++ +l+ k+ + l +++ ++a+ +ak+i++e+k sp|A5UIR2|MURG_HAEIG 7 LVMAGGTGGHVFPAIAVAQTLQKQEWDICwLGTKDRMEAQLvPKYGIPIRFIQIS-GLRGKG-IKALLNAPFAIFRAVLQAKKIIQEEK 93 789****************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++a++aa+l+g+p++++Eqn+i+gl+nkll + a+ vl sp|A5UIR2|MURG_HAEIG 94 PDAVLGMGGYVSGPAGVAAKLCGVPIILHEQNAIAGLTNKLLGKIATCVL 143 *******************************************9999886 PP >> sp|P45065|MURG_HAEIN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.2 0.1 1.3e-39 7.4e-37 2 138 .. 7 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 131.2 bits; conditional E-value: 1.3e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+a++Lq+++++++ l+t++++e+++ +++g++++ i++ +l+ k+ + l +++ ++a+ +ak+i++e+k sp|P45065|MURG_HAEIN 7 LVMAGGTGGHVFPAIAVAQTLQKQEWDICwLGTKDRMEAQLvPKYGIPIRFIQIS-GLRGKG-IKALLNAPFAIFRAVLQAKKIIQEEK 93 789****************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++a++aa+l+g+p++++Eqn+i+gl+nkll + a+ vl sp|P45065|MURG_HAEIN 94 PDAVLGMGGYVSGPAGVAAKLCGVPIILHEQNAIAGLTNKLLGKIATCVL 143 *******************************************9999886 PP >> sp|A9R124|MURG_YERPG UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.3 0.3 9.8e-39 5.5e-36 2 138 .. 9 145 .. 8 146 .. 0.98 2 ? 2.8 0.0 5.3 3e+03 38 116 .. 266 350 .. 254 356 .] 0.56 Alignments for each domain: == domain 1 score: 128.3 bits; conditional E-value: 9.8e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i++ +l+ k+ ++ l+ + + ++a+r+a +i+++++ sp|A9R124|MURG_YERPG 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p+vv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl sp|A9R124|MURG_YERPG 96 PNVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145 ***********************************************997 PP == domain 2 score: 2.8 bits; conditional E-value: 5.3 HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS Glyco_transf_28 38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102 +++v++agl+a ++ + ++ + ++ +l+++ ++++++++++ + sp|A9R124|MURG_YERPG 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqP----------------QF--TATSVSSLLASWDRATLLSMAERARSV 336 567899****99999998888666655433333333332222................22..334444555555555555555555555 PP E--HHHHHHHHHHH CS Glyco_transf_28 103 aliaallagipanv 116 a+ a+ + ++ +v sp|A9R124|MURG_YERPG 337 AIPDATERVAAEVV 350 55555555554444 PP >> sp|Q1C214|MURG_YERPA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.3 0.3 9.8e-39 5.5e-36 2 138 .. 9 145 .. 8 146 .. 0.98 2 ? 2.8 0.0 5.3 3e+03 38 116 .. 266 350 .. 254 356 .] 0.56 Alignments for each domain: == domain 1 score: 128.3 bits; conditional E-value: 9.8e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i++ +l+ k+ ++ l+ + + ++a+r+a +i+++++ sp|Q1C214|MURG_YERPA 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p+vv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl sp|Q1C214|MURG_YERPA 96 PNVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145 ***********************************************997 PP == domain 2 score: 2.8 bits; conditional E-value: 5.3 HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS Glyco_transf_28 38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102 +++v++agl+a ++ + ++ + ++ +l+++ ++++++++++ + sp|Q1C214|MURG_YERPA 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqP----------------QF--TATSVSSLLASWDRATLLSMAERARSV 336 567899****99999998888666655433333333332222................22..334444555555555555555555555 PP E--HHHHHHHHHHH CS Glyco_transf_28 103 aliaallagipanv 116 a+ a+ + ++ +v sp|Q1C214|MURG_YERPA 337 AIPDATERVAAEVV 350 55555555554444 PP >> sp|Q1CMM7|MURG_YERPN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.3 0.3 9.8e-39 5.5e-36 2 138 .. 9 145 .. 8 146 .. 0.98 2 ? 2.8 0.0 5.3 3e+03 38 116 .. 266 350 .. 254 356 .] 0.56 Alignments for each domain: == domain 1 score: 128.3 bits; conditional E-value: 9.8e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i++ +l+ k+ ++ l+ + + ++a+r+a +i+++++ sp|Q1CMM7|MURG_YERPN 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p+vv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl sp|Q1CMM7|MURG_YERPN 96 PNVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145 ***********************************************997 PP == domain 2 score: 2.8 bits; conditional E-value: 5.3 HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS Glyco_transf_28 38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102 +++v++agl+a ++ + ++ + ++ +l+++ ++++++++++ + sp|Q1CMM7|MURG_YERPN 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqP----------------QF--TATSVSSLLASWDRATLLSMAERARSV 336 567899****99999998888666655433333333332222................22..334444555555555555555555555 PP E--HHHHHHHHHHH CS Glyco_transf_28 103 aliaallagipanv 116 a+ a+ + ++ +v sp|Q1CMM7|MURG_YERPN 337 AIPDATERVAAEVV 350 55555555554444 PP >> sp|Q8ZIE9|MURG_YERPE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.3 0.3 9.8e-39 5.5e-36 2 138 .. 9 145 .. 8 146 .. 0.98 2 ? 2.8 0.0 5.3 3e+03 38 116 .. 266 350 .. 254 356 .] 0.56 Alignments for each domain: == domain 1 score: 128.3 bits; conditional E-value: 9.8e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i++ +l+ k+ ++ l+ + + ++a+r+a +i+++++ sp|Q8ZIE9|MURG_YERPE 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p+vv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl sp|Q8ZIE9|MURG_YERPE 96 PNVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145 ***********************************************997 PP == domain 2 score: 2.8 bits; conditional E-value: 5.3 HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS Glyco_transf_28 38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102 +++v++agl+a ++ + ++ + ++ +l+++ ++++++++++ + sp|Q8ZIE9|MURG_YERPE 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqP----------------QF--TATSVSSLLASWDRATLLSMAERARSV 336 567899****99999998888666655433333333332222................22..334444555555555555555555555 PP E--HHHHHHHHHHH CS Glyco_transf_28 103 aliaallagipanv 116 a+ a+ + ++ +v sp|Q8ZIE9|MURG_YERPE 337 AIPDATERVAAEVV 350 55555555554444 PP >> sp|O07109|MURG_ENTFA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.0 0.0 6.2e-39 3.5e-36 1 138 [. 3 142 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 129.0 bits; conditional E-value: 6.2e-39 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+++ ++++++ + + ++t++gle+++ ++a++++++i+++ +++++l s++++k+++ +l +++kak+i++ sp|O07109|MURG_ENTFA 3 ILVTGGGTGGHIYPALSFVEHVKKEAPATEflyVGTENGLESQIvPKAKIPFKTIKIQ-GFKRSL-SPQNFKTIYLFLTSINKAKKIIR 89 799*******************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 e++pdvv+g+ggyv++++++aa ++ip++++Eqn+ipg++nk+l+r++++++ sp|O07109|MURG_ENTFA 90 EFQPDVVIGTGGYVSGAVVYAAHQLKIPTIIHEQNSIPGMTNKFLSRYVDKIA 142 **************************************************987 PP >> sp|A3QIM1|MURG_SHELP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.5 0.1 4.3e-39 2.4e-36 1 138 [. 7 144 .. 7 145 .. 0.98 Alignments for each domain: == domain 1 score: 129.5 bits; conditional E-value: 4.3e-39 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a++L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ +++l +++ l+++ +a+e++ke+ sp|A3QIM1|MURG_SHELP 7 ILIMAGGTGGHVFPALAVAKALAKQGWQVRwLGTADRMEARLvPQHGFDIDFIDIK-GVRGNG-LIRKLAAPFKILRSIMQAREVIKEF 93 689*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kp+vv+g+gg+++++ ++aa+l+gip++++Eqn+ipg++nkll+r a +vl sp|A3QIM1|MURG_SHELP 94 KPHVVLGMGGFASGPGGVAAKLSGIPLVLHEQNAIPGMTNKLLSRIASRVL 144 ***********************************************9986 PP >> sp|A8G9S7|MURG_SERP5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.0 0.2 6.2e-39 3.5e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 129.0 bits; conditional E-value: 6.2e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + l+ +++ + a+r+ak+i+++++ sp|A8G9S7|MURG_SERP5 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-LKAQLSAPLRIWHAVRQAKAIMRNYQ 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+l+gip++++Eqngi+gl+n++l+r a++vl sp|A8G9S7|MURG_SERP5 96 PDVVLGMGGYVSGPGGLAAWLCGIPVVLHEQNGIAGLTNRWLARIAKTVL 145 **********************************************9986 PP >> sp|B7LWF6|MURG_ESCF3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.0 0.3 6e-39 3.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 129.0 bits; conditional E-value: 6e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L ++G+eVr l+t +++e+ + +++g+e+ i + +l+ k+ + l +++ ++a+r+a++i+k +k sp|B7LWF6|MURG_ESCF3 9 MVMAGGTGGHVFPGLAVAHHLIAQGWEVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALLAAPLRIFNAWRQARAIMKAFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B7LWF6|MURG_ESCF3 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|A7MIE5|MURG_ENTS8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.7 0.2 7.6e-39 4.3e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 128.7 bits; conditional E-value: 7.6e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + l+ + + ++a+r+a++i+k++k sp|A7MIE5|MURG_ENTS8 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-VKALLLAPVRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a +v+ sp|A7MIE5|MURG_ENTS8 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIASRVM 145 ********************************************999885 PP >> sp|C6DEU3|MURG_PECCP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.8 0.2 7.1e-39 4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 128.8 bits; conditional E-value: 7.1e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ ++ l+ + + ++a+r+a++i+++++ sp|C6DEU3|MURG_PECCP 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IWAQLSAPIRIFQAVRQARAIMRRYQ 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+l+gip++++Eqngi+gl+n++l+ a++vl sp|C6DEU3|MURG_PECCP 96 PDVVLGMGGYVSGPGGLAAWLCGIPVVLHEQNGIAGLTNRWLSHIAKKVL 145 **********************************************9997 PP >> sp|Q88V81|MURG_LACPL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.1 2.4e-38 1.3e-35 2 138 .. 4 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.4e-38 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++ggGT+G+++Pa+Al ++L++ ++e ++t++gle+++ +e+g+++++i+++ +++++l sl+++k+++ +lk++ a++ +k sp|Q88V81|MURG_LACPL 4 MISGGGTGGHIYPALALIDALKAHDPEAQvqfVGTHRGLESRIvPERGIDFKTIKIQ-GFKRSL-SLQNVKTVYLFLKSVVTARKYIKA 90 5799**********************99999**************************.****99.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +kpdvvvg+ggyv++++++aa+ +ip++++Eqn++ g++nk+l+r++++++ sp|Q88V81|MURG_LACPL 91 FKPDVVVGTGGYVSGAVVFAASQMHIPTVIHEQNSVVGVTNKFLSRFVDKIA 142 *************************************************987 PP >> sp|Q8Z9G9|MURG_SALTI UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.8 0.2 1.5e-38 8.3e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.8 bits; conditional E-value: 1.5e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t++++e+ + +++g+++ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|Q8Z9G9|MURG_SALTI 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTSDRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+ sp|Q8Z9G9|MURG_SALTI 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145 *********************************************99885 PP >> sp|B4F111|MURG_PROMH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.6 0.1 3.5e-38 1.9e-35 2 138 .. 9 145 .. 8 146 .. 0.98 2 ? 3.2 0.0 4 2.3e+03 38 116 .. 271 355 .. 257 358 .. 0.68 Alignments for each domain: == domain 1 score: 126.6 bits; conditional E-value: 3.5e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a+ Lq +G+++r l+t +++e+++ +++g+e++ i + +l+ k+ + + + + ka+++a++i+k+++ sp|B4F111|MURG_PROMH 9 MVMAGGTGGHVFPGLAVAHYLQSQGWDIRwLGTADRMEAQLvPKHGIEIEYIRIS-GLRGKG-VKALIAAPIRIIKAIFQARRIMKRYQ 95 5899***************************************************.******.9999********************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++vl sp|B4F111|MURG_PROMH 96 PDAVLGMGGYVSGPGGVAAWSCGIPVVLHEQNGIAGLTNRWLSKIAKRVL 145 ***********************************************997 PP == domain 2 score: 3.2 bits; conditional E-value: 4 HHHHHH---EEEE----....S------...-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHH CS Glyco_transf_28 38 eefveeagleavpigpd....vklwakl..eslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanv 116 ++++++agl+a ++ + ++w+ l e ++ + + ++ + +++ +l+++ + ++ +++ ++ +a++ a+ + + +++ sp|B4F111|MURG_PROMH 271 VSEIAAAGLPAIFVPFQhkdrQQYWNALplENAGAARIIEQNDLTPEAIADTLENWDRHQLMLMAEKAQSVAITDATERVANVII 355 4566999999999999988885555543113344445555555577778888888888888888888888888888777777665 PP >> sp|A0L1P2|MURG_SHESA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.0 0.2 2.5e-38 1.4e-35 1 138 [. 8 145 .. 8 146 .. 0.99 2 ? 3.7 0.1 2.9 1.6e+03 54 117 .. 285 357 .. 254 361 .. 0.68 Alignments for each domain: == domain 1 score: 127.0 bits; conditional E-value: 2.5e-38 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ +++l ++++ +++ +ak++++e+ sp|A0L1P2|MURG_SHESA 8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LVRKLAAPFKVVRSILQAKAVIAEF 94 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+g+gg+++++ ++aa+lag+p++++Eqn+ipg++nkll+r an+vl sp|A0L1P2|MURG_SHESA 95 KPDVVLGMGGFASGPGGVAAKLAGVPLVLHEQNAIPGMTNKLLSRIANQVL 145 ************************************************986 PP == domain 2 score: 3.7 bits; conditional E-value: 2.9 -..............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHH CS Glyco_transf_28 54 d..............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanva 117 v++ a + +++++++ + + ++l++++ + ++++g+++ d+a++ a+ + +++ +a sp|A0L1P2|MURG_SHESA 285 PhavddhqtrnaqvlVEAGAAFLLPQAILDVNKL----VSKLQLLANDR-AELAQMGQRARDVAVLDATEQVAQVCIA 357 3446666666666665666666677777777777....44445555555.6677***************999998876 PP >> sp|Q0HZR6|MURG_SHESR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.0 0.2 2.5e-38 1.4e-35 1 138 [. 8 145 .. 8 146 .. 0.99 2 ? 3.7 0.1 2.9 1.6e+03 54 117 .. 285 357 .. 254 361 .. 0.68 Alignments for each domain: == domain 1 score: 127.0 bits; conditional E-value: 2.5e-38 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ +++l ++++ +++ +ak++++e+ sp|Q0HZR6|MURG_SHESR 8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LVRKLAAPFKVVRSILQAKAVIAEF 94 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+g+gg+++++ ++aa+lag+p++++Eqn+ipg++nkll+r an+vl sp|Q0HZR6|MURG_SHESR 95 KPDVVLGMGGFASGPGGVAAKLAGVPLVLHEQNAIPGMTNKLLSRIANQVL 145 ************************************************986 PP == domain 2 score: 3.7 bits; conditional E-value: 2.9 -..............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHH CS Glyco_transf_28 54 d..............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanva 117 v++ a + +++++++ + + ++l++++ + ++++g+++ d+a++ a+ + +++ +a sp|Q0HZR6|MURG_SHESR 285 PhavddhqtrnaqvlVEAGAAFLLPQAILDVNKL----VSKLQLLANDR-AELAQMGQRARDVAVLDATEQVAQVCIA 357 3446666666666665666666677777777777....44445555555.6677***************999998876 PP >> sp|B5BLC2|MURG_SALPK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.5 0.3 1.7e-38 9.6e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.5 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|B5BLC2|MURG_SALPK 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l+r a++v+ sp|B5BLC2|MURG_SALPK 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLARIATTVM 145 **********************************************9885 PP >> sp|Q5PDC8|MURG_SALPA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.5 0.3 1.7e-38 9.6e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.5 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|Q5PDC8|MURG_SALPA 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l+r a++v+ sp|Q5PDC8|MURG_SALPA 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLARIATTVM 145 **********************************************9885 PP >> sp|Q9K9T0|MURG_BACHD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.6 0.0 4.1e-39 2.3e-36 1 138 [. 3 142 .. 3 143 .. 0.97 Alignments for each domain: == domain 1 score: 129.6 bits; conditional E-value: 4.1e-39 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT+G+++Pa+A+ +e ++r+ + ++t++gle+++ + +g+++++i + ++++kl s++++k++ ++l+++++ak++l sp|Q9K9T0|MURG_BACHD 3 IVVSGGGTGGHIYPALAFINEMKKRDERLDvlyIGTERGLESEIvPREGIPFQTIHIT-GFQRKL-SMENVKTVVRFLRGTKRAKALLN 89 799***********************877777**************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 e+kpdvv+g+ggyv +++++aa++++ip++++Eqn++pgl+nk+l+r++++++ sp|Q9K9T0|MURG_BACHD 90 EFKPDVVIGTGGYVCGPVVYAAAKLKIPTVIHEQNSVPGLTNKFLSRYVDRIA 142 **************************************************987 PP >> sp|Q8Y5M2|MURG_LISMO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.2 0.0 5.2e-39 2.9e-36 1 138 [. 3 142 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 129.2 bits; conditional E-value: 5.2e-39 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+++ggGT+G+v+Pa+Al reL++ +e + ++t++gle+ + + +g+++++i++ +++++l sl+++k++ ++l + +k+k+il+ sp|Q8Y5M2|MURG_LISMO 3 VAISGGGTGGHVYPALALIRELKKSHPEAEflyIGTEKGLEAGIvKREGIPFEAIEIT-GFKRSL-SLENIKTVMRFLSGAKKSKQILR 89 6899******************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpdvv+g+ggyv +++++aa++++ip+ ++Eqn+++gl+nk+l+r+ ++v+ sp|Q8Y5M2|MURG_LISMO 90 DFKPDVVIGTGGYVCGPVVYAAAKLKIPTLIHEQNSVAGLTNKFLSRYTDKVA 142 **************************************************997 PP >> sp|A9MZL9|MURG_SALPB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.3 2.3e-38 1.3e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.3e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|A9MZL9|MURG_SALPB 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+ sp|A9MZL9|MURG_SALPB 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145 *********************************************99885 PP >> sp|B4TJ87|MURG_SALHS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.3 2.3e-38 1.3e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.3e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|B4TJ87|MURG_SALHS 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+ sp|B4TJ87|MURG_SALHS 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145 *********************************************99885 PP >> sp|B4TXH8|MURG_SALSV UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.3 2.3e-38 1.3e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.3e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|B4TXH8|MURG_SALSV 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+ sp|B4TXH8|MURG_SALSV 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145 *********************************************99885 PP >> sp|B5F7W4|MURG_SALA4 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.3 2.3e-38 1.3e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.3e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|B5F7W4|MURG_SALA4 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+ sp|B5F7W4|MURG_SALA4 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145 *********************************************99885 PP >> sp|Q8ZRU3|MURG_SALTY UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.3 2.3e-38 1.3e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.3e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|Q8ZRU3|MURG_SALTY 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+ sp|Q8ZRU3|MURG_SALTY 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145 *********************************************99885 PP >> sp|B4SU50|MURG_SALNS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.3 2.3e-38 1.3e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.3e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|B4SU50|MURG_SALNS 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+ sp|B4SU50|MURG_SALNS 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145 *********************************************99885 PP >> sp|A1REZ6|MURG_SHESW UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.0 0.2 2.6e-38 1.5e-35 1 138 [. 8 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.0 bits; conditional E-value: 2.6e-38 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ +++l ++++ +++ +ak++++e+ sp|A1REZ6|MURG_SHESW 8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LVRKLAAPFKVIRSILQAKAVIAEF 94 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+g+gg+++++ ++aa+lagip++++Eqn+ipg++nkll+r a++vl sp|A1REZ6|MURG_SHESW 95 KPDVVLGMGGFASGPGGVAARLAGIPLVLHEQNAIPGMTNKLLSRIATQVL 145 ***********************************************9986 PP >> sp|A4Y2N6|MURG_SHEPC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.0 0.2 2.6e-38 1.5e-35 1 138 [. 8 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.0 bits; conditional E-value: 2.6e-38 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ +++l ++++ +++ +ak++++e+ sp|A4Y2N6|MURG_SHEPC 8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LVRKLAAPFKVIRSILQAKAVIAEF 94 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+g+gg+++++ ++aa+lagip++++Eqn+ipg++nkll+r a++vl sp|A4Y2N6|MURG_SHEPC 95 KPDVVLGMGGFASGPGGVAARLAGIPLVLHEQNAIPGMTNKLLSRIATQVL 145 ***********************************************9986 PP >> sp|A6T4N3|MURG_KLEP7 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.5 0.1 1.7e-38 9.6e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.5 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + ++ g+e+ i + +l+ k+ + l+ + + ++a+r+a++i+k+++ sp|A6T4N3|MURG_KLEP7 9 MVMAGGTGGHVFPGLAVAHHLMDQGWQVRwLGTADRMEADLvPKNGIEIDFIRIS-GLRGKG-IKAQLLAPVRIFNAWRQARAIMKRFQ 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|A6T4N3|MURG_KLEP7 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIAKKVM 145 **********************************************9986 PP >> sp|B5RH64|MURG_SALG2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.3 2.3e-38 1.3e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.3e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|B5RH64|MURG_SALG2 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+ sp|B5RH64|MURG_SALG2 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145 *********************************************99885 PP >> sp|A8ALK6|MURG_CITK8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.1 0.2 1.1e-38 6.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 128.1 bits; conditional E-value: 1.1e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|A8ALK6|MURG_CITK8 9 MVMAGGTGGHVFPGLAVAHHLMDQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKQFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|A8ALK6|MURG_CITK8 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATTVM 145 *********************************************99885 PP >> sp|Q57TD0|MURG_SALCH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.3 2.3e-38 1.3e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.3e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|Q57TD0|MURG_SALCH 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+ sp|Q57TD0|MURG_SALCH 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145 *********************************************99885 PP >> sp|A6WID1|MURG_SHEB8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.4 0.2 3.9e-38 2.2e-35 1 138 [. 8 145 .. 8 146 .. 0.98 2 ? 2.3 0.0 8 4.5e+03 54 116 .. 287 356 .. 254 360 .. 0.67 Alignments for each domain: == domain 1 score: 126.4 bits; conditional E-value: 3.9e-38 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ +++l ++++ +++ +ak++++e+ sp|A6WID1|MURG_SHEB8 8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LIRKLAAPFKVVRSILQAKAVIAEF 94 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+g+gg+++++ ++aa+lagip++++Eqn+ipg++nkll+r a++vl sp|A6WID1|MURG_SHEB8 95 KPDVVLGMGGFASGPGGVAARLAGIPLVLHEQNAIPGMTNKLLSRIATQVL 145 ***********************************************9986 PP == domain 2 score: 2.3 bits; conditional E-value: 8 -............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHH CS Glyco_transf_28 54 d............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanv 116 v++ a + +++++++ + + k l + + ++++g+++ d+a++ a+ + +++ + sp|A6WID1|MURG_SHEB8 287 AvddhqtrngqvlVEAGAAFLLPQAILDVNKL-----AGKLQLLANDRTELARMGQRARDVAVLDATEQVAAVCI 356 15555555555555555555566666666666.....4444455555677889************9999988765 PP >> sp|A9KY29|MURG_SHEB9 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.4 0.2 3.9e-38 2.2e-35 1 138 [. 8 145 .. 8 146 .. 0.98 2 ? 2.3 0.0 8 4.5e+03 54 116 .. 287 356 .. 254 360 .. 0.67 Alignments for each domain: == domain 1 score: 126.4 bits; conditional E-value: 3.9e-38 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ +++l ++++ +++ +ak++++e+ sp|A9KY29|MURG_SHEB9 8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LIRKLAAPFKVVRSILQAKAVIAEF 94 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+g+gg+++++ ++aa+lagip++++Eqn+ipg++nkll+r a++vl sp|A9KY29|MURG_SHEB9 95 KPDVVLGMGGFASGPGGVAARLAGIPLVLHEQNAIPGMTNKLLSRIATQVL 145 ***********************************************9986 PP == domain 2 score: 2.3 bits; conditional E-value: 8 -............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHH CS Glyco_transf_28 54 d............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanv 116 v++ a + +++++++ + + k l + + ++++g+++ d+a++ a+ + +++ + sp|A9KY29|MURG_SHEB9 287 AvddhqtrngqvlVEAGAAFLLPQAILDVNKL-----AGKLQLLANDRTELARMGQRARDVAVLDATEQVAAVCI 356 15555555555555555555566666666666.....4444455555677889************9999988765 PP >> sp|B8E698|MURG_SHEB2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.4 0.2 3.9e-38 2.2e-35 1 138 [. 8 145 .. 8 146 .. 0.98 2 ? 2.3 0.0 8 4.5e+03 54 116 .. 287 356 .. 254 360 .. 0.67 Alignments for each domain: == domain 1 score: 126.4 bits; conditional E-value: 3.9e-38 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ +++l ++++ +++ +ak++++e+ sp|B8E698|MURG_SHEB2 8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LIRKLAAPFKVVRSILQAKAVIAEF 94 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+g+gg+++++ ++aa+lagip++++Eqn+ipg++nkll+r a++vl sp|B8E698|MURG_SHEB2 95 KPDVVLGMGGFASGPGGVAARLAGIPLVLHEQNAIPGMTNKLLSRIATQVL 145 ***********************************************9986 PP == domain 2 score: 2.3 bits; conditional E-value: 8 -............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHH CS Glyco_transf_28 54 d............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanv 116 v++ a + +++++++ + + k l + + ++++g+++ d+a++ a+ + +++ + sp|B8E698|MURG_SHEB2 287 AvddhqtrngqvlVEAGAAFLLPQAILDVNKL-----AGKLQLLANDRTELARMGQRARDVAVLDATEQVAAVCI 356 15555555555555555555566666666666.....4444455555677889************9999988765 PP >> sp|B5Y1U7|MURG_KLEP3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.5 0.1 1.7e-38 9.6e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.5 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + ++ g+e+ i + +l+ k+ + l+ + + ++a+r+a++i+k+++ sp|B5Y1U7|MURG_KLEP3 9 MVMAGGTGGHVFPGLAVAHHLMDQGWQVRwLGTADRMEADLvPKNGIEIDFIRIS-GLRGKG-IKAQLLAPVRIFNAWRQARAIMKRFQ 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B5Y1U7|MURG_KLEP3 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIAKKVM 145 **********************************************9986 PP >> sp|A3CZM1|MURG_SHEB5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.4 0.2 3.9e-38 2.2e-35 1 138 [. 8 145 .. 8 146 .. 0.98 2 ? 2.2 0.0 8.1 4.5e+03 54 116 .. 287 356 .. 255 360 .. 0.67 Alignments for each domain: == domain 1 score: 126.4 bits; conditional E-value: 3.9e-38 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ +++l ++++ +++ +ak++++e+ sp|A3CZM1|MURG_SHEB5 8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LIRKLAAPFKVVRSILQAKAVIAEF 94 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+g+gg+++++ ++aa+lagip++++Eqn+ipg++nkll+r a++vl sp|A3CZM1|MURG_SHEB5 95 KPDVVLGMGGFASGPGGVAARLAGIPLVLHEQNAIPGMTNKLLSRIATQVL 145 ***********************************************9986 PP == domain 2 score: 2.2 bits; conditional E-value: 8.1 -............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHH CS Glyco_transf_28 54 d............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanv 116 v++ a + +++++++ + + k l + + ++++g+++ d+a++ a+ + +++ + sp|A3CZM1|MURG_SHEB5 287 AvddhqtrngqvlVEAGAAFLLPQAILDVNKL-----AGKLQLLANDRTELARMGQRARDVAVLDATEQVAAVCI 356 15555555555555555555566666666666.....4444455555677889************9999988765 PP >> sp|Q7U336|MURG_HAEDU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.7 0.1 1.6e-38 8.9e-36 2 138 .. 6 142 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 127.7 bits; conditional E-value: 1.6e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+a+eLq++G++++ l+t++++e+++ ++++++++ i++ +l+ k+ l+ +k ++ lka+ +a i+k+++ sp|Q7U336|MURG_HAEDU 6 LIMAGGTGGHVFPAIAVAQELQKQGWQICwLGTKDRMEAELvPQYNIPIEFIQIS-GLKGKG-VLALIKAPFTILKAVLQALNIIKKYR 92 789****************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++ +iaa+l+++p++++Eqn+i+gl+n +l++ a++vl sp|Q7U336|MURG_HAEDU 93 PDAVLGMGGYVSGPGGIAARLCNVPIVLHEQNAIAGLTNVWLAKIAKRVL 142 ***********************************************997 PP >> sp|B7VJ03|MURG_VIBSL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.5 0.1 8.7e-39 4.9e-36 2 138 .. 8 144 .. 7 145 .. 0.98 Alignments for each domain: == domain 1 score: 128.5 bits; conditional E-value: 8.7e-39 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++Lq++G+e+r l+t +++e+ + +++g+e+ i+++ +l+ ++ +k +k +++ +a+ +a++++k ++ sp|B7VJ03|MURG_VIBSL 8 LVMAGGTGGHVFPGLAVAKKLQQQGWEIRwLGTADRMEADLvPKHGIEIDFIKVK-GLRGQG-VSKLIKAPFQIINAILQARRHIKAWQ 94 789*************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a++v+ sp|B7VJ03|MURG_VIBSL 95 PDVVLGMGGYVSGPGGIAAWLSGIPVVLHEQNAVAGLTNQWLSKIAKKVF 144 ***********************************************997 PP >> sp|Q0I1D3|MURG_HAES1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.2 0.1 1.1e-38 6e-36 2 138 .. 8 144 .. 7 145 .. 0.98 Alignments for each domain: == domain 1 score: 128.2 bits; conditional E-value: 1.1e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+a+ Lq+++++++ l+t +++e+++ +++g++++ i++ +l+ k+ ++ lk ++ l+a+ +a++i+k+++ sp|Q0I1D3|MURG_HAES1 8 LVMAGGTGGHVFPAIAVAQYLQKQDWDICwLGTRDRMEAKLvPKHGIPIEFIQIS-GLRGKG-LITLLKAPFVILRAVLQARKIIKKYQ 94 789****************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+l++ip++v+Eqn++ gl+n ll++ a++vl sp|Q0I1D3|MURG_HAES1 95 PDVVLGMGGYVSGPGGVAAKLCNIPVVVHEQNAVLGLTNSLLAKIATRVL 144 ***********************************************997 PP >> sp|B5FI72|MURG_SALDC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.3 2.3e-38 1.3e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.3e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|B5FI72|MURG_SALDC 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+ sp|B5FI72|MURG_SALDC 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145 *********************************************99885 PP >> sp|A2RJQ4|MURG_LACLM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.0 2.4e-38 1.3e-35 1 138 [. 3 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.4e-38 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+A+ + L++++++ + ++t++gle+++ + ag++ ++++++ +l+++l s++++k++++++k++ +ak+i+k sp|A2RJQ4|MURG_LACLM 3 IIITGGGTGGHIYPALAFLKYLKQEEPDTEvlyIGTKKGLESKIvPRAGIQLKTVDIQ-GLRRSL-SPQNIKTAYKFFKSVSDAKKIMK 89 689*******************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpdvv+g+ggyva+++++aa+ ++ip++++E n+ pg++n++l++++++++ sp|A2RJQ4|MURG_LACLM 90 DFKPDVVLGTGGYVAGPVVFAAAQLKIPTIIHEGNSFPGITNRFLAKKVDRIA 142 **************************************************987 PP >> sp|Q02XY0|MURG_LACLS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.0 2.4e-38 1.3e-35 1 138 [. 3 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.4e-38 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+A+ + L++++++ + ++t++gle+++ + ag++ ++++++ +l+++l s++++k++++++k++ +ak+i+k sp|Q02XY0|MURG_LACLS 3 IIITGGGTGGHIYPALAFLKYLKQEEPDTEvlyIGTKKGLESKIvPRAGIQLKTVDIQ-GLRRSL-SPQNIKTAYKFFKSVSDAKKIMK 89 689*******************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpdvv+g+ggyva+++++aa+ ++ip++++E n+ pg++n++l++++++++ sp|Q02XY0|MURG_LACLS 90 DFKPDVVLGTGGYVAGPVVFAAAQLKIPTIIHEGNSFPGITNRFLAKKVDRIA 142 **************************************************987 PP >> sp|B7MNU9|MURG_ECO81 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|B7MNU9|MURG_ECO81 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B7MNU9|MURG_ECO81 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|B7NHJ6|MURG_ECO7I UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|B7NHJ6|MURG_ECO7I 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B7NHJ6|MURG_ECO7I 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|B7UIE0|MURG_ECO27 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|B7UIE0|MURG_ECO27 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B7UIE0|MURG_ECO27 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|Q0TLP9|MURG_ECOL5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|Q0TLP9|MURG_ECOL5 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|Q0TLP9|MURG_ECOL5 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|Q8FL64|MURG_ECOL6 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|Q8FL64|MURG_ECOL6 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|Q8FL64|MURG_ECOL6 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|A1A7D5|MURG_ECOK1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|A1A7D5|MURG_ECOK1 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|A1A7D5|MURG_ECOK1 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|B7MAL3|MURG_ECO45 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|B7MAL3|MURG_ECO45 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B7MAL3|MURG_ECO45 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|Q1RGA5|MURG_ECOUT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|Q1RGA5|MURG_ECOUT 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|Q1RGA5|MURG_ECOUT 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|Q6D0I3|MURG_ERWCT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.2 0.2 2.2e-38 1.2e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.2 bits; conditional E-value: 2.2e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + l+ + + ++a+r+a++i+++++ sp|Q6D0I3|MURG_ERWCT 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IRAQLSAPIRIFQAVRQARAIMRRYQ 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+l+gip++++Eqngi+gl+n++l+ a++vl sp|Q6D0I3|MURG_ERWCT 96 PDVVLGMGGYVSGPGGLAAWLCGIPVVLHEQNGIAGLTNRWLSHIAKKVL 145 **********************************************9997 PP >> sp|B5YZC6|MURG_ECO5E UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|B5YZC6|MURG_ECO5E 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B5YZC6|MURG_ECO5E 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|Q8X9Y8|MURG_ECO57 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|Q8X9Y8|MURG_ECO57 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|Q8X9Y8|MURG_ECO57 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|A7ZHI1|MURG_ECO24 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|A7ZHI1|MURG_ECO24 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|A7ZHI1|MURG_ECO24 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|B1LG27|MURG_ECOSM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|B1LG27|MURG_ECOSM 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B1LG27|MURG_ECOSM 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|B6HZ67|MURG_ECOSE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|B6HZ67|MURG_ECOSE 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B6HZ67|MURG_ECOSE 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|B7M133|MURG_ECO8A UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|B7M133|MURG_ECO8A 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B7M133|MURG_ECO8A 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|B7N7W3|MURG_ECOLU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|B7N7W3|MURG_ECOLU 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B7N7W3|MURG_ECOLU 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|Q326E5|MURG_SHIBS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|Q326E5|MURG_SHIBS 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|Q326E5|MURG_SHIBS 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|Q3Z5R9|MURG_SHISS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|Q3Z5R9|MURG_SHISS 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|Q3Z5R9|MURG_SHISS 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|Q32K02|MURG_SHIDS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|Q32K02|MURG_SHIDS 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|Q32K02|MURG_SHIDS 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|B2U295|MURG_SHIB3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|B2U295|MURG_SHIB3 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B2U295|MURG_SHIB3 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|B1IR88|MURG_ECOLC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|B1IR88|MURG_ECOLC 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B1IR88|MURG_ECOLC 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|B1XC67|MURG_ECODH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|B1XC67|MURG_ECODH 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B1XC67|MURG_ECODH 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|C4ZRI5|MURG_ECOBW UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|C4ZRI5|MURG_ECOBW 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|C4ZRI5|MURG_ECOBW 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|P17443|MURG_ECOLI UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|P17443|MURG_ECOLI 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|P17443|MURG_ECOLI 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|A7ZW42|MURG_ECOHS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.3 1.7e-38 9.4e-36 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|A7ZW42|MURG_ECOHS 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|A7ZW42|MURG_ECOHS 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|A4TQ83|MURG_YERPP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 125.8 0.3 6e-38 3.4e-35 2 138 .. 9 145 .. 8 146 .. 0.98 2 ? 2.8 0.0 5.3 3e+03 38 116 .. 266 350 .. 254 356 .] 0.56 Alignments for each domain: == domain 1 score: 125.8 bits; conditional E-value: 6e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++ GT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i++ +l+ k+ ++ l+ + + ++a+r+a +i+++++ sp|A4TQ83|MURG_YERPP 9 MVMAAGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEASLvPQHGIEIDFIKIS-GLRGKG-LMAQLTAPIRIYRAVRQAQKIMRDYQ 95 57899**************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p+vv+g+ggyv+++ ++aa+l+g+p++++Eqngi+gl+n++l+r a++vl sp|A4TQ83|MURG_YERPP 96 PNVVLGMGGYVSGPGGLAAWLCGVPVVLHEQNGIAGLTNRWLARIAKKVL 145 ***********************************************997 PP == domain 2 score: 2.8 bits; conditional E-value: 5.3 HHHHHH---EEEE----........................S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS Glyco_transf_28 38 eefveeagleavpigpd........................vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadl 102 +++v++agl+a ++ + ++ + ++ +l+++ ++++++++++ + sp|A4TQ83|MURG_YERPP 266 VSEVAAAGLPAIFVPFQhkdrqqywnalplekagaakiieqP----------------QF--TATSVSSLLASWDRATLLSMAERARSV 336 567899****99999998888666655433333333332222................22..334444555555555555555555555 PP E--HHHHHHHHHHH CS Glyco_transf_28 103 aliaallagipanv 116 a+ a+ + ++ +v sp|A4TQ83|MURG_YERPP 337 AIPDATERVAAEVV 350 55555555554444 PP >> sp|Q9CF92|MURG_LACLA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.1 0.0 4.7e-38 2.6e-35 1 138 [. 3 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 126.1 bits; conditional E-value: 4.7e-38 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+A+ + L + +++ + ++t++gle+++ ++ag++ ++++++ +l+++l s+++lk++++++k++ +ak+i+k sp|Q9CF92|MURG_LACLA 3 IIITGGGTGGHIYPALAFLKYLEKVEPDTEvlyIGTKKGLEAKIvPQAGIKLKTVDIQ-GLRRSL-SPQNLKTAYKFFKSVSDAKKIMK 89 689***************************99**************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 e+kpdvv+g+ggyva+++++aa+ ++ip++++E n+ pg++n++l++++++++ sp|Q9CF92|MURG_LACLA 90 EFKPDVVLGTGGYVAGPVVYAAAQLKIPTIIHEGNSFPGITNRFLAKKVDRIA 142 **************************************************987 PP >> sp|B5R2M4|MURG_SALEP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 125.8 0.2 5.8e-38 3.2e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 125.8 bits; conditional E-value: 5.8e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+ +G++Vr l+t +++e+ + +++g+++ i + +l+ k+ + l +++ ++a+r+a++i+k++k sp|B5R2M4|MURG_SALEP 9 MVMAGGTGGHVFPGLAVAHHLMSQGWQVRwLGTADRMEADLvPKHGIDIDFIRIS-GLRGKG-VKALLAAPLRIFNAWRQARAIMKRFK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n++l++ a++v+ sp|B5R2M4|MURG_SALEP 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNQWLAKIATTVM 145 *********************************************99885 PP >> sp|Q0T8A7|MURG_SHIF8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.2 2.3e-38 1.3e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.3e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a+ L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|Q0T8A7|MURG_SHIF8 9 MVMAGGTGGHVFPGLAVAHYLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|Q0T8A7|MURG_SHIF8 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|Q83MN4|MURG_SHIFL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.2 2.3e-38 1.3e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.3e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a+ L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r+a++i+k +k sp|Q83MN4|MURG_SHIFL 9 MVMAGGTGGHVFPGLAVAHYLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRQARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|Q83MN4|MURG_SHIFL 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|Q8CX35|MURG_SHEON UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 124.8 0.2 1.2e-37 6.6e-35 1 138 [. 8 145 .. 8 146 .. 0.98 2 ? 3.8 0.1 2.6 1.5e+03 54 117 .. 285 357 .. 255 361 .. 0.68 Alignments for each domain: == domain 1 score: 124.8 bits; conditional E-value: 1.2e-37 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ +++l ++++ +++ +ak++++e+ sp|Q8CX35|MURG_SHEON 8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LVRKLAAPFKVVRSILQAKAVIAEF 94 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+g+gg+++++ ++aa+lag+p++++Eqn+ipg++nkll+r a +vl sp|Q8CX35|MURG_SHEON 95 KPDVVLGMGGFASGPGGVAAKLAGVPLVLHEQNAIPGMTNKLLSRIASQVL 145 *********************************************999886 PP == domain 2 score: 3.8 bits; conditional E-value: 2.6 -..............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHH CS Glyco_transf_28 54 d..............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanva 117 v++ a + +++++++ + + ++l++++ + ++++g+++ d+a++ a+ + +++ +a sp|Q8CX35|MURG_SHEON 285 PhavddhqtrnaqvlVEAGAAFLLPQAILDVNKL----VSKLQLLANDR-AELARMGQRARDVAVLDATEQVAQVCIA 357 3446666666666665666666677777777777....44445555555.6678***************999998876 PP >> sp|B8DBP8|MURG_LISMH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.6 0.0 1.7e-38 9.4e-36 1 138 [. 3 142 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 127.6 bits; conditional E-value: 1.7e-38 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+++ggGT+G+v+Pa+Al reL++ +e + ++t++gle+ + + +g+++++i++ +++++l sl+++k++ ++l + +k+k+il+ sp|B8DBP8|MURG_LISMH 3 VAISGGGTGGHVYPALALIRELKKVHPEAEflyIGTEKGLEAGIvKREGIPFEAIEIT-GFKRSL-SLENIKTVMRFLSGAKKSKQILR 89 6899******************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpdvv+g+ggyv +++++aa++++ip+ ++Eqn+++gl+nk+l+r+ ++v+ sp|B8DBP8|MURG_LISMH 90 DFKPDVVIGTGGYVCGPVVYAAAKLKIPTLIHEQNSVAGLTNKFLSRYTDKVA 142 **************************************************997 PP >> sp|A0AKD5|MURG_LISW6 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.4 0.0 1.9e-38 1.1e-35 1 138 [. 3 142 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 127.4 bits; conditional E-value: 1.9e-38 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+++ggGT+G+v+Pa+A+ reL++ +e + ++t++gle+ + + +g+++++i++ +++++l sl+++k++ ++l + +k+k+il+ sp|A0AKD5|MURG_LISW6 3 VAISGGGTGGHVYPALAFIRELKKLHPEAEflyIGTEKGLEADIvKREGIPFESIEIT-GFKRSL-SLENVKTIMRFLSGAKKSKQILR 89 6899******************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpdvv+g+ggyv +++++aa++++ip+ ++Eqn+++gl+nk+l+r+ ++v+ sp|A0AKD5|MURG_LISW6 90 DFKPDVVIGTGGYVCGPVVYAAAKLKIPTLIHEQNSVAGLTNKFLSRYTDKVA 142 **************************************************997 PP >> sp|Q9ZBA5|MURG_STRCO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 1.0 2.3e-38 1.3e-35 1 138 [. 3 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.3e-38 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G++ePa+Ala++L+r+++ V l+t++gle+++ +e+g+e i++ +l++k +++ ++ + + + +++++++il+ sp|Q9ZBA5|MURG_STRCO 3 VVLAGGGTAGHIEPALALADALRRQDPTVGitaLGTERGLETRLvPERGYELALIPAV-PLPRKP-TPELITVPGRLRGTIKATEQILE 89 79****************************9***************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + k+d+v+gfggyva++a++aa+++g+p++v+E+n++pgl+nk+ +r+a +v+ sp|Q9ZBA5|MURG_STRCO 90 RTKADAVAGFGGYVALPAYLAAKRLGVPIVVHEANARPGLANKIGSRYAAQVA 142 *************************************************9987 PP >> sp|Q929Y2|MURG_LISIN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.3 0.0 2.1e-38 1.2e-35 1 138 [. 3 142 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 127.3 bits; conditional E-value: 2.1e-38 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+++ggGT+G+v+Pa+A+ reL++ +e + ++t++gle+ + + +g+++++i++ +++++l sl+++k++ ++l + +k+k+il+ sp|Q929Y2|MURG_LISIN 3 VAISGGGTGGHVYPALAFIRELKKVHPEAEflyIGTEKGLEAGIvKREGIPFESIEIT-GFKRSL-SLENIKTVMRFLSGAKKSKQILR 89 6899******************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 e+kpdvv+g+ggyv +++++aa++++ip+ ++Eqn+i+gl+nk+l+r+ ++v+ sp|Q929Y2|MURG_LISIN 90 EFKPDVVIGTGGYVCGPVVYAAAKLKIPTLIHEQNSIAGLTNKFLSRYTDKVA 142 **************************************************997 PP >> sp|B8F3B6|MURG_HAEPS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.3 0.1 2.1e-38 1.2e-35 2 137 .. 6 141 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 127.3 bits; conditional E-value: 2.1e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+ reLq++G+e+r l+t++++e+ + +++g++++ i++ +l+ k+ + l+ +++ l+a+ +ak+i+ +k sp|B8F3B6|MURG_HAEPS 6 LVMAGGTGGHVFPAIAVVRELQQQGWEIRwLGTKDRMEADLvPKHGIPIEFIQIS-GLKGKG-IKALLTAPFAILRAVLQAKKIINAYK 92 789*************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 pd+v+g+ggyv+++ +iaa+l+g+p++++Eqn++ gl+n +l++ a + sp|B8F3B6|MURG_HAEPS 93 PDAVLGMGGYVSGPGGIAAKLCGVPVILHEQNAVVGLTNVWLSKIARRT 141 *******************************************999876 PP >> sp|Q0HE83|MURG_SHESM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.0 0.2 2.5e-38 1.4e-35 1 138 [. 8 145 .. 8 146 .. 0.99 Alignments for each domain: == domain 1 score: 127.0 bits; conditional E-value: 2.5e-38 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ +++l ++++ +++ +ak++++e+ sp|Q0HE83|MURG_SHESM 8 ILVMAGGTGGHVFPALAVAKYLAQQGWQVRwLGTADRMEARLvPQYGFDIDFIDIK-GVRGNG-LVRKLAAPFKVVRSILQAKAVIAEF 94 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+g+gg+++++ ++aa+lag+p++++Eqn+ipg++nkll+r an+vl sp|Q0HE83|MURG_SHESM 95 KPDVVLGMGGFASGPGGVAAKLAGVPLVLHEQNAIPGMTNKLLSRIANQVL 145 ************************************************986 PP >> sp|C1KWY8|MURG_LISMC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.2 0.0 2.2e-38 1.3e-35 1 138 [. 3 142 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 127.2 bits; conditional E-value: 2.2e-38 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+++ggGT+G+v+Pa+Al reL++ +e + ++t++gle+ + + +g+++++i++ +++++l sl+++k++ ++l + +k+k+il+ sp|C1KWY8|MURG_LISMC 3 VAISGGGTGGHVYPALALIRELKKIHPEAEflyIGTEKGLEAGIvKREGIPFEAIEIT-GFKRSL-SLENIKTVMRFLSGAKKSKQILR 89 6899******************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpdvv+g+ggyv +++++aa++++ip+ ++Eqn+++gl+nk+l+r+ ++v+ sp|C1KWY8|MURG_LISMC 90 DFKPDVVIGTGGYVCGPVVYAAAKLKIPTLIHEQNSVAGLTNKFLSRYTDKVA 142 **************************************************997 PP >> sp|Q71XX8|MURG_LISMF UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.2 0.0 2.2e-38 1.3e-35 1 138 [. 3 142 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 127.2 bits; conditional E-value: 2.2e-38 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+++ggGT+G+v+Pa+Al reL++ +e + ++t++gle+ + + +g+++++i++ +++++l sl+++k++ ++l + +k+k+il+ sp|Q71XX8|MURG_LISMF 3 VAISGGGTGGHVYPALALIRELKKIHPEAEflyIGTEKGLEAGIvKREGIPFEAIEIT-GFKRSL-SLENIKTVMRFLSGAKKSKQILR 89 6899******************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpdvv+g+ggyv +++++aa++++ip+ ++Eqn+++gl+nk+l+r+ ++v+ sp|Q71XX8|MURG_LISMF 90 DFKPDVVIGTGGYVCGPVVYAAAKLKIPTLIHEQNSVAGLTNKFLSRYTDKVA 142 **************************************************997 PP >> sp|A1S2F9|MURG_SHEAM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.1 2.3e-38 1.3e-35 2 138 .. 10 146 .. 9 147 .. 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 2.3e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+ar+L +G+++r l+t +++e+++ +++g ++ i+++ +++ ++ l++l ++++l+++ +a+++++e+k sp|A1S2F9|MURG_SHEAM 10 LVMAGGTGGHVFPALAVARRLASEGWQIRwLGTADRMEARLvPQHGFDIDFIDIQ-GVRGNG-LLRKLAAPFKVLRSVMQARKVIREFK 96 789****************************************************.****99.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+gg+++++ ++aa+l+gip++++Eqn+ipg++nkll+r a++vl sp|A1S2F9|MURG_SHEAM 97 PDVVLGMGGFASGPGGVAAKLCGIPLVLHEQNAIPGMTNKLLSRIATRVL 146 ***********************************************997 PP >> sp|A5UCW8|MURG_HAEIE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.5 0.0 3.5e-38 2e-35 2 137 .. 7 142 .. 6 144 .. 0.97 Alignments for each domain: == domain 1 score: 126.5 bits; conditional E-value: 3.5e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+a++Lq+++++++ l+t++++e+++ +++ ++++ i++ +l+ k+ + + +++ ++a+ +ak+i++e+k sp|A5UCW8|MURG_HAEIE 7 LVMAGGTGGHVFPAIAVAQTLQKQEWDICwLGTKDRMEAQLvPKYDIPIRFIQIS-GLRGKG-IKALFNAPFAIFRAVLQAKKIIQEEK 93 789****************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 pd+v+g+ggyv+++a++aa+l+g+p++++Eqn+i+gl+nkll + a v sp|A5UCW8|MURG_HAEIE 94 PDAVLGMGGYVSGPAGVAAKLCGVPIILHEQNAIAGLTNKLLGKIASCV 142 *****************************************99988776 PP >> sp|Q03QH5|MURG_LACBA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 120.9 0.1 1.9e-36 1.1e-33 2 138 .. 4 142 .. 3 143 .. 0.97 2 ? 4.5 0.0 1.6 8.8e+02 63 130 .. 295 355 .. 267 358 .. 0.70 Alignments for each domain: == domain 1 score: 120.9 bits; conditional E-value: 1.9e-36 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++ggGT+G+++Pa+Al ++L++r+++ +++++gle+++ +++g+++++ ++ +++++l sl+++k+++ +lk++++ak+ +++ sp|Q03QH5|MURG_LACBA 4 MVSGGGTGGHIYPALALIKALKKREPNSAvmyVGSERGLESTIvPAKGIPFQATRIQ-GFKRSL-SLENFKTVYLFLKSVHEAKKMIRQ 90 5899**********************977779*************************.****99.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +kpdvvvg+ggyv++++++aa+++++p+ ++Eqn++ g++n++l+r++++++ sp|Q03QH5|MURG_LACBA 91 FKPDVVVGTGGYVSGAVVYAAARLHVPTLIHEQNSVVGITNRFLSRYVDRIA 142 *************************************************986 PP == domain 2 score: 4.5 bits; conditional E-value: 1.6 -HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS Glyco_transf_28 63 slktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130 + k+ +la + a ei+kea d++ ++ ad+++++++l++ a q+g+p++++++l sp|Q03QH5|MURG_LACBA 295 QTKNANSLATV-----GAAEIIKEA--DLTGETLIAKADQLMTNDALRQDMATASKQLGVPDAADRVL 355 44445555554.....445555554..4777788889**************************99987 PP >> sp|Q8DEL0|MURG_VIBVU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.4 0.2 3.9e-38 2.2e-35 2 138 .. 8 144 .. 7 145 .. 0.98 Alignments for each domain: == domain 1 score: 126.4 bits; conditional E-value: 3.9e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++Lq++G+e+r l+t +++e+++ +++g+++ i+++ +l+ ++ + ++ +++ l+a+++ak+++k+++ sp|Q8DEL0|MURG_VIBVU 8 MVMAGGTGGHVFPGLAVAKKLQQQGWEIRwLGTADRMEAELvPKHGIDIDFIKVK-GLRGQG-IKRLVLAPFQILNAIFQAKAHIKRWQ 94 5899***************************************************.*****9.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a++v+ sp|Q8DEL0|MURG_VIBVU 95 PDAVLGMGGYVSGPGGIAAWLSGIPVVLHEQNAVAGLTNHWLAKIAKKVF 144 ***********************************************996 PP >> sp|Q7MNV1|MURG_VIBVY UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.4 0.2 3.9e-38 2.2e-35 2 138 .. 8 144 .. 7 145 .. 0.98 Alignments for each domain: == domain 1 score: 126.4 bits; conditional E-value: 3.9e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++Lq++G+e+r l+t +++e+++ +++g+++ i+++ +l+ ++ + ++ +++ l+a+++ak+++k+++ sp|Q7MNV1|MURG_VIBVY 8 MVMAGGTGGHVFPGLAVAKKLQQQGWEIRwLGTADRMEAELvPKHGIDIDFIKVK-GLRGQG-IKRLVLAPFQILNAIFQAKAHIKRWQ 94 5899***************************************************.*****9.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a++v+ sp|Q7MNV1|MURG_VIBVY 95 PDAVLGMGGYVSGPGGIAAWLSGIPVVLHEQNAVAGLTNHWLAKIAKKVF 144 ***********************************************996 PP >> sp|Q3IFY0|MURG_PSEHT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.2 0.1 4.4e-38 2.5e-35 1 138 [. 5 142 .. 5 143 .. 0.99 Alignments for each domain: == domain 1 score: 126.2 bits; conditional E-value: 4.4e-38 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +v+++gGT+G+++P +A+a+ L+++G++V ++tp+++e++v +++++++ i+++ +++ ++ + +k ++ +l+a+ +a+++lk++ sp|Q3IFY0|MURG_PSEHT 5 CVVVAGGTGGHIFPGIAVADYLKQQGWQVSwIGTPDRMEATVvPKHNIDINFINVK-GVRGNG-IKRLIKAPFMVLNAILQARKVLKSE 91 6999****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+++ggyv ++ +iaa+++gip++++Eqn+i+g++nk+l+++an+vl sp|Q3IFY0|MURG_PSEHT 92 KPDVVLAMGGYVTGPTGIAAKSLGIPLVIHEQNAIAGMSNKWLAKFANRVL 142 *************************************************97 PP >> sp|B7LFW0|MURG_ECO55 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 125.6 0.4 6.7e-38 3.8e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 125.6 bits; conditional E-value: 6.7e-38 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+e+ i + +l+ k+ + + +++ ++a+r a++i+k +k sp|B7LFW0|MURG_ECO55 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTADRMEADLvPKHGIEIDFIRIS-GLRGKG-IKALIAAPLRIFNAWRHARAIMKAYK 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+nk+l++ a++v+ sp|B7LFW0|MURG_ECO55 96 PDVVLGMGGYVSGPGGLAAWSLGIPVVLHEQNGIAGLTNKWLAKIATKVM 145 ***********************************************986 PP >> sp|B1KKX7|MURG_SHEWM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.3 0.1 4.2e-38 2.4e-35 1 138 [. 10 147 .. 10 148 .. 0.98 Alignments for each domain: == domain 1 score: 126.3 bits; conditional E-value: 4.2e-38 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ +++l ++++l+++ +a+ ++ke+ sp|B1KKX7|MURG_SHEWM 10 ILIMAGGTGGHVFPALAVAKYLSKQGWKVRwLGTAERMEARLvPQHGFDIDFIDIK-GVRGNG-VVRKLAAPFKVLRSITQARVVIKEF 96 689*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +pdvv+g+gg+++++ ++aa+l+gip++++Eqn+ipg++nk+l+r a +vl sp|B1KKX7|MURG_SHEWM 97 QPDVVLGMGGFASGPGGVAARLSGIPLVLHEQNAIPGMTNKILSRIASQVL 147 *********************************************999886 PP >> sp|Q49929|Y2348_MYCLE Uncharacterized glycosyltransferase ML2348 OS=Mycobacterium leprae GN=ML2348 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 125.5 0.1 7.4e-38 4.2e-35 1 138 [. 3 141 .. 3 142 .. 0.93 Alignments for each domain: == domain 1 score: 125.5 bits; conditional E-value: 7.4e-38 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.............................S---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.............................vklwa 59 ++la+ G+rGdveP++Al+ eLqrrGheVr+++pp++ +fve+agl+av++gpd ++wa sp|Q49929|Y2348_MYCLE 3 FTLAASGSRGDVEPFAALGLELQRRGHEVRIGVPPDMLRFVESAGLAAVAYGPDtqeflardtysqwrqwwkilppikalqqlRQAWA 90 78*************************************************************8888888888888888888888888 PP --.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 60 kleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++ + lk+la+g adl++++ ++g++anvaE++gip+ v++++p r+ng++ sp|Q49929|Y2348_MYCLE 91 --DMATDLKSLADG--------------------------ADLVMTGVVYQGVVANVAEYYGIPFGVLHFVPARVNGKI 141 ..788888888888..........................************************************987 PP >> sp|Q7N147|MURG_PHOLL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 124.3 0.2 1.7e-37 9.4e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 124.3 bits; conditional E-value: 1.7e-37 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++V l+t +++e+ + +++g++++ i++ +l+ k+ + l + + +ka+r+ak+i+++++ sp|Q7N147|MURG_PHOLL 9 MVMAGGTGGHVFPGLAVAHHLKDQGWDVLwLGTADRMEADLvPKHGIDIEFIQIS-GLRGKG-IKALLAAPVRIFKAIRQAKAIMRRYQ 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ +iaa+ +g+p++++Eqngi+gl+n++l++ a++vl sp|Q7N147|MURG_PHOLL 96 PDVVLGMGGYVSGPGGIAAWMCGVPVVLHEQNGIAGLTNRWLAKIATTVL 145 **********************************************9986 PP >> sp|A8H984|MURG_SHEPA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 124.6 0.1 1.4e-37 7.8e-35 1 138 [. 10 147 .. 10 148 .. 0.98 Alignments for each domain: == domain 1 score: 124.6 bits; conditional E-value: 1.4e-37 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ +++l +++ l+++ +a++++k++ sp|A8H984|MURG_SHEPA 10 ILIMAGGTGGHVFPALAVAKYLSQQGWKVRwLGTAERMEARLvPQHGFDIDFIDIK-GVRGNG-LMRKLAAPFKILRSVMQARAVIKSF 96 689*****************************************************.****99.9************************ PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+g+gg+++++ ++aa+l+gip++++Eqn+ipg++n+ll+r a vl sp|A8H984|MURG_SHEPA 97 KPDVVMGMGGFASGPGGVAAKLSGIPLVLHEQNAIPGMTNRLLSRIASEVL 147 *********************************************998875 PP >> sp|Q820F6|MURG_STRAW UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 125.0 0.7 1e-37 5.7e-35 1 138 [. 3 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 125.0 bits; conditional E-value: 1e-37 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G++ePa+Ala++L+r+++ V l+t++gle+++ +e+g++ i++ +l++k +++ ++ + + + ++++a++il+ sp|Q820F6|MURG_STRAW 3 VVLAGGGTAGHIEPALALADALRRQDPTVGitaLGTERGLETRLvPERGYDLALIPAV-PLPRKP-TPELITVPGRLRGTIKAAEQILE 89 79****************************9***************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + k+d+vvgfggyva++ ++aa+++g+p++++E+n++pgl+nk+ +r+a +v+ sp|Q820F6|MURG_STRAW 90 RTKADAVVGFGGYVALPGYLAAKRLGVPIVIHEANARPGLANKIGSRYAAQVA 142 *************************************************9987 PP >> sp|Q1WTA0|MURG_LACS1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 123.3 0.0 3.4e-37 1.9e-34 2 138 .. 4 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 123.3 bits; conditional E-value: 3.4e-37 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++ggGT+G+++Pa+Al ++ ++++++ + ++t++gle+++ ++ag++ ++i+++ +++++l sl+++k+++ +lk++++ k+i+++ sp|Q1WTA0|MURG_LACS1 4 LISGGGTGGHIYPALALIEAIKQKEPDSEilyVGTHKGLESRIvPSAGVPLKTIKIQ-GFKRSL-SLENFKTVYLFLKSVHDCKKIIRD 90 789*************************999**************************.****99.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +kpdvvvg+ggyv +++++aa++ +ip++v+Eqn+++g++nk+l+r++++v sp|Q1WTA0|MURG_LACS1 91 FKPDVVVGTGGYVCGAVVYAAARMKIPTFVHEQNSVAGVTNKFLSRFVDKVG 142 *************************************************986 PP >> sp|Q9X4H4|MURG_STRCU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 124.6 0.5 1.4e-37 7.7e-35 1 137 [. 3 141 .. 3 142 .. 0.99 Alignments for each domain: == domain 1 score: 124.6 bits; conditional E-value: 1.4e-37 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G++ePa+Ala++L+r+++ V l+t++gle+++ +e+g+e i++ +l++k +++ ++ + + + ++++a++il+ sp|Q9X4H4|MURG_STRCU 3 VVLAGGGTAGHIEPALALADALRRQDPTVGitaLGTERGLETRLvPERGYELALIPAV-PLPRKP-TPELITVPGRLRGTIKAAEQILE 89 79****************************9***************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 + k+d vvgfggyva++ ++aa+++g+p++++E+n++pgl+nk+ +r+a +v sp|Q9X4H4|MURG_STRCU 90 RTKADCVVGFGGYVALPGYLAAKRLGVPIVIHEANARPGLANKIGSRYAARV 141 *************************************************998 PP >> sp|Q12SC6|MURG_SHEDO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 124.7 0.2 1.3e-37 7.1e-35 1 138 [. 10 147 .. 10 148 .. 0.99 Alignments for each domain: == domain 1 score: 124.7 bits; conditional E-value: 1.3e-37 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ l+tl +++ +++ +a+e+++e+ sp|Q12SC6|MURG_SHEDO 10 ILIMAGGTGGHVFPALAVAKNLAEKGWQVRwLGTADRMEARLvPQHGFDIDFIDIQ-GVRGNG-LLRTLAAPFKIMRSIMQAREVIAEF 96 689*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kp+v++g+gg+++++ ++a +lagip++++Eqn+ipg++nkll+r a++vl sp|Q12SC6|MURG_SHEDO 97 KPQVILGMGGFASGPGGVAGRLAGIPLVLHEQNAIPGMTNKLLARIATKVL 147 ************************************************997 PP >> sp|P57817|MURG_PASMU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 125.0 0.2 1.1e-37 6e-35 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 125.0 bits; conditional E-value: 1.1e-37 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+a+ Lq++G++++ l+t +++e+++ ++++++++ i++ +l+ k+ + l+ +++ ++a+ +a++i+k ++ sp|P57817|MURG_PASMU 9 LVMAGGTGGHVFPAIAVAQYLQQQGWDICwLGTADRMEAQLvPKHHIPIQFIQIS-GLRGKG-IKALLSAPFSIFRAILQARKIIKAYQ 95 789****************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p++v+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n +l++ a +vl sp|P57817|MURG_PASMU 96 PHAVLGMGGYVSGPGGIAAKLCGIPVILHEQNAVAGLTNSWLAKIARRVL 145 *********************************************99986 PP >> sp|Q87SG4|MURG_VIBPA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 124.2 0.2 1.9e-37 1.1e-34 2 138 .. 8 144 .. 7 145 .. 0.98 Alignments for each domain: == domain 1 score: 124.2 bits; conditional E-value: 1.9e-37 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++Lq++G+e+r l+t +++e+ + +++g+e+ i+++ +l+ ++ + l +++ +a+ +a++++k+++ sp|Q87SG4|MURG_VIBPA 8 MVMAGGTGGHVFPGLAVAKQLQEQGWEIRwLGTADRMEADLvPKHGIEIDFIKVK-GLRGQG-VKRLLAAPFQIINAIMQARAHMKRWQ 94 5899************************************99*************.****99.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a++v+ sp|Q87SG4|MURG_VIBPA 95 PDAVLGMGGYVSGPGGIAAWLSGIPVVLHEQNAVAGLTNQWLSKIAKKVF 144 ***********************************************997 PP >> sp|B0TQN7|MURG_SHEHH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 123.7 0.1 2.5e-37 1.4e-34 1 138 [. 10 147 .. 10 148 .. 0.98 Alignments for each domain: == domain 1 score: 123.7 bits; conditional E-value: 2.5e-37 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ +++l +++ +++ +a++++k++ sp|B0TQN7|MURG_SHEHH 10 ILIMAGGTGGHVFPALAVAKYLSQQGWKVRwLGTAERMEARLvPQHGFDIDFIDIK-GVRGNG-LMRKLAAPFKIIRSVMQARAVIKKF 96 689*****************************************************.****99.99*********************** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kp+vv+g+gg+++++ ++aa+l+gip++++Eqn+ipg++n+ll+r a vl sp|B0TQN7|MURG_SHEHH 97 KPHVVMGMGGFASGPGGVAAKLSGIPLVLHEQNAIPGMTNRLLSRIASEVL 147 *********************************************998875 PP >> sp|C4L5U5|MURG_EXISA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 123.5 0.0 3e-37 1.7e-34 1 138 [. 3 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 123.5 bits; conditional E-value: 3e-37 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+Al ++L++r ++ ++t++gle+ + + ag+++++i++ +l+++l sl+++k+++ +lka+r++k+ ++ sp|C4L5U5|MURG_EXISA 3 IMISGGGTGGHIYPALALIETLKKRHPDLQvqyIGTENGLEADLvPRAGVPFKSIQIA-GLKRSL-SLENVKTAYWFLKAVRALKKDMA 89 6799***********************99888***********99*************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +kpdvv+g+gg+v++++++ a +gip++++Eqn+ipgl+nk+l+++a++v+ sp|C4L5U5|MURG_EXISA 90 AFKPDVVIGTGGFVSGPVVYTAQQLGIPTILHEQNSIPGLTNKFLSKKADRVA 142 **************************************************997 PP >> sp|A9M2H3|MURG_NEIM0 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 124.0 0.1 2.1e-37 1.2e-34 1 138 [. 6 143 .. 6 144 .. 0.99 Alignments for each domain: == domain 1 score: 124.0 bits; conditional E-value: 2.1e-37 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++l++gGT+G+++Pa+A+a+ L++rGh+V+ l++++ +ee++ +++g+ ++++++ +++ ++ ++l+ ++ ++++r+a +i++++ sp|A9M2H3|MURG_NEIM0 6 FMLMAGGTGGHIFPALAVADSLRARGHHVIwLGSKDSMEERIvPQYGIRLETLAIK-GVRGNG-IKRKLMLPFTLYQTVREAQRIIRKH 92 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + v+gfgg+v + ++aa+l+g+p++++Eqn+++gl+n++l+r+a++vl sp|A9M2H3|MURG_NEIM0 93 RVECVIGFGGFVTFPGGLAAKLLGVPIVIHEQNAVAGLSNRHLSRWAKRVL 143 *************************************************97 PP >> sp|Q6LMF6|MURG_PHOPR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 124.1 0.2 2e-37 1.1e-34 2 138 .. 8 144 .. 7 145 .. 0.98 Alignments for each domain: == domain 1 score: 124.1 bits; conditional E-value: 2e-37 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++Lq++G+e+r l+t +++e+ + +++g+e+ i+++ +l+ ++ +++l +++ a+ +a++ +k ++ sp|Q6LMF6|MURG_PHOPR 8 LVMAGGTGGHVFPGLAVAKKLQQEGWEIRwLGTADRMEADLvPKHGIEIDFIKVK-GLRGQG-IIRMLAAPFKIVGAILQARKYIKAWQ 94 789*************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ +iaa+l+g+p++++Eqn+++gl+n++l+r a +vl sp|Q6LMF6|MURG_PHOPR 95 PDVVLGMGGYVSGPGGIAAWLSGVPVVLHEQNAVAGLTNQWLSRIAAKVL 144 **********************************************9986 PP >> sp|Q5E2Q0|MURG_VIBF1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 123.5 0.1 3.1e-37 1.7e-34 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 123.5 bits; conditional E-value: 3.1e-37 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++Lq +G+e+r l+t +++e+ + +++g+e+ i+++ +l+ ++ k + +++ l a+ +ak+++k ++ sp|Q5E2Q0|MURG_VIBF1 9 LVMAGGTGGHVFPGLAVAKQLQSEGWEIRwLGTADRMEADLvPKHGIEIDFIKVK-GLRGQG-LKKLIAAPFQILGAISQAKKHIKAWQ 95 789*************************************99*************.****99.9999********************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a++v+ sp|Q5E2Q0|MURG_VIBF1 96 PDVVLGMGGYVSGPGGIAAWLSGIPVVLHEQNAVAGLTNQWLSKIAKRVF 145 ***********************************************997 PP >> sp|P64865|Y1524_MYCTU Uncharacterized glycosyltransferase Rv1524/MT1575 OS=Mycobacterium tuberculosis GN=Rv1524 PE=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 123.6 0.2 2.8e-37 1.6e-34 1 138 [. 3 143 .. 3 144 .. 0.81 Alignments for each domain: == domain 1 score: 123.6 bits; conditional E-value: 2.8e-37 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----................S------.-HHHCCSHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd................vklwakleslktlkelae 72 +v+a++GTrGd+eP++A++ eLqrrGh+V+la+pp+l fve+agl+av++g++ + +++ l++ sp|P64865|Y1524_MYCTU 3 FVVASYGTRGDIEPCAAVGLELQRRGHDVCLAVPPNLIGFVETAGLSAVAYGSRdsqeqldeqflhnawkL---------QNPIKLLR 81 89****************************************************99988887654444440.........44444444 PP HHHHHHHHHHHHHHHHHH.HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 73 glkalrkakeilkeakpd.vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + a+ ++e ++e ++ ++v++g adl+l+++++++++anvaE++gip+++++++p rang++ sp|P64865|Y1524_MYCTU 82 E--AMAPVTEGWAELSAMlTPVAAG---ADLLLTGQIYQEVVANVAEHHGIPLAALHFYPVRANGEI 143 4..4444555555544331334444...************************************986 PP >> sp|P64866|Y1551_MYCBO Uncharacterized glycosyltransferase Mb1551 OS=Mycobacterium bovis GN=Mb1551 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 123.6 0.2 2.8e-37 1.6e-34 1 138 [. 3 143 .. 3 144 .. 0.81 Alignments for each domain: == domain 1 score: 123.6 bits; conditional E-value: 2.8e-37 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----................S------.-HHHCCSHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd................vklwakleslktlkelae 72 +v+a++GTrGd+eP++A++ eLqrrGh+V+la+pp+l fve+agl+av++g++ + +++ l++ sp|P64866|Y1551_MYCBO 3 FVVASYGTRGDIEPCAAVGLELQRRGHDVCLAVPPNLIGFVETAGLSAVAYGSRdsqeqldeqflhnawkL---------QNPIKLLR 81 89****************************************************99988887654444440.........44444444 PP HHHHHHHHHHHHHHHHHH.HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 73 glkalrkakeilkeakpd.vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + a+ ++e ++e ++ ++v++g adl+l+++++++++anvaE++gip+++++++p rang++ sp|P64866|Y1551_MYCBO 82 E--AMAPVTEGWAELSAMlTPVAAG---ADLLLTGQIYQEVVANVAEHHGIPLAALHFYPVRANGEI 143 4..4444555555544331334444...************************************986 PP >> sp|B5FB35|MURG_VIBFM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 123.5 0.1 3.1e-37 1.7e-34 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 123.5 bits; conditional E-value: 3.1e-37 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++Lq +G+e+r l+t +++e+ + +++g+e+ i+++ +l+ ++ k + +++ l a+ +ak+++k ++ sp|B5FB35|MURG_VIBFM 9 LVMAGGTGGHVFPGLAVAKQLQSEGWEIRwLGTADRMEADLvPKHGIEIDFIKVK-GLRGQG-LKKLIAAPFQILGAISQAKKHIKAWQ 95 789*************************************99*************.****99.9999********************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a++v+ sp|B5FB35|MURG_VIBFM 96 PDVVLGMGGYVSGPGGIAAWLSGIPVVLHEQNAVAGLTNQWLSKIAKRVF 145 ***********************************************997 PP >> sp|B2GB78|MURG_LACF3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.7 0.2 4.4e-36 2.5e-33 2 138 .. 4 142 .. 3 143 .. 0.98 2 ? 2.1 0.0 9 5.1e+03 72 114 .. 201 243 .. 186 252 .. 0.87 Alignments for each domain: == domain 1 score: 119.7 bits; conditional E-value: 4.4e-36 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++ggGT+G+++Pa+Al ++L++ +++ + +++++gle+++ ++ag+ ++ +++ +++++l sl+++k+++ +lka+ +ak+++k+ sp|B2GB78|MURG_LACF3 4 MVSGGGTGGHIYPALALIERLKQVEPDTEvlyVGAKRGLETKIvPQAGYRLETMEVQ-GFRRSL-SLENVKTVYLFLKAVAQAKKLIKD 90 5899*************************99**************************.****99.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++pdvv+g+ggyv++++l+aa+++g+p++++Eqn++ g++nk+l+r++n v+ sp|B2GB78|MURG_LACF3 91 FRPDVVLGTGGYVSGAVLYAAAKLGVPTVIHEQNSVVGVTNKFLARYVNEVA 142 *************************************************997 PP == domain 2 score: 2.1 bits; conditional E-value: 9 HHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHH CS Glyco_transf_28 72 eglkalrkakeilkeakpdvvvgfggyvadlaliaallagipa 114 + +ka+ +a ++ e+ +v++++g d++++a + + i sp|B2GB78|MURG_LACF3 201 RINKAVVEALPSFNEQPYQVIFATGRKRYDDVMGALAGQPIGD 243 567889999999**********************998776655 PP >> sp|B6ELH5|MURG_ALISL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 123.3 0.1 3.6e-37 2e-34 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 123.3 bits; conditional E-value: 3.6e-37 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++Lq +G+e+r l+t++++e+ + +++g+e+ i+++ +l+ ++ k l +++ a+ +ak++++ ++ sp|B6ELH5|MURG_ALISL 9 LVMAGGTGGHVFPGLAVAKQLQSEGWEIRwLGTEDRMEADLvPKHGIEIDFIKVK-GLRGQG-LKKLLIAPFQIIGAILQAKKHIQAWQ 95 789*************************************99*************.****99.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a++v+ sp|B6ELH5|MURG_ALISL 96 PDVVLGMGGYVSGPGGIAAWLSGIPVVLHEQNAVAGLTNQWLSKIAKRVF 145 ***********************************************997 PP >> sp|B8CWJ6|MURG_HALOH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 123.0 0.0 4.3e-37 2.4e-34 2 138 .. 4 140 .. 3 141 .. 0.98 Alignments for each domain: == domain 1 score: 123.0 bits; conditional E-value: 4.3e-37 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 v++ggGT+G+++Pa+Ala+ ++++G e+ +++ +gle+++ +e+g +++ i++ +++++l s++ +++l++ ++++ +a+++l+++k sp|B8CWJ6|MURG_HALOH 4 VFTGGGTGGHIYPALALAESFRKKGDEILyIGSNDGLERRIvPEEGFDFQGIEVA-PFPRNL-SVHLFSSLLKTGRGFIQARKLLRKFK 90 89*****************************************************.****99.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+gg+v++++++aa+l++ip++++Eqn+ pgl+n+ll+ ++++++ sp|B8CWJ6|MURG_HALOH 91 PDVVIGTGGFVSGPVVLAAALQKIPTVIHEQNAYPGLANRLLAPFVTRIA 140 *********************************************99986 PP >> sp|A7MXR6|MURG_VIBHB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 123.1 0.2 4e-37 2.3e-34 2 138 .. 8 144 .. 7 145 .. 0.98 Alignments for each domain: == domain 1 score: 123.1 bits; conditional E-value: 4e-37 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++Lq++G+e+r l+t +++e+ + +++g+e+ i+++ +l+ ++ + l +++ +a+ +a++++k+++ sp|A7MXR6|MURG_VIBHB 8 MVMAGGTGGHVFPGLAVAKQLQEQGWEIRwLGTADRMEADLvPKHGIEIDFIKVK-GLRGQG-VKRLLAAPFQIINAIMQARAHMKRWQ 94 5899************************************99*************.****99.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++ +iaa+ +gip++++Eqn+++gl+n++l++ a++v+ sp|A7MXR6|MURG_VIBHB 95 PDAVLGMGGYVSGPGGIAAWMSGIPVVLHEQNAVAGLTNQWLSKIAKKVF 144 ***********************************************997 PP >> sp|A5VJ33|MURG_LACRD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.3 0.0 5.8e-36 3.3e-33 2 138 .. 4 142 .. 3 143 .. 0.98 2 ? 2.7 0.0 5.7 3.2e+03 64 129 .. 299 357 .. 237 360 .. 0.79 Alignments for each domain: == domain 1 score: 119.3 bits; conditional E-value: 5.8e-36 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++ggGT+G+++Pa+Al ++L++ +++ + ++t++gle+++ + ag+e ++ + +++++l sl+++k+++ +l++++ ak+i++e sp|A5VJ33|MURG_LACRD 4 LVSGGGTGGHIYPALALIERLKQVEPDTEvlyVGTTRGLENKIvPDAGIELETMHMQ-GFKRSL-SLENFKTIYLFLNSVHHAKKIISE 90 789**************************99**************************.****99.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +kpdvv+g+ggyv++++l+aa++ +ip++++Eqn++ g++nk+l+r++++++ sp|A5VJ33|MURG_LACRD 91 FKPDVVLGTGGYVSGAVLYAAAKKHIPTVIHEQNSVVGVTNKFLSRYVDQIA 142 ************************************************9986 PP == domain 2 score: 2.7 bits; conditional E-value: 5.7 HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEES CS Glyco_transf_28 64 lktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkl 129 +k+ l k ++ l ++++++++ +ad ++ ++ a+ aE+ g+p+++++l sp|A5VJ33|MURG_LACRD 299 VKNAQALV-------KNNAGLMITEDKLDARALLTQADKIMEDEEVRKEMAHAAEKMGRPDAADRL 357 44444444.......44888888899999999999999999999999999*********9999876 PP >> sp|B2G6K5|MURG_LACRJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.3 0.0 5.8e-36 3.3e-33 2 138 .. 4 142 .. 3 143 .. 0.98 2 ? 2.7 0.0 5.7 3.2e+03 64 129 .. 299 357 .. 237 360 .. 0.79 Alignments for each domain: == domain 1 score: 119.3 bits; conditional E-value: 5.8e-36 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++ggGT+G+++Pa+Al ++L++ +++ + ++t++gle+++ + ag+e ++ + +++++l sl+++k+++ +l++++ ak+i++e sp|B2G6K5|MURG_LACRJ 4 LVSGGGTGGHIYPALALIERLKQVEPDTEvlyVGTTRGLENKIvPDAGIELETMHMQ-GFKRSL-SLENFKTIYLFLNSVHHAKKIISE 90 789**************************99**************************.****99.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +kpdvv+g+ggyv++++l+aa++ +ip++++Eqn++ g++nk+l+r++++++ sp|B2G6K5|MURG_LACRJ 91 FKPDVVLGTGGYVSGAVLYAAAKKHIPTVIHEQNSVVGVTNKFLSRYVDQIA 142 ************************************************9986 PP == domain 2 score: 2.7 bits; conditional E-value: 5.7 HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEES CS Glyco_transf_28 64 lktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkl 129 +k+ l k ++ l ++++++++ +ad ++ ++ a+ aE+ g+p+++++l sp|B2G6K5|MURG_LACRJ 299 VKNAQALV-------KNNAGLMITEDKLDARALLTQADKIMEDEEVRKEMAHAAEKMGRPDAADRL 357 44444444.......44888888899999999999999999999999999*********9999876 PP >> sp|Q182Y6|MURG_CLOD6 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 122.6 0.0 5.6e-37 3.2e-34 1 138 [. 4 143 .. 4 144 .. 0.99 Alignments for each domain: == domain 1 score: 122.6 bits; conditional E-value: 5.6e-37 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+l+ggGT+G+v+Pa+A+a++ +++ ++ + ++t++g+e+++ +++g e ++++++ ++++k+ ++++k++++ +k+l+++++i+k sp|Q182Y6|MURG_CLOD6 4 VLLSGGGTGGHVYPAIAIANKIRDEHPDAEiifVGTEKGIESEIvPKYGFELKTVTVQ-GFKRKI-DFDNVKRVFKLFKGLEQSRKIVK 90 79***************************999**************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd+v+g+ggyv++++l++a+ +ipa+++Eqn+ pg++nk+l++++++vl sp|Q182Y6|MURG_CLOD6 91 KFKPDIVIGTGGYVSGPVLFNASMGKIPAIIHEQNSFPGVTNKILSKTVTKVL 143 ***************************************************97 PP >> sp|Q2NVV1|MURG_SODGM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 122.5 0.2 6.3e-37 3.6e-34 2 135 .. 9 142 .. 8 146 .. 0.96 Alignments for each domain: == domain 1 score: 122.5 bits; conditional E-value: 6.3e-37 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++Vr l+t +++e+ + +++g+++ i + +l+ k+ + l+ + + ++alr+a++i++ ++ sp|Q2NVV1|MURG_SODGM 9 MVMAGGTGGHVFPGLAVAHHLMAQGWQVRwLGTANRMEADLvPQHGIDIDFIRIS-GLRGKG-LKAQLLAPVRIWRALRQARRIMRAWR 95 5899************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 pdvv+g+ggyv+++ ++aa+++gip++++Eqngi+gl+n+ l++ sp|Q2NVV1|MURG_SODGM 96 PDVVLGMGGYVSGPGGLAAWSCGIPVVLHEQNGIAGLTNRGLAKISR 142 ***************************************97776655 PP >> sp|Q07WI5|MURG_SHEFN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 122.4 0.0 6.4e-37 3.6e-34 1 138 [. 11 148 .. 11 149 .. 0.98 Alignments for each domain: == domain 1 score: 122.4 bits; conditional E-value: 6.4e-37 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G+++r l+t +++e+++ +++g +++ i+++ +++ ++ +++l +++ +++ +ak+++ ++ sp|Q07WI5|MURG_SHEFN 11 ILIMAGGTGGHVFPALAVAKYLAEKGWQIRwLGTADRMEARLvPQHGFDIEFIDIK-GVRGNG-LMRKLAAPFKIIRSIIQAKAVIDDF 97 689*****************************************************.****99.99*********************** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +pdv++g+gg+++++ ++a +l+gip++++Eqn+ipgl+nkll++ a++vl sp|Q07WI5|MURG_SHEFN 98 QPDVILGMGGFASGPGGVAGKLSGIPVVLHEQNAIPGLTNKLLSKIAKKVL 148 ************************************************997 PP >> sp|A1KVL3|MURG_NEIMF UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 122.7 0.1 5.3e-37 3e-34 1 138 [. 6 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 122.7 bits; conditional E-value: 5.3e-37 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++l++gGT+G+++Pa+A+a+ L++rGh+V+ l++++ +ee++ +++g+ ++++++ +++ ++ ++l+ + ++++r+a +i++++ sp|A1KVL3|MURG_NEIMF 6 FMLMAGGTGGHIFPALAVADSLRARGHHVIwLGSKDSMEERIvPQYGIRLETLAIK-GVRGNG-IKRKLMLPVTLYQTVREAQRIIRKH 92 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + v+gfgg+v + ++aa+l+g+p++++Eqn+++gl+n++l+r+a++vl sp|A1KVL3|MURG_NEIMF 93 RVECVIGFGGFVTFPGGLAAKLLGVPIVIHEQNAVAGLSNRHLSRWAKRVL 143 *************************************************97 PP >> sp|Q9K0Y2|MURG_NEIMB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 122.7 0.1 5.3e-37 3e-34 1 138 [. 6 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 122.7 bits; conditional E-value: 5.3e-37 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++l++gGT+G+++Pa+A+a+ L++rGh+V+ l++++ +ee++ +++g+ ++++++ +++ ++ ++l+ + ++++r+a +i++++ sp|Q9K0Y2|MURG_NEIMB 6 FMLMAGGTGGHIFPALAVADSLRARGHHVIwLGSKDSMEERIvPQYGIRLETLAIK-GVRGNG-IKRKLMLPVTLYQTVREAQRIIRKH 92 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + v+gfgg+v + ++aa+l+g+p++++Eqn+++gl+n++l+r+a++vl sp|Q9K0Y2|MURG_NEIMB 93 RVECVIGFGGFVTFPGGLAAKLLGVPIVIHEQNAVAGLSNRHLSRWAKRVL 143 *************************************************97 PP >> sp|B8CNL1|MURG_SHEPW UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 121.8 0.0 9.9e-37 5.6e-34 1 138 [. 10 147 .. 10 148 .. 0.98 Alignments for each domain: == domain 1 score: 121.8 bits; conditional E-value: 9.9e-37 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ ++++ +++ ++ l++l +++ l+++ +a+ +++++ sp|B8CNL1|MURG_SHEPW 10 ILIMAGGTGGHVFPALAVAKYLSQQGWKVRwLGTADRMEARLvPQHGFDIDFLDIK-GVRGNG-LLRKLAAPFKILRSVMQARSVIQDF 96 689*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+g+gg+++++ ++aa+l+gip++++Eqn+ipg++nkll++ a+ vl sp|B8CNL1|MURG_SHEPW 97 KPDVVMGMGGFASGPGGVAARLSGIPLVLHEQNAIPGMTNKLLSKVATEVL 147 *********************************************999886 PP >> sp|C4LA25|MURG_TOLAT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 120.6 0.4 2.5e-36 1.4e-33 2 138 .. 6 142 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 120.6 bits; conditional E-value: 2.5e-36 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 v+++gGT+G+v+P +A+a++Lq+ G++++ l+tp+++e+ + +++g +++ i+++ +l++++ +++l+ +++ +ka+ +a++il++ + sp|C4LA25|MURG_TOLAT 6 VIMAGGTGGHVFPGLAVAHRLQADGWNIHwLGTPDRMEADLvPAHGFPIEFINIR-GLRNHG-LVRKLLAPFQICKAVLQAFMILRRIR 92 799*************************************99*************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggy+a++ ++aa+l+gip++++Eqn+ +gl+n+ll++ a+++l sp|C4LA25|MURG_TOLAT 93 PDVVLGMGGYAAGPGGVAAKLLGIPVVLHEQNAAAGLTNRLLAKIATRIL 142 **********************************************9987 PP >> sp|Q9F1N0|MURG_SHEVI UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 121.7 0.0 1.1e-36 6.1e-34 1 138 [. 10 147 .. 10 148 .. 0.98 Alignments for each domain: == domain 1 score: 121.7 bits; conditional E-value: 1.1e-36 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++ ++Vr l+t +++e+++ +++g ++ i+++ +++ ++ l++l ++++ +++ +a+++++e+ sp|Q9F1N0|MURG_SHEVI 10 ILIMAGGTGGHVFPALAVAKYLSQKSWKVRwLGTAERMEARLvPQHGFDIDFIDIK-GVRGNG-LLRKLAAPFKVMRSVMQARRVIQEF 96 689*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+g+gg+++++ +iaa+l+gip++++Eqn+ipg++nkll+r a +vl sp|Q9F1N0|MURG_SHEVI 97 KPDVVLGMGGFASGPGGIAARLSGIPLVLHEQNAIPGMTNKLLSRIASKVL 147 ***********************************************9986 PP >> sp|A5F5M9|MURG_VIBC3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 121.6 0.4 1.2e-36 6.5e-34 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 121.6 bits; conditional E-value: 1.2e-36 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++Lq++G+++r l+t +++e+++ +++g+e+ i+++ +l+ ++ ++ lk +++ +a+ +a+++l ++ sp|A5F5M9|MURG_VIBC3 9 MVMAGGTGGHVFPGLAVAKQLQQQGWQIRwLGTADRMEAELvPKHGIEIDFIQVK-GLRGQG-LMRLLKAPFQIVNAILQARRHLLAYQ 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++ +iaa+l gip++++Eqn+++gl+n++l++ a +v+ sp|A5F5M9|MURG_VIBC3 96 PDAVLGMGGYVSGPGGIAAWLMGIPVVLHEQNAVAGLTNQWLAKIARRVF 145 *********************************************99986 PP >> sp|Q03W35|MURG_LEUMM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 121.1 0.1 1.7e-36 9.4e-34 1 137 [. 3 141 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 121.1 bits; conditional E-value: 1.7e-36 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G+++Pa+Ala+ ++ +++ + +++++g+e+ + +++g+++++++++ ++++++ sl+++k++ +lka+++ak+i+k sp|Q03W35|MURG_LEUMM 3 IILSGGGTGGHIYPALALAEVIRKHEPDTEflyVGSERGVESNIvPATGMPFEKLTVQ-GFKRSF-SLENIKTVSLFLKAVKEAKKIIK 89 689*******************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 ++ pdvvvg+ggyv++++++aa +++ip++++Eqn+++g++nk+l+r a+++ sp|Q03W35|MURG_LEUMM 90 DFDPDVVVGTGGYVSGAVVYAAQRLHIPTVIHEQNSVAGVTNKFLSRGATKI 141 ***********************************************99987 PP >> sp|A3Q1L8|MURG_MYCSJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 122.2 1.3 7.9e-37 4.4e-34 1 138 [. 7 146 .. 7 147 .. 0.99 Alignments for each domain: == domain 1 score: 122.2 bits; conditional E-value: 7.9e-37 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+laggGT+G+vePa+A+a++L + ++ Vr l+t++gle+++ +e+g++ + i+p +l++kl s + + + ++++a+r+++eil sp|A3Q1L8|MURG_MYCSJ 7 VLLAGGGTAGHVEPAMAVADALAALEPGVRitaLGTERGLETRLvPERGYALELITPV-PLPRKL-SGDLARLPMRVRRAVRETREILD 93 79********************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +dvv+gfggyva++a++aa+++++p++v+E+n+ +gl+nk+ +r+a +vl sp|A3Q1L8|MURG_MYCSJ 94 TVHADVVIGFGGYVALPAYLAARRNRVPIVVHEANASAGLANKVGARFARRVL 146 **************************************************997 PP >> sp|A1UI54|MURG_MYCSK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 122.2 1.3 7.9e-37 4.4e-34 1 138 [. 7 146 .. 7 147 .. 0.99 Alignments for each domain: == domain 1 score: 122.2 bits; conditional E-value: 7.9e-37 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+laggGT+G+vePa+A+a++L + ++ Vr l+t++gle+++ +e+g++ + i+p +l++kl s + + + ++++a+r+++eil sp|A1UI54|MURG_MYCSK 7 VLLAGGGTAGHVEPAMAVADALAALEPGVRitaLGTERGLETRLvPERGYALELITPV-PLPRKL-SGDLARLPMRVRRAVRETREILD 93 79********************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +dvv+gfggyva++a++aa+++++p++v+E+n+ +gl+nk+ +r+a +vl sp|A1UI54|MURG_MYCSK 94 TVHADVVIGFGGYVALPAYLAARRNRVPIVVHEANASAGLANKVGARFARRVL 146 **************************************************997 PP >> sp|Q1B6X1|MURG_MYCSS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 122.2 1.3 7.9e-37 4.4e-34 1 138 [. 7 146 .. 7 147 .. 0.99 Alignments for each domain: == domain 1 score: 122.2 bits; conditional E-value: 7.9e-37 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+laggGT+G+vePa+A+a++L + ++ Vr l+t++gle+++ +e+g++ + i+p +l++kl s + + + ++++a+r+++eil sp|Q1B6X1|MURG_MYCSS 7 VLLAGGGTAGHVEPAMAVADALAALEPGVRitaLGTERGLETRLvPERGYALELITPV-PLPRKL-SGDLARLPMRVRRAVRETREILD 93 79********************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +dvv+gfggyva++a++aa+++++p++v+E+n+ +gl+nk+ +r+a +vl sp|Q1B6X1|MURG_MYCSS 94 TVHADVVIGFGGYVALPAYLAARRNRVPIVVHEANASAGLANKVGARFARRVL 146 **************************************************997 PP >> sp|C3LQU6|MURG_VIBCM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 122.3 0.3 6.9e-37 3.9e-34 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 122.3 bits; conditional E-value: 6.9e-37 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++Lq++G+++r l+t +++e+++ +++g+e+ i+++ +l+ ++ ++ lk +++ +a+ +a+++l ++ sp|C3LQU6|MURG_VIBCM 9 MVMAGGTGGHVFPGLAVAKQLQQQGWQIRwLGTADRMEAELvPKHGIEIDFIQVK-GLRGQG-LMRLLKAPFQIVNAILQARRHLLTYQ 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a +v+ sp|C3LQU6|MURG_VIBCM 96 PDAVLGMGGYVSGPGGIAAWLLGIPVVLHEQNAVAGLTNQWLAKIARRVF 145 *********************************************99986 PP >> sp|Q9KPG7|MURG_VIBCH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 122.3 0.3 6.9e-37 3.9e-34 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 122.3 bits; conditional E-value: 6.9e-37 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++Lq++G+++r l+t +++e+++ +++g+e+ i+++ +l+ ++ ++ lk +++ +a+ +a+++l ++ sp|Q9KPG7|MURG_VIBCH 9 MVMAGGTGGHVFPGLAVAKQLQQQGWQIRwLGTADRMEAELvPKHGIEIDFIQVK-GLRGQG-LMRLLKAPFQIVNAILQARRHLLTYQ 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggyv+++ +iaa+l+gip++++Eqn+++gl+n++l++ a +v+ sp|Q9KPG7|MURG_VIBCH 96 PDAVLGMGGYVSGPGGIAAWLLGIPVVLHEQNAVAGLTNQWLAKIARRVF 145 *********************************************99986 PP >> sp|A8FQA0|MURG_SHESH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 121.4 0.1 1.4e-36 7.6e-34 1 138 [. 10 147 .. 10 148 .. 0.98 Alignments for each domain: == domain 1 score: 121.4 bits; conditional E-value: 1.4e-36 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+ L ++G++Vr l+t +++e+++ +++g ++ i+++ +++ ++ l++l ++++ +++ +a +++ke+ sp|A8FQA0|MURG_SHESH 10 ILIMAGGTGGHVFPALAVAKYLCQQGWQVRwLGTAERMEARLvPQHGFDIDFIDIK-GVRGNG-LLRKLAAPFKVIRSIMQAQAVIKEF 96 689*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdvv+g+gg+++++ ++aa+l+g p++++Eqn+ipg++nk+l+r a +vl sp|A8FQA0|MURG_SHESH 97 KPDVVLGMGGFASGPGGVAARLSGLPLVLHEQNAIPGMTNKILARIASQVL 147 *********************************************999876 PP >> sp|B4RQC5|MURG_NEIG2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 120.3 0.1 2.9e-36 1.6e-33 1 138 [. 6 143 .. 6 144 .. 0.99 Alignments for each domain: == domain 1 score: 120.3 bits; conditional E-value: 2.9e-36 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++l++gGT+G+++Pa+A+a+ L+ rGh+V+ l++++ +ee++ +++g+ ++++++ + + ++ ++l+ ++ +k++r+a +i++++ sp|B4RQC5|MURG_NEIG2 6 FMLMAGGTGGHIFPALAVADSLRVRGHHVIwLGSKDSMEERIvPQYGIRLETLAIK-GIRGNG-IKRKLMLPFTLYKTVREAQRIIRKH 92 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + v+gfgg+v + ++aa+l+g+p++++Eqn+++gl+n++l+r+a++vl sp|B4RQC5|MURG_NEIG2 93 RVECVIGFGGFVTFPGGLAAKLLGVPIVIHEQNAVAGLSNRHLSRWAKRVL 143 *************************************************97 PP >> sp|Q5F6L8|MURG_NEIG1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 120.3 0.1 2.9e-36 1.6e-33 1 138 [. 6 143 .. 6 144 .. 0.99 Alignments for each domain: == domain 1 score: 120.3 bits; conditional E-value: 2.9e-36 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++l++gGT+G+++Pa+A+a+ L+ rGh+V+ l++++ +ee++ +++g+ ++++++ + + ++ ++l+ ++ +k++r+a +i++++ sp|Q5F6L8|MURG_NEIG1 6 FMLMAGGTGGHIFPALAVADSLRVRGHHVIwLGSKDSMEERIvPQYGIRLETLAIK-GIRGNG-IKRKLMLPFTLYKTVREAQRIIRKH 92 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + v+gfgg+v + ++aa+l+g+p++++Eqn+++gl+n++l+r+a++vl sp|Q5F6L8|MURG_NEIG1 93 RVECVIGFGGFVTFPGGLAAKLLGVPIVIHEQNAVAGLSNRHLSRWAKRVL 143 *************************************************97 PP >> sp|B1I4C4|MURG_DESAP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 120.4 0.3 2.8e-36 1.6e-33 1 138 [. 3 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 120.4 bits; conditional E-value: 2.8e-36 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v++aggGT+G+++Pa+A+a++ +rr ++ ++t++gle+++ + +gl++++i++ +l++ l s+++l +++ +++l ++ +++ sp|B1I4C4|MURG_DESAP 3 VIIAGGGTGGHIYPALAIAEGIKRRHPDADllyVGTSRGLETEIvPRTGLPFHAIPAA-GLKRGL-SPTNLAAVLRAGRGLGASLSLMR 89 689*******************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +++p+vvvg+ggyv +++++aa+l+gi++ ++Eqn++pgl+n+ l+r+a + + sp|B1I4C4|MURG_DESAP 90 RFRPQVVVGTGGYVCGPVVLAAALRGIKTLIHEQNALPGLTNRMLSRYASRTA 142 *************************************************9875 PP >> sp|Q6A9Q2|MURG_PROAC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 121.3 1.1 1.4e-36 8e-34 1 134 [. 4 137 .. 4 140 .. 0.98 Alignments for each domain: == domain 1 score: 121.3 bits; conditional E-value: 1.4e-36 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 vvlaggGT+G+ P++A a +Lq+rG V ++tp+gle +v +eagl+ i+p +l++ + + +k +a+ a+rka e+l++ sp|Q6A9Q2|MURG_PROAC 4 VVLAGGGTAGHTSPLIATAMALQERGATVScIGTPRGLEGRViPEAGLQLDMIPPV-PLPRTV-NADLFKVPARLAGAVRKAGEVLQRR 90 79******************************************************.****99.9999999****************** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134 + dvvvgfggyv+++a++aa++a+ip++++Eqn++pgl+nk+ +r+a sp|Q6A9Q2|MURG_PROAC 91 QTDVVVGFGGYVSLPAYLAARRAKIPVVIHEQNAVPGLANKIAARFA 137 ******************************************99986 PP >> sp|B3WDY2|MURG_LACCB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.3 0.0 1.2e-35 6.8e-33 2 138 .. 4 142 .. 3 143 .. 0.96 Alignments for each domain: == domain 1 score: 118.3 bits; conditional E-value: 1.2e-35 EEE-------HHHHHHHHHHHHH---..EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGh..eVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 v++ggGT+G+++Pa+Al ++L+++G +V ++t++gle+++ +++gl++ +++++ +++++l sl++++++ ++l +l +ak++l++ sp|B3WDY2|MURG_LACCB 4 VISGGGTGGHIYPALALIEALKAEGKldDVLyVGTKRGLESRIvPATGLKFATLDLQ-GFKRSL-SLSNFTTVRKFLGSLGEAKKLLQD 90 799**********************544666**************************.****99.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++pd+vvg+ggyv++++l+aa++++ip++++E+n+++g++nk+l+ ++++v+ sp|B3WDY2|MURG_LACCB 91 FQPDIVVGTGGYVSGAILFAATRLHIPTVIHESNSVAGVTNKFLSHFVDRVA 142 *************************************************997 PP >> sp|Q039R7|MURG_LACC3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.3 0.0 1.2e-35 6.8e-33 2 138 .. 4 142 .. 3 143 .. 0.96 Alignments for each domain: == domain 1 score: 118.3 bits; conditional E-value: 1.2e-35 EEE-------HHHHHHHHHHHHH---..EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGh..eVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 v++ggGT+G+++Pa+Al ++L+++G +V ++t++gle+++ +++gl++ +++++ +++++l sl++++++ ++l +l +ak++l++ sp|Q039R7|MURG_LACC3 4 VISGGGTGGHIYPALALIEALKAEGKldDVLyVGTKRGLESRIvPATGLKFATLDLQ-GFKRSL-SLSNFTTVRKFLGSLGEAKKLLQD 90 799**********************544666**************************.****99.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++pd+vvg+ggyv++++l+aa++++ip++++E+n+++g++nk+l+ ++++v+ sp|Q039R7|MURG_LACC3 91 FQPDIVVGTGGYVSGAILFAATRLHIPTVIHESNSVAGVTNKFLSHFVDRVA 142 *************************************************997 PP >> sp|A4J2B1|MURG_DESRM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.5 0.0 1e-35 5.8e-33 2 138 .. 4 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 118.5 bits; conditional E-value: 1e-35 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++ggGT+G+++Pa+A+ar+Lq r +V ++t +gle+ + ++a+ ++++i++ +l++k+ sl+++k l++ ++++r+a i+k sp|A4J2B1|MURG_DESRM 4 IITGGGTGGHIYPALAIARGLQSRFSKVQilyVGTNRGLEADIvPKANFPFQAITVS-GLQRKI-SLENFKVLWQAYRGYREAVGIIKT 90 689******************************************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++pdvv+g+ggyv ++++ aa+++gip+ ++Eqn+ pg++n++l+++a++v sp|A4J2B1|MURG_DESRM 91 FNPDVVIGTGGYVCGPVVMAAARRGIPTLIHEQNAFPGITNRILSKFADQVT 142 *************************************************986 PP >> sp|Q47VQ9|MURG_COLP3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.8 0.0 4.1e-36 2.3e-33 2 137 .. 17 152 .. 16 154 .. 0.98 Alignments for each domain: == domain 1 score: 119.8 bits; conditional E-value: 4.1e-36 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+++P +A+a+eL+++G++++ l+t +++e+++ + +g+++ i++ +l+ k l+tl+ +++ l++l++a++++k k sp|Q47VQ9|MURG_COLP3 17 LVMAGGTGGHIFPGIAVADELKAQGWKIHwLGTADRMEAQIvPMHGYDISFINIS-GLRGKN-LLTTLVMPFKLLRSLFQARRVIKTVK 103 789****************************************************.****99.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 pdvv+g+ggy++++ ++aa+l++ip++v+Eqn+ +gl+n+ll+r an+v sp|Q47VQ9|MURG_COLP3 104 PDVVIGMGGYASAPGGLAAWLSKIPLIVHEQNAAAGLSNRLLARIANKV 152 ***********************************************98 PP >> sp|B2A2H2|MURG_NATTJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 120.0 0.0 3.6e-36 2.1e-33 1 135 [. 3 139 .. 3 143 .. 0.97 Alignments for each domain: == domain 1 score: 120.0 bits; conditional E-value: 3.6e-36 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+++ggGT+G+++Pa+A+ +eL++r V ++t++g+e ++ +++g+++ +i+++ +l++k+ l+ + l ++lk+l ++ +++k sp|B2A2H2|MURG_NATTJ 3 VLVTGGGTGGHIYPALAVINELKERNQIVDilyVGTSKGMEQEIiPNRGIDFAAITVR-GLQRKI-NLEQVYFLRDFLKGLYQSYRLIK 89 799***********************9999****************************.******.99999999999999********* PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +++pdvv+g+ggyv +++l aa+l +ip++++Eqn ipg++nk+l+r+a+ sp|B2A2H2|MURG_NATTJ 90 NFTPDVVIGTGGYVCGPVLMAASLMKIPTVLHEQNVIPGITNKFLSRFAD 139 ************************************************98 PP >> sp|Q6NGC8|MURG_CORDI UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.8 0.3 4.2e-36 2.3e-33 1 130 [. 6 135 .. 6 138 .. 0.98 Alignments for each domain: == domain 1 score: 119.8 bits; conditional E-value: 4.2e-36 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 vv+aggGT+G++ePa+A+a+ L++rG eV l+t++gle+ + +e+g e + i+p ++++k+ + +k +++ l ++ ++++ilke+ sp|Q6NGC8|MURG_CORDI 6 VVVAGGGTAGHIEPALAVAESLRHRGAEVVaLGTTKGLETSIvPERGFELRLINPV-PVPRKI-NADLFKLPFRLLATISQTRKILKEF 92 79******************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130 dvv+gfggyva++a+iaa+l++ip +v+E+n++ g++nkl sp|Q6NGC8|MURG_CORDI 93 DTDVVIGFGGYVAAPAYIAAKLQKIPFIVHEANARSGMANKLG 135 ****************************************986 PP >> sp|B4RWX9|MURG_ALTMD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.5 0.3 5.1e-36 2.9e-33 1 138 [. 5 142 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 119.5 bits; conditional E-value: 5.1e-36 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+P +A+a++L+++G++++ l+t +++e++v +++ ++++ i+++ +l+ k+ ++ + + + k+l++a++i+k+ sp|B4RWX9|MURG_ALTMD 5 CLIMAGGTGGHVFPGLAVANALRAEGWDIHwLGTAERMEAQVvPKHDIPIHFIPVK-GLRGKG-ISARIQGAVALVKSLFSARRIIKRL 91 6899****************************************************.******.999999999999************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +pd+vvgfggy++++ ++aa+++gip++v+Eqn+ +g++nkll++ a +vl sp|B4RWX9|MURG_ALTMD 92 QPDIVVGFGGYASGPGGVAAKSLGIPVIVHEQNAAAGMTNKLLSKLASRVL 142 *********************************************999987 PP >> sp|Q9JSZ7|MURG_NEIMA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.2 0.1 6.5e-36 3.7e-33 1 138 [. 6 143 .. 6 144 .. 0.99 Alignments for each domain: == domain 1 score: 119.2 bits; conditional E-value: 6.5e-36 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++l++gGT+G+++Pa+A+a+ L++rGh+V+ l++++ +ee++ +++ + ++++++ +++ ++ ++l+ ++ ++++r+a +i++++ sp|Q9JSZ7|MURG_NEIMA 6 FMLMAGGTGGHIFPALAVADSLRARGHHVIwLGSKDSMEERIvPQYDILLETLAIK-GVRGNG-IKRKLMLPFTLYQTVREAQQIIRKH 92 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + v+gfgg+v + ++aa+l+g+p++++Eqn+++gl+n++l+r+a++vl sp|Q9JSZ7|MURG_NEIMA 93 RVECVIGFGGFVTFPGGLAAKLLGVPIVIHEQNAVAGLSNRHLSRWAKRVL 143 *************************************************97 PP >> sp|B0KFS6|MURG_PSEPG UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 115.5 0.2 9.2e-35 5.2e-32 1 130 [. 8 137 .. 8 144 .. 0.98 2 ? 2.3 0.0 7.8 4.4e+03 34 55 .. 209 258 .. 207 352 .. 0.56 Alignments for each domain: == domain 1 score: 115.5 bits; conditional E-value: 9.2e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+++ ++agl+ + i++ +l+ k+ +l+ lk ++ ka+ +a++i+++ sp|B0KFS6|MURG_PSEPG 8 VLIMAGGTGGHVFPALACAREFQARGYSVHwLGTPRGIENELvPQAGLPLHLIQVS-GLRGKG-KLSLLKAPFTLIKAVLQARRIIRQL 94 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130 kp v+gfggyv ++ ++aa+l+g+p++++Eqn+++g +n+ll sp|B0KFS6|MURG_PSEPG 95 KPVCVLGFGGYVTGPGGVAARLCGVPLVIHEQNARAGTANRLL 137 ****************************************986 PP == domain 2 score: 2.3 bits; conditional E-value: 7.8 TGGGHHHH.HH---EEEE----...........................S CS Glyco_transf_28 34 ppgleefv.eeagleavpigpd...........................v 55 p gl+++v +ag ++ pi+++ v sp|B0KFS6|MURG_PSEPG 209 PAGLRPEVfHQAGKQHAPITAEryheagvaaqvepfikdmaqaygwadmV 258 77788888888888888888886666444444444444444444444440 PP >> sp|A4XQS4|MURG_PSEMY UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.7 0.2 8.9e-36 5e-33 1 137 [. 5 141 .. 5 142 .. 0.99 Alignments for each domain: == domain 1 score: 118.7 bits; conditional E-value: 8.9e-36 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+t++g+e+++ ++agl+ + i++ +l+ k+ +l+ lk +++ l++l +a++i++e sp|A4XQS4|MURG_PSEMY 5 VLIMAGGTGGHVFPALACAREFQTRGYAVHwLGTSRGIENELvPQAGLPLHLINVS-GLRGKG-KLSLLKAPFQLLRSLLQARRIVREL 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +p v+g+ggyv ++ ++aa+lag+p++++Eqn+++g +n+ll+r a+++ sp|A4XQS4|MURG_PSEMY 92 QPVCVLGMGGYVTGPGGLAARLAGVPLVIHEQNAVAGTANRLLSRIATRI 141 **********************************************9986 PP >> sp|Q48EF8|MURG_PSE14 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.7 0.4 9e-36 5.1e-33 1 137 [. 5 141 .. 5 142 .. 0.98 Alignments for each domain: == domain 1 score: 118.7 bits; conditional E-value: 9e-36 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG++V+ l+tp+g+e+++ ++agl+ + i++ +l+ k+ l+ lk ++ lkal +a++++++ sp|Q48EF8|MURG_PSE14 5 VLIMAGGTGGHVFPALACAREFQARGYKVHwLGTPRGIENELvPQAGLTLHLINVT-GLRGKG-RLSLLKAPFMLLKALMQARKVVRQV 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kp vvgfggyv ++ ++aa+lag+p++++Eqn+++g +n+ l+ +a +v sp|Q48EF8|MURG_PSE14 92 KPVCVVGFGGYVTGPGGLAAKLAGVPLIIHEQNAVAGTANRSLASFASRV 141 ********************************************999886 PP >> sp|Q8R9G6|MURG_THETN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.7 0.0 4.6e-36 2.6e-33 2 138 .. 4 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 119.7 bits; conditional E-value: 4.6e-36 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+++PavA+a+e + + + ++t++gle+++ + +g e v+i+++ ++++kl s++tlk++++ + ++++a++ilk+ sp|Q8R9G6|MURG_THETN 4 LFAGGGTGGHIYPAVAIAKEILKNEQDAQilfVGTEKGLEKELvPREGFELVTIEVQ-GFKRKL-SFDTLKTVYKAFTGFKQANKILKD 90 89*********************99999999**************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +kp+vv+g+ggyv +++l aa +ip+ ++Eqn+ pgl+n+ll+ +++ v+ sp|Q8R9G6|MURG_THETN 91 FKPHVVIGTGGYVCGPVLMAAVIKRIPTLIHEQNAFPGLTNRLLSPFVDIVA 142 ***********************************************99886 PP >> sp|A5W8Q0|MURG_PSEP1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 115.6 0.2 8.3e-35 4.7e-32 1 130 [. 8 137 .. 8 144 .. 0.98 Alignments for each domain: == domain 1 score: 115.6 bits; conditional E-value: 8.3e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+++ ++agl+ + i++ +l+ k+ +l+ lk ++ ka+ +a++i+++ sp|A5W8Q0|MURG_PSEP1 8 VLIMAGGTGGHVFPALACAREFQKRGYSVHwLGTPRGIENELvPQAGLPLHLIQVS-GLRGKG-KLSLLKAPFTLVKAVLQARRIIRQL 94 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130 kp v+gfggyv ++ ++aa+l+g+p++++Eqn+++g +n+ll sp|A5W8Q0|MURG_PSEP1 95 KPVCVLGFGGYVTGPGGVAARLCGVPLVIHEQNARAGTANRLL 137 ****************************************986 PP >> sp|Q1I5B8|MURG_PSEE4 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 116.2 0.4 5.5e-35 3.1e-32 1 134 [. 8 141 .. 8 145 .. 0.97 Alignments for each domain: == domain 1 score: 116.2 bits; conditional E-value: 5.5e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+++ ++agl+ + i++ +l+ k+ +l+ lk ++ ka+ +a++i++e sp|Q1I5B8|MURG_PSEE4 8 VLIMAGGTGGHVFPALACAREFQARGYSVHwLGTPRGIENELvPQAGLPLHLIQVT-GLRGKG-KLSLLKAPFTLVKAVLQARRIVREL 94 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134 kp v+gfggyv ++ ++aa+l+g+p++++Eqn+++g +n+ll a sp|Q1I5B8|MURG_PSEE4 95 KPVCVIGFGGYVTGPGGVAARLCGVPLVIHEQNARAGTANRLLVPLA 141 *****************************************987665 PP >> sp|Q87WY5|MURG_PSESM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.4 0.3 1.2e-35 6.5e-33 1 137 [. 5 141 .. 5 142 .. 0.98 Alignments for each domain: == domain 1 score: 118.4 bits; conditional E-value: 1.2e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG++V+ l+tp+g+e+++ ++agl+ + i++ +l+ k+ l+ lk ++ lkal +a++++++ sp|Q87WY5|MURG_PSESM 5 VLIMAGGTGGHVFPALACAREFQARGYKVHwLGTPRGIENELiPQAGLPLHLINVT-GLRGKG-RLSLLKAPFMLLKALMQARKVVRQV 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kp vvgfggyv ++ ++aa+lag+p++++Eqn+++g +n+ l+ +a +v sp|Q87WY5|MURG_PSESM 92 KPVCVVGFGGYVTGPGGLAARLAGVPLIIHEQNAVAGTANRSLASFASRV 141 ********************************************999886 PP >> sp|C3L230|MURG_CLOB6 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.5 0.0 1e-35 5.8e-33 1 138 [. 4 141 .. 4 142 .. 0.98 Alignments for each domain: == domain 1 score: 118.5 bits; conditional E-value: 1e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggGT+G+v P +Al eL++ G+e++ +++ +g+e+++ e++g+e+ pi ++ kl++++ lk++++++++lk++++ak+i+k++ sp|C3L230|MURG_CLOB6 4 IIMTGGGTAGHVTPNLALVPELKKLGYEIKyIGSIEGIERKIiEKEGIEYFPISSG-KLRRYF-DLKNFSDPFKVLKGVFQAKKIIKKE 90 689*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpd+v++ gg+v ++++iaa l++ip++ +E++ pgl+nkl ++++v sp|C3L230|MURG_CLOB6 91 KPDIVFSKGGFVTVPVVIAAHLNKIPVIAHESDITPGLANKLATPYCTRVC 141 ********************************************9999985 PP >> sp|A1WC06|MURG_ACISJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.4 0.1 1.2e-35 6.5e-33 2 138 .. 52 188 .. 51 189 .. 0.98 Alignments for each domain: == domain 1 score: 118.4 bits; conditional E-value: 1.2e-35 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+++P +Ala++L++rG++V+ l+tp +ee++ + +g +++pi+ +++ k+ + l +++ +a +a++++++ + sp|A1WC06|MURG_ACISJ 52 LVMAGGTGGHIFPGLALAEALRERGWQVHwLGTPGSMEERLvPPRGFAFEPIDFS-GVRGKG-LKTLLALPLRLARACLQARAVVRRLQ 138 689****************************************************.****99.99999999****************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g ggyv + +iaa+la+ p+ ++Eqn++pg++nkll+r a++v+ sp|A1WC06|MURG_ACISJ 139 PDVVIGLGGYVTFPGGIAARLARKPLLLHEQNSVPGMANKLLSRLATRVY 188 ***********************************************998 PP >> sp|B9MFR2|MURG_DIAST UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.4 0.1 1.2e-35 6.5e-33 2 138 .. 52 188 .. 51 189 .. 0.98 Alignments for each domain: == domain 1 score: 118.4 bits; conditional E-value: 1.2e-35 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+++P +Ala++L++rG++V+ l+tp +ee++ + +g +++pi+ +++ k+ + l +++ +a +a++++++ + sp|B9MFR2|MURG_DIAST 52 LVMAGGTGGHIFPGLALAEALRERGWQVHwLGTPGSMEERLvPPRGFAFEPIDFS-GVRGKG-LKTLLALPLRLARACLQARAVVRRLQ 138 689****************************************************.****99.99999999****************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g ggyv + +iaa+la+ p+ ++Eqn++pg++nkll+r a++v+ sp|B9MFR2|MURG_DIAST 139 PDVVIGLGGYVTFPGGIAARLARKPLLLHEQNSVPGMANKLLSRLATRVY 188 ***********************************************998 PP >> sp|B8ZQQ0|MURG_MYCLB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.2 2.2 6.3e-36 3.6e-33 1 138 [. 31 175 .. 31 176 .. 0.99 Alignments for each domain: == domain 1 score: 119.2 bits; conditional E-value: 6.3e-36 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+A+a++L++ +++Vr l+t++gle+++ +e+g++ + i+p +l++kl + + + ++++++a+r+++++++ sp|B8ZQQ0|MURG_MYCLB 31 VVLAGGGTAGHVEPAMAVADALRALDPQVRitaLGTSRGLETRLvPERGYHLELITPV-PLPRKL-TGDLARLPLRVWRAVRETRAVFE 117 79********************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHH.....HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal.....lagipanvaEqngipglvnkllprrangvl 138 +++vvvgfggyva++a++aa+ +++ip++v+E+n+++g++n++ r+a++vl sp|B8ZQQ0|MURG_MYCLB 118 VVEAHVVVGFGGYVALPAYLAARgiprvRRRIPVVVHEANARAGIANRVGVRTAERVL 175 *******************************************************997 PP >> sp|O69552|MURG_MYCLE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.2 2.2 6.3e-36 3.6e-33 1 138 [. 31 175 .. 31 176 .. 0.99 Alignments for each domain: == domain 1 score: 119.2 bits; conditional E-value: 6.3e-36 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+A+a++L++ +++Vr l+t++gle+++ +e+g++ + i+p +l++kl + + + ++++++a+r+++++++ sp|O69552|MURG_MYCLE 31 VVLAGGGTAGHVEPAMAVADALRALDPQVRitaLGTSRGLETRLvPERGYHLELITPV-PLPRKL-TGDLARLPLRVWRAVRETRAVFE 117 79********************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHH.....HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal.....lagipanvaEqngipglvnkllprrangvl 138 +++vvvgfggyva++a++aa+ +++ip++v+E+n+++g++n++ r+a++vl sp|O69552|MURG_MYCLE 118 VVEAHVVVGFGGYVALPAYLAARgiprvRRRIPVVVHEANARAGIANRVGVRTAERVL 175 *******************************************************997 PP >> sp|Q893R7|MURG_CLOTE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 116.8 0.0 3.6e-35 2.1e-32 1 138 [. 5 142 .. 5 143 .. 0.99 Alignments for each domain: == domain 1 score: 116.8 bits; conditional E-value: 3.6e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++l+ggGT+G+v P ++l +L++ G+eV ++t++g+e+ + +++g+++++i ++ kl++++ lk++++++++lk++ +a++i+k++ sp|Q893R7|MURG_CLOTE 5 IILTGGGTAGHVTPNISLIPKLKELGYEVQyIGTKDGIEKSLiKKEGIKYHEISSG-KLRRYF-DLKNFTDPFKVLKGIMEARKIIKKE 91 78******************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kp++v++ gg+va++++i+a l+++p++ +E++ pgl+nkl+ ++n+v sp|Q893R7|MURG_CLOTE 92 KPNIVFSKGGFVAVPVVIGAYLNKVPVISHESDMTPGLANKLSTPYCNKVC 142 ************************************************986 PP >> sp|A7GGX9|MURG_CLOBL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.4 0.0 1.2e-35 6.5e-33 1 138 [. 4 141 .. 4 142 .. 0.98 Alignments for each domain: == domain 1 score: 118.4 bits; conditional E-value: 1.2e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggGT+G+v P +Al eL++ G+e++ +++ +g+e+++ e++g+e+ pi ++ kl++++ lk++++++++lk++++ak+i+k++ sp|A7GGX9|MURG_CLOBL 4 IIMTGGGTAGHVTPNLALVPELKKSGYEIKyIGSIEGIERKIiEKEGIEYFPISSG-KLRRYF-DLKNFSDPFKVLKGVFQAKKIIKRE 90 689*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpd+v++ gg+v ++++iaa l++ip++ +E++ pgl+nkl ++++v sp|A7GGX9|MURG_CLOBL 91 KPDIVFSKGGFVTVPVVIAAHLNKIPVIAHESDITPGLANKLATPYCTRVC 141 ********************************************9999985 PP >> sp|B1IKH3|MURG_CLOBK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.4 0.0 1.2e-35 6.5e-33 1 138 [. 4 141 .. 4 142 .. 0.98 Alignments for each domain: == domain 1 score: 118.4 bits; conditional E-value: 1.2e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggGT+G+v P +Al eL++ G+e++ +++ +g+e+++ e++g+e+ pi ++ kl++++ lk++++++++lk++++ak+i+k++ sp|B1IKH3|MURG_CLOBK 4 IIMTGGGTAGHVTPNLALVPELKKSGYEIKyIGSIEGIERKIiEKEGIEYFPISSG-KLRRYF-DLKNFSDPFKVLKGVFQAKKIIKRE 90 689*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpd+v++ gg+v ++++iaa l++ip++ +E++ pgl+nkl ++++v sp|B1IKH3|MURG_CLOBK 91 KPDIVFSKGGFVTVPVVIAAHLNKIPVIAHESDITPGLANKLATPYCTRVC 141 ********************************************9999985 PP >> sp|C1FUF9|MURG_CLOBJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.4 0.0 1.2e-35 6.5e-33 1 138 [. 4 141 .. 4 142 .. 0.98 Alignments for each domain: == domain 1 score: 118.4 bits; conditional E-value: 1.2e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggGT+G+v P +Al eL++ G+e++ +++ +g+e+++ e++g+e+ pi ++ kl++++ lk++++++++lk++++ak+i+k++ sp|C1FUF9|MURG_CLOBJ 4 IIMTGGGTAGHVTPNLALVPELKKLGYEIKyIGSIEGIERKIiEKEGIEYFPISSG-KLRRYF-DLKNFSDPFKVLKGVFQAKKIIKRE 90 689*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpd+v++ gg+v ++++iaa l++ip++ +E++ pgl+nkl ++++v sp|C1FUF9|MURG_CLOBJ 91 KPDIVFSKGGFVTVPVVIAAHLNKIPVIAHESDITPGLANKLATPYCTRVC 141 ********************************************9999985 PP >> sp|A5I5J5|MURG_CLOBH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.4 0.0 1.2e-35 6.5e-33 1 138 [. 4 141 .. 4 142 .. 0.98 Alignments for each domain: == domain 1 score: 118.4 bits; conditional E-value: 1.2e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggGT+G+v P +Al eL++ G+e++ +++ +g+e+++ e++g+e+ pi ++ kl++++ lk++++++++lk++++ak+i+k++ sp|A5I5J5|MURG_CLOBH 4 IIMTGGGTAGHVTPNLALVPELKKLGYEIKyIGSIEGIERKIiEKEGIEYFPISSG-KLRRYF-DLKNFSDPFKVLKGVFQAKKIIKRE 90 689*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpd+v++ gg+v ++++iaa l++ip++ +E++ pgl+nkl ++++v sp|A5I5J5|MURG_CLOBH 91 KPDIVFSKGGFVTVPVVIAAHLNKIPVIAHESDITPGLANKLATPYCTRVC 141 ********************************************9999985 PP >> sp|A7FX11|MURG_CLOB1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.4 0.0 1.2e-35 6.5e-33 1 138 [. 4 141 .. 4 142 .. 0.98 Alignments for each domain: == domain 1 score: 118.4 bits; conditional E-value: 1.2e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggGT+G+v P +Al eL++ G+e++ +++ +g+e+++ e++g+e+ pi ++ kl++++ lk++++++++lk++++ak+i+k++ sp|A7FX11|MURG_CLOB1 4 IIMTGGGTAGHVTPNLALVPELKKLGYEIKyIGSIEGIERKIiEKEGIEYFPISSG-KLRRYF-DLKNFSDPFKVLKGVFQAKKIIKRE 90 689*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpd+v++ gg+v ++++iaa l++ip++ +E++ pgl+nkl ++++v sp|A7FX11|MURG_CLOB1 91 KPDIVFSKGGFVTVPVVIAAHLNKIPVIAHESDITPGLANKLATPYCTRVC 141 ********************************************9999985 PP >> sp|Q4ZNZ0|MURG_PSEU2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.2 0.4 1.3e-35 7.4e-33 1 137 [. 5 141 .. 5 142 .. 0.98 Alignments for each domain: == domain 1 score: 118.2 bits; conditional E-value: 1.3e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG++V+ l+tp+g+e+++ ++agl+ + i++ +l+ k+ l+ lk ++ lkal +a++++++ sp|Q4ZNZ0|MURG_PSEU2 5 VLIMAGGTGGHVFPALACAREFQARGYKVHwLGTPRGIENELvPQAGLTLHLINVT-GLRGKG-RLSLLKAPLMLLKALMQARKVVRQV 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kp vvgfggyv ++ ++aa+lag+p++++Eqn+++g +n+ l+ +a +v sp|Q4ZNZ0|MURG_PSEU2 92 KPVCVVGFGGYVTGPGGLAAKLAGVPLIIHEQNAVAGTANRSLASFASRV 141 ********************************************999886 PP >> sp|A4XI04|MURG_CALS8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 115.7 0.0 7.7e-35 4.3e-32 1 138 [. 8 147 .. 8 148 .. 0.98 Alignments for each domain: == domain 1 score: 115.7 bits; conditional E-value: 7.7e-35 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT+G+++PavA+a+ L++r + ++t +gle+++ +++g++++ i+++ +l+++l ++k++ ++++ ++r+a +ilk sp|A4XI04|MURG_CALS8 8 IVFSGGGTGGHIYPAVAVADYLKKRYNNLNivfIGTNEGLESKIvPQHGYKIEYIQAK-GLKRSL-TVKNVEVFLKFISGYRQALQILK 94 79***********************99988889*************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + kp+vv+ +ggyv++++ +aa++++i+++++Eqn+ pgl+nk+ +r+++++l sp|A4XI04|MURG_CALS8 95 RIKPKVVFVTGGYVSLPVALAARRLKIKTILHEQNAYPGLANKIISRFCEKIL 147 *************************************************9987 PP >> sp|A0R016|MURG_MYCS2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 117.6 0.8 2e-35 1.1e-32 1 138 [. 17 161 .. 17 162 .. 0.98 Alignments for each domain: == domain 1 score: 117.6 bits; conditional E-value: 2e-35 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+A+a++L++ +++Vr l+t++gle+++ +++g++ + i+p +l++k s + l+ + +++ a+r+++ +l sp|A0R016|MURG_MYCS2 17 VVLAGGGTAGHVEPAMAVADALRALDPDVRitaLGTQRGLETRLvPQRGYDLELITPV-PLPRKP-SKDLLRLPMRVRTAIRQTRDVLT 103 79********************************************************.*****9.*********************** PP HHHHHHHHHC----EEEE--HHH.....HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal.....lagipanvaEqngipglvnkllprrangvl 138 ++dvvvgfggyva++a++aa+ ++++p++v+E+n+++gl+n++ +r a +vl sp|A0R016|MURG_MYCS2 104 GVNADVVVGFGGYVALPAYLAARggltgRRKVPVVVHEANARAGLANRVGARSARRVL 161 ******************************************************9997 PP >> sp|A8YUN9|MURG_LACH4 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 116.8 0.0 3.5e-35 2e-32 1 137 [. 3 143 .. 3 145 .. 0.98 Alignments for each domain: == domain 1 score: 116.8 bits; conditional E-value: 3.5e-35 EEEE-------HHHHHHHHHHHHH---EEE.....EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.....latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 v+++ggGT+G+++P++A+ ++L++rG+ ++t++gle+++ ++ag+++++i+++ ++++k lk++ ++ +l+a+++a++i sp|A8YUN9|MURG_LACH4 3 VIFTGGGTGGHIYPIMAIIERLKERGISTNdkilfVGTKKGLESKIvPAAGVNFKTINIQ-GFNRKH-PLKNFETIKLFLQATKSARKI 89 789*********************************************************.****98.********************* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 lke+kpdvv+g+ggyv+++ +++a++ +ip+ ++E+n++ gl+nk+l +++++ sp|A8YUN9|MURG_LACH4 90 LKEFKPDVVLGTGGYVSGAMVYEAAKMHIPTMIHESNSVVGLANKFLGHYVDRI 143 **************************************************9987 PP >> sp|A1SL80|MURG_NOCSJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.6 0.4 9.9e-36 5.6e-33 1 139 [] 3 143 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 118.6 bits; conditional E-value: 9.9e-36 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+laggGT+G+ P++A a++L+r +++V+ l+tp+gle++v +eag++ + i+p +l+++ + lk +++ + a+r++ ++l sp|A1SL80|MURG_NOCSJ 3 VLLAGGGTAGHTSPLLATADALRRLEPDVEitcLGTPRGLENKVvPEAGYPLELIPPV-PLPRRP-GADLLKVPFRLRAAVRATHAVLD 89 79********************************************************.****99.9999999**************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 + +pdvvvg+ggyv+ +a++a++++gip++v+Eqn +pgl+n++ +r+a +v+v sp|A1SL80|MURG_NOCSJ 90 RVRPDVVVGYGGYVSMPAYVATRKRGIPLVVHEQNTVPGLANRAGARFAQRVAV 143 **************************************************9975 PP >> sp|Q88N76|MURG_PSEPK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 115.0 0.3 1.3e-34 7.1e-32 1 130 [. 8 137 .. 8 144 .. 0.98 Alignments for each domain: == domain 1 score: 115.0 bits; conditional E-value: 1.3e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+++ ++agl+ + i++ +l+ k+ +l+ lk ++ ka+ +a++i+++ sp|Q88N76|MURG_PSEPK 8 VLIMAGGTGGHVFPALACAREFQARGYSVHwLGTPRGIENELvPQAGLPLHLIQVS-GLRGKG-KLSLLKAPFTLVKAVLQARRIIRQL 94 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130 kp v+gfggyv ++ ++aa+l+g+p++++Eqn+++g +n+ll sp|Q88N76|MURG_PSEPK 95 KPVCVLGFGGYVTGPGGVAARLCGVPLVIHEQNARAGTANRLL 137 ****************************************986 PP >> sp|B1KYH7|MURG_CLOBM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 117.3 0.0 2.4e-35 1.4e-32 1 138 [. 4 141 .. 4 142 .. 0.98 Alignments for each domain: == domain 1 score: 117.3 bits; conditional E-value: 2.4e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggGT+G+v P +Al eL++ G+e++ +++ +g+e+++ e +g+e+ pi ++ kl++++ lk++++++++lk++++ak+i+k++ sp|B1KYH7|MURG_CLOBM 4 IIMTGGGTAGHVTPNLALVPELKKLGYEIKyIGSIEGIERKIiEREGIEYFPISSG-KLRRYF-DLKNFSDPFKVLKGVFQAKKIIKRE 90 689*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpd+v++ gg+v ++++iaa l++ip++ +E++ pgl+nkl ++++v sp|B1KYH7|MURG_CLOBM 91 KPDIVFSKGGFVTVPVVIAAHLNKIPVIAHESDITPGLANKLATPYCTRVC 141 ********************************************9999985 PP >> sp|Q24TE6|MURG_DESHY UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 117.2 0.1 2.7e-35 1.5e-32 1 138 [. 3 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 117.2 bits; conditional E-value: 2.7e-35 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+++ggGT+G+++Pa+A+a++ ++ ++ + ++t +g+e+++ +eag+e+ + ++ +l++kl sl+tlk + +kal ++k+ilk sp|Q24TE6|MURG_DESHY 3 VIVTGGGTGGHIYPALAIAKGILAQRPDAEilyIGTREGMEARLvPEAGIEFSGVSGQ-GLPRKL-SLETLKVGGKSFKALWETKQILK 89 689************************99999**************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd+vvg+ggyva+++++ a+l gip+ ++Eqn++pg++nk+l r++ +v+ sp|Q24TE6|MURG_DESHY 90 KFKPDLVVGTGGYVAGPVVLTAALFGIPTLLHEQNALPGITNKILTRFVRKVM 142 *************************************************9997 PP >> sp|Q3K744|MURG_PSEPF UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 117.0 0.5 3.1e-35 1.8e-32 1 137 [. 5 141 .. 5 142 .. 0.98 Alignments for each domain: == domain 1 score: 117.0 bits; conditional E-value: 3.1e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+ + ++agle + i++ +l+ k+ +l+ lk ++ lk++ +a++i+++ sp|Q3K744|MURG_PSEPF 5 VLIMAGGTGGHVFPALACAREFQARGYTVHwLGTPRGIENDLvPAAGLELHRINAT-GLRGKG-KLSLLKAPFMLLKSVWQARAIIRRL 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +p vvgfggyv ++ ++aa+lag+p++v+Eqn+++g +n+ll +a +v sp|Q3K744|MURG_PSEPF 92 RPVCVVGFGGYVTGPGGLAAKLAGVPVIVHEQNAVAGTANRLLVPFAARV 141 *******************************************9999876 PP >> sp|B1J3L2|MURG_PSEPW UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 113.8 0.4 3e-34 1.7e-31 1 130 [. 8 137 .. 8 144 .. 0.98 Alignments for each domain: == domain 1 score: 113.8 bits; conditional E-value: 3e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+++ ++agl+ + i++ +l+ k+ +l+ lk ++ ka+ +a++i+ + sp|B1J3L2|MURG_PSEPW 8 VLIMAGGTGGHVFPALACAREFQARGYTVHwLGTPRGIENELvPQAGLSLHLIQVS-GLRGKG-KLSLLKAPFTLVKAVLQARRIIGQL 94 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130 kp v+gfggyv ++ ++aa+l+g+p++++Eqn+++g +n+ll sp|B1J3L2|MURG_PSEPW 95 KPVCVIGFGGYVTGPGGVAARLCGVPLVIHEQNARAGTANRLL 137 ****************************************986 PP >> sp|B0K3H0|MURG_THEPX UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.4 0.0 2e-34 1.1e-31 2 138 .. 4 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 114.4 bits; conditional E-value: 2e-34 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+++Pa+A+a+e + + + ++t++gle+++ + +g e ++i+++ ++++kl sl+tlk++++ +l++a+ il e sp|B0K3H0|MURG_THEPX 4 LFAGGGTGGHIYPAIAIAKEILKNEKNAQilfVGTKKGLENELvPREGFELKTITVQ-GFKRKL-SLDTLKTIYKAMVGLKEANNILNE 90 89*********************99999999**************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +kpdvv+g+ggyv +++l a+l gip+ ++Eqn+ pgl+nk+l+r+++ v+ sp|B0K3H0|MURG_THEPX 91 FKPDVVIGTGGYVCGPVLMMAALKGIPTLIHEQNAFPGLTNKVLSRFVKVVA 142 ***********************************************99776 PP >> sp|B0K8K7|MURG_THEP3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.4 0.0 2e-34 1.1e-31 2 138 .. 4 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 114.4 bits; conditional E-value: 2e-34 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+++Pa+A+a+e + + + ++t++gle+++ + +g e ++i+++ ++++kl sl+tlk++++ +l++a+ il e sp|B0K8K7|MURG_THEP3 4 LFAGGGTGGHIYPAIAIAKEILKNEKNAQilfVGTKKGLENELvPREGFELKTITVQ-GFKRKL-SLDTLKTIYKAMVGLKEANNILNE 90 89*********************99999999**************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +kpdvv+g+ggyv +++l a+l gip+ ++Eqn+ pgl+nk+l+r+++ v+ sp|B0K8K7|MURG_THEP3 91 FKPDVVIGTGGYVCGPVLMMAALKGIPTLIHEQNAFPGLTNKVLSRFVKVVA 142 ***********************************************99776 PP >> sp|A3DE27|MURG_CLOTH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.0 0.0 2.7e-34 1.5e-31 1 138 [. 3 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 114.0 bits; conditional E-value: 2.7e-34 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+++ggGT+G++ P +A+a+ ++r+++ + ++t++gle+++ + ++ e++ i+++ ++++kl s++tl+ + e +++l +a++i+k sp|A3DE27|MURG_CLOTH 3 VIISGGGTAGHINPGLAIAKYIKKREPDTEilfIGTERGLEARLvPRENFEIKMIKVR-GFKRKL-SMDTLVAVKELFQGLAEARKIIK 89 6899******************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd+v+g+ggyv +++l++a++ +ip+ v+Eqn+ pg++nk+l++++++v+ sp|A3DE27|MURG_CLOTH 90 DYKPDLVIGTGGYVCGPVLFNASRMKIPTLVHEQNAFPGVTNKILSKFVDRVA 142 ***************************************************97 PP >> sp|A1TAW8|MURG_MYCVP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 116.6 1.1 4.1e-35 2.3e-32 1 138 [. 32 175 .. 32 176 .. 0.98 Alignments for each domain: == domain 1 score: 116.6 bits; conditional E-value: 4.1e-35 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G++ePa+A+a++L + +++Vr l+t++gle+++ +++g++ + i++ +l++kl s + ++ + ++l+a+r++++il sp|A1TAW8|MURG_MYCVP 32 VVLAGGGTAGHIEPAMAVADALTALDPDVRitaLGTERGLETRLvPQRGYHLELITLV-PLPRKL-SADLFRLPMRVLRAVRQTRRILD 118 79********************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHH....HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal....lagipanvaEqngipglvnkllprrangvl 138 e ++dvvvgfggyva++a++aa+ +++p++v+E+n+ +g +nk+ +r a +vl sp|A1TAW8|MURG_MYCVP 119 EVSADVVVGFGGYVAVPAYLAARslrtHRRVPVVVHEANASAGWANKVGARSAQRVL 175 **********************97777889***********************9997 PP >> sp|B8FT56|MURG_DESHD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.9 0.2 1.3e-34 7.6e-32 1 138 [. 3 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 114.9 bits; conditional E-value: 1.3e-34 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+++ggGT+G+++Pa+A+a++ ++ + ++t +g+e+++ +eagle+ + ++ +l++kl sl+tlk + +kal ++k+ilk sp|B8FT56|MURG_DESHD 3 VIVTGGGTGGHIYPALAIAKGILVHQPDAEilyIGTREGMEARLvPEAGLEFAGVSGQ-GLPRKL-SLETLKVGGKSFKALWETKQILK 89 689********************999999999**************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd+vvg+ggyva+++++ a+l gip+ ++Eqn++pg++nk+l r++ +v+ sp|B8FT56|MURG_DESHD 90 KFKPDLVVGTGGYVAGPVVLTAALFGIPTLLHEQNALPGITNKILTRFVRKVM 142 *************************************************9997 PP >> sp|Q9RWP0|MURG_DEIRA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 116.6 0.8 4.1e-35 2.3e-32 1 137 [. 4 141 .. 4 143 .. 0.98 Alignments for each domain: == domain 1 score: 116.6 bits; conditional E-value: 4.1e-35 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 vv+a+gGT+G+++PavA a+eL+ rG+eV ++ + g+ee + e +gl+++ ++++ kl+++++ +++l++ +++l +a+++l+ sp|Q9RWP0|MURG_DEIRA 4 VVMATGGTGGHIYPAVATAKELRGRGYEVAlMGQKGGMEEGIaEREGLTFYGVDAG-KLARSGQGRPDPRQLLKAGQGLAQARRTLAGL 91 79******************************************************.******************************** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +p++vvg+gg+++++ ++aa ++gip++++Eqn++ gl+++l rra v sp|Q9RWP0|MURG_DEIRA 92 NPAAVVGYGGFASLPGVLAAQSLGIPTILHEQNARLGLTQRLAVRRARAV 141 **********************************************9877 PP >> sp|B2I1J5|MURG_ACIBC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 113.7 0.3 3.1e-34 1.8e-31 1 135 [. 12 146 .. 12 149 .. 0.97 Alignments for each domain: == domain 1 score: 113.7 bits; conditional E-value: 3.1e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++ GT+G+v+Pa+A+a++Lq++G +V latp g+e+++ + +++++++i+++ +++ ++ +++l +++ lka+++a++ +k+ sp|B2I1J5|MURG_ACIBC 12 VMMMAAGTGGHVFPALAVAKQLQQQGCQVSwLATPTGMENRLlKDQNIPIYQIDIQ-GVRGNG-VIRKLAAPFKILKATFSAMRYMKQL 98 67899***************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 k d+v+gfggyva++ ++aa+l+gip+ ++Eqn+++g++n l+r a+ sp|B2I1J5|MURG_ACIBC 99 KVDAVAGFGGYVAGPGGLAARLLGIPVLIHEQNAVAGFTNAQLSRVAK 146 ****************************************99998776 PP >> sp|B0V9F5|MURG_ACIBY UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 113.7 0.3 3.1e-34 1.8e-31 1 135 [. 12 146 .. 12 149 .. 0.97 Alignments for each domain: == domain 1 score: 113.7 bits; conditional E-value: 3.1e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++ GT+G+v+Pa+A+a++Lq++G +V latp g+e+++ + +++++++i+++ +++ ++ +++l +++ lka+++a++ +k+ sp|B0V9F5|MURG_ACIBY 12 VMMMAAGTGGHVFPALAVAKQLQQQGCQVSwLATPTGMENRLlKDQNIPIYQIDIQ-GVRGNG-VIRKLAAPFKILKATFSAMRYMKQL 98 67899***************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 k d+v+gfggyva++ ++aa+l+gip+ ++Eqn+++g++n l+r a+ sp|B0V9F5|MURG_ACIBY 99 KVDAVAGFGGYVAGPGGLAARLLGIPVLIHEQNAVAGFTNAQLSRVAK 146 ****************************************99998776 PP >> sp|B7GV73|MURG_ACIB3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 113.7 0.3 3.1e-34 1.8e-31 1 135 [. 12 146 .. 12 149 .. 0.97 Alignments for each domain: == domain 1 score: 113.7 bits; conditional E-value: 3.1e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++ GT+G+v+Pa+A+a++Lq++G +V latp g+e+++ + +++++++i+++ +++ ++ +++l +++ lka+++a++ +k+ sp|B7GV73|MURG_ACIB3 12 VMMMAAGTGGHVFPALAVAKQLQQQGCQVSwLATPTGMENRLlKDQNIPIYQIDIQ-GVRGNG-VIRKLAAPFKILKATFSAMRYMKQL 98 67899***************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 k d+v+gfggyva++ ++aa+l+gip+ ++Eqn+++g++n l+r a+ sp|B7GV73|MURG_ACIB3 99 KVDAVAGFGGYVAGPGGLAARLLGIPVLIHEQNAVAGFTNAQLSRVAK 146 ****************************************99998776 PP >> sp|B7ICE5|MURG_ACIB5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 113.7 0.3 3.1e-34 1.8e-31 1 135 [. 12 146 .. 12 149 .. 0.97 Alignments for each domain: == domain 1 score: 113.7 bits; conditional E-value: 3.1e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++ GT+G+v+Pa+A+a++Lq++G +V latp g+e+++ + +++++++i+++ +++ ++ +++l +++ lka+++a++ +k+ sp|B7ICE5|MURG_ACIB5 12 VMMMAAGTGGHVFPALAVAKQLQQQGCQVSwLATPTGMENRLlKDQNIPIYQIDIQ-GVRGNG-VIRKLAAPFKILKATFSAMRYMKQL 98 67899***************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 k d+v+gfggyva++ ++aa+l+gip+ ++Eqn+++g++n l+r a+ sp|B7ICE5|MURG_ACIB5 99 KVDAVAGFGGYVAGPGGLAARLLGIPVLIHEQNAVAGFTNAQLSRVAK 146 ****************************************99998776 PP >> sp|A5D145|MURG_PELTS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 116.5 0.0 4.4e-35 2.5e-32 1 138 [. 3 142 .. 3 143 .. 0.97 Alignments for each domain: == domain 1 score: 116.5 bits; conditional E-value: 4.4e-35 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+A+ar+L++r + + ++t++g+e+ + +++g ++ i + +l +kl s+++l+ l++ +++ +a ei+ sp|A5D145|MURG_PELTS 3 FLVSGGGTGGHIYPALAIARGLKNRYPGAEilyMGTSNGMEADIvPAEGFPFTGISAS-GLERKL-SPRNLLALWQAVRGFCQAVEIIG 89 799**********************7766666**************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +++p++v+g+ggyv +++++aa l +ip+ ++Eqn++pg++n++l+r+a +v+ sp|A5D145|MURG_PELTS 90 RWRPEAVIGTGGYVCGPVVLAAVLKRIPTLIHEQNALPGVTNRILSRFASRVA 142 **************************************************997 PP >> sp|A3M9Y1|MURG_ACIBT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 113.7 0.3 3.1e-34 1.8e-31 1 135 [. 12 146 .. 12 149 .. 0.97 Alignments for each domain: == domain 1 score: 113.7 bits; conditional E-value: 3.1e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++ GT+G+v+Pa+A+a++Lq++G +V latp g+e+++ + +++++++i+++ +++ ++ +++l +++ lka+++a++ +k+ sp|A3M9Y1|MURG_ACIBT 12 VMMMAAGTGGHVFPALAVAKQLQQQGCQVSwLATPTGMENRLlKDQNIPIYQIDIQ-GVRGNG-VIRKLAAPFKILKATFSAMRYMKQL 98 67899***************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 k d+v+gfggyva++ ++aa+l+gip+ ++Eqn+++g++n l+r a+ sp|A3M9Y1|MURG_ACIBT 99 KVDAVAGFGGYVAGPGGLAARLLGIPVLIHEQNAVAGFTNAQLSRVAK 146 ****************************************99998776 PP >> sp|A9KK83|MURG_CLOPH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 115.3 0.0 1.1e-34 5.9e-32 1 134 [. 4 137 .. 4 142 .. 0.97 Alignments for each domain: == domain 1 score: 115.3 bits; conditional E-value: 1.1e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +vl+ggGT+G+v P +Al +L+++G+e++ +++ +g+e+++ e+ g++++ i ++ kl+++l +k++++++++lk++r+ak++lk+ sp|A9KK83|MURG_CLOPH 4 IVLTGGGTAGHVTPNIALIAGLKEQGYEIHyIGSYEGIERELiEKLGIPYHGISSG-KLRRYL-DIKNFSDPFKVLKGYREAKKLLKNL 90 79******************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134 p+vv++ gg+va+++++aa++++ipa+++E++ pgl+n+l+ a sp|A9KK83|MURG_CLOPH 91 DPNVVFSKGGFVAVPVVLAAKKRKIPAIIHESDMTPGLANRLCIPSA 137 ****************************************9876555 PP >> sp|C3KCT0|MURG_PSEFS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 115.0 0.5 1.3e-34 7.1e-32 1 134 [. 5 138 .. 5 142 .. 0.97 Alignments for each domain: == domain 1 score: 115.0 bits; conditional E-value: 1.3e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+++ ++agl+ + i++ +l+ k+ +l+ lk ++ lka+ +a++++++ sp|C3KCT0|MURG_PSEFS 5 VLIMAGGTGGHVFPALACAREFQNRGYTVHwLGTPRGIENELvPNAGLPLHLINVT-GLRGKG-KLSLLKAPFVLLKAVWQARKVIRDV 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134 +p v+gfggyv ++ ++aa+lag+p++v+Eqn+++g +n+ll a sp|C3KCT0|MURG_PSEFS 92 QPVCVLGFGGYVTGPGGVAAKLAGVPVIVHEQNAVAGTANRLLVPLA 138 *****************************************987665 PP >> sp|Q03EY2|MURG_PEDPA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.6 0.0 1.7e-34 9.5e-32 2 138 .. 4 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 114.6 bits; conditional E-value: 1.7e-34 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++ggGT+G+++Pa+Al +++++ +++ ++t++gle+++ + +g+++++i+++ +++++l sl+++k++ +l ++ ka++ +ke sp|Q03EY2|MURG_PEDPA 4 MVSGGGTGGHIYPALALIKQVKQSEPDSQilyVGTSKGLESKIvPDSGIDFKTINIQ-GFKRSL-SLENFKTIGLFLSSVVKARKMVKE 90 5899***********************9999**************************.****99.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +kpdvv+g+ggyv++++++aa+ g+p++++Eqn++ g++nk+l++++++++ sp|Q03EY2|MURG_PEDPA 91 FKPDVVLGTGGYVSGAVVFAASMMGVPTVIHEQNSVVGVTNKFLSKFVKKIA 142 *************************************************987 PP >> sp|A0QF52|MURG_MYCA1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.2 1.0 2.2e-34 1.3e-31 1 138 [. 34 178 .. 34 179 .. 0.99 Alignments for each domain: == domain 1 score: 114.2 bits; conditional E-value: 2.2e-34 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+A+a++L++ +++Vr l+t +gle+++ +e+g++ + i+p +l++k + + + + ++++a+r+++++l sp|A0QF52|MURG_MYCA1 34 VVLAGGGTAGHVEPAMAVADALKALDPNVRitsLGTARGLETRLvPERGYDLELITPV-PLPRKP-TGDLARLPSRVWRAVRETRAVLH 120 79********************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHH.....HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal.....lagipanvaEqngipglvnkllprrangvl 138 +dvv+gfggyva++a++aa+ + ++p++++E+n+ +gl+n++ +r+a +vl sp|A0QF52|MURG_MYCA1 121 AVDADVVIGFGGYVALPAYLAARgvsprKPRVPVVIHEANASAGLANRVGARTAQRVL 178 ***********************99999***************************997 PP >> sp|Q04B72|MURG_LACDB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.2 0.0 3.7e-33 2.1e-30 1 137 [. 3 143 .. 3 145 .. 0.96 2 ? 2.3 0.0 7.8 4.4e+03 71 102 .. 204 235 .. 179 240 .. 0.83 Alignments for each domain: == domain 1 score: 110.2 bits; conditional E-value: 3.7e-33 EEEE-------HHHHHHHHHHHHH---EEE.......EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.......latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkak 81 v+++ggGT+G+++P++Al ++L+++G ++ ++t++gle+++ ++ag+++++i+++ ++ +k l+++k+++ +lka+++ak sp|Q04B72|MURG_LACDB 3 VIFSGGGTGGHIYPIMALIERLKEEG--ICqddeilfVGTKKGLESKIvPAAGVNFKTIDIQ-GFDRKH-LLNNVKTIQLFLKATKRAK 87 689***********************..44568889**************************.****98.******************* PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 eil++++pdvv+g+ggyv+++++++a++ +ip+ ++E+n++ g++nk+l +++++ sp|Q04B72|MURG_LACDB 88 EILADFQPDVVLGTGGYVSGAIVYEASKMKIPTMIHESNSVVGVANKFLGHYVDKI 143 ****************************************************9987 PP == domain 2 score: 2.3 bits; conditional E-value: 7.8 HHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS Glyco_transf_28 71 aeglkalrkakeilkeakpdvvvgfggyvadl 102 ++ ++ + k+ + lk++ +v++++g+y+ d+ sp|Q04B72|MURG_LACDB 204 LAINRVMLKSLMELKKKPYQVIWATGTYYYDA 235 455567888999999999999**999999875 PP >> sp|Q1GAT5|MURG_LACDA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.2 0.0 3.7e-33 2.1e-30 1 137 [. 3 143 .. 3 145 .. 0.96 2 ? 2.3 0.0 7.8 4.4e+03 71 102 .. 204 235 .. 179 240 .. 0.83 Alignments for each domain: == domain 1 score: 110.2 bits; conditional E-value: 3.7e-33 EEEE-------HHHHHHHHHHHHH---EEE.......EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.......latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkak 81 v+++ggGT+G+++P++Al ++L+++G ++ ++t++gle+++ ++ag+++++i+++ ++ +k l+++k+++ +lka+++ak sp|Q1GAT5|MURG_LACDA 3 VIFSGGGTGGHIYPIMALIERLKEEG--ICqddeilfVGTKKGLESKIvPAAGVNFKTIDIQ-GFDRKH-LLNNVKTIQLFLKATKRAK 87 689***********************..44568889**************************.****98.******************* PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 eil++++pdvv+g+ggyv+++++++a++ +ip+ ++E+n++ g++nk+l +++++ sp|Q1GAT5|MURG_LACDA 88 EILADFQPDVVLGTGGYVSGAIVYEASKMKIPTMIHESNSVVGVANKFLGHYVDKI 143 ****************************************************9987 PP == domain 2 score: 2.3 bits; conditional E-value: 7.8 HHHHHHHHHHHHHHHHHHHHHHHHC----EEE CS Glyco_transf_28 71 aeglkalrkakeilkeakpdvvvgfggyvadl 102 ++ ++ + k+ + lk++ +v++++g+y+ d+ sp|Q1GAT5|MURG_LACDA 204 LAINRVMLKSLMELKKKPYQVIWATGTYYYDA 235 455567888999999999999**999999875 PP >> sp|Q4K6J3|MURG_PSEF5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.7 0.6 1.6e-34 9.1e-32 1 134 [. 5 138 .. 5 142 .. 0.97 Alignments for each domain: == domain 1 score: 114.7 bits; conditional E-value: 1.6e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+ + ++agl+ + i++ +l+ k+ +l+ lk ++ ka+ +a++++++ sp|Q4K6J3|MURG_PSEF5 5 VLIMAGGTGGHVFPALACAREFQARGYTVHwLGTPRGIENDLvPAAGLPLHLINVS-GLRGKG-KLSLLKAPFVLIKAVLQARRVIRQL 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134 kp v+gfggyv ++ ++aa+l+g+p++v+Eqn+++g +n+ll a sp|Q4K6J3|MURG_PSEF5 92 KPVCVLGFGGYVTGPGGVAAKLSGVPVIVHEQNAVAGTANRLLVPLA 138 *****************************************987665 PP >> sp|B0VNZ9|MURG_ACIBS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 112.1 0.3 1e-33 5.8e-31 1 135 [. 12 146 .. 12 149 .. 0.97 Alignments for each domain: == domain 1 score: 112.1 bits; conditional E-value: 1e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++ GT+G+v+Pa+A+a++Lq++G +V latp g+e+++ + +++++++i+++ +++ ++ +++l +++ lka+++a++ +k+ sp|B0VNZ9|MURG_ACIBS 12 VMMMAAGTGGHVFPALAVAKQLQQQGCQVSwLATPIGMENRLlKDQNIPIYQIDIQ-GVRGNG-VIRKLAAPFKILKATFSAMRYMKQL 98 67899***************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 k d+v+gfggyva++ ++aa+l+gip+ ++Eqn+++g++n l+r a+ sp|B0VNZ9|MURG_ACIBS 99 KVDAVAGFGGYVAGPGGLAARLLGIPVLIHEQNAVAGFTNAQLSRVAK 146 ****************************************99998776 PP >> sp|Q5FKV2|MURG_LACAC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 112.3 0.0 8.8e-34 5e-31 1 137 [. 3 143 .. 3 145 .. 0.97 Alignments for each domain: == domain 1 score: 112.3 bits; conditional E-value: 8.8e-34 EEEE-------HHHHHHHHHHHHH---EEE.....EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.....latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 v+++ggGT+G+++P++A+ ++L++rG+ ++t++gle+++ ++ag+++++i+++ ++++k lk++ ++ +++a+++a++i sp|Q5FKV2|MURG_LACAC 3 VIFTGGGTGGHIYPIMAIIERLKERGISKNdeilfVGTQKGLESKIvPAAGVNFETIQIQ-GFNRKH-PLKNFETIKLFFQATKSARKI 89 789***********************87778999**************************.****98.********************* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 l+e+kpdvv+g+ggyv+++ +++a++ +ip+ ++E+n++ gl+nk+l +++++ sp|Q5FKV2|MURG_LACAC 90 LQEFKPDVVLGTGGYVSGAMVYEAAKMHIPTMIHESNSVVGLANKFLGHYVDKI 143 **************************************************9987 PP >> sp|A0KPX2|MURG_AERHH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 111.7 0.3 1.3e-33 7.3e-31 2 138 .. 6 142 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 111.7 bits; conditional E-value: 1.3e-33 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G+ ++ l+t +++e+++ +++g+++ i+++ +++ ++ + l+ +++ k++ +a+++lk + sp|A0KPX2|MURG_AERHH 6 LVMAGGTGGHVFPGLAVADRLKAQGWTIHwLGTADRMEAELvPAHGYPISFIDIQ-GVRGNG-IKRLLVAPYRIVKSVLQARRVLKTIR 92 789****************************************************.****99.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+gg+++++ ++aa+l+gip+ ++Eqn+ +gl+nkll+r a++vl sp|A0KPX2|MURG_AERHH 93 PDVVLGMGGFASGPGGVAAWLSGIPLLLHEQNAAAGLTNKLLARLAKRVL 142 ***********************************************997 PP >> sp|A1WYU3|MURG_HALHL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.1 2.4 2.4e-34 1.4e-31 1 132 [. 6 137 .. 6 144 .. 0.97 Alignments for each domain: == domain 1 score: 114.1 bits; conditional E-value: 2.4e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++a+gGT+G+v+P +A+a++L++rGh+V l+t gle +v ++agl+a+ ++++ + + k+ + +++ ++a+ a ++l+++ sp|A1WYU3|MURG_HALHL 6 VAIAAGGTGGHVYPGLAVADALRERGHRVVwLGTRAGLEGRVvPAAGLDAEWLEIG-GMRGKG-LATIAALPWRLGRAVAVAGAALRRQ 92 799*****************************************************.****99.9************************ PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGG CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllpr 132 +pdvv+g+ggyva+++++aa+lag p++++Eqn+++g++n++l+r sp|A1WYU3|MURG_HALHL 93 RPDVVLGMGGYVAGPVGLAARLAGRPLIIHEQNARAGMTNRFLAR 137 ******************************************987 PP >> sp|Q73YQ8|MURG_MYCPA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 113.0 1.5 5.5e-34 3.1e-31 1 138 [. 34 178 .. 34 179 .. 0.99 Alignments for each domain: == domain 1 score: 113.0 bits; conditional E-value: 5.5e-34 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+A+a++L++ +++Vr l+t +gle+++ +e+g++ + i+p +l++k + + + + ++++a+r+++++l sp|Q73YQ8|MURG_MYCPA 34 VVLAGGGTAGHVEPAMAVADALKALDPHVRitaLGTARGLETRLvPERGYDLELITPV-PLPRKP-TGDLARLPSRVWRAVRETRAVLH 120 79********************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHH.....HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal.....lagipanvaEqngipglvnkllprrangvl 138 +dvv+gfggyva++a++aa+ + ++p++++E+n+ +gl+n++ +r+a +vl sp|Q73YQ8|MURG_MYCPA 121 AVDADVVIGFGGYVALPAYLAARgvsprKPRVPVVIHEANASAGLANRVGARTAQRVL 178 ***********************99999***************************997 PP >> sp|B1MXW0|MURG_LEUCK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 113.4 0.3 3.9e-34 2.2e-31 1 137 [. 3 141 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 113.4 bits; conditional E-value: 3.9e-34 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+l+ggGT+G+++Pa+Ala+ ++ +++ + +++++g+e+ + +++g+++++++++ ++ ++l sl+++k+++ +lka++ +k+i+k sp|B1MXW0|MURG_LEUCK 3 VILSGGGTGGHIYPALALAEVIKQHEPDAEflyVGSERGVEANIvPKTGMAFKQLAVQ-GFSRSL-SLHNIKTVQLFLKAVKVSKKIIK 89 789*******************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 e+kpdvv+g+ggyva+++++aa + +ip++++Eqn+++g++nk+l+r a+++ sp|B1MXW0|MURG_LEUCK 90 EFKPDVVIGTGGYVAGAVVYAAQRMNIPTVIHEQNSVAGVTNKFLARGATKI 141 ***********************************************99987 PP >> sp|Q604V7|MURG_METCA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 112.8 0.3 6.1e-34 3.4e-31 1 138 [. 5 142 .. 5 142 .. 0.98 Alignments for each domain: == domain 1 score: 112.8 bits; conditional E-value: 6.1e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +v+++gGT+G+v+Pa+A+a +L+r+G eV ++t gle++v ++ag+++ + + + + k+ ++ k +a + a +a +il++ sp|Q604V7|MURG_METCA 5 IVILAGGTGGHVFPALAVAGKLRRAGAEVFwMGTRTGLEARVvPAAGYPIDWLSVS-GIRGKG-LASKAKAPAMLGLACLQALRILRRR 91 799*****************************************************.******.999999999999************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpd+v+g+gg+va++ ++ a+ +gip++++Eqn ipg +n++l+r an+vl sp|Q604V7|MURG_METCA 92 KPDAVLGMGGFVAGPGGLMARVLGIPLIIHEQNRIPGTTNRWLSRIANRVL 142 ************************************************986 PP >> sp|B2V1X5|MURG_CLOBA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 113.3 0.0 4.2e-34 2.3e-31 1 134 [. 6 139 .. 6 143 .. 0.97 Alignments for each domain: == domain 1 score: 113.3 bits; conditional E-value: 4.2e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v+++ggGT+G+v P +Al +L++ G eV+ +++++g+e+++ ++ ++++ +i ++ kl++++ lk++++++++lk++++a++ilk++ sp|B2V1X5|MURG_CLOBA 6 VIMTGGGTAGHVTPNLALVPALKENGFEVKyIGSKDGIEKEIiKNNNIPYFQISSG-KLRRYF-DLKNFSDPFKVLKGIKDANKILKKE 92 689*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134 kpdvv++ gg+va++++iaa l++ip++ +E++ pgl+nkl++ ++ sp|B2V1X5|MURG_CLOBA 93 KPDVVFSKGGFVAVPVVIAAHLRKIPVVAHESDMTPGLANKLSAPFC 139 *****************************************988765 PP >> sp|A1U3F8|MURG_MARAV UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 112.8 0.1 6e-34 3.4e-31 1 137 [. 9 145 .. 9 146 .. 0.98 Alignments for each domain: == domain 1 score: 112.8 bits; conditional E-value: 6e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A ar+Lq+rGheV+ l+++ g+ee++ + ++ i + +l+ k+ +l+ l+ +++ +al +a ++l++ sp|A1U3F8|MURG_MARAV 9 FLMMAGGTGGHVFPALATARALQQRGHEVHwLGASGGMEERLiGDTDIPLSLIHIS-GLRGKG-KLALLLAPFRLMRALGEAYTHLRRI 95 799*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +pd vvg+gg+v ++ +iaa+l + p++++Eqn+i+g++n++l r+ ++v sp|A1U3F8|MURG_MARAV 96 RPDCVVGMGGFVTGPGGIAAWLMRKPLVIHEQNAIAGMTNRWLTRFSETV 145 *******************************************9987665 PP >> sp|A8MH36|MURG_ALKOO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.0 0.0 4.4e-33 2.5e-30 1 138 [. 3 142 .. 3 143 .. 0.99 Alignments for each domain: == domain 1 score: 110.0 bits; conditional E-value: 4.4e-33 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+l+ggGT+G+++Pa+++a++ +++ ++ + ++t++g+e+++ ++ag++++ +++ l++k+ sl+++k++a lk++ +a++i+k sp|A8MH36|MURG_ALKOO 3 VILSGGGTGGHIYPAISIANKIKEQHPKAEilfIGTENGMESEIvPKAGYPIKYVTVS-YLKRKI-SLHNVKSAAMLLKGIAEARKIIK 89 789*******************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 e+kpd+v+g+gg+v +++l+ a+++gi + ++Eqn pgl+n++l+r++++++ sp|A8MH36|MURG_ALKOO 90 EFKPDIVIGTGGFVCGPVLYMASKLGIRTMIHEQNVFPGLTNRILDRYVDRIA 142 **************************************************986 PP >> sp|B2TLE0|MURG_CLOBB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 112.2 0.0 9.3e-34 5.3e-31 1 136 [. 6 141 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 112.2 bits; conditional E-value: 9.3e-34 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v+++ggGT+G+v P +Al L++ G eV+ +++++g+e+++ ++ ++++ +i ++ kl++++ +k++++++++lk++++a++ilk++ sp|B2TLE0|MURG_CLOBB 6 VIMTGGGTAGHVTPNLALVPSLKENGFEVKyIGSKDGIEKEIiKNNNIPYFQISSG-KLRRYF-DFKNFSDPFKVLKGIKDANRILKKE 92 689*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 kpdv+++ gg+va++++iaa l++ip++ +E++ pgl+nkl++ ++n+ sp|B2TLE0|MURG_CLOBB 93 KPDVIFSKGGFVAVPVVIAAHLRKIPVVAHESDMTPGLANKLSAPFCNK 141 ******************************************9999987 PP >> sp|A4SI56|MURG_AERS4 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.7 0.3 2.7e-33 1.5e-30 2 138 .. 6 142 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 110.7 bits; conditional E-value: 2.7e-33 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G+ ++ l+t +++e+++ +++g+++ i+++ +++ ++ + l +++ k++ +a+++lk + sp|A4SI56|MURG_AERS4 6 LVMAGGTGGHVFPGLAVADRLKAQGWTIHwLGTADRMEAELvPAHGYPISFIDIQ-GVRGNG-IKRLLAAPYRIVKSVLQARRVLKTIR 92 789****************************************************.****99.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+gg+++++ ++aa+l+gip+ ++Eqn+ +gl+nkll+r a++vl sp|A4SI56|MURG_AERS4 93 PDVVLGMGGFASGPGGVAAWLSGIPLLLHEQNAAAGLTNKLLARLAKRVL 142 ***********************************************997 PP >> sp|C4Z1B5|MURG_EUBE2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 111.0 0.0 2.2e-33 1.3e-30 1 137 [. 4 140 .. 4 142 .. 0.98 Alignments for each domain: == domain 1 score: 111.0 bits; conditional E-value: 2.2e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +vl+ggGT+G+v P +Al L+++G+eV +++ g+e+++ e g++++ i ++ kl+++ slk+l++++++l +l++ak+++k+ sp|C4Z1B5|MURG_EUBE2 4 IVLTGGGTAGHVTPNIALLPSLKEAGYEVFyIGSYTGIEKTLiEDLGIPYYGISSG-KLRRYR-SLKNLSDPFRVLHGLFQAKRLMKKI 90 79******************************************************.****88.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kpd+v++ gg+v++++++aa +++ip++++E++ pgl+nk+ +r+a+++ sp|C4Z1B5|MURG_EUBE2 91 KPDIVFSKGGFVSVPVVLAAGSRHIPVIIHESDMTPGLANKIAMRKATKI 140 ***********************************************987 PP >> sp|C1DQ99|MURG_AZOVD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 111.8 0.2 1.2e-33 6.9e-31 1 136 [. 5 140 .. 5 142 .. 0.97 Alignments for each domain: == domain 1 score: 111.8 bits; conditional E-value: 1.2e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+ + ++agl+ + i+++ +l+ k+ + lk +++ ++l++a++i+ e sp|C1DQ99|MURG_AZOVD 5 VLIMAGGTGGHVFPALACAREFQARGYAVHwLGTPRGIENDLvPSAGLPLHRIQIG-GLRGKG-LATLLKAPFQLIRSLFQARRIMNEL 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 +p v+g+gg+v ++ ++aa+l g+p++++Eqn+++g +n++l+ a++ sp|C1DQ99|MURG_AZOVD 92 RPVCVLGMGGFVTGPGGVAAKLTGAPLVIHEQNAVAGTSNRALAPLADR 140 *****************************************99887776 PP >> sp|Q6F703|MURG_ACIAD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.5 0.3 3.2e-33 1.8e-30 1 137 [. 12 148 .. 12 149 .. 0.97 Alignments for each domain: == domain 1 score: 110.5 bits; conditional E-value: 3.2e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++ GT+G+v+Pa+A+a++Lq+ G +V latp g+e+++ + +++++++i+++ +++ ++ +++l+ +++ lka+ +a++ +k+ sp|Q6F703|MURG_ACIAD 12 VMMMAAGTGGHVFPALAVAKQLQQHGCQVSwLATPAGMENRLlKDQNIPIYQIDIQ-GVRGNG-AVRKLLAPFKILKATYSAMRYMKQL 98 67899***************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 k d+v+gfggyva++ ++aa+ +gip+ ++Eqn+++g++n l+r a +v sp|Q6F703|MURG_ACIAD 99 KVDAVAGFGGYVAGPGGLAARILGIPILIHEQNAVAGFTNTQLARVASKV 148 ****************************************9998888765 PP >> sp|B1YIT7|MURG_EXIS2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 112.2 0.0 9.4e-34 5.3e-31 1 138 [. 3 141 .. 3 142 .. 0.97 Alignments for each domain: == domain 1 score: 112.2 bits; conditional E-value: 9.4e-34 EEEE-------HHHHHHHHHHHHH---.EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGh.eVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +v++ggGT+G+++Pa+A+ re rr + eV ++t++gle+ + + ag+++++i++ + +++l s++++k+ +++lk++ +++++l++ sp|B1YIT7|MURG_EXIS2 3 IVVSGGGTGGHIYPALAMIREIERRTPcEVLyIGTENGLEADIvRRAGIPFESIEIS-GIRRSL-SFENVKTGFRFLKSVVRVRKLLRD 89 799********************99865888**************************.****99.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++pd+vvg+gg+v +++l+ a++ g ++ v+Eqn++pg++nk+l+r++++v+ sp|B1YIT7|MURG_EXIS2 90 FQPDIVVGTGGFVCGPVLYTAAKMGYKTLVHEQNSLPGITNKFLARYVDRVA 141 *************************************************997 PP >> sp|C1CW40|MURG_DEIDV UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 111.1 1.8 2.1e-33 1.2e-30 1 137 [. 4 141 .. 4 143 .. 0.98 Alignments for each domain: == domain 1 score: 111.1 bits; conditional E-value: 2.1e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 vv+a+gGT+G+++PavA areL +rGhe l+ g+ee+v +e+gl+++ ++++ kl+++++ ++el++ +++ +a+++l+ sp|C1CW40|MURG_DEIDV 4 VVMATGGTGGHIYPAVATARELNARGHETLlLGQRGGMEERVaAEQGLSFEGVDAG-KLARSGQGRPDPRELFRAVRGVVEARRVLQAR 91 79******************************************************.******************************** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +p++vvg+gg+++++ ++aa ++gi+++++Eqn++ gl++++ ra v sp|C1CW40|MURG_DEIDV 92 RPALVVGYGGFASLPGVLAAQSLGIATVLHEQNARLGLTQRVAVGRARAV 141 ******************************************99999876 PP >> sp|Q47QW9|MURG_THEFY UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.4 0.3 3.3e-33 1.9e-30 1 132 [. 3 136 .. 3 142 .. 0.97 Alignments for each domain: == domain 1 score: 110.4 bits; conditional E-value: 3.3e-33 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+Ala++L+r ++ l+t++gle ++ + +g+e +i++ +l++kl +++ l+ + + +a+ a ++l sp|Q47QW9|MURG_THEFY 3 VVLAGGGTAGHVEPALALADALRRINPDTQvlcLGTKRGLEQRLvPMRGYELAEIPAV-PLPRKL-TPQLLSVPGRLANAISTAAKHLD 89 79**************************99999*************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGG CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllpr 132 + ++d++vgfggyva++ ++aa++++ip++v+E+n +pgl+n+l +r sp|Q47QW9|MURG_THEFY 90 RVQADILVGFGGYVATPGYLAARSRRIPIVVHEANPLPGLANRLGAR 136 ******************************************98765 PP >> sp|A0Q182|MURG_CLONN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 111.4 0.0 1.6e-33 9e-31 1 138 [. 6 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 111.4 bits; conditional E-value: 1.6e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggG++G+v P +Al +L++ G+e+ ++t++g+e+++ e+++++++ i ++ kl++++ +k++++++++lk++++ak+i+k++ sp|A0Q182|MURG_CLONN 6 IIMTGGGSAGHVTPNLALVPKLKELGYEIQyIGTENGIERKIiESENIKYHIISSG-KLRRYF-DIKNFSDPFKVLKGVFEAKKIIKRE 92 689*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kp++v++ gg+v+++++i+a+l++ip++ +E++ pgl+nkl + ++n+v sp|A0Q182|MURG_CLONN 93 KPNIVFSKGGFVSVPVVIGARLNRIPVISHESDMTPGLANKLAAPFCNKVC 143 ***********************************************9986 PP >> sp|A1KKJ6|MURG_MYCBP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 112.2 0.9 9.4e-34 5.3e-31 1 138 [. 38 185 .. 38 186 .. 0.98 Alignments for each domain: == domain 1 score: 112.2 bits; conditional E-value: 9.4e-34 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+A+a++L + +++Vr l+tp+gle+++ +++g++ + i++ + ++k + + + ++++a+r+a+ +l sp|A1KKJ6|MURG_MYCBP 38 VVLAGGGTAGHVEPAMAVADALVALDPRVRitaLGTPRGLETRLvPQRGYHLELITAV-PMPRKP-GGDLARLPSRVWRAVREARDVLD 124 79********************************************************.****99.999999999************** PP HHHHHHHHHC----EEEE--HHH........HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal........lagipanvaEqngipglvnkllprrangvl 138 + +dvvvgfggyva++a++aa+ +++ip++++E+n+++gl+n++ + +a++vl sp|A1KKJ6|MURG_MYCBP 125 DVDADVVVGFGGYVALPAYLAARglplpprrRRRIPVVIHEANARAGLANRVGAHTADRVL 185 ***********************************************************97 PP >> sp|C1AQ69|MURG_MYCBT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 112.2 0.9 9.4e-34 5.3e-31 1 138 [. 38 185 .. 38 186 .. 0.98 Alignments for each domain: == domain 1 score: 112.2 bits; conditional E-value: 9.4e-34 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+A+a++L + +++Vr l+tp+gle+++ +++g++ + i++ + ++k + + + ++++a+r+a+ +l sp|C1AQ69|MURG_MYCBT 38 VVLAGGGTAGHVEPAMAVADALVALDPRVRitaLGTPRGLETRLvPQRGYHLELITAV-PMPRKP-GGDLARLPSRVWRAVREARDVLD 124 79********************************************************.****99.999999999************** PP HHHHHHHHHC----EEEE--HHH........HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal........lagipanvaEqngipglvnkllprrangvl 138 + +dvvvgfggyva++a++aa+ +++ip++++E+n+++gl+n++ + +a++vl sp|C1AQ69|MURG_MYCBT 125 DVDADVVVGFGGYVALPAYLAARglplpprrRRRIPVVIHEANARAGLANRVGAHTADRVL 185 ***********************************************************97 PP >> sp|Q7VEP8|MURG_MYCBO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 112.2 0.9 9.4e-34 5.3e-31 1 138 [. 38 185 .. 38 186 .. 0.98 Alignments for each domain: == domain 1 score: 112.2 bits; conditional E-value: 9.4e-34 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+A+a++L + +++Vr l+tp+gle+++ +++g++ + i++ + ++k + + + ++++a+r+a+ +l sp|Q7VEP8|MURG_MYCBO 38 VVLAGGGTAGHVEPAMAVADALVALDPRVRitaLGTPRGLETRLvPQRGYHLELITAV-PMPRKP-GGDLARLPSRVWRAVREARDVLD 124 79********************************************************.****99.999999999************** PP HHHHHHHHHC----EEEE--HHH........HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal........lagipanvaEqngipglvnkllprrangvl 138 + +dvvvgfggyva++a++aa+ +++ip++++E+n+++gl+n++ + +a++vl sp|Q7VEP8|MURG_MYCBO 125 DVDADVVVGFGGYVALPAYLAARglplpprrRRRIPVVIHEANARAGLANRVGAHTADRVL 185 ***********************************************************97 PP >> sp|B0S0Z5|MURG_FINM2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 111.3 0.0 1.8e-33 1e-30 1 138 [. 3 142 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 111.3 bits; conditional E-value: 1.8e-33 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa++l +eL++r+ + + ++t++gle+ + ++ g+++++i ++ + ++k+ + +k l e +++lr+a++ilk sp|B0S0Z5|MURG_FINM2 3 IIVSGGGTGGHIYPAISLIEELKKRDKDNKilyVGTEKGLESSIvPKLGIDFKTIHVR-GIPRKI-NANSFKALKELFQGLREANKILK 89 6899***********************99999**************************.888888.77888888888888********* PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 e+kpd+v+g+ggyv++++l+ a++ ++++ +Eqn+ pg++n++l+r++++ + sp|B0S0Z5|MURG_FINM2 90 EFKPDLVIGTGGYVSGPILYKATKTKAKVAFHEQNSFPGITNRILSRYVDKYF 142 *************************************************9865 PP >> sp|B7UZJ0|MURG_PSEA8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 109.0 0.2 8.7e-33 4.9e-30 1 137 [. 5 141 .. 5 142 .. 0.97 Alignments for each domain: == domain 1 score: 109.0 bits; conditional E-value: 8.7e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+ + ++agl+ + i++ +l+ k+ + +k ++e lk+l++a +++++ sp|B7UZJ0|MURG_PSEA8 5 VLIMAGGTGGHVFPALACAREFQARGYAVHwLGTPRGIENDLvPKAGLPLHLIQVS-GLRGKG-LKSLVKAPLELLKSLFQALRVIRQL 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +p v+g ggyv ++ ++aa+l+g+p++++Eqn+++g +n+ l+ a +v sp|B7UZJ0|MURG_PSEA8 92 RPVCVLGLGGYVTGPGGLAARLNGVPLVIHEQNAVAGTANRSLAPIARRV 141 *****************************************998877765 PP >> sp|Q02H28|MURG_PSEAB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 109.0 0.2 8.7e-33 4.9e-30 1 137 [. 5 141 .. 5 142 .. 0.97 Alignments for each domain: == domain 1 score: 109.0 bits; conditional E-value: 8.7e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+ + ++agl+ + i++ +l+ k+ + +k ++e lk+l++a +++++ sp|Q02H28|MURG_PSEAB 5 VLIMAGGTGGHVFPALACAREFQARGYAVHwLGTPRGIENDLvPKAGLPLHLIQVS-GLRGKG-LKSLVKAPLELLKSLFQALRVIRQL 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +p v+g ggyv ++ ++aa+l+g+p++++Eqn+++g +n+ l+ a +v sp|Q02H28|MURG_PSEAB 92 RPVCVLGLGGYVTGPGGLAARLNGVPLVIHEQNAVAGTANRSLAPIARRV 141 *****************************************998877765 PP >> sp|Q9HW01|MURG_PSEAE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 109.0 0.2 8.7e-33 4.9e-30 1 137 [. 5 141 .. 5 142 .. 0.97 Alignments for each domain: == domain 1 score: 109.0 bits; conditional E-value: 8.7e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+ + ++agl+ + i++ +l+ k+ + +k ++e lk+l++a +++++ sp|Q9HW01|MURG_PSEAE 5 VLIMAGGTGGHVFPALACAREFQARGYAVHwLGTPRGIENDLvPKAGLPLHLIQVS-GLRGKG-LKSLVKAPLELLKSLFQALRVIRQL 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +p v+g ggyv ++ ++aa+l+g+p++++Eqn+++g +n+ l+ a +v sp|Q9HW01|MURG_PSEAE 92 RPVCVLGLGGYVTGPGGLAARLNGVPLVIHEQNAVAGTANRSLAPIARRV 141 *****************************************998877765 PP >> sp|A0PTI7|MURG_MYCUA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 111.6 0.5 1.4e-33 7.8e-31 1 138 [. 22 166 .. 22 167 .. 0.99 Alignments for each domain: == domain 1 score: 111.6 bits; conditional E-value: 1.4e-33 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+A+a++L +++Vr l+t++gle+++ +++g++ + i+p +l++k s + + + ++++++r+++++l sp|A0PTI7|MURG_MYCUA 22 VVLAGGGTAGHVEPAMAVADALSVLEPNVRitaLGTSRGLETRLvPARGYHLELITPV-PLPRKP-SGDLARLPPRVWRSVRETRAVLD 108 79********************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHH.....HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal.....lagipanvaEqngipglvnkllprrangvl 138 +dvv+gfggyva++a++aa+ +++ip++++E+n+++gl+n++ r+a++vl sp|A0PTI7|MURG_MYCUA 109 LVDADVVIGFGGYVALPAYLAARgipglRRRIPVVIHEANARAGLANRVGLRTADRVL 166 ***************************9****************************97 PP >> sp|A6VB85|MURG_PSEA7 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 109.0 0.2 8.7e-33 4.9e-30 1 137 [. 5 141 .. 5 142 .. 0.97 Alignments for each domain: == domain 1 score: 109.0 bits; conditional E-value: 8.7e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+ + ++agl+ + i++ +l+ k+ + +k ++e lk+l++a +++++ sp|A6VB85|MURG_PSEA7 5 VLIMAGGTGGHVFPALACAREFQARGYAVHwLGTPRGIENDLvPKAGLPLHLIQVS-GLRGKG-LKSLVKAPLELLKSLFQALRVIRQL 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +p v+g ggyv ++ ++aa+l+g+p++++Eqn+++g +n+ l+ a +v sp|A6VB85|MURG_PSEA7 92 RPVCVLGLGGYVTGPGGLAARLNGVPLVIHEQNAVAGTANRSLAPIARRV 141 *****************************************998877765 PP >> sp|A9KER3|MURG_COXBN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.7 0.1 2.6e-33 1.5e-30 1 135 [. 4 137 .. 4 141 .. 0.89 Alignments for each domain: == domain 1 score: 110.7 bits; conditional E-value: 2.6e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa+A+areL++++ +V l+++ glee++ + l+ +i++ ++++ l+ l+ +++ +a+++a +i+++ sp|A9KER3|MURG_COXBN 4 ILIIAGGTGGHIFPALAVARELREQEVDVQwLGVKGGLEEKLvpDSFPLHLIQIKAF-RGKR---GLQQLLMPLRLVRAVFQAYRIIRQ 88 6899*************************************9666666666666666.5555...66777778888899********** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +kpdv++g+ggyva++ ++aa+ + p++++Eqn+ipgl+n++l++ a+ sp|A9KER3|MURG_COXBN 89 FKPDVILGMGGYVAGPGGLAAWITRTPLIIHEQNSIPGLTNRVLAKMAK 137 ********************************************99886 PP >> sp|A9NA44|MURG_COXBR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.7 0.1 2.6e-33 1.5e-30 1 135 [. 4 137 .. 4 141 .. 0.89 Alignments for each domain: == domain 1 score: 110.7 bits; conditional E-value: 2.6e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa+A+areL++++ +V l+++ glee++ + l+ +i++ ++++ l+ l+ +++ +a+++a +i+++ sp|A9NA44|MURG_COXBR 4 ILIIAGGTGGHIFPALAVARELREQEVDVQwLGVKGGLEEKLvpDSFPLHLIQIKAF-RGKR---GLQQLLMPLRLVRAVFQAYRIIRQ 88 6899*************************************9666666666666666.5555...66777778888899********** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +kpdv++g+ggyva++ ++aa+ + p++++Eqn+ipgl+n++l++ a+ sp|A9NA44|MURG_COXBR 89 FKPDVILGMGGYVAGPGGLAAWITRTPLIIHEQNSIPGLTNRVLAKMAK 137 ********************************************99886 PP >> sp|B6J2Q3|MURG_COXB2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.7 0.1 2.6e-33 1.5e-30 1 135 [. 4 137 .. 4 141 .. 0.89 Alignments for each domain: == domain 1 score: 110.7 bits; conditional E-value: 2.6e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa+A+areL++++ +V l+++ glee++ + l+ +i++ ++++ l+ l+ +++ +a+++a +i+++ sp|B6J2Q3|MURG_COXB2 4 ILIIAGGTGGHIFPALAVARELREQEVDVQwLGVKGGLEEKLvpDSFPLHLIQIKAF-RGKR---GLQQLLMPLRLVRAVFQAYRIIRQ 88 6899*************************************9666666666666666.5555...66777778888899********** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +kpdv++g+ggyva++ ++aa+ + p++++Eqn+ipgl+n++l++ a+ sp|B6J2Q3|MURG_COXB2 89 FKPDVILGMGGYVAGPGGLAAWITRTPLIIHEQNSIPGLTNRVLAKMAK 137 ********************************************99886 PP >> sp|B6J5K3|MURG_COXB1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.7 0.1 2.6e-33 1.5e-30 1 135 [. 4 137 .. 4 141 .. 0.89 Alignments for each domain: == domain 1 score: 110.7 bits; conditional E-value: 2.6e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa+A+areL++++ +V l+++ glee++ + l+ +i++ ++++ l+ l+ +++ +a+++a +i+++ sp|B6J5K3|MURG_COXB1 4 ILIIAGGTGGHIFPALAVARELREQEVDVQwLGVKGGLEEKLvpDSFPLHLIQIKAF-RGKR---GLQQLLMPLRLVRAVFQAYRIIRQ 88 6899*************************************9666666666666666.5555...66777778888899********** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +kpdv++g+ggyva++ ++aa+ + p++++Eqn+ipgl+n++l++ a+ sp|B6J5K3|MURG_COXB1 89 FKPDVILGMGGYVAGPGGLAAWITRTPLIIHEQNSIPGLTNRVLAKMAK 137 ********************************************99886 PP >> sp|Q820X3|MURG_COXBU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.7 0.1 2.6e-33 1.5e-30 1 135 [. 4 137 .. 4 141 .. 0.89 Alignments for each domain: == domain 1 score: 110.7 bits; conditional E-value: 2.6e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa+A+areL++++ +V l+++ glee++ + l+ +i++ ++++ l+ l+ +++ +a+++a +i+++ sp|Q820X3|MURG_COXBU 4 ILIIAGGTGGHIFPALAVARELREQEVDVQwLGVKGGLEEKLvpDSFPLHLIQIKAF-RGKR---GLQQLLMPLRLVRAVFQAYRIIRQ 88 6899*************************************9666666666666666.5555...66777778888899********** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +kpdv++g+ggyva++ ++aa+ + p++++Eqn+ipgl+n++l++ a+ sp|Q820X3|MURG_COXBU 89 FKPDVILGMGGYVAGPGGLAAWITRTPLIIHEQNSIPGLTNRVLAKMAK 137 ********************************************99886 PP >> sp|Q042P9|MURG_LACGA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 109.8 0.0 5.2e-33 2.9e-30 1 137 [. 3 143 .. 3 145 .. 0.97 Alignments for each domain: == domain 1 score: 109.8 bits; conditional E-value: 5.2e-33 EEEE-------HHHHHHHHHHHHH---EEE.....EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.....latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 v+++ggGT+G+++P++Al ++L++r ++t +gle+++ ++ag+++++++++ ++ +k lk++ ++ + ka+++ak+i sp|Q042P9|MURG_LACGA 3 VIFSGGGTGGHIYPIMALIERLKERKLVTNdeilfVGTDRGLESKIvPAAGVPFRTLKIK-GFDRKH-PLKNFETIELFIKATKEAKQI 89 689***********************66659999**************************.****98.********************* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +k++kpdvvvg+ggyv+++++++a++ +ip++++E+n++ gl+nk+l+ +++++ sp|Q042P9|MURG_LACGA 90 IKDFKPDVVVGTGGYVSGAIVYEAAKMHIPTIIHESNSVVGLANKFLAHYVDKI 143 ***************************************************987 PP >> sp|B2HGR6|MURG_MYCMM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 111.4 0.9 1.7e-33 9.6e-31 1 138 [. 22 166 .. 22 167 .. 0.99 Alignments for each domain: == domain 1 score: 111.4 bits; conditional E-value: 1.7e-33 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+A+a++L +++Vr l+t +gle+++ +++g++ + i+p +l++k s + + + ++++a+r+++++l sp|B2HGR6|MURG_MYCMM 22 VVLAGGGTAGHVEPAMAVADALSVLEPNVRitaLGTARGLETRLvPARGYHLELITPV-PLPRKP-SGDLARLPPRVWRAVRETRAVLD 108 79********************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHH.....HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal.....lagipanvaEqngipglvnkllprrangvl 138 +dvv+gfggyva++a++aa+ +++ip++++E+n+++gl+n++ r+a++vl sp|B2HGR6|MURG_MYCMM 109 LVDADVVIGFGGYVALPAYLAARgipglRRRIPVVIHEANARAGLANRVGLRTADRVL 166 ***************************9****************************97 PP >> sp|Q0VS02|MURG_ALCBS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 109.9 0.2 4.8e-33 2.7e-30 1 132 [. 5 136 .. 5 140 .. 0.98 Alignments for each domain: == domain 1 score: 109.9 bits; conditional E-value: 4.8e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A+a++L++rG ++ l++++g+e + +++g+e+ ++ + +l+ + ++l+ +++ l+a+ +a+++++ sp|Q0VS02|MURG_ALCBS 5 VLIMAGGTGGHVFPALAVADQLRTRGFDILwLGAENGMEGNLvRQYGYEIAELSVS-RLRGGG-IKRKLTAPFNLLRAVLQARQLIRAR 91 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGG CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllpr 132 +p + vgfgg+++++ ++aa+l+++p++v+Eqn++pgl+n+ll+r sp|Q0VS02|MURG_ALCBS 92 QPVLAVGFGGFASGPGGLAARLCKVPVVVHEQNAVPGLTNRLLSR 136 *****************************************9987 PP >> sp|Q0RNP1|MURG_FRAAA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 111.2 1.6 1.9e-33 1.1e-30 1 133 [. 5 139 .. 5 145 .. 0.98 Alignments for each domain: == domain 1 score: 111.2 bits; conditional E-value: 1.9e-33 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+A+a++L++++++ r l+t gle+++ +++g+e +++ + +++ +++ lk + + ++a+r+a ++l sp|Q0RNP1|MURG_FRAAA 5 VVLAGGGTAGHVEPALAVADALRAADPRARltlLGTATGLEARLvPARGYELATVPKV-PMPRRP-TPALLKLPVRLFDAVRQAGATLD 91 79********************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133 + ++dvvvgfggyv+++a++aa+++gip++v+E+n +pg++n+l +r+ sp|Q0RNP1|MURG_FRAAA 92 RVRADVVVGFGGYVSVPAYLAARRRGIPIVVHEANPLPGMANRLGARF 139 *******************************************98876 PP >> sp|Q2RK79|MURG_MOOTA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.3 0.5 3.7e-33 2.1e-30 1 131 [. 3 135 .. 3 142 .. 0.96 Alignments for each domain: == domain 1 score: 110.3 bits; conditional E-value: 3.7e-33 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+++ggGT+G+v+Pa+A+ar+L+++ + V+ ++t +gle+ v + agl+ +i+++ +l ++ +k+++ l + +++l +a + ++ sp|Q2RK79|MURG_MOOTA 3 VIITGGGTGGHVYPALAIARGLKEARPGVEllyIGTARGLEADVvPRAGLTLATITVQ-GLVRRQ-VWKNIPALVKTGRGLGEAWQQVR 89 689*******************************************************.776655.9********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSG CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllp 131 +++pdvvvg+ggyv++++++aa+l+g+p++++Eqn+ pg++n+ll+ sp|Q2RK79|MURG_MOOTA 90 RFRPDVVVGTGGYVSGPVCLAAALQGVPVILHEQNAFPGVTNRLLA 135 ******************************************9875 PP >> sp|Q1IXV9|MURG_DEIGD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 111.0 1.8 2.2e-33 1.3e-30 1 137 [. 4 141 .. 4 143 .. 0.98 Alignments for each domain: == domain 1 score: 111.0 bits; conditional E-value: 2.2e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +v+a+gGT+G+++PavA+ reL +rGhe l+ g+ee+v +e+gl+++ ++++ kl+++++ ++el++ +++ +a++ l++a sp|Q1IXV9|MURG_DEIGD 4 IVMATGGTGGHIYPAVAVSRELLARGHEAVlLGQRGGMEERVaAEQGLPFQGVNAG-KLARSGQGRPDPRELLRAARGVAEARAFLRDA 91 79**************************999*************************.******************************** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +p +vvgfgg+++++ ++aa +gip++++Eqn++ gl+++l + ra v sp|Q1IXV9|MURG_DEIGD 92 RPGAVVGFGGFASLPGVLAAQTLGIPTVLHEQNARLGLTQRLAAGRARAV 141 *******************************************9999876 PP >> sp|Q74JY4|MURG_LACJO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.9 0.0 9.8e-33 5.5e-30 1 137 [. 3 143 .. 3 145 .. 0.97 Alignments for each domain: == domain 1 score: 108.9 bits; conditional E-value: 9.8e-33 EEEE-------HHHHHHHHHHHHH---EEE.....EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.....latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 v+++ggGT+G+++P++Al ++L++r ++t +gle+++ ++ag+++++++++ ++ +k lk++ ++ + ka+++ak+i sp|Q74JY4|MURG_LACJO 3 VIFSGGGTGGHIYPIMALIERLKERKLVTNdeilfVGTDRGLESKIvPAAGVPFKTLKIK-GFDRKH-PLKNFETIELFIKATKEAKQI 89 689***********************66659999**************************.****98.********************* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +k++kpdvvvg+ggyv+++++++a++ ++p++++E+n++ gl+nk+l+ +++++ sp|Q74JY4|MURG_LACJO 90 IKNFKPDVVVGTGGYVSGAIVYEAAKMHVPTIIHESNSVVGLANKFLAHYVDKI 143 ***************************************************987 PP >> sp|A5MZ55|MURG_CLOK5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 109.4 0.0 6.9e-33 3.9e-30 1 138 [. 4 141 .. 4 142 .. 0.99 Alignments for each domain: == domain 1 score: 109.4 bits; conditional E-value: 6.9e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++l+ggG++G+v P +Al +L++ G+e+ ++t+ g+e+++ e+++++++ i ++ kl++++ +k++++++++ k++++a +i++++ sp|A5MZ55|MURG_CLOK5 4 IILTGGGSAGHVTPNLALIPKLKELGYEIQyIGTESGIEREIiENEKIKYHVISSG-KLRRYF-DIKNFTDPFKVIKGIFQAIFIMRKE 90 78******************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kp+vv++ gg+v++++++aa +gip++ +E++ pgl+n+l++ ++++v sp|A5MZ55|MURG_CLOK5 91 KPNVVFSKGGFVSVPVVFAAYINGIPVIAHESDITPGLANRLSSPYCTKVC 141 ***********************************************9985 PP >> sp|A1TKD1|MURG_ACIAC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 109.5 0.4 6.5e-33 3.7e-30 2 138 .. 8 144 .. 7 145 .. 0.98 Alignments for each domain: == domain 1 score: 109.5 bits; conditional E-value: 6.5e-33 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+++P +A+a+eL++rG++V+ l+tp +e+++ + +g +++pi+ +++ k+ + + +++ l+a+ +a +++++ + sp|A1TKD1|MURG_ACIAC 8 LVMAGGTGGHIFPGLAVAEELRARGWKVHwLGTPGSMESRIvPPQGFAFEPIDFS-GVRGKG-LATLALLPLRLLRAFWQALAVVRRVQ 94 689****************************************************.******.99999********************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvvvg ggyv + + a l+g p++v+Eqn+++glvnk+l+ a++v+ sp|A1TKD1|MURG_ACIAC 95 PDVVVGLGGYVTFPGGMMAVLCGKPLVVHEQNSVAGLVNKVLAGVADRVF 144 ********************************************999997 PP >> sp|B7J0L2|MURG_BORBZ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 109.3 0.0 7.6e-33 4.3e-30 1 139 [] 7 148 .. 7 148 .. 0.99 Alignments for each domain: == domain 1 score: 109.3 bits; conditional E-value: 7.6e-33 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 + ++ggGT+G+v+P +++ ++L++ + e++ ++ ++ +ee++ e++++++ +i+++ kl++++ s+k++++++++ ++ k++++l sp|B7J0L2|MURG_BORBZ 7 IFFTGGGTGGHVFPGISIIQKLKEFDNEIEffwIGKKNSIEEKLikEQDNIKFISIPCG-KLRRYF-SFKNFTDFFKVILGIIKSFYVL 93 679****************************************99**************.******.********************** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 k++kp++++++gg+v+++a+ia++l++i+ + +E + pgl++k+++++an++++ sp|B7J0L2|MURG_BORBZ 94 KKYKPQLIYATGGFVSTPAIIASSLLKIKSITHEMDLDPGLATKINSKFANNIHI 148 ***************************************************9985 PP >> sp|O51708|MURG_BORBU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 109.3 0.0 7.6e-33 4.3e-30 1 139 [] 7 148 .. 7 148 .. 0.99 Alignments for each domain: == domain 1 score: 109.3 bits; conditional E-value: 7.6e-33 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 + ++ggGT+G+v+P +++ ++L++ + e++ ++ ++ +ee++ e++++++ +i+++ kl++++ s+k++++++++ ++ k++++l sp|O51708|MURG_BORBU 7 IFFTGGGTGGHVFPGISIIQKLKEFDNEIEffwIGKKNSIEEKLikEQDNIKFISIPCG-KLRRYF-SFKNFTDFFKVILGIIKSFYVL 93 679****************************************99**************.******.********************** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 k++kp++++++gg+v+++a+ia++l++i+ + +E + pgl++k+++++an++++ sp|O51708|MURG_BORBU 94 KKYKPQLIYATGGFVSTPAIIASSLLKIKSITHEMDLDPGLATKINSKFANNIHI 148 ***************************************************9985 PP >> sp|Q15Q17|MURG_PSEA6 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 109.3 0.7 7.4e-33 4.2e-30 2 138 .. 16 152 .. 15 153 .. 0.98 Alignments for each domain: == domain 1 score: 109.3 bits; conditional E-value: 7.4e-33 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++ ++++ l+t ++e+ + ++ag e+ i++ +++ ++ ++ l +++ ka+ +a+ ++k+ k sp|Q15Q17|MURG_PSEA6 16 LVMAGGTGGHVFPGLAVAQALKEQNWHIHwLGTAQRMEADLvPKAGFEISFIDIA-GVRGNG-LVRLLAAPFKIIKAVIQARGVIKQVK 102 789*************************************99*************.****99.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+gg+++++ ++aa+l g p++++Eqn+ pg++n+ll+r an+vl sp|Q15Q17|MURG_PSEA6 103 PDVVIGMGGFASGPGGVAAWLMGKPLVLHEQNAAPGMTNRLLARIANKVL 152 ************************************************97 PP >> sp|A7A179|ATG26_YEAS7 Sterol 3-beta-glucosyltransferase OS=Saccharomyces cerevisiae (strain YJM789) GN=ATG26 PE=3 SV # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.9 0.0 1e-32 5.7e-30 2 138 .. 743 878 .. 742 879 .. 0.96 Alignments for each domain: == domain 1 score: 108.9 bits; conditional E-value: 1e-32 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 l+++G+rGdv+P++Al+++L ++Gh+V ++t+ ++++fve++g+++++i+++ v++ + + +k+l+e+ ++ + sp|A7A179|ATG26_YEAS7 743 GLLTIGSRGDVQPYIALGKGLIKEGHQVVIITHSEFRDFVESHGIQFEEIAGNpvelmslmVENES--MNVKMLREASSK-------F 821 589***************************************************999997777777..899999999999.......* PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + +a +++++++++ + ++li++++a++ +++aE+++ip+++++++p+++++++ sp|A7A179|ATG26_YEAS7 822 RGWIDALLQTSWEVCNRRKFDILIESPSAMVGIHIAEALQIPYFRAFTMPWTRTRAY 878 *****************************************************9987 PP >> sp|Q1D0T0|MURG_MYXXD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 109.1 0.4 8.5e-33 4.8e-30 1 137 [. 4 142 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 109.1 bits; conditional E-value: 8.5e-33 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v++aggGT+G+++P +Ala+e+ +r h+ + ++t++g+e++v +++g++ + ++++ +l+ k+ +l+ lk l++ a+ ++++il+ sp|Q1D0T0|MURG_MYXXD 4 VLIAGGGTGGHLFPGIALAEEVVTRHHRNEvvfVGTERGIESRVvPKEGYPLELVKVQ-GLKGKG-FLSLLKALFALPLAFIESFRILA 90 799************************755559*************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 ++kpdvvvg+ggy++++++ aa+l gip+ + Eqn++pg++nk+l r + v sp|Q1D0T0|MURG_MYXXD 91 RQKPDVVVGVGGYASGPVVMAAWLMGIPTAIQEQNALPGFTNKVLGRIVRVV 142 ********************************************99887655 PP >> sp|Q1QVG7|MURG_CHRSD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.0 0.7 4.5e-33 2.5e-30 1 138 [. 9 146 .. 9 147 .. 0.99 Alignments for each domain: == domain 1 score: 110.0 bits; conditional E-value: 4.5e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v Pa++lar+L++rG V+ l++p+g+e+++ ++a + + i++ +l+ ++ + + l+ +++ ka+ +a+++++++ sp|Q1QVG7|MURG_CHRSD 9 VLIMAGGTGGHVVPALSLARALRARGVSVEwLGSPRGIENRLvPAADIVLHRIQVA-GLRGNG-MAGWLLAPWRLAKAVWQARQVIAKF 95 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p++vvg gg+++++ ++aa+l + ++v+Eqn+++g++n++l+r a+gv+ sp|Q1QVG7|MURG_CHRSD 96 DPQLVVGLGGFASGPGGLAAWLMRRRLIVHEQNAVAGMTNRYLSRLADGVY 146 *************************************************98 PP >> sp|A4VIH8|MURG_PSEU5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.0 0.3 4.6e-33 2.6e-30 1 132 [. 5 136 .. 5 142 .. 0.96 Alignments for each domain: == domain 1 score: 110.0 bits; conditional E-value: 4.6e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A are+q+rG+ V+ l+tp+g+e+++ ++agl+ + i++ +l+ k+ + +k +++ ++l++a++i++e sp|A4VIH8|MURG_PSEU5 5 VLIMAGGTGGHVFPALACAREFQTRGYAVHwLGTPRGIENELvPAAGLPLHLIQVS-GLRGKG-LASLIKAPLQLVRSLFQARRIIREL 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGG CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllpr 132 +p v+g ggyv ++ ++aa+lag+p++++Eqn+++g +n+ l sp|A4VIH8|MURG_PSEU5 92 RPVCVLGLGGYVTGPGGLAAKLAGVPLVIHEQNAVAGTANRSLVP 136 ****************************************98765 PP >> sp|Q38XM8|MURG_LACSS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.3 0.0 1.5e-32 8.3e-30 3 138 .. 2 143 .. 1 144 [. 0.91 Alignments for each domain: == domain 1 score: 108.3 bits; conditional E-value: 1.5e-32 EE-------HHHHHHHHHHHHH---..EEE..EEETGGGHHHH.HH---EEEE----S------....-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 3 laggGTrGdvePavAlareLqrrGh..eVr..latppgleefv.eeagleavpigpdvklwakle...slktlkelaeglkalrkakei 83 ++ggGT+G+++Pa+Al ++L++rG ++t++gle+++ + +g+++++++++ +++++++ ++lk++ + ++++ak+ sp|Q38XM8|MURG_LACSS 2 ISGGGTGGHIYPALALIERLKQRGLldA-VlyVGTERGLESKIvPDQGIDFKTLEIQ-GFKRSMNlngIKTNLKTIELFMSSIKSAKKM 88 789*********************6423.36**************************.7777554111568999999999********* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +ke+kpdvv+g+ggyv++ +l+aa+++++p++++Eqn+ +g++nk+l+r++++v+ sp|Q38XM8|MURG_LACSS 89 IKEFKPDVVIGTGGYVSGSLLYAASRLKVPTIIHEQNSAAGVTNKFLARFVDKVA 143 *****************************************************97 PP >> sp|A1SU19|MURG_PSYIN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.3 0.1 1.5e-32 8.3e-30 2 138 .. 8 144 .. 7 145 .. 0.97 Alignments for each domain: == domain 1 score: 108.3 bits; conditional E-value: 1.5e-32 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 v+++gGT+G+v+P +A+a++L+++G+ V l+t +++e+++ +++g+e+ i++ + + ++ + l+ + + k++ +a+ +lk+ + sp|A1SU19|MURG_PSYIN 8 VVMAGGTGGHVFPGLAVADALKEQGWAVSwLGTADRMEAQLvPKHGYEIDFIDIA-GIRGNG-LKRLLMAPIRIIKSIWQARSVLKKRR 94 899****************************************************.****99.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 d+v+g+gg+++++ +iaa++ gip++++Eqn+++gl+n++l+ + ++vl sp|A1SU19|MURG_PSYIN 95 VDLVLGMGGFASGPGGIAAWSMGIPVILHEQNAVAGLTNRILSLFSKRVL 144 ******************************************99888876 PP >> sp|Q31I59|MURG_THICR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.5 0.0 1.3e-32 7.1e-30 1 138 [. 4 141 .. 4 142 .. 0.98 Alignments for each domain: == domain 1 score: 108.5 bits; conditional E-value: 1.3e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+P +Ala++L ++ + l+t++g+e+++ +a++++++i++ +l+ ++ l+ lk +++++ka+r+a++i++++ sp|Q31I59|MURG_THICR 4 ILIMAGGTGGHVFPGLALAEALADKQVKTVwLGTCNGMEKQWvDAAKIPFYTIAIS-GLRGNG-LLGWLKAPFNVFKAWRQARYIIQQE 90 689*********************9988889*************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+gg+v ++ ++aal+++ p++++Eqn+ pgl+nkll+ +a++v+ sp|Q31I59|MURG_THICR 91 APDLVLGMGGFVCGPGGLAALSLNKPLVLHEQNATPGLTNKLLAPFAKKVI 141 ************************************************986 PP >> sp|Q04ET0|MURG_OENOB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.3 0.0 1.5e-32 8.7e-30 1 138 [. 3 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 108.3 bits; conditional E-value: 1.5e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+Al + L + +++ + +++ +gle + +++gl+++++ ++ ++ ++l sl+++k++ + ka++k+k i+ sp|Q04ET0|MURG_OENOB 3 IIVSGGGTGGHIYPALALVESLLKHEPDSKvlyIGSFRGLEGSIvPKTGLDFKQLHVQ-GFSRSL-SLTNFKTVNLFIKAVKKSKHIIH 89 6899************************9999**************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd+v+g+ggyv++++l+aa +++ip++++Eqn+i+g++nk+l+r a++++ sp|Q04ET0|MURG_OENOB 90 DFKPDIVLGTGGYVSGAVLYAAQRLRIPTVINEQNSIAGVTNKFLSRGADRIA 142 *************************************************9987 PP >> sp|Q2KVG0|MURG_BORA1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 109.6 0.6 6.1e-33 3.4e-30 1 138 [. 6 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 109.6 bits; conditional E-value: 6.1e-33 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G++ P +A+a+ L++rG++Vr l+ p+++e ++ +++g+e+ p+ + +l+ ++ + lk ++ +al +a+++++e sp|Q2KVG0|MURG_BORA1 6 ILIMAGGTGGHIMPGLAVAEILRQRGWQVRwLGNPDKMEGKLvPARGIEMAPLRFQ-GLRGRG-VTALLKLPLLLTRALLQARKHMAEI 92 689*****************************************************.****99.99*********************** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +pdvv+g+ggyva + ++ a+l++ p++v+Eqn+++g +n++l+r a++vl sp|Q2KVG0|MURG_BORA1 93 QPDVVLGMGGYVAFPGGVVAALRRTPLVVHEQNAVAGTANRWLARMAKNVL 143 ***********************************************9997 PP >> sp|Q5R0M1|MURG_IDILO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.5 0.2 1.3e-32 7.1e-30 1 138 [. 4 142 .. 4 143 .. 0.95 Alignments for each domain: == domain 1 score: 108.5 bits; conditional E-value: 1.3e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGG.GHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppg.leefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 v++a+ GT+G+++Pa+A+a++ ++ G++V l+t++g le++v ++a+ + ++i +++ ++ ++l ++ ka+ + +++lk sp|Q5R0M1|MURG_IDILO 4 VLIAAAGTGGHIFPALAVAEQMRDNGWQVDwLGTQEGrLESRViPAANFPLHSISMT-GVRGHG-LKRKLFMPFTLAKAVLQCRRLLKT 90 789*******************************98549******************.****99.777777777777************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p+vv+ fggyv ++ ++aa+l+gip++v+Eqn+ipg++++ll+ ran+v+ sp|Q5R0M1|MURG_IDILO 91 LQPQVVATFGGYVCAPMGLAAKLLGIPLVVHEQNAIPGMTTRLLAPRANKVM 142 **************************************************97 PP >> sp|Q5WAE4|MURG_BACSK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.1 0.0 1.8e-32 1e-29 1 136 [. 4 139 .. 4 142 .. 0.98 Alignments for each domain: == domain 1 score: 108.1 bits; conditional E-value: 1.8e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggG++G+v P +A+ +eL ++++ + +++ +g+e+++ e+ag+ + i ++ kl++++ +k+++++a+ +++r+a++ilk + sp|Q5WAE4|MURG_BACSK 4 IIFTGGGSAGHVTPNLAIINELNDKDWSIAyIGSYEGIERQLvEKAGIRYFGISSG-KLRRYM-DWKNVTDIARIANGFRQARKILKAE 90 689*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 kpdvv++ gg+v ++++ aa ++ip++++E++ pgl+n+l +r+an+ sp|Q5WAE4|MURG_BACSK 91 KPDVVFSKGGFVTVPVVAAAYTLRIPVHLHESDLTPGLANRLAKRFANT 139 ***********************************************97 PP >> sp|Q2JD50|MURG_FRASC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.6 1.0 2.4e-32 1.3e-29 1 131 [. 5 137 .. 5 141 .. 0.98 Alignments for each domain: == domain 1 score: 107.6 bits; conditional E-value: 2.4e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+A+a++L++ + +Vr l+t gle+++ +++g e +++ + +++ +++ +k +a++l+a+ +a e+l sp|Q2JD50|MURG_FRASC 5 VVLAGGGTAGHVEPALAVADALRATDSRVRltlLGTATGLEARLvPARGHELATVPKV-PMPRRP-TPAVFKLPARFLDAICQAGETLD 91 79********************************************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSG CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllp 131 ++dvvvgfggyv+++a++aa+++gip++v+E+n +pgl+n+l + sp|Q2JD50|MURG_FRASC 92 LVRADVVVGFGGYVSAPAYLAARRRGIPIVVHEANPLPGLANRLGA 137 ******************************************9865 PP >> sp|B5ELC3|MURG_ACIF5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.2 0.9 1.6e-32 8.8e-30 1 138 [. 5 142 .. 5 143 .. 0.97 Alignments for each domain: == domain 1 score: 108.2 bits; conditional E-value: 1.6e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++a+gGT+G+v+Pa+A+a++L+++G eV+ +t g+e+++ +e+g++ ++++ + +l+ k+ + l+ ++++ +a+ +a++il++ sp|B5ELC3|MURG_ACIF5 5 VLIAAGGTGGHVFPALAVADALRAQGVEVTfAGTATGMEARLvPERGYTLHTLDMQ-GLRGKG-IRRWLRAPWRVSRAILQARRILRQT 91 799***************************889***********************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +vv+g+ggyv ++++iaa+ +g p+ ++Eqn+++gl+n+ll+ a +v+ sp|B5ELC3|MURG_ACIF5 92 RSHVVLGMGGYVTAPVGIAAWTLGRPLCLHEQNAVAGLSNRLLAPLARRVF 142 ******************************************998888876 PP >> sp|B7J3V2|MURG_ACIF2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.2 0.9 1.6e-32 8.8e-30 1 138 [. 5 142 .. 5 143 .. 0.97 Alignments for each domain: == domain 1 score: 108.2 bits; conditional E-value: 1.6e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++a+gGT+G+v+Pa+A+a++L+++G eV+ +t g+e+++ +e+g++ ++++ + +l+ k+ + l+ ++++ +a+ +a++il++ sp|B7J3V2|MURG_ACIF2 5 VLIAAGGTGGHVFPALAVADALRAQGVEVTfAGTATGMEARLvPERGYTLHTLDMQ-GLRGKG-IRRWLRAPWRVSRAILQARRILRQT 91 799***************************889***********************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +vv+g+ggyv ++++iaa+ +g p+ ++Eqn+++gl+n+ll+ a +v+ sp|B7J3V2|MURG_ACIF2 92 RSHVVLGMGGYVTAPVGIAAWTLGRPLCLHEQNAVAGLSNRLLAPLARRVF 142 ******************************************998888876 PP >> sp|Q0SM88|MURG_BORAP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.4 0.0 1.4e-32 7.7e-30 1 139 [] 7 148 .. 7 148 .. 0.99 Alignments for each domain: == domain 1 score: 108.4 bits; conditional E-value: 1.4e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 + ++ggGT+G+++P +++ ++L++ + e++ ++ ++ +ee++ e+ ++++ +i+++ kl++++ s++++++++++ ++ k+++il sp|Q0SM88|MURG_BORAP 7 IFFTGGGTGGHIFPGISIIQKLKELDNEIEffwIGKKNSIEEKLikEQNNIKFISIPCG-KLRRYF-SFQNFTDFFKVIFGIIKSFYIL 93 679****************************************99**************.******.********************** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 k++kp++v+++gg+v+++ +ia++l++i+++ +E + pgl++k+++++an++++ sp|Q0SM88|MURG_BORAP 94 KKYKPQIVYATGGFVSTPTIIASSLLKIKRITHEMDLDPGLATKINSKFANKIYI 148 ****************************************************986 PP >> sp|Q4FQV9|MURG_PSYA2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.9 0.2 1.9e-32 1.1e-29 1 138 [. 6 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 107.9 bits; conditional E-value: 1.9e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++ GT+G+v+Pa+A+ +eL +rG ++ l+tp+g+e+ + + +g+++++i+ + +l+ k+ + lk + l a+ ++ +i++ + sp|Q4FQV9|MURG_PSYA2 6 ILMMAAGTGGHVFPALAVSEELSKRGAIIHwLGTPNGMENGLvAPTGYPFHAIEMQ-GLRGKG-IGRLLKMPVTLLSATMAVIKIIRGN 92 6899**********************9999************9*************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 k+d vvgfggyv+++ +iaa+l + p++++Eqn+i+g++n++l++ a++vl sp|Q4FQV9|MURG_PSYA2 93 KIDMVVGFGGYVSAPGGIAARLTKTPLIIHEQNAIAGMSNRYLAKMATKVL 143 ************************************************997 PP >> sp|Q730T5|MURG2_BACC1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 106.6 0.0 5.1e-32 2.9e-29 1 138 [. 4 141 .. 4 142 .. 0.99 Alignments for each domain: == domain 1 score: 106.6 bits; conditional E-value: 5.1e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +v++ggG++G+v P +A+ +Lq++ +++ ++++ g+e+++ e++g+++++i+++ kl++++ lk++k+++ + k++ +a +++ sp|Q730T5|MURG2_BACC1 4 IVFTGGGSAGHVTPNLAIIPHLQEQNWDISyIGSHQGIEKTIiEKEGIPYYSIASG-KLRRYF-DLKNIKDPFLVMKGVMDAYVRIRK 89 79******************************************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdv+++ gg+v+++++i+ +l+++p+ ++E++ pgl+nk+ r+a +++ sp|Q730T5|MURG2_BACC1 90 LKPDVIFSKGGFVSVPVVIGGWLNRVPVLLHESDMTPGLANKIALRFASKIF 141 ***********************************************99987 PP >> sp|Q1LSW5|MURG_BAUCH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 106.7 0.0 4.6e-32 2.6e-29 2 138 .. 7 143 .. 6 144 .. 0.97 Alignments for each domain: == domain 1 score: 106.7 bits; conditional E-value: 4.6e-32 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+++P +A+a+ ++G++Vr l+t++++e+ + +++g++++ + + ++ ++ + ++++ + + l+a+ ++ +i+++++ sp|Q1LSW5|MURG_BAUCH 7 IIVAGGTGGHIFPGLAIANNMITQGWDVRwLGTKNRIEADLvPKHGITTYFLSIY-GYGLHG-KKQKILAIVSILQAVLQSYYIMRKWR 93 6789************************************99*********9999.999999.99999999999*************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+v+g+ggy++++ ++aa+ ++ip++++Eqn + gl+n +l+++a++vl sp|Q1LSW5|MURG_BAUCH 94 PDIVLGMGGYISGPCGLAAWMCKIPLVIHEQNRVTGLTNYYLSKFAKKVL 143 ***********************************************997 PP >> sp|Q9WY74|MURG_THEMA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.1 0.2 1.7e-32 9.8e-30 1 139 [] 4 146 .. 4 146 .. 0.96 Alignments for each domain: == domain 1 score: 108.1 bits; conditional E-value: 1.7e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeil 84 v+ aggGT+G+++P++A+ ++L +r +V+ +a++ +++e+v ++++ e++++ +d +l + l+++k+l+++++ + a+ ++k++l sp|Q9WY74|MURG_THEMA 4 VAAAGGGTGGHLYPLLAILETLAKRV-DVKvlfFAVKGKIDERVvRKDHPEFETVSIDvRGLLRPLHHPKNLWRTLKIGIATIEVKKHL 91 5789*********************9.99999**********************7777669999************************* PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 k++kpd+vv +ggy+++++++aa+ +gip++v+Eqn +pgl+ k+l+++a++v+v sp|Q9WY74|MURG_THEMA 92 KRFKPDLVVLTGGYISGVVGLAAKDLGIPIFVHEQNVVPGLAVKVLSQYAKKVFV 146 ****************************************************986 PP >> sp|B1L9S1|MURG_THESQ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.1 0.1 1.7e-32 9.8e-30 1 139 [] 4 146 .. 4 146 .. 0.96 Alignments for each domain: == domain 1 score: 108.1 bits; conditional E-value: 1.7e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeil 84 ++ aggGT+G+++P++A+ ++L +r +V+ +a++ +++e+v ++++ e++++ +d +l + l+++k+l+++++ + a+ ++k++l sp|B1L9S1|MURG_THESQ 4 IAAAGGGTGGHLYPLLAILETLAKRV-DVKvlfFAVKGKIDERVvRKDHPEFETVSIDvRGLLRPLHHPKNLWRTLKIGIATIEVKKHL 91 5789*********************9.99999**********************7777669999************************* PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 k++kpd+vv +ggy+++++++aa+ +gip++v+Eqn +pgl+ k+l+++a++v+v sp|B1L9S1|MURG_THESQ 92 KRFKPDLVVLTGGYISGVVGLAAKDLGIPIFVHEQNVVPGLAVKVLSQYAKKVFV 146 ****************************************************986 PP >> sp|A5IKI9|MURG_THEP1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.1 0.2 1.7e-32 9.8e-30 1 139 [] 4 146 .. 4 146 .. 0.96 Alignments for each domain: == domain 1 score: 108.1 bits; conditional E-value: 1.7e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeil 84 v+ aggGT+G+++P++A+ ++L +r +V+ +a++ +++e+v ++++ e++++ +d +l + l+++k+l+++++ + a+ ++k++l sp|A5IKI9|MURG_THEP1 4 VAAAGGGTGGHLYPLLAILETLAKRV-DVKvlfFAVKGKIDERVvRKDHPEFETVSIDvRGLLRPLHHPKNLWRTLKIGIATIEVKKHL 91 5789*********************9.99999**********************7777669999************************* PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 k++kpd+vv +ggy+++++++aa+ +gip++v+Eqn +pgl+ k+l+++a++v+v sp|A5IKI9|MURG_THEP1 92 KRFKPDLVVLTGGYISGVVGLAAKDLGIPIFVHEQNVVPGLAVKVLSQYAKKVFV 146 ****************************************************986 PP >> sp|A4FLW0|MURG_SACEN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.5 0.6 2.6e-32 1.4e-29 1 138 [. 22 160 .. 22 161 .. 0.97 Alignments for each domain: == domain 1 score: 107.5 bits; conditional E-value: 2.6e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vv+aggGT+G++ePa+Ala++++r ++ r l+t++gle+++ +++g++ + ++p + ++k +++ lk ++++++++++++e+l sp|A4FLW0|MURG_SACEN 22 VVVAGGGTAGHIEPALALADAVRRLRPDARvtaLGTERGLENRLvPARGYPLELVPPV-PMPRKP-TPELLKLPLKVRESVKRTREVLD 108 79****************************99**************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +dvvvgfggyv+++a++a ++ + p++v+E+n+++gl+nk+ +++a++vl sp|A4FLW0|MURG_SACEN 109 RVGADVVVGFGGYVSLPAYLA-ARGKTPIVVHEANARAGLANKVGAKFAERVL 160 ********************5.56789***********************997 PP >> sp|Q9RNM6|MURG_ZYMMO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.7 0.9 2.3e-32 1.3e-29 2 138 .. 8 142 .. 7 143 .. 0.95 Alignments for each domain: == domain 1 score: 107.7 bits; conditional E-value: 2.3e-32 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeilkeak 88 +la+gGT+G++ Pa Ala+eL+rrGh+V l+t ++ ++f + +++++++++ +++ k+ +++++++++g +++a +++++++ sp|Q9RNM6|MURG_ZYMMO 8 ILAAGGTGGHMIPAHALAVELMRRGHHVALVTDERGTRFPeLFKDVQIHQLPAGrLTGGVKG-LFQAMRNIWAG---RERALTLYENFT 92 79**************************************99***********986666667.89999999999...************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p++vvgfggy a++al+aa +a+ip++++Eqn+++g +n++l+ r++ ++ sp|Q9RNM6|MURG_ZYMMO 93 PAAVVGFGGYPALPALLAAFKAKIPTVIHEQNAVMGRTNRFLAGRVDAIA 142 *********************************************99875 PP >> sp|Q06321|ATG26_YEAST Sterol 3-beta-glucosyltransferase OS=Saccharomyces cerevisiae GN=ATG26 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.1 0.0 3.5e-32 1.9e-29 2 138 .. 743 878 .. 742 879 .. 0.96 Alignments for each domain: == domain 1 score: 107.1 bits; conditional E-value: 3.5e-32 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 l+++G+rGdv+P++Al+++L ++Gh+V ++t+ ++++fve++g+++++i+++ v++ + + +k+l+e+ ++ + sp|Q06321|ATG26_YEAST 743 GLLTIGSRGDVQPYIALGKGLIKEGHQVVIITHSEFRDFVESHGIQFEEIAGNpvelmslmVENES--MNVKMLREASSK-------F 821 589***************************************************999997777777..899999999999.......* PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + +a +++++++++ + ++li++++a++ ++++E+++ip+++++++p+++++++ sp|Q06321|ATG26_YEAST 822 RGWIDALLQTSWEVCNRRKFDILIESPSAMVGIHITEALQIPYFRAFTMPWTRTRAY 878 *****************************************************9987 PP >> sp|Q9PF81|MURG_XYLFA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.8 2.1 2.2e-32 1.2e-29 1 138 [. 15 152 .. 15 153 .. 0.98 Alignments for each domain: == domain 1 score: 107.8 bits; conditional E-value: 2.2e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+++P +A+a +L++rG V l+++ ++e+++ +++g+e+++i++ +++ ++ +l+ l ++ ++l a+++a+++l+++ sp|Q9PF81|MURG_XYLFA 15 VMILAGGTGGHIFPGLAVAGALRARGVPVVwLGATGKMETHLvPKHGIEIQTIAVS-GVRGHG-MLALLGTPVRVLPAIFAAMRVLRRY 101 6799****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p vvv+fgg++a++ +iaa+l g p++v+Eqn pg++n++l+r a +vl sp|Q9PF81|MURG_XYLFA 102 RPRVVVSFGGFAAGPGGIAARLMGLPLIVHEQNRAPGMTNRILARVARRVL 152 **********************************************99987 PP >> sp|Q5GW41|MURG_XANOR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.4 1.0 1.4e-32 7.9e-30 1 138 [. 21 158 .. 21 159 .. 0.98 Alignments for each domain: == domain 1 score: 108.4 bits; conditional E-value: 1.4e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+++P +A+a+ L++rG V+ l++ ++e+++ +++ +++ ++++ +l+ k+ ++k l ++++ +a+r+a ++l++ sp|Q5GW41|MURG_XANOR 21 VMILAGGTGGHIFPGLAVAKVLRARGVPVTwLGADGAMETRLvPQHDIPIDTLAIT-GLRGKG-MVKLLGAPLRVMRAVRAAGFVLRKR 107 6799****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p +v++fgg++a++ ++aa+l+g+p+ v+Eqn pg++nk+l+r+a +vl sp|Q5GW41|MURG_XANOR 108 QPRAVISFGGFAAGPGGLAARLLGAPLLVHEQNRAPGMTNKVLSRFARRVL 158 ************************************************997 PP >> sp|B2S3B6|MURG_TREPS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.6 0.1 2.5e-32 1.4e-29 1 139 [] 15 154 .. 15 154 .. 0.98 Alignments for each domain: == domain 1 score: 107.6 bits; conditional E-value: 2.5e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vv++ggGT+G+++P +A+ ++L ++ Vr +++ +g ++ + e+agle++ i+++ k++++ s++++ +++++l ++ ++ il+ sp|B2S3B6|MURG_TREPS 15 VVFTGGGTGGHIFPGIAVFQALAQQA-AVRvvwIGAARGADRSIvESAGLEFCGITAG-KWRRYA-SVRNFFDVFRVLVGTVQSYCILR 100 79********************9998.88888**************************.999999.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 +p+++++ gg+v+++++iaa+l++ip++ +E++ pgl++++++r+a+++lv sp|B2S3B6|MURG_TREPS 101 ALRPQALFSKGGFVSVPPCIAAWLLRIPVVTHESDISPGLATRINARFADRILV 154 **************************************************9985 PP >> sp|O83535|MURG_TREPA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.6 0.1 2.5e-32 1.4e-29 1 139 [] 15 154 .. 15 154 .. 0.98 Alignments for each domain: == domain 1 score: 107.6 bits; conditional E-value: 2.5e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vv++ggGT+G+++P +A+ ++L ++ Vr +++ +g ++ + e+agle++ i+++ k++++ s++++ +++++l ++ ++ il+ sp|O83535|MURG_TREPA 15 VVFTGGGTGGHIFPGIAVFQALAQQA-AVRvvwIGAARGADRSIvESAGLEFCGITAG-KWRRYA-SVRNFFDVFRVLVGTVQSYCILR 100 79********************9998.88888**************************.999999.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 +p+++++ gg+v+++++iaa+l++ip++ +E++ pgl++++++r+a+++lv sp|O83535|MURG_TREPA 101 ALRPQALFSKGGFVSVPPCIAAWLLRIPVVTHESDISPGLATRINARFADRILV 154 **************************************************9985 PP >> sp|Q0AJE1|MURG_NITEC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.3 0.0 3e-32 1.7e-29 3 138 .. 2 137 .. 1 138 [. 0.98 Alignments for each domain: == domain 1 score: 107.3 bits; conditional E-value: 3e-32 EE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 3 laggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 +++gGT+G+v+P +A+ar+ q++G++V+ l+t +g+e+++ +++g +++ i+ +l+ k ++ l+ +++ ka +++ il++++p sp|Q0AJE1|MURG_NITEC 2 IMAGGTGGHVFPGLAVARAMQAEGWRVIwLGTRNGMEATLvPQHGFTIELINFS-GLRGKK-PVSYLLLPWRLAKACWQSFCILRRQRP 88 789***************************************************.****99.*************************** PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++v+g+ggy a++ +i a l+g p+ ++Eqn i+gl+nk+l++ a ++l sp|Q0AJE1|MURG_NITEC 89 QIVLGMGGYPALPGGIMAVLSGKPLLIHEQNRIAGLTNKILAKIASRIL 137 *******************************************999886 PP >> sp|B3PCM0|MURG_CELJU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.1 0.8 1.8e-32 1e-29 1 138 [. 6 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 108.1 bits; conditional E-value: 1.8e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+eL++rG V+ l+t +g+e+++ ++a+++ i ++ +++ ++ + lk ++ ka+++a i+++ sp|B3PCM0|MURG_CELJU 6 ILVMAGGTGGHVFPALAVAEELRARGALVEwLGTAKGIENTLvPKANIPLNLISVE-GVRGRG-LTGLLKAPFLITKAVFQAISIIRKM 92 789*****************************************************.****99.9************************ PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++d+v+gfgg+++++ ++aa+l+g p++++Eqn+++g +n+ll+r a +vl sp|B3PCM0|MURG_CELJU 93 NADLVLGFGGFASGPGGVAARLLGKPLVIHEQNAVAGTTNRLLARIAQRVL 143 ***********************************************9987 PP >> sp|A5G8K0|MURG_GEOUR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.0 0.1 3.6e-32 2e-29 2 139 .] 4 143 .. 3 143 .. 0.97 Alignments for each domain: == domain 1 score: 107.0 bits; conditional E-value: 3.6e-32 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+++P +A+a+e+ +r h + ++t++g+e+++ + g+ + i++ + + + l++++++a+ l ++ ++++ilke sp|A5G8K0|MURG_GEOUR 4 LIAGGGTGGHLFPGIAVAEEFLARNHSNEvlfVGTERGIEARLlPRLGYRLECITAS-GIKGQS-PLAKIRSAAQLLYGYAQSRRILKE 90 79************************77777**************************.9**999.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 ++pd+v+g+ggy+++++++aa+ +i ++++Eqn+ipgl+nkll+r+a++v++ sp|A5G8K0|MURG_GEOUR 91 FRPDLVLGVGGYASAPVVLAARGMQIRRFIHEQNAIPGLTNKLLARFAEKVFI 143 *************************************************9985 PP >> sp|A5U4I0|MURG_MYCTA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.8 1.0 2.2e-32 1.2e-29 1 138 [. 38 185 .. 38 186 .. 0.98 Alignments for each domain: == domain 1 score: 107.8 bits; conditional E-value: 2.2e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+A+a++L + +++Vr l+t +gle+++ +++g++ + i++ + ++k + + + ++++a+r+a+ +l sp|A5U4I0|MURG_MYCTA 38 VVLAGGGTAGHVEPAMAVADALVALDPRVRitaLGTLRGLETRLvPQRGYHLELITAV-PMPRKP-GGDLARLPSRVWRAVREARDVLD 124 79********************************************************.****99.999999999************** PP HHHHHHHHHC----EEEE--HHH........HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal........lagipanvaEqngipglvnkllprrangvl 138 + +dvvvgfggyva++a++aa+ +++ip++++E+n+++gl+n++ + +a++vl sp|A5U4I0|MURG_MYCTA 125 DVDADVVVGFGGYVALPAYLAARglplpprrRRRIPVVIHEANARAGLANRVGAHTADRVL 185 ***********************************************************97 PP >> sp|O06224|MURG_MYCTU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.8 1.0 2.2e-32 1.2e-29 1 138 [. 38 185 .. 38 186 .. 0.98 Alignments for each domain: == domain 1 score: 107.8 bits; conditional E-value: 2.2e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+vePa+A+a++L + +++Vr l+t +gle+++ +++g++ + i++ + ++k + + + ++++a+r+a+ +l sp|O06224|MURG_MYCTU 38 VVLAGGGTAGHVEPAMAVADALVALDPRVRitaLGTLRGLETRLvPQRGYHLELITAV-PMPRKP-GGDLARLPSRVWRAVREARDVLD 124 79********************************************************.****99.999999999************** PP HHHHHHHHHC----EEEE--HHH........HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal........lagipanvaEqngipglvnkllprrangvl 138 + +dvvvgfggyva++a++aa+ +++ip++++E+n+++gl+n++ + +a++vl sp|O06224|MURG_MYCTU 125 DVDADVVVGFGGYVALPAYLAARglplpprrRRRIPVVIHEANARAGLANRVGAHTADRVL 185 ***********************************************************97 PP >> sp|Q4JW95|MURG_CORJK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.7 0.7 2.3e-32 1.3e-29 1 130 [. 13 144 .. 13 147 .. 0.98 Alignments for each domain: == domain 1 score: 107.7 bits; conditional E-value: 2.3e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vv+aggGT+G++ePa+A+a++++++ ++ r l+t++gle+++ +++g + + i+p ++++kl + + +++ +kal+++k++l+ sp|Q4JW95|MURG_CORJK 13 VVVAGGGTAGHIEPAMAVAEAVRAQRPDARitaLGTTRGLETTLvPARGFDLQLIPPV-PVPRKL-NKDLATLPLRLRKALKETKRVLR 99 79********************************************************.****99.99999999*************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130 e ++dvv+gfggyv+++a++aa++++ip +v+E+n+++g++nkl sp|Q4JW95|MURG_CORJK 100 EVEADVVIGFGGYVSAPAYLAARSLKIPFFVHEANARAGVANKLG 144 ******************************************975 PP >> sp|Q97GY4|MURG_CLOAB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 106.4 0.0 5.8e-32 3.3e-29 1 137 [. 6 142 .. 6 144 .. 0.99 Alignments for each domain: == domain 1 score: 106.4 bits; conditional E-value: 5.8e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +v++ggG++G+v P +Al +L++ G+e++ ++t++g+e+ + e++++++ i ++ kl++++ +k++++++++ +++++ il+++ sp|Q97GY4|MURG_CLOAB 6 IVMTGGGSAGHVTPNLALVPKLKELGYEIEyIGTKDGIERSIiEKENIKYNCISSG-KLRRYI-DIKNFSDPFKVILGIFQSVSILRKK 92 79******************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kp++v++ gg+v+++++iaa +++ip++ +E++ pgl+n++ ++++v sp|Q97GY4|MURG_CLOAB 93 KPNIVFSKGGFVSVPVVIAAHFCRIPVIAHESDITPGLANRIAVPYCTKV 142 ********************************************999987 PP >> sp|Q9Z702|MURG_CHLPN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 106.8 0.0 4.5e-32 2.5e-29 1 137 [. 8 142 .. 8 144 .. 0.98 Alignments for each domain: == domain 1 score: 106.8 bits; conditional E-value: 4.5e-32 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 v+la+gG++G++ Pa+++ +++ r+G++V l +gl+++ ++g+++++i+++ l+ l+ +k ++++++ + ++ ka++ lk + sp|Q9Z702|MURG_CHLPN 8 VALAVGGSGGHIVPALSVKEAFSREGIDV-LLLGKGLKNHPsLQQGISYREIPSG--LPTVLNPIKIMSRTLSLCSGYLKARKELKIFD 93 79***************************.999**********************..99999*************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 pd+v+gfg+y+++++l+a l+++ip++++Eqn +pg+vn+l++r+a g+ sp|Q9Z702|MURG_CHLPN 94 PDLVIGFGSYHSLPVLLAGLSHKIPLFLHEQNLVPGKVNQLFSRYARGI 142 **********************************************997 PP >> sp|Q1Q944|MURG_PSYCK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 106.6 0.3 5e-32 2.8e-29 1 138 [. 6 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 106.6 bits; conditional E-value: 5e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++ GT+G+v+Pa+A+ +eL +rG ++ l+tp+g+e+ + + +g+++++i+ + +l+ k+ + lk + l a+ ++ +i++ + sp|Q1Q944|MURG_PSYCK 6 ILMMAAGTGGHVFPALAVSEELTKRGAMIHwLGTPNGMENGLvAPTGYPFHAIEMQ-GLRGKG-IGRLLKMPVTLLSATMAVIKIIRGN 92 6899**********************9999************9*************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++d+vvgfggyv+++ +iaa+l + p++++Eqn+i+g++n++l++ a++vl sp|Q1Q944|MURG_PSYCK 93 NIDIVVGFGGYVSAPGGIAARLTKTPLIIHEQNAIAGMSNRYLAKMATKVL 143 ************************************************997 PP >> sp|C0RE70|MURG_BRUMB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.6 0.3 9.8e-32 5.5e-29 1 137 [. 10 145 .. 10 146 .. 0.93 Alignments for each domain: == domain 1 score: 105.6 bits; conditional E-value: 9.8e-32 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G+++Pa Ala+eL++rG++V+lat + +fv + a +++ i + + + + + ++ lk++++ +++ ++++++++ k sp|C0RE70|MURG_BRUMB 10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 79***************************************87777777778888.55554.59************************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p++vvgfggy +++l+aa+ gip+ ++Eqn+++g +nk l+ r++ + sp|C0RE70|MURG_BRUMB 97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145 ****************************************999998865 PP >> sp|Q8YI66|MURG_BRUME UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.6 0.3 9.8e-32 5.5e-29 1 137 [. 10 145 .. 10 146 .. 0.93 Alignments for each domain: == domain 1 score: 105.6 bits; conditional E-value: 9.8e-32 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G+++Pa Ala+eL++rG++V+lat + +fv + a +++ i + + + + + ++ lk++++ +++ ++++++++ k sp|Q8YI66|MURG_BRUME 10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 79***************************************87777777778888.55554.59************************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p++vvgfggy +++l+aa+ gip+ ++Eqn+++g +nk l+ r++ + sp|Q8YI66|MURG_BRUME 97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145 ****************************************999998865 PP >> sp|Q3BXF2|MURG_XANC5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 106.2 0.9 6.7e-32 3.8e-29 1 138 [. 22 159 .. 22 160 .. 0.98 Alignments for each domain: == domain 1 score: 106.2 bits; conditional E-value: 6.7e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+++P +A+a+ L++rG V+ l++ +++e+++ +++ +++ ++++ +l+ k+ +k l + ++ +a+r+a ++l++ sp|Q3BXF2|MURG_XANC5 22 VMILAGGTGGHIFPGLAVAKVLRARGVPVTwLGADDAMETRLvPQHDIPIDTLAIS-GLRGKG-VVKLLGAPVRVMRAVRAAGFVLRKR 108 6799****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p +v++fgg++a++ ++aa+l+g+p+ v+Eqn pg++nk+l+r+a +vl sp|Q3BXF2|MURG_XANC5 109 RPRAVISFGGFAAGPGGLAARLLGAPLLVHEQNRAPGMTNKVLSRFARRVL 159 ************************************************997 PP >> sp|B2S6Q4|MURG_BRUA1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.6 0.3 9.8e-32 5.5e-29 1 137 [. 10 145 .. 10 146 .. 0.93 Alignments for each domain: == domain 1 score: 105.6 bits; conditional E-value: 9.8e-32 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G+++Pa Ala+eL++rG++V+lat + +fv + a +++ i + + + + + ++ lk++++ +++ ++++++++ k sp|B2S6Q4|MURG_BRUA1 10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 79***************************************87777777778888.55554.59************************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p++vvgfggy +++l+aa+ gip+ ++Eqn+++g +nk l+ r++ + sp|B2S6Q4|MURG_BRUA1 97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145 ****************************************999998865 PP >> sp|Q2YLY5|MURG_BRUA2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.6 0.3 9.8e-32 5.5e-29 1 137 [. 10 145 .. 10 146 .. 0.93 Alignments for each domain: == domain 1 score: 105.6 bits; conditional E-value: 9.8e-32 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G+++Pa Ala+eL++rG++V+lat + +fv + a +++ i + + + + + ++ lk++++ +++ ++++++++ k sp|Q2YLY5|MURG_BRUA2 10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 79***************************************87777777778888.55554.59************************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p++vvgfggy +++l+aa+ gip+ ++Eqn+++g +nk l+ r++ + sp|Q2YLY5|MURG_BRUA2 97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145 ****************************************999998865 PP >> sp|Q57C78|MURG_BRUAB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.6 0.3 9.8e-32 5.5e-29 1 137 [. 10 145 .. 10 146 .. 0.93 Alignments for each domain: == domain 1 score: 105.6 bits; conditional E-value: 9.8e-32 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G+++Pa Ala+eL++rG++V+lat + +fv + a +++ i + + + + + ++ lk++++ +++ ++++++++ k sp|Q57C78|MURG_BRUAB 10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 79***************************************87777777778888.55554.59************************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p++vvgfggy +++l+aa+ gip+ ++Eqn+++g +nk l+ r++ + sp|Q57C78|MURG_BRUAB 97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145 ****************************************999998865 PP >> sp|Q660A8|MURG_BORGA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 106.1 0.0 7.2e-32 4.1e-29 1 138 [. 7 147 .. 7 148 .. 0.99 Alignments for each domain: == domain 1 score: 106.1 bits; conditional E-value: 7.2e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 + ++ggGT+G+v+P +++ ++L++ + e++ ++ ++ +ee++ e+ ++++ ++++ kl++++ s++++++++++ ++ k++++l sp|Q660A8|MURG_BORGA 7 IFFTGGGTGGHVFPGISIIQKLKELDNEIEffwIGKKNSIEEKLikEQNNIKFIWVPCG-KLRRYF-SFQNFTDFFKVILGIIKSFYVL 93 679****************************************99**************.******.********************** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 k++kp++v+++gg+v+++ +ia++l++i+++ +E + pgl++k+++++an+++ sp|Q660A8|MURG_BORGA 94 KKYKPQIVYATGGFVSTPTIIASSLLKIKRITHEMDLDPGLATKINSKFANKIY 147 ****************************************************98 PP >> sp|B8I6H3|MURG_CLOCE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 106.2 0.0 6.7e-32 3.8e-29 1 137 [. 3 141 .. 3 143 .. 0.97 Alignments for each domain: == domain 1 score: 106.2 bits; conditional E-value: 6.7e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v++aggGT+G++ P +A+a+ ++++ e ++t++gle+++ + +g++ ++i+++ ++++kl sl+tl + e +++++a ++lk sp|B8I6H3|MURG_CLOCE 3 VLIAGGGTGGHINPGLAIAKYIKQKEAEADitfVGTKKGLETKLvPREGYPLETITVR-GFKRKL-SLDTLIAIKELIQSFFQASRLLK 89 799*********************99999999**************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 + kpdvv+g+ggyv +++l+ a++ gip+ ++E+n+ pg++n+ll r++ v sp|B8I6H3|MURG_CLOCE 90 RIKPDVVIGTGGYVCGPVLYMAAKKGIPTLIHESNAFPGVTNRLLERYVSYV 141 ***********************************************99766 PP >> sp|A5VRH7|MURG_BRUO2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.6 0.3 9.8e-32 5.5e-29 1 137 [. 10 145 .. 10 146 .. 0.93 Alignments for each domain: == domain 1 score: 105.6 bits; conditional E-value: 9.8e-32 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G+++Pa Ala+eL++rG++V+lat + +fv + a +++ i + + + + + ++ lk++++ +++ ++++++++ k sp|A5VRH7|MURG_BRUO2 10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 79***************************************87777777778888.55554.59************************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p++vvgfggy +++l+aa+ gip+ ++Eqn+++g +nk l+ r++ + sp|A5VRH7|MURG_BRUO2 97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145 ****************************************999998865 PP >> sp|B0CHM0|MURG_BRUSI UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.6 0.3 9.8e-32 5.5e-29 1 137 [. 10 145 .. 10 146 .. 0.93 Alignments for each domain: == domain 1 score: 105.6 bits; conditional E-value: 9.8e-32 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G+++Pa Ala+eL++rG++V+lat + +fv + a +++ i + + + + + ++ lk++++ +++ ++++++++ k sp|B0CHM0|MURG_BRUSI 10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 79***************************************87777777778888.55554.59************************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p++vvgfggy +++l+aa+ gip+ ++Eqn+++g +nk l+ r++ + sp|B0CHM0|MURG_BRUSI 97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145 ****************************************999998865 PP >> sp|A0JV94|MURG_ARTS2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 106.1 0.7 7.1e-32 4e-29 1 133 [. 8 142 .. 8 148 .. 0.97 Alignments for each domain: == domain 1 score: 106.1 bits; conditional E-value: 7.1e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G++ P++A+a +L++ ++Vr ++tp g+e+++ ++agle +i +++++ sl+ l+ + + a+++a +il sp|A0JV94|MURG_ARTS2 8 VVLAGGGTAGHISPLLAIAAALRDVRPDVRllaVGTPSGMETRLvPAAGLELATISRV-PFPRRP-SLDLLRLPGRLAGAVKQAGRILD 94 79********************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133 +a +dv+vg+ggyv +++++aa++++ip++++E+n ++gl+nk+ +r+ sp|A0JV94|MURG_ARTS2 95 DAHADVLVGVGGYVCTPLYLAARRRKIPIVIHEANTRAGLANKVGARF 142 *******************************************99887 PP >> sp|A6TS61|MURG_ALKMQ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 106.1 0.0 7.2e-32 4.1e-29 1 138 [. 3 142 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 106.1 bits; conditional E-value: 7.2e-32 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+A+a++ ++ ++ + ++t +gle+++ ++ag+e++ i++ l++k+ s++++k++a+ k+l +a++++k sp|A6TS61|MURG_ALKMQ 3 IMISGGGTGGHIYPAIAIANQITEKHPQAKiqfVGTAKGLESELiPKAGYEIKHITVS-YLRRKI-SFHNVKSIAKLIKGLVEARRLIK 89 6799******************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +++pdvv+g+gg+v +++l+ a+++g ++ ++Eqn pgl+n++l ++++++ sp|A6TS61|MURG_ALKMQ 90 DFNPDVVIGTGGFVCGPVLYMATKLGYKTLIHEQNVFPGLTNRVLGNYVDRIA 142 *************************************************9986 PP >> sp|C5D4C2|MURG_GEOSW UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 106.1 0.0 7.1e-32 4e-29 1 137 [. 5 142 .. 5 144 .. 0.98 Alignments for each domain: == domain 1 score: 106.1 bits; conditional E-value: 7.1e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++l+ggGT+G+v +Al +L+++G+++ ++++ g+e+++ + +g+++ pi ++ kl++++ ++++k+++++lk++++a +i+k+ sp|C5D4C2|MURG_GEOSW 5 IILTGGGTAGHVMVNLALIPKLKEQGWDIAyIGSHQGIERELisKVEGVPYFPISTG-KLRRYF-DWNNFKDPFKVLKGTFQAYRIIKK 91 78**************************************9999999**********.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +kp +v++ gg+v+++++i+a+l+g+p +++E++ pgl+nk+ + +a+++ sp|C5D4C2|MURG_GEOSW 92 EKPSIVFSKGGFVSVPVIIGAWLNGVPSIIHESDITPGLANKIAMPFATKI 142 ***********************************************9997 PP >> sp|A9M690|MURG_BRUC2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.6 0.3 9.8e-32 5.5e-29 1 137 [. 10 145 .. 10 146 .. 0.93 Alignments for each domain: == domain 1 score: 105.6 bits; conditional E-value: 9.8e-32 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G+++Pa Ala+eL++rG++V+lat + +fv + a +++ i + + + + + ++ lk++++ +++ ++++++++ k sp|A9M690|MURG_BRUC2 10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 79***************************************87777777778888.55554.59************************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p++vvgfggy +++l+aa+ gip+ ++Eqn+++g +nk l+ r++ + sp|A9M690|MURG_BRUC2 97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145 ****************************************999998865 PP >> sp|Q8PPA8|MURG_XANAC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.5 1.1 1.1e-31 6.1e-29 1 138 [. 21 158 .. 21 159 .. 0.98 Alignments for each domain: == domain 1 score: 105.5 bits; conditional E-value: 1.1e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+++P +A+a+ L++rG V+ l++ ++e+++ +++ +++ ++++ +l+ k+ +k l + ++ +a+r+a ++l++ sp|Q8PPA8|MURG_XANAC 21 VMILAGGTGGHIFPGLAVAKVLRARGVPVTwLGADGAMETRLvPQHDIPIDTLAIS-GLRGKG-VVKLLGAPVRVMRAVRAAGFVLRKR 107 6799****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p +v++fgg++a++ ++aa+l+g+p+ v+Eqn pg++nk+l+r+a +vl sp|Q8PPA8|MURG_XANAC 108 QPRAVISFGGFAAGPGGLAARLLGAPLLVHEQNRAPGMTNKVLSRFARRVL 158 ************************************************997 PP >> sp|Q8CY39|MURG_BRUSU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.6 0.3 9.8e-32 5.5e-29 1 137 [. 10 145 .. 10 146 .. 0.93 Alignments for each domain: == domain 1 score: 105.6 bits; conditional E-value: 9.8e-32 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G+++Pa Ala+eL++rG++V+lat + +fv + a +++ i + + + + + ++ lk++++ +++ ++++++++ k sp|Q8CY39|MURG_BRUSU 10 IVLAAGGTGGHLFPAEALAHELRARGWDVHLATDARAQRFVgAFAQDHVHVIRSA-TIAGR-NPVALLKTFWSLWQGNLDSRKLFRRLK 96 79***************************************87777777778888.55554.59************************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p++vvgfggy +++l+aa+ gip+ ++Eqn+++g +nk l+ r++ + sp|Q8CY39|MURG_BRUSU 97 PKLVVGFGGYPTLPPLYAASNMGIPTLIHEQNAVMGRANKGLAGRVKAI 145 ****************************************999998865 PP >> sp|A1WRL1|MURG_VEREI UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.8 1.1 8.9e-32 5e-29 2 138 .. 8 144 .. 7 145 .. 0.98 Alignments for each domain: == domain 1 score: 105.8 bits; conditional E-value: 8.9e-32 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+++P +A+a++L++rG++V+ l++p +e+++ +++g + ++++ +++ k+ + + +++ l+a+ +a+++l++ + sp|A1WRL1|MURG_VEREI 8 LIMAGGTGGHIFPGLAVAEALRARGWRVHwLGAPASMEARIaAQHGFALESVTFS-GVRGKG-LATLALLPLRLLRAFWQARAVLRRVQ 94 689****************************************************.******.99999********************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdv+vg ggy++ + + ll++ p++++Eqn+++gl+n+ll+ ra++v+ sp|A1WRL1|MURG_VEREI 95 PDVLVGLGGYISFPGALMGLLRRKPLVLHEQNAVAGLANRLLAGRADRVF 144 ***********************************************997 PP >> sp|Q812T8|MURG2_BACCR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.4 0.0 2.4e-31 1.3e-28 1 138 [. 4 141 .. 4 142 .. 0.99 Alignments for each domain: == domain 1 score: 104.4 bits; conditional E-value: 2.4e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +v++ggG++G+v P +A+ Lq+ +++ ++++ g+e+++ e++g+++++i ++ kl++++ lk++k+++ + k++ +a +++ sp|Q812T8|MURG2_BACCR 4 IVFTGGGSAGHVTPNLAIIPYLQEDNWDISyIGSHQGIEKTIiEKEGIPYYSISSG-KLRRYF-DLKNIKDPFLVMKGVMDAYVRIRK 89 79******************************************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdv+++ gg+v+++++i+ +l+++p+ ++E++ pgl+nk+ r+a +++ sp|Q812T8|MURG2_BACCR 90 LKPDVIFSKGGFVSVPVVIGGWLNRVPVLLHESDMTPGLANKIALRFASKIF 141 ***********************************************99987 PP >> sp|B0U4Z7|MURG_XYLFM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.9 2.6 8.4e-32 4.8e-29 1 138 [. 15 152 .. 15 153 .. 0.98 Alignments for each domain: == domain 1 score: 105.9 bits; conditional E-value: 8.4e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+++P +A+a +L++rG V l+++ ++e+++ +++g+e+++i++ +++ ++ +l+ l + ++l+a+++a+ +l+++ sp|B0U4Z7|MURG_XYLFM 15 VMILAGGTGGHIFPGLAVAGALRARGVPVVwLGATGKMETHLvPKHGIEIQTIAVA-GVRGRG-MLALLGAPVRVLRAIFAAMGVLRRY 101 6799****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p vvv+fgg++a++ +iaa++ + p++v+Eqn pg++n++l+r a++vl sp|B0U4Z7|MURG_XYLFM 102 RPRVVVSFGGFAAGPGGIAARFMRLPLIVHEQNRAPGMTNRVLARVAKRVL 152 ************************************************997 PP >> sp|A4IJS4|MURG_GEOTN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.7 0.0 9.4e-32 5.3e-29 1 137 [. 5 142 .. 5 144 .. 0.98 Alignments for each domain: == domain 1 score: 105.7 bits; conditional E-value: 9.4e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +vl+ggGT+G+v vAl +L+++G+++ +++++g+e+++ + +g++++++ ++ kl++++ +k++k+++++lk++ +a +++++ sp|A4IJS4|MURG_GEOTN 5 IVLTGGGTAGHVMVNVALIPKLKEQGWDIVyIGSHEGIEREIigRIDGVPYYSVSTG-KLRRYF-DWKNFKDPFNVLKGVWQAYRLIQK 91 79****************************************9999***********.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +kpd+v++ gg+v+++++++a+l+g+p +++E++ pgl+nk+ + +a+++ sp|A4IJS4|MURG_GEOTN 92 EKPDIVFSKGGFVSVPVILGAWLNGVPSVIHESDLTPGLANKIAMPFATKI 142 **********************************************99987 PP >> sp|Q2NZB8|MURG_XANOM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 106.4 0.9 5.8e-32 3.2e-29 1 138 [. 21 158 .. 21 159 .. 0.98 Alignments for each domain: == domain 1 score: 106.4 bits; conditional E-value: 5.8e-32 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+++P +A+a+ L +rG V+ l++ ++e+++ +++ +++ ++++ +l+ k+ ++k l ++++ +a+r+a ++l++ sp|Q2NZB8|MURG_XANOM 21 VMILAGGTGGHIFPGLAVAKVLSARGVPVTwLGADGAMETRLvPQHDIPIDTLAIT-GLRGKG-MVKLLGAPLRVMRAVRAAGFVLRKR 107 6799****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p +v++fgg++a++ ++aa+l+g+p+ v+Eqn pg++nk+l+r+a +vl sp|Q2NZB8|MURG_XANOM 108 QPRAVISFGGFAAGPGGLAARLLGAPLLVHEQNRAPGMTNKVLSRFARRVL 158 ************************************************997 PP >> sp|A5FIY3|MURG_FLAJ1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.2 0.0 1.3e-31 7.6e-29 1 137 [. 6 144 .. 6 146 .. 0.98 Alignments for each domain: == domain 1 score: 105.2 bits; conditional E-value: 1.3e-31 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G+++Pa+A+a+eL+ + ++ + +++++++e + ++ag+e++ + + +l++kl +l++++ +++ +l ++k+i+k sp|A5FIY3|MURG_FLAJ1 6 FILSGGGTGGHIYPAIAIANELKLQFPDAEflfVGAKDKMEMQKvPQAGYEIKGLWIA-GLQRKL-TLQNMMFPLKLASSLLESKRIIK 92 79**************************************98877*************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 ++kp+vv+g+gg++++++l aa +agip++v Eqn+ pg++nkll+++an + sp|A5FIY3|MURG_FLAJ1 93 KFKPNVVIGTGGFASGPLLQAAGSAGIPTVVQEQNSFPGITNKLLSKKANAI 144 *************************************************987 PP >> sp|Q39JX0|MURG_BURS3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.2 0.4 2.8e-31 1.6e-28 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 104.2 bits; conditional E-value: 2.8e-31 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ ++G++V l+ p g+e+++ +++g++++ + + +l+ k+ ++l+ +++ l+a ++ ++l++ + sp|Q39JX0|MURG_BURS3 9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPFNLLRACGQSLAALRRVR 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ ++l+g p++++Eqn+i+gl+nk+l+++a++vlv sp|Q39JX0|MURG_BURS3 96 PDVVLGMGGYITFPAGVMTALSGRPLVLHEQNSIAGLTNKVLAKFAKRVLV 146 ************************************************986 PP >> sp|C1A0X5|MURG_RHOE4 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.9 1.1 1.7e-31 9.4e-29 1 138 [. 10 155 .. 10 156 .. 0.98 Alignments for each domain: == domain 1 score: 104.9 bits; conditional E-value: 1.7e-31 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vv+aggGT+G++ePa+A+a++++++ ++ r l+t +gle+++ +++g++ + i+p +l++k +++ +k + + l ++rk++e+l sp|C1A0X5|MURG_RHOE4 10 VVVAGGGTAGHIEPALAVADAVKAAQPDTRitaLGTARGLETTLvPARGYTLELIPPV-PLPRKP-TMDLVKLPTRILASVRKTREVLD 96 79********************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHH......HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal......lagipanvaEqngipglvnkllprrangvl 138 + +dv+vgfggyva++a++aa+ +++ip++++E+n+ +g++nk+ +r a++vl sp|C1A0X5|MURG_RHOE4 97 SVDADVIVGFGGYVALPAYLAARggvlrrRRKIPIVIHEANASAGIANKIGARLATRVL 155 *******************************************************9997 PP >> sp|Q748D6|MURG_GEOSL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 103.9 0.1 3.3e-31 1.8e-28 2 138 .. 4 142 .. 3 143 .. 0.96 Alignments for each domain: == domain 1 score: 103.9 bits; conditional E-value: 3.3e-31 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+++P +A+a+e+ +r+ + + ++t +g+e++v +++g+ + i++ + + k+ sl+ k la++l ++ ++++ilke sp|Q748D6|MURG_GEOSL 4 LIAGGGTGGHLFPGIAVAEEFLARDKQNEvlfVGTWKGIEARVlPKTGYRLECITAA-GIRGKG-SLARAKGLAKFLYGYAQSRKILKE 90 79*******************9999766666**************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++pd+v+g+ggy++++ l aa+ +ip++++Eqn+ipg++n+ l++ a++++ sp|Q748D6|MURG_GEOSL 91 FRPDLVLGVGGYASAPTLMAARGMQIPRFIHEQNAIPGFTNRMLAKVADKIF 142 ************************************************9987 PP >> sp|Q820Y4|MURG_TROWT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.4 0.1 2.4e-31 1.3e-28 1 137 [. 4 140 .. 4 142 .. 0.97 Alignments for each domain: == domain 1 score: 104.4 bits; conditional E-value: 2.4e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++laggGT+G+v P++Ala+ L+ Gh l+t++g+e+++ +++g+++ +i+ +++++ s + l +++++ +++ ++ il e+ sp|Q820Y4|MURG_TROWT 4 ILLAGGGTAGHVNPLLALADVLKVSGHATFaLGTSEGIESRLvPNSGIDFFTIPKL-PFPRRT-SRHILCFPFKFFSSVKLVRSILIEH 90 79***************************99************************9.****99.99*********************** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 k++vvvgfggyva++a+ aa++++ip +v+E+n++pgl+n l + +a+ v sp|Q820Y4|MURG_TROWT 91 KIQVVVGFGGYVAAPAYAAAISLNIPYVVHESNARPGLANLLAAHFAKCV 140 ****************************************9999999876 PP >> sp|Q83HK1|MURG_TROW8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.4 0.1 2.4e-31 1.3e-28 1 137 [. 4 140 .. 4 142 .. 0.97 Alignments for each domain: == domain 1 score: 104.4 bits; conditional E-value: 2.4e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++laggGT+G+v P++Ala+ L+ Gh l+t++g+e+++ +++g+++ +i+ +++++ s + l +++++ +++ ++ il e+ sp|Q83HK1|MURG_TROW8 4 ILLAGGGTAGHVNPLLALADVLKVSGHATFaLGTSEGIESRLvPNSGIDFFTIPKL-PFPRRT-SRHILCFPFKFFSSVKLVRSILIEH 90 79***************************99************************9.****99.99*********************** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 k++vvvgfggyva++a+ aa++++ip +v+E+n++pgl+n l + +a+ v sp|Q83HK1|MURG_TROW8 91 KIQVVVGFGGYVAAPAYAAAISLNIPYVVHESNARPGLANLLAAHFAKCV 140 ****************************************9999999876 PP >> sp|A4QFM3|MURG_CORGB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.5 0.9 2.3e-31 1.3e-28 1 129 [. 3 132 .. 3 135 .. 0.96 Alignments for each domain: == domain 1 score: 104.5 bits; conditional E-value: 2.3e-31 EEEE-------HHHHHHHHHHHHH-.--EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrr.GheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 vv+aggGT+G++ePa+A+a++L+++ G V l+t +gle+++ + +g e + i+p ++++k ++ lk ++++ kal +a+++lk+ sp|A4QFM3|MURG_CORGB 3 VVVAGGGTAGHIEPALAVAEALRDKhGATVSaLGTARGLETTLvPDRGFELHLIEPV-PVPRKP-NMDLLKLPFRVAKALGQARKALKD 89 79********************975378888**************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEES CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkl 129 +++v+gfggyv+++a+ aa+++g p +v+E+n+++g++nkl sp|A4QFM3|MURG_CORGB 90 TDAQAVIGFGGYVSAPAYMAAKSLGLPFFVHEANARAGMANKL 132 *****************************************97 PP >> sp|Q39YL9|MURG_GEOMG UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.0 0.1 3.1e-31 1.8e-28 2 138 .. 4 142 .. 3 143 .. 0.97 Alignments for each domain: == domain 1 score: 104.0 bits; conditional E-value: 3.1e-31 EEE-------HHHHHHHHHHH..HH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareL..qrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+++P +A+a+e+ +++G eV ++t +g+e++v ++ g+ + i++ + + k+ s++ k la++l ++ ++++ilke sp|Q39YL9|MURG_GEOMG 4 LIAGGGTGGHLFPGIAVAEEFlsRKKGNEVLfVGTWRGIEARVlPKLGYRLECITAA-GIRGKG-SVARAKGLAKFLYGYAQSRKILKE 90 79******************977789*******************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +kpd+v+g+ggy++++al+aa+ +ip++++Eqn+ipg++nk l+ a++v+ sp|Q39YL9|MURG_GEOMG 91 FKPDLVLGVGGYASAPALLAARGMHIPRFIHEQNAIPGFTNKMLATVAERVF 142 ********************************************99999987 PP >> sp|A1R0I9|MURG_BORT9 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.5 0.0 2.2e-31 1.3e-28 1 139 [] 7 148 .. 7 148 .. 0.98 Alignments for each domain: == domain 1 score: 104.5 bits; conditional E-value: 2.2e-31 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 + ++ggGT+G+v+P +A+ +L++ + +++ l+ ++ +e+++ e a +++ +i+++ kl++++ sl+++++++++ ++ k+++i+ sp|A1R0I9|MURG_BORT9 7 IFFTGGGTGGHVFPGIAIISKLRELDTNIEffwLGQKDSMEDKIikEHAYIKFIAIPSG-KLRRYF-SLQNFTDFFKVIFGIIKSFFII 93 679******************************************9999**********.******.********************** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 k++kp++++++gg+v+ +++iaa+l++++ + +E + pgl++k+++++an++++ sp|A1R0I9|MURG_BORT9 94 KKYKPQIIYATGGFVSSPPIIAASLLKVKSITHEMDLDPGLATKINSKFANKIHI 148 ****************************************************985 PP >> sp|Q3AAE6|MURG_CARHZ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 103.9 0.0 3.5e-31 2e-28 2 137 .. 4 141 .. 3 143 .. 0.98 Alignments for each domain: == domain 1 score: 103.9 bits; conditional E-value: 3.5e-31 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 v+aggGT+G+++Pa+A+a+ ++ ++ + ++tp+g+e++v +++g + + ++++ + ++k+ s++tlk l+ + k+l a+ lk+ sp|Q3AAE6|MURG_CARHZ 4 VFAGGGTGGHLYPALAIAQSWKESHPNDEilfVGTPRGIENTVvPKYGFPLYLLPVE-GIPRKV-SWETLKKLFLVPKSLINAFIFLKK 90 89***********************998889**************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +kpd+vvg+ggy++ ++++aa+ ++ip++++Eqn+ pg++nk+l+ r++ v sp|Q3AAE6|MURG_CARHZ 91 EKPDIVVGTGGYASFPVVFAATVLKIPTVIHEQNAYPGIANKILAARVDAV 141 ***********************************************9987 PP >> sp|Q8NNN5|MURG_CORGL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.5 0.9 2.3e-31 1.3e-28 1 129 [. 3 132 .. 3 135 .. 0.96 Alignments for each domain: == domain 1 score: 104.5 bits; conditional E-value: 2.3e-31 EEEE-------HHHHHHHHHHHHH-.--EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrr.GheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 vv+aggGT+G++ePa+A+a++L+++ G V l+t +gle+++ + +g e + i+p ++++k ++ lk ++++ kal +a+++lk+ sp|Q8NNN5|MURG_CORGL 3 VVVAGGGTAGHIEPALAVAEALRDKhGATVSaLGTARGLETTLvPDRGFELHLIEPV-PVPRKP-NMDLLKLPFRVAKALGQARKALKD 89 79********************975378888**************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEES CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkl 129 +++v+gfggyv+++a+ aa+++g p +v+E+n+++g++nkl sp|Q8NNN5|MURG_CORGL 90 TDAQAVIGFGGYVSAPAYMAAKSLGLPFFVHEANARAGMANKL 132 *****************************************97 PP >> sp|Q0TNP7|MURG_CLOP1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 103.8 0.0 3.5e-31 2e-28 1 135 [. 6 140 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 103.8 bits; conditional E-value: 3.5e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggG++G+v P +Al +L++ G e++ +++++g+e+++ +++++++++i ++ kl++++ +k++++++++lk++ +a +il+++ sp|Q0TNP7|MURG_CLOP1 6 IIMTGGGSAGHVTPNLALVPKLKELGFEIKyIGSKNGIEKEIiTKENIPYYSISSG-KLRRYF-DIKNFTDPFKVLKGVMDASRILSKE 92 689*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 kpdv+++ gg+v ++++iaa+ +ip++ +E++ pgl+nk+ + +++ sp|Q0TNP7|MURG_CLOP1 93 KPDVIFSKGGFVTVPVVIAASMKKIPVVSHESDLTPGLANKIASPFCD 140 ******************************************998887 PP >> sp|Q8XIQ1|MURG_CLOPE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 103.8 0.0 3.5e-31 2e-28 1 135 [. 6 140 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 103.8 bits; conditional E-value: 3.5e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggG++G+v P +Al +L++ G e++ +++++g+e+++ +++++++++i ++ kl++++ +k++++++++lk++ +a +il+++ sp|Q8XIQ1|MURG_CLOPE 6 IIMTGGGSAGHVTPNLALVPKLKELGFEIKyIGSKNGIEKEIiTKENIPYYSISSG-KLRRYF-DIKNFTDPFKVLKGVMDASRILSKE 92 689*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 kpdv+++ gg+v ++++iaa+ +ip++ +E++ pgl+nk+ + +++ sp|Q8XIQ1|MURG_CLOPE 93 KPDVIFSKGGFVTVPVVIAASMKKIPVVSHESDLTPGLANKIASPFCD 140 ******************************************998887 PP >> sp|Q0SRB4|MURG_CLOPS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 103.8 0.0 3.5e-31 2e-28 1 135 [. 6 140 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 103.8 bits; conditional E-value: 3.5e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggG++G+v P +Al +L++ G e++ +++++g+e+++ +++++++++i ++ kl++++ +k++++++++lk++ +a +il+++ sp|Q0SRB4|MURG_CLOPS 6 IIMTGGGSAGHVTPNLALVPKLKELGFEIKyIGSKNGIEKEIiTKENIPYYSISSG-KLRRYF-DIKNFTDPFKVLKGVMDASRILSKE 92 689*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 kpdv+++ gg+v ++++iaa+ +ip++ +E++ pgl+nk+ + +++ sp|Q0SRB4|MURG_CLOPS 93 KPDVIFSKGGFVTVPVVIAASMKKIPVVSHESDLTPGLANKIASPFCD 140 ******************************************998887 PP >> sp|Q5YYX9|MURG_NOCFA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 103.9 1.8 3.4e-31 1.9e-28 1 138 [. 17 162 .. 17 163 .. 0.97 Alignments for each domain: == domain 1 score: 103.9 bits; conditional E-value: 3.4e-31 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v++aggGT+G++ePa+A+a++L+r ++ +r l+t++gle+++ +e+g++ + i+p +l++k +++ l+ +a+++ ++r++++++ sp|Q5YYX9|MURG_NOCFA 17 VIVAGGGTAGHIEPALAVADALRRLDPAIRvtaLGTERGLETRLvPERGYPLELIPPV-PLPRKP-TVDLLRLPARVRASVRRTRAVID 103 689*******************************************************.******.*********************** PP HHHHHHHHHC----EEEE--HHH......HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal......lagipanvaEqngipglvnkllprrangvl 138 ++dv++gfggyva++a++aa ++ +p++v+E+n+ +g++nk+ +r a vl sp|Q5YYX9|MURG_NOCFA 104 AVQADVIIGFGGYVALPAYLAAGrgvlrrRRAVPVIVHEANAKAGIANKIGARVARAVL 162 *********************999999999********************999998876 PP >> sp|A7HH67|MURG_ANADF UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.3 0.4 2.6e-31 1.5e-28 2 138 .. 4 142 .. 3 143 .. 0.96 Alignments for each domain: == domain 1 score: 104.3 bits; conditional E-value: 2.6e-31 EEE-------HHHHHHHHHHHHH-..--EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrr..GheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+v+P +Ala+e+ r G +V ++t++gle++v ++ag +++ i+++ +l+ k+ l+ l++l+ + +al ++ +il++ sp|A7HH67|MURG_ANADF 4 LIAGGGTGGHVFPGIALAEEVVGRhpGNDVVfVGTERGLEAKVvPAAGFPIELIDVK-GLKGKG-ILSLLLNLLLVPRALLQSHRILRK 90 79*******************6664488999**************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++pdvvvg+ggy+++++++ a+l++ip+ v Eqn+i+g++n++l r+++ ++ sp|A7HH67|MURG_ANADF 91 WRPDVVVGVGGYASGPVVLVAWLLRIPTAVQEQNAIAGFTNRVLGRFVDAAF 142 ***********************************************99865 PP >> sp|Q82VS3|MURG_NITEU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 103.5 0.0 4.7e-31 2.6e-28 3 138 .. 2 137 .. 1 138 [. 0.98 Alignments for each domain: == domain 1 score: 103.5 bits; conditional E-value: 4.7e-31 EE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 3 laggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 +++gGT+G+v+P +A+ar q+ G+++ l+t +g+e+ + +++g +++ i+ +l+ k ++ l+ +++ +a ++++il++++p sp|Q82VS3|MURG_NITEU 2 IMAGGTGGHVFPGLAVARSMQANGWRIVwLGTRNGMEAALvPQHGFSIELINFS-GLRGKK-LSSYLLLPWRLAQACWQSFRILRRQQP 88 789***************************************************.****99.9************************** PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +vv+g+ggy a++ +i a l+g p+ ++Eqn i+gl+nk+l++ a+++l sp|Q82VS3|MURG_NITEU 89 QVVLGMGGYPALPGGIMAVLLGKPLLIHEQNRIAGLTNKILAKIADRIL 137 **********************************************987 PP >> sp|B0RVA5|MURG_XANCB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.4 1.4 2.4e-31 1.3e-28 1 138 [. 22 159 .. 22 160 .. 0.98 Alignments for each domain: == domain 1 score: 104.4 bits; conditional E-value: 2.4e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+++P +A+a+ L++rG V+ l++ ++e+++ +++ +++ ++++ +l+ k+ +k l + ++ +a+r+a ++l++ sp|B0RVA5|MURG_XANCB 22 VMILAGGTGGHIFPGLAVAKVLRARGVPVTwLGADGAMETRLvPQHAIQIDTLAIS-GLRGKG-IVKLLGAPVRVMRAVRAAGFVLRKR 108 6799****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p +v++fgg++a++ ++aa+l+g+p+ v+Eqn pg++nk+l+r+a +vl sp|B0RVA5|MURG_XANCB 109 QPRAVISFGGFAAGPGGLAARLLGVPLLVHEQNRAPGMTNKVLSRFARRVL 159 ************************************************997 PP >> sp|Q2SZI3|MURG_BURTA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 103.3 0.5 5.2e-31 2.9e-28 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 103.3 bits; conditional E-value: 5.2e-31 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ q++G++V l+ p g+e+++ +++g++++ + + +l+ k+ ++l +++ l+a ++ ++l++ k sp|Q2SZI3|MURG_BURTA 9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LATKLALPFNLLRACAQSLRALRRVK 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv sp|Q2SZI3|MURG_BURTA 96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146 ***********************************************9986 PP >> sp|Q11GS5|MURG_MESSB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.0 0.3 3.2e-31 1.8e-28 1 137 [. 6 141 .. 6 142 .. 0.94 Alignments for each domain: == domain 1 score: 104.0 bits; conditional E-value: 3.2e-31 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++l++gGT+G+++Pa Ala+eL++rG+ V+lat ++ ++f + e+++i++ ++ ++ l+ lk+ ++ +++++++++++ + k sp|Q11GS5|MURG_MESSB 6 ILLSAGGTGGHLFPAEALAHELRARGWSVHLATDKRATRFAgTFPADEIHAIDSA-TFGSRN-PLALLKSGLSIWRGFKQSTALINRLK 92 79**************************************986666677779999.777777.9************************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p++vvgfggy +++l+aa+++++p+ v+Eqn+++g +nk+l+ r++ + sp|Q11GS5|MURG_MESSB 93 PAAVVGFGGYPTLPPLYAATRRQVPTLVHEQNAVMGRANKALAPRVTAI 141 *******************************************999876 PP >> sp|Q4UQX0|MURG_XANC8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.4 1.4 2.4e-31 1.3e-28 1 138 [. 22 159 .. 22 160 .. 0.98 Alignments for each domain: == domain 1 score: 104.4 bits; conditional E-value: 2.4e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+++P +A+a+ L++rG V+ l++ ++e+++ +++ +++ ++++ +l+ k+ +k l + ++ +a+r+a ++l++ sp|Q4UQX0|MURG_XANC8 22 VMILAGGTGGHIFPGLAVAKVLRARGVPVTwLGADGAMETRLvPQHAIQIDTLAIS-GLRGKG-IVKLLGAPVRVMRAVRAAGFVLRKR 108 6799****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p +v++fgg++a++ ++aa+l+g+p+ v+Eqn pg++nk+l+r+a +vl sp|Q4UQX0|MURG_XANC8 109 QPRAVISFGGFAAGPGGLAARLLGVPLLVHEQNRAPGMTNKVLSRFARRVL 159 ************************************************997 PP >> sp|Q8PCK0|MURG_XANCP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.4 1.4 2.4e-31 1.3e-28 1 138 [. 22 159 .. 22 160 .. 0.98 Alignments for each domain: == domain 1 score: 104.4 bits; conditional E-value: 2.4e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+++P +A+a+ L++rG V+ l++ ++e+++ +++ +++ ++++ +l+ k+ +k l + ++ +a+r+a ++l++ sp|Q8PCK0|MURG_XANCP 22 VMILAGGTGGHIFPGLAVAKVLRARGVPVTwLGADGAMETRLvPQHAIQIDTLAIS-GLRGKG-IVKLLGAPVRVMRAVRAAGFVLRKR 108 6799****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p +v++fgg++a++ ++aa+l+g+p+ v+Eqn pg++nk+l+r+a +vl sp|Q8PCK0|MURG_XANCP 109 QPRAVISFGGFAAGPGGLAARLLGVPLLVHEQNRAPGMTNKVLSRFARRVL 159 ************************************************997 PP >> sp|A3NZL5|MURG_BURP0 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 103.1 0.5 6e-31 3.4e-28 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 103.1 bits; conditional E-value: 6e-31 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ q++G++V l++p g+e+++ + +g++++ + + +l+ k+ +++ +++ l+a ++ ++l++ k sp|A3NZL5|MURG_BURP0 9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGSPAGMEATLvPRHGIPMEYVRFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 5899***************************************************.******.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv sp|A3NZL5|MURG_BURP0 96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146 ***********************************************9986 PP >> sp|Q98KB3|MURG_RHILO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.1 0.7 2.9e-31 1.7e-28 1 137 [. 6 141 .. 6 142 .. 0.94 Alignments for each domain: == domain 1 score: 104.1 bits; conditional E-value: 2.9e-31 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++la+gGT+G+++Pa Ala+eL rG+ V+lat ++ e+f +++pi++ + +k ++ l +++ ++++r+a +i+ + k sp|Q98KB3|MURG_RHILO 6 ILLAAGGTGGHLFPAEALAHELNGRGWTVHLATDDRAERFAgHFPAAAVHPIQSA-TMGSKN-PIAVLGAFWKIWRGVRQASTIIGRIK 92 79***************************************6666666677****.777777.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 pd+vvgfggy +++l+aa+++++p+ ++Eqn+++g +n++l+ r++ + sp|Q98KB3|MURG_RHILO 93 PDAVVGFGGYPTLPPLYAATRRKVPTLIHEQNAVMGRANRALAGRVDAI 141 ********************************************99976 PP >> sp|Q0A6K2|MURG_ALHEH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 103.1 1.1 6.2e-31 3.5e-28 1 138 [. 5 142 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 103.1 bits; conditional E-value: 6.2e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+v+Pa+A+a++L+++G V l+t +gle++v ++a ++ +++ ++ +l+ ++ + l ++ l+al +a +l+++ sp|Q0A6K2|MURG_ALHEH 5 VLIMAGGTGGHVFPALAVAERLREQGVPVVwLGTREGLEARVvPAADIPLESLRVR-GLRGNG-LRGWLAAPFVLLRALWQALGVLRRH 91 789*****************************************************.****99.9999********************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p +v+g+ggy+a++ +aa+l + p++++Eqn+++gl+n+ll+r a +vl sp|Q0A6K2|MURG_ALHEH 92 RPRAVLGMGGYAAGPGAVAAWLTRRPLIIHEQNAVAGLTNRLLSRLARRVL 142 *********************************************999987 PP >> sp|A5IGA6|MURG_LEGPC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 103.1 0.0 6.1e-31 3.4e-28 1 137 [. 5 141 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 103.1 bits; conditional E-value: 6.1e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +v++ggGT+G+v P +Al +e++++G++V+ +++ g+e++ e ++++ + ++ kl++++ slk+l+++++ ++ ++ ++ + sp|A5IGA6|MURG_LEGPC 5 IVFTGGGTAGHVTPNIALIKEFRKEGWNVEyIGSVSGIEKEMiEPMDIPFHGVSSG-KLRRYF-SLKNLLDPFKIVLGIIQSSLLFYKI 91 79******************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kpdvv++ gg+va +++++a+l++ip++ +E++ pgl+n+l+ ++n++ sp|A5IGA6|MURG_LEGPC 92 KPDVVFSKGGFVAFPVVVGAWLNRIPVVAHESDMSPGLANRLSFPFVNKI 141 *****************************************999988886 PP >> sp|Q5L3H6|MURG_GEOKA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 103.5 0.0 4.7e-31 2.6e-28 1 137 [. 5 142 .. 5 144 .. 0.98 Alignments for each domain: == domain 1 score: 103.5 bits; conditional E-value: 4.7e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++l+ggGT+G+v vAl +L++ G+++ ++++ g+e+++ + +g++++++ ++ kl++++ +k++k+++++lk++ +a +++++ sp|Q5L3H6|MURG_GEOKA 5 IILTGGGTAGHVMVNVALIPKLKELGWDIVyIGSHQGIEREIigRIDGVPYYSVSTG-KLRRYF-DWKNFKDPFNVLKGVWQAYRLIQK 91 78****************************************9999***********.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +kpdvv++ gg+v+++++++a+l+g+p +++E++ pgl+nk+ + +a+++ sp|Q5L3H6|MURG_GEOKA 92 EKPDVVFSKGGFVSVPVILGAWLNGVPSVIHESDLTPGLANKIAMPFATKI 142 **********************************************99987 PP >> sp|A0LTM3|MURG_ACIC1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 103.3 0.9 5.2e-31 2.9e-28 1 135 [. 3 139 .. 3 143 .. 0.97 Alignments for each domain: == domain 1 score: 103.3 bits; conditional E-value: 5.2e-31 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G++ePa+ la++L+rr+ V l++p+gle+++ +++g + i++ +l+++l +++ l + + + a+ ++++il+ sp|A0LTM3|MURG_ACIC1 3 VVLAGGGTAGHIEPALTLAEALRRRDVGVGitlLGSPRGLETRLvPARGFDLALIPAV-PLPRRL-TPDLLAVPSRLRAAVGEVERILA 89 79***************************9****************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 e +dv+vgfggyva++ ++aa++ g p +v+E+n++pgl+n++ +r+ sp|A0LTM3|MURG_ACIC1 90 ETGADVLVGFGGYVALPGYLAARRTGLPYVVHEANARPGLANRWGARFTR 139 ********************************************998865 PP >> sp|Q3A2G6|MURG_PELCD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 102.8 0.0 7.6e-31 4.3e-28 2 137 .. 4 141 .. 3 143 .. 0.96 Alignments for each domain: == domain 1 score: 102.8 bits; conditional E-value: 7.6e-31 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +laggGT+G+++PavAla++L +++ e ++t +g+e++v +e+g + + i+++ ++ +++ l++l+ + +++ + il++ sp|Q3A2G6|MURG_PELCD 4 LLAGGGTGGHLFPAVALAQRLLEQDSEAQvqfVGTARGIEARVlPEQGWPLELIDIR-GFVNQG-LLGKLRMIPCLIRSVWQGLCILRK 90 89*******************9999888888**************************.****99.999999999999************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 ++pdvv+g+ggy++++ l+aa+l +ip++++Eqn+ pgl+n+ll +a v sp|Q3A2G6|MURG_PELCD 91 FQPDVVLGVGGYASAPMLVAARLKRIPTVIHEQNAWPGLTNRLLGPWARCV 141 *******************************************99988765 PP >> sp|Q0AYQ8|MURG_SYNWW UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 99.2 0.0 9.8e-30 5.5e-27 1 136 [. 3 140 .. 3 143 .. 0.97 Alignments for each domain: == domain 1 score: 99.2 bits; conditional E-value: 9.8e-30 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+A+a +L++r e + ++t++gle+ + + agl + +i++ + ++ +lk+ ++l ++ +++++a i+k sp|Q0AYQ8|MURG_SYNWW 3 FIITGGGTGGHIYPALAIASGLKERLGEAEilyVGTKKGLEANIvPRAGLRFTTIDIS-GIDRSS-MLKASRSLVKFPRSFFQAWDIIK 89 789**********************8888888**************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 +++pd+v+g+ggyv+ +++ a ++ +++++Eqn+ipgl+n+ l+rr++ sp|Q0AYQ8|MURG_SYNWW 90 DFQPDIVIGTGGYVSFPIVMAGTFFPSKTVIHEQNAIPGLANRNLARRVDY 140 ***********************************************9985 PP >> sp|Q1LIM6|MURG_RALME UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 102.0 0.1 1.3e-30 7.6e-28 2 138 .. 7 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 102.0 bits; conditional E-value: 1.3e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+ar+L+++G++V l+ g+e+++ +++ ++++ i+ + +l+ k+ l++l+ +++ l+a+ ++ +l++ k sp|Q1LIM6|MURG_RALME 7 LVMAGGTGGHVFPGLAVARALRDEGWRVVwLGNRTGMEATLvPKHDIPMEYIQFG-GLRGKG-LLTKLLLPLNLLRAFWQSIGALRRVK 93 789****************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggy+ +a+ a+l+g p++++Eqn+i+gl+nk+l++ a++vl sp|Q1LIM6|MURG_RALME 94 PDVVLGMGGYITFPAGMMASLLGRPLVLHEQNSIAGLANKVLAKVADRVL 143 ***********************************************997 PP >> sp|Q92NL9|MURG_RHIME UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.5 0.5 3.7e-30 2.1e-27 1 137 [. 6 141 .. 6 142 .. 0.94 Alignments for each domain: == domain 1 score: 100.5 bits; conditional E-value: 3.7e-30 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 ++la+gGT+G+++Pa Ala+eL++ G+ V+l+t + e+f+ +++++++vp ig++ + +k +++++ + +lr+a+++ sp|Q92NL9|MURG_RHIME 6 ILLAAGGTGGHLFPAEALAHELKATGYSVHLVTDSRAERFTgkfPADEIHVVPsatIGSK-------NPVKLARSVWKLWTGLRAARRL 87 79**************************************99888999999995444444.......599******************* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +++ kp +vvgfggy +++l+aa+ gip +++Eqn+++g +nk l+ r++ v sp|Q92NL9|MURG_RHIME 88 IARLKPRAVVGFGGYPTVPPLLAATGMGIPSIIHEQNAVMGRANKMLASRVKAV 141 **************************************************9987 PP >> sp|Q72JP9|MURG_THET2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.4 0.3 3.9e-30 2.2e-27 1 135 [. 2 134 .. 2 138 .. 0.95 Alignments for each domain: == domain 1 score: 100.4 bits; conditional E-value: 3.9e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++l+ggGT+G+++Pa+A+a+eL+rrGh V l+++ gle+++ +++ +++ i+++ kl ++ +++ + +++g + +a ++l++ sp|Q72JP9|MURG_THET2 2 ILLTGGGTGGHLFPALAVAEELRRRGHPVFyLGAEGGLEARLlPKTPIPHALIPAG-KLDRSALRPQEAPKVLQG---VLRAQALLRRL 86 79******************************************************.****88777777777777...*********** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +p++v+++ggy+ + + aa+l+gip+ ++Eqn++ gl+n++l+ a+ sp|Q72JP9|MURG_THET2 87 RPKAVLSTGGYAGFPGGMAASLLGIPLLLHEQNARLGLANRALAPLAK 134 *****************************************9887665 PP >> sp|A1R5F8|MURG_ARTAT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 103.4 0.9 5e-31 2.8e-28 1 138 [. 14 153 .. 14 154 .. 0.97 Alignments for each domain: == domain 1 score: 103.4 bits; conditional E-value: 5e-31 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 vvlaggGT+G+v P++A+a++ +++ +e ++tp g+e+++ ++ag+e +i+ +++++ s + +k +a+ a+r+a++il+ sp|A1R5F8|MURG_ARTAT 14 VVLAGGGTAGHVSPLLAIADAIREKRPEAAilaVGTPSGMETRLvPAAGYELATIDRV-PFPRRP-SADLVKLPARLSGAVRQARRILE 100 79****************************9***************************.****99.9999999999999********** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ea++dv+vg+ggyv ++ ++aa++++ip++++E+n +gl+n++ +r+ n v+ sp|A1R5F8|MURG_ARTAT 101 EARADVLVGVGGYVCTPMYLAARKLRIPIVIHEANMKAGLANRVGARFSNHVA 153 ***********************************************999886 PP >> sp|Q87AF9|MURG_XYLFT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 102.6 2.6 8.6e-31 4.9e-28 1 138 [. 12 149 .. 12 150 .. 0.98 Alignments for each domain: == domain 1 score: 102.6 bits; conditional E-value: 8.6e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+++P +A+a L++rG V l++ ++e+++ +++g+e+++i++ +++ ++ +l+ l + ++l a+++a+++l+++ sp|Q87AF9|MURG_XYLFT 12 VMILAGGTGGHIFPGLAVAGVLRARGVPVVwLGAAGKMETHLvPKHGIEIQTIAVS-GVRGHG-MLALLGAPVRVLPAIFAAMRVLRRY 98 6799****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p vvv+fgg++a++ +iaa+l g p++v+Eqn pg++n++l+r a +vl sp|Q87AF9|MURG_XYLFT 99 RPRVVVSFGGFAAGPGGIAARLMGLPLIVHEQNRAPGMTNRVLARVARRVL 149 **********************************************99987 PP >> sp|B2I9B3|MURG_XYLF2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 102.6 2.6 8.8e-31 4.9e-28 1 138 [. 15 152 .. 15 153 .. 0.98 Alignments for each domain: == domain 1 score: 102.6 bits; conditional E-value: 8.8e-31 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+++P +A+a L++rG V l++ ++e+++ +++g+e+++i++ +++ ++ +l+ l + ++l a+++a+++l+++ sp|B2I9B3|MURG_XYLF2 15 VMILAGGTGGHIFPGLAVAGVLRARGVPVVwLGAAGKMETHLvPKHGIEIQTIAVS-GVRGHG-MLALLGAPVRVLPAIFAAMRVLRRY 101 6799****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p vvv+fgg++a++ +iaa+l g p++v+Eqn pg++n++l+r a +vl sp|B2I9B3|MURG_XYLF2 102 RPRVVVSFGGFAAGPGGIAARLMGLPLIVHEQNRAPGMTNRVLARVARRVL 152 **********************************************99987 PP >> sp|A6WZQ6|MURG_OCHA4 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 102.4 0.3 9.9e-31 5.6e-28 1 137 [. 6 141 .. 6 142 .. 0.94 Alignments for each domain: == domain 1 score: 102.4 bits; conditional E-value: 9.9e-31 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G+++Pa Ala+eL++rG++V+lat + +f + a+ +++ i + + + + + ++ lk++++ +++ ++++++++ k sp|A6WZQ6|MURG_OCHA4 6 IVLAAGGTGGHLFPAEALAHELKARGWDVHLATDARAQRFAgAFAEDHVHVIRSA-TIAGR-NPIALLKTFWSLWQGNLDSRKLFRRLK 92 79***************************************98888888889999.55554.59************************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p++v+gfggy +++l+aa+ +ip+ v+Eqn+++g +nk l+ r++ + sp|A6WZQ6|MURG_OCHA4 93 PKLVAGFGGYPTLPPLYAASNMNIPTMVHEQNAVMGRANKGLAGRVKAI 141 ****************************************999998865 PP >> sp|A1V0R8|MURG_BURMS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.8 0.5 1.5e-30 8.6e-28 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 101.8 bits; conditional E-value: 1.5e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ q++G++V l+ p g+e+++ + +g++++ + + +l+ k+ +++ +++ l+a ++ ++l++ k sp|A1V0R8|MURG_BURMS 9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPRHGIPMEYVRFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 5899***************************************************.******.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv sp|A1V0R8|MURG_BURMS 96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146 ***********************************************9986 PP >> sp|A2S5U5|MURG_BURM9 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.8 0.5 1.5e-30 8.6e-28 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 101.8 bits; conditional E-value: 1.5e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ q++G++V l+ p g+e+++ + +g++++ + + +l+ k+ +++ +++ l+a ++ ++l++ k sp|A2S5U5|MURG_BURM9 9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPRHGIPMEYVRFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 5899***************************************************.******.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv sp|A2S5U5|MURG_BURM9 96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146 ***********************************************9986 PP >> sp|A3MR63|MURG_BURM7 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.8 0.5 1.5e-30 8.6e-28 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 101.8 bits; conditional E-value: 1.5e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ q++G++V l+ p g+e+++ + +g++++ + + +l+ k+ +++ +++ l+a ++ ++l++ k sp|A3MR63|MURG_BURM7 9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPRHGIPMEYVRFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 5899***************************************************.******.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv sp|A3MR63|MURG_BURM7 96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146 ***********************************************9986 PP >> sp|Q62GS7|MURG_BURMA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.8 0.5 1.5e-30 8.6e-28 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 101.8 bits; conditional E-value: 1.5e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ q++G++V l+ p g+e+++ + +g++++ + + +l+ k+ +++ +++ l+a ++ ++l++ k sp|Q62GS7|MURG_BURMA 9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPRHGIPMEYVRFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 5899***************************************************.******.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv sp|Q62GS7|MURG_BURMA 96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146 ***********************************************9986 PP >> sp|Q63QJ7|MURG_BURPS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.8 0.5 1.5e-30 8.6e-28 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 101.8 bits; conditional E-value: 1.5e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ q++G++V l+ p g+e+++ + +g++++ + + +l+ k+ +++ +++ l+a ++ ++l++ k sp|Q63QJ7|MURG_BURPS 9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPRHGIPMEYVRFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 5899***************************************************.******.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv sp|Q63QJ7|MURG_BURPS 96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146 ***********************************************9986 PP >> sp|A3NDW4|MURG_BURP6 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.8 0.5 1.5e-30 8.6e-28 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 101.8 bits; conditional E-value: 1.5e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ q++G++V l+ p g+e+++ + +g++++ + + +l+ k+ +++ +++ l+a ++ ++l++ k sp|A3NDW4|MURG_BURP6 9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPRHGIPMEYVRFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 5899***************************************************.******.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv sp|A3NDW4|MURG_BURP6 96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146 ***********************************************9986 PP >> sp|Q3J789|MURG_NITOC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.8 0.3 1.6e-30 8.7e-28 1 132 [. 5 136 .. 5 142 .. 0.97 Alignments for each domain: == domain 1 score: 101.8 bits; conditional E-value: 1.6e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G+++Pa+A+a++L++ G eV ++t gle+++ ++ag++++ i ++ +l+ k+ + l+ +++ l al +a ++l+++ sp|Q3J789|MURG_NITOC 5 VLIMAGGTGGHIFPALAVADRLRAWGVEVVwMGTRHGLEAELvPKAGYPIEWISIG-GLRGKG-LTHWLRAPFKLLLALSQALRALRRW 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGG CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllpr 132 +p+vv+g gg+v+++ +++a+l++ p+ ++Eqn+i g +n+ll+ sp|Q3J789|MURG_NITOC 92 QPAVVLGLGGFVSGPGGLGAWLLRRPLLIHEQNAIVGTANRLLAP 136 ****************************************99865 PP >> sp|Q8K9T4|MURG_BUCAP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 102.3 0.0 1.1e-30 6e-28 1 135 [. 6 140 .. 6 144 .. 0.96 Alignments for each domain: == domain 1 score: 102.3 bits; conditional E-value: 1.1e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gG++G+v+P + +a++L ++G+++ ++t++++e+++ ++ +++++ i+++ +l+++ + ++++ ++l+++ ++++i+k++ sp|Q8K9T4|MURG_BUCAP 6 IIILAGGSGGHVFPGLTIAKHLIKKGWDINwIGTKNKIESEIiPKCNIKIHFIKIQ-GLRNSS-LKNLIMTPINVLNSYLQVRKIIKNW 92 6899****************************************************.****77.888889999**************** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 pd+++g+ggyv+++ ++aa++++ip +++Eqn i+g++nkll++ + sp|Q8K9T4|MURG_BUCAP 93 IPDIILGMGGYVSGPGGLAAWSCKIPFILHEQNKIAGITNKLLSKIST 140 *******************************************98765 PP >> sp|B9M172|MURG_GEOSF UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.9 0.0 1.4e-30 7.8e-28 2 139 .] 4 143 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 101.9 bits; conditional E-value: 1.4e-30 EEE-------HHHHHHHHHHHHH--..-EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrG..heVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+++P +A+a+e+ +r eV ++t++g+e+++ ++ g+ + i + + + + l+++k++a l ++ ++++ilke sp|B9M172|MURG_GEOSF 4 IVAGGGTGGHLFPGIAVAEEFLARNsaNEVLfIGTERGIEARLlPKLGYRLECISAS-GIKGQS-PLTKVKSAALLLYGYSQSRKILKE 90 68*******************9887224566**************************.9**999.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 ++pdvv+g+ggy+++++++ a+ ++i ++++Eqn+ipgl+nk+l+r a++v++ sp|B9M172|MURG_GEOSF 91 FRPDVVLGVGGYASAPVVLSARGLQIRRFIHEQNAIPGLTNKVLARIADKVFI 143 **************************************************985 PP >> sp|B5EBQ1|MURG_GEOBB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.5 0.0 1.9e-30 1.1e-27 2 139 .] 4 143 .. 3 143 .. 0.97 Alignments for each domain: == domain 1 score: 101.5 bits; conditional E-value: 1.9e-30 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+++P +A+a+e+ +r +e + ++t++g+e+++ ++ g++ i + + + + ++k+++++ + l ++ ++++ilke sp|B5EBQ1|MURG_GEOBB 4 IIAGGGTGGHLFPGIAVADEFLARSPENEvlfVGTERGIEARLlPKLGYKLALISAS-GMKGMG-TIKKIMSAGRLLYGYSQSRKILKE 90 68**********************9887777**************************.999988.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 ++pd+v+g+ggy+++++++aa+ gi ++++Eqn+ pgl+nk+l r+++gv++ sp|B5EBQ1|MURG_GEOBB 91 FRPDLVLGVGGYASAPIVLAARGMGIRRFIHEQNAFPGLTNKVLGRFVDGVFI 143 **************************************************985 PP >> sp|Q3JND8|MURG_BURP1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.5 0.6 1.9e-30 1.1e-27 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 101.5 bits; conditional E-value: 1.9e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ q++G++V l+ p g+e+++ + +g++++ + + +l+ k+ +++ +++ l+a ++ ++l++ k sp|Q3JND8|MURG_BURP1 9 MVMAGGTGGHVFPGLAVAHRMQAQGWRVVwLGNPAGMEATLvPRHGIPMEYVHFG-GLRGKG-LATKFALPFNLLRACAQSLRALRRVK 95 5899***************************************************.******.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ + l g p++++Eqn+i+gl+nk+l++ a++vlv sp|Q3JND8|MURG_BURP1 96 PDVVLGMGGYITFPAGLVTVLTGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146 ***********************************************9986 PP >> sp|Q1IKH0|MURG_ACIBL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.8 0.3 1.5e-30 8.4e-28 2 137 .. 4 140 .. 3 142 .. 0.95 Alignments for each domain: == domain 1 score: 101.8 bits; conditional E-value: 1.5e-30 EEE-------HHHHHHHHHHHHH.---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqr.rGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +laggGT+G+v Pa+A+a+eL++ G eV+ ++t++g+e+++ ++ag + + ++++ l++ +++ +k+ ++ ka+ ++++i++e+ sp|Q1IKH0|MURG_ACIBL 4 ILAGGGTGGHVIPALAIAQELKNvHGAEVIfIGTQRGIETRLvPAAGFSLKLVKVG-ALNRVS-FSTRIKTMFDLPKAILESRRIIREF 90 79********************967*******************************.777755.9************************ PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kpdv +g+ggy++++a++aa+l+++p+++ E n pg++n+l++ +a + sp|Q1IKH0|MURG_ACIBL 91 KPDVMIGVGGYASGPAMLAARLCRVPTVIFEPNIYPGFANRLVAPFAAAA 140 ******************************************99998765 PP >> sp|P74657|MURG_SYNY3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.1 0.0 2.6e-30 1.4e-27 2 138 .. 8 141 .. 7 142 .. 0.95 Alignments for each domain: == domain 1 score: 101.1 bits; conditional E-value: 2.6e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+Ala++L +++ ++ l++p++le+++ + ++ ++i+++ +++ + slkt+k ++ l++++ +++++k++k+ sp|P74657|MURG_SYNY3 8 LIAASGTGGHLFPALALAQQLPDYE--IIwLGVPDRLETTLVPRQYPLQTIPVE-GFQGRP-SLKTIKIGWNLLRSVFTVRKLIKSKKI 92 799********************99..556***********8888888889999.999999.*************************** PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++v+ +ggy+a++a++aa+l++ip++ +E+n ipg+v+ +l r++++v+ sp|P74657|MURG_SYNY3 93 NAVATTGGYIAAPAIVAAKLCNIPVIFHESNFIPGKVTTWLGRWCDTVA 141 **********************************************997 PP >> sp|B1YSS4|MURG_BURA4 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.6 0.4 1.7e-30 9.7e-28 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 101.6 bits; conditional E-value: 1.7e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ ++G++V l+ p g+e+++ +++g++++ + + +l+ k+ ++l+ +++ l+a ++ +l++ + sp|B1YSS4|MURG_BURA4 9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPFNLLRACWQSLGALRRVR 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ a+l+g p++++Eqn+i+gl+nk+l+++a++vlv sp|B1YSS4|MURG_BURA4 96 PDVVLGMGGYITFPAGVMAALSGRPLVLHEQNSIAGLANKVLAKFAKRVLV 146 ************************************************986 PP >> sp|Q0BIK1|MURG_BURCM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.6 0.4 1.7e-30 9.7e-28 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 101.6 bits; conditional E-value: 1.7e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ ++G++V l+ p g+e+++ +++g++++ + + +l+ k+ ++l+ +++ l+a ++ +l++ + sp|Q0BIK1|MURG_BURCM 9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPFNLLRACWQSLGALRRVR 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ a+l+g p++++Eqn+i+gl+nk+l+++a++vlv sp|Q0BIK1|MURG_BURCM 96 PDVVLGMGGYITFPAGVMAALSGRPLVLHEQNSIAGLANKVLAKFAKRVLV 146 ************************************************986 PP >> sp|Q6HDR3|MURG2_BACHK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.5 0.0 3.9e-30 2.2e-27 1 138 [. 4 141 .. 4 142 .. 0.99 Alignments for each domain: == domain 1 score: 100.5 bits; conditional E-value: 3.9e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +v++ggG++G+v P +A+ L++ +++ ++++ g+e+++ e++ +++++i+++ kl++++ lk++k+++ + k++ +a +++ sp|Q6HDR3|MURG2_BACHK 4 IVFTGGGSAGHVTPNLAIIPYLKEDNWDISyIGSHQGIEKTIiEKEDIPYYSIASG-KLRRYF-DLKNIKDPFLVMKGVMDAYVRIRK 89 79******************************************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdv+++ gg+v+++++i+ +l+++p+ ++E++ pgl+nk+ r+a +++ sp|Q6HDR3|MURG2_BACHK 90 LKPDVIFSKGGFVSVPVVIGGWLNRVPVLLHESDMTPGLANKIALRFASKIF 141 ***********************************************99987 PP >> sp|Q81JE6|MURG2_BACAN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.5 0.0 3.9e-30 2.2e-27 1 138 [. 4 141 .. 4 142 .. 0.99 Alignments for each domain: == domain 1 score: 100.5 bits; conditional E-value: 3.9e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +v++ggG++G+v P +A+ L++ +++ ++++ g+e+++ e++ +++++i+++ kl++++ lk++k+++ + k++ +a +++ sp|Q81JE6|MURG2_BACAN 4 IVFTGGGSAGHVTPNLAIIPYLKEDNWDISyIGSHQGIEKTIiEKEDIPYYSIASG-KLRRYF-DLKNIKDPFLVMKGVMDAYVRIRK 89 79******************************************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdv+++ gg+v+++++i+ +l+++p+ ++E++ pgl+nk+ r+a +++ sp|Q81JE6|MURG2_BACAN 90 LKPDVIFSKGGFVSVPVVIGGWLNRVPVLLHESDMTPGLANKIALRFASKIF 141 ***********************************************99987 PP >> sp|Q0K6M4|MURG_RALEH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.2 0.2 2.3e-30 1.3e-27 2 138 .. 8 144 .. 7 145 .. 0.98 Alignments for each domain: == domain 1 score: 101.2 bits; conditional E-value: 2.3e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++V l+ g+e+++ +++ ++++ i+ + +l+ k+ +++++ +++ l+a+ ++ ++l++ + sp|Q0K6M4|MURG_RALEH 8 LVMAGGTGGHVFPGLAVAHALREQGWKVVwLGNRTGMEATLvPKHDIPMEFIQFG-GLRGKG-LVTKFLLPLNLLRAFWQSIAALRRVR 94 789****************************************************.******.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p vv+g+ggy+ +a+ a+l+g p++++Eqn+i+gl+nk+l++ a++vl sp|Q0K6M4|MURG_RALEH 95 PSVVLGMGGYITFPAGMMASLLGRPLVLHEQNSIAGLANKVLAKVADRVL 144 ***********************************************997 PP >> sp|Q5WY98|MURG_LEGPL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.0 0.0 2.6e-30 1.5e-27 1 137 [. 5 141 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 101.0 bits; conditional E-value: 2.6e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +v++ggGT+G+v P +Al +e++++G++V+ +++ g+e++ e ++++ + ++ kl++++ slk+l+++++ ++ ++ ++ + sp|Q5WY98|MURG_LEGPL 5 IVFTGGGTAGHVTPNIALIKEFRKEGWNVEyIGSVSGIEKEMiEPLDIPFHGVSSG-KLRRYF-SLKNLLDPFKIVLGIIQSSLLFYKI 91 79****************************************9*************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kpdvv++ gg+va +++++a+l++ip++ +E++ pgl+n+l+ ++n++ sp|Q5WY98|MURG_LEGPL 92 KPDVVFSKGGFVAFPVVVGAWLNRIPVVAHESDMSPGLANRLSFPFVNKI 141 *****************************************999988886 PP >> sp|A0RIN0|MURG3_BACAH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.5 0.0 3.9e-30 2.2e-27 1 138 [. 4 141 .. 4 142 .. 0.99 Alignments for each domain: == domain 1 score: 100.5 bits; conditional E-value: 3.9e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +v++ggG++G+v P +A+ L++ +++ ++++ g+e+++ e++ +++++i+++ kl++++ lk++k+++ + k++ +a +++ sp|A0RIN0|MURG3_BACAH 4 IVFTGGGSAGHVTPNLAIIPYLKEDNWDISyIGSHQGIEKTIiEKEDIPYYSIASG-KLRRYF-DLKNIKDPFLVMKGVMDAYVRIRK 89 79******************************************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdv+++ gg+v+++++i+ +l+++p+ ++E++ pgl+nk+ r+a +++ sp|A0RIN0|MURG3_BACAH 90 LKPDVIFSKGGFVSVPVVIGGWLNRVPVLLHESDMTPGLANKIALRFASKIF 141 ***********************************************99987 PP >> sp|Q7W4B4|MURG_BORPA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.9 0.4 2.9e-30 1.7e-27 1 138 [. 6 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 100.9 bits; conditional E-value: 2.9e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G++ P +A+a+ L++rG++V l+ p+++e ++ + +g+e vp+ + +++ ++ + lk ++ +a +a + l++ sp|Q7W4B4|MURG_BORPA 6 ILIMAGGTGGHIMPGLAVAEVLRERGWRVLwLGNPDKMEGRLvPPRGIELVPLRFQ-GVRGRG-AAALLKLPFLLARACAQAWRRLADI 92 689*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +pdvv+g+ggyva + ++ a+l++ p++v+Eqn+++g +n++l+r a +vl sp|Q7W4B4|MURG_BORPA 93 RPDVVLGMGGYVAFPGGVMAALRRMPLVVHEQNAVAGTANRWLARLARRVL 143 *********************************************999987 PP >> sp|Q5X6U5|MURG_LEGPA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.0 0.0 2.6e-30 1.5e-27 1 137 [. 5 141 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 101.0 bits; conditional E-value: 2.6e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +v++ggGT+G+v P +Al +e++++G++V+ +++ g+e++ e ++++ + ++ kl++++ slk+l+++++ ++ ++ ++ + sp|Q5X6U5|MURG_LEGPA 5 IVFTGGGTAGHVTPNIALIKEFRKEGWNVEyIGSVSGIEKEMiEPLDIPFHGVSSG-KLRRYF-SLKNLLDPFKIVLGIIQSSLLFYKI 91 79****************************************9*************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kpdvv++ gg+va +++++a+l++ip++ +E++ pgl+n+l+ ++n++ sp|Q5X6U5|MURG_LEGPA 92 KPDVVFSKGGFVAFPVVVGAWLNRIPVVAHESDMSPGLANRLSFPFVNKI 141 *****************************************999988886 PP >> sp|Q5ZXC4|MURG_LEGPH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.0 0.0 2.6e-30 1.5e-27 1 137 [. 5 141 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 101.0 bits; conditional E-value: 2.6e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +v++ggGT+G+v P +Al +e++++G++V+ +++ g+e++ e ++++ + ++ kl++++ slk+l+++++ ++ ++ ++ + sp|Q5ZXC4|MURG_LEGPH 5 IVFTGGGTAGHVTPNIALIKEFRKEGWNVEyIGSVSGIEKEMiEPLDIPFHGVSSG-KLRRYF-SLKNLLDPFKIVLGIIQSSLLFYKI 91 79****************************************9*************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kpdvv++ gg+va +++++a+l++ip++ +E++ pgl+n+l+ ++n++ sp|Q5ZXC4|MURG_LEGPH 92 KPDVVFSKGGFVAFPVVVGAWLNRIPVVAHESDMSPGLANRLSFPFVNKI 141 *****************************************999988886 PP >> sp|A6M1F0|MURG_CLOB8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.4 0.0 2e-30 1.1e-27 1 136 [. 6 141 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 101.4 bits; conditional E-value: 2e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggGT+G+v P +Al +L++++ e++ +++ +g+e+++ ++ ++++ i ++ kl++++ +k+++++++ lk++ +a +il+++ sp|A6M1F0|MURG_CLOB8 6 IIMTGGGTAGHVTPNLALVPKLKQKDFEIKyIGSFDGIEKEIiTKNNIPFFGISCG-KLRRYF-DVKNFTDPFKILKGIAQALKILSKE 92 689*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 kpdv+++ gg+va++++iaa+ +ip++ +E++ pgl+nkl++ ++++ sp|A6M1F0|MURG_CLOB8 93 KPDVIFSKGGFVAVPVVIAASIKKIPVVAHESDMTPGLANKLSAPFCDK 141 ******************************************9988876 PP >> sp|B8D7B9|MURG_BUCAT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.4 0.0 2e-30 1.1e-27 1 135 [. 6 140 .. 6 144 .. 0.95 Alignments for each domain: == domain 1 score: 101.4 bits; conditional E-value: 2e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gG++G+v+P + +ar L ++G+ V ++t++ +e+++ +++g++++ i ++ +l++ + + ++ l+a+ ++k+i+k + sp|B8D7B9|MURG_BUCAT 6 IIIMAGGSGGHVFPGLTIARYLIEKGWLVNwIGTKNSIESRIiPKYGIKIHYISIK-GLRNTS-LKNLIISPIYILRAYYAVKKIIKTW 92 6899****************************************************.****66.666778999999************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +pd+v+g+ggyv+++ ++a++ ++ip+ ++Eqn i+g++nk+l+r + sp|B8D7B9|MURG_BUCAT 93 SPDIVLGMGGYVSGPGGVASWNCNIPLLLHEQNKIAGITNKWLSRIST 140 *******************************************99766 PP >> sp|P57311|MURG_BUCAI UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.4 0.0 2e-30 1.1e-27 1 135 [. 6 140 .. 6 144 .. 0.95 Alignments for each domain: == domain 1 score: 101.4 bits; conditional E-value: 2e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gG++G+v+P + +ar L ++G+ V ++t++ +e+++ +++g++++ i ++ +l++ + + ++ l+a+ ++k+i+k + sp|P57311|MURG_BUCAI 6 IIIMAGGSGGHVFPGLTIARYLIEKGWLVNwIGTKNSIESRIiPKYGIKIHYISIK-GLRNTS-LKNLIISPIYILRAYYAVKKIIKTW 92 6899****************************************************.****66.666778999999************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +pd+v+g+ggyv+++ ++a++ ++ip+ ++Eqn i+g++nk+l+r + sp|P57311|MURG_BUCAI 93 SPDIVLGMGGYVSGPGGVASWNCNIPLLLHEQNKIAGITNKWLSRIST 140 *******************************************99766 PP >> sp|Q7VUQ3|MURG_BORPE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.6 0.4 3.6e-30 2e-27 1 138 [. 6 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 100.6 bits; conditional E-value: 3.6e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G++ P +A+a+ L++rG++V l+ p+++e ++ + +g+e vp+ + +++ ++ + lk ++ +a +a + l++ sp|Q7VUQ3|MURG_BORPE 6 ILIMAGGTGGHIMPGLAVAEVLRERGWRVLwLGNPDKMEGRLvPPRGIELVPLRFQ-GVRGRG-AAALLKLPFLLARACAQAWRRLADI 92 689*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +pdvv+g+ggyva + ++ a+l++ p++v+Eqn+++g +n++l+r a +vl sp|Q7VUQ3|MURG_BORPE 93 RPDVVLGMGGYVAFPGGVMAALRRTPLVVHEQNAVAGTANRWLARLARRVL 143 *********************************************999987 PP >> sp|Q7WFS2|MURG_BORBR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.6 0.4 3.6e-30 2e-27 1 138 [. 6 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 100.6 bits; conditional E-value: 3.6e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G++ P +A+a+ L++rG++V l+ p+++e ++ + +g+e vp+ + +++ ++ + lk ++ +a +a + l++ sp|Q7WFS2|MURG_BORBR 6 ILIMAGGTGGHIMPGLAVAEVLRERGWRVLwLGNPDKMEGRLvPPRGIELVPLRFQ-GVRGRG-AAALLKLPFLLARACAQAWRRLADI 92 689*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +pdvv+g+ggyva + ++ a+l++ p++v+Eqn+++g +n++l+r a +vl sp|Q7WFS2|MURG_BORBR 93 RPDVVLGMGGYVAFPGGVMAALRRTPLVVHEQNAVAGTANRWLARLARRVL 143 *********************************************999987 PP >> sp|B2SYX6|MURG_BURPP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 99.8 0.3 6.3e-30 3.6e-27 2 139 .] 10 147 .. 9 147 .. 0.98 Alignments for each domain: == domain 1 score: 99.8 bits; conditional E-value: 6.3e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a+ q+ G++V l+ p g+e+++ +++g++++ + + +l+ k+ + ++l+ + + l+a ++ +l++ k sp|B2SYX6|MURG_BURPP 10 MVMAGGTGGHVFPGLAVAHLMQAWGWKVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-MKTKLMLPVNLLRACTQSLSVLRRVK 96 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv sp|B2SYX6|MURG_BURPP 97 PDVVLGMGGYITFPAGLMTALSGRPLVLHEQNSIAGLANKVLAKVAKRVLV 147 ***********************************************9986 PP >> sp|B0B8Y7|MURG_CHLT2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.9 0.0 2.9e-30 1.6e-27 1 137 [. 7 141 .. 7 143 .. 0.93 Alignments for each domain: == domain 1 score: 100.9 bits; conditional E-value: 2.9e-30 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G++ Pa+A +++ ++++eV l +gl++f+ ++++++ i+++ + +l+ +++++ + + +k++ +a + +++++ sp|B0B8Y7|MURG_CHLT2 7 IVLAVGGTGGHIIPALAARETFIHEDIEV-LLLGKGLAHFLgDDSEIAYCDIPSG--SPFSLRVNRMFSGAKQLYKGYVAALQKIRDFT 92 79***************************.99***********************..44444777777777777777************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 pd+ +gfg+y++++a++a+++++ip++++Eqn +pg+vnkl++r+a+gv sp|B0B8Y7|MURG_CHLT2 93 PDLAIGFGSYHSLPAMLASIRSRIPLFLHEQNIVPGKVNKLFSRFAKGV 141 ***********************************************98 PP >> sp|B0BAL6|MURG_CHLTB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.9 0.0 2.9e-30 1.6e-27 1 137 [. 7 141 .. 7 143 .. 0.93 Alignments for each domain: == domain 1 score: 100.9 bits; conditional E-value: 2.9e-30 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G++ Pa+A +++ ++++eV l +gl++f+ ++++++ i+++ + +l+ +++++ + + +k++ +a + +++++ sp|B0BAL6|MURG_CHLTB 7 IVLAVGGTGGHIIPALAARETFIHEDIEV-LLLGKGLAHFLgDDSEIAYCDIPSG--SPFSLRVNRMFSGAKQLYKGYVAALQKIRDFT 92 79***************************.99***********************..44444777777777777777************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 pd+ +gfg+y++++a++a+++++ip++++Eqn +pg+vnkl++r+a+gv sp|B0BAL6|MURG_CHLTB 93 PDLAIGFGSYHSLPAMLASIRSRIPLFLHEQNIVPGKVNKLFSRFAKGV 141 ***********************************************98 PP >> sp|B8D914|MURG_BUCA5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 101.0 0.0 2.6e-30 1.5e-27 1 135 [. 6 140 .. 6 144 .. 0.95 Alignments for each domain: == domain 1 score: 101.0 bits; conditional E-value: 2.6e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gG++G+v+P + +ar L ++G+ V ++t++ +e+++ +++g++++ i ++ +l++ + + ++ l+a+ ++k+i+k + sp|B8D914|MURG_BUCA5 6 IIIMAGGSGGHVFPGLTIARYLIEKGWLVNwIGTKNSIESRIiPTYGIKIHYISIK-GLRNTS-LKNLIISPIYILRAYYAVKKIIKTW 92 6899****************************************************.****66.666778999999************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +pd+v+g+ggyv+++ ++a++ ++ip+ ++Eqn i+g++nk+l+r + sp|B8D914|MURG_BUCA5 93 SPDIVLGMGGYVSGPGGVASWNCNIPLLLHEQNKIAGITNKWLSRIST 140 *******************************************99766 PP >> sp|Q47AA4|MURG_DECAR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.4 0.3 4.2e-30 2.4e-27 1 138 [. 5 142 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 100.4 bits; conditional E-value: 4.2e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+++Pa+A+a++L+++G++V l+ p+g+e+++ +++g e+v i+ l+ k+ l++l+ + + l+++ + +++++ sp|Q47AA4|MURG_DECAR 5 ILVMAGGTGGHIFPALAVAHKLRDAGWRVVwLGNPEGMEARLvPQHGFEMVWIKFS-ALRGKG-ILRKLLLPVNLLRGFWQGLKAIRQV 91 789*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kp+vv+g+ggy+ + + a+l g+p++++Eqn+++gl+n++l+ a++++ sp|Q47AA4|MURG_DECAR 92 KPNVVLGMGGYITFPGGMMAALTGVPLVLHEQNSVAGLANRVLASVADRIV 142 *********************************************999986 PP >> sp|A4JB94|MURG_BURVG UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.4 0.3 4.1e-30 2.3e-27 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 100.4 bits; conditional E-value: 4.1e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ ++G++V l+ p g+e+++ +++g++++ + + +l+ k+ ++l+ +++ l+a ++ +l++ + sp|A4JB94|MURG_BURVG 9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPFNLLRACWQSLGALRRVR 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ ++l+g p++++Eqn+i+gl+nk+l+++a++vlv sp|A4JB94|MURG_BURVG 96 PDVVLGMGGYITFPAGVMTALSGRPLVLHEQNSIAGLANKVLAKFAKRVLV 146 ************************************************986 PP >> sp|Q2Y638|MURG_NITMU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.4 0.1 4e-30 2.2e-27 1 138 [. 5 142 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 100.4 bits; conditional E-value: 4e-30 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+P +A+a+ L+++G+++ l+t+ g+e+++ +++g + ++i +l+ k + l+ +a+ l a+ ++ +++++ sp|Q2Y638|MURG_NITMU 5 ILIMAGGTGGHVFPGLAVAEYLKAAGWRIVwLGTEGGMETTLaRQQGHALETIRFS-GLRGKN-VRTWLLLPARLLLAFWQSARVIRKV 91 689*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +pdvv+g+ggy a + + a+l+ p+ ++Eqn+ipgl+n++l+r a++vl sp|Q2Y638|MURG_NITMU 92 RPDVVLGMGGYPAFPGGMMASLLARPLLIHEQNSIPGLANRILSRLADRVL 142 ************************************************997 PP >> sp|B2JHG0|MURG_BURP8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.2 0.2 4.6e-30 2.6e-27 2 139 .] 10 147 .. 9 147 .. 0.98 Alignments for each domain: == domain 1 score: 100.2 bits; conditional E-value: 4.6e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a+ q+ G++V l+ p+g+e+++ +++g++++ ++ + +l+ k+ + ++l+ + + l+a ++ +l++ k sp|B2JHG0|MURG_BURP8 10 MVMAGGTGGHVFPGLAVAHLMQAWGWRVVwLGNPNGMEATLvPKHGIPMEYVQFG-GLRGKG-MKTKLMLPVNLLRACMQSLSVLRRVK 96 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a+ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv sp|B2JHG0|MURG_BURP8 97 PDVVLGMGGYITFPAGMMTALSGTPLVLHEQNSIAGLANKVLAKLAKRVLV 147 ***********************************************9986 PP >> sp|O84766|MURG_CHLTR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.2 0.0 4.6e-30 2.6e-27 1 137 [. 7 141 .. 7 143 .. 0.93 Alignments for each domain: == domain 1 score: 100.2 bits; conditional E-value: 4.6e-30 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G++ Pa+A +++ ++++eV l +gl++f+ ++++++ i+++ + +l+ +++++ + + +k++ +a + +++++ sp|O84766|MURG_CHLTR 7 IVLAVGGTGGHIIPALAARETFIHEDIEV-LLLGKGLAHFLgDDSEVAYCDIPSG--SPFSLRVNRMFSGAKQLYKGYVAALQKIRDFT 92 79***************************.99***********************..44444777777777777777************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 pd+ +gfg+y++++a++a+++++ip++++Eqn +pg+vnkl++r+a+gv sp|O84766|MURG_CHLTR 93 PDLAIGFGSYHSLPAMLASIRSRIPLFLHEQNIVPGKVNKLFSRFAKGV 141 ***********************************************98 PP >> sp|Q3KKT1|MURG_CHLTA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.2 0.0 4.6e-30 2.6e-27 1 137 [. 7 141 .. 7 143 .. 0.93 Alignments for each domain: == domain 1 score: 100.2 bits; conditional E-value: 4.6e-30 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G++ Pa+A +++ ++++eV l +gl++f+ ++++++ i+++ + +l+ +++++ + + +k++ +a + +++++ sp|Q3KKT1|MURG_CHLTA 7 IVLAVGGTGGHIIPALAARETFIHEDIEV-LLLGKGLAHFLgDDSEVAYCDIPSG--SPFSLRVNRMFSGAKQLYKGYVAALQKIRDFT 92 79***************************.99***********************..44444777777777777777************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 pd+ +gfg+y++++a++a+++++ip++++Eqn +pg+vnkl++r+a+gv sp|Q3KKT1|MURG_CHLTA 93 PDLAIGFGSYHSLPAMLASIRSRIPLFLHEQNIVPGKVNKLFSRFAKGV 141 ***********************************************98 PP >> sp|A1AU61|MURG_PELPD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 99.8 0.0 6.2e-30 3.5e-27 2 138 .. 4 142 .. 3 143 .. 0.97 Alignments for each domain: == domain 1 score: 99.8 bits; conditional E-value: 6.2e-30 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+++P +A+a+e+ r++ ++t++g+e++ ++ag + + i + + + k+ l++l+ +a ++++r++ ++l + sp|A1AU61|MURG_PELPD 4 IIAGGGTGGHLFPGIAVAEEFLSRDPANQvlfVGTERGIEARAvPAAGFPLELISAA-GIRGKG-GLGKLRGAAMMFNGYRQSCRLLDR 90 68***********************876666**************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++pd+v+g+ggy++++ l+aa+ +++p +++Eqn++pg++n+ll+r+a++++ sp|A1AU61|MURG_PELPD 91 FRPDAVLGVGGYASLPMLLAARTRQVPSFIHEQNAVPGMTNRLLSRFADRIF 142 *************************************************997 PP >> sp|Q2LR48|MURG_SYNAS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 99.8 0.0 6.3e-30 3.6e-27 1 138 [. 5 144 .. 5 145 .. 0.90 Alignments for each domain: == domain 1 score: 99.8 bits; conditional E-value: 6.3e-30 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v++aggGT+G+++P vA+a+eL rr+ e r ++t++g+e++v + g + ++++ + + ++ ++ + l++ +l ++++i++ sp|Q2LR48|MURG_SYNAS 5 VIIAGGGTGGHLFPGVAIAEELLRRDRENRvlfVGTKRGIEKKVlKDLGFRLKLLNVE-GIKGRG-VMRSSLALLKLPGSLMQSMKIIR 91 689**********************9999999************9999*999999999.555555.555555555555566******** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +++pdvv+g+ggy++++a+ aa l gi++ +aEqn+ipgl+n++l r++++v+ sp|Q2LR48|MURG_SYNAS 92 DFRPDVVIGVGGYASGPAVMAAHLMGIKTAIAEQNSIPGLTNRILGRFVDRVF 144 **************************************************997 PP >> sp|Q2G995|MURG_NOVAD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 99.9 0.6 5.6e-30 3.2e-27 2 138 .. 9 143 .. 8 144 .. 0.96 Alignments for each domain: == domain 1 score: 99.9 bits; conditional E-value: 5.6e-30 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 vla+gGT+G++ Pa Ala+eL rrGh+V l+t ++ ++ + + l+a+ ++++ +l + + ++ +k l + ++++ a +++++++p sp|Q2G995|MURG_NOVAD 9 VLAAGGTGGHLIPAFALAVELDRRGHHVALVTDERGAKIPgKPDFLPAHVLPAG-RLGK--NPVALFKGLRAIWQGRAMALRLFESFEP 94 8*****************************************************.9998..789999999999999************* PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 v+gfggy a++al+aa +a+ip++++Eqn++ g vn+ll++r++ ++ sp|Q2G995|MURG_NOVAD 95 SCVIGFGGYPALPALLAAHAARIPTVIHEQNAVLGRVNRLLAKRVDAIA 143 *********************************************9875 PP >> sp|A5EY03|MURG_DICNV UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 99.5 0.3 7.5e-30 4.2e-27 2 138 .. 9 145 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 99.5 bits; conditional E-value: 7.5e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+ar+ ++G ++ l+ + g+e + +eag ++ i++ +l+ ++ ++ lk ++ ++a+++ak+i++ + sp|A5EY03|MURG_DICNV 9 LFMAGGTGGHVYPALAVARAAAEQGSIIHwLGNQSGFEGKKvPEAGFIFHDIAVY-GLRGNG-VIGWLKAPFMIGRAVFQAKKIMQHIQ 95 799**********************9999*********9888*************.*****9.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+gg+++++ +iaa+ ++ip+ ++Eqn+++gl+n ll+r an++l sp|A5EY03|MURG_DICNV 96 PDVVIGMGGFASGPGGIAAKILNIPLLIHEQNAVMGLTNALLSRVANTIL 145 **********************************************9986 PP >> sp|Q8FNU0|MURG_COREF UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 100.6 0.8 3.6e-30 2e-27 1 130 [. 10 140 .. 10 143 .. 0.97 Alignments for each domain: == domain 1 score: 100.6 bits; conditional E-value: 3.6e-30 EEEE-------HHHHHHHHHHHHH.---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqr.rGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 vv+aggGT+G++ePa+A+a++L++ +G V+ l+t +gle+ + + +g + + i+p ++++ l+ +k ++++ k+lr+a+++l++ sp|Q8FNU0|MURG_COREF 10 VVVAGGGTAGHIEPALAVAEALRDgYGATVTaLGTARGLETSLvPDRGFDLRLIEPV-PVPRTP-NLDLVKLPFRVAKSLRQARQVLRD 96 79********************9769*******************************.****99.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130 +++vvgfggyv+++a++aa+++gip +v+E+n+++g++nkl sp|Q8FNU0|MURG_COREF 97 TGAHAVVGFGGYVSAPAYLAARSLGIPFFVHEANARAGMANKLG 140 *****************************************986 PP >> sp|A9AI96|MURG_BURM1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 99.4 0.6 8.1e-30 4.5e-27 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 99.4 bits; conditional E-value: 8.1e-30 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ ++G++V l+ p g+e+++ +++g++++ + + +l+ k+ ++l +++ l+a ++ ++l++ + sp|A9AI96|MURG_BURM1 9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLALPFNLLRACAQSLAALRRVR 95 5899***************************************************.******.99************************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv sp|A9AI96|MURG_BURM1 96 PDVVLGMGGYITFPAGVMTALSGRPLVLHEQNSIAGLANKVLAKLAKRVLV 146 ***********************************************9986 PP >> sp|Q21SW9|MURG_RHOFD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 99.7 0.1 6.9e-30 3.9e-27 2 138 .. 36 177 .. 35 178 .. 0.98 Alignments for each domain: == domain 1 score: 99.7 bits; conditional E-value: 6.9e-30 EEE-------HHHHHHHHHHHHH---EEE......EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr......latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 ++++gGT+G+++P +Ala++L++rG++V+ a++p +e+++ + +g ++++i+ +++ k+ + ++ +++ l+a ++ ++ sp|Q21SW9|MURG_RHOFD 36 LIMAGGTGGHIFPGLALAHALRERGWRVHwlggagTASQPSMESQLvPPQGFAFESIDFS-GVRGKG-LGTLVRLPWRLLRACWQSVAL 122 689***************************9999999***********************.******.********************* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 l++ +pdvv+g ggy+ ++a++ + l+g +++++Eqn+++g++nk+l+r+a++v+ sp|Q21SW9|MURG_RHOFD 123 LRRVQPDVVLGLGGYITLPAGLMSVLLGKALILHEQNSVAGMANKVLARFATRVF 177 *****************************************************97 PP >> sp|B5YFT4|MURG_THEYD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 99.3 0.0 8.8e-30 4.9e-27 1 138 [. 3 142 .. 3 143 .. 0.97 Alignments for each domain: == domain 1 score: 99.3 bits; conditional E-value: 8.8e-30 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v++aggGT+G+++P +Ala+ L + +e ++tp+gle++v +++g+e i ++ ++ k ++++ k+l + lk+++++k i+ sp|B5YFT4|MURG_THEYD 3 VIIAGGGTGGHLFPGIALAESLIGKYPEAQiifVGTPKGLEAKViPKTGYELSFISIQ-GFVGKS-FSEKAKSLKSLLKSMFESKNIIN 89 689**********************9999999**************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++ pd+v+g+ggy++ ++++aa l +ip+++ Eqn +pgl+nkll + a v+ sp|B5YFT4|MURG_THEYD 90 SFAPDIVFGVGGYASFPVVLAAFLKKIPTIILEQNTVPGLANKLLGKIASAVA 142 *********************************************99998876 PP >> sp|A7KAK6|ATG26_PICAN Sterol 3-beta-glucosyltransferase OS=Pichia angusta GN=ATG26 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.8 0.0 1.2e-29 7e-27 1 138 [. 790 924 .. 790 925 .. 0.84 Alignments for each domain: == domain 1 score: 98.8 bits; conditional E-value: 1.2e-29 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.vklwakleslktlkelaeglkalrkakeilkea 87 ++l+++G+rGdv+P++Al+++L+++Gh+Vr++t+ ++e++++++g+ + +i++d +l+a +++ ++ +++ k+ ++ ++++ ++ sp|A7KAK6|ATG26_PICAN 790 FTLLTIGSRGDVQPYIALGKALMKEGHQVRIVTHAEFEPWIKKHGIRFASIAGDpSELMA--LMVTHPTINYNFIKEAKSKFRSWIDD 875 789***************************************************555555..45666555555555555555556555 PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +v ++ ++++++li+++++ +++aE+++ip+++++++p+++++++ sp|A7KAK6|ATG26_PICAN 876 L--LVTSWKACQDTDILIESPSSICGIHIAEKLQIPYFRAFTMPWTRTRAY 924 5..344566679***********************************9987 PP >> sp|Q46WZ4|MURG_RALEJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.9 0.1 1.2e-29 6.9e-27 2 138 .. 8 144 .. 7 145 .. 0.98 Alignments for each domain: == domain 1 score: 98.9 bits; conditional E-value: 1.2e-29 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++L+++G++V l+ g+e+++ +++ ++++ i+ + +l+ k+ +++++ +++ l+a+ ++ +l++ + sp|Q46WZ4|MURG_RALEJ 8 LVMAGGTGGHVFPGLAVAHALREQGWKVVwLGNRTGMEATLvPKHDIPMEFIQFG-GLRGKG-LVTKFLLPLNLLRAFWQSLGALRRVR 94 789****************************************************.******.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p vv+g+ggy+ +a+ a+l+g p++++Eqn+i+gl+nk+l++ a++vl sp|Q46WZ4|MURG_RALEJ 95 PSVVLGMGGYITFPAGMMASLLGRPLVLHEQNSIAGLANKVLAKVADRVL 144 ***********************************************997 PP >> sp|Q13TZ2|MURG_BURXL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.1 0.3 2e-29 1.1e-26 2 139 .] 10 147 .. 9 147 .. 0.98 Alignments for each domain: == domain 1 score: 98.1 bits; conditional E-value: 2e-29 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a+ q+ G++V l+ p g+e+++ +++g++++ + + +l+ k+ ++l+ +++ l+a ++ +l++ k sp|Q13TZ2|MURG_BURXL 10 MVMAGGTGGHVFPGLAVAHLMQAWGWKVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLMLPLNLLRACTQSLSVLRRVK 96 5899***************************************************.******.99999999****************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv sp|Q13TZ2|MURG_BURXL 97 PDVVLGMGGYITFPAGLMTALSGRPLVLHEQNSIAGLANKVLAKVAKRVLV 147 ***********************************************9986 PP >> sp|C6DZK6|MURG_GEOSM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.2 0.0 1.9e-29 1.1e-26 2 139 .] 4 143 .. 3 143 .. 0.96 Alignments for each domain: == domain 1 score: 98.2 bits; conditional E-value: 1.9e-29 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+++P +A+a+e+ +r +e + ++t++g+e+++ ++ g++ i + + + + ++k+++++ + l ++ ++++ilke sp|C6DZK6|MURG_GEOSM 4 IIAGGGTGGHLFPGIAIADEFLARSPENEvlfVGTERGIEARLlPKLGYKLALISAS-GMKGMG-TIKKIMSAGRLLYGYSQSRKILKE 90 68**********************9887777**************************.999988.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 ++pd+v+g+ggy+++++++aa+ g+ ++++Eqn+ pgl+nk+l r ++gv++ sp|C6DZK6|MURG_GEOSM 91 FRPDLVLGVGGYASAPIVLAARGMGVRRFIHEQNAFPGLTNKVLGRIVDGVFI 143 *************************************************9985 PP >> sp|A8GVJ7|MURG_RICB8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.7 0.0 1.4e-29 7.7e-27 1 138 [. 4 135 .. 4 136 .. 0.92 Alignments for each domain: == domain 1 score: 98.7 bits; conditional E-value: 1.4e-29 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vl++gGT+G+++PavAl++eL +r +eV+++t ++e+ + agl ++ i+++ + + l+ l a++ka ++l + + sp|A8GVJ7|MURG_RICB8 4 IVLVAGGTGGHFFPAVALGEELIKRKYEVHFITDLRCEKYInHDAGLIFHVIDLK-------RPKNILLFLPLLSLAIFKAIKLLFSLS 85 79*****************************************************.......34444444444445899********** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p +vvgfggy ++ ++aa+++++p++++Eqn+ g+vn++++ +a++++ sp|A8GVJ7|MURG_RICB8 86 PSAVVGFGGYPVVASMFAAIFLRVPIVIHEQNSYLGKVNRFFANFAKKIA 135 ***********************************************987 PP >> sp|Q1RI55|MURG_RICBR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.7 0.0 1.4e-29 7.7e-27 1 138 [. 4 135 .. 4 136 .. 0.92 Alignments for each domain: == domain 1 score: 98.7 bits; conditional E-value: 1.4e-29 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vl++gGT+G+++PavAl++eL +r +eV+++t ++e+ + agl ++ i+++ + + l+ l a++ka ++l + + sp|Q1RI55|MURG_RICBR 4 IVLVAGGTGGHFFPAVALGEELIKRKYEVHFITDLRCEKYInHDAGLIFHVIDLK-------RPKNILLFLPLLSLAIFKAIKLLFSLS 85 79*****************************************************.......34444444444445899********** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p +vvgfggy ++ ++aa+++++p++++Eqn+ g+vn++++ +a++++ sp|Q1RI55|MURG_RICBR 86 PSAVVGFGGYPVVASMFAAIFLRVPIVIHEQNSYLGKVNRFFANFAKKIA 135 ***********************************************987 PP >> sp|B5ZWJ4|MURG_RHILW UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 96.0 0.7 9.1e-29 5.1e-26 1 137 [. 6 141 .. 6 142 .. 0.89 Alignments for each domain: == domain 1 score: 96.0 bits; conditional E-value: 9.1e-29 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 v+la+gGT+G+v+Pa Ala +L++rG+ V+l+t + e+ +++++++vp ig++ + ++ ++l+ + ++r+ak++ sp|B5ZWJ4|MURG_RHILW 6 VLLAAGGTGGHVFPAEALAFKLKERGYSVHLVTDSRAERYAgkfPAEEIHVVPsatIGSK-------NPVAVARSLWTLWSGMRAAKKL 87 79********************************99999887668889999886444444.......366777777777777******* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +++ kp +vvgfggy +++l+aa+++g+p+ ++Eqn+++g +nk+l+ r+ g+ sp|B5ZWJ4|MURG_RHILW 88 IQRLKPVIVVGFGGYPTVPPLLAATRLGVPTMIHEQNAVMGRANKALATRVQGI 141 ************************************************999886 PP >> sp|B0JFZ1|MURG_MICAN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.3 0.0 1.8e-29 1e-26 2 138 .. 9 142 .. 8 143 .. 0.95 Alignments for each domain: == domain 1 score: 98.3 bits; conditional E-value: 1.8e-29 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 ++a+ GT+G+++Pa+Ala++L ++++e l++p++le + + ++ ++i+++ +++ +l lktlk l+++l+a+ +++ ++k+ +++ sp|B0JFZ1|MURG_MICAN 9 LIAASGTGGHLFPALALAERLPDYEIEW-LGVPDRLEQSLVPKTYPLHTIPIE-GFQTRL-GLKTLKILFSQLRAIWQVRSLIKKRQIA 94 799**********************776.***********7788888889999.999999.**************************** PP HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +v+ +ggy+a++ ++aa+la+ip++++E+n ipg+v+k+l r++++v+ sp|B0JFZ1|MURG_MICAN 95 AVFTTGGYIAGPTILAARLANIPVILHESNYIPGKVTKVLGRWCDTVA 142 ********************************************9986 PP >> sp|Q31KS7|MURG_SYNE7 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.0 0.1 2.3e-29 1.3e-26 2 138 .. 9 141 .. 8 142 .. 0.94 Alignments for each domain: == domain 1 score: 98.0 bits; conditional E-value: 2.3e-29 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 ++a+ GT+G+v+Pa+A+a++L ++ ++ l++p++le+++ + ++ ++i ++ +++ ++ l ++++++ a++k++++lk+++++ sp|Q31KS7|MURG_SYNE7 9 LFAASGTGGHVFPALAVAEALPEAKIDW-LGVPDRLETQLVGDRYPLHTIRVG-GFQGSW--LLRPLTALRLIGAIFKVRRLLKRQQIE 93 79***********************888.************************.99**77..666777777779*************** PP HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +v+ +ggy+a++a+ aa+++gip++++E+n++pg++++ll+r++ +v+ sp|Q31KS7|MURG_SYNE7 94 AVFTTGGYIAGPAIAAAWSLGIPVVLHESNALPGKTTRLLSRFCRRVA 141 ********************************************9986 PP >> sp|Q5N140|MURG_SYNP6 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 97.9 0.1 2.4e-29 1.3e-26 2 138 .. 15 147 .. 14 148 .. 0.94 Alignments for each domain: == domain 1 score: 97.9 bits; conditional E-value: 2.4e-29 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 ++a+ GT+G+v+Pa+A+a++L ++ ++ l++p++le+++ + ++ ++i ++ +++ ++ l ++++++ a++k++++lk+++++ sp|Q5N140|MURG_SYNP6 15 LFAASGTGGHVFPALAVAEALPEAKIDW-LGVPDRLETQLVGDRYPLHTIRVG-GFQGSW--LLRPLTALRLIGAIFKVRRLLKRQQIE 99 79***********************888.************************.99**77..666777777779*************** PP HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +v+ +ggy+a++a+ aa+++gip++++E+n++pg++++ll+r++ +v+ sp|Q5N140|MURG_SYNP6 100 AVFTTGGYIAGPAIAAAWSLGIPVVLHESNALPGKTTRLLSRFCRRVA 147 ********************************************9986 PP >> sp|Q14I26|MURG_FRAT1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 97.6 0.0 2.9e-29 1.6e-26 1 137 [. 8 143 .. 8 145 .. 0.95 Alignments for each domain: == domain 1 score: 97.6 bits; conditional E-value: 2.9e-29 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa+A+a+ L++ +V+ ++tp+++e+ + e ++++ i++ ++++k+ +k+++ +++ + k++ +lk+ sp|Q14I26|MURG_FRAT1 8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNNMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLKSRSLLKK 92 689***************************************655556666..9999.99****.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 k+d+v+gfggyv++++++aa+ +ip++++Eqn+ gl+n++l+++a+++ sp|Q14I26|MURG_FRAT1 93 LKADLVIGFGGYVSGPICLAAAQINIPVIIHEQNAKIGLTNRILAKFATTI 143 ***********************************************9986 PP >> sp|Q5NGM4|MURG_FRATT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 97.6 0.0 2.9e-29 1.6e-26 1 137 [. 8 143 .. 8 145 .. 0.95 Alignments for each domain: == domain 1 score: 97.6 bits; conditional E-value: 2.9e-29 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa+A+a+ L++ +V+ ++tp+++e+ + e ++++ i++ ++++k+ +k+++ +++ + k++ +lk+ sp|Q5NGM4|MURG_FRATT 8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNNMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLKSRSLLKK 92 689***************************************655556666..9999.99****.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 k+d+v+gfggyv++++++aa+ +ip++++Eqn+ gl+n++l+++a+++ sp|Q5NGM4|MURG_FRATT 93 LKADLVIGFGGYVSGPICLAAAQINIPVIIHEQNAKIGLTNRILAKFATTI 143 ***********************************************9986 PP >> sp|Q493Q1|MURG_BLOPB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 97.8 0.0 2.6e-29 1.5e-26 1 138 [. 7 144 .. 7 145 .. 0.94 Alignments for each domain: == domain 1 score: 97.8 bits; conditional E-value: 2.6e-29 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gG++G+v+P +++a+ L + G++V l+t +++e+++ +++g++++ i ++ +++ + ++k +++l+ a+ +a++i+k + sp|Q493Q1|MURG_BLOPB 7 IMIVAGGSGGHVFPGLSVAHYLINHGYQVVwLGTADRIESKLvPQYGIDIKFIRIN-GWNGEKLHIKCIMPLFIC-LAIYQARKIIKYW 93 6789****************************************************.777666689999999987.9************ PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpd+v+g+ggyv+++ ++aa+ +g+p++++Eqn i gl+n++l+ + ++vl sp|Q493Q1|MURG_BLOPB 94 KPDIVLGMGGYVSGPGGLAAWTCGVPLIIHEQNRIIGLTNRYLSIFSKKVL 144 *******************************************98888775 PP >> sp|Q92I58|MURG_RICCN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.2 0.0 1.9e-29 1.1e-26 1 138 [. 4 135 .. 4 136 .. 0.97 Alignments for each domain: == domain 1 score: 98.2 bits; conditional E-value: 1.9e-29 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++l++gGT+G+++PavAl++eL +rG+eV+++t +++ + ++ ++ ++++ +s + ++ l + a+ ka ++l + k sp|Q92I58|MURG_RICCN 4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFITDLRCKQYIkQDMKVIFHILDLK-------RSGNIFLFLPRLSIAVLKAIKLLYNMK 85 689**************************************999***********.......688899999999999************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p v+vgfggy ++++aa+++++p++++Eqn+ g+vnk+++ +a++++ sp|Q92I58|MURG_RICCN 86 PSVTVGFGGYPVIAPMFAAIFLRVPIIIHEQNSYLGKVNKFFASFAKKIA 135 ***********************************************987 PP >> sp|C3PND5|MURG_RICAE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.2 0.0 1.9e-29 1.1e-26 1 138 [. 4 135 .. 4 136 .. 0.97 Alignments for each domain: == domain 1 score: 98.2 bits; conditional E-value: 1.9e-29 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++l++gGT+G+++PavAl++eL +rG+eV+++t +++ + ++ ++ ++++ +s + ++ l + a+ ka ++l + k sp|C3PND5|MURG_RICAE 4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFITDLRCKQYIkQDMKVIFHILDLK-------RSGNIFLFLPRLSIAVLKAIKLLYNMK 85 689**************************************999***********.......688899999999999************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p v+vgfggy ++++aa+++++p++++Eqn+ g+vnk+++ +a++++ sp|C3PND5|MURG_RICAE 86 PSVTVGFGGYPVIAPMFAAIFLRVPIIIHEQNSYLGKVNKFFASFAKKIA 135 ***********************************************987 PP >> sp|C4K2A6|MURG_RICPU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.2 0.0 1.9e-29 1.1e-26 1 138 [. 4 135 .. 4 136 .. 0.97 Alignments for each domain: == domain 1 score: 98.2 bits; conditional E-value: 1.9e-29 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++l++gGT+G+++PavAl++eL +rG+eV+++t +++ + ++ ++ ++++ +s + ++ l + a+ ka ++l + k sp|C4K2A6|MURG_RICPU 4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFITDLRCKQYIkQDMKVIFHILDLK-------RSGNIFLFLPRLSIAVLKAIKLLYNMK 85 689**************************************999***********.......688899999999999************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p v+vgfggy ++++aa+++++p++++Eqn+ g+vnk+++ +a++++ sp|C4K2A6|MURG_RICPU 86 PSVTVGFGGYPVIAPMFAAIFLRVPIIIHEQNSYLGKVNKFFASFAKKIA 135 ***********************************************987 PP >> sp|B2S1A8|MURG_BORHD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.3 0.0 1.8e-29 1e-26 1 139 [] 7 148 .. 7 148 .. 0.98 Alignments for each domain: == domain 1 score: 98.3 bits; conditional E-value: 1.8e-29 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 + ++ggGT+G+v+P +A+ +L++ + +++ l+ + +e+ + e + +++ +i+++ kl++++ sl+++++++++ ++ k+++i+ sp|B2S1A8|MURG_BORHD 7 IFFTGGGTGGHVFPGIAIISKLKELDTNIEffwLGQKGSMEDNIikEHEYIKFIAIPSG-KLRRYF-SLQNFTDVFKVIFGIIKSFFII 93 679******************************************777889********.******.********************** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 k++kp++++++gg+v+ +++iaa+l++++ + +E + pgl++k+++++a ++++ sp|B2S1A8|MURG_BORHD 94 KKYKPQIIYATGGFVSSPPIIAASLLRVKSITHEMDLDPGLATKINSKFASKIHI 148 **************************************************99985 PP >> sp|A8GRZ6|MURG_RICRS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.2 0.0 1.9e-29 1.1e-26 1 138 [. 4 135 .. 4 136 .. 0.97 Alignments for each domain: == domain 1 score: 98.2 bits; conditional E-value: 1.9e-29 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++l++gGT+G+++PavAl++eL +rG+eV+++t +++ + ++ ++ ++++ +s + ++ l + a+ ka ++l + k sp|A8GRZ6|MURG_RICRS 4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFITDLRCKQYIkQDMKVIFHILDLK-------RSGNIFLFLPRLSIAVLKAIKLLYNMK 85 689**************************************999***********.......688899999999999************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p v+vgfggy ++++aa+++++p++++Eqn+ g+vnk+++ +a++++ sp|A8GRZ6|MURG_RICRS 86 PSVTVGFGGYPVIAPMFAAIFLRVPIIIHEQNSYLGKVNKFFASFAKKIA 135 ***********************************************987 PP >> sp|B0BXF6|MURG_RICRO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.2 0.0 1.9e-29 1.1e-26 1 138 [. 4 135 .. 4 136 .. 0.97 Alignments for each domain: == domain 1 score: 98.2 bits; conditional E-value: 1.9e-29 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++l++gGT+G+++PavAl++eL +rG+eV+++t +++ + ++ ++ ++++ +s + ++ l + a+ ka ++l + k sp|B0BXF6|MURG_RICRO 4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFITDLRCKQYIkQDMKVIFHILDLK-------RSGNIFLFLPRLSIAVLKAIKLLYNMK 85 689**************************************999***********.......688899999999999************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p v+vgfggy ++++aa+++++p++++Eqn+ g+vnk+++ +a++++ sp|B0BXF6|MURG_RICRO 86 PSVTVGFGGYPVIAPMFAAIFLRVPIIIHEQNSYLGKVNKFFASFAKKIA 135 ***********************************************987 PP >> sp|Q3SMH3|MURG_THIDA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 97.8 0.4 2.7e-29 1.5e-26 2 138 .. 9 145 .. 8 146 .. 0.97 Alignments for each domain: == domain 1 score: 97.8 bits; conditional E-value: 2.7e-29 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+Pa+A+a++L++rG+ V l+t gle++v ++ag+++v + + +++ k+ +k+l+ +a l a+ ++ ++ + + sp|Q3SMH3|MURG_THIDA 9 MVMAGGTGGHVYPALAVAETLRERGWSVFwLGTRAGLEARVvPAAGIDMVWVSMG-GVRGKG-LVKKLLLPAMLLVAFAQSLGAILRRR 95 5899***************************************************.******.9************************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggy a + + a+l++ p++v+Eqn++ gl+n+ll+ a++vl sp|Q3SMH3|MURG_THIDA 96 PDVVLGMGGYTAFPGGMMASLLNRPLVVHEQNSVGGLTNRLLACLADRVL 145 *****************************************999998886 PP >> sp|Q21MG9|MURG_SACD2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 97.6 0.7 3.1e-29 1.7e-26 1 138 [. 32 175 .. 32 176 .. 0.92 Alignments for each domain: == domain 1 score: 97.6 bits; conditional E-value: 3.1e-29 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-......--EEEE----S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea......gleavpigpdvklwakleslktlkelaeglkalrkak 81 vv+++gGT+G+v+P +A+a++ +rG ++ l++ g+e+++ ++a +++ +i++ +++ k+ ++ l ++++lka+++ak sp|Q21MG9|MURG_SACD2 32 VVIMAGGTGGHVYPGLAVAEAMHQRGFNIAwLGSRGGMEKELvAKAseqmgfDIAFSEIEIS-GVRGKG-RMALLAAPFRVLKAIEQAK 118 799****************************9999999988875553333334777779999.******.******************* PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +il++ +p++v+g+gg+va++ + aa++++ip++++Eqn+ +g +nk+l r+an l sp|Q21MG9|MURG_SACD2 119 QILQKLRPALVIGMGGFVAGPGGMAARKLKIPLVIHEQNAAAGTTNKILRRFANLTL 175 *****************************************************9876 PP >> sp|B1IAM4|MURG_STRPI UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.6 0.0 1.2e-28 6.8e-26 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 95.6 bits; conditional E-value: 1.2e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l+ ++ + G+eV+ ++ ++g+e++ ++gl ++++i+++ kl++++ s++++++++++++++ ++ +i+ sp|B1IAM4|MURG_STRPI 4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 79***************************************99***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+ +g+p++++E++ +gl+nk+ ++a++++ sp|B1IAM4|MURG_STRPI 91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143 **************************************************987 PP >> sp|Q04LK0|MURG_STRP2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.6 0.0 1.2e-28 6.8e-26 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 95.6 bits; conditional E-value: 1.2e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l+ ++ + G+eV+ ++ ++g+e++ ++gl ++++i+++ kl++++ s++++++++++++++ ++ +i+ sp|Q04LK0|MURG_STRP2 4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 79***************************************99***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+ +g+p++++E++ +gl+nk+ ++a++++ sp|Q04LK0|MURG_STRP2 91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143 **************************************************987 PP >> sp|Q8DQM1|MURG_STRR6 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.6 0.0 1.2e-28 6.8e-26 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 95.6 bits; conditional E-value: 1.2e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l+ ++ + G+eV+ ++ ++g+e++ ++gl ++++i+++ kl++++ s++++++++++++++ ++ +i+ sp|Q8DQM1|MURG_STRR6 4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 79***************************************99***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+ +g+p++++E++ +gl+nk+ ++a++++ sp|Q8DQM1|MURG_STRR6 91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143 **************************************************987 PP >> sp|B2IN77|MURG_STRPS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.6 0.0 1.2e-28 6.8e-26 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 95.6 bits; conditional E-value: 1.2e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l+ ++ + G+eV+ ++ ++g+e++ ++gl ++++i+++ kl++++ s++++++++++++++ ++ +i+ sp|B2IN77|MURG_STRPS 4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 79***************************************99***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+ +g+p++++E++ +gl+nk+ ++a++++ sp|B2IN77|MURG_STRPS 91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143 **************************************************987 PP >> sp|C1CQG5|MURG_STRZT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.6 0.0 1.2e-28 6.8e-26 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 95.6 bits; conditional E-value: 1.2e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l+ ++ + G+eV+ ++ ++g+e++ ++gl ++++i+++ kl++++ s++++++++++++++ ++ +i+ sp|C1CQG5|MURG_STRZT 4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 79***************************************99***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+ +g+p++++E++ +gl+nk+ ++a++++ sp|C1CQG5|MURG_STRZT 91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143 **************************************************987 PP >> sp|C1CD52|MURG_STRZJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.6 0.0 1.2e-28 6.8e-26 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 95.6 bits; conditional E-value: 1.2e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l+ ++ + G+eV+ ++ ++g+e++ ++gl ++++i+++ kl++++ s++++++++++++++ ++ +i+ sp|C1CD52|MURG_STRZJ 4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 79***************************************99***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+ +g+p++++E++ +gl+nk+ ++a++++ sp|C1CD52|MURG_STRZJ 91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143 **************************************************987 PP >> sp|Q634T3|MURG2_BACCZ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 97.1 0.0 4.3e-29 2.4e-26 1 138 [. 4 141 .. 4 142 .. 0.99 Alignments for each domain: == domain 1 score: 97.1 bits; conditional E-value: 4.3e-29 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +v++ggG++G+v P +A+ L++ +++ ++++ g+e+++ e++ + +++i+++ kl++++ lk++k+++ + k++ +a +++ sp|Q634T3|MURG2_BACCZ 4 IVFTGGGSAGHVTPNLAIIPYLKEDNWDISyIGSHQGIEKTIiEKEDILYYSIASG-KLRRYF-DLKNIKDPFLVMKGVMDAYVRIRK 89 79******************************************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpdv+++ gg+v+++++i+ +l+++p+ ++E++ pgl+nk+ r+a +++ sp|Q634T3|MURG2_BACCZ 90 LKPDVIFSKGGFVSVPVVIGGWLNRVPVLLHESDMTPGLANKIALRFASKIF 141 ***********************************************99987 PP >> sp|A1VST6|MURG_POLNA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 97.5 0.2 3.1e-29 1.7e-26 2 138 .. 8 149 .. 7 150 .. 0.97 Alignments for each domain: == domain 1 score: 97.5 bits; conditional E-value: 3.1e-29 EEE-------HHHHHHHHHHHHH---EEE......EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr......latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 ++++gGT+G+++P +A+a++L++rG++V+ a+ p +e+++ + +g ++++i+ +++ k+ ++ + +++ lka+ ++ ++ sp|A1VST6|MURG_POLNA 8 LVMAGGTGGHIFPGLAVAEALRERGWRVHwlggkgSAARPSMESQLvPPRGFSFETIDFS-GVRGKG-PVTLALLPLRLLKAFWQSVQV 94 689***************************88888899**********************.******.********************* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +++ kpdvvvg ggy+a +a+ + l+g p++++Eqn+++g+vnk+l+ a++v+ sp|A1VST6|MURG_POLNA 95 IRRVKPDVVVGLGGYIAFPAGMMSVLLGKPLVLHEQNSVAGMVNKVLASVADRVF 149 ***************************************************9997 PP >> sp|A6UB85|MURG_SINMW UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 96.6 0.8 6.1e-29 3.5e-26 1 136 [. 6 140 .. 6 142 .. 0.93 Alignments for each domain: == domain 1 score: 96.6 bits; conditional E-value: 6.1e-29 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 ++la+gGT+G+++Pa Ala+eL++ G+ V+l+t + e+f +++++++v+ ig++ + +k +++++ + +lr+a+++ sp|A6UB85|MURG_SINMW 6 ILLAAGGTGGHLFPAEALAHELKASGYSVHLVTDSRAERFAgrfPADEIHVVAsatIGSK-------NPVKLARSAWKLWTGLRAARRL 87 79**********************************999998778999999885444444.......599******************* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 +++ kp +vvgfggy +++l+aa+ g+p++++Eqn+++g +nk l+ r+ sp|A6UB85|MURG_SINMW 88 ISRLKPMAVVGFGGYPTVPPLLAATGMGVPTIIHEQNAVMGRANKMLASRVAA 140 ***********************************************999876 PP >> sp|B9DNZ7|MURG_STACT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.9 0.0 9.8e-29 5.5e-26 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 95.9 bits; conditional E-value: 9.8e-29 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l q+rG+e +++++g+e++ e++ g+++ pi ++ kl++++ s++++k+++++lk++ +a+++lk sp|B9DNZ7|MURG_STACT 4 IAFTGGGTVGHVSVNLSLIPIAQERGYEAFyVGSKNGIEREMiESQlpGIQYFPISSG-KLRRYI-SVENIKDVFKVLKGVLDARKVLK 90 79****************************************766566888889****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk++ ++a++++ sp|B9DNZ7|MURG_STACT 91 KQKPDLLFSKGGFVSVPVVIAARSLNIPVVIHESDITPGLANKISLKFAKKIY 143 **************************************************997 PP >> sp|B4E6J2|MURG_BURCJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 97.0 0.4 4.6e-29 2.6e-26 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 97.0 bits; conditional E-value: 4.6e-29 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ ++G++V l+ p g+e+++ +++g++++ + + +l+ k+ ++l+ + + l+a ++ +l++ + sp|B4E6J2|MURG_BURCJ 9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPVNLLRACWQSLGALRRVR 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv sp|B4E6J2|MURG_BURCJ 96 PDVVLGMGGYITFPAGVMTALSGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146 ***********************************************9986 PP >> sp|B1JV78|MURG_BURCC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 97.0 0.4 4.6e-29 2.6e-26 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 97.0 bits; conditional E-value: 4.6e-29 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ ++G++V l+ p g+e+++ +++g++++ + + +l+ k+ ++l+ + + l+a ++ +l++ + sp|B1JV78|MURG_BURCC 9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPVNLLRACWQSLGALRRVR 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv sp|B1JV78|MURG_BURCC 96 PDVVLGMGGYITFPAGVMTALSGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146 ***********************************************9986 PP >> sp|C1C649|MURG_STRP7 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.6 0.0 1.2e-28 6.8e-26 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 95.6 bits; conditional E-value: 1.2e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l+ ++ + G+eV+ ++ ++g+e++ ++gl ++++i+++ kl++++ s++++++++++++++ ++ +i+ sp|C1C649|MURG_STRP7 4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 79***************************************99***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+ +g+p++++E++ +gl+nk+ ++a++++ sp|C1C649|MURG_STRP7 91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143 **************************************************987 PP >> sp|Q2S9Z2|MURG_HAHCH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 96.8 0.2 5.3e-29 3e-26 1 135 [. 6 140 .. 6 143 .. 0.97 Alignments for each domain: == domain 1 score: 96.8 bits; conditional E-value: 5.3e-29 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A a +L+++G +V l++ g+ee++ + ++++ i+++ +l+ k+ + l+ + + +al +a+ +++++ sp|Q2S9Z2|MURG_HAHCH 6 FLVMAGGTGGHVYPALASALALREQGANVVwLGARGGMEERIiGRTDIPMRLITIG-GLRGKG-VAALLMAPVNLVRALWQAFSVFRKE 92 799*****************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 kpd v+g+gg+++++ +i a l g p++++Eqn+i+g++n++l+r a sp|Q2S9Z2|MURG_HAHCH 93 KPDCVLGMGGFASGPGGIVACLTGTPLVIHEQNAIAGMTNRWLARGAR 140 ******************************************998765 PP >> sp|B5E2Z9|MURG_STRP4 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.5 0.0 1.3e-28 7.6e-26 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 95.5 bits; conditional E-value: 1.3e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l+ ++ + G+eV+ ++ ++g+e++ ++gl ++++i+++ kl++++ s++++++++++++++ ++ +i+ sp|B5E2Z9|MURG_STRP4 4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVCWGIVQSLFIML 90 79***************************************99***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+ +g+p++++E++ +gl+nk+ ++a++++ sp|B5E2Z9|MURG_STRP4 91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143 **************************************************987 PP >> sp|C1CJF3|MURG_STRZP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.5 0.0 1.3e-28 7.6e-26 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 95.5 bits; conditional E-value: 1.3e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l+ ++ + G+eV+ ++ ++g+e++ ++gl ++++i+++ kl++++ s++++++++++++++ ++ +i+ sp|C1CJF3|MURG_STRZP 4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVCWGIVQSLFIML 90 79***************************************99***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+ +g+p++++E++ +gl+nk+ ++a++++ sp|C1CJF3|MURG_STRZP 91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143 **************************************************987 PP >> sp|A9I4V2|MURG_BORPD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 97.1 0.3 4.4e-29 2.5e-26 1 138 [. 6 143 .. 6 144 .. 0.98 Alignments for each domain: == domain 1 score: 97.1 bits; conditional E-value: 4.4e-29 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++gGT+G++ P +A+a+ L++rG++V l+ p+++e ++ + +g++ vp + +++ ++ ++lk ++ l+a +a +l + sp|A9I4V2|MURG_BORPD 6 VLIMAGGTGGHIMPGLAVADVLRERGWRVLwLGNPDKMEGRLvPPRGIDLVPMHFQ-GVRGRG-VAAMLKLPFLLLRACSQAWGHLTRV 92 789*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +pdvv+g+ggyva + + a+l+g p++v+Eqn+++g +n++l+r a +vl sp|A9I4V2|MURG_BORPD 93 RPDVVLGMGGYVAFPGGMMAALRGLPLVVHEQNAVAGTANRWLARLARRVL 143 *********************************************999987 PP >> sp|B0RIJ3|MURG_CLAMS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.0 1.4 2.3e-29 1.3e-26 2 137 .. 5 142 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 98.0 bits; conditional E-value: 2.3e-29 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +laggGT+G+v P++A+a+eL++r++ + l+t +gle+++ +++g+e +i+ +++++ ++++ + ++ +a+ ++++ ++e sp|B0RIJ3|MURG_CLAMS 5 LLAGGGTAGHVNPLLAVADELRAREPGSTilvLGTREGLESRLvPARGYELLTIARL-PFPRRP-NGAAVRFAPAFTRAVGQIRRMIAE 91 89***********************9887899************************9.****99.999999999*************** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 dvvvgfggy+a++a++aa+++g+p++v+E+n+ pgl+n+l +r a+ v sp|B0RIJ3|MURG_CLAMS 92 RGVDVVVGFGGYAAAPAYLAARRSGVPVVVHEANASPGLANRLGARVATAV 142 ********************************************9999887 PP >> sp|P0CB60|MURG_STRPN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.0 0.0 1.9e-28 1.1e-25 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 95.0 bits; conditional E-value: 1.9e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l+ ++ + G+eV+ ++ ++g+e++ ++gl ++++i+++ kl++++ s++++++++++++++ ++ +i+ sp|P0CB60|MURG_STRPN 4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKCGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 79***************************************99***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+ +g+p++++E++ +gl+nk+ ++a++++ sp|P0CB60|MURG_STRPN 91 RLRPQTLFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143 **************************************************987 PP >> sp|B8ZMZ7|MURG_STRPJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.0 0.0 1.9e-28 1e-25 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 95.0 bits; conditional E-value: 1.9e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l+ ++ + G+eV+ ++ ++g+e++ ++gl ++++i+++ kl++++ s++++++++++++++ ++ +i+ sp|B8ZMZ7|MURG_STRPJ 4 IVFTGGGTVGHVTLNLLLMPKFIEDGWEVHyIGDKRGIEHQEiLKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGIVQSLFIML 90 79***************************************99***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+ +g+p++++E++ +gl+nk+ ++a++++ sp|B8ZMZ7|MURG_STRPJ 91 RLRPQILFSKGGFVSVPPVIAARVSGVPVFIHESDLSMGLANKIAYKFATKMY 143 **************************************************987 PP >> sp|B3PTW0|MURG_RHIE6 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 94.9 0.7 2e-28 1.1e-25 1 137 [. 6 141 .. 6 142 .. 0.90 Alignments for each domain: == domain 1 score: 94.9 bits; conditional E-value: 2e-28 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 v+la+gGT+G+v+Pa Ala +L++rG+ V+l+t + e+f +++++++vp ig++ + ++ ++l+ + ++r+ak++ sp|B3PTW0|MURG_RHIE6 6 VLLAAGGTGGHVFPAEALAFKLKERGYSVHLVTDSRAERFAgkfPAEEIHVVPsatIGSK-------NPVAVARSLWTLWSGMRAAKKL 87 79**************************************98778888888885444444.......366777777777777******* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +++ kp +vvgfggy +++l+aa+++gi+ ++Eqn+++g +nk+l+ r++ + sp|B3PTW0|MURG_RHIE6 88 IQRLKPVIVVGFGGYPTVPPLLAATRLGIASMLHEQNAVMGRANKALAPRVKAI 141 ************************************************999876 PP >> sp|Q0SHS1|MURG_RHOSR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 96.7 1.3 5.8e-29 3.3e-26 1 138 [. 10 155 .. 10 156 .. 0.95 Alignments for each domain: == domain 1 score: 96.7 bits; conditional E-value: 5.8e-29 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v++aggGT+G++ePa+A+a++ ++ + l+t +gle+++ +e+g++ + i+p +l++k +l+ l+ + +++ ++r+++e+l sp|Q0SHS1|MURG_RHOSR 10 VIVAGGGTAGHIEPALAVADAIKAIDDTAVvtaLGTARGLETTLvPERGYPLELIPPV-PLPRKP-TLDLLRLPGRVRASVRRTREVLD 96 689********************977433359**************************.******.*********************** PP HHHHHHHHHC----EEEE--HHH......HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal......lagipanvaEqngipglvnkllprrangvl 138 +dvvvgfggyva++a++aa +++ip++v+E+n+ +g++nk+ +rra +vl sp|Q0SHS1|MURG_RHOSR 97 ATGADVVVGFGGYVALPAYLAAGpgllrrRRRIPIVVHEANASAGIANKIGARRAARVL 155 *********************98999999**************************9997 PP >> sp|Q313Q3|MURG_DESDG UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 96.8 0.9 5.4e-29 3.1e-26 1 139 [] 4 143 .. 4 143 .. 0.97 Alignments for each domain: == domain 1 score: 96.8 bits; conditional E-value: 5.4e-29 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+l++gGT+G+++Pa+A+a+e +r+ + ++ + g e+++ +++g+ ++ ++++ +++ + lk+++ la+ ++ + ++++ sp|Q313Q3|MURG_DESDG 4 VLLTTGGTGGHIFPALAVAEEIRRQYPAADilfVGGSYGPEARIvPAHGIRFEGLPVR-GVMG--RGLKAPLALAAMTAGVARGMRLVG 89 79************************99999999************************.9999..77********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 +++pdvv+gfggy+a +a++aa+l++ p v+Eqn++pg++n+ll++ a++v++ sp|Q313Q3|MURG_DESDG 90 RFNPDVVIGFGGYAAFAAMVAAKLREKPCAVHEQNSVPGMANRLLAKIADRVFI 143 ***************************************************985 PP >> sp|A8F1I4|MURG_RICM5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 96.8 0.0 5.4e-29 3.1e-26 1 138 [. 4 135 .. 4 136 .. 0.97 Alignments for each domain: == domain 1 score: 96.8 bits; conditional E-value: 5.4e-29 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++l++gGT+G+++PavAl++eL +rG+eV+++t +++ + ++ ++ ++++ +s + ++ l + a+ ka ++l + k sp|A8F1I4|MURG_RICM5 4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFITDLRCKQYIkQDMKVIFHILDLK-------RSGNIFLFLPRLSIAVLKAIKLLYNMK 85 689**************************************999***********.......688899999999999************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +v+vgfggy ++++aa+++++p++++Eqn+ g+vnk+++ +a++++ sp|A8F1I4|MURG_RICM5 86 SAVTVGFGGYPVIAPMFAAIFLRVPIIIHEQNSYLGKVNKFFASFAKKIA 135 ***********************************************987 PP >> sp|A6H195|MURG_FLAPJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 97.0 0.0 4.5e-29 2.5e-26 1 138 [. 6 145 .. 6 146 .. 0.98 Alignments for each domain: == domain 1 score: 97.0 bits; conditional E-value: 4.5e-29 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G+++Pa+A+a+eL+ r ++ + +++++++e + ++ag++++ + + +l++k+ +l++ + +++ l +l k++ i++ sp|A6H195|MURG_FLAPJ 6 FILSGGGTGGHIYPAIAIANELKSRFPNCKilfVGAKDKMEMQKvPQAGYDIKGLSIA-GLQRKI-TLQNAMFPFKLLSSLVKSFGIVQ 92 79**************************************98877*************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpdvv+g+gg++++++l a+ +gi++++ Eqn+ pg++nkll+++an++ sp|A6H195|MURG_FLAPJ 93 QFKPDVVIGTGGFASGAVLKVASILGIATVIQEQNSYPGITNKLLSKKANKIC 145 **************************************************985 PP >> sp|A0K486|MURG_BURCH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 97.0 0.4 4.6e-29 2.6e-26 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 97.0 bits; conditional E-value: 4.6e-29 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ ++G++V l+ p g+e+++ +++g++++ + + +l+ k+ ++l+ + + l+a ++ +l++ + sp|A0K486|MURG_BURCH 9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPVNLLRACWQSLGALRRVR 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv sp|A0K486|MURG_BURCH 96 PDVVLGMGGYITFPAGVMTALSGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146 ***********************************************9986 PP >> sp|Q1BZG3|MURG_BURCA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 97.0 0.4 4.6e-29 2.6e-26 2 139 .] 9 146 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 97.0 bits; conditional E-value: 4.6e-29 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+v+P +A+a++ ++G++V l+ p g+e+++ +++g++++ + + +l+ k+ ++l+ + + l+a ++ +l++ + sp|Q1BZG3|MURG_BURCA 9 MVMAGGTGGHVFPGLAVAHRMEAAGWRVVwLGNPAGMEATLvPKHGIPMEYVRFG-GLRGKG-LKTKLTLPVNLLRACWQSLGALRRVR 95 5899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 pdvv+g+ggy+ +a++ ++l+g p++++Eqn+i+gl+nk+l++ a++vlv sp|Q1BZG3|MURG_BURCA 96 PDVVLGMGGYITFPAGVMTALSGRPLVLHEQNSIAGLTNKVLAKLAKRVLV 146 ***********************************************9986 PP >> sp|Q12EL5|MURG_POLSJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 96.6 0.2 6e-29 3.4e-26 2 138 .. 35 176 .. 34 177 .. 0.97 Alignments for each domain: == domain 1 score: 96.6 bits; conditional E-value: 6e-29 EEE-------HHHHHHHHHHHHH---EEE......EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr......latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 ++++gGT+G+++P +A+a++L++rG++V+ a +p +e+++ + +g ++++i+ +++ k+ l+ + +++ lka+ ++ ++ sp|Q12EL5|MURG_POLSJ 35 LVMAGGTGGHIFPGLAVAEALRERGWRVHwlggrgNAGHPSMESQLvPPRGFAFESIDFS-GVRGKG-PLTLVFLPLRLLKAFWQSIQV 121 689***************************77777789**********************.******.********************* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +++ kpdvvvg ggy+a +a+ + l+g p++++Eqn+++g+vnk+l+ a++v+ sp|Q12EL5|MURG_POLSJ 122 VRRVKPDVVVGLGGYIAFPAGMMSVLLGKPLVLHEQNSVAGMVNKVLAGVADRVF 176 *************************************************999997 PP >> sp|Q8UDM8|MURG_AGRT5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 96.2 0.9 7.9e-29 4.5e-26 1 137 [. 6 141 .. 6 142 .. 0.93 Alignments for each domain: == domain 1 score: 96.2 bits; conditional E-value: 7.9e-29 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 v+la+gGT+G+v+Pa Ala++L++rG++V+l+t + e+ +++++++vp ig++ + ++ +++l++ + +lr a+++ sp|Q8UDM8|MURG_AGRT5 6 VLLAAGGTGGHVFPAEALAHTLKARGYQVHLVTDSRAERYAgkfPADEIHVVPsatIGSK-------NPISVVRSLWKLWVGLRTARRL 87 79********************************99999887678999999995444444.......599******************* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 + + kp +vvgfggy +++l+a++ +g+p +++Eqn+++g +nk+l+ r++ + sp|Q8UDM8|MURG_AGRT5 88 VTKLKPVAVVGFGGYPTVPPLLASTGLGVPSIIHEQNAVMGRANKALAARVKAI 141 *************************************************99876 PP >> sp|B7K5Z6|MURG_CYAP8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 96.6 0.0 6.1e-29 3.4e-26 2 138 .. 5 138 .. 4 139 .. 0.97 Alignments for each domain: == domain 1 score: 96.6 bits; conditional E-value: 6.1e-29 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 ++a+ GT+G+++Pa+Ala++L ++ +e l++p++le ++ + ++ ++i+++ +++ + lk+l l++ +++++++ ++k + +d sp|B7K5Z6|MURG_CYAP8 5 LIAASGTGGHLFPALALAEHLPDYQIEW-LGVPDRLEQTLVGDRYPLHSIAVE-GFQTRS-VLKNLQILFKLIRGIFEVRHLIKTHHID 90 799********************99776.************************.****99.**************************** PP HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 vv+ +ggy+a++a+++a+lagi a+++E+n ipg+v++ll+r++++v+ sp|B7K5Z6|MURG_CYAP8 91 VVFTTGGYIAAPAILGARLAGIRAILHESNFIPGKVTRLLSRFCDRVA 138 *********************************************997 PP >> sp|Q2NCZ0|MURG_ERYLH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.4 0.2 1.4e-28 8e-26 2 137 .. 9 142 .. 8 144 .. 0.92 Alignments for each domain: == domain 1 score: 95.4 bits; conditional E-value: 1.4e-28 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 vla+gGT+G++ Pa Ala eL rrGh+V l+t ++ ++ + + l+a+ i+++ ++ + + l+ + l +++k+++ ak+++++++p sp|Q2NCZ0|MURG_ERYLH 9 VLAAGGTGGHLLPAFALAAELDRRGHHVALITDERGAKIPgKPDFLPAHVIPAG-RFGK--NPLRWVGGLRAVWKGREMAKRLFESFQP 94 8*****************************************************.7777..566666666666666************* PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +vvgfggy a++a++aa+++ ip +++Eqn++ g vn+l + r+ + sp|Q2NCZ0|MURG_ERYLH 95 SAVVGFGGYPALPAMLAASREDIPSIIHEQNAVLGRVNRLQAGRVSAI 142 ****************************************99998766 PP >> sp|Q9Y751|ATG26_PICPG Sterol 3-beta-glucosyltransferase OS=Pichia pastoris (strain GS115) GN=ATG26 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.5 0.0 1.3e-28 7.3e-26 1 138 [. 763 897 .. 763 898 .. 0.96 Alignments for each domain: == domain 1 score: 95.5 bits; conditional E-value: 1.3e-28 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrka 80 +vl+++G+rGdv+P+++la++L ++ h+V+++t+++++++ve++g+e+ +i+++ v++++ s+++lke+ e+ sp|Q9Y751|ATG26_PICPG 763 FVLLTIGSRGDVQPYISLAKGLLAENHKVKIVTHEEFKPWVESYGIEFATIAGNpaelmslmVTHKS--LSVGFLKEAKEK------- 841 89*****************************************************999998888888..799999999999....... PP HHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 81 keilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++ + + + +++++ +++++li++++a++ +++aE+++ip+++++++p+++++++ sp|Q9Y751|ATG26_PICPG 842 FTGWIGELLQSSWDAC--QDADVLIESPSAMAGIHIAEKLQIPYFRAFTMPWTRTRAY 897 999*****99999999..8999********************************9987 PP >> sp|Q5P6Z6|MURG_AZOSE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 96.3 0.2 7.5e-29 4.2e-26 2 138 .. 5 141 .. 4 142 .. 0.98 Alignments for each domain: == domain 1 score: 96.3 bits; conditional E-value: 7.5e-29 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+++P vA+a++L+ rG+++ ++ p+g+e+++ +++g+e+ + + l+ k+ l++l+ +++ l+++ +a l++ + sp|Q5P6Z6|MURG_AZOSE 5 LVMAGGTGGHIFPGVAVAEQLRGRGWRIVwMGNPDGMEARIvPQHGYETAWVHFG-ALRGKG-LLRKLLLPLNLLRGFWQALGELRRIR 91 789****************************************************.******.99************************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggyv + + a+l+g p++v+Eqn+++gl+n++l+ a++vl sp|Q5P6Z6|MURG_AZOSE 92 PDVVLGMGGYVTFPGGMMAALLGRPLVVHEQNSVAGLANRVLAGVADRVL 141 *********************************************99997 PP >> sp|B6IRG2|MURG_RHOCS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 96.3 1.1 7.6e-29 4.3e-26 1 137 [. 6 140 .. 6 142 .. 0.97 Alignments for each domain: == domain 1 score: 96.3 bits; conditional E-value: 7.6e-29 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G+++Pa AlareL +rGh+V l+t + ++f + ++++++ i + +l l++ ++++e + ++ +a+++l++ + sp|B6IRG2|MURG_RHOCS 6 IVLAAGGTGGHLFPAEALARELLERGHRVVLVTDVRGTAFGdALREVPVHRIRSA-TLGG--GLLGKARTALELGIGTLQARRLLSRLE 91 79*****************************************************.9999..469************************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p++vvgfggy + +a++aa+ ++ip+ ++Eqn+++g +n+ l+rra + sp|B6IRG2|MURG_RHOCS 92 PAIVVGFGGYPSFPAVYAAAGLRIPVAIHEQNAVMGRANRMLARRARLI 140 *********************************************9865 PP >> sp|A7TF84|ATG26_VANPO Sterol 3-beta-glucosyltransferase OS=Vanderwaltozyma polyspora (strain ATCC 22028 / DSM 70294) # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 96.4 0.0 7e-29 3.9e-26 2 138 .. 760 895 .. 759 896 .. 0.97 Alignments for each domain: == domain 1 score: 96.4 bits; conditional E-value: 7e-29 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 ++++G+rGdv+P++Ala++L ++Gh V+++t++++++fve +g+++++i++d v++ a +++l+e+ ++ + sp|A7TF84|ATG26_VANPO 760 GFLTIGSRGDVQPYIALAKGLIQEGHSVTIITHREFKSFVECHGIDFKEIAGDptklmslmVEHEA--INVGMLMEASSK-------F 838 589********************************************************9999999..69**********.......* PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + + +++++++ ++++li++++a++ +++ E+++ip+++++++p+++++++ sp|A7TF84|ATG26_VANPO 839 RGWIHDLLVTTWEACKNLKLDILIESPSAMAGIHISEALQIPYFRAFTMPWTRTRAY 895 *****************************************************9987 PP >> sp|Q2S528|MURG_SALRD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 94.3 1.4 3.1e-28 1.7e-25 1 138 [. 8 147 .. 8 148 .. 0.96 Alignments for each domain: == domain 1 score: 94.3 bits; conditional E-value: 3.1e-28 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+v+Pa+A+a+++++ ++ +t+++le++ +eag++ +pi+++ +l+++ ++l+ ++++ ++l ++ +++ sp|Q2S528|MURG_SALRD 8 ILMVGGGTGGHVYPAIAIADAVRALRPDAQivfAGTQDRLEARAvPEAGYALHPITAQ-GLQRRA-VASNLLLPFRVAQGLVQSWRLVG 94 6899***********************99987779***********************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +pdv vg+ggyva+++l aa+l+g p+ + Eqn+ +gl+n++l+r a +++ sp|Q2S528|MURG_SALRD 95 AIEPDVAVGTGGYVAAPVLMAAWLRGRPLLIQEQNAYAGLTNRVLARLALRIH 147 *********************************************99887776 PP >> sp|B2SGS8|MURG_FRATM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.7 0.0 1.2e-28 6.5e-26 1 137 [. 8 143 .. 8 145 .. 0.95 Alignments for each domain: == domain 1 score: 95.7 bits; conditional E-value: 1.2e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa+A+a+ L++ +V+ ++tp+ +e+ + e ++++ i++ ++++k+ +k+++ +++ + k++ +lk+ sp|B2SGS8|MURG_FRATM 8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNSMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLKSRSLLKK 92 689***************************************655556666..9999.99****.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 k+d+v+gfggyv++++++aa+ +ip++++Eqn+ gl+n++l+++a+++ sp|B2SGS8|MURG_FRATM 93 LKADLVIGFGGYVSGPICLAAAQINIPVIIHEQNAKIGLTNRILAKFATTI 143 ***********************************************9986 PP >> sp|A4IX64|MURG_FRATW UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.7 0.0 1.2e-28 6.5e-26 1 137 [. 8 143 .. 8 145 .. 0.95 Alignments for each domain: == domain 1 score: 95.7 bits; conditional E-value: 1.2e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa+A+a+ L++ +V+ ++tp+ +e+ + e ++++ i++ ++++k+ +k+++ +++ + k++ +lk+ sp|A4IX64|MURG_FRATW 8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNSMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLKSRSLLKK 92 689***************************************655556666..9999.99****.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 k+d+v+gfggyv++++++aa+ +ip++++Eqn+ gl+n++l+++a+++ sp|A4IX64|MURG_FRATW 93 LKADLVIGFGGYVSGPICLAAAQINIPVIIHEQNAKIGLTNRILAKFATTI 143 ***********************************************9986 PP >> sp|Q67Q48|MURG_SYMTH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.7 1.1 1.1e-28 6.3e-26 2 139 .] 4 143 .. 3 143 .. 0.97 Alignments for each domain: == domain 1 score: 95.7 bits; conditional E-value: 1.1e-28 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++ggGT+G+++Pa+++ar+L ++++e + ++t g e+ + ++ag+++ i ++ ++ + + l+ ++ ++ ++l +a ++++ sp|Q67Q48|MURG_SYMTH 4 LITGGGTGGHIYPALSIARALTEQDPEAEllyVGTRTGREAAIvPQAGIAFAVISSG-GVVNLG-LLQRVRGGLRAARGLLEALGHIRR 90 79*******************************************************.999977.99999999999999********** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 ++pd+v+g+gg+va+++l aa+la++p+++ Eqn+ pg++n+l +r+a+ v+v sp|Q67Q48|MURG_SYMTH 91 FRPDIVIGTGGFVAGPVLAAARLARVPLVIQEQNAFPGVTNRLAARWATAVFV 143 *************************************************9985 PP >> sp|Q6C8M8|ATG26_YARLI Sterol 3-beta-glucosyltransferase OS=Yarrowia lipolytica GN=ATG26 PE=3 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.7 0.0 1.2e-28 6.6e-26 1 138 [. 997 1131 .. 997 1132 .. 0.94 Alignments for each domain: == domain 1 score: 95.7 bits; conditional E-value: 1.2e-28 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalr 78 ++l+++G+rGdv+P+++l+++L ++Gh+Vr+at+ ++++++e +g+e++++++d v + +s+++l+++a++ sp|Q6C8M8|ATG26_YARLI 997 FTLLTIGSRGDVQPYISLGKALIEEGHRVRIATHSEFKDWIEGYGIEFKEVAGDpselmkimVDHGV--FSVSFLRDAASK----- 1075 789*******************************************************997777777..8***********..... PP HHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 79 kakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++ + ++ + +++++ + ++li++++a++ +++aE+++ip+++++++p+ +++++ sp|Q6C8M8|ATG26_YARLI 1076 --FRGWINELLASSWEAC--QGSDVLIESPSAMAGIHIAEALQIPYFRAFTMPWSRTRAY 1131 ..9999999988887777..78999******************************99987 PP >> sp|C1AU55|MURG_RHOOB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.6 1.4 1.2e-28 7e-26 1 138 [. 10 155 .. 10 156 .. 0.95 Alignments for each domain: == domain 1 score: 95.6 bits; conditional E-value: 1.2e-28 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v++aggGT+G++ePa+A+a++ ++ + l+t +gle+++ +e+g++ + ++p +l++k +l+ l+ + +++ ++r+++e+l sp|C1AU55|MURG_RHOOB 10 VIVAGGGTAGHIEPALAVADAIKAIDDTAVvtaLGTARGLETTLvPERGYPLELVPPV-PLPRKP-TLDLLRLPGRVRASVRRTREVLD 96 689********************977433359**************************.******.*********************** PP HHHHHHHHHC----EEEE--HHH......HHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal......lagipanvaEqngipglvnkllprrangvl 138 +dvvvgfggyva++a++aa +++ip++v+E+n+ +g++nk+ +rra +vl sp|C1AU55|MURG_RHOOB 97 ATGADVVVGFGGYVALPAYLAAGpgllrrRRRIPIVVHEANASAGIANKIGARRAARVL 155 *********************98999999**************************9997 PP >> sp|B3E3Y2|MURG_GEOLS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.6 0.1 1.2e-28 6.8e-26 2 139 .] 4 143 .. 3 143 .. 0.97 Alignments for each domain: == domain 1 score: 95.6 bits; conditional E-value: 1.2e-28 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+++P +A+a+e+ r++ +++++g+e++ + g++ + i + + + k+ sl++lk +a ++ ++++il + sp|B3E3Y2|MURG_GEOLS 4 IVAGGGTGGHLFPGIAVAEEFLSRDPANQvlfVGSERGIEARAiPRLGYQLELISAA-GIRGKG-SLAKLKGAAMMIYGYAQSRKILHR 90 68***********************876666**************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 ++pd+v+g+ggy++++ + aa+ +ip++++Eqn++pg++nk+l+r an+v++ sp|B3E3Y2|MURG_GEOLS 91 FQPDLVLGVGGYASLPMVMAARGMEIPRYIHEQNALPGMSNKVLSRVANKVFI 143 **************************************************985 PP >> sp|A0Q766|MURG_FRATN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.4 0.0 1.4e-28 8.1e-26 1 137 [. 8 143 .. 8 145 .. 0.95 Alignments for each domain: == domain 1 score: 95.4 bits; conditional E-value: 1.4e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa+A+a+ L++ +V+ ++tp+ +e+ + e ++++ i++ ++++k+ +k+++ +++ + +++ +lk+ sp|A0Q766|MURG_FRATN 8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNSMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLRSRSLLKK 92 689***************************************655556666..9999.99****.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 k+d+v+gfggyv++++++aa+l +ip++++Eqn+ gl+n++l+++a+++ sp|A0Q766|MURG_FRATN 93 LKADLVIGFGGYVSGPICLAAALINIPVIIHEQNAKIGLTNRILAKFATTI 143 ***********************************************9986 PP >> sp|B1WVP7|MURG_CYAA5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 96.1 0.0 8.7e-29 4.9e-26 2 138 .. 5 138 .. 4 139 .. 0.97 Alignments for each domain: == domain 1 score: 96.1 bits; conditional E-value: 8.7e-29 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 ++a+ GT+G+v+Pa+ +a++L +++++ l+tp++le + + +++++i ++ +++ + +k+lk l+ l +++++k++++++k+d sp|B1WVP7|MURG_CYAA5 5 LIAASGTGGHVFPALGVAEKLSDYEIQW-LGTPNRLEQSLVGDRYPFHTISVE-GFQTRS-PIKKLKILLGLLSSIFEVKQLIEQQKID 90 799*********************9666.************************.****99.**************************** PP HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 vv+ +ggy+a a++aa+l+gipa+++E+n ipg+v+kll+r++++v+ sp|B1WVP7|MURG_CYAA5 91 VVFTTGGYIASSAILAAKLSGIPAILHESNYIPGKVTKLLSRFCTTVA 138 ********************************************9986 PP >> sp|B0TY93|MURG_FRAP2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.6 0.0 1.2e-28 6.8e-26 1 137 [. 8 143 .. 8 145 .. 0.91 Alignments for each domain: == domain 1 score: 95.6 bits; conditional E-value: 1.2e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa+A+a+ L++ +V+ ++tp+ +e+ + e ++++ i++ +++ k+ +++ ++ ++ ka++ilk+ sp|B0TY93|MURG_FRAP2 8 IIITAGGTGGHIYPALAVAEMLRENNANVTwVGTPNSMEANIvpEYFNMQY--IKSS-GVRGKG-LKRKVAFPFTLISSTLKARKILKK 92 689***************************************655555555..7777.778888.77777777777788999******* PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 k+d+v+gfggyv++++++aa ip++++Eqn+ gl+n++l++ a++v sp|B0TY93|MURG_FRAP2 93 LKIDLVIGFGGYVSGPICLAAVQKDIPIIIHEQNAKIGLTNRILAKLATKV 143 **********************************************99998 PP >> sp|Q68WW7|MURG_RICTY UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.3 0.0 1.5e-28 8.7e-26 1 138 [. 4 135 .. 4 136 .. 0.94 Alignments for each domain: == domain 1 score: 95.3 bits; conditional E-value: 1.5e-28 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++l++gGT+G+++PavAl++eL +rG+ V+++t ++++ + + ++ ++ ++++ ++++ l+ l l a+ k+ +++ k sp|Q68WW7|MURG_RICTY 4 IILVAGGTGGHFFPAVALGEELIKRGYIVHFITDLRCKKYInKDMKIIFYLLDLK-------RFSNILLFLPTLLIAFLKSIKLIYHIK 85 689***************************************************9.......567777777777777888********* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +v++gfggy ++++aa++++ip++++Eqn+ g+vnk+++r+a++++ sp|Q68WW7|MURG_RICTY 86 SCVIIGFGGYPVIAPMFAAIFLRIPIIIHEQNSYLGKVNKFFARFAKKIA 135 ***********************************************987 PP >> sp|Q6GGZ0|MURG_STAAR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.5 0.0 1.3e-28 7.5e-26 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 95.5 bits; conditional E-value: 1.3e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + +G+eV +++++g+e++ e++ +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk sp|Q6GGZ0|MURG_STAAR 4 IAFTGGGTVGHVSVNLSLIPTALSQGYEVLyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 79****************************************776644678999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk+ ++a++++ sp|Q6GGZ0|MURG_STAAR 91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143 *************************************************9997 PP >> sp|B9JH51|MURG_AGRRK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 94.6 0.4 2.4e-28 1.4e-25 1 136 [. 6 140 .. 6 142 .. 0.91 Alignments for each domain: == domain 1 score: 94.6 bits; conditional E-value: 2.4e-28 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 ++la+gGT+G+v+Pa Ala +L++rG+ V+l+t + e+ +++++++vp ig++ + +k ++l+ + ++r+a+++ sp|B9JH51|MURG_AGRRK 6 ILLAAGGTGGHVFPAEALAYKLKERGYSVHLVTDSRAERYAgkfPADEIHVVPsatIGSK-------NPIKVARSLWTLWTGIRAARKL 87 79********************************99999887678999999995444444.......588999999999999******* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 ++ kp vvgfggy +++l+aa++ g+pa ++Eqn+++g +nk+l+ r+ sp|B9JH51|MURG_AGRRK 88 IRTIKPLCVVGFGGYPTVPPLLAATRMGVPAMIHEQNAVMGRANKALAARVQA 140 ***********************************************999876 PP >> sp|Q6BN88|ATG26_DEBHA Sterol 3-beta-glucosyltransferase OS=Debaryomyces hansenii GN=ATG26 PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 94.9 0.0 2.1e-28 1.2e-25 1 138 [. 1050 1184 .. 1050 1185 .. 0.92 Alignments for each domain: == domain 1 score: 94.9 bits; conditional E-value: 2.1e-28 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalr 78 ++l+++G+rGdv+P++Al+++L ++Gh+V++at+ ++ee++ +g+++++i+++ v++ + +sl++lke+ ++ sp|Q6BN88|ATG26_DEBHA 1050 FTLLTIGSRGDVQPYIALGKGLLNEGHNVTIATHSDFEEWIVGHGIKFKTIAGNpvelmslmVTHGS--MSLSFLKEASSK----- 1128 789***************************************************9888777666666..677777777777..... PP HHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 79 kakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++ + ++ d++++++ + ++li++++a++ a++aE++gip+++++++p+++++++ sp|Q6BN88|ATG26_DEBHA 1129 --FRGWIQELLDTSWKAC--QGSDILIESPSAMVGAHIAEALGIPYIRAFTMPWTRTRAY 1184 ..999*****99999999..788999******************************9987 PP >> sp|A7NDC0|MURG_FRATF UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 94.5 0.0 2.8e-28 1.6e-25 1 137 [. 8 143 .. 8 145 .. 0.95 Alignments for each domain: == domain 1 score: 94.5 bits; conditional E-value: 2.8e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa+A+a+ L++ +V+ ++tp+ +e+ + e ++++ i++ ++++k+ +k+++ +++ + k++ +lk+ sp|A7NDC0|MURG_FRATF 8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNSMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLKSRSLLKK 92 689***************************************655556666..9999.99****.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 k+++v+gfggyv++++++aa+ +ip++++Eqn+ gl+n++l+++a+++ sp|A7NDC0|MURG_FRATF 93 LKANLVIGFGGYVSGPICLAAAQINIPVIIHEQNAKIGLTNRILAKFATTI 143 ***********************************************9986 PP >> sp|Q0BL37|MURG_FRATO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 94.5 0.0 2.8e-28 1.6e-25 1 137 [. 8 143 .. 8 145 .. 0.95 Alignments for each domain: == domain 1 score: 94.5 bits; conditional E-value: 2.8e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa+A+a+ L++ +V+ ++tp+ +e+ + e ++++ i++ ++++k+ +k+++ +++ + k++ +lk+ sp|Q0BL37|MURG_FRATO 8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNSMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLKSRSLLKK 92 689***************************************655556666..9999.99****.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 k+++v+gfggyv++++++aa+ +ip++++Eqn+ gl+n++l+++a+++ sp|Q0BL37|MURG_FRATO 93 LKANLVIGFGGYVSGPICLAAAQINIPVIIHEQNAKIGLTNRILAKFATTI 143 ***********************************************9986 PP >> sp|Q2A2I7|MURG_FRATH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 94.5 0.0 2.8e-28 1.6e-25 1 137 [. 8 143 .. 8 145 .. 0.95 Alignments for each domain: == domain 1 score: 94.5 bits; conditional E-value: 2.8e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa+A+a+ L++ +V+ ++tp+ +e+ + e ++++ i++ ++++k+ +k+++ +++ + k++ +lk+ sp|Q2A2I7|MURG_FRATH 8 IIITAGGTGGHIYPALAIAELLRQNKANVTwVGTPNSMEASIvpEYFNIQF--IKSS-GVRRKG-IIKKITFPLKLAYNTLKSRSLLKK 92 689***************************************655556666..9999.99****.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 k+++v+gfggyv++++++aa+ +ip++++Eqn+ gl+n++l+++a+++ sp|Q2A2I7|MURG_FRATH 93 LKANLVIGFGGYVSGPICLAAAQINIPVIIHEQNAKIGLTNRILAKFATTI 143 ***********************************************9986 PP >> sp|A5CS51|MURG_CLAM3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.7 1.7 1.2e-28 6.5e-26 2 137 .. 5 142 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 95.7 bits; conditional E-value: 1.2e-28 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +laggGT+G+v P++A+a+eL++r++ + l+t +gle+++ +++g+e +i+ +++++ ++++ + ++ +a+ ++++ ++e sp|A5CS51|MURG_CLAM3 5 LLAGGGTAGHVNPLLAVADELRAREPGSTilvLGTREGLESRLvPARGYELLTIARL-PFPRRP-DGAAVRFAPAFARAVGQIRRMIAE 91 89***********************9887899************************9.****99.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +dvvvgfggy+a++a+ aa++ g+p++v+E+n+ pgl+n+l +r a v sp|A5CS51|MURG_CLAM3 92 RGIDVVVGFGGYAAAPAYAAARRPGVPVVVHEANASPGLANRLGARVAAAV 142 ******************************************999988766 PP >> sp|Q9ZDC0|MURG_RICPR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 94.9 0.0 2e-28 1.1e-25 1 138 [. 4 135 .. 4 136 .. 0.92 Alignments for each domain: == domain 1 score: 94.9 bits; conditional E-value: 2e-28 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++l++gGT+G+++PavAl++eL +rG+ V+++t ++++ + + ++ ++ ++++ ++ + ++ l ++ k+ +++ + k sp|Q9ZDC0|MURG_RICPR 4 IILVAGGTGGHFFPAVALGEELIKRGYIVHFITDLRCKKYInKDMKIIFHILNLK-RFSN------IFLFLPILSITFLKSIRLIYNIK 85 689****************************************************.4444......44444444456777********* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++v++gfggy ++++aa++++ip++++Eqn+ g+vnk+++r+a++++ sp|Q9ZDC0|MURG_RICPR 86 CCVIIGFGGYPVIAPMFAAIFLRIPIIIHEQNSYLGKVNKFFARFAKKIA 135 ***********************************************986 PP >> sp|Q9ZK59|MURG_HELPJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 94.8 0.0 2.2e-28 1.2e-25 1 138 [. 3 142 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 94.8 bits; conditional E-value: 2.2e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G++ a Ala eL ++G+e + l+++ g ++++ e++ l + +++ ++ +k ++k++++l+ + ka +kakeilk sp|Q9ZK59|MURG_HELPJ 3 FALTGGGTGGHLSIAKALAIELEKQGIEAIyLGSTYGQDKEWfENSPLFSERyfFNTQ-GVVNKS-FFKKIRSLFLQAKAAFKAKEILK 89 79*************************************************9445555.777777.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++++++++++gg++a++a++a+ll++ip++++Eqn+i g n++l+ +a+ v+ sp|Q9ZK59|MURG_HELPJ 90 KHQITHTISVGGFSAGPASFASLLNKIPLYIHEQNAIKGSLNRYLSPKAKAVF 142 *************************************************9987 PP >> sp|B7KGH1|MURG_CYAP7 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 94.6 0.0 2.5e-28 1.4e-25 2 138 .. 9 142 .. 8 143 .. 0.96 Alignments for each domain: == domain 1 score: 94.6 bits; conditional E-value: 2.5e-28 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 ++a+ GT+G+++Pa+A+a++L ++ +e l++p++le ++ + ++ ++i+++ +++ + slk +k l+ + ++++++++l+e k+d sp|B7KGH1|MURG_CYAP7 9 LIAASGTGGHLFPALAVAEQLLDYKIEW-LGVPNRLEQTLVPQDYPLHTIAVE-GFQTGF-SLKSVKILLGLFSSVFQVRKLLRERKID 94 799********************99776.***********99999999*****.999988.99999999999999************** PP HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +v+ +ggy+a +a++aa+l+gip++++E+n +pg+v+++++r++ +v+ sp|B7KGH1|MURG_CYAP7 95 IVFTTGGYIASPAILAARLEGIPVILHESNYLPGKVTRFFSRWCQTVA 142 *******************************************99886 PP >> sp|Q4L6C8|MURG_STAHJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 94.6 0.0 2.4e-28 1.4e-25 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 94.6 bits; conditional E-value: 2.4e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + ++Gh+ ++++ g+e++ e++ ++e++pi ++ kl+++l s+++ k+++++lk++ +a+++lk sp|Q4L6C8|MURG_STAHJ 4 IAFTGGGTVGHVSVNLSLIPTATDKGHDAFyIGSKTGIEREMiESQlpNIEYYPISSG-KLRRYL-SVDNAKDVFKVLKGVIDARKVLK 90 79****************************************776655688999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk++ ++a++++ sp|Q4L6C8|MURG_STAHJ 91 REKPDLLFSKGGFVSVPVVIAARSLNIPTIIHESDLTPGLANKISLKFAKKIY 143 **************************************************997 PP >> sp|B4UES1|MURG_ANASK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.2 0.9 1.6e-28 9.3e-26 2 137 .. 4 141 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 95.2 bits; conditional E-value: 1.6e-28 EEE-------HHHHHHHHHHHHH---..EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGh..eVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+v+P +Ala+e+ +r + +V ++t +gle+ v ++ag +++ i+++ +l+ k+ ++l++l+ +a+ ++ +ilk+ sp|B4UES1|MURG_ANASK 4 MVAGGGTGGHVFPGIALAEEVVTRHPanDVVfVGTARGLEASVvPAAGFPIELIEVK-GLKGKG-IAGALLNLLLLPRAFLQSWRILKR 90 68*******************99987336779*************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 ++pdvvvg+ggy+++++++ a++ +ip+ v Eqn+i+gl+n+ll r ++ + sp|B4UES1|MURG_ANASK 91 WRPDVVVGVGGYASGPVVLTAWAMRIPTAVQEQNAIAGLTNRLLGRVVKAA 141 *******************************************99887765 PP >> sp|B9JY54|MURG_AGRVS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 94.7 1.3 2.4e-28 1.4e-25 1 137 [. 6 141 .. 6 142 .. 0.85 Alignments for each domain: == domain 1 score: 94.7 bits; conditional E-value: 2.4e-28 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 ++la+gGT+G+++Pa Ala+eL++rG+ V+l+t + e+ +++ +++vp ig++ ++ k+l++l++g +r+a+ + sp|B9JY54|MURG_AGRVS 6 ILLAAGGTGGHLFPAEALAHELRARGYSVHLVTDSRAERYAgkfPADAIHVVPsatIGSK--NPV--AIAKALLTLWRG---YRAARSL 87 79*********************************9999985445666666664333333..333..555555555555...******* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 ++ kp vv+gfggy ++l+aa+++g++++++Eqn+++g +n++l+ r++ + sp|B9JY54|MURG_AGRVS 88 IAGLKPLVVIGFGGYPTIPPLLAARALGVATVIHEQNAVMGRANRFLAPRVKAI 141 ************************************************999876 PP >> sp|Q1ME33|MURG_RHIL3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 93.0 0.8 7.8e-28 4.4e-25 1 136 [. 6 140 .. 6 142 .. 0.89 Alignments for each domain: == domain 1 score: 93.0 bits; conditional E-value: 7.8e-28 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 v+la+gGT+G+v+Pa Ala +L++rG+ V+l+t + e+ +++++++vp ig++ + ++ ++l+ + ++r+ak++ sp|Q1ME33|MURG_RHIL3 6 VLLAAGGTGGHVFPAEALAFKLKERGYSVHLVTDSRAERYAgkfPAEEIHVVPsatIGSK-------NPVAVARSLWTLWSGMRAAKKL 87 79********************************99999887668889999886444444.......366777777777777******* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 +++ +p +vvgfggy +++l+aa+++g+p ++Eqn+++g +nk+l+ r+ sp|Q1ME33|MURG_RHIL3 88 IQRLQPVIVVGFGGYPTVPPLLAATRLGVPSMIHEQNAVMGRANKALATRVQA 140 ***********************************************999876 PP >> sp|A8EZ14|MURG_RICCK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 93.8 0.0 4.5e-28 2.5e-25 1 138 [. 4 135 .. 4 136 .. 0.97 Alignments for each domain: == domain 1 score: 93.8 bits; conditional E-value: 4.5e-28 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++l++gGT+G+++PavAl++eL +rG+eV++++ ++++ + ++ ++ ++++ +s + ++ l + a+ ka ++l + k sp|A8EZ14|MURG_RICCK 4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFIIDLRCKKYIsQDMKVIFHILDLK-------RSGNIFLFLPRLSIAVLKAIRLLYNIK 85 689****************************************************.......688899999999999************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p v+vgfggy ++aa ++++p++++Eqn+ g+vnk++ +a++++ sp|A8EZ14|MURG_RICCK 86 PSVIVGFGGYPVISSMFAAVFLRVPIIIHEQNSYLGKVNKFFTSFAKKIA 135 ***********************************************987 PP >> sp|Q5A950|ATG26_CANAL Sterol 3-beta-glucosyltransferase OS=Candida albicans GN=ATG26 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 93.2 0.0 6.7e-28 3.8e-25 1 138 [. 1017 1151 .. 1017 1152 .. 0.94 Alignments for each domain: == domain 1 score: 93.2 bits; conditional E-value: 6.7e-28 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalr 78 ++l+++G+rGdv+P++Al+++L ++Gh+V++at+ ++ +++++ gl +++i++d v++++ +s+++lk+++++ sp|Q5A950|ATG26_CANAL 1017 ITLLTIGSRGDVQPYIALGKGLVKEGHNVTIATHAEFGDWIKTFGLGFKEIAGDpaelmsfmVTHNS--MSVGFLKNAQQK----- 1095 689****************************************************999999888888..899999999999..... PP HHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 79 kakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++++ ++ +++++++ + ++li++++a+ +++aE++gip+++++++p+++++++ sp|Q5A950|ATG26_CANAL 1096 --FRSWISKLLTTSWEAC--QGSDILIESPSAMSGIHIAEALGIPYFRAFTMPWTRTRAY 1151 ..9999999989988887..788999******************************9987 PP >> sp|Q2IG27|MURG_ANADE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 94.4 0.9 2.9e-28 1.6e-25 2 137 .. 4 141 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 94.4 bits; conditional E-value: 2.9e-28 EEE-------HHHHHHHHHHHHH---..EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGh..eVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+v+P +Ala+e+ +r + +V ++t +gle+ v ++ag +++ i+++ +l+ k+ +++l++l+ +a+ ++ +il++ sp|Q2IG27|MURG_ANADE 4 MVAGGGTGGHVFPGIALAEEVVTRHPanDVVfVGTARGLEASVvPAAGFPIELIEVK-GLKGKG-LVGALLNLLLLPRAFLQSWRILRR 90 68*******************99987336779*************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 ++pdvvvg+ggy+++++++ a++ +ip+ v Eqn+i+gl+n+ll r ++ + sp|Q2IG27|MURG_ANADE 91 WRPDVVVGVGGYASGPVVLTAWAMRIPTAVQEQNAIAGLTNRLLGRVVKAA 141 *******************************************99887765 PP >> sp|B8J8E8|MURG_ANAD2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 94.1 1.0 3.6e-28 2e-25 2 137 .. 4 141 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 94.1 bits; conditional E-value: 3.6e-28 EEE-------HHHHHHHHHHHHH---..EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGh..eVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+v+P +Ala+e+ +r + +V ++t +gle+ v ++ag +++ i+++ +l+ k+ ++l++l+ +a+ ++ +il++ sp|B8J8E8|MURG_ANAD2 4 MVAGGGTGGHVFPGIALAEEVVTRHPanDVVfVGTARGLEASVvPAAGFPIELIEVK-GLKGKG-IAGALLNLLLLPRAFLQSWRILRR 90 68*******************99987336779*************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 ++pdvvvg+ggy+++++++ a++ +ip+ v Eqn+i+gl+n+ll r ++ + sp|B8J8E8|MURG_ANAD2 91 WRPDVVVGVGGYASGPVVLTAWAMRIPTAVQEQNAIAGLTNRLLGRVVKAA 141 *******************************************99887765 PP >> sp|C3MEM9|MURG_RHISN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.8 0.7 9.3e-28 5.2e-25 1 136 [. 6 140 .. 6 142 .. 0.89 Alignments for each domain: == domain 1 score: 92.8 bits; conditional E-value: 9.3e-28 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 + la+gGT+G+++Pa Ala+eL++ G+ V+l+t + e+ +++++++vp i +k +k ++++ + +lr+a+++ sp|C3MEM9|MURG_RHISN 6 IFLAAGGTGGHLFPAEALAHELKASGYAVHLVTDSRAERYAgkfPAEEVHVVPsatI------GSKN-PIKLAQSVWKLWTGLRAARRL 87 689********************************9999985445666666664333......4444.99******************* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 ++++kp +vvgfggy +++l+aa+ g+p ++Eqn+++g +nk l+ r+ sp|C3MEM9|MURG_RHISN 88 IARYKPRAVVGFGGYPTVPPLLAATGMGVPSLIHEQNAVMGRANKMLASRVQA 140 ************************************************99976 PP >> sp|Q1CSB1|MURG_HELPH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 93.1 0.0 7.3e-28 4.1e-25 1 138 [. 3 142 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 93.1 bits; conditional E-value: 7.3e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G++ a Ala eL ++G+e + l+++ g ++++ e++ l + +++ ++ +k ++k++ +l+ + ka +kakeilk sp|Q1CSB1|MURG_HELPH 3 FALTGGGTGGHLSIAKALAIELEKQGIEAIyLGSTYGQDKEWfENSPLFSERyfFNTQ-GVVNKS-FFKKIGSLFLQAKAAFKAKEILK 89 79*************************************************9445555.777777.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++++++++++gg++a++a++a+ll++ip++++Eqn+i g n++l+ +a+ v+ sp|Q1CSB1|MURG_HELPH 90 KHQITHTISVGGFSAGPASFASLLNKIPLYIHEQNAIKGSLNRYLSPKAKAVF 142 *************************************************9987 PP >> sp|P59424|MURG_BUCBP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 93.0 0.0 7.9e-28 4.4e-25 1 134 [. 4 137 .. 4 141 .. 0.97 Alignments for each domain: == domain 1 score: 93.0 bits; conditional E-value: 7.9e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT G+++P + +a+ L ++G++V l+t++++e+++ +++g++++ i++ +++ k ++ + +++ a +ak+i+++ sp|P59424|MURG_BUCBP 4 IIIMAGGTCGHIFPGLEIAKSLINKGWKVFwLGTSKNIESKIvPKYGITIKYINIS-GVRGKN-LFELMAIPFKLIIACYQAKKIIENI 90 6899****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134 +pd+++g+ggyv+++ +i + l + p++++Eqn i+gl+nkll+++ sp|P59424|MURG_BUCBP 91 NPDIILGMGGYVSVPGGIISYLYKKPLIIHEQNKIAGLANKLLSKFT 137 *******************************************9986 PP >> sp|Q2K6C1|MURG_RHIEC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.4 0.8 2.4e-27 1.3e-24 1 137 [. 6 141 .. 6 142 .. 0.89 Alignments for each domain: == domain 1 score: 91.4 bits; conditional E-value: 2.4e-27 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavp...igpdvklwakleslktlkelaeglkalrkakei 83 v+la+gGT+G+v+Pa Ala +L++rG+ V+l+t + e+ +++++++vp ig++ + ++ ++l+ + ++r+ak++ sp|Q2K6C1|MURG_RHIEC 6 VLLAAGGTGGHVFPAEALAFKLKERGYSVHLVTDSRAERYAgkfPAEEIHVVPsatIGSK-------NPVAVARSLWTLWSGMRAAKRL 87 79********************************99999887668889999886444444.......366777777777777******* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +++ kp +vvgfggy +++l+aa+++g++ ++Eqn+++g +nk+l+ r++ + sp|Q2K6C1|MURG_RHIEC 88 IQRLKPVIVVGFGGYPTVPPLLAATRLGVASMLHEQNAVMGRANKALAPRVKAI 141 ************************************************999876 PP >> sp|O25770|MURG_HELPY UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 93.1 0.0 7.3e-28 4.1e-25 1 138 [. 3 142 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 93.1 bits; conditional E-value: 7.3e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G++ a Ala eL ++G+e + l+++ g ++++ e++ l + +++ ++ +k ++k++ +l+ + ka +kakeilk sp|O25770|MURG_HELPY 3 FALTGGGTGGHLSIAKALAIELEKQGIEAIyLGSTYGQDKEWfENSPLFSERyfFNTQ-GVVNKS-FFKKIGSLFLQAKAAFKAKEILK 89 79*************************************************9445555.777777.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++++++++++gg++a++a++a+ll++ip++++Eqn+i g n++l+ +a+ v+ sp|O25770|MURG_HELPY 90 KHQITHTISVGGFSAGPASFASLLNKIPLYIHEQNAIKGSLNRYLSPKAKAVF 142 *************************************************9987 PP >> sp|A0M527|MURG_GRAFK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.6 0.0 1e-27 5.7e-25 1 135 [. 7 143 .. 7 146 .. 0.96 Alignments for each domain: == domain 1 score: 92.6 bits; conditional E-value: 1e-27 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+l+ggGT+G+++Pa+A+a+e +rr ++ + +++++++e + ++ag+e++ + + + +++ slk++ +++ +l k+++i+k sp|A0M527|MURG_GRAFK 7 VILSGGGTGGHIYPAIAIADEIKRRYPNAEilfVGAQDRMEMEKvPQAGYEIKGLWIS-GIDRSF-SLKNFIFPFKLMSSLSKSRKIIK 93 789*************************************96555*************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 ++kpd+v+g+gg+ ++++l a++ gip+ + Eqn++pg++n++l++ a sp|A0M527|MURG_GRAFK 94 KFKPDIVIGTGGFGSGPLLRIAISKGIPTLIQEQNSLPGVTNRILSKNAS 143 *********************************************99875 PP >> sp|B2UUR4|MURG_HELPS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 93.1 0.0 7.3e-28 4.1e-25 1 138 [. 3 142 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 93.1 bits; conditional E-value: 7.3e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G++ a Ala eL ++G+e + l+++ g ++++ e++ l + +++ ++ +k ++k++ +l+ + ka +kakeilk sp|B2UUR4|MURG_HELPS 3 FALTGGGTGGHLSIAKALAIELEKQGIEAIyLGSTYGQDKEWfENSPLFSERyfFNTQ-GVVNKS-FFKKIGSLFLQAKAAFKAKEILK 89 79*************************************************9445555.777777.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++++++++++gg++a++a++a+ll++ip++++Eqn+i g n++l+ +a+ v+ sp|B2UUR4|MURG_HELPS 90 KHQITHTISVGGFSAGPASFASLLNKIPLYIHEQNAIKGSLNRYLSPKAKAVF 142 *************************************************9987 PP >> sp|Q3K2P3|MURG_STRA1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 93.0 0.0 8e-28 4.5e-25 1 138 [. 5 144 .. 5 145 .. 0.95 Alignments for each domain: == domain 1 score: 93.0 bits; conditional E-value: 8e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l ++ + G+eV+ ++ ++g+e++ ++gl ++++i+++ kl++++ s+++++++++++ ++ ++ +i++ sp|Q3K2P3|MURG_STRA1 5 IVFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHEQiNQSGLdiTFHSIATG-KLRRYF-SWQNMLDVFKVGVGVLQSIAIIA 91 79*************************************9988***98225666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v++++++aa+l+++p++v+E++ +gl+nk+ ++a+ ++ sp|Q3K2P3|MURG_STRA1 92 KLRPQALFSKGGFVSVPPVVAARLLKVPVFVHESDLSMGLANKIAYKFATIMY 144 ***********************************************999765 PP >> sp|Q8CX15|MURG_STRA5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 93.0 0.0 8e-28 4.5e-25 1 138 [. 5 144 .. 5 145 .. 0.95 Alignments for each domain: == domain 1 score: 93.0 bits; conditional E-value: 8e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l ++ + G+eV+ ++ ++g+e++ ++gl ++++i+++ kl++++ s+++++++++++ ++ ++ +i++ sp|Q8CX15|MURG_STRA5 5 IVFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHEQiNQSGLdiTFHSIATG-KLRRYF-SWQNMLDVFKVGVGVLQSIAIIA 91 79*************************************9988***98225666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v++++++aa+l+++p++v+E++ +gl+nk+ ++a+ ++ sp|Q8CX15|MURG_STRA5 92 KLRPQALFSKGGFVSVPPVVAARLLKVPVFVHESDLSMGLANKIAYKFATIMY 144 ***********************************************999765 PP >> sp|Q8E6P0|MURG_STRA3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 93.0 0.0 8e-28 4.5e-25 1 138 [. 5 144 .. 5 145 .. 0.95 Alignments for each domain: == domain 1 score: 93.0 bits; conditional E-value: 8e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l ++ + G+eV+ ++ ++g+e++ ++gl ++++i+++ kl++++ s+++++++++++ ++ ++ +i++ sp|Q8E6P0|MURG_STRA3 5 IVFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHEQiNQSGLdiTFHSIATG-KLRRYF-SWQNMLDVFKVGVGVLQSIAIIA 91 79*************************************9988***98225666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v++++++aa+l+++p++v+E++ +gl+nk+ ++a+ ++ sp|Q8E6P0|MURG_STRA3 92 KLRPQALFSKGGFVSVPPVVAARLLKVPVFVHESDLSMGLANKIAYKFATIMY 144 ***********************************************999765 PP >> sp|Q7U346|MURG_BLOFL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.9 0.0 8.6e-28 4.8e-25 1 138 [. 8 146 .. 8 147 .. 0.95 Alignments for each domain: == domain 1 score: 92.9 bits; conditional E-value: 8.6e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+++P +++ar L++ G++V +++++++e+++ + ++++++ i ++ +l+ k k ++ l+ + a+ ++++i++ + sp|Q7U346|MURG_BLOFL 8 IMIIAGGTGGHIFPGLSVARYLMNHGYKVVwIGSKDRIESELvPVYNIDIKYICIQ-GLRGKKIYQKLITLLFLIFFAMYQSFKIIRCW 95 6789****************************************************.99998856667777889999************ PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpd+v+++ggyv+++ ++ a+l gip++++Eqn i+gl+n++++r+a+++l sp|Q7U346|MURG_BLOFL 96 KPDIVLSMGGYVSGPSSLVAWLYGIPVIIHEQNRIMGLTNRYVSRFAKKIL 146 ************************************************986 PP >> sp|Q5HPC0|MURG_STAEQ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.9 0.0 8.5e-28 4.8e-25 2 138 .. 5 143 .. 4 144 .. 0.95 Alignments for each domain: == domain 1 score: 92.9 bits; conditional E-value: 8.5e-28 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 + +ggGT G+v ++l + ++Ghe ++++ g+e++ e++ ++++pi ++ kl+++l s+++ k+++++lk++ +a++ilk+ sp|Q5HPC0|MURG_STAEQ 5 AYTGGGTVGHVSVNLSLIPTSIEKGHEAFyIGSKHGIEREMiESQlpDIQYYPISSG-KLRRYL-SFENAKDVFKVLKGILDARKILKK 91 669**************************************766644688999****.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk++ ++a++++ sp|Q5HPC0|MURG_STAEQ 92 QKPDLLFSKGGFVSVPVVIAARSLKIPTIIHESDLTPGLANKISLKFAKKIY 143 *************************************************997 PP >> sp|Q8CMM3|MURG_STAES UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.9 0.0 8.5e-28 4.8e-25 2 138 .. 5 143 .. 4 144 .. 0.95 Alignments for each domain: == domain 1 score: 92.9 bits; conditional E-value: 8.5e-28 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 + +ggGT G+v ++l + ++Ghe ++++ g+e++ e++ ++++pi ++ kl+++l s+++ k+++++lk++ +a++ilk+ sp|Q8CMM3|MURG_STAES 5 AYTGGGTVGHVSVNLSLIPTSIEKGHEAFyIGSKHGIEREMiESQlpDIQYYPISSG-KLRRYL-SFENAKDVFKVLKGILDARKILKK 91 669**************************************766644688999****.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk++ ++a++++ sp|Q8CMM3|MURG_STAES 92 QKPDLLFSKGGFVSVPVVIAARSLKIPTIIHESDLTPGLANKISLKFAKKIY 143 *************************************************997 PP >> sp|Q01Q48|MURG_SOLUE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.6 0.3 1e-27 5.8e-25 1 138 [. 14 149 .. 14 150 .. 0.87 Alignments for each domain: == domain 1 score: 92.6 bits; conditional E-value: 1e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++aggGT+G+v Pa+A+areL+ rGh+V ++t+ g+e+++ + +g e+++i+++ +l++ ++++ +l + ++ k +++++a sp|Q01Q48|MURG_SOLUE 14 FLMAGGGTGGHVIPALAVARELRSRGHKVFfVGTQHGMEARLvPPEGFEFKTIEIG-GLNQVS-WNQKFATLSRLPITTLKCGRSVRDA 100 79******************************************************.665533.5666666666644455555555555 PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +v+++ggyva++++ aal +++p++v E n+ pg++n++ +r + ++l sp|Q01Q48|MURG_SOLUE 101 S--AVFSMGGYVAGPPVMAALVRRVPVVVMEPNAFPGFTNRVIARLVSRAL 149 5..***************************************999887765 PP >> sp|B5Z8F1|MURG_HELPG UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.8 0.0 8.8e-28 4.9e-25 1 138 [. 3 142 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 92.8 bits; conditional E-value: 8.8e-28 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G++ a Ala eL ++G+e + l+++ g ++++ e++ l + +++ ++ +k ++k++ +l+ + ka +kakeilk sp|B5Z8F1|MURG_HELPG 3 FALTGGGTGGHLSIAKALAIELEKQGIEAIyLGSTYGQDREWfENSPLFSERyfFNTQ-GVVNKS-FFKKIGSLFLQAKAAFKAKEILK 89 79*************************************************9445555.777777.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++++++++++gg++a++a++a+ll++ip++++Eqn+i g n++l+ +a+ v+ sp|B5Z8F1|MURG_HELPG 90 NHQITHTISVGGFSAGPASFASLLNKIPLYIHEQNAIKGSLNRYLSPKAKAVF 142 *************************************************9987 PP >> sp|Q5L524|MURG_CHLAB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.6 0.0 1e-27 5.8e-25 1 138 [. 8 144 .. 8 145 .. 0.93 Alignments for each domain: == domain 1 score: 92.6 bits; conditional E-value: 1e-27 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++la+gG++G++ Pa+A +++ r+G +V l +gle++ e+ + +++i+++ l+ ++ +++++++ + + +++kak+ l + sp|Q5L524|MURG_CHLAB 8 IALAVGGSGGHIVPALATREAFCREGVDV-LLLGKGLENHPslGEQQILYKEIPSG--LPTFVRPITAVRRVCSLYAGYKKAKKELLIF 93 79***************************.6666666666655999**********..77777899999999999999*********** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+gfg+y+++++l aal+ +ip++++Eqn +pg+vnkl++r+a+gv sp|Q5L524|MURG_CHLAB 94 DPDVVIGFGSYHSLPVLMAALKKKIPIFLHEQNVVPGKVNKLFSRFAKGVG 144 ************************************************986 PP >> sp|Q255W4|MURG_CHLFF UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.7 0.0 1e-27 5.6e-25 1 138 [. 7 143 .. 7 144 .. 0.91 Alignments for each domain: == domain 1 score: 92.7 bits; conditional E-value: 1e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++la+gG++G++ Pa+A +++ ++G++V l+ + + + e+ +++++i+++ l + +++++++ + + +++kak+ l + sp|Q255W4|MURG_CHLFF 7 IALAVGGSGGHIVPALATRETFCKEGIDVLlLGKGLDNYPNLCEQDIPYREIPSG-SLSISR-PIAAIRNTRSLYIGYKKAKKELIAFG 93 79***************************66666666666669************.666544.88999999999999************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+gfg+y+++++l aal+ +ip++++Eqn +pg+vnkl++r+a+gv sp|Q255W4|MURG_CHLFF 94 PDVVIGFGSYHSLPVLMAALKKKIPIFLHEQNLVPGKVNKLFSRFAKGVG 143 ***********************************************986 PP >> sp|Q820E0|MURG_CHLCV UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.4 0.0 1.2e-27 6.7e-25 1 138 [. 8 144 .. 8 145 .. 0.92 Alignments for each domain: == domain 1 score: 92.4 bits; conditional E-value: 1.2e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++la+gG++G++ Pa+A +++ ++G +V l+ + + + +++++i+++++ a ++++++ + ++++rkak+ l + sp|Q820E0|MURG_CHLCV 8 IALAVGGSGGHIVPALATREAFCKEGVDVLlLGKGLDNHPNLCDLDVHYKEIPSGLPTVA--SPVTAIRRMSSLYNGYRKAKKELCIFD 94 79***************************666666666666699999********66666..889************************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+gfg+y+++++l aal+ +ip++++Eqn ipg vnkl++r+a+gv sp|Q820E0|MURG_CHLCV 95 PDVVIGFGSYHSLPVLMAALKKKIPIFLHEQNLIPGRVNKLFSRFAKGVG 144 ***********************************************986 PP >> sp|Q8XVI7|MURG_RALSO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 93.3 0.2 6.1e-28 3.5e-25 2 138 .. 14 150 .. 13 151 .. 0.98 Alignments for each domain: == domain 1 score: 93.3 bits; conditional E-value: 6.1e-28 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+++Pa+++ar L +rG++V l+ g+e ++ +++g + +++ + +++ k+ +++++ +++ l+a+ ++ ++++ + sp|Q8XVI7|MURG_RALSO 14 LVMAGGTGGHIFPALSVARLLAARGWQVVwLGNASGMEGQLvPKHGFPLESVRFG-GVRGKG-LVTKFLLPLNLLRAFWQSLGVVRRVR 100 789****************************************************.******.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p+vv+g+ggy+ + + + l+g+p++++Eqn+i+gl+n++l+r a++vl sp|Q8XVI7|MURG_RALSO 101 PNVVLGMGGYITFPGGMMSVLLGAPLVLHEQNSIAGLANRVLARVADRVL 150 ***********************************************997 PP >> sp|Q4ULT6|MURG_RICFE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.4 0.0 1.2e-27 6.6e-25 1 138 [. 4 135 .. 4 136 .. 0.94 Alignments for each domain: == domain 1 score: 92.4 bits; conditional E-value: 1.2e-27 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++l++gGT+G+++PavAl++eL +rG+eV+++t ++ + + + gl ++ ++++ +s + ++ l + a+ ka ++l + + sp|Q4ULT6|MURG_RICFE 4 IILVAGGTGGHFFPAVALGEELIKRGYEVHFITDLRCQKYInQNMGLIFHILDLK-------RSDNIFLFLPNLSIAILKAIKLLYNIR 85 689****************************************************.......45666666666667899********** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 v++gfggy ++++aa+++++p+++ Eqn+ g+vnk+++ +a++++ sp|Q4ULT6|MURG_RICFE 86 SSVIIGFGGYPVIAPMFAAIFLRVPIIIYEQNSYLGKVNKFFASFAKKIA 135 ***********************************************987 PP >> sp|Q49XM9|MURG_STAS1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.4 0.0 1.2e-27 6.6e-25 1 138 [. 4 143 .. 4 144 .. 0.94 Alignments for each domain: == domain 1 score: 92.4 bits; conditional E-value: 1.2e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp...igpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + ++G++ +++++g+e++ e+ l+ + i ++ kl++++ s++++k+++++lk++ +a+ +lk sp|Q49XM9|MURG_STAS1 4 IAFTGGGTVGHVSVNLSLIPTAIEEGYDTFyIGSKNGIEREMIESQLPSIKyhsISSG-KLRRYI-SWDNIKDIFKVLKGVLDARSVLK 90 79****************************************6666654443339999.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk++ ++a++++ sp|Q49XM9|MURG_STAS1 91 KEKPDLLFSKGGFVSVPVVIAAKSLKIPTIIHESDLTPGLANKISLKFAKKIY 143 **************************************************997 PP >> sp|Q119X8|MURG_TRIEI UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.5 0.0 1.2e-27 6.5e-25 2 138 .. 29 162 .. 28 163 .. 0.97 Alignments for each domain: == domain 1 score: 92.5 bits; conditional E-value: 1.2e-27 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 ++a+ GT+G+++Pa+A+a++L+++ +e l++p++le+++ + ++ ++i ++ ++++kl ++tlk l + ++ k++ ilke k + sp|Q119X8|MURG_TRIEI 29 LIAASGTGGHLFPAIAIANQLKDYHIEW-LGVPDRLETKLIPSQYPLHTISVE-GFQQKL-GIETLKVLSRLIGSILKVRHILKEGKFQ 114 799**********************776.***********99***********.******.**************************** PP HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++ +ggy+a++a+iaa+++g p++++E+n +pg+v+++++r +n v+ sp|Q119X8|MURG_TRIEI 115 GLFTTGGYIAAPAIIAARYLGLPVILHESNVLPGKVTRWFSRLCNVVA 162 *****************************************9998775 PP >> sp|Q03L97|MURG_STRTD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.5 0.0 2.3e-27 1.3e-24 1 138 [. 7 146 .. 7 147 .. 0.96 Alignments for each domain: == domain 1 score: 91.5 bits; conditional E-value: 2.3e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l ++ + G+eV+ ++ + g+e++ ++gl ++++i+++ kl++++ s++++++++++++++ ++ +i++ sp|Q03L97|MURG_STRTD 7 IVFTGGGTVGHVTLNLILIPKFLKDGWEVHyIGDKHGIEHEQiDKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGILQSIAIIA 93 79*************************************9988***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++ia++l+++p++v+E++ +gl+nk+ ++a++++ sp|Q03L97|MURG_STRTD 94 KIRPQALFSKGGFVSVPPVIASKLLRVPVYVHESDLSMGLANKIAYKFATTMF 146 ************************************************99875 PP >> sp|A0L5N1|MURG_MAGSM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.3 0.7 1.3e-27 7.4e-25 2 138 .. 9 147 .. 8 148 .. 0.97 Alignments for each domain: == domain 1 score: 92.3 bits; conditional E-value: 1.3e-27 EEE-------HHHHHHHHHHHHH--..-EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrG..heVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++aggGT+G+++Pa+A+a++ ++r h V+ ++ ++gle+++ ++ag + ++++++ +l+ k+ +++l++l l a+ +a+ +++ sp|A0L5N1|MURG_MAGSM 9 LIAGGGTGGHLFPALAVAERWRERYglHSVHfIGGQRGLENRLvPNAGFTLETLAVG-QLKGKG-LPHKLRTLGGLLPAVWQARGMVQR 95 79********************985579*****************************.******.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + p+vv+g+ggy++++a++aa+++gip ++Eqn+++gl+n+ll+ a +vl sp|A0L5N1|MURG_MAGSM 96 FDPHVVLGVGGYASAPAMVAARSLGIPMALHEQNARAGLTNRLLSHLAQQVL 147 ********************************************99988887 PP >> sp|B8H091|MURG_CAUCN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 93.1 1.2 7.5e-28 4.2e-25 2 138 .. 6 141 .. 5 142 .. 0.90 Alignments for each domain: == domain 1 score: 93.1 bits; conditional E-value: 7.5e-28 EEE-------HHHHHHHHHHHHH---EEEEEETGG....GHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppg....leefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 v+a+gGT+G+++Pa Ala++L +rG++V lat ++ ++f +e+ l+ + +++ + + l+++k + +l+++ +a++++k+ sp|B8H091|MURG_CAUCN 6 VVAAGGTGGHMFPAQALAEALAARGWRVVLATDDRgalyADKFPAEERLALSAATAK---SN--DPLGMIKAGFVVLQGVMEARAAFKR 89 89*******************************983432344557777777777777...44..89*********************** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p+vvvgfggy a++al++al++g p++++Eqn++ g vn++l+ r+n v+ sp|B8H091|MURG_CAUCN 90 LDPAVVVGFGGYPALPALLGALSQGRPTVIHEQNAVLGRVNRFLAPRVNEVA 141 ************************************************9885 PP >> sp|Q9A5A1|MURG_CAUCR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 93.1 1.2 7.5e-28 4.2e-25 2 138 .. 6 141 .. 5 142 .. 0.90 Alignments for each domain: == domain 1 score: 93.1 bits; conditional E-value: 7.5e-28 EEE-------HHHHHHHHHHHHH---EEEEEETGG....GHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppg....leefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 v+a+gGT+G+++Pa Ala++L +rG++V lat ++ ++f +e+ l+ + +++ + + l+++k + +l+++ +a++++k+ sp|Q9A5A1|MURG_CAUCR 6 VVAAGGTGGHMFPAQALAEALAARGWRVVLATDDRgalyADKFPAEERLALSAATAK---SN--DPLGMIKAGFVVLQGVMEARAAFKR 89 89*******************************983432344557777777777777...44..89*********************** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p+vvvgfggy a++al++al++g p++++Eqn++ g vn++l+ r+n v+ sp|Q9A5A1|MURG_CAUCR 90 LDPAVVVGFGGYPALPALLGALSQGRPTVIHEQNAVLGRVNRFLAPRVNEVA 141 ************************************************9885 PP >> sp|A8GNC7|MURG_RICAH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.2 0.0 1.4e-27 7.8e-25 1 138 [. 4 135 .. 4 136 .. 0.97 Alignments for each domain: == domain 1 score: 92.2 bits; conditional E-value: 1.4e-27 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++la+gGT+G+++PavAl++eL +rG+eV+++t ++ + + + gl ++ ++++ +s++ ++ l + a+ ka ++l + + sp|A8GNC7|MURG_RICAH 4 IILAAGGTGGHFFPAVALGEELVKRGYEVHFITDLRCQKYInQNLGLIFHILDLK-------RSSNIFLFLPNLSIAILKAIKLLYNIR 85 78*****************************************************.......788899999999999************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +++gfg+y ++aa ++++p++++Eqn+ g+vnk+++ +a++++ sp|A8GNC7|MURG_RICAH 86 SSAIIGFGSYPVISSMFAAVFLRVPIIIHEQNSYLGKVNKFFASFAKRIA 135 ***********************************************987 PP >> sp|B5XMA2|MURG_STRPZ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.3 0.0 2.6e-27 1.5e-24 1 138 [. 5 144 .. 5 145 .. 0.96 Alignments for each domain: == domain 1 score: 91.3 bits; conditional E-value: 2.6e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v + l ++ + G+eV+ ++ ++g+e++ e++gl ++++i+++ kl++++ s+++l +++++ +l ++ +il+ sp|B5XMA2|MURG_STRPZ 5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFILA 91 79**************************************999****8335677****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v++++++aa+l+g p++++E++ +gl+nk+ ++a++++ sp|B5XMA2|MURG_STRPZ 92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144 *************************************************9876 PP >> sp|B6JMZ5|MURG_HELP2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 92.2 0.0 1.4e-27 7.7e-25 1 138 [. 3 142 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 92.2 bits; conditional E-value: 1.4e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G++ a Ala eL ++G e + l+++ g ++++ e++ l + +++ ++ +k ++k++ +l+ + ka +kakeilk sp|B6JMZ5|MURG_HELP2 3 FALTGGGTGGHLSIAKALAIELEKQGVEAIyLGSTYGQDKEWfENSPLFSERyfFNTQ-GVVNKS-FFKKINSLFLQVKAAFKAKEILK 89 79*************************************************9445555.777777.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++++++++++gg++a++a++a+ll++ip++++Eqn+i g n++l+ +a+ v+ sp|B6JMZ5|MURG_HELP2 90 KHQITHTISVGGFSAGPASFASLLNHIPLYIHEQNAIKGSLNRYLSPKAKAVF 142 *************************************************9987 PP >> sp|A7ERM5|ATG26_SCLS1 Sterol 3-beta-glucosyltransferase OS=Sclerotinia sclerotiorum (strain ATCC 18683 / 1980 / Ss-1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.8 0.0 1.8e-27 1e-24 4 138 .. 945 1076 .. 942 1077 .. 0.92 Alignments for each domain: == domain 1 score: 91.8 bits; conditional E-value: 1.8e-27 E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 +++G+rGdv+P++Al ++L+++Gh+ ++at+ +++e++e++g+e+ p+++d v++ +++++lke+ ++ + sp|A7ERM5|ATG26_SCLS1 945 LTIGSRGDVQPYIALCKGLMAEGHQTKIATHLEFKEWIESHGIEFAPVDGDpaelmricVENGM--FTVSFLKEASSK-------F 1021 79**************************************************999995555555..899999999999.......9 PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + ++ +++++ ++ ++li++++a++ +++aE++ ip+++++++p+++++++ sp|A7ERM5|ATG26_SCLS1 1022 RGWIDDLLSSSWRAC--QNSDILIESPSAMAGIHIAEALRIPYFRAFTMPWTRTRAY 1076 999999988888888..788999******************************9987 PP >> sp|Q7V466|MURG_PROMM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.6 0.2 2.1e-27 1.2e-24 2 137 .. 5 137 .. 4 139 .. 0.91 Alignments for each domain: == domain 1 score: 91.6 bits; conditional E-value: 2.1e-27 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++a+ GT+G+++Pa+A+a++L + V+ l++p++le+++ e ++l++v g+ + + l++l++l++ l a+ +++++l+++ sp|Q7V466|MURG_PROMM 5 LIAASGTGGHLFPALAVAEALPGS-WSVCwLGVPDRLETQLvpERYELTTVRAGGL---QG--RGLRKLVQLLQLLAATGRVRKLLRKQ 87 799*******************97.6**************9777777777666655...56..568999999999999*********** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +++v+ +ggy+a++a++aa+++gip++++E+n+ipg v++ll r++ v sp|Q7V466|MURG_PROMM 88 GIQTVFTTGGYIAAPAILAARWCGIPVVLHESNAIPGRVTRLLGRFCQVV 137 ******************************************99998765 PP >> sp|A2CDG1|MURG_PROM3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.7 0.2 2e-27 1.2e-24 2 137 .. 5 137 .. 4 139 .. 0.91 Alignments for each domain: == domain 1 score: 91.7 bits; conditional E-value: 2e-27 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++a+ GT+G+++Pa+A+a+ L + + V+ l++p++le+++ e ++l++v g+ + + l++l++l++ l a+ +++++l+++ sp|A2CDG1|MURG_PROM3 5 LIAASGTGGHLFPALAVAESLPAS-WSVCwLGVPDRLETQLvpERYELTTVRAGGL---QG--RGLRKLVQLLQLLAATGRVRKLLRKQ 87 799******************987.6**************9777777777666655...56..568999999999999*********** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +++v+ +ggy+a++a++aa+++gip++++E+n+ipg v++ll r++ v sp|A2CDG1|MURG_PROM3 88 GIQTVFTTGGYIAAPAILAARWCGIPVVLHESNAIPGRVTRLLGRFCQVV 137 ******************************************99998765 PP >> sp|Q5M0D4|MURG_STRT1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.8 0.0 3.6e-27 2.1e-24 1 138 [. 7 146 .. 7 147 .. 0.96 Alignments for each domain: == domain 1 score: 90.8 bits; conditional E-value: 3.6e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l ++ + G+eV+ ++ + g+e++ ++gl ++++i+++ kl++++ s++++++++++++++ ++ +i++ sp|Q5M0D4|MURG_STRT1 7 IVFTGGGTVGHVTLNLILIPKFLKDGWEVHyIGDKHGVEHEQiDKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGILQSIAIIA 93 79*************************************9988***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++ia++l+++p++v+E++ +gl+nk+ ++a++++ sp|Q5M0D4|MURG_STRT1 94 KIRPQALFSKGGFVSVPPVIASKLLRVPVYVHESDLSMGLANKIAYKFATTMF 146 ************************************************99875 PP >> sp|Q5M4Y1|MURG_STRT2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.8 0.0 3.6e-27 2.1e-24 1 138 [. 7 146 .. 7 147 .. 0.96 Alignments for each domain: == domain 1 score: 90.8 bits; conditional E-value: 3.6e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l ++ + G+eV+ ++ + g+e++ ++gl ++++i+++ kl++++ s++++++++++++++ ++ +i++ sp|Q5M4Y1|MURG_STRT2 7 IVFTGGGTVGHVTLNLILIPKFLKDGWEVHyIGDKHGVEHEQiDKSGLdvTFHSIATG-KLRRYF-SWQNMLDVFKVGWGILQSIAIIA 93 79*************************************9988***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++ia++l+++p++v+E++ +gl+nk+ ++a++++ sp|Q5M4Y1|MURG_STRT2 94 KIRPQALFSKGGFVSVPPVIASKLLRVPVYVHESDLSMGLANKIAYKFATTMF 146 ************************************************99875 PP >> sp|A6QGX0|MURG_STAAE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.7 0.0 1.9e-27 1.1e-24 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 91.7 bits; conditional E-value: 1.9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + +G+e +++++g+e++ e++ +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk sp|A6QGX0|MURG_STAAE 4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 79****************************************776644678999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk+ ++a++++ sp|A6QGX0|MURG_STAAE 91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143 *************************************************9997 PP >> sp|Q2FYL5|MURG_STAA8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.7 0.0 1.9e-27 1.1e-24 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 91.7 bits; conditional E-value: 1.9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + +G+e +++++g+e++ e++ +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk sp|Q2FYL5|MURG_STAA8 4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 79****************************************776644678999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk+ ++a++++ sp|Q2FYL5|MURG_STAA8 91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143 *************************************************9997 PP >> sp|Q5HG02|MURG_STAAC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.7 0.0 1.9e-27 1.1e-24 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 91.7 bits; conditional E-value: 1.9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + +G+e +++++g+e++ e++ +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk sp|Q5HG02|MURG_STAAC 4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 79****************************************776644678999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk+ ++a++++ sp|Q5HG02|MURG_STAAC 91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143 *************************************************9997 PP >> sp|Q6G9E3|MURG_STAAS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.7 0.0 1.9e-27 1.1e-24 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 91.7 bits; conditional E-value: 1.9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + +G+e +++++g+e++ e++ +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk sp|Q6G9E3|MURG_STAAS 4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 79****************************************776644678999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk+ ++a++++ sp|Q6G9E3|MURG_STAAS 91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143 *************************************************9997 PP >> sp|Q8NWR4|MURG_STAAW UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.7 0.0 1.9e-27 1.1e-24 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 91.7 bits; conditional E-value: 1.9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + +G+e +++++g+e++ e++ +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk sp|Q8NWR4|MURG_STAAW 4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 79****************************************776644678999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk+ ++a++++ sp|Q8NWR4|MURG_STAAW 91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143 *************************************************9997 PP >> sp|A5ISU9|MURG_STAA9 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.7 0.0 1.9e-27 1.1e-24 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 91.7 bits; conditional E-value: 1.9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + +G+e +++++g+e++ e++ +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk sp|A5ISU9|MURG_STAA9 4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 79****************************************776644678999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk+ ++a++++ sp|A5ISU9|MURG_STAA9 91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143 *************************************************9997 PP >> sp|A6U1N8|MURG_STAA2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.7 0.0 1.9e-27 1.1e-24 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 91.7 bits; conditional E-value: 1.9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + +G+e +++++g+e++ e++ +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk sp|A6U1N8|MURG_STAA2 4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 79****************************************776644678999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk+ ++a++++ sp|A6U1N8|MURG_STAA2 91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143 *************************************************9997 PP >> sp|A7X2A2|MURG_STAA1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.7 0.0 1.9e-27 1.1e-24 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 91.7 bits; conditional E-value: 1.9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + +G+e +++++g+e++ e++ +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk sp|A7X2A2|MURG_STAA1 4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 79****************************************776644678999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk+ ++a++++ sp|A7X2A2|MURG_STAA1 91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143 *************************************************9997 PP >> sp|P65481|MURG_STAAM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.7 0.0 1.9e-27 1.1e-24 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 91.7 bits; conditional E-value: 1.9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + +G+e +++++g+e++ e++ +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk sp|P65481|MURG_STAAM 4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 79****************************************776644678999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk+ ++a++++ sp|P65481|MURG_STAAM 91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143 *************************************************9997 PP >> sp|P65482|MURG_STAAN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.7 0.0 1.9e-27 1.1e-24 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 91.7 bits; conditional E-value: 1.9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + +G+e +++++g+e++ e++ +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk sp|P65482|MURG_STAAN 4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 79****************************************776644678999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk+ ++a++++ sp|P65482|MURG_STAAN 91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143 *************************************************9997 PP >> sp|Q2YY01|MURG_STAAB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.7 0.0 1.9e-27 1.1e-24 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 91.7 bits; conditional E-value: 1.9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + +G+e +++++g+e++ e++ +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk sp|Q2YY01|MURG_STAAB 4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 79****************************************776644678999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip++++E++ pgl+nk+ ++a++++ sp|Q2YY01|MURG_STAAB 91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTIIHESDLTPGLANKIALKFAKKIY 143 *************************************************9997 PP >> sp|Q7MAW5|MURG_PORGI UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.8 0.0 3.7e-27 2.1e-24 1 137 [. 12 150 .. 12 152 .. 0.96 Alignments for each domain: == domain 1 score: 90.8 bits; conditional E-value: 3.7e-27 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGH.HHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgle.efveeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+++a++L+rr +e + ++++ ++e e+v+ +g+e+v ++++ +l +k l+++k + ++ +++r a+++++ sp|Q7MAW5|MURG_PORGI 12 FIISGGGTGGHIFPAISIADALRRRYPECEilfVGAEGRMEmERVPRSGYEIVGLPIK-GLDRKH-LLSNYKVAIAVIRSMRLANKTIR 98 7899***************************9********83566*************.****98.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +++pd v+g+ggy++++ l a ++gip+ + Eqn+ +g++nkll+r a ++ sp|Q7MAW5|MURG_PORGI 99 NFRPDMVIGVGGYASGPTLRRAHSLGIPTLIQEQNSYAGVTNKLLSRGAHKI 150 **********************************************988776 PP >> sp|A2RDL0|MURG_STRPG UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.8 0.0 3.8e-27 2.1e-24 1 138 [. 5 144 .. 5 145 .. 0.96 Alignments for each domain: == domain 1 score: 90.8 bits; conditional E-value: 3.8e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v + l ++ + G+eV+ ++ ++g+e++ e++gl ++++i+++ kl++++ s+++l +++++ +l ++ +i++ sp|A2RDL0|MURG_STRPG 5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 79**************************************999****8335677****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v++++++aa+l+g p++++E++ +gl+nk+ ++a++v+ sp|A2RDL0|MURG_STRPG 92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTVY 144 **************************************************998 PP >> sp|Q5XB05|MURG_STRP6 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.8 0.0 3.8e-27 2.1e-24 1 138 [. 5 144 .. 5 145 .. 0.96 Alignments for each domain: == domain 1 score: 90.8 bits; conditional E-value: 3.8e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v + l ++ + G+eV+ ++ ++g+e++ e++gl ++++i+++ kl++++ s+++l +++++ +l ++ +i++ sp|Q5XB05|MURG_STRP6 5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 79**************************************999****8335677****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v++++++aa+l+g p++++E++ +gl+nk+ ++a++v+ sp|Q5XB05|MURG_STRP6 92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTVY 144 **************************************************998 PP >> sp|Q1JAT5|MURG_STRPB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.6 0.0 4.4e-27 2.5e-24 1 138 [. 5 144 .. 5 145 .. 0.96 Alignments for each domain: == domain 1 score: 90.6 bits; conditional E-value: 4.4e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v + l ++ + G+eV+ ++ ++g+e++ e++gl ++++i+++ kl++++ s+++l +++++ +l ++ +i++ sp|Q1JAT5|MURG_STRPB 5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIIA 91 79**************************************999****8335677****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v++++++aa+l+g p++++E++ +gl+nk+ ++a++++ sp|Q1JAT5|MURG_STRPB 92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144 *************************************************9876 PP >> sp|Q1JKY5|MURG_STRPC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.6 0.0 4.4e-27 2.5e-24 1 138 [. 5 144 .. 5 145 .. 0.96 Alignments for each domain: == domain 1 score: 90.6 bits; conditional E-value: 4.4e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v + l ++ + G+eV+ ++ ++g+e++ e++gl ++++i+++ kl++++ s+++l +++++ +l ++ +i++ sp|Q1JKY5|MURG_STRPC 5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIIA 91 79**************************************999****8335677****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v++++++aa+l+g p++++E++ +gl+nk+ ++a++++ sp|Q1JKY5|MURG_STRPC 92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144 *************************************************9876 PP >> sp|B2RIF1|MURG_PORG3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.8 0.0 3.7e-27 2.1e-24 1 137 [. 12 150 .. 12 152 .. 0.96 Alignments for each domain: == domain 1 score: 90.8 bits; conditional E-value: 3.7e-27 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGH.HHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgle.efveeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+++a++L+rr +e + ++++ ++e e+v+ +g+e+v ++++ +l +k l+++k + ++ +++r a+++++ sp|B2RIF1|MURG_PORG3 12 FIISGGGTGGHIFPAISIADALRRRYPECEilfVGAEGRMEmERVPRSGYEIVGLPIK-GLDRKH-LLSNYKVAIAVIRSMRLANKTIR 98 7899***************************9********83566*************.****98.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +++pd v+g+ggy++++ l a ++gip+ + Eqn+ +g++nkll+r a ++ sp|B2RIF1|MURG_PORG3 99 NFRPDMVIGVGGYASGPTLRRAHSLGIPTLIQEQNSYAGVTNKLLSRGAHKI 150 **********************************************988776 PP >> sp|C0M6J2|MURG_STRE4 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.6 0.0 4.2e-27 2.4e-24 1 138 [. 5 144 .. 5 145 .. 0.96 Alignments for each domain: == domain 1 score: 90.6 bits; conditional E-value: 4.2e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+v + l ++ + G+eV+ ++ +g+e++ +++gl ++++i+++ kl++++ s+++l+++++++ ++ ++ +i++ sp|C0M6J2|MURG_STRE4 5 IIFTGGGTAGHVTLNLILIPKFIKDGWEVHyIGDDKGIEHQEiKKSGLdvTFHAIATG-KLRRYF-SWQNLLDIFKVGFGVMQSLFIIA 91 689**************************************99****8335677****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+l+g+pa+++E++ +gl+n++ r+a++++ sp|C0M6J2|MURG_STRE4 92 RLRPKALFSKGGFVSVPPVIAARLLGVPAFIHESDLSMGLANRIAYRFATTMY 144 *************************************************9876 PP >> sp|A1UTC5|MURG_BARBK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.4 0.7 4.9e-27 2.8e-24 1 138 [. 7 143 .. 7 144 .. 0.94 Alignments for each domain: == domain 1 score: 90.4 bits; conditional E-value: 4.9e-27 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 vvl++gGT+G+++Pa Ala+eL++rG++V+lat ++ ++fv ++ +++ i + +l ++ + ++ +k+++ l+++ ++ ++++ + sp|A1UTC5|MURG_BARBK 7 VVLVAGGTGGHLFPAEALAVELRQRGYDVHLATDERAKRFVrHFDEKHIHIISSA-TLVRH-HPFALIKTFWLLLRGMVQSWILFRKLR 93 79***************************************87777777778888.66665.5************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p +v gfggy ++++ a+l g +++++Eqn+++g +n++l+ r+n ++ sp|A1UTC5|MURG_BARBK 94 PVLVGGFGGYPTVPPVWVAALTGRVTFIHEQNAVMGRANRVLATRVNAIA 143 **********************************************9876 PP >> sp|C0MD54|MURG_STRS7 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.3 0.0 5.3e-27 3e-24 1 138 [. 5 144 .. 5 145 .. 0.96 Alignments for each domain: == domain 1 score: 90.3 bits; conditional E-value: 5.3e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+v + l ++ + G+eV+ ++ +g+e++ +++gl++ i+++ kl++++ s+++l+++++++ ++ ++ +i++ sp|C0MD54|MURG_STRS7 5 IIFTGGGTAGHVTLNLILIPKFIKDGWEVHyIGDDNGIEHQEiKKSGLDVAFhtIATG-KLRRYF-SWQNLLDIFKVGFGVMQSLFIIA 91 689**************************************99****9755545****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+l+g+pa+++E++ +gl+n++ r+a++++ sp|C0MD54|MURG_STRS7 92 RLRPKALFSKGGFVSVPPVIAARLLGVPAFIHESDLSMGLANRIAYRFATTMY 144 *************************************************9876 PP >> sp|B4U1U4|MURG_STREM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.2 0.0 5.8e-27 3.2e-24 1 138 [. 5 144 .. 5 145 .. 0.96 Alignments for each domain: == domain 1 score: 90.2 bits; conditional E-value: 5.8e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+v + l ++ + G+eV+ ++ +g+e++ +++gl ++++i+++ kl++++ s+++l+++++++ ++ ++ +i++ sp|B4U1U4|MURG_STREM 5 IIFTGGGTAGHVTLNLILIPKFIKDGWEVHyIGDDNGIEHQEiKKSGLdvTFHAIATG-KLRRYF-SWQNLLDAFKVGFGVMQSLFIIA 91 689**************************************99****8335677****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+l+g+pa+++E++ +gl+n++ r+a++++ sp|B4U1U4|MURG_STREM 92 RLRPKALFSKGGFVSVPPVIAARLLGVPAFIHESDLSMGLANRIAYRFATTMY 144 *************************************************9876 PP >> sp|A5CWW1|MURG_VESOH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.5 0.0 4.7e-27 2.7e-24 1 137 [. 8 144 .. 8 146 .. 0.98 Alignments for each domain: == domain 1 score: 90.5 bits; conditional E-value: 4.7e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+++Pa+A+a+eL++ ++ l++ g+e+ + ++++++ +++ + +l+ k ++ +k ++ a+ ++ +i+ ++ sp|A5CWW1|MURG_VESOH 8 ILIMAGGTGGHIFPALAIANELKKHSSNIQwLGSNLGMENNIiPKHNIKLHTVSSV-GLRGKN-VISLIKAPFLLSYATLQVIKIFLKF 94 689*****************************************************.****99.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kpdvv+g+gg+ ++ ++ a+ + ++++Eqn+ipg +nk+l++ a++ sp|A5CWW1|MURG_VESOH 95 KPDVVLGMGGFTSGIGGLVAWVFKTTLVIHEQNSIPGTTNKILNKIATKT 144 *********************************************99986 PP >> sp|A1A2E9|MURG_BIFAA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 89.9 1.1 7.3e-27 4.1e-24 1 135 [. 7 143 .. 7 146 .. 0.94 Alignments for each domain: == domain 1 score: 89.9 bits; conditional E-value: 7.3e-27 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHH.HHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglka.lrkakeil 84 +vlaggGT+G+v P++A+a+ ++ ++e ++t gle+ + ++ag e ++i+ ++++ + +k+ +++ +++ka k++ il sp|A1A2E9|MURG_BIFAA 7 IVLAGGGTAGHVNPLLAVAHVIRELEPEADiavVGTAVGLERDLvPQAGFELETIEKV-PFPR--RPNKAALQFPAKWKAeKAKVRDIL 92 79**************************99999*********999*************.****..77888888888887615689**** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +++++vvvgfggy +++++ aa + gip+ ++Eqn+++g++nkl +r+a sp|A1A2E9|MURG_BIFAA 93 TRHQAQVVVGFGGYTSAPVYAAAHSMGIPIAIHEQNARAGMANKLGARWAS 143 **********************************************99986 PP >> sp|P65483|MURG_STRP1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 89.6 0.0 9e-27 5.1e-24 1 138 [. 5 144 .. 5 145 .. 0.96 Alignments for each domain: == domain 1 score: 89.6 bits; conditional E-value: 9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v + l ++ + G+eV+ ++ ++g+e++ e++gl ++++i+++ kl++++ s+++l +++++ +l ++ +i++ sp|P65483|MURG_STRP1 5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 79**************************************999****8335677****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v++++++aa+l+g p++++E++ +gl+nk+ ++a++++ sp|P65483|MURG_STRP1 92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144 *************************************************9876 PP >> sp|P65484|MURG_STRP8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 89.6 0.0 9e-27 5.1e-24 1 138 [. 5 144 .. 5 145 .. 0.96 Alignments for each domain: == domain 1 score: 89.6 bits; conditional E-value: 9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v + l ++ + G+eV+ ++ ++g+e++ e++gl ++++i+++ kl++++ s+++l +++++ +l ++ +i++ sp|P65484|MURG_STRP8 5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 79**************************************999****8335677****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v++++++aa+l+g p++++E++ +gl+nk+ ++a++++ sp|P65484|MURG_STRP8 92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144 *************************************************9876 PP >> sp|Q48SK9|MURG_STRPM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 89.6 0.0 9e-27 5.1e-24 1 138 [. 5 144 .. 5 145 .. 0.96 Alignments for each domain: == domain 1 score: 89.6 bits; conditional E-value: 9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v + l ++ + G+eV+ ++ ++g+e++ e++gl ++++i+++ kl++++ s+++l +++++ +l ++ +i++ sp|Q48SK9|MURG_STRPM 5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 79**************************************999****8335677****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v++++++aa+l+g p++++E++ +gl+nk+ ++a++++ sp|Q48SK9|MURG_STRPM 92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144 *************************************************9876 PP >> sp|Q1J5S6|MURG_STRPF UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 89.6 0.0 9e-27 5.1e-24 1 138 [. 5 144 .. 5 145 .. 0.96 Alignments for each domain: == domain 1 score: 89.6 bits; conditional E-value: 9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v + l ++ + G+eV+ ++ ++g+e++ e++gl ++++i+++ kl++++ s+++l +++++ +l ++ +i++ sp|Q1J5S6|MURG_STRPF 5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 79**************************************999****8335677****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v++++++aa+l+g p++++E++ +gl+nk+ ++a++++ sp|Q1J5S6|MURG_STRPF 92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144 *************************************************9876 PP >> sp|A8Z3Z7|MURG_STAAT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.3 0.0 5.4e-27 3e-24 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 90.3 bits; conditional E-value: 5.4e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + +G+e +++++g+e++ e++ +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk sp|A8Z3Z7|MURG_STAAT 4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 79****************************************776644678999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip+ ++E++ pgl+nk+ ++a++++ sp|A8Z3Z7|MURG_STAAT 91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTLIHESDLTPGLANKIALKFAKKIY 143 *************************************************9997 PP >> sp|Q2FH20|MURG_STAA3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.3 0.0 5.4e-27 3e-24 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 90.3 bits; conditional E-value: 5.4e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH-..--EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eea..gleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v ++l + +G+e +++++g+e++ e++ +++++pi ++ kl++++ sl++ k+++++lk++ +a+++lk sp|Q2FH20|MURG_STAA3 4 IAFTGGGTVGHVSVNLSLIPTALSQGYEALyIGSKNGIEREMiESQlpEIKYYPISSG-KLRRYI-SLENAKDVFKVLKGILDARKVLK 90 79****************************************776644678999****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++kpd++++ gg+v+++++iaa++++ip+ ++E++ pgl+nk+ ++a++++ sp|Q2FH20|MURG_STAA3 91 KEKPDLLFSKGGFVSVPVVIAAKSLNIPTLIHESDLTPGLANKIALKFAKKIY 143 *************************************************9997 PP >> sp|Q1JG11|MURG_STRPD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 89.6 0.0 9e-27 5.1e-24 1 138 [. 5 144 .. 5 145 .. 0.96 Alignments for each domain: == domain 1 score: 89.6 bits; conditional E-value: 9e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v + l ++ + G+eV+ ++ ++g+e++ e++gl ++++i+++ kl++++ s+++l +++++ +l ++ +i++ sp|Q1JG11|MURG_STRPD 5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHTEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 79**************************************999****8335677****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v++++++aa+l+g p++++E++ +gl+nk+ ++a++++ sp|Q1JG11|MURG_STRPD 92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144 *************************************************9876 PP >> sp|Q17WB5|MURG_HELAH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 89.9 0.0 7.1e-27 4e-24 1 138 [. 3 142 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 89.9 bits; conditional E-value: 7.1e-27 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 v+l+ggGT+G++ a Ala eL ++G e + l+++ g ++++ e + l + +++ ++ +k ++k++ +l+ + ka kakeilk sp|Q17WB5|MURG_HELAH 3 VALTGGGTGGHLSIAKALAIELEKQGVEAIyLGSTYGQDKEWfEDSPLFSECyfFNTQ-GVVNKS-FFKKIGSLFLQAKAALKAKEILK 89 79**********************************************9887336666.777777.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++++++++++gg++a++a++a+ll++ip++++Eqn+i g n++l+ +a+ v+ sp|Q17WB5|MURG_HELAH 90 KHQITHTISVGGFSAGPASFASLLNKIPLYIHEQNAIKGSLNRYLSPKAKAVF 142 *************************************************9987 PP >> sp|C6BYG6|MURG_DESAD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.1 0.1 6e-27 3.4e-24 1 138 [. 4 141 .. 4 142 .. 0.96 Alignments for each domain: == domain 1 score: 90.1 bits; conditional E-value: 6e-27 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +vl++gGT+G+v+Pa+A+a+e ++r ++ + ++ + +e+ve ag++++ ++++ ++ + k +++l+ + a+ a + +++ sp|C6BYG6|MURG_DESAD 4 IVLTTGGTGGHVFPALAVAHEIKNRFPQCEilfIGGKGPEREMVERAGISFKGLPAK-GVLGGG-IKKVFSSLWIV-SAMIMALKEIAS 89 79***************************999888888888888*************.999988.99999999999.************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +kpd+v+gfggy+ +++aa+l+g+p+ ++Eqn++pg++n++l + +++v+ sp|C6BYG6|MURG_DESAD 90 FKPDAVIGFGGYAGFCPVLAAWLLGVPTAIHEQNSVPGVTNRILGKVVKRVF 141 *********************************************9999986 PP >> sp|Q6G2Q5|MURG_BARHE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 89.4 0.2 1e-26 5.7e-24 1 136 [. 7 141 .. 7 143 .. 0.92 Alignments for each domain: == domain 1 score: 89.4 bits; conditional E-value: 1e-26 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vla+gGT+G+++Pa A+a+eL++rG++V+l+t ++ +fv ++ +++ i + ++ ++ ++ +k+++ lk++ ++ +++ + + sp|Q6G2Q5|MURG_BARHE 7 IVLAAGGTGGHLFPAEAVAVELRQRGYDVHLVTDERAQRFVrCFDEEHIHIISSA-TFTRRH-PFSLIKTFWMLLKGMGQSLALFYKLC 93 79***************************************75555566667777.776655.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 p +v gfggy ++li a++ + +++++Eqn+++g +n++l+ ++ sp|Q6G2Q5|MURG_BARHE 94 PVLVGGFGGYPTFPPLIVAAFMRRVTFIHEQNAVMGRANRVLAVFVSA 141 *****************************************9988765 PP >> sp|A9IWA5|MURG_BART1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 89.4 0.1 9.9e-27 5.6e-24 1 135 [. 7 140 .. 7 143 .. 0.92 Alignments for each domain: == domain 1 score: 89.4 bits; conditional E-value: 9.9e-27 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 +vla+gGT+G+++Pa Ala+eL++rG++V+l+t ++ ++fv+ e+ i + ++ + + ++ +k++++ lk++ ++ +++ + +p sp|A9IWA5|MURG_BART1 7 IVLAAGGTGGHLFPAEALAVELRQRGYDVHLITDERARSFVRRFDEEHTHIVSSATFTR-CHPFALIKTILSLLKGMGQSLRLFYKLRP 94 79***************************************666666666555548888.67*************************** PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +v gfggy + ++l+ a l + +++++Eqn+++g +n++l+ ++ sp|A9IWA5|MURG_BART1 95 VLVGGFGGYPSFPPLFIAVLMRRVTFIHEQNAVMGRANRVLAIFVR 140 ***************************************9987665 PP >> sp|Q8CUL4|MURG_OCEIH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 89.4 0.0 1e-26 5.7e-24 1 137 [. 7 144 .. 7 146 .. 0.97 Alignments for each domain: == domain 1 score: 89.4 bits; conditional E-value: 1e-26 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++++ggGT+G+v +Al q+rG+e+ +++ +g+e+ + + +g++++++ ++ kl++++ s ++lk+++++lk++ +a +i+ + sp|Q8CUL4|MURG_OCEIH 7 ILFTGGGTAGHVIVNLALIPYYQERGWEIDyIGSYNGIERDLisPLDGVTYHSVSTG-KLRRYM-SKENLKDPFKVLKGTMQAYRIIGK 93 79*************************************999999************.****99.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kp +v++ gg+v+++++ aa+l+g+p +++E++ pgl+nkl+ + ++v sp|Q8CUL4|MURG_OCEIH 94 RKPSIVFSKGGFVSVPVVAAAKLRGVPSIIHESDYTPGLANKLSIPFTKRV 144 ******************************************987777766 PP >> sp|A6LEU3|MURG_PARD8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 89.4 0.0 1e-26 5.6e-24 1 137 [. 6 144 .. 6 146 .. 0.95 Alignments for each domain: == domain 1 score: 89.4 bits; conditional E-value: 1e-26 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGH.HHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgle.efveeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pa+++a+++++r ++ + +++++++e ++v++ag+++v +++ ++ + + ++++k + k+lr a+++++ sp|A6LEU3|MURG_PARD8 6 IIISGGGTGGHIFPAISIANTFKKRFPDAEilfVGAEDRMEmDKVPAAGYKIVGLPVS-GFDRA-HLMNNVKVMVRLAKSLRLARKTIR 92 6899**************************99********83566*************.99995.599********************* PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 e+kpd+ vg+ggy++++ l a+++g+pa + Eqn+ +g++nkll+++a ++ sp|A6LEU3|MURG_PARD8 93 EFKPDIAVGVGGYASGPTLWMAASQGVPALIQEQNSYAGVTNKLLAKKASKI 144 ************************************************9987 PP >> sp|Q6AE64|MURG_LEIXX UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.2 1.0 5.6e-27 3.1e-24 2 133 .. 5 138 .. 4 143 .. 0.97 Alignments for each domain: == domain 1 score: 90.2 bits; conditional E-value: 5.6e-27 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +laggGT+G+v P++A+a++L+r ++ + l+t +gle+++ +++g+e +i+ +++++ ++++ + e ++++r++ e+++ sp|Q6AE64|MURG_LEIXX 5 LLAGGGTAGHVNPLLAVADRLRRDDPAAEvlvLGTAEGLEARLvPARGYELATIPRL-PFPRRP-NAAAVRFPGEYRRSVRAVGELIRA 91 89************************99999**************************.****99.99999999**************** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133 +++vvgfggy+a++a+ aa++a +p++++E+n++pgl+ +l +r+ sp|Q6AE64|MURG_LEIXX 92 RGIAAVVGFGGYAAAPAYSAARKAAVPLILHEANARPGLASRLGARY 138 ****************************************9998876 PP >> sp|A1K3U6|MURG_AZOSB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 89.1 0.1 1.2e-26 6.9e-24 2 138 .. 5 141 .. 4 142 .. 0.97 Alignments for each domain: == domain 1 score: 89.1 bits; conditional E-value: 1.2e-26 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++gGT+G+++P +A+a++L+++G+++ ++ p+g+e+++ +++g+++ + + l+ k+ +++l+ + + l ++ +a l++ k sp|A1K3U6|MURG_AZOSB 5 LVMAGGTGGHIFPGIAVAEALRAKGWRIVwMGNPDGMEARIvPSRGYDTAWVRFG-ALRGKG-LVRKLLLPVNLLVGFWQALGQLRRIK 91 789****************************************************.******.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pdvv+g+ggy+ + + a+l+g p++++Eqn+++gl+n++l+ a++vl sp|A1K3U6|MURG_AZOSB 92 PDVVLGMGGYITFPGGMMAALLGWPLVLHEQNSVAGLANRVLAGVADRVL 141 *********************************************99997 PP >> sp|Q9PLG2|MURG_CHLMU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 89.3 0.0 1.1e-26 6.2e-24 1 137 [. 8 142 .. 8 144 .. 0.94 Alignments for each domain: == domain 1 score: 89.3 bits; conditional E-value: 1.1e-26 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 vvla+gGT+G++ Pa+A +++ ++ eV l +gl++f+ e + ++ i+++ + +l+ +++++ + + ++++ +a + +k++ sp|Q9PLG2|MURG_CHLMU 8 VVLAVGGTGGHIIPALAARETFIKEKVEV-LLLGKGLTRFLeGEPDVLYYDIPSG--SPFSLRPNQMFSGARQLYQGYTAALRMIKSFA 93 79***************************.99*********88889*********..55555888888888888889************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 pdv vgfg+y++++a++a+++ +ip++++Eqn +pg+vnkl++ +a+gv sp|Q9PLG2|MURG_CHLMU 94 PDVAVGFGSYHSLPAILASIRKRIPLFLHEQNVVPGKVNKLFSHFAKGV 142 ***********************************************98 PP >> sp|Q1GRX9|MURG_SPHAL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 88.8 0.4 1.6e-26 8.9e-24 1 138 [. 7 142 .. 7 143 .. 0.96 Alignments for each domain: == domain 1 score: 88.8 bits; conditional E-value: 1.6e-26 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++la+gGT+G++ Pa Ala+eL +rGh+V l++ ++ + + a+le++ ++++ ++ l+ lk +++ +k++r a e++ ++ sp|Q1GRX9|MURG_SPHAL 7 FLLAAGGTGGHMLPAYALADELIARGHRVALVSDDRGLKIPgAPAELETHVLPAG-RASG--GPLGWLKGALAIRKGRRMAIELIDDFD 92 79****************************999999999999*************.4444..69************************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p+vvvgfggy +++ l+aa + + p++++Eqn++ g vn+l++ r++ v+ sp|Q1GRX9|MURG_SPHAL 93 PAVVVGFGGYPSLPSLLAAGATKRPRVIHEQNAVLGRVNRLMAPRVDAVA 142 ***********************************************997 PP >> sp|Q751Z4|ATG26_ASHGO Sterol 3-beta-glucosyltransferase OS=Ashbya gossypii GN=ATG26 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 88.7 0.0 1.6e-26 9.1e-24 3 138 .. 781 913 .. 779 914 .. 0.88 Alignments for each domain: == domain 1 score: 88.7 bits; conditional E-value: 1.6e-26 EE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHHH CS Glyco_transf_28 3 laggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkake 82 ++++G+rGdv+P++Al+++L ++Gh+V ++++ ++ ++v+++gl++++i++d v++ + + ++ ++e+a+ ++ sp|Q751Z4|ATG26_ASHGO 781 MLTIGSRGDVQPYIALGKGLLQEGHRVVVISHAEFGDWVRSHGLQFRAIAGDpaelmalmVQHGS--MNVGLIREAAST-------FR 859 789*************************************************9777666666666..566666666666.......99 PP HHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 83 ilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + ++ ++ ++++ + ++li++++a++ +++aE+++ip+++++++p++ ++ + sp|Q751Z4|ATG26_ASHGO 860 NWIRDLLETAWEAC--QGIDVLIESPSAMAGIHIAEALQIPYFRAFTMPWTKTRSY 913 99999999998888..788999*****************************98876 PP >> sp|A4VTK4|MURG_STRSY UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 88.2 0.0 2.4e-26 1.3e-23 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 88.2 bits; conditional E-value: 2.4e-26 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l ++ ++G+eV+ ++ +g+e++ ++gl+++ i+++ kl++++ s+++++++++++ ++ ++ +i++ sp|A4VTK4|MURG_STRSY 4 IVFTGGGTVGHVTLNLLLIPRFLEEGWEVHyIGDGNGIEHEQvVKSGLDVHFhsIATG-KLRRYF-SFQNMLDVFKVGFGVLQSLTIIA 90 79*************************************987799998766655****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+l+++p++++E++ +gl+nk+ ++a++++ sp|A4VTK4|MURG_STRSY 91 KIRPQALFSKGGFVSVPPVIAANLLRVPVFIHESDLTMGLANKIAYKFATTMY 143 *************************************************9886 PP >> sp|A4VZT9|MURG_STRS2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 88.2 0.0 2.4e-26 1.3e-23 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 88.2 bits; conditional E-value: 2.4e-26 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l ++ ++G+eV+ ++ +g+e++ ++gl+++ i+++ kl++++ s+++++++++++ ++ ++ +i++ sp|A4VZT9|MURG_STRS2 4 IVFTGGGTVGHVTLNLLLIPRFLEEGWEVHyIGDGNGIEHEQvVKSGLDVHFhsIATG-KLRRYF-SFQNMLDVFKVGFGVLQSLTIIA 90 79*************************************987799998766655****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+l+++p++++E++ +gl+nk+ ++a++++ sp|A4VZT9|MURG_STRS2 91 KIRPQALFSKGGFVSVPPVIAANLLRVPVFIHESDLTMGLANKIAYKFATTMY 143 *************************************************9886 PP >> sp|B3QWT7|MURG_CHLT3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 88.7 0.0 1.6e-26 9.2e-24 2 138 .. 4 146 .. 3 147 .. 0.91 Alignments for each domain: == domain 1 score: 88.7 bits; conditional E-value: 1.6e-26 EEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------....-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakl...eslktlkelaeglkalrkakei 83 ++aggGT+G+v+Pa+A+a+e r + + ++t++g+e++ +++g +++ i++ ++++ + e +++lk + + ++l + i sp|B3QWT7|MURG_CHLT3 4 IFAGGGTGGHVFPAIAIAQEILRTQQNAEiqfVGTERGIEATAvPKQGFPMHLIPVA-GVKRGFspkELFENLKVPMRLQRSLSACHDI 91 79******************99988888778***********99*************.6666552223677889999999********* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 l+++kp+vv+g+gg+v+++++ +a + +ip+ + Eqn+ pg++++ll+ ra v+ sp|B3QWT7|MURG_CHLT3 92 LQREKPNVVIGTGGFVSGPIVWEAQSKKIPTLIQEQNSMPGVTTRLLSLRASEVH 146 *************************************************999887 PP >> sp|Q6AJ53|MURG_DESPS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 88.9 0.0 1.4e-26 8e-24 1 137 [. 9 147 .. 9 149 .. 0.95 Alignments for each domain: == domain 1 score: 88.9 bits; conditional E-value: 1.4e-26 EEEE-------HHHHHHHHHHHHH-..--EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrr..GheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G+++Pa+A a+++ r+ G eV ++t++++++++ e +g + v+i++ +l+ k + + +k l+ + +a +il+ sp|Q6AJ53|MURG_DESPS 9 ILLTGGGTGGHLFPAIAAAQQFCREypGAEVLfVGTKRKMDAETlERYGFKGVAINSY-GLKGKN-MRELVKALLVLPISCLQALFILA 95 79********************9986677888**************************.999999.99999999999999********* PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +++pd+v+g+ggyv ++++ a+l++ p+ ++Eqn++pgl+n+ l++ +++v sp|Q6AJ53|MURG_DESPS 96 RFRPDLVLGVGGYVTGPVVAMAKLCRRPTLIHEQNSVPGLANRKLAKLVDRV 147 *******************************************999999887 PP >> sp|B9K6P7|MURG_THENN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 88.7 0.2 1.7e-26 9.4e-24 1 139 [] 4 146 .. 4 146 .. 0.93 Alignments for each domain: == domain 1 score: 88.7 bits; conditional E-value: 1.7e-26 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeil 84 v+ aggGT+G+++P++A+ ++L + e + +a++ +++e+v ++++ e++ +++d +l + l ++k+++++a++ +a+ kak+ l sp|B9K6P7|MURG_THENN 4 VAAAGGGTGGHLYPLLAILETLSKDV-ETKvlfFAVKGKIDEKVvKQEHPEYEVVTLDvRGLFRPLYHPKNFWRAAKVVNAILKAKKEL 91 5789******************9976.66667*************8888888777777558889999********************** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 ++kpdv+v +ggy+++++++aa+ g+p++++Eqn +pgl+ k+++++a +++v sp|B9K6P7|MURG_THENN 92 LRFKPDVIVLTGGYISGVVGLAAKNMGVPIFLHEQNVVPGLAVKTVAKYARKIFV 146 **************************************************99975 PP >> sp|Q8K6R7|MURG_STRP3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 87.7 0.0 3.3e-26 1.9e-23 1 138 [. 5 144 .. 5 145 .. 0.96 Alignments for each domain: == domain 1 score: 87.7 bits; conditional E-value: 3.3e-26 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v + l ++ + G+eV+ ++ ++g+e+ e++gl ++++i+++ kl++++ s+++l +++++ +l ++ +i++ sp|Q8K6R7|MURG_STRP3 5 ILFTGGGTVGHVTLNLILIPKFIKDGWEVHyIGDKNGIEHIEiEKSGLdvTFHAIATG-KLRRYF-SWQNLADVFKVALGLLQSLFIVA 91 79**************************************999****8335677****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v++++++aa+l+g p++++E++ +gl+nk+ ++a++++ sp|Q8K6R7|MURG_STRP3 92 KLRPQALFSKGGFVSVPPVVAAKLLGKPVFIHESDRSMGLANKIAYKFATTMY 144 *************************************************9876 PP >> sp|Q54IL5|UGT52_DICDI UDP-sugar-dependent glycosyltransferase 52 OS=Dictyostelium discoideum GN=ugt52 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 88.3 0.0 2.2e-26 1.3e-23 1 138 [. 1166 1303 .. 1166 1304 .. 0.98 Alignments for each domain: == domain 1 score: 88.3 bits; conditional E-value: 2.2e-26 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----......S------.-HHHCCSHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpd......vklwakleslktlkelaeglkalrk 79 ++++++G+rGd++P++Al +L+++Gh+V+lat++ +++ + +e gl+++p+g+d +++++ ++++k++ke++++ sp|Q54IL5|UGT52_DICDI 1166 ITILTIGSRGDIQPFIALSLGLKEYGHNVTLATHELYRDLIsKEFGLNYQPLGGDprelmdLCVRNGIFTPKFIKEALSR------ 1245 6799*********************************************************9999999************...... PP HHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 80 akeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++++ ++ +++++++ +++++lia++ + + +++ E ++ip++ ++++p ++++ + sp|Q54IL5|UGT52_DICDI 1246 -FRSFIDDLLLTCWKAVQNSNTQVLIATPGCFAGPHIGEVLQIPFFNAFTMPFTRTRTY 1303 .*****************************************************99976 PP >> sp|B3DQN1|MURG_BIFLD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 87.7 0.4 3.3e-26 1.9e-23 1 135 [. 8 144 .. 8 148 .. 0.97 Alignments for each domain: == domain 1 score: 87.7 bits; conditional E-value: 3.3e-26 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +vlaggGT+G+v P++A+a + ++ ++ ++t gle+ + +eag+e +i+ +++++ l +l+ +a+ +++ k++ il+ sp|B3DQN1|MURG_BIFLD 8 IVLAGGGTAGHVNPLLAVAGAIRDIEPTAQvtvIGTAVGLEKDLvPEAGYELDTIEKV-PFPRRP-NLYMLRFPAKWKRETAKVRSILE 94 79**********************99987777************9*************.****99.9********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +dvv+gfggy++++++ a + gip+ ++Eqn+++g++nkl +r+a+ sp|B3DQN1|MURG_BIFLD 95 TRHADVVAGFGGYASAPVYATAHKMGIPIAIHEQNARAGMANKLGARWAD 144 ***********************************************998 PP >> sp|Q8CY50|MURG_BIFLO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 87.7 0.4 3.3e-26 1.9e-23 1 135 [. 8 144 .. 8 148 .. 0.97 Alignments for each domain: == domain 1 score: 87.7 bits; conditional E-value: 3.3e-26 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +vlaggGT+G+v P++A+a + ++ ++ ++t gle+ + +eag+e +i+ +++++ l +l+ +a+ +++ k++ il+ sp|Q8CY50|MURG_BIFLO 8 IVLAGGGTAGHVNPLLAVAGAIRDIEPTAQvtvIGTAVGLEKDLvPEAGYELDTIEKV-PFPRRP-NLYMLRFPAKWKRETAKVRSILE 94 79**********************99987777************9*************.****99.9********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +dvv+gfggy++++++ a + gip+ ++Eqn+++g++nkl +r+a+ sp|Q8CY50|MURG_BIFLO 95 TRHADVVAGFGGYASAPVYATAHKMGIPIAIHEQNARAGMANKLGARWAD 144 ***********************************************998 PP >> sp|Q6MIG1|MURG_BDEBA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 87.7 0.0 3.3e-26 1.8e-23 1 137 [. 7 145 .. 7 147 .. 0.97 Alignments for each domain: == domain 1 score: 87.7 bits; conditional E-value: 3.3e-26 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v+aggGT+G+++P +A+ar+Lq+ ++ ++ ++t +gle+++ + +g + + i+++ +l+ k ++++k+l++ +l ++ ++l sp|Q6MIG1|MURG_BDEBA 7 IVIAGGGTGGHIYPGIAIARALQKLDPSIEvhfVGTARGLESKIvPREGFPLHLIESG-QLNVKS-PIQKMKTLLKIPVGLWQSIRLLG 93 79************************988877**************************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 + kp +v+g+ggy++++ ++aa+ g + v E n+ pg++n++l+r++++ sp|Q6MIG1|MURG_BDEBA 94 QLKPLYVIGVGGYASGPFVLAASIIGFNTAVWEPNAMPGMANRILSRFVDKC 145 *************************************************986 PP >> sp|Q7U3U6|MURG_SYNPX UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 88.0 0.4 2.7e-26 1.5e-23 2 137 .. 5 137 .. 4 139 .. 0.84 Alignments for each domain: == domain 1 score: 88.0 bits; conditional E-value: 2.7e-26 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpd.vklwakleslktlkelaeglkalrkakeilkeak 88 ++a+ GT+G+++Pa+A+a++L + +++Vr l++p++le+++ a ++ +++++ +++ + + ++ l+ la+g ++ +++++++ sp|Q7U3U6|MURG_SYNPX 5 LIAASGTGGHLFPALAVAEALPE-DWQVRwLGVPDRLETQLVPARYSLFTVNAGgLQGSRLSKAVQLLLLLAAG----VSVARLIRRER 88 799******************86.78***************555666666666611555545555555555555....*********** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +++v+++ggy+a++a++aa+++g+p++++E+n+ipg v++ll r++ v sp|Q7U3U6|MURG_SYNPX 89 IQLVLSTGGYIAAPAILAARFCGVPTVLHEANAIPGRVTRLLGRFCGAV 137 *****************************************99988666 PP >> sp|B7GQ78|MURG_BIFLI UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 87.5 0.4 4e-26 2.2e-23 1 135 [. 8 144 .. 8 148 .. 0.97 Alignments for each domain: == domain 1 score: 87.5 bits; conditional E-value: 4e-26 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +vlaggGT+G+v P++A+a + ++ ++ ++t gle+ + +eag+e +i+ +++++ l +l+ +a+ +++ k++ il+ sp|B7GQ78|MURG_BIFLI 8 IVLAGGGTAGHVNPLLAVAGAIRDIEPTAQvtvIGTAVGLEKDLvPEAGYELDTIEKV-PFPRRP-DLYMLRFPAKWKRETAKVRSILE 94 79**********************99987777************9*************.*****9.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +dvv+gfggy++++++ a + gip+ ++Eqn+++g++nkl +r+a+ sp|B7GQ78|MURG_BIFLI 95 TRHADVVAGFGGYASAPVYATAHKMGIPIAIHEQNARAGMANKLGARWAD 144 ***********************************************998 PP >> sp|Q0UY53|ATG26_PHANO Sterol 3-beta-glucosyltransferase OS=Phaeosphaeria nodorum GN=ATG26 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 86.7 0.0 6.8e-26 3.8e-23 2 138 .. 956 1089 .. 955 1090 .. 0.92 Alignments for each domain: == domain 1 score: 86.7 bits; conditional E-value: 6.8e-26 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrk 79 v +++G+rGdv+P+++l +eL ++Gh+ r+at+ ++e++v+++g+++ p+++d v++ ++++++ke+ ++ sp|Q0UY53|ATG26_PHANO 956 VCLTIGSRGDVQPYISLCKELLKEGHKARIATHAEFEPWVRKHGIDFAPVDGDpaelmricVEHGM--FTYGFIKEANSK------ 1033 6789*******************************************************7777777..8***********...... PP HHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 80 akeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++ + ++ + +++++ + +++li++++ ++ ++vaE++ ip+++++++p+ +++++ sp|Q0UY53|ATG26_PHANO 1034 -FRGWLDDVCSSSWRAC--QGADVLIESPSTMAGIHVAEALEIPYFRAFTMPWSRTRAY 1089 .8888888877777777..8999*******************************99987 PP >> sp|Q8DVE2|MURG_STRMU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 86.8 0.0 6.4e-26 3.6e-23 1 138 [. 6 145 .. 6 146 .. 0.95 Alignments for each domain: == domain 1 score: 86.8 bits; conditional E-value: 6.4e-26 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH--..-EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeag..leavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v + l ++ + G+eV+ ++ + g+e++ e++ + +++i+++ kl++++ slk++++++++++++ ++ +i+ sp|Q8DVE2|MURG_STRMU 6 IIFTGGGTVGHVTLNLLLIPRFLKDGWEVHyIGDKHGIEHEQiEQSDfdVIFHSIATG-KLRRYF-SLKNVLDVFKVGWGVLQSLTIMV 92 689************************************998888761166777****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+v+++ gg+v++++++aa+l++ip++v+E++ +gl+n++ ++a++++ sp|Q8DVE2|MURG_STRMU 93 KVRPQVLFSKGGFVSVPPVVAANLLRIPVFVHESDLSMGLANRIAYKFATTMY 145 *************************************************9876 PP >> sp|Q6N411|MURG_RHOPA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 88.2 0.6 2.3e-26 1.3e-23 1 138 [. 7 143 .. 7 144 .. 0.90 Alignments for each domain: == domain 1 score: 88.2 bits; conditional E-value: 2.3e-26 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE....----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp....igpdvklwakleslktlkelaeglkalrkakeilk 85 ++la+gGT+G+++Pa Al++ L rrG++Vrl+t + ++ +gl + + ++++ +++ + ++ k++++ + + a+ ++ sp|Q6N411|MURG_RHOPA 7 ILLAAGGTGGHLFPAEALGVVLIRRGYRVRLVTDHRATRY---SGLFTAEmtdvVPSE-TVRGRT-PWALAKTALKLGSGALLAFNLIG 90 79********************************999998...555555533345566.777766.9999******************* PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + kp++vvgfggy +++l+aa+++++p+ ++Eqn+++g +n++l+ r++ ++ sp|Q6N411|MURG_RHOPA 91 RLKPAAVVGFGGYPTLPPLLAATWRRVPTLIHEQNAVMGRANRFLAPRVDAIA 143 ************************************************99875 PP >> sp|Q6CUV2|ATG26_KLULA Sterol 3-beta-glucosyltransferase OS=Kluyveromyces lactis GN=ATG26 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 87.0 0.0 5.6e-26 3.2e-23 2 138 .. 739 872 .. 738 873 .. 0.90 Alignments for each domain: == domain 1 score: 87.0 bits; conditional E-value: 5.6e-26 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 l+++G+rGdv+P++Ala++Lq++GheV++ t+ ++++++ ++++ +++i ++ v++ + + ++ l+++ + + sp|Q6CUV2|ATG26_KLULA 739 GLLTIGSRGDVQPYIALAKGLQAEGHEVIILTHGEFKDWIVSHNIGFREISGNpaelislmVQHGS--MNMGLLRDASTN-------F 817 589******************************************************988877777..778888888888.......7 PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++ + d+ +++g++ ++li++++a++ +++aE++ ip+++++++p+++++++ sp|Q6CUV2|ATG26_KLULA 818 STWISSLLDT--AWEGCQGIDILIESPSAMAGIHIAEALRIPYFRAFTMPWTRTRAY 872 7777777444..48999************************************9987 PP >> sp|Q1MPB9|MURG_LAWIP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 87.6 0.1 3.6e-26 2e-23 1 138 [. 5 140 .. 5 141 .. 0.96 Alignments for each domain: == domain 1 score: 87.6 bits; conditional E-value: 3.6e-26 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+v+Pa+A+a+++ ++ + ++++ g e++ ++ +++++ ++++ ++ +++k+++ l++ ka+ ka++il++ sp|Q1MPB9|MURG_LAWIP 5 IAITTGGTGGHVYPALAVAEQFHDKA-DLFfIGSQYGPEAEMvKTFNIPFYGLPVR-GVLG--RKWKAFSALYSMIKAIVKARKILQKC 89 789**********************9.5555********9999*************.8888..999*********************** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 pd+vvgfg+y++ ++l+aa+l +ip+ ++Eqn +pgl+n+ l+r a++v+ sp|Q1MPB9|MURG_LAWIP 90 MPDIVVGFGSYASFAPLVAAKLKRIPTAIHEQNVRPGLANRMLARLADRVF 140 ************************************************997 PP >> sp|Q8R5N5|MURG_FUSNN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 84.4 0.0 3.5e-25 2e-22 1 135 [. 7 135 .. 7 139 .. 0.92 Alignments for each domain: == domain 1 score: 84.4 bits; conditional E-value: 3.5e-25 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v+l++gGT+G+++Pa+A+a++L+ +G+e +++ +++e+ + +e+g ++ +++ ++ lk++ + lka+r a +++ke+ sp|Q8R5N5|MURG_FUSNN 7 VMLTTGGTGGHIYPALAVADRLKIKGIEAVfVGSMERMEKDLvPESGHKFIGVDIS--------VPRGLKNIRKYLKAIRTAYKVIKEE 87 68**************************999***********9*******666655........55677888888888*********** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 kpd+++gfg+y++++++ia +l++ ++++ Eqn g +nk + + a+ sp|Q8R5N5|MURG_FUSNN 88 KPDAIIGFGNYISVPVIIAGILLRKKIYLQEQNVNIGSANKMFYKIAK 135 ******************************************999887 PP >> sp|Q3ANV3|MURG_CHLCH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 86.7 0.1 6.7e-26 3.8e-23 1 139 [] 3 147 .. 3 147 .. 0.92 Alignments for each domain: == domain 1 score: 86.7 bits; conditional E-value: 6.7e-26 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----...S------.-HHHCCSHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd...vklwakleslktlkelaeglkalrkake 82 v++aggGT+G+++Pa+A+a eLqr ++V ++t+ g+e++ + g++ + + ++ ++ kl +++l+ l+++ ++l + + sp|Q3ANV3|MURG_CHLCH 3 VLFAGGGTGGHLYPAIAMAAELQRLSPNVSvafVGTKSGIEATEvPRLGYKLHLVSVRglkRGFSPKL-LIENLRILFDFARSLGITIQ 90 79***************************************9988**********9994444444444.66788889999********* PP HHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 83 ilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 +l+++ pdvvvg+gg+v++++l+aa l+g ++ + Eqn+ pg++++ll+ +a v+v sp|Q3ANV3|MURG_CHLCH 91 LLRSEAPDVVVGTGGFVSAPLLFAAQLLGKKTLIQEQNAFPGVTTRLLSLFASEVHV 147 *************************************************99998875 PP >> sp|A8AW15|MURG_STRGC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 85.9 0.0 1.2e-25 6.7e-23 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 85.9 bits; conditional E-value: 1.2e-25 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v + l ++ ++G++V+ ++ ++g+e + ++gl ++++++++ kl++++ s+++l++ +++ ++++++ i+ sp|A8AW15|MURG_STRGC 4 ILFTGGGTVGHVTLNLLLIPKFIKEGWQVHyIGDKNGIEYQEiQKSGLdvTFHSVATG-KLRRYF-SWQNLLDGFKVIWGIFQSLSIML 90 79***************************************99***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+l+g+p++v+E++ gl+nk+ + a++++ sp|A8AW15|MURG_STRGC 91 KVRPQALFSKGGFVSVPPVIAARLSGVPVYVHESDLSIGLANKIAYKCATKMY 143 *********************************************99999876 PP >> sp|B8DP79|MURG_DESVM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 86.1 1.2 1.1e-25 5.9e-23 1 138 [. 4 142 .. 4 143 .. 0.96 Alignments for each domain: == domain 1 score: 86.1 bits; conditional E-value: 1.1e-25 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+l++gGT+G+++Pa+A+a+e rr ++ r l+ + g e+ + + agle+v ++++ +++ + l++l + + + ++ +a +++ sp|B8DP79|MURG_DESVM 4 VILTTGGTGGHIFPALAVAEEITRRYPKARilfLGGQYGPEADLaARAGLEYVGLPVR-GVMG--RGLRALAAAGAMGLGVWRAVSVVR 89 78********************************************************.9999..7799999999999*********** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++ pd+ vgfggy+a + ++aa+l+g pa ++Eqn+ipgl+n+ll + +v+ sp|B8DP79|MURG_DESVM 90 RFDPDIAVGFGGYAAFAGVLAARLCGRPAAIHEQNAIPGLTNRLLGHVVQRVF 142 *******************************************9988777765 PP >> sp|Q728U8|MURG_DESVH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 86.5 0.8 8.2e-26 4.6e-23 1 138 [. 4 142 .. 4 143 .. 0.91 Alignments for each domain: == domain 1 score: 86.5 bits; conditional E-value: 8.2e-26 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+l++gGT+G+++Pa+A+a+e ++r +e ++ g e+ + + agl++v ++++ ++ + ++++ ++ ++ +a +++ sp|Q728U8|MURG_DESVH 4 VILTTGGTGGHIFPALAVAEEIRARYPECSvlfMGGLYGPEADLaARAGLDFVGLPVR-GVLG--RGVRAIGAAFGMAAGIARAYAVMG 89 78**************************999999999999*9999*************.6555..4455555555555669999***** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++ pd+v+gfggy+a + ++aa+l+g pa ++Eqn++pgl+n++l+r + +v+ sp|Q728U8|MURG_DESVH 90 RFDPDIVLGFGGYAAFAGVLAARLRGRPAAIHEQNSVPGLTNRVLSRVVPRVF 142 ***********************************************999886 PP >> sp|Q8NJS1|ATG26_LEPMC Sterol 3-beta-glucosyltransferase OS=Leptosphaeria maculans GN=ATG26 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 86.1 0.0 1e-25 5.9e-23 2 138 .. 960 1093 .. 959 1094 .. 0.92 Alignments for each domain: == domain 1 score: 86.1 bits; conditional E-value: 1e-25 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrk 79 v +++G+rGdv+P++Al +eL ++Gh+ r+at+ ++e++v+++g+++ p++++ v++ ++++++ke+ ++ sp|Q8NJS1|ATG26_LEPMC 960 VCLTIGSRGDVQPYIALCKELLKEGHKPRIATHAEFEPWVRKHGIDFAPVDGNpaelmricVEHGM--FTYNFMKEANSK------ 1037 6789**************************************************99*997777777..8999****9999...... PP HHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 80 akeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++ + ++ + +++++ + +++li++++ ++ +++aE++ ip+++++++p+++++++ sp|Q8NJS1|ATG26_LEPMC 1038 -FRGWLDDVCSSSWRAC--QGADVLIESPSTMAGIHIAEALEIPYFRAFTMPWTRTRAY 1093 .7888888877777777..8999********************************9987 PP >> sp|Q5KK25|ATG26_CRYNE Sterol 3-beta-glucosyltransferase OS=Cryptococcus neoformans GN=ATG26 PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 86.0 0.0 1.1e-25 6.2e-23 4 138 .. 1039 1170 .. 1036 1171 .. 0.92 Alignments for each domain: == domain 1 score: 86.0 bits; conditional E-value: 1.1e-25 E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----......S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd......vklwakleslktlkelaeglkalrkakei 83 +++G+rGdv+P++Al ++Lq++Gh ++at+ +++++ve +g++++++g+d +++ + ++++++lke +++ ++ sp|Q5KK25|ATG26_CRYNE 1039 LTIGSRGDVQPYIALCKGLQAEGHITKIATHGEYKAWVEGHGIAFESVGGDpaelmqMCVDNGMFTVSFLKEGLQK-------FRG 1117 79**************************************************999997777777999999999999.......899 PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + ++ + +++++ + ++li++++a+ ++vaE++ ip+ +++++p+++++++ sp|Q5KK25|ATG26_CRYNE 1118 WLDDLLNSSWEAC--QGSDLLIESPSAMSGIHVAEALRIPYYRAFTMPWTRTRAY 1170 9999977777776..788999******************************9987 PP >> sp|Q8YZI3|MURG_ANASP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 85.4 0.0 1.8e-25 9.9e-23 2 135 .. 9 139 .. 8 143 .. 0.94 Alignments for each domain: == domain 1 score: 85.4 bits; conditional E-value: 1.8e-25 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 ++a+ GT+G+++Pa+Ala++L ++++e l++p++le+++ + ++ +i+++ ++++ l ++ l+ l + ++ k++++lk+ + + sp|Q8YZI3|MURG_ANASP 9 LIAASGTGGHLFPAIALAEKLPDYEIEW-LGVPNRLETQLVPKQYPLNTIAVE-GFQQGL-GISSLVILGKLIGSILKVRRLLKQGNFQ 94 799**********************776.***********8888999999999.999988.**************************** PP HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 vv +ggy+a++a+iaa+++g p++ +E+n++pg+v++++ ++ sp|Q8YZI3|MURG_ANASP 95 GVVTTGGYIAGPAVIAARSLGLPVIFHESNALPGKVTRFFGPWCS 139 **************************************9987765 PP >> sp|B9DUV6|MURG_STRU0 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 85.3 0.0 1.8e-25 1e-22 1 138 [. 5 144 .. 5 145 .. 0.94 Alignments for each domain: == domain 1 score: 85.3 bits; conditional E-value: 1.8e-25 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT G+v + l ++ + G+eV+ ++ ++g+e + ++g+ ++++i+++ kl++++ s+++l +++++ +l ++ i+ sp|B9DUV6|MURG_STRU0 5 ILFTGGGTVGHVTLNLILIPKFLKDGWEVHyIGDKKGIEYQEiQKSGYpvTFHAIKTG-KLRRYF-SWQNLIDVFKVATGLLQSLVIIN 91 79**************************************99988876116777****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + kp+++++ gg+v+++++ia++l g+p++v+E++ +gl+nk+ ++a +++ sp|B9DUV6|MURG_STRU0 92 KVKPQALFSKGGFVSVPPVIASRLMGVPVFVHESDLSMGLANKIALKFASTMY 144 ********************************************999987765 PP >> sp|Q3M935|MURG_ANAVT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 85.7 0.0 1.4e-25 7.7e-23 2 135 .. 9 139 .. 8 143 .. 0.94 Alignments for each domain: == domain 1 score: 85.7 bits; conditional E-value: 1.4e-25 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 ++a+ GT+G+++Pa+Ala++L ++++e l++p++le+++ + ++ +i+++ ++++ l l+ l+ l + ++ k++++lk+ + + sp|Q3M935|MURG_ANAVT 9 LIAASGTGGHLFPAIALAEKLPDYEIEW-LGVPNRLETQLVPKQYPLNTIAVE-GFQQGL-GLSSLVILGKLIGSILKVRRLLKQGNFQ 94 799**********************776.***********8888999999999.999988.**************************** PP HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 vv +ggy+a++a+iaa+++g p++ +E+n++pg+v++++ ++ sp|Q3M935|MURG_ANAVT 95 GVVTTGGYIAGPAVIAARSLGLPVIFHESNALPGKVTRFFGPWCS 139 **************************************9987765 PP >> sp|Q7VDZ2|MURG_PROMA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 85.7 0.0 1.4e-25 8.2e-23 2 138 .. 5 138 .. 4 139 .. 0.89 Alignments for each domain: == domain 1 score: 85.7 bits; conditional E-value: 1.4e-25 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+++a+eL + +++ l++p++le+++ +++++ i+++ +l++ + l+++ +l++ a++ + +++k++++ sp|Q7VDZ2|MURG_PROMA 5 LIAASGTGGHIFPALSVAEELPES-WDISwLGVPERLENQLVPTKYDMTVIPVG-GLQS--KGLRKYFQLLKLILAIFFVIYLIKRKQI 89 799******************987.6***************5555555556666.6677..4488888889998999999********* PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++v+ +ggy+a++a+ia++l+gi ++++E+n+ pg+v++ll ++++ v+ sp|Q7VDZ2|MURG_PROMA 90 KLVFTTGGYIAAPAIIASKLCGINVILHESNSYPGKVTRLLGKFCDEVA 138 ********************************************99886 PP >> sp|Q0I6M0|MURG_SYNS3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 85.7 0.1 1.4e-25 7.7e-23 2 139 .] 5 139 .. 4 139 .. 0.90 Alignments for each domain: == domain 1 score: 85.7 bits; conditional E-value: 1.4e-25 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+++a++L + + Vr +++p++le+ + ++ +++++ +l+ + l++l +l + l a +++++++++++ sp|Q0I6M0|MURG_SYNS3 5 LVAASGTGGHLFPALSVADALLEP-WSVRwVGVPDRLETSLVPGRYPLTTVKAG-GLQG--RGLRKLIQLIQLLAASGSIRRLIQRERI 89 799******************976.7**************95555666666666.6677..5688999999999999************ PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 d+v+ +ggy+a++a++aa+++gip++++E+n+ipg v++ll r++++v+v sp|Q0I6M0|MURG_SYNS3 90 DAVFTTGGYIAAPAILAARWCGIPVVLHESNAIPGRVTRLLGRFCTRVAV 139 **********************************************9975 PP >> sp|B2J8J9|MURG_NOSP7 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 85.4 0.0 1.7e-25 9.6e-23 2 137 .. 9 141 .. 8 143 .. 0.95 Alignments for each domain: == domain 1 score: 85.4 bits; conditional E-value: 1.7e-25 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 ++a+ GT+G+++Pa+Ala++L ++ +e l++p++le+++ ++++ +i+++ ++++ + l+ ++ + + ++ ++++ilk+ + + sp|B2J8J9|MURG_NOSP7 9 LIAASGTGGHLFPAIALAEKLPDYQIEW-LGVPNRLETQLVPKEYPLNTIAVE-GFQQGF-GLSSIRIFGKLAGSIIEVRRILKQGNFQ 94 799********************99776.***********8899999999999.999988.**************************** PP HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 v+ +ggy+a++a+iaa+++g p++ +E+n++pg+v++++ ++ v sp|B2J8J9|MURG_NOSP7 95 GVFTTGGYIAGPAVIAARSLGLPVVFHESNALPGKVTRFFGPWCSAV 141 ***************************************99988776 PP >> sp|A5GPC2|MURG_SYNPW UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 86.6 0.2 7.5e-26 4.2e-23 2 138 .. 5 138 .. 4 139 .. 0.90 Alignments for each domain: == domain 1 score: 86.6 bits; conditional E-value: 7.5e-26 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++a+ GT+G+++Pa+++a++L +G+ + l++p++le+++ e + l++ ++++ +l+ + lk++++l++ l a r+++++++++ sp|A5GPC2|MURG_SYNPW 5 LIAASGTGGHLFPALSVADALP-AGWSAHwLGVPDRLETTLvpERYPLTT--VNAG-GLQG--RGLKKVVQLLRLLAASRDVRRLIRRN 87 799******************8.59***************9555555555..6666.6677..6689999999999999********** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +dvv+ +ggy+a++a+++a+++g+p++++E+n+ipg v++ll r +++v+ sp|A5GPC2|MURG_SYNPW 88 GIDVVFTTGGYIAAPAILGARWSGVPVVLHESNAIPGRVTRLLGRACTQVA 138 *******************************************99999886 PP >> sp|B4RFS0|MURG_PHEZH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 86.5 1.6 8e-26 4.5e-23 2 137 .. 6 140 .. 5 142 .. 0.87 Alignments for each domain: == domain 1 score: 86.5 bits; conditional E-value: 8e-26 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH......HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv......eeagleavpigpdvklwakleslktlkelaeglkalrkakeil 84 v+a+gGT+G+++Pa Ala++L +rG+++ la+ ++++ + gl+a ++ p+ + +++++ +++l++ a++++ sp|B4RFS0|MURG_PHEZH 6 VVAAGGTGGHLFPAQALAEALIARGWRIVLASDERVAGLAqdfpaeRRIGLSAATYRPG-------DPVGMMRAGFAVLRGAMHARAAF 87 89********************************9987641111222335555555555.......9********************** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +e pdvvvgfggy +++al+aa+l + p++++Eqn+++g +n++l+ ++ +v sp|B4RFS0|MURG_PHEZH 88 REIGPDVVVGFGGYPSAPALVAAILDRRPTVIHEQNAVMGRTNRILAPHVRTV 140 *********************************************99888776 PP >> sp|A1VBE8|MURG_DESVV UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 85.4 1.0 1.8e-25 1e-22 1 138 [. 4 142 .. 4 143 .. 0.91 Alignments for each domain: == domain 1 score: 85.4 bits; conditional E-value: 1.8e-25 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+l++gGT+G+++Pa+A+a+e ++r +e ++ g e+ + + agl++v ++++ ++ + ++++ ++ ++ +a +++ sp|A1VBE8|MURG_DESVV 4 VILTTGGTGGHIFPALAVAEEIRARYPECSvlfMGGLYGPEADLaARAGLDFVGLPVR-GVLG--RGVRAIGAAFGMAAGIARAYAVMG 89 78**************************999999999999*9999*************.6555..4455555555555669999***** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++ pd+v+gfggy+a + ++aa+l+g pa ++Eqn++pg++n++l+r + +v+ sp|A1VBE8|MURG_DESVV 90 RFDPDIVLGFGGYAAFAGVLAARLRGRPAAIHEQNSVPGVTNRVLSRVVPRVF 142 ***********************************************999886 PP >> sp|B7IHN7|MURG_THEAB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 85.4 0.0 1.8e-25 1e-22 1 139 [] 4 144 .. 4 144 .. 0.97 Alignments for each domain: == domain 1 score: 85.4 bits; conditional E-value: 1.8e-25 EEEE-------HHHHHHHHHHHHH--.-EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrG.heVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++agg T+G+++Pa+A+ +eL + ++V + ++ +lee+v + ++++ v+++++ +l++ + s++++k+l++ ++a + + + lk+ sp|B7IHN7|MURG_THEAB 4 IAVAGGVTGGHLYPALAVLKELEKLTpIDVLyFTVSGKLEERVlKDYNYKKVSLKIQ-GLKRPVYSIENIKRLFKIFNANNIVLKELKK 91 789*********************9735888**************************.******************************* PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 +kpd+v+ +ggyv+ ++++aa++++ip+++ Eqn ipgl+n l+ +a++v+v sp|B7IHN7|MURG_THEAB 92 FKPDIVFVTGGYVSYPVGTAAKKLKIPLYIQEQNVIPGLANIKLSSFAKKVFV 144 *************************************************9985 PP >> sp|Q7S1I0|ATG26_NEUCR Sterol 3-beta-glucosyltransferase OS=Neurospora crassa GN=atg-26 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 85.0 0.0 2.3e-25 1.3e-22 4 138 .. 1016 1147 .. 1013 1148 .. 0.86 Alignments for each domain: == domain 1 score: 85.0 bits; conditional E-value: 2.3e-25 E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 +++G+rGdv+P++Al ++L ++Gh+ +++t++++++++e++g+e+ p+++d +++ +++++l+e+ ++ + sp|Q7S1I0|ATG26_NEUCR 1016 LTIGSRGDVQPYIALCKRLLEEGHRPKIVTHREFKDWIESHGIEFGPVEGDpselmricIENGT--FTYAFLREANSK-------F 1092 79*************************************************9777774444444..677777777777.......7 PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + ++ + +++ ++ ++li++++a++ +++aE++gip+++++++p+++++++ sp|Q7S1I0|ATG26_NEUCR 1093 RGWLDELLTSAWEA--CQGSDLLIESPSAMAGIHIAEALGIPYFRAFTMPWTRTRAY 1147 77877776666555..589999*******************************9987 PP >> sp|Q3AVX2|MURG_SYNS9 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 85.1 0.3 2.1e-25 1.2e-22 2 138 .. 5 138 .. 4 139 .. 0.95 Alignments for each domain: == domain 1 score: 85.1 bits; conditional E-value: 2.1e-25 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+A+a++L +V l++p++le+++ a + +++++ +l+ + +++l++l + l a ++++++ +++ sp|Q3AVX2|MURG_SYNS9 5 LIAASGTGGHLFPALAVADALDGHC-QVSwLGVPDRLETELVPARFKLITVNAG-GLQG--RGITKLVQLIRLLAASITVRRLIRTHQI 89 799******************8876.9**************9999999999999.9999..77************************** PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 d+v+ +ggy+a++a+++a+++g+pa+++E+n+ipg v++ll r++ v+ sp|Q3AVX2|MURG_SYNS9 90 DAVFTTGGYIAAPAILGARWCGVPAVLHESNAIPGRVTRLLGRFCSAVA 138 *******************************************998886 PP >> sp|Q4WID6|ATG26_ASPFU Sterol 3-beta-glucosyltransferase OS=Aspergillus fumigatus GN=atg26 PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 84.8 0.0 2.7e-25 1.5e-22 4 138 .. 907 1038 .. 904 1039 .. 0.90 Alignments for each domain: == domain 1 score: 84.8 bits; conditional E-value: 2.7e-25 E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++v+++g+++ p+++d v++ +++++lke+ ++ + sp|Q4WID6|ATG26_ASPFU 907 LTIGSRGDVQPYIALCKGLLAEGHRPKIATHAEFEPWVRKHGIDFAPVEGDpaelmricVENGM--FTYSFLKEASQK-------F 983 79**************************************************999884444444..889999999888.......8 PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + ++ ++ +++++++ ++li++++a++ +++aE++ ip+++++++p+ +++++ sp|Q4WID6|ATG26_ASPFU 984 RGWIDDL--LSSAWASCQDSDLLIESPSAMAGIHIAEALRIPYFRAFTMPWSRTRAY 1038 8888888..666778889**********************************99987 PP >> sp|A1CYS1|ATG26_NEOFI Sterol 3-beta-glucosyltransferase OS=Neosartorya fischeri (strain ATCC 1020 / DSM 3700 / FGSC # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 84.8 0.0 2.7e-25 1.5e-22 4 138 .. 916 1047 .. 913 1048 .. 0.90 Alignments for each domain: == domain 1 score: 84.8 bits; conditional E-value: 2.7e-25 E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++v+++g+++ p+++d v++ +++++lke+ ++ + sp|A1CYS1|ATG26_NEOFI 916 LTIGSRGDVQPYIALCKGLLAEGHRPKIATHAEFEPWVRKHGIDFAPVEGDpaelmricVENGM--FTYSFLKEASQK-------F 992 79**************************************************999884444444..889999999888.......8 PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + ++ ++ +++++++ ++li++++a++ +++aE++ ip+++++++p+ +++++ sp|A1CYS1|ATG26_NEOFI 993 RGWIDDL--LSSAWASCQDSDLLIESPSAMAGIHIAEALRIPYFRAFTMPWSRTRAY 1047 8888888..666778889**********************************99987 PP >> sp|Q8DHY4|MURG_THEEB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 84.6 0.0 3e-25 1.7e-22 2 138 .. 8 141 .. 7 142 .. 0.94 Alignments for each domain: == domain 1 score: 84.6 bits; conditional E-value: 3e-25 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+A+a+eL +++ ++ l++ ++le+++ +++ ++++ +l+ k +++l++l++++ + +++++lk+ sp|Q8DHY4|MURG_THEEB 8 LIAASGTGGHLFPALAVAQELPEYE--IHwLGVRDRLENQLIPPHYPLHTVNFS-GLQGKT-PWAKLRPLWQFWGVFWQTRQLLKQGDF 92 799********************99..667***********8888888888888.889988.9************************** PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + v+ +ggy+a++a++aa+++g +a+++E+n++pg+v+++l+ +++ v+ sp|Q8DHY4|MURG_THEEB 93 QGVFTTGGYIAAPAILAARSLGRVAILHESNALPGKVTRWLAPWCTLVA 141 ******************************************9999886 PP >> sp|Q11RH5|MURG_CYTH3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 84.2 0.0 4.2e-25 2.4e-22 1 137 [. 9 147 .. 9 149 .. 0.97 Alignments for each domain: == domain 1 score: 84.2 bits; conditional E-value: 4.2e-25 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++PavA+a++ ++r ++ + ++++ ++e + ++ag++++ + + + ++kl sl++l ++++ +++kak+i++ sp|Q11RH5|MURG_CYTH3 9 IIISGGGTGGHIYPAVAIANAIKARFPDSEilfVGAQGRMEMQKvPAAGYNIEGLWIS-GIQRKL-SLDNLAFPLKVIASYFKAKKIVS 95 6899*********************9999999********98877*************.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +kpd+ +g+ggy++ ++l aa+++g+++ + Eqn+ +g++nk+l+++++ + sp|Q11RH5|MURG_CYTH3 96 TFKPDIAIGVGGYASWPLLQAANASGVATLIQEQNSYAGVANKALSKKVKAI 147 ************************************************9976 PP >> sp|A9BDG0|MURG_PROM4 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 84.7 0.0 2.9e-25 1.6e-22 2 138 .. 5 138 .. 4 139 .. 0.96 Alignments for each domain: == domain 1 score: 84.7 bits; conditional E-value: 2.9e-25 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+A+a++L + ++V l+++++le+ + ++++ +ig++ ++++ + +k ++++++ l a+ ++ +++++++ sp|A9BDG0|MURG_PROM4 5 LIAASGTGGHLFPALAVAEALPES-WKVSwLGVSDRLESSLIPKKYQLSTIGVE-GVQS--RGIKRIVQIFKLLAATGSVICLIRRNRI 89 799******************987.6***************99999********.9999..77************************** PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++v+ +ggy+a++a++aa+l g +++++E+n+ipg++++ll r +++v+ sp|A9BDG0|MURG_PROM4 90 QIVLTTGGYIAVPAVLAAKLTGKKVILHESNAIPGKATRLLGRLCDKVA 138 *****************************************99999986 PP >> sp|Q73L91|MURG_TREDE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 83.6 0.0 6.4e-25 3.6e-22 1 139 [] 4 151 .. 4 151 .. 0.90 Alignments for each domain: == domain 1 score: 83.6 bits; conditional E-value: 6.4e-25 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE........----S------.-HHHCCSHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavp........igpdvklwakleslktlkelaeglkal 77 vv++ggGT+G+++P +A+a++L e r +++ +g+++++ e+++l + i+++ kl++++ s++++ +++++ ++ sp|Q73L91|MURG_TREDE 4 VVFTGGGTGGHIFPGLAVAEALSSSL-ECRivwIGSAKGVDRKIvESSELYSASpsvlefigIPAG-KLRRYF-SFQNFIDVFKVAAGF 89 79********************9764.444559************999874443355555448888.******.*************** PP HHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 78 rkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 k+++il + kp v++ gg+v+++++ aa++++ip++ +E + pgl++++++++an++lv sp|Q73L91|MURG_TREDE 90 IKSFFILLKLKPVFVFSKGGFVSVPPCAAAKFLKIPVITHECDFSPGLATRINSKFANRILV 151 ***********************************************************985 PP >> sp|C4XK69|MURG_DESMR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 85.4 0.6 1.7e-25 9.7e-23 2 138 .. 5 141 .. 4 142 .. 0.94 Alignments for each domain: == domain 1 score: 85.4 bits; conditional E-value: 1.7e-25 EEE-------HHHHHHHHHHHHH-..--EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrr..GheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++gGT+G+++Pa+A+a++ +r G +V ++ g e ++ ++agl++v+++++ ++ + +k+l ++ l+a+ a + ++e+ sp|C4XK69|MURG_DESMR 5 IVTTGGTGGHIFPALAVAEAAMRLspGLDVLFIGGAGPEGELaAKAGLPFVALPAK-GVFG--RGIKALAAPFWMLRAFGLAGARIREF 90 689*******************985588999999999999999*************.8888..6689999999999************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +pdvv gfggy+ ++ aa+l g+p+ ++Eqn++pg++nk+l r++++v+ sp|C4XK69|MURG_DESMR 91 SPDVVCGFGGYAGFIPVAAARLMGVPTAIHEQNSVPGVTNKVLGRFVDRVF 141 ************************************************997 PP >> sp|A1BAL5|MURG_PARDP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 84.2 1.3 4.1e-25 2.3e-22 1 138 [. 7 144 .. 7 145 .. 0.91 Alignments for each domain: == domain 1 score: 84.2 bits; conditional E-value: 4.1e-25 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp..igpdvklwakleslktlkelaeglkalrkakeilkea 87 +++a+gGT+G+++Pa +la++L ++G++V+l t ++ ++ + e+ + + + ++ + l+ l +++ + ++ +a ++++ + sp|A1BAL5|MURG_PARDP 7 CLIAAGGTGGHMFPAQSLAETLLAQGWRVKLSTDERGARYAGAFPAEVARevVSSA-TTARGG-ALARLAVPFRIGAGVLAAIRAMRAD 93 689************************************99555555444437777.555556.9999********************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p+vvvgfggy +a+ aal ++ip+ ++Eqngi+g vn +++rr+++v+ sp|A1BAL5|MURG_PARDP 94 RPAVVVGFGGYPTIPAMSAALVLRIPRMIHEQNGIMGRVNMAFARRVDRVA 144 ************************************************986 PP >> sp|A3CLN6|MURG_STRSV UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 83.4 0.0 7.3e-25 4.1e-22 1 138 [. 4 143 .. 4 144 .. 0.96 Alignments for each domain: == domain 1 score: 83.4 bits; conditional E-value: 7.3e-25 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---..EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagl..eavpigpdvklwakleslktlkelaeglkalrkakeilk 85 +v++ggGT G+v + l ++ ++G++V+ ++ + g+e + ++gl ++++++++ kl++++ s+++l++ +++ ++++++ i+ sp|A3CLN6|MURG_STRSV 4 IVFTGGGTVGHVTLNLLLIPKFIKEGWQVHyVGDKHGIEYQEiQKSGLdvTFHSVATG-KLRRYF-SWQNLLDGFKVVWGIFQSLGIML 90 79***************************************99***98334666****.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +p+++++ gg+v+++++iaa+l+g+p++v+E++ gl+nk+ + a++++ sp|A3CLN6|MURG_STRSV 91 KVRPQALFSKGGFVSVPPVIAARLSGVPVYVHESDLSIGLANKIAYKCATKMY 143 *********************************************99999876 PP >> sp|A4SV74|MURG_POLSQ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 84.1 0.0 4.4e-25 2.5e-22 1 136 [. 6 141 .. 6 144 .. 0.97 Alignments for each domain: == domain 1 score: 84.1 bits; conditional E-value: 4.4e-25 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+++P +A+a+ L+ G++V l+ + g+e ++ ++ + ++++++ + +l+ k+ ++l+ + + +a +++ +i+++ sp|A4SV74|MURG_POLSQ 6 ILVMAGGTGGHIFPGLAVAEYLRICGWNVSwLGNQSGMEYRLvKSCNFPFEAVEFG-GLRGKG-IKAKLMLPINLARACHQSWKIMRRL 92 789*****************************************************.******.999999999999************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 kp+vv+g+ggy+ + ++ ++l++ p++++E+n+++g +n++l++ a + sp|A4SV74|MURG_POLSQ 93 KPNVVLGMGGYITFPGGLISKLLKRPLVLHEANSVAGSANRALAKIAMR 141 ******************************************9998765 PP >> sp|O67238|MURG_AQUAE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 84.0 0.0 4.6e-25 2.6e-22 1 139 [] 2 137 .. 2 137 .. 0.93 Alignments for each domain: == domain 1 score: 84.0 bits; conditional E-value: 4.6e-25 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp..igpdvklwakleslktlkelaeglkalrkakeilke 86 ++++ggGT+G+++Pa+A+ + + +++ +V+ +++++g+e + ++ +++++ ++++ +l+++ ++++lk ++++lka ++++e lke sp|O67238|MURG_AQUAE 2 IAVSGGGTGGHFFPALAFTNYVLKKE-KVKfIGSKRGIEYE-LKDLIKTEKlfLDVE-PLRERN-FYQKLKAIWKFLKAQEEINEFLKE 86 6899**********************.***9*******999.677888888446666.777777.************************ PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 + +++ fggy++++++i++ l++ ++++Eqn+ip ++nk+l+++a++vl+ sp|O67238|MURG_AQUAE 87 DYRALI--FGGYASLPLGINTVLRRKELFIHEQNSIPSKTNKILSKKAKKVLI 137 **9999..******************************************985 PP >> sp|Q2U0C3|ATG26_ASPOR Sterol 3-beta-glucosyltransferase OS=Aspergillus oryzae GN=atg26 PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 83.9 0.0 5e-25 2.8e-22 4 138 .. 897 1028 .. 894 1029 .. 0.90 Alignments for each domain: == domain 1 score: 83.9 bits; conditional E-value: 5e-25 E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++v+++g+++ p+++d v++ +++++lke+ + + sp|Q2U0C3|ATG26_ASPOR 897 LTIGSRGDVQPYIALCKGLLAEGHKPKIATHAEFEPWVRQHGIDFAPVDGDpaelmricVENGM--FTYSFLKEASTK-------F 973 79**************************************************999994444444..899999999999.......8 PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + ++ ++ +++++++ ++li++++a++ +++aE++ ip+++++++p+ +++++ sp|Q2U0C3|ATG26_ASPOR 974 RGWIDDL--LSSAWASCQDSDLLIESPSAMAGIHIAEALRIPYFRAFTMPWSRTRAY 1028 8888888..666778889**********************************99987 PP >> sp|Q3STS8|MURG_NITWN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 83.3 0.3 7.8e-25 4.4e-22 1 138 [. 7 143 .. 7 144 .. 0.82 Alignments for each domain: == domain 1 score: 83.3 bits; conditional E-value: 7.8e-25 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.....vklwakleslktlkelaeglkalrkakeil 84 ++la+gGT+G+++Pa Al++eL++rG +Vrl+t + + +gl + ++ v++++ ++ ++ + ++ a ++ sp|Q3STS8|MURG_NITWN 7 ILLAAGGTGGHLFPAEALGVELMKRGLRVRLVTDSRALRY---SGLFSKDLTDVvpsetVRGRS---PWALARTGLMLAAGTAVALNLM 89 79****************************9999887766...566655544444443434444...44444444444445889999** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + kp++vvgfggy +++liaa+l+gip++++++n+++g +n +l++r+n ++ sp|Q3STS8|MURG_NITWN 90 RVLKPAAVVGFGGYPTLPPLIAARLRGIPTVIHDSNAVMGRANSFLSKRVNAIA 143 ***************************************************976 PP >> sp|A1BJX8|MURG_CHLPD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 83.7 0.2 5.7e-25 3.2e-22 1 138 [. 3 146 .. 3 147 .. 0.91 Alignments for each domain: == domain 1 score: 83.7 bits; conditional E-value: 5.7e-25 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----..S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd..vklwakleslktlkelaeglkalrkakei 83 v++aggGT+G+++PavA+a eLq+r ++V+ +t+ g+e++ + g+ + + ++ ++++ + +++l la++ a+r+a +i sp|A1BJX8|MURG_CHLPD 3 VLFAGGGTGGHLYPAVAMAGELQKRVPHVKlsfAGTEAGIEAREiPRLGYRLHLLSVRglKRGRSLGALVDNLGVLADFIGAVRSALAI 91 79****************************88779999999999999999999999995533444445677788899************ PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + +++pdvvvg+gg+v++++l+aa +g ++ + Eqn+ pg+++kll+ +a ++ sp|A1BJX8|MURG_CHLPD 92 INSESPDVVVGTGGFVSAPLLLAAQMRGKKTLIQEQNAFPGVTTKLLSLFASEIH 146 ***********************************************99988766 PP >> sp|A1AWE8|MURG_RUTMC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 83.6 0.0 6.4e-25 3.6e-22 1 137 [. 5 141 .. 5 143 .. 0.98 Alignments for each domain: == domain 1 score: 83.6 bits; conditional E-value: 6.4e-25 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++++gGT+G+++Pa+A+a+eL++ ++ l++ g+e+++ ++++++ +++++ +l+ k ++ +k l+ a+ +++ i+ ++ sp|A1AWE8|MURG_RUTMC 5 ILIMAGGTGGHIFPALAIANELKNHSTHIQwLGSNVGIENEIvPKHNIKLHTVNSV-GLRGKS-VVSLIKALFLLSYATLQIMGIFLKF 91 689***********************9999**************************.*****9.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kp++v+g+gg+ ++ ++ a +ip++++Eqn+i g +nk+l++ a++ sp|A1AWE8|MURG_RUTMC 92 KPNIVLGMGGFTSGIGGLVACIFRIPLVIHEQNSISGTTNKILNKIAKKT 141 *********************************************99986 PP >> sp|A1CFB3|ATG26_ASPCL Sterol 3-beta-glucosyltransferase OS=Aspergillus clavatus GN=atg26 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 83.7 0.0 5.7e-25 3.2e-22 4 138 .. 913 1044 .. 910 1045 .. 0.90 Alignments for each domain: == domain 1 score: 83.7 bits; conditional E-value: 5.7e-25 E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++v+ +g+++ p+++d v++ +++++lke+ ++ + sp|A1CFB3|ATG26_ASPCL 913 LTIGSRGDVQPYIALCKGLLAEGHKPKIATHAEFEPWVRRHGIDFAPVDGDpaelmricVENGM--FTYSFLKEASQK-------F 989 79**************************************************999884444444..889999999888.......8 PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + ++ ++ +++++++ ++li++++a++ +++aE++ ip+++++++p+ +++++ sp|A1CFB3|ATG26_ASPCL 990 RGWIDDL--LSSAWASCQDSDLLIESPSAMAGIHIAEALRIPYFRAFTMPWSRTRAY 1044 8888888..666778889**********************************99987 PP >> sp|B8IN64|MURG_METNO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 83.1 1.4 8.9e-25 5e-22 1 135 [. 8 141 .. 8 145 .. 0.89 Alignments for each domain: == domain 1 score: 83.1 bits; conditional E-value: 8.9e-25 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S----.--.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwa.kleslktlkelaeglkalrkakeilkea 87 v+la+gGT+G+++Pa Ala +L++rG++V lat ++e+ e e+v+i++ ++ + l ++l++l + ++ +a +++++ sp|B8IN64|MURG_METNO 8 VLLAAGGTGGHLFPAEALALRLRERGIRVVLATDSRVETLSgEFPASEIVSIPSATPSGRsPLARGAALVTLGR---GFAAALRVVRRL 93 79***************************************999999999999995555504444555555555...5*********** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +p+v vgfggy +++l+aa +++p+ ++Eqn+++g +n +l+r a+ sp|B8IN64|MURG_METNO 94 NPAVAVGFGGYPTVPPLLAAQMLRVPTLLHEQNAVMGRANAFLARGAT 141 ******************************************999876 PP >> sp|Q6G124|MURG_BARQU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 83.1 0.2 9e-25 5.1e-22 1 135 [. 7 140 .. 7 143 .. 0.90 Alignments for each domain: == domain 1 score: 83.1 bits; conditional E-value: 9e-25 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeak 88 +vl++gGT+G+++Pa A+a+eL++rG++V+l+t ++ + fv e+ + + ++ ++ ++ +k+ + lk++ ++ +++ + + sp|Q6G124|MURG_BARQU 7 IVLVAGGTGGHLFPAEAVAVELRQRGYDVHLVTDRRAKCFVSCVDEEHTHiVSSA-TFTRRH-PFALIKTCWILLKGMGQSLALFYKLR 93 79***************************************55555555515555.666655.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 p +v gfggy ++l+ a+l + +++++Eqn+i+g +n++l+ ++ sp|Q6G124|MURG_BARQU 94 PVLVGGFGGYPTFPPLLVAALMRCVTFIHEQNAIMGRANRVLAVFVH 140 *****************************************998876 PP >> sp|Q2W0H3|MURG_MAGSA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 83.1 1.1 8.8e-25 5e-22 1 138 [. 8 144 .. 8 145 .. 0.96 Alignments for each domain: == domain 1 score: 83.1 bits; conditional E-value: 8.8e-25 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++la+gGT+G+v+Pa Ala L +rG++ l+t ++ ++ + +le+ i ++ + + ++ +l++l++++e + +l +a+ il + + sp|Q2W0H3|MURG_MAGSA 8 IALAAGGTGGHVFPAEALASVLLDRGYRLALITDKRGAAYGgTLGKLETFRISAG-GIAGRG-KLSALRSALELGLGLIQARSILGRIR 94 79****************************9999999999989999*********.999999.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p++v+gfggy++++ ++aa+lagip+ ++Eqn++ g +n+ll+ ++ +++ sp|Q2W0H3|MURG_MAGSA 95 PAAVIGFGGYASVPGMGAAALAGIPTAIHEQNAVLGRANRLLAGHVRRIA 144 ******************************************99988875 PP >> sp|Q0CKU4|ATG26_ASPTN Sterol 3-beta-glucosyltransferase OS=Aspergillus terreus (strain NIH 2624 / FGSC A1156) GN=atg # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 83.0 0.0 9.4e-25 5.3e-22 4 138 .. 903 1034 .. 900 1035 .. 0.89 Alignments for each domain: == domain 1 score: 83.0 bits; conditional E-value: 9.4e-25 E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++++++g+++ p+++d v++ +++++lke+ + + sp|Q0CKU4|ATG26_ASPTN 903 LTIGSRGDVQPYIALCKGLLAEGHRPKIATHAEFEPWIRKHGIDFAPVEGDpaelmricVENGM--FTYSFLKEASMK-------F 979 79**************************************************999994444444..899999999999.......8 PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + ++ ++ ++++ ++li++++a++ +++aE++ ip+++++++p+++++++ sp|Q0CKU4|ATG26_ASPTN 980 RGWIDDLLS--SAWRSCQDSDLLIESPSAMAGIHIAEALRIPYFRAFTMPWTRTRAY 1034 888888855..555666999*********************************9987 PP >> sp|B1ZU31|MURG_OPITP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 82.9 0.2 1e-24 5.6e-22 1 138 [. 4 141 .. 4 142 .. 0.95 Alignments for each domain: == domain 1 score: 82.9 bits; conditional E-value: 1e-24 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G++ P +Ala++Lq+rGh Vr l++++++++++ + l++ +++ ++ + ++ + + + ++l + +++ sp|B1ZU31|MURG_OPITP 4 FLISCGGTGGHLSPGIALAEGLQARGHSVRlLISHKKVDARLiaKYPRLDFTRVPGT-GFSL--HPVRLARFIGTQSRGLWFCRGLVRA 89 7899**************************************9444579*******9.8877..99999999999999*********** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 a+p+ vv+fgg+ ++ +++aa+++g+p+ ++E+n +pg + ++l+r+an+v+ sp|B1ZU31|MURG_OPITP 90 ARPAGVVAFGGFTSAGVVLAARWRGVPVALHEANRVPGRAIRVLSRFANRVY 141 **************************************************98 PP >> sp|A6L071|MURG_BACV8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 82.9 0.0 1e-24 5.6e-22 1 136 [. 7 144 .. 7 147 .. 0.96 Alignments for each domain: == domain 1 score: 82.9 bits; conditional E-value: 1e-24 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pav++a++ +++ +e + ++++ ++e + ++ag++++ +++ ++ +k lk+++ l++ k+ a++i+k sp|A6L071|MURG_BACV8 7 IIISGGGTGGHIFPAVSIANAIKEQHPEAEilfVGAEGRMEMQRvPAAGYPIKGLPVA-GFDRKN-LLKNVSVLFKLVKSQLLARKIIK 93 6899************************************98766*************.****99.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 ++kp++ vg+ggy++++ l a gip+ + Eqn+ +g++nkll+++a + sp|A6L071|MURG_BACV8 94 DFKPHAAVGVGGYASGPTLKMAGMMGIPTLIQEQNSYAGVTNKLLAKKACK 144 *********************************************999866 PP >> sp|Q1QNU3|MURG_NITHX UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 82.7 0.2 1.2e-24 6.6e-22 1 138 [. 7 143 .. 7 144 .. 0.86 Alignments for each domain: == domain 1 score: 82.7 bits; conditional E-value: 1.2e-24 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE....----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp....igpdvklwakleslktlkelaeglkalrkakeilk 85 ++la+gGT+G+++Pa Al++eL++r+ +Vrl+t + + +gl + ++++ +++ + l+ ++ + ++ a +++ sp|Q1QNU3|MURG_NITHX 7 ILLAAGGTGGHLFPAEALGVELMKRDLRVRLVTDSRALRY---SGLFSKDmtdvVPSE-TVRGRS-PLALARTGLMLATGTVVALNLMR 90 79****************************9999887777...455444422225555.556655.77777777777788999999*** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + kp++v+gfggy +++liaa+l gip++++++n+++g +n+ll+rr+n ++ sp|Q1QNU3|MURG_NITHX 91 RLKPAAVIGFGGYPTLPPLIAARLKGIPTVIHDANAVMGRANRLLSRRVNAIA 143 **************************************************986 PP >> sp|B2V7Y8|MURG_SULSY UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 82.1 0.0 1.8e-24 1e-21 1 139 [] 4 141 .. 4 141 .. 0.90 Alignments for each domain: == domain 1 score: 82.1 bits; conditional E-value: 1.8e-24 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 v ++ggGT+G+++Pa+++a+ L+++G ++ ++t++g+e++ ++++ ++ + ++ k ++++ +++ l +++k+ + +k+ sp|B2V7Y8|MURG_SULSY 4 VFISGGGTGGHFYPALSVAENLKEKGFSITyIGTTNGIENKKdfPADEKIL--YPMR-AVRGKS-IVGKIQGVFSLLSTTFKVYKQIKK 88 5789***********************************996444444444..5555.557777.99********************** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 +kpd ++ fggy + ++++a+ la++p++++Eqn+ip +nk+l+ +a++v++ sp|B2V7Y8|MURG_SULSY 89 EKPDFSICFGGYTSIPLGLASFLARVPLYIHEQNSIPSYSNKILSYFAKKVFI 141 *************************************************9985 PP >> sp|Q3AGT7|MURG_SYNSC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 82.1 0.1 1.9e-24 1e-21 2 138 .. 5 138 .. 4 139 .. 0.92 Alignments for each domain: == domain 1 score: 82.1 bits; conditional E-value: 1.9e-24 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++a+ GT+G+++Pa+A+a+++ + V +++p++le+++ e gl v g+ + + lk+l++l++ l a +++++++++ sp|Q3AGT7|MURG_SYNSC 5 LIAASGTGGHLFPALAVAEAVEDLW-LVSwVGVPDRLETQLvpERFGLVCVNAGGL---QG--RGLKKLLQLLRLLLASVSVRRAIRRN 87 799******************9996.8889**********9888889888666555...66..5699********************** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +d+v+ +ggy+a++a++aa+++ ip++++E+n+ipg v++ll r++ v+ sp|Q3AGT7|MURG_SYNSC 88 AIDAVFTTGGYIAAPAILAARWCCIPVVLHESNAIPGRVTRLLGRFCSAVA 138 ********************************************9998876 PP >> sp|Q5B4C9|ATG26_EMENI Sterol 3-beta-glucosyltransferase OS=Emericella nidulans GN=atg26 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 82.1 0.0 1.8e-24 1e-21 4 138 .. 901 1032 .. 898 1033 .. 0.89 Alignments for each domain: == domain 1 score: 82.1 bits; conditional E-value: 1.8e-24 E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----......S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd......vklwakleslktlkelaeglkalrkakei 83 +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++v+++g+++ p+++d +++ + ++++++lke+ ++ ++ sp|Q5B4C9|ATG26_EMENI 901 LTIGSRGDVQPYIALCKGLLAEGHKPKIATHAEFEPWVRKHGIDFAPVDGDpaelmrLCVENGMFTYSFLKEATAK-------FRG 979 79**************************************************888884444444788888888888.......999 PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + ++ ++++ ++ ++li++++a++ +++aE++ ip+++ +++p+ +++++ sp|Q5B4C9|ATG26_EMENI 980 WIDDLLSSAWRAC--QDSDLLIESPSAMAGIHIAEALRIPYFRGFTMPWSRTRAY 1032 9999977777776..8999*******************************99987 PP >> sp|A5GW69|MURG_SYNR3 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 81.7 0.0 2.5e-24 1.4e-21 2 138 .. 5 138 .. 4 139 .. 0.92 Alignments for each domain: == domain 1 score: 81.7 bits; conditional E-value: 2.5e-24 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+A+a++ + + Vr l++p++le+++ + ++ ++ ++ +l+ + l++lk+l + l++ ++++++++++ sp|A5GW69|MURG_SYNR3 5 LIAASGTGGHLFPALAVADRMPET-WSVRwLGVPDRLERQLVPSRYPLFTVRAG-GLQG--RGLRKLKQLIQLLWSAWPVTRLIRKQEC 89 799*****************9876.7***************7777777788888.7888..6699999999999999999********* PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +vv+ +ggy+a++a++aa+l++ p++++E+n+ipg v++l+ r++ +v+ sp|A5GW69|MURG_SYNR3 90 AVVFTTGGYIAAPAILAARLCRRPVVLHESNAIPGQVTRLFGRFCSRVA 138 ********************************************99986 PP >> sp|A4YZK3|MURG_BRASO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 82.6 0.6 1.3e-24 7.4e-22 1 138 [. 8 144 .. 8 145 .. 0.88 Alignments for each domain: == domain 1 score: 82.6 bits; conditional E-value: 1.3e-24 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++la+gGT+G+++Pa Al++eL +rG++Vrl+t + + +++ +++vp ++ +++ ++ ++++ + ++ +a+ ++++ sp|A4YZK3|MURG_BRASO 8 ILLAAGGTGGHLFPAEALGVELIKRGYRVRLVTDARALKYSglfTKDMIDVVPSETV---RSRS-PVALARTALLLGTGTLAAFNLMRR 92 79****************************999988776643346666666555544...6655.8999999999999*********** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kp++v+gfggy +++l+aa+lag+p ++++n++ g +n++l+ +++ ++ sp|A4YZK3|MURG_BRASO 93 LKPAAVIGFGGYPTVPPLLAARLAGVPSLIHDANAVLGRANRFLSAHVKAIA 144 *********************************************9998875 PP >> sp|Q2RVU4|MURG_RHORT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 82.5 1.3 1.3e-24 7.6e-22 1 136 [. 19 153 .. 19 156 .. 0.89 Alignments for each domain: == domain 1 score: 82.5 bits; conditional E-value: 1.3e-24 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++la+gGT+G+v+Pa Ala eL rrGh+ +l+t ++ + l+++ i ++ +++ ++ ++ l+ e + +a +l++ + sp|Q2RVU4|MURG_RHORT 19 IALAAGGTGGHVFPAEALAGELIRRGHKLTLITDKRGHVYGgTLGLLDTKRILAG-GVAGRG-VIGRLRGMIELAMGSLQAYGLLRRLR 105 79****************************8887777766657777899998888.777777.77777777777777************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 pdvvvgfggy++++ ++aa++++ p++v+Eqn++pg +n+ll+ r+ + sp|Q2RVU4|MURG_RHORT 106 PDVVVGFGGYASVPTMLAAIRLKLPTVVHEQNAVPGRANRLLAARVSR 153 ******************************************999876 PP >> sp|Q2JW21|MURG_SYNJA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 81.3 0.1 3.1e-24 1.8e-21 2 138 .. 15 147 .. 14 148 .. 0.93 Alignments for each domain: == domain 1 score: 81.3 bits; conditional E-value: 3.1e-24 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+A+ ++L + + + l++p +le+++ + ++ + ++ +w+ +++l +l + +a+ ++++il++ + sp|Q2JW21|MURG_SYNJA 15 LVAASGTGGHIFPALAVVEQLPTWQI--EwLGVPQRLEAKLVPDRYPLHRVAMS--GWQG-SPWQKLGSLVQLARATLQVRQILASGQF 98 799*******************9775..55***********9999999999999..5554.59************************** PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 dvv+ +ggy+a++ ++aa+++g+p+ ++E+n +pg+v+++l r++ v+ sp|Q2JW21|MURG_SYNJA 99 DVVLTTGGYIAAPTILAARSLGVPVLLHESNCLPGKVTRWLGRFCRLVA 147 ******************************************9998775 PP >> sp|A5EPK4|MURG_BRASB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 82.4 0.6 1.4e-24 8e-22 1 138 [. 8 144 .. 8 145 .. 0.88 Alignments for each domain: == domain 1 score: 82.4 bits; conditional E-value: 1.4e-24 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++la+gGT+G+++Pa Al++eL +rG++Vrl+t + + +++ +++vp ++ +++ ++ ++++ + ++ +a+ ++++ sp|A5EPK4|MURG_BRASB 8 ILLAAGGTGGHLFPAEALGVELIKRGYRVRLVTDARALRYSglfTKDMIDVVPSETV---RSRS-PVALARTALLLGTGTLAAFNLMRR 92 79****************************999988766533346666666555555...6655.8999999999999*********** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kp++v+gfggy +++l+aa+lag+p ++++n++ g +n++l+ +++ ++ sp|A5EPK4|MURG_BRASB 93 LKPAAVIGFGGYPTVPPLLAARLAGVPSLIHDANAVLGRANRFLSAHVKAIA 144 *********************************************9998875 PP >> sp|A7KAN4|ATG26_PENCW Sterol 3-beta-glucosyltransferase OS=Penicillium chrysogenum (strain ATCC 28089 / DSM 1075 / W # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 81.3 0.0 3.1e-24 1.8e-21 4 138 .. 889 1020 .. 886 1021 .. 0.91 Alignments for each domain: == domain 1 score: 81.3 bits; conditional E-value: 3.1e-24 E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++++++g+++ p+++d v++ +++++l+e+ + + sp|A7KAN4|ATG26_PENCW 889 LTIGSRGDVQPYIALCKGLLAEGHKPKIATHAEFEPWIRKHGIDFAPVDGDpaelmricVENGM--FTYSFLREASLK-------F 965 79**************************************************888884444444..888888888888.......8 PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + ++ ++ ++ g++ ++li++++a++ +++aE++ ip+++ +++p+++++++ sp|A7KAN4|ATG26_PENCW 966 RGWIDDL--LSSAWIGCQGSDLLIESPSAMAGIHIAEALRIPYFRGFTMPWTRTRAY 1020 8888877..78889***************************************9987 PP >> sp|Q2JJR4|MURG_SYNJB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 80.8 0.1 4.7e-24 2.7e-21 2 136 .. 15 145 .. 14 148 .. 0.91 Alignments for each domain: == domain 1 score: 80.8 bits; conditional E-value: 4.7e-24 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+A+a++L + ++++ l++p+++e ++ + ++ + + +w+ l+ l la+ +a+ +++++l + + sp|Q2JJR4|MURG_SYNJB 15 LVAASGTGGHIFPALAVAEQLPD--WQIEwLGVPDRMEGKLVRERYPLHRVVMS--GWQGS-PLHRLQALAQLARATLQVRRLLMSGRF 98 799******************96..55667***********8888999998888..45545.9999*********************** PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 d+v+ +ggy+a++a++aa+++g+p+ ++E+n ipg+v+++l r++ sp|Q2JJR4|MURG_SYNJB 99 DIVLTTGGYIAAPAILAARSLGVPVLLHESNWIPGKVTRWLGRFCQV 145 *****************************************998865 PP >> sp|A2QNQ5|ATG26_ASPNC Sterol 3-beta-glucosyltransferase OS=Aspergillus niger (strain CBS 513.88 / FGSC A1513) GN=atg # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 81.0 0.0 3.9e-24 2.2e-21 4 138 .. 902 1033 .. 899 1034 .. 0.90 Alignments for each domain: == domain 1 score: 81.0 bits; conditional E-value: 3.9e-24 E-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 4 aggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkak 81 +++G+rGdv+P++Al ++L ++Gh+ ++at+ ++e++v+++g+++ +++d v++ ++++++ke+ ++ + sp|A2QNQ5|ATG26_ASPNC 902 LTIGSRGDVQPYIALCKGLLAEGHRPKIATHAEFEPWVRKHGIDFALVDGDpaelmricVENGM--FTYSFFKEATAK-------F 978 79**************************************************999995555555..899999999999.......9 PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + + ++ ++++ +++++li++++a++ +++aE++ ip+++++++p+ +++++ sp|A2QNQ5|ATG26_ASPNC 979 RGWIDDLLSSAWKAC--QDTDLLIESPSAMAGIHIAEALRIPYFRAFTMPWSRTRAY 1033 999999966666665..9**********************************99987 PP >> sp|Q0AMW7|MURG_MARMM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 80.8 1.6 4.6e-24 2.6e-21 1 134 [. 6 138 .. 6 142 .. 0.89 Alignments for each domain: == domain 1 score: 80.8 bits; conditional E-value: 4.6e-24 EEEE-------HHHHHHHHHHHHH---EEEEEET.GGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatp.pgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 +++a+gGT+G+++Pa A a++L +rG++Vrl+t +gl++ + +++ +i + + + + lk + ++e +++ +a+ i+ ++k sp|Q0AMW7|MURG_MARMM 6 CLIAAGGTGGHMFPARAAAEALIARGWQVRLVTDaRGLRHATDFPAVAVDEIHAASPSTK--NPLKLARAALELTQGFAQARSIVGKWK 92 689***************************776615666666777777777888844444..69999999999999************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134 pdv++gfggy a +al a++ gi+ ++Eqn++ g vn++++ +a sp|Q0AMW7|MURG_MARMM 93 PDVIAGFGGYPAFPALAVARSMGIAFAIHEQNAVLGRVNRVFAAKA 138 *****************************************98776 PP >> sp|Q812Y1|MURG3_BACCR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 79.8 0.0 9.2e-24 5.2e-21 1 135 [. 5 137 .. 5 140 .. 0.94 Alignments for each domain: == domain 1 score: 79.8 bits; conditional E-value: 9.2e-24 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggGT+G+v + l ++ ++G++V+ +++++g+e+ + +++++ ++ ++ kl++++ ++++k++++ ++ ++ ++k+ sp|Q812Y1|MURG3_BACCR 5 ILFTGGGTAGHVMINIVLIPKFIEKGWRVEyIGSKNGIEKSL-VQNVKYNSVSTG-KLRRYW-DWDNFKDPFKIIRGCLQSYNLIKKT 89 79***************************************6.456777778888.89****.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 kpdv++++gg+v++++ i+a+l+++p+++ E ++ gl+nk+ +a+ sp|Q812Y1|MURG3_BACCR 90 KPDVIFSAGGFVSVPVAIGAWLNRVPIIIREPDSTLGLANKIALPFAT 137 *****************************************9877666 PP >> sp|B4SH49|MURG_PELPB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 80.2 1.5 7.1e-24 4e-21 1 138 [. 3 146 .. 3 147 .. 0.94 Alignments for each domain: == domain 1 score: 80.2 bits; conditional E-value: 7.1e-24 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----..S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd..vklwakleslktlkelaeglkalrkakei 83 v++aggGT+G+++Pa+A+a eL++ ++V ++t+ g+e++ + g+ + i+++ +++a + ++++ +a++ al +a ++ sp|B4SH49|MURG_PELPB 3 VLFAGGGTGGHLYPAIAMAGELRKLVPDVVisfVGTTGGIEATEvPRLGYRLHLIPVRglKRGRALADIVANIGVIADFVAALGRAAAL 91 79***************************************9988*********999977667777799******************** PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 ++++ pdvvvg+gg+v++++l+aa l + ++ + Eqn+ pg+++kll+ a v+ sp|B4SH49|MURG_PELPB 92 IAREAPDVVVGTGGFVSAPLLLAAQLMRKKTLIQEQNAFPGVTTKLLAALASEVH 146 *********************************************9988777665 PP >> sp|B4S6Q9|MURG_PROA2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 80.1 0.4 7.7e-24 4.3e-21 1 138 [. 3 146 .. 3 147 .. 0.90 Alignments for each domain: == domain 1 score: 80.1 bits; conditional E-value: 7.7e-24 EEEE-------HHHHHHHHHHHHH-..--EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCS...HHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrr..GheVr.latppgleefv.eeagleavpigpdvklwakleslktlke...laeglkalrkake 82 +++aggGT+G+++PavA+a++L + G V ++t++g+e++ + g+ + ++++ ++++ + ++++l + l+++ +a+ ka sp|B4S6Q9|MURG_PROA2 3 ILFAGGGTGGHLYPAVAMAERLEQLypGTTVAfVGTERGIEATEiPRLGYRLHLLDVR-GFRRGFSFSDMLNNagvLLDFVRAVVKAAG 90 79*********************983455555*********9999*************.99999855544444333789999******* PP HHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 83 ilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 i++ ++pdvvvg+gg+v++++l aa l g ++ + Eqn+ pg+++++l+ +a+ v+ sp|B4S6Q9|MURG_PROA2 91 IIRAEQPDVVVGTGGFVSGPLLAAAELMGRKTLIQEQNAFPGVTTRFLAAFATEVH 146 ****************************************************9997 PP >> sp|A8G2K3|MURG_PROM2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 80.0 0.0 7.8e-24 4.4e-21 2 135 .. 8 137 .. 7 141 .. 0.85 Alignments for each domain: == domain 1 score: 80.0 bits; conditional E-value: 7.8e-24 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+A+ +e+ ++ ++++ l+++ +l++ + ++++ +++ ++++ ++ ++ + + e++ ++++ +ilke+k+ sp|A8G2K3|MURG_PROM2 8 LVAASGTGGHIFPALAVSKEVEDK-WNIHwLGVKQRLDSNLIPKKYNLRTLSIKTPRKN-IFLFYQYIEILMS---TFQIIRILKEKKI 91 799******************887.6999************666777777777733444.4455555555555...8************ PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 ++v+ +ggy++++ +ia+++++ip++++E+n ipg+v+k++ +n sp|A8G2K3|MURG_PROM2 92 NLVFTTGGYISAPTIIASKFLRIPVIIHESNLIPGMVTKYFGFLCN 137 ***************************************9976665 PP >> sp|Q89FU7|MURG_BRAJA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 79.6 0.2 1e-23 5.9e-21 1 137 [. 7 142 .. 7 144 .. 0.90 Alignments for each domain: == domain 1 score: 79.6 bits; conditional E-value: 1e-23 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++la+gGT+G+++Pa Al++eL rrG +Vrl+t ++ + ++ +++v+ ++ ++++ ++ + ++la+g + +a ++k+ sp|Q89FU7|MURG_BRAJA 7 ILLAAGGTGGHLFPAEALGVELIRRGFRVRLVTDERALRYSglfSKDMIDVVSSETA-RGRNPFQVAYAGLTLAAG---TLSAYSLIKR 91 79****************************999998766533357888888887777.888888777777888888...********** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kp +vvgfggy +++l+aa++ag+p +++++n++ g +n++l+ r+ + sp|Q89FU7|MURG_BRAJA 92 LKPVAVVGFGGYPTLPPLVAAKFAGVPGIIHDANAVLGRANRFLSSRVRAI 142 ***********************************************9876 PP >> sp|A0RHC3|MURG1_BACAH UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylgl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 79.2 0.0 1.5e-23 8.3e-21 1 130 [. 5 132 .. 5 138 .. 0.96 Alignments for each domain: == domain 1 score: 79.2 bits; conditional E-value: 1.5e-23 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggGT+G+v + l +++ +G+ V+ +++++g+e+ +++++ +i ++ kl++++ ++++k++++ k+ ++ +++k+ sp|A0RHC3|MURG1_BACAH 5 ILFTGGGTAGHVMINMVLIPKFMGKGWGVEyIGSQNGIEKL-LVQNVKYNSISTG-KLRRYW-DWENFKDPFKIIKGCIQSYKLMKRI 89 79***********************************9999.566788999****.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130 kpdv++++gg+v+++++i+a+ +++p+++ E ++ gl+nk+ sp|A0RHC3|MURG1_BACAH 90 KPDVIFSAGGFVSVPVVIGAWMNKVPVIIREPDSTLGLANKIA 132 ****************************************985 PP >> sp|Q6MBS7|MURG_PARUW UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 79.2 0.0 1.5e-23 8.3e-21 1 135 [. 5 140 .. 5 144 .. 0.87 Alignments for each domain: == domain 1 score: 79.2 bits; conditional E-value: 1.5e-23 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+++Pa la+eL ++ + l + gl + + +++++ + +l +k +k lk +++ l+++ ++ +i+++ sp|Q6MBS7|MURG_PARUW 5 FMITAGGTGGHIFPAQGLAQELIKKTYSSSiLFVAGGLSTNKyfDRSIFPFQEVSAS-PLFSKN-PFKLLKGVFNLLRGVWQSIRIIRK 91 789***********************9998855555554443367777777777777.555555.9*********************** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +kpdvvvgfg+y+ +++l+aa+ ++ip++++E+n+ipg++nk+l+ a sp|Q6MBS7|MURG_PARUW 92 FKPDVVVGFGSYYTVPPLLAAKILRIPIVLHEANSIPGKANKWLASMAW 140 *******************************************987765 PP >> sp|Q0BXU2|MURG_HYPNA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 78.9 0.5 1.7e-23 9.7e-21 1 138 [. 10 146 .. 10 147 .. 0.82 Alignments for each domain: == domain 1 score: 78.9 bits; conditional E-value: 1.7e-23 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE.----S-.-----.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp.igpdvk.lwakleslktlkelaeglkalrkakeilkea 87 v++a+gGT+G+++Pa A+a+e ++rG++ l++ + + + + ++ i++ + +++ ++ + +++ + ++ +a++++k++ sp|Q0BXU2|MURG_HYPNA 10 VIIAAGGTGGHMFPARAFADEMRARGWNTALISDSRGLRYAADFPADWKEeIEAASPnFRKP---WTVPGAALKINAGIARARRLMKQH 95 689***************************77666555555555555444455443305554...5566666666666*********** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +p++v+gfggy a +al aa+++g+p++++Eqn++ g vn+ ++++a v+ sp|Q0BXU2|MURG_HYPNA 96 RPALVAGFGGYPAFPALAAARRLGVPIIIHEQNAVLGRVNRQFAKHAQLVA 146 ********************************************9998875 PP >> sp|Q8KGD4|MURG_CHLTE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 79.3 0.3 1.3e-23 7.5e-21 1 138 [. 3 146 .. 3 147 .. 0.90 Alignments for each domain: == domain 1 score: 79.3 bits; conditional E-value: 1.3e-23 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCS....HHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlke....laeglkalrkak 81 v++aggGT+G+++P vA+a eL++r + + +t+ g+e++ + g+ v +++ +l++ l s+++l+e l ++ k+l a+ sp|Q8KGD4|MURG_CHLTE 3 VLFAGGGTGGHLYPGVAMAAELKKRVPGISisfAGTSAGIEATEvPRLGYRLVLFPVR-GLKRGL-SIRALVEnaliLGDFAKSLSMAM 89 79***********************999997788999***99888*************.777776.55555442222778889999*** PP HHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +++++++pdvvvg+ggyv++++l+aa l+g ++ + Eqn+ pg++++ll+r a+ v+ sp|Q8KGD4|MURG_CHLTE 90 ALVRKEQPDVVVGTGGYVSAPLLLAAQLSGKKTLIQEQNAFPGVTTRLLARMATEVH 146 *****************************************************9987 PP >> sp|B3QLW4|MURG_CHLP8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 79.3 0.1 1.4e-23 7.7e-21 1 138 [. 3 146 .. 3 147 .. 0.88 Alignments for each domain: == domain 1 score: 79.3 bits; conditional E-value: 1.4e-23 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----.....S------.-HHHCCSHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd.....vklwakleslktlkelaeglkalrka 80 v++aggGT+G+++P vA+a eL++ + V+ +tp g+e++ + g++ + ++++ l+ + +++ l +++ +l +a sp|B3QLW4|MURG_CHLP8 3 VLFAGGGTGGHLYPGVAMASELKKVVPGVEisfAGTPAGIEATEvPRLGYPLHLLPVRglkrgRSLR---DLAANVGVLKDFGSSLMQA 88 79***********************9999988889*****99988*************754443333...344555666677777**** PP HHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 81 keilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + i+++++p+vvvg+ggyv++++l+aa l+g ++ + Eqn+ pg++++ l+r a v+ sp|B3QLW4|MURG_CHLP8 89 FSIIRKETPNVVVGTGGYVSAPLLLAAQLSGCKTLIQEQNAFPGVTTRMLARMASEVH 146 ***************************************************9998887 PP >> sp|A6T2F8|MURG_JANMA UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 78.7 0.1 2e-23 1.1e-20 2 138 .. 5 141 .. 4 142 .. 0.97 Alignments for each domain: == domain 1 score: 78.7 bits; conditional E-value: 2e-23 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 v+++ GT+G+++P +A+a++ ++rG++V l+t+ g+e+++ ++ag+e+ i+ +l+ k+ +t++ +++ ++ + ilk+ + sp|A6T2F8|MURG_JANMA 5 VIMAAGTGGHIFPGLAIAETMKARGWQVSwLGTSHGMERELvPKAGVEMDIIEFS-GLRGKG-LQHTITGAFKLVASFATCFSILKRRN 91 7899***************************************************.******.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p +v+g+ggyv ++ + a+l+g+p+++ ++++ +l+nk+l+ a++vl sp|A6T2F8|MURG_JANMA 92 PGIVLGMGGYVTVPGGWMAKLRGVPVVLVNADAALLLSNKTLMPVAERVL 141 ******************************************99998886 PP >> sp|A5CEL6|MURG_ORITB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 78.5 0.0 2.4e-23 1.4e-20 1 138 [. 4 140 .. 4 141 .. 0.89 Alignments for each domain: == domain 1 score: 78.5 bits; conditional E-value: 2.4e-23 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeak 88 + l+ggGT+G+++Pa+Al++eLq+rG++V l+t ++e+ + + +++++ i v + +k+l + l a ++++ +++ sp|A5CEL6|MURG_ORITB 4 IFLVGGGTGGHLFPAIALGEELQERGYNVYLITDTRCEKYLLNFNYSFKIhIMNMVSISN--TGIKKLYAYIRILAACITGFKLVYSNS 90 679*********************************************764222245556..45777777777788899999******* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p ++v+fggy ++++i+ +l +ip +++Eqn++ gl+n+l+ r+a+ + sp|A5CEL6|MURG_ORITB 91 PSLIVAFGGYTIAPIIINGILFRIPFILHEQNSVLGLANRLFLRYAKAIT 140 **********************************************9875 PP >> sp|Q8D2Z6|MURG_WIGBR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 78.6 0.0 2.2e-23 1.2e-20 1 133 [. 8 140 .. 8 146 .. 0.95 Alignments for each domain: == domain 1 score: 78.6 bits; conditional E-value: 2.2e-23 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++++ggG++G+v+ +++a++L + G e+ +++++++e+ + +++++++++i++ +++ + + +l +l + ++ k+k+++k + sp|Q8D2Z6|MURG_WIGBR 8 IIITGGGSGGHVFVGLSIAEQLIKIGCEILwIGSSDRIESYLiPKSNIKIYKINVI-GFNGNN-IFLKLISLIKTAYSILKIKKLIKYY 94 689****************************************************9.999988.999999999999************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133 kpd+v+++ggyv+ + ia++ +++p++++Eqn++pgl+n +l + sp|Q8D2Z6|MURG_WIGBR 95 KPDIVLSIGGYVSFPGAIATWISKVPLIIHEQNSVPGLSNYILYKL 140 ****************************************988765 PP >> sp|B0UFC7|MURG_METS4 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 77.7 1.0 4.2e-23 2.4e-20 1 134 [. 8 140 .. 8 145 .. 0.86 Alignments for each domain: == domain 1 score: 77.7 bits; conditional E-value: 4.2e-23 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 v+la+gGT+G+++Pa Ala +L++rG++V la+ ++e+ e+v+i++ ++ + l+ ++ ++++ +a +++++ + sp|B0UFC7|MURG_METS4 8 VLLAAGGTGGHLFPAEALALRLRDRGIRVVLASDGRVEALSgGFPASEIVSIPSATPSGR--SPLARGAAFLTLGRGFAAAIRAVRRLN 94 79***********************************99976555556666777755555..445555555555566************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134 p+vvvgfggy +++l+aa +++p+ ++Eqn+++g +n +l+r a sp|B0UFC7|MURG_METS4 95 PAVVVGFGGYPTVPPLLAAQMLRVPTLLHEQNAVMGRANGFLARGA 140 ***************************************9998765 PP >> sp|Q163J0|MURG_ROSDO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 77.8 0.5 3.9e-23 2.2e-20 2 137 .. 2 137 .. 1 139 [. 0.96 Alignments for each domain: == domain 1 score: 77.8 bits; conditional E-value: 3.9e-23 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++a+gGT+G+++Pa Ala++ +rG++V+l t + ++ + + ++++i + ++++ + ++++ +++ + ++ +a ++++++ sp|Q163J0|MURG_ROSDO 2 LIAAGGTGGHMFPAQALAEAMLNRGWRVKLTTDARGARYTggFPHSTQIEEISSA-TFARGG-IAAKIVAPFKIGAGVLRALLSFRRDR 88 79*********************************9999977778889999****.****99.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p+vvvgfggy +al aa l + p+ ++Eqng+ g vn +++ r++ + sp|Q163J0|MURG_ROSDO 89 PAVVVGFGGYPTIPALAAAFLMKLPRMIHEQNGVLGRVNTAFASRVDAI 137 *********************************************9987 PP >> sp|A4G8T8|MURG_HERAR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 77.0 0.1 6.9e-23 3.9e-20 2 138 .. 5 141 .. 4 142 .. 0.97 Alignments for each domain: == domain 1 score: 77.0 bits; conditional E-value: 6.9e-23 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++ GT+G+++P +A+a++ q+rG+eV+ l+t+ g+e+ + +++g+++ +i +l+ k+ +t++ +++ l ++ + il++ k sp|A4G8T8|MURG_HERAR 5 LIMAAGTGGHIFPGLAIADTMQARGWEVTwLGTEHGMERDLvPKSGIAMDTISFA-GLRGKG-LRHTVTGVLRLLASFGTCFSILARRK 91 68999***********************************99*************.******.9************************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p vv+g+ggyv ++ + a+l+g+p+++ ++++ +l+nk+l a +vl sp|A4G8T8|MURG_HERAR 92 PGVVLGMGGYVTVPGGWMAKLRGVPLVLLNADAALLLSNKALTPIAQRVL 141 ****************************************9999888876 PP >> sp|Q28NN5|MURG_JANSC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 77.6 1.1 4.4e-23 2.5e-20 2 137 .. 7 142 .. 6 144 .. 0.97 Alignments for each domain: == domain 1 score: 77.6 bits; conditional E-value: 4.4e-23 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++a+gGT+G+++Pa Al ++ r+G++V+l t + ++ v ++ +e++++ + ++ + + l++l +++ + ++ a++ + ++k sp|Q28NN5|MURG_JANSC 7 IIAAGGTGGHMFPAQALSEAMLRKGWRVTLSTDARGARYVggFSHAVEIREVSSA-TFTRGG-ALAKLAVPFRIFGGVLTATARMLREK 93 689*************************************999************.****99.************************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 pdvvvgfggy +a+ aa+l g p+ ++Eqng+ g vn+++++++ v sp|Q28NN5|MURG_JANSC 94 PDVVVGFGGYPTIPAMAAARLTGRPRMLHEQNGVLGRVNRVFAKHVAHV 142 *******************************************998766 PP >> sp|Q31CY4|MURG_PROM9 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 77.6 0.0 4.3e-23 2.4e-20 2 135 .. 8 137 .. 7 141 .. 0.85 Alignments for each domain: == domain 1 score: 77.6 bits; conditional E-value: 4.3e-23 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+A+ +e+ + +++++ l++ +l++ ++++ ++++++++ +++++ + + e++ ++++ +ilke+k+ sp|Q31CY4|MURG_PROM9 8 LVAASGTGGHIFPALAVSKEVED-EWNIHwLGVRQRLDANFIPKKYNLRTLNIKTP-RKNIFLFYQYIEILIS---TFQIIRILKEKKI 91 799*****************976.57***********9988777777777777733.4434466666666666...9************ PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 ++v+ +ggy++++ ++a++l++ip++++E+n ipg+v+k++ +n sp|Q31CY4|MURG_PROM9 92 NLVFTTGGYISAPTIVASKLLRIPIIIHESNVIPGMVTKYFGFLCN 137 ***************************************9976665 PP >> sp|B1ZGP4|MURG_METPB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 77.3 1.4 5.6e-23 3.2e-20 1 133 [. 8 139 .. 8 145 .. 0.90 Alignments for each domain: == domain 1 score: 77.3 bits; conditional E-value: 5.6e-23 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 v++ +gGT+G+++Pa +la +L++rG++V lat ++++ e+v+i++ ++ + +l+ ++ ++++ +a +++++ + sp|B1ZGP4|MURG_METPB 8 VLVCAGGTGGHLFPAQSLAYALKARGIRVALATDARVDSIAgDFPAEEIVTIASATPSGR--SMLRRAGAVLTLGRGFGQAARAVRRLN 94 6899*********************************99887666667777888766677..688888888888888************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133 p++vvgfggy +++++aa l+++p++++Eqn+++g +n +l++ sp|B1ZGP4|MURG_METPB 95 PAAVVGFGGYPTVPPMLAAQLLRVPTILHEQNAVMGRANGFLAKG 139 ***************************************998875 PP >> sp|Q5LU63|MURG_SILPO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 78.3 0.6 2.7e-23 1.5e-20 2 137 .. 7 142 .. 6 144 .. 0.91 Alignments for each domain: == domain 1 score: 78.3 bits; conditional E-value: 2.7e-23 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++a+gGT+G+++Pa Ala++ r+G++Vrl t + ++ + + e+ ++ + ++++ + l++ + + + ++ ++ +++++ sp|Q5LU63|MURG_SILPO 7 MIAAGGTGGHMFPAQALAEAMLRKGWRVRLSTDARGARYTggFPHTTEISQVSSA-TFARGG-ILAKAMVAPRIAAGIAATAWEMRRDR 93 689**********************************999443444444458888.999999.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 pdvvvgfggy + +al+aa+l++ p+ ++Eqng+ g vn+l++rr+ v sp|Q5LU63|MURG_SILPO 94 PDVVVGFGGYPSIPALGAATLLRLPRMIHEQNGVLGRVNQLFARRVACV 142 *********************************************9877 PP >> sp|B3CRE9|MURG_ORITI UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 77.5 0.0 4.8e-23 2.7e-20 1 138 [. 4 140 .. 4 141 .. 0.89 Alignments for each domain: == domain 1 score: 77.5 bits; conditional E-value: 4.8e-23 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeak 88 + l+ggGT+G+++Pa+Al++eLq+rG++V l+t ++e+ + +++++++ i v + +k+l + l a ++++ +++ sp|B3CRE9|MURG_ORITI 4 IFLVGGGTGGHLFPAIALGEELQERGYNVYLITDTRCEKYLLNSNYSFKIhIMNMVSISN--TGIKKLYAYIRILAACITGFKLVYSNS 90 679*********************************************664222235556..45777777777888899999******* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p ++v fggy ++++i+ +l +ip +++Eqn++ gl+n+l+ r+a+ + sp|B3CRE9|MURG_ORITI 91 PGLIVTFGGYTIAPIIINGILFKIPFILHEQNSVLGLANRLFLRYAKAIT 140 **********************************************9875 PP >> sp|Q1GIV1|MURG_SILST UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 77.7 0.6 4.2e-23 2.4e-20 2 137 .. 7 142 .. 6 144 .. 0.90 Alignments for each domain: == domain 1 score: 77.7 bits; conditional E-value: 4.2e-23 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++a+gGT+G+++Pa Ala++ r+G++V+l t p+ ++ + + e+ ++ + ++++ + l++ + + + ++ ++ + +++++ sp|Q1GIV1|MURG_SILST 7 LMAAGGTGGHMFPAQALAEAMLRKGWRVKLSTDPRGARYTggFPHMTEITEVSSA-TFARGG-LLAKAMVAPRIAAGVASMAMQMRRDR 93 79*************************************9644455566668888.999999.7777777778889************* PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 pdvv+gfggy + +al+aa+l+g p+ ++Eqng+ g+vn+ ++ r+ v sp|Q1GIV1|MURG_SILST 94 PDVVIGFGGYPSIPALGAATLLGLPRMIHEQNGVLGKVNQKFATRVAEV 142 ****************************************999988766 PP >> sp|Q1GZ01|MURG_METFK UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 76.6 0.3 9.1e-23 5.1e-20 2 138 .. 6 142 .. 5 143 .. 0.95 Alignments for each domain: == domain 1 score: 76.6 bits; conditional E-value: 9.1e-23 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++ GT+G+v P +A+a++ q rG++V+ l+t+ g+e+++ + +gl++ ++ + + k+ +tl+ ++ a+ +a ++++e + sp|Q1GZ01|MURG_METFK 6 LIMAAGTGGHVMPGLAIAKTMQSRGWNVHwLGTTHGMENRLvPPSGLPMTLLKFS-GMRGKG-WKHTLLGMFRLVGATWRAWRLMRELQ 92 68999*************************************************9.888888.888888888888888999999***** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 p++v+g+ggyv ++ + aa+lag+p+ + ++++ +++n++l ++a++vl sp|Q1GZ01|MURG_METFK 93 PQAVLGMGGYVTVPGGWAARLAGVPLAIVNADAALLMSNRALVKHAKRVL 142 ***********************************************997 PP >> sp|B3ET95|MURG_AMOA5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 76.0 0.0 1.4e-22 7.8e-20 1 137 [. 3 143 .. 3 145 .. 0.92 Alignments for each domain: == domain 1 score: 76.0 bits; conditional E-value: 1.4e-22 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------..-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakle.slktlkelaeglkalrkakeil 84 v+++ggGT+G+v+P +A+a+ L+++ e +++ ++e ++ag+++v ++++ + ++kl+ +k+l + +l +l k+k+i+ sp|B3ET95|MURG_AMOA5 3 VIISGGGTGGHVYPGIAIADVLKQKNAENQilfVGAGGKMEMSQvPAAGYPIVGLPIR-GINRKLKyIWKNLALPIWVLISLWKVKRII 90 6899********************9999888899******86555*************.7777663278999999999999******** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 k++kp+vv+g+ggy+ + ++ a++ +ip+++ Eqn+ +g++n+ll+++a ++ sp|B3ET95|MURG_AMOA5 91 KDFKPNVVIGTGGYAGFPTIYMAARMHIPIVLQEQNAYAGVANRLLAKYAHKI 143 *************************************************9987 PP >> sp|Q8A258|MURG_BACTN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 75.4 0.0 2.2e-22 1.2e-19 1 137 [. 7 145 .. 7 147 .. 0.97 Alignments for each domain: == domain 1 score: 75.4 bits; conditional E-value: 2.2e-22 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G+++Pav++a++ + ++ + ++++ ++e + + ag+++ +++ ++ +k +k+++ l + ++ ka+ i+k sp|Q8A258|MURG_BACTN 7 IIISGGGTGGHIFPAVSIANAIIELRPDAKilfVGAEGRMEMQRvPDAGYKIIGLPIA-GFDRKH-LWKNVSVLIKLARSQWKARSIIK 93 6899************************************98766*************.****98.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +++p+v vg+ggy++++ l a g+p+ + Eqn+ +g++nkll+++a+ + sp|Q8A258|MURG_BACTN 94 NFRPQVAVGVGGYASGPTLKTAGMMGVPTLIQEQNSYAGVTNKLLAQKAKAI 145 ***********************************************99976 PP >> sp|Q211T8|MURG_RHOPB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 76.5 0.3 9.7e-23 5.5e-20 1 138 [. 8 144 .. 8 145 .. 0.90 Alignments for each domain: == domain 1 score: 76.5 bits; conditional E-value: 9.7e-23 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE....----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp....igpdvklwakleslktlkelaeglkalrkakeilk 85 ++la+gGT+G+++Pa Al+++L++rG +Vrl+t + + +gl + ++++ +l+ + ++ +++++ + ++ a ++ sp|Q211T8|MURG_RHOPB 8 IMLAAGGTGGHLFPAEALGVALMKRGLRVRLVTDMRALRY---SGLFSRDmvdvVPSE-TLRGRS-PVALARTALKLGTGTLMALSLML 91 68*******************************9887777...455444443357777.888877.9999******************* PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + kp++v+gfggy +++l+aa+ gip+ v+++n+++g +n++l+ +++ ++ sp|Q211T8|MURG_RHOPB 92 RLKPAAVIGFGGYPTLPPLLAARMFGIPTLVHDSNAVMGRANRFLSHKVTAIA 144 ***********************************************999875 PP >> sp|Q2IYK8|MURG_RHOP2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 76.5 0.5 9.8e-23 5.5e-20 1 137 [. 7 142 .. 7 144 .. 0.86 Alignments for each domain: == domain 1 score: 76.5 bits; conditional E-value: 9.8e-23 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++la+gGT+G+++Pa Al++ L++rG +Vrl+t + ++ ++ +++vp ++ + + ++ ++ + + ++ ka +++ + sp|Q2IYK8|MURG_RHOP2 7 ILLAAGGTGGHLFPAEALGVVLMKRGLRVRLVTDSRAMRYSglfSADMIDVVPSETV---RGRT-PWALARTGLMLGAGTAKALALMLR 91 79****************************999998887743345666666665555...4444.777777778888889********* PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kp++vvgfggy +++l+aa++++ip+ ++++n+++g +n+ll++ ++ + sp|Q2IYK8|MURG_RHOP2 92 LKPAAVVGFGGYPTLPPLFAARALRIPTLIHDSNAVMGRANRLLSKGVTAI 142 *********************************************988876 PP >> sp|B1LXZ4|MURG_METRJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 76.9 0.9 7.2e-23 4.1e-20 1 137 [. 8 143 .. 8 145 .. 0.93 Alignments for each domain: == domain 1 score: 76.9 bits; conditional E-value: 7.2e-23 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++l +gGT+G+++Pa +la++L++rG++V lat ++++ e e+v+i++ ++ + lk ++ ++++ a + +++ + sp|B1LXZ4|MURG_METRJ 8 ILLCAGGTGGHLFPAESLAHALRARGIRVALATDARVDSIAsEFPASEVVTIASATPSGR--SPLKRAGAVLTLGRGFGVAAKEIRRIN 94 7899***********************************998888899999999977777..578888888888888************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p+++vgfggy +++++a +++p++++Eqn+++g +n +l+r a ++ sp|B1LXZ4|MURG_METRJ 95 PAAIVGFGGYPTVPPVLAGQILRVPTILHEQNAVMGRANAFLARGARTI 143 ******************************************9988766 PP >> sp|A2BNZ2|MURG_PROMS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 76.0 0.0 1.4e-22 7.8e-20 2 135 .. 8 137 .. 7 141 .. 0.89 Alignments for each domain: == domain 1 score: 76.0 bits; conditional E-value: 1.4e-22 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+A+ +e+ + +++++ l+++ +l++ + ++++ ++++++++ ++ + +++ +k l + +++ +ilke+k+ sp|A2BNZ2|MURG_PROMS 8 LVAASGTGGHIFPALAVSKEVED-EWNIHwLGIQQRLDANLIPQKYNLKTLNLKTPRKNIFLFYQYIKILMST----FQIIRILKEKKI 91 799*****************976.57***************88888888899886677766667777766666....************ PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 ++v+ +ggy++++ ++a++ ++ip++++E+n +pg+v+k++ +n sp|A2BNZ2|MURG_PROMS 92 NLVFTTGGYISAPTIVASKILKIPIIIHESNVVPGMVTKYFGFLCN 137 ***************************************9976665 PP >> sp|C0R2W7|MURG_WOLWR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 75.7 0.0 1.8e-22 9.9e-20 1 137 [. 3 130 .. 3 132 .. 0.84 Alignments for each domain: == domain 1 score: 75.7 bits; conditional E-value: 1.8e-22 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++la+gGT+G+++Pa+Ala++L+++G++ +l t ++ + + e++ l+ + ++ k++ + + +++ ++ + +++ sp|C0R2W7|MURG_WOLWR 3 IILATGGTGGHIFPAIALAKALKTQGYNCILFTDKKTNKNTdiESYTLPLRRPSSN-KFKF--FLFLIYSSMLAL--------YQVRKL 80 78*******************************99988886556666666666655.4444..444444444444........788999 PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kp+ v+gfg+y++ + l+aa+ + ip++++Eqn + g vn+++ + a+ + sp|C0R2W7|MURG_WOLWR 81 KPKSVIGFGSYASFPTLLAARVLSIPIILHEQNTVLGRVNRFFFKSAKLI 130 ******************************************99988876 PP >> sp|Q73I55|MURG_WOLPM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 75.7 0.0 1.8e-22 9.9e-20 1 137 [. 3 130 .. 3 132 .. 0.84 Alignments for each domain: == domain 1 score: 75.7 bits; conditional E-value: 1.8e-22 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 ++la+gGT+G+++Pa+Ala++L+++G++ +l t ++ + + e++ l+ + ++ k++ + + +++ ++ + +++ sp|Q73I55|MURG_WOLPM 3 IILATGGTGGHIFPAIALAKALKTQGYNCILFTDKKTNKNTdiESYTLPLRRPSSN-KFKF--FLFLIYSSMLAL--------YQVRKL 80 78*******************************99988886556666666666655.4444..444444444444........788999 PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 kp+ v+gfg+y++ + l+aa+ + ip++++Eqn + g vn+++ + a+ + sp|Q73I55|MURG_WOLPM 81 KPKSVIGFGSYASFPTLLAARVLSIPIILHEQNTVLGRVNRFFFKSAKLI 130 ******************************************99988876 PP >> sp|A9VWV3|MURG_METEP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 75.2 1.3 2.5e-22 1.4e-19 1 133 [. 8 139 .. 8 145 .. 0.83 Alignments for each domain: == domain 1 score: 75.2 bits; conditional E-value: 2.5e-22 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S-.-----.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvk.lwakleslktlkelaeglkalrkakeilkea 87 v++ +gGT+G+++Pa +la +L++rG++V lat ++++ e+v+i++ ++ +++ l+ +++++l +g + +a +++++ sp|A9VWV3|MURG_METEP 8 VLVCAGGTGGHLFPAQSLAYALKDRGIRVALATDARVDSIAgDFPAEEIVTIASATPsGRSVLRRAGAVVTLGRG---FGQAARAVRRL 93 6899********************************998776544555555665544044445555555555555...*********** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133 +p++vvgfggy +++++aa l+++p++++Eqn+++g +n +l++ sp|A9VWV3|MURG_METEP 94 NPAAVVGFGGYPTVPPMLAAQLLRVPTILHEQNAVMGRANGFLAKG 139 ****************************************998875 PP >> sp|B7KSC1|MURG_METC4 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 75.2 1.3 2.5e-22 1.4e-19 1 133 [. 8 139 .. 8 145 .. 0.83 Alignments for each domain: == domain 1 score: 75.2 bits; conditional E-value: 2.5e-22 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S-.-----.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvk.lwakleslktlkelaeglkalrkakeilkea 87 v++ +gGT+G+++Pa +la +L++rG++V lat ++++ e+v+i++ ++ +++ l+ +++++l +g + +a +++++ sp|B7KSC1|MURG_METC4 8 VLVCAGGTGGHLFPAQSLAYALKDRGIRVALATDARVDSIAgDFPAEEIVTIASATPsGRSVLRRAGAVVTLGRG---FGQAARAVRRL 93 6899********************************998776544555555665544044445555555555555...*********** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133 +p++vvgfggy +++++aa l+++p++++Eqn+++g +n +l++ sp|B7KSC1|MURG_METC4 94 NPAAVVGFGGYPTVPPMLAAQLLRVPTILHEQNAVMGRANGFLAKG 139 ****************************************998875 PP >> sp|A2C027|MURG_PROM1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 75.7 0.0 1.7e-22 9.5e-20 2 138 .. 5 138 .. 4 139 .. 0.95 Alignments for each domain: == domain 1 score: 75.7 bits; conditional E-value: 1.7e-22 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 ++a+ GT+G+++Pa+++a+ L + V l++p++le ++ ++++ +++++ +l+ + +++l +l + l a ++ +l+++k++ sp|A2C027|MURG_PROM1 5 LIAASGTGGHIYPALSFADSLSNSWEIVWLGVPNRLEVELVPEKYNLIKLKVG-GLQG--NIFRKLFDLCKLLFASVQVSVLLRQKKIN 90 799********************998888********9998888899999999.9999..89*************************** PP HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 v++ +ggy++++ +++a+ agip+ ++E+n+ipg+v++ll r+++ v+ sp|A2C027|MURG_PROM1 91 VIFTTGGYISAPCILGAKMAGIPVLLHESNAIPGKVTRLLGRFCDHVA 138 *******************************************99886 PP >> sp|A3PHS8|MURG_RHOS1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 73.9 0.7 6.3e-22 3.6e-19 2 137 .. 7 142 .. 6 144 .. 0.95 Alignments for each domain: == domain 1 score: 73.9 bits; conditional E-value: 6.3e-22 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++a+gGT+G+++Pa Ala++ rrG++V+l t + ++ + +e++++ + ++++ + l++ + +++ ++ +a + + +++ sp|A3PHS8|MURG_RHOS1 7 LIAAGGTGGHMFPAQALAEAMVRRGWRVKLSTDARGARYAggFPHVVEIEEVSSA-TFARGG-PLAKALVPLRIAGGVASAVAGFLRDR 93 79********************************99999977778899999***9.****99.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p vvvgfggy + +al aa +++ p+ ++Eqng+ g vn+l++ r+ v sp|A3PHS8|MURG_RHOS1 94 PSVVVGFGGYPSIPALSAAVALRLPRMIHEQNGVLGRVNRLFAPRVQAV 142 ******************************************9999876 PP >> sp|A4SH02|MURG_PROVI UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 74.2 1.2 4.9e-22 2.8e-19 1 138 [. 3 146 .. 3 147 .. 0.90 Alignments for each domain: == domain 1 score: 74.2 bits; conditional E-value: 4.9e-22 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----..S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd..vklwakleslktlkelaeglkalrkakei 83 +++aggGT+G+++PavA+a+e+qr + +t++g+e++ + g+ + ++++ ++++ ++ +++ +a++ al +a ++ sp|A4SH02|MURG_PROVI 3 ILFAGGGTGGHLYPAVAMAEEVQRMVPGASvlfAGTSRGIEAREvPRLGYRLHLLEVRglRRGRSLKDMAANIGIAADFAAALASAVAL 91 79**********************86655554789******9999*******999999664445555789999999************* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +++++pdvvvg+gg+v++++l+aa l+g ++ + Eqn+ pg++++ll+ a+ v+ sp|A4SH02|MURG_PROVI 92 VRRERPDVVVGTGGFVSAPVLFAAQLLGKKTLIQEQNAFPGVTTRLLSALATEVH 146 ************************************************9999887 PP >> sp|Q3J4M2|MURG_RHOS4 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 73.9 0.7 6.3e-22 3.6e-19 2 137 .. 7 142 .. 6 144 .. 0.95 Alignments for each domain: == domain 1 score: 73.9 bits; conditional E-value: 6.3e-22 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++a+gGT+G+++Pa Ala++ rrG++V+l t + ++ + +e++++ + ++++ + l++ + +++ ++ +a + + +++ sp|Q3J4M2|MURG_RHOS4 7 LIAAGGTGGHMFPAQALAEAMVRRGWRVKLSTDARGARYAggFPHVVEIEEVSSA-TFARGG-PLAKALVPLRIAGGVASAVAGFLRDR 93 79********************************99999977778899999***9.****99.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p vvvgfggy + +al aa +++ p+ ++Eqng+ g vn+l++ r+ v sp|Q3J4M2|MURG_RHOS4 94 PSVVVGFGGYPSIPALSAAVALRLPRMIHEQNGVLGRVNRLFAPRVQAV 142 ******************************************9999876 PP >> sp|Q7V388|MURG_PROMP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 74.9 0.0 3e-22 1.7e-19 2 130 .. 9 133 .. 8 141 .. 0.89 Alignments for each domain: == domain 1 score: 74.9 bits; conditional E-value: 3e-22 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+A+ +++ + +++++ l+++++l+++ ++++ +++++++ ++ ++ ++ lk l++ + + +ilke+k+ sp|Q7V388|MURG_PROMP 9 LIAASGTGGHIFPALAVSKKVEK-DWDIHwLGVTKRLDSEFVPSKYNLLTLNLETPKKNIFRVFQYLKILFSI----FNIIKILKEKKI 92 799*****************975.78************99977778888888886666666777777777777....999********* PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130 ++v+ +ggy++++ ++aa++++ip++++E+n ipg v+k++ sp|Q7V388|MURG_PROMP 93 NLVFTTGGYISAPTILAAKWLKIPVILHESNLIPGTVTKYF 133 **************************************998 PP >> sp|A3PAR5|MURG_PROM0 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 74.9 0.0 3e-22 1.7e-19 2 130 .. 8 132 .. 7 141 .. 0.84 Alignments for each domain: == domain 1 score: 74.9 bits; conditional E-value: 3e-22 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+A+ +e+ ++ ++++ l+++++l++ ++++ ++++++++ ++ + + + ++ l +++++ ilke+k+ sp|A3PAR5|MURG_PROM0 8 LVAASGTGGHIFPALAVTKEVEDK-WNIHwLGVHKRLDANFIPKKYNLRTLNIKTPRKN----IFLFYQYFRILMSTFQVIWILKEEKI 91 799******************887.6999********9988777777777777733444....444555555555569*********** PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130 ++v+ +ggy++++ +ia++l++ip++++E+n ipg+v+k + sp|A3PAR5|MURG_PROM0 92 NLVFTTGGYISAPTIIASKLLRIPVIIHESNLIPGMVTKNF 132 *************************************9876 PP >> sp|Q07PT3|MURG_RHOP5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 75.6 0.6 1.8e-22 1e-19 1 138 [. 7 143 .. 7 144 .. 0.90 Alignments for each domain: == domain 1 score: 75.6 bits; conditional E-value: 1.8e-22 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE....----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp....igpdvklwakleslktlkelaeglkalrkakeilk 85 ++la+gGT+G+++Pa Al++ L++rG +Vrl+t + + +gl ++ ++++ +++ + ++ ++ a + ++ ka +++ sp|Q07PT3|MURG_RHOP5 7 ILLAAGGTGGHLFPAEALGVVLMQRGLRVRLVTDSRALRY---SGLFSREmtdvVPSE-TVRGRS-PVALARTGAMLGAGTLKALTLMW 90 79****************************9999988777...677666633346666.777766.89999999999999********* PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + kp++v+gfggy +++liaa+l +ip+ v+++n+++g +n++l+ +++ ++ sp|Q07PT3|MURG_RHOP5 91 RLKPAAVIGFGGYPTLPPLIAARLMKIPTLVHDSNAVMGRANRFLSAHVTAIA 143 **********************************************9999875 PP >> sp|Q133X1|MURG_RHOPS UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 74.1 0.6 5.3e-22 3e-19 1 137 [. 7 142 .. 7 144 .. 0.84 Alignments for each domain: == domain 1 score: 74.1 bits; conditional E-value: 5.3e-22 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv...eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 ++la+gGT+G+++Pa Al++ L++rG +Vrl+t + ++ ++ +++vp ++ +++ ++ ++ + ++ a ++ + sp|Q133X1|MURG_RHOPS 7 ILLAAGGTGGHLFPAEALGVVLMKRGLRVRLVTDSRAMRYSglfSADMIDVVPSETV-RGRT---PWALARTGVMLGAGTALAIGLMMR 91 79****************************999988887643356666666665555.3333...55666666666666888999**** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +p++v+gfggy +++l+aa++++ip+ ++++n+++g +n+ll+rr+ + sp|Q133X1|MURG_RHOPS 92 LRPAAVIGFGGYPTLPPLFAARALRIPTLIHDANAVMGRANRLLSRRVSAI 142 ***********************************************9876 PP >> sp|Q5LIJ7|MURG_BACFN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 74.4 0.1 4.4e-22 2.5e-19 1 137 [. 16 154 .. 16 156 .. 0.97 Alignments for each domain: == domain 1 score: 74.4 bits; conditional E-value: 4.4e-22 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+++ggGT+G+++Pav++a++ ++ ++ ++++ ++e + + ag+++ +++ ++ +k +k++ l++ ++ ka+ i++ sp|Q5LIJ7|MURG_BACFN 16 VIISGGGTGGHIFPAVSIANAIKELRPDAQilfVGAEGRMEMQRvPDAGYQIIGLPVA-GFDRKH-LWKNVAVLLKLVRSQWKARNIIR 102 6899**************************99********98766*************.****98.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +++p+v vg+ggy++++ l a g+p+ + Eqn+ +g++nkll+++a ++ sp|Q5LIJ7|MURG_BACFN 103 QFRPQVAVGVGGYASGPTLKMAGMMGVPTLIQEQNSYAGVTNKLLAQKARRI 154 ***********************************************99987 PP >> sp|Q64ZM1|MURG_BACFR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 74.4 0.1 4.4e-22 2.5e-19 1 137 [. 16 154 .. 16 156 .. 0.97 Alignments for each domain: == domain 1 score: 74.4 bits; conditional E-value: 4.4e-22 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+++ggGT+G+++Pav++a++ ++ ++ ++++ ++e + + ag+++ +++ ++ +k +k++ l++ ++ ka+ i++ sp|Q64ZM1|MURG_BACFR 16 VIISGGGTGGHIFPAVSIANAIKELRPDAQilfVGAEGRMEMQRvPDAGYQIIGLPVA-GFDRKH-LWKNVAVLLKLVRSQWKARNIIR 102 6899**************************99********98766*************.****98.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +++p+v vg+ggy++++ l a g+p+ + Eqn+ +g++nkll+++a ++ sp|Q64ZM1|MURG_BACFR 103 QFRPQVAVGVGGYASGPTLKMAGMMGVPTLIQEQNSYAGVTNKLLAQKARRI 154 ***********************************************99987 PP >> sp|A6LLF1|MURG_THEM4 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 74.4 0.0 4.4e-22 2.5e-19 1 139 [] 4 144 .. 4 144 .. 0.97 Alignments for each domain: == domain 1 score: 74.4 bits; conditional E-value: 4.4e-22 EEEE-------HHHHHHHHHHHHH--.-EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrG.heVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++agg T+G+++Pa+A +eLq+ ++V + ++ +lee+v + ++ ++v+++++ +l + l s++++k++++ l+a + +k++lk+ sp|A6LLF1|MURG_THEM4 4 IAVAGGVTGGHLYPALATLNELQKITpIDVLyFTVKGKLEEKVlKDYNFKTVSLDVK-GLIRPLYSFGNIKRILKILNAKNIVKKALKD 91 789*********************7626999**************************.******************************* PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvlv 139 +kpd+ + +ggyv+ ++++ a+ +g ++++Eqn ipgl+n l++ a++v+v sp|A6LLF1|MURG_THEM4 92 FKPDIAFVTGGYVSYPVGVTAKQLGFLLYIHEQNVIPGLTNLKLSKIADKVFV 144 *************************************************9985 PP >> sp|Q46HH6|MURG_PROMT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 74.4 0.0 4.2e-22 2.4e-19 2 138 .. 5 138 .. 4 139 .. 0.95 Alignments for each domain: == domain 1 score: 74.4 bits; conditional E-value: 4.2e-22 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 ++a+ GT+G+++Pa+++a+ L + V l++p +le ++ ++++ +++++ +l+ +s+++l +l + l a ++ +l+++k++ sp|Q46HH6|MURG_PROMT 5 LIAASGTGGHIYPALSFADSLSNSWEIVWLGVPHRLEVELVPEKYNLIKLKVG-GLQG--NSFRKLFNLCKLLFASVQVSVLLRQKKIN 90 799********************998888********9998888888999999.9999..99*************************** PP HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 v++ +ggy++++ +++a+ agip+ ++E+n+ipg+v++ll r+++ v+ sp|Q46HH6|MURG_PROMT 91 VIFTTGGYISAPSILGAKMAGIPVLLHESNAIPGKVTRLLGRFCDHVA 138 *******************************************99886 PP >> sp|A4WQD5|MURG_RHOS5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 72.8 1.1 1.4e-21 7.8e-19 2 137 .. 7 142 .. 6 144 .. 0.95 Alignments for each domain: == domain 1 score: 72.8 bits; conditional E-value: 1.4e-21 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++a+gGT+G+++Pa Ala++ rrG++V+l t + ++ + +e+ ++ ++ ++++ + l+ + +a+ ++ +a + +++ sp|A4WQD5|MURG_RHOS5 7 LIAAGGTGGHMFPAQALAEAMVRRGWRVKLSTDARGARYAggFPHVVEIDQVSSG-TFARGG-ALARALVPARIAAGVASAVVGFLRDR 93 79********************************99999877677889999****.999999.999999999999************** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 p+vvvgfggy + +al aa +++ p+ ++Eqng+ g vn+l++ r++ v sp|A4WQD5|MURG_RHOS5 94 PAVVVGFGGYPSIPALSAAVALRLPRMIHEQNGVLGRVNRLFAPRVDAV 142 *********************************************9987 PP >> sp|A2BUH4|MURG_PROM5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 73.1 0.0 1.1e-21 6e-19 2 130 .. 9 133 .. 8 142 .. 0.90 Alignments for each domain: == domain 1 score: 73.1 bits; conditional E-value: 1.1e-21 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++a+ GT+G+++Pa+A+ +e+ ++ +++ l+++++l+++ ++++ +++++ ++ +s+ l + ++ l +++ + +ilke+k+ sp|A2BUH4|MURG_PROM5 9 LIAASGTGGHIFPALAVSKEVEKYW-NMHwLGVEKRLDSKFVPRKYNLLTLNLE--TPQ--KSIFILFQYLKILYSTFNIIKILKEKKI 92 799*******************995.9***********9997777777777777..556..5677888888888889************ PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESS CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkll 130 ++v+ +gg+++++ ++aa+l++ip++++E+n ipg v+k++ sp|A2BUH4|MURG_PROM5 93 NLVFTTGGFISAPTILAAKLLNIPVIIHESNLIPGTVTKYF 133 **************************************998 PP >> sp|Q5GS79|MURG_WOLTR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 71.8 0.0 2.7e-21 1.5e-18 1 135 [. 3 128 .. 3 132 .. 0.81 Alignments for each domain: == domain 1 score: 71.8 bits; conditional E-value: 2.7e-21 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +vla+gGT+G+++Pa+ lar+ +r+G++ +l + ++ + + + + l+ + g++ k++ + l ++ a + +++ sp|Q5GS79|MURG_WOLTR 3 IVLATGGTGGHIFPAITLARAIKRQGYDSILFADKKTGKNTdvKDYTLPLNKPGGN-KFRF--FLLLIYS--------CVLALYQIRKL 80 79****************************88887777666346666666655555.4444..3333333........35556889*** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 kp++v+gfggy++ + l+aa+ + ip++++Eqn++ g vnk++ a+ sp|Q5GS79|MURG_WOLTR 81 KPKLVIGFGGYASFPTLLAAKVLSIPIILHEQNAVLGRVNKFFFNSAE 128 ******************************************977665 PP >> sp|Q7NPZ9|MURG_CHRVO UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 71.1 0.1 4.4e-21 2.5e-18 1 133 [. 6 138 .. 6 143 .. 0.96 Alignments for each domain: == domain 1 score: 71.1 bits; conditional E-value: 4.4e-21 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 v++++ GT+G++ P +A+a+eLq rG++V l+t +g+e+++ + +g++ + ++ +++ k+ l+ lk +++ a++++ + + ++ sp|Q7NPZ9|MURG_CHRVO 6 VMVMAAGTGGHIVPGLAVAKELQSRGWKVVwLGTRRGMENKLvPPTGIPLERLNFH-GVRGKG-LLGSLKGALQLAGAFFSSAAQIFRH 92 67899***************************************************.******.************************* PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133 +pdvv+g+ggyv ++ ++ a l++ p+++ ++++ +l+nk+l + sp|Q7NPZ9|MURG_CHRVO 93 RPDVVLGMGGYVCLPGGVMAGLLWKPLVLVNADAGLLLSNKALLPF 138 ********************************99999999987555 PP >> sp|Q1AVX3|MURG_RUBXD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 68.1 0.0 3.8e-20 2.1e-17 19 139 .] 2 121 .. 1 121 [. 0.93 2 ? 3.7 0.1 2.8 1.6e+03 1 24 [. 165 188 .. 165 192 .. 0.92 Alignments for each domain: == domain 1 score: 68.1 bits; conditional E-value: 3.8e-20 HHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE-- CS Glyco_transf_28 19 areLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlali 105 a+ L++rG eV ++++ gle+++ ++ag +++++ +l+ s + + l+++ a+ + +++l+e +p +v+g+ggy++++a+ sp|Q1AVX3|MURG_RUBXD 2 AESLRERGAEVVfFGSESGLERELvPKAGFGLHALPLS-GLAGGPASRARASLLFAR--AVVRCRALLRELRPGAVLGVGGYASAPAVA 87 889***********************************.999977666666666666..****************************** PP HHHHHHHHHHHHHH----EEEEESSGGGSCCCSC CS Glyco_transf_28 106 aallagipanvaEqngipglvnkllprrangvlv 139 aa+l+gip++++Eqn++pg+vn++ r+a vlv sp|Q1AVX3|MURG_RUBXD 88 AARLLGIPTFIHEQNSVPGKVNRAAGRFAREVLV 121 ****************************999875 PP == domain 2 score: 3.7 bits; conditional E-value: 2.8 EEEE-------HHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqr 24 vvl+ gG++G + +A a++++ sp|Q1AVX3|MURG_RUBXD 165 VVLVFGGSGGALRINLAAAEAFRG 188 799*****************9986 PP >> sp|Q7MBC4|MURG_GLOVI UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 71.2 0.1 4.2e-21 2.4e-18 2 134 .. 7 136 .. 6 140 .. 0.93 Alignments for each domain: == domain 1 score: 71.2 bits; conditional E-value: 4.2e-21 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpd 90 ++a+ GT+G+++Pa+A+a eL + ++ l++p++le+++ ++ ++++++ +l++k ++ l + + + a+r a+ +l++++ + sp|Q7MBC4|MURG_GLOVI 7 LIAASGTGGHIFPALAVAGELSEFEIAW-LGVPDRLENKLVPGRYPLHTVALQ-GLNRKP-GPQWLEAASQTFAAYRYARNLLSQERFA 92 799**********************444.***********7777888888888.889988.999999999999**************** PP HHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGS CS Glyco_transf_28 91 vvvgfggyvadlaliaallagipanvaEqngipglvnkllprra 134 v+ +ggy+a++a++aa++++ pa+ +E+n +pg+v ++l+r+ sp|Q7MBC4|MURG_GLOVI 93 GVFTTGGYIAAPAVLAARSLNLPAIGHESNVLPGKVIRYLARWM 136 ***************************************99986 PP >> sp|Q7U322|MURG_HELHP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 70.9 0.0 5e-21 2.8e-18 1 137 [. 2 140 .. 2 141 .. 0.95 Alignments for each domain: == domain 1 score: 70.9 bits; conditional E-value: 5e-21 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeilke 86 ++++ggGT+G++ a Ala+e q+ + + ++++ g ++++ e + l ++ + +d +++ +k l+++k ++++lka +a+ ilk+ sp|Q7U322|MURG_HELHP 2 FAITGGGTGGHLAIAKALAQEAQKNNQQSIyIGSQIGQDKTWfEGSSLFTHCYFLDsTGVVNKK-GLGKIKAIFKQLKAAWEARNILKK 89 799***********************99999*******************99888865777766.9*********************** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 +k+++v+++gg++a+ a+i+a+l++ p++++Eqn+i g+ n +l +a+ + sp|Q7U322|MURG_HELHP 90 HKIEYVISVGGFSAGGASIGAILSNTPLFIHEQNAIKGKLNEILTPFAKAI 140 *******************************************99999876 PP >> sp|Q3B129|MURG_PELLD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 71.4 0.5 3.5e-21 2e-18 1 138 [. 3 146 .. 3 147 .. 0.88 Alignments for each domain: == domain 1 score: 71.4 bits; conditional E-value: 3.5e-21 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHH.HH---EEEE----.....S------.-HHHCCSHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefv.eeagleavpigpd.....vklwakleslktlkelaeglkalrka 80 +++aggGT+G+++PavA+a L++ + V+ +t g+e+ + g+ + i+++ l a l ++ l+++a+ l++a sp|Q3B129|MURG_PELLD 3 ILFAGGGTGGHLYPAVAMAAMLKEMVPGVElsfAGTASGIEAGEvPRLGYRLHLIPVRglkrgRSLSALLSNIGVLTDFAAS---LFRA 88 79****************************88889*****99877*************766655555555555555566665...**** PP HHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 81 keilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +++++++pdvvvg+gg+v++++l+aa l+g ++ + Eqn+ pgl+++ll+ a v+ sp|Q3B129|MURG_PELLD 89 AALIRRERPDVVVGTGGFVSAPVLLAAQLLGRKTLIQEQNAFPGLTTRLLSILAREVH 146 ************************************************9997777666 PP >> sp|Q30PK0|MURG_SULDN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 66.5 0.0 1.2e-19 6.9e-17 3 136 .. 5 140 .. 3 143 .. 0.88 Alignments for each domain: == domain 1 score: 66.5 bits; conditional E-value: 1.2e-19 EE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 3 laggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeilkeak 88 ++ggGT+G++ a Al ++ + Ghe + ++++ g +++ e+ + + ++ +++ ++ + l++lk l+ +l+a++++++ilk+++ sp|Q30PK0|MURG_SULDN 5 ITGGGTGGHLMIAEALVEACANDGHEAIfIGSTSGQDRKYfEQNSKFSHVYFLQtTGVVNQ-RGLGKLKALWLVLRAFFASRAILKKHN 92 79************************************99744433333344442255554.599************************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 +++++++gg++a++a++a+l++ ip++++Eqn++ g+ n +l+ +a++ sp|Q30PK0|MURG_SULDN 93 IQATYSVGGFSAAAASFASLSRLIPLFIHEQNAVYGKLNSILKPFATR 140 ******************************************999987 PP >> sp|A2SCY5|MURG_METPP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 68.7 0.2 2.4e-20 1.4e-17 2 137 .. 7 145 .. 6 147 .. 0.96 Alignments for each domain: == domain 1 score: 68.7 bits; conditional E-value: 2.4e-20 EEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH....HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr.latppgleefv....eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 v+++ GT+G++ P +A+a+e q+rG+ V l+t+ g+e+++ +e+g+e+ +i+ +l+ k+ l+tl+ ++ l a+ + +il+ sp|A2SCY5|MURG_METPP 7 VVMAAGTGGHIIPGLAVAQEMQHRGWTVSwLGTEQGMENRLvppaAESGIEMDTIAFS-GLRGKG-LLHTLTGGLRLLGAFAACAKILR 93 7899***********************************988766789**********.******.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 + ++v+g+ggyv + ++ a+l+g p+++ ++++ +++n++l+ a+++ sp|A2SCY5|MURG_METPP 94 RRATTAVLGMGGYVCFPGGLMASLLGKPLILVNADAALLMSNRALKPVADRI 145 *******************************************999998887 PP >> sp|A0RP87|MURG_CAMFF UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 64.4 0.0 5.3e-19 3e-16 1 136 [. 2 139 .. 2 142 .. 0.92 2 ? 2.5 0.0 6.7 3.8e+03 2 41 .. 171 210 .. 170 264 .. 0.82 Alignments for each domain: == domain 1 score: 64.4 bits; conditional E-value: 5.3e-19 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE..----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp..igpdvklwakleslktlkelaeglkalrkakeilk 85 ++++ggGT+G++ a Ala eL++rG +V+ +++ g ++++ e + + + +++ ++ +k +++l l++ k +k + i+ sp|A0RP87|MURG_CAMFF 2 IAITGGGTGGHLAIAKALAIELKNRGENVIfIGSNSGQDRMWfEHSDIFKFKyfFPSR-GVVNKK-GIHKLFALLNIIKLAFKCRCIFT 88 789***************************************9888886544356777.888877.999999999999*********** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 e+++ v+++ggy++++a+++a + +++++Eqn+i g+ n +l+ ++++ sp|A0RP87|MURG_CAMFF 89 EHNISSVISVGGYSSAPASFGAVIFRKKLFIHEQNAIKGKLNSILKPFCKK 139 *******************************************99988876 PP == domain 2 score: 2.5 bits; conditional E-value: 6.7 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv 41 +++gg + + ++Al +L + h++ ++ ++g +e sp|A0RP87|MURG_CAMFF 171 LFLGGSQGASFINSLALNLALNLKNHNINIIHQCGAKELE 210 66777777789999***************99999988873 PP >> sp|B3CM87|MURG_WOLPP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 66.6 0.0 1.1e-19 6.2e-17 1 137 [. 3 127 .. 3 129 .. 0.85 Alignments for each domain: == domain 1 score: 66.6 bits; conditional E-value: 1.1e-19 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 ++la+gGT+G+v+Pa+ la++L+ +Gh+ +l t + + e++ l+ ++ ++ kl+ +l +++ +++ + ++ kp sp|B3CM87|MURG_WOLPP 3 IILATGGTGGHVFPAITLAKALKVQGHNCILFTDQKTINI-ESYILPLCKPSGN-KLKF--LFLLMYSCVLAL--------YQTRKLKP 79 78***************************99999988765.9999999887777.5555..334444444444........556999** PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 ++++gfg+y++ + l+aa+ + ip++++Eqn + g vn+++ + a+ + sp|B3CM87|MURG_WOLPP 80 KLIIGFGSYASFPTLLAAKILSIPIVLHEQNTVLGRVNRFFFKSAKLI 127 ****************************************99988876 PP >> sp|A5FUL0|MURG_ACICJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 66.2 2.3 1.4e-19 8.1e-17 1 135 [. 9 145 .. 9 149 .. 0.91 Alignments for each domain: == domain 1 score: 66.2 bits; conditional E-value: 1.4e-19 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +v+a+gGT+G++ Pa ++a+eL+rrG ++ l t + + + ag e + +++ +l+ + + l+ +a+ +++ +a+ il++ sp|A5FUL0|MURG_ACICJ 9 IVIAAGGTGGHMVPAESVADELMRRGQRIVLMTDARSAGQKsaVFAGCERHVLAGA-GLAGRS-LGRRLLGVAQLARGTVAARHILAKL 95 79****************************99999999886556788887778888.788877.9999********************* PP HHHHHHHC----EEEE--HHH..HHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaal..lagipanvaEqngipglvnkllprran 135 +++vvgfggy ++++++aa+ +++ ++++++qn++ g +n++l+r+a+ sp|A5FUL0|MURG_ACICJ 96 DAAAVVGFGGYPSVPPVLAAAtlRRRPAIVLHDQNAVLGGANRFLARFAD 145 *****************9998778999********************998 PP >> sp|Q7MAD4|MURG_WOLSU UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 65.8 0.0 1.9e-19 1.1e-16 1 131 [. 3 135 .. 3 140 .. 0.92 Alignments for each domain: == domain 1 score: 65.8 bits; conditional E-value: 1.9e-19 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G++ a Al++ L + +++++g ++ + e+g + + ++++ ++ ++ ++++++l ++++a+ +a++ilk sp|Q7MAD4|MURG_WOLSU 3 ILLTGGGTGGHLAIAKALMESLASKNQSLFfIGSQRGQDRSWfeHEEGFKRRFfLETQ-GVVNQR-GIAKIRSLSSQFQAMLEARKILK 89 79************************9999***********98667777777777777.666655.9********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSG CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllp 131 +++++ vv++ggy+a++a++aal++gip++++Eqn+ gl n+ll+ sp|Q7MAD4|MURG_WOLSU 90 NHQIKRVVSVGGYSAAPASLAALSLGIPLYIHEQNAKVGLLNRLLK 135 ****************************************999876 PP >> sp|B2KE54|MURG_ELUMP UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 64.5 0.0 4.9e-19 2.8e-16 1 135 [. 4 139 .. 4 143 .. 0.94 Alignments for each domain: == domain 1 score: 64.5 bits; conditional E-value: 4.9e-19 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++a+gGT+G+++P +l++eL++r +eV ++ +++ + ++ ++ + ++++i+ +++++ + ++ + +++ ++ ++ i+ + sp|B2KE54|MURG_ELUMP 4 FIIASGGTGGHFYPGFSLGKELRKRSYEVLfVVRKEDAAIKTlTKNNFNYKEINFT-GFPRSANPIRHIIFCYKFIVSFWQTLGIINAF 91 789***************************8666666666666*************.******************************** PP HHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 kpdv+vg+ggy + ++++ a+ gi+ v+++n gl+nk+++++ n sp|B2KE54|MURG_ELUMP 92 KPDVCVGMGGYLSFPVIVWAKIKGIKSAVHDSNTKIGLANKICAKFTN 139 ******************************************999876 PP >> sp|B3EIK8|MURG_CHLL2 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 64.8 0.3 4e-19 2.2e-16 1 133 [. 3 141 .. 3 147 .. 0.84 Alignments for each domain: == domain 1 score: 64.8 bits; conditional E-value: 4e-19 EEEE-------HHHHHHHHHHHHH-..--EEE.EEETGGGHHHH.HH---EEEE----S------....-HHHCCSHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrr..GheVr.latppgleefv.eeagleavpigpdvklwakle...slktlkelaeglkalrkake 82 v++aggGT+G+++PavA+a+eL + G V +t++g+e+ + g+ + ++++ +l++ + l+++ l ++ al a sp|B3EIK8|MURG_CHLL2 3 VLFAGGGTGGHLYPAVAMAVELLKLvpGASVSfAGTKNGIEASEiPRLGYRLHLLPVR-GLKRGGSlraILANVGILIDFAGALINAGG 90 79**********************8445666688999999998889999999999999.66665530003444455566677899999* PP HHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS Glyco_transf_28 83 ilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133 ++++++pdvvvg+gg+v++++l+aa g + + Eqn+ pg+++kll+ sp|B3EIK8|MURG_CHLL2 91 LIRRENPDVVVGTGGFVSAPVLLAAQMMGRRTLIQEQNAFPGVTTKLLSIL 141 **********************************************99865 PP >> sp|A5UZT7|MURG_ROSS1 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 65.4 2.3 2.5e-19 1.4e-16 3 138 .. 20 177 .. 18 178 .. 0.93 Alignments for each domain: == domain 1 score: 65.4 bits; conditional E-value: 2.5e-19 EE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.........................S------.-HHH CS Glyco_transf_28 3 laggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.........................vklwakleslkt 66 l+ggGT+G+v+Pa+A+a +L + G + +a ++g +++ +++ ++ ++ v++++ l ++++ sp|A5UZT7|MURG_ROSS1 20 LVGGGTGGHVYPALAVAAALNAHGAQFVVADTDGGRNRAMSRHTRWSALYVGsvggmeaalvaresalpfhalpaaaVRGRNPLTMVRN 108 89*************************************777777777444445**********************9999999999999 PP CCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 67 lkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 l +la+g + +a +++++++p++++g+ggyv +++++aa+la +p+++ + +pgl+ +ll+r an v+ sp|A5UZT7|MURG_ROSS1 109 LITLARG---TGAAHRLIARDRPAAILGTGGYVCVPVFLAARLACVPTVIYQPDVVPGLAVRLLARLANLVA 177 9999999...********************************************************999875 PP >> sp|Q5FUJ5|MURG_GLUOX UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 63.1 0.5 1.3e-18 7.2e-16 1 134 [. 5 142 .. 5 147 .. 0.86 Alignments for each domain: == domain 1 score: 63.1 bits; conditional E-value: 1.3e-18 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE....----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavp....igpdvklwakleslktlkelaeglkalrkakeilk 85 +v+a+gGT+G+++Pa A+a L +rGh+ l t + ++ e+gl +++ +++ k+ ++++ +++ l+++ +a++il+ sp|Q5FUJ5|MURG_GLUOX 5 IVIAAGGTGGHFFPAEAVATVLAERGHDLVLMTDARHGRR--ETGLFKDRpqyvLDGA-GVAGKG-LSGKVHGVLALLRGMMEARRILA 89 79***************************98877766665..4444443334224555.799999.999999***************** PP HHHHHHHHHC----EEEE--HHH....HHHHHHHHHHH----EEEEESSGGGS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaal....lagipanvaEqngipglvnkllprra 134 + +++vvgfggy + ++l+a++ + + + +++E n++ g +n +l+r+ sp|Q5FUJ5|MURG_GLUOX 90 SLDAAAVVGFGGYPSIPPLTASRllpsAKRPQMVIHEGNAVLGQANAFLSRFS 142 **********************9888888999*****************9985 PP >> sp|A6Q722|MURG_SULNB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 60.6 0.0 7.8e-18 4.4e-15 1 135 [. 3 137 .. 3 141 .. 0.92 Alignments for each domain: == domain 1 score: 60.6 bits; conditional E-value: 7.8e-18 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 ++++ggGT+G++ + A+ ++L+ ++ + ++++ g ++++ e+++ ++++ d+++ + + +++lk+l+ l+a+ ka+++lk++ sp|A6Q722|MURG_SULNB 3 IIMTGGGTGGHLAIIKAVKEQLKGEE-LIYIGSTTGQDRQWfENDEDFTETYFFDTRGVVNQRGFGKLKSLWMMLQAMMKARKLLKKYD 90 689********************999.555***********999998888887775555555699************************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 ++vv+++gg+++++ +aa++a +p++++Eqn+ g nkll +a sp|A6Q722|MURG_SULNB 91 AKVVFSVGGFSSAATAFAAKSASVPLVIHEQNAALGSLNKLLRPYAA 137 ****************************************9988875 PP >> sp|B8E325|MURG_DICTD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 61.1 0.0 5.5e-18 3.1e-15 1 138 [. 4 135 .. 4 136 .. 0.88 Alignments for each domain: == domain 1 score: 61.1 bits; conditional E-value: 5.5e-18 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+v Pa+ +a+ +r ++ + ++ ++ +ee++ + +++++ +++ ++ +k+l+ + ++++a +il e sp|B8E325|MURG_DICTD 4 ILFVAGGTGGHVIPALNMADYISERAPHWKisfIGRKNSFEEKLIAGKYDFYGLDII---KS--SDIKKLSYYL----SIKDALKILGE 83 799**********************9998888*******************555555...33..3444444444....55999****** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +pd++v fg+y+ +++++a++ + p +++Eqn ipg v+kl+ r+ gv+ sp|B8E325|MURG_DICTD 84 LEPDILVVFGSYITVPIIVASIIKKLPFFLHEQNVIPGRVTKLFYRFSQGVA 135 **********************************************999886 PP >> sp|A6Q579|MURG_NITSB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 60.3 0.0 9.9e-18 5.6e-15 1 138 [. 3 142 .. 3 143 .. 0.89 Alignments for each domain: == domain 1 score: 60.3 bits; conditional E-value: 9.9e-18 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp...igpdvklwakleslktlkelaeglkalrkakeil 84 ++++ggGT+G++ a +l +++++++ +++ g ++ + e+++ ++++ +++ ++ +k +++++ l + +a ++ak+++ sp|A6Q579|MURG_NITSB 3 ILITGGGTGGHLSVAKSLKEAFKKKDATLYyIGSIQGQDRSWfENDE-DFQKklfFDVE-GVVNKK-GINKIRALTDIVRASFAAKKLI 88 789***********************9998************65555.44444555555.555555.78888888888899******** PP HHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 85 keakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 k++++d+vv++ggy+a++a++aal ++ p++++Eqn++ g+ n+ll+ +a++v+ sp|A6Q579|MURG_NITSB 89 KNESIDAVVSVGGYSAAAASFAALQLNLPLFIHEQNAVKGKLNRLLSPFAKRVF 142 ***************************************************996 PP >> sp|Q0BV25|MURG_GRABC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 59.3 0.5 2e-17 1.1e-14 1 133 [. 10 144 .. 10 148 .. 0.78 Alignments for each domain: == domain 1 score: 59.3 bits; conditional E-value: 2e-17 EEEE-------HHHHHHHHHHHHH---EEEEEETG...GGHHHH.HH--...-EEEE----S------.-HHHCCSHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatpp...gleefv.eeag...leavpigpdvklwakleslktlkelaeglkalrkake 82 +++a+gGT+G+++Pa Ala eL+rrG ++ l t gl+++v + + l+ i+++ + ++ +++ l +g + ka + sp|Q0BV25|MURG_GRABC 10 IIIAAGGTGGHFFPAEALAAELKRRGRQIVLMTDArsgGLTSTVfADTDrfvLPGAGIAGR-GIRR---AGQAVIALGHG---VVKAGA 91 689***************************9887611145566633322111333334444.5555...44666666666...****** PP HHHHHHHHHHHHC----EEEE--HHH..HHHHHHHHHHH----EEEEESSGGG CS Glyco_transf_28 83 ilkeakpdvvvgfggyvadlaliaal..lagipanvaEqngipglvnkllprr 133 +l++ ++ +vgfggy +++++a+ ++++p++++Eqn++ g +n+ll+r+ sp|Q0BV25|MURG_GRABC 92 LLRRLEAGCIVGFGGYPCIPPVLGARlrARNVPVILHEQNAVLGRANRLLARK 144 ************************9966789*****************99886 PP >> sp|Q5PB22|MURG_ANAMM UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 59.0 0.0 2.4e-17 1.3e-14 1 135 [. 4 137 .. 4 141 .. 0.94 Alignments for each domain: == domain 1 score: 59.0 bits; conditional E-value: 2.4e-17 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeak 88 vvla+gGT+G++ Pa+ l + L +rG++ l t + + + g++ + + p +++++ ++ lk a + + l++ k sp|Q5PB22|MURG_ANAMM 4 VVLAAGGTGGHIVPAALLCQVLADRGYRCVLYTDQYFLQYTaRFPGIKGYVLLPL--CKRSGGAVRLLKFCALLAYSCVLSYIKLRSLK 90 79**************************************9999****9998887..67777799999999999999************ PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 pd+v+gfg y++ ++l+ a+l + a+++Eqn+++g vn++++ +a sp|Q5PB22|MURG_ANAMM 91 PDLVIGFGAYASFPVLLSAWLMSVDAVLHEQNSVMGRVNRVFAGYAR 137 ******************************************99986 PP >> sp|A7I265|MURG_CAMHC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 58.5 0.0 3.4e-17 1.9e-14 1 137 [. 3 141 .. 3 143 .. 0.92 Alignments for each domain: == domain 1 score: 58.5 bits; conditional E-value: 3.4e-17 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeilke 86 ++++ggGT+G++ a la eL++rG + + +++++g + + e++ l +++ ++ ++ +k ++ +++l++ l + ++i+++ sp|A7I265|MURG_CAMHC 3 IAITGGGTGGHLTIAKILAYELKKRGLKTIfIGSTNGQDMLWfENSVLFDEKYFLKsSGVVNKK-GISRILSLFKILALSFGCRKIFAK 90 789***************************************9999998888665532666666.899999999999999********* PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 + ++v+++ggy++++a + a +++ip++++Eqn+ g+ n ll+r+a++ sp|A7I265|MURG_CAMHC 91 HDVKAVISVGGYSSAPAAFWAVANKIPLFIHEQNAEIGKINALLKRFAKRF 141 ************************************************985 PP >> sp|A9FI55|MURG_SORC5 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 60.1 0.8 1.1e-17 6.3e-15 1 138 [. 4 145 .. 4 146 .. 0.93 Alignments for each domain: == domain 1 score: 60.1 bits; conditional E-value: 1.1e-17 EEEE-------HHHHHHHHHHHHH..---EEE...EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqr..rGheVr...latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakei 83 v++aggGT+G+v+P +A+++++++ r+ e r ++t +g+e +v e+g + + + + +l+ + +++++ +a+ + l +a+++ sp|A9FI55|MURG_SORC5 4 VLIAGGGTGGHVFPMIAVGDAVRAaaRDEEARvvyVGTARGIEVRVmGERGDNLELLHVL-PLRGGG-LSGFVRGAARAGSVLPEARRL 90 799*****************998622444555669*******************999999.999999.********************* PP HHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 84 lkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +++ + v ++ ggy+ +++++aa+++g+p+ + E n++ gl+n+ll+ +++++ sp|A9FI55|MURG_SORC5 91 VERLDARVALSLGGYAGGPVSLAARSLGVPVAILEPNSVLGLSNRLLAPIVDRAY 145 ***********************************************99999987 PP >> sp|B5YEL3|MURG_DICT6 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 58.7 0.0 3e-17 1.7e-14 1 138 [. 4 135 .. 4 136 .. 0.88 Alignments for each domain: == domain 1 score: 58.7 bits; conditional E-value: 3e-17 EEEE-------HHHHHHHHHHHHH---EEE...EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr...latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 +++++gGT+G+v Pa+ +a+ ++ ++ + ++ ++ +ee + +++++ +++ ++ +k+l+ ++ +a +il e sp|B5YEL3|MURG_DICT6 4 ILFVAGGTGGHVIPALNMADYIAQKAPHWKisfVGRKDSFEEGLIRGKYDFYGLNIS---RS--SDVKKLSYYLSI----SDAIKILNE 83 799*******************9998888888*******************999999...22..244444444444....777****** PP HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 kpd++v fg+y+ ++++ia++ + p +++Eqn +pg v+kl+ + +gv+ sp|B5YEL3|MURG_DICT6 84 VKPDILVVFGSYITVPVIIASIVKKYPFFLHEQNVVPGRVTKLFYEFSEGVA 135 ********************************************99988876 PP >> sp|A8FM88|MURG_CAMJ8 UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 55.1 0.0 3.8e-16 2.1e-13 1 136 [. 3 140 .. 3 143 .. 0.96 Alignments for each domain: == domain 1 score: 55.1 bits; conditional E-value: 3.8e-16 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp...igpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G++ l + ++ +e +++++g ++ + e ++ +++ + ++ ++ ++ +++++++l++ lk ++ +ei+k sp|A8FM88|MURG_CAMJ8 3 IALTGGGTGGHLAIVRCLLESAIKKNIECVyIGSQNGQDKAWFENEVRFKEkffLSSK-GVVNQS-KFGKISSLLHTLKLSKDCREIFK 89 79**************************889***********999****999989999.999988.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 ++ +++v+++ggy+a++a++aal+++ p++++Eqn+ g n ll+ +a++ sp|A8FM88|MURG_CAMJ8 90 KYHIQAVFSVGGYSAAPASFAALFSHLPLFIHEQNSKSGSLNMLLKPFATK 140 ***************************************999999998887 PP >> sp|Q5HU62|MURG_CAMJR UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 54.8 0.0 5e-16 2.8e-13 1 136 [. 3 140 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 54.8 bits; conditional E-value: 5e-16 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp...igpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G++ l + ++ +e +++++g ++ + e ++ +++ + ++ ++ ++ +++++++l++ lk ++ +ei+k sp|Q5HU62|MURG_CAMJR 3 IALTGGGTGGHLAIVRCLLESAIKKNIECVyIGSQNGQDKAWFENEVRFKEkffLSSK-GVVNQS-KFDKISSLLHTLKLSKDCREIFK 89 79**************************889***********999****999988999.888888.9********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 ++ +++v+++ggy+a++a++aal+++ p++++Eqn+ g n ll+ +a++ sp|Q5HU62|MURG_CAMJR 90 KYHIQAVFSVGGYSAAPASFAALFSHLPLFIHEQNSKSGSLNMLLKPFATK 140 ***************************************999999998887 PP >> sp|A1W027|MURG_CAMJJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 54.8 0.0 5e-16 2.8e-13 1 136 [. 3 140 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 54.8 bits; conditional E-value: 5e-16 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp...igpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G++ l + ++ +e +++++g ++ + e ++ +++ + ++ ++ ++ +++++++l++ lk ++ +ei+k sp|A1W027|MURG_CAMJJ 3 IALTGGGTGGHLAIVRCLLESAIKKNIECVyIGSQNGQDKAWFENEVRFKEkffLSSK-GVVNQS-KFDKISSLLHTLKLSKDCREIFK 89 79**************************889***********999****999988999.888888.9********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 ++ +++v+++ggy+a++a++aal+++ p++++Eqn+ g n ll+ +a++ sp|A1W027|MURG_CAMJJ 90 KYHIQAVFSVGGYSAAPASFAALFSHLPLFIHEQNSKSGSLNMLLKPFATK 140 ***************************************999999998887 PP >> sp|Q9PNQ2|MURG_CAMJE UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 54.8 0.0 5e-16 2.8e-13 1 136 [. 3 140 .. 3 143 .. 0.95 Alignments for each domain: == domain 1 score: 54.8 bits; conditional E-value: 5e-16 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp...igpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G++ l + ++ +e +++++g ++ + e ++ +++ + ++ ++ ++ +++++++l++ lk ++ +ei+k sp|Q9PNQ2|MURG_CAMJE 3 IALTGGGTGGHLAIVRCLLESAIKKNIECVyIGSQNGQDKAWFENEVRFKEkffLSSK-GVVNQS-KFDKISSLLHTLKLSKDCREIFK 89 79**************************889***********999****999988999.888888.9********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 ++ +++v+++ggy+a++a++aal+++ p++++Eqn+ g n ll+ +a++ sp|Q9PNQ2|MURG_CAMJE 90 KYHIQAVFSVGGYSAAPASFAALFSHLPLFIHEQNSKSGSLNMLLKPFATK 140 ***************************************999999998887 PP >> sp|A7H2Z9|MURG_CAMJD UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 53.6 0.0 1.1e-15 6.4e-13 1 136 [. 3 140 .. 3 143 .. 0.92 Alignments for each domain: == domain 1 score: 53.6 bits; conditional E-value: 1.1e-15 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE...----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp...igpdvklwakleslktlkelaeglkalrkakeilk 85 ++l+ggGT+G++ l + ++ +e +++++g ++ + e + +++ + ++ ++ ++ +++++++l++ lk ++ +ei+k sp|A7H2Z9|MURG_CAMJD 3 IALTGGGTGGHLAIVRCLLESAIKKNIECVyIGSQNGQDKAWFENEARFKEkffLSSK-GVVNQN-KFGKISSLLHTLKLSKDCREIFK 89 79**************************889***********6666666666677777.777777.*********************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrang 136 ++ +++v+++ggy+a++a++aal+++ p++++Eqn+ g n ll+ +a++ sp|A7H2Z9|MURG_CAMJD 90 KYHIQAVFSVGGYSAAPASFAALFSHLPLFIHEQNSKSGSLNMLLKPFATK 140 ***************************************999999998887 PP >> sp|A8F4X1|MURG_THELT UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 52.2 0.0 3.1e-15 1.8e-12 4 138 .. 6 142 .. 3 143 .. 0.89 Alignments for each domain: == domain 1 score: 52.2 bits; conditional E-value: 3.1e-15 E-------HHHHHHHHHHHHH.---EEE.EEETGGGHHHH.HH---EEEE----.S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 4 aggGTrGdvePavAlareLqr.rGheVr.latppgleefv.eeagleavpigpd.vklwakleslktlkelaeglkalrkakeilkeak 88 aggGT+G+++Pav++ ++L + + +V+ ++ ++g+e+++ + ++ e++ i++d +l + + +++++++l++ + ++ +l+ ++ sp|A8F4X1|MURG_THELT 6 AGGGTGGHLYPAVSILEKLAEmKKLNVTyFCLEKGIESKIlPLEHPEYKLIKIDlKGLERPIWKPSNFTRLLKI--SQSESIIALEIKQ 92 89*****************984568999*************777777777666653777777789999999999..8889999****** PP HHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 +d + +ggy++ +++ ++++ p ++ Eqn +pgl+nk+l+ a++++ sp|A8F4X1|MURG_THELT 93 CDFGLMTGGYISYPVGKVCKKLKKPFFIQEQNVVPGLANKALSLSAKKIF 142 *******************************************9999987 PP >> sp|Q72R84|MURG_LEPIC UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 41.3 0.2 7e-12 3.9e-09 1 138 [. 4 142 .. 4 143 .. 0.87 Alignments for each domain: == domain 1 score: 41.3 bits; conditional E-value: 7e-12 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------...-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakl..eslktlkelaeglkalrkakeilk 85 +v+++gGT+G++ P vAla+ L + + ++ ++ + + + + + ++ ++ lw +l s+++++ + + ++ k+++i+k sp|Q72R84|MURG_LEPIC 4 IVIVAGGTGGHISPGVALAEVLTELKEK--IGYENLYLYSLvrNKNNPDLEQAPCP-VLWHNLppLSSNFFLFPIRYTIQIIKTFFIFK 89 799*********************9944..68888766655588888888888888.5555432258888999999999********** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + ++dvv+g+ggy+ + ++ ++ + ++++ Eqn ipg vn+l+ r+a +v+ sp|Q72R84|MURG_LEPIC 90 KLNIDVVIGMGGYSTVSSILYGIFFRKKIYLCEQNTIPGNVNRLFFRFASKVA 142 ************************************************99986 PP >> sp|Q8F4J1|MURG_LEPIN UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 41.3 0.2 7e-12 3.9e-09 1 138 [. 4 142 .. 4 143 .. 0.87 Alignments for each domain: == domain 1 score: 41.3 bits; conditional E-value: 7e-12 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------...-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakl..eslktlkelaeglkalrkakeilk 85 +v+++gGT+G++ P vAla+ L + + ++ ++ + + + + + ++ ++ lw +l s+++++ + + ++ k+++i+k sp|Q8F4J1|MURG_LEPIN 4 IVIVAGGTGGHISPGVALAEVLTELKEK--IGYENLYLYSLvrNKNNPDLEQAPCP-VLWHNLppLSSNFFLFPIRYTIQIIKTFFIFK 89 799*********************9944..68888766655588888888888888.5555432258888999999999********** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 + ++dvv+g+ggy+ + ++ ++ + ++++ Eqn ipg vn+l+ r+a +v+ sp|Q8F4J1|MURG_LEPIN 90 KLNIDVVIGMGGYSTVSSILYGIFFRKKIYLCEQNTIPGNVNRLFFRFASKVA 142 ************************************************99986 PP >> sp|Q4FPK5|MURG_PELUB UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 40.5 0.0 1.3e-11 7.1e-09 1 138 [. 5 138 .. 5 139 .. 0.90 Alignments for each domain: == domain 1 score: 40.5 bits; conditional E-value: 1.3e-11 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakp 89 +++++gG++G+v Pa + ++L + +V + + + ++f+ +++++ + +++ + ++ l ++++ ++k+ ++++k+ sp|Q4FPK5|MURG_PELUB 5 ILISTGGSGGHVIPATIIYKHLEDNF-DVSMTSDFRGVKFLNKDEYNLKIFNVR-PISKN--LLIIPLDFIFMIFLIFKSISFFRKNKI 89 6899******************9876.***************999999999999.77774..45555555555557899999******* PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCCS CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangvl 138 d+++++ggy +++++++a+ ++i++ + E n + g +nk++ ++ +++ sp|Q4FPK5|MURG_PELUB 90 DTLISTGGYMSLPLCLGARILNIKLLLFEPNMVLGRSNKFFLSYCQKIF 138 *****************************************99998875 PP >> sp|Q04V94|MURG_LEPBJ UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 36.2 0.2 2.7e-10 1.5e-07 1 137 [. 4 141 .. 4 143 .. 0.89 Alignments for each domain: == domain 1 score: 36.2 bits; conditional E-value: 2.7e-10 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------...-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakl..eslktlkelaeglkalrkakeilk 85 +v+a+gGT+G++ P vAla+ L + + ++ ++ + + + + + ++ ++ lw +l s++ ++ +++ ++ k++ ++k sp|Q04V94|MURG_LEPBJ 4 IVIAAGGTGGHISPGVALAEVLTDLKEK--IGYENLYLYSLirNQNNPDLEQAPCP-VLWHNLppLSSNIFLFPFRYTIQILKTFLLFK 89 79**********************9944..68888877766688888888888888.5555432268999999**************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 + + dvv+g+ggy+ + ++ +l + ++++ Eqn +pg v +l+ r+an++ sp|Q04V94|MURG_LEPBJ 90 KLNVDVVIGMGGYSTVSSILYGILFKKKIYLCEQNTVPGNVSRLFFRFANKA 141 *************************************************997 PP >> sp|Q04Y82|MURG_LEPBL UDP-N-acetylglucosamine--N-acetylmuramyl-(pentapeptide) pyrophosphoryl-undecaprenol N-acetylglu # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 36.2 0.2 2.7e-10 1.5e-07 1 137 [. 4 141 .. 4 143 .. 0.89 Alignments for each domain: == domain 1 score: 36.2 bits; conditional E-value: 2.7e-10 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------...-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakl..eslktlkelaeglkalrkakeilk 85 +v+a+gGT+G++ P vAla+ L + + ++ ++ + + + + + ++ ++ lw +l s++ ++ +++ ++ k++ ++k sp|Q04Y82|MURG_LEPBL 4 IVIAAGGTGGHISPGVALAEVLTDLKEK--IGYENLYLYSLirNQNNPDLEQAPCP-VLWHNLppLSSNIFLFPFRYTIQILKTFLLFK 89 79**********************9944..68888877766688888888888888.5555432268999999**************** PP HHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSCCC CS Glyco_transf_28 86 eakpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprrangv 137 + + dvv+g+ggy+ + ++ +l + ++++ Eqn +pg v +l+ r+an++ sp|Q04Y82|MURG_LEPBL 90 KLNVDVVIGMGGYSTVSSILYGILFKKKIYLCEQNTVPGNVSRLFFRFANKA 141 *************************************************997 PP >> sp|Q8TTI1|Y452_METAC Uncharacterized glycosyltransferase MA_0452 OS=Methanosarcina acetivorans GN=MA_0452 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 33.5 0.0 1.8e-09 9.9e-07 10 103 .. 13 111 .. 4 164 .. 0.82 Alignments for each domain: == domain 1 score: 33.5 bits; conditional E-value: 1.8e-09 --HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.........S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 10 GdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.........vklwakleslktlkelaeglkalrkakeilkeakp 89 G+ ++Al++eL ++Ghe+++++ +e ve++g++a++i+++ + l +tlk+++ + k+ ++l+e+kp sp|Q8TTI1|Y452_METAC 13 GHTSRCLALGKELLNAGHEIKFGAYGYSKELVEKTGYTAQEIPSEiklvgkagsLDLTG--SIEATLKSAQLL--GGPKLLKLLREFKP 97 9********************************************99988887766666..567777777777..778899******** PP HHHHHC----EEEE CS Glyco_transf_28 90 dvvvgfggyvadla 103 dvvv+ y +la sp|Q8TTI1|Y452_METAC 98 DVVVSDSYYLGTLA 111 ***87665444444 PP >> sp|Q8TTI0|Y453_METAC Uncharacterized glycosyltransferase MA_0453 OS=Methanosarcina acetivorans GN=MA_0453 PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 28.7 0.0 5.5e-08 3.1e-05 10 113 .. 13 118 .. 3 128 .. 0.78 Alignments for each domain: == domain 1 score: 28.7 bits; conditional E-value: 5.5e-08 --HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.........S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 10 GdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.........vklwakleslktlkelaeglkalrkakeilkeakp 89 G+ ++Al++e+ ++GheV +++ +e v+++g++a +i+p+ + +tl++l + ++rk+ ++++ +p sp|Q8TTI0|Y453_METAC 13 GHTSRCLALGKEFLAAGHEVSFGAYGYSRELVRKTGYSAWEIQPEirligetgiFDIGK--SIKETLRNLSPV--GFRKLLKLIEVLEP 97 9********************************************99987766644444..344455555555..77899999****** PP HHHHHC----EEEE--HHHHHHHH CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagip 113 dvv++ g y+ ++aa+++++p sp|Q8TTI0|Y453_METAC 98 DVVLSDGYYS---GILAARSRKVP 118 ***9988444...44555666655 PP >> sp|Q8PWF3|Y1636_METMA Uncharacterized glycosyltransferase MM_1636 OS=Methanosarcina mazei GN=MM_1636 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 30.0 0.0 2.2e-08 1.2e-05 10 112 .. 13 117 .. 4 143 .. 0.76 Alignments for each domain: == domain 1 score: 30.0 bits; conditional E-value: 2.2e-08 --HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.........S------.-HHHCCSHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 10 GdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.........vklwakleslktlkelaeglkalrkakeilkeak 88 G+ ++Al++eL ++Ghe+++++ ++ ve++g+ +++i+++ l +tlk++ + k+ +++k++k sp|Q8PWF3|Y1636_METMA 13 GHTSRCLALGKELLAAGHEIEFGAYGYSRDLVEKTGYRIHEIPSEiklvgkaggFDLSG--SIEATLKNARIL--GGPKVLKLIKDFK 96 9********************************************99977664422222..334444444444..55689999***** PP HHHHHHC----EEEE--HHHHHHH CS Glyco_transf_28 89 pdvvvgfggyvadlaliaallagi 112 pdvvv+ l ++aa l++i sp|Q8PWF3|Y1636_METMA 97 PDVVVSDS---YYLGTLAAMLLNI 117 ***97755...4444444445555 PP >> sp|O34539|YJIC_BACSU Uncharacterized UDP-glucosyltransferase yjiC OS=Bacillus subtilis GN=yjiC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 28.9 0.0 4.8e-08 2.7e-05 6 93 .. 11 104 .. 6 124 .. 0.79 Alignments for each domain: == domain 1 score: 28.9 bits; conditional E-value: 4.8e-08 ------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....S------.-HHHCCSHHHHHHH.HHHHHHHHHHHH CS Glyco_transf_28 6 gGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.....vklwakleslktlkelaeglka.lrkakeilkeak 88 +++ G+v P +Al ++L ++Gh+V+ at++++++ v +ag ea + + + ++ +e+++++++l+++ + l +++e++k+++ sp|O34539|YJIC_BACSU 11 IPAYGHVNPTLALVEKLCEKGHRVTYATTEEFAPAVQQAGGEALIYHTSlnidpKQIREMMEKNDAPLSLLKESLSiLPQLEELYKDDQ 99 5667************************************9999988777777846666556666666666654441568888889998 PP HHHHH CS Glyco_transf_28 89 pdvvv 93 pd+++ sp|O34539|YJIC_BACSU 100 PDLII 104 88874 PP >> sp|Q53685|OLED_STRAT Oleandomycin glycosyltransferase OS=Streptomyces antibioticus GN=oleD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 27.6 0.1 1.2e-07 6.6e-05 1 59 [. 10 75 .. 10 132 .. 0.76 Alignments for each domain: == domain 1 score: 27.6 bits; conditional E-value: 1.2e-07 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.......S---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.......vklwa 59 +++ ++ + G+v P++ + reL +rGh+V+ a+pp ++++v+++g v + + ++w sp|Q53685|OLED_STRAT 10 IAMFSIAAHGHVNPSLEVIRELVARGHRVTYAIPPVFADKVAATGPRPVLYHSTlpgpdadPEAWG 75 577889999************************************999988888555556533333 PP >> sp|Q8PZB2|Y582_METMA Uncharacterized glycosyltransferase MM_0582 OS=Methanosarcina mazei GN=MM_0582 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 28.2 0.0 8e-08 4.5e-05 10 112 .. 13 117 .. 3 129 .. 0.74 Alignments for each domain: == domain 1 score: 28.2 bits; conditional E-value: 8e-08 --HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.........S------.-HHHCCSHHHHH..HHHHHHHHHHHHH CS Glyco_transf_28 10 GdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.........vklwakleslktlkelaegl..kalrkakeilkea 87 G+ ++Al++e+ ++GheV +++ + v ++g++a++i+++ + k +ke++++l ++rk+ +++++ sp|Q8PZB2|Y582_METMA 13 GHTGRCLALGKEFLAAGHEVNFGAYGYSKGLVQKTGYSAYEIPSEiklageagtF------DIRKSIKETLNNLspSGFRKILRLIEKL 95 99999****************************************7664444332......333444444443322378999999**** PP HHHHHHHC----EEEE--HHHHHHH CS Glyco_transf_28 88 kpdvvvgfggyvadlaliaallagi 112 pdvv++ g y ++aa ++++ sp|Q8PZB2|Y582_METMA 96 DPDVVLSDGYY---TGILAAQKRKV 117 *****998844...34444555554 PP >> sp|P21686|CRTX_PANAN Zeaxanthin glucosyltransferase OS=Pantoea ananas GN=crtX PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 25.9 0.1 3.9e-07 0.00022 11 126 .. 14 131 .. 13 135 .. 0.79 Alignments for each domain: == domain 1 score: 25.9 bits; conditional E-value: 3.9e-07 -HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----..........S------.-HHHCCSHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 11 dvePavAlareLqrrGheVrlatppgleefveeagleavpigpd..........vklwakleslktlkelaeglkalrkakeilkeakp 89 +v + la+eL +rGh+V+++ + ++++ + ++ + ++++g+d + l+a+ +++lk + e ++ + + sp|P21686|CRTX_PANAN 14 HVRALQNLAQELVARGHRVTFIQQYDIKHLIDSETIGFHSVGTDshppgaltrvLHLAAHPLGPSMLKLINEM-------ARTTDMLCR 95 67777779***************************************98887776677766666666666666.......555555555 PP HHHHHC----EEEE--HHHHHHHHHHHHHH----EEE CS Glyco_transf_28 90 dvvvgfggyvadlaliaallagipanvaEqngipglv 126 +++ +f a++ +i + + + a vaE++g+p+++ sp|P21686|CRTX_PANAN 96 ELPQAFN-DLAVDGVIVDQMEPAGALVAEALGLPFIS 131 5555554.4567777779999999**********986 PP >> sp|Q54387|MGT_STRLI Macrolide glycosyltransferase OS=Streptomyces lividans GN=mgt PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 23.5 0.0 2.2e-06 0.0013 9 54 .. 33 78 .. 25 136 .. 0.72 Alignments for each domain: == domain 1 score: 23.5 bits; conditional E-value: 2.2e-06 ---HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE---- CS Glyco_transf_28 9 rGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd 54 G+v P++ + reL +rGh+V+ a+p+ l+++v+eag e + ++ sp|Q54387|MGT_STRLI 33 HGHVNPSLEVIRELVARGHRVTYAIPRLLADKVAEAGAEPKLWNST 78 6***********************************9876655555 PP >> sp|Q01330|CRTX_ESCVU Zeaxanthin glucosyltransferase OS=Escherichia vulneris GN=crtX PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 23.1 0.2 2.9e-06 0.0017 15 125 .. 18 125 .. 13 129 .. 0.82 Alignments for each domain: == domain 1 score: 23.1 bits; conditional E-value: 2.9e-06 HHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----.....S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC-- CS Glyco_transf_28 15 avAlareLqrrGheVrlatppgleefv.eeagleavpigpd.....vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfgg 97 + Ala e +rGh+V++ t + e++ ++++p+++ +++ +s+++l++l + + +l + ++ + ++ + sp|Q01330|CRTX_ESCVU 18 LHALALEMAQRGHRVTFLTGNVASLAEqETERVAFYPLPASvqqaqRNVQQ--QSNGNLLRLIAA-------MSSLTDVLCQQLPAILQ 97 78**************998887777778**********9998554333333..566666666666.......8888888888888888* PP --EEEE--HHHHHHHHHHHHHH----EE CS Glyco_transf_28 98 yvadlaliaallagipanvaEqngipgl 125 + a++ali + + + vaE++g+p++ sp|Q01330|CRTX_ESCVU 98 RLAVDALIVDEMEPAGSLVAEALGLPFI 125 **************************97 PP >> sp|O31853|YOJK_BACSU Uncharacterized UDP-glucosyltransferase yojK OS=Bacillus subtilis GN=yojK PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.5 0.0 0.00065 0.36 1 53 [. 4 56 .. 4 125 .. 0.82 2 ? 2.3 0.0 7.7 4.3e+03 30 98 .. 189 270 .. 181 275 .. 0.86 Alignments for each domain: == domain 1 score: 15.5 bits; conditional E-value: 0.00065 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE--- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigp 53 v+++g++ G++ P++ +++eL+ rG +++ + ++++e++++ +e++++ sp|O31853|YOJK_BACSU 4 VLMIGFPGEGHINPSIGVMKELKSRGENITYYAVKEYKEKITALDIEFREYHD 56 678899999*********************9999999****999999999865 PP == domain 2 score: 2.3 bits; conditional E-value: 7.7 EEEETGGGHHHHHH---EEEE----..............S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC--- CS Glyco_transf_28 30 rlatppgleefveeagleavpigpd..............vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggy 98 ++ t++g+ + e+ g +v +gp + + + l ++++ + + ++ + +++ e+ k++ +vv+++g+ sp|O31853|YOJK_BACSU 189 IVFTSRGFQPLAEQFGERYVFVGPSiteragnndfpfdqIDNENVL-FISMGTIFNNQKQFFNQCLEVCKDFDGKVVLSIGKH 270 5778999999999999999999999999999999999887777766.999999999999999999999999999999998876 PP >> sp|B1YIY4|MTNA_EXIS2 Methylthioribose-1-phosphate isomerase OS=Exiguobacterium sibiricum (strain DSM 17290 / JCM 134 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.4 0.0 8.6e-05 0.049 19 70 .. 201 251 .. 190 271 .. 0.87 Alignments for each domain: == domain 1 score: 18.4 bits; conditional E-value: 8.6e-05 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSH CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkel 70 +eLqr+G++V+l+t + ++++++e+ ++a +g+d + +++++ +++ ++ sp|B1YIY4|MTNA_EXIS2 201 TWELQRAGIDVTLITDNMVAHTIKEKQITAIIVGAD-RITRNGDTANKIGTF 251 69**********************************.888888776666555 PP >> sp|Q0WW21|UGAGT_ARATH Anthocyanin 5-O-glucosyltransferase OS=Arabidopsis thaliana GN=UGT75C1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.6 0.0 7e-05 0.039 2 55 .. 15 74 .. 14 130 .. 0.81 Alignments for each domain: == domain 1 score: 18.6 bits; conditional E-value: 7e-05 EEE-------HHHHHHHHHHHHH---EEE....EEETGGGHHHHHH---EEEE----..S CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVr....latppgleefveeagleavpigpd..v 55 +l+++++ G++ Pa+ la++L + G V+ + +++++ e ++gl++ + + + sp|Q0WW21|UGAGT_ARATH 15 LLVTFPAQGHINPALQLANRLIHHGATVTystaVSAHRRMGEPPSTKGLSFAWFTDGfdD 74 799**********************************************99887776542 PP >> sp|Q9Z565|ILVC1_STRCO Ketol-acid reductoisomerase 1 OS=Streptomyces coelicolor GN=ilvC1 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.0 0.0 0.00011 0.064 1 54 [. 20 70 .. 20 105 .. 0.83 Alignments for each domain: == domain 1 score: 18.0 bits; conditional E-value: 0.00011 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54 v+++g+G+ G+ A a L++ G +Vr++ ++g +++ ee+gl +vp++ sp|Q9Z565|ILVC1_STRCO 20 VAVIGYGSQGH-----AHALSLRDSGVDVRVGLHEGSKSKAkaEEQGLRVVPVAEA 70 67888999998.....77999******************9999*********9876 PP >> sp|O05496|YDHE_BACSU Uncharacterized UDP-glucosyltransferase ydhE OS=Bacillus subtilis GN=ydhE PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.3 0.0 9.1e-05 0.051 2 49 .. 5 52 .. 4 103 .. 0.82 Alignments for each domain: == domain 1 score: 18.3 bits; conditional E-value: 9.1e-05 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEE CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleav 49 +++ +++ G+v P + + +++ ++G++V+ ++++++++++e+ag +++ sp|O05496|YDHE_BACSU 5 LILNFPAEGHVNPTLGITKAFSDKGYDVHYISTEKYKKRLEAAGATVH 52 67778999************************************8865 PP >> sp|Q9FBT8|ILVC2_STRCO Ketol-acid reductoisomerase 2 OS=Streptomyces coelicolor GN=ilvC2 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.0 0.0 0.00011 0.064 1 54 [. 20 70 .. 20 105 .. 0.83 Alignments for each domain: == domain 1 score: 18.0 bits; conditional E-value: 0.00011 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54 v+++g+G+ G+ A a L++ G +Vr++ ++g +++ ee+gl +vp++ sp|Q9FBT8|ILVC2_STRCO 20 VAVIGYGSQGH-----AHALSLRDSGVDVRVGLHEGSKSKAkaEEQGLRVVPVAEA 70 67888999998.....77999******************9999*********9876 PP >> sp|Q9SBL1|HMNGT_SORBI Cyanohydrin beta-glucosyltransferase OS=Sorghum bicolor GN=UGT85B1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.5 0.1 7.8e-05 0.044 1 55 [. 13 83 .. 13 152 .. 0.76 Alignments for each domain: == domain 1 score: 18.5 bits; conditional E-value: 7.8e-05 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE----...............S CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavpigpd...............v 55 vvl+ ++ G+v P++ lar L +rG +V+ + t+ ++++ ++++g +av ++ + sp|Q9SBL1|HMNGT_SORBI 13 VVLVPFPGQGHVAPLMQLARLLHARGARVTfVYTQYNYRRLLRAKGEAAVRPPATssarfrieviddglsL 83 688889999*********************************99999988755554555555555555554 PP >> sp|B1I2P1|MTNA_DESAP Methylthioribose-1-phosphate isomerase OS=Desulforudis audaxviator (strain MP104C) GN=mtnA PE=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 16.4 0.1 0.00034 0.19 18 62 .. 199 242 .. 184 278 .. 0.82 Alignments for each domain: == domain 1 score: 16.4 bits; conditional E-value: 0.00034 HHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------. CS Glyco_transf_28 18 lareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakle 62 a+eL+r+G+eV + + ++++ + + +gl+ v +g+d +++a+++ sp|B1I2P1|MTNA_DESAP 199 TAWELMREGIEV-VLVADNMAGYLmAREGLDLVIVGAD-RVAANGD 242 69**********.667777777777*************.8888763 PP >> sp|A8AZU1|MUTL_STRGC DNA mismatch repair protein mutL OS=Streptococcus gordonii (strain Challis / ATCC 35105 / CH1 / # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.1 0.0 0.015 8.6 55 127 .. 194 265 .. 129 268 .. 0.84 2 ? 2.6 0.0 6.1 3.5e+03 105 136 .. 315 346 .. 308 348 .. 0.89 Alignments for each domain: == domain 1 score: 11.1 bits; conditional E-value: 0.015 S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS Glyco_transf_28 55 vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127 + + +++l+++ +g +l ak+ ++ d+++++ gyv+++ l+ a++++i + ++ + +l n sp|A8AZU1|MUTL_STRGC 194 REMTRTA-GSGNLRQAIAGIYGLATAKKMVEISASDLDFEVSGYVSLPELTRANRNYITILINGRYIKNFLLN 265 4455544.789999999*******************************************9998887766666 PP == domain 2 score: 2.6 bits; conditional E-value: 6.1 -HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 105 iaallagipanvaEqngipglvnkllprrang 136 a +++ i+a + Eq+ ip++ l + ++++ sp|A8AZU1|MUTL_STRGC 315 MALISQAIAASLKEQDLIPDALENLAKSTVKR 346 67889****************99999888876 PP >> sp|Q01198|LIGD_PSEPA C alpha-dehydrogenase OS=Pseudomonas paucimobilis GN=ligD PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 16.4 0.0 0.00034 0.19 20 91 .. 173 244 .. 171 279 .. 0.88 Alignments for each domain: == domain 1 score: 16.4 bits; conditional E-value: 0.00034 HHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 20 reLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdv 91 ++L ++G+ V ++tp ++++ + e++ l ++g+ ++ ++ es++ l ++++ + + +k+ e++k+ +d sp|Q01198|LIGD_PSEPA 173 QGLEKYGIGVSVCTPANIKSNIaEASRLRPAKYGTS-GYVENEESIASLHSIHQHGLEPEKLAEAIKKGVEDN 244 689*********************************.9999999********************999877665 PP >> sp|Q83RR8|NPD_SHIFL NAD-dependent deacetylase OS=Shigella flexneri GN=npdA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.8 0.0 0.0021 1.2 2 31 .. 209 239 .. 209 254 .. 0.80 Alignments for each domain: == domain 1 score: 13.8 bits; conditional E-value: 0.0021 EEE-------HHHHHHHHHHHHH--.-EEEE CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrG.heVrl 31 v++++GT G+v+Pa+ + +e + G h V+l sp|Q83RR8|NPD_SHIFL 209 VFIAIGTSGHVYPAAGFVHEAKLHGaHTVEL 239 789***************9999888344445 PP >> sp|C5D7U5|MTNA_GEOSW Methylthioribose-1-phosphate isomerase OS=Geobacillus sp. (strain WCH70) GN=mtnA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 16.1 0.0 0.00042 0.24 19 69 .. 205 254 .. 198 280 .. 0.87 Alignments for each domain: == domain 1 score: 16.1 bits; conditional E-value: 0.00042 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCS CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlke 69 +eL+++G +V+l+t + + ++++++++av +g+d + +a++++ +++ + sp|C5D7U5|MTNA_GEOSW 205 TWELMQAGVDVTLITDNMAAQTIKAKNITAVIVGAD-RIAANGDTANKIGT 254 69**********************************.88888877666655 PP >> sp|A3CR14|MUTL_STRSV DNA mismatch repair protein mutL OS=Streptococcus sanguinis (strain SK36) GN=mutL PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.9 0.0 0.017 9.4 56 127 .. 195 265 .. 131 268 .. 0.87 2 ? 2.2 0.0 8.4 4.7e+03 105 136 .. 315 346 .. 309 348 .. 0.88 Alignments for each domain: == domain 1 score: 10.9 bits; conditional E-value: 0.017 ------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS Glyco_transf_28 56 klwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127 + + +++l+++ +g +l ak+ ++ d+++++ gyv+++ l+ a++++i + ++ + +l n sp|A3CR14|MUTL_STRSV 195 EMTRTA-GSGNLRQAIAGIYGLATAKKMVEISASDLDFEVSGYVSLPELTRANRNYITILINGRYIKNFLLN 265 445544.7899999999******************************************9998887766666 PP == domain 2 score: 2.2 bits; conditional E-value: 8.4 -HHHHHHHHHHHHHH----EEEEESSGGGSCC CS Glyco_transf_28 105 iaallagipanvaEqngipglvnkllprrang 136 a +++ i++ + Eq+ ip++ l + ++++ sp|A3CR14|MUTL_STRSV 315 MALISQAIATSLKEQDLIPDALENLAKSTVKR 346 67889***************999998888876 PP >> sp|Q88M09|MTNA_PSEPK Methylthioribose-1-phosphate isomerase OS=Pseudomonas putida (strain KT2440) GN=mtnA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.5 0.0 0.00066 0.37 19 69 .. 211 260 .. 205 290 .. 0.88 Alignments for each domain: == domain 1 score: 15.5 bits; conditional E-value: 0.00066 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCS CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlke 69 ++eL ++G+ V+l++ +l++ +++g++ v +g+d + +a++++ +++ + sp|Q88M09|MTNA_PSEPK 211 GWELANEGIPVTLCADSALAHLMKTKGITWVVVGAD-CIAANGDMAGKIGT 260 8***********************************.88888877776654 PP >> sp|Q5L1E6|MTNA_GEOKA Methylthioribose-1-phosphate isomerase OS=Geobacillus kaustophilus GN=mtnA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.2 0.0 0.0008 0.45 18 69 .. 203 253 .. 197 288 .. 0.84 Alignments for each domain: == domain 1 score: 15.2 bits; conditional E-value: 0.0008 HHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCS CS Glyco_transf_28 18 lareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlke 69 a+eL+++G +V+l+t + + ++++g+ a +g+d + ++++++ +++ + sp|Q5L1E6|MTNA_GEOKA 203 TAWELMQAGVDVTLITDNMAAQAIKAKGIGAIIVGAD-RIAQNGDTANKIGT 253 59***********************************.77777766665554 PP >> sp|Q8X8E0|NPD_ECO57 NAD-dependent deacetylase OS=Escherichia coli O157:H7 GN=npdA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.2 0.0 0.0033 1.9 3 31 .. 210 239 .. 209 254 .. 0.80 Alignments for each domain: == domain 1 score: 13.2 bits; conditional E-value: 0.0033 EE-------HHHHHHHHHHHHH--.-EEEE CS Glyco_transf_28 3 laggGTrGdvePavAlareLqrrG.heVrl 31 ++++GT G+v+Pa+ + +e + G h V+l sp|Q8X8E0|NPD_ECO57 210 FIAIGTSGHVYPAAGFVHEAKLHGaHTVEL 239 889**************9999888344445 PP >> sp|P75960|NPD_ECOLI NAD-dependent deacetylase OS=Escherichia coli (strain K12) GN=npdA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.3 0.0 0.0031 1.8 3 33 .. 210 241 .. 209 264 .. 0.82 Alignments for each domain: == domain 1 score: 13.3 bits; conditional E-value: 0.0031 EE-------HHHHHHHHHHHHH--.-EEEEEE CS Glyco_transf_28 3 laggGTrGdvePavAlareLqrrG.heVrlat 33 ++++GT G+v+Pa+ + +e + G h V+l sp|P75960|NPD_ECOLI 210 FIAIGTSGHVYPAAGFVHEAKLHGaHTVELNL 241 889***************99988834454655 PP >> sp|Q5V467|MAMA1_HALMA Methylaspartate mutase S chain 1 OS=Haloarcula marismortui GN=mamA1 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 16.3 0.5 0.00037 0.21 1 50 [. 10 61 .. 10 147 .. 0.81 Alignments for each domain: == domain 1 score: 16.3 bits; conditional E-value: 0.00037 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavp 50 v+l ++G+ +v + l ++L ++G eV+ l+++ + +efv +++ +a++ sp|Q5V467|MAMA1_HALMA 10 VILGVIGSDAHVVGITILEQALSAAGFEVInLGVQTAQDEFVsAAKSHDAEA 61 57889*************************************7555555554 PP >> sp|C0MAS4|MUTL_STRE4 DNA mismatch repair protein mutL OS=Streptococcus equi subsp. equi (strain 4047) GN=mutL PE=3 S # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.7 0.0 0.0012 0.65 50 127 .. 189 265 .. 150 268 .. 0.84 Alignments for each domain: == domain 1 score: 14.7 bits; conditional E-value: 0.0012 E----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS Glyco_transf_28 50 pigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127 i + +l + + l+++++g +l+ ak+ + ++d+++++gg+v+++ l+ a++++i + ++ + +l n sp|C0MAS4|MUTL_STRE4 189 LISDGKQLTQTS-GAGDLRQALAGIYGLNTAKKMIDISSADLDFEVGGFVSLPELTRANRNYITILINGRYIKNFLLN 265 555554555544.67889999********************************************9998887766666 PP >> sp|P0A2F2|NPD_SALTY NAD-dependent deacetylase OS=Salmonella typhimurium GN=npdA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.6 0.0 0.0025 1.4 3 36 .. 210 244 .. 209 259 .. 0.79 Alignments for each domain: == domain 1 score: 13.6 bits; conditional E-value: 0.0025 EE-------HHHHHHHHHHHHH--.-EEEEEETGG CS Glyco_transf_28 3 laggGTrGdvePavAlareLqrrG.heVrlatppg 36 ++++GT G+v+Pa+ + +e + G h V+l +p sp|P0A2F2|NPD_SALTY 210 FIAIGTSGHVYPAAGFVHEAKLHGaHTVELNLEPS 244 889****************9998845555666665 PP >> sp|P0A2F3|NPD_SALTI NAD-dependent deacetylase OS=Salmonella typhi GN=npdA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.6 0.0 0.0025 1.4 3 36 .. 210 244 .. 209 259 .. 0.79 Alignments for each domain: == domain 1 score: 13.6 bits; conditional E-value: 0.0025 EE-------HHHHHHHHHHHHH--.-EEEEEETGG CS Glyco_transf_28 3 laggGTrGdvePavAlareLqrrG.heVrlatppg 36 ++++GT G+v+Pa+ + +e + G h V+l +p sp|P0A2F3|NPD_SALTI 210 FIAIGTSGHVYPAAGFVHEAKLHGaHTVELNLEPS 244 889****************9998845555666665 PP >> sp|C0MGC4|MUTL_STRS7 DNA mismatch repair protein mutL OS=Streptococcus equi subsp. zooepidemicus (strain H70) GN=mut # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.5 0.0 0.0014 0.77 56 127 .. 195 265 .. 152 268 .. 0.84 Alignments for each domain: == domain 1 score: 14.5 bits; conditional E-value: 0.0014 ------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS Glyco_transf_28 56 klwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127 +l + + l+++++g +l+ ak+ + ++d+++++gg+v+++ l+ a++++i + ++ + +l n sp|C0MGC4|MUTL_STRS7 195 QLTQTS-GTGDLRQALAGIYGLNTAKKMIDISSADLDFEVGGFVSLPELTRANRNYITILINGRYIKNFLLN 265 444444.6678999999******************************************9998887766666 PP >> sp|Q65KK2|MTNA_BACLD Methylthioribose-1-phosphate isomerase OS=Bacillus licheniformis (strain DSM 13 / ATCC 14580) G # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.1 0.0 0.00085 0.48 18 70 .. 204 255 .. 194 281 .. 0.86 Alignments for each domain: == domain 1 score: 15.1 bits; conditional E-value: 0.00085 HHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSH CS Glyco_transf_28 18 lareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkel 70 a+eL++ G++V+l+t +++ +e++++av +g+d + ++++++ +++ ++ sp|Q65KK2|MTNA_BACLD 204 TAWELMQGGIDVTLITDSMAAHTMKEKNISAVIVGAD-RIARNGDTANKIGTF 255 69***********************************.999988777766655 PP >> sp|B0KTX5|MTNA_PSEPG Methylthioribose-1-phosphate isomerase OS=Pseudomonas putida (strain GB-1) GN=mtnA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.1 0.0 0.00089 0.5 19 63 .. 211 254 .. 204 293 .. 0.84 Alignments for each domain: == domain 1 score: 15.1 bits; conditional E-value: 0.00089 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.- CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakles 63 a+eL ++G+ V+l++ +l++ +++g++ v +g+d + +a+++ sp|B0KTX5|MTNA_PSEPG 211 AWELANEGIPVTLCADSALAHLMKTKGITWVVVGAD-CIAANGDV 254 9***********************************.66665543 PP >> sp|B1J5G5|MTNA_PSEPW Methylthioribose-1-phosphate isomerase OS=Pseudomonas putida (strain W619) GN=mtnA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.4 0.0 0.00072 0.41 19 64 .. 211 255 .. 204 291 .. 0.84 Alignments for each domain: == domain 1 score: 15.4 bits; conditional E-value: 0.00072 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-H CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwaklesl 64 a+eL ++G+ V+l++ +l++ +++g++ v +g+d + +a+++ sp|B1J5G5|MTNA_PSEPW 211 AWELANEGIPVTLCADSALAHLMKSKGITWVVVGAD-CIAANGDVA 255 9***********************************.666655444 PP >> sp|A5W7G2|MTNA_PSEP1 Methylthioribose-1-phosphate isomerase OS=Pseudomonas putida (strain F1 / ATCC 700007) GN=mtnA # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.1 0.0 0.0009 0.51 19 63 .. 211 254 .. 204 292 .. 0.84 Alignments for each domain: == domain 1 score: 15.1 bits; conditional E-value: 0.0009 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.- CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakles 63 a+eL ++G+ V+l++ +l++ +++g++ v +g+d + +a+++ sp|A5W7G2|MTNA_PSEP1 211 AWELANEGIPVTLCADSALAHLMKTKGITWVVVGAD-CIAANGDV 254 9***********************************.66665543 PP >> sp|A4ILL1|MTNA_GEOTN Methylthioribose-1-phosphate isomerase OS=Geobacillus thermodenitrificans (strain NG80-2) GN=mt # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.3 0.0 0.0015 0.86 18 69 .. 203 253 .. 197 287 .. 0.84 Alignments for each domain: == domain 1 score: 14.3 bits; conditional E-value: 0.0015 HHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCS CS Glyco_transf_28 18 lareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlke 69 a+eL+++G +V+l+t + + ++++++++a +g+d + ++++++ +++ + sp|A4ILL1|MTNA_GEOTN 203 TAWELMQAGVDVTLITDNMAAQTIKAKNINAIIVGAD-RIAQNGDTANKIGT 253 59***********************************.77776666555544 PP >> sp|B4U0J7|MUTL_STREM DNA mismatch repair protein mutL OS=Streptococcus equi subsp. zooepidemicus (strain MGCS10565) # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.5 0.0 0.0014 0.77 56 127 .. 195 265 .. 153 268 .. 0.84 Alignments for each domain: == domain 1 score: 14.5 bits; conditional E-value: 0.0014 ------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS Glyco_transf_28 56 klwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127 +l + + l+++++g +l+ ak+ + ++d+++++gg+v+++ l+ a++++i + ++ + +l n sp|B4U0J7|MUTL_STREM 195 QLTQTS-GTGDLRQALAGIYGLNTAKKMIDISSADLDFEVGGFVSLPELTRANRNYITILINGRYIKNFLLN 265 444444.6678999999******************************************9998887766666 PP >> sp|Q8FIM4|NPD_ECOL6 NAD-dependent deacetylase OS=Escherichia coli O6 GN=npdA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.2 0.0 0.0033 1.9 3 31 .. 210 239 .. 209 254 .. 0.80 Alignments for each domain: == domain 1 score: 13.2 bits; conditional E-value: 0.0033 EE-------HHHHHHHHHHHHH--.-EEEE CS Glyco_transf_28 3 laggGTrGdvePavAlareLqrrG.heVrl 31 ++++GT G+v+Pa+ + +e + G h V+l sp|Q8FIM4|NPD_ECOL6 210 FIAIGTSGHVYPAAGFVHEAKLHGaHTVEL 239 889**************9999888344445 PP >> sp|B2GFJ7|ILVC_KOCRD Ketol-acid reductoisomerase OS=Kocuria rhizophila (strain ATCC 9341 / DSM 348 / NBRC 103217 / D # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.6 0.0 0.0013 0.72 1 55 [. 20 83 .. 20 110 .. 0.74 Alignments for each domain: == domain 1 score: 14.6 bits; conditional E-value: 0.0013 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----............S CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd............v 55 v+++g+G+ G+ A a L++ G +Vr++ +g +++ e++gl++ +i+ + sp|B2GFJ7|ILVC_KOCRD 20 VAIIGYGSQGH-----AHALNLRDSGVDVRIGLNEGSKSRAkaEAEGLQVMSIAEAakeadvimiltpD 83 57888888888.....7799********************99999****99998773333333333332 PP >> sp|B1VZ72|ILVC_STRGG Ketol-acid reductoisomerase OS=Streptomyces griseus subsp. griseus (strain JCM 4626 / NBRC 1335 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.7 0.0 0.0012 0.67 1 50 [. 20 66 .. 20 103 .. 0.83 Alignments for each domain: == domain 1 score: 14.7 bits; conditional E-value: 0.0012 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavp 50 v+++g+G+ G+ A a L++ G +Vr++ ++g +++ ee+gl +v+ sp|B1VZ72|ILVC_STRGG 20 VAVLGYGSQGH-----AHALSLRDSGVDVRVGLHEGSKSKAkaEEQGLRVVT 66 67889999999.....77999******************9988999998864 PP >> sp|Q59818|ILVC_STRAW Ketol-acid reductoisomerase OS=Streptomyces avermitilis GN=ilvC PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.5 0.0 0.0013 0.73 1 50 [. 20 66 .. 20 106 .. 0.80 Alignments for each domain: == domain 1 score: 14.5 bits; conditional E-value: 0.0013 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavp 50 v+++g+G+ G+ A a L++ G +Vr++ ++g +++ ee+gl +v+ sp|Q59818|ILVC_STRAW 20 VAVIGYGSQGH-----AHALSLRDSGVDVRVGLHEGSKSKAkaEEQGLRVVT 66 67888999998.....77999******************9988999998864 PP >> sp|Q731R7|MTNA_BACC1 Methylthioribose-1-phosphate isomerase OS=Bacillus cereus (strain ATCC 10987) GN=mtnA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.6 0.0 0.0052 2.9 19 65 .. 205 250 .. 203 298 .. 0.85 Alignments for each domain: == domain 1 score: 12.6 bits; conditional E-value: 0.0052 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HH CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslk 65 +eL+++G++V+l+t + ++ + +++++a +g+d + a++++ + sp|Q731R7|MTNA_BACC1 205 TWELKQAGIDVTLITDNTAAHAIQTKEINAIIVGAD-RIVANGDTAN 250 59**********************************.6666554444 PP >> sp|B1GZW3|TPIS_UNCTG Triosephosphate isomerase OS=Uncultured termite group 1 bacterium phylotype Rs-D17 GN=tpiA PE=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.8 0.0 0.0011 0.6 10 85 .. 119 194 .. 117 214 .. 0.72 Alignments for each domain: == domain 1 score: 14.8 bits; conditional E-value: 0.0011 --HHHHHHHHHHHHH---EEE.....EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHH CS Glyco_transf_28 10 GdvePavAlareLqrrGheVr.....latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilk 85 d+ P+v ++++L++r+ +V+ + +gl++ + +a l++ +++p wa + + kt ++ +++ +++++ + + sp|B1GZW3|TPIS_UNCTG 119 ADITPIVCVGETLKERENNVTfsvieKQVRNGLADLTlQQASLTVIAYEPV---WAIG-TGKTATPDQAQ--EVHSFIRKIY 194 7********************77433346789999999*******999999...7744.44444443333..5555544443 PP >> sp|Q2IWS4|GLYA_RHOP2 Serine hydroxymethyltransferase OS=Rhodopseudomonas palustris (strain HaA2) GN=glyA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.5 0.0 0.011 6.3 13 108 .. 25 121 .. 22 126 .. 0.82 Alignments for each domain: == domain 1 score: 11.5 bits; conditional E-value: 0.011 HHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC--- CS Glyco_transf_28 13 ePavAlareLqrrGheVrlatppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggy 98 e a+A+ eL r+ heV+l+++++++++ e++g + ++ + +++++ +++++ae+ a+++ak+++ +++v g++ sp|Q2IWS4|GLYA_RHOP2 25 EIAAAIKGELGRQRHEVELIASENIVSRAvlEAQGSVMTNkYAEGYPGARYY-GGCEFVDVAEN-LAIERAKKLFGAGFANVQPNSGSQ 111 7899**********************99887666654444577777777777.88889999998.999999999999999999999998 PP -EEEE--HHH CS Glyco_transf_28 99 vadlaliaal 108 + ++++a l sp|Q2IWS4|GLYA_RHOP2 112 MNQAVFLALL 121 8888888765 PP >> sp|A7GS56|MTNA_BACCN Methylthioribose-1-phosphate isomerase OS=Bacillus cereus subsp. cytotoxis (strain NVH 391-98) # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.6 0.0 0.0025 1.4 19 66 .. 205 251 .. 198 283 .. 0.84 Alignments for each domain: == domain 1 score: 13.6 bits; conditional E-value: 0.0025 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHH CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslkt 66 +eL+++G +V+l+t + ++++++++++a +g+d + a++++ ++ sp|A7GS56|MTNA_BACCN 205 TWELREAGVDVTLITDNMAAHTIRTKNISAIIVGAD-RIVANGDTANK 251 69**********************************.66666655444 PP >> sp|B7KF23|ILVC_CYAP7 Ketol-acid reductoisomerase OS=Cyanothece sp. (strain PCC 7424) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.3 0.0 0.0015 0.85 1 61 [. 20 76 .. 20 110 .. 0.78 Alignments for each domain: == domain 1 score: 14.3 bits; conditional E-value: 0.0015 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------ CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakl 61 v+++g+G+ G+ A a L++ G++V+++ pg ++ eeagl++++++ ++a + sp|B7KF23|ILVC_CYAP7 20 VAIIGYGSQGH-----AHALNLKDSGIDVIVGLYPGSKSAKkaEEAGLTVHSVADA-AAKADW 76 57888888888.....7799***************99987777*********9998.555433 PP >> sp|A5W1E8|RNZ_PSEP1 Ribonuclease Z OS=Pseudomonas putida (strain F1 / ATCC 700007) GN=rnz PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.1 0.0 0.0018 1 23 126 .. 138 237 .. 132 244 .. 0.83 Alignments for each domain: == domain 1 score: 14.1 bits; conditional E-value: 0.0018 HH---EEE.EEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHH CS Glyco_transf_28 23 qrrGheVr.latppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallag 111 +r + V + t+ + e+++ + l+a+ i+ + +lw e k l+ +++g +l + l++ +p v ++g + +al+aa ++g sp|A5W1E8|RNZ_PSEP1 138 SHRVPSVGfVFTEINPEPRLDIQRLDAEGIPRG-PLWG--ELAKGLTVTFNG--QLLNGNDYLRPSRPPQRVIVCGDNDKPALLAAVARG 222 455555555556666666777777888888888.****..88**********..************************************ PP HHHHHHHH----EEE CS Glyco_transf_28 112 ipanvaEqngipglv 126 + + v+E+ +v sp|A5W1E8|RNZ_PSEP1 223 ADVLVHEATFTQAVV 237 *******98766655 PP >> sp|B3QSP0|ILVC_CHLT3 Ketol-acid reductoisomerase OS=Chloroherpeton thalassium (strain ATCC 35110 / GB-78) GN=ilvC PE # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.5 0.0 0.0028 1.6 2 52 .. 20 67 .. 19 101 .. 0.84 Alignments for each domain: == domain 1 score: 13.5 bits; conditional E-value: 0.0028 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE-- CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpig 52 +++g+G+ G+ A a L++ G +V+++ +++ +++v e+agl +++ + sp|B3QSP0|ILVC_CHLT3 20 AVLGFGSQGH-----AHALNLKDSGMNVCVGLKENSASWVkaEKAGLMVEKTA 67 6777777777.....7799**********************99***9887755 PP >> sp|O31662|MTNA_BACSU Methylthioribose-1-phosphate isomerase OS=Bacillus subtilis GN=mtnA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.0 0.0 0.008 4.5 19 63 .. 205 248 .. 198 257 .. 0.87 Alignments for each domain: == domain 1 score: 12.0 bits; conditional E-value: 0.008 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.- CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakles 63 a+eL++ G++V+l+t +++ +e+ ++av +g+d + ++++++ sp|O31662|MTNA_BACSU 205 AWELMQGGIDVTLITDSMAAHTMKEKQISAVIVGAD-RIAKNGDT 248 9***********************************.76665544 PP >> sp|C1F6Z5|ILVC_ACIC5 Ketol-acid reductoisomerase OS=Acidobacterium capsulatum (strain ATCC 51196 / DSM 11244 / JCM 7 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.0 0.1 0.004 2.2 1 60 [. 20 75 .. 20 105 .. 0.78 Alignments for each domain: == domain 1 score: 13.0 bits; conditional E-value: 0.004 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S----- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwak 60 v+++g+G+ G+ A a +L++ G eVr++ p+ ++ ++agle+ +++ +wa sp|C1F6Z5|ILVC_ACIC5 20 VAIIGYGSQGH-----AHALGLKDSGVEVRVGLAPNSRSIEkaKKAGLETGTVAEV-AAWAD 75 67888999998.....77899*********999988876555599***99998888.77774 PP >> sp|Q2G3S7|PYRB_NOVAD Aspartate carbamoyltransferase OS=Novosphingobium aromaticivorans (strain DSM 12444) GN=pyrB PE # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 4.0 0.0 2.3 1.3e+03 63 125 .. 93 143 .. 67 145 .. 0.65 2 ? 8.6 0.0 0.09 50 22 47 .. 199 225 .. 196 282 .. 0.74 Alignments for each domain: == domain 1 score: 4.0 bits; conditional E-value: 2.3 -HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EE CS Glyco_transf_28 63 slktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipgl 125 + ++ +++ +g ++ +d+ + ad+++i +++g+++ +aE+ + p l sp|Q2G3S7|PYRB_NOVAD 93 MHAATSSVKKG-ET-----------LIDTAMTLNAMRADAIVIRHASSGAVRLIAEKVDCPVL 143 44444444444.33...........33444445555699******************999976 PP == domain 2 score: 8.6 bits; conditional E-value: 0.09 HHH---EEEEEETGGGHHHH.HH---E CS Glyco_transf_28 22 LqrrGheVrlatppgleefv.eeagle 47 L + G eVr+++pp+l++ e+ g++ sp|Q2G3S7|PYRB_NOVAD 199 LTALGAEVRVCAPPALMPAEiEAMGVT 225 8899*************9998999986 PP >> sp|Q96LB3|IFT74_HUMAN Intraflagellar transport protein 74 homolog OS=Homo sapiens GN=IFT74 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 3.2 0.2 4.2 2.4e+03 56 96 .. 349 387 .. 252 421 .. 0.79 2 ? 9.6 0.0 0.044 25 28 87 .. 505 562 .. 499 572 .. 0.88 Alignments for each domain: == domain 1 score: 3.2 bits; conditional E-value: 4.2 ------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC- CS Glyco_transf_28 56 klwakleslktlkelaeglkalrkakeilkeakpdvvvgfg 96 +++ e+++++kel ++ +++ + e+++e k + + + + sp|Q96LB3|IFT74_HUMAN 349 EHQG--EMNQKYKELKKREEHMDTFIETFEETKNQELKRKA 387 5666..89**********99999999999999977665544 PP == domain 2 score: 9.6 bits; conditional E-value: 0.044 EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 28 eVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 +++l t+++ +++ e++++e+++++++ l+++ + + l++l +++++l++ ++++ke+ sp|Q96LB3|IFT74_HUMAN 505 RMILSTHRNAFKKImEKQNIEYEALKTQ--LQENE-THSQLTNLERKWQHLEQNNFAMKEF 562 46799***********************..66655.*****************99999987 PP >> sp|A9AZM5|ILVC_HERA2 Ketol-acid reductoisomerase OS=Herpetosiphon aurantiacus (strain ATCC 23779 / DSM 785) GN=ilvC # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.5 0.1 0.0028 1.6 1 57 [. 20 73 .. 20 110 .. 0.79 Alignments for each domain: == domain 1 score: 13.5 bits; conditional E-value: 0.0028 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S-- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvkl 57 v+++g+G+ G+ A a L++ G +V ++ ++g +++ e+agl++ ++g +k+ sp|A9AZM5|ILVC_HERA2 20 VAIIGYGSQGH-----AHALNLKDSGVQVVVGLHEGSKSKAkaEAAGLQVLSVGEATKA 73 57888888888.....7799*******************9999******9999987443 PP >> sp|B8HSQ9|SURE_CYAP4 5'-nucleotidase surE OS=Cyanothece sp. (strain PCC 7425 / ATCC 29141) GN=surE PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.2 0.0 0.0069 3.9 18 59 .. 19 69 .. 15 96 .. 0.80 Alignments for each domain: == domain 1 score: 12.2 bits; conditional E-value: 0.0069 HHHHHHH---EEEEEETGGGHHHHHH---E.EEE----.........S---- CS Glyco_transf_28 18 lareLqrrGheVrlatppgleefveeagle.avpigpd.........vklwa 59 la++L ++GheV ++++p+ e+ + +gl+ + pi ++ vk+wa sp|B8HSQ9|SURE_CYAP4 19 LADTLAAAGHEV-MVVCPDRERSATGHGLTlFDPIRAEavaslfhpsVKAWA 69 89**********.****************94566887766666666655555 PP >> sp|Q3SPL2|UVRC_NITWN UvrABC system protein C OS=Nitrobacter winogradskyi (strain Nb-255 / ATCC 25391) GN=uvrC PE=3 S # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.9 0.0 0.0043 2.4 14 73 .. 601 661 .. 600 667 .. 0.91 Alignments for each domain: == domain 1 score: 12.9 bits; conditional E-value: 0.0043 HHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE.----S------.-HHHCCSHHHH CS Glyco_transf_28 14 PavAlareLqrrGheVrlatppgleefv.eeagleavp.igpdvklwakleslktlkelaeg 73 P + + ++L+++ h+ ++++++l+++ +eagl+ vp igp + +a l++++tlke+ + sp|Q3SPL2|UVRC_NITWN 601 PVLYFIQRLRDEAHRFVIGSHRKLRRKDiREAGLQEVPgIGPA-RKRALLHHFGTLKEIERA 661 6777899*****************99988**************.9999999*****998765 PP >> sp|A7Z3X0|MTNA_BACA2 Methylthioribose-1-phosphate isomerase OS=Bacillus amyloliquefaciens (strain FZB42) GN=mtnA PE= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.6 0.0 0.005 2.8 19 63 .. 205 248 .. 198 262 .. 0.87 Alignments for each domain: == domain 1 score: 12.6 bits; conditional E-value: 0.005 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.- CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakles 63 a+eL++ G++V+l+t +++ +e++++av +g+d + ++++++ sp|A7Z3X0|MTNA_BACA2 205 AWELMQGGIDVTLITDSMAAHTMKEKHISAVIVGAD-RIAKNGDT 248 9***********************************.76666554 PP >> sp|Q38W65|EFTS_LACSS Elongation factor Ts OS=Lactobacillus sakei subsp. sakei (strain 23K) GN=tsf PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 8.8 0.1 0.078 44 21 118 .. 40 134 .. 36 138 .. 0.77 2 ? 3.9 0.0 2.5 1.4e+03 27 122 .. 177 262 .. 159 273 .. 0.65 Alignments for each domain: == domain 1 score: 8.8 bits; conditional E-value: 0.078 HHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHH.HHHHHHHHHHHHHHHHHHC----EEEE--HHH CS Glyco_transf_28 21 eLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglka.lrkakeilkeakpdvvvgfggyvadlaliaal 108 +L+++G +a + ++++++gl+ v+i++++ + +++s + ++ +++ka l+++ e+++++kp+ +++++ + +ia++ sp|Q38W65|EFTS_LACSS 40 ALREKG----MAKAAKKNDRIAAEGLAGVAIDGNTAAIVEVNSETDFVASNDQFKAlLKDIAETIAKNKPADMAAAEELPMGEGTIASS 124 677777....99999999****************555555566666666666666525679999*******999999888888888887 PP HHHHHHHHHH CS Glyco_transf_28 109 lagipanvaE 118 + a++ E sp|Q38W65|EFTS_LACSS 125 VINLTAVIGE 134 7777666666 PP == domain 2 score: 3.9 bits; conditional E-value: 2.5 -EEEEEETGGGHHHHHH---EEEE----.......S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHH CS Glyco_transf_28 27 heVrlatppgleefveeagleavpigpd.......vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaal 108 h+V + ++ v + ++a++++ + +k+ + + ++ + eg ++++ l+e + +d+a+i ++ sp|Q38W65|EFTS_LACSS 177 HDVAMHVSAVNPQYVSREDVPAETLDHErevlteeTKNEG--KPENIIPKIVEG-----RVNKFLSEIS----------LNDQAFIKDS 248 5555555555555555555555555555555554444444..556666666666.....5555555555..........78999***** PP HHHHHHHHHHH--- CS Glyco_transf_28 109 lagipanvaEqngi 122 ++++ +va +ng sp|Q38W65|EFTS_LACSS 249 DQTVAQFVASKNGS 262 *********99973 PP >> sp|C3JYK1|TIG_PSEFS Trigger factor OS=Pseudomonas fluorescens (strain SBW25) GN=tig PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.2 0.0 0.0033 1.9 44 126 .. 121 199 .. 99 208 .. 0.89 Alignments for each domain: == domain 1 score: 13.2 bits; conditional E-value: 0.0033 ---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEE CS Glyco_transf_28 44 agleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglv 126 +g++++ + ++ ++ l++++e++++ ++++++ e +++++++ ++f+g v++ a+ + ++ g ++++ + ipg+ sp|C3JYK1|TIG_PSEFS 121 DGIAIERLSAE--VAD--SDLDNMLEILRKQNTRFEVAERAAQNEDQLNIDFVGKVDGEAFAGGSAKGTQLVLGSNRMIPGFE 199 56677777777..666..5899**********************************************************985 PP >> sp|Q1GZA6|BIOB_METFK Biotin synthase OS=Methylobacillus flagellatus (strain KT / ATCC 51484 / DSM 6875) GN=bioB PE=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.4 0.0 0.003 1.7 11 97 .. 131 219 .. 131 299 .. 0.80 Alignments for each domain: == domain 1 score: 13.4 bits; conditional E-value: 0.003 -HHHHHHHHHHHHH---EEE..EE.ETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC- CS Glyco_transf_28 11 dvePavAlareLqrrGheVr..la.tppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfg 96 d+eP +A+ re+++ G e + l+ ++g +e+++eagl+++ ++d +++++ + t ++ +++l++l +++e + ++ ++g+g sp|Q1GZA6|BIOB_METFK 131 DLEPVLAMIREVKAMGLETCatLGmLKDGQAEQLKEAGLDYYNHNLD-TAPEYYGEVITTRTYQDRLDTLDRVREQDINVCCGGIIGMG 218 89********************873578888899*********9999.77776666666677777777777776666666666666666 PP - CS Glyco_transf_28 97 g 97 + sp|Q1GZA6|BIOB_METFK 219 E 219 4 PP >> sp|Q635P7|MTNA2_BACCZ Methylthioribose-1-phosphate isomerase 2 OS=Bacillus cereus (strain ZK / E33L) GN=mtnA2 PE=3 S # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.8 0.0 0.0044 2.5 19 66 .. 205 251 .. 203 311 .. 0.83 Alignments for each domain: == domain 1 score: 12.8 bits; conditional E-value: 0.0044 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHH CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslkt 66 +eL+++G++V+l+t + ++ + +++++a +g+d + a++++ ++ sp|Q635P7|MTNA2_BACCZ 205 TWELKQAGIDVTLITDNTAAHAIQTKEINAIIVGAD-RIVANGDTANK 251 59**********************************.66665544444 PP >> sp|O48676|HTGT_ARATH N-hydroxythioamide S-beta-glucosyltransferase OS=Arabidopsis thaliana GN=UGT74B1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.3 0.0 0.0032 1.8 1 73 [. 12 87 .. 12 130 .. 0.79 Alignments for each domain: == domain 1 score: 13.3 bits; conditional E-value: 0.0032 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....S------.-HHHCCSHHHH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpd.....vklwakleslktlkelaeg 73 vv++ ++ G++ P v +a++L + +V++at+ ++ +++ l+++pi + ++ + +s++t++e ++ sp|O48676|HTGT_ARATH 12 VVILPYPVQGHLNPMVQFAKRLVSKNVKVTIATTTYTASSITTPSLSVEPISDGfdfipIGIPG--FSVDTYSESFKL 87 678889999******************************************9987777744444..444444444444 PP >> sp|Q8YRC9|THIOG_ANASP Bifunctional protein thiO/thiG OS=Anabaena sp. (strain PCC 7120) GN=thiO/thiG PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 3.9 0.0 2.5 1.4e+03 16 33 .. 15 32 .. 12 74 .. 0.80 2 ? 7.1 0.0 0.25 1.4e+02 87 133 .. 315 361 .. 290 366 .. 0.93 Alignments for each domain: == domain 1 score: 3.9 bits; conditional E-value: 2.5 HHHHHHHHH---EEEEEE CS Glyco_transf_28 16 vAlareLqrrGheVrlat 33 +A+a+eL+ rG eV+++ sp|Q8YRC9|THIOG_ANASP 15 LAIAVELKLRGAEVTVIC 32 8*************9543 PP == domain 2 score: 7.1 bits; conditional E-value: 0.25 HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGG CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprr 133 ++p++++++g y ++ +l ++a i+ + Eq + p+l++++++r sp|Q8YRC9|THIOG_ANASP 315 HCPNLTLATGHYRNGILLAPITAALIADLIVEQKSDPLLSHFHYSRS 361 78999**************************************9985 PP >> sp|Q8DW43|ILVC_STRMU Ketol-acid reductoisomerase OS=Streptococcus mutans GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.8 0.0 0.019 11 1 54 [. 21 70 .. 21 103 .. 0.77 Alignments for each domain: == domain 1 score: 10.8 bits; conditional E-value: 0.019 EEEE-------HHHHHHHHHHHHH---EEEEEETGG.GHHHHHH---EEEE---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppg.leefveeagleavpigpd 54 ++++g+G+ G+ A a+ L++ Gh+V++++ g ++ +e+g +++++g sp|Q8DW43|ILVC_STRMU 21 IAVIGYGSQGH-----AHAQNLRDSGHDVIIGVRHGkSFDKAKEDGFDTYEVGEA 70 57888899888.....88**************96541445557777777776655 PP >> sp|Q81MJ6|MTNA2_BACAN Methylthioribose-1-phosphate isomerase 2 OS=Bacillus anthracis GN=mtnA2 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.9 0.0 0.0041 2.3 19 66 .. 205 251 .. 203 308 .. 0.83 Alignments for each domain: == domain 1 score: 12.9 bits; conditional E-value: 0.0041 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHH CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslkt 66 +eL+++G++V+l+t + ++ + +++++a +g+d + a++++ ++ sp|Q81MJ6|MTNA2_BACAN 205 TWELKQAGIDVTLITDNTAAHAIQTKEISAIIVGAD-RIVANGDTANK 251 59**********************************.66665544444 PP >> sp|Q6N693|GLYA1_RHOPA Serine hydroxymethyltransferase 1 OS=Rhodopseudomonas palustris GN=glyA1 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.2 0.0 0.014 7.7 13 107 .. 24 119 .. 21 125 .. 0.80 Alignments for each domain: == domain 1 score: 11.2 bits; conditional E-value: 0.014 HHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC-- CS Glyco_transf_28 13 ePavAlareLqrrGheVrlatppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfgg 97 e a+A+ eL r+ heV+l+++++++++ e++g + ++ + +++++ +++++ae+ a+ +ak+++ ++++v g+ sp|Q6N693|GLYA1_RHOPA 24 EIAAAIRGELGRQRHEVELIASENIVSRAvlEAQGSVMTNkYAEGYPGNRYY-GGCEFVDVAEN-LAIDRAKKLFGANFANVQPNSGS 109 7899**********************99886666654444577776677777.78888888888.89999999999999999988888 PP --EEEE--HH CS Glyco_transf_28 98 yvadlaliaa 107 + + ++++a sp|Q6N693|GLYA1_RHOPA 110 QMNQAVFLAL 119 8888888876 PP >> sp|B0C915|MURD_ACAM1 UDP-N-acetylmuramoylalanine--D-glutamate ligase OS=Acaryochloris marina (strain MBIC 11017) GN= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.1 0.0 0.0035 2 16 73 .. 14 69 .. 12 109 .. 0.75 Alignments for each domain: == domain 1 score: 13.1 bits; conditional E-value: 0.0035 HHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHH CS Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlkelaeg 73 +A ar L+r+G++V ++ e v +++ l+a+ i++ l+ k+ sl++l el sp|B0C915|MURD_ACAM1 14 IAAARLLRREGWQVSVGDAGHSEGLVaTQKTLAAEGIPVH--LNLKF-SLSALAELSLD 69 7999**********************************99..44444.55665555444 PP >> sp|Q2KA25|GLYA_RHIEC Serine hydroxymethyltransferase OS=Rhizobium etli (strain CFN 42 / ATCC 51251) GN=glyA PE=3 SV= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.4 0.0 0.0061 3.5 13 108 .. 20 116 .. 16 121 .. 0.84 Alignments for each domain: == domain 1 score: 12.4 bits; conditional E-value: 0.0061 HHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC--- CS Glyco_transf_28 13 ePavAlareLqrrGheVrlatppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggy 98 e + A+++eL r+ he++l+++++++++ e++g + ++ + +++++ ++++ae+ a+++ak+++ ++++v g++ sp|Q2KA25|GLYA_RHIEC 20 EIFGAIGKELGRQRHEIELIASENIVSRAvlEAQGSIMTNkYAEGYPGKRYY-GGCQFVDIAEE-LAIERAKKLFGVNFANVQPNSGSQ 106 56779*********************99887766655544588888888888.88899999999.999999999999999999999999 PP -EEEE--HHH CS Glyco_transf_28 99 vadlaliaal 108 + ++++a l sp|Q2KA25|GLYA_RHIEC 107 MNQAVFLALL 116 9999998865 PP >> sp|Q214H7|GLYA_RHOPB Serine hydroxymethyltransferase OS=Rhodopseudomonas palustris (strain BisB18) GN=glyA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.5 0.0 0.011 6.5 13 107 .. 32 127 .. 28 133 .. 0.80 Alignments for each domain: == domain 1 score: 11.5 bits; conditional E-value: 0.011 HHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC--- CS Glyco_transf_28 13 ePavAlareLqrrGheVrlatppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggy 98 e a+A+a eL r+ he++l+++++++++ e++g + ++ + ++ ++ +++++ae+ a+++ak+++ +++v g++ sp|Q214H7|GLYA_RHOPB 32 EIAAAIAGELGRQRHEIELIASENIVSRAvmEAQGSVMTNkYAEGYPGHRYY-GGCEFVDVAEN-LAIERAKKLFGAGFANVQPNSGSQ 118 789**********************999888777755554477775666666.77788888888.899999999999999988888888 PP -EEEE--HH CS Glyco_transf_28 99 vadlaliaa 107 + ++++a sp|Q214H7|GLYA_RHOPB 119 MNQAVFLAL 127 888888876 PP >> sp|B9DW70|MUTL_STRU0 DNA mismatch repair protein mutL OS=Streptococcus uberis (strain ATCC BAA-854 / 0140J) GN=mutL # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.2 0.0 0.0067 3.8 65 127 .. 203 265 .. 151 268 .. 0.90 Alignments for each domain: == domain 1 score: 12.2 bits; conditional E-value: 0.0067 HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS Glyco_transf_28 65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127 + lk++ +g +l+ ak+ ++ ++d+++++ gyv+++ l+ a++++i + ++ + +l n sp|B9DW70|MUTL_STRU0 203 GDLKQAIAGIYGLNTAKKMIEISNADLDFEVSGYVSLPELTRANRNYITILINGRYIKNFLLN 265 5788888999999*************************************9998887766666 PP >> sp|A0RI38|MTNA2_BACAH Methylthioribose-1-phosphate isomerase 2 OS=Bacillus thuringiensis (strain Al Hakam) GN=mtnA2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.8 0.0 0.0046 2.6 19 66 .. 205 251 .. 203 307 .. 0.84 Alignments for each domain: == domain 1 score: 12.8 bits; conditional E-value: 0.0046 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHH CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslkt 66 +eL+++G++V+l+t + ++ + +++++a +g+d + a++++ ++ sp|A0RI38|MTNA2_BACAH 205 TWELKQAGIDVTLITDNTAAHAIQTKEINAIIVGAD-RIVANGDTANK 251 59**********************************.66665544444 PP >> sp|Q6HED3|MTNA2_BACHK Methylthioribose-1-phosphate isomerase 2 OS=Bacillus thuringiensis subsp. konkukian GN=mtnA2 P # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.8 0.0 0.0046 2.6 19 66 .. 205 251 .. 203 307 .. 0.84 Alignments for each domain: == domain 1 score: 12.8 bits; conditional E-value: 0.0046 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHH CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslkt 66 +eL+++G++V+l+t + ++ + +++++a +g+d + a++++ ++ sp|Q6HED3|MTNA2_BACHK 205 TWELKQAGIDVTLITDNTAAHAIQTKEINAIIVGAD-RIVANGDTANK 251 59**********************************.66665544444 PP >> sp|Q1QIR5|UVRC_NITHX UvrABC system protein C OS=Nitrobacter hamburgensis (strain X14 / DSM 10229) GN=uvrC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.9 0.0 0.0042 2.4 14 73 .. 602 662 .. 601 669 .. 0.91 Alignments for each domain: == domain 1 score: 12.9 bits; conditional E-value: 0.0042 HHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE.----S------.-HHHCCSHHHH CS Glyco_transf_28 14 PavAlareLqrrGheVrlatppgleefv.eeagleavp.igpdvklwakleslktlkelaeg 73 P + + ++L+++ h+ ++++++l+++ +eagl+ vp igp + +a l++++tlke+ + sp|Q1QIR5|UVRC_NITHX 602 PVLYFIQRLRDEAHRFVIGSHRKLRRKDiREAGLQEVPgIGPA-RKRALLHHFGTLKEIERA 662 6777899*****************99988**************.9999999*****998765 PP >> sp|A8AVN4|ILVC_STRGC Ketol-acid reductoisomerase OS=Streptococcus gordonii (strain Challis / ATCC 35105 / CH1 / DL1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.9 0.0 0.0085 4.8 1 50 [. 21 66 .. 21 118 .. 0.75 Alignments for each domain: == domain 1 score: 11.9 bits; conditional E-value: 0.0085 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGH.HHHHH---EEEE CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgle.efveeagleavp 50 ++++g+G+ G+ A a+ L++ Gh+V++++ pg ++ +e+g ++++ sp|A8AVN4|ILVC_STRGC 21 IAVIGYGSQGH-----AHAQNLRDTGHDVIIGVRPGKSfDKAKEDGFDTYT 66 57888889888.....88***************997431333666655555 PP >> sp|Q7V5V5|MURD_PROMM UDP-N-acetylmuramoylalanine--D-glutamate ligase OS=Prochlorococcus marinus (strain MIT 9313) GN # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.4 0.0 0.024 13 17 68 .. 40 90 .. 34 134 .. 0.88 Alignments for each domain: == domain 1 score: 10.4 bits; conditional E-value: 0.024 HHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCC CS Glyco_transf_28 17 AlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlk 68 +la L+ +G+ V+l+ p +l +f+ + l+av i p+ +w + +l++l+ sp|Q7V5V5|MURD_PROMM 40 SLAADLRLQGIAVELGKPLELNSFIpLLDQLDAVVISPG-IAWDHP-TLTALR 90 7999***********************************.777766.666665 PP >> sp|Q47SB6|ILVC_THEFY Ketol-acid reductoisomerase OS=Thermobifida fusca (strain YX) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.9 0.1 0.0043 2.4 1 50 [. 21 67 .. 21 91 .. 0.89 Alignments for each domain: == domain 1 score: 12.9 bits; conditional E-value: 0.0043 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavp 50 v+++g+G+ G+ A a L++ G +Vr++ p+ +++ ee+gl +v+ sp|Q47SB6|ILVC_THEFY 21 VAVIGYGSQGH-----AHALSLRDSGVDVRVGLPESSKSRAkaEEDGLRVVT 67 67888999998.....77999******************9999999998875 PP >> sp|A4FMQ5|ILVC_SACEN Ketol-acid reductoisomerase OS=Saccharopolyspora erythraea (strain NRRL 23338) GN=ilvC PE=3 SV= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.3 0.0 0.0032 1.8 1 47 [. 21 64 .. 21 92 .. 0.85 Alignments for each domain: == domain 1 score: 13.3 bits; conditional E-value: 0.0032 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---E CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagle 47 v+++g+G+ G+ A a L++ G +Vr++ p+g +++ ee+gl sp|A4FMQ5|ILVC_SACEN 21 VAVIGYGSQGH-----AHALSLRDSGADVRIGLPEGSKSRAkaEEEGLR 64 67888999998.....77999*******************987888875 PP >> sp|Q5V3R4|TRM56_HALMA tRNA ribose 2'-O-methyltransferase aTrm56 OS=Haloarcula marismortui GN=rrnAC0857 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.8 0.0 0.0022 1.3 30 121 .. 11 103 .. 1 116 [. 0.85 Alignments for each domain: == domain 1 score: 13.8 bits; conditional E-value: 0.0022 EEEETGGGHHHH.HH---EEEE----....S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHH CS Glyco_transf_28 30 rlatppgleefv.eeagleavpigpd....vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagi 112 rl+ pg +e+ + gl+a+++g+d +++ ++ +t+ ++ +++ + +++ + ++++ ++ +f+g+v l +++ + +++ sp|Q5V3R4|TRM56_HALMA 11 RLGHRPGRDERMtTHVGLTARALGADkvvlANAAR--NQADTVIDITDRFGGPFDVASTEEPKR--LIRDFEGRVVHLTMYGEPVQEV 94 3999999999999**************98544445..699999999999888888888777776..8999****************** PP HHHHHHH-- CS Glyco_transf_28 113 panvaEqng 121 a v E+n sp|Q5V3R4|TRM56_HALMA 95 EADVREANT 103 *****9985 PP >> sp|B8GW68|ENO_CAUCN Enolase OS=Caulobacter crescentus (strain NA1000 / CB15N) GN=eno PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 2.9 0.0 5.1 2.9e+03 24 67 .. 105 146 .. 104 172 .. 0.78 2 ? 9.0 0.0 0.066 37 13 48 .. 184 219 .. 183 276 .. 0.82 Alignments for each domain: == domain 1 score: 2.9 bits; conditional E-value: 5.1 H---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHC CS Glyco_transf_28 24 rrGheVrlatppgleefv.eeagleavpigpdvklwakleslktl 67 r G + +l+++ + ++ e+agl+ +++ ++ ++a++ ++ + sp|B8GW68|ENO_CAUCN 105 RLGANAILGVSLATAKAAaESAGLPLYKYVGG--VNARV-LPTPM 146 67999999***99999999*********8887..33333.34444 PP == domain 2 score: 9.0 bits; conditional E-value: 0.066 HHHHHHHHHHHH---EEEEEETGGGHHHHHH---EE CS Glyco_transf_28 13 ePavAlareLqrrGheVrlatppgleefveeaglea 48 e + Al ++L+++Gh+ ++ + g+++ +++a+ + sp|B8GW68|ENO_CAUCN 184 EIFHALKKALKDAGHNTNVGDEGGFAPNLASAEAAL 219 6799**********************9996665444 PP >> sp|Q9A7J9|ENO_CAUCR Enolase OS=Caulobacter crescentus GN=eno PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 2.9 0.0 5.1 2.9e+03 24 67 .. 105 146 .. 104 172 .. 0.78 2 ? 9.0 0.0 0.066 37 13 48 .. 184 219 .. 183 276 .. 0.82 Alignments for each domain: == domain 1 score: 2.9 bits; conditional E-value: 5.1 H---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHC CS Glyco_transf_28 24 rrGheVrlatppgleefv.eeagleavpigpdvklwakleslktl 67 r G + +l+++ + ++ e+agl+ +++ ++ ++a++ ++ + sp|Q9A7J9|ENO_CAUCR 105 RLGANAILGVSLATAKAAaESAGLPLYKYVGG--VNARV-LPTPM 146 67999999***99999999*********8887..33333.34444 PP == domain 2 score: 9.0 bits; conditional E-value: 0.066 HHHHHHHHHHHH---EEEEEETGGGHHHHHH---EE CS Glyco_transf_28 13 ePavAlareLqrrGheVrlatppgleefveeaglea 48 e + Al ++L+++Gh+ ++ + g+++ +++a+ + sp|Q9A7J9|ENO_CAUCR 184 EIFHALKKALKDAGHNTNVGDEGGFAPNLASAEAAL 219 6799**********************9996665444 PP >> sp|Q5V3F0|MAMA2_HALMA Methylaspartate mutase S chain 2 OS=Haloarcula marismortui GN=mamA2 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.7 0.1 0.0049 2.8 1 54 [. 4 59 .. 4 131 .. 0.80 Alignments for each domain: == domain 1 score: 12.7 bits; conditional E-value: 0.0049 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHH.HH---EEEE---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefv.eeagleavpigpd 54 v+l ++G+ +v + l r++ ++G +V l+++ ef+ ++++ +a++i + sp|Q5V3F0|MAMA2_HALMA 4 VILGVIGSDAHVVGITILERAFEAAGFNVVnLGVQSSQSEFIdAADEHDAEAILVS 59 578899************************************98888888887666 PP >> sp|B1LZ88|GLYA_METRJ Serine hydroxymethyltransferase OS=Methylobacterium radiotolerans (strain ATCC 27329 / DSM 1819 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.9 0.0 0.0086 4.9 11 45 .. 24 60 .. 17 125 .. 0.73 Alignments for each domain: == domain 1 score: 11.9 bits; conditional E-value: 0.0086 -HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH-- CS Glyco_transf_28 11 dvePavAlareLqrrGheVrlatppgleefv..eeag 45 d e a A+a+eL r+ he++l+++++++++ e++g sp|B1LZ88|GLYA_METRJ 24 DPEIAEAVAKELGRQQHEIELIASENIVSRAvlEAQG 60 557888*********************9998755554 PP >> sp|P94966|BIOB_METSK Biotin synthase OS=Methylobacillus sp. (strain KT1) GN=bioB PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.0 0.0 0.0038 2.1 11 97 .. 128 216 .. 128 242 .. 0.78 Alignments for each domain: == domain 1 score: 13.0 bits; conditional E-value: 0.0038 -HHHHHHHHHHHHH---EEE..EE.ETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC- CS Glyco_transf_28 11 dvePavAlareLqrrGheVr..la.tppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfg 96 d+eP +A+ re+++ G e + l+ ++g +e+++eagl+++ ++d +++++ + t ++ +++l++l +++e + ++ ++g+g sp|P94966|BIOB_METSK 128 DLEPVLAMIREVKAMGLETCatLGmLKDGQAEQLKEAGLDYYNHNLD-TAPEYYGEVITTRTYQDRLDTLDRVREQDINVCCGGIIGMG 215 89********************873578888899*********9999.88877767777777777777777777777777777777766 PP - CS Glyco_transf_28 97 g 97 + sp|P94966|BIOB_METSK 216 E 216 5 PP >> sp|Q3SHE4|ILVC_THIDA Ketol-acid reductoisomerase OS=Thiobacillus denitrificans (strain ATCC 25259) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.9 0.1 0.0043 2.4 1 70 [. 19 81 .. 19 119 .. 0.73 Alignments for each domain: == domain 1 score: 12.9 bits; conditional E-value: 0.0043 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCCSH CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlkel 70 v+++g+G+ G+ A a+ L++ G +V++a pg ++ e+agl++++++ + a l +++++ sp|Q3SHE4|ILVC_THIDA 19 VAIVGYGSQGH-----AHANNLKDSGVDVTVALRPGSASAKkaENAGLTVKSVPEA-VAGA---DLVMILTP 81 67888999998.....88******************9887777********99988.2222...33333333 PP >> sp|Q07MT9|GLYA_RHOP5 Serine hydroxymethyltransferase OS=Rhodopseudomonas palustris (strain BisA53) GN=glyA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.1 0.0 0.015 8.5 13 107 .. 25 120 .. 20 126 .. 0.75 Alignments for each domain: == domain 1 score: 11.1 bits; conditional E-value: 0.015 HHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC--- CS Glyco_transf_28 13 ePavAlareLqrrGheVrlatppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggy 98 e a+A+a eL r+ he++l+++++++++ e++g + ++ + ++ ++ +++++ae+ a+ +ak+++ +++v g++ sp|Q07MT9|GLYA_RHOP5 25 EIAAAIAGELGRQRHEIELIASENIVSRAvlEAQGSVMTNkYAEGYPGHRYY-GGCEFVDVAEN-LAIDRAKKLFGAGFANVQPNSGSQ 111 789***********************99886666644444466665555555.67777777777.788888888888888888777777 PP -EEEE--HH CS Glyco_transf_28 99 vadlaliaa 107 + ++++a sp|Q07MT9|GLYA_RHOP5 112 MNQAVFLAL 120 777777765 PP >> sp|A9VRK3|MTNA1_BACWK Methylthioribose-1-phosphate isomerase 1 OS=Bacillus weihenstephanensis (strain KBAB4) GN=mtnA # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.7 0.0 0.0047 2.6 17 63 .. 202 247 .. 193 332 .. 0.85 Alignments for each domain: == domain 1 score: 12.7 bits; conditional E-value: 0.0047 HHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.- CS Glyco_transf_28 17 AlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakles 63 a eLqr+G++V+++t +++++v + +++av +g+d +++a+++ sp|A9VRK3|MTNA1_BACWK 202 LTALELQRAGIDVTVITD-NMAAMVmSQGKIDAVIVGCD-RVAANGDV 247 5699*********98875.6777777*************.77776643 PP >> sp|A9GW78|ILVC_SORC5 Ketol-acid reductoisomerase OS=Sorangium cellulosum (strain So ce56) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.7 0.1 0.01 5.6 1 54 [. 20 70 .. 20 105 .. 0.85 Alignments for each domain: == domain 1 score: 11.7 bits; conditional E-value: 0.01 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54 v+++g+G+ G+ A a L++ G V++a p+g +++ +agl++ ++ sp|A9GW78|ILVC_SORC5 20 VAIVGYGSQGH-----AHALNLRDSGVTVIVALPEGSKSRPkaQAAGLQVATVSEA 70 67889999998.....7799********************9988999999887655 PP >> sp|Q5YRW2|ILVC_NOCFA Ketol-acid reductoisomerase OS=Nocardia farcinica GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.0 0.0 0.0079 4.5 1 59 [. 21 75 .. 21 103 .. 0.76 Alignments for each domain: == domain 1 score: 12.0 bits; conditional E-value: 0.0079 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwa 59 v+++g+G+ G+ A L++ G eVr++ +g +++ eeagl++ +++v +wa sp|Q5YRW2|ILVC_NOCFA 21 VAVIGYGSQGH-----AHSLSLRDSGVEVRVGLAEGSKSRPkaEEAGLTV-GTPAEVSAWA 75 56778888888.....55678*********9999999999888*****97.4444446666 PP >> sp|A3CQ86|ILVC_STRSV Ketol-acid reductoisomerase OS=Streptococcus sanguinis (strain SK36) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.7 0.0 0.01 5.6 1 36 [. 21 51 .. 21 117 .. 0.79 Alignments for each domain: == domain 1 score: 11.7 bits; conditional E-value: 0.01 EEEE-------HHHHHHHHHHHHH---EEEEEETGG CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppg 36 ++++g+G+ G+ A a+ L++ Gh+V++++ pg sp|A3CQ86|ILVC_STRSV 21 IAVIGYGSQGH-----AHAQNLRDTGHDVIIGVRPG 51 57888889888.....88***************997 PP >> sp|Q21AW5|UVRC_RHOPB UvrABC system protein C OS=Rhodopseudomonas palustris (strain BisB18) GN=uvrC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.2 0.0 0.013 7.6 14 72 .. 611 670 .. 610 676 .. 0.91 Alignments for each domain: == domain 1 score: 11.2 bits; conditional E-value: 0.013 HHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE.----S------.-HHHCCSHHH CS Glyco_transf_28 14 PavAlareLqrrGheVrlatppgleefv.eeagleavp.igpdvklwakleslktlkelae 72 P + + ++L+++ h+ ++++++l+++ +eagl+ p igp + +a l++++tlke+ + sp|Q21AW5|UVRC_RHOPB 611 PVLYFIQRLRDEAHRFVIGSHRKLRKKDiREAGLQEIPgIGPS-RKRALLHHFGTLKEIER 670 6777899******************9988**************.9999999*****99876 PP >> sp|Q81IK7|MTNA1_BACCR Methylthioribose-1-phosphate isomerase 1 OS=Bacillus cereus (strain ATCC 14579 / DSM 31) GN=mt # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.4 0.0 0.0061 3.5 17 63 .. 202 247 .. 193 276 .. 0.83 Alignments for each domain: == domain 1 score: 12.4 bits; conditional E-value: 0.0061 HHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.- CS Glyco_transf_28 17 AlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakles 63 a eLqr+G++V+++t +++++v + +++av +g+d +++a+++ sp|Q81IK7|MTNA1_BACCR 202 LTALELQRAGIDVTVITD-NMAAMVmSQGKIDAVIVGCD-RVAANGDV 247 5699*********98875.6777777*************.88887744 PP >> sp|Q5FNN2|PYRG_GLUOX CTP synthase OS=Gluconobacter oxydans GN=pyrG PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 2.8 0.0 5.6 3.2e+03 15 31 .. 21 37 .. 19 42 .. 0.92 2 ? 6.7 0.0 0.34 1.9e+02 2 45 .. 137 183 .. 136 223 .. 0.83 Alignments for each domain: == domain 1 score: 2.8 bits; conditional E-value: 5.6 HHHHHHHHHH---EEEE CS Glyco_transf_28 15 avAlareLqrrGheVrl 31 ++Ala Lq+rG++Vr+ sp|Q5FNN2|PYRG_GLUOX 21 SAALAALLQARGYKVRM 37 589*************8 PP == domain 2 score: 6.7 bits; conditional E-value: 0.34 EEE-------HH..HHHHHHHHHHH.---EEEEEETGGGHHHHHH-- CS Glyco_transf_28 2 vlaggGTrGdve..PavAlareLqr.rGheVrlatppgleefveeag 45 ++ +gGT Gd+e P++ r+L++ Gh +++++ l + +++ag sp|Q5FNN2|PYRG_GLUOX 137 LVEIGGTVGDIEslPFLEAIRQLRNdLGHAQTMCVHLTLLPYIPAAG 183 66789******98899*99****973699999******999995555 PP >> sp|Q2S9V9|ILVC_HAHCH Ketol-acid reductoisomerase OS=Hahella chejuensis (strain KCTC 2396) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.0 0.1 0.0076 4.3 1 55 [. 19 82 .. 19 128 .. 0.74 Alignments for each domain: == domain 1 score: 12.0 bits; conditional E-value: 0.0076 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----............S CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd............v 55 v+++g+G+ G+ A a+ L++ G +V+++ +g ++ e+agl++++++ + sp|Q2S9V9|ILVC_HAHCH 19 VAIIGYGSQGH-----AHANNLKDSGVDVCVGLRKGSGSWAkaENAGLAVKEVAEAvagadvvmiltpD 82 57888888888.....88**********************999*******9998873333333333332 PP >> sp|Q17QH8|D39U1_BOVIN Epimerase family protein SDR39U1 OS=Bos taurus GN=SDR39U1 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.9 0.0 0.0042 2.4 2 79 .. 3 75 .. 2 121 .. 0.83 Alignments for each domain: == domain 1 score: 12.9 bits; conditional E-value: 0.0042 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHH CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrk 79 vl+ggGT+ + Al + L++rGheV+l++ + ++++ + l++ ++ ++ +l +++++++++++a ++ sp|Q17QH8|D39U1_BOVIN 3 VLVGGGTG---FIGTALTQLLKARGHEVTLISRKPGPDRITWDDLTTSGLPRC-DAAVNL-AGENILNPLRRWNAAFQ 75 67888888...999****************99999999999999999998888.666666.88888888888666554 PP >> sp|Q2J6V2|ILVC_FRASC Ketol-acid reductoisomerase OS=Frankia sp. (strain CcI3) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.5 0.1 0.0057 3.2 1 47 [. 20 63 .. 20 100 .. 0.87 Alignments for each domain: == domain 1 score: 12.5 bits; conditional E-value: 0.0057 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---E CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagle 47 v+++g+G+ G+ A a L++ G +Vr++ p + +++ ee+gl sp|Q2J6V2|ILVC_FRASC 20 VAVIGYGSQGH-----AHALNLRDSGVDVRVGLPADSRSRAraEEEGLR 63 67888999998.....7799******************99987888876 PP >> sp|A1WUW3|ILVC_HALHL Ketol-acid reductoisomerase OS=Halorhodospira halophila (strain DSM 244 / SL1) GN=ilvC PE=3 SV= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.8 0.0 0.038 22 1 54 [. 19 69 .. 19 98 .. 0.85 Alignments for each domain: == domain 1 score: 9.8 bits; conditional E-value: 0.038 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54 v+++g+G+ G+ A a+ L++ G +V ++ pg + eagle+ +++ sp|A1WUW3|ILVC_HALHL 19 VAIIGYGSQGH-----AHANNLKESGVNVVVGLRPGSSSAAkaQEAGLEVASVEEA 69 57888888888.....88*******************99998899***99988766 PP >> sp|A8LMD0|PUR9_DINSH Bifunctional purine biosynthesis protein purH OS=Dinoroseobacter shibae (strain DFL 12) GN=purH # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.8 0.1 0.0093 5.3 15 70 .. 20 71 .. 13 99 .. 0.86 Alignments for each domain: == domain 1 score: 11.8 bits; conditional E-value: 0.0093 HHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSH CS Glyco_transf_28 15 avAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkel 70 +v+l+++L +rG V+l ++ g ++ ++eagl++v + +++++ ++ + +k+l sp|A8LMD0|PUR9_DINSH 20 LVPLGQALAARG--VELLSTGGTAKALREAGLDVVDVSDVTGFPE--MMDGRVKTL 71 79**********..**********************999977777..565555554 PP >> sp|C5BAT0|GCSP_EDWI9 Glycine dehydrogenase [decarboxylating] OS=Edwardsiella ictaluri (strain 93-146) GN=gcvP PE=3 S # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.8 0.1 0.0091 5.1 1 37 [. 215 251 .. 215 306 .. 0.89 Alignments for each domain: == domain 1 score: 11.8 bits; conditional E-value: 0.0091 EEEE-------HHHHHHHHHHHHH---EEEEEETGGG CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgl 37 v+l +GT Gd++ + Al++ L++rG ++a+ p sp|C5BAT0|GCSP_EDWI9 215 VLLQQVGTQGDLHDYRALMDSLRERGVITCMAADPLA 251 567789***************************9965 PP >> sp|C1B2M1|ILVC_RHOOB Ketol-acid reductoisomerase OS=Rhodococcus opacus (strain B4) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.5 0.0 0.011 6.3 1 48 [. 21 65 .. 21 102 .. 0.83 Alignments for each domain: == domain 1 score: 11.5 bits; conditional E-value: 0.011 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48 v+++g+G+ G+ A L++ G +Vr++ ++g +++ ee+gl++ sp|C1B2M1|ILVC_RHOOB 21 VAVIGYGSQGH-----AHSLSLRDSGVDVRIGLKEGSKSRAkaEEQGLTV 65 56778888888.....55678*******************9999999986 PP >> sp|Q0S2H3|ILVC_RHOSR Ketol-acid reductoisomerase OS=Rhodococcus sp. (strain RHA1) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.5 0.0 0.011 6.3 1 48 [. 21 65 .. 21 102 .. 0.83 Alignments for each domain: == domain 1 score: 11.5 bits; conditional E-value: 0.011 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48 v+++g+G+ G+ A L++ G +Vr++ ++g +++ ee+gl++ sp|Q0S2H3|ILVC_RHOSR 21 VAVIGYGSQGH-----AHSLSLRDSGVDVRIGLKEGSKSRAkaEEQGLTV 65 56778888888.....55678*******************9999999986 PP >> sp|A0R946|MTNA1_BACAH Methylthioribose-1-phosphate isomerase 1 OS=Bacillus thuringiensis (strain Al Hakam) GN=mtnA1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.3 0.0 0.0062 3.5 17 63 .. 202 247 .. 193 275 .. 0.83 Alignments for each domain: == domain 1 score: 12.3 bits; conditional E-value: 0.0062 HHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.- CS Glyco_transf_28 17 AlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakles 63 a eLqr+G++V+++t +++++v + +++av +g+d +++a+++ sp|A0R946|MTNA1_BACAH 202 LTALELQRAGIDVTVITD-NMAAMVmSQGKIDAVIVGCD-RVAANGDV 247 5699*********98875.6777777*************.88887744 PP >> sp|Q81ZC2|MTNA1_BACAN Methylthioribose-1-phosphate isomerase 1 OS=Bacillus anthracis GN=mtnA1 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.3 0.0 0.0062 3.5 17 63 .. 202 247 .. 193 275 .. 0.83 Alignments for each domain: == domain 1 score: 12.3 bits; conditional E-value: 0.0062 HHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.- CS Glyco_transf_28 17 AlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakles 63 a eLqr+G++V+++t +++++v + +++av +g+d +++a+++ sp|Q81ZC2|MTNA1_BACAN 202 LTALELQRAGIDVTVITD-NMAAMVmSQGKIDAVIVGCD-RVAANGDV 247 5699*********98875.6777777*************.88887744 PP >> sp|Q6HP54|MTNA1_BACHK Methylthioribose-1-phosphate isomerase 1 OS=Bacillus thuringiensis subsp. konkukian GN=mtnA1 P # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.3 0.0 0.0062 3.5 17 63 .. 202 247 .. 193 275 .. 0.83 Alignments for each domain: == domain 1 score: 12.3 bits; conditional E-value: 0.0062 HHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.- CS Glyco_transf_28 17 AlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakles 63 a eLqr+G++V+++t +++++v + +++av +g+d +++a+++ sp|Q6HP54|MTNA1_BACHK 202 LTALELQRAGIDVTVITD-NMAAMVmSQGKIDAVIVGCD-RVAANGDV 247 5699*********98875.6777777*************.88887744 PP >> sp|Q1MIU5|GLYA_RHIL3 Serine hydroxymethyltransferase OS=Rhizobium leguminosarum bv. viciae (strain 3841) GN=glyA PE= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.6 0.0 0.011 6 16 108 .. 23 116 .. 16 121 .. 0.85 Alignments for each domain: == domain 1 score: 11.6 bits; conditional E-value: 0.011 HHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EE CS Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvad 101 A+++eL r+ he++l+++++++++ e++g + ++ + +++++ ++++ae+ a+++ak+++ ++++v g++ + sp|Q1MIU5|GLYA_RHIL3 23 GAIGKELGRQRHEIELIASENIVSRAvlEAQGSIMTNkYAEGYPGKRYY-GGCQFVDIAEE-LAIERAKKLFGVNFANVQPNSGSQMNQ 109 599********************99887766655544588888888888.88899999999.999999999999999999999999999 PP EE--HHH CS Glyco_transf_28 102 laliaal 108 ++++a l sp|Q1MIU5|GLYA_RHIL3 110 AVFLALL 116 9998865 PP >> sp|A8FCG5|MTNA_BACP2 Methylthioribose-1-phosphate isomerase OS=Bacillus pumilus (strain SAFR-032) GN=mtnA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.0 0.0 0.0078 4.4 19 65 .. 205 250 .. 198 288 .. 0.82 Alignments for each domain: == domain 1 score: 12.0 bits; conditional E-value: 0.0078 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HH CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslk 65 +eL++ G +V+l+t + +++ +e+ ++av +g+d + +++++ + sp|A8FCG5|MTNA_BACP2 205 TWELMQGGVDVTLITDNMAAHTMKEKQISAVIVGAD-RIARNGDAAN 250 69**********************************.7777664443 PP >> sp|Q63CV4|ILVC2_BACCZ Ketol-acid reductoisomerase 2 OS=Bacillus cereus (strain ZK / E33L) GN=ilvC2 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.3 0.1 0.013 7.3 1 68 [. 19 79 .. 19 103 .. 0.77 Alignments for each domain: == domain 1 score: 11.3 bits; conditional E-value: 0.013 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.-HHHCC CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakleslktlk 68 v+++g+G+ G+ A a+ L++ G eV +++ pg +v +++g e+ ++ ++ + +++l+ sp|Q63CV4|ILVC2_BACCZ 19 VAVVGYGSQGH-----AQAQNLRDSGVEVVVGVRPGKSYEVaKADGFEVMSVSEA--VRT-AQVVQMLL 79 67899999999.....669**********************99999998887766..222.24455554 PP >> sp|A4J179|ILVC_DESRM Ketol-acid reductoisomerase OS=Desulfotomaculum reducens (strain MI-1) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.9 0.0 0.0084 4.7 1 68 [. 20 81 .. 20 107 .. 0.83 Alignments for each domain: == domain 1 score: 11.9 bits; conditional E-value: 0.0084 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHCC CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktlk 68 ++++g+G+ G+ A a+ L++ G +V ++ ++ +++ e++gl++ +++ +++a e ++ l+ sp|A4J179|ILVC_DESRM 20 IAVLGYGSQGH-----AQAQSLRDSGLDVVVGLRKDSARWSkaEADGLQVATVPDA-CAQA--EVIQVLL 81 67899999999.....669********************9999**********999.7777..5555554 PP >> sp|Q9V030|PAAD_PYRAB Probable aromatic acid decarboxylase OS=Pyrococcus abyssi GN=PYRAB09680 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.0 0.0 0.0039 2.2 1 55 [. 3 76 .. 3 127 .. 0.70 Alignments for each domain: == domain 1 score: 13.0 bits; conditional E-value: 0.0039 EEEE-------HHHHHHHHHHHHH---EEE.EEETGGGHHHHHH---EEEE.----..................S CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVr.latppgleefveeagleavp.igpd..................v 55 vv+a+ G+ G ++ + l ++L++ GheV+ la++ g++ e+g+e++p d sp|Q9V030|PAAD_PYRAB 3 VVVAITGASGTIYG-IKLYETLRDLGHEVIlLASKTGIKVAKYETGIEVKPdFSEDelfapiasgsypfdamviA 76 68888899998886.5699***********888888888877999999988544445666666666555555551 PP >> sp|Q81F27|ILVC2_BACCR Ketol-acid reductoisomerase 2 OS=Bacillus cereus (strain ATCC 14579 / DSM 31) GN=ilvC2 PE=3 SV # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.2 0.1 0.014 7.7 1 54 [. 19 68 .. 19 104 .. 0.78 Alignments for each domain: == domain 1 score: 11.2 bits; conditional E-value: 0.014 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpd 54 v+++g+G+ G+ A a+ L++ G eV +++ pg +v +++g e+ ++ sp|Q81F27|ILVC2_BACCR 19 VAVVGYGSQGH-----AQAQNLRDSGVEVVVGVRPGKSYEVaKADGFEVMSVSEA 68 67899999999.....669**********************99999998877766 PP >> sp|Q03IJ9|ILVC_STRTD Ketol-acid reductoisomerase OS=Streptococcus thermophilus (strain ATCC BAA-491 / LMD-9) GN=ilvC # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.4 0.0 0.05 28 1 52 [. 21 68 .. 21 117 .. 0.74 Alignments for each domain: == domain 1 score: 9.4 bits; conditional E-value: 0.05 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGH.HHHHH---EEEE-- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgle.efveeagleavpig 52 ++++g+G+ G+ A + L++ Gh+V++++ pg ++ +e+g ++++++ sp|Q03IJ9|ILVC_STRTD 21 IAVIGYGSQGH-----AHSQNLRDTGHDVIIGVRPGKSfDKAKEDGFDTYTVA 68 56778888888.....6789*************99743144466666666555 PP >> sp|Q9F0I7|ILVC_STRTR Ketol-acid reductoisomerase OS=Streptococcus thermophilus GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.4 0.0 0.05 28 1 52 [. 21 68 .. 21 117 .. 0.74 Alignments for each domain: == domain 1 score: 9.4 bits; conditional E-value: 0.05 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGH.HHHHH---EEEE-- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgle.efveeagleavpig 52 ++++g+G+ G+ A + L++ Gh+V++++ pg ++ +e+g ++++++ sp|Q9F0I7|ILVC_STRTR 21 IAVIGYGSQGH-----AHSQNLRDTGHDVIIGVRPGKSfDKAKEDGFDTYTVA 68 56778888888.....6789*************99743144466666666555 PP >> sp|P26166|YBCC_RHOCA Uncharacterized 20.5 kDa protein in bchF-crtJ intergenic region OS=Rhodobacter capsulatus PE=4 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.9 0.0 0.0082 4.6 14 90 .. 88 168 .. 83 184 .. 0.65 Alignments for each domain: == domain 1 score: 11.9 bits; conditional E-value: 0.0082 HHHHHHHHHHH---EEEEEETGGGHHHH...HH---EEEE----....S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 14 PavAlareLqrrGheVrlatppgleefv...eeagleavpigpd....vklwakleslktlkelaeglkalrkakeilkeakpd 90 a+ +a eL+rrG Vr++ pgl + +++ +a i+++ v+ a + +ktl++l +g + + ++ ++ +++++ sp|P26166|YBCC_RHOCA 88 GALIVAMELRRRGVSVRIVFAPGLSDLSrlmATTRFDAALITVGsmdrVEICA--KLVKTLSSLTKG-RMRVAIGGAIVSQRAE 168 57889*****************9987644245555555556666666655555..336666666666.4444555555555555 PP >> sp|B8I1T8|ILVC_CLOCE Ketol-acid reductoisomerase OS=Clostridium cellulolyticum (strain ATCC 35319 / DSM 5812 / JCM 6 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.2 0.1 0.0067 3.8 1 54 [. 20 70 .. 20 303 .. 0.90 Alignments for each domain: == domain 1 score: 12.2 bits; conditional E-value: 0.0067 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54 v+++g+G+ G+ A a+ L++ G +V+++ +p +++ e++gl+a+ + sp|B8I1T8|ILVC_CLOCE 20 VAVIGYGSQGH-----AHAQNLKDSGVNVIVGLTPSSARRKqvEADGLKAYDTAEA 70 67888999998.....88**************99998765444******9775544 PP >> sp|A4VXL3|ILVC_STRSY Ketol-acid reductoisomerase OS=Streptococcus suis (strain 05ZYH33) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.0 0.0 0.066 37 1 35 [. 21 50 .. 21 90 .. 0.88 Alignments for each domain: == domain 1 score: 9.0 bits; conditional E-value: 0.066 EEEE-------HHHHHHHHHHHHH---EEEEEETG CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatpp 35 ++++g+G+ G+ A a+ L++ Gh+V++++ sp|A4VXL3|ILVC_STRSY 21 IAVIGYGSQGH-----AHAQNLRDTGHDVIIGVRA 50 57888889888.....88**************976 PP >> sp|A4W3V8|ILVC_STRS2 Ketol-acid reductoisomerase OS=Streptococcus suis (strain 98HAH33) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.0 0.0 0.066 37 1 35 [. 21 50 .. 21 90 .. 0.88 Alignments for each domain: == domain 1 score: 9.0 bits; conditional E-value: 0.066 EEEE-------HHHHHHHHHHHHH---EEEEEETG CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatpp 35 ++++g+G+ G+ A a+ L++ Gh+V++++ sp|A4W3V8|ILVC_STRS2 21 IAVIGYGSQGH-----AHAQNLRDTGHDVIIGVRA 50 57888889888.....88**************976 PP >> sp|Q3B594|ILVC_PELLD Ketol-acid reductoisomerase OS=Pelodictyon luteolum (strain DSM 273) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.0 0.0 0.0079 4.4 1 59 [. 19 73 .. 19 116 .. 0.82 Alignments for each domain: == domain 1 score: 12.0 bits; conditional E-value: 0.0079 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwa 59 ++++g+G+ G+ A a L++ G +V+++ p+ + +eagl ++p++ vk wa sp|Q3B594|ILVC_PELLD 19 IAVLGYGSQGH-----AHALNLKDSGMNVCVGLRPDSSSCAkaREAGLRVEPVADAVK-WA 73 67889999998.....7799*****************9998889********999833.33 PP >> sp|B1I8F2|MUTL_STRPI DNA mismatch repair protein mutL OS=Streptococcus pneumoniae (strain Hungary19A-6) GN=mutL PE=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.3 0.0 0.026 15 65 128 .. 203 266 .. 172 268 .. 0.85 Alignments for each domain: == domain 1 score: 10.3 bits; conditional E-value: 0.026 HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS Glyco_transf_28 65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128 + l+++ +g +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++ + +l n+ sp|B1I8F2|MUTL_STRPI 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266 56777788888999*************************************9988877776665 PP >> sp|B2IS10|MUTL_STRPS DNA mismatch repair protein mutL OS=Streptococcus pneumoniae (strain CGSP14) GN=mutL PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.3 0.0 0.026 15 65 128 .. 203 266 .. 172 268 .. 0.85 Alignments for each domain: == domain 1 score: 10.3 bits; conditional E-value: 0.026 HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS Glyco_transf_28 65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128 + l+++ +g +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++ + +l n+ sp|B2IS10|MUTL_STRPS 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266 56777788888999*************************************9988877776665 PP >> sp|B8ZKC9|MUTL_STRPJ DNA mismatch repair protein mutL OS=Streptococcus pneumoniae (strain ATCC 700669 / Spain 23F-1) # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.3 0.0 0.026 15 65 128 .. 203 266 .. 172 268 .. 0.85 Alignments for each domain: == domain 1 score: 10.3 bits; conditional E-value: 0.026 HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS Glyco_transf_28 65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128 + l+++ +g +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++ + +l n+ sp|B8ZKC9|MUTL_STRPJ 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266 56777788888999*************************************9988877776665 PP >> sp|P0A3R1|HEXB_STRPN DNA mismatch repair protein hexB OS=Streptococcus pneumoniae GN=hexB PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.3 0.0 0.026 15 65 128 .. 203 266 .. 172 268 .. 0.85 Alignments for each domain: == domain 1 score: 10.3 bits; conditional E-value: 0.026 HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS Glyco_transf_28 65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128 + l+++ +g +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++ + +l n+ sp|P0A3R1|HEXB_STRPN 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266 56777788888999*************************************9988877776665 PP >> sp|P0A3R2|HEXB_STRR6 DNA mismatch repair protein hexB OS=Streptococcus pneumoniae (strain ATCC BAA-255 / R6) GN=hexB # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.3 0.0 0.026 15 65 128 .. 203 266 .. 172 268 .. 0.85 Alignments for each domain: == domain 1 score: 10.3 bits; conditional E-value: 0.026 HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS Glyco_transf_28 65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128 + l+++ +g +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++ + +l n+ sp|P0A3R2|HEXB_STRR6 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266 56777788888999*************************************9988877776665 PP >> sp|Q04MR4|MUTL_STRP2 DNA mismatch repair protein mutL OS=Streptococcus pneumoniae serotype 2 (strain D39 / NCTC 7466 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.3 0.0 0.026 15 65 128 .. 203 266 .. 172 268 .. 0.85 Alignments for each domain: == domain 1 score: 10.3 bits; conditional E-value: 0.026 HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS Glyco_transf_28 65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128 + l+++ +g +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++ + +l n+ sp|Q04MR4|MUTL_STRP2 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266 56777788888999*************************************9988877776665 PP >> sp|C1CI68|MUTL_STRZP DNA mismatch repair protein mutL OS=Streptococcus pneumoniae (strain P1031) GN=mutL PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.3 0.0 0.026 15 65 128 .. 203 266 .. 172 268 .. 0.85 Alignments for each domain: == domain 1 score: 10.3 bits; conditional E-value: 0.026 HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS Glyco_transf_28 65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128 + l+++ +g +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++ + +l n+ sp|C1CI68|MUTL_STRZP 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266 56777788888999*************************************9988877776665 PP >> sp|C1CP43|MUTL_STRZT DNA mismatch repair protein mutL OS=Streptococcus pneumoniae (strain Taiwan19F-14) GN=mutL PE=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.3 0.0 0.026 15 65 128 .. 203 266 .. 172 268 .. 0.85 Alignments for each domain: == domain 1 score: 10.3 bits; conditional E-value: 0.026 HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS Glyco_transf_28 65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128 + l+++ +g +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++ + +l n+ sp|C1CP43|MUTL_STRZT 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266 56777788888999*************************************9988877776665 PP >> sp|Q8ZQE4|MACB_SALTY Macrolide export ATP-binding/permease protein macB OS=Salmonella typhimurium GN=macB PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.0 0.2 0.016 8.8 16 59 .. 184 248 .. 181 304 .. 0.61 Alignments for each domain: == domain 1 score: 11.0 bits; conditional E-value: 0.016 HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S---- CS Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwa 59 +A+ r+L++rGh V+++t++ l + +e+ +e++ ++ ++w+ sp|Q8ZQE4|MACB_SALTY 184 MAILRQLRDRGHTVIIVTHDPLIAAQAERIIEIHDGKIVhnppaqekkreqgvdaavvntAPGWR 248 89*****************9998888777777776444455666777777777777777655555 PP >> sp|Q57R58|MACB_SALCH Macrolide export ATP-binding/permease protein macB OS=Salmonella choleraesuis GN=macB PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.0 0.2 0.016 8.8 16 59 .. 184 248 .. 181 304 .. 0.61 Alignments for each domain: == domain 1 score: 11.0 bits; conditional E-value: 0.016 HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S---- CS Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwa 59 +A+ r+L++rGh V+++t++ l + +e+ +e++ ++ ++w+ sp|Q57R58|MACB_SALCH 184 MAILRQLRDRGHTVIIVTHDPLIAAQAERIIEIHDGKIVhnppaqekkreqgvdaavvntAPGWR 248 89*****************9998888777777776444455666777777777777777655555 PP >> sp|Q64550|UD11_RAT UDP-glucuronosyltransferase 1-1 OS=Rattus norvegicus GN=Ugt1a1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.3 0.0 0.0064 3.6 15 92 .. 45 123 .. 39 172 .. 0.71 Alignments for each domain: == domain 1 score: 12.3 bits; conditional E-value: 0.0064 HHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----........S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 15 avAlareLqrrGheVrlatppgleefveeagleavpigpd........vklwakleslktlkelaeglkalrkakeilkeakpdvv 92 + + ++Lq++GheV +++p++ + e + ++++++++ +++ ++++++ l ++ +++ + k d + sp|Q64550|UD11_RAT 45 MLGVIQQLQQKGHEVVVIAPEASIHIKEGSFYTMRKYPVPfqnenvtaA-------FVELGRSVFDQDPFLLRVVKTYNKVKRDSS 123 57899****************999999********99999665333330.......344444444444444444444444444444 PP >> sp|B9JCX4|GLYA_AGRRK Serine hydroxymethyltransferase OS=Agrobacterium radiobacter (strain K84 / ATCC BAA-868) GN=gly # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.6 0.0 0.011 6 13 108 .. 20 116 .. 17 121 .. 0.83 Alignments for each domain: == domain 1 score: 11.6 bits; conditional E-value: 0.011 HHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE.----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC--- CS Glyco_transf_28 13 ePavAlareLqrrGheVrlatppgleefv..eeagleavp.igpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggy 98 e + A+++eL r+ he++l+++++++++ e++g + ++ + +++++ ++++ae+ a+++ak+++ ++++v g++ sp|B9JCX4|GLYA_AGRRK 20 EIFGAIGKELGRQRHEIELIASENIVSRAvlEAQGSIMTNkYAEGYPGKRYY-GGCQYVDIAEE-LAIERAKKLFGVNFANVQPNSGSQ 106 66789*********************99887666655544577777888888.88889999999.999999999999999999999999 PP -EEEE--HHH CS Glyco_transf_28 99 vadlaliaal 108 + ++++a l sp|B9JCX4|GLYA_AGRRK 107 MNQAVFLALL 116 9988888765 PP >> sp|Q8Z824|MACB_SALTI Macrolide export ATP-binding/permease protein macB OS=Salmonella typhi GN=macB PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.0 0.2 0.016 8.8 16 59 .. 184 248 .. 181 304 .. 0.61 Alignments for each domain: == domain 1 score: 11.0 bits; conditional E-value: 0.016 HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S---- CS Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwa 59 +A+ r+L++rGh V+++t++ l + +e+ +e++ ++ ++w+ sp|Q8Z824|MACB_SALTI 184 MAILRQLRDRGHTVIIVTHDPLIAAQAERIIEIHDGKIVhnppaqekkreqgvdaavvntAPGWR 248 89*****************9998888777777776444455666777777777777777655555 PP >> sp|O94475|YC67_SCHPO Uncharacterized protein C1919.07 OS=Schizosaccharomyces pombe GN=SPCC1919.07 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.7 0.0 0.0047 2.7 43 134 .. 80 181 .. 70 185 .. 0.81 Alignments for each domain: == domain 1 score: 12.7 bits; conditional E-value: 0.0047 H---EEEE----...........S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EE.EE--HHHHHHHHHHHHHH CS Glyco_transf_28 43 eagleavpigpd...........vklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvad.laliaallagipanvaEq 119 ++l+a+p+++ + ++ e ++ ++e e k+++++++ + +kp+v ++ ++ +d + ++++ + +p+ ++E+ sp|O94475|YC67_SCHPO 80 YSKLQARPLTGLgisnqkpkskvRTIQR--EEVADMLESVEHEKSIQEFRKRYNVQKPKVNISHAEAEEDiDSFLESMDQSAPPSITED 166 5566666644445667788877777888..7888999999999*******************9888776627899999*********** PP ----EEEEESSGGGS CS Glyco_transf_28 120 ngipglvnkllprra 134 g +++ +++++ sp|O94475|YC67_SCHPO 167 KGENYISSNHSSMHI 181 *********999976 PP >> sp|P59837|RDH12_BOVIN Retinol dehydrogenase 12 OS=Bos taurus GN=RDH12 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 6.5 0.0 0.39 2.2e+02 19 73 .. 56 108 .. 53 136 .. 0.78 2 ? 4.4 0.0 1.7 9.7e+02 34 79 .. 211 265 .. 205 284 .. 0.85 Alignments for each domain: == domain 1 score: 6.5 bits; conditional E-value: 0.39 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHH CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeg 73 areL rrG +V +a + l+ + ++++++a + +++ l +kl l+ k++ ++ sp|P59837|RDH12_BOVIN 56 ARELARRGARVYIACRDVLKGESAASEIQADTKNSQ-VLVRKL-DLSDTKSIRAF 108 89****************************999999.555556.55555555544 PP == domain 2 score: 4.4 bits; conditional E-value: 1.7 TGGGHHHHHH---EEEE----.............S------.-HHHCCSHHHHHHHHHH CS Glyco_transf_28 34 ppgleefveeagleavpigpd.............vklwakleslktlkelaeglkalrk 79 +++l+++++ +g++++++ p+ lw+ ++ +lk+++eg a + sp|P59837|RDH12_BOVIN 211 TRELAKRLKGTGVTTYAVHPGivrsklvrhsfllCLLWR--LFSPFLKTTWEG--AQTS 265 688999***************************999999..79*********9..4444 PP >> sp|Q5PGK9|MACB_SALPA Macrolide export ATP-binding/permease protein macB OS=Salmonella paratyphi A GN=macB PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.0 0.2 0.016 8.8 16 59 .. 184 248 .. 181 304 .. 0.61 Alignments for each domain: == domain 1 score: 11.0 bits; conditional E-value: 0.016 HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S---- CS Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwa 59 +A+ r+L++rGh V+++t++ l + +e+ +e++ ++ ++w+ sp|Q5PGK9|MACB_SALPA 184 MAILRQLRDRGHTVIIVTHDPLIAAQAERIIEIHDGKIVhnppaqekkreqgvdaavvntAPGWR 248 89*****************9998888777777776444455666777777777777777655555 PP >> sp|Q02CM4|ILVC_SOLUE Ketol-acid reductoisomerase OS=Solibacter usitatus (strain Ellin6076) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.0 0.1 0.032 18 1 48 [. 20 64 .. 20 90 .. 0.89 Alignments for each domain: == domain 1 score: 10.0 bits; conditional E-value: 0.032 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48 v+++g+G+ G+ A a L++ G +V ++ p g +++ e+agl++ sp|Q02CM4|ILVC_SOLUE 20 VAIIGYGSQGH-----AHALNLRDSGVDVVVGLPAGSKSTAkaEAAGLKV 64 57888888888.....7799*******************99989999975 PP >> sp|Q669P6|NPD_YERPS NAD-dependent deacetylase OS=Yersinia pseudotuberculosis GN=npdA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.8 0.0 0.019 11 3 21 .. 208 226 .. 207 257 .. 0.78 Alignments for each domain: == domain 1 score: 10.8 bits; conditional E-value: 0.019 EE-------HHHHHHHHHH CS Glyco_transf_28 3 laggGTrGdvePavAlare 21 ++++GT G+v+Pa+ + +e sp|Q669P6|NPD_YERPS 208 FISIGTSGHVYPAAGFVHE 226 789**********998877 PP >> sp|Q8ZFR1|NPD_YERPE NAD-dependent deacetylase OS=Yersinia pestis GN=npdA PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.8 0.0 0.019 11 3 21 .. 208 226 .. 207 257 .. 0.78 Alignments for each domain: == domain 1 score: 10.8 bits; conditional E-value: 0.019 EE-------HHHHHHHHHH CS Glyco_transf_28 3 laggGTrGdvePavAlare 21 ++++GT G+v+Pa+ + +e sp|Q8ZFR1|NPD_YERPE 208 FISIGTSGHVYPAAGFVHE 226 789**********998877 PP >> sp|B9KYS1|ILVC_THERP Ketol-acid reductoisomerase OS=Thermomicrobium roseum (strain ATCC 27502 / DSM 5159 / P-2) GN=i # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.8 0.1 0.009 5.1 1 69 [. 20 82 .. 20 94 .. 0.83 Alignments for each domain: == domain 1 score: 11.8 bits; conditional E-value: 0.009 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCS CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeagleavpigpdvklwakleslktlke 69 v+++g+G+ G+ A a+ L++ G +V ++ ++g +++ +++ ++ ++p+ +++a+++ +++l++ sp|B9KYS1|ILVC_THERP 20 VAVLGYGSQGH-----AHAQNLRDSGVQVVVGLHEGSRSRERAKSDGFEVLTPR-EAAARGDIISMLMP 82 67889999998.....88*********************996666667778888.88888888888776 PP >> sp|B4UAN4|ILVC_ANASK Ketol-acid reductoisomerase OS=Anaeromyxobacter sp. (strain K) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.5 0.1 0.023 13 1 48 [. 20 64 .. 20 104 .. 0.79 Alignments for each domain: == domain 1 score: 10.5 bits; conditional E-value: 0.023 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48 v+++g+G+ G+ A a L++ G +Vr++ g +++ e agl + sp|B4UAN4|ILVC_ANASK 20 VAIIGYGSQGH-----AHALNLRDSGVDVRVGLAAGSKSKAkaEGAGLRV 64 57888888888.....7799**********66666666666448888765 PP >> sp|B8J829|ILVC_ANAD2 Ketol-acid reductoisomerase OS=Anaeromyxobacter dehalogenans (strain 2CP-1 / ATCC BAA-258) GN=i # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.5 0.1 0.023 13 1 48 [. 20 64 .. 20 103 .. 0.79 Alignments for each domain: == domain 1 score: 10.5 bits; conditional E-value: 0.023 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48 v+++g+G+ G+ A a L++ G +Vr++ g +++ e agl + sp|B8J829|ILVC_ANAD2 20 VAIIGYGSQGH-----AHALNLRDSGVDVRVGLAAGSKSKAkaEGAGLRV 64 57888888888.....7799**********66666666666448888765 PP >> sp|Q2IJB7|ILVC_ANADE Ketol-acid reductoisomerase OS=Anaeromyxobacter dehalogenans (strain 2CP-C) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.5 0.1 0.023 13 1 48 [. 20 64 .. 20 103 .. 0.79 Alignments for each domain: == domain 1 score: 10.5 bits; conditional E-value: 0.023 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48 v+++g+G+ G+ A a L++ G +Vr++ g +++ e agl + sp|Q2IJB7|ILVC_ANADE 20 VAIIGYGSQGH-----AHALNLRDSGVDVRVGLAAGSKSKAkaEGAGLRV 64 57888888888.....7799**********66666666666448888765 PP >> sp|Q0RDI8|ILVC_FRAAA Ketol-acid reductoisomerase OS=Frankia alni (strain ACN14a) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.8 0.1 0.0091 5.1 1 45 [. 20 59 .. 20 95 .. 0.82 Alignments for each domain: == domain 1 score: 11.8 bits; conditional E-value: 0.0091 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHHHH-- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefveeag 45 v+++g+G+ G+ A a L++ G +Vr++ p + +++ ++a+ sp|Q0RDI8|ILVC_FRAAA 20 VAVIGYGSQGH-----AHALNLRDSGVDVRVGLPADSRSRAKAAE 59 67888999998.....7799*******************995543 PP >> sp|P0ABQ0|COABC_ECOLI Coenzyme A biosynthesis bifunctional protein coaBC OS=Escherichia coli (strain K12) GN=coaBC P # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.3 0.0 0.013 7.1 18 54 .. 24 61 .. 23 135 .. 0.79 Alignments for each domain: == domain 1 score: 11.3 bits; conditional E-value: 0.013 HHHHHHH---EEEEEETGGGHHHHHH---EEEE.---- CS Glyco_transf_28 18 lareLqrrGheVrlatppgleefveeagleavp.igpd 54 l r+L++rG +Vr+a +++ ++f++ l+av+ +++ sp|P0ABQ0|COABC_ECOLI 24 LVRRLRDRGADVRVAMTEAAKAFITPLSLQAVSgYPVS 61 689*********************98888888766655 PP >> sp|P0ABQ1|COABC_ECOL6 Coenzyme A biosynthesis bifunctional protein coaBC OS=Escherichia coli O6 GN=coaBC PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.3 0.0 0.013 7.1 18 54 .. 24 61 .. 23 135 .. 0.79 Alignments for each domain: == domain 1 score: 11.3 bits; conditional E-value: 0.013 HHHHHHH---EEEEEETGGGHHHHHH---EEEE.---- CS Glyco_transf_28 18 lareLqrrGheVrlatppgleefveeagleavp.igpd 54 l r+L++rG +Vr+a +++ ++f++ l+av+ +++ sp|P0ABQ1|COABC_ECOL6 24 LVRRLRDRGADVRVAMTEAAKAFITPLSLQAVSgYPVS 61 689*********************98888888766655 PP >> sp|B2J2U6|ILVC_NOSP7 Ketol-acid reductoisomerase OS=Nostoc punctiforme (strain ATCC 29133 / PCC 73102) GN=ilvC PE=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.9 0.0 0.0085 4.8 1 64 [. 20 76 .. 20 170 .. 0.82 Alignments for each domain: == domain 1 score: 11.9 bits; conditional E-value: 0.0085 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-H CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwaklesl 64 ++++g+G+ G+ A a L++ G +V+++ pg ++ e+agl++++++ ++a + sp|B2J2U6|ILVC_NOSP7 20 IAIIGYGSQGH-----AHALNLKDSGLNVIVGLYPGSKSVAkaEAAGLTVKSVADA-ANAA---DF 76 57888888888.....7799****************9998888*********9998.3333...22 PP >> sp|Q89DG9|UVRC_BRAJA UvrABC system protein C OS=Bradyrhizobium japonicum GN=uvrC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.5 0.0 0.011 6.4 14 73 .. 598 658 .. 597 665 .. 0.91 Alignments for each domain: == domain 1 score: 11.5 bits; conditional E-value: 0.011 HHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE.----S------.-HHHCCSHHHH CS Glyco_transf_28 14 PavAlareLqrrGheVrlatppgleefv.eeagleavp.igpdvklwakleslktlkelaeg 73 P + + ++L+++ h+ ++++++l+++ +eagl+ p igp + +a l++++tlke+ + sp|Q89DG9|UVRC_BRAJA 598 PVLYFIQRLRDEAHRFVIGSHRKLRKKDiREAGLQEIPgIGPS-RKRALLHHFGTLKEIERA 658 6777899******************9988**************.999999******998775 PP >> sp|Q2S0M9|ILVC_SALRD Ketol-acid reductoisomerase OS=Salinibacter ruber (strain DSM 13855) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.8 0.1 0.009 5.1 1 63 [. 17 73 .. 17 104 .. 0.82 Alignments for each domain: == domain 1 score: 11.8 bits; conditional E-value: 0.009 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakles 63 v+++g+G+ G+ A a L + G +V ++ pg ++ e++gl++ ig +w + sp|Q2S0M9|ILVC_SALRD 17 VAVIGYGSQGH-----AHALNLHDSGVDVAVGLRPGSSSRPkaEQQGLTVMDIGEA-AAWG--DV 73 67888899888.....7799*****************999999***********99.7777..33 PP >> sp|Q7NH80|ILVC_GLOVI Ketol-acid reductoisomerase OS=Gloeobacter violaceus GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.9 0.0 0.0086 4.9 1 59 [. 22 76 .. 22 122 .. 0.77 Alignments for each domain: == domain 1 score: 11.9 bits; conditional E-value: 0.0086 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwa 59 ++++g+G+ G+ A a L++ G++V+++ +g +++ e++gl+++p + ++a sp|Q7NH80|ILVC_GLOVI 22 IAIVGYGSQGH-----AHALNLKDSGIDVIVGLYEGSRSWAraENEGLAVYPTAEA-AAKA 76 67888999998.....7799********************99999****9887766.3333 PP >> sp|Q8G6V1|ILVC2_BIFLO Ketol-acid reductoisomerase 2 OS=Bifidobacterium longum GN=ilvC2 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.0 0.1 0.0081 4.5 1 54 [. 21 71 .. 21 110 .. 0.78 Alignments for each domain: == domain 1 score: 12.0 bits; conditional E-value: 0.0081 EEEE-------HHHHHHHHHHHHH---EEEEEETG..GGHHHHHH---EEEE---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatpp..gleefveeagleavpigpd 54 v+++g+G+ G+ A a L++ G +V ++ p + +ef +e+gle++p+g sp|Q8G6V1|ILVC2_BIFLO 21 VAILGYGSQGH-----AHALNLRDSGVDVVVGLRPtsKSVEFAKEQGLEVKPVGEA 71 67889999998.....7799**********9998822467788**********987 PP >> sp|Q2W698|ENO_MAGSA Enolase OS=Magnetospirillum magneticum (strain AMB-1 / ATCC 700264) GN=eno PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.2 0.0 0.059 33 15 53 .. 186 224 .. 183 275 .. 0.80 Alignments for each domain: == domain 1 score: 9.2 bits; conditional E-value: 0.059 HHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE--- CS Glyco_transf_28 15 avAlareLqrrGheVrlatppgleefveeagleavpigp 53 + Al ++L+++Gh+ ++ + g+++ +++a+++ i sp|Q2W698|ENO_MAGSA 186 FHALKKTLKDAGHNTNVGDEGGFAPNLKSAEMALDFIMK 224 78*************************999998877655 PP >> sp|Q63GN3|MTNA1_BACCZ Methylthioribose-1-phosphate isomerase 1 OS=Bacillus cereus (strain ZK / E33L) GN=mtnA1 PE=3 S # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.7 0.0 0.0097 5.4 17 63 .. 202 247 .. 193 275 .. 0.83 Alignments for each domain: == domain 1 score: 11.7 bits; conditional E-value: 0.0097 HHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S------.- CS Glyco_transf_28 17 AlareLqrrGheVrlatppgleefv.eeagleavpigpdvklwakles 63 a eLqr+G++V+++t +++++v + +++av +g+d +++a+++ sp|Q63GN3|MTNA1_BACCZ 202 LTALELQRAGIDVTVITD-NMAAMVmSQGKVDAVIVGCD-RVAANGDV 247 5699*********98875.67777779************.88887744 PP >> sp|B0JRP2|ILVC_MICAN Ketol-acid reductoisomerase OS=Microcystis aeruginosa (strain NIES-843) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.7 0.0 0.0096 5.4 1 54 [. 20 70 .. 20 140 .. 0.81 Alignments for each domain: == domain 1 score: 11.7 bits; conditional E-value: 0.0096 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54 ++++g+G+ G+ A a L++ G +V+++ pg ++ + +eag++++ ++ sp|B0JRP2|ILVC_MICAN 20 IAIIGYGSQGH-----AHALNLKDSGVNVIVGLYPGSKSAIkaKEAGIPVYDVAEA 70 57888888888.....7799*********************999*****9888766 PP >> sp|C1CBX8|MUTL_STRZJ DNA mismatch repair protein mutL OS=Streptococcus pneumoniae (strain JJA) GN=mutL PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.3 0.0 0.027 15 65 128 .. 203 266 .. 173 268 .. 0.85 Alignments for each domain: == domain 1 score: 10.3 bits; conditional E-value: 0.027 HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS Glyco_transf_28 65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128 + l+++ +g +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++ + +l n+ sp|C1CBX8|MUTL_STRZJ 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266 56777788888999*************************************9988877776665 PP >> sp|Q3SLY0|BIOB_THIDA Biotin synthase OS=Thiobacillus denitrificans (strain ATCC 25259) GN=bioB PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.7 0.0 0.0097 5.4 12 80 .. 114 184 .. 113 279 .. 0.78 Alignments for each domain: == domain 1 score: 11.7 bits; conditional E-value: 0.0097 HHHHHHHHHHHHH---EEE..EE.ETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHH CS Glyco_transf_28 12 vePavAlareLqrrGheVr..la.tppgleefveeagleavpigpdvklwakleslktlkelaeglkalrka 80 +eP +A+ re+++ G e + l+ ++g +e+++eagl+++ ++d ++++ + t ++ +++l++l+++ sp|Q3SLY0|BIOB_THIDA 114 LEPVLAMVREVKALGLETCatLGmLKDGQAEQLKEAGLDYYNHNLD-TAPEFYGEIITTRDYQDRLDTLERV 184 69*******************873578888899********99999.5554111222333333343334333 PP >> sp|B5E6C5|MUTL_STRP4 DNA mismatch repair protein mutL OS=Streptococcus pneumoniae serotype 19F (strain G54) GN=mutL # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.3 0.0 0.027 15 65 128 .. 203 266 .. 173 268 .. 0.85 Alignments for each domain: == domain 1 score: 10.3 bits; conditional E-value: 0.027 HHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEE CS Glyco_transf_28 65 ktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvnk 128 + l+++ +g +l +ak+ ++ ++ d+++++ g+v+++ l+ a++++i ++++ + +l n+ sp|B5E6C5|MUTL_STRP4 203 GQLRQAIAGIYGLVSAKKMIEIENSDLDFEISGFVSLPELTRANRNYISLFINGRYIKNFLLNR 266 56777788888999*************************************9988877776665 PP >> sp|B2J6I3|MURD_NOSP7 UDP-N-acetylmuramoylalanine--D-glutamate ligase OS=Nostoc punctiforme (strain ATCC 29133 / PCC # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.6 0.0 0.011 6 16 55 .. 14 60 .. 11 138 .. 0.83 Alignments for each domain: == domain 1 score: 11.6 bits; conditional E-value: 0.011 HHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----......S CS Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefv.eeagleavpigpd......v 55 vA ar L+r+G+eV+l + ++ + +++l+a++i+++ + sp|B2J6I3|MURD_NOSP7 14 VAAARLLKREGWEVELSDGNTSKTLLqQQQELAAEQITVKlgqsleL 60 899**********************************9994444440 PP >> sp|Q5LXV0|ILVC_STRT1 Ketol-acid reductoisomerase OS=Streptococcus thermophilus (strain CNRZ 1066) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.4 0.0 0.05 28 1 52 [. 21 68 .. 21 117 .. 0.74 Alignments for each domain: == domain 1 score: 9.4 bits; conditional E-value: 0.05 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGH.HHHHH---EEEE-- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgle.efveeagleavpig 52 ++++g+G+ G+ A + L++ Gh+V++++ pg ++ +e+g ++++++ sp|Q5LXV0|ILVC_STRT1 21 IAVIGYGSQGH-----AHSQNLRDTGHDVIIGVRPGKSfDKAKEDGFDTYTVA 68 56778888888.....6789*************99743144466666666555 PP >> sp|Q5M2F2|ILVC_STRT2 Ketol-acid reductoisomerase OS=Streptococcus thermophilus (strain ATCC BAA-250 / LMG 18311) GN= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.4 0.0 0.05 28 1 52 [. 21 68 .. 21 117 .. 0.74 Alignments for each domain: == domain 1 score: 9.4 bits; conditional E-value: 0.05 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGH.HHHHH---EEEE-- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgle.efveeagleavpig 52 ++++g+G+ G+ A + L++ Gh+V++++ pg ++ +e+g ++++++ sp|Q5M2F2|ILVC_STRT2 21 IAVIGYGSQGH-----AHSQNLRDTGHDVIIGVRPGKSfDKAKEDGFDTYTVA 68 56778888888.....6789*************99743144466666666555 PP >> sp|C6A5E6|VATD_THESM V-type ATP synthase subunit D OS=Thermococcus sibiricus (strain MM 739 / DSM 12597) GN=atpD PE= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 3.2 0.0 4.1 2.3e+03 66 100 .. 13 47 .. 5 74 .. 0.79 2 ? 7.7 0.0 0.17 95 29 87 .. 104 160 .. 98 205 .. 0.82 Alignments for each domain: == domain 1 score: 3.2 bits; conditional E-value: 4.1 HCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----E CS Glyco_transf_28 66 tlkelaeglkalrkakeilkeakpdvvvgfggyva 100 +l++l ++ k +k +ilke++++++++f + ++ sp|C6A5E6|VATD_THESM 13 ELLRLKRRIKLAEKGHKILKEKQDALIMEFFTIYD 47 678899999999***************99876544 PP == domain 2 score: 7.7 bits; conditional E-value: 0.17 EEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 29 Vrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilkea 87 V l+ +g+++ e+g+++v+ p+v + a e++++++el +l +++++ + l+++ sp|C6A5E6|VATD_THESM 104 VPLIEAEGFRRDPYERGYAFVSTSPKVDVTA--ETFEEVLELVTRLAEIEETLKRLAKE 160 557777899999999***********88888..99999999999988888888888765 PP >> sp|Q2RIS6|ILVC_MOOTA Ketol-acid reductoisomerase OS=Moorella thermoacetica (strain ATCC 39073) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.2 0.0 0.014 7.7 1 67 [. 20 80 .. 20 103 .. 0.81 Alignments for each domain: == domain 1 score: 11.2 bits; conditional E-value: 0.014 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-HHHC CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwakleslktl 67 ++++g+G+ G+ + a+ L++ G +V ++ p+ +++ +agle+++++ + a + ++ l sp|Q2RIS6|ILVC_MOOTA 20 IAVMGYGSQGHSQ-----AQNLKDSGLDVVVGLRPESKSRAaaQAAGLEVKTVAEA-AAEA--DIIQIL 80 6789999999966.....9*********************998999***9999877.4444..445554 PP >> sp|Q3M859|THIOG_ANAVT Bifunctional protein thiO/thiG OS=Anabaena variabilis (strain ATCC 29413 / PCC 7937) GN=thiO/t # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 8.0 0.0 0.13 74 87 135 .. 315 363 .. 291 366 .. 0.92 Alignments for each domain: == domain 1 score: 8.0 bits; conditional E-value: 0.13 HHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEEESSGGGSC CS Glyco_transf_28 87 akpdvvvgfggyvadlaliaallagipanvaEqngipglvnkllprran 135 +++++++++g y ++ +l ++a i+ ++ Eq + p+l++++++r+ + sp|Q3M859|THIOG_ANAVT 315 HCANLTLATGHYRNGILLAPITAALIADFIVEQKSDPLLSHFHYSRFQK 363 6778999*************************************99865 PP >> sp|Q5GS59|RLME_WOLTR Ribosomal RNA large subunit methyltransferase E OS=Wolbachia sp. subsp. Brugia malayi (strain T # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.3 0.0 0.013 7.4 24 93 .. 58 124 .. 54 128 .. 0.87 Alignments for each domain: == domain 1 score: 11.3 bits; conditional E-value: 0.013 H---EEE.EEETGGGHHHH.HH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHH CS Glyco_transf_28 24 rrGheVr.latppgleefv.eeagleavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvv 93 ++G ++ l+++pg ++v ++g+++v+i+++ + ++++ +k ++ ++l+ ++e +k++k dv++ sp|Q5GS59|RLME_WOLTR 58 QAGQKIVdLGASPGGWSQVaSQKGVKVVAIDIK---PV--NTISGVKYIQYDINELETLRERFKDQKFDVIL 124 44444444*************************...66..99************************999875 PP >> sp|B8G7X1|ILVC_CHLAD Ketol-acid reductoisomerase OS=Chloroflexus aggregans (strain MD-66 / DSM 9485) GN=ilvC PE=3 SV # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.7 0.1 0.0049 2.8 2 54 .. 21 70 .. 20 103 .. 0.78 Alignments for each domain: == domain 1 score: 12.7 bits; conditional E-value: 0.0049 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54 +++g+G+ G+ A ar L + G +Vr++ pg +++ eeagl++ +++ sp|B8G7X1|ILVC_CHLAD 21 AIIGFGSQGH-----AHARNLADSGLDVRVGLYPGSKSWAkvEEAGLKVMTVAEA 70 5667777776.....789********************9999******9888766 PP >> sp|C5C2I2|ILVC_BEUC1 Ketol-acid reductoisomerase OS=Beutenbergia cavernae (strain ATCC BAA-8 / DSM 12333 / NBRC 1643 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.0 0.1 0.016 9 1 52 [. 20 68 .. 20 98 .. 0.84 Alignments for each domain: == domain 1 score: 11.0 bits; conditional E-value: 0.016 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE-- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpig 52 v+++g+G+ G+ A a L++ G +Vr++ +g +++ e++gl++ +++ sp|C5C2I2|ILVC_BEUC1 20 VAVIGYGSQGH-----AHALNLRDSGVDVRVGLREGSASRAkaENEGLKVLTVP 68 67888999998.....7799*******************998899999887665 PP >> sp|Q5SJ03|ILVC_THET8 Ketol-acid reductoisomerase OS=Thermus thermophilus (strain HB8 / ATCC 27634 / DSM 579) GN=ilvC # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.5 0.1 0.022 13 2 54 .. 20 69 .. 19 111 .. 0.81 Alignments for each domain: == domain 1 score: 10.5 bits; conditional E-value: 0.022 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54 +++g+G+ G+ A a L++ G +Vr++ +g +++ e+agl + p++ sp|Q5SJ03|ILVC_THET8 20 AVLGFGSQGH-----AHALNLKDSGVDVRVGLRKGSRSWEkaEAAGLRVLPVAEA 69 6777777777.....7799******************99988999*999887765 PP >> sp|Q72JC8|ILVC_THET2 Ketol-acid reductoisomerase OS=Thermus thermophilus (strain HB27 / ATCC BAA-163 / DSM 7039) GN= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.5 0.1 0.022 13 2 54 .. 20 69 .. 19 111 .. 0.81 Alignments for each domain: == domain 1 score: 10.5 bits; conditional E-value: 0.022 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54 +++g+G+ G+ A a L++ G +Vr++ +g +++ e+agl + p++ sp|Q72JC8|ILVC_THET2 20 AVLGFGSQGH-----AHALNLKDSGVDVRVGLRKGSRSWEkaEAAGLRVLPVAEA 69 6777777777.....7799******************99988999*999887765 PP >> sp|Q4JUN9|ILVC_CORJK Ketol-acid reductoisomerase OS=Corynebacterium jeikeium (strain K411) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.8 0.0 0.019 11 1 49 [. 21 66 .. 21 97 .. 0.86 Alignments for each domain: == domain 1 score: 10.8 bits; conditional E-value: 0.019 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEE CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleav 49 v+++g+G+ G+ A a+ L++ G eV ++ +g +++ eeag +++ sp|Q4JUN9|ILVC_CORJK 21 VAIIGYGSQGH-----AHAQNLRESGVEVVIGLREGSKSRAkaEEAGFTVK 66 57888888888.....88**********************98888887765 PP >> sp|Q2J0X3|UVRC_RHOP2 UvrABC system protein C OS=Rhodopseudomonas palustris (strain HaA2) GN=uvrC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.3 0.0 0.013 7.5 14 72 .. 607 666 .. 606 672 .. 0.91 Alignments for each domain: == domain 1 score: 11.3 bits; conditional E-value: 0.013 HHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE.----S------.-HHHCCSHHH CS Glyco_transf_28 14 PavAlareLqrrGheVrlatppgleefv.eeagleavp.igpdvklwakleslktlkelae 72 P + + ++L+++ h+ ++++++l+++ +eagl+ p igp + +a l++++tlke+ + sp|Q2J0X3|UVRC_RHOP2 607 PVLYFIQRLRDEAHRFVIGSHRKLRKKDiREAGLQEIPgIGPS-RKRALLHHFGTLKEIER 666 6777899******************9988**************.9999999*****99876 PP >> sp|Q02YY8|ILVC_LACLS Ketol-acid reductoisomerase OS=Lactococcus lactis subsp. cremoris (strain SK11) GN=ilvC PE=3 SV # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.2 0.0 0.028 16 1 36 [. 21 51 .. 21 101 .. 0.79 Alignments for each domain: == domain 1 score: 10.2 bits; conditional E-value: 0.028 EEEE-------HHHHHHHHHHHHH---EEEEEETGG CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppg 36 ++++g+G+ G+ A a+ L++ Gh+V++++ g sp|Q02YY8|ILVC_LACLS 21 IAVIGYGSQGH-----AHAQNLRDSGHDVIIGVRQG 51 57888899888.....88**************9765 PP >> sp|B9EBF4|ILVC_MACCJ Ketol-acid reductoisomerase OS=Macrococcus caseolyticus (strain JCSC5402) GN=ilvC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.0 0.0 0.016 8.9 1 57 [. 20 70 .. 20 113 .. 0.72 Alignments for each domain: == domain 1 score: 11.0 bits; conditional E-value: 0.016 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE----S-- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpdvkl 57 ++++g+G+ G+ A a L++ G++V +++ +g ++ ee+g +a+ + + sp|B9EBF4|ILVC_MACCJ 20 IAVLGYGSQGH-----AHALNLKDSGYDVVIGVREGQSRTKaEEDGFQAYDVSEA--V 70 67889999998.....7799***************9988888******9988777..2 PP >> sp|Q43716|UFOG_PETHY Anthocyanidin 3-O-glucosyltransferase OS=Petunia hybrida GN=RT PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.6 0.0 0.011 6 10 43 .. 23 56 .. 21 167 .. 0.83 Alignments for each domain: == domain 1 score: 11.6 bits; conditional E-value: 0.011 --HHHHHHHHHHHHH---EEEEEETGGGHHHHHH CS Glyco_transf_28 10 GdvePavAlareLqrrGheVrlatppgleefvee 43 G++ P+v la++L +G +V + t g +++v++ sp|Q43716|UFOG_PETHY 23 GHISPFVQLANKLSSYGVKVSFFTASGNASRVKS 56 9********************9999988888865 PP >> sp|A5GUT4|SURE_SYNR3 5'-nucleotidase surE OS=Synechococcus sp. (strain RCC307) GN=surE PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.7 0.0 0.0099 5.6 15 56 .. 20 60 .. 18 99 .. 0.78 Alignments for each domain: == domain 1 score: 11.7 bits; conditional E-value: 0.0099 HHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE.----S- CS Glyco_transf_28 15 avAlareLqrrGheVrlatppgleefveeagleavp.igpdvk 56 + Ala+e rrGh V+ +++p+ e+ + +gl+ ++ i ++ + sp|A5GUT4|SURE_SYNR3 20 IKALAHEAARRGHSVT-VVCPDQERSATGHGLTLQSpIRAE-Q 60 679************6.5789999999******98767777.3 PP >> sp|Q1ARE4|ILVC_RUBXD Ketol-acid reductoisomerase OS=Rubrobacter xylanophilus (strain DSM 9941 / NBRC 16129) GN=ilvC # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.4 0.0 0.012 6.8 2 64 .. 20 76 .. 19 121 .. 0.83 Alignments for each domain: == domain 1 score: 11.4 bits; conditional E-value: 0.012 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S------.-H CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwaklesl 64 +++g+G+ G+ A a L++ G eV+++ +g +++ eeagl + +i+ wa e + sp|Q1ARE4|ILVC_RUBXD 20 AVLGFGSQGH-----AHALNLRDSGCEVTVGLYRGSASWPkaEEAGLRVAEIPET-VRWA--EVV 76 6777777777.....7799********************999**********999.5555..333 PP >> sp|A6W7N6|ILVC_KINRD Ketol-acid reductoisomerase OS=Kineococcus radiotolerans (strain ATCC BAA-149 / DSM 14245 / SRS # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.0 0.1 0.033 19 2 48 .. 21 64 .. 20 106 .. 0.87 Alignments for each domain: == domain 1 score: 10.0 bits; conditional E-value: 0.033 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48 +++g+G+ G+ A a L++ G +V ++ ++g +++ ee+gl++ sp|A6W7N6|ILVC_KINRD 21 AVLGFGSQGH-----AHALSLRDSGVDVVVGLKEGSKSRAkaEEQGLTV 64 6777777777.....77999*******************9999999986 PP >> sp|Q11039|DEAD_MYCTU Cold-shock DEAD box protein A homolog OS=Mycobacterium tuberculosis GN=deaD PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 7.1 0.0 0.25 1.4e+02 23 52 .. 129 158 .. 121 262 .. 0.79 Alignments for each domain: == domain 1 score: 7.1 bits; conditional E-value: 0.25 HH---EEEEEETGGGHHHHHH---EEEE-- CS Glyco_transf_28 23 qrrGheVrlatppgleefveeagleavpig 52 rrG +V ++tp ++ +++e a l+ ++ sp|Q11039|DEAD_MYCTU 129 LRRGAQVVVGTPGRMIDHLERATLDLSRVD 158 59********************99887655 PP >> sp|Q13BM0|UVRC_RHOPS UvrABC system protein C OS=Rhodopseudomonas palustris (strain BisB5) GN=uvrC PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.9 0.0 0.017 9.5 14 72 .. 607 666 .. 606 672 .. 0.91 Alignments for each domain: == domain 1 score: 10.9 bits; conditional E-value: 0.017 HHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE.----S------.-HHHCCSHHH CS Glyco_transf_28 14 PavAlareLqrrGheVrlatppgleefv.eeagleavp.igpdvklwakleslktlkelae 72 P + + ++L+++ h+ ++++++l+++ +eagl+ p igp + +a l++++tlke+ + sp|Q13BM0|UVRC_RHOPS 607 PVLYFIQRLRDEAHRFVIGSHRKLRKKDiREAGLQEIPgIGPT-RKRALLHHFGTLKEIER 666 6777899******************9988*********9****.9999999*****99876 PP >> sp|Q8YMT3|SURE_ANASP 5'-nucleotidase surE OS=Anabaena sp. (strain PCC 7120) GN=surE PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.9 0.0 0.0085 4.8 18 105 .. 19 127 .. 16 156 .. 0.77 Alignments for each domain: == domain 1 score: 11.9 bits; conditional E-value: 0.0085 HHHHHHH---EEEEEETGGGHHHHHH---EEEE.----........................S------.-HHHCCSHHHHHHHHHHHH CS Glyco_transf_28 18 lareLqrrGheVrlatppgleefveeagleavp.igpd........................vklwakleslktlkelaeglkalrkak 81 la++L ++Gh+V++ ++p+ e+ + +gl+ ++ i ++ + lwa les+ l+ + ++ + + sp|Q8YMT3|SURE_ANASP 19 LANALAEAGHDVTV-VCPDRERSATGHGLTLHQpIRAEivesifhpaikawacdgtpsdcvkLALWALLESPPDLVLSGIN-QGANLGT 105 89**********76.566777777******987699999999999998888888888888887777777777777666666.6667777 PP HHHHHHHHHHHHHC----EEEE-- CS Glyco_transf_28 82 eilkeakpdvvvgfggyvadlali 105 eil + + v+++++g +++ ++i sp|Q8YMT3|SURE_ANASP 106 EILYSGT--VSAAMEGMIEGIPSI 127 7776666..666666666666655 PP >> sp|Q319M0|SURE_PROM9 5'-nucleotidase surE OS=Prochlorococcus marinus (strain MIT 9312) GN=surE PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.1 0.0 0.015 8.6 16 54 .. 20 58 .. 17 106 .. 0.77 Alignments for each domain: == domain 1 score: 11.1 bits; conditional E-value: 0.015 HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE.---- CS Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefveeagleavp.igpd 54 Ala+ q+rGh+V+ +++p+ e+ + +gl+ ++ + ++ sp|Q319M0|SURE_PROM9 20 RALAKSAQKRGHKVT-VVCPDQERSATGHGLTLQSpLRVE 58 59************6.5788999999*****987645555 PP >> sp|A9VFD5|MTNA2_BACWK Methylthioribose-1-phosphate isomerase 2 OS=Bacillus weihenstephanensis (strain KBAB4) GN=mtnA # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.9 0.0 0.017 9.9 19 66 .. 205 251 .. 203 300 .. 0.81 Alignments for each domain: == domain 1 score: 10.9 bits; conditional E-value: 0.017 HHHHHH---EEEEEETGGGHHHHHH---EEEE----S------.-HHH CS Glyco_transf_28 19 areLqrrGheVrlatppgleefveeagleavpigpdvklwakleslkt 66 +eL++++++V+l+t + ++ +++++++a +g+d + +++++ ++ sp|A9VFD5|MTNA2_BACWK 205 TWELKQADIDVTLITDNTAAHAIRTKEINAIIVGAD-RIVENGDTANK 251 59**********************************.55444444433 PP >> sp|A1JRP2|NADA_YERE8 Quinolinate synthase A OS=Yersinia enterocolitica serotype O:8 / biotype 1B (strain 8081) GN=na # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 3.4 0.0 3.5 2e+03 47 107 .. 15 73 .. 8 82 .. 0.84 2 ? 6.6 0.0 0.37 2.1e+02 85 132 .. 226 276 .. 191 278 .. 0.80 Alignments for each domain: == domain 1 score: 3.4 bits; conditional E-value: 3.5 EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HH CS Glyco_transf_28 47 eavpigpdvklwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaa 107 +a+p+++d + +k + +++k+l+++++a+ a + ++ ++ ++gg+vad + a sp|A1JRP2|NADA_YERE8 15 PARPVPLD--VDQKAFYREKIKTLLKQRDAVLVAHYYTDPEIQALAEETGGCVADSLEMAR 73 68888888..555558999********99999999999999999999*******9887665 PP == domain 2 score: 6.6 bits; conditional E-value: 0.37 HHHHHHHHHH...C----EEEE--HHHHHHHHHHHHHH----EEEEESSGG CS Glyco_transf_28 85 keakpdvvvg...fggyvadlaliaallagipanvaEqngipglvnkllpr 132 +++p++vv+ ++g + l++ a +l + +++va ++gi +++++++p sp|A1JRP2|NADA_YERE8 226 HPESPQAVVDmadAVGSTSQLIMAAKTLPQKKLIVATDRGIFYKMQQACPD 276 555666665411157889**************************9999885 PP >> sp|A2RKQ6|ILVC_LACLM Ketol-acid reductoisomerase OS=Lactococcus lactis subsp. cremoris (strain MG1363) GN=ilvC PE=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.0 0.0 0.032 18 1 36 [. 21 51 .. 21 101 .. 0.82 Alignments for each domain: == domain 1 score: 10.0 bits; conditional E-value: 0.032 EEEE-------HHHHHHHHHHHHH---EEEEEETGG CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppg 36 ++++g+G+ G+ A a+ L++ Gh+V++++ g sp|A2RKQ6|ILVC_LACLM 21 IAVIGYGSQGH-----AHAQNLRDSGHDVIIGVRQG 51 57888899888.....88**************9765 PP >> sp|Q32DZ9|MACB_SHIDS Macrolide export ATP-binding/permease protein macB OS=Shigella dysenteriae serotype 1 (strain S # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.7 0.1 0.019 11 16 110 .. 184 298 .. 181 304 .. 0.65 Alignments for each domain: == domain 1 score: 10.7 bits; conditional E-value: 0.019 HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S------.-HHHCCSHHHH.H..HHHHHH CS Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwakleslktlkelaeg.l..kalrka 80 +A+ ++L++rGh V+++t++ ++ +e+ +e++ ++ v +w+ ++++ + e++ + a +k+ sp|Q32DZ9|MACB_SHIDS 184 MAILHQLRDRGHTVIIVTHDPQVAAQAERVIEIRDGEIVrnppaidkvnvaggtepvvntVSGWR--QFVSGFNEALTMaWraLAANKM 270 8999***************9999988888888887555555788888888888888888877777..3344443333330200333333 PP HHHHHHHHHHHHHHC----EEEE--HHHHH CS Glyco_transf_28 81 keilkeakpdvvvgfggyvadlaliaalla 110 +++l + +++g+++ v+ ++++ a+++ sp|Q32DZ9|MACB_SHIDS 271 RTLLTMLG--IIIGIASVVSIVVVGDAAKQ 298 33333333..66666666666666666655 PP >> sp|A5CPY6|ILVC_CLAM3 Ketol-acid reductoisomerase OS=Clavibacter michiganensis subsp. michiganensis (strain NCPPB 382 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.8 0.1 0.018 10 1 59 [. 20 74 .. 20 109 .. 0.77 Alignments for each domain: == domain 1 score: 10.8 bits; conditional E-value: 0.018 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwa 59 v+++g+G+ G+ A a L++ G eV ++ ++g +++ ee+g ++ + ++d +wa sp|A5CPY6|ILVC_CLAM3 20 VAVIGYGSQGH-----AHALNLRDSGVEVVIGLKEGSTSRAkaEEQGFTV-KTPSDASAWA 74 67888999998.....7799********************9956666555.5555546666 PP >> sp|B0RIN6|ILVC_CLAMS Ketol-acid reductoisomerase OS=Clavibacter michiganensis subsp. sepedonicus (strain ATCC 33113 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.8 0.1 0.018 10 1 59 [. 20 74 .. 20 109 .. 0.77 Alignments for each domain: == domain 1 score: 10.8 bits; conditional E-value: 0.018 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE----S---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpdvklwa 59 v+++g+G+ G+ A a L++ G eV ++ ++g +++ ee+g ++ + ++d +wa sp|B0RIN6|ILVC_CLAMS 20 VAVIGYGSQGH-----AHALNLRDSGVEVVIGLKEGSTSRAkaEEQGFTV-KTPSDASAWA 74 67888999998.....7799********************9956666555.5555546666 PP >> sp|Q8K5J6|MUTL_STRP3 DNA mismatch repair protein mutL OS=Streptococcus pyogenes serotype M3 GN=mutL PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.4 0.0 0.024 14 57 127 .. 196 265 .. 158 268 .. 0.83 Alignments for each domain: == domain 1 score: 10.4 bits; conditional E-value: 0.024 -----.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS Glyco_transf_28 57 lwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127 l + + l+++ +g +l+ +k+ l+ ++d+++++ gyv+++ l+ a++++ + v+ + +l n sp|Q8K5J6|MUTL_STRP3 196 LTQTS-GTGDLRQAIAGIYGLNTTKKMLAISNADLDFEVSGYVSLPELTRANRNYMTILVNGRYIKNFLLN 265 55544.567788888999999**********************************9999988877666666 PP >> sp|Q99XN7|MUTL_STRP1 DNA mismatch repair protein mutL OS=Streptococcus pyogenes serotype M1 GN=mutL PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.4 0.0 0.024 14 57 127 .. 196 265 .. 158 268 .. 0.83 Alignments for each domain: == domain 1 score: 10.4 bits; conditional E-value: 0.024 -----.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS Glyco_transf_28 57 lwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127 l + + l+++ +g +l+ +k+ l+ ++d+++++ gyv+++ l+ a++++ + v+ + +l n sp|Q99XN7|MUTL_STRP1 196 LTQTS-GTGDLRQAIAGIYGLNTTKKMLAISNADLDFEVSGYVSLPELTRANRNYMTILVNGRYIKNFLLN 265 55544.567788888999999**********************************9999988877666666 PP >> sp|B5XJ09|MUTL_STRPZ DNA mismatch repair protein mutL OS=Streptococcus pyogenes serotype M49 (strain NZ131) GN=mutL # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.4 0.0 0.024 14 57 127 .. 196 265 .. 158 268 .. 0.83 Alignments for each domain: == domain 1 score: 10.4 bits; conditional E-value: 0.024 -----.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS Glyco_transf_28 57 lwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127 l + + l+++ +g +l+ +k+ l+ ++d+++++ gyv+++ l+ a++++ + v+ + +l n sp|B5XJ09|MUTL_STRPZ 196 LTQTS-GTGDLRQAIAGIYGLNTTKKMLAISNADLDFEVSGYVSLPELTRANRNYMTILVNGRYIKNFLLN 265 55544.567788888999999**********************************9999988877666666 PP >> sp|A2RGV3|MUTL_STRPG DNA mismatch repair protein mutL OS=Streptococcus pyogenes serotype M5 (strain Manfredo) GN=mut # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.4 0.0 0.024 14 57 127 .. 196 265 .. 158 268 .. 0.83 Alignments for each domain: == domain 1 score: 10.4 bits; conditional E-value: 0.024 -----.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS Glyco_transf_28 57 lwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127 l + + l+++ +g +l+ +k+ l+ ++d+++++ gyv+++ l+ a++++ + v+ + +l n sp|A2RGV3|MUTL_STRPG 196 LTQTS-GTGDLRQAIAGIYGLNTTKKMLAISNADLDFEVSGYVSLPELTRANRNYMTILVNGRYIKNFLLN 265 55544.567788888999999**********************************9999988877666666 PP >> sp|Q5X9H5|MUTL_STRP6 DNA mismatch repair protein mutL OS=Streptococcus pyogenes serotype M6 GN=mutL PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.4 0.0 0.024 14 57 127 .. 196 265 .. 158 268 .. 0.83 Alignments for each domain: == domain 1 score: 10.4 bits; conditional E-value: 0.024 -----.-HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EEEE CS Glyco_transf_28 57 lwakleslktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipglvn 127 l + + l+++ +g +l+ +k+ l+ ++d+++++ gyv+++ l+ a++++ + v+ + +l n sp|Q5X9H5|MUTL_STRP6 196 LTQTS-GTGDLRQAIAGIYGLNTTKKMLAISNADLDFEVSGYVSLPELTRANRNYMTILVNGRYIKNFLLN 265 55544.567788888999999**********************************9999988877666666 PP >> sp|Q3JYM6|MUTL_STRA1 DNA mismatch repair protein mutL OS=Streptococcus agalactiae serotype Ia GN=mutL PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.8 0.0 0.019 11 63 125 .. 201 263 .. 168 268 .. 0.82 Alignments for each domain: == domain 1 score: 10.8 bits; conditional E-value: 0.019 -HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EE CS Glyco_transf_28 63 slktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipgl 125 + l+++ +g +l+ ak+ ++ ++d+++++ gyv+++ l+ a++++i + ++ + +l sp|Q3JYM6|MUTL_STRA1 201 GTGDLRQAIAGIYGLNTAKKMIEISNADLDFEISGYVSLPELTRANRNYITLLINGRYIKNFL 263 566788888999999***********************************9999877766655 PP >> sp|Q8E2R5|MUTL_STRA3 DNA mismatch repair protein mutL OS=Streptococcus agalactiae serotype III GN=mutL PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.8 0.0 0.019 11 63 125 .. 201 263 .. 168 268 .. 0.82 Alignments for each domain: == domain 1 score: 10.8 bits; conditional E-value: 0.019 -HHHCCSHHHHHHHHHHHHHHHHHHHHHHHHHC----EEEE--HHHHHHHHHHHHHH----EE CS Glyco_transf_28 63 slktlkelaeglkalrkakeilkeakpdvvvgfggyvadlaliaallagipanvaEqngipgl 125 + l+++ +g +l+ ak+ ++ ++d+++++ gyv+++ l+ a++++i + ++ + +l sp|Q8E2R5|MUTL_STRA3 201 GTGDLRQAIAGIYGLNTAKKMIEISNADLDFEISGYVSLPELTRANRNYITLLINGRYIKNFL 263 566788888999999***********************************9999877766655 PP >> sp|Q9MB73|LGT_CITUN Limonoid UDP-glucosyltransferase OS=Citrus unshiu PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.6 0.0 0.021 12 1 54 [. 9 63 .. 9 141 .. 0.80 Alignments for each domain: == domain 1 score: 10.6 bits; conditional E-value: 0.021 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH.HH---EEEE---- CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv.eeagleavpigpd 54 v+l++++ G+v P++ l+r L +G +l tp+ + ++ ++ + +++p +++ sp|Q9MB73|LGT_CITUN 9 VLLVSFPGHGHVNPLLRLGRLLASKGFFLTLTTPESFGKQMrKAGNFTYEPTPVG 63 68999999*********************************55555677776655 PP >> sp|A8G678|SURE_PROM2 5'-nucleotidase surE OS=Prochlorococcus marinus (strain MIT 9215) GN=surE PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.7 0.0 0.02 11 17 54 .. 21 58 .. 18 136 .. 0.83 Alignments for each domain: == domain 1 score: 10.7 bits; conditional E-value: 0.02 HHHHHHHH---EEEEEETGGGHHHHHH---EEEE.---- CS Glyco_transf_28 17 AlareLqrrGheVrlatppgleefveeagleavp.igpd 54 Ala+ q+rGh+V++ ++p+ e+ + +gl+ ++ + ++ sp|A8G678|SURE_PROM2 21 ALAKSAQKRGHKVKV-VCPDQERSATGHGLTLQSpLRVE 58 9************96.67888888899999987645555 PP >> sp|A9WP08|ILVC_RENSM Ketol-acid reductoisomerase OS=Renibacterium salmoninarum (strain ATCC 33209 / DSM 20767 / IFO # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.5 0.5 0.046 26 1 48 [. 20 64 .. 20 104 .. 0.80 Alignments for each domain: == domain 1 score: 9.5 bits; conditional E-value: 0.046 EEEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EE CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeaglea 48 v+++g+G+ G+ A a L++ G +Vr++ +g ++ e++gl + sp|A9WP08|ILVC_RENSM 20 VAVIGYGSQGH-----AHALSLRDSGVDVRVGLAEGSQSRAkaEAEGLRV 64 67888999998.....77999*********99999999998878888876 PP >> sp|A9WC26|ILVC_CHLAA Ketol-acid reductoisomerase OS=Chloroflexus aurantiacus (strain ATCC 29366 / DSM 635 / J-10-fl) # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.9 0.1 0.0085 4.8 2 54 .. 21 70 .. 20 102 .. 0.80 Alignments for each domain: == domain 1 score: 11.9 bits; conditional E-value: 0.0085 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54 +++g+G+ G+ A ar L + G +Vr++ pg +++ e+agl++ +++ sp|A9WC26|ILVC_CHLAA 21 AIIGFGSQGH-----AHARNLADSGLDVRVGLYPGSKSWAkvEAAGLKVMTVAEA 70 5667777776.....789********************9999*****99887766 PP >> sp|B9LGM7|ILVC_CHLSY Ketol-acid reductoisomerase OS=Chloroflexus aurantiacus (strain ATCC 29364 / DSM 637 / Y-400-fl # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.9 0.1 0.0085 4.8 2 54 .. 21 70 .. 20 102 .. 0.80 Alignments for each domain: == domain 1 score: 11.9 bits; conditional E-value: 0.0085 EEE-------HHHHHHHHHHHHH---EEEEEETGGGHHHH..HH---EEEE---- CS Glyco_transf_28 2 vlaggGTrGdvePavAlareLqrrGheVrlatppgleefv..eeagleavpigpd 54 +++g+G+ G+ A ar L + G +Vr++ pg +++ e+agl++ +++ sp|B9LGM7|ILVC_CHLSY 21 AIIGFGSQGH-----AHARNLADSGLDVRVGLYPGSKSWAkvEAAGLKVMTVAEA 70 5667777776.....789********************9999*****99887766 PP >> sp|A2BSJ2|SURE_PROMS 5'-nucleotidase surE OS=Prochlorococcus marinus (strain AS9601) GN=surE PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.7 0.0 0.02 12 17 53 .. 21 57 .. 18 150 .. 0.84 Alignments for each domain: == domain 1 score: 10.7 bits; conditional E-value: 0.02 HHHHHHHH---EEEEEETGGGHHHHHH---EEEE.--- CS Glyco_transf_28 17 AlareLqrrGheVrlatppgleefveeagleavp.igp 53 Ala+ q+rGh+V++ ++p+ e+ + +gl+ ++ + + sp|A2BSJ2|SURE_PROMS 21 ALAKSAQKRGHKVKV-VCPDQERSATGHGLTLQSpLRV 57 9************96.6788888889999998754554 PP >> sp|Q9LR44|IABG1_ARATH Indole-3-acetate beta-glucosyltransferase 1 OS=Arabidopsis thaliana GN=UGT75B1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.3 0.0 0.026 15 1 32 [. 6 38 .. 6 43 .. 0.84 Alignments for each domain: == domain 1 score: 10.3 bits; conditional E-value: 0.026 EEEE-------HHHHHHHHHHHHH-.--EEEEE CS Glyco_transf_28 1 vvlaggGTrGdvePavAlareLqrr.GheVrla 32 ++l+++++ G+v P++ +ar+L +r G +V+++ sp|Q9LR44|IABG1_ARATH 6 FLLVTFPAQGHVNPSLRFARRLIKRtGARVTFV 38 79********************87646777655 PP >> sp|O57731|VATD_PYRHO V-type ATP synthase subunit D OS=Pyrococcus horikoshii GN=atpD PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.0 0.1 0.068 38 26 86 .. 101 159 .. 80 170 .. 0.89 Alignments for each domain: == domain 1 score: 9.0 bits; conditional E-value: 0.068 --EEEEEETGGGHHHHHH---EEEE----S------.-HHHCCSHHHHHHHHHHHHHHHHH CS Glyco_transf_28 26 GheVrlatppgleefveeagleavpigpdvklwakleslktlkelaeglkalrkakeilke 86 G +V l+ p+l+++ e+g+++v+ ++ v +a e++++++ela +l +++++ + l + sp|O57731|VATD_PYRHO 101 GVRVPLIEVPELKRKASERGYAFVSTTSTVDMAA--EKFEEVLELAIRLAEVEESLKRLGK 159 556669999*******************988999..99**********8888888887765 PP >> sp|A3PEA4|SURE_PROM0 5'-nucleotidase surE OS=Prochlorococcus marinus (strain MIT 9301) GN=surE PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.3 0.0 0.027 15 17 50 .. 21 53 .. 18 102 .. 0.82 Alignments for each domain: == domain 1 score: 10.3 bits; conditional E-value: 0.027 HHHHHHHH---EEEEEETGGGHHHHHH---EEEE CS Glyco_transf_28 17 AlareLqrrGheVrlatppgleefveeagleavp 50 Ala+ q+rGh+V++ ++p+ e+ + +gl+ ++ sp|A3PEA4|SURE_PROM0 21 ALAKSAQKRGHKVKV-VCPDQERSATGHGLTLQS 53 9************96.678888888999999875 PP >> sp|P75831|MACB_ECOLI Macrolide export ATP-binding/permease protein macB OS=Escherichia coli (strain K12) GN=macB PE= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.7 0.1 0.019 11 16 110 .. 184 298 .. 181 304 .. 0.65 Alignments for each domain: == domain 1 score: 10.7 bits; conditional E-value: 0.019 HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S------.-HHHCCSHHHH.H..HHHHHH CS Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwakleslktlkelaeg.l..kalrka 80 +A+ ++L++rGh V+++t++ ++ +e+ +e++ ++ v +w+ ++++ + e++ + a +k+ sp|P75831|MACB_ECOLI 184 MAILHQLRDRGHTVIIVTHDPQVAAQAERVIEIRDGEIVrnppaiekvnvtggtepvvntVSGWR--QFVSGFNEALTMaWraLAANKM 270 8999***************9999988888888887555556788888888888888888877777..3344443333330200333333 PP HHHHHHHHHHHHHHC----EEEE--HHHHH CS Glyco_transf_28 81 keilkeakpdvvvgfggyvadlaliaalla 110 +++l + +++g+++ v+ ++++ a+++ sp|P75831|MACB_ECOLI 271 RTLLTMLG--IIIGIASVVSIVVVGDAAKQ 298 33333333..66666666666666666655 PP >> sp|Q83LR7|MACB_SHIFL Macrolide export ATP-binding/permease protein macB OS=Shigella flexneri GN=macB PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.7 0.1 0.02 11 16 110 .. 184 298 .. 181 304 .. 0.65 Alignments for each domain: == domain 1 score: 10.7 bits; conditional E-value: 0.02 HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S------.-HHHCCSHHHH.H..HHHHHH CS Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwakleslktlkelaeg.l..kalrka 80 +A+ ++L++rGh V+++t++ ++ +e+ +e++ ++ v +w+ ++++ + e++ + a +k+ sp|Q83LR7|MACB_SHIFL 184 MAILHQLRDRGHTVIIVTHDPQVAAQAERVIEIRDGEIVrnppaiekvnvaggtepvvntVSGWR--QFVSGFNEALTMaWraLAANKM 270 8999***************9999988888888887555556788888888888888888877777..3344443333330200333333 PP HHHHHHHHHHHHHHC----EEEE--HHHHH CS Glyco_transf_28 81 keilkeakpdvvvgfggyvadlaliaalla 110 +++l + +++g+++ v+ ++++ a+++ sp|Q83LR7|MACB_SHIFL 271 RTLLTMLG--IIIGIASVVSIVVVGDAAKQ 298 33333333..66666666666666666655 PP >> sp|Q3Z3Q4|MACB_SHISS Macrolide export ATP-binding/permease protein macB OS=Shigella sonnei (strain Ss046) GN=macB PE # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.7 0.1 0.02 11 16 110 .. 184 298 .. 181 304 .. 0.65 Alignments for each domain: == domain 1 score: 10.7 bits; conditional E-value: 0.02 HHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S------.-HHHCCSHHHH.H..HHHHHH CS Glyco_transf_28 16 vAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwakleslktlkelaeg.l..kalrka 80 +A+ ++L++rGh V+++t++ ++ +e+ +e++ ++ v +w+ ++++ + e++ + a +k+ sp|Q3Z3Q4|MACB_SHISS 184 MAILHQLRDRGHTVIIVTHDPQVAAQAERVIEIRDGEIVrnppaiekvnvaggtepvvntVSGWR--QFVSGFNEALTMaWraLAANKM 270 8999***************9999988888888887555556788888888888888888877777..3344443333330200333333 PP HHHHHHHHHHHHHHC----EEEE--HHHHH CS Glyco_transf_28 81 keilkeakpdvvvgfggyvadlaliaalla 110 +++l + +++g+++ v+ ++++ a+++ sp|Q3Z3Q4|MACB_SHISS 271 RTLLTMLG--IIIGIASVVSIVVVGDAAKQ 298 33333333..66666666666666666655 PP >> sp|Q8XED0|MACB_ECO57 Macrolide export ATP-binding/permease protein macB OS=Escherichia coli O157:H7 GN=macB PE=3 SV= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.2 0.1 0.029 16 15 108 .. 183 296 .. 180 304 .. 0.59 Alignments for each domain: == domain 1 score: 10.2 bits; conditional E-value: 0.029 HHHHHHHHHH---EEEEEETGGGHHHHHH---EEEE----.....................S------.-HHHCCSHHHH.H..HHHHH CS Glyco_transf_28 15 avAlareLqrrGheVrlatppgleefveeagleavpigpd.....................vklwakleslktlkelaeg.l..kalrk 79 +A+ ++L++rGh V+++t++ ++ +e+ +e++ ++ +w+ ++++ + e++ + a +k sp|Q8XED0|MACB_ECO57 183 VMAILHQLRDRGHTVIIVTHDPQVAAQAERVIEIRDGEIVrnppaiekvnvaggtepvvntASGWR--QFVSGFNEALTMaWraLAANK 269 5899****************9888888888777776444455677777777777777777744444..222222222222010033333 PP HHHHHHHHHHHHHHHC----EEEE--HHH CS Glyco_transf_28 80 akeilkeakpdvvvgfggyvadlaliaal 108 ++++l + +++g+++ v+ ++++ a+ sp|Q8XED0|MACB_ECO57 270 MRTLLTMLG--IIIGIASVVSIVVVGDAA 296 333333333..555555555555555555 PP Internal pipeline statistics summary: ------------------------------------- Query model(s): 1 (139 nodes) Target sequences: 516081 (181677051 residues) Passed MSV filter: 24810 (0.0480738); expected 10321.6 (0.02) Passed bias filter: 19491 (0.0377673); expected 10321.6 (0.02) Passed Vit filter: 3048 (0.00590605); expected 516.1 (0.001) Passed Fwd filter: 917 (0.00177685); expected 5.2 (1e-05) Initial search space (Z): 516081 [actual number of targets] Domain search space (domZ): 916 [number of targets reported over threshold] # CPU time: 6.72u 0.07s 00:00:06.79 Elapsed: 00:00:02.00 # Mc/sec: 12563.74 // hmmer-3.1b2/easel/demotic/examples/example.fasta.out0000664361611702660230000121517012473612604022113 0ustar wheelerteddy# /usr/local/fasta-36x2/bin/fasta36_t -q example.fa /misc/data0/databases/Uniprot/uniprot_sprot.fasta FASTA searches a protein or DNA sequence data bank version 36.04 January, 2010 Please cite: W.R. Pearson & D.J. Lipman PNAS (1988) 85:2444-2448 Query: example.fa 1>>>sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=Rhizobium sp. (strain NGR234) GN=NGR_a00980 - 181 aa Library: /misc/data0/databases/Uniprot/uniprot_sprot.fasta 181677051 residues in 516081 sequences opt E() < 20 558 0:= 22 0 0: one = represents 934 library sequences 24 3 0:= 26 2 11:* 28 11 117:* 30 120 710:* 32 838 2746:= * 34 3876 7447:===== * 36 12656 15294:============== * 38 28083 25276:===========================*=== 40 44462 35258:=====================================*========== 42 53797 43098:==============================================*=========== 44 55983 47542:==================================================*========= 46 48483 48422:===================================================* 48 42188 46359:============================================== * 50 36235 42303:======================================= * 52 32159 37191:=================================== * 54 27781 31768:============================== * 56 24404 26536:=========================== * 58 20107 21785:====================== * 60 16997 17647:==================* 62 13727 14148:===============* 64 11688 11252:============* 66 9240 8893:=========* 68 7082 6995:=======* 70 5456 5482:=====* 72 4389 4283:====* 74 3394 3340:===* 76 2590 2599:==* 78 2111 2020:==* 80 1752 1569:=* 82 1261 1200:=* 84 948 951:=* 86 795 736:* 88 617 569:* inset = represents 7 library sequences 90 401 440:* 92 341 341:* :=======================================* 94 233 264:* :================================== * 96 164 204:* :======================== * 98 145 158:* :===================== * 100 97 122:* :============== * 102 82 94:* :============ * 104 70 73:* :==========* 106 31 57:* :===== * 108 39 44:* :======* 110 22 34:* :====* 112 22 26:* :===* 114 16 20:* :==* 116 10 16:* :==* 118 20 12:* :=*= >120 20 9:* :=*= 181677051 residues in 516081 sequences Statistics: Expectation_n fit: rho(ln(x))= 5.0921+/-0.000195; mu= 6.0172+/- 0.011 mean_var=67.4672+/-14.288, 0's: 51 Z-trim: 53 B-trim: 3380 in 1/65 Lambda= 0.156145 statistics sampled from 60000 (278110) to 515494 sequences (mod: 1) Kolmogorov-Smirnov statistic: 0.0435 (N=29) at 46 Algorithm: FASTA (3.6 Jan 2009) [optimized] Parameters: BL50 matrix (15:-5) ktup: 2 join: 42 (0.083), opt: 30 (0.584), open/ext: -10/-2, width: 16 Scan time: 11.160 The best scores are: opt bits E(516081) sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG ( 181) 1141 265.5 2e-70 sp|Q7SY73|ABH6B_XENLA Monoacylglycerol lipase abhd ( 337) 108 33.0 3.6 >>sp|P55685|Y4WG_RHISN Uncharacterized protein y4wG OS=R (181 aa) initn: 1141 init1: 1141 opt: 1141 Z-score: 1399.6 bits: 265.5 E(516081): 2e-70 Smith-Waterman score: 1141; 100.0% identity (100.0% similar) in 181 aa overlap (1-181:1-181) 10 20 30 40 50 60 sp|P55 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|P55 MTASCRIRRNSNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGT 10 20 30 40 50 60 70 80 90 100 110 120 sp|P55 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|P55 TADDQLAFVSLIADQGETTTVAFGPEIGSRIAASFMAACGQLQHQIATRTGKEERKFKPF 70 80 90 100 110 120 130 140 150 160 170 180 sp|P55 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|P55 AAAGFSVRAGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRP 130 140 150 160 170 180 sp|P55 N : sp|P55 N >>sp|Q7SY73|ABH6B_XENLA Monoacylglycerol lipase abhd6-B (337 aa) initn: 47 init1: 47 opt: 108 Z-score: 138.1 bits: 33.0 E(516081): 3.6 Smith-Waterman score: 108; 24.6% identity (57.7% similar) in 130 aa overlap (41-164:65-189) 20 30 40 50 60 70 sp|P55 SNSAQKSTMGWSALSTSDSKVFYRVAWLLGRGKMAEIDAILITDVNGIGTTADDQLAFVS ::: .. ..:. ..:... : :..:. sp|Q7S IRIYYWYWRRALGMQVKYSSYGNYKFCYTARGKPGNKPSVLM--LHGFSAHKDMWLGMVK 40 50 60 70 80 90 80 90 100 110 120 sp|P55 LIADQGETTTVAF-GPEIGSRIAASFMAACGQLQ--HQIATRTGKEERKFKPFAAAGFSV .. . . . : . : : :: : .... :::.. ::.. : .. ::: .: :. sp|Q7S FLPKNLHLVCVDMPGHEGTSRSALDYYSICGQVKRIHQFVESIGLNK---KPFHLVGTSM 100 110 120 130 140 130 140 150 160 170 180 sp|P55 R---AGLAADGSNSGMLSISTVAGAEVHFIATERSLRELENQLTLLLEQLRLRSRPN ::. : . . :.. . : . . . :..:. sp|Q7S GGNVAGVYAAQHPTHISSLTLICPAGLMYPIESKFLKQLKVLEKSGDNQRIPLIPSTAGE 150 160 170 180 190 200 sp|Q7S MEDMLRLCSFVRFKIPQQVLQGLIDERIPHNEFYRKLFLALVDEKSRHSLHENMNKIMAP 210 220 230 240 250 260 2>>>sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS=Aspergillus oryzae GN=hacA - 345 aa Library: /misc/data0/databases/Uniprot/uniprot_sprot.fasta 181677051 residues in 516081 sequences opt E() < 20 552 0:= 22 0 0: one = represents 937 library sequences 24 1 0:= 26 0 11:* 28 2 117:* 30 14 710:* 32 257 2746:= * 34 2276 7448:=== * 36 10190 15296:=========== * 38 26420 25279:==========================*== 40 42419 35262:=====================================*======== 42 52939 43104:==============================================*========== 44 56211 47547:==================================================*========= 46 52753 48428:===================================================*===== 48 48517 46364:=================================================*== 50 42369 42308:=============================================* 52 35656 37195:=======================================* 54 30193 31771:=================================* 56 24361 26539:========================== * 58 19644 21788:===================== * 60 15073 17649:================= * 62 11970 14150:============= * 64 9165 11253:========== * 66 7325 8894:======== * 68 5598 6996:====== * 70 4251 5482:=====* 72 3363 4284:====* 74 2804 3340:===* 76 2216 2600:==* 78 1756 2021:==* 80 1503 1569:=* 82 1074 1200:=* 84 955 951:=* 86 697 736:* 88 516 569:* inset = represents 9 library sequences 90 465 440:* 92 423 341:* :=====================================*== 94 350 264:* :=============================*========= 96 240 204:* :======================*==== 98 192 158:* :=================*==== 100 169 122:* :=============*===== 102 133 95:* :==========*==== 104 130 73:* :========*====== 106 91 57:* :======*==== 108 77 44:* :====*==== 110 59 34:* :===*=== 112 53 26:* :==*=== 114 50 20:* :==*=== 116 42 16:* :=*=== 118 27 12:* :=*= >120 275 9:* :*============================== 181677051 residues in 516081 sequences Statistics: Expectation_n fit: rho(ln(x))= 6.2367+/-0.000211; mu= 5.0578+/- 0.012 mean_var=113.9719+/-22.498, 0's: 53 Z-trim: 72 B-trim: 0 in 0/66 Lambda= 0.120137 statistics sampled from 60000 (215252) to 515555 sequences (mod: 1) Kolmogorov-Smirnov statistic: 0.0383 (N=29) at 50 Algorithm: FASTA (3.6 Jan 2009) [optimized] Parameters: BL50 matrix (15:-5) ktup: 2 join: 43 (0.127), opt: 31 (0.659), open/ext: -10/-2, width: 16 Scan time: 17.160 The best scores are: opt bits E(516081) sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hac ( 345) 2265 403.1 2.8e-111 sp|Q8TFU8|HAC1_EMENI Transcriptional activator hac ( 350) 1740 312.1 7e-84 sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac ( 451) 393 78.7 1.6e-13 sp|P41546|HAC1_YEAST Transcriptional activator HAC ( 238) 240 52.0 9.7e-06 sp|O24646|HY5_ARATH Transcription factor HY5 OS=Ar ( 168) 225 49.2 4.5e-05 sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bo ( 261) 200 45.1 0.0013 sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive elemen ( 519) 203 45.8 0.0015 sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper ( 631) 201 45.6 0.0022 sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=So ( 158) 191 43.3 0.0026 sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element- ( 520) 191 43.8 0.0062 sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive elemen ( 519) 189 43.4 0.0079 sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive elemen ( 519) 187 43.1 0.01 sp|A3LYI0|NST1_PICST Stress response protein NST1 (1234) 190 43.9 0.013 sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive elemen ( 525) 183 42.4 0.016 sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive elemen ( 428) 181 41.9 0.018 sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive elemen ( 520) 182 42.2 0.018 sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive elemen ( 520) 182 42.2 0.018 sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive elemen ( 521) 179 41.7 0.026 sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Ho ( 261) 174 40.6 0.029 sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus ( 338) 175 40.8 0.031 sp|Q8W191|HYH_ARATH Transcription factor HY5-like ( 149) 165 38.8 0.056 sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens ( 338) 169 39.8 0.064 sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element- ( 521) 171 40.3 0.069 sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive elemen ( 456) 169 39.9 0.08 sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familia ( 338) 166 39.3 0.091 sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcri ( 349) 165 39.1 0.11 sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element- ( 470) 165 39.2 0.13 sp|Q90370|MAFB_COTJA Transcription factor MafB OS= ( 311) 161 38.4 0.16 sp|Q90888|MAFB_CHICK Transcription factor MafB OS= ( 311) 161 38.4 0.16 sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scro ( 380) 160 38.3 0.2 sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive elemen ( 479) 161 38.5 0.22 sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcri ( 351) 159 38.1 0.22 sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocr ( 381) 159 38.1 0.23 sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus mu ( 380) 158 37.9 0.26 sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive elemen ( 461) 159 38.2 0.27 sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive elemen ( 395) 158 37.9 0.27 sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF ( 401) 158 37.9 0.27 sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcri ( 483) 159 38.2 0.28 sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcri ( 494) 159 38.2 0.28 sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive elemen ( 395) 157 37.8 0.3 sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS= ( 323) 154 37.2 0.37 sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein ( 381) 155 37.4 0.37 sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattu ( 327) 154 37.2 0.38 sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase ( 780) 159 38.4 0.4 sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kin ( 806) 159 38.4 0.41 sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive elemen ( 428) 155 37.4 0.41 sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Hom ( 326) 153 37.0 0.42 sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcri ( 413) 154 37.3 0.45 sp|P29747|CREBA_DROME Cyclic AMP response element- ( 516) 155 37.5 0.47 sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS= ( 323) 152 36.8 0.47 sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Ratt ( 267) 150 36.4 0.52 sp|P54842|MAFB_RAT Transcription factor MafB OS=Ra ( 323) 151 36.6 0.53 sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus ( 326) 151 36.7 0.54 sp|Q2VZV0|IF2_MAGSA Translation initiation factor ( 872) 157 38.0 0.55 sp|Q0CEI3|KAPC_ASPTN Putative transcription factor ( 286) 150 36.4 0.55 sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive elemen ( 404) 152 36.9 0.56 sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcript ( 347) 151 36.7 0.56 sp|P54841|MAFB_MOUSE Transcription factor MafB OS= ( 323) 150 36.5 0.6 sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos ta ( 380) 151 36.7 0.6 sp|A1C9M5|KAPC_ASPCL Putative transcription factor ( 288) 149 36.3 0.62 sp|Q504L8|MAFB_XENTR Transcription factor MafB OS= ( 316) 149 36.3 0.67 sp|O57342|MAFA_COTJA Transcription factor MafA OS= ( 286) 148 36.1 0.7 sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcri ( 348) 149 36.3 0.72 sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element- ( 367) 149 36.3 0.75 sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus n ( 380) 149 36.4 0.77 sp|Q16520|BATF_HUMAN Basic leucine zipper transcri ( 125) 142 34.7 0.77 sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mu ( 267) 146 35.7 0.84 sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo s ( 380) 148 36.2 0.86 sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive elemen ( 357) 147 36.0 0.93 sp|A4R2R1|NST1_MAGGR Stress response protein NST1 (1319) 155 37.9 0.95 sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive elemen ( 370) 147 36.0 0.96 sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis ( 381) 147 36.0 0.98 sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcr ( 127) 139 34.2 1.1 sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive elemen ( 508) 147 36.1 1.2 sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Ara ( 315) 144 35.4 1.2 sp|A2R346|KAPC_ASPNC Putative transcription factor ( 283) 143 35.2 1.3 sp|O42290|MAFA_CHICK Transcription factor MafA OS= ( 286) 143 35.2 1.3 sp|O43889|CREB3_HUMAN Cyclic AMP-responsive elemen ( 395) 145 35.7 1.3 sp|O60841|IF2P_HUMAN Eukaryotic translation initia (1220) 151 37.1 1.4 sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initi ( 952) 149 36.7 1.5 sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcr ( 118) 135 33.5 1.7 sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive elemen ( 428) 143 35.4 1.7 sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS= ( 313) 141 34.9 1.7 sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BA (2158) 153 37.7 1.7 sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcr ( 703) 146 36.1 1.7 sp|Q54Y73|BZPD_DICDI Probable basic-leucine zipper ( 834) 147 36.3 1.8 sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gal ( 323) 141 34.9 1.8 sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodop ( 381) 142 35.1 1.8 sp|O35284|BATF_MOUSE Basic leucine zipper transcri ( 125) 135 33.5 1.8 sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Hom ( 295) 140 34.7 1.9 sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus ( 295) 140 34.7 1.9 sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS ( 416) 142 35.2 1.9 sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein O ( 466) 142 35.2 2.1 sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcr ( 699) 144 35.7 2.2 sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS= ( 171) 135 33.6 2.3 sp|O13024|INCEA_XENLA Inner centromere protein A O ( 873) 145 36.0 2.3 sp|A0JMT0|CA1AB_XENLA Chromatin assembly factor 1 ( 885) 145 36.0 2.3 sp|Q5RDE1|IF2P_PONAB Eukaryotic translation initia (1220) 147 36.4 2.3 sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS= ( 289) 138 34.4 2.3 sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattu ( 295) 138 34.4 2.4 sp|Q54NF3|Y6434_DICDI Uncharacterized protein DDB_ ( 412) 140 34.8 2.4 sp|P15336|ATF2_HUMAN Cyclic AMP-dependent transcri ( 505) 141 35.1 2.5 sp|Q553B1|DDX46_DICDI ATP-dependent RNA helicase d (1151) 146 36.2 2.5 sp|P48634|BAT2_HUMAN Large proline-rich protein BA (2157) 149 37.0 2.8 sp|Q5TM26|BAT2_MACMU Large proline-rich protein BA (2160) 149 37.0 2.8 sp|A3BYC1|HOX25_ORYSJ Homeobox-leucine zipper prot ( 320) 137 34.2 2.9 sp|P16951|ATF2_MOUSE Cyclic AMP-dependent transcri ( 487) 139 34.7 3.1 sp|Q96RN5|MED15_HUMAN Mediator of RNA polymerase I ( 788) 142 35.4 3.1 sp|Q2UNX4|KAPC_ASPOR Putative transcription factor ( 284) 135 33.8 3.3 sp|Q80U35|ARHGH_MOUSE Rho guanine nucleotide excha (2057) 147 36.6 3.5 sp|P0C865|MK07_RAT Mitogen-activated protein kinas ( 806) 141 35.2 3.5 sp|P97875|JDP2_MOUSE Jun dimerization protein 2 OS ( 163) 131 32.9 3.5 sp|Q78E65|JDP2_RAT Jun dimerization protein 2 OS=R ( 163) 131 32.9 3.5 sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive elemen ( 368) 136 34.1 3.6 sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus ( 273) 134 33.6 3.6 sp|A2AJI0|MA7D1_MOUSE MAP7 domain-containing prote ( 846) 141 35.3 3.7 sp|Q00312|RBF1_CANAL Transcription factor RBF1 OS= ( 527) 138 34.6 3.7 sp|O35413|SRBS2_RAT Sorbin and SH3 domain-containi (1196) 143 35.7 3.7 sp|P97876|BATF3_RAT Basic leucine zipper transcrip ( 133) 129 32.5 3.9 sp|O93602|ATF2_CHICK Cyclic AMP-dependent transcri ( 487) 137 34.4 3.9 sp|Q5F489|TAF3_CHICK Transcription initiation fact ( 930) 141 35.3 3.9 sp|Q6CBW0|NST1_YARLI Stress response protein NST1 ( 889) 140 35.1 4.3 sp|Q9CXK9|RBM33_MOUSE RNA-binding protein 33 OS=Mu (1231) 142 35.6 4.3 sp|Q554P0|BZPJ_DICDI Probable basic-leucine zipper ( 787) 139 34.9 4.4 sp|Q55EQ3|Y9086_DICDI Uncharacterized abhydrolase ( 937) 140 35.1 4.4 sp|O75037|KI21B_HUMAN Kinesin-like protein KIF21B (1637) 143 35.8 4.7 sp|O14273|YET4_SCHPO Meiotically up-regulated prot ( 647) 137 34.5 4.8 sp|P19880|YAP1_YEAST AP-1-like transcription facto ( 650) 137 34.5 4.8 sp|Q6IPM2|IQCE_HUMAN IQ domain-containing protein ( 695) 137 34.5 5.1 sp|Q98UK4|MAF_DANRE Transcription factor Maf OS=Da ( 327) 132 33.4 5.3 sp|Q556Q3|IRLF_DICDI Probable serine/threonine-pro (1400) 141 35.4 5.3 sp|P14233|TGA1B_TOBAC TGACG-sequence-specific DNA- ( 242) 130 32.9 5.4 sp|Q8CH25|SLTM_MOUSE SAFB-like transcription modul (1031) 139 35.0 5.4 sp|O81025|P2A03_ARATH Putative protein PHLOEM PROT ( 463) 134 33.8 5.4 sp|P20226|TBP_HUMAN TATA-box-binding protein OS=Ho ( 339) 132 33.4 5.4 sp|Q4WG58|PAN1_ASPFU Actin cytoskeleton-regulatory (1467) 141 35.5 5.5 sp|B0YC95|PAN1_ASPFC Actin cytoskeleton-regulatory (1467) 141 35.5 5.5 sp|Q00969|ATF2_RAT Cyclic AMP-dependent transcript ( 487) 134 33.9 5.6 sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Ho ( 591) 135 34.1 5.7 sp|Q6MG48|BAT2_RAT Large proline-rich protein BAT2 (2161) 143 35.9 5.8 sp|P0C5H8|KAPC_EMENI Putative transcription factor ( 278) 130 33.0 5.9 sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5- ( 454) 133 33.7 6 sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide excha (1021) 138 34.8 6 sp|Q9NWH9|SLTM_HUMAN SAFB-like transcription modul (1034) 138 34.8 6.1 sp|O60308|K0562_HUMAN Uncharacterized protein KIAA ( 925) 137 34.6 6.3 sp|A2Z0Q0|HOX25_ORYSI Homeobox-leucine zipper prot ( 260) 129 32.8 6.4 sp|Q6Y7W6|PERQ2_HUMAN PERQ amino acid-rich with GY (1299) 139 35.1 6.4 sp|Q4WA21|KAPC_ASPFU Putative transcription factor ( 280) 129 32.8 6.7 sp|Q9QXL1|KI21B_MOUSE Kinesin-like protein KIF21B (1668) 140 35.3 6.9 sp|P21127|CD11B_HUMAN Cell division protein kinase ( 795) 135 34.2 7.2 sp|Q789F3|MAF_CHICK Transcription factor Maf OS=Ga ( 359) 130 33.0 7.2 sp|Q6A000|K0753_MOUSE Uncharacterized protein KIAA ( 959) 136 34.4 7.3 sp|P23091|MAF_AVIS4 Transforming protein Maf OS=Av ( 369) 130 33.1 7.4 sp|Q5RCJ1|CIP4_PONAB Cdc42-interacting protein 4 O ( 601) 133 33.8 7.4 sp|P23050|FOS_AVINK p55-v-Fos-transforming protein ( 322) 129 32.8 7.5 sp|Q80YR5|SAFB2_MOUSE Scaffold attachment factor B ( 991) 136 34.5 7.5 sp|Q6ZSZ5|ARHGI_HUMAN Rho guanine nucleotide excha (1173) 137 34.7 7.5 sp|O70191|ATF5_MOUSE Cyclic AMP-dependent transcri ( 283) 128 32.6 7.7 sp|A6NC98|CC88B_HUMAN Coiled-coil domain-containin (1476) 138 34.9 7.9 sp|B0WYY2|MOEH_CULQU Moesin/ezrin/radixin homolog ( 572) 132 33.6 8 sp|P11939|FOS_CHICK Proto-oncogene c-Fos OS=Gallus ( 367) 129 32.9 8.3 sp|Q9XUS2|MED29_CAEEL Mediator of RNA polymerase I ( 441) 130 33.1 8.4 sp|A1D9Z7|KAPC_NEOFI Putative transcription factor ( 280) 127 32.4 8.6 sp|P29176|FOSX_MSVFR Transforming protein v-Fos/v- ( 244) 126 32.2 8.7 sp|Q09458|YQ37_CAEEL Uncharacterized protein C09F5 ( 395) 129 32.9 8.7 sp|P23922|HBP1A_WHEAT Transcription factor HBP-1a ( 349) 128 32.7 9 sp|Q5R452|SAFB1_PONAB Scaffold attachment factor B ( 914) 134 34.1 9 sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding prote ( 256) 126 32.2 9 sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mu ( 802) 133 33.9 9.2 sp|P54843|MAF_MOUSE Transcription factor Maf OS=Mu ( 370) 128 32.7 9.4 sp|P49716|CEBPD_HUMAN CCAAT/enhancer-binding prote ( 269) 126 32.2 9.4 sp|Q15642|CIP4_HUMAN Cdc42-interacting protein 4 O ( 601) 131 33.4 9.4 sp|Q54RZ9|BZPG_DICDI Probable basic-leucine zipper ( 372) 128 32.7 9.4 sp|Q5AXH3|TOF1_EMENI Topoisomerase 1-associated fa (1167) 135 34.3 9.6 sp|Q498L2|SLTM_XENLA SAFB-like transcription modul ( 998) 134 34.1 9.6 sp|P0CB49|YLPM1_RAT YLP motif-containing protein 1 (1376) 136 34.6 9.6 sp|Q39140|TGA6_ARATH Transcription factor TGA6 OS= ( 330) 127 32.5 9.7 sp|Q8N9W4|GG6L2_HUMAN Golgin subfamily A member 6- ( 650) 131 33.4 10 >>sp|Q1XGE2|HAC1_ASPOR Transcriptional activator hacA OS (345 aa) initn: 2265 init1: 2265 opt: 2265 Z-score: 2132.8 bits: 403.1 E(516081): 2.8e-111 Smith-Waterman score: 2265; 100.0% identity (100.0% similar) in 345 aa overlap (1-345:1-345) 10 20 30 40 50 60 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG 10 20 30 40 50 60 70 80 90 100 110 120 sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ 70 80 90 100 110 120 130 140 150 160 170 180 sp|Q1X QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|Q1X QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD 130 140 150 160 170 180 190 200 210 220 230 240 sp|Q1X ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|Q1X ELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK 190 200 210 220 230 240 250 260 270 280 290 300 sp|Q1X HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp|Q1X HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS 250 260 270 280 290 300 310 320 330 340 sp|Q1X EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC ::::::::::::::::::::::::::::::::::::::::::::: sp|Q1X EPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC 310 320 330 340 >>sp|Q8TFU8|HAC1_EMENI Transcriptional activator hacA OS (350 aa) initn: 1623 init1: 1623 opt: 1740 Z-score: 1640.9 bits: 312.1 E(516081): 7e-84 Smith-Waterman score: 1740; 78.9% identity (94.3% similar) in 332 aa overlap (13-344:18-348) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKK .:::.::. ::::::::::::::.. .: .: .:::::::::: sp|Q8T MKSADRFSPVKMEDAFANSLPTTPSLEVPVLTVSPADTSLQTKNVVAQ-TKPEEKKPAKK 10 20 30 40 50 60 70 80 90 100 110 sp|Q1X RKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEK :::::::::::::::::::::::::::::::::::::::::::::::::::::::::.:: sp|Q8T RKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLESEK 60 70 80 90 100 110 120 130 140 150 160 170 sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLF :.::::::::::::.::::::::::::.:::.::::::: .:: .:::..::::::::: sp|Q8T IDMEQQNQFLLQRLAQMEAENNRLSQQVAQLSAEVRGSRHSTPTSSSPASVSPTLTPTLF 120 130 140 150 160 170 180 190 200 210 220 230 sp|Q1X KQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL ::: ::.::.::::::::..:::::::::.:::: :..:::::::.::::: ::: :::: sp|Q8T KQEGDEVPLDRIPFPTPSVTDYSPTLKPSSLAESPDLTQHPAVSVGGLEGDESALTLFDL 180 190 200 210 220 230 240 250 260 270 280 290 sp|Q1X GSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSM :...::. : :..:::::::: :::.::::.: :::..:::.:::::..::::::::::: sp|Q8T GASIKHEPTHDLTAPLSDDDFRRLFNGDSSLESDSSLLEDGFAFDVLDSGDLSAFPFDSM 240 250 260 270 280 290 300 310 320 330 340 sp|Q1X VNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC :.::.:::::: .:...:: : ..::..:.::. ::::.:::::::::: sp|Q8T VDFDTEPVTLEDLEQTNGLSDSASCKAASLQPSHGASTSRCDGQGIAAGSA 300 310 320 330 340 350 >>sp|Q8TFF3|HAC1_TRIRE Transcriptional activator hac1 OS (451 aa) initn: 467 init1: 378 opt: 414 Z-score: 397.4 bits: 82.4 E(516081): 1.3e-14 Smith-Waterman score: 446; 31.1% identity (51.8% similar) in 421 aa overlap (7-344:43-450) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN . : . ::. : :.. :. : . . sp|Q8T EASPAESFLSAPGDNFTSLFADSTPSTLNPRDMMTPDSV-ADIDSRLSVIPESQDAEDDE 20 30 40 50 60 70 40 50 60 70 80 90 sp|Q1X SADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAA : .... . ::::.:::::::: :: :::::::::::::::::::::.::::::: : sp|Q8T SHSTSATAPSTSEKKPVKKRKSWGQVLPEPKTNLPPRKRAKTEDEKEQRRVERVLRNRRA 80 90 100 110 120 130 100 110 120 130 140 sp|Q1X AQTSRERKRLEMEKLENEKIQME-------QQNQFLLQRLSQMEAENNRLS--------- ::.::::::::.: ::... ..: . : .:...:.... .. .. sp|Q8T AQSSRERKRLEVEALEKRNKELETLLINVQKTNLILVEELNRFRRSSGVVTRSSSPLDSL 140 150 160 170 180 190 150 160 170 180 sp|Q1X QQLAQLAAEVRGSRANTPMPG------------------SPATASPTLTPTLFKQ-ERDE :. :. .. ::: . : . .::. ::.: : :. . : sp|Q8T QDSITLSQQLFGSRDGQTMSNPEQSLMDQIMRSAANPTVNPASLSPSLPPISDKEFQTKE 200 210 220 230 240 250 190 200 210 220 230 sp|Q1X LPLERIPFPTPSLSDYSPTLKPSTLAE--------SSDVAQHPAVSVAGLEGDGSALPLF :. . . : . .. : :.: .:.::::..: .:.:.: sp|Q8T EDEEQADEDEEMEQTWHETKEAAAAKEKNSKQSRVSTDSTQRPAVSIGG----DAAVPVF 260 270 280 290 300 240 250 260 270 sp|Q1X D-------LGSDLKHHSTDD----------VAAPLSDDDFNRLFHGDSSVEPDSSVFEDG . :: : :. :: ..: :. : . :.... . :..:. .: sp|Q8T SDDAGANCLGLDPVHQ--DDGPFSIGHSFGLSAALDADRY--LLESQLLASPNASTVDD- 310 320 330 340 350 360 280 290 300 310 sp|Q1X LAFDVLEGGDLSAF--PFDSMVNFDSEPVTLEGIEMA---------------------HG : : : . . : :. : .:: . . . : : sp|Q8T ---DYLAGDSAACFTNPLPSDYDFDINDFLTDDANHAAYDIVAASNYAAADRELDLEIHD 370 380 390 400 410 320 330 340 sp|Q1X LPDETTCKTSSVQPGFGASTTRCDGQGIAAGC .. . : :: :::. :: :::.: sp|Q8T PENQIPSRHSIQQPQSGASSHGCDDGGIAVGV 420 430 440 450 >>sp|P41546|HAC1_YEAST Transcriptional activator HAC1 OS (238 aa) initn: 251 init1: 221 opt: 257 Z-score: 254.0 bits: 54.9 E(516081): 1.3e-06 Smith-Waterman score: 257; 32.9% identity (60.3% similar) in 219 aa overlap (63-270:16-216) 40 50 60 70 80 sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVP---KTNLPPRKRAKTEDEKEQRRIER : .: :..:::::::::..::::::::: sp|P41 MEMTDFELTSNSQSNLAIPTNFKSTLPPRKRAKTKEEKEQRRIER 10 20 30 40 90 100 110 120 130 140 sp|Q1X VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ-NQFLLQRLSQME-AENNRLSQQLAQLA .:::: ::. :::.:::... :: . .:. :. :..:.. : : . . .:.: sp|P41 ILRNRRAAHQSREKKRLHLQYLERKCSLLENLLNSVNLEKLADHEDALTCSHDAFVASLD 50 60 70 80 90 100 150 160 170 180 190 200 sp|Q1X A--EVRGSR-ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS . ...: :. .: ..: :.::. ::. :. ::.:. sp|P41 EYRDFQSTRGASLDTRASSHSSSDTFTPS---------PLNCTMEPA--------TLSPK 110 120 130 140 210 220 230 240 250 260 sp|Q1X TLAES-SDVAQHPAVSVAGLEG--DGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFH .. .: :: ... :. ....:: : ...: .. .: :: :: . . sp|P41 SMRDSASDQETSWELQMFKTENVPESTTLPAVD-NNNLFDAVASPLADPLCDDIAGNSLP 150 160 170 180 190 200 270 280 290 300 310 320 sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK :.:.. :. sp|P41 FDNSIDLDNWRNPEAQSGLNSFELNDFFITS 210 220 230 >>sp|O24646|HY5_ARATH Transcription factor HY5 OS=Arabid (168 aa) initn: 217 init1: 217 opt: 225 Z-score: 226.1 bits: 49.2 E(516081): 4.5e-05 Smith-Waterman score: 225; 31.8% identity (62.4% similar) in 170 aa overlap (6-167:3-167) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSV--DSLPATP---ASEVPVLTVSP---ADTSLNSADVKTQEVKPEEKKP :.. ::. .:::.. .: .: : .. .: . . :. .: . sp|O24 MQEQATSSLAASSLPSSSERSSSSAPHLEIKEGIESDEEIRRVPEFGGEAVGKETSG 10 20 30 40 50 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE .. .. ::: .. :::..: :::..:..:.::::..:: .::::. . .:: sp|O24 RESGSATGQERTQATVGESQRKRGRTPAEKENKRLKRLLRNRVSAQQARERKKAYLSELE 60 70 80 90 100 110 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP :. ..:..:. : .::: .. ::. : . : . ... ::. . :: : :: sp|O24 NRVKDLENKNSELEERLSTLQNENQMLRHILKNTTGNKRGGGG-----GSNADASL 120 130 140 150 160 180 190 200 210 220 230 sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL >>sp|Q3SZZ2|XBP1_BOVIN X-box-binding protein 1 OS=Bos ta (261 aa) initn: 188 init1: 137 opt: 200 Z-score: 200.1 bits: 45.1 E(516081): 0.0013 Smith-Waterman score: 200; 29.9% identity (56.9% similar) in 204 aa overlap (16-206:10-196) 10 20 30 40 50 60 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG ::. : .: .:. .:: :. : . : : sp|Q3S MVVVAPAQSPAAGAPKVLLLSGQPAATGGAPAGRALPVMVP------------G 10 20 30 40 70 80 90 100 110 sp|Q1X QELPVPK--TNLPP--RKRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEK :. :. ...:: ::: . :. :.. ..: :.::.::::.:.::. .: .::.. sp|Q3S QQGASPEGASGVPPQARKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQV 50 60 70 80 90 100 120 130 140 150 160 sp|Q1X IQMEQQNQFLL-------QRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASP ...:..:: :: .. . .::..: :.:. . : : .:.: :. .:. sp|Q3S VDLEEENQKLLLENQLLREKTHGLVVENQELRQRLG-MDALVTEEEAETKGNGAGLVAGS 110 120 130 140 150 160 170 180 190 200 210 220 sp|Q1X TLTPTLFKQERDELPLERIPFPTPSLSDYSP-TLKPSTLAESSDVAQHPAVSVAGLEGDG . . .: : . ::... :.. :: :: :: sp|Q3S AESAAL----RLRAPLQQVQAQLSPLQNISPWTLMALTLQTLSLTSCWAFCSTWTQSCSS 170 180 190 200 210 230 240 250 260 270 280 sp|Q1X SALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDL sp|Q3S DVLPQSLPAWSSSQKWTQKDPVPYRPPLLHPWGRHQPSWKPLMN 220 230 240 250 260 >>sp|A1L224|CR3L2_DANRE Cyclic AMP-responsive element-bi (519 aa) initn: 134 init1: 134 opt: 203 Z-score: 198.9 bits: 45.8 E(516081): 0.0015 Smith-Waterman score: 203; 32.7% identity (59.0% similar) in 156 aa overlap (4-152:210-360) 10 20 30 sp|Q1X MSCDMEKTMSSVDSL-PATPASEVPVLTVSP-A : : ..: : ::.:.. :: :.: : sp|A1L PHEVDQFLNLSPKGLECLQMPPTPPSSVGSDSEGSQSPVHPCAPASPTQTPAVLKVAPRA 180 190 200 210 220 230 40 50 60 70 80 sp|Q1X DTSLNSADVKTQEVKPEEKKP-----AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRR .::.:. . : : . . : .:: .. ::: :.:: : .:: .. sp|A1L PSSLSSSPLLTAPHKLQGSGPLLLTEEEKRTLIAEGYPVP-TKLPLSK----AEEKALKK 240 250 260 270 280 290 90 100 110 120 130 140 sp|Q1X IERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL :.: ..:. .:: ::..:. .. ::.. ..:. : ... ..: :. : ::: .: sp|A1L IRRKIKNKISAQESRRKKKEYVDALEKKVETCSNENHELRRKVENLECTNKSLLQQLHSL 300 310 320 330 340 350 150 160 170 180 190 200 sp|Q1X AAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTL : : : sp|A1L QAVVAGKVPRSCRVTGTQTSTCLMVVVLCFSLFLGSFYPGLSPCSSITKADLSREISIHD 360 370 380 390 400 410 >>sp|Q54WN7|BZPF_DICDI Probable basic-leucine zipper tra (631 aa) initn: 119 init1: 88 opt: 201 Z-score: 195.9 bits: 45.6 E(516081): 0.0022 Smith-Waterman score: 201; 24.5% identity (55.4% similar) in 233 aa overlap (46-270:363-593) 20 30 40 50 60 70 sp|Q1X PATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTN----LP : :: : :::: . . :: : : sp|Q54 NSNNISTQINNLNNNINNQNNQLNGSNNGKKKEEDKSIKKRK-FISSTPVKGENGGTTLI 340 350 360 370 380 390 80 90 100 110 120 sp|Q1X PRKRA--KTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL : . . ..:..:.: .:...:: ::: :.:.. .. ::.. .. :. . :. sp|Q54 PTTDGGFNMDEERHQKRQRRLVKNREAAQLFRQRQKAYIQDLEKKVSDLTGTNSEFRARV 400 410 420 430 440 450 130 140 150 160 170 180 sp|Q1X SQMEAENNRLSQQLAQLAAEVRGSRA-NTPMPGSPATASPTLTPTLFKQERDELPLERIP ...::. . .:: : : . . . : :: .: ::. . : . : : sp|Q54 ELLNSENKLIREQLLYLRNFVTQAVSFSFPKGGSNGTNSPSGVADQFLNSILP-PGLNSP 460 470 480 490 500 510 190 200 210 220 230 240 sp|Q1X FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVA .: : .: .. ...:.. .. ...:. . :. . :.: .: .. sp|Q54 LPQGILPAGMNLQNPMIMSAIAEAASKNSTFRQNIQGNLLGTPIPSPQSSLTSNSGNNSP 520 530 540 550 560 570 250 260 270 280 290 300 sp|Q1X A-PLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG ::.... : ...... .:.: sp|Q54 NKPLNNNNNNNNINNNNNNNPSSPNNNLNNNNNISPNSSTSHQVPYLPQNTPPQQSTPNQ 580 590 600 610 620 630 >>sp|Q9SM50|HY5_SOLLC Transcription factor HY5 OS=Solanu (158 aa) initn: 183 init1: 183 opt: 191 Z-score: 194.6 bits: 43.3 E(516081): 0.0026 Smith-Waterman score: 191; 36.8% identity (67.4% similar) in 95 aa overlap (60-154:66-157) 30 40 50 60 70 80 sp|Q1X PADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER :: : :. :::... .::..:..: sp|Q9S SDDEIRRVPEMGGEATGTTSASGRDGVSAAGQAQPSAGTQ---RKRGRSPADKENKRLKR 40 50 60 70 80 90 90 100 110 120 130 140 sp|Q1X VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE .::::..:: .::::. . :: . ..: .: : .::: .. ::. : . : . .: sp|Q9S LLRNRVSAQQARERKKAYLIDLEARVKELETKNAELEERLSTLQNENQMLRHILKNTTAG 100 110 120 130 140 150 150 160 170 180 190 200 sp|Q1X VRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAES .. .: sp|Q9S AQEGRK >>sp|Q66HA2|CR3L1_RAT Cyclic AMP-responsive element-bind (520 aa) initn: 133 init1: 133 opt: 191 Z-score: 187.6 bits: 43.8 E(516081): 0.0062 Smith-Waterman score: 191; 25.3% identity (51.7% similar) in 300 aa overlap (4-290:214-499) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT : . ..: . :..:. . ... . . sp|Q66 AEPPEMSQFLKVTQEDLVQMPPTPPSSHGSDSDGSQSPRSLPPSSPVRPMARSSTAISTS 190 200 210 220 230 240 40 50 60 70 80 90 sp|Q1X SLNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR : .: : : .. : .:: .. :.: :.:: : .:: .:..: .. sp|Q66 PLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TKLPLTK----AEEKALKRVRRKIK 250 260 270 280 290 100 110 120 130 140 150 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG :. .:: ::..:. .: ::.. . ..:. : ... .:. : : ::: .: . : sp|Q66 NKISAQESRRKKKEYVECLEKKVETYTSENNELWKKVETLETANRTLLQQLQKLQTLVT- 300 310 320 330 340 350 160 170 180 190 200 210 sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV :. . :. .:. : : . : : . :..:. : :.: . .: .: sp|Q66 SKISRPYK---MAATQTGTCLMVAALCFVLVLGSLAPCLPAFSSGSKTVKEDPVAADSVY 360 370 380 390 400 410 220 230 240 250 260 sp|Q1X A--QHPAVSV------AGLEGDGSALPLFDL----GSDLKHHSTDDVAAPLSDDDFNRLF : : :. :. :: :: :. . : .:: . : : .: . : sp|Q66 AASQMPSRSLLFYDDGAGSWEDGHRGALLPVEPPEGWELKPGGP---AEPRPQDHL-RHD 420 430 440 450 460 470 270 280 290 300 310 320 sp|Q1X HGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTC :.:: .. .. ... :. ..: : sp|Q66 HADS-IHETTKYLRETWPEDTEDNGASPNFSHPKEWFHDRDLGPNTTIKLS 480 490 500 510 520 >>sp|Q9Z125|CR3L1_MOUSE Cyclic AMP-responsive element-bi (519 aa) initn: 133 init1: 133 opt: 189 Z-score: 185.8 bits: 43.4 E(516081): 0.0079 Smith-Waterman score: 189; 26.7% identity (53.8% similar) in 240 aa overlap (4-232:215-445) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT : . ..: . :..:. . ... . . sp|Q9Z AEPPEMSQFLKVTPEDLVQMPPTPPSSHGSDSDGSQSPRSLPPSSPVRPMARSSTAISTS 190 200 210 220 230 240 40 50 60 70 80 90 sp|Q1X SLNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR : .: : : .. : .:: .. :.: :.:: : .:: .:..: .. sp|Q9Z PLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TKLPLTK----AEEKALKRVRRKIK 250 260 270 280 290 100 110 120 130 140 150 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG :. .:: ::..:. .: ::.. . ..:. : ... .:. : : ::: .: . : sp|Q9Z NKISAQESRRKKKEYVECLEKKVETYTSENNELWKKVETLETANRTLLQQLQKLQTLVT- 300 310 320 330 340 350 160 170 180 190 200 210 sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV :. . :. .:. : : . : : . :..:. : :.: . .: .: sp|Q9Z SKISRPY---KMAATQTGTCLMVAALCFVLVLGSLVPCLPAFSSGSMTVKEDPIAADSVY 360 370 380 390 400 410 220 230 240 250 260 sp|Q1X A--QHPAVSV------AGL--EGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHG : : :. :. :: .: :. ::. sp|Q9Z AASQMPSRSLLFYDDGAGSWEDGRGALLPVEPPEGWELKPGGPAEQRPQDHLRHDRADSI 420 430 440 450 460 470 >>sp|Q96BA8|CR3L1_HUMAN Cyclic AMP-responsive element-bi (519 aa) initn: 132 init1: 132 opt: 187 Z-score: 183.9 bits: 43.1 E(516081): 0.01 Smith-Waterman score: 187; 26.2% identity (53.3% similar) in 240 aa overlap (4-232:215-445) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT : . ..: . :..:. . ... . . sp|Q96 AEPLEVNQFLKVTPEDLVQMPPTPPSSHGSDSDGSQSPRSLPPSSPVRPMARSSTAISTS 190 200 210 220 230 240 40 50 60 70 80 90 sp|Q1X SLNSADVKTQEVK-PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR : .: : : .. : .:: .. :.: :.:: : .:: .:..: .. sp|Q96 PLLTAPHKLQGTSGPLLLTEEEKRTLIAEGYPIP-TKLPLTK----AEEKALKRVRRKIK 250 260 270 280 290 100 110 120 130 140 150 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG :. .:: ::..:. .: ::.. . ..:. : ... .: : : ::: .: . : sp|Q96 NKISAQESRRKKKEYVECLEKKVETFTSENNELWKKVETLENANRTLLQQLQKLQTLVT- 300 310 320 330 340 350 160 170 180 190 200 210 sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS-- .. . :. .:. : : . : : . : .:. : :.: . :: .. sp|Q96 NKISRPY---KMAATQTGTCLMVAALCFVLVLGSLVPCLPEFSSGSQTVKEDPLAADGVY 360 370 380 390 400 410 220 230 240 250 260 sp|Q1X DVAQHPAVSV------AGLEGDGSA--LPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHG ..: :. :. ::: :: . ::. sp|Q96 TASQMPSRSLLFYDDGAGLWEDGRSTLLPMEPPDGWEINPGGPAEQRPRDHLQHDHLDST 420 430 440 450 460 470 >>sp|A3LYI0|NST1_PICST Stress response protein NST1 OS=P (1234 aa) initn: 113 init1: 84 opt: 200 Z-score: 191.0 bits: 45.6 E(516081): 0.004 Smith-Waterman score: 201; 26.6% identity (54.6% similar) in 304 aa overlap (41-332:727-1001) 20 30 40 50 60 70 sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL . .:.: .:.. :: .. .. : .: sp|A3L ELKQKQEALKADQRRRKEEAKLKREEEKKKRIEELKRKEEEHKKKVEAQQKKEEEAK-KL 700 710 720 730 740 750 80 90 100 110 120 130 sp|Q1X PPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLS ... :.:.:..... :. .. : .::.::..: :::... :::. :. sp|A3L KEERKKKAEEERKKKEEEKRQKELLKKQKEEERERLKLEAEENERLEKEQQE------LQ 760 770 780 790 800 140 150 160 170 180 190 sp|Q1X QMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFP ... .:.: . ::: ::. . .:: . ::: . :..: . : . : sp|A3L ELQESQNQLELESAQLPAEL-----AEEINASPDSFSPTKNH-LLEQLYQARP-SSVSGP 810 820 830 840 850 860 200 210 220 230 240 sp|Q1X T---PSLSDYSPTLKPSTLAESSDVAQ----HPAVSVAGLEGDGSALPLFDLGSDLKHHS : : .. ..: : . : :: : . ::.: : :.: :: : . . . . : sp|A3L TTISPPIQ-FTPEAVPPVAAVSSVVPSVVPISPALSGAILNGTGS--P--NSRNAMLYGS 870 880 890 900 910 250 260 270 280 290 sp|Q1X TDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE----DGLAFDV-LEGGDLSAFPFDSMVNF . .. : : : . :.. : :: . .: ... : .::: :. . .: sp|A3L SAQAQLP------NGLNSSTSNMSPWSSKSRLNSTSGASLQSNLFQPQLSASGFSPFNDF 920 930 940 950 960 970 300 310 320 330 340 sp|Q1X DSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC : :.: :: .. .. ...:.: ::. sp|A3L -STPATSAGI---GSVNVNAPLASTAVEPLAGANNGGVWNPSTTSSRNNSIWSNTPNLNN 980 990 1000 1010 1020 sp|A3L ASIWGNTLPSLAGGAGAGASTPSAAHTLPNSAPLASDNELIQVAAYNTFQMLQNSNQLEF 1030 1040 1050 1060 1070 1080 >>sp|A2VD01|CR3L2_XENLA Cyclic AMP-responsive element-bi (525 aa) initn: 143 init1: 143 opt: 183 Z-score: 180.1 bits: 42.4 E(516081): 0.016 Smith-Waterman score: 183; 31.0% identity (55.7% similar) in 158 aa overlap (4-152:218-368) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVP------VLT : : .: . ::: :.: : . . sp|A2V VDQFLNLCPKEVAPTEALQMPPTPPSSHGSDSEGGQSPTRSLP--PSSPVQSQAGGKMAA 190 200 210 220 230 240 30 40 50 60 70 80 sp|Q1X VSPA---DTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ ::. .. : .: : : : .:: .. :.: :.:: : .:: sp|A2V RSPSALSNSPLLTAPHKLQGSGPLMLTEEEKRTLVAEGYPIP-TKLPLTK----AEEKAL 250 260 270 280 290 300 90 100 110 120 130 140 sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA ..:.: ..:. .:: ::..:. :..::.. . ..:. : ... .:. : : ::: sp|A2V KKIRRKIKNKISAQESRRKKKEYMDSLEKRVENSSSENSELRKKVEVLESTNRTLLQQLQ 310 320 330 340 350 360 150 160 170 180 190 200 sp|Q1X QLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS .: : : : sp|A2V RLQAMVTGKVTRSCKAAGTQTGTCLMMVVLCFAVIFGSFTQNLDMYSSSSKTIHEPSQYS 370 380 390 400 410 420 >>sp|Q08CW8|CR3L4_XENTR Cyclic AMP-responsive element-bi (428 aa) initn: 137 init1: 137 opt: 181 Z-score: 179.4 bits: 41.9 E(516081): 0.018 Smith-Waterman score: 181; 26.9% identity (53.3% similar) in 182 aa overlap (24-200:160-330) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSAD-VKTQEVKPEEKKP :: .: :. :: . .. . :: . sp|Q08 MSSVISIQLAEDWNSAPLLIPESCIVNDLPPVCKSTPLPIRLTPADLIAVDALYPELHLT 130 140 150 160 170 180 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE .... .:: . .::: : .:. ....: .::. .:: ::.::. .. :: sp|Q08 EEEKRLLSQEGVALPNNLPLTK----AEERILKKVRRKIRNKQSAQDSRRRKKEYIDGLE 190 200 210 220 230 240 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP .. .::: : ... ..: .: : :: .: . .. . .. : .: . sp|Q08 SRVAACSSQNQELHKKVVELEKHNISLITQLRKLQTLIKQTSNKA------AQTSTCVLI 250 260 270 280 290 180 190 200 210 220 sp|Q1X TLFKQERDELPLERIPF---PTPSLSD-YSPTLKPSTLAESSDVAQHPAVSVAGLEGDGS ::. .: :: :. : : : :: sp|Q08 LLFSLALLVFP-SYSPFRSRPSASQEDSYRPTGVISRNILNKGGFSEVADPQASDTLHRA 300 310 320 330 340 350 230 240 250 260 270 280 sp|Q1X ALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLS sp|Q08 QQREEGDPGRHVVPPANPNPEETEPVSNRARTTPEPDEQVLAEPEAAILGQKGEPPGSDN 360 370 380 390 400 410 >>sp|Q70SY1|CR3L2_HUMAN Cyclic AMP-responsive element-bi (520 aa) initn: 135 init1: 135 opt: 187 Z-score: 183.9 bits: 43.1 E(516081): 0.01 Smith-Waterman score: 187; 23.9% identity (51.9% similar) in 297 aa overlap (14-297:228-517) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPAT--PASEVPVLTVSPADTSLNSADVK ::: : :. .: . ... : .: : sp|Q70 DHLHLPPTPPSSHGSDSEGSLSPNPRLHPFSLPQTHSPSRAAPRAPSALSSSPLLTAPHK 200 210 220 230 240 250 50 60 70 80 90 100 sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR : : .:: .. :.: :.:: : .:: ..:.: ..:. .:: :: sp|Q70 LQGSGPLVLTEEEKRTLIAEGYPIP-TKLPLSKS----EEKALKKIRRKIKNKISAQESR 260 270 280 290 300 310 110 120 130 140 150 160 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMP ..:. :..::.. . .: : ... .: : : ::: .: . : :. . : . sp|Q70 RKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLA 320 330 340 350 360 370 170 180 190 200 210 sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV--- :. . . .. : . :.:. . : . .: : ...: .. sp|Q70 GTQTGTCLMVVVLCFAVAFGSFFQGYGPYPSATKMALPSQHSLQEPYTASVVRSRNLLIY 380 390 400 410 420 430 220 230 240 250 260 270 sp|Q1X AQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV .: .. :... : .: ::.: . : . .. : .. ...:.: . . sp|Q70 EEHSPPEESSSPGSAGELGGWDRGSSLLRVSGLESRPDVDLPHF--IISNETSLEKSVLL 440 450 460 470 480 490 280 290 300 310 320 330 sp|Q1X -FEDGLAFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFG ... :. :::.. :.. .: :: sp|Q70 ELQQHLVSAKLEGNETLKVVELDRRVNTTF 500 510 520 >>sp|Q5RCM9|CR3L2_PONAB Cyclic AMP-responsive element-bi (520 aa) initn: 135 init1: 135 opt: 185 Z-score: 182.0 bits: 42.7 E(516081): 0.013 Smith-Waterman score: 185; 23.9% identity (51.5% similar) in 297 aa overlap (14-297:228-517) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPAT--PASEVPVLTVSPADTSLNSADVK ::: : :. .: . ... : .: : sp|Q5R DHLHLPPTPPSSHGSDSEGSLSPNPRLHPFSLPQTHSPSRAAPRAPSALSSSPLLTAPHK 200 210 220 230 240 250 50 60 70 80 90 100 sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR : : .:: .. :.: :.:: : .:: ..:.: ..:. .:: :: sp|Q5R LQGSGPLVLTEEEKRTLIAEGYPIP-TKLPLTKS----EEKALKKIRRKIKNKISAQESR 260 270 280 290 300 310 110 120 130 140 150 160 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMP ..:. :..::.. . .: : ... .: : : ::: .: . : :. . : . sp|Q5R RKKKEYMDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLA 320 330 340 350 360 370 170 180 190 200 210 sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV--- :. . . .. : . :.:. . : . .: : ...: .. sp|Q5R GTQTGTCLMVVVLCFAVAFGSFFQGYGPYPSATKMALPSQHSLQEPYTASVVRSRNLLIY 380 390 400 410 420 430 220 230 240 250 260 270 sp|Q1X AQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV .: . :... : .: ::.: . : . .. : .. ...:.: . . sp|Q5R EEHSPPEEPSSPGSAGELGGWDRGSSLLRVSGLESRPDVDLPHF--IISNETSLEKSVLL 440 450 460 470 480 490 280 290 300 310 320 330 sp|Q1X -FEDGLAFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFG ... :. :::.. :.. .: :: sp|Q5R ELQQHLVSAKLEGNETLKVVELDRRVNTTF 500 510 520 >>sp|Q8BH52|CR3L2_MOUSE Cyclic AMP-responsive element-bi (521 aa) initn: 135 init1: 135 opt: 200 Z-score: 196.1 bits: 45.3 E(516081): 0.0021 Smith-Waterman score: 200; 24.1% identity (52.9% similar) in 291 aa overlap (18-297:234-518) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP .:: .: . . . : .: : : : sp|Q8B PTPPSSHSSDSEGSLSPNPRLHPFSLSQAHSPARAMPRGPSALSTSPLLTAPHKLQGSGP 210 220 230 240 250 260 50 60 70 80 90 100 sp|Q1X EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE .:: .. :.: :.:: : .:: ..:.: ..:. .:: ::..:. sp|Q8B LVLTEEEKRTLVAEGYPIP-TKLPLTK----SEEKALKKIRRKIKNKISAQESRRKKKEY 270 280 290 300 310 110 120 130 140 150 160 sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMPGSPATA :..::.. . .: : ... .: : : ::: .: . : :. . : . :. . . sp|Q8B MDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLAGTQTGT 320 330 340 350 360 370 170 180 190 200 210 sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV---AQHPAV .. : . :.:. . : . : .: : ...: .. .: . sp|Q8B CLMVVVLCFAVAFGSFFQGYGPYPSATKMALPSQHPLSEPYTASVVRSRNLLIYEEHAPL 380 390 400 410 420 430 220 230 240 250 260 270 sp|Q1X SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV-FEDGL .. .... : .: ::.: . :. : : : . :. ...:.: . . ... : sp|Q8B EESSSPASAGELGGWDRGSSLLRASSGLEALPEVDLP-HFLISNETSLEKSVLLELQQHL 440 450 460 470 480 490 280 290 300 310 320 330 sp|Q1X AFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRC . . :::.. :.. .. :: sp|Q8B VSSKLEGNETLKVVELERRVNATF 500 510 520 >>sp|P17861|XBP1_HUMAN X-box-binding protein 1 OS=Homo s (261 aa) initn: 188 init1: 137 opt: 201 Z-score: 201.0 bits: 45.2 E(516081): 0.0011 Smith-Waterman score: 201; 28.5% identity (58.6% similar) in 186 aa overlap (16-187:10-186) 10 20 30 40 50 60 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG :: . .: .:. .::... : . : .. . . : : sp|P17 MVVVAAAPNPADGTPKVLLLSGQPASAAGAPAGQALPLMVPAQRGASPEAASGG 10 20 30 40 50 70 80 90 100 110 sp|Q1X QELPVPKTNLPPRKRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME .:.. ::: . :. :.. ..: :.::.::::.:.::. .: .::.. ...: sp|P17 ----LPQA----RKRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLE 60 70 80 90 100 120 130 140 150 160 sp|Q1X QQNQFLL-------QRLSQMEAENNRLSQQL------AQLAAEVRGSRANTPMPGSPATA ..:: :: .. . .::..: :.: :. ::..:... :. :: .: sp|P17 EENQKLLLENQLLREKTHGLVVENQELRQRLGMDALVAEEEAEAKGNEVR-PVAGSAESA 110 120 130 140 150 160 170 180 190 200 210 220 sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGD . : : . . . ::. : sp|P17 ALRLRAPLQQVQAQLSPLQNISPWILAVLTLQIQSLISCWAFWTTWTQSCSSNALPQSLP 170 180 190 200 210 220 >>sp|P13346|FOSB_MOUSE Protein fosB OS=Mus musculus GN=F (338 aa) initn: 80 init1: 80 opt: 175 Z-score: 175.2 bits: 40.8 E(516081): 0.031 Smith-Waterman score: 175; 25.7% identity (50.9% similar) in 222 aa overlap (9-222:76-290) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATP-ASEVPVLTVSPAD---TS .::. . . : ::. :. :.: : :: sp|P13 GLGEMPGSFVPTVTAITTSQDLQWLVQPTLISSMAQSQGQPLASQPPA--VDPYDMPGTS 50 60 70 80 90 100 40 50 60 70 80 90 sp|Q1X LNSADVKTQEVKPEEKK--PAKKRKSWGQELPVPKTNLP--PRKRAKTEDEKEQRRIERV .. ... . . :. . . : : : ::... : .:.:.::..: sp|P13 YSTPGLSAYSTGGASGSGGPSTSTTTSGPVSARPARARPRRPREETLTPEEEEKRRVRRE 110 120 130 140 150 160 100 110 120 130 140 150 sp|Q1X LRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV ::. :: :.:.: ..:. : :.:... : ....... :..:: :. sp|P13 -RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGC 170 180 190 200 210 220 160 170 180 190 200 210 sp|Q1X RGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS . . : :: : . : . ..: . : : : : : : .:. : sp|P13 KIPYEEGPGPGPLAEVRDL--PGSTSAKEDGFGWLLPPPPPPPLPFQSSRDAPPNLTAS- 230 240 250 260 270 220 230 240 250 260 270 sp|Q1X DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS . : :.: : sp|P13 -LFTHSEVQVLGDPFPVVSPSYTSSFVLTCPEVSAFAGAQRTSGSEQPSDPLNSPSLLAL 280 290 300 310 320 330 >>sp|Q8W191|HYH_ARATH Transcription factor HY5-like OS=A (149 aa) initn: 148 init1: 148 opt: 165 Z-score: 170.6 bits: 38.8 E(516081): 0.056 Smith-Waterman score: 165; 35.2% identity (76.1% similar) in 71 aa overlap (73-143:68-138) 50 60 70 80 90 100 sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE :.:... .:: : ..:.::::..:: .:: sp|Q8W GSTCVLSSSADDGVNNPELDQTQNGVSTAKRRRGRNPVDKEYRSLKRLLRNRVSAQQARE 40 50 60 70 80 90 110 120 130 140 150 160 sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS ::.. . ::.. .....:. : ...: . ::. : ..: sp|Q8W RKKVYVSDLESRANELQNNNDQLEEKISTLTNENTMLRKMLINTRPKTDDNH 100 110 120 130 140 170 180 190 200 210 220 sp|Q1X PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAG >>sp|P53539|FOSB_HUMAN Protein fosB OS=Homo sapiens GN=F (338 aa) initn: 80 init1: 80 opt: 169 Z-score: 169.5 bits: 39.8 E(516081): 0.064 Smith-Waterman score: 169; 25.7% identity (49.5% similar) in 222 aa overlap (9-222:76-290) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATP-ASEVPVLTVSPAD---TS .::. . . : ::. :: :.: : :: sp|P53 GLGEMPGSFVPTVTAITTSQDLQWLVQPTLISSMAQSQGQPLASQPPV--VDPYDMPGTS 50 60 70 80 90 100 40 50 60 70 80 90 sp|Q1X LNSADVKTQEVKPEEKK--PAKKRKSWGQELPVPKTNLP--PRKRAKTEDEKEQRRIERV .. .. . :. . . : : : ::... : .:.:.::..: sp|P53 YSTPGMSGYSSGGASGSGGPSTSGTTSGPGPARPARARPRRPREETLTPEEEEKRRVRRE 110 120 130 140 150 160 100 110 120 130 140 150 sp|Q1X LRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV ::. :: :.:.: ..:. : :.:... : ....... :..:: :. sp|P53 -RNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGC 170 180 190 200 210 220 160 170 180 190 200 210 sp|Q1X RGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS . . : :: : . : ..: . : : : : . : .:. : sp|P53 KIPYEEGPGPGPLAEVRDL--PGSAPAKEDGFSWLLPPPPPPPLPFQTSQDAPPNLTAS- 230 240 250 260 270 220 230 240 250 260 270 sp|Q1X DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS . : :.: : sp|P53 -LFTHSEVQVLGDPFPVVNPSYTSSFVLTCPEVSAFAGAQRTSGSDQPSDPLNSPSLLAL 280 290 300 310 320 330 >>sp|Q6QDP7|CR3L2_RAT Cyclic AMP-responsive element-bind (521 aa) initn: 135 init1: 135 opt: 182 Z-score: 179.2 bits: 42.2 E(516081): 0.018 Smith-Waterman score: 182; 23.4% identity (52.6% similar) in 291 aa overlap (18-297:234-518) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP .:. .: . . . : .: : : : sp|Q6Q PTPPSSHSSDSEGSLSPNPRLHPFSLSQAHSPGRAMPRGPSALSTSPLLTAPHKLQGSGP 210 220 230 240 250 260 50 60 70 80 90 100 sp|Q1X EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLE .:: .. :.: :.:: : .:: ..:.: ..:. .:: ::..:. sp|Q6Q LVLTEEEKRTLIAEGYPIP-TKLPLTK----SEEKALKKIRRKIKNKISAQESRRKKKEY 270 280 290 300 310 110 120 130 140 150 160 sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT-PMPGSPATA :..::.. . .: : ... .: : : ::: .: . : :. . : . :. . . sp|Q6Q MDSLEKKVESCSTENLELRKKVEVLENTNRTLLQQLQKLQTLVMGKVSRTCKLAGTQTGT 320 330 340 350 360 370 170 180 190 200 210 sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPS---LSDYSPTLKPST--LAESSDV---AQHPAV .. : : .:. . : . : .: : ...: .. .: .. sp|Q6Q CLMVVVLCFAVAFGSLFQGYGLYPSATKMALPSQHPLSEPYTASVVRSRNLLIYEEHSSL 380 390 400 410 420 430 220 230 240 250 260 270 sp|Q1X SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV-FEDGL .. .... : .: ::.: . :. : : : . .. ..:.: . . ... : sp|Q6Q EESSSPASAGELGGWDRGSSLLRASSGLEALPEVDLP-HFIISKETSLEKSVLLELQQHL 440 450 460 470 480 490 280 290 300 310 320 330 sp|Q1X AFDVLEGGD-LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRC . . :::.. :.. .. :: sp|Q6Q VSSKLEGNETLKVVELERRVNATF 500 510 520 >>sp|Q3SYZ3|CR3L3_BOVIN Cyclic AMP-responsive element-bi (456 aa) initn: 171 init1: 141 opt: 188 Z-score: 185.6 bits: 43.2 E(516081): 0.0081 Smith-Waterman score: 188; 26.2% identity (53.3% similar) in 240 aa overlap (48-275:213-434) 20 30 40 50 60 70 sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK .::: :. : :: :.:: : sp|Q3S SSGDLQQHHLAAPHLLRPGTGHCQELVLTEDEKKLLAKE---GITLP---TQLPLTKY-- 190 200 210 220 230 80 90 100 110 120 130 sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN .:. ..:.: .::. .:: ::..:. .. ::.. ::: : ... ..: .: sp|Q3S --EERMLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNL 240 250 260 270 280 290 140 150 160 170 180 sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGS---------PATASPTLTPTLFKQERDELPLERIP : .:: .: : : : ... . :. . :...: : ..: : : . : sp|Q3S SLLEQLKKLQAIVVQSTSKSAQTGTCIAVLLFSFALIVLPSISP--FASNRAESPGDFAP 300 310 320 330 340 350 190 200 210 220 230 240 sp|Q1X ---FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTD : .: . . :.: : .:. : :. ....:. . . : .. . ..: sp|Q3S VRVFSRTLHNDAASRVAPDT-APGSE-APGPGPNTGALQERSPGSP----PGEWESQDTR 360 370 380 390 400 250 260 270 280 290 300 sp|Q1X DVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTL . : : . : .:.: : :.... : sp|Q3S ALDNSTEDLDNSTLVQGNSVKELDQATLLDCAPPEPAVSPGHVGLEAAGGEL 410 420 430 440 450 >>sp|Q9TUB3|FOSB_CANFA Protein fosB OS=Canis familiaris (338 aa) initn: 80 init1: 80 opt: 166 Z-score: 166.7 bits: 39.3 E(516081): 0.091 Smith-Waterman score: 172; 28.8% identity (51.3% similar) in 191 aa overlap (72-237:145-332) 50 60 70 80 90 100 sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR ::... : .:.:.::..: ::. :: : sp|Q9T GGASGSGGPSTSGTTSGPGPARPARARLRRPREETLTPEEEEKRRVRRE-RNKLAAAKCR 120 130 140 150 160 170 110 120 130 140 150 160 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPG .:.: ..:. : :.:... : ....... :..:: :. . . : :: sp|Q9T NRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPG 180 190 200 210 220 230 170 180 190 sp|Q1X S-------PATAS------------PTLTPTLFKQERDELPLERIPFPTPS----LSDYS :..:: : : :. .: : . : : :.: sp|Q9T PLAEVRDLPGSASTKEDGFSWLLPPPPAPPLPFQTSQDAAPNLTASLFTHSEVQVLGDPF 240 250 260 270 280 290 200 210 220 230 240 250 sp|Q1X PTLKPSTLAESSDVAQHPAVSV-AGLE-GDGSALPLFDLGSDLKHHSTDDVAAPLSDDDF :...:: :: : : ::. :: . .:: : :.: sp|Q9T PVVNPSY--TSSFVLTCPEVSAFAGTQRPSGSDQPTDPLNSPSLLAL 300 310 320 330 260 270 280 290 300 310 sp|Q1X NRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPD >>sp|Q06507|ATF4_MOUSE Cyclic AMP-dependent transcriptio (349 aa) initn: 123 init1: 91 opt: 165 Z-score: 165.6 bits: 39.1 E(516081): 0.11 Smith-Waterman score: 165; 28.4% identity (61.5% similar) in 148 aa overlap (18-160:212-349) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSAD--VKTQEV ::... . .:: .. :.: . .:... sp|Q06 GSEVDISEGDRKPDSAAYITLIPPCVKEEDTPSDNDSGICMSP-ESYLGSPQHSPSTSRA 190 200 210 220 230 240 50 60 70 80 90 100 sp|Q1X KPEE-KKPAKKRKSWGQELPVPKTNLPP--RKRAKTEDEKEQRRIERVLRNRAAAQTSRE :.. .:. .: : : :: :: ::.. :: ....... .:..:: :. sp|Q06 PPDNLPSPGGSRGS-----PRPKPYDPPGVSLTAKVKTEKLDKKLKKMEQNKTAATRYRQ 250 260 270 280 290 110 120 130 140 150 160 sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS .:: :.: : .: ..:..:. : .. ... : : : .: ::: .:.. .: sp|Q06 KKRAEQEALTGECKELEKKNEALKEKADSLAKEI----QYLKDLIEEVRKARGQKRVP 300 310 320 330 340 170 180 190 200 210 220 sp|Q1X PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAG >>sp|Q5FVM5|CR3L3_RAT Cyclic AMP-responsive element-bind (470 aa) initn: 153 init1: 153 opt: 174 Z-score: 172.3 bits: 40.8 E(516081): 0.045 Smith-Waterman score: 174; 26.7% identity (52.6% similar) in 247 aa overlap (48-284:214-438) 20 30 40 50 60 70 sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK .::: :. : :: :.:: : sp|Q5F GGGDLQQHPLAASQLLGPGSGHCQELVLTEDEKKLLAKE---GVTLP---TQLPLTKY-- 190 200 210 220 230 80 90 100 110 120 130 sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN .:. ..:.: .::. .:: ::..:. .. :::. ::: : ... ..: .: sp|Q5F --EERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQRKVLHLEKQNL 240 250 260 270 280 290 140 150 160 170 180 sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGSPATAS---------PTLTPTLFKQERDELPLERIP : .:: .: : : : .. :. .. :...: : .. . : . :: sp|Q5F SLLEQLKHLQALVVQSTSKPAHAGTCIAVLLLSFVLIILPSISP--FTANKVDSPGDFIP 300 310 320 330 340 350 190 200 210 220 230 240 sp|Q1X FPTPSLSDYSPTLKPSTLAE-SSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDV . .: ::. . .. . ::. : : . .:....: : :. :. :: sp|Q5F -----VRVFSRTLHNHAASRVAPDVTPGPEVP-GPHKGSSGGLSA-DWGNFLEIPMLDD- 360 370 380 390 400 250 260 270 280 290 300 sp|Q1X AAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG : . : . : ..:. . ... : .: . : : sp|Q5F --PTEELDNTTLVLANSTEDLGRATLLDWVASEPLLGQMGLEIPGEEIWLSWVPRWLRVR 410 420 430 440 450 460 310 320 330 340 sp|Q1X IEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC sp|Q5F VVQDALGVL 470 >>sp|Q90370|MAFB_COTJA Transcription factor MafB OS=Cotu (311 aa) initn: 102 init1: 102 opt: 161 Z-score: 162.5 bits: 38.4 E(516081): 0.16 Smith-Waterman score: 161; 27.3% identity (62.6% similar) in 139 aa overlap (29-163:171-307) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS .:. .: .: ...:.. . .. .. : : sp|Q90 HHQYPAVTHEDLAGSGHPHHHHHHHHHASPTPSTSSSSSQQLQTSHQQHPPSSSVEDRFS 150 160 170 180 190 200 60 70 80 90 100 110 sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK : . . .: . :. :.:: .:.: :.:.::. ::. : .. . ..::::: sp|Q90 DDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSCRYKRVQQKHHLENEK 210 220 230 240 250 120 130 140 150 160 170 sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLTPTL :. :: . : :..... : . . . .::.. : . ... :.:: sp|Q90 TQLIQQVEQLKQEVTRLARERDAYKLKCEKLASNGFREAGSTSDNPSSPEFFM 260 270 280 290 300 310 180 190 200 210 220 230 sp|Q1X FKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD >>sp|Q90888|MAFB_CHICK Transcription factor MafB OS=Gall (311 aa) initn: 102 init1: 102 opt: 161 Z-score: 162.5 bits: 38.4 E(516081): 0.16 Smith-Waterman score: 161; 27.3% identity (62.6% similar) in 139 aa overlap (29-163:171-307) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS .:. .: .: ...:.. . .. .. : : sp|Q90 HHQYPAVTHEDLAGSGHPHHHHHHHHQASPTPSTSSSSSQQLQTSHQQHPPSSSVEDRFS 150 160 170 180 190 200 60 70 80 90 100 110 sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK : . . .: . :. :.:: .:.: :.:.::. ::. : .. . ..::::: sp|Q90 DDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSCRYKRVQQKHHLENEK 210 220 230 240 250 120 130 140 150 160 170 sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLTPTL :. :: . : :..... : . . . .::.. : . ... :.:: sp|Q90 TQLIQQVEQLKQEVTRLARERDAYKLKCEKLASNGFREAGSTSDNPSSPEFFM 260 270 280 290 300 310 180 190 200 210 220 230 sp|Q1X FKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD >>sp|O97930|FOS_PIG Proto-oncogene c-Fos OS=Sus scrofa G (380 aa) initn: 100 init1: 68 opt: 166 Z-score: 166.1 bits: 39.3 E(516081): 0.1 Smith-Waterman score: 166; 28.4% identity (52.4% similar) in 250 aa overlap (9-237:55-297) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEV-PVLT--VSPADTSL .:::. .:.. : . : : :.:. .: sp|O97 DSLSYYHSPADSFSSMGSPVNAQDFCTDLAVSSVNFIPTVTAISISPDLQWLVQPTLVS- 30 40 50 60 70 80 40 50 60 70 80 sp|Q1X NSADVKTQEVKP----EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTE----DEKEQRRI . : .:. .: . : .: . . .: ... : :.:.: .:.:.::: sp|O97 SVAPSQTRAPHPYGVPTPSAGAYSRAGAVKTMPGGRAQSIGR-RGKVEQLSPEEEEKRRI 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA .: ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|O97 RRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHR 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X AEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTL . . .: ..:: :. : : .: ::: : : ::. :. sp|O97 PACKIPD-DLGFPEEMSVASLDLSGGLPEAATPESEEAFTLPLLNDPEPKPSVE---PVK 210 220 230 240 250 210 220 230 240 250 sp|Q1X KPSTL---AESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFN : :.. :: : :: : : . ..: .:: :: sp|O97 KVSSMELKAEPFDDFLFPASSRPGGSETARSVPDMDLSGSFYAADWEPLHGGSLGMGPMA 260 270 280 290 300 310 260 270 280 290 300 310 sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE sp|O97 TELEPLCTPVVTCTPSCTAYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTL 320 330 340 350 360 370 >>sp|Q91XE9|CR3L3_MOUSE Cyclic AMP-responsive element-bi (479 aa) initn: 196 init1: 147 opt: 170 Z-score: 168.4 bits: 40.1 E(516081): 0.073 Smith-Waterman score: 177; 27.0% identity (54.1% similar) in 233 aa overlap (48-258:214-432) 20 30 40 50 60 70 sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK .::: :. : :: :.:: : sp|Q91 GSGDLQQHSLAASQLLGPGSGHCQELVLTEDEKKLLAKE---GVTLP---TQLPLTKY-- 190 200 210 220 230 80 90 100 110 120 130 sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN .:. ..:.: .::. .:: ::..:. .. :::. ::: : ... ..: .: sp|Q91 --EERVLKKIRRKIRNKQSAQESRKKKKEYIDGLENRMSACTAQNQELQRKVLHLEKQNL 240 250 260 270 280 290 140 150 160 170 180 sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGSPATAS---------PTLTPTLFKQERDELPLERIP : .:: .: : : : .. :. .. :...: :.... . : . .: sp|Q91 SLLEQLKHLQALVVQSTSKPAHAGTCIAVLLLSFALIILPSISP--FNSNKVDSPGDFVP 300 310 320 330 340 350 190 200 210 220 230 sp|Q1X -------FPTPSLSDYSPTLKPSTLAESS--DVAQ-HPAVSVAGLEGD-GSAL--PLFDL . . . : .: . :.. . . ::. : . : .:: .: :. : :..: sp|Q91 VRVFSRTLHNHAASRVAPDVTPGSEVPGPWPDVGTPHKGPSSGGLSADWGNFLEIPMLDN 360 370 380 390 400 410 240 250 260 270 280 290 sp|Q1X GSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSM .. .:: .: : .:..: sp|Q91 LTEELDNSTLVLAN--STEDLGRATLLDWVASEPLLSPGRVGLEIPGEMWLSWVPRWLRV 420 430 440 450 460 >>sp|P18848|ATF4_HUMAN Cyclic AMP-dependent transcriptio (351 aa) initn: 123 init1: 91 opt: 159 Z-score: 160.0 bits: 38.1 E(516081): 0.22 Smith-Waterman score: 159; 31.6% identity (64.3% similar) in 98 aa overlap (66-160:258-351) 40 50 60 70 80 90 sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKR---AKTEDEKEQRRIERVLR :: :: .. ::.. :: ....... . sp|P18 YLGSPQHSPSTRGSPNRSLPSPGVLCGSARPKPYDPPGEKMVAAKVKGEKLDKKLKKMEQ 230 240 250 260 270 280 100 110 120 130 140 150 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG :..:: :..:: :.: : .: ..:..:. : .: ... : : : .: ::: sp|P18 NKTAATRYRQKKRAEQEALTGECKELEKKNEALKERADSLAKEI----QYLKDLIEEVRK 290 300 310 320 330 340 160 170 180 190 200 210 sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV .:.. .: sp|P18 ARGKKRVP 350 >>sp|O88479|FOS_MESAU Proto-oncogene c-Fos OS=Mesocricet (381 aa) initn: 87 init1: 55 opt: 159 Z-score: 159.5 bits: 38.1 E(516081): 0.23 Smith-Waterman score: 159; 25.9% identity (49.0% similar) in 247 aa overlap (2-237:57-298) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL--TVS : .. :...... : :.: .:. sp|O88 LSYYHSPADSFSSMGSPVNAQDFCTDLSVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA 30 40 50 60 70 80 30 40 50 60 70 80 sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE :..: . : : . . : : :. . . . . . . .:.:.:::. sp|O88 PSQTRAPHPYGVPTPSTGAYSRAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA : ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|O88 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK . . .: .:: :: : : .: ::: : : ::: . . sp|O88 ACKIPD-DLGFPEEMFVASLDLTGGLPEATTPESEEAFSLPLLNDPEPKPSLEPVKSISN 210 220 230 240 250 260 210 220 230 240 250 260 sp|Q1X PSTLAESSDVAQHPAVSV-AGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLF :: : :: : .: : . ..: .:: :: sp|O88 VELKAEPFDDFLFPASSRPSGSETTARSVPDMDLSGSFYAADWEPLHSSSLGMGPMVTEL 270 280 290 300 310 320 270 280 290 300 310 320 sp|Q1X HGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTC sp|O88 EPLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLAL 330 340 350 360 370 380 >>sp|P01101|FOS_MOUSE Proto-oncogene c-Fos OS=Mus muscul (380 aa) initn: 94 init1: 62 opt: 158 Z-score: 158.6 bits: 37.9 E(516081): 0.26 Smith-Waterman score: 158; 25.2% identity (48.8% similar) in 246 aa overlap (2-237:57-297) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL--TVS : .. :...... : :.: .:. sp|P01 LSYYHSPADSFSSMGSPVNTQDFCADLSVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA 30 40 50 60 70 80 30 40 50 60 70 80 sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE :..: . . :: . . : : :. . . . . . . .:.:.:::. sp|P01 PSQTRAPHPYGLPTQSAGAYARAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA : ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|P01 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK . . .: ..:: :: : : .: ::: : : ::: . . sp|P01 ACKIPD-DLGFPEEMSVASLDLTGGLPEASTPESEEAFTLPLLNDPEPKPSLEPVKSISN 210 220 230 240 250 260 210 220 230 240 250 260 sp|Q1X PSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLFH :: : :: : . . ..: :: :: sp|P01 VELKAEPFDDFLFPASSRPSGSETSRSVPDVDLSGSFYAADWEPLHSNSLGMGPMVTELE 270 280 290 300 310 320 270 280 290 300 310 320 sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK sp|P01 PLCTPVVTCTPGCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLAL 330 340 350 360 370 380 >>sp|Q68CJ9|CR3L3_HUMAN Cyclic AMP-responsive element-bi (461 aa) initn: 140 init1: 140 opt: 163 Z-score: 162.1 bits: 38.9 E(516081): 0.16 Smith-Waterman score: 163; 26.4% identity (52.7% similar) in 201 aa overlap (48-236:218-404) 20 30 40 50 60 70 sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK .::: :. : :: :.:: : sp|Q68 SSGDLQQHHLGASYLLRPGAGHCQELVLTEDEKKLLAKE---GITLP---TQLPLTKY-- 190 200 210 220 230 80 90 100 110 120 130 sp|Q1X TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENN .:. ..:.: .::. .:: ::..:. .. ::.. ::: : ... ..: .: sp|Q68 --EERVLKKIRRKIRNKQSAQESRKKKKEYIDGLETRMSACTAQNQELQRKVLHLEKQNL 240 250 260 270 280 290 140 150 160 170 180 sp|Q1X RLSQQLAQLAAEVRGSRANTPMPGSPATAS---------PTLTPTLFKQERDELPLERIP : .:: .: : : : ... . :. ... :...: : .. : : . : sp|Q68 SLLEQLKKLQAIVVQSTSKSAQTGTCVAVLLLSFALIILPSISP--FGPNKTESPGDFAP 300 310 320 330 340 350 190 200 210 220 230 240 sp|Q1X ---FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTD : .: . . ... : . .: .... :. :: : : : sp|Q68 VRVFSRTLHNDAASRVAADAVPGSEAPGPRPEADTTREESPGS--PGADWGFQDTANLTN 360 370 380 390 400 410 250 260 270 280 290 300 sp|Q1X DVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTL sp|Q68 STEELDNATLVLRNATEGLGQVALLDWVAPGPSTGSGRAGLEAAGDEL 420 430 440 450 460 >>sp|Q8TEY5|CR3L4_HUMAN Cyclic AMP-responsive element-bi (395 aa) initn: 145 init1: 145 opt: 158 Z-score: 158.3 bits: 37.9 E(516081): 0.27 Smith-Waterman score: 158; 29.3% identity (56.0% similar) in 150 aa overlap (54-199:192-329) 30 40 50 60 70 80 sp|Q1X PVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEK .... ::: . .: ..:: : .:. sp|Q8T AHAHILPRAGTVAPVPCTTLLPCQTLFLTDEEKRLLGQEGVSLP-SHLPLTK----AEER 170 180 190 200 210 90 100 110 120 130 140 sp|Q1X EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ ....: .::. .:: ::.::. .. ::.. ::: : ......: .: : : sp|Q8T VLKKVRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSAQNQELQKKVQELERHNISLVAQ 220 230 240 250 260 270 150 160 170 180 190 sp|Q1X LAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF---PTPSLSDYSP : :: . . :.: .. : .: . ::. :: :: : . ::.: sp|Q8T LRQLQTLI----AQTS--NKAAQTSTCVLILLFSLALIILP-SFSPFQSRPEAGSEDYQP 280 290 300 310 320 200 210 220 230 240 250 sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRL sp|Q8T HGVTSRNILTHKDVTENLETQVVESRLREPPGAKDANGSTRTLLEKMGGKPRPSGRIRSV 330 340 350 360 370 380 >>sp|Q99090|CPRF2_PETCR Light-inducible protein CPRF2 OS (401 aa) initn: 115 init1: 115 opt: 158 Z-score: 158.2 bits: 37.9 E(516081): 0.27 Smith-Waterman score: 158; 28.6% identity (61.3% similar) in 119 aa overlap (80-198:195-312) 50 60 70 80 90 100 sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME : .. .:..:.: :: .:. ::.::. .: sp|Q99 QVKSTTSGSSRDHSDDDDELEGETETTRNGDPSDAKRVRRMLSNRESARRSRRRKQAHMT 170 180 190 200 210 220 110 120 130 140 150 160 sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPT .::.. :.. .:. ::.::... . : . . : :... ::.. : . sp|Q99 ELETQVSQLRVENSSLLKRLTDISQRYNDAAVDNRVLKADIETMRAKVKMAEETVKRVTG 230 240 250 260 270 280 170 180 190 200 210 220 sp|Q1X LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSA :.: .:.. .:. . . : :: : sp|Q99 LNP-MFQSMSSEISTIGMQSFSGSPSDTSADTTQDGSKQHFYQPAPTSHMPAQDQKIQNG 290 300 310 320 330 340 >>sp|Q5R9C9|ATF7_PONAB Cyclic AMP-dependent transcriptio (483 aa) initn: 108 init1: 108 opt: 159 Z-score: 158.1 bits: 38.2 E(516081): 0.28 Smith-Waterman score: 159; 26.1% identity (62.7% similar) in 153 aa overlap (26-168:277-424) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV--KPEEKKPA ..:. :.: ... ..: . .:. .:: sp|Q5R PSGHPIPSEAKMRLKATLTHQVSSINGGCGMVVGSASTMVTARPEQSQILIQHPDAPSPA 250 260 270 280 290 300 60 70 80 90 100 110 sp|Q1X KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN . . : .: :.:.:. :.: .... ..:: . . ::::::. :....: . .::. sp|Q5R QPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEK 310 320 330 340 350 360 120 130 140 150 160 sp|Q1X EKIQMEQQNQFLLQRLSQMEAENNRLSQQL--------AQLAAEVRGSRANTPMPGSPAT . .. .:: : .... .. : .:.: : . : ...: ..: .: : sp|Q5R KAEELTSQNIQLSNEVTLLRNEVAQLKQLLLAHKDCPVTALQKKTQG-YLESPKESSEPT 370 380 390 400 410 420 170 180 190 200 210 220 sp|Q1X ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG .:: sp|Q5R GSPAPVIQHSSATAPSNGLSVRSAAEAVATSVLTQMASQRTELSMPIQSHVIMTPQSQSA 430 440 450 460 470 480 >>sp|P17544|ATF7_HUMAN Cyclic AMP-dependent transcriptio (494 aa) initn: 108 init1: 108 opt: 159 Z-score: 158.0 bits: 38.2 E(516081): 0.28 Smith-Waterman score: 159; 26.1% identity (62.7% similar) in 153 aa overlap (26-168:288-435) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV--KPEEKKPA ..:. :.: ... ..: . .:. .:: sp|P17 PSGHPIPSEAKMRLKATLTHQVSSINGGCGMVVGTASTMVTARPEQSQILIQHPDAPSPA 260 270 280 290 300 310 60 70 80 90 100 110 sp|Q1X KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN . . : .: :.:.:. :.: .... ..:: . . ::::::. :....: . .::. sp|P17 QPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEK 320 330 340 350 360 370 120 130 140 150 160 sp|Q1X EKIQMEQQNQFLLQRLSQMEAENNRLSQQL--------AQLAAEVRGSRANTPMPGSPAT . .. .:: : .... .. : .:.: : . : ...: ..: .: : sp|P17 KAEELTSQNIQLSNEVTLLRNEVAQLKQLLLAHKDCPVTALQKKTQG-YLESPKESSEPT 380 390 400 410 420 430 170 180 190 200 210 220 sp|Q1X ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG .:: sp|P17 GSPAPVIQHSSATAPSNGLSVRSAAEAVATSVLTQMASQRTELSMPIQSHVIMTPQSQSA 440 450 460 470 480 490 >>sp|Q5UEM8|CR3L4_MACFA Cyclic AMP-responsive element-bi (395 aa) initn: 145 init1: 145 opt: 157 Z-score: 157.4 bits: 37.8 E(516081): 0.3 Smith-Waterman score: 157; 29.3% identity (56.0% similar) in 150 aa overlap (54-199:192-329) 30 40 50 60 70 80 sp|Q1X PVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEK .... ::: . .: ..:: : .:. sp|Q5U AHAHILPRAGTLAPVPCTTLLPCQTLFLTDEEKRLLGQEGVSLP-SHLPLTK----AEER 170 180 190 200 210 90 100 110 120 130 140 sp|Q1X EQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQ ....: .::. .:: ::.::. .. ::.. ::: : ......: .: : : sp|Q5U VLKKVRRKIRNKQSAQDSRRRKKEYIDGLESRVAACSAQNQELQKKVQELERHNISLVAQ 220 230 240 250 260 270 150 160 170 180 190 sp|Q1X LAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF---PTPSLSDYSP : :: . . :.: .. : .: . ::. :: :: : . ::.: sp|Q5U LRQLQTLI----AQTS--NKAAQTSTCVLILLFSLALIILP-SFSPFQGRPEAGPEDYQP 280 290 300 310 320 200 210 220 230 240 250 sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRL sp|Q5U HGVTSRNILTHKDITENLETQVVESRLREPPEAKDANDSTRTLLEKMGGKPRPSGRIGTV 330 340 350 360 370 380 >>sp|Q9Y5Q3|MAFB_HUMAN Transcription factor MafB OS=Homo (323 aa) initn: 119 init1: 119 opt: 154 Z-score: 155.8 bits: 37.2 E(516081): 0.37 Smith-Waterman score: 154; 28.6% identity (57.1% similar) in 154 aa overlap (14-163:174-319) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ : :.::...:. .:. . :: . sp|Q9Y AYPGAGVAHDELGPHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHATASATAAGG 150 160 170 180 190 200 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS . . :. : : : . . .: . :. :.:: .:.: :.:.::. ::. sp|Q9Y NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC 210 220 230 240 250 110 120 130 140 150 sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM : .. . ..::::: :. :: . : :..:.. : . . . .:: : . ... sp|Q9Y RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLANSGFREAGSTSDS 260 270 280 290 300 310 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS :.:: sp|Q9Y PSSPEFFL 320 >>sp|P01102|FOS_MSVFB p55-v-Fos-transforming protein OS= (381 aa) initn: 94 init1: 62 opt: 155 Z-score: 155.7 bits: 37.4 E(516081): 0.37 Smith-Waterman score: 155; 25.2% identity (48.8% similar) in 246 aa overlap (2-237:57-297) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL--TVS : .. :...... : :.: .:. sp|P01 LSYYHSPADSFSSMGSPVNTQDFCADLSVSSANFIPTVTATSTSPDLQWLVQPTLVSSVA 30 40 50 60 70 80 30 40 50 60 70 80 sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE :..: . . :: . . : : :. . . . . . . .:.:.:::. sp|P01 PSQTRAPHPYGLPTQSAGAYARAEMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA : ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|P01 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDKKSALQTEIANLLKEKEKLEFILAAHRP 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK . . .: ..:: :: : : .: ::: : : ::: . . sp|P01 ACKIPD-DLGFPEEMSVASLDLTGGLPEASTPESEEAFTLPLLNDPEPKPSLEPVKSISN 210 220 230 240 250 260 210 220 230 240 250 260 sp|Q1X PSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLFH :: : :: : . . ..: :: :: sp|P01 VELKAEPFDDFLFPASSRPSGSETSRSVPNVDLSGSFYAADWEPLHSNSLGMGPMVTELE 270 280 290 300 310 320 270 280 290 300 310 320 sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK sp|P01 PLCTPVVTCTPLLRLPELTHAAGPVSSQRRQGSRHPDVPLPELVHYREEKHVFPQRFPST 330 340 350 360 370 380 >>sp|P51145|FOSL2_RAT Fos-related antigen 2 OS=Rattus no (327 aa) initn: 95 init1: 64 opt: 154 Z-score: 155.7 bits: 37.2 E(516081): 0.38 Smith-Waterman score: 155; 23.1% identity (55.9% similar) in 229 aa overlap (12-216:38-261) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL---TVSPAD------ :: .:.. .. .:.. :.. : sp|P51 NFDTSSRGSSGSPAHAESYSSGGGGQQKFRVD-MPGSGSAFIPTINAITTTSQDLQWMVQ 10 20 30 40 50 60 40 50 60 70 80 sp|Q1X -TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPPRKRAK--TEDEKE : ..: . . .: :. . . :: : :.. :.: . . .:.: sp|P51 PTVITSMSNPYPRSHPYSPLPGLRSVPGHMALPRPGVIKTIGTTVGRRRRDEQLSPEEEE 70 80 90 100 110 120 90 100 110 120 130 140 sp|Q1X QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL .:::.: ::. :: :.:.: :::..: ..:.... : ....... :...: .: sp|P51 KRRIRRE-RNKLAAAKCRNRRRELTEKLQTETEELEEEKSGLQKEIAELQKEKEKLEFML 130 140 150 160 170 180 150 160 170 180 190 sp|Q1X AQLAAEVRGS---RANTPMPGSPAT--ASPTLTPTLFKQERDELPLERIPFPTPSLSDYS . . . : : ..: : . .. .. :.. ::: : : : . ... . sp|P51 VAHGPVCKISPEERRSSPTSGVQSLRGTGSAVGPVVVKQEP---PEEDSPSSSAGMDKTQ 190 200 210 220 230 240 200 210 220 230 240 250 sp|Q1X PT-LKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFN . .:: ..: .. ...: sp|P51 RSVIKPISIAGGGFYGEEPLHTPIVVTSTPAITPGTSNLVFTYPSVLEQESPASPSESCS 250 260 270 280 290 300 >>sp|Q9UQ88|CD11A_HUMAN Cell division protein kinase 11A (780 aa) initn: 75 init1: 75 opt: 159 Z-score: 155.3 bits: 38.4 E(516081): 0.4 Smith-Waterman score: 159; 28.9% identity (56.1% similar) in 173 aa overlap (42-208:92-255) 20 30 40 50 60 70 sp|Q1X VDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLP ... : ...: :....: .. : . . sp|Q9U IRNSPYRREDSMEDRGEEDDSLAIKPPQQMSRKEKVHHRKDEKRKEKW-KHARVKEREHE 70 80 90 100 110 120 80 90 100 110 120 sp|Q1X PRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRLEM--EKLENEKIQMEQQNQFLLQR ::: . :..: .:. :: : . : . :: :: :::. .: : :. . :::.. :. sp|Q9U RRKRHREEQDKARREWERQKRREMAREHSRRERDRLEQLERKRERERKMREQQKEQREQK 130 140 150 160 170 180 130 140 150 160 170 180 sp|Q1X LSQMEAENNRLSQQLA-QLAAEVRGSRAN--TPMPGSPATASPTLTPTLFKQERDELPLE . .::. : .. ...:. : : . . .: . :: : .:: :: sp|Q9U ERERRAEERRKEREARREVSAHHRTMREDYSDKVKASHWSRSPPRPP----RERFELGDG 190 200 210 220 230 190 200 210 220 230 240 sp|Q1X RIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTD : :. . .:. ::. : : sp|Q9U R----KPGEARPAPAQKPAQLKEEKMEERDLLSDLQDISDSERKTSSAESSSAESGSGSE 240 250 260 270 280 290 >>sp|Q9WVS8|MK07_MOUSE Mitogen-activated protein kinase (806 aa) initn: 106 init1: 69 opt: 173 Z-score: 168.2 bits: 40.8 E(516081): 0.075 Smith-Waterman score: 173; 27.0% identity (51.0% similar) in 259 aa overlap (3-236:429-680) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLP--ATPASEVPVLTVSP : :: : .:: . :: .. ::..: sp|Q9W IRFQPSLQPVASEPVCPDVEMPSPWAPSGDCAME---SPPPALPPCSDPAPDTVDLTLQP 400 410 420 430 440 450 40 50 60 70 80 sp|Q1X ADTSLNSADVKTQEVKPEEKKPA------KKRKSWGQELPVPKTNLP-PRKRAKTEDEKE : . . : : . . .. : : :. .: .. : . : ::: . ...... sp|Q9W APPASELAPPKREGAISDNTKAALKAALLKSLRSRLRDGPSAPLEAPEPRKPVTAQERQR 460 470 480 490 500 510 90 100 110 120 130 140 sp|Q1X QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNR-LSQQ .:. .: : : ::..: : :. : . . : : . ..:.: : .. sp|Q9W EREEKR--RRRQERAKEREKRRQERERKERGAGTLGGPSTDPLAGL--VLSDNDRSLLER 520 530 540 550 560 570 150 160 170 180 190 sp|Q1X LAQLAAEVRGSRANTPMPG-SPATASPTLTPTL-FKQERDEL-PLERIPFPT--PSLSDY ...: . : .: :. .:..:.:: ::: .: : : :: :. : sp|Q9W WTRMARPPAPAPAPAPAPAPAPSSAQPTSTPTGPVSQSTGPLQPAGSIPGPASQPVCPPP 580 590 600 610 620 630 200 210 220 230 240 sp|Q1X SPTLKPS--------TLAESSDVAQHPAVSVAGLEGDGS--ALPLFDLGSDLKHHSTDDV .:. .:. : .: .:.. : .:: :.:. .:: : : sp|Q9W GPVPQPAGPIPAPLQTAPSTSLLASQSLVPPSGLPGSGAPEVLPYFPSGPPPPDPGLTPQ 640 650 660 670 680 690 250 260 270 280 290 300 sp|Q1X AAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG sp|Q9W PSTSESPDVNLVTQQLSKSQVEDPLPPVFSGTPKGSGAGYGVGFDLEEFLNQSFDMGVAD 700 710 720 730 740 750 >>sp|Q502F0|CR3LA_DANRE Cyclic AMP-responsive element-bi (428 aa) initn: 130 init1: 130 opt: 155 Z-score: 155.1 bits: 37.4 E(516081): 0.41 Smith-Waterman score: 155; 26.8% identity (54.0% similar) in 198 aa overlap (8-199:138-322) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSP---ADTS :. . .. : ::. : :::. . : sp|Q50 VSQTQHSLNINFPFDFNGWETGFLPDQAGGTQCASETPQAQPATGFP-LTVKDLLLSGTP 110 120 130 140 150 160 40 50 60 70 80 90 sp|Q1X LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR ..: :. : . .:: . . .:. ..: : .:. ..:.: .::. sp|Q50 ETAAKVSQQSYQELILTEDEKRLLAKEGMTLPN-QFPLTKY----EERILKKIRRKIRNK 170 180 190 200 210 220 100 110 120 130 140 150 sp|Q1X AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR .:: ::..:. .. ::.. .:. : ... :.: : : .:: .: : : .. sp|Q50 QSAQESRKKKKEYIDGLESRMAACSAHNHELQRKVFQLEKCNISLMEQLRRLQALVMNG- 230 240 250 260 270 280 160 170 180 190 200 210 sp|Q1X ANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS---DYSPTLKPSTLAESSD .: :. .. . :. ::. :: . :: ..: :.:: sp|Q50 SNKPVQAGTCVLVLLLSFTLIL-----LPNLK-PFTDTKVSQHGDFSPMRVQSRSLHNLQ 290 300 310 320 330 220 230 240 250 260 270 sp|Q1X VAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSS sp|Q50 SSRVLRNLDHPYSMTENAKILPRFPEDKTMEEIASLLGRLHRRPQFTEYDPESHNHSFDQ 340 350 360 370 380 390 >>sp|P15408|FOSL2_HUMAN Fos-related antigen 2 OS=Homo sa (326 aa) initn: 94 init1: 63 opt: 153 Z-score: 154.8 bits: 37.0 E(516081): 0.42 Smith-Waterman score: 153; 24.9% identity (54.1% similar) in 233 aa overlap (4-222:39-253) 10 20 30 sp|Q1X MSCDMEKTMSS-VDSLPATPASEVPVLTVSPAD :: . :. . .. : .:. :.: sp|P15 FDTSSRGSSGSPAHAESYSSGGGGQQKFRVDMPGSGSAFIPTINAITTSQDLQWMVQP-- 10 20 30 40 50 60 40 50 60 70 80 sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPPRKRAK--TEDEKEQ : ..: . . .: :. . :: : :.. :.: . . .:.:. sp|P15 TVITSMSNPYPRSHPYSPLPGLASVPGHMALPRPGVIKTIGTTVGRRRRDEQLSPEEEEK 70 80 90 100 110 120 90 100 110 120 130 140 sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA :::.: ::. :: :.:.: :::. : ..:.... : ....... :...: .:. sp|P15 RRIRRE-RNKLAAAKCRNRRRELTEKLQAETEELEEEKSGLQKEIAELQKEKEKLEFMLV 130 140 150 160 170 180 150 160 170 180 190 sp|Q1X QLAAEVRGS---RANTPMPG-SPA-TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSP . . : : . : :: .: ... .. .. ::: ::: . :: sp|P15 AHGPVCKISPEERRSPPAPGLQPMRSGGGSVGAVVVKQE----PLE----------EDSP 190 200 210 220 230 200 210 220 230 240 250 sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRL . . . : ... . .: .:.:: sp|P15 SSSSAGLDKAQRSVIKP-ISIAGGFYGEEPLHTPIVVTSTPAVTPGTSNLVFTYPSVLEQ 240 250 260 270 280 290 >>sp|Q8R0S1|ATF7_MOUSE Cyclic AMP-dependent transcriptio (413 aa) initn: 108 init1: 108 opt: 154 Z-score: 154.3 bits: 37.3 E(516081): 0.45 Smith-Waterman score: 154; 27.5% identity (67.5% similar) in 120 aa overlap (26-143:277-392) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV--KPEEKKPA ..:. :.: ... ..: . .:. .:: sp|Q8R PSGHPMPSEAKMRLKATLTHQVSSINGGCGMVVGTASTMVTARPEQNQILIQHPDAPSPA 250 260 270 280 290 300 60 70 80 90 100 110 sp|Q1X KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLEN . . : .: :.:.:. :.: .... ..:: . . ::::::. :....: . .::. sp|Q8R QPQVSPAQ--PTPSTG--GRRRRTVDEDPDERRQRFLERNRAAASRCRQKRKLWVSSLEK 310 320 330 340 350 360 120 130 140 150 160 170 sp|Q1X EKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPT . .. .:: : .... .. : .:.: : sp|Q8R KAEELTSQNIQLSNEVTLLRNEVAQLKQLLLAHKDCPVTALQKKTQGYLGK 370 380 390 400 410 >>sp|P29747|CREBA_DROME Cyclic AMP response element-bind (516 aa) initn: 190 init1: 128 opt: 155 Z-score: 154.0 bits: 37.5 E(516081): 0.47 Smith-Waterman score: 155; 30.4% identity (55.4% similar) in 148 aa overlap (8-150:370-508) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVS--PADTSL : :: : :. .: ..:.. : : : sp|P29 LSPNATVSISVANPAGGESSVRVSRTAASITRSSSGSASASGSSTSSTVTTTRQPIHTPL 340 350 360 370 380 390 40 50 60 70 80 90 sp|Q1X NSADVKTQE---VKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR :.. : . . ::.: : .. :.:. .:: : .:: ..:.: .. sp|P29 ISSQPKGSTGTLLLTEEEK----RTLLAEGYPIPQ-KLPLTK----AEEKSLKKIRRKIK 400 410 420 430 440 450 100 110 120 130 140 150 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG :. .:: ::..:. :..:: . . .:. .:: .: : : .:: .: : : sp|P29 NKISAQESRRKKKEYMDQLERRVEILVTENHDYKKRLEGLEETNANLLSQLHKLQALVSK 460 470 480 490 500 510 160 170 180 190 200 210 sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV sp|P29 HNVKKS >>sp|Q2PFS4|MAFB_MACFA Transcription factor MafB OS=Maca (323 aa) initn: 146 init1: 117 opt: 152 Z-score: 153.9 bits: 36.8 E(516081): 0.47 Smith-Waterman score: 152; 28.6% identity (57.1% similar) in 154 aa overlap (14-163:174-319) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ : :.::...:. .:. . :: . sp|Q2P AYPGAGVAHDELGPHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHATASATAAGG 150 160 170 180 190 200 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS . . :. : : : . . .: . :. :.:: .:.: :.:.::. ::. sp|Q2P NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC 210 220 230 240 250 110 120 130 140 150 sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM : .. . ..::::: :. :: . : :..:.. : . . . .:: : . ... sp|Q2P RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAHKVKCEKLANSGFREAGSTSDS 260 270 280 290 300 310 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS :.:: sp|Q2P PSSPEFFL 320 >>sp|Q9R1S4|XBP1_RAT X-box-binding protein 1 OS=Rattus n (267 aa) initn: 156 init1: 109 opt: 152 Z-score: 155.0 bits: 36.8 E(516081): 0.41 Smith-Waterman score: 152; 27.6% identity (56.4% similar) in 163 aa overlap (51-190:23-183) 30 40 50 60 70 sp|Q1X SEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPP-R .::. .. .: :. .. : : sp|Q9R MVVVAAAPSAASAAPKVLLLSGQPASGGRALPLMVPGPRAAGSEASGTPQAR 10 20 30 40 50 80 90 100 110 120 sp|Q1X KRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQ-------FL :: . :. :.. ..: :.::.::::.:.::. .: .::.. ...:..:: .: sp|Q9R KRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENQKLQLENQLL 60 70 80 90 100 110 130 140 150 160 170 sp|Q1X LQRLSQMEAENNRLSQQLAQLA--------AEVRGSRANTPMPGSPATASPTLTPTLFKQ .. . ::..: .:.. : :: .:. . . :: .:. : : .: sp|Q9R REKTHGLVIENQELRTRLGMNALVTEEVSEAESKGNGVRL-VAGSAESAALRLRAPL-QQ 120 130 140 150 160 170 180 190 200 210 220 230 sp|Q1X ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS . .: . :: sp|Q9R VQAQLSPPQNIFPWILTLLPLQILSLISFWAFWTSWTLSCFSNVLPQSLLIWRNSQRSTQ 180 190 200 210 220 230 >>sp|P54842|MAFB_RAT Transcription factor MafB OS=Rattus (323 aa) initn: 119 init1: 119 opt: 151 Z-score: 153.0 bits: 36.6 E(516081): 0.53 Smith-Waterman score: 151; 27.9% identity (57.8% similar) in 154 aa overlap (14-163:174-319) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ : :.::...:. .:. . .: . . sp|P54 GYPGAGVTHDELGPHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHAAAAATAAGS 150 160 170 180 190 200 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS . . :. : : : . . .: . :. :.:: .:.: :.:.::. ::. sp|P54 NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC 210 220 230 240 250 110 120 130 140 150 sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM : .. . ..::::: :. :: . : :..:.. : . . . .:: : . ... sp|P54 RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLANSGFREAGSTSDS 260 270 280 290 300 310 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS :.:: sp|P54 PSSPEFFL 320 >>sp|P47930|FOSL2_MOUSE Fos-related antigen 2 OS=Mus mus (326 aa) initn: 94 init1: 63 opt: 151 Z-score: 152.9 bits: 36.7 E(516081): 0.54 Smith-Waterman score: 151; 24.0% identity (56.3% similar) in 229 aa overlap (4-216:39-260) 10 20 30 sp|Q1X MSCDMEKTMSS-VDSLPATPASEVPVLTVSPAD :: . :. . .. : .:. :.: sp|P47 FDTSSRGSSGSPAHAESYSSGGGGQQKFRVDMPGSGSAFIPTINAITTSQDLQWMVQP-- 10 20 30 40 50 60 40 50 60 70 80 sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPPRKRAK--TEDEKEQ : ..: . . .: :. . :: : :.. :.: . . .:.:. sp|P47 TVITSMSNPYPRSHPYSPLPGLASVPGHMALPRPGVIKTIGTTVGRRRRDEQLSPEEEEK 70 80 90 100 110 120 90 100 110 120 130 140 sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLS-QQL :::.: ::. :: :.:.: :::. : ..:.... : ....... :...: ... sp|P47 RRIRRE-RNKLAAAKCRNRRRELTEKLQAETEELEEEKSGLQKEIAELQKEKEKLEFMKV 130 140 150 160 170 180 150 160 170 180 190 sp|Q1X A-----QLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYS : ... : : : .. . . .:.: .. :.. ::: : : : . ... . sp|P47 AHGPVCKISPEERRSPPTSGLQSLRGTGS-AVGPVVVKQEP---PEEDSPSSSAGMDKTQ 190 200 210 220 230 240 200 210 220 230 240 250 sp|Q1X PT-LKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFN . .:: ..: .. ...: sp|P47 RSVIKPISIAGGGFYGEEPLHTPIVVTSTPAITPGTSNLVFTYPNVLEQESPSSPSESCS 250 260 270 280 290 300 >>sp|Q2VZV0|IF2_MAGSA Translation initiation factor IF-2 (872 aa) initn: 186 init1: 84 opt: 157 Z-score: 152.8 bits: 38.0 E(516081): 0.55 Smith-Waterman score: 157; 33.6% identity (62.6% similar) in 107 aa overlap (16-119:188-291) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEV :..::. :: ...:: . ..:.: sp|Q2V QSEPEAAAPAAEPVAPTAPVAAAPAPAPATPVAPAQPKPVAAAAPAGDATAVPRARTEEE 160 170 180 190 200 210 50 60 70 80 90 100 sp|Q1X KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK---TEDEKEQRRIERVLRNRAAAQTSRE . ::.. :::: . . :: .:. : :. .: :. .. : :: :. ::.. .:: sp|Q2V EEEEER-AKKRAAAHKPAPVKRTE-PRRRTGKLTITDALTDDDRSERG-RSLAAVKRARE 220 230 240 250 260 270 110 120 130 140 150 160 sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS :.::. . .::. : sp|Q2V RERLKHMQKGSEKVIREVIVPESITVQELANRMAVRGADVIKCLMRLGVMATINQNIDAD 280 290 300 310 320 330 >>sp|Q0CEI3|KAPC_ASPTN Putative transcription factor kap (286 aa) initn: 70 init1: 70 opt: 150 Z-score: 152.7 bits: 36.4 E(516081): 0.55 Smith-Waterman score: 150; 23.4% identity (53.7% similar) in 214 aa overlap (14-223:37-240) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ : : : ..: ...: . :.:. . : sp|Q0C PAPHPSMQTSAQDHADQVLHDQLLAAHQHLSHPQQPRPQAP--ATQPPHMQPNTASPRDQ 10 20 30 40 50 60 50 60 70 80 90 100 sp|Q1X E-VKPEEKKPAKKRKSWGQELPVPKTNLP-PRKRAKTEDEKEQRRIERVLRNRAAAQTSR . . : . : : .: : :.. :: .. .:. .:::: .. : sp|Q0C NNIDPAISGSAI----LGAPPQTPPQPEPAPQESPKTYGKRPLSTSKRAAQNRAAQRAFR 70 80 90 100 110 120 110 120 130 140 150 160 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MP .::. ..:::. :...: . . .. . ..::: .: . . .: ... :....: .: sp|Q0C QRKESYIRKLEE---QVKHQ-EAITEEYKALHAENYQLREYIINLQTRLLDSQGEVPELP 130 140 150 160 170 170 180 190 200 210 sp|Q1X GSPATASPTLTPTLFKQERDELPLERI-PFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS :. .: :: : .. : :. . : . . .. ..:. . .. sp|Q0C GNIDLNQPRADLTLSAPELQRGNAASAGPAPAGPGPQQSQPNQNQGVGPNDDMNSLNRIA 180 190 200 210 220 230 220 230 240 250 260 270 sp|Q1X VAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF :::: sp|Q0C VAGLGMRKHPNEDANYLGNNFQARRPRTDDNQTGATETTKQEPDGLPVVS 240 250 260 270 280 >>sp|Q61817|CREB3_MOUSE Cyclic AMP-responsive element-bi (404 aa) initn: 145 init1: 145 opt: 181 Z-score: 179.7 bits: 41.9 E(516081): 0.017 Smith-Waterman score: 181; 26.7% identity (56.0% similar) in 225 aa overlap (1-207:107-318) 10 20 sp|Q1X MSCDMEKTMSSV--DSLP--ATPASEVPVL .:: .. .... ...: : . : . sp|Q61 LGSSSSSILHDHNYSLPQEHVSIDLGECEMISCRGRRELTGLAGSTFPFADTESFEKEGF 80 90 100 110 120 130 30 40 50 60 70 80 sp|Q1X TVSPADTSLNSADVKTQEV--KPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQ :.: .:. . ... :::: .:. : :: ..:: : .:. sp|Q61 HVTPLPGEERAAEQEMSRLILTEEEKKLLEKE---GLTLP---STLPLTKV----EEQVL 140 150 160 170 180 90 100 110 120 130 140 sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA .:..: .::. ::: ::..:.. . ::.. ... ::. : ......: .: : .:: sp|Q61 KRVRRKIRNKRAAQESRKKKKVYVVGLESRVLKYTAQNRELQNKVQRLEEQNLSLLDQLR 190 200 210 220 230 240 150 160 170 180 190 sp|Q1X QLAAEVRGSRANTPMPGSPA------TASPTLTPTLFKQE-RDELPLERIPF-----PTP .: : : :: :: . :.:...... : .: : . . : sp|Q61 KLQAMVI-EIANKTSSGSTCVLVLVFSFCLLLVPAMYSSDARGSVPAEYVVLHRKLRALP 250 260 270 280 290 300 200 210 220 230 240 250 sp|Q1X SLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLS : .:..: :::.:. sp|Q61 SEDDHQP--KPSALSSELPMDSTHQSLDSSEHMFLVSSNFSCVLYHAPQAEQPLHWPLWD 310 320 330 340 350 360 >>sp|Q9ES19|ATF4_RAT Cyclic AMP-dependent transcription (347 aa) initn: 123 init1: 91 opt: 151 Z-score: 152.5 bits: 36.7 E(516081): 0.56 Smith-Waterman score: 151; 30.9% identity (62.9% similar) in 97 aa overlap (66-160:255-347) 40 50 60 70 80 90 sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP--RKRAKTEDEKEQRRIERVLRN :: :: ::.. :: ....... .: sp|Q9E SYLGSPQHSPSTSRAPPDSLPSPGVPRGSRPKPYDPPGVSVTAKVKTEKLDKKLKKMEQN 230 240 250 260 270 280 100 110 120 130 140 150 sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS ..:: :..:: :.: : .: ..:..:. : .. ... : : : .: ::: . sp|Q9E KTAATRYRQKKRAEQEALTGECKELEKKNEALKEKADSLAKEI----QYLKDLIEEVRKA 290 300 310 320 330 340 160 170 180 190 200 210 sp|Q1X RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA :.. .: sp|Q9E RGKKRVP >>sp|P54841|MAFB_MOUSE Transcription factor MafB OS=Mus (323 aa) initn: 119 init1: 119 opt: 150 Z-score: 152.0 bits: 36.5 E(516081): 0.6 Smith-Waterman score: 150; 27.9% identity (57.1% similar) in 154 aa overlap (14-163:174-319) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ : :.::...:. .:. . .: . sp|P54 GYPGAGVTHDDLGQHAHPHHHHHHQASPPPSSAASPAQQLPTSHPGPGPHATAAATAAGG 150 160 170 180 190 200 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTS . . :. : : : . . .: . :. :.:: .:.: :.:.::. ::. sp|P54 NGSVED------RFSDDQLVSMSVRELNRHLRGFTKDEVIRLKQKR--RTLKNRGYAQSC 210 220 230 240 250 110 120 130 140 150 sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPM : .. . ..::::: :. :: . : :..:.. : . . . .:: : . ... sp|P54 RYKRVQQKHHLENEKTQLIQQVEQLKQEVSRLARERDAYKVKCEKLANSGFREAGSTSDS 260 270 280 290 300 310 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS :.:: sp|P54 PSSPEFFL 320 >>sp|O77628|FOS_BOVIN Proto-oncogene c-Fos OS=Bos taurus (380 aa) initn: 94 init1: 62 opt: 151 Z-score: 152.0 bits: 36.7 E(516081): 0.6 Smith-Waterman score: 151; 24.0% identity (50.0% similar) in 246 aa overlap (2-237:57-297) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL--TVS : .. :...... : :.: .:. sp|O77 LSYYHSPADSFSSMGSPVNAQDYCTDLAVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA 30 40 50 60 70 80 30 40 50 60 70 80 sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE :..: . : : . . . : . :. . . . . . . .:.:.:::. sp|O77 PSQTRAPHPYGVPTPSAGAYSRAGVMKTMTGGRAQSIGRRG---KVEQLSPEEEEKRRIR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA : ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|O77 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK . . .: ..:: :. : : .: ::: : : ::. . . . sp|O77 ACKIPD-DLGFPEEMSVASLDLSGGLPEAATPESEEAFTLPLLNDPEPKPSVEPVKSVGS 210 220 230 240 250 260 210 220 230 240 250 260 sp|Q1X PSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRLFH :: : . :: : . . ..: .:: :: sp|O77 MELKAEPFDDYMFPASSRPSGSETARSVPDMDLSGSFYAADWEPLHGGSLGMGPMATELE 270 280 290 300 310 320 270 280 290 300 310 320 sp|Q1X GDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCK sp|O77 PLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLAL 330 340 350 360 370 380 >>sp|A1C9M5|KAPC_ASPCL Putative transcription factor kap (288 aa) initn: 114 init1: 80 opt: 149 Z-score: 151.7 bits: 36.3 E(516081): 0.62 Smith-Waterman score: 149; 20.8% identity (56.0% similar) in 159 aa overlap (66-223:83-237) 40 50 60 70 80 90 sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRA :. .: .. :: .. .:. .::: sp|A1C HMQPTTPVARDQNNIDPAISGGAMLAGPQTPQPDLSGQESPKTYGKRPLSTSKRAAQNRA 60 70 80 90 100 110 100 110 120 130 140 150 sp|Q1X AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA : .. :.::. ... ::. :.. . . . .. ..::: .: . . .: ... ... sp|A1C AQRAFRQRKEAHIRDLEG-KVKAYET---MGEAIKALQAENYQLREYIINLQSRLLDTQG 120 130 140 150 160 160 170 180 190 200 210 sp|Q1X NTP-MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQ ..: .::. ..: . . .: : :. . . .. : ..:. . sp|A1C EVPELPGNIDLSQPRGDIPVPAPPTSGTSTSAVPVPPPTAPQQPQPAQNQASAPNDDMNS 170 180 190 200 210 220 220 230 240 250 260 270 sp|Q1X HPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE ..:::: sp|A1C LNRIAVAGLGMRKPPTEEANYLGNSFQQQARRVRPDDGQPDASELTLPKQEPTHGLPLIS 230 240 250 260 270 280 >>sp|Q504L8|MAFB_XENTR Transcription factor MafB OS=Xeno (316 aa) initn: 139 init1: 109 opt: 149 Z-score: 151.2 bits: 36.3 E(516081): 0.67 Smith-Waterman score: 149; 26.6% identity (62.6% similar) in 139 aa overlap (29-163:176-312) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS ::. .: .: ...... . .... .. : : sp|Q50 QYQGLPHEEMGLPHQHPHHHHHHHHHQPSPSPSGSSSSSQQLQNSHQQHQNSSAVEDRFS 150 160 170 180 190 200 60 70 80 90 100 110 sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK : . . .: . :. :.:. .:.: :.:.::. ::. : .. . ..::::: sp|Q50 DDQLVSMSVRELNRHLRGFTKDDVIRLKQKR--RTLKNRGYAQSCRFKRVQQKHHLENEK 210 220 230 240 250 260 120 130 140 150 160 170 sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV-RGSRANTPMPGSPATASPTLTPTL :. :: . : ..:.. : . . . .:: . : . ... :.:: sp|Q50 TQLIQQVEQLKLEVSRLARERDAYKIKCEKLANTTFREAGSTSDNPSSPEFFM 270 280 290 300 310 180 190 200 210 220 230 sp|Q1X FKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD >>sp|O57342|MAFA_COTJA Transcription factor MafA OS=Cotu (286 aa) initn: 125 init1: 125 opt: 148 Z-score: 150.9 bits: 36.1 E(516081): 0.7 Smith-Waterman score: 148; 34.1% identity (67.1% similar) in 85 aa overlap (83-167:201-281) 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE .:.: :.:.::. ::. : .. . . :: sp|O57 RFSDDQLVSMSVRELNRQLRGFSKEEVIRLKQKR--RTLKNRGYAQSCRYKRVQQRHILE 180 190 200 210 220 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP ::: :...: . : :..:.. : . ... .::: :: .: :..: :.. sp|O57 NEKCQLQSQVEQLKQEVSRLAKERDLYKEKYEKLAA--RGFPRETSPPAAPKTTAADFFM 230 240 250 260 270 280 180 190 200 210 220 230 sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL >>sp|Q3ZCH6|ATF4_BOVIN Cyclic AMP-dependent transcriptio (348 aa) initn: 123 init1: 91 opt: 149 Z-score: 150.6 bits: 36.3 E(516081): 0.72 Smith-Waterman score: 149; 27.7% identity (61.0% similar) in 141 aa overlap (19-154:210-342) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE :... . .:: :.::.: . . . . sp|Q3Z LCSEVVIPEGDSKPDSTTTGFPQCIKEEDAPSDNDSGICMSP-DSSLGSPQDSPSTSRG- 180 190 200 210 220 230 50 60 70 80 90 100 sp|Q1X EKKPAKKRKSWG--QELPVPKTNLPPRKR---AKTEDEKEQRRIERVLRNRAAAQTSRER .: :. : : . :: :: .. ::.. :: ....... .:..:: :.. sp|Q3Z --SPNKSLLSPGALSGSSRPKPYDPPGEKMVAAKVKGEKLDKKLKKMEQNKTAATRYRQK 240 250 260 270 280 290 110 120 130 140 150 160 sp|Q1X KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSP :: :.: : .: ..:..:. : .. ... : . :..:. ::: .: sp|Q3Z KRAEQEALTGECKELEKKNEALKEKADSLAKEIQYLKDQIE----EVRKAREKKRVL 300 310 320 330 340 170 180 190 200 210 220 sp|Q1X ATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL >>sp|Q5UEM7|CR3L4_RAT Cyclic AMP-responsive element-bind (367 aa) initn: 143 init1: 143 opt: 149 Z-score: 150.3 bits: 36.3 E(516081): 0.75 Smith-Waterman score: 149; 33.3% identity (63.2% similar) in 87 aa overlap (60-146:170-252) 30 40 50 60 70 80 sp|Q1X PADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER ::: . ..:: : .:. ..:.: sp|Q5U PRVSTIAPPPPAALLSCQRLFLTDEEKHLLGQEGVTLPSHLPLTK----AEERILKKIRR 140 150 160 170 180 190 90 100 110 120 130 140 sp|Q1X VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE .::. .:: ::.::. .. ::.. .::: : ......: .: : :. :: sp|Q5U KIRNKQSAQDSRRRKKEYIDGLESRVAACSEQNQKLQRKVQELERQNISLVAQVHQLQKF 200 210 220 230 240 250 150 160 170 180 190 200 sp|Q1X VRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAES sp|Q5U TAQTSSRAAQTSTCVLILLFSLALIILPSFSPFQSQPEARSEGYQLHGVISRNILTHEDM 260 270 280 290 300 310 >>sp|P12841|FOS_RAT Proto-oncogene c-Fos OS=Rattus norve (380 aa) initn: 93 init1: 61 opt: 150 Z-score: 151.1 bits: 36.5 E(516081): 0.68 Smith-Waterman score: 150; 27.6% identity (50.4% similar) in 250 aa overlap (8-237:54-297) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPA-SEVPVLT--VSPADTS ..::.. .:.. : : : : :.: . sp|P12 GDSLSYYHSPADSFSSMGSPVNTQDFCADLSVSSANFIPTVTAISTSPDLQWLVQP---T 30 40 50 60 70 80 40 50 60 70 80 sp|Q1X LNSADVKTQEVKPEEKK-PAKKRKSWGQELPVPKTNLPPR-----KRAKTE----DEKEQ : :. . .: :. :. . .... : :: : .:.:.: .:.:. sp|P12 LVSSVAPSQTRAPHPYGLPTPSTGAYARA-GVVKTMSGGRAQSIGRRGKVEQLSPEEEEK 90 100 110 120 130 90 100 110 120 130 140 sp|Q1X RRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA :::.: ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|P12 RRIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILA 140 150 160 170 180 190 150 160 170 180 190 sp|Q1X QLAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYS . . .: ...: :: : : .: ::: : : ::: . sp|P12 AHRPACKIPN-DLGFPEEMSVTSLDLTGGLPEATTPESEEAFTLPLLNDPEPKPSLEPVK 200 210 220 230 240 250 200 210 220 230 240 250 sp|Q1X PTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFN . :: : :: : . . ..: :: :: sp|P12 NISNMELKAEPFDDFLFPASSRPSGSETARSVPDVDLSGSFYAADWEPLHSSSLGMGPMV 260 270 280 290 300 310 260 270 280 290 300 310 sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE sp|P12 TELEPLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTL 320 330 340 350 360 370 >>sp|Q16520|BATF_HUMAN Basic leucine zipper transcriptio (125 aa) initn: 127 init1: 127 opt: 143 Z-score: 151.0 bits: 34.9 E(516081): 0.69 Smith-Waterman score: 143; 28.6% identity (56.2% similar) in 112 aa overlap (71-172:17-125) 50 60 70 80 90 100 sp|Q1X KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS :: :. ...: ::..: .:: ::: : sp|Q16 MPHSSDSSDSSFSRSPPPGKQDSSDDV---RRVQRREKNRIAAQKS 10 20 30 40 110 120 130 140 150 160 sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP :.:. . . :. :. ..:.:: : ....:. : . ... : . :.:: : sp|Q16 RQRQTQKADTLHLESEDLEKQNAALRKEIKQLTEELKYFTSVLNSHEPLCSVLAASTPSP 50 60 70 80 90 100 170 180 190 200 210 sp|Q1X G----------SPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS .: ..:: . : sp|Q16 PEVVYSAHAFHQPHVSSPRFQP 110 120 >>sp|O35426|XBP1_MOUSE X-box-binding protein 1 OS=Mus mu (267 aa) initn: 149 init1: 103 opt: 149 Z-score: 152.2 bits: 36.2 E(516081): 0.59 Smith-Waterman score: 149; 27.0% identity (57.7% similar) in 163 aa overlap (51-190:23-183) 30 40 50 60 70 sp|Q1X SEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK------TNLPP-R .::. .. .: :. .. : : sp|O35 MVVVAAAPSAATAAPKVLLLSGQPASGGRALPLMVPGPRAAGSEASGTPQAR 10 20 30 40 50 80 90 100 110 120 sp|Q1X KRAK-TEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQN-------QFL :: . :. :.. ..: :.::.::::.:.::. .: .::.. ...:..: :.: sp|O35 KRQRLTHLSPEEKALRRKLKNRVAAQTARDRKKARMSELEQQVVDLEEENHKLQLENQLL 60 70 80 90 100 110 130 140 150 160 170 sp|Q1X LQRLSQMEAENNRLSQQLAQLA--------AEVRGSRANTPMPGSPATASPTLTPTLFKQ .. . .::..: .:.. . .:..:: . . :: .:. : : .: sp|O35 REKTHGLVVENQELRTRLGMDTLDPDEVPEVEAKGSGVRL-VAGSAESAALRLCAPL-QQ 120 130 140 150 160 170 180 190 200 210 220 230 sp|Q1X ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS . .: . :: sp|O35 VQAQLSPPQNIFPWTLTLLPLQILSLISFWAFWTSWTLSCFSNVLPQSLLVWRNSQRSTQ 180 190 200 210 220 230 >>sp|P01100|FOS_HUMAN Proto-oncogene c-Fos OS=Homo sapie (380 aa) initn: 86 init1: 54 opt: 156 Z-score: 156.7 bits: 37.6 E(516081): 0.33 Smith-Waterman score: 156; 28.2% identity (51.6% similar) in 248 aa overlap (9-237:55-297) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPA-SEVPVLT--VSPADTSL .::.. .:.. : : : : :.:: .: sp|P01 DSLSYYHSPADSFSSMGSPVNAQDFCTDLAVSSANFIPTVTAISTSPDLQWLVQPALVS- 30 40 50 60 70 80 40 50 60 70 80 sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR-----KRAKTE----DEKEQRR . : .:. .: :: . .... : :: : .:.:.: .:.:.:: sp|P01 SVAPSQTRAPHPF-GVPAPSAGAYSRA-GVVKTMTGGRAQSIGRRGKVEQLSPEEEEKRR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X IERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQL :.: ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|P01 IRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAH 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X AAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPT . . .: ..:: :: : . : .: ::: : : ::. . sp|P01 RPACKIPD-DLGFPEEMSVASLDLTGGLPEVATPESEEAFTLPLLNDPEPKPSVEPVKSI 210 220 230 240 250 210 220 230 240 250 sp|Q1X LKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNRL . .: : :: : . . ..: .:: :: sp|P01 SSMELKTEPFDDFLFPASSRPSGSETARSVPDMDLSGSFYAADWEPLHSGSLGMGPMATE 260 270 280 290 300 310 260 270 280 290 300 310 sp|Q1X FHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETT sp|P01 LEPLCTPVVTCTPSCTAYTSSFVFTYPEADSFPSCAAAHRKGSSSNEPSSDSLSSPTLLA 320 330 340 350 360 370 >>sp|Q8K1L0|CREB5_MOUSE Cyclic AMP-responsive element-bi (357 aa) initn: 113 init1: 113 opt: 147 Z-score: 148.6 bits: 36.0 E(516081): 0.93 Smith-Waterman score: 147; 27.6% identity (59.3% similar) in 123 aa overlap (52-168:194-315) 30 40 50 60 70 80 sp|Q1X EVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDE :: .. . : . :. . :.:. :: sp|Q8K HSHSHLHAHPAHHQTSPHPPLHTGNQAQVSPATQQMQPTQTIQPPQPTGGRRRRVVDEDP 170 180 190 200 210 220 90 100 110 120 130 140 sp|Q1X KEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQ :.:: . . :::::: :..... . .::.. .. : :. : ...:... : .:.: sp|Q8K DERRR-KFLERNRAAATRCRQKRKVWVMSLEKKAEELTQTNMQLQNEVSMLKNEVAQLKQ 230 240 250 260 270 280 150 160 170 180 190 sp|Q1X QL-----AQLAAEVRGSRAN-TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS : ..: . :.. .: . ::. : sp|Q8K LLLTHKDCPITAMQKESQGYLSPESSPPASPVPACSQQQVIQHNTITTSSSVSEVVGSST 290 300 310 320 330 340 200 210 220 230 240 250 sp|Q1X DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDD sp|Q8K LSQLTTHRTDLNPIL 350 >>sp|A4R2R1|NST1_MAGGR Stress response protein NST1 OS=M (1319 aa) initn: 158 init1: 64 opt: 171 Z-score: 163.5 bits: 40.6 E(516081): 0.14 Smith-Waterman score: 171; 22.7% identity (56.7% similar) in 194 aa overlap (43-227:675-868) 20 30 40 50 60 70 sp|Q1X DSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP :. : ::.: :. . ..: . . sp|A4R AQAEEKARKDAEKAAEEAERLAEEQRRQEEQRQKNEERKKKKEAQRKAEEEERQRKEAER 650 660 670 680 690 700 80 90 100 110 120 sp|Q1X RKRAKTEDEK--EQRRIERVLRNRA--AAQTSRERKRLEMEKLENE-KIQMEQQNQFLLQ .::. . :. :: : : ... : . ...:.. : : : . . :. .. :. sp|A4R LRRAQEQKERQAEQDRKAREAKEKEKKAKEEAKQREKAARELKEREARERKEKADKERLE 710 720 730 740 750 760 130 140 150 160 170 180 sp|Q1X RLSQMEAENN-RLSQQLAQLAAEVRGSRANTPMPGSPA---TASPTLTPTLFKQERDELP . ....::.. : .:. :. :.. . ::.:.: .:: . .:. .:.: .... . sp|A4R KEAKIKAEKEAREAQRKAERASQKATTLANVPVPTGPARRQSQAPNPAPALPQSQQASVA 770 780 790 800 810 820 190 200 210 220 230 240 sp|Q1X LERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHS ..: .:.: :: ... .. :.. . .: : sp|A4R SPQLPTAVPALPKLPTPQKPRRTSQQEPFTSGFAAQQVHGQGAGQYPAPPKAATPVHTSP 830 840 850 860 870 880 250 260 270 280 290 300 sp|Q1X TDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPV sp|A4R GPGGLLSKGSSSQGQSLHSQATSPLGTSLPTSTSLPTPFGMPHPPPNQHYPPGIGPLNAP 890 900 910 920 930 940 >>sp|Q9D2A5|CR3L4_MOUSE Cyclic AMP-responsive element-bi (370 aa) initn: 205 init1: 145 opt: 160 Z-score: 160.6 bits: 38.3 E(516081): 0.2 Smith-Waterman score: 160; 29.7% identity (56.5% similar) in 138 aa overlap (18-146:119-256) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVP-VLTVS--PADTSLNSAD-VKTQ ::: :: . ::: :.:. . :.:. sp|Q9D EVVYDSGTLQGTQREAGPTFGLISIQIDQWTPALMVPDACTVSGLPSDSHRHILPRVSTR 90 100 110 120 130 140 50 60 70 80 90 sp|Q1X EVKPEEKKPAKKRKSW-----GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQ : :. ... . : : .:: . .:. ..:.: .::. .:: sp|Q9D APAPPAAMPSCQHHLFLTDEEKQLLAQEGITLPSHLPLTKAEERILKKIRRKIRNKQSAQ 150 160 170 180 190 200 100 110 120 130 140 150 sp|Q1X TSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP ::.::. .. ::.. .::: : ......: .: : .:. :: sp|Q9D DSRRRKKEYLDGLESRVAACSEQNQKLQRKVQELERQNIFLMEQVRQLQKLTAQTSSRAA 210 220 230 240 250 260 160 170 180 190 200 210 sp|Q1X MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV sp|Q9D QTSTCVLILLFSLALIILPSFSPFQGQSEARPEDYQLHGVISRNILTHENVTENLESPVL 270 280 290 300 310 320 >>sp|Q8HZP6|FOS_FELCA Proto-oncogene c-Fos OS=Felis catu (381 aa) initn: 91 init1: 59 opt: 150 Z-score: 151.1 bits: 36.5 E(516081): 0.68 Smith-Waterman score: 150; 26.9% identity (50.6% similar) in 249 aa overlap (9-237:55-298) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPA-SEVPVLT--VSPADTSL .::.. .:.. : : : : :.: .: sp|Q8H DNLSYYHSPADSFSSMGSPVNAQDFCTDLAVSSANFIPTVTAISTSPDLQWLVQP---TL 30 40 50 60 70 80 40 50 60 70 80 sp|Q1X NSADVKTQEVKPEEKK-PAKKRKSWGQELPVPKTNLPPR-----KRAKTE----DEKEQR :. . .: :. :: . .... : .. : .:.:.: .:.:.: sp|Q8H VSSVAPSQTRAPHPYGVPAPSAGAYSRAGVVKTVTAGGRAQSIGRRGKVEQLSPEEEEKR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X RIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQ ::.: ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|Q8H RIRRE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAA 150 160 170 180 190 200 150 160 170 180 190 sp|Q1X LAAEVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSP . . .: ..:: :. : : .: ::: : : ::. . sp|Q8H HRPACKIPD-DLGFPEEMSVASLDLSGGLPEAATPESEEAFTLPLLNDPEPKPSVEPVKS 210 220 230 240 250 200 210 220 230 240 250 sp|Q1X TLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDL-GSDLKHHSTDDVAAPLSDDDFNR . :: : :: : . . ..: .:: :: sp|Q8H ISSMELKAEPFDDFLFPASSRPSGSETARSVPDMDLSGSFYAADWEPLHGGSLGMGPMAT 260 270 280 290 300 310 260 270 280 290 300 310 sp|Q1X LFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDET sp|Q8H ELEPLCTPVVTCTPSCTTYTSSFVFTYPEADSFPSCGAAHRKGSSSNEPSSDSLSSPTLL 320 330 340 350 360 370 >>sp|Q9NR55|BATF3_HUMAN Basic leucine zipper transcripti (127 aa) initn: 106 init1: 106 opt: 139 Z-score: 147.2 bits: 34.2 E(516081): 1.1 Smith-Waterman score: 139; 28.6% identity (68.8% similar) in 77 aa overlap (69-145:21-97) 40 50 60 70 80 90 sp|Q1X DVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQ : : . . : ..:...: .::.::: sp|Q9N MSQGLPAAGSVLQRSVAAPGNQPQPQPQQQSPEDDDRKVRRREKNRVAAQ 10 20 30 40 50 100 110 120 130 140 150 sp|Q1X TSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP ::... . .::..: ..::.: .: ...... : ..:.. : . sp|Q9N RSRKKQTQKADKLHEEYESLEQENTMLRREIGKLTEELKHLTEALKEHEKMCPLLLCPMN 60 70 80 90 100 110 160 170 180 190 200 210 sp|Q1X MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV sp|Q9N FVPVPPRPDPVAGCLPR 120 >>sp|Q02930|CREB5_HUMAN Cyclic AMP-responsive element-bi (508 aa) initn: 113 init1: 113 opt: 147 Z-score: 146.6 bits: 36.1 E(516081): 1.2 Smith-Waterman score: 147; 27.6% identity (59.3% similar) in 123 aa overlap (52-168:345-466) 30 40 50 60 70 80 sp|Q1X EVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDE :: .. . : . :. . :.:. :: sp|Q02 HSHSHLHAHPAHHQTSPHPPLHTGNQAQVSPATQQMQPTQTIQPPQPTGGRRRRVVDEDP 320 330 340 350 360 370 90 100 110 120 130 140 sp|Q1X KEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQ :.:: . . :::::: :..... . .::.. .. : :. : ...:... : .:.: sp|Q02 DERRR-KFLERNRAAATRCRQKRKVWVMSLEKKAEELTQTNMQLQNEVSMLKNEVAQLKQ 380 390 400 410 420 430 150 160 170 180 190 sp|Q1X QL-----AQLAAEVRGSRAN-TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLS : ..: . :.. .: . ::. : sp|Q02 LLLTHKDCPITAMQKESQGYLSPESSPPASPVPACSQQQVIQHNTITTSSSVSEVVGSST 440 450 460 470 480 490 200 210 220 230 240 250 sp|Q1X DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDD sp|Q02 LSQLTTHRTDLNPIL 500 >>sp|P42774|GBF1_ARATH G-box-binding factor 1 OS=Arabido (315 aa) initn: 188 init1: 124 opt: 144 Z-score: 146.5 bits: 35.4 E(516081): 1.2 Smith-Waterman score: 144; 30.7% identity (60.6% similar) in 127 aa overlap (31-149:176-296) 10 20 30 40 50 60 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG ::.: .:. . : : . . : sp|P42 VTAGSSDENDENANQQEQGSIRKPSFGQMLADASSQSTTGEIQGSVPMKPVAPGTNLNIG 150 160 170 180 190 200 70 80 90 100 110 120 sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ ..: ....: ..::.: .: .: :: .:. :: ::. : :.:... .. . sp|P42 MDLWSSQAGVP------VKDERELKRQKRKQSNRESARRSRLRKQAECEQLQQRVESLSN 210 220 230 240 250 130 140 150 160 170 sp|Q1X QNQFL---LQRLS----QMEAENNRLSQQLAQ-LAAEVRGSRANTPMPGSPATASPTLTP .:: : ::::: ....::: ....: . :.:: sp|P42 ENQSLRDELQRLSSECDKLKSENNSIQDELQRVLGAEAVANLEQNAAGSKDGEGTN 260 270 280 290 300 310 180 190 200 210 220 230 sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL >>sp|A2R346|KAPC_ASPNC Putative transcription factor kap (283 aa) initn: 100 init1: 70 opt: 151 Z-score: 153.7 bits: 36.6 E(516081): 0.48 Smith-Waterman score: 151; 22.5% identity (52.1% similar) in 213 aa overlap (16-223:44-236) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL---TVSPAD-TSLNSADVK : :... : . :.:: : .... : sp|A2R QTSAQDHADQVLHDQLLAAHQHLSHPQQARPQGPTAQPPHMQPNTTSPRDQNNIDPAISG 20 30 40 50 60 70 50 60 70 80 90 100 sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR . .. . : . . . ::: : :: .. .:. .:::: .. : sp|A2R AAMLSGPPQTPPQPEPT-GQESP------------KTYGKRPLSTSKRAAQNRAAQRAFR 80 90 100 110 120 110 120 130 140 150 160 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MP .::. ..:::.. .... :. ..:..::: .: . . .: ... :....: .: sp|A2R QRKESYIRKLEEQVKEFDNTNE----TMKQLQAENYQLREYIINLQSRLLDSQGEVPELP 130 140 150 160 170 170 180 190 200 210 220 sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV :. .: .. : : : :. . . . : . :. . ..: sp|A2R GNIDLNQPRNDISV---PPPGAPAATGPAPGPGGAPQQMQVPNPGAATNEDMNSLNRIAV 180 190 200 210 220 230 230 240 250 260 270 280 sp|Q1X AGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFD ::: sp|A2R AGLGMRKHPNEEANFLGNNFQARRPRNDDGQPDGSEATKTEPGHGLPVVS 240 250 260 270 280 >>sp|O42290|MAFA_CHICK Transcription factor MafA OS=Gall (286 aa) initn: 125 init1: 125 opt: 143 Z-score: 146.2 bits: 35.2 E(516081): 1.3 Smith-Waterman score: 143; 33.3% identity (67.9% similar) in 84 aa overlap (85-167:201-281) 60 70 80 90 100 110 sp|Q1X KRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE .. .:.:.::. ::. : .. . . :::: sp|O42 RFSDDQLVSMSVRELNRQLRGFSKEEVIRLKQNRRTLKNRGYAQSCRYKRVQQRHILENE 180 190 200 210 220 230 120 130 140 150 160 170 sp|Q1X KIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG-SRANTPMPGSPATASPTLTPT : :...: . : :..:.. : . ... .::: :: : .: :..: :.. sp|O42 KCQLQSQVEQLKQEVSRLAKERDLYKEKYEKLAA--RGFPREPSP-PAAPKTTAADFFM 240 250 260 270 280 180 190 200 210 220 230 sp|Q1X LFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLF >>sp|O43889|CREB3_HUMAN Cyclic AMP-responsive element-bi (395 aa) initn: 137 init1: 137 opt: 145 Z-score: 146.2 bits: 35.7 E(516081): 1.3 Smith-Waterman score: 145; 30.2% identity (62.8% similar) in 129 aa overlap (63-185:159-282) 40 50 60 70 80 90 sp|Q1X TSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLR : .:.: :: .::: :. .:..: .: sp|O43 TPQHMEELAEQEIARLVLTDEEKSLLEKEGLILPET-LP---LTKTE-EQILKRVRRKIR 130 140 150 160 170 180 100 110 120 130 140 150 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV-- :. .:: ::..:.. . ::.. ... ::. : .... .: .: : .:: .: : : sp|O43 NKRSAQESRRKKKVYVGGLESRVLKYTAQNMELQNKVQLLEEQNLSLLDQLRKLQAMVIE 190 200 210 220 230 240 160 170 180 190 200 sp|Q1X ---RGSRANTPMPGSPATASPTLTPTLFKQE-RDELPLERIPFPTPSLSDYSPTLKPSTL . : ..: . .. :.:...... : :: : sp|O43 ISNKTSSSSTCILVLLVSFCLLLVPAMYSSDTRGSLPAEHGVLSRQLRALPSEDPYQLEL 250 260 270 280 290 300 210 220 230 240 250 260 sp|Q1X AESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSV sp|O43 PALQSEVPKDSTHQWLDGSDCVLQAPGNTSCLLHYMPQAPSAEPPLEWPFPDLFSEPLCR 310 320 330 340 350 360 >>sp|O60841|IF2P_HUMAN Eukaryotic translation initiation (1220 aa) initn: 64 init1: 64 opt: 151 Z-score: 145.2 bits: 37.1 E(516081): 1.4 Smith-Waterman score: 151; 24.4% identity (58.3% similar) in 180 aa overlap (7-183:282-455) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN :. .::. . :::: . : . :. . : sp|O60 KLKEKEELETGKKDQSKQKESQRKFEEETVKSKVTVDT-GVIPASEEKAETPTAAEDD-N 260 270 280 290 300 40 50 60 70 80 90 sp|Q1X SADVKTQEVKPE--EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE-RVLRN .: : .. : . ::. .:.:. : . :. . : :.:...:. : :. : sp|O60 EGDKKKKDKKKKKGEKEEKEKEKKKGPSKATVKAMQEALAKLKEEEERQKREEEERIKRL 310 320 330 340 350 360 100 110 120 130 140 150 sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS . .:..:::.:: : .: : :.. . :.. ... ....: .. :. . .. . sp|O60 EELEAKRKEEERLEQEKRERKK-QKEKERKERLKKEGKLLTKSQREARARAEATLKLLQA 370 380 390 400 410 420 160 170 180 190 200 210 sp|Q1X RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA .. . .:.. . : : ..: ..: sp|O60 QG-VEVPSKDSL--PKKRPIYEDKKRKKIPQQLESKEVSESMELCAAVEVMEQGVPEKEE 430 440 450 460 470 480 >>sp|Q5KGK5|EIF3A_CRYNE Eukaryotic translation initiatio (952 aa) initn: 46 init1: 46 opt: 152 Z-score: 147.6 bits: 37.2 E(516081): 1.1 Smith-Waterman score: 152; 30.7% identity (54.5% similar) in 202 aa overlap (48-230:735-930) 20 30 40 50 60 70 sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKK--RKSWGQELPVPKTNLPPRKR :: : ::. :.. .: . .. ::: sp|Q5K QRAARELKQRLGRMLEDYEAVKERIESQMQEELKAAKEEARRKIEEEKAQLREKVIKRKR 710 720 730 740 750 760 80 90 100 110 120 sp|Q1X AKTEDE-KEQRRIERVLRNRA--AAQTSRERKR----LEMEKL--ENEKIQMEQQNQFLL . : . :: :. :. :.. ::: ..:. : :: : :... . : : : : sp|Q5K EEKERKLKEAREAEERKRKEEEEAAQKAEEEARAAAALEAEAAAAEQRRAEREAQRQSDL 770 780 790 800 810 820 130 140 150 160 170 sp|Q1X QRL-SQMEAENNRLSQQLAQLAAEVRGSRANTPMPG----SPATASPTLT---PTLFKQE .:. .:.: :.. : .. :. :: . :. : : :. .: ::::. . :. . .. sp|Q5K ERIRAQQEREEEALRRRQAEKAAATSGGSAYRP-PARAGTTPPTASPAPSSGGPSWLARR 830 840 850 860 870 880 180 190 200 210 220 230 sp|Q1X RDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSD . :. : :: ::. : .: :.. :.:: :.. :: sp|Q5K KAMEAQSAGGAPVAS----SPKPVPSNSAAASAPASNGPESIAG-EAEKPALTGSVWRRG 890 900 910 920 930 240 250 260 270 280 290 sp|Q1X LKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNF sp|Q5K MGARRGMPSTRGGA 940 950 >>sp|Q9D275|BATF3_MOUSE Basic leucine zipper transcripti (118 aa) initn: 115 init1: 115 opt: 135 Z-score: 143.8 bits: 33.5 E(516081): 1.7 Smith-Waterman score: 135; 33.3% identity (77.8% similar) in 63 aa overlap (83-145:28-90) 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE ..:...: .::.::: ::... . .::. sp|Q9D MSQGPPAVSVLQRSVDAPGNQPQSPKDDDRKVRRREKNRVAAQRSRKKQTQKADKLH 10 20 30 40 50 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP .:. ..::.:. : ...:... : .::. : . sp|Q9D EEHESLEQENSVLRREISKLKEELRHLSEVLKEHEKMCPLLLCPMNFVQLRSDPVASCLP 60 70 80 90 100 110 180 190 200 210 220 230 sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL sp|Q9D R >>sp|Q1LYG4|CR3LB_DANRE Cyclic AMP-responsive element-bi (428 aa) initn: 130 init1: 130 opt: 144 Z-score: 144.8 bits: 35.5 E(516081): 1.5 Smith-Waterman score: 144; 25.8% identity (55.1% similar) in 178 aa overlap (25-199:161-322) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAK .:. .: .. : . . . :..: sp|Q1L LPDQSGGTQCASETPQAQQTTGFPLTVKDLLLSGTPEPAAKVSQQSYQELILTEDEKRLL 140 150 160 170 180 190 60 70 80 90 100 110 sp|Q1X KRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENE .. :. :: ...: : .:. ..:.: .::. .:: ::..:. .. ::.. sp|Q1L AKE--GMTLP---NQFPLTKY----EERILKKIRRKIRNKQSAQESRKKKKEYIDGLESR 200 210 220 230 240 120 130 140 150 160 170 sp|Q1X KIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTL .:. : ... :.: : : .:: .: : : .. .: :. .. . :. :: sp|Q1L MAACSAHNHELQRKVFQLEKCNISLMEQLRRLQALVMNG-SNKPVQAGTCVLVLLLSFTL 250 260 270 280 290 300 180 190 200 210 220 230 sp|Q1X FKQERDELPLERIPFPTPSLS---DYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP . :: . :: ..: :.:: sp|Q1L IL-----LPNLK-PFTDTKVSQHGDFSPMRVQSRSLHNLQSSRVLRNLDHPYSMTENAKI 310 320 330 340 350 >>sp|Q6DE84|MAFB_XENLA Transcription factor MafB OS=Xeno (313 aa) initn: 113 init1: 113 opt: 141 Z-score: 143.8 bits: 34.9 E(516081): 1.7 Smith-Waterman score: 141; 26.8% identity (60.6% similar) in 142 aa overlap (29-163:171-309) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKS ::. .: .: ... :. . .. .. : : sp|Q6D HQYQGVHHEEMGLPHHHPHHHQHQHHQTSPSPSGSSSSSQQLHHQQ-QHSSSSAVEDRFS 150 160 170 180 190 60 70 80 90 100 110 sp|Q1X WGQELPVPKTNLPPRKRAKTEDEK---EQRRIERVLRNRAAAQTSRERKRLEMEKLENEK : . . .: . :. :.:. .:.: :.:.::. ::. : .. . ..::.:: sp|Q6D DDQLVSMTVRELNRHLRGFTKDDVIRLKQKR--RTLKNRGYAQSCRYKRVQQKHNLEGEK 200 210 220 230 240 250 120 130 140 150 160 170 sp|Q1X IQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA----AEVRGSRANTPMPGSPATASPTLT :. :: . : :..:.. : . . . .:: .. : . ... :.:: sp|Q6D TQLVQQVEQLKQEVSRLARERDAYKIKCEKLANNNSSNFREAGSTSDNPSSPEFFM 260 270 280 290 300 310 180 190 200 210 220 230 sp|Q1X PTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP >>sp|Q7TSC1|BAT2_MOUSE Large proline-rich protein BAT2 O (2158 aa) initn: 95 init1: 82 opt: 157 Z-score: 147.5 bits: 38.4 E(516081): 1.1 Smith-Waterman score: 157; 27.2% identity (48.4% similar) in 217 aa overlap (18-222:378-571) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSL--NSADVKTQEV .:.::.: : :. :. .:. . sp|Q7T RDSDEEGAEGHKDSQSAAAEEPETDGKKGTSPGSELP-----PPKTAWTENARPSETEPA 350 360 370 380 390 400 50 60 70 80 90 sp|Q1X KPEEKKPAKKRK-----SWGQELPVPKTNLPPRKRAKTEDEKE---QRRIERVLRNRAAA : : : . .:: : . :: : ::: : ::: . . :. sp|Q7T PPTPKPPPPPPHRGPVGNWGPPGDYPDRGGPPCKPPAPEDEDEAWRQRRKQSSSEISLAV 410 420 430 440 450 460 100 110 120 130 140 150 sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEVRGSRAN . .:.:.. : .....:. .. :.::.. . : ..::. :. :: sp|Q7T ERARRRREEEERRMQEERRAACAEK---LKRLDEKFGAPDKRLK---AEPAA-------- 470 480 490 500 160 170 180 190 200 210 sp|Q1X TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD-VAQH : : .:: .:.: :.. :. : : ::: :. : . : : :: sp|Q7T -P-PVTPA--APALPPVVPKEIPAAPALPPTPTPTPEKEPEEPAQAPPVQAAPSPGVAPV 510 520 530 540 550 560 220 230 240 250 260 270 sp|Q1X PAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFED :.. .: sp|Q7T PTLVSGGGCTANSNSSGSFEASPVEPQLPSKEGPEPPEEVPPPTTPPAPKMEPKGDGVGS 570 580 590 600 610 620 >>sp|Q99941|ATF6B_HUMAN Cyclic AMP-dependent transcripti (703 aa) initn: 52 init1: 52 opt: 146 Z-score: 143.7 bits: 36.1 E(516081): 1.7 Smith-Waterman score: 147; 24.8% identity (51.2% similar) in 254 aa overlap (17-241:260-503) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLT--VSPADTS---LNSADVK :.: : . .: :.: .: : .. .. sp|Q99 DGSSGKALPTRKPPLQPKPVVLTTVPMPSRAVPPSTTVLLQSLVQPPPVSPVVLIQGAIR 230 240 250 260 270 280 50 60 70 80 90 100 sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR .: : . : .::: :.: .. ::. : : .: .:...:: .: :: sp|Q99 VQPEGPAPSLPRPERKSI-VPAPMPGNSCPPEV-----DAKLLKRQQRMIKNRESACQSR 290 300 310 320 330 340 110 120 130 140 sp|Q1X ERKRLEMEKLEN-------EKIQMEQQNQFLLQRLSQMEAENNRL-----SQQLAQLAAE ..:. .. :: .. :....: : .:: . :::..: ..... . . sp|Q99 RKKKEYLQGLEARLQAVLADNQQLRRENAALRRRLEALLAENSELKLGSGNRKVVCIMVF 350 360 370 380 390 400 150 160 170 180 190 sp|Q1X VRGSRANT-PMPGSPATASPTLTPTLFK---QERDEL-------PLERI-PFPTPSLSDY . : :. : ..: ..: . : : : .: :.. . :. : . sp|Q99 LLFIAFNFGPVSISEPPSAP-ISPRMNKGEPQPRRHLLGFSEQEPVQGVEPLQGSSQGPK 410 420 430 440 450 460 200 210 220 230 240 250 sp|Q1X SPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFN : .:. :... :. . : : . :: :.:: .: sp|Q99 EPQPSPTDQPSFSNLTAFPGGAKELLLRDLDQ--LF-LSSDCRHFNRTESLRLADELSGW 470 480 490 500 510 260 270 280 290 300 310 sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE sp|Q99 VQRHQRGRRKIPQRAQERQKSQPRKKSPPVKAVPIQPPGPPERDSVGQLQLYRHPDRSQP 520 530 540 550 560 570 >>sp|Q54Y73|BZPD_DICDI Probable basic-leucine zipper tra (834 aa) initn: 124 init1: 124 opt: 147 Z-score: 143.7 bits: 36.3 E(516081): 1.8 Smith-Waterman score: 147; 26.9% identity (58.3% similar) in 156 aa overlap (10-157:315-458) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSAD :::. .: . . . .: .. ::. .. . sp|Q54 TSPSSPSTSNMFLTPMVTTTTTSETSSSSDSSVNIIPNNTNTITNIL-IKEEDTNNGNNN 290 300 310 320 330 340 40 50 60 70 80 90 sp|Q1X VKTQEVKPEEK-----KPAKKR---KSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVL :... . . .: .. : :.: :: .. :: . . :::.. .. .:.. sp|Q54 KKSKKRTIDSRVQNIVHPLTREELLKIAGKE-PVQVVD-PPTH--NQEDERNVKKQRRLI 350 360 370 380 390 100 110 120 130 140 150 sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR .:: .:: :: ::.. .: ::. .. :.: :... : :. . ::::. sp|Q54 KNRESAQLSRMRKKIYIEDLEKTISDLTQDN-------SSLKEEVLYLQGLVKQLAAQNS 400 410 420 430 440 450 160 170 180 190 200 210 sp|Q1X GSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD .: :. sp|Q54 NSNNNSVIDINNNNVNNSQQQQQQHQQQQQLNNSNNNNNNNNNNSTNKQQQSKNVKAAGV 460 470 480 490 500 510 >>sp|P18625|FOSL2_CHICK Fos-related antigen 2 OS=Gallus (323 aa) initn: 94 init1: 63 opt: 141 Z-score: 143.6 bits: 34.9 E(516081): 1.8 Smith-Waterman score: 141; 24.4% identity (54.8% similar) in 217 aa overlap (68-271:108-311) 40 50 60 70 80 90 sp|Q1X ADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK--TEDEKEQRRIERVLRNRA :.. :.: . . .:.:.:::.: ::. sp|P18 SHPYSHPLPPLSSVAGHTALQRPGVIKTIGTTVGRRRRDEQLSPEEEEKRRIRRE-RNKL 80 90 100 110 120 130 100 110 120 130 140 150 sp|Q1X AAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS-- :: :.:.: :::. : .:.... : ....... :...: .:. . . : sp|P18 AAAKCRNRRRELTEKLQAETEVLEEEKSVLQKEIAELQKEKEKLEFMLVAHSPVCKISPE 140 150 160 170 180 190 160 170 180 190 200 sp|Q1X -RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSL---SDYSPTLKPSTLAES : . : . .. . . .. ::: :.:. .:. :: . ..:: ..: . sp|P18 ERRSPPTSSLQSVRTGASGAVVVKQE----PVEE-EIPSSSLVLDKAQRSVIKPISIAGG 200 210 220 230 240 250 210 220 230 240 250 260 sp|Q1X --SDVAQHPAVSVAGLEGDGSALPLFDLGSD---LKHHSTDDVAAPLSDDDFNRLFHGDS .. : . . : .. : . ::. . . .. : .::: .. : : sp|P18 YYGEEALNTPIVV-------TSTPAITPGSSNLVFTYPNVLDQESPLSPSESCSKAHRRS 260 270 280 290 300 270 280 290 300 310 320 sp|Q1X SVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSS : :.: sp|P18 SSSGDQSSDSLNSPTLLAL 310 320 >>sp|Q56TN0|FOS_PHORO Proto-oncogene c-Fos OS=Phodopus r (381 aa) initn: 46 init1: 46 opt: 144 Z-score: 145.4 bits: 35.5 E(516081): 1.4 Smith-Waterman score: 144; 23.5% identity (49.7% similar) in 306 aa overlap (2-291:57-353) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL--TVS : .. :...... : :.: .:. sp|Q56 LSYYHSPADSFSSMGSPVNAQDFCADLSVSSANFIPTVTAISTSPDLQWLVQPTLVSSVA 30 40 50 60 70 80 30 40 50 60 70 80 sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE :..: . : : . . : : :. . . . . . . .:.:.:::. sp|Q56 PSQTRAPHPYGVPTPSTGAYSRAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEEKRRIR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA : ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|Q56 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP 150 160 170 180 190 200 150 160 170 180 190 200 sp|Q1X EVRGSRANTPMPGSPATASPTLT---PTLFKQERDE---LPLERIPFPTPSLSDYSPTLK . . .: . ..:: :: : : .: ::: : : :: . . . sp|Q56 ACKIPD-DLGFPEDMSVASLDLTGGLPEAATPESEEAFSLPLLNEPEPKTSLESVKSISS 210 220 230 240 250 260 210 220 230 240 250 sp|Q1X PSTLAESSDVAQHPAVSV-AGLEGDGSALPLFDL-GS----DLKH-HSTDDVAAPLSDDD :: : : : .: : . ..: .:: :: : . ::.. .:.. . sp|Q56 MELKAEPFDDFLFSASSRPSGSETTARSVPDMDLSGSFYAADWEPLHSSSLGMGPMATE- 270 280 290 300 310 320 260 270 280 290 300 310 sp|Q1X FNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLP .. : . :. ... ....: : ..:: sp|Q56 LEPLCTPVVTCTPSCTTYTSSFVFTYPE---TDSFPSCAAAHRKGSSSNEPSSDSLSSPT 330 340 350 360 370 320 330 340 sp|Q1X DETTCKTSSVQPGFGASTTRCDGQGIAAGC sp|Q56 LLAL 380 >>sp|O35284|BATF_MOUSE Basic leucine zipper transcriptio (125 aa) initn: 98 init1: 98 opt: 135 Z-score: 143.5 bits: 33.5 E(516081): 1.8 Smith-Waterman score: 135; 28.9% identity (62.2% similar) in 90 aa overlap (71-160:17-103) 50 60 70 80 90 100 sp|Q1X KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS :: :. ...: :...: .:: ::: : sp|O35 MPHSSDSSDSSFSRSPPPGKQDSSDDV---RKVQRREKNRIAAQKS 10 20 30 40 110 120 130 140 150 160 sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP :.:. . . :. :. ..:.:: : ....:. : . ... :.. ..:: : sp|O35 RQRQTQKADTLHLESEDLEKQNAALRKEIKQLTEELKYFTSVLSSHEPLCSVLASGTPSP 50 60 70 80 90 100 170 180 190 200 210 220 sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV sp|O35 PEVVYSAHAFHQPHISSPRFQP 110 120 >>sp|Q16534|HLF_HUMAN Hepatic leukemia factor OS=Homo sa (295 aa) initn: 130 init1: 130 opt: 140 Z-score: 143.2 bits: 34.7 E(516081): 1.9 Smith-Waterman score: 140; 25.8% identity (54.3% similar) in 151 aa overlap (2-148:142-290) 10 20 sp|Q1X MSCDMEKTMSSVDSLPA---TPASEVPVLTV .: :.. . . ::: ::. : sp|Q16 GLQPASSAAPSVMDLSSRASAPLHPGIPSPNC-MQSPIRPGQLLPANRNTPSPIDPDTIQ 120 130 140 150 160 170 30 40 50 60 70 80 sp|Q1X SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQEL-PVPKTNLPPRKRAKTEDEKEQRRI :. . ::. . . .: .::: .:: : : . :: .: :... sp|Q16 VPVGYEPDPADLALSSIPGQEMFDPRKRKFSEEELKPQPMIK-KARKVFIPDDLKDDKYW 180 190 200 210 220 90 100 110 120 130 140 sp|Q1X ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA : .: ::. ::. .::. ... . .:..:. : :...... : .. .. ::. sp|Q16 ARRRKNNMAAKRSRDARRLKENQIAIRASFLEKENSALRQEVADLRKELGKCKNILAKYE 230 240 250 260 270 280 150 160 170 180 190 200 sp|Q1X AEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLA : sp|Q16 ARHGPL 290 >>sp|Q8BW74|HLF_MOUSE Hepatic leukemia factor OS=Mus mus (295 aa) initn: 130 init1: 130 opt: 140 Z-score: 143.2 bits: 34.7 E(516081): 1.9 Smith-Waterman score: 140; 25.8% identity (54.3% similar) in 151 aa overlap (2-148:142-290) 10 20 sp|Q1X MSCDMEKTMSSVDSLPA---TPASEVPVLTV .: :.. . . ::: ::. : sp|Q8B GLQPASSTAPSVMDLSSRATAPLHPGIPSPNC-MQSPIRPGQLLPANRNTPSPIDPDTIQ 120 130 140 150 160 170 30 40 50 60 70 80 sp|Q1X SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQEL-PVPKTNLPPRKRAKTEDEKEQRRI :. . ::. . . .: .::: .:: : : . :: .: :... sp|Q8B VPVGYEPDPADLALSSIPGQEMFDPRKRKFSEEELKPQPMIK-KARKVFIPDDLKDDKYW 180 190 200 210 220 90 100 110 120 130 140 sp|Q1X ERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA : .: ::. ::. .::. ... . .:..:. : :...... : .. .. ::. sp|Q8B ARRRKNNMAAKRSRDARRLKENQIAIRASFLEKENSALRQEVADLRKELGKCKNILAKYE 230 240 250 260 270 280 150 160 170 180 190 200 sp|Q1X AEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLA : sp|Q8B ARHGPL 290 >>sp|Q63ZM7|STABP_XENLA STAM-binding protein-like OS=Xen (416 aa) initn: 60 init1: 60 opt: 153 Z-score: 153.3 bits: 37.1 E(516081): 0.51 Smith-Waterman score: 153; 29.8% identity (53.0% similar) in 181 aa overlap (39-210:79-238) 10 20 30 40 50 60 sp|Q1X MSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKT : :: .: ::.:. :: : :. ::. sp|Q63 VYSGEGSIENAFILYNKYITLFIEKLPKHRDYKTANV-PEKKETLKKLK----EIAFPKA 50 60 70 80 90 100 70 80 90 100 110 120 sp|Q1X N-----LPPRKRAKTEDEKEQRRIERVLRNRAAA---QTSRERKRLEMEKLENEKIQMEQ . : : . . :. .:..: :. : : : : . :..:. . : ..: :.:: sp|Q63 EELKKELHKRYKKEYEEYSEKQRKEEEERARRLALQQQLDAEKQRVALLKQQQE--QQEQ 110 120 130 140 150 160 130 140 150 160 170 sp|Q1X QNQFL-LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQER . : ..: ...::: :. .:... :.. ..:. :. : .:: : sp|Q63 VQAFEEMMRRKELEAERLRILHQFSKDEPEAEP--LGSPL--IPGMNEPPVTPLL----- 170 180 190 200 210 180 190 200 210 220 230 sp|Q1X DELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL : : : : : ::::. . .: sp|Q63 ---PSYGTVQPHPPAVDRS--LKPSSYGSNSSGVTSDGLRHVKIPRDVCCKFLQLSENNT 220 230 240 250 260 240 250 260 270 280 290 sp|Q1X KHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFD sp|Q63 QRGVETCGILCGKLLQNEFTVTHVIVPKQSGGPDYCNTESEEELFLIQDQQGLITLGWIH 270 280 290 300 310 320 >>sp|P29681|IMPE2_DROME 20-hydroxyecdysone protein OS=Dr (466 aa) initn: 103 init1: 74 opt: 142 Z-score: 142.4 bits: 35.2 E(516081): 2.1 Smith-Waterman score: 142; 25.5% identity (57.1% similar) in 184 aa overlap (8-181:14-192) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVS----PADTSLNSADVKTQEVKPEEK ... : .:: : ..:: : :. :: . .::..:::::: sp|P29 MKPVALILVFLAISQARVLNLPKE-AIDIPVAIVEDKEPPVALSLVKEEVKAEEVKPEEV 10 20 30 40 50 60 70 80 90 100 sp|Q1X KP-AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME :: :...:. . : : :. : :.. :.. :. . .:. . ... sp|P29 KPIAQEEKAKDLKEEVKPEIKPEIKEQPKPDIKDE--IKEDLKADIKEEL-KEKIEEQIN 60 70 80 90 100 110 110 120 130 140 150 160 sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS-- .: : : .: ... : . . .: ... . .. . :.:.. :.. . . :: . sp|P29 ELPNAK-PLELKEKSLEAEEKPQEIKEEVQQPEIKKEATEIKEEPAQNILKSLPAEETVV 120 130 140 150 160 170 170 180 190 200 210 220 sp|Q1X -PT--LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLE :. :.:. .::..: sp|P29 VPAEELSPNPVEQEQSENQDAAHPQVRQATQATPTQQSTTQGNFVQQLIQNSPIGQFLNQ 180 190 200 210 220 230 >>sp|O35451|ATF6B_MOUSE Cyclic AMP-dependent transcripti (699 aa) initn: 52 init1: 52 opt: 146 Z-score: 143.8 bits: 36.1 E(516081): 1.7 Smith-Waterman score: 147; 23.6% identity (50.8% similar) in 254 aa overlap (16-241:259-500) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS--LNSADVKTQ :.. : . :. .:: . : .. ...: sp|O35 SSGKAPATRKPPLQPKPVVLTTVPVPPRAGPTSAAVLLQPLVQQPAVSPVVLIQGAIRVQ 230 240 250 260 270 280 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER : : .::: :.: .. ::. : : .: .:...:: .: ::.. sp|O35 PEGPAPAAPRPERKSI-VPAPMPGNSCPPE-----VDAKLLKRQQRMIKNRESACQSRRK 290 300 310 320 330 340 110 120 130 140 150 sp|Q1X KRLEMEKLEN-------EKIQMEQQNQFLLQRLSQMEAENNRL-----SQQLAQLAAEVR :. .. :: .. :....: : .:: . :::. : ..... . . . sp|O35 KKEYLQGLEARLQAVLADNQQLRRENAALRRRLEALLAENSGLKLGSGNRKVVCIMVFLL 350 360 370 380 390 400 160 170 180 190 200 sp|Q1X GSRANT-PMPGSPATASPTLTPTLFKQE-RDELPLERIPFPTPSLSDYSPTLKPSTLAES : :. : .: ..: . ..: : . : . : :. . ..: : . sp|O35 FIAFNFGPVSISEPPPAP-MSPRMSREEPRPQRHLLGFSEPGPAHG-----MEPLREAAQ 410 420 430 440 450 210 220 230 240 250 sp|Q1X SDVAQHPAVS-------VAGLEGDGSALPLFDL-----GSDLKHHSTDDVAAPLSDDDFN : :.:. . .... : .. : : :: .:: .: sp|O35 SPGEQQPSSAGRPSFRNLTAFPGGAKELLLRDLDQLFLSSDCRHFNRTESLRLADELSGW 460 470 480 490 500 510 260 270 280 290 300 310 sp|Q1X RLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDE sp|O35 VQRHQRGRRKIPHRAQERQKSQLRKKSPPVKPVPTQPPGPPERDPVGQLQLYRHPGRSQP 520 530 540 550 560 570 >>sp|Q09926|PCR1_SCHPO Transcription factor pcr1 OS=Schi (171 aa) initn: 159 init1: 112 opt: 154 Z-score: 159.5 bits: 36.9 E(516081): 0.23 Smith-Waterman score: 154; 25.8% identity (55.8% similar) in 163 aa overlap (74-223:4-163) 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRER :. ...:::..: .: ::: ::. :.. sp|Q09 MTAKKKEVDDEKRRRILE---RNRIAASKFRQK 10 20 30 110 120 130 140 150 sp|Q1X KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL-----AQLAAEVRG-----S :. ...::. .:.. : :::.. : ::..:: : ....:. . sp|Q09 KKEWIKELEQTANAAFEQSKRLQLLLSQLQQEAFRLKSQLLAHQGCQCSVKIRSVLTDFQ 40 50 60 70 80 90 160 170 180 190 200 210 sp|Q1X RANTPMPGSPATASPTLTP---TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS :.. . .. . :. : ..... . : . : . : . ::. .: sp|Q09 TAHNALHSQHMAYRPVQPPPGDNMLESVVSVSPTQMHPSLQGLPPNQHPQMPPSSQQPNS 100 110 120 130 140 150 220 230 240 250 260 270 sp|Q1X DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS : .:. :.::: sp|Q09 DDVQQHMFSAAGLPRSLGGPI 160 170 >>sp|O13024|INCEA_XENLA Inner centromere protein A OS=Xe (873 aa) initn: 111 init1: 111 opt: 145 Z-score: 141.5 bits: 36.0 E(516081): 2.3 Smith-Waterman score: 145; 25.5% identity (60.6% similar) in 137 aa overlap (41-172:629-763) 20 30 40 50 60 70 sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL . .: ..:: :. .. :: . : sp|O13 RRKQEEEARRLKVKQMEEEERRHQELLQKKREEEELERQKKIAEAKRLAEQERE--RQLL 600 610 620 630 640 650 80 90 100 110 120 sp|Q1X PPRKRAKTEDEKEQRRIERVLR-----NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL ..: ..: :::. . :..:. .::: . ..:.. : .: .... ..::. sp|O13 AEKERLRAEREKERIEKEKALQLQRELERAAQEKEQQRREAEERKKREQQERLEQERLRK 660 670 680 690 700 710 130 140 150 160 170 180 sp|Q1X LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLE :. .... :..: ... : .:: . ... : .::: : .:: sp|O13 EQEAKRLQEEEQRKAKEQAAVAASAPVMNVTVDMQNSPACESYEMTPKSCKVPSVKVNED 720 730 740 750 760 770 190 200 210 220 230 240 sp|Q1X RIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTD sp|O13 NYGMDLNSDDSTDDESQPRKPIPAWASGNLLTQAIRQQYYKPIDVDRMYGTIDSPKLEEL 780 790 800 810 820 830 >>sp|A0JMT0|CA1AB_XENLA Chromatin assembly factor 1 subu (885 aa) initn: 102 init1: 65 opt: 146 Z-score: 142.4 bits: 36.1 E(516081): 2.1 Smith-Waterman score: 146; 22.8% identity (60.2% similar) in 206 aa overlap (8-210:234-432) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNS : .: : .::.... .: :. . .. sp|A0J SSADDDSVSVSSSSSPVSLSSPDVQTGSKFTNGSSPSTSTTPTGKATSNKTS-AEKKKTK 210 220 230 240 250 260 40 50 60 70 80 90 sp|Q1X ADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRI-ERVLRNRAA .. .... ::.. :... ...: : . ..: : . ::..:. :.. .:: sp|A0J DKAEKRQAEKEERECARREARAAKDLAKKKREGEREQREKDKKEKKEREDREKAEKNRLK 270 280 290 300 310 320 100 110 120 130 140 150 sp|Q1X AQTSRER-KRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA . ..:. . :: .. :..: . :.... .::.. :..:.. . :... .. . sp|A0J EEKKKEKLEALEAKQEEKRKKEEEKRQKEEEKRLKE---EEKRIKAEKAEITRFLQ--KP 330 340 350 360 370 160 170 180 190 200 210 sp|Q1X NTPM-PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQ .::. : . : . ..: .:. :: :: : . . . :. .: .::: sp|A0J KTPQAPKTFARSCGKFAPFEIKKGMALAPLCRIDFEQEASEELDIFLQEQT-SESSFLDE 380 390 400 410 420 430 220 230 240 250 260 270 sp|Q1X HPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE sp|A0J IKKRRPRKMGQTTVPTINSVEVDDVQVLGETDPVLGSNMVLEEHIKDIGVPERKKFGRMK 440 450 460 470 480 490 >>sp|Q5RDE1|IF2P_PONAB Eukaryotic translation initiation (1220 aa) initn: 64 init1: 64 opt: 147 Z-score: 141.4 bits: 36.4 E(516081): 2.3 Smith-Waterman score: 147; 23.9% identity (58.3% similar) in 180 aa overlap (7-183:282-455) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLN :. ..:. . :::: . : . :. . : sp|Q5R KLKEKEESETGKKDQSKQKESQRKSEEETVKSKVTLDT-GVIPASEEKAETPTAAEDD-N 260 270 280 290 300 40 50 60 70 80 90 sp|Q1X SADVKTQEVKPE--EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE-RVLRN .: : .. : . ::. .:.:. : . :. . : :.:...:. : :. : sp|Q5R EGDKKKKDKKKKKGEKEEKEKEKKKGPSKATVKAMQEALAKLKEEEERQKREEEERIKRL 310 320 330 340 350 360 100 110 120 130 140 150 sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS . .:..:::.:: : .: : :.. . :.. ... ....: .. :. . .. . sp|Q5R EELEAKRKEEERLEQEKRERKK-QKEKERKERLKKEGKLLTKSQREARARAEATLKLLQA 370 380 390 400 410 420 160 170 180 190 200 210 sp|Q1X RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA .. . .:.. . : : ..: ..: sp|Q5R QG-VEVPSKDSL--PKKRPIYEDKKRKKIPQQLESKEVSESMELCAAVEVMEQGVPEKEE 430 440 450 460 470 480 >>sp|Q4U1U2|MAFA_XENTR Transcription factor MafA OS=Xeno (289 aa) initn: 96 init1: 96 opt: 138 Z-score: 141.4 bits: 34.4 E(516081): 2.3 Smith-Waterman score: 138; 30.6% identity (68.2% similar) in 85 aa overlap (83-167:203-284) 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE .:.: :.:.::. ::. : .. . . :: sp|Q4U RFSDEQLVSMSVRELNRQLRGFSKEEVIRLKQKR--RTLKNRGYAQSCRYKRVQQRHILE 180 190 200 210 220 230 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP .:: :...: . : :..:.. : . ... .::.. .: . :. :.:. :. sp|Q4U TEKCQLQSQVEQLKQEVSRLAKERDLYKDKYEKLASRSFTTRESPPQ-GNPGKANADFFM 240 250 260 270 280 180 190 200 210 220 230 sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL >>sp|Q64709|HLF_RAT Hepatic leukemia factor OS=Rattus no (295 aa) initn: 127 init1: 127 opt: 138 Z-score: 141.3 bits: 34.4 E(516081): 2.4 Smith-Waterman score: 138; 29.4% identity (55.9% similar) in 136 aa overlap (16-148:163-290) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPAS-EVPV-LTVSPADTSLNSADVKTQ : : . .::: .::: .:.: sp|Q64 PLHPGIPSPNCMQNPIRPGQLLPANRNTPSPIDPDTIQVPVGYEPDPADLALSSIP---- 140 150 160 170 180 50 60 70 80 90 100 sp|Q1X EVKPEEKKPAKKRKSWGQEL-PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE :: : .::: .:: : : . :: .: :... : .: ::. ::. sp|Q64 --GPEMFDP-RKRKFSEEELKPQPMIK-KARKVFIPDDLKDDKYWARRRKNNMAAKRSRD 190 200 210 220 230 240 110 120 130 140 150 160 sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS .::. ... . .:..:. : :...... : .. .. ::. : sp|Q64 ARRLKENQIAIRASFLEKENSALRQEVADLRKELGKCKNILAKYEARHGPL 250 260 270 280 290 170 180 190 200 210 220 sp|Q1X PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAG >>sp|Q54NF3|Y6434_DICDI Uncharacterized protein DDB_G028 (412 aa) initn: 71 init1: 71 opt: 140 Z-score: 141.2 bits: 34.8 E(516081): 2.4 Smith-Waterman score: 140; 18.5% identity (63.1% similar) in 157 aa overlap (22-170:171-321) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPV-LTVSPADTSLNSADVKTQEVKPEEK ..:. .. ...: :: :. .:... sp|Q54 VECDFKMATNTPGSEQAQQQQQQQQQQQLGDIPIKQQITSSNNSGNS-----QQQQPQQQ 150 160 170 180 190 60 70 80 90 100 110 sp|Q1X KPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEK . ..... :. : . . .. . ....:..... :... : . ....:.... sp|Q54 QQQQQQQQQQQQQPQQQQQQQQPQQQQHLQQQHQQQVQQ-LQQQQLQQQQLQQQQLQQQQ 200 210 220 230 240 250 120 130 140 150 160 sp|Q1X LENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA----AEVRGSRANT---PMPGSP :.....:. : .:. . .:.. . . ::: :. :. . ..:. : .:: sp|Q54 LQQQQLQQPQLQQMQQPQQQQQQQQPQYTPQQLMQFQQMQQAQQQQQQAQQLQQQMGSSP 260 270 280 290 300 310 170 180 190 200 210 220 sp|Q1X ATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGL . .:::. sp|Q54 THSSPTIKQEGLTGYTQIPQGGIINTNTNLNGTGGVSPNQPMPNSSPILPTNASSVVPPV 320 330 340 350 360 370 >>sp|P15336|ATF2_HUMAN Cyclic AMP-dependent transcriptio (505 aa) initn: 65 init1: 65 opt: 141 Z-score: 141.0 bits: 35.1 E(516081): 2.5 Smith-Waterman score: 141; 27.2% identity (62.5% similar) in 136 aa overlap (15-143:278-412) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ- : :. ... : .: . . . .:. :.:: sp|P15 LVRPVTMVPSVPGIPGPSSPQPVQSEAKMRLKAALTQQHPPVTNGDTVKGHGSGLVRTQS 250 260 270 280 290 300 50 60 70 80 90 sp|Q1X -EVKPEE-KKPAKKRK----SWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA : .:. ..:: . : .. : ... :.:: .:: :.:: . . :::::: sp|P15 EESRPQSLQQPATSTTETPASPAHTTPQTQSTSGRRRRAANEDPDEKRR-KFLERNRAAA 310 320 330 340 350 360 100 110 120 130 140 150 sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT . :..... ...::.. .. . : : .... .. : .:.: : sp|P15 SRCRQKRKVWVQSLEKKAEDLSSLNGQLQSEVTLLRNEVAQLKQLLLAHKDCPVTAMQKK 370 380 390 400 410 420 160 170 180 190 200 210 sp|Q1X PMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPA sp|P15 SGYHTADKDDSSEDISVPSSPHTEAIQHSSVSTSNGVSSTSKAEAVATSVLTQMADQSTE 430 440 450 460 470 480 >>sp|Q553B1|DDX46_DICDI ATP-dependent RNA helicase ddx46 (1151 aa) initn: 54 init1: 54 opt: 146 Z-score: 140.8 bits: 36.2 E(516081): 2.5 Smith-Waterman score: 146; 21.7% identity (52.6% similar) in 272 aa overlap (16-275:149-410) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPA--SEVPVLTVSPADTSLNSADVKTQ : : :. :.. .: . . . : sp|Q55 QQQPHIQAPPPAKPRKSRFDQAPETIPIQAPQQPPMISNQPIFKQQPMYQQPMYQQKQQQ 120 130 140 150 160 170 50 60 70 80 90 sp|Q1X EVKPEEKKPAKKRKS--WGQELPVPKTNLPP------RKRAKTEDEKEQRRI--ERVLRN : .. :... . .. : : . :: ... . ....:.:. : . . sp|Q55 PQPPIFQQQQKQQQPPIFQHHQPPPIYQQPPVYQQQQQQQQPVFQQQQQQRVATEAIQFQ 180 190 200 210 220 230 100 110 120 130 140 150 sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS .. : . :..::..:. :::: ..:: : .. . ..:. : .:.: : .. :: sp|Q55 QTPQQLAIEQERLKQER-ENEK-KIEQANLEEEMKKRREKVEQWR-KQKLEQ-ELKASGS 240 250 260 270 280 290 160 170 180 190 200 210 sp|Q1X RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA .:. .:: :.. : : : :: . . :: : .: : ..: sp|Q55 -SNSGSTSSPPTTTTTTTKTTAATTTATTSPLTIPSQQQQTATTSPIKKKWSLEEEEETA 300 310 320 330 340 350 220 230 240 250 260 270 sp|Q1X QHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVF : : :.. ..: :: ... .. ..: .. ... .. :....: .. . sp|Q55 Q-PLVNT-NIEQKEIKLP---PTANIPAAAATTTSATINTTTIKQSIEEDDDIDPLDAYM 360 370 380 390 400 280 290 300 310 320 330 sp|Q1X EDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGAST :. sp|Q55 ENLNKEANLNLKKSKTSQMIDDDEKLEEESEGEDDGKDKTIKKGKKEMLHTDHTSIKYAE 410 420 430 440 450 460 >>sp|P48634|BAT2_HUMAN Large proline-rich protein BAT2 O (2157 aa) initn: 121 init1: 68 opt: 149 Z-score: 140.0 bits: 37.0 E(516081): 2.8 Smith-Waterman score: 154; 27.0% identity (50.9% similar) in 222 aa overlap (18-228:380-575) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP .: :: :. .. :.:: ... : sp|P48 SDEEGAEGHRDSQSASGEERPPEADGKKGNSPNSEPPTPKTAWAETS-RPPETEPGPPAP 350 360 370 380 390 400 50 60 70 80 90 100 sp|Q1X EEKKPAKKRK---SWGQELPVPKTNLPPRKRAKTEDEKE---QRRIERVLRNRAAAQTSR . : .: .:: : . :: : ::: : ::: . . :.. .: sp|P48 KPPLPPPHRGPAGNWGPPGDYPDRGGPPCKPPAPEDEDEAWRQRRKQSSSEISLAVERAR 410 420 430 440 450 460 110 120 130 140 150 160 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEVRGSRANTPMP .:.. : .....:. .. :.::.. . : ..::. :. :: : : sp|P48 RRREEEERRMQEERRAACAEK---LKRLDEKFGAPDKRLK---AEPAA---------P-P 470 480 490 500 510 170 180 190 200 210 220 sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV ..:.: .: :.. : ::: : : :. : .: .: :.. . . :. .: sp|P48 AAPSTPAPP--PAVPK----ELPAP--PAPPPA-SAPTPEKEPEEPAQAPPAQSTPTPGV 520 530 540 550 560 230 240 250 260 270 sp|Q1X AG----LEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDG :. . : :: sp|P48 AAAPTLVSGGGSTSSTSSGSFEASPVEPQLPSKEGPEPPEEVPPPTTPPVPKVEPKGDGI 570 580 590 600 610 620 >>sp|Q5TM26|BAT2_MACMU Large proline-rich protein BAT2 O (2160 aa) initn: 122 init1: 68 opt: 149 Z-score: 140.0 bits: 37.0 E(516081): 2.8 Smith-Waterman score: 152; 25.6% identity (49.6% similar) in 242 aa overlap (18-251:380-589) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP .: ::.: .. :.:: ... : sp|Q5T SDEEGAEGHKDSQSASGEERPTEADGKKGNSPNSELPPPKTAWAETS-RPPETEPGPPAP 350 360 370 380 390 400 50 60 70 80 90 100 sp|Q1X EEKKPAKKRK---SWGQELPVPKTNLPPRKRAKTEDEKE---QRRIERVLRNRAAAQTSR . : .: .:: : . :: : ::: : ::: . . :.. .: sp|Q5T KPPLPPPHRGPAGNWGPPGDYPDRGGPPCKPPAPEDEDEAWRQRRKQSSSEISLAVERAR 410 420 430 440 450 460 110 120 130 140 150 160 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEVRGSRANTPMP .:.. : .....:. .. :.::.. . : ..::. :. :: : : sp|Q5T RRREEEERRMQEERRAACAEK---LKRLDEKFGAPDKRLK---AEPAA---------P-P 470 480 490 500 510 170 180 190 200 210 220 sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV ..:.: .: :.. : ::: : ::. :. : . :: : .. sp|Q5T AAPSTPAPP--PAVPK----ELPAPLAP---------SPASAPTPEKEPEESAQAPPAQC 520 530 540 550 230 240 250 260 270 sp|Q1X AGLEGDGSALPLFDLGSDLKHHSTDDV-AAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF . : ..: : . :.. . :. . :.:. sp|Q5T TPTPGVAAAPTLVSGGGSTSSTSSGSFEASPVEPQLPSKEGPEPPEEVPPPTTPPAPKVE 560 570 580 590 600 610 280 290 300 310 320 330 sp|Q1X DVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQ sp|Q5T PKGDGIGPTRQPPSQGLGYPKYQKSLPPRFQRQQQEQLLKQQQQQQWQQHQQGSAPPTPV 620 630 640 650 660 670 >>sp|A3BYC1|HOX25_ORYSJ Homeobox-leucine zipper protein (320 aa) initn: 43 init1: 43 opt: 137 Z-score: 139.9 bits: 34.2 E(516081): 2.9 Smith-Waterman score: 137; 23.4% identity (56.0% similar) in 282 aa overlap (24-294:48-314) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEK--- : ::.. . :. :. . .:. sp|A3B YSLERVAYVCERVGSPVMEEAELRRRRRKRPFLTTTHDELELQMEDLVDELYGVDEQGSS 20 30 40 50 60 70 60 70 80 90 100 sp|Q1X -KPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER--VLRNRAAAQTSRERKRLE :.::. .... . . .. .:: : : :.... .: . ..:. . .: : . sp|A3B SAAARKRRLTAEQVRALERSFEEEKR-KLEPERKSELARRLGIAPRQVAVWFQNRRARWK 80 90 100 110 120 130 110 120 130 140 150 160 sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS ..:: . ... .. :: . . :.:. : .:. :. ..... ...: : ::: : sp|A3B TKQLELDFDRLRAAHDELLAGRTALAADNESLRSQVILLTEKLQAN-GKSPSP-SPAPAE 140 150 160 170 180 190 170 180 190 200 210 220 sp|Q1X PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDG : .:. .. .. . ::. : : . . .: . .. ::. ::. ::. .. . sp|A3B QTAVPAAPESAKS-FQLEE----GRRLYDAAGSTT-TTNGGGGGVAM-PAARVAAARAAS 200 210 220 230 240 230 240 250 260 270 280 sp|Q1X SALP--LFDLGSDLKHHSTDDVAAPLSDDDF---NRLFHGDSSVEPDSSVFEDGLAFDVL . : : . . : :: .. ::::. . :. :... :. :: ..: : sp|A3B NDSPESYFAGARSPPSSSEDDCGGAGSDDDYPSSSVLLPVDATLVGDA--FEHAVAATV- 250 260 270 280 290 300 290 300 310 320 330 340 sp|Q1X EGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIA ..: : :..: sp|A3B -AADEEA-PLNSWEWFWN 310 320 >>sp|P16951|ATF2_MOUSE Cyclic AMP-dependent transcriptio (487 aa) initn: 65 init1: 65 opt: 139 Z-score: 139.3 bits: 34.7 E(516081): 3.1 Smith-Waterman score: 139; 27.2% identity (62.5% similar) in 136 aa overlap (15-143:260-394) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQ- : :. ... : .: . . . .:. :.:: sp|P16 LVRPVTMVPSVPGIPGPSSPQPVQSEAKMRLKAALTQQHPPVTNGDTVKGHGSGLVRTQS 230 240 250 260 270 280 50 60 70 80 90 sp|Q1X -EVKPEE-KKPAKKRK----SWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA : .:. ..:: . : .. : ... :.:: .:: :.:: . . :::::: sp|P16 EESRPQSLQQPATSTTETPASPAHTTPQTQNTSGRRRRAANEDPDEKRR-KFLERNRAAA 290 300 310 320 330 340 100 110 120 130 140 150 sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT . :..... ...::.. .. . : : .... .. : .:.: : sp|P16 SRCRQKRKVWVQSLEKKAEDLSSLNGQLQSEVTLLRNEVAQLKQLLLAHKDCPVTAMQKK 350 360 370 380 390 400 160 170 180 190 200 210 sp|Q1X PMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPA sp|P16 SGYHTADKDDSSEDLSVPSSPHTEAIQHSSVSTSNGVSSTSKAEAVATSVLTQMADQSTE 410 420 430 440 450 460 >>sp|Q96RN5|MED15_HUMAN Mediator of RNA polymerase II tr (788 aa) initn: 164 init1: 84 opt: 142 Z-score: 139.3 bits: 35.4 E(516081): 3.1 Smith-Waterman score: 142; 19.1% identity (59.5% similar) in 220 aa overlap (5-221:119-331) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS : . :: . : .. .: ... ..:. sp|Q96 TGGPAAGAAGIGMPPRGPGQSLGGMGSLGAMGQPMSLSGQPPPGTSGMAP-HSMAVVSTA 90 100 110 120 130 140 40 50 60 70 80 90 sp|Q1X LNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNR ..... :.: .... .. .. : . . ... .... :.... :.... sp|Q96 TPQTQLQLQQVALQQQQQQQQFQQQQQAALQQQQQQQQQQQFQAQQSAMQQQFQAVVQQQ 150 160 170 180 190 200 100 110 120 130 140 150 sp|Q1X AAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSR : ...... .. ::.... :. ::.: :::..:.. .... .:: : . .. . sp|Q96 QQLQQQQQQQQ-HLIKLHHQNQQQIQQQQQQLQRIAQLQLQQQQQQQQQQQQQQQ-QALQ 210 220 230 240 250 260 160 170 180 190 200 210 sp|Q1X ANTPMPGSPATASPTLTPTL-FKQERDEL--PLERIPFPTPSLSDYSPTLKPSTLAESSD :. :. .: .: :. . :. ... .. : : :. . . .:: : .:. sp|Q96 AQPPIQ-QPPMQQPQPPPSQALPQQLQQMHHTQHHQPPPQPQQPPVAQN-QPSQLPPQSQ 270 280 290 300 310 320 220 230 240 250 260 270 sp|Q1X VAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSS . .: :: : sp|Q96 T--QPLVSQAQALPGQMLYTQPPLKFVRAPMVVQQPPVQPQVQQQQTAVQTAQAAQMVAP 330 340 350 360 370 380 >>sp|Q2UNX4|KAPC_ASPOR Putative transcription factor kap (284 aa) initn: 70 init1: 70 opt: 142 Z-score: 145.3 bits: 35.0 E(516081): 1.4 Smith-Waterman score: 142; 24.2% identity (51.6% similar) in 215 aa overlap (16-223:44-237) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL---TVSPAD-TSLNSADVK : ::.. : . :.:: : .... : sp|Q2U QTSAQDHADQVLHDQLLAAHQHLSHPQQPRPQPPAAQPPHMQPNTTSPRDQNNIDPAISG 20 30 40 50 60 70 50 60 70 80 90 100 sp|Q1X TQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR . .. . : . . . ::: : :: .. .:. .:::: .. : sp|Q2U AAMLSGPPQTPPQPEPT-GQESP------------KTYGKRPLSTSKRAAQNRAAQRAFR 80 90 100 110 120 110 120 130 140 150 sp|Q1X ERKRLEMEKLENEKIQMEQQNQF--LLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP- .::. ..::: :: ..: . . .. ..::: .: . . .: ... :....: sp|Q2U QRKESYIRKLE------EQVKEFDTMSEAFKALQAENYQLREYIINLQSRLLESQGEVPE 130 140 150 160 170 160 170 180 190 200 210 sp|Q1X MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAV .::. ..: : : :.: : . . :. : ..:. . . sp|Q2U LPGNIDLSQPR-TDLNVPQPGAGPATTSSSAPAPP-SGAQQAQPPQGAASNDDMNSLNRI 180 190 200 210 220 230 220 230 240 250 260 270 sp|Q1X SVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLA .:::: sp|Q2U AVAGLGMRKHPNEEANYLGNNFTGRRTRPDETQADSEVTKTEQAPHGLPMVS 240 250 260 270 280 >>sp|Q80U35|ARHGH_MOUSE Rho guanine nucleotide exchange (2057 aa) initn: 95 init1: 56 opt: 147 Z-score: 138.4 bits: 36.6 E(516081): 3.5 Smith-Waterman score: 147; 24.5% identity (52.9% similar) in 208 aa overlap (19-214:838-1039) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADV-KTQEVKP :..: :. : : .: . : ..: sp|Q80 EDRIAGKTPKKKSLSDPSRRGELTGPGFEGPGGE-PIREVEPMLPPSSSEPILAEQWTEP 810 820 830 840 850 860 50 60 70 80 90 100 sp|Q1X EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERK-RL :. ::. : . . ::.: : . . .: . . .. :: : . . :..: : sp|Q80 EDPAPARGRAQSERSLPAP-----PASSTAHHDFHLDPKLTSVLSPRLTRRGSKKRPARS 870 880 890 900 910 920 110 120 130 140 150 160 sp|Q1X EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLA----AEVRGSRANTPMP-G ..:. :. ...: ... : :. .... . .. .. : : . .: : : sp|Q80 SHQELRREEGNQDQTGSLTQTRSSSKHVRHASVPATFTPIVVPEPAMSVGPPVAAPEPVG 930 940 950 960 970 980 170 180 190 200 210 sp|Q1X SPATASPTL-TPTLFK-QERDELPLER--IPFPTP-SLSDYSPTLKPSTLAESSDVAQHP :. . :.: .:.: .: : :. .: : : .: :. ::: .. : .:. sp|Q80 FPVRGHPALQAPSLEDVTKRYMLTLHSGDVPAPGPVDLPCLPPSAPPSTETKPSGAARAT 990 1000 1010 1020 1030 1040 220 230 240 250 260 270 sp|Q1X AVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDG sp|Q80 PDEPAPASKCCSKPQVDMRKHVTMTLLDTEQSYVESLRTLMQGYMQPLKQPENSLLCDPS 1050 1060 1070 1080 1090 1100 >>sp|P0C865|MK07_RAT Mitogen-activated protein kinase 7 (806 aa) initn: 130 init1: 75 opt: 149 Z-score: 145.7 bits: 36.6 E(516081): 1.3 Smith-Waterman score: 156; 26.3% identity (50.2% similar) in 259 aa overlap (3-236:429-680) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLP--ATPASEVPVLTVSP : :: : .:: . :: .. ::..: sp|P0C IRFQPSLQPVASEPVCPDVEMPSPWAPSGDCAME---SPPPALPPCSGPAPDTVDLTLQP 400 410 420 430 440 450 40 50 60 70 80 sp|Q1X ADTSLNSADVKTQEVKPEEKKPA------KKRKSWGQELPVPKTNLP-PRKRAKTEDEKE : . . : : . . .. : : :. .: .. : . : ::: . ...... sp|P0C APPASELAPPKREGAISDNTKAALKAALLKSLRSRLRDGPSAPLEAPEPRKPVTAQERQR 460 470 480 490 500 510 90 100 110 120 130 140 sp|Q1X QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNR-LSQQ .:. .: : : ::..: : :. : . . : : . ..:.: : .. sp|P0C EREEKR--RRRQERAKEREKRRQERERKERGAGTLGGPSTDPLAGL--VLSDNDRSLLER 520 530 540 550 560 570 150 160 170 180 190 sp|Q1X LAQLAAEVRGSRANTPMPG-SPATASPTLTPTL-FKQERDEL-PLERIPFPT--PSLSDY ...: . : .: : .:..:.:: :. .: : : :: :. : sp|P0C WTRMARPPVPAPAPAPAPTPKPSSAQPTSPPNGPVSQSTAPLQPAGSIPGPASQPVCPPP 580 590 600 610 620 630 200 210 220 230 240 sp|Q1X SPTLKPS--------TLAESSDVAQHPAVSVAGLEGDGS--ALPLFDLGSDLKHHSTDDV .:. .:. : .: .:.. : .:: :.:. .:: : : sp|P0C GPVPQPAGPVPAPLQTAPSTSLLASQSLVPPSGLPGSGAPEVLPYFPSGPPPPDPGLTPQ 640 650 660 670 680 690 250 260 270 280 290 300 sp|Q1X AAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEG sp|P0C PSTSESPDVNLVTQQLSKSQVEDPLPPVFSGTPKGSGAGYGVGFDLEEFLNQSFDMGVAD 700 710 720 730 740 750 >>sp|P97875|JDP2_MOUSE Jun dimerization protein 2 OS=Mus (163 aa) initn: 109 init1: 109 opt: 131 Z-score: 138.2 bits: 32.9 E(516081): 3.5 Smith-Waterman score: 131; 27.2% identity (56.3% similar) in 151 aa overlap (16-163:9-155) 10 20 30 40 50 60 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG :.. :. .: : .: :.: :. . :.:.: . . . sp|P97 MMPGQIPDPSVTAGSLPGL--GPL-TGLPSSALTTEELKYADIRNIGAMIAPL 10 20 30 40 50 70 80 90 100 110 120 sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ . : : : . :. . ::.:.:: .: .:..:: :..:. . : :. :. ..: sp|P97 HFLEV-KLGKRPQPVKSELDEEEERRKRRREKNKVAAARCRNKKKERTEFLQRESERLEL 60 70 80 90 100 130 140 150 160 170 sp|Q1X QNQFLLQRLSQMEAENNRLSQQLAQLAAE--VRGSRANTPMP-GSPATASPTLTPTLFKQ .: : .. ... : ..: .: . :: . . :: :.: sp|P97 MNAELKTQIEELKLERQQLILMLNRHRPTCIVRTDSVRTPESEGNPLLEQLDKK 110 120 130 140 150 160 180 190 200 210 220 230 sp|Q1X ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS >>sp|Q78E65|JDP2_RAT Jun dimerization protein 2 OS=Rattu (163 aa) initn: 109 init1: 109 opt: 131 Z-score: 138.2 bits: 32.9 E(516081): 3.5 Smith-Waterman score: 131; 27.2% identity (56.3% similar) in 151 aa overlap (16-163:9-155) 10 20 30 40 50 60 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG :.. :. .: : .: :.: :. . :.:.: . . . sp|Q78 MMPGQIPDPSVTAGSLPGL--GPL-TGLPSSALTTEELKYADIRNIGAMIAPL 10 20 30 40 50 70 80 90 100 110 120 sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ . : : : . :. . ::.:.:: .: .:..:: :..:. . : :. :. ..: sp|Q78 HFLEV-KLGKRPQPVKSELDEEEERRKRRREKNKVAAARCRNKKKERTEFLQRESERLEL 60 70 80 90 100 130 140 150 160 170 sp|Q1X QNQFLLQRLSQMEAENNRLSQQLAQLAAE--VRGSRANTPMP-GSPATASPTLTPTLFKQ .: : .. ... : ..: .: . :: . . :: :.: sp|Q78 MNAELKTQIEELKLERQQLILMLNRHRPTCIVRTDSVRTPESEGNPLLEQLDKK 110 120 130 140 150 160 180 190 200 210 220 230 sp|Q1X ERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS >>sp|Q8SQ19|CREB3_BOVIN Cyclic AMP-responsive element-bi (368 aa) initn: 134 init1: 134 opt: 151 Z-score: 152.2 bits: 36.7 E(516081): 0.59 Smith-Waterman score: 151; 25.9% identity (54.7% similar) in 212 aa overlap (20-221:105-301) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEE :. .:. . ::: .. . :: sp|Q8S PCLVQHDHTYSLSQEHVSIDLDNESYEKERAQMTPLRVEEPAD-----QEIARLILTEEE 80 90 100 110 120 50 60 70 80 90 100 sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME :. .:. : :: :: : .:. .:..: .::. .:: ::..:.. . sp|Q8S KRLLEKE---GLTLP---GMLPLTKM----EEQVLKRVRRKIRNKKSAQESRRKKKVYVG 130 140 150 160 170 110 120 130 140 150 160 sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV-----RGSRANTPMPGSPA ::.. ... :: : .... .: .: : .:: .: : : ..: ..: . sp|Q8S GLESRVLKYTAQNLELQNKVQLLEEQNLSLLDQLRRLQAMVIQTANKASSSSTCVLVLLF 180 190 200 210 220 230 170 180 190 200 210 sp|Q1X TASPTLTPTLFKQE-RDELPLER--IPFPTPSL-SDYSPTLKPSTL-AESSDVAQHPAVS . :.:...... : :: :. . .: :. : :.: .: .: . .: .. sp|Q8S SFCLLLVPAMYSSDTRGSLPAEHRVLSRQLRALPSEDPPQLEPPALQSEVPKDSLNPELQ 240 250 260 270 280 290 220 230 240 250 260 270 sp|Q1X VAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF .: sp|Q8S AASNSCCLFHLMPQAPRAEPPLQLPLPDGFSGCSCPDSISPLHANLTREEGWLPTPSPTS 300 310 320 330 340 350 >>sp|P48755|FOSL1_MOUSE Fos-related antigen 1 OS=Mus mus (273 aa) initn: 97 init1: 97 opt: 150 Z-score: 153.0 bits: 36.4 E(516081): 0.53 Smith-Waterman score: 150; 26.9% identity (53.4% similar) in 208 aa overlap (44-232:72-265) 20 30 40 50 60 70 sp|Q1X SLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPR . .: . .:. : . : : : . : sp|P48 SIDSSSQELHWMVQPHFLGPTGYPRPLAYPQYSPPQPRPGVIR-ALG---PPPGVRRRPC 50 60 70 80 90 80 90 100 110 120 sp|Q1X KRAKTEDEKEQRRIERVLRNRAAAQTSRERKR-------LEMEKLENEKIQMEQQNQFLL .. . :.: :.::..: ::. :: :.:.. : .:::.:: .... . : sp|P48 EQISPEEE-ERRRVRRE-RNKLAAAKCRNRRKELTDFLQAETDKLEDEKSGLQREIEELQ 100 110 120 130 140 150 130 140 150 160 170 sp|Q1X QRLSQMEA--ENNRLSQQLAQLAAEVRGSRANT------PMPGSPATASPTLTP-TLFKQ .. ..: : .: .. . . :. ..: : :: :. .:.: ... sp|P48 KQKERLELVLEAHRPICKIPEGDKKDPGGSGSTSGASSPPAPGRPVPCI-SLSPGPVLEP 160 170 180 190 200 210 180 190 200 210 220 230 sp|Q1X ERDELPLERIPFPTPSLSDYSPTL---KPSTLAESSDVAQHPAVSVAGLEGDGSALPLFD : . : . ::::. ..:.: ::: : . :.. . : .: : :. :: sp|P48 EALHTPTL---MTTPSLTPFTPSLVFTYPST-PEPCSSAHRKSSSSSG---DPSSDPLGS 220 230 240 250 260 240 250 260 270 280 290 sp|Q1X LGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDS sp|P48 PTLLAL 270 >>sp|A2AJI0|MA7D1_MOUSE MAP7 domain-containing protein 1 (846 aa) initn: 93 init1: 59 opt: 141 Z-score: 138.0 bits: 35.3 E(516081): 3.7 Smith-Waterman score: 141; 24.7% identity (56.2% similar) in 146 aa overlap (4-149:527-669) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT . .:. .. .. ::.::: .: . ::. . sp|A2A PRGTTASPKGRVRRKEEAKESPSPSGPEDKNHRKSRAAEEKEPAAPASPAPSPVPSPTPA 500 510 520 530 540 550 40 50 60 70 80 90 sp|Q1X SLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRN . .. . .:: . : :: . .:... : . : : :..: :. : sp|A2A QPQKEQSSTQ-IPAETAVPAVPAAPTAPPTAAPSVT-PSKPMAGTTDREEATRLLAEKRR 560 570 580 590 600 610 100 110 120 130 140 150 sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGS .: : ::... ... ...... :: . : .. ::: : .: :. :. sp|A2A QAREQREREEQERKLQAERDKRMREEQLAREAEAR-AEREAEARRREEQEAREKAQAEQE 620 630 640 650 660 670 160 170 180 190 200 210 sp|Q1X RANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVA sp|A2A EQERLQKQKEEAEARSREEAERQRQEREKHFQKEEQERQERRKRLEEIMKRTRKSEAAET 680 690 700 710 720 730 >>sp|Q00312|RBF1_CANAL Transcription factor RBF1 OS=Cand (527 aa) initn: 102 init1: 62 opt: 142 Z-score: 141.7 bits: 35.3 E(516081): 2.3 Smith-Waterman score: 142; 23.0% identity (57.0% similar) in 200 aa overlap (36-229:263-449) 10 20 30 40 50 60 sp|Q1X EKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEE----KKPAKKRKSWGQ : : : .. ::.: .. .. . : sp|Q00 TTVKDATKRQRIAYTKRNKCAYRLVANLYPNEKDQKRKN-KPDEPGHNEENSRISEMWVL 240 250 260 270 280 290 70 80 90 100 110 120 sp|Q1X ELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ .. :. : : : :.... :.: .. . .... :..:. .... :..:: sp|Q00 RMINPQHNHAPDPINK----KKRQKTSRTLVEKPINKP-HHHHLLQQEQQQQQQQQQQQQ 300 310 320 330 340 130 140 150 160 170 sp|Q1X NQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPT--LFKQER .: :. .: .: :.. .:: ::: ... . . .: .: . : : : .:. sp|Q00 QQ---QQQQQHNA-NSQAQQQAAQLQQQMQQQLQASGLPTTP-NYSELLGQLGQLSQQQS 350 360 370 380 390 400 180 190 200 210 220 230 sp|Q1X DELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL .. :..:: .. . .:. :.. : : :. .:..:....: sp|Q00 QQQQLHHIPQQRQRTQSQQSQQQPQQTAHGLD--QPDAAVIAAIEASAAAAVASQGSPNV 410 420 430 440 450 240 250 260 270 280 290 sp|Q1X KHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFD sp|Q00 TAAAVAALQHTQGNEHDAQQQQDRGGNNGGAIDSNVDPSLDPNVDPNVQAHDHSHGLRNS 460 470 480 490 500 510 >>sp|O35413|SRBS2_RAT Sorbin and SH3 domain-containing p (1196 aa) initn: 70 init1: 70 opt: 143 Z-score: 137.8 bits: 35.7 E(516081): 3.7 Smith-Waterman score: 143; 26.7% identity (53.9% similar) in 217 aa overlap (18-229:220-425) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP :: . : :: ... . : .::: .: sp|O35 TVDRPKDWYKTMFKQIHMVHKPDEDTDMYNTPYTYNAGLYNSPYSAQSHPA-AKTQTYRP 190 200 210 220 230 240 50 60 70 80 90 100 sp|Q1X EEKKPAKKRKSWGQEL--PVPKTNLPPRKRAKTEDEK-EQRRIERVLRNRAAAQTSRERK :. . . . .: ::: ..::: : .. :: . .: . .: :. :. sp|O35 LSKSHSDNGTDAFKEATSPVPPPHVPPRPRDQSSTEKHDWDPPDRKVDTRKF--RSEPRS 250 260 270 280 290 300 110 120 130 140 150 160 sp|Q1X RLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPA .:.: .. .: :. . . : :... .: :.. :..:.. : : . : : : sp|O35 IFEYEPGKSSILQHERPVS-VYQ--SSIDRSLERPSSS-ASMAGDFRKRRKSEPAVGPPR 310 320 330 340 350 360 170 180 190 200 210 220 sp|Q1X TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQH--PAVSVAG . . . . : .:: : : .:. ::. .:: :...: .. : : .: sp|O35 GLGDH-SSSRTSPGRADLPGSSSTFTTSFISS-SPS-SPSR-AQGGDDSKMCPPLCSYSG 370 380 390 400 410 230 240 250 260 270 280 sp|Q1X LEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVL :.:. :. sp|O35 LNGSPSSELECCGAYRRHLDVPQDSQRAITFKNGWQMARQNAEIWSSTEEAVSPKIKSRS 420 430 440 450 460 470 >>sp|P97876|BATF3_RAT Basic leucine zipper transcription (133 aa) initn: 100 init1: 100 opt: 129 Z-score: 137.5 bits: 32.5 E(516081): 3.9 Smith-Waterman score: 129; 30.2% identity (77.8% similar) in 63 aa overlap (83-145:28-90) 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE ..:...: .::.::: ::... . .::. sp|P97 MSQGPPAGGVLQSSVAAPGNQPQSPKDDDRKVRRREKNRVAAQRSRKKQTQKSDKLH 10 20 30 40 50 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP .:. ..::.:. : ....... : .:.. : . sp|P97 EEHESLEQENSVLRREIAKLKEELRHLTEALKEHEKMCPLLLCPMNFVQLRPDPVASWSA 60 70 80 90 100 110 180 190 200 210 220 230 sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL sp|P97 HDAPDHPSFIWLGTLV 120 130 >>sp|O93602|ATF2_CHICK Cyclic AMP-dependent transcriptio (487 aa) initn: 112 init1: 65 opt: 141 Z-score: 141.2 bits: 35.1 E(516081): 2.4 Smith-Waterman score: 141; 25.2% identity (58.8% similar) in 131 aa overlap (13-143:275-394) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKT :. . :.. : . . : ::.. ..: sp|O93 GPSSPQPVQSEAKLRLKAALTQQHPQVTNGDTAKGHPSGLVRTQSEEPRPQSLQQPATST 250 260 270 280 290 300 50 60 70 80 90 100 sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRE :. .:... . : . :.:: .:: :.:: . . ::::::. :. sp|O93 TETPASPAQPTQQTPNTGGR----------RRRAANEDPDEKRR-KFLERNRAAASRCRQ 310 320 330 340 350 110 120 130 140 150 160 sp|Q1X RKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGS .... ...::.. .. . : : .... .. : .:.: : sp|O93 KRKVWVQSLEKKAEDLSSLNGQLQNEVTLLRNEVAQLKQLLLAHKDCPVTAMQKKSGYHT 360 370 380 390 400 410 170 180 190 200 210 220 sp|Q1X PATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAG sp|O93 ADKDDSSEDISVPSSPHTEAIQHSSVSTSNGVSSTSKAEAVATSVLTQLADQSSEPGLPQ 420 430 440 450 460 470 >>sp|Q5F489|TAF3_CHICK Transcription initiation factor T (930 aa) initn: 120 init1: 86 opt: 151 Z-score: 146.8 bits: 37.0 E(516081): 1.2 Smith-Waterman score: 152; 26.1% identity (52.7% similar) in 226 aa overlap (14-232:662-845) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLP--ATP-ASEVPVLTVSPADTSLNSADV ::: .:: : ..: .. :. . . . sp|Q5F KKDKEKVKDKSKEDKIKPPSAPLVLPPKEMSLPLFSTPTAMRLP--SMLPSLSPMLPEKL 640 650 660 670 680 50 60 70 80 90 100 sp|Q1X KTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS .. ::.::: ::.: .:. . : .::... ... . sp|Q5F FEDKEKPKEKKKDKKEK---------------KKKKEREKDKEKEK-----KDKEKERKE 690 700 710 720 110 120 130 140 150 sp|Q1X RERKRLEMEKLENEKIQMEQ---QNQFLLQRLS-QMEAENNRLSQQLAQLAAEVRGSRAN ::.:. : :: ..:::..: . .. ::. .. : .... . . : : .. sp|Q5F REKKEKEKEKHKHEKIKVEPVVPAPSPVIPRLTLRVGAGQDKIVISKVVPAPE---AKPA 730 740 750 760 770 780 160 170 180 190 200 210 sp|Q1X TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHP ::. . : : :. .:. :.. : :.: . .::..:. : .: : sp|Q5F TPV-SRPKTPPPVPSPV-------PAPVHVTPPPAPVPAPPQPTVSPALLPPAS-----P 790 800 810 820 830 220 230 240 250 260 270 sp|Q1X AVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDG :::.:: :: :. sp|Q5F AVSAAG----GSKAPVRSVVTETVSTYVIRDEWGNQIWFCPGCNKPDDGSPMIGCDDCDD 840 850 860 870 880 >>sp|Q6CBW0|NST1_YARLI Stress response protein NST1 OS=Y (889 aa) initn: 264 init1: 76 opt: 140 Z-score: 136.7 bits: 35.1 E(516081): 4.3 Smith-Waterman score: 141; 28.0% identity (58.4% similar) in 161 aa overlap (48-194:477-629) 20 30 40 50 60 70 sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRK--- :::. :. :. ... . : . .: sp|Q6C KEREKAARKAASEAKQKARQEEQARLAREKEEKRLARIRE-MEERMRLAKEKEEREKEEL 450 460 470 480 490 500 80 90 100 110 120 130 sp|Q1X RAKTEDEKEQRR-IERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQME ::. ..:...:: ::. ..: : .::: :..:::... :...: : .. ... sp|Q6C RARQQQEEDERREKERLEEERI------ENERLEAERIENERLEKEREQQRLEEEKERQR 510 520 530 540 550 140 150 160 170 180 sp|Q1X AENNRLSQQLAQLAAEVRGSRA---NTPMPGS---PATASPTLTPTLFK---QERDELPL ...: .:.: . : :.: . . :.::. ::. : : . : :. sp|Q6C IKEEREKQKLEE-EREKRASMSIPLSKPLPGKTQIPASQPGTSLGGLQQPVPQAAPVAPV 560 570 580 590 600 610 190 200 210 220 230 240 sp|Q1X ERIP-FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHS .: :.:.: sp|Q6C AMMPQSPSPQLPPGLTQHVAQSQILLDRLTPDPTSRMTPERHTPSPGSTTSNAKTLLDSL 620 630 640 650 660 670 >>sp|Q9CXK9|RBM33_MOUSE RNA-binding protein 33 OS=Mus mu (1231 aa) initn: 63 init1: 63 opt: 142 Z-score: 136.7 bits: 35.6 E(516081): 4.3 Smith-Waterman score: 142; 27.1% identity (54.7% similar) in 181 aa overlap (5-169:749-921) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPAD-T :. : ..: : . :: .: . sp|Q9C PSSSRMQCTPHQGLRHNAASQNISKRPMQQMQPTAPRNSNLRELPIAPSHVLEMSGNRCS 720 730 740 750 760 770 40 50 60 70 80 sp|Q1X SLNSADVKTQ-EVKPEEKKPAKKRKSWGQELPVPKTNLP---PRKRAKTE----DEKEQR : :.::. ...: . ...:.: :. : : :...:: : :: :. sp|Q9C STPVAQVKSIVNTSPPCRAVVSSRSSQGNTDAKAKPLSPEAQPKEEAKPEAEFPDEDEET 780 790 800 810 820 830 90 100 110 120 130 140 sp|Q1X RIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQ----NQFLLQRLSQMEAENNRLS- :. :. .:.:::. : :...... .:: .. ::.::.:.. .... . sp|Q9C RLYRL--------KIEEQKRLREEILKQKELRRQQQAGARKKELLERLAQQQQQQQQQQH 840 850 860 870 880 890 150 160 170 180 190 sp|Q1X --QQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYS :: : .. ::... . :: ::: sp|Q9C QPQQQQQQPQQIYGSQTSMEQEELAATPSPTNGNPLLPFPGAQCRQNVKTRLLVKNQDIT 900 910 920 930 940 950 200 210 220 230 240 250 sp|Q1X PTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNR sp|Q9C TASVQPKAVNFVPPGANVQHQGQHLRPLKHLRQLPHKVLQVKPMDMEETPHSPQAARVTS 960 970 980 990 1000 1010 >>sp|Q554P0|BZPJ_DICDI Probable basic-leucine zipper tra (787 aa) initn: 125 init1: 125 opt: 139 Z-score: 136.5 bits: 34.9 E(516081): 4.4 Smith-Waterman score: 139; 27.3% identity (66.7% similar) in 99 aa overlap (80-175:546-644) 50 60 70 80 90 100 sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME .::: .. .:...:: :. :: :... .: sp|Q55 LSREHVLKLSSKEIEEYVSRLKMHHILTQAEEKELKKQRRLVKNREYASQSRSRRKIYVE 520 530 540 550 560 570 110 120 130 140 150 160 sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPG---SPATA ..:.. . .:. . ..:.... ::. :..:: .:. .... . . : :: sp|Q55 NIETKLQKTNQDCASIKSQLNSVKEENKALKKQLYSLTNTLKSNPSLAEAFGKIFSPIGN 580 590 600 610 620 630 170 180 190 200 210 220 sp|Q1X SPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGD . : . ::: sp|Q55 NKTSSATLFVFFFLFTFTFLFQSSTVTFNSDRVSSIQRNLLSLEETQATEWNIKRAILEE 640 650 660 670 680 690 >>sp|Q55EQ3|Y9086_DICDI Uncharacterized abhydrolase doma (937 aa) initn: 213 init1: 65 opt: 140 Z-score: 136.4 bits: 35.1 E(516081): 4.4 Smith-Waterman score: 140; 27.8% identity (61.1% similar) in 144 aa overlap (18-154:283-415) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKT-QEVK .:.:.. . :.: . :. .... . .: : sp|Q55 HEVHNEFAKEEFVTYILEWIKERIENAKNESPSSNINTTTTSTTTTTTTTTSSPVVEESK 260 270 280 290 300 310 50 60 70 80 90 100 sp|Q1X P--EEKKPAKKRKSWGQELPVPKTNLPPRKRAKTE----DEKEQRRIERVLRNRAAAQTS : ::.::. .... :: . . : ...: : : ::... ::. ...:::. sp|Q55 PVVEESKPVVEESK-----PVVEESKPVVEESKPEPVVDDSKEKEEKERLEKEEAAAKLE 320 330 340 350 360 110 120 130 140 150 160 sp|Q1X RERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMP .:: .:: : :.. : ... . . . :: . .:: : ::... : sp|Q55 KER----LEKEEAERVAKEAEEKRI--KDEKEAQENLEKQQQEAAAAAQAEKERLEKEEA 370 380 390 400 410 420 170 180 190 200 210 220 sp|Q1X GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSV sp|Q55 DKLEKERLEAEAAAAAQAEKERLEAEAAAAAQAEKERLEAEAAAAVQAEKERLEKEEADR 430 440 450 460 470 480 >>sp|O75037|KI21B_HUMAN Kinesin-like protein KIF21B OS=H (1637 aa) initn: 66 init1: 66 opt: 143 Z-score: 136.0 bits: 35.8 E(516081): 4.7 Smith-Waterman score: 143; 26.2% identity (61.0% similar) in 141 aa overlap (41-173:723-857) 20 30 40 50 60 70 sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL : : .. :. . :... . .:: .... sp|O75 STMECYTEEKANKIKADYEKRLREMNRDLQKLQAAQKEHARLLKNQSRYERELKKLQAEV 700 710 720 730 740 750 80 90 100 110 120 sp|Q1X PPRKRAKT------EDEKEQRRIERVLRNRAAAQTSRERKRLEME--KLENEKIQMEQQN :.::. ..:...::. .. ::: :: ..:..: :.. ::..: .:. sp|O75 AEMKKAKVALMKQMREEQQRRRLVETKRNREIAQLKKEQRRQEFQIRALESQK----RQQ 760 770 780 790 800 130 140 150 160 170 180 sp|Q1X QFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDEL ...:.: .: . ::.. ... .: : . :: : : .: . : . sp|O75 EMVLRRKTQEVSALRRLAKPMSERVAGRAGLK--PPMLDSGAEVSASTTSSEAESGARSV 810 820 830 840 850 860 190 200 210 220 230 240 sp|Q1X PLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHH sp|O75 SSIVRQWNRKINHFLGDHPAPTVNGTRPARKKFQKKGASQSFSKAARLKWQSLERRIIDI 870 880 890 900 910 920 >>sp|O14273|YET4_SCHPO Meiotically up-regulated protein (647 aa) initn: 116 init1: 50 opt: 137 Z-score: 135.8 bits: 34.5 E(516081): 4.8 Smith-Waterman score: 137; 22.2% identity (59.1% similar) in 198 aa overlap (26-217:1-186) 10 20 30 40 50 60 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG .:..: .. .. ... . .:: .:. .. sp|O14 MTTNPDIVKQTKNEIHQVTSRVQEKLDSKSTNAVE 10 20 30 70 80 90 100 110 120 sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ :. .... .. :. .. ... . .. :::..: .: : .. : :: sp|O14 QNNNSSQASVTKDNKKKAA-KRAKKKAAKKKKQSAAASASST----PVE--EAQHAQEEQ 40 50 60 70 80 130 140 150 160 170 sp|Q1X QNQFLLQR--LSQ--MEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFK :.: .::. ..: .: . ..... : .:. . :. .. : ..:.... : .:: sp|O14 QEQTILQEPGFTQTIVEKDADQVDEPLEPIASSALGT-VEPPTDNKPSASTSTAVPT--T 90 100 110 120 130 140 180 190 200 210 220 230 sp|Q1X QERDELPLERIPFPTPSLSDYSPTLKPSTLAESSD--VAQHPAVSVAGLEGDGSALPLFD . :. : : .:: :. : . : .. ..:.: ::.: : sp|O14 EARNTSITE--PANSPSSSSSSASTKSTATTQSADYVVAEHFAPQRNDEQLGNSPASITS 150 160 170 180 190 200 240 250 260 270 280 290 sp|Q1X LGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDS sp|O14 KPATTSAAQPSSKVEENMAKATSQPITTAEKEIPELKPIEPEAIMISKEINTTHDQAAAT 210 220 230 240 250 260 >>sp|P19880|YAP1_YEAST AP-1-like transcription factor YA (650 aa) initn: 100 init1: 66 opt: 137 Z-score: 135.8 bits: 34.5 E(516081): 4.8 Smith-Waterman score: 140; 23.1% identity (54.9% similar) in 273 aa overlap (28-297:13-259) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS-LNSADVKTQEVKPEEKKPAKKRKSW :::.. . .... . .:.. :... . . sp|P19 MSVSTAKRSLDVVSPGSLAEFEGSKSRHDEIENEHRRTGTRD--- 10 20 30 40 60 70 80 90 100 110 sp|Q1X GQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQME :.. :: . : .: .: . . .:. .:::: .. ::::. .:..:: .:.: sp|P19 GEDSEQPKKK--GSKTSKKQDLDPETKQKRTAQNRAAQRAFRERKERKMKELE-KKVQSL 50 60 70 80 90 120 130 140 150 160 170 sp|Q1X QQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQER .. : .: :.: . : .:: :. :.. : .: .. :.: .. sp|P19 ESIQ------QQNEVEATFLRDQLITLVNELKKYRPETRNDSKVLEYLARRDPNLHFSKN 100 110 120 130 140 150 180 190 200 210 220 230 sp|Q1X DELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL . . :. ::. .: . ..: . . . :.: :..:.. ..:..: sp|P19 NVNHSNSEPIDTPN-DDIQENVKQ----KMNFTFQYP------LDNDNDNDNSKNVGKQL 160 170 180 190 200 240 250 260 270 280 290 sp|Q1X KHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF--DVLEGGDLSAFPFDSMVN . . .::. .:. . :.. .::. :.:. :::.. :. .: . : sp|P19 PSPNDPSHSAPM---PINQTQKKLSDATDSSSATLDSLSNSNDVLNNTPNSSTSMDWLDN 210 220 230 240 250 300 310 320 330 340 sp|Q1X FDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC sp|P19 VIYTNRFVSGDDGSNSKTKNLDSNMFSNDFNFENQFDEQVSEFCSKMNQVCGTRQCPIPK 260 270 280 290 300 310 >>sp|Q6IPM2|IQCE_HUMAN IQ domain-containing protein E OS (695 aa) initn: 66 init1: 66 opt: 137 Z-score: 135.4 bits: 34.5 E(516081): 5.1 Smith-Waterman score: 137; 22.3% identity (50.0% similar) in 238 aa overlap (34-268:455-686) 10 20 30 40 50 60 sp|Q1X DMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQEL .:.: . ::.: :::. . .::: sp|Q6I KADLEKELECAREGEEERREREEVLREEIQTLTSKLQELQEMKKEEKEDCPEVPHKAQEL 430 440 450 460 470 480 70 80 90 100 110 120 sp|Q1X PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQ :.: : .: .: . : . : :. . .:. .. . . . . .... sp|Q6I PAPT----PSSRHCEQDWPPDSSEEGLPRPRSPCSDGRRDAAARVLQAQWKVYKHKKKKA 490 500 510 520 530 540 130 140 150 160 170 180 sp|Q1X FLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPT-LTPTLFKQER-DE : . ..: . ::....::. . .:: : .::. .:. . : . sp|Q6I VLDEAAVVLQAAFRGHLTRTKLLASKAHGSEPPS-VPGLPDQSSPVPRVPSPIAQATGSP 550 560 570 580 590 190 200 210 220 230 240 sp|Q1X LPLERIPFPTPSLSDYSPTLKPSTLAE-SSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK . : : . .: . . :. .. .. .:. :... .::.:. :.. : sp|Q6I VQEEAIVIIQSALRAHLARARHSATGKRTTTAASTRRRSASATHGDASSPPFLAALPD-P 600 610 620 630 640 650 250 260 270 280 290 300 sp|Q1X HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS : .. ::: :: : : . : sp|Q6I SPSGPQALAPLPGDDVNSDDSDDIVIAPSLPTKNFPV 660 670 680 690 >>sp|Q98UK4|MAF_DANRE Transcription factor Maf OS=Danio (327 aa) initn: 88 init1: 88 opt: 132 Z-score: 135.1 bits: 33.4 E(516081): 5.3 Smith-Waterman score: 132; 31.2% identity (61.3% similar) in 93 aa overlap (83-175:243-326) 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE .:.: :.:.::. ::. : .. . . :: sp|Q98 RFSDEQLVNMSVRELNRQLRGVSKEEVIRLKQKR--RTLKNRGYAQSCRYKRVQQRHVLE 220 230 240 250 260 270 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTP .:: :. :: . : :..:.. : . ... .: . : : : :: . .:. .: sp|Q98 GEKTQLMQQVDHLKQEISRLVRERDAYKEKYEKLISS--GFREN----GSSSDNNPS-SP 280 290 300 310 320 180 190 200 210 220 230 sp|Q1X TLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPL .: sp|Q98 EFFM >>sp|Q556Q3|IRLF_DICDI Probable serine/threonine-protein (1400 aa) initn: 120 init1: 84 opt: 141 Z-score: 135.0 bits: 35.4 E(516081): 5.3 Smith-Waterman score: 141; 17.9% identity (58.7% similar) in 184 aa overlap (6-186:661-844) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSL : .. : . . :. : . .: . . . sp|Q55 DLLFGVINDRLKAPIFINKDKYESLYFVYQEDYQNPSDPFRVLPTRSVDLSKISEGISRM 640 650 660 670 680 690 40 50 60 70 80 90 sp|Q1X NSADVKTQEVKPEEKKPAK-KRKSWGQELPVPKTNLPPRKRAKTEDEKEQ--RRIERVLR .. : .. : :..: : :.:. ..: : . .. . : ::.: .. . . . sp|Q55 KNDDFLNELEKEEKQKKLKTKQKKKIKKLENEKKQKVLQQDKQQEKEKKQNYQQPQDLQQ 700 710 720 730 740 750 100 110 120 130 140 150 sp|Q1X NRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG . ::...... .... .... :..::.: :. .:....... .:: : .. .. sp|Q55 HNLKIQTQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQSQQQQQQQQSPQQQSQQQS 760 770 780 790 800 810 160 170 180 190 200 210 sp|Q1X SRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDV .... . : .: .:.... : .. sp|Q55 QQSQQKSQQQSQQKSQQQSPPQQQQQQSQQPQQQSQQQSQQKQKHQKQQQQQKQEKQQQK 820 830 840 850 860 870 220 230 240 250 260 270 sp|Q1X AQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSV sp|Q55 QEKQQQKQEKPQQKQQLENQIKNLKIEIKKEEENNKEIKNKKEEVEKEKEENNKEIKSKS 880 890 900 910 920 930 >>sp|P14233|TGA1B_TOBAC TGACG-sequence-specific DNA-bind (242 aa) initn: 103 init1: 103 opt: 130 Z-score: 135.0 bits: 32.9 E(516081): 5.4 Smith-Waterman score: 130; 39.7% identity (68.3% similar) in 63 aa overlap (80-142:181-242) 50 60 70 80 90 100 sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME :: :..: :..::: .:: ::.::. .: sp|P14 LKRKKSSEDSNNINIHQKLTNVALSDNVNNDEDEKKRA-RLVRNRESAQLSRQRKKHYVE 160 170 180 190 200 110 120 130 140 150 160 sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPT .::.. :.. : : ... . ::: :. : sp|P14 ELEDKVRIMHSTIQDLNAKVAYIIAENATLKTQ 210 220 230 240 170 180 190 200 210 220 sp|Q1X LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSA >>sp|Q8CH25|SLTM_MOUSE SAFB-like transcription modulator (1031 aa) initn: 228 init1: 106 opt: 139 Z-score: 134.9 bits: 35.0 E(516081): 5.4 Smith-Waterman score: 139; 35.7% identity (63.1% similar) in 84 aa overlap (73-153:644-724) 50 60 70 80 90 100 sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR- :.: . :.:.: ::. :.: . : sp|Q8C LREHLVRFERLKQAVEFRRRKEIAERERRERERIRIIREREER--ERLQRERERLEIERQ 620 630 640 650 660 670 110 120 130 140 150 sp|Q1X --ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM ::.:.: :.:: :.:..::. . .:... . : : .::: . : :.: sp|Q8C KLERERMERERLERERIRIEQERRREAERIAREREELRRQQQQL-RYEQEKRNSLKRPRD 680 690 700 710 720 730 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS sp|Q8C VDHRRDDPYWSENKKLSLDTEARFGHGSDYRQQSRFLDFSHRERARFPDTASVQSSFERR 740 750 760 770 780 790 >>sp|O81025|P2A03_ARATH Putative protein PHLOEM PROTEIN (463 aa) initn: 79 init1: 49 opt: 134 Z-score: 134.9 bits: 33.8 E(516081): 5.4 Smith-Waterman score: 134; 29.4% identity (57.5% similar) in 153 aa overlap (4-149:135-280) 10 20 30 sp|Q1X MSCDMEKTMSSVDSL--PATPASEVPVLTVSPA :.:. ...:. . : . :: . . sp|O81 KEEESTVNTLQCIFGSQILDYCIVVFTGGDDLEEDDQTLDDYFRAGCPEFLTKVLRLCGG 110 120 130 140 150 160 40 50 60 70 80 sp|Q1X DTSLNSADVKTQEVKPEEKKPAKKR-KSWGQELP-VPKTNLPPRKRAKTEDEKEQRRIER : . : .. : :. : : .. :.. .: : :: : :.... :. :: sp|O81 RKVLFDNKSKDEKKKVEQVKQLLARVENVGEQTGGIPYTYQLHRK-IKEENDERLREEER 170 180 190 200 210 220 90 100 110 120 130 140 sp|Q1X VL--RNRAAAQTSRERKRLEMEKLENEKIQMEQ-QNQFLLQRLSQMEAENNRLSQQLAQL :. .::: :. .. .. : ::: ::.:::. .:. : ..: ::... . :. :. sp|O81 VIESKNRAEAELAEMQQNLLMEK---EKLQMEEAKNK---QLIAQAEANEKLMEQERAKN 230 240 250 260 270 150 160 170 180 190 200 sp|Q1X AAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTL :: sp|O81 RAETELAAVMVEKLQMEEEKNKQLIAQANRMICARDLNIEWSHSEEHWKWVNLDHNISSN 280 290 300 310 320 330 >>sp|P20226|TBP_HUMAN TATA-box-binding protein OS=Homo s (339 aa) initn: 101 init1: 71 opt: 132 Z-score: 134.9 bits: 33.4 E(516081): 5.4 Smith-Waterman score: 132; 24.8% identity (58.4% similar) in 125 aa overlap (91-212:43-161) 70 80 90 100 110 120 sp|Q1X QELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQ ..: . . .:..: .... .... :..: sp|P20 GLASPQGAMTPGIPIFSPMMPYGTGLTPQPIQNTNSLSILEEQQRQQQQQQQQQQQQQQQ 20 30 40 50 60 70 130 140 150 160 170 sp|Q1X QNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFK-QER :.: :. .:.. .... .:: : :: :. : .. :. . : : ::. : sp|P20 QQQQQQQQQQQQQQQQQQQQQQQAVAAAAVQQSTSQQATQGTSGQA-----PQLFHSQTL 80 90 100 110 120 180 190 200 210 220 230 sp|Q1X DELPLE-RIP-FPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS :: : .:.: .. ..: . .::: . sp|P20 TTAPLPGTTPLYPSP-MTPMTPITPATPASESSGIVPQLQNIVSTVNLGCKLDLKTIALR 130 140 150 160 170 180 240 250 260 270 280 290 sp|Q1X DLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVN sp|P20 ARNAEYNPKRFAAVIMRIREPRTTALIFSSGKMVCTGAKSEEQSRLAARKYARVVQKLGF 190 200 210 220 230 240 >>sp|Q4WG58|PAN1_ASPFU Actin cytoskeleton-regulatory com (1467 aa) initn: 53 init1: 53 opt: 141 Z-score: 134.7 bits: 35.5 E(516081): 5.5 Smith-Waterman score: 141; 23.3% identity (51.1% similar) in 227 aa overlap (38-257:1078-1294) 10 20 30 40 50 60 sp|Q1X TMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK :. . .:. :.. . .. ... : sp|Q4W TITAEQAAREQAIREEQQAQEEETNRLEMEAQKREEELLKEKEAQEARLRALEEQVRQGK 1050 1060 1070 1080 1090 1100 70 80 90 100 110 120 sp|Q1X TNLPPRKRAKTEDEKEQRRIERVLR-NRAAAQTSRERKR---LEMEKLENEKIQMEQQNQ .:: : : :. .. : .: .:: . ..::.: ::.:.:..:. . .. sp|Q4W IRKQEEKRRKEEAERLAKEKEAALAAQRAEIERAKERERQLQLELERLDEESSSDDEGPV 1110 1120 1130 1140 1150 1160 130 140 150 160 170 180 sp|Q1X FLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD-EL . : . :: : .. . : .. . ::: .: :. :: : . . sp|Q4W NITP-----EDSTPTQSQLLPTVTPAAPVSAPESEQAGSPEDTSSQAPPVDFKLETESKN 1170 1180 1190 1200 1210 1220 190 200 210 220 230 240 sp|Q1X PLERIPFPTPSLSDYS--PTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK : .: . . . : :. .:: . ..:: : . : . .. : : .. :. sp|Q4W PYFKITHQATDTQVVSSPPVPQPSFTSPKADV--HSTNPFHRLAKQETSKPAFTGSAPLE 1230 1240 1250 1260 1270 1280 250 260 270 280 290 300 sp|Q1X HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS ..: : : .:::.. sp|Q4W RKSR---ARPEADDDWSAAGSEFDSSDDDDDERPGGGSAKQLASILFGTMAPPRPLSAMD 1290 1300 1310 1320 1330 >>sp|B0YC95|PAN1_ASPFC Actin cytoskeleton-regulatory com (1467 aa) initn: 53 init1: 53 opt: 141 Z-score: 134.7 bits: 35.5 E(516081): 5.5 Smith-Waterman score: 141; 23.3% identity (51.1% similar) in 227 aa overlap (38-257:1078-1294) 10 20 30 40 50 60 sp|Q1X TMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPK :. . .:. :.. . .. ... : sp|B0Y TITAEQAAREQAIREEQQAQEEETNRLEMEAQKREEELLKEKEAQEARLRALEEQVRQGK 1050 1060 1070 1080 1090 1100 70 80 90 100 110 120 sp|Q1X TNLPPRKRAKTEDEKEQRRIERVLR-NRAAAQTSRERKR---LEMEKLENEKIQMEQQNQ .:: : : :. .. : .: .:: . ..::.: ::.:.:..:. . .. sp|B0Y IRKQEEKRRKEEAERLAKEKEAALAAQRAEIERAKERERQLQLELERLDEESSSDDEGPV 1110 1120 1130 1140 1150 1160 130 140 150 160 170 180 sp|Q1X FLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD-EL . : . :: : .. . : .. . ::: .: :. :: : . . sp|B0Y NITP-----EDSTPTQSQLLPTVTPAAPVSAPESEQAGSPEDTSSQAPPVDFKLETESKN 1170 1180 1190 1200 1210 1220 190 200 210 220 230 240 sp|Q1X PLERIPFPTPSLSDYS--PTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLK : .: . . . : :. .:: . ..:: : . : . .. : : .. :. sp|B0Y PYFKITHQATDTQVVSSPPVPQPSFTSPKADV--HSTNPFHRLAKQETSKPAFTGSAPLE 1230 1240 1250 1260 1270 1280 250 260 270 280 290 300 sp|Q1X HHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDS ..: : : .:::.. sp|B0Y RKSR---ARPEADDDWSAAGSEFDSSDDDDDERPGGGSAKQLASILFGTMAPPRPLSAMD 1290 1300 1310 1320 1330 >>sp|Q00969|ATF2_RAT Cyclic AMP-dependent transcription (487 aa) initn: 65 init1: 65 opt: 134 Z-score: 134.6 bits: 33.9 E(516081): 5.6 Smith-Waterman score: 134; 26.9% identity (63.9% similar) in 108 aa overlap (41-143:288-394) 20 30 40 50 60 sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEE-KKPAKKRK----SWGQELPV ...: .:. ..:: . : .. : sp|Q00 MRLKAALTQQHPPVTNGDTVKGHGSGLVRAQSEESRPQSLQQPATSTTETPASPAHTTPQ 260 270 280 290 300 310 70 80 90 100 110 120 sp|Q1X PKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFL ... :.:: .:: :.:: . . ::::::. :..... ...::.. .. . : : sp|Q00 TQNTSGRRRRAANEDPDEKRR-KFLERNRAAASRCRQKRKVWVQSLEKKAEDLSSLNGQL 320 330 340 350 360 370 130 140 150 160 170 180 sp|Q1X LQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLE .... .. : .:.: : sp|Q00 QSEVTLLRNEVAQLKQLLLAHKDCPVTAMQKKSGYHTADKDDSSEDLSVPSSPHTEAIQH 380 390 400 410 420 430 >>sp|Q8N8S7|ENAH_HUMAN Protein enabled homolog OS=Homo s (591 aa) initn: 219 init1: 100 opt: 143 Z-score: 141.9 bits: 35.5 E(516081): 2.2 Smith-Waterman score: 143; 31.2% identity (63.4% similar) in 112 aa overlap (35-142:111-219) 10 20 30 40 50 60 sp|Q1X MEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE-L ::: .. . . . ::. ... .:: : sp|Q8N RDARQVYGLNFGSKEDANVFASAMMHALEVLNSQETGPTLPRQNSQLPAQVQNGPSQEEL 90 100 110 120 130 140 70 80 90 100 110 120 sp|Q1X PVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRLEMEKLENEKIQMEQQN . . .: ..: : : :..:.:: .: . : ::.::: :.::.:... :.:. sp|Q8N EIQRRQLQEQQRQK---ELERERLERERMERERLERERLERERLERERLEQEQLERERQE 150 160 170 180 190 130 140 150 160 170 180 sp|Q1X QFLLQRLSQME--AENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERD . .:: ..: ...:: .: sp|Q8N RERQERLERQERLERQERLERQERLDRERQERQERERLERLERERQERERQEQLEREQLE 200 210 220 230 240 250 >>sp|Q6MG48|BAT2_RAT Large proline-rich protein BAT2 OS= (2161 aa) initn: 89 init1: 74 opt: 154 Z-score: 144.7 bits: 37.9 E(516081): 1.5 Smith-Waterman score: 155; 24.2% identity (50.2% similar) in 215 aa overlap (18-229:378-575) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKP .:.::.: .. ...: : . : sp|Q6M RDSDEEGAEGHKDSQSAAGEEPETDGKKGTSPGSELPPPKTAWTENSRPSETEPAAPPIP 350 360 370 380 390 400 50 60 70 80 90 100 sp|Q1X EEKKPAKKRK---SWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERK . : .: .:: : . :: : ::: : : .: :...... : . sp|Q6M KPPPPPPHRGPVGNWGPPGDYPDRGGPPCKPPAPEDEDEAWR-QR--RKQSSSEISLAVE 410 420 430 440 450 460 110 120 130 140 150 160 sp|Q1X RLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPA : . .. :.:. ..:.. ..:.... .... .: :: . .. : :. : sp|Q6M RARRRREEEERRMQEERRAACAEKLKRLD---EKFGAPDKRLKAEPAAPPVTPPAPALPP 470 480 490 500 510 520 170 180 190 200 210 220 sp|Q1X TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLE .. : ::: :: : ::: . :. : . . .. : :: . . sp|Q6M VV-PKETPT-----PPALP--PTPTPTPEKDPEEPAHAPPVQSAPTQ-AGPPAPT--PVS 530 540 550 560 570 230 240 250 260 270 280 sp|Q1X GDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEG : :.: sp|Q6M GGGTASSTSSGSFEASPAEPQLPSKEGPEPPEEVPAPTTPPAPKVEPKGDGVGPTRQPPS 580 590 600 610 620 630 >>sp|P0C5H8|KAPC_EMENI Putative transcription factor kap (278 aa) initn: 70 init1: 70 opt: 152 Z-score: 154.8 bits: 36.8 E(516081): 0.42 Smith-Waterman score: 169; 22.3% identity (51.2% similar) in 260 aa overlap (17-274:49-268) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVK : : :. :.:: : . . .. . sp|P0C DHADQVLHDSLLAAQHLSQHPQQPRPQQPNAQPHHLQPTATTSPRDQNNIDPAISGGAML 20 30 40 50 60 70 50 60 70 80 90 100 sp|Q1X PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL : . ::. . . .: : :: .. .:. .:::: .. :.::. sp|P0C PPSQPPAQPEPTVEDETP------------KTYGKRPLSTSKRAAQNRAAQRAFRQRKES 80 90 100 110 120 110 120 130 140 150 160 sp|Q1X EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTP-MPGSPAT ..::: :... . . . :. . ..::: .: . . .: ... :....: .::. sp|P0C YIRKLE-EQVK---EYEVMSQEYKALQAENYQLREYVINLQSRLLDSQGEVPELPGNIDL 130 140 150 160 170 180 170 180 190 200 210 220 sp|Q1X ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG .: : :. .: :.: .:. . :. : .:. . sp|P0C NQP----------RTEI---SVPQPAP---------RPGQAGASAPPQGSPQSQVSIAND 190 200 210 220 230 240 250 260 270 280 sp|Q1X DGSALP-LFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEG : ..: . . : ...: ... : ::.. : .:: ...:. . : sp|P0C DMNSLNRIAEAGLGMRKHPNEE--AFLSNNFQARRGRGDETADPSETKTEPPTHGLPMVS 230 240 250 260 270 290 300 310 320 330 340 sp|Q1X GDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAG >>sp|Q9M7Q3|AI5L6_ARATH ABSCISIC ACID-INSENSITIVE 5-like (454 aa) initn: 112 init1: 112 opt: 142 Z-score: 142.5 bits: 35.2 E(516081): 2 Smith-Waterman score: 142; 31.7% identity (55.9% similar) in 145 aa overlap (14-145:291-435) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEV-P-VLTVS--PADTSLNSA- : ::: .:: : .: . : ...: .: sp|Q9M QPQQLIQTQERPFPKQTTIAFSNTVDVVNRSQPATQCQEVKPSILGIHNHPMNNNLLQAV 270 280 290 300 310 320 40 50 60 70 80 90 sp|Q1X DVKT----QEVKP-EEKKPAKKRKSW--GQELPVPKTNLPPRKRAKTEDEKEQRRIERVL : :: :.: . .: :: .. ::: :: . . .. .:: .:.. sp|Q9M DFKTGVTVAAVSPGSQMSPDLTPKSALDASLSPVPYMFGRVRKTGAVLEKVIERRQKRMI 330 340 350 360 370 380 100 110 120 130 140 150 sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQ-MEAENNRLSQQLAQLAAEV .:: .: :: ::. .:: : :... :. : .. . :: ..:.: . : : sp|Q9M KNRESAARSRARKQAYTMELEAEIAQLKELNEELQKKQVEIMEKQKNQLLEPLRQPWGMG 390 400 410 420 430 440 160 170 180 190 200 210 sp|Q1X RGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS sp|Q9M CKRQCLRRTLTGPW 450 >>sp|Q6P9R4|ARHGI_MOUSE Rho guanine nucleotide exchange (1021 aa) initn: 61 init1: 61 opt: 153 Z-score: 148.1 bits: 37.4 E(516081): 0.99 Smith-Waterman score: 153; 24.0% identity (52.8% similar) in 246 aa overlap (9-250:628-858) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVP--VLTVSPADTSLN : :..:::.. :. : :.: ::. sp|Q6P WQGPASSPDSRPCDNSAPSGCCEESPQAVEMPSTESLPTVLELELVHRVQTLSQLLLSLQ 600 610 620 630 640 650 40 50 60 70 80 90 sp|Q1X SADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAA .. . :. : .. : ... .: . :: ....:: .:. ..::. sp|Q6P AV-IAQQDSYVEMQRTAIQEREKQFRLQSTRGNL-------LLEQERQRNFEKQREERAG 660 670 680 690 700 100 110 120 130 140 150 sp|Q1X AQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRAN .. . . : :... : :. ...:. .. ::.. :.: .. :.: : .:.. .: sp|Q6P VEKLQSQLRQEQQRWERERARQQQELELAGARLQEREGEARQMRQRLDQERTELERQRQA 710 720 730 740 750 760 160 170 180 190 200 210 sp|Q1X TPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHP . . .::..: : : : . .: : .:::.. ... : sp|Q6P YQHDLERLREAQRAVD----RERERLELLR-RFKKQNT--VPGALPPEVLAEAQPASHPP 770 780 790 800 810 820 220 230 240 250 260 270 sp|Q1X AVSVAGLEGDGS-ALPLFDLGSDLKHHS-TDDVAAPLSDDDFNRLFHGDSSVEPDSSVFE . . :::: .. : :: . : . :.: : sp|Q6P SFNGDGLEGHSAPAKAPGTQGSAMLHGTGPDNVERPEVARWDSAPPESRPAKSDVPIQLL 830 840 850 860 870 880 280 290 300 310 320 330 sp|Q1X DGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTT sp|Q6P SATNQIQRQTAVQQQIPTKLAASTKGGKEKGSKSRGSQRWESSASFDLKQQLLLSKFIGK 890 900 910 920 930 940 >>sp|Q9NWH9|SLTM_HUMAN SAFB-like transcription modulator (1034 aa) initn: 105 init1: 105 opt: 138 Z-score: 134.0 bits: 34.8 E(516081): 6.1 Smith-Waterman score: 138; 35.7% identity (63.1% similar) in 84 aa overlap (73-153:645-725) 50 60 70 80 90 100 sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR- :.: . :.:.: ::. :.: . : sp|Q9N LREHLVRFERLRRAMELRRRREIAERERRERERIRIIREREER--ERLQRERERLEIERQ 620 630 640 650 660 670 110 120 130 140 150 sp|Q1X --ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM ::.:.: :.:: :.:..::. . .:... . : : .::: . : :.: sp|Q9N KLERERMERERLERERIRIEQERRKEAERIAREREELRRQQQQL-RYEQEKRNSLKRPRD 680 690 700 710 720 730 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS sp|Q9N VDHRRDDPYWSENKKLSLDTDARFGHGSDYSRQQNRFNDFDHRERGRFPESSAVQSSSFE 740 750 760 770 780 790 >>sp|O60308|K0562_HUMAN Uncharacterized protein KIAA0562 (925 aa) initn: 42 init1: 42 opt: 137 Z-score: 133.7 bits: 34.6 E(516081): 6.3 Smith-Waterman score: 137; 25.1% identity (49.8% similar) in 271 aa overlap (70-317:217-472) 40 50 60 70 80 90 sp|Q1X VKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQT : ::: .. :. . ... . : : sp|O60 YARKSDYISPLDDLAFDMYQDPEVAQIIRKLDERKREAVQKERYDY-AKKLKQAIADLQK 190 200 210 220 230 240 100 110 120 130 140 150 sp|Q1X SRER-KRLEMEK---LENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRA :: : :.:: .:.: .. .... :.. :..:: . . . : ::. sp|O60 VGERLGRYEVEKRCAVEKEDYDLAKEKK---QQMEQYRAEVYEQLELHSLLDAELMRRPF 250 260 270 280 290 300 160 170 180 190 200 sp|Q1X NTPM-P----GSPATASPTLTPTLFK-QERDELPLERIPFPTPSLSDYSPTLKPS----- . :. : ::: .: :.: . .:: :: . :.:: :..:. sp|O60 DLPLQPLARSGSPCHQKPM--PSLPQLEERGTENQFAEPFLQEKPSSYSLTISPQHSAVD 310 320 330 340 350 360 210 220 230 240 250 260 sp|Q1X TLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAP-LSDDDFNRLFHGD : ..: :: ... .: : :: ...: . :. : .:. :.. .: sp|O60 PLLPATD--PHPKINAESLPYDERPLPA------IRKHYGEAVVEPEMSNADISDARRGG 370 380 390 400 410 270 280 290 300 310 sp|Q1X SSVEPD----SSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPV---TLEGIEMAHGLPD ::. ... : . :.::: : : : . . .. . . . . .:: : : sp|O60 MLGEPEPLTEKALREASSAIDVL-GETLVAEAYCKTWSYREDALLALSKKLMEMPVGTPK 420 430 440 450 460 470 320 330 340 sp|Q1X ETTCKTSSVQPGFGASTTRCDGQGIAAGC : sp|O60 EDLKNTLRASVFLVRRAIKDIVTSVFQASLKLLKMIITQYIPKHKLSKLETAHCVERTIP 480 490 500 510 520 530 >>sp|A2Z0Q0|HOX25_ORYSI Homeobox-leucine zipper protein (260 aa) initn: 43 init1: 43 opt: 129 Z-score: 133.6 bits: 32.8 E(516081): 6.4 Smith-Waterman score: 129; 24.1% identity (57.8% similar) in 249 aa overlap (53-294:21-254) 30 40 50 60 70 80 sp|Q1X VPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEK :.::. .... . . .. .:: : : :. sp|A2Z MEDLVDELYGVDEQGSSSAAARKRRLTAEQVRALERSFEEEKR-KLEPER 10 20 30 40 90 100 110 120 130 140 sp|Q1X EQRRIER--VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLS ... .: . ..:. . .: : . ..:: . ... .. :: . . :.:. : sp|A2Z KSELARRLGIAPRQVAVWFQNRRARWKTKQLELDFDRLRAAHDELLAGRAALAADNESLR 50 60 70 80 90 100 150 160 170 180 190 200 sp|Q1X QQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPT .:. :. ..... ...: : ::: : : .:. .. .. . ::. : : . . sp|A2Z SQVILLTEKLQAN-GKSPSP-SPAPAEQTAVPAAPESAKS-FQLEE----GRCLYDAAGS 110 120 130 140 150 160 210 220 230 240 250 sp|Q1X LKPSTLAESSDVAQHPAVSVAGLEGDGSALP--LFDLGSDLKHHSTDDVAAPLSDDDF-- .: . .. ::. ::. ::. .. .. : : . . : :: .. ::::. sp|A2Z TT-TTNGGGGGVAM-PAARVAAARAASNDSPESYFAGARSPPSSSEDDCGGAGSDDDYPS 170 180 190 200 210 220 260 270 280 290 300 310 sp|Q1X -NRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLP . :. :... :. :: ..: : ..: : :..: sp|A2Z SSVLLPVDATLVGDA--FEHAVAATV--AADEEA-PLNSWEWFWN 230 240 250 260 320 330 340 sp|Q1X DETTCKTSSVQPGFGASTTRCDGQGIAAGC >>sp|Q6Y7W6|PERQ2_HUMAN PERQ amino acid-rich with GYF do (1299 aa) initn: 85 init1: 85 opt: 140 Z-score: 134.5 bits: 35.2 E(516081): 5.7 Smith-Waterman score: 140; 31.2% identity (58.9% similar) in 141 aa overlap (48-180:825-957) 20 30 40 50 60 70 sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK :... ..:.. :: . : . : :. sp|Q6Y RRQREQEIALRRQREEEERQQQEEALRRLEERRREEEERRK--QEELLRKQEEEAAKWAR 800 810 820 830 840 850 80 90 100 110 120 130 sp|Q1X TEDEKEQRRIERVLRNRAAAQTSR----ERKRLEME-KLENEKIQMEQQNQFLLQRLSQM :.: ..: : :: . : : :::: :.: . ..: ....::.: :.::.:. sp|Q6Y EEEEAQRRLEENRLRMEEEAARLRHEEEERKRKELEVQRQKELMRQRQQQQEALRRLQQQ 860 870 880 890 900 910 140 150 160 170 180 sp|Q1X EAENNRLSQQLAQL---AAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF . . :::::. .. . :...:: : :: : . : ..::. sp|Q6Y QQQ-----QQLAQMKLPSSSTWGQQSNTTACQSQATLSLAEIQKL-EEERERQLREEQRR 920 930 940 950 960 190 200 210 220 230 240 sp|Q1X PTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAA sp|Q6Y QQRELMKALQQQQQQQQQKLSGWGNVSKPSGTTKSLLEIQQEEARQMQKQQQQQQQHQQP 970 980 990 1000 1010 1020 >>sp|Q4WA21|KAPC_ASPFU Putative transcription factor kap (280 aa) initn: 101 init1: 67 opt: 132 Z-score: 136.0 bits: 33.3 E(516081): 4.7 Smith-Waterman score: 132; 23.7% identity (54.5% similar) in 156 aa overlap (66-216:75-214) 40 50 60 70 80 90 sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP----RKRAKTEDEKEQRRIERVL :.: : .. :: .. .:. sp|Q4W QPPHMQPNTPARDQNNIDPAISGATMLTGPPQTPTQPDVTGQETPKTYGKRPLSTSKRAA 50 60 70 80 90 100 100 110 120 130 140 150 sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR .:::: .. :.::. ....::. :.. .. . . .. ..::: .: . . .: ... sp|Q4W QNRAAQRAFRQRKEAHIRELEG-KVKAYES---MGEAIKALQAENYQLREYIINLQSRLL 110 120 130 140 150 160 160 170 180 190 200 210 sp|Q1X GSRANTP-MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESS :....: .::. ..: :.:.:. :: . . : :. : sp|Q4W DSQGEVPELPGNIDLSQP----------RSEIPVPPIPNSGTATTTAPPPTAPQQPQPSH 170 180 190 200 210 220 230 240 250 260 270 sp|Q1X DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDS :: : sp|Q4W --AQAPTSNDDMNSLNRIAVAGLGMRKPPTEEANYLGNNFQAQARRVRPDEGQPEASELP 220 230 240 250 260 >>sp|Q9QXL1|KI21B_MOUSE Kinesin-like protein KIF21B OS=M (1668 aa) initn: 66 init1: 66 opt: 140 Z-score: 133.1 bits: 35.3 E(516081): 6.9 Smith-Waterman score: 140; 25.5% identity (62.0% similar) in 137 aa overlap (41-169:724-856) 20 30 40 50 60 70 sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNL : : .. :. . :... . .:: .... sp|Q9Q STMECYTEEKANKIKADYEKRLREMNRDLQKLQAAQKEHARLLKNQSRYERELKKLQAEV 700 710 720 730 740 750 80 90 100 110 120 sp|Q1X PPRKRAKT------EDEKEQRRIERVLRNRAAAQTSRERKRLEME--KLENEKIQMEQQN :.::. ..:...::. .. ::: :: ..:..: :.. ::..: .:. sp|Q9Q AEMKKAKVALMKQMREEQQRRRLVETKRNREIAQLKKEQRRQEFQIRALESQK----RQQ 760 770 780 790 800 130 140 150 160 170 180 sp|Q1X QFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDEL ...:.: .: . ::.. ... .: : . . :. ..:: : sp|Q9Q EIVLRRKTQEVSALRRLAKPMSERVAGRVGLKPPNMDSGAEVSASTTSSEAESGARSVSS 810 820 830 840 850 860 190 200 210 220 230 240 sp|Q1X PLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHH sp|Q9Q IVRQWNRKIDHFLGDRPTATVNGGRPARKKFQKKGASQSFSKAARLKWQSLERRIIDIVM 870 880 890 900 910 920 >>sp|P21127|CD11B_HUMAN Cell division protein kinase 11B (795 aa) initn: 68 init1: 68 opt: 135 Z-score: 132.7 bits: 34.2 E(516081): 7.2 Smith-Waterman score: 135; 27.6% identity (53.0% similar) in 181 aa overlap (41-208:96-272) 20 30 40 50 60 sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE------LP :... : :..: ....: . : . sp|P21 PYRREDSMEDRGEEDDSLAIKPPQQMSRKEKVHHRKDEKRKEKRRHRSHSAEGGKHARVK 70 80 90 100 110 120 70 80 90 100 110 120 sp|Q1X VPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERKRLEM--EKLENEKIQMEQQ . . ::: . :..: .:. :: : . : . :: :: :::. .: : :. . ::: sp|P21 EKEREHERRKRHREEQDKARREWERQKRREMAREHSRRERDRLEQLERKRERERKMREQQ 130 140 150 160 170 180 130 140 150 160 170 sp|Q1X NQFLLQRLSQMEAENNRLSQQLA-QLAAEVRGSRAN--TPMPGSPATASPTLTPTLFKQE .. :. . .::. : .. ...:. : : . . .: . :: : .: sp|P21 KEQREQKERERRAEERRKEREARREVSAHHRTMREDYSDKVKASHWSRSPPRPP----RE 190 200 210 220 230 240 180 190 200 210 220 230 sp|Q1X RDELPLERIPFPT-PSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGS : :: : : . :. .. :: . : sp|P21 RFELGDGRKPGEARPARAQKPAQLKEEKMEERDLLSDLQDISDSERKTSSAESSSAESGS 250 260 270 280 290 300 240 250 260 270 280 290 sp|Q1X DLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVN sp|P21 GSEEEEEEEEEEEEEGSTSEESEEEEEEEEEEEEETGSNSEEASEQSAEEVSEEEMSEDE 310 320 330 340 350 360 >>sp|Q789F3|MAF_CHICK Transcription factor Maf OS=Gallus (359 aa) initn: 87 init1: 87 opt: 130 Z-score: 132.7 bits: 33.0 E(516081): 7.2 Smith-Waterman score: 130; 30.5% identity (67.1% similar) in 82 aa overlap (83-163:276-355) 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE .:.: :.:.::. ::. : .. . . :: sp|Q78 RFSDEQLVTMSVRELNRQLRGVSKEEVIRLKQKR--RTLKNRGYAQSCRFKRVQQRHVLE 250 260 270 280 290 300 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLT .:: :. :: . : :..:.. : . ... .:... : . ... :.:: sp|Q78 SEKNQLLQQVEHLKQEISRLVRERDAYKEKYEKLVSNGFRENGSSSDNPSSPEFFM 310 320 330 340 350 180 190 200 210 220 230 sp|Q1X PTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP >>sp|Q6A000|K0753_MOUSE Uncharacterized protein KIAA0753 (959 aa) initn: 70 init1: 70 opt: 136 Z-score: 132.5 bits: 34.4 E(516081): 7.3 Smith-Waterman score: 136; 25.7% identity (51.0% similar) in 253 aa overlap (39-269:542-766) 10 20 30 40 50 60 sp|Q1X MSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRK--SWGQELPVP : .. . :. .: . : .: sp|Q6A RNRPNQPYSKSRLQQTTVSSRLKMNRQPMKDHRAPWIPPNPTSPPASPKCAAWM------ 520 530 540 550 560 70 80 90 100 110 sp|Q1X KTNLPPRKRAKTED-EKEQRRIERVLRNRAAAQTSR-------ERKRL-EMEKLENEKIQ :.. :: :: .. ..:. . : ::. : ...: ::: :.:.:: .... sp|Q6A KVKYSPRDAAKEQSLQQEDIHKESQLRGDAEQEAARLSWPDAESSKRLKELEELEAKEME 570 580 590 600 610 620 120 130 140 150 160 170 sp|Q1X MEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEV-----RGSRANTPMPGSPATAS-PTLT .:. :::. .:::..: ...: .: :: . : . : . . : : sp|Q6A RKQK-----QRLNWLEAETSRRTKELDELKAEEMDRLQKLSVSATQLADKVEEAVLERLK 630 640 650 660 670 680 180 190 200 210 220 230 sp|Q1X PTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP : :.: .: . .: . :.: .:: : . : .:: ... . .. .: sp|Q6A PLLIKAQRVNSSVE----ANSHLKD-----RPSRHAAA---AAQPAEQASDVPFESRNIP 690 700 710 720 240 250 260 270 280 sp|Q1X -----LFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGD : : . .: .. : . :... :: :::. :: sp|Q6A QLRDCLEDTAHELWARTQDKI---LGSETSARL--GDSKDSPDLETMMLRMEEMEKYQET 730 740 750 760 770 780 290 300 310 320 330 340 sp|Q1X LSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC sp|Q6A VRQRYNKIVYADPHLWMHEERNDQNTPAVSEGPLASHPIKITKTATQKCPAVNILLERPC 790 800 810 820 830 840 >>sp|P23091|MAF_AVIS4 Transforming protein Maf OS=Avian (369 aa) initn: 87 init1: 87 opt: 130 Z-score: 132.5 bits: 33.1 E(516081): 7.4 Smith-Waterman score: 130; 30.5% identity (67.1% similar) in 82 aa overlap (83-163:276-355) 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE .:.: :.:.::. ::. : .. . . :: sp|P23 RFSDEQLVTMSMRELNRQLRGVSKEEVIRLKQKR--RTLKNRGYAQSCRFKRVQQRHVLE 250 260 270 280 290 300 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLT .:: :. :: . : :..:.. : . ... .:... : . ... :.:: sp|P23 SEKNQLLQQVEHLKQEISRLVRERDAYKEKYEKLVSNGFRENGSSSDNPSSPEFFMYPRE 310 320 330 340 350 360 180 190 200 210 220 230 sp|Q1X PTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP sp|P23 SSTTVM >>sp|Q5RCJ1|CIP4_PONAB Cdc42-interacting protein 4 OS=Po (601 aa) initn: 111 init1: 73 opt: 149 Z-score: 147.5 bits: 36.5 E(516081): 1.1 Smith-Waterman score: 149; 25.4% identity (54.2% similar) in 177 aa overlap (29-186:294-463) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR-K .:.:.::.. .. .:: . :...: : sp|Q5R DSQVLIELHKSGFARPGDVEFEDFSQPMNRAPSDSSLGTP----SDGRPELRGPGRSRTK 270 280 290 300 310 60 70 80 90 100 sp|Q1X SW--GQEL------------PVPKT--NLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR : :.. :::.. : :: :. . .: . .. : :. : sp|Q5R RWPFGKKNKPRPPPLSPLGGPVPSALPNGPPSPRSGRDPLAILSEISKSVKPRLASFRSL 320 330 340 350 360 370 110 120 130 140 150 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA--EVRGSRANTPM . .: . . .. ::: . : : :.: .. .:.... : : ... .::. sp|Q5R RGSRGTVVTEDFSHLPPEQQRKRLQQ---QLEERSRELQKEVDQREALKKMKDVYEKTPQ 380 390 400 410 420 430 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS :.::. : .: :: . :: .: ... sp|Q5R MGDPASLEPQITETLSNIERLKLEVQKYEAWLAEAESRVLSNRGDSLSRHARPPDPPTSA 440 450 460 470 480 490 >>sp|P23050|FOS_AVINK p55-v-Fos-transforming protein OS= (322 aa) initn: 77 init1: 46 opt: 129 Z-score: 132.4 bits: 32.8 E(516081): 7.5 Smith-Waterman score: 129; 22.5% identity (49.7% similar) in 306 aa overlap (2-291:12-294) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL--TVSPADTSLNSADVKTQEVKPE : .. :...... : :.: .:.:... . : . sp|P23 SQDFCTDLAVSSANFVPTVTAISTSPDLQWLVQPTLISSVAPSQNRGHPYGVPAPAPPAA 10 20 30 40 50 60 50 60 70 80 90 100 sp|Q1X EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEM ..:: . :. . . . . . . .:.:.:::.: ::. :: :.:.: sp|P23 YSRPAVLKAPGGRGQSIGRRG---KVEQLSPEEEEKRRIRRE-RNKMAAAKCRNRRRELT 70 80 90 100 110 110 120 130 140 150 sp|Q1X EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA------QLAAEVRGSR---ANTPM . :. : :.:.... : ..... :...: :: .. :.: :. : : . sp|P23 DTLQAETDQLEEEKSALQAEIANLLKEKEKLEFILAAHRPACKMPEELRFSEELAAATAL 120 130 140 150 160 170 160 170 180 190 200 210 sp|Q1X P-GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTL-AESSDVAQHPA :.: ::. . : ::: . :.. :. . : :: : sp|P23 DLGAP---SPAAAEEAFA-----LPL--MTEAPPAVPPKEPSGSGLELKAEPFD----EL 180 190 200 210 220 220 230 240 250 260 270 sp|Q1X VSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPL---SDDDFNRLFHGDSSVEPDSSVFE . :: . . ..: .:: . . ...: :: : ... : . : :.. sp|P23 LFSAGPREASRSVPDMDLPGASSFYASD--WEPLGAGSGGELEPLCTPVVTCTPCPSTYT 230 240 250 260 270 280 280 290 300 310 320 330 sp|Q1X DGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTT . ..: :. .::: sp|P23 STFVFTYPEA---DAFPSCAAAHRKGSSSNEPSSDSLSSPTLLAL 290 300 310 320 >>sp|Q80YR5|SAFB2_MOUSE Scaffold attachment factor B2 OS (991 aa) initn: 94 init1: 94 opt: 146 Z-score: 141.7 bits: 36.2 E(516081): 2.3 Smith-Waterman score: 146; 26.6% identity (49.0% similar) in 263 aa overlap (5-245:610-858) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTS ::.:. .:. . :. : . . : : : sp|Q80 PEDIKKEKDQDELTPGAAGHSRVTKSGSRGMERTVV-MDKSKGEPVISVKATSRSK-DRS 580 590 600 610 620 630 40 50 60 70 80 sp|Q1X LNSADVKTQ-----EVKPEEK-KPAKKRKSWGQ-ELPVPKTNLPPRKRAKTEDEKEQR-- .: : :.. .. .: : ..:. : : . .:. :.: . . :.::: sp|Q80 SKSQDRKSEGREKRDILSFDKIKEQRERERQRQREREIRETE---RRREREQREREQRLD 640 650 660 670 680 690 90 100 110 120 130 sp|Q1X ----RIE--RVLRNRAAAQTSR---ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN : : :. :.: : .: ::.::: :.:: :....:.. . ::. . : sp|Q80 AFQERREKARLQRERMQLQCQRQRLERERLERERLERERMRVERERRKEQQRIMR---ER 700 710 720 730 740 750 140 150 160 170 180 190 sp|Q1X NRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPS--L ..: .: :: :: . :. : . : . .: : . :: :. . sp|Q80 EELRRQQEQLRAEQERRALRRPYD-LDARRDDGYWP---EGKRAALEDRYRDFPRPDHRF 760 770 780 790 800 200 210 220 230 240 250 sp|Q1X SDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP--LFDLGSDLKHHSTDDVAAPLS :.. . . : . . : : ::. : . : :.::. : sp|Q80 HDFDHRDRGHYQEHVIDRRDGSRTRVE--ERDGQYYPDDQHSHGRLLEHHAWDSGDGWHG 810 820 830 840 850 860 260 270 280 290 300 310 sp|Q1X DDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAH sp|Q80 YSSDKKLNEGQGLPPPPRVSREWAEHSSQLEEQQVPVWHSAVDTNMTGHEHIRWRGAERG 870 880 890 900 910 920 >>sp|Q6ZSZ5|ARHGI_HUMAN Rho guanine nucleotide exchange (1173 aa) initn: 100 init1: 65 opt: 137 Z-score: 132.3 bits: 34.7 E(516081): 7.5 Smith-Waterman score: 137; 25.3% identity (53.7% similar) in 190 aa overlap (80-267:851-1029) 50 60 70 80 90 100 sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME ....:: .:. ..::: . . . : :.. sp|Q6Z QDSYVETQRAAIQEREKQFRLQSTRGNLLLEQERQRNFEKQREERAALEKLQSQLRHEQQ 830 840 850 860 870 880 110 120 130 140 150 160 sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPT . : :. ..:. . ::.. :.: .: ..: : ::.. .: . sp|Q6Z RWERERQWQHQELERAGARLQEREGEARQLRERLEQERAELERQRQAYQHDLERLREAQR 890 900 910 920 930 940 170 180 190 200 210 220 sp|Q1X LTPTLFKQERDELPLERIPFPTPSLSDYSP-TLKPSTLAESSDVAQHPAVSVAGLEGDG- . ..::..: : : . .. .: .: :.::::.. .. :. . :::: sp|Q6Z AV----ERERERLELLR----RLKKQNTAPGALPPDTLAEAQPPSHPPSFNGEGLEGPRV 950 960 970 980 990 230 240 250 260 270 280 sp|Q1X SALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDL : :: : .. .:: : .:: ..: .. sp|Q6Z SMLP---SGVGPEYAERPEVARRDSAPTESRLAKSDVPIQLLSATNQFQRQAAVQQQIPT 1000 1010 1020 1030 1040 290 300 310 320 330 340 sp|Q1X SAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC sp|Q6Z KLAASTKGGKDKGGKSRGSQRWESSASFDLKQQLLLNKLMGKDESTSRNRRSLSPILPGR 1050 1060 1070 1080 1090 1100 >>sp|O70191|ATF5_MOUSE Cyclic AMP-dependent transcriptio (283 aa) initn: 57 init1: 57 opt: 129 Z-score: 133.1 bits: 32.8 E(516081): 6.8 Smith-Waterman score: 132; 28.4% identity (52.7% similar) in 148 aa overlap (8-155:155-277) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNS :....: : . ::. .:.:..:.. sp|O70 PSPPPPPPPAAAPSLPLPLPLPTFDLPQPPTLDTLDLLAVYCRSEA-----GPGDSGLST 130 140 150 160 170 40 50 60 70 80 90 sp|Q1X ADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA : : : : :: : : . :.:. ...:.. .. :..:: sp|O70 LPVPQQ---PPPLAP----------LPSPARPAPYPSPASTRGDRKQKKRDQ---NKSAA 180 190 200 210 220 100 110 120 130 140 150 sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANT :.::: : : ::.: .: .:. : .: ..: : : . .: :: .:. sp|O70 LRYRQRKRAEGEALEGECQGLEARNRELRERAESVEREI----QYVKDLLIEVYKARSQR 230 240 250 260 270 160 170 180 190 200 210 sp|Q1X PMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPA sp|O70 TRST 280 >>sp|A6NC98|CC88B_HUMAN Coiled-coil domain-containing pr (1476 aa) initn: 67 init1: 67 opt: 146 Z-score: 139.4 bits: 36.3 E(516081): 3 Smith-Waterman score: 146; 28.2% identity (55.9% similar) in 195 aa overlap (6-186:276-466) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSL ::. .:: . . :. . . .: sp|A6N RAPAEGPSHHLALQLANAKAQLRRLRQELEEKAELLLDSQAEVQGLEAEIRRLRQEAQAL 250 260 270 280 290 300 40 50 60 70 80 90 sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP-RKRAKT-EDEKEQRRIERVLRN :...: :. :: . ..: . .:: . .: :.: .. : : : . :::: . sp|A6N -SGQAKRAELYREEAEALRERAG---RLPRLQEELRRCRERLQAAEAYKSQLEEERVLSG 310 320 330 340 350 360 100 110 120 130 140 sp|Q1X RAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQ-RLSQMEAENNRLSQQLAQLAAE--- :. . ...:: . . ... :....::. ::.. .:: . : .:. ::: : sp|A6N VLEASKALLEEQLEAARERCARLHETQRENLLLRTRLGEAHAELDSLRHQVDQLAEENVE 370 380 390 400 410 420 150 160 170 180 190 200 sp|Q1X --VRGSRANTPMPGSP-----ATASPTLTPTLFKQERDEL-PLERIPFPTPSLSDYSPTL .. .:. : :::: : :.:.: . . : .: ::: sp|A6N LELELQRSLEPPPGSPGEAPLAGAAPSLQDEVREAEAGRLRTLERENRELRGLLQVLQGQ 430 440 450 460 470 480 210 220 230 240 250 260 sp|Q1X KPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFH sp|A6N PGGQHPLLEAPREDPVLPVLEEAPQTPVAFDHSPQGLVQKARDGGPQALDLAPPALDSVL 490 500 510 520 530 540 >>sp|B0WYY2|MOEH_CULQU Moesin/ezrin/radixin homolog 1 OS (572 aa) initn: 83 init1: 83 opt: 132 Z-score: 131.8 bits: 33.6 E(516081): 8 Smith-Waterman score: 132; 23.7% identity (61.0% similar) in 118 aa overlap (36-151:294-411) 10 20 30 40 50 60 sp|Q1X EKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPV .. ::. .... .:.: ::... .: . sp|B0W VFFAPRVRINKRILALCMGNHELYMRRRKPDTIDVQQMKAQAREEKNAKQQEREKLQLAL 270 280 290 300 310 320 70 80 90 100 110 120 sp|Q1X PKTNLPPRKRAKTEDE--KEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQ . .:. . ::. . :...:: : :: .: . ....:. : ..::... sp|B0W AARERAEKKQQEYEDRIRNMQEEMERSQANLIEAQDMIRRLEEQLKQLQAAKDDLEQRQN 330 340 350 360 370 380 130 140 150 160 170 180 sp|Q1X FLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELP : ....: .: . . :.: :.: sp|B0W ELQVMITRLEETKNMEAAERAKLEDEIRMKQEEVHKIQEEVSVKDSETKRLQEEVEEARR 390 400 410 420 430 440 >>sp|P11939|FOS_CHICK Proto-oncogene c-Fos OS=Gallus gal (367 aa) initn: 77 init1: 46 opt: 129 Z-score: 131.6 bits: 32.9 E(516081): 8.3 Smith-Waterman score: 129; 22.5% identity (49.7% similar) in 306 aa overlap (2-291:57-339) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL--TVS : .. :...... : :.: .:. sp|P11 LTYYPSPADSFSSMGSPVNSQDFCTDLAVSSANFVPTVTAISTSPDLQWLVQPTLISSVA 30 40 50 60 70 80 30 40 50 60 70 80 sp|Q1X PADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIER :... . : . ..:: . :. . . . . . . .:.:.:::.: sp|P11 PSQNRGHPYGVPAPAPPAAYSRPAVLKAPGGRGQSIGRRG---KVEQLSPEEEEKRRIRR 90 100 110 120 130 140 90 100 110 120 130 140 sp|Q1X VLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLA----- ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|P11 E-RNKMAAAKCRNRRRELTDTLQAETDQLEEEKSALQAEIANLLKEKEKLEFILAAHRPA 150 160 170 180 190 200 150 160 170 180 190 sp|Q1X -QLAAEVRGSR---ANTPMP-GSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSP .. :.: :. : : . :.: ::. . : ::: . :.. : sp|P11 CKMPEELRFSEELAAATALDLGAP---SPAAAEEAFA-----LPL--MTEAPPAVPPKEP 210 220 230 240 250 200 210 220 230 240 250 sp|Q1X TLKPSTL-AESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPL---SDDD . . : :: : . :: . . ..: .:: . . ...: :: : . sp|P11 SGSGLELKAEPFD----ELLFSAGPREASRSVPDMDLPGASSFYASD--WEPLGAGSGGE 260 270 280 290 300 260 270 280 290 300 310 sp|Q1X FNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLP .. : . : :.. . ..: :. .::: sp|P11 LEPLCTPVVTCTPCPSTYTSTFVFTYPEA---DAFPSCAAAHRKGSSSNEPSSDSLSSPT 310 320 330 340 350 360 320 330 340 sp|Q1X DETTCKTSSVQPGFGASTTRCDGQGIAAGC sp|P11 LLAL >>sp|Q9XUS2|MED29_CAEEL Mediator of RNA polymerase II tr (441 aa) initn: 138 init1: 68 opt: 130 Z-score: 131.5 bits: 33.1 E(516081): 8.4 Smith-Waterman score: 130; 26.2% identity (53.9% similar) in 141 aa overlap (112-243:13-152) 90 100 110 120 130 140 sp|Q1X KEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAEN-NRLS ..... :.::.: ..: .::. .. .. sp|Q9X MSGQGPPPSMTPQQQHMLMQQQQQQQMMRQQQMQQQQMQQQR 10 20 30 40 150 160 170 180 190 sp|Q1X QQLAQLAAEVRGSRANTP--MP--GSPATAS----PTLTPTLFKQERDELPLERIPFPTP :: : :. .:: :: .: :::. : : : : : :. : .. :. sp|Q9X QQQIQQQAQQPYQRARTPQMVPQGGSPGGAHLQMHPHLQPQGQMQPRSPLVGAQLQAPSS 50 60 70 80 90 100 200 210 220 230 240 250 sp|Q1X SLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLS . .:: :. . .. . : .. . . ::. : .. .:.: : sp|Q9X VPTAANPTT-PQMMQQQMGMNQPMSLPPTHVSRPGSVAPPSSVPVNLQHTSGAPGLPGSQ 110 120 130 140 150 160 260 270 280 290 300 310 sp|Q1X DDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAH sp|Q9X MEHQYPMHLQPQQQTLSRPGSQQSQHIQQPGSIQRPGSVLAPGSIPPGGPASQTGPQSIQ 170 180 190 200 210 220 >>sp|A1D9Z7|KAPC_NEOFI Putative transcription factor kap (280 aa) initn: 101 init1: 67 opt: 131 Z-score: 135.1 bits: 33.1 E(516081): 5.3 Smith-Waterman score: 131; 23.4% identity (55.0% similar) in 171 aa overlap (66-223:75-231) 40 50 60 70 80 90 sp|Q1X NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPP----RKRAKTEDEKEQRRIERVL :.: : .. :: .. .:. sp|A1D QPPHMQPNTPARDQNNIDPAISGATMLTGPPQTPTQPDVTGQETPKTYGKRPLSTSKRAA 50 60 70 80 90 100 100 110 120 130 140 150 sp|Q1X RNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVR .:::: .. :.::. ....::. :.. .. . . .. ..::: .: . . .: ... sp|A1D QNRAAQRAFRQRKEAHIRELEG-KVKAYEN---MGEAIKALQAENYQLREYIINLQSRLL 110 120 130 140 150 160 160 170 180 190 200 sp|Q1X GSRANTP-MPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPS------ :....: .::. ..: :.:.:. :: . . : :. sp|A1D DSQGEVPELPGNIDLSQP----------RSEIPVPPIPNSGTTTTAAPPPTAPQQPQPPH 170 180 190 200 210 210 220 230 240 250 260 sp|Q1X TLAESS--DVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHG . : .: :. . ..:::: sp|A1D AQAPTSNDDMNSLNRIAVAGLGMRKPPTEEANYLGNNFQAQARRVRPDEGQTEASELPKQ 220 230 240 250 260 270 >>sp|P29176|FOSX_MSVFR Transforming protein v-Fos/v-Fox (244 aa) initn: 82 init1: 50 opt: 132 Z-score: 136.8 bits: 33.3 E(516081): 4.2 Smith-Waterman score: 132; 23.7% identity (49.6% similar) in 224 aa overlap (2-222:33-242) 10 20 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVL--TVS : .. : ..... : :.: .:. sp|P29 LSYYHSPADSFSSMGSPVNTQDFCADLSVSSANFIPTETAISTSPDLQWLVQPTLVSSVA 10 20 30 40 50 60 30 40 50 60 70 80 sp|Q1X PADTSL-NSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIE :..: . . :: . . : : :. . . . . . . .:. .:::. sp|P29 PSQTRAPHPYGLPTQSAGAYARAGMVKTVSGGRAQSIGRRG---KVEQLSPEEEVKRRIR 70 80 90 100 110 90 100 110 120 130 140 sp|Q1X RVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA : ::. :: :.:.: . :. : :.:.... : ..... :...: :: sp|P29 RE-RNKMAAAKCRNRRRELTDTLQAETDQLEDEKSALQTEIANLLKEKEKLEFILAAHRP 120 130 140 150 160 170 150 160 170 180 190 200 sp|Q1X EVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAE . . .: ..:: :: : ::: : : ::: . .. . sp|P29 ACKIPD-DLGFPEEMSVASLDLTGGL-------LPLLNDPEPKPSLEPVKSSFDDFLFPA 180 190 200 210 220 230 210 220 230 240 250 260 sp|Q1X SSDVAQHPAVSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEP :: .. .:.:: sp|P29 SS--GHSGFISMAGWQ 240 >>sp|Q09458|YQ37_CAEEL Uncharacterized protein C09F5.7 O (395 aa) initn: 45 init1: 45 opt: 129 Z-score: 131.2 bits: 32.9 E(516081): 8.7 Smith-Waterman score: 129; 23.6% identity (55.3% similar) in 208 aa overlap (30-227:29-229) 10 20 30 40 50 60 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWG : :..: .: ... : :: .:: .: sp|Q09 MLLPQPKSTAKKPKGEAKSLVARERKSQPQDSAL--MEVPAKREMP--KKEVKKIRSVH 10 20 30 40 50 70 80 90 100 110 sp|Q1X QELPVPKTNLPP--RKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME-KLENEKIQ . : ::. ::.. . . .. . .. . :. ..: :.:. :: :: .... sp|Q09 KVESVTKTKSAKLRRKKSYSLSSDNESKYKKSISPAASEEASIEKKKEEMTSKLPEKSVA 60 70 80 90 100 110 120 130 140 150 160 170 sp|Q1X MEQQNQ---FLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTL :. :. : .. ... . ::. ...:.. .: . :: : ... . sp|Q09 MKTANSPKTFNMELAKKFFEMRMKESQRTSRMATKSDSSLET--MPESSHNSGQSSKSRK 120 130 140 150 160 170 180 190 200 210 220 230 sp|Q1X FKQERDE-LPLERIPFPTPSLSDYS-PTLKPSTLA--ESSDVAQHPAVSVAGLEGDGSAL .. : . ::.: : . . : ::. :. : ......: . .:.:: :: sp|Q09 SQRTRGKSTPLDRNIFKENGEPVWVVPDRKPGELVMNEHGEMVKYPEL-MAALEEDGLEM 180 190 200 210 220 230 240 250 260 270 280 290 sp|Q1X PLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAF sp|Q09 EDGKGWFQKMSSYLMGELDQGRIDNKAASKDINPFASMETLEERTDLYFSRETVIYNTTD 240 250 260 270 280 290 >>sp|P23922|HBP1A_WHEAT Transcription factor HBP-1a OS=T (349 aa) initn: 163 init1: 89 opt: 128 Z-score: 131.0 bits: 32.7 E(516081): 9 Smith-Waterman score: 128; 29.9% identity (63.9% similar) in 97 aa overlap (59-150:223-319) 30 40 50 60 70 80 sp|Q1X SPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQE--LPVP--KTNLPP-RKRAKTEDEKE :: ::: . ..: :.. ::.: sp|P23 NKPMPLVPVQSGAVIGVAGPATNLNIGMDYWGATGSSPVPAMRGKVPSGSARGEQWDERE 200 210 220 230 240 250 90 100 110 120 130 140 sp|Q1X QRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQL .. .: : :: .:. :: ::. : :.: .. ....:. : .:.... : ..: .. sp|P23 LKKQKRKLSNRESARRSRLRKQAECEELGQRAEALKSENSSLRIELDRIKKEYEELLSKN 260 270 280 290 300 310 150 160 170 180 190 200 sp|Q1X AQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKP ..: :.. sp|P23 TSLKAKLGESGGGGGSDAVPDMNERGDTNGGSHQKEP 320 330 340 >>sp|Q5R452|SAFB1_PONAB Scaffold attachment factor B1 OS (914 aa) initn: 45 init1: 45 opt: 137 Z-score: 133.8 bits: 34.6 E(516081): 6.3 Smith-Waterman score: 137; 26.4% identity (60.5% similar) in 129 aa overlap (23-143:572-699) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKP :::..:. . .. .. .. .::. sp|Q5R QKPGPSERSRATKSGSRGTERTVVMDKSKGVPVISVKTSGSKERASKSLDRKSASREKRS 550 560 570 580 590 600 60 70 80 90 100 sp|Q1X A-------KKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR-ERK . . ::: .: . ..: ... :.:.:. .. :.: : : .: ::. sp|Q5R VVSFDKVKEPRKSRDSESHRVRERSEREQRMQAQWEREERERLEIARERLAFQRQRLERE 610 620 630 640 650 660 110 120 130 140 150 160 sp|Q1X RLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPA :.: :.:: :....:.. . .:. . : :. : .:.: sp|Q5R RMERERLERERMHVEHERRREQERIHR-EREELRRQQELRYEQERRPAVRRPYDLDRRDD 670 680 690 700 710 720 170 180 190 200 210 220 sp|Q1X TASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLE sp|Q5R AYWPEAKRAALDERYHSDFNRQDRFHDFDHRDRGRYPDHSVDRREGSRSMMGEREGQHYP 730 740 750 760 770 780 >>sp|O02756|CEBPD_BOVIN CCAAT/enhancer-binding protein d (256 aa) initn: 86 init1: 86 opt: 130 Z-score: 134.6 bits: 32.9 E(516081): 5.6 Smith-Waterman score: 148; 26.7% identity (54.1% similar) in 146 aa overlap (19-163:119-245) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE :.: .:. ... :.: .. : . .: . : sp|O02 LLPGGPARLGGPGPAPRPLKREPDWGDGDAPGSLLPAQVAACAQTVVSLA-AAAQPTPPA 90 100 110 120 130 140 50 60 70 80 90 100 sp|Q1X EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEM .: :.: . : : . ::. . : : .: :: :.. ::.. . sp|O02 SPEP--PRRSPAPPAPGPARDKAAGKRGPDRGSPEYR--QRRERNNIAVRKSRDKAK--- 150 160 170 180 190 200 110 120 130 140 150 160 sp|Q1X EKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRG-SRANTPMPGSPATAS ..:: . :.: .. :::..:.:.. ::. .. : : .::.: sp|O02 -----------RRNQEMQQKLVELSAENEKLQQRVEQLTRDLAGLRRFFKQLPGAPFLPG 210 220 230 240 170 180 190 200 210 220 sp|Q1X PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDG sp|O02 AGAADAR 250 >>sp|Q03173|ENAH_MOUSE Protein enabled homolog OS=Mus mu (802 aa) initn: 179 init1: 93 opt: 133 Z-score: 130.8 bits: 33.9 E(516081): 9.2 Smith-Waterman score: 162; 25.9% identity (52.1% similar) in 259 aa overlap (9-254:105-350) 10 20 30 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSA : ... : . :.. : :.. .:.: sp|Q03 QTFHQWRDARQVYGLNFGSKEDANVFASAMMHALEVLNSQEAAQSKV-TATQDSTNLRCI 80 90 100 110 120 130 40 50 60 70 80 90 sp|Q1X DVKTQEVKPEEKKPAKKRKSWGQE-LPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAA . . . ::. ... .:: : . . .: ..: : : :.:. . ::. :.: sp|Q03 FCGPTLPRQNSQLPAQVQNGPSQEELEIQRRQLQEQQRQK-ELERERMERERLERERLER 140 150 160 170 180 190 100 110 120 130 140 150 sp|Q1X QTSRERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAE-NNRLSQQLAQLAAEV----RG . ::.:::.:.:: .. . :. ... .:: ..: : ..: ..: :: : : sp|Q03 ERL-ERERLEQEQLERQRQEREHVERLERERLERLERERQERERERLEQLEREQVEWERE 200 210 220 230 240 250 160 170 180 190 200 sp|Q1X SRANTPMPGSPATASPTLTPTLFK-QERDELPLERIPFPTPSLSDYSP-----TLKPSTL : .. :.: .. : . : . : . : . .:: .: : : : sp|Q03 RRMSNAAPSSDSSLSSAPLPEYSSCQPPSAPPPSYAKVISAPVSDATPDYAVVTALPPTS 260 270 280 290 300 310 210 220 230 240 250 260 sp|Q1X AESSDVAQHPAVSVAGLEGDGSAL-PLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSS . . .: :. : . :::. :. : :..: : ::. . sp|Q03 TPPTPPLRHAATRFA--TSLGSAFHPV------LPHYAT--VPRPLNKNSRPSSPVNTPS 320 330 340 350 360 270 280 290 300 310 320 sp|Q1X VEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSV sp|Q03 SQPPAAKSCAWPTSNFSPLPPSPPIMISSPPGKATGPRPVLPVCVSSPVPQMPPSPTAPN 370 380 390 400 410 420 >>sp|P54843|MAF_MOUSE Transcription factor Maf OS=Mus mu (370 aa) initn: 85 init1: 85 opt: 128 Z-score: 130.6 bits: 32.7 E(516081): 9.4 Smith-Waterman score: 128; 30.5% identity (67.1% similar) in 82 aa overlap (83-163:287-366) 60 70 80 90 100 110 sp|Q1X AKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLE .:.: :.:.::. ::. : .. . . :: sp|P54 RFSDEQLVTMSVRELNRQLRGVSKEEVIRLKQKR--RTLKNRGYAQSCRFKRVQQRHVLE 260 270 280 290 300 310 120 130 140 150 160 170 sp|Q1X NEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAE-VRGSRANTPMPGSPATASPTLT .:: :. :: . : :..:.. : . ... .:... : . ... :.:: sp|P54 SEKNQLLQQVDHLKQEISRLVRERDAYKEKYEKLVSNGFRENGSSSDNPSSPEFFM 320 330 340 350 360 370 180 190 200 210 220 230 sp|Q1X PTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSALP >>sp|P49716|CEBPD_HUMAN CCAAT/enhancer-binding protein d (269 aa) initn: 90 init1: 90 opt: 126 Z-score: 130.6 bits: 32.2 E(516081): 9.4 Smith-Waterman score: 128; 25.7% identity (51.4% similar) in 148 aa overlap (19-163:131-258) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADT--SLNSADVKTQEVK :.: .:. ... :.: :: .: : .. sp|P49 LPGGPARPLGPGPAAPRLLKREPDWGDGDAPGSLLPAQVAACAQTVVSLAAAGQPTPPTS 110 120 130 140 150 160 50 60 70 80 90 100 sp|Q1X PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL :: . . .. : : . ::. . : : .: :: :.. ::.. . sp|P49 PEPPRSSPRQTP----APGPAREKSAGKRGPDRGSPEYR--QRRERNNIAVRKSRDKAK- 170 180 190 200 210 110 120 130 140 150 160 sp|Q1X EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRAN-TPMPGSPAT ..:: . :.: .. :::..: :.. ::. .. : : .:. : sp|P49 -------------RRNQEMQQKLVELSAENEKLHQRVEQLTRDLAGLRQFFKQLPSPPFL 220 230 240 250 260 170 180 190 200 210 220 sp|Q1X ASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEG sp|P49 PAAGTADCR >>sp|Q15642|CIP4_HUMAN Cdc42-interacting protein 4 OS=Ho (601 aa) initn: 106 init1: 68 opt: 147 Z-score: 145.6 bits: 36.2 E(516081): 1.4 Smith-Waterman score: 147; 22.4% identity (50.2% similar) in 263 aa overlap (29-272:294-542) 10 20 30 40 50 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR-K .:.:.::.. . . .:: . :...: : sp|Q15 DSHVLIELHKSGFARPGDVEFEDFSQPMNRAPSDSSLGTPS----DGRPELRGPGRSRTK 270 280 290 300 310 60 70 80 90 100 sp|Q1X SW--GQEL------------PVPKT--NLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR : :.. :::.. : :: :. . .: . .. : :. : sp|Q15 RWPFGKKNKPRPPPLSPLGGPVPSALPNGPPSPRSGRDPLAILSEISKSVKPRLASFRSL 320 330 340 350 360 370 110 120 130 140 150 sp|Q1X ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAA--EVRGSRANTPM . .: . . .. ::: . : : :.: .. .:.... : : ... .::. sp|Q15 RGSRGTVVTEDFSHLPPEQQRKRLQQ---QLEERSRELQKEVDQREALKKMKDVYEKTPQ 380 390 400 410 420 430 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS :.::. : .. :: . :: .: ... . . . ..:.. . . :: : sp|Q15 MGDPASLEPQIAETLSNIERLKLEVQKYEAWLAEAESRVLSNRGDSLSRHARPPDPPA-S 440 450 460 470 480 490 220 230 240 250 260 270 sp|Q1X VAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVFEDGLAF . ...:: ..: :. : . . .: . : : :: : . sp|Q15 APPDSSSNSA------SQDTKESSEEPPSEESQDTPIYTEFDEDFEEEPTSPIGHCVAIY 500 510 520 530 540 280 290 300 310 320 330 sp|Q1X DVLEGGDLSAFPFDSMVNFDSEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQ sp|Q15 HFEGSSEGTISMAEGEDLSLMEEDKGDGWTRVRRKEGGEGYVPTSYLRVTLN 550 560 570 580 590 600 >>sp|Q54RZ9|BZPG_DICDI Probable basic-leucine zipper tra (372 aa) initn: 128 init1: 128 opt: 128 Z-score: 130.6 bits: 32.7 E(516081): 9.4 Smith-Waterman score: 128; 32.8% identity (73.1% similar) in 67 aa overlap (80-146:274-340) 50 60 70 80 90 100 sp|Q1X KKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEME ..:: .: .:...:: .:. ::.::: .. sp|Q54 LNKEELNTFTTTDMNNYVKQANMVKELSQVEKKELKRQKRLIKNRESAHLSRQRKRERLT 250 260 270 280 290 300 110 120 130 140 150 160 sp|Q1X KLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPT ::.. .. ... . . ::..: :: :. ...:: sp|Q54 DLEHRVEELSSNSIDINKTLSSLENENLILKAEVGQLFEVINDSPVLSALFYKIASLSQQ 310 320 330 340 350 360 170 180 190 200 210 220 sp|Q1X LTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVSVAGLEGDGSA sp|Q54 PQKDTIGAY 370 >>sp|Q5AXH3|TOF1_EMENI Topoisomerase 1-associated factor (1167 aa) initn: 80 init1: 80 opt: 140 Z-score: 135.1 bits: 35.2 E(516081): 5.2 Smith-Waterman score: 140; 25.7% identity (51.0% similar) in 241 aa overlap (48-270:936-1166) 20 30 40 50 60 70 sp|Q1X TPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAK : :. ::::. :.: :: . .: :..:. sp|Q5A NFGSDSEGEDVIPDGPLFPANPRSKAHALNELKQKRKKRKDKGEEEPVDEETLEERRQAR 910 920 930 940 950 960 80 90 100 110 120 130 sp|Q1X TEDEKEQ-RRIERVLRNRAAAQTSRERKRLEMEKLENEKI--QMEQQNQFLLQRLSQMEA :. . . .:. : .:. . : . :. .::.:. : :. .. :: :.. : sp|Q5A LENTRWRLAKIKSDLYVHASDEESDAEADQEFFRLEEERRNEQSERIKKALL--LGRTED 970 980 990 1000 1010 1020 140 150 160 170 180 190 sp|Q1X ENNRLSQQLAQLAAEVRGSRANTP-MPGSPATASPTLTP---TLFKQERDELPLERIPFP .:. :. ::.:.: : . : :.. : . :.:.. .. . .: sp|Q5A AGNKARQRK-------RGKRSNEPNIAGEEETSGKRRRHSGGTNVELEEDDILMDDMEMP 1030 1040 1050 1060 1070 200 210 220 230 240 sp|Q1X T-PSLSDYSPTLKPS---TLAESSDVAQHPAVSVAGLEGDGSALPLFDLGSDL----KHH . : ..:: . . ..: . : . : . : . . :.: ::. sp|Q5A SRASSGEYSSNDADAIDKSMAAAEDELYFDDDLAFGRDRDKDETSVDRDGADASSPRKHN 1080 1090 1100 1110 1120 1130 250 260 270 280 290 sp|Q1X STDDVAA---PLSDDDFNRLFHGDSSVEPDSSVFEDGLAFDVLEGGDLSAFPFDSMVNFD . .. : ::. . :: : :: :: sp|Q5A DGSESAEEDIPLAPPNRRRLRAG-FVVESDSE 1140 1150 1160 300 310 320 330 340 sp|Q1X SEPVTLEGIEMAHGLPDETTCKTSSVQPGFGASTTRCDGQGIAAGC >>sp|Q498L2|SLTM_XENLA SAFB-like transcription modulator (998 aa) initn: 101 init1: 101 opt: 134 Z-score: 130.4 bits: 34.1 E(516081): 9.6 Smith-Waterman score: 134; 31.0% identity (66.7% similar) in 84 aa overlap (73-153:607-689) 50 60 70 80 90 100 sp|Q1X QEVKPEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSR- :.: . . .:.....:. :.: . : sp|Q49 REKVERMERIQRFRRAVEMRRSREMAERECRERERIRIMREREELDRLQRERERLEIERQ 580 590 600 610 620 630 110 120 130 140 150 sp|Q1X --ERKRLEMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPM ::.:.: :.:: :.:..::. . .:... . : : ..:: .. : :.: sp|Q49 KLERERMERERLERERIRIEQERRREAERIAREREELRRQQEQL-RFEQEKRNSLKRPRD 640 650 660 670 680 690 160 170 180 190 200 210 sp|Q1X PGSPATASPTLTPTLFKQERDELPLERIPFPTPSLSDYSPTLKPSTLAESSDVAQHPAVS sp|Q49 VDHRRDEPFWNENKKMAVDTDSRFSHGSDFNRQQNRFNDFDHRDRNRYSEGSNVSSFERR 700 710 720 730 740 750 >>sp|P0CB49|YLPM1_RAT YLP motif-containing protein 1 OS= (1376 aa) initn: 129 init1: 79 opt: 137 Z-score: 131.4 bits: 34.7 E(516081): 8.5 Smith-Waterman score: 137; 20.1% identity (50.4% similar) in 224 aa overlap (19-227:858-1076) 10 20 30 40 sp|Q1X MSCDMEKTMSSVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPE : . :. :.. ... . . . .. sp|P0C EFKRDTAAIPSAPVLPPPPVHPSIPPPGPMPMGMPPMSKPPPVQHTVDYGHGRDMPTNKV 830 840 850 860 870 880 50 60 70 80 90 100 sp|Q1X EKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTS-RERKRLE :. : .: . . :.:. . .: .:. .. : .. .: . .:. :. :: . sp|P0C EQIPYGERITLRPD-PLPERSAFDADHAGQRDRYDRDRDREPYFDRQSNMTDHRDFKRDR 890 900 910 920 930 940 110 120 130 140 150 160 sp|Q1X MEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATAS . . ... ....: .: . . . :. .. . .. ::. . : . sp|P0C ETHRDRDRVLDYERDRF--DRERRPRDDRNQSYRDKKDHSSSRRGGF-DRPSYDRKSDRP 950 960 970 980 990 1000 170 180 190 200 210 sp|Q1X PTLTPTLFKQERDELPLERIPFPTPSLSDYSPTL-----KPSTLAESSDVAQHPA----- : : .: :: : ::.:.:.:::. : . :: . . .:. . :. sp|P0C PYEGPPMFGGERRTYPEERMPLPAPSLGHQPPPVPRVEKKPES-KNVDDILKPPGRESRP 1010 1020 1030 1040 1050 1060 220 230 240 250 260 270 sp|Q1X ----VSVAGLEGDGSALPLFDLGSDLKHHSTDDVAAPLSDDDFNRLFHGDSSVEPDSSVF : . :: :.: sp|P0C ERIVVIMRGLPGSGKTHVAKLIRDKEVEFGGPAPRVLSLDDYFIAEVEKEEKDPDSGKKV 1070 1080 1090 1100 1110 1120 >>sp|Q39140|TGA6_ARATH Transcription factor TGA6 OS=Arab (330 aa) initn: 124 init1: 89 opt: 127 Z-score: 130.3 bits: 32.5 E(516081): 9.7 Smith-Waterman score: 127; 36.4% identity (72.7% similar) in 55 aa overlap (77-131:38-91) 50 60 70 80 90 100 sp|Q1X PEEKKPAKKRKSWGQELPVPKTNLPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRL ...:. .:. ..:. .:: ::. :: ::. sp|Q39 TDVSTDGDTDHRDLGSDRGHMHAAASDSSDRSKDKLDQKTLRRLAQNREAARKSRLRKKA 10 20 30 40 50 60 110 120 130 140 150 160 sp|Q1X EMEKLENEKIQMEQQNQFLLQRLSQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATA ...::: .... : .: : :: : sp|Q39 YVQQLENSRLKLTQLEQEL-QRARQQGVFISSSGDQAHSTGGNGALAFDAEHSRWLEEKN 70 80 90 100 110 120 >>sp|Q8N9W4|GG6L2_HUMAN Golgin subfamily A member 6-like (650 aa) initn: 186 init1: 90 opt: 131 Z-score: 130.1 bits: 33.4 E(516081): 10 Smith-Waterman score: 131; 24.3% identity (61.7% similar) in 115 aa overlap (41-154:277-386) 20 30 40 50 60 sp|Q1X SVDSLPATPASEVPVLTVSPADTSLNSADVKTQEVKPEEKKPAKKR-KSWGQELPVPKTN . .:.. .::: :.. : : :: sp|Q8N NVKELKRKLERAKFLLPQVQTNTLQEEMWRQEEELREQEKKIRKQEEKMWRQE-----ER 250 260 270 280 290 300 70 80 90 100 110 120 sp|Q1X LPPRKRAKTEDEKEQRRIERVLRNRAAAQTSRERKRLEMEKLENEKIQMEQQNQFLLQRL : .. :.:...:: :. ::.. .:.. :..::.... ::..:.. . .. sp|Q8N LREQEGKMREQEEKMRRQEKRLREQEKELREQEKELREQKKLREQEEQMQEQEEKMWEQE 310 320 330 340 350 360 130 140 150 160 170 180 sp|Q1X SQMEAENNRLSQQLAQLAAEVRGSRANTPMPGSPATASPTLTPTLFKQERDELPLERIPF .:. ..... .: .: . . : sp|Q8N EKMREQEEKMWRQEERLWEQEKQMREQEQKMRDQEERMWEQDERLREKEERMREQEKMWE 370 380 390 400 410 420 526 residues in 2 query sequences 181677051 residues in 516081 library sequences Tcomplib [36.04] (8 proc) start: Fri Apr 16 10:09:02 2010 done: Fri Apr 16 10:09:15 2010 Total Scan time: 28.320 Total Display time: 0.320 Function used was FASTA [version 36.04 January, 2010] hmmer-3.1b2/easel/demotic/examples/example.hmm0000664361611702660230000036272212473612604020775 0ustar wheelerteddyHMMER3/b [3.0 | March 2010] NAME US2 ACC PF02476.8 DESC US2 family LENG 126 ALPH amino RF no CS no MAP yes DATE Mon Sep 7 22:59:25 2009 NSEQ 15 EFFN 2.047119 CKSUM 2472745667 GA 25.00 25.00 TC 30.90 30.00 NC 19.50 18.80 STATS LOCAL MSV -9.7952 0.71252 STATS LOCAL VITERBI -10.9655 0.71252 STATS LOCAL FORWARD -3.6497 0.71252 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.40416 3.88727 3.02777 2.71996 3.50350 3.04063 3.68795 2.91827 2.73527 2.47221 3.79267 3.14159 2.96869 3.12969 2.82102 2.62876 2.82660 2.71389 3.82655 3.54759 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.00000 * 1 2.34670 4.31682 4.05439 3.47793 3.32776 3.84938 2.66035 2.76495 3.37158 1.91436 2.57028 3.74974 4.21994 3.62661 3.60715 3.12590 3.01755 2.57121 4.84475 2.07695 1 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 2 4.15109 5.41832 5.42701 5.12700 3.63307 4.95879 5.56595 2.91941 4.90612 0.30047 3.51230 5.34507 5.30002 5.06992 4.93276 4.72612 4.42698 3.14284 5.71796 4.60202 2 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 3 2.78851 3.29911 3.01652 2.11986 4.42653 3.55112 2.90636 3.87477 2.55345 3.42519 4.21014 1.66336 3.96682 2.90860 3.02817 2.48585 3.02647 3.50167 5.61559 4.24398 3 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 4 2.85690 5.24798 2.62409 2.51660 4.61040 3.07734 3.84047 4.07378 2.62028 3.59668 4.37518 3.05819 4.00214 2.65336 2.76841 1.22963 3.10897 3.66811 5.76382 4.37314 4 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 5 2.93924 5.43691 2.31179 1.96566 4.78534 1.78663 3.87667 4.27598 2.70919 3.76708 4.53863 3.01513 2.87530 2.99941 3.23222 2.10783 3.19391 3.84234 5.91568 4.48077 5 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 6 2.27068 4.39378 3.82717 3.25144 3.51479 3.79342 4.05933 2.03881 3.15326 2.07705 3.49214 3.60400 4.16789 3.04032 2.21285 3.05466 3.00285 2.30840 4.99351 3.77854 6 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 7 2.39276 4.35611 3.83322 3.26034 2.63725 3.77416 4.04981 2.17538 3.18990 2.30768 3.46595 3.60261 2.51739 3.46719 2.89178 2.41776 2.97839 2.61815 4.95386 3.73937 7 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 8 2.77438 5.03745 2.80692 2.40818 4.30229 1.87938 3.78588 2.58629 2.57007 3.31114 4.11303 3.08503 3.97144 2.92514 2.40773 2.57025 3.00881 3.38593 5.53284 4.18255 8 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 9 2.26357 4.86562 3.25007 2.86977 4.62106 3.45159 4.12399 4.05685 2.96536 3.65600 4.45463 1.32649 2.19487 3.28964 3.40591 2.81724 2.51509 3.59508 5.86238 4.54173 9 - - 2.68620 4.42227 2.77522 2.73126 3.46356 2.40515 3.72444 3.29356 2.67743 2.69357 4.24692 2.90349 2.73723 3.18149 2.89803 2.37889 2.77522 2.98521 4.58479 3.61505 0.10458 2.35793 5.36366 0.28724 1.38763 0.48576 0.95510 10 2.32704 4.96701 3.16601 2.60379 4.21007 3.59040 3.14525 3.62727 2.55302 3.22503 4.03822 3.12005 3.97901 2.53692 1.84100 2.79768 2.77734 2.98540 5.46067 2.92940 11 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 11 2.72336 4.43267 3.45279 2.90685 3.65155 3.63604 3.86407 3.04486 2.87173 2.07245 3.60133 3.33274 1.93599 3.18048 3.24557 2.50041 2.61116 2.81257 4.91977 3.80947 12 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 12 2.72570 4.10270 4.22073 3.67418 2.20076 3.80041 3.49817 2.31505 3.54206 2.16192 3.27217 3.82359 4.13957 3.73165 3.67617 3.12669 2.95191 2.43052 4.63614 1.87734 13 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 13 3.00014 5.46099 2.36280 2.47625 4.76619 3.55468 1.42248 4.27605 2.77767 3.78386 4.57652 2.29815 4.06623 3.06094 3.29449 2.24758 3.25917 3.86139 5.93222 4.49648 14 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 14 3.92339 5.15648 5.72897 5.15447 3.35224 5.27219 5.56342 2.51942 5.00180 0.54483 2.26912 5.39149 5.31040 4.92160 4.99167 4.66199 4.12892 2.42649 5.59142 4.63695 15 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 15 4.85749 5.90041 5.39625 5.32178 3.84205 4.72536 5.13523 5.02071 5.10285 4.25435 5.59852 5.36391 5.30839 5.43793 5.07308 5.05878 5.20805 4.91967 0.16029 3.81601 16 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 16 3.56350 4.76863 5.62145 5.17242 4.14285 5.16116 5.95321 1.23083 5.11210 2.55957 3.87461 5.33458 5.40059 5.38100 5.28881 4.60779 3.83071 0.74542 6.27674 5.04741 17 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 17 3.43528 4.71392 5.38626 4.81409 2.26701 4.76518 5.12956 1.80859 4.66313 1.25590 3.29436 4.90892 4.98925 4.71974 4.68509 4.11815 3.66378 1.42417 5.41890 4.30979 18 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 18 3.87040 5.50509 4.68630 4.69994 5.70927 0.14688 5.70011 5.56198 4.97457 5.08105 6.10671 4.85420 4.90648 5.23966 5.06488 4.07225 4.40293 4.94474 6.53971 5.85729 19 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 19 0.31531 4.78223 4.45526 4.35737 5.03015 3.57567 5.25133 4.29931 4.40029 4.13268 5.11470 4.24711 4.38688 4.66662 4.54301 3.14688 3.47852 3.79339 6.35538 5.28370 20 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 20 0.31531 4.78223 4.45526 4.35737 5.03015 3.57567 5.25133 4.29931 4.40029 4.13268 5.11470 4.24711 4.38688 4.66662 4.54301 3.14688 3.47852 3.79339 6.35538 5.28370 21 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 21 4.03711 6.08497 0.25387 3.15386 5.61866 4.00373 4.87395 5.43138 4.13203 4.90528 5.95805 3.72937 4.70525 4.15273 4.70455 3.95169 4.40712 5.00274 6.59667 5.44206 22 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 22 3.93892 5.15008 5.77759 5.24218 3.42460 5.33508 5.67002 1.74860 5.07997 0.56649 3.17831 5.47300 5.37951 5.03250 5.07876 4.75888 4.15533 2.55686 5.67642 4.67557 23 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 23 3.24328 0.65240 4.73283 4.36780 3.29555 4.02882 4.49402 3.41080 4.13265 3.11817 4.21058 4.33872 4.62005 4.40989 4.25036 3.52435 3.61940 3.20832 4.90946 2.39529 24 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 24 2.06339 5.21368 2.64191 2.11166 4.53942 3.53101 3.72155 4.00929 2.04159 3.50919 4.26123 3.00705 3.92666 2.82599 2.29393 2.72831 2.98763 2.87306 5.65695 4.26119 25 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 25 2.54643 4.76884 3.36491 2.87183 4.13254 3.58582 3.99261 3.08318 2.82459 3.16087 4.02260 3.32111 1.32327 2.65303 3.22193 2.88031 2.73584 3.18640 5.46993 4.18916 26 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 26 2.03032 4.09664 4.23339 3.68614 2.24299 3.80010 4.08854 2.44676 3.55183 2.36607 3.26580 3.83001 4.13940 3.73906 3.68101 3.12709 2.94866 1.61391 4.63967 3.56372 27 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 27 3.72273 4.97187 5.60523 5.03686 1.62498 5.03800 5.23249 1.56557 4.88677 1.07869 3.16188 5.15717 5.16391 4.82805 4.86307 4.40504 3.93517 2.62517 5.35978 4.20015 28 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 28 2.44428 5.28322 2.49931 1.55308 4.60656 3.53041 3.76648 4.08270 2.53723 2.95320 4.33871 2.58538 3.95514 2.87626 3.03607 2.27994 3.04731 3.66378 5.73142 4.32248 29 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 29 2.43771 3.85767 3.33854 2.77782 3.86996 3.64159 2.57755 3.25507 2.75455 2.26062 3.78402 2.57196 4.02724 2.71610 3.17596 2.64444 2.97655 2.99182 5.24050 2.78070 30 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 30 2.11185 4.57971 5.08334 4.53581 3.71250 4.58083 5.04141 1.09762 4.41166 1.75268 3.56292 4.68088 4.88734 4.60462 4.53933 3.93029 3.50926 1.83653 5.52801 4.35674 31 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 31 2.41613 5.08508 3.13824 2.61618 4.46174 3.56948 3.82409 3.89693 2.54154 3.44798 4.23948 3.12886 1.68539 2.44356 2.46416 2.45221 3.05388 3.51891 5.63320 4.28885 32 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08170 4.64131 2.67645 0.61958 0.77255 0.48576 0.95510 32 2.41176 5.14236 2.49528 2.46979 4.44407 2.10611 3.74114 3.89739 2.17970 2.63045 4.20856 2.64990 3.93037 2.86049 2.99522 2.74389 2.99459 3.51203 5.61376 4.23145 33 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01543 4.57504 5.29739 0.61958 0.77255 0.60472 0.79016 33 2.37147 4.58485 3.54996 3.04298 4.14130 2.90462 4.11314 2.96164 3.02715 3.20406 4.05015 3.41101 1.47307 3.34651 3.42106 2.37813 2.38791 3.17703 5.50205 4.24368 34 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01543 4.57504 5.29739 0.61958 0.77255 0.60472 0.79016 34 3.28133 5.46966 3.73743 3.02134 4.96925 3.92701 3.85648 4.30355 1.03150 3.71796 4.56312 3.43547 4.28108 2.97861 1.64692 3.26346 2.62045 3.96007 5.74770 4.57184 35 - - 2.68597 4.42239 2.77534 2.73138 3.46328 2.40474 3.72509 3.29368 2.67755 2.69333 4.24704 2.90361 2.73754 3.18161 2.89815 2.37901 2.77534 2.98462 4.58491 3.61517 0.21606 1.66439 5.29739 1.00151 0.45780 0.41798 1.07405 35 4.12020 5.77258 4.70273 4.12388 5.34403 4.36876 4.70257 5.00705 2.96226 4.37865 5.40599 4.40019 4.87849 3.92946 0.26228 4.20114 4.36222 4.70599 6.13639 5.16848 39 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 36 3.00067 4.37825 4.79836 4.19826 2.23428 4.17508 4.48761 2.20511 4.02487 1.18339 2.58315 4.28025 4.49887 4.15161 4.08174 2.78503 3.22902 2.49394 4.95715 3.80106 40 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 37 3.20142 4.50461 5.12734 4.56746 3.07057 4.53164 4.96075 1.36756 4.42538 2.05089 3.54686 4.65720 4.83572 4.59637 4.50927 3.87543 2.71150 1.20694 5.42115 4.24200 41 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 38 1.39361 4.51592 3.85479 3.39230 3.71133 3.63185 4.23537 3.21064 3.33325 2.95118 3.87064 3.67169 4.17997 3.64000 3.63403 2.99089 2.57219 2.94696 5.20310 1.64218 42 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 39 1.54905 4.46587 4.70561 4.16481 3.75116 4.22780 4.75798 1.60994 4.05701 2.58772 3.65939 4.33202 4.63105 4.29230 4.24036 3.57201 2.82376 1.47443 5.40967 4.20932 43 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 40 2.80206 5.25881 3.05861 2.01840 4.60177 2.96537 3.73272 4.06691 1.71943 3.55058 4.30518 3.03935 3.95752 2.47595 2.44054 2.77044 3.02820 3.64960 5.68049 2.96306 44 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 41 2.56181 4.46955 4.94145 4.38488 3.71414 4.42785 4.86616 1.62997 4.25814 2.14004 3.61359 4.51811 4.75930 4.46742 4.38984 3.76432 2.54346 1.11266 5.41094 4.21484 45 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 42 2.28478 5.29270 2.66915 2.18486 4.63050 3.53114 3.80086 4.10589 2.58788 3.61069 4.37451 2.50200 2.01315 2.91596 3.08983 2.14852 3.08071 3.68768 5.76608 4.35667 46 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 43 2.84500 2.12405 1.43243 2.93438 4.66732 1.73723 4.26130 4.09978 3.19447 3.73439 4.56120 3.37590 4.12582 3.45757 3.64784 2.93227 3.22630 3.65647 5.94346 4.63582 47 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 44 1.73076 4.86535 3.22316 1.91151 4.22239 3.56142 3.91068 3.56417 2.73843 3.24192 4.07621 3.21063 4.01630 3.08084 3.18506 2.82534 2.03295 2.80522 5.52016 4.20433 48 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 45 3.64038 4.99068 4.87632 4.46692 1.47090 4.52208 3.97997 3.47679 4.29566 2.94000 4.08435 4.36300 2.93378 4.37224 4.37186 3.88101 3.88070 3.34978 1.12430 2.50203 49 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.16814 4.64131 1.93017 0.61958 0.77255 0.48576 0.95510 46 1.67298 4.49614 3.59956 3.08505 4.07102 3.40351 4.11842 3.44146 3.05844 3.13736 3.99032 3.42127 2.52609 3.37026 3.43807 1.98772 2.40492 2.35445 5.44873 4.20213 50 - - 2.68620 4.42227 2.77522 2.73089 3.46356 2.40515 3.72497 3.29356 2.67743 2.69357 4.24692 2.90349 2.73742 3.18149 2.89803 2.37889 2.77522 2.98521 4.58479 3.61505 0.11958 2.23250 5.21233 0.29166 1.37446 0.35867 1.19934 47 2.96470 5.38207 2.77877 2.22006 4.71669 1.36947 2.89548 4.18964 2.73994 3.71164 4.50531 2.52332 4.05493 3.04516 3.23951 2.54642 3.22211 3.78644 5.88183 4.47100 52 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 48 2.20425 5.01731 3.10319 2.23044 4.27793 2.86778 3.76095 3.70650 2.06188 2.86384 2.93099 3.07528 2.89449 2.89637 3.00905 2.76212 2.97824 3.36185 5.50582 4.15485 53 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 49 2.30135 4.84691 3.31652 2.79452 4.42241 3.48554 3.97509 3.85182 2.77161 3.44739 4.24678 3.25069 2.21982 3.13021 2.64914 1.52585 2.58061 3.44548 5.66621 4.34831 54 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 50 3.99686 5.30863 5.10112 4.74645 2.82221 4.70120 4.31354 3.50367 4.33812 2.14339 4.11034 4.67394 5.08982 4.61015 4.40711 4.24545 4.25596 3.52763 0.59778 2.85415 55 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.30073 4.64131 1.38598 0.61958 0.77255 0.48576 0.95510 51 2.03752 4.94802 3.00713 2.23023 4.26292 3.46281 3.70080 3.69271 2.46242 3.26407 4.06015 3.00222 2.61085 2.83549 2.48455 2.69077 2.51586 3.33389 5.47248 4.12297 56 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.10978 4.35975 2.39489 0.61958 0.77255 0.30028 1.34944 52 2.78752 4.62920 3.49321 2.91952 3.76676 3.71011 3.92368 2.59315 2.06265 1.85051 3.68485 3.36579 4.08747 2.31584 3.15400 2.94924 3.01542 2.60947 5.18551 3.93650 57 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01543 4.57504 5.29739 0.61958 0.77255 0.60472 0.79016 53 3.19877 4.98956 4.05858 3.82531 4.33420 3.81429 4.77389 3.80308 3.71760 2.67141 4.55443 4.07120 0.52882 4.15314 3.95272 3.39356 3.62965 3.56467 5.80839 4.53606 58 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09455 4.57504 2.52684 0.61958 0.77255 0.60472 0.79016 54 2.72614 3.87252 1.87457 2.07765 4.46358 3.48035 3.71174 3.92549 2.47938 3.44802 4.21393 2.97477 3.02984 2.82611 2.96920 2.37500 2.69609 3.52392 5.61596 4.22508 59 - - 2.68667 4.41808 2.77569 2.73149 3.46098 2.40517 3.72544 3.29322 2.67687 2.69300 4.24739 2.90341 2.73789 3.18196 2.89850 2.37903 2.77569 2.98488 4.58526 3.61498 0.35666 1.22220 5.21953 1.80423 0.17985 0.36285 1.18971 55 2.82738 5.29095 2.95967 1.87795 4.63423 2.49095 3.76871 4.10583 2.49769 3.59536 4.35356 2.28315 3.96997 2.87722 1.99156 2.79154 2.81283 3.68523 5.73363 4.33756 67 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 56 2.78922 4.23423 4.35591 3.76527 2.63729 3.91523 4.22744 2.13010 3.62688 1.87923 3.32171 3.93482 4.27856 3.83165 2.53935 3.20881 2.23219 2.01844 4.85797 3.67240 68 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 57 2.38074 5.03024 3.09531 2.33992 4.29399 2.94771 3.75486 2.63043 2.32212 2.71955 4.09356 3.06720 3.47526 2.52234 2.63774 2.48841 2.97541 3.37643 5.51470 4.15987 69 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 58 2.78879 4.90186 3.17858 2.41852 4.12972 3.60799 3.16299 3.53492 2.64609 2.60343 3.99585 3.17064 1.72737 3.01181 3.08057 2.84576 2.41678 3.23316 5.42607 4.11139 70 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 59 2.39275 4.33540 3.88507 2.66498 3.45173 2.52724 4.06734 2.28419 3.23486 1.77439 3.44426 3.63792 4.16418 3.50614 3.51515 3.05462 2.98103 2.59271 3.33792 3.72418 71 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 60 2.74514 4.63316 2.93543 2.42392 3.79854 3.66139 3.89230 2.69765 2.81065 1.98134 3.72632 3.30190 4.04546 3.13845 2.88283 2.88797 2.09639 2.92271 3.88357 3.92374 72 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 61 2.32596 4.79850 2.42935 2.84419 4.26188 3.53771 4.03477 3.55235 2.90539 3.28593 4.13553 3.30021 4.05202 3.22528 3.34358 2.85181 1.27931 2.69699 5.59054 4.28935 73 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 62 2.42824 4.68262 2.77844 2.90534 4.04268 3.57091 4.01348 3.37408 2.91847 3.09034 3.95016 3.34315 4.05319 3.23835 3.33441 1.82452 2.59697 1.68659 5.41199 4.13710 74 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 63 2.29808 5.22616 2.58335 2.02724 4.56612 3.01787 3.74303 4.04010 2.49876 3.54017 4.29266 3.00699 2.80153 2.84948 2.99160 2.19018 2.43669 3.61929 5.68916 4.28738 75 - - 2.68649 4.42035 2.77581 2.73185 3.46366 2.40575 3.72302 3.29334 2.67687 2.69297 4.24752 2.90370 2.73722 3.18161 2.89772 2.37899 2.77581 2.98482 4.58539 3.61326 0.39134 1.36633 2.67645 2.01947 0.14240 0.48576 0.95510 64 2.39294 4.58200 4.34732 3.83453 3.14741 4.01480 4.23215 2.90913 3.59517 2.08340 3.60540 4.01317 4.44645 3.91421 3.78391 3.36479 3.31947 2.78142 1.16013 3.32325 85 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01543 4.57504 5.29739 0.61958 0.77255 0.60472 0.79016 65 2.75020 5.13208 2.62467 2.08677 4.44215 2.86703 3.74051 3.89580 2.51233 3.43235 4.20593 3.01082 2.64215 2.85932 2.99902 2.73664 2.02616 2.99199 5.61255 4.22980 86 - - 2.68625 4.42087 2.77491 2.73065 3.46390 2.40481 3.72450 3.29390 2.67777 2.69391 4.24726 2.90383 2.73746 3.18135 2.89801 2.37902 2.77522 2.98472 4.58513 3.61539 0.18077 1.83028 5.29739 1.94899 0.15364 0.60472 0.79016 66 2.61257 4.58423 3.66818 3.48540 4.90981 2.34451 4.66788 4.38902 3.67759 4.03487 4.83384 3.65629 0.85165 3.93071 4.00011 2.14541 3.12375 3.72773 6.21145 5.00141 96 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01543 4.57504 5.29739 0.61958 0.77255 0.60472 0.79016 67 2.72388 3.22449 4.44573 3.84595 1.96777 3.86527 4.18459 2.32373 2.89607 2.06995 3.25437 3.94403 4.23098 3.85679 3.77394 3.16556 2.71362 2.16147 4.75674 2.85826 97 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01543 4.57504 5.29739 0.61958 0.77255 0.60472 0.79016 68 2.72492 4.92142 2.57407 2.40502 2.92970 3.55328 3.76030 3.57461 2.56264 2.46375 3.99332 3.08524 2.53789 2.91184 2.70902 2.41754 2.95661 3.25278 5.42491 4.09032 98 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01543 4.57504 5.29739 0.61958 0.77255 0.60472 0.79016 69 2.35817 5.24838 2.23957 2.15900 4.58170 3.02246 3.71207 4.06280 2.19275 3.54882 4.29521 2.97071 3.91032 2.46888 2.95856 2.71755 2.24389 3.63329 5.68700 4.27705 99 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01543 4.57504 5.29739 0.61958 0.77255 0.41798 1.07405 70 2.10580 5.22867 2.60514 2.24588 4.55129 3.52745 2.61242 4.02325 2.49077 3.52562 4.27973 2.76084 2.77775 2.84281 2.98291 2.73935 2.38061 3.60811 5.67701 4.27624 100 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 71 2.30821 4.74213 3.29265 2.73265 2.86333 3.62538 2.97949 2.99675 2.40268 2.97901 3.82970 3.22071 2.80885 3.05170 3.14673 2.47482 2.33891 3.04662 5.28314 3.99317 101 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 72 2.76035 4.85464 3.20015 2.22279 4.06786 3.60412 3.82528 3.46579 2.65483 2.02582 3.21353 2.27334 3.99948 3.00247 3.09980 2.20458 2.99348 3.17129 5.38002 4.06880 102 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 73 2.79846 5.27280 2.14277 2.45339 4.60551 3.52724 2.45418 4.08343 2.52399 3.57887 4.33277 2.56736 3.09024 2.86715 3.02111 2.03930 2.70295 3.66036 5.72523 4.31678 103 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 74 2.74836 5.03313 3.09727 2.27438 3.29803 3.55940 3.75728 3.72962 2.08501 3.30330 4.09756 3.07013 2.36083 2.88986 2.79318 2.23567 2.97952 2.88057 5.51753 4.16356 104 - - 2.68621 4.42228 2.77496 2.73126 3.46357 2.40516 3.72498 3.29313 2.67744 2.69358 4.24693 2.90350 2.73743 3.18149 2.89804 2.37890 2.77523 2.98521 4.58480 3.61506 0.07407 2.70739 5.36366 0.65812 0.72944 0.48576 0.95510 75 2.42228 4.27085 4.60247 3.39830 2.81841 4.04066 4.37198 1.82485 3.85113 1.42819 3.31868 4.11840 4.39193 4.02455 3.94827 3.34672 3.10543 2.04858 4.92596 3.75011 107 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 76 2.37360 4.86695 3.19530 2.10976 4.08423 3.59405 3.08153 3.48866 2.39223 2.85555 3.94424 3.14684 3.98297 2.97248 3.07679 2.47191 2.97663 2.13431 5.38440 3.48468 108 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 77 1.94217 4.61639 3.41701 2.85434 2.78884 3.66523 3.06353 2.79409 2.52558 2.84034 3.71119 2.94991 3.16549 3.15140 3.23103 2.89289 2.71710 2.59684 5.17678 3.91292 109 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 78 2.74578 3.94748 3.19048 2.63289 4.11286 2.78452 3.80265 3.51986 2.37241 2.27885 3.96639 2.86759 2.43690 2.96736 2.83705 2.38498 2.97905 3.21216 5.40390 4.08420 110 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 79 2.74569 4.69082 2.60611 2.78052 2.98070 2.96585 3.86930 2.78082 2.76202 2.25119 3.78052 3.25795 2.42900 2.75389 3.18390 2.86503 2.97752 2.98688 5.23937 3.96005 111 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 80 2.74056 4.70941 3.32596 2.76639 3.90283 2.87289 3.86551 2.97534 2.74716 2.95365 3.17317 2.57688 3.18851 3.08087 3.17336 2.01621 2.55937 2.50772 5.26569 3.98248 112 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 81 2.28712 4.72826 3.02403 2.74345 3.11891 2.82814 3.85133 3.30118 2.72552 2.34276 3.81614 2.92981 4.01568 3.06081 2.61785 2.57511 2.71367 2.60092 5.27119 3.98402 113 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 82 2.74444 4.42520 3.68966 3.12023 3.19657 3.74097 4.00025 2.57803 2.30364 2.45174 2.66600 3.50653 4.11894 2.91955 3.40146 2.64770 2.58601 2.69474 5.01184 2.45012 114 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 83 2.56816 5.22758 2.68666 1.94608 4.55876 3.52910 3.71909 4.03232 2.24953 3.52536 4.27378 3.00288 3.92501 2.82166 1.91845 2.72616 2.53356 3.26055 5.66744 4.26842 115 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 84 2.42538 2.47093 4.62834 4.02571 3.27778 3.95930 4.29258 2.07207 3.84225 1.86091 3.29022 4.07729 4.32050 3.99979 3.90023 3.26756 3.02658 2.05522 4.82267 2.32966 116 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 85 2.47112 3.26773 4.33403 3.74124 2.83042 3.87048 4.18214 2.04917 3.60061 2.38294 2.77387 3.89889 4.23807 2.87177 2.86448 3.16350 2.98034 1.84263 4.80954 3.62268 117 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 86 4.62256 5.61391 5.43303 5.32992 1.84687 5.12571 3.85539 4.20347 5.12491 3.37351 4.74571 4.70071 5.40204 4.85684 4.98076 4.54800 4.83016 4.16452 3.93769 0.43575 118 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 87 1.96673 5.33019 2.53054 2.16920 4.65468 1.98052 3.78783 4.13468 2.26553 3.62789 4.38695 3.00499 3.97245 2.65214 3.06629 2.80062 3.08244 3.71183 5.77419 4.35949 119 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06728 4.64131 2.89282 0.61958 0.77255 0.48576 0.95510 88 2.90754 4.33577 4.45194 3.87227 3.48111 4.07103 4.41088 1.92567 3.72660 2.15469 3.43962 4.07205 4.42595 3.96893 2.98149 3.37369 2.67548 1.22697 5.06705 3.87512 120 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01521 4.58925 5.31159 0.61958 0.77255 0.58102 0.81945 89 3.30302 4.57994 5.21901 4.68568 3.80969 4.70762 5.21112 1.54308 4.57144 1.85404 3.63720 4.82097 4.99160 4.77616 4.69778 4.07202 2.80841 0.99381 5.66636 4.47973 121 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01521 4.58925 5.31159 0.61958 0.77255 0.58102 0.81945 90 2.72868 4.99699 2.12448 2.53012 3.40456 2.45330 3.07671 3.68394 2.52654 2.94416 4.06258 3.05751 3.93511 2.88022 2.54063 2.74452 2.96017 2.98094 5.48355 4.13115 122 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01521 4.58925 5.31159 0.61958 0.77255 0.58102 0.81945 91 2.79977 5.19222 3.01090 2.51028 4.53848 3.54321 3.76159 3.99419 2.47939 3.50862 4.28068 2.35518 1.95202 2.53758 2.50799 2.26043 3.03690 3.59451 5.66478 4.29061 123 - - 2.68574 4.41907 2.77526 2.73109 3.46437 2.40495 3.72501 3.29381 2.67824 2.69389 4.24690 2.90408 2.73754 3.18230 2.89546 2.37911 2.77535 2.98532 4.58199 3.61587 1.05763 1.10681 1.13286 2.12644 0.12699 0.58102 0.81945 92 2.26005 4.91935 2.94101 2.14691 4.24996 2.65053 3.66402 3.68148 2.42085 3.24816 4.04378 2.95623 3.83710 2.79843 2.35002 2.65394 2.52008 3.31725 5.45120 4.10061 136 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02235 4.20773 4.93007 0.61958 0.77255 1.01229 0.45159 93 2.26219 4.49754 3.34404 2.79287 3.68154 3.51577 3.79826 3.09369 2.66364 2.77034 3.64939 3.22467 2.49152 3.05716 2.67931 2.78117 2.87973 2.83651 2.66072 3.79968 137 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02235 4.20773 4.93007 0.61958 0.77255 0.81559 0.58407 94 2.80635 4.27256 4.24559 3.66875 2.64561 2.82219 4.20442 2.50987 3.54662 1.35952 2.53565 3.88975 4.26142 3.75660 3.72684 3.20825 3.03956 2.41409 4.82782 3.62643 138 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02021 4.30734 5.02969 0.61958 0.77255 0.93000 0.50179 95 3.01060 5.22754 3.27816 2.72492 4.52871 3.67292 2.74707 4.01786 2.15364 3.49098 4.32819 2.58856 4.06701 2.86482 1.26875 2.99998 3.20856 3.67319 5.53801 4.25958 139 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02021 4.30734 5.02969 0.61958 0.77255 0.93000 0.50179 96 2.32623 4.62323 3.19133 2.25421 3.12005 3.51784 3.75335 3.20149 2.62811 2.46873 3.72025 3.12589 3.00272 2.96370 3.05684 2.31183 2.87383 2.92990 5.17444 3.88681 140 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02021 4.30734 5.02969 0.61958 0.77255 0.60292 0.79232 97 2.31757 4.96346 3.01754 2.09657 4.22339 2.85281 3.73612 3.64469 2.52210 2.28282 4.04245 3.03624 3.92000 2.22035 2.98232 2.74225 2.95737 3.30866 5.46338 4.11879 141 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01727 4.46328 5.18562 0.61958 0.77255 0.76435 0.62668 98 2.04496 4.62240 3.29322 2.39046 3.82375 3.57239 3.82863 2.48632 2.72251 2.87473 3.73653 3.21209 3.04106 3.05400 3.14159 2.27883 2.92157 2.64318 5.19745 3.92027 142 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01727 4.46328 5.18562 0.61958 0.77255 0.76435 0.62668 99 1.99633 4.81272 3.16335 2.62373 4.16065 3.48591 3.79835 3.57143 2.59990 3.18639 4.00428 2.60994 3.92520 2.95947 2.53979 1.92523 2.93532 2.70333 5.43398 4.11483 143 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01727 4.46328 5.18562 0.61958 0.77255 0.76435 0.62668 100 2.70434 4.84872 2.74517 2.57615 4.08620 3.53201 3.75368 3.49009 2.55688 2.15744 3.93693 3.08608 2.46142 2.91712 2.50182 2.75389 2.55149 3.18072 5.37090 4.05021 144 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01727 4.46328 5.18562 0.61958 0.77255 0.76435 0.62668 101 2.73290 3.29948 3.32299 2.74587 3.87302 3.61272 2.86448 3.26427 2.35671 2.43542 3.78140 3.21686 3.99378 3.01666 1.95228 2.84196 2.95906 2.99869 5.21547 3.35682 145 - - 2.68619 4.42226 2.77521 2.73124 3.46355 2.40514 3.72496 3.29355 2.67742 2.69356 4.24691 2.90325 2.73741 3.18147 2.89802 2.37888 2.77521 2.98519 4.58478 3.61504 0.07194 2.75173 5.18562 0.38748 1.13559 0.34420 1.23369 102 2.75533 3.45647 3.47345 2.91624 3.83534 2.96450 3.94273 3.21754 2.38063 2.90106 3.77237 3.35646 1.67407 3.19684 3.22187 2.90793 3.00408 2.95930 3.25659 3.96431 147 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 103 2.07247 5.10813 2.63379 2.51910 4.41754 3.54115 3.77398 3.86351 2.54899 3.06459 4.19608 3.05346 2.05916 2.52606 3.02946 2.41242 3.00694 3.48706 5.60699 4.23510 148 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 104 2.48316 5.17633 2.61612 2.21490 4.49041 2.86532 3.26928 3.17324 2.34684 3.46828 4.22534 2.80592 3.92141 2.82672 2.53408 2.47717 2.97401 2.70097 5.62798 4.23653 149 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 105 2.46238 4.66589 3.37298 2.81154 3.84738 2.94419 3.88411 2.81844 2.78366 2.61044 3.76567 3.28083 2.26624 3.11639 2.40770 2.87331 2.58030 2.72127 5.22686 3.95367 150 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 106 2.24969 5.18261 3.02028 2.34513 4.50002 2.92416 3.71971 3.96582 2.26215 3.16840 4.23224 2.62895 2.63145 2.82642 2.60656 2.47703 2.68781 3.55864 5.63359 4.24132 151 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 107 2.54480 5.19454 3.01926 2.28075 4.51583 3.52840 3.13617 3.98409 2.22358 3.48883 3.25181 3.00605 2.86978 2.62450 2.33315 2.31545 2.73674 3.57242 5.64099 4.24677 152 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 108 2.75016 4.94404 3.15695 2.59825 4.18659 3.57990 3.78426 3.60250 2.57547 2.91718 4.01983 2.74281 2.45182 2.93536 2.20518 2.34303 2.41397 3.27998 4.04575 4.11719 153 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 109 2.26398 4.05764 3.06560 2.51036 4.39901 2.54896 3.74443 3.84602 2.25272 3.39150 4.16777 3.04422 2.87524 2.65445 2.72131 2.11768 2.97823 3.46818 5.57898 4.20769 154 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07101 4.64131 2.83186 0.61958 0.77255 0.48576 0.95510 110 2.76046 5.18472 3.00395 2.14146 4.50877 2.70367 3.72285 3.96985 2.25781 3.48012 4.24247 3.01090 2.26603 2.83274 2.52479 2.73721 2.40165 3.56643 5.63555 4.25085 155 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01527 4.58557 5.30792 0.61958 0.77255 0.58724 0.81161 111 2.72495 3.64578 2.90703 2.43828 4.04379 3.57864 3.26343 3.12969 2.32905 2.35403 3.90883 3.13631 3.96679 2.96174 2.23423 2.78756 2.74555 3.14825 3.96310 4.03786 156 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01527 4.58557 5.30792 0.61958 0.77255 0.58724 0.81161 112 2.36733 5.16210 2.66615 2.21124 4.47780 2.57108 3.70469 3.94260 2.45333 3.01517 4.21303 2.99176 3.34689 2.81242 2.29049 2.70597 2.53911 3.53735 5.61502 4.22334 157 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01527 4.58557 5.30792 0.61958 0.77255 0.42716 1.05658 113 2.23858 5.19833 2.68293 2.32073 4.52113 3.52509 3.71637 3.46002 2.46106 3.49447 4.24607 2.64293 3.16012 2.82081 2.30857 2.18857 2.73621 3.57719 5.64569 4.24893 158 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 114 2.77687 5.17264 2.99356 2.19205 4.51615 2.93141 3.77364 3.97692 2.53960 3.50160 4.26921 3.03705 2.84869 2.63710 3.02507 1.68315 2.47437 3.57428 5.67067 4.28366 159 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 115 2.75506 5.14749 3.05477 2.49544 4.45073 3.54533 2.93714 3.90425 1.95330 3.43204 4.20043 3.03276 3.48597 2.66623 2.19703 2.34045 2.74582 3.51581 4.10147 3.44313 160 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04795 4.64131 3.29222 0.61958 0.77255 0.48576 0.95510 116 2.29258 5.21021 2.66721 2.09998 4.54181 3.15684 3.69956 4.01831 2.20694 3.50980 3.67373 2.98317 3.02034 2.80053 2.69211 2.27795 2.73869 3.59366 5.65123 4.24857 161 - - 2.68608 4.42153 2.77540 2.73125 3.46374 2.40533 3.72515 3.29374 2.67737 2.69375 4.24710 2.90367 2.73659 3.18167 2.89821 2.37865 2.77502 2.98506 4.58497 3.61523 1.03604 1.08222 1.18319 0.78012 0.61314 0.54780 0.86328 117 2.25146 3.34797 3.21827 2.66147 3.80998 3.48648 2.82319 3.19585 2.62422 2.85967 3.71377 3.13239 3.29098 2.97014 2.76963 2.72203 2.28613 2.91880 5.16656 3.88540 165 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02143 4.24953 4.97187 0.61958 0.77255 0.97957 0.47076 118 2.61874 3.30041 3.32643 2.76674 3.67714 3.52511 3.79442 3.06405 2.69957 2.74844 3.62048 3.21139 2.41839 3.04980 2.54662 2.55147 2.86257 2.80887 5.07144 2.94192 166 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02143 4.24953 4.97187 0.61958 0.77255 0.38435 1.14223 119 2.36083 5.15406 2.78361 2.44457 4.47236 3.18076 3.69921 3.93730 2.30369 3.45009 4.20725 2.36792 3.89960 2.80680 2.58538 2.05051 2.69872 3.13452 5.60931 4.21780 167 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01553 4.56863 5.29098 0.61958 0.77255 0.41262 1.08446 120 2.45907 5.16227 3.06375 2.51036 4.48827 2.61532 3.74374 3.94254 2.33588 3.46364 4.23106 3.04487 3.94748 2.61687 1.91221 2.29289 2.58381 3.54755 5.62736 4.25201 168 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 121 2.16139 4.89249 3.18907 2.63201 4.13532 3.58364 3.80487 3.54372 2.61330 2.54550 3.98445 2.86416 2.78143 2.96674 2.24003 2.31734 2.98107 2.96206 5.42013 4.09838 169 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 122 2.17513 4.59415 3.46236 2.90262 2.59822 3.66477 3.92779 3.14543 2.86587 2.61239 3.71079 3.34807 2.23059 3.19205 2.76821 2.35756 2.98284 2.89681 5.17528 3.91568 170 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 123 1.99124 0.82259 4.67453 4.42051 4.70714 3.29895 5.05582 4.04283 4.30022 3.83321 4.67760 4.05218 4.12111 4.48969 4.40915 1.92222 3.09031 3.47984 6.12915 5.00807 171 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 124 1.93752 1.92547 3.85874 3.30112 3.06163 3.70994 4.11007 2.92026 3.22956 2.65677 3.56237 3.62086 4.14531 2.82845 3.52799 3.00106 2.34259 2.69523 5.04878 3.83334 172 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 125 2.18980 3.60284 3.75529 2.69618 3.52002 3.31856 4.02480 2.04105 3.12555 2.60032 3.50132 3.55083 4.13272 3.41120 3.44366 2.41189 2.34683 2.66004 3.91422 3.76507 173 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01443 4.64131 5.36366 0.61958 0.77255 0.48576 0.95510 126 2.20111 2.53484 3.59831 3.04097 3.72004 3.66353 4.00344 3.08392 2.75594 2.24706 3.67475 3.44385 2.80871 3.30799 3.36083 2.05562 2.98643 2.83921 5.14818 3.90786 174 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00974 4.63662 * 0.61958 0.77255 0.00000 * // HMMER3/b [3.0 | March 2010] NAME Glyco_transf_28 ACC PF03033.13 DESC Glycosyltransferase family 28 N-terminal domain LENG 139 ALPH amino RF no CS yes MAP yes DATE Thu Sep 17 23:04:26 2009 NSEQ 43 EFFN 7.057312 CKSUM 3380827595 GA 26.20 26.20 TC 26.20 26.20 NC 26.10 26.10 STATS LOCAL MSV -10.0618 0.71071 STATS LOCAL VITERBI -10.4218 0.71071 STATS LOCAL FORWARD -4.4128 0.71071 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.29906 4.54364 3.15651 2.76769 3.29612 2.64211 3.58261 2.82374 2.88391 2.34808 3.70210 3.32574 3.10653 3.21062 2.94601 2.81037 2.84731 2.47823 4.62934 3.62497 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.00000 * 1 2.93769 3.13941 5.38672 4.77915 1.70122 4.59823 4.94655 1.56606 4.56954 2.44086 3.87341 4.76449 4.95352 4.70242 4.57916 3.91536 3.63400 1.37878 5.42857 3.63284 1 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 2 1.77095 4.68927 5.27047 4.65832 3.31701 3.83403 4.82903 2.39711 4.44825 1.50386 3.45619 4.65027 4.85348 4.58284 4.46249 3.80410 2.61655 1.47616 5.32437 4.14802 2 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 3 3.45918 5.40997 6.12011 5.52243 1.94161 5.40694 5.74121 2.17953 5.34266 0.78755 3.05347 5.58027 5.62291 5.34535 5.31319 4.75257 4.34343 1.97842 5.99770 4.93331 3 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 4 1.20249 4.71476 5.01357 4.41617 3.81699 4.43509 4.76547 2.76611 4.25382 2.00341 3.24629 4.51673 4.80462 4.43173 4.35078 2.51054 1.90927 2.46657 5.34242 4.15992 4 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 5 1.99076 3.76121 4.62866 4.06843 4.09298 1.74549 4.75721 2.82870 3.98098 3.18175 4.09010 4.31070 3.62899 4.23085 4.22666 1.89520 2.10421 2.12195 5.58008 4.38005 5 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 6 3.05486 3.17617 5.19573 4.58377 2.89352 1.40599 3.60302 2.22944 4.37947 2.59647 2.94002 4.59133 4.80934 4.51996 4.40504 2.86784 3.51340 2.58711 5.28457 2.19123 6 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 7 2.90647 5.45675 5.35380 5.39797 6.34621 0.24861 6.30413 5.88868 5.65251 5.56345 6.30355 5.02196 2.59956 5.71616 5.70684 3.74536 4.12958 4.91021 7.63753 6.63559 7 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 8 2.34387 5.36275 4.84523 4.50611 5.62866 4.14471 3.59200 5.08251 4.51339 4.74135 5.53867 4.58734 4.91065 4.79173 4.81730 1.42337 0.66712 4.46356 6.95540 5.76208 8 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 9 1.95982 5.39273 4.39775 3.89193 5.32274 1.43454 4.98655 4.75551 3.80515 4.37259 5.16973 4.21038 4.76129 4.17417 1.04376 2.96811 3.18345 3.41887 6.58573 5.32380 9 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 10 2.58632 5.35332 5.69345 5.71014 6.28930 0.25536 6.35160 5.81044 5.74688 5.50139 6.22075 5.04638 5.02879 5.78916 5.72542 2.98462 3.14628 4.81448 7.62314 6.62906 10 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 11 3.25814 6.94187 0.89104 3.31537 6.24123 4.41195 0.91182 6.01827 4.35918 5.46015 6.39812 3.90853 5.13197 4.34973 5.06102 4.18591 4.69472 5.50334 7.49624 5.87450 11 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 12 3.90367 5.18630 5.94646 5.38362 2.46567 5.25482 5.68940 1.33591 5.22278 2.13244 3.53464 5.42275 5.54472 5.35790 5.25870 4.60625 3.18817 0.97168 6.08782 4.92497 12 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 13 3.22232 5.27822 3.72298 1.45248 1.99544 4.08888 3.61428 3.17259 3.15001 3.51945 4.36031 3.66254 4.47638 2.12662 3.59291 2.96374 3.09243 3.29794 5.80516 2.66914 13 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 14 3.48649 5.29936 4.47447 4.16607 4.84597 3.32975 5.14778 3.01735 4.16787 3.26115 4.84776 3.40279 0.43566 4.49613 4.45155 3.69924 3.88213 3.86894 6.28840 5.05292 14 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 15 1.53476 2.80103 5.12925 4.52164 2.19640 3.10133 4.76405 2.37630 4.33128 2.00233 3.79164 3.67050 4.80133 4.48397 4.37992 2.45051 3.51226 2.92128 5.29325 3.07608 15 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 16 2.23872 4.67144 5.21055 4.59885 3.76547 4.45731 3.90974 1.96305 3.55578 1.54186 3.04678 4.60491 4.82083 4.53407 4.41834 3.76705 3.03012 1.38752 5.29624 4.11920 16 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 17 0.64640 5.20116 4.86088 4.39518 4.97477 3.23067 5.26249 4.35449 4.34217 3.31640 4.92946 4.51377 2.17913 4.60590 4.63081 2.35957 3.79305 2.78916 6.39453 5.19925 17 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 18 3.30712 5.06645 5.74351 5.14848 2.78190 4.99659 5.36022 2.18938 4.95723 0.90493 3.48161 5.16414 5.30378 5.05860 4.96393 4.32753 3.47155 1.43086 5.76818 4.62457 18 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 19 1.07810 4.81373 4.49293 3.91499 3.50455 1.84064 4.60811 2.83063 3.45245 2.79008 3.37036 4.20966 4.69595 4.08450 3.57683 3.19768 3.13014 2.76876 5.41712 4.21299 19 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 20 2.96691 5.68829 2.79227 2.26176 5.02518 3.97404 3.74366 3.67819 2.14960 2.54298 4.73110 2.96936 3.65265 2.54279 2.12052 3.16329 3.08283 2.65727 2.84086 4.71993 20 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 21 1.82278 5.70319 3.45057 1.48668 5.04581 2.65068 3.46686 4.52945 2.52120 4.00704 4.74467 3.44258 4.36746 2.98482 2.41797 3.16335 2.56127 4.09255 6.13697 3.56547 21 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 22 3.36704 5.76646 6.50911 5.93220 2.76232 5.86450 6.18025 3.23546 5.78063 0.35768 3.86169 6.05638 5.96605 5.66411 5.71567 5.24870 4.74311 2.35973 6.23979 5.22216 22 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 23 2.79302 5.56427 3.52094 2.71798 4.85170 4.00514 4.19861 2.85053 2.14289 2.90492 3.14258 3.49984 3.70763 1.72000 1.78011 2.99898 3.43705 3.54174 6.03273 4.66043 23 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 24 2.04287 5.70988 2.78101 2.18866 5.05596 3.30252 3.66219 4.54256 1.98829 3.36426 4.75031 2.78846 4.36380 3.03673 1.68184 3.15888 2.89920 4.10107 6.14189 4.73044 24 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 25 2.29742 5.66410 3.11196 2.23103 3.59540 3.97986 4.16881 4.46354 2.60504 2.55241 4.70971 3.45484 4.37288 2.46995 1.46390 2.89791 3.43014 4.04472 6.10798 3.15213 25 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 26 3.09021 6.33437 2.23725 2.33922 5.65040 0.64949 3.94386 5.16047 3.56024 4.63976 5.43511 3.32053 4.76867 3.78451 4.12190 3.68142 4.03547 3.74190 6.78902 5.31295 26 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08630 5.64863 2.53628 0.61958 0.77255 0.48576 0.95510 27 2.63094 4.79226 4.39260 3.81746 3.88703 4.26730 1.06098 2.56147 3.73551 2.99292 3.90348 3.51166 2.65694 4.00073 4.00531 3.53497 3.45230 2.84521 3.27651 3.21654 27 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00569 5.56802 6.29037 0.61958 0.77255 0.56361 0.84199 28 2.57555 5.68647 1.79201 1.53095 5.03256 3.54239 3.62795 3.79209 2.73080 3.99218 4.72691 2.66405 4.33972 2.53170 2.65296 2.84029 3.18899 4.07766 6.11849 4.70679 28 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00548 5.60582 6.32816 0.61958 0.77255 0.68958 0.69673 29 2.91482 5.20632 5.97928 5.45483 4.54426 5.34591 5.90750 2.30908 5.32991 3.22994 2.92963 5.52263 5.65674 5.53303 5.42376 4.72118 3.01553 0.45118 6.35187 5.14753 29 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04072 5.60582 3.31795 0.61958 0.77255 0.37662 1.15892 30 2.78418 3.20493 3.60021 2.48528 4.61850 3.65024 2.85423 2.37366 2.51471 3.35137 4.45489 3.56042 4.41643 3.38369 1.48829 2.86688 2.90601 3.03938 5.88801 4.55533 30 - E 2.68608 4.42275 2.77569 2.73173 3.46102 2.40563 3.72544 3.29250 2.67767 2.69333 4.24669 2.90396 2.73789 3.18196 2.89851 2.37937 2.77504 2.98455 4.57879 3.61300 0.34725 1.23236 6.33742 0.80968 0.58879 0.39547 1.11891 31 4.53873 5.75446 6.55803 5.97666 3.02975 5.93546 6.26709 1.70405 5.83403 1.02657 1.75033 6.11817 6.00569 5.71555 5.76757 5.32049 4.74858 1.70804 6.30950 5.33623 34 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 32 1.22361 2.59319 5.19534 4.63581 4.05921 1.35468 4.99828 2.73712 4.47459 2.68792 4.06367 4.66358 4.89913 4.64941 4.56620 3.77918 3.65406 2.64489 5.59421 4.41467 35 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 33 2.00418 4.91140 3.54520 3.66802 4.03922 4.25893 4.52307 2.75137 3.22216 2.57063 4.01816 4.04235 4.63648 3.48576 3.93635 2.62032 1.61359 1.63268 5.50191 4.27890 36 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 34 2.84176 4.00494 2.92926 2.55045 5.04013 3.27450 2.32021 3.59682 2.11985 4.00246 4.74038 3.44080 1.69079 2.79466 3.38770 2.62233 2.76225 4.08740 6.13364 4.72491 37 - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 35 2.68417 4.09987 2.83001 2.15608 5.04162 3.23200 4.15929 4.52528 2.59986 3.51937 4.74136 2.83550 1.42691 3.25669 2.38398 2.96726 3.42812 4.08870 6.13447 3.76893 38 - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 36 2.43836 5.70832 2.08920 2.35861 5.05226 1.82382 4.16067 4.53761 2.71269 3.50119 4.74943 2.06172 4.36661 3.25752 2.49249 2.91624 3.43110 3.40545 6.14161 4.73103 39 - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 37 2.61030 3.43970 5.24278 4.62763 2.37418 3.75644 4.78445 2.29887 4.41313 1.32478 2.27768 4.61252 4.81479 3.61984 4.42232 2.71603 3.51426 2.60976 5.27908 3.16351 40 - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 38 2.40219 5.58102 2.73385 1.71973 4.87498 3.59313 4.19150 3.11744 2.40033 3.25786 3.63655 3.48893 4.39025 3.30743 2.37825 3.19202 2.84596 2.05258 6.04558 4.66777 41 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 39 2.49830 5.70978 2.22143 1.89093 5.05601 2.83567 3.24683 4.54282 2.42560 4.01556 4.75014 3.02675 2.98146 3.25263 2.64723 2.27352 2.60190 4.10105 6.14177 3.86904 42 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 40 2.61860 5.43884 3.33103 2.59194 1.81097 3.59668 3.74596 4.10636 2.58550 2.34755 3.64065 3.55918 4.42562 2.77398 2.21118 3.01901 2.85160 3.77503 3.89975 3.82894 43 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02653 5.64863 3.78708 0.61958 0.77255 0.48576 0.95510 41 2.66121 3.82660 5.21391 3.67621 3.74204 4.43902 4.77197 1.92212 4.39010 1.71667 3.76798 4.59447 3.49216 4.52553 4.40602 3.74954 2.74998 1.26252 3.83796 4.09540 44 - H 2.68629 4.42256 2.77550 2.73132 3.46322 2.40528 3.72525 3.29292 2.67748 2.69386 4.24720 2.90349 2.73745 3.18177 2.89831 2.37886 2.77550 2.98279 4.58508 3.61534 0.44923 1.02128 6.34981 0.14679 1.99126 0.42420 1.06217 42 2.36158 5.67378 3.18340 1.30053 5.00423 3.97795 4.16657 3.62471 2.43915 2.61708 4.71838 3.45126 2.62530 3.26783 2.72511 3.16804 2.61242 4.05655 6.11527 4.71347 47 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 43 2.09482 5.70944 2.93148 1.86851 4.09524 3.01564 4.15679 4.54218 2.16693 4.01514 4.74985 3.07122 4.36331 2.28885 2.98050 2.15760 2.54681 4.10061 6.14153 4.72996 48 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 44 1.37795 5.59810 2.72586 2.66246 3.54866 3.99406 3.01272 4.35411 2.76220 3.88412 3.86262 3.48136 4.38635 3.08036 2.77423 2.53766 2.67144 2.88052 6.05851 3.30217 49 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 45 3.43900 5.95053 3.06829 2.62341 5.27529 0.73752 3.66539 4.76248 2.74184 3.56430 5.00693 2.97992 3.19127 3.48010 3.66405 3.38625 3.68011 4.33227 6.38687 4.96145 50 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 46 3.62830 4.97273 5.60246 4.99568 3.91313 4.83895 5.17776 1.70333 4.79337 0.82878 3.48700 5.00296 3.92535 4.89214 4.79513 4.16106 3.85804 2.01387 5.60263 3.01791 51 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 47 2.20363 5.70614 2.84393 2.02712 3.88221 3.57770 3.28411 3.81338 2.53473 4.01126 4.74691 3.11940 2.35105 2.65918 3.38505 2.52356 2.03209 4.09657 6.13907 4.72835 52 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 48 1.53220 4.67593 5.10933 4.50286 1.72721 3.00917 3.26134 2.61191 4.31649 2.40265 3.36689 4.55098 4.79872 4.47274 4.37192 3.22166 2.86114 2.67789 5.29552 2.70776 53 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02654 5.64863 3.78667 0.61958 0.77255 0.48576 0.95510 49 2.59726 3.69266 3.35513 2.14185 4.58314 4.04375 3.30169 3.08155 2.74922 3.61016 4.43182 3.58683 4.43284 3.08861 2.58365 3.24922 3.07762 1.39867 5.86897 3.22793 54 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00536 5.62745 6.34980 0.61958 0.77255 0.59288 0.80460 50 2.02433 5.59387 3.19472 2.50997 3.31322 3.27205 4.17198 3.71170 2.71896 2.97911 4.64572 3.46572 1.60144 3.03703 3.04646 2.59347 2.69579 3.96193 6.05232 4.66799 55 - E 2.68632 4.42239 2.77533 2.73137 3.46253 2.40526 3.72433 3.29368 2.67754 2.69344 4.24703 2.90360 2.73753 3.18160 2.89814 2.37864 2.77533 2.98502 4.58491 3.61444 0.09997 2.37097 6.34980 0.68011 0.70636 0.42417 1.06222 51 3.52305 4.87060 5.50860 4.90571 3.28941 4.73605 5.08176 1.30851 4.70206 1.70387 3.90213 4.90031 5.07667 4.82497 4.71148 4.05711 3.22394 1.78054 5.53856 1.84927 58 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 52 2.52287 5.71937 2.73186 2.65862 5.06259 1.33820 4.17038 4.54809 2.77856 4.02400 4.76126 2.85203 2.43436 3.09621 3.18303 2.83662 2.52390 4.10917 6.15305 4.74172 59 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 53 2.38129 3.97034 2.94555 3.39667 4.22295 2.40721 4.41226 2.69831 3.36561 2.30587 4.16490 3.84357 2.10361 3.68447 3.02463 2.27801 2.80648 2.62282 5.63439 4.37896 60 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 54 2.96696 5.71030 1.72735 2.08512 5.05645 2.38575 4.15721 4.54322 2.53100 4.01604 4.75071 3.00889 3.34656 2.57570 2.42393 2.71658 3.22414 3.07544 6.14232 4.73065 61 - - 2.68746 4.42877 2.77440 2.73159 3.45260 2.40950 3.72897 3.29357 2.68070 2.68873 4.22499 2.90492 2.73863 3.18036 2.89318 2.38258 2.77818 2.98609 4.55047 3.61741 2.01323 0.83442 0.83859 2.91745 0.05559 0.48576 0.95510 55 2.71559 4.63275 2.73754 3.28298 3.76598 3.92470 4.18187 2.76732 3.23370 2.07565 3.03079 3.67787 3.31885 3.53077 2.92523 2.74929 2.23309 1.90940 5.21791 3.98787 98 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00923 5.08545 5.80780 0.61958 0.77255 0.41001 1.08958 56 3.11524 4.09333 3.13042 2.11992 4.96994 2.28768 4.07612 4.45567 1.91303 3.33072 4.66588 3.35666 2.82995 2.11598 2.63155 2.74853 2.73280 4.01563 6.05795 4.64722 99 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00607 5.50261 6.22496 0.61958 0.77255 0.68595 0.70040 57 2.28834 3.10713 4.89876 4.30090 2.46962 2.63000 3.18895 3.08141 4.14358 1.64921 3.75884 2.77682 4.71910 4.32651 3.38156 3.27050 3.44932 2.25175 4.11093 3.03842 100 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00576 5.55637 6.27872 0.61958 0.77255 0.68924 0.69707 58 2.48006 5.63553 2.99990 2.71338 4.96617 2.84013 4.12769 4.44205 2.30454 3.46989 3.58326 3.16028 2.55512 2.81658 2.11805 3.12898 3.39102 3.41817 2.08033 4.67490 101 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00561 5.58154 6.30389 0.61958 0.77255 0.78589 0.60828 59 1.76074 5.64497 3.06412 2.66361 4.05670 2.70523 4.12515 4.45834 2.62401 3.57293 3.96575 2.60328 4.33022 2.90254 1.81302 2.64234 3.14605 3.08582 6.08393 4.67934 102 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.47096 5.58154 0.98931 0.61958 0.77255 0.78589 0.60828 60 2.92901 5.40252 3.19260 2.63642 4.73274 2.84765 3.17005 4.20790 1.70319 3.06882 4.44722 2.79566 3.46837 2.65930 2.58117 2.40018 3.16005 3.36670 5.84392 2.86540 103 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00892 5.11950 5.84185 0.61958 0.77255 1.65400 0.21231 61 2.71954 4.47966 4.28092 3.05375 2.45816 2.35097 4.33004 2.64096 3.60132 1.71120 3.59268 3.29059 3.16693 3.84339 3.82738 2.85097 3.19239 2.43189 3.46820 3.88738 104 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.59971 5.11950 0.80957 0.61958 0.77255 0.12741 2.12334 62 2.75641 5.52008 2.43083 2.13625 3.01651 3.81258 2.73982 4.33313 2.73967 2.52151 3.44889 2.69618 3.69288 2.20468 2.56131 3.00209 3.26602 3.90502 5.95915 4.55467 105 - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00710 5.34689 6.06923 0.61958 0.77255 0.17434 1.83265 63 2.93156 5.39101 3.21807 2.85940 3.02655 3.60411 3.66496 2.97648 2.81288 2.79671 2.39298 3.29713 3.27144 2.97026 3.09653 2.06517 2.12913 2.99917 5.89819 4.56826 106 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 64 2.85405 4.92131 4.21394 3.09028 2.73502 2.88202 4.51324 2.79873 3.12173 2.06118 3.43003 2.80232 2.48812 3.51144 3.50041 2.28401 3.48236 2.52668 3.99314 3.13413 107 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 65 2.18577 5.70999 2.92312 2.43867 5.05629 2.38183 3.77229 4.54314 1.91183 4.01579 4.75033 3.13425 3.33471 2.50443 2.78465 2.40124 2.34743 4.10129 6.14192 4.73022 108 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 66 2.42950 5.31553 2.94072 2.67974 2.86570 2.71143 4.28526 2.85069 2.63839 2.59373 2.73029 2.33872 4.46197 3.46067 3.56693 2.93913 2.25464 3.21841 5.83797 4.52626 109 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 67 2.77454 4.65931 5.23283 4.61841 2.52057 3.55452 4.78329 2.23351 3.82360 1.23264 2.54256 4.60848 2.54131 4.53993 4.41913 3.76115 3.51469 2.37577 5.28089 3.38487 110 - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 68 3.04262 4.98391 4.09260 3.52583 3.63948 3.50396 4.46666 3.02695 1.81750 2.15838 3.06580 3.60942 2.99945 3.78836 2.57627 2.63501 2.30923 2.49145 4.14650 4.32539 111 - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 69 2.68671 5.69628 2.32394 1.92589 4.02485 3.54535 4.15988 3.77377 2.89641 3.02316 4.73817 2.96854 2.89536 3.03652 2.70378 1.92840 2.47329 3.70395 6.13179 4.72369 112 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 70 2.38136 4.68585 3.85119 4.44534 2.46680 3.28060 4.74832 2.23586 4.27119 1.70165 3.80368 4.52149 2.23481 4.43846 4.34773 3.39443 2.55937 2.00994 5.30460 4.12368 113 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 71 1.72806 5.13536 3.30862 3.30834 2.62686 2.93130 3.50501 3.68209 2.87051 2.08371 3.80103 3.30949 3.15147 3.11546 3.69686 2.93090 3.46258 2.99635 3.22528 3.32108 114 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 72 2.20142 5.70751 2.22427 2.00944 5.05281 3.97006 3.47617 3.45608 2.10414 3.05500 4.74812 3.11891 4.36354 2.85186 2.28636 2.46014 3.42752 4.09827 6.14006 3.67366 115 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 73 2.98899 5.62738 3.04307 2.40484 3.17942 1.91518 4.17821 3.25308 2.35484 2.65389 4.67695 3.12112 4.37995 2.65802 2.40309 2.90408 3.43123 2.59260 6.08055 4.69065 116 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.48938 5.64863 0.95849 0.61958 0.77255 0.48576 0.95510 74 2.64351 3.86966 3.15364 2.74504 3.20339 2.23793 4.15291 2.93647 3.11579 1.92930 3.88371 2.98399 4.29497 3.43261 2.71041 2.83215 3.20209 3.06839 3.34654 3.48892 117 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00850 5.16775 5.89010 0.61958 0.77255 1.60393 0.22453 75 2.94982 5.40323 2.87386 2.66563 4.72503 3.38255 3.92229 3.12306 1.92087 2.79413 4.45008 2.76418 3.39974 2.32999 2.16678 2.72879 2.97179 3.35731 3.91643 4.45367 118 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00850 5.16775 5.89010 0.61958 0.77255 1.26752 0.33063 76 1.81340 3.78371 3.42935 2.31059 3.38159 2.18972 3.30623 3.76844 2.86173 2.98918 4.21279 3.38324 4.22598 2.74893 3.31837 2.49701 2.74174 3.16240 5.65115 4.32885 119 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00791 5.23893 5.96128 0.61958 0.77255 1.37458 0.29162 77 2.69052 4.45556 4.80081 4.19881 3.10308 4.19049 4.51247 2.09205 4.02743 1.85851 2.80123 3.28743 3.45060 3.43425 2.67982 3.49218 2.70438 1.99627 4.02885 3.04691 120 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00771 5.26549 5.98784 0.61958 0.77255 1.48523 0.25676 78 2.78557 5.38999 2.93809 2.06487 3.17737 3.14727 3.28276 3.11929 2.24437 2.82631 4.44309 3.05855 4.18303 3.09706 2.00276 2.98404 3.22867 2.75343 5.85133 4.47010 121 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00771 5.26549 5.98784 0.61958 0.77255 1.33587 0.30507 79 2.50593 5.50917 2.71686 2.03831 4.01322 3.78239 3.96981 4.33394 1.96062 2.78785 4.55080 3.25127 4.17578 2.12450 2.61451 2.46171 2.92227 3.40908 5.94404 4.53534 122 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00750 5.29208 6.01443 0.61958 0.77255 1.44807 0.26791 80 1.66738 4.46548 4.84856 4.24476 3.00862 3.26867 4.53446 2.15265 4.06710 2.23341 3.58343 4.31279 4.57588 4.23119 4.13752 2.25837 2.39931 2.17307 3.58597 3.90416 123 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00750 5.29208 6.01443 0.61958 0.77255 0.98829 0.46555 81 2.69056 5.29644 2.73558 2.48675 2.65949 3.88633 4.08802 2.91712 2.11360 2.68551 3.03458 3.04979 4.27659 3.23082 2.23675 3.08725 2.58739 3.63353 5.79235 3.78293 124 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00685 5.38293 6.10528 0.61958 0.77255 1.30051 0.31799 82 2.29313 4.21160 2.97361 1.84382 3.19787 3.83391 4.02282 4.32456 1.95806 3.82052 3.47459 3.30824 4.22697 2.73981 2.32504 2.86268 2.83366 3.90397 5.96564 3.35013 125 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00685 5.38293 6.10528 0.61958 0.77255 1.30051 0.31799 83 2.28796 4.63786 4.37566 3.37693 3.23701 3.27415 3.64746 1.94900 3.27839 1.95255 3.75014 4.07563 4.54351 3.95357 3.19804 2.48478 2.56295 2.18135 5.24262 3.60616 126 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00685 5.38293 6.10528 0.61958 0.77255 1.30051 0.31799 84 3.40562 4.75828 5.37798 4.76440 2.56606 4.59467 4.91240 1.91343 4.55410 0.93541 2.82609 4.76052 4.91756 4.64152 4.54549 3.91332 3.63324 2.48246 3.11876 3.48243 127 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00685 5.38293 6.10528 0.61958 0.77255 1.30051 0.31799 85 2.22701 5.53802 3.07557 1.99716 4.87239 3.23474 4.01906 2.86055 1.81715 2.84721 4.58150 3.30254 3.50270 2.94930 2.66047 2.51456 3.28425 3.92290 5.97715 3.75153 128 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00685 5.38293 6.10528 0.61958 0.77255 1.30051 0.31799 86 2.69734 5.51614 2.62869 2.09497 4.84143 3.16832 4.02440 2.87874 2.37555 2.88014 3.02088 2.78727 2.96992 3.12744 2.58017 2.61677 3.05181 3.08716 5.96085 4.56214 129 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00685 5.38293 6.10528 0.61958 0.77255 1.30051 0.31799 87 2.35444 5.32429 2.57373 2.59301 2.47508 2.88939 3.39015 3.45494 2.50035 2.72605 4.38956 2.97353 4.26968 2.41714 3.33431 3.07839 3.07107 2.96892 4.16855 3.35312 130 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00685 5.38293 6.10528 0.61958 0.77255 1.30051 0.31799 88 3.05352 3.68078 3.06639 2.24322 2.98604 3.83380 4.02269 4.32537 1.83085 2.71355 4.56818 3.04450 3.50340 2.67215 2.73702 2.30143 2.57825 3.90455 5.96600 3.71417 131 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07812 5.38293 2.65134 0.61958 0.77255 1.30051 0.31799 89 2.46329 3.91657 2.37629 2.44766 4.37268 3.87947 4.08881 2.71063 2.71489 2.51447 3.35155 3.43146 1.80023 3.25710 3.00486 3.08690 3.26156 3.47511 5.67236 4.35462 132 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00735 5.31216 6.03450 0.61958 0.77255 1.41838 0.27721 90 2.22219 4.03917 1.83640 2.00809 4.86594 3.79207 3.10443 4.35029 2.54041 3.31840 4.56460 2.94070 4.18581 2.22697 3.20810 2.98135 2.70757 3.91263 5.95734 4.54772 133 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00735 5.31216 6.03450 0.61958 0.77255 1.41838 0.27721 91 2.02374 4.65144 3.42434 3.60815 3.76957 3.24995 3.45126 2.68725 3.53571 1.91251 3.76110 3.93888 3.32345 3.80600 3.82133 3.08621 2.34801 1.86316 5.24952 3.33534 134 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00735 5.31216 6.03450 0.61958 0.77255 1.41838 0.27721 92 2.80681 3.65023 2.85973 3.65591 3.75049 4.10828 4.38933 2.37964 3.57776 2.19485 3.74537 3.30947 2.79685 3.84162 3.84966 2.44139 2.87658 1.53329 5.23545 4.02741 135 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03735 5.31216 3.45061 0.61958 0.77255 1.19350 0.36120 93 2.04359 4.46222 5.00082 4.38848 2.81428 4.24529 4.57650 1.91004 4.18296 2.10399 3.58088 4.39332 3.76476 3.44659 4.20655 3.17927 3.31290 1.81537 2.82267 2.82187 136 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00727 5.32303 6.04538 0.61958 0.77255 1.40166 0.28261 94 2.23858 5.51465 2.83499 2.17419 4.85182 1.82003 3.98767 4.33222 2.52716 3.34533 4.55750 3.27020 3.35949 3.08662 2.64430 2.36254 2.93758 3.21992 5.95219 4.54607 137 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00727 5.32303 6.04538 0.61958 0.77255 1.23303 0.34448 95 2.11523 4.51659 4.78336 4.18506 1.97658 4.22993 4.54791 2.71253 3.02755 2.41957 3.05873 3.46211 4.59655 4.20771 4.13036 2.73818 2.07674 2.18453 3.75672 3.43703 138 - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00707 5.35164 6.07398 0.61958 0.77255 1.35539 0.29820 96 2.31149 3.11869 3.96355 2.28109 4.11543 1.16632 4.38840 3.45160 3.38060 2.81010 4.06688 3.81528 4.45345 3.68949 3.74874 3.28851 3.35709 2.52056 5.54421 4.30291 139 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04845 5.35164 3.15687 0.61958 0.77255 1.35539 0.29820 97 3.07100 5.52128 2.89054 2.46967 4.83980 1.20456 4.03809 3.16599 2.79794 3.81675 4.57448 3.02952 4.23295 2.53405 3.29052 2.63274 2.74512 3.89868 5.97254 4.57313 140 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00736 5.31055 6.03289 0.61958 0.77255 1.42082 0.27643 98 3.08016 2.84137 4.01834 3.44875 2.30196 4.07050 4.31146 3.25562 3.37547 2.97050 3.86966 3.27107 4.44871 3.15666 2.14301 2.79984 3.31175 3.03619 5.30397 1.55733 141 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00736 5.31055 6.03289 0.61958 0.77255 1.18792 0.36364 99 2.33853 4.67672 3.54231 3.62184 3.06781 4.11659 2.82899 2.39735 3.55038 2.87930 3.78617 3.95529 3.22793 3.11219 3.39888 2.67993 3.31206 1.61804 3.13049 3.36921 142 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00707 5.35164 6.07398 0.61958 0.77255 0.32806 1.27410 100 1.30940 4.50437 2.84479 2.47662 4.99864 3.54883 4.13082 4.47970 2.57769 3.96288 4.70311 3.09263 4.33632 2.87188 3.12773 1.81169 3.39784 3.53365 6.09749 3.78537 143 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00554 5.59483 6.31718 0.61958 0.77255 0.73462 0.65333 101 2.48808 5.01870 1.78644 3.38655 3.67180 2.46539 4.38927 3.18044 3.35360 2.05458 4.11686 3.82792 3.54132 3.67010 3.25706 3.12372 2.61797 2.14841 5.58789 4.33589 144 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00554 5.59483 6.31718 0.61958 0.77255 0.73462 0.65333 102 2.46874 4.83896 2.61856 3.73742 3.95858 4.25741 4.53031 2.89028 3.67018 1.62486 3.38111 4.08194 1.63013 3.14513 3.96794 3.51805 3.46002 2.30467 5.43603 4.22170 145 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00554 5.59483 6.31718 0.61958 0.77255 0.73462 0.65333 103 1.57140 4.68489 4.85515 4.26192 3.78696 3.01725 4.68523 2.73037 4.11726 1.78159 3.80360 4.40779 3.02692 4.31322 3.52842 3.66204 2.93372 1.58658 5.30343 4.11739 146 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00554 5.59483 6.31718 0.61958 0.77255 0.73462 0.65333 104 3.24637 3.87409 5.16532 3.63897 2.57938 2.62194 4.74200 2.33848 4.34778 1.81026 2.42308 3.66347 4.77494 4.48744 4.37178 2.64026 2.76197 1.96742 5.24913 2.95826 147 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00554 5.59483 6.31718 0.61958 0.77255 0.53043 0.88758 105 2.63073 4.64594 5.21679 4.60293 2.92917 2.43839 4.77104 1.79582 4.39175 1.83003 3.76461 4.59478 4.80130 4.52623 4.40597 3.74850 2.01940 1.92043 5.26937 3.15990 148 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02878 5.62173 3.69885 0.61958 0.77255 0.61959 0.77255 106 1.24487 5.59728 3.18667 2.40003 4.90741 1.83643 4.16327 4.36793 2.91658 3.20933 4.65163 3.11657 4.36217 3.27388 3.01921 2.88271 3.41435 3.41542 6.05624 4.66874 149 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00552 5.59847 6.32081 0.61958 0.77255 0.51075 0.91641 107 1.58687 5.52620 2.83578 2.96132 4.80552 3.11139 4.19158 3.58457 2.95942 2.44587 4.58540 3.01308 4.38723 2.18078 3.43785 2.10310 2.85800 3.25912 6.00115 4.63411 150 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00537 5.62600 6.34834 0.61958 0.77255 0.59975 0.79617 108 2.36620 5.09227 3.89367 3.33080 3.67876 4.14194 3.87949 2.73621 2.55565 2.21582 4.18669 2.98842 2.48751 3.30188 2.77700 2.44752 2.50177 2.72378 3.80523 3.63027 151 - H 2.68633 4.42240 2.77534 2.73138 3.46369 2.40494 3.72509 3.29288 2.67756 2.69370 4.24705 2.90361 2.73708 3.18161 2.89761 2.37902 2.77534 2.98474 4.58492 3.61518 0.04516 3.16049 6.34834 1.36808 0.29383 0.59975 0.79617 109 2.53214 5.14332 3.00676 3.26942 2.70177 3.53589 4.34683 3.69709 2.72470 2.09531 4.23424 3.74266 3.48604 3.32492 2.68870 2.22416 3.44716 2.80421 3.86058 2.20473 157 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00537 5.62600 6.34834 0.61958 0.77255 0.59975 0.79617 110 1.78823 3.32950 3.50220 2.53810 4.84226 3.98855 3.18463 4.29030 2.94426 2.23038 4.04679 3.09475 3.65209 2.17120 2.49013 2.49919 3.42121 3.39118 6.02156 4.64747 158 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00537 5.62600 6.34834 0.61958 0.77255 0.59975 0.79617 111 2.85861 5.63122 3.07536 2.31266 3.94483 2.13204 3.53324 3.87792 2.22249 3.30810 3.32387 3.12232 4.36330 2.74221 2.30937 3.16153 2.88834 3.12194 4.02657 3.10944 159 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00537 5.62600 6.34834 0.61958 0.77255 0.59975 0.79617 112 1.94383 4.98682 3.45086 3.06025 4.12958 2.62202 4.44282 1.57989 3.10033 2.87177 4.08831 3.90679 3.16273 3.75416 3.81453 3.16648 3.46171 1.91046 5.56415 4.32298 160 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00537 5.62600 6.34834 0.61958 0.77255 0.59975 0.79617 113 1.80505 5.45502 3.56473 2.78393 4.70903 2.85183 3.39037 4.13509 2.78461 3.72049 4.52152 3.53607 1.49903 2.99146 3.47439 3.22014 3.43197 2.37095 5.94661 3.65294 161 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00537 5.62600 6.34834 0.61958 0.77255 0.59975 0.79617 114 1.86164 4.75922 4.61583 4.03286 3.86641 4.33821 4.63386 2.05060 3.92780 2.00118 3.87301 4.27938 2.83722 3.49440 2.57294 3.21459 2.42002 2.02453 5.36759 4.17095 162 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00537 5.62600 6.34834 0.61958 0.77255 0.42056 1.06909 115 3.27370 4.72109 4.85227 4.25972 2.47444 4.39416 2.41378 1.93731 4.12076 2.43889 3.83717 1.93460 4.76215 4.32152 3.54670 2.71079 3.09955 2.01857 5.33533 3.44906 163 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 116 2.75719 4.97681 5.66860 5.08503 3.46557 4.93141 5.32601 1.58426 4.90043 1.96963 3.49694 5.09638 5.26269 5.04661 4.92911 4.26413 3.05398 0.92870 5.78647 4.60685 164 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 117 1.33391 5.45400 3.63990 2.84409 4.74292 3.49942 1.38510 4.16098 3.14468 3.76541 4.57956 3.14774 4.49183 3.48947 3.60588 3.30619 2.91460 2.95604 6.00865 4.67503 165 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 118 3.51479 6.06225 2.63801 0.60145 5.38676 4.11647 3.44865 4.88687 3.24679 4.35956 5.12115 3.07002 4.59401 3.54389 3.77093 3.04649 3.23473 4.44480 6.49399 3.82025 166 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 119 2.11711 5.69054 2.59101 2.89728 5.02832 3.97395 3.14863 4.50910 2.14841 3.99266 3.88268 3.44426 4.36724 1.73567 2.99178 2.56445 3.42863 3.53962 6.12755 2.30811 167 - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 120 3.21370 5.43266 2.77213 3.04450 3.63901 4.04031 3.54256 4.09583 3.03895 2.00656 4.50191 1.61411 3.68415 3.38953 2.83472 2.90545 3.44504 3.76746 5.92768 2.01479 168 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 121 2.06556 5.32418 2.30900 3.12160 3.24451 1.72774 4.28193 3.23174 2.91129 2.76039 4.40249 3.62853 4.45944 2.78313 3.56197 2.30043 3.44879 2.97544 5.84504 4.53131 169 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 122 3.27662 4.72281 3.86158 3.53699 3.82317 4.39796 4.70913 1.15801 4.12548 1.85898 3.83899 4.42505 4.76581 4.32677 2.84517 2.98836 3.50872 1.91766 5.33826 3.55616 170 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 123 2.35686 5.35274 2.90040 3.20541 4.58170 4.11729 4.37093 3.97255 2.88506 2.99975 3.28797 3.70425 0.86109 3.55648 3.65098 3.35871 3.52560 3.68069 5.90415 4.59907 171 - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 124 2.87232 4.77530 2.89381 3.36250 2.54625 1.49908 4.64521 2.81375 3.93538 2.17289 3.30580 4.28821 4.72166 4.17229 4.15079 2.90281 3.49887 3.03122 3.77396 2.36967 172 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 125 1.99617 4.74044 4.76157 4.17317 2.36644 3.44291 3.51408 2.49849 2.54450 1.50534 3.52086 4.36980 4.74710 4.26437 3.26823 3.18158 3.09896 2.48578 5.35249 4.16178 173 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 126 1.86344 4.83743 4.42007 3.84445 3.95353 4.30555 4.58462 3.07022 3.76746 2.75580 3.33266 3.54540 3.72831 4.03279 2.73799 2.59230 1.86352 1.78972 5.43731 2.89696 174 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 127 2.12691 5.31419 2.91570 3.12966 3.51348 3.19176 3.47930 3.92581 3.11824 1.89473 4.39323 1.72211 4.46245 3.18843 3.56784 3.05335 2.56281 3.26990 4.08828 4.52553 175 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 128 2.72825 5.47881 3.59854 3.03805 2.01162 4.04448 1.99648 4.15967 1.78641 3.28423 4.54494 3.56186 4.43398 2.80582 2.31892 3.24643 3.12440 3.15889 5.96635 4.62218 176 - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 129 2.44466 4.66029 5.22001 4.60641 2.21476 4.44819 2.30709 2.23462 4.39687 2.04739 3.77911 4.60230 3.97432 4.53286 4.41399 3.25622 2.36248 2.07491 3.57567 2.83476 177 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 130 2.75736 3.99746 4.81513 3.46289 2.26903 3.08555 4.69595 2.84410 4.09161 1.81518 2.46502 2.90902 4.75606 3.57331 3.07470 2.58080 3.50463 2.13580 5.34211 3.45244 178 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 131 2.52404 5.56797 2.84310 2.95940 4.85746 3.27991 4.19705 4.30564 2.70415 3.84964 3.63109 3.12698 1.41543 3.31549 3.44001 1.87445 3.43558 2.96808 6.03657 3.77985 179 - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 132 2.84492 5.55172 3.21407 2.96699 3.90453 3.09427 4.20032 4.27961 2.19079 3.83024 2.33078 3.25373 3.62341 3.05029 1.97358 2.71696 3.43513 3.12503 2.13801 4.65303 180 - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 133 3.21769 5.39065 3.63618 2.76348 2.69889 4.05486 3.68756 3.40192 2.44105 3.64532 4.46359 3.59291 4.44396 2.72966 1.69563 3.25974 2.04264 3.71852 3.54186 2.41914 181 - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 134 1.38848 3.80710 4.75501 4.17614 3.93674 4.36496 4.73360 3.25658 4.04967 2.29495 3.94309 4.37949 1.63349 4.28365 2.83366 3.66475 3.54196 2.01188 5.44343 4.25121 182 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 135 2.71168 5.70945 2.00479 2.55836 5.05472 3.97095 4.15854 4.54091 2.16977 3.36346 4.75013 1.70103 3.44870 3.25489 2.94999 2.83164 2.14152 4.10021 6.14195 4.73074 183 - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 136 2.59041 4.52108 3.50541 2.94883 4.88267 1.85525 4.19041 3.51527 2.08873 2.55726 4.64066 2.96886 4.38962 3.11122 2.20756 2.25740 2.84825 3.95066 6.04989 4.67089 184 - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 137 2.47049 5.23397 3.76291 2.45714 4.42465 4.10336 4.32223 2.21765 2.61567 3.47058 3.60725 3.69325 3.25311 2.24525 3.62093 2.99233 3.11957 1.54060 5.77199 4.47953 185 - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 138 2.20898 4.68384 3.68796 4.45456 2.62777 3.11797 2.79903 2.31675 4.27838 1.65444 3.45820 4.52611 4.79200 3.74118 4.35139 3.72929 3.10050 2.13820 5.30254 2.47479 186 - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00525 5.64863 6.37098 0.61958 0.77255 0.48576 0.95510 139 2.62355 4.66425 5.19052 4.57889 3.38125 4.44444 4.77514 2.09923 4.37569 2.12021 3.37698 4.58892 2.62399 3.57091 4.40305 2.39205 2.72992 1.83682 2.47621 3.33477 187 - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00353 5.64692 * 0.61958 0.77255 0.00000 * // hmmer-3.1b2/easel/demotic/infernal_tab2gff.pl0000664361611702660230000003406212473612605020541 0ustar wheelerteddy#!/usr/bin/perl -w -I/groups/eddy/home/jonest/Demotic # TAJ 6/23/08 last mod 7/10/08 # Purpose: flexibly convert "cmsearch --tabfile TAB.out" output to GFF format # Based upon my "blastn2gff.pl" script. # # OUTPUT GFF2 format: # ------------------ # CONTIG METHOD TYPE START END SCORE ORI FRAME GENE "genename"; note "free text" # $contig $method $type $GFFstart $GFFend $score $ori "." $gene_name $note # na "Infernal" "Infernal_hit" na na na na "." ::$cm_name[i] "" # Defaults # na -m -t na na na na na -g -n # Options # # Todo List # ----------------------------------------------------- # (1) Allow for GFF3 format output # (2) Possibly all switch to produce separate GFF files for each report # ----------------------------------------------------- use strict; use demotic_infernal_tab; use Getopt::Std; getopts ('E:s:G:l:m:t:g:n:u:d:b'); our ($opt_E, $opt_s, $opt_G, $opt_l, $opt_m, $opt_t, $opt_g, $opt_n, $opt_b, $opt_u, $opt_d); (my $script = $0) =~ s/^.*\///; my $USAGE = " Parse cmsearch tabfile output, filter hits on user-supplied cutoffs, and output hits in GFF2 format. ====================================================================================== USAGE: $script tabfile.out > foo.gff ====================================================================================== tabfile.out ==> Output file created by using cmsearch switch '--tabfile tab.out' from Infernal rc1.0 OPTIONS -------------------------------------------------------------------------------------- -E Eval_cutoff (E)-value cutoff -- reject hits with E-value > Eval_cutoff -s score_cutoff (s)score cutoff -- reject hits with bitscore < score_cutoff -G GC_cutoff (G)C percent cutoff (0..100) -- reject hits with GC < GC_cutoff -l len_cutoff (l)ength cutoff -- reject hits with length < len_cutoff -m method (m)ethod. Default is 'Infernal' # for GFF output -t type (t)ype. Default is 'Infernal_hit' # for GFF output -g gene_name (g)ene name. Default is CM query name # for GFF output (1) -n \"a short note\" (n)ote. No default # for GFF output -u X (u)pstream pad -- add X NTs to BEGINNING of all hits (2) -d Y (d)ownstream pad -- add Y Nts to END of all hits (2) -------------------------------------------------------------------------------------- NOTES: (1) == Default behavior obtains a (non-unique) 'gene name' from the CM name. For multiple CM queries having the same name, Infernal differentiates the models by adding a '.N' version (eg CM.1, CM.2, etc). Specifying the gene name by '-g' results in the same gene name being used for all hits in all reports contained in that tabfile. (2) == The values always add to the length of the feature. X and Y cannot be negative! It's highly recommended that you use the '-n NOTE' feature to annotate the changes made to the GFF start and end sites due to these flags. Script warns when padding beyond the 5' end of the contig (and sets it to 1), but cannot edge detect for the 3' end of the contig. ************* While this script can parse 'tabfile' files with output from * WARNING * multiple queries (possibly containing very different CMs), only one ************* GENE name, METHOD and TYPE will be added to all GFF lines created! "; my $CMs = 0; # number of CMs in tabfile my $hits = 0; # number of hits within current CM my $Eval_cutoff = 10000; # arbitrarily large E-value default cutoff my $score_cutoff = -1000; # arbitrarily low bitscore default cutoff my $GC_cutoff = 0; # minimum %GC cutoff my $len_cutoff = 0; # minimum length cutoff my $up_pad = 0; # add X NTs to upstream/start of hit NB: applies to all hits! my $down_pad = 0; # add Y NTs to downstream/end of hit NB: applies to all hits! my $pass_filter = 0; # get cutoff & coord padding options (NB: opt's m,t,g,n obtained during sub print_GFF2) $Eval_cutoff = $opt_E if ($opt_E); $score_cutoff = $opt_s if ($opt_s); $GC_cutoff = $opt_G if ($opt_G); $len_cutoff = $opt_l if ($opt_l); $up_pad = $opt_u if ($opt_u); $down_pad = $opt_d if ($opt_d); if ($up_pad !~ /^\+?\d+$/) { die "Illegal pad: '$up_pad'; must be a whole positive number."; } if ($down_pad !~ /^\+?\d+$/) { die "Illegal pad: '$down_pad'; must be a whole positive number."; } if (($up_pad > 100000) || ($down_pad > 100000)) { die "Whoa, whoa! Slow down their Feyman. You're being a bit excessive with your pads. --mgmt"; } # ========================================================= # | demotic_infernal_tab -- Parameters | # ========================================================= # # Returns SINGLE STRING; applies to entire tabfile (regardless of no. of CMs) # ---------------------------------------------------------------------------- # $model_num # number of CM's used in the search # check # $command # command line used to run search # check # $date # date search was run # check # $db_recs # number of records in target DB # check # $db_size # DB size (in MB) # check # # Returns LIST; 0th position in list corresponds to 1st CM in the tabfile # EX: $cm_name[2] # name of the CM query used in 3rd report # ---------------------------------------------------------------------------- # @cm_name # Covariation Model(s) name; 1st model is 0th in array # check # @time_expect # expected run time (quoted, not converting into hr:min) # check # @time_actual # actual run time (quoted, not converting into hr:min) # check # @num_hits # tracks number of hits for each model # check # # Returns 2D ARRAY [i][j]; # "i" = list of CMs in report (as above); frequently only 1 report, or i=0 # "j" = list of _hits_ for each CM (0th -> 1st hit), in order appearing in report # EX: ${$GC[1]}->[3] # GC value of 4th (3+1) hit in the 2nd (1+1) search # ---------------------------------------------------------------------------- # @t_name # (2D); target fasta record name # check # @t_start # (2D); start location in fasta target \___ For "-" ori hits, # check # @t_stop # (2D); stop location in fasta target / t_start > t_stop # check # @q_start # (2D); start location in CM query \___ Regardless of ori, # check # @q_stop # (2D); stop location in CM query / q_start < q_stop # check # @bitscore # (2D); bit score # check # @Eval # (2D); E-value // can be in scientific notation # check # @GC # (2D); %GC # check # ========================================================= # Parse infernal 'tabfile'; possibly involving multiple query CMs die $USAGE unless (@ARGV == 1); my $tabfile = shift; open (TABFILE, "$tabfile") || die "Can't open $tabfile. You fuckin' wif me?"; &demotic_infernal_tab::parse(\*TABFILE); close TABFILE; $CMs = $demotic_infernal_tab::model_num; # number of query CMs # For all hits, for all CMs in tabfile report -> print in GFF2 formt if passes all cutoffs foreach my $rep_num (0..$CMs-1) { # looping over i CMs $hits = $demotic_infernal_tab::num_hits[$rep_num]; foreach my $hit_num (0..$hits-1) { # looping over j hits from ith CM $pass_filter = &filter_hit($rep_num, $hit_num); if ($pass_filter) { if ($pass_filter) { &print_GFF2 ($rep_num, $hit_num); } else { next; } } } } ############# Validation -- Make sure I'm parsing hit list for all CMs properly ############# if ($opt_b) { # Thouroughly embarassing parse dump, for manual validation // not complete foreach my $rep (0..($CMs-1)) { my $name = $demotic_infernal_tab::cm_name[$rep]; $hits = $demotic_infernal_tab::num_hits[$rep]; print "------------------------------------------------\n"; print "Model \#", ($rep+1), " ==> cm_name: [$name] containing $hits hits\n"; print "------------------------------------------------\n"; foreach my $j (0..$hits-1) { # looping over all hits for that CM my $contig = $demotic_infernal_tab::t_name[$rep]->[$j]; my $start_t = $demotic_infernal_tab::t_start[$rep]->[$j]; my $stop_t = $demotic_infernal_tab::t_stop[$rep]->[$j]; my $start_q = $demotic_infernal_tab::q_start[$rep]->[$j]; my $stop_q = $demotic_infernal_tab::q_stop[$rep]->[$j]; my $score = $demotic_infernal_tab::bitscore[$rep]->[$j]; my $e_val = $demotic_infernal_tab::Eval[$rep]->[$j]; my $gc = $demotic_infernal_tab::GC[$rep]->[$j]; print "#", ($j+1), ": ", $contig, " Tar:S-E: ", $start_t, "-", $stop_t, " Que:S-E: ", $start_q, "-", $stop_q, " Score: ", $score, " E-val: ", $e_val, " %GC: ", $gc, "\n"; } } } ################# Subroutines ###################### sub filter_hit { # INPUT: Index to _i_th CM in tabfile, _j_th hit for given CM # OUTPUT: 1 if hit passes command line criteria, 0 if it fails the filter my $CM_i = shift; my $hit_j = shift; my $evalue = $demotic_infernal_tab::Eval[$CM_i]->[$hit_j]; my $score = $demotic_infernal_tab::bitscore[$CM_i]->[$hit_j]; my $gc = $demotic_infernal_tab::GC[$CM_i]->[$hit_j]; my $begin = $demotic_infernal_tab::t_start[$CM_i]->[$hit_j]; my $end = $demotic_infernal_tab::t_stop[$CM_i]->[$hit_j]; my $len = 0; if ($begin < $end ) { $len = $end - $begin + 1; } else { $len = $begin - $end + 1; } if (($evalue <= $Eval_cutoff) && ($score >= $score_cutoff) && ($gc >= $GC_cutoff) && ($len >= $len_cutoff)) { return 1; # passes all cutoff criteria } else { return 0; # does not pass all cutoff criteria } } sub print_GFF2 { # INPUT: Index to _i_th CM in tabfile, _j_th hit for given CM # e.g. $demotic_infernal_tab::foo[$i]->[$j] # OUTPUT: Infernal hit in GFF2 format (see following) # contig method type start end score ori frame gene "genename"; note "blah blah" # $ctg $method $type $GFFstart $GFFstop $score $ori $frame $gene $note my $CM_i = shift; my $hit_j = shift; my $ctg = $demotic_infernal_tab::t_name[$CM_i]->[$hit_j]; my $start = $demotic_infernal_tab::t_start[$CM_i]->[$hit_j]; my $stop = $demotic_infernal_tab::t_stop[$CM_i]->[$hit_j]; my $score = $demotic_infernal_tab::bitscore[$CM_i]->[$hit_j]; my $frame = "."; # used only for CDS my $ori = ""; my $gene = "gene \"$demotic_infernal_tab::cm_name[$CM_i]\""; # default my $method = "Infernal"; # default my $type = "Infernal_hit"; # default my $note = ""; # default my $GFFstart = 0; my $GFFstop = 0; my $over = 0; if ($opt_g) { $gene = "gene \"$opt_g\""; } # change default? if ($opt_m) { $method = "$opt_m"; } # change default? if ($opt_t) { $type = "$opt_t"; } # change default? if ($opt_n) { $note = "; note \"$opt_n\""; } # change default? # Note: Unlike blastn, target start/stop dictates ori; while query_start is always <= query_stop. ########################################### # ========>>>>>>>>>>>>>========= # | | # (target) start stop ########################################### if ($start <= $stop ) { $ori = "+"; $GFFstart = $start - $up_pad; if ($GFFstart < 1) { $over = ($GFFstart * -1) + 1; # distance beyond 5' end of contig $GFFstart = 1; warn "(${ctg}:${start}-${stop}) couldn't be padded the full $up_pad NTs! START set to 1."; print "\# For following hit; pad overshot $over NTs beyond 5' end of hit; START set to 1\n"; } $GFFstop = $stop + $down_pad; # Can't warn against overpadding; I don't know end of ctg! print ("$ctg\t$method\t$type\t$GFFstart\t$GFFstop\t$score\t$ori\t$frame\t${gene}$note\n"); } ########################################### # ========<<<<<<<<<<<<<========= # | | # (target) stop start ########################################### elsif ($start > $stop) { $ori = "-"; $GFFstart = $stop - $down_pad; if ($GFFstart < 1) { $over = ($GFFstart * -1) + 1; # distance beyond 5' end of contig $GFFstart = 1; warn "(${ctg}:${start}-${stop}) couldn't be padded the full $up_pad NTs! START set to 1."; print "\# For following hit; pad overshot $over NTs beyond 3' end of hit; START set to 1\n"; } $GFFstop = $start + $up_pad; # Can't warn against overpadding; I don't know end of ctg! print ("$ctg\t$method\t$type\t$GFFstart\t$GFFstop\t$score\t$ori\t$frame\t${gene}$note\n"); } if ($GFFstart > $GFFstop) { # meager error checking... die "Illegal GFF coords: GFFstart ($GFFstart) > GFFstop ($GFFstop)\n!"; } } hmmer-3.1b2/easel/demotic/demotic_h2.pm0000664361611702660230000001253312473612604017364 0ustar wheelerteddy# Demotic parser for H2 hmmsearch output # # Does not parse alignment section yet. But suitable for profmark use. # H2's hmmsearch can only search a single query model, not multiples. # # SVN $Id$ # SRE, Fri Apr 16 11:07:34 2010 package demotic_h2; sub parse (*) { my $fh = shift; my $parsing_header = 1; my $parsing_seqs = 0; my $parsing_domains = 0; my $parsing_alis = 0; # Initialize everything... so we can call the parser # repeatedly, one call per hmmsearch output. # # This section also documents what's available in # variables within the package. # # Arrays are indexed [0..nhits-1] or [0..nali-1] # $queryname = ""; # Name of the query sequence $querydesc = ""; # Description line for the query (or "") $querylen = 0; # Length of the query in residues $db = ""; # Name of the target database file $db_nseq = 0; # Number of sequences in the target database $db_nletters = ""; # Number of residues in the target database # (stored as a string so we can have large #'s) # The top hit list (still in rank order) $nhits = 0; # Number of entries in the hit list @hit_target = (); # Target sequence name (by rank) %target_desc = (); # Target sequence description (by targ name) @hit_bitscore = (); # Raw score (by rank) @hit_Eval = (); # P-val or E-val (by rank) # The alignment output (in order it came in) # all indexed by # of alignment [0..nali-1] $nali = 0; # Number of alignments @ali_target = (); # Target sequence name @ali_bitscore = (); # bit score @ali_evalue = (); # E-value @ali_qstart = (); # Start position on query @ali_qend = (); # End position on query @ali_tstart = (); # Start position on target @ali_tend = (); # End position on target @ali_qali = (); # Aligned string from query @ali_tali = (); # Aligned string from target (subject) # Now, loop over the lines of our input, and parse 'em. # while (<$fh>) { if ($parsing_header) { if (/^Scores for complete sequences /) { # seq section starts with this line $parsing_header = 0; $parsing_seqs = 1; <$fh>; # This discards the next line: Sequence Description Score E-value N <$fh>; # and discard another line: -------- ----------- ----- ------- --- next; } elsif (/Query HMM:\s*(\S+)/) { $queryname = $1; } elsif (/Description:\s*(\.*)$/) { $querydesc = $1; } } elsif ($parsing_seqs) { if (/^\s*$/) { # seq section ends with a blank line $parsing_seqs = 0; $parsing_domains = 1; <$fh>; # Discard: Parsed for domains: <$fh>; # Discard: Sequence Domain seq-f seq-t hmm-f hmm-t score E-value <$fh>; # Discard: -------- ------- ----- ----- ----- ----- ----- ------- next; } elsif (/^(\S+)\s+(.+)\s+(-?\d+\.\d*)\s+(\S+)\s+\d+\s*$/) { # Target Description Score Evalue N # $hit_target[$nhits] = $1; $target_desc{$1} = $2; $hit_bitscore[$nhits] = $3; $hit_Eval[$nhits] = $4; $nhits++; } } elsif ($parsing_domains) { if (/^\s*$/) { # domain section ends with a blank line $parsing_domains = 0; $parsing_alis = 1; <$fh>; # Discard: Alignments of top-scoring domains: } if (/^(\S+)\s+\d+\/\d+\s+(\d+)\s+(\d+)\s+\S\S\s+(\d+)\s+(\d+)\s+\S\S\s+(-?\d+\.\d*)\s+(\S+)\s*$/) # Sequence Domain seq-f seq-t hmm-f hmm-t score E-value # 1 2 3 4 5 6 7 { $ali_target[$nali] = $1; $ali_bitscore[$nali] = $6; $ali_evalue[$nali] = $7; $ali_qstart[$nali] = $4; $ali_qend[$nali] = $5; $ali_tstart[$nali] = $2; $ali_tend[$nali] = $3; $nali++; } } } if ($parsing_alis) { return 1; } else { return 0; } } sub exblxout { my $ofh = shift; my $i; for ($i = 0; $i <= $nali-1; $i++) { printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\n", $ali_evalue[$i], $ali_identity[$i], $ali_tstart[$i], $ali_tend[$i], $ali_target[$i], $ali_qstart[$i], $ali_qend[$i], $queryname; } } sub tblout { my $ofh = shift; my $i; for ($i = 0; $i <= $nali-1; $i++) { printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\t%s\n", $ali_evalue[$i], $ali_identity[$i], $ali_qstart[$i], $ali_qend[$i], $queryname, $ali_tstart[$i], $ali_tend[$i], $ali_target[$i], $target_desc{$ali_target[$i]}; } } sub gffout { my $ofh = shift; my $source = shift; my $feature = shift; my $i; my $strand; for ($i = 0; $i <= $nali-1; $i++) { if ($ali_qstart[$i] > $ali_qend[$i]) { $strand = "-"; } else { $strand = "+"; } printf $ofh "%s\t%s\t%s\t%d\t%d\t%.1f\t%s\t.\tgene \"%s\"\n", $ali_target[$i], $source, $feature, $ali_tstart[$i], $ali_tend[$i], $ali_bitscore[$i], $strand, $queryname; } } sub profmarkout { my $ofh = shift; my $i; for ($i = 0; $i < $nhits; $i++) { printf $ofh "%g\t%.1f\t%s\t%s\n", $hit_Eval[$i], $hit_bitscore[$i], $hit_target[$i], $queryname; } } 1; __END__ |more hmmer-3.1b2/easel/demotic/demotic_hmmer.pm0000664361611702660230000001305312473612604020161 0ustar wheelerteddy# Demotic parser for HMMER3 output # # Works for phmmer, hmmsearch output # Does not parse env coords nor alignments yet, # but is suitable for use in profmark. # # SVN $Id: demotic_hmmer.pm 2720 2009-01-20 12:03:54Z eddys $ # SRE, Tue Apr 22 13:13:51 2008 package demotic_hmmer; # parse(\*STDIN) would parse HMMER output # coming in via stdin. # sub parse (*) { my $fh = shift; my $parsing_header = 1; my $parsing_seqs = 0; my $parsing_domains = 0; my $parsing_alis = 0; # Initialize everything... so we can call the parser # repeatedly, one call per hmmsearch output. # # This section also documents what's available in # variables within the package. # # Arrays are indexed [0..nhits-1] or [0..nali-1] # $queryname = ""; # Name of the query sequence $querydesc = ""; # Description line for the query (or "") $querylen = 0; # Length of the query in residues $db = ""; # Name of the target database file $db_nseq = 0; # Number of sequences in the target database $db_nletters = ""; # Number of residues in the target database # (stored as a string so we can have large #'s) # The top hit list (still in rank order) $nhits = 0; # Number of entries in the hit list @hit_target = (); # Target sequence name (by rank) %target_desc = (); # Target sequence description (by targ name) @hit_bitscore = (); # Raw score (by rank) @hit_Eval = (); # P-val or E-val (by rank) # The alignment output (in order it came in) # all indexed by # of alignment [0..nali-1] $nali = 0; # Number of alignments @ali_target = (); # Target sequence name @ali_bitscore = (); # bit score @ali_evalue = (); # E-value @ali_qstart = (); # Start position on query @ali_qend = (); # End position on query @ali_tstart = (); # Start position on target @ali_tend = (); # End position on target @ali_qali = (); # Aligned string from query @ali_tali = (); # Aligned string from target (subject) # Now, loop over the lines of our input, and parse 'em. # while (<$fh>) { if ($parsing_header) { if (/^Scores for complete sequences /) { # seq section starts with this line $parsing_header = 0; $parsing_seqs = 1; <$fh>; # This discards the next line: --- full sequence ---- ---- single best dom ---- <$fh>; # and discard another line: E-value score bias score bias <$fh>; # and discard another line: ------- ------- ------ ------- ------ ---------- next; } elsif (/Query:\s*(\S+)\s*\[[LM]=(\d+)\]\s*$/) { $queryname = $1; $querylen = $2; } elsif (/Description:\s*(.*)$/) { $querydesc = $1; } } elsif ($parsing_seqs) { if (/^\s*$/) { # seq section ends with a blank line $parsing_seqs = 0; $parsing_domains = 1; next; } elsif (/^\s*(\S+)\s+(\S+)\s+(\S+)\s+\S+\s+\S+\s+\S+\s+(\S+)\s+(\d+)\s+(\S+)\s+(.+)$/) { # evalue score bias evalue score bias exp N target desc # 1 2 3 4 5 6 7 $hit_target[$nhits] = $6; $target_desc{$1} = $7; $hit_bitscore[$nhits] = $2; $hit_Eval[$nhits] = $1; $nhits++; } } elsif ($parsing_domains) { if (/^>>\s*(\S+)/) { $curr_ali_target = $1; } elsif (/^\s*\d+\s+\S\s+(\S+)\s+\S+\s+(\S+)\s+\S+\s+(\d+)\s+(\d+)\s+\S\S\s+(\d+)\s+(\d+)\s+\S\S\s+(\d+)\s+(\d+)\s+\S\S\s+\S+\s*$/) # # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc # --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- # 1 ! 387.6 1.4 7.5e-120 2.1e-115 1 181 [] 1 181 [] 1 181 [] 1.00 { $ali_target[$nali] = $curr_ali_target; $ali_bitscore[$nali] = $1; $ali_evalue[$nali] = $2; $ali_qstart[$nali] = $3; $ali_qend[$nali] = $4; $ali_tstart[$nali] = $5; $ali_tend[$nali] = $6; $nali++; } elsif (/\/\//) { return 1; } # normal return after each query. } } if ($parsing_domains) { return 1; } else { return 0; } } sub exblxout { my $ofh = shift; my $i; for ($i = 0; $i <= $nali-1; $i++) { printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\n", $ali_evalue[$i], $ali_identity[$i], $ali_tstart[$i], $ali_tend[$i], $ali_target[$i], $ali_qstart[$i], $ali_qend[$i], $queryname; } } sub tblout { my $ofh = shift; my $i; for ($i = 0; $i <= $nali-1; $i++) { printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\t%s\n", $ali_evalue[$i], $ali_identity[$i], $ali_qstart[$i], $ali_qend[$i], $queryname, $ali_tstart[$i], $ali_tend[$i], $ali_target[$i], $target_desc{$ali_target[$i]}; } } sub gffout { my $ofh = shift; my $source = shift; my $feature = shift; my $i; my $strand; for ($i = 0; $i <= $nali-1; $i++) { if ($ali_qstart[$i] > $ali_qend[$i]) { $strand = "-"; } else { $strand = "+"; } printf $ofh "%s\t%s\t%s\t%d\t%d\t%.1f\t%s\t.\tgene \"%s\"\n", $ali_target[$i], $source, $feature, $ali_tstart[$i], $ali_tend[$i], $ali_bitscore[$i], $strand, $queryname; } } sub profmarkout { my $ofh = shift; my $i; for ($i = 0; $i < $nhits; $i++) { printf $ofh "%g\t%.1f\t%s\t%s\n", $hit_Eval[$i], $hit_bitscore[$i], $hit_target[$i], $queryname; } } 1; __END__ |more hmmer-3.1b2/easel/demotic/fasta2tbl0000775361611702660230000000017112473612605016615 0ustar wheelerteddy#! /usr/bin/perl use demotic_fasta; while (&demotic_fasta::parse(\*STDIN)) { &demotic_fasta::tblout(\*STDOUT); } hmmer-3.1b2/easel/demotic/blast2tbl0000775361611702660230000000017112473612604016623 0ustar wheelerteddy#! /usr/bin/perl use demotic_blast; while (&demotic_blast::parse(\*STDIN)) { &demotic_blast::tblout(\*STDOUT); } hmmer-3.1b2/easel/demotic/demotic_infernal_tab.pm0000664361611702660230000002144112473612604021475 0ustar wheelerteddy############################################################################ # demotic_infernal_tab package # Parses "tabfile" output generated by cmsearch rc1.0 # (TAJ 6/2008) based on demotic_search3.pm; itself based on SRE demotic_wublast.pm ############################################################################ #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#- # TODO List: # (1) Parse "Post-search" number of hits (expected, actual) and surv fraction (expected, actual) # (2) Possibly offload gff output functionality from calling script to this pm. #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#- # Example output line (ignoring the leading "#"): # //////////////////////////////////////////////////////////////////////////////////////////// ## target name start stop start stop bit sc E-value GC% ## ----------------------- ---------- ---------- ----- ----- -------- -------- --- # Contig10/506498-506590 1 65 1 80 35.79 1.00e-08 40 # //////////////////////////////////////////////////////////////////////////////////////////// # # Example "post_search" content: # //////////////////////////////////////////////////////////////////////////////////////////// # Post-search info for CM 1: SmY # # number of hits surv fraction # ------------------- ----------------- # rnd mod alg cfg beta expected actual expected actual # --- --- --- --- ----- ---------- ------- -------- ------- # 1 cm ins glc 1e-15 1.000 15 0.0601 0.7829 # # expected time actual time # ------------- ------------- # 00:00:01.04 00:00:06.00 # //////////////////////////////////////////////////////////////////////////////////////////// package demotic_infernal_tab; # Don't have "parse(\*STDIN)" option, since "tabfile" output always written to file sub parse (*) { my $fh = shift; # if this isn't a file handle to a tabfile, some ass needs kickin' my $parsing_header = 1; my $parsing_presearch = 0; my $parsing_hits = 0; my $post_search = 0; my $nhits = 0; # temp counter for number of hits in current model; (tabulated) my $index = 0; # indexes CM number; ie 1st model is index 0 ### NOTE: ### Some arrays (0..(N-1)) contain values from each search (1..N). Recall there is 1 search per model. ### Ex: @cm_name # lists names of all CMs used, say: (SmY.1, SmY.2, SmY.3) ### ### Other arrays are a "list of lists" (see LoL note below). In these cases, the Nth position ### in the array, will be an anonymous reference to a list of features for _all_ hits to model (N+1). ### ### Ex: @t_name # position N in the list corresponds to one model (N+1) in the search, ### # which is an anonymous ref to a list of ctgs for all hits from that model. ### Ex: @{$t_name[1]} # lists ctgs for all hits to the 2nd query model; eg (ChrI, ChrI, ChrIII, ChrV) # Document all the variables available in the package; initialize everything # # =========== Header details (once/report) ================================ $command = ""; # command line used to run search $date = ""; # date search was run $db_recs = ""; # number of records in target DB $db_size = ""; # DB size (in MB) # =========== Pre-search details (once/CM) ================================= # Note: details of the "pre-search" filtering rounds not captured currently @cm_name = (); # Covariation Model(s) name; 1st model is 0th in array # =========== Details from each *hit* (0-many/CM) ========================== ######################################################################################################## # NOTE: (LoL) == List of Lists; the (N)th position in the following arrays contains a list # # of that feature for all hits from the (N+1)th CM in the report. The order of # # features in the anonymous array @{$foo[$i]} corresponds to the order in the report. # # EXAMPLE: # # @GC # list of anonymous refs, one per CM; refs list all GCs in search # # @{$GC[0]} # contains the list of GC values for all hits to the 1st CM # # ${$GC[1]}->[3] # GC value of 4th (3+1) hit in the 2nd (1+1) search # ######################################################################################################## @t_name = (); # (LoL); target fasta record name @t_start = (); # (LoL); start location in fasta target @t_stop = (); # (LoL); stop location in fasta target @q_start = (); # (LoL); start location in CM query @q_stop = (); # (LoL); stop location in CM query @bitscore = (); # (LoL); bit score @Eval = (); # (LoL); E-value // can be in scientific notation @GC = (); # (LoL); %GC # ===================== "Post-search info" (each CM report) ================== # NOTE: I'm not capturing all available information here, because I believe it can # be quite variable. I'm not expert on all possible output that can be generated @time_expect = (); # expected run time (quoted, not converting into hr:min) @time_actual = (); # actual run time (quoted, not converting into hr:min) @num_hits = (); # tracks number of hits for each model # ====================== Cumulative Data (all query outputs) ================ $model_num = 0; # number of CM's used in the search # Loop over tabfile input, and parse it (there can be >1 CM/report in each tabfile) while (<$fh>) { if ($parsing_header) { # only one header section, even if multiple CM's in search if (/^\#\sPre\-search\sinfo\sfor\sCM/) { # NB: model name here is picked up later $parsing_header = 0; $parsing_presearch = 1; next; } elsif (/^\#\scommand\:\s+(\S.+)$/) { $command = $1; } elsif (/^\#\sdate:\s+(\S.+)$/) { $date = $1; } elsif (/^\#\snum\sseqs:\s+(\d+)/) { # could get fucked if commas appear in the number $db_recs = $1; } elsif (/^\#\sdbsize\S+:\s+(\S+)/) { # $1 has a decimal; \d just don't cut it $db_size = $1; } } elsif ($parsing_presearch) { # Each CM has it's own "pre-search" if (/^\#\starget\sname/) { # signals end of "Pre-search"; occurs once per CM $parsing_presearch = 0; $parsing_hits = 1; <$fh>; # Discard next line (composed of dashes); then hitlist begins next; } elsif (/^\#\sCM:\s(\S+)/) { # If multiple models/CM; format is "CM-NAME.n" (1..n) $model_num++; # NB: correctly tallys models; use $index for array indices! push (@cm_name, $1); } } elsif ($parsing_hits) { # every line not starting with "#" should be a "hit" # Example hit [sans leading "#"]: # Contig10 1001 1065 1 80 35.79 1.00e-08 40 if (/^\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\d+)\s*$/) { push (@{$t_name[$index]} , $1); push (@{$t_start[$index]} , $2); push (@{$t_stop[$index]} , $3); push (@{$q_start[$index]} , $4); push (@{$q_stop[$index]} , $5); push (@{$bitscore[$index]}, $6); push (@{$Eval[$index]} , $7); push (@{$GC[$index]} , $8); $nhits++; } elsif (/^\#/) { # end of "hitlist" for this CM $parsing_hits = 0; $post_search = 1; push (@num_hits, $nhits); $nhits = 0; # clear hit counter for next model next; } else { die "Parsing 'hitlist' -- should never get here! Current line is:\n$_"; } } elsif ($post_search) { # Each CM has it's own "post-search" if (/^\#\sexpected\stime/) { # Effectively marking the end of a single query's report <$fh>; # discard next line of dashes $_ = <$fh>; # get next line listing the times if (/^\#\s+(\S+)\s+(\S+)\s*$/) { push (@time_expect, $1); # \__ not going to try parsing hours/minutes/seconds push (@time_actual, $2); # / $post_search = 0; # \__ if looping over multiple query CMs, next up is $parsing_presearch = 1; # / "pre-search" for next model, or soon: EOF $index++; # LoL index; end of report i, prepare for report i+1 } } } else { die "Should never get here! Dropped through WHILE loop, parsing line:\n$_"; } } # this closes the loop over lines in the input stream. } 1; __END__ hmmer-3.1b2/easel/demotic/demotic_fasta.pm0000664361611702660230000001653012473612604020152 0ustar wheelerteddy############################################################################ # demotic_fasta package # Parses fasta or ssearch output, stores extracted information in convenient vars. # SRE, Wed Jun 25 13:41:41 2003 # # SVN $Id$ ############################################################################ package demotic_fasta; # parse(\*STDIN) would parse ssearch output # coming in via stdin. # sub parse (*) { my $fh = shift; my $parsing_header = 1; my $parsing_hitlist = 0; my $parsing_alilist = 0; my $target; my $alilinecount = 0; # Initialize everything... so we can call the parser # repeatedly, one call per ssearch output. # # This section also documents what's available in # variables within the package. # # Arrays are indexed [0..nhits-1] or [0..nali-1] # $queryname = ""; # Name of the query sequence $querydesc = ""; # Description line for the query (or "") $querylen = 0; # Length of the query in residues $db = ""; # Name of the target database file $db_nseq = 0; # Number of sequences in the target database $db_nletters = ""; # Number of residues in the target database # (stored as a string so we can have large #'s) # The top hit list (still in rank order) $nhits = 0; # Number of entries in the hit list @hit_target = (); # Target sequence name (by rank) %target_desc = (); # Target sequence description (by targ name) %target_len = (); # Length of target sequence @hit_score = (); # Raw score (by rank) @hit_bitscore = (); # Bit score (by rank) @hit_Eval = (); # E-value (by rank) # The alignment output (in order it came in) # all indexed by # of alignment [0..nali-1] $nali = 0; # Number of alignments @ali_target = (); # Target sequence name @ali_score = (); # Smith/Waterman raw score of alignment @ali_bitscore = (); # bit score @ali_evalue = (); # E-value @ali_nident = (); # Number of identical residues @ali_alen = (); # Length of alignment (overlap) @ali_identity = (); # Percent identity # @ali_npos = (); # Number of positives (similar positions) # @ali_positive = (); # Percent of positions matched or similar @ali_qstart = (); # Start position on query @ali_qend = (); # End position on query @ali_tstart = (); # Start position on target @ali_tend = (); # End position on target @ali_qali = (); # Aligned string from query @ali_tali = (); # Aligned string from target (subject) if (defined($save_querycount) && $save_querycount > 1) { # on subsequent queries, we had to use the >>> start line to detect # the end of the prev query; we socked the necessary info away in tmp vars. $querycount = $save_querycount; $queryname = $save_queryname; $querydesc = $save_querydesc; $querylen = $save_querylen; } # Now, loop over the lines of our input, and parse 'em. # while (<$fh>) { if ($parsing_header) { if (/^The best scores are:/) { # start of hit list $parsing_header = 0; $parsing_hitlist = 1; next; } elsif (/^!! No sequences/) { # no hit list: no hits; just return return 1; # return "success" } elsif (/^\s+(\d+)>>>\s*(\S*)\s*(.*)\s*-\s*(\d+) \S\S$/) { # allows blank query. \S\S is "nt" or "aa" $querycount = $1; $queryname = $2; $querydesc = $3; $querylen = $4; if ($queryname eq "") { $queryname = "unnamed_query"; } } elsif (/^\s+(\d+)\s+residues in\s+(\d+)\s+sequences\s*$/) { $db_nletters = $1; $db_nseq = $2; } } elsif ($parsing_hitlist) { if (/^\s*$/) { # blank line marks end of hit list, start of alignments $parsing_hitlist = 0; $parsing_alilist = 1; next; } elsif (/^(\S+)\s*(.*\S?)\s*\(\s*(\d+)\)\s+(\d+)\s+(\S+)\s+(\S+)\s*$/) { $hit_target[$nhits] = $1; $target_desc{$1} = $2; $target_len{$1} = $3; $hit_score[$nhits] = $4; $hit_bitscore[$nhits] = $5; $hit_Eval[$nhits] = $6; $nhits++; } } elsif ($parsing_alilist) { if (/^>>(\S+)\s*(.*)\s+\((\d+) \S\S\)\s*$/) { # the \S\S is either nt or aa $target = $1; $target_desc{$target} = $2; if ($3 != $target_len{$target}) { die "can't happen.", "1)", $3, "2)", $target_len{$target}; } } elsif (/^ s-w opt:\s+(\d+)\s+Z-score:\s*(\S+)\s+bits:\s+(\S+)\s+E\(\d*\):\s+(\S+)\s*$/) { # SSEARCH $nali++; $ali_target[$nali-1] = $target; $ali_score[$nali-1] = $1; $ali_bitscore[$nali-1] = $3; $ali_evalue[$nali-1] = $4; } elsif (/^ initn:\s*\d+\s*init1:\s*\d+\s*opt:\s*(\d+)\s*Z-score:\s*(\S+)\s*bits:\s*(\S+)\s*E\(\d*\):\s*(\S+)\s*$/) { # FASTA $nali++; $ali_target[$nali-1] = $target; $ali_score[$nali-1] = $1; $ali_bitscore[$nali-1] = $3; $ali_evalue[$nali-1] = $4; } elsif (/^Smith-Waterman score:\s+(\d+);\s+(\S+)% identity .* in (\d+) \S\S overlap \((\d+)-(\d+):(\d+)-(\d+)\)\s*/) { $ali_identity[$nali-1] = $2; $ali_alen[$nali-1] = $3; $ali_qstart[$nali-1] = $4; $ali_qend[$nali-1] = $5; $ali_tstart[$nali-1] = $6; $ali_tend[$nali-1] = $7; # $ali_nident[$nali-1] = $1; # $ali_npos[$nali-1] = $4; # $ali_positive[$nali-1] = $5; $alilinecount = 0; } elsif (/^\S+\s+(\S+)\s*$/) { # only ali lines are right-flushed if ($alilinecount % 2 == 0) { $ali_qali[$nali-1] .= $1; } else { $ali_qali[$nali-1] .= $1; } $alilinecount++; } elsif (/^\s+(\d+)>>>\s*(\S*)\s*(.*)\s*-\s*(\d+) \S\S$/) { # next query is starting. \S\S is "nt" or "aa" $save_querycount = $1; $save_queryname = $2; $save_querydesc = $3; $save_querylen = $4; if ($save_queryname eq "") { $save_queryname = "unnamed_query"; } return 1; # normal return. We've finished output for a query, and stored some info about the next one. } } } # this closes the loop over lines in the input stream: at EOF. if ($parsing_alilist) { return 1; } else { return 0; } # at EOF: normal return if we were in the alignment section. } sub exblxout { my $ofh = shift; my $i; for ($i = 0; $i <= $nali-1; $i++) { printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\n", $ali_evalue[$i], $ali_identity[$i], $ali_tstart[$i], $ali_tend[$i], $ali_target[$i], $ali_qstart[$i], $ali_qend[$i], $queryname; } } sub tblout { my $ofh = shift; my $i; for ($i = 0; $i <= $nali-1; $i++) { printf $ofh "%s\t%d\t%d\t%d\t%s\t%d\t%d\t%s\t%s\n", $ali_evalue[$i], $ali_identity[$i], $ali_qstart[$i], $ali_qend[$i], $queryname, $ali_tstart[$i], $ali_tend[$i], $ali_target[$i], $target_desc{$ali_target[$i]}; } } sub gffout { my $ofh = shift; my $source = shift; my $feature = shift; my $i; my $strand; for ($i = 0; $i <= $nali-1; $i++) { if ($ali_qstart[$i] > $ali_qend[$i]) { $strand = "-"; } else { $strand = "+"; } printf $ofh "%s\t%s\t%s\t%d\t%d\t%.1f\t%s\t.\tgene \"%s\"\n", $ali_target[$i], $source, $feature, $ali_tstart[$i], $ali_tend[$i], $ali_bitscore[$i], $strand, $queryname; } } sub profmarkout { my $ofh = shift; my $i; for ($i = 0; $i < $nhits; $i++) { printf $ofh "%g\t%.1f\t%s\t%s\n", $hit_Eval[$i], $hit_bitscore[$i], $hit_target[$i], $queryname; } } 1; __END__ hmmer-3.1b2/easel/demotic/00README0000664361611702660230000001267112473612604016034 0ustar wheelerteddydemotic is a set of Perl modules for interfacing the hieroglyphic output of one program with the greek input of another program. original: SRE, Wed Oct 25 16:32:09 2000 into Easel: SRE, Fri Apr 16 16:10:25 2010 SVN $Id$ demotic_blast.pm NCBI blastp; NCBI blastpgp; WU blastp demotic_fasta.pm fasta; ssearch demotic_hmmer.pm hmmsearch, phmmer demotic_h2.pm HMMER 2.0 hmmsearch blast2profmark fasta2profmark hmmer2profmark h22profmark blast2tbl fasta2tbl hmmer2tbl h22tbl test.pl : example of using demotic_blast "in line" in a perl script. ################################################################ # Generating the example outputs # Config that's already in my .bashrc: export SWISS=/misc/data0/databases/Uniprot/uniprot_sprot.fasta export SWISS-WU=/misc/data0/databases/Uniprot/uniprot_sprot_wu.fasta export PFAM_HMM=/misc/data0/databases/Pfam/Pfam-A.hmm export PFAM_SEED=/misc/data0/databases/Pfam/Pfam-A.seed export PFAM_FULL=/misc/data0/databases/Pfam/Pfam-A.full export PERLLIB=.:${HOME}/sw/scripts # Most examples esl-seqstat -a $SWISS | awk '{print $2}' | esl-selectn 2 - | esl-sfetch -f $SWISS - > examples/example.fa grep -v "^#" /misc/data0/databases/pfam/pfam-24.0/Pfam-A.hmm.stat | awk '{print $2}' | esl-selectn 2 - | hmmfetch -f /misc/data0/databases/pfam/pfam-24.0/Pfam-A.hmm - > examples/example.hmm # PSIBLAST example takes some massaging, because of the way we convert Stockholm to a checkpoint .asnt file. grep -v "^#" /misc/data0/databases/pfam/pfam-24.0/Pfam-A.seed.stat | awk '{print $2}' | esl-selectn 1 - | esl-afetch -f /misc/data0/databases/pfam/pfam-24.0/Pfam-A.seed - > examples/example-single.sto esl-reformat -o examples/example-single.pbl psiblast examples/example-single.sto esl-seqstat -a examples/example-single.sto | grep "^=" | awk '{print $2}' | esl-selectn 1 - | esl-sfetch -f examples/example-single.sto - esl-seqstat -a examples/example-single.sto | grep "^=" | awk '{print $2}' | esl-selectn 1 - | esl-sfetch -f examples/example-single.sto - > examples/example-single-psiquery.fa esl-reformat -o examples/example-single.fa fasta examples/example-single.sto formatdb -i examples/example-single.fa blastpgp -v 9999 -F T -u 1 -j 5 -J TRUE -d examples/example-single.fasta -i examples/example-single-psiquery.fa -C examples/example-single.asnt # H2 example also is a little special; build new from Stockholm, plus H2 hmmsearch can only do a single query. grep -v "^#" /misc/data0/databases/pfam/pfam-24.0/Pfam-A.seed.stat | awk '{print $2}' | esl-selectn 1 - | esl-afetch -f /misc/data0/databases/pfam/pfam-24.0/Pfam-A.seed - > examples/example.sto ~/releases/hmmer-2.3.2/src/hmmbuild examples/example.hmm2 examples/example.sto ~/releases/hmmer-2.3.2/src/hmmcalibrate examples/example.hmm2 blastp $SWISS_WU examples/example.fa > examples/example.wu-blastp.out blastall -p blastp -i examples/example.fa -d $SWISS > examples/example.ncbi-blastp.out /usr/local/fasta-36x2/bin/ssearch36_t -q examples/example.fa $SWISS > examples/example.ssearch.out /usr/local/fasta-36x2/bin/fasta36_t -q examples/example.fa $SWISS > examples/example.fasta.out phmmer examples/example.fa $SWISS > examples/example.phmmer.out hmmsearch examples/example.hmm $SWISS > examples/example.hmmsearch.out ~/releases/hmmer-2.3.2/src/hmmsearch examples/example.hmm2 $SWISS > examples/example.h2.out blastpgp -v 9999 -F F -q 1 -t 1 -d $SWISS -R examples/example-single.asnt > examples/example.psiblast.out ################################################################ # Save outputs for regression pfx=regress mkdir $pfx cat examples/example.wu-blastp.out | ./blast2profmark > $pfx/wu-blastp-profmark.out cat examples/example.ncbi-blastp.out | ./blast2profmark > $pfx/ncbi-blastp-profmark.out cat examples/example.psiblast.out | ./blast2profmark > $pfx/psiblast-profmark.out cat examples/example.ssearch.out | ./fasta2profmark > $pfx/ssearch-profmark.out cat examples/example.fasta.out | ./fasta2profmark > $pfx/fasta-profmark.out cat examples/example.phmmer.out | ./hmmer2profmark > $pfx/phmmer-profmark.out cat examples/example.hmmsearch.out | ./hmmer2profmark > $pfx/hmmsearch-profmark.out cat examples/example.h2.out | ./h22profmark > $pfx/h2-profmark.out cat examples/example.wu-blastp.out | ./blast2tbl > $pfx/wu-blastp-tbl.out cat examples/example.ncbi-blastp.out | ./blast2tbl > $pfx/ncbi-blastp-tbl.out cat examples/example.psiblast.out | ./blast2tbl > $pfx/psiblast-tbl.out cat examples/example.ssearch.out | ./fasta2tbl > $pfx/ssearch-tbl.out cat examples/example.fasta.out | ./fasta2tbl > $pfx/fasta-tbl.out cat examples/example.phmmer.out | ./hmmer2tbl > $pfx/phmmer-tbl.out cat examples/example.hmmsearch.out | ./hmmer2tbl > $pfx/hmmsearch-tbl.out cat examples/example.h2.out | ./h22tbl > $pfx/h2-tbl.out ################################################################ # Regression test of outputs pfx=tmp mkdir $pfx # Run the same stuff as above for prg in wu-blastp ncbi-blastp psiblast ssearch fasta phmmer hmmsearch h2 ; do diff --brief regress/$prg-profmark.out tmp/$prg-profmark.out diff --brief regress/$prg-tbl.out tmp/$prg-tbl.out done rm -rf tmp hmmer-3.1b2/easel/esl_sqio_ncbi.c0000664361611702660230000030502512473612607016346 0ustar wheelerteddy/* Unaligned ncbi sequence file i/o. * * Contents: * 1. An object, in text mode. * 2. An object, in digital mode. [with ] * 3. Miscellaneous routines. * 4. Sequence reading (sequential). * 5. Parsing routines * 6. Copyright and license. */ #include "esl_config.h" #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_ENDIAN_H #include #endif #include "easel.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" /* alphabet aug adds digital sequences */ #endif #include "esl_sqio.h" #include "esl_sq.h" #ifndef htobe32 #ifdef WORDS_BIGENDIAN #define htobe32(x) (x) #else #define htobe32(x) \ ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) #endif #endif /* format specific routines */ static int sqncbi_Position (ESL_SQFILE *sqfp, off_t offset); static void sqncbi_Close (ESL_SQFILE *sqfp); static int sqncbi_SetDigital (ESL_SQFILE *sqfp, const ESL_ALPHABET *abc); static int sqncbi_GuessAlphabet (ESL_SQFILE *sqfp, int *ret_type); static int sqncbi_Read (ESL_SQFILE *sqfp, ESL_SQ *sq); static int sqncbi_ReadInfo (ESL_SQFILE *sqfp, ESL_SQ *sq); static int sqncbi_ReadSequence (ESL_SQFILE *sqfp, ESL_SQ *sq); static int sqncbi_ReadWindow (ESL_SQFILE *sqfp, int C, int W, ESL_SQ *sq); static int sqncbi_ReadBlock (ESL_SQFILE *sqfp, ESL_SQ_BLOCK *sqBlock, int max_residues, int max_sequences, int long_target); static int sqncbi_Echo (ESL_SQFILE *sqfp, const ESL_SQ *sq, FILE *ofp); static int sqncbi_IsRewindable (const ESL_SQFILE *sqfp); static const char *sqncbi_GetError (const ESL_SQFILE *sqfp); /* common routines for processing ncbi database */ static int sqncbi_Open (ESL_SQNCBI_DATA *ncbi, char *filename); static void reset_db (ESL_SQNCBI_DATA *ncbi); static int pos_sequence (ESL_SQNCBI_DATA *ncbi, int inx); static int volume_open (ESL_SQNCBI_DATA *ncbi, int volume); static void reset_header_values (ESL_SQNCBI_DATA *ncbi); static int read_amino (ESL_SQFILE *sqfp, ESL_SQ *sq); static int read_dna (ESL_SQFILE *sqfp, ESL_SQ *sq); static int read_nres_amino (ESL_SQFILE *sqfp, ESL_SQ *sq, int len, uint64_t *nres); static int read_nres_dna (ESL_SQFILE *sqfp, ESL_SQ *sq, int len, uint64_t *nres); static int inmap_ncbi (ESL_SQFILE *sqfp); static int inmap_ncbi_amino (ESL_SQFILE *sqfp); static int inmap_ncbi_dna (ESL_SQFILE *sqfp); /* parsing routines */ static int parse_header (ESL_SQNCBI_DATA *ncbi, ESL_SQ *sq); static int parse_def_line (ESL_SQNCBI_DATA *ncbi, ESL_SQ *sq); static int parse_seq_id (ESL_SQNCBI_DATA *ncbi); static int parse_textseq_id (ESL_SQNCBI_DATA *ncbi); static int parse_object_id (ESL_SQNCBI_DATA *ncbi); static int parse_dbtag (ESL_SQNCBI_DATA *ncbi); static int parse_patent_seq_id (ESL_SQNCBI_DATA *ncbi); static int parse_giimport_id (ESL_SQNCBI_DATA *ncbi); static int parse_id_pat (ESL_SQNCBI_DATA *ncbi); static int parse_pdb_seq_id (ESL_SQNCBI_DATA *ncbi); static int parse_date_std (ESL_SQNCBI_DATA *ncbi); static int parse_string (ESL_SQNCBI_DATA *ncbi, char **str, int *len); static int parse_integer (ESL_SQNCBI_DATA *ncbi, int *value); static int ignore_sequence_of_integer(ESL_SQNCBI_DATA *ncbi); #define INDEX_TABLE_SIZE 1024 #define INIT_HDR_BUFFER_SIZE 2048 #define NCBI_VERSION_4 4 #define NCBI_DNA_DB 0 #define NCBI_AMINO_DB 1 /***************************************************************** *# 1. An object, in text mode. *****************************************************************/ /* Function: esl_sqncbi_Open() * Synopsis: Open a sequence file for reading. * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Open a sequence file for reading. * The opened is returned through . * * The .pin, .phr and .psq files are required for the * open function to succeed. Only ncbi version 4 * databases are currently supported. * * Returns: on success, and <*ret_sqfp> points to a new * open . Caller deallocates this object with * . * * Returns if can't be found or * opened. Returns if the file is empty, or * if autodetection is attempted and the format can't be * determined. On any error condition, <*ret_sqfp> is * returned NULL. * * Throws: on allocation failure. */ int esl_sqncbi_Open(char *filename, int format, ESL_SQFILE *sqfp) { int i; int status = eslOK; /* return status from an ESL call */ ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; /* before we go any further, make sure we can handle the format */ if (format != eslSQFILE_NCBI && format != eslSQFILE_UNKNOWN) return eslENOTFOUND; ncbi->fppin = NULL; ncbi->fpphr = NULL; ncbi->fppsq = NULL; ncbi->title = NULL; ncbi->timestamp = NULL; ncbi->index = -1; ncbi->hdr_off = -1; ncbi->seq_off = -1; ncbi->amb_off = -1; ncbi->index_start = -1; ncbi->index_end = -1; ncbi->hdr_indexes = NULL; ncbi->seq_indexes = NULL; ncbi->amb_indexes = NULL; ncbi->hdr_buf = NULL; reset_header_values(ncbi); ncbi->amb_off = 0; ncbi->alphatype = eslUNKNOWN; ncbi->alphasym = NULL; ncbi->vol_index = -1; ncbi->volumes = 0; for (i = 0; i < MAX_DB_VOLUMES; ++i) { ncbi->vols[i].name = NULL; ncbi->vols[i].start_seq = -1; ncbi->vols[i].end_seq = -1; } if ((status = sqncbi_Open(ncbi, filename)) != eslOK) goto ERROR; sqfp->format = eslSQFILE_NCBI; if ((status = inmap_ncbi(sqfp)) != eslOK) goto ERROR; /* initialize the function pointers for the ncbi routines */ sqfp->position = &sqncbi_Position; sqfp->close = &sqncbi_Close; sqfp->set_digital = &sqncbi_SetDigital; sqfp->guess_alphabet = &sqncbi_GuessAlphabet; sqfp->is_rewindable = &sqncbi_IsRewindable; sqfp->read = &sqncbi_Read; sqfp->read_info = &sqncbi_ReadInfo; sqfp->read_seq = &sqncbi_ReadSequence; sqfp->read_window = &sqncbi_ReadWindow; sqfp->echo = &sqncbi_Echo; sqfp->read_block = &sqncbi_ReadBlock; sqfp->get_error = &sqncbi_GetError; return eslOK; ERROR: sqncbi_Close(sqfp); return status; } /* sqncbi_ParseIndexFile() * * Parse an open index file verifying database type and version * if handled. Read in the entries, i.e. name, number of sequences, * etc. Keep track of the offsets where the header and sequence * tables begin. */ static int sqncbi_ParseIndexFile(ESL_SQNCBI_DATA *ncbi, int dbtype) { int len; uint32_t info[4]; int status = eslOK; /* return status from an ESL call */ if (fread(&info[0], sizeof(uint32_t), 3, ncbi->fppin) != 3) status = eslFAIL; if (htobe32(info[0]) != NCBI_VERSION_4) status = eslEFORMAT; if (htobe32(info[1]) != dbtype) status = eslEUNIMPLEMENTED; if (status != eslOK) goto ERROR; ncbi->version = htobe32(info[0]); ncbi->alphatype = (dbtype == NCBI_DNA_DB) ? eslDNA : eslAMINO; ncbi->index = -1; /* read the database title */ len = htobe32(info[2]); ESL_ALLOC(ncbi->title, sizeof(char) * (len + 1)); if (fread(ncbi->title, sizeof(char), len, ncbi->fppin) != len) { status = eslFAIL; goto ERROR; } ncbi->title[len] = 0; /* read the database time stamp */ if (fread(&info[0], sizeof(uint32_t), 1, ncbi->fppin) != 1) { status = eslFAIL; goto ERROR; } len = htobe32(info[0]); ESL_ALLOC(ncbi->timestamp, sizeof(char) * (len + 1)); if (fread(ncbi->timestamp, sizeof(char), len, ncbi->fppin) != len) { status = eslFAIL; goto ERROR; } ncbi->timestamp[len] = 0; /* read in database stats */ if (fread(&info[0], sizeof(uint32_t), 4, ncbi->fppin) != 4) { status = eslFAIL; goto ERROR; } ncbi->num_seq = htobe32(info[0]); ncbi->total_res = *(uint64_t *)(info+1); ncbi->max_seq = htobe32(info[3]); /* save the offsets to the index tables */ ncbi->hdr_off = ftell(ncbi->fppin); ncbi->seq_off = ncbi->hdr_off + sizeof(uint32_t) * (ncbi->num_seq + 1); return eslOK; ERROR: return status; } /* sqncbi_DbOpen() * * Try to open the database files. On successful opening of * the files, index, header and sequence, the index file is * parsed for validity. */ static int sqncbi_DbOpen(ESL_SQNCBI_DATA *ncbi, char *filename, int dbtype) { int status = eslOK; /* return status from an ESL call */ int len; char *name = NULL; len = strlen(filename); ESL_ALLOC(name, sizeof(char) * (len+5)); strcpy(name, filename); /* Check for basic database first */ strcpy(name+len, ".Xin"); name[len+1] = (dbtype == NCBI_DNA_DB) ? 'n' : 'p'; if ((ncbi->fppin = fopen(name, "rb")) == NULL) { status = eslENOTFOUND; goto ERROR; } strcpy(name+len, ".Xhr"); name[len+1] = (dbtype == NCBI_DNA_DB) ? 'n' : 'p'; if ((ncbi->fpphr = fopen(name, "rb")) == NULL) { status = eslENOTFOUND; goto ERROR; } strcpy(name+len, ".Xsq"); name[len+1] = (dbtype == NCBI_DNA_DB) ? 'n' : 'p'; if ((ncbi->fppsq = fopen(name, "rb")) == NULL) { status = eslENOTFOUND; goto ERROR; } /* parse the header make sure we are looking at a version 4 db. */ if ((status = sqncbi_ParseIndexFile(ncbi, dbtype)) != eslOK) goto ERROR; if (name != NULL) free(name); return eslOK; ERROR: reset_db(ncbi); if (name != NULL) free(name); return status; } /* sqncbi_AliasOpen() * * Opens an alias file parsing the DBLIST directive building * a list of all the volumes makeing up this database. As each * volume is successfully parsed, the name of the volume, number * of sequences and offsets are kept for quick reference. */ static int sqncbi_AliasOpen(ESL_SQNCBI_DATA *ncbi, char *filename, int dbtype) { int status = eslOK; /* return status from an ESL call */ int newline = 1; int seqcnt = 0; int rescnt = 0; int done = 0; int vol; int len; char *ptr = NULL; char *name = NULL; char buffer[80]; char *dbptr = NULL; char *dbname = NULL; int dbsize = 512; int dblen = 0; FILE *fp = NULL; len = strlen(filename); ESL_ALLOC(name, sizeof(char) * (len+5)); strcpy(name, filename); /* Check for alias file */ strcpy(name+len, ".Xal"); name[len+1] = (dbtype == NCBI_DNA_DB) ? 'n' : 'p'; if ((fp = fopen(name, "r")) == NULL) { status = eslENOTFOUND; goto ERROR; } /* copy the filename */ dbsize = (dbsize > len) ? dbsize : len * 2; ESL_ALLOC(dbname, sizeof(char) * dbsize); strcpy(dbname, filename); /* remove the filename keeping the path */ while (len > 0 && dbname[len-1] != eslDIRSLASH) { dbname[len-1] = '\0'; --len; } /* find the DBLIST directive */ while (!done) { ptr = buffer; if (fgets(buffer, sizeof(buffer), fp) == NULL) { status = eslEFORMAT; goto ERROR; } if (newline) { if (strncmp(buffer, "DBLIST", 6) == 0 && isspace(buffer[6])) { done = 1; ptr = buffer + 6; } } /* skip to the end of the line */ if (!done) { newline = 0; while (*ptr != '\0') { if (*ptr == '\n') newline = 1; ++ptr; } } } /* parse the DBLIST line */ done = 0; dblen = len; while (!done) { /* check if we hit the end of the buffer */ if (*ptr == '\0') { ptr = buffer; if (fgets(buffer, sizeof(buffer), fp) == NULL) { status = eslEFORMAT; goto ERROR; } } /* skip spaces */ if (isspace(*ptr)) { if (dblen > len) { dbname[dblen++] = '\0'; /* if the name in the DBLIST directive was ablsolute, do not * use the working directory as a prefix. */ if (dbname[len] == eslDIRSLASH) { dbptr = dbname + len; } else { dbptr = dbname; } status = sqncbi_DbOpen(ncbi, dbptr, dbtype); if (status != eslOK) goto ERROR; /* close any open files and free up allocations */ reset_db(ncbi); /* if successful, copy the db information */ vol = ncbi->volumes++; /* allocate the name of the string big enought so the buffer can * handle an extension, i.e. ".pin" or ".nsq" tacked on to the end * of it without reallocating. */ ncbi->vols[vol].name = NULL; ESL_ALLOC(ncbi->vols[vol].name, sizeof(char) * strlen(dbptr) + 5); strcpy(ncbi->vols[vol].name, dbptr); ncbi->vols[vol].start_seq = seqcnt; ncbi->vols[vol].end_seq = seqcnt + ncbi->num_seq - 1; ncbi->vols[vol].hdr_off = ncbi->hdr_off; ncbi->vols[vol].seq_off = ncbi->seq_off; ncbi->vols[vol].amb_off = ncbi->amb_off; seqcnt += ncbi->num_seq; rescnt += ncbi->total_res; dblen = len; } done = *ptr == '\n' || *ptr == '\r'; ptr++; } else { dbname[dblen++] = *ptr++; if (dblen >= dbsize - 1) { char *t; dbsize += dbsize; ESL_RALLOC(dbname, t, dbsize); } } } /* reopen the first volume for processing */ if ((status = volume_open(ncbi, 0)) != eslOK) goto ERROR; ncbi->num_seq = seqcnt; ncbi->total_res = rescnt; if (name != NULL) free(name); if (dbname != NULL) free(dbname); if (fp != NULL) fclose(fp); return eslOK; ERROR: reset_db(ncbi); if (fp != NULL) fclose(fp); if (dbname != NULL) free(dbname); if (name != NULL) free(name); return status; } /* Function: sqncbi_Open() * Synopsis: Open an ncbi database. * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Open an ncbi database making sure all the necessry * files are present. Parse the index file for database * information filling in the ncbi data structure. * * Returns: on success, and the ncbi data structre is filled * in with the database information. * * Returns if can't be found or * opened. Returns if the index file is an * upsupported version. * * Throws: on allocation failure. */ static int sqncbi_Open(ESL_SQNCBI_DATA *ncbi, char *filename) { int status = eslOK; /* return status from an ESL call */ char *name = NULL; /* first try to open a single protein database */ status = sqncbi_DbOpen(ncbi, filename, NCBI_AMINO_DB); /* if the database was not found, look for protein volume */ if (status == eslENOTFOUND) { status = sqncbi_AliasOpen(ncbi, filename, NCBI_AMINO_DB); } /* if nothing so far, try a dna database */ if (status == eslENOTFOUND) { status = sqncbi_DbOpen(ncbi, filename, NCBI_DNA_DB); } /* still nothing, look for dna volume */ if (status == eslENOTFOUND) { status = sqncbi_AliasOpen(ncbi, filename, NCBI_DNA_DB); } if (status != eslOK) goto ERROR; /* allocate buffers used in parsing the database files */ ESL_ALLOC(ncbi->hdr_indexes, sizeof(uint32_t) * INDEX_TABLE_SIZE); ESL_ALLOC(ncbi->seq_indexes, sizeof(uint32_t) * INDEX_TABLE_SIZE); /* if this is a dna database we need to allocate space for the * ambiguity offsets. */ if (ncbi->alphatype == eslDNA) { ncbi->amb_off = ncbi->seq_off + sizeof(uint32_t) * (ncbi->num_seq + 1); ESL_ALLOC(ncbi->amb_indexes, sizeof(uint32_t) * INDEX_TABLE_SIZE); } ncbi->hdr_alloced = INIT_HDR_BUFFER_SIZE; ESL_ALLOC(ncbi->hdr_buf, sizeof(char) * INIT_HDR_BUFFER_SIZE); /* skip the first sentinal byte in the .psq file */ fgetc(ncbi->fppsq); if (name != NULL) free(name); return eslOK; ERROR: if (name != NULL) free(name); return status; } /* Function: sqncbi_Position() * Synopsis: Reposition an open sequence file to an offset. * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Reposition an open to offset . * for the ncbi db format specified the sequence * index, not file offset. Both the sequence and header * files are repositioned. * * Returns: on success; * * Throws: if the fseeko() or fread() call fails. * On errors, the state of is indeterminate, and * it should not be used again. */ static int sqncbi_Position(ESL_SQFILE *sqfp, off_t offset) { int status; ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; status = pos_sequence(ncbi, offset); return status; } /* Function: sqncbi_Close() * Synopsis: Close a sequence file. * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Closes an open . * * Returns: (void). */ static void sqncbi_Close(ESL_SQFILE *sqfp) { int i; ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; if (ncbi->title != NULL) free(ncbi->title); if (ncbi->timestamp != NULL) free(ncbi->timestamp); if (ncbi->hdr_buf != NULL) free(ncbi->hdr_buf); if (ncbi->hdr_indexes != NULL) free(ncbi->hdr_indexes); if (ncbi->seq_indexes != NULL) free(ncbi->seq_indexes); if (ncbi->amb_indexes != NULL) free(ncbi->amb_indexes); if (ncbi->alphasym != NULL) free(ncbi->alphasym); if (ncbi->fppin != NULL) fclose(ncbi->fppin); if (ncbi->fpphr != NULL) fclose(ncbi->fpphr); if (ncbi->fppsq != NULL) fclose(ncbi->fppsq); ncbi->vol_index = -1; ncbi->volumes = 0; for (i = 0; i < MAX_DB_VOLUMES; ++i) { if (ncbi->vols[i].name != NULL) free(ncbi->vols[i].name); ncbi->vols[i].name = NULL; ncbi->vols[i].start_seq = -1; ncbi->vols[i].end_seq = -1; } ncbi->fppin = NULL; ncbi->fpphr = NULL; ncbi->fppsq = NULL; ncbi->title = NULL; ncbi->timestamp = NULL; ncbi->index = -1; ncbi->hdr_off = -1; ncbi->seq_off = -1; ncbi->amb_off = -1; ncbi->index_start = -1; ncbi->index_end = -1; ncbi->hdr_indexes = NULL; ncbi->seq_indexes = NULL; ncbi->amb_indexes = NULL; ncbi->hdr_buf = NULL; ncbi->alphatype = eslUNKNOWN; ncbi->alphasym = NULL; return; } /*------------------- SQNCBI open/close -----------------------*/ /***************************************************************** *# 2. An object, in digital mode [with ] *****************************************************************/ #ifdef eslAUGMENT_ALPHABET /* Function: sqncbi_SetDigital() * Synopsis: Set an open to read in digital mode. * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Given an that's already been opened, * configure it to expect subsequent input to conform * to the digital alphabet . * * Calling is * equivalent to . The two-step * version is useful when you need a * call in between, guessing * the file's alphabet in text mode before you set it to * digital mode. * * Returns: on success. */ static int sqncbi_SetDigital(ESL_SQFILE *sqfp, const ESL_ALPHABET *abc) { return eslOK; } /* Function: sqncbi_GuessAlphabet() * Synopsis: Guess the alphabet of an open . * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: The only ncbi db format supported is protein. * * Returns: on success, and <*ret_type> is set to . */ static int sqncbi_GuessAlphabet(ESL_SQFILE *sqfp, int *ret_type) { *ret_type = sqfp->data.ncbi.alphatype; return eslOK; } #endif /*eslAUGMENT_ALPHABET*/ /*-------------- end, digital mode SQNCBI -------------------*/ /***************************************************************** *# 3. Miscellaneous routines *****************************************************************/ /* Function: sqncbi_IsRewindable() * Synopsis: Return if can be rewound. * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Returns if can be rewound (positioned * to an offset of zero), in order to read it a second * time. */ static int sqncbi_IsRewindable(const ESL_SQFILE *sqfp) { return TRUE; } /* Function: sqncbi_GetError() * Synopsis: Returns error buffer * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Return a pointer to the error buffer. */ static const char * sqncbi_GetError(const ESL_SQFILE *sqfp) { return sqfp->data.ncbi.errbuf; } /***************************************************************** *# 4. Sequence reading (sequential) *****************************************************************/ /* Function: sqncbi_Read() * Synopsis: Read the next sequence from a file. * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Reads the next sequence from open sequence file into * . Caller provides an allocated and initialized , which * will be internally reallocated if its space is insufficient. * * Returns: on success; the new sequence is stored in . * * Returns when there is no sequence left in the * file (including first attempt to read an empty file). * * Returns if there's a problem with the format, * such as an illegal character; the line number that the parse * error occurs on is in linenumber>, and an informative * error message is placed in errbuf>. * * Throws: on allocation failure; * on internal error. */ static int sqncbi_Read(ESL_SQFILE *sqfp, ESL_SQ *sq) { int index; int status; ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; index = ncbi->index + 1; if (index >= ncbi->num_seq) return eslEOF; if ((status = pos_sequence(ncbi, index)) != eslOK) return status; /* Disk offset bookkeeping */ sq->idx = ncbi->index; sq->roff = ncbi->roff; sq->doff = ncbi->doff; sq->hoff = ncbi->hoff; sq->eoff = ncbi->eoff; if (ncbi->alphatype == eslAMINO) status = read_amino(sqfp, sq); else status = read_dna(sqfp, sq); if (status != eslOK) return status; /* read and parse the ncbi header */ if ((status = parse_header(ncbi, sq)) != eslOK) return status; return eslOK; } /* Function: sqncbi_ReadInfo() * Synopsis: Read sequence info, but not the sequence itself. * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Read the next sequence from open sequence file , * but don't store the sequence (or secondary structure). * Upon successful return, holds all the available * information about the sequence -- its name, accession, * description, and overall length L>. * * This is useful for indexing sequence files, where * individual sequences might be ginormous, and we'd rather * avoid reading complete seqs into memory. * * Returns: on success. */ static int sqncbi_ReadInfo(ESL_SQFILE *sqfp, ESL_SQ *sq) { int index; int status; ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; index = ncbi->index + 1; if (index >= ncbi->num_seq) return eslEOF; if ((status = pos_sequence(ncbi, index)) != eslOK) return status; /* Disk offset bookkeeping */ sq->idx = ncbi->index; sq->roff = ncbi->roff; sq->doff = ncbi->doff; sq->hoff = ncbi->hoff; sq->eoff = ncbi->eoff; /* figure out the sequence length */ sq->L = -1; /* read and parse the ncbi header */ if ((status = parse_header(ncbi, sq)) != eslOK) return status; return eslOK; } /* Function: sqncbi_ReadSequence() * Synopsis: Read the sequence, not the sequence header. * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Read the next sequence from open sequence file , * but not the header information. Upon successful return, * holds all the sequence. * * This is useful reading binary formats and delaying the * over heads of reading the sequence name until needed by * the report generator. * * Returns: on success; the new sequence is stored in . * * Returns when there is no sequence left in the * file (including first attempt to read an empty file). * * Throws: on allocation failure; */ static int sqncbi_ReadSequence(ESL_SQFILE *sqfp, ESL_SQ *sq) { int index; int status; ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; index = ncbi->index + 1; if (index >= ncbi->num_seq) return eslEOF; if ((status = pos_sequence(ncbi, index)) != eslOK) return status; /* Disk offset bookkeeping */ sq->idx = ncbi->index; sq->roff = ncbi->roff; sq->doff = ncbi->doff; sq->hoff = ncbi->hoff; sq->eoff = ncbi->eoff; reset_header_values(ncbi); if (ncbi->alphatype == eslAMINO) status = read_amino(sqfp, sq); else status = read_dna(sqfp, sq); if (status != eslOK) return status; return eslOK; } /* Function: sqncbi_ReadWindow() * Synopsis: Read next window of sequence. * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Read a next window of residues from open file , * keeping residues from the previous window as * context, and keeping previous annotation in the * as before. * * If this is the first window of a new sequence record, * is ignored (there's no previous context yet), and * the annotation fields of the (name, accession, and * description) are initialized by reading the sequence * record's header. This is the only time the annotation * fields are initialized. * * On return, dsq[]> contains the window and its * context; residues <1..sq->C> are the previous context, * and residues C+1..sq->n> are the new window. The * start and end coordinates of the whole * (including context) in the original source sequence are * start..sq->end>. (Or, for text mode sequences, * seq[0..sq->C-1,sq->C..sq->n-1]>, while and * coords are still <1..L>.) * * When a sequence record is completed and no more data * remain, is returned, with an ``info'' * structure (containing the annotation and the total * sequence length , but no sequence). (The total * sequence length is unknown in until this * return.) * * The caller may then do one of two things before calling * again; it can reset the sequence * with to continue reading the next * sequence in the file, or it can set a negative as a * signal to read windows from the reverse complement * (Crick) strand. Reverse complement reading only works * for nucleic acid sequence. * * If you read the reverse complement strand, you must read * the whole thing, calling with * negative windows until is returned again * with an empty (info-only) structure. When that * is reached, the is repositioned at the * start of the next sequence record; the caller should now * the , and the next * call must have a positive , corresponding to starting * to read the Watson strand of the next sequence. * * Note that the interface is designed for * an idiom of sequential reading of complete sequences in * overlapping windows, possibly on both strands; if you * want more freedom to move around in the sequence * grabbing windows in another order, you can use the * interface. * * Reading the reverse complement strand requires file * repositioning, so it will not work on non-repositionable * streams like gzipped files or a stdin pipe. Moreover, * for reverse complement input to be efficient, the * sequence file should have consistent line lengths, * suitable for SSI's fast subsequence indexing. * * Returns: on success; now contains next window of * sequence, with at least 1 new residue. The number * of new residues is W>; C> residues are * saved from the previous window. Caller may now * process residues dsq[sq->C+1]..sq->dsq[sq->n]>. * * if no new residues were read for this sequence * and strand, and now contains an empty info-only * structure (annotation and are valid). Before calling * again, caller will either want * to make negative (to start reading the Crick strand * of the current sequence), or it will want to reset the * (with ) to go on the next sequence. * * if we've already returned before to * signal the end of the previous seq record, and moreover, * there's no more sequence records in the file. * * if an invalid residue is found in the * sequence, or if you attempt to take the reverse * complement of a sequence that can't be reverse * complemented. * * Throws: if you try to read a reverse window before * you've read forward strand. * * if something goes awry internally in the * coordinate system. * * on allocation error. */ static int sqncbi_ReadWindow(ESL_SQFILE *sqfp, int C, int W, ESL_SQ *sq) { uint64_t nres; int index; int status; ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; /* Negative W indicates reverse complement direction */ if (W < 0) { if (sq->L == -1) ESL_EXCEPTION(eslESYNTAX, "Can't read reverse complement until you've read forward strand"); /* update the sequence index */ if ((status = sqncbi_Position(sqfp, sq->idx)) != eslOK) ESL_FAIL(eslEINVAL, ncbi->errbuf, "Unexpected error positioning database to sequence %" PRId64, sq->idx); if (sq->end == 1) { /* last end == 1 means last window was the final one on reverse strand, * so we're EOD; jump back to last forward position. */ sq->start = 0; sq->end = 0; sq->C = 0; sq->W = 0; sq->n = 0; /* sq->L stays as it is */ if (sq->dsq != NULL) sq->dsq[1] = eslDSQ_SENTINEL; else sq->seq[0] = '\0'; return eslEOD; } /* If s == 0, we haven't read any reverse windows yet; * init reading from sq->L */ W = -W; if (sq->start == 0) { sq->start = ESL_MAX(1, (sq->L - W + 1)); sq->end = sq->start; sq->C = 0; } else { /* Else, we're continuing to next window; prv was .. */ sq->C = ESL_MIN(C, sq->L - sq->end + 1); /* based on prev window's end */ sq->start = ESL_MAX(1, (sq->end - W)); W = sq->end - sq->start + sq->C; sq->end = sq->start; } /* grab the subseq and rev comp it */ if ((status = esl_sq_GrowTo(sq, W)) != eslOK) return status; sq->n = 0; if (ncbi->alphatype == eslAMINO) status = read_nres_amino(sqfp, sq, W, &nres); else status = read_nres_dna(sqfp, sq, W, &nres); if (status != eslOK || nres != W) { ESL_EXCEPTION(eslECORRUPT, "Failed to extract %d..%d", sq->start, sq->end); } else { sq->end = sq->start + nres - 1; sq->W = nres - sq->C; } status = esl_sq_ReverseComplement(sq); if (status == eslEINVAL) ESL_FAIL(eslEINVAL, ncbi->errbuf, "can't reverse complement that seq - it's not DNA/RNA"); else if (status != eslOK) return status; return eslOK; } /* Else, we're reading the forward strand */ else { /* sq->start == 0 means we haven't read any windows on this sequence yet... * it's a new record, and we need to initialize with the header and * the first window. This is the only case that we're allowed to return * EOF from. */ if (sq->start == 0) { index = ncbi->index + 1; if (index >= ncbi->num_seq) return eslEOF; /* get the sequence and header offsets */ if ((status = pos_sequence(ncbi, index)) != eslOK) return status; /* Disk offset bookkeeping */ sq->idx = ncbi->index; sq->roff = ncbi->roff; sq->doff = ncbi->doff; sq->hoff = ncbi->hoff; sq->eoff = ncbi->eoff; ncbi->seq_cpos = -1; ncbi->seq_L = -1; /* read and parse the ncbi header */ if ((status = parse_header(ncbi, sq)) != eslOK) return status; sq->start = 1; sq->C = 0; /* no context in first window */ sq->L = -1; /* won't be known 'til EOD. */ ncbi->seq_L = -1; /* init to 0, so we can count residues as we go */ esl_sq_SetSource(sq, sq->name); } else { /* else we're reading a window other than first; slide context over. */ sq->C = ESL_MIN(C, sq->n); /* if the case where the window is smaller than the context and the * context is not full, it is not necessary to move the context part * of the sequence that has been read in. */ if (sq->C >= C) { if (sq->seq != NULL) memmove(sq->seq, sq->seq + sq->n - sq->C, sq->C); else memmove(sq->dsq+1, sq->dsq + sq->n - sq->C + 1, sq->C); sq->start = sq->end - sq->C + 1; sq->n = C; } } if ((status = esl_sq_GrowTo(sq, C+W)) != eslOK) return status; /* EMEM */ if (ncbi->alphatype == eslAMINO) status = read_nres_amino(sqfp, sq, W, &nres); else status = read_nres_dna(sqfp, sq, W, &nres); if (status == eslEOD) { sq->start = 0; sq->end = 0; sq->C = 0; sq->W = 0; sq->n = 0; if (sq->dsq != NULL) sq->dsq[1] = eslDSQ_SENTINEL; /* erase the saved context */ else sq->seq[0] = '\0'; return eslEOD; } else if (status == eslOK) { /* Forward strand is still in progress. <= W residues were read. Return eslOK. */ sq->end = sq->start + sq->C + nres - 1; sq->W = nres; return eslOK; } else return status; /* EFORMAT,EMEM */ } /*NOTREACHED*/ return eslOK; } /* Function: sqncbi_ReadBlock() * Synopsis: Read the next block of sequences from a file. * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Reads a block of sequences from open sequence file into * . * * In the case that is false, the sequences are * expected to be protein - individual sequences won't be long * so read them in one-whole-sequence at a time. If * is set to a number > 0 read sequences. * * If is true, the sequences are expected to be DNA. * Because sequences in a DNA database can exceed MAX_RESIDUE_COUNT, * this function uses ReadWindow to read chunks of sequence no * larger than , and must allow for the possibility that * a request will be made to continue reading a partly-read * sequence. * * Returns: on success; the new sequence is stored in . * * Returns when there is no sequence left in the * file (including first attempt to read an empty file). * * Returns if there's a problem with the format, * such as an illegal character; * * Throws: on allocation failure; * on internal error. */ static int sqncbi_ReadBlock(ESL_SQFILE *sqfp, ESL_SQ_BLOCK *sqBlock, int max_residues, int max_sequences, int long_target) { int i = 0; int size = 0; int status = eslOK; ESL_SQ *tmpsq; sqBlock->count = 0; if ( !long_target ) { /* in these cases, an individual sequence won't ever be really long, so just read in a sequence at a time */ if (max_sequences < 1 || max_sequences > sqBlock->listSize) max_sequences = sqBlock->listSize; for (i = 0; i < max_sequences && size < MAX_RESIDUE_COUNT; ++i) { status = sqncbi_Read(sqfp, sqBlock->list + i); if (status != eslOK) break; size += sqBlock->list[i].n; ++sqBlock->count; } } else { /* DNA, not an alignment. Might be really long sequences */ /*this variable is used instead of the MAX_RESIDUE_COUNT macro because impl_dummy may require shorter sequences to fit in memory*/ if (max_residues < 0) max_residues = MAX_RESIDUE_COUNT; tmpsq = esl_sq_Create(); //if complete flag set to FALSE, then the prior block must have ended with a window that was a possibly //incomplete part of it's full sequence. Read another overlaping window. if (! sqBlock->complete ) { //overloading C as indicator of how big C should be for this window reading action status = sqncbi_ReadWindow(sqfp, sqBlock->list->C, max_residues, sqBlock->list); if (status == eslOK) { sqBlock->count = i = 1; size = sqBlock->list->n; sqBlock->list[i].L = sqfp->data.ncbi.seq_L; if (sqBlock->list->n >= max_residues) { // Filled the block with a single very long window. if ( sqBlock->list->n == sqfp->data.ncbi.seq_L) { sqBlock->complete = TRUE; esl_sq_Reuse(tmpsq); tmpsq->start = sqBlock->list->start ; tmpsq->C = 0; status = sqncbi_ReadWindow(sqfp, 0, max_residues, tmpsq); // burn off the EOD if (status == eslEOD) // otherwise, the unexpected status will be returned status = eslOK; } else { sqBlock->complete = FALSE; } if(tmpsq != NULL) esl_sq_Destroy(tmpsq); return status; } else { // Burn off EOD (see notes for similar entry ~25 lines below), then go fetch the next sequence esl_sq_Reuse(tmpsq); tmpsq->start = sqBlock->list->start ; tmpsq->C = 0; status = sqncbi_ReadWindow(sqfp, 0, max_residues, tmpsq); if (status != eslEOD) { if(tmpsq != NULL) esl_sq_Destroy(tmpsq); return status; //surprising } sqBlock->list->L = tmpsq->L; } } else if (status == eslEOD) { // turns out there isn't any more of the sequence to read, after all } else { if(tmpsq != NULL) esl_sq_Destroy(tmpsq); return status; } } // otherwise, just start at the beginning for ( ; i < sqBlock->listSize && size < max_residues; ++i) { esl_sq_Reuse(tmpsq); esl_sq_Reuse(sqBlock->list + i); status = sqncbi_ReadWindow(sqfp, 0, max_residues, tmpsq); if (status != eslOK) break; // end of sequences size += sqBlock->list[i].n - sqBlock->list[i].C; sqBlock->list[i].L = sqfp->data.ncbi.seq_L; ++(sqBlock->count); if (size >= max_residues) { // a full window worth of sequence was read if ( sqBlock->list[i].n == sqfp->data.ncbi.seq_L) { sqBlock->complete = TRUE; esl_sq_Reuse(tmpsq); tmpsq->start = sqBlock->list->start ; tmpsq->C = 0; status = sqncbi_ReadWindow(sqfp, 0, max_residues, tmpsq); // burn off the EOD if (status == eslEOD) // otherwise, the unexpected status will be returned status = eslOK; } else { sqBlock->complete = FALSE; } if(tmpsq != NULL) esl_sq_Destroy(tmpsq); return status; } else { /* Sequence was finished before filling a full window. Need to burn off the EOD value that will be returned by the next ReadWindow call. Can just use a tmp sq, after setting a couple values ReadWindow needs to see for correct processing. */ esl_sq_Reuse(tmpsq); tmpsq->start = sqBlock->list[i].start ; tmpsq->C = 0; status = sqncbi_ReadWindow(sqfp, 0, max_residues, tmpsq); if (status != eslEOD) { if(tmpsq != NULL) esl_sq_Destroy(tmpsq); return status; //surprising } //sqBlock->list[i].L = tmpsq->L; status = eslOK; } } } /* EOF will be returned only in the case were no sequences were read */ if (status == eslEOF && i > 0) status = eslOK; sqBlock->complete = TRUE; if(tmpsq != NULL) esl_sq_Destroy(tmpsq); return status; } /* Function: sqncbi_Echo() * Synopsis: Echo a sequence's record onto output stream. * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Returns: . */ static int sqncbi_Echo(ESL_SQFILE *sqfp, const ESL_SQ *sq, FILE *ofp) { ESL_EXCEPTION(eslEINVAL, "can't Echo() a sequence from NCBI database"); return eslEUNIMPLEMENTED; } /*------------------ end, sequential sequence input -------------*/ /* Function: reset_db() * Synopsis: Resets a sequence file. * Incept: MSF, Wed Mar 17, 2010 [Janelia] * * Purpose: Closes just the currently opened db and frees * up the memory associated with that db. This is * used primarily with multi-volume databases where * the current db is closed so the next one can be * opened. * * Returns: void. */ static void reset_db(ESL_SQNCBI_DATA *ncbi) { if (ncbi->title != NULL) free(ncbi->title); if (ncbi->timestamp != NULL) free(ncbi->timestamp); if (ncbi->fppin != NULL) fclose(ncbi->fppin); if (ncbi->fpphr != NULL) fclose(ncbi->fpphr); if (ncbi->fppsq != NULL) fclose(ncbi->fppsq); ncbi->fppin = NULL; ncbi->fpphr = NULL; ncbi->fppsq = NULL; ncbi->title = NULL; ncbi->timestamp = NULL; return; } /* reset_header_values() * * Clear the header values so it is clear which values * have been set by the current header. */ static void reset_header_values(ESL_SQNCBI_DATA *ncbi) { ncbi->name_ptr = NULL; ncbi->name_size = 0; ncbi->acc_ptr = NULL; ncbi->acc_size = 0; ncbi->int_id = -1; ncbi->str_id_ptr = NULL; ncbi->str_id_size = 0; } /* volume_open() * * Open up the index, head and sequence files for a particular * volume. Parse the first three fields in the index file, * one more time, just to make sure nothing funny is going on. */ static int volume_open(ESL_SQNCBI_DATA *ncbi, int volume) { int len; uint32_t info[4]; int dbtype; int status = eslOK; /* return status from an ESL call */ char *name; if (volume < 0 || volume > ncbi->volumes) return eslEINVAL; /* if the db has no volumes return */ if (ncbi->volumes == 0) return eslOK; if (ncbi->fppin != NULL) fclose(ncbi->fppin); if (ncbi->fpphr != NULL) fclose(ncbi->fpphr); if (ncbi->fppsq != NULL) fclose(ncbi->fppsq); name = ncbi->vols[volume].name; len = strlen(name); dbtype = (ncbi->alphatype == eslDNA) ? NCBI_DNA_DB : NCBI_AMINO_DB; /* Check for basic database first */ strcpy(name+len, ".Xin"); name[len+1] = (dbtype == NCBI_DNA_DB) ? 'n' : 'p'; if ((ncbi->fppin = fopen(name, "rb")) == NULL) { status = eslFAIL; goto ERROR; } strcpy(name+len, ".Xhr"); name[len+1] = (dbtype == NCBI_DNA_DB) ? 'n' : 'p'; if ((ncbi->fpphr = fopen(name, "rb")) == NULL) { status = eslFAIL; goto ERROR; } strcpy(name+len, ".Xsq"); name[len+1] = (dbtype == NCBI_DNA_DB) ? 'n' : 'p'; if ((ncbi->fppsq = fopen(name, "rb")) == NULL) { status = eslFAIL; goto ERROR; } /* quickly parse the header make sure we are sane. */ if (fread(&info[0], sizeof(uint32_t), 3, ncbi->fppin) != 3) status = eslFAIL; if (htobe32(info[0]) != NCBI_VERSION_4) status = eslEFORMAT; if (htobe32(info[1]) != dbtype) status = eslEFORMAT; if (status != eslOK) goto ERROR; /* save the offsets to the index tables */ ncbi->hdr_off = ncbi->vols[volume].hdr_off; ncbi->seq_off = ncbi->vols[volume].seq_off; if (dbtype == NCBI_DNA_DB) { ncbi->amb_off = ncbi->vols[volume].amb_off; } ncbi->vol_index = volume; ncbi->index_start = -1; ncbi->index_end = -1; /* skip the first sentinal byte in the .psq file */ fgetc(ncbi->fppsq); /* zero terminate the name other functions can just * tack on any extension without a lot of testing. */ name[len] = '\0'; return eslOK; ERROR: reset_db(ncbi); return status; } /* pos_sequence_offsets() * * Position the sequence and header files for reading at * the start of the indexed sequence . This routine * buffers offsets from the header and * sequence files. If the index is not in the * currently buffered table, read the the indexes. If the * index is not in the current volume find which volume * the indexed sequence is in and open up that database. */ static int pos_sequence(ESL_SQNCBI_DATA *ncbi, int inx) { int cnt; int status; uint32_t offset; uint32_t start; uint32_t end; ESL_SQNCBI_VOLUME *volume; if (inx < 0 || inx > ncbi->num_seq) return eslEINVAL; start = ncbi->index_start; end = ncbi->index_end; /* get the offsets for the header, sequence and ambiguity table */ if (ncbi->index_start == -1 || inx < start || inx > end) { /* if the db is broken up into volumes, lets find the correct one to use */ if (ncbi->volumes > 0) { volume = ncbi->vols + ncbi->vol_index; if (inx < volume->start_seq || inx > volume->end_seq) { volume = ncbi->vols; for (cnt = 0; cnt < ncbi->volumes; ++cnt) { if (inx < volume->end_seq) break; ++volume; } /* check just to make sure we found the volume */ if (cnt >= ncbi->volumes) return eslFAIL; if ((status = volume_open(ncbi, cnt)) != eslOK) return status; } } /* adjust where we start reading from if we are reading forwards or backwards */ if (ncbi->index_start == -1 || inx > end) { start = inx; } else { start = inx + 2; start = (start > INDEX_TABLE_SIZE) ? start - INDEX_TABLE_SIZE : 0; } ncbi->index_start = start; /* when calculating the count be sure to take into account the fact that the * index tables contain one index more that the number of sequences and this * last index is used to point to the end of the last header and sequences. */ if (ncbi->volumes > 0) { cnt = volume->end_seq - inx + 2; start = start - volume->start_seq; } else { cnt = ncbi->num_seq - inx + 1; } cnt = (cnt > INDEX_TABLE_SIZE) ? INDEX_TABLE_SIZE : cnt; ncbi->index_end = ncbi->index_start + cnt - 2; offset = ncbi->hdr_off + (sizeof(uint32_t) * start); if (fseek(ncbi->fppin, offset, SEEK_SET) != 0) { ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Error seeking header index %d\n", offset); } if (fread(ncbi->hdr_indexes, sizeof(uint32_t), cnt, ncbi->fppin) != cnt) { ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Error reading header index %d at %d(%d)\n", start, offset, cnt); } offset = ncbi->seq_off + (sizeof(uint32_t) * start); if (fseek(ncbi->fppin, offset, SEEK_SET) != 0) { ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Error seeking sequence index %d\n", offset); } if (fread(ncbi->seq_indexes, sizeof(uint32_t), cnt, ncbi->fppin) != cnt) { ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Error reading sequence index %d at %d(%d)\n", start, offset, cnt); } if (ncbi->alphatype == eslDNA) { offset = ncbi->amb_off + (sizeof(uint32_t) * start); if (fseek(ncbi->fppin, offset, SEEK_SET) != 0) { ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Error seeking ambiguity index %d\n", offset); } if (fread(ncbi->amb_indexes, sizeof(uint32_t), cnt, ncbi->fppin) != cnt) { ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Error reading ambiguity index %d at %d(%d)\n", start, offset, cnt); } } } ncbi->index = inx; inx -= ncbi->index_start; ncbi->roff = htobe32(ncbi->hdr_indexes[inx]); ncbi->doff = htobe32(ncbi->seq_indexes[inx]); ncbi->hoff = htobe32(ncbi->hdr_indexes[inx+1]); ncbi->eoff = htobe32(ncbi->seq_indexes[inx+1]); if (ncbi->alphatype == eslDNA) { ncbi->seq_apos = htobe32(ncbi->amb_indexes[inx]); ncbi->seq_alen = ncbi->seq_apos + htobe32(ncbi->amb_indexes[inx+1]) + 1; } else { ncbi->seq_apos = 0; ncbi->seq_alen = 0; } if (fseek(ncbi->fpphr, ncbi->roff, SEEK_SET) != 0) return eslESYS; if (fseek(ncbi->fppsq, ncbi->doff, SEEK_SET) != 0) return eslESYS; return eslOK; } /* Function: read_amino() * Synopsis: Read in the amino sequence * Incept: MSF, Wed Jan 27, 2010 [Janelia] * * Purpose: Read and translate the amino acid sequence. */ static int read_amino(ESL_SQFILE *sqfp, ESL_SQ *sq) { int inx; int size; ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; if (ncbi->index >= ncbi->num_seq) return eslEOF; size = sq->eoff - sq->doff; /* figure out the sequence length */ if (esl_sq_GrowTo(sq, size) != eslOK) return eslEMEM; /* figure out if the sequence is in digital mode or not */ if (sq->dsq != NULL) { ESL_DSQ *ptr = sq->dsq + 1; if (fread(ptr, sizeof(char), size, ncbi->fppsq) != size) return eslEFORMAT; for (inx = 0; inx < size - 1; ++inx) { *ptr = sqfp->inmap[(int) *ptr]; ++ptr; } *ptr = eslDSQ_SENTINEL; } else { char *ptr = sq->seq; if (fread(ptr, sizeof(char), size, ncbi->fppsq) != size) return eslEFORMAT; for (inx = 0; inx < size - 1; ++inx) { *ptr = sqfp->inmap[(int) *ptr]; *ptr = ncbi->alphasym[(int) *ptr]; ++ptr; } *ptr = '\0'; } sq->start = 1; sq->end = size - 1; sq->C = 0; sq->W = size - 1; sq->L = size - 1; sq->n = size - 1; return eslOK; } /* Function: read_dna() * Synopsis: Read in the dna sequence * Incept: MSF, Wed Jan 27, 2010 [Janelia] * * Purpose: Read and translate the dna sequence. */ static int read_dna(ESL_SQFILE *sqfp, ESL_SQ *sq) { int64_t inx; int64_t cnt; int64_t off; int size; int text; int status; int amb32; int remainder; int length; int ssize; int n; char *ptr; void *t; unsigned char c; ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; if (ncbi->index >= ncbi->num_seq) return eslEOF; /* calculate the max size of the sequence. It is most likely * a bit smaller, but we need to read the sequence in first * before the real size can be figured out. */ size = sq->eoff - sq->doff; if (ncbi->hdr_alloced < size) { while (ncbi->hdr_alloced < size) ncbi->hdr_alloced += ncbi->hdr_alloced; ESL_RALLOC(ncbi->hdr_buf, t, sizeof(char) * ncbi->hdr_alloced); } if (fread(ncbi->hdr_buf, sizeof(char), size, ncbi->fppsq) != size) return eslEFORMAT; ssize = ncbi->seq_apos - sq->doff - 1; remainder = *(ncbi->hdr_buf + ssize) & 0x03; length = ssize * 4 + remainder; /* figure out the sequence length */ if (esl_sq_GrowTo(sq, length) != eslOK) return eslEMEM; /* figure out if the sequence is in digital mode or not */ if (sq->dsq != NULL) { text = FALSE; ptr = (char *)sq->dsq + 1; } else { text = TRUE; ptr = sq->seq; } for (inx = 0; inx < ssize; ++inx) { c = ncbi->hdr_buf[inx]; n = 1 << ((c >> 6) & 0x03); *ptr = sqfp->inmap[n]; if (text) *ptr = ncbi->alphasym[(int) *ptr]; ++ptr; n = 1 << ((c >> 4) & 0x03); *ptr = sqfp->inmap[n]; if (text) *ptr = ncbi->alphasym[(int) *ptr]; ++ptr; n = 1 << ((c >> 2) & 0x03); *ptr = sqfp->inmap[n]; if (text) *ptr = ncbi->alphasym[(int) *ptr]; ++ptr; n = 1 << ((c >> 0) & 0x03); *ptr = sqfp->inmap[n]; if (text) *ptr = ncbi->alphasym[(int) *ptr]; ++ptr; } /* handle the remainder */ c = ncbi->hdr_buf[inx]; for (inx = 0; inx < remainder; ++inx) { n = 1 << ((c >> (6 - inx * 2)) & 0x03); *ptr = sqfp->inmap[n]; if (text) *ptr = ncbi->alphasym[(int) *ptr]; ++ptr; } *ptr = (text) ? '\0' : eslDSQ_SENTINEL; /* we need to look that the first by the the ambiguity table * to see if the entries are 32 or 64 bit entries. */ amb32 = 0; if (ncbi->seq_apos - sq->doff < size) { amb32 = ((ncbi->hdr_buf[ncbi->seq_apos - sq->doff] & 0x80) == 0); } /* skip past the count and start processing the abmiguity table */ ssize = ncbi->seq_apos - sq->doff + 4; ptr = (text) ? sq->seq : (char *)sq->dsq + 1; while (ssize < size) { /* get the ambiguity character */ n = ((ncbi->hdr_buf[ssize] >> 4) & 0x0f); c = sqfp->inmap[n]; if (text) c = ncbi->alphasym[(int) c]; if (amb32) { /* get the repeat count 4 bits */ cnt = (ncbi->hdr_buf[ssize] & 0x0f); cnt += 1; /* get the offset 24 bits */ off = ncbi->hdr_buf[ssize+1]; off = (off << 8) | ncbi->hdr_buf[ssize+2]; off = (off << 8) | ncbi->hdr_buf[ssize+3]; for (inx = 0; inx < cnt; ++inx) ptr[off+inx] = c; ssize += 4; } else { /* get the repeat count 12 bits */ cnt = (ncbi->hdr_buf[ssize] & 0x0f); cnt = (cnt << 8) | ncbi->hdr_buf[ssize+1]; cnt += 1; /* get the offset 48 bits*/ off = ncbi->hdr_buf[ssize+2]; off = (off << 8) | ncbi->hdr_buf[ssize+3]; off = (off << 8) | ncbi->hdr_buf[ssize+4]; off = (off << 8) | ncbi->hdr_buf[ssize+5]; off = (off << 8) | ncbi->hdr_buf[ssize+6]; off = (off << 8) | ncbi->hdr_buf[ssize+7]; for (inx = 0; inx < cnt; ++inx) ptr[off+inx] = c; ssize += 8; } } sq->start = 1; sq->end = length; sq->C = 0; sq->W = length; sq->L = length; sq->n = length; return eslOK; ERROR: return eslEMEM; } /* Function: read_nres_amino() * Synopsis: Read in the amino sequence * Incept: MSF, Wed Jan 27, 2010 [Janelia] * * Purpose: Read and translate the dna sequence. */ static int read_nres_amino(ESL_SQFILE *sqfp, ESL_SQ *sq, int len, uint64_t *nres) { int inx; int off; int size; char *ptr; ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; if (ncbi->index >= ncbi->num_seq) return eslEOF; /* if we don't know the sequence length, figure it out */ if (ncbi->seq_L == -1) ncbi->seq_L = sq->eoff - sq->doff - 1; /* check if we are at the end */ if (sq->start + sq->n > ncbi->seq_L) { if (nres != NULL) *nres = 0; sq->L = ncbi->seq_L; return eslEOD; } /* figure out if the sequence is in digital mode or not */ ptr = (sq->dsq != NULL) ? (char *)sq->dsq + 1 : sq->seq; ptr += sq->n; /* calculate where to start reading from */ off = sq->doff + sq->start + sq->n - 1; /* calculate the size to read */ size = ncbi->seq_L - (sq->start + sq->n - 1); size = (size > len) ? len : size; /* seek to the windows location and read into the buffer */ if (fseek(ncbi->fppsq, off, SEEK_SET) != 0) return eslESYS; if (fread(ptr, sizeof(char), size, ncbi->fppsq) != size) return eslEFORMAT; /* figure out if the sequence is in digital mode or not */ for (inx = 0; inx < size; ++inx) { *ptr = sqfp->inmap[(int) *ptr]; if (sq->dsq == NULL) *ptr = ncbi->alphasym[(int) *ptr]; ++ptr; } *ptr = (sq->dsq == NULL) ? '\0' : eslDSQ_SENTINEL; sq->n = sq->n + size; if (nres != NULL) *nres = size; return eslOK; } /* Function: correct_ambiguity() * Synopsis: Read in the dna sequence * Incept: MSF, Thu Feb 4, 2010 [Janelia] * * Purpose: Correct any ambiguity characters. */ static int correct_ambiguity(ESL_SQFILE *sqfp, ESL_SQ *sq, int len) { int64_t alen; /* ambiguity length */ int64_t soff; /* starting offset */ int64_t eoff; /* ending offset */ int64_t ainx; /* ambiguity index */ int64_t size; /* size of table read in */ int64_t cnt; /* repeat count */ int64_t off; int64_t n; int amb32; /* flag for 32 or 64 bits */ char *ptr; unsigned char c; ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; if (ncbi->seq_alen == 0) return eslOK; /* go to the start of the ambiguity table and see if the table * is in 32 or 64 bit entries. */ if (fseek(ncbi->fppsq, ncbi->seq_apos, SEEK_SET) != 0) return eslESYS; if (fread(ncbi->hdr_buf, sizeof(char), 4, ncbi->fppsq) != 4) return eslEFORMAT; amb32 = ((ncbi->hdr_buf[0] & 0x80) == 0); ptr = (sq->dsq != NULL) ? (char *)sq->dsq + 1 : sq->seq; ptr += sq->n; /* calculate the starting and ending offsets */ soff = sq->start + sq->n - 1; eoff = soff + len; off = 0; ainx = 0; size = 0; alen = ncbi->seq_alen - 4; while (off < eoff) { /* check if we need to read in more of the abmiguity table */ if (ainx == size) { size = alen; size = (size > INIT_HDR_BUFFER_SIZE) ? INIT_HDR_BUFFER_SIZE : size; if (fread(ncbi->hdr_buf, sizeof(char), size, ncbi->fppsq) != size) return eslEFORMAT; alen -= size; ainx = 0; } /* get the ambiguity character */ n = ((ncbi->hdr_buf[ainx] >> 4) & 0x0f); c = sqfp->inmap[n]; if (sq->dsq == NULL) c = ncbi->alphasym[(int) c]; if (amb32) { /* get the repeat count 4 bits */ cnt = (ncbi->hdr_buf[ainx] & 0x0f); cnt += 1; /* get the offset 24 bits */ off = ncbi->hdr_buf[ainx+1]; off = (off << 8) | ncbi->hdr_buf[ainx+2]; off = (off << 8) | ncbi->hdr_buf[ainx+3]; ainx += 4; } else { /* get the repeat count 12 bits */ cnt = (ncbi->hdr_buf[ainx] & 0x0f); cnt = (cnt << 8) | ncbi->hdr_buf[ainx+1]; cnt += 1; /* get the offset 48 bits*/ off = ncbi->hdr_buf[ainx+2]; off = (off << 8) | ncbi->hdr_buf[ainx+3]; off = (off << 8) | ncbi->hdr_buf[ainx+4]; off = (off << 8) | ncbi->hdr_buf[ainx+5]; off = (off << 8) | ncbi->hdr_buf[ainx+6]; off = (off << 8) | ncbi->hdr_buf[ainx+7]; ainx += 8; } if (off + cnt >= soff && off < eoff) { int inx; int start = (off > soff) ? off - soff : 0; int end = (off + cnt > eoff) ? eoff : off - soff + cnt; for (inx = start; inx < end; ++inx) ptr[inx] = c; } off += cnt; } return eslOK; } /* Function: read_nres_dna() * Synopsis: Read in the dna sequence * Incept: MSF, Wed Jan 27, 2010 [Janelia] * * Purpose: Read and translate the dna sequence. */ static int read_nres_dna(ESL_SQFILE *sqfp, ESL_SQ *sq, int len, uint64_t *nres) { int inx; int off; int cnt; int ncnt; int start; int skip; int text; int status; int remainder; int length; int ssize; int n; char *ptr; void *t; unsigned char c; ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; if (ncbi->index >= ncbi->num_seq) return eslEOF; /* if we don't know the sequence length, figure it out */ if (ncbi->seq_L == -1) { if (fseek(ncbi->fppsq, ncbi->seq_apos - 1, SEEK_SET) != 0) return eslESYS; if (fread(&c, sizeof(char), 1, ncbi->fppsq) != 1) return eslEFORMAT; ssize = ncbi->seq_apos - sq->doff - 1; remainder = c & 0x03; length = ssize * 4 + remainder; ncbi->seq_L = length; } /* check if we are at the end */ if (sq->start + sq->n > ncbi->seq_L) { if (nres != NULL) *nres = 0; sq->L = ncbi->seq_L; return eslEOD; } /* calculate where to start reading from */ start = sq->start + sq->n - 1; off = sq->doff + start / 4; /* calculate bits to skip at the beginning and end */ cnt = ncbi->seq_L - (sq->start + sq->n - 1); cnt = (cnt > len) ? len : cnt; skip = start & 0x03; remainder = skip + cnt; remainder = (remainder & 0x03) ? (remainder & 0x03) : 4; /* calculate bytes need to read in the window */ ssize = (cnt + skip + 3) / 4; /* seek to the windows location and read into the buffer */ if (fseek(ncbi->fppsq, off, SEEK_SET) != 0) return eslESYS; if (ncbi->hdr_alloced < ssize) { while (ncbi->hdr_alloced < ssize) ncbi->hdr_alloced += ncbi->hdr_alloced; ESL_RALLOC(ncbi->hdr_buf, t, sizeof(char) * ncbi->hdr_alloced); } if (fread(ncbi->hdr_buf, sizeof(char), ssize, ncbi->fppsq) != ssize) return eslEFORMAT; /* figure out if the sequence is in digital mode or not */ if (sq->dsq != NULL) { text = FALSE; ptr = (char *)sq->dsq + 1; } else { text = TRUE; ptr = sq->seq; } ptr += sq->n; inx = 0; c = ncbi->hdr_buf[inx]; for (inx = skip; inx < 4; ++inx) { n = 1 << ((c >> (6 - inx * 2)) & 0x03); *ptr = sqfp->inmap[n]; if (text) *ptr = ncbi->alphasym[(int) *ptr]; ++ptr; } for (inx = 1; inx < ssize - 1; ++inx) { c = ncbi->hdr_buf[inx]; n = 1 << ((c >> 6) & 0x03); *ptr = sqfp->inmap[n]; if (text) *ptr = ncbi->alphasym[(int) *ptr]; ++ptr; n = 1 << ((c >> 4) & 0x03); *ptr = sqfp->inmap[n]; if (text) *ptr = ncbi->alphasym[(int) *ptr]; ++ptr; n = 1 << ((c >> 2) & 0x03); *ptr = sqfp->inmap[n]; if (text) *ptr = ncbi->alphasym[(int) *ptr]; ++ptr; n = 1 << ((c >> 0) & 0x03); *ptr = sqfp->inmap[n]; if (text) *ptr = ncbi->alphasym[(int) *ptr]; ++ptr; } /* handle the remainder */ c = ncbi->hdr_buf[inx]; for (inx = 0; inx < remainder; ++inx) { n = 1 << ((c >> (6 - inx * 2)) & 0x03); *ptr = sqfp->inmap[n]; if (text) *ptr = ncbi->alphasym[(int) *ptr]; ++ptr; } *ptr = (text) ? '\0' : eslDSQ_SENTINEL; /* calculate the number of residues processed */ ncnt = (ssize - 1) * 4 + remainder - skip; /* start processing the abmiguity table if there is one */ if (ncbi->seq_alen > 0) { correct_ambiguity(sqfp, sq, ncnt); } sq->n = sq->n + ncnt; if (nres != NULL) *nres = ncnt; return eslOK; ERROR: return eslEMEM; } /* Function: inmap_ncbi() * Synopsis: Set up a translation map * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Initialize the translation map used to translate a ncbi * sequences to the internal representation used in hmmer. * * Returns: on success; * * Throws: on allocation failure; */ static int inmap_ncbi(ESL_SQFILE *sqfp) { int status = eslOK; ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; switch(ncbi->alphatype) { case eslDNA: status = inmap_ncbi_dna(sqfp); break; case eslAMINO: status = inmap_ncbi_amino(sqfp); break; default: ESL_EXCEPTION(eslEINVAL, "bad alphabet type: unrecognized"); } return status; } /* Function: inmap_ncbi_dna() * Synopsis: Set up a translation map * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Initialize the translation map used to translate a ncbi * protein sequence to the internal representation used in * hmmer. * * Returns: on success; * * Throws: on allocation failure; */ static int inmap_ncbi_dna(ESL_SQFILE *sqfp) { int x, y; const char *ncbisym = "-ACMGRSVTWYHKDBN"; ESL_ALPHABET *abc = NULL; ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; if ((abc = esl_alphabet_Create(eslDNA)) == NULL) return eslEMEM; for (x = 0; x < 128; x++) sqfp->inmap[x] = eslDSQ_ILLEGAL; /* for each letter in the ncbi alphabet, find that letter in the * hmmer alphabet and map the translation. */ for (x = 0; x < strlen(ncbisym); ++x) { for (y = 0; y < strlen(abc->sym); ++y) { if (ncbisym[x] == abc->sym[y]) { sqfp->inmap[x] = y; break; } } /* there is a problem if a translation does not exist */ if (y >= strlen(abc->sym)) return eslEFORMAT; } if (ncbi->alphasym == NULL) esl_strdup(abc->sym, -1, &ncbi->alphasym); esl_alphabet_Destroy(abc); return eslOK; } /* Function: inmap_ncbi_amino() * Synopsis: Set up a translation map * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Initialize the translation map used to translate a ncbi * protein sequence to the internal representation used in * hmmer. * * Returns: on success; * * Throws: on allocation failure; */ static int inmap_ncbi_amino(ESL_SQFILE *sqfp) { int x, y; const char *ncbisym = "-ABCDEFGHIKLMNPQRSTVWXYZU*OJ"; ESL_ALPHABET *abc = NULL; ESL_SQNCBI_DATA *ncbi = &sqfp->data.ncbi; if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) return eslEMEM; for (x = 0; x < 128; x++) sqfp->inmap[x] = eslDSQ_ILLEGAL; /* for each letter in the ncbi alphabet, find that letter in the * hmmer alphabet and map the translation. */ for (x = 0; x < strlen(ncbisym); ++x) { for (y = 0; y < strlen(abc->sym); ++y) { if (ncbisym[x] == abc->sym[y]) { sqfp->inmap[x] = y; break; } } /* there is a problem if a translation does not exist */ if (y >= strlen(abc->sym)) return eslEFORMAT; } if (ncbi->alphasym == NULL) esl_strdup(abc->sym, -1, &ncbi->alphasym); esl_alphabet_Destroy(abc); return eslOK; } /***************************************************************** *# 5. Parsing routines *****************************************************************/ /* Function: parse_expect() * Synopsis: Expect the next bytes to parse match * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Match if the next bytes to parse match the bytes * in . If the bytes do not match, throw * error. Advance the parsers pointer. * * Returns: on success * * Throws: if there are insufficient bytes remaining * in the header or if the data to parse does not match * what is expected. */ static int parse_expect(ESL_SQNCBI_DATA *ncbi, void *str, int len) { int size; unsigned char *c; unsigned char *limit; size = ncbi->hoff - ncbi->roff; limit = ncbi->hdr_buf + size; /* verify the buffer has atleast len bytes remaining */ if (ncbi->hdr_ptr + len > limit) { ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Expecting %d bytes at %d : 0x%X(%d)\n", len, (uint32_t) (ncbi->hdr_ptr - ncbi->hdr_buf), ncbi->roff, size); } /* check the buffer matches the token string */ c = (unsigned char *) str; while (len--) { if (*ncbi->hdr_ptr != *c) { ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Expecting 0x%X found 0x%X at %d : 0x%X(%d)\n", *ncbi->hdr_ptr, *c, (uint32_t) (ncbi->hdr_ptr - ncbi->hdr_buf), ncbi->roff, size); } ncbi->hdr_ptr++; c++; } return eslOK; } /* Function: parse_accept() * Synopsis: Check if the next bytes to parse match * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Check if the next bytes to parse match the bytes * in . If the bytes match, they are consumed and the * parsers pointer is advanced. * * Returns: on success * if the bytes to not match. */ static int parse_accept(ESL_SQNCBI_DATA *ncbi, void *str, int len) { int i; int size; unsigned char *c; unsigned char *limit; size = ncbi->hoff - ncbi->roff; limit = ncbi->hdr_buf + size; /* check the buffer matches the token string */ if (ncbi->hdr_ptr + len > limit) return eslEFORMAT; /* verify the buffer matches the token string without advancing * the buffer pointers until we have a complete match. */ c = (unsigned char *) str; for (i = 0; i < len; ++i) { if (ncbi->hdr_ptr[i] != c[i]) return eslEFORMAT; } ncbi->hdr_ptr += len; return eslOK; } /* Function: parse_peek() * Synopsis: Peek at the next byte to parse * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Return the next characer to be parsed without advancing the * parsers pointer. * * Returns: on success * if there are insufficient bytes remaining * in the header. */ static int parse_peek(ESL_SQNCBI_DATA *ncbi, unsigned char *c) { int size; unsigned char *limit; size = ncbi->hoff - ncbi->roff; limit = ncbi->hdr_buf + size; /* verify the buffer has atleast len bytes remaining */ if (ncbi->hdr_ptr + 1 > limit) return eslEFORMAT; *c = *ncbi->hdr_ptr; return eslOK; } /* Function: parse_consume() * Synopsis: Copies bytes from the header * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Copies bytes from the header to the buffer supplied by * if non-null. Adcance the parser pointer. * * Returns: on success * * Throws: if there are insufficient bytes remaining * in the header. */ static int parse_consume(ESL_SQNCBI_DATA *ncbi, void *str, int len) { int i; int size; unsigned char *c; unsigned char *limit; size = ncbi->hoff - ncbi->roff; limit = ncbi->hdr_buf + size; /* verify the buffer has atleast len bytes remaining */ if (ncbi->hdr_ptr + len > limit) { ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Expecting %d bytes at %d : 0x%X(%d)\n", len, (uint32_t) (ncbi->hdr_ptr - ncbi->hdr_buf), ncbi->roff, size); } /* copy the characters in the buffer to */ c = (unsigned char *) str; for (i = 0; i < len; ++i) { if (c != NULL) *c++ = *ncbi->hdr_ptr++; } return eslOK; } /* Function: parse_advance() * Synopsis: Advance the parser pointer * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Advance the parser pointer bytes. * * Returns: on success * * Throws: if there are insufficient bytes remaining * in the header. */ static int parse_advance(ESL_SQNCBI_DATA *ncbi, int len) { int size; unsigned char *limit; size = ncbi->hoff - ncbi->roff; limit = ncbi->hdr_buf + size; /* verify the buffer has atleast len bytes remaining */ if (ncbi->hdr_ptr + len > limit) { ESL_FAIL(eslEFORMAT, ncbi->errbuf, "Expecting %d bytes at %d : 0x%X(%d)\n", len, (uint32_t) (ncbi->hdr_ptr - ncbi->hdr_buf), ncbi->roff, size); } ncbi->hdr_ptr += len; return eslOK; } /* Function: parse_header() * Synopsis: Parse the ncbi db header * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Parse a ncbi database header. This routine implements * a recursive descent parser for the ASN.1 definition of * a blast database header filling in . * * The blast db header can have multiple definitions defined * within it. Only the information from the first usable * defition will be used. * * Returns: on success; the new sequence is stored in . * * Returns if there's a problem with the format, * such as an illegal character. */ static int parse_header(ESL_SQNCBI_DATA *ncbi, ESL_SQ *sq) { int size; int status; void *tmp; unsigned char c; reset_header_values(ncbi); size = ncbi->hoff - ncbi->roff; /* read in the header data */ if (ncbi->hdr_alloced < size) { while (ncbi->hdr_alloced < size) ncbi->hdr_alloced += ncbi->hdr_alloced; ESL_RALLOC(ncbi->hdr_buf, tmp, sizeof(char) * ncbi->hdr_alloced); } if (fread(ncbi->hdr_buf, sizeof(char), size, ncbi->fpphr) != size) return eslEFORMAT; ncbi->hdr_ptr = ncbi->hdr_buf; /* verify we are at the beginning of a structure */ if (parse_expect(ncbi, "\x30\x80", 2) != eslOK) return eslEFORMAT; if (parse_peek(ncbi, &c) != eslOK) return eslEFORMAT; /* parse the different seq id structures */ while (c != 0x00) { if ((status = parse_def_line(ncbi, sq)) != eslOK) return status; if (parse_peek(ncbi, &c) != eslOK) return eslEFORMAT; } /* verify we are at the end of the structure */ if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; return eslOK; ERROR: return eslEMEM; } /* Function: parse_def_line() * Synopsis: Parse the Blast-def-line definition * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Blast-def-line ::= SEQUENCE { * title VisibleString OPTIONAL, -- simple title * seqid SEQUENCE OF Seq-id, -- Regular NCBI Seq-Id * taxid INTEGER OPTIONAL, -- taxonomy id * memberships SEQUENCE OF INTEGER OPTIONAL, -- bit arrays * links SEQUENCE OF INTEGER OPTIONAL, -- bit arrays * other-info SEQUENCE OF INTEGER OPTIONAL -- for future use (probably genomic sequences) * } */ static int parse_def_line(ESL_SQNCBI_DATA *ncbi, ESL_SQ *sq) { int status; int i; int len = 0; int taxid = -1; char *title = NULL; /* verify we are at the beginning of a structure */ if (parse_expect(ncbi, "\x30\x80", 2) != eslOK) return eslEFORMAT; /* look for an optional title */ sq->desc[0] = 0; if (parse_accept(ncbi, "\xa0\x80", 2) == eslOK) { if ((status = parse_string(ncbi, &title, &len)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* look for sequence id structure */ if (parse_expect(ncbi, "\xa1\x80", 2) != eslOK) return eslEFORMAT; if ((status = parse_seq_id(ncbi)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; /* look for an optional taxonomy id */ sq->tax_id = -1; if (parse_accept(ncbi, "\xa2\x80", 2) == eslOK) { if ((status = parse_integer(ncbi, &taxid)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* look for an optional memberships */ if (parse_accept(ncbi, "\xa3\x80", 2) == eslOK) { if ((status = ignore_sequence_of_integer(ncbi)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* look for an optional links */ if (parse_accept(ncbi, "\xa4\x80", 2) == eslOK) { if ((status = ignore_sequence_of_integer(ncbi)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* look for an optional other info */ if (parse_accept(ncbi, "\xa5\x80", 2) == eslOK) { if ((status = ignore_sequence_of_integer(ncbi)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* verify we are at the end of the structure */ if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; /* zero terminate any saved string */ if (ncbi->name_ptr != NULL) ncbi->name_ptr[ncbi->name_size] = '\0'; if (ncbi->acc_ptr != NULL) ncbi->acc_ptr[ncbi->acc_size] = '\0'; if (ncbi->str_id_ptr != NULL) ncbi->str_id_ptr[ncbi->str_id_size] = '\0'; if (title != NULL) title[len] = '\0'; if (ncbi->name_ptr != NULL || ncbi->acc_ptr != NULL) { /* if we have both a name and accession, set both fields. * if we have only one, set the name to that one field. */ if (ncbi->name_ptr != NULL) { esl_sq_SetName(sq, ncbi->name_ptr); if (ncbi->acc_ptr != NULL) { esl_sq_SetAccession(sq, ncbi->acc_ptr); } } else { esl_sq_SetName(sq, ncbi->acc_ptr); } if (title != NULL) esl_sq_SetDesc(sq, title); } else if (ncbi->str_id_ptr != NULL || ncbi->int_id != -1) { /* since we don't have a name or accession, use the id * as the name. */ if (ncbi->str_id_ptr != NULL) { esl_sq_SetName(sq, ncbi->str_id_ptr); } else { char id[32]; sprintf(id, "%d", ncbi->int_id); esl_sq_SetName(sq, id); } if (title != NULL) esl_sq_SetDesc(sq, title); } else if (title != NULL) { /* lastly we don't have anything, so lets just use the * title. take the first word of the title and use that * for the name. the remaining portion of the title will * be used for the description. */ for (i = 0; i < len; ++i) { if (isspace(title[i])) { title[i] = '\0'; break; } } esl_sq_SetName(sq, title); ++i; /* skip over multiple spaces till the next word */ for ( ; i < len; ++i) { if (!isspace(title[i])) break; } if (i < len) esl_sq_SetDesc(sq, title + i); } if (taxid != -1) sq->tax_id = taxid; return eslOK; } /* Function: parse_seq_id() * Synopsis: Parse the Blast-def-line definition * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Seq-id ::= CHOICE { * local Object-id , -- local use * gibbsq INTEGER , -- Geninfo backbone seqid * gibbmt INTEGER , -- Geninfo backbone moltype * giim Giimport-id , -- Geninfo import id * genbank Textseq-id , * embl Textseq-id , * pir Textseq-id , * swissprot Textseq-id , * patent Patent-seq-id , * other Textseq-id , -- for historical reasons, 'other' = 'refseq' * general Dbtag , -- for other databases * gi INTEGER , -- GenInfo Integrated Database * ddbj Textseq-id , -- DDBJ * prf Textseq-id , -- PRF SEQDB * pdb PDB-seq-id , -- PDB sequence * tpg Textseq-id , -- Third Party Annot/Seq GenBank * tpe Textseq-id , -- Third Party Annot/Seq EMBL * tpd Textseq-id , -- Third Party Annot/Seq DDBJ * gpipe Textseq-id , -- Internal NCBI genome pipeline processing ID * named-annot-track Textseq-id -- Internal named annotation tracking ID * } */ static int parse_seq_id(ESL_SQNCBI_DATA *ncbi) { int status; int *id_ptr; unsigned char c; /* verify we are at the beginning of a structure */ if (parse_expect(ncbi, "\x30\x80", 2) != eslOK) return eslEFORMAT; if (parse_consume(ncbi, &c, 1) != eslOK) return eslEFORMAT; /* parse the different seq id structures */ while (c != 0x00) { if (parse_expect(ncbi, "\x80", 1) != eslOK) return eslEFORMAT; switch (c) { case 0xa0: /* LOCAL */ status = parse_object_id(ncbi); break; case 0xa1: /* GIBBSQ */ id_ptr = (ncbi->int_id != -1) ? NULL : &ncbi->int_id; status = parse_integer(ncbi, id_ptr); break; case 0xa2: /* GIBBMT */ status = parse_integer(ncbi, NULL); break; case 0xa3: /* GIIM */ status = parse_giimport_id(ncbi); break; case 0xa4: /* GENBANK */ case 0xa5: /* EMBL */ case 0xa6: /* PIR */ case 0xa7: /* SWISSPROT */ status = parse_textseq_id(ncbi); break; case 0xa8: /* PATENT */ status = parse_patent_seq_id(ncbi); break; case 0xa9: /* OTHER */ status = parse_textseq_id(ncbi); break; case 0xaa: /* GENERAL */ status = parse_dbtag(ncbi); break; case 0xab: /* GI */ status = parse_integer(ncbi, NULL); break; case 0xac: /* DDBJ */ case 0xad: /* PRF */ status = parse_textseq_id(ncbi); break; case 0xae: /* PDB */ status = parse_pdb_seq_id(ncbi); break; case 0xaf: /* TPG */ case 0xb0: /* TPE */ case 0xb1: /* TPD */ case 0xb2: /* GPIPE */ case 0xb3: /* NAMED ANNOT TRACK */ status = parse_textseq_id(ncbi); break; default: status = eslEFORMAT; } if (status != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; if (parse_consume(ncbi, &c, 1) != eslOK) return eslEFORMAT; } /* verify we are at the end of the structure */ if (c != 0x00 || parse_expect(ncbi, "\x00", 1) != eslOK) return eslEFORMAT; return eslOK; } /* Function: parse_textseq_id() * Synopsis: Parse the general text header * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Textseq-id ::= SEQUENCE { * name VisibleString OPTIONAL , * accession VisibleString OPTIONAL , * release VisibleString OPTIONAL , * version INTEGER OPTIONAL * } */ static int parse_textseq_id(ESL_SQNCBI_DATA *ncbi) { char *acc = NULL; int alen = 0; char *name = NULL; int nlen = 0; int status; /* verify we are at the beginning of a structure */ if (parse_expect(ncbi, "\x30\x80", 2) != eslOK) return eslEFORMAT; /* look for an optional name */ if (parse_accept(ncbi, "\xa0\x80", 2) == eslOK) { if ((status = parse_string(ncbi, &name, &nlen)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* look for an optional accession */ if (parse_accept(ncbi, "\xa1\x80", 2) == eslOK) { if ((status = parse_string(ncbi, &acc, &alen)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* look for an optional release */ if (parse_accept(ncbi, "\xa2\x80", 2) == eslOK) { if ((status = parse_string(ncbi, NULL, NULL)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* look for an optional version */ if (parse_accept(ncbi, "\xa3\x80", 2) == eslOK) { if ((status = parse_integer(ncbi, NULL)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* verify we are at the end of the structure */ if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; /* if we found both the accession and name and so far * we have only come across incomplete headers, save * this one off. */ if (acc != NULL && name != NULL) { if (ncbi->name_ptr == NULL || ncbi->acc_ptr == NULL) { ncbi->name_ptr = name; ncbi->name_size = nlen; ncbi->acc_ptr = acc; ncbi->acc_size = alen; } } else if (ncbi->name_ptr == NULL && ncbi->acc_ptr == NULL) { /* if neither the accession or name have been set, and the * header supplied one, save it off. */ if (acc != NULL) { ncbi->acc_ptr = acc; ncbi->acc_size = alen; } if (name != NULL) { ncbi->name_ptr = name; ncbi->name_size = nlen; } } return eslOK; } /* Function: parse_dbtag() * Synopsis: Parse the a general db tag * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Dbtag ::= SEQUENCE { * db VisibleString , -- name of database or system * tag Object-id -- appropriate tag * } */ static int parse_dbtag(ESL_SQNCBI_DATA *ncbi) { int status; int temp_id; /* verify we are at the beginning of a structure */ if (parse_expect(ncbi, "\x30\x80", 2) != eslOK) return eslEFORMAT; /* look for an db name */ if (parse_expect(ncbi, "\xa0\x80", 2) != eslOK) return eslEFORMAT; if ((status = parse_string(ncbi, 0, NULL)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; /* it looks like the dbtag is used when formatdb is run * without parsing sequence ids (ie -o F). if that is * the case, the id is equal to the sequence number in * the database. so for dbtag headers, nothing will be * saved. to do this lets create a bogus id value and * restore it after dbtag is parsed. */ temp_id = ncbi->int_id; ncbi->int_id = 1; /* look for a tag object */ if (parse_expect(ncbi, "\xa1\x80", 2) != eslOK) return eslEFORMAT; if ((status = parse_object_id(ncbi)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; /* restore the id value */ ncbi->int_id = temp_id; /* verify we are at the end of the structure */ if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; return eslOK; } /* Function: parse_giimport_id() * Synopsis: Parse the a giimport id * Incept: MSF, Thu Mar 25, 2010 [Janelia] * * Giimport-id ::= SEQUENCE { * id INTEGER, -- the id to use here * db VisibleString OPTIONAL, -- dbase used in * release VisibleString OPTIONAL } -- the release * } */ static int parse_giimport_id(ESL_SQNCBI_DATA *ncbi) { int status; int id; /* verify we are at the beginning of a structure */ if (parse_expect(ncbi, "\x30\x80", 2) != eslOK) return eslEFORMAT; /* look for an id */ if (parse_expect(ncbi, "\xa0\x80", 2) != eslOK) return eslEFORMAT; if ((status = parse_integer(ncbi, &id)) != eslOK) return status; /* look for an optional database */ if (parse_accept(ncbi, "\xa1\x80", 2) == eslOK) { if ((status = parse_string(ncbi, NULL, NULL)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* look for an optional release */ if (parse_accept(ncbi, "\xa2\x80", 2) == eslOK) { if ((status = parse_string(ncbi, NULL, NULL)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* verify we are at the end of the structure */ if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; /* if there is not already a saved seq id, save it */ if (ncbi->int_id == -1 && ncbi->str_id_ptr == NULL) { ncbi->int_id = id; } return eslOK; } /* Function: parse_patent_seq_id() * Synopsis: Parse the patent header * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Patent-seq-id ::= SEQUENCE { * seqid INTEGER , -- number of sequence in patent * cit Id-pat -- patent citation * } */ static int parse_patent_seq_id(ESL_SQNCBI_DATA *ncbi) { int status; int id; /* verify we are at the beginning of a structure */ if (parse_expect(ncbi, "\x30\x80", 2) != eslOK) return eslEFORMAT; /* look for a seqid */ if (parse_expect(ncbi, "\xa0\x80", 2) != eslOK) return eslEFORMAT; if ((status = parse_integer(ncbi, &id)) != eslOK) return status; /* look for a patent citation object */ if (parse_expect(ncbi, "\xa1\x80", 2) != eslOK) return eslEFORMAT; if ((status = parse_id_pat(ncbi)) != eslOK) return status; /* verify we are at the end of the structure */ if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; /* if there is not already a saved seq id, save it */ if (ncbi->int_id == -1 && ncbi->str_id_ptr == NULL) { ncbi->int_id = id; } return eslOK; } /* Function: parse_id_pat() * Synopsis: Parse the patent citation * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Id-pat ::= SEQUENCE { -- just to identify a patent * country VisibleString , -- Patent Document Country * id CHOICE { * number VisibleString , -- Patent Document Number * app-number VisibleString -- Patent Doc Appl Number * } , * doc-type VisibleString OPTIONAL -- Patent Doc Type * } */ static int parse_id_pat(ESL_SQNCBI_DATA *ncbi) { int status; /* verify we are at the beginning of a structure */ if (parse_expect(ncbi, "\x30\x80", 2) != eslOK) return eslEFORMAT; /* look for a country */ if (parse_expect(ncbi, "\xa0\x80", 2) != eslOK) return eslEFORMAT; if ((status = parse_string(ncbi, NULL, NULL)) != eslOK) return status; /* look for an id */ if (parse_expect(ncbi, "\xa1\x80", 2) != eslOK) return eslEFORMAT; /* the id is a choice of two strings */ /* verify we are at the beginning of a structure */ if (parse_expect(ncbi, "\x30\x80", 2) != eslOK) return eslEFORMAT; /* look for an optional taxonomy id */ if (parse_accept(ncbi, "\xa0\x80", 2) == eslOK) { status = parse_string(ncbi, NULL, NULL); } else if (parse_accept(ncbi, "\xa1\x80", 2) == eslOK) { status = parse_string(ncbi, NULL, NULL); } else { status = eslEFORMAT; } if (status != eslOK) return status; /* verify we are at the end of the structure */ if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; /* look for a doc type */ if (parse_accept(ncbi, "\xa3\x80", 2) == eslOK) { if ((status = parse_string(ncbi, NULL, NULL)) != eslOK) return eslEFORMAT; } /* verify we are at the end of the structure */ if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; return eslOK; } /* Function: parse_object_id() * Synopsis: Parse a generic sequence id * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Object-id ::= CHOICE { * id INTEGER , * str VisibleString * } */ static int parse_object_id(ESL_SQNCBI_DATA *ncbi) { int status; char *id_str = NULL; int id_len = 0; int id = -1; /* look for an optional taxonomy id */ if (parse_accept(ncbi, "\xa0\x80", 2) == eslOK) { status = parse_integer(ncbi, &id); } else if (parse_accept(ncbi, "\xa1\x80", 2) == eslOK) { status = parse_string(ncbi, &id_str, &id_len); } else { status = eslEFORMAT; } /* verify we are at the end of the structure */ if (status == eslOK) { status = parse_expect(ncbi, "\x00\x00", 2); /* if there is not already a saved seq id, save it */ if (ncbi->int_id == -1 && ncbi->str_id_ptr == NULL) { if (id_str != NULL) { ncbi->str_id_ptr = id_str; ncbi->str_id_size = id_len; } else if (id != -1) { ncbi->int_id = id; } } } return status; } /* Function: parse_pdb_seq_id() * Synopsis: Parse a PDB sequence * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * PDB-seq-id ::= SEQUENCE { * mol PDB-mol-id , -- the molecule name * chain INTEGER , -- a single ASCII character, chain id * rel Date OPTIONAL } -- release date, month and year * * Date ::= CHOICE { * str VisibleString , -- for those unparsed dates * std Date-std -- use this if you can * } */ static int parse_pdb_seq_id(ESL_SQNCBI_DATA *ncbi) { int status; char *id; int len; /* verify we are at the beginning of a structure */ if (parse_expect(ncbi, "\x30\x80", 2) != eslOK) return eslEFORMAT; /* look for an pdb mol id */ if (parse_expect(ncbi, "\xa0\x80", 2) != eslOK) return eslEFORMAT; if ((status = parse_string(ncbi, &id, &len)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; /* look for chain */ if (parse_accept(ncbi, "\xa1\x80", 2) == eslOK) { if ((status = parse_integer(ncbi, NULL)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* look for an optional date */ if (parse_accept(ncbi, "\xa2\x80", 2) == eslOK) { if (parse_accept(ncbi, "\xa0\x80", 2) == eslOK) { status = parse_string(ncbi, NULL, NULL); } else if (parse_accept(ncbi, "\xa1\x80", 2) == eslOK) { status = parse_date_std(ncbi); } else { status = eslEFORMAT; } if (status != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* if there is not already a saved seq id, save it */ if (ncbi->int_id == -1 && ncbi->str_id_ptr == NULL) { ncbi->str_id_ptr = id; ncbi->str_id_size = len; } /* verify we are at the end of the structure */ if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; return eslOK; } /* Function: parse_date_std() * Synopsis: Parse the data structure * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Date-std ::= SEQUENCE { -- NOTE: this is NOT a unix tm struct * year INTEGER , -- full year (including 1900) * month INTEGER OPTIONAL , -- month (1-12) * day INTEGER OPTIONAL , -- day of month (1-31) * season VisibleString OPTIONAL , -- for "spring", "may-june", etc * hour INTEGER OPTIONAL , -- hour of day (0-23) * minute INTEGER OPTIONAL , -- minute of hour (0-59) * second INTEGER OPTIONAL -- second of minute (0-59) * } */ static int parse_date_std(ESL_SQNCBI_DATA *ncbi) { int status; /* verify we are at the beginning of a structure */ if (parse_expect(ncbi, "\x30\x80", 2) != eslOK) return eslEFORMAT; /* look for a year */ if (parse_expect(ncbi, "\xa0\x80", 2) != eslOK) return eslEFORMAT; if ((status = parse_integer(ncbi, NULL)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; /* look for an optional month */ if (parse_accept(ncbi, "\xa1\x80", 2) == eslOK) { if ((status = parse_integer(ncbi, NULL)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* look for an optional day */ if (parse_accept(ncbi, "\xa2\x80", 2) == eslOK) { if ((status = parse_integer(ncbi, NULL)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* look for an optional season */ if (parse_accept(ncbi, "\xa3\x80", 2) == eslOK) { if ((status = parse_string(ncbi, NULL, NULL)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* look for an optional hour */ if (parse_accept(ncbi, "\xa4\x80", 2) == eslOK) { if ((status = parse_integer(ncbi, NULL)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* look for an optional minute */ if (parse_accept(ncbi, "\xa5\x80", 2) == eslOK) { if ((status = parse_integer(ncbi, NULL)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* look for an optional second */ if (parse_accept(ncbi, "\xa6\x80", 2) == eslOK) { if ((status = parse_integer(ncbi, NULL)) != eslOK) return status; if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; } /* verify we are at the end of the structure */ if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; return eslOK; } /* Function: parse_string() * Synopsis: Parse a visible string * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Parses a string from the header stream. * * If is non null, the location of the string in * the header will be saved. If is non null, the * length of the string will be filled in. If is * non null, then must be non null since the strings * are not zero terminated. * * Returns: on success. * if there's a problem with the format. * if is non null and is null. * */ static int parse_string(ESL_SQNCBI_DATA *ncbi, char **str, int *len) { int n; unsigned char x; unsigned char c; unsigned char *ptr; if (parse_expect(ncbi, "\x1a", 1) != eslOK) return eslEFORMAT; /* the next byte is the length of the string. if the length is * less than 128, then this is the true length; otherwise this * length describes the number of bytes necessary to hold the * true length of the string in the lower 7 bits. */ if (parse_consume(ncbi, &c, 1) != eslOK) return eslEFORMAT; if (c < 128) { n = c; } else { c = c & 0x7f; if (c > sizeof(n)) return eslEFORMAT; n = 0; while (c > 0) { if (parse_consume(ncbi, &x, 1) != eslOK) return eslEFORMAT; n = (n << 8) + (unsigned int) x; --c; } } /* validate the length of the string */ ptr = ncbi->hdr_ptr; if (parse_advance(ncbi, n) != eslOK) return eslEFORMAT; /* fill in the values */ if (str != NULL && len == NULL) return eslEINCOMPAT; if (len != NULL) *len = n; if (str != NULL) *str = (char *)ptr; return eslOK; } /* Function: parse_integer() * Synopsis: Parse an integer * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Reads an integer from the header stream. If the integer is * more bytes than the native int format, the most significant * bytes will be lost. * * If is non null, the parsed integer will be placed * in the pointer. * * Returns: on success. * if there's a problem with the format. * */ static int parse_integer(ESL_SQNCBI_DATA *ncbi, int *value) { int n; unsigned char c; unsigned char *ptr; if (parse_expect(ncbi, "\x02", 1) != eslOK) return eslEFORMAT; /* get the length of the integer */ if (parse_peek(ncbi, &c) != eslOK) return eslEFORMAT; ptr = ncbi->hdr_ptr + 1; /* advance past the integer to make sure the buffer holds all * of the integer. the pointer points the the start of * the integer. */ if (parse_advance(ncbi, c + 1) != eslOK) return eslEFORMAT; n = 0; while (c > 0) { n = (n << 8) + (unsigned int) *ptr++; --c; } if (value != NULL) *value = n; return eslOK; } /* Function: ignore_sequence_of_integer() * Synopsis: Skip over the sequence of integers * Incept: MSF, Mon Dec 10, 2009 [Janelia] * * Purpose: Skip over a sequence of integers. * * Returns: on success. * if there's a problem with the format. * */ static int ignore_sequence_of_integer(ESL_SQNCBI_DATA *ncbi) { int status; unsigned char c; /* verify we are at the beginning of a structure */ if (parse_expect(ncbi, "\x30\x80", 2) != eslOK) return eslEFORMAT; if (parse_peek(ncbi, &c) != eslOK) return eslEFORMAT; while (c == 0x02) { if ((status = parse_integer(ncbi, NULL)) != eslOK) return status; if (parse_peek(ncbi, &c) != eslOK) return eslEFORMAT; } /* verify we are at the end of the structure */ if (parse_expect(ncbi, "\x00\x00", 2) != eslOK) return eslEFORMAT; return eslOK; } /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_sqio_ncbi.c 863 2013-04-18 13:40:02Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_sqio_ncbi.c $ *****************************************************************/ hmmer-3.1b2/easel/easel.h0000664361611702660230000004417412473612605014636 0ustar wheelerteddy/* Easel's foundation. * * Core functionality of easel: errors, memory allocations, constants, * and configuration for portability. * * Contents: * 1. Macros implementing Easel error handling conventions * 2. Macros implementing Easel memory allocation conventions * 3. Macros implementing Easel function argument conventions * 4. Macros implementing Easel debugging output conventions * 5. Defined constants * 6. Basic support for Easel digitized biosequences * 7. Miscellaneous * 8. Void declarations of missing augmentations * 9. API declarations of easel.c * 10. Copyright and license. */ #ifndef eslEASEL_INCLUDED #define eslEASEL_INCLUDED #include "esl_config.h" #include #include /* for FILE */ #include /* for va_list */ #include /* for HUGE_VAL */ #ifdef HAVE_STDINT_H #include /* for uint32_t and the like (C99) */ #endif #ifdef HAVE_INTTYPES_H #include /* some systems allegedly put uints here */ #endif /***************************************************************** * 1. Macros implementing Easel's error handling conventions *****************************************************************/ /* Many objects contain a fixed length "errbuf" for failure * diagnostics: ESL_FAIL() and ESL_XFAIL() fill this buffer. */ #define eslERRBUFSIZE 128 /* ESL_FAIL() - return an error message, without cleanup. * ESL_XFAIL() - return an error message, with cleanup. * ESL_EXCEPTION() - throwing an exception, without cleanup. * ESL_XEXCEPTION() - throwing an exception, with cleanup. * * The X versions (with cleanup) require the caller to have an * variable and a goto target in scope. * * Wrapping these macros in loops allows a statement: * if (something) ESL_XEXCEPTION(code,mesg); * without the trailing semicolon becoming a null statement after * macro expansion. */ /*::cexcerpt::error_macros::begin::*/ #define ESL_FAIL(code, errbuf, ...) do { \ if (errbuf != NULL) snprintf(errbuf, eslERRBUFSIZE, __VA_ARGS__); \ return code; } \ while (0) #define ESL_XFAIL(code, errbuf, ...) do { \ status = code; \ if (errbuf != NULL) snprintf(errbuf, eslERRBUFSIZE, __VA_ARGS__); \ goto ERROR; } \ while (0) #define ESL_EXCEPTION(code, ...) do { \ esl_exception(code, FALSE, __FILE__, __LINE__, __VA_ARGS__); \ return code; } \ while (0) #define ESL_XEXCEPTION(code, ...) do { \ status = code; \ esl_exception(code, FALSE, __FILE__, __LINE__, __VA_ARGS__); \ goto ERROR; } \ while (0) #define ESL_EXCEPTION_SYS(code, ...) do { \ esl_exception(code, TRUE, __FILE__, __LINE__, __VA_ARGS__); \ return code; } \ while (0) #define ESL_XEXCEPTION_SYS(code, ...) do { \ status = code; \ esl_exception(code, TRUE, __FILE__, __LINE__, __VA_ARGS__); \ goto ERROR; } \ while (0) /*::cexcerpt::error_macros::end::*/ /* Return codes for error handler */ /*::cexcerpt::statuscodes::begin::*/ #define eslOK 0 /* no error/success */ #define eslFAIL 1 /* failure */ #define eslEOL 2 /* end-of-line (often normal) */ #define eslEOF 3 /* end-of-file (often normal) */ #define eslEOD 4 /* end-of-data (often normal) */ #define eslEMEM 5 /* malloc or realloc failed */ #define eslENOTFOUND 6 /* file or key not found */ #define eslEFORMAT 7 /* file format not correct */ #define eslEAMBIGUOUS 8 /* an ambiguity of some sort */ #define eslEDIVZERO 9 /* attempted div by zero */ #define eslEINCOMPAT 10 /* incompatible parameters */ #define eslEINVAL 11 /* invalid argument/parameter */ #define eslESYS 12 /* generic system call failure */ #define eslECORRUPT 13 /* unexpected data corruption */ #define eslEINCONCEIVABLE 14 /* "can't happen" error */ #define eslESYNTAX 15 /* invalid user input syntax */ #define eslERANGE 16 /* value out of allowed range */ #define eslEDUP 17 /* saw a duplicate of something */ #define eslENOHALT 18 /* a failure to converge */ #define eslENORESULT 19 /* no result was obtained */ #define eslENODATA 20 /* no data provided, file empty */ #define eslETYPE 21 /* invalid type of argument */ #define eslEOVERWRITE 22 /* attempted to overwrite data */ #define eslENOSPACE 23 /* ran out of some resource */ #define eslEUNIMPLEMENTED 24 /* feature is unimplemented */ #define eslENOFORMAT 25 /* couldn't guess file format */ #define eslENOALPHABET 26 /* couldn't guess seq alphabet */ #define eslEWRITE 27 /* write failed (fprintf, etc) */ #define eslEINACCURATE 28 /* return val may be inaccurate */ /*::cexcerpt::statuscodes::end::*/ /***************************************************************** * 2. Macros implementing Easel's memory allocation conventions *****************************************************************/ /* ESL_ALLOC(), ESL_RALLOC(): * * Allocation and reallocation wrappers. * Both require in scope, and goto target. * ESL_RALLOC() also requires ptr to be provided as . * * ESL_REALLOC() is a newer version of ESL_RALLOC() which doesn't * need a tmp ptr. All ESL_RALLOC() calls can be safely converted * to ESL_REALLOC() calls. */ /*::cexcerpt::alloc_macros::begin::*/ #define ESL_ALLOC(p, size) do {\ if (((p) = malloc(size)) == NULL && (size)) { \ status = eslEMEM;\ esl_exception(eslEMEM, FALSE, __FILE__, __LINE__, "malloc of size %d failed", size); \ goto ERROR;\ }} while (0) #define ESL_RALLOC(p, tmp, newsize) do {\ if ((p) == NULL) { (tmp) = malloc(newsize); }\ else { (tmp) = realloc((p), (newsize)); }\ if ((tmp) != NULL) (p) = (tmp);\ else {\ status = eslEMEM;\ esl_exception(eslEMEM, FALSE, __FILE__, __LINE__, "realloc for size %d failed", newsize); \ goto ERROR;\ }} while (0) #define ESL_REALLOC(p, newsize) do {\ void *esltmpp;\ if ((p) == NULL) { (esltmpp) = malloc(newsize); }\ else { (esltmpp) = realloc((p), (newsize)); }\ if ((esltmpp) != NULL) (p) = (esltmpp);\ else {\ status = eslEMEM;\ esl_exception(eslEMEM, FALSE, __FILE__, __LINE__, "realloc for size %d failed", newsize); \ goto ERROR;\ }} while (0) /*::cexcerpt::alloc_macros::end::*/ /* Convert MB,GB,TB to bytes, using binary definitions (2^20, 2^30, 2^40) * More pedantically: mebibytes (MiB), gibibytes (GiB), tebibytes (TiB). */ #define ESL_MBYTES(x) ((x) * 1048576) #define ESL_GBYTES(x) ((x) * 1024 * 1048576) #define ESL_TBYTES(x) ((x) * 1024 * 1024 * 1048576) /* Round integer up to the nearest multiple of . * Particularly useful when dealing w/ memory alignment issues. */ #define ESL_UPROUND(n, m) ( ((n) + (m)-1) / (m) * (m)) /***************************************************************** * 3. Macros implementing Easel's function argument conventions *****************************************************************/ #define esl_byp_IsInternal(p) ((p) == NULL) #define esl_byp_IsReturned(p) ((p) != NULL && (*p) == NULL) #define esl_byp_IsProvided(p) ((p) != NULL && (*p) != NULL) /* Sometimes a shared function API dictates arguments that a function * doesn't use, and we want to silence compiler warnings about this. * Putting ESL_UNUSED(x) in the function, for an unused argument , * should silence the compiler, and should generate a no-op. */ #define ESL_UNUSED(x) (void)(sizeof((x))) /***************************************************************** * 4. Macros implementing Easel's debugging output conventions *****************************************************************/ /* Debugging hooks, w/ three levels (1-3). */ #if eslDEBUGLEVEL >= 1 /* for ESL_DASSERT() macros */ #include #endif #if (eslDEBUGLEVEL >= 1) #define ESL_DPRINTF1(x) printf x #define ESL_DASSERT1(x) assert x #else #define ESL_DPRINTF1(x) #define ESL_DASSERT1(x) #endif #if (eslDEBUGLEVEL >= 2) #define ESL_DPRINTF2(x) printf x #define ESL_DASSERT2(x) assert x #else #define ESL_DPRINTF2(x) #define ESL_DASSERT2(x) #endif #if (eslDEBUGLEVEL >= 3) #define ESL_DPRINTF3(x) printf x #define ESL_DASSERT3(x) assert x #else #define ESL_DPRINTF3(x) #define ESL_DASSERT3(x) #endif /***************************************************************** * 5. Defined constants *****************************************************************/ /* Making sure TRUE/FALSE are defined, for convenience */ #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif /* Some basic mathematical constants. * Assuming IEEE754 math with 64-bit doubles (53-bit mantissas), we * want 17 significant decimal digits in our constants. More is * a waste (but we do it for some anyway). */ #define eslCONST_E 2.71828182845904523536028747135 #define eslCONST_PI 3.14159265358979323846264338328 #define eslCONST_EULER 0.57721566490153286060651209008 #define eslCONST_GOLD 1.61803398874989484820458683437 #define eslCONST_LOG2 0.69314718055994529 #define eslCONST_LOG2R 1.44269504088896341 /* Define , portably. * ANSI C99 makes it easy (at last!). The failovers to other pre-C99 * methods are legacy now that we require a C99 compiler - but no harm * leaving them in Just In Case. */ #if defined (INFINITY) #define eslINFINITY INFINITY /* C99 */ #elif defined (HUGE_VAL) #define eslINFINITY HUGE_VAL /* assume IEEE754 HUGE_VAL = infinity. ok? */ #else #define eslINFINITY (1.0/0.0) /* portable? */ #endif #if defined (NAN) #define eslNaN NAN /* C99 */ #else #define eslNaN (eslINFINITY/eslINFINITY) /* portably make a IEEE754 NaN */ #endif /* Define crossovers for numerical approximations. */ /* log(1+x) ~ x and 1-e^x = -x approximation. * Same threshold appears to be optimal for float or double x. xref STL9/138. */ #define eslSMALLX1 5e-9 /***************************************************************** * 6. Basic support for Easel's digitized biosequences. *****************************************************************/ /* Most of this support is in the alphabet module, but we externalize * some into the easel foundation because ESL_INMAP is used in unaugmented * sqio, msa modules. * * A digital sequence residue (ESL_DSQ) is an unsigned 8-bit type * (0..255). A valid digital residue has a value in the range 0..127 * (Easel can represent alphabets of up to 128 different characters). * Values 128..255 are reserved for flags. * * An "inmap" is ESL_DSQ[128], or *ESL_DSQ allocated for 128 values; * it is a many-to-one construct for mapping 7-bit ASCII chars (in * range 0..127) either to new ASCII chars (in the case of raw * sequence input in sqio, msa) or to digital codes (in the alphabet * module). Valid mapped values are 0..127; any value in range * 128..255 is some kind of flag. */ typedef uint8_t ESL_DSQ; #define eslDSQ_SENTINEL 255 /* sentinel bytes 0,L+1 in a dsq */ #define eslDSQ_ILLEGAL 254 /* input symbol is unmapped and unexpected */ #define eslDSQ_IGNORED 253 /* input symbol is unmapped and ignored */ #define eslDSQ_EOL 252 /* input symbol marks end of a line */ #define eslDSQ_EOD 251 /* input symbol marks end of a seq record */ /* If you try to test sym > 0 && sym <= 127 below, instead of isascii(sym), * you'll get a compiler warning for an always-successful test regardless * of whether a char is signed or unsigned. So we trust that isascii() is * doing the Right Thing. */ #define esl_inmap_IsValid(inmap, sym) (isascii(sym) && (inmap)[(int)sym] <= 127) /***************************************************************** * 7. Miscellaneous. *****************************************************************/ /* A placeholder for helping w/ portability of filenames/paths. * I think, but have not tested, that: * VMS: #define DIRSLASH ']' * ancient MacOS: #define DIRSLASH ':' * DOS: #define DIRSLASH '\\' * Setting DIRSLASH correctly is probably not the only thing * that would need to be done to port to other OS's, but it's * probably a start. * * The code assumes that '.' is used for file name extensions, * such as "foo.bar". * * This gets used in easel.c's *_File*() functions. */ #define eslDIRSLASH '/' /* UNIX directory paths have /foo/bar */ /* Some generic macros for swapping, min, and max. */ #define ESL_SWAP(x, y, type) do { type esltmpxyz = (x); (x) = (y); (y) = esltmpxyz; } while (0) #define ESL_MIN(a,b) (((a)<(b))?(a):(b)) #define ESL_MAX(a,b) (((a)>(b))?(a):(b)) static inline float esl_log (double x) { return (x == 0.0 ? -eslINFINITY : log(x)); } /* avoid fp exceptions; log(0) = -inf is fine */ static inline float esl_logf(float x) { return (x == 0.0 ? -eslINFINITY : logf(x)); } static inline float esl_log2f(float x) { return (x == 0.0 ? -eslINFINITY : eslCONST_LOG2R * logf(x)); } /* Typedef: * * is a signed integer type suitable for safe casting * to EITHER an or on this system (i.e. as a position * in memory or in a file on disk), where we may use a -1 as a flag * (or even other negative numbers). * * is for use for anything having to do with positions in * large buffers, strings, or files, where we want strict control * of integer range limits. * * Note that POSIX requires size_t to be unsigned, and off_t to be * signed. */ typedef int64_t esl_pos_t; /***************************************************************** * 8. Void declarations of missing augmentations *****************************************************************/ #ifndef eslAUGMENT_ALPHABET typedef void ESL_ALPHABET; #endif #ifndef eslAUGMENT_KEYHASH typedef void ESL_KEYHASH; #endif /***************************************************************** * 9. The API declarations for easel.c *****************************************************************/ /* 1. Error handling. */ typedef void (*esl_exception_handler_f)(int errcode, int use_errno, char *sourcefile, int sourceline, char *format, va_list argp); extern void esl_exception(int errcode, int use_errno, char *sourcefile, int sourceline, char *format, ...); extern void esl_exception_SetHandler(esl_exception_handler_f); extern void esl_exception_ResetDefaultHandler(void); extern void esl_nonfatal_handler(int errcode, int use_errno, char *sourcefile, int sourceline, char *format, va_list argp); extern void esl_fatal(const char *format, ...); /* 2. Memory allocation/deallocation conventions. */ extern void esl_Free2D(void **p, int dim1); extern void esl_Free3D(void ***p, int dim1, int dim2); /* 3. Standard banner for Easel miniapplications. */ extern int esl_banner(FILE *fp, char *progname, char *banner); extern int esl_usage (FILE *fp, char *progname, char *usage); /* 4. Improved replacements for some C library functions */ extern int esl_fgets(char **buf, int *n, FILE *fp); extern int esl_strdup(const char *s, int64_t n, char **ret_dup); extern int esl_strcat(char **dest, int64_t ldest, const char *src, int64_t lsrc); extern int esl_strmapcat (const ESL_DSQ *inmap, char **dest, int64_t *ldest, const char *src, esl_pos_t lsrc); extern int esl_strmapcat_noalloc(const ESL_DSQ *inmap, char *dest, int64_t *ldest, const char *src, esl_pos_t lsrc); extern int esl_strtok (char **s, char *delim, char **ret_tok); extern int esl_strtok_adv(char **s, char *delim, char **ret_tok, int *opt_toklen, char *opt_endchar); extern int esl_sprintf (char **ret_s, const char *format, ...); extern int esl_vsprintf(char **ret_s, const char *format, va_list *ap); extern int esl_strcmp(const char *s1, const char *s2); /* 5. Portable drop-in replacements for non-standard C functions */ #ifndef HAVE_STRCASECMP #ifdef _MSC_VER #define strcasecmp stricmp #else extern int esl_strcasecmp(const char *s1, const char *s2); #define strcasecmp esl_strcasecmp #endif #endif /* 6. Additional string functions, esl_str*() */ extern int esl_strchop(char *s, int64_t n); extern int esl_strdealign(char *s, const char *aseq, const char *gapchars, int64_t *opt_rlen); extern int esl_str_IsBlank(char *s); extern int esl_str_IsInteger(char *s); extern int esl_str_IsReal(char *s); extern int64_t esl_str_GetMaxWidth(char **s, int n); /* 7. File path/name manipulation functions, including tmpfiles */ extern int esl_FileExists(const char *filename); extern int esl_FileTail(const char *path, int nosuffix, char **ret_file); extern int esl_file_Extension(char *filename, esl_pos_t n_ignore, char **ret_sfx, esl_pos_t *ret_n); extern int esl_FileConcat(const char *dir, const char *file, char **ret_path); extern int esl_FileNewSuffix(const char *filename, const char *sfx, char **ret_newpath); extern int esl_FileEnvOpen(const char *fname, const char *env, FILE **ret_fp, char **ret_path); extern int esl_tmpfile(char *basename6X, FILE **ret_fp); extern int esl_tmpfile_named(char *basename6X, FILE **ret_fp); extern int esl_getcwd(char **ret_cwd); /* 8. Typed comparison routines. */ extern int esl_DCompare (double a, double b, double tol); extern int esl_FCompare (float a, float b, float tol); extern int esl_DCompareAbs(double a, double b, double tol); extern int esl_FCompareAbs(float a, float b, float tol); extern int esl_CCompare(char *s1, char *s2); #endif /*eslEASEL_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: easel.h 887 2013-09-24 09:41:22Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/easel.h $ *****************************************************************/ hmmer-3.1b2/easel/esl_threads.h0000664361611702660230000000416712473612610016034 0ustar wheelerteddy/* Simple master/worker data parallelization using POSIX threads. * * SVN $Id: esl_threads.h 753 2012-03-09 04:09:05Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_threads.h $ */ #ifndef eslTHREADS_INCLUDED #define eslTHREADS_INCLUDED #include typedef struct { int threadCount; /* number of active worker threads */ pthread_t *threadId; /* threadId for each worker thread; [0..threadCount-1] */ void **data; /* data pointer for each worker thread; [0..threadCount-1] */ int startThread; /* number of worker threads currently blocked at start mutex */ pthread_mutex_t startMutex; /* the starting gate */ pthread_cond_t startCond; /* the signal that workers are synchronized and may start */ void (*func)(void *); /* each worker thread runs this function; arg is to data[] */ } ESL_THREADS; extern ESL_THREADS *esl_threads_Create(void (*func)(void *)); extern void esl_threads_Destroy(ESL_THREADS *obj); extern int esl_threads_AddThread (ESL_THREADS *obj, void *data); extern int esl_threads_GetWorkerCount(ESL_THREADS *obj); extern int esl_threads_WaitForStart (ESL_THREADS *obj); extern int esl_threads_WaitForFinish (ESL_THREADS *obj); extern int esl_threads_Started (ESL_THREADS *obj, int *ret_workeridx); extern void *esl_threads_GetData (ESL_THREADS *obj, int workeridx); extern int esl_threads_Finished(ESL_THREADS *obj, int workeridx); extern int esl_threads_CPUCount(int *ret_ncpu); #endif /*eslTHREADS_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_ratematrix.h0000664361611702660230000000334712473612607016567 0ustar wheelerteddy/* Routines for manipulating evolutionary rate matrices. * * SRE, Tue Jul 13 16:09:05 2004 [St. Louis] * SVN $Id: esl_ratematrix.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_ratematrix.h $ */ #ifndef eslRATEMATRIX_INCLUDED #define eslRATEMATRIX_INCLUDED /* 1. Setting standard rate matrix models. */ extern int esl_rmx_SetWAG(ESL_DMATRIX *Q, double *pi); extern int esl_rmx_SetJukesCantor(ESL_DMATRIX *Q); extern int esl_rmx_SetKimura(ESL_DMATRIX *Q, double alpha, double beta); extern int esl_rmx_SetF81(ESL_DMATRIX *Q, double *pi); extern int esl_rmx_SetHKY(ESL_DMATRIX *Q, double *pi, double alpha, double beta); /* 2. Debugging routines for validating or dumping rate matrices. */ extern int esl_rmx_ValidateP(ESL_DMATRIX *P, double tol, char *errbuf); extern int esl_rmx_ValidateQ(ESL_DMATRIX *Q, double tol, char *errbuf); /* 3. Other routines in the exposed ratematrix API. */ extern int esl_rmx_ScaleTo(ESL_DMATRIX *Q, double *pi, double unit); extern int esl_rmx_E2Q(ESL_DMATRIX *E, double *pi, ESL_DMATRIX *Q); extern double esl_rmx_RelativeEntropy(ESL_DMATRIX *P, double *pi); extern double esl_rmx_ExpectedScore (ESL_DMATRIX *P, double *pi); #endif /*eslRATEMATRIX_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_gev.tex0000664361611702660230000002012612473612606015532 0ustar wheelerteddy The generalized extreme value distribution (GEV) includes all three types of extreme value distributions: Type I (Gumbel), type II (Fr\'{e}chet), and type III (Weibull). Empirically, the scores of some sequence alignment algorithms appear to follow GEV distributions. The \eslmod{gev} module is used in estimating the statistical significance of such scores. Most local sequence alignment scores follow the Gumbel distribution. Easel's \eslmod{gumbel} module applies specifically to the Gumbel. The \eslmod{gev} module is used for Type II or III extreme value distributions, or for determining which of the three types of distribution that a dataset best fits. \subsection{The gev API} The \eslmod{gev} API consists of the following functions: \vspace{0.5em} \begin{center} \begin{tabular}{ll}\hline \multicolumn{2}{c}{\textbf{evaluating densities and distributions:}}\\ \ccode{esl\_gev\_pdf()} & Returns the probability density, $P(S=x)$.\\ \ccode{esl\_gev\_logpdf()} & Returns the log of the pdf, $\log P(S=x)$.\\ \ccode{esl\_gev\_cdf()} & Returns the cumulative probability distribution, $P(S \leq x)$.\\ \ccode{esl\_gev\_logcdf()} & Returns the log of the cdf, $\log P(S \leq x)$.\\ \ccode{esl\_gev\_surv()} & Returns right tail mass, 1-cdf, $P(S > x)$\\ \ccode{esl\_gev\_logsurv()} & Returns log of 1-cdf, $\log P(S > x)$.\\ \multicolumn{2}{c}{\textbf{sampling:}}\\ \ccode{esl\_gev\_Sample()} & Returns a GEV-distributed random sample.\\ \multicolumn{2}{c}{\textbf{maximum likelihood parameter fitting:}}\\ \ccode{esl\_gev\_FitComplete()} & Estimates GEV parameters from complete data.\\ \end{tabular} \end{center} \vspace{0.5em} The Gumbel distribution depends on three parameters, $\mu$, $\lambda$, and $\alpha$. When these parameters are known, the statistical significance (P-value) of a single score $x$ is $P(S>x)$, obtained by a call to \ccode{esl\_gev\_surv()}. The E-value for obtaining that score or better in searching a database of $N$ sequences is just $NP(S>x)$. When the parameters are unknown, they can be estimated from scores obtained from comparisons of simulated random data. The \ccode{esl\_gev\_FitComplete()} function performs maximum likelihood parameter fitting \citep{Coles01}. \subsubsection{Augmentations: random, minimizer} The \ccode{esl\_gev\_Sample()} function requires augmenting with the \eslmod{random} module. The \ccode{esl\_gev\_FitComplete()} function requires augmenting with the \eslmod{minimizer} module. \subsection{Example of using the gev API} Below is a code example that samples 10,000 data points from a Fr\'{e}chet distribution with $\mu=-20$, $\lambda=0.4$, $\alpha=0.1$; reports the min and max samples, and the probability mass to the left of the min and to the right of the max (both of which should be about $\frac{1}{10000}$, since we took 10,000 samples); and then fits those simulated data to a Gumbel and reports the fitted $\mu$ and $\lambda$: \input{cexcerpts/gev_example} \subsection{GEV densities} The probability density function (pdf) and the cumulative distribution function (cdf) of the generalized extreme value distribution are \citep{Coles01}: \begin{eqnarray} P(X=x) & = & \lambda \left[ 1 + \alpha \lambda (x - \mu) \right]^{-\frac{\alpha+1}{\alpha}} \exp \left\{ - \left[ 1 + \alpha \lambda (x - \mu) \right]^{-\frac{1}{\alpha}} \right\} \\% \label{eqn:gev_density} P(X \geq x) & = & \exp \left\{ - \left[ 1 + \alpha\lambda(x-\mu) \right]^{-\frac{1}{\alpha}} \right\} \\% \label{eqn:gev_distribution} \end{eqnarray} The parameters $\mu$, $\lambda$, and $\alpha$ are location, scale, and shape parameters, respectively, with $-\infty < \mu < \infty$, $0 < \lambda < \infty$, and $-\infty < \alpha < \infty$. The Type II (Fr\'{e}chet) distribution corresponds to $\alpha > 0$, and the Type III (Weibull) distribution corresponds to $\alpha < 0$. The Type I (Gumbel) distribution arises in the limit $\alpha \rightarrow 0$. At values $\alpha \simeq 0$, Easel's GEV functions revert to the Gumbel limit case, as opposed to dividing by zero and failing. Technically the GEV is only defined for values of $x$ such that $1 + \alpha \lambda (x - \mu) > 0$. However, Easel's functions return sensible values outside this domain, such as 0 for nonexistent densities. Generalized extreme value densities for $\mu = 0$ and $\lambda = 1$ are shown below (left) for three settings of $\alpha$; $\alpha = 0$ (Gumbel), $\alpha = 0.1$ (Fr\'{e}chet), and $\alpha = -0.1$ (Weibull). The figure on the right shows the log densities, which more clearly show how, relative to the exponential right tail of the Gumbel, the Fr\'{e}chet's tail is longer, and the Weibull's tail is shorter. \centerline{ \begin{minipage}{3in} \includegraphics[width=2.8in]{figures/gev_density} \end{minipage} \begin{minipage}{3in} \includegraphics[width=2.8in]{figures/gev_logdensity} \end{minipage} } For more details, see the excellent description in \citep{Coles01}. Easel's $\{ \mu, \lambda, \alpha \}$ notation differs from the $\{ \mu, \sigma, \xi \}$ parameterization used by Coles. Use $\lambda = \frac{1}{\sigma}$ and $\alpha = \xi$ to translate. \subsection{Fitting GEV distributions to observed data} Easel fits GEVs by maximum likelihood estimation by numerically optimizing the log likelihood function, using first derivative information and conjugate gradient descent. See the \eslmod{gumbel} chapter for a more general introduction to maximum likelihood fitting. \subsubsection{Maximum likelihood estimation, complete data} The function \ccode{esl\_gev\_FitComplete()} uses gradient information to find parameters that optimize the likelihood function, using the conjugate gradient descent code in the \eslmod{minimizer} module. Given $n$ samples $x_1..x_n$, we want to estimate maximum likelihood parameter estimates $\{ \hat{\mu}, \hat{\lambda}, \hat{\alpha} \}$ that maximize the log likelihood: \begin{equation} \log L(\lambda, \mu, \alpha) = n \log \lambda - \frac{\alpha+1}{\alpha} \sum_{i=1}^{n} \log\left[1+ \alpha\lambda(x_i - \mu) \right] - \sum_{i=1}^{n} \left[ 1 + \alpha\lambda (x_i - \mu) \right]^{\frac{1}{\alpha}} \label{eqn:gev_logL} \end{equation} The $\left[ 1 + \alpha\lambda (x_i - \mu) \right]^{\frac{1}{\alpha}}$ term can be rewritten in a more conveniently differentiable form as $\exp \left\{ \frac{1}{\alpha} \log \left[ 1 + \alpha\lambda (x_i - \mu) \right] \right\}$. Since the $\lambda$ parameter is constrained to $\lambda > 0$ but the numerical optimizer expects unconstrained parameters, we use a change of variables $\lambda = e^w$ and optimize an unconstrained value $w$. The gradient of the log likelihood with respect to $\mu$, $w$, and $\alpha$ is: %% xref: STL9/118-120 \begin{eqnarray} \frac{\partial \log L}{\partial \mu} & = & \sum_{i=1}^n \frac{\lambda (\alpha+1)}{1+\alpha\lambda(x_i-\mu)} -\sum_{i=1}^n \lambda \exp \left\{ -\frac{\alpha+1}{\alpha} \log \left[1+\alpha\lambda(x_i-\mu)\right] \right\} \\% \label{eqn:gev_mupartial} \frac{\partial \log L}{\partial w} & = & n - \sum_{i=1}^{n} \frac{\lambda (\alpha+1) (x_i - \mu)} {1 + \alpha \lambda (x_i - \mu)} + \sum_{i=1}^n \lambda (x_i - \mu) \exp \left\{ -\frac{\alpha+1}{\alpha} \log \left[1+\alpha\lambda(x_i-\mu)\right] \right\} \\% \label{eqn:gev_wpartial} \frac{\partial \log L}{\partial \alpha} & = & \sum_{i=1}^n \left\{ \begin{array}{l} - \frac{\alpha+1}{\alpha} \frac{\lambda(x_i-\mu)} {1 +\alpha\lambda(x_i-\mu)}\\ + \frac{1}{\alpha^2} \log \left[ 1 + \alpha\lambda(x_i - \mu) \right]\\ + \frac{1}{\alpha} \frac{\lambda(x_i-\mu)} {1 +\alpha\lambda(x_i-\mu)} e^{-\frac{1}{\alpha} \log\left[ 1 + \alpha\lambda(x_i - \mu) \right]}\\ - \frac{1}{\alpha^2} \log \left[ 1 + \alpha\lambda(x_i - \mu) \right] e^{-\frac{1}{\alpha} \log\left[ 1 + \alpha\lambda(x_i - \mu) \right]} \end{array} \right. \\% \label{eqn:gev_alphapartial} \end{eqnarray} When $|\alpha\lambda(x_i - \mu)|$ approaches $0$, the GEV approximates a Gumbel distribution and these equations can be simplified using the approximation $\log(1+a) \simeq a$. hmmer-3.1b2/easel/esl_msa.tex0000664361611702660230000003307012473612606015533 0ustar wheelerteddyThe \eslmod{msa} module reads and writes multiple sequence alignment files. The API is summarized in Table~\ref{tbl:msa_api}. The module uses two objects. An \ccode{ESL\_MSA} holds a multiple sequence alignment. A \ccode{ESL\_MSAFILE} is an alignment file, opened for input. No object is needed for output of an alignment file; a normal C \ccode{FILE} stream is used for output. Augmentation with the \eslmod{alphabet} module allows MSAs to be input as digital Easel sequence data (\ccode{ESL\_DSQ}), or converted to and from digital data. Normally aligned sequences are stored in an \ccode{ESL\_MSA} just as text strings, exactly as they appeared in the input file. Augmentation with the \eslmod{ssi} module allows rapid random access of SSI-indexed large MSA database files like Pfam or Rfam. When augmented, the \ccode{esl\_msafile\_Open()} and \ccode{esl\_msafile\_OpenDigital()} functions automatically open an accompanying SSI index, if it is present. Augmentation with the \eslmod{keyhash} module allows much better performance on parsing large Stockholm alignment files, by accelerating indexing of some internal data structures. % Table generated by autodoc -t esl_msa.c (so don't edit here, edit esl_msa.c:) \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \apisubhead{The ESL\_MSA object }\\ \hyperlink{func:esl_msa_Create()}{\ccode{esl\_msa\_Create()}} & Creates an \ccode{ESL\_MSA} object.\\ \hyperlink{func:esl_msa_CreateFromString()}{\ccode{esl\_msa\_CreateFromString()}} & Creates a small \ccode{ESL\_MSA} from a test case string.\\ \hyperlink{func:esl_msa_Expand()}{\ccode{esl\_msa\_Expand()}} & Reallocate for more sequences.\\ \hyperlink{func:esl_msa_Destroy()}{\ccode{esl\_msa\_Destroy()}} & Frees an \ccode{ESL\_MSA}.\\ \apisubhead{The ESL\_MSAFILE object }\\ \hyperlink{func:eslx_msafile_Open()}{\ccode{eslx\_msafile\_Open()}} & Open an MSA file for input.\\ \hyperlink{func:eslx_msafile_Close()}{\ccode{eslx\_msafile\_Close()}} & Closes an open MSA file.\\ \apisubhead{Digital mode MSA's (augmentation: alphabet)}\\ \hyperlink{func:esl_msa_GuessAlphabet()}{\ccode{esl\_msa\_GuessAlphabet()}} & Guess alphabet of MSA.\\ \hyperlink{func:esl_msa_CreateDigital()}{\ccode{esl\_msa\_CreateDigital()}} & Create a digital \ccode{ESL\_MSA}.\\ \hyperlink{func:esl_msa_Digitize()}{\ccode{esl\_msa\_Digitize()}} & Digitizes an msa, converting it from text mode.\\ \hyperlink{func:esl_msa_Textize()}{\ccode{esl\_msa\_Textize()}} & Convert a digital msa to text mode.\\ \hyperlink{func:eslx_msafile_GuessAlphabet()}{\ccode{eslx\_msafile\_GuessAlphabet()}} & Guess what kind of sequences the alignment file contains.\\ \hyperlink{func:eslx_msafile_OpenDigital()}{\ccode{eslx\_msafile\_OpenDigital()}} & Open an msa file for digital input.\\ \hyperlink{func:eslx_msafile_SetDigital()}{\ccode{eslx\_msafile\_SetDigital()}} & Set an open \ccode{ESL\_MSAFILE} to read in digital mode.\\ \apisubhead{Random MSA database access (augmentation: ssi)}\\ \hyperlink{func:eslx_msafile_PositionByKey()}{\ccode{eslx\_msafile\_PositionByKey()}} & Use SSI to reposition file to start of named MSA.\\ \apisubhead{General i/o API, all alignment formats }\\ %\hyperlink{func:esl_msa_Read()}{\ccode{esl\_msa\_Read()}} & Read next MSA from a file.\\ %\hyperlink{func:esl_msa_Write()}{\ccode{esl\_msa\_Write()}} & Write an MSA to a file.\\ %\hyperlink{func:esl_msa_GuessFileFormat()}{\ccode{esl\_msa\_GuessFileFormat()}} & Determine the format of an open MSA file.\\ \apisubhead{Miscellaneous functions for manipulating MSAs}\\ \hyperlink{func:esl_msa_SequenceSubset()}{\ccode{esl\_msa\_SequenceSubset()}} & Select subset of sequences into a smaller MSA.\\ \hyperlink{func:esl_msa_ColumnSubset()}{\ccode{esl\_msa\_ColumnSubset()}} & Remove a selected subset of columns from the MSA \\ \hyperlink{func:esl_msa_MinimGaps()}{\ccode{esl\_msa\_MinimGaps()}} & Remove columns containing all gym symbols.\\ \hyperlink{func:esl_msa_NoGaps()}{\ccode{esl\_msa\_NoGaps()}} & Remove columns containing any gap symbol.\\ \hyperlink{func:esl_msa_SymConvert()}{\ccode{esl\_msa\_SymConvert()}} & Global search/replace of symbols in an MSA.\\ \hyperlink{func:esl_msa_AddComment()}{\ccode{esl\_msa\_AddComment()}} & Description.\\ \hyperlink{func:esl_msa_AddGF()}{\ccode{esl\_msa\_AddGF()}} & Description.\\ \hyperlink{func:esl_msa_AddGS()}{\ccode{esl\_msa\_AddGS()}} & Description.\\ \hyperlink{func:esl_msa_AppendGC()}{\ccode{esl\_msa\_AppendGC()}} & Description.\\ \hyperlink{func:esl_msa_AppendGR()}{\ccode{esl\_msa\_AppendGR()}} & Description.\\ \hyperlink{func:esl_msa_Compare()}{\ccode{esl\_msa\_Compare()}} & Compare two MSAs for equality.\\ \hyperlink{func:esl_msa_CompareMandatory()}{\ccode{esl\_msa\_CompareMandatory()}} & Compare mandatory subset of MSA contents.\\ \hyperlink{func:esl_msa_CompareOptional()}{\ccode{esl\_msa\_CompareOptional()}} & Compare optional subset of MSA contents.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{msa} API.} \label{tbl:msa_api} \end{table} \subsection{Example of using msa} Here's an example of opening an MSA file and reading one or more alignments from it: %%\input{cexcerpts/msa_example} Some things about the use of the API in the example are worth noting: \begin{enumerate} \item The format of the alignment file can either be automatically detected, or set by the caller when the file is opened. Autodetection is invoked when the caller passes a format code (here, \ccode{fmt}) of \ccode{eslMSAFILE\_UNKNOWN}. Autodetection is a ``best effort'' guess, but it is not 100\% reliable - especially if the input file isn't an alignment file at all. So autodetection is a convenient default, but the caller will probably want to provide a way for the user to specify the input file format and override autodetection, just in case. \item Errors can occur either in opening or reading the file that you must check for. This error checking could be as simple as making sure that \ccode{esl\_msafile\_Open()} and \ccode{esl\_msa\_Read()} returned \ccode{eslOK}, but the example shows how to catch all the normal errors returned by these calls, and how to format some reasonably informative error messages for the user. For example, when parsing the file fails and \ccode{esl\_msa\_Read()} returns an \ccode{eslEFORMAT} error, information about the problem is stored in \ccode{afp}: the caller can use \ccode{afp->linenumber}, \ccode{afp->buf}, and \ccode{afp->errbuf} to get the line number in the file that the error occurred, the text that was on that line, and a short error message about what was wrong with it, respectively. \item To output (write) an alignment, open a normal C \ccode{FILE} stream, write the alignment(s) with \ccode{esl\_msa\_Write()}, and close the stream with C's \ccode{fclose()}. Here, the example is regurgitating the alignments it reads to \ccode{stdout}. \item Note the example of how to compile with \eslmod{keyhash} augmentation, just by defining \ccode{-DeslAUGMENT\_KEYHASH} and adding the \ccode{esl\_keyhash.c} file when you compile. The effects of \eslmod{keyhash} augmentation are all internal the \eslmod{msa} module, rather than providing any new functions. \end{enumerate} \subsection{Accessing alignment data} The information in the \ccode{ESL\_MSA} object is meant to be accessed directly, so you need to know what it contains. This object is defined and documented in \ccode{esl\_msa.h}. It contains various information, as follows: \subsubsection{Important/mandatory information} The following information is always available in an MSA (except digital-mode alignments, which replace \ccode{aseq[][]} with \ccode{ax[][]}, as described later): \input{cexcerpts/msa_mandatory} The alignment contains \ccode{nseq} sequences, each of which contains \ccode{alen} characters. \ccode{aseq[i]} is the i'th aligned sequence, numbered \ccode{0..nseq-1}. \ccode{aseq[i][j]} is the j'th character in aligned sequence i, numbered \ccode{0..alen-1}. \ccode{sqname[i]} is the name of the i'th sequence. \ccode{wgt[i]} is a non-negative real-valued weight for sequence i. This defaults to 1.0 if the alignment file did not provide weight data. You can determine whether weight data was parsed by checking \ccode{(flags \& eslMSA\_HASWGTS)}. \subsubsection{Optional information} The following information is optional. It is usually only provided by annotated Stockholm alignments (for instance, Pfam and Rfam database alignments): \input{cexcerpts/msa_optional} These should be self-explanatory; but for more information, see the Stockholm format documentation. Each of these fields corresponds to Stockholm markup. These pointers will be NULL for any optional annotation that was not present in the alignment file. This is true at any level; for instance, \ccode{ss} will be NULL if no secondary structures are available for any sequence, and \ccode{ss[i]} will be NULL if some secondary structures are available, but not for sequence i. The \ccode{cutoff} array contains Pfam/Rfam curated trusted, gathering and noise score cutoffs. They are indexed as follows: \input{cexcerpts/msa_cutoffs} \subsubsection{Unparsed information} The MSA object also stores additional ``unparsed'' information from Stockholm files; that is, tags that are present but not recognized by the MSA module. This information is stored so that it may be regurgitated if the application needs to faithfully output the entire alignment file, even the bits that it didn't understand. If you need to access unparsed Stockholm tags, see the comments in \ccode{esl\_msa.h}. \subsubsection{Off-by-one issues in indexing alignment columns} With one exception, all arrays over alignment columns are normal C string arrays, indexed \ccode{0..alen-1}. This includes optional information such as \ccode{msa->rf[]} (the reference annotation line) and \ccode{msa->cs[]} (the consensus structure annotation line). The exception is a digitized sequence alignment, \ccode{msa->ax[][]} (see below), where columns are indexed 1..alen and sentinel bytes at positions 0 and alen+1, following Easel's convention for digitized sequences. Thus, when your code is manipulating a digitized alignment and using optional information like the reference annotation line or the consensus structure line, you must be careful of the off-by-one difference in how the two types of data are indexed. \subsection{Accepted formats} Currently, the MSA module only parses Stockholm format. Stockholm format and other alignment formats are documented in a later chapter. \subsection{Digital versus text representation} The multiple alignment is normally stored as ASCII text symbols in a 2D array \ccode{char ** aseq[0..nseq-1][0..alen-1]}. These strings are stored exactly as they appeared in the original file; they aren't converted to upper or lower case, for example. Optionally, when augmented with the \eslmod{alphabet} module, the multiple alignment may alternatively be stored as digital data in an Easel internal alphabet. This enables more consistent, robust, and speedy handling of the sequence data. An \ccode{ESL\_MSA} may therefore be in either \esldef{text mode} or \esldef{digital mode}. Text mode is the default behavior. An \ccode{ESL\_MSA} is in digital mode if its \ccode{eslMSA\_DIGITAL} flag is up (\ccode{msa->flags \& eslMSA\_DIGITAL} is \ccode{TRUE}). When the alignment data are in digital mode, they are stored internally as a 2D digital sequence array \ccode{ESL\_DSQ ** ax[0..nseq-1][1..alen]}, and the \ccode{aseq} field is \ccode{NULL}. To use a digital internal representation, it is most efficient to read directly as digital data, using a \ccode{esl\_msafile\_OpenDigital()} call in place of \ccode{esl\_msafile\_Open()}. You can also change the mode of an MSA from text to digital using \ccode{esl\_msa\_Digitize()}, and digital to text using \ccode{esl\_msa\_Textize()}. Suppose you want to open an alignment file and read its alignments in digital mode, but you don't know whether the file contains DNA or protein alignments. You can't use \ccode{esl\_msafile\_OpenDigital()} unless you have an alphabet; but you can't see the alphabet until you've read an alignment. \Easel provides \ccode{esl\_msafile\_GuessAlphabet()} to peek at the first alignment and guess its alphabet\footnote{Because the stream that alignments are being read from may be non-rewindable, the implementation of \ccode{esl\_msafile\_GuessAlphabet()} reads and caches the first alignment.}, and \ccode{esl\_msafile\_SetDigital()} to set an already-open \ccode{ESL\_MSAFILE} so that all subsequent alignments are read in digital mode. For example: %%\input{cexcerpts/msa_example2} \subsection{Reading from stdin or gzip-compressed files} The module can read compressed alignment files. If the \ccode{filename} passed to \ccode{esl\_msafile\_Open()} ends in \ccode{.gz}, the file is assumed to be compressed with gzip. Instead of opening it normally, \ccode{esl\_msafile\_Open()} opens it as a pipe through \ccode{gzip -dc}. Obviously this only works on a POSIX system -- pipes have to work, specifically the \ccode{popen()} system call -- and \ccode{gzip} must be installed and in the PATH. The module can also read from a standard input pipe. If the \ccode{filename} passed to \ccode{esl\_msafile\_Open()} is \ccode{-}, the alignment is read from \ccode{STDIN} rather than from a file. Because of the way format autodetection works, you cannot use it when reading from a pipe or compressed file. The application must know the appropriate format and pass that code it calls \ccode{esl\_msafile\_Open()}. hmmer-3.1b2/easel/esl_sse.c0000664361611702660230000006203612473612607015174 0ustar wheelerteddy/* Vectorized routines for Intel/AMD, using Streaming SIMD Extensions (SSE). * * Table of contents * 1. SIMD logf(), expf() * 2. Utilities for ps vectors (4 floats in a __m128) * 3. Utilities for epu8 vectors (16 uchars in a __m128i) * 3. Benchmark * 4. Unit tests * 5. Test driver * 6. Example * 7. Copyright and license * ***************************************************************** * Credits: * * The logf() and expf() routines are derivatives of routines by * Julien Pommier [http://gruntthepeon.free.fr/ssemath/]. Those * routines were in turn based on serial implementations in the Cephes * math library by Stephen Moshier [Moshier89; * http://www.moshier.net/#Cephes]. Thanks and credit to both Moshier * and Pommier for their clear code. Additional copyright and license * information is appended at the end of the file. */ #include "esl_config.h" #ifdef HAVE_SSE2 #include #include #include #include #include /* SSE */ #include /* SSE2 */ #include "easel.h" #include "esl_sse.h" /***************************************************************** * 1. SSE SIMD logf(), expf() *****************************************************************/ /* As of Dec 2007, I am unaware of any plans for Intel/AMD to release * SSE intrinsics for logf(), expf(), or other special functions. * * I need them, and the code below should suffice. If you know of * better ways to compute these functions, please let me know. */ /* Function: esl_sse_logf() * Synopsis: * Incept: SRE, Fri Dec 14 11:32:54 2007 [Janelia] * * Purpose: Given a vector containing four floats, returns a * vector in which each element . * * Valid in the domain $x_z > 0$ for normalized IEEE754 * $x_z$. * * For $< 0$, including -0, returns . For $== * 0$ or subnormal , returns <-inf>. For , * returns . For , returns . For * subnormal , returns <-inf>. * * Xref: J2/71. * * Note: Derived from an SSE1 implementation by Julian * Pommier. Converted to SSE2 and added handling * of IEEE754 specials. */ __m128 esl_sse_logf(__m128 x) { static float cephes_p[9] = { 7.0376836292E-2f, -1.1514610310E-1f, 1.1676998740E-1f, -1.2420140846E-1f, 1.4249322787E-1f, -1.6668057665E-1f, 2.0000714765E-1f, -2.4999993993E-1f, 3.3333331174E-1f }; __m128 onev = _mm_set1_ps(1.0f); /* all elem = 1.0 */ __m128 v0p5 = _mm_set1_ps(0.5f); /* all elem = 0.5 */ __m128i vneg = _mm_set1_epi32(0x80000000); /* all elem have IEEE sign bit up */ __m128i vexp = _mm_set1_epi32(0x7f800000); /* all elem have IEEE exponent bits up */ __m128i ei; __m128 e; __m128 invalid_mask, zero_mask, inf_mask; /* masks used to handle special IEEE754 inputs */ __m128 mask; __m128 origx; __m128 tmp; __m128 y; __m128 z; /* first, split x apart: x = frexpf(x, &e); */ ei = _mm_srli_epi32( _mm_castps_si128(x), 23); /* shift right 23: IEEE754 floats: ei = biased exponents */ invalid_mask = _mm_castsi128_ps ( _mm_cmpeq_epi32( _mm_and_si128(_mm_castps_si128(x), vneg), vneg)); /* mask any elem that's negative; these become NaN */ zero_mask = _mm_castsi128_ps ( _mm_cmpeq_epi32(ei, _mm_setzero_si128())); /* mask any elem zero or subnormal; these become -inf */ inf_mask = _mm_castsi128_ps ( _mm_cmpeq_epi32( _mm_and_si128(_mm_castps_si128(x), vexp), vexp)); /* mask any elem inf or NaN; log(inf)=inf, log(NaN)=NaN */ origx = x; /* store original x, used for log(inf) = inf, log(NaN) = NaN */ x = _mm_and_ps(x, _mm_castsi128_ps(_mm_set1_epi32(~0x7f800000))); /* x now the stored 23 bits of the 24-bit significand */ x = _mm_or_ps (x, v0p5); /* sets hidden bit b[0] */ ei = _mm_sub_epi32(ei, _mm_set1_epi32(126)); /* -127 (ei now signed base-2 exponent); then +1 */ e = _mm_cvtepi32_ps(ei); /* now, calculate the log */ mask = _mm_cmplt_ps(x, _mm_set1_ps(0.707106781186547524f)); /* avoid conditional branches. */ tmp = _mm_and_ps(x, mask); /* tmp contains x values < 0.707, else 0 */ x = _mm_sub_ps(x, onev); e = _mm_sub_ps(e, _mm_and_ps(onev, mask)); x = _mm_add_ps(x, tmp); z = _mm_mul_ps(x,x); y = _mm_set1_ps(cephes_p[0]); y = _mm_mul_ps(y, x); y = _mm_add_ps(y, _mm_set1_ps(cephes_p[1])); y = _mm_mul_ps(y, x); y = _mm_add_ps(y, _mm_set1_ps(cephes_p[2])); y = _mm_mul_ps(y, x); y = _mm_add_ps(y, _mm_set1_ps(cephes_p[3])); y = _mm_mul_ps(y, x); y = _mm_add_ps(y, _mm_set1_ps(cephes_p[4])); y = _mm_mul_ps(y, x); y = _mm_add_ps(y, _mm_set1_ps(cephes_p[5])); y = _mm_mul_ps(y, x); y = _mm_add_ps(y, _mm_set1_ps(cephes_p[6])); y = _mm_mul_ps(y, x); y = _mm_add_ps(y, _mm_set1_ps(cephes_p[7])); y = _mm_mul_ps(y, x); y = _mm_add_ps(y, _mm_set1_ps(cephes_p[8])); y = _mm_mul_ps(y, x); y = _mm_mul_ps(y, z); tmp = _mm_mul_ps(e, _mm_set1_ps(-2.12194440e-4f)); y = _mm_add_ps(y, tmp); tmp = _mm_mul_ps(z, v0p5); y = _mm_sub_ps(y, tmp); tmp = _mm_mul_ps(e, _mm_set1_ps(0.693359375f)); x = _mm_add_ps(x, y); x = _mm_add_ps(x, tmp); /* IEEE754 cleanup: */ x = esl_sse_select_ps(x, origx, inf_mask); /* log(inf)=inf; log(NaN) = NaN */ x = _mm_or_ps(x, invalid_mask); /* log(x<0, including -0,-inf) = NaN */ x = esl_sse_select_ps(x, _mm_set1_ps(-eslINFINITY), zero_mask); /* x zero or subnormal = -inf */ return x; } /* Function: esl_sse_expf() * Synopsis: * Incept: SRE, Fri Dec 14 14:46:27 2007 [Janelia] * * Purpose: Given a vector containing four floats, returns a * vector in which each element . * * Valid for all IEEE754 floats $x_z$. * * Xref: J2/71 * J10/62: bugfix, minlogf/maxlogf range was too wide; * (k+127) must be >=0 and <=255, so (k+127)<<23 * is a valid IEEE754 float, without touching * the sign bit. Pommier had this right in the * first place, and I didn't understand. * * Note: Derived from an SSE1 implementation by Julian * Pommier. Converted to SSE2. * * Note on maxlogf/minlogf, which are close to but not * exactly 127.5/log2 [J10/63]. We need -127<=k<=128, so * k+127 is 0..255, a valid IEEE754 8-bit exponent * (0..255), so the bit pattern (k+127)<<23 is IEEE754 * single-precision for 2^k. If k=-127, we get IEEE754 0. * If k=128, we get IEEE754 +inf. If k<-127, k+127 is * negative and we get screwed up. If k>128, k+127 * overflows the 8-bit exponent and sets the sign bit. So * for x' (base 2) < -127.5 we must definitely return e^x ~ * 0; for x' < 126.5 we're going to calculate 0 anyway * (because k=floor(-126.5-epsilon+0.5) = -127). So any * minlogf between -126.5 log2 ... -127.5 log2 will suffice * as the cutoff. Ditto for 126.5 log2 .. 127.5log2. * That's 87.68312 .. 88.3762655. I think Pommier's * thinking is, you don't want to get to close to the * edges, lest fp roundoff error screw you (he may have * consider 1 ulp carefully, I can't tell), but otherwise * you may as well put your bounds close to the outer edge; * so * maxlogf = 127.5 log(2) - epsilon * minlogf = -127.5 log(2) + epsilon * for an epsilon that happen to be ~ 3e-6. */ __m128 esl_sse_expf(__m128 x) { static float cephes_p[6] = { 1.9875691500E-4f, 1.3981999507E-3f, 8.3334519073E-3f, 4.1665795894E-2f, 1.6666665459E-1f, 5.0000001201E-1f }; static float cephes_c[2] = { 0.693359375f, -2.12194440e-4f }; static float maxlogf = 88.3762626647949f; /* 127.5 log(2) - epsilon. above this, 0.5+x/log2 gives k>128 and breaks 2^k "float" construction, because (k+127)<<23 must be a valid IEEE754 exponent 0..255 */ static float minlogf = -88.3762626647949f; /*-127.5 log(2) + epsilon. below this, 0.5+x/log2 gives k<-127 and breaks 2^k, see above */ __m128i k; __m128 mask, tmp, fx, z, y, minmask, maxmask; /* handle out-of-range and special conditions */ maxmask = _mm_cmpgt_ps(x, _mm_set1_ps(maxlogf)); minmask = _mm_cmple_ps(x, _mm_set1_ps(minlogf)); /* range reduction: exp(x) = 2^k e^f = exp(f + k log 2); k = floorf(0.5 + x / log2): */ fx = _mm_mul_ps(x, _mm_set1_ps(eslCONST_LOG2R)); fx = _mm_add_ps(fx, _mm_set1_ps(0.5f)); /* floorf() with SSE: */ k = _mm_cvttps_epi32(fx); /* cast to int with truncation */ tmp = _mm_cvtepi32_ps(k); /* cast back to float */ mask = _mm_cmpgt_ps(tmp, fx); /* if it increased (i.e. if it was negative...) */ mask = _mm_and_ps(mask, _mm_set1_ps(1.0f)); /* ...without a conditional branch... */ fx = _mm_sub_ps(tmp, mask); /* then subtract one. */ k = _mm_cvttps_epi32(fx); /* k is now ready for the 2^k part. */ /* polynomial approx for e^f for f in range [-0.5, 0.5] */ tmp = _mm_mul_ps(fx, _mm_set1_ps(cephes_c[0])); z = _mm_mul_ps(fx, _mm_set1_ps(cephes_c[1])); x = _mm_sub_ps(x, tmp); x = _mm_sub_ps(x, z); z = _mm_mul_ps(x, x); y = _mm_set1_ps(cephes_p[0]); y = _mm_mul_ps(y, x); y = _mm_add_ps(y, _mm_set1_ps(cephes_p[1])); y = _mm_mul_ps(y, x); y = _mm_add_ps(y, _mm_set1_ps(cephes_p[2])); y = _mm_mul_ps(y, x); y = _mm_add_ps(y, _mm_set1_ps(cephes_p[3])); y = _mm_mul_ps(y, x); y = _mm_add_ps(y, _mm_set1_ps(cephes_p[4])); y = _mm_mul_ps(y, x); y = _mm_add_ps(y, _mm_set1_ps(cephes_p[5])); y = _mm_mul_ps(y, z); y = _mm_add_ps(y, x); y = _mm_add_ps(y, _mm_set1_ps(1.0f)); /* build 2^k by hand, by creating a IEEE754 float */ k = _mm_add_epi32(k, _mm_set1_epi32(127)); k = _mm_slli_epi32(k, 23); fx = _mm_castsi128_ps(k); /* put 2^k e^f together (fx = 2^k, y = e^f) and we're done */ y = _mm_mul_ps(y, fx); /* special/range cleanup */ y = esl_sse_select_ps(y, _mm_set1_ps(eslINFINITY), maxmask); /* exp(x) = inf for x > log(2^128) */ y = esl_sse_select_ps(y, _mm_set1_ps(0.0f), minmask); /* exp(x) = 0 for x < log(2^-149) */ return y; } /***************************************************************** * 2. Utilities for ps vectors (4 floats in a __m128) *****************************************************************/ void esl_sse_dump_ps(FILE *fp, __m128 v) { float *p = (float *)&v; fprintf(fp, "[%13.8g, %13.8g, %13.8g, %13.8g]", p[0], p[1], p[2], p[3]); } /***************************************************************** * 3. Benchmark *****************************************************************/ #ifdef eslSSE_BENCHMARK /* gcc -msse2 -O3 -o benchmark-sse -I ~/src/hmmer/easel -L ~/src/hmmer/easel -DeslSSE_BENCHMARK -DHAVE_SSE2 esl_sse.c -leasel -lm */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_stopwatch.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-N", eslARG_INT,"10000000", NULL, NULL, NULL, NULL, NULL, "number of trials", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "benchmark driver for sse module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_STOPWATCH *w = esl_stopwatch_Create(); int N = esl_opt_GetInteger(go, "-N"); float origx = 2.0; float x = origx; __m128 xv = _mm_set1_ps(x); int i; /* First, serial time. */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { x = logf(x); x = expf(x); } esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# serial CPU time: "); /* Vector time */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) { xv = esl_sse_logf(xv); xv = esl_sse_expf(xv); } esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# vector CPU time: "); /* If you don't do something with x and xv, the compiler may optimize them away */ printf("%g => many scalar logf,expf cycles => %g\n", origx, x); printf("%g => many vector logf,expf cycles => ", origx); esl_sse_dump_ps(stdout, xv); printf("\n"); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*eslSSE_BENCHMARK*/ /***************************************************************** * 4. Unit tests *****************************************************************/ #ifdef eslSSE_TESTDRIVE #include "esl_getopts.h" #include "esl_random.h" /* utest_logf(): Test range/domain of logf */ static void utest_logf(ESL_GETOPTS *go) { __m128 x; /* test input */ union { __m128 v; float x[4]; } r; /* test output */ /* Test IEEE754 specials: * log(-inf) = NaN log(x<0) = NaN log(-0) = NaN * log(0) = -inf log(inf) = inf log(NaN) = NaN */ x = _mm_set_ps(0.0, -0.0, -1.0, -eslINFINITY); /* set_ps() is in order 3 2 1 0 */ r.v = esl_sse_logf(x); if (esl_opt_GetBoolean(go, "-v")) { printf("logf"); esl_sse_dump_ps(stdout, x); printf(" ==> "); esl_sse_dump_ps(stdout, r.v); printf("\n"); } if (! isnan(r.x[0])) esl_fatal("logf(-inf) should be NaN"); if (! isnan(r.x[1])) esl_fatal("logf(-1) should be NaN"); if (! isnan(r.x[2])) esl_fatal("logf(-0) should be NaN"); if (! (r.x[3] < 0 && isinf(r.x[3]))) esl_fatal("logf(0) should be -inf"); x = _mm_set_ps(FLT_MAX, FLT_MIN, eslNaN, eslINFINITY); r.v = esl_sse_logf(x); if (esl_opt_GetBoolean(go, "-v")) { printf("logf"); esl_sse_dump_ps(stdout, x); printf(" ==> "); esl_sse_dump_ps(stdout, r.v); printf("\n"); } if (! isinf(r.x[0])) esl_fatal("logf(inf) should be inf"); if (! isnan(r.x[1])) esl_fatal("logf(NaN) should be NaN"); } /* utest_expf(): Test range/domain of expf */ static void utest_expf(ESL_GETOPTS *go) { __m128 x; /* test input */ union { __m128 v; float x[4]; } r; /* test output */ /* exp(-inf) = 0 exp(-0) = 1 exp(0) = 1 exp(inf) = inf exp(NaN) = NaN */ x = _mm_set_ps(eslINFINITY, 0.0, -0.0, -eslINFINITY); /* set_ps() is in order 3 2 1 0 */ r.v = esl_sse_expf(x); if (esl_opt_GetBoolean(go, "-v")) { printf("expf"); esl_sse_dump_ps(stdout, x); printf(" ==> "); esl_sse_dump_ps(stdout, r.v); printf("\n"); } if (r.x[0] != 0.0f) esl_fatal("expf(-inf) should be 0"); if (r.x[1] != 1.0f) esl_fatal("logf(-0) should be 1"); if (r.x[2] != 1.0f) esl_fatal("logf(0) should be 1"); if (! isinf(r.x[3])) esl_fatal("logf(inf) should be inf"); /* exp(NaN) = NaN exp(large) = inf exp(-large) = 0 exp(1) = exp(1) */ x = _mm_set_ps(1.0f, -666.0f, 666.0f, eslNaN); /* set_ps() is in order 3 2 1 0 */ r.v = esl_sse_expf(x); if (esl_opt_GetBoolean(go, "-v")) { printf("expf"); esl_sse_dump_ps(stdout, x); printf(" ==> "); esl_sse_dump_ps(stdout, r.v); printf("\n"); } if (! isnan(r.x[0])) esl_fatal("expf(NaN) should be NaN"); if (! isinf(r.x[1])) esl_fatal("expf(large x) should be inf"); if (r.x[2] != 0.0f) esl_fatal("expf(-large x) should be 0"); /* Make sure we are correct around the problematic ~minlogf boundary: * (1) e^x for x < -127.5 log2 + epsilon is 0, because that's our minlogf barrier. * (2) e^x for -127.5 log2 < x < -126.5 log2 is 0 too, but is actually calculated * (3) e^x for -126.5 log2 < x should be finite (and close to FLT_MIN) * * minlogf = -127.5 log(2) + epsilon = -88.3762626647949; * and -126.5 log(2) = -87.68311834 * so for * (1): expf(-88.3763) => 0 * (2): expf(-88.3762) => 0 * (3): expf(-87.6832) => 0 * (4): expf(-87.6831) => "); esl_sse_dump_ps(stdout, r.v); printf("\n"); } if ( r.x[0] >= FLT_MIN) esl_fatal("expf( -126.5 log2 + eps) should be around FLT_MIN"); if ( r.x[1] != 0.0f) esl_fatal("expf( -126.5 log2 - eps) should be 0.0 (by calculation)"); if ( r.x[2] != 0.0f) esl_fatal("expf( -127.5 log2 + eps) should be 0.0 (by calculation)"); if ( r.x[3] != 0.0f) esl_fatal("expf( -127.5 log2 - eps) should be 0.0 (by min bound): %g", r.x[0]); } /* utest_odds(): test accuracy of logf, expf on odds ratios, * our main intended use. */ static void utest_odds(ESL_GETOPTS *go, ESL_RANDOMNESS *r) { int N = esl_opt_GetInteger(go, "-N"); int verbose = esl_opt_GetBoolean(go, "-v"); int very_verbose = esl_opt_GetBoolean(go, "--vv"); int i; float p1, p2, odds; union { __m128 v; float x[4]; } r1; union { __m128 v; float x[4]; } r2; float scalar_r1, scalar_r2; double err1, maxerr1 = 0.0, avgerr1 = 0.0; /* errors on logf() */ double err2, maxerr2 = 0.0, avgerr2 = 0.0; /* errors on expf() */ for (i = 0; i < N; i++) { p1 = esl_rnd_UniformPositive(r); p2 = esl_rnd_UniformPositive(r); odds = p1 / p2; if (odds == 0.0) esl_fatal("whoa, odds ratio can't be 0!\n"); r1.v = esl_sse_logf(_mm_set1_ps(odds)); /* r1.x[z] = log(p1/p2) */ scalar_r1 = log(odds); err1 = (r1.x[0] == 0. && scalar_r1 == 0.) ? 0.0 : 2 * fabs(r1.x[0] - scalar_r1) / fabs(r1.x[0] + scalar_r1); if (err1 > maxerr1) maxerr1 = err1; avgerr1 += err1 / (float) N; if (isnan(avgerr1)) esl_fatal("whoa, what?\n"); r2.v = esl_sse_expf(r1.v); /* and back to odds */ scalar_r2 = exp(r1.x[0]); err2 = (r2.x[0] == 0. && scalar_r2 == 0.) ? 0.0 : 2 * fabs(r2.x[0] - scalar_r2) / fabs(r2.x[0] + scalar_r2); if (err2 > maxerr2) maxerr2 = err2; avgerr2 += err2 / (float) N; if (very_verbose) printf("%13.7g %13.7g %13.7g %13.7g %13.7g %13.7g %13.7g\n", odds, scalar_r1, r1.x[0], scalar_r2, r2.x[0], err1, err2); } if (verbose) { printf("Average [max] logf() relative error in %d odds trials: %13.8g [%13.8g]\n", N, avgerr1, maxerr1); printf("Average [max] expf() relative error in %d odds trials: %13.8g [%13.8g]\n", N, avgerr2, maxerr2); printf("(random seed : %" PRIu32 ")\n", esl_randomness_GetSeed(r)); } if (avgerr1 > 1e-8) esl_fatal("average error on logf() is intolerable\n"); if (maxerr1 > 1e-6) esl_fatal("maximum error on logf() is intolerable\n"); if (avgerr2 > 1e-8) esl_fatal("average error on expf() is intolerable\n"); if (maxerr2 > 1e-6) esl_fatal("maximum error on expf() is intolerable\n"); } #endif /*eslSSE_TESTDRIVE*/ /***************************************************************** * 5. Test driver *****************************************************************/ #ifdef eslSSE_TESTDRIVE /* gcc -msse2 -g -Wall -o test -I. -L. -DeslSSE_TESTDRIVE esl_sse.c -leasel -lm */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-N", eslARG_INT, "10000", NULL, NULL, NULL, NULL, NULL, "number of random test points", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose: show test report", 0 }, { "--vv", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be very verbose: show individual test samples", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for sse module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_Create(esl_opt_GetInteger(go, "-s"));; utest_logf(go); utest_expf(go); utest_odds(go, r); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /* eslSSE_TESTDRIVE*/ /***************************************************************** * 6. Example *****************************************************************/ #ifdef eslSSE_EXAMPLE /*::cexcerpt::sse_example::begin::*/ /* gcc -msse2 -g -Wall -o example -I. -L. -DeslSSE_EXAMPLE esl_sse.c -leasel -lm */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_sse.h" int main(int argc, char **argv) { float x; /* scalar input */ __m128 xv; /* input vector */ union { __m128 v; float x[4]; } rv; /* result vector*/ x = 2.0; xv = _mm_set1_ps(x); rv.v = esl_sse_logf(xv); printf("logf(%f) = %f\n", x, rv.x[0]); rv.v = esl_sse_expf(xv); printf("expf(%f) = %f\n", x, rv.x[0]); return 0; } /*::cexcerpt::sse_example::end::*/ #endif /*eslSSE_EXAMPLE*/ #else /* ! HAVE_SSE2*/ /* If we don't have SSE2 compiled in, provide some nothingness to: * a. prevent Mac OS/X ranlib from bitching about .o file that "has no symbols" * b. prevent compiler from bitching about "empty compilation unit" * c. automatically pass the automated tests. */ #include "easel.h" void esl_sse_DoAbsolutelyNothing(void) { return; } #if defined eslSSE_TESTDRIVE || eslSSE_EXAMPLE || eslSSE_BENCHMARK int main(void) { return 0; } #endif #endif /* HAVE_SSE2 or not*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_sse.c 798 2012-08-28 19:57:41Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_sse.c $ *****************************************************************/ /* Additionally, esl_sse_logf() and esl_sse_expf() are * Copyright (C) 2007 Julien Pommier * Copyright (C) 1992 Stephen Moshier * * These functions derived from zlib-licensed routines by * Julien Pommier, http://gruntthepeon.free.fr/ssemath/. The * zlib license: */ /* Copyright (C) 2007 Julien Pommier This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /* In turn, Pommier had derived the logf() and expf() functions from * serial versions in the Cephes math library. According to its * readme, Cephes is "copyrighted by the author" and "may be used * freely but it comes with no support or guarantee." Cephes is * available in NETLIB [http://www.netlib.org/cephes/]. NETLIB is * widely considered to be a free scientific code repository, though * the copyright and license status of many parts, including Cephes, * is ill-defined. We have attached Moshier's copyright, * to credit his original contribution. Thanks to both Pommier and * Moshier for their clear code. */ hmmer-3.1b2/easel/esl_stretchexp.h0000664361611702660230000000460212473612610016565 0ustar wheelerteddy/* Stretched exponential distributions. * * SRE, Fri Aug 19 13:51:14 2005 [St. Louis] [xref STL9/146] * SVN $Id: esl_stretchexp.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_stretchexp.h $ */ #ifndef eslSTRETCHEXP_INCLUDED #define eslSTRETCHEXP_INCLUDED #ifdef eslAUGMENT_RANDOM #include #endif #ifdef eslAUGMENT_HISTOGRAM #include #endif extern double esl_sxp_pdf (double x, double mu, double lambda, double tau); extern double esl_sxp_logpdf (double x, double mu, double lambda, double tau); extern double esl_sxp_cdf (double x, double mu, double lambda, double tau); extern double esl_sxp_logcdf (double x, double mu, double lambda, double tau); extern double esl_sxp_surv (double x, double mu, double lambda, double tau); extern double esl_sxp_logsurv(double x, double mu, double lambda, double tau); extern double esl_sxp_invcdf (double p, double mu, double lambda, double tau); extern double esl_sxp_generic_pdf (double x, void *params); extern double esl_sxp_generic_cdf (double x, void *params); extern double esl_sxp_generic_surv (double x, void *params); extern double esl_sxp_generic_invcdf(double p, void *params); extern int esl_sxp_Plot(FILE *fp, double mu, double lambda, double tau, double (*func)(double x, double mu, double lambda, double tau), double xmin, double xmax, double xstep); #ifdef eslAUGMENT_RANDOM extern double esl_sxp_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double tau); #endif #ifdef eslAUGMENT_MINIMIZER extern int esl_sxp_FitComplete(double *x, int n, double *ret_mu, double *ret_lambda, double *ret_tau); #ifdef eslAUGMENT_HISTOGRAM extern int esl_sxp_FitCompleteBinned(ESL_HISTOGRAM *g, double *ret_mu, double *ret_lambda, double *ret_tau); #endif /*eslAUGMENT_HISTOGRAM*/ #endif /*eslAUGMENT_MINIMIZER*/ #endif /*eslSTRETCHEXP_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/COPYRIGHT0000664361611702660230000000200412473612604014650 0ustar wheelerteddyEasel - a library of C functions for biological sequence analysis Copyright (C) 2015 Howard Hughes Medical Institute. Additional copyrights apply to the package: Copyright (C) 2004-2013 Sean R. Eddy Copyright (C) 2006-2013 Howard Hughes Medical Institute Easel also includes pieces of copyrighted and licensed code from a variety of sources and contributors, as noted in the appropriate places in individual files. Copyright holders and contributors include: Free Software Foundation, Inc. configure Matteo Frigo aclocal.m4 Steven G. Johnson aclocal.m4 Stephen Moshier esl_sse.c,esl_vmx.c Julien Pommier esl_sse.c,esl_vmx.c Christophe Tournayre aclocal.m4 David Wheeler easel.c::esl_tmpfile() University of Toronto esl_regexp.c The Easel library is freely modifiable and redistributable under the Janelia Farm Software License, a BSD license. See the file LICENSE for details. hmmer-3.1b2/easel/esl_msafile_clustal.h0000664361611702660230000000227412473612607017554 0ustar wheelerteddy/* i/o of multiple sequence alignment files in Clustal-like formats */ #ifndef eslMSAFILE_CLUSTAL_INCLUDED #define eslMSAFILE_CLUSTAL_INCLUDED #include "esl_msa.h" #include "esl_msafile.h" extern int esl_msafile_clustal_SetInmap (ESLX_MSAFILE *afp); extern int esl_msafile_clustal_GuessAlphabet(ESLX_MSAFILE *afp, int *ret_type); extern int esl_msafile_clustal_Read (ESLX_MSAFILE *afp, ESL_MSA **ret_msa); extern int esl_msafile_clustal_Write (FILE *fp, const ESL_MSA *msa, int fmt); #endif /* eslMSAFILE_CLUSTAL_INCLUDED */ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msafile_clustal.h 708 2011-07-20 12:49:10Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msafile_clustal.h $ *****************************************************************/ hmmer-3.1b2/easel/esl_keyhash.h0000664361611702660230000000622412473612606016037 0ustar wheelerteddy/* Storing keys in hash tables, similar to Perl's associative arrays. * */ #ifndef eslKEYHASH_INCLUDED #define eslKEYHASH_INCLUDED #include /* for FILE */ /* ESL_KEYHASH: * a dynamically resized hash structure; * contains a hash table and associated data * * Each key string is associated with an index i = (0..nkeys-1). * Key strings are stored in one array, in smem. * Each key has an offset in this array, key_offset[i]. * Thus key number is at: smem + key_offset[i]. * * The keys are hashed, and stored in linked lists in * a hashtable by their index i = (0..nkeys-1), with -1 * as a sentinel for end-of-list. * * hashtable[0..hashsize-1] = head of linked list; * index of first elem in list (0..nkeys-1), * or -1 if empty. * nxt[0..nkeys-1] = next elem in list (0..nkeys-1), or -1 if none. * * Thus a typical loop, looking for a : * uint32_t val = jenkins_hash(key, kh->hashsize); * for (i = kh->hashtable[val]; i != -1; i = kh->nxt[i]) * if (strcmp(key, kh->smem + kh->key_offset[i]) == 0) found_it; * */ typedef struct { int *hashtable; /* hashtable[0..hashsize-1] = index of first elem, or -1 */ uint32_t hashsize; /* size of the hash table */ int *key_offset; /* key [idx=0..nkeys-1] starts at smem + key_offset[idx] */ int *nxt; /* nxt [idx=0..nkeys-1], next "pointers" in hash table */ int nkeys; /* number of keys stored */ int kalloc; /* number of keys allocated for */ char *smem; /* Array of memory for storing key strings (w/ \0's) */ int salloc; /* current allocated size of */ int sn; /* current used size of key strings, inclusive \0's */ } ESL_KEYHASH; extern ESL_KEYHASH *esl_keyhash_Create(void); extern ESL_KEYHASH *esl_keyhash_CreateCustom(uint32_t hashsize, int kalloc, int salloc); extern ESL_KEYHASH *esl_keyhash_Clone(const ESL_KEYHASH *kh); extern char * esl_keyhash_Get(const ESL_KEYHASH *kh, int idx); extern int esl_keyhash_GetNumber(const ESL_KEYHASH *kh); extern size_t esl_keyhash_Sizeof(const ESL_KEYHASH *kh); extern int esl_keyhash_Reuse(ESL_KEYHASH *kh); extern void esl_keyhash_Destroy(ESL_KEYHASH *kh); extern void esl_keyhash_Dump(FILE *fp, const ESL_KEYHASH *kh); extern int esl_keyhash_Store ( ESL_KEYHASH *kh, const char *key, esl_pos_t n, int *ret_index); extern int esl_keyhash_Lookup(const ESL_KEYHASH *kh, const char *key, esl_pos_t n, int *ret_index); #endif /* eslKEYHASH_INCLUDED */ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_exponential.tex0000664361611702660230000000213312473612606017275 0ustar wheelerteddy \begin{tabular}{lcll}\hline Variate & $x$ & \ccode{double} & $\mu \leq x < \infty$ \\ Location & $\mu$ & \ccode{double} & $-\infty < \mu < \infty$\\ Scale & $\lambda$ & \ccode{double} & $\lambda > 0$ \\ \hline \end{tabular} The probability density function (PDF) is: \begin{equation} P(X=x) = \lambda e^{-\lambda (x - \mu)} \end{equation} The cumulative distribution function (CDF) is: \begin{equation} P(X \leq x) = 1 - e^{-\lambda (x - \mu)} \end{equation} \subsection{Sampling} An exponentially distributed sample $x$ is generated by the transformation method, using the fact that if $R$ is uniformly distributed on $(0,1]$, $1-R$ is uniformly distributed on $[0,1)$: \[ R = \mbox{uniform positive sample in (0,1]}\\ x = \mu - \frac{1}{lambda} \log(R) \] \subsection{Maximum likelihood fitting} The maximum likelihood estimate $\hat{\lambda}$ is $\frac{1}{\sum_i x_i}$. The distribution of $\frac{\lambda}{\hat{\lambda}}$ is approximately normal with mean 1 and standard error $\frac{1}{\sqrt{N}}$ \citep{Lawless82}. % xref J1/p49 for derivation of standard error. hmmer-3.1b2/easel/esl_composition.h0000664361611702660230000000026412473612606016744 0ustar wheelerteddyextern int esl_composition_BL62(double *f); extern int esl_composition_WAG (double *f); extern int esl_composition_SW34(double *f); extern int esl_composition_SW50(double *f); hmmer-3.1b2/easel/esl_vectorops.tex0000664361611702660230000000624412473612610016775 0ustar wheelerteddy The \eslmod{vectorops} module contains routines for simple operations on vectors. Different functions allow an operation to be performed in vectors containing elements of different scalar types (double, float, integer). The appropriate routine is prefixed with D, F, or I. For example, \ccode{esl\_vec\_DSet()} is the Set routine for a vector of doubles; \ccode{esl\_vec\_ISet()} is for integers. Table~\ref{tbl:vectorops_api} lists the functions in the \eslmod{vectorops} API. \begin{table}[bp] \begin{center} \begin{tabular}{ll} \multicolumn{2}{c}{\textbf{All vectors}}\\ \ccode{esl\_vec\_\{D,F,I\}Set()} & Set all items in vector to scalar value.\\ \ccode{esl\_vec\_\{D,F,I\}Scale()} & Multiply all items in vector by scalar.\\ \ccode{esl\_vec\_\{D,F,I\}Increment()} & Add a scalar to all items in vector.\\ \ccode{esl\_vec\_\{D,F,I\}Sum()} & Return scalar sum of values in vector.\\ \ccode{esl\_vec\_\{D,F,I\}Add()} & Add vec2 to vec1.\\ \ccode{esl\_vec\_\{D,F,I\}AddScaled()} & Scale vec2 and add it to vec1.\\ \ccode{esl\_vec\_\{D,F,I\}Copy()} & Set vec1 to be same as vec2. \\ \ccode{esl\_vec\_\{D,F,I\}Compare()} & Compare vec1 to vec2 for equality. \\ \ccode{esl\_vec\_\{D,F,I\}Swap()} & Swap vec1 and vec2. \\ \ccode{esl\_vec\_\{D,F,I\}Dot()} & Return dot product of two vectors.\\ \ccode{esl\_vec\_\{D,F,I\}Max()} & Return value of maximum element in vector.\\ \ccode{esl\_vec\_\{D,F,I\}Min()} & Return value of minimum element in vector.\\ \ccode{esl\_vec\_\{D,F,I\}ArgMax()} & Return index of maximum element in vector.\\ \ccode{esl\_vec\_\{D,F,I\}ArgMin()} & Return index of minimum element in vector.\\ \ccode{esl\_vec\_\{D,F,I\}SortIncreasing()}& Sort vector from smallest to largest.\\ \ccode{esl\_vec\_\{D,F,I\}SortDecreasing()}& Sort vector from largest to smallest.\\ \ccode{esl\_vec\_\{D,F,I\}Dump()} & Output vector to a stream as text.\\ \multicolumn{2}{c}{\textbf{Type conversions}}\\ \ccode{esl\_vec\_\{D,I\}2F()} & Convert to single precision floats. \\ \ccode{esl\_vec\_\{F,I\}2D()} & Convert to double precision floats. \\ \multicolumn{2}{c}{\textbf{Probability vectors}}\\ \ccode{esl\_vec\_\{D,F\}Norm()} & Normalize a probability vector of length n.\\ \ccode{esl\_vec\_\{D,F\}Log()} & Convert all items in vec to log probabilities. \\ \ccode{esl\_vec\_\{D,F\}Entropy()} & Return Shannon entropy of probability vector $p$, in bits\\ \ccode{esl\_vec\_\{D,F\}RelEntropy()} & Return relative entropy $D(p \parallel q)$ of $p,q$, in bits\\ \ccode{esl\_vec\_\{D,F\}Validate()} & Verify that vector sums to one.\\ \multicolumn{2}{c}{\textbf{Log probability vectors}}\\ \ccode{esl\_vec\_\{D,F\}Exp()} & Convert log p's back to probabilities\\ \ccode{esl\_vec\_\{D,F\}LogSum()} & Given vector of log p's; return log of summed p's.\\ \ccode{esl\_vec\_\{D,F\}LogNorm()} & Normalize a log p vector, making it a prob vector. \\ \ccode{esl\_vec\_\{D,F\}LogValidate()} & Verifies that vector sums to one (in prob space). \\ \end{tabular} \end{center} \caption{The \eslmod{vectorops} API.} \label{tbl:vectorops_api} \end{table} hmmer-3.1b2/easel/esl_msafile_clustal.c0000664361611702660230000013133112473612607017544 0ustar wheelerteddy/* i/o of multiple sequence alignment files in Clustal-like formats * * Contents: * 1. API for reading/writing Clustal and Clustal-like formats * 2. Internal routines for Clustal formats. * 3. Unit tests. * 4. Test driver. * 5. Example. * 6. Copyright and license information. * * This module is responsible for i/o of both eslMSAFILE_CLUSTAL and * eslMSAFILE_CLUSTALLIKE alignment formats. */ #include "esl_config.h" #include #include #include #include #include "easel.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif #include "esl_mem.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_clustal.h" static int make_text_consensus_line(const ESL_MSA *msa, char **ret_consline); #ifdef eslAUGMENT_ALPHABET static int make_digital_consensus_line(const ESL_MSA *msa, char **ret_consline); #endif /***************************************************************** *# 1. API for reading/writing Clustal and Clustal-like formats *****************************************************************/ /* Function: esl_msafile_clustal_SetInmap() * Synopsis: Configure input map for CLUSTAL, CLUSTALLIKE formats. * * Purpose: Set the inmap> for Clustal-like formats. * * Text mode accepts any character. * Digital mode enforces the usual Easel alphabets. */ int esl_msafile_clustal_SetInmap(ESLX_MSAFILE *afp) { int sym; #ifdef eslAUGMENT_ALPHABET if (afp->abc) { for (sym = 0; sym < 128; sym++) afp->inmap[sym] = afp->abc->inmap[sym]; afp->inmap[0] = esl_abc_XGetUnknown(afp->abc); } #endif if (! afp->abc) { for (sym = 1; sym < 128; sym++) afp->inmap[sym] = (isgraph(sym) ? sym : eslDSQ_ILLEGAL); afp->inmap[0] = '?'; } return eslOK; } /* Function: esl_msafile_clustal_GuessAlphabet() * Synopsis: Guess the alphabet of an open Clustal MSA input. * * Purpose: Guess the alpbabet of the sequences in open * Clustal format MSA file . * * On a normal return, <*ret_type> is set to , * , or , and is reset to its * original position. * * Args: afp - open Clustal format MSA file * ret_type - RETURN: , , or * * Returns: on success. * if alphabet type can't be determined. * In either case, is rewound to the position it * started at. * * Throws: on allocation error. * on failures of fread() or other system calls */ int esl_msafile_clustal_GuessAlphabet(ESLX_MSAFILE *afp, int *ret_type) { int alphatype = eslUNKNOWN; esl_pos_t anchor = -1; int threshold[3] = { 500, 5000, 50000 }; /* we check after 500, 5000, 50000 residues; else we go to EOF */ int nsteps = 3; int step = 0; int nres = 0; int x; int64_t ct[26]; char *p, *tok; esl_pos_t n, toklen, pos; int status; for (x = 0; x < 26; x++) ct[x] = 0; anchor = esl_buffer_GetOffset(afp->bf); if ((status = esl_buffer_SetAnchor(afp->bf, anchor)) != eslOK) { status = eslEINCONCEIVABLE; goto ERROR; } /* [eslINVAL] can't happen here */ /* Ignore the first nonblank line, which says "CLUSTAL W (1.83) multiple sequence alignment" or some such */ while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK && esl_memspn(p, n, " \t") == n) ; if (status == eslEOF) ESL_XFAIL(eslENOALPHABET, afp->errmsg, "can't determine alphabet: no alignment data found"); else if (status != eslOK) goto ERROR; while ( (status = esl_buffer_GetLine(afp->bf, &p, &n)) == eslOK) { if ((status = esl_memtok(&p, &n, " \t", &tok, &toklen)) != eslOK) continue; /* ignore blank lines */ /* p now points to the rest of the sequence line, after a name */ /* count characters into ct[] array */ for (pos = 0; pos < n; pos++) if (isalpha(p[pos])) { x = toupper(p[pos]) - 'A'; ct[x]++; nres++; } /* try to stop early, checking after 500, 5000, and 50000 residues: */ if (step < nsteps && nres > threshold[step]) { if ((status = esl_abc_GuessAlphabet(ct, &alphatype)) == eslOK) goto DONE; /* (eslENOALPHABET) */ step++; } } if (status != eslEOF) goto ERROR; /* [eslEMEM,eslESYS,eslEINCONCEIVABLE] */ status = esl_abc_GuessAlphabet(ct, &alphatype); /* (eslENOALPHABET) */ DONE: esl_buffer_SetOffset(afp->bf, anchor); /* Rewind to where we were. */ esl_buffer_RaiseAnchor(afp->bf, anchor); *ret_type = alphatype; return status; ERROR: if (anchor != -1) { esl_buffer_SetOffset(afp->bf, anchor); esl_buffer_RaiseAnchor(afp->bf, anchor); } *ret_type = eslUNKNOWN; return status; } /* Function: esl_msafile_clustal_Read() * Synopsis: Read in a CLUSTAL or CLUSTALLIKE alignment. * * Purpose: Read an MSA from an open , parsing * for Clustal or Clustal-like format, starting from the * current point. (format> is expected to be * or .) Create a * new multiple alignment, and return a ptr to that * alignment in <*ret_msa>. Caller is responsible for * free'ing this . * * Args: afp - open * ret_msa - RETURN: newly parsed * * Returns: on success. * * if no (more) alignment data are found in * , and is returned at EOF. * * on a parse error. <*ret_msa> is set to * . contains information sufficient for * constructing useful diagnostic output: * | errmsg> | user-directed error message | * | linenumber> | line # where error was detected | * | line> | offending line (not NUL-term) | * | n> | length of offending line | * | bf->filename> | name of the file | * and is poised at the start of the following line, * so (in principle) the caller could try to resume * parsing. * * Throws: - an allocation failed. * - a system call such as fread() failed * - "impossible" corruption */ int esl_msafile_clustal_Read(ESLX_MSAFILE *afp, ESL_MSA **ret_msa) { ESL_MSA *msa = NULL; char *p = NULL; esl_pos_t n = 0; char *tok = NULL; esl_pos_t ntok = 0; int nblocks = 0; int idx = 0; int nseq = 0; int64_t alen = 0; int64_t cur_alen; esl_pos_t pos; esl_pos_t name_start, name_len; esl_pos_t seq_start, seq_len; esl_pos_t block_seq_start, block_seq_len; int status; ESL_DASSERT1( (afp->format == eslMSAFILE_CLUSTAL || afp->format == eslMSAFILE_CLUSTALLIKE) ); afp->errmsg[0] = '\0'; #ifdef eslAUGMENT_ALPHABET if (afp->abc && (msa = esl_msa_CreateDigital(afp->abc, 16, -1)) == NULL) { status = eslEMEM; goto ERROR; } #endif if (! afp->abc && (msa = esl_msa_Create( 16, -1)) == NULL) { status = eslEMEM; goto ERROR; } /* skip leading blank lines in file */ while ( (status = eslx_msafile_GetLine(afp, &p, &n)) == eslOK && esl_memspn(afp->line, afp->n, " \t") == afp->n) ; if (status != eslOK) goto ERROR; /* includes normal EOF */ /* That first line says something like: "CLUSTAL W (1.83) multiple sequence alignment" */ if (esl_memtok(&p, &n, " \t", &tok, &ntok) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "missing CLUSTAL header"); if (afp->format == eslMSAFILE_CLUSTAL && ! esl_memstrpfx(tok, ntok, "CLUSTAL")) ESL_XFAIL(eslEFORMAT, afp->errmsg, "missing CLUSTAL header"); if (! esl_memstrcontains(p, n, "multiple sequence alignment")) ESL_XFAIL(eslEFORMAT, afp->errmsg, "missing CLUSTAL header"); /* skip blank lines again */ do { status = eslx_msafile_GetLine(afp, &p, &n); if (status == eslEOF) ESL_XFAIL(eslEFORMAT, afp->errmsg, "no alignment data following header"); else if (status != eslOK) goto ERROR; } while (esl_memspn(afp->line, afp->n, " \t") == afp->n); /* idiom for "blank line" */ /* Read the file a line at a time. */ do { /* afp->line, afp->n is now the first line of a block... */ idx = 0; do { for (pos = 0; pos < n; pos++) if (! isspace(p[pos])) break; name_start = pos; for (pos = pos+1; pos < n; pos++) if ( isspace(p[pos])) break; name_len = pos - name_start; for (pos = pos+1; pos < n; pos++) if (! isspace(p[pos])) break; seq_start = pos; if (pos >= n) ESL_XFAIL(eslEFORMAT, afp->errmsg, "invalid alignment line"); for (pos = n-1; pos > 0; pos--) if (! isspace(p[pos])) break; seq_len = pos - seq_start + 1; if (idx == 0) { block_seq_start = seq_start; block_seq_len = seq_len; } else { if (seq_start != block_seq_start) ESL_XFAIL(eslEFORMAT, afp->errmsg, "sequence start is misaligned"); if (seq_len != block_seq_len) ESL_XFAIL(eslEFORMAT, afp->errmsg, "sequence end is misaligned"); } /* Store the sequence name. */ if (nblocks == 0) { /* make sure we have room for another sequence */ if (idx >= msa->sqalloc && (status = esl_msa_Expand(msa)) != eslOK) goto ERROR; if ( (status = esl_msa_SetSeqName(msa, idx, p+name_start, name_len)) != eslOK) goto ERROR; nseq++; } else { if (! esl_memstrcmp(p+name_start, name_len, msa->sqname[idx])) ESL_XFAIL(eslEFORMAT, afp->errmsg, "expected sequence %s on this line, but saw %.*s", msa->sqname[idx], (int) name_len, p+name_start); } /* Append the sequence. */ cur_alen = alen; #ifdef eslAUGMENT_ALPHABET if (msa->abc) { status = esl_abc_dsqcat(afp->inmap, &(msa->ax[idx]), &(cur_alen), p+seq_start, seq_len); } #endif if (! msa->abc) { status = esl_strmapcat (afp->inmap, &(msa->aseq[idx]), &(cur_alen), p+seq_start, seq_len); } if (status == eslEINVAL) ESL_XFAIL(eslEFORMAT, afp->errmsg, "one or more invalid sequence characters"); else if (status != eslOK) goto ERROR; if (cur_alen - alen != seq_len) ESL_XFAIL(eslEFORMAT, afp->errmsg, "unexpected number of seq characters"); /* get next line. if it's a consensus line, we're done with the block */ status = eslx_msafile_GetLine(afp, &p, &n); if (status == eslEOF) ESL_XFAIL(eslEFORMAT, afp->errmsg, "alignment block did not end with consensus line"); else if (status != eslOK) goto ERROR; idx++; } while (esl_memspn(afp->line, afp->n, " .:*") < afp->n); /* end loop over a block */ if (idx != nseq) ESL_XFAIL(eslEFORMAT, afp->errmsg, "last block didn't contain same # of seqs as earlier blocks"); /* skip blank lines until we find start of next block, or EOF */ do { status = eslx_msafile_GetLine(afp, &p, &n); if (status == eslEOF) break; else if (status != eslOK) goto ERROR; } while (esl_memspn(p, n, " \t") == n); alen += block_seq_len; nblocks++; } while (status == eslOK); /* normal end has status == EOF after last block. */ msa->nseq = nseq; msa->alen = alen; if (( status = esl_msa_SetDefaultWeights(msa)) != eslOK) goto ERROR; *ret_msa = msa; return eslOK; ERROR: if (msa) esl_msa_Destroy(msa); *ret_msa = NULL; return status; } /* Function: esl_msafile_clustal_Write() * Synopsis: Write a CLUSTAL format alignment file to a stream. * * Purpose: Write alignment to output stream , in * format . If is , * write strict CLUSTAL 2.1 format. If * is , put "EASEL (VERSION)" * in the header. * * The alignment is written in blocks of 60 aligned * residues at a time. * * Constructing the CLUSTAL consensus line properly * requires knowing the alphabet. If the is in text * mode, we don't know the alphabet, so then we use a * simplified consensus line, with '*' marking completely * conserved columns, ' ' on everything else. If the * is in digital mode and of type , then we also * use Clustal's "strong" and "weak" residue group * annotations, ':' and '.'. Strong groups are STA, NEQK, * NHQK, NDEQ, QHRK, MILV, MILF, HY, and FYW. Weak groups * are CSA, ATV, SAG, STNK, STPA, SGND, SNDEQK, NDEQHK, * NEQHRK, FVLIM, and HFY. * * Args: fp - open output stream, writable * msa - alignment to write * fmt - eslMSAFILE_CLUSTAL or eslMSAFILE_CLUSTALLIKE * * Returns: on success. * * Throws: on allocation error. * on any system write error, such as filled disk. */ int esl_msafile_clustal_Write(FILE *fp, const ESL_MSA *msa, int fmt) { int cpl = 60; int maxnamelen = 0; int namelen; char *consline = NULL; char *buf = NULL; int64_t apos; int i; int status; ESL_ALLOC(buf, sizeof(char) * (cpl+1)); buf[cpl] = '\0'; for (i = 0; i < msa->nseq; i++) { namelen = strlen(msa->sqname[i]); maxnamelen = ESL_MAX(namelen, maxnamelen); } /* Make a CLUSTAL-like consensus line */ #ifdef eslAUGMENT_ALPHABET // if (msa->abc && (status = make_digital_consensus_line(msa, &consline)) != eslOK) goto ERROR; if (msa->abc && (status = make_digital_consensus_line(msa, &consline)) != eslOK) goto ERROR; #endif if (! msa->abc && (status = make_text_consensus_line(msa, &consline)) != eslOK) goto ERROR; /* The magic header */ if (fmt == eslMSAFILE_CLUSTAL) { if (fprintf(fp, "CLUSTAL 2.1 multiple sequence alignment\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "clustal msa write failed"); } else if (fmt == eslMSAFILE_CLUSTALLIKE) { if (fprintf(fp, "EASEL (%s) multiple sequence alignment\n", EASEL_VERSION) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "clustal msa write failed"); } /* The alignment */ for (apos = 0; apos < msa->alen; apos += cpl) { if (fprintf(fp, "\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "clustal msa write failed"); for (i = 0; i < msa->nseq; i++) { #ifdef eslAUGMENT_ALPHABET if (msa->abc) esl_abc_TextizeN(msa->abc, msa->ax[i]+apos+1, cpl, buf); #endif if (! msa->abc) strncpy(buf, msa->aseq[i]+apos, cpl); if (fprintf(fp, "%-*s %s\n", maxnamelen, msa->sqname[i], buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "clustal msa write failed"); } strncpy(buf, consline+apos, cpl); if (fprintf(fp, "%-*s %s\n", maxnamelen, "", buf) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "clustal msa write failed"); } free(buf); free(consline); return eslOK; ERROR: if (buf) free(buf); if (consline) free(consline); return status; } /*---------------- end, Clustal API -----------------------------*/ /***************************************************************** * 2. Internal routines for Clustal formats *****************************************************************/ /* Clustal consensus lines. * '*' : 100% conserved positions * ':' : all residues in column belong to a "strong group" * '.' : all residues in column belong to a "weak group" * ' ' : otherwise * * Gap characters count, and ambiguity codes are interpreted verbatim, * so even a single gap or ambiguity code makes the column a ' '. * * From examining the source code for ClustalW (as it writes its * "self explanatory format", ahem!): * strong groups = STA, NEQK, NHQK, NDEQ, QHRK, MILV, MILF, * HY, FYW * weak groups = CSA, ATV, SAG, STNK, STPA, SGND, SNDEQK, * NDEQHK, NEQHRK, FVLIM, HFY * * These groups only apply to protein data, and therefore only to * digital alignments using an alphabet. * Calculating the consensus line can be compute-intensive, for large * alignments. A naive implementation (for each column, collect * residue counts, compare to each conservation group) was judged too * slow: 16.2s to write the Pkinase full alignment, compared to 1.5s * to write Stockholm format [SRE:J8/22]. Here we use a slightly less * naive implementation, which collects a bit vector (one bit per * residue) for each column, and traverses the alignment in stride * (sequences, then columns). Writing Clustal format Pkinase now takes * 2.3s, and most of the difference w.r.t. Stockholm is now assignable * to the smaller width (thus greater number of blocks) written for * Clustal (60 cpl vs 200) rather than to consensus construction. * * An oversophisticated approach could use a finite * automaton to store all groups in one machine, then to use the FA to * process each residue seen in a column; for most columns, we would * quickly reach a rejection state (most columns don't belong to * a conservation group, especially in large alignments). For a sketch * of how to construct and use such an automaton, xref SRE:J8/22. * I decided this was probably overkill, and didn't implement it. */ /* make_text_consensus_line() * * Given a text mode , allocate and create a CLUSTAL-style * consensus line; return it in <*ret_consline>. Caller is responsible * for free'ing this string. * * In text mode, we don't know the alphabet; in particular, we can't * know if the data are amino acids, so we don't know if it's * appropriate to use the amino acid group codes. So we don't; * in text mode, only '*' and ' ' appear in consensus lines. * * The consensus line is numbered 0..alen-1, and is NUL-terminated. * * Returns on success. * No normal failure codes. * Throws on allocation error. */ static int make_text_consensus_line(const ESL_MSA *msa, char **ret_consline) { char *consline = NULL; uint32_t *v = NULL; uint32_t tmpv, maxv; int n; int idx, apos, x; int status; ESL_ALLOC(consline, sizeof(char) * (msa->alen+1)); ESL_ALLOC(v, sizeof(uint32_t) * (msa->alen)); for (apos = 0; apos < msa->alen; apos++) v[apos] = 0; for (idx = 0; idx < msa->nseq; idx++) for (apos = 0; apos < msa->alen; apos++) { x = toupper(msa->aseq[idx][apos]) - 'A'; if (x >= 0 && x < 26) v[apos] |= (1 << x); else v[apos] |= (1 << 26); } maxv = (1 << 26) - 1; for (apos = 0; apos < msa->alen; apos++) { for (n = 0, tmpv = v[apos]; tmpv; n++) tmpv &= tmpv-1; /* Kernighan magic: count # of bits set in tmpv */ consline[apos] = ((n == 1 && v[apos] < maxv) ? '*' : ' '); } consline[msa->alen] = '\0'; *ret_consline = consline; free(v); return eslOK; ERROR: if (v) free(v); if (consline) free(consline); *ret_consline = NULL; return status; } /* make_digital_consensus_line() * * Exactly the same as make_text_consensus_line(), except for * digital mode . */ #ifdef eslAUGMENT_ALPHABET static int matches_group_digital(ESL_ALPHABET *abc, uint32_t v, char *group) { uint32_t gv = 0; ESL_DSQ sym; char *c; for (c = group; *c; c++) { sym = esl_abc_DigitizeSymbol(abc, *c); gv |= (1 << sym); } return ( ((v & gv) == v) ? TRUE : FALSE); } static int make_digital_consensus_line(const ESL_MSA *msa, char **ret_consline) { char *consline = NULL; uint32_t *v = NULL; uint32_t tmpv, maxv; int n; int idx, apos; int status; /* if this ever becomes a problem, easy enough to make v a uint64_t to get up to Kp<=64 */ if (msa->abc->Kp > 32) ESL_EXCEPTION(eslEINVAL, "Clustal format writer cannot handle digital alphabets of Kp>32 residues"); ESL_ALLOC(v, sizeof(uint32_t) * (msa->alen+1)); ESL_ALLOC(consline, sizeof(char) * (msa->alen+1)); for (apos = 0; apos <= msa->alen; apos++) v[apos] = 0; for (idx = 0; idx < msa->nseq; idx++) for (apos = 1; apos <= msa->alen; apos++) v[apos] |= (1 << msa->ax[idx][apos]); maxv = (1 << msa->abc->K) - 1; /* maxv: has all canonical residue bits set */ for (apos = 1; apos <= msa->alen; apos++) { consline[apos-1] = ' '; for (n = 0, tmpv = v[apos]; tmpv; n++) tmpv &= tmpv-1; /* Kernighan magic: count # of bits set in tmpv */ if (n == 0 || n > 6) continue; /* n==0 shouldn't happen; n > 6 means too many different residues seen */ else if (v[apos] > maxv) continue; /* gap or ambiguity chars seen; column must be left unannotated */ else if (n == 1) consline[apos-1] = '*'; /* complete conservation of a canonical residue */ else if (msa->abc->type == eslAMINO) { if (matches_group_digital(msa->abc, v[apos], "STA")) consline[apos-1] = ':'; else if (matches_group_digital(msa->abc, v[apos], "NEQK")) consline[apos-1] = ':'; else if (matches_group_digital(msa->abc, v[apos], "NHQK")) consline[apos-1] = ':'; else if (matches_group_digital(msa->abc, v[apos], "NDEQ")) consline[apos-1] = ':'; else if (matches_group_digital(msa->abc, v[apos], "QHRK")) consline[apos-1] = ':'; else if (matches_group_digital(msa->abc, v[apos], "MILV")) consline[apos-1] = ':'; else if (matches_group_digital(msa->abc, v[apos], "MILF")) consline[apos-1] = ':'; else if (matches_group_digital(msa->abc, v[apos], "HY")) consline[apos-1] = ':'; else if (matches_group_digital(msa->abc, v[apos], "FYW")) consline[apos-1] = ':'; else if (matches_group_digital(msa->abc, v[apos], "CSA")) consline[apos-1] = '.'; else if (matches_group_digital(msa->abc, v[apos], "ATV")) consline[apos-1] = '.'; else if (matches_group_digital(msa->abc, v[apos], "SAG")) consline[apos-1] = '.'; else if (matches_group_digital(msa->abc, v[apos], "STNK")) consline[apos-1] = '.'; else if (matches_group_digital(msa->abc, v[apos], "STPA")) consline[apos-1] = '.'; else if (matches_group_digital(msa->abc, v[apos], "SGND")) consline[apos-1] = '.'; else if (matches_group_digital(msa->abc, v[apos], "SNDEQK")) consline[apos-1] = '.'; else if (matches_group_digital(msa->abc, v[apos], "NDEQHK")) consline[apos-1] = '.'; else if (matches_group_digital(msa->abc, v[apos], "NEQHRK")) consline[apos-1] = '.'; else if (matches_group_digital(msa->abc, v[apos], "FVLIM")) consline[apos-1] = '.'; else if (matches_group_digital(msa->abc, v[apos], "HFY")) consline[apos-1] = '.'; } } consline[apos-1] = '\0'; *ret_consline = consline; free(v); return eslOK; ERROR: if (v) free(v); if (consline) free(consline); *ret_consline = NULL; return eslOK; } #endif /*eslAUGMENT_ALPHABET*/ /*-------------- end, internal clustal routines -----------------*/ /***************************************************************** * 3. Unit tests. *****************************************************************/ #ifdef eslMSAFILE_CLUSTAL_TESTDRIVE static void utest_write_good1(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs("MUSCLE (3.7) multiple sequence alignment\n", ofp); fputs("\n", ofp); fputs("\n", ofp); fputs("MYG_PHYCA --------V-LSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKT\n", ofp); fputs("GLB5_PETMA PIVDTGSVAPLSAAEKTKIRSAWAPVYSTYETSGVDILVKFFTSTPAAQEFFPKFKGLTT\n", ofp); fputs("HBB_HUMAN --------VHLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLST\n", ofp); fputs("HBA_HUMAN --------V-LSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF-----\n", ofp); fputs(" . *: :. : *. * * : * .:: * : * * \n", ofp); fputs("\n", ofp); fputs("MYG_PHYCA EAEMKASEDLKKHGVTVLTALGAILKKKGH---HEAELKPLAQSHATKHKIPIKYLEFIS\n", ofp); fputs("GLB5_PETMA ADQLKKSADVRWHAERIINAVNDAVASMDDTEKMSMKLRDLSGKHAKSFQVDPQYFKVLA\n", ofp); fputs("HBB_HUMAN PDAVMGNPKVKAHGKKVLGAFSDGLAHLDN---LKGTFATLSELHCDKLHVDPENFRLLG\n", ofp); fputs("HBA_HUMAN -DLSHGSAQVKGHGKKVADALTNAVAHVDD---MPNALSALSDLHAHKLRVDPVNFKLLS\n", ofp); fputs(" \n", ofp); /* deliberately made blank */ fputs("\n", ofp); fputs("MYG_PHYCA EAIIHVLHSRHPGDFGADAQGAMNKALELFRKDIAAKYKELGYQG\n", ofp); fputs("GLB5_PETMA AVI---------ADTVAAGDAGFEKLMSMICILLRSAY-------\n", ofp); fputs("HBB_HUMAN NVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH------\n", ofp); fputs("HBA_HUMAN HCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR------\n", ofp); fputs(" : : . .. :* : . : * \n", ofp); fputs("\n", ofp); *ret_format = eslMSAFILE_CLUSTALLIKE; *ret_alphatype = eslAMINO; *ret_nseq = 4; *ret_alen = 165; } static void utest_write_good2(FILE *ofp, int *ret_format, int *ret_alphatype, int *ret_nseq, int *ret_alen) { fputs("CLUSTAL W (1.81) multiple sequence alignment\n", ofp); fputs("\n", ofp); fputs("tRNA2 UCCGAUAUAGUGUAACGGCUAUCACAUCACGCUUUCACCGUGG-AGACCGGGGUUCGACU\n", ofp); fputs("tRNA3 UCCGUGAUAGUUUAAUGGUCAGAAUGG-GCGCUUGUCGCGUGCCAGAUCGGGGUUCAAUU\n", ofp); fputs("tRNA5 GGGCACAUGGCGCAGUUGGUAGCGCGCUUCCCUUGCAAGGAAGAGGUCAUCGGUUCGAUU\n", ofp); fputs("tRNA1 GCGGAUUUAGCUCAGUUGGGAGAGCGCCAGACUGAAGAUCUGGAGGUCCUGUGUUCGAUC\n", ofp); fputs("tRNA4 GCUCGUAUGGCGCAGUGG-UAGCGCAGCAGAUUGCAAAUCUGUUGGUCCUUAGUUCGAUC\n", ofp); fputs(" * * * * * * * **** * \n", ofp); fputs("\n", ofp); fputs("tRNA2 CCCCGUAUCGGAG\n", ofp); fputs("tRNA3 CCCCGUCGCGGAG\n", ofp); fputs("tRNA5 CCGGUUGCGUCCA\n", ofp); fputs("tRNA1 CACAGAAUUCGCA\n", ofp); fputs("tRNA4 CUGAGUGCGAGCU\n", ofp); fputs(" * \n", ofp); *ret_format = eslMSAFILE_CLUSTAL; *ret_alphatype = eslRNA; *ret_nseq = 5; *ret_alen = 73; } static void utest_goodfile(char *filename, int testnumber, int expected_format, int expected_alphatype, int expected_nseq, int expected_alen) { ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa1 = NULL; ESL_MSA *msa2 = NULL; char tmpfile1[32] = "esltmpXXXXXX"; char tmpfile2[32] = "esltmpXXXXXX"; FILE *ofp = NULL; int status; /* guessing both the format and the alphabet should work: this is a digital open */ if ( (status = eslx_msafile_Open(&abc, filename, NULL, eslMSAFILE_UNKNOWN, NULL, &afp)) != eslOK) esl_fatal("clustal good file test %d failed: digital open", testnumber); if (afp->format != expected_format) esl_fatal("clustal good file test %d failed: format autodetection", testnumber); if (abc->type != expected_alphatype) esl_fatal("clustal good file test %d failed: alphabet autodetection", testnumber); /* This is a digital read, using . */ if ( (status = esl_msafile_clustal_Read(afp, &msa1)) != eslOK) esl_fatal("clustal good file test %d failed: msa read, digital", testnumber); if (msa1->nseq != expected_nseq || msa1->alen != expected_alen) esl_fatal("clustal good file test %d failed: nseq/alen", testnumber); if (esl_msa_Validate(msa1, NULL) != eslOK) esl_fatal("clustal good file test %d failed: msa1 invalid", testnumber); eslx_msafile_Close(afp); /* write it back out to a new tmpfile (digital write) */ if ( (status = esl_tmpfile_named(tmpfile1, &ofp)) != eslOK) esl_fatal("clustal good file test %d failed: tmpfile creation", testnumber); if ( (status = esl_msafile_clustal_Write(ofp, msa1, expected_format)) != eslOK) esl_fatal("clustal good file test %d failed: msa write, digital", testnumber); fclose(ofp); /* now open and read it as text mode, in known format. (We have to pass fmtd now, to deal with the possibility of a nonstandard name width) */ if ( (status = eslx_msafile_Open(NULL, tmpfile1, NULL, expected_format, NULL, &afp)) != eslOK) esl_fatal("clustal good file test %d failed: text mode open", testnumber); if ( (status = esl_msafile_clustal_Read(afp, &msa2)) != eslOK) esl_fatal("clustal good file test %d failed: msa read, text", testnumber); if (msa2->nseq != expected_nseq || msa2->alen != expected_alen) esl_fatal("clustal good file test %d failed: nseq/alen", testnumber); if (esl_msa_Validate(msa2, NULL) != eslOK) esl_fatal("clustal good file test %d failed: msa2 invalid", testnumber); eslx_msafile_Close(afp); /* write it back out to a new tmpfile (text write) */ if ( (status = esl_tmpfile_named(tmpfile2, &ofp)) != eslOK) esl_fatal("clustal good file test %d failed: tmpfile creation", testnumber); if ( (status = esl_msafile_clustal_Write(ofp, msa2, expected_format)) != eslOK) esl_fatal("clustal good file test %d failed: msa write, text", testnumber); fclose(ofp); esl_msa_Destroy(msa2); /* open and read it in digital mode */ if ( (status = eslx_msafile_Open(&abc, tmpfile1, NULL, expected_format, NULL, &afp)) != eslOK) esl_fatal("clustal good file test %d failed: 2nd digital mode open", testnumber); if ( (status = esl_msafile_clustal_Read(afp, &msa2)) != eslOK) esl_fatal("clustal good file test %d failed: 2nd digital msa read", testnumber); if (esl_msa_Validate(msa2, NULL) != eslOK) esl_fatal("clustal good file test %d failed: msa2 invalid", testnumber); eslx_msafile_Close(afp); /* this msa should be identical to */ if (esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal("clustal good file test %d failed: msa compare", testnumber); remove(tmpfile1); remove(tmpfile2); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_alphabet_Destroy(abc); } static void write_test_msas(FILE *ofp1, FILE *ofp2) { fprintf(ofp1, "EASEL (X.x) multiple sequence alignment\n"); fprintf(ofp1, "\n"); fprintf(ofp1, "seq1 ..acdefghiklmnpqrstvwy\n"); fprintf(ofp1, "seq2 ..acdefghiklmnpqrstv--\n"); fprintf(ofp1, "seq3 aaacdefghiklmnpqrstv--\n"); fprintf(ofp1, "seq4 ..acdefghiklmnpqrstvwy\n"); fprintf(ofp1, " ****************** \n"); fprintf(ofp1, "\n"); fprintf(ofp1, "seq1 ACDEFGHIKLMNPQRSTVWY\n"); fprintf(ofp1, "seq2 ACDEFGHIKLMNPQRSTVWY\n"); fprintf(ofp1, "seq3 ACDEFGHIKLMNPQRSTVWY\n"); fprintf(ofp1, "seq4 ACDEFGHIKLMNPQRSTVWY\n"); fprintf(ofp1, " ********************\n"); fprintf(ofp1, "\n"); fprintf(ofp1, "seq1 ..\n"); fprintf(ofp1, "seq2 YY\n"); fprintf(ofp1, "seq3 ..\n"); fprintf(ofp1, "seq4 ..\n"); fprintf(ofp1, "\n"); fprintf(ofp2, "# STOCKHOLM 1.0\n"); fprintf(ofp2, "\n"); fprintf(ofp2, "seq1 ..acdefghiklmnpqrstvwyACDEFGHIKLMNPQRSTVWY..\n"); fprintf(ofp2, "seq2 ..acdefghiklmnpqrstv--ACDEFGHIKLMNPQRSTVWYYY\n"); fprintf(ofp2, "seq3 aaacdefghiklmnpqrstv--ACDEFGHIKLMNPQRSTVWY..\n"); fprintf(ofp2, "seq4 ..acdefghiklmnpqrstvwyACDEFGHIKLMNPQRSTVWY..\n"); fprintf(ofp2, "//\n"); } static void read_test_msas_digital(char *alnfile, char *stkfile) { char msg[] = "CLUSTAL msa digital read unit test failed"; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp1 = NULL; ESLX_MSAFILE *afp2 = NULL; ESL_MSA *msa1, *msa2, *msa3, *msa4; FILE *alnfp, *stkfp; char alnfile2[32] = "esltmpaln2XXXXXX"; char stkfile2[32] = "esltmpstk2XXXXXX"; if ( eslx_msafile_Open(&abc, alnfile, NULL, eslMSAFILE_CLUSTALLIKE, NULL, &afp1) != eslOK) esl_fatal(msg); if ( !abc || abc->type != eslAMINO) esl_fatal(msg); if ( eslx_msafile_Open(&abc, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_clustal_Read (afp1, &msa1) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa2) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal(msg); if ( esl_msafile_clustal_Read (afp1, &msa3) != eslEOF) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa3) != eslEOF) esl_fatal(msg); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); /* Now write stk to clustal file, and vice versa; then retest */ if ( esl_tmpfile_named(alnfile2, &alnfp) != eslOK) esl_fatal(msg); if ( esl_tmpfile_named(stkfile2, &stkfp) != eslOK) esl_fatal(msg); if ( esl_msafile_clustal_Write (alnfp, msa2, eslMSAFILE_CLUSTAL) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_STOCKHOLM) != eslOK) esl_fatal(msg); fclose(alnfp); fclose(stkfp); if ( eslx_msafile_Open(&abc, alnfile2, NULL, eslMSAFILE_CLUSTAL, NULL, &afp1) != eslOK) esl_fatal(msg); if ( eslx_msafile_Open(&abc, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_clustal_Read (afp1, &msa3) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa4) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa3, msa4) != eslOK) esl_fatal(msg); remove(alnfile2); remove(stkfile2); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_msa_Destroy(msa3); esl_msa_Destroy(msa4); esl_alphabet_Destroy(abc); } static void read_test_msas_text(char *alnfile, char *stkfile) { char msg[] = "CLUSTAL msa text-mode read unit test failed"; ESLX_MSAFILE *afp1 = NULL; ESLX_MSAFILE *afp2 = NULL; ESL_MSA *msa1, *msa2, *msa3, *msa4; FILE *alnfp, *stkfp; char alnfile2[32] = "esltmpaln2XXXXXX"; char stkfile2[32] = "esltmpstk2XXXXXX"; /* vvvv-- everything's the same as the digital utest except these NULLs */ if ( eslx_msafile_Open(NULL, alnfile, NULL, eslMSAFILE_CLUSTALLIKE, NULL, &afp1) != eslOK) esl_fatal(msg); if ( eslx_msafile_Open(NULL, stkfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_clustal_Read (afp1, &msa1) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa2) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa1, msa2) != eslOK) esl_fatal(msg); if ( esl_msafile_clustal_Read (afp1, &msa3) != eslEOF) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa3) != eslEOF) esl_fatal(msg); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); if ( esl_tmpfile_named(alnfile2, &alnfp) != eslOK) esl_fatal(msg); if ( esl_tmpfile_named(stkfile2, &stkfp) != eslOK) esl_fatal(msg); if ( esl_msafile_clustal_Write (alnfp, msa2, eslMSAFILE_CLUSTAL) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Write(stkfp, msa1, eslMSAFILE_STOCKHOLM) != eslOK) esl_fatal(msg); fclose(alnfp); fclose(stkfp); if ( eslx_msafile_Open(NULL, alnfile2, NULL, eslMSAFILE_CLUSTAL, NULL, &afp1) != eslOK) esl_fatal(msg); if ( eslx_msafile_Open(NULL, stkfile2, NULL, eslMSAFILE_STOCKHOLM, NULL, &afp2) != eslOK) esl_fatal(msg); if ( esl_msafile_clustal_Read (afp1, &msa3) != eslOK) esl_fatal(msg); if ( esl_msafile_stockholm_Read(afp2, &msa4) != eslOK) esl_fatal(msg); if ( esl_msa_Compare(msa3, msa4) != eslOK) esl_fatal(msg); remove(alnfile2); remove(stkfile2); eslx_msafile_Close(afp2); eslx_msafile_Close(afp1); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_msa_Destroy(msa3); esl_msa_Destroy(msa4); } #endif /*eslMSAFILE_CLUSTAL_TESTDRIVE*/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 4. Test driver. *****************************************************************/ #ifdef eslMSAFILE_CLUSTAL_TESTDRIVE /* compile: gcc -g -Wall -I. -L. -o esl_msafile_clustal_utest -DeslMSAFILE_CLUSTAL_TESTDRIVE esl_msafile_clustal.c -leasel -lm * (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile_clustal_utest -DeslMSAFILE_CLUSTAL_TESTDRIVE esl_msafile_clustal.c -leasel -lm * run: ./esl_msafile_clustal_utest */ #include "esl_config.h" #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_msafile.h" #include "esl_msafile_clustal.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for CLUSTAL MSA format module"; int main(int argc, char **argv) { char msg[] = "CLUSTAL MSA i/o module test driver failed"; ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); char alnfile[32] = "esltmpalnXXXXXX"; char stkfile[32] = "esltmpstkXXXXXX"; FILE *alnfp, *stkfp; int testnumber; int ngoodtests = 2; char tmpfile[32]; FILE *ofp; int expected_format; int expected_alphatype; int expected_nseq; int expected_alen; if ( esl_tmpfile_named(alnfile, &alnfp) != eslOK) esl_fatal(msg); if ( esl_tmpfile_named(stkfile, &stkfp) != eslOK) esl_fatal(msg); write_test_msas(alnfp, stkfp); fclose(alnfp); fclose(stkfp); read_test_msas_digital(alnfile, stkfile); read_test_msas_text (alnfile, stkfile); /* Various "good" files that should be parsed correctly */ for (testnumber = 1; testnumber <= ngoodtests; testnumber++) { strcpy(tmpfile, "esltmpXXXXXX"); if (esl_tmpfile_named(tmpfile, &ofp) != eslOK) esl_fatal(msg); switch (testnumber) { case 1: utest_write_good1 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break; case 2: utest_write_good2 (ofp, &expected_format, &expected_alphatype, &expected_nseq, &expected_alen); break; } fclose(ofp); utest_goodfile(tmpfile, testnumber, expected_format, expected_alphatype, expected_nseq, expected_alen); remove(tmpfile); } remove(alnfile); remove(stkfile); esl_getopts_Destroy(go); return 0; } #endif /*eslMSAFILE_CLUSTAL_TESTDRIVE*/ /*--------------------- end, test driver ------------------------*/ /***************************************************************** * 5. Examples. *****************************************************************/ #ifdef eslMSAFILE_CLUSTAL_EXAMPLE /* A full-featured example of reading/writing an MSA in Clustal format(s). gcc -g -Wall -o esl_msafile_clustal_example -I. -L. -DeslMSAFILE_CLUSTAL_EXAMPLE esl_msafile_clustal.c -leasel -lm ./esl_msafile_clustal_example */ /*::cexcerpt::msafile_clustal_example::begin::*/ #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_clustal.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "no autodetection; use CLUSTAL format", 0 }, { "-2", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "no autodetection; use CLUSTALLIKE format", 0 }, { "-q", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "quieter: don't write msa back, just summary", 0 }, { "-t", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use text mode: no digital alphabet", 0 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is DNA", 0 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is RNA", 0 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t", "specify that alphabet is protein", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of guessing, reading, writing Clustal formats"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *filename = esl_opt_GetArg(go, 1); int infmt = eslMSAFILE_UNKNOWN; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; int status; if (esl_opt_GetBoolean(go, "-1")) infmt = eslMSAFILE_CLUSTAL; else if (esl_opt_GetBoolean(go, "-2")) infmt = eslMSAFILE_CLUSTALLIKE; if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); /* Text mode: pass NULL for alphabet. * Digital mode: pass ptr to expected ESL_ALPHABET; and if abc=NULL, alphabet is guessed */ if (esl_opt_GetBoolean(go, "-t")) status = eslx_msafile_Open(NULL, filename, NULL, infmt, NULL, &afp); else status = eslx_msafile_Open(&abc, filename, NULL, infmt, NULL, &afp); if (status != eslOK) eslx_msafile_OpenFailure(afp, status); if ( (status = esl_msafile_clustal_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); printf("format variant: %s\n", eslx_msafile_DecodeFormat(afp->format)); printf("alphabet: %s\n", (abc ? esl_abc_DecodeType(abc->type) : "none (text mode)")); printf("# of seqs: %d\n", msa->nseq); printf("# of cols: %d\n", (int) msa->alen); printf("\n"); if (! esl_opt_GetBoolean(go, "-q")) esl_msafile_clustal_Write(stdout, msa, eslMSAFILE_CLUSTAL); esl_msa_Destroy(msa); eslx_msafile_Close(afp); if (abc) esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); exit(0); } /*::cexcerpt::msafile_clustal_example::end::*/ #endif /*eslMSAFILE_CLUSTAL_EXAMPLE*/ #ifdef eslMSAFILE_CLUSTAL_EXAMPLE2 /* A minimal example. Read Clustal MSA, in text mode. gcc -g -Wall -o esl_msafile_clustal_example2 -I. -L. -DeslMSAFILE_CLUSTAL_EXAMPLE2 esl_msafile_clustal.c -leasel -lm ./esl_msafile_clustal_example2 */ /*::cexcerpt::msafile_clustal_example2::begin::*/ #include #include "easel.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile_clustal.h" int main(int argc, char **argv) { char *filename = argv[1]; int fmt = eslMSAFILE_CLUSTAL; /* or eslMSAFILE_CLUSTALLIKE */ ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; int status; if ( (status = eslx_msafile_Open(NULL, filename, NULL, fmt, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); if ( (status = esl_msafile_clustal_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); printf("%6d seqs, %5d columns\n", msa->nseq, (int) msa->alen); esl_msafile_clustal_Write(stdout, msa, eslMSAFILE_CLUSTAL); esl_msa_Destroy(msa); eslx_msafile_Close(afp); exit(0); } /*::cexcerpt::msafile_clustal_example2::end::*/ #endif /*eslMSAFILE_CLUSTAL_EXAMPLE2*/ /*--------------------- end of example --------------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msafile_clustal.c 727 2011-10-24 17:17:32Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msafile_clustal.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_scorematrix.tex0000664361611702660230000000573112473612607017317 0ustar wheelerteddyThe \eslmod{scorematrix} module implements standard residue pairwise alignment scoring systems (such as BLOSUM matrices), and their probabilistic interpretation \citep{Altschul91,YuAltschul03}. Table~\ref{tbl:scorematrix_api} lists the functions in the \eslmod{scorematrix} API. The module implements one object, \ccode{ESL\_SCOREMATRIX}, which holds a score matrix with integer scores. \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \apisubhead{The \ccode{ESL\_SCOREMATRIX} object.}\\ \hyperlink{func:esl_scorematrix_Create()}{\ccode{esl\_scorematrix\_Create()}} & Create an \ccode{ESL\_SCOREMATRIX}.\\ \hyperlink{func:esl_scorematrix_SetWAG()}{\ccode{esl\_scorematrix\_SetWAG()}} & Parameterize matrix from the WAG evolutionary model. \\ \hyperlink{func:esl_scorematrix_SetFromProbs()}{\ccode{esl\_scorematrix\_SetFromProbs()}} & Set matrix scores from target and background probabilities.\\ \hyperlink{func:esl_scorematrix_Compare()}{\ccode{esl\_scorematrix\_Compare()}} & Compare two matrices for equality.\\ \hyperlink{func:esl_scorematrix_Max()}{\ccode{esl\_scorematrix\_Max()}} & Returns maximum value in score matrix.\\ \hyperlink{func:esl_scorematrix_Min()}{\ccode{esl\_scorematrix\_Min()}} & Returns minimum value in score matrix.\\ %\hyperlink{func:esl_scorematrix_RelativeEntropy()}{\ccode{esl\_scorematrix\_RelativeEntropy()}} & Returns relative entropy of a matrix.\\ \hyperlink{func:esl_scorematrix_IsSymmetric()}{\ccode{esl\_scorematrix\_IsSymmetric()}} & Returns \ccode{TRUE} for symmetric matrix.\\ \hyperlink{func:esl_scorematrix_Destroy()}{\ccode{esl\_scorematrix\_Destroy()}} & Frees a matrix.\\ \apisubhead{Reading/writing score matrices.}\\ \hyperlink{func:esl_scorematrix_Read()}{\ccode{esl\_scorematrix\_Read()}} & Read a standard matrix input file.\\ \hyperlink{func:esl_scorematrix_Write()}{\ccode{esl\_scorematrix\_Write()}} & Write a BLAST-compatible score matrix file.\\ %\apisubhead{Interpreting matrices probabilistically.}\\ %\hyperlink{func:esl_scorematrix_ObtainPij()}{\ccode{esl\_scorematrix\_ObtainPij()}} & Obtain $P_{ij}$ from score matrix with known $\lambda$ and background $f$'s.\\ %\hyperlink{func:esl_scorematrix_SolveLambda()}{\ccode{esl\_scorematrix\_SolveLambda()}} & Find $\lambda$ for score matrix, given background.\\ %\hyperlink{func:esl_scorematrix_ReverseEngineer()}{\ccode{esl\_scorematrix\_ReverseEngineer()}} & Calculate the probabilistic basis of a score matrix.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{scorematrix} API.} \label{tbl:scorematrix_api} \end{table} \subsection{An example of using the scorematrix API} Figure~\ref{fig:scorematrix_example} shows an example of reading a matrix file from disk, reverse engineering it \citep{YuAltschul03} to obtain its target probabilities, background frequencies, and lambda, then printing information about it: \begin{figure} \input{cexcerpts/scorematrix_example} \caption{An example of using the \eslmod{scorematrix} module.} \label{fig:scorematrix_example} \end{figure} hmmer-3.1b2/easel/esl_keyhash.tex0000664361611702660230000000704512473612606016412 0ustar wheelerteddy The \eslmod{keyhash} module provides a semblance of associative arrays (for example, Perl hashes), by associating keywords with an integer array index, and storing the association in an internal hash table for rapid access. Table~\ref{tbl:keyhash_api} lists the functions in the \eslmod{keyhash} API. The module implements one object: the \ccode{ESL\_KEYHASH}. % Table generated by autodoc -t esl_keyhash.c (so don't edit here, edit esl_keyhash.c:) \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \apisubhead{The \ccode{ESL\_KEYHASH} object}\\ \hyperlink{func:esl_keyhash_Create()}{\ccode{esl\_keyhash\_Create()}} & Allocates a new keyhash.\\ \hyperlink{func:esl_keyhash_Clone()}{\ccode{esl\_keyhash\_Clone()}} & Duplicates a keyhash.\\ \hyperlink{func:esl_keyhash_Get()}{\ccode{esl\_keyhash\_Get()}} & Returns a key name, given its index.\\ \hyperlink{func:esl_keyhash_GetNumber()}{\ccode{esl\_keyhash\_GetNumber()}} & Returns the total number of keys stored.\\ \hyperlink{func:esl_keyhash_Reuse()}{\ccode{esl\_keyhash\_Reuse()}} & Reuse a keyhash.\\ \hyperlink{func:esl_keyhash_Destroy()}{\ccode{esl\_keyhash\_Destroy()}} & Frees a keyhash.\\ \hyperlink{func:esl_keyhash_Dump()}{\ccode{esl\_keyhash\_Dump()}} & Dumps debugging information about a keyhash.\\ \apisubhead{Storing and retrieving keys }\\ \hyperlink{func:esl_keyhash_Store()}{\ccode{esl\_key\_Store()}} & Store a key and get a key index for it.\\ \hyperlink{func:esl_keyhash_Lookup()}{\ccode{esl\_key\_Lookup()}} & Look up a key's array index.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{keyhash} API.} \label{tbl:keyhash_api} \end{table} \subsection{Example of using the keyhash API} The idea behind using the keyhash module is shown in this fragment of pseudocode: \begin{cchunk} #include "easel.h" #include "esl_keyhash.h" ESL_KEYHASH *kh = esl_keyhash_Create(); int idx; char *key; esl_pos_t keylen; /* To store keys: */ (foreach key) { esl_keyhash_Store(hash, key, keylen, &idx); (reallocate foo, bar as needed) foo[idx] = whatever; bar[idx] = whatever; } /* To look up keys: */ (foreach key) { if (esl_keyhash_Lookup(hash, key, keylen, &idx) != eslOK) { no_such_key; } (do something with) foo[idx]; (do something with) bar[idx]; } esl_keyhash_Destroy(); \end{cchunk} That is, the application maintains data in normal C-style arrays that are indexed by an integer index value, and it uses the keyhash to associate a specific key with that integer index. To store info, you first store the keyword and obtain a new index value (this simply starts at 0 and counts up, as you store successive keys), then you store the info your arrays at that index. To look up info, you look up the keyword to obtain the index, then you access the info by indexing into your arrays. This is the moral equivalent of Perl's associative arrays, as in \ccode{\$foo\{\$key\} = whatever; \$bar\{\$key\} = whatever}. For example, Figure~\ref{fig:keyhash_example} is a contrived example of storing the keywords obtained from a list in one file, then looking up keywords listed in a second file. It doesn't demonstrate the idea of using the index to store and retrieve additional info associated with the keyword, but it demonstrates the essentials of the \eslmod{keyhash} API. \begin{figure} \input{cexcerpts/keyhash_example} \caption{Example of using the \eslmod{keyhash} API.} \label{fig:keyhash_example} \end{figure} hmmer-3.1b2/easel/interface_lapack.c0000664361611702660230000000623112473612610016777 0ustar wheelerteddy/* Interface with the LAPACK (Fortran77) numerical library. */ #ifdef HAVE_LIBLAPACK #include "esl_config.h" #include #include "easel/easel.h" #include "easel/dmatrix.h" #include "easel/interface_lapack.h" /* A: nxn real matrix * ret_Er: RETURN: vector of eigenvalues, real part, allocated 0..n-1 * ret_Ei: RETURN: vector of eigenvalues, imaginary part, allocated 0..n-1 * ret_VL: RETURN: left eigenvectors * ret_VR: RETURN: right eigenvectors */ int esl_lapack_dgeev(ESL_DMATRIX *A, double **ret_Er, double **ret_Ei, ESL_DMATRIX **ret_VL, ESL_DMATRIX **ret_VR) { double *Er = NULL; double *Ei = NULL; ESL_DMATRIX *VL = NULL; ESL_DMATRIX *VR = NULL; double *work = NULL; char jobvl, jobvr; int lda; int ldvl, ldvr; int lwork; int info; int status; if ((VL = esl_dmatrix_Create(A->n,A->n)) == NULL) { status = eslEMEM; goto ERROR; } if ((VR = esl_dmatrix_Create(A->n,A->n)) == NULL) { status = eslEMEM; goto ERROR; } ESL_ALLOC(Er, sizeof(double) * A->n); ESL_ALLOC(Ei, sizeof(double) * A->n); ESL_ALLOC(work, sizeof(double) * 4 * A->n); jobvl = (ret_VL == NULL) ? 'N' : 'V'; /* do we want left eigenvectors? */ jobvr = (ret_VR == NULL) ? 'N' : 'V'; /* do we want right eigenvectors? */ lda = A->n; ldvl = A->n; ldvr = A->n; lwork = 4*A->n; /* Fortran convention is colxrow, not rowxcol; so transpose * A before passing it to a Fortran routine. */ esl_dmx_Transpose(A); /* The actual Fortran77 interface call to LAPACK. * All args must be passed by reference. * Fortran 2D arrays are 1D: so pass the A[0] part of a DSMX. */ dgeev_(&jobvl, &jobvr, &(A->n), A->mx[0], &lda, Er, Ei, VL->mx[0], &ldvl, VR->mx[0], &ldvr, work, &lwork, &info); /* Now, VL, VR are transposed (col x row), so transpose them back to * C convention. */ esl_dmx_Transpose(VL); esl_dmx_Transpose(VR); if (ret_VL != NULL) *ret_VL = VL; else esl_dmatrix_Destroy(VL); if (ret_VR != NULL) *ret_VR = VR; else esl_dmatrix_Destroy(VR); if (ret_Er != NULL) *ret_Er = Er; else free(Er); if (ret_Ei != NULL) *ret_Ei = Ei; else free(Ei); free(work); return eslOK; ERROR: if (ret_VL != NULL) *ret_VL = NULL; if (ret_VR != NULL) *ret_VR = NULL; if (ret_Er != NULL) *ret_Er = NULL; if (ret_Ei != NULL) *ret_Ei = NULL; if (VL != NULL) free(VL); if (VR != NULL) free(VR); if (Er != NULL) free(Er); if (Ei != NULL) free(Ei); if (work != NULL) free(work); return status; } #endif /*HAVE_LIBLAPACK*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: interface_lapack.c 685 2011-05-23 14:27:52Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/interface_lapack.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_hmm.c0000664361611702660230000005247712473612606015172 0ustar wheelerteddy/* General hidden Markov models (discrete, of alphabetic strings) */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_hmm.h" #include "esl_random.h" #include "esl_vectorops.h" /* Function: esl_hmm_Create() * Synopsis: Allocates a new HMM. * * Purpose: Allocates a new HMM of states for * generating or modeling strings in the * alphabet . * * Returns: a pointer to the new HMM. * * Throws: on allocation failure. */ ESL_HMM * esl_hmm_Create(const ESL_ALPHABET *abc, int M) { ESL_HMM *hmm = NULL; int k,x; int status; ESL_ALLOC(hmm, sizeof(ESL_HMM)); hmm->t = NULL; hmm->e = NULL; ESL_ALLOC(hmm->t, sizeof(float *) * M); ESL_ALLOC(hmm->e, sizeof(float *) * M); ESL_ALLOC(hmm->eo, sizeof(float *) * abc->Kp); hmm->t[0] = NULL; hmm->e[0] = NULL; hmm->eo[0] = NULL; ESL_ALLOC(hmm->t[0], sizeof(float) * M * (M+1)); /* state M is the implicit end state */ ESL_ALLOC(hmm->e[0], sizeof(float) * M * abc->K); ESL_ALLOC(hmm->eo[0], sizeof(float) * abc->Kp * M); ESL_ALLOC(hmm->pi, sizeof(float) * (M+1)); /* initial transition to state M means a L=0 sequence */ for (k = 1; k < M; k++) { hmm->t[k] = hmm->t[0] + k*(M+1); hmm->e[k] = hmm->e[0] + k*abc->K; } for (x = 1; x < abc->Kp; x++) hmm->eo[x] = hmm->eo[0] + x*M; hmm->M = M; hmm->K = abc->K; hmm->abc = abc; return hmm; ERROR: esl_hmm_Destroy(hmm); return NULL; } /* Function: esl_hmm_Clone() * Synopsis: Duplicate an HMM. * * Purpose: Make a newly allocated duplicate of the HMM , * and return a pointer to the duplicate. * * Throws: on allocation failure. */ ESL_HMM * esl_hmm_Clone(const ESL_HMM *hmm) { ESL_HMM *dup = NULL; int k, x; if ((dup = esl_hmm_Create(hmm->abc, hmm->M)) == NULL) return NULL; for (k = 0; k < hmm->M; k++) { memcpy(dup->t[k], hmm->t[k], sizeof(float) * (hmm->M+1)); memcpy(dup->e[k], hmm->e[k], sizeof(float) * (hmm->abc->K)); } for (x = 0; x < hmm->abc->Kp; x++) { memcpy(dup->eo[x], hmm->eo[x], sizeof(float) * (hmm->M)); } memcpy(dup->pi, hmm->pi, sizeof(float) * (hmm->M+1)); return dup; } /* Function: esl_hmm_Configure() * Synopsis: Set an HMM's emission odds ratios, including degenerate residues. * * Purpose: Given a parameterized , and some background * residue frequencies , set the emission odds ratios * (eo[0..Kp-1][0..M-1]>) in the model. * * The frequencies do not necessarily have to * correspond to a null model. They are only used for * rescaling. * * If is , uniform background frequencies are * used ($\frac{1}{K}$, for alphabet size $K$). * * Returns: on success. * * Throws: (no abnormal error conditions) */ int esl_hmm_Configure(ESL_HMM *hmm, float *fq) { int Kp = hmm->abc->Kp; int K = hmm->abc->K; int k,x,y; float uniform = 1.0f / (float) K; float use_fq; float denom; for (x = 0; x < K; x++) { use_fq = (fq == NULL) ? uniform : fq[x]; for (k = 0; k < hmm->M; k++) hmm->eo[x][k] = hmm->e[k][x] / use_fq; } for (k = 0; k < hmm->M; k++) { /* -,*,~: treat as X */ hmm->eo[K][k] = 1.0; /* gap char */ hmm->eo[Kp-2][k] = 1.0; /* nonresidue */ hmm->eo[Kp-1][k] = 1.0; /* missing data char */ } for (x = K+1; x <= Kp-3; x++) { for (k = 0; k < hmm->M; k++) { hmm->eo[x][k] = 0.0f; denom = 0.0f; for (y = 0; y < K; y++) if (hmm->abc->degen[x][y]) { hmm->eo[x][k] += hmm->e[k][y]; denom += (fq == NULL) ? uniform : fq[y]; } hmm->eo[x][k] = ((denom > 0.0f) ? hmm->eo[x][k] / denom : 0.0f); } } return eslOK; } /* Function: esl_hmm_Destroy() * Synopsis: Destroys an HMM. * * Purpose: Frees an HMM. */ void esl_hmm_Destroy(ESL_HMM *hmm) { if (hmm == NULL) return; if (hmm->t != NULL) { if (hmm->t[0] != NULL) free(hmm->t[0]); free(hmm->t); } if (hmm->e != NULL) { if (hmm->e[0] != NULL) free(hmm->e[0]); free(hmm->e); } if (hmm->eo != NULL) { if (hmm->eo[0] != NULL) free(hmm->eo[0]); free(hmm->eo); } if (hmm->pi != NULL) free(hmm->pi); free(hmm); return; } ESL_HMX * esl_hmx_Create(int allocL, int allocM) { ESL_HMX *mx = NULL; int i; int status; ESL_ALLOC(mx, sizeof(ESL_HMX)); mx->dp_mem = NULL; mx->dp = NULL; mx->sc = NULL; ESL_ALLOC(mx->dp_mem, sizeof(float) * (allocL+1) * allocM); mx->ncells = (allocL+1) * allocM; ESL_ALLOC(mx->dp, sizeof (float *) * (allocL+1)); ESL_ALLOC(mx->sc, sizeof (float) * (allocL+2)); mx->allocR = allocL+1; for (i = 0; i <= allocL; i++) mx->dp[i] = mx->dp_mem + i*allocM; mx->validR = allocL+1; mx->allocM = allocM; mx->L = 0; mx->M = 0; return mx; ERROR: esl_hmx_Destroy(mx); return NULL; } int esl_hmx_GrowTo(ESL_HMX *mx, int L, int M) { uint64_t ncells; void *p; int do_reset = FALSE; int i; int status; if (L < mx->allocR && M <= mx->allocM) return eslOK; /* Do we have to reallocate the 2D matrix, or can we get away with * rejiggering the row pointers into the existing memory? */ ncells = (L+1) * M; if (ncells > mx->ncells) { ESL_RALLOC(mx->dp_mem, p, sizeof(float) * ncells); mx->ncells = ncells; do_reset = TRUE; } /* must we reallocate row pointers? */ if (L >= mx->allocR) { ESL_RALLOC(mx->dp, p, sizeof(float *) * (L+1)); ESL_RALLOC(mx->sc, p, sizeof(float) * (L+2)); mx->allocR = L+1; mx->allocM = M; do_reset = TRUE; } /* must we widen the rows? */ if (M > mx->allocM) { mx->allocM = M; do_reset = TRUE; } /* must we set some more valid row pointers? */ if (L >= mx->validR) do_reset = TRUE; /* did we trigger a relayout of row pointers? */ if (do_reset) { mx->validR = ESL_MIN(mx->ncells / mx->allocM, mx->allocR); for (i = 0; i < mx->validR; i++) mx->dp[i] = mx->dp_mem + i*mx->allocM; } mx->M = 0; mx->L = 0; return eslOK; ERROR: return status; } void esl_hmx_Destroy(ESL_HMX *mx) { if (mx == NULL) return; if (mx->dp_mem != NULL) free(mx->dp_mem); if (mx->dp != NULL) free(mx->dp); if (mx->sc != NULL) free(mx->sc); free(mx); return; } /* Function: esl_hmm_Emit() * Synopsis: Emit a sequence from an HMM. * * Purpose: Sample one sequence from an , using random * number generator . Optionally return the sequence, * the state path, and/or the length via , * , and . * * If or are requested, caller * becomes responsible for free'ing their memory. * * Returns: on success. * * Throws: (no abnormal error conditions) */ int esl_hmm_Emit(ESL_RANDOMNESS *r, const ESL_HMM *hmm, ESL_DSQ **opt_dsq, int **opt_path, int *opt_L) { int k, L, allocL; int *path = NULL; ESL_DSQ *dsq = NULL; void *tmp = NULL; int status; ESL_ALLOC(dsq, sizeof(ESL_DSQ) * 256); ESL_ALLOC(path, sizeof(int) * 256); allocL = 256; dsq[0] = eslDSQ_SENTINEL; path[0] = -1; k = esl_rnd_FChoose(r, hmm->pi, hmm->M+1); L = 0; while (k != hmm->M) /* M is the implicit end state */ { L++; if (L >= allocL-1) { /* Reallocate path and seq if needed */ ESL_RALLOC(dsq, tmp, sizeof(ESL_DSQ) * (allocL*2)); ESL_RALLOC(path, tmp, sizeof(int) * (allocL*2)); allocL *= 2; } path[L] = k; dsq[L] = esl_rnd_FChoose(r, hmm->e[k], hmm->abc->K); k = esl_rnd_FChoose(r, hmm->t[k], hmm->M+1); } path[L+1] = hmm->M; /* sentinel for "end state" */ dsq[L+1] = eslDSQ_SENTINEL; if (opt_dsq != NULL) *opt_dsq = dsq; else free(dsq); if (opt_path != NULL) *opt_path = path; else free(path); if (opt_L != NULL) *opt_L = L; return eslOK; ERROR: if (path != NULL) free(path); if (dsq != NULL) free(dsq); return status; } int esl_hmm_Forward(const ESL_DSQ *dsq, int L, const ESL_HMM *hmm, ESL_HMX *fwd, float *opt_sc) { int i, k, m; int M = hmm->M; float logsc = 0; float max; fwd->sc[0] = 0.0; if (L == 0) { fwd->sc[L+1] = logsc = log(hmm->pi[M]); if (opt_sc != NULL) *opt_sc = logsc; return eslOK; } max = 0.0; for (k = 0; k < M; k++) { fwd->dp[1][k] = hmm->eo[dsq[1]][k] * hmm->pi[k]; max = ESL_MAX(fwd->dp[1][k], max); } for (k = 0; k < M; k++) { fwd->dp[1][k] /= max; } fwd->sc[1] = log(max); for (i = 2; i <= L; i++) { max = 0.0; for (k = 0; k < M; k++) { fwd->dp[i][k] = 0.0; for (m = 0; m < M; m++) fwd->dp[i][k] += fwd->dp[i-1][m] * hmm->t[m][k]; fwd->dp[i][k] *= hmm->eo[dsq[i]][k]; max = ESL_MAX(fwd->dp[i][k], max); } for (k = 0; k < M; k++) fwd->dp[i][k] /= max; fwd->sc[i] = log(max); } fwd->sc[L+1] = 0.0; for (m = 0; m < M; m++) fwd->sc[L+1] += fwd->dp[L][m] * hmm->t[m][M]; fwd->sc[L+1] = log(fwd->sc[L+1]); logsc = 0.0; for (i = 1; i <= L+1; i++) logsc += fwd->sc[i]; fwd->M = hmm->M; fwd->L = L; if (opt_sc != NULL) *opt_sc = logsc; return eslOK; } int esl_hmm_Backward(const ESL_DSQ *dsq, int L, const ESL_HMM *hmm, ESL_HMX *bck, float *opt_sc) { int i,k,m; int M = hmm->M; float logsc = 0.0; float max; bck->sc[L+1] = 0.0; if (L == 0) { bck->sc[0] = logsc = log(hmm->pi[M]); if (opt_sc != NULL) *opt_sc = logsc; return eslOK; } max = 0.0; for (k = 0; k < M; k++) { bck->dp[L][k] = hmm->t[k][M]; max = ESL_MAX(bck->dp[L][k], max); } for (k = 0; k < M; k++) bck->dp[L][k] /= max; bck->sc[L] = log(max); for (i = L-1; i >= 1; i--) { max = 0.0; for (k = 0; k < M; k++) { bck->dp[i][k] = 0.0; for (m = 0; m < M; m++) bck->dp[i][k] += bck->dp[i+1][m] * hmm->eo[dsq[i+1]][m] * hmm->t[k][m]; max = ESL_MAX(bck->dp[i][k], max); } for (k = 0; k < M; k++) bck->dp[i][k] /= max; bck->sc[i] = log(max); } bck->sc[0] = 0.0; for (m = 0; m < M; m++) bck->sc[0] += bck->dp[1][m] * hmm->eo[dsq[1]][m] * hmm->pi[m]; bck->sc[0] = log(bck->sc[0]); logsc = 0.0; for (i = 0; i <= L; i++) logsc += bck->sc[i]; bck->M = hmm->M; bck->L = L; if (opt_sc != NULL) *opt_sc = logsc; return eslOK; } int esl_hmm_PosteriorDecoding(const ESL_DSQ *dsq, int L, const ESL_HMM *hmm, ESL_HMX *fwd, ESL_HMX *bck, ESL_HMX *pp) { int i,k; for (i = 1; i <= L; i++) { for (k = 0; k < hmm->M; k++) pp->dp[i][k] = fwd->dp[i][k] * bck->dp[i][k]; esl_vec_FNorm(pp->dp[i], hmm->M); } return eslOK; } /***************************************************************** * x. Functions used in unit testing *****************************************************************/ #ifdef eslHMM_TESTDRIVE static int make_occasionally_dishonest_casino(ESL_HMM **ret_hmm, ESL_ALPHABET **ret_abc) { ESL_ALPHABET *abc = esl_alphabet_Create(eslDICE); ESL_HMM *hmm = esl_hmm_Create(abc, 2); int x; /* State 0 = fair die */ hmm->pi[0] = 1.0; hmm->pi[1] = 0.0; hmm->pi[2] = 0.0; /* no L=0 seqs */ hmm->t[0][0] = 0.96; hmm->t[0][1] = 0.03; hmm->t[0][2] = 0.01; /* end from state 0; mean length 100 */ for (x = 0; x < abc->K; x++) hmm->e[0][x] = 1.0 / (float) abc->K; /* State 1 = loaded die */ hmm->t[1][0] = 0.05; hmm->t[1][1] = 0.95; hmm->t[1][2] = 0.0; /* no end from state 1 */ for (x = 0; x < abc->K-1; x++) hmm->e[1][x] = 0.5 / ((float) abc->K-1); hmm->e[1][abc->K-1] = 0.5; esl_hmm_Configure(hmm, NULL); *ret_hmm = hmm; *ret_abc = abc; return eslOK; } #endif /*eslHMM_TESTDRIVE*/ /***************************************************************** * x. Test driver. *****************************************************************/ #ifdef eslHMM_TESTDRIVE /* gcc -g -Wall -o hmm_utest -L. -I. -DeslHMM_TESTDRIVE esl_hmm.c -leasel -lm */ #include "esl_config.h" #include #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_hmm.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, {"-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0}, {"-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show verbose output", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for hmm module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_Create(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; ESL_HMM *hmm = NULL; ESL_DSQ *dsq = NULL; int *path = NULL; ESL_HMX *fwd = NULL; ESL_HMX *bck = NULL; ESL_HMX *pp = NULL; int be_verbose = esl_opt_GetBoolean(go, "-v"); float fsc, bsc; int L; int i; float fsum, bsum; make_occasionally_dishonest_casino(&hmm, &abc); esl_hmm_Emit(r, hmm, &dsq, &path, &L); fwd = esl_hmx_Create(L, hmm->M); bck = esl_hmx_Create(L, hmm->M); pp = esl_hmx_Create(L, hmm->M); esl_hmm_Forward (dsq, L, hmm, fwd, &fsc); esl_hmm_Backward(dsq, L, hmm, bck, &bsc); esl_hmm_PosteriorDecoding(dsq, L, hmm, fwd, bck, pp); fsum = 0.0; bsum = bsc; fsum += fwd->sc[0]; if (be_verbose) printf("%4d %c %s %8.3f %8.3f\n", 0, '-', "--", fwd->sc[0], bck->sc[0]); bsum -= bck->sc[0]; for (i = 1; i <= L; i++) { fsum += fwd->sc[i]; if (be_verbose) printf("%4d %c %s %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f\n", i, abc->sym[dsq[i]], path[i] == 0 ? "F " : " L", fwd->sc[i], bck->sc[i], fsum, bsum, fsum+bsum, pp->dp[i][0], pp->dp[i][1]); bsum -= fwd->sc[i]; } if (be_verbose) { printf("%4d %c %s %8.3f %8.3f\n", 0, '-', "--", fwd->sc[L+1], bck->sc[L+1]); printf("Forward score = %f\n", fsc); printf("Backward score = %f\n", bsc); } free(path); free(dsq); esl_hmx_Destroy(pp); esl_hmx_Destroy(bck); esl_hmx_Destroy(fwd); esl_alphabet_Destroy(abc); esl_hmm_Destroy(hmm); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*eslHMM_TESTDRIVE*/ /***************************************************************** * x. Example *****************************************************************/ #ifdef eslHMM_EXAMPLE /*::cexcerpt::hmm_example::begin::*/ /* compile: gcc -g -Wall -I. -L. -o hmm_example -DeslHMM_EXAMPLE esl_hmm.c -leasel -lm * run: ./hmm_example */ #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_hmm.h" #include "esl_sq.h" #include "esl_sqio.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of the HMM module"; ESL_HMM * create_test_hmm(ESL_ALPHABET *abc) { ESL_HMM *hmm; int L = 400; int M = 200; hmm = esl_hmm_Create(abc, 2); /* state 0 = normal iid model. state 1 = biased state */ hmm->t[0][0] = (float) L / (float) (L+1); hmm->t[0][1] = 1.0f / (float) (L+1); hmm->t[0][2] = 1.0; /* external length distribution */ hmm->t[1][0] = (float) 2.0f / (float) (M+2); hmm->t[1][1] = (float) M / (float) (M+2); hmm->t[1][2] = 1.0; /* SW50 iid frequencies: H3 default background */ hmm->e[0][0] = 0.0787945; /* A */ hmm->e[0][1] = 0.0151600; /* C */ hmm->e[0][2] = 0.0535222; /* D */ hmm->e[0][3] = 0.0668298; /* E */ hmm->e[0][4] = 0.0397062; /* F */ hmm->e[0][5] = 0.0695071; /* G */ hmm->e[0][6] = 0.0229198; /* H */ hmm->e[0][7] = 0.0590092; /* I */ hmm->e[0][8] = 0.0594422; /* K */ hmm->e[0][9] = 0.0963728; /* L */ hmm->e[0][10] = 0.0237718; /* M */ hmm->e[0][11] = 0.0414386; /* N */ hmm->e[0][12] = 0.0482904; /* P */ hmm->e[0][13] = 0.0395639; /* Q */ hmm->e[0][14] = 0.0540978; /* R */ hmm->e[0][15] = 0.0683364; /* S */ hmm->e[0][16] = 0.0540687; /* T */ hmm->e[0][17] = 0.0673417; /* V */ hmm->e[0][18] = 0.0114135; /* W */ hmm->e[0][19] = 0.0304133; /* Y */ /* average of MFS_1 core emissions */ hmm->e[1][0] = 0.1068; /* A */ hmm->e[1][1] = 0.0110; /* C */ hmm->e[1][2] = 0.0242; /* D */ hmm->e[1][3] = 0.0293; /* E */ hmm->e[1][4] = 0.0621; /* F */ hmm->e[1][5] = 0.0899; /* G */ hmm->e[1][6] = 0.0139; /* H */ hmm->e[1][7] = 0.0762; /* I */ hmm->e[1][8] = 0.0319; /* K */ hmm->e[1][9] = 0.1274; /* L */ hmm->e[1][10] = 0.0338; /* M */ hmm->e[1][11] = 0.0285; /* N */ hmm->e[1][12] = 0.0414; /* P */ hmm->e[1][13] = 0.0266; /* Q */ hmm->e[1][14] = 0.0375; /* R */ hmm->e[1][15] = 0.0747; /* S */ hmm->e[1][16] = 0.0568; /* T */ hmm->e[1][17] = 0.0815; /* V */ hmm->e[1][18] = 0.0161; /* W */ hmm->e[1][19] = 0.0303; /* Y */ hmm->pi[0] = 0.99; hmm->pi[1] = 0.01; esl_hmm_Configure(hmm, NULL); return hmm; } ESL_HMM * create_null_hmm(ESL_ALPHABET *abc) { ESL_HMM *hmm; hmm = esl_hmm_Create(abc, 1); /* state 0 = normal iid model.*/ hmm->t[0][0] = 1.0f; hmm->t[0][1] = 1.0f; /* external length distribution */ /* SW50 iid frequencies: H3 default background */ hmm->e[0][0] = 0.0787945; /* A */ hmm->e[0][1] = 0.0151600; /* C */ hmm->e[0][2] = 0.0535222; /* D */ hmm->e[0][3] = 0.0668298; /* E */ hmm->e[0][4] = 0.0397062; /* F */ hmm->e[0][5] = 0.0695071; /* G */ hmm->e[0][6] = 0.0229198; /* H */ hmm->e[0][7] = 0.0590092; /* I */ hmm->e[0][8] = 0.0594422; /* K */ hmm->e[0][9] = 0.0963728; /* L */ hmm->e[0][10] = 0.0237718; /* M */ hmm->e[0][11] = 0.0414386; /* N */ hmm->e[0][12] = 0.0482904; /* P */ hmm->e[0][13] = 0.0395639; /* Q */ hmm->e[0][14] = 0.0540978; /* R */ hmm->e[0][15] = 0.0683364; /* S */ hmm->e[0][16] = 0.0540687; /* T */ hmm->e[0][17] = 0.0673417; /* V */ hmm->e[0][18] = 0.0114135; /* W */ hmm->e[0][19] = 0.0304133; /* Y */ hmm->pi[0] = 1.0; esl_hmm_Configure(hmm, NULL); return hmm; } int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); ESL_SQ *sq = esl_sq_CreateDigital(abc); ESL_SQFILE *sqfp = NULL; ESL_HMM *hmm = create_test_hmm(abc); ESL_HMM *bg = create_null_hmm(abc); ESL_HMX *hmx = esl_hmx_Create(400, hmm->M); int format = eslSQFILE_UNKNOWN; char *seqfile = esl_opt_GetArg(go, 1); float fwdsc, nullsc; int status; status = esl_sqfile_OpenDigital(abc, seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) esl_fatal("No such file."); else if (status == eslEFORMAT) esl_fatal("Format unrecognized."); else if (status != eslOK) esl_fatal("Open failed, code %d.", status); while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { esl_hmx_GrowTo(hmx, sq->n, hmm->M); esl_hmm_Forward(sq->dsq, sq->n, hmm, hmx, &fwdsc); esl_hmm_Forward(sq->dsq, sq->n, bg, hmx, &nullsc); printf("%-16s %5d %11.4f %8.4f %11.4f %8.4f %11.4f %8.4f\n", sq->name, (int) sq->n, fwdsc * eslCONST_LOG2R, (fwdsc * eslCONST_LOG2R) / sq->n, nullsc * eslCONST_LOG2R, (nullsc * eslCONST_LOG2R) / sq->n, (fwdsc - nullsc) * eslCONST_LOG2R, (fwdsc-nullsc) * eslCONST_LOG2R / sq->n); esl_sq_Reuse(sq); } if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s line %" PRId64 "):\n%s\n", sqfp->filename, sqfp->linenumber, sqfp->errbuf); else if (status != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", status, sqfp->filename); esl_sqfile_Close(sqfp); esl_sq_Destroy(sq); esl_hmm_Destroy(hmm); esl_hmm_Destroy(bg); esl_hmx_Destroy(hmx); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } /*::cexcerpt::hmm_example::end::*/ #endif /*eslHMM_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_hmm.c 694 2011-06-14 21:57:16Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_hmm.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_msafile.c0000664361611702660230000020647012473612607016024 0ustar wheelerteddy/* Multiple sequence alignment file i/o * * Table of contents: * 1. Opening/closing an ESLX_MSAFILE. * 2. ESLX_MSAFILE_FMTDATA: optional added constraints on formats. * 3. Guessing file formats. * 4. Guessing alphabets. * 5. Random MSA flatfile access. [augmentation: ssi] * 6. Reading an MSA from an ESLX_MSAFILE. * 7. Writing an MSA to a stream. * 8. Utilities used by specific format parsers. * 9. Unit tests. * 10. Test driver. * 11. Examples. * 12. Copyright and license. */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_mem.h" #include "esl_msafile.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif /***************************************************************** *# 1. Opening/closing an ESLX_MSAFILE *****************************************************************/ static int msafile_Create (ESLX_MSAFILE **ret_afp); static int msafile_OpenBuffer(ESL_ALPHABET **byp_abc, ESL_BUFFER *bf, int format, ESLX_MSAFILE_FMTDATA *fmtd, ESLX_MSAFILE *afp); /* Function: eslx_msafile_Open() * Synopsis: Open a multiple sequence alignment file for input. * * Purpose: Open a multiple sequence alignment file for input. * Return an open handle in <*ret_afp>. * * is usually the name of a file. Alignments may * also be read from standard input, or from * gzip-compressed files. If is ``-'', alignment * input is taken from the standard input stream. If * ends in ``.gz'', alignment input is read * through a pipe from . * * , , , and support a variety * of optional/advanced operations, as described * below. Minimally, a caller can set to , * to , and to , * and will be opened in text mode; in the * current working directory; and its format will be * autodetected. * * The argument controls whether data are to be * read in text or digital mode. In digital mode, alignment * data are immediately digitized into an Easel internal * alphabet (which among other things, allows various * things to operate on sequence data more efficiently) and * because an expected alphabet is known, parsers are able * to detect invalid characters. The caller may either * provide an alphabet (thus asserting what it's expected * to be), or have look at the file * and guess what alphabet it appears to be (DNA or amino * acid code, usually). In text mode, alignment data are * read verbatim. It might be advantageous for an * application to read in text mode -- for example, if a * variant alignment format is using characters in some * special way, and you need to deal with them specially. * All this goes through the setting of the passed-by-reference * alphabet pointer . If caller passes NULL for * the argument, input is in text mode. If caller * provides a valid non-NULL pointer but * <*byp_abc> is NULL (that is, caller has declared * and passed <&abc> as an * argument), then we attempt to guess the digital alphabet * using , based on the first * alignment in the input. In this case, the new alphabet * is allocated here and returned to the caller. If caller * provides a digital alphabet (that is, and passed <&abc>), that's * the alphabet we use. * * The argument controls where we search for the * . If is , only the current working * directory is checked. Optionally, caller can provide in * the name of an environment variable ("PFAMDB", * perhaps), in which the routine can find a * colon-delimited list of directories. Then, if * is not found in the current working directory, we look * for it in these directories, in the order they're * listed. * * The argument allows the caller to either allow * to autodetect the file format of * , or to assert that it knows the file is in a * particular format. If is , * format autodetection is performed. Other valid codes include: * | | Stockholm format | * | | Aligned FASTA format | * | | Clustal format (strict) | * | | Clustal-like (MUSCLE, PROBCONS...) | * | | PHYLIP interleaved format | * | | PHYLIP sequential format | * | | UCSC SAM A2M (dotless or dotful) | * | | NCBI PSI-BLAST | * | | a general alignment block format | * * The argument is an optional pointer to a * structure that the caller may * initialize and provide, in order to assert any * additional unusual constraints on the input format -- * for example, to dictate that a PHYLIP format file has * some nonstandard name field width. Generally, though, * will be . * * Args: byp_abc - digital alphabet to use, or NULL for text mode * if <*byp_abc> is NULL, guess the digital alphabet, * create it, and return it in <*byp_abc>. * If <*byp_abc> is a digital alphabet, use it. * msafile - name of alignment input to open; * if "-", read standard input; * if "*.gz", read through a pipe. * env - , or the name of an environment variable * containing colon-delimited list of directories * in which to search for (e.g. "PFAMDB"). * format - format code, such as ; * or to autodetect format. * fmtd - , or a pointer to an initialized * structure, containing * any additional unusual constraints to apply * to the input format. * *ret_afp - RETURN: open MSA input stream. * * Returns: on success, and <*ret_afp> is the newly opened msa file. * * if doesn't exist or can't be * opened for reading; or (in the case of a <.gz> file) if * a executable doesn't exist in user's or * can't be executed. errmsg> is something like * "couldn't open %s for reading", with <%s> being the * name of the msafile. * * if we tried to autodetect the file format * (caller provided ), and * failed. errmsg> is something like "couldn't * determine alignment input format". * * if we tried to autodetect the alphabet * (caller provided <&abc>, to request digital * mode w/ alphabet autodetection) but the alphabet could * not be reliably guessed. * * in the case of a <.gz> file and the * command fails on it. * * On any of these normal errors, <*ret_afp> is returned in * an error state, containing a user-directed error message * in errmsg> and (if relevant) the full path to * that we attempted to open in * bf->filename>. See for * a function that gives a standard way of reporting these * diagnostics to . * * Throws: on allocation failure. * on a system call failure, such as . * if we tried to use but the stream was * invalid (in an error state, , or at ). * On thrown exceptions, <*ret_afp> is . */ int eslx_msafile_Open(ESL_ALPHABET **byp_abc, const char *msafile, const char *env, int format, ESLX_MSAFILE_FMTDATA *fmtd, ESLX_MSAFILE **ret_afp) { ESLX_MSAFILE *afp = NULL; int status; if ( (status = msafile_Create(&afp)) != eslOK) goto ERROR; if ((status = esl_buffer_Open(msafile, env, &(afp->bf))) != eslOK) ESL_XFAIL(status, afp->errmsg, "%s", afp->bf->errmsg); /* ENOTFOUND; FAIL are normal here */ if ( (status = msafile_OpenBuffer(byp_abc, afp->bf, format, fmtd, afp)) != eslOK) goto ERROR; *ret_afp = afp; return eslOK; ERROR: /* on normal errors, afp is returned in an error state */ if (status == eslENOTFOUND || status == eslFAIL || status == eslEFORMAT || status == eslENODATA || status == eslENOALPHABET) { afp->abc = NULL; *ret_afp = afp;} else { if (afp) eslx_msafile_Close(afp); *ret_afp = NULL; } return status; } /* Function: eslx_msafile_OpenMem() * Synopsis: Open a string or buffer for parsing as an MSA. * * Purpose: Essentially the same as , except * we ``open'' the string or buffer

, as the * input source. * * If

is a NUL-terminated string, providing its length * is optional; may be passed as -1. If

is an * unterminated buffer, providing the length is * mandatory. */ int eslx_msafile_OpenMem(ESL_ALPHABET **byp_abc, const char *p, esl_pos_t n, int format, ESLX_MSAFILE_FMTDATA *fmtd, ESLX_MSAFILE **ret_afp) { ESLX_MSAFILE *afp = NULL; int status; if ( (status = msafile_Create(&afp)) != eslOK) goto ERROR; if ( (status = esl_buffer_OpenMem(p, n, &(afp->bf))) != eslOK) goto ERROR; if ( (status = msafile_OpenBuffer(byp_abc, afp->bf, format, fmtd, afp)) != eslOK) goto ERROR; *ret_afp = afp; return eslOK; ERROR: if (status == eslENOTFOUND || status == eslFAIL || status == eslEFORMAT || status == eslENODATA || status == eslENOALPHABET) { afp->abc = NULL; *ret_afp = afp;} else { if (afp) eslx_msafile_Close(afp); *ret_afp = NULL; } return status; } /* Function: eslx_msafile_OpenBuffer() * Synopsis: Open an input buffer for parsing as an MSA. * * Purpose: Essentially the same as , except * we ``open'' an that's already been * opened by the caller for some input source. */ int eslx_msafile_OpenBuffer(ESL_ALPHABET **byp_abc, ESL_BUFFER *bf, int format, ESLX_MSAFILE_FMTDATA *fmtd, ESLX_MSAFILE **ret_afp) { ESLX_MSAFILE *afp = NULL; int status; if ( (status = msafile_Create(&afp)) != eslOK) goto ERROR; afp->bf = bf; if ((status = msafile_OpenBuffer(byp_abc, afp->bf, format, fmtd, afp)) != eslOK) goto ERROR; *ret_afp = afp; return eslOK; ERROR: if (status == eslENOTFOUND || status == eslFAIL || status == eslEFORMAT || status == eslENODATA || status == eslENOALPHABET) { afp->abc = NULL; *ret_afp = afp;} else { if (afp) eslx_msafile_Close(afp); *ret_afp = NULL; } return status; } /* Function: eslx_msafile_OpenFailure() * Synopsis: Report diagnostics of normal error in opening MSA file, and exit. * * Purpose: Report user-directed diagnostics of a normal error in opening * an MSA input. Print a message to , then exit. */ void eslx_msafile_OpenFailure(ESLX_MSAFILE *afp, int status) { int show_source = FALSE; int show_fmt = FALSE; fprintf(stderr, "Alignment input open failed.\n"); if (status == eslENOTFOUND) { fprintf(stderr, " %s\n", afp->errmsg); } else if (status == eslFAIL) { fprintf(stderr, " %s\n", afp->errmsg); } else if (status == eslENOFORMAT) { fprintf(stderr, " %s\n", afp->errmsg); show_source = TRUE; } else if (status == eslENOALPHABET) { fprintf(stderr, " %s\n", afp->errmsg); show_source = TRUE; show_fmt = TRUE; } else if (status == eslEMEM) { fprintf(stderr, " Memory allocation failure\n"); } else if (status == eslESYS) { fprintf(stderr, " System call failed, possibly fread()\n"); } else { fprintf(stderr, " Unexpected error code %d\n", status); } if (show_source) { switch (afp->bf->mode_is) { case eslBUFFER_STREAM: fprintf(stderr, " while reading from an input stream (not a file)\n"); break; case eslBUFFER_CMDPIPE: fprintf(stderr, " while reading through a pipe (not a file)\n"); break; case eslBUFFER_FILE: case eslBUFFER_ALLFILE: case eslBUFFER_MMAP: fprintf(stderr, " while reading file %s\n", afp->bf->filename); break; case eslBUFFER_STRING: fprintf(stderr, " while reading from a provided string (not a file)\n"); break; default: break; } } if (show_fmt) { fprintf(stderr, " while parsing for %s format\n", eslx_msafile_DecodeFormat(afp->format)); } eslx_msafile_Close(afp); exit(status); } /* Function: eslx_msafile_SetDigital() * Synopsis: Convert an open text-mode ESLX_MSAFILE to digital mode. * * Purpose: Convert the open from text mode to digital mode, * using alphabet . * * Note: This function is only here for legacy support: it's * called by esl_sqio, which still uses an outdated * open / guess alphabet / set digital pattern. When * sqio is upgraded next, this function should be removed. */ int eslx_msafile_SetDigital(ESLX_MSAFILE *afp, const ESL_ALPHABET *abc) { int status; afp->abc = abc; switch (afp->format) { case eslMSAFILE_A2M: status = esl_msafile_a2m_SetInmap( afp); break; case eslMSAFILE_AFA: status = esl_msafile_afa_SetInmap( afp); break; case eslMSAFILE_CLUSTAL: status = esl_msafile_clustal_SetInmap( afp); break; case eslMSAFILE_CLUSTALLIKE: status = esl_msafile_clustal_SetInmap( afp); break; case eslMSAFILE_PFAM: status = esl_msafile_stockholm_SetInmap(afp); break; case eslMSAFILE_PHYLIP: status = esl_msafile_phylip_SetInmap( afp); break; case eslMSAFILE_PHYLIPS: status = esl_msafile_phylip_SetInmap( afp); break; case eslMSAFILE_PSIBLAST: status = esl_msafile_psiblast_SetInmap( afp); break; case eslMSAFILE_SELEX: status = esl_msafile_selex_SetInmap( afp); break; case eslMSAFILE_STOCKHOLM: status = esl_msafile_stockholm_SetInmap(afp); break; default: ESL_EXCEPTION(eslEINCONCEIVABLE, "no such alignment file format"); } return status; } /* Function: eslx_msafile_Close() * Synopsis: Close an open . */ void eslx_msafile_Close(ESLX_MSAFILE *afp) { if (afp) { if (afp->bf) esl_buffer_Close(afp->bf); if (afp->ssi) esl_ssi_Close(afp->ssi); free(afp); } } static int msafile_Create(ESLX_MSAFILE **ret_afp) { ESLX_MSAFILE *afp = NULL; int status; ESL_ALLOC(afp, sizeof(ESLX_MSAFILE)); afp->bf = NULL; afp->line = NULL; afp->n = 0; afp->linenumber = 0; afp->lineoffset = 0; afp->format = eslMSAFILE_UNKNOWN; afp->abc = NULL; afp->ssi = NULL; afp->errmsg[0] = '\0'; eslx_msafile_fmtdata_Init(&(afp->fmtd)); *ret_afp = afp; return eslOK; ERROR: *ret_afp = NULL; return status; } /* All input sources funnel through here. * Here, is already allocated and initialized, and the input * is opened successfully. */ static int msafile_OpenBuffer(ESL_ALPHABET **byp_abc, ESL_BUFFER *bf, int format, ESLX_MSAFILE_FMTDATA *fmtd, ESLX_MSAFILE *afp) { ESL_ALPHABET *abc = NULL; int alphatype = eslUNKNOWN; int status; /* if caller provided , copy it into afp->fmtd */ if (fmtd) eslx_msafile_fmtdata_Copy(fmtd, &(afp->fmtd)); /* Determine the format */ if (format == eslMSAFILE_UNKNOWN) { status = eslx_msafile_GuessFileFormat(afp->bf, &format, &(afp->fmtd)); if (status == eslENOFORMAT) ESL_XFAIL(eslENOFORMAT, afp->errmsg, "couldn't determine alignment input format"); /* ENOFORMAT is normal failure */ else if (status != eslOK) goto ERROR; } afp->format = format; /* Determine the alphabet; set . ( == NULL means text mode.) */ /* Note that GuessAlphabet() functions aren't allowed to use the inmap, because it isn't set yet */ #ifdef eslAUGMENT_ALPHABET if (byp_abc && *byp_abc) /* Digital mode, and caller provided the alphabet */ { abc = *byp_abc; alphatype = abc->type; } else if (byp_abc) /* Digital mode, and caller wants us to guess and create an alphabet */ { status = eslx_msafile_GuessAlphabet(afp, &alphatype); if (status == eslENOALPHABET) ESL_XFAIL(eslENOALPHABET, afp->errmsg, "couldn't guess alphabet (maybe try --dna/--rna/--amino if available)"); else if (status != eslOK) goto ERROR; if ( (abc = esl_alphabet_Create(alphatype)) == NULL) { status = eslEMEM; goto ERROR; } } #endif if (abc && ! byp_abc) ESL_EXCEPTION(eslEINCONCEIVABLE, "Your version of Easel does not include digital alphabet code."); /* ^^^^^^^^^^^^^^^^^ this test interacts tricksily with the #ifdef above */ afp->abc = abc; /* with afp->abc set, the inmap config functions know whether to do digital/text */ /* Configure the format-specific, digital or text mode character * input map in afp->inmap. * All of these must: * * set inmap[0] to an appropriate 'unknown' character, to replace * invalid input with. * set ' ' to eslDSQ_IGNORE (if we're supposed to accept and skip * it), or map it to a gap, or set it as eslDSQ_ILLEGAL. * in digital mode, copy the abc->inmap * in text mode, decide if we should accept most any * non-whitespace character (isgraph()), or if the format is * inherently restrictive and we should go with isalpha() + * some other valid characters "_-.~*" instead. */ switch (afp->format) { case eslMSAFILE_A2M: status = esl_msafile_a2m_SetInmap( afp); break; case eslMSAFILE_AFA: status = esl_msafile_afa_SetInmap( afp); break; case eslMSAFILE_CLUSTAL: status = esl_msafile_clustal_SetInmap( afp); break; case eslMSAFILE_CLUSTALLIKE: status = esl_msafile_clustal_SetInmap( afp); break; case eslMSAFILE_PFAM: status = esl_msafile_stockholm_SetInmap(afp); break; case eslMSAFILE_PHYLIP: status = esl_msafile_phylip_SetInmap( afp); break; case eslMSAFILE_PHYLIPS: status = esl_msafile_phylip_SetInmap( afp); break; case eslMSAFILE_PSIBLAST: status = esl_msafile_psiblast_SetInmap( afp); break; case eslMSAFILE_SELEX: status = esl_msafile_selex_SetInmap( afp); break; case eslMSAFILE_STOCKHOLM: status = esl_msafile_stockholm_SetInmap(afp); break; default: ESL_XEXCEPTION(eslENOFORMAT, "no such alignment file format"); } if (esl_byp_IsReturned(byp_abc)) *byp_abc = abc; return eslOK; ERROR: /* on normal errors, afp is returned in an error state */ if (abc && ! esl_byp_IsProvided(byp_abc)) { esl_alphabet_Destroy(abc); } if (esl_byp_IsReturned(byp_abc)) *byp_abc = NULL; afp->abc = NULL; return status; } /*------------- end, open/close an ESLX_MSAFILE -----------------*/ /***************************************************************** *# 2. ESLX_MSAFILE_FMTDATA: optional extra constraints on formats. *****************************************************************/ /* Function: eslx_msafile_fmtdata_Init() * Synopsis: Initialize a structure. */ int eslx_msafile_fmtdata_Init(ESLX_MSAFILE_FMTDATA *fmtd) { fmtd->namewidth = 0; fmtd->rpl = 0; return eslOK; } /* Function: eslx_msafile_fmtdata_Copy() * Synopsis: Copy one structure to another. */ int eslx_msafile_fmtdata_Copy(ESLX_MSAFILE_FMTDATA *src, ESLX_MSAFILE_FMTDATA *dst) { dst->namewidth = src->namewidth; dst->rpl = src->rpl; return eslOK; } /*--------------- ESLX_MSAFILE_FMTDATA --------------------------*/ /***************************************************************** *# 3. Guessing file format. *****************************************************************/ static int msafile_guess_afalike(ESL_BUFFER *bf, int *ret_format); static int msafile_check_selex (ESL_BUFFER *bf); /* Function: eslx_msafile_GuessFileFormat() * Synopsis: Guess the MSA file format of an open buffer. * * Purpose: Peek into an open buffer, and try to determine what * alignment file format (if any) its input is in. If a * format can be determined, return and set * <*ret_fmtcode> to the format code. If not, return * and set <*ret_fmtcode> to * . In either case, the buffer is * restored to its original position upon return. * * If the corresponds to an open file with a file * name, we attempt to use the suffix as a clue. Suffix * rules for alignment files are as follows: * | Stockholm | .sto .sth .stk | * | Aligned FASTA | .afa .afasta | * | CLUSTAL | .aln | * | Pfam | .pfam | * | A2M | .a2m | * | SELEX | .slx .selex | * * Some formats may have variants that require special * handling. Caller may pass a pointer <*opt_fmtd> to a * structure to capture this * information from format autodetection, or . If the * structure is provided, it is reinitialized, and any * fields that can be determined by the appropriate * format-guessing function are filled in. If <*opt_fmtd> * is , the range of variation that can be captured * by some formats may be limited. Currently this only * affects PHYLIP format, where namewidth> * allows files with nonstandard name field widths to be * autodetected and parsed. * * Args: bf - the open buffer to read input from * ret_fmtcode - RETURN: format code that's determined * opt_fmtd - optRETURN: ptr to an structure to * be filled in with additional format-specific data, or * * Returns: on success, and <*ret_fmtcode> contains the format code. * if format can't be guessed, and <*ret_fmtcode> contains * . * * Throws: (no abnormal error conditions) */ int eslx_msafile_GuessFileFormat(ESL_BUFFER *bf, int *ret_fmtcode, ESLX_MSAFILE_FMTDATA *opt_fmtd) { esl_pos_t initial_offset; char *p; esl_pos_t n; int fmt_bysuffix = eslMSAFILE_UNKNOWN; int fmt_byfirstline = eslMSAFILE_UNKNOWN; int status; /* Initialize the optional data, if provided (move this initialization to a function someday) */ if (opt_fmtd) eslx_msafile_fmtdata_Init(opt_fmtd); /* As we start, save parser status: * remember the offset where we started (usually 0, but not necessarily) * set an anchor to be sure that this offset stays in the buffer's memory */ initial_offset = esl_buffer_GetOffset(bf); esl_buffer_SetAnchor(bf, initial_offset); /* First we try to guess based on the filename suffix. * (if there's a filename, and if it has a suffix, anyway.) */ if (bf->filename) { esl_file_Extension(bf->filename, 0, &p, &n); if (esl_memstrcmp(p, n, ".gz")) esl_file_Extension(bf->filename, 3, &p, &n); if (p) { if (esl_memstrcmp(p, n, ".sto")) fmt_bysuffix = eslMSAFILE_STOCKHOLM; else if (esl_memstrcmp(p, n, ".sth")) fmt_bysuffix = eslMSAFILE_STOCKHOLM; else if (esl_memstrcmp(p, n, ".stk")) fmt_bysuffix = eslMSAFILE_STOCKHOLM; else if (esl_memstrcmp(p, n, ".afa")) fmt_bysuffix = eslMSAFILE_AFA; else if (esl_memstrcmp(p, n, ".afasta")) fmt_bysuffix = eslMSAFILE_AFA; else if (esl_memstrcmp(p, n, ".aln")) fmt_bysuffix = eslMSAFILE_CLUSTAL; else if (esl_memstrcmp(p, n, ".pfam")) fmt_bysuffix = eslMSAFILE_PFAM; else if (esl_memstrcmp(p, n, ".a2m")) fmt_bysuffix = eslMSAFILE_A2M; else if (esl_memstrcmp(p, n, ".slx")) fmt_bysuffix = eslMSAFILE_SELEX; else if (esl_memstrcmp(p, n, ".selex")) fmt_bysuffix = eslMSAFILE_SELEX; } } /* Second, we peek at the first non-blank line of the file. * Multiple sequence alignment files are often identifiable by a token on this line. */ /* Skip blank lines, get first non-blank one */ do { status = esl_buffer_GetLine(bf, &p, &n); } while (status == eslOK && esl_memspn(p, n, " \t") == n); if (status == eslEOF) { *ret_fmtcode = eslMSAFILE_UNKNOWN; return eslENOFORMAT; } if (esl_memstrpfx(p, n, "# STOCKHOLM")) fmt_byfirstline = eslMSAFILE_STOCKHOLM; else if (esl_memstrpfx(p, n, ">")) fmt_byfirstline = eslMSAFILE_AFA; else if (esl_memstrpfx(p, n, "CLUSTAL")) fmt_byfirstline = eslMSAFILE_CLUSTAL; else if (esl_memstrcontains(p, n, "multiple sequence alignment")) fmt_byfirstline = eslMSAFILE_CLUSTALLIKE; else { char *tok; esl_pos_t toklen; /* look for , characteristic of PHYLIP files */ if (esl_memtok(&p, &n, " \t", &tok, &toklen) == eslOK && esl_memspn(tok, toklen, "0123456789") == toklen && esl_memtok(&p, &n, " \t", &tok, &toklen) == eslOK && esl_memspn(tok, toklen, "0123456789") == toklen) fmt_byfirstline = eslMSAFILE_PHYLIP; /* interleaved for now; we'll look more closely soon */ } /* Restore parser status, rewind to start */ esl_buffer_SetOffset (bf, initial_offset); esl_buffer_RaiseAnchor(bf, initial_offset); /* Rules to determine formats. * If we have to call a routine that looks deeper into the buffer * than the first line, that routine must restore buffer status. */ if (fmt_byfirstline == eslMSAFILE_STOCKHOLM) { if (fmt_bysuffix == eslMSAFILE_STOCKHOLM) *ret_fmtcode = eslMSAFILE_STOCKHOLM; else if (fmt_bysuffix == eslMSAFILE_PFAM) *ret_fmtcode = eslMSAFILE_PFAM; else *ret_fmtcode = eslMSAFILE_STOCKHOLM; } else if (fmt_byfirstline == eslMSAFILE_CLUSTAL) { *ret_fmtcode = eslMSAFILE_CLUSTAL; } else if (fmt_byfirstline == eslMSAFILE_CLUSTALLIKE) { *ret_fmtcode = eslMSAFILE_CLUSTALLIKE; } else if (fmt_byfirstline == eslMSAFILE_AFA) { if (fmt_bysuffix == eslMSAFILE_AFA) *ret_fmtcode = eslMSAFILE_AFA; else if (fmt_bysuffix == eslMSAFILE_A2M) *ret_fmtcode = eslMSAFILE_A2M; else msafile_guess_afalike (bf, ret_fmtcode); } else if (fmt_byfirstline == eslMSAFILE_PHYLIP) { int namewidth; status = esl_msafile_phylip_CheckFileFormat(bf, ret_fmtcode, &namewidth); if (opt_fmtd) opt_fmtd->namewidth = namewidth; else if (namewidth != 10) *ret_fmtcode = eslMSAFILE_UNKNOWN; /* if we can't store the nonstandard width, we can't allow the caller to think it can parse this */ } else { /* selex parser can handle psiblast too */ if (fmt_bysuffix == eslMSAFILE_SELEX) *ret_fmtcode = eslMSAFILE_SELEX; else if (msafile_check_selex(bf) == eslOK) *ret_fmtcode = eslMSAFILE_SELEX; } return ((*ret_fmtcode == eslMSAFILE_UNKNOWN) ? eslENOFORMAT: eslOK); } /* Function: eslx_msafile_IsMultiRecord() * Synopsis: Test if a format supports multiple MSAs per file. * * Purpose: Return if MSA file format supports * more than one MSA record per file. Return * otherwise (including the cases of being * invalid or ). */ int eslx_msafile_IsMultiRecord(int fmt) { switch (fmt) { case eslMSAFILE_UNKNOWN: return FALSE; case eslMSAFILE_STOCKHOLM: return TRUE; case eslMSAFILE_PFAM: return TRUE; case eslMSAFILE_A2M: return FALSE; case eslMSAFILE_PSIBLAST: return FALSE; case eslMSAFILE_SELEX: return FALSE; case eslMSAFILE_AFA: return FALSE; case eslMSAFILE_CLUSTAL: return FALSE; case eslMSAFILE_CLUSTALLIKE: return FALSE; case eslMSAFILE_PHYLIP: return TRUE; /* because seqboot. undocumented in phylip, phylip format can come out multi-msa */ case eslMSAFILE_PHYLIPS: return TRUE; /* ditto */ default: return FALSE; } return FALSE; /* keep compilers happy */ } /* Function: eslx_msafile_EncodeFormat() * Synopsis: Convert text string to an MSA file format code. * * Purpose: Given a text string, match it case-insensitively * against a list of possible formats, and return the * appropriate MSA file format code. For example, * returns * . * * If the format is unrecognized, return * . * * Note: Keep in sync with , * which decodes all possible sequence file formats, * both unaligned and aligned. */ int eslx_msafile_EncodeFormat(char *fmtstring) { if (strcasecmp(fmtstring, "stockholm") == 0) return eslMSAFILE_STOCKHOLM; if (strcasecmp(fmtstring, "pfam") == 0) return eslMSAFILE_PFAM; if (strcasecmp(fmtstring, "a2m") == 0) return eslMSAFILE_A2M; if (strcasecmp(fmtstring, "phylip") == 0) return eslMSAFILE_PHYLIP; if (strcasecmp(fmtstring, "phylips") == 0) return eslMSAFILE_PHYLIPS; if (strcasecmp(fmtstring, "psiblast") == 0) return eslMSAFILE_PSIBLAST; if (strcasecmp(fmtstring, "selex") == 0) return eslMSAFILE_SELEX; if (strcasecmp(fmtstring, "afa") == 0) return eslMSAFILE_AFA; if (strcasecmp(fmtstring, "clustal") == 0) return eslMSAFILE_CLUSTAL; if (strcasecmp(fmtstring, "clustallike") == 0) return eslMSAFILE_CLUSTALLIKE; return eslMSAFILE_UNKNOWN; } /* Function: eslx_msafile_DecodeFormat() * Synopsis: Convert internal file format code to text string. * * Purpose: Given an internal file format code * (, for example), returns * a string suitable for printing ("Stockholm", * for example). * * Returns: a pointer to a static description string. * * Throws: If code isn't valid, throws an exception * internally, and returns . * * Note: Keep in sync with . */ char * eslx_msafile_DecodeFormat(int fmt) { switch (fmt) { case eslMSAFILE_UNKNOWN: return "unknown"; case eslMSAFILE_STOCKHOLM: return "Stockholm"; case eslMSAFILE_PFAM: return "Pfam"; case eslMSAFILE_A2M: return "UCSC A2M"; case eslMSAFILE_PSIBLAST: return "PSI-BLAST"; case eslMSAFILE_SELEX: return "SELEX"; case eslMSAFILE_AFA: return "aligned FASTA"; case eslMSAFILE_CLUSTAL: return "Clustal"; case eslMSAFILE_CLUSTALLIKE: return "Clustal-like"; case eslMSAFILE_PHYLIP: return "PHYLIP (interleaved)"; case eslMSAFILE_PHYLIPS: return "PHYLIP (sequential)"; default: break; } esl_exception(eslEINVAL, FALSE, __FILE__, __LINE__, "no such msa format code %d\n", fmt); return NULL; } /* An aligned FASTA-like format can either be: * eslMSAFILE_AFA * eslMSAFILE_A2M * * Let alen = # of residues+gaps per sequence * Let ncons = # of uppercase + '-': consensus positions in A2M * * If two seqs have same nonzero ncons, different alen, and no dots, that's a * positive identification of dotless A2M. * * If two seqs have same alen but different ncons, that positive id of * AFA. * * If we get ~100 sequences in and we still haven't decided, just call * it AFA. */ static int msafile_guess_afalike(ESL_BUFFER *bf, int *ret_format) { int format = eslMSAFILE_UNKNOWN; int max_nseq = 100; esl_pos_t anchor = -1; char *p; esl_pos_t n, pos; int nseq; int nupper, nlower, ndash, ndot, nother; int alen, ncons; int saw_other = FALSE; int status; anchor = esl_buffer_GetOffset(bf); if ((status = esl_buffer_SetAnchor(bf, anchor)) != eslOK) { status = eslEINCONCEIVABLE; goto ERROR; } /* [eslINVAL] can't happen here */ while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK) { while (n && isspace(*p)) { p++; n--; } if (!n) continue; if (*p != '>') { status = eslEFORMAT; goto ERROR; } else break; } if (status == eslEOF) { status = eslEFORMAT; goto ERROR; } else if (status != eslOK) goto ERROR; alen = ncons = 0; for (nseq = 0; nseq < max_nseq; nseq++) { nupper = nlower = ndash = ndot = nother = 0; while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK) { while (n && isspace(*p)) { p++; n--; } if (!n) continue; if (*p == '>') break; for (pos = 0; pos < n; pos++) { if (isupper(p[pos])) nupper++; else if (islower(p[pos])) nlower++; else if (p[pos] == '-') ndash++; else if (p[pos] == '.') ndot++; else if (!isspace(p[pos])) nother++; } } if (status != eslOK && status != eslEOF) goto ERROR; if (nother) saw_other = TRUE; /* A2M is strict: only allows .-[a-z][A-Z] */ if (nseq == 0) { alen = nupper+nlower+ndash+ndot+nother; ncons = nupper+ndash; } else { /* in ungapped alignments w/ no insertions, we can't distinguish AFA, A2M. These are *positive* id tests */ if ( nupper+nlower+ndash+ndot+nother == alen && nupper+ndash != ncons) { format = eslMSAFILE_AFA; goto DONE; } if (ncons && !saw_other && !ndot && nupper+nlower+ndash != alen && nupper+ndash == ncons) { format = eslMSAFILE_A2M; goto DONE; } /* and there's a *negative* id test, for an unaligned FASTA file: must have nonzero ncons to be A2M, must have equal-length seqs to be AFA */ /* the example we're catching here is an unaligned FASTA file of all lower case residues: don't call that A2M. Hence the test for nonzero */ if (!ncons && nupper+nlower+ndash+ndot+nother != alen) { format = eslMSAFILE_UNKNOWN; goto DONE; } } } format = eslMSAFILE_AFA; /* if we haven't positively id'ed A2M vs AFA, it probably doesn't matter (gapless alignment): call it AFA */ /* deliberate flowthrough */ DONE: esl_buffer_SetOffset(bf, anchor); /* Rewind to where we were. */ esl_buffer_RaiseAnchor(bf, anchor); *ret_format = format; return eslOK; ERROR: if (anchor != -1) { esl_buffer_SetOffset(bf, anchor); esl_buffer_RaiseAnchor(bf, anchor); } *ret_format = eslMSAFILE_UNKNOWN; return status; } /* msafile_check_selex() * Checks whether an input source appears to be in SELEX format. * * Check whether the input source appears to be a * SELEX-format alignment file, starting from the current point, * to the end of the input. Return if so, * if not. * * The checker is more rigorous than the parser. To be autodetected, * the SELEX file can't use whitespace for gaps. The parser, though, * allows whitespace. A caller would have to specific SELEX format * explicitly in that case. */ static int msafile_check_selex(ESL_BUFFER *bf) { esl_pos_t start_offset = -1; int block_nseq = 0; /* Number of seqs in each block is checked */ int nseq = 0; esl_pos_t block_nres = 0; /* Number of residues in each line is checked */ char *firstname = NULL; /* First seq name of every block is checked */ esl_pos_t namelen = 0; int blockidx = 0; int in_block = FALSE; char *p, *tok; esl_pos_t n, toklen; int status; /* Anchor at the start of the input, so we can rewind */ start_offset = esl_buffer_GetOffset(bf); if ( (status = esl_buffer_SetAnchor(bf, start_offset)) != eslOK) goto ERROR; while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK) { /* Some automatic giveaways of SELEX format */ if (esl_memstrpfx(p, n, "#=RF")) { status = eslOK; goto DONE; } if (esl_memstrpfx(p, n, "#=CS")) { status = eslOK; goto DONE; } if (esl_memstrpfx(p, n, "#=SS")) { status = eslOK; goto DONE; } if (esl_memstrpfx(p, n, "#=SA")) { status = eslOK; goto DONE; } /* skip comments */ if (esl_memstrpfx(p, n, "#")) continue; /* blank lines: end block, reset block counters */ if (esl_memspn(p, n, " \t") == n) { if (block_nseq && block_nseq != nseq) { status = eslFAIL; goto DONE;} /* each block has same # of seqs */ if (in_block) blockidx++; if (blockidx >= 3) { status = eslOK; goto DONE; } /* stop after three blocks; we're pretty sure by now */ in_block = FALSE; block_nres = 0; block_nseq = nseq; nseq = 0; continue; } /* else we're a "sequence" line. test for two and only two non-whitespace * fields; test that second field has same length; test that each block * starts with the same seq name.. */ in_block = TRUE; if ( (status = esl_memtok(&p, &n, " \t", &tok, &toklen)) != eslOK) goto ERROR; /* there's at least one token - we already checked for blank lines */ if (nseq == 0) /* check first seq name in each block */ { if (blockidx == 0) { firstname = tok; namelen = toklen; } /* First block: set the name we check against. */ else if (toklen != namelen || memcmp(tok, firstname, toklen) != 0) { status = eslFAIL; goto DONE; } /* Subsequent blocks */ } if (esl_memtok(&p, &n, " \t", &tok, &toklen) != eslOK) { status = eslFAIL; goto DONE; } if (block_nres && toklen != block_nres) { status = eslFAIL; goto DONE; } block_nres = toklen; if (esl_memtok(&p, &n, " \t", &tok, &toklen) == eslOK) { status = eslFAIL; goto DONE; } nseq++; } if (status != eslEOF) goto ERROR; /* EOF is expected and good; anything else is bad */ if (in_block) blockidx++; status = (blockidx ? eslOK : eslFAIL); /* watch out for the case of no input */ /* deliberate readthru */ DONE: if (start_offset != -1) { if (esl_buffer_SetOffset(bf, start_offset) != eslOK) goto ERROR; if (esl_buffer_RaiseAnchor(bf, start_offset) != eslOK) goto ERROR; start_offset = -1; } return status; ERROR: if (start_offset != -1) { esl_buffer_SetOffset(bf, start_offset); esl_buffer_RaiseAnchor(bf, start_offset); } return status; } /*---------------- end, file format utilities -------------------*/ /***************************************************************** *# 4. Guessing alphabet *****************************************************************/ #ifdef eslAUGMENT_ALPHABET /* Function: eslx_msafile_GuessAlphabet() * Synopsis: Guess what kind of sequences the MSA file contains. * * Purpose: Guess the alphabet of the sequences in the open * -- , , or -- * based on the residue composition of the input. * * Returns: Returns on success, and <*ret_type> is set * to , , or . * * Returns and sets <*ret_type> to * if the alphabet cannot be reliably * guessed. * * Either way, the 's buffer is restored to its original * state, no matter how much data we had to read while trying * to guess. * * Throws: - an allocation error. * - a system call such as failed. * - "impossible" corruption, internal bug */ int eslx_msafile_GuessAlphabet(ESLX_MSAFILE *afp, int *ret_type) { int status = eslENOALPHABET; switch (afp->format) { case eslMSAFILE_STOCKHOLM: status = esl_msafile_stockholm_GuessAlphabet(afp, ret_type); break; case eslMSAFILE_PFAM: status = esl_msafile_stockholm_GuessAlphabet(afp, ret_type); break; case eslMSAFILE_A2M: status = esl_msafile_a2m_GuessAlphabet (afp, ret_type); break; case eslMSAFILE_PSIBLAST: status = esl_msafile_psiblast_GuessAlphabet (afp, ret_type); break; case eslMSAFILE_SELEX: status = esl_msafile_selex_GuessAlphabet (afp, ret_type); break; case eslMSAFILE_AFA: status = esl_msafile_afa_GuessAlphabet (afp, ret_type); break; case eslMSAFILE_CLUSTAL: status = esl_msafile_clustal_GuessAlphabet (afp, ret_type); break; case eslMSAFILE_CLUSTALLIKE: status = esl_msafile_clustal_GuessAlphabet (afp, ret_type); break; case eslMSAFILE_PHYLIP: status = esl_msafile_phylip_GuessAlphabet (afp, ret_type); break; case eslMSAFILE_PHYLIPS: status = esl_msafile_phylip_GuessAlphabet (afp, ret_type); break; } return status; } #endif /*eslAUGMENT_ALPHABET*/ /*----------- end, utilities for alphabets ----------------------*/ /***************************************************************** *# 5. Random msa flatfile database access (with SSI) *****************************************************************/ #ifdef eslAUGMENT_SSI /* Function: eslx_msafile_PositionByKey() * Synopsis: Use SSI to reposition file to start of named MSA. * * Purpose: Reposition so that the next MSA we read * will be the one named (or accessioned) . * * Returns: on success, and the file is repositioned * such that the next call will read the * alignment named . * * Returns if isn't found in the index * for . * * Returns if something goes wrong trying to * read the index, indicating some sort of file format * problem in the SSI file. * * Throws: if there's no open SSI index; * if the is invalid, either requiring rewind * of a nonrewindable stream, or off the end of the data; * if a system call such as fails; * on allocation failure. * In all these cases, the state of the is uncertain * and may be corrupt; the application should not continue * to use it. */ int eslx_msafile_PositionByKey(ESLX_MSAFILE *afp, const char *key) { uint16_t fh; off_t offset; int status; if (afp->ssi == NULL) ESL_EXCEPTION(eslENODATA, "Need an open SSI index to call eslx_msafile_PositionByKey()"); if ((status = esl_ssi_FindName(afp->ssi, key, &fh, &offset, NULL, NULL)) != eslOK) return status; /* eslENOTFOUND|eslEFORMAT [eslEMEM] */ if ((status = esl_buffer_SetOffset(afp->bf, offset)) != eslOK) return status; /* [eslEINVAL|eslESYS|eslEMEM] */ /* The linenumber gets messed up after a file positioning. Best we can do * is to turn it off (set it to -1). FIX THIS next time SSI format is * changed: add linenumber to a primary key record. */ afp->linenumber = -1; return eslOK; } #endif /*eslAUGMENT_SSI*/ /*------------- end of functions added by SSI augmentation -------------------*/ /***************************************************************** *# 6. Reading MSAs from input *****************************************************************/ /* Function: eslx_msafile_Read() * Synopsis: Read next MSA from input. * * Purpose: Reads the next MSA from open MSA input , and return it in * <*ret_msa>. * * Args: afp - open alignment input stream 8 *ret_msa - RETURN: alignment * * Returns: on success. * * on a parse error, and errmsg> is set * to a user-directed error message; <*ret_msa> is . * * If no alignment is found at all, returns , * and errmsg> is blank; <*ret_msa> is . * * On normal error, and the return status code may be * passed to to print diagnostics * to (including input source information and line * number) and exit. * * Throws: - an allocation failed. * - a system call such as fread() failed * - "impossible" corruption */ int eslx_msafile_Read(ESLX_MSAFILE *afp, ESL_MSA **ret_msa) { ESL_MSA *msa = NULL; int status = eslOK; #ifdef eslAUGMENT_SSI esl_pos_t offset = esl_buffer_GetOffset(afp->bf); #endif switch (afp->format) { case eslMSAFILE_A2M: if ((status = esl_msafile_a2m_Read (afp, &msa)) != eslOK) goto ERROR; break; case eslMSAFILE_AFA: if ((status = esl_msafile_afa_Read (afp, &msa)) != eslOK) goto ERROR; break; case eslMSAFILE_CLUSTAL: if ((status = esl_msafile_clustal_Read (afp, &msa)) != eslOK) goto ERROR; break; case eslMSAFILE_CLUSTALLIKE: if ((status = esl_msafile_clustal_Read (afp, &msa)) != eslOK) goto ERROR; break; case eslMSAFILE_PFAM: if ((status = esl_msafile_stockholm_Read(afp, &msa)) != eslOK) goto ERROR; break; case eslMSAFILE_PHYLIP: if ((status = esl_msafile_phylip_Read (afp, &msa)) != eslOK) goto ERROR; break; case eslMSAFILE_PHYLIPS: if ((status = esl_msafile_phylip_Read (afp, &msa)) != eslOK) goto ERROR; break; case eslMSAFILE_PSIBLAST: if ((status = esl_msafile_psiblast_Read (afp, &msa)) != eslOK) goto ERROR; break; case eslMSAFILE_SELEX: if ((status = esl_msafile_selex_Read (afp, &msa)) != eslOK) goto ERROR; break; case eslMSAFILE_STOCKHOLM: if ((status = esl_msafile_stockholm_Read(afp, &msa)) != eslOK) goto ERROR; break; default: ESL_EXCEPTION(eslEINCONCEIVABLE, "no such msa file format"); } #ifdef eslAUGMENT_SSI msa->offset = offset; #endif *ret_msa = msa; return eslOK; ERROR: if (msa) esl_msa_Destroy(msa); *ret_msa = NULL; return status; } /* Function: eslx_msafile_ReadFailure() * Synopsis: Report diagnostics of a normal error in parsing MSA file, and exit. * * Purpose: Report user-directed diagnostics of a normal error from * parsing an MSA file. Output the error message to * , along with information about what we were * parsing (filename, if it was a file) and where we were * in the input (linenumber, if we know it). This * information is all available in . Then close * and exit with the provided by the caller. * * Args: afp - open ESLX_MSAFILE, containing information about * the error and the input source. * status - exit status; generally eslEFORMAT. * * Returns: no return. Exits here with . */ void eslx_msafile_ReadFailure(ESLX_MSAFILE *afp, int status) { switch (status) { case eslEFORMAT: fprintf(stderr, "Alignment input parse error:\n %s\n", afp->errmsg); break; case eslEOF: fprintf(stderr, "Alignment input appears empty?\n"); break; default: fprintf(stderr, "Alignment input read error; unexpected code %d\n", status); break; } switch (afp->bf->mode_is) { case eslBUFFER_STREAM: fprintf(stderr, " while reading %s from an input stream (not a file)\n", eslx_msafile_DecodeFormat(afp->format)); break; case eslBUFFER_CMDPIPE: fprintf(stderr, " while reading %s through a pipe (not a file)\n", eslx_msafile_DecodeFormat(afp->format)); break; case eslBUFFER_FILE: case eslBUFFER_ALLFILE: case eslBUFFER_MMAP: fprintf(stderr, " while reading %s file %s\n", eslx_msafile_DecodeFormat(afp->format), afp->bf->filename); break; case eslBUFFER_STRING: fprintf(stderr, " while reading %s from a provided string (not a file)\n", eslx_msafile_DecodeFormat(afp->format)); break; default: break; } if (afp->linenumber > 0) fprintf(stderr, " at or near line %" PRIu64 "\n", afp->linenumber); else fprintf(stderr, " at or near byte %" PRIu64 "\n", esl_buffer_GetOffset(afp->bf)); eslx_msafile_Close(afp); exit(status); } /*------------ end, reading MSA from ESLX_MSAFILE ---------------*/ /***************************************************************** *# 7. Writing an MSA to a stream. *****************************************************************/ /* Function: eslx_msafile_Write() * Synopsis: Write an MSA to a stream. * * Purpose: Writes alignment to open stream in format . * * In general, the is unchanged, but there are some * exceptions. For example, writing an alignment in A2M format * will alter alignment data (marking missing data * symbols on heuristically defined sequence fragments) and * create an <\#=RF> annotation line, if an rf> * annotation line isn't already present in the . * * Args: fp - open stream (such as ) * msa - alignment to write * fmt - format code (such as ) * * Returns: on success. * * Throws: on allocation error. * on any system write error, such as a filled disk. */ int eslx_msafile_Write(FILE *fp, ESL_MSA *msa, int fmt) { int status; switch (fmt) { case eslMSAFILE_STOCKHOLM: status = esl_msafile_stockholm_Write(fp, msa, eslMSAFILE_STOCKHOLM); break; case eslMSAFILE_PFAM: status = esl_msafile_stockholm_Write(fp, msa, eslMSAFILE_PFAM); break; case eslMSAFILE_A2M: status = esl_msafile_a2m_Write (fp, msa); break; case eslMSAFILE_PSIBLAST: status = esl_msafile_psiblast_Write (fp, msa); break; case eslMSAFILE_SELEX: status = esl_msafile_selex_Write (fp, msa); break; case eslMSAFILE_AFA: status = esl_msafile_afa_Write (fp, msa); break; case eslMSAFILE_CLUSTAL: status = esl_msafile_clustal_Write (fp, msa, eslMSAFILE_CLUSTAL); break; case eslMSAFILE_CLUSTALLIKE: status = esl_msafile_clustal_Write (fp, msa, eslMSAFILE_CLUSTALLIKE); break; case eslMSAFILE_PHYLIP: status = esl_msafile_phylip_Write (fp, msa, eslMSAFILE_PHYLIP, NULL); break; case eslMSAFILE_PHYLIPS: status = esl_msafile_phylip_Write (fp, msa, eslMSAFILE_PHYLIPS, NULL); break; default: ESL_EXCEPTION(eslEINCONCEIVABLE, "no such msa file format"); } return status; } /*-------------- end, writing MSA to stream ---------------------*/ /***************************************************************** *# 8. Utilities used by specific format parsers. *****************************************************************/ /* Function: eslx_msafile_GetLine() * Synopsis: Read next line of input alignment file. * * Purpose: Read next line of input , into its internal * data fields: line> points to the start of the * line in bf>, n> is its length in * bytes, lineoffset> is the offset in the input * to the start of the line, and linenumber> is * the linenumber from <1..N> for total lines in the * input. * * Optionally, caller can request <*opt_p>, <*opt_n>, * which are set to line>,n>. This gives the * caller a modifiable line pointer that it can step * through, while line> is preserved for possible * diagnostics if anything goes awry. * * Args: : an open alignment file input * <*opt_p> : optRETURN: modifiable copy of line> pointer * <*opt_n> : optRETURN: modifiable copy of n> * * Returns: on success. * * at EOF. Now line> is , n> * is <0>, and lineoffset> is <0>. linenumber> * is the total number of lines in the input. * * Throws: if an allocation fails. * if a system call fails, such as fread(). * on internal code errors. */ int eslx_msafile_GetLine(ESLX_MSAFILE *afp, char **opt_p, esl_pos_t *opt_n) { int status; afp->lineoffset = esl_buffer_GetOffset(afp->bf); if ((status = esl_buffer_GetLine(afp->bf, &(afp->line), &(afp->n))) != eslOK) goto ERROR; if (afp->linenumber != -1) afp->linenumber++; if (opt_p) *opt_p = afp->line; if (opt_n) *opt_n = afp->n; return eslOK; ERROR: afp->line = NULL; afp->n = 0; afp->lineoffset = -1; /* leave linenumber alone. on EOF, it is the number of lines in the file, and that might be useful. */ if (opt_p) *opt_p = NULL; if (opt_n) *opt_n = 0; return status; } /* Function: eslx_msafile_PutLine() * Synopsis: Put the line we just read back in the input stream * * Purpose: Put the line we just read back in the input stream * and unset line> and its associated information * internally. The next call * will read exactly the same line again. * * This gets used in parsing files that contain multiple * MSAs. If the way we determine that an MSA record has * ended is by reading the first line of the next MSA * record, then we may want to stuff it back in the input * buffer, so it gets parsed properly as part of the next * record. In Pfam/Stockholm parsing we don't have to * do this, because the first line is just a format code, * with no record-specific data. But in PHYLIP multiple MSA * format, for example, the first line is nseq,alen. * * Args: afp - the open input stream * * Returns: on succes * * Throws: , , if the * call fails. */ int eslx_msafile_PutLine(ESLX_MSAFILE *afp) { int status; if ((status = esl_buffer_Set(afp->bf, afp->line, 0)) != eslOK) return status; afp->line = NULL; afp->n = 0; if (afp->linenumber != -1) afp->linenumber--; afp->lineoffset = -1; return eslOK; } /*--------------- end, parser utilities -------------------------*/ /***************************************************************** * 9. Unit tests *****************************************************************/ #ifdef eslMSAFILE_TESTDRIVE static void utest_format2format(int fmt1, int fmt2) { char msg[] = "esl_msafile: format2format unit test failed"; char tmpfile1[32] = "esltmpXXXXXX"; char tmpfile2[32] = "esltmpXXXXXX"; char tmpfile3[32] = "esltmpXXXXXX"; FILE *ofp = NULL; ESL_MSA *msa1, *msa2, *msa3, *msa4; ESLX_MSAFILE *afp; int alphatype = eslAMINO; ESL_ALPHABET *abc = esl_alphabet_Create(alphatype); ESL_ALPHABET *abc2 = NULL; /* The test alignment has to have a shorter seq1, to make A2M format distinct from AFA. (w/ no RF line, A2M defaults to using 1st seq as consensus) * It must be longer than 60 residues, to make Phylip interleaved distinct from Phylip sequential. */ char *testmsa = "\ # STOCKHOLM 1.0\n\ seq1 ACDEFGHIKLMNPQRSTVWYacdefghiklmnpq------ACDEFGHIKLMNPQRSTVWYacde......mnpqrstvwyACDEFGHI______RSTVWYacdefghiklmnpqrstvwy\n\ seq2 ACDEFGHIKLMNPQRSTVWYacdefghiklmnpqrstvwyACDEFGHIKLMNPQRSTVWYacdefghiklmnpqrstvwyACDEFGHIKLMNPQRSTVWYacdefghiklmnpqrstvwy\n\ //\n"; /* Create the test msa, msa1, digital mode, no autodetections */ if ( eslx_msafile_OpenMem(&abc, testmsa, strlen(testmsa), eslMSAFILE_STOCKHOLM, NULL, &afp) != eslOK) esl_fatal(msg); if ( eslx_msafile_Read(afp, &msa1) != eslOK) esl_fatal(msg); eslx_msafile_Close(afp); /* Write it to tmpfile1 in fmt1. (This exercises writing of digital MSAs, in all formats) */ if ( esl_tmpfile_named(tmpfile1, &ofp) != eslOK) esl_fatal(msg); if ( eslx_msafile_Write(ofp, msa1, fmt1) != eslOK) esl_fatal(msg); fclose(ofp); /* Read it back from in TEXT mode (verbatim), with format autodetection */ if ( eslx_msafile_Open(NULL, tmpfile1, NULL, eslMSAFILE_UNKNOWN, NULL, &afp) != eslOK) esl_fatal(msg); if (fmt1 == eslMSAFILE_PFAM && afp->format == eslMSAFILE_STOCKHOLM) afp->format = eslMSAFILE_PFAM; if (fmt1 == eslMSAFILE_PSIBLAST && afp->format == eslMSAFILE_SELEX) afp->format = eslMSAFILE_PSIBLAST; if ( eslx_msafile_Read(afp, &msa2) != eslOK) esl_fatal(msg); eslx_msafile_Close(afp); /* Write it to tmpfile2 in fmt2. (This exercises writing of text-mode MSAs, in all formats) */ if ( esl_tmpfile_named(tmpfile2, &ofp) != eslOK) esl_fatal(msg); if ( eslx_msafile_Write(ofp, msa2, fmt2) != eslOK) esl_fatal(msg); fclose(ofp); /* Read it back in TEXT mode. */ if ( eslx_msafile_Open(NULL, tmpfile2, NULL, eslMSAFILE_UNKNOWN, NULL, &afp) != eslOK) esl_fatal(msg); if (fmt2 == eslMSAFILE_PFAM && afp->format == eslMSAFILE_STOCKHOLM) afp->format = eslMSAFILE_PFAM; if (fmt2 == eslMSAFILE_PSIBLAST && afp->format == eslMSAFILE_SELEX) afp->format = eslMSAFILE_PSIBLAST; if ( eslx_msafile_Read(afp, &msa3) != eslOK) esl_fatal(msg); eslx_msafile_Close(afp); /* Write it to tmpfile4 in fmt2. (This exercises writing of digital-mode MSAs, in all formats */ if ( esl_tmpfile_named(tmpfile3, &ofp) != eslOK) esl_fatal(msg); if ( eslx_msafile_Write(ofp, msa3, fmt2) != eslOK) esl_fatal(msg); fclose(ofp); /* Read it back in DIGITAL mode, with alphabet autodetection but not format */ if ( eslx_msafile_Open(&abc2, tmpfile3, NULL, fmt2, NULL, &afp) != eslOK) esl_fatal(msg); if ( eslx_msafile_Read(afp, &msa4) != eslOK) esl_fatal(msg); eslx_msafile_Close(afp); /* Now: * msa1 = digital mode test alignment, created from Stockholm string * msa2 = TEXT mode, read from tmpfile1 * msa3 = TEXT mode, read from tmpfile2 * msa4 = digital mode, read from tmpfile3 * So we expect: * msa2==msa3 * msa1==msa4 */ /* some normalization before comparing alignments. */ esl_msa_SymConvert(msa2, "abcdefghijklmnopqrstuvwxyz.", "ABCDEFGHIJKLMNOPQRSTUVWXYZ-"); esl_msa_SymConvert(msa3, "abcdefghijklmnopqrstuvwxyz.", "ABCDEFGHIJKLMNOPQRSTUVWXYZ-"); if (msa2->rf) { free (msa2->rf); msa2->rf = NULL; } if (msa3->rf) { free (msa3->rf); msa3->rf = NULL; } if (msa4->rf) { free (msa4->rf); msa4->rf = NULL; } if (esl_msa_Compare(msa2, msa3) != eslOK) esl_fatal(msg); if (esl_msa_Compare(msa1, msa4) != eslOK) esl_fatal(msg); remove(tmpfile1); remove(tmpfile2); remove(tmpfile3); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); esl_msa_Destroy(msa3); esl_msa_Destroy(msa4); esl_alphabet_Destroy(abc); esl_alphabet_Destroy(abc2); } static void utest_tricky_format_decisions(void) { ESLX_MSAFILE *afp; int status; /* an all-lower case unaligned FASTA file should not get called A2M format * an A2M file should have at least one consensus column, not be all-insert. */ char *testmsa1 = "\ >seq1\n\ aaaaaa\n\ >seq2\n\ aaaaa\n"; status = eslx_msafile_OpenMem(NULL, testmsa1, strlen(testmsa1), eslMSAFILE_UNKNOWN, NULL, &afp); if (status == eslOK) esl_fatal("testmsa1 erroneously detected as %s", eslx_msafile_DecodeFormat(afp->format)); else if (status != eslENOFORMAT) esl_fatal("tricky_format_decisions test failed"); eslx_msafile_Close(afp); } #endif /*eslMSAFILE_TESTDRIVE*/ /*----------------- end, unit tests -----------------------------*/ /***************************************************************** * 10. Test driver *****************************************************************/ #ifdef eslMSAFILE_TESTDRIVE /* compile: gcc -g -Wall -I. -L. -o esl_msafile_utest -DeslMSAFILE_TESTDRIVE esl_msafile.c -leasel -lm * (gcov): gcc -g -Wall -fprofile-arcs -ftest-coverage -I. -L. -o esl_msafile_utest -DeslMSAFILE_TESTDRIVE esl_msafile.c -leasel -lm * run: ./esl_msafile_utest */ #include "esl_config.h" #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_msafile.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for MSA input/output format module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); int fmt1, fmt2; for (fmt1 = eslMSAFILE_STOCKHOLM; fmt1 <= eslMSAFILE_PHYLIPS; fmt1++) for (fmt2 = eslMSAFILE_STOCKHOLM; fmt2 <= eslMSAFILE_PHYLIPS; fmt2++) utest_format2format(fmt1, fmt2); utest_tricky_format_decisions(); esl_getopts_Destroy(go); exit(0); } #endif /*eslMSAFILE_TESTDRIVE*/ /*----------------- end, test driver ----------------------------*/ /***************************************************************** * 11. Examples. *****************************************************************/ #ifdef eslMSAFILE_EXAMPLE /*::cexcerpt::msafile_example::begin::*/ #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-i", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show info, instead of converting format", 0 }, { "--informat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "specify the input MSA file is in format ", 0 }, { "--outformat", eslARG_STRING, "Clustal", NULL, NULL, NULL, NULL, NULL, "write the output MSA in format ", 0 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use DNA alphabet", 0 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use RNA alphabet", 0 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use protein alphabet", 0 }, { "--text", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use text mode: no digital alphabet", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of multiple alignment input and output using the msafile module(s)"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *msafile = esl_opt_GetArg(go, 1); int infmt = eslMSAFILE_UNKNOWN; int outfmt = eslMSAFILE_UNKNOWN; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; int textmode = esl_opt_GetBoolean(go, "--text"); int showinfo = esl_opt_GetBoolean(go, "-i"); int nali = 0; int status; /* If you know the alphabet you want, create it - you'll pass it to eslx_msafile_Open() */ if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); /* If you know the MSA file format, set it (, here). */ if (esl_opt_IsOn(go, "--informat") && (infmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--informat"))) == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid MSA file format for --informat", esl_opt_GetString(go, "--informat")); /* Open in text or digital mode. * To let the Open() function autoguess the format, you pass . * To let it autoguess the alphabet, you set and pass <&abc>. * To open in text mode instead of digital, you pass for the alphabet argument. * eslx_msafile_OpenFailure() is a convenience, printing various diagnostics of any * open failure to . You can of course handle your own diagnostics instead. */ if (textmode) status = eslx_msafile_Open(NULL, msafile, NULL, infmt, NULL, &afp); else status = eslx_msafile_Open(&abc, msafile, NULL, infmt, NULL, &afp); if (status != eslOK) eslx_msafile_OpenFailure(afp, status); if (showinfo) { printf("# Format: %s\n", eslx_msafile_DecodeFormat(afp->format)); printf("# Alphabet: %s\n", (afp->abc ? esl_abc_DecodeType(afp->abc->type) : "text mode")); } /* Choose the output file format */ if ( (outfmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--outformat"))) == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid MSA file format for --outformat", esl_opt_GetString(go, "--outformat")); while ((status = eslx_msafile_Read(afp, &msa)) == eslOK) { /* if digital MSA: msa->ax[idx=0..nseq-1][acol=1..alen] is the alignment data; * if text MSA: msa->aseq[idx=0..nseq-1][acol=0..alen-1] */ nali++; if (showinfo) printf("# alignment %5d: %15s: %6d seqs, %5d columns\n\n", nali, msa->name, (int) msa->nseq, (int) msa->alen); else eslx_msafile_Write(stdout, msa, outfmt); esl_msa_Destroy(msa); } if (nali == 0 || status != eslEOF) eslx_msafile_ReadFailure(afp, status); /* a convenience, like eslx_msafile_OpenFailure() */ esl_alphabet_Destroy(abc); eslx_msafile_Close(afp); esl_getopts_Destroy(go); exit(0); } /*::cexcerpt::msafile_example::end::*/ #endif /*eslMSAFILE_EXAMPLE*/ /*------------------------ end of examples -----------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msafile.c $ * SVN $Id: esl_msafile.c 897 2013-12-17 22:16:23Z wheelert $ *****************************************************************/ hmmer-3.1b2/easel/esl_stopwatch.tex0000664361611702660230000001105112473612607016763 0ustar wheelerteddy The stopwatch module measures the elapsed (wall clock) time, CPU time, and system time consumed by any part of a program. The simple way to measure the CPU time consumption in an ANSI C program is: \begin{cchunk} clock_t t0, t1; t0 = clock(); /* do_stuff */ t1 = clock(); printf("cpu time: %.2f\n", (double) (t1-t0)/(double) CLOCKS_PER_SEC); \end{cchunk} The stopwatch module is just an elaboration of this. It tracks elapsed and system time, in addition to cpu time; it hides the details of converting a time difference in hardware clock ticks to a human-interpretable time in seconds; and it provides a standard output function for formatting times, similar to the output of the standard UNIX \ccode{time} command line utility for timing processes. \begin{table}[hb] \begin{tabular}{ll}\hline \ccode{esl\_stopwatch\_Create()} & Creates new stopwatch.\\ \ccode{esl\_stopwatch\_Destroy()} & Frees a stopwatch.\\ \ccode{esl\_stopwatch\_Start()} & Starts a stopwatch.\\ \ccode{esl\_stopwatch\_Stop()} & Stops a stopwatch.\\ \ccode{esl\_stopwatch\_Display()} & Displays elapsed, cpu, and system time.\\ \ccode{esl\_stopwatch\_Include()} & Merges a stopwatch's time into a master.\\ \hline \end{tabular} \caption{The \eslmod{stopwatch} API.} \label{tbl:stopwatch_api} \end{table} Table~\ref{tbl:stopwatch_api} lists the functions in the API. Starting a stopwatch with \ccode{esl\_stopwatch\_Start()} initializes a base time, t0. Stopping a stopwatch with \ccode{esl\_stopwatch\_Stop()} takes the current time t1, and internally computes and stores elapsed, cpu, and system time differences (t1-t0). These stored times can be displayed at any time using \ccode{esl\_stopwatch\_Display()}, until the next time the watch is stopped. A stopwatch can be stopped any number of times, measuring increasing time from the same base. A stopwatch can also be started any number of times, resetting the base each time it is set. Figure~\ref{fig:stopwatch_example} shows a small example that measures a boring \ccode{sleep(5)} call, which will of course show an elapsed wall time of 5 seconds. Change the \ccode{sleep(5)} call to something cpu- or system-intensive to see a non-zero measurement of cpu or system time. \begin{figure} \input{cexcerpts/stopwatch_example} \caption{An example of using the \eslmod{stopwatch} module.} \label{fig:stopwatch_example} \end{figure} \subsection{Displaying and retrieving times} The \ccode{esl\_stopwatch\_Display()} function prints a line containing the cpu time, system time, aggregated cpu+system time, and the elapsed (wall clock) time. For example: \begin{cchunk} CPU Time: 142.55u 7.17s 00:02:29.72 Elapsed: 00:02:35 \end{cchunk} If you want to access the times in seconds for your own purposes, the relevant fields in a stopped \ccode{ESL\_STOPWATCH} object are: \begin{cchunk} double elapsed; /* elapsed time, seconds */ double user; /* CPU time, seconds */ double sys; /* system time, seconds */ \end{cchunk} \subsection{Stopwatch precision and system dependency} Elapsed wall time is typically measured at low resolution, in units of seconds (depending on the ANSI C \ccode{time\_t} definition on your system). It is displayed with a precision of 1 sec. CPU time is typically measured in high resolution, in units of microseconds (depending on the value of POSIX \ccode{\_SC\_CLK\_TCK} or ANSI C \ccode{CLOCKS\_PER\_SEC} on your system). It is displayed with a precision of 0.01 sec. System time is only determined on systems that provide a POSIX \ccode{times()} function. Like CPU time, it is typically measured at high resolution, in units of microseconds (depending on the POSIX \ccode{\_SC\_CLK\_TCK} value on your system). It is displayed with a precision of 0.01 sec. On systems that do not provide a POSIX-compliant \ccode{times()} function, system time is always reported as 0. \subsection{Aggregate times in parallelized code} In parallelized code, you may want to aggregate results from multiple stopwatches into a single overall time measurement. Examples include aggregating times from worker processes in PVM or MPI applications, or aggregating times from multiple execution threads on systems where the \ccode{times()} function does not correctly aggregate threads for you. The \ccode{esl\_stopwatch\_Include()} function adds the cpu and system times in a ``client'' stopwatch to a ``master'' stopwatch. Both the client and the master stopwatch must be stopped. The elapsed time in the master stopwatch is not affected; it is assumed to be keeping track of the real (wall clock) time. hmmer-3.1b2/easel/esl_weibull.tex0000664361611702660230000000266212473612610016414 0ustar wheelerteddy The Weibull distribution may be useful for fitting fat-tailed empirical distributions. In the literature, the Weibull is sometimes called a ``stretched exponential'' distribution when its shape parameter $\tau$ is less than 1. ``Stretched exponential'' distributions in the literature are either Weibull (PDF $ = \lambda \tau (\lambda x)^\tau exp\left[- (\lambda x)^tau \right]$ or a more simple PDF $\propto exp\left[- {\lambda(x-\mu)}^tau \right]$. Easel treats the latter form in the \eslmod{stretchexp} module. \subsection{Weibull densities} The probability density function (PDF) is: \begin{equation} P(X=x) = \lambda \tau [\lambda(x - \mu)]^{\tau-1} e^{- [\lambda(x-\mu)]^{\tau}} \label{eqn:weibull_pdf} \end{equation} The cumulative distribution function (CDF) is: \begin{equation} P(X \leq x) = 1 - e^{- [\lambda(x-\mu)]^{\tau}} \label{eqn:weibull_cdf} \end{equation} Variate $x$ ranges $\mu \leq x < \infty$. (However, for $\tau < 1$, the PDF goes to infinity at $x=\mu$, so evaluating at $x=\mu$ may not be desired.) Location parameter $\mu$ is unconstrained, $-\infty < \mu < \infty$. (Weibull distributions are usually represented without an explicit location parameter, implicitly assuming $\mu = 0$.) Scale parameter $\lambda$ is nonnegative, $\lambda > 0$. (Alteratively, Weibull distributions are also sometimes represented with a scale parameter $b = \frac{1}{\lambda}$.) Shape parameter $\tau$ is nonnegative, $\tau > 0$. hmmer-3.1b2/easel/esl_ssi.c0000664361611702660230000022545712473612607015210 0ustar wheelerteddy/* sequence/subsequence indices: fast lookup in large sequence files by keyword. * * 1. Using (reading) an SSI index. * 2. Creating (writing) new SSI files. * 3. Portable binary i/o. * 4. Test driver. * 5. Example code. * 6. License and copyright information. */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_ssi.h" static uint32_t v30magic = 0xd3d3c9b3; /* SSI 3.0: "ssi3" + 0x80808080 */ static uint32_t v30swap = 0xb3c9d3d3; /* byteswapped */ /***************************************************************** *# 1. Using (reading) an SSI index. *****************************************************************/ static int binary_search(ESL_SSI *ssi, const char *key, uint32_t klen, off_t base, uint32_t recsize, uint64_t maxidx); /* Function: esl_ssi_Open() * Synopsis: Open an SSI index as an . * * Purpose: Open the SSI index file , and returns a pointer * to the new object in . * * Caller is responsible for closing the SSI file with * . * * Args: - name of SSI index file to open. * - RETURN: the new . * * Returns: on success; * if cannot be opened for reading; * if it's not in correct SSI file format; * if it uses 64-bit file offsets, and we're on a system * that doesn't support 64-bit file offsets. * * Throws: on allocation error. */ int esl_ssi_Open(const char *filename, ESL_SSI **ret_ssi) { ESL_SSI *ssi = NULL; int status; uint32_t magic; /* magic number that starts the SSI file */ uint16_t i; /* counter over files */ /* Initialize the SSI structure, null'ing so we can autocleanup. */ ESL_ALLOC(ssi, sizeof(ESL_SSI)); ssi->fp = NULL; ssi->filename = NULL; ssi->fileformat = NULL; ssi->fileflags = NULL; ssi->bpl = NULL; ssi->rpl = NULL; ssi->nfiles = 0; /* Open the file. */ status = eslENOTFOUND; if ((ssi->fp = fopen(filename, "rb")) == NULL) goto ERROR; /* Read the magic number: make sure it's an SSI file, and determine * whether it's byteswapped. */ status = eslEFORMAT; if (esl_fread_u32(ssi->fp, &magic) != eslOK) goto ERROR; if (magic != v30magic && magic != v30swap) goto ERROR; if (esl_fread_u32(ssi->fp, &(ssi->flags)) != eslOK) goto ERROR; if (esl_fread_u32(ssi->fp, &(ssi->offsz)) != eslOK) goto ERROR; status = eslERANGE; if (ssi->offsz != 4 && ssi->offsz != 8) goto ERROR; if (ssi->offsz > sizeof(off_t)) goto ERROR; /* The header data. */ status = eslEFORMAT; if (esl_fread_u16(ssi->fp, &(ssi->nfiles)) != eslOK) goto ERROR; if (esl_fread_u64(ssi->fp, &(ssi->nprimary)) != eslOK) goto ERROR; if (esl_fread_u64(ssi->fp, &(ssi->nsecondary)) != eslOK) goto ERROR; if (esl_fread_u32(ssi->fp, &(ssi->flen)) != eslOK) goto ERROR; if (esl_fread_u32(ssi->fp, &(ssi->plen)) != eslOK) goto ERROR; if (esl_fread_u32(ssi->fp, &(ssi->slen)) != eslOK) goto ERROR; if (esl_fread_u32(ssi->fp, &(ssi->frecsize)) != eslOK) goto ERROR; if (esl_fread_u32(ssi->fp, &(ssi->precsize)) != eslOK) goto ERROR; if (esl_fread_u32(ssi->fp, &(ssi->srecsize)) != eslOK) goto ERROR; if (esl_fread_offset(ssi->fp, ssi->offsz, &(ssi->foffset)) != eslOK) goto ERROR; if (esl_fread_offset(ssi->fp, ssi->offsz, &(ssi->poffset)) != eslOK) goto ERROR; if (esl_fread_offset(ssi->fp, ssi->offsz, &(ssi->soffset)) != eslOK) goto ERROR; /* The file information. * We expect the number of files to be small, so reading it once * should be advantageous overall. If SSI ever had to deal with * large numbers of files, you'd probably want to read file * information on demand. */ status = eslEFORMAT; if (ssi->nfiles == 0) goto ERROR; ESL_ALLOC(ssi->filename, sizeof(char *) * ssi->nfiles); for (i = 0; i < ssi->nfiles; i++) ssi->filename[i] = NULL; ESL_ALLOC(ssi->fileformat, sizeof(uint32_t) * ssi->nfiles); ESL_ALLOC(ssi->fileflags, sizeof(uint32_t) * ssi->nfiles); ESL_ALLOC(ssi->bpl, sizeof(uint32_t) * ssi->nfiles); ESL_ALLOC(ssi->rpl, sizeof(uint32_t) * ssi->nfiles); /* (most) allocations done, now we read. */ for (i = 0; i < ssi->nfiles; i++) { ESL_ALLOC(ssi->filename[i], sizeof(char)* ssi->flen); /* We do have to explicitly position, because header and file * records may expand in the future; frecsize and foffset * give us forwards compatibility. */ status = eslEFORMAT; if (fseeko(ssi->fp, ssi->foffset + (i * ssi->frecsize), SEEK_SET) != 0) goto ERROR; if (fread(ssi->filename[i],sizeof(char),ssi->flen, ssi->fp)!=ssi->flen) goto ERROR; if (esl_fread_u32(ssi->fp, &(ssi->fileformat[i]))) goto ERROR; if (esl_fread_u32(ssi->fp, &(ssi->fileflags[i]))) goto ERROR; if (esl_fread_u32(ssi->fp, &(ssi->bpl[i]))) goto ERROR; if (esl_fread_u32(ssi->fp, &(ssi->rpl[i]))) goto ERROR; } *ret_ssi = ssi; return eslOK; ERROR: if (ssi != NULL) esl_ssi_Close(ssi); *ret_ssi = NULL; return status; } /* Function: esl_ssi_FindName() * Synopsis: Look up a primary or secondary key. * * Purpose: Looks up the string in index . * can be either a primary or secondary key. If * is found, contains a unique handle on * the file that contains (suitable for an * call, or for comparison to the handle of the last file * that was opened for retrieval), and contains * the offset of the sequence record in that file. * * Args: - open index file * - name to search for * - RETURN: handle on file that key is in * - RETURN: offset of the start of that key's record * - optRETURN: data offset (may be 0 if unset) * - optRETURN: length of data record (may be 0 if unset) * * Returns: on success; * if no such key is in the index; * if an fread() or fseeko() fails, which almost * certainly reflects some kind of misformatting of * the index. * * Throws: on allocation error. */ int esl_ssi_FindName(ESL_SSI *ssi, const char *key, uint16_t *ret_fh, off_t *ret_roff, off_t *opt_doff, int64_t *opt_L) { int status; off_t doff; int64_t L; char *pkey = NULL; /* Look in the primary keys. */ status = binary_search(ssi, key, ssi->plen, ssi->poffset, ssi->precsize, ssi->nprimary); if (status == eslOK) { /* We found it as a primary key; get our data & return. */ status = eslEFORMAT; if (esl_fread_u16(ssi->fp, ret_fh) != eslOK) goto ERROR; if (esl_fread_offset(ssi->fp, ssi->offsz, ret_roff) != eslOK) goto ERROR; if (esl_fread_offset(ssi->fp, ssi->offsz, &doff) != eslOK) goto ERROR; if (esl_fread_i64 (ssi->fp, &L) != eslOK) goto ERROR; } else if (status == eslENOTFOUND) { /* Not in the primary keys? OK, try the secondary keys. */ if (ssi->nsecondary > 0) { if ((status = binary_search(ssi, key, ssi->slen, ssi->soffset, ssi->srecsize, ssi->nsecondary)) != eslOK) goto ERROR; /* We have the secondary key; flip to its primary key, then look that up. */ ESL_ALLOC(pkey, sizeof(char) * ssi->plen); status = eslEFORMAT; if (fread(pkey, sizeof(char), ssi->plen, ssi->fp) != ssi->plen) goto ERROR; if ((status = esl_ssi_FindName(ssi, pkey, ret_fh, ret_roff, &doff, &L)) != eslOK) goto ERROR; } else goto ERROR; /* no secondary keys? pass along the ENOTFOUND error. */ } else goto ERROR; /* status from binary search was an error code. */ if (pkey != NULL) free(pkey); if (opt_doff != NULL) *opt_doff = doff; if (opt_L != NULL) *opt_L = L; return eslOK; ERROR: if (pkey != NULL) free(pkey); *ret_fh = 0; *ret_roff = 0; if (opt_doff != NULL) *opt_doff = 0; if (opt_L != NULL) *opt_L = 0; return status; } /* Function: esl_ssi_FindNumber() * Synopsis: Look up the n'th primary key. * * Purpose: Looks up primary key number in the open index * . ranges from <0..ssi->nprimary-1>. When * key is found, any/all of several optional * arguments point to results. <*opt_fh> contains a unique * handle on the file that contains that key (suitable for * an call, or for comparison to the * handle of the last file that was opened for retrieval). * <*opt_roff> contains the record offset; <*opt_doff> * contains the data offset; <*opt_L> contains the record * length; and <*opt_pkey> points to the primary key name * (a string, allocated here, that the caller becomes * responsible for free'ing). * * Args: - open index file * - primary key number to retrieve (0..nprimary-1) * - optRETURN: handle on file that key is in * - optRETURN: offset of the start of that key's record * - optRETURN: data offset (may be 0 if unset) * - optRETURN: length of data record (may be 0 if unset) * - optRETURN: primary key name (allocated here; caller must free) * * Returns: on success; * if there is no sequence record ; * if a read or a seek fails, probably indicating * some kind of file misformatting. * * Throws: on allocation error. */ int esl_ssi_FindNumber(ESL_SSI *ssi, int64_t nkey, uint16_t *opt_fh, off_t *opt_roff, off_t *opt_doff, int64_t *opt_L, char **opt_pkey) { int status; uint16_t fh; off_t doff, roff; uint64_t L; char *pkey = NULL; if (nkey >= ssi->nprimary) { status = eslENOTFOUND; goto ERROR; } ESL_ALLOC(pkey, sizeof(char) * ssi->plen); status = eslEFORMAT; if (fseeko(ssi->fp, ssi->poffset+ssi->precsize*nkey, SEEK_SET)!= 0) goto ERROR; if (fread(pkey, sizeof(char), ssi->plen, ssi->fp) != ssi->plen) goto ERROR; if (esl_fread_u16(ssi->fp, &fh) != eslOK) goto ERROR; if (esl_fread_offset(ssi->fp, ssi->offsz, &roff) != eslOK) goto ERROR; if (esl_fread_offset(ssi->fp, ssi->offsz, &doff) != eslOK) goto ERROR; if (esl_fread_u64 (ssi->fp, &L) != eslOK) goto ERROR; if (opt_fh != NULL) *opt_fh = fh; if (opt_roff != NULL) *opt_roff = roff; if (opt_doff != NULL) *opt_doff = doff; if (opt_L != NULL) *opt_L = L; if (opt_pkey != NULL) *opt_pkey = pkey; else free(pkey); return eslOK; ERROR: if (pkey != NULL) free(pkey); if (opt_fh != NULL) *opt_fh = 0; if (opt_roff != NULL) *opt_roff = 0; if (opt_doff != NULL) *opt_doff = 0; if (opt_L != NULL) *opt_L = 0; if (opt_pkey != NULL) *opt_pkey = NULL; return status; } /* Function: esl_ssi_FindSubseq() * Synopsis: Look up a specific subsequence's start. * Date: SRE, Mon Jan 1 19:49:31 2001 [St. Louis] * * Purpose: Fast subsequence retrieval: look up a primary or secondary * in the open index , and ask for the nearest data * offset to a subsequence starting at residue * in the sequence (numbering the sequence * <1..L>). If is found, on return, contains * a unique handle on the file that contains ; * contains the disk offset to the start of the * sequence record; contains the disk offset * (see below); and . is $\leq$ * . * * Depending on the file's characteristics, there are four * possible outcomes. * * If the file has the flag set, a data * offset was indexed for this key, and the data can be * indexed at single residue resolution (because the file's * lines contain only residues, no spaces), then * is exactly the position of residue on * disk, and is . * * If the file has the flag set, a data * offset was indexed for this key, but the data can only be * indexed at line resolution (because at least some of the * file's lines contain spaces), then is the * position of the start of the line that * is on, and is the coord <1..L> of the * first residue on that line. * * If the file does not have the flag * set (because lines contain a variable number of residues * and/or bytes), but a data offset was indexed for this * key, then we can still at least return that data offset, * but the caller is going to have to start from the * beginning of the data and read residues until it reaches * the desired . Now is the * offset to the start of the first line of the sequence * data, and is 1. * * If the key does not have a data offset indexed at all, * then regardless of the file's * setting, we can't calculate even the position of the * first line. In this case, is 0 (for * unset/unknown), and is <1>. * * A caller that's going to position the disk and read a * subseq must check for all four possible outcomes (pardon * redundancy with the above, but just to be clear, from the * caller's perspective now): * * If is 0, no data offset information can be * calculated; the caller can still use to * position the disk to the start of 's record, but it * will need to parse the header to find the start of the * sequence data; then it will need to parse the sequence * data, skipping to residue . * * If is valid ($>0$), and is * 1, then caller may use to position the disk to * the start of the first sequence data line, but will still * need to parse all the sequence data, counting and * skipping to residue . This is equivalent * to (and in practice, not much more efficient than) * positioning to the record start and parsing the header to * locate the sequence data start. * * If is valid ($>0$), and is * $>1$ but $<$ , then is the * offset to the first byte of a line on which the * subsequence begins. The caller can position the disk * there, then start parsing, skipping residues to reach the * . (In the case where the subsequence * begins on the first line, then will be * 1, and the caller will have to handle this as the case * above.) * * If < is valid ($>0$), and is * $=$ , then is the offset to a * byte in the file, such that the requested subsequence * starts at the next valid residue at or after that * position. (The would usually be exactly the * first residue of the subsequence, because we used single * residue resolution arithmetic to find it, but there's a * case where happens to be the first * residue of a line and we calculated using * line-resolution arithmetic; in this latter case, * could be pointing at a space before the first * subseq residue.) The caller may position the disk there * and start parsing immediately; the first valid residue * will be the start of the subsequence. * * Args: - open index file * - primary or secondary key to find * - residue we'd like to start at (1..L) * - RETURN: handle for file the key is in * - RETURN: offset to start of sequence record * - RETURN: offset to closest start of subseq data, or 0. * - RETURN: length of in residues (may be 0 if unset) * - RETURN: coord (1..L) of residue at * * Returns: on any of the four successful outcomes. * if no such key is found in the index; * on a read or seek failure, presumably meaning that * the file is misformatted somehow; * if isn't somewhere in the range * <1..len> for the target sequence. * * Throws: on allocation error. */ int esl_ssi_FindSubseq(ESL_SSI *ssi, const char *key, int64_t requested_start, uint16_t *ret_fh, off_t *ret_roff, off_t *ret_doff, int64_t *ret_L, int64_t *ret_actual_start) { int status; uint64_t r, b, i, l; /* tmp variables for "clarity", to match docs */ /* Look up the key by name. */ if ((status = esl_ssi_FindName(ssi, key, ret_fh, ret_roff, ret_doff, ret_L)) != eslOK) goto ERROR; if (requested_start < 0 || requested_start > *ret_L) { status = eslERANGE; goto ERROR; } /* Do we have a data offset for this key? If not, we're case 4. */ /* Can we do fast subseq lookup on this file? If no, we're case 3. */ if (*ret_doff == 0 || ! (ssi->fileflags[*ret_fh] & eslSSI_FASTSUBSEQ)) { *ret_actual_start = 1; return eslOK; } /* Set up tmp variables for clarity of equations below, * and to make them match tex documentation */ r = ssi->rpl[*ret_fh]; /* residues per line */ b = ssi->bpl[*ret_fh]; /* bytes per line */ i = requested_start; /* start position 1..L */ l = (i-1)/r; /* data line # (0..) that the residue is on */ if (r == 0 || b == 0) { status = eslEINVAL; goto ERROR; } /* When b = r+1, there's nothing but sequence on each data line (and the \0). * In this case, we know we can find each residue precisely: outcome #1. */ if (b == r+1) { *ret_doff += l*b + (i-1)%r; *ret_actual_start = requested_start; } /* else, there's other stuff on seq lines - probably spaces - so the best * we can do (without figuring out the spacing pattern and checking that * it's consistent everywhere) is to position at start of relevant line. */ else { *ret_doff += l*b; *ret_actual_start = 1 + l*r; } return eslOK; ERROR: *ret_fh = 0; *ret_roff = 0; *ret_doff = 0; *ret_L = 0; *ret_actual_start = 0; return status; } /* Function: esl_ssi_FileInfo() * Synopsis: Retrieve a file name and format code. * Date: SRE, Tue Jan 2 10:31:01 2001 [St. Louis] * * Purpose: Given a file number in an open index file * , retrieve file name and * the file format . * * is a pointer to a string maintained * internally by . It should not be free'd; * will take care of it. * * Args: - open index file * - handle on file to look up * - RETURN: name of file n * - RETURN: format code for file n * * Returns: on success. * * Throws: if there is no such file number . */ int esl_ssi_FileInfo(ESL_SSI *ssi, uint16_t fh, char **ret_filename, int *ret_format) { int status; if (fh >= ssi->nfiles) ESL_XEXCEPTION(eslEINVAL, "no such file number"); *ret_filename = ssi->filename[fh]; *ret_format = ssi->fileformat[fh]; return eslOK; ERROR: *ret_filename = NULL; *ret_format = 0; return status; } /* Function: esl_ssi_Close() * Synopsis: Close an SSI index. * * Purpose: Close an open SSI index . * * Args: - an open SSI index file. */ void esl_ssi_Close(ESL_SSI *ssi) { int i; if (ssi == NULL) return; if (ssi->fp != NULL) fclose(ssi->fp); if (ssi->filename != NULL) { for (i = 0; i < ssi->nfiles; i++) if (ssi->filename[i] != NULL) free(ssi->filename[i]); free(ssi->filename); } if (ssi->fileformat != NULL) free(ssi->fileformat); if (ssi->fileflags != NULL) free(ssi->fileflags); if (ssi->bpl != NULL) free(ssi->bpl); if (ssi->rpl != NULL) free(ssi->rpl); free(ssi); } /* binary_search() * Date: SRE, Sun Dec 31 16:05:03 2000 [St. Louis] * * Purpose: Find in an SSI index, by a binary search * in an alphabetically sorted list of keys. If successful, * return , and the index file is positioned to read * the rest of the data for that key. If unsuccessful, * return , and the positioning of the index file * is left in an undefined state. * * Args: - an open ESL_SSI * - key to find * - key length to allocate (plen or slen from ssi) * - base offset (poffset or soffset) * - size of each key record in bytes (precsize or srecsize) * - # of keys (nprimary or nsecondary) * * Returns: on success, and leaves file positioned for reading remaining * data for the key. * * if is not found. * if an fread() or fseeko() fails, probably indicating * some kind of misformatting of the index file. * * Throws: on allocation failure. * */ static int binary_search(ESL_SSI *ssi, const char *key, uint32_t klen, off_t base, uint32_t recsize, uint64_t maxidx) { char *name; uint64_t left, right, mid; int cmp; int status; if (maxidx == 0) return eslENOTFOUND; /* special case: empty index */ ESL_ALLOC(name, (sizeof(char)*klen)); left = 0; right = maxidx-1; while (1) { /* A binary search: */ mid = (left+right) / 2; /* careful here. left+right potentially overflows if we didn't limit unsigned vars to signed ranges. */ status = eslEFORMAT; if (fseeko(ssi->fp, base + recsize*mid, SEEK_SET) != 0) goto ERROR; if (fread(name, sizeof(char), klen, ssi->fp) != klen) goto ERROR; status = eslENOTFOUND; cmp = strcmp(name, key); if (cmp == 0) break; /* found it! */ else if (left >= right) goto ERROR; /* no such key */ else if (cmp < 0) left = mid+1; /* it's still right of mid */ else if (cmp > 0) { if (mid == 0) goto ERROR; /* beware left edge case */ else right = mid-1; /* it's left of mid */ } } if (name != NULL) free(name); return eslOK; /* and ssi->fp is positioned to read the record. */ ERROR: if (name != NULL) free(name); return status; } /***************************************************************** *# 2. Creating (writing) new SSI files. *****************************************************************/ static int current_newssi_size(const ESL_NEWSSI *ns); static int activate_external_sort(ESL_NEWSSI *ns); static int parse_pkey(char *buf, ESL_PKEY *pkey); static int parse_skey(char *buf, ESL_SKEY *skey); static int pkeysort(const void *k1, const void *k2); static int skeysort(const void *k1, const void *k2); /* Function: esl_newssi_Open() * Synopsis: Create a new . * * Purpose: Creates and returns a , in order to create a * new SSI index file. * * Returns: on success, and <*ret_newssi> is a pointer to a * new structure. * * Returns if can't be opened. * * Returns if is * and (or any necessary tmp files) already * exist, to block overwriting of an existing SSI file. * * Throws: on allocation error. */ int esl_newssi_Open(const char *ssifile, int allow_overwrite, ESL_NEWSSI **ret_newssi) { ESL_NEWSSI *ns = NULL; int status; ESL_ALLOC(ns, sizeof(ESL_NEWSSI)); ns->ssifile = NULL; ns->ssifp = NULL; ns->external = FALSE; /* we'll switch to external sort if... */ ns->max_ram = eslSSI_MAXRAM; /* ... if we exceed this memory limit in MB. */ ns->filenames = NULL; ns->fileformat = NULL; ns->bpl = NULL; ns->rpl = NULL; ns->flen = 0; ns->nfiles = 0; ns->pkeys = NULL; ns->plen = 0; ns->nprimary = 0; ns->ptmpfile = NULL; ns->ptmp = NULL; ns->skeys = NULL; ns->slen = 0; ns->nsecondary = 0; ns->stmpfile = NULL; ns->stmp = NULL; ns->errbuf[0] = '\0'; if ((status = esl_strdup(ssifile, -1, &(ns->ssifile))) != eslOK) goto ERROR; if ((status = esl_strdup(ssifile, -1, &(ns->ptmpfile))) != eslOK) goto ERROR; if ((status = esl_strdup(ssifile, -1, &(ns->stmpfile))) != eslOK) goto ERROR; if ((status = esl_strcat(&ns->ptmpfile, -1, ".1", 2)) != eslOK) goto ERROR; if ((status = esl_strcat(&ns->stmpfile, -1, ".2", 2)) != eslOK) goto ERROR; if (! allow_overwrite) { if (esl_FileExists(ssifile) || esl_FileExists(ns->ptmpfile) || esl_FileExists(ns->stmpfile)) { status = eslEOVERWRITE; goto ERROR; } } if ((ns->ssifp = fopen(ssifile, "w")) == NULL) { status = eslENOTFOUND; goto ERROR; } ESL_ALLOC(ns->filenames, sizeof(char *) * eslSSI_FCHUNK); ESL_ALLOC(ns->fileformat, sizeof(uint32_t) * eslSSI_FCHUNK); ESL_ALLOC(ns->bpl, sizeof(uint32_t) * eslSSI_FCHUNK); ESL_ALLOC(ns->rpl, sizeof(uint32_t) * eslSSI_FCHUNK); ESL_ALLOC(ns->pkeys, sizeof(ESL_PKEY) * eslSSI_KCHUNK); ESL_ALLOC(ns->skeys, sizeof(ESL_SKEY) * eslSSI_KCHUNK); *ret_newssi = ns; return eslOK; ERROR: esl_newssi_Close(ns); /* free the damaged structure */ return status; } /* Function: esl_newssi_AddFile() * Synopsis: Add a filename to a growing index. * * Purpose: Registers the file into the new index , * along with its format code . The index assigns it * a unique handle, which it returns in . This * handle is needed when registering primary keys. * * Caller should make sure that the same file isn't registered * twice; this function doesn't check. * * Args: - new ssi index under construction. * - filename to add to the index. * - format code to associate with (or 0) * - RETURN: filehandle associated with * * Returns: on success; * if registering this file would exceed the * maximum number of indexed files. * * Throws: on allocation or reallocation error. */ int esl_newssi_AddFile(ESL_NEWSSI *ns, const char *filename, int fmt, uint16_t *ret_fh) { int status; uint16_t fh; int n; if (ns->nfiles >= eslSSI_MAXFILES) ESL_XFAIL(eslERANGE, ns->errbuf, "exceeded the maximum number of files an SSI index can store"); n = strlen(filename); if ((n+1) > ns->flen) ns->flen = n+1; if ((status = esl_FileTail(filename, FALSE, &(ns->filenames[ns->nfiles]))) != eslOK) goto ERROR; ns->fileformat[ns->nfiles] = fmt; ns->bpl[ns->nfiles] = 0; ns->rpl[ns->nfiles] = 0; fh = ns->nfiles; /* handle is simply = file number */ ns->nfiles++; if (ns->nfiles % eslSSI_FCHUNK == 0) { void *tmp; ESL_RALLOC(ns->filenames, tmp, sizeof(char *) * (ns->nfiles+eslSSI_FCHUNK)); ESL_RALLOC(ns->fileformat, tmp, sizeof(uint32_t) * (ns->nfiles+eslSSI_FCHUNK)); ESL_RALLOC(ns->bpl, tmp, sizeof(uint32_t) * (ns->nfiles+eslSSI_FCHUNK)); ESL_RALLOC(ns->rpl, tmp, sizeof(uint32_t) * (ns->nfiles+eslSSI_FCHUNK)); } *ret_fh = fh; return eslOK; ERROR: *ret_fh = 0; return status; } /* Function: esl_newssi_SetSubseq() * Synopsis: Declare that file is suitable for fast subseq lookup. * * Purpose: Declare that the file associated with handle is * suitable for fast subsequence lookup, because it has * a constant number of residues and bytes per (nonterminal) * data line, and , respectively. * * Caller is responsible for this being true: and * must be constant for every nonterminal line of * every sequence in this file. * * Args: - ssi index under construction * - handle on file to set fast subseq lookup on * - constant bytes per nonterminal line in * - constant residues per nonterminal line in * * Returns: on success. * * Throws: on invalid argument(s). */ int esl_newssi_SetSubseq(ESL_NEWSSI *ns, uint16_t fh, uint32_t bpl, uint32_t rpl) { int status; if (fh >= ns->nfiles) ESL_XEXCEPTION(eslEINVAL, "invalid file number"); if (bpl <= 0 || rpl <= 0) ESL_XEXCEPTION(eslEINVAL, "invalid bpl or rpl"); ns->bpl[fh] = bpl; ns->rpl[fh] = rpl; return eslOK; ERROR: return status; } /* Function: esl_newssi_AddKey() * Synopsis: Add a primary key to a growing index. * Date: SRE, Tue Jan 2 11:50:54 2001 [St. Louis] * * Purpose: Register primary key in new index , while telling * the index that this primary key is in the file associated * with filehandle (the handle returned by a previous call * to ); that its record starts at * offset in the file; that its data (usually * sequence data) starts at offset in the file (i.e. * after any record header); and that the record's data is * of length (usually, the record is a sequence, and * is its length in residues). * * The data length is technically optional as far as SSI * is concerned; may be passed as 0 to leave it * unset. However, functions in the module that use * SSI indices will assume that is available. * * is also optional; it may be passed as <0> to * leave it unset. If provided, gives an offset to * the data portion of the record. The interpretation of * this data offset may be implementation-defined and may * depend on the format of the datafile; for example, in how * uses SSI indices, is the offset to the * start of the first sequence line. * * Both and must be provided, and additionally * must be set for this file, for fast * subsequence lookup to work. * * Args: - active index * - primary key to add * - handle on file that this key's in * - offset to start of record * - offset to start of sequence data, or 0 * - length of sequence, or 0 * * Returns: on success; * if registering this key would exceed the maximum * number of primary keys; * if we needed to open external tmp files, but * the attempt to open them failed. * * Throws: on an invalid argument; * on allocation failure; * on any system error writing to tmp file, such * as filling the filesystem. */ int esl_newssi_AddKey(ESL_NEWSSI *ns, const char *key, uint16_t fh, off_t r_off, off_t d_off, int64_t L) { int status; int n; /* a string length */ if (fh >= eslSSI_MAXFILES) ESL_XEXCEPTION(eslEINVAL, "invalid fh"); if (ns->nprimary >= eslSSI_MAXKEYS) ESL_XFAIL(eslERANGE, ns->errbuf, "exceeded maximum number of primary keys allowed"); /* Before adding the key: check how big our index is. * If it's getting too large, switch to external mode. */ if (!ns->external && current_newssi_size(ns) >= ns->max_ram) if ((status = activate_external_sort(ns)) != eslOK) goto ERROR; /* Update maximum pkey length, if needed. (Inclusive of '\0'). */ n = strlen(key)+1; if (n > ns->plen) ns->plen = n; /* External mode? Simply append to disk... */ if (ns->external) { if (sizeof(off_t) == 4) { if (fprintf(ns->ptmp, "%s\t%d\t%" PRIu32 "\t%" PRIu32 "\t%" PRIi64 "\n", key, fh, (uint32_t) r_off, (uint32_t) d_off, L) <= 0) ESL_XEXCEPTION_SYS(eslEWRITE, "ssi key tmp file write failed"); } else { if (fprintf(ns->ptmp, "%s\t%d\t%" PRIu64 "\t%" PRIu64 "\t%" PRIi64 "\n", key, fh, (uint64_t) r_off, (uint64_t) d_off, L) <= 0) ESL_XEXCEPTION_SYS(eslEWRITE, "ssi key tmp file write failed"); } ns->nprimary++; } else { /* Else: internal mode, keep keys in memory... */ if ((status = esl_strdup(key, n, &(ns->pkeys[ns->nprimary].key))) != eslOK) goto ERROR; ns->pkeys[ns->nprimary].fnum = fh; ns->pkeys[ns->nprimary].r_off = r_off; ns->pkeys[ns->nprimary].d_off = d_off; ns->pkeys[ns->nprimary].len = L; ns->nprimary++; /* Reallocate as needed. */ if (ns->nprimary % eslSSI_KCHUNK == 0) { void *tmp; ESL_RALLOC(ns->pkeys, tmp, sizeof(ESL_PKEY) * (ns->nprimary+eslSSI_KCHUNK)); } } return eslOK; ERROR: return status; } /* Function: esl_newssi_AddAlias() * Synopsis: Add a secondary key (alias) to a growing index. * * Purpose: Registers secondary key in index , and * map it to the primary key . must already * have been registered. That is, when someone looks up , * we'll retrieve record . * * Args: - ssi index being constructed * - secondary key to register * - primary key to associate with . * * Returns: on success; * if registering this key would exceed the maximum * number of secondary keys that can be stored; * if we needed to open external tmp files, but * the attempt to open them failed. * * Throws: on any system error writing to tmp file, such * as running out of space on the device. */ int esl_newssi_AddAlias(ESL_NEWSSI *ns, const char *alias, const char *key) { int status; int n; /* a string length */ if (ns->nsecondary >= eslSSI_MAXKEYS) ESL_XFAIL(eslERANGE, ns->errbuf, "exceeded maximum number of secondary keys allowed"); /* Before adding the key: check how big our index is. * If it's getting too large, switch to external mode. */ if (!ns->external && current_newssi_size(ns) >= ns->max_ram) if ((status = activate_external_sort(ns)) != eslOK) goto ERROR; /* Update maximum secondary key length, if necessary. */ n = strlen(alias)+1; if (n > ns->slen) ns->slen = n; /* if external mode: write info to disk. */ if (ns->external) { if (fprintf(ns->stmp, "%s\t%s\n", alias, key) <= 0) ESL_XEXCEPTION_SYS(eslEWRITE, "ssi alias tmp file write failed"); ns->nsecondary++; } else { /* else, internal mode... store info in memory. */ if ((status = esl_strdup(alias, n, &(ns->skeys[ns->nsecondary].key))) != eslOK) goto ERROR; if ((status = esl_strdup(key, -1, &(ns->skeys[ns->nsecondary].pkey))) != eslOK) goto ERROR; ns->nsecondary++; if (ns->nsecondary % eslSSI_KCHUNK == 0) { void *tmp; ESL_RALLOC(ns->skeys, tmp, sizeof(ESL_SKEY) * (ns->nsecondary+eslSSI_KCHUNK)); } } return eslOK; ERROR: return status; } /* Function: esl_newssi_Write() * Synopsis: Save a new index to an SSI file. * * Purpose: Writes the complete index in SSI format to its file. * * Handles all necessary overhead of sorting the primary and * secondary keys, including any externally sorted tmpfiles that * may have been needed for large indices. * * Args: - new SSI index to write * * Returns: on success; * if index size exceeds system's maximum file size; * if any of the steps of an external sort fail. * * Throws: on invalid argument, including too-long tmpfile names; * on buffer allocation failure; * on any system write failure, including filled disk. */ int esl_newssi_Write(ESL_NEWSSI *ns) { int status, /* convention */ i; /* counter over files, keys */ uint32_t header_flags, /* bitflags in the header */ file_flags, /* bitflags for a file record */ frecsize, /* size of a file record (bytes) */ precsize, /* size of a primary key record (bytes) */ srecsize; /* size of a secondary key record (bytes) */ off_t foffset, /* offset to file section */ poffset, /* offset to primary key section */ soffset; /* offset to secondary key section */ char *fk = NULL, /* fixed-width (flen) file name */ *pk = NULL, /* fixed-width (plen) primary key string */ *sk = NULL, /* fixed-width (slen) secondary key string */ *buf = NULL; /* esl_fgets() growable buffer */ int n = 0; /* esl_fgets() buffer size */ ESL_PKEY pkey; /* primary key info from external tmpfile */ ESL_SKEY skey; /* secondary key info from external tmpfile */ /* We need fixed-width buffers to get our keys fwrite()'ten in their * full binary lengths; pkey->key (for instance) is not guaranteed * to be allocated for the final maximum plen. We use strncpy(), not * strcpy(), to fill these buffers, because strncpy() pads unused * bytes as NUL's, and valgrind will flag you if you attempt to * write uninitialized bytes from these buffers. */ ESL_ALLOC(fk, sizeof(char) * ns->flen); ESL_ALLOC(pk, sizeof(char) * ns->plen); if (ns->slen) ESL_ALLOC(sk, sizeof(char) * ns->slen); /* How big is the index? If it's going to be > 2GB, we better have * 64-bit offsets. (2047 (instead of 2048) gives us * some slop room.) If not, abort here. * * aborting here is pretty brutal - we've processed hundreds of * millions of keys for nothing. Ah well. */ if (current_newssi_size(ns) >= 2047 && sizeof(off_t) != 8) ESL_XFAIL(eslERANGE, ns->errbuf, "SSI index file file would be > 2G; your filesystem isn't capable of handling it"); /* Magic-looking numbers come from adding up sizes * of things in bytes: they match current_newssi_size(). */ frecsize = 4*sizeof(uint32_t) + ns->flen; precsize = 2*sizeof(off_t) + sizeof(uint16_t) + sizeof(uint64_t) + ns->plen; srecsize = ns->slen + ns->plen; header_flags = 0; /* Magic-looking numbers again come from adding up sizes * of things in bytes: matches current_newssi_size() */ foffset = 9*sizeof(uint32_t)+2*sizeof(uint64_t)+sizeof(uint16_t)+3*sizeof(off_t); poffset = foffset + frecsize*ns->nfiles; soffset = poffset + precsize*ns->nprimary; /* Sort the keys. * If external mode, make system calls to UNIX/POSIX "sort" in place, then * open new sorted files for reading thru ptmp and stmp handles. * If internal mode, call qsort. * * Note that you'd better force a POSIX locale for the sort; else, * some silly distro (e.g. Mandrake Linux >=8.1) may have specified * LC_COLLATE=en_US, and this'll give a sort "bug" in which it doesn't * sort by byte order. */ if (ns->external) { char cmd[1024]; /* A last minute security check: make sure we won't overflow * sprintf() with the tmpfile names. They're hardcoded now, so * we know they don't overflow, but they might be configurable * in the future, and we wouldn't want a security hole to open * up. */ if (strlen(ns->ptmpfile) > 256 || strlen(ns->ptmpfile) > 256) ESL_XEXCEPTION(eslEINVAL, "tmpfile name too long"); fclose(ns->ptmp); ns->ptmp = NULL; sprintf(cmd, "env LC_ALL=POSIX sort -o %s %s\n", ns->ptmpfile, ns->ptmpfile); if (system(cmd) != 0) ESL_XFAIL(eslESYS, ns->errbuf, "external sort of primary keys failed"); if ((ns->ptmp = fopen(ns->ptmpfile, "r")) == NULL) ESL_XFAIL(eslESYS, ns->errbuf, "failed to reopen primary key tmp file after sort"); fclose(ns->stmp); ns->stmp = NULL; sprintf(cmd, "env LC_ALL=POSIX sort -o %s %s\n", ns->stmpfile, ns->stmpfile); if (system(cmd) != 0) ESL_XFAIL(eslESYS, ns->errbuf, "external sort of secondary keys failed"); if ((ns->stmp = fopen(ns->stmpfile, "r")) == NULL) ESL_XFAIL(eslESYS, ns->errbuf, "failed to reopen secondary key tmp file after sort"); } else { qsort((void *) ns->pkeys, ns->nprimary, sizeof(ESL_PKEY), pkeysort); qsort((void *) ns->skeys, ns->nsecondary, sizeof(ESL_SKEY), skeysort); } /* Write the header */ if (esl_fwrite_u32(ns->ssifp, v30magic) != eslOK || esl_fwrite_u32(ns->ssifp, header_flags) != eslOK || esl_fwrite_u32(ns->ssifp, sizeof(off_t)) != eslOK || esl_fwrite_u16(ns->ssifp, ns->nfiles) != eslOK || esl_fwrite_u64(ns->ssifp, ns->nprimary) != eslOK || esl_fwrite_u64(ns->ssifp, ns->nsecondary)!= eslOK || esl_fwrite_u32(ns->ssifp, ns->flen) != eslOK || esl_fwrite_u32(ns->ssifp, ns->plen) != eslOK || esl_fwrite_u32(ns->ssifp, ns->slen) != eslOK || esl_fwrite_u32(ns->ssifp, frecsize) != eslOK || esl_fwrite_u32(ns->ssifp, precsize) != eslOK || esl_fwrite_u32(ns->ssifp, srecsize) != eslOK || esl_fwrite_offset(ns->ssifp, foffset) != eslOK || esl_fwrite_offset(ns->ssifp, poffset) != eslOK || esl_fwrite_offset(ns->ssifp, soffset) != eslOK) ESL_XEXCEPTION_SYS(eslEWRITE, "ssi write failed"); /* Write the file section */ for (i = 0; i < ns->nfiles; i++) { file_flags = 0; if (ns->bpl[i] > 0 && ns->rpl[i] > 0) file_flags |= eslSSI_FASTSUBSEQ; strncpy(fk, ns->filenames[i], ns->flen); status = eslFAIL; if (fwrite(fk, sizeof(char), ns->flen, ns->ssifp) != ns->flen || esl_fwrite_u32(ns->ssifp, ns->fileformat[i]) != eslOK || esl_fwrite_u32(ns->ssifp, file_flags) != eslOK || esl_fwrite_u32(ns->ssifp, ns->bpl[i]) != eslOK || esl_fwrite_u32(ns->ssifp, ns->rpl[i]) != eslOK) ESL_XEXCEPTION_SYS(eslEWRITE, "ssi write failed"); } /* Write the primary key section */ if (ns->external) { for (i = 0; i < ns->nprimary; i++) { if (esl_fgets(&buf, &n, ns->ptmp) != eslOK) ESL_XFAIL(eslESYS, ns->errbuf, "read from sorted primary key tmpfile failed"); if (parse_pkey(buf, &pkey) != eslOK) ESL_XFAIL(eslESYS, ns->errbuf, "parse failed for a line of sorted primary key tmpfile failed"); strncpy(pk, pkey.key, ns->plen); /* note: strncpy pads w/ nulls */ if (fwrite(pk,sizeof(char),ns->plen,ns->ssifp) != ns->plen || esl_fwrite_u16( ns->ssifp, pkey.fnum) != eslOK || esl_fwrite_offset(ns->ssifp, pkey.r_off) != eslOK || esl_fwrite_offset(ns->ssifp, pkey.d_off) != eslOK || esl_fwrite_i64( ns->ssifp, pkey.len) != eslOK) ESL_XEXCEPTION_SYS(eslEWRITE, "ssi write failed"); } } else { for (i = 0; i < ns->nprimary; i++) { strncpy(pk, ns->pkeys[i].key, ns->plen); if (fwrite(pk,sizeof(char),ns->plen,ns->ssifp) != ns->plen || esl_fwrite_u16( ns->ssifp, ns->pkeys[i].fnum) != eslOK || esl_fwrite_offset(ns->ssifp, ns->pkeys[i].r_off) != eslOK || esl_fwrite_offset(ns->ssifp, ns->pkeys[i].d_off) != eslOK || esl_fwrite_i64( ns->ssifp, ns->pkeys[i].len) != eslOK) ESL_XEXCEPTION_SYS(eslEWRITE, "ssi write failed"); } } /* Write the secondary key section */ if (ns->external) { for (i = 0; i < ns->nsecondary; i++) { if (esl_fgets(&buf, &n, ns->stmp) != eslOK) ESL_XFAIL(eslESYS, ns->errbuf, "read from sorted secondary key tmpfile failed"); if (parse_skey(buf, &skey) != eslOK) ESL_XFAIL(eslESYS, ns->errbuf, "parse failed for a line of sorted secondary key tmpfile failed"); strncpy(sk, skey.key, ns->slen); strncpy(pk, skey.pkey, ns->plen); if (fwrite(sk, sizeof(char), ns->slen, ns->ssifp) != ns->slen || fwrite(pk, sizeof(char), ns->plen, ns->ssifp) != ns->plen) ESL_XEXCEPTION_SYS(eslEWRITE, "ssi write failed"); } } else { for (i = 0; i < ns->nsecondary; i++) { strncpy(sk, ns->skeys[i].key, ns->slen); strncpy(pk, ns->skeys[i].pkey, ns->plen); if (fwrite(sk, sizeof(char), ns->slen, ns->ssifp) != ns->slen || fwrite(pk, sizeof(char), ns->plen, ns->ssifp) != ns->plen) ESL_XEXCEPTION_SYS(eslEWRITE, "ssi write failed"); } } if (fk != NULL) free(fk); if (pk != NULL) free(pk); if (sk != NULL) free(sk); if (buf != NULL) free(buf); if (ns->ptmp != NULL) { fclose(ns->ptmp); ns->ptmp = NULL; } if (ns->stmp != NULL) { fclose(ns->stmp); ns->stmp = NULL; } return eslOK; ERROR: if (fk != NULL) free(fk); if (pk != NULL) free(pk); if (sk != NULL) free(sk); if (buf != NULL) free(buf); if (ns->ptmp != NULL) { fclose(ns->ptmp); ns->ptmp = NULL; } if (ns->stmp != NULL) { fclose(ns->stmp); ns->stmp = NULL; } return status; } /* Function: esl_newssi_Close() * Synopsis: Free an . * * Purpose: Frees a . */ void esl_newssi_Close(ESL_NEWSSI *ns) { int i; if (ns == NULL) return; if (ns->external == FALSE) { if (ns->pkeys != NULL) { for (i = 0; i < ns->nprimary; i++) if (ns->pkeys[i].key != NULL) free(ns->pkeys[i].key); free(ns->pkeys); } if (ns->skeys != NULL) { for (i = 0; i < ns->nsecondary; i++) { if (ns->skeys[i].key != NULL) free(ns->skeys[i].key); if (ns->skeys[i].pkey != NULL) free(ns->skeys[i].pkey); } free(ns->skeys); } } else { remove(ns->ptmpfile); remove(ns->stmpfile); } if (ns->filenames != NULL) { for (i = 0; i < ns->nfiles; i++) if (ns->filenames[i] != NULL) free(ns->filenames[i]); free(ns->filenames); } if (ns->stmp != NULL) fclose(ns->stmp); if (ns->stmpfile != NULL) free(ns->stmpfile); if (ns->ptmp != NULL) fclose(ns->ptmp); if (ns->ptmpfile != NULL) free(ns->ptmpfile); if (ns->fileformat != NULL) free(ns->fileformat); if (ns->bpl != NULL) free(ns->bpl); if (ns->rpl != NULL) free(ns->rpl); if (ns->ssifile != NULL) free(ns->ssifile); if (ns->ssifp != NULL) fclose(ns->ssifp); free(ns); } /* current_newssi_size() * * Calculates the size of the current index, in megabytes, in * its disk version (which is essentially the same as the * RAM it takes, modulo some small overhead for the structures * and ptrs). * * The header costs 10 uint32, 1 uint16, and 3 off_t's: 42 + (12 | 24). * Each file record costs 4 uint32 and flen chars; * each primary key costs us 2 off_t, 1 uint16, 1 uint32, and plen chars; * each sec key costs us plen+slen chars. */ static int current_newssi_size(const ESL_NEWSSI *ns) { uint64_t frecsize, precsize, srecsize; uint64_t total; /* Magic-looking numbers come from adding up sizes * of things in bytes */ frecsize = 4*sizeof(uint32_t) + ns->flen; precsize = 2*sizeof(off_t) + sizeof(uint16_t) + sizeof(uint64_t) + ns->plen; srecsize = ns->slen + ns->plen; total = (9*sizeof(uint32_t)+2*sizeof(uint64_t)+sizeof(uint16_t)+3*sizeof(off_t)+ frecsize * ns->nfiles + /* file section size */ precsize * ns->nprimary + /* primary key section size */ srecsize * ns->nsecondary) / /* secondary key section size */ 1048576L; return (int) total; } /* activate_external_sort() * * Switch to external sort mode. * Open file handles for external index files (ptmp, stmp). * Flush current index information to these files. * Free current memory, turn over control to the tmpfiles. * * Return on success; * if we can't open a tmpfile for writing. * * Throw if a write fails. */ static int activate_external_sort(ESL_NEWSSI *ns) { int status; int i; if (ns->external) return eslOK; /* we already are external, fool */ if ((ns->ptmp = fopen(ns->ptmpfile, "w")) == NULL) ESL_XFAIL(eslENOTFOUND, ns->errbuf, "Failed to open primary key tmpfile for external sort"); if ((ns->stmp = fopen(ns->stmpfile, "w")) == NULL) ESL_XFAIL(eslENOTFOUND, ns->errbuf, "Failed to open secondary key tmpfile for external sort"); /* Flush the current indices. */ ESL_DPRINTF1(("Switching to external sort - flushing new ssi to disk...\n")); for (i = 0; i < ns->nprimary; i++) { if (sizeof(off_t) == 4) { if (fprintf(ns->ptmp, "%s\t%u\t%lu\t%lu\t%lu\n", ns->pkeys[i].key, (unsigned int) ns->pkeys[i].fnum, (unsigned long) ns->pkeys[i].r_off, (unsigned long) ns->pkeys[i].d_off, (unsigned long) ns->pkeys[i].len) <= 0) ESL_XEXCEPTION_SYS(eslEWRITE, "ssi key tmp file write failed"); } else { if (fprintf(ns->ptmp, "%s\t%u\t%llu\t%llu\t%lu\n", ns->pkeys[i].key, (unsigned int) ns->pkeys[i].fnum, (unsigned long long) ns->pkeys[i].r_off, (unsigned long long) ns->pkeys[i].d_off, (unsigned long) ns->pkeys[i].len) <= 0) ESL_XEXCEPTION_SYS(eslEWRITE, "ssi key tmp file write failed"); } } for (i = 0; i < ns->nsecondary; i++) if (fprintf(ns->stmp, "%s\t%s\n", ns->skeys[i].key, ns->skeys[i].pkey) <= 0) ESL_XEXCEPTION_SYS(eslEWRITE, "ssi alias tmp file write failed"); /* Free the memory now that we've flushed our lists to disk */ for (i = 0; i < ns->nprimary; i++) free(ns->pkeys[i].key); for (i = 0; i < ns->nsecondary; i++) free(ns->skeys[i].key); for (i = 0; i < ns->nsecondary; i++) free(ns->skeys[i].pkey); if (ns->pkeys != NULL) free(ns->pkeys); if (ns->skeys != NULL) free(ns->skeys); ns->pkeys = NULL; ns->skeys = NULL; ns->external = TRUE; return eslOK; ERROR: if (ns->ptmp != NULL) { fclose(ns->ptmp); ns->ptmp = NULL; } if (ns->stmp != NULL) { fclose(ns->stmp); ns->stmp = NULL; } return status; } /* parse_pkey(), parse_skey() * * Given a containing a line read from the external * primary-key or secondary-key tmpfile; parse it, and fill in the fields of * or * * is a ptr to a structure on the stack. It is assumed * to be in use only transiently. * 's strings become ptrs into 's space, so we don't have to * allocate new space for them. This means that the transient structure * is only usable until is modified or free'd. * * Returns on success. * * Throws on parse error (shouldn't happen; we created it!) * if we can't deal with off_t's size. */ static int parse_pkey(char *buf, ESL_PKEY *pkey) { int status; char *s, *tok; s = buf; if (esl_strtok(&s, "\t\n", &(pkey->key)) != eslOK) ESL_XEXCEPTION(eslEFORMAT, "parse failed"); if (esl_strtok(&s, "\t\n", &tok) != eslOK) ESL_XEXCEPTION(eslEFORMAT, "parse failed"); pkey->fnum = (uint16_t) atoi(tok); if (esl_strtok(&s, "\t\n", &tok) != eslOK) ESL_XEXCEPTION(eslEFORMAT, "parse failed"); if (sizeof(off_t) == 4) pkey->r_off = (off_t) strtoul (tok, NULL, 10); else if (sizeof(off_t) == 8) pkey->r_off = (off_t) strtoull(tok, NULL, 10); else ESL_XEXCEPTION(eslEINCONCEIVABLE, "whoa - weird off_t"); if (esl_strtok(&s, "\t\n", &tok) != eslOK) ESL_XEXCEPTION(eslEFORMAT, "parse failed"); if (sizeof(off_t) == 4) pkey->d_off = (off_t) strtoul (tok, NULL, 10); else if (sizeof(off_t) == 8) pkey->d_off = (off_t) strtoull(tok, NULL, 10); else ESL_XEXCEPTION(eslEINCONCEIVABLE, "whoa - weird off_t"); if (esl_strtok(&s, "\t\n", &tok) != eslOK) ESL_XEXCEPTION(eslEFORMAT, "parse failed"); pkey->len = (uint64_t) strtoull(tok, NULL, 10); return eslOK; ERROR: return status; } static int parse_skey(char *buf, ESL_SKEY *skey) { int status; char *s; s = buf; if (esl_strtok(&s, "\t\n", &(skey->key)) != eslOK) ESL_XEXCEPTION(eslEFORMAT, "parse failed"); if (esl_strtok(&s, "\t\n", &(skey->pkey)) != eslOK) ESL_XEXCEPTION(eslEFORMAT, "parse failed"); return eslOK; ERROR: return status; } /* ordering functions needed for qsort() */ static int pkeysort(const void *k1, const void *k2) { ESL_PKEY *key1; ESL_PKEY *key2; key1 = (ESL_PKEY *) k1; key2 = (ESL_PKEY *) k2; return strcmp(key1->key, key2->key); } static int skeysort(const void *k1, const void *k2) { ESL_SKEY *key1; ESL_SKEY *key2; key1 = (ESL_SKEY *) k1; key2 = (ESL_SKEY *) k2; return strcmp(key1->key, key2->key); } /***************************************************************** *# 3. Portable binary i/o *****************************************************************/ /* Function: esl_byteswap() * Synopsis: Swap between big-endian and little-endian, in place. * * Purpose: Swap between big-endian and little-endian, in place. */ void esl_byteswap(char *swap, int nbytes) { int x; char byte; for (x = 0; x < nbytes / 2; x++) { byte = swap[nbytes - x - 1]; swap[nbytes - x - 1] = swap[x]; swap[x] = byte; } } /* Function: esl_ntoh16() * Synopsis: Convert 2-byte integer from network-order to host-order. * * Purpose: Convert a 2-byte integer from network-order to host-order, * and return it. * * and do the same, but for 4-byte * and 8-byte integers, respectively. */ uint16_t esl_ntoh16(uint16_t netshort) { #ifdef WORDS_BIGENDIAN return netshort; #else esl_byteswap((char *) &netshort, 2); return netshort; #endif } uint32_t esl_ntoh32(uint32_t netlong) { #ifdef WORDS_BIGENDIAN return netlong; #else esl_byteswap((char *) &netlong, 4); return netlong; #endif } uint64_t esl_ntoh64(uint64_t net_int64) { #ifdef WORDS_BIGENDIAN return net_int64; #else esl_byteswap((char *) &net_int64, 8); return net_int64; #endif } /* Function: esl_hton16() * Synopsis: Convert 2-byte integer from host-order to network-order. * * Purpose: Convert a 2-byte integer from host-order to network-order, and * return it. * * and do the same, but for 4-byte * and 8-byte integers, respectively. */ uint16_t esl_hton16(uint16_t hostshort) { #ifdef WORDS_BIGENDIAN return hostshort; #else esl_byteswap((char *) &hostshort, 2); return hostshort; #endif } uint32_t esl_hton32(uint32_t hostlong) { #ifdef WORDS_BIGENDIAN return hostlong; #else esl_byteswap((char *) &hostlong, 4); return hostlong; #endif } uint64_t esl_hton64(uint64_t host_int64) { #ifdef WORDS_BIGENDIAN return host_int64; #else esl_byteswap((char *) &host_int64, 8); return host_int64; #endif } /* Function: esl_fread_u16() * Synopsis: Read network-order integer from a stream. * * Purpose: Read a 2-byte network-order integer from , convert to * host order, leave it in . * * and do the same, but * for 4-byte and 8-byte integers, respectively. * * Returns: on success, and on failure. */ int esl_fread_u16(FILE *fp, uint16_t *ret_result) { uint16_t result; if (fread(&result, sizeof(uint16_t), 1, fp) != 1) return eslFAIL; *ret_result = esl_ntoh16(result); return eslOK; } int esl_fread_u32(FILE *fp, uint32_t *ret_result) { uint32_t result; if (fread(&result, sizeof(uint32_t), 1, fp) != 1) return eslFAIL; *ret_result = esl_ntoh32(result); return eslOK; } int esl_fread_u64(FILE *fp, uint64_t *ret_result) { uint64_t result; if (fread(&result, sizeof(uint64_t), 1, fp) != 1) return eslFAIL; *ret_result = esl_ntoh64(result); return eslOK; } int esl_fread_i16(FILE *fp, int16_t *ret_result) { int16_t result; if (fread(&result, sizeof(int16_t), 1, fp) != 1) return eslFAIL; *ret_result = (int16_t) esl_ntoh16((uint16_t) result); return eslOK; } int esl_fread_i32(FILE *fp, int32_t *ret_result) { int32_t result; if (fread(&result, sizeof(int32_t), 1, fp) != 1) return eslFAIL; *ret_result = (int32_t) esl_ntoh32((uint32_t) result); return eslOK; } int esl_fread_i64(FILE *fp, int64_t *ret_result) { int64_t result; if (fread(&result, sizeof(int64_t), 1, fp) != 1) return eslFAIL; *ret_result = (int64_t) esl_ntoh64((uint64_t) result); return eslOK; } /* Function: esl_fwrite_u16() * Synopsis: Write an integer to a stream in network-order. * * Purpose: Write a 2-byte host-order integer to stream * in network order. * * and do the same, but * for 4-byte and 8-byte integers, respectively. * * Returns: on success, and on failure. */ int esl_fwrite_u16(FILE *fp, uint16_t n) { n = esl_hton16(n); if (fwrite(&n, sizeof(uint16_t), 1, fp) != 1) return eslFAIL; return eslOK; } int esl_fwrite_u32(FILE *fp, uint32_t n) { n = esl_hton32(n); if (fwrite(&n, sizeof(uint32_t), 1, fp) != 1) return eslFAIL; return eslOK; } int esl_fwrite_u64(FILE *fp, uint64_t n) { n = esl_hton64(n); if (fwrite(&n, sizeof(uint64_t), 1, fp) != 1) return eslFAIL; return eslOK; } int esl_fwrite_i16(FILE *fp, int16_t n) { n = (int16_t) esl_hton16((uint16_t) n); if (fwrite(&n, sizeof(int16_t), 1, fp) != 1) return eslFAIL; return eslOK; } int esl_fwrite_i32(FILE *fp, int32_t n) { n = (int32_t) esl_hton32((uint32_t) n); if (fwrite(&n, sizeof(int32_t), 1, fp) != 1) return eslFAIL; return eslOK; } int esl_fwrite_i64(FILE *fp, int64_t n) { n = (int64_t) esl_hton64((uint64_t) n); if (fwrite(&n, sizeof(int64_t), 1, fp) != 1) return eslFAIL; return eslOK; } /* Function: esl_fread_offset() * Synopsis: Read an offset portably. * * Purpose: Read a file offset from the stream (which would usually * be a save file), and store it in . * * Offsets may have been saved by a different machine * than the machine that reads them. The writer and the reader * may differ in byte order and in width (). * * Byte order is dealt with by saving offsets in * network byte order, and converting them to host byte order * when they are read (if necessary). * * Width is dealt with by the argument, which must be * either 4 or 8, specifying that the saved offset is a * 32-bit versus 64-bit . If the reading host * width matches the of the writer, no * problem. If is 4 but the reading host has 64-bit * 's, this is also no problem; the conversion * always works. If is 64 but the reading host has * only 32-bit , we cannot guarantee that we have * sufficient dynamic range to represent the offset; if * the stored offset is too large to represent in a 32-bit * offset, we throw a fatal error. * * Returns: on success; on a read failure. * * Throws: if is something other than 4 or 8; * if the stored offset is too large for * the reader to represent (the machine that wrote the * SSI file used 64 bit offsets, the reader uses 32 * bit offsets, and this offset is too large to represent * in a 32 bit offset). */ int esl_fread_offset(FILE *fp, int sz, off_t *ret_offset) { int status; uint32_t x32; uint64_t x64; if (sz == 8) { if (esl_fread_u64(fp, &x64) != eslOK) { status = eslFAIL; goto ERROR; } if (sizeof(off_t) == 4 && x64 > INT32_MAX) ESL_XEXCEPTION(eslEINCOMPAT, "can't read 64-bit off_t on this 32-bit host"); *ret_offset = (off_t) x64; } else if (sz == 4) { if (esl_fread_u32(fp, &x32) != eslOK) { status = eslFAIL; goto ERROR; } *ret_offset = (off_t) x32; } else ESL_XEXCEPTION(eslEINVAL, "offsets must be 32 or 64 bits"); return eslOK; ERROR: *ret_offset = 0; return status; } /* Function: esl_fwrite_offset() * Synopsis: Write an offset portably. * * Purpose: Portably write (save) to the stream , in network * byte order. * * Returns: on success; on write failure. * * Throws: if is something other than a 32-bit or * 64-bit integer on this machine, in which case we don't know * how to deal with it portably. */ int esl_fwrite_offset(FILE *fp, off_t offset) { if (sizeof(off_t) == 4) return esl_fwrite_u32(fp, offset); else if (sizeof(off_t) == 8) return esl_fwrite_u64(fp, offset); else ESL_EXCEPTION(eslEINVAL, "off_t is neither 32-bit nor 64-bit"); /*UNREACHED*/ return eslEINCONCEIVABLE; } /***************************************************************** * 4. Test driver *****************************************************************/ /* gcc -g -Wall -o ssi_utest -L. -I. -DeslSSI_TESTDRIVE esl_ssi.c -leasel -lm * ./ssi_utest */ #ifdef eslSSI_TESTDRIVE #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_ssi.h" #include "esl_random.h" #include "esl_randomseq.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-F", eslARG_INT, "3", NULL, NULL, NULL, NULL, NULL, "number of test files", 0 }, { "-L", eslARG_INT, "1000", NULL, NULL, NULL, NULL, NULL, "max length of test sequences", 0 }, { "-N", eslARG_INT, "10", NULL, NULL, NULL, NULL, NULL, "number of test sequences per file", 0 }, { "-Q", eslARG_INT, "10", NULL, NULL, NULL, NULL, NULL, "number of random queries to retrieve", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for ssi module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_Create(esl_opt_GetInteger(go, "-s")); ESL_NEWSSI *ns = NULL; ESL_SSI *ssi = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; char *ssifile = NULL; FILE *fp = NULL; int nfiles = esl_opt_GetInteger(go, "-F"); int maxL = esl_opt_GetInteger(go, "-L"); int nseq = esl_opt_GetInteger(go, "-N"); int nq = esl_opt_GetInteger(go, "-Q"); int be_verbose = esl_opt_GetBoolean(go, "-v"); uint16_t fh; int i,j; char **sqfile = NULL; char **seqname = NULL; char **seq = NULL; int *seqlen = NULL; char query[32]; char *qfile; int qfmt; off_t roff; double p[4] = { 0.25, 0.25, 0.25, 0.25 }; int status; /* Create sequence file names. */ ESL_ALLOC(sqfile, sizeof(char *) * nfiles); for (j = 0; j < nfiles; j++) { ESL_ALLOC(sqfile[j], sizeof(char) * 32); sprintf(sqfile[j], "esltmpXXXXXX"); } /* Create sequences with random * lengths up to 1000. */ ESL_ALLOC(seq, sizeof(char *) * nseq * nfiles); ESL_ALLOC(seqname,sizeof(char *) * nseq * nfiles); ESL_ALLOC(seqlen, sizeof(int) * nseq * nfiles); for (i = 0; i < nseq*nfiles; i++) { seqlen[i] = 1 + esl_rnd_Roll(r, maxL); /* 1..maxL */ ESL_ALLOC(seq[i], sizeof(char) * (seqlen[i]+1)); ESL_ALLOC(seqname[i],sizeof(char) * 64); esl_rsq_IID(r, "ACGT", p, 4, seqlen[i], seq[i]); sprintf(seqname[i], "seq%d-file%d", i, i/nseq); } /* Save them to FASTA files. */ for (j = 0; j < nfiles; j++) { if (esl_tmpfile_named(sqfile[j], &fp) != eslOK) esl_fatal("failed to open %s", sqfile[j]); for (i = j*nseq; i < (j+1)*nseq; i++) { sq = esl_sq_CreateFrom(seqname[i], seq[i], NULL, NULL, NULL); esl_sqio_Write(fp, sq, eslSQFILE_FASTA, FALSE); esl_sq_Destroy(sq); } fclose(fp); } /* Create an ssi index of all the FASTA files. */ if (esl_strdup(sqfile[0], -1, &ssifile) != eslOK) esl_fatal("esl_strdup() failed"); if (esl_strcat(&ssifile, -1, ".ssi", 4) != eslOK) esl_fatal("esl_strcat() failed"); if (esl_newssi_Open(ssifile, TRUE, &ns) != eslOK) esl_fatal("new SSI index open failed"); if ((sq = esl_sq_Create()) == NULL) esl_fatal("esl_sq_Create() failed"); for (j = 0; j < nfiles; j++) { if (esl_sqfile_Open(sqfile[j], eslSQFILE_UNKNOWN, NULL, &sqfp) != eslOK) esl_fatal("failed to open fasta file %s", sqfile[j]); if (esl_newssi_AddFile(ns, sqfile[j], sqfp->format, &fh) != eslOK) esl_fatal("esl_newssi_AddFile() failed"); while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { if (be_verbose) printf("%16s %ld %ld %" PRIi64 "\n", sq->name, (long) sq->roff, (long) sq->doff, sq->L); if (esl_newssi_AddKey(ns, sq->name, fh, sq->roff, sq->doff, sq->L) != eslOK) esl_fatal("esl_newssi_AddKey() failed"); esl_sq_Reuse(sq); } if (status != eslEOF) esl_fatal("sequence read failure"); esl_sqfile_Close(sqfp); } esl_sq_Destroy(sq); /* Save the SSI index to a file. */ esl_newssi_Write(ns); esl_newssi_Close(ns); /* Open the SSI index - now we'll use it to retrieve * random sequences. */ if (esl_ssi_Open(ssifile, &ssi) != eslOK) esl_fatal("failed to open ssi index"); sq = esl_sq_Create(); while (nq--) { /* Choose a seq and file */ i = esl_rnd_Roll(r, nseq*nfiles); j = i/nseq; sprintf(query, "seq%d-file%d", i, j); /* Retrieve it */ status = esl_ssi_FindName(ssi, query, &fh, &roff, NULL, NULL); if (status != eslOK) esl_fatal("didn't find %s in index", query); esl_ssi_FileInfo(ssi, fh, &qfile, &qfmt); if (esl_sqfile_Open(qfile, qfmt, NULL, &sqfp) != eslOK) esl_fatal("failed to open fasta file %s", qfile); esl_sqfile_Position(sqfp, roff); if (esl_sqio_Read(sqfp, sq) != eslOK) esl_fatal("failed to read seq %s", query); /* Check that it's the right one */ if (strcmp(sq->name, query) != 0) esl_fatal("sought %s, retrieved %s", query, sq->name); if (sq->n != seqlen[i]) esl_fatal("wrong sequence length retrieved"); if (strcmp(sq->seq, seq[i]) != 0) esl_fatal("unexpected sequence retrieved"); if (strcmp(qfile, sqfile[j]) != 0) esl_fatal("file names %s and %s differ", qfile, sqfile[j]); esl_sq_Reuse(sq); esl_sqfile_Close(sqfp); } for (j = 0; j < nfiles; j++) remove(sqfile[j]); remove(ssifile); status = eslOK; /* flowthrough is safe: garbage collection only below. */ ERROR: free(ssifile); esl_sq_Destroy(sq); esl_ssi_Close(ssi); esl_randomness_Destroy(r); if (seqlen) free(seqlen); esl_Free2D((void **) seqname, nseq*nfiles); esl_Free2D((void **) seq, nseq*nfiles); esl_Free2D((void **) sqfile, nfiles); esl_getopts_Destroy(go); return status; } #endif /*eslSSI_TESTDRIVE*/ /***************************************************************** * 5. Example code. ****************************************************************/ #ifdef eslSSI_EXAMPLE /* gcc -o example -g -Wall -DeslSSI_EXAMPLE esl_ssi.c easel.c * esl-shuffle -o foo.fa -N 1000 -G --amino -L 400 * ./example foo.fa */ /*::cexcerpt::ssi_example::begin::*/ #include #include "easel.h" #include "esl_ssi.h" int main(int argc, char **argv) { ESL_NEWSSI *ns; char *fafile; /* name of FASTA file */ FILE *fp; /* opened FASTA file for reading */ char *ssifile; /* name of SSI file */ uint16_t fh; /* file handle SSI associates w/ fafile */ char *buf = NULL; /* growable buffer for esl_fgets() */ int n = 0; /* length of buf */ char *s, *seqname; off_t seq_offset; int status; /* Open a new SSI index named .ssi */ fafile = argv[1]; esl_strdup(fafile, -1, &ssifile); esl_strcat(&ssifile, -1, ".ssi", 4); status = esl_newssi_Open(ssifile, FALSE, &ns); if (status == eslENOTFOUND) esl_fatal("failed to open SSI index %s", ssifile); else if (status == eslEOVERWRITE) esl_fatal("SSI index %s already exists; delete or rename it", ssifile); else if (status != eslOK) esl_fatal("failed to create a new SSI index"); /* Collect the sequence names from a FASTA file into an index */ if ((fp = fopen(fafile, "r")) == NULL) esl_fatal("failed to open %s", fafile); if (esl_newssi_AddFile(ns, fafile, 1, &fh) != eslOK) esl_fatal("failed to add %s to index: %s", fafile, ns->errbuf); seq_offset = ftello(fp); while (esl_fgets(&buf, &n, fp) == eslOK) { if (*buf == '>') { s = buf+1; /* skip past > */ esl_strtok(&s, " \t\n", &seqname); /* name = 1st token on > line */ if (esl_newssi_AddKey(ns, seqname, fh, seq_offset, 0, 0) != eslOK) esl_fatal("failed to add key %s to index: %s", seqname, ns->errbuf); } seq_offset = ftello(fp); } free(buf); fclose(fp); /* Save the index to disk */ status = esl_newssi_Write(ns); if (status == eslERANGE) esl_fatal("SSI index file size exceeds maximum allowed by your filesystem"); else if (status == eslESYS) esl_fatal("SSI index sort failed: %s", ns->errbuf); else if (status != eslOK) esl_fatal("SSI index save failed: %s", ns->errbuf); esl_newssi_Close(ns); free(ssifile); return 0; } /*::cexcerpt::ssi_example::end::*/ #endif /*eslSSI_EXAMPLE*/ #ifdef eslSSI_EXAMPLE2 /* gcc -o example2 -g -Wall -DeslSSI_EXAMPLE2 esl_ssi.c easel.c * ./example2 random77 foo.fa.ssi */ /*::cexcerpt::ssi_example2::begin::*/ #include #include "easel.h" #include "esl_ssi.h" int main(int argc, char **argv) { ESL_SSI *ssi; char *seqname; /* name of sequence to retrieve */ char *ssifile; /* name of SSI file */ uint16_t fh; /* file handle SSI associates w/ fafile */ char *fafile; /* name of FASTA file */ int fmt; /* format code (1, in this example) */ off_t offset; /* disk offset of seqname in fafile */ FILE *fp; /* opened FASTA file for reading */ char *buf = NULL; /* growable buffer for esl_fgets() */ int n = 0; /* size of buffer */ seqname = argv[1]; ssifile = argv[2]; if (esl_ssi_Open(ssifile, &ssi) != eslOK) esl_fatal("open failed"); if (esl_ssi_FindName(ssi, seqname, &fh, &offset, NULL, NULL) != eslOK) esl_fatal("find failed"); if (esl_ssi_FileInfo(ssi, fh, &fafile, &fmt) != eslOK) esl_fatal("info failed"); /* you can't close the ssi file yet - fafile is pointing into it! */ if ((fp = fopen(fafile, "r")) == NULL) esl_fatal("failed to open %s", fafile); if (fseeko(fp, offset, SEEK_SET) != 0) esl_fatal("failed to position %s", fafile); if (esl_fgets(&buf, &n, fp) != eslOK) esl_fatal("failed to get name/desc line"); do { printf("%s", buf); } while (esl_fgets(&buf, &n, fp) == eslOK && *buf != '>'); esl_ssi_Close(ssi); fclose(fp); free(buf); return 0; } /*::cexcerpt::ssi_example2::end::*/ #endif /*eslSSI_EXAMPLE2*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_ssi.c 727 2011-10-24 17:17:32Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_ssi.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_mixgev.h0000664361611702660230000000542112473612606015700 0ustar wheelerteddy/* Mixture generalized extreme value distributions. * * SRE, Mon Aug 15 08:33:57 2005 [St. Louis] * SVN $Id: esl_mixgev.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_mixgev.h $ */ #ifndef eslMIXGEV_INCLUDED #define eslMIXGEV_INCLUDED #ifdef eslAUGMENT_RANDOM #include "esl_random.h" #endif typedef struct { double *q; /* mixture coefficients [0..K-1]*/ double *mu; /* location parameters [0..K-1]*/ double *lambda; /* scale parameters [0..K-1]*/ double *alpha; /* shape parameters [0..K-1]*/ double *wrk; /* tmp vector needed for logpdf calc */ int *isgumbel; /* flag:TRUE to constrain k to Gumbel*/ int K; /* # of components */ } ESL_MIXGEV; extern ESL_MIXGEV *esl_mixgev_Create(int K); extern void esl_mixgev_Destroy(ESL_MIXGEV *mg); extern int esl_mixgev_Copy(ESL_MIXGEV *dest, ESL_MIXGEV *src); extern int esl_mixgev_ForceGumbel(ESL_MIXGEV *mg, int which); extern double esl_mixgev_pdf (double x, ESL_MIXGEV *mg); extern double esl_mixgev_logpdf (double x, ESL_MIXGEV *mg); extern double esl_mixgev_cdf (double x, ESL_MIXGEV *mg); extern double esl_mixgev_logcdf (double x, ESL_MIXGEV *mg); extern double esl_mixgev_surv (double x, ESL_MIXGEV *mg); extern double esl_mixgev_logsurv(double x, ESL_MIXGEV *mg); extern double esl_mixgev_invcdf (double p, ESL_MIXGEV *mg); extern double esl_mixgev_generic_pdf (double x, void *params); extern double esl_mixgev_generic_cdf (double x, void *params); extern double esl_mixgev_generic_surv (double x, void *params); extern double esl_mixgev_generic_invcdf(double p, void *params); extern int esl_mixgev_Plot(FILE *fp, ESL_MIXGEV *mg, double (*func)(double x, ESL_MIXGEV *mg), double xmin, double xmax, double xstep); #ifdef eslAUGMENT_RANDOM extern double esl_mixgev_Sample(ESL_RANDOMNESS *r, ESL_MIXGEV *mg); extern int esl_mixgev_FitGuess(ESL_RANDOMNESS *r, double *x, int n, ESL_MIXGEV *mg); #endif /*eslAUGMENT_RANDOM*/ #ifdef eslAUGMENT_MINIMIZER extern int esl_mixgev_FitComplete(double *x, int n, ESL_MIXGEV *mg); #endif /*eslAUGMENT_MINIMIZER*/ #endif /*eslMIXGEV_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_tree.h0000664361611702660230000001256712473612610015344 0ustar wheelerteddy/* Phylogenetic trees. * * SRE, Tue May 2 13:54:30 2006 [St. Louis] * SVN $Id: esl_tree.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_tree.h $ */ #ifndef eslTREE_INCLUDED #define eslTREE_INCLUDED #include #include /* Object: ESL_TREE * * All trees are represented as rooted trees, starting from * node 0. For N taxa, there are N-1 internal nodes, numbered * 0..N-2. Taxa on leaves are numbered 0..N-1, and represented * in , , as negative numbers. * */ typedef struct { int N; /* number of taxa */ /* (Mandatory) information for the internal nodes of a rooted tree. * There are N-1 nodes, numbered 0..N-2, with the root at 0, * so each array below is indexed [0..N-2]. * When an internal node has a left or right branch to a taxon, * / are <= 0, negative ; if they're to * be used as array indices, flip their sign. * There is no ambiguity between taxon 0/root node 0, because * a taxon can't be a parent, and the root node can't be a child. * For an unrooted tree, by convention, taxon 0 is the outgroup: T->left[0] = 0, * and T->rd[0] = 0.0. */ int *parent; /* index of parent of node: values are 0..N-2; parent of root 0 = 0 */ int *left; /* index of left child: values are -(N-1)..0=taxa; 1..N-2=nodes */ int *right; /* index of right child: values are -(N-1)..0=taxa; 1..N-2=nodes */ double *ld; /* left branch length under node: values are >= 0 */ double *rd; /* right branch length under node: values are >= 0 */ /* in linkage trees, ld[x]=rd[x]= "height" (linkage value) of node, not branch lengths */ /* Derived (optional) information, that we can reconstruct if * we need to from the mandatory info above. */ int *taxaparent; /* for taxa [0..N-1]: index of its parent node, 0..N-2. [esl_tree_SetTaxaParents()] */ int *cladesize; /* for nodes [0..N-2]: # taxa in this clade, 1..N [esl_tree_SetCladesizes()] */ /* Optional information */ char **taxonlabel; /* labels for taxa: [0..N-1] array of char strings */ char **nodelabel; /* labels for nodes: [0..N-2] array of char strings */ /* Tree mode options. */ int is_linkage_tree; /* TRUE if this is a linkage tree; if FALSE, it's an additive tree */ /* Tree output options. */ int show_unrooted; /* TRUE to output 'root' as a trifurcation (a la PHYLIP) */ int show_node_labels; /* TRUE to output labels for interior nodes */ int show_root_branchlength; /* TRUE to show 0.0 branch length to root node (a la TreeAlign) */ int show_branchlengths; /* TRUE to output branch lengths */ int show_quoted_labels; /* TRUE to output ALL labels as quoted labels */ int show_numeric_taxonlabels;/* TRUE to output taxa labels as their 0..N-1 indices if no other taxonlabel is present */ /* Memory allocation information, when growing a tree (on input, for example) */ int nalloc; /* current allocated # of taxa */ } ESL_TREE; /* UPGMA, average-link, minimum-link, and maximum-link clustering are * all implemented by one algorithm, cluster_engine(), in esl_tree.c. * We define some flags (within the scope of the tree module) to * control the behavior, as we call the algorithm engine from four * different API functions. */ #define eslUPGMA 0 #define eslWPGMA 1 #define eslSINGLE_LINKAGE 2 #define eslCOMPLETE_LINKAGE 3 /* 1. The ESL_TREE object. */ extern ESL_TREE *esl_tree_Create(int ntaxa); extern ESL_TREE *esl_tree_CreateGrowable(int nalloc); extern ESL_TREE *esl_tree_CreateFromString(char *s); extern int esl_tree_Grow(ESL_TREE *T); extern int esl_tree_SetTaxaParents(ESL_TREE *T); extern int esl_tree_SetCladesizes(ESL_TREE *T); extern int esl_tree_SetTaxonlabels(ESL_TREE *T, char **names); extern int esl_tree_RenumberNodes(ESL_TREE *T); extern int esl_tree_VerifyUltrametric(ESL_TREE *T); extern int esl_tree_Validate(ESL_TREE *T, char *errbuf); extern void esl_tree_Destroy(ESL_TREE *T); /* 2. Newick format i/o */ extern int esl_tree_WriteNewick(FILE *fp, ESL_TREE *T); extern int esl_tree_ReadNewick(FILE *fp, char *errbuf, ESL_TREE **ret_T); /* 3. Tree comparison algorithms. */ extern int esl_tree_Compare(ESL_TREE *T1, ESL_TREE *T2); /* 4. Clustering algorithms for distance-based tree construction. */ extern int esl_tree_UPGMA(ESL_DMATRIX *D, ESL_TREE **ret_T); extern int esl_tree_WPGMA(ESL_DMATRIX *D, ESL_TREE **ret_T); extern int esl_tree_SingleLinkage(ESL_DMATRIX *D, ESL_TREE **ret_T); extern int esl_tree_CompleteLinkage(ESL_DMATRIX *D, ESL_TREE **ret_T); /* 5. Generating simulated trees. */ extern int esl_tree_Simulate(ESL_RANDOMNESS *r, int N, ESL_TREE **ret_T); extern int esl_tree_ToDistanceMatrix(ESL_TREE *T, ESL_DMATRIX **ret_D); #endif /*eslTREE_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_vmx.h0000664361611702660230000000770112473612610015211 0ustar wheelerteddy#ifdef HAVE_VMX /* Vectorized routines for PowerPC, using Altivec. * * SVN $Id: esl_vmx.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_vmx.h $ */ #ifndef eslVMX_INCLUDED #define eslVMX_INCLUDED #include "easel.h" #include #ifndef __APPLE_ALTIVEC__ #include #endif extern vector float esl_vmx_logf(vector float x); extern vector float esl_vmx_expf(vector float x); extern void esl_vmx_dump_vecfloat(FILE *fp, vector float v); /* Function: esl_vmx_set_float() * Synopsis: Fills float vector with x. * * Purpose: Sets all elements in the vector to x. */ static inline vector float esl_vmx_set_float(float x) { vector float v; vector unsigned char p; v = vec_lde(0, &x); p = vec_lvsl(0, &x); v = vec_perm(v, v, p); v = vec_splat(v, 0); return v; } /* Function: esl_vmx_set_s16() * Synopsis: Fills short vector with x. * * Purpose: Sets all elements in the vector to x. */ static inline vector signed short esl_vmx_set_s16(signed short x) { vector signed short v; vector unsigned char p; v = vec_lde(0, &x); p = vec_lvsl(0, &x); v = vec_perm(v, v, p); v = vec_splat(v, 0); return v; } /* Function: esl_vmx_set_u8() * Synopsis: Fills byte vector with x. * * Purpose: Sets all elements in the vector to x. */ static inline vector unsigned char esl_vmx_set_u8(unsigned char x) { vector unsigned char v; vector unsigned char p; v = vec_lde(0, &x); p = vec_lvsl(0, &x); v = vec_perm(v, v, p); v = vec_splat(v, 0); return v; } /* Function: esl_vmx_hsum_float() * Synopsis: Returns sum of all floats. * * Purpose: Resturns the sum of all elements in the vector . */ static inline float esl_vmx_hsum_float(vector float v) { float f; v = vec_add(v, vec_sld(v, v, 4)); v = vec_add(v, vec_sld(v, v, 8)); vec_ste(v, 0, &f); return f; } /* Function: esl_vmx_hsum_s16() * Synopsis: Returns sum of all shorts. * * Purpose: Resturns the sum of all elements in the vector . */ static inline signed short esl_vmx_hsum_s16(vector signed short v) { signed short s; v = vec_add(v, vec_sld(v, v, 2)); v = vec_add(v, vec_sld(v, v, 4)); v = vec_add(v, vec_sld(v, v, 8)); vec_ste(v, 0, &s); return s; } /* Function: esl_vmx_hmax_float() * Synopsis: Returns max of all floats. * * Purpose: Resturns the maximum element in the vector . */ static inline float esl_vmx_hmax_float(vector float v) { float f; v = vec_max(v, vec_sld(v, v, 4)); v = vec_max(v, vec_sld(v, v, 8)); vec_ste(v, 0, &f); return f; } /* Function: esl_vmx_hmax_s16() * Synopsis: Returns max of all shorts. * * Purpose: Resturns the maximum element in the vector . */ static inline signed short esl_vmx_hmax_s16(vector signed short v) { signed short s; v = vec_max(v, vec_sld(v, v, 2)); v = vec_max(v, vec_sld(v, v, 4)); v = vec_max(v, vec_sld(v, v, 8)); vec_ste(v, 0, &s); return s; } /* Function: esl_vmx_hmax_u8() * Synopsis: Returns max of all bytes. * * Purpose: Resturns the maximum element in the vector . */ static inline unsigned char esl_vmx_hmax_u8(vector unsigned char v) { unsigned char s; v = vec_max(v, vec_sld(v, v, 1)); v = vec_max(v, vec_sld(v, v, 2)); v = vec_max(v, vec_sld(v, v, 4)); v = vec_max(v, vec_sld(v, v, 8)); vec_ste(v, 0, &s); return s; } #endif /*eslVMX_INCLUDED*/ #endif /*HAVE_VMX*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_msa.c0000664361611702660230000037415212473612606015166 0ustar wheelerteddy/* Multiple sequence alignment file i/o. * * Contents: * 1. The object * 2. Digital mode MSA's (augmentation: alphabet) * 3. Setting, checking data fields in an * 4. Miscellaneous functions for manipulating MSAs * 5. Debugging, testing, development * 6. Unit tests * 7. Test driver * 8. Copyright and license information * * Augmentations: * alphabet: adds support for digital MSAs * keyhash: speeds up Stockholm file input * ssi: enables indexed random access in a file of many MSAs */ #include "esl_config.h" #include #include #include #include #include #ifdef HAVE_STRINGS_H #include /* POSIX strcasecmp() */ #endif #include "easel.h" #include "esl_mem.h" #ifdef eslAUGMENT_KEYHASH #include "esl_keyhash.h" #endif #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif #ifdef eslAUGMENT_SSI #include "esl_ssi.h" #endif #include "esl_msa.h" #include "esl_msafile.h" #include "esl_vectorops.h" #include "esl_wuss.h" /****************************************************************************** *# 1. The object *****************************************************************************/ static ESL_MSA *msa_create_mostly(int nseq, int64_t alen); /* Function: esl_msa_Create() * Synopsis: Creates an object. * * Purpose: Creates and initializes an object, and returns a * pointer to it. * * If caller already knows the dimensions of the alignment, * both and , then allocates the whole thing at once. The MSA's * and fields are set accordingly, and the * caller doesn't have to worry about setting them; it can * just fill in . * * If caller doesn't know the dimensions of the alignment * (for example, when parsing an alignment file), then * is taken to be an initial allocation size, and * must be -1. is used as a flag for a * "growable" MSA. For example, the call . allocates internally for an * initial block of 16 sequences, but without allocating * any space for individual sequences. This allocation can * be expanded (by doubling) by calling . * A created can only be <_Expand()>'ed if is * -1. * * In a growable alignment, caller becomes responsible for * memory allocation of each individual . Caller * is also responsible for setting and when * it is done parsing and creating the new MSA. In * particular, the function relies on * to know how many individual sequences are * allocated. * * Args: - number of sequences, or nseq allocation blocksize * - length of alignment in columns, or -1 * * Returns: pointer to new MSA object, w/ all values initialized. * * Throws: on allocation failure. * * Xref: squid's MSAAlloc() */ ESL_MSA * esl_msa_Create(int nseq, int64_t alen) { int status; ESL_MSA *msa; int i; msa = msa_create_mostly(nseq, alen); /* aseq is null upon successful return */ if (msa == NULL) return NULL; /* already threw error in msa_create_mostly, so percolate */ ESL_ALLOC(msa->aseq, sizeof(char *) * msa->sqalloc); for (i = 0; i < msa->sqalloc; i++) msa->aseq[i] = NULL; if (alen != -1) { for (i = 0; i < nseq; i++) { ESL_ALLOC(msa->aseq[i], sizeof(char) * (alen+1)); msa->aseq[i][alen] = '\0'; /* caller might forget to null terminate; help the poor */ } msa->nseq = nseq; } return msa; ERROR: esl_msa_Destroy(msa); return NULL; } /* Function: esl_msa_Expand() * Synopsis: Reallocate for more sequences. * * Purpose: Double the current sequence allocation in . * Typically used when we're reading an alignment sequentially * from a file, so we don't know nseq 'til we're done. * * Returns: on success. * * Throws: on reallocation failure; is undamaged, * and the caller may attempt to recover from the error. * * Throws if is not growable: its * field must be -1 to be growable. * * Xref: squid's MSAExpand(), 1999. */ int esl_msa_Expand(ESL_MSA *msa) { int status; int old, new; /* old & new allocation sizes (max # seqs) */ int i,j; if (msa->alen != -1) ESL_EXCEPTION(eslEINVAL, "that MSA is not growable"); old = msa->sqalloc; new = 2*old; /* Normally either aseq (ascii) or ax (digitized) would be active, not both. * We could make sure that that's true, but that's checked elsewhere. */ if (msa->aseq) ESL_REALLOC(msa->aseq, sizeof(char *) * new); #ifdef eslAUGMENT_ALPHABET if (msa->ax) ESL_REALLOC(msa->ax, sizeof(ESL_DSQ *) * new); #endif /*eslAUGMENT_ALPHABET*/ ESL_REALLOC(msa->sqname, sizeof(char *) * new); ESL_REALLOC(msa->wgt, sizeof(double) * new); ESL_REALLOC(msa->sqlen, sizeof(int64_t)* new); if (msa->ss) { ESL_REALLOC(msa->ss, sizeof(char *) * new); ESL_REALLOC(msa->sslen, sizeof(int64_t) * new); } if (msa->sa) { ESL_REALLOC(msa->sa, sizeof(char *) * new); ESL_REALLOC(msa->salen, sizeof(int64_t) * new); } if (msa->pp) { ESL_REALLOC(msa->pp, sizeof(char *) * new); ESL_REALLOC(msa->pplen, sizeof(int64_t) * new); } if (msa->sqacc) ESL_REALLOC(msa->sqacc, sizeof(char *) * new); if (msa->sqdesc) ESL_REALLOC(msa->sqdesc, sizeof(char *) * new); for (i = old; i < new; i++) { if (msa->aseq) msa->aseq[i] = NULL; #ifdef eslAUGMENT_ALPHABET if (msa->ax) msa->ax[i] = NULL; #endif /*eslAUGMENT_ALPHABET*/ msa->sqname[i] = NULL; msa->wgt[i] = -1.0; /* -1.0 means "unset so far" */ msa->sqlen[i] = 0; if (msa->ss) { msa->ss[i] = NULL; msa->sslen[i] = 0; } if (msa->sa) { msa->sa[i] = NULL; msa->salen[i] = 0; } if (msa->pp) { msa->pp[i] = NULL; msa->pplen[i] = 0; } if (msa->sqacc) msa->sqacc[i] = NULL; if (msa->sqdesc) msa->sqdesc[i] = NULL; } /* Reallocate and re-init for unparsed #=GS tags, if we have some. * gs is [0..ngs-1][0..nseq-1][], so we're reallocing the middle * set of pointers. */ if (msa->gs) for (i = 0; i < msa->ngs; i++) { if (msa->gs[i]) { ESL_REALLOC(msa->gs[i], sizeof(char *) * new); for (j = old; j < new; j++) msa->gs[i][j] = NULL; } } /* Reallocate and re-init for unparsed #=GR tags, if we have some. * gr is [0..ngs-1][0..nseq-1][], so we're reallocing the middle * set of pointers. */ if (msa->gr) for (i = 0; i < msa->ngr; i++) { if (msa->gr[i]) { ESL_REALLOC(msa->gr[i], sizeof(char *) * new); for (j = old; j < new; j++) msa->gr[i][j] = NULL; } } msa->sqalloc = new; return eslOK; ERROR: return status; } /* Function: esl_msa_Copy() * Synopsis: Copies an MSA. * * Purpose: Makes a copy of in . Caller has * already allocated to hold an MSA of * at least nseq> sequences and alen> * columns. * * Note: Because MSA's are not reusable, this function does a * lot of internal allocation for optional fields, without * checking to see if space was already allocated. To * reuse an MSA and copy new data into it, we'll * eventually need a function, and/or * recode this to reuse or free any already-allocated * optional memory it encounters in . Until then, * it's unlikely that is useful on its own; * the caller would be expected to call * instead. * * Returns: on success. * * Throws: on allocation failure. In this case, * was only partially constructed, and should be treated * as corrupt. */ int esl_msa_Copy(const ESL_MSA *msa, ESL_MSA *new) { int i, x, j; int status; /* aseq[0..nseq-1][0..alen-1] strings, * or ax[0..nseq-1][(0) 1..alen (alen+1)] digital seqs * must have one of them allocated already. */ if (! (msa->flags & eslMSA_DIGITAL)) for (i = 0; i < msa->nseq; i++) strcpy(new->aseq[i], msa->aseq[i]); #ifdef eslAUGMENT_ALPHABET else { for (i = 0; i < msa->nseq; i++) memcpy(new->ax[i], msa->ax[i], (msa->alen+2) * sizeof(ESL_DSQ)); new->abc = msa->abc; } #endif for (i = 0; i < msa->nseq; i++) { esl_strdup(msa->sqname[i], -1, &(new->sqname[i])); new->wgt[i] = msa->wgt[i]; } /* alen, nseq were already set by Create() */ new->flags = msa->flags; esl_strdup(msa->name, -1, &(new->name)); esl_strdup(msa->desc, -1, &(new->desc)); esl_strdup(msa->acc, -1, &(new->acc)); esl_strdup(msa->au, -1, &(new->au)); esl_strdup(msa->ss_cons, -1, &(new->ss_cons)); esl_strdup(msa->sa_cons, -1, &(new->sa_cons)); esl_strdup(msa->pp_cons, -1, &(new->pp_cons)); esl_strdup(msa->rf, -1, &(new->rf)); esl_strdup(msa->mm, -1, &(new->mm)); if (msa->sqacc != NULL) { ESL_ALLOC(new->sqacc, sizeof(char **) * new->sqalloc); for (i = 0; i < msa->nseq; i++) esl_strdup(msa->sqacc[i], -1, &(new->sqacc[i])); for ( ; i < new->sqalloc; i++) new->sqacc[i] = NULL; } if (msa->sqdesc != NULL) { ESL_ALLOC(new->sqdesc, sizeof(char **) * new->sqalloc); for (i = 0; i < msa->nseq; i++) esl_strdup(msa->sqdesc[i], -1, &(new->sqdesc[i])); for ( ; i < new->sqalloc; i++) new->sqdesc[i] = NULL; } if (msa->ss != NULL) { ESL_ALLOC(new->ss, sizeof(char **) * new->sqalloc); for (i = 0; i < msa->nseq; i++) esl_strdup(msa->ss[i], -1, &(new->ss[i])); for ( ; i < new->sqalloc; i++) new->ss[i] = NULL; } if (msa->sa != NULL) { ESL_ALLOC(new->sa, sizeof(char **) * msa->nseq); for (i = 0; i < msa->nseq; i++) esl_strdup(msa->sa[i], -1, &(new->sa[i])); for ( ; i < new->sqalloc; i++) new->sa[i] = NULL; } if (msa->pp != NULL) { ESL_ALLOC(new->pp, sizeof(char **) * msa->nseq); for (i = 0; i < msa->nseq; i++) esl_strdup(msa->pp[i], -1, &(new->pp[i])); for ( ; i < new->sqalloc; i++) new->pp[i] = NULL; } for (x = 0; x < eslMSA_NCUTS; x++) { new->cutoff[x] = msa->cutoff[x]; new->cutset[x] = msa->cutset[x]; } if (msa->ncomment > 0) { ESL_ALLOC(new->comment, sizeof(char **) * msa->ncomment); new->ncomment = msa->ncomment; new->alloc_ncomment = msa->ncomment; for (i = 0; i < msa->ncomment; i++) esl_strdup(msa->comment[i], -1, &(new->comment[i])); } if (msa->ngf > 0) { ESL_ALLOC(new->gf_tag, sizeof(char **) * msa->ngf); ESL_ALLOC(new->gf, sizeof(char **) * msa->ngf); new->ngf = msa->ngf; new->alloc_ngf = msa->ngf; for (i = 0; i < msa->ngf; i++) { esl_strdup(msa->gf_tag[i], -1, &(new->gf_tag[i])); esl_strdup(msa->gf[i], -1, &(new->gf[i])); } } if (msa->ngs > 0) { ESL_ALLOC(new->gs_tag, sizeof(char **) * msa->ngs); ESL_ALLOC(new->gs, sizeof(char ***) * msa->ngs); new->ngs = msa->ngs; for (i = 0; i < msa->ngs; i++) { ESL_ALLOC(new->gs[i], sizeof(char **) * msa->nseq); esl_strdup(msa->gs_tag[i], -1, &(new->gs_tag[i])); for (j = 0; j < msa->nseq; j++) esl_strdup(msa->gs[i][j], -1, &(new->gs[i][j])); } } if (msa->ngc > 0) { ESL_ALLOC(new->gc_tag, sizeof(char **) * msa->ngc); ESL_ALLOC(new->gc, sizeof(char **) * msa->ngc); new->ngc = msa->ngc; for (i = 0; i < msa->ngc; i++) { esl_strdup(msa->gc_tag[i], -1, &(new->gc_tag[i])); esl_strdup(msa->gc[i], -1, &(new->gc[i])); } } if (msa->ngr > 0) { ESL_ALLOC(new->gr_tag, sizeof(char **) * msa->ngr); ESL_ALLOC(new->gr, sizeof(char ***) * msa->ngr); new->ngr = msa->ngr; for (i = 0; i < msa->ngr; i++) { ESL_ALLOC(new->gr[i], sizeof(char **) * msa->nseq); esl_strdup(msa->gr_tag[i], -1, &(new->gr_tag[i])); for (j = 0; j < msa->nseq; j++) esl_strdup(msa->gr[i][j], -1, &(new->gr[i][j])); } } #ifdef eslAUGMENT_KEYHASH esl_keyhash_Destroy(new->index); new->index = NULL; esl_keyhash_Destroy(new->gs_idx); new->gs_idx = NULL; esl_keyhash_Destroy(new->gc_idx); new->gc_idx = NULL; esl_keyhash_Destroy(new->gr_idx); new->gr_idx = NULL; if (msa->index != NULL) new->index = esl_keyhash_Clone(msa->index); if (msa->gs_idx != NULL) new->gs_idx = esl_keyhash_Clone(msa->gs_idx); if (msa->gc_idx != NULL) new->gc_idx = esl_keyhash_Clone(msa->gc_idx); if (msa->gr_idx != NULL) new->gr_idx = esl_keyhash_Clone(msa->gr_idx); #endif #ifdef eslAUGMENT_SSI new->offset = msa->offset; #endif return eslOK; ERROR: return status; } /* Function: esl_msa_Clone() * Synopsis: Duplicates an MSA. * * Purpose: Make a duplicate of , in newly * allocated space. * * Returns: a pointer to the newly allocated clone. * Caller is responsible for free'ing it. * * Throws: on allocation error. */ ESL_MSA * esl_msa_Clone(const ESL_MSA *msa) { ESL_MSA *nw = NULL; int status; #ifdef eslAUGMENT_ALPHABET if (msa->flags & eslMSA_DIGITAL) { if ((nw = esl_msa_CreateDigital(msa->abc, msa->nseq, msa->alen)) == NULL) return NULL; } else #endif if ((nw = esl_msa_Create(msa->nseq, msa->alen)) == NULL) return NULL; if ((status = esl_msa_Copy(msa, nw) ) != eslOK) goto ERROR; return nw; ERROR: esl_msa_Destroy(nw); return NULL; } /* Function: esl_msa_Destroy() * Synopsis: Frees an . * * Purpose: Destroys . * * Xref: squid's MSADestroy(). */ void esl_msa_Destroy(ESL_MSA *msa) { if (msa == NULL) return; if (msa->aseq != NULL) esl_Free2D((void **) msa->aseq, msa->nseq); #ifdef eslAUGMENT_ALPHABET if (msa->ax != NULL) esl_Free2D((void **) msa->ax, msa->nseq); #endif /*eslAUGMENT_ALPHABET*/ esl_Free2D((void **) msa->sqname, msa->nseq); esl_Free2D((void **) msa->sqacc, msa->nseq); esl_Free2D((void **) msa->sqdesc, msa->nseq); esl_Free2D((void **) msa->ss, msa->nseq); esl_Free2D((void **) msa->sa, msa->nseq); esl_Free2D((void **) msa->pp, msa->nseq); if (msa->sqlen != NULL) free(msa->sqlen); if (msa->wgt != NULL) free(msa->wgt); if (msa->name != NULL) free(msa->name); if (msa->desc != NULL) free(msa->desc); if (msa->acc != NULL) free(msa->acc); if (msa->au != NULL) free(msa->au); if (msa->ss_cons != NULL) free(msa->ss_cons); if (msa->sa_cons != NULL) free(msa->sa_cons); if (msa->pp_cons != NULL) free(msa->pp_cons); if (msa->rf != NULL) free(msa->rf); if (msa->mm != NULL) free(msa->mm); if (msa->sslen != NULL) free(msa->sslen); if (msa->salen != NULL) free(msa->salen); if (msa->pplen != NULL) free(msa->pplen); esl_Free2D((void **) msa->comment, msa->ncomment); esl_Free2D((void **) msa->gf_tag, msa->ngf); esl_Free2D((void **) msa->gf, msa->ngf); esl_Free2D((void **) msa->gs_tag, msa->ngs); esl_Free3D((void ***)msa->gs, msa->ngs, msa->nseq); esl_Free2D((void **) msa->gc_tag, msa->ngc); esl_Free2D((void **) msa->gc, msa->ngc); esl_Free2D((void **) msa->gr_tag, msa->ngr); esl_Free3D((void ***)msa->gr, msa->ngr, msa->nseq); #ifdef eslAUGMENT_KEYHASH esl_keyhash_Destroy(msa->index); esl_keyhash_Destroy(msa->gs_idx); esl_keyhash_Destroy(msa->gc_idx); esl_keyhash_Destroy(msa->gr_idx); #endif /* keyhash augmentation */ free(msa); return; } /* msa_create_mostly() * * This is the routine called by esl_msa_Create() and esl_msa_CreateDigital() * that does all allocation except the aseq/ax alignment data. * * may be the exact known # of seqs in an alignment; or * may be an allocation block size (to be expanded by doubling, in * esl_msa_Expand(), as in: * nseq == msa->sqalloc) esl_msa_Expand(msa);> * should not be 0. * * may be the exact length of an alignment, in columns; or it * may be -1, which states that your parser will take responsibility * for expanding as needed as new input is read into a growing new * alignment. * * A created can only be <_Expand()>'ed if is -1. * * Args: - number of sequences, or nseq allocation blocksize * - length of alignment in columns, or -1 * * Returns: pointer to new MSA object, w/ all values initialized. * Note that msa->nseq is initialized to 0 here, even though space * is allocated. * * Throws: on allocation failure. */ static ESL_MSA * msa_create_mostly(int nseq, int64_t alen) { int status; ESL_MSA *msa = NULL; int i; ESL_ALLOC(msa, sizeof(ESL_MSA)); msa->aseq = NULL; msa->sqname = NULL; msa->wgt = NULL; msa->alen = alen; /* if -1, then we're growable. */ msa->nseq = 0; /* our caller (text or digital allocation) sets this. */ msa->flags = 0; #ifdef eslAUGMENT_ALPHABET msa->abc = NULL; msa->ax = NULL; #endif /*eslAUGMENT_ALPHABET*/ msa->name = NULL; msa->desc = NULL; msa->acc = NULL; msa->au = NULL; msa->ss_cons = NULL; msa->sa_cons = NULL; msa->pp_cons = NULL; msa->rf = NULL; msa->mm = NULL; msa->sqacc = NULL; msa->sqdesc = NULL; msa->ss = NULL; msa->sa = NULL; msa->pp = NULL; for (i = 0; i < eslMSA_NCUTS; i++) { msa->cutoff[i] = 0.; msa->cutset[i] = FALSE; } msa->sqalloc = nseq; msa->sqlen = NULL; msa->sslen = NULL; msa->salen = NULL; msa->pplen = NULL; msa->lastidx = 0; /* Unparsed markup, including comments and Stockholm tags. * GS, GC, and GR Stockholm tags require keyhash augmentation */ msa->comment = NULL; msa->ncomment = 0; msa->alloc_ncomment = 0; msa->gf_tag = NULL; msa->gf = NULL; msa->ngf = 0; msa->alloc_ngf = 0; msa->gs_tag = NULL; msa->gs = NULL; msa->ngs = 0; msa->gc_tag = NULL; msa->gc = NULL; msa->ngc = 0; msa->gr_tag = NULL; msa->gr = NULL; msa->ngr = 0; #ifdef eslAUGMENT_KEYHASH msa->index = esl_keyhash_Create(); msa->gs_idx = NULL; msa->gc_idx = NULL; msa->gr_idx = NULL; #endif /*eslAUGMENT_KEYHASH*/ #ifdef eslAUGMENT_SSI msa->offset = 0; #endif /* Allocation, round 2. */ if(nseq > 0) { ESL_ALLOC(msa->sqname, sizeof(char *) * nseq); ESL_ALLOC(msa->wgt, sizeof(double) * nseq); ESL_ALLOC(msa->sqlen, sizeof(int64_t)* nseq); } /* Initialize at the second level. */ for (i = 0; i < nseq; i++) { msa->sqname[i] = NULL; msa->sqlen[i] = 0; msa->wgt[i] = -1.0; /* "unset so far" */ } return msa; ERROR: esl_msa_Destroy(msa); return NULL; } /*------------------- end, ESL_MSA object -----------------------*/ /***************************************************************** *# 2. Digital mode MSA's (augmentation: alphabet) *****************************************************************/ #ifdef eslAUGMENT_ALPHABET /* Function: esl_msa_GuessAlphabet() * Synopsis: Guess alphabet of MSA. * * Purpose: Guess whether the sequences in the are * , , or , and return * that guess in <*ret_type>. * * The determination is made based on the classifications * of the individual sequences in the alignment. At least * one sequence must contain ten residues or more to be * classified. If one or more sequences is called * and one or more is called /, * the alignment's alphabet is considered to be * indeterminate (). If some sequences are * and some are , the alignment is called * ; this should cause no problems, because Easel * reads U as a synonym for T in DNA sequence anyway. * * Tested on Pfam 21.0 and Rfam 7.0, this routine correctly * classified all 8957 Pfam alignments as protein, and 503 * Rfam alignments as RNA (both seed and full alignments). * * Returns: on success, and <*ret_type> is set * to , , or . * * Returns and sets <*ret_type> to * if the alphabet cannot be reliably guessed. * * Xref: J1/62 */ int esl_msa_GuessAlphabet(const ESL_MSA *msa, int *ret_type) { int64_t namino = 0, ndna = 0, nrna = 0, nunknown = 0; int type; int i,x; int64_t j,n; int64_t ct[26]; if (msa->flags & eslMSA_DIGITAL) { *ret_type = msa->abc->type; return eslOK; } *ret_type = eslUNKNOWN; /* On wide alignments, we're better off looking at individual sequence * classifications. We don't want to end up calling the whole alignment * indeterminate just because a few sequences have degenerate residue * codes. */ for (i = 0; i < msa->nseq; i++) { for (x = 0; x < 26; x++) ct[x] = 0; for (n = 0, j = 0; j < msa->alen; j++) { x = toupper(msa->aseq[i][j]) - 'A'; if (x < 0 || x > 25) continue; ct[x]++; n++; if (n > 10000) break; /* ought to know by now */ } esl_abc_GuessAlphabet(ct, &type); switch (type) { case eslAMINO: namino++; break; case eslDNA: ndna++; break; case eslRNA: nrna++; break; default: nunknown++; } } if (namino > 0 && (ndna+nrna) == 0) *ret_type = eslAMINO; else if (ndna > 0 && (nrna+namino) == 0) *ret_type = eslDNA; else if (nrna > 0 && (ndna+namino) == 0) *ret_type = eslRNA; else if (ndna+nrna > 0 && namino == 0) *ret_type = eslDNA; /* On narrow alignments, no single sequence may be long enough to * be classified, but we can determine alphabet from composition * of the complete alignment. Of course, degenerate residue codes in * a DNA alignment will still screw us. */ if (*ret_type == eslUNKNOWN) { n = 0; for (x = 0; x < 26; x++) ct[x] = 0; for (i = 0; i < msa->nseq; i++) { for (j = 0; j < msa->alen; j++) { x = toupper(msa->aseq[i][j]) - 'A'; if (x < 0 || x > 26) continue; ct[x]++; n++; if (n > 10000) break; /* ought to know by now */ } if (n > 10000) break; } esl_abc_GuessAlphabet(ct, ret_type); } if (*ret_type == eslUNKNOWN) return eslENOALPHABET; else return eslOK; } /* Function: esl_msa_CreateDigital() * Synopsis: Create a digital . * * Purpose: Same as , except the returned MSA is configured * for a digital alignment using internal alphabet , instead of * a text alignment. * * Internally, this means the field is allocated instead of * the field, and the flag is raised. * * Args: - number of sequences, or nseq allocation blocksize * - length of alignment in columns, or -1 * * Returns: pointer to new MSA object, w/ all values initialized. * Note that nseq> is initialized to 0, even though space * is allocated. * * Throws: NULL on allocation failure. * * Xref: squid's MSAAlloc() */ ESL_MSA * esl_msa_CreateDigital(const ESL_ALPHABET *abc, int nseq, int64_t alen) { int status; ESL_MSA *msa; int i; msa = msa_create_mostly(nseq, alen); /* aseq is null upon successful return */ if (msa == NULL) return NULL; /* already threw error in mostly_create, so percolate */ ESL_ALLOC(msa->ax, sizeof(ESL_DSQ *) * msa->sqalloc); for (i = 0; i < msa->sqalloc; i++) msa->ax[i] = NULL; if (alen != -1) { for (i = 0; i < nseq; i++) { ESL_ALLOC(msa->ax[i], sizeof(ESL_DSQ) * (alen+2)); msa->ax[i][0] = msa->ax[i][alen+1] = eslDSQ_SENTINEL; /* help the poor */ } msa->nseq = nseq; } msa->abc = (ESL_ALPHABET *) abc; /* this cast away from const-ness is deliberate & safe. */ msa->flags |= eslMSA_DIGITAL; return msa; ERROR: esl_msa_Destroy(msa); return NULL; } /* Function: esl_msa_Digitize() * Synopsis: Digitizes an msa, converting it from text mode. * * Purpose: Given an alignment in text mode, convert it to * digital mode, using alphabet . * * Internally, the digital alignment field is filled, * the text alignment field is destroyed and free'd, * a copy of the alphabet pointer is kept in the msa's * reference, and the flag is raised * in . * * Because may be called on * unvalidated user data, may be passed, for * capturing an informative error message. For example, in * reading alignments from files, invalid characters in the * alignment are caught at the digitization step. * * Args: abc - digital alphabet * msa - multiple alignment to digitize * errbuf - optional: error message buffer, or * * Returns: on success; * if one or more sequences contain invalid characters * that can't be digitized. If this happens, the is returned * unaltered - left in text mode, with as it was. (This is * a normal error, because aseq> may be user input that we * haven't validated yet.) * * Throws: on allocation failure; in this case, state of may be * wedged, and it should only be destroyed, not used. */ int esl_msa_Digitize(const ESL_ALPHABET *abc, ESL_MSA *msa, char *errbuf) { char errbuf2[eslERRBUFSIZE]; int i; int status; /* Contract checks */ if (msa->aseq == NULL) ESL_EXCEPTION(eslEINVAL, "msa has no text alignment"); if (msa->ax != NULL) ESL_EXCEPTION(eslEINVAL, "msa already has digital alignment"); if (msa->flags & eslMSA_DIGITAL) ESL_EXCEPTION(eslEINVAL, "msa is flagged as digital"); /* Validate before we convert. Then we can leave the untouched if * any of the sequences contain invalid characters. */ for (i = 0; i < msa->nseq; i++) if (esl_abc_ValidateSeq(abc, msa->aseq[i], msa->alen, errbuf2) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "%s: %s", msa->sqname[i], errbuf2); /* Convert, sequence-by-sequence, free'ing aseq as we go. */ ESL_ALLOC(msa->ax, msa->sqalloc * sizeof(ESL_DSQ *)); for (i = 0; i < msa->nseq; i++) { ESL_ALLOC(msa->ax[i], (msa->alen+2) * sizeof(ESL_DSQ)); status = esl_abc_Digitize(abc, msa->aseq[i], msa->ax[i]); if (status != eslOK) goto ERROR; free(msa->aseq[i]); } for (; i < msa->sqalloc; i++) msa->ax[i] = NULL; free(msa->aseq); msa->aseq = NULL; msa->abc = (ESL_ALPHABET *) abc; /* convince compiler that removing const-ness is safe */ msa->flags |= eslMSA_DIGITAL; return eslOK; ERROR: return status; } /* Function: esl_msa_Textize() * Synopsis: Convert a digital msa to text mode. * * Purpose: Given an alignment in digital mode, convert it * to text mode. * * Internally, the text alignment field is filled, the * digital alignment field is destroyed and free'd, the * msa's digital alphabet reference is nullified, and * the flag is dropped in . * * Args: msa - multiple alignment to convert to text * * Returns: on success. * * Throws: on allocation failure. * if one or more of the digitized alignment strings * contain invalid characters. */ int esl_msa_Textize(ESL_MSA *msa) { int status; int i; /* Contract checks */ if (msa->ax == NULL) ESL_EXCEPTION(eslEINVAL, "msa has no digital alignment"); if (msa->aseq != NULL) ESL_EXCEPTION(eslEINVAL, "msa already has text alignment"); if (! (msa->flags & eslMSA_DIGITAL)) ESL_EXCEPTION(eslEINVAL, "msa is not flagged as digital"); if (msa->abc == NULL) ESL_EXCEPTION(eslEINVAL, "msa has no digital alphabet"); /* Convert, sequence-by-sequence, free'ing ax as we go. */ ESL_ALLOC(msa->aseq, msa->sqalloc * sizeof(char *)); for (i = 0; i < msa->nseq; i++) { ESL_ALLOC(msa->aseq[i], (msa->alen+1) * sizeof(char)); status = esl_abc_Textize(msa->abc, msa->ax[i], msa->alen, msa->aseq[i]); if (status != eslOK) goto ERROR; free(msa->ax[i]); } for (; i < msa->sqalloc; i++) msa->aseq[i] = NULL; free(msa->ax); msa->ax = NULL; msa->abc = NULL; /* nullify reference (caller still owns real abc) */ msa->flags &= ~eslMSA_DIGITAL; /* drop the flag */ return eslOK; ERROR: return status; } /* Function: esl_msa_ConvertDegen2X() * Synopsis: Convert all degenerate residues to X/N * * Purpose: Convert all the degenerate residue codes in digital * MSA to the code for "unknown residue" (maximum * degeneracy); for example, X for protein, N for * nucleic acid. * * This is handy when you need to be compatible with * software that can't deal with unusual residue codes. * For example, WU-BLAST can't deal with O (pyrrolysine) * codes. * * Returns: on success. * * Throws: if isn't in digital mode. * (We only know how to interpret the alphabet in digital * mode. In text mode, letters are just letters.) */ int esl_msa_ConvertDegen2X(ESL_MSA *msa) { int i; int status; if (! (msa->flags & eslMSA_DIGITAL)) ESL_EXCEPTION(eslEINVAL, "esl_msa_ConvertDegen2X only works on digital sequences"); for (i = 0; i < msa->nseq; i++) if ((status = esl_abc_ConvertDegen2X(msa->abc, msa->ax[i])) != eslOK) return status; return eslOK; } #endif /* eslAUGMENT_ALPHABET */ /*---------------------- end of digital MSA functions -----------------------*/ /***************************************************************** *# 3. Setting, checking data fields in an ESL_MSA *****************************************************************/ /* These get used by parsers, which might be using an ESL_BUFFER. * They need to handle either NUL-terminated strings or memory lines. */ /* Function: esl_msa_SetName() * Synopsis: Set name of an MSA. * * Purpose: Sets the name of the msa to string , * of length . * * If is a NUL-terminated string, is optional; if * the length is unknown, pass . may also be a * memory line, non-NUL terminated, in which case is * required. * * can also be because the MSA name is an * optional field. (In this case, is irrelevant and * ignored.) * * Returns: on success. * * Throws: on allocation error. */ int esl_msa_SetName(ESL_MSA *msa, const char *s, esl_pos_t n) { if (msa->name) free(msa->name); if (n > 0) return esl_memstrdup(s, n, &(msa->name)); else return esl_strdup( s, -1, &(msa->name)); } /* Function: esl_msa_SetDesc() * Synopsis: Set the description line of an MSA. * * Purpose: Sets the optional description line of the msa to * string of length . * * If is a NUL-terminated string, is optional; if * the length is unknown, pass . may also be a * memory line, non-NUL terminated, in which case is * required. * * can also be because the MSA description is an * optional field. (In this case, is irrelevant and * ignored.) * * Returns: on success. * * Throws: on allocation error. */ int esl_msa_SetDesc(ESL_MSA *msa, const char *s, esl_pos_t n) { if (msa->desc) free(msa->desc); if (n > 0) return esl_memstrdup(s, n, &(msa->desc)); else return esl_strdup( s, -1, &(msa->desc)); } /* Function: esl_msa_SetAccession() * Synopsis: Set the accession field of an MSA. * * Purpose: Sets accession field of the msa to string of * length . * * If is a NUL-terminated string, is optional; if * the length is unknown, pass . may also be a * memory line, non-NUL terminated, in which case is * required. * * can also be because the MSA accession is an * optional field. (In this case, is irrelevant and * ignored.) * * Returns: on success. * * Throws: on allocation error. */ int esl_msa_SetAccession(ESL_MSA *msa, const char *s, esl_pos_t n) { if (msa->acc) free(msa->acc); if (n > 0) return esl_memstrdup(s, n, &(msa->acc)); else return esl_strdup( s, -1, &(msa->acc)); } /* Function: esl_msa_SetAuthor() * Synopsis: Set the author string in an MSA. * * Purpose: Sets the author string in to string of * length . * * If is a NUL-terminated string, is optional; if * the length is unknown, pass . may also be a * memory line, non-NUL terminated, in which case is * required. * * can also be because the MSA author is an * optional field. (In this case, is irrelevant and * ignored.) * * Returns: on success. * * Throws: on allocation error. */ int esl_msa_SetAuthor(ESL_MSA *msa, const char *s, esl_pos_t n) { if (msa->au) free(msa->au); if (n > 0) return esl_memstrdup(s, n, &(msa->au)); else return esl_strdup( s, -1, &(msa->au)); } /* Function: esl_msa_SetSeqName() * Synopsis: Set an individual sequence name in an MSA. * * Purpose: Set the name of sequence number in * to string of length . * * If is a NUL-terminated string, is optional; if * the length is unknown, pass . may also be a * memory line, non-NUL terminated, in which case is * required. * * Returns: on success. * * Throws: on allocation error. * on coding errors. * * Note: msa->sqname[] is not optional, so we may * rely on it already being allocated for * i=0..sqalloc-1. */ int esl_msa_SetSeqName(ESL_MSA *msa, int idx, const char *s, esl_pos_t n) { if (idx >= msa->sqalloc) ESL_EXCEPTION(eslEINCONCEIVABLE, "no such sequence %d (only %d allocated)", idx, msa->sqalloc); if (s == NULL) ESL_EXCEPTION(eslEINCONCEIVABLE, "seq names are mandatory; NULL is not a valid name"); if (msa->sqname[idx]) free(msa->sqname[idx]); if (n > 0) return esl_memstrdup(s, n, &(msa->sqname[idx])); else return esl_strdup( s, -1, &(msa->sqname[idx])); } /* Function: esl_msa_SetSeqAccession() * Synopsis: Sets individual sequence accession in an MSA. * * Purpose: Set the accession of sequence number in to * string of length . * * If is a NUL-terminated string, is optional; if * the length is unknown, pass . may also be a * memory line, non-NUL terminated, in which case is * required. * * can also be because a seq accession is an * optional field. (In this case, is irrelevant and * ignored.) * * Returns: on success. * * Throws: on allocation error. * on coding errors. */ int esl_msa_SetSeqAccession(ESL_MSA *msa, int idx, const char *s, esl_pos_t n) { int i; int status; if (idx >= msa->sqalloc) ESL_EXCEPTION(eslEINCONCEIVABLE, "no such sequence %d (only %d allocated)", idx, msa->sqalloc); if (msa->sqacc && msa->sqacc[idx]) { free(msa->sqacc[idx]); msa->sqacc[idx] = NULL; } /* erasure case */ if (! s) { for (i = 0; i < msa->sqalloc; i++) if (msa->sqacc[idx]) break; if (i == msa->sqalloc) { free(msa->sqacc); msa->sqacc = NULL; } return eslOK; } /* Allocate/initialize the optional sqacc array, if it's not already done: */ if (! msa->sqacc) { ESL_ALLOC(msa->sqacc, sizeof(char *) * msa->sqalloc); for (i = 0; i < msa->sqalloc; i++) msa->sqacc[i] = NULL; } if (n > 0) status = esl_memstrdup(s, n, &(msa->sqacc[idx])); else status = esl_strdup( s, -1, &(msa->sqacc[idx])); return status; ERROR: return status; } /* Function: esl_msa_SetSeqDescription() * Synopsis: Sets individual sequence description in an MSA. * * Purpose: Set the description of sequence number in to * string of length . * * If is a NUL-terminated string, is optional; if * the length is unknown, pass . may also be a * memory line, non-NUL terminated, in which case is * required. * * can also be because a seq accession is an * optional field. (In this case, is irrelevant and * ignored.) * * Returns: on success. * * Throws: on allocation error. * on coding error */ int esl_msa_SetSeqDescription(ESL_MSA *msa, int idx, const char *s, esl_pos_t n) { int i; int status; if (idx >= msa->sqalloc) ESL_EXCEPTION(eslEINCONCEIVABLE, "no such sequence %d (only %d allocated)", idx, msa->sqalloc); if (msa->sqdesc && msa->sqdesc[idx]) { free(msa->sqdesc[idx]); msa->sqdesc[idx] = NULL; } /* erasure case */ if (! s) { for (i = 0; i < msa->sqalloc; i++) if (msa->sqdesc[idx]) break; if (i == msa->sqalloc) { free(msa->sqdesc); msa->sqdesc = NULL; } return eslOK; } /* Allocate/initialize the optional sqdesc array, if it's not already done: */ if (msa->sqdesc == NULL) { ESL_ALLOC(msa->sqdesc, sizeof(char *) * msa->sqalloc); for (i = 0; i < msa->sqalloc; i++) msa->sqdesc[i] = NULL; } if (n > 0) status = esl_memstrdup(s, n, &(msa->sqdesc[idx])); else status = esl_strdup( s, -1, &(msa->sqdesc[idx])); ERROR: return status; } /* Function: esl_msa_SetDefaultWeights() * Synopsis: Set all sequence weights to default 1.0. * * Purpose: Set all the sequence weights in to default, * 1.0. Drop the flag in flags>. * * The data structure has its values * initialized to -1.0, by create and expand functions, as * a special value for "unset yet". File format parsers use * this to tell when a weight is mistakenly set twice, or * not at all. However, when an is used, you're * allowed to assume that is valid even if the * flag is down. So all creators of new * MSAs (file format parsers, for example) must assure that * wgt> is set correctly, even if the file format * doesn't include weights. This function gives parsers * (and other MSA creators) a quick way to do this. */ int esl_msa_SetDefaultWeights(ESL_MSA *msa) { int idx; for (idx = 0; idx < msa->nseq; idx++) msa->wgt[idx] = 1.0; msa->flags &= ~eslMSA_HASWGTS; return eslOK; } /* Function: esl_msa_FormatName() * Synopsis: Format name of an MSA, printf()-style. * * Purpose: Sets the name of the msa using , where * is a -style format with * arguments; for example, . * * can be , because the MSA name is an * optional field; in which case any existing name in * the is erased. * * Returns: on success. * * Throws: on allocation error; * if a <*printf()> library call fails. */ int esl_msa_FormatName(ESL_MSA *msa, const char *name, ...) { va_list ap; int status; if (msa->name != NULL) free(msa->name); if (name == NULL) { msa->name = NULL; return eslOK; } va_start(ap, name); status = esl_vsprintf(&(msa->name), name, &ap); va_end(ap); return status; } /* Function: esl_msa_FormatDesc() * Synopsis: Format the description line of an MSA, printf()-style. * * Purpose: Format the description line of the msa using . * where is a -style format with * arguments. * For example, . * * As a special case, may be , to facilitate * handling of optional annotation. * * Returns: on success. * * Throws: on allocation error; * if a <*printf()> library call fails. */ int esl_msa_FormatDesc(ESL_MSA *msa, const char *desc, ...) { va_list ap; int status; if (msa->desc != NULL) free(msa->desc); va_start(ap, desc); status = esl_vsprintf(&(msa->desc), desc, &ap); va_end(ap); return status; } /* Function: esl_msa_FormatAccession() * Synopsis: Format the accession number of an MSA, printf()-style. * * Purpose: Sets accession number of the msa using , * where is a -style format with arguments. * For example, . * * As a special case, may be , to facilitate * handling of optional annotation. * * Returns: on success. * * Throws: on allocation error; * if a <*printf()> library call fails. */ int esl_msa_FormatAccession(ESL_MSA *msa, const char *acc, ...) { va_list ap; int status; if (msa->acc != NULL) free(msa->acc); va_start(ap, acc); status = esl_vsprintf(&(msa->acc), acc, &ap); va_end(ap); return status; } /* Function: esl_msa_FormatAuthor() * Synopsis: Format the author string in an MSA, printf()-style. * * Purpose: Sets the author string in , using an string * and arguments in same format as would take. * * As a special case, may be , to facilitate * handling of optional annotation. * * Returns: on success. * * Throws: on allocation error; * if a <*printf()> library call fails. */ int esl_msa_FormatAuthor(ESL_MSA *msa, const char *author, ...) { va_list ap; int status; if (msa->au != NULL) free(msa->au); va_start(ap, author); status = esl_vsprintf(&(msa->au), author, &ap); va_end(ap); return status; } /* Function: esl_msa_FormatSeqName() * Synopsis: Formats an individual sequence name in an MSA, printf()-style. * * Purpose: Set the name of sequence number in * to , where is a * style format and arguments. * * Returns: on success. * * Throws: if is ; * on allocation error; * if a <*printf()> library call fails. * * Note: msa->sqname[] is not optional, so we may * rely on it already being allocated for * i=0..sqalloc-1. */ int esl_msa_FormatSeqName(ESL_MSA *msa, int idx, const char *name, ...) { va_list ap; int status; if (idx >= msa->sqalloc) ESL_EXCEPTION(eslEINVAL, "no such sequence %d (only %d allocated)", idx, msa->sqalloc); if (name == NULL) ESL_EXCEPTION(eslEINVAL, "seq names are mandatory; NULL is not a valid name"); if (msa->sqname[idx] != NULL) free(msa->sqname[idx]); va_start(ap, name); status = esl_vsprintf(&(msa->sqname[idx]), name, &ap); va_end(ap); return status; } /* Function: esl_msa_FormatSeqAccession() * Synopsis: Format individual sequence accession in an MSA, printf()-style. * * Purpose: Set the accession of sequence number in to * , where is a style format and * arguments. * * Returns: on success. * * Throws: on allocation error; * if a <*printf()> library call fails. */ int esl_msa_FormatSeqAccession(ESL_MSA *msa, int idx, const char *acc, ...) { va_list ap; int i; int status; if (idx >= msa->sqalloc) ESL_EXCEPTION(eslEINVAL, "no such sequence %d (only %d allocated)", idx, msa->sqalloc); if (acc == NULL) { if (msa->sqacc != NULL) { free(msa->sqacc[idx]); msa->sqacc[idx] = NULL; } return eslOK; } /* Allocate/initialize the optional sqacc array, if it's not already done: */ if (msa->sqacc == NULL) { ESL_ALLOC(msa->sqacc, sizeof(char *) * msa->sqalloc); for (i = 0; i < msa->sqalloc; i++) msa->sqacc[i] = NULL; } if (msa->sqacc[idx] != NULL) free(msa->sqacc[idx]); va_start(ap, acc); status = esl_vsprintf(&(msa->sqacc[idx]), acc, &ap); va_end(ap); return status; ERROR: return status; } /* Function: esl_msa_FormatSeqDescription() * Synopsis: Formats individual sequence description in an MSA, printf()-style. * * Purpose: Set the description of sequence number in to * , where may be a style format and * arguments. * * Returns: on success. * * Throws: on allocation error; * if a <*printf()> library call fails. */ int esl_msa_FormatSeqDescription(ESL_MSA *msa, int idx, const char *desc, ...) { va_list ap; int i; int status; if (idx >= msa->sqalloc) ESL_EXCEPTION(eslEINVAL, "no such sequence %d (only %d allocated)", idx, msa->sqalloc); if (desc == NULL) { if (msa->sqdesc != NULL) { free(msa->sqdesc[idx]); msa->sqdesc[idx] = NULL; } return eslOK; } /* Allocate/initialize the optional sqdesc array, if it's not already done: */ if (msa->sqdesc == NULL) { ESL_ALLOC(msa->sqdesc, sizeof(char *) * msa->sqalloc); for (i = 0; i < msa->sqalloc; i++) msa->sqdesc[i] = NULL; } if (msa->sqdesc[idx] != NULL) free(msa->sqdesc[idx]); va_start(ap, desc); status = esl_vsprintf(&(msa->sqdesc[idx]), desc, &ap); va_end(ap); return status; ERROR: return status; } /* Function: esl_msa_AddComment() * Synopsis: Add an unparsed command to an * * Purpose: Add an (unparsed) comment line to the MSA structure, * allocating as necessary. * * Args: msa - a multiple alignment * p - comment line to add * n - length of

, or -1 if

is a NUL-terminated string and length is unknown. * * Returns: on success. * * Throws: on allocation failure. */ int esl_msa_AddComment(ESL_MSA *msa, char *p, esl_pos_t n) { int status; if (n == -1) n = strlen(p); /* If this is our first recorded comment, we need to allocate; * and if we've filled available space, we need to reallocate. */ if (msa->comment == NULL) { ESL_ALLOC(msa->comment, sizeof(char *) * 16); msa->alloc_ncomment = 16; } if (msa->ncomment == msa->alloc_ncomment) { ESL_REALLOC(msa->comment, sizeof(char *) * msa->alloc_ncomment * 2); msa->alloc_ncomment *= 2; } if ((status = esl_memstrdup(p, n, &(msa->comment[msa->ncomment]))) != eslOK) goto ERROR; msa->ncomment++; return eslOK; ERROR: return status; } /* Function: esl_msa_AddGF() * Synopsis: Add an unparsed #=GF markup line to an * * Purpose: Add an unparsed \verb+#=GF+ markup line to the MSA, * allocating as necessary. is the GF markup * tag; is the text associated w/ that tag. * * Args: msa - a multiple alignment * tag - markup tag * taglen - length of ; or -1 if is a string of unknown length * value - markup text * vlen - length of ; or -1 if is a string of unknown length * * Returns: on success. * * Throws: on allocation failure. */ int esl_msa_AddGF(ESL_MSA *msa, char *tag, esl_pos_t taglen, char *value, esl_pos_t vlen) { int n; int status; if (taglen == -1) taglen = strlen(tag); if (vlen == -1) vlen = strlen(value); /* Initialize or grow the allocation? */ if (msa->ngf == msa->alloc_ngf) { n = (msa->alloc_ngf == 0 ? 16 : msa->alloc_ngf * 2); ESL_REALLOC(msa->gf_tag, sizeof(char *) * n); ESL_REALLOC(msa->gf, sizeof(char *) * n); msa->alloc_ngf = n; } if ((status = esl_memstrdup(tag, taglen, &(msa->gf_tag[msa->ngf]))) != eslOK) goto ERROR; if ((status = esl_memstrdup(value, vlen, &(msa->gf[msa->ngf]))) != eslOK) goto ERROR; msa->ngf++; return eslOK; ERROR: return status; } /* Function: esl_msa_AddGS() * Synopsis: Add an unparsed #=GS markup line to an * * Purpose: Add an unparsed \verb+#=GS+ markup line to the MSA, * allocating as necessary. It's possible that we * could get more than one of the same type of GS * tag per sequence; for example, "DR PDB;" structure * links in Pfam. Hack: handle these by appending to * the string, in a \verb+\n+ separated fashion. * * Args: msa - multiple alignment structure * tag - markup tag (e.g. "AC") * taglen - length of ; or -1 if is a string of unknown length * sqidx - index of sequence to assoc markup with (0..nseq-1) * value - markup (e.g. "P00666") * vlen - length of ; or -1 if is string of unknown length * * Returns: on success. * * Throws: on allocation failure. */ int esl_msa_AddGS(ESL_MSA *msa, char *tag, esl_pos_t taglen, int sqidx, char *value, esl_pos_t vlen) { int tagidx; int i; int status; if (taglen == -1) taglen = strlen(tag); if (vlen == -1) vlen = strlen(value); /* first GS tag? init&allocate */ if (msa->gs_tag == NULL) { #ifdef eslAUGMENT_KEYHASH msa->gs_idx = esl_keyhash_Create(); status = esl_keyhash_Store(msa->gs_idx, tag, taglen, &tagidx); if (status != eslOK && status != eslEDUP) return status; ESL_DASSERT1((tagidx == 0)); #else tagidx = 0; #endif ESL_ALLOC(msa->gs_tag, sizeof(char *)); /* one at a time. */ ESL_ALLOC(msa->gs, sizeof(char **)); ESL_ALLOC(msa->gs[0], sizeof(char *) * msa->sqalloc); for (i = 0; i < msa->sqalloc; i++) msa->gs[0][i] = NULL; } else { /* Get a tagidx for this GS tag. * tagidx < ngs; we already saw this tag; * tagidx == ngs; this is a new one. */ #ifdef eslAUGMENT_KEYHASH status = esl_keyhash_Store(msa->gs_idx, tag, taglen, &tagidx); if (status != eslOK && status != eslEDUP) return status; #else for (tagidx = 0; tagidx < msa->ngs; tagidx++) if (esl_memstrcmp(tag, taglen, msa->gs_tag[tagidx])) break; #endif /* Reallocation (in blocks of 1) */ if (tagidx == msa->ngs ) { ESL_REALLOC(msa->gs_tag, (msa->ngs+1) * sizeof(char *)); ESL_REALLOC(msa->gs, (msa->ngs+1) * sizeof(char **)); msa->gs[tagidx] = NULL; ESL_ALLOC(msa->gs[tagidx], sizeof(char *) * msa->sqalloc); for (i = 0; i < msa->sqalloc; i++) msa->gs[tagidx][i] = NULL; } } /* Store the tag, if it's new. */ if (tagidx == msa->ngs) { if ((status = esl_memstrdup(tag, taglen, &(msa->gs_tag[tagidx]))) != eslOK) goto ERROR; msa->ngs++; } /* Store the annotation on the sequence. * If seq is unannotated, dup the value; if * seq already has a GS annotation, cat a \n, then cat the value. */ if (msa->gs[tagidx][sqidx] == NULL) { if ((status = esl_memstrdup(value, vlen, &(msa->gs[tagidx][sqidx]))) != eslOK) goto ERROR; } else { esl_pos_t n1,n2; n1 = strlen(msa->gs[tagidx][sqidx]); n2 = (vlen == -1 ? strlen(value) : vlen); ESL_REALLOC(msa->gs[tagidx][sqidx], sizeof(char) * (n1+n2+2)); /* +2 for \n, \0 */ msa->gs[tagidx][sqidx][n1] = '\n'; memcpy(msa->gs[tagidx][sqidx]+n1+1, value, n2); msa->gs[tagidx][sqidx][n1+n2+1] = '\0'; } return eslOK; ERROR: return status; } /* Function: esl_msa_AppendGC() * Synopsis: Add an unparsed #=GC markup line to an * * Purpose: Add an unparsed \verb+#=GC+ markup line to the MSA * structure, allocating as necessary. When called * multiple times for the same tag, appends value * strings together -- used when parsing multiblock * alignment files, for example. * * Args: msa - multiple alignment structure * tag - markup tag (e.g. "CS") * value - markup, one char per aligned column * * Returns: on success. * * Throws: on allocation failure. */ int esl_msa_AppendGC(ESL_MSA *msa, char *tag, char *value) { int tagidx; int status; void *p; /* Is this an unparsed tag name that we recognize? * If not, handle adding it to index, and reallocating * as needed. */ if (msa->gc_tag == NULL) /* first tag? init&allocate */ { #ifdef eslAUGMENT_KEYHASH msa->gc_idx = esl_keyhash_Create(); status = esl_keyhash_Store(msa->gc_idx, tag, -1, &tagidx); if (status != eslOK && status != eslEDUP) return status; ESL_DASSERT1((tagidx == 0)); #else tagidx = 0; #endif ESL_ALLOC(msa->gc_tag, sizeof(char **)); ESL_ALLOC(msa->gc, sizeof(char **)); msa->gc[0] = NULL; } else { /* new tag? */ /* get tagidx for this GC tag. existing tag: gc_idx, tag, -1, &tagidx); if (status != eslOK && status != eslEDUP) goto ERROR; #else for (tagidx = 0; tagidx < msa->ngc; tagidx++) if (strcmp(msa->gc_tag[tagidx], tag) == 0) break; #endif /* Reallocate, in block of one tag at a time */ if (tagidx == msa->ngc) { ESL_RALLOC(msa->gc_tag, p, (msa->ngc+1) * sizeof(char **)); ESL_RALLOC(msa->gc, p, (msa->ngc+1) * sizeof(char **)); msa->gc[tagidx] = NULL; } } /* new tag? store it. */ if (tagidx == msa->ngc) { if ((status = esl_strdup(tag, -1, &(msa->gc_tag[tagidx]))) != eslOK) goto ERROR; msa->ngc++; } return (esl_strcat(&(msa->gc[tagidx]), -1, value, -1)); ERROR: return status; } /* Function: esl_msa_AppendGR() * Synopsis: Add an unparsed #=GR markup line to an * * Purpose: Add an unparsed \verb+#=GR+ markup line to the MSA structure, * allocating as necessary. * * When called multiple times for the same tag, appends * value strings together -- used when parsing multiblock * alignment files, for example. * * Args: msa - multiple alignment structure * tag - markup tag (e.g. "SS") * sqidx - index of seq to assoc markup with (0..nseq-1) * value - markup, one char per aligned column * * Returns: on success. * * Throws: on allocation failure. */ int esl_msa_AppendGR(ESL_MSA *msa, char *tag, int sqidx, char *value) { void *p; int tagidx; int i; int status; if (msa->gr_tag == NULL) /* first tag? init&allocate */ { #ifdef eslAUGMENT_KEYHASH msa->gr_idx = esl_keyhash_Create(); status = esl_keyhash_Store(msa->gr_idx, tag, -1, &tagidx); if (status != eslOK && status != eslEDUP) return status; ESL_DASSERT1((tagidx == 0)); #else tagidx = 0; #endif ESL_ALLOC(msa->gr_tag, sizeof(char *)); ESL_ALLOC(msa->gr, sizeof(char **)); ESL_ALLOC(msa->gr[0], sizeof(char *) * msa->sqalloc); for (i = 0; i < msa->sqalloc; i++) msa->gr[0][i] = NULL; } else { /* get tagidx for this GR tag. existinggr_idx, tag, -1, &tagidx); if (status != eslOK && status != eslEDUP) return status; #else for (tagidx = 0; tagidx < msa->ngr; tagidx++) if (strcmp(msa->gr_tag[tagidx], tag) == 0) break; #endif /* if a new tag, realloc for it */ if (tagidx == msa->ngr) { ESL_RALLOC(msa->gr_tag, p, (msa->ngr+1) * sizeof(char *)); ESL_RALLOC(msa->gr, p, (msa->ngr+1) * sizeof(char **)); ESL_ALLOC(msa->gr[msa->ngr], sizeof(char *) * msa->sqalloc); for (i = 0; i < msa->sqalloc; i++) msa->gr[msa->ngr][i] = NULL; } } if (tagidx == msa->ngr) { if ((status = esl_strdup(tag, -1, &(msa->gr_tag[tagidx]))) != eslOK) goto ERROR; msa->ngr++; } return (esl_strcat(&(msa->gr[tagidx][sqidx]), -1, value, -1)); ERROR: return status; } /* Function: esl_msa_CheckUniqueNames() * Synopsis: Check if all seq names are unique. * * Purpose: Check whether all the sequence names in * are unique; if so, return , and if not, * return . * * Stockholm files require names to be unique. This * function lets us check whether we need to munge seqnames * before writing a Stockholm file. * * The check uses a keyhash, so it's efficient. * * Args: msa - alignment * * Returns: if names are unique. * if not. * * Throws: on allocation failure. */ int esl_msa_CheckUniqueNames(const ESL_MSA *msa) { ESL_KEYHASH *kh = NULL; int idx; int status = TRUE; if ((kh = esl_keyhash_Create()) == NULL) { status = eslEMEM; goto ERROR; } for (idx = 0; idx < msa->nseq; idx++) { status = esl_keyhash_Store(kh, msa->sqname[idx], -1, NULL); if (status == eslEDUP) { status = eslFAIL; break; } else if (status != eslOK) goto ERROR; } esl_keyhash_Destroy(kh); return status; ERROR: if (kh) esl_keyhash_Destroy(kh); return status; } /* msa_set_seq_ss() * * Set the secondary structure annotation for sequence number * in an alignment by copying the string . * * Returns: on success. * * Throws: on allocation failure. */ static int msa_set_seq_ss(ESL_MSA *msa, int seqidx, const char *ss) { int status; int i; if (msa->ss == NULL) { ESL_ALLOC(msa->ss, sizeof(char *) * msa->sqalloc); for (i = 0; i < msa->sqalloc; i++) msa->ss[i] = NULL; } if (msa->ss[seqidx] != NULL) free(msa->ss[seqidx]); return (esl_strdup(ss, -1, &(msa->ss[seqidx]))); ERROR: return status; } /* msa_set_seq_sa() * * Set the surface accessibility annotation for sequence number * in an alignment by copying the string . * * Returns: on success. * * Throws: on allocation failure. */ static int msa_set_seq_sa(ESL_MSA *msa, int seqidx, const char *sa) { int status; int i; if (msa->sa == NULL) { ESL_ALLOC(msa->sa, sizeof(char *) * msa->sqalloc); for (i = 0; i < msa->sqalloc; i++) msa->sa[i] = NULL; } if (msa->sa[seqidx] != NULL) free(msa->sa[seqidx]); return (esl_strdup(sa, -1, &(msa->sa[seqidx]))); ERROR: return status; } /* msa_set_seq_pp() * * Set the posterior probability annotation for sequence number * in an alignment by copying the string . * * Returns: on success. * * Throws: on allocation failure. */ static int msa_set_seq_pp(ESL_MSA *msa, int seqidx, const char *pp) { int status; int i; if (msa->pp == NULL) { ESL_ALLOC(msa->pp, sizeof(char *) * msa->sqalloc); for (i = 0; i < msa->sqalloc; i++) msa->pp[i] = NULL; } if (msa->pp[seqidx] != NULL) free(msa->pp[seqidx]); return (esl_strdup(pp, -1, &(msa->pp[seqidx]))); ERROR: return status; } /*---------- end of ESL_MSA field setting/checking --------------*/ /***************************************************************** *# 4. Miscellaneous functions for manipulating MSAs *****************************************************************/ static int64_t msa_get_rlen(const ESL_MSA *msa, int seqidx); static int msa_get_alibounds(const ESL_MSA *msa, int seqidx, int64_t *first, int64_t *last); /* Function: esl_msa_ReasonableRF() * Synopsis: Determine a reasonable #=RF line marking "consensus" columns. * * Purpose: Define an for the multiple alignment that * marks consensus columns with an 'x' (or the consensus * letter if useconsseq is TRUE), and non-consensus columns * with a '.'. * * Consensus columns are defined as columns with fractional * occupancy of $\geq$ in residues. For example, * if is 0.7, columns containing $\geq$ 70\% * residues are assigned as 'x' (or consensus letter) in the * , roughly speaking. "Roughly speaking", because the * fractional occupancy is in fact calculated as a weighted * frequency using sequence weights in wgt>, and because * missing data symbols are ignored in order to be able to * deal with sequence fragments. * * The greater is, the more stringent the * definition, and the fewer columns will be defined as * consensus. will define all columns as * consensus. will only define a column as * consensus if it contains no gap characters at all. * * If the caller wants to designate any sequences as * fragments, it must convert all leading and trailing gaps * to the missing data symbol '~'. * * For text mode alignments, any alphanumeric character is * considered to be a residue, and any non-alphanumeric * character is considered to be a gap. * * The is a NUL-terminated string, indexed * <0..alen-1>. * * The result can be rf>, if the caller * wants to set the own RF line; or it can be any * alternative storage provided by the caller. In either * case, the caller must provide allocated space for at * least alen+1> chars. * * Args: msa - MSA to define a consensus RF line for * symfrac - threshold for defining consensus columns * useconsseq - if FALSE, use x for a consensus position; else use the consensus letter * rfline - RESULT: string containing a letter for consensus position, . for not * * Returns: on success. * * Xref: HMMER p7_Fastmodelmaker() uses an essentially identical * calculation to define model architecture, and could be * rewritten now to use this function. * * A2M format alignment output uses this to define * consensus columns when #=RF annotation isn't available. */ int esl_msa_ReasonableRF(ESL_MSA *msa, double symfrac, int useconsseq, char *rfline) { int status; int apos; int idx; double r; double totwgt; float *counts; if (useconsseq) ESL_ALLOC(counts, msa->abc->K * sizeof(float)); #ifdef eslAUGMENT_ALPHABET if (msa->flags & eslMSA_DIGITAL) { for (apos = 1; apos <= msa->alen; apos++) { r = totwgt = 0.; esl_vec_FSet(counts, msa->abc->K, 0.0); for (idx = 0; idx < msa->nseq; idx++) { if (esl_abc_XIsResidue(msa->abc, msa->ax[idx][apos])) { r += msa->wgt[idx]; totwgt += msa->wgt[idx]; if (useconsseq) esl_abc_FCount(msa->abc, counts, msa->ax[idx][apos], msa->wgt[idx]); } else if (esl_abc_XIsGap(msa->abc, msa->ax[idx][apos])) totwgt += msa->wgt[idx]; else if (esl_abc_XIsMissing(msa->abc, msa->ax[idx][apos])) continue; } if (r > 0. && r / totwgt >= symfrac) { if (useconsseq) rfline[apos-1] = msa->abc->sym[esl_vec_FArgMax(counts, msa->abc->K)]; else rfline[apos-1] = 'x'; } else rfline[apos-1] = '.'; } } #endif if (! (msa->flags & eslMSA_DIGITAL)) { for (apos = 0; apos < msa->alen; apos++) { r = totwgt = 0.; for (idx = 0; idx < msa->nseq; idx++) { if (isalpha(msa->aseq[idx][apos])) { r += msa->wgt[idx]; totwgt += msa->wgt[idx]; if (useconsseq) esl_abc_FCount(msa->abc, counts, msa->abc->inmap[ (int) msa->aseq[idx][apos] ], msa->wgt[idx]); } else totwgt += msa->wgt[idx]; } if (r > 0. && r / totwgt >= symfrac) { if (useconsseq) rfline[apos-1] = msa->abc->sym[esl_vec_FArgMax(counts, msa->abc->K)]; else rfline[apos] = 'x'; } else rfline[apos] = '.'; } } rfline[msa->alen] = '\0'; return eslOK; ERROR: return status; } /* Function: esl_msa_MarkFragments() * Synopsis: Heuristically define seq fragments in an alignment. * * Purpose: Use a heuristic to define sequence fragments (as opposed * to "full length" sequences) in alignment . * * The rule is that if the range of a sequence in the alignment * (the number of alignment columns between the first and last * positions of the sequence) is not greater than * times the length of the alignment, the sequence is defined * as a fragment. * * For each fragment, all leading and trailing gap symbols * (all gaps before the first residue and after the last * residue) are converted to missing data symbols * (typically '~', but nonstandard digital alphabets may * have defined another character). * * If is 0.0, no nonempty sequence is defined * as a fragment. * * If is 1.0, all sequences are defined as * fragments. * * Args: msa - alignment in which to define and mark seq fragments * fragthresh - define frags if seqrange <= fragthresh * alen. * * Returns: on success. */ int esl_msa_MarkFragments(ESL_MSA *msa, double fragthresh) { int i; int pos; int64_t first; int64_t last; for (i = 0; i < msa->nseq; i++) { msa_get_alibounds(msa, i, &first, &last); if ((last-first+1) <= fragthresh * msa->alen) { #ifdef eslAUGMENT_ALPHABET if (msa->flags & eslMSA_DIGITAL) { for (pos = 1; pos <= msa->alen; pos++) { if (esl_abc_XIsResidue(msa->abc, msa->ax[i][pos])) break; msa->ax[i][pos] = esl_abc_XGetMissing(msa->abc); } for (pos = msa->alen; pos >= 1; pos--) { if (esl_abc_XIsResidue(msa->abc, msa->ax[i][pos])) break; msa->ax[i][pos] = esl_abc_XGetMissing(msa->abc); } } #endif if (! (msa->flags & eslMSA_DIGITAL)) { for (pos = 0; pos < msa->alen; pos++) { if (isalnum(msa->aseq[i][pos])) break; msa->aseq[i][pos] = '~'; } for (pos = msa->alen-1; pos >= 0; pos--) { if (isalnum(msa->aseq[i][pos])) break; msa->aseq[i][pos] = '~'; } } } } return eslOK; } /* Function: esl_msa_SequenceSubset() * Synopsis: Select subset of sequences into a smaller MSA. * * Purpose: Given an array (0..nseq-1) of TRUE/FALSE flags for each * sequence in an alignment ; create a new alignment containing * only those seqs which are flagged . Return a pointer * to this newly allocated alignment through . Caller is * responsible for freeing it. * * The smaller alignment might now contain columns * consisting entirely of gaps or missing data, depending * on what sequence subset was extracted. The caller may * want to immediately call on the * new alignment to clean this up. * * Unparsed GS and GR Stockholm annotation that is presumably still * valid is transferred to the new alignment. Unparsed GC, GF, and * comments that are potentially invalidated by taking the subset * of sequences are not transferred to the new MSA. * * Weights are transferred exactly. If they need to be * renormalized to some new total weight (such as the new, * smaller total sequence number), the caller must do that. * * may be in text mode or digital mode. The new MSA * in will have the same mode. * * Returns: on success, and is set to point at a new * (smaller) alignment. * * Throws: if the subset has no sequences in it; * on allocation error. * * Xref: squid's MSASmallerAlignment(), 1999. */ int esl_msa_SequenceSubset(const ESL_MSA *msa, const int *useme, ESL_MSA **ret_new) { ESL_MSA *new = NULL; int nnew; /* number of seqs in the new MSA */ int oidx, nidx; /* old, new indices */ int i; int status; *ret_new = NULL; nnew = 0; for (oidx = 0; oidx < msa->nseq; oidx++) if (useme[oidx]) nnew++; if (nnew == 0) ESL_EXCEPTION(eslEINVAL, "No sequences selected"); /* Note that the Create() calls allocate exact space for the sequences, * so we will strcpy()/memcpy() into them below. */ #ifdef eslAUGMENT_ALPHABET if ((msa->flags & eslMSA_DIGITAL) && (new = esl_msa_CreateDigital(msa->abc, nnew, msa->alen)) == NULL) {status = eslEMEM; goto ERROR; } #endif if (! (msa->flags & eslMSA_DIGITAL) && (new = esl_msa_Create(nnew, msa->alen)) == NULL) {status = eslEMEM; goto ERROR; } if (new == NULL) {status = eslEMEM; goto ERROR; } /* Copy the old to the new */ for (nidx = 0, oidx = 0; oidx < msa->nseq; oidx++) if (useme[oidx]) { #ifdef eslAUGMENT_ALPHABET if (msa->flags & eslMSA_DIGITAL) memcpy(new->ax[nidx], msa->ax[oidx], sizeof(ESL_DSQ) * (msa->alen+2)); #endif if (! (msa->flags & eslMSA_DIGITAL)) strcpy(new->aseq[nidx], msa->aseq[oidx]); if ((status = esl_strdup(msa->sqname[oidx], -1, &(new->sqname[nidx]))) != eslOK) goto ERROR; new->wgt[nidx] = msa->wgt[oidx]; if (msa->sqacc && msa->sqacc[oidx] && (status = esl_msa_SetSeqAccession (new, nidx, msa->sqacc[oidx], -1)) != eslOK) goto ERROR; if (msa->sqdesc && msa->sqdesc[oidx] && (status = esl_msa_SetSeqDescription(new, nidx, msa->sqdesc[oidx], -1)) != eslOK) goto ERROR; if (msa->ss && msa->ss[oidx] && (status = msa_set_seq_ss (new, nidx, msa->ss[oidx])) != eslOK) goto ERROR; if (msa->sa && msa->sa[oidx] && (status = msa_set_seq_sa (new, nidx, msa->sa[oidx])) != eslOK) goto ERROR; if (msa->pp && msa->pp[oidx] && (status = msa_set_seq_pp (new, nidx, msa->pp[oidx])) != eslOK) goto ERROR; /* unparsed annotation */ for(i = 0; i < msa->ngs; i++) { if (msa->gs[i] && msa->gs[i][oidx] && (status = esl_msa_AddGS (new, msa->gs_tag[i], -1, nidx, msa->gs[i][oidx], -1)) != eslOK) goto ERROR; } for(i = 0; i < msa->ngr; i++) { if (msa->gr[i] && msa->gr[i][oidx] && (status = esl_msa_AppendGR(new, msa->gr_tag[i], nidx, msa->gr[i][oidx])) != eslOK) goto ERROR; } nidx++; } new->flags = msa->flags; if ((status = esl_strdup(msa->name, -1, &(new->name))) != eslOK) goto ERROR; if ((status = esl_strdup(msa->desc, -1, &(new->desc))) != eslOK) goto ERROR; if ((status = esl_strdup(msa->acc, -1, &(new->acc))) != eslOK) goto ERROR; if ((status = esl_strdup(msa->au, -1, &(new->au))) != eslOK) goto ERROR; if ((status = esl_strdup(msa->ss_cons, msa->alen, &(new->ss_cons))) != eslOK) goto ERROR; if ((status = esl_strdup(msa->sa_cons, msa->alen, &(new->sa_cons))) != eslOK) goto ERROR; if ((status = esl_strdup(msa->pp_cons, msa->alen, &(new->pp_cons))) != eslOK) goto ERROR; if ((status = esl_strdup(msa->rf, msa->alen, &(new->rf))) != eslOK) goto ERROR; if ((status = esl_strdup(msa->mm, msa->alen, &(new->mm))) != eslOK) goto ERROR; for (i = 0; i < eslMSA_NCUTS; i++) { new->cutoff[i] = msa->cutoff[i]; new->cutset[i] = msa->cutset[i]; } new->nseq = nnew; new->sqalloc = nnew; /* Since we have a fully constructed MSA, we don't need the * aux info used by parsers. */ if (new->sqlen != NULL) { free(new->sqlen); new->sqlen = NULL; } if (new->sslen != NULL) { free(new->sslen); new->sslen = NULL; } if (new->salen != NULL) { free(new->salen); new->salen = NULL; } if (new->pplen != NULL) { free(new->pplen); new->pplen = NULL; } new->lastidx = -1; *ret_new = new; return eslOK; ERROR: if (new != NULL) esl_msa_Destroy(new); *ret_new = NULL; return status; } /* Function: esl_msa_ColumnSubset() * Synopsis: Remove a selected subset of columns from the MSA * * Purpose: Given an array (0..alen-1) of TRUE/FALSE flags, * where TRUE means "keep this column in the new alignment"; * remove all columns annotated as FALSE in the * array. This is done in-place on the MSA, so the MSA is * modified: alen> is reduced, aseq> is shrunk * (or ax>, in the case of a digital mode alignment), * and all associated per-residue or per-column annotation * is shrunk. * * Returns: on success. * Possibilities from call: * if WUSS string for or ss> * following is inconsistent. * if a derived ct array implies a pknotted SS. */ int esl_msa_ColumnSubset(ESL_MSA *msa, char *errbuf, const int *useme) { int status; int64_t opos; /* position in original alignment */ int64_t npos; /* position in new alignment */ int idx; /* sequence index */ int i; /* markup index */ /* For RNA/DNA digital alignments only: * Remove any basepairs from SS_cons and individual sequence SS * for aln columns i,j for which useme[i-1] or useme[j-1] are FALSE */ if ( msa->abc && (msa->abc->type == eslRNA || msa->abc->type == eslDNA) && (status = esl_msa_RemoveBrokenBasepairs(msa, errbuf, useme)) != eslOK) return status; /* Since we're minimizing, we can overwrite in place, within the msa * we've already got. * opos runs all the way to msa->alen to include (and move) the \0 * string terminators (or sentinel bytes, in the case of digital mode) */ for (opos = 0, npos = 0; opos <= msa->alen; opos++) { if (opos < msa->alen && useme[opos] == FALSE) continue; if (npos != opos) /* small optimization */ { /* The alignment, and per-residue annotations */ for (idx = 0; idx < msa->nseq; idx++) { #ifdef eslAUGMENT_ALPHABET if (msa->flags & eslMSA_DIGITAL) /* watch off-by-one in dsq indexing */ msa->ax[idx][npos+1] = msa->ax[idx][opos+1]; else msa->aseq[idx][npos] = msa->aseq[idx][opos]; #else msa->aseq[idx][npos] = msa->aseq[idx][opos]; #endif /*eslAUGMENT_ALPHABET*/ if (msa->ss != NULL && msa->ss[idx] != NULL) msa->ss[idx][npos] = msa->ss[idx][opos]; if (msa->sa != NULL && msa->sa[idx] != NULL) msa->sa[idx][npos] = msa->sa[idx][opos]; if (msa->pp != NULL && msa->pp[idx] != NULL) msa->pp[idx][npos] = msa->pp[idx][opos]; for (i = 0; i < msa->ngr; i++) if (msa->gr[i][idx] != NULL) msa->gr[i][idx][npos] = msa->gr[i][idx][opos]; } /* The per-column annotations */ if (msa->ss_cons != NULL) msa->ss_cons[npos] = msa->ss_cons[opos]; if (msa->sa_cons != NULL) msa->sa_cons[npos] = msa->sa_cons[opos]; if (msa->pp_cons != NULL) msa->pp_cons[npos] = msa->pp_cons[opos]; if (msa->rf != NULL) msa->rf[npos] = msa->rf[opos]; if (msa->mm != NULL) msa->mm[npos] = msa->mm[opos]; for (i = 0; i < msa->ngc; i++) msa->gc[i][npos] = msa->gc[i][opos]; } npos++; } msa->alen = npos-1; /* -1 because npos includes NUL terminators */ return eslOK; } /* Function: esl_msa_MinimGaps() * Synopsis: Remove columns containing all gap symbols. * * Purpose: Remove all columns in the multiple alignment * that consist entirely of gaps or missing data. * * For a text mode alignment, is a string defining * the gap characters, such as <"-_.~">. For a digital mode * alignment, may be passed as , because the * internal alphabet already knows what the gap and missing * data characters are. * * is changed in-place to a narrower alignment * containing fewer columns. All per-residue and per-column * annotation is altered appropriately for the columns that * remain in the new alignment. * * If is TRUE, only columns that are gaps * in all sequences of and a gap in the RF annotation * of the alignment (rf>) will be removed. It is * okay if is TRUE and rf> is NULL * (no error is thrown), the function will behave as if * is FALSE. * * Returns: on success. * * Throws: on allocation failure. * Possibilities from call: * if WUSS string for or ss> * following is inconsistent. * if a derived ct array implies a pknotted SS. * * Xref: squid's MSAMingap(). */ int esl_msa_MinimGaps(ESL_MSA *msa, char *errbuf, const char *gaps, int consider_rf) { int *useme = NULL; /* array of TRUE/FALSE flags for which cols to keep */ int64_t apos; /* column index */ int idx; /* sequence index */ int status; int rf_is_nongap; /* TRUE if current position is not a gap in msa->rf OR msa->rf is NULL */ #ifdef eslAUGMENT_ALPHABET /* digital mode case */ if (msa->flags & eslMSA_DIGITAL) /* be careful of off-by-one: useme is 0..L-1 indexed */ { ESL_ALLOC(useme, sizeof(int) * (msa->alen+1)); /* +1 is just to deal w/ alen=0 special case */ for (apos = 1; apos <= msa->alen; apos++) { rf_is_nongap = ((msa->rf != NULL) && (! esl_abc_CIsGap (msa->abc, msa->rf[apos-1])) && (! esl_abc_CIsMissing(msa->abc, msa->rf[apos-1]))) ? TRUE : FALSE; if(rf_is_nongap && consider_rf) { /* RF is not a gap and consider_rf is TRUE, keep this column */ useme[apos-1] = TRUE; } else { /* check all seqs to see if this column is all gaps */ for (idx = 0; idx < msa->nseq; idx++) if (! esl_abc_XIsGap (msa->abc, msa->ax[idx][apos]) && ! esl_abc_XIsMissing(msa->abc, msa->ax[idx][apos])) break; if (idx == msa->nseq) useme[apos-1] = FALSE; else useme[apos-1] = TRUE; } } if((status = esl_msa_ColumnSubset(msa, errbuf, useme)) != eslOK) goto ERROR; free(useme); } #endif if (! (msa->flags & eslMSA_DIGITAL)) /* text mode case */ { if ( (status = esl_msa_MinimGapsText(msa, errbuf, gaps, consider_rf, FALSE)) != eslOK) goto ERROR; } return eslOK; ERROR: if (useme != NULL) free(useme); return status; } /* Function: esl_msa_MinimGapsText() * Synopsis: Remove columns containing all gap symbols, from text mode msa * * Purpose: Same as esl\_msa\_MinimGaps(), but specialized for a text mode * alignment where we don't know the alphabet. The issue is what * to do about RNA secondary structure annotation (SS, SS\_cons) * when we remove columns, which can remove one side of a bp and * invalidate the annotation string. For digital alignments, * knows the alphabet and will fix base pairs * for RNA/DNA alignments. For text mode, though, we have to * get told to do it, because the default behavior for text mode * alis is to assume that the alphabet is totally arbitrary, and we're * not allowed to make assumptions about its symbols' meaning. * Hence, the flag here. * * Ditto for the string: we don't know what symbols * are supposed to be gaps unless we're told something like * <"-_.~">. * * Args: msa - alignment to remove all-gap cols from * errbuf - if non-, space for an informative error message on failure * gaps - string of gap characters * consider_rf - if TRUE, also consider gap/nongap cols in RF annotation line * fix_bps - if TRUE, fix any broken bps in SS/SS\_cons annotation lines. * * Returns: on success. * * Throws: on allocation failure. * Possibilities from call: * if WUSS string for or ss> * following is inconsistent. * if a derived ct array implies a pknotted SS. */ int esl_msa_MinimGapsText(ESL_MSA *msa, char *errbuf, const char *gaps, int consider_rf, int fix_bps) { int *useme = NULL; /* array of TRUE/FALSE flags for which cols to keep */ int64_t apos; /* column index */ int idx; /* sequence index */ int status; int rf_is_nongap; /* TRUE if current position is not a gap in msa->rf OR msa->rf is NULL */ ESL_ALLOC(useme, sizeof(int) * (msa->alen+1)); /* +1 is just to deal w/ alen=0 special case */ for (apos = 0; apos < msa->alen; apos++) { rf_is_nongap = ((msa->rf != NULL) && (strchr(gaps, msa->rf[apos]) == NULL)) ? TRUE : FALSE; if (rf_is_nongap && consider_rf) useme[apos] = TRUE; /* RF is not a gap and consider_rf is TRUE, keep this column */ else { /* check all seqs to see if this column is all gaps */ for (idx = 0; idx < msa->nseq; idx++) if (strchr(gaps, msa->aseq[idx][apos]) == NULL) break; useme[apos] = (idx == msa->nseq ? FALSE : TRUE); } } if (fix_bps && (status = esl_msa_RemoveBrokenBasepairs(msa, errbuf, useme)) != eslOK) goto ERROR; if ( (status = esl_msa_ColumnSubset (msa, errbuf, useme)) != eslOK) goto ERROR; free(useme); return eslOK; ERROR: if (useme) free(useme); return status; } /* Function: esl_msa_NoGaps() * Synopsis: Remove columns containing any gap symbol. * * Purpose: Remove all columns in the multiple alignment that * contain any gaps or missing data, such that the modified * MSA consists only of ungapped columns (a solid block of * residues). * * This is useful for filtering alignments prior to * phylogenetic analysis using programs that can't deal * with gaps. * * For a text mode alignment, is a string defining * the gap characters, such as <"-_.~">. For a digital mode * alignment, may be passed as , because the * internal alphabet already knows what the gap and * missing data characters are. * * is changed in-place to a narrower alignment * containing fewer columns. All per-residue and per-column * annotation is altered appropriately for the columns that * remain in the new alignment. * * Returns: on success. * * Throws: on allocation failure. * Possibilities from call: * if WUSS string for or ss> * following is inconsistent. * if a derived ct array implies a pknotted SS. * * Xref: squid's MSANogap(). */ int esl_msa_NoGaps(ESL_MSA *msa, char *errbuf, const char *gaps) { int *useme = NULL; /* array of TRUE/FALSE flags for which cols to keep */ int64_t apos; /* column index */ int idx; /* sequence index */ int status; #ifdef eslAUGMENT_ALPHABET /* digital mode case */ if (msa->flags & eslMSA_DIGITAL) /* be careful of off-by-one: useme is 0..L-1 indexed */ { ESL_ALLOC(useme, sizeof(int) * (msa->alen+1)); /* +1 is only to deal with alen=0 special case */ for (apos = 1; apos <= msa->alen; apos++) { for (idx = 0; idx < msa->nseq; idx++) if (esl_abc_XIsGap (msa->abc, msa->ax[idx][apos]) || esl_abc_XIsMissing(msa->abc, msa->ax[idx][apos])) break; if (idx == msa->nseq) useme[apos-1] = TRUE; else useme[apos-1] = FALSE; } if ((status = esl_msa_ColumnSubset(msa, errbuf, useme)) != eslOK) goto ERROR; free(useme); } #endif if (! (msa->flags & eslMSA_DIGITAL)) /* text mode case */ { if ((status = esl_msa_NoGapsText(msa, errbuf, gaps, FALSE)) != eslOK) goto ERROR; } return eslOK; ERROR: if (useme != NULL) free(useme); return status; } /* Function: esl_msa_NoGapsText() * Synopsis: Remove columns containing any gap symbol at all, for text mode msa. * * Purpose: Like but specialized for textmode where * we don't know the alphabet, yet might need to fix alphabet-dependent * problems. * * Like , the alphabet-dependent issue we might * want to fix is RNA secondary structure annotation (SS, SS\_cons); * removing a column might remove one side of a base pair annotation, and * invalidate a secondary structure string. tells the function * that SS and SS\_cons are RNA WUSS format strings, and the function is * allowed to edit (and fix) them. Normally, in text mode msa's, we * are not allowed to interpret any meaning of symbols. * * Args: msa - alignment to remove any-gap cols from * errbuf - if non-, space for an informative error message on failure * gaps - string of gap characters * fix_bps - if TRUE, fix any broken bps in SS/SS\_cons annotation lines * * Returns: on success. * * Throws: on allocation failure. * Possibilities from call: * if WUSS string for or ss> * following is inconsistent. * if a derived ct array implies a pknotted SS. */ int esl_msa_NoGapsText(ESL_MSA *msa, char *errbuf, const char *gaps, int fix_bps) { int *useme = NULL; /* array of TRUE/FALSE flags for which cols to keep */ int64_t apos; /* column index */ int idx; /* sequence index */ int status; ESL_ALLOC(useme, sizeof(int) * (msa->alen+1)); /* +1 is only to deal with alen=0 special case */ for (apos = 0; apos < msa->alen; apos++) { for (idx = 0; idx < msa->nseq; idx++) if (strchr(gaps, msa->aseq[idx][apos]) != NULL) break; useme[apos] = (idx == msa->nseq ? TRUE : FALSE); } if (fix_bps && (status = esl_msa_RemoveBrokenBasepairs(msa, errbuf, useme)) != eslOK) goto ERROR; if ( (status = esl_msa_ColumnSubset (msa, errbuf, useme)) != eslOK) goto ERROR; free(useme); return eslOK; ERROR: if (useme) free(useme); return status; } /* Function: esl_msa_SymConvert() * Synopsis: Global search/replace of symbols in an MSA. * * Purpose: In the aligned sequences in a text-mode , convert any * residue in the string to its counterpart (at the same * position) in string . * * To convert DNA to RNA, could be "Tt" and * could be "Uu". To convert IUPAC symbols to * N's, could be "RYMKSWHBVDrymkswhbvd" and * could be "NNNNNNNNNNnnnnnnnnnn". * * As a special case, if consists of a single * character, then any character in the is * converted to this character. * * Thus, must either be of the same length as * , or of length 1. Anything else will cause * undefined behavior (and probably segfault). * * The conversion is done in-place, so the is * modified. * * This is a poor man's hack for processing text mode MSAs * into a more consistent text alphabet. It is unnecessary * for digital mode MSAs, which are already in a standard * internal alphabet. Calling on a * digital mode alignment throws an error. * * Returns: on success. * * Throws: if is in digital mode, or if the * and strings aren't valid together. */ int esl_msa_SymConvert(ESL_MSA *msa, const char *oldsyms, const char *newsyms) { int64_t apos; /* column index */ int idx; /* sequence index */ char *sptr; int special; if (msa->flags & eslMSA_DIGITAL) ESL_EXCEPTION(eslEINVAL, "can't SymConvert on digital mode alignment"); if ((strlen(oldsyms) != strlen(newsyms)) && strlen(newsyms) != 1) ESL_EXCEPTION(eslEINVAL, "invalid newsyms/oldsyms pair"); special = (strlen(newsyms) == 1 ? TRUE : FALSE); for (apos = 0; apos < msa->alen; apos++) for (idx = 0; idx < msa->nseq; idx++) if ((sptr = strchr(oldsyms, msa->aseq[idx][apos])) != NULL) msa->aseq[idx][apos] = (special ? *newsyms : newsyms[sptr-oldsyms]); return eslOK; } /* Function: esl_msa_Checksum() * Synopsis: Calculate a checksum for an MSA. * Incept: SRE, Tue Sep 16 13:23:34 2008 [Janelia] * * Purpose: Calculates a 32-bit checksum for . * * Only the alignment data are considered, not the sequence * names or other annotation. For text mode alignments, the * checksum is case sensitive. * * This is used as a quick way to try to verify that a * given alignment is identical to an expected one; for * example, when HMMER is mapping new sequence alignments * onto exactly the same seed alignment an HMM was built * from. * * Returns: on success. * * Xref: The checksum is a modified version of Jenkin's hash; * see for the original and citations. */ int esl_msa_Checksum(const ESL_MSA *msa, uint32_t *ret_checksum) { uint32_t val = 0; int i,pos; #ifdef eslAUGMENT_ALPHABET if (msa->flags & eslMSA_DIGITAL) { for (i = 0; i < msa->nseq; i++) for (pos = 1; pos <= msa->alen; pos++) { val += msa->ax[i][pos]; val += (val << 10); val ^= (val >> 6); } } #endif if (! (msa->flags & eslMSA_DIGITAL)) { for (i = 0; i < msa->nseq; i++) for (pos = 0; pos < msa->alen; pos++) { val += msa->aseq[i][pos]; val += (val << 10); val ^= (val >> 6); } } val += (val << 3); val ^= (val >> 11); val += (val << 15); *ret_checksum = val; return eslOK; } /* Function: esl_msa_RemoveBrokenBasepairsFromSS() * Synopsis: Remove basepairs about to be broken by a column downselect. * * Purpose: Given an array (0..alen-1) of TRUE/FALSE flags, * remove any basepair from an SS string that is between * alignment columns (i,j) for which either or * is FALSE. Called by * . * * The input SS string will be overwritten. If it was not * in full WUSS format when passed in, it will be upon * exit. Note that that means if there's residues in the * input ss that correspond to gaps in an aligned sequence * or RF annotation, they will not be treated as gaps in * the returned SS. For example, a gap may become a '-' * character, a '<_>' character, or a ':' character. I'm not * sure how to deal with this in a better way. We could * demand an aligned sequence to use to de-gap the SS * string, but that would require disallowing any gap to be * involved in a basepair, which I'm not sure is something * we want to forbid. * * If the original SS is inconsistent it's left untouched * and non- is returned as listed below. * * Returns: on success. * if SS string * following is inconsistent. * if a derived ct array implies a pknotted * SS, this should be impossible. * * Throws: on allocation failure. */ int esl_msa_RemoveBrokenBasepairsFromSS(char *ss, char *errbuf, int len, const int *useme) { int64_t apos; /* alignment position */ int *ct = NULL; /* 0..alen-1 base pair partners array for current sequence */ char *ss_nopseudo = NULL; /* no-pseudoknot version of structure */ int status; ESL_ALLOC(ct, sizeof(int) * (len+1)); ESL_ALLOC(ss_nopseudo, sizeof(char) * (len+1)); esl_wuss_nopseudo(ss, ss_nopseudo); if ((status = esl_wuss2ct(ss_nopseudo, len, ct)) != eslOK) ESL_FAIL(status, errbuf, "Consensus structure string is inconsistent."); for (apos = 1; apos <= len; apos++) { if (!(useme[apos-1])) { if (ct[apos] != 0) ct[ct[apos]] = 0; ct[apos] = 0; } } /* All broken bps removed from ct, convert to WUSS SS string and overwrite SS */ if ((status = esl_ct2wuss(ct, len, ss)) != eslOK) ESL_FAIL(status, errbuf, "Error converting de-knotted bp ct array to WUSS notation."); free(ss_nopseudo); free(ct); return eslOK; ERROR: if (ct != NULL) free(ct); if (ss_nopseudo != NULL) free(ss_nopseudo); return status; } /* Function: esl_msa_RemoveBrokenBasepairs() * Synopsis: Remove all annotated bps about to be broken by column downselect. * * Purpose: Given an array (0..alen-1) of TRUE/FALSE flags, * remove any basepair from and individual SS * annotation in alignment columns (i,j) for which either * or is FALSE. Called * automatically from with same * . * * If the original structure data is inconsistent it's left * untouched. * * Returns: on success. * if WUSS string for or ss> * following is inconsistent. * if a derived ct array implies a pknotted * SS, this should be impossible * * Throws: on allocation failure. */ int esl_msa_RemoveBrokenBasepairs(ESL_MSA *msa, char *errbuf, const int *useme) { int status; int i; if (msa->ss_cons) { if((status = esl_msa_RemoveBrokenBasepairsFromSS(msa->ss_cons, errbuf, msa->alen, useme)) != eslOK) return status; } /* per-seq SS annotation */ if (msa->ss) { for(i = 0; i < msa->nseq; i++) { if (msa->ss[i]) { if ((status = esl_msa_RemoveBrokenBasepairsFromSS(msa->ss[i], errbuf, msa->alen, useme)) != eslOK) return status; } } } return eslOK; } /* msa_get_rlen() * * Returns the raw (unaligned) length of sequence number * in . */ static int64_t msa_get_rlen(const ESL_MSA *msa, int seqidx) { int64_t rlen = 0; int pos; #ifdef eslAUGMENT_ALPHABET if (msa->flags & eslMSA_DIGITAL) rlen = esl_abc_dsqrlen(msa->abc, msa->ax[seqidx]); #endif if (! (msa->flags & eslMSA_DIGITAL)) { for (pos = 0; pos < msa->alen; pos++) if (isalnum(msa->aseq[seqidx][pos])) rlen++; } return rlen; } /* msa_get_alibounds() * * Returns the alignment range ( and positions in ) of * of sequence number . */ static int msa_get_alibounds(const ESL_MSA *msa, int seqidx, int64_t *first, int64_t *last) { #ifdef eslAUGMENT_ALPHABET if (msa->flags & eslMSA_DIGITAL) { *first = 1; while (*first <= msa->alen && !esl_abc_XIsResidue(msa->abc, msa->ax[seqidx][*first])) (*first)++; *last = msa->alen; while (*last > 0 && !esl_abc_XIsResidue(msa->abc, msa->ax[seqidx][*last])) (*last)--; } #endif if (! (msa->flags & eslMSA_DIGITAL)) { *first = 0; while (*first < msa->alen && !isalnum(msa->aseq[seqidx][*first])) (*first)++; *last = msa->alen - 1; while (*last < msa->alen && !isalnum(msa->aseq[seqidx][*last])) (*last)--; } return eslOK; } #ifdef eslAUGMENT_KEYHASH /* Function: esl_msa_Hash() * Synopsis: Hash sequence names, internally, for faster access/lookup. * * Purpose: Caller wants to map sequence names to integer index in the * structure, using the internal index> keyhash. * Create (or recreate) that index. * * Each sequence name must be unique. If not, returns * , and index> is (if it already * existed, it is destroyed). * * Returns: on success, and index> is available for * keyhash lookups. * * if any sequence names are duplicated, and * index> is . * * Throws: on allocation error. */ int esl_msa_Hash(ESL_MSA *msa) { int idx; int status; if (msa->index) esl_keyhash_Reuse(msa->index); else msa->index = esl_keyhash_Create(); if (! msa->index) { status = eslEMEM; goto ERROR; } for (idx = 0; idx < msa->nseq; idx++) if ((status = esl_keyhash_Store(msa->index, msa->sqname[idx], -1, NULL)) != eslOK) goto ERROR; return eslOK; ERROR: if (msa->index) { esl_keyhash_Destroy(msa->index); msa->index = NULL; } return status; } #endif /*eslAUGMENT_KEYHASH*/ /*----------------- end of misc MSA functions -------------------*/ /***************************************************************** * 5. Debugging, testing, development *****************************************************************/ /* Function: esl_msa_Validate() * Synopsis: Validate an ESL_MSA structure. * * Purpose: Validates the fields of the structure * . Makes sure required information is present, * consistent. If so, return . * * If a problem is detected, return . Caller may * also provide an optional pointer to a buffer of * at least ; if this message buffer is * provided, an informative error message is put there. * * Args: msa - MSA structure to validate * errmsg - OPTIONAL: error message buffer, at least ; or * * Returns: on success, and (if provided) is set * to an empty string. * * on failure and (if provided) contains * the reason for the failure. */ int esl_msa_Validate(const ESL_MSA *msa, char *errmsg) { int idx; if (msa->nseq == 0) ESL_FAIL(eslFAIL, errmsg, "no alignment data found"); for (idx = 0; idx < msa->nseq; idx++) { #ifdef eslAUGMENT_ALPHABET if (msa->flags & eslMSA_DIGITAL) { if (! msa->ax || ! msa->ax[idx]) ESL_FAIL(eslFAIL, errmsg, "seq %d: no sequence", idx); if (esl_abc_dsqlen(msa->ax[idx]) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "seq %d: wrong length", idx); } #endif if (! (msa->flags & eslMSA_DIGITAL)) { if (! msa->aseq || ! msa->aseq[idx]) ESL_FAIL(eslFAIL, errmsg, "seq %d: no sequence", idx); if (strlen(msa->aseq[idx]) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "seq %d: wrong length", idx); } /* either all weights must be set, or none of them */ if ( msa->flags & eslMSA_HASWGTS) { if (msa->wgt[idx] == -1.0) ESL_FAIL(eslFAIL, errmsg, "seq %d: no weight set", idx);} else { if (msa->wgt[idx] != 1.0) ESL_FAIL(eslFAIL, errmsg, "seq %d: HASWGTS flag down, wgt must be default", idx); } if (msa->ss && msa->ss[idx] && strlen(msa->ss[idx]) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "seq %d: SS wrong length", idx); if (msa->sa && msa->sa[idx] && strlen(msa->sa[idx]) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "seq %d: SA wrong length", idx); if (msa->pp && msa->pp[idx] && strlen(msa->pp[idx]) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "seq %d: PP wrong length", idx); } /* if cons SS is present, must have length right */ if (msa->ss_cons && strlen(msa->ss_cons) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "SS_cons wrong length"); if (msa->sa_cons && strlen(msa->sa_cons) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "SA_cons wrong length"); if (msa->pp_cons && strlen(msa->pp_cons) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "PP_cons wrong length"); if (msa->rf && strlen(msa->rf) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "RF wrong length"); if (msa->mm && strlen(msa->mm ) != msa->alen) ESL_FAIL(eslFAIL, errmsg, "MM wrong length"); return eslOK; } /* Function: esl_msa_CreateFromString() * Synopsis: Creates a small from a test case string. * * Purpose: A convenience for making small test cases in the test * suites: given the contents of a complete multiple * sequence alignment file as a single string in * alignment format , convert it to an . * * For example, * {\small\begin{verbatim} * esl_msa_CreateFromString("# STOCKHOLM 1.0\n\nseq1 AAAAA\nseq2 AAAAA\n//\n", * eslMSAFILE_STOCKHOLM) * \end{verbatim}} * creates an ungapped alignment of two AAAAA sequences. * * Returns: a pointer to the new on success. * * Throws: if it fails to obtain, open, or read the temporary file * that it puts the string in. */ ESL_MSA * esl_msa_CreateFromString(const char *s, int fmt) { ESLX_MSAFILE *mfp = NULL; ESL_MSA *msa = NULL; if (eslx_msafile_OpenMem(NULL, s, -1, fmt, NULL, &mfp) != eslOK) goto ERROR; if (eslx_msafile_Read(mfp, &msa) != eslOK) goto ERROR; eslx_msafile_Close(mfp); return msa; ERROR: if (mfp != NULL) eslx_msafile_Close(mfp); if (msa != NULL) esl_msa_Destroy(msa); return NULL; } /* Function: esl_msa_Compare() * Synopsis: Compare two MSAs for equality. * * Purpose: Returns if the mandatory and optional contents * of MSAs and are identical; otherwise return * . * * Only mandatory and parsed optional information is * compared. Unparsed Stockholm markup is not compared. */ int esl_msa_Compare(ESL_MSA *a1, ESL_MSA *a2) { if (esl_msa_CompareMandatory(a1, a2) != eslOK) return eslFAIL; if (esl_msa_CompareOptional(a1, a2) != eslOK) return eslFAIL; return eslOK; } /* Function: esl_msa_CompareMandatory() * Synopsis: Compare mandatory subset of MSA contents. * Incept: SRE, Wed Jun 13 09:42:56 2007 [Janelia] * * Purpose: Compare mandatory contents of two MSAs, and . * This comprises (or , for a digital alignment); * , , , , and . * * Returns: if the MSAs are identical; * if they are not. */ int esl_msa_CompareMandatory(ESL_MSA *a1, ESL_MSA *a2) { int i; if (a1->nseq != a2->nseq) return eslFAIL; if (a1->alen != a2->alen) return eslFAIL; if (a1->flags != a2->flags) return eslFAIL; for (i = 0; i < a1->nseq; i++) { if (strcmp(a1->sqname[i], a2->sqname[i]) != 0) return eslFAIL; if (esl_DCompare(a1->wgt[i], a2->wgt[i], 0.001) != eslOK) return eslFAIL; #ifdef eslAUGMENT_ALPHABET if ((a1->flags & eslMSA_DIGITAL) && memcmp(a1->ax[i], a2->ax[i], sizeof(ESL_DSQ) * (a1->alen+2)) != 0) return eslFAIL; #endif if (! (a1->flags & eslMSA_DIGITAL) && strcmp(a1->aseq[i], a2->aseq[i]) != 0) return eslFAIL; } return eslOK; } /* Function: esl_msa_CompareOptional() * Synopsis: Compare optional subset of MSA contents. * Incept: SRE, Wed Jun 13 09:52:48 2007 [Janelia] * * Purpose: Compare optional contents of two MSAs, and . * * Returns: if the MSAs are identical; * if they are not. */ int esl_msa_CompareOptional(ESL_MSA *a1, ESL_MSA *a2) { int i; if (esl_CCompare(a1->name, a2->name) != eslOK) return eslFAIL; if (esl_CCompare(a1->desc, a2->desc) != eslOK) return eslFAIL; if (esl_CCompare(a1->acc, a2->acc) != eslOK) return eslFAIL; if (esl_CCompare(a1->au, a2->au) != eslOK) return eslFAIL; if (esl_CCompare(a1->ss_cons, a2->ss_cons) != eslOK) return eslFAIL; if (esl_CCompare(a1->sa_cons, a2->sa_cons) != eslOK) return eslFAIL; if (esl_CCompare(a1->pp_cons, a2->pp_cons) != eslOK) return eslFAIL; if (esl_CCompare(a1->rf, a2->rf) != eslOK) return eslFAIL; if (esl_CCompare(a1->mm, a2->mm) != eslOK) return eslFAIL; if (a1->sqacc != NULL && a2->sqacc != NULL) { for (i = 0; i < a1->nseq; i++) if (esl_CCompare(a1->sqacc[i], a2->sqacc[i]) != eslOK) return eslFAIL; } else if (a1->sqacc != NULL || a2->sqacc != NULL) return eslFAIL; if (a1->sqdesc != NULL && a2->sqdesc != NULL) { for (i = 0; i < a1->nseq; i++) if (esl_CCompare(a1->sqdesc[i], a2->sqdesc[i]) != eslOK) return eslFAIL; } else if (a1->sqdesc != NULL || a2->sqdesc != NULL) return eslFAIL; if (a1->ss != NULL && a2->ss != NULL) { for (i = 0; i < a1->nseq; i++) if (esl_CCompare(a1->ss[i], a2->ss[i]) != eslOK) return eslFAIL; } else if (a1->ss != NULL || a2->ss != NULL) return eslFAIL; if (a1->sa != NULL && a2->sa != NULL) { for (i = 0; i < a1->nseq; i++) if (esl_CCompare(a1->sa[i], a2->sa[i]) != eslOK) return eslFAIL; } else if (a1->sa != NULL || a2->sa != NULL) return eslFAIL; if (a1->pp != NULL && a2->pp != NULL) { for (i = 0; i < a1->nseq; i++) if (esl_CCompare(a1->pp[i], a2->pp[i]) != eslOK) return eslFAIL; } else if (a1->pp != NULL || a2->pp != NULL) return eslFAIL; for (i = 0; i < eslMSA_NCUTS; i++) { if (a1->cutset[i] && a2->cutset[i]) { if (esl_FCompare(a1->cutoff[i], a2->cutoff[i], 0.01) != eslOK) return eslFAIL; } else if (a1->cutset[i] || a2->cutset[i]) return eslFAIL; } return eslOK; } /*---------------- end of debugging/development routines -------------------*/ /****************************************************************************** * 15. Unit tests *****************************************************************************/ #ifdef eslMSA_TESTDRIVE /* write_known_msa() * Write a known MSA to a tmpfile in Stockholm format. */ static void write_known_msa(FILE *ofp) { fprintf(ofp, "# STOCKHOLM 1.0\n"); fprintf(ofp, "seq1 --ACDEFGHIK~LMNPQRS-TVWY\n"); fprintf(ofp, "seq2 aaACDEFGHIK~LMNPQRS-TVWY\n"); fprintf(ofp, "seq3 aaACDEFGHIK~LMNPQRS-TVWY\n"); fprintf(ofp, "\n"); fprintf(ofp, "seq1 ACDEFGHIKLMNPQRSTVWY~~~\n"); fprintf(ofp, "seq2 ACDEFGHIKLMNPQRSTVWYyyy\n"); fprintf(ofp, "seq3 ACDEFGHIKLMNPQRSTVWYyyy\n"); fprintf(ofp, "//\n"); return; } /* compare_to_known() * SRE, Thu Sep 7 09:52:07 2006 [Janelia] * Spotcheck an ESL_MSA to make sure it matches the test known alignment. */ static void compare_to_known(ESL_MSA *msa) { if (msa->alen != 47) esl_fatal("bad alen"); if (msa->nseq != 3) esl_fatal("bad nseq"); if (strcmp(msa->sqname[1], "seq2") != 0) esl_fatal("bad sqname"); #ifdef eslAUGMENT_ALPHABET if (msa->flags & eslMSA_DIGITAL) { if (! esl_abc_XIsGap(msa->abc, msa->ax[0][2])) esl_fatal("no gap where expected"); if (! esl_abc_XIsMissing(msa->abc, msa->ax[0][47])) esl_fatal("no missing-data symbol where expected"); if (msa->ax[1][1] != 0) esl_fatal("spotcheck on ax failed"); /* 0=A */ if (msa->ax[1][47] != 19) esl_fatal("spotcheck on ax failed"); /*19=Y */ } #endif if (! (msa->flags & eslMSA_DIGITAL)) { if (strcasecmp(msa->aseq[0], "--ACDEFGHIK~LMNPQRS-TVWYACDEFGHIKLMNPQRSTVWY~~~") != 0) esl_fatal("aseq 0 is bad"); if (strcasecmp(msa->aseq[1], "aaACDEFGHIK~LMNPQRS-TVWYACDEFGHIKLMNPQRSTVWYyyy") != 0) esl_fatal("aseq 1 is bad"); if (strcasecmp(msa->aseq[2], "aaACDEFGHIK~LMNPQRS-TVWYACDEFGHIKLMNPQRSTVWYyyy") != 0) esl_fatal("aseq 2 is bad"); } return; } /* Unit tests for every function in the exposed API */ static void utest_Create(void) { ESL_MSA *msa = NULL; msa = esl_msa_Create(16, -1); /* nseq blocksize 16, growable */ esl_msa_Destroy(msa); msa = esl_msa_Create(16, 100); /* nseq=16, alen=100, not growable */ esl_msa_Destroy(msa); return; } static void utest_Destroy(void) { ESL_MSA *msa = NULL; #ifdef eslAUGMENT_ALPHABET ESL_ALPHABET *abc; #endif msa = esl_msa_Create(16, -1); esl_msa_Destroy(msa); /* normal usage */ #ifdef eslAUGMENT_ALPHABET abc = esl_alphabet_Create(eslRNA); msa = esl_msa_CreateDigital(abc, 16, 100); esl_msa_Destroy(msa); /* normal usage, digital mode */ esl_alphabet_Destroy(abc); #endif esl_msa_Destroy(NULL); /* should tolerate NULL argument */ return; } static void utest_Expand(void) { ESL_MSA *msa = NULL; #ifdef eslAUGMENT_ALPHABET ESL_ALPHABET *abc; #endif msa = esl_msa_Create(16, -1); /* growable */ if (esl_msa_Expand(msa) != eslOK) esl_fatal("Expand failed"); /* expand by 2x in nseq */ esl_msa_Destroy(msa); msa = esl_msa_Create(16, 100); /* not growable */ #ifdef eslTEST_THROWING if (esl_msa_Expand(msa) != eslEINVAL) esl_fatal("Expand should have failed but didn't"); /* should fail w/ EINVAL*/ #endif esl_msa_Destroy(msa); #ifdef eslAUGMENT_ALPHABET abc = esl_alphabet_Create(eslDNA); msa = esl_msa_CreateDigital(abc, 16, -1); /* growable */ if (esl_msa_Expand(msa) != eslOK) esl_fatal("Expand failed"); /* expand by 2x in nseq */ esl_msa_Destroy(msa); msa = esl_msa_CreateDigital(abc, 16, 100); /* not growable */ #ifdef eslTEST_THROWING if (esl_msa_Expand(msa) != eslEINVAL) esl_fatal("Expand should have failed but didn't"); /* should fail w/ EINVAL*/ #endif /* eslTEST_THROWING*/ esl_msa_Destroy(msa); esl_alphabet_Destroy(abc); #endif return; } #ifdef eslAUGMENT_ALPHABET static void utest_CreateDigital(ESL_ALPHABET *abc) { char *msg = "CreateDigital() unit test failure"; ESL_MSA *msa = NULL; msa = esl_msa_CreateDigital(abc, 16, -1); /* nseq blocksize 16, growable */ if (! (msa->flags & eslMSA_DIGITAL)) esl_fatal(msg); if (msa->ax == NULL) esl_fatal(msg); if (msa->aseq != NULL) esl_fatal(msg); if (esl_msa_Expand(msa) != eslOK) esl_fatal(msg); esl_msa_Destroy(msa); msa = esl_msa_CreateDigital(abc, 16, 100); /* nseq=16, alen=100, not growable */ #ifdef eslTEST_THROWING if (esl_msa_Expand(msa) != eslEINVAL) esl_fatal(msg); /* shouldn't grow */ #endif esl_msa_Destroy(msa); return; } #endif /*eslAUGMENT_ALPHABET*/ #ifdef eslAUGMENT_ALPHABET static void utest_Digitize(ESL_ALPHABET *abc, char *filename) { char *msg = "Digitize() unit test failure"; ESLX_MSAFILE *mfp = NULL; ESL_MSA *msa = NULL; int c, i, pos; /* Get ourselves a copy of the known alignment that we can muck with */ if (eslx_msafile_Open(NULL, filename, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg); if (eslx_msafile_Read(mfp, &msa) != eslOK) esl_fatal(msg); eslx_msafile_Close(mfp); /* Deliberately corrupt it with inval character in the middle */ i = msa->nseq / 2; pos = msa->alen / 2; c = msa->aseq[i][pos]; msa->aseq[i][pos] = '%'; if (esl_msa_Digitize(abc, msa, NULL) != eslEINVAL) esl_fatal(msg); /* should detect corruption as normal error */ msa->aseq[i][pos] = c; /* restore original */ compare_to_known(msa); if (esl_msa_Digitize(abc, msa, NULL) != eslOK) esl_fatal(msg); /* should be fine now */ compare_to_known(msa); esl_msa_Destroy(msa); return; } #endif /*eslAUGMENT_ALPHABET*/ #ifdef eslAUGMENT_ALPHABET static void utest_Textize(ESL_ALPHABET *abc, char *filename) { char *msg = "Textize() unit test failure"; ESLX_MSAFILE *mfp = NULL; ESL_MSA *msa = NULL; if (eslx_msafile_Open(&abc, filename, NULL, eslMSAFILE_UNKNOWN, NULL, &mfp) != eslOK) esl_fatal(msg); if (eslx_msafile_Read(mfp, &msa) != eslOK) esl_fatal(msg); if (esl_msa_Textize(msa) != eslOK) esl_fatal(msg); compare_to_known(msa); eslx_msafile_Close(mfp); esl_msa_Destroy(msa); return; } #endif /*eslAUGMENT_ALPHABET*/ static void utest_SequenceSubset(ESL_MSA *m1) { char *msg = "SequenceSubset() unit test failure"; ESL_MSA *m2 = NULL; int *useme = NULL; int i,j; int n2; /* Make every other sequence (1,3..) get excluded from the subset */ useme = malloc(m1->nseq * sizeof(int)); for (i = 0, n2 = 0; i < m1->nseq; i++) if (i%2 == 0) { useme[i] = TRUE; n2++; } else useme[i] = FALSE; if (esl_msa_SequenceSubset(m1, useme, &m2) != eslOK) esl_fatal(msg); if (m2->nseq != n2) esl_fatal(msg); for (i = 0, j = 0; i < m1->nseq; i++) { if (useme[i]) { if (strcmp(m1->sqname[i], m2->sqname[j]) != 0) esl_fatal(msg); if (! (m1->flags & eslMSA_DIGITAL) && (strcmp(m1->aseq[i], m2->aseq[j]) != 0)) esl_fatal(msg); #ifdef eslAUGMENT_ALPHABET if ( (m1->flags & eslMSA_DIGITAL) && memcmp(m1->ax[i], m2->ax[j], sizeof(ESL_DSQ) * (m1->alen+2)) != 0) esl_fatal(msg); #endif j++; } } esl_msa_Destroy(m2); free(useme); return; } static void utest_MinimGaps(char *tmpfile) { char *msg = "MinimGaps() unit test failure"; ESLX_MSAFILE *mfp = NULL; ESL_MSA *msa = NULL; #ifdef eslAUGMENT_ALPHABET ESL_ALPHABET *abc = NULL; #endif if (eslx_msafile_Open(NULL, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg); if (eslx_msafile_Read(mfp, &msa) != eslOK) esl_fatal(msg); eslx_msafile_Close(mfp); if (esl_msa_MinimGaps(msa, NULL, "-~", FALSE) != eslOK) esl_fatal(msg); if (msa->alen != 45) esl_fatal(msg); /* orig =47, with one all - column and one all ~ column */ if (msa->aseq[0][11] != 'L') esl_fatal(msg); /* L shifted from column 13->12 */ if (msa->aseq[0][18] != 'T') esl_fatal(msg); /* T shifted from column 21->19 */ esl_msa_Destroy(msa); #ifdef eslAUGMENT_ALPHABET if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg); if (eslx_msafile_Open(&abc, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg); if (eslx_msafile_Read(mfp, &msa) != eslOK) esl_fatal(msg); eslx_msafile_Close(mfp); if (esl_msa_MinimGaps(msa, NULL, NULL, FALSE) != eslOK) esl_fatal(msg); if (msa->alen != 45) esl_fatal(msg); /* orig =47, with one all - column and one all ~ column */ if (esl_msa_Textize(msa) != eslOK) esl_fatal(msg); if (msa->aseq[0][11] != 'L') esl_fatal(msg); /* L shifted from column 13->12 */ if (msa->aseq[0][18] != 'T') esl_fatal(msg); /* T shifted from column 21->19 */ esl_msa_Destroy(msa); esl_alphabet_Destroy(abc); #endif return; } static void utest_NoGaps(char *tmpfile) { char *msg = "NoGaps() unit test failure"; ESLX_MSAFILE *mfp = NULL; ESL_MSA *msa = NULL; #ifdef eslAUGMENT_ALPHABET ESL_ALPHABET *abc = NULL; #endif if (eslx_msafile_Open(NULL, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg); if (eslx_msafile_Read(mfp, &msa) != eslOK) esl_fatal(msg); eslx_msafile_Close(mfp); if (esl_msa_NoGaps(msa, NULL, "-~") != eslOK) esl_fatal(msg); if (msa->alen != 40) esl_fatal(msg); /* orig =47, w/ 7 columns with gaps */ if (msa->aseq[0][9] != 'L') esl_fatal(msg); /* L shifted from column 13->10 */ if (msa->aseq[0][16] != 'T') esl_fatal(msg); /* T shifted from column 21->17 */ if (msa->aseq[0][39] != 'Y') esl_fatal(msg); /* Y shifted from column 47->40 */ esl_msa_Destroy(msa); #ifdef eslAUGMENT_ALPHABET if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg); if (eslx_msafile_Open(&abc, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg); if (eslx_msafile_Read(mfp, &msa) != eslOK) esl_fatal(msg); eslx_msafile_Close(mfp); if (esl_msa_NoGaps(msa, NULL, NULL) != eslOK) esl_fatal(msg); if (msa->alen != 40) esl_fatal(msg); /* orig =47, with one all - column and one all ~ column */ if (esl_msa_Textize(msa) != eslOK) esl_fatal(msg); if (msa->aseq[0][9] != 'L') esl_fatal(msg); /* L shifted from column 13->10 */ if (msa->aseq[0][16] != 'T') esl_fatal(msg); /* T shifted from column 21->17 */ if (msa->aseq[0][39] != 'Y') esl_fatal(msg); /* Y shifted from column 47->40 */ esl_msa_Destroy(msa); esl_alphabet_Destroy(abc); #endif return; } static void utest_SymConvert(char *tmpfile) { char *msg = "SymConvert() unit test failure"; ESLX_MSAFILE *mfp = NULL; ESL_MSA *msa = NULL; #ifdef eslAUGMENT_ALPHABET ESL_ALPHABET *abc = NULL; #endif if (eslx_msafile_Open(NULL, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg); if (eslx_msafile_Read(mfp, &msa) != eslOK) esl_fatal(msg); eslx_msafile_Close(mfp); /* many->one version */ if (esl_msa_SymConvert(msa, "VWY", "-") != eslOK) esl_fatal(msg); /* 6 columns convert to all-gap: now 8/47 */ if (esl_msa_MinimGaps(msa, NULL, "-~", FALSE) != eslOK) esl_fatal(msg); /* now we're 39 columns long */ if (msa->alen != 39) esl_fatal(msg); /* many->many version */ if (esl_msa_SymConvert(msa, "DEF", "VWY") != eslOK) esl_fatal(msg); if (msa->aseq[0][4] != 'V') esl_fatal(msg); if (msa->aseq[0][5] != 'W') esl_fatal(msg); if (msa->aseq[0][23] != 'Y') esl_fatal(msg); /* F in orig col 29; -5; converted to Y */ /* bad calls */ #ifdef eslTEST_THROWING if (esl_msa_SymConvert(msa, "XXX", "XX") != eslEINVAL) esl_fatal(msg); /* check for clean fail on mismatched args */ #endif esl_msa_Destroy(msa); #ifdef eslAUGMENT_ALPHABET if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg); if (eslx_msafile_Open(&abc, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg); if (eslx_msafile_Read(mfp, &msa) != eslOK) esl_fatal(msg); eslx_msafile_Close(mfp); #ifdef eslTEST_THROWING if (esl_msa_SymConvert(msa, "Tt", "Uu") != eslEINVAL) esl_fatal(msg); /* must cleanly fail on digital mode msa */ #endif esl_msa_Destroy(msa); esl_alphabet_Destroy(abc); #endif return; } /* Exercise a boundary case: zero length MSA (alen=0) */ /* Given an input *digital* MSA as a starting point, we clone it, * column subset it to zero length, then make sure that * various MSA functions operate correctly on it; * then we textize it and test it in text mode; then we * digitize it again, and throw it away. * (The input is unchanged.) */ static void utest_ZeroLengthMSA(const char *tmpfile) { char *msg = "zero length msa unit test failed"; ESLX_MSAFILE *mfp = NULL; ESL_MSA *z1 = NULL; ESL_MSA *z2 = NULL; ESL_MSA *z3 = NULL; int *useme = NULL; int nuseme = 0; int i; char errbuf[eslERRBUFSIZE]; /* Read a text mode alignment from the tmpfile */ if (eslx_msafile_Open(NULL, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg); if (eslx_msafile_Read(mfp, &z1) != eslOK) esl_fatal(msg); eslx_msafile_Close(mfp); /* make an alen=0 text alignment by column subsetting */ nuseme = ESL_MAX(z1->alen, z1->nseq); if ((useme = malloc(sizeof(int) * nuseme)) == NULL) esl_fatal(msg); for (i = 0; i < z1->alen; i++) useme[i] = 0; if (esl_msa_ColumnSubset(z1, errbuf, useme) != eslOK) esl_fatal(msg); /* These should all no-op if alen=0*/ if (esl_msa_MinimGaps(z1, NULL, "-", FALSE) != eslOK) esl_fatal(msg); if (esl_msa_NoGaps(z1, NULL, "-") != eslOK) esl_fatal(msg); if (esl_msa_SymConvert(z1,"RY","NN") != eslOK) esl_fatal(msg); /* test sequence subsetting by removing the first sequence */ for (i = 1; i < z1->nseq; i++) useme[i] = 1; if (esl_msa_SequenceSubset(z1, useme, &z2) != eslOK) esl_fatal(msg); esl_msa_Destroy(z1); /* keep z2; we'll compare it to z3 in the end */ #ifdef eslAUGMENT_ALPHABET ESL_ALPHABET *abc; /* Now read the same alignment, in digital mode */ if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal(msg); if (eslx_msafile_Open(&abc, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal(msg); if (eslx_msafile_Read(mfp, &z1) != eslOK) esl_fatal(msg); eslx_msafile_Close(mfp); /* Now make an alen=0 alignment in digital mode */ for (i = 0; i < z1->alen; i++) useme[i] = 0; if (esl_msa_ColumnSubset(z1, errbuf, useme) != eslOK) esl_fatal(msg); /* again these should all no-op if alen=0*/ if (esl_msa_MinimGaps(z1, NULL, NULL, FALSE) != eslOK) esl_fatal(msg); if (esl_msa_NoGaps(z1, NULL, NULL) != eslOK) esl_fatal(msg); /* SymConvert throws EINVAL on a digital mode alignment */ /* test sequence subsetting by removing the first sequence */ for (i = 1; i < z1->nseq; i++) useme[i] = 1; if (esl_msa_SequenceSubset(z1, useme, &z3) != eslOK) esl_fatal(msg); esl_msa_Destroy(z1); if ((z1 = esl_msa_Clone(z3)) == NULL) esl_fatal(msg); /* z1 is now alen=0, digital */ if (esl_msa_Textize(z3) != eslOK) esl_fatal(msg); /* convert z3 back to text mode */ if (esl_msa_Compare(z2, z3) != eslOK) esl_fatal(msg); /* compare in text mode */ if (esl_msa_Digitize(abc, z2, NULL) != eslOK) esl_fatal(msg); /* now z2 is digital */ if (esl_msa_Compare(z1, z2) != eslOK) esl_fatal(msg); /* compare digital mode z1,z2 */ esl_alphabet_Destroy(abc); esl_msa_Destroy(z1); esl_msa_Destroy(z3); #endif /*eslAUGMENT_ALPHABET*/ esl_msa_Destroy(z2); free(useme); } #endif /*eslMSA_TESTDRIVE*/ /*------------------------ end of unit tests --------------------------------*/ /***************************************************************************** * 7. Test driver *****************************************************************************/ #ifdef eslMSA_TESTDRIVE /* * gcc -g -Wall -o esl_msa_utest -I. -DeslMSA_TESTDRIVE -DAUGMENT_KEYHASH esl_msa.c esl_keyhash.c easel.c -lm * gcc -g -Wall -o esl_msa_utest -I. -DeslMSA_TESTDRIVE -DAUGMENT_ALPHABET esl_msa.c esl_alphabet.c easel.c -lm * gcc -g -Wall -o esl_msa_utest -I. -DeslMSA_TESTDRIVE -DAUGMENT_SSI esl_msa.c esl_ssi.c easel.c -lm * gcc -g -Wall -o esl_msa_utest -L. -I. -DeslMSA_TESTDRIVE esl_msa.c -leasel -lm * gcc -g -Wall -o esl_msa_utest -L. -I. -DeslTEST_THROWING -DeslMSA_TESTDRIVE esl_msa.c -leasel -lm * ./msa_utest */ #include #include #include "easel.h" #ifdef eslAUGMENT_ALPHABET #include "esl_alphabet.h" #endif #ifdef eslAUGMENT_KEYHASH #include "esl_keyhash.h" #endif #ifdef eslAUGMENT_RANDOM #include "esl_random.h" #endif #ifdef eslAUGMENT_SSI #include "esl_ssi.h" #endif #include "esl_msa.h" int main(int argc, char **argv) { ESLX_MSAFILE *mfp = NULL; ESL_MSA *msa = NULL; FILE *fp = NULL; char tmpfile[16] = "esltmpXXXXXX"; /* tmpfile template */ #ifdef eslAUGMENT_ALPHABET ESL_ALPHABET *abc = NULL; #endif #ifdef eslTEST_THROWING esl_exception_SetHandler(&esl_nonfatal_handler); #endif /* Create a known Stockholm test alignment in a tempfile. */ if (esl_tmpfile_named(tmpfile, &fp) != eslOK) esl_fatal("failed to create tmpfile"); write_known_msa(fp); fclose(fp); /* Read it back in for use in tests. */ if (eslx_msafile_Open(NULL, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal("Failed to open MSA tmp file"); if (eslx_msafile_Read(mfp, &msa) != eslOK) esl_fatal("Failed to read MSA tmp file"); eslx_msafile_Close(mfp); /* Unit tests */ utest_Create(); utest_Destroy(); utest_Expand(); utest_SequenceSubset(msa); utest_MinimGaps(tmpfile); utest_NoGaps(tmpfile); utest_SymConvert(tmpfile); utest_ZeroLengthMSA(tmpfile); /* this tests in digital mode too if eslAUGMENT_ALPHABET */ esl_msa_Destroy(msa); #ifdef eslAUGMENT_ALPHABET if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("alphabet creation failed"); if (eslx_msafile_Open(&abc, tmpfile, NULL, eslMSAFILE_STOCKHOLM, NULL, &mfp) != eslOK) esl_fatal("MSA digital open failed"); if (eslx_msafile_Read(mfp, &msa) != eslOK) esl_fatal("MSA digital read failed"); eslx_msafile_Close(mfp); utest_CreateDigital(abc); utest_Digitize(abc, tmpfile); utest_Textize(abc, tmpfile); esl_alphabet_Destroy(abc); esl_msa_Destroy(msa); #endif remove(tmpfile); exit(0); /* success */ } #endif /*eslMSA_TESTDRIVE*/ /*-------------------- end of test driver ---------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_msa.c 913 2014-06-04 00:40:12Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msa.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_mem.c0000664361611702660230000007240612473612606015161 0ustar wheelerteddy/* str*()-like functions for raw memory "lines" (non-NUL terminated strings). * * Especially when we're parsing input in an ESL_BUFFER, we need to be * able to parse non-writable raw memory buffers. Because an * ESL_BUFFER may have memory mapped a file, we cannot assume that the * input is NUL-terminated, and we can't even assume it's writable (so * we can't NUL-terminate it ourselves). These functions provide * a set of utilities for parsing raw memory (in terms of a char * pointer * and a length in bytes; , by convention). * * Contents: * 1. The esl_mem*() API. * 2. Unit tests. * 3. Test driver. * 4. Copyright and license. */ #include "esl_config.h" #include #include #include "easel.h" /***************************************************************** *# 1. The esl_mem*() API. *****************************************************************/ /* Function: esl_mem_strtoi32() * Synopsis: Convert a chunk of text memory to an int32_t. * * Purpose: Convert the text starting at

to an , converting * no more than characters (the valid length of non- * terminated memory buffer

). Interpret the text as * base (2 or 10, for example). must be 2..36, * or 0. 0 is treated specially as base 8, 10, or 16, autodetected * according to the leading characters of the number format. * * Any leading whitespace is skipped. The next letter may * be a '-' for a negative number. If is 0 or 16, * the next two characters may be "0x", in which case hex base * 16 is assumed. Else if is 0 and the next * character is '0', octal base 8 is assumed. All subsequent * characters are converted to a number, until an invalid * character is reached. Upper or lower case letters are * accepted, starting at A or a, for bases over 10. For * example, In base 16, characters A-F or a-f are accepted. * The base of the representation is limited to 36 because * 'Z' or 'z' represents 35. * * The converted value is optionally returned in <*opt_val>. * The number of characters parsed (up to the first invalid * character, or , whichever comes first) is optionally * returned in <*opt_nc>. The caller can reposition a parser * to

to exactly skip past the parsed number. * * If no valid digit is found (including pathological cases * of leader-only, such as "0x" or "-"), then return , * and <*opt_nc> and <*opt_val> are both 0. * * This syntax is essentially identical to , * except that we can operate on a non-NUL-terminated * memory buffer of maximum length , rather than on a * NUL-terminated string. * * Args: p - pointer to text buffer to convert to int32_t * n - maximum number of chars to parse in

: p[0..n-1] are valid. * base - integer base. Often 10, 2, 8, or 16. Must be * <2..36>, or 0. 0 means base 8, 10, or 16 depending on * autodetected format. * *opt_nc - optRETURN: number of valid chars parsed from p. * First invalid char is p[*opt_nc]. * *opt_val - optRETURN: parsed value. * * Returns: on success. * * if no valid integer digits are found. Now * <*opt_val> and <*opt_nc> are 0. * * on an overflow error. In this case * <*opt_val> is or for an * overflow or underflow, respectively. <*opt_nc> is * set to the number of characters parsed INCLUDING * the digit that caused the overflow. * * Throws: if isn't in range <0..36>. Now * <*opt_nc> and <*opt_val> are 0. * * Note: An example of why you need this instead of * strtol(): suppose you've mmap()'ed a file to memory, * and it ends in ... "12345". You can't strtol the * end of the mmap'ed memory buffer because it is not * a NUL-terminated string. (Same goes anywhere in the file, * though elsewhere in the file you could overwrite * a NUL where you need it. At EOF of an mmap'ed() buffer, * you can't even do that.) * * sscanf() doesn't work either - I don't see a way to * limit it to a buffer of at most chars. * * I could copy

to a temporary allocated string that I * NUL-terminate, then use strtol() or suchlike, but that's * just as awful as what I've done here (rewriting * strtol()). Plus, here I get complete control of the integer * type () whereas strtol() gives me the less satisfying * . */ int esl_mem_strtoi32(char *p, esl_pos_t n, int base, int *opt_nc, int32_t *opt_val) { esl_pos_t i = 0; int32_t sign = 1; int32_t currval = 0; int32_t digit = 0; int ndigits = 0; if (base < 0 || base == 1 || base > 36) ESL_EXCEPTION(eslEINVAL, "base must be 2..36 or 0"); while (i < n && isspace(p[i])) i++; /* skip leading whitespace */ if (i < n && p[i] == '-') { sign = -1; i++; } if ((base == 0 || base == 16) && i < n-1 && p[i] == '0' && p[i+1] == 'x') { i += 2; base = 16; } else if (base == 0 && i < n && p[i] == '0') { i += 1; base = 8; } else if (base == 0) { base = 10; } for (ndigits = 0; i < n; i++, ndigits++) { if (isdigit(p[i])) digit = p[i] - '0'; else if (isupper(p[i])) digit = 10 + (p[i] - 'A'); else if (islower(p[i])) digit = 10 + (p[i] - 'a'); else break; if (digit >= base) break; if (sign == 1) { if (currval > (INT32_MAX - digit) / base) { if (opt_val) *opt_val = INT32_MAX; if (opt_nc) *opt_nc = i+1; return eslERANGE; } currval = currval * base + digit; } else { if (currval < (INT32_MIN + digit) / base) { if (opt_val) *opt_val = INT32_MIN; if (opt_nc) *opt_nc = i+1; return eslERANGE; } currval = currval * base - digit; } } if (opt_nc) { *opt_nc = (ndigits ? i : 0); } if (opt_val) { *opt_val = currval; } return (ndigits ? eslOK : eslEFORMAT); } /* Function: esl_memnewline() * Synopsis: Find next newline in memory. * * Purpose: Given a memory buffer <*m> of bytes, delimit a * next line by finding the next newline character(s). * Store the number of bytes in the line (exclusive of * the newline character(s)) in <*ret_nline>. Store * the number of bytes in the newline in <*ret_nterm>. * * If no newline is found, and , and the * return status is . * * Currently we assume newlines are either UNIX-style \verb+\n+ * or Windows-style \verb+\r\n+, in this implementation. * * Caller should not rely on this, though. Caller may only * assume that a newline is an arbitrary one- or two-byte * code. * * For example, if <*m> = \verb+"line one\r\nline two"+, * is 8 and is 2. If <*m> = \verb+"try two\ntry three"+, * is 7 and is 1. If <*m> = "attempt * four", is 12 and is 0. * * In cases where the caller may have an incompletely read * buffer, it should be careful of cases where one possible * newline may be a prefix of another; for example, suppose * a file has \verb+"line one\r\nline two"+, but we only input the * buffer \verb+"line one\r"+ at first. The \verb+"\r"+ looks like an old * MacOS newline. Now we read more input, and we think the * buffer is \verb+"\nline two"+. Now we think the \verb+"\n"+ is a UNIX * newline. The result is that we read two newlines where * there's only one. Instead, caller should check for the * case of nterm==1 at the end of its buffer, and try to * extend the buffer. See for an * example. * * Args: m - ptr to memory buffer * n - length of p in bytes * *ret_nline - length of line found starting at p[0], exclusive of newline; up to n * *ret_nterm - # of bytes in newline code: 1 or 2, or 0 if no newline found * * Returns: on success. Now <*ret_nline> is the number of * bytes in the next line (exclusive of newline) and * <*ret_nterm> is the number of bytes in the newline code * (1 or 2). Thus the next line is , and * the line after this starts at . * * if no newline is found. Now <*ret_nline> is , * and <*ret_nterm> is 0. * * Xref: http://en.wikipedia.org/wiki/Newline */ int esl_memnewline(const char *m, esl_pos_t n, esl_pos_t *ret_nline, int *ret_nterm) { char *ptr = memchr(m, '\n', n); if (ptr == NULL) { *ret_nline = n; *ret_nterm = 0; } else if (ptr > m && *(ptr-1) == '\r') { *ret_nline = ptr-m-1; *ret_nterm = 2; } else { *ret_nline = ptr-m; *ret_nterm = 1; } return eslOK; } /* Function: esl_memtok() * Synopsis: Get next delimited token from a line. * * Purpose: Given references to a line and its length, <*p> and <*n>, * find the next token delimited by any of the characters * in the string . Set <*ret_tok> to point at the * start of the token, and <*ret_toklen> to its length. * Increment <*p> to point to the next non-delim character * that follows, and decrement <*n> by the same, * so that <*p> and <*n> are ready for another * call to . * * Three differences between and : * first, expects a NUL-terminated string, * whereas 's line does not need to be * NUL-terminated; second, does not modify * the string, whereas writes NUL bytes * to delimit tokens; third, skips trailing * characters as well as leading ones. * * Args: *p - pointer to line; * will be incremented to next byte after token. * *n - pointer to line length, in bytes; * will be decremented * delim - delimiter chars (example: " \t\r\n") * *ret_tok - RETURN: ptr to token found in <*p> * *ret_toklen - RETURN: length of token * * Returns: if a delimited token is found. * if not; now <*ret_tok> is and <*ret_toklen> is <0>. * */ int esl_memtok(char **p, esl_pos_t *n, const char *delim, char **ret_tok, esl_pos_t *ret_toklen) { char *s = *p; esl_pos_t so, xo, eo; for (so = 0; so < *n; so++) if (strchr(delim, s[so]) == NULL) break; for (xo = so; xo < *n; xo++) if (strchr(delim, s[xo]) != NULL) break; for (eo = xo; eo < *n; eo++) if (strchr(delim, s[eo]) == NULL) break; if (so == *n) { *ret_tok = NULL; *ret_toklen = 0; return eslEOL; } else { *p += eo; *n -= eo; *ret_tok = s + so; *ret_toklen = xo - so; return eslOK; } } /* Function: esl_memspn() * Synopsis: Finds length of prefix consisting only of given chars * * Purpose: For line

of length , return the length of * a prefix that consists only of characters in the * string . * * A commonly used idiom for "buffer is all whitespace" * is . */ esl_pos_t esl_memspn(char *p, esl_pos_t n, const char *allow) { esl_pos_t so; for (so = 0; so < n; so++) if (strchr(allow, p[so]) == NULL) break; return so; } /* Function: esl_memcspn() * Synopsis: Finds length of prefix consisting of anything other than given chars * * Purpose: For line

of length , return the length of * a prefix that consists only of characters NOT in the * string . */ esl_pos_t esl_memcspn(char *p, esl_pos_t n, const char *disallow) { esl_pos_t so; for (so = 0; so < n; so++) if (strchr(disallow, p[so]) != NULL) break; return so; } /* Function: esl_memstrcmp() * Synopsis: Compare a memory line and string for equality. * * Purpose: Compare line

of length to a NUL-terminated * string , and return TRUE if they are exactly * equal: and . * Else, return FALSE. */ int esl_memstrcmp(const char *p, esl_pos_t n, const char *s) { esl_pos_t pos; if (p == NULL && n == 0 && (s == NULL || s[0] == '\0')) return TRUE; if (!p || !s) return FALSE; for (pos = 0; pos < n && s[pos] != '\0'; pos++) if (p[pos] != s[pos]) return FALSE; if (pos != n) return FALSE; if (s[pos] != '\0') return FALSE; return TRUE; } /* Function: esl_memstrpfx() * Synopsis: Return TRUE if memory line starts with string. * * Purpose: Compare line

of length to a NUL-terminated * string . Return TRUE if the prefix of

exactly * matches up to its NUL sentinel byte. Else, * return FALSE. */ int esl_memstrpfx(const char *p, esl_pos_t n, const char *s) { esl_pos_t pos; if (!p || !s) return FALSE; for (pos = 0; pos < n && s[pos] != '\0'; pos++) if (p[pos] != s[pos]) return FALSE; if (s[pos] != '\0') return FALSE; return TRUE; } /* Function: esl_memstrcontains() * Synopsis: Return TRUE if memory line matches a string. * * Purpose: Compare line

of length to NUL-terminated * string . Return if

contains an exact * match to at any position. */ int esl_memstrcontains(const char *p, esl_pos_t n, const char *s) { esl_pos_t s0, pos; if (! p || ! s) return FALSE; for (s0 = 0; s0 < n; s0++) { for (pos = 0; s0+pos < n && s[pos] != '\0'; pos++) if (p[s0+pos] != s[pos]) break; if (s[pos] == '\0') return TRUE; } return FALSE; } /* Function: esl_memstrdup() * Synopsis: Duplicate a memory line as a NUL-terminated string. * * Purpose: Given memory line

of length , duplicate it * as a NUL-terminated string; return the new string * in <*ret_s>. * * Returns: on success. * * Throws: on allocation failure; now <*ret_s> is . */ int esl_memstrdup(const char *p, esl_pos_t n, char **ret_s) { char *s = NULL; int status; if (! p) { *ret_s = NULL; return eslOK; } ESL_ALLOC(s, sizeof(char) * (n+1)); memcpy(s, p, n); s[n] = '\0'; *ret_s = s; return eslOK; ERROR: *ret_s = NULL; return status; } /* Function: esl_memstrcpy() * Synopsis: Copy a memory line as a string. * * Purpose: Given memory line

of length , copy * it to and NUL-terminate it. Caller must * be sure that is already allocated for * at least bytes. * * Returns: on success. */ int esl_memstrcpy(const char *p, esl_pos_t n, char *dest) { memcpy(dest, p, n); dest[n] = '\0'; return eslOK; } /* Function: esl_memtod() * Synopsis: esl_mem equivalent to strtod(). * * Purpose: Given a buffer

of length , convert it to a * double-precision floating point value, just as * would do for a NUL-terminated string. * * Returns: on success, and <*ret_val> contains the * converted value. * * Throws: on allocation error, and <*ret_val> is 0. */ int esl_memtod(const char *p, esl_pos_t n, double *ret_val) { char fixedbuf[128]; char *bigbuf = NULL; int status; if (n < 128) { memcpy(fixedbuf, p, sizeof(char) * n); fixedbuf[n] = '\0'; *ret_val = strtod(fixedbuf, NULL); return eslOK; } else { ESL_ALLOC(bigbuf, sizeof(char) * (n+1)); memcpy(bigbuf, p, sizeof(char) * n); bigbuf[n] = '\0'; *ret_val = strtod(fixedbuf, NULL); free(bigbuf); return eslOK; } ERROR: *ret_val = 0.; return status; } /* Function: esl_memtof() * Synopsis: esl_mem equivalent to strtod(), for a float * * Purpose: Given a buffer

of length , convert it to a * single-precision floating point value, just as * would do for a NUL-terminated string. * * Returns: on success, and <*ret_val> contains the * converted value. * * Throws: on allocation error, and <*ret_val> is 0. */ int esl_memtof(const char *p, esl_pos_t n, float *ret_val) { char fixedbuf[128]; char *bigbuf = NULL; int status; if (n < 128) { memcpy(fixedbuf, p, sizeof(char) * n); fixedbuf[n] = '\0'; *ret_val = (float) strtod(fixedbuf, NULL); return eslOK; } else { ESL_ALLOC(bigbuf, sizeof(char) * (n+1)); memcpy(bigbuf, p, sizeof(char) * n); bigbuf[n] = '\0'; *ret_val = (float) strtod(fixedbuf, NULL); free(bigbuf); return eslOK; } ERROR: *ret_val = 0.; return status; } /* Function: esl_mem_IsReal() * Synopsis: Return TRUE if

is a real number; else FALSE. * * Purpose: If the memory

of bytes is convertible * to a floating point real number by the rules of * atof(), return TRUE; else return FALSE. * * Xref: easel.c::esl_str_IsReal() for string version. */ int esl_mem_IsReal(const char *p, esl_pos_t n) { int gotdecimal = 0; int gotexp = 0; int gotreal = 0; if (!p || !n) return FALSE; while (n && isspace((int) *p)) { p++; n--; } /* skip leading whitespace */ if (n && (*p == '-' || *p == '+')) { p++; n--; } /* skip leading sign */ /* Examine remainder for garbage. Allowed one '.' and * one 'e' or 'E'; if both '.' and e/E occur, '.' * must be first. */ while (n) { if (isdigit((int) (*p))) gotreal++; else if (*p == '.') { if (gotdecimal) return FALSE; /* can't have two */ if (gotexp) return FALSE; /* e/E preceded . */ else gotdecimal++; } else if (*p == 'e' || *p == 'E') { if (gotexp) return FALSE; /* can't have two */ else gotexp++; } else if (isspace((int) (*p))) break; p++; n--; } while (n && isspace((int) *p)) { p++; n--; } /* skip trailing whitespace */ return ( (n == 0 && gotreal) ? TRUE : FALSE); } /*----------------- end, esl_mem*() API ------------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ #ifdef eslMEM_BENCHMARK #include "esl_config.h" #include #include "easel.h" #include "esl_buffer.h" #include "esl_getopts.h" #include "esl_stopwatch.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for mem module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_STOPWATCH *w = esl_stopwatch_Create(); char *infile = esl_opt_GetArg(go, 1); ESL_BUFFER *bf = NULL; int64_t nlines = 0; int64_t ntokens = 0; int64_t nchar = 0; char *p, *tok; esl_pos_t n, toklen; int status; esl_stopwatch_Start(w); if ( esl_buffer_Open(infile, NULL, &bf) != eslOK) esl_fatal("open failed"); while ( (status = esl_buffer_GetLine(bf, &p, &n)) == eslOK) { nlines++; while ( (status = esl_memtok(&p, &n, " \t", &tok, &toklen)) == eslOK) { ntokens++; nchar += toklen; } if (status != eslEOL) esl_fatal("memtok failure"); } if (status != eslEOF) esl_fatal("GetLine failure"); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, NULL); printf("lines = %" PRId64 "\n", nlines); printf("tokens = %" PRId64 "\n", ntokens); printf("chars = %" PRId64 "\n", nchar); esl_buffer_Close(bf); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; } #endif /*eslMEM_BENCHMARK*/ /*---------------- end, benchmark driver ------------------------*/ /***************************************************************** * 2. Unit tests *****************************************************************/ #ifdef eslMEM_TESTDRIVE static void utest_mem_strtoi32(void) { char msg[] = "esl_mem_strtoi32() unit test failed"; int nc; int32_t val; int status; if ( (status = esl_mem_strtoi32("-1234", 5, 10, &nc, &val)) != eslOK || nc != 5 || val != -1234) esl_fatal(msg); if ( (status = esl_mem_strtoi32("\t -1234", 8, 10, &nc, &val)) != eslOK || nc != 8 || val != -1234) esl_fatal(msg); if ( (status = esl_mem_strtoi32("1234", 4, 0, &nc, &val)) != eslOK || nc != 4 || val != 1234) esl_fatal(msg); if ( (status = esl_mem_strtoi32("12345", 4, 0, &nc, &val)) != eslOK || nc != 4 || val != 1234) esl_fatal(msg); if ( (status = esl_mem_strtoi32(" 0xff", 5, 0, &nc, &val)) != eslOK || nc != 5 || val != 255) esl_fatal(msg); if ( (status = esl_mem_strtoi32(" 0777", 4, 0, &nc, &val)) != eslOK || nc != 4 || val != 63) esl_fatal(msg); if ( (status = esl_mem_strtoi32("FFGG", 4, 16, &nc, &val)) != eslOK || nc != 2 || val != 255) esl_fatal(msg); if ( (status = esl_mem_strtoi32("0xffff", 6, 0, &nc, &val)) != eslOK || nc != 6 || val != 65535) esl_fatal(msg); if ( (status = esl_mem_strtoi32("0xffffff", 8, 0, &nc, &val)) != eslOK || nc != 8 || val != 16777215) esl_fatal(msg); if ( (status = esl_mem_strtoi32(" 2147483647", 11, 0, &nc, &val)) != eslOK || nc != 11 || val != INT32_MAX) esl_fatal(msg); if ( (status = esl_mem_strtoi32("-2147483648", 11, 0, &nc, &val)) != eslOK || nc != 11 || val != INT32_MIN) esl_fatal(msg); if ( (status = esl_mem_strtoi32(" 2147483648", 11, 0, &nc, &val)) != eslERANGE || nc != 11 || val != INT32_MAX) esl_fatal(msg); if ( (status = esl_mem_strtoi32("-2147483649", 11, 0, &nc, &val)) != eslERANGE || nc != 11 || val != INT32_MIN) esl_fatal(msg); if ( (status = esl_mem_strtoi32(" 214748364800", 13, 0, &nc, &val)) != eslERANGE || nc != 11 || val != INT32_MAX) esl_fatal(msg); if ( (status = esl_mem_strtoi32("-214748364900", 13, 0, &nc, &val)) != eslERANGE || nc != 11 || val != INT32_MIN) esl_fatal(msg); if ( (status = esl_mem_strtoi32(" 0x1234", 3, 16, &nc, &val)) != eslEFORMAT || nc != 0 || val != 0) esl_fatal(msg); if ( (status = esl_mem_strtoi32("09999999", 7, 0, &nc, &val)) != eslEFORMAT || nc != 0 || val != 0) esl_fatal(msg); return; } static void utest_memtok(void) { char msg[] = "esl_memtok() unit test failed"; char *teststring; esl_pos_t n; char *s; char *tok; esl_pos_t toklen; if (esl_strdup("This is\t a sentence.", -1, &teststring) != eslOK) esl_fatal(msg); s = teststring; n = strlen(teststring); if (esl_memtok(&s, &n, " ", &tok, &toklen) != eslOK) esl_fatal(msg); if (toklen != 4) esl_fatal(msg); if (memcmp(tok, "This", toklen) != 0) esl_fatal(msg); if (*s != 'i') esl_fatal(msg); if (esl_memtok(&s, &n, " \t", &tok, &toklen) != eslOK) esl_fatal(msg); if (toklen != 2) esl_fatal(msg); if (memcmp(tok, "is", toklen) != 0) esl_fatal(msg); if (*s != 'a') esl_fatal(msg); if (esl_memtok(&s, &n, "\n", &tok, &toklen) != eslOK) esl_fatal(msg); if (toklen != 11) esl_fatal(msg); if (memcmp(tok, "a sentence.", toklen) != 0) esl_fatal(msg); if (*s != '\0') esl_fatal(msg); if (n != 0) esl_fatal(msg); if (esl_memtok(&s, &n, "\n", &tok, &toklen) != eslEOL) esl_fatal(msg); if (toklen != 0) esl_fatal(msg); if (tok != NULL) esl_fatal(msg); free(teststring); return; } /* memspn, memcspn() */ static void utest_memspn_memcspn(void) { char msg[] = "memspn/memcspn unit test failed"; char test1[] = " this is a test"; char *p; esl_pos_t n; p = test1; n = 13; /* so the memory is " this is a t" */ if (esl_memspn (p, n, " \t\n\r") != 2) esl_fatal(msg); if (esl_memcspn(p, n, " \t\n\r") != 0) esl_fatal(msg); p = test1+2; n = 11; /* "this is a t" */ if (esl_memspn (p, n, " \t\n\r") != 0) esl_fatal(msg); if (esl_memcspn(p, n, " \t\n\r") != 4) esl_fatal(msg); p = test1; n = 2; if (esl_memspn (p, n, " \t\n\r") != 2) esl_fatal(msg); if (esl_memcspn(p, n, " \t\n\r") != 0) esl_fatal(msg); p = test1+2; n = 4; if (esl_memspn (p, n, " \t\n\r") != 0) esl_fatal(msg); if (esl_memcspn(p, n, " \t\n\r") != 4) esl_fatal(msg); } /* memstrcmp/memstrpfx */ static void utest_memstrcmp_memstrpfx(void) { char msg[] = "memstrcmp/memstrpfx unit test failed"; char test[] = "this is a test"; char *p; esl_pos_t n; p = test; n = strlen(p); if (! esl_memstrcmp(p, n, test)) esl_fatal(msg); if ( esl_memstrcmp(p, n, "this")) esl_fatal(msg); if (! esl_memstrpfx(p, n, "this")) esl_fatal(msg); if ( esl_memstrpfx(p, n, "that")) esl_fatal(msg); p = test; n = 2; /* now p is just "th" */ if (! esl_memstrcmp(p, n, "th")) esl_fatal(msg); if ( esl_memstrcmp(p, n, test)) esl_fatal(msg); if (! esl_memstrpfx(p, n, "th")) esl_fatal(msg); if ( esl_memstrpfx(p, n, "this")) esl_fatal(msg); /* special cases involving NULLs */ p = test; n = strlen(p); if (! esl_memstrcmp(NULL, 0, NULL)) esl_fatal(msg); if ( esl_memstrcmp(NULL, 0, test)) esl_fatal(msg); if ( esl_memstrcmp(p, n, NULL)) esl_fatal(msg); if ( esl_memstrpfx(NULL, 0, NULL)) esl_fatal(msg); if ( esl_memstrpfx(NULL, 0, "this")) esl_fatal(msg); if ( esl_memstrpfx(p, n, NULL)) esl_fatal(msg); } static void utest_memstrcontains(void) { char msg[] = "memstrcontains unit test failed"; char test[] = "CLUSTAL W (1.83) multiple sequence alignment"; char *p; esl_pos_t n; p = test; n = strlen(p); if (! esl_memstrcontains(p, n, "multiple sequence alignment")) esl_fatal(msg); if (! esl_memstrcontains(p, n, "CLUSTAL")) esl_fatal(msg); if ( esl_memstrcontains(p, n, "alignmentx")) esl_fatal(msg); } #endif /*eslMEM_TESTDRIVE*/ /*------------------ end, unit tests ----------------------------*/ /***************************************************************** * 3. Test driver *****************************************************************/ #ifdef eslMEM_TESTDRIVE #include "esl_config.h" #include #include "easel.h" #include "esl_mem.h" #include "esl_getopts.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgrp */ {"-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show help and usage", 0}, { 0,0,0,0,0,0,0,0,0,0}, }; static char usage[] = "[-options]"; static char banner[] = "test driver for mem module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); utest_mem_strtoi32(); utest_memtok(); utest_memspn_memcspn(); utest_memstrcmp_memstrpfx(); utest_memstrcontains(); esl_getopts_Destroy(go); return 0; } #endif /* eslMEM_TESTDRIVE */ /*------------------ end, test driver ---------------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_mem.c 766 2012-06-04 13:11:51Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_mem.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_dirichlet.h0000664361611702660230000000702712473612606016354 0ustar wheelerteddy/* Functions relevant to Beta, gamma, and Dirichlet densities, * and simple and mixture Dirichlet priors. * * SRE, Tue Nov 2 14:35:06 2004 [St. Louis] * SVN $Id: esl_dirichlet.h 883 2013-08-17 03:37:45Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_dirichlet.h $ */ #ifndef eslDIRICHLET_INCLUDED #define eslDIRICHLET_INCLUDED /* Structure: MIXDCHLET * * A mixture Dirichlet density, usually used as a prior * for a multinomial model (turning count vectors into probability * parameters). */ typedef struct { /*::cexcerpt::dirichlet_mixdchlet::begin::*/ double *pq; /* mixture coefficients pq[0..N-1] */ double **alpha; /* Dirichlet params alpha[0..N-1][0..K-1] */ int N; /* number of mixtures, e.g. 9 for Sjolander */ int K; /* alphabet size, e.g. 20 */ /*::cexcerpt::dirichlet_mixdchlet::end::*/ } ESL_MIXDCHLET; extern ESL_MIXDCHLET *esl_mixdchlet_Create(int N, int K); extern int esl_mixdchlet_Compare(ESL_MIXDCHLET *d1, ESL_MIXDCHLET *d2, double tol); extern int esl_mixdchlet_Copy(ESL_MIXDCHLET *d, ESL_MIXDCHLET *d_dst); extern int esl_mixdchlet_Dump(FILE *fp, ESL_MIXDCHLET *d); extern void esl_mixdchlet_Destroy(ESL_MIXDCHLET *pri); extern int esl_mixdchlet_MPParameters(double *c, int K, ESL_MIXDCHLET *pri, double *mix, double *p); extern int esl_mixdchlet_BILD_score(double *c, int K, int N, ESL_MIXDCHLET *pri, double *mix, double *bg, double *q); extern int esl_dirichlet_LogProbData(double *c, double *alpha, int K, double *ret_answer); extern int esl_dirichlet_LogProbData_Mixture(double *c, ESL_MIXDCHLET *d, double *ret_answer); extern int esl_dirichlet_LogProbProbs(double *p, double *alpha, int K, double *ret_answer); /* Optional fitting code, when augmented by minimizing module. */ #ifdef eslAUGMENT_MINIMIZER #include "esl_minimizer.h" extern int esl_mixdchlet_Fit(double **c, int nc, ESL_MIXDCHLET *d, int be_verbose); #endif /*eslAUGMENT_MINIMIZER*/ /* Optional sampling code, when augmented by random module. */ #ifdef eslAUGMENT_RANDOM #include extern int esl_dirichlet_DSample(ESL_RANDOMNESS *r, double *alpha, int K, double *p); extern int esl_dirichlet_FSample(ESL_RANDOMNESS *r, float *alpha, int K, float *p); extern int esl_dirichlet_DSampleUniform(ESL_RANDOMNESS *r, int K, double *p); extern int esl_dirichlet_FSampleUniform(ESL_RANDOMNESS *r, int K, float *p); extern int esl_dirichlet_SampleBeta(ESL_RANDOMNESS *r, double theta1, double theta2, double *ret_answer); #endif /*eslAUGMENT_RANDOM*/ /* Optional file input code, when augmented by fileparser module */ #ifdef eslAUGMENT_FILEPARSER #include extern int esl_mixdchlet_Read(ESL_FILEPARSER *efp, ESL_MIXDCHLET **ret_pri); extern int esl_mixdchlet_Write(FILE *fp, ESL_MIXDCHLET *d); #endif /*eslAUGMENT_FILEPARSER*/ #endif /*eslDIRICHLET_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_msaweight.h0000664361611702660230000000207712473612607016376 0ustar wheelerteddy/* Sequence weighting algorithms. * * SRE, Sun Nov 5 09:11:13 2006 [Janelia] * SVN $Id: esl_msaweight.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_msaweight.h $ */ #ifndef eslMSAWEIGHT_INCLUDED #define eslMSAWEIGHT_INCLUDED #include "esl_msa.h" extern int esl_msaweight_GSC(ESL_MSA *msa); extern int esl_msaweight_PB(ESL_MSA *msa); extern int esl_msaweight_BLOSUM(ESL_MSA *msa, double maxid); extern int esl_msaweight_IDFilter(const ESL_MSA *msa, double maxid, ESL_MSA **ret_newmsa); #endif /*eslMSAWEIGHT_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_minimizer.tex0000664361611702660230000000036112473612606016753 0ustar wheelerteddy \subsection{The minimizer API} The \eslmod{minimizer} API has just one function: \ccode{esl\_min\_ConjugateGradientDescent()}. \subsection{Example of using the minimizer API} The code sample below \input{cexcerpts/minimizer_example} hmmer-3.1b2/easel/esl_mpi.h0000664361611702660230000000663012473612606015171 0ustar wheelerteddy/* Support for MPI parallelization. * */ #if defined(HAVE_MPI) && defined(eslLIBRARY) #ifndef eslMPI_INCLUDED #define eslMPI_INCLUDED #include #include "esl_alphabet.h" #include "esl_msa.h" #include "esl_sq.h" #include "esl_stopwatch.h" /* Many MPI implementations are not MPI2.2 compliant, and do not * support new MPI2.2 datatypes; work around that absence. [J10/152] * This configuration is better here than esl_config.h.in, because * we need to #include first to see if the system MPI does * the right thing, and esl_config.h.in is intended to be included * BEFORE any system includes. */ #if MPI_VERSION < 2 || MPI_SUBVERSION < 2 #ifndef MPI_INT64_T #define MPI_INT64_T MPI_LONG_LONG_INT #endif #ifndef MPI_UINT64_T #define MPI_UINT64_T MPI_UNSIGNED_LONG_LONG #endif #ifndef MPI_UINT32_T #define MPI_UINT32_T MPI_UNSIGNED #endif #ifndef MPI_INT16_T #define MPI_INT16_T MPI_SHORT #endif #ifndef MPI_UINT8_T #define MPI_UINT8_T MPI_UNSIGNED_CHAR #endif #endif /*MPI_VERSION,MPI_SUBVERSION*/ /* 1. Communicating optional arrays */ extern int esl_mpi_PackOpt(void *inbuf, int incount, MPI_Datatype type, void *pack_buf, int pack_buf_size, int *position, MPI_Comm comm); extern int esl_mpi_PackOptSize(void *inbuf, int incount, MPI_Datatype type, MPI_Comm comm, int *ret_n); extern int esl_mpi_UnpackOpt(void *pack_buf, int pack_buf_size, int *pos, void **outbuf, int *opt_n, MPI_Datatype type, MPI_Comm comm); /* 2. Communicating ESL_SQ (single sequences) */ extern int esl_sq_MPISend(ESL_SQ *sq, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc); extern int esl_sq_MPIPackSize(ESL_SQ *sq, MPI_Comm comm, int *ret_n); extern int esl_sq_MPIPack(ESL_SQ *sq, char *buf, int n, int *pos, MPI_Comm comm); extern int esl_sq_MPIUnpack(const ESL_ALPHABET *abc, char *buf, int n, int *pos, MPI_Comm comm, ESL_SQ **ret_sq); extern int esl_sq_MPIRecv(int source, int tag, MPI_Comm comm, const ESL_ALPHABET *abc, char **buf, int *nalloc, ESL_SQ **ret_sq); /* 3. Communicating ESL_MSA (multiple sequence alignments) */ extern int esl_msa_MPISend(const ESL_MSA *msa, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc); extern int esl_msa_MPIPackSize(const ESL_MSA *msa, MPI_Comm comm, int *ret_n); extern int esl_msa_MPIPack(const ESL_MSA *msa, char *buf, int n, int *position, MPI_Comm comm); extern int esl_msa_MPIUnpack(const ESL_ALPHABET *abc, char *buf, int n, int *pos, MPI_Comm comm, ESL_MSA **ret_msa); extern int esl_msa_MPIRecv(int source, int tag, MPI_Comm comm, const ESL_ALPHABET *abc, char **buf, int *nalloc, ESL_MSA **ret_msa); /* 4. Communicating ESL_STOPWATCH (process timing) */ extern int esl_stopwatch_MPIReduce(ESL_STOPWATCH *w, int root, MPI_Comm comm); #endif /*eslMPI_INCLUDED*/ #endif /*HAVE_MPI && eslLIBRARY*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SRE, Sat Jun 2 09:07:25 2007 [Janelia] * SVN $Id: esl_mpi.h 842 2013-01-06 16:38:46Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_mpi.h $ *****************************************************************/ hmmer-3.1b2/easel/00README0000664361611702660230000000233012473612604014377 0ustar wheelerteddyEasel - a library of C functions for biological sequence analysis http://easel.janelia.org/ Version h3.1b2; February 2015 Copyright (C) 2015 Howard Hughes Medical Institute. ------------------------------------------------------------------ Easel is an ANSI C code library for computational analysis of biological sequences using probabilistic models. Easel is used by HMMER, the profile hidden Markov model software that underlies the Pfam protein families database, and by Infernal, the profile stochastic context-free grammar software that underlies the Rfam RNA family database. Easel aims to make similar applications more robust and easier to develop, by providing a set of reusable, documented, and well-tested functions. Other files to read in the top-level source directory: INSTALL Brief installation instructions. Userguide.pdf The Easel User's Guide. RELEASE-NOTES Notes for this release. COPYRIGHT Copyright and license information. LICENSE The Janelia Farm Software License. To get started after installation, see the Easel User's Guide (Userguide.pdf). ------------------------------------------------------------------ Sean Eddy HHMI Janelia Farm Research Campus hmmer-3.1b2/easel/formats/0000775361611702660230000000000012473272230015031 5ustar wheelerteddyhmmer-3.1b2/easel/formats/genbank.bad.10000664361611702660230000000467312473612610017257 0ustar wheelerteddyGBSMP.SEQ Genetic Sequence Data Bank 15 December 1992 GenBank Flat File Release 74.0 Structural RNA Sequences 2 loci, 236 bases, from 2 reported sequences LOCUS AAURRA 118 bp ss-rRNA RNA 16-JUN-1986 DEFINITION A.auricula-judae (mushroom) 5S ribosomal RNA. ACCESSION K03160 VERSION K03160.1 GI:173593 KEYWORDS 5S ribosomal RNA; ribosomal RNA. SOURCE A.auricula-judae (mushroom) ribosomal RNA. ORGANISM Auricularia auricula-judae Eukaryota; Fungi; Eumycota; Basidiomycotina; Phragmobasidiomycetes; Heterobasidiomycetidae; Auriculariales; Auriculariaceae. REFERENCE 1 (bases 1 to 118) AUTHORS Huysmans,E., Dams,E., Vandenberghe,A. and De Wachter,R. TITLE The nucleotide sequences of the 5S rRNAs of four mushrooms and their use in studying the phylogenetic position of basidiomycetes among the eukaryotes JOURNAL Nucleic Acids Res. 11, 2871-2880 (1983) FEATURES Location/Qualifiers rRNA 1..118 /note="5S ribosomal RNA" BASE COUNT 27 a 34 c 34 g 23 t ORIGIN 5' end of mature rRNA. 1 atccacggcc ataggactct gaaagcactg catcccgtcc gatctgcaaa gttaaccaga% 61 gtaccgccca gttagtacca cggtggggga ccacgcggga atcctgggtg ctgtggtt // LOCUS ABCRRAA 118 bp ss-rRNA RNA 15-SEP-1990 DEFINITION Acetobacter sp. (strain MB 58) 5S ribosomal RNA, complete sequence. ACCESSION M34766 VERSION M34766.1 GI:173603 KEYWORDS 5S ribosomal RNA. SOURCE Acetobacter sp. (strain MB 58) rRNA. ORGANISM Acetobacter sp. Prokaryotae; Gracilicutes; Scotobacteria; Aerobic rods and cocci; Azotobacteraceae. REFERENCE 1 (bases 1 to 118) AUTHORS Bulygina,E.S., Galchenko,V.F., Govorukhina,N.I., Netrusov,A.I., Nikitin,D.I., Trotsenko,Y.A. and Chumakov,K.M. TITLE Taxonomic studies of methylotrophic bacteria by 5S ribosomal RNA sequencing JOURNAL J. Gen. Microbiol. 136, 441-446 (1990) FEATURES Location/Qualifiers rRNA 1..118 /note="5S ribosomal RNA" BASE COUNT 27 a 40 c 32 g 17 t 2 others ORIGIN 1 gatctggtgg ccatggcggg agcaaatcag ccgatcccat cccgaactcg gccgtcaaat 61 gccccagcgc ccatgatact ctgcctcaag gcacggaaaa gtcggtcgcc gccagayy // hmmer-3.1b2/easel/formats/stockholm.10000664361611702660230000000005412473612610017115 0ustar wheelerteddy# STOCKHOLM 1.0 seq1 GAATTC seq2 GAATTC // hmmer-3.1b2/easel/formats/.dropbox.attr0000775361611702660230000000000212473272026017456 0ustar wheelerteddy{}hmmer-3.1b2/easel/formats/fasta.odd.10000664361611702660230000000007412473612610016757 0ustar wheelerteddy>what happens with empty sequences? >we should accept them. hmmer-3.1b2/easel/formats/fasta.bad.10000664361611702660230000000005612473612610016737 0ustar wheelerteddy>what happens with a bad character? ACGT1ACGT hmmer-3.1b2/easel/formats/uniprot0000664361611702660230000002231712473612610016461 0ustar wheelerteddyID SNRPA_DROME Reviewed; 216 AA. AC P43332; Q9W4D7; DT 01-NOV-1995, integrated into UniProtKB/Swiss-Prot. DT 01-NOV-1995, sequence version 1. DT 15-DEC-2009, entry version 91. DE RecName: Full=U1 small nuclear ribonucleoprotein A; DE Short=U1 snRNP protein A; DE Short=U1-A; DE AltName: Full=Sex determination protein snf; GN Name=snf; Synonyms=D25, fs(1)1621, liz; ORFNames=CG4528; OS Drosophila melanogaster (Fruit fly). OC Eukaryota; Metazoa; Arthropoda; Hexapoda; Insecta; Pterygota; OC Neoptera; Endopterygota; Diptera; Brachycera; Muscomorpha; OC Ephydroidea; Drosophilidae; Drosophila; Sophophora. OX NCBI_TaxID=7227; RN [1] RP NUCLEOTIDE SEQUENCE [MRNA]. RX MEDLINE=92350664; PubMed=1386424; DOI=10.1093/nar/20.14.3645; RA Harper D.S., Fresco L.D., Keene J.D.; RT "RNA binding specificity of a Drosophila snRNP protein that shares RT sequence homology with mammalian U1-A and U2-B' proteins."; RL Nucleic Acids Res. 20:3645-3650(1992). RN [2] RP NUCLEOTIDE SEQUENCE [GENOMIC DNA / MRNA]. RC STRAIN=Oregon-R; RX MEDLINE=95011590; PubMed=7926776; RA Flickinger T.W., Salz H.K.; RT "The Drosophila sex determination gene snf encodes a nuclear protein RT with sequence and functional similarity to the mammalian U1A snRNP RT protein."; RL Genes Dev. 8:914-925(1994). RN [3] RP NUCLEOTIDE SEQUENCE [LARGE SCALE GENOMIC DNA]. RC STRAIN=Berkeley; RX MEDLINE=20196006; PubMed=10731132; DOI=10.1126/science.287.5461.2185; RA Adams M.D., Celniker S.E., Holt R.A., Evans C.A., Gocayne J.D., RA Amanatides P.G., Scherer S.E., Li P.W., Hoskins R.A., Galle R.F., RA George R.A., Lewis S.E., Richards S., Ashburner M., Henderson S.N., RA Sutton G.G., Wortman J.R., Yandell M.D., Zhang Q., Chen L.X., RA Brandon R.C., Rogers Y.-H.C., Blazej R.G., Champe M., Pfeiffer B.D., RA Wan K.H., Doyle C., Baxter E.G., Helt G., Nelson C.R., Miklos G.L.G., RA Abril J.F., Agbayani A., An H.-J., Andrews-Pfannkoch C., Baldwin D., RA Ballew R.M., Basu A., Baxendale J., Bayraktaroglu L., Beasley E.M., RA Beeson K.Y., Benos P.V., Berman B.P., Bhandari D., Bolshakov S., RA Borkova D., Botchan M.R., Bouck J., Brokstein P., Brottier P., RA Burtis K.C., Busam D.A., Butler H., Cadieu E., Center A., Chandra I., RA Cherry J.M., Cawley S., Dahlke C., Davenport L.B., Davies P., RA de Pablos B., Delcher A., Deng Z., Mays A.D., Dew I., Dietz S.M., RA Dodson K., Doup L.E., Downes M., Dugan-Rocha S., Dunkov B.C., Dunn P., RA Durbin K.J., Evangelista C.C., Ferraz C., Ferriera S., Fleischmann W., RA Fosler C., Gabrielian A.E., Garg N.S., Gelbart W.M., Glasser K., RA Glodek A., Gong F., Gorrell J.H., Gu Z., Guan P., Harris M., RA Harris N.L., Harvey D.A., Heiman T.J., Hernandez J.R., Houck J., RA Hostin D., Houston K.A., Howland T.J., Wei M.-H., Ibegwam C., RA Jalali M., Kalush F., Karpen G.H., Ke Z., Kennison J.A., Ketchum K.A., RA Kimmel B.E., Kodira C.D., Kraft C.L., Kravitz S., Kulp D., Lai Z., RA Lasko P., Lei Y., Levitsky A.A., Li J.H., Li Z., Liang Y., Lin X., RA Liu X., Mattei B., McIntosh T.C., McLeod M.P., McPherson D., RA Merkulov G., Milshina N.V., Mobarry C., Morris J., Moshrefi A., RA Mount S.M., Moy M., Murphy B., Murphy L., Muzny D.M., Nelson D.L., RA Nelson D.R., Nelson K.A., Nixon K., Nusskern D.R., Pacleb J.M., RA Palazzolo M., Pittman G.S., Pan S., Pollard J., Puri V., Reese M.G., RA Reinert K., Remington K., Saunders R.D.C., Scheeler F., Shen H., RA Shue B.C., Siden-Kiamos I., Simpson M., Skupski M.P., Smith T.J., RA Spier E., Spradling A.C., Stapleton M., Strong R., Sun E., RA Svirskas R., Tector C., Turner R., Venter E., Wang A.H., Wang X., RA Wang Z.-Y., Wassarman D.A., Weinstock G.M., Weissenbach J., RA Williams S.M., Woodage T., Worley K.C., Wu D., Yang S., Yao Q.A., RA Ye J., Yeh R.-F., Zaveri J.S., Zhan M., Zhang G., Zhao Q., Zheng L., RA Zheng X.H., Zhong F.N., Zhong W., Zhou X., Zhu S.C., Zhu X., RA Smith H.O., Gibbs R.A., Myers E.W., Rubin G.M., Venter J.C.; RT "The genome sequence of Drosophila melanogaster."; RL Science 287:2185-2195(2000). RN [4] RP GENOME REANNOTATION. RX MEDLINE=22426069; PubMed=12537572; RA Misra S., Crosby M.A., Mungall C.J., Matthews B.B., Campbell K.S., RA Hradecky P., Huang Y., Kaminker J.S., Millburn G.H., Prochnik S.E., RA Smith C.D., Tupy J.L., Whitfield E.J., Bayraktaroglu L., Berman B.P., RA Bettencourt B.R., Celniker S.E., de Grey A.D.N.J., Drysdale R.A., RA Harris N.L., Richter J., Russo S., Schroeder A.J., Shu S.Q., RA Stapleton M., Yamada C., Ashburner M., Gelbart W.M., Rubin G.M., RA Lewis S.E.; RT "Annotation of the Drosophila melanogaster euchromatic genome: a RT systematic review."; RL Genome Biol. 3:RESEARCH0083.1-RESEARCH0083.22(2002). RN [5] RP NUCLEOTIDE SEQUENCE [LARGE SCALE MRNA]. RC STRAIN=Berkeley; RX MEDLINE=22426066; PubMed=12537569; RA Stapleton M., Carlson J.W., Brokstein P., Yu C., Champe M., RA George R.A., Guarin H., Kronmiller B., Pacleb J.M., Park S., Wan K.H., RA Rubin G.M., Celniker S.E.; RT "A Drosophila full-length cDNA resource."; RL Genome Biol. 3:RESEARCH0080.1-RESEARCH0080.8(2002). CC -!- FUNCTION: Binds stem loop II of U1 snRNA. It is the first snRNP to CC interact with pre-mRNA. This interaction is required for the CC subsequent binding of U2 snRNP and the U4/U6/U5 tri-snRNP (By CC similarity). Plays a role in regulating sex-lethal splicing. CC -!- SUBUNIT: Belongs to the spliceosome where it is associated with CC snRNP U1. CC -!- INTERACTION: CC Q9V3N8:CG4103; NbExp=1; IntAct=EBI-174177, EBI-131989; CC -!- SUBCELLULAR LOCATION: Nucleus. CC -!- SIMILARITY: Belongs to the RRM U1 A/B'' family. CC -!- SIMILARITY: Contains 2 RRM (RNA recognition motif) domains. CC ----------------------------------------------------------------------- CC Copyrighted by the UniProt Consortium, see http://www.uniprot.org/terms CC Distributed under the Creative Commons Attribution-NoDerivs License CC ----------------------------------------------------------------------- DR EMBL; M89775; AAA28441.1; -; mRNA. DR EMBL; L29521; AAA28903.1; -; Genomic_DNA. DR EMBL; AE014298; AAF46017.1; -; Genomic_DNA. DR EMBL; AY061491; AAL29039.1; -; mRNA. DR PIR; A54279; A54279. DR RefSeq; NP_511045.1; -. DR UniGene; Dm.2625; -. DR PDB; 2AYM; NMR; -; A=134-216. DR PDB; 2B0G; NMR; -; A=134-216. DR PDB; 2K3K; NMR; -; A=1-104. DR PDBsum; 2AYM; -. DR PDBsum; 2B0G; -. DR PDBsum; 2K3K; -. DR SMR; P43332; 1-104. DR DIP; DIP-23676N; -. DR IntAct; P43332; 3. DR STRING; P43332; -. DR PRIDE; P43332; -. DR Ensembl; FBtr0070748; FBpp0070716; FBgn0003449; Drosophila melanogaster. DR GeneID; 31442; -. DR KEGG; dme:Dmel_CG4528; -. DR NMPDR; fig|7227.3.peg.16553; -. DR CTD; 31442; -. DR FlyBase; FBgn0003449; snf. DR InParanoid; P43332; -. DR OMA; RSLHMIF; -. DR OrthoDB; EOG9NKC31; -. DR BioCyc; DMEL-XXX-02:DMEL-XXX-02-000654-MON; -. DR NextBio; 773664; -. DR Bgee; P43332; -. DR GermOnline; CG4528; Drosophila melanogaster. DR GO; GO:0043234; C:protein complex; IPI:FlyBase. DR GO; GO:0030532; C:small nuclear ribonucleoprotein complex; IDA:FlyBase. DR GO; GO:0005681; C:spliceosomal complex; IEA:UniProtKB-KW. DR GO; GO:0000166; F:nucleotide binding; IEA:InterPro. DR GO; GO:0005515; F:protein binding; IPI:IntAct. DR GO; GO:0003723; F:RNA binding; IEA:UniProtKB-KW. DR GO; GO:0019099; P:female germ-line sex determination; NAS:FlyBase. DR GO; GO:0006397; P:mRNA processing; IEA:UniProtKB-KW. DR GO; GO:0048477; P:oogenesis; IMP:FlyBase. DR GO; GO:0007539; P:primary sex determination, soma; NAS:FlyBase. DR GO; GO:0000381; P:regulation of alternative nuclear mRNA spli...; IMP:FlyBase. DR GO; GO:0008380; P:RNA splicing; TAS:FlyBase. DR InterPro; IPR012677; a_b_plait_nuc_bd. DR InterPro; IPR000504; RRM_RNP1. DR Gene3D; G3DSA:3.30.70.330; a_b_plait_nuc_bd; 2. DR Pfam; PF00076; RRM_1; 2. DR SMART; SM00360; RRM; 2. DR PROSITE; PS50102; RRM; 2. PE 1: Evidence at protein level; KW 3D-structure; Complete proteome; mRNA processing; mRNA splicing; KW Nucleus; Repeat; Ribonucleoprotein; RNA-binding; Spliceosome. FT CHAIN 1 216 U1 small nuclear ribonucleoprotein A. FT /FTId=PRO_0000081890. FT DOMAIN 7 86 RRM 1. FT DOMAIN 142 216 RRM 2. FT VARIANT 49 49 R -> H (in allele SNF1621; sterile). FT STRAND 7 11 FT HELIX 20 30 FT HELIX 31 34 FT STRAND 37 41 FT HELIX 46 48 FT STRAND 52 58 FT HELIX 59 69 FT STRAND 73 78 FT STRAND 81 87 FT HELIX 88 95 FT TURN 97 99 FT STRAND 142 148 FT HELIX 155 162 FT STRAND 168 173 FT TURN 175 177 FT STRAND 179 186 FT HELIX 188 198 FT STRAND 201 204 FT STRAND 208 213 SQ SEQUENCE 216 AA; 24547 MW; 5B736FFE36523373 CRC64; MEMLPNQTIY INNLNEKIKK EELKKSLYAI FSQFGQILDI VALKTLKMRG QAFVIFKEIG SASNALRTMQ GFPFYDKPMQ IAYSKSDSDI VAKIKGTFKE RPKKVKPPKP APGTDEKKDK KKKPSSAENS NPNAQTEQPP NQILFLTNLP EETNEMMLSM LFNQFPGFKE VRLVPNRHDI AFVEFTTELQ SNAAKEALQG FKITPTHAMK ITFAKK // hmmer-3.1b2/easel/formats/genbank.20000664361611702660230000000431112473612610016520 0ustar wheelerteddy LOCUS AAURRA 118 bp ss-rRNA RNA 16-JUN-1986 DEFINITION A.auricula-judae (mushroom) 5S ribosomal RNA. ACCESSION K03160 VERSION K03160.1 GI:173593 KEYWORDS 5S ribosomal RNA; ribosomal RNA. SOURCE A.auricula-judae (mushroom) ribosomal RNA. ORGANISM Auricularia auricula-judae Eukaryota; Fungi; Eumycota; Basidiomycotina; Phragmobasidiomycetes; Heterobasidiomycetidae; Auriculariales; Auriculariaceae. REFERENCE 1 (bases 1 to 118) AUTHORS Huysmans,E., Dams,E., Vandenberghe,A. and De Wachter,R. TITLE The nucleotide sequences of the 5S rRNAs of four mushrooms and their use in studying the phylogenetic position of basidiomycetes among the eukaryotes JOURNAL Nucleic Acids Res. 11, 2871-2880 (1983) FEATURES Location/Qualifiers rRNA 1..118 /note="5S ribosomal RNA" BASE COUNT 27 a 34 c 34 g 23 t ORIGIN 5' end of mature rRNA. 1 atccacggcc ataggactct gaaagcactg catcccgtcc gatctgcaaa gttaaccaga 61 gtaccgccca gttagtacca cggtggggga ccacgcggga atcctgggtg ctgtggtt // LOCUS ABCRRAA 118 bp ss-rRNA RNA 15-SEP-1990 DEFINITION Acetobacter sp. (strain MB 58) 5S ribosomal RNA, complete sequence. ACCESSION M34766 VERSION M34766.1 GI:173603 KEYWORDS 5S ribosomal RNA. SOURCE Acetobacter sp. (strain MB 58) rRNA. ORGANISM Acetobacter sp. Prokaryotae; Gracilicutes; Scotobacteria; Aerobic rods and cocci; Azotobacteraceae. REFERENCE 1 (bases 1 to 118) AUTHORS Bulygina,E.S., Galchenko,V.F., Govorukhina,N.I., Netrusov,A.I., Nikitin,D.I., Trotsenko,Y.A. and Chumakov,K.M. TITLE Taxonomic studies of methylotrophic bacteria by 5S ribosomal RNA sequencing JOURNAL J. Gen. Microbiol. 136, 441-446 (1990) FEATURES Location/Qualifiers rRNA 1..118 /note="5S ribosomal RNA" BASE COUNT 27 a 40 c 32 g 17 t 2 others ORIGIN 1 gatctggtgg ccatggcggg agcaaatcag ccgatcccat cccgaactcg gccgtcaaat 61 gccccagcgc ccatgatact ctgcctcaag gcacggaaaa gtcggtcgcc gccagayy // hmmer-3.1b2/easel/formats/fasta0000664361611702660230000000131012473612610016045 0ustar wheelerteddy>SNRPA_DROME U1 small nuclear ribonucleoprotein A (U1 snRNP protein A) (U1-A) (Sex determination protein snf). MEMLPNQTIYINNLNEKIKKEELKKSLYAIFSQFGQILDIVALKTLKMRG QAFVIFKEIGSASNALRTMQGFPFYDKPMQIAYSKSDSDIVAKIKGTFKE RPKKVKPPKPAPGTDEKKDKKKKPSSAENSNPNAQTEQPPNQILFLTNLP EETNEMMLSMLFNQFPGFKEVRLVPNRHDIAFVEFTTELQSNAAKEALQG FKITPTHAMKITFAKK >SNRPA_HUMAN U1 small nuclear ribonucleoprotein A (U1 snRNP protein A) (U1A protein) (U1-A). AVPETRPNHTIYINNLNEKIKKDELKKSLYAIFSQFGQILDILVSRSLKM RGQAFVIFKEVSSATNALRSMQGFPFYDKPMRIQYAKTDSDIIAKMKGTF VERDRKREKRKPKSQETPATKKAVQGGGATPVVGAVQGPVPGMPPMTQAP RIMHHMPGQPPYMPPPGMIPPPGLAPGQIPPGAMPPQQLMPGQMPPAQPL SENPPNHILFLTNLPEETNELMLSMLFNQFPGFKEVRLVPGRHDIAFVEF DNEVQAGAARDALQGFKITQNNAMKISFAKK hmmer-3.1b2/easel/formats/wag.dat0000664361611702660230000000571312473612610016307 0ustar wheelerteddy0.551571 0.509848 0.635346 0.738998 0.147304 5.429420 1.027040 0.528191 0.265256 0.0302949 0.908598 3.035500 1.543640 0.616783 0.0988179 1.582850 0.439157 0.947198 6.174160 0.021352 5.469470 1.416720 0.584665 1.125560 0.865584 0.306674 0.330052 0.567717 0.316954 2.137150 3.956290 0.930676 0.248972 4.294110 0.570025 0.249410 0.193335 0.186979 0.554236 0.039437 0.170135 0.113917 0.127395 0.0304501 0.138190 0.397915 0.497671 0.131528 0.0848047 0.384287 0.869489 0.154263 0.0613037 0.499462 3.170970 0.906265 5.351420 3.012010 0.479855 0.0740339 3.894900 2.584430 0.373558 0.890432 0.323832 0.257555 0.893496 0.683162 0.198221 0.103754 0.390482 1.545260 0.315124 0.174100 0.404141 4.257460 4.854020 0.934276 0.210494 0.102711 0.0961621 0.0467304 0.398020 0.0999208 0.0811339 0.049931 0.679371 1.059470 2.115170 0.088836 1.190630 1.438550 0.679489 0.195081 0.423984 0.109404 0.933372 0.682355 0.243570 0.696198 0.0999288 0.415844 0.556896 0.171329 0.161444 3.370790 1.224190 3.974230 1.071760 1.407660 1.028870 0.704939 1.341820 0.740169 0.319440 0.344739 0.967130 0.493905 0.545931 1.613280 2.121110 0.554413 2.030060 0.374866 0.512984 0.857928 0.822765 0.225833 0.473307 1.458160 0.326622 1.386980 1.516120 0.171903 0.795384 4.378020 0.113133 1.163920 0.0719167 0.129767 0.717070 0.215737 0.156557 0.336983 0.262569 0.212483 0.665309 0.137505 0.515706 1.529640 0.139405 0.523742 0.110864 0.240735 0.381533 1.086000 0.325711 0.543833 0.227710 0.196303 0.103604 3.873440 0.420170 0.398618 0.133264 0.428437 6.454280 0.216046 0.786993 0.291148 2.485390 2.006010 0.251849 0.196246 0.152335 1.002140 0.301281 0.588731 0.187247 0.118358 7.821300 1.800340 0.305434 2.058450 0.649892 0.314887 0.232739 1.388230 0.365369 0.314730 0.0866279 0.043972 0.0390894 0.0570451 0.0193078 0.0367281 0.0580589 0.0832518 0.0244313 0.048466 0.086209 0.0620286 0.0195027 0.0384319 0.0457631 0.0695179 0.0610127 0.0143859 0.0352742 0.0708956 A R N D C Q E G H I L K M F P S T W Y V Ala Arg Asn Asp Cys Gln Glu Gly His Ile Leu Lys Met Phe Pro Ser Thr Trp Tyr Val Symmetrical part of the WAG rate matrix and aa frequencies, estimated from 3905 globular protein amino acid sequences forming 182 protein families. The first part above indicates the symmetric 'exchangeability' parameters, where s_ij = s_ji. The s_ij above are not scaled, but the PAML package will perform this scaling. The second part gives the amino acid frequencies (pi_i) estimated from the 3905 sequences. The net replacement rate from i to j is Q_ij = s_ij*pi_j. Prepared by Simon Whelan and Nick Goldman, December 2000. Citation: Whelan, S. and N. Goldman. 2001. A general empirical model of protein evolution derived from multiple protein families using a maximum likelihood approach. Molecular Biology and Evolution 18:691-699. hmmer-3.1b2/easel/formats/embl0000664361611702660230000001257012473612610015700 0ustar wheelerteddyID X06347; SV 1; linear; mRNA; STD; HUM; 1209 BP. XX AC X06347; XX DT 19-OCT-1988 (Rel. 18, Created) DT 12-SEP-1993 (Rel. 36, Last updated, Version 2) XX DE Human mRNA for U1 small nuclear RNP-specific A protein XX KW U1 snRNP-specific protein A. XX OS Homo sapiens (human) OC Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi; Mammalia; OC Eutheria; Euarchontoglires; Primates; Haplorrhini; Catarrhini; Hominidae; OC Homo. XX RN [1] RP 1-1209 RX PUBMED; 2962859. RA Sillekens P.T.G., Habets W.J., Beijer R.P., van Venrooij W.J.; RT "cDNA cloning of the human U1 snRNA-associated A protein: extensive RT homology between U1 and U2 snRNP-specific proteins"; RL EMBO J. 6(12):3841-3848(1987). XX DR ASTD; TRAN00000054082. DR H-InvDB; HIT000321180. DR RFAM; RF00460; U1A_PIE. XX CC Data kindly reviewed (07-NOV-1988) by VAN VENROOIJ W.J. XX FH Key Location/Qualifiers FH FT source 1..1209 FT /organism="Homo sapiens" FT /mol_type="mRNA" FT /clone_lib="lambda gt11" FT /clone="pHA-1, pHA-2, pHA-3, pHA-4" FT /tissue_type="teratocarcinoma." FT /db_xref="taxon:9606" FT CDS 126..974 FT /note="A protein (AA 1-282)" FT /db_xref="GDB:120380" FT /db_xref="GOA:P09012" FT /db_xref="HGNC:11151" FT /db_xref="InterPro:IPR000504" FT /db_xref="InterPro:IPR012677" FT /db_xref="PDB:1AUD" FT /db_xref="PDB:1CX0" FT /db_xref="PDB:1DRZ" FT /db_xref="PDB:1DZ5" FT /db_xref="PDB:1FHT" FT /db_xref="PDB:1M5K" FT /db_xref="PDB:1M5O" FT /db_xref="PDB:1M5P" FT /db_xref="PDB:1M5V" FT /db_xref="PDB:1NU4" FT /db_xref="PDB:1OIA" FT /db_xref="PDB:1SJ3" FT /db_xref="PDB:1SJ4" FT /db_xref="PDB:1SJF" FT /db_xref="PDB:1U6B" FT /db_xref="PDB:1URN" FT /db_xref="PDB:1VBX" FT /db_xref="PDB:1VBY" FT /db_xref="PDB:1VBZ" FT /db_xref="PDB:1VC0" FT /db_xref="PDB:1VC5" FT /db_xref="PDB:1VC6" FT /db_xref="PDB:1VC7" FT /db_xref="PDB:1ZZN" FT /db_xref="PDB:2A3J" FT /db_xref="PDB:2NZ4" FT /db_xref="PDB:2OIH" FT /db_xref="PDB:2OJ3" FT /db_xref="PDB:2U1A" FT /db_xref="PDB:3BO2" FT /db_xref="PDB:3BO3" FT /db_xref="PDB:3BO4" FT /db_xref="PDB:3CUL" FT /db_xref="PDB:3CUN" FT /db_xref="PDB:3EGZ" FT /db_xref="PDB:3UTR" FT /db_xref="UniProtKB/Swiss-Prot:P09012" FT /protein_id="CAA29653.1" FT /translation="MAVPETRPNHTIYINNLNEKIKKDELKKSLYAIFSQFGQILDILV FT SRSLKMRGQAFVIFKEVSSATNALRSMQGFPFYDKPMRIQYAKTDSDIIAKMKGTFVER FT DRKREKRKPKSQETPATKKAVQGGGATPVVGAVQGPVPGMPPMTQAPRIMHHMPGQPPY FT MPPPGMIPPPGLAPGQIPPGAMPPQQLMPGQMPPAQPLSENPPNHILFLTNLPEETNEL FT MLSMLFNQFPGFKEVRLVPGRHDIAFVEFDNEVQAGAARDALQGFKITQNNAMKISFAK FT K" FT misc_feature 279..302 FT /note="RNP consensus sequence" FT misc_feature 1162..1167 FT /note="polyA signal" XX SQ Sequence 1209 BP; 269 A; 380 C; 307 G; 253 T; 0 other; gaattcctga cttccttttc ggaggaagat ccttgagcag ccgacgttgg gacaaaggat 60 ttggagaaac ccagggctaa agtcacgttt ttcctccttt aagacttacc tcaacacttc 120 actccatggc agttcccgag acccgcccta accacactat ttatatcaac aacctcaatg 180 agaagatcaa gaaggatgag ctaaaaaagt ccctgtacgc catcttctcc cagtttggcc 240 agatcctgga tatcctggta tcacggagcc tgaagatgag gggccaggcc tttgtcatct 300 tcaaggaggt cagcagcgcc accaacgccc tgcgctccat gcagggtttc cctttctatg 360 acaaacctat gcgtatccag tatgccaaga ccgactcaga tatcattgcc aagatgaaag 420 gcaccttcgt ggagcgggac cgcaagcggg agaagaggaa gcccaagagc caggagaccc 480 cggccaccaa gaaggctgtg caaggcgggg gagccacccc cgtggtgggg gctgtccagg 540 ggcctgtccc gggcatgccg ccgatgactc aggcgccccg cattatgcac cacatgccgg 600 gccagccgcc ctacatgccg ccccctggta tgatcccccc gccaggcctt gcacctggcc 660 agatcccacc aggggccatg cccccgcagc agcttatgcc aggacagatg ccccctgccc 720 agcctctttc tgagaatcca ccgaatcaca tcttgttcct caccaacctg ccagaggaga 780 ccaacgagct catgctgtcc atgcttttca atcagttccc tggcttcaag gaggtccgtc 840 tggtacccgg gcggcatgac atcgccttcg tggagtttga caatgaggta caggcagggg 900 cagctcgcga tgccctgcag ggctttaaga tcacgcagaa caacgccatg aagatctcct 960 ttgccaagaa gtagcacctt ttccccccat gcctgcccct tcccctgttc tggggccacc 1020 cctttccccc ttggctcagc cccctgaagg taagtccccc cttgggggcc ttcttggagc 1080 cgtgtgtgag tgagtggtcg ccacacagca ttgtacccag agtctgtccc cagacattgc 1140 acctggcgct gttaggccgg aattaaagtg gctttttgag gtttggtttt tcacaaaaaa 1200 aaggaattc 1209 // hmmer-3.1b2/easel/formats/fasta.bad.30000664361611702660230000000002712473612610016737 0ustar wheelerteddy>truncated in descriptihmmer-3.1b2/easel/formats/genbank0000664361611702660230000000467212473612610016372 0ustar wheelerteddyGBSMP.SEQ Genetic Sequence Data Bank 15 December 1992 GenBank Flat File Release 74.0 Structural RNA Sequences 2 loci, 236 bases, from 2 reported sequences LOCUS AAURRA 118 bp ss-rRNA RNA 16-JUN-1986 DEFINITION A.auricula-judae (mushroom) 5S ribosomal RNA. ACCESSION K03160 VERSION K03160.1 GI:173593 KEYWORDS 5S ribosomal RNA; ribosomal RNA. SOURCE A.auricula-judae (mushroom) ribosomal RNA. ORGANISM Auricularia auricula-judae Eukaryota; Fungi; Eumycota; Basidiomycotina; Phragmobasidiomycetes; Heterobasidiomycetidae; Auriculariales; Auriculariaceae. REFERENCE 1 (bases 1 to 118) AUTHORS Huysmans,E., Dams,E., Vandenberghe,A. and De Wachter,R. TITLE The nucleotide sequences of the 5S rRNAs of four mushrooms and their use in studying the phylogenetic position of basidiomycetes among the eukaryotes JOURNAL Nucleic Acids Res. 11, 2871-2880 (1983) FEATURES Location/Qualifiers rRNA 1..118 /note="5S ribosomal RNA" BASE COUNT 27 a 34 c 34 g 23 t ORIGIN 5' end of mature rRNA. 1 atccacggcc ataggactct gaaagcactg catcccgtcc gatctgcaaa gttaaccaga 61 gtaccgccca gttagtacca cggtggggga ccacgcggga atcctgggtg ctgtggtt // LOCUS ABCRRAA 118 bp ss-rRNA RNA 15-SEP-1990 DEFINITION Acetobacter sp. (strain MB 58) 5S ribosomal RNA, complete sequence. ACCESSION M34766 VERSION M34766.1 GI:173603 KEYWORDS 5S ribosomal RNA. SOURCE Acetobacter sp. (strain MB 58) rRNA. ORGANISM Acetobacter sp. Prokaryotae; Gracilicutes; Scotobacteria; Aerobic rods and cocci; Azotobacteraceae. REFERENCE 1 (bases 1 to 118) AUTHORS Bulygina,E.S., Galchenko,V.F., Govorukhina,N.I., Netrusov,A.I., Nikitin,D.I., Trotsenko,Y.A. and Chumakov,K.M. TITLE Taxonomic studies of methylotrophic bacteria by 5S ribosomal RNA sequencing JOURNAL J. Gen. Microbiol. 136, 441-446 (1990) FEATURES Location/Qualifiers rRNA 1..118 /note="5S ribosomal RNA" BASE COUNT 27 a 40 c 32 g 17 t 2 others ORIGIN 1 gatctggtgg ccatggcggg agcaaatcag ccgatcccat cccgaactcg gccgtcaaat 61 gccccagcgc ccatgatact ctgcctcaag gcacggaaaa gtcggtcgcc gccagayy // hmmer-3.1b2/easel/formats/fasta.20000664361611702660230000000131612473612610016213 0ustar wheelerteddy >SNRPA_DROME U1 small nuclear ribonucleoprotein A (U1 snRNP protein A) (U1-A) (Sex determination protein snf). MEMLPNQTIYINNLNEKIKKEELKKSLYAIFSQFGQILDIVALKTLKMRG QAFVIFKEIGSASNALRTMQGFPFYDKPMQIAYSKSDSDIVAKIKGTFKE RPKKVKPPKPAPGTDEKKDKKKKPSSAENSNPNAQTEQPPNQILFLTNLP EETNEMMLSMLFNQFPGFKEVRLVPNRHDIAFVEFTTELQSNAAKEALQG FKITPTHAMKITFAKK >SNRPA_HUMAN U1 small nuclear ribonucleoprotein A (U1 snRNP protein A) (U1A protein) (U1-A). AVPETRPNHTIYINNLNEKIKKDELKKSLYAIFSQFGQILDILVSRSLKM RGQAFVIFKEVSSATNALRSMQGFPFYDKPMRIQYAKTDSDIIAKMKGTF VERDRKREKRKPKSQETPATKKAVQGGGATPVVGAVQGPVPGMPPMTQAP RIMHHMPGQPPYMPPPGMIPPPGLAPGQIPPGAMPPQQLMPGQMPPAQPL SENPPNHILFLTNLPEETNELMLSMLFNQFPGFKEVRLVPGRHDIAFVEF DNEVQAGAARDALQGFKITQNNAMKISFAKK hmmer-3.1b2/easel/formats/fasta.bad.20000664361611702660230000000001612473612610016734 0ustar wheelerteddy>truncated_namhmmer-3.1b2/easel/formats/BLOSUM620000664361611702660230000000411212473612610016123 0ustar wheelerteddy# Matrix made by matblas from blosum62.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 62 # Entropy = 0.6979, Expected = -0.5209 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 4 -1 -2 -2 0 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -3 -2 0 -2 -1 0 -4 R -1 5 0 -2 -3 1 0 -2 0 -3 -2 2 -1 -3 -2 -1 -1 -3 -2 -3 -1 0 -1 -4 N -2 0 6 1 -3 0 0 0 1 -3 -3 0 -2 -3 -2 1 0 -4 -2 -3 3 0 -1 -4 D -2 -2 1 6 -3 0 2 -1 -1 -3 -4 -1 -3 -3 -1 0 -1 -4 -3 -3 4 1 -1 -4 C 0 -3 -3 -3 9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2 -4 Q -1 1 0 0 -3 5 2 -2 0 -3 -2 1 0 -3 -1 0 -1 -2 -1 -2 0 3 -1 -4 E -1 0 0 2 -4 2 5 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4 G 0 -2 0 -1 -3 -2 -2 6 -2 -4 -4 -2 -3 -3 -2 0 -2 -2 -3 -3 -1 -2 -1 -4 H -2 0 1 -1 -3 0 0 -2 8 -3 -3 -1 -2 -1 -2 -1 -2 -2 2 -3 0 0 -1 -4 I -1 -3 -3 -3 -1 -3 -3 -4 -3 4 2 -3 1 0 -3 -2 -1 -3 -1 3 -3 -3 -1 -4 L -1 -2 -3 -4 -1 -2 -3 -4 -3 2 4 -2 2 0 -3 -2 -1 -2 -1 1 -4 -3 -1 -4 K -1 2 0 -1 -3 1 1 -2 -1 -3 -2 5 -1 -3 -1 0 -1 -3 -2 -2 0 1 -1 -4 M -1 -1 -2 -3 -1 0 -2 -3 -2 1 2 -1 5 0 -2 -1 -1 -1 -1 1 -3 -1 -1 -4 F -2 -3 -3 -3 -2 -3 -3 -3 -1 0 0 -3 0 6 -4 -2 -2 1 3 -1 -3 -3 -1 -4 P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4 7 -1 -1 -4 -3 -2 -2 -1 -2 -4 S 1 -1 1 0 -1 0 0 0 -1 -2 -2 0 -1 -2 -1 4 1 -3 -2 -2 0 0 0 -4 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 1 5 -2 -2 0 -1 -1 0 -4 W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1 1 -4 -3 -2 11 2 -3 -4 -3 -2 -4 Y -2 -2 -2 -3 -2 -1 -2 -3 2 -1 -1 -2 -1 3 -3 -2 -2 2 7 -1 -3 -2 -1 -4 V 0 -3 -3 -3 -1 -2 -2 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4 -3 -2 -1 -4 B -2 -1 3 4 -3 0 1 -1 0 -3 -4 0 -3 -3 -2 0 -1 -4 -3 -3 4 1 -1 -4 Z -1 0 0 1 -3 3 4 -2 0 -3 -3 1 -1 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4 X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2 0 0 -2 -1 -1 -1 -1 -1 -4 * -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 1 hmmer-3.1b2/easel/esl_weibull.h0000664361611702660230000000452612473612610016044 0ustar wheelerteddy/* Weibull distributions. * * SRE, Tue Aug 9 10:48:35 2005 [St. Louis] * SVN $Id: esl_weibull.h 664 2011-02-27 17:08:36Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_weibull.h $ */ #ifndef eslWEIBULL_INCLUDED #define eslWEIBULL_INCLUDED #ifdef eslAUGMENT_RANDOM #include #endif #ifdef eslAUGMENT_HISTOGRAM #include #endif extern double esl_wei_pdf (double x, double mu, double lambda, double tau); extern double esl_wei_logpdf (double x, double mu, double lambda, double tau); extern double esl_wei_cdf (double x, double mu, double lambda, double tau); extern double esl_wei_logcdf (double x, double mu, double lambda, double tau); extern double esl_wei_surv (double x, double mu, double lambda, double tau); extern double esl_wei_logsurv(double x, double mu, double lambda, double tau); extern double esl_wei_invcdf (double p, double mu, double lambda, double tau); extern double esl_wei_generic_pdf (double x, void *params); extern double esl_wei_generic_cdf (double x, void *params); extern double esl_wei_generic_surv (double x, void *params); extern double esl_wei_generic_invcdf(double p, void *params); extern int esl_wei_Plot(FILE *fp, double mu, double lambda, double tau, double (*func)(double x, double mu, double lambda, double tau), double xmin, double xmax, double xstep); #ifdef eslAUGMENT_RANDOM extern double esl_wei_Sample(ESL_RANDOMNESS *r, double mu, double lambda, double tau); #endif #ifdef eslAUGMENT_MINIMIZER extern int esl_wei_FitComplete(double *x, int n, double *ret_mu, double *ret_lambda, double *ret_tau); #ifdef eslAUGMENT_HISTOGRAM extern int esl_wei_FitCompleteBinned(ESL_HISTOGRAM *h, double *ret_mu, double *ret_lambda, double *ret_tau); #endif /*eslAUGMENT_HISTOGRAM*/ #endif /*eslAUGMENT_MINIMIZER*/ #endif /*eslWEIBULL_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_ratematrix.c0000664361611702660230000006651012473612607016563 0ustar wheelerteddy/* Routines for manipulating evolutionary rate matrices. * * There is no specific object for this module. Rate matrix * operations use square nxn ESL_DMATRIX data objects. (The rmx * module essentially subclasses the dmx module.) * * An instantaneous rate matrix is usually denoted by Q. A * conditional probability matrix (for a specific t) is usually * denoted by P. An exchangeability matrix is denoted by E. * A stationary residue probability vector is denoted by pi. * * Two important relations among these: * * Q in terms of E and pi: * $Q_{ij} = E_{ij} \pi_j$ for $i \neq j$; * $Q_{ii} = -\sum_{j \neq i} Q_{ij}$ * * P in terms of Q and t: * $P = e^{tQ}$ * * Contents: * 1. Setting standard rate matrix models. * 2. Debugging routines for validating or dumping rate matrices. * 3. Other routines in the exposed ratematrix API. * 4. Benchmark driver. * 5. Regression test driver. * 6. Unit tests. * 7. Test driver. * 8. Example. * 9. Copyright/license information. * * * * See also: * paml - i/o of rate matrices from/to data files in PAML format * */ #include "esl_config.h" #include #include "easel.h" #include "esl_composition.h" #include "esl_dmatrix.h" #include "esl_vectorops.h" #include "esl_ratematrix.h" /***************************************************************** * 1. Setting standard rate matrix models. *****************************************************************/ /* Function: esl_rmx_SetWAG() * Incept: SRE, Thu Mar 8 18:00:00 2007 [Janelia] * * Purpose: Sets a $20 \times 20$ rate matrix to WAG parameters. * The caller allocated . * * If is non-, it provides a vector of 20 amino * acid stationary probabilities in Easel alphabetic order, * A..Y, and the WAG stationary probabilities are set to * these desired $\pi_i$. If is , the default * WAG stationary probabilities are used. * * The WAG parameters are a maximum likelihood * parameterization obtained by Whelan and Goldman * \citep{WhelanGoldman01}. * * Note: The data table was reformatted from wag.dat by the UTILITY1 * executable in the paml module. The wag.dat file was obtained from * \url{http://www.ebi.ac.uk/goldman/WAG/wag.dat}. A copy * is in formats/wag.dat. * * Args: Q - a 20x20 rate matrix to set, allocated by caller. * pi - desired stationary probabilities A..Y, or * NULL to use WAG defaults. * * Returns: on success. * * Throws: if isn't a 20x20 general matrix; and * the state of is undefined. */ int esl_rmx_SetWAG(ESL_DMATRIX *Q, double *pi) { static double wagE[190] = { 1.027040, 0.738998, 0.030295, 1.582850, 0.021352, 6.174160, 0.210494, 0.398020, 0.046730, 0.081134, 1.416720, 0.306674, 0.865584, 0.567717, 0.049931, 0.316954, 0.248972, 0.930676, 0.570025, 0.679371, 0.249410, 0.193335, 0.170135, 0.039437, 0.127395, 1.059470, 0.030450, 0.138190, 0.906265, 0.074034, 0.479855, 2.584430, 0.088836, 0.373558, 0.890432, 0.323832, 0.397915, 0.384287, 0.084805, 0.154263, 2.115170, 0.061304, 0.499462, 3.170970, 0.257555, 0.893496, 0.390482, 0.103754, 0.315124, 1.190630, 0.174100, 0.404141, 4.257460, 0.934276, 4.854020, 0.509848, 0.265256, 5.429420, 0.947198, 0.096162, 1.125560, 3.956290, 0.554236, 3.012010, 0.131528, 0.198221, 1.438550, 0.109404, 0.423984, 0.682355, 0.161444, 0.243570, 0.696198, 0.099929, 0.556896, 0.415844, 0.171329, 0.195081, 0.908598, 0.098818, 0.616783, 5.469470, 0.099921, 0.330052, 4.294110, 0.113917, 3.894900, 0.869489, 1.545260, 1.543640, 0.933372, 0.551571, 0.528191, 0.147304, 0.439157, 0.102711, 0.584665, 2.137150, 0.186979, 5.351420, 0.497671, 0.683162, 0.635346, 0.679489, 3.035500, 3.370790, 1.407660, 1.071760, 0.704939, 0.545931, 1.341820, 0.740169, 0.319440, 0.967130, 0.344739, 0.493905, 3.974230, 1.613280, 1.028870, 1.224190, 2.121110, 0.512984, 0.374866, 0.822765, 0.171903, 0.225833, 0.473307, 1.458160, 1.386980, 0.326622, 1.516120, 2.030060, 0.795384, 0.857928, 0.554413, 4.378020, 2.006010, 1.002140, 0.152335, 0.588731, 0.649892, 0.187247, 0.118358, 7.821300, 0.305434, 1.800340, 2.058450, 0.196246, 0.314887, 0.301281, 0.251849, 0.232739, 1.388230, 0.113133, 0.717070, 0.129767, 0.156557, 1.529640, 0.336983, 0.262569, 0.212483, 0.137505, 0.665309, 0.515706, 0.071917, 0.139405, 0.215737, 1.163920, 0.523742, 0.110864, 0.365369, 0.240735, 0.543833, 0.325711, 0.196303, 6.454280, 0.103604, 3.873440, 0.420170, 0.133264, 0.398618, 0.428437, 1.086000, 0.216046, 0.227710, 0.381533, 0.786993, 0.291148, 0.314730, 2.485390}; static double wagpi[20]; int i,j,z; if (Q->m != 20 || Q->n != 20 || Q->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "Q must be a 20x20 general matrix"); esl_composition_WAG(wagpi); /* 1. Transfer the wag E lower triagonal matrix directly into Q. */ z = 0; for (i = 0; i < 20; i++) { Q->mx[i][i] = 0.; /* code below depends on this zero initialization */ for (j = 0; j < i; j++) { Q->mx[i][j] = wagE[z++]; Q->mx[j][i] = Q->mx[i][j]; } } /* 2. Set offdiagonals Q_ij = E_ij * pi_j */ for (i = 0; i < 20; i++) for (j = 0; j < 20; j++) if (pi != NULL) Q->mx[i][j] *= pi[j]; else Q->mx[i][j] *= wagpi[j]; /* 3. Set diagonal Q_ii to -\sum_{i \neq j} Q_ij */ for (i = 0; i < 20; i++) Q->mx[i][i] = -1. * esl_vec_DSum(Q->mx[i], 20); /* 4. Renormalize matrix to units of 1 substitution/site. */ if (pi != NULL) esl_rmx_ScaleTo(Q, pi, 1.0); else esl_rmx_ScaleTo(Q, wagpi, 1.0); return eslOK; } /* Function: esl_rmx_SetJukesCantor() * Incept: SRE, Thu Mar 15 13:04:56 2007 [Janelia] * * Purpose: Sets a 4x4 rate matrix to a Jukes-Cantor model, * scaled to units of 1t = 1.0 substitutions/site. * * Note: eigenvalues of Q are 0, -4\alpha, -4\alpha, -4\alpha */ int esl_rmx_SetJukesCantor(ESL_DMATRIX *Q) { int i,j; double pi[4] = { 0.25, 0.25, 0.25, 0.25 }; if (Q->m != 4 || Q->n != 4 || Q->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "Q must be a 4x4 general matrix"); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { if (i != j) Q->mx[i][j] = 1.0; else Q->mx[i][j] = 0.0; } Q->mx[i][i] = -1. * esl_vec_DSum(Q->mx[i], 4); } esl_rmx_ScaleTo(Q, pi, 1.0); return eslOK; } /* Function: esl_rmx_SetKimura() * Incept: SRE, Thu Mar 15 13:08:08 2007 [Janelia] * * Purpose: Sets a 4x4 rate matrix to a Kimura 2-parameter * model, given transition and transversion * relative rates and , respectively, * scaled to units of 1t = 1.0 substitutions/site. * * Note: eigenvalues of Q are 0, -4\alpha, -2(\alpha+\beta), -2(\alpha+\beta) */ int esl_rmx_SetKimura(ESL_DMATRIX *Q, double alpha, double beta) { int i,j; double pi[4] = { 0.25, 0.25, 0.25, 0.25 }; if (Q->m != 4 || Q->n != 4 || Q->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "Q must be a 4x4 general matrix"); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { if (i != j) Q->mx[i][j] = ((i+j)%2)? beta : alpha; /* even=0=transition;odd=1=transversion */ else Q->mx[i][j] = 0.0; } Q->mx[i][i] = -1. * esl_vec_DSum(Q->mx[i], 4); } esl_rmx_ScaleTo(Q, pi, 1.0); return eslOK; } /* Function: esl_rmx_SetF81() * Incept: SRE, Thu Mar 15 13:33:30 2007 [Janelia] * * Purpose: Sets a 4x4 rate matrix to the F81 model (aka * equal-input model) given stationary base * compositions , * scaled to units of 1t = 1.0 substitutions/site. */ int esl_rmx_SetF81(ESL_DMATRIX *Q, double *pi) { int i,j; if (Q->m != 4 || Q->n != 4 || Q->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "Q must be a 4x4 general matrix"); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { if (i != j) Q->mx[i][j] = pi[j]; else Q->mx[i][j] = 0.0; } Q->mx[i][i] = -1. * esl_vec_DSum(Q->mx[i], 4); } esl_rmx_ScaleTo(Q, pi, 1.0); return eslOK; } /* Function: esl_rmx_SetHKY() * Incept: SRE, Thu Aug 12 08:26:39 2004 [St. Louis] * * Purpose: Given stationary base composition for ACGT, and * transition and transversion relative rates and * respectively, sets the matrix to be the * corresponding HKY (Hasegawa/Kishino/Yano) DNA rate * matrix, scaled in units of 1t= 1.0 substitutions/site * \citep{Hasegawa85}. * * Args: pi - stationary base composition A..T * alpha - relative transition rate * beta - relative transversion rate * * * Returns: * * Xref: */ int esl_rmx_SetHKY( ESL_DMATRIX *Q, double *pi, double alpha, double beta) { int i,j; if (Q->m != 4 || Q->n != 4 || Q->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "Q must be a 4x4 general matrix"); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { if (i != j) Q->mx[i][j] = ((i+j)%2)? pi[j]*beta : pi[j]*alpha; /* even=0=transition;odd=1=transversion */ else Q->mx[i][j] = 0.; } Q->mx[i][i] = -1. * esl_vec_DSum(Q->mx[i], 4); } esl_rmx_ScaleTo(Q, pi, 1.0); return eslOK; } /***************************************************************** * 2. Debugging routines for validating or dumping rate matrices. *****************************************************************/ /* Function: esl_rmx_ValidateP() * Incept: SRE, Sun Mar 11 10:30:50 2007 [Janelia] * * Purpose: Validates a conditional probability matrix

, whose * elements $P_{ij}$ represent conditional probabilities * $P(j \mid i)$; for example in a first-order Markov * chain, or a continuous-time Markov transition process * where

is for a particular $t$. * * Rows must sum to one, and each element $P_{ij}$ is a * probability $0 \leq P_{ij} \leq 1$. * * specifies the floating-point tolerance to which * the row sums must equal one: . * * is an optional error message buffer. The caller * may pass or a pointer to a buffer of at least * characters. * * Args: P - matrix to validate * tol - floating-point tolerance (0.00001, for example) * errbuf - OPTIONAL: ptr to an error buffer of at least * characters. * * Returns: on successful validation. * on failure, and if a non- was * provided by the caller, a message describing * the reason for the failure is put there. * * Throws: (no abnormal error conditions) */ int esl_rmx_ValidateP(ESL_DMATRIX *P, double tol, char *errbuf) { int i,j; double sum; if (P->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "P must be type eslGENERAL to be validated"); for (i = 0; i < P->n; i++) { sum = esl_vec_DSum(P->mx[i], P->m); if (fabs(sum-1.0) > tol) ESL_FAIL(eslFAIL, errbuf, "row %d does not sum to 1.0", i); for (j = 0; j < P->m; j++) if (P->mx[i][j] < 0.0 || P->mx[i][j] > 1.0) ESL_FAIL(eslFAIL, errbuf, "element %d,%d is not a probability (%f)", i,j,P->mx[i][j]); } return eslOK; } /* Function: esl_rmx_ValidateQ() * Incept: SRE, Sun Mar 11 10:30:50 2007 [Janelia] * * Purpose: Validates an instantaneous rate matrix for a * continuous-time Markov process, whose elements $q_{ij}$ * represent instantaneous transition rates $i \rightarrow * j$. * * Rows satisfy the condition that * $q_{ii} = -\sum_{i \neq j} q_{ij}$, and also * that $q_{ij} \geq 0$ for all $j \neq i$. * * specifies the floating-point tolerance to which * that condition must hold: . * * is an optional error message buffer. The caller * may pass or a pointer to a buffer of at least * characters. * * Args: Q - rate matrix to validate * tol - floating-point tolerance (0.00001, for example) * errbuf - OPTIONAL: ptr to an error buffer of at least * characters. * * Returns: on successful validation. * on failure, and if a non- was * provided by the caller, a message describing * the reason for the failure is put there. * * Throws: (no abnormal error conditions) */ int esl_rmx_ValidateQ(ESL_DMATRIX *Q, double tol, char *errbuf) { int i,j; double qi; if (Q->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "Q must be type eslGENERAL to be validated"); if (Q->n != Q->m) ESL_EXCEPTION(eslEINVAL, "a rate matrix Q must be square"); for (i = 0; i < Q->n; i++) { qi = 0.; for (j = 0; j < Q->m; j++) { if (i != j) { if (Q->mx[i][j] < 0.) ESL_FAIL(eslFAIL, errbuf, "offdiag elem %d,%d < 0",i,j); qi += Q->mx[i][j]; } else { if (Q->mx[i][j] > 0.) ESL_FAIL(eslFAIL, errbuf, "diag elem %d,%d < 0", i,j); } } if (fabs(qi + Q->mx[i][i]) > tol) ESL_FAIL(eslFAIL, errbuf, "row %d does not sum to 0.0", i); } return eslOK; } /***************************************************************** * 3. Other routines in the exposed ratematrix API. *****************************************************************/ /* Function: esl_rmx_ScaleTo() * Incept: SRE, Tue Jul 13 16:05:16 2004 [St. Louis] * * Purpose: Rescales rate matrix so that expected substitution * rate per dt is . * * Expected substitution rate is: * $\sum_i \sum_j pi_i Q_ij \forall i \neq j$ * * typically taken to be 1.0, so time units are substitutions/site. * An exception is PAM, where = 0.01 for 1 PAM unit. * * Args: Q - rate matrix to normalize * pi - stationary residue frequencies * unit - expected subsitution rate per dt * (1.0 = substitutions/site; 0.01 = PAMs) * * Returns: on success, and matrix Q is rescaled. * * Xref: STL8/p56. */ int esl_rmx_ScaleTo(ESL_DMATRIX *Q, double *pi, double unit) { int i,j; double sum = 0.; if (Q->m != Q->n || Q->type != eslGENERAL) ESL_EXCEPTION(eslEINVAL, "Q must be a square general matrix"); for (i = 0; i < Q->m; i++) for (j = 0; j < Q->n; j++) if (i != j) sum += pi[i] * Q->mx[i][j]; for (i = 0; i < Q->m; i++) for (j = 0; j < Q->n; j++) Q->mx[i][j] *= (unit / sum); return eslOK; } /* Function: esl_rmx_E2Q() * Incept: SRE, Tue Jul 13 15:52:41 2004 [St. Louis] * * Purpose: Given a lower triangular matrix ($j, and a stationary residue * frequency vector ; assuming $E_{ij} = E_{ji}$; * calculates a rate matrix as * * $Q_{ij} = E_{ij} * \pi_j$ * * The resulting is not normalized to any particular * number of substitutions/site/time unit. See * for that. * * Args: E - symmetric residue "exchangeabilities"; * only lower triangular entries are used. * pi - residue frequencies at stationarity. * Q - RETURN: rate matrix, square (NxN). * Caller allocates the memory for this. * * Returns: on success; Q is calculated and filled in. * * Xref: STL8/p56. */ int esl_rmx_E2Q(ESL_DMATRIX *E, double *pi, ESL_DMATRIX *Q) { int i,j; if (E->n != Q->n) ESL_EXCEPTION(eslEINVAL, "E and Q sizes differ"); /* Scale all off-diagonals to pi[j] * E[i][j]. */ for (i = 0; i < E->n; i++) for (j = 0; j < i; j++) /* only look at lower triangle of E. */ { Q->mx[i][j] = pi[j] * E->mx[i][j]; Q->mx[j][i] = pi[i] * E->mx[i][j]; } /* Set diagonal to -\sum of all j != i. */ for (i = 0; i < Q->n; i++) { Q->mx[i][i] = 0.; /* makes the vector sum work for j != i */ Q->mx[i][i] = -1. * esl_vec_DSum(Q->mx[i], Q->n); } return eslOK; } /* Function: esl_rmx_RelativeEntropy() * Incept: SRE, Fri Mar 23 09:18:26 2007 [Janelia] * * Purpose: Given a conditional substitution probability matrix

, * with stationary probabilities , calculate its * relative entropy $H$: * * $H_t = \sum_{ij} P(j \mid i,t) \pi_i \log_2 \frac{P(j \mid i,t)} {\pi_j}$ * * This assumes that the stationary probabilities are the * same as the background (null model) probabilities. * * Returns: the relative entropy, $H$, in bits */ double esl_rmx_RelativeEntropy(ESL_DMATRIX *P, double *pi) { double H = 0.; int i,j; for (i = 0; i < P->m; i++) for (j = 0; j < P->n; j++) H += P->mx[i][j] * pi[i] * log(P->mx[i][j] / pi[j]); return H / eslCONST_LOG2; } /* Function: esl_rmx_ExpectedScore() * Incept: SRE, Fri Mar 23 09:32:05 2007 [Janelia] * * Purpose: Given a conditional substitution probability matrix

* with stationary probabilities , calculate its * expected score: * * $ = \sum_{ij} \pi_j \pi_i \log_2 \frac{P(j \mid i,t)} {\pi_j}$ * * This assumes that the stationary probabilities are the * same as the background (null model) probabilities. * * Returns: the expected score, in bits */ double esl_rmx_ExpectedScore(ESL_DMATRIX *P, double *pi) { double S = 0.; int i,j; for (i = 0; i < P->m; i++) for (j = 0; j < P->n; j++) S += pi[j] * pi[i] * log(P->mx[i][j] / pi[j]); return S / eslCONST_LOG2; } /***************************************************************** * 4. Benchmark driver *****************************************************************/ #ifdef eslRATEMATRIX_BENCHMARK /* without GSL: gcc -O2 -I. -L. -o benchmark -DeslRATEMATRIX_BENCHMARK esl_ratematrix.c -leasel -lm with GSL: gcc -g -Wall -I. -L. -o benchmark -DeslRATEMATRIX_BENCHMARK -DHAVE_LIBGSL esl_dmatrix.c esl_ratematrix.c -leasel -lgsl -lgslcblas -lm */ #include #ifdef HAVE_LIBGSL #include #include #endif #include "easel.h" #include "esl_stopwatch.h" #include "esl_dmatrix.h" #include "esl_ratematrix.h" int main(void) { ESL_STOPWATCH *w = NULL; ESL_DMATRIX *Q = NULL; ESL_DMATRIX *P = NULL; double t = 5.0; int esl_iterations = 100; int i; #ifdef HAVE_LIBGSL gsl_matrix *Qg = NULL; gsl_matrix *Pg = NULL; int gsl_iterations = 100; #endif w = esl_stopwatch_Create(); Q = esl_dmatrix_Create(20, 20); P = esl_dmatrix_Create(20, 20); esl_rmx_SetWAG(Q, NULL); esl_stopwatch_Start(w); for (i = 0; i < esl_iterations; i++) esl_dmx_Exp(Q, t, P); esl_stopwatch_Stop(w); printf("Easel takes: %g sec\n", w->user / (double) esl_iterations); #ifdef HAVE_LIBGSL if (esl_dmx_MorphGSL(Q, &Qg) != eslOK) esl_fatal("morph to gsl_matrix failed"); if ((Pg = gsl_matrix_alloc(20, 20)) == NULL) esl_fatal("gsl alloc failed"); gsl_matrix_scale(Qg, t); esl_stopwatch_Start(w); for (i = 0; i < gsl_iterations; i++) gsl_linalg_exponential_ss(Qg, Pg, GSL_PREC_DOUBLE); esl_stopwatch_Stop(w); printf(" GSL takes: %g sec\n", w->user / (double) gsl_iterations); gsl_matrix_free(Qg); gsl_matrix_free(Pg); #endif /*HAVE_LIBGSL*/ esl_dmatrix_Destroy(Q); esl_dmatrix_Destroy(P); esl_stopwatch_Destroy(w); return 0; } #endif /*eslRATEMATRIX_BENCHMARK*/ /***************************************************************** * 5. Regression test driver *****************************************************************/ #ifdef eslRATEMATRIX_REGRESSION #ifdef HAVE_LIBGSL /* This tests rate matrix exponentiation against the GSL's * undocumented implementation of a matrix exponential. */ /* gcc -g -Wall -I. -L. -o ratematrix_regression -DeslRATEMATRIX_REGRESSION -DHAVE_LIBGSL esl_dmatrix.c esl_ratematrix.c -leasel -lgsl -lgslcblas -lm */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_dmatrix.h" #include "esl_ratematrix.h" int main(void) { char errbuf[eslERRBUFSIZE]; char *alphabet = "ACDEFGHIKLMNPQRSTVWY"; ESL_DMATRIX *Q = NULL; ESL_DMATRIX *P = NULL; gsl_matrix *Qg = NULL; gsl_matrix *Pg = NULL; ESL_DMATRIX *Pge = NULL; double t = 15.0; if ((Q = esl_dmatrix_Create(20, 20)) == NULL) esl_fatal("malloc failed"); if ((P = esl_dmatrix_Create(20, 20)) == NULL) esl_fatal("malloc failed"); if (esl_rmx_SetWAG(Q, NULL) != eslOK) esl_fatal("_SetWAG() failed"); if (esl_rmx_ValidateQ(Q, 0.0001, errbuf) != eslOK) esl_fatal("Q validation failed: %s", errbuf); if (esl_dmx_Exp(Q, t, P) != eslOK) esl_fatal("matrix exponentiation failed"); if (esl_rmx_ValidateP(P, 0.0001, errbuf) != eslOK) esl_fatal("P validation failed: %s", errbuf); if (esl_dmx_MorphGSL(Q, &Qg) != eslOK) esl_fatal("morph to gsl_matrix failed"); if ((Pg = gsl_matrix_alloc(20, 20)) == NULL) esl_fatal("gsl alloc failed"); gsl_matrix_scale(Qg, t); if (gsl_linalg_exponential_ss(Qg, Pg, GSL_PREC_DOUBLE) != 0) esl_fatal("gsl's exponentiation failed"); if (esl_dmx_UnmorphGSL(Pg, &Pge) != eslOK) esl_fatal("morph from gsl_matrix failed"); esl_dmatrix_Dump(stdout, P, alphabet, alphabet); if (esl_dmatrix_Compare(Pge, P, 0.00001) != eslOK) esl_fatal("whoops, different answers."); esl_dmatrix_Destroy(Q); esl_dmatrix_Destroy(P); esl_dmatrix_Destroy(Pge); gsl_matrix_free(Qg); gsl_matrix_free(Pg); return 0; } #else /* if we don't have GSL, then compile in a dummy main(), solely * to quiet any tests that are verifying that all drivers compile * and run. */ int main(void) { return 0; } #endif /*HAVE_LIBGSL*/ #endif /*eslRATEMATRIX_REGRESSION*/ /***************************************************************** * 6. Unit tests. *****************************************************************/ #ifdef eslRATEMATRIX_TESTDRIVE static void utest_SetWAG(void) { char errbuf[eslERRBUFSIZE]; ESL_DMATRIX *Q = NULL; ESL_DMATRIX *P = NULL; double t = 50.0; /* sufficiently large to drive e^tQ to stationarity */ double pi[20]; int i; if ((Q = esl_dmatrix_Create(20, 20)) == NULL) esl_fatal("malloc failed"); if ((P = esl_dmatrix_Create(20, 20)) == NULL) esl_fatal("malloc failed"); /* This tests that exponentiating WAG gives a stable conditional * probability matrix solution. (It doesn't particularly test that * WAG was set correctly, but how could we have screwed that up?) */ if (esl_rmx_SetWAG(Q, NULL) != eslOK) esl_fatal("_SetWAG() failed"); if (esl_dmx_Exp(Q, t, P) != eslOK) esl_fatal("matrix exponentiation failed"); if (esl_rmx_ValidateP(P, 1e-7, errbuf) != eslOK) esl_fatal("P validation failed: %s", errbuf); if (esl_rmx_ValidateQ(Q, 1e-7, errbuf) != eslOK) esl_fatal("Q validation failed: %s", errbuf); /* This tests setting WAG to different stationary pi's than default, * then tests that exponentiating to large t reaches those stationaries. */ esl_vec_DSet(pi, 20, 0.05); if (esl_rmx_SetWAG(Q, pi) != eslOK) esl_fatal("_SetWAG() failed"); if (esl_dmx_Exp(Q, t, P) != eslOK) esl_fatal("matrix exponentiation failed"); if (esl_rmx_ValidateP(P, 1e-7, errbuf) != eslOK) esl_fatal("P validation failed: %s", errbuf); if (esl_rmx_ValidateQ(Q, 1e-7, errbuf) != eslOK) esl_fatal("Q validation failed: %s", errbuf); for (i = 0; i < 20; i++) if (esl_vec_DCompare(P->mx[i], pi, 20, 1e-7) != eslOK) esl_fatal("P didn't converge to right pi's"); esl_dmatrix_Destroy(Q); esl_dmatrix_Destroy(P); return; } #ifdef HAVE_LIBLAPACK static void utest_Diagonalization(void) { ESL_DMATRIX *P = NULL; ESL_DMATRIX *P2 = NULL; ESL_DMATRIX *C = NULL; ESL_DMATRIX *D = NULL; double *lambda = NULL; /* eigenvalues */ ESL_DMATRIX *U = NULL; /* left eigenvectors */ ESL_DMATRIX *Ui = NULL; /* inverse of U */ int i,j; /* Create a J/C probability matrix for t=1: * 1/4 + 3/4 e^{-4/3 at} * 1/4 - 1/4 e^{-4/3 at} */ if ((P = esl_dmatrix_Create(4, 4)) == NULL) esl_fatal("malloc failed"); if ((C = esl_dmatrix_Create(4, 4)) == NULL) esl_fatal("malloc failed"); if ((Ui = esl_dmatrix_Create(4, 4)) == NULL) esl_fatal("malloc failed"); if ((D = esl_dmatrix_Create(4, 4)) == NULL) esl_fatal("malloc failed"); if ((P2 = esl_dmatrix_Create(4, 4)) == NULL) esl_fatal("malloc failed"); for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) if (i == j) P->mx[i][j] = 0.25 + 0.75 * exp(-4./3.); else P->mx[i][j] = 0.25 - 0.25 * exp(-4./3.); /* Diagonalize it */ if (esl_dmx_Diagonalize(P, &lambda, NULL, &U, NULL) != eslOK) esl_fatal("diagonalization failed"); /* Calculate P^k by U [diag(lambda_i)]^k U^{-1} */ esl_dmatrix_SetZero(D); for (i = 0; i < P->n; i++) D->mx[i][i] = lambda[i]; esl_dmx_Invert(U, Ui); esl_dmx_Multiply(U, D, C); esl_dmx_Multiply(C, Ui, P2); if (esl_dmatrix_Compare(P, P2, 1e-7) != eslOK) esl_fatal("diagonalization unit test failed"); free(lambda); esl_dmatrix_Destroy(P2); esl_dmatrix_Destroy(Ui); esl_dmatrix_Destroy(U); esl_dmatrix_Destroy(D); esl_dmatrix_Destroy(C); esl_dmatrix_Destroy(P); return; } #endif /*HAVE_LIBLAPACK*/ #endif /*eslRATEMATRIX_TESTDRIVE*/ /***************************************************************** * 7. Test driver *****************************************************************/ #ifdef eslRATEMATRIX_TESTDRIVE /* gcc -g -Wall -o test -I. -L. -DeslRATEMATRIX_TESTDRIVE esl_ratematrix.c -leasel -lm * ./test * * gcc -g -Wall -o test -I. -L. -DHAVE_LIBLAPACK -DeslRATEMATRIX_TESTDRIVE esl_ratematrix.c esl_dmatrix.c -leasel -llapack -lm */ #include "esl_config.h" #include "easel.h" #include "esl_ratematrix.h" int main(void) { utest_SetWAG(); #ifdef HAVE_LIBLAPACK utest_Diagonalization(); #endif return 0; } #endif /*eslRATEMATRIX_TESTDRIVE*/ /***************************************************************** * 8. Example driver *****************************************************************/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_ratematrix.c 849 2013-01-31 15:10:24Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_ratematrix.c $ *****************************************************************/ hmmer-3.1b2/libdivsufsort/0000775361611702660230000000000012473613140015163 5ustar wheelerteddyhmmer-3.1b2/libdivsufsort/divsufsort.c0000664361611702660230000014414412473612611017551 0ustar wheelerteddy/* * divsufsort.c for libdivsufsort-lite * Copyright (c) 2003-2008 Yuta Mori All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ #include #include #include #ifdef _OPENMP # include #endif #include "divsufsort.h" /*- Constants -*/ #define INLINE __inline #if defined(ALPHABET_SIZE) && (ALPHABET_SIZE < 1) # undef ALPHABET_SIZE #endif #if !defined(ALPHABET_SIZE) # define ALPHABET_SIZE (256) #endif #define BUCKET_A_SIZE (ALPHABET_SIZE) #define BUCKET_B_SIZE (ALPHABET_SIZE * ALPHABET_SIZE) #if defined(SS_INSERTIONSORT_THRESHOLD) # if SS_INSERTIONSORT_THRESHOLD < 1 # undef SS_INSERTIONSORT_THRESHOLD # define SS_INSERTIONSORT_THRESHOLD (1) # endif #else # define SS_INSERTIONSORT_THRESHOLD (8) #endif #if defined(SS_BLOCKSIZE) # if SS_BLOCKSIZE < 0 # undef SS_BLOCKSIZE # define SS_BLOCKSIZE (0) # elif 32768 <= SS_BLOCKSIZE # undef SS_BLOCKSIZE # define SS_BLOCKSIZE (32767) # endif #else # define SS_BLOCKSIZE (1024) #endif /* minstacksize = log(SS_BLOCKSIZE) / log(3) * 2 */ #if SS_BLOCKSIZE == 0 # define SS_MISORT_STACKSIZE (96) #elif SS_BLOCKSIZE <= 4096 # define SS_MISORT_STACKSIZE (16) #else # define SS_MISORT_STACKSIZE (24) #endif #define SS_SMERGE_STACKSIZE (32) #define TR_INSERTIONSORT_THRESHOLD (8) #define TR_STACKSIZE (64) /*- Macros -*/ #ifndef SWAP # define SWAP(_a, _b) do { t = (_a); (_a) = (_b); (_b) = t; } while(0) #endif /* SWAP */ #ifndef MIN # define MIN(_a, _b) (((_a) < (_b)) ? (_a) : (_b)) #endif /* MIN */ #ifndef MAX # define MAX(_a, _b) (((_a) > (_b)) ? (_a) : (_b)) #endif /* MAX */ #define STACK_PUSH(_a, _b, _c, _d)\ do {\ assert(ssize < STACK_SIZE);\ stack[ssize].a = (_a), stack[ssize].b = (_b),\ stack[ssize].c = (_c), stack[ssize++].d = (_d);\ } while(0) #define STACK_PUSH5(_a, _b, _c, _d, _e)\ do {\ assert(ssize < STACK_SIZE);\ stack[ssize].a = (_a), stack[ssize].b = (_b),\ stack[ssize].c = (_c), stack[ssize].d = (_d), stack[ssize++].e = (_e);\ } while(0) #define STACK_POP(_a, _b, _c, _d)\ do {\ assert(0 <= ssize);\ if(ssize == 0) { return; }\ (_a) = stack[--ssize].a, (_b) = stack[ssize].b,\ (_c) = stack[ssize].c, (_d) = stack[ssize].d;\ } while(0) #define STACK_POP5(_a, _b, _c, _d, _e)\ do {\ assert(0 <= ssize);\ if(ssize == 0) { return; }\ (_a) = stack[--ssize].a, (_b) = stack[ssize].b,\ (_c) = stack[ssize].c, (_d) = stack[ssize].d, (_e) = stack[ssize].e;\ } while(0) #define BUCKET_A(_c0) bucket_A[(_c0)] #if ALPHABET_SIZE == 256 #define BUCKET_B(_c0, _c1) (bucket_B[((_c1) << 8) | (_c0)]) #define BUCKET_BSTAR(_c0, _c1) (bucket_B[((_c0) << 8) | (_c1)]) #else #define BUCKET_B(_c0, _c1) (bucket_B[(_c1) * ALPHABET_SIZE + (_c0)]) #define BUCKET_BSTAR(_c0, _c1) (bucket_B[(_c0) * ALPHABET_SIZE + (_c1)]) #endif /*- Private Functions -*/ static const int lg_table[256]= { -1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 }; #if (SS_BLOCKSIZE == 0) || (SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE) static INLINE int ss_ilg(int n) { #if SS_BLOCKSIZE == 0 return (n & 0xffff0000) ? ((n & 0xff000000) ? 24 + lg_table[(n >> 24) & 0xff] : 16 + lg_table[(n >> 16) & 0xff]) : ((n & 0x0000ff00) ? 8 + lg_table[(n >> 8) & 0xff] : 0 + lg_table[(n >> 0) & 0xff]); #elif SS_BLOCKSIZE < 256 return lg_table[n]; #else return (n & 0xff00) ? 8 + lg_table[(n >> 8) & 0xff] : 0 + lg_table[(n >> 0) & 0xff]; #endif } #endif /* (SS_BLOCKSIZE == 0) || (SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE) */ #if SS_BLOCKSIZE != 0 static const int sqq_table[256] = { 0, 16, 22, 27, 32, 35, 39, 42, 45, 48, 50, 53, 55, 57, 59, 61, 64, 65, 67, 69, 71, 73, 75, 76, 78, 80, 81, 83, 84, 86, 87, 89, 90, 91, 93, 94, 96, 97, 98, 99, 101, 102, 103, 104, 106, 107, 108, 109, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 128, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 144, 145, 146, 147, 148, 149, 150, 150, 151, 152, 153, 154, 155, 155, 156, 157, 158, 159, 160, 160, 161, 162, 163, 163, 164, 165, 166, 167, 167, 168, 169, 170, 170, 171, 172, 173, 173, 174, 175, 176, 176, 177, 178, 178, 179, 180, 181, 181, 182, 183, 183, 184, 185, 185, 186, 187, 187, 188, 189, 189, 190, 191, 192, 192, 193, 193, 194, 195, 195, 196, 197, 197, 198, 199, 199, 200, 201, 201, 202, 203, 203, 204, 204, 205, 206, 206, 207, 208, 208, 209, 209, 210, 211, 211, 212, 212, 213, 214, 214, 215, 215, 216, 217, 217, 218, 218, 219, 219, 220, 221, 221, 222, 222, 223, 224, 224, 225, 225, 226, 226, 227, 227, 228, 229, 229, 230, 230, 231, 231, 232, 232, 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, 239, 240, 240, 241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, 253, 253, 254, 254, 255 }; static INLINE int ss_isqrt(int x) { int y, e; if(x >= (SS_BLOCKSIZE * SS_BLOCKSIZE)) { return SS_BLOCKSIZE; } e = (x & 0xffff0000) ? ((x & 0xff000000) ? 24 + lg_table[(x >> 24) & 0xff] : 16 + lg_table[(x >> 16) & 0xff]) : ((x & 0x0000ff00) ? 8 + lg_table[(x >> 8) & 0xff] : 0 + lg_table[(x >> 0) & 0xff]); if(e >= 16) { y = sqq_table[x >> ((e - 6) - (e & 1))] << ((e >> 1) - 7); if(e >= 24) { y = (y + 1 + x / y) >> 1; } y = (y + 1 + x / y) >> 1; } else if(e >= 8) { y = (sqq_table[x >> ((e - 6) - (e & 1))] >> (7 - (e >> 1))) + 1; } else { return sqq_table[x] >> 4; } return (x < (y * y)) ? y - 1 : y; } #endif /* SS_BLOCKSIZE != 0 */ /*---------------------------------------------------------------------------*/ /* Compares two suffixes. */ static INLINE int ss_compare(const unsigned char *T, const int *p1, const int *p2, int depth) { const unsigned char *U1, *U2, *U1n, *U2n; for(U1 = T + depth + *p1, U2 = T + depth + *p2, U1n = T + *(p1 + 1) + 2, U2n = T + *(p2 + 1) + 2; (U1 < U1n) && (U2 < U2n) && (*U1 == *U2); ++U1, ++U2) { } return U1 < U1n ? (U2 < U2n ? *U1 - *U2 : 1) : (U2 < U2n ? -1 : 0); } /*---------------------------------------------------------------------------*/ #if (SS_BLOCKSIZE != 1) && (SS_INSERTIONSORT_THRESHOLD != 1) /* Insertionsort for small size groups */ static void ss_insertionsort(const unsigned char *T, const int *PA, int *first, int *last, int depth) { int *i, *j; int t; int r; for(i = last - 2; first <= i; --i) { for(t = *i, j = i + 1; 0 < (r = ss_compare(T, PA + t, PA + *j, depth));) { do { *(j - 1) = *j; } while((++j < last) && (*j < 0)); if(last <= j) { break; } } if(r == 0) { *j = ~*j; } *(j - 1) = t; } } #endif /* (SS_BLOCKSIZE != 1) && (SS_INSERTIONSORT_THRESHOLD != 1) */ /*---------------------------------------------------------------------------*/ #if (SS_BLOCKSIZE == 0) || (SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE) static INLINE void ss_fixdown(const unsigned char *Td, const int *PA, int *SA, int i, int size) { int j, k; int v; int c, d, e; for(v = SA[i], c = Td[PA[v]]; (j = 2 * i + 1) < size; SA[i] = SA[k], i = k) { d = Td[PA[SA[k = j++]]]; if(d < (e = Td[PA[SA[j]]])) { k = j; d = e; } if(d <= c) { break; } } SA[i] = v; } /* Simple top-down heapsort. */ static void ss_heapsort(const unsigned char *Td, const int *PA, int *SA, int size) { int i, m; int t; m = size; if((size % 2) == 0) { m--; if(Td[PA[SA[m / 2]]] < Td[PA[SA[m]]]) { SWAP(SA[m], SA[m / 2]); } } for(i = m / 2 - 1; 0 <= i; --i) { ss_fixdown(Td, PA, SA, i, m); } if((size % 2) == 0) { SWAP(SA[0], SA[m]); ss_fixdown(Td, PA, SA, 0, m); } for(i = m - 1; 0 < i; --i) { t = SA[0], SA[0] = SA[i]; ss_fixdown(Td, PA, SA, 0, i); SA[i] = t; } } /*---------------------------------------------------------------------------*/ /* Returns the median of three elements. */ static INLINE int * ss_median3(const unsigned char *Td, const int *PA, int *v1, int *v2, int *v3) { int *t; if(Td[PA[*v1]] > Td[PA[*v2]]) { SWAP(v1, v2); } if(Td[PA[*v2]] > Td[PA[*v3]]) { if(Td[PA[*v1]] > Td[PA[*v3]]) { return v1; } else { return v3; } } return v2; } /* Returns the median of five elements. */ static INLINE int * ss_median5(const unsigned char *Td, const int *PA, int *v1, int *v2, int *v3, int *v4, int *v5) { int *t; if(Td[PA[*v2]] > Td[PA[*v3]]) { SWAP(v2, v3); } if(Td[PA[*v4]] > Td[PA[*v5]]) { SWAP(v4, v5); } if(Td[PA[*v2]] > Td[PA[*v4]]) { SWAP(v2, v4); SWAP(v3, v5); } if(Td[PA[*v1]] > Td[PA[*v3]]) { SWAP(v1, v3); } if(Td[PA[*v1]] > Td[PA[*v4]]) { SWAP(v1, v4); SWAP(v3, v5); } if(Td[PA[*v3]] > Td[PA[*v4]]) { return v4; } return v3; } /* Returns the pivot element. */ static INLINE int * ss_pivot(const unsigned char *Td, const int *PA, int *first, int *last) { int *middle; int t; t = last - first; middle = first + t / 2; if(t <= 512) { if(t <= 32) { return ss_median3(Td, PA, first, middle, last - 1); } else { t >>= 2; return ss_median5(Td, PA, first, first + t, middle, last - 1 - t, last - 1); } } t >>= 3; first = ss_median3(Td, PA, first, first + t, first + (t << 1)); middle = ss_median3(Td, PA, middle - t, middle, middle + t); last = ss_median3(Td, PA, last - 1 - (t << 1), last - 1 - t, last - 1); return ss_median3(Td, PA, first, middle, last); } /*---------------------------------------------------------------------------*/ /* Binary partition for substrings. */ static INLINE int * ss_partition(const int *PA, int *first, int *last, int depth) { int *a, *b; int t; for(a = first - 1, b = last;;) { for(; (++a < b) && ((PA[*a] + depth) >= (PA[*a + 1] + 1));) { *a = ~*a; } for(; (a < --b) && ((PA[*b] + depth) < (PA[*b + 1] + 1));) { } if(b <= a) { break; } t = ~*b; *b = *a; *a = t; } if(first < a) { *first = ~*first; } return a; } /* Multikey introsort for medium size groups. */ static void ss_mintrosort(const unsigned char *T, const int *PA, int *first, int *last, int depth) { #define STACK_SIZE SS_MISORT_STACKSIZE struct { int *a, *b, c; int d; } stack[STACK_SIZE]; const unsigned char *Td; int *a, *b, *c, *d, *e, *f; int s, t; int ssize; int limit; int v, x = 0; for(ssize = 0, limit = ss_ilg(last - first);;) { if((last - first) <= SS_INSERTIONSORT_THRESHOLD) { #if 1 < SS_INSERTIONSORT_THRESHOLD if(1 < (last - first)) { ss_insertionsort(T, PA, first, last, depth); } #endif STACK_POP(first, last, depth, limit); continue; } Td = T + depth; if(limit-- == 0) { ss_heapsort(Td, PA, first, last - first); } if(limit < 0) { for(a = first + 1, v = Td[PA[*first]]; a < last; ++a) { if((x = Td[PA[*a]]) != v) { if(1 < (a - first)) { break; } v = x; first = a; } } if(Td[PA[*first] - 1] < v) { first = ss_partition(PA, first, a, depth); } if((a - first) <= (last - a)) { if(1 < (a - first)) { STACK_PUSH(a, last, depth, -1); last = a, depth += 1, limit = ss_ilg(a - first); } else { first = a, limit = -1; } } else { if(1 < (last - a)) { STACK_PUSH(first, a, depth + 1, ss_ilg(a - first)); first = a, limit = -1; } else { last = a, depth += 1, limit = ss_ilg(a - first); } } continue; } /* choose pivot */ a = ss_pivot(Td, PA, first, last); v = Td[PA[*a]]; SWAP(*first, *a); /* partition */ for(b = first; (++b < last) && ((x = Td[PA[*b]]) == v);) { } if(((a = b) < last) && (x < v)) { for(; (++b < last) && ((x = Td[PA[*b]]) <= v);) { if(x == v) { SWAP(*b, *a); ++a; } } } for(c = last; (b < --c) && ((x = Td[PA[*c]]) == v);) { } if((b < (d = c)) && (x > v)) { for(; (b < --c) && ((x = Td[PA[*c]]) >= v);) { if(x == v) { SWAP(*c, *d); --d; } } } for(; b < c;) { SWAP(*b, *c); for(; (++b < c) && ((x = Td[PA[*b]]) <= v);) { if(x == v) { SWAP(*b, *a); ++a; } } for(; (b < --c) && ((x = Td[PA[*c]]) >= v);) { if(x == v) { SWAP(*c, *d); --d; } } } if(a <= d) { c = b - 1; if((s = a - first) > (t = b - a)) { s = t; } for(e = first, f = b - s; 0 < s; --s, ++e, ++f) { SWAP(*e, *f); } if((s = d - c) > (t = last - d - 1)) { s = t; } for(e = b, f = last - s; 0 < s; --s, ++e, ++f) { SWAP(*e, *f); } a = first + (b - a), c = last - (d - c); b = (v <= Td[PA[*a] - 1]) ? a : ss_partition(PA, a, c, depth); if((a - first) <= (last - c)) { if((last - c) <= (c - b)) { STACK_PUSH(b, c, depth + 1, ss_ilg(c - b)); STACK_PUSH(c, last, depth, limit); last = a; } else if((a - first) <= (c - b)) { STACK_PUSH(c, last, depth, limit); STACK_PUSH(b, c, depth + 1, ss_ilg(c - b)); last = a; } else { STACK_PUSH(c, last, depth, limit); STACK_PUSH(first, a, depth, limit); first = b, last = c, depth += 1, limit = ss_ilg(c - b); } } else { if((a - first) <= (c - b)) { STACK_PUSH(b, c, depth + 1, ss_ilg(c - b)); STACK_PUSH(first, a, depth, limit); first = c; } else if((last - c) <= (c - b)) { STACK_PUSH(first, a, depth, limit); STACK_PUSH(b, c, depth + 1, ss_ilg(c - b)); first = c; } else { STACK_PUSH(first, a, depth, limit); STACK_PUSH(c, last, depth, limit); first = b, last = c, depth += 1, limit = ss_ilg(c - b); } } } else { limit += 1; if(Td[PA[*first] - 1] < v) { first = ss_partition(PA, first, last, depth); limit = ss_ilg(last - first); } depth += 1; } } #undef STACK_SIZE } #endif /* (SS_BLOCKSIZE == 0) || (SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE) */ /*---------------------------------------------------------------------------*/ #if SS_BLOCKSIZE != 0 static INLINE void ss_blockswap(int *a, int *b, int n) { int t; for(; 0 < n; --n, ++a, ++b) { t = *a, *a = *b, *b = t; } } static INLINE void ss_rotate(int *first, int *middle, int *last) { int *a, *b, t; int l, r; l = middle - first, r = last - middle; for(; (0 < l) && (0 < r);) { if(l == r) { ss_blockswap(first, middle, l); break; } if(l < r) { a = last - 1, b = middle - 1; t = *a; do { *a-- = *b, *b-- = *a; if(b < first) { *a = t; last = a; if((r -= l + 1) <= l) { break; } a -= 1, b = middle - 1; t = *a; } } while(1); } else { a = first, b = middle; t = *a; do { *a++ = *b, *b++ = *a; if(last <= b) { *a = t; first = a + 1; if((l -= r + 1) <= r) { break; } a += 1, b = middle; t = *a; } } while(1); } } } /*---------------------------------------------------------------------------*/ static void ss_inplacemerge(const unsigned char *T, const int *PA, int *first, int *middle, int *last, int depth) { const int *p; int *a, *b; int len, half; int q, r; int x; for(;;) { if(*(last - 1) < 0) { x = 1; p = PA + ~*(last - 1); } else { x = 0; p = PA + *(last - 1); } for(a = first, len = middle - first, half = len >> 1, r = -1; 0 < len; len = half, half >>= 1) { b = a + half; q = ss_compare(T, PA + ((0 <= *b) ? *b : ~*b), p, depth); if(q < 0) { a = b + 1; half -= (len & 1) ^ 1; } else { r = q; } } if(a < middle) { if(r == 0) { *a = ~*a; } ss_rotate(a, middle, last); last -= middle - a; middle = a; if(first == middle) { break; } } --last; if(x != 0) { while(*--last < 0) { } } if(middle == last) { break; } } } /*---------------------------------------------------------------------------*/ /* Merge-forward with internal buffer. */ static void ss_mergeforward(const unsigned char *T, const int *PA, int *first, int *middle, int *last, int *buf, int depth) { int *a, *b, *c, *bufend; int t; int r; bufend = buf + (middle - first) - 1; ss_blockswap(buf, first, middle - first); for(t = *(a = first), b = buf, c = middle;;) { r = ss_compare(T, PA + *b, PA + *c, depth); if(r < 0) { do { *a++ = *b; if(bufend <= b) { *bufend = t; return; } *b++ = *a; } while(*b < 0); } else if(r > 0) { do { *a++ = *c, *c++ = *a; if(last <= c) { while(b < bufend) { *a++ = *b, *b++ = *a; } *a = *b, *b = t; return; } } while(*c < 0); } else { *c = ~*c; do { *a++ = *b; if(bufend <= b) { *bufend = t; return; } *b++ = *a; } while(*b < 0); do { *a++ = *c, *c++ = *a; if(last <= c) { while(b < bufend) { *a++ = *b, *b++ = *a; } *a = *b, *b = t; return; } } while(*c < 0); } } } /* Merge-backward with internal buffer. */ static void ss_mergebackward(const unsigned char *T, const int *PA, int *first, int *middle, int *last, int *buf, int depth) { const int *p1, *p2; int *a, *b, *c, *bufend; int t; int r; int x; bufend = buf + (last - middle) - 1; ss_blockswap(buf, middle, last - middle); x = 0; if(*bufend < 0) { p1 = PA + ~*bufend; x |= 1; } else { p1 = PA + *bufend; } if(*(middle - 1) < 0) { p2 = PA + ~*(middle - 1); x |= 2; } else { p2 = PA + *(middle - 1); } for(t = *(a = last - 1), b = bufend, c = middle - 1;;) { r = ss_compare(T, p1, p2, depth); if(0 < r) { if(x & 1) { do { *a-- = *b, *b-- = *a; } while(*b < 0); x ^= 1; } *a-- = *b; if(b <= buf) { *buf = t; break; } *b-- = *a; if(*b < 0) { p1 = PA + ~*b; x |= 1; } else { p1 = PA + *b; } } else if(r < 0) { if(x & 2) { do { *a-- = *c, *c-- = *a; } while(*c < 0); x ^= 2; } *a-- = *c, *c-- = *a; if(c < first) { while(buf < b) { *a-- = *b, *b-- = *a; } *a = *b, *b = t; break; } if(*c < 0) { p2 = PA + ~*c; x |= 2; } else { p2 = PA + *c; } } else { if(x & 1) { do { *a-- = *b, *b-- = *a; } while(*b < 0); x ^= 1; } *a-- = ~*b; if(b <= buf) { *buf = t; break; } *b-- = *a; if(x & 2) { do { *a-- = *c, *c-- = *a; } while(*c < 0); x ^= 2; } *a-- = *c, *c-- = *a; if(c < first) { while(buf < b) { *a-- = *b, *b-- = *a; } *a = *b, *b = t; break; } if(*b < 0) { p1 = PA + ~*b; x |= 1; } else { p1 = PA + *b; } if(*c < 0) { p2 = PA + ~*c; x |= 2; } else { p2 = PA + *c; } } } } /* D&C based merge. */ static void ss_swapmerge(const unsigned char *T, const int *PA, int *first, int *middle, int *last, int *buf, int bufsize, int depth) { #define STACK_SIZE SS_SMERGE_STACKSIZE #define GETIDX(a) ((0 <= (a)) ? (a) : (~(a))) #define MERGE_CHECK(a, b, c)\ do {\ if(((c) & 1) ||\ (((c) & 2) && (ss_compare(T, PA + GETIDX(*((a) - 1)), PA + *(a), depth) == 0))) {\ *(a) = ~*(a);\ }\ if(((c) & 4) && ((ss_compare(T, PA + GETIDX(*((b) - 1)), PA + *(b), depth) == 0))) {\ *(b) = ~*(b);\ }\ } while(0) struct { int *a, *b, *c; int d; } stack[STACK_SIZE]; int *l, *r, *lm, *rm; int m, len, half; int ssize; int check, next; for(check = 0, ssize = 0;;) { if((last - middle) <= bufsize) { if((first < middle) && (middle < last)) { ss_mergebackward(T, PA, first, middle, last, buf, depth); } MERGE_CHECK(first, last, check); STACK_POP(first, middle, last, check); continue; } if((middle - first) <= bufsize) { if(first < middle) { ss_mergeforward(T, PA, first, middle, last, buf, depth); } MERGE_CHECK(first, last, check); STACK_POP(first, middle, last, check); continue; } for(m = 0, len = MIN(middle - first, last - middle), half = len >> 1; 0 < len; len = half, half >>= 1) { if(ss_compare(T, PA + GETIDX(*(middle + m + half)), PA + GETIDX(*(middle - m - half - 1)), depth) < 0) { m += half + 1; half -= (len & 1) ^ 1; } } if(0 < m) { lm = middle - m, rm = middle + m; ss_blockswap(lm, middle, m); l = r = middle, next = 0; if(rm < last) { if(*rm < 0) { *rm = ~*rm; if(first < lm) { for(; *--l < 0;) { } next |= 4; } next |= 1; } else if(first < lm) { for(; *r < 0; ++r) { } next |= 2; } } if((l - first) <= (last - r)) { STACK_PUSH(r, rm, last, (next & 3) | (check & 4)); middle = lm, last = l, check = (check & 3) | (next & 4); } else { if((next & 2) && (r == middle)) { next ^= 6; } STACK_PUSH(first, lm, l, (check & 3) | (next & 4)); first = r, middle = rm, check = (next & 3) | (check & 4); } } else { if(ss_compare(T, PA + GETIDX(*(middle - 1)), PA + *middle, depth) == 0) { *middle = ~*middle; } MERGE_CHECK(first, last, check); STACK_POP(first, middle, last, check); } } #undef STACK_SIZE } #endif /* SS_BLOCKSIZE != 0 */ /*---------------------------------------------------------------------------*/ /* Substring sort */ static void sssort(const unsigned char *T, const int *PA, int *first, int *last, int *buf, int bufsize, int depth, int n, int lastsuffix) { int *a; #if SS_BLOCKSIZE != 0 int *b, *middle, *curbuf; int j, k, curbufsize, limit; #endif int i; if(lastsuffix != 0) { ++first; } #if SS_BLOCKSIZE == 0 ss_mintrosort(T, PA, first, last, depth); #else if((bufsize < SS_BLOCKSIZE) && (bufsize < (last - first)) && (bufsize < (limit = ss_isqrt(last - first)))) { if(SS_BLOCKSIZE < limit) { limit = SS_BLOCKSIZE; } buf = middle = last - limit, bufsize = limit; } else { middle = last, limit = 0; } for(a = first, i = 0; SS_BLOCKSIZE < (middle - a); a += SS_BLOCKSIZE, ++i) { #if SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE ss_mintrosort(T, PA, a, a + SS_BLOCKSIZE, depth); #elif 1 < SS_BLOCKSIZE ss_insertionsort(T, PA, a, a + SS_BLOCKSIZE, depth); #endif curbufsize = last - (a + SS_BLOCKSIZE); curbuf = a + SS_BLOCKSIZE; if(curbufsize <= bufsize) { curbufsize = bufsize, curbuf = buf; } for(b = a, k = SS_BLOCKSIZE, j = i; j & 1; b -= k, k <<= 1, j >>= 1) { ss_swapmerge(T, PA, b - k, b, b + k, curbuf, curbufsize, depth); } } #if SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE ss_mintrosort(T, PA, a, middle, depth); #elif 1 < SS_BLOCKSIZE ss_insertionsort(T, PA, a, middle, depth); #endif for(k = SS_BLOCKSIZE; i != 0; k <<= 1, i >>= 1) { if(i & 1) { ss_swapmerge(T, PA, a - k, a, middle, buf, bufsize, depth); a -= k; } } if(limit != 0) { #if SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE ss_mintrosort(T, PA, middle, last, depth); #elif 1 < SS_BLOCKSIZE ss_insertionsort(T, PA, middle, last, depth); #endif ss_inplacemerge(T, PA, first, middle, last, depth); } #endif if(lastsuffix != 0) { /* Insert last type B* suffix. */ int PAi[2]; PAi[0] = PA[*(first - 1)], PAi[1] = n - 2; for(a = first, i = *(first - 1); (a < last) && ((*a < 0) || (0 < ss_compare(T, &(PAi[0]), PA + *a, depth))); ++a) { *(a - 1) = *a; } *(a - 1) = i; } } /*---------------------------------------------------------------------------*/ static INLINE int tr_ilg(int n) { return (n & 0xffff0000) ? ((n & 0xff000000) ? 24 + lg_table[(n >> 24) & 0xff] : 16 + lg_table[(n >> 16) & 0xff]) : ((n & 0x0000ff00) ? 8 + lg_table[(n >> 8) & 0xff] : 0 + lg_table[(n >> 0) & 0xff]); } /*---------------------------------------------------------------------------*/ /* Simple insertionsort for small size groups. */ static void tr_insertionsort(const int *ISAd, int *first, int *last) { int *a, *b; int t, r; for(a = first + 1; a < last; ++a) { for(t = *a, b = a - 1; 0 > (r = ISAd[t] - ISAd[*b]);) { do { *(b + 1) = *b; } while((first <= --b) && (*b < 0)); if(b < first) { break; } } if(r == 0) { *b = ~*b; } *(b + 1) = t; } } /*---------------------------------------------------------------------------*/ static INLINE void tr_fixdown(const int *ISAd, int *SA, int i, int size) { int j, k; int v; int c, d, e; for(v = SA[i], c = ISAd[v]; (j = 2 * i + 1) < size; SA[i] = SA[k], i = k) { d = ISAd[SA[k = j++]]; if(d < (e = ISAd[SA[j]])) { k = j; d = e; } if(d <= c) { break; } } SA[i] = v; } /* Simple top-down heapsort. */ static void tr_heapsort(const int *ISAd, int *SA, int size) { int i, m; int t; m = size; if((size % 2) == 0) { m--; if(ISAd[SA[m / 2]] < ISAd[SA[m]]) { SWAP(SA[m], SA[m / 2]); } } for(i = m / 2 - 1; 0 <= i; --i) { tr_fixdown(ISAd, SA, i, m); } if((size % 2) == 0) { SWAP(SA[0], SA[m]); tr_fixdown(ISAd, SA, 0, m); } for(i = m - 1; 0 < i; --i) { t = SA[0], SA[0] = SA[i]; tr_fixdown(ISAd, SA, 0, i); SA[i] = t; } } /*---------------------------------------------------------------------------*/ /* Returns the median of three elements. */ static INLINE int * tr_median3(const int *ISAd, int *v1, int *v2, int *v3) { int *t; if(ISAd[*v1] > ISAd[*v2]) { SWAP(v1, v2); } if(ISAd[*v2] > ISAd[*v3]) { if(ISAd[*v1] > ISAd[*v3]) { return v1; } else { return v3; } } return v2; } /* Returns the median of five elements. */ static INLINE int * tr_median5(const int *ISAd, int *v1, int *v2, int *v3, int *v4, int *v5) { int *t; if(ISAd[*v2] > ISAd[*v3]) { SWAP(v2, v3); } if(ISAd[*v4] > ISAd[*v5]) { SWAP(v4, v5); } if(ISAd[*v2] > ISAd[*v4]) { SWAP(v2, v4); SWAP(v3, v5); } if(ISAd[*v1] > ISAd[*v3]) { SWAP(v1, v3); } if(ISAd[*v1] > ISAd[*v4]) { SWAP(v1, v4); SWAP(v3, v5); } if(ISAd[*v3] > ISAd[*v4]) { return v4; } return v3; } /* Returns the pivot element. */ static INLINE int * tr_pivot(const int *ISAd, int *first, int *last) { int *middle; int t; t = last - first; middle = first + t / 2; if(t <= 512) { if(t <= 32) { return tr_median3(ISAd, first, middle, last - 1); } else { t >>= 2; return tr_median5(ISAd, first, first + t, middle, last - 1 - t, last - 1); } } t >>= 3; first = tr_median3(ISAd, first, first + t, first + (t << 1)); middle = tr_median3(ISAd, middle - t, middle, middle + t); last = tr_median3(ISAd, last - 1 - (t << 1), last - 1 - t, last - 1); return tr_median3(ISAd, first, middle, last); } /*---------------------------------------------------------------------------*/ typedef struct _trbudget_t trbudget_t; struct _trbudget_t { int chance; int remain; int incval; int count; }; static INLINE void trbudget_init(trbudget_t *budget, int chance, int incval) { budget->chance = chance; budget->remain = budget->incval = incval; } static INLINE int trbudget_check(trbudget_t *budget, int size) { if(size <= budget->remain) { budget->remain -= size; return 1; } if(budget->chance == 0) { budget->count += size; return 0; } budget->remain += budget->incval - size; budget->chance -= 1; return 1; } /*---------------------------------------------------------------------------*/ static INLINE void tr_partition(const int *ISAd, int *first, int *middle, int *last, int **pa, int **pb, int v) { int *a, *b, *c, *d, *e, *f; int t, s; int x = 0; for(b = middle - 1; (++b < last) && ((x = ISAd[*b]) == v);) { } if(((a = b) < last) && (x < v)) { for(; (++b < last) && ((x = ISAd[*b]) <= v);) { if(x == v) { SWAP(*b, *a); ++a; } } } for(c = last; (b < --c) && ((x = ISAd[*c]) == v);) { } if((b < (d = c)) && (x > v)) { for(; (b < --c) && ((x = ISAd[*c]) >= v);) { if(x == v) { SWAP(*c, *d); --d; } } } for(; b < c;) { SWAP(*b, *c); for(; (++b < c) && ((x = ISAd[*b]) <= v);) { if(x == v) { SWAP(*b, *a); ++a; } } for(; (b < --c) && ((x = ISAd[*c]) >= v);) { if(x == v) { SWAP(*c, *d); --d; } } } if(a <= d) { c = b - 1; if((s = a - first) > (t = b - a)) { s = t; } for(e = first, f = b - s; 0 < s; --s, ++e, ++f) { SWAP(*e, *f); } if((s = d - c) > (t = last - d - 1)) { s = t; } for(e = b, f = last - s; 0 < s; --s, ++e, ++f) { SWAP(*e, *f); } first += (b - a), last -= (d - c); } *pa = first, *pb = last; } static void tr_copy(int *ISA, const int *SA, int *first, int *a, int *b, int *last, int depth) { /* sort suffixes of middle partition by using sorted order of suffixes of left and right partition. */ int *c, *d, *e; int s, v; v = b - SA - 1; for(c = first, d = a - 1; c <= d; ++c) { if((0 <= (s = *c - depth)) && (ISA[s] == v)) { *++d = s; ISA[s] = d - SA; } } for(c = last - 1, e = d + 1, d = b; e < d; --c) { if((0 <= (s = *c - depth)) && (ISA[s] == v)) { *--d = s; ISA[s] = d - SA; } } } static void tr_partialcopy(int *ISA, const int *SA, int *first, int *a, int *b, int *last, int depth) { int *c, *d, *e; int s, v; int rank, lastrank, newrank = -1; v = b - SA - 1; lastrank = -1; for(c = first, d = a - 1; c <= d; ++c) { if((0 <= (s = *c - depth)) && (ISA[s] == v)) { *++d = s; rank = ISA[s + depth]; if(lastrank != rank) { lastrank = rank; newrank = d - SA; } ISA[s] = newrank; } } lastrank = -1; for(e = d; first <= e; --e) { rank = ISA[*e]; if(lastrank != rank) { lastrank = rank; newrank = e - SA; } if(newrank != rank) { ISA[*e] = newrank; } } lastrank = -1; for(c = last - 1, e = d + 1, d = b; e < d; --c) { if((0 <= (s = *c - depth)) && (ISA[s] == v)) { *--d = s; rank = ISA[s + depth]; if(lastrank != rank) { lastrank = rank; newrank = d - SA; } ISA[s] = newrank; } } } static void tr_introsort(int *ISA, const int *ISAd, int *SA, int *first, int *last, trbudget_t *budget) { #define STACK_SIZE TR_STACKSIZE struct { const int *a; int *b, *c; int d, e; }stack[STACK_SIZE]; int *a, *b, *c; int t; int v, x = 0; int incr = ISAd - ISA; int limit, next; int ssize, trlink = -1; for(ssize = 0, limit = tr_ilg(last - first);;) { if(limit < 0) { if(limit == -1) { /* tandem repeat partition */ tr_partition(ISAd - incr, first, first, last, &a, &b, last - SA - 1); /* update ranks */ if(a < last) { for(c = first, v = a - SA - 1; c < a; ++c) { ISA[*c] = v; } } if(b < last) { for(c = a, v = b - SA - 1; c < b; ++c) { ISA[*c] = v; } } /* push */ if(1 < (b - a)) { STACK_PUSH5(NULL, a, b, 0, 0); STACK_PUSH5(ISAd - incr, first, last, -2, trlink); trlink = ssize - 2; } if((a - first) <= (last - b)) { if(1 < (a - first)) { STACK_PUSH5(ISAd, b, last, tr_ilg(last - b), trlink); last = a, limit = tr_ilg(a - first); } else if(1 < (last - b)) { first = b, limit = tr_ilg(last - b); } else { STACK_POP5(ISAd, first, last, limit, trlink); } } else { if(1 < (last - b)) { STACK_PUSH5(ISAd, first, a, tr_ilg(a - first), trlink); first = b, limit = tr_ilg(last - b); } else if(1 < (a - first)) { last = a, limit = tr_ilg(a - first); } else { STACK_POP5(ISAd, first, last, limit, trlink); } } } else if(limit == -2) { /* tandem repeat copy */ a = stack[--ssize].b, b = stack[ssize].c; if(stack[ssize].d == 0) { tr_copy(ISA, SA, first, a, b, last, ISAd - ISA); } else { if(0 <= trlink) { stack[trlink].d = -1; } tr_partialcopy(ISA, SA, first, a, b, last, ISAd - ISA); } STACK_POP5(ISAd, first, last, limit, trlink); } else { /* sorted partition */ if(0 <= *first) { a = first; do { ISA[*a] = a - SA; } while((++a < last) && (0 <= *a)); first = a; } if(first < last) { a = first; do { *a = ~*a; } while(*++a < 0); next = (ISA[*a] != ISAd[*a]) ? tr_ilg(a - first + 1) : -1; if(++a < last) { for(b = first, v = a - SA - 1; b < a; ++b) { ISA[*b] = v; } } /* push */ if(trbudget_check(budget, a - first)) { if((a - first) <= (last - a)) { STACK_PUSH5(ISAd, a, last, -3, trlink); ISAd += incr, last = a, limit = next; } else { if(1 < (last - a)) { STACK_PUSH5(ISAd + incr, first, a, next, trlink); first = a, limit = -3; } else { ISAd += incr, last = a, limit = next; } } } else { if(0 <= trlink) { stack[trlink].d = -1; } if(1 < (last - a)) { first = a, limit = -3; } else { STACK_POP5(ISAd, first, last, limit, trlink); } } } else { STACK_POP5(ISAd, first, last, limit, trlink); } } continue; } if((last - first) <= TR_INSERTIONSORT_THRESHOLD) { tr_insertionsort(ISAd, first, last); limit = -3; continue; } if(limit-- == 0) { tr_heapsort(ISAd, first, last - first); for(a = last - 1; first < a; a = b) { for(x = ISAd[*a], b = a - 1; (first <= b) && (ISAd[*b] == x); --b) { *b = ~*b; } } limit = -3; continue; } /* choose pivot */ a = tr_pivot(ISAd, first, last); SWAP(*first, *a); v = ISAd[*first]; /* partition */ tr_partition(ISAd, first, first + 1, last, &a, &b, v); if((last - first) != (b - a)) { next = (ISA[*a] != v) ? tr_ilg(b - a) : -1; /* update ranks */ for(c = first, v = a - SA - 1; c < a; ++c) { ISA[*c] = v; } if(b < last) { for(c = a, v = b - SA - 1; c < b; ++c) { ISA[*c] = v; } } /* push */ if((1 < (b - a)) && (trbudget_check(budget, b - a))) { if((a - first) <= (last - b)) { if((last - b) <= (b - a)) { if(1 < (a - first)) { STACK_PUSH5(ISAd + incr, a, b, next, trlink); STACK_PUSH5(ISAd, b, last, limit, trlink); last = a; } else if(1 < (last - b)) { STACK_PUSH5(ISAd + incr, a, b, next, trlink); first = b; } else { ISAd += incr, first = a, last = b, limit = next; } } else if((a - first) <= (b - a)) { if(1 < (a - first)) { STACK_PUSH5(ISAd, b, last, limit, trlink); STACK_PUSH5(ISAd + incr, a, b, next, trlink); last = a; } else { STACK_PUSH5(ISAd, b, last, limit, trlink); ISAd += incr, first = a, last = b, limit = next; } } else { STACK_PUSH5(ISAd, b, last, limit, trlink); STACK_PUSH5(ISAd, first, a, limit, trlink); ISAd += incr, first = a, last = b, limit = next; } } else { if((a - first) <= (b - a)) { if(1 < (last - b)) { STACK_PUSH5(ISAd + incr, a, b, next, trlink); STACK_PUSH5(ISAd, first, a, limit, trlink); first = b; } else if(1 < (a - first)) { STACK_PUSH5(ISAd + incr, a, b, next, trlink); last = a; } else { ISAd += incr, first = a, last = b, limit = next; } } else if((last - b) <= (b - a)) { if(1 < (last - b)) { STACK_PUSH5(ISAd, first, a, limit, trlink); STACK_PUSH5(ISAd + incr, a, b, next, trlink); first = b; } else { STACK_PUSH5(ISAd, first, a, limit, trlink); ISAd += incr, first = a, last = b, limit = next; } } else { STACK_PUSH5(ISAd, first, a, limit, trlink); STACK_PUSH5(ISAd, b, last, limit, trlink); ISAd += incr, first = a, last = b, limit = next; } } } else { if((1 < (b - a)) && (0 <= trlink)) { stack[trlink].d = -1; } if((a - first) <= (last - b)) { if(1 < (a - first)) { STACK_PUSH5(ISAd, b, last, limit, trlink); last = a; } else if(1 < (last - b)) { first = b; } else { STACK_POP5(ISAd, first, last, limit, trlink); } } else { if(1 < (last - b)) { STACK_PUSH5(ISAd, first, a, limit, trlink); first = b; } else if(1 < (a - first)) { last = a; } else { STACK_POP5(ISAd, first, last, limit, trlink); } } } } else { if(trbudget_check(budget, last - first)) { limit = tr_ilg(last - first), ISAd += incr; } else { if(0 <= trlink) { stack[trlink].d = -1; } STACK_POP5(ISAd, first, last, limit, trlink); } } } #undef STACK_SIZE } /*---------------------------------------------------------------------------*/ /* Tandem repeat sort */ static void trsort(int *ISA, int *SA, int n, int depth) { int *ISAd; int *first, *last; trbudget_t budget; int t, skip, unsorted; trbudget_init(&budget, tr_ilg(n) * 2 / 3, n); /* trbudget_init(&budget, tr_ilg(n) * 3 / 4, n); */ for(ISAd = ISA + depth; -n < *SA; ISAd += ISAd - ISA) { first = SA; skip = 0; unsorted = 0; do { if((t = *first) < 0) { first -= t; skip += t; } else { if(skip != 0) { *(first + skip) = skip; skip = 0; } last = SA + ISA[t] + 1; if(1 < (last - first)) { budget.count = 0; tr_introsort(ISA, ISAd, SA, first, last, &budget); if(budget.count != 0) { unsorted += budget.count; } else { skip = first - last; } } else if((last - first) == 1) { skip = -1; } first = last; } } while(first < (SA + n)); if(skip != 0) { *(first + skip) = skip; } if(unsorted == 0) { break; } } } /*---------------------------------------------------------------------------*/ /* Sorts suffixes of type B*. */ static int sort_typeBstar(const unsigned char *T, int *SA, int *bucket_A, int *bucket_B, int n) { int *PAb, *ISAb, *buf; #ifdef _OPENMP int *curbuf; int l; #endif int i, j, k, t, m, bufsize; int c0, c1; #ifdef _OPENMP int d0, d1; int tmp; #endif /* Initialize bucket arrays. */ for(i = 0; i < BUCKET_A_SIZE; ++i) { bucket_A[i] = 0; } for(i = 0; i < BUCKET_B_SIZE; ++i) { bucket_B[i] = 0; } /* Count the number of occurrences of the first one or two characters of each type A, B and B* suffix. Moreover, store the beginning position of all type B* suffixes into the array SA. */ i = n - 1; m = n; c0 = T[n - 1]; while ( 0 <= i) { /* type A suffix. */ do { ++BUCKET_A(c1 = c0); } while((0 <= --i) && ((c0 = T[i]) >= c1)); if(0 <= i) { /* type B* suffix. */ ++BUCKET_BSTAR(c0, c1); SA[--m] = i; /* type B suffix. */ for(--i, c1 = c0; (0 <= i) && ((c0 = T[i]) <= c1); --i, c1 = c0) { ++BUCKET_B(c0, c1); } } } m = n - m; /* note: A type B* suffix is lexicographically smaller than a type B suffix that begins with the same first two characters. */ /* Calculate the index of start/end point of each bucket. */ for(c0 = 0, i = 0, j = 0; c0 < ALPHABET_SIZE; ++c0) { t = i + BUCKET_A(c0); BUCKET_A(c0) = i + j; /* start point */ i = t + BUCKET_B(c0, c0); for(c1 = c0 + 1; c1 < ALPHABET_SIZE; ++c1) { j += BUCKET_BSTAR(c0, c1); BUCKET_BSTAR(c0, c1) = j; /* end point */ i += BUCKET_B(c0, c1); } } if(0 < m) { /* Sort the type B* suffixes by their first two characters. */ PAb = SA + n - m; ISAb = SA + m; for(i = m - 2; 0 <= i; --i) { t = PAb[i], c0 = T[t], c1 = T[t + 1]; SA[--BUCKET_BSTAR(c0, c1)] = i; } t = PAb[m - 1], c0 = T[t], c1 = T[t + 1]; SA[--BUCKET_BSTAR(c0, c1)] = m - 1; /* Sort the type B* substrings using sssort. */ #ifdef _OPENMP tmp = omp_get_max_threads(); buf = SA + m, bufsize = (n - (2 * m)) / tmp; c0 = ALPHABET_SIZE - 2, c1 = ALPHABET_SIZE - 1, j = m; #pragma omp parallel default(shared) private(curbuf, k, l, d0, d1, tmp) { tmp = omp_get_thread_num(); curbuf = buf + tmp * bufsize; k = 0; for(;;) { #pragma omp critical(sssort_lock) { if(0 < (l = j)) { d0 = c0, d1 = c1; do { k = BUCKET_BSTAR(d0, d1); if(--d1 <= d0) { d1 = ALPHABET_SIZE - 1; if(--d0 < 0) { break; } } } while(((l - k) <= 1) && (0 < (l = k))); c0 = d0, c1 = d1, j = k; } } if(l == 0) { break; } sssort(T, PAb, SA + k, SA + l, curbuf, bufsize, 2, n, *(SA + k) == (m - 1)); } } #else buf = SA + m, bufsize = n - (2 * m); for(c0 = ALPHABET_SIZE - 2, j = m; 0 < j; --c0) { for(c1 = ALPHABET_SIZE - 1; c0 < c1; j = i, --c1) { i = BUCKET_BSTAR(c0, c1); if(1 < (j - i)) { sssort(T, PAb, SA + i, SA + j, buf, bufsize, 2, n, *(SA + i) == (m - 1)); } } } #endif /* Compute ranks of type B* substrings. */ for(i = m - 1; 0 <= i; --i) { if(0 <= SA[i]) { j = i; do { ISAb[SA[i]] = i; } while((0 <= --i) && (0 <= SA[i])); SA[i + 1] = i - j; if(i <= 0) { break; } } j = i; do { ISAb[SA[i] = ~SA[i]] = j; } while(SA[--i] < 0); ISAb[SA[i]] = j; } /* Construct the inverse suffix array of type B* suffixes using trsort. */ trsort(ISAb, SA, m, 1); /* Set the sorted order of tyoe B* suffixes. */ for(i = n - 1, j = m, c0 = T[n - 1]; 0 <= i;) { for(--i, c1 = c0; (0 <= i) && ((c0 = T[i]) >= c1); --i, c1 = c0) { } if(0 <= i) { t = i; for(--i, c1 = c0; (0 <= i) && ((c0 = T[i]) <= c1); --i, c1 = c0) { } SA[ISAb[--j]] = ((t == 0) || (1 < (t - i))) ? t : ~t; } } /* Calculate the index of start/end point of each bucket. */ BUCKET_B(ALPHABET_SIZE - 1, ALPHABET_SIZE - 1) = n; /* end point */ for(c0 = ALPHABET_SIZE - 2, k = m - 1; 0 <= c0; --c0) { i = BUCKET_A(c0 + 1) - 1; for(c1 = ALPHABET_SIZE - 1; c0 < c1; --c1) { t = i - BUCKET_B(c0, c1); BUCKET_B(c0, c1) = i; /* end point */ /* Move all type B* suffixes to the correct position. */ for(i = t, j = BUCKET_BSTAR(c0, c1); j <= k; --i, --k) { SA[i] = SA[k]; } } BUCKET_BSTAR(c0, c0 + 1) = i - BUCKET_B(c0, c0) + 1; /* start point */ BUCKET_B(c0, c0) = i; /* end point */ } } return m; } /* Constructs the suffix array by using the sorted order of type B* suffixes. */ static void construct_SA(const unsigned char *T, int *SA, int *bucket_A, int *bucket_B, int n, int m) { int *i, *j, *k; int s; int c0, c1, c2; if(0 < m) { /* Construct the sorted order of type B suffixes by using the sorted order of type B* suffixes. */ for(c1 = ALPHABET_SIZE - 2; 0 <= c1; --c1) { /* Scan the suffix array from right to left. */ for(i = SA + BUCKET_BSTAR(c1, c1 + 1), j = SA + BUCKET_A(c1 + 1) - 1, k = NULL, c2 = -1; i <= j; --j) { if(0 < (s = *j)) { assert(T[s] == c1); assert(((s + 1) < n) && (T[s] <= T[s + 1])); assert(T[s - 1] <= T[s]); *j = ~s; c0 = T[--s]; if((0 < s) && (T[s - 1] > c0)) { s = ~s; } if(c0 != c2) { if(0 <= c2) { BUCKET_B(c2, c1) = k - SA; } k = SA + BUCKET_B(c2 = c0, c1); } assert(k < j); *k-- = s; } else { assert(((s == 0) && (T[s] == c1)) || (s < 0)); *j = ~s; } } } } /* Construct the suffix array by using the sorted order of type B suffixes. */ k = SA + BUCKET_A(c2 = T[n - 1]); *k++ = (T[n - 2] < c2) ? ~(n - 1) : (n - 1); /* Scan the suffix array from left to right. */ for(i = SA, j = SA + n; i < j; ++i) { if(0 < (s = *i)) { assert(T[s - 1] >= T[s]); c0 = T[--s]; if((s == 0) || (T[s - 1] < c0)) { s = ~s; } if(c0 != c2) { BUCKET_A(c2) = k - SA; k = SA + BUCKET_A(c2 = c0); } assert(i < k); *k++ = s; } else { assert(s < 0); *i = ~s; } } } /* Constructs the burrows-wheeler transformed string directly by using the sorted order of type B* suffixes. */ static int construct_BWT(const unsigned char *T, int *SA, int *bucket_A, int *bucket_B, int n, int m) { int *i, *j, *k, *orig; int s; int c0, c1, c2; if(0 < m) { /* Construct the sorted order of type B suffixes by using the sorted order of type B* suffixes. */ for(c1 = ALPHABET_SIZE - 2; 0 <= c1; --c1) { /* Scan the suffix array from right to left. */ for(i = SA + BUCKET_BSTAR(c1, c1 + 1), j = SA + BUCKET_A(c1 + 1) - 1, k = NULL, c2 = -1; i <= j; --j) { if(0 < (s = *j)) { assert(T[s] == c1); assert(((s + 1) < n) && (T[s] <= T[s + 1])); assert(T[s - 1] <= T[s]); c0 = T[--s]; *j = ~((int)c0); if((0 < s) && (T[s - 1] > c0)) { s = ~s; } if(c0 != c2) { if(0 <= c2) { BUCKET_B(c2, c1) = k - SA; } k = SA + BUCKET_B(c2 = c0, c1); } assert(k < j); *k-- = s; } else if(s != 0) { *j = ~s; #ifndef NDEBUG } else { assert(T[s] == c1); #endif } } } } /* Construct the BWTed string by using the sorted order of type B suffixes. */ k = SA + BUCKET_A(c2 = T[n - 1]); *k++ = (T[n - 2] < c2) ? ~((int)T[n - 2]) : (n - 1); /* Scan the suffix array from left to right. */ for(i = SA, j = SA + n, orig = SA; i < j; ++i) { if(0 < (s = *i)) { assert(T[s - 1] >= T[s]); c0 = T[--s]; *i = c0; if((0 < s) && (T[s - 1] < c0)) { s = ~((int)T[s - 1]); } if(c0 != c2) { BUCKET_A(c2) = k - SA; k = SA + BUCKET_A(c2 = c0); } assert(i < k); *k++ = s; } else if(s != 0) { *i = ~s; } else { orig = i; } } return orig - SA; } /*---------------------------------------------------------------------------*/ /*- Function -*/ int divsufsort(const unsigned char *T, int *SA, int n) { int *bucket_A, *bucket_B; int m; int err = 0; /* Check arguments. */ if((T == NULL) || (SA == NULL) || (n < 0)) { return -1; } else if(n == 0) { return 0; } else if(n == 1) { SA[0] = 0; return 0; } else if(n == 2) { m = (T[0] < T[1]); SA[m ^ 1] = 0, SA[m] = 1; return 0; } bucket_A = (int *)malloc(BUCKET_A_SIZE * sizeof(int)); bucket_B = (int *)malloc(BUCKET_B_SIZE * sizeof(int)); /* Suffixsort. */ if((bucket_A != NULL) && (bucket_B != NULL)) { m = sort_typeBstar(T, SA, bucket_A, bucket_B, n); construct_SA(T, SA, bucket_A, bucket_B, n, m); } else { err = -2; } free(bucket_B); free(bucket_A); return err; } /* Constructs the burrows-wheeler transformed string of a given string. * @param T[0..n-1] The input string. * @param U[0..n-1] The output string. (can be T) * @param A[0..n-1] The temporary array. (can be NULL) * @param n The length of the given string. * @return The primary index if no error occurred, -1 or -2 otherwise. */ int divbwt(const unsigned char *T, unsigned char *U, int *A, int n) { int *B; int *bucket_A, *bucket_B; int m, pidx, i; /* Check arguments. */ if((T == NULL) || (U == NULL) || (n < 0)) { return -1; } else if(n <= 1) { if(n == 1) { U[0] = T[0]; } return n; } if((B = A) == NULL) { B = (int *)malloc((size_t)(n + 1) * sizeof(int)); } bucket_A = (int *)malloc(BUCKET_A_SIZE * sizeof(int)); bucket_B = (int *)malloc(BUCKET_B_SIZE * sizeof(int)); /* Burrows-Wheeler Transform. */ if((B != NULL) && (bucket_A != NULL) && (bucket_B != NULL)) { m = sort_typeBstar(T, B, bucket_A, bucket_B, n); pidx = construct_BWT(T, B, bucket_A, bucket_B, n, m); /* Copy to output string. */ U[0] = T[n - 1]; for(i = 0; i < pidx; ++i) { U[i + 1] = (unsigned char)B[i]; } for(i += 1; i < n; ++i) { U[i] = (unsigned char)B[i]; } pidx += 1; } else { pidx = -2; } free(bucket_B); free(bucket_A); if(A == NULL) { free(B); } return pidx; } hmmer-3.1b2/libdivsufsort/.dropbox.attr0000775361611702660230000000000212473271761017616 0ustar wheelerteddy{}hmmer-3.1b2/libdivsufsort/divsufsort.h.in0000664361611702660230000000410612473612611020154 0ustar wheelerteddy/* * divsufsort.h for libdivsufsort-lite * Copyright (c) 2003-2008 Yuta Mori All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ #ifndef _DIVSUFSORT_H #define _DIVSUFSORT_H 1 #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /*- Prototypes -*/ /** * Constructs the suffix array of a given string. * @param T[0..n-1] The input string. * @param SA[0..n-1] The output array of suffixes. * @param n The length of the given string. * @return 0 if no error occurred, -1 or -2 otherwise. */ int divsufsort(const unsigned char *T, int *SA, int n); /** * Constructs the burrows-wheeler transformed string of a given string. * @param T[0..n-1] The input string. * @param U[0..n-1] The output string. (can be T) * @param A[0..n-1] The temporary array. (can be NULL) * @param n The length of the given string. * @return The primary index if no error occurred, -1 or -2 otherwise. */ int divbwt(const unsigned char *T, unsigned char *U, int *A, int n); #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ #endif /* _DIVSUFSORT_H */ hmmer-3.1b2/libdivsufsort/COPYING0000664361611702660230000000231312473612611016217 0ustar wheelerteddyThe libdivsufsort-lite copyright is as follows: Copyright (c) 2003-2008 Yuta Mori All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. See also the libdivsufsort web site: http://libdivsufsort.googlecode.com/ for more information. hmmer-3.1b2/libdivsufsort/VERSION0000664361611702660230000000000612473612611016231 0ustar wheelerteddy2.0.0 hmmer-3.1b2/libdivsufsort/README0000664361611702660230000002721512473612611016054 0ustar wheelerteddylibdivsufsort - A lightweight suffix-sorting library. ----------------------------------------------------- Introduction: ------------- The libdivsufsort project provides a fast, lightweight, and robust C API library to construct the suffix array and the Burrows-Wheeler transformed string for any input string of a constant-size alphabet. The suffix-sorting algorithm runs in O(n log n) worst-case time using only 5n+O(1) bytes of memory space, where n is the length of the input string. The latest version of libdivsufsort is available at: http://libdivsufsort.googlecode.com/ License: -------- libdivsufsort is released under the MIT/X11 license. See the file COPYING for more details. APIs: ----- * Data types typedef int32_t saint_t; typedef int32_t saidx_t; typedef uint8_t sauchar_t; * Constructs the suffix array of a given string. * @param T[0..n-1] The input string. * @param SA[0..n-1] The output array or suffixes. * @param n The length of the given string. * @return 0 if no error occurred, -1 or -2 otherwise. saint_t divsufsort(const sauchar_t *T, saidx_t *SA, saidx_t n); * Constructs the burrows-wheeler transformed string of a given string. * @param T[0..n-1] The input string. * @param U[0..n-1] The output string. (can be T) * @param A[0..n-1] The temporary array. (can be NULL) * @param n The length of the given string. * @return The primary index if no error occurred, -1 or -2 otherwise. saidx_t divbwt(const sauchar_t *T, sauchar_t *U, saidx_t *A, saidx_t n); Benchmark: ------------------ = Specifications = Processor: 2.66 GHz Intel Core 2 Duo E6750 L1 Cache: (32 Kb + 32 Kb) x 2 L2 Cache: 4 Mb RAM: 2 Gb main memory Operating system: Windows XP Home SP 3 (with Cygwin) Compiler: GCC version 4.3.1 = Programs = Archon4r0 kvark's sorting algorithm http://forum.compression.ru/viewtopic.php?t=352 BPR Bucket-Pointer Refinement algorithm http://bibiserv.techfak.uni-bielefeld.de/bpr/ DC Difference-Cover algorithm (v = 32) http://www.cs.helsinki.fi/juha.karkkainen/publications/cpm03.tar.gz DS Deep-Shallow sorting algorithm http://www.mfn.unipmn.it/~manzini/lightweight/ divsufsort1 libdivsufsort version 1.2.3 http://libdivsufsort.googlecode.com/ divsufsort2 libdivsufsort version 2.0.0 http://libdivsufsort.googlecode.com/ KA Ko-Aluru algorithm http://ko.pang.cn.googlepages.com/software2 KS Kärkkäinen-Sanders algorithm http://www.mpi-inf.mpg.de/~sanders/programs/suffix/ MSufSort3 MSufSort version 3.1.1 beta http://www.michael-maniscalco.com/msufsort.htm qsufsort Larsson-Sadakane algorithm http://www.larsson.dogma.net/research.html sais Induced Sorting algorithm http://yuta.256.googlepages.com/sais All programs were compiled with gcc/g++ using '-O3 -fomit-frame-pointer -DNDEBUG' optimization options. The times are the average of five runs, in seconds, and were measured using the standard Unix/Cygwin 'time' command. (user + system) The spaces were measured using the 'memusage' command. = Testfiles = Manzini's Large Corpus http://www.mfn.unipmn.it/~manzini/lightweight/corpus/ The Gauntlet http://www.michael-maniscalco.com/testset/gauntlet/ = Running times = == Manzini's Corpus == Files Size Archon4r0 BPR DC DS divsufsort1 divsufsort2 KA KS MSufSort3 qsufsort sais chr22.dna 34553758 6.030 6.196 22.694 7.514 5.404 5.362 16.980 50.006 7.132 10.642 10.796 etext99 105277340 22.160 32.582 79.872 34.264 18.758 18.064 73.236 202.684 24.106 56.612 38.748 gcc-3.0.tar 86630400 13.856 20.692 61.690 35.822 10.382 10.084 40.908 135.174 14.952 40.766 20.990 howto 39422105 5.806 8.326 25.432 8.288 5.472 5.320 20.694 64.834 5.672 16.366 11.388 jdk13c 69728899 18.106 22.252 61.234 32.182 9.260 9.010 34.172 101.096 11.314 39.792 16.396 linux-2.4.5.tar 116254720 18.174 26.226 82.830 25.912 14.672 14.290 58.586 194.412 19.890 54.054 29.614 rctail96 114711151 32.490 55.826 119.026 62.502 18.500 17.914 70.072 190.562 21.060 70.456 33.248 rfc 116421901 20.736 35.404 91.284 29.666 16.116 15.658 64.390 196.500 17.936 61.436 32.224 sprot34.dat 109617186 22.832 36.720 93.122 32.096 17.894 17.404 68.084 187.594 23.352 56.946 34.092 w3c2 104201579 27.264 29.384 89.352 54.682 13.866 13.486 52.660 162.582 17.090 77.804 25.498 totals 896819039 187.454 273.608 726.536 322.928 130.324 126.592 499.782 1485.444 162.504 484.874 252.994 == The Gauntlet == Files Size Archon4r0 BPR DC DS divsufsort1 divsufsort2 KA KS MSufSort3 qsufsort sais abac 200000 0.044 0.064 0.104 27.914 0.042 0.036 0.058 0.048 0.050 0.062 0.044 abba 10500600 3.270 5.124 10.766 30.702 1.714 1.602 2.570 7.952 3.514 15.272 1.460 book1x20 15375420 4.392 3.530 13.872 97.468 2.312 2.154 7.442 15.756 3.542 22.376 3.912 fib_s14930352 14930352 12.728 10.830 18.524 179.040 3.638 3.588 3.544 10.232 6.700 18.224 2.542 fss10 12078908 11.390 8.974 15.130 85.328 2.828 2.824 3.344 8.646 4.618 14.754 2.076 fss9 2851443 1.002 1.210 1.644 5.256 0.410 0.416 0.618 1.290 0.554 2.836 0.336 houston 3840000 0.344 0.708 2.226 118.960 0.118 0.128 0.520 0.744 0.242 1.230 0.238 paper5x80 981924 0.110 0.154 0.454 0.806 0.092 0.090 0.210 0.256 0.144 0.448 0.110 test1 2097152 0.332 2.132 1.108 8.680 0.268 0.280 0.376 1.066 1.302 2.762 0.202 test2 2097152 0.710 0.616 1.110 8.682 0.180 0.176 0.374 1.076 3.354 2.768 0.206 test3 2097152 0.488 213.154 1.164 1.772 0.220 0.226 0.388 1.082 0.922 3.246 0.212 totals 67050103 34.810 246.496 66.102 564.608 11.822 11.520 19.444 48.148 24.942 83.978 11.338 = Space (in MiBytes) = == Manzini's Corpus == Files Size Archon4r0 BPR DC DS divsufsort1 divsufsort2 KA KS MSufSort3 qsufsort sais chr22.dna 34553758 174.66 296.88 193.60 165.18 165.02 165.02 289.97 428.39 199.72 263.62 164.77 etext99 105277340 531.13 915.48 589.85 503.23 502.25 502.25 907.34 1305.20 604.45 803.20 502.00 gcc-3.0.tar 86630400 437.14 756.43 485.38 415.87 413.34 413.34 709.50 1074.01 497.79 660.94 413.09 howto 39422105 199.20 367.53 220.88 188.45 188.23 188.23 331.54 488.75 227.67 300.77 187.98 jdk13c 69728899 351.96 603.99 390.68 333.40 332.74 332.74 609.71 864.48 401.04 531.99 332.49 linux-2.4.5.tar 116254720 586.46 1061.83 651.36 555.76 554.60 554.60 977.81 1441.30 667.39 886.95 554.35 rctail96 114711151 578.68 987.64 642.71 548.32 547.24 547.24 1004.98 1422.16 658.43 875.18 546.99 rfc 116421901 587.30 1005.85 652.29 556.53 555.39 555.39 956.52 1443.37 668.26 888.23 555.14 sprot34.dat 109617186 553.01 941.95 614.17 524.03 522.95 522.95 930.06 1359.01 629.26 836.31 522.70 w3c2 104201579 525.71 958.37 583.82 498.09 497.12 497.12 912.00 1291.87 598.82 795.00 496.87 totals 896819039 4525.25 7895.95 5024.74 4288.86 4278.88 4278.88 7629.43 11118.54 5152.83 6842.19 4276.38 mean - 5.29 9.23 5.88 5.01 5.00 5.00 8.92 13.00 6.02 8.00 5.00 == The Gauntlet == Files Size Archon4r0 BPR DC DS divsufsort1 divsufsort2 KA KS MSufSort3 qsufsort sais abac 200000 1.51 1.73 1.12 0.98 1.21 1.20 1.75 2.48 3.15 1.53 0.95 abba 10500600 53.43 90.19 58.83 50.21 50.32 50.32 86.20 130.18 62.09 80.11 50.07 book1x20 15375420 78.00 134.00 86.15 73.52 73.57 73.57 132.42 190.62 89.99 117.31 73.32 fib_s14930352 14930352 75.75 128.15 83.65 71.71 71.44 71.44 117.16 185.10 87.43 113.91 71.19 fss10 12078908 61.38 103.68 67.68 58.05 57.85 57.85 107.05 149.75 71.12 92.16 57.60 fss9 2851443 14.87 24.48 15.98 13.71 13.85 13.85 25.27 35.35 18.32 21.76 13.60 houston 3840000 19.85 36.96 21.52 18.46 18.56 18.56 28.79 47.58 23.98 29.30 18.31 paper5x80 981924 5.45 11.40 5.50 4.72 4.93 4.93 8.59 12.17 7.63 7.49 4.68 test1 2097152 11.07 82.00 11.75 10.10 10.25 10.25 18.34 25.99 14.01 16.00 10.00 test2 2097152 11.07 82.00 11.75 10.10 10.25 10.25 18.34 25.99 14.01 16.00 10.00 test3 2097152 11.07 82.00 11.75 10.05 10.25 10.25 18.34 26.00 14.63 16.00 10.12 totals 67050103 343.45 776.59 375.68 321.61 322.48 322.47 562.25 831.21 406.36 511.57 319.84 mean - 5.37 12.14 5.88 5.03 5.04 5.04 8.79 13.00 6.35 8.00 5.00 Algorithm: ---------- libdivsufsort uses the following algorithms for suffix sorting. - The improved version of Itho-Tanaka two-stage sorting algorithm. [2][6] - A substring sorting/encoding technique. [1][3] - Maniscalco's tandem repeat sorting algorithm. [5] - Larsson-Sadakane sorting algorithm. [4] References: ----------- 1. Stefan Burkhardt and Juha K"arkk"ainen. Fast lightweight suffix array construction and checking. Proceedings of the 14th Annual Symposium on Combinatorial Pattern Matching, LNCS 2676, Springer, pp. 55-69, 2003. 2. Hideo Itoh and Hozumi Tanaka, An Efficient Method for in Memory Construction of Suffix Arrays, Proceedings of the IEEE String Processing and Information Retrieval Symposium, pp. 81-88, 1999. 3. Pang Ko and Srinivas Aluru, Space-efficient linear time construction of suffix arrays, Proceedings of the 14th Annual Symposium on Combinatorial Pattern Matching, pp. 200-210, 2003. 4. Jesper Larsson and Kunihiko Sadakane, Faster suffix sorting. Technical report LU-CS-TR:99-214, Department of Computer Science, Lund University, Sweden, 1999. 5. Michael Maniscalco, MSufSort. http://www.michael-maniscalco.com/msufsort.htm 6. Yuta Mori, Short description of improved two-stage suffix sorting algorithm, 2005. http://homepage3.nifty.com/wpage/software/itssort.txt hmmer-3.1b2/libdivsufsort/Makefile.in0000664361611702660230000000212012473612611017225 0ustar wheelerteddy# Makefile for fm-index # VPATH and shell configuration top_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ SHELL = /bin/sh # sources OBJS = divsufsort.o TARGET = libdivsufsort.a MAKEFILE = Makefile # options CC = @CC@ CFLAGS = @CFLAGS@ @PTHREAD_CFLAGS@ @PIC_FLAGS@ CPPFLAGS = @CPPFLAGS@ MPILIBS = @MPILIBS@ AR = @AR@ rc RANLIB = @RANLIB@ INSTALL = @INSTALL@ #CC = gcc #CFLAGS = -g -O3 -fomit-frame-pointer -fstrict-aliasing #CPPFLAGS = -Wall #AR = /usr/bin/ar rc #RANLIB = ranlib # beautification magic stolen from git (added within hmmer source) ifndef V QUIET_CC = @echo ' ' CC $@; QUIET_AR = @echo ' ' AR $@; endif # targets all: $(TARGET) $(TARGET): $(OBJS) .c.o: ${QUIET_CC}${CC} -I. ${CFLAGS} ${CPPFLAGS} -o $@ -c $< libdivsufsort.a: $(OBJS) ${QUIET_AR}${AR} libdivsufsort.a $(OBJS) @${RANLIB} libdivsufsort.a @chmod 644 libdivsufsort.a clean: $(RM) $(TARGET) $(OBJS) distclean: $(RM) $(TARGET) $(OBJS) $(MAKEFILE) divsufsort.h # dependencies $(OBJS): divsufsort.h $(MAKEFILE) hmmer-3.1b2/libdivsufsort/AUTHORS0000664361611702660230000000010212473612611016226 0ustar wheelerteddy-- AUTHORS for libdivsufsort-lite Yuta Mori hmmer-3.1b2/config.guess0000664361611702660230000012756212473612603014621 0ustar wheelerteddy#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. timestamp='2008-04-14' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else echo ${UNAME_MACHINE}-unknown-linux-gnueabi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: hmmer-3.1b2/COPYRIGHT0000664361611702660230000000637312473612603013573 0ustar wheelerteddyHMMER - Biological sequence analysis with profile hidden Markov models Copyright (C) 2015 Howard Hughes Medical Institute. ------------------------------------------------------------------ Additional copyrights apply to the entirety of the package: Copyright (C) 1992-2013 Sean R. Eddy Copyright (C) 2000-2013 Howard Hughes Medical Institute Copyright (C) 1992-2004 Washington University School of Medicine Copyright (C) 1992-1994 MRC Laboratory of Molecular Biology The code includes contributions and input from the members of the HMMER development team and the Eddy/Rivas laboratories at HHMI Janelia Farm, whose current members include: Sean Eddy Janelia Farm Sergi Castellano Janelia Farm Goran Ceric Janelia Farm Michael Farrar Janelia Farm Rob Finn Janelia Farm Bjarne Knudsen CLC bio Diana Kolbe Washington University/Janelia Farm Eric Nawrocki Janelia Farm Elena Rivas Janelia Farm Travis Wheeler Janelia Farm HMMER also includes contributions from others, including copyrighted and licensed code and technology. These are noted in the appropriate places in source files. Contributors include: Jeremy Buhler Washington University Ian Holmes UC Berkeley Erik Lindahl Stanford University Graeme Mitchison Cambridge University Lee Newberg Rensselaer Polytechnic Institute Apple Computer Cupertino, CA Free Software Foundation, Inc. Cambridge, MA IBM TJ Watson Research Center Yorktown Heights, NY X Consortium Cambridge, MA HMMER uses the Easel software library, which has its own license and copyright information. See easel/COPYRIGHT and easel/LICENSE. HMMER includes patent-pending SIMD technology under nonexclusive license from Michael Farrar. You are sublicensed to use this technology specifically for the use, modification, and redistribution of HMMER3, under the terms of the GPLv3 patent clause. This source code is distributed under the terms of the GNU General Public License. See the file LICENSE for details. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. A copy of the GNU General Public License is in the file LICENSE. You may also obtain a copy from . "HMMER" is a trademark of the Howard Hughes Medical Institute. Although the code is freely available as open source, we intend that only the version at http://hmmer.org/ is known as HMMER. You are free to create a modified version and distribute it (subject to the terms of the GPL), but we ask that you name it something that would not be confused with HMMER itself. ------------------------------------------------------------------ The HMMER development team HHMI Janelia Farm Research Campus http://hmmer.org/ hmmer-3.1b2/tutorial/0000775361611702660230000000000012473610267014136 5ustar wheelerteddyhmmer-3.1b2/tutorial/Pkinase.sto0000664361611702660230000027100412473612615016262 0ustar wheelerteddy# STOCKHOLM 1.0 #=GF ID Pkinase #=GF AC PF00069.17 #=GF DE Protein kinase domain #=GF AU Sonnhammer ELL #=GF GA 70.3 70.3 #=GF NC 70.2 70.2 #=GF TC 70.3 70.3 #=GF PI pkinase; #=GF SE Unknown #=GF TP Domain #=GF BM hmmbuild -FHMM_ls.ann SEED.ann #=GF BM hmmcalibrate --seed 0 HMM_ls #=GF BM hmmbuild -f -FHMM_fs.ann SEED.ann #=GF BM hmmcalibrate --seed 0 HMM_fs #=GF AM byscore #=GF RN [1] #=GF RM 1956325 #=GF RT Protein kinase catalytic domain sequence database: #=GF RT identification of conserved features of primary structure and #=GF RT classification of family members. #=GF RA Hanks SK, Quinn AM; #=GF RL Methods Enzymol 1991;200:38-62. #=GF RN [2] #=GF RM 7768349 #=GF RT Protein kinases 6. The eukaryotic protein kinase superfamily: #=GF RT kinase (catalytic) domain structure and classification. #=GF RA Hanks SK, Hunter T; #=GF RL FASEB J 1995;9:576-596. #=GF RN [3] #=GF RM 9020587 #=GF RT The protein kinases of budding yeast: six score and more. #=GF RA Hunter T, Plowman GD; #=GF RL Trends Biochem Sci 1997;22:18-22. #=GF DR INTERPRO; IPR017442; #=GF DR SMART; TyrKc; #=GF DC Tyrosine kinase, catalytic domain #=GF DR SCOP; 1apm; sf; #=GF DR SMART; S_TKc; #=GF DC Serine/Threonine protein kinases, catalytic domain #=GF DR SMART; STYKc; #=GF DC Protein kinase; unclassified specificity. #=GF DR PRINTS; PR00109; #=GF DR PROSITE_PROFILE; PS50011; #=GF DR PROSITE; PDOC00629; #=GF DR PROSITE; PDOC00213; #=GF DR PROSITE; PDOC00212; #=GF DR PROSITE; PDOC00100; #=GF DR URL; http://www.sdsc.edu/Kinases/pk_home.html; #=GF DR HOMSTRAD; kinase; #=GF DR HOMSTRAD; TyrKc; #=GF SQ 54 #=GS PHKG2_RAT/24-291 AC P31325.1 #=GS KS6A1_MOUSE/407-664 AC P18653.1 #=GS KCC4_MOUSE/42-296 AC P08414.2 #=GS CDPK_SOYBN/34-292 AC P28583.1 #=GS KPK2_PLAFK/111-364 AC Q02595.1 #=GS RAD53_YEAST/198-466 AC P22216.1 #=GS MYLK_CHICK/1453-1708 AC P11799.2 #=GS CDR1_SCHPO/12-258 AC P07334.3 #=GS KIN1_SCHPO/125-395 AC P22987.3 #=GS MEK1_YEAST/162-444 AC P24719.1 #=GS CDC5_YEAST/82-337 AC P32562.1 #=GS CHK1_SCHPO/10-272 AC P34208.2 #=GS KGP1_DROME/457-717 AC Q03042.2 #=GS KIN82_YEAST/324-602 AC P25341.2 #=GS AKT_MLVAT/171-429 AC P31748.1 #=GS PKD1_DICDI/36-291 AC P34100.1 #=GS ARBK1_BOVIN/191-453 AC P21146.1 #=GS FUSED_DROME/4-254 AC P23647.2 #=GS KAB7_YEAST/1096-1354 AC P31374.1 #=GS PIM1_HUMAN/129-381 AC P11309.3 #=GS CLK1_MOUSE/160-476 AC P22518.1 #=GS TTK_HUMAN/525-791 AC P33981.2 #=GS BUR1_YEAST/60-366 AC P23293.1 #=GS CDC21_MEDSA/1-284 AC P24923.1 #=GS KIN28_YEAST/7-290 AC P06242.1 #=GS CDKL1_HUMAN/4-287 AC Q00532.4 #=GS MAK_RAT/4-284 AC P20793.1 #=GS CTK1_YEAST/183-469 AC Q03957.1 #=GS MK04_HUMAN/20-312 AC P31152.1 #=GS ERK1_CANAL/68-371 AC P28869.2 #=GS GSK3A_RAT/119-403 AC P18265.1 #=GS CSK21_CHICK/39-324 AC P21868.1 #=GS ACVR1_HUMAN/208-495 AC Q04771.1 #=GS AVR2A_HUMAN/192-479 AC P27037.1 #=GS KPRO_MAIZE/534-812 AC P17801.2 #=GS MIL_AVIMH/82-339 AC P00531.1 #=GS M3K9_HUMAN/144-403 AC P80192.3 #=GS PHY1_CERPU/1004-1282 AC P25848.3 #=GS BYR2_SCHPO/394-658 AC P28829.1 #=GS CDC15_YEAST/25-272 AC P27636.2 #=GS STE20_YEAST/620-871 AC Q03497.1 #=GS STE7_YEAST/191-466 AC P06784.1 #=GS BYR1_SCHPO/66-320 AC P10506.1 #=GS MKK1_YEAST/221-488 AC P32490.1 #=GS MOS_CERAE/60-338 AC P10650.1 #=GS PKN1_MYXXA/59-320 AC P33973.1 #=GS RAN1_SCHPO/18-295 AC P08092.2 #=GS HAL4_YEAST/316-590 AC P25333.1 #=GS NPR1_YEAST/438-742 AC P22211.2 #=GS KKL6_YEAST/192-508 AC P28708.1 #=GS KR1_PRVKA/53-332 AC P17613.1 #=GS KR1_HHV11/191-478 AC P04413.1 #=GS WEE1_HUMAN/299-569 AC P30291.2 #=GS HRR25_YEAST/9-273 AC P29295.1 #=GS ARBK1_BOVIN/191-453 DR PDB; 1omw A; 191-453; #=GS ARBK1_BOVIN/191-453 DR PDB; 2bcj A; 191-453; #=GS ARBK1_BOVIN/191-453 DR PDB; 1ym7 D; 191-453; #=GS ARBK1_BOVIN/191-453 DR PDB; 1ym7 A; 191-453; #=GS ARBK1_BOVIN/191-453 DR PDB; 1ym7 C; 191-453; #=GS ARBK1_BOVIN/191-453 DR PDB; 1ym7 B; 191-453; #=GS PIM1_HUMAN/129-381 DR PDB; 1yxx A; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 2bik B; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 2bzk B; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 1xqz A; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 1ywv A; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 2bzj A; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 1yxu B; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 1yxv A; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 2bzi B; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 1yxu C; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 2bzh B; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 1yxt A; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 1xws A; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 1yxu A; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 1xr1 A; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 2bil B; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 2c3i B; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 1yxu D; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 1yi4 A; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 1yhs A; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 1yxs A; 38-290; #=GS PIM1_HUMAN/129-381 DR PDB; 1yi3 A; 38-290; #=GS WEE1_HUMAN/299-569 DR PDB; 1x8b A; 299-569; PHKG2_RAT/24-291 YDPKDIIGRGVSSVV..RRCVHRATGD........EFAVKIMEVS.AERL #=GR PHKG2_RAT/24-291 AS .................................................. KS6A1_MOUSE/407-664 YVVKETIGVGSYSVC..KRCVHKATNM........EYAVKVIDKS.KRDP #=GR KS6A1_MOUSE/407-664 AS .................................................. KCC4_MOUSE/42-296 FEVESELGRGATSIV..YRCKQKGTQK........PYALKVLKKT.VDKK #=GR KCC4_MOUSE/42-296 AS .................................................. CDPK_SOYBN/34-292 YEVGRKLGQGQFGTT..FECTRRASGG........KFACKSIPKR.KLLC #=GR CDPK_SOYBN/34-292 AS .................................................. KPK2_PLAFK/111-364 YVLNKKIGKGSFSTA..YIGTNILYGN........RVVVKEVDKS.KVKE #=GR KPK2_PLAFK/111-364 AS .................................................. RAD53_YEAST/198-466 SIIDEVVGQGAFATV..KKAIERTTGK........TFAVKIISKR.KVIG #=GR RAD53_YEAST/198-466 AS .................................................. MYLK_CHICK/1453-1708 YNIEERLGSGKFGQV..FRLVEKKTGK........VWAGKFFKAY.SAKE #=GR MYLK_CHICK/1453-1708 AS .................................................. CDR1_SCHPO/12-258 WRLGKTLGTGSTSCV..RLAKHAKTGD........LAAIKIIPIR.YASI #=GR CDR1_SCHPO/12-258 AS .................................................. KIN1_SCHPO/125-395 YVLGKTIGAGSMGKV..KVAHHLKTGE........QFAIKIVTRL.HPDI #=GR KIN1_SCHPO/125-395 AS .................................................. MEK1_YEAST/162-444 EITNRIVGNGTFGHV..LITHNSKERDEDVCYHPENYAVKIIKLK.PNKF #=GR MEK1_YEAST/162-444 AS .................................................. CDC5_YEAST/82-337 YHRGHFLGEGGFARC..FQIKDDSGEI.........FAAKTVAKA.SIKS #=GR CDC5_YEAST/82-337 AS .................................................. CHK1_SCHPO/10-272 YHIGREIGTGAFASV..RLCYDDNAKI.........YAVKFVNKK.HATS #=GR CHK1_SCHPO/10-272 AS .................................................. KGP1_DROME/457-717 LEVVSTLGIGGFGRVELVKAHHQDRVD........IFALKCLKKR.HIVD #=GR KGP1_DROME/457-717 AS .................................................. KIN82_YEAST/324-602 FEKIRLLGQGDVGKV..YLMRERDTNQ........IFALKVLNKH.EMIK #=GR KIN82_YEAST/324-602 AS .................................................. AKT_MLVAT/171-429 FEYLKLLGKGTFGKV..ILVKEKATGR........YYAMKILKKE.VIVA #=GR AKT_MLVAT/171-429 AS .................................................. PKD1_DICDI/36-291 FNFYGSLGSGSFGTA..KLCRHRGSGL........FFCSKTLRRE.TIVH #=GR PKD1_DICDI/36-291 AS .................................................. ARBK1_BOVIN/191-453 FSVHRIIGRGGFGEV..YGCRKADTGK........MYAMKCLDKK.RIKM #=GR ARBK1_BOVIN/191-453 SS EEEEEEEEE-SSSEE..EEEEETTT--........EEEEEEEEHH.HHHH #=GR ARBK1_BOVIN/191-453 AS .................................................. FUSED_DROME/4-254 YAVSSLVGQGSFGCV..YKATRKDDSK........VVAIKVISKR.GRAT #=GR FUSED_DROME/4-254 AS .................................................. KAB7_YEAST/1096-1354 FVSLQKMGEGAYGKV..NLCIHKKNRY........IVVIKMIFKE.RILV #=GR KAB7_YEAST/1096-1354 AS .................................................. PIM1_HUMAN/129-381 YQVGPLLGSGGFGSV..YSGIRVSDNL........PVAIKHVEKD.RISD #=GR PIM1_HUMAN/129-381 SS EEEEEEEEEETTEEE..EEEEETTTTE........EEEEEEEEGG.G--- #=GR PIM1_HUMAN/129-381 AS .................................................. CLK1_MOUSE/160-476 YEIVDTLGEGAFGKVVECIDHKVGGRR.........VAVKIVKNV.DRYC #=GR CLK1_MOUSE/160-476 AS .................................................. TTK_HUMAN/525-791 YSILKQIGSGGSSKV..FQVLNEKKQI.........YAIKYVNLE.EADN #=GR TTK_HUMAN/525-791 AS .................................................. BUR1_YEAST/60-366 YREDEKLGQGTFGEV..YKGIHLETQR........QVAMKKIIVS.VEKD #=GR BUR1_YEAST/60-366 AS .................................................. CDC21_MEDSA/1-284 GENVEKIGEGTYGVV..YKARDRVTNE........TIALKKIRLE.QEDE #=GR CDC21_MEDSA/1-284 AS .................................................. KIN28_YEAST/7-290 YTKEKKVGEGTYAVV..YLGCQHSTGR........KIAIKEIKTS.EFKD #=GR KIN28_YEAST/7-290 AS .................................................. CDKL1_HUMAN/4-287 YEKIGKIGEGSYGVV..FKCRNRDTGQ........IVAIKKFLES.EDDP #=GR CDKL1_HUMAN/4-287 AS .................................................. MAK_RAT/4-284 YTTMRQLGDGTYGSV..LMGKSNESGE........LVAIKRMKRK.FYSW #=GR MAK_RAT/4-284 AS .................................................. CTK1_YEAST/183-469 YLRIMQVGEGTYGKV..YKAKNTNTEK........LVALKKLRLQ.GERE #=GR CTK1_YEAST/183-469 AS .................................................. MK04_HUMAN/20-312 FVDFQPLGFGVNGLV..LSAVDSRACR........KVAVKKIALS.DARS #=GR MK04_HUMAN/20-312 AS .................................................. ERK1_CANAL/68-371 YQILEIVGEGAYGIV..CSAIHKPSQQ........KVAIKKIEPF.ERSM #=GR ERK1_CANAL/68-371 AS .................................................. GSK3A_RAT/119-403 YTDIKVIGNGSFGVV..YQARLAETRE........LVAIKKVLQD.KRFK #=GR GSK3A_RAT/119-403 AS .................................................. CSK21_CHICK/39-324 YQLVRKLGRGKYSEV..FEAINITNNE........KVVVKILKPV.KKKK #=GR CSK21_CHICK/39-324 AS .................................................. ACVR1_HUMAN/208-495 ITLLECVGKGRYGEV..WRGSWQGEN..........VAVKIFSSR.DEKS #=GR ACVR1_HUMAN/208-495 AS .................................................. AVR2A_HUMAN/192-479 LQLLEVKARGRFGCV..WKAQLLNEY..........VAVKIFPIQ.DKQS #=GR AVR2A_HUMAN/192-479 AS .................................................. KPRO_MAIZE/534-812 RKFKVELGRGESGTV..YKGVLEDDRH.........VAVKKLENV.RQGK #=GR KPRO_MAIZE/534-812 AS .................................................. MIL_AVIMH/82-339 VLLSTRIGSGSFGTV..YKGKWHGD...........VAVKILKVV.DPTP #=GR MIL_AVIMH/82-339 AS .................................................. M3K9_HUMAN/144-403 LTLEEIIGIGGFGKV..YRAFWIGDE..........VAVKAARHDPDEDI #=GR M3K9_HUMAN/144-403 AS .................................................. PHY1_CERPU/1004-1282 IQITGSLGSGSSATV..EKAVWLGTP..........VAKKTFYGR.NNED #=GR PHY1_CERPU/1004-1282 AS .................................................. BYR2_SCHPO/394-658 WIRGALIGSGSFGQV..YLGMNASSGE........LMAVKQVILD.SVSE #=GR BYR2_SCHPO/394-658 AS .................................................. CDC15_YEAST/25-272 YHLKQVIGRGSYGVV..YKAINKHTDQ........VVAIKEVVYE.NDEE #=GR CDC15_YEAST/25-272 AS .................................................. STE20_YEAST/620-871 YANLVKIGQGASGGV..YTAYEIGTNV........SVAIKQMNLE.KQPK #=GR STE20_YEAST/620-871 AS .................................................. STE7_YEAST/191-466 LVQLGKIGAGNSGTV..VKALHVPDSK........IVAKKTIPVE.QNNS #=GR STE7_YEAST/191-466 AS .................................................. BYR1_SCHPO/66-320 LEVVRHLGEGNGGAV..SLVKHRNI...........FMARKTVYV.GSDS #=GR BYR1_SCHPO/66-320 AS .................................................. MKK1_YEAST/221-488 IETLGILGEGAGGSV..SKCKLKNGSK........IFALKVINTL.NTDP #=GR MKK1_YEAST/221-488 AS .................................................. MOS_CERAE/60-338 VCLLQRLGAGGFGSV..YKATYHGVP..........VAIKQVNKC.TKNR #=GR MOS_CERAE/60-338 AS .................................................. #=GR MOS_CERAE/60-338 pAS .................................................. PKN1_MYXXA/59-320 FRLVRRLGRGGMGAV..YLGEHVSIGS........RVAVKVLHAH.LTMY #=GR PKN1_MYXXA/59-320 AS .................................................. RAN1_SCHPO/18-295 LRFVSIIGAGAYGVV..YKAEDIYDGT........LYAVKALCKD.GLNE #=GR RAN1_SCHPO/18-295 AS .................................................. HAL4_YEAST/316-590 GRCQEVLGKGAFGVV..RICQKKNVSSQDGNKSEKLYAVKEFKRR.TSES #=GR HAL4_YEAST/316-590 AS .................................................. NPR1_YEAST/438-742 IKTGADLGAGAGGSV..KLAQRISDNK........IFAVKEFRTK.FENE #=GR NPR1_YEAST/438-742 AS .................................................. KKL6_YEAST/192-508 WKKVRPIGSGNFSTVLLYELMDQSNPKL......KQVAVKRLKYP.EELS #=GR KKL6_YEAST/192-508 AS .................................................. KR1_PRVKA/53-332 FEVLQPLQSGSEGRV..FVARRPGEAD........TVVLKVGQKP.STLM #=GR KR1_PRVKA/53-332 AS .................................................. KR1_HHV11/191-478 FTIHGALTPGSEGCV..FDSSHPDYPQ........RVIVKAGWYT.STSH #=GR KR1_HHV11/191-478 AS .................................................. WEE1_HUMAN/299-569 FHELEKIGSGEFGSV..FKCVKRLDGC........IYAIKRSKKP.LAGS #=GR WEE1_HUMAN/299-569 SS EEEEEEEEEETTEEE..EEEEETTT--........EEEEEEEE--.-TTS #=GR WEE1_HUMAN/299-569 AS .................................................. HRR25_YEAST/9-273 FRIGRKIGSGSFGDI..YHGTNLISGE........EVAIKLESIR.SRHP #=GR HRR25_YEAST/9-273 AS .................................................. #=GC SS_cons EEEEEEEEEETTEEE..EEEEETTTTE........EEEEEEEEHH.HCCC #=GC seq_cons aphhptlGpGuaGsV..apupcpsssp.........hAlKhlptp.ptpp PHKG2_RAT/24-291 SLEQLEEVRDA.............TRREMHILRQVAG...HPH..I..IT #=GR PHKG2_RAT/24-291 AS .................................................. KS6A1_MOUSE/407-664 SE.........................EIEILLRYGQ...HPN..I..IT #=GR KS6A1_MOUSE/407-664 AS .................................................. KCC4_MOUSE/42-296 IVRT.......................EIGVLLRL.S...HPN..I..IK #=GR KCC4_MOUSE/42-296 AS .................................................. CDPK_SOYBN/34-292 KEDYEDVWR..................EIQIMHHLSE...HAN..V..VR #=GR CDPK_SOYBN/34-292 AS .................................................. KPK2_PLAFK/111-364 SNVYT......................EIEVLRKV.M...HKY..I..IK #=GR KPK2_PLAFK/111-364 AS .................................................. RAD53_YEAST/198-466 NMDGVTR....................ELEVLQKL.N...HPR..I..VR #=GR RAD53_YEAST/198-466 AS .................................................. MYLK_CHICK/1453-1708 KENIRD.....................EISIMNCL.H...HPK..L..VQ #=GR MYLK_CHICK/1453-1708 AS .................................................. CDR1_SCHPO/12-258 GM.........................EILMMRLL.R...HPN..I..LR #=GR CDR1_SCHPO/12-258 AS .................................................. KIN1_SCHPO/125-395 TKAKAAASAEATKAAQSEKNKEIRTVREAALSTLL.R...HPY..I..CE #=GR KIN1_SCHPO/125-395 AS .................................................. MEK1_YEAST/162-444 DK.........................EARILLRL.D...HPN..I..IK #=GR MEK1_YEAST/162-444 AS .................................................. CDC5_YEAST/82-337 EKTRKKLLS..................EIQIHKSM.S...HPN..I..VQ #=GR CDC5_YEAST/82-337 AS .................................................. CHK1_SCHPO/10-272 CMNAGVWARR..............MASEIQLHKLCNG...HKN..I..IH #=GR CHK1_SCHPO/10-272 AS .................................................. KGP1_DROME/457-717 TKQEEHIFS..................ERHIMLSS.R...SPF..I..CR #=GR KGP1_DROME/457-717 AS .................................................. KIN82_YEAST/324-602 RKKIKRVLT..................EQEILATS.D...HPF..I..VT #=GR KIN82_YEAST/324-602 AS .................................................. AKT_MLVAT/171-429 KDEVAHTLT..................ENRVLQNS.R...HPF..L..TA #=GR AKT_MLVAT/171-429 AS .................................................. PKD1_DICDI/36-291 EKHKEHVNN..................EINIMLNI.S...HPY..I..VK #=GR PKD1_DICDI/36-291 AS .................................................. ARBK1_BOVIN/191-453 KQGETLAL...................NERIMLSLVSTGDCPF..I..VC #=GR ARBK1_BOVIN/191-453 SS CTTHHHHH...................HHHHHHHHHSSS--SS..B..-- #=GR ARBK1_BOVIN/191-453 AS .................................................. FUSED_DROME/4-254 KELKNLRR...................ECDIQARL.K...HPH..V..IE #=GR FUSED_DROME/4-254 AS .................................................. KAB7_YEAST/1096-1354 DTWVRDRKLGT.............IPSEIQIMATL.NKKPHEN..I..LR #=GR KAB7_YEAST/1096-1354 AS .................................................. PIM1_HUMAN/129-381 WGE.....LPNG..........TRVPMEVVLLKKV.S...SGFSGV..IR #=GR PIM1_HUMAN/129-381 SS EEE.....ETTS..........EEEEHHHHHHHHH.H...SSSTSB..-- #=GR PIM1_HUMAN/129-381 AS .................................................. CLK1_MOUSE/160-476 EAAQS......................EIQVLEHLNTTDPHST..FRCVQ #=GR CLK1_MOUSE/160-476 AS .................................................. TTK_HUMAN/525-791 QTLDSYRN...................EIAYLNKL.QQ.HSDK..I..IR #=GR TTK_HUMAN/525-791 AS .................................................. BUR1_YEAST/60-366 LFPITAQR...................EITILKRL.N...HKN..I..IK #=GR BUR1_YEAST/60-366 AS .................................................. CDC21_MEDSA/1-284 GVPSTAIR...................EISLLKEM.Q...HRN..I..VR #=GR CDC21_MEDSA/1-284 AS .................................................. KIN28_YEAST/7-290 GLDMSAIR...................EVKYLQEM.Q...HPN..V..IE #=GR KIN28_YEAST/7-290 AS .................................................. CDKL1_HUMAN/4-287 VIKKIALR...................EIRMLKQL.K...HPN..L..VN #=GR CDKL1_HUMAN/4-287 AS .................................................. MAK_RAT/4-284 DECMNLR....................EVKSLKKL.N...HAN..V..IK #=GR MAK_RAT/4-284 AS .................................................. CTK1_YEAST/183-469 GFPITSIR...................EIKLLQSF.D...HPN..V..ST #=GR CTK1_YEAST/183-469 AS .................................................. MK04_HUMAN/20-312 MKHALR.....................EIKIIRRL.D...HDN..I..VK #=GR MK04_HUMAN/20-312 AS .................................................. ERK1_CANAL/68-371 LCLRTLR....................ELKLLKHF.N...HEN..I..IS #=GR ERK1_CANAL/68-371 AS .................................................. GSK3A_RAT/119-403 NR.........................ELQIMRKL.D...HCN..I..VR #=GR GSK3A_RAT/119-403 AS .................................................. CSK21_CHICK/39-324 IKR........................EIKILENLRG...GPN..I..IT #=GR CSK21_CHICK/39-324 AS .................................................. ACVR1_HUMAN/208-495 WFRET......................ELYNTVML.R...HEN..I..LG #=GR ACVR1_HUMAN/208-495 AS .................................................. AVR2A_HUMAN/192-479 WQNEY......................EVYSLPGM.K...HEN..I..LQ #=GR AVR2A_HUMAN/192-479 AS .................................................. KPRO_MAIZE/534-812 EVFQA......................ELSVIGRI.N...HMN..L..VR #=GR KPRO_MAIZE/534-812 AS .................................................. MIL_AVIMH/82-339 EQFQAFRN...................EVAVLRKT.R...HVN..I..LL #=GR MIL_AVIMH/82-339 AS .................................................. M3K9_HUMAN/144-403 SQTIENVRQ..................EAKLFAML.K...HPN..I..IA #=GR M3K9_HUMAN/144-403 AS .................................................. PHY1_CERPU/1004-1282 FKR........................EVEILAEL.C...HPN..I..TS #=GR PHY1_CERPU/1004-1282 AS .................................................. BYR2_SCHPO/394-658 SKDRHAKLLDA.............LAGEIALLQEL.S...HEH..I..VQ #=GR BYR2_SCHPO/394-658 AS .................................................. CDC15_YEAST/25-272 LNDIMA.....................EISLLKNL.N...HNN..I..VK #=GR CDC15_YEAST/25-272 AS .................................................. STE20_YEAST/620-871 KELIIN.....................EILVMKGS.K...HPN..I..VN #=GR STE20_YEAST/620-871 AS .................................................. STE7_YEAST/191-466 TIINQLVR...................ELSIVKNVKP...HEN..I..IT #=GR STE7_YEAST/191-466 AS .................................................. BYR1_SCHPO/66-320 KLQKQILR...................ELGVLHHC.R...SPY..I..VG #=GR BYR1_SCHPO/66-320 AS .................................................. MKK1_YEAST/221-488 EYQKQIFR...................ELQFNRSF.Q...SEY..I..VR #=GR MKK1_YEAST/221-488 AS .................................................. MOS_CERAE/60-338 LASRRSFWA..................ELNVARLR.....HDN..I..VR #=GR MOS_CERAE/60-338 AS .................................................. #=GR MOS_CERAE/60-338 pAS .................................................. PKN1_MYXXA/59-320 PELVQRFHA..................EARAVNLI.G...HEN..I..VS #=GR PKN1_MYXXA/59-320 AS .................................................. RAN1_SCHPO/18-295 KQKKLQAR...................ELALHARVSS...HPY..I..IT #=GR RAN1_SCHPO/18-295 AS .................................................. HAL4_YEAST/316-590 AEKYSKRLT.................SEFCISSSL.H...HTN..I..VT #=GR HAL4_YEAST/316-590 AS .................................................. NPR1_YEAST/438-742 SKRDYVKKI................TSEYCIGTTL.N...HPN..I..IE #=GR NPR1_YEAST/438-742 AS .................................................. KKL6_YEAST/192-508 NVEQINTSLRYKETLS...RLENSLTRELQVLKSL.N...HPC..I..VK #=GR KKL6_YEAST/192-508 AS .................................................. KR1_PRVKA/53-332 ...........................EGMLLQRL.S...HDN..V..MR #=GR KR1_PRVKA/53-332 AS .................................................. KR1_HHV11/191-478 ...........................EARLLRRL.D...HPA..I..LP #=GR KR1_HHV11/191-478 AS .................................................. WEE1_HUMAN/299-569 VDEQNALR...................EVYAHAVLGQ...HSH..V..VR #=GR WEE1_HUMAN/299-569 SS HHHHHHHH...................HHHHHHHS-S...-TT..B..-- #=GR WEE1_HUMAN/299-569 AS .................................................. HRR25_YEAST/9-273 QLDY.......................ESRVYRYL.S...GGV..G..IP #=GR HRR25_YEAST/9-273 AS .................................................. #=GC SS_cons CCCHHHHHETTS..........EEEEHHHHHHHHHHSSS.SSSTSB..-- #=GC seq_cons ptt.t......................Elplhppl.p...Hss..I..lp PHKG2_RAT/24-291 LIDSYES..................SSFMF..LVFDLMRKG.....ELF. #=GR PHKG2_RAT/24-291 AS .................................................. KS6A1_MOUSE/407-664 LKDVYDD..................GKHVY..LVTELMRGG.....ELL. #=GR KS6A1_MOUSE/407-664 AS .................................................. KCC4_MOUSE/42-296 LKEIFET..................PTEIS..LVLELVTGG.....ELF. #=GR KCC4_MOUSE/42-296 AS .................................................. CDPK_SOYBN/34-292 IEGTYED..................STAVH..LVMELCEGG.....ELF. #=GR CDPK_SOYBN/34-292 AS .................................................. KPK2_PLAFK/111-364 LISAYEQ..................EGFVY..LVLEYLKGG.....ELF. #=GR KPK2_PLAFK/111-364 AS .................................................. RAD53_YEAST/198-466 LKGFYED..................TESYY..MVMEFVSGG.....DLM. #=GR RAD53_YEAST/198-466 AS .................................................. MYLK_CHICK/1453-1708 CVDAFEE..................KANIV..MVLEMVSGG.....ELF. #=GR MYLK_CHICK/1453-1708 AS .................................................. CDR1_SCHPO/12-258 LYDVWTD..................HQHMY..LALEYVPDG.....ELF. #=GR CDR1_SCHPO/12-258 AS .................................................. KIN1_SCHPO/125-395 ARDVYIT..................NSHYY..MVFEFVDGG.....QML. #=GR KIN1_SCHPO/125-395 AS .................................................. MEK1_YEAST/162-444 VYHTFCD.................RNNHLY..IFQDLIPGG.....DLF. #=GR MEK1_YEAST/162-444 AS .................................................. CDC5_YEAST/82-337 FIDCFED..................DSNVY..ILLEICPNG.....SLM. #=GR CDC5_YEAST/82-337 AS .................................................. CHK1_SCHPO/10-272 FYNTAEN..................PQWRW..VVLEFAQGG.....DLF. #=GR CHK1_SCHPO/10-272 AS .................................................. KGP1_DROME/457-717 LYRTFRD..................EKYVY..MLLEACMGG.....EIW. #=GR KGP1_DROME/457-717 AS .................................................. KIN82_YEAST/324-602 LYHSFQT..................KDYLY..LCMEYCMGG.....EFF. #=GR KIN82_YEAST/324-602 AS .................................................. AKT_MLVAT/171-429 LKYSFQT..................HDRLC..FVMEYANGG.....ELF. #=GR AKT_MLVAT/171-429 AS .................................................. PKD1_DICDI/36-291 TYSTFNT..................PTKIH..FIMEYAGKK.....DLF. #=GR PKD1_DICDI/36-291 AS .................................................. ARBK1_BOVIN/191-453 MSYAFHT..................PDKLS..FILDLMNGG.....DLH. #=GR ARBK1_BOVIN/191-453 SS EEEEEEE..................TTEEE..EEEE--TS-.....BHH. #=GR ARBK1_BOVIN/191-453 AS .................................................. FUSED_DROME/4-254 MIESFES..................KTDLF..VVTEFALM......DLH. #=GR FUSED_DROME/4-254 AS .................................................. KAB7_YEAST/1096-1354 LLDFFED..................DDYYY....IETPVHGETGCIDLF. #=GR KAB7_YEAST/1096-1354 AS .................................................. PIM1_HUMAN/129-381 LLDWFER..................PDSFV..LILERPEP....VQDLF. #=GR PIM1_HUMAN/129-381 SS EEEEEEE..................SSEEE..EEEE--SS....EEEHH. #=GR PIM1_HUMAN/129-381 AS .................................................. CLK1_MOUSE/160-476 MLEWFEH..................RGHIC..IVFELL........GLST #=GR CLK1_MOUSE/160-476 AS .................................................. TTK_HUMAN/525-791 LYDYEIT..................DQYIY..MVMECGNI......DLN. #=GR TTK_HUMAN/525-791 AS .................................................. BUR1_YEAST/60-366 LIEMVYDHSPDIT.....NAASSNLHKSFY..MILPYMVADLSGVLHNP. #=GR BUR1_YEAST/60-366 AS .................................................. CDC21_MEDSA/1-284 LQDVVHS..................DKRLY..LVFEYLDLDLKKHMDSS. #=GR CDC21_MEDSA/1-284 AS .................................................. KIN28_YEAST/7-290 LIDIFMA..................YDNLN..LVLEFLPTDLEVVIKDK. #=GR KIN28_YEAST/7-290 AS .................................................. CDKL1_HUMAN/4-287 LLEVFRR..................KRRLH..LVFEYCDHT.....VLH. #=GR CDKL1_HUMAN/4-287 AS .................................................. MAK_RAT/4-284 LKEVIRE..................NDHLY..FIFEYMKENLYQLMKDR. #=GR MAK_RAT/4-284 AS .................................................. CTK1_YEAST/183-469 IKEIMVE.................SQKTVY..MIFEYADNDLSGLLLNK. #=GR CTK1_YEAST/183-469 AS .................................................. MK04_HUMAN/20-312 VYEVLGPKGTDL.......QGELFKFSVAY..IVQEYMETDLARLLEQG. #=GR MK04_HUMAN/20-312 AS .................................................. ERK1_CANAL/68-371 ILAIQRPIN.............YESFNEIY..LIQELMETDLHRVIRTQ. #=GR ERK1_CANAL/68-371 AS .................................................. GSK3A_RAT/119-403 LRYFFYSSG..............EKKDELYLNLVLEYVPETVYRVARHF. #=GR GSK3A_RAT/119-403 AS .................................................. CSK21_CHICK/39-324 LADIVKDP................VSRTPA..LVFEHVNNT.....DFK. #=GR CSK21_CHICK/39-324 AS .................................................. ACVR1_HUMAN/208-495 FIASDMTSR..............HSSTQLW..LITHYHEMG.....SLY. #=GR ACVR1_HUMAN/208-495 AS .................................................. AVR2A_HUMAN/192-479 FIGAEKRGT..............SVDVDLW..LITAFHEKG.....SLS. #=GR AVR2A_HUMAN/192-479 AS .................................................. KPRO_MAIZE/534-812 IWGFCSE..................GSHRL..LVSEYVENG.....SLA. #=GR KPRO_MAIZE/534-812 AS .................................................. MIL_AVIMH/82-339 FMGYMT...................KDNLA..IVTQWCEGS.....SLY. #=GR MIL_AVIMH/82-339 AS .................................................. M3K9_HUMAN/144-403 LRGVCLK..................EPNLC..LVMEFARGG.....PLN. #=GR M3K9_HUMAN/144-403 AS .................................................. PHY1_CERPU/1004-1282 MFCSPLY..................RRKCS..IIMELMDG......DLL. #=GR PHY1_CERPU/1004-1282 AS .................................................. BYR2_SCHPO/394-658 YLGSNLN..................SDHLN..IFLEYVPGG.....SVA. #=GR BYR2_SCHPO/394-658 AS .................................................. CDC15_YEAST/25-272 YHGFIRK..................SYELY..ILLEYCANG.....SLR. #=GR CDC15_YEAST/25-272 AS .................................................. STE20_YEAST/620-871 FIDSYVL..................KGDLW..VIMEYMEGG.....SLT. #=GR STE20_YEAST/620-871 AS .................................................. STE7_YEAST/191-466 FYGAYYNQ...............HINNEII..ILMEYSDCG.....SLD. #=GR STE7_YEAST/191-466 AS .................................................. BYR1_SCHPO/66-320 FYGAFQY..................KNNIS..LCMEYMDCG.....SLD. #=GR BYR1_SCHPO/66-320 AS .................................................. MKK1_YEAST/221-488 YYGMFTDD................ENSSIY..IAMEYMGGR.....SLD. #=GR MKK1_YEAST/221-488 AS .................................................. MOS_CERAE/60-338 VVAASTRT...............PAGSNSLGTIIMEFGGNV.....TLH. #=GR MOS_CERAE/60-338 AS .................................................. #=GR MOS_CERAE/60-338 pAS .................................................. PKN1_MYXXA/59-320 IFDMDAT..................PPRPY..LIMEFLDGA.....PLS. #=GR PKN1_MYXXA/59-320 AS .................................................. RAN1_SCHPO/18-295 LHRVLET..................EDAIY..VVLQYCPNG.....DLF. #=GR RAN1_SCHPO/18-295 AS .................................................. HAL4_YEAST/316-590 TLDLFQD.................AKGEYC..EVMEYCAGG.....DLF. #=GR HAL4_YEAST/316-590 AS .................................................. NPR1_YEAST/438-742 TIEIVYE..................NDRIL..QVMEYCEY......DLF. #=GR NPR1_YEAST/438-742 AS .................................................. KKL6_YEAST/192-508 LLGIN.NPIFVTSKKPLCDLIIKTPRALPPCDMIMSYCPAG.....DLL. #=GR KKL6_YEAST/192-508 AS .................................................. KR1_PRVKA/53-332 MKQMLAR..................GPATC..LVLPHFRC......DLY. #=GR KR1_PRVKA/53-332 AS .................................................. KR1_HHV11/191-478 LLDLHVV..................SGVTC..LVLPKYQA......DLY. #=GR KR1_HHV11/191-478 AS .................................................. WEE1_HUMAN/299-569 YFSAWAE..................DDHML..IQNEYCNGG.....SLA. #=GR WEE1_HUMAN/299-569 SS EEEEEEE..................TTEEE..EEEE--TT-.....BHH. #=GR WEE1_HUMAN/299-569 AS .................................................. HRR25_YEAST/9-273 FIRWFGR.................EGEYNA..MVIDLLGPSLEDLFNYC. #=GR HRR25_YEAST/9-273 AS .................................................. #=GC SS_cons EEEEEEE..................TTEEE..EEEE--TS-...EEBHH. #=GC seq_cons hhshhps..................psplh..llhEahpsu.....cLh. PHKG2_RAT/24-291 .DYLT................EKVAL...SEKETRSIMRSLLEAVNFLHV #=GR PHKG2_RAT/24-291 AS .................................................. KS6A1_MOUSE/407-664 .DKIL................RQKFF...SEREASFVLHTISKTVEYLHS #=GR KS6A1_MOUSE/407-664 AS .................................................. KCC4_MOUSE/42-296 .DRIV................EKGYY...SERDARDAVKQILEAVAYLHE #=GR KCC4_MOUSE/42-296 AS .................................................. CDPK_SOYBN/34-292 .DRIV................QKGHY...SERQAARLIKTIVEVVEACHS #=GR CDPK_SOYBN/34-292 AS .................................................. KPK2_PLAFK/111-364 .EYLN................NNGPY...TEQVAKKAMKRVLIALEALHS #=GR KPK2_PLAFK/111-364 AS .................................................. RAD53_YEAST/198-466 .DFVA................AHGAV...GEDAGREISRQILTAIKYIHS #=GR RAD53_YEAST/198-466 AS .................................................. MYLK_CHICK/1453-1708 .ERII...............DEDFEL...TERECIKYMRQISEGVEYIHK #=GR MYLK_CHICK/1453-1708 AS .................................................. CDR1_SCHPO/12-258 .HYIR................KHGPL...SEREAAHYLSQILDAVAHCHR #=GR CDR1_SCHPO/12-258 AS .................................................. KIN1_SCHPO/125-395 .DYII................SHGKL...KEKQARKFVRQIGSALSYLHQ #=GR KIN1_SCHPO/125-395 AS .................................................. MEK1_YEAST/162-444 .SYLA................KGDCLTSMSETESLLIVFQILQALNYLHD #=GR MEK1_YEAST/162-444 AS .................................................. CDC5_YEAST/82-337 .ELLK................RRKVL...TEPEVRFFTTQICGAIKYMHS #=GR CDC5_YEAST/82-337 AS .................................................. CHK1_SCHPO/10-272 .DKIE................PDVGI...DEDVAQFYFAQLMEGISFMHS #=GR CHK1_SCHPO/10-272 AS .................................................. KGP1_DROME/457-717 .TMLR................DRGSF...EDNAAQFIIGCVLQAFEYLHA #=GR KGP1_DROME/457-717 AS .................................................. KIN82_YEAST/324-602 .RALQ..............TRKSKCI...AEEDAKFYASEVVAALEYLHL #=GR KIN82_YEAST/324-602 AS .................................................. AKT_MLVAT/171-429 .FHLS................RERVF...SEDRARFYGAEIVSALDYLHS #=GR AKT_MLVAT/171-429 AS .................................................. PKD1_DICDI/36-291 .HHLR................ANKCF...TEQTTKLIVAEIVLAIEYLHA #=GR PKD1_DICDI/36-291 AS .................................................. ARBK1_BOVIN/191-453 .YHLS................QHGVF...SEADMRFYAAEIILGLEHMHN #=GR ARBK1_BOVIN/191-453 SS .HHHH................HH-S-...-HHHHHHHHHHHHHHHHHHHH #=GR ARBK1_BOVIN/191-453 AS .................................................. FUSED_DROME/4-254 .RYLS................YNGAM...GEEPARRVTGHLVSALYYLHS #=GR FUSED_DROME/4-254 AS .................................................. KAB7_YEAST/1096-1354 .DLIE................FKTNM...TEFEAKLIFKQVVAGIKHLHD #=GR KAB7_YEAST/1096-1354 AS .................................................. PIM1_HUMAN/129-381 .DFIT................ERGAL...QEELARSFFWQVLEAVRHCHN #=GR PIM1_HUMAN/129-381 SS .HHHH................HH-S-...-HHHHHHHHHHHHHHHHHHHH #=GR PIM1_HUMAN/129-381 AS .................................................. CLK1_MOUSE/160-476 YDFIK.................ENSFLPFRMDHIRKMAYQICKSVNFLHS #=GR CLK1_MOUSE/160-476 AS .................................................. TTK_HUMAN/525-791 .SWLK................KKKSI...DPWERKSYWKNMLEAVHTIHQ #=GR TTK_HUMAN/525-791 AS .................................................. BUR1_YEAST/60-366 ......................RINL...EMCDIKNMMLQILEGLNYIHC #=GR BUR1_YEAST/60-366 AS .................................................. CDC21_MEDSA/1-284 PEFIK........................DPRQVKMFLYQMLCGIAYCHS #=GR CDC21_MEDSA/1-284 AS .................................................. KIN28_YEAST/7-290 ......................SILF...TPADIKAWMLMTLRGVYHCHR #=GR KIN28_YEAST/7-290 AS .................................................. CDKL1_HUMAN/4-287 .............E....LDRYQRGV...PEHLVKSITWQTLQAVNFCHK #=GR CDKL1_HUMAN/4-287 AS .................................................. MAK_RAT/4-284 ......................NKLF...PESVIRNIMYQILQGLAFIHK #=GR MAK_RAT/4-284 AS .................................................. CTK1_YEAST/183-469 ......................EVQI...SHSQCKHLFKQLLLGMEYLHD #=GR CTK1_YEAST/183-469 AS .................................................. MK04_HUMAN/20-312 ........................TL...AEEHAKLFMYQLLRGLKYIHS #=GR MK04_HUMAN/20-312 AS .................................................. ERK1_CANAL/68-371 ........................NL...SDDHIQYFIYQTLRALKAMHS #=GR ERK1_CANAL/68-371 AS .................................................. GSK3A_RAT/119-403 ...................TKAKLII...PIIYVKVYMYQLFRSLAYIHS #=GR GSK3A_RAT/119-403 AS .................................................. CSK21_CHICK/39-324 ....................QLYQTL...TDYDIRFYMYEILKALDYCHS #=GR CSK21_CHICK/39-324 AS .................................................. ACVR1_HUMAN/208-495 .DYLQ.................LTTL...DTVSCLRIVLSIASGLAHLHI #=GR ACVR1_HUMAN/208-495 AS .................................................. AVR2A_HUMAN/192-479 .DFLK.................ANVV...SWNELCHIAETMARGLAYLHE #=GR AVR2A_HUMAN/192-479 AS .................................................. KPRO_MAIZE/534-812 .NILF................SEGGNILLDWEGRFNIALGVAKGLAYLHH #=GR KPRO_MAIZE/534-812 AS .................................................. MIL_AVIMH/82-339 .KHLH...............VQETKF...QMFQLIDIARQTAQGMDYLHA #=GR MIL_AVIMH/82-339 AS .................................................. M3K9_HUMAN/144-403 .RVLS.................GKRI...PPDILVNWAVQIARGMNYLHD #=GR M3K9_HUMAN/144-403 AS .................................................. PHY1_CERPU/1004-1282 .ALMQ.......RRLDRNEDHDSPPF...SILEVVDIILQTSEGMNYLHE #=GR PHY1_CERPU/1004-1282 AS .................................................. BYR2_SCHPO/394-658 .GLLT................MYGSF...EETLVKNFIKQTLKGLEYLHS #=GR BYR2_SCHPO/394-658 AS .................................................. CDC15_YEAST/25-272 .RLIS...............RSSTGL...SENESKTYVTQTLLGLKYLHG #=GR CDC15_YEAST/25-272 AS .................................................. STE20_YEAST/620-871 .DVVT.................HCIL...TEGQIGAVCRETLSGLEFLHS #=GR STE20_YEAST/620-871 AS .................................................. STE7_YEAST/191-466 .KILSVY...KRFVQRGTVSSKKTWF...NELTISKIAYGVLNGLDHLYR #=GR STE7_YEAST/191-466 AS .................................................. BYR1_SCHPO/66-320 .AILR................EGGPI...PLDILGKIINSMVKGLIYLYN #=GR BYR1_SCHPO/66-320 AS .................................................. MKK1_YEAST/221-488 .............AIYKNLLERGGRI...SEKVLGKIAEAVLRGLSYLHE #=GR MKK1_YEAST/221-488 AS .................................................. MOS_CERAE/60-338 .QVIYGAASHPEGDAGEPHCSTGGPL...TLGKCLKYSLDVVNGLLFLHS #=GR MOS_CERAE/60-338 AS .................................................. #=GR MOS_CERAE/60-338 pAS .......................................*.......... PKN1_MYXXA/59-320 ...................AWVGTPL...AAGAVVSVLSQVCDALQAAHA #=GR PKN1_MYXXA/59-320 AS .................................................. RAN1_SCHPO/18-295 .TYIT.................EKKVYQGNSHLIKTVFLQLISAVEHCHS #=GR RAN1_SCHPO/18-295 AS .................................................. HAL4_YEAST/316-590 .TLVV................AAGKL...EYMEADCFFKQLIRGVVYMHE #=GR HAL4_YEAST/316-590 AS .................................................. NPR1_YEAST/438-742 .AIVM.................SNKM...SYEEICCCFKQILTGVQYLHS #=GR NPR1_YEAST/438-742 AS .................................................. KKL6_YEAST/192-508 .AAVM...............ARNGRL...EAWLIQRIFTEVVLAVKYLHE #=GR KKL6_YEAST/192-508 AS .................................................. KR1_PRVKA/53-332 .SYLT...............MRDGPL...DMRDAGCVIRAVLRGLAYLHG #=GR KR1_PRVKA/53-332 AS .................................................. KR1_HHV11/191-478 .TYLS...............RRLNPL...GRPQIAAVSRQLLSAVDYIHR #=GR KR1_HHV11/191-478 AS .................................................. WEE1_HUMAN/299-569 .DAIS...............ENYRIMSYFKEAELKDLLLQVGRGLRYIHS #=GR WEE1_HUMAN/299-569 SS .HHHH...............HHHHHT----HHHHHHHHHHHHHHHHHHHH #=GR WEE1_HUMAN/299-569 AS .................................................. HRR25_YEAST/9-273 ......................HRRF...SFKTVIMLALQMFCRIQYIHG #=GR HRR25_YEAST/9-273 AS .................................................. #=GC SS_cons .HHHH...............HHHHST----HHHHHHHHHHHHHHHHHHHH #=GC seq_cons .phl..................pssh...scppspphhtpllpulpYlHs PHKG2_RAT/24-291 .N..........NIVHRDLKPENILLD.DNMQI................. #=GR PHKG2_RAT/24-291 AS .................*................................ KS6A1_MOUSE/407-664 .Q..........GVVHRDLKPSNILYV.DESGNPE............... #=GR KS6A1_MOUSE/407-664 AS .................*................................ KCC4_MOUSE/42-296 .N..........GIVHRDLKPENLLYA..TPAPDA............... #=GR KCC4_MOUSE/42-296 AS .................*................................ CDPK_SOYBN/34-292 .L..........GVMHRDLKPENFLFD..TIDEDA............... #=GR CDPK_SOYBN/34-292 AS .................*................................ KPK2_PLAFK/111-364 .N..........GVVHRDLKMENLMLE..NPNDPS............... #=GR KPK2_PLAFK/111-364 AS .................*................................ RAD53_YEAST/198-466 .M..........GISHRDLKPDNILIEQDDPVL................. #=GR RAD53_YEAST/198-466 AS .................*................................ MYLK_CHICK/1453-1708 .Q..........GIVHLDLKPENIMCV.NKTGTS................ #=GR MYLK_CHICK/1453-1708 AS .................*................................ CDR1_SCHPO/12-258 .F..........RFRHRDLKLENILIKVNEQQI................. #=GR CDR1_SCHPO/12-258 AS .................*................................ KIN1_SCHPO/125-395 .N..........SVVHRDLKIENILIS.KTGDI................. #=GR KIN1_SCHPO/125-395 AS .................*................................ MEK1_YEAST/162-444 .Q..........DIVHRDLKLDNILLC..TPEPCT............... #=GR MEK1_YEAST/162-444 AS .................*................................ CDC5_YEAST/82-337 .R..........RVIHRDLKLGNIFFD.SNYNL................. #=GR CDC5_YEAST/82-337 AS .................*................................ CHK1_SCHPO/10-272 .K..........GVAHRDLKPENILLD.YNGNL................. #=GR CHK1_SCHPO/10-272 AS .................*................................ KGP1_DROME/457-717 .R..........GIIYRDLKPENLMLD.ERGYV................. #=GR KGP1_DROME/457-717 AS .................*................................ KIN82_YEAST/324-602 .L..........GFIYRDLKPENILLH.QSGHV................. #=GR KIN82_YEAST/324-602 AS .................*................................ AKT_MLVAT/171-429 EK..........NVVYRDLKLENLMLD.KDGHI................. #=GR AKT_MLVAT/171-429 AS .................*................................ PKD1_DICDI/36-291 .E..........NIIYRDLKPENILID.EKGHI................. #=GR PKD1_DICDI/36-291 AS .................*................................ ARBK1_BOVIN/191-453 .R..........FVVYRDLKPANILLD.EHGHV................. #=GR ARBK1_BOVIN/191-453 SS .T..........TEE----SGGGEEE-.TTS-E................. #=GR ARBK1_BOVIN/191-453 AS .................*................................ FUSED_DROME/4-254 .N..........RILHRDLKPQNVLLD.KNMHA................. #=GR FUSED_DROME/4-254 AS .................*................................ KAB7_YEAST/1096-1354 .Q..........GIVHRDIKDENVIVD.SKGFV................. #=GR KAB7_YEAST/1096-1354 AS .................*................................ PIM1_HUMAN/129-381 .C..........GVLHRDIKDENILIDLNRGEL................. #=GR PIM1_HUMAN/129-381 SS .T..........TEE-S--SGGGEEEETTTTEE................. #=GR PIM1_HUMAN/129-381 AS .................*................................ CLK1_MOUSE/160-476 .N..........KLTHTDLKPENILFV.KSDYTEAYNPKMKRDERTIVNP #=GR CLK1_MOUSE/160-476 AS .................*................................ TTK_HUMAN/525-791 .H..........GIVHSDLKPANFLIV..DGML................. #=GR TTK_HUMAN/525-791 AS .................*................................ BUR1_YEAST/60-366 .A..........KFMHRDIKTANILID.HNGVL................. #=GR BUR1_YEAST/60-366 AS .................*................................ CDC21_MEDSA/1-284 .H..........RVLHRDLKPQNLLIDRRTNSL................. #=GR CDC21_MEDSA/1-284 AS .................*................................ KIN28_YEAST/7-290 .N..........FILHRDLKPNNLLFS.PDGQI................. #=GR KIN28_YEAST/7-290 AS .................*................................ CDKL1_HUMAN/4-287 .H..........NCIHRDVKPENILIT.KHSVI................. #=GR CDKL1_HUMAN/4-287 AS .................*................................ MAK_RAT/4-284 .H..........GFFHRDMKPENLLCM.GPELV................. #=GR MAK_RAT/4-284 AS .................*................................ CTK1_YEAST/183-469 .N..........KILHRDVKGSNILID.NQGNL................. #=GR CTK1_YEAST/183-469 AS .................*................................ MK04_HUMAN/20-312 .A..........NVLHRDLKPANIFIS.TEDLV................. #=GR MK04_HUMAN/20-312 AS .................*................................ ERK1_CANAL/68-371 .A..........NVLHRDLKPSNLLLN.SNCDL................. #=GR ERK1_CANAL/68-371 AS .................*................................ GSK3A_RAT/119-403 .Q..........GVCHRDIKPQNLLVD.PDTAV................. #=GR GSK3A_RAT/119-403 AS .................*................................ CSK21_CHICK/39-324 .M..........GIMHRDVKPHNVMID.HEHRK................. #=GR CSK21_CHICK/39-324 AS .................*................................ ACVR1_HUMAN/208-495 .EIFGT..QGKPAIAHRDLKSKNILVK.KNGQC................. #=GR ACVR1_HUMAN/208-495 AS .................*................................ AVR2A_HUMAN/192-479 .DIPGLKDGHKPAISHRDIKSKNVLLK.NNLTA................. #=GR AVR2A_HUMAN/192-479 AS .................*................................ KPRO_MAIZE/534-812 .EC.......LEWVIHCDVKPENILLD.QAFEP................. #=GR KPRO_MAIZE/534-812 AS .................*................................ MIL_AVIMH/82-339 .K..........NIIHRDMKSNNIFLH.GGLTV................. #=GR MIL_AVIMH/82-339 AS .................*................................ M3K9_HUMAN/144-403 .EA.......IVPIIHRDLKSSNILIL.QKVENGDLS...........NK #=GR M3K9_HUMAN/144-403 AS .................*................................ PHY1_CERPU/1004-1282 .K..........GIIHRDLKSMNILVK.SVKVTKSEI..........GYV #=GR PHY1_CERPU/1004-1282 AS .................*................................ BYR2_SCHPO/394-658 .R..........GIVHRDIKGANILVD.NKGKI................. #=GR BYR2_SCHPO/394-658 AS .................*................................ CDC15_YEAST/25-272 .E..........GVIHRDIKAANILLS.ADNTV................. #=GR CDC15_YEAST/25-272 AS .................*................................ STE20_YEAST/620-871 .K..........GVLHRDIKSDNILLS.MEGDI................. #=GR STE20_YEAST/620-871 AS .................*................................ STE7_YEAST/191-466 QY..........KIIHRDIKPSNVLIN.SKGQI................. #=GR STE7_YEAST/191-466 AS .................*................................ BYR1_SCHPO/66-320 VL..........HIIHRDLKPSNVVVN.SRGEI................. #=GR BYR1_SCHPO/66-320 AS .................*................................ MKK1_YEAST/221-488 .K..........KVIHRDIKPQNILLN.ENGQV................. #=GR MKK1_YEAST/221-488 AS .................*................................ MOS_CERAE/60-338 .Q..........SIVHLDLKPANILIS.EQDVC................. #=GR MOS_CERAE/60-338 AS .................*................................ #=GR MOS_CERAE/60-338 pAS .................................................. PKN1_MYXXA/59-320 .R..........GIVHRDLKPDNIFLV.RRNGNAP............... #=GR PKN1_MYXXA/59-320 AS .................*................................ RAN1_SCHPO/18-295 .V..........GIYHRDLKPENIMVG.NDVNT................. #=GR RAN1_SCHPO/18-295 AS .................*................................ HAL4_YEAST/316-590 .M..........GVCHRDLKPENLLLT.HDGVL................. #=GR HAL4_YEAST/316-590 AS .................*................................ NPR1_YEAST/438-742 .I..........GLAHRDLKLDNCVIN.EKGIV................. #=GR NPR1_YEAST/438-742 AS .................*................................ KKL6_YEAST/192-508 .N..........SIIHRDLKLENILLK...YSFDDINSFRDS.PIYCKQN #=GR KKL6_YEAST/192-508 AS .................*................................ KR1_PRVKA/53-332 .M..........RIMHRDVKAENIFLE.DVDTV................. #=GR KR1_PRVKA/53-332 AS .................*................................ KR1_HHV11/191-478 .Q..........GIIHRDIKTENIFIN.TPEDI................. #=GR KR1_HHV11/191-478 AS .................*................................ WEE1_HUMAN/299-569 .M..........SLVHMDIKPSNIFIS.RTSIPNAASEEGDEDDWASNKV #=GR WEE1_HUMAN/299-569 SS .T..........TEE-S--SGGGEEEE.---------------------- #=GR WEE1_HUMAN/299-569 AS .................*................................ HRR25_YEAST/9-273 .R..........SFIHRDIKPDNFLMG..VGRRGS............... #=GR HRR25_YEAST/9-273 AS .................*................................ #=GC SS_cons .T..........TEE-S--SGGGEEEETTTTEE----------------- #=GC seq_cons .p..........sllHRDLKspNILls.psspl................. PHKG2_RAT/24-291 ..RLSDFGFSCH..................LEPGE.KLRELCGTPGYLAP #=GR PHKG2_RAT/24-291 AS .................................................. KS6A1_MOUSE/407-664 CLRICDFGFAKQL.................RAENG.LLMTPCYTANFVAP #=GR KS6A1_MOUSE/407-664 AS .................................................. KCC4_MOUSE/42-296 PLKIADFGLSKI..................VEHQV.LMKTVCGTPGYCAP #=GR KCC4_MOUSE/42-296 AS .................................................. CDPK_SOYBN/34-292 KLKATDFGLSVF..................YKPGE.SFCDVVGSPYYVAP #=GR CDPK_SOYBN/34-292 AS .................................................. KPK2_PLAFK/111-364 SLKIIDFGLAS...................FLNSP.SMNMRCGSPGYVAP #=GR KPK2_PLAFK/111-364 AS .................................................. RAD53_YEAST/198-466 .VKITDFGLAKV..................QGNGS.FMKTFCGTLAYVAP #=GR RAD53_YEAST/198-466 AS .................................................. MYLK_CHICK/1453-1708 .IKLIDFGLARR..................LESAG.SLKVLFGTPEFVAP #=GR MYLK_CHICK/1453-1708 AS .................................................. CDR1_SCHPO/12-258 ..KIADFGMATV..................EPNDS.CLENYCGSLHYLAP #=GR CDR1_SCHPO/12-258 AS .................................................. KIN1_SCHPO/125-395 ..KIIDFGLSNL..................YRRQS.RLRTFCGSLYFAAP #=GR KIN1_SCHPO/125-395 AS .................................................. MEK1_YEAST/162-444 RIVLADFGIAKDL.................NSNKE.RMHTVVGTPEYCAP #=GR MEK1_YEAST/162-444 AS .................................................. CDC5_YEAST/82-337 ..KIGDFGLAAVL.................ANESE.RKYTICGTPNYIAP #=GR CDC5_YEAST/82-337 AS .................................................. CHK1_SCHPO/10-272 ..KISDFGFASLFS...............YKGKSR.LLNSPVGSPPYAAP #=GR CHK1_SCHPO/10-272 AS .................................................. KGP1_DROME/457-717 ..KIVDFGFAKQ..................IGTSS.KTWTFCGTPEYVAP #=GR KGP1_DROME/457-717 AS .................................................. KIN82_YEAST/324-602 ..MLSDFDLSIQATGSKKPTMKDSTYLDTKICSDGFRTNSFVGTEEYLAP #=GR KIN82_YEAST/324-602 AS .................................................. AKT_MLVAT/171-429 ..KITDFGLCKEG.................IKDGA.TMKTFCGTPEYLAP #=GR AKT_MLVAT/171-429 AS .................................................. PKD1_DICDI/36-291 ..KLTDFGFSKK..................TVGGK.NTSSVCGTFDYMAP #=GR PKD1_DICDI/36-291 AS .................................................. ARBK1_BOVIN/191-453 ..RISDLGLAC...................DFSKK.KPHASVGTHGYMAP #=GR ARBK1_BOVIN/191-453 SS ..EE--GTT-E...................E-SSS.---S--S-TTS--H #=GR ARBK1_BOVIN/191-453 AS .................................................. FUSED_DROME/4-254 ..KLCDFGLARNM.................TLGTH.VLTSIKGTPLYMAP #=GR FUSED_DROME/4-254 AS .................................................. KAB7_YEAST/1096-1354 ..KIIDFGSAA...................YVKSG.PFDVFVGTIDYAAP #=GR KAB7_YEAST/1096-1354 AS .................................................. PIM1_HUMAN/129-381 ..KLIDFGSGA...................LLKDT.VYTDFDGTRVYSPP #=GR PIM1_HUMAN/129-381 SS ..EE---TT-E...................E--SS.-B----S-GGGS-H #=GR PIM1_HUMAN/129-381 AS .................................................. CLK1_MOUSE/160-476 DIKVVDFGSA....................TYDDE.HHSTLVSTRHYRAP #=GR CLK1_MOUSE/160-476 AS .................................................. TTK_HUMAN/525-791 ..KLIDFGIANQMQ...............PDTTSV.VKDSQVGTVNYMPP #=GR TTK_HUMAN/525-791 AS .................................................. BUR1_YEAST/60-366 ..KLADFGLARLYYGCPPN.....LKYPGGAGSGA.KYTSVVVTRWYRAP #=GR BUR1_YEAST/60-366 AS .................................................. CDC21_MEDSA/1-284 ..KLADFGLARAF.................GIPVR.TFTHEVVTLWYRAP #=GR CDC21_MEDSA/1-284 AS .................................................. KIN28_YEAST/7-290 ..KVADFGLARAI.................PAPHE.ILTSNVVTRWYRAP #=GR KIN28_YEAST/7-290 AS .................................................. CDKL1_HUMAN/4-287 ..KLCDFGFARLL.................TGPSD.YYTDYVATRWYRSP #=GR CDKL1_HUMAN/4-287 AS .................................................. MAK_RAT/4-284 ..KIADFGLARE..................LRSQP.PYTDYVSTRWYRAP #=GR MAK_RAT/4-284 AS .................................................. CTK1_YEAST/183-469 ..KITDFGLARK..................MNSRA.DYTNRVITLWYRPP #=GR CTK1_YEAST/183-469 AS .................................................. MK04_HUMAN/20-312 .LKIGDFGLARIVDQ..............HYSHKG.YLSEGLVTKWYRSP #=GR MK04_HUMAN/20-312 AS .................................................. ERK1_CANAL/68-371 ..KICDFGLARSIAS..............QEDNYG.FMTEYVATRWYRAP #=GR ERK1_CANAL/68-371 AS .................................................. GSK3A_RAT/119-403 .LKLCDFGSAKQ..................LVRGE.PNVSYICSRYYRAP #=GR GSK3A_RAT/119-403 AS .................................................. CSK21_CHICK/39-324 .LRLIDWGLAEF..................YHPGQ.EYNVRVASRYFKGP #=GR CSK21_CHICK/39-324 AS .................................................. ACVR1_HUMAN/208-495 ..CIADLGLAVMHSQ.............STNQLDV.GNNPRVGTKRYMAP #=GR ACVR1_HUMAN/208-495 AS .................................................. AVR2A_HUMAN/192-479 ..CIADFGLALKFE...............AGKSAG.DTHGQVGTRRYMAP #=GR AVR2A_HUMAN/192-479 AS .................................................. KPRO_MAIZE/534-812 ..KITDFGLVKLLN...............RGGSTQ.NVSHVRGTLGYIAP #=GR KPRO_MAIZE/534-812 AS .................................................. MIL_AVIMH/82-339 ..KIGDFGLATVKS...............RWSGSQ.QVEQPTGSILWMAP #=GR MIL_AVIMH/82-339 AS .................................................. M3K9_HUMAN/144-403 ILKITDFGLAR...................EWHRT.TKMSAAGTYAWMAP #=GR M3K9_HUMAN/144-403 AS .................................................. PHY1_CERPU/1004-1282 HVKVADFGLSKTKD...............SSTRYS.NQTWNRGTNRWMAP #=GR PHY1_CERPU/1004-1282 AS .................................................. BYR2_SCHPO/394-658 ..KISDFGISKKLELN...........STSTKTGG.ARPSFQGSSFWMAP #=GR BYR2_SCHPO/394-658 AS .................................................. CDC15_YEAST/25-272 ..KLADFGVS....................TIVNS.SALTLAGTLNWMAP #=GR CDC15_YEAST/25-272 AS .................................................. STE20_YEAST/620-871 ..KLTDFGFCAQI.................NELNL.KRTTMVGTPYWMAP #=GR STE20_YEAST/620-871 AS .................................................. STE7_YEAST/191-466 ..KLCDFGVSK...................KLINS.IADTFVGTSTYMSP #=GR STE7_YEAST/191-466 AS .................................................. BYR1_SCHPO/66-320 ..KLCDFGVSG...................ELVNS.VAQTFVGTSTYMSP #=GR BYR1_SCHPO/66-320 AS .................................................. MKK1_YEAST/221-488 ..KLCDFGVSG...................EAVNS.LATTFTGTSFYMAP #=GR MKK1_YEAST/221-488 AS .................................................. MOS_CERAE/60-338 ..KISDFGCSEKLED..............LLCFQT.PLYPLGGTYTHRAP #=GR MOS_CERAE/60-338 AS .................................................. #=GR MOS_CERAE/60-338 pAS .................................................. PKN1_MYXXA/59-320 FVKVLDFGIAKLAD...............AHMPQT.HAGIIVGTPEYMAP #=GR PKN1_MYXXA/59-320 AS .................................................. RAN1_SCHPO/18-295 .VYLADFGLA....................TTEPY.SSDFGCGSLFYMSP #=GR RAN1_SCHPO/18-295 AS .................................................. HAL4_YEAST/316-590 ..KITDFGNSECFKM.............AWEKNIH.LSGGVCGSSPYIAP #=GR HAL4_YEAST/316-590 AS .................................................. NPR1_YEAST/438-742 ..KLIDFGAAVVFSY.............PFSKNLV.EASGIVGSDPYLAP #=GR NPR1_YEAST/438-742 AS .................................................. KKL6_YEAST/192-508 FIELADFGLCKK..................IENNE.MCTARCGSEDYVSP #=GR KKL6_YEAST/192-508 AS .................................................. KR1_PRVKA/53-332 ..CLGDLGAARC..................NVAAP.NFYGLAGTIETNAP #=GR KR1_PRVKA/53-332 AS .................................................. KR1_HHV11/191-478 ..CLGDFGAACFVQ...............GSRSSP.FPYGIAGTIDTNAP #=GR KR1_HHV11/191-478 AS .................................................. WEE1_HUMAN/299-569 MFKIGDLGH.....................VTRIS.SPQVEEGDSRFLAN #=GR WEE1_HUMAN/299-569 SS EEEE---TT.....................-EETT.-S------GGG--H #=GR WEE1_HUMAN/299-569 AS .................................................. HRR25_YEAST/9-273 TVHVIDFGLSKKYRDFN..........THRHIPYR.ENKSLTGTARYASV #=GR HRR25_YEAST/9-273 AS .................................................. #=GC SS_cons EEEE--GTT.E...................EECSS.-C-S--S-GGGS-H #=GC seq_cons ..KlsDFGlAp...................ttsss.thpshsGT.hYhAP PHKG2_RAT/24-291 ....EI....LKCS.........MDETHPGYGKEVDLWACGVILFTLLA. #=GR PHKG2_RAT/24-291 AS .................................................. KS6A1_MOUSE/407-664 ....EV....LK...............RQGYDEGCDIWSLGILLYTMLA. #=GR KS6A1_MOUSE/407-664 AS .................................................. KCC4_MOUSE/42-296 ....EI....LR...............GCAYGPEVDMWSVGIITYILLC. #=GR KCC4_MOUSE/42-296 AS .................................................. CDPK_SOYBN/34-292 ....EV....LR................KLYGPESDVWSAGVILYILLS. #=GR CDPK_SOYBN/34-292 AS .................................................. KPK2_PLAFK/111-364 ....EI....LK...............CASYGTKVDIFSLGVILFNILC. #=GR KPK2_PLAFK/111-364 AS .................................................. RAD53_YEAST/198-466 ....EV....IRGKDTSV..SPDEYEERNEYSSLVDMWSMGCLVYVILT. #=GR RAD53_YEAST/198-466 AS .................................................. MYLK_CHICK/1453-1708 ....EV....IN...............YEPIGYETDMWSIGVICYILVS. #=GR MYLK_CHICK/1453-1708 AS .................................................. CDR1_SCHPO/12-258 ....EI....VS..............HKPYRGAPADVWSCGVILYSLLS. #=GR CDR1_SCHPO/12-258 AS .................................................. KIN1_SCHPO/125-395 ....EL....LN..............AQPYIGPEVDVWSFGIVLYVLVC. #=GR KIN1_SCHPO/125-395 AS .................................................. MEK1_YEAST/162-444 ....EVGFRANRKAYQSF..SRAATLEQRGYDSKCDLWSLGVITHIMLT. #=GR MEK1_YEAST/162-444 AS .................................................. CDC5_YEAST/82-337 ....EV....LM.............GKHSGHSFEVDIWSLGVMLYALLI. #=GR CDC5_YEAST/82-337 AS .................................................. CHK1_SCHPO/10-272 ....EI....................TQQYDGSKVDVWSCGIILFALLL. #=GR CHK1_SCHPO/10-272 AS .................................................. KGP1_DROME/457-717 ....EI....IL...............NKGHDRAVDYWALGILIHELLN. #=GR KGP1_DROME/457-717 AS .................................................. KIN82_YEAST/324-602 ....EV....IR...............GNGHTAAVDWWTLGILIYEMLF. #=GR KIN82_YEAST/324-602 AS .................................................. AKT_MLVAT/171-429 ....EV....LE...............DNDYGRAVDWWGLGVVMYEMMC. #=GR AKT_MLVAT/171-429 AS .................................................. PKD1_DICDI/36-291 ....EI....LN..............SSNGHGKPVDWWALGVVVYELVT. #=GR PKD1_DICDI/36-291 AS .................................................. ARBK1_BOVIN/191-453 ....EV....LQ..............KGVAYDSSADWFSLGCMLFKLLR. #=GR ARBK1_BOVIN/191-453 SS ....HH....HS..............SS----THHHHHHHHHHHHHHHH. #=GR ARBK1_BOVIN/191-453 AS .................................................. FUSED_DROME/4-254 ....EL....LA...............EQPYDHHADMWSLGCIAYESMA. #=GR FUSED_DROME/4-254 AS .................................................. KAB7_YEAST/1096-1354 ....EV....LG..............GNPYEGQPQDIWAIGILLYTVVF. #=GR KAB7_YEAST/1096-1354 AS .................................................. PIM1_HUMAN/129-381 ....EW....IR..............YHRYHGRSAAVWSLGILLYDMVC. #=GR PIM1_HUMAN/129-381 SS ....HH....HH..............HS-B-HHHHHHHHHHHHHHHHHH. #=GR PIM1_HUMAN/129-381 AS .................................................. CLK1_MOUSE/160-476 ....EV....IL...............ALGWSQPCDVWSIGCILIEYYL. #=GR CLK1_MOUSE/160-476 AS .................................................. TTK_HUMAN/525-791 ....EA....IKDMSSS....RENGKSKSKISPKSDVWSLGCILYYMTY. #=GR TTK_HUMAN/525-791 AS .................................................. BUR1_YEAST/60-366 ....EL....VL..............GDKQYTTAVDIWGVGCVFAEFFE. #=GR BUR1_YEAST/60-366 AS .................................................. CDC21_MEDSA/1-284 ....EI....LL..............GSRHYSTPVDVWSVGCIFAEMAN. #=GR CDC21_MEDSA/1-284 AS .................................................. KIN28_YEAST/7-290 ....EL....LF..............GAKHYTSAIDIWSVGVIFAELML. #=GR KIN28_YEAST/7-290 AS .................................................. CDKL1_HUMAN/4-287 ....EL....LV..............GDTQYGPPVDVWAIGCVFAELLS. #=GR CDKL1_HUMAN/4-287 AS .................................................. MAK_RAT/4-284 ....EV....LL..............RSSVYSSPIDVWAVGSIMAELYT. #=GR MAK_RAT/4-284 AS .................................................. CTK1_YEAST/183-469 ....EL....LL..............GTTNYGTEVDMWGCGCLLVELFN. #=GR CTK1_YEAST/183-469 AS .................................................. MK04_HUMAN/20-312 ....RL....LL..............SPNNYTKAIDMWAAGCILAEMLT. #=GR MK04_HUMAN/20-312 AS .................................................. ERK1_CANAL/68-371 ....EI....ML..............TFQEYTTAIDVWSVGCILAEMLS. #=GR ERK1_CANAL/68-371 AS .................................................. GSK3A_RAT/119-403 ....EL....IF..............GATDYTSSIDVWSAGCVLAELLL. #=GR GSK3A_RAT/119-403 AS .................................................. CSK21_CHICK/39-324 ....EL....LV..............DYQMYDYSLDMWSLGCMLASMIF. #=GR CSK21_CHICK/39-324 AS .................................................. ACVR1_HUMAN/208-495 ....EVLDETIQ.............VDCFDSYKRVDIWAFGLVLWEVARR #=GR ACVR1_HUMAN/208-495 AS .................................................. AVR2A_HUMAN/192-479 ....EVLEGAIN..............FQRDAFLRIDMYAMGLVLWELASR #=GR AVR2A_HUMAN/192-479 AS .................................................. KPRO_MAIZE/534-812 ....EW....VS...............SLPITAKVDVYSYGVVLLELLT. #=GR KPRO_MAIZE/534-812 AS .................................................. MIL_AVIMH/82-339 ....EV....IRM............QDSNPFSFQSDVYSYGIVLYELMT. #=GR MIL_AVIMH/82-339 AS .................................................. M3K9_HUMAN/144-403 ....EV....IR...............ASMFSKGSDVWSYGVLLWELLT. #=GR M3K9_HUMAN/144-403 AS .................................................. PHY1_CERPU/1004-1282 ....EV....INLGYESTEGEISFDGKVPKYPLKSDVYSFGMVCYEVLT. #=GR PHY1_CERPU/1004-1282 AS .................................................. BYR2_SCHPO/394-658 ....EV....VK...............QTMHTEKTDIWSLGCLVIEMLT. #=GR BYR2_SCHPO/394-658 AS .................................................. CDC15_YEAST/25-272 ....EI....LG...............NRGASTLSDIWSLGATVVEMLT. #=GR CDC15_YEAST/25-272 AS .................................................. STE20_YEAST/620-871 ....EV....VS...............RKEYGPKVDIWSLGIMIIEMIE. #=GR STE20_YEAST/620-871 AS .................................................. STE7_YEAST/191-466 ....ER....IQ...............GNVYSIKGDVWSLGLMIIELVT. #=GR STE7_YEAST/191-466 AS .................................................. BYR1_SCHPO/66-320 ....ER....IR...............GGKYTVKSDIWSLGISIIELAT. #=GR BYR1_SCHPO/66-320 AS .................................................. MKK1_YEAST/221-488 ....ER....IQ...............GQPYSVTSDVWSLGLTILEVAN. #=GR MKK1_YEAST/221-488 AS .................................................. MOS_CERAE/60-338 ....EL....LK...............GEGVTPKADIYSFAITLWQMTT. #=GR MOS_CERAE/60-338 AS .................................................. #=GR MOS_CERAE/60-338 pAS .................................................. PKN1_MYXXA/59-320 ....EQ....SL...............GRGVDGRADLYALGVIAYQLLT. #=GR PKN1_MYXXA/59-320 AS .................................................. RAN1_SCHPO/18-295 ECQREVKKLSSLSDMLPVTPEPIESQSSSFATAPNDVWALGIILINLCC. #=GR RAN1_SCHPO/18-295 AS .................................................. HAL4_YEAST/316-590 ....EE....YI..............KEEFDPRPVDIWACGVIYMAMRT. #=GR HAL4_YEAST/316-590 AS .................................................. NPR1_YEAST/438-742 ....EV....CI..............FAKYDPRPVDIWSSAIIFACMIL. #=GR NPR1_YEAST/438-742 AS .................................................. KKL6_YEAST/192-508 ....EI....LM..............GVPYDGHLSDTWALGVILYSLFE. #=GR KKL6_YEAST/192-508 AS .................................................. KR1_PRVKA/53-332 ....EV....LA...............RDRYDTKVDVWGAGVVLFETLA. #=GR KR1_PRVKA/53-332 AS .................................................. KR1_HHV11/191-478 ....EV....LA...............GDPYTTTVDIWSAGLVIFETAV. #=GR KR1_HHV11/191-478 AS .................................................. WEE1_HUMAN/299-569 ....EV....LQ..............ENYTHLPKADIFALALTVVCAAG. #=GR WEE1_HUMAN/299-569 SS ....HH....HT..............T--TTHHHHHHHHHHHHHHHHTT. #=GR WEE1_HUMAN/299-569 AS .................................................. HRR25_YEAST/9-273 ....NT....HL...............GIEQSRRDDLESLGYVLIYFCK. #=GR HRR25_YEAST/9-273 AS .................................................. #=GC SS_cons ....HH....HC..............CS-CTHHHHHHHHHHHHHHHHHH. #=GC seq_cons ....El....lt...............sptasttsDlWSlGlllhphls. PHKG2_RAT/24-291 ....GS......PPFW.HR........RQILMLRMIMEGQYQFSSPEWDD #=GR PHKG2_RAT/24-291 AS .................................................. KS6A1_MOUSE/407-664 ....GY......TPFA.NG.....PSDTPEEILTRIGSGKFTLSGGNWNT #=GR KS6A1_MOUSE/407-664 AS .................................................. KCC4_MOUSE/42-296 ....GF......EPFY.DE.......RGDQFMFRRILNCEYYFISPWWDE #=GR KCC4_MOUSE/42-296 AS .................................................. CDPK_SOYBN/34-292 ....GV......PPFW.AE........SEPGIFRQILLGKLDFHSEPWPS #=GR CDPK_SOYBN/34-292 AS .................................................. KPK2_PLAFK/111-364 ....GY......PPFR.GN........NVKEIFKKNMRCHISFNTKHWIN #=GR KPK2_PLAFK/111-364 AS .................................................. RAD53_YEAST/198-466 ....GH......LPFS.GS........TQDQLYKQIGRGSYHEGPLKDFR #=GR RAD53_YEAST/198-466 AS .................................................. MYLK_CHICK/1453-1708 ....GL......SPFM.GD........NDNETLANVTSATWDFDDEAFDE #=GR MYLK_CHICK/1453-1708 AS .................................................. CDR1_SCHPO/12-258 ....NK......LPFG.GQ........NTDVIYNKIRHGAYDLPSSIS.. #=GR CDR1_SCHPO/12-258 AS .................................................. KIN1_SCHPO/125-395 ....GK......VPFD.DQ........NMSALHAKIKKGTVEYPSYLS.. #=GR KIN1_SCHPO/125-395 AS .................................................. MEK1_YEAST/162-444 ....GI......SPFY.GD.......GSERSIIQNAKIGKLNFKLKQWDI #=GR MEK1_YEAST/162-444 AS .................................................. CDC5_YEAST/82-337 ....GK......PPFQ.AR........DVNTIYERIKCRDFSFPRDKPIS #=GR CDC5_YEAST/82-337 AS .................................................. CHK1_SCHPO/10-272 ....GN......TPWD.EA.....ISNTGDYLLYKKQCERPSYHPWNLLS #=GR CHK1_SCHPO/10-272 AS .................................................. KGP1_DROME/457-717 ....GT......PPFS.AP........DPMQTYNLILKGIDMIAFPKHIS #=GR KGP1_DROME/457-717 AS .................................................. KIN82_YEAST/324-602 ....GC......TPFK.GD........NSNETFSNILTKDVKFPHDKEVS #=GR KIN82_YEAST/324-602 AS .................................................. AKT_MLVAT/171-429 ....GR......LPFY.NQ........DHEKLFELILMEEIRFPRTLG.. #=GR AKT_MLVAT/171-429 AS .................................................. PKD1_DICDI/36-291 ....GK......LPFS.NSKESLLNRKADFQLIFQNSYLS.......... #=GR PKD1_DICDI/36-291 AS .................................................. ARBK1_BOVIN/191-453 ....GH......SPFR.QH.....KTKDKHEIDRMTLTMAVELPDSFS.. #=GR ARBK1_BOVIN/191-453 SS ....SS......-TT-.SS.....SSS-THHHHHHHHH------TTS-.. #=GR ARBK1_BOVIN/191-453 AS .................................................. FUSED_DROME/4-254 ....GQ......PPFC.AS........SILHLVKMIKHEDVKWPSTLT.. #=GR FUSED_DROME/4-254 AS .................................................. KAB7_YEAST/1096-1354 ....KE......NPFY...............NIDEILEGDLKFNNAEEVS #=GR KAB7_YEAST/1096-1354 AS .................................................. PIM1_HUMAN/129-381 ....GD......IPFE.HD....EEIIRGQVFFRQRVS............ #=GR PIM1_HUMAN/129-381 SS ....SS......-S--.SH....HHHHHT----SS---............ #=GR PIM1_HUMAN/129-381 AS .................................................. CLK1_MOUSE/160-476 ....GF......TVFP.TH.....DSREHLAMMERILGPLPKHMIQKTRK #=GR CLK1_MOUSE/160-476 AS .................................................. TTK_HUMAN/525-791 ....GK......TPFQ.QI.......INQISKLHAIIDPNHEIEFPDIPE #=GR TTK_HUMAN/525-791 AS .................................................. BUR1_YEAST/60-366 ....KK......PILQ.GK.....TDIDQGHVIFKLLGTPTEEDWAVARY #=GR BUR1_YEAST/60-366 AS .................................................. CDC21_MEDSA/1-284 ....RR......PLSP.GD.....SEIDELFKIFRILGTPNEDTWPGVTS #=GR CDC21_MEDSA/1-284 AS .................................................. KIN28_YEAST/7-290 ....RI......PYLP.GQ.....NDVDQMEVTFRALGTPTDRDWPEVSS #=GR KIN28_YEAST/7-290 AS .................................................. CDKL1_HUMAN/4-287 ....GV......PLWP.GK.....SDVDQLYLIRKTLGDLIPRHQQVFST #=GR CDKL1_HUMAN/4-287 AS .................................................. MAK_RAT/4-284 ....FR......PLFP.GT.....SEVDEIFKICQVLGTPKKSDWPEGYQ #=GR MAK_RAT/4-284 AS .................................................. CTK1_YEAST/183-469 ....KT......AIFQ.GS.....NELEQIESIFKIMGTPTINSWPTLYD #=GR CTK1_YEAST/183-469 AS .................................................. MK04_HUMAN/20-312 ....GR......MLFA.GA.....HELEQMQLILETIPVIREEDKDELLR #=GR MK04_HUMAN/20-312 AS .................................................. ERK1_CANAL/68-371 ....GR......PLFP.GR.....DYHNQLWLIMEVLGTPNMEDYYNIKS #=GR ERK1_CANAL/68-371 AS .................................................. GSK3A_RAT/119-403 ....GQ......PIFP.GD.....SGVDQLVEIIKVLGTPTREQIREMNP #=GR GSK3A_RAT/119-403 AS .................................................. CSK21_CHICK/39-324 ....RK......EPFF.HG....HDNYDQLVRIAKVLGTEDLYDYIDKYN #=GR CSK21_CHICK/39-324 AS .................................................. ACVR1_HUMAN/208-495 M.VSNGIVEDYKPPFY.DVVPNDPSFEDMRKVVCVDQQRPNIPNRWFSDP #=GR ACVR1_HUMAN/208-495 AS .................................................. AVR2A_HUMAN/192-479 CTAADGPVDEYMLPFE.EEIGQHPSLEDMQEVVVHKKKRPVLRDYWQKHA #=GR AVR2A_HUMAN/192-479 AS .................................................. KPRO_MAIZE/534-812 ....G.......TRVS.ELVGGTDEVHSMLRKLVRMLSAKLEGEEQSWID #=GR KPRO_MAIZE/534-812 AS .................................................. MIL_AVIMH/82-339 ....GE......LPYS.HI.....NNRDQIIFMVGRGYASPDLSKLYKNC #=GR MIL_AVIMH/82-339 AS .................................................. M3K9_HUMAN/144-403 ....GE......VPFR.GI........DGLAVAYGVAMNKLALPIPSTCP #=GR M3K9_HUMAN/144-403 AS .................................................. PHY1_CERPU/1004-1282 ....GD......VPFPEEK.....NPNNVKRMVLEGVRPDLPAHCP.... #=GR PHY1_CERPU/1004-1282 AS .................................................. BYR2_SCHPO/394-658 ....SK......HPYP.NC.....DQMQAIFRIGENILPEFPSNIS.... #=GR BYR2_SCHPO/394-658 AS .................................................. CDC15_YEAST/25-272 ....KN......PPYH.NL.....TDANIYYAVENDTYYPPSSFS..... #=GR CDC15_YEAST/25-272 AS .................................................. STE20_YEAST/620-871 ....GE......PPYL.NE.....TPLRALYLIATNGTPKLKEPENLS.. #=GR STE20_YEAST/620-871 AS .................................................. STE7_YEAST/191-466 ....GE......FPLG.GHNDTPDGILDLLQRIVNEPSPRLPKDRIYS.. #=GR STE7_YEAST/191-466 AS .................................................. BYR1_SCHPO/66-320 ....QE......LPWSFSNIDDSIGILDLLHCIVQEEPPRLPSSFP.... #=GR BYR1_SCHPO/66-320 AS .................................................. MKK1_YEAST/221-488 ....GK......FPCS.SE.....KMAANIAPFELLMWILTFTPELKDEP #=GR MKK1_YEAST/221-488 AS .................................................. MOS_CERAE/60-338 ....KQ......APYS.GE.....RQHILYAVVAYDLRPSLSAAVFQDSL #=GR MOS_CERAE/60-338 AS .................................................. #=GR MOS_CERAE/60-338 pAS .................................................. PKN1_MYXXA/59-320 ....GR......LPFN.DE.....GLAAQLVAHQLRPPPPPSSVYPAVS. #=GR PKN1_MYXXA/59-320 AS .................................................. RAN1_SCHPO/18-295 ....KR......NPWK.RACSQTDGTYRSYVHNPSTLLSILPIS...... #=GR RAN1_SCHPO/18-295 AS .................................................. HAL4_YEAST/316-590 ....GR......QLWS.SA.....EKDDPFYMNYLKGRKEKGGYEPIESL #=GR HAL4_YEAST/316-590 AS .................................................. NPR1_YEAST/438-742 ....KK......FPWKIPK.....LRDNSFKLFCSGRDCDSLSSLVTRTP #=GR NPR1_YEAST/438-742 AS .................................................. KKL6_YEAST/192-508 ....DR......LPFD.PP.....PNASARQRSRATSHRIARFDWRWYRL #=GR KKL6_YEAST/192-508 AS .................................................. KR1_PRVKA/53-332 ............YPKT.ITGGDEPAINGEMHLIDLIRALGVHPEEFPPDT #=GR KR1_PRVKA/53-332 AS .................................................. KR1_HHV11/191-478 ....HN......ASLF.SAPRGPKRGPCDSQITRIIRQAQVHVDEFSPHP #=GR KR1_HHV11/191-478 AS .................................................. WEE1_HUMAN/299-569 ....AE......PLPR.NGDQWHEIRQGRLPRIPQVLS............ #=GR WEE1_HUMAN/299-569 SS ....--......---S.SSHHHHHHHTT-----SS---............ #=GR WEE1_HUMAN/299-569 AS .................................................. HRR25_YEAST/9-273 ....GS......LPWQ.GL.....KATTKKQKYDRIMEKKLNVSVETLCS #=GR HRR25_YEAST/9-273 AS .................................................. #=GC SS_cons ....SS......-TTS.SSHHHHHHHCCTHHHHSSHHH......TTS... #=GC seq_cons ....Gp......sPFt.sp........sththhtphhtsthphs...... PHKG2_RAT/24-291 RS.......................................NTVKDLIAK #=GR PHKG2_RAT/24-291 AS .................................................. KS6A1_MOUSE/407-664 VS.......................................ETAKDLVSK #=GR KS6A1_MOUSE/407-664 AS .................................................. KCC4_MOUSE/42-296 VS.......................................LNAKDLVKK #=GR KCC4_MOUSE/42-296 AS .................................................. CDPK_SOYBN/34-292 IS.......................................DSAKDLIRK #=GR CDPK_SOYBN/34-292 AS .................................................. KPK2_PLAFK/111-364 KS.......................................ESVKEIILW #=GR KPK2_PLAFK/111-364 AS .................................................. RAD53_YEAST/198-466 IS.......................................EEARDFIDS #=GR RAD53_YEAST/198-466 AS .................................................. MYLK_CHICK/1453-1708 IS.......................................DDAKDFISN #=GR MYLK_CHICK/1453-1708 AS .................................................. CDR1_SCHPO/12-258 .........................................SAAQDLLHR #=GR CDR1_SCHPO/12-258 AS .................................................. KIN1_SCHPO/125-395 .........................................SDCKGLLSR #=GR KIN1_SCHPO/125-395 AS .................................................. MEK1_YEAST/162-444 VS.......................................DNAKSFVKD #=GR MEK1_YEAST/162-444 AS .................................................. CDC5_YEAST/82-337 .........................................DEGKILIRD #=GR CDC5_YEAST/82-337 AS .................................................. CHK1_SCHPO/10-272 .........................................PGAYSIITG #=GR CHK1_SCHPO/10-272 AS .................................................. KGP1_DROME/457-717 .........................................RWAVQLIKR #=GR KGP1_DROME/457-717 AS .................................................. KIN82_YEAST/324-602 .........................................KNCKDLIKK #=GR KIN82_YEAST/324-602 AS .................................................. AKT_MLVAT/171-429 .........................................PEAKSLLSG #=GR AKT_MLVAT/171-429 AS .................................................. PKD1_DICDI/36-291 .........................................DEIKDFIFQ #=GR PKD1_DICDI/36-291 AS .................................................. ARBK1_BOVIN/191-453 .........................................PELRSLLEG #=GR ARBK1_BOVIN/191-453 SS .........................................HHHHHHHHH #=GR ARBK1_BOVIN/191-453 AS .................................................. FUSED_DROME/4-254 .........................................SECRSFLQG #=GR FUSED_DROME/4-254 AS .................................................. KAB7_YEAST/1096-1354 .........................................EDCIELIKS #=GR KAB7_YEAST/1096-1354 AS .................................................. PIM1_HUMAN/129-381 .........................................SECQHLIRW #=GR PIM1_HUMAN/129-381 SS .........................................HHHHHHHHH #=GR PIM1_HUMAN/129-381 AS .................................................. CLK1_MOUSE/160-476 RRYFHHDRLDWDEHSSAGR..YVSRRCKPLKEFMLSQDAEHEFLFDLVGK #=GR CLK1_MOUSE/160-476 AS .................................................. TTK_HUMAN/525-791 .........................................KDLQDVLKC #=GR TTK_HUMAN/525-791 AS .................................................. BUR1_YEAST/60-366 LPGAELTTTNYK.................PTLRERFGKYLSETGLDFLGQ #=GR BUR1_YEAST/60-366 AS .................................................. CDC21_MEDSA/1-284 LPDFKSTFPRWP.................SKDLATVVPNLEPAGLDLLNS #=GR CDC21_MEDSA/1-284 AS .................................................. KIN28_YEAST/7-290 FMTYNKLQIYPPP...............SRDELRKRFIAASEYALDFMCG #=GR KIN28_YEAST/7-290 AS .................................................. CDKL1_HUMAN/4-287 NQYFSGVKIPDPE...............DMEPLELKFPNISYPALGLLKG #=GR CDKL1_HUMAN/4-287 AS .................................................. MAK_RAT/4-284 LASSMNFRFPQC................IPINLKTLIPNASSEAIQLMTE #=GR MAK_RAT/4-284 AS .................................................. CTK1_YEAST/183-469 MPWFFMIMPQQTTK............YVNNFSEKFKSVLPSSKCLQLAIN #=GR CTK1_YEAST/183-469 AS .................................................. MK04_HUMAN/20-312 VMPSFVSSTWEV.................KRPLRKLLPEVNSEAIDFLEK #=GR MK04_HUMAN/20-312 AS .................................................. ERK1_CANAL/68-371 KRAREYIRSLPFCKKIPFSELFANTNNNTSTSNTGGRTNINPLALDLLEK #=GR ERK1_CANAL/68-371 AS .................................................. GSK3A_RAT/119-403 NYTEFKFPQIKA.................HPWTKVFKSRTPPEAIALCSS #=GR GSK3A_RAT/119-403 AS .................................................. CSK21_CHICK/39-324 IELDPRFNDILGRHSR.........KRWERFVHSENQHLVSPEALDFLDK #=GR CSK21_CHICK/39-324 AS .................................................. ACVR1_HUMAN/208-495 TL.......................................TSLAKLMKE #=GR ACVR1_HUMAN/208-495 AS .................................................. AVR2A_HUMAN/192-479 GM.......................................AMLCETIEE #=GR AVR2A_HUMAN/192-479 AS .................................................. KPRO_MAIZE/534-812 GYLDSKLN.........................RPVNYVQARTLIKLAVS #=GR KPRO_MAIZE/534-812 AS .................................................. MIL_AVIMH/82-339 P........................................KAMKRLVAD #=GR MIL_AVIMH/82-339 AS .................................................. M3K9_HUMAN/144-403 .........................................EPFAKLMED #=GR M3K9_HUMAN/144-403 AS .................................................. PHY1_CERPU/1004-1282 .........................................IELKALITD #=GR PHY1_CERPU/1004-1282 AS .................................................. BYR2_SCHPO/394-658 .........................................SSAIDFLEK #=GR BYR2_SCHPO/394-658 AS .................................................. CDC15_YEAST/25-272 .........................................EPLKDFLSK #=GR CDC15_YEAST/25-272 AS .................................................. STE20_YEAST/620-871 .........................................SSLKKFLDW #=GR STE20_YEAST/620-871 AS .................................................. STE7_YEAST/191-466 .........................................KEMTDFVNR #=GR STE7_YEAST/191-466 AS .................................................. BYR1_SCHPO/66-320 .........................................EDLRLFVDA #=GR BYR1_SCHPO/66-320 AS .................................................. MKK1_YEAST/221-488 ESN..................................IIWSPSFKSFIDY #=GR MKK1_YEAST/221-488 AS .................................................. MOS_CERAE/60-338 PG.......................................QRLGDVIRR #=GR MOS_CERAE/60-338 AS .................................................. #=GR MOS_CERAE/60-338 pAS .................................................. PKN1_MYXXA/59-320 .........................................AALEHVILR #=GR PKN1_MYXXA/59-320 AS .................................................. RAN1_SCHPO/18-295 .........................................RELNSLLNR #=GR RAN1_SCHPO/18-295 AS .................................................. HAL4_YEAST/316-590 KR.......................................ARCRNVIYS #=GR HAL4_YEAST/316-590 AS .................................................. NPR1_YEAST/438-742 DPPSYDESHSTEKKKPESSSNNVSDPNNVNIGPQRLLHSLPEETQHIVGR #=GR NPR1_YEAST/438-742 AS .................................................. KKL6_YEAST/192-508 SD....................................YKTNVGKQIVEN #=GR KKL6_YEAST/192-508 AS .................................................. KR1_PRVKA/53-332 RLRSEFVRYAGTHR............QPYTQYARVARLGLPETGAFLIYK #=GR KR1_PRVKA/53-332 AS .................................................. KR1_HHV11/191-478 ESRLTSRYRSRAAGNN.........RPPYTRPAWTRYYKMDIDVEYLVCK #=GR KR1_HHV11/191-478 AS .................................................. WEE1_HUMAN/299-569 .........................................QEFTELLKV #=GR WEE1_HUMAN/299-569 SS .........................................HHHHHHHHH #=GR WEE1_HUMAN/299-569 AS .................................................. HRR25_YEAST/9-273 GL......................................PLEFQEYMAY #=GR HRR25_YEAST/9-273 AS .................................................. #=GC SS_cons .........................................HHHHHHHHH #=GC seq_cons .........................................ppspcllpp PHKG2_RAT/24-291 LLQVDPNARLT.....AEQALQHPFF #=GR PHKG2_RAT/24-291 AS .......................... KS6A1_MOUSE/407-664 MLHVDPHQRLT.....AKQVLQHPWI #=GR KS6A1_MOUSE/407-664 AS .......................... KCC4_MOUSE/42-296 LIVLDPKKRLT.....TFQALQHPWV #=GR KCC4_MOUSE/42-296 AS .......................... CDPK_SOYBN/34-292 MLDQNPKTRLT.....AHEVLRHPWI #=GR CDPK_SOYBN/34-292 AS .......................... KPK2_PLAFK/111-364 MCCKNPDDRCT.....ALQALGHQWF #=GR KPK2_PLAFK/111-364 AS .......................... RAD53_YEAST/198-466 LLQVDPNNRST.....AAKALNHPWI #=GR RAD53_YEAST/198-466 AS .......................... MYLK_CHICK/1453-1708 LLKKDMKSRLN.....CTQCLQHPWL #=GR MYLK_CHICK/1453-1708 AS .......................... CDR1_SCHPO/12-258 MLDVNPSTRIT.....IPEVFSHPFL #=GR CDR1_SCHPO/12-258 AS .......................... KIN1_SCHPO/125-395 MLVTDPLKRAT.....LEEVLNHPWM #=GR KIN1_SCHPO/125-395 AS .......................... MEK1_YEAST/162-444 LLQTDVVKRLN.....SKQGLKHIWI #=GR MEK1_YEAST/162-444 AS .......................... CDC5_YEAST/82-337 ILSLDPIERPS.....LTEIMDYVWF #=GR CDC5_YEAST/82-337 AS .......................... CHK1_SCHPO/10-272 MLRSDPFKRYS.....VKHVVQHPWL #=GR CHK1_SCHPO/10-272 AS .......................... KGP1_DROME/457-717 LCRDVPSERLGYQTGGIQDIKKHKWF #=GR KGP1_DROME/457-717 AS .......................... KIN82_YEAST/324-602 LLNKNEAKRLGSK.SGAADIKRHPFF #=GR KIN82_YEAST/324-602 AS .......................... AKT_MLVAT/171-429 LLKKDPTQRLGGGSEDAKEIMQHRFF #=GR AKT_MLVAT/171-429 AS .......................... PKD1_DICDI/36-291 LLSVDPSKRLGT..FDSCSIRNHKWF #=GR PKD1_DICDI/36-291 AS .......................... ARBK1_BOVIN/191-453 LLQRDVNRRLGCLGRGAQEVKESPFF #=GR ARBK1_BOVIN/191-453 SS HT-SSSTTSTTTSSSSHHHHHHSGGG #=GR ARBK1_BOVIN/191-453 AS .......................... FUSED_DROME/4-254 LLEKDPGLRIS.....WTQLLCHPFV #=GR FUSED_DROME/4-254 AS .......................... KAB7_YEAST/1096-1354 ILNRCVPKRPT.....IDDINNDKWL #=GR KAB7_YEAST/1096-1354 AS .......................... PIM1_HUMAN/129-381 CLALRPSDRPT.....FEEIQNHPWM #=GR PIM1_HUMAN/129-381 SS HT-SSGGGS--.....HHHHHTSGGG #=GR PIM1_HUMAN/129-381 AS .......................... CLK1_MOUSE/160-476 ILEYDPAKRIT.....LKEALKHPFF #=GR CLK1_MOUSE/160-476 AS .......................... TTK_HUMAN/525-791 CLKRDPKQRIS.....IPELLAHPYV #=GR TTK_HUMAN/525-791 AS .......................... BUR1_YEAST/60-366 LLALDPYKRLT.....AMSAKHHPWF #=GR BUR1_YEAST/60-366 AS .......................... CDC21_MEDSA/1-284 MLCLDPTKRIT.....ARSAVEHEYF #=GR CDC21_MEDSA/1-284 AS .......................... KIN28_YEAST/7-290 MLTMNPQKRWT.....AVQCLESDYF #=GR KIN28_YEAST/7-290 AS .......................... CDKL1_HUMAN/4-287 CLHMDPTQRLT.....CEQLLHHPYF #=GR CDKL1_HUMAN/4-287 AS .......................... MAK_RAT/4-284 MLNWDPKKRPT.....ASQALKHPYF #=GR MAK_RAT/4-284 AS .......................... CTK1_YEAST/183-469 LLCYDQTKRFS.....ATEALQSDYF #=GR CTK1_YEAST/183-469 AS .......................... MK04_HUMAN/20-312 ILTFNPMDRLT.....AEMGLQHPYM #=GR MK04_HUMAN/20-312 AS .......................... ERK1_CANAL/68-371 LLIFNPAKRIT.....VEDALKHPYL #=GR ERK1_CANAL/68-371 AS .......................... GSK3A_RAT/119-403 LLEYTPSSRLS.....PLEACAHSFF #=GR GSK3A_RAT/119-403 AS .......................... CSK21_CHICK/39-324 LLRYDHQSRLT.....AREAMEHPYF #=GR CSK21_CHICK/39-324 AS .......................... ACVR1_HUMAN/208-495 CWYQNPSARLT.....ALRIKKT..L #=GR ACVR1_HUMAN/208-495 AS .......................... AVR2A_HUMAN/192-479 CWDHDAEARLS.....AGCVGER..I #=GR AVR2A_HUMAN/192-479 AS .......................... KPRO_MAIZE/534-812 CLEEDRSKRPT.....MEHAVQT..L #=GR KPRO_MAIZE/534-812 AS .......................... MIL_AVIMH/82-339 CLKKVREERPL.....FPQILSS..I #=GR MIL_AVIMH/82-339 AS .......................... M3K9_HUMAN/144-403 CWNPDPHSRPS.....FTNILDQ..L #=GR M3K9_HUMAN/144-403 AS .......................... PHY1_CERPU/1004-1282 CWNQDPLKRPS.....FAVICQK..L #=GR PHY1_CERPU/1004-1282 AS .......................... BYR2_SCHPO/394-658 TFAIDCNLRPT.....ASELLSHPFV #=GR BYR2_SCHPO/394-658 AS .......................... CDC15_YEAST/25-272 CFVKNMYKRPT.....ADQLLKHVWI #=GR CDC15_YEAST/25-272 AS .......................... STE20_YEAST/620-871 CLCVEPEDRAS.....ATELLHDEYI #=GR STE20_YEAST/620-871 AS .......................... STE7_YEAST/191-466 CCIKNERERSS.....IHELLHHDLI #=GR STE7_YEAST/191-466 AS .......................... BYR1_SCHPO/66-320 CLHKDPTLRAS.....PQQLCAMPYF #=GR BYR1_SCHPO/66-320 AS .......................... MKK1_YEAST/221-488 CLKKDSRERPS.....PRQMINHPWI #=GR MKK1_YEAST/221-488 AS .......................... MOS_CERAE/60-338 CWRPSAAQRPS.....ARPLLVD..L #=GR MOS_CERAE/60-338 AS .......................... #=GR MOS_CERAE/60-338 pAS .......................... PKN1_MYXXA/59-320 ALAKKPEDRYA....SIAAFRNALQV #=GR PKN1_MYXXA/59-320 AS .......................... RAN1_SCHPO/18-295 IFDRNPKTRIT.....LPELSTL..V #=GR RAN1_SCHPO/18-295 AS .......................... HAL4_YEAST/316-590 MLDPVPYRRIN.....GKQILNSEWG #=GR HAL4_YEAST/316-590 AS .......................... NPR1_YEAST/438-742 MIDLAPACRGN.....IEEIMEDPWI #=GR NPR1_YEAST/438-742 AS .......................... KKL6_YEAST/192-508 TLTRKNQRWS......INEIYESPFV #=GR KKL6_YEAST/192-508 AS .......................... KR1_PRVKA/53-332 MLTFDPVRRPS.....ADEILNFGMW #=GR KR1_PRVKA/53-332 AS .......................... KR1_HHV11/191-478 ALTFDGALRPS.....AAELLCLPLF #=GR KR1_HHV11/191-478 AS .......................... WEE1_HUMAN/299-569 MIHPDPERRPS.....AMALVKHSVL #=GR WEE1_HUMAN/299-569 SS HT-SSGGGS--.....HHHHHT-TT- #=GR WEE1_HUMAN/299-569 AS .......................... HRR25_YEAST/9-273 CKNLKFDEKPD.......YLFLARLF #=GR HRR25_YEAST/9-273 AS .......................... #=GC SS_cons HT-SSGGGSTTTSSSSHHHHHTSGGG #=GC seq_cons hLphcPpcRho.....sppllp+sah // hmmer-3.1b2/tutorial/minifam.h3f0000664361611702660230000015301012473612615016157 0ustar wheelerteddyóææ³•globins4ÿÿÿÿ(¬Š@¾üþùþÿøüýûýþþþÿÿýýÿþþþþüüúÿüüþùÿþþþÿüþþûûþýýþÿüýÿúüýÿþüüþùþÿøüýûýþþþÿÿýýÿþþþþüüúÿüüþùÿþþþÿüþþûûþýýþÿüýÿúüýÿþüüþùþÿøüýûýþþþÿÿýýÿþþþþüüúÿüüþùÿþþþÿüþùúûøùúûøùúûø üúýù ÿþøü ÿýü þÿúúü ÿûÿúÿþÿûýù üÿû  ÿýü üúýù ÿþøü ÿýü þÿúúü ÿûÿúÿþÿûýù üÿû  ÿýü üúýù ÿþøü ÿýü þÿúúü ÿûÿúÿþÿûýþÿþþþýûûþÿüüþüÿüþýúüýüüþýýÿùýýþýúþýýþþÿÿÿýÿÿþþÿþþþýûûþÿüüþüÿüþýúüýüüþýýÿùýýþýúþýýþþÿÿÿýÿÿþþÿþþþýûûþÿüüþüÿüþýúüýüüþýýÿùýýþýûûùüû÷õÿÿö÷ýüõûûüúüûûùüû÷õÿÿö÷ýüõûûüúüûûùüû÷õÿÿö÷ýüõÿýýýýÿÿ þÿþ þûöùÿüþý þ ýÿÿýýýýÿÿ þÿþ þûöùÿüþý þ ýÿÿýýýýÿÿ þÿþ þûöùÿüüüúüúûûÿûòÿòûüûûüÿüÿúúùÿúûûûùûüüúüúûûÿûòÿòûüûûüÿüÿúúùÿúûûûùûüüúüúûûÿûòÿòûüûûüÿüÿþúýÿúÿüþÿÿþýüùÿýÿÿûûýýÿþþüýýýþýúúûþÿÿûýûþúýÿúÿüþÿÿþýüùÿýÿÿûûýýÿþþüýýýþýúúûþÿÿûýûþúýÿúÿüþÿÿþýüùÿýÿÿûûýýÿþþüýýÿüüýÿüþüúþÿýÿÿýÿøüÿüÿýüüÿÿýþýÿ÷ÿüÿùÿûûüüúùùúüúüùÿÿÿÿÿÿüüÿûýÿÿûþÿÿüüýÿüþüúþÿýÿÿýÿøüÿüÿýüüÿÿýþýÿ÷ÿüÿùÿûûüüúùùúüúüùÿÿÿÿÿÿüüÿûýÿÿûþÿÿüüýÿüþüúþÿýÿÿýÿøüÿüÿýüüÿÿýþýÿ÷ÿüÿùÿûûüüúùÿøÿþýøúûûýÿþüþÿþúûüýûúûùûÿýúÿøøüüþÿøÿþýøúûûýÿþüþÿþúûüýûúûùûÿýúÿøøüüþÿøÿþýøúûûýÿþüþÿþúûüýûúûÿÿþÿÿþþÿþùýýùÿþùþýÿÿùûþþÿüþýùýýÿÿÿýûþþþùþÿÿþÿÿþþÿþùýýùÿþùþýÿÿùûþþÿüþýùýýÿÿÿýûþþþùþÿÿþÿÿþþÿþùýýùÿþùþýÿÿùûþþÿüþýùüÿþüÿüÿÿÿýþÿüþÿÿÿüÿþûÿþÿüÿúÿÿýþÿÿÿþÿÿÿþüÿÿýÿÿÿÿüÿþüÿüÿÿÿýþÿüþÿÿÿüÿþûÿþÿüÿúÿÿýþÿÿÿþÿÿÿþüÿÿýÿÿÿÿüÿþüÿüÿÿÿýþÿüþÿÿÿüÿþûÿþÿüÿúÿÿýþÿÿÿþüùþúüûÿýúõþþþþüùþúüûÿýúõþþþþüùþúüûÿýúþúÿüþÿþþþþÿÿÿÿþÿþþûÿÿÿÿÿÿÿüÿüÿÿÿÿûÿþÿÿÿþÿÿÿÿüþþþþþÿÿÿÿÿþÿÿÿÿüÿÿÿþþÿþþÿÿûþúþúÿüþÿþþþþÿÿÿÿþÿþþûÿÿÿÿÿÿÿüÿüÿÿÿÿûÿþÿÿÿþÿÿÿÿüþþþþþÿÿÿÿÿþÿÿÿÿüÿÿÿþþÿþþÿÿûþúþúÿüþÿþþþþÿÿÿÿþÿþþûÿÿÿÿÿÿÿüÿüÿÿÿÿûÿþÿÿÿþÿÿÿÿüþþþþþÿþýüøýúÿþýüÿÿÿüÿþÿûÿÿüûüüþýüøýúÿþýüÿÿÿüÿþÿûÿÿüûüüþýüøýúÿþýüÿÿÿüÿüÿþùüýùýþþþÿúþÿÿÿüÿýýþúþþýÿûÿúüÿþùüýùýþþþÿúþÿÿÿüÿýýþúþþýÿûÿúüÿþùüýùýþþþÿúþÿÿÿüÿýýýþþ÷ÿþüýýýýûúýþýÿýûþÿùýÿýýýþþ÷ÿþüýýýýûúýþýÿýûþÿùýÿýýýþþ÷ÿþüýýýýûúýþýÿüøýøüûùúÿüÿýÿþüûþþþÿýüúüþÿúûü÷ÿüýøþúÿýüúüøýøüûùúÿüÿýÿþüûþþþÿýüúüþÿúûü÷ÿüýøþúÿýüúüøýøüûùúÿüÿýÿþüûþþþÿýüúüþÿúûüÿÿÿùïÿÿøþúÿÿÿÿùïÿÿøþúÿÿÿÿùïÿÿüüúûýüþýøüýûüóüýüüúûýüþýøüýûüóüýüüúûýüþýøüýûüüüüûþÿþûÿýÿýýÿÿüþüüÿýÿûÿþÿÿÿüÿþûýÿÿüþÿÿþýüüüûþÿþûÿýÿýýÿÿüþüüÿýÿûÿþÿÿÿüÿþûýÿÿüþÿÿþýüüüûþÿþûÿýÿýýÿÿüþüüÿýÿûÿþÿÿÿüÿþýûýÿüûüüÿúþþýÿýúüýýüûüÿûüþýþúÿûûûüýýûýÿüûüüÿúþþýÿýúüýýüûüÿûüþýþúÿûûûüýýûýÿüûüüÿúþþýÿýúüýýüûüþÿþÿýþþýÿüýÿÿýýþüÿýÿÿýüüýýüþýÿþÿûÿþÿýýþýüÿÿÿÿÿþþýþþÿÿÿÿýÿþÿýþÿþÿýþþýÿüýÿÿýýþüÿýÿÿýüüýýüþýÿþÿûÿþÿýýþýüÿÿÿÿÿþþýþþÿÿÿÿýÿþÿýþÿþÿýþþýÿüýÿÿýýþüÿýÿÿýüüýýüþýÿþÿûÿþÿýýþýÿüüýÿüþüúþÿýÿÿýÿøüÿüÿýüüÿÿýþýÿ÷ÿüÿùÿûûüüúùùúüúüùÿÿÿÿÿÿüüÿûýÿÿûþÿÿüüýÿüþüúþÿýÿÿýÿøüÿüÿýüüÿÿýþýÿ÷ÿüÿùÿûûüüúùùúüúüùÿÿÿÿÿÿüüÿûýÿÿûþÿÿüüýÿüþüúþÿýÿÿýÿøüÿüÿýüüÿÿýþýÿ÷ÿüÿùÿûûüüúùùúûøùúûøùúûø  ÿ   ÿÿÿ ÿ   ÿ ÿ  ÿ ÿ   ÿÿ ÿ ÿÿÿ ÿ ÿÿÿÿÿÿ   ÿ ÿ  ÿ  ÿ  ÿÿ ÿ  ÿ ÿ ÿÿÿ  ÿ   ÿ  ÿ ÿÿ ÿ ÿÿÿÿ ÿÿ   ÿÿÿÿ ÿ   ÿ ÿ ÿÿÿÿÿÿÿ   ÿÿÿÿÿÿ  ÿ ÿ  ÿ ÿ  ÿ  ÿ   ÿ ÿ     ÿ  ÿÿ  ÿ ÿ ÿ  ÿÿÿ ÿÿ   ÿ  ÿÿ  ÿ  ÿ   ÿ ÿÿ ÿ    ÿ   ÿ  ÿ ÿÿ ÿÿ    ÿ  ÿÿ  ÿ   ÿ  ÿ ÿ   ÿÿÿÿ  ÿ ÿÿ  ÿ  ÿÿ ÿ ÿÿ   ÿÿ ÿ  ÿ  ÿÿÿÿ ÿÿÿÿ  ÿ ÿÿ  ÿÿ ÿÿÿÿÿ  ÿÿ ÿ  ÿ ÿÿ ÿÿ ÿ  ÿÿÿ  ÿ ÿÿÿ ÿ ÿ ÿ  ÿ  ÿÿ ÿ  ÿÿ ÿÿ  ÿÿÿ ÿ  ÿÿÿÿÿ ÿÿ ÿÿÿ ÿ ÿÿ  ÿ    ÿ ÿ  ÿÿ   ÿ   ÿ ÿ  ÿ  ÿÿÿÿÿ ÿÿÿÿ ÿ ÿÿÿ ÿ ÿ  ÿ ÿ  ÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿ ÿÿ  ÿ ÿÿ ÿ ÿ ÿÿÿ ÿ ÿ    ÿ ÿÿ ÿ   ÿ  ÿ ÿ   ÿÿÿ ÿ ÿ ÿ ÿÿ ÿ ÿÿÿÿ  ÿ  ÿ   ÿ ÿÿ ÿ    ÿ   ÿ  ÿ ÿÿ ÿ ÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"lÁa¦5?óŽ+Áa¦5?=…Àa¦5?dNÀ=a1<3ÀR=Æüˆ=š%=£iG=O>=bHa=™aŸ=èÂ=ŠÐ<²F'==B='ž-=—_<=/9Ž=¿Îk=¸Ìœ=;t,™Œ=;È.M: Inactivates the protein. FT CONFLICT 392 392 V -> M (in Ref. 1; AAA28882). FT CONFLICT 663 663 A -> T (in Ref. 3; AAF47992). FT CONFLICT 1703 1703 N -> H (in Ref. 3; AAF47992). FT CONFLICT 1730 1731 RG -> KE (in Ref. 3; AAF47992). FT CONFLICT 1741 1741 V -> M (in Ref. 3; AAF47992). FT CONFLICT 1823 1823 E -> Q (in Ref. 2; CAA31960/CAB55310). FT CONFLICT 2271 2271 C -> R (in Ref. 1; AAA28882). SQ SEQUENCE 2554 AA; 287025 MW; 09E238A0F27684F8 CRC64; MTMFWQQNVD HQSDEQDKQA KGAAPTKRLN ISFNVKIAVN VNTKMTTTHI NQQAPGTSSS SSNSQNASPS KIVVRQQSSS FDLRQQLARL GRQLASGQDG HGGISTILII NLLLLILLSI CCDVCRSHNY TVHQSPEPVS KDQMRLLRPK LDSDVVEKVA IWHKHAAAAP PSIVEGIAIS SRPQSTMAHH PDDRDRDRDP SEEQHGVDER MVLERVTRDC VQRCIVEEDL FLDEFGIQCE KADNGEKCYK TRCTKGCAQW YRALKELESC QEACLSLQFY PYDMPCIGAC EMAQRDYWHL QRLAISHLVE RTQPQLERAP RADGQSTPLT IRWAMHFPEH YLASRPFNIQ YQFVDHHGEE LDLEQEDQDA SGETGSSAWF NLADYDCDEY YVCEILEALI PYTQYRFRFE LPFGENRDEV LYSPATPAYQ TPPEGAPISA PVIEHLMGLD DSHLAVHWHP GRFTNGPIEG YRLRLSSSEG NATSEQLVPA GRGSYIFSQL QAGTNYTLAL SMINKQGEGP VAKGFVQTHS ARNEKPAKDL TESVLLVGRR AVMWQSLEPA GENSMIYQSQ EELADIAWSK REQQLWLLNV HGELRSLKFE SGQMVSPAQQ LKLDLGNISS GRWVPRRLSF DWLHHRLYFA MESPERNQSS FQIISTDLLG ESAQKVGESF DLPVEQLEVD ALNGWIFWRN EESLWRQDLH GRMIHRLLRI RQPGWFLVQP QHFIIHLMLP QEGKFLEISY DGGFKHPLPL PPPSNGAGNG PASSHWQSFA LLGRSLLLPD SGQLILVEQQ GQAASPSASW PLKNLPDCWA VILLVPESQP LTSAGGKPHS LKALLGAQAA KISWKEPERN PYQSADAARS WSYELEVLDV ASQSAFSIRN IRGPIFGLQR LQPDNLYQLR VRAINVDGEP GEWTEPLAAR TWPLGPHRLR WASRQGSVIH TNELGEGLEV QQEQLERLPG PMTMVNESVG YYVTGDGLLH CINLVHSQWG CPISEPLQHV GSVTYDWRGG RVYWTDLARN CVVRMDPWSG SRELLPVFEA NFLALDPRQG HLYYATSSQL SRHGSTPDEA VTYYRVNGLE GSIASFVLDT QQDQLFWLVK GSGALRLYRA PLTAGGDSLQ MIQQIKGVFQ AVPDSLQLLR PLGALLWLER SGRRARLVRL AAPLDVMELP TPDQASPASA LQLLDPQPLP PRDEGVIPMT VLPDSVRLDD GHWDDFHVRW QPSTSGGNHS VSYRLLLEFG QRLQTLDLST PFARLTQLPQ AQLQLKISIT PRTAWRSGDT TRVQLTTPPV APSQPRRLRV FVERLATALQ EANVSAVLRW DAPEQGQEAP MQALEYHISC WVGSELHEEL RLNQSALEAR VEHLQPDQTY HFQVEARVAA TGAAAGAASH ALHVAPEVQA VPRVLYANAE FIGELDLDTR NRRRLVHTAS PVEHLVGIEG EQRLLWVNEH VELLTHVPGS APAKLARMRA EVLALAVDWI QRIVYWAELD ATAPQAAIIY RLDLCNFEGK ILQGERVWST PRGRLLKDLV ALPQAQSLIW LEYEQGSPRN GSLRGRNLTD GSELEWATVQ PLIRLHAGSL EPGSETLNLV DNQGKLCVYD VARQLCTASA LRAQLNLLGE DSIAGQLAQD SGYLYAVKNW SIRAYGRRRQ QLEYTVELEP EEVRLLQAHN YQAYPPKNCL LLPSSGGSLL KATDCEEQRC LLNLPMITAS EDCPLPIPGV RYQLNLTLAR GPGSEEHDHG VEPLGQWLLG AGESLNLTDL LPFTRYRVSG ILSSFYQKKL ALPTLVLAPL ELLTASATPS PPRNFSVRVL SPRELEVSWL PPEQLRSESV YYTLHWQQEL DGENVQDRRE WEAHERRLET AGTHRLTGIK PGSGYSLWVQ AHATPTKSNS SERLHVRSFA ELPELQLLEL GPYSLSLTWA GTPDPLGSLQ LECRSSAEQL RRNVAGNHTK MVVEPLQPRT RYQCRLLLGY AATPGAPLYH GTAEVYETLG DAPSQPGKPQ LEHIAEEVFR VTWTAARGNG APIALYNLEA LQARSDIRRR RRRRRRNSGG SLEQLPWAEE PVVVEDQWLD FCNTTELSCI VKSLHSSRLL LFRVRARSLE HGWGPYSEES ERVAEPFVSP EKRGSLVLAI IAPAAIVSSC VLALVLVRKV QKRRLRAKKL LQQSRPSIWS NLSTLQTQQQ LMAVRNRAFS TTLSDADIAL LPQINWSQLK LLRFLGSGAF GEVYEGQLKT EDSEEPQRVA IKSLRKGASE FAELLQEAQL MSNFKHENIV CLVGICFDTE SISLIMEHME AGDLLSYLRA ARATSTQEPQ PTAGLSLSEL LAMCIDVANG CSYLEDMHFV HRDLACRNCL VTESTGSTDR RRTVKIGDFG LARDIYKSDY YRKEGEGLLP VRWMSPESLV DGLFTTQSDV WAFGVLCWEI LTLGQQPYAA RNNFEVLAHV KEGGRLQQPP MCTEKLYSLL LLCWRTDPWE RPSFRRCYNT LHAISTDLRR TQMASATADT VVSCSRPEFK VRFDGQPLEE HREHNERPED ENLTLREVPL KDKQLYANEG VSRL // hmmer-3.1b2/tutorial/fn3.sto0000664361611702660230000007206212473612615015361 0ustar wheelerteddy# STOCKHOLM 1.0 #=GF ID fn3 #=GF AC PF00041.13 #=GF DE Fibronectin type III domain #=GF AU Sonnhammer ELL #=GF GA 8.0 7.2 #=GF NC 7.9 7.9 #=GF TC 8.0 7.2 #=GF SE Swissprot_feature_table #=GF TP Domain #=GF BM hmmbuild -FHMM_ls.ann SEED.ann #=GF BM hmmcalibrate --seed 0 HMM_ls #=GF BM hmmbuild -f -FHMM_fs.ann SEED.ann #=GF BM hmmcalibrate --seed 0 HMM_fs #=GF AM byscore #=GF RN [1] #=GF RM 2169613 #=GF RT Structural design and molecular evolution of a cytokine receptor #=GF RT superfamily. #=GF RA Bazan JF; #=GF RL PNAS USA 1990;87:6934-6938. #=GF RN [2] #=GF RM 7528812 #=GF RT Tracing the spread of fibronectin type III domains in bacterial #=GF RT glycohydrolases. #=GF RA Little E, Bork P, Doolittle R; #=GF RL J Mol Evol 1994;39:631-643. #=GF RC Definition of fibronectin domains #=GF RN [3] #=GF RM 2992939 #=GF RT Primary structure of human fibronectin: differential splicing #=GF RT may generate at least 10 polypeptides from a single gene. #=GF RA Kornblihtt AR, Umezawa K, Vibe-Pedersen K, Baralle FE; #=GF RL EMBO J 1985;4:1755-1759. #=GF DR INTERPRO; IPR003961; #=GF DR HOMSTRAD; fn3; #=GF DR SMART; FN3; #=GF DR SCOP; 1ttf; sf; #=GF DR PRINTS; PR00014; #=GF DR PROSITE; PDOC00214; #=GF SQ 106 #=GS TIE1_HUMAN/644-729 AC P35590.1 #=GS NCAM1_BOVIN/509-597 AC P31836.1 #=GS LAR_DROME/417-503 AC P16621.2 #=GS NGCA_CHICK/700-794 AC Q03696.2 #=GS MPSF_CHICK/499-585 AC Q02173.1 #=GS MPSF_CHICK/371-457 AC Q02173.1 #=GS MPSF_CHICK/600-684 AC Q02173.1 #=GS NRCAM_CHICK/623-709 AC P35331.1 #=GS MYPC2_CHICK/631-717 AC P16419.3 #=GS MYLK_CHICK/1318-1403 AC P11799.2 #=GS CNTN2_CHICK/602-692 AC P28685.1 #=GS MPSF_CHICK/699-785 AC Q02173.1 #=GS MPSF_CHICK/801-887 AC Q02173.1 #=GS MYPC2_CHICK/924-1006 AC P16419.3 #=GS LAR_DROME/322-404 AC P16621.2 #=GS FAS2_SCHAM/530-616 AC P22648.2 #=GS PTP69_DROME/332-425 AC P16620.2 #=GS TENA_CHICK/1227-1306 AC P10039.2 #=GS TENA_CHICK/1136-1215 AC P10039.2 #=GS TENA_HUMAN/1529-1608 AC P24821.2 #=GS TENA_CHICK/1045-1124 AC P10039.2 #=GS TENA_HUMAN/1255-1335 AC P24821.2 #=GS PTPRB_HUMAN/22-103 AC P23467.1 #=GS TIE2_HUMAN/639-724 AC Q02763.1 #=GS LAR_DROME/515-598 AC P16621.2 #=GS FINC_BOVIN/577-660 AC P07589.3 #=GS TIE1_HUMAN/446-533 AC P35590.1 #=GS PTPRK_MOUSE/290-376 AC P35822.1 #=GS TIE2_HUMAN/444-529 AC Q02763.1 #=GS TIE2_HUMAN/543-626 AC Q02763.1 #=GS 7LESS_DROVI/1917-1997 AC P20806.1 #=GS PTPRZ_HUMAN/312-401 AC P23471.3 #=GS FAS2_SCHAM/642-735 AC P22648.2 #=GS NCAM1_BOVIN/610-691 AC P31836.1 #=GS ITB4_HUMAN/1127-1208 AC P16144.4 #=GS UFO_HUMAN/327-411 AC P30530.2 #=GS KALM_CHICK/543-641 AC P33005.2 #=GS PTP10_DROME/958-1044 AC P35992.3 #=GS PTP69_DROME/236-321 AC P16620.2 #=GS NRG_DROME/917-1007 AC P20241.2 #=GS FINC_BOVIN/689-768 AC P07589.3 #=GS FINC_BOVIN/780-858 AC P07589.3 #=GS IL7RA_HUMAN/129-221 AC P16871.1 #=GS PTP10_DROME/405-485 AC P35992.3 #=GS FINC_BOVIN/1417-1499 AC P07589.3 #=GS FINC_RAT/1266-1346 AC P04937.2 #=GS FINC_BOVIN/1327-1406 AC P07589.3 #=GS TENA_CHICK/1317-1395 AC P10039.2 #=GS FINC_BOVIN/875-955 AC P07589.3 #=GS FINC_BOVIN/1511-1590 AC P07589.3 #=GS TENA_CHICK/864-945 AC P10039.2 #=GS TENA_CHICK/593-671 AC P10039.2 #=GS FINC_BOVIN/1142-1225 AC P07589.3 #=GS FINC_BOVIN/1693-1771 AC P07589.3 #=GS FINC_BOVIN/1236-1316 AC P07589.3 #=GS FINC_BOVIN/1601-1680 AC P07589.3 #=GS TENA_CHICK/1494-1571 AC P10039.2 #=GS TENA_CHICK/956-1033 AC P10039.2 #=GS TENA_CHICK/682-767 AC P10039.2 #=GS TENA_CHICK/774-853 AC P10039.2 #=GS TENA_CHICK/1406-1483 AC P10039.2 #=GS FINC_BOVIN/1782-1861 AC P07589.3 #=GS PTPRB_HUMAN/1085-1162 AC P23467.1 #=GS PTPRB_HUMAN/1173-1250 AC P23467.1 #=GS PTPRB_HUMAN/554-632 AC P23467.1 #=GS PTPRB_HUMAN/643-725 AC P23467.1 #=GS PTPRB_HUMAN/731-808 AC P23467.1 #=GS PTPRB_HUMAN/995-1074 AC P23467.1 #=GS PTPRB_HUMAN/467-543 AC P23467.1 #=GS PTPRB_HUMAN/907-984 AC P23467.1 #=GS PTPRB_HUMAN/112-192 AC P23467.1 #=GS PTPRB_HUMAN/1355-1434 AC P23467.1 #=GS PTP10_DROME/583-661 AC P35992.3 #=GS PTP10_DROME/312-394 AC P35992.3 #=GS PTP10_DROME/217-301 AC P35992.3 #=GS PTP10_DROME/123-205 AC P35992.3 #=GS EPHA2_HUMAN/329-420 AC P29317.1 #=GS EPHA1_HUMAN/333-431 AC P21709.3 #=GS EPHB2_CHICK/326-422 AC P28693.3 #=GS EPHA3_CHICK/325-421 AC P29318.1 #=GS PTP10_DROME/864-944 AC P35992.3 #=GS PTPRB_HUMAN/1261-1344 AC P23467.1 #=GS TIE1_HUMAN/545-632 AC P35590.1 #=GS 7LESS_DROME/1799-1891 AC P13368.2 #=GS PHB_ALCFA/344-418 AC P12625.1 #=GS APU_THETY/928-1009 AC P16950.1 #=GS CHIT_STRLI/142-219 AC P36909.1 #=GS CHIA1_BACCI/465-542 AC P20533.1 #=GS GUNB_CELFI/651-733 AC P26225.1 #=GS CHIX_STROI/169-240 AC Q05638.1 #=GS APU_THETY/1165-1248 AC P16950.1 #=GS KALM_CHICK/177-269 AC P33005.2 #=GS CNTN1_CHICK/799-884 AC P14781.1 #=GS CNTN2_CHICK/807-896 AC P28685.1 #=GS NRG_DROME/815-905 AC P20241.2 #=GS L1CAM_HUMAN/812-907 AC P32004.2 #=GS LAR_DROME/709-800 AC P16621.2 #=GS PTP99_DROME/171-259 AC P35832.2 #=GS EPHA2_HUMAN/436-519 AC P29317.1 #=GS LAR_DROME/909-995 AC P16621.2 #=GS NRCAM_CHICK/928-1014 AC P35331.1 #=GS EPHB2_CHICK/437-521 AC P28693.3 #=GS EPHA4_MOUSE/441-525 AC Q03137.1 #=GS ITB4_HUMAN/1220-1310 AC P16144.4 #=GS ITB4_HUMAN/1641-1728 AC P16144.4 #=GS ITB4_HUMAN/1528-1612 AC P16144.4 #=GS TENA_CHICK/1227-1306 DR PDB; 1qr4 B; 18-77; #=GS TENA_CHICK/1227-1306 DR PDB; 1qr4 A; 18-77; #=GS ITB4_HUMAN/1127-1208 DR PDB; 1qg3 B; 1127-1208; #=GS ITB4_HUMAN/1127-1208 DR PDB; 1qg3 A; 1127-1208; #=GS TENA_CHICK/1317-1395 DR PDB; 1qr4 B; 88-166; #=GS TENA_CHICK/1317-1395 DR PDB; 1qr4 A; 88-166; #=GS ITB4_HUMAN/1220-1310 DR PDB; 1qg3 B; 1220-1310; #=GS ITB4_HUMAN/1220-1310 DR PDB; 1qg3 A; 1220-1310; TIE1_HUMAN/644-729 P.PAP.RHLHAQAL...SDSEIQLTWKHPE..ALPGPISKYVVEV...QV NCAM1_BOVIN/509-597 P.SSP.SIDQVEP....YSSTAQVQFDEPEA.TGGVPILKYKAEWR...A LAR_DROME/417-503 E.SAP.RNVQVRTL...SSSTMVITWEPPE..TPNGQVTGYKV.Y...YT NGCA_CHICK/700-794 PERNP.GGVHGEGN...ETGNLVITWEPLPPQAWNAPWARYRVQWR...P MPSF_CHICK/499-585 P.GPP.TNVHASEI...SKTYVVLSWDPPV..PRGREPLTYFIEK...SM MPSF_CHICK/371-457 P.GAP.MDVKCHDA...NRDYVIVTWKPPNT.TSQNPVIGYFVDK...CE MPSF_CHICK/600-684 P.SAP.GRVVATRN...TKTSVVVQWDKPK...HEENLYGYYIDY...SV NRCAM_CHICK/623-709 P.NPP.LDLELTGQ...LERSIELSWVPGE..ENNSPITNFVIEY...ED MYPC2_CHICK/631-717 P.DPP.QSVRVTSV...GEDWAVLSWEAPPF.DGGMPITGYLMER...KK MYLK_CHICK/1318-1403 P.DPPAGTPCASDI...RSSSLTLSWYGSSY.DGGSAVQSYTVEI...WN CNTN2_CHICK/602-692 PPGPP.GGVVVRDI...GDTTVQLSWSRGF..DNHSPIARYSIEAR...T MPSF_CHICK/699-785 P.SYP.HGITLLNC...DGHSMTLGWKAPKY.SGGSPILGYYIDKR...E MPSF_CHICK/801-887 P.GPA.YDLTVCEV...RNTSLVLLWKAPVY.EGKSPITGYLVDY...KE MYPC2_CHICK/924-1006 P.GPP.QAVRVMEV...WGSNALLQWEPPKD.DGNAEISGYTVQK...AD LAR_DROME/322-404 P.TAP.TDVQISEV...TATSVRLEWSYK....GPEDLQYYVIQY...KP FAS2_SCHAM/530-616 P.SAV.LQVKMDVM...TATTVTFKFFGPGN.DGGLPTKNYAVQY...KQ PTP69_DROME/332-425 Y.DPI.FIPKVETTG.STASTITIGWNPPPP.DLIDYIQYYELIV...SE TENA_CHICK/1227-1306 E.PEV.DNLLVSDA...TPDGFRLSWTAD.....DGVFDSFVLKIR..DT #=GR TENA_CHICK/1227-1306 SS X.XXX.XXXXXXXX...XXXXXXEEEE--.....SS--SEEEEEEE..-T TENA_CHICK/1136-1215 H.PEV.GELTVSDI...TPESFNLSWTTT.....NGDFDAFTIEI...ID TENA_HUMAN/1529-1608 L.PLL.ENLTISDI...NPYGFTVSWMAS.....ENAFDSFLVTV...VD TENA_CHICK/1045-1124 E.PEL.GNLSVSET...GWDGFQLTWTAA.....DGAYENFVIQV...QQ TENA_HUMAN/1255-1335 E.VPDMGNLTVTEV...SWDALRLNWTTP.....DGTYDQFTIQV...QE PTPRB_HUMAN/22-103 AEPER.CNFTLAESK.ASSHSVSIQWRIL......GSPCNFSLIY...SS TIE2_HUMAN/639-724 P.PQP.ENIKISNI...THSSAVISWTILD....GYSISSITIRY...KV LAR_DROME/515-598 P.SQP.SNFRATDI...GETAVTLQWTKPT..HSSENIVHYELYW...ND FINC_BOVIN/577-660 T.SGP.VQVIITETP.SQPNSHPIQWSAPE....SSHISKYILRW...KP TIE1_HUMAN/446-533 P.PVPLAAPRLLTK...QSRQLVVSPLVSF..SGDGPISTVRLHYR..PQ PTPRK_MOUSE/290-376 P.PRPIAPPQLLGV...GPTYLLIQLNANSI.IGDGPIILKEVEYR...M TIE2_HUMAN/444-529 L.PKPLNAPNVIDT...GHNFAVINISSEPY.FGDGPIKSKKLLY...KP TIE2_HUMAN/543-626 L.PPP.RGLNLLPK...SQTTLNLTWQPIF..PSSEDDFYVEVERR...S 7LESS_DROVI/1917-1997 S.YAPLPPLQLIEL...NAYGMTLAWPGT.....PDALSSLTLEC...QS PTPRZ_HUMAN/312-401 S.SEP.ENVQADPE...NYTSLLVTWERPRV.VYDTMIEKFAVLY...QQ FAS2_SCHAM/642-735 T.SGT.ENEVVVSP...YPNRYELRWQVPA..DNGEPITHYSVKS...CP NCAM1_BOVIN/610-691 P.SAP.KLEGQMGE...DGNSIKVKLIKQD..DGGSPIRHYLVKYR...A ITB4_HUMAN/1127-1208 L.GAP.QNPNAKAA...GSRKIHFNWLPP.....SGKPMGYRVKY...WI #=GR ITB4_HUMAN/1127-1208 SS -.---.EEEEEEE-...STT-EEEEEE--.....SS---EEEEEE...EE UFO_HUMAN/327-411 L.GPP.ENISATR....NGSQAFVHWQEPRA.PLQGTLLGYRLAY...QG KALM_CHICK/543-641 L.AKP.ENLSASFIVQEGNITGHFSWKISKA.VLHQPMTGFQVTW...AE PTP10_DROME/958-1044 P.GRV.ERFHPTDV...QPSEINFEWSLPSS.EANGVIRQFSIAY...TN PTP69_DROME/236-321 V.PQV.SIDFAKAV...GANKIYLNWTVND...GNDPIQKFFITL...QE NRG_DROME/917-1007 P.SPV.QGLDAYPL...GSSAFMLHWKKPL..YPNGKLTGYKIYY...EE FINC_BOVIN/689-768 P.VVA.TSESVTEI...TASSFVVSWVSA.....SDTVSGFRVEY...EL FINC_BOVIN/780-858 P.DAP.PDPTVDQV...DDTSIVVRWSRP.....RAPITGYRIVY...SP IL7RA_HUMAN/129-221 P.EAP.FDLSVIYR..EGANDFVVTFNTSHLQKKYVKVLMHDVAYR..QE PTP10_DROME/405-485 P.LPV.RNLRSIND..DKTNTMIITWEADP....ASTQDEYRIVYH.ELE FINC_BOVIN/1417-1499 S.DVP.RDLEVIAA...TPTSLLISWDAP.....AVTVRYYRITY...GE FINC_RAT/1266-1346 V.PQL.TDLSFVDI...TDSSIGLRWTPLN....SSTIIGYRITV...VA FINC_BOVIN/1327-1406 L.DSP.SGIDFSDI...TANSFTVHWIAP.....RATITGYRIRHH...P TENA_CHICK/1317-1395 V.GSP.KGISFSDI...TENSATVSWTPP.....RSRVDSYRVSY...VP #=GR TENA_CHICK/1317-1395 SS -.---.SEEEEES-...-SS-EEEEEE--.....SS--SEEEEEE...EE FINC_BOVIN/875-955 KVPPP.RDLQFVEV...TDVKITIMWTPP.....ESPVTGYRVDV...IP FINC_BOVIN/1511-1590 I.DKP.SQMQVTDV...QDNSISVRWLPS.....SSPVTGYRVTT...AP TENA_CHICK/864-945 L.DAP.RNLKRVSQ...TDNSITLEWKNS.....HANIDNYRIKF...AP TENA_CHICK/593-671 V.SPP.TELTVTNV...TDKTVNLEWKHE......NLVNEYLVTY...VP FINC_BOVIN/1142-1225 PLSPP.TNLHLEAN..PDTGVLTVSWERST....TPDITGYRITT...TP FINC_BOVIN/1693-1771 V.SPP.RRARVTDA...TETTITISWRTK.....TETITGFQVDA...IP FINC_BOVIN/1236-1316 V.PPP.TDLRFTNV...GPDTMRVTWAPPS....SIELTNLLVRY...SP FINC_BOVIN/1601-1680 I.PAP.TNLKFTQV...TPTSLTAQWTAP.....NVQLTGYRVRV...TP TENA_CHICK/1494-1571 L.DAP.KDLSATEV...QSETAVITWRPP.....RAPVTDYLLTY...ES TENA_CHICK/956-1033 L.DNP.KDLEVSDP...TETTLSLRWRRP.....VAKFDRYRLTY...VS TENA_CHICK/682-767 L.PAP.EGLKFKSV...RETSVQVEWDPL.....SISFDGWELVFRNMQK TENA_CHICK/774-853 L.DAP.SQIEAKDV...TDTTALITWSKP.....LAEIEGIELTY...GP TENA_CHICK/1406-1483 L.DSP.SGLVVMNI...TDSEALATWQPA.....IAAVDNYIVSY...SS FINC_BOVIN/1782-1861 I.DAP.SNLRFLAT...TPNSLLVSWQPP.....RARITGYIIKY...EK PTPRB_HUMAN/1085-1162 P.AAV.TDLRITEN...STRHLSFRWTAS.....EGELSWYNIFL...YN PTPRB_HUMAN/1173-1250 P.ASV.SHLRGSNR..NTTDSLWFNWSPA.....SGDFDFYELIL...YN PTPRB_HUMAN/554-632 P.AQV.TDLHVANQ..GMTSSLFTNWTQA.....QGDVEFYQVLL...IH PTPRB_HUMAN/643-725 P.SSV.SGVTVNNS..GRNDYLSVSWLVA.....PGDVDNYEVTL...SH PTPRB_HUMAN/731-808 P.DKV.QGVSVSNS..ARSDYLRVSWVHA.....TGDFDHYEVTI...KN PTPRB_HUMAN/995-1074 P.ASV.QGVIADNA..YSSYSLIVSWQKA.....AGVAERYDILL...LT PTPRB_HUMAN/467-543 P.LAV.LQLRVKHA...NETSLSIMWQTP.....VAEWEKYIISL...AD PTPRB_HUMAN/907-984 P.SAV.KNIHISPN..GATDSLTVNWTPG.....GGDVDSYTVSA...FR PTPRB_HUMAN/112-192 P.PAR.FGVSKEKT...TSTGLHVWWTPS.....SGKVTSYEVQL...FD PTPRB_HUMAN/1355-1434 P.DKI.QNLHCRPQ...NSTAIACSWIPP.....DSDFDGYSIECR...K PTP10_DROME/583-661 P.NPP.RNMTIETV...RSNSVLVHWSPPE....SGEFTEYSIRYR...T PTP10_DROME/312-394 P.LRP.LNVTFDRDF.ITSNSFRVLWEAPK...GISEFDKYQVSV...AT PTP10_DROME/217-301 P.NTP.GKFIVWFR...NETTLLVLWQPPY...PAGIYTHYKVSI...EP PTP10_DROME/123-205 P.DPP.SNLSVQVR...SGKNAIILWSPPT....QGSYTAFKIKV...LG EPHA2_HUMAN/329-420 P.SAP.HYLTAVGM...GA.KVELRWTPPQD.SGGREDIVYSVTCEQCWP EPHA1_HUMAN/333-431 P.SAP.RNLSFSA....SGTQLSLRWEPPAD.TGGRQDVRYSVRC...SQ EPHB2_CHICK/326-422 P.SAP.QAV.ISSV...NETSLMLEWTPPRD.SGGREDLVYNIIC...KS EPHA3_CHICK/325-421 P.SAP.RNV.ISNI...NETSVILDWSWPLD.TGGRKDVTFNIIC...KK PTP10_DROME/864-944 P.EPI.TQLHATNI...TDTEISLRWDLP.....KGEYNDFDIAY...LT PTPRB_HUMAN/1261-1344 P.SPP.SLMSFADI...ANTSLAITWKGPP...DWTDYNDFELQW...LP TIE1_HUMAN/545-632 PLLQP.WLEGWHVE...GTDRLRVSWSLPLV.PGPLVGDGFLLRL...WD 7LESS_DROME/1799-1891 P.SPP.RNFSVRVL...SPRELEVSWLPPE..QLRSESVYYTLHW...QQ PHB_ALCFA/344-418 G.SAP.TGLAVTAT...TSTSVSLSWNAV......ANASSYGV.YR.... APU_THETY/928-1009 A.PQPITDLKAVS....GNGKVDLSWSVV......DKAVSYNI.YR...S CHIT_STRLI/142-219 P.SAP.GTPTASNI...TDTSVKLSWSAAT...DDKGVKNYDV.LR.... CHIA1_BACCI/465-542 P.SVP.GNARSTGV...TANSVTLAWNAST...DNVGVTGYNV.YN.... GUNB_CELFI/651-733 P.TTP.GTPVATGV...TTVGASLSWAAST..DAGSGVAGYEL.YR...V CHIX_STROI/169-240 P.PAPPTGLRTGSV...TATSVALSWSPV......TGATGYAV.YR.... APU_THETY/1165-1248 P.TAP.V.LQQPGI...ESSRVTLNWSPSA...DDVAIFGYEIYK...SS KALM_CHICK/177-269 P.LKPRKELKFIEL...QSGDLEVKWSSKF..NISIEPVIYVVQRR..WN CNTN1_CHICK/799-884 PTEVP.TDVSVKVL...SSSEISVSWHHVT....EKSVEGYQIRY...WA CNTN2_CHICK/807-896 PKVAP.FRVTAKAV...LSSEMDVSWEPVEQGDMTGVLLGYEIRY...WK NRG_DROME/815-905 PLDAP.TNFTMRQI..TSSTSGYMAWTPVSEESVRGHFKGYKIQT...WT L1CAM_HUMAN/812-907 P.QAI.PELEGIEI..LNSSAVLVKWRPVDLAQVKGHLRGYNVTY...WR LAR_DROME/709-800 P.GDP.QDVKATPL...NSTSIHVSWKPPLEKDRNGIIRGYHIHA...QE PTP99_DROME/171-259 P.SKP.QNLTILDV...SANSITMSWHPPK..NQNGAIAGYHVFH...IH EPHA2_HUMAN/436-519 Q.TEP.PKVRLEGR...STTSLSVSWSIPP..PQQSRVWKYEVTYR...K LAR_DROME/909-995 PGGPP.SNITIRFQ...TPDVLCVTWDPPTREHRNGIITRYDVQFH..KK NRCAM_CHICK/928-1014 P.SPP.SFLKITNP...TLDSLTLEWGSPT..HPNGVLTSYILKF...QP EPHB2_CHICK/437-521 P.SAV.SIMHQVSR...TVDSITLSWSQPD..QPNGVILDYELQY...YE EPHA4_MOUSE/441-525 P.SSI.ALVQAKEV...TRYSVALAWLEPD..RPNGVILEYEVKY...YE ITB4_HUMAN/1220-1310 P.SEP.GRLAFNVV...SSTVTQLSWAEPA..ETNGEITAYEVCY...GL #=GR ITB4_HUMAN/1220-1310 SS -.---.---EEEEE...CTTEEEEE----S..--SS---EEEEEE...EE ITB4_HUMAN/1641-1728 P.SAP.GPLVFTAL...SPDSLQLSWERPR..RPNGDIVGYLVTC...EM ITB4_HUMAN/1528-1612 P.DTP.TRLVFSAL...GPTSLRVSWQEPR...CERPLQGYSVEY...QL #=GC SS_cons -.---.CEEEEEEE...CTTEEEEEEE--S..--SS--SEEEEEEE..EE #=GC seq_cons P.ssP.pslphpsh...sssslplsWpss.....suslssYplph....p TIE1_HUMAN/644-729 AGGAG..........DPLWID...VDRP....EE.TSTIIRGL.NASTRY NCAM1_BOVIN/509-597 MGEEVW.........HSKWYD...AKEA....SMEGIVTIVGL.KPETTY LAR_DROME/417-503 TNSNQPE.......ASWNSQM...VDNS....E...LTTVSEL.TPHAIY NGCA_CHICK/700-794 LEEPGGGGP..SGGFPWAEST...VDAP....P....VVVGGL.PPFSPF MPSF_CHICK/499-585 VGSGS...........WQRVNAQVAVKS....P...RYAVFDL.AEGKPY MPSF_CHICK/371-457 VGLEN...........WVQCN...DAPV....KI.CKYPVTGL.YEGRSY MPSF_CHICK/600-684 VGSNQW........EPANHKP...INYN....R....FVVHGL.ETGEQY NRCAM_CHICK/623-709 GLHEPG.........VWHYQT...EVPG....SH..TTVQLKL.SPYVNY MYPC2_CHICK/631-717 KGSMRW.........MKLNFE...VFPD....T...TYESTKM.IEGVFY MYLK_CHICK/1318-1403 SVDNK...........WTDLT...TCRS....T...SFNVQDL.QADREY CNTN2_CHICK/602-692 LLSNKWK......QMRTNPVN...IEGN....AE..TAQVVNL.IPWMDY MPSF_CHICK/699-785 ANHKN...........WHEVNSSVISRT....I....YTVEDL.TEDAFY MPSF_CHICK/801-887 VDTED...........WITAN...EKPT....SH.RYFKVTDL.HQGHTY MYPC2_CHICK/924-1006 TRTME...........WFTVL...EHSR....PT..RCTVSEL.VMGNEY LAR_DROME/322-404 KNANQ...........AFSEI...SGII....TM..YYVVRAL.SPYTEY FAS2_SCHAM/530-616 DSQGW...........EDALN...RTWP....VD.SPYILENL.KPQTRY PTP69_DROME/332-425 SGEVPKV......IEEAIYQQ...NSRN....L...PYMFDKL.KTATDY TENA_CHICK/1227-1306 KRKSD...........PLELI...VPGH....ER..THDITGL.KEGTEY #=GR TENA_CHICK/1227-1306 SS T--EE...........EEEXX...E-TT....-S..EEEEES-.-TT-EE TENA_CHICK/1136-1215 SNRLL..........EPMEFN...ISGN....SR..TAHISGL.SPSTDF TENA_HUMAN/1529-1608 SGKLL..........DPQEFT...LSGT....QR..KLELRGL.ITGIGY TENA_CHICK/1045-1124 SDNPE..........ETWNIT...VPGG....QH..SVNVTGL.KANTPY TENA_HUMAN/1255-1335 ADQVE..........EAHNLT...VPGS....LR..SMEIPGL.RAGTPY PTPRB_HUMAN/22-103 DTLGAA.........LCPTFR...IDNT....TY..GCNLQDL.QAGTIY TIE2_HUMAN/639-724 QGKNE...........DQHVDV.KIKNA....TI.IQYQLKGL.EPETAY LAR_DROME/515-598 TYANQ...........AHHKR...ISNS....E...AYTLDGL.YPDTLY FINC_BOVIN/577-660 KNSPD..........RWKEAT...IPGH....LN..SYTIKGL.RPGVVY TIE1_HUMAN/446-533 DSTMD...........WSTIV...VDPS....E...NVTLMNL.RPKTGY PTPRK_MOUSE/290-376 T.SGS...........WTETH...AVNA....P...TYKLWHL.DPDTEY TIE2_HUMAN/444-529 VNHYE..........AWQHIQ...VTNE....I....VTLNYL.EPRTEY TIE2_HUMAN/543-626 VQKSD...........QQNIK...VPGN....LT..SVLLNNL.HPREQY 7LESS_DROVI/1917-1997 LREQ.............LQFN...VAGN....HT..QMRLAPL.QPKTRY PTPRZ_HUMAN/312-401 LDGEDQ.........TKHEFL...TDGY....QD.LGAILNNL.LPNMSY FAS2_SCHAM/642-735 VEKYDTEWR..LLPYPCQEHK...LEGQ....AT..TFQLESL.QPDTHY NCAM1_BOVIN/610-691 LSSEW...........KPEIR...LPSG....SD..HVMLKSL.DWNAEY ITB4_HUMAN/1127-1208 QGDSE..........SEAHLL...DSKV....P...SVELTNL.YPYCDY #=GR ITB4_HUMAN/1127-1208 SS TTS-G..........GG-EEE...EESS....S...EEEE-S-.-TT-EE UFO_HUMAN/327-411 QDTPE...........VLMDI...GLRQ....EV..TLELQGD.GSVSNL KALM_CHICK/543-641 VTTESRQNSL.PNSIISQSQI...LPAD....HY..VLTVPNL.RPSMLY PTP10_DROME/958-1044 INNLT...........DAGMQ...DFES....EE.AFGVIKNL.KPGETY PTP69_DROME/236-321 AGTPTF........TYHKDFI...NGSH....T...SYILDHF.KPNTTY NRG_DROME/917-1007 V.KESYVGE...RREYDPHIT...DPRV....T...RMKMAGL.KPNSKY FINC_BOVIN/689-768 SEEGD..........EPQYLD...LPST....AT..SVNIPDL.LPGRKY FINC_BOVIN/780-858 SVEGS...........STELN...LPET....AN..SVTLSDL.QPGVQY IL7RA_HUMAN/129-221 KDENK...........WTHVN...LSST....KL..TLLQRKL.QPAAMY PTP10_DROME/405-485 TFNGD...........TSTLT...TDRT....R....FTLESL.LPGRNY FINC_BOVIN/1417-1499 TGGSS..........PVQEFT...VPGS....KS..TATISGL.KPGVDY FINC_RAT/1266-1346 AGEGI..........PIFEDF...VDSS....VG..YYTVTGL.EPGIDY FINC_BOVIN/1327-1406 ENMGG..........RPREDR...VPPS....RN..SITLTNL.NPGTEY TENA_CHICK/1317-1395 ITGGT...........PNVVT...VDGS....KT..RTKLVKL.VPGVDY #=GR TENA_CHICK/1317-1395 SS TT-B-...........-EEEE...EETT....-S..EEEE-S-.-SS-EE FINC_BOVIN/875-955 VNLPGE.........HGQRLP...VSRN....T...FAEVTGL.SPGVTY FINC_BOVIN/1511-1590 KNGPG..........PSKTKT...VGPD....QT..EMTIEGL.QPTVEY TENA_CHICK/864-945 ISGGD...........HTELT...VPKGN.QATT..RATLTGL.RPGTEY TENA_CHICK/593-671 TSSGG..........LDLQFT...VPGN....QT..SATIHEL.EPGVEY FINC_BOVIN/1142-1225 TNGQQG.........YSLEEV...VHAD....QS..SCTFENL.SPGLEY FINC_BOVIN/1693-1771 ANGQT...........PIQRT...IRPD....VR..SYTITGL.QPGTDY FINC_BOVIN/1236-1316 VKNEE..........DVAELS...ISPS....DN..AVVLTNL.LPGTEY FINC_BOVIN/1601-1680 KEKTG..........PMKEIN...LAPD....SS..SVVVSGL.MVATKY TENA_CHICK/1494-1571 I.DGR...........VKEVI...LDPE....TT..SYTLTEL.SPSTQY TENA_CHICK/956-1033 P.SGK...........KNEME...IPVD....ST..SFILRGL.DAGTEY TENA_CHICK/682-767 KDDNG...........DITSS...LKRP....ET..SYMQPGL.APGQQY TENA_CHICK/774-853 KDVPG..........DRTTID...LSED....EN..QYSIGNL.RPHTEY TENA_CHICK/1406-1483 EDEP............EVTQM...VSGN....TV..EYDLNGL.RPATEY FINC_BOVIN/1782-1861 PGSPPR.........EVVPRP...RPGV....T...EATITGL.EPGTEY PTPRB_HUMAN/1085-1162 PDGNL..........QERAQV...DPLV....Q...SFSFQNL.LQGRMY PTPRB_HUMAN/1173-1250 PNGTK..........KENWKD...KDLT....E....WRFQGL.VPGRKY PTPRB_HUMAN/554-632 ENVV............IKNES...ISSE....TS..RYSFHSL.KSGSLY PTPRB_HUMAN/643-725 DGKV............VQSLV...IAKS....VR..ECSFSSL.TPGRLY PTPRB_HUMAN/731-808 KNNF............IQTKS...IPKS....EN..ECVFVQL.VPGRLY PTPRB_HUMAN/995-1074 ENGIL...........LRNTS...EPAT....TK..QHKFEDL.TPGKKY PTPRB_HUMAN/467-543 R.DLL...........LIHKS...LSKD....AK..EFTFTDL.VPGRKY PTPRB_HUMAN/907-984 H.SQK...........VDSQT...IPKH....VF..EHTFHRL.EAGEQY PTPRB_HUMAN/112-192 ENNQKIQ.......GVQIQES...TSWN....E....YTFFNL.TAGSKY PTPRB_HUMAN/1355-1434 MDTQE..........VEFSRK...LEKE....KS..LLNIMML.VPHKRY PTP10_DROME/583-661 DSEQQ...........WVRLP...SVRS....T...EADITDM.TKGEKY PTP10_DROME/312-394 TRRQS...........TVPRS...NEPV....A...FFDFRDIAEPGKTF PTP10_DROME/217-301 PDANDSV......LYVEKEGE...PPGP....A...QAAFKGL.VPGRAY PTP10_DROME/123-205 LSEASS........SYNRTFQ...VNDN....TF..QHSVKEL.TPGATY EPHA2_HUMAN/329-420 E.SGECGP.....CEASVRYS...EPPHG.LTRT..SVTVSDL.EPHMNY EPHA1_HUMAN/333-431 CQGTAQDGGPCQPCGVGVHFSPGARGLT....TP..AVHVNGL.EPYANY EPHB2_CHICK/326-422 CGSGRGAC....TRCGDNVQF...APRQLGLTEP..RIYISDL.LAHTQY EPHA3_CHICK/325-421 CGGSSKIC....EPCSDNVRF...LPRQT.GLTN.TTVTVVDL.LAHTNY PTP10_DROME/864-944 A.DNL...........LAQNM...TTRN....E....ITISDL.RPHRNY PTPRB_HUMAN/1261-1344 RDALT..........VFNPYN...NRKS....E...GRIVYGL.RPGRSY TIE1_HUMAN/545-632 GTRGQ...........ERREN...VSSP....QA.RTALLTGL.TPGTHY 7LESS_DROME/1799-1891 ELDGENVQD...RREWEAHER...RLET....AG..THRLTGI.KPGSGY PHB_ALCFA/344-418 .NGS.............KVGS...ATAT....A....YTDSGL.IAGTTY APU_THETY/928-1009 TVKGG...........LYEKI...ASNV....TQ.ITYTDTEV.TNGLKY CHIT_STRLI/142-219 .DGA.............KVAT...VTGT....T....YTDNGL.TKGTAY CHIA1_BACCI/465-542 .GAN.............LATS...VTGT....T....ATISGL.TAGTSY GUNB_CELFI/651-733 QGTTQ...........TLVGT...TTAA....A....YILRDL.TPGTAY CHIX_STROI/169-240 .DGV.............KVAT...ASGT....S....ATVTGL.TPDTAY APU_THETY/1165-1248 SETGP..........FIKIAT...VSDS....VY..NYVDTDV.VNGNVY KALM_CHICK/177-269 Q.GIHPSE.....DDATNWQT...VAQT....TD.ERVQLSDI.RASRWY CNTN1_CHICK/799-884 AHDKEA.........AAQRVQ...VSNQ....EY..STKLENL.KPNTRY CNTN2_CHICK/807-896 DGDKEE........AADRVRT...AGLV....T...SAHVTGL.NPNTKY NRG_DROME/815-905 ENEGEE.........GLREIH...VKGD....TH..NALVTQF.KPDSKN L1CAM_HUMAN/812-907 EGSQRKHSK...RHIHKDHVV...VPAN....TT..SVILSGL.RPYSSY LAR_DROME/709-800 LRDEGKGF.....LNEPFKFD...VVDT....L...EFNVTGL.QPDTKY PTP99_DROME/171-259 DNQTGVE.......IVKNSRN...SVET....LI..HFELQNL.RPYTDY EPHA2_HUMAN/436-519 KGDS.............NSYN...VRRT....EG.FSVTLDDL.APDTTY LAR_DROME/909-995 IDHGL...........GSERN...MTLR....K....AVFTNL.EENTEY NRCAM_CHICK/928-1014 INNTHEL.......GPLVEIR...IPAN....ES..SLILKNL.NYSTRY EPHB2_CHICK/437-521 KNLSE...........LNSTA...VKSP....TN..TVTVQNL.KAGTIY EPHA4_MOUSE/441-525 KDQN............ERSYR...IVRT....AA.RNTDIKGL.NPLTSY ITB4_HUMAN/1220-1310 VNDDNRP......IGPMKKVL...VDNP....KN.RMLLIENL.RESQPY #=GR ITB4_HUMAN/1220-1310 SS B-TTS-B......-S--EEEE...E--T....T-.-EEEE---.-TT--E ITB4_HUMAN/1641-1728 AQGGGP........ATAFRVD...GDSP....ES..RLTVPGL.SENVPY ITB4_HUMAN/1528-1612 LNGGE...........LHRLN...IPNP....AQ.TSVVVEDL.LPNHSY #=GC SS_cons TTTCC-B......-SGCEEEE...EETT....TS.-EEEEES-.-TT-EE #=GC seq_cons tsssp...........hpphs...lsss....p...phslpsL.pPsspY TIE1_HUMAN/644-729 LFRMR.ASI.QG....LGDWS NCAM1_BOVIN/509-597 AVRLA.ALNGKG....LGEIS LAR_DROME/417-503 TVRVQ.AYTSMG....AGPMS NGCA_CHICK/700-794 QIRVQ.AVNGAG....KGPEA MPSF_CHICK/499-585 VFRVL.SANKHG....ISDPS MPSF_CHICK/371-457 IFRVR.AVNSAG....ISRPS MPSF_CHICK/600-684 IFRVK.AVNAVG....FSENS NRCAM_CHICK/623-709 SFRVI.AVNEIG....RSQPS MYPC2_CHICK/631-717 EMRVF.AVNAIG....VSQPS MYLK_CHICK/1318-1403 KFRVR.AANVYG....ISEPS CNTN2_CHICK/602-692 EFRVL.ASNILG....VGEPS MPSF_CHICK/699-785 EFKIA.AANVVG....IGHPS MPSF_CHICK/801-887 VFKVR.AVNDAG....VGKSS MYPC2_CHICK/924-1006 RFRVY.SENVC.......GTS LAR_DROME/322-404 EFYVI.AVNNIG....RGPPS FAS2_SCHAM/530-616 NFRFA.AQNEVG....FGPWS PTP69_DROME/332-425 EFRVR.ACSDLTK..TCGPWS TENA_CHICK/1227-1306 EIELY.GVSSG.......RRS #=GR TENA_CHICK/1227-1306 SS EEEEE.EESSS.......-B- TENA_CHICK/1136-1215 IVYLY.GISHG.......FRT TENA_HUMAN/1529-1608 EVMVS.GFTQG.......HQT TENA_CHICK/1045-1124 NVTLY.GVIRG.......YRT TENA_HUMAN/1255-1335 TVTLH.GEVRG.......HST PTPRB_HUMAN/22-103 NFKII.SLDEE........RT TIE2_HUMAN/639-724 QVDIF.AENNIG....SSNPA LAR_DROME/515-598 YIWLA.ARSQRG....EGATT FINC_BOVIN/577-660 EGQLI.SVQHY......GQRE TIE1_HUMAN/446-533 SVRVQLSRPGEGG...EGAWG PTPRK_MOUSE/290-376 EIRVLLTRPGEGG...TGLPG TIE2_HUMAN/444-529 ELCVQ.LVRRGE....GGEGH TIE2_HUMAN/543-626 VVRAR..VNTKA....QGEWS 7LESS_DROVI/1917-1997 SCRLA.LAYAAT....PGAPI PTPRZ_HUMAN/312-401 VLQIV.AICTNGL...YGKYS FAS2_SCHAM/642-735 KVEVR.ATNAIG....NSVPG NCAM1_BOVIN/610-691 EVYVV.AENQQ.......GKS ITB4_HUMAN/1127-1208 EMKVC.AYGAQG....EGPYS #=GR ITB4_HUMAN/1127-1208 SS EEEEE.EEETTE....E---- UFO_HUMAN/327-411 TVCVA.AYTAAG....DGPWS KALM_CHICK/543-641 RLEVQ.VLTTGG....EGPAT PTP10_DROME/958-1044 VFKIQ.AKTAIG....FGPER PTP69_DROME/236-321 FLRIV.GKNSIG....NGQPT NRG_DROME/917-1007 RISIT.ATTKMG....EGSEH FINC_BOVIN/689-768 TVNVY.EISEE.......GEQ FINC_BOVIN/780-858 NITIY.AVEEN.......QES IL7RA_HUMAN/129-221 EIKVR.SIPDHYFKGFWSEWS PTP10_DROME/405-485 SLSVQ.AVSKK.......MES FINC_BOVIN/1417-1499 TITVY.AVTGRG....DSPAS FINC_RAT/1266-1346 DISVI.TLING.......GES FINC_BOVIN/1327-1406 VVSIV.ALNSK.......EES TENA_CHICK/1317-1395 NVNII.SVKGF.......EES #=GR TENA_CHICK/1317-1395 SS EEEEE.EEETT.......EE- FINC_BOVIN/875-955 HFKVF.AVNQG.......RES FINC_BOVIN/1511-1590 VVSVY.AQNQN.......GES TENA_CHICK/864-945 GIGVT.AVRQD.......RES TENA_CHICK/593-671 FIRVF.AILKN.......KKS FINC_BOVIN/1142-1225 NVSVY.TVKDD.......KES FINC_BOVIN/1693-1771 KIHLY.TLNDN.......ARS FINC_BOVIN/1236-1316 LVSVS.SVYEQ.......HES FINC_BOVIN/1601-1680 EVSVY.ALKDT.......LTS TENA_CHICK/1494-1571 TVKLQ.ALSRS.......MRS TENA_CHICK/956-1033 TISLV.AEKGR.......HKS TENA_CHICK/682-767 NVSLH.IVKNNTR...GPGLS TENA_CHICK/774-853 EVTLI.SRRGD.......MES TENA_CHICK/1406-1483 TLRVH.AVKDA.......QKS FINC_BOVIN/1782-1861 TIQVI.ALKNN.......QKS PTPRB_HUMAN/1085-1162 KMVIV.THSGE........LS PTPRB_HUMAN/1173-1250 VLWVV.THSGD........LS PTPRB_HUMAN/554-632 SVVVT.TVSGG.......ISS PTPRB_HUMAN/643-725 TVTIT.TRSGKYE...NHSFS PTPRB_HUMAN/731-808 SVTVT.TKSGQ........YE PTPRB_HUMAN/995-1074 KIQIL.TVSGG.......LFS PTPRB_HUMAN/467-543 MATVT.SISGD........LK PTPRB_HUMAN/907-984 QIMIA.SVSGS........LK PTPRB_HUMAN/112-192 NIAIT.AVSGG.......KRS PTPRB_HUMAN/1355-1434 LVSIK.VQSAG.......MTS PTP10_DROME/583-661 TIQVN.TVSFG.......VES PTP10_DROME/312-394 NVIVK.TVSGK.......VTS PTP10_DROME/217-301 NISVQ.TMSED.......EIS PTP10_DROME/123-205 QVQAY.TIYDG.......KES EPHA2_HUMAN/329-420 TFTVE.ARNGV........SG EPHA1_HUMAN/333-431 TFNVE.AQNGVS....GLGSS EPHB2_CHICK/326-422 TFEIQ.AVNGVTD...QSPFS EPHA3_CHICK/325-421 TFEID.AVNGVSD...LSTLS PTP10_DROME/864-944 TFTVV.VRSGTES..SVLRSS PTPRB_HUMAN/1261-1344 QFNVK.TVSGDS....WKTYS TIE1_HUMAN/545-632 QLDVQ.LYHCTL....LGPAS 7LESS_DROME/1799-1891 SLWVQ.AHATPT....KSNSS PHB_ALCFA/344-418 SYTVT.AVDPTAG...ESQPS APU_THETY/928-1009 VYAVT.AVDNDGN...ESALS CHIT_STRLI/142-219 SYSVK.ARDTADQ...TGPAS CHIA1_BACCI/465-542 TFTIK.AKDAAGN...LSAAS GUNB_CELFI/651-733 SYVVK.AKDVAGN...VSAAS CHIX_STROI/169-240 AFQVA.AVNGA.......GES APU_THETY/1165-1248 YYKVV.AVDTSY....NRTAS KALM_CHICK/177-269 QFRVA.AVNVHG....TRGFT CNTN1_CHICK/799-884 HIDVS.AFNSAG....YGPPS CNTN2_CHICK/807-896 HVSVR.AYNRAG....AGPPS NRG_DROME/815-905 YARIL.AYNGRF....NGPPS L1CAM_HUMAN/812-907 HLEVQ.AFNGRG....SGPAS LAR_DROME/709-800 SIQVA.ALTRKG....DGDRS PTP99_DROME/171-259 RVIVK.AFTTKN....EGEPS EPHA2_HUMAN/436-519 LVQVQ.ALTQEG....QGAGS LAR_DROME/909-995 IFRVR.AYTKQG....AGPFS NRCAM_CHICK/928-1014 KFYFN.AQTSV......GSGS EPHB2_CHICK/437-521 VFQVR.ARTVAG....YGRYS EPHA4_MOUSE/441-525 VFHVR.ARTAAG....YGDFS ITB4_HUMAN/1220-1310 RYTVK.ARNGAG....WGPER #=GR ITB4_HUMAN/1220-1310 SS EEEEE.EEETTE....E--BE ITB4_HUMAN/1641-1728 KFKVQ.ARTTEG....FGPER ITB4_HUMAN/1528-1612 VFRVR.AQSQEG....WGRER #=GC SS_cons EEEEE.EEETTE....E-EBE #=GC seq_cons phpVt.Ahsst.......t.S // hmmer-3.1b2/tutorial/globins45.fa0000664361611702660230000001605212473612615016257 0ustar wheelerteddy>MYG_ESCGI VLSDAEWQLVLNIWAKVEADVAGHGQDILIRLFKGHPETLEKFDKFKHLK TEAEMKASEDLKKHGNTVLTALGGILKKKGHHEAELKPLAQSHATKHKIP IKYLEFISDAIIHVLHSRHPGDFGADAQAAMNKALELFRKDIAAKYKELG FQG >MYG_HORSE GLSDGEWQQVLNVWGKVEADIAGHGQEVLIRLFTGHPETLEKFDKFKHLK TEAEMKASEDLKKHGTVVLTALGGILKKKGHHEAELKPLAQSHATKHKIP IKYLEFISDAIIHVLHSKHPGNFGADAQGAMTKALELFRNDIAAKYKELG FQG >MYG_PROGU GLSDGEWQLVLNVWGKVEGDLSGHGQEVLIRLFKGHPETLEKFDKFKHLK AEDEMRASEELKKHGTTVLTALGGILKKKGQHAAELAPLAQSHATKHKIP VKYLEFISEAIIQVLQSKHPGDFGADAQGAMSKALELFRNDIAAKYKELG FQG >MYG_SAISC GLSDGEWQLVLNIWGKVEADIPSHGQEVLISLFKGHPETLEKFDKFKHLK SEDEMKASEELKKHGTTVLTALGGILKKKGQHEAELKPLAQSHATKHKIP VKYLELISDAIVHVLQKKHPGDFGADAQGAMKKALELFRNDMAAKYKELG FQG >MYG_LYCPI GLSDGEWQIVLNIWGKVETDLAGHGQEVLIRLFKNHPETLDKFDKFKHLK TEDEMKGSEDLKKHGNTVLTALGGILKKKGHHEAELKPLAQSHATKHKIP VKYLEFISDAIIQVLQNKHSGDFHADTEAAMKKALELFRNDIAAKYKELG FQG >MYG_MOUSE GLSDGEWQLVLNVWGKVEADLAGHGQEVLIGLFKTHPETLDKFDKFKNLK SEEDMKGSEDLKKHGCTVLTALGTILKKKGQHAAEIQPLAQSHATKHKIP VKYLEFISEIIIEVLKKRHSGDFGADAQGAMSKALELFRNDIAAKYKELG FQG >MYG_MUSAN VDWEKVNSVWSAVESDLTAIGQNILLRLFEQYPESQNHFPKFKNKSLGEL KDTADIKAQADTVLSALGNIVKKKGSHSQPVKALAATHITTHKIPPHYFT KITTIAVDVLSEMYPSEMNAQVQAAFSGAFKIICSDIEKEYKAANFQG >HBA_AILME VLSPADKTNVKATWDKIGGHAGEYGGEALERTFASFPTTKTYFPHFDLSP GSAQVKAHGKKVADALTTAVGHLDDLPGALSALSDLHAHKLRVDPVNFKL LSHCLLVTLASHHPAEFTPAVHASLDKFFSAVSTVLTSKYR >HBA_PROLO VLSPADKANIKATWDKIGGHAGEYGGEALERTFASFPTTKTYFPHFDLSP GSAQVKAHGKKVADALTLAVGHLDDLPGALSALSDLHAYKLRVDPVNFKL LSHCLLVTLACHHPAEFTPAVHASLDKFFTSVSTVLTSKYR >HBA_PAGLA VLSSADKNNIKATWDKIGSHAGEYGAEALERTFISFPTTKTYFPHFDLSH GSAQVKAHGKKVADALTLAVGHLEDLPNALSALSDLHAYKLRVDPVNFKL LSHCLLVTLACHHPAEFTPAVHSALDKFFSAVSTVLTSKYR >HBA_MACFA VLSPADKTNVKAAWGKVGGHAGEYGAEALERMFLSFPTTKTYFPHFDLSH GSAQVKGHGKKVADALTLAVGHVDDMPQALSALSDLHAHKLRVDPVNFKL LSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR >HBA_MACSI VLSPADKTNVKDAWGKVGGHAGEYGAEALERMFLSFPTTKTYFPHFDLSH GSAQVKGHGKKVADALTLAVGHVDDMPQALSALSDLHAHKLRVDPVNFKL LSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR >HBA_PONPY VLSPADKTNVKTAWGKVGAHAGDYGAEALERMFLSFPTTKTYFPHFDLSH GSAQVKDHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKL LSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR >HBA2_GALCR VLSPTDKSNVKAAWEKVGAHAGDYGAEALERMFLSFPTTKTYFPHFDLSH GSTQVKGHGKKVADALTNAVLHVDDMPSALSALSDLHAHKLRVDPVNFKL LRHCLLVTLACHHPAEFTPAVHASLDKFMASVSTVLTSKYR >HBA_MESAU VLSAKDKTNISEAWGKIGGHAGEYGAEALERMFFVYPTTKTYFPHFDVSH GSAQVKGHGKKVADALTNAVGHLDDLPGALSALSDLHAHKLRVDPVNFKL LSHCLLVTLANHHPADFTPAVHASLDKFFASVSTVLTSKYR >HBA2_BOSMU VLSAADKGNVKAAWGKVGGHAAEYGAEALERMFLSFPTTKTYFPHFDLSH GSAQVKGHGAKVAAALTKAVGHLDDLPGALSELSDLHAHKLRVDPVNFKL LSHSLLVTLASHLPSDFTPAVHASLDKFLANVSTVLTSKYR >HBA_ERIEU VLSATDKANVKTFWGKLGGHGGEYGGEALDRMFQAHPTTKTYFPHFDLNP GSAQVKGHGKKVADALTTAVNNLDDVPGALSALSDLHAHKLRVDPVNFKL LSHCLLVTLALHHPADFTPAVHASLDKFLATVATVLTSKYR >HBA_FRAPO VLSAADKNNVKGIFGKISSHAEDYGAEALERMFITYPSTKTYFPHFDLSH GSAQVKGHGKKVVAALIEAANHIDDIAGTLSKLSDLHAHKLRVDPVNFKL LGQCFLVVVAIHHPSALTPEVHASLDKFLCAVGNVLTAKYR >HBA_PHACO VLSAADKNNVKGIFTKIAGHAEEYGAEALERMFITYPSTKTYFPHFDLSH GSAQIKGHGKKVVAALIEAVNHIDDITGTLSKLSDLHAHKLRVDPVNFKL LGQCFLVVVAIHHPSALTPEVHASLDKFLCAVGTVLTAKYR >HBA_TRIOC VLSANDKTNVKTVFTKITGHAEDYGAETLERMFITYPPTKTYFPHFDLHH GSAQIKAHGKKVVGALIEAVNHIDDIAGALSKLSDLHAQKLRVDPVNFKL LGQCFLVVVAIHHPSVLTPEVHASLDKFLCAVGNVLSAKYR >HBA_ANSSE VLSAADKGNVKTVFGKIGGHAEEYGAETLQRMFQTFPQTKTYFPHFDLQP GSAQIKAHGKKVAAALVEAANHIDDIAGALSKLSDLHAQKLRVDPVNFKF LGHCFLVVLAIHHPSLLTPEVHASMDKFLCAVATVLTAKYR >HBA_COLLI VLSANDKSNVKAVFAKIGGQAGDLGGEALERLFITYPQTKTYFPHFDLSH GSAQIKGHGKKVAEALVEAANHIDDIAGALSKLSDLHAQKLRVDPVNFKL LGHCFLVVVAVHFPSLLTPEVHASLDKFVLAVGTVLTAKYR >HBAD_CHLME MLTADDKKLLTQLWEKVAGHQEEFGSEALQRMFLTYPQTKTYFPHFDLHP GSEQVRGHGKKVAAALGNAVKSLDNLSQALSELSNLHAYNLRVDPANFKL LAQCFQVVLATHLGKDYSPEMHAAFDKFLSAVAAVLAEKYR >HBAD_PASMO MLTAEDKKLIQQIWGKLGGAEEEIGADALWRMFHSYPSTKTYFPHFDLSQ GSDQIRGHGKKVVAALSNAIKNLDNLSQALSELSNLHAYNLRVDPVNFKF LSQCLQVSLATRLGKEYSPEVHSAVDKFMSAVASVLAEKYR >HBAZ_HORSE SLTKAERTMVVSIWGKISMQADAVGTEALQRLFSSYPQTKTYFPHFDLHE GSPQLRAHGSKVAAAVGDAVKSIDNVAGALAKLSELHAYILRVDPVNFKF LSHCLLVTLASRLPADFTADAHAAWDKFLSIVSSVLTEKYR >HBA4_SALIR SLSAKDKANVKAIWGKILPKSDEIGEQALSRMLVVYPQTKAYFSHWASVA PGSAPVKKHGITIMNQIDDCVGHMDDLFGFLTKLSELHATKLRVDPTNFK ILAHNLIVVIAAYFPAEFTPEIHLSVDKFLQQLALALAEKYR >HBB_ORNAN VHLSGGEKSAVTNLWGKVNINELGGEALGRLLVVYPWTQRFFEAFGDLSS AGAVMGNPKVKAHGAKVLTSFGDALKNLDDLKGTFAKLSELHCDKLHVDP ENFNRLGNVLIVVLARHFSKDFSPEVQAAWQKLVSGVAHALGHKYH >HBB_TACAC VHLSGSEKTAVTNLWGHVNVNELGGEALGRLLVVYPWTQRFFESFGDLSS ADAVMGNAKVKAHGAKVLTSFGDALKNLDNLKGTFAKLSELHCDKLHVDP ENFNRLGNVLVVVLARHFSKEFTPEAQAAWQKLVSGVSHALAHKYH >HBE_PONPY VHFTAEEKAAVTSLWSKMNVEEAGGEALGRLLVVYPWTQRFFDSFGNLSS PSAILGNPKVKAHGKKVLTSFGDAIKNMDNLKTTFAKLSELHCDKLHVDP ENFKLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALAHKYH >HBB_SPECI VHLSDGEKNAISTAWGKVHAAEVGAEALGRLLVVYPWTQRFFDSFGDLSS ASAVMGNAKVKAHGKKVIDSFSNGLKHLDNLKGTFASLSELHCDKLHVDP ENFKLLGNMIVIVMAHHLGKDFTPEAQAAFQKVVAGVANALAHKYH >HBB_SPETO VHLTDGEKNAISTAWGKVNAAEIGAEALGRLLVVYPWTQRFFDSFGDLSS ASAVMGNAKVKAHGKKVIDSFSNGLKHLDNLKGTFASLSELHCDKLHVDP ENFKLLGNMIVIVMAHHLGKDFTPEAQAAFQKVVAGVANALSHKYH >HBB_EQUHE VQLSGEEKAAVLALWDKVNEEEVGGEALGRLLVVYPWTQRFFDSFGDLSN PAAVMGNPKVKAHGKKVLHSFGEGVHHLDNLKGTFAQLSELHCDKLHVDP ENFRLLGNVLVVVLARHFGKDFTPELQASYQKVVAGVANALAHKYH >HBB_SUNMU VHLSGEEKACVTGLWGKVNEDEVGAEALGRLLVVYPWTQRFFDSFGDLSS ASAVMGNPKVKAHGKKVLHSLGEGVANLDNLKGTFAKLSELHCDKLHVDP ENFRLLGNVLVVVLASKFGKEFTPPVQAAFQKVVAGVANALAHKYH >HBB_CALAR VHLTGEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLST PDAVMNNPKVKAHGKKVLGAFSDGLTHLDNLKGTFAHLSELHCDKLHVDP ENFRLLGNVLVCVLAHHFGKEFTPVVQAAYQKVVAGVANALAHKYH >HBB_MANSP VHLTPEEKTAVTTLWGKVNVDEVGGEALGRLLVVYPWTQRFFDSFGDLSS PDAVMGNPKVKAHGKKVLGAFSDGLNHLDNLKGTFAQLSELHCDKLHVDP ENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH >HBB_URSMA VHLTGEEKSLVTGLWGKVNVDEVGGEALGRLLVVYPWTQRFFDSFGDLSS ADAIMNNPKVKAHGKKVLNSFSDGLKNLDNLKGTFAKLSELHCDKLHVDP ENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH >HBB_RABIT VHLSSEEKSAVTALWGKVNVEEVGGEALGRLLVVYPWTQRFFESFGDLSS ANAVMNNPKVKAHGKKVLAAFSEGLSHLDNLKGTFAKLSELHCDKLHVDP ENFRLLGNVLVIVLSHHFGKEFTPQVQAAYQKVVAGVANALAHKYH >HBB_TUPGL VHLSGEEKAAVTGLWGKVDLEKVGGQSLGSLLIVYPWTQRFFDSFGDLSS PSAVMSNPKVKAHGKKVLTSFSDGLNHLDNLKGTFAKLSELHCDKLHVDP ENFRLLGNVLVRVLACNFGPEFTPQVQAAFQKVVAGVANALAHKYH >HBB_TRIIN VHLTPEEKALVIGLWAKVNVKEYGGEALGRLLVVYPWTQRFFEHFGDLSS ASAIMNNPKVKAHGEKVFTSFGDGLKHLEDLKGAFAELSELHCDKLHVDP ENFRLLGNVLVCVLARHFGKEFSPEAQAAYQKVVAGVANALAHKYH >HBB_COLLI VHWSAEEKQLITSIWGKVNVADCGAEALARLLIVYPWTQRFFSSFGNLSS ATAISGNPNVKAHGKKVLTSFGDAVKNLDNIKGTFAQLSELHCDKLHVDP ENFRLLGDILVIILAAHFGKDFTPECQAAWQKLVRVVAHALARKYH >HBB_LARRI VHWSAEEKQLITGLWGKVNVADCGAEALARLLIVYPWTQRFFASFGNLSS PTAINGNPMVRAHGKKVLTSFGEAVKNLDNIKNTFAQLSELHCDKLHVDP ENFRLLGDILIIVLAAHFAKDFTPDSQAAWQKLVRVVAHALARKYH >HBB1_VAREX VHWTAEEKQLICSLWGKIDVGLIGGETLAGLLVIYPWTQRQFSHFGNLSS PTAIAGNPRVKAHGKKVLTSFGDAIKNLDNIKDTFAKLSELHCDKLHVDP TNFKLLGNVLVIVLADHHGKEFTPAHHAAYQKLVNVVSHSLARRYH >HBB2_XENTR VHWTAEEKATIASVWGKVDIEQDGHDALSRLLVVYPWTQRYFSSFGNLSN VSAVSGNVKVKAHGNKVLSAVGSAIQHLDDVKSHLKGLSKSHAEDLHVDP ENFKRLADVLVIVLAAKLGSAFTPQVQAVWEKLNATLVAALSHGYF >HBBL_RANCA VHWTAEEKAVINSVWQKVDVEQDGHEALTRLFIVYPWTQRYFSTFGDLSS PAAIAGNPKVHAHGKKILGAIDNAIHNLDDVKGTLHDLSEEHANELHVDP ENFRRLGEVLIVVLGAKLGKAFSPQVQHVWEKFIAVLVDALSHSYH >HBB2_TRICR VHLTAEDRKEIAAILGKVNVDSLGGQCLARLIVVNPWSRRYFHDFGDLSS CDAICRNPKVLAHGAKVMRSIVEATKHLDNLREYYADLSVTHSLKFYVDP ENFKLFSGIVIVCLALTLQTDFSCHKQLAFEKLMKGVSHALGHGY hmmer-3.1b2/tutorial/HBB_HUMAN0000664361611702660230000000026712473612615015410 0ustar wheelerteddy>HBB_HUMAN Human beta hemoglobin. VHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKV KAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGK EFTPPVQAAYQKVVAGVANALAHKYH hmmer-3.1b2/tutorial/.dropbox.attr0000775361611702660230000000000212473610422016551 0ustar wheelerteddy{}hmmer-3.1b2/tutorial/minifam0000664361611702660230000070571212473612615015514 0ustar wheelerteddyHMMER3/e [3.0 | March 2010] NAME globins4 LENG 149 ALPH amino RF no CONS yes CS no MAP yes DATE Thu Jun 16 11:45:13 2011 NSEQ 4 EFFN 0.964844 CKSUM 2027839109 STATS LOCAL MSV -9.9014 0.70957 STATS LOCAL VITERBI -10.7224 0.70957 STATS LOCAL FORWARD -4.1637 0.70957 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.36553 4.52577 2.96709 2.70473 3.20818 3.02239 3.41069 2.90041 2.55332 2.35210 3.67329 3.19812 3.45595 3.16091 3.07934 2.66722 2.85475 2.56965 4.55393 3.62921 2.68640 4.42247 2.77497 2.73145 3.46376 2.40504 3.72516 3.29302 2.67763 2.69377 4.24712 2.90369 2.73719 3.18168 2.89823 2.37879 2.77497 2.98431 4.58499 3.61525 0.57544 1.78073 1.31293 1.75577 0.18968 0.00000 * 1 1.70038 4.17733 3.76164 3.36686 3.72281 3.29583 4.27570 2.40482 3.29230 2.54324 3.63799 3.55099 3.93183 3.61602 3.56580 2.71897 2.84104 1.67328 5.32720 4.10031 9 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03156 3.86736 4.58970 0.61958 0.77255 0.34406 1.23405 2 2.62748 4.47174 3.31917 2.82619 3.63815 3.49607 2.75382 3.03401 2.75280 2.74783 3.65114 3.24714 2.62341 3.12082 3.11124 2.79244 2.89355 1.88003 5.06315 3.77128 10 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 3 3.50771 4.88753 4.66754 4.31907 3.27776 4.35743 4.88268 2.50779 4.08449 0.57907 3.22569 4.56607 4.74802 4.37991 4.20749 3.97946 3.79191 2.62059 5.25407 4.04279 11 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 4 2.34080 4.28719 3.51550 3.22063 4.37406 3.06195 4.29366 3.74891 3.24370 3.47337 4.31943 3.39310 3.80273 3.56072 3.55390 1.08280 2.00280 3.23325 5.72380 4.49519 12 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 5 2.04218 4.87966 2.77126 1.92448 4.32563 3.33660 3.78415 3.73388 2.61886 3.34029 4.16568 2.96714 2.18012 2.94561 3.07633 2.70238 2.96803 3.36068 5.56791 4.21854 13 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 6 1.67844 4.79514 2.78469 2.00544 4.34945 2.26719 3.85010 3.76260 2.72087 3.37961 4.20641 2.99947 3.85561 3.02442 3.17766 2.68798 2.96575 3.36703 5.60901 4.27005 14 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 7 3.05756 5.63998 1.78612 1.06702 4.93093 3.31407 3.86695 4.45859 2.89031 3.95237 4.80915 2.77798 3.94091 3.03432 3.48933 2.93505 3.34810 4.02575 6.09427 4.58708 15 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 8 2.98085 4.92154 3.50401 2.91209 3.76425 3.70161 3.75301 3.57060 1.24921 3.12012 4.04714 3.32210 4.09411 3.00014 2.54951 3.05147 3.18982 3.31354 2.52964 3.70813 16 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 9 2.59353 4.69451 3.03503 2.60972 4.18917 3.33498 3.80536 3.60013 2.58953 3.21847 4.04944 3.07115 3.85428 2.20828 2.99231 2.14672 1.84753 3.23346 5.45458 4.14691 17 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 10 2.23880 4.76665 3.06952 2.55248 4.02235 3.47005 3.69787 3.40277 2.01551 2.36330 3.87991 2.51243 3.88223 2.86967 2.84293 2.72413 2.90300 3.10205 5.29826 3.99496 18 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 11 3.19694 4.48391 4.99800 4.51340 3.70437 4.59686 5.22508 1.39091 4.40799 2.19554 3.49619 4.71017 4.90059 4.67186 4.59646 3.99910 3.46528 0.94853 5.69937 4.48740 19 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 12 2.75048 4.80166 3.26496 2.66512 4.05387 3.56143 3.69034 3.41974 1.98979 2.32315 3.89028 3.13074 3.94179 2.86188 2.09152 2.81637 2.39268 3.13531 5.28085 4.01795 20 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 13 1.76333 4.59630 3.10164 2.67897 4.07335 3.31056 2.49445 3.52561 2.68943 3.16162 4.00001 3.11582 3.85067 3.04885 3.09407 2.02147 2.87931 3.16321 5.39081 4.07911 21 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 14 1.74676 4.33104 4.10096 3.58029 3.53459 3.81128 4.36357 2.24459 3.48183 1.89076 3.43717 3.84444 4.26434 3.77047 3.74451 3.15389 3.06390 1.66791 5.19600 3.98969 22 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 15 3.87954 5.13867 4.57762 4.36488 3.03765 4.09084 4.31854 3.92859 4.08791 3.26710 4.54641 4.45726 4.63521 4.45940 4.15994 4.08011 4.19741 3.82655 0.45161 3.02591 23 W - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 16 1.17729 4.26198 3.57130 3.34611 4.48932 1.56793 4.42455 3.86761 3.45066 3.59704 4.43496 3.45644 3.80449 3.71634 3.74017 2.51428 2.83714 3.30004 5.82592 4.64145 24 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 17 2.88817 5.04467 3.10563 2.67545 4.50902 3.51529 3.78021 3.92264 1.24585 3.45270 4.30607 3.14138 2.36832 2.93193 2.59730 2.90680 3.14272 3.56445 5.56837 4.31000 25 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 18 3.05146 4.52367 4.53075 4.21316 3.78794 4.02425 4.96997 2.08597 4.08612 2.42902 3.71686 4.35272 4.57557 4.42900 4.26873 3.55467 3.41034 0.71672 5.61943 4.36559 26 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15590 4.17053 2.04864 0.61958 0.77255 0.48576 0.95510 19 2.68479 4.81315 2.78148 1.93235 3.94110 2.58636 3.69416 3.47083 2.55190 3.09021 3.94228 2.95115 3.85408 2.89111 2.99210 2.72265 2.93521 3.16412 5.27296 2.55092 27 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02646 4.04109 4.76344 0.61958 0.77255 0.62497 0.76632 20 1.24956 4.17178 3.49549 3.21559 4.28754 2.96447 4.26633 3.63846 3.25854 3.38649 4.23557 3.34723 3.71824 3.55069 3.55664 1.64035 2.73156 3.12303 5.65279 4.43774 28 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02646 4.04109 4.76344 0.61958 0.77255 0.40762 1.09431 21 2.72255 5.13686 2.10819 2.30370 4.43753 3.36911 2.77903 3.91156 2.48945 3.43909 4.22575 2.32339 3.83724 2.80393 2.98938 2.68803 2.27927 3.51682 5.60972 4.20361 31 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 22 2.21080 4.24532 3.90070 3.37171 3.30266 3.69693 4.07080 2.48422 3.27322 2.39225 3.38783 3.64703 4.12115 3.55460 3.52849 3.01029 2.94053 1.60162 4.85781 2.46888 32 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 23 2.11381 5.24929 2.03303 1.80395 4.58633 2.53811 3.73176 4.06390 2.60883 3.58308 4.37935 2.82480 3.85884 2.87023 3.13981 2.74200 3.06026 3.65099 5.75543 4.32261 33 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 24 2.69793 4.94558 2.70258 1.69825 4.39821 2.33192 3.78049 3.82467 2.62191 3.41144 4.22851 2.93775 3.85955 2.93694 3.09150 2.71026 2.18745 3.43624 5.62101 4.25627 34 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 25 2.64091 4.46648 3.34374 2.80311 3.42902 3.55272 2.66869 3.00952 2.74944 2.69246 3.58308 3.23558 3.94921 3.08558 3.12525 2.23223 2.87915 2.30384 4.88555 2.76524 35 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 26 3.07955 4.81453 3.81345 3.75576 4.87199 0.38858 4.84729 4.55455 3.97697 4.16722 5.15284 3.97911 4.21424 4.27811 4.17031 3.26163 3.58377 4.02507 5.87777 4.98756 36 G - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 27 2.16793 4.55369 3.17704 2.68551 3.91033 2.58600 3.80698 3.26431 2.66700 2.95066 3.80883 3.13379 3.87025 2.29397 3.07339 2.68456 2.85627 2.26116 5.25857 3.97776 37 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 28 3.08394 5.70697 1.27203 1.41705 4.98951 3.30419 3.87667 4.52911 2.93008 4.01118 4.87370 2.76098 3.94379 3.04632 3.55249 2.94907 3.37869 4.08639 6.15417 4.62403 38 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 29 1.76617 4.35878 4.20978 3.75755 3.65097 3.82760 4.54903 1.34437 3.65633 2.37678 3.54120 3.97097 4.33490 3.95912 3.89746 3.21892 3.13305 1.99536 5.36277 4.14791 39 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 30 3.50771 4.88753 4.66754 4.31907 3.27776 4.35743 4.88268 2.50779 4.08449 0.57907 3.22569 4.56607 4.74802 4.37991 4.20749 3.97946 3.79191 2.62059 5.25407 4.04279 40 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 31 2.63708 4.40165 3.40214 2.40642 3.58812 2.72660 3.87663 2.20111 2.85018 2.60895 3.52852 3.30513 3.98299 3.17216 3.21879 2.84552 2.88143 2.06355 5.03837 3.79155 41 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 32 3.22597 5.30670 3.70127 2.96663 4.81092 3.80832 3.69259 4.13441 1.48502 3.54054 4.42172 3.33839 4.16189 2.82525 1.14663 3.21562 3.37193 3.82130 5.54647 4.41673 42 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 33 3.36628 4.68383 4.99882 4.42697 2.06890 4.59083 4.77053 2.33627 4.28908 0.99412 2.19966 4.62307 4.76452 4.32547 4.35569 3.93058 3.57915 2.50984 5.01566 3.84219 43 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 34 3.47288 4.79171 4.82535 4.38542 1.15416 4.50288 4.20156 2.57610 4.22482 1.45355 3.22283 4.42152 4.76985 4.29234 4.30249 3.88676 3.70704 2.66954 4.39362 2.81117 44 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 35 2.65839 4.46496 3.41545 2.85385 3.64696 3.58642 3.84399 2.83279 2.18115 2.24711 3.56925 3.28453 3.98061 3.10967 3.07425 2.84321 2.27492 2.19676 5.07719 3.82962 45 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 36 2.42370 4.29265 3.65100 3.28313 4.02251 3.19904 4.25767 3.19158 3.24396 3.07467 4.01896 3.47268 3.88665 3.56803 3.54322 1.18295 2.86360 2.07028 5.47846 4.22238 46 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 37 2.77111 4.43601 3.65021 3.10915 2.33610 3.72097 2.52878 2.94333 3.04157 2.60282 3.54715 3.45355 4.09642 3.32738 3.36173 2.98372 2.23948 2.73265 4.45269 2.31965 47 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 38 3.19808 4.89408 3.83898 3.72846 4.68099 3.56527 4.77204 4.31531 3.81375 3.90440 4.97374 4.00035 0.42252 4.19287 4.01617 3.37714 3.66479 3.92432 5.77417 4.80893 48 P - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 39 2.14111 4.58346 3.15322 2.15624 3.79078 3.47432 3.73889 3.17459 2.60522 2.84386 3.70482 3.10631 3.88561 2.95537 3.01841 2.72235 2.41586 2.90270 3.19793 3.86483 49 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 40 1.66569 4.24898 3.69236 3.36739 4.24142 3.10622 4.35636 3.38897 3.34246 3.26051 4.17095 3.48755 3.84083 3.65454 3.62507 2.55747 1.22235 2.98304 5.65508 4.45345 50 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 41 2.82488 4.94492 3.18760 2.63959 4.18011 3.57406 3.69030 3.57299 1.92805 2.31655 4.00764 3.11434 3.96530 1.85056 2.55448 2.85973 3.03711 3.28659 5.36701 4.08944 51 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 42 2.74539 5.05147 2.87731 1.65307 4.39051 3.44209 3.67129 3.81043 2.34559 3.35333 4.16101 2.95980 3.87889 2.80429 2.24429 2.73668 2.42635 3.44516 5.52575 4.18494 52 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 43 2.91685 4.54967 3.76391 3.24166 1.68039 3.83207 3.72103 3.03713 2.19588 2.63921 3.64111 3.54697 4.20138 3.41748 3.37368 3.11420 3.14534 2.84694 4.30193 2.17060 53 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 44 3.66462 4.98158 4.65054 4.43086 0.62638 4.26463 4.04708 3.16288 4.33328 2.46788 3.85405 4.36938 4.72336 4.42081 4.37865 3.91239 3.96938 3.17397 4.22498 2.56172 54 F - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 45 2.90232 5.41059 1.81360 1.81124 4.72322 3.32617 3.78247 4.21870 2.71272 3.72547 4.54136 2.79866 1.96715 2.93171 3.26694 2.82016 3.17430 3.79937 5.88933 4.42688 55 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 46 2.80745 5.10019 3.12719 2.54399 4.45099 3.53912 2.74851 3.86719 1.78373 3.36487 4.17040 3.03763 3.92215 2.75472 1.99957 2.27865 3.01585 3.50590 5.48668 4.19117 56 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 47 3.66462 4.98158 4.65054 4.43086 0.62638 4.26463 4.04708 3.16288 4.33328 2.46788 3.85405 4.36938 4.72336 4.42081 4.37865 3.91239 3.96938 3.17397 4.22498 2.56172 57 F - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.14278 4.17053 2.14040 0.61958 0.77255 0.48576 0.95510 48 2.80483 4.93682 2.97443 2.61597 4.46425 2.29064 3.77553 3.88892 1.32569 3.43879 4.28960 3.08144 3.92186 2.93813 2.65708 2.83452 3.08753 3.51280 5.54953 4.28942 58 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02612 4.05388 4.77622 0.61958 0.77255 0.41381 1.08214 49 2.84120 5.27435 1.68775 2.26960 4.56502 2.29088 2.42788 4.09299 2.65957 3.61371 4.42568 2.83406 3.88143 2.91339 3.18673 2.78441 3.11108 3.68635 5.76055 4.31897 59 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 50 3.50771 4.88753 4.66754 4.31907 3.27776 4.35743 4.88268 2.50779 4.08449 0.57907 3.22569 4.56607 4.74802 4.37991 4.20749 3.97946 3.79191 2.62059 5.25407 4.04279 60 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 51 2.61468 4.74454 3.06304 2.59927 4.23874 3.36063 3.77249 3.64116 1.97066 3.24726 4.06983 3.06508 3.85934 2.93448 2.88769 1.85454 2.18544 3.27080 5.46527 4.16048 61 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.14278 4.17053 2.14040 0.61958 0.77255 0.48576 0.95510 52 2.52024 4.36440 3.59984 3.36495 4.13961 3.19652 4.36705 3.28932 3.31151 3.14627 4.18808 3.54195 3.91596 3.69802 3.55893 2.72392 0.89769 2.96439 5.56121 4.35741 62 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02612 4.05388 4.77622 0.61958 0.77255 0.61280 0.78052 53 2.00421 4.83344 2.73130 1.88492 4.26314 3.29918 3.73651 3.66620 2.57043 3.27767 4.10563 2.92448 2.63274 2.89912 3.02626 2.66205 2.92354 3.29977 5.50994 4.16245 63 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02612 4.05388 4.77622 0.61958 0.77255 0.61280 0.78052 54 1.90310 4.97279 1.43756 2.34231 4.50970 3.22699 3.85915 3.88937 2.82693 3.54829 4.41303 2.87352 3.84544 3.04026 3.34422 2.73910 3.07381 3.49219 5.77029 4.37115 64 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02612 4.05388 4.77622 0.61958 0.77255 0.61280 0.78052 55 2.18533 5.05270 2.64533 1.85684 4.37424 3.35403 3.67211 3.80533 2.44339 3.36056 4.17812 2.86860 3.83643 2.12599 2.88684 2.71027 2.98051 3.43920 5.55423 4.18436 65 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02612 4.05388 4.77622 0.61958 0.77255 0.61280 0.78052 56 3.13196 4.50147 4.66344 4.09993 3.17844 4.35544 4.69477 2.10947 3.96544 1.29858 2.08362 4.35381 4.60740 4.13883 4.12558 3.68762 3.36369 1.71484 5.14632 4.04025 66 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02612 4.05388 4.77622 0.61958 0.77255 0.41381 1.08214 57 2.77518 4.88378 3.20647 2.62847 4.09102 3.55791 2.77326 3.52900 1.58122 3.10620 2.81396 3.10407 3.94154 2.84034 2.59418 2.81851 2.98957 3.23303 5.30551 4.01037 67 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 58 1.98011 4.72138 3.01521 2.62045 4.30811 2.00711 3.83054 3.71383 1.96488 3.32247 4.14606 3.07589 3.85863 2.99938 2.97459 2.67347 2.92820 3.31928 5.53681 4.23356 68 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 59 2.54030 4.60072 2.94472 2.73690 4.42083 3.17460 4.04525 3.94722 2.94189 3.56874 4.40079 2.19422 3.84825 3.25845 3.33905 1.19171 2.95793 3.45125 5.71396 4.37902 69 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 60 1.75557 4.84888 2.80316 1.94020 4.29532 3.33641 3.78242 3.70119 2.61730 3.31239 4.13736 2.97695 2.68041 2.94506 3.07337 2.69200 2.95171 3.33082 5.54442 4.20009 70 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 61 2.85477 5.35373 1.57929 2.26604 4.66713 3.36621 3.72055 4.15408 2.04941 3.64094 4.43894 2.83078 3.88141 2.28061 3.01577 2.78371 3.10598 3.73754 5.78194 4.35313 71 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 62 3.16799 4.52011 4.78339 4.28816 3.47922 4.42194 4.93953 1.93645 4.13446 1.55378 3.32483 4.50424 4.74973 4.39416 4.31418 3.81083 3.43560 1.05385 5.43415 4.23086 72 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 63 3.19706 5.30676 3.64157 2.92676 4.80642 3.78807 3.68664 4.13614 1.08610 3.54219 4.41616 3.31159 4.14417 2.81714 1.62370 3.18272 3.34782 3.81582 5.55100 4.40927 73 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 64 2.21500 4.61006 3.19001 2.65193 3.83610 2.74235 3.73692 3.23711 2.08307 2.89201 3.74894 3.11921 3.89354 2.94707 2.93126 2.73340 2.87427 2.95732 2.95066 3.88989 74 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 65 3.37985 5.12493 3.47254 3.27248 3.53947 3.73853 0.64422 4.13019 3.10958 3.58123 4.65589 3.66553 4.31229 3.64560 3.35196 3.45099 3.69774 3.85992 4.99759 3.48405 75 H - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 66 1.58696 4.27981 3.52911 3.33725 4.53096 1.13929 4.44312 3.91427 3.47264 3.64420 4.48561 3.45598 3.81284 3.73653 3.75942 2.52816 2.85748 3.33505 5.85985 4.67720 76 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 67 2.73725 4.94911 2.96864 2.01828 4.23410 3.47850 3.68174 3.57948 1.77026 3.20392 4.03909 3.00535 3.89599 2.82835 2.74783 2.75519 2.96712 2.42859 5.43164 4.11182 77 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 68 2.89057 5.08411 3.29340 2.67705 4.48072 3.60221 3.66285 3.85365 1.54699 3.35969 4.19234 3.13427 3.98596 2.79535 1.87627 2.89690 2.26116 3.51511 5.47915 4.23549 78 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 69 3.19694 4.48391 4.99800 4.51340 3.70437 4.59686 5.22508 1.39091 4.40799 2.19554 3.49619 4.71017 4.90059 4.67186 4.59646 3.99910 3.46528 0.94853 5.69937 4.48740 79 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 70 2.32126 4.41027 4.47827 3.93427 3.36487 4.17083 4.58032 1.66946 3.80682 1.34743 3.22329 4.17807 4.50608 4.04469 4.00345 3.50357 3.24275 2.01455 5.18292 4.01995 80 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 71 2.72015 5.08296 2.15356 2.32567 4.49339 2.49653 3.73723 3.95936 2.59323 3.49889 4.29385 2.16105 3.84386 2.87772 3.10241 2.69862 2.22736 3.54680 5.68118 4.27737 81 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 72 0.65703 4.36951 3.79323 3.61118 4.37675 3.18379 4.59388 3.54906 3.63596 3.41585 4.42301 3.67645 3.95223 3.95096 3.85794 2.72149 3.02015 3.15009 5.77288 4.61080 82 A - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 73 3.19852 4.53795 4.84236 4.28389 2.27629 4.42541 4.67461 2.20548 4.15265 1.15724 3.02639 4.46384 4.67035 4.26075 4.25690 3.76328 3.42741 1.71320 5.02128 3.80090 83 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 74 2.49416 4.59890 3.02649 2.65890 4.35506 2.21720 3.90927 3.79531 2.76783 3.39902 4.20284 2.16395 3.80836 3.08392 3.20503 2.03622 2.23693 3.33800 5.61329 4.30050 84 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 75 2.05794 5.23140 1.54999 2.27566 4.64482 3.30466 3.80351 4.12174 2.73241 3.66297 4.47965 2.22062 3.87908 2.95801 3.27316 2.78027 3.12135 3.69880 5.84056 4.40054 85 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 76 1.61166 4.27982 3.63832 3.17644 3.74795 2.42112 4.10689 2.08831 3.13628 2.76623 3.69806 3.45289 3.93930 3.43973 3.45294 2.73127 2.85709 2.61210 5.21491 3.99101 86 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 77 3.20496 4.55642 4.80901 4.30057 3.37932 4.44822 4.91814 2.00861 4.14433 1.22854 3.21334 4.52148 4.74969 4.36955 4.30722 3.82958 3.46407 1.29918 5.36497 4.19578 87 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 78 1.38198 4.69793 3.15559 2.76052 4.25943 3.37240 3.88748 3.57639 1.90985 3.25578 4.12914 3.18143 3.92185 3.07614 2.89280 2.76160 2.99371 3.22926 5.50610 4.23762 88 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 79 2.76909 5.01346 2.97047 2.50613 4.30707 3.47504 2.22910 3.77671 1.87688 3.31800 4.13696 3.00989 3.90535 2.82236 2.67052 2.14651 3.00284 3.42474 5.46072 4.12930 89 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.19160 4.17053 1.83934 0.61958 0.77255 0.48576 0.95510 80 3.09435 4.47804 4.58415 4.02251 3.17074 4.30410 4.64343 2.09509 3.88787 1.35628 2.06749 4.28772 4.56611 4.07866 4.06271 3.63387 3.32783 1.72694 5.12617 4.01057 90 l - - 2.68621 4.42228 2.77478 2.73126 3.46356 2.40515 3.72497 3.29357 2.67743 2.69357 4.24692 2.90349 2.73742 3.18149 2.89803 2.37889 2.77522 2.98521 4.58479 3.61506 0.23247 1.61654 4.72868 0.26932 1.44348 0.39208 1.12593 81 2.96494 5.43583 1.26091 2.27011 4.75471 3.35488 3.81425 4.25461 1.94387 3.76386 4.60077 2.84058 3.92909 2.97022 3.19724 2.88201 3.23813 3.84444 5.89623 4.45762 94 d - - 2.68621 4.42228 2.77522 2.73126 3.46356 2.40515 3.72497 3.29357 2.67743 2.69357 4.24692 2.90349 2.73742 3.18149 2.89803 2.37889 2.77478 2.98521 4.58479 3.61506 0.52346 1.78073 1.43122 0.26932 1.44348 0.48576 0.95510 82 2.74562 4.96011 2.44317 1.60882 4.43934 1.96747 3.78043 3.89296 2.67513 3.48339 4.34523 2.83919 3.80824 2.96538 3.13345 2.74076 3.06162 3.50398 5.64186 4.29291 96 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03031 3.90719 4.62954 0.61958 0.77255 0.35593 1.20572 83 2.74460 5.21822 2.23027 2.29485 4.53062 3.38085 2.57281 4.01334 1.97192 3.50733 4.28236 2.31931 3.84080 2.77738 2.90970 2.69538 2.98482 3.59939 5.64948 4.23808 97 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 84 2.77518 4.40050 3.76366 3.20346 3.22508 3.76666 2.60824 2.70447 3.02388 1.88103 2.03125 3.55532 4.13155 3.38179 3.30306 3.04627 3.00598 2.58341 4.81772 3.51032 98 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 85 2.70297 5.08812 2.76874 1.94479 4.41808 3.39611 3.65320 3.87114 2.04765 3.39565 4.17998 2.89362 2.87534 2.77791 2.85903 2.14472 2.94402 3.48013 5.56268 4.18347 99 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 86 2.04190 4.50732 3.20940 2.71638 3.85498 2.58430 3.82054 3.22830 2.71127 2.90856 2.58178 2.51993 3.86966 3.04675 3.11665 2.68218 2.84393 2.93051 5.21959 3.94521 100 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 87 2.28102 4.99235 2.86540 1.99008 4.31170 3.41473 3.65530 3.73667 1.97871 3.29595 4.09330 2.93220 3.84364 2.78720 2.83234 2.67808 2.39651 3.37112 5.48745 4.13168 101 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 88 3.47968 4.79174 4.96552 4.46369 2.09402 4.63115 4.62106 2.39202 4.31413 0.81947 2.98906 4.62247 4.82864 4.36940 4.39177 4.00871 3.70317 2.55556 4.82074 3.42905 102 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 89 2.24590 4.95821 3.08157 2.52672 4.32303 3.47380 3.65782 3.73561 1.87977 3.28025 4.08797 3.02223 3.88413 2.79150 2.10401 2.29026 2.95016 3.37817 5.45086 4.14257 103 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 90 2.18144 4.84289 2.17529 2.44774 4.30977 3.32148 3.74792 3.73513 2.58025 3.32574 4.12874 2.95701 2.57638 2.89666 3.05711 2.64021 2.31932 3.34361 5.54135 4.18481 104 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 91 3.50771 4.88753 4.66754 4.31907 3.27776 4.35743 4.88268 2.50779 4.08449 0.57907 3.22569 4.56607 4.74802 4.37991 4.20749 3.97946 3.79191 2.62059 5.25407 4.04279 105 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 92 1.61908 4.24700 3.57954 3.30978 4.43449 3.02346 4.36977 3.81415 3.36299 3.54271 4.37897 3.42766 3.78766 3.64935 3.66104 1.10025 2.80595 3.25861 5.78647 4.57415 106 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 93 2.83983 5.37184 2.02499 1.85340 4.67947 2.33239 3.72576 4.17617 2.59996 3.66499 4.45606 2.79996 3.86570 2.13524 3.13634 2.76341 3.09716 3.74900 5.81693 4.36292 107 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 94 2.69267 4.64839 3.23734 2.71746 3.87516 3.51620 3.76790 3.23374 2.00636 2.00431 3.78777 3.16977 3.93988 2.98015 2.84201 2.18270 2.93830 2.96966 5.20949 3.93586 108 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 95 3.37985 5.12493 3.47254 3.27248 3.53947 3.73853 0.64422 4.13019 3.10958 3.58123 4.65589 3.66553 4.31229 3.64560 3.35196 3.45099 3.69774 3.85992 4.99759 3.48405 109 H - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 96 0.99728 2.35263 4.14410 3.78612 4.09954 3.10355 4.52852 3.20572 3.67262 3.13354 4.06953 3.68067 3.86141 3.93046 3.86415 2.56521 2.81532 2.83240 5.56979 4.40040 110 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 97 2.68411 5.08330 2.32604 2.34205 4.38856 3.39880 2.83045 3.84745 1.98758 3.37192 4.15121 2.88512 3.82723 2.75605 2.85736 2.65932 2.31516 3.45780 5.53864 4.15400 111 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 98 2.80484 4.96288 3.06973 2.65179 4.47351 3.45448 3.77240 3.89351 1.30310 3.43952 4.28031 3.11004 3.95068 2.92536 2.62032 2.05537 3.08096 3.51581 5.56701 4.28511 112 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 99 2.99283 4.49999 4.07852 3.56084 1.94221 3.97132 2.39096 2.84229 3.42790 1.58685 3.45194 3.77479 4.32044 3.66782 3.65147 3.26863 3.22195 2.73084 4.26685 2.69158 113 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 100 2.91926 5.21314 3.25278 2.62708 4.61744 3.61373 2.62204 4.01195 1.67757 3.45918 4.27247 3.09877 3.98114 2.10195 1.96699 2.89477 3.10786 3.64749 5.52995 4.27447 116 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 101 3.19662 4.48391 4.99691 4.51237 3.70426 4.59588 5.22422 1.39437 4.40684 2.19564 3.49626 4.70922 4.89997 4.67090 4.59544 3.99813 3.46504 0.94661 5.69902 4.48692 117 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 102 2.95622 5.29664 1.14909 2.34229 4.74881 3.32628 3.93145 4.27127 2.92777 3.81552 4.67604 2.90289 2.21468 3.11102 3.47618 2.90569 3.27514 3.84533 5.93650 4.52440 118 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 103 2.73545 4.45726 3.70818 3.29077 3.67236 3.58941 4.22218 1.92363 3.19536 2.53299 3.65150 3.60711 1.54194 3.55957 3.48883 2.99020 3.06768 2.50938 5.25675 4.00214 119 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 104 2.71136 5.03275 2.93280 2.07992 4.33603 3.45462 3.63476 3.76069 1.93027 3.30067 4.09854 2.95148 3.86016 2.21209 2.71566 2.70281 2.93689 2.70757 5.47550 4.13268 120 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 105 2.98528 4.85667 3.21652 2.91031 2.89335 3.66526 3.72320 3.52422 2.94569 3.07702 4.06925 1.85829 4.14374 3.29399 3.29374 3.05553 3.25453 3.27485 4.47872 1.53302 121 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 106 3.46400 4.78153 4.84716 4.39403 1.23238 4.51751 4.25547 2.54172 4.23543 1.35484 3.17820 4.44671 4.77310 4.29963 4.31196 3.89710 3.69542 2.64552 4.45005 2.88918 122 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 107 2.93429 5.24643 3.13283 2.00461 4.65764 3.59020 3.64682 4.05154 1.47665 3.49748 4.31310 3.07366 3.98072 2.76670 1.95398 2.90214 3.12898 3.68211 5.57023 4.30587 123 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 108 3.18469 4.52632 4.82793 4.26995 2.14389 4.40585 4.64305 2.21372 4.13733 1.21403 3.03380 4.44324 4.65604 4.24696 4.24077 3.74256 3.41385 1.71701 4.99200 3.75442 124 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 109 3.41438 4.70993 5.04893 4.51836 3.21871 4.71073 5.05993 1.60681 4.34794 0.90468 3.01922 4.76098 4.89446 4.48359 4.45935 4.09339 3.64659 2.14279 5.32906 4.22624 125 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 110 1.62918 4.25890 3.52443 3.21389 4.46285 2.08385 4.30536 3.89520 3.28750 3.56245 4.36692 3.37490 3.76841 3.55962 3.62104 1.39579 2.78525 3.30742 5.78553 4.57236 126 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 111 2.15163 5.09516 2.69879 1.91867 4.39246 3.38632 2.78544 3.85145 2.46320 3.38990 4.18345 2.34224 3.84440 2.80472 2.94034 2.69506 2.96393 3.47085 5.56927 4.18147 127 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 112 1.91362 2.69496 4.29354 3.80418 3.63206 3.55211 4.44264 2.34167 3.68862 2.54686 3.56932 3.87161 4.13344 3.93035 3.88004 2.94806 2.94562 1.39010 5.22065 4.02821 128 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 113 3.35736 4.64490 5.04324 4.51934 3.30481 4.68876 5.07991 1.24213 4.35838 1.19980 3.10930 4.74783 4.89407 4.52077 4.48166 4.07304 3.59562 1.98719 5.38581 4.25821 129 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 114 2.15026 4.33197 4.49839 3.94555 3.47761 4.16982 4.58767 1.60178 3.84223 1.83873 3.35032 4.17671 4.50618 4.08081 4.04536 3.49512 3.18798 1.55662 5.22069 4.03362 130 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 115 2.60765 3.11045 2.44692 2.61713 3.78328 3.47145 2.70544 3.17099 2.61219 2.84876 3.70836 3.09707 3.88086 2.94850 3.03743 2.71369 2.85065 2.44939 5.14817 3.85078 131 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 116 2.65919 4.31630 4.05552 3.61961 3.77490 3.58602 4.45943 2.35393 3.51636 2.58444 3.68098 3.80534 4.17236 3.83559 3.77288 2.99225 1.71326 1.37604 5.40444 4.18618 132 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 117 3.25626 4.61566 4.82164 4.31203 3.29692 4.47106 4.91411 2.09194 4.14523 0.98973 3.12497 4.54192 4.75773 4.35125 4.29737 3.85461 3.51255 1.59746 5.32099 4.17329 133 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 118 1.35596 4.59862 3.15990 2.80290 3.93354 3.34760 2.37774 3.49859 2.77026 3.15238 4.03955 3.20961 3.91597 3.17258 3.12384 2.74246 2.96651 3.16138 5.31238 3.96036 134 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 119 1.68070 4.57996 3.11522 2.69441 4.07118 3.30363 2.64799 3.51996 2.70611 3.15910 3.99847 3.12527 3.84977 3.06321 3.10873 2.01880 2.87619 3.15621 5.39209 4.08411 135 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 120 2.77810 4.96889 3.06679 2.57232 4.26331 2.43465 2.19350 3.74416 2.29922 3.29173 4.11990 3.05923 3.92435 2.84608 2.05338 2.79719 3.01427 3.40041 5.42536 4.10867 136 r - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.19360 4.17053 1.82902 0.61958 0.77255 0.48576 0.95510 121 2.91731 4.49086 3.84673 3.33441 1.97901 3.85168 2.30285 2.87818 3.21059 1.91994 3.48685 3.59860 4.21175 3.48562 3.47435 3.14244 3.14796 2.74242 4.18728 2.59026 137 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 122 2.47207 4.41486 3.18333 2.97731 4.39560 1.89060 4.18091 3.87658 3.13183 3.52325 4.38572 3.28358 1.38728 3.44527 3.46827 2.61868 2.92769 3.37316 5.63514 4.45522 138 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 123 2.05007 4.64826 2.94330 2.56436 4.21483 2.22334 3.77246 3.61031 1.99795 3.23166 4.06417 3.01804 3.80164 2.94809 2.91064 2.62375 2.87331 3.22854 5.45531 4.15728 139 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 124 2.95564 5.52033 1.58995 1.36123 4.80736 3.23074 3.77373 4.32434 2.78807 3.82833 4.68307 2.69583 3.85156 2.94039 3.38067 2.83917 3.24394 3.89941 5.97849 4.47824 140 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 125 3.43014 4.79377 4.41961 4.16065 0.81827 4.08599 3.94168 2.93926 4.06474 2.27964 3.65089 4.16979 4.54276 4.19674 4.15182 3.69228 3.73192 2.93938 4.15445 2.50608 141 f - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 126 2.30196 4.23748 3.34129 3.07052 4.24739 1.85655 4.17463 3.59585 3.12812 3.33237 4.19372 3.28741 3.73510 3.44504 3.44418 2.47519 1.48689 3.12032 5.58986 4.37239 142 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 127 1.60117 4.26833 3.32665 3.04151 4.20342 3.04342 4.14954 3.51964 3.08789 3.25857 4.15082 3.28282 1.69583 3.41436 3.41080 2.50359 2.79018 3.08270 5.56177 4.33448 143 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 128 2.09416 4.86355 1.93633 2.34594 4.36134 3.23194 3.74864 3.78719 2.63597 3.38580 4.20723 2.86699 2.54616 2.91041 3.12886 2.63865 2.93330 3.38692 5.60063 4.22562 144 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 129 1.80976 4.23516 3.96947 3.56415 3.74642 3.46121 4.42479 2.29383 3.48463 2.53809 3.64787 3.72792 4.07683 3.79419 3.74101 2.88210 2.94676 1.36554 5.38824 4.16873 145 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.39126 1.12763 130 2.80302 5.26444 2.00334 2.28495 4.52316 3.37323 2.71517 4.04914 2.50881 3.55046 4.34524 2.84460 3.86605 1.82350 2.99709 2.74697 3.05069 3.64430 5.68053 4.25177 146 q - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 131 1.01128 4.25735 3.59041 3.36202 4.47549 1.87714 4.42913 3.84699 3.45765 3.58244 4.42328 3.46489 3.80605 3.72462 3.74295 2.51560 2.83638 3.28664 5.81618 4.63355 147 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 132 1.29715 4.24288 3.55730 3.25503 4.44977 1.92730 4.33024 3.87621 3.32759 3.55207 4.36044 3.39460 3.76907 3.59477 3.65033 1.86881 2.78293 3.29220 5.78160 4.57568 148 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 133 2.95397 4.34874 4.49529 3.93597 2.06030 4.06581 4.10529 2.52968 3.79135 1.64373 2.21913 4.04730 4.38049 3.92541 3.90127 3.37422 3.17955 2.48919 4.49011 2.31254 149 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 134 2.87148 5.44150 1.98118 1.74899 4.74617 3.33260 3.73791 4.25433 2.62738 3.72942 4.52187 2.07888 3.87291 2.23146 3.17389 2.78299 3.13122 3.81624 5.87307 4.40314 150 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 135 3.27331 5.22456 3.46754 3.04631 4.68046 3.71770 3.96365 4.13172 0.69147 3.63653 4.59195 3.45354 4.20521 3.14539 2.53832 3.30173 3.50915 3.82642 5.61930 4.48069 151 K - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 136 2.13728 4.25596 4.26822 3.70038 2.51560 3.93283 4.27242 2.28282 3.58922 1.68324 3.19522 3.92448 4.28790 3.80594 3.78003 3.23864 3.04401 1.82614 4.90639 3.70545 152 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 137 3.25266 4.59255 4.86528 4.29758 3.18898 4.50160 4.83534 2.17302 4.15958 1.11276 2.09173 4.53148 4.72252 4.28685 4.28308 3.84128 3.47963 1.79006 5.20435 4.12672 153 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 138 1.79466 4.79782 2.82404 1.94090 4.31166 3.30608 3.81075 3.72422 2.65702 3.33717 4.15830 2.99339 3.84716 2.97720 3.11199 2.03142 2.93949 3.33667 5.56525 4.22435 154 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 139 2.58506 4.29342 3.55405 3.00981 3.47023 2.68992 3.90060 2.80129 2.93915 2.04902 2.51305 3.37662 3.96778 3.25166 3.26632 2.35763 2.84501 2.57968 4.93542 3.70537 155 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 140 3.08583 4.40689 4.84510 4.29544 2.25790 4.37874 4.73777 1.57472 4.17210 1.94826 3.22641 4.44953 4.66205 4.33233 4.29141 3.72292 3.32617 1.35939 5.16135 3.94030 156 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 141 2.02979 2.61338 3.45168 2.91840 3.84883 3.32836 3.92100 3.21873 2.81248 2.91084 3.77423 3.27409 3.86642 3.17756 2.28029 2.17107 2.82032 2.90332 5.22633 3.98297 157 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 142 2.65037 4.69800 3.11777 2.58559 3.93396 3.48363 3.71066 2.49275 2.05906 2.95516 3.80693 2.50024 3.88815 2.89605 2.88872 2.72907 2.42763 2.99850 5.24239 3.94877 158 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 143 2.21701 4.52657 2.45380 2.75014 3.73535 3.53805 3.84294 2.86807 2.75770 2.17002 3.64455 3.21159 3.95457 3.08148 3.16791 2.80094 2.89608 2.24528 5.16549 3.89225 159 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 144 3.41438 4.70993 5.04893 4.51836 3.21871 4.71073 5.05993 1.60681 4.34794 0.90468 3.01922 4.76098 4.89446 4.48359 4.45935 4.09339 3.64659 2.14279 5.32906 4.22624 160 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 145 1.66341 4.55765 3.29747 2.78822 4.09563 3.34088 3.86205 3.44543 2.60980 3.11452 3.96692 3.19039 3.87148 3.05878 2.16675 2.67137 2.29043 3.09965 5.38848 4.12438 161 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 146 1.96741 4.60402 3.09101 2.67267 4.09875 3.30287 2.64764 3.55483 2.68845 3.18630 4.02165 3.11035 3.84730 3.04694 3.09548 1.72418 2.88008 3.18467 5.41006 4.09565 162 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 147 2.02427 4.88556 3.14956 2.70898 4.40362 3.45865 3.80224 3.73109 1.30907 3.34916 4.21424 3.15279 3.95761 2.96243 2.65527 2.83485 3.06573 3.38348 5.54009 4.27566 163 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 148 3.70647 5.07328 4.29292 4.08736 2.37118 4.18885 3.80078 3.67800 3.93734 3.05218 4.32316 4.11065 4.65987 4.16910 4.05541 3.80923 3.99693 3.56378 4.02310 0.58497 164 Y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.19360 4.17053 1.82902 0.61958 0.77255 0.48576 0.95510 149 2.92198 5.11574 3.28049 2.65489 4.47826 3.59727 2.51142 3.88373 1.57593 3.35205 4.19259 3.10178 3.96579 2.72398 1.84611 2.91372 3.10363 3.55066 5.42147 4.18835 165 k - - 2.68634 4.42241 2.77536 2.73098 3.46370 2.40469 3.72511 3.29370 2.67757 2.69331 4.24706 2.90363 2.73756 3.18097 2.89817 2.37903 2.77536 2.98535 4.58493 3.61418 0.22163 1.61553 * 1.50361 0.25145 0.00000 * // HMMER3/e [3.0 | March 2010] NAME fn3 ACC PF00041.13 DESC Fibronectin type III domain LENG 86 ALPH amino RF no CONS yes CS yes MAP yes DATE Thu Jun 16 11:48:22 2011 NSEQ 106 EFFN 11.415833 CKSUM 3564431818 GA 8.00 7.20 TC 8.00 7.20 NC 7.90 7.90 STATS LOCAL MSV -9.4043 0.71847 STATS LOCAL VITERBI -9.7737 0.71847 STATS LOCAL FORWARD -3.8341 0.71847 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.70330 4.91262 3.03272 2.64079 3.60307 2.84344 3.74204 3.07942 2.79841 2.65364 4.14864 2.95826 2.87120 3.02176 2.96125 2.44783 2.59757 2.57680 4.02726 3.21526 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.00000 * 1 3.16986 5.21447 4.52134 3.29953 4.34285 4.18764 4.30886 3.35801 3.70246 2.11675 4.32057 4.32984 0.76706 3.91880 4.22437 3.23552 3.21670 2.88223 5.80355 3.93889 1 p - - 2.68629 4.42236 2.77530 2.73088 3.46365 2.40512 3.72505 3.29365 2.67737 2.69316 4.24701 2.90358 2.73734 3.18157 2.89812 2.37898 2.77517 2.98515 4.58488 3.61514 0.09796 2.38361 6.81068 0.10064 2.34607 0.48576 0.95510 2 2.70230 5.97353 2.24744 2.62947 5.31433 2.60356 4.43584 4.79731 3.17221 2.95090 5.01531 3.26630 2.09873 3.30219 3.34190 1.45782 3.14099 3.57507 6.40877 4.25623 3 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 3 1.38116 5.98285 3.50784 2.54546 5.32790 3.48945 4.43311 4.81385 2.38773 3.98773 5.02352 3.27895 1.92260 2.69012 2.96119 2.64228 3.29228 3.29618 6.41555 4.20553 4 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 4 3.32856 5.10403 4.47046 4.60386 4.23079 4.75438 5.09647 2.69918 4.46632 2.97102 4.23502 4.77984 0.63388 4.68581 3.76781 4.05413 3.46306 2.04533 5.75329 4.56372 5 P - - 2.68616 4.42236 2.77530 2.73134 3.46365 2.40523 3.72505 3.29295 2.67751 2.69303 4.24634 2.90357 2.73739 3.18157 2.89783 2.37897 2.77530 2.98529 4.58488 3.61514 0.09682 2.39494 6.81068 0.10162 2.33687 0.48576 0.95510 5 2.95325 4.65976 3.57762 2.20709 3.14816 2.51487 3.41109 4.78902 2.65862 3.19599 4.41042 3.45032 3.44719 2.43205 2.26492 2.25400 2.23196 3.66828 4.80003 4.52485 7 e - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01246 6.08833 4.59386 0.61958 0.77255 0.48576 0.95510 6 2.74215 5.97618 2.19482 2.69150 4.58171 2.33553 3.83525 3.28222 2.95080 3.32698 5.01691 1.45822 3.52462 2.79670 2.90942 3.13467 3.27956 4.36668 6.40902 3.92307 8 n - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00341 6.07928 6.80162 0.61958 0.77255 0.44282 1.02784 7 3.32507 4.98102 3.78072 3.31043 2.85257 4.76439 5.09585 2.50332 4.69760 1.03851 3.36125 4.91001 2.73206 4.83820 4.72389 4.07376 3.83146 1.59790 5.60385 4.42704 9 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03752 6.08833 3.36505 0.61958 0.77255 0.48576 0.95510 8 3.15997 4.90658 3.35204 2.72775 4.53493 3.60960 2.65074 3.69535 2.11078 4.01384 4.99896 3.14668 4.61695 2.40643 2.34723 1.92358 2.03982 3.05153 6.39127 4.98082 10 s - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00349 6.05430 6.77664 0.61958 0.77255 0.35749 1.20207 9 1.76295 3.98252 5.55061 4.93551 2.13202 3.39992 5.09294 2.14638 4.23898 2.23988 3.42109 4.92079 4.39252 3.70640 3.99349 3.50811 3.63432 1.47830 4.51148 4.41177 11 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 10 3.01387 4.98892 2.91217 2.42744 5.22342 4.00576 3.74074 2.67275 2.47618 2.92529 3.89570 3.36720 4.15809 3.26810 2.80854 1.81572 2.02040 2.77133 4.92415 4.31555 12 s - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 11 2.41247 5.98374 2.24093 2.04842 3.41543 2.59695 4.10033 4.81544 3.05501 4.28918 5.02429 2.22829 2.90635 3.12939 3.01921 2.37278 3.01194 3.02522 6.41619 3.66635 13 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06784 6.08833 2.75947 0.61958 0.77255 0.48576 0.95510 12 2.77725 4.36386 3.23435 2.92496 4.75140 4.31852 4.53101 1.91389 3.01135 2.51491 3.47932 2.97934 3.54432 2.88257 2.68923 3.07794 2.71169 1.80880 6.06849 4.75973 14 v - E 2.68623 4.42259 2.77533 2.73059 3.46323 2.40500 3.72529 3.29333 2.67757 2.69369 4.24724 2.90364 2.73744 3.18108 2.89835 2.37891 2.77531 2.98493 4.58511 3.61510 0.22113 1.62346 6.74643 0.44471 1.02446 0.29166 1.37446 13 3.17575 5.97994 3.10322 2.84738 5.32369 2.00173 4.43389 4.80873 3.01150 3.75019 4.42663 2.23751 4.64014 2.74467 2.85546 1.99984 1.67133 4.36987 5.08444 3.58488 18 t - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 14 2.14203 5.98483 2.53686 2.20884 5.33077 2.76253 3.61799 4.81737 2.91636 3.96256 5.02525 2.79307 2.44932 3.35978 3.34773 1.76758 2.51815 4.12754 4.53404 4.35768 19 s - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02274 6.08833 3.90154 0.61958 0.77255 0.48576 0.95510 15 3.45984 5.96297 2.32904 2.98671 5.30486 3.14893 3.59992 3.68067 2.95954 4.26690 5.00447 2.01875 4.62814 3.51950 2.89162 1.97303 1.47565 3.87160 6.39755 3.59993 20 t - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00344 6.06904 6.79138 0.61958 0.77255 0.40302 1.10352 16 2.82603 5.98256 2.96292 2.53617 4.39559 3.14388 4.09532 4.81336 2.59005 4.28779 5.02326 3.12547 4.63955 2.76620 3.03618 1.28432 2.14874 3.55065 4.82032 3.29405 21 s - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 17 2.29842 4.96481 5.56794 4.95172 2.45211 3.33868 4.31545 1.97312 4.73378 1.34355 2.88087 4.92903 5.12608 4.86259 4.73754 4.07438 3.55674 1.71344 5.58685 3.78328 22 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 18 2.99930 4.68496 3.44656 2.53427 3.92510 4.04338 3.13178 3.10095 3.07007 2.68343 3.58599 3.17010 4.15335 2.63450 2.71950 2.30083 2.03779 2.23518 4.92400 3.84991 23 t - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 19 3.61302 4.50726 5.99163 5.39935 2.74200 5.23506 5.61087 1.85210 5.20622 1.10188 3.56291 5.40353 5.56305 5.33364 5.22134 4.56441 3.85751 1.20867 6.05610 4.88933 24 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 20 2.90508 5.98486 3.37356 2.37027 5.33083 3.46854 3.40789 4.81743 2.65230 3.22177 4.17825 2.67373 4.63906 2.52648 2.39431 1.50547 2.16764 4.37598 5.01440 5.00552 25 s - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 21 5.54218 6.63564 6.83891 6.61797 2.57168 6.35073 5.30532 3.96643 6.37377 3.18917 5.26281 6.07009 4.35269 6.11992 6.21105 5.74680 5.75143 4.86346 0.24436 3.66807 26 W - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 22 3.10862 5.98423 2.61761 2.10221 4.46995 3.93009 3.84182 3.79843 2.19229 3.09373 4.47555 2.66452 4.06864 2.59255 2.99987 1.99073 2.05618 3.67318 6.41655 4.47364 27 s - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 23 2.05280 5.87614 3.77610 2.63103 5.17655 3.25143 3.55897 3.09279 2.68152 3.35866 4.92882 3.43937 1.44938 3.29932 2.98336 2.85751 2.78420 3.02863 4.43359 4.47040 28 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 24 2.65644 5.88726 3.37601 2.96202 5.19190 3.53629 4.46143 4.20046 2.87295 2.91429 4.93884 3.27084 1.07653 3.39095 3.69926 2.07705 3.29723 2.92337 6.34501 4.95985 29 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.32165 6.08833 1.29911 0.61958 0.77255 0.48576 0.95510 25 2.44244 5.77880 2.64467 2.21733 3.20572 3.66340 3.27861 4.60939 2.17717 2.95495 4.81953 3.17778 2.62084 2.96028 2.64039 2.55818 2.51134 3.52175 6.21164 4.20060 30 k - S 2.68557 4.42278 2.77404 2.73101 3.46370 2.40555 3.72548 3.29364 2.67779 2.69337 4.24743 2.90378 2.73741 3.18051 2.89835 2.37928 2.77557 2.98526 4.58530 3.61392 1.12909 0.74203 1.60680 0.24883 1.51281 1.67198 0.20810 26 2.76497 5.64634 2.06362 2.44254 4.06108 3.91520 3.28362 3.73992 2.46695 3.95074 4.68755 2.93859 2.87257 2.71813 3.08100 2.16767 2.28242 3.00778 6.08028 4.00221 33 d - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00580 5.54941 6.27176 0.61958 0.77255 1.23854 0.34222 27 2.94904 4.81418 2.88265 2.99332 4.83563 1.49306 3.87927 3.68299 2.59086 2.53757 4.07313 2.89409 2.92833 3.04624 2.88166 2.82744 3.22994 3.21444 4.18838 4.04981 34 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00508 5.68074 6.40309 0.61958 0.77255 0.20085 1.70396 28 2.96588 5.95917 2.45759 2.65943 5.30490 1.91234 3.11781 3.44164 2.78003 4.01788 4.99965 2.12379 3.26764 2.84040 2.87160 2.26272 3.15721 3.84740 4.86821 3.64128 35 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00351 6.05095 6.77330 0.61958 0.77255 0.34864 1.22298 29 2.45969 5.96445 2.88574 2.61716 5.30131 1.53630 4.43818 3.46883 2.98393 3.60366 4.33332 3.25719 4.28257 3.08417 2.40821 2.08539 3.20111 2.81105 6.40207 4.25093 36 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 30 2.71563 5.98438 2.50720 1.96228 5.33013 3.47246 3.38617 3.68065 2.34086 4.03521 4.36775 3.08029 1.87041 2.90329 3.33287 2.70645 2.77558 2.97286 6.41666 4.17777 37 p - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 31 3.04837 4.96747 2.67316 4.92527 2.42064 4.14655 5.09097 1.34551 4.71334 2.18068 3.34829 4.91585 3.31178 4.15082 4.72663 3.69906 3.53551 1.88881 3.93067 3.04034 38 i - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 32 2.89418 4.58676 2.12720 2.65970 3.99748 4.30700 4.50689 3.12934 2.75241 2.32504 4.34805 3.25317 4.69765 2.93544 2.97945 2.48570 1.85268 2.60501 5.05387 4.40931 39 t - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 33 3.05045 5.96458 3.15002 2.79713 4.16491 1.56242 3.20986 4.07540 2.34002 3.77648 3.66616 2.65073 4.64351 3.21500 2.62101 2.34442 2.98761 3.25677 5.04578 3.36446 40 g - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 34 4.72855 5.99332 6.32397 5.91516 1.75259 5.71064 3.47111 3.64093 3.68669 3.44300 5.13564 5.60513 6.03397 5.64902 5.63703 5.05114 4.95149 3.46344 3.97019 0.49348 41 Y - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 35 3.03913 5.98101 2.74983 1.95825 3.75604 3.98121 3.78677 3.48894 2.41418 2.89991 5.02189 2.66693 4.63989 2.65222 2.20113 2.26435 2.64729 3.16844 6.41420 3.93691 42 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 36 3.75576 5.90373 6.92143 6.48083 5.27028 6.48043 7.33031 1.16190 6.46559 1.72148 4.18143 6.65320 6.63807 6.70678 6.63399 5.94811 5.00240 0.82398 7.51298 6.31097 43 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04904 6.08833 3.08806 0.61958 0.77255 0.48576 0.95510 37 2.63429 4.71789 2.89387 2.04081 4.17861 4.22097 3.38514 2.92734 2.36124 3.26230 4.97143 3.69265 4.61418 2.27063 2.38238 2.70982 2.11937 3.37005 6.36711 3.73375 44 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00353 6.04282 6.76517 0.61958 0.77255 0.32899 1.27173 38 3.00800 2.48193 5.53105 4.91728 2.98458 4.75707 4.15268 2.83469 3.12355 2.32451 4.08737 4.91198 5.12099 4.84273 3.46182 3.58557 3.26283 2.28912 2.64554 1.29971 45 y - E 2.68641 4.42053 2.77543 2.73091 3.46377 2.40536 3.72420 3.29377 2.67764 2.69378 4.24582 2.90336 2.73763 3.18113 2.89660 2.37910 2.77543 2.98542 4.58500 3.61526 0.12278 2.16768 6.81068 0.54422 0.86820 0.48576 0.95510 39 2.52553 4.02469 3.60093 2.65311 4.18239 3.63052 4.17989 3.44209 2.14970 3.12319 4.96260 3.43770 4.02454 2.12722 2.15391 2.32250 3.25888 3.40611 2.73453 3.57446 49 q - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02932 6.08833 3.62591 0.61958 0.77255 0.48576 0.95510 40 2.85303 5.96779 2.74660 1.91867 5.31393 3.60453 3.59476 4.33679 2.36399 3.57280 3.62613 2.83996 2.06170 2.51716 3.24767 2.43993 2.61505 3.39964 6.39984 4.98824 50 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00347 6.06248 6.78482 0.61958 0.77255 0.67944 0.70705 41 2.55267 3.11480 2.72137 2.31006 5.21613 3.67111 4.08491 3.18721 2.11932 2.73126 3.73119 3.72342 3.44703 2.78931 3.31632 2.60923 2.50487 2.33623 6.34948 4.95631 51 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09789 6.06248 2.39773 0.61958 0.77255 0.38130 1.14877 42 3.41114 5.92195 2.00739 2.51445 4.35946 1.85149 4.04885 4.75310 3.02073 3.41727 4.96259 1.88803 4.57836 2.81891 2.77402 2.53317 2.79169 3.60394 6.35459 4.48731 52 g - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00370 5.99676 6.71911 0.61958 0.77255 0.25112 1.50474 43 2.89692 5.98568 2.39354 2.04021 5.33202 2.12548 3.27810 4.81889 2.36649 3.39071 4.58505 2.82477 4.63888 2.99231 3.02264 2.04514 2.45319 3.82791 6.41761 5.00590 53 e - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 44 3.10206 5.95088 3.50928 2.19657 4.70794 1.83640 4.44201 3.85177 2.81849 3.20653 3.64542 2.17673 2.82486 2.50236 3.67274 2.64718 2.71954 3.18909 6.39210 3.73228 54 g - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08059 6.08833 2.58819 0.61958 0.77255 0.48576 0.95510 45 2.83017 5.93388 2.31048 1.94273 5.28007 2.46456 3.60606 4.35357 2.35448 2.95362 4.97424 3.06816 3.41033 2.69285 2.84649 2.21743 2.98206 3.67978 4.23187 4.95426 55 e - C 2.68733 4.40831 2.77609 2.73043 3.46444 2.40393 3.72592 3.29278 2.67833 2.69426 4.24827 2.90407 2.73626 3.18024 2.89744 2.37952 2.77650 2.98614 4.58019 3.61570 1.45631 0.90375 1.01651 1.51529 0.24813 0.96821 0.47765 46 2.32839 5.42660 2.93163 2.28220 4.02543 3.04571 3.03894 3.22247 2.82753 3.21315 3.89864 3.49093 2.50859 3.14260 2.89921 2.69284 3.05772 2.38519 4.38264 3.20345 66 e - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00571 5.56406 6.28641 0.61958 0.77255 0.18459 1.78051 47 2.69465 3.91083 2.42967 2.34662 4.43247 3.13708 3.62175 3.49809 2.56727 2.84127 4.03266 3.52527 3.00745 3.22895 3.52756 2.46523 2.69768 3.11906 2.19019 4.92515 67 w - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00353 6.04443 6.76678 0.61958 0.77255 0.33269 1.26228 48 2.67627 5.86490 3.17099 3.22595 3.40616 4.27494 3.15476 3.07365 2.21494 2.78239 4.39426 2.30764 3.56160 2.19351 2.71433 2.94392 2.62330 2.55032 5.16850 4.37026 68 q - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 49 3.05871 5.98132 3.36643 1.71285 5.32569 3.90513 2.27648 4.25125 2.92072 4.28630 4.28595 2.90579 3.33969 2.79371 2.63337 2.42582 2.46361 2.81009 3.46671 3.72048 69 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 50 2.88323 4.65127 3.40086 2.73607 2.41972 3.62669 3.91044 2.52424 2.75640 2.37424 3.94274 3.64921 4.76561 2.38668 2.64750 3.03028 3.09193 2.27100 6.08057 3.03402 70 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 51 3.36533 5.95840 2.65995 2.86095 3.44584 4.25167 3.55888 2.90987 2.78397 3.33346 3.90493 2.03375 3.68901 2.80089 2.78508 2.11531 1.97302 3.15541 6.39763 4.99330 71 t - E 2.68571 4.42246 2.77540 2.73144 3.46375 2.40497 3.72515 3.29375 2.67742 2.69376 4.24711 2.90367 2.73710 3.18135 2.89822 2.37876 2.77540 2.98457 4.58498 3.61524 0.06628 2.76409 6.81068 0.97562 0.47314 0.48576 0.95510 52 2.38926 5.49703 3.09615 2.80044 4.68202 3.76562 4.62096 2.19958 3.33274 2.03099 4.11871 2.97731 4.26404 3.83080 2.89542 3.19964 2.84193 1.56133 6.03936 4.75239 75 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 53 2.79501 4.92737 2.35659 2.60299 4.06511 2.98090 3.88301 4.80087 2.44593 3.57653 5.01701 3.37711 1.76863 3.53250 3.23955 1.94419 2.68524 2.95506 6.41016 5.00121 76 p - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 54 2.44542 5.98316 3.18675 2.55065 5.32835 2.12386 4.43300 4.38419 2.38413 2.93654 5.02378 2.50193 2.49139 3.27226 2.05133 2.36069 3.70337 4.12664 4.32391 4.48343 77 r - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 55 2.77179 5.98329 2.50848 2.76644 5.32854 3.30269 3.08416 4.38434 3.16759 4.28865 5.02390 2.27915 2.67265 2.61285 3.32102 2.18277 1.82444 2.83013 6.41587 4.35727 78 t - T 2.68621 4.42251 2.77546 2.73149 3.46380 2.40468 3.72521 3.29380 2.67767 2.69252 4.24716 2.90344 2.73766 3.18134 2.89827 2.37913 2.77442 2.98545 4.58503 3.61529 0.07130 2.69245 6.81068 1.11635 0.39671 0.48576 0.95510 56 2.32530 5.97446 3.57954 1.89562 5.31575 4.24796 3.32554 3.73278 2.42253 2.98562 5.01611 3.71687 3.10116 2.71107 2.91871 2.60336 1.70360 3.15915 6.40941 5.00074 83 t - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.35248 6.08833 1.22151 0.61958 0.77255 0.48576 0.95510 57 2.95924 5.72336 2.75932 2.63159 3.96190 3.29462 3.22449 3.40062 2.77057 3.18108 3.56769 2.46117 2.98702 3.05715 2.72729 2.56520 1.96589 3.52719 6.16591 2.96938 84 t - S 2.68622 4.42162 2.77539 2.73088 3.46349 2.40510 3.72514 3.29311 2.67761 2.69358 4.24710 2.90367 2.73759 3.18166 2.89753 2.37894 2.77488 2.98538 4.58497 3.61523 0.23969 1.55321 6.46298 0.15973 1.91309 0.51157 0.91517 58 2.78411 5.86726 3.65151 2.46190 3.55121 3.32277 3.71415 3.82816 2.87545 3.69015 4.27003 2.90512 3.60994 2.68731 2.37548 1.72361 1.95655 3.42914 6.30822 3.85760 87 s - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00384 5.96109 6.68344 0.61958 0.77255 0.21363 1.64843 59 2.13080 3.38910 5.56698 4.95075 2.41578 4.20194 3.39215 2.83299 4.73282 2.14660 3.19234 4.92810 5.12527 4.86169 4.18461 4.07348 3.03808 1.63705 4.66089 1.78369 88 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 60 3.12543 5.93769 2.99354 2.53954 5.26303 4.25659 3.21054 2.85212 2.62935 2.82513 3.45830 2.90110 4.19559 2.80624 3.10357 2.88568 1.50190 2.67316 6.38237 3.93622 89 t - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 61 3.61965 4.99402 3.63828 4.95783 2.26826 4.79135 5.12555 1.86647 4.74679 1.34194 3.74460 4.94944 5.15281 3.10559 4.75989 3.74420 3.85186 1.42486 5.61987 4.44474 90 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 62 3.10387 5.98366 3.06368 2.31445 4.05906 3.57903 3.48488 4.81531 2.43543 4.01680 3.91148 2.67498 2.99920 2.70828 2.56621 2.14984 1.90367 3.06274 4.55677 4.37671 91 t - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 63 3.34220 5.98744 1.86090 2.69096 5.33359 1.40608 3.63608 4.82043 2.48624 4.29318 4.45099 1.96888 4.06897 3.19339 3.48838 2.73868 3.70514 4.37867 6.41942 4.25681 92 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 64 5.18530 6.36522 4.58586 6.57578 3.53131 6.59442 6.84537 2.81242 6.44067 0.21363 3.54046 6.78308 6.53953 6.19263 6.31583 5.99910 5.37457 3.39834 6.73440 5.83217 93 L - - 2.68590 4.42227 2.77521 2.73125 3.46356 2.40515 3.72496 3.29356 2.67743 2.69357 4.24692 2.90349 2.73741 3.18148 2.89803 2.37889 2.77521 2.98520 4.58479 3.61505 0.02033 3.96193 6.81068 0.31431 1.31041 0.48576 0.95510 65 2.93361 5.98253 3.16620 2.07447 5.32745 3.84017 3.84639 3.52003 2.07989 2.71701 4.56317 3.05465 3.94228 2.39023 2.13660 2.81003 2.42767 2.98359 6.41531 3.87097 95 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 66 2.17452 5.85112 3.79178 2.44872 5.14174 4.27993 4.47388 4.59086 3.04069 4.13287 4.42378 3.36057 0.82761 3.31072 3.71538 3.13243 3.15654 3.97958 4.90439 4.38214 96 p - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 67 2.72531 5.97666 2.50761 2.79752 4.22378 1.29966 2.70734 4.80294 2.85170 4.02964 5.01805 2.59981 4.64085 3.32835 3.25617 2.51345 3.59137 3.91820 4.88800 2.97800 97 g - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 68 2.39925 4.86641 3.79312 2.74568 5.13568 4.27988 3.97435 3.95098 2.69562 3.65359 3.00813 3.38952 4.67180 3.12070 2.33490 2.43668 1.27713 2.90106 6.31421 4.93977 98 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 69 2.87821 5.98261 2.71299 2.05681 3.93787 3.36966 3.57296 3.81023 2.25993 3.03102 3.49917 2.39917 3.09415 2.62154 2.82818 2.67359 2.51409 3.67730 4.58228 5.00448 99 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 70 6.32206 7.09639 6.95855 7.01624 2.70399 6.62558 5.12529 5.84365 6.77161 4.03604 6.32463 4.32154 6.86163 6.30239 6.48747 6.05185 6.49899 5.81871 5.18730 0.14189 100 Y - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 71 3.06725 5.97020 3.56838 1.93769 4.23056 3.77167 3.39655 3.53252 2.56448 3.45405 4.47893 2.47898 4.64226 2.55695 2.74362 2.36648 2.01401 2.66399 6.40629 3.70776 101 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 72 3.19486 4.19171 5.58508 4.96942 1.44027 4.15574 5.11433 1.81297 4.75161 2.09873 3.37140 4.94615 5.14143 4.88008 4.75485 4.09123 3.83769 1.47173 5.60267 3.09551 102 f - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 73 3.18039 4.06436 3.15201 2.27681 5.32468 3.77041 3.95744 3.70705 2.23538 4.28548 4.11883 2.88564 4.63997 2.58030 1.70576 2.27707 2.39981 3.62914 4.03739 3.61343 103 r - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 74 3.76685 5.84337 6.79391 6.31497 3.84743 6.27452 6.95358 1.59565 6.25134 2.11498 4.30213 6.44619 6.46746 6.44080 6.36566 5.70153 4.90672 0.53161 7.20703 6.03175 104 V - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 75 2.31005 4.88319 3.40675 2.63903 3.58848 4.26911 3.49342 3.09105 2.39543 3.00463 4.93879 3.41670 4.66153 1.98639 2.22144 3.11070 2.61129 2.78609 6.34491 2.92043 105 q - E 2.68621 4.42228 2.77522 2.73126 3.46357 2.40516 3.72497 3.29357 2.67744 2.69312 4.24693 2.90350 2.73743 3.18149 2.89804 2.37890 2.77522 2.98521 4.58480 3.61506 0.03738 3.58894 4.70319 0.25135 1.50394 0.48576 0.95510 76 0.79499 5.17226 4.80437 3.93376 4.33120 3.17569 4.96596 3.30029 4.15773 2.86829 4.32533 4.52823 5.01384 4.41886 4.42465 2.28661 2.19420 2.76335 5.81537 4.60940 107 a - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00340 6.08033 6.80268 0.61958 0.77255 0.44741 1.01966 77 2.84306 4.15407 4.98296 3.19564 3.23517 4.66606 3.67524 2.49603 3.23224 2.21212 3.84796 4.62630 5.03633 2.88555 2.43211 3.49088 3.22704 1.33993 5.67363 2.88123 108 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 78 3.27061 4.75060 2.81965 3.10410 5.31934 3.95942 3.99367 3.88107 2.62205 4.02823 5.01830 1.35628 3.08534 3.32913 3.08546 1.88067 2.21938 4.02145 6.41122 3.76470 109 n - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00992 6.08833 4.87890 0.61958 0.77255 0.48576 0.95510 79 2.39836 4.69624 2.57939 2.56364 4.72011 1.55094 3.74815 4.26504 2.61409 4.28517 5.02018 2.82673 4.26340 2.69971 2.87382 2.73983 2.53993 3.07568 6.41202 5.00074 110 g - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00340 6.08180 6.80415 0.61958 0.77255 0.45398 1.00812 80 2.22211 4.94595 2.69424 2.44928 4.84552 2.32005 3.06335 2.95704 2.33976 3.55821 4.09648 2.87488 4.09930 2.85656 2.97877 3.08279 3.07714 2.39346 6.40553 4.01548 111 a - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.38398 6.08833 1.15015 0.61958 0.77255 0.48576 0.95510 81 2.96920 5.43248 3.46409 2.76236 3.93019 1.02513 4.29951 4.07917 3.10833 3.39330 4.50784 3.40559 4.48149 3.45547 3.56956 2.50552 2.39680 3.76237 5.94228 3.01765 112 g - E 2.68652 4.42259 2.77488 2.73144 3.46170 2.40466 3.72529 3.29388 2.67703 2.69373 4.24724 2.90335 2.73774 3.18162 2.89801 2.37895 2.77529 2.98552 4.58511 3.61537 0.29928 1.35852 6.43163 0.48724 0.95274 1.77816 0.18506 82 2.84273 4.18992 3.05053 2.12883 3.36284 2.75189 4.25559 3.03507 2.66396 2.65563 4.59024 2.63081 3.84786 2.76844 3.19058 2.84597 2.82776 2.89016 3.06821 3.41272 117 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00494 5.70928 6.43163 0.61958 0.77255 1.56406 0.23482 83 3.37920 5.61493 3.74277 3.20384 4.92800 1.01625 3.96683 4.35082 2.94708 2.91738 4.72998 3.71516 3.70329 3.52945 3.00683 1.61777 3.61882 4.00263 6.13360 4.80162 118 g - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00481 5.73459 6.45693 0.61958 0.77255 0.30535 1.33510 84 2.58463 5.93784 3.04102 2.09605 4.57465 2.51630 3.24109 4.26208 2.60545 3.44607 3.62705 3.20484 1.89678 2.68661 2.74662 2.97880 3.02092 3.23569 6.37074 4.50367 119 p - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00361 6.02233 6.74467 0.61958 0.77255 0.28862 1.38348 85 2.48488 5.72055 3.87501 1.97538 3.04853 3.48010 4.51877 3.51898 2.88839 2.73568 4.42660 3.64380 2.08811 3.48814 2.70856 2.40769 2.92982 4.05679 2.77386 3.43366 120 e - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 86 3.03720 5.94099 3.75455 2.96917 5.26587 2.91682 3.66571 4.11840 2.98472 4.23738 4.98891 3.74380 4.66031 3.40955 3.12788 0.72443 2.46104 4.32115 6.38683 4.99111 121 s - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00227 6.08723 * 0.61958 0.77255 0.00000 * // HMMER3/e [3.0 | March 2010] NAME Pkinase ACC PF00069.17 DESC Protein kinase domain LENG 260 ALPH amino RF no CONS yes CS yes MAP yes DATE Thu Jun 16 11:44:06 2011 NSEQ 54 EFFN 3.358521 CKSUM 3106786190 GA 70.30 70.30 TC 70.30 70.30 NC 70.20 70.20 STATS LOCAL MSV -10.7215 0.70254 STATS LOCAL VITERBI -11.6541 0.70254 STATS LOCAL FORWARD -5.2305 0.70254 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.60017 4.19886 2.94089 2.63789 3.35087 2.89119 3.48337 2.79435 2.60265 2.43454 3.62613 3.06133 3.41286 3.09693 2.94507 2.65650 2.87761 2.67871 4.54052 3.43274 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.00000 * 1 2.91704 4.31028 4.76351 3.63148 2.10912 3.47710 4.39734 2.27639 3.96619 1.99282 3.42844 4.19567 4.43771 4.11903 3.67403 3.22736 3.14918 2.35905 3.32515 1.82622 1 y - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 2 2.77204 4.20708 3.06476 1.97968 4.66603 3.66509 3.19858 3.37903 2.25347 3.34018 4.38833 2.97180 4.05804 2.36838 2.43173 2.67542 2.50268 2.83403 5.78758 4.38976 2 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 3 2.90076 4.04294 3.31590 2.80413 3.08157 3.87481 4.12616 2.18958 2.49735 1.97194 3.73714 3.32717 3.98753 3.23115 3.12315 2.99137 2.62008 2.29426 5.21478 3.75979 3 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 4 2.89383 4.85429 3.10311 2.63174 3.71383 2.56808 3.47232 2.82076 2.61844 1.98342 3.72320 3.05498 4.17347 3.05527 3.32194 2.85608 2.93671 2.18878 5.40057 3.87183 4 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 5 2.68261 5.39185 2.80437 1.87471 4.73638 2.79887 3.69591 4.22191 2.19487 3.69685 4.08896 3.12413 3.70490 2.48424 2.08916 2.53260 3.02309 3.43812 5.82480 4.41426 5 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 6 2.77253 4.06085 3.07881 2.53373 4.10647 3.71564 3.68370 2.64290 2.00036 2.72968 4.17370 3.24239 3.08607 2.77632 2.72820 2.69921 2.54335 2.71931 5.60386 4.26496 6 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 7 3.42930 4.74416 5.34765 4.76823 3.71832 4.71430 5.09461 1.33015 3.54417 1.12594 3.33523 4.84641 5.00427 4.73010 4.64986 4.05097 3.66327 1.83083 5.51142 4.37013 7 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 8 2.57460 4.94286 4.00732 3.93216 5.40516 0.41612 5.15134 4.86315 4.18766 4.52736 5.33508 4.05990 4.45245 3.74651 4.46171 3.15888 3.14590 4.15180 6.71159 5.52767 8 G - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 9 2.30218 5.38172 3.03799 2.02026 4.18991 3.65799 3.84554 3.67215 2.28945 3.68495 4.42365 2.84227 3.73039 2.44555 2.39428 2.00278 2.95859 3.63127 5.81726 4.40923 9 s - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 10 4.54226 6.07621 5.39207 5.44513 6.34643 0.07137 6.34600 6.33790 5.73770 5.76452 6.83374 5.56171 5.46536 5.98137 5.73783 4.76037 5.08470 5.67502 7.03864 6.52156 10 G - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 11 2.06444 5.37337 2.91595 2.40063 4.70969 2.61181 3.84889 4.18948 2.46835 3.67503 4.41668 2.62917 4.05392 2.88235 2.66711 2.00495 2.47288 3.39649 5.81159 4.40596 11 s - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 12 2.90920 4.46494 4.12493 3.14570 1.52027 3.22992 4.24969 2.92840 3.46467 2.66529 3.12827 3.55640 4.33979 3.72214 3.72236 2.53517 2.98442 2.55125 5.06498 2.30159 12 f - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 13 2.21104 4.80722 4.64199 4.55509 5.54982 0.52550 5.49025 5.04875 4.70671 4.72740 5.47955 4.30215 4.43233 4.84666 4.86038 1.95116 3.45005 4.17507 6.87595 5.79039 13 G - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 14 2.71551 3.46186 3.01248 2.27453 4.55840 3.55853 3.50842 3.55064 2.03335 3.34882 4.31847 3.17065 4.07218 2.83960 2.83653 2.25762 2.26864 2.61469 5.72841 4.35037 14 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 15 3.17885 3.97005 5.63014 5.16553 4.35293 4.89782 5.77682 2.09398 5.06494 2.94083 4.14496 5.20428 5.30924 5.30763 5.20260 4.32158 3.61414 0.44769 6.26043 5.04118 15 V - E 2.68625 4.42232 2.77526 2.73102 3.46361 2.40519 3.72501 3.29361 2.67747 2.69306 4.24696 2.90353 2.73746 3.18153 2.89807 2.37893 2.77526 2.98499 4.58484 3.61510 0.09563 2.43065 5.73865 0.67073 0.71608 0.48576 0.95510 16 2.91101 3.31342 4.36759 3.41772 2.45121 4.01227 4.31421 2.75922 2.81772 2.31733 3.50420 3.69862 4.38187 3.88257 3.14725 3.02772 3.14303 2.46483 3.37889 1.69905 18 y - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 17 2.88484 5.28431 3.03179 2.31849 4.58595 3.47769 3.54625 2.98124 1.69233 2.43413 4.04064 3.16353 4.06907 2.72555 2.58277 2.55274 3.04512 3.20501 5.74377 4.36100 19 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 18 1.57125 2.56460 3.38436 3.39201 3.66458 2.34190 4.20526 2.93932 3.32823 2.44127 3.26099 3.74334 4.30466 3.60817 3.63469 3.01628 2.92537 2.55308 5.13581 3.91882 20 a - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 19 2.89298 4.40558 3.44708 2.63051 3.77015 3.77747 2.87940 2.57515 2.33949 2.85128 3.20054 3.37379 4.16367 2.65910 2.52913 2.67954 2.59930 2.46709 5.42679 3.74337 21 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 20 2.88350 5.37811 2.42858 2.28192 4.71668 3.65945 2.35349 4.19788 2.20596 2.91798 4.42054 2.38258 4.05280 2.81490 2.60119 2.77457 3.11461 3.76528 3.43428 3.80493 22 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 21 2.59359 5.30144 3.00667 2.46268 4.60954 3.67285 3.22394 2.91749 2.13087 2.60378 4.35201 3.05590 3.51881 2.48537 2.35096 2.62551 3.00998 2.84793 5.75687 4.36947 23 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 22 2.64500 5.38003 2.46961 2.36386 4.71962 2.36153 3.71093 3.77963 2.19342 3.27291 4.42213 2.49968 3.44456 2.94396 2.94770 2.23767 2.90215 3.58800 5.81601 3.79868 24 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 23 2.71410 5.35453 2.26257 2.17828 4.68327 3.06138 3.85215 3.65600 2.51871 3.65284 4.39957 2.64619 4.05631 2.95399 2.98284 2.41102 1.94961 3.19379 5.79713 3.78693 25 t - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03260 5.01631 3.67114 0.61958 0.77255 0.48576 0.95510 24 2.77509 4.50579 3.06414 2.40741 4.68877 2.10468 3.84020 4.16638 2.52713 3.65577 4.39945 2.31826 2.82304 2.55347 2.45557 2.51717 3.10489 3.55245 5.79545 3.68618 26 g - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.13496 4.99383 2.12471 0.61958 0.77255 0.54753 0.86365 25 2.82390 4.23357 2.59579 2.09029 4.65095 3.47120 3.53571 3.50264 1.93281 3.24335 4.10745 2.98984 3.99409 2.41262 2.43858 2.60001 2.84781 3.57090 5.75206 3.98239 27 k - E 2.68634 4.42166 2.77510 2.73101 3.46370 2.40521 3.72473 3.29370 2.67713 2.69347 4.24706 2.90350 2.73742 3.18145 2.89817 2.37895 2.77536 2.98516 4.58493 3.61485 0.21086 2.33296 2.37401 1.37928 0.29003 0.81455 0.58490 26 2.79249 4.86773 3.27912 2.48247 3.81836 3.65430 3.86742 2.36980 2.31612 2.40000 3.66176 2.98804 3.52938 2.45192 2.80383 2.80149 2.71760 2.93241 5.39419 3.83742 36 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01259 4.77670 5.49905 0.61958 0.77255 0.27298 1.43175 27 2.94684 4.40681 4.93000 4.33270 2.14562 4.19543 4.43742 2.60780 4.12995 2.51432 3.32273 4.32339 4.55150 4.25562 4.15094 3.50804 3.26683 1.12964 4.39266 2.23526 37 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 28 0.67405 4.13502 4.78133 4.26234 4.00859 4.13420 4.88775 2.58668 4.14876 2.87877 3.59530 4.37511 4.66004 4.38446 4.34251 3.50924 3.44597 2.20111 5.62436 4.43519 38 A - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 29 2.77559 4.05359 4.82280 4.21814 3.45081 3.88127 4.46447 1.69887 3.29990 2.06046 2.92956 4.25618 4.49083 4.18293 4.07725 3.28739 3.19210 1.31639 4.98894 3.80930 39 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 30 4.13385 6.06880 4.58555 3.84767 5.73274 4.53840 4.41573 5.06650 0.32256 4.37802 5.30885 4.14872 4.92009 3.55775 2.54913 4.11741 4.25754 4.75872 6.25921 5.22828 40 K - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 31 2.53136 3.93442 3.55191 2.54113 3.59001 3.81267 3.67691 2.09853 2.22431 2.85063 3.63116 3.45300 4.19661 2.87681 2.71089 2.96116 2.67441 2.46338 5.34241 3.76111 41 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 32 2.80227 4.30542 4.81704 3.71619 2.31247 3.45194 4.41496 1.85614 4.00698 1.68898 3.06826 4.22398 4.44809 4.15126 4.03957 3.11345 3.01936 1.82478 4.92889 3.75130 42 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 33 2.72320 4.19698 2.89173 2.30854 4.21536 3.66470 3.63903 3.54937 1.81020 3.33297 4.38970 2.50126 3.12497 2.85129 2.61476 2.47307 2.93549 3.43057 4.63863 3.86554 43 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 34 2.73748 5.16363 3.24304 2.62749 4.42406 3.39882 3.64889 3.08793 1.75481 2.64054 4.22767 2.81684 3.49630 2.92572 2.69253 2.71691 2.78362 2.91622 5.65055 3.09244 44 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 35 2.82342 4.21564 2.57688 2.18304 4.09635 3.66104 3.29269 4.17416 2.24176 3.24419 4.40775 3.13331 3.02670 2.66210 2.30119 2.38622 2.91913 2.84969 5.80393 4.13733 45 e - H 2.68618 4.42225 2.77520 2.73124 3.46354 2.40513 3.72495 3.29354 2.67741 2.69355 4.24690 2.90347 2.73731 3.18147 2.89801 2.37887 2.77520 2.98519 4.58477 3.61503 0.02362 3.90596 5.73865 0.48782 0.95182 0.48576 0.95510 36 2.81479 5.38805 2.34307 2.08229 3.84722 3.00939 3.24618 4.21561 2.24819 3.24444 4.42924 2.80965 3.63231 2.74299 2.65208 2.41080 2.72103 3.26063 5.82196 4.16400 47 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 37 2.42659 5.32934 2.94543 1.98753 4.27035 3.66735 3.85733 2.97282 2.27697 3.20526 3.75542 2.69174 3.50027 2.79550 2.45131 2.66535 2.70832 3.28701 5.77800 4.07668 48 e - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 38 2.82479 5.36482 2.46403 2.36491 4.23121 3.19666 3.53460 3.47934 2.01766 2.87145 4.06028 2.53791 3.88358 2.73438 2.79605 2.39315 2.94316 3.30320 5.80464 3.67777 49 k - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 39 2.81259 3.82036 2.58997 2.16257 3.93187 3.50795 3.44913 3.32347 2.23760 3.42042 3.43188 3.03914 3.18139 2.98833 2.90722 1.97318 3.04237 3.44327 4.85883 4.01646 50 s - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04017 5.01631 3.41907 0.61958 0.77255 0.48576 0.95510 40 2.75150 4.68420 2.78864 2.20581 3.96394 3.14028 3.85474 3.62649 2.17804 2.84544 3.93254 2.66146 3.79370 2.72658 2.87564 2.43841 2.71937 3.23202 3.36778 4.34996 51 k - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01020 4.98634 5.70869 0.61958 0.77255 0.56699 0.83755 41 2.52028 4.29421 2.93844 2.26593 3.28616 3.42961 3.89113 3.40312 1.92589 2.89626 3.59280 3.04537 4.08209 2.42956 3.02333 2.89065 2.87512 2.78376 5.62895 3.97726 52 k - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06456 4.98634 2.88790 0.61958 0.77255 0.56699 0.83755 42 2.52102 4.66200 2.60886 2.12080 3.90563 3.43164 3.41299 3.76759 2.19798 2.95231 4.37667 2.71584 3.31098 2.66775 2.46389 2.65499 2.89357 3.57073 4.74853 4.36793 53 e - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06881 4.93254 2.82535 0.61958 0.77255 0.69302 0.69327 43 2.65676 5.27743 2.81592 2.16715 4.59834 3.44096 3.79920 2.82354 2.10889 3.57233 3.78816 2.93522 4.00237 2.20078 2.58862 2.72374 2.99283 3.18643 5.72482 3.30249 54 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04191 4.87514 3.39892 0.61958 0.77255 0.80592 0.59181 44 2.46416 5.14935 3.14274 2.35064 4.42785 3.46788 3.62138 3.06885 2.39724 2.90472 4.00413 2.77252 4.01153 2.56699 2.69346 2.37713 2.33258 3.34725 5.62407 3.30627 55 t - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15381 4.84499 2.00472 0.61958 0.77255 0.85820 0.55151 45 2.15178 5.11690 2.80767 2.47016 4.06926 3.56450 3.25874 3.42510 2.38373 2.72748 4.17388 2.58132 3.95629 2.68997 2.59104 2.52019 2.89357 3.10461 5.58730 3.84420 56 a - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06869 4.70471 2.85898 0.61958 0.77255 1.05523 0.42788 46 2.33893 4.38200 3.78128 3.08857 2.87706 3.76539 4.03303 2.50172 2.82237 2.26545 3.48958 3.56901 4.14175 3.13269 2.43377 3.02211 2.55318 2.18677 4.40164 3.75633 57 v - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07407 4.65033 2.78326 0.61958 0.77255 1.03937 0.43646 47 2.66580 4.77769 3.25859 2.69691 3.69577 3.61140 3.56963 3.36841 2.45062 2.28390 3.86113 2.83101 3.99793 3.01640 2.00932 2.40384 2.97180 2.98514 3.81809 4.01106 58 r - H 2.68588 4.42292 2.77574 2.73101 3.46421 2.40561 3.72562 3.29362 2.67747 2.69305 4.24679 2.90348 2.73776 3.18179 2.89693 2.37874 2.77432 2.98554 4.58544 3.61510 0.56084 0.85690 5.33966 1.67148 0.20822 0.22069 1.61932 48 3.87852 6.35819 2.88185 0.33512 5.75300 3.98086 4.66680 5.41085 3.73193 4.87592 5.81368 3.19190 4.67406 3.86930 4.28895 3.74624 4.21685 4.94226 6.88673 5.40485 78 E - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 49 2.34469 4.06185 4.67394 3.74635 3.19070 3.72385 4.38165 1.69529 3.89930 1.68521 3.30505 3.88179 4.42519 3.50953 3.71087 3.12279 3.14596 1.99339 4.94125 3.41486 79 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 50 2.41611 3.92039 3.06862 2.24055 4.69692 3.38839 3.50460 4.17440 2.17094 3.43336 4.01855 2.84870 4.05421 2.22409 2.42800 2.49697 2.93959 3.48161 5.80403 3.10747 80 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 51 2.65097 4.31309 4.79937 4.19096 3.25102 4.08746 4.41763 1.57396 3.99634 1.77576 3.18772 3.58572 4.45127 4.14513 4.03729 2.91921 3.15786 1.73265 4.93848 3.33785 81 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 52 2.71474 4.35776 4.49839 3.90546 3.26558 3.60358 3.11363 2.58541 3.76519 1.24138 2.56017 3.78382 4.40165 3.77674 3.90460 2.91080 2.88501 2.43218 4.97232 3.44306 82 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 53 2.21717 5.37509 3.13954 2.36108 4.71254 3.44569 3.50643 4.19289 1.90576 2.89362 4.41783 2.84264 3.50886 2.51670 2.27883 2.73413 2.79427 3.37900 5.81221 4.40629 83 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 54 2.88332 4.76187 3.15794 2.34306 4.64959 3.18467 2.98724 4.11774 2.20976 2.84622 3.53657 2.69640 4.06011 2.81953 2.22587 2.26090 2.67755 3.39248 5.77872 3.89328 84 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 55 2.92075 3.71086 4.82119 4.21031 2.91851 4.08375 4.41406 2.48059 4.00923 1.14255 2.77088 4.22517 4.44739 4.15194 3.51737 2.79440 3.04088 2.14784 4.92583 3.58797 85 l - H 2.68619 4.42231 2.77526 2.73130 3.46360 2.40505 3.72501 3.29360 2.67737 2.69361 4.24696 2.90322 2.73746 3.18153 2.89797 2.37878 2.77526 2.98514 4.58483 3.61509 0.21093 1.81438 3.60337 0.15203 1.95873 0.48576 0.95510 56 2.87228 4.32697 2.43695 2.52023 4.72535 3.09966 3.42727 4.21076 2.24746 3.68599 4.14994 2.21640 3.70120 2.45856 2.42604 2.20075 2.84715 3.77128 5.81417 4.40372 87 s - S 2.68626 4.42233 2.77498 2.73131 3.46362 2.40515 3.72479 3.29362 2.67733 2.69363 4.24698 2.90355 2.73719 3.18141 2.89809 2.37895 2.77498 2.98527 4.58485 3.61511 0.08622 2.53438 5.71435 0.90816 0.51628 0.44628 1.02166 57 2.95437 4.05540 4.02453 3.66262 4.73022 3.00582 0.63840 4.27369 3.61156 3.92435 4.76053 3.90244 4.38221 3.97389 3.93213 2.36608 3.39859 3.79517 6.08861 4.80370 91 H - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 58 2.74925 4.59154 2.64384 2.02057 4.69046 3.19970 3.85151 4.16644 2.39568 3.65893 3.99620 3.06676 1.73396 2.95270 2.98758 2.52836 2.96698 3.57815 5.80119 4.39902 92 p - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 59 2.77600 3.63123 3.60742 3.04389 2.88763 3.83093 3.22852 3.27052 2.82124 2.96220 3.83761 1.44485 4.21384 3.33393 3.26463 3.06163 2.84916 2.86372 5.30436 2.85576 93 n - S 2.68619 4.42226 2.77521 2.73125 3.46355 2.40506 3.72496 3.29355 2.67742 2.69356 4.24691 2.90348 2.73741 3.18148 2.89802 2.37880 2.77521 2.98520 4.58478 3.61504 0.02736 3.73933 5.73865 0.64347 0.74542 0.48576 0.95510 60 3.43736 4.73250 5.40681 4.85032 3.21534 3.89737 5.21348 0.72821 4.70181 2.29095 3.77438 4.92025 5.08011 4.86610 4.77171 4.12622 3.68020 1.72131 5.65218 4.46593 96 i - B 2.68620 4.42119 2.77522 2.73126 3.46356 2.40515 3.72497 3.29356 2.67743 2.69357 4.24692 2.90349 2.73742 3.18149 2.89780 2.37889 2.77522 2.98521 4.58479 3.61505 0.04171 3.27988 5.73865 0.65380 0.73410 0.48576 0.95510 61 3.22247 3.52386 5.20134 4.62057 3.74032 4.49428 4.89197 1.38422 4.44333 2.03444 3.40884 4.64781 4.83078 4.60265 4.48778 3.55308 3.01459 1.16992 5.37248 4.18666 99 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 62 2.72238 4.59459 3.13585 2.30027 4.72566 3.17722 3.67251 4.20868 2.00822 3.53187 4.42604 2.97500 3.44674 2.41134 2.06447 2.53711 2.32763 3.77297 5.81907 4.41084 100 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 63 2.75790 4.02501 4.89076 4.27684 2.25991 4.10991 4.44304 2.31340 4.06541 1.38378 2.56521 4.26823 4.47075 4.19670 4.07763 3.42134 2.72551 2.21249 4.93572 3.01728 101 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 64 2.79378 4.36122 4.48297 3.70404 2.84684 4.03133 3.55103 1.94759 2.82835 1.82248 3.32801 4.05424 4.39941 3.70850 3.13439 3.15759 3.14407 2.41334 4.25902 2.30786 102 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 65 2.47264 4.33075 2.07830 2.03157 4.71750 2.27093 3.18950 4.19892 2.58523 3.68152 4.42156 3.04070 4.05295 2.84140 2.67254 2.59104 3.11515 3.76615 5.81569 3.60292 103 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 66 2.10377 4.03530 4.82986 4.21790 2.76136 4.07923 4.41023 2.08081 4.01359 2.30827 2.78821 4.22543 4.44340 4.15406 4.03913 2.38166 2.60707 1.97272 3.19782 3.33258 104 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 67 2.82605 3.67894 3.38070 3.01266 1.82001 3.97118 3.82789 2.76491 3.48734 2.34143 3.24926 3.10725 3.78017 3.42990 3.73647 2.98277 3.13977 2.32864 3.87637 2.72935 105 f - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04987 5.01631 3.16967 0.61958 0.77255 0.48576 0.95510 68 2.55964 4.21441 3.10666 1.94329 4.49707 3.21758 3.46239 3.37098 2.39709 3.00488 3.51821 3.06808 4.06187 2.54621 2.66989 2.75991 2.68522 3.13970 5.68635 3.14043 106 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02094 4.97674 4.28127 0.61958 0.77255 0.42506 1.06054 69 2.80310 5.38415 2.22807 2.18295 4.72718 3.65266 3.36574 4.21171 2.46641 3.56699 4.42536 2.57848 3.46451 2.86899 2.36310 2.58224 2.17995 3.52075 5.81804 3.65548 107 t - E 2.68640 4.42162 2.77535 2.73147 3.46354 2.40551 3.72458 3.29233 2.67716 2.69348 4.24762 2.90375 2.73699 3.18187 2.89837 2.37858 2.77480 2.98522 4.58549 3.61548 0.36809 1.18844 5.72853 1.68950 0.20409 0.46837 0.98355 70 2.88244 5.39287 2.47300 2.29715 3.79460 2.82884 3.28660 4.22374 2.09832 3.69810 4.43357 2.45444 3.07035 2.85151 2.47539 2.34133 3.01376 3.78345 5.82560 4.10620 126 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 71 2.57798 5.39101 2.06614 2.42374 4.73510 2.82383 3.84381 4.22040 2.28304 3.69587 4.43195 2.62257 3.38372 2.71683 2.73886 2.29050 2.66881 3.34289 5.82427 4.18691 127 d - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 72 2.58231 5.35788 2.77781 2.22432 4.08337 3.66211 2.49021 4.16401 2.37240 3.16748 4.40241 2.52484 4.05523 2.76334 2.63486 2.49164 2.89823 3.30761 4.95167 3.05734 128 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 73 2.78575 3.74303 4.78141 4.17260 2.95491 4.07322 4.40160 1.89067 3.97854 1.60353 2.95383 3.71592 3.11906 4.12798 3.50390 3.07790 2.85145 2.24111 4.92509 2.91282 129 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 74 2.58399 2.76389 4.59675 3.99881 3.19843 4.04871 3.62339 2.65148 3.84111 2.12752 3.45456 3.62454 3.46238 4.02369 3.94739 2.79096 3.14543 2.42948 3.13888 1.74690 130 y - E 2.68624 4.42096 2.77500 2.73129 3.46360 2.40508 3.72501 3.29360 2.67747 2.69353 4.24696 2.90343 2.73746 3.18153 2.89807 2.37893 2.77510 2.98525 4.58483 3.61509 0.10354 2.49668 4.13492 0.66960 0.71726 0.48576 0.95510 75 3.07392 4.44555 4.97084 3.81418 2.87255 4.25097 4.57886 1.74564 4.16653 1.31678 2.12605 4.39109 4.59167 3.71495 4.19337 3.56380 3.30386 2.29390 5.05348 3.89648 133 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 76 2.86449 3.41378 5.01300 4.41506 3.07458 4.28568 4.64425 1.49634 4.22335 2.27773 3.54368 4.43380 4.63588 3.70581 4.25773 3.60458 3.30826 1.19505 5.13861 3.95920 134 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01003 5.00344 5.72579 0.61958 0.77255 0.46390 0.99109 77 2.91733 4.35063 4.55668 3.96112 2.40516 4.04680 4.36140 2.56068 3.81048 1.70108 1.79340 3.59899 4.41359 3.09405 3.93172 3.15547 2.48177 2.59902 4.96582 3.78095 135 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 78 2.76564 5.57030 2.50020 1.03018 4.90220 3.70297 3.44513 4.39514 2.75995 3.87044 4.62325 3.16505 3.19754 2.75935 3.27129 2.65802 3.28146 3.95557 6.00401 4.57374 136 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 79 2.81579 3.90369 4.68991 4.08721 2.27644 4.06399 3.63829 2.69790 3.58050 1.84024 3.31248 4.16081 4.42953 4.07816 3.60709 3.36667 3.01039 2.57256 4.40465 1.54393 137 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 80 2.45920 2.17262 4.69646 4.09287 3.22405 3.32199 3.21264 2.59887 3.91610 2.06244 2.25581 4.16309 3.61702 4.08102 3.98811 3.14866 3.14614 2.03766 4.93767 3.46778 138 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04171 5.01631 3.37486 0.61958 0.77255 0.48576 0.95510 81 2.70314 5.37371 2.37994 1.91497 4.71601 2.93053 3.83161 4.20005 2.46492 3.55263 3.57885 2.58870 2.59223 2.74552 2.71928 2.69862 3.03649 3.29150 5.80804 4.39872 139 e - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01022 4.98481 5.70716 0.61958 0.77255 0.57090 0.83245 82 2.41993 3.72287 3.12898 2.52046 4.44831 1.89639 3.49536 3.62837 2.38762 3.31281 3.53904 2.44913 3.42379 3.00780 3.12891 2.87912 2.75467 3.52812 5.65946 3.81984 140 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.10979 4.98481 2.33166 0.61958 0.77255 0.57090 0.83245 83 2.77350 5.21303 2.43943 2.62703 4.54309 1.39496 3.89257 3.99092 2.60267 3.54085 4.32260 3.04209 4.06226 3.01831 3.03242 2.64588 2.77651 3.04353 5.73236 4.35922 141 g - - 2.68631 4.42210 2.77537 2.73126 3.46359 2.40522 3.72475 3.29338 2.67758 2.69250 4.24657 2.90377 2.73770 3.18148 2.89796 2.37902 2.77541 2.98478 4.58507 3.61496 0.21230 1.67338 5.60865 1.39945 0.28334 0.33567 1.25476 84 2.88583 5.39491 1.79381 2.06461 4.73890 3.24821 3.51210 4.22442 2.47141 3.51906 4.43601 2.95989 3.57031 2.79057 2.82788 2.02605 2.91163 3.62254 5.82805 4.41723 147 d - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 85 2.90986 4.42406 3.70533 3.66371 3.02577 3.99009 3.90749 2.78363 3.56278 1.02082 3.24022 3.34355 4.36146 3.52102 3.78389 3.13807 2.95820 2.60948 5.03043 3.48016 148 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 86 2.57337 4.10245 3.03950 2.95233 2.09915 3.53742 3.15959 3.37138 2.66519 2.44003 3.54971 3.10382 3.71714 3.06888 3.13958 2.44794 3.05039 3.11306 4.61969 3.07664 149 f - H 2.68621 4.42228 2.77522 2.73126 3.46357 2.40516 3.72497 3.29357 2.67744 2.69358 4.24693 2.90350 2.73735 3.18149 2.89804 2.37890 2.77502 2.98521 4.58480 3.61458 0.24291 3.02648 1.78874 0.58545 0.81386 0.48576 0.95510 87 2.29362 5.30873 1.92419 2.32474 4.26868 3.43187 3.46788 4.12970 2.37357 3.61146 4.35100 2.92576 3.98105 2.69850 2.60197 2.47206 2.54407 3.69618 5.74493 3.96335 152 d - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01185 4.83724 5.55959 0.61958 0.77255 0.87096 0.54223 88 2.24696 4.24235 4.56569 3.96478 2.41045 3.97137 3.29432 2.27668 3.43922 2.04964 3.19406 4.05576 4.33743 3.97000 3.38896 3.27217 3.06100 2.23241 4.18296 2.20711 153 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01185 4.83724 5.55959 0.61958 0.77255 0.87096 0.54223 89 3.80243 5.01974 5.81731 5.27268 3.70245 5.26548 5.70409 1.30084 5.15744 0.98923 3.04180 5.42350 5.39649 5.16571 5.17462 4.65797 4.03105 1.75151 5.84473 4.80632 154 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01185 4.83724 5.55959 0.61958 0.77255 0.62617 0.76494 90 2.48275 5.13868 3.18520 2.44727 3.97540 3.65122 3.65677 3.36126 2.16734 3.30486 3.19390 3.06911 4.04233 2.41632 2.75033 2.25069 2.41675 3.09873 5.62108 3.69504 155 k - H 2.68595 4.42186 2.77509 2.73103 3.46377 2.40517 3.72421 3.29387 2.67761 2.69368 4.24695 2.90368 2.73754 3.18175 2.89730 2.37895 2.77536 2.98514 4.58473 3.61505 0.63487 1.25520 1.68753 1.39580 0.28453 0.74756 0.64154 91 2.43987 5.24839 2.75312 2.20207 4.11839 3.54175 3.72993 4.06095 2.07671 3.34429 3.98666 2.75679 3.72576 2.60349 2.28520 2.46158 2.79062 3.43756 5.68761 3.81452 172 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01352 4.70589 5.42824 0.61958 0.77255 0.34096 1.24163 92 2.56414 5.37054 2.84426 2.11401 4.71382 2.70860 2.88683 4.19851 2.19051 3.14492 4.41168 2.55924 4.03189 2.79129 2.63798 2.35762 3.09530 3.76022 5.80426 3.44686 173 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01035 4.97167 5.69402 0.61958 0.77255 0.60365 0.79145 93 2.86527 4.78061 2.95620 2.59670 4.27271 1.99448 3.84571 3.48713 2.08881 3.39073 4.33266 2.46895 3.64059 2.84730 2.63768 2.84659 2.50396 3.24160 5.73764 4.35043 174 g - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01035 4.97167 5.69402 0.61958 0.77255 0.46145 0.99524 94 2.57883 3.45102 3.31966 2.70191 4.02973 3.16828 3.76144 3.12068 2.26544 3.06289 4.10647 2.81108 2.70638 2.99156 2.57108 2.49596 2.68439 2.78596 4.48656 4.03099 175 k - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01001 5.00539 5.72774 0.61958 0.77255 0.51640 0.90799 95 3.00846 4.37852 4.95050 4.33851 2.03946 4.18408 4.51243 2.07907 4.13124 1.32746 2.71567 3.86888 4.53472 4.25457 4.14405 3.49709 3.23945 2.15194 4.98866 3.35208 176 l - T 2.68632 4.42239 2.77534 2.73137 3.46298 2.40515 3.72509 3.29351 2.67755 2.69332 4.24641 2.90361 2.73734 3.18136 2.89815 2.37881 2.77519 2.98532 4.58491 3.61446 0.13280 2.11108 5.72774 1.00017 0.45858 0.46707 0.98573 96 2.55096 5.39506 2.51329 2.14467 4.73966 3.20813 3.84532 4.22553 2.37049 3.70015 4.43599 2.79265 3.16832 2.74582 2.82569 1.88822 2.42672 3.78548 5.82793 4.41687 180 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 97 2.55253 5.00371 2.91674 1.56530 3.77486 3.74196 3.71669 3.18678 2.77868 2.90828 3.00031 3.29724 3.28640 3.12328 3.07027 2.76413 2.89289 3.32236 3.74938 3.48354 181 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 98 2.59075 4.32000 2.44335 2.15201 3.95693 3.12347 3.34011 3.83572 2.30797 3.16698 3.93315 2.75363 3.60071 2.81660 2.61665 2.70578 2.85000 3.34465 3.67935 4.00275 182 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 99 2.65092 5.35978 2.44414 1.82235 4.69093 3.44711 3.03513 3.63938 2.46445 2.69072 4.40412 3.13476 3.87902 2.43027 2.99516 2.67955 2.75495 3.20344 5.80088 4.03299 183 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 100 1.86496 3.02665 4.71869 4.11439 3.41506 3.78632 4.39467 1.72869 3.93413 2.03606 3.25110 4.17623 4.43415 4.09606 3.42450 3.02051 2.94480 2.04904 4.94015 3.76003 184 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 101 2.66380 3.60669 3.09016 2.70629 3.97052 3.12773 3.91117 3.25572 1.80561 2.74214 4.19581 3.23071 4.10037 2.51557 2.19861 2.73033 3.11863 2.97558 5.62300 4.27841 185 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 102 2.65525 3.61780 2.73206 2.59880 2.91626 3.69337 3.17740 3.91061 2.06495 2.87551 3.62080 2.65252 4.08468 3.01717 2.55140 2.50072 2.84956 3.37543 5.67937 3.86408 186 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 103 2.78549 3.75825 4.89230 4.27707 2.37628 4.09576 4.42870 1.58181 4.06146 2.16353 2.83229 4.25917 4.45832 4.19107 4.06819 3.40747 3.15724 2.08428 3.94244 2.32199 187 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 104 1.91854 4.04767 4.83572 4.22341 2.21465 3.82491 4.41156 2.18264 4.01792 2.17430 2.43077 4.22827 4.44431 4.15736 4.04152 2.82624 2.88622 2.07903 4.25105 3.74133 188 a - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 105 2.59846 4.94560 3.39451 2.56515 3.67443 3.44440 3.79808 3.54150 2.22767 2.11264 4.02778 3.19297 4.14629 3.16161 2.51054 2.63727 2.68778 3.11215 4.13689 2.62651 189 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 106 2.71202 4.65478 2.93025 2.07602 4.70407 3.24619 3.70431 4.18261 2.58938 3.67040 4.10390 3.00747 4.05496 1.41184 3.00214 2.55548 2.74962 3.75459 5.80879 4.40428 190 q - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 107 3.40758 4.70636 5.39472 4.82751 3.82844 4.73217 5.15283 1.33187 4.66862 1.85779 2.55181 4.88258 5.03394 4.81634 4.72035 4.07618 2.46891 1.37416 5.58393 4.41648 191 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 108 2.29107 3.23763 4.81578 4.20571 3.00975 3.26830 4.41487 2.37700 4.00619 1.39060 3.28560 4.22330 4.44775 4.15070 4.03923 2.94875 3.15303 1.86969 4.92930 3.75166 192 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 109 2.62933 4.07203 2.95927 2.08969 4.71415 3.53463 3.84677 3.97436 2.17805 2.82549 4.41873 2.79932 4.05232 2.53645 2.16719 2.25459 2.86145 3.76301 5.81311 4.40656 193 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 110 1.17650 4.82606 4.24050 3.83461 4.98724 1.08848 4.85992 4.42183 3.81285 4.07900 4.88120 3.97861 4.34888 4.10941 3.49121 2.50205 3.18154 3.58125 6.30917 5.10145 194 g - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 111 3.90271 5.14012 5.90469 5.33230 3.41122 5.28833 5.65529 2.02087 5.19062 0.88043 2.65524 5.45552 5.42442 5.15469 5.16815 4.66249 4.12260 1.40813 5.79888 4.77647 195 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 112 2.18892 5.38966 2.64044 1.97751 4.73333 3.65659 3.60437 3.92129 2.10090 3.35469 4.43069 2.33847 4.05005 2.60616 2.77179 2.58383 3.11351 3.51057 5.82316 3.92131 196 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 113 2.81051 5.07767 4.77644 4.29954 2.03535 4.57845 2.23184 3.59557 4.18346 3.18325 4.21755 4.37554 4.93163 4.33627 4.35340 3.88728 3.48134 3.41897 4.49144 0.85916 197 y - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 114 3.22459 2.61128 5.38969 4.79509 3.58979 4.68737 5.03975 1.79213 4.61293 0.89179 2.61919 4.84389 4.96801 4.69100 4.62327 4.02095 3.66625 2.57847 5.40913 4.29402 198 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 115 4.50357 5.94639 4.67261 4.49457 2.97674 4.90740 0.35314 4.75553 4.20979 3.98991 5.25041 4.60971 5.36272 4.62490 4.36557 4.47961 4.76464 4.60938 4.62703 2.51319 199 H - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 116 2.59851 4.33805 2.68311 2.05797 4.71676 3.15802 3.59362 3.65569 2.43439 3.32473 4.42034 2.78736 4.05190 2.70193 2.69422 1.73897 3.11362 3.60918 5.81450 4.40740 200 s - H 2.68619 4.42226 2.77521 2.73118 3.46355 2.40514 3.72496 3.29355 2.67742 2.69356 4.24691 2.90348 2.73741 3.18131 2.89802 2.37888 2.77521 2.98510 4.58478 3.61505 0.04979 3.09322 5.73865 0.35009 1.21950 0.48576 0.95510 117 2.54785 4.42029 2.89622 2.25922 4.34868 3.66610 3.21799 3.71995 2.27125 3.07920 3.10189 2.25867 4.05899 2.34775 2.56766 2.85682 3.11428 3.36249 5.78309 3.93739 202 n - T 2.68634 4.42198 2.77524 2.73138 3.46344 2.40486 3.72467 3.29300 2.67713 2.69352 4.24714 2.90371 2.73709 3.18145 2.89825 2.37911 2.77527 2.98532 4.58501 3.61528 0.09842 2.40225 5.73865 1.69597 0.20263 0.48576 0.95510 118 2.53322 5.34393 2.95935 2.59629 3.94657 1.84501 3.63806 4.14023 2.18335 3.64044 4.39013 2.55576 3.77395 2.95784 2.71428 2.21077 3.11477 3.72355 4.68564 4.39095 213 g - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 119 3.55513 4.24694 5.60079 5.05662 2.60993 4.96071 5.43324 0.97900 4.91818 2.09234 3.80321 5.12225 5.23216 5.06726 4.97588 4.32549 3.79818 1.34455 5.81250 4.64107 214 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 120 2.50668 3.55624 4.84676 4.23404 3.24346 4.08398 4.41611 1.66920 4.02684 2.01982 2.79518 4.23489 4.44784 4.16480 3.83668 2.91482 2.83994 1.71230 4.92013 3.32611 215 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 121 4.62495 5.94818 4.90176 4.71687 2.80207 5.05504 0.41821 4.71670 4.43975 3.92227 5.21366 4.70109 5.45885 4.74110 4.56151 4.57303 4.86606 4.59605 4.46431 2.05738 216 H - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 122 3.04282 4.16968 3.83274 3.22981 4.12386 3.92565 4.16387 3.45658 2.89535 2.79946 3.52962 3.63885 4.33284 3.40809 0.88367 3.03173 2.91452 3.20781 5.47983 4.24517 217 r - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 123 4.66549 6.56867 0.13049 3.73947 6.20930 4.51726 5.46620 6.15252 4.80154 5.54790 6.65359 4.31602 5.22661 4.77980 5.35908 4.57977 5.04873 5.69924 7.06132 6.05090 218 D - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 124 4.11594 5.30633 6.13178 5.57769 3.73657 5.59693 5.98457 1.50133 5.46568 0.67788 3.07617 5.76705 5.63423 5.36401 5.43088 5.00606 4.33175 2.14525 5.97972 5.01356 219 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 125 4.55719 6.24846 4.80697 4.34215 5.94023 4.73956 5.02576 5.52333 0.17090 4.86848 5.87217 4.66859 5.24422 4.23030 3.41495 4.59394 4.77093 5.20290 6.57866 5.65826 220 K - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 126 2.73388 4.87911 3.10327 2.90832 4.07991 3.41413 4.01646 3.20246 2.89177 2.38683 3.78561 3.39051 1.51394 3.22647 3.32105 2.31617 2.81372 3.19214 5.43675 4.15025 221 p - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 127 2.30763 5.39894 2.49711 1.50775 4.74209 3.53358 3.60730 4.22742 2.31483 3.70337 3.89187 2.94609 4.05547 2.65035 3.08133 2.29509 3.12215 3.78862 5.83238 4.42137 222 e - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 128 4.24075 6.04161 4.10323 4.13804 5.66046 4.44992 5.52992 5.77835 4.64675 5.26705 6.30900 0.15130 5.17553 4.91694 4.94682 4.32646 4.70552 5.25421 6.75952 5.61338 223 N - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 129 3.55135 3.88080 5.58388 5.03211 3.05772 4.93598 5.38843 0.81084 4.88763 1.84199 3.74557 5.09695 5.20522 5.02095 4.93631 4.29650 3.79207 1.75582 5.75938 4.60163 224 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 130 4.26500 5.46000 6.21355 5.61602 2.31085 5.64571 5.88455 2.68862 5.47780 0.52109 2.36789 5.81754 5.61663 5.25881 5.37169 5.03996 4.45544 2.72136 5.81387 4.88779 225 L - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 131 3.14725 3.80930 5.11896 4.51210 2.75868 4.35237 4.69393 1.48763 4.30885 1.32733 3.15909 4.51494 4.68518 4.42027 4.31553 3.67228 3.37834 1.91515 5.14039 3.60311 226 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 132 2.83132 4.28838 2.02200 2.41335 4.70055 3.12743 3.31546 4.17875 2.06503 3.46693 4.09733 2.49326 4.05387 2.94892 3.07895 2.27711 2.89161 2.90947 5.80603 4.40188 227 d - E 2.68620 4.42227 2.77521 2.73125 3.46356 2.40515 3.72496 3.29356 2.67743 2.69346 4.24692 2.90348 2.73741 3.18137 2.89794 2.37889 2.77521 2.98513 4.58479 3.61505 0.19179 2.92011 2.11536 0.31959 1.29625 0.48576 0.95510 133 2.77846 5.34345 2.73873 2.12504 4.68884 3.31622 3.10327 4.17503 2.07146 3.64885 4.14408 2.35495 3.55373 2.53396 2.68259 2.30312 2.80970 3.73426 5.77591 4.07717 229 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01122 4.89146 5.61380 0.61958 0.77255 0.46383 0.99121 134 2.76231 5.37627 2.40965 2.30431 4.72103 3.48860 3.46007 4.20680 2.15285 3.68141 4.41704 2.22463 3.54282 2.67483 2.66394 2.48608 2.48229 3.08661 5.80911 4.39830 230 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01030 4.97674 5.69908 0.61958 0.77255 0.42506 1.06054 135 2.88621 4.31580 2.58861 2.52891 4.00821 1.80604 3.64216 3.70404 2.55848 3.01103 3.82083 2.93142 3.28125 2.96153 3.15140 2.63196 2.92652 3.07947 5.65563 3.39061 231 g - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 136 2.74326 5.32913 2.62872 2.23118 4.20190 3.27586 3.01088 3.39612 2.54602 3.28443 3.99578 2.66732 4.06020 2.45230 2.82728 2.54748 2.65672 2.69485 5.77785 3.49295 232 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 137 2.61635 3.28525 4.16732 3.71739 2.98202 4.03403 4.34546 2.03775 3.50788 1.92540 3.47356 3.38535 3.11745 3.96570 3.52677 3.32696 2.46663 1.86856 4.97202 3.78516 233 v - E 2.68644 4.42087 2.77438 2.73125 3.46306 2.40580 3.72561 3.29182 2.67742 2.69394 4.24637 2.90298 2.73752 3.18209 2.89809 2.37898 2.77573 2.98487 4.58490 3.61464 0.36530 1.19470 5.73865 2.01193 0.14356 0.48576 0.95510 138 2.92386 3.12674 3.30583 2.50241 4.41812 3.73989 3.57074 3.83865 1.16713 3.42239 3.64701 3.25964 4.12762 3.06518 2.74407 2.94589 3.15200 3.22587 5.64420 3.71460 253 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 139 3.61791 5.07369 5.93139 5.42030 4.01697 5.40165 5.95563 1.06228 5.32659 1.08905 3.76387 5.56598 5.56723 5.42106 5.39317 4.81179 4.11011 1.74432 6.14737 5.05160 254 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 140 1.74479 2.79152 4.35686 3.77898 3.55350 2.78668 4.34505 2.08763 3.66685 2.55990 3.56128 3.98833 4.38080 3.89329 3.86150 2.46831 2.34811 2.41028 5.05799 3.86488 255 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 141 4.66549 6.56867 0.13049 3.73947 6.20930 4.51726 5.46620 6.15252 4.80154 5.54790 6.65359 4.31602 5.22661 4.77980 5.35908 4.57977 5.04873 5.69924 7.06132 6.05090 256 D - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 142 4.66482 5.73614 5.86239 5.64956 0.40883 5.43325 4.33355 3.86711 5.42110 2.16428 4.36705 5.11239 5.65371 5.16689 5.27011 4.83252 4.86624 3.98432 3.74189 2.69037 257 F - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 143 3.93699 5.85566 3.02816 3.87037 6.00993 0.21285 5.44927 5.75466 4.70121 5.27717 6.21696 4.31536 4.99427 4.76567 5.12629 4.02226 4.42780 5.10478 6.99282 5.96830 258 G - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 144 2.54355 3.67295 4.73868 4.13265 2.71576 4.06852 3.76754 2.37455 3.94756 1.20416 3.31174 3.74431 4.43365 4.10500 4.00521 2.64259 3.14725 2.29206 4.93223 3.75278 259 l - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03189 5.01631 3.69859 0.61958 0.77255 0.48576 0.95510 145 0.77520 2.86695 4.81978 4.47036 4.95592 3.15951 5.20700 4.36343 4.38394 4.08078 4.90451 4.25075 4.38058 4.58838 4.56864 1.45304 3.34905 3.34992 6.35477 5.22001 260 a - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07711 4.99453 2.69658 0.61958 0.77255 0.54567 0.86620 146 2.54977 3.79925 3.16699 2.32606 4.48674 3.31547 3.84408 3.47518 1.75582 3.12339 4.25869 2.84258 4.04145 2.96441 2.18943 2.71334 2.91887 2.95414 5.67187 4.30075 261 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.13472 4.92824 2.13029 0.61958 0.77255 0.70219 0.68419 147 2.64685 3.78445 3.06669 2.61534 3.32325 3.67596 3.69246 3.14713 2.01231 2.43193 3.43451 3.16113 4.06301 2.47274 3.08778 2.74475 2.84906 2.65428 5.37440 4.07606 262 k - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.29473 4.80574 1.39802 0.61958 0.77255 0.92027 0.50818 148 2.40579 4.15423 4.25399 3.66267 2.39272 3.57693 3.44550 2.33935 3.03827 1.86796 2.97007 3.83355 4.18573 3.73297 3.67827 3.10851 2.93289 2.21754 4.76738 2.96352 263 l - . 2.68635 4.42219 2.77489 2.73146 3.46367 2.40530 3.72500 3.29419 2.67720 2.69370 4.24630 2.90362 2.73727 3.18122 2.89818 2.37860 2.77478 2.98583 4.58472 3.61420 0.77167 0.63015 5.24955 1.50734 0.25038 0.20147 1.70117 149 2.68930 5.13793 2.99383 2.28756 4.12167 3.02811 3.40047 2.83046 2.53990 2.67433 3.91490 2.66806 3.85841 2.95123 3.08518 2.54554 2.43488 3.14237 4.83794 3.11842 281 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 150 2.67960 3.59834 3.08049 2.32634 4.00400 2.85568 3.65072 3.26198 2.22635 2.80014 3.89773 3.03566 3.90780 2.84131 2.77630 2.59674 2.54121 2.94346 4.66327 3.60288 282 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 151 2.78407 5.36932 2.80723 2.38070 3.95652 3.28210 3.31902 3.80407 2.38757 3.23090 4.41260 2.26860 2.87333 2.94776 2.55475 2.11230 2.82314 3.31603 5.80800 4.40313 283 s - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 152 2.55066 5.37311 2.42428 2.58328 4.70981 2.65546 3.66067 3.46611 2.34139 3.39818 4.41598 2.44705 3.58966 2.48003 2.87086 2.30355 2.92043 3.58081 5.81084 3.32103 284 s - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 153 2.61131 5.36709 3.05324 2.00706 4.70125 2.53001 3.45141 4.17959 2.46541 3.54879 4.41063 3.13225 3.27183 2.67970 2.77280 2.14590 2.62504 2.97295 5.80635 3.79465 285 e - S 2.68619 4.42226 2.77520 2.73124 3.46320 2.40514 3.72495 3.29355 2.67742 2.69356 4.24691 2.90348 2.73740 3.18147 2.89802 2.37888 2.77520 2.98519 4.58478 3.61504 0.03620 3.43177 5.73865 0.40966 1.09027 0.48576 0.95510 154 2.80870 4.76397 2.82688 2.35901 3.53520 3.31737 3.24083 3.53679 2.31494 2.98485 3.52265 2.69923 3.15465 2.90046 2.56489 2.40361 2.83318 3.04461 5.74293 3.76697 287 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 155 2.38638 3.55872 3.84850 3.27925 3.07902 3.89951 3.49984 3.07191 2.87600 2.13071 2.79826 2.94436 3.28103 3.24012 3.30127 2.77627 2.52689 2.66914 5.17020 2.84075 288 l - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 156 2.88266 4.79637 2.63708 2.49106 4.69372 3.27452 3.02757 4.17056 2.31920 3.54781 3.84892 2.54158 3.83133 2.71114 2.83815 2.34796 2.07167 3.53868 4.84477 3.26548 289 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 157 2.55115 5.22307 2.81541 2.42597 3.84088 2.72211 3.45978 3.70939 2.65113 3.50012 4.03956 3.00145 3.26637 2.92366 3.12986 2.10982 2.09681 2.95270 4.42058 4.32902 290 t - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 158 2.79383 4.53543 3.94528 3.00256 2.28876 3.25886 4.19260 2.53698 3.31063 2.13485 3.51266 3.25465 3.61933 3.02975 2.60672 3.04108 3.13630 2.22820 5.12884 3.03437 291 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 159 2.54133 2.27249 3.62507 3.14565 3.48798 3.47382 4.20805 2.87324 3.24770 2.61629 3.62417 3.76153 4.31084 3.45605 3.15192 3.19594 2.77273 1.44309 5.11140 3.89714 292 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 160 2.50560 4.02210 4.21483 3.69251 4.03927 0.87585 4.50859 3.18042 3.62456 3.12203 4.01557 3.91946 4.34666 3.89680 3.91281 2.66630 3.23503 2.52015 5.49804 3.97346 293 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 161 2.98792 5.00679 3.18026 3.47531 5.09253 3.65988 4.75357 4.53531 3.72802 4.18133 4.99276 3.79669 4.37930 3.97717 4.12874 1.60941 0.74054 3.97784 6.39182 5.11951 294 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 162 2.69840 5.26022 3.00961 2.31122 4.20998 3.68086 3.63617 3.20701 2.41779 2.58849 4.31499 2.98486 2.62271 2.99075 2.13729 2.36313 3.11573 3.42385 5.72545 3.54571 295 r - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 163 2.71301 5.29924 2.59488 2.14743 3.52695 3.04037 3.28275 4.06670 2.61594 3.34508 4.35002 2.84026 3.31113 2.97459 2.36266 2.86533 2.70674 3.41928 3.03699 3.23042 296 e - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 164 4.65993 5.73598 5.69662 5.49898 1.97465 5.32012 3.31709 4.36240 5.29326 3.66395 4.92323 4.93743 5.59573 5.06816 5.17473 4.69695 3.41633 4.25844 2.61302 0.51590 297 Y - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 165 2.46851 3.63596 4.34730 3.76113 3.49978 4.00900 4.30977 2.55613 3.41377 2.11254 1.89168 3.40620 4.37893 3.86942 2.23584 3.08926 3.14320 2.13937 5.00600 3.81292 298 m - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 166 0.54633 4.79516 4.59072 4.34047 5.33605 3.22550 5.27451 4.80651 4.37656 4.47607 5.24769 4.21379 3.02084 4.58677 4.60871 1.81435 3.40538 4.05386 6.66459 5.53199 299 A - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 167 3.08666 5.02380 4.02349 3.92167 5.10908 3.73669 5.07487 4.62556 4.04836 4.33998 5.22795 3.34786 0.41351 4.38870 4.30726 3.26072 3.60085 3.40472 6.47905 5.20179 300 P - H 2.68622 4.42144 2.77523 2.73111 3.46358 2.40517 3.72498 3.29358 2.67745 2.69359 4.24694 2.90351 2.73743 3.18126 2.89786 2.37891 2.77523 2.98522 4.58481 3.61507 0.03484 3.47295 5.73865 0.99675 0.46057 0.48576 0.95510 168 3.66837 6.19086 2.84947 0.45189 5.55161 3.90523 4.43200 5.09782 3.30487 4.55035 5.42336 3.03786 4.53514 3.60153 3.37398 3.54999 3.95969 4.65772 6.64024 5.17650 305 E - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 169 2.79774 4.32598 4.68241 3.67608 3.42171 4.06471 4.38713 2.01470 3.90321 1.87174 3.44282 4.15860 4.43014 3.77035 3.25202 3.36713 2.95239 1.31877 3.77234 3.76466 306 v - H 2.68603 4.42242 2.77519 2.73104 3.46342 2.40506 3.72511 3.29371 2.67728 2.69322 4.24707 2.90364 2.73756 3.18163 2.89801 2.37893 2.77519 2.98535 4.58494 3.61520 0.12919 2.22240 4.35495 1.23224 0.34480 0.48576 0.95510 170 2.91184 3.76308 4.76588 4.15799 3.39752 4.06920 3.82796 1.60071 3.96642 1.39613 3.17824 3.65225 4.43387 4.11848 4.01348 2.94594 3.14403 2.21737 4.92444 3.43929 311 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00999 5.00664 5.72898 0.61958 0.77255 0.51297 0.91308 171 2.62785 5.06480 3.29796 2.67561 3.73804 3.41086 3.92577 3.21358 2.32640 2.15096 3.31180 2.55443 4.11004 2.47045 2.33927 2.70318 3.11578 3.12852 5.57146 4.24107 312 l - C 2.68631 4.42245 2.77511 2.73076 3.46350 2.40522 3.72547 3.29356 2.67765 2.69366 4.24573 2.90389 2.73738 3.18142 2.89826 2.37846 2.77520 2.98520 4.58530 3.61473 0.62427 1.87899 1.16602 1.98855 0.14722 0.46912 0.98231 172 2.60166 5.18307 2.62016 2.19793 3.35206 2.39740 3.57105 3.96340 2.18128 3.47543 4.23188 3.01161 3.92489 2.82990 2.86326 2.33987 2.67701 3.55746 5.63416 3.78538 327 k - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01428 4.65191 5.37425 0.61958 0.77255 0.24611 1.52250 173 2.37600 3.94341 2.81761 2.45806 4.08381 2.38833 3.32666 4.15213 2.47322 3.64753 4.39446 2.71786 3.74359 2.39493 2.76163 2.38666 3.00597 3.01776 5.79219 3.82026 328 a - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00998 5.00778 5.73012 0.61958 0.77255 0.47101 0.97916 174 2.81816 4.87774 2.88922 2.34131 3.91699 3.47934 3.84840 3.76601 2.22767 3.10881 4.41163 2.46519 2.75598 2.51039 2.43545 2.43680 2.76354 3.54179 5.80719 3.84984 329 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 175 2.74169 5.33416 2.58184 2.32653 3.61666 2.33545 3.50275 4.12419 2.36762 3.50261 3.56274 2.91332 3.07814 2.74477 2.96926 2.79421 2.92848 3.32496 5.78164 2.72284 330 e - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 176 2.48397 4.72191 2.72922 2.94719 3.45604 3.83733 2.73484 2.72590 3.03376 2.94128 3.81928 3.51045 4.21965 3.13222 3.31573 2.84267 3.12967 2.71705 3.94971 1.76193 331 y - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 177 2.88858 5.15756 2.48812 2.69267 3.68939 2.20273 3.90720 3.84889 2.69072 3.17648 4.22648 3.21985 3.19313 3.04303 3.16266 2.07644 2.02474 3.50391 5.64990 3.69862 332 t - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 178 2.44412 5.27089 3.18567 2.52594 4.01181 3.49400 3.20300 3.68711 2.26882 2.99802 4.32458 3.16791 2.73532 2.67304 2.47574 2.35896 2.41445 3.31659 5.73361 3.79657 333 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 179 2.27957 5.36842 3.14470 2.24142 4.70283 3.35867 3.70433 4.18054 1.84880 3.00297 4.41216 3.13478 2.50109 2.87247 2.49374 2.50485 2.88881 3.75338 5.80713 4.40386 334 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 180 2.25487 3.19836 3.67383 3.53894 3.58335 3.60706 4.24810 2.30247 3.45618 2.57768 3.58074 3.40343 4.33674 3.48890 3.71724 2.25302 2.94661 1.56396 5.07167 3.86608 335 v - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 181 3.32488 6.23611 0.30142 2.99559 5.85936 3.97225 4.81661 5.46625 4.07634 5.00781 5.98660 3.57219 4.70996 4.04099 4.76451 3.76774 4.26196 4.95940 7.04785 5.56474 336 D - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 182 2.97530 4.34655 4.92112 4.31006 3.42469 4.15298 4.48903 1.67409 4.10270 2.14170 2.44181 4.30839 4.51041 4.23558 4.11915 3.46567 2.80277 1.45020 3.28394 3.56694 337 v - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 183 4.60767 5.71652 5.61554 3.89031 2.18526 5.28181 4.15190 4.32304 5.18037 3.62888 4.88484 4.90634 5.56392 5.01906 5.10312 4.65700 4.81381 4.22147 0.60655 1.74323 338 W - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 184 1.30551 4.78823 4.65738 4.37945 5.36630 2.58206 5.28849 4.84019 4.38318 4.50739 5.27020 4.22569 4.39579 4.59600 4.61395 0.79404 2.89139 4.06528 6.68751 5.56026 339 s - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 185 2.44153 3.17932 4.87400 4.25972 2.53121 4.09082 4.42403 2.33144 4.04748 1.34403 2.92510 4.24940 4.45392 4.18053 4.05982 3.14600 3.15398 2.13810 4.92017 3.14864 340 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 186 2.22507 4.96728 4.63623 4.63233 5.66307 0.33314 5.62287 5.16416 4.86793 4.86816 5.66661 4.43512 4.57282 5.01497 4.99264 3.26151 3.63533 4.32703 6.92990 5.89905 341 G - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 187 2.93009 2.13614 4.95885 4.35253 3.48038 4.19799 4.54424 1.68794 4.14925 1.93394 3.18432 4.35359 4.55452 4.28834 4.17024 3.34008 3.23972 1.60527 5.03746 3.47367 342 v - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 188 3.21831 4.55127 5.17022 4.58630 3.70338 4.47717 4.86313 1.30610 4.40976 1.92114 2.79907 4.62299 4.81179 4.56490 4.45688 3.52794 2.67243 1.42404 5.34369 4.16408 343 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 189 2.77853 3.56970 4.91220 4.29933 2.66878 4.13468 4.46922 2.12981 4.08926 1.13811 3.14072 4.29275 4.49323 4.21981 4.10205 3.44689 2.88537 2.20246 4.95897 3.46211 344 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 190 2.08301 4.31008 4.80905 4.20025 2.66597 4.08391 3.54227 2.07553 4.00182 2.35024 3.19529 4.21899 4.44796 4.14611 4.03654 3.39206 3.15615 2.32332 2.91148 1.86433 345 y - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 191 2.65126 3.79080 3.03118 1.37895 4.54227 3.68257 3.87660 3.27048 2.56225 3.53374 4.30787 2.88399 4.07460 2.72714 3.11894 2.49943 2.86114 3.20681 5.71940 3.61825 346 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 192 2.75949 4.33120 4.86063 4.24972 2.93412 4.11800 4.44873 2.58063 4.04775 1.34098 1.86205 4.26240 4.47769 4.18564 4.07448 3.30982 2.87183 2.17494 4.95131 3.25026 347 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 193 2.13730 3.34433 4.84746 4.23449 2.67079 4.08305 4.41495 2.45417 4.02682 1.45586 2.95446 4.23448 4.44687 4.16424 3.65241 3.39295 2.78239 2.10310 4.91833 3.10946 348 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 194 2.61714 3.04119 3.51958 2.50105 3.16562 3.44068 4.02999 3.26384 2.78703 2.46125 3.90521 2.94061 4.18669 3.26384 2.94427 2.45451 1.92365 2.96026 5.36672 3.77569 349 t - H 2.68592 4.42131 2.77530 2.73134 3.46364 2.40523 3.72505 3.29364 2.67751 2.69365 4.24624 2.90357 2.73750 3.18157 2.89769 2.37886 2.77510 2.98507 4.58487 3.61513 0.08274 2.77459 4.07273 1.24373 0.34011 0.48576 0.95510 195 2.74009 5.38236 2.60734 2.58658 4.30151 1.49346 3.57775 4.19577 2.06867 3.68256 4.42710 2.84258 4.06100 2.86136 2.79826 2.78642 3.12785 3.76776 5.82019 4.41533 355 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02515 5.00240 4.01100 0.61958 0.77255 0.52459 0.89600 196 2.87057 4.15783 2.81932 2.15097 3.67482 3.00161 3.44561 3.53712 2.01194 3.52030 4.39830 2.84675 4.04172 2.62971 2.18111 2.65254 2.90372 3.46034 5.79407 3.92999 356 k - S 2.68632 4.42239 2.77496 2.73101 3.46368 2.40527 3.72508 3.29339 2.67739 2.69369 4.24616 2.90361 2.73734 3.18160 2.89815 2.37901 2.77533 2.98486 4.58491 3.61430 0.06990 2.74572 5.70978 1.46974 0.26135 0.43968 1.03351 197 2.53761 4.57755 3.85895 3.05555 3.06219 3.90225 3.89097 2.90555 3.23603 1.98376 3.43681 3.14844 2.18635 3.28921 3.56902 2.76101 2.38583 2.48063 5.16546 3.65117 363 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 198 2.94035 4.49377 4.16973 3.59341 3.59928 3.99457 4.28692 2.57573 3.48228 2.11382 3.59630 3.88641 1.19333 3.75706 3.46613 3.08341 3.17527 2.51467 5.10025 3.66586 364 p - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 199 2.95410 3.97958 4.76382 4.16399 1.23466 4.10162 4.38107 2.78567 3.65586 2.19089 3.46719 4.20671 3.78920 4.13156 4.03525 3.25126 3.18603 2.50296 2.73984 2.86766 365 f - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 200 2.72297 4.82530 2.62940 2.35446 3.83755 3.31971 3.71413 4.17131 2.26174 3.54363 4.14174 3.02369 2.60946 2.49179 2.66057 2.21727 2.99115 3.74587 4.55596 3.10965 366 s - S 2.68620 4.42227 2.77522 2.73112 3.46340 2.40515 3.72496 3.29334 2.67743 2.69357 4.24692 2.90349 2.73742 3.18148 2.89803 2.37889 2.77522 2.98520 4.58479 3.61505 0.07731 2.84051 4.13492 0.30572 1.33404 0.48576 0.95510 201 2.63880 5.38435 2.63657 2.22720 4.72697 1.94780 3.15235 3.87964 2.57669 3.68860 4.42577 2.57921 3.16991 2.74291 2.86900 2.50219 2.85278 3.77370 5.81843 4.40865 368 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 202 2.40102 4.71375 2.46996 2.13243 4.71840 3.11745 3.05416 3.48265 2.25142 3.16134 4.41932 2.93828 3.25177 2.60824 2.79040 2.58260 2.90071 3.38079 5.81277 4.40438 369 e - S 2.68658 4.42180 2.77453 2.73123 3.46394 2.40505 3.72421 3.29333 2.67765 2.69382 4.24730 2.90354 2.73686 3.18110 2.89829 2.37906 2.77522 2.98525 4.58428 3.61543 0.55463 1.48984 1.60791 1.39890 0.28351 0.52175 0.90012 203 2.69338 5.29005 2.51143 2.25105 4.62988 2.84270 3.49832 3.48405 2.27737 3.31427 4.33211 2.56706 3.20350 2.85310 2.67590 2.21378 2.73620 3.67787 5.72586 4.31806 375 s - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01250 4.78398 5.50633 0.61958 0.77255 0.95212 0.48763 204 2.65942 5.19894 2.69156 2.28179 3.77027 3.19251 3.77484 3.06173 2.43464 2.99400 3.94013 2.58274 3.44930 2.63512 2.62020 2.46578 2.71730 3.35179 5.65696 3.80565 376 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01250 4.78398 5.50633 0.61958 0.77255 0.77169 0.62033 205 2.38920 5.21254 2.73488 2.26876 4.51445 3.29559 3.03245 3.05648 2.42252 2.83088 3.97624 2.72691 3.66747 2.74292 2.65924 2.79642 2.87825 3.04317 5.67196 3.47007 377 e - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01186 4.83615 5.55849 0.61958 0.77255 0.33713 1.25111 206 2.65422 4.48489 1.88534 2.29942 4.71042 3.12833 3.84224 3.67843 2.58000 3.67468 4.41498 2.22848 4.04754 2.86157 2.64414 2.33478 2.73698 3.75923 5.80928 4.40246 378 d - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 207 2.52228 5.35256 2.79874 2.27245 4.68298 3.15080 3.25420 3.81263 2.42135 3.03021 2.98061 3.02733 3.41549 2.09266 2.89624 2.43800 3.03420 3.22791 5.79412 4.39217 379 q - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 208 2.88352 5.03264 3.01718 2.64158 3.36791 3.41419 3.67586 2.82361 2.46533 2.06980 3.25199 2.87105 3.91016 2.67457 2.54739 2.67076 3.11488 3.35644 5.54543 3.24074 380 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 209 2.31106 5.21929 3.20358 2.11286 3.58411 3.54755 3.12693 3.74178 2.35878 3.37262 4.27754 3.18132 3.64073 2.21825 2.83044 2.63943 3.03559 2.71879 4.50670 3.34948 381 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01003 5.00344 5.72579 0.61958 0.77255 0.46390 0.99109 210 2.74907 4.02445 4.23598 3.43708 3.16042 3.98772 3.66116 2.29352 2.78065 1.91975 2.65717 3.64306 4.00461 3.79624 2.62994 3.12682 2.72367 2.05105 5.03295 3.83444 382 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 211 2.79706 4.32223 4.14412 4.07508 2.44930 4.05985 3.54709 1.67401 3.90204 2.17979 2.94629 3.31750 4.42562 4.07034 3.98057 2.91878 2.88141 2.01026 4.94063 2.95520 383 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 212 2.43063 3.51667 2.84063 2.33381 3.23751 3.53757 3.64461 3.61354 2.52297 3.04234 3.80037 3.02528 3.31294 2.77439 2.36706 2.71893 3.04140 2.71650 5.64517 3.47973 384 e - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 213 2.54995 5.35768 3.14585 2.23433 4.68798 3.33616 3.38625 3.80986 2.09254 2.85705 3.68757 2.56176 4.05535 2.40160 2.38927 2.57618 3.04385 3.36418 5.79929 3.79887 385 k - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 214 2.66499 5.02053 2.80345 2.59207 4.23983 3.19081 3.94632 1.95336 2.43621 2.96229 3.77095 2.92719 4.12615 3.11304 2.86357 2.94448 2.42822 2.54184 5.53679 4.21766 386 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 215 2.79062 4.84420 3.48859 2.83007 4.02200 3.06268 4.01637 2.98055 2.36084 1.68419 3.06982 3.40535 3.56488 2.89781 2.78978 2.64270 2.97298 2.81255 5.39215 4.11258 387 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 216 2.78422 4.40067 2.87114 2.38957 4.66317 2.42774 3.11725 3.68493 2.29738 3.11118 3.80555 3.07548 3.38861 2.66839 2.52841 2.36297 2.74889 3.71883 4.85618 3.72852 388 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04975 5.01631 3.17248 0.61958 0.77255 0.48576 0.95510 217 2.55009 3.88585 3.08502 2.47179 4.52328 2.60499 3.86026 3.74333 2.31088 3.21633 3.94275 3.03087 2.50945 2.97834 2.41589 2.69163 2.38722 3.38360 5.70135 4.11095 389 k - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01030 4.97686 5.69921 0.61958 0.77255 0.59090 0.80705 218 2.71816 5.35510 2.47492 2.28903 4.69101 3.44039 3.67059 2.92462 2.15295 3.03900 4.39818 2.98975 2.40750 2.74839 2.76016 2.49540 2.85213 3.74081 5.79327 4.38792 390 k - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02103 4.97686 4.27462 0.61958 0.77255 0.59090 0.80705 219 2.59242 4.56547 3.37418 3.24570 3.28039 3.87349 3.78552 2.80260 2.91515 1.85640 3.67045 2.94464 3.03710 3.48913 3.31352 2.93163 2.57101 2.12270 4.60315 3.29903 391 l - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01041 4.96623 5.68858 0.61958 0.77255 0.61678 0.77584 220 2.76552 5.35116 2.75065 2.09233 4.26840 3.39661 3.23930 3.45666 2.13782 2.93921 3.69074 2.78256 2.85112 2.85423 2.61182 2.41762 3.01864 3.73701 5.78920 4.16743 392 e - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01041 4.96623 5.68858 0.61958 0.77255 0.61678 0.77584 221 2.56616 4.88573 3.26662 2.33696 2.41520 3.27403 3.41068 2.92250 2.70761 2.68623 3.97070 3.19787 3.38122 3.16656 2.79903 2.47364 2.99470 2.86843 4.82552 3.32054 393 e - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01041 4.96623 5.68858 0.61958 0.77255 0.61678 0.77584 222 2.62567 5.35084 2.04845 2.35215 4.39252 3.47212 3.16243 3.98892 2.45186 3.65226 3.66396 2.66846 2.63580 2.82810 3.05661 2.22708 2.99549 3.54011 5.78899 3.92777 394 d - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03667 4.96623 3.53930 0.61958 0.77255 0.61678 0.77584 223 2.86103 4.03193 3.18635 2.38909 3.31435 3.61153 3.49109 2.70908 2.69769 2.69388 3.88535 3.22191 3.67076 3.11276 2.73635 2.49324 3.00545 2.72730 2.94731 2.96802 395 e - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01875 4.94025 4.47244 0.61958 0.77255 0.67631 0.71028 224 2.62521 5.12447 2.77972 2.44738 3.31605 3.53418 3.86652 3.33309 2.47319 3.03557 4.18886 3.10134 2.42408 2.60018 2.70100 2.64509 2.92363 3.22521 3.41935 3.46519 396 p - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.05901 4.93227 2.99396 0.61958 0.77255 0.69360 0.69269 225 2.68343 5.20702 2.88582 2.22963 3.55567 3.45903 3.65367 3.49248 2.11994 2.97314 4.26172 2.80968 3.57686 2.44336 3.06162 2.53581 2.67303 3.18308 3.73101 3.66292 397 k - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01130 4.88456 5.60691 0.61958 0.77255 0.78866 0.60597 226 2.68707 4.98468 2.82158 2.38405 3.75917 3.36024 3.65392 3.18317 2.38508 2.73942 3.76303 3.22111 3.36652 3.04584 2.96704 2.31757 2.64759 2.95752 3.21600 3.40268 398 s - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.11345 4.88456 2.30573 0.61958 0.77255 0.78866 0.60597 227 2.79298 3.84213 2.48108 2.52210 3.99851 3.60747 3.12972 3.13545 2.48018 3.05991 4.13768 2.83211 3.54520 2.93964 2.41588 2.35619 2.76810 2.97839 5.56015 3.44494 399 s - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02807 4.78362 3.94704 0.61958 0.77255 0.95264 0.48731 228 2.58191 4.56682 2.77742 2.37170 4.46635 3.58143 3.77449 3.50815 2.36445 2.67587 4.22448 2.86502 2.73607 2.80387 2.79297 2.07848 2.75446 3.53442 5.63386 3.74575 400 s - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.14447 4.76826 2.07130 0.61958 0.77255 0.97412 0.47405 229 2.74120 5.02625 2.90214 2.38037 3.96892 2.81361 3.75340 3.09744 2.29181 2.85276 3.79351 2.85134 3.31773 2.88600 2.57247 2.48932 2.74923 2.81409 5.51153 4.15648 401 k - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02950 4.63827 3.94280 0.61958 0.77255 1.12880 0.39071 230 2.65814 5.03703 2.72915 2.44094 4.30481 3.19996 3.74471 3.73960 2.51991 2.72378 3.12113 3.05398 2.98987 2.79382 2.49179 2.12708 2.96796 3.38544 5.51898 3.52938 402 s - . 2.68724 4.42293 2.77612 2.73159 3.46162 2.40699 3.72369 3.29398 2.67731 2.69321 4.24701 2.90285 2.73662 3.18257 2.89624 2.37860 2.77511 2.98573 4.58252 3.61251 0.60323 0.80254 5.34581 2.99471 0.05135 0.22221 1.61320 231 2.51767 5.38833 2.69504 1.91983 4.73145 3.65677 3.84405 3.51135 2.26714 3.33248 4.42951 2.74739 2.83044 2.63263 2.69535 2.26534 2.89575 3.77792 5.82218 4.12814 442 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 232 2.61324 5.33087 2.55247 1.71577 3.78905 3.51981 3.85697 4.11872 2.53837 3.37618 3.68276 2.71899 3.50504 2.96215 2.76975 2.43182 2.62759 3.19721 4.83386 4.08215 443 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 233 1.85315 2.66076 4.74963 4.14369 2.72361 2.76389 4.40211 2.66580 3.95769 1.60680 3.08425 4.19191 4.43908 4.11400 4.01342 3.37949 2.94810 2.35782 4.93743 3.75833 444 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 234 2.54113 3.93957 3.31567 2.58263 3.59686 3.36801 3.93655 2.84244 1.77469 2.55244 4.12290 3.02474 4.11900 2.54032 2.70090 2.93506 2.79964 3.23719 5.55956 3.97978 445 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 235 2.66035 5.38903 1.80529 2.16718 4.22724 3.25823 3.17680 4.00903 2.28647 3.50730 4.43018 2.97613 4.05032 2.48614 2.98498 2.31241 3.11375 3.77870 5.82277 3.97909 446 d - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 236 3.21254 4.56529 5.14365 4.53738 1.97526 4.40976 4.73239 2.19759 4.34073 1.04052 3.41232 4.55986 4.72994 4.44093 4.35221 3.72900 3.00622 2.20314 5.16040 3.53582 447 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 237 2.97518 4.05135 5.35921 4.78478 3.77817 4.66169 5.06989 1.35059 4.61468 1.50253 2.60400 4.82061 4.97178 4.75525 4.65269 4.00168 3.59517 1.52175 5.50364 4.33590 448 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 238 2.63113 4.16111 2.70523 2.01221 4.32546 2.89528 3.69801 3.91463 1.97992 3.37990 4.41866 2.72468 4.05215 2.88390 2.65380 2.44936 2.78930 3.52828 5.81309 3.68713 449 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 239 2.79532 4.56741 2.59886 2.26653 4.72524 2.97326 3.84498 4.20852 1.87988 3.68761 4.42563 2.67816 4.05093 2.72680 2.26697 2.39445 3.11354 3.44147 4.06926 3.70096 450 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 240 2.76031 1.91137 4.93344 4.32897 3.47342 4.21043 4.55379 2.12811 4.13437 1.60981 2.11111 4.35327 4.56463 4.27495 4.16872 3.52442 2.73881 2.49904 5.05160 3.88034 451 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 241 3.00579 3.43594 4.91160 4.30236 2.88535 4.17356 4.48924 2.41412 3.62991 0.97514 3.41700 4.31537 4.52645 4.23058 4.12367 3.48482 3.23680 2.59853 2.70167 3.78558 452 l - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 242 2.51291 3.86266 2.42773 2.26878 4.71076 3.65927 3.14908 3.51790 2.32370 3.67561 4.41657 2.44903 4.05255 2.58104 2.64695 2.72413 2.48024 3.27065 5.81133 3.77060 453 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 243 2.89024 4.99098 3.22187 2.69841 3.16242 3.74556 3.43367 3.45008 2.12873 2.47972 3.65551 3.30484 3.00902 2.69329 2.47140 2.87653 2.77051 2.80352 4.74384 3.09104 454 k - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 244 2.75442 4.59220 1.48443 2.55169 4.69407 3.66624 3.85987 4.16899 2.26580 3.66358 4.41104 2.16093 4.06270 2.96232 2.94350 2.69711 3.00639 3.21953 5.80766 4.40610 455 d - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 245 2.53666 4.51809 3.31495 2.50094 3.81458 3.47863 3.66745 3.68842 2.74796 3.30408 3.76297 2.90283 1.45947 2.98944 2.97069 2.84711 3.12065 2.90248 5.56105 4.23506 456 p - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 246 2.18867 5.36299 2.90524 2.21328 4.32931 3.53924 3.49382 3.97251 2.24621 3.14962 3.99253 2.78034 3.78478 2.54072 2.85251 2.30318 2.70173 3.25844 5.80328 3.47734 457 a - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 247 2.48590 4.36945 2.67418 2.22639 4.72760 3.65776 3.84501 4.21118 1.68322 3.11616 4.42723 3.02530 4.05117 2.52411 2.40832 2.54354 2.78662 3.77464 5.82017 4.41136 458 k - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 248 3.97870 5.88109 4.77637 3.79584 5.10245 4.51923 4.26030 4.68907 2.25479 4.07008 4.99673 4.06985 4.83329 3.42182 0.45649 3.98836 4.07883 4.42272 3.45519 4.78623 459 R - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 249 2.59820 4.04607 4.60274 4.00452 3.26886 3.61184 4.36773 2.06089 3.84570 1.56372 3.45362 4.11687 2.06890 4.02734 3.95003 2.68390 3.14561 2.58630 4.40258 3.38622 460 l - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04987 5.01631 3.16967 0.61958 0.77255 0.48576 0.95510 250 2.79362 5.19179 3.01710 2.75300 4.64905 2.77281 4.01085 4.10036 2.79939 3.46822 4.43166 2.61914 4.12461 3.14023 3.27668 1.68833 1.53351 3.69065 5.84113 4.47617 461 t - T 2.68631 4.42192 2.77519 2.73130 3.46353 2.40482 3.72508 3.29367 2.67738 2.69360 4.24703 2.90360 2.73753 3.18148 2.89804 2.37867 2.77518 2.98532 4.58490 3.61498 0.12278 2.37863 3.77824 1.17468 0.36950 0.42506 1.06054 251 1.47902 3.78300 4.72209 4.11644 2.74562 3.65840 4.38345 2.02614 3.93274 2.07959 3.21794 4.17061 3.49702 4.09137 3.99270 2.98272 3.05871 2.38788 4.48487 3.74373 467 a - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01009 4.99737 5.71972 0.61958 0.77255 0.53813 0.87669 252 2.38222 4.71734 2.84513 2.05232 4.42547 3.25385 3.43556 4.19285 2.14440 3.09056 3.51596 2.80436 3.18490 2.67888 2.63294 2.69832 2.67125 3.58577 5.80764 4.40015 468 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01009 4.99737 5.71972 0.61958 0.77255 0.45436 1.00747 253 2.65797 4.06542 2.63237 1.57032 4.71890 3.65831 3.45654 4.20087 2.52289 3.68238 4.00276 3.00654 3.59507 2.12286 2.86428 2.58695 3.11362 3.45316 5.81563 3.91003 469 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 254 1.93383 3.77543 4.87213 4.26567 3.27005 3.35948 4.48352 1.60295 4.06924 1.71770 3.29328 4.28554 4.50523 4.21524 4.10410 3.45599 3.20183 2.00553 4.99383 3.81574 470 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 255 2.91099 3.35807 4.39311 3.80506 3.12662 3.41984 4.32058 2.74098 2.62412 1.35983 2.89439 3.70896 4.38574 3.55146 3.43970 3.02120 3.14303 2.30767 4.99433 3.18557 471 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 256 2.62697 4.23577 2.94369 2.01671 4.73311 3.52212 3.12192 4.21804 1.98366 3.41966 4.43054 2.33684 4.05005 2.29561 2.80226 2.65814 2.90658 3.41449 5.82302 4.41298 472 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 257 2.67425 5.24257 2.69003 2.64384 4.09422 3.68496 1.59772 3.97575 2.52719 3.06621 3.97630 3.17995 4.07682 2.88982 2.86815 2.31165 2.78826 3.60139 5.71188 4.10399 473 h - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.18941 5.01631 1.79622 0.61958 0.77255 0.48576 0.95510 258 2.81850 5.23743 2.76502 2.35780 4.54654 3.39495 3.79640 3.57339 2.36240 3.35446 4.28834 3.08690 1.61434 2.83455 2.79066 2.56844 3.04975 3.37601 5.69198 4.30446 474 p - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01183 4.83873 5.56107 0.61958 0.77255 0.86853 0.54398 259 3.22678 4.58175 4.94227 4.40609 1.73776 4.31983 4.20406 3.01156 4.21650 2.23279 3.33965 4.33985 4.66520 3.80636 4.24184 3.63704 3.45535 2.61441 1.69956 1.91736 475 w - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01183 4.83873 5.56107 0.61958 0.77255 0.30436 1.33787 260 2.99670 4.36610 4.95290 4.33956 1.72799 3.71830 4.50360 1.92619 4.12878 1.69258 2.79907 4.33234 4.52551 4.25179 4.13733 3.48573 3.22794 1.98896 4.25850 3.81122 476 l - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00667 5.01308 * 0.61958 0.77255 0.00000 * // hmmer-3.1b2/tutorial/Pkinase.hmm0000664361611702660230000035521412473612615016244 0ustar wheelerteddyHMMER3/e [3.0 | March 2010] NAME Pkinase ACC PF00069.17 DESC Protein kinase domain LENG 260 ALPH amino RF no CONS yes CS yes MAP yes DATE Thu Jun 16 11:44:06 2011 NSEQ 54 EFFN 3.358521 CKSUM 3106786190 GA 70.30 70.30 TC 70.30 70.30 NC 70.20 70.20 STATS LOCAL MSV -10.7215 0.70254 STATS LOCAL VITERBI -11.6541 0.70254 STATS LOCAL FORWARD -5.2305 0.70254 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.60017 4.19886 2.94089 2.63789 3.35087 2.89119 3.48337 2.79435 2.60265 2.43454 3.62613 3.06133 3.41286 3.09693 2.94507 2.65650 2.87761 2.67871 4.54052 3.43274 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.00000 * 1 2.91704 4.31028 4.76351 3.63148 2.10912 3.47710 4.39734 2.27639 3.96619 1.99282 3.42844 4.19567 4.43771 4.11903 3.67403 3.22736 3.14918 2.35905 3.32515 1.82622 1 y - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 2 2.77204 4.20708 3.06476 1.97968 4.66603 3.66509 3.19858 3.37903 2.25347 3.34018 4.38833 2.97180 4.05804 2.36838 2.43173 2.67542 2.50268 2.83403 5.78758 4.38976 2 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 3 2.90076 4.04294 3.31590 2.80413 3.08157 3.87481 4.12616 2.18958 2.49735 1.97194 3.73714 3.32717 3.98753 3.23115 3.12315 2.99137 2.62008 2.29426 5.21478 3.75979 3 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 4 2.89383 4.85429 3.10311 2.63174 3.71383 2.56808 3.47232 2.82076 2.61844 1.98342 3.72320 3.05498 4.17347 3.05527 3.32194 2.85608 2.93671 2.18878 5.40057 3.87183 4 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 5 2.68261 5.39185 2.80437 1.87471 4.73638 2.79887 3.69591 4.22191 2.19487 3.69685 4.08896 3.12413 3.70490 2.48424 2.08916 2.53260 3.02309 3.43812 5.82480 4.41426 5 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 6 2.77253 4.06085 3.07881 2.53373 4.10647 3.71564 3.68370 2.64290 2.00036 2.72968 4.17370 3.24239 3.08607 2.77632 2.72820 2.69921 2.54335 2.71931 5.60386 4.26496 6 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 7 3.42930 4.74416 5.34765 4.76823 3.71832 4.71430 5.09461 1.33015 3.54417 1.12594 3.33523 4.84641 5.00427 4.73010 4.64986 4.05097 3.66327 1.83083 5.51142 4.37013 7 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 8 2.57460 4.94286 4.00732 3.93216 5.40516 0.41612 5.15134 4.86315 4.18766 4.52736 5.33508 4.05990 4.45245 3.74651 4.46171 3.15888 3.14590 4.15180 6.71159 5.52767 8 G - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 9 2.30218 5.38172 3.03799 2.02026 4.18991 3.65799 3.84554 3.67215 2.28945 3.68495 4.42365 2.84227 3.73039 2.44555 2.39428 2.00278 2.95859 3.63127 5.81726 4.40923 9 s - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 10 4.54226 6.07621 5.39207 5.44513 6.34643 0.07137 6.34600 6.33790 5.73770 5.76452 6.83374 5.56171 5.46536 5.98137 5.73783 4.76037 5.08470 5.67502 7.03864 6.52156 10 G - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 11 2.06444 5.37337 2.91595 2.40063 4.70969 2.61181 3.84889 4.18948 2.46835 3.67503 4.41668 2.62917 4.05392 2.88235 2.66711 2.00495 2.47288 3.39649 5.81159 4.40596 11 s - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 12 2.90920 4.46494 4.12493 3.14570 1.52027 3.22992 4.24969 2.92840 3.46467 2.66529 3.12827 3.55640 4.33979 3.72214 3.72236 2.53517 2.98442 2.55125 5.06498 2.30159 12 f - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 13 2.21104 4.80722 4.64199 4.55509 5.54982 0.52550 5.49025 5.04875 4.70671 4.72740 5.47955 4.30215 4.43233 4.84666 4.86038 1.95116 3.45005 4.17507 6.87595 5.79039 13 G - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 14 2.71551 3.46186 3.01248 2.27453 4.55840 3.55853 3.50842 3.55064 2.03335 3.34882 4.31847 3.17065 4.07218 2.83960 2.83653 2.25762 2.26864 2.61469 5.72841 4.35037 14 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 15 3.17885 3.97005 5.63014 5.16553 4.35293 4.89782 5.77682 2.09398 5.06494 2.94083 4.14496 5.20428 5.30924 5.30763 5.20260 4.32158 3.61414 0.44769 6.26043 5.04118 15 V - E 2.68625 4.42232 2.77526 2.73102 3.46361 2.40519 3.72501 3.29361 2.67747 2.69306 4.24696 2.90353 2.73746 3.18153 2.89807 2.37893 2.77526 2.98499 4.58484 3.61510 0.09563 2.43065 5.73865 0.67073 0.71608 0.48576 0.95510 16 2.91101 3.31342 4.36759 3.41772 2.45121 4.01227 4.31421 2.75922 2.81772 2.31733 3.50420 3.69862 4.38187 3.88257 3.14725 3.02772 3.14303 2.46483 3.37889 1.69905 18 y - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 17 2.88484 5.28431 3.03179 2.31849 4.58595 3.47769 3.54625 2.98124 1.69233 2.43413 4.04064 3.16353 4.06907 2.72555 2.58277 2.55274 3.04512 3.20501 5.74377 4.36100 19 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 18 1.57125 2.56460 3.38436 3.39201 3.66458 2.34190 4.20526 2.93932 3.32823 2.44127 3.26099 3.74334 4.30466 3.60817 3.63469 3.01628 2.92537 2.55308 5.13581 3.91882 20 a - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 19 2.89298 4.40558 3.44708 2.63051 3.77015 3.77747 2.87940 2.57515 2.33949 2.85128 3.20054 3.37379 4.16367 2.65910 2.52913 2.67954 2.59930 2.46709 5.42679 3.74337 21 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 20 2.88350 5.37811 2.42858 2.28192 4.71668 3.65945 2.35349 4.19788 2.20596 2.91798 4.42054 2.38258 4.05280 2.81490 2.60119 2.77457 3.11461 3.76528 3.43428 3.80493 22 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 21 2.59359 5.30144 3.00667 2.46268 4.60954 3.67285 3.22394 2.91749 2.13087 2.60378 4.35201 3.05590 3.51881 2.48537 2.35096 2.62551 3.00998 2.84793 5.75687 4.36947 23 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 22 2.64500 5.38003 2.46961 2.36386 4.71962 2.36153 3.71093 3.77963 2.19342 3.27291 4.42213 2.49968 3.44456 2.94396 2.94770 2.23767 2.90215 3.58800 5.81601 3.79868 24 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 23 2.71410 5.35453 2.26257 2.17828 4.68327 3.06138 3.85215 3.65600 2.51871 3.65284 4.39957 2.64619 4.05631 2.95399 2.98284 2.41102 1.94961 3.19379 5.79713 3.78693 25 t - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03260 5.01631 3.67114 0.61958 0.77255 0.48576 0.95510 24 2.77509 4.50579 3.06414 2.40741 4.68877 2.10468 3.84020 4.16638 2.52713 3.65577 4.39945 2.31826 2.82304 2.55347 2.45557 2.51717 3.10489 3.55245 5.79545 3.68618 26 g - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.13496 4.99383 2.12471 0.61958 0.77255 0.54753 0.86365 25 2.82390 4.23357 2.59579 2.09029 4.65095 3.47120 3.53571 3.50264 1.93281 3.24335 4.10745 2.98984 3.99409 2.41262 2.43858 2.60001 2.84781 3.57090 5.75206 3.98239 27 k - E 2.68634 4.42166 2.77510 2.73101 3.46370 2.40521 3.72473 3.29370 2.67713 2.69347 4.24706 2.90350 2.73742 3.18145 2.89817 2.37895 2.77536 2.98516 4.58493 3.61485 0.21086 2.33296 2.37401 1.37928 0.29003 0.81455 0.58490 26 2.79249 4.86773 3.27912 2.48247 3.81836 3.65430 3.86742 2.36980 2.31612 2.40000 3.66176 2.98804 3.52938 2.45192 2.80383 2.80149 2.71760 2.93241 5.39419 3.83742 36 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01259 4.77670 5.49905 0.61958 0.77255 0.27298 1.43175 27 2.94684 4.40681 4.93000 4.33270 2.14562 4.19543 4.43742 2.60780 4.12995 2.51432 3.32273 4.32339 4.55150 4.25562 4.15094 3.50804 3.26683 1.12964 4.39266 2.23526 37 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 28 0.67405 4.13502 4.78133 4.26234 4.00859 4.13420 4.88775 2.58668 4.14876 2.87877 3.59530 4.37511 4.66004 4.38446 4.34251 3.50924 3.44597 2.20111 5.62436 4.43519 38 A - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 29 2.77559 4.05359 4.82280 4.21814 3.45081 3.88127 4.46447 1.69887 3.29990 2.06046 2.92956 4.25618 4.49083 4.18293 4.07725 3.28739 3.19210 1.31639 4.98894 3.80930 39 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 30 4.13385 6.06880 4.58555 3.84767 5.73274 4.53840 4.41573 5.06650 0.32256 4.37802 5.30885 4.14872 4.92009 3.55775 2.54913 4.11741 4.25754 4.75872 6.25921 5.22828 40 K - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 31 2.53136 3.93442 3.55191 2.54113 3.59001 3.81267 3.67691 2.09853 2.22431 2.85063 3.63116 3.45300 4.19661 2.87681 2.71089 2.96116 2.67441 2.46338 5.34241 3.76111 41 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 32 2.80227 4.30542 4.81704 3.71619 2.31247 3.45194 4.41496 1.85614 4.00698 1.68898 3.06826 4.22398 4.44809 4.15126 4.03957 3.11345 3.01936 1.82478 4.92889 3.75130 42 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 33 2.72320 4.19698 2.89173 2.30854 4.21536 3.66470 3.63903 3.54937 1.81020 3.33297 4.38970 2.50126 3.12497 2.85129 2.61476 2.47307 2.93549 3.43057 4.63863 3.86554 43 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 34 2.73748 5.16363 3.24304 2.62749 4.42406 3.39882 3.64889 3.08793 1.75481 2.64054 4.22767 2.81684 3.49630 2.92572 2.69253 2.71691 2.78362 2.91622 5.65055 3.09244 44 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 35 2.82342 4.21564 2.57688 2.18304 4.09635 3.66104 3.29269 4.17416 2.24176 3.24419 4.40775 3.13331 3.02670 2.66210 2.30119 2.38622 2.91913 2.84969 5.80393 4.13733 45 e - H 2.68618 4.42225 2.77520 2.73124 3.46354 2.40513 3.72495 3.29354 2.67741 2.69355 4.24690 2.90347 2.73731 3.18147 2.89801 2.37887 2.77520 2.98519 4.58477 3.61503 0.02362 3.90596 5.73865 0.48782 0.95182 0.48576 0.95510 36 2.81479 5.38805 2.34307 2.08229 3.84722 3.00939 3.24618 4.21561 2.24819 3.24444 4.42924 2.80965 3.63231 2.74299 2.65208 2.41080 2.72103 3.26063 5.82196 4.16400 47 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 37 2.42659 5.32934 2.94543 1.98753 4.27035 3.66735 3.85733 2.97282 2.27697 3.20526 3.75542 2.69174 3.50027 2.79550 2.45131 2.66535 2.70832 3.28701 5.77800 4.07668 48 e - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 38 2.82479 5.36482 2.46403 2.36491 4.23121 3.19666 3.53460 3.47934 2.01766 2.87145 4.06028 2.53791 3.88358 2.73438 2.79605 2.39315 2.94316 3.30320 5.80464 3.67777 49 k - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 39 2.81259 3.82036 2.58997 2.16257 3.93187 3.50795 3.44913 3.32347 2.23760 3.42042 3.43188 3.03914 3.18139 2.98833 2.90722 1.97318 3.04237 3.44327 4.85883 4.01646 50 s - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04017 5.01631 3.41907 0.61958 0.77255 0.48576 0.95510 40 2.75150 4.68420 2.78864 2.20581 3.96394 3.14028 3.85474 3.62649 2.17804 2.84544 3.93254 2.66146 3.79370 2.72658 2.87564 2.43841 2.71937 3.23202 3.36778 4.34996 51 k - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01020 4.98634 5.70869 0.61958 0.77255 0.56699 0.83755 41 2.52028 4.29421 2.93844 2.26593 3.28616 3.42961 3.89113 3.40312 1.92589 2.89626 3.59280 3.04537 4.08209 2.42956 3.02333 2.89065 2.87512 2.78376 5.62895 3.97726 52 k - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06456 4.98634 2.88790 0.61958 0.77255 0.56699 0.83755 42 2.52102 4.66200 2.60886 2.12080 3.90563 3.43164 3.41299 3.76759 2.19798 2.95231 4.37667 2.71584 3.31098 2.66775 2.46389 2.65499 2.89357 3.57073 4.74853 4.36793 53 e - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06881 4.93254 2.82535 0.61958 0.77255 0.69302 0.69327 43 2.65676 5.27743 2.81592 2.16715 4.59834 3.44096 3.79920 2.82354 2.10889 3.57233 3.78816 2.93522 4.00237 2.20078 2.58862 2.72374 2.99283 3.18643 5.72482 3.30249 54 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04191 4.87514 3.39892 0.61958 0.77255 0.80592 0.59181 44 2.46416 5.14935 3.14274 2.35064 4.42785 3.46788 3.62138 3.06885 2.39724 2.90472 4.00413 2.77252 4.01153 2.56699 2.69346 2.37713 2.33258 3.34725 5.62407 3.30627 55 t - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15381 4.84499 2.00472 0.61958 0.77255 0.85820 0.55151 45 2.15178 5.11690 2.80767 2.47016 4.06926 3.56450 3.25874 3.42510 2.38373 2.72748 4.17388 2.58132 3.95629 2.68997 2.59104 2.52019 2.89357 3.10461 5.58730 3.84420 56 a - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06869 4.70471 2.85898 0.61958 0.77255 1.05523 0.42788 46 2.33893 4.38200 3.78128 3.08857 2.87706 3.76539 4.03303 2.50172 2.82237 2.26545 3.48958 3.56901 4.14175 3.13269 2.43377 3.02211 2.55318 2.18677 4.40164 3.75633 57 v - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07407 4.65033 2.78326 0.61958 0.77255 1.03937 0.43646 47 2.66580 4.77769 3.25859 2.69691 3.69577 3.61140 3.56963 3.36841 2.45062 2.28390 3.86113 2.83101 3.99793 3.01640 2.00932 2.40384 2.97180 2.98514 3.81809 4.01106 58 r - H 2.68588 4.42292 2.77574 2.73101 3.46421 2.40561 3.72562 3.29362 2.67747 2.69305 4.24679 2.90348 2.73776 3.18179 2.89693 2.37874 2.77432 2.98554 4.58544 3.61510 0.56084 0.85690 5.33966 1.67148 0.20822 0.22069 1.61932 48 3.87852 6.35819 2.88185 0.33512 5.75300 3.98086 4.66680 5.41085 3.73193 4.87592 5.81368 3.19190 4.67406 3.86930 4.28895 3.74624 4.21685 4.94226 6.88673 5.40485 78 E - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 49 2.34469 4.06185 4.67394 3.74635 3.19070 3.72385 4.38165 1.69529 3.89930 1.68521 3.30505 3.88179 4.42519 3.50953 3.71087 3.12279 3.14596 1.99339 4.94125 3.41486 79 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 50 2.41611 3.92039 3.06862 2.24055 4.69692 3.38839 3.50460 4.17440 2.17094 3.43336 4.01855 2.84870 4.05421 2.22409 2.42800 2.49697 2.93959 3.48161 5.80403 3.10747 80 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 51 2.65097 4.31309 4.79937 4.19096 3.25102 4.08746 4.41763 1.57396 3.99634 1.77576 3.18772 3.58572 4.45127 4.14513 4.03729 2.91921 3.15786 1.73265 4.93848 3.33785 81 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 52 2.71474 4.35776 4.49839 3.90546 3.26558 3.60358 3.11363 2.58541 3.76519 1.24138 2.56017 3.78382 4.40165 3.77674 3.90460 2.91080 2.88501 2.43218 4.97232 3.44306 82 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 53 2.21717 5.37509 3.13954 2.36108 4.71254 3.44569 3.50643 4.19289 1.90576 2.89362 4.41783 2.84264 3.50886 2.51670 2.27883 2.73413 2.79427 3.37900 5.81221 4.40629 83 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 54 2.88332 4.76187 3.15794 2.34306 4.64959 3.18467 2.98724 4.11774 2.20976 2.84622 3.53657 2.69640 4.06011 2.81953 2.22587 2.26090 2.67755 3.39248 5.77872 3.89328 84 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 55 2.92075 3.71086 4.82119 4.21031 2.91851 4.08375 4.41406 2.48059 4.00923 1.14255 2.77088 4.22517 4.44739 4.15194 3.51737 2.79440 3.04088 2.14784 4.92583 3.58797 85 l - H 2.68619 4.42231 2.77526 2.73130 3.46360 2.40505 3.72501 3.29360 2.67737 2.69361 4.24696 2.90322 2.73746 3.18153 2.89797 2.37878 2.77526 2.98514 4.58483 3.61509 0.21093 1.81438 3.60337 0.15203 1.95873 0.48576 0.95510 56 2.87228 4.32697 2.43695 2.52023 4.72535 3.09966 3.42727 4.21076 2.24746 3.68599 4.14994 2.21640 3.70120 2.45856 2.42604 2.20075 2.84715 3.77128 5.81417 4.40372 87 s - S 2.68626 4.42233 2.77498 2.73131 3.46362 2.40515 3.72479 3.29362 2.67733 2.69363 4.24698 2.90355 2.73719 3.18141 2.89809 2.37895 2.77498 2.98527 4.58485 3.61511 0.08622 2.53438 5.71435 0.90816 0.51628 0.44628 1.02166 57 2.95437 4.05540 4.02453 3.66262 4.73022 3.00582 0.63840 4.27369 3.61156 3.92435 4.76053 3.90244 4.38221 3.97389 3.93213 2.36608 3.39859 3.79517 6.08861 4.80370 91 H - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 58 2.74925 4.59154 2.64384 2.02057 4.69046 3.19970 3.85151 4.16644 2.39568 3.65893 3.99620 3.06676 1.73396 2.95270 2.98758 2.52836 2.96698 3.57815 5.80119 4.39902 92 p - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 59 2.77600 3.63123 3.60742 3.04389 2.88763 3.83093 3.22852 3.27052 2.82124 2.96220 3.83761 1.44485 4.21384 3.33393 3.26463 3.06163 2.84916 2.86372 5.30436 2.85576 93 n - S 2.68619 4.42226 2.77521 2.73125 3.46355 2.40506 3.72496 3.29355 2.67742 2.69356 4.24691 2.90348 2.73741 3.18148 2.89802 2.37880 2.77521 2.98520 4.58478 3.61504 0.02736 3.73933 5.73865 0.64347 0.74542 0.48576 0.95510 60 3.43736 4.73250 5.40681 4.85032 3.21534 3.89737 5.21348 0.72821 4.70181 2.29095 3.77438 4.92025 5.08011 4.86610 4.77171 4.12622 3.68020 1.72131 5.65218 4.46593 96 i - B 2.68620 4.42119 2.77522 2.73126 3.46356 2.40515 3.72497 3.29356 2.67743 2.69357 4.24692 2.90349 2.73742 3.18149 2.89780 2.37889 2.77522 2.98521 4.58479 3.61505 0.04171 3.27988 5.73865 0.65380 0.73410 0.48576 0.95510 61 3.22247 3.52386 5.20134 4.62057 3.74032 4.49428 4.89197 1.38422 4.44333 2.03444 3.40884 4.64781 4.83078 4.60265 4.48778 3.55308 3.01459 1.16992 5.37248 4.18666 99 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 62 2.72238 4.59459 3.13585 2.30027 4.72566 3.17722 3.67251 4.20868 2.00822 3.53187 4.42604 2.97500 3.44674 2.41134 2.06447 2.53711 2.32763 3.77297 5.81907 4.41084 100 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 63 2.75790 4.02501 4.89076 4.27684 2.25991 4.10991 4.44304 2.31340 4.06541 1.38378 2.56521 4.26823 4.47075 4.19670 4.07763 3.42134 2.72551 2.21249 4.93572 3.01728 101 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 64 2.79378 4.36122 4.48297 3.70404 2.84684 4.03133 3.55103 1.94759 2.82835 1.82248 3.32801 4.05424 4.39941 3.70850 3.13439 3.15759 3.14407 2.41334 4.25902 2.30786 102 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 65 2.47264 4.33075 2.07830 2.03157 4.71750 2.27093 3.18950 4.19892 2.58523 3.68152 4.42156 3.04070 4.05295 2.84140 2.67254 2.59104 3.11515 3.76615 5.81569 3.60292 103 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 66 2.10377 4.03530 4.82986 4.21790 2.76136 4.07923 4.41023 2.08081 4.01359 2.30827 2.78821 4.22543 4.44340 4.15406 4.03913 2.38166 2.60707 1.97272 3.19782 3.33258 104 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 67 2.82605 3.67894 3.38070 3.01266 1.82001 3.97118 3.82789 2.76491 3.48734 2.34143 3.24926 3.10725 3.78017 3.42990 3.73647 2.98277 3.13977 2.32864 3.87637 2.72935 105 f - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04987 5.01631 3.16967 0.61958 0.77255 0.48576 0.95510 68 2.55964 4.21441 3.10666 1.94329 4.49707 3.21758 3.46239 3.37098 2.39709 3.00488 3.51821 3.06808 4.06187 2.54621 2.66989 2.75991 2.68522 3.13970 5.68635 3.14043 106 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02094 4.97674 4.28127 0.61958 0.77255 0.42506 1.06054 69 2.80310 5.38415 2.22807 2.18295 4.72718 3.65266 3.36574 4.21171 2.46641 3.56699 4.42536 2.57848 3.46451 2.86899 2.36310 2.58224 2.17995 3.52075 5.81804 3.65548 107 t - E 2.68640 4.42162 2.77535 2.73147 3.46354 2.40551 3.72458 3.29233 2.67716 2.69348 4.24762 2.90375 2.73699 3.18187 2.89837 2.37858 2.77480 2.98522 4.58549 3.61548 0.36809 1.18844 5.72853 1.68950 0.20409 0.46837 0.98355 70 2.88244 5.39287 2.47300 2.29715 3.79460 2.82884 3.28660 4.22374 2.09832 3.69810 4.43357 2.45444 3.07035 2.85151 2.47539 2.34133 3.01376 3.78345 5.82560 4.10620 126 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 71 2.57798 5.39101 2.06614 2.42374 4.73510 2.82383 3.84381 4.22040 2.28304 3.69587 4.43195 2.62257 3.38372 2.71683 2.73886 2.29050 2.66881 3.34289 5.82427 4.18691 127 d - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 72 2.58231 5.35788 2.77781 2.22432 4.08337 3.66211 2.49021 4.16401 2.37240 3.16748 4.40241 2.52484 4.05523 2.76334 2.63486 2.49164 2.89823 3.30761 4.95167 3.05734 128 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 73 2.78575 3.74303 4.78141 4.17260 2.95491 4.07322 4.40160 1.89067 3.97854 1.60353 2.95383 3.71592 3.11906 4.12798 3.50390 3.07790 2.85145 2.24111 4.92509 2.91282 129 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 74 2.58399 2.76389 4.59675 3.99881 3.19843 4.04871 3.62339 2.65148 3.84111 2.12752 3.45456 3.62454 3.46238 4.02369 3.94739 2.79096 3.14543 2.42948 3.13888 1.74690 130 y - E 2.68624 4.42096 2.77500 2.73129 3.46360 2.40508 3.72501 3.29360 2.67747 2.69353 4.24696 2.90343 2.73746 3.18153 2.89807 2.37893 2.77510 2.98525 4.58483 3.61509 0.10354 2.49668 4.13492 0.66960 0.71726 0.48576 0.95510 75 3.07392 4.44555 4.97084 3.81418 2.87255 4.25097 4.57886 1.74564 4.16653 1.31678 2.12605 4.39109 4.59167 3.71495 4.19337 3.56380 3.30386 2.29390 5.05348 3.89648 133 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 76 2.86449 3.41378 5.01300 4.41506 3.07458 4.28568 4.64425 1.49634 4.22335 2.27773 3.54368 4.43380 4.63588 3.70581 4.25773 3.60458 3.30826 1.19505 5.13861 3.95920 134 v - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01003 5.00344 5.72579 0.61958 0.77255 0.46390 0.99109 77 2.91733 4.35063 4.55668 3.96112 2.40516 4.04680 4.36140 2.56068 3.81048 1.70108 1.79340 3.59899 4.41359 3.09405 3.93172 3.15547 2.48177 2.59902 4.96582 3.78095 135 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 78 2.76564 5.57030 2.50020 1.03018 4.90220 3.70297 3.44513 4.39514 2.75995 3.87044 4.62325 3.16505 3.19754 2.75935 3.27129 2.65802 3.28146 3.95557 6.00401 4.57374 136 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 79 2.81579 3.90369 4.68991 4.08721 2.27644 4.06399 3.63829 2.69790 3.58050 1.84024 3.31248 4.16081 4.42953 4.07816 3.60709 3.36667 3.01039 2.57256 4.40465 1.54393 137 y - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 80 2.45920 2.17262 4.69646 4.09287 3.22405 3.32199 3.21264 2.59887 3.91610 2.06244 2.25581 4.16309 3.61702 4.08102 3.98811 3.14866 3.14614 2.03766 4.93767 3.46778 138 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04171 5.01631 3.37486 0.61958 0.77255 0.48576 0.95510 81 2.70314 5.37371 2.37994 1.91497 4.71601 2.93053 3.83161 4.20005 2.46492 3.55263 3.57885 2.58870 2.59223 2.74552 2.71928 2.69862 3.03649 3.29150 5.80804 4.39872 139 e - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01022 4.98481 5.70716 0.61958 0.77255 0.57090 0.83245 82 2.41993 3.72287 3.12898 2.52046 4.44831 1.89639 3.49536 3.62837 2.38762 3.31281 3.53904 2.44913 3.42379 3.00780 3.12891 2.87912 2.75467 3.52812 5.65946 3.81984 140 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.10979 4.98481 2.33166 0.61958 0.77255 0.57090 0.83245 83 2.77350 5.21303 2.43943 2.62703 4.54309 1.39496 3.89257 3.99092 2.60267 3.54085 4.32260 3.04209 4.06226 3.01831 3.03242 2.64588 2.77651 3.04353 5.73236 4.35922 141 g - - 2.68631 4.42210 2.77537 2.73126 3.46359 2.40522 3.72475 3.29338 2.67758 2.69250 4.24657 2.90377 2.73770 3.18148 2.89796 2.37902 2.77541 2.98478 4.58507 3.61496 0.21230 1.67338 5.60865 1.39945 0.28334 0.33567 1.25476 84 2.88583 5.39491 1.79381 2.06461 4.73890 3.24821 3.51210 4.22442 2.47141 3.51906 4.43601 2.95989 3.57031 2.79057 2.82788 2.02605 2.91163 3.62254 5.82805 4.41723 147 d - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 85 2.90986 4.42406 3.70533 3.66371 3.02577 3.99009 3.90749 2.78363 3.56278 1.02082 3.24022 3.34355 4.36146 3.52102 3.78389 3.13807 2.95820 2.60948 5.03043 3.48016 148 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 86 2.57337 4.10245 3.03950 2.95233 2.09915 3.53742 3.15959 3.37138 2.66519 2.44003 3.54971 3.10382 3.71714 3.06888 3.13958 2.44794 3.05039 3.11306 4.61969 3.07664 149 f - H 2.68621 4.42228 2.77522 2.73126 3.46357 2.40516 3.72497 3.29357 2.67744 2.69358 4.24693 2.90350 2.73735 3.18149 2.89804 2.37890 2.77502 2.98521 4.58480 3.61458 0.24291 3.02648 1.78874 0.58545 0.81386 0.48576 0.95510 87 2.29362 5.30873 1.92419 2.32474 4.26868 3.43187 3.46788 4.12970 2.37357 3.61146 4.35100 2.92576 3.98105 2.69850 2.60197 2.47206 2.54407 3.69618 5.74493 3.96335 152 d - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01185 4.83724 5.55959 0.61958 0.77255 0.87096 0.54223 88 2.24696 4.24235 4.56569 3.96478 2.41045 3.97137 3.29432 2.27668 3.43922 2.04964 3.19406 4.05576 4.33743 3.97000 3.38896 3.27217 3.06100 2.23241 4.18296 2.20711 153 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01185 4.83724 5.55959 0.61958 0.77255 0.87096 0.54223 89 3.80243 5.01974 5.81731 5.27268 3.70245 5.26548 5.70409 1.30084 5.15744 0.98923 3.04180 5.42350 5.39649 5.16571 5.17462 4.65797 4.03105 1.75151 5.84473 4.80632 154 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01185 4.83724 5.55959 0.61958 0.77255 0.62617 0.76494 90 2.48275 5.13868 3.18520 2.44727 3.97540 3.65122 3.65677 3.36126 2.16734 3.30486 3.19390 3.06911 4.04233 2.41632 2.75033 2.25069 2.41675 3.09873 5.62108 3.69504 155 k - H 2.68595 4.42186 2.77509 2.73103 3.46377 2.40517 3.72421 3.29387 2.67761 2.69368 4.24695 2.90368 2.73754 3.18175 2.89730 2.37895 2.77536 2.98514 4.58473 3.61505 0.63487 1.25520 1.68753 1.39580 0.28453 0.74756 0.64154 91 2.43987 5.24839 2.75312 2.20207 4.11839 3.54175 3.72993 4.06095 2.07671 3.34429 3.98666 2.75679 3.72576 2.60349 2.28520 2.46158 2.79062 3.43756 5.68761 3.81452 172 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01352 4.70589 5.42824 0.61958 0.77255 0.34096 1.24163 92 2.56414 5.37054 2.84426 2.11401 4.71382 2.70860 2.88683 4.19851 2.19051 3.14492 4.41168 2.55924 4.03189 2.79129 2.63798 2.35762 3.09530 3.76022 5.80426 3.44686 173 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01035 4.97167 5.69402 0.61958 0.77255 0.60365 0.79145 93 2.86527 4.78061 2.95620 2.59670 4.27271 1.99448 3.84571 3.48713 2.08881 3.39073 4.33266 2.46895 3.64059 2.84730 2.63768 2.84659 2.50396 3.24160 5.73764 4.35043 174 g - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01035 4.97167 5.69402 0.61958 0.77255 0.46145 0.99524 94 2.57883 3.45102 3.31966 2.70191 4.02973 3.16828 3.76144 3.12068 2.26544 3.06289 4.10647 2.81108 2.70638 2.99156 2.57108 2.49596 2.68439 2.78596 4.48656 4.03099 175 k - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01001 5.00539 5.72774 0.61958 0.77255 0.51640 0.90799 95 3.00846 4.37852 4.95050 4.33851 2.03946 4.18408 4.51243 2.07907 4.13124 1.32746 2.71567 3.86888 4.53472 4.25457 4.14405 3.49709 3.23945 2.15194 4.98866 3.35208 176 l - T 2.68632 4.42239 2.77534 2.73137 3.46298 2.40515 3.72509 3.29351 2.67755 2.69332 4.24641 2.90361 2.73734 3.18136 2.89815 2.37881 2.77519 2.98532 4.58491 3.61446 0.13280 2.11108 5.72774 1.00017 0.45858 0.46707 0.98573 96 2.55096 5.39506 2.51329 2.14467 4.73966 3.20813 3.84532 4.22553 2.37049 3.70015 4.43599 2.79265 3.16832 2.74582 2.82569 1.88822 2.42672 3.78548 5.82793 4.41687 180 s - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 97 2.55253 5.00371 2.91674 1.56530 3.77486 3.74196 3.71669 3.18678 2.77868 2.90828 3.00031 3.29724 3.28640 3.12328 3.07027 2.76413 2.89289 3.32236 3.74938 3.48354 181 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 98 2.59075 4.32000 2.44335 2.15201 3.95693 3.12347 3.34011 3.83572 2.30797 3.16698 3.93315 2.75363 3.60071 2.81660 2.61665 2.70578 2.85000 3.34465 3.67935 4.00275 182 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 99 2.65092 5.35978 2.44414 1.82235 4.69093 3.44711 3.03513 3.63938 2.46445 2.69072 4.40412 3.13476 3.87902 2.43027 2.99516 2.67955 2.75495 3.20344 5.80088 4.03299 183 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 100 1.86496 3.02665 4.71869 4.11439 3.41506 3.78632 4.39467 1.72869 3.93413 2.03606 3.25110 4.17623 4.43415 4.09606 3.42450 3.02051 2.94480 2.04904 4.94015 3.76003 184 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 101 2.66380 3.60669 3.09016 2.70629 3.97052 3.12773 3.91117 3.25572 1.80561 2.74214 4.19581 3.23071 4.10037 2.51557 2.19861 2.73033 3.11863 2.97558 5.62300 4.27841 185 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 102 2.65525 3.61780 2.73206 2.59880 2.91626 3.69337 3.17740 3.91061 2.06495 2.87551 3.62080 2.65252 4.08468 3.01717 2.55140 2.50072 2.84956 3.37543 5.67937 3.86408 186 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 103 2.78549 3.75825 4.89230 4.27707 2.37628 4.09576 4.42870 1.58181 4.06146 2.16353 2.83229 4.25917 4.45832 4.19107 4.06819 3.40747 3.15724 2.08428 3.94244 2.32199 187 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 104 1.91854 4.04767 4.83572 4.22341 2.21465 3.82491 4.41156 2.18264 4.01792 2.17430 2.43077 4.22827 4.44431 4.15736 4.04152 2.82624 2.88622 2.07903 4.25105 3.74133 188 a - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 105 2.59846 4.94560 3.39451 2.56515 3.67443 3.44440 3.79808 3.54150 2.22767 2.11264 4.02778 3.19297 4.14629 3.16161 2.51054 2.63727 2.68778 3.11215 4.13689 2.62651 189 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 106 2.71202 4.65478 2.93025 2.07602 4.70407 3.24619 3.70431 4.18261 2.58938 3.67040 4.10390 3.00747 4.05496 1.41184 3.00214 2.55548 2.74962 3.75459 5.80879 4.40428 190 q - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 107 3.40758 4.70636 5.39472 4.82751 3.82844 4.73217 5.15283 1.33187 4.66862 1.85779 2.55181 4.88258 5.03394 4.81634 4.72035 4.07618 2.46891 1.37416 5.58393 4.41648 191 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 108 2.29107 3.23763 4.81578 4.20571 3.00975 3.26830 4.41487 2.37700 4.00619 1.39060 3.28560 4.22330 4.44775 4.15070 4.03923 2.94875 3.15303 1.86969 4.92930 3.75166 192 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 109 2.62933 4.07203 2.95927 2.08969 4.71415 3.53463 3.84677 3.97436 2.17805 2.82549 4.41873 2.79932 4.05232 2.53645 2.16719 2.25459 2.86145 3.76301 5.81311 4.40656 193 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 110 1.17650 4.82606 4.24050 3.83461 4.98724 1.08848 4.85992 4.42183 3.81285 4.07900 4.88120 3.97861 4.34888 4.10941 3.49121 2.50205 3.18154 3.58125 6.30917 5.10145 194 g - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 111 3.90271 5.14012 5.90469 5.33230 3.41122 5.28833 5.65529 2.02087 5.19062 0.88043 2.65524 5.45552 5.42442 5.15469 5.16815 4.66249 4.12260 1.40813 5.79888 4.77647 195 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 112 2.18892 5.38966 2.64044 1.97751 4.73333 3.65659 3.60437 3.92129 2.10090 3.35469 4.43069 2.33847 4.05005 2.60616 2.77179 2.58383 3.11351 3.51057 5.82316 3.92131 196 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 113 2.81051 5.07767 4.77644 4.29954 2.03535 4.57845 2.23184 3.59557 4.18346 3.18325 4.21755 4.37554 4.93163 4.33627 4.35340 3.88728 3.48134 3.41897 4.49144 0.85916 197 y - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 114 3.22459 2.61128 5.38969 4.79509 3.58979 4.68737 5.03975 1.79213 4.61293 0.89179 2.61919 4.84389 4.96801 4.69100 4.62327 4.02095 3.66625 2.57847 5.40913 4.29402 198 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 115 4.50357 5.94639 4.67261 4.49457 2.97674 4.90740 0.35314 4.75553 4.20979 3.98991 5.25041 4.60971 5.36272 4.62490 4.36557 4.47961 4.76464 4.60938 4.62703 2.51319 199 H - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 116 2.59851 4.33805 2.68311 2.05797 4.71676 3.15802 3.59362 3.65569 2.43439 3.32473 4.42034 2.78736 4.05190 2.70193 2.69422 1.73897 3.11362 3.60918 5.81450 4.40740 200 s - H 2.68619 4.42226 2.77521 2.73118 3.46355 2.40514 3.72496 3.29355 2.67742 2.69356 4.24691 2.90348 2.73741 3.18131 2.89802 2.37888 2.77521 2.98510 4.58478 3.61505 0.04979 3.09322 5.73865 0.35009 1.21950 0.48576 0.95510 117 2.54785 4.42029 2.89622 2.25922 4.34868 3.66610 3.21799 3.71995 2.27125 3.07920 3.10189 2.25867 4.05899 2.34775 2.56766 2.85682 3.11428 3.36249 5.78309 3.93739 202 n - T 2.68634 4.42198 2.77524 2.73138 3.46344 2.40486 3.72467 3.29300 2.67713 2.69352 4.24714 2.90371 2.73709 3.18145 2.89825 2.37911 2.77527 2.98532 4.58501 3.61528 0.09842 2.40225 5.73865 1.69597 0.20263 0.48576 0.95510 118 2.53322 5.34393 2.95935 2.59629 3.94657 1.84501 3.63806 4.14023 2.18335 3.64044 4.39013 2.55576 3.77395 2.95784 2.71428 2.21077 3.11477 3.72355 4.68564 4.39095 213 g - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 119 3.55513 4.24694 5.60079 5.05662 2.60993 4.96071 5.43324 0.97900 4.91818 2.09234 3.80321 5.12225 5.23216 5.06726 4.97588 4.32549 3.79818 1.34455 5.81250 4.64107 214 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 120 2.50668 3.55624 4.84676 4.23404 3.24346 4.08398 4.41611 1.66920 4.02684 2.01982 2.79518 4.23489 4.44784 4.16480 3.83668 2.91482 2.83994 1.71230 4.92013 3.32611 215 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 121 4.62495 5.94818 4.90176 4.71687 2.80207 5.05504 0.41821 4.71670 4.43975 3.92227 5.21366 4.70109 5.45885 4.74110 4.56151 4.57303 4.86606 4.59605 4.46431 2.05738 216 H - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 122 3.04282 4.16968 3.83274 3.22981 4.12386 3.92565 4.16387 3.45658 2.89535 2.79946 3.52962 3.63885 4.33284 3.40809 0.88367 3.03173 2.91452 3.20781 5.47983 4.24517 217 r - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 123 4.66549 6.56867 0.13049 3.73947 6.20930 4.51726 5.46620 6.15252 4.80154 5.54790 6.65359 4.31602 5.22661 4.77980 5.35908 4.57977 5.04873 5.69924 7.06132 6.05090 218 D - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 124 4.11594 5.30633 6.13178 5.57769 3.73657 5.59693 5.98457 1.50133 5.46568 0.67788 3.07617 5.76705 5.63423 5.36401 5.43088 5.00606 4.33175 2.14525 5.97972 5.01356 219 L - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 125 4.55719 6.24846 4.80697 4.34215 5.94023 4.73956 5.02576 5.52333 0.17090 4.86848 5.87217 4.66859 5.24422 4.23030 3.41495 4.59394 4.77093 5.20290 6.57866 5.65826 220 K - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 126 2.73388 4.87911 3.10327 2.90832 4.07991 3.41413 4.01646 3.20246 2.89177 2.38683 3.78561 3.39051 1.51394 3.22647 3.32105 2.31617 2.81372 3.19214 5.43675 4.15025 221 p - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 127 2.30763 5.39894 2.49711 1.50775 4.74209 3.53358 3.60730 4.22742 2.31483 3.70337 3.89187 2.94609 4.05547 2.65035 3.08133 2.29509 3.12215 3.78862 5.83238 4.42137 222 e - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 128 4.24075 6.04161 4.10323 4.13804 5.66046 4.44992 5.52992 5.77835 4.64675 5.26705 6.30900 0.15130 5.17553 4.91694 4.94682 4.32646 4.70552 5.25421 6.75952 5.61338 223 N - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 129 3.55135 3.88080 5.58388 5.03211 3.05772 4.93598 5.38843 0.81084 4.88763 1.84199 3.74557 5.09695 5.20522 5.02095 4.93631 4.29650 3.79207 1.75582 5.75938 4.60163 224 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 130 4.26500 5.46000 6.21355 5.61602 2.31085 5.64571 5.88455 2.68862 5.47780 0.52109 2.36789 5.81754 5.61663 5.25881 5.37169 5.03996 4.45544 2.72136 5.81387 4.88779 225 L - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 131 3.14725 3.80930 5.11896 4.51210 2.75868 4.35237 4.69393 1.48763 4.30885 1.32733 3.15909 4.51494 4.68518 4.42027 4.31553 3.67228 3.37834 1.91515 5.14039 3.60311 226 l - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 132 2.83132 4.28838 2.02200 2.41335 4.70055 3.12743 3.31546 4.17875 2.06503 3.46693 4.09733 2.49326 4.05387 2.94892 3.07895 2.27711 2.89161 2.90947 5.80603 4.40188 227 d - E 2.68620 4.42227 2.77521 2.73125 3.46356 2.40515 3.72496 3.29356 2.67743 2.69346 4.24692 2.90348 2.73741 3.18137 2.89794 2.37889 2.77521 2.98513 4.58479 3.61505 0.19179 2.92011 2.11536 0.31959 1.29625 0.48576 0.95510 133 2.77846 5.34345 2.73873 2.12504 4.68884 3.31622 3.10327 4.17503 2.07146 3.64885 4.14408 2.35495 3.55373 2.53396 2.68259 2.30312 2.80970 3.73426 5.77591 4.07717 229 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01122 4.89146 5.61380 0.61958 0.77255 0.46383 0.99121 134 2.76231 5.37627 2.40965 2.30431 4.72103 3.48860 3.46007 4.20680 2.15285 3.68141 4.41704 2.22463 3.54282 2.67483 2.66394 2.48608 2.48229 3.08661 5.80911 4.39830 230 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01030 4.97674 5.69908 0.61958 0.77255 0.42506 1.06054 135 2.88621 4.31580 2.58861 2.52891 4.00821 1.80604 3.64216 3.70404 2.55848 3.01103 3.82083 2.93142 3.28125 2.96153 3.15140 2.63196 2.92652 3.07947 5.65563 3.39061 231 g - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 136 2.74326 5.32913 2.62872 2.23118 4.20190 3.27586 3.01088 3.39612 2.54602 3.28443 3.99578 2.66732 4.06020 2.45230 2.82728 2.54748 2.65672 2.69485 5.77785 3.49295 232 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 137 2.61635 3.28525 4.16732 3.71739 2.98202 4.03403 4.34546 2.03775 3.50788 1.92540 3.47356 3.38535 3.11745 3.96570 3.52677 3.32696 2.46663 1.86856 4.97202 3.78516 233 v - E 2.68644 4.42087 2.77438 2.73125 3.46306 2.40580 3.72561 3.29182 2.67742 2.69394 4.24637 2.90298 2.73752 3.18209 2.89809 2.37898 2.77573 2.98487 4.58490 3.61464 0.36530 1.19470 5.73865 2.01193 0.14356 0.48576 0.95510 138 2.92386 3.12674 3.30583 2.50241 4.41812 3.73989 3.57074 3.83865 1.16713 3.42239 3.64701 3.25964 4.12762 3.06518 2.74407 2.94589 3.15200 3.22587 5.64420 3.71460 253 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 139 3.61791 5.07369 5.93139 5.42030 4.01697 5.40165 5.95563 1.06228 5.32659 1.08905 3.76387 5.56598 5.56723 5.42106 5.39317 4.81179 4.11011 1.74432 6.14737 5.05160 254 i - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 140 1.74479 2.79152 4.35686 3.77898 3.55350 2.78668 4.34505 2.08763 3.66685 2.55990 3.56128 3.98833 4.38080 3.89329 3.86150 2.46831 2.34811 2.41028 5.05799 3.86488 255 a - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 141 4.66549 6.56867 0.13049 3.73947 6.20930 4.51726 5.46620 6.15252 4.80154 5.54790 6.65359 4.31602 5.22661 4.77980 5.35908 4.57977 5.04873 5.69924 7.06132 6.05090 256 D - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 142 4.66482 5.73614 5.86239 5.64956 0.40883 5.43325 4.33355 3.86711 5.42110 2.16428 4.36705 5.11239 5.65371 5.16689 5.27011 4.83252 4.86624 3.98432 3.74189 2.69037 257 F - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 143 3.93699 5.85566 3.02816 3.87037 6.00993 0.21285 5.44927 5.75466 4.70121 5.27717 6.21696 4.31536 4.99427 4.76567 5.12629 4.02226 4.42780 5.10478 6.99282 5.96830 258 G - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 144 2.54355 3.67295 4.73868 4.13265 2.71576 4.06852 3.76754 2.37455 3.94756 1.20416 3.31174 3.74431 4.43365 4.10500 4.00521 2.64259 3.14725 2.29206 4.93223 3.75278 259 l - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03189 5.01631 3.69859 0.61958 0.77255 0.48576 0.95510 145 0.77520 2.86695 4.81978 4.47036 4.95592 3.15951 5.20700 4.36343 4.38394 4.08078 4.90451 4.25075 4.38058 4.58838 4.56864 1.45304 3.34905 3.34992 6.35477 5.22001 260 a - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.07711 4.99453 2.69658 0.61958 0.77255 0.54567 0.86620 146 2.54977 3.79925 3.16699 2.32606 4.48674 3.31547 3.84408 3.47518 1.75582 3.12339 4.25869 2.84258 4.04145 2.96441 2.18943 2.71334 2.91887 2.95414 5.67187 4.30075 261 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.13472 4.92824 2.13029 0.61958 0.77255 0.70219 0.68419 147 2.64685 3.78445 3.06669 2.61534 3.32325 3.67596 3.69246 3.14713 2.01231 2.43193 3.43451 3.16113 4.06301 2.47274 3.08778 2.74475 2.84906 2.65428 5.37440 4.07606 262 k - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.29473 4.80574 1.39802 0.61958 0.77255 0.92027 0.50818 148 2.40579 4.15423 4.25399 3.66267 2.39272 3.57693 3.44550 2.33935 3.03827 1.86796 2.97007 3.83355 4.18573 3.73297 3.67827 3.10851 2.93289 2.21754 4.76738 2.96352 263 l - . 2.68635 4.42219 2.77489 2.73146 3.46367 2.40530 3.72500 3.29419 2.67720 2.69370 4.24630 2.90362 2.73727 3.18122 2.89818 2.37860 2.77478 2.98583 4.58472 3.61420 0.77167 0.63015 5.24955 1.50734 0.25038 0.20147 1.70117 149 2.68930 5.13793 2.99383 2.28756 4.12167 3.02811 3.40047 2.83046 2.53990 2.67433 3.91490 2.66806 3.85841 2.95123 3.08518 2.54554 2.43488 3.14237 4.83794 3.11842 281 e - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 150 2.67960 3.59834 3.08049 2.32634 4.00400 2.85568 3.65072 3.26198 2.22635 2.80014 3.89773 3.03566 3.90780 2.84131 2.77630 2.59674 2.54121 2.94346 4.66327 3.60288 282 k - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 151 2.78407 5.36932 2.80723 2.38070 3.95652 3.28210 3.31902 3.80407 2.38757 3.23090 4.41260 2.26860 2.87333 2.94776 2.55475 2.11230 2.82314 3.31603 5.80800 4.40313 283 s - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 152 2.55066 5.37311 2.42428 2.58328 4.70981 2.65546 3.66067 3.46611 2.34139 3.39818 4.41598 2.44705 3.58966 2.48003 2.87086 2.30355 2.92043 3.58081 5.81084 3.32103 284 s - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 153 2.61131 5.36709 3.05324 2.00706 4.70125 2.53001 3.45141 4.17959 2.46541 3.54879 4.41063 3.13225 3.27183 2.67970 2.77280 2.14590 2.62504 2.97295 5.80635 3.79465 285 e - S 2.68619 4.42226 2.77520 2.73124 3.46320 2.40514 3.72495 3.29355 2.67742 2.69356 4.24691 2.90348 2.73740 3.18147 2.89802 2.37888 2.77520 2.98519 4.58478 3.61504 0.03620 3.43177 5.73865 0.40966 1.09027 0.48576 0.95510 154 2.80870 4.76397 2.82688 2.35901 3.53520 3.31737 3.24083 3.53679 2.31494 2.98485 3.52265 2.69923 3.15465 2.90046 2.56489 2.40361 2.83318 3.04461 5.74293 3.76697 287 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 155 2.38638 3.55872 3.84850 3.27925 3.07902 3.89951 3.49984 3.07191 2.87600 2.13071 2.79826 2.94436 3.28103 3.24012 3.30127 2.77627 2.52689 2.66914 5.17020 2.84075 288 l - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 156 2.88266 4.79637 2.63708 2.49106 4.69372 3.27452 3.02757 4.17056 2.31920 3.54781 3.84892 2.54158 3.83133 2.71114 2.83815 2.34796 2.07167 3.53868 4.84477 3.26548 289 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 157 2.55115 5.22307 2.81541 2.42597 3.84088 2.72211 3.45978 3.70939 2.65113 3.50012 4.03956 3.00145 3.26637 2.92366 3.12986 2.10982 2.09681 2.95270 4.42058 4.32902 290 t - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 158 2.79383 4.53543 3.94528 3.00256 2.28876 3.25886 4.19260 2.53698 3.31063 2.13485 3.51266 3.25465 3.61933 3.02975 2.60672 3.04108 3.13630 2.22820 5.12884 3.03437 291 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 159 2.54133 2.27249 3.62507 3.14565 3.48798 3.47382 4.20805 2.87324 3.24770 2.61629 3.62417 3.76153 4.31084 3.45605 3.15192 3.19594 2.77273 1.44309 5.11140 3.89714 292 v - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 160 2.50560 4.02210 4.21483 3.69251 4.03927 0.87585 4.50859 3.18042 3.62456 3.12203 4.01557 3.91946 4.34666 3.89680 3.91281 2.66630 3.23503 2.52015 5.49804 3.97346 293 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 161 2.98792 5.00679 3.18026 3.47531 5.09253 3.65988 4.75357 4.53531 3.72802 4.18133 4.99276 3.79669 4.37930 3.97717 4.12874 1.60941 0.74054 3.97784 6.39182 5.11951 294 t - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 162 2.69840 5.26022 3.00961 2.31122 4.20998 3.68086 3.63617 3.20701 2.41779 2.58849 4.31499 2.98486 2.62271 2.99075 2.13729 2.36313 3.11573 3.42385 5.72545 3.54571 295 r - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 163 2.71301 5.29924 2.59488 2.14743 3.52695 3.04037 3.28275 4.06670 2.61594 3.34508 4.35002 2.84026 3.31113 2.97459 2.36266 2.86533 2.70674 3.41928 3.03699 3.23042 296 e - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 164 4.65993 5.73598 5.69662 5.49898 1.97465 5.32012 3.31709 4.36240 5.29326 3.66395 4.92323 4.93743 5.59573 5.06816 5.17473 4.69695 3.41633 4.25844 2.61302 0.51590 297 Y - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 165 2.46851 3.63596 4.34730 3.76113 3.49978 4.00900 4.30977 2.55613 3.41377 2.11254 1.89168 3.40620 4.37893 3.86942 2.23584 3.08926 3.14320 2.13937 5.00600 3.81292 298 m - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 166 0.54633 4.79516 4.59072 4.34047 5.33605 3.22550 5.27451 4.80651 4.37656 4.47607 5.24769 4.21379 3.02084 4.58677 4.60871 1.81435 3.40538 4.05386 6.66459 5.53199 299 A - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 167 3.08666 5.02380 4.02349 3.92167 5.10908 3.73669 5.07487 4.62556 4.04836 4.33998 5.22795 3.34786 0.41351 4.38870 4.30726 3.26072 3.60085 3.40472 6.47905 5.20179 300 P - H 2.68622 4.42144 2.77523 2.73111 3.46358 2.40517 3.72498 3.29358 2.67745 2.69359 4.24694 2.90351 2.73743 3.18126 2.89786 2.37891 2.77523 2.98522 4.58481 3.61507 0.03484 3.47295 5.73865 0.99675 0.46057 0.48576 0.95510 168 3.66837 6.19086 2.84947 0.45189 5.55161 3.90523 4.43200 5.09782 3.30487 4.55035 5.42336 3.03786 4.53514 3.60153 3.37398 3.54999 3.95969 4.65772 6.64024 5.17650 305 E - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 169 2.79774 4.32598 4.68241 3.67608 3.42171 4.06471 4.38713 2.01470 3.90321 1.87174 3.44282 4.15860 4.43014 3.77035 3.25202 3.36713 2.95239 1.31877 3.77234 3.76466 306 v - H 2.68603 4.42242 2.77519 2.73104 3.46342 2.40506 3.72511 3.29371 2.67728 2.69322 4.24707 2.90364 2.73756 3.18163 2.89801 2.37893 2.77519 2.98535 4.58494 3.61520 0.12919 2.22240 4.35495 1.23224 0.34480 0.48576 0.95510 170 2.91184 3.76308 4.76588 4.15799 3.39752 4.06920 3.82796 1.60071 3.96642 1.39613 3.17824 3.65225 4.43387 4.11848 4.01348 2.94594 3.14403 2.21737 4.92444 3.43929 311 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00999 5.00664 5.72898 0.61958 0.77255 0.51297 0.91308 171 2.62785 5.06480 3.29796 2.67561 3.73804 3.41086 3.92577 3.21358 2.32640 2.15096 3.31180 2.55443 4.11004 2.47045 2.33927 2.70318 3.11578 3.12852 5.57146 4.24107 312 l - C 2.68631 4.42245 2.77511 2.73076 3.46350 2.40522 3.72547 3.29356 2.67765 2.69366 4.24573 2.90389 2.73738 3.18142 2.89826 2.37846 2.77520 2.98520 4.58530 3.61473 0.62427 1.87899 1.16602 1.98855 0.14722 0.46912 0.98231 172 2.60166 5.18307 2.62016 2.19793 3.35206 2.39740 3.57105 3.96340 2.18128 3.47543 4.23188 3.01161 3.92489 2.82990 2.86326 2.33987 2.67701 3.55746 5.63416 3.78538 327 k - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01428 4.65191 5.37425 0.61958 0.77255 0.24611 1.52250 173 2.37600 3.94341 2.81761 2.45806 4.08381 2.38833 3.32666 4.15213 2.47322 3.64753 4.39446 2.71786 3.74359 2.39493 2.76163 2.38666 3.00597 3.01776 5.79219 3.82026 328 a - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00998 5.00778 5.73012 0.61958 0.77255 0.47101 0.97916 174 2.81816 4.87774 2.88922 2.34131 3.91699 3.47934 3.84840 3.76601 2.22767 3.10881 4.41163 2.46519 2.75598 2.51039 2.43545 2.43680 2.76354 3.54179 5.80719 3.84984 329 k - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 175 2.74169 5.33416 2.58184 2.32653 3.61666 2.33545 3.50275 4.12419 2.36762 3.50261 3.56274 2.91332 3.07814 2.74477 2.96926 2.79421 2.92848 3.32496 5.78164 2.72284 330 e - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 176 2.48397 4.72191 2.72922 2.94719 3.45604 3.83733 2.73484 2.72590 3.03376 2.94128 3.81928 3.51045 4.21965 3.13222 3.31573 2.84267 3.12967 2.71705 3.94971 1.76193 331 y - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 177 2.88858 5.15756 2.48812 2.69267 3.68939 2.20273 3.90720 3.84889 2.69072 3.17648 4.22648 3.21985 3.19313 3.04303 3.16266 2.07644 2.02474 3.50391 5.64990 3.69862 332 t - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 178 2.44412 5.27089 3.18567 2.52594 4.01181 3.49400 3.20300 3.68711 2.26882 2.99802 4.32458 3.16791 2.73532 2.67304 2.47574 2.35896 2.41445 3.31659 5.73361 3.79657 333 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 179 2.27957 5.36842 3.14470 2.24142 4.70283 3.35867 3.70433 4.18054 1.84880 3.00297 4.41216 3.13478 2.50109 2.87247 2.49374 2.50485 2.88881 3.75338 5.80713 4.40386 334 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 180 2.25487 3.19836 3.67383 3.53894 3.58335 3.60706 4.24810 2.30247 3.45618 2.57768 3.58074 3.40343 4.33674 3.48890 3.71724 2.25302 2.94661 1.56396 5.07167 3.86608 335 v - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 181 3.32488 6.23611 0.30142 2.99559 5.85936 3.97225 4.81661 5.46625 4.07634 5.00781 5.98660 3.57219 4.70996 4.04099 4.76451 3.76774 4.26196 4.95940 7.04785 5.56474 336 D - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 182 2.97530 4.34655 4.92112 4.31006 3.42469 4.15298 4.48903 1.67409 4.10270 2.14170 2.44181 4.30839 4.51041 4.23558 4.11915 3.46567 2.80277 1.45020 3.28394 3.56694 337 v - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 183 4.60767 5.71652 5.61554 3.89031 2.18526 5.28181 4.15190 4.32304 5.18037 3.62888 4.88484 4.90634 5.56392 5.01906 5.10312 4.65700 4.81381 4.22147 0.60655 1.74323 338 W - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 184 1.30551 4.78823 4.65738 4.37945 5.36630 2.58206 5.28849 4.84019 4.38318 4.50739 5.27020 4.22569 4.39579 4.59600 4.61395 0.79404 2.89139 4.06528 6.68751 5.56026 339 s - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 185 2.44153 3.17932 4.87400 4.25972 2.53121 4.09082 4.42403 2.33144 4.04748 1.34403 2.92510 4.24940 4.45392 4.18053 4.05982 3.14600 3.15398 2.13810 4.92017 3.14864 340 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 186 2.22507 4.96728 4.63623 4.63233 5.66307 0.33314 5.62287 5.16416 4.86793 4.86816 5.66661 4.43512 4.57282 5.01497 4.99264 3.26151 3.63533 4.32703 6.92990 5.89905 341 G - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 187 2.93009 2.13614 4.95885 4.35253 3.48038 4.19799 4.54424 1.68794 4.14925 1.93394 3.18432 4.35359 4.55452 4.28834 4.17024 3.34008 3.23972 1.60527 5.03746 3.47367 342 v - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 188 3.21831 4.55127 5.17022 4.58630 3.70338 4.47717 4.86313 1.30610 4.40976 1.92114 2.79907 4.62299 4.81179 4.56490 4.45688 3.52794 2.67243 1.42404 5.34369 4.16408 343 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 189 2.77853 3.56970 4.91220 4.29933 2.66878 4.13468 4.46922 2.12981 4.08926 1.13811 3.14072 4.29275 4.49323 4.21981 4.10205 3.44689 2.88537 2.20246 4.95897 3.46211 344 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 190 2.08301 4.31008 4.80905 4.20025 2.66597 4.08391 3.54227 2.07553 4.00182 2.35024 3.19529 4.21899 4.44796 4.14611 4.03654 3.39206 3.15615 2.32332 2.91148 1.86433 345 y - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 191 2.65126 3.79080 3.03118 1.37895 4.54227 3.68257 3.87660 3.27048 2.56225 3.53374 4.30787 2.88399 4.07460 2.72714 3.11894 2.49943 2.86114 3.20681 5.71940 3.61825 346 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 192 2.75949 4.33120 4.86063 4.24972 2.93412 4.11800 4.44873 2.58063 4.04775 1.34098 1.86205 4.26240 4.47769 4.18564 4.07448 3.30982 2.87183 2.17494 4.95131 3.25026 347 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 193 2.13730 3.34433 4.84746 4.23449 2.67079 4.08305 4.41495 2.45417 4.02682 1.45586 2.95446 4.23448 4.44687 4.16424 3.65241 3.39295 2.78239 2.10310 4.91833 3.10946 348 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 194 2.61714 3.04119 3.51958 2.50105 3.16562 3.44068 4.02999 3.26384 2.78703 2.46125 3.90521 2.94061 4.18669 3.26384 2.94427 2.45451 1.92365 2.96026 5.36672 3.77569 349 t - H 2.68592 4.42131 2.77530 2.73134 3.46364 2.40523 3.72505 3.29364 2.67751 2.69365 4.24624 2.90357 2.73750 3.18157 2.89769 2.37886 2.77510 2.98507 4.58487 3.61513 0.08274 2.77459 4.07273 1.24373 0.34011 0.48576 0.95510 195 2.74009 5.38236 2.60734 2.58658 4.30151 1.49346 3.57775 4.19577 2.06867 3.68256 4.42710 2.84258 4.06100 2.86136 2.79826 2.78642 3.12785 3.76776 5.82019 4.41533 355 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02515 5.00240 4.01100 0.61958 0.77255 0.52459 0.89600 196 2.87057 4.15783 2.81932 2.15097 3.67482 3.00161 3.44561 3.53712 2.01194 3.52030 4.39830 2.84675 4.04172 2.62971 2.18111 2.65254 2.90372 3.46034 5.79407 3.92999 356 k - S 2.68632 4.42239 2.77496 2.73101 3.46368 2.40527 3.72508 3.29339 2.67739 2.69369 4.24616 2.90361 2.73734 3.18160 2.89815 2.37901 2.77533 2.98486 4.58491 3.61430 0.06990 2.74572 5.70978 1.46974 0.26135 0.43968 1.03351 197 2.53761 4.57755 3.85895 3.05555 3.06219 3.90225 3.89097 2.90555 3.23603 1.98376 3.43681 3.14844 2.18635 3.28921 3.56902 2.76101 2.38583 2.48063 5.16546 3.65117 363 l - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 198 2.94035 4.49377 4.16973 3.59341 3.59928 3.99457 4.28692 2.57573 3.48228 2.11382 3.59630 3.88641 1.19333 3.75706 3.46613 3.08341 3.17527 2.51467 5.10025 3.66586 364 p - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 199 2.95410 3.97958 4.76382 4.16399 1.23466 4.10162 4.38107 2.78567 3.65586 2.19089 3.46719 4.20671 3.78920 4.13156 4.03525 3.25126 3.18603 2.50296 2.73984 2.86766 365 f - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 200 2.72297 4.82530 2.62940 2.35446 3.83755 3.31971 3.71413 4.17131 2.26174 3.54363 4.14174 3.02369 2.60946 2.49179 2.66057 2.21727 2.99115 3.74587 4.55596 3.10965 366 s - S 2.68620 4.42227 2.77522 2.73112 3.46340 2.40515 3.72496 3.29334 2.67743 2.69357 4.24692 2.90349 2.73742 3.18148 2.89803 2.37889 2.77522 2.98520 4.58479 3.61505 0.07731 2.84051 4.13492 0.30572 1.33404 0.48576 0.95510 201 2.63880 5.38435 2.63657 2.22720 4.72697 1.94780 3.15235 3.87964 2.57669 3.68860 4.42577 2.57921 3.16991 2.74291 2.86900 2.50219 2.85278 3.77370 5.81843 4.40865 368 g - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 202 2.40102 4.71375 2.46996 2.13243 4.71840 3.11745 3.05416 3.48265 2.25142 3.16134 4.41932 2.93828 3.25177 2.60824 2.79040 2.58260 2.90071 3.38079 5.81277 4.40438 369 e - S 2.68658 4.42180 2.77453 2.73123 3.46394 2.40505 3.72421 3.29333 2.67765 2.69382 4.24730 2.90354 2.73686 3.18110 2.89829 2.37906 2.77522 2.98525 4.58428 3.61543 0.55463 1.48984 1.60791 1.39890 0.28351 0.52175 0.90012 203 2.69338 5.29005 2.51143 2.25105 4.62988 2.84270 3.49832 3.48405 2.27737 3.31427 4.33211 2.56706 3.20350 2.85310 2.67590 2.21378 2.73620 3.67787 5.72586 4.31806 375 s - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01250 4.78398 5.50633 0.61958 0.77255 0.95212 0.48763 204 2.65942 5.19894 2.69156 2.28179 3.77027 3.19251 3.77484 3.06173 2.43464 2.99400 3.94013 2.58274 3.44930 2.63512 2.62020 2.46578 2.71730 3.35179 5.65696 3.80565 376 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01250 4.78398 5.50633 0.61958 0.77255 0.77169 0.62033 205 2.38920 5.21254 2.73488 2.26876 4.51445 3.29559 3.03245 3.05648 2.42252 2.83088 3.97624 2.72691 3.66747 2.74292 2.65924 2.79642 2.87825 3.04317 5.67196 3.47007 377 e - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01186 4.83615 5.55849 0.61958 0.77255 0.33713 1.25111 206 2.65422 4.48489 1.88534 2.29942 4.71042 3.12833 3.84224 3.67843 2.58000 3.67468 4.41498 2.22848 4.04754 2.86157 2.64414 2.33478 2.73698 3.75923 5.80928 4.40246 378 d - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 207 2.52228 5.35256 2.79874 2.27245 4.68298 3.15080 3.25420 3.81263 2.42135 3.03021 2.98061 3.02733 3.41549 2.09266 2.89624 2.43800 3.03420 3.22791 5.79412 4.39217 379 q - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 208 2.88352 5.03264 3.01718 2.64158 3.36791 3.41419 3.67586 2.82361 2.46533 2.06980 3.25199 2.87105 3.91016 2.67457 2.54739 2.67076 3.11488 3.35644 5.54543 3.24074 380 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 209 2.31106 5.21929 3.20358 2.11286 3.58411 3.54755 3.12693 3.74178 2.35878 3.37262 4.27754 3.18132 3.64073 2.21825 2.83044 2.63943 3.03559 2.71879 4.50670 3.34948 381 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01003 5.00344 5.72579 0.61958 0.77255 0.46390 0.99109 210 2.74907 4.02445 4.23598 3.43708 3.16042 3.98772 3.66116 2.29352 2.78065 1.91975 2.65717 3.64306 4.00461 3.79624 2.62994 3.12682 2.72367 2.05105 5.03295 3.83444 382 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 211 2.79706 4.32223 4.14412 4.07508 2.44930 4.05985 3.54709 1.67401 3.90204 2.17979 2.94629 3.31750 4.42562 4.07034 3.98057 2.91878 2.88141 2.01026 4.94063 2.95520 383 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 212 2.43063 3.51667 2.84063 2.33381 3.23751 3.53757 3.64461 3.61354 2.52297 3.04234 3.80037 3.02528 3.31294 2.77439 2.36706 2.71893 3.04140 2.71650 5.64517 3.47973 384 e - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 213 2.54995 5.35768 3.14585 2.23433 4.68798 3.33616 3.38625 3.80986 2.09254 2.85705 3.68757 2.56176 4.05535 2.40160 2.38927 2.57618 3.04385 3.36418 5.79929 3.79887 385 k - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 214 2.66499 5.02053 2.80345 2.59207 4.23983 3.19081 3.94632 1.95336 2.43621 2.96229 3.77095 2.92719 4.12615 3.11304 2.86357 2.94448 2.42822 2.54184 5.53679 4.21766 386 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 215 2.79062 4.84420 3.48859 2.83007 4.02200 3.06268 4.01637 2.98055 2.36084 1.68419 3.06982 3.40535 3.56488 2.89781 2.78978 2.64270 2.97298 2.81255 5.39215 4.11258 387 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 216 2.78422 4.40067 2.87114 2.38957 4.66317 2.42774 3.11725 3.68493 2.29738 3.11118 3.80555 3.07548 3.38861 2.66839 2.52841 2.36297 2.74889 3.71883 4.85618 3.72852 388 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04975 5.01631 3.17248 0.61958 0.77255 0.48576 0.95510 217 2.55009 3.88585 3.08502 2.47179 4.52328 2.60499 3.86026 3.74333 2.31088 3.21633 3.94275 3.03087 2.50945 2.97834 2.41589 2.69163 2.38722 3.38360 5.70135 4.11095 389 k - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01030 4.97686 5.69921 0.61958 0.77255 0.59090 0.80705 218 2.71816 5.35510 2.47492 2.28903 4.69101 3.44039 3.67059 2.92462 2.15295 3.03900 4.39818 2.98975 2.40750 2.74839 2.76016 2.49540 2.85213 3.74081 5.79327 4.38792 390 k - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02103 4.97686 4.27462 0.61958 0.77255 0.59090 0.80705 219 2.59242 4.56547 3.37418 3.24570 3.28039 3.87349 3.78552 2.80260 2.91515 1.85640 3.67045 2.94464 3.03710 3.48913 3.31352 2.93163 2.57101 2.12270 4.60315 3.29903 391 l - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01041 4.96623 5.68858 0.61958 0.77255 0.61678 0.77584 220 2.76552 5.35116 2.75065 2.09233 4.26840 3.39661 3.23930 3.45666 2.13782 2.93921 3.69074 2.78256 2.85112 2.85423 2.61182 2.41762 3.01864 3.73701 5.78920 4.16743 392 e - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01041 4.96623 5.68858 0.61958 0.77255 0.61678 0.77584 221 2.56616 4.88573 3.26662 2.33696 2.41520 3.27403 3.41068 2.92250 2.70761 2.68623 3.97070 3.19787 3.38122 3.16656 2.79903 2.47364 2.99470 2.86843 4.82552 3.32054 393 e - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01041 4.96623 5.68858 0.61958 0.77255 0.61678 0.77584 222 2.62567 5.35084 2.04845 2.35215 4.39252 3.47212 3.16243 3.98892 2.45186 3.65226 3.66396 2.66846 2.63580 2.82810 3.05661 2.22708 2.99549 3.54011 5.78899 3.92777 394 d - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03667 4.96623 3.53930 0.61958 0.77255 0.61678 0.77584 223 2.86103 4.03193 3.18635 2.38909 3.31435 3.61153 3.49109 2.70908 2.69769 2.69388 3.88535 3.22191 3.67076 3.11276 2.73635 2.49324 3.00545 2.72730 2.94731 2.96802 395 e - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01875 4.94025 4.47244 0.61958 0.77255 0.67631 0.71028 224 2.62521 5.12447 2.77972 2.44738 3.31605 3.53418 3.86652 3.33309 2.47319 3.03557 4.18886 3.10134 2.42408 2.60018 2.70100 2.64509 2.92363 3.22521 3.41935 3.46519 396 p - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.05901 4.93227 2.99396 0.61958 0.77255 0.69360 0.69269 225 2.68343 5.20702 2.88582 2.22963 3.55567 3.45903 3.65367 3.49248 2.11994 2.97314 4.26172 2.80968 3.57686 2.44336 3.06162 2.53581 2.67303 3.18308 3.73101 3.66292 397 k - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01130 4.88456 5.60691 0.61958 0.77255 0.78866 0.60597 226 2.68707 4.98468 2.82158 2.38405 3.75917 3.36024 3.65392 3.18317 2.38508 2.73942 3.76303 3.22111 3.36652 3.04584 2.96704 2.31757 2.64759 2.95752 3.21600 3.40268 398 s - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.11345 4.88456 2.30573 0.61958 0.77255 0.78866 0.60597 227 2.79298 3.84213 2.48108 2.52210 3.99851 3.60747 3.12972 3.13545 2.48018 3.05991 4.13768 2.83211 3.54520 2.93964 2.41588 2.35619 2.76810 2.97839 5.56015 3.44494 399 s - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02807 4.78362 3.94704 0.61958 0.77255 0.95264 0.48731 228 2.58191 4.56682 2.77742 2.37170 4.46635 3.58143 3.77449 3.50815 2.36445 2.67587 4.22448 2.86502 2.73607 2.80387 2.79297 2.07848 2.75446 3.53442 5.63386 3.74575 400 s - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.14447 4.76826 2.07130 0.61958 0.77255 0.97412 0.47405 229 2.74120 5.02625 2.90214 2.38037 3.96892 2.81361 3.75340 3.09744 2.29181 2.85276 3.79351 2.85134 3.31773 2.88600 2.57247 2.48932 2.74923 2.81409 5.51153 4.15648 401 k - . 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02950 4.63827 3.94280 0.61958 0.77255 1.12880 0.39071 230 2.65814 5.03703 2.72915 2.44094 4.30481 3.19996 3.74471 3.73960 2.51991 2.72378 3.12113 3.05398 2.98987 2.79382 2.49179 2.12708 2.96796 3.38544 5.51898 3.52938 402 s - . 2.68724 4.42293 2.77612 2.73159 3.46162 2.40699 3.72369 3.29398 2.67731 2.69321 4.24701 2.90285 2.73662 3.18257 2.89624 2.37860 2.77511 2.98573 4.58252 3.61251 0.60323 0.80254 5.34581 2.99471 0.05135 0.22221 1.61320 231 2.51767 5.38833 2.69504 1.91983 4.73145 3.65677 3.84405 3.51135 2.26714 3.33248 4.42951 2.74739 2.83044 2.63263 2.69535 2.26534 2.89575 3.77792 5.82218 4.12814 442 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 232 2.61324 5.33087 2.55247 1.71577 3.78905 3.51981 3.85697 4.11872 2.53837 3.37618 3.68276 2.71899 3.50504 2.96215 2.76975 2.43182 2.62759 3.19721 4.83386 4.08215 443 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 233 1.85315 2.66076 4.74963 4.14369 2.72361 2.76389 4.40211 2.66580 3.95769 1.60680 3.08425 4.19191 4.43908 4.11400 4.01342 3.37949 2.94810 2.35782 4.93743 3.75833 444 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 234 2.54113 3.93957 3.31567 2.58263 3.59686 3.36801 3.93655 2.84244 1.77469 2.55244 4.12290 3.02474 4.11900 2.54032 2.70090 2.93506 2.79964 3.23719 5.55956 3.97978 445 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 235 2.66035 5.38903 1.80529 2.16718 4.22724 3.25823 3.17680 4.00903 2.28647 3.50730 4.43018 2.97613 4.05032 2.48614 2.98498 2.31241 3.11375 3.77870 5.82277 3.97909 446 d - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 236 3.21254 4.56529 5.14365 4.53738 1.97526 4.40976 4.73239 2.19759 4.34073 1.04052 3.41232 4.55986 4.72994 4.44093 4.35221 3.72900 3.00622 2.20314 5.16040 3.53582 447 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 237 2.97518 4.05135 5.35921 4.78478 3.77817 4.66169 5.06989 1.35059 4.61468 1.50253 2.60400 4.82061 4.97178 4.75525 4.65269 4.00168 3.59517 1.52175 5.50364 4.33590 448 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 238 2.63113 4.16111 2.70523 2.01221 4.32546 2.89528 3.69801 3.91463 1.97992 3.37990 4.41866 2.72468 4.05215 2.88390 2.65380 2.44936 2.78930 3.52828 5.81309 3.68713 449 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 239 2.79532 4.56741 2.59886 2.26653 4.72524 2.97326 3.84498 4.20852 1.87988 3.68761 4.42563 2.67816 4.05093 2.72680 2.26697 2.39445 3.11354 3.44147 4.06926 3.70096 450 k - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 240 2.76031 1.91137 4.93344 4.32897 3.47342 4.21043 4.55379 2.12811 4.13437 1.60981 2.11111 4.35327 4.56463 4.27495 4.16872 3.52442 2.73881 2.49904 5.05160 3.88034 451 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 241 3.00579 3.43594 4.91160 4.30236 2.88535 4.17356 4.48924 2.41412 3.62991 0.97514 3.41700 4.31537 4.52645 4.23058 4.12367 3.48482 3.23680 2.59853 2.70167 3.78558 452 l - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 242 2.51291 3.86266 2.42773 2.26878 4.71076 3.65927 3.14908 3.51790 2.32370 3.67561 4.41657 2.44903 4.05255 2.58104 2.64695 2.72413 2.48024 3.27065 5.81133 3.77060 453 e - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 243 2.89024 4.99098 3.22187 2.69841 3.16242 3.74556 3.43367 3.45008 2.12873 2.47972 3.65551 3.30484 3.00902 2.69329 2.47140 2.87653 2.77051 2.80352 4.74384 3.09104 454 k - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 244 2.75442 4.59220 1.48443 2.55169 4.69407 3.66624 3.85987 4.16899 2.26580 3.66358 4.41104 2.16093 4.06270 2.96232 2.94350 2.69711 3.00639 3.21953 5.80766 4.40610 455 d - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 245 2.53666 4.51809 3.31495 2.50094 3.81458 3.47863 3.66745 3.68842 2.74796 3.30408 3.76297 2.90283 1.45947 2.98944 2.97069 2.84711 3.12065 2.90248 5.56105 4.23506 456 p - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 246 2.18867 5.36299 2.90524 2.21328 4.32931 3.53924 3.49382 3.97251 2.24621 3.14962 3.99253 2.78034 3.78478 2.54072 2.85251 2.30318 2.70173 3.25844 5.80328 3.47734 457 a - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 247 2.48590 4.36945 2.67418 2.22639 4.72760 3.65776 3.84501 4.21118 1.68322 3.11616 4.42723 3.02530 4.05117 2.52411 2.40832 2.54354 2.78662 3.77464 5.82017 4.41136 458 k - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 248 3.97870 5.88109 4.77637 3.79584 5.10245 4.51923 4.26030 4.68907 2.25479 4.07008 4.99673 4.06985 4.83329 3.42182 0.45649 3.98836 4.07883 4.42272 3.45519 4.78623 459 R - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 249 2.59820 4.04607 4.60274 4.00452 3.26886 3.61184 4.36773 2.06089 3.84570 1.56372 3.45362 4.11687 2.06890 4.02734 3.95003 2.68390 3.14561 2.58630 4.40258 3.38622 460 l - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04987 5.01631 3.16967 0.61958 0.77255 0.48576 0.95510 250 2.79362 5.19179 3.01710 2.75300 4.64905 2.77281 4.01085 4.10036 2.79939 3.46822 4.43166 2.61914 4.12461 3.14023 3.27668 1.68833 1.53351 3.69065 5.84113 4.47617 461 t - T 2.68631 4.42192 2.77519 2.73130 3.46353 2.40482 3.72508 3.29367 2.67738 2.69360 4.24703 2.90360 2.73753 3.18148 2.89804 2.37867 2.77518 2.98532 4.58490 3.61498 0.12278 2.37863 3.77824 1.17468 0.36950 0.42506 1.06054 251 1.47902 3.78300 4.72209 4.11644 2.74562 3.65840 4.38345 2.02614 3.93274 2.07959 3.21794 4.17061 3.49702 4.09137 3.99270 2.98272 3.05871 2.38788 4.48487 3.74373 467 a - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01009 4.99737 5.71972 0.61958 0.77255 0.53813 0.87669 252 2.38222 4.71734 2.84513 2.05232 4.42547 3.25385 3.43556 4.19285 2.14440 3.09056 3.51596 2.80436 3.18490 2.67888 2.63294 2.69832 2.67125 3.58577 5.80764 4.40015 468 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01009 4.99737 5.71972 0.61958 0.77255 0.45436 1.00747 253 2.65797 4.06542 2.63237 1.57032 4.71890 3.65831 3.45654 4.20087 2.52289 3.68238 4.00276 3.00654 3.59507 2.12286 2.86428 2.58695 3.11362 3.45316 5.81563 3.91003 469 e - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 254 1.93383 3.77543 4.87213 4.26567 3.27005 3.35948 4.48352 1.60295 4.06924 1.71770 3.29328 4.28554 4.50523 4.21524 4.10410 3.45599 3.20183 2.00553 4.99383 3.81574 470 i - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 255 2.91099 3.35807 4.39311 3.80506 3.12662 3.41984 4.32058 2.74098 2.62412 1.35983 2.89439 3.70896 4.38574 3.55146 3.43970 3.02120 3.14303 2.30767 4.99433 3.18557 471 l - H 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 256 2.62697 4.23577 2.94369 2.01671 4.73311 3.52212 3.12192 4.21804 1.98366 3.41966 4.43054 2.33684 4.05005 2.29561 2.80226 2.65814 2.90658 3.41449 5.82302 4.41298 472 k - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 257 2.67425 5.24257 2.69003 2.64384 4.09422 3.68496 1.59772 3.97575 2.52719 3.06621 3.97630 3.17995 4.07682 2.88982 2.86815 2.31165 2.78826 3.60139 5.71188 4.10399 473 h - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.18941 5.01631 1.79622 0.61958 0.77255 0.48576 0.95510 258 2.81850 5.23743 2.76502 2.35780 4.54654 3.39495 3.79640 3.57339 2.36240 3.35446 4.28834 3.08690 1.61434 2.83455 2.79066 2.56844 3.04975 3.37601 5.69198 4.30446 474 p - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01183 4.83873 5.56107 0.61958 0.77255 0.86853 0.54398 259 3.22678 4.58175 4.94227 4.40609 1.73776 4.31983 4.20406 3.01156 4.21650 2.23279 3.33965 4.33985 4.66520 3.80636 4.24184 3.63704 3.45535 2.61441 1.69956 1.91736 475 w - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01183 4.83873 5.56107 0.61958 0.77255 0.30436 1.33787 260 2.99670 4.36610 4.95290 4.33956 1.72799 3.71830 4.50360 1.92619 4.12878 1.69258 2.79907 4.33234 4.52551 4.25179 4.13733 3.48573 3.22794 1.98896 4.25850 3.81122 476 l - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00667 5.01308 * 0.61958 0.77255 0.00000 * // hmmer-3.1b2/tutorial/fn3.hmm0000664361611702660230000012021412473612615015326 0ustar wheelerteddyHMMER3/f [3.1b1 | May 2013] NAME fn3 ACC PF00041.13 DESC Fibronectin type III domain LENG 86 ALPH amino RF no MM no CONS yes CS yes MAP yes DATE Fri Jun 20 08:22:31 2014 NSEQ 106 EFFN 11.415833 CKSUM 3564431818 GA 8.00 7.20 TC 8.00 7.20 NC 7.90 7.90 STATS LOCAL MSV -9.4043 0.71847 STATS LOCAL VITERBI -9.7737 0.71847 STATS LOCAL FORWARD -3.8341 0.71847 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.70330 4.91262 3.03272 2.64079 3.60307 2.84344 3.74204 3.07942 2.79841 2.65364 4.14864 2.95826 2.87120 3.02176 2.96125 2.44783 2.59757 2.57680 4.02726 3.21526 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.00000 * 1 3.16986 5.21447 4.52134 3.29953 4.34285 4.18764 4.30886 3.35801 3.70246 2.11675 4.32057 4.32984 0.76706 3.91880 4.22437 3.23552 3.21670 2.88223 5.80355 3.93889 1 p - - - 2.68629 4.42236 2.77530 2.73088 3.46365 2.40512 3.72505 3.29365 2.67737 2.69316 4.24701 2.90358 2.73734 3.18157 2.89812 2.37898 2.77517 2.98515 4.58488 3.61514 0.09796 2.38361 6.81068 0.10064 2.34607 0.48576 0.95510 2 2.70230 5.97353 2.24744 2.62947 5.31433 2.60356 4.43584 4.79731 3.17221 2.95090 5.01531 3.26630 2.09873 3.30219 3.34190 1.45782 3.14099 3.57507 6.40877 4.25623 3 s - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 3 1.38116 5.98285 3.50784 2.54546 5.32790 3.48945 4.43311 4.81385 2.38773 3.98773 5.02352 3.27895 1.92260 2.69012 2.96119 2.64228 3.29228 3.29618 6.41555 4.20553 4 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 4 3.32856 5.10403 4.47046 4.60386 4.23079 4.75438 5.09647 2.69918 4.46632 2.97102 4.23502 4.77984 0.63388 4.68581 3.76781 4.05413 3.46306 2.04533 5.75329 4.56372 5 P - - - 2.68616 4.42236 2.77530 2.73134 3.46365 2.40523 3.72505 3.29295 2.67751 2.69303 4.24634 2.90357 2.73739 3.18157 2.89783 2.37897 2.77530 2.98529 4.58488 3.61514 0.09682 2.39494 6.81068 0.10162 2.33687 0.48576 0.95510 5 2.95325 4.65976 3.57762 2.20709 3.14816 2.51487 3.41109 4.78902 2.65862 3.19599 4.41042 3.45032 3.44719 2.43205 2.26492 2.25400 2.23196 3.66828 4.80003 4.52485 7 e - - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.01246 6.08833 4.59386 0.61958 0.77255 0.48576 0.95510 6 2.74215 5.97618 2.19482 2.69150 4.58171 2.33553 3.83525 3.28222 2.95080 3.32698 5.01691 1.45822 3.52462 2.79670 2.90942 3.13467 3.27956 4.36668 6.40902 3.92307 8 n - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00341 6.07928 6.80162 0.61958 0.77255 0.44282 1.02784 7 3.32507 4.98102 3.78072 3.31043 2.85257 4.76439 5.09585 2.50332 4.69760 1.03851 3.36125 4.91001 2.73206 4.83820 4.72389 4.07376 3.83146 1.59790 5.60385 4.42704 9 l - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03752 6.08833 3.36505 0.61958 0.77255 0.48576 0.95510 8 3.15997 4.90658 3.35204 2.72775 4.53493 3.60960 2.65074 3.69535 2.11078 4.01384 4.99896 3.14668 4.61695 2.40643 2.34723 1.92358 2.03982 3.05153 6.39127 4.98082 10 s - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00349 6.05430 6.77664 0.61958 0.77255 0.35749 1.20207 9 1.76295 3.98252 5.55061 4.93551 2.13202 3.39992 5.09294 2.14638 4.23898 2.23988 3.42109 4.92079 4.39252 3.70640 3.99349 3.50811 3.63432 1.47830 4.51148 4.41177 11 v - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 10 3.01387 4.98892 2.91217 2.42744 5.22342 4.00576 3.74074 2.67275 2.47618 2.92529 3.89570 3.36720 4.15809 3.26810 2.80854 1.81572 2.02040 2.77133 4.92415 4.31555 12 s - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 11 2.41247 5.98374 2.24093 2.04842 3.41543 2.59695 4.10033 4.81544 3.05501 4.28918 5.02429 2.22829 2.90635 3.12939 3.01921 2.37278 3.01194 3.02522 6.41619 3.66635 13 e - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.06784 6.08833 2.75947 0.61958 0.77255 0.48576 0.95510 12 2.77725 4.36386 3.23435 2.92496 4.75140 4.31852 4.53101 1.91389 3.01135 2.51491 3.47932 2.97934 3.54432 2.88257 2.68923 3.07794 2.71169 1.80880 6.06849 4.75973 14 v - - E 2.68623 4.42259 2.77533 2.73059 3.46323 2.40500 3.72529 3.29333 2.67757 2.69369 4.24724 2.90364 2.73744 3.18108 2.89835 2.37891 2.77531 2.98493 4.58511 3.61510 0.22113 1.62346 6.74643 0.44471 1.02446 0.29166 1.37446 13 3.17575 5.97994 3.10322 2.84738 5.32369 2.00173 4.43389 4.80873 3.01150 3.75019 4.42663 2.23751 4.64014 2.74467 2.85546 1.99984 1.67133 4.36987 5.08444 3.58488 18 t - - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 14 2.14203 5.98483 2.53686 2.20884 5.33077 2.76253 3.61799 4.81737 2.91636 3.96256 5.02525 2.79307 2.44932 3.35978 3.34773 1.76758 2.51815 4.12754 4.53404 4.35768 19 s - - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02274 6.08833 3.90154 0.61958 0.77255 0.48576 0.95510 15 3.45984 5.96297 2.32904 2.98671 5.30486 3.14893 3.59992 3.68067 2.95954 4.26690 5.00447 2.01875 4.62814 3.51950 2.89162 1.97303 1.47565 3.87160 6.39755 3.59993 20 t - - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00344 6.06904 6.79138 0.61958 0.77255 0.40302 1.10352 16 2.82603 5.98256 2.96292 2.53617 4.39559 3.14388 4.09532 4.81336 2.59005 4.28779 5.02326 3.12547 4.63955 2.76620 3.03618 1.28432 2.14874 3.55065 4.82032 3.29405 21 s - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 17 2.29842 4.96481 5.56794 4.95172 2.45211 3.33868 4.31545 1.97312 4.73378 1.34355 2.88087 4.92903 5.12608 4.86259 4.73754 4.07438 3.55674 1.71344 5.58685 3.78328 22 l - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 18 2.99930 4.68496 3.44656 2.53427 3.92510 4.04338 3.13178 3.10095 3.07007 2.68343 3.58599 3.17010 4.15335 2.63450 2.71950 2.30083 2.03779 2.23518 4.92400 3.84991 23 t - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 19 3.61302 4.50726 5.99163 5.39935 2.74200 5.23506 5.61087 1.85210 5.20622 1.10188 3.56291 5.40353 5.56305 5.33364 5.22134 4.56441 3.85751 1.20867 6.05610 4.88933 24 l - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 20 2.90508 5.98486 3.37356 2.37027 5.33083 3.46854 3.40789 4.81743 2.65230 3.22177 4.17825 2.67373 4.63906 2.52648 2.39431 1.50547 2.16764 4.37598 5.01440 5.00552 25 s - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 21 5.54218 6.63564 6.83891 6.61797 2.57168 6.35073 5.30532 3.96643 6.37377 3.18917 5.26281 6.07009 4.35269 6.11992 6.21105 5.74680 5.75143 4.86346 0.24436 3.66807 26 W - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 22 3.10862 5.98423 2.61761 2.10221 4.46995 3.93009 3.84182 3.79843 2.19229 3.09373 4.47555 2.66452 4.06864 2.59255 2.99987 1.99073 2.05618 3.67318 6.41655 4.47364 27 s - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 23 2.05280 5.87614 3.77610 2.63103 5.17655 3.25143 3.55897 3.09279 2.68152 3.35866 4.92882 3.43937 1.44938 3.29932 2.98336 2.85751 2.78420 3.02863 4.43359 4.47040 28 p - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 24 2.65644 5.88726 3.37601 2.96202 5.19190 3.53629 4.46143 4.20046 2.87295 2.91429 4.93884 3.27084 1.07653 3.39095 3.69926 2.07705 3.29723 2.92337 6.34501 4.95985 29 p - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.32165 6.08833 1.29911 0.61958 0.77255 0.48576 0.95510 25 2.44244 5.77880 2.64467 2.21733 3.20572 3.66340 3.27861 4.60939 2.17717 2.95495 4.81953 3.17778 2.62084 2.96028 2.64039 2.55818 2.51134 3.52175 6.21164 4.20060 30 k - - S 2.68557 4.42278 2.77404 2.73101 3.46370 2.40555 3.72548 3.29364 2.67779 2.69337 4.24743 2.90378 2.73741 3.18051 2.89835 2.37928 2.77557 2.98526 4.58530 3.61392 1.12909 0.74203 1.60680 0.24883 1.51281 1.67198 0.20810 26 2.76497 5.64634 2.06362 2.44254 4.06108 3.91520 3.28362 3.73992 2.46695 3.95074 4.68755 2.93859 2.87257 2.71813 3.08100 2.16767 2.28242 3.00778 6.08028 4.00221 33 d - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00580 5.54941 6.27176 0.61958 0.77255 1.23854 0.34222 27 2.94904 4.81418 2.88265 2.99332 4.83563 1.49306 3.87927 3.68299 2.59086 2.53757 4.07313 2.89409 2.92833 3.04624 2.88166 2.82744 3.22994 3.21444 4.18838 4.04981 34 g - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00508 5.68074 6.40309 0.61958 0.77255 0.20085 1.70396 28 2.96588 5.95917 2.45759 2.65943 5.30490 1.91234 3.11781 3.44164 2.78003 4.01788 4.99965 2.12379 3.26764 2.84040 2.87160 2.26272 3.15721 3.84740 4.86821 3.64128 35 g - - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00351 6.05095 6.77330 0.61958 0.77255 0.34864 1.22298 29 2.45969 5.96445 2.88574 2.61716 5.30131 1.53630 4.43818 3.46883 2.98393 3.60366 4.33332 3.25719 4.28257 3.08417 2.40821 2.08539 3.20111 2.81105 6.40207 4.25093 36 g - - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 30 2.71563 5.98438 2.50720 1.96228 5.33013 3.47246 3.38617 3.68065 2.34086 4.03521 4.36775 3.08029 1.87041 2.90329 3.33287 2.70645 2.77558 2.97286 6.41666 4.17777 37 p - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 31 3.04837 4.96747 2.67316 4.92527 2.42064 4.14655 5.09097 1.34551 4.71334 2.18068 3.34829 4.91585 3.31178 4.15082 4.72663 3.69906 3.53551 1.88881 3.93067 3.04034 38 i - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 32 2.89418 4.58676 2.12720 2.65970 3.99748 4.30700 4.50689 3.12934 2.75241 2.32504 4.34805 3.25317 4.69765 2.93544 2.97945 2.48570 1.85268 2.60501 5.05387 4.40931 39 t - - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 33 3.05045 5.96458 3.15002 2.79713 4.16491 1.56242 3.20986 4.07540 2.34002 3.77648 3.66616 2.65073 4.64351 3.21500 2.62101 2.34442 2.98761 3.25677 5.04578 3.36446 40 g - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 34 4.72855 5.99332 6.32397 5.91516 1.75259 5.71064 3.47111 3.64093 3.68669 3.44300 5.13564 5.60513 6.03397 5.64902 5.63703 5.05114 4.95149 3.46344 3.97019 0.49348 41 Y - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 35 3.03913 5.98101 2.74983 1.95825 3.75604 3.98121 3.78677 3.48894 2.41418 2.89991 5.02189 2.66693 4.63989 2.65222 2.20113 2.26435 2.64729 3.16844 6.41420 3.93691 42 e - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 36 3.75576 5.90373 6.92143 6.48083 5.27028 6.48043 7.33031 1.16190 6.46559 1.72148 4.18143 6.65320 6.63807 6.70678 6.63399 5.94811 5.00240 0.82398 7.51298 6.31097 43 v - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.04904 6.08833 3.08806 0.61958 0.77255 0.48576 0.95510 37 2.63429 4.71789 2.89387 2.04081 4.17861 4.22097 3.38514 2.92734 2.36124 3.26230 4.97143 3.69265 4.61418 2.27063 2.38238 2.70982 2.11937 3.37005 6.36711 3.73375 44 e - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00353 6.04282 6.76517 0.61958 0.77255 0.32899 1.27173 38 3.00800 2.48193 5.53105 4.91728 2.98458 4.75707 4.15268 2.83469 3.12355 2.32451 4.08737 4.91198 5.12099 4.84273 3.46182 3.58557 3.26283 2.28912 2.64554 1.29971 45 y - - E 2.68641 4.42053 2.77543 2.73091 3.46377 2.40536 3.72420 3.29377 2.67764 2.69378 4.24582 2.90336 2.73763 3.18113 2.89660 2.37910 2.77543 2.98542 4.58500 3.61526 0.12278 2.16768 6.81068 0.54422 0.86820 0.48576 0.95510 39 2.52553 4.02469 3.60093 2.65311 4.18239 3.63052 4.17989 3.44209 2.14970 3.12319 4.96260 3.43770 4.02454 2.12722 2.15391 2.32250 3.25888 3.40611 2.73453 3.57446 49 q - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02932 6.08833 3.62591 0.61958 0.77255 0.48576 0.95510 40 2.85303 5.96779 2.74660 1.91867 5.31393 3.60453 3.59476 4.33679 2.36399 3.57280 3.62613 2.83996 2.06170 2.51716 3.24767 2.43993 2.61505 3.39964 6.39984 4.98824 50 e - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00347 6.06248 6.78482 0.61958 0.77255 0.67944 0.70705 41 2.55267 3.11480 2.72137 2.31006 5.21613 3.67111 4.08491 3.18721 2.11932 2.73126 3.73119 3.72342 3.44703 2.78931 3.31632 2.60923 2.50487 2.33623 6.34948 4.95631 51 k - - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.09789 6.06248 2.39773 0.61958 0.77255 0.38130 1.14877 42 3.41114 5.92195 2.00739 2.51445 4.35946 1.85149 4.04885 4.75310 3.02073 3.41727 4.96259 1.88803 4.57836 2.81891 2.77402 2.53317 2.79169 3.60394 6.35459 4.48731 52 g - - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00370 5.99676 6.71911 0.61958 0.77255 0.25112 1.50474 43 2.89692 5.98568 2.39354 2.04021 5.33202 2.12548 3.27810 4.81889 2.36649 3.39071 4.58505 2.82477 4.63888 2.99231 3.02264 2.04514 2.45319 3.82791 6.41761 5.00590 53 e - - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 44 3.10206 5.95088 3.50928 2.19657 4.70794 1.83640 4.44201 3.85177 2.81849 3.20653 3.64542 2.17673 2.82486 2.50236 3.67274 2.64718 2.71954 3.18909 6.39210 3.73228 54 g - - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.08059 6.08833 2.58819 0.61958 0.77255 0.48576 0.95510 45 2.83017 5.93388 2.31048 1.94273 5.28007 2.46456 3.60606 4.35357 2.35448 2.95362 4.97424 3.06816 3.41033 2.69285 2.84649 2.21743 2.98206 3.67978 4.23187 4.95426 55 e - - C 2.68733 4.40831 2.77609 2.73043 3.46444 2.40393 3.72592 3.29278 2.67833 2.69426 4.24827 2.90407 2.73626 3.18024 2.89744 2.37952 2.77650 2.98614 4.58019 3.61570 1.45631 0.90375 1.01651 1.51529 0.24813 0.96821 0.47765 46 2.32839 5.42660 2.93163 2.28220 4.02543 3.04571 3.03894 3.22247 2.82753 3.21315 3.89864 3.49093 2.50859 3.14260 2.89921 2.69284 3.05772 2.38519 4.38264 3.20345 66 e - - G 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00571 5.56406 6.28641 0.61958 0.77255 0.18459 1.78051 47 2.69465 3.91083 2.42967 2.34662 4.43247 3.13708 3.62175 3.49809 2.56727 2.84127 4.03266 3.52527 3.00745 3.22895 3.52756 2.46523 2.69768 3.11906 2.19019 4.92515 67 w - - C 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00353 6.04443 6.76678 0.61958 0.77255 0.33269 1.26228 48 2.67627 5.86490 3.17099 3.22595 3.40616 4.27494 3.15476 3.07365 2.21494 2.78239 4.39426 2.30764 3.56160 2.19351 2.71433 2.94392 2.62330 2.55032 5.16850 4.37026 68 q - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 49 3.05871 5.98132 3.36643 1.71285 5.32569 3.90513 2.27648 4.25125 2.92072 4.28630 4.28595 2.90579 3.33969 2.79371 2.63337 2.42582 2.46361 2.81009 3.46671 3.72048 69 e - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 50 2.88323 4.65127 3.40086 2.73607 2.41972 3.62669 3.91044 2.52424 2.75640 2.37424 3.94274 3.64921 4.76561 2.38668 2.64750 3.03028 3.09193 2.27100 6.08057 3.03402 70 v - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 51 3.36533 5.95840 2.65995 2.86095 3.44584 4.25167 3.55888 2.90987 2.78397 3.33346 3.90493 2.03375 3.68901 2.80089 2.78508 2.11531 1.97302 3.15541 6.39763 4.99330 71 t - - E 2.68571 4.42246 2.77540 2.73144 3.46375 2.40497 3.72515 3.29375 2.67742 2.69376 4.24711 2.90367 2.73710 3.18135 2.89822 2.37876 2.77540 2.98457 4.58498 3.61524 0.06628 2.76409 6.81068 0.97562 0.47314 0.48576 0.95510 52 2.38926 5.49703 3.09615 2.80044 4.68202 3.76562 4.62096 2.19958 3.33274 2.03099 4.11871 2.97731 4.26404 3.83080 2.89542 3.19964 2.84193 1.56133 6.03936 4.75239 75 v - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 53 2.79501 4.92737 2.35659 2.60299 4.06511 2.98090 3.88301 4.80087 2.44593 3.57653 5.01701 3.37711 1.76863 3.53250 3.23955 1.94419 2.68524 2.95506 6.41016 5.00121 76 p - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 54 2.44542 5.98316 3.18675 2.55065 5.32835 2.12386 4.43300 4.38419 2.38413 2.93654 5.02378 2.50193 2.49139 3.27226 2.05133 2.36069 3.70337 4.12664 4.32391 4.48343 77 r - - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 55 2.77179 5.98329 2.50848 2.76644 5.32854 3.30269 3.08416 4.38434 3.16759 4.28865 5.02390 2.27915 2.67265 2.61285 3.32102 2.18277 1.82444 2.83013 6.41587 4.35727 78 t - - T 2.68621 4.42251 2.77546 2.73149 3.46380 2.40468 3.72521 3.29380 2.67767 2.69252 4.24716 2.90344 2.73766 3.18134 2.89827 2.37913 2.77442 2.98545 4.58503 3.61529 0.07130 2.69245 6.81068 1.11635 0.39671 0.48576 0.95510 56 2.32530 5.97446 3.57954 1.89562 5.31575 4.24796 3.32554 3.73278 2.42253 2.98562 5.01611 3.71687 3.10116 2.71107 2.91871 2.60336 1.70360 3.15915 6.40941 5.00074 83 t - - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.35248 6.08833 1.22151 0.61958 0.77255 0.48576 0.95510 57 2.95924 5.72336 2.75932 2.63159 3.96190 3.29462 3.22449 3.40062 2.77057 3.18108 3.56769 2.46117 2.98702 3.05715 2.72729 2.56520 1.96589 3.52719 6.16591 2.96938 84 t - - S 2.68622 4.42162 2.77539 2.73088 3.46349 2.40510 3.72514 3.29311 2.67761 2.69358 4.24710 2.90367 2.73759 3.18166 2.89753 2.37894 2.77488 2.98538 4.58497 3.61523 0.23969 1.55321 6.46298 0.15973 1.91309 0.51157 0.91517 58 2.78411 5.86726 3.65151 2.46190 3.55121 3.32277 3.71415 3.82816 2.87545 3.69015 4.27003 2.90512 3.60994 2.68731 2.37548 1.72361 1.95655 3.42914 6.30822 3.85760 87 s - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00384 5.96109 6.68344 0.61958 0.77255 0.21363 1.64843 59 2.13080 3.38910 5.56698 4.95075 2.41578 4.20194 3.39215 2.83299 4.73282 2.14660 3.19234 4.92810 5.12527 4.86169 4.18461 4.07348 3.03808 1.63705 4.66089 1.78369 88 v - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 60 3.12543 5.93769 2.99354 2.53954 5.26303 4.25659 3.21054 2.85212 2.62935 2.82513 3.45830 2.90110 4.19559 2.80624 3.10357 2.88568 1.50190 2.67316 6.38237 3.93622 89 t - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 61 3.61965 4.99402 3.63828 4.95783 2.26826 4.79135 5.12555 1.86647 4.74679 1.34194 3.74460 4.94944 5.15281 3.10559 4.75989 3.74420 3.85186 1.42486 5.61987 4.44474 90 l - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 62 3.10387 5.98366 3.06368 2.31445 4.05906 3.57903 3.48488 4.81531 2.43543 4.01680 3.91148 2.67498 2.99920 2.70828 2.56621 2.14984 1.90367 3.06274 4.55677 4.37671 91 t - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 63 3.34220 5.98744 1.86090 2.69096 5.33359 1.40608 3.63608 4.82043 2.48624 4.29318 4.45099 1.96888 4.06897 3.19339 3.48838 2.73868 3.70514 4.37867 6.41942 4.25681 92 g - - S 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 64 5.18530 6.36522 4.58586 6.57578 3.53131 6.59442 6.84537 2.81242 6.44067 0.21363 3.54046 6.78308 6.53953 6.19263 6.31583 5.99910 5.37457 3.39834 6.73440 5.83217 93 L - - - 2.68590 4.42227 2.77521 2.73125 3.46356 2.40515 3.72496 3.29356 2.67743 2.69357 4.24692 2.90349 2.73741 3.18148 2.89803 2.37889 2.77521 2.98520 4.58479 3.61505 0.02033 3.96193 6.81068 0.31431 1.31041 0.48576 0.95510 65 2.93361 5.98253 3.16620 2.07447 5.32745 3.84017 3.84639 3.52003 2.07989 2.71701 4.56317 3.05465 3.94228 2.39023 2.13660 2.81003 2.42767 2.98359 6.41531 3.87097 95 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 66 2.17452 5.85112 3.79178 2.44872 5.14174 4.27993 4.47388 4.59086 3.04069 4.13287 4.42378 3.36057 0.82761 3.31072 3.71538 3.13243 3.15654 3.97958 4.90439 4.38214 96 p - - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 67 2.72531 5.97666 2.50761 2.79752 4.22378 1.29966 2.70734 4.80294 2.85170 4.02964 5.01805 2.59981 4.64085 3.32835 3.25617 2.51345 3.59137 3.91820 4.88800 2.97800 97 g - - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 68 2.39925 4.86641 3.79312 2.74568 5.13568 4.27988 3.97435 3.95098 2.69562 3.65359 3.00813 3.38952 4.67180 3.12070 2.33490 2.43668 1.27713 2.90106 6.31421 4.93977 98 t - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 69 2.87821 5.98261 2.71299 2.05681 3.93787 3.36966 3.57296 3.81023 2.25993 3.03102 3.49917 2.39917 3.09415 2.62154 2.82818 2.67359 2.51409 3.67730 4.58228 5.00448 99 e - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 70 6.32206 7.09639 6.95855 7.01624 2.70399 6.62558 5.12529 5.84365 6.77161 4.03604 6.32463 4.32154 6.86163 6.30239 6.48747 6.05185 6.49899 5.81871 5.18730 0.14189 100 Y - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 71 3.06725 5.97020 3.56838 1.93769 4.23056 3.77167 3.39655 3.53252 2.56448 3.45405 4.47893 2.47898 4.64226 2.55695 2.74362 2.36648 2.01401 2.66399 6.40629 3.70776 101 e - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 72 3.19486 4.19171 5.58508 4.96942 1.44027 4.15574 5.11433 1.81297 4.75161 2.09873 3.37140 4.94615 5.14143 4.88008 4.75485 4.09123 3.83769 1.47173 5.60267 3.09551 102 f - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 73 3.18039 4.06436 3.15201 2.27681 5.32468 3.77041 3.95744 3.70705 2.23538 4.28548 4.11883 2.88564 4.63997 2.58030 1.70576 2.27707 2.39981 3.62914 4.03739 3.61343 103 r - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 74 3.76685 5.84337 6.79391 6.31497 3.84743 6.27452 6.95358 1.59565 6.25134 2.11498 4.30213 6.44619 6.46746 6.44080 6.36566 5.70153 4.90672 0.53161 7.20703 6.03175 104 V - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 75 2.31005 4.88319 3.40675 2.63903 3.58848 4.26911 3.49342 3.09105 2.39543 3.00463 4.93879 3.41670 4.66153 1.98639 2.22144 3.11070 2.61129 2.78609 6.34491 2.92043 105 q - - E 2.68621 4.42228 2.77522 2.73126 3.46357 2.40516 3.72497 3.29357 2.67744 2.69312 4.24693 2.90350 2.73743 3.18149 2.89804 2.37890 2.77522 2.98521 4.58480 3.61506 0.03738 3.58894 4.70319 0.25135 1.50394 0.48576 0.95510 76 0.79499 5.17226 4.80437 3.93376 4.33120 3.17569 4.96596 3.30029 4.15773 2.86829 4.32533 4.52823 5.01384 4.41886 4.42465 2.28661 2.19420 2.76335 5.81537 4.60940 107 a - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00340 6.08033 6.80268 0.61958 0.77255 0.44741 1.01966 77 2.84306 4.15407 4.98296 3.19564 3.23517 4.66606 3.67524 2.49603 3.23224 2.21212 3.84796 4.62630 5.03633 2.88555 2.43211 3.49088 3.22704 1.33993 5.67363 2.88123 108 v - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 78 3.27061 4.75060 2.81965 3.10410 5.31934 3.95942 3.99367 3.88107 2.62205 4.02823 5.01830 1.35628 3.08534 3.32913 3.08546 1.88067 2.21938 4.02145 6.41122 3.76470 109 n - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00992 6.08833 4.87890 0.61958 0.77255 0.48576 0.95510 79 2.39836 4.69624 2.57939 2.56364 4.72011 1.55094 3.74815 4.26504 2.61409 4.28517 5.02018 2.82673 4.26340 2.69971 2.87382 2.73983 2.53993 3.07568 6.41202 5.00074 110 g - - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00340 6.08180 6.80415 0.61958 0.77255 0.45398 1.00812 80 2.22211 4.94595 2.69424 2.44928 4.84552 2.32005 3.06335 2.95704 2.33976 3.55821 4.09648 2.87488 4.09930 2.85656 2.97877 3.08279 3.07714 2.39346 6.40553 4.01548 111 a - - T 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.38398 6.08833 1.15015 0.61958 0.77255 0.48576 0.95510 81 2.96920 5.43248 3.46409 2.76236 3.93019 1.02513 4.29951 4.07917 3.10833 3.39330 4.50784 3.40559 4.48149 3.45547 3.56956 2.50552 2.39680 3.76237 5.94228 3.01765 112 g - - E 2.68652 4.42259 2.77488 2.73144 3.46170 2.40466 3.72529 3.29388 2.67703 2.69373 4.24724 2.90335 2.73774 3.18162 2.89801 2.37895 2.77529 2.98552 4.58511 3.61537 0.29928 1.35852 6.43163 0.48724 0.95274 1.77816 0.18506 82 2.84273 4.18992 3.05053 2.12883 3.36284 2.75189 4.25559 3.03507 2.66396 2.65563 4.59024 2.63081 3.84786 2.76844 3.19058 2.84597 2.82776 2.89016 3.06821 3.41272 117 e - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00494 5.70928 6.43163 0.61958 0.77255 1.56406 0.23482 83 3.37920 5.61493 3.74277 3.20384 4.92800 1.01625 3.96683 4.35082 2.94708 2.91738 4.72998 3.71516 3.70329 3.52945 3.00683 1.61777 3.61882 4.00263 6.13360 4.80162 118 g - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00481 5.73459 6.45693 0.61958 0.77255 0.30535 1.33510 84 2.58463 5.93784 3.04102 2.09605 4.57465 2.51630 3.24109 4.26208 2.60545 3.44607 3.62705 3.20484 1.89678 2.68661 2.74662 2.97880 3.02092 3.23569 6.37074 4.50367 119 p - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00361 6.02233 6.74467 0.61958 0.77255 0.28862 1.38348 85 2.48488 5.72055 3.87501 1.97538 3.04853 3.48010 4.51877 3.51898 2.88839 2.73568 4.42660 3.64380 2.08811 3.48814 2.70856 2.40769 2.92982 4.05679 2.77386 3.43366 120 e - - B 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 86 3.03720 5.94099 3.75455 2.96917 5.26587 2.91682 3.66571 4.11840 2.98472 4.23738 4.98891 3.74380 4.66031 3.40955 3.12788 0.72443 2.46104 4.32115 6.38683 4.99111 121 s - - E 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.00227 6.08723 * 0.61958 0.77255 0.00000 * // hmmer-3.1b2/tutorial/globins4.out0000664361611702660230000600573012473612615016422 0ustar wheelerteddy# hmmsearch :: search profile(s) against a sequence database # HMMER 3.1 (February 2013); http://hmmer.org/ # Copyright (C) 2011 Howard Hughes Medical Institute. # Freely distributed under the GNU General Public License (GPLv3). # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # query HMM file: globins4.hmm # target sequence database: uniprot_sprot.fasta # per-seq hits tabular output: globins4.tbl # per-dom hits tabular output: globins4.domtbl # number of worker threads: 2 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Query: globins4 [M=149] Scores for complete sequences (score includes all domains): --- full sequence --- --- best 1 domain --- -#dom- E-value score bias E-value score bias exp N Sequence Description ------- ------ ----- ------- ------ ----- ---- -- -------- ----------- 6.5e-65 222.7 3.2 7.2e-65 222.6 3.2 1.0 1 sp|P02185|MYG_PHYMC Myoglobin OS=Physeter macrocephalus GN 3.3e-63 217.2 0.1 3.7e-63 217.0 0.1 1.0 1 sp|P02024|HBB_GORGO Hemoglobin subunit beta OS=Gorilla gor 4.9e-63 216.6 0.0 5.4e-63 216.5 0.0 1.0 1 sp|P68871|HBB_HUMAN Hemoglobin subunit beta OS=Homo sapien 4.9e-63 216.6 0.0 5.4e-63 216.5 0.0 1.0 1 sp|P68872|HBB_PANPA Hemoglobin subunit beta OS=Pan paniscu 4.9e-63 216.6 0.0 5.4e-63 216.5 0.0 1.0 1 sp|P68873|HBB_PANTR Hemoglobin subunit beta OS=Pan troglod 7e-63 216.1 3.0 7.7e-63 216.0 3.0 1.0 1 sp|P02177|MYG_ESCGI Myoglobin OS=Eschrichtius gibbosus GN= 7e-63 216.1 3.0 7.7e-63 216.0 3.0 1.0 1 sp|Q0KIY1|MYG_BALBO Myoglobin OS=Balaenoptera borealis GN= 7e-63 216.1 3.0 7.7e-63 216.0 3.0 1.0 1 sp|Q0KIY2|MYG_BALED Myoglobin OS=Balaenoptera edeni GN=MB 7.6e-63 216.0 0.1 8.4e-63 215.9 0.1 1.0 1 sp|P02025|HBB_HYLLA Hemoglobin subunit beta OS=Hylobates l 1.1e-62 215.6 0.2 1.2e-62 215.4 0.2 1.0 1 sp|P02033|HBB_PILBA Hemoglobin subunit beta OS=Piliocolobu 1.1e-62 215.5 3.7 1.2e-62 215.3 3.7 1.0 1 sp|P02178|MYG_MEGNO Myoglobin OS=Megaptera novaeangliae GN 2.3e-62 214.4 1.8 2.6e-62 214.3 1.8 1.0 1 sp|P02174|MYG_GLOME Myoglobin OS=Globicephala melas GN=MB 4.2e-62 213.6 1.8 4.6e-62 213.5 1.8 1.0 1 sp|P02173|MYG_ORCOR Myoglobin OS=Orcinus orca GN=MB PE=1 S 4.6e-62 213.5 4.2 5.1e-62 213.3 4.2 1.0 1 sp|P02179|MYG_BALAC Myoglobin OS=Balaenoptera acutorostrat 4.9e-62 213.4 1.3 5.5e-62 213.2 1.3 1.0 1 sp|P02181|MYG_INIGE Myoglobin OS=Inia geoffrensis GN=MB PE 5.3e-62 213.3 0.1 5.9e-62 213.1 0.1 1.0 1 sp|P02028|HBB_CHLAE Hemoglobin subunit beta OS=Chlorocebus 5.6e-62 213.2 4.2 6.3e-62 213.0 4.2 1.0 1 sp|P02184|MYG_KOGSI Myoglobin OS=Kogia sima GN=MB PE=1 SV= 5.6e-62 213.2 4.2 6.3e-62 213.0 4.2 1.0 1 sp|Q0KIY5|MYG_KOGBR Myoglobin OS=Kogia breviceps GN=MB PE= 7.1e-62 212.9 0.2 7.9e-62 212.7 0.2 1.0 1 sp|P02040|HBB_CEBAL Hemoglobin subunit beta OS=Cebus albif 1e-61 212.3 1.8 1.2e-61 212.2 1.8 1.0 1 sp|Q0KIY3|MYG_PENEL Myoglobin OS=Peponocephala electra GN= 1.1e-61 212.3 0.1 1.2e-61 212.1 0.1 1.0 1 sp|Q6WN25|HBB_LAGLA Hemoglobin subunit beta OS=Lagothrix l 1.1e-61 212.3 2.0 1.2e-61 212.1 2.0 1.0 1 sp|P68276|MYG_DELDE Myoglobin OS=Delphinus delphis GN=MB P 1.1e-61 212.3 2.0 1.2e-61 212.1 2.0 1.0 1 sp|P68279|MYG_TURTR Myoglobin OS=Tursiops truncatus GN=MB 1.1e-61 212.3 2.0 1.2e-61 212.1 2.0 1.0 1 sp|Q0KIY7|MYG1_STEAT Myoglobin-1 OS=Stenella attenuata GN=M 1.1e-61 212.2 0.1 1.3e-61 212.1 0.1 1.0 1 sp|P02032|HBB_SEMEN Hemoglobin subunit beta OS=Semnopithec 1.2e-61 212.2 1.4 1.3e-61 212.0 1.4 1.0 1 sp|P68277|MYG_PHODA Myoglobin OS=Phocoenoides dalli dalli 1.2e-61 212.2 1.4 1.3e-61 212.0 1.4 1.0 1 sp|P68278|MYG_PHOPH Myoglobin OS=Phocoenoides phocoena GN= 1.2e-61 212.1 0.2 1.4e-61 211.9 0.2 1.0 1 sp|P67821|HBB_CEBAP Hemoglobin subunit beta OS=Cebus apell 1.2e-61 212.1 2.5 1.4e-61 211.9 2.5 1.0 1 sp|Q0KIY6|MYG2_STEAT Myoglobin-2 OS=Stenella attenuata GN=M 1.4e-61 211.9 0.1 1.5e-61 211.8 0.1 1.0 1 sp|P08259|HBB_MANSP Hemoglobin subunit beta OS=Mandrillus 1.4e-61 211.9 0.1 1.6e-61 211.7 0.1 1.0 1 sp|P19885|HBB_COLPO Hemoglobin subunit beta OS=Colobus pol 1.5e-61 211.8 0.2 1.7e-61 211.7 0.2 1.0 1 sp|P67822|HBB_CEBCA Hemoglobin subunit beta OS=Cebus capuc 2e-61 211.4 0.9 2.3e-61 211.2 0.9 1.0 1 sp|P13557|HBB_TARSY Hemoglobin subunit beta OS=Tarsius syr 2.9e-61 210.9 1.8 3.2e-61 210.7 1.8 1.0 1 sp|P02169|MYG_LEPMU Myoglobin OS=Lepilemur mustelinus GN=M 4e-61 210.4 0.2 4.4e-61 210.3 0.2 1.0 1 sp|P02055|HBB_MELME Hemoglobin subunit beta OS=Meles meles 4e-61 210.4 0.7 4.5e-61 210.3 0.7 1.0 1 sp|P02051|HBB_TARBA Hemoglobin subunit beta OS=Tarsius ban 4.1e-61 210.4 0.1 4.6e-61 210.2 0.1 1.0 1 sp|P02030|HBB_PAPCY Hemoglobin subunit beta OS=Papio cynoc 4.2e-61 210.4 0.1 4.7e-61 210.2 0.1 1.0 1 sp|Q9TSP1|HBB_PAPAN Hemoglobin subunit beta OS=Papio anubi 4.6e-61 210.2 0.1 5.1e-61 210.1 0.1 1.0 1 sp|P68222|HBB_MACFU Hemoglobin subunit beta OS=Macaca fusc 4.6e-61 210.2 0.1 5.1e-61 210.1 0.1 1.0 1 sp|P68223|HBB_MACFA Hemoglobin subunit beta OS=Macaca fasc 4.6e-61 210.2 0.1 5.1e-61 210.1 0.1 1.0 1 sp|P68224|HBB_MACSP Hemoglobin subunit beta OS=Macaca spec 4.6e-61 210.2 0.1 5.1e-61 210.1 0.1 1.0 1 sp|P68225|HBB_MACNE Hemoglobin subunit beta OS=Macaca neme 4.7e-61 210.2 0.1 5.2e-61 210.1 0.1 1.0 1 sp|P02036|HBB_SAISC Hemoglobin subunit beta OS=Saimiri sci 6.3e-61 209.8 0.1 7e-61 209.6 0.1 1.0 1 sp|P68232|HBB_ATEGE Hemoglobin subunit beta OS=Ateles geof 6.3e-61 209.8 0.1 7e-61 209.6 0.1 1.0 1 sp|P68234|HBB_ATEBE Hemoglobin subunit beta OS=Ateles belz 6.7e-61 209.7 0.1 7.5e-61 209.5 0.1 1.0 1 sp|Q6WN29|HBB_ALOBE Hemoglobin subunit beta OS=Alouatta be 6.8e-61 209.7 0.1 7.6e-61 209.5 0.1 1.0 1 sp|P02026|HBB_MACMU Hemoglobin subunit beta OS=Macaca mula 6.9e-61 209.7 0.2 7.6e-61 209.5 0.2 1.0 1 sp|P21201|HBB_VULVU Hemoglobin subunit beta OS=Vulpes vulp 7.7e-61 209.5 0.1 8.5e-61 209.4 0.1 1.0 1 sp|P02035|HBB_AOTTR Hemoglobin subunit beta OS=Aotus trivi 8.3e-61 209.4 0.1 9.2e-61 209.3 0.1 1.0 1 sp|P02039|HBB_SAGFU Hemoglobin subunit beta OS=Saguinus fu 8.4e-61 209.4 0.6 9.3e-61 209.2 0.6 1.0 1 sp|P02166|MYG_PERPO Myoglobin OS=Perodicticus potto edwars 8.7e-61 209.3 0.1 9.7e-61 209.2 0.1 1.0 1 sp|P02038|HBB_SAGMY Hemoglobin subunit beta OS=Saguinus my 8.7e-61 209.3 0.1 9.7e-61 209.2 0.1 1.0 1 sp|P02029|HBB_THEGE Hemoglobin subunit beta OS=Theropithec 8.9e-61 209.3 0.2 9.8e-61 209.2 0.2 1.0 1 sp|P18985|HBB_CALAR Hemoglobin subunit beta OS=Callithrix 9e-61 209.3 0.2 1e-60 209.1 0.2 1.0 1 sp|Q6WN28|HBB_CALJA Hemoglobin subunit beta OS=Callithrix 9.9e-61 209.2 0.1 1.1e-60 209.0 0.1 1.0 1 sp|Q6WN27|HBB_PITPI Hemoglobin subunit beta OS=Pithecia pi 1.1e-60 209.0 0.1 1.2e-60 208.9 0.1 1.0 1 sp|P68054|HBB_SAGNI Hemoglobin subunit beta OS=Saguinus ni 1.1e-60 209.0 0.1 1.2e-60 208.9 0.1 1.0 1 sp|P68055|HBB_SAGOE Hemoglobin subunit beta OS=Saguinus oe 1.2e-60 208.9 4.4 1.3e-60 208.8 4.4 1.0 1 sp|P02180|MYG_BALPH Myoglobin OS=Balaenoptera physalus GN= 1.2e-60 208.9 0.1 1.4e-60 208.7 0.1 1.0 1 sp|P02031|HBB_CERAT Hemoglobin subunit beta OS=Cercocebus 1.3e-60 208.7 3.8 1.5e-60 208.6 3.8 1.0 1 sp|P02182|MYG_ZIPCA Myoglobin OS=Ziphius cavirostris GN=MB 1.5e-60 208.6 0.1 1.7e-60 208.4 0.1 1.0 1 sp|P02044|HBD_ATEGE Hemoglobin subunit delta OS=Ateles geo 2.4e-60 207.9 1.2 2.6e-60 207.8 1.2 1.0 1 sp|P68082|MYG_HORSE Myoglobin OS=Equus caballus GN=MB PE=1 2.4e-60 207.9 1.2 2.6e-60 207.8 1.2 1.0 1 sp|P68083|MYG_EQUBU Myoglobin OS=Equus burchelli GN=MB PE= 2.7e-60 207.7 0.2 3e-60 207.6 0.2 1.0 1 sp|P60524|HBB_CANFA Hemoglobin subunit beta OS=Canis famil 2.7e-60 207.7 0.2 3e-60 207.6 0.2 1.0 1 sp|P60525|HBB_CANLA Hemoglobin subunit beta OS=Canis latra 2.7e-60 207.7 0.2 3e-60 207.6 0.2 1.0 1 sp|P60526|HBB_CHRBR Hemoglobin subunit beta OS=Chrysocyon 2.9e-60 207.6 0.0 3.3e-60 207.5 0.0 1.0 1 sp|P61772|HBD_PANTR Hemoglobin subunit delta OS=Pan troglo 2.9e-60 207.6 0.0 3.3e-60 207.5 0.0 1.0 1 sp|P61773|HBD_GORGO Hemoglobin subunit delta OS=Gorilla go 2.9e-60 207.6 0.0 3.3e-60 207.5 0.0 1.0 1 sp|P61774|HBD_HYLLA Hemoglobin subunit delta OS=Hylobates 2.9e-60 207.6 0.0 3.3e-60 207.5 0.0 1.0 1 sp|P61775|HBD_PONPY Hemoglobin subunit delta OS=Pongo pygm 2.9e-60 207.6 4.4 3.2e-60 207.5 4.4 1.0 1 sp|Q0KIY9|MYG_INDPC Myoglobin OS=Indopacetus pacificus GN= 3e-60 207.6 0.1 3.3e-60 207.4 0.1 1.0 1 sp|Q6WN22|HBB_ATEPA Hemoglobin subunit beta OS=Ateles pani 3e-60 207.6 0.2 3.3e-60 207.5 0.2 1.0 1 sp|P68046|HBB_ODORO Hemoglobin subunit beta OS=Odobenus ro 3e-60 207.6 0.2 3.3e-60 207.5 0.2 1.0 1 sp|P68047|HBB_ARCGA Hemoglobin subunit beta OS=Arctocephal 3.3e-60 207.5 0.2 3.6e-60 207.3 0.2 1.0 1 sp|P09909|HBB_PHOVI Hemoglobin subunit beta OS=Phoca vitul 3.6e-60 207.3 3.7 4e-60 207.2 3.7 1.0 1 sp|P02183|MYG_MESCA Myoglobin OS=Mesoplodon carlhubbsi GN= 3.6e-60 207.3 3.7 4e-60 207.2 3.7 1.0 1 sp|Q0KIY0|MYG_MESST Myoglobin OS=Mesoplodon stejnegeri GN= 4.5e-60 207.0 0.3 5e-60 206.9 0.3 1.0 1 sp|P15449|HBB_MELCA Hemoglobin subunit beta OS=Mellivora c 5.6e-60 206.7 0.1 6.2e-60 206.6 0.1 1.0 1 sp|Q6WN21|HBB_CALGO Hemoglobin subunit beta OS=Callimico g 5.6e-60 206.7 0.3 6.2e-60 206.6 0.3 1.0 1 sp|P23602|HBB_MUSLU Hemoglobin subunit beta OS=Mustela lut 5.8e-60 206.7 0.9 6.4e-60 206.5 0.9 1.0 1 sp|P02165|MYG_TUPGL Myoglobin OS=Tupaia glis GN=MB PE=1 SV 5.9e-60 206.6 0.2 6.8e-60 206.4 0.2 1.0 1 sp|P02208|GLB5_PETMA Globin-5 OS=Petromyzon marinus PE=1 SV 7.4e-60 206.3 0.3 8.2e-60 206.2 0.3 1.0 1 sp|Q6WN20|HBB_CALTO Hemoglobin subunit beta OS=Callicebus 7.5e-60 206.3 0.1 8.3e-60 206.1 0.1 1.0 1 sp|P33499|HBD_ATEFU Hemoglobin subunit delta OS=Ateles fus 7.6e-60 206.3 0.1 8.4e-60 206.1 0.1 1.0 1 sp|Q6WN26|HBB_AOTAZ Hemoglobin subunit beta OS=Aotus azara 8.7e-60 206.1 0.1 9.6e-60 205.9 0.1 1.0 1 sp|P18989|HBB_PROLO Hemoglobin subunit beta OS=Procyon lot 1e-59 205.8 0.0 1.2e-59 205.7 0.0 1.0 1 sp|P02042|HBD_HUMAN Hemoglobin subunit delta OS=Homo sapie 1.1e-59 205.8 1.6 1.2e-59 205.7 1.6 1.0 1 sp|P68080|MYG_PHOVI Myoglobin OS=Phoca vitulina GN=MB PE=1 1.1e-59 205.8 1.6 1.2e-59 205.7 1.6 1.0 1 sp|P68081|MYG_HALGR Myoglobin OS=Halichoerus grypus GN=MB 1.1e-59 205.7 0.1 1.2e-59 205.6 0.1 1.0 1 sp|P19886|HBD_COLPO Hemoglobin subunit delta OS=Colobus po 1.4e-59 205.5 0.2 1.5e-59 205.3 0.2 1.0 1 sp|P68052|HBB_PTEBR Hemoglobin subunit beta OS=Pteronura b 1.4e-59 205.5 0.2 1.5e-59 205.3 0.2 1.0 1 sp|P68053|HBB_MARFO Hemoglobin subunit beta OS=Martes foin 1.5e-59 205.3 0.1 1.7e-59 205.2 0.1 1.0 1 sp|P10893|HBB_LUTLU Hemoglobin subunit beta OS=Lutra lutra 1.6e-59 205.2 0.1 1.8e-59 205.1 0.1 1.0 1 sp|P26916|HBB_NASNA Hemoglobin subunit beta OS=Nasua nasua 1.6e-59 205.2 3.2 1.8e-59 205.1 3.2 1.0 1 sp|P02170|MYG_RABIT Myoglobin OS=Oryctolagus cuniculus GN= 1.8e-59 205.1 0.9 2e-59 204.9 0.9 1.0 1 sp|P18984|HBB_BALAC Hemoglobin subunit beta OS=Balaenopter 2.4e-59 204.6 0.3 2.7e-59 204.5 0.3 1.0 1 sp|P02167|MYG_NYCCO Myoglobin OS=Nycticebus coucang GN=MB 2.5e-59 204.6 0.3 2.7e-59 204.5 0.3 1.0 1 sp|P02145|MYG_PANTR Myoglobin OS=Pan troglodytes GN=MB PE= 2.6e-59 204.5 0.2 3e-59 204.3 0.2 1.0 1 sp|Q9I9I3|GLB2_PETMA Globin-2 OS=Petromyzon marinus PE=2 SV 2.7e-59 204.5 0.2 3e-59 204.4 0.2 1.0 1 sp|P15166|HBB_LEPWE Hemoglobin subunit beta OS=Leptonychot 2.9e-59 204.4 1.2 3.3e-59 204.2 1.2 1.0 1 sp|P13558|HBD_TARSY Hemoglobin subunit delta OS=Tarsius sy 3e-59 204.3 0.7 3.4e-59 204.2 0.7 1.0 1 sp|P02189|MYG_PIG Myoglobin OS=Sus scrofa GN=MB PE=1 SV= 3.2e-59 204.2 1.6 3.6e-59 204.1 1.6 1.0 1 sp|Q9TS35|HBA1_HYLLA Hemoglobin subunit alpha-1 OS=Hylobate 3.3e-59 204.2 0.1 3.7e-59 204.1 0.1 1.0 1 sp|P68011|HBB_URSMA Hemoglobin subunit beta OS=Ursus marit 3.3e-59 204.2 0.1 3.7e-59 204.1 0.1 1.0 1 sp|P68012|HBB_URSTH Hemoglobin subunit beta OS=Ursus thibe 3.3e-59 204.2 0.1 3.7e-59 204.1 0.1 1.0 1 sp|P68013|HBB_URSML Hemoglobin subunit beta OS=Ursus malay 3.4e-59 204.2 0.2 3.8e-59 204.0 0.2 1.0 1 sp|P18983|HBB_AILME Hemoglobin subunit beta OS=Ailuropoda 3.4e-59 204.2 1.3 3.8e-59 204.0 1.3 1.0 1 sp|P69905|HBA_HUMAN Hemoglobin subunit alpha OS=Homo sapie 3.4e-59 204.2 1.3 3.8e-59 204.0 1.3 1.0 1 sp|P69906|HBA_PANPA Hemoglobin subunit alpha OS=Pan panisc 3.4e-59 204.2 1.3 3.8e-59 204.0 1.3 1.0 1 sp|P69907|HBA_PANTR Hemoglobin subunit alpha OS=Pan troglo 4.4e-59 203.8 0.3 4.8e-59 203.7 0.3 1.0 1 sp|P11343|MYG_LUTLU Myoglobin OS=Lutra lutra GN=MB PE=1 SV 4.6e-59 203.7 0.4 5.1e-59 203.6 0.4 1.0 1 sp|P02147|MYG_GORBE Myoglobin OS=Gorilla gorilla beringei 5.4e-59 203.5 0.3 6e-59 203.4 0.3 1.0 1 sp|P08535|HBB_LEPEU Hemoglobin subunit beta OS=Lepus europ 5.9e-59 203.4 0.9 6.5e-59 203.3 0.9 1.0 1 sp|P02161|MYG_ZALCA Myoglobin OS=Zalophus californianus GN 5.9e-59 203.4 1.3 6.6e-59 203.2 1.3 1.0 1 sp|P07421|HBA_CEBCA Hemoglobin subunit alpha OS=Cebus capu 6.9e-59 203.2 0.1 7.7e-59 203.0 0.1 1.0 1 sp|Q03902|HBD_OTOCR Hemoglobin subunit delta OS=Otolemur c 7.3e-59 203.1 0.4 8e-59 203.0 0.4 1.0 1 sp|P20856|MYG_CTEGU Myoglobin OS=Ctenodactylus gundi GN=MB 7.5e-59 203.0 0.2 8.3e-59 202.9 0.2 1.0 1 sp|P68044|HBB_MUSPF Hemoglobin subunit beta OS=Mustela put 7.5e-59 203.0 0.2 8.3e-59 202.9 0.2 1.0 1 sp|P68045|HBB_MUSPU Hemoglobin subunit beta OS=Mustela put 8.3e-59 202.9 1.0 9.2e-59 202.8 1.0 1.0 1 sp|P32428|MYG_ONDZI Myoglobin OS=Ondatra zibethicus GN=MB 8.7e-59 202.8 1.4 9.6e-59 202.7 1.4 1.0 1 sp|P14396|MYG_CASFI Myoglobin OS=Castor fiber GN=MB PE=1 S 9.1e-59 202.8 1.3 1e-58 202.6 1.3 1.0 1 sp|P18972|HBA_CALAR Hemoglobin subunit alpha OS=Callithrix 9.2e-59 202.8 0.2 1e-58 202.6 0.2 1.0 1 sp|Q5XLE5|HBD_AILME Hemoglobin subunit delta OS=Ailuropoda 9.2e-59 202.8 0.3 1e-58 202.6 0.3 1.0 1 sp|P02144|MYG_HUMAN Myoglobin OS=Homo sapiens GN=MB PE=1 S 1.1e-58 202.5 1.2 1.2e-58 202.4 1.2 1.0 1 sp|P01923|HBA_GORGO Hemoglobin subunit alpha OS=Gorilla go 1.2e-58 202.4 3.4 1.3e-58 202.3 3.4 1.0 1 sp|P02192|MYG_BOVIN Myoglobin OS=Bos taurus GN=MB PE=1 SV= 1.2e-58 202.4 3.4 1.3e-58 202.3 3.4 1.0 1 sp|P86873|MYG_BISBI Myoglobin OS=Bison bison GN=MB PE=1 SV 1.2e-58 202.4 3.4 1.3e-58 202.3 3.4 1.0 1 sp|Q2MJN4|MYG_BOSMU Myoglobin OS=Bos mutus grunniens GN=MB 1.2e-58 202.4 0.5 1.3e-58 202.2 0.5 1.0 1 sp|P02057|HBB_RABIT Hemoglobin subunit beta-1/2 OS=Oryctol 1.3e-58 202.2 0.1 1.5e-58 202.1 0.1 1.0 1 sp|P02049|HBB_NYCCO Hemoglobin subunit beta OS=Nycticebus 1.4e-58 202.2 0.3 1.5e-58 202.1 0.3 1.0 1 sp|P02163|MYG_ROUAE Myoglobin OS=Rousettus aegyptiacus GN= 1.4e-58 202.2 0.2 1.6e-58 202.0 0.2 1.0 1 sp|P02207|GLB_LAMFL Globin OS=Lampetra fluviatilis PE=1 SV 1.4e-58 202.2 0.1 1.5e-58 202.1 0.1 1.0 1 sp|P18986|HBB_CROCR Hemoglobin subunit beta OS=Crocuta cro 1.4e-58 202.1 0.4 1.6e-58 202.0 0.4 1.0 1 sp|P62734|MYG_HYLAG Myoglobin OS=Hylobates agilis GN=MB PE 1.4e-58 202.1 0.4 1.6e-58 202.0 0.4 1.0 1 sp|P62735|MYG_HYLSY Myoglobin OS=Hylobates syndactylus GN= 1.5e-58 202.1 0.1 1.6e-58 202.0 0.1 1.0 1 sp|P18982|HBB_AILFU Hemoglobin subunit beta OS=Ailurus ful 1.5e-58 202.0 2.7 1.7e-58 201.9 2.7 1.0 1 sp|P02190|MYG_SHEEP Myoglobin OS=Ovis aries GN=MB PE=1 SV= 1.9e-58 201.7 1.0 2.1e-58 201.6 1.0 1.0 1 sp|P67817|HBA_ATEGE Hemoglobin subunit alpha OS=Ateles geo 2e-58 201.7 1.1 2.2e-58 201.5 1.1 1.0 1 sp|P02168|MYG_OTOCR Myoglobin OS=Otolemur crassicaudatus G 2e-58 201.6 0.1 2.3e-58 201.4 0.1 1.0 1 sp|P09968|GLB3_PETMA Globin-3 OS=Petromyzon marinus PE=1 SV 2.1e-58 201.6 0.5 2.3e-58 201.5 0.5 1.0 1 sp|P02150|MYG_MACFA Myoglobin OS=Macaca fascicularis GN=MB 2.1e-58 201.6 1.4 2.3e-58 201.4 1.4 1.0 1 sp|P06635|HBA_PONPY Hemoglobin subunit alpha OS=Pongo pygm 2.3e-58 201.5 0.9 2.5e-58 201.4 0.9 1.0 1 sp|P01928|HBA_CEBAP Hemoglobin subunit alpha OS=Cebus apel 2.4e-58 201.4 0.0 2.6e-58 201.3 0.0 1.0 1 sp|P02050|HBB_OTOCR Hemoglobin subunit beta-1/2 OS=Otolemu 2.6e-58 201.3 0.1 2.9e-58 201.2 0.1 1.0 1 sp|P02047|HBD_SAISC Hemoglobin subunit delta OS=Saimiri sc 2.6e-58 201.3 0.1 2.9e-58 201.1 0.1 1.0 1 sp|P23020|HBB_PROCR Hemoglobin subunit beta OS=Proteles cr 2.8e-58 201.2 0.1 3.1e-58 201.1 0.1 1.0 1 sp|P68015|HBD_SAGNI Hemoglobin subunit delta OS=Saguinus n 2.8e-58 201.2 1.0 3.1e-58 201.1 1.0 1.0 1 sp|P67818|HBA_SAGOE Hemoglobin subunit alpha OS=Saguinus o 3.2e-58 201.0 0.4 3.5e-58 200.9 0.4 1.0 1 sp|P02164|MYG_ORYAF Myoglobin OS=Orycteropus afer GN=MB PE 3.4e-58 200.9 0.6 3.8e-58 200.8 0.6 1.0 1 sp|P68084|MYG_PAPAN Myoglobin OS=Papio anubis GN=MB PE=1 S 3.4e-58 200.9 0.6 3.8e-58 200.8 0.6 1.0 1 sp|P68085|MYG_SEMEN Myoglobin OS=Semnopithecus entellus GN 3.4e-58 200.9 0.6 3.8e-58 200.8 0.6 1.0 1 sp|P68086|MYG_ERYPA Myoglobin OS=Erythrocebus patas GN=MB 3.7e-58 200.8 2.7 4.1e-58 200.7 2.7 1.0 1 sp|P02191|MYG_CEREL Myoglobin OS=Cervus elaphus GN=MB PE=1 4.5e-58 200.5 0.3 5e-58 200.4 0.3 1.0 1 sp|P02171|MYG_OCHPR Myoglobin OS=Ochotona princeps GN=MB P 4.7e-58 200.5 2.2 5.1e-58 200.3 2.2 1.0 1 sp|B7U9B5|MYG_CAPHI Myoglobin OS=Capra hircus GN=MB PE=1 S 4.8e-58 200.5 0.4 5.3e-58 200.3 0.4 1.0 1 sp|Q6PL31|MYG_OCHCU Myoglobin OS=Ochotona curzoniae GN=MB 4.9e-58 200.4 0.1 5.4e-58 200.3 0.1 1.0 1 sp|P68014|HBD_SAGMY Hemoglobin subunit delta OS=Saguinus m 5.1e-58 200.4 0.2 5.6e-58 200.2 0.2 1.0 1 sp|P18990|HBB_TURTR Hemoglobin subunit beta OS=Tursiops tr 5.5e-58 200.2 0.1 6.1e-58 200.1 0.1 1.0 1 sp|P02048|HBB_LORTA Hemoglobin subunit beta OS=Loris tardi 6.9e-58 199.9 0.0 7.6e-58 199.8 0.0 1.0 1 sp|P24660|HBB_MACGG Hemoglobin subunit beta OS=Macroderma 7.8e-58 199.7 0.1 8.7e-58 199.6 0.1 1.0 1 sp|D0VX08|HBB_PTEGI Hemoglobin subunit beta OS=Pteropus gi 7.8e-58 199.7 0.1 8.7e-58 199.6 0.1 1.0 1 sp|P14391|HBB_PTEAL Hemoglobin subunit beta OS=Pteropus al 9.5e-58 199.5 0.3 1.1e-57 199.3 0.3 1.0 1 sp|P04250|MYG_LAGMA Myoglobin OS=Lagostomus maximus GN=MB 9.6e-58 199.5 0.5 1.1e-57 199.3 0.5 1.0 1 sp|P02148|MYG_PONPY Myoglobin OS=Pongo pygmaeus GN=MB PE=1 1e-57 199.3 0.1 1.2e-57 199.2 0.1 1.0 1 sp|P28781|HBB_TAPGE Hemoglobin subunit beta OS=Taphozous g 1.2e-57 199.2 0.1 1.3e-57 199.1 0.1 1.0 1 sp|B3EWE2|HBB_BLABR Hemoglobin subunit beta OS=Blarina bre 1.2e-57 199.2 0.3 1.3e-57 199.0 0.3 1.0 1 sp|P02058|HBB_ROUAE Hemoglobin subunit beta OS=Rousettus a 1.2e-57 199.1 0.3 1.3e-57 199.0 0.3 1.0 1 sp|P04248|MYG_SPAEH Myoglobin OS=Spalax ehrenbergi GN=MB P 1.4e-57 198.9 3.0 1.6e-57 198.8 3.0 1.0 1 sp|P84997|MYG_BUBBU Myoglobin OS=Bubalus bubalis GN=MB PE= 1.5e-57 198.9 0.7 1.6e-57 198.7 0.7 1.0 1 sp|P01924|HBA_SEMEN Hemoglobin subunit alpha OS=Semnopithe 1.5e-57 198.8 1.5 1.7e-57 198.7 1.5 1.0 1 sp|Q9TS34|HBA2_HYLLA Hemoglobin subunit alpha-2 OS=Hylobate 1.7e-57 198.7 0.1 1.8e-57 198.5 0.1 1.0 1 sp|P14392|HBB_PTEPO Hemoglobin subunit beta OS=Pteropus po 1.9e-57 198.5 0.3 2.1e-57 198.4 0.3 1.0 1 sp|B3EWD0|HBB_SPEBE Hemoglobin subunit beta OS=Spermophilu 2.1e-57 198.4 0.9 2.3e-57 198.2 0.9 1.0 1 sp|P02157|MYG_MELME Myoglobin OS=Meles meles GN=MB PE=1 SV 2.1e-57 198.4 0.0 2.3e-57 198.2 0.0 1.0 1 sp|P02046|HBD_AOTTR Hemoglobin subunit delta OS=Aotus triv 2.2e-57 198.3 0.2 2.5e-57 198.1 0.2 1.0 1 sp|P19646|HBB_PAGLA Hemoglobin subunit beta OS=Paguma larv 2.3e-57 198.2 1.1 2.6e-57 198.1 1.1 1.0 1 sp|P09421|HBB_SPECI Hemoglobin subunit beta OS=Spermophilu 2.4e-57 198.2 0.2 2.7e-57 198.0 0.2 1.0 1 sp|P09905|HBB_PHYMC Hemoglobin subunit beta-1/2 OS=Physete 2.8e-57 197.9 0.3 3.1e-57 197.8 0.3 1.0 1 sp|P11754|HBB_CYNSP Hemoglobin subunit beta OS=Cynopterus 3e-57 197.9 0.6 3.3e-57 197.7 0.6 1.0 1 sp|P02073|HBB_ALCAA Hemoglobin subunit beta OS=Alces alces 3.1e-57 197.8 0.7 3.4e-57 197.7 0.7 1.0 1 sp|Q7M3B6|HBA_SAGMY Hemoglobin subunit alpha OS=Saguinus m 3.1e-57 197.8 0.5 3.5e-57 197.7 0.5 1.0 1 sp|P02193|MYG_DIDVI Myoglobin OS=Didelphis virginiana GN=M 3.3e-57 197.7 1.8 3.6e-57 197.6 1.8 1.0 1 sp|P02160|MYG_VULCH Myoglobin OS=Vulpes chama GN=MB PE=1 S 3.4e-57 197.7 1.8 3.7e-57 197.6 1.8 1.0 1 sp|P02151|MYG_AOTTR Myoglobin OS=Aotus trivirgatus GN=MB P 4.2e-57 197.4 0.4 4.6e-57 197.3 0.4 1.0 1 sp|P02084|HBB_ELEMA Hemoglobin subunit beta OS=Elephas max 4.3e-57 197.4 0.4 4.7e-57 197.2 0.4 1.0 1 sp|Q45XI9|HBD_ELEMA Hemoglobin subunit delta OS=Elephas ma 4.4e-57 197.3 0.5 4.9e-57 197.2 0.5 1.0 1 sp|P02090|HBB_SPAEH Hemoglobin subunit beta OS=Spalax ehre 5.1e-57 197.1 0.7 5.7e-57 197.0 0.7 1.0 1 sp|P02156|MYG_ERIEU Myoglobin OS=Erinaceus europaeus GN=MB 5.4e-57 197.0 0.1 6e-57 196.9 0.1 1.0 1 sp|P02059|HBB_ERIEU Hemoglobin subunit beta OS=Erinaceus e 5.6e-57 197.0 1.7 6.1e-57 196.8 1.7 1.0 1 sp|P63113|MYG_CANFA Myoglobin OS=Canis familiaris GN=MB PE 5.6e-57 197.0 1.7 6.1e-57 196.8 1.7 1.0 1 sp|P63114|MYG_OTOME Myoglobin OS=Otocyon megalotis GN=MB P 5.6e-57 197.0 0.8 6.2e-57 196.8 0.8 1.0 1 sp|P01929|HBA_SAGFU Hemoglobin subunit alpha OS=Saguinus f 5.8e-57 196.9 0.1 6.4e-57 196.8 0.1 1.0 1 sp|P02067|HBB_PIG Hemoglobin subunit beta OS=Sus scrofa 6.3e-57 196.8 1.6 6.9e-57 196.7 1.6 1.0 1 sp|P01937|HBA_NYCCO Hemoglobin subunit alpha OS=Nycticebus 6.3e-57 196.8 1.6 7e-57 196.7 1.6 1.0 1 sp|P02152|MYG_CALJA Myoglobin OS=Callithrix jacchus GN=MB 6.6e-57 196.7 0.1 7.2e-57 196.6 0.1 1.0 1 sp|P21667|HBB_VARVI Hemoglobin subunit beta OS=Varecia var 6.7e-57 196.7 0.8 7.4e-57 196.6 0.8 1.0 1 sp|B3EWC8|HBB_TAMMR Hemoglobin subunit beta OS=Tamias merr 7.3e-57 196.6 0.1 8e-57 196.5 0.1 1.0 1 sp|P07412|HBB_FELCA Hemoglobin subunit beta-A/B OS=Felis c 7.6e-57 196.5 0.7 8.4e-57 196.4 0.7 1.0 1 sp|P08853|HBB_MARMA Hemoglobin subunit beta OS=Marmota mar 8.7e-57 196.4 1.1 9.6e-57 196.2 1.1 1.0 1 sp|P02196|MYG_ORNAN Myoglobin OS=Ornithorhynchus anatinus 9.5e-57 196.2 3.0 1e-56 196.1 3.0 1.0 1 sp|P02195|MYG_TACAC Myoglobin OS=Tachyglossus aculeatus ac 1e-56 196.1 1.7 1.1e-56 196.0 1.7 1.0 1 sp|P02159|MYG_LYCPI Myoglobin OS=Lycaon pictus GN=MB PE=1 1e-56 196.1 0.5 1.1e-56 196.0 0.5 1.0 1 sp|P67819|HBB_BOSGF Hemoglobin subunit beta OS=Bos gaurus 1e-56 196.1 0.5 1.1e-56 196.0 0.5 1.0 1 sp|P67820|HBB_BUBBU Hemoglobin subunit beta OS=Bubalus bub 1.1e-56 196.1 0.3 1.2e-56 195.9 0.3 1.0 1 sp|P04249|MYG_PROGU Myoglobin OS=Proechimys guairae GN=MB 1.2e-56 195.8 0.6 1.4e-56 195.7 0.6 1.0 1 sp|P63107|HBA_MACFU Hemoglobin subunit alpha OS=Macaca fus 1.2e-56 195.8 0.6 1.4e-56 195.7 0.6 1.0 1 sp|P63108|HBA_MACMU Hemoglobin subunit alpha OS=Macaca mul 1.3e-56 195.8 0.3 1.4e-56 195.7 0.3 1.0 1 sp|P04245|HBB_TRAST Hemoglobin subunit beta OS=Tragelaphus 1.3e-56 195.8 0.4 1.5e-56 195.6 0.4 1.0 1 sp|P02085|HBB_LOXAF Hemoglobin subunit beta OS=Loxodonta a 1.4e-56 195.7 0.4 1.5e-56 195.6 0.4 1.0 1 sp|Q45XJ0|HBD_LOXAF Hemoglobin subunit delta OS=Loxodonta 1.5e-56 195.6 0.1 1.7e-56 195.4 0.1 1.0 1 sp|P41328|HBB_LYNLY Hemoglobin subunit beta OS=Lynx lynx G 1.6e-56 195.5 0.7 1.8e-56 195.3 0.7 1.0 1 sp|P07410|HBB_SPETO Hemoglobin subunit beta-S/F OS=Spermop 1.7e-56 195.4 0.1 1.9e-56 195.3 0.1 1.0 1 sp|P20855|HBB_CTEGU Hemoglobin subunit beta OS=Ctenodactyl 1.8e-56 195.3 0.2 2e-56 195.2 0.2 1.0 1 sp|P02088|HBB1_MOUSE Hemoglobin subunit beta-1 OS=Mus muscu 1.8e-56 195.3 0.6 2e-56 195.2 0.6 1.0 1 sp|P21767|HBA_MACFA Hemoglobin subunit alpha-A/Q/R/T OS=Ma 1.9e-56 195.3 1.4 2.1e-56 195.1 1.4 1.0 1 sp|P02153|MYG_CEBAP Myoglobin OS=Cebus apella GN=MB PE=1 S 2e-56 195.2 1.1 2.2e-56 195.1 1.1 1.0 1 sp|P02155|MYG_SAISC Myoglobin OS=Saimiri sciureus GN=MB PE 2.2e-56 195.1 0.8 2.4e-56 194.9 0.8 1.0 1 sp|P02066|HBB_CERSI Hemoglobin subunit beta OS=Ceratotheri 2.6e-56 194.8 0.0 2.8e-56 194.7 0.0 1.0 1 sp|P11752|HBB_MEGLY Hemoglobin subunit beta OS=Megaderma l 2.6e-56 194.8 0.7 2.9e-56 194.7 0.7 1.0 1 sp|P21766|HBA_MACAS Hemoglobin subunit alpha-1/2/3 OS=Maca 2.6e-56 194.8 0.1 2.9e-56 194.7 0.1 1.0 1 sp|P02060|HBB_SUNMU Hemoglobin subunit beta OS=Suncus muri 2.7e-56 194.8 0.1 2.9e-56 194.6 0.1 1.0 1 sp|P04244|HBB_PANPO Hemoglobin subunit beta OS=Panthera pa 2.7e-56 194.8 0.4 3e-56 194.6 0.4 1.0 1 sp|P04346|HBBA_BOSJA Hemoglobin subunit beta-A OS=Bos javan 2.9e-56 194.6 0.1 3.3e-56 194.5 0.1 1.0 1 sp|P02089|HBB2_MOUSE Hemoglobin subunit beta-2 OS=Mus muscu 2.9e-56 194.6 0.3 3.3e-56 194.5 0.3 1.0 1 sp|Q45XH3|HBE_BRATR Hemoglobin subunit epsilon OS=Bradypus 3e-56 194.6 0.8 3.3e-56 194.5 0.8 1.0 1 sp|P01926|HBA_CHLAE Hemoglobin subunit alpha OS=Chlorocebu 3.3e-56 194.5 0.1 3.6e-56 194.3 0.1 1.0 1 sp|Q7M2Y5|HBB2_CHAMP Hemoglobin subunit beta-2 OS=Chalinolo 3.6e-56 194.3 0.5 4e-56 194.2 0.5 1.0 1 sp|P19002|HBA_MACNE Hemoglobin subunit alpha-1/2/3 OS=Maca 3.9e-56 194.3 0.1 4.2e-56 194.1 0.1 1.0 1 sp|P18988|HBB2_PANLE Hemoglobin subunit beta-2 OS=Panthera 4.2e-56 194.1 0.2 4.7e-56 194.0 0.2 1.0 1 sp|P11517|HBB2_RAT Hemoglobin subunit beta-2 OS=Rattus no 4.2e-56 194.1 0.1 4.6e-56 194.0 0.1 1.0 1 sp|P07415|HBB_TRIIN Hemoglobin subunit beta OS=Trichechus 4.3e-56 194.1 1.6 4.7e-56 194.0 1.6 1.0 1 sp|P30562|MYG_PHOSI Myoglobin OS=Phoca sibirica GN=MB PE=1 4.3e-56 194.1 0.1 4.8e-56 194.0 0.1 1.0 1 sp|Q45XI8|HBD_TRIMA Hemoglobin subunit delta OS=Trichechus 4.5e-56 194.0 0.5 4.9e-56 193.9 0.5 1.0 1 sp|P21768|HBA_MACSI Hemoglobin subunit alpha-1/2 OS=Macaca 5e-56 193.9 0.1 5.5e-56 193.7 0.1 1.0 1 sp|P09840|HBB_MACCA Hemoglobin subunit beta OS=Macrotus ca 5.2e-56 193.8 0.6 5.7e-56 193.7 0.6 1.0 1 sp|Q862A7|HBA_PIPAB Hemoglobin subunit alpha OS=Pipistrell 5.6e-56 193.7 0.0 6.2e-56 193.6 0.0 1.0 1 sp|B2KHZ4|HBB_RHIFE Hemoglobin subunit beta OS=Rhinolophus 5.7e-56 193.7 0.7 6.3e-56 193.6 0.7 1.0 1 sp|P01930|HBA_PILBA Hemoglobin subunit alpha OS=Piliocolob 5.7e-56 193.7 0.5 6.4e-56 193.5 0.5 1.0 1 sp|P81042|HBE_MACEU Hemoglobin subunit epsilon OS=Macropus 5.8e-56 193.7 0.1 6.5e-56 193.5 0.1 1.0 1 sp|P68230|HBB_CAMBA Hemoglobin subunit beta OS=Camelus bac 5.8e-56 193.7 0.1 6.5e-56 193.5 0.1 1.0 1 sp|P68231|HBB_CAMDR Hemoglobin subunit beta OS=Camelus dro 5.8e-56 193.7 1.1 6.5e-56 193.5 1.1 1.0 1 sp|P02154|MYG_LAGLA Myoglobin OS=Lagothrix lagotricha GN=M 5.9e-56 193.7 1.2 6.5e-56 193.5 1.2 1.0 1 sp|P01938|HBA_LORTA Hemoglobin subunit alpha OS=Loris tard 6e-56 193.6 0.1 6.7e-56 193.5 0.1 1.0 1 sp|P68064|HBB2_PANON Hemoglobin subunit beta-2 OS=Panthera 6.4e-56 193.5 0.1 7.2e-56 193.4 0.1 1.0 1 sp|P68087|HBB1_CHAMP Hemoglobin subunit beta-1 OS=Chalinolo 6.6e-56 193.5 0.2 7.3e-56 193.4 0.2 1.0 1 sp|P09907|HBB_RHIUN Hemoglobin subunit beta OS=Rhinoceros 6.7e-56 193.5 0.3 7.4e-56 193.3 0.3 1.0 1 sp|Q28338|HBE_CHEME Hemoglobin subunit epsilon OS=Cheiroga 7.6e-56 193.3 0.3 8.4e-56 193.2 0.3 1.0 1 sp|P02070|HBB_BOVIN Hemoglobin subunit beta OS=Bos taurus 7.7e-56 193.3 0.1 8.6e-56 193.1 0.1 1.0 1 sp|P11756|HBB_TADBR Hemoglobin subunit beta OS=Tadarida br 7.9e-56 193.2 0.9 8.8e-56 193.1 0.9 1.0 1 sp|P01935|HBA3_PANTR Hemoglobin subunit alpha-3 OS=Pan trog 9.3e-56 193.0 0.1 1e-55 192.9 0.1 1.0 1 sp|P02091|HBB1_RAT Hemoglobin subunit beta-1 OS=Rattus no 9.6e-56 193.0 0.3 1.1e-55 192.8 0.3 1.0 1 sp|P02086|HBB_PROHA Hemoglobin subunit beta OS=Procavia ca 9.7e-56 193.0 1.9 1.1e-55 192.8 1.9 1.0 1 sp|P02194|MYG_MACRU Myoglobin OS=Macropus rufus GN=MB PE=1 1e-55 192.9 0.2 1.1e-55 192.7 0.2 1.0 1 sp|Q28356|HBE_DAUMA Hemoglobin subunit epsilon OS=Daubento 1e-55 192.9 0.2 1.2e-55 192.7 0.2 1.0 1 sp|Q95238|HBE_PROVE Hemoglobin subunit epsilon OS=Propithe 1.2e-55 192.6 0.1 1.4e-55 192.5 0.1 1.0 1 sp|P68050|HBB1_PANLE Hemoglobin subunit beta-1 OS=Panthera 1.3e-55 192.6 0.9 1.4e-55 192.4 0.9 1.0 1 sp|P01934|HBA3_GORGO Hemoglobin subunit alpha-3 OS=Gorilla 1.3e-55 192.6 0.1 1.4e-55 192.4 0.1 1.0 1 sp|P68048|HBB1_PANTS Hemoglobin subunit beta-1 OS=Panthera 1.3e-55 192.6 0.1 1.4e-55 192.4 0.1 1.0 1 sp|P68049|HBB1_PANON Hemoglobin subunit beta-1 OS=Panthera 1.3e-55 192.6 0.1 1.4e-55 192.4 0.1 1.0 1 sp|P68051|HBB1_PANPS Hemoglobin subunit beta-1 OS=Panthera 1.3e-55 192.5 0.1 1.5e-55 192.4 0.1 1.0 1 sp|P68065|HBB2_PANPS Hemoglobin subunit beta-2 OS=Panthera 1.3e-55 192.5 0.1 1.5e-55 192.4 0.1 1.0 1 sp|P68194|HBB2_PANTS Hemoglobin subunit beta-2 OS=Panthera 1.4e-55 192.4 0.8 1.6e-55 192.3 0.8 1.0 1 sp|P09422|HBB_BISBO Hemoglobin subunit beta OS=Bison bonas 1.5e-55 192.4 0.0 1.6e-55 192.2 0.0 1.0 1 sp|P68226|HBB_LAMGL Hemoglobin subunit beta OS=Lama glama 1.5e-55 192.4 0.0 1.6e-55 192.2 0.0 1.0 1 sp|P68227|HBB_LAMVI Hemoglobin subunit beta OS=Lama vicugn 1.5e-55 192.4 0.0 1.6e-55 192.2 0.0 1.0 1 sp|P68228|HBB_LAMPA Hemoglobin subunit beta OS=Lama guanic 1.5e-55 192.4 0.0 1.6e-55 192.2 0.0 1.0 1 sp|P68229|HBB_LAMGU Hemoglobin subunit beta OS=Lama guanic 1.5e-55 192.4 0.2 1.7e-55 192.2 0.2 1.0 1 sp|Q28931|HBE_SMICR Hemoglobin subunit epsilon OS=Sminthop 1.8e-55 192.1 0.9 2e-55 191.9 0.9 1.0 1 sp|P07402|HBA_MACSP Hemoglobin subunit alpha-1/2 OS=Macaca 1.9e-55 192.0 0.5 2.1e-55 191.9 0.5 1.0 1 sp|P01940|HBA_TARBA Hemoglobin subunit alpha OS=Tarsius ba 2.2e-55 191.8 1.6 2.4e-55 191.7 1.6 1.0 1 sp|G1NJB6|MYG_MELGA Myoglobin OS=Meleagris gallopavo GN=MB 2.2e-55 191.8 1.6 2.4e-55 191.7 1.6 1.0 1 sp|P02197|MYG_CHICK Myoglobin OS=Gallus gallus GN=MB PE=1 2.5e-55 191.6 0.4 2.7e-55 191.5 0.4 1.0 1 sp|P21380|HBB_RANTA Hemoglobin subunit beta OS=Rangifer ta 2.6e-55 191.6 0.3 2.9e-55 191.4 0.3 1.0 1 sp|P02053|HBB_EULFU Hemoglobin subunit beta OS=Eulemur ful 2.6e-55 191.6 0.6 2.9e-55 191.4 0.6 1.0 1 sp|P02075|HBB_SHEEP Hemoglobin subunit beta OS=Ovis aries 3.4e-55 191.2 0.2 3.7e-55 191.1 0.2 1.0 1 sp|Q28496|HBE_MICMU Hemoglobin subunit epsilon OS=Microceb 3.4e-55 191.2 0.0 3.8e-55 191.0 0.0 1.0 1 sp|Q7M3C2|HBB_HAPGR Hemoglobin subunit beta OS=Hapalemur g 3.7e-55 191.1 1.0 4.1e-55 190.9 1.0 1.0 1 sp|P01939|HBA2_OTOCR Hemoglobin subunit alpha-B OS=Otolemur 3.9e-55 191.0 0.3 4.3e-55 190.9 0.3 1.0 1 sp|P02093|HBB_ONDZI Hemoglobin subunit beta OS=Ondatra zib 4e-55 191.0 0.0 4.4e-55 190.8 0.0 1.0 1 sp|P14388|HBB_ANTPA Hemoglobin subunit beta OS=Antrozous p 4e-55 191.0 0.1 4.4e-55 190.8 0.1 1.0 1 sp|P67823|HBB_EQUHE Hemoglobin subunit beta OS=Equus hemio 4e-55 191.0 0.1 4.4e-55 190.8 0.1 1.0 1 sp|P67824|HBB_EQUZE Hemoglobin subunit beta OS=Equus zebra 4.1e-55 190.9 0.9 4.6e-55 190.8 0.9 1.0 1 sp|P19015|HBA_HIPAM Hemoglobin subunit alpha OS=Hippopotam 4.5e-55 190.8 0.1 5e-55 190.7 0.1 1.0 1 sp|P14387|HBA_ANTPA Hemoglobin subunit alpha OS=Antrozous 4.8e-55 190.7 0.2 5.4e-55 190.5 0.2 1.0 1 sp|P08223|HBE_EULFU Hemoglobin subunit epsilon OS=Eulemur 5.5e-55 190.5 0.9 6e-55 190.4 0.9 1.0 1 sp|P02077|HBBA_CAPHI Hemoglobin subunit beta-A OS=Capra hir 5.6e-55 190.5 0.8 6.2e-55 190.4 0.8 1.0 1 sp|P02187|MYG_LOXAF Myoglobin OS=Loxodonta africana GN=MB 5.6e-55 190.5 0.8 6.2e-55 190.3 0.8 1.0 1 sp|P01936|HBA_EULFU Hemoglobin subunit alpha OS=Eulemur fu 5.9e-55 190.4 0.0 6.5e-55 190.3 0.0 1.0 1 sp|P02061|HBB_TALEU Hemoglobin subunit beta OS=Talpa europ 6.3e-55 190.3 0.5 6.9e-55 190.2 0.5 1.0 1 sp|P02072|HBB_BOSMU Hemoglobin subunit beta OS=Bos mutus g 7.4e-55 190.1 0.2 8.2e-55 190.0 0.2 1.0 1 sp|B3EWE0|HBB_TAMST Hemoglobin subunit beta OS=Tamias stri 7.9e-55 190.0 1.5 8.7e-55 189.9 1.5 1.0 1 sp|Q7LZM2|MYG_ANAPO Myoglobin OS=Anas poecilorhyncha GN=MB 8.1e-55 190.0 0.6 9e-55 189.8 0.6 1.0 1 sp|Q7LZM3|MYG_PHAFI Myoglobin OS=Phalacrocorax filamentosu 8.4e-55 189.9 0.1 9.3e-55 189.8 0.1 1.0 1 sp|P02102|HBE1_CAPHI Hemoglobin subunit epsilon-1 OS=Capra 9.9e-55 189.7 0.1 1.1e-54 189.5 0.1 1.0 1 sp|P19016|HBB_HIPAM Hemoglobin subunit beta OS=Hippopotamu 1e-54 189.6 0.6 1.1e-54 189.5 0.6 1.0 1 sp|P0CH26|HBA2_CAPHI Hemoglobin subunit alpha-2 OS=Capra hi 1e-54 189.6 0.3 1.1e-54 189.5 0.3 1.0 1 sp|P28780|HBA_TAPGE Hemoglobin subunit alpha OS=Taphozous 1.1e-54 189.5 0.1 1.2e-54 189.4 0.1 1.0 1 sp|P02054|HBB_LEMCA Hemoglobin subunit beta OS=Lemur catta 1.1e-54 189.5 0.0 1.2e-54 189.4 0.0 1.0 1 sp|P11025|HBE_DIDVI Hemoglobin subunit epsilon-M OS=Didelp 1.1e-54 189.5 0.9 1.3e-54 189.4 0.9 1.0 1 sp|P14259|HBA1_OTOCR Hemoglobin subunit alpha-A OS=Otolemur 1.2e-54 189.4 0.3 1.3e-54 189.3 0.3 1.0 1 sp|P19759|HBE_OTOCR Hemoglobin subunit epsilon OS=Otolemur 1.2e-54 189.4 0.5 1.3e-54 189.3 0.5 1.0 1 sp|P02064|HBB1_TAPTE Hemoglobin subunit beta-1 OS=Tapirus t 1.2e-54 189.4 0.0 1.3e-54 189.3 0.0 1.0 1 sp|P02101|HBE_PIG Hemoglobin subunit epsilon OS=Sus scro 1.2e-54 189.4 0.1 1.3e-54 189.3 0.1 1.0 1 sp|P11757|HBA_MYOVE Hemoglobin subunit alpha OS=Myotis vel 1.3e-54 189.3 0.1 1.4e-54 189.2 0.1 1.0 1 sp|B3EWD2|HBB_SCICA Hemoglobin subunit beta OS=Sciurus car 1.3e-54 189.3 0.9 1.4e-54 189.2 0.9 1.0 1 sp|P20018|HBA1_VARVI Hemoglobin subunit alpha-1 OS=Varecia 1.3e-54 189.3 0.1 1.4e-54 189.2 0.1 1.0 1 sp|P02062|HBB_HORSE Hemoglobin subunit beta OS=Equus cabal 1.4e-54 189.2 1.3 1.6e-54 189.0 1.3 1.0 1 sp|P63111|HBA_PAPAN Hemoglobin subunit alpha OS=Papio anub 1.4e-54 189.2 1.3 1.6e-54 189.0 1.3 1.0 1 sp|P63112|HBA_PAPCY Hemoglobin subunit alpha OS=Papio cyno 1.4e-54 189.2 0.4 1.6e-54 189.0 0.4 1.0 1 sp|B3EWD4|HBB_PERCR Hemoglobin subunit beta OS=Peromyscus 1.6e-54 189.0 0.8 1.8e-54 188.9 0.8 1.0 1 sp|P08258|HBA_MANSP Hemoglobin subunit alpha-1/2 OS=Mandri 1.6e-54 189.0 1.4 1.8e-54 188.8 1.4 1.0 1 sp|P02092|HBB_MICXA Hemoglobin subunit beta OS=Microtus xa 1.7e-54 189.0 0.6 1.8e-54 188.8 0.6 1.0 1 sp|P02186|MYG_ELEMA Myoglobin OS=Elephas maximus GN=MB PE= 1.7e-54 188.9 0.8 1.9e-54 188.8 0.8 1.0 1 sp|Q9XSK1|HBA4_BUBBU Hemoglobin subunit alpha-4 OS=Bubalus 1.8e-54 188.8 1.3 2e-54 188.7 1.3 1.0 1 sp|P01932|HBA_THEGE Hemoglobin subunit alpha OS=Theropithe 2e-54 188.7 0.3 2.3e-54 188.5 0.3 1.0 1 sp|P02110|HBB_TACAC Hemoglobin subunit beta OS=Tachyglossu 2.1e-54 188.6 1.2 2.4e-54 188.5 1.2 1.0 1 sp|P01933|HBA_CERAT Hemoglobin subunit alpha OS=Cercocebus 2.2e-54 188.6 1.1 2.4e-54 188.4 1.1 1.0 1 sp|P20019|HBA2_VARVI Hemoglobin subunit alpha-2 OS=Varecia 2.3e-54 188.5 0.5 2.6e-54 188.3 0.5 1.0 1 sp|P21379|HBA_RANTA Hemoglobin subunit alpha OS=Rangifer t 2.4e-54 188.4 1.7 2.7e-54 188.3 1.7 1.0 1 sp|P83682|MYG_DELLE Myoglobin OS=Delphinapterus leucas GN= 2.7e-54 188.3 0.0 3e-54 188.1 0.0 1.0 1 sp|P04246|HBT_PIG Hemoglobin subunit theta OS=Sus scrofa 2.8e-54 188.2 0.1 3.1e-54 188.1 0.1 1.0 1 sp|Q45XH7|HBG_ELEMA Hemoglobin subunit gamma OS=Elephas ma 2.9e-54 188.2 0.3 3.2e-54 188.0 0.3 1.0 1 sp|P04247|MYG_MOUSE Myoglobin OS=Mus musculus GN=Mb PE=1 S 3e-54 188.1 0.0 3.3e-54 188.0 0.0 1.0 1 sp|P02074|HBB_ODOVI Hemoglobin subunit beta-3 OS=Odocoileu 3.2e-54 188.0 0.5 3.6e-54 187.9 0.5 1.0 1 sp|P01971|HBA_ALCAA Hemoglobin subunit alpha OS=Alces alce 3.3e-54 188.0 0.6 3.6e-54 187.9 0.6 1.0 1 sp|Q9TSN8|HBA2_BUBBU Hemoglobin subunit alpha-2 OS=Bubalus 3.3e-54 188.0 0.4 3.6e-54 187.9 0.4 1.0 1 sp|Q9QZ76|MYG_RAT Myoglobin OS=Rattus norvegicus GN=Mb P 3.4e-54 187.9 0.4 3.8e-54 187.8 0.4 1.0 1 sp|O77655|HBG_TARBA Hemoglobin subunit gamma OS=Tarsius ba 3.8e-54 187.8 0.1 4.2e-54 187.7 0.1 1.0 1 sp|P11758|HBB_MYOVE Hemoglobin subunit beta OS=Myotis veli 3.8e-54 187.8 1.8 4.3e-54 187.6 1.8 1.0 1 sp|P85077|MYG_STRCA Myoglobin OS=Struthio camelus GN=MB PE 3.9e-54 187.8 0.2 4.3e-54 187.6 0.2 1.0 1 sp|Q7M2Y4|HBA_CHAMP Hemoglobin subunit alpha OS=Chalinolob 4e-54 187.7 0.9 4.4e-54 187.6 0.9 1.0 1 sp|Q7LZM5|MYG_AETPY Myoglobin OS=Aethia pygmaea GN=MB PE=1 4.1e-54 187.7 0.6 4.5e-54 187.6 0.6 1.0 1 sp|P01951|HBA_TALEU Hemoglobin subunit alpha OS=Talpa euro 4.3e-54 187.6 0.5 4.7e-54 187.5 0.5 1.0 1 sp|B3EWD8|HBB_TAMHU Hemoglobin subunit beta OS=Tamiasciuru 4.4e-54 187.6 0.1 4.9e-54 187.4 0.1 1.0 1 sp|P18435|HBE_TARSY Hemoglobin subunit epsilon OS=Tarsius 4.5e-54 187.6 0.1 4.9e-54 187.4 0.1 1.0 1 sp|B3EWD6|HBB_PERCA Hemoglobin subunit beta OS=Peromyscus 4.7e-54 187.5 1.3 5.3e-54 187.3 1.3 1.0 1 sp|P86874|MYG_DRONO Myoglobin OS=Dromaius novaehollandiae 4.8e-54 187.5 0.1 5.3e-54 187.3 0.1 1.0 1 sp|P51438|HBE_ATEBE Hemoglobin subunit epsilon OS=Ateles b 5e-54 187.4 0.1 5.5e-54 187.3 0.1 1.0 1 sp|P19760|HBG_OTOCR Hemoglobin subunit gamma OS=Otolemur c 5e-54 187.4 0.3 5.6e-54 187.3 0.3 1.0 1 sp|P10892|HBA_LUTLU Hemoglobin subunit alpha OS=Lutra lutr 5.1e-54 187.4 0.9 5.6e-54 187.2 0.9 1.0 1 sp|Q7LZM4|MYG_CERMN Myoglobin OS=Cerorhinca monocerata GN= 5.4e-54 187.3 0.8 6e-54 187.1 0.8 1.0 1 sp|P02094|HBB_MESAU Hemoglobin subunit beta OS=Mesocricetu 6e-54 187.2 0.1 6.6e-54 187.0 0.1 1.0 1 sp|Q45XH8|HBG_LOXAF Hemoglobin subunit gamma OS=Loxodonta 6.1e-54 187.1 0.2 6.7e-54 187.0 0.2 1.0 1 sp|P01963|HBA_CERSI Hemoglobin subunit alpha OS=Ceratother 6.1e-54 187.1 0.2 6.7e-54 187.0 0.2 1.0 1 sp|P02104|HBE_MOUSE Hemoglobin subunit epsilon-Y2 OS=Mus m 6.4e-54 187.0 0.0 7.2e-54 186.9 0.0 1.0 1 sp|Q2KPA3|HBB_SCAOR Hemoglobin subunit beta OS=Scapanus or 7e-54 186.9 0.5 7.8e-54 186.8 0.5 1.0 1 sp|P18994|HBE_PONPY Hemoglobin subunit epsilon OS=Pongo py 7.2e-54 186.9 0.0 8e-54 186.7 0.0 1.0 1 sp|P61921|HBG2_PANTR Hemoglobin subunit gamma-2 OS=Pan trog 7.2e-54 186.9 0.0 8e-54 186.7 0.0 1.0 1 sp|P62742|HBG2_GORGO Hemoglobin subunit gamma-2 OS=Gorilla 7.2e-54 186.9 0.0 8e-54 186.7 0.0 1.0 1 sp|P69892|HBG2_HUMAN Hemoglobin subunit gamma-2 OS=Homo sap 7.6e-54 186.8 0.1 8.4e-54 186.7 0.1 1.0 1 sp|P61920|HBG1_PANTR Hemoglobin subunit gamma-1 OS=Pan trog 7.6e-54 186.8 0.1 8.4e-54 186.7 0.1 1.0 1 sp|P69891|HBG1_HUMAN Hemoglobin subunit gamma-1 OS=Homo sap 8.5e-54 186.7 0.1 9.4e-54 186.5 0.1 1.0 1 sp|P11753|HBA_CYNSP Hemoglobin subunit alpha OS=Cynopterus 8.6e-54 186.6 0.3 9.5e-54 186.5 0.3 1.0 1 sp|P0CH25|HBA1_CAPHI Hemoglobin subunit alpha-1 OS=Capra hi 8.6e-54 186.6 0.3 9.5e-54 186.5 0.3 1.0 1 sp|P68239|HBA_AMMLE Hemoglobin subunit alpha-1/2 OS=Ammotr 8.6e-54 186.6 0.3 9.5e-54 186.5 0.3 1.0 1 sp|P68240|HBA_SHEEP Hemoglobin subunit alpha-1/2 OS=Ovis a 9.2e-54 186.5 0.4 1e-53 186.4 0.4 1.0 1 sp|Q28507|HBE_MACMU Hemoglobin subunit epsilon OS=Macaca m 9.4e-54 186.5 0.7 1e-53 186.4 0.7 1.0 1 sp|P07405|HBA_FELCA Hemoglobin subunit alpha OS=Felis catu 9.5e-54 186.5 0.3 1.1e-53 186.3 0.3 1.0 1 sp|P23601|HBA_MUSPU Hemoglobin subunit alpha-1/2 OS=Mustel 9.6e-54 186.5 0.3 1.1e-53 186.3 0.3 1.0 1 sp|P09839|HBA_MACCA Hemoglobin subunit alpha OS=Macrotus c 9.6e-54 186.5 0.8 1.1e-53 186.3 0.8 1.0 1 sp|Q9TSN7|HBA1_BUBBU Hemoglobin subunit alpha-1 OS=Bubalus 9.7e-54 186.5 1.0 1.1e-53 186.3 1.0 1.0 1 sp|P04237|HBA_TRAST Hemoglobin subunit alpha OS=Tragelaphu 1e-53 186.4 1.0 1.1e-53 186.3 1.0 1.0 1 sp|P01966|HBA_BOVIN Hemoglobin subunit alpha OS=Bos taurus 1e-53 186.4 0.9 1.1e-53 186.3 0.9 1.0 1 sp|B3EWE4|HBB_MICPE Hemoglobin subunit beta OS=Microtus pe 1.1e-53 186.3 0.2 1.2e-53 186.2 0.2 1.0 1 sp|Q28932|HBB_SMICR Hemoglobin subunit beta OS=Sminthopsis 1.1e-53 186.3 0.5 1.2e-53 186.2 0.5 1.0 1 sp|Q95190|HBE_HYLSY Hemoglobin subunit epsilon OS=Hylobate 1.1e-53 186.3 0.0 1.2e-53 186.2 0.0 1.0 1 sp|Q28779|HBG1_PANPA Hemoglobin subunit gamma-1 OS=Pan pani 1.2e-53 186.2 0.1 1.3e-53 186.0 0.1 1.0 1 sp|P01956|HBA_ROUAE Hemoglobin subunit alpha OS=Rousettus 1.2e-53 186.1 0.6 1.4e-53 186.0 0.6 1.0 1 sp|P09908|HBA_PHOVI Hemoglobin subunit alpha OS=Phoca vitu 1.3e-53 186.1 0.2 1.4e-53 186.0 0.2 1.0 1 sp|Q0ZA50|HBA_PANHO Hemoglobin subunit alpha OS=Pantholops 1.3e-53 186.0 0.0 1.5e-53 185.9 0.0 1.0 1 sp|P02103|HBE_RABIT Hemoglobin subunit epsilon OS=Oryctola 1.4e-53 185.9 0.8 1.6e-53 185.8 0.8 1.0 1 sp|P18707|HBB_MESBR Hemoglobin subunit beta OS=Mesocricetu 1.4e-53 185.9 0.3 1.6e-53 185.8 0.3 1.0 1 sp|P26915|HBA_NASNA Hemoglobin subunit alpha OS=Nasua nasu 1.4e-53 185.9 0.7 1.6e-53 185.8 0.7 1.0 1 sp|P09423|HBA_BISBO Hemoglobin subunit alpha-I/II OS=Bison 1.4e-53 185.9 0.4 1.6e-53 185.8 0.4 1.0 1 sp|Q45XI7|HBD_DUGDU Hemoglobin subunit delta OS=Dugong dug 1.5e-53 185.9 1.4 1.6e-53 185.7 1.4 1.0 1 sp|Q7LZM1|MYG_URILO Myoglobin OS=Uria lomvia GN=MB PE=1 SV 1.5e-53 185.8 1.0 1.7e-53 185.7 1.0 1.0 1 sp|B3EWC7|HBA_TAMMR Hemoglobin subunit alpha OS=Tamias mer 1.5e-53 185.8 0.1 1.7e-53 185.7 0.1 1.0 1 sp|P68026|HBE_CALJA Hemoglobin subunit epsilon OS=Callithr 1.5e-53 185.8 0.1 1.7e-53 185.7 0.1 1.0 1 sp|P68027|HBE_CALPY Hemoglobin subunit epsilon OS=Callithr 1.6e-53 185.8 0.3 1.7e-53 185.7 0.3 1.0 1 sp|P08224|HBG_CHEME Hemoglobin subunit gamma OS=Cheirogale 1.6e-53 185.8 0.5 1.8e-53 185.6 0.5 1.0 1 sp|P41327|HBA_LYNLY Hemoglobin subunit alpha OS=Lynx lynx 1.6e-53 185.8 1.2 1.8e-53 185.6 1.2 1.0 1 sp|P08852|HBA_MARMA Hemoglobin subunit alpha OS=Marmota ma 1.7e-53 185.7 0.2 1.9e-53 185.5 0.2 1.0 1 sp|P08225|HBG_EULFU Hemoglobin subunit gamma OS=Eulemur fu 2e-53 185.5 0.0 2.2e-53 185.3 0.0 1.0 1 sp|P68077|HBG_MACMU Hemoglobin subunit gamma OS=Macaca mul 2e-53 185.5 0.0 2.2e-53 185.3 0.0 1.0 1 sp|P68078|HBG_MACFU Hemoglobin subunit gamma OS=Macaca fus 2e-53 185.5 0.0 2.2e-53 185.3 0.0 1.0 1 sp|P68079|HBG_PAPCY Hemoglobin subunit gamma OS=Papio cyno 2e-53 185.5 0.4 2.2e-53 185.3 0.4 1.0 1 sp|P01945|HBA_MESAU Hemoglobin subunit alpha OS=Mesocricet 2e-53 185.5 0.8 2.2e-53 185.3 0.8 1.0 1 sp|P02095|HBB_CAVPO Hemoglobin subunit beta OS=Cavia porce 2e-53 185.5 0.3 2.2e-53 185.3 0.3 1.0 1 sp|P20243|HBA_MUSPF Hemoglobin subunit alpha-1/2 OS=Mustel 2e-53 185.4 0.2 2.3e-53 185.3 0.2 1.0 1 sp|P01953|HBA_MELME Hemoglobin subunit alpha OS=Meles mele 2e-53 185.4 0.9 2.3e-53 185.3 0.9 1.0 1 sp|P11750|HBA_SPEPA Hemoglobin subunit alpha OS=Spermophil 2.1e-53 185.4 0.4 2.3e-53 185.3 0.4 1.0 1 sp|P02100|HBE_HUMAN Hemoglobin subunit epsilon OS=Homo sap 2.1e-53 185.4 0.4 2.3e-53 185.3 0.4 1.0 1 sp|Q6LDH0|HBE_GORGO Hemoglobin subunit epsilon OS=Gorilla 2.1e-53 185.4 0.4 2.3e-53 185.3 0.4 1.0 1 sp|Q6LDH1|HBE_PANTR Hemoglobin subunit epsilon OS=Pan trog 2.1e-53 185.4 0.3 2.3e-53 185.2 0.3 1.0 1 sp|P23600|HBA_MUSLU Hemoglobin subunit alpha-1/2 OS=Mustel 2.2e-53 185.3 0.9 2.4e-53 185.2 0.9 1.0 1 sp|P01969|HBA_BOSGF Hemoglobin subunit alpha OS=Bos gaurus 2.2e-53 185.3 0.6 2.4e-53 185.2 0.6 1.0 1 sp|P09420|HBA_SPECI Hemoglobin subunit alpha OS=Spermophil 2.3e-53 185.3 0.7 2.5e-53 185.1 0.7 1.0 1 sp|P01967|HBA1_BOSMU Hemoglobin subunit alpha-1 OS=Bos mutu 2.4e-53 185.2 1.1 2.7e-53 185.0 1.1 1.0 1 sp|P09904|HBA_PHYMC Hemoglobin subunit alpha OS=Physeter m 2.4e-53 185.2 0.7 2.7e-53 185.0 0.7 1.0 1 sp|P01968|HBA2_BOSMU Hemoglobin subunit alpha-2 OS=Bos mutu 2.5e-53 185.1 0.9 2.8e-53 185.0 0.9 1.0 1 sp|P02065|HBB2_TAPTE Hemoglobin subunit beta-2 OS=Tapirus t 2.6e-53 185.1 0.1 2.9e-53 184.9 0.1 1.0 1 sp|P68016|HBE_AOTAZ Hemoglobin subunit epsilon OS=Aotus az 2.6e-53 185.1 0.1 2.9e-53 184.9 0.1 1.0 1 sp|P68017|HBE_ALOBE Hemoglobin subunit epsilon OS=Alouatta 2.6e-53 185.1 0.1 2.9e-53 184.9 0.1 1.0 1 sp|P68018|HBE_ALOSE Hemoglobin subunit epsilon OS=Alouatta 2.6e-53 185.1 0.1 2.9e-53 184.9 0.1 1.0 1 sp|P68019|HBE_ATEGE Hemoglobin subunit epsilon OS=Ateles g 2.6e-53 185.1 0.1 2.9e-53 184.9 0.1 1.0 1 sp|P68020|HBE_BRAAR Hemoglobin subunit epsilon OS=Brachyte 2.6e-53 185.1 0.1 2.9e-53 184.9 0.1 1.0 1 sp|P68021|HBE_CACCA Hemoglobin subunit epsilon OS=Cacajao 2.6e-53 185.1 0.1 2.9e-53 184.9 0.1 1.0 1 sp|P68022|HBE_CALMO Hemoglobin subunit epsilon OS=Calliceb 2.6e-53 185.1 0.1 2.9e-53 184.9 0.1 1.0 1 sp|P68023|HBE_CALTO Hemoglobin subunit epsilon OS=Calliceb 2.6e-53 185.1 0.1 2.9e-53 184.9 0.1 1.0 1 sp|P68024|HBE_CALGO Hemoglobin subunit epsilon OS=Callimic 2.6e-53 185.1 0.1 2.9e-53 184.9 0.1 1.0 1 sp|P68025|HBE_CHISA Hemoglobin subunit epsilon OS=Chiropot 2.7e-53 185.0 0.1 3e-53 184.9 0.1 1.0 1 sp|P14390|HBA_PTEPO Hemoglobin subunit alpha OS=Pteropus p 3e-53 184.9 0.2 3.3e-53 184.7 0.2 1.0 1 sp|P10885|HBA_PTEBR Hemoglobin subunit alpha OS=Pteronura 3.1e-53 184.8 0.2 3.4e-53 184.7 0.2 1.0 1 sp|P68056|HBBC_SHEEP Hemoglobin subunit beta-C OS=Ovis arie 3.3e-53 184.7 1.4 3.7e-53 184.6 1.4 1.0 1 sp|P20854|HBA_CTEGU Hemoglobin subunit alpha OS=Ctenodacty 3.3e-53 184.7 0.3 3.7e-53 184.6 0.3 1.0 1 sp|Q28775|HBE_PANPA Hemoglobin subunit epsilon OS=Pan pani 3.3e-53 184.7 0.2 3.6e-53 184.6 0.2 1.0 1 sp|P68057|HBBC_OVIMU Hemoglobin subunit beta-C OS=Ovis orie 3.8e-53 184.6 0.1 4.2e-53 184.4 0.1 1.0 1 sp|P51443|HBE_SAGMI Hemoglobin subunit epsilon OS=Saguinus 3.8e-53 184.5 0.2 4.3e-53 184.4 0.2 1.0 1 sp|P14389|HBA_PTEAL Hemoglobin subunit alpha OS=Pteropus a 3.9e-53 184.5 0.0 4.3e-53 184.4 0.0 1.0 1 sp|P11755|HBA1_TADBR Hemoglobin subunit alpha-1 OS=Tadarida 4e-53 184.5 0.0 4.4e-53 184.3 0.0 1.0 1 sp|P02097|HBG_MACNE Hemoglobin subunit gamma OS=Macaca nem 4e-53 184.5 0.3 4.5e-53 184.3 0.3 1.0 1 sp|P01958|HBA_HORSE Hemoglobin subunit alpha OS=Equus caba 4.1e-53 184.4 0.2 4.5e-53 184.3 0.2 1.0 1 sp|P51440|HBE_LAGLA Hemoglobin subunit epsilon OS=Lagothri 4.2e-53 184.4 0.1 4.7e-53 184.3 0.1 1.0 1 sp|D0VX09|HBA_PTEGI Hemoglobin subunit alpha OS=Pteropus g 4.2e-53 184.4 0.9 4.7e-53 184.3 0.9 1.0 1 sp|P07403|HBA_SPETO Hemoglobin subunit alpha OS=Spermophil 4.3e-53 184.4 0.0 4.7e-53 184.2 0.0 1.0 1 sp|P18995|HBG1_PONPY Hemoglobin subunit gamma-1 OS=Pongo py 4.8e-53 184.2 0.0 5.3e-53 184.1 0.0 1.0 1 sp|P02082|HBBF_CAPHI Hemoglobin fetal subunit beta OS=Capra 5.5e-53 184.0 0.2 6.1e-53 183.9 0.2 1.0 1 sp|Q9TVA3|HBA2_EQUBU Hemoglobin subunit alpha-2 OS=Equus bu 5.5e-53 184.0 0.8 6.1e-53 183.9 0.8 1.0 1 sp|Q9TSN9|HBA3_BUBBU Hemoglobin subunit alpha-3 OS=Bubalus 5.9e-53 183.9 1.1 6.6e-53 183.8 1.1 1.0 1 sp|P14526|HBB_BRATR Hemoglobin subunit beta OS=Bradypus tr 6e-53 183.9 0.4 6.7e-53 183.8 0.4 1.0 1 sp|P01942|HBA_MOUSE Hemoglobin subunit alpha OS=Mus muscul 6.1e-53 183.9 0.2 6.7e-53 183.7 0.2 1.0 1 sp|P68058|HBBC_AMMLE Hemoglobin subunit beta-C OS=Ammotragu 7e-53 183.7 0.2 7.8e-53 183.5 0.2 1.0 1 sp|P68028|HBE_SAISC Hemoglobin subunit epsilon OS=Saimiri 7e-53 183.7 0.2 7.8e-53 183.5 0.2 1.0 1 sp|P68029|HBE_SAIBB Hemoglobin subunit epsilon OS=Saimiri 7.1e-53 183.7 1.1 7.8e-53 183.5 1.1 1.0 1 sp|P56208|MYG_CARCR Myoglobin OS=Caretta caretta GN=MB PE= 7.4e-53 183.6 0.5 8.3e-53 183.4 0.5 1.0 1 sp|P02087|HBB_DASNO Hemoglobin subunit beta OS=Dasypus nov 7.4e-53 183.6 0.0 8.2e-53 183.5 0.0 1.0 1 sp|P02052|HBB_TUPGL Hemoglobin subunit beta OS=Tupaia glis 8e-53 183.5 1.1 8.8e-53 183.4 1.1 1.0 1 sp|P02202|MYG_CHEMY Myoglobin OS=Chelonia mydas GN=MB PE=1 8.6e-53 183.4 0.0 9.5e-53 183.3 0.0 1.0 1 sp|P62741|HBG1_GORGO Hemoglobin subunit gamma-1 OS=Gorilla 9.3e-53 183.3 0.0 1e-52 183.1 0.0 1.0 1 sp|P61948|HBG2_HYLLA Hemoglobin subunit gamma-2 OS=Hylobate 9.5e-53 183.2 0.3 1.1e-52 183.1 0.3 1.0 1 sp|P09906|HBA_RHIUN Hemoglobin subunit alpha OS=Rhinoceros 9.8e-53 183.2 0.1 1.1e-52 183.1 0.1 1.0 1 sp|P51441|HBE_LEORO Hemoglobin subunit epsilon OS=Leontopi 9.9e-53 183.2 0.2 1.1e-52 183.0 0.2 1.0 1 sp|P18970|HBA_AILME Hemoglobin subunit alpha OS=Ailuropoda 1.1e-52 183.1 0.2 1.2e-52 182.9 0.2 1.0 1 sp|P51442|HBE_PITIR Hemoglobin subunit epsilon OS=Pithecia 1.1e-52 183.1 0.3 1.2e-52 182.9 0.3 1.0 1 sp|Q9XSE9|HBA_EQUPR Hemoglobin subunit alpha OS=Equus caba 1.1e-52 183.1 0.2 1.2e-52 182.9 0.2 1.0 1 sp|Q7LZB9|HBB_STROE Hemoglobin subunit beta OS=Streptopeli 1.1e-52 183.0 0.2 1.3e-52 182.8 0.2 1.0 1 sp|Q29415|HBE_CEBOL Hemoglobin subunit epsilon OS=Cebus ol 1.1e-52 183.0 0.2 1.3e-52 182.8 0.2 1.0 1 sp|Q7JFR7|HBE_CEBKA Hemoglobin subunit epsilon OS=Cebus ka 1.2e-52 182.9 0.7 1.3e-52 182.8 0.7 1.0 1 sp|P01965|HBA_PIG Hemoglobin subunit alpha OS=Sus scrofa 1.2e-52 182.9 0.3 1.4e-52 182.7 0.3 1.0 1 sp|P01944|HBA_ONDZI Hemoglobin subunit alpha OS=Ondatra zi 1.2e-52 182.9 0.4 1.4e-52 182.7 0.4 1.0 1 sp|P63109|HBA_PANON Hemoglobin subunit alpha OS=Panthera o 1.3e-52 182.8 0.7 1.5e-52 182.6 0.7 1.0 1 sp|P02099|HBG_RABIT Hemoglobin subunit gamma OS=Oryctolagu 1.5e-52 182.6 0.1 1.6e-52 182.5 0.1 1.0 1 sp|P01962|HBA_TAPTE Hemoglobin subunit alpha-1/2 OS=Tapiru 1.5e-52 182.6 0.2 1.7e-52 182.5 0.2 1.0 1 sp|P01959|HBA_EQUAS Hemoglobin subunit alpha OS=Equus asin 1.5e-52 182.6 0.2 1.7e-52 182.5 0.2 1.0 1 sp|P01960|HBA_EQUZE Hemoglobin subunit alpha OS=Equus zebr 1.5e-52 182.6 0.2 1.7e-52 182.5 0.2 1.0 1 sp|Q7JFN6|HBA2_EQUGR Hemoglobin subunit alpha-2 OS=Equus gr 1.5e-52 182.6 0.1 1.7e-52 182.4 0.1 1.0 1 sp|P01941|HBA_TUPGL Hemoglobin subunit alpha OS=Tupaia gli 1.5e-52 182.6 0.0 1.7e-52 182.4 0.0 1.0 1 sp|P61947|HBG1_HYLLA Hemoglobin subunit gamma-1 OS=Hylobate 1.8e-52 182.3 0.4 2e-52 182.2 0.4 1.0 1 sp|P41330|HBA2_ARCGA Hemoglobin subunit alpha-2 OS=Arctocep 1.8e-52 182.3 0.3 2e-52 182.2 0.3 1.0 1 sp|P63110|HBA_PANPO Hemoglobin subunit alpha OS=Panthera p 1.9e-52 182.3 0.0 2.1e-52 182.1 0.0 1.0 1 sp|P02083|HBBF_SHEEP Hemoglobin fetal subunit beta OS=Ovis 1.9e-52 182.3 1.1 2.1e-52 182.1 1.1 1.0 1 sp|P16418|HBB_LIOMI Hemoglobin subunit beta OS=Liophis mil 1.9e-52 182.3 0.1 2.1e-52 182.1 0.1 1.0 1 sp|Q9XSN3|HBA1_EQUBU Hemoglobin subunit alpha-1 OS=Equus bu 2e-52 182.2 0.0 2.2e-52 182.1 0.0 1.0 1 sp|P02111|HBB_ORNAN Hemoglobin subunit beta OS=Ornithorhyn 2e-52 182.2 0.2 2.2e-52 182.1 0.2 1.0 1 sp|Q28220|HBE_CEBAL Hemoglobin subunit epsilon OS=Cebus al 2.1e-52 182.1 0.1 2.3e-52 182.0 0.1 1.0 1 sp|P11342|HBB_COLLI Hemoglobin subunit beta OS=Columba liv 2.2e-52 182.1 0.3 2.4e-52 181.9 0.3 1.0 1 sp|P10883|HBA_PANTS Hemoglobin subunit alpha OS=Panthera t 2.4e-52 182.0 0.3 2.6e-52 181.8 0.3 1.0 1 sp|P18976|HBA_PANPS Hemoglobin subunit alpha OS=Panthera p 2.4e-52 181.9 0.5 2.7e-52 181.8 0.5 1.0 1 sp|P02201|MYG_GRAGE Myoglobin OS=Graptemys geographica GN= 2.8e-52 181.7 0.6 3.1e-52 181.6 0.6 1.0 1 sp|B3EWC9|HBA_SPEBE Hemoglobin subunit alpha OS=Spermophil 3e-52 181.7 0.0 3.3e-52 181.5 0.0 1.0 1 sp|P18996|HBG2_PONPY Hemoglobin subunit gamma-2 OS=Pongo py 3.2e-52 181.5 0.0 3.6e-52 181.4 0.0 1.0 1 sp|P02081|HBBF_BOVIN Hemoglobin fetal subunit beta OS=Bos t 3.3e-52 181.5 0.2 3.7e-52 181.3 0.2 1.0 1 sp|P01961|HBA_EQUHE Hemoglobin subunit alpha-1/2 OS=Equus 3.6e-52 181.4 0.2 4e-52 181.2 0.2 1.0 1 sp|P80216|HBB_APTFO Hemoglobin subunit beta OS=Aptenodytes 3.7e-52 181.3 0.1 4.1e-52 181.2 0.1 1.0 1 sp|Q2KPA4|HBB_SCAAQ Hemoglobin subunit beta OS=Scalopus aq 3.7e-52 181.3 0.3 4.1e-52 181.2 0.3 1.0 1 sp|P01943|HBA_SPAEH Hemoglobin subunit alpha OS=Spalax ehr 4e-52 181.2 0.8 4.4e-52 181.1 0.8 1.0 1 sp|P01950|HBA_SUNMU Hemoglobin subunit alpha OS=Suncus mur 4.1e-52 181.2 0.3 4.5e-52 181.1 0.3 1.0 1 sp|P68235|HBA_URSMA Hemoglobin subunit alpha OS=Ursus mari 4.1e-52 181.2 0.3 4.5e-52 181.1 0.3 1.0 1 sp|P68236|HBA_URSTH Hemoglobin subunit alpha OS=Ursus thib 4.1e-52 181.2 0.3 4.5e-52 181.1 0.3 1.0 1 sp|P68237|HBA_URSML Hemoglobin subunit alpha OS=Ursus mala 4.5e-52 181.1 0.4 5e-52 180.9 0.4 1.0 1 sp|B3EWD5|HBA_PERCA Hemoglobin subunit alpha OS=Peromyscus 4.8e-52 181.0 0.2 5.2e-52 180.8 0.2 1.0 1 sp|P02078|HBBC_CAPHI Hemoglobin subunit beta-C OS=Capra hir 4.8e-52 181.0 0.2 5.3e-52 180.8 0.2 1.0 1 sp|P41329|HBA1_ARCGA Hemoglobin subunit alpha-1 OS=Arctocep 5.2e-52 180.9 0.3 5.7e-52 180.7 0.3 1.0 1 sp|P24659|HBA_MACGG Hemoglobin subunit alpha-1/2 OS=Macrod 5.6e-52 180.7 0.2 6.2e-52 180.6 0.2 1.0 1 sp|B3EWE3|HBA_MICPE Hemoglobin subunit alpha OS=Microtus p 6.9e-52 180.5 0.3 7.6e-52 180.3 0.3 1.0 1 sp|P18975|HBA_PANLE Hemoglobin subunit alpha OS=Panthera l 7e-52 180.4 0.5 7.8e-52 180.3 0.5 1.0 1 sp|P01972|HBA_ODOVI Hemoglobin subunit alpha-1/2 OS=Odocoi 9.3e-52 180.0 0.4 1e-51 179.9 0.4 1.0 1 sp|P02125|HBB_CICCI Hemoglobin subunit beta OS=Ciconia cic 9.6e-52 180.0 0.1 1e-51 179.9 0.1 1.0 1 sp|P02126|HBB_STUVU Hemoglobin subunit beta OS=Sturnus vul 1e-51 179.9 0.2 1.1e-51 179.8 0.2 1.0 1 sp|P17689|HBA_MARFO Hemoglobin subunit alpha OS=Martes foi 1e-51 179.9 0.3 1.2e-51 179.7 0.3 1.0 1 sp|P02105|HBE2_CAPHI Hemoglobin subunit epsilon-2 OS=Capra 1.1e-51 179.8 0.3 1.3e-51 179.6 0.3 1.0 1 sp|P06643|HBE4_BOVIN Hemoglobin subunit epsilon-4 OS=Bos ta 1.3e-51 179.6 0.7 1.4e-51 179.4 0.7 1.0 1 sp|P18971|HBA_BALAC Hemoglobin subunit alpha OS=Balaenopte 1.3e-51 179.5 0.2 1.5e-51 179.4 0.2 1.0 1 sp|P01948|HBA_RABIT Hemoglobin subunit alpha-1/2 OS=Orycto 1.3e-51 179.5 0.1 1.5e-51 179.4 0.1 1.0 1 sp|P10778|HBA_ODORO Hemoglobin subunit alpha OS=Odobenus r 1.4e-51 179.4 0.0 1.6e-51 179.3 0.0 1.0 1 sp|P68256|HBG1_CEBAP Hemoglobin subunit gamma-1 OS=Cebus ap 1.4e-51 179.4 0.0 1.6e-51 179.3 0.0 1.0 1 sp|Q28221|HBG1_CEBAL Hemoglobin subunit gamma-1 OS=Cebus al 1.4e-51 179.4 1.0 1.6e-51 179.3 1.0 1.0 1 sp|P01964|HBA_DASNO Hemoglobin subunit alpha OS=Dasypus no 1.5e-51 179.4 0.0 1.7e-51 179.2 0.0 1.0 1 sp|P21668|HBB_PSIKR Hemoglobin subunit beta OS=Psittacula 1.7e-51 179.2 0.1 1.9e-51 179.0 0.1 1.0 1 sp|P15448|HBA_MELCA Hemoglobin subunit alpha OS=Mellivora 1.8e-51 179.1 0.0 2e-51 179.0 0.0 1.0 1 sp|P68257|HBG2_CEBAP Hemoglobin subunit gamma-2 OS=Cebus ap 1.8e-51 179.1 0.0 2e-51 179.0 0.0 1.0 1 sp|P68258|HBG2_CEBAL Hemoglobin subunit gamma-2 OS=Cebus al 1.9e-51 179.1 0.0 2e-51 178.9 0.0 1.0 1 sp|P02115|HBB_ANAPP Hemoglobin subunit beta OS=Anas platyr 2e-51 178.9 0.0 2.2e-51 178.8 0.0 1.0 1 sp|P22742|HBB_FRAPO Hemoglobin subunit beta OS=Francolinus 2.1e-51 178.9 0.1 2.3e-51 178.8 0.1 1.0 1 sp|P02118|HBB_ANSIN Hemoglobin subunit beta OS=Anser indic 2.2e-51 178.8 0.1 2.5e-51 178.7 0.1 1.0 1 sp|P30893|HBB_COTJA Hemoglobin subunit beta OS=Coturnix co 2.3e-51 178.8 0.1 2.5e-51 178.6 0.1 1.0 1 sp|P18969|HBA_AILFU Hemoglobin subunit alpha OS=Ailurus fu 2.3e-51 178.7 0.0 2.6e-51 178.6 0.0 1.0 1 sp|P10058|HBB_EUDCH Hemoglobin subunit beta OS=Eudyptes ch 2.5e-51 178.6 0.4 2.8e-51 178.5 0.4 1.0 1 sp|P24292|HBB_ECHTE Hemoglobin subunit beta OS=Echinops te 2.6e-51 178.6 0.1 2.8e-51 178.5 0.1 1.0 1 sp|P07036|HBB_CHLME Hemoglobin subunit beta OS=Chloephaga 2.6e-51 178.6 0.2 2.9e-51 178.4 0.2 1.0 1 sp|P02107|HBB_MACRU Hemoglobin subunit beta OS=Macropus ru 2.6e-51 178.6 0.4 2.9e-51 178.4 0.4 1.0 1 sp|Q6H1U7|HBB_MACEU Hemoglobin subunit beta OS=Macropus eu 2.7e-51 178.5 0.1 3e-51 178.4 0.1 1.0 1 sp|P60529|HBA_CANFA Hemoglobin subunit alpha OS=Canis fami 2.8e-51 178.5 0.1 3.1e-51 178.3 0.1 1.0 1 sp|P02127|HBRH_CHICK Hemoglobin subunit rho OS=Gallus gallu 3.1e-51 178.3 0.0 3.5e-51 178.2 0.0 1.0 1 sp|Q45XH5|HBG_DUGDU Hemoglobin subunit gamma OS=Dugong dug 3.2e-51 178.3 0.4 3.5e-51 178.1 0.4 1.0 1 sp|P02106|HBB_MACGI Hemoglobin subunit beta OS=Macropus gi 3.3e-51 178.2 0.0 3.7e-51 178.1 0.0 1.0 1 sp|P07406|HBB_PASMO Hemoglobin subunit beta OS=Passer mont 3.5e-51 178.2 1.5 3.8e-51 178.0 1.5 1.0 1 sp|P02199|MYG_APTFO Myoglobin OS=Aptenodytes forsteri GN=M 3.5e-51 178.2 0.1 3.9e-51 178.0 0.1 1.0 1 sp|P08261|HBB_CHRRI Hemoglobin subunit beta/beta' OS=Chroi 3.6e-51 178.1 0.1 4e-51 178.0 0.1 1.0 1 sp|P02121|HBB_PHORU Hemoglobin subunit beta OS=Phoenicopte 3.8e-51 178.0 0.1 4.2e-51 177.9 0.1 1.0 1 sp|P60530|HBA_CANLA Hemoglobin subunit alpha OS=Canis latr 4e-51 178.0 0.1 4.4e-51 177.9 0.1 1.0 1 sp|P02112|HBB_CHICK Hemoglobin subunit beta OS=Gallus gall 4e-51 178.0 0.1 4.4e-51 177.9 0.1 1.0 1 sp|P68944|HBB_BRACA Hemoglobin subunit beta OS=Branta cana 4e-51 178.0 0.1 4.4e-51 177.9 0.1 1.0 1 sp|P68945|HBB_CYGOL Hemoglobin subunit beta OS=Cygnus olor 4e-51 178.0 0.1 4.4e-51 177.8 0.1 1.0 1 sp|P02117|HBB_ANSAN Hemoglobin subunit beta OS=Anser anser 4.1e-51 178.0 0.0 4.5e-51 177.8 0.0 1.0 1 sp|P68068|HBG_ATEGE Hemoglobin subunit gamma OS=Ateles geo 4.1e-51 178.0 0.0 4.5e-51 177.8 0.0 1.0 1 sp|P68069|HBG_ATEPA Hemoglobin subunit gamma OS=Ateles pan 4.1e-51 178.0 0.0 4.5e-51 177.8 0.0 1.0 1 sp|P68070|HBG_LAGLA Hemoglobin subunit gamma OS=Lagothrix 4.1e-51 178.0 0.0 4.5e-51 177.8 0.0 1.0 1 sp|P68071|HBG_BRAAR Hemoglobin subunit gamma OS=Brachytele 4.2e-51 177.9 0.3 4.7e-51 177.7 0.3 1.0 1 sp|B3EWE1|HBA_BLABR Hemoglobin subunit alpha OS=Blarina br 4.5e-51 177.8 0.1 4.9e-51 177.7 0.1 1.0 1 sp|P07411|HBB_VULGR Hemoglobin subunit beta OS=Vultur gryp 4.6e-51 177.8 0.0 5e-51 177.7 0.0 1.0 1 sp|P02113|HBB_PHACO Hemoglobin subunit beta OS=Phasianus c 5.1e-51 177.6 0.1 5.7e-51 177.5 0.1 1.0 1 sp|P21200|HBA_VULVU Hemoglobin subunit alpha OS=Vulpes vul 5.2e-51 177.6 0.1 5.7e-51 177.5 0.1 1.0 1 sp|P82113|HBB_STEMC Hemoglobin subunit beta OS=Stercorariu 5.4e-51 177.6 0.3 6e-51 177.4 0.3 1.0 1 sp|B3EWD9|HBA_TAMST Hemoglobin subunit alpha OS=Tamias str 5.5e-51 177.5 0.0 6e-51 177.4 0.0 1.0 1 sp|P68030|HBG_ALOBE Hemoglobin subunit gamma OS=Alouatta b 5.5e-51 177.5 0.0 6e-51 177.4 0.0 1.0 1 sp|P68031|HBG_ALOCA Hemoglobin subunit gamma OS=Alouatta c 5.5e-51 177.5 0.1 6.1e-51 177.4 0.1 1.0 1 sp|P14260|HBB_CAIMO Hemoglobin subunit beta OS=Cairina mos 5.6e-51 177.5 0.0 6.2e-51 177.4 0.0 1.0 1 sp|Q9GJS7|HBG_CALJA Hemoglobin subunit gamma OS=Callithrix 5.6e-51 177.5 1.0 6.3e-51 177.3 1.0 1.0 1 sp|Q7M3B8|HBA1_HAPGR Hemoglobin subunit alpha-1 OS=Hapalemu 5.8e-51 177.5 0.1 6.5e-51 177.3 0.1 1.0 1 sp|P60523|HBA_CHRBR Hemoglobin subunit alpha OS=Chrysocyon 5.8e-51 177.5 0.0 6.4e-51 177.3 0.0 1.0 1 sp|P02116|HBB_ARAAR Hemoglobin subunit beta OS=Ara araraun 6.2e-51 177.4 0.9 6.8e-51 177.2 0.9 1.0 1 sp|P63105|HBA_CAMBA Hemoglobin subunit alpha OS=Camelus ba 6.2e-51 177.4 0.9 6.8e-51 177.2 0.9 1.0 1 sp|P63106|HBA_CAMDR Hemoglobin subunit alpha OS=Camelus dr 6.2e-51 177.4 2.7 6.9e-51 177.2 2.7 1.0 1 sp|P02200|MYG_ALLMI Myoglobin OS=Alligator mississippiensi 6.5e-51 177.3 0.0 7.2e-51 177.1 0.0 1.0 1 sp|P07414|HBA_TRIIN Hemoglobin subunit alpha OS=Trichechus 6.7e-51 177.3 0.0 7.3e-51 177.1 0.0 1.0 1 sp|P14524|HBB_TURME Hemoglobin subunit beta OS=Turdus meru 7.1e-51 177.2 0.1 7.9e-51 177.0 0.1 1.0 1 sp|Q45XI4|HBD_DENDR Hemoglobin subunit deltaH OS=Dendrohyr 7.4e-51 177.1 0.1 8.2e-51 177.0 0.1 1.0 1 sp|P84792|HBB_AYTFU Hemoglobin subunit beta OS=Aythya fuli 7.9e-51 177.0 1.9 8.7e-51 176.9 1.9 1.0 1 sp|P0C0U8|HBB1_DRYCE Hemoglobin subunit beta-1 OS=Drymarcho 9.7e-51 176.7 0.7 1.1e-50 176.6 0.7 1.0 1 sp|P19645|HBA_PAGLA Hemoglobin subunit alpha OS=Paguma lar 9.8e-51 176.7 0.1 1.1e-50 176.6 0.1 1.0 1 sp|O13071|HBE_CALGE Hemoglobin subunit epsilon (Fragment) 1e-50 176.7 0.0 1.1e-50 176.5 0.0 1.0 1 sp|Q45XI5|HBD_HETBR Hemoglobin subunit deltaH OS=Heterohyr 1e-50 176.7 1.0 1.1e-50 176.5 1.0 1.0 1 sp|P07419|HBA_DASVI Hemoglobin subunit alpha OS=Dasyurus v 1e-50 176.6 0.1 1.3e-50 176.3 0.1 1.1 1 sp|P09967|GLB1_PETMA Globin-1 OS=Petromyzon marinus PE=1 SV 1.1e-50 176.6 0.1 1.2e-50 176.5 0.1 1.0 1 sp|P02114|HBB_ANAPL Hemoglobin subunit beta OS=Anas platyr 1.1e-50 176.6 0.3 1.2e-50 176.4 0.3 1.0 1 sp|P18978|HBA_TURTR Hemoglobin subunit alpha OS=Tursiops t 1.1e-50 176.5 0.2 1.2e-50 176.4 0.2 1.0 1 sp|P10782|HBB_PHACA Hemoglobin subunit beta OS=Phalacrocor 1.3e-50 176.4 0.1 1.4e-50 176.2 0.1 1.0 1 sp|P15163|HBA_LEPWE Hemoglobin subunit alpha-1/2 OS=Lepton 1.4e-50 176.2 0.9 1.6e-50 176.0 0.9 1.0 1 sp|P23019|HBA_PROCR Hemoglobin subunit alpha OS=Proteles c 1.5e-50 176.1 0.1 1.7e-50 176.0 0.1 1.0 1 sp|P02124|HBB_RHEAM Hemoglobin subunit beta OS=Rhea americ 1.6e-50 176.1 0.1 1.7e-50 175.9 0.1 1.0 1 sp|P86390|HBB2_IGUIG Hemoglobin subunit beta-2 OS=Iguana ig 1.8e-50 175.9 0.0 2e-50 175.7 0.0 1.0 1 sp|P02123|HBB_STRCA Hemoglobin subunit beta OS=Struthio ca 1.9e-50 175.8 0.0 2.1e-50 175.6 0.0 1.0 1 sp|Q27940|HBG_AOTAZ Hemoglobin subunit gamma OS=Aotus azar 2e-50 175.7 0.0 2.2e-50 175.6 0.0 1.0 1 sp|P02120|HBB_ANSSE Hemoglobin subunit beta OS=Anseranas s 2.4e-50 175.5 0.3 2.6e-50 175.3 0.3 1.0 1 sp|P02203|MYG_VARVA Myoglobin OS=Varanus varius GN=MB PE=1 2.4e-50 175.4 0.0 2.7e-50 175.3 0.0 1.0 1 sp|P68061|HBB_AEGMO Hemoglobin subunit beta OS=Aegypius mo 2.4e-50 175.4 0.0 2.7e-50 175.3 0.0 1.0 1 sp|P68062|HBB_TRIOC Hemoglobin subunit beta OS=Trigonoceps 2.4e-50 175.4 0.0 2.7e-50 175.3 0.0 1.0 1 sp|P68063|HBB_GYPRU Hemoglobin subunit beta OS=Gyps rueppe 2.6e-50 175.3 0.1 2.9e-50 175.2 0.1 1.0 1 sp|P08851|HBB_ACCGE Hemoglobin subunit beta OS=Accipiter g 2.7e-50 175.3 0.4 3e-50 175.1 0.4 1.0 1 sp|P01957|HBA_PROHA Hemoglobin subunit alpha OS=Procavia c 2.7e-50 175.3 0.0 3e-50 175.1 0.0 1.0 1 sp|Q9GLX4|HBG1_CALMO Hemoglobin subunit gamma-1 OS=Calliceb 2.8e-50 175.2 0.1 3.1e-50 175.1 0.1 1.0 1 sp|P02128|HBE_CHICK Hemoglobin subunit epsilon OS=Gallus g 3.1e-50 175.1 0.1 3.5e-50 174.9 0.1 1.0 1 sp|P01949|HBA_ERIEU Hemoglobin subunit alpha OS=Erinaceus 3.8e-50 174.8 1.4 4.2e-50 174.7 1.4 1.0 1 sp|P01979|HBA_ORNAN Hemoglobin subunit alpha OS=Ornithorhy 3.9e-50 174.8 0.1 4.3e-50 174.6 0.1 1.0 1 sp|P18977|HBA_PROLO Hemoglobin subunit alpha OS=Procyon lo 3.9e-50 174.8 0.6 4.3e-50 174.6 0.6 1.0 1 sp|P01973|HBA_LAMGL Hemoglobin subunit alpha OS=Lama glama 4.1e-50 174.7 0.9 4.6e-50 174.6 0.9 1.0 1 sp|P67815|HBA_LAMGU Hemoglobin subunit alpha OS=Lama guani 4.1e-50 174.7 0.9 4.6e-50 174.6 0.9 1.0 1 sp|P67816|HBA_LAMPA Hemoglobin subunit alpha OS=Lama guani 5.3e-50 174.3 0.1 5.8e-50 174.2 0.1 1.0 1 sp|P02108|HBB_POTTR Hemoglobin subunit beta OS=Potorous tr 5.3e-50 174.3 0.4 5.8e-50 174.2 0.4 1.0 1 sp|P83123|HBB_CHENI Hemoglobin subunit beta OS=Chelonoidis 5.4e-50 174.3 0.1 6e-50 174.2 0.1 1.0 1 sp|P02109|HBB_DIDVI Hemoglobin subunit beta-M OS=Didelphis 5.5e-50 174.3 0.1 6e-50 174.2 0.1 1.0 1 sp|P02122|HBB_AQUCH Hemoglobin subunit beta OS=Aquila chry 6.6e-50 174.0 2.2 7.3e-50 173.9 2.2 1.0 1 sp|P01977|HBA1_TACAC Hemoglobin subunit alpha-1 OS=Tachyglo 6.7e-50 174.0 0.9 7.4e-50 173.9 0.9 1.0 1 sp|P07425|HBA_LAMVI Hemoglobin subunit alpha OS=Lama vicug 8.1e-50 173.7 1.2 9e-50 173.6 1.2 1.0 1 sp|P01978|HBA2_TACAC Hemoglobin subunit alpha-2 OS=Tachyglo 8.6e-50 173.6 0.2 9.6e-50 173.5 0.2 1.0 1 sp|P04444|HBBZ_MOUSE Hemoglobin subunit beta-H1 OS=Mus musc 9.7e-50 173.5 0.4 1.1e-49 173.3 0.4 1.0 1 sp|P22743|HBB2_NAJNA Hemoglobin subunit beta-2 OS=Naja naja 1.1e-49 173.3 0.5 1.2e-49 173.2 0.5 1.0 1 sp|P01954|HBA_ELEMA Hemoglobin subunit alpha OS=Elephas ma 1.2e-49 173.2 1.2 1.3e-49 173.1 1.2 1.0 1 sp|P13274|HBB_CHRPI Hemoglobin subunit beta OS=Chrysemys p 1.6e-49 172.8 0.2 1.7e-49 172.7 0.2 1.0 1 sp|P29626|HBBY_MESAU Hemoglobin subunit beta-Y OS=Mesocrice 1.6e-49 172.8 0.0 1.8e-49 172.6 0.0 1.0 1 sp|P56285|HBG_ALOSE Hemoglobin subunit gamma OS=Alouatta s 1.6e-49 172.8 0.0 1.8e-49 172.6 0.0 1.0 1 sp|Q45XI6|HBD_PROCA Hemoglobin subunit deltaH OS=Procavia 1.7e-49 172.7 0.5 1.9e-49 172.5 0.5 1.0 1 sp|Q98905|HBB_CHECB Hemoglobin subunit beta OS=Chelonoidis 2.9e-49 171.9 0.4 3.2e-49 171.8 0.4 1.0 1 sp|P01955|HBA_LOXAF Hemoglobin subunit alpha OS=Loxodonta 3.5e-49 171.7 0.4 3.9e-49 171.5 0.4 1.0 1 sp|P02080|HBBN_AMMLE Hemoglobin subunit beta-C(NA) OS=Ammot 3.6e-49 171.7 1.4 4e-49 171.5 1.4 1.0 1 sp|B3EWD3|HBA_PERCR Hemoglobin subunit alpha OS=Peromyscus 3.6e-49 171.6 0.6 4e-49 171.5 0.6 1.0 1 sp|P01975|HBA_MACGI Hemoglobin subunit alpha OS=Macropus g 3.9e-49 171.5 0.0 4.2e-49 171.4 0.0 1.0 1 sp|P86391|HBB2_AMBCR Hemoglobin subunit beta-2 OS=Amblyrhyn 3.9e-49 171.5 0.3 4.4e-49 171.4 0.3 1.0 1 sp|B3EWD1|HBA_SCICA Hemoglobin subunit alpha OS=Sciurus ca 4.5e-49 171.3 0.2 5e-49 171.2 0.2 1.0 1 sp|P18987|HBB1_IGUIG Hemoglobin subunit beta-1 OS=Iguana ig 4.7e-49 171.3 0.6 5.2e-49 171.1 0.6 1.0 1 sp|P18973|HBA_CROCR Hemoglobin subunit alpha OS=Crocuta cr 5.1e-49 171.1 0.1 5.6e-49 171.0 0.1 1.0 1 sp|P10061|HBB2_SPHPU Hemoglobin subunit beta-2 OS=Sphenodon 5.6e-49 171.0 0.2 6.2e-49 170.9 0.2 1.0 1 sp|P06642|HBE2_BOVIN Hemoglobin subunit epsilon-2 OS=Bos ta 5.7e-49 171.0 0.4 6.4e-49 170.8 0.4 1.0 1 sp|P04443|HBB0_MOUSE Hemoglobin subunit beta-H0 OS=Mus musc 6.1e-49 170.9 0.1 6.7e-49 170.8 0.1 1.0 1 sp|Q45XH6|HBG_TRIMA Hemoglobin subunit gamma OS=Trichechus 6.6e-49 170.8 0.6 7.2e-49 170.7 0.6 1.0 1 sp|P83133|HBB_ALDEL Hemoglobin A/D subunit beta OS=Aldabra 6.7e-49 170.8 0.1 8.3e-49 170.5 0.1 1.1 1 sp|P21198|GLB2_MORMR Globin-2 OS=Mordacia mordax PE=1 SV=2 8.8e-49 170.4 0.4 9.8e-49 170.2 0.4 1.0 1 sp|P81043|HBA_MACEU Hemoglobin subunit alpha OS=Macropus e 9.3e-49 170.3 0.2 1e-48 170.1 0.2 1.0 1 sp|P14525|HBA_BRATR Hemoglobin subunit alpha OS=Bradypus t 1e-48 170.1 0.1 1.3e-48 169.8 0.1 1.1 1 sp|P21197|GLB1_MORMR Globin-1 OS=Mordacia mordax PE=1 SV=2 2.1e-48 169.1 0.2 2.3e-48 169.0 0.2 1.0 1 sp|P15165|HBB_APUAP Hemoglobin subunit beta OS=Apus apus G 2.1e-48 169.1 0.4 2.4e-48 169.0 0.4 1.0 1 sp|P18436|HBG_TARSY Hemoglobin subunit gamma OS=Tarsius sy 2.3e-48 169.0 1.2 2.5e-48 168.9 1.2 1.0 1 sp|P10059|HBA_SPHPU Hemoglobin subunit alpha-A OS=Sphenodo 2.6e-48 168.9 0.4 2.8e-48 168.7 0.4 1.0 1 sp|P41332|HBB_MICGA Hemoglobin subunit beta OS=Microcephal 3.2e-48 168.6 0.2 3.6e-48 168.4 0.2 1.0 1 sp|P01946|HBA_RAT Hemoglobin subunit alpha-1/2 OS=Rattus 3.3e-48 168.5 1.2 3.6e-48 168.4 1.2 1.0 1 sp|P19014|HBA_CRIGA Hemoglobin subunit alpha OS=Cricetomys 5.4e-48 167.8 0.6 6.4e-48 167.6 0.6 1.0 1 sp|P21199|GLB3_MORMR Globin-3 OS=Mordacia mordax PE=1 SV=2 5.8e-48 167.7 0.3 6.5e-48 167.6 0.3 1.0 1 sp|P81024|HBAD_MELGA Hemoglobin subunit alpha-D OS=Meleagri 8e-48 167.3 0.1 8.9e-48 167.1 0.1 1.0 1 sp|Q9XSN2|HBA1_EQUGR Hemoglobin subunit alpha-1 OS=Equus gr 8.1e-48 167.2 0.6 9e-48 167.1 0.6 1.0 1 sp|Q9DF25|HBAD_CHECB Hemoglobin subunit alpha-D OS=Chelonoi 8.8e-48 167.1 0.2 9.8e-48 167.0 0.2 1.0 1 sp|P01998|HBA_CRONI Hemoglobin subunit alpha OS=Crocodylus 1.8e-47 166.1 0.3 2e-47 165.9 0.3 1.0 1 sp|P08849|HBAD_ACCGE Hemoglobin subunit alpha-D OS=Accipite 1.9e-47 166.1 1.1 2.1e-47 165.9 1.1 1.0 1 sp|Q10732|HBA_CARCR Hemoglobin subunit alpha-A OS=Caretta 2.2e-47 165.8 0.0 2.4e-47 165.7 0.0 1.0 1 sp|P02007|HBPI_CHICK Hemoglobin subunit pi OS=Gallus gallus 2.2e-47 165.8 0.3 2.5e-47 165.7 0.3 1.0 1 sp|P13787|HBAZ_HORSE Hemoglobin subunit zeta OS=Equus cabal 2.3e-47 165.8 0.3 2.5e-47 165.7 0.3 1.0 1 sp|B3EWD7|HBA_TAMHU Hemoglobin subunit alpha OS=Tamiasciur 2.9e-47 165.5 0.0 3.2e-47 165.3 0.0 1.0 1 sp|P24291|HBA_ECHTE Hemoglobin subunit alpha OS=Echinops t 2.9e-47 165.5 0.7 3.2e-47 165.3 0.7 1.0 1 sp|P02076|HBB_OVIMU Hemoglobin subunit beta OS=Ovis orient 3e-47 165.4 0.7 3.3e-47 165.3 0.7 1.0 1 sp|P83134|HBAD_ALDEL Hemoglobin D subunit alpha OS=Aldabrac 3.1e-47 165.4 0.3 3.4e-47 165.2 0.3 1.0 1 sp|P02001|HBAD_CHICK Hemoglobin subunit alpha-D OS=Gallus g 3.1e-47 165.4 0.5 3.4e-47 165.2 0.5 1.0 1 sp|P11751|HBA_MEGLY Hemoglobin subunit alpha OS=Megaderma 4.2e-47 164.9 0.1 4.6e-47 164.8 0.1 1.0 1 sp|P18993|HBB1_VARAL Hemoglobin subunit beta-1 OS=Varanus a 6.3e-47 164.4 0.2 7e-47 164.2 0.2 1.0 1 sp|P68059|HBAD_AEGMO Hemoglobin subunit alpha-D OS=Aegypius 6.3e-47 164.4 0.2 7e-47 164.2 0.2 1.0 1 sp|P68060|HBAD_TRIOC Hemoglobin subunit alpha-D OS=Trigonoc 6.4e-47 164.3 0.2 7.1e-47 164.2 0.2 1.0 1 sp|P04242|HBAD_STRCA Hemoglobin subunit alpha-D OS=Struthio 7.3e-47 164.2 0.2 8.1e-47 164.0 0.2 1.0 1 sp|P02008|HBAZ_HUMAN Hemoglobin subunit zeta OS=Homo sapien 7.5e-47 164.1 0.0 8.3e-47 164.0 0.0 1.0 1 sp|P04243|HBPI_CAIMO Hemoglobin subunit pi OS=Cairina mosch 8.6e-47 163.9 1.3 9.5e-47 163.8 1.3 1.0 1 sp|P13273|HBA_CHRPI Hemoglobin subunit alpha-A OS=Chrysemy 1e-46 163.7 0.3 1.1e-46 163.6 0.3 1.0 1 sp|P83124|HBAD_CHENI Hemoglobin subunit alpha-D OS=Chelonoi 1e-46 163.7 1.2 1.1e-46 163.6 1.2 1.0 1 sp|P06638|HBA5_XENLA Hemoglobin subunit alpha-5 OS=Xenopus 1.1e-46 163.6 0.2 1.2e-46 163.4 0.2 1.0 1 sp|P02000|HBA_CAICR Hemoglobin subunit alpha OS=Caiman cro 1.1e-46 163.5 0.3 1.3e-46 163.4 0.3 1.0 1 sp|P04241|HBAD_RHEAM Hemoglobin subunit alpha-D OS=Rhea ame 1.6e-46 163.1 1.4 1.7e-46 162.9 1.4 1.0 1 sp|P01986|HBA_ANAPL Hemoglobin subunit alpha-A OS=Anas pla 1.7e-46 163.0 1.0 1.8e-46 162.8 1.0 1.0 1 sp|P01989|HBA_ANSAN Hemoglobin subunit alpha-A OS=Anser an 1.7e-46 162.9 0.2 1.9e-46 162.8 0.2 1.0 1 sp|P08257|HBAD_GYPRU Hemoglobin subunit alpha-D/D' OS=Gyps 1.8e-46 162.9 1.3 1.9e-46 162.8 1.3 1.0 1 sp|P01988|HBA_ANAPP Hemoglobin subunit alpha-A OS=Anas pla 1.9e-46 162.8 0.4 2.1e-46 162.7 0.4 1.0 1 sp|P02002|HBAD_PHACO Hemoglobin subunit alpha-D OS=Phasianu 1.9e-46 162.8 0.5 2.1e-46 162.6 0.5 1.0 1 sp|P01993|HBA_AQUCH Hemoglobin subunit alpha-A OS=Aquila c 2e-46 162.7 0.4 2.2e-46 162.6 0.4 1.0 1 sp|P84791|HBAD_AYTFU Hemoglobin subunit alpha-D OS=Aythya f 2.5e-46 162.4 0.2 2.8e-46 162.3 0.2 1.0 1 sp|P06347|HBAZ_PANTR Hemoglobin subunit zeta OS=Pan troglod 2.6e-46 162.4 1.2 2.9e-46 162.2 1.2 1.0 1 sp|P22740|HBA_ANAPE Hemoglobin subunit alpha-A OS=Anas pen 2.7e-46 162.3 0.4 2.9e-46 162.2 0.4 1.0 1 sp|P82112|HBA2_STEMC Hemoglobin subunit alpha-2 OS=Stercora 2.9e-46 162.2 1.0 3.3e-46 162.0 1.0 1.0 1 sp|P01991|HBA_BRACA Hemoglobin subunit alpha-A OS=Branta c 3e-46 162.2 1.3 3.3e-46 162.0 1.3 1.0 1 sp|P01987|HBA_CAIMO Hemoglobin subunit alpha-A OS=Cairina 3.4e-46 162.0 2.0 3.7e-46 161.9 2.0 1.0 1 sp|P01990|HBA_ANSIN Hemoglobin subunit alpha-A OS=Anser in 3.6e-46 161.9 0.5 4e-46 161.7 0.5 1.0 1 sp|P22741|HBA_FRAPO Hemoglobin subunit alpha-A OS=Francoli 4.3e-46 161.7 0.2 4.7e-46 161.5 0.2 1.0 1 sp|P83135|HBAA_CHENI Hemoglobin subunit alpha-A OS=Chelonoi 4.5e-46 161.6 0.6 5e-46 161.4 0.6 1.0 1 sp|P04442|HBAD_ANAPL Hemoglobin subunit alpha-D OS=Anas pla 4.6e-46 161.6 0.1 5e-46 161.4 0.1 1.0 1 sp|P83132|HBA2_ALDEL Hemoglobin A subunit alpha-2 OS=Aldabr 4.7e-46 161.5 2.7 5.1e-46 161.4 2.7 1.0 1 sp|P02005|HBAD_CHRPI Hemoglobin subunit alpha-D OS=Chrysemy 5.5e-46 161.3 0.4 6.1e-46 161.2 0.4 1.0 1 sp|P01995|HBA_PHACO Hemoglobin subunit alpha-A OS=Phasianu 7.1e-46 160.9 1.0 7.9e-46 160.8 1.0 1.0 1 sp|P10057|HBA_EUDCH Hemoglobin subunit alpha OS=Eudyptes c 8.1e-46 160.8 0.5 8.9e-46 160.6 0.5 1.0 1 sp|P84790|HBA_AYTFU Hemoglobin subunit alpha-A OS=Aythya f 8.9e-46 160.6 3.2 9.8e-46 160.5 3.2 1.0 1 sp|P02006|HBAD_PHRHI Hemoglobin subunit alpha-D OS=Phrynops 9e-46 160.6 0.3 9.9e-46 160.5 0.3 1.0 1 sp|P08850|HBA_ACCGE Hemoglobin subunit alpha-A OS=Accipite 1e-45 160.5 0.2 1.1e-45 160.3 0.2 1.0 1 sp|P83131|HBA1_ALDEL Hemoglobin A subunit alpha-1 OS=Aldabr 1.1e-45 160.4 0.4 1.2e-45 160.2 0.4 1.0 1 sp|P30892|HBAD_COTJA Hemoglobin subunit alpha-D OS=Coturnix 1.1e-45 160.3 0.6 1.2e-45 160.2 0.6 1.0 1 sp|P02003|HBAD_CAIMO Hemoglobin subunit alpha-D OS=Cairina 1.1e-45 160.3 0.5 1.2e-45 160.2 0.5 1.0 1 sp|P01981|HBA_STRCA Hemoglobin subunit alpha-A OS=Struthio 1.2e-45 160.2 0.6 1.4e-45 160.0 0.6 1.0 1 sp|P10060|HBB1_SPHPU Hemoglobin subunit beta-1 OS=Sphenodon 1.5e-45 159.9 1.2 1.7e-45 159.8 1.2 1.0 1 sp|P01980|HBA_APTFO Hemoglobin subunit alpha OS=Aptenodyte 1.6e-45 159.8 0.7 1.8e-45 159.7 0.7 1.0 1 sp|P01947|HBA_CAVPO Hemoglobin subunit alpha OS=Cavia porc 1.8e-45 159.6 0.5 2e-45 159.5 0.5 1.0 1 sp|P01983|HBA_CICCI Hemoglobin subunit alpha-A OS=Ciconia 1.8e-45 159.6 0.2 2e-45 159.5 0.2 1.0 1 sp|P13786|HBAZ_CAPHI Hemoglobin subunit zeta OS=Capra hircu 1.9e-45 159.5 1.0 2.1e-45 159.4 1.0 1.0 1 sp|P01992|HBA_CYGOL Hemoglobin subunit alpha-A OS=Cygnus o 2e-45 159.5 0.5 2.2e-45 159.4 0.5 1.0 1 sp|P01999|HBA_ALLMI Hemoglobin subunit alpha OS=Alligator 2.1e-45 159.4 0.8 2.3e-45 159.3 0.8 1.0 1 sp|P24589|HBA_COTJA Hemoglobin subunit alpha-A OS=Coturnix 2.3e-45 159.3 0.2 2.6e-45 159.1 0.2 1.0 1 sp|P02009|HBAZ_PIG Hemoglobin subunit zeta OS=Sus scrofa 3e-45 158.9 0.2 3.2e-45 158.8 0.2 1.0 1 sp|P02129|HBB_CRONI Hemoglobin subunit beta OS=Crocodylus 3.3e-45 158.8 1.0 3.6e-45 158.6 1.0 1.0 1 sp|P02137|HBBL_XENLA Hemoglobin larval subunit beta-1 OS=Xe 3.6e-45 158.7 0.4 4e-45 158.5 0.4 1.0 1 sp|P08256|HBA_GYPRU Hemoglobin subunit alpha-A/A' OS=Gyps 4.1e-45 158.5 1.4 4.5e-45 158.3 1.4 1.0 1 sp|P07034|HBA_CHLME Hemoglobin subunit alpha-A OS=Chloepha 4.8e-45 158.3 0.4 5.3e-45 158.1 0.4 1.0 1 sp|P07417|HBA_AEGMO Hemoglobin subunit alpha-A OS=Aegypius 6e-45 157.9 1.7 6.7e-45 157.8 1.7 1.0 1 sp|P10780|HBA_PHACA Hemoglobin subunit alpha-A OS=Phalacro 6.1e-45 157.9 0.1 6.8e-45 157.8 0.1 1.0 1 sp|P07413|HBAD_PASMO Hemoglobin subunit alpha-D OS=Passer m 6.8e-45 157.8 0.6 7.5e-45 157.6 0.6 1.0 1 sp|P01985|HBA_ANSSE Hemoglobin subunit alpha-A OS=Anserana 6.8e-45 157.8 0.2 7.6e-45 157.6 0.2 1.0 1 sp|O12985|HBAD_COLLI Hemoglobin subunit alpha-D OS=Columba 7e-45 157.7 0.4 7.8e-45 157.6 0.4 1.0 1 sp|P01994|HBA_CHICK Hemoglobin subunit alpha-A OS=Gallus g 7.2e-45 157.7 0.6 8e-45 157.5 0.6 1.0 1 sp|P04239|HBAD_ANSIN Hemoglobin subunit alpha-D OS=Anser in 8.3e-45 157.5 0.6 9.2e-45 157.3 0.6 1.0 1 sp|P04238|HBAD_ANSAN Hemoglobin subunit alpha-D OS=Anser an 8.5e-45 157.4 0.3 9.4e-45 157.3 0.3 1.0 1 sp|P10781|HBAD_PHACA Hemoglobin subunit alpha-D OS=Phalacro 9.3e-45 157.3 0.8 1e-44 157.2 0.8 1.0 1 sp|P04240|HBAD_BRACA Hemoglobin subunit alpha-D OS=Branta c 9.9e-45 157.2 0.2 1.1e-44 157.1 0.2 1.0 1 sp|P15164|HBAD_APUAP Hemoglobin subunit alpha-D OS=Apus apu 1.2e-44 157.0 0.4 1.3e-44 156.8 0.4 1.0 1 sp|P07035|HBAD_CHLME Hemoglobin subunit alpha-D OS=Chloepha 1.3e-44 156.9 0.3 1.4e-44 156.7 0.3 1.0 1 sp|P08260|HBA_CHRRI Hemoglobin subunit alpha-A OS=Chroicoc 1.3e-44 156.8 0.4 1.5e-44 156.7 0.4 1.0 1 sp|P19832|HBA_TRIOC Hemoglobin subunit alpha-A OS=Trigonoc 1.3e-44 156.8 0.4 1.5e-44 156.7 0.4 1.0 1 sp|P81023|HBA_MELGA Hemoglobin subunit alpha-A OS=Meleagri 1.6e-44 156.6 0.5 1.7e-44 156.4 0.5 1.0 1 sp|Q8HY34|HBA_MONDO Hemoglobin subunit alpha OS=Monodelphi 1.6e-44 156.6 0.2 1.7e-44 156.4 0.2 1.0 1 sp|P82111|HBA1_STEMC Hemoglobin subunit alpha-1 OS=Stercora 1.9e-44 156.3 0.3 2.1e-44 156.2 0.3 1.0 1 sp|P21871|HBA_COLLI Hemoglobin subunit alpha-A OS=Columba 2.1e-44 156.2 2.4 2.2e-44 156.1 2.4 1.0 1 sp|P02130|HBB_ALLMI Hemoglobin subunit beta OS=Alligator m 2.2e-44 156.1 1.8 2.4e-44 156.0 1.8 1.0 1 sp|P02131|HBB_CAICR Hemoglobin subunit beta OS=Caiman croc 2.5e-44 155.9 0.3 2.8e-44 155.8 0.3 1.0 1 sp|P02136|HBB3_LITCT Hemoglobin subunit beta-3 OS=Lithobate 2.5e-44 155.9 0.8 2.8e-44 155.8 0.8 1.0 1 sp|P19789|HBA_EUDSC Hemoglobin subunit alpha-A OS=Eudynamy 2.8e-44 155.8 0.1 3.1e-44 155.6 0.1 1.0 1 sp|P07404|HBA_VULGR Hemoglobin subunit alpha-A OS=Vultur g 3.3e-44 155.5 0.0 3.7e-44 155.4 0.0 1.0 1 sp|P02004|HBAD_STUVU Hemoglobin subunit alpha-D OS=Sturnus 3.7e-44 155.4 0.2 4e-44 155.2 0.2 1.0 1 sp|Q7LZC3|HBA_STROE Hemoglobin subunit alpha-A OS=Streptop 4.1e-44 155.2 0.0 4.6e-44 155.1 0.0 1.0 1 sp|P07407|HBA_PASMO Hemoglobin subunit alpha-A OS=Passer m 4.4e-44 155.1 0.1 4.9e-44 155.0 0.1 1.0 1 sp|P01976|HBA_DIDVI Hemoglobin subunit alpha OS=Didelphis 5.1e-44 154.9 1.2 5.6e-44 154.8 1.2 1.0 1 sp|P06636|HBA3_XENLA Hemoglobin subunit alpha-3 OS=Xenopus 5.9e-44 154.7 0.1 6.4e-44 154.6 0.1 1.0 1 sp|P06467|HBAZ_MOUSE Hemoglobin subunit zeta OS=Mus musculu 6e-44 154.7 0.3 6.6e-44 154.5 0.3 1.0 1 sp|P01997|HBA_STUVU Hemoglobin subunit alpha-A OS=Sturnus 9.3e-44 154.1 0.4 1e-43 153.9 0.4 1.0 1 sp|P15162|HBA_APUAP Hemoglobin subunit alpha-A OS=Apus apu 1.3e-43 153.6 1.1 1.4e-43 153.5 1.1 1.0 1 sp|P08423|HBB2_XENTR Hemoglobin subunit beta-2 OS=Xenopus t 1.6e-43 153.4 0.3 1.7e-43 153.2 0.3 1.0 1 sp|P14522|HBA_TURME Hemoglobin subunit alpha-A OS=Turdus m 1.8e-43 153.2 0.0 2e-43 153.0 0.0 1.0 1 sp|P14261|HBE_CAIMO Hemoglobin subunit epsilon OS=Cairina 3.1e-43 152.4 0.6 3.4e-43 152.2 0.6 1.0 1 sp|Q10733|HBB_CARCR Hemoglobin subunit beta OS=Caretta car 3.1e-43 152.4 0.2 3.5e-43 152.2 0.2 1.0 1 sp|P01982|HBA_RHEAM Hemoglobin subunit alpha-A OS=Rhea ame 4.2e-43 152.0 1.4 4.6e-43 151.8 1.4 1.0 1 sp|P08422|HBA3_XENTR Hemoglobin subunit alpha-3 OS=Xenopus 5.9e-43 151.5 0.0 6.6e-43 151.3 0.0 1.0 1 sp|P11896|HBA3_PLEWA Hemoglobin larval subunit alpha OS=Ple 7.3e-43 151.2 0.8 8e-43 151.0 0.8 1.0 1 sp|P06637|HBA4_XENLA Hemoglobin subunit alpha-4 OS=Xenopus 1.5e-42 150.2 0.0 1.7e-42 150.0 0.0 1.0 1 sp|P84203|HBAC_GYMUN Hemoglobin cathodic subunit alpha OS=G 1.7e-42 149.9 0.1 1.9e-42 149.8 0.1 1.0 1 sp|P14523|HBAD_TURME Hemoglobin subunit alpha-D OS=Turdus m 2.1e-42 149.7 0.0 2.3e-42 149.5 0.0 1.0 1 sp|P02011|HBA3_LITCT Hemoglobin subunit alpha-3 OS=Lithobat 2.8e-42 149.3 0.4 3.1e-42 149.1 0.4 1.0 1 sp|Q9PVU6|HBAE_ORYLA Hemoglobin embryonic subunit alpha OS= 3.3e-42 149.0 0.2 3.7e-42 148.9 0.2 1.0 1 sp|P01996|HBA_ARAAR Hemoglobin subunit alpha-A OS=Ara arar 3.4e-42 149.0 0.2 3.8e-42 148.9 0.2 1.0 1 sp|P02133|HBB2_XENLA Hemoglobin subunit beta-2 OS=Xenopus l 5e-42 148.5 0.0 5.5e-42 148.3 0.0 1.0 1 sp|P0C0U6|HBA_DRYCE Hemoglobin subunit alpha-A OS=Drymarch 5.4e-42 148.3 0.7 6.1e-42 148.2 0.7 1.0 1 sp|P01984|HBA_PHORU Hemoglobin subunit alpha-A OS=Phoenico 6.4e-42 148.1 0.0 7e-42 148.0 0.0 1.0 1 sp|P82316|HBBC_HOPLI Hemoglobin cathodic subunit beta OS=Ho 7.4e-42 147.9 0.4 8.2e-42 147.8 0.4 1.0 1 sp|P83270|HBA1_ANAMI Hemoglobin subunit alpha-1 OS=Anarhich 9.9e-42 147.5 0.1 1.1e-41 147.3 0.1 1.0 1 sp|P19831|HBA_PSIKR Hemoglobin subunit alpha OS=Psittacula 9.9e-42 147.5 0.0 1.1e-41 147.4 0.0 1.0 1 sp|P02018|HBA_CARAU Hemoglobin subunit alpha OS=Carassius 1.2e-41 147.2 0.0 1.3e-41 147.1 0.0 1.0 1 sp|P80727|HBBC_ANGAN Hemoglobin cathodic subunit beta OS=An 1.3e-41 147.1 0.1 1.4e-41 147.0 0.1 1.0 1 sp|P11748|HBA_THUTH Hemoglobin subunit alpha OS=Thunnus th 1.9e-41 146.6 0.0 2.1e-41 146.4 0.0 1.0 1 sp|Q9PRL9|HBA1_NAJNA Hemoglobin subunit alpha-1 OS=Naja naj 2.5e-41 146.2 0.0 2.8e-41 146.1 0.0 1.0 1 sp|P02142|HBB1_ONCMY Hemoglobin subunit beta-1 OS=Oncorhync 4.1e-41 145.5 0.1 4.5e-41 145.4 0.1 1.0 1 sp|Q90487|HBA_DANRE Hemoglobin subunit alpha OS=Danio reri 4.4e-41 145.4 0.1 4.8e-41 145.3 0.1 1.0 1 sp|P10062|HBAD_SPHPU Hemoglobin subunit alpha-D OS=Sphenodo 9.5e-41 144.3 0.5 1.1e-40 144.2 0.5 1.0 1 sp|P18974|HBA1_IGUIG Hemoglobin subunit alpha-1 OS=Iguana i 1.1e-40 144.1 0.3 1.2e-40 143.9 0.3 1.0 1 sp|P83271|HBA2_ANAMI Hemoglobin subunit alpha-2 OS=Anarhich 1.2e-40 144.0 0.1 1.4e-40 143.8 0.1 1.0 1 sp|P29624|HBA1_NOTAN Hemoglobin subunit alpha-1 OS=Notothen 1.4e-40 143.8 0.0 1.5e-40 143.6 0.0 1.0 1 sp|P83478|HBBC_CONCO Hemoglobin cathodic subunit beta OS=Co 1.9e-40 143.3 0.0 2.1e-40 143.2 0.0 1.0 1 sp|Q7LZC2|HBB1_MURHE Hemoglobin subunit beta-1 OS=Muraena h 1.9e-40 143.3 1.8 2.1e-40 143.2 1.8 1.0 1 sp|P23740|HBA_LATCH Hemoglobin subunit alpha OS=Latimeria 1.9e-40 143.3 0.2 2.1e-40 143.2 0.2 1.0 1 sp|P86882|HBA_LYCRE Hemoglobin subunit alpha OS=Lycodes re 2e-40 143.3 0.6 2.2e-40 143.2 0.6 1.0 1 sp|P0C238|HBA_POGSC Hemoglobin subunit alpha OS=Pogonophry 2.4e-40 143.0 0.0 2.7e-40 142.9 0.0 1.0 1 sp|P41331|HBA_MICGA Hemoglobin subunit alpha OS=Microcepha 2.7e-40 142.9 0.2 2.9e-40 142.7 0.2 1.0 1 sp|P83479|HBAC_CONCO Hemoglobin cathodic subunit alpha OS=C 3e-40 142.7 0.0 3.3e-40 142.6 0.0 1.0 1 sp|P11251|HBA_SALSA Hemoglobin subunit alpha OS=Salmo sala 3.1e-40 142.6 0.5 3.5e-40 142.5 0.5 1.0 1 sp|P0C237|HBA_ARTOR Hemoglobin subunit alpha OS=Artedidrac 3.4e-40 142.5 0.1 3.8e-40 142.4 0.1 1.0 1 sp|P83613|HBA2_GOBGI Hemoglobin subunit alpha-2 OS=Gobionot 4.3e-40 142.2 0.1 4.8e-40 142.0 0.1 1.0 1 sp|P84653|HBA1_COTGO Hemoglobin subunit alpha-1 OS=Cottoper 4.4e-40 142.2 0.0 4.8e-40 142.0 0.0 1.0 1 sp|Q9PVM2|HBBA_SERQU Hemoglobin subunit beta-A OS=Seriola q 4.4e-40 142.1 0.0 4.9e-40 142.0 0.0 1.0 1 sp|P85083|HBA2_COTGO Hemoglobin subunit alpha-2 OS=Cottoper 4.5e-40 142.1 0.1 5e-40 142.0 0.1 1.0 1 sp|P14520|HBA_ELEEL Hemoglobin subunit alpha OS=Electropho 4.6e-40 142.1 0.0 5.1e-40 141.9 0.0 1.0 1 sp|P02010|HBA_VIPAS Hemoglobin subunit alpha OS=Vipera asp 5.4e-40 141.9 1.5 5.9e-40 141.7 1.5 1.0 1 sp|P23741|HBB_LATCH Hemoglobin subunit beta OS=Latimeria c 5.6e-40 141.8 0.1 6.2e-40 141.7 0.1 1.0 1 sp|P45719|HBA2_TRENE Hemoglobin subunit alpha-2 OS=Trematom 7e-40 141.5 0.1 7.7e-40 141.4 0.1 1.0 1 sp|P06890|HBAT_PONPY Hemoglobin subunit theta-1 OS=Pongo py 8.5e-40 141.2 0.0 9.4e-40 141.1 0.0 1.0 1 sp|P85081|HBA1_LIPTU Hemoglobin subunit alpha-1 OS=Liparis 8.9e-40 141.2 0.0 9.8e-40 141.0 0.0 1.0 1 sp|Q9PVM1|HBBB_SERQU Hemoglobin subunit beta-B OS=Seriola q 1e-39 141.0 0.1 1.1e-39 140.8 0.1 1.0 1 sp|P80043|HBA_TREBE Hemoglobin subunit alpha OS=Trematomus 1.1e-39 140.9 0.2 1.2e-39 140.8 0.2 1.0 1 sp|P83114|HBB2_TELPE Hemoglobin subunit beta-2 OS=Telmatobi 1.8e-39 140.2 0.8 2e-39 140.0 0.8 1.0 1 sp|P51465|HBAB_LITCT Hemoglobin subunit alpha-B OS=Lithobat 2.6e-39 139.7 0.1 2.8e-39 139.5 0.1 1.0 1 sp|P09105|HBAT_HUMAN Hemoglobin subunit theta-1 OS=Homo sap 2.9e-39 139.5 1.0 3.2e-39 139.4 1.0 1.0 1 sp|P82315|HBAC_HOPLI Hemoglobin cathodic subunit alpha OS=H 3.2e-39 139.3 0.6 3.6e-39 139.2 0.6 1.0 1 sp|P07428|HBA_XENTR Hemoglobin subunit alpha OS=Xenopus tr 3.8e-39 139.1 0.1 4.2e-39 139.0 0.1 1.0 1 sp|P84206|HBBA_GYMUN Hemoglobin anodic subunit beta OS=Gymn 4.3e-39 138.9 4.0 4.8e-39 138.8 4.0 1.0 1 sp|P18981|HBA2_VARAL Hemoglobin subunit alpha-2 OS=Varanus 5.2e-39 138.7 0.1 5.8e-39 138.5 0.1 1.0 1 sp|P10777|HBA1_NOTCO Hemoglobin subunit alpha-1 OS=Notothen 5.4e-39 138.6 0.1 6e-39 138.5 0.1 1.0 1 sp|P14527|HBA4_ONCMY Hemoglobin subunit alpha-4 OS=Oncorhyn 5.5e-39 138.6 0.0 6.1e-39 138.5 0.0 1.0 1 sp|P45718|HBA1_TRENE Hemoglobin subunit alpha-1 OS=Trematom 6.3e-39 138.4 0.1 7e-39 138.3 0.1 1.0 1 sp|P83611|HBA1_GOBGI Hemoglobin subunit alpha-1 OS=Gobionot 9.3e-39 137.9 0.1 1e-38 137.7 0.1 1.0 1 sp|P82990|HBA_PAGBO Hemoglobin subunit alpha OS=Pagothenia 1.3e-38 137.4 1.2 1.4e-38 137.3 1.2 1.0 1 sp|P55267|HBAC_LITCT Hemoglobin subunit alpha-C OS=Lithobat 2.1e-38 136.7 0.1 2.3e-38 136.6 0.1 1.0 1 sp|P83623|HBA_PSEUR Hemoglobin subunit alpha OS=Pseudaphri 2.1e-38 136.7 0.2 2.3e-38 136.6 0.2 1.0 1 sp|P80270|HBA_CHEKU Hemoglobin subunit alpha OS=Chelidonic 2.3e-38 136.6 0.1 2.5e-38 136.4 0.1 1.0 1 sp|P23018|HBB2_CYGMA Hemoglobin subunit beta-2 OS=Cygnodrac 2.7e-38 136.4 0.2 3.1e-38 136.2 0.2 1.0 1 sp|Q8WWM9|CYGB_HUMAN Cytoglobin OS=Homo sapiens GN=CYGB PE= 2.7e-38 136.4 0.0 3e-38 136.2 0.0 1.0 1 sp|P02016|HBA_CYPCA Hemoglobin subunit alpha OS=Cyprinus c 3.2e-38 136.1 0.3 3.5e-38 136.0 0.3 1.0 1 sp|P62363|HBA2_NOTAN Hemoglobin subunit alpha-2 OS=Notothen 3.2e-38 136.1 0.3 3.5e-38 136.0 0.3 1.0 1 sp|P62387|HBA2_NOTCO Hemoglobin subunit alpha-2 OS=Notothen 3.5e-38 136.0 0.1 3.9e-38 135.8 0.1 1.0 1 sp|P23016|HBA_CYGMA Hemoglobin subunit alpha OS=Cygnodraco 3.8e-38 135.9 0.3 4.4e-38 135.7 0.3 1.0 1 sp|P02134|HBB_RANES Hemoglobin subunit beta OS=Rana escule 6.3e-38 135.2 0.0 7e-38 135.0 0.0 1.0 1 sp|P02019|HBA1_ONCMY Hemoglobin subunit alpha-1 OS=Oncorhyn 6.9e-38 135.0 0.0 7.8e-38 134.8 0.0 1.0 1 sp|Q575S8|CYGB2_DANRE Cytoglobin-2 OS=Danio rerio GN=cygb2 P 9.3e-38 134.6 0.1 1e-37 134.5 0.1 1.0 1 sp|P80946|HBBA_ANGAN Hemoglobin anodic subunit beta OS=Angu 1e-37 134.5 0.1 1.1e-37 134.3 0.1 1.0 1 sp|Q9PVM4|HBAA_SERQU Hemoglobin subunit alpha-A OS=Seriola 1e-37 134.4 0.0 1.1e-37 134.3 0.0 1.0 1 sp|Q98TS0|HBB_ONCNE Hemoglobin subunit beta OS=Oncorhynchu 1.1e-37 134.4 0.0 1.2e-37 134.3 0.0 1.0 1 sp|P83624|HBB1_PSEUR Hemoglobin subunit beta-1 OS=Pseudaphr 1.1e-37 134.4 0.0 1.2e-37 134.2 0.0 1.0 1 sp|Q91473|HBB_SALSA Hemoglobin subunit beta OS=Salmo salar 1.6e-37 133.8 0.6 1.8e-37 133.7 0.6 1.0 1 sp|P07430|HBA1_XENBO Hemoglobin subunit alpha-1 OS=Xenopus 1.7e-37 133.8 0.7 1.9e-37 133.6 0.7 1.0 1 sp|P02012|HBA1_XENLA Hemoglobin subunit alpha-1 OS=Xenopus 2e-37 133.5 0.0 2.2e-37 133.4 0.0 1.0 1 sp|P56251|HBB_LEIXA Hemoglobin subunit beta OS=Leiostomus 2.4e-37 133.3 0.1 2.7e-37 133.1 0.1 1.0 1 sp|Q575T0|CYGB1_ORYLA Cytoglobin-1 OS=Oryzias latipes GN=cyg 2.4e-37 133.3 0.3 2.8e-37 133.1 0.3 1.0 1 sp|Q921A4|CYGB_RAT Cytoglobin OS=Rattus norvegicus GN=Cyg 2.5e-37 133.2 0.0 2.7e-37 133.1 0.0 1.0 1 sp|P84609|HBA1_GADMO Hemoglobin subunit alpha-1 OS=Gadus mo 2.6e-37 133.2 0.1 2.9e-37 133.0 0.1 1.0 1 sp|P80726|HBAC_ANGAN Hemoglobin cathodic subunit alpha OS=A 3.4e-37 132.8 0.0 3.7e-37 132.7 0.0 1.0 1 sp|P07433|HBB2_XENBO Hemoglobin subunit beta-2 OS=Xenopus b 4.4e-37 132.4 0.0 4.9e-37 132.3 0.0 1.0 1 sp|P02141|HBB4_ONCMY Hemoglobin subunit beta-4 OS=Oncorhync 5.2e-37 132.2 0.0 5.7e-37 132.0 0.0 1.0 1 sp|Q90486|HBB1_DANRE Hemoglobin subunit beta-1 OS=Danio rer 5.5e-37 132.1 0.0 6.2e-37 131.9 0.0 1.0 1 sp|P56250|HBA_LEIXA Hemoglobin subunit alpha OS=Leiostomus 5.5e-37 132.1 0.1 6e-37 132.0 0.1 1.0 1 sp|P82345|HBB0_PAGBO Hemoglobin subunit beta-0 OS=Pagotheni 7.9e-37 131.6 0.0 8.7e-37 131.5 0.0 1.0 1 sp|Q90485|HBB2_DANRE Hemoglobin subunit beta-2 OS=Danio rer 8.5e-37 131.5 0.0 9.2e-37 131.4 0.0 1.0 1 sp|P84204|HBBC_GYMUN Hemoglobin cathodic subunit beta OS=Gy 9.1e-37 131.4 0.0 9.8e-37 131.3 0.0 1.0 1 sp|P83273|HBB2_ANAMI Hemoglobin subunit beta-2 OS=Anarhicha 1e-36 131.3 0.1 1.1e-36 131.2 0.1 1.0 1 sp|P45721|HBBC_TRENE Hemoglobin subunit beta-C OS=Trematomu 1e-36 131.2 0.0 1.1e-36 131.1 0.0 1.0 1 sp|P02017|HBA_CATCL Hemoglobin subunit alpha OS=Catostomus 1.1e-36 131.2 0.9 1.2e-36 131.0 0.9 1.0 1 sp|P02013|HBA2_XENLA Hemoglobin subunit alpha-2 OS=Xenopus 1.2e-36 131.0 0.1 1.3e-36 130.9 0.1 1.0 1 sp|Q1AGS4|HBA2_ARCGL Hemoglobin subunit alpha-2 OS=Arctogad 1.3e-36 130.9 0.1 1.4e-36 130.8 0.1 1.0 1 sp|O13163|HBB_SILAS Hemoglobin subunit beta OS=Silurus aso 1.4e-36 130.8 0.0 1.5e-36 130.7 0.0 1.0 1 sp|Q8UUR3|CYGB1_DANRE Cytoglobin-1 OS=Danio rerio GN=cygb1 P 1.4e-36 130.8 0.2 1.6e-36 130.6 0.2 1.0 1 sp|Q9CX80|CYGB_MOUSE Cytoglobin OS=Mus musculus GN=Cygb PE= 1.6e-36 130.6 0.1 1.8e-36 130.5 0.1 1.0 1 sp|P84652|HBB_COTGO Hemoglobin subunit beta OS=Cottoperca 1.7e-36 130.5 0.0 1.9e-36 130.4 0.0 1.0 1 sp|P29623|HBA_GYMAC Hemoglobin subunit alpha OS=Gymnodraco 1.7e-36 130.5 0.0 1.9e-36 130.3 0.0 1.0 1 sp|P84205|HBAA_GYMUN Hemoglobin anodic subunit alpha OS=Gym 1.7e-36 130.5 0.0 1.9e-36 130.4 0.0 1.0 1 sp|P0C240|HBB_POGSC Hemoglobin subunit beta OS=Pogonophryn 2.4e-36 130.0 0.2 2.8e-36 129.8 0.2 1.0 1 sp|Q575S9|CYGB2_ORYLA Cytoglobin-2 OS=Oryzias latipes GN=cyg 3.8e-36 129.4 0.0 4.1e-36 129.3 0.0 1.0 1 sp|P11749|HBB_THUTH Hemoglobin subunit beta OS=Thunnus thy 4e-36 129.3 0.0 4.3e-36 129.2 0.0 1.0 1 sp|P80271|HBB_CHEKU Hemoglobin subunit beta OS=Chelidonich 4e-36 129.3 0.1 4.3e-36 129.2 0.1 1.0 1 sp|P45722|HBBC_TREBE Hemoglobin subunit beta-C OS=Trematomu 4.3e-36 129.2 0.0 4.6e-36 129.1 0.0 1.0 1 sp|P83625|HBB2_PSEUR Hemoglobin subunit beta-2 OS=Pseudaphr 4.8e-36 129.1 0.4 5.3e-36 128.9 0.4 1.0 1 sp|P07431|HBA2_XENBO Hemoglobin subunit alpha-2 OS=Xenopus 4.9e-36 129.0 0.1 5.4e-36 128.9 0.1 1.0 1 sp|P29625|HBB_GYMAC Hemoglobin subunit beta OS=Gymnodraco 5.5e-36 128.9 0.0 6e-36 128.7 0.0 1.0 1 sp|P02139|HBB_CYPCA Hemoglobin subunit beta-A/B OS=Cyprinu 5.8e-36 128.8 0.0 6.3e-36 128.7 0.0 1.0 1 sp|P07432|HBB1_XENBO Hemoglobin subunit beta-1 OS=Xenopus b 5.9e-36 128.8 0.0 6.4e-36 128.6 0.0 1.0 1 sp|P02132|HBB1_XENLA Hemoglobin subunit beta-1 OS=Xenopus l 6.1e-36 128.7 0.0 6.7e-36 128.6 0.0 1.0 1 sp|Q7LZC1|HBB3_MURHE Hemoglobin subunit beta-3 OS=Muraena h 6.1e-36 128.7 0.0 6.6e-36 128.6 0.0 1.0 1 sp|O93351|HBB_TREHA Hemoglobin subunit beta OS=Trematomus 7e-36 128.5 0.1 7.8e-36 128.4 0.1 1.0 1 sp|Q9PVM3|HBAB_SERQU Hemoglobin subunit alpha-B OS=Seriola 8e-36 128.3 0.1 8.8e-36 128.2 0.1 1.0 1 sp|Q1AGS8|HBA2_BORSA Hemoglobin subunit alpha-2 OS=Boreogad 8.5e-36 128.2 0.0 9.3e-36 128.1 0.0 1.0 1 sp|P02140|HBB_CARAU Hemoglobin subunit beta OS=Carassius a 8.6e-36 128.2 0.0 9.4e-36 128.1 0.0 1.0 1 sp|O13164|HBB_DECMA Hemoglobin subunit beta OS=Decapterus 9.6e-36 128.1 0.3 1e-35 127.9 0.3 1.0 1 sp|P10785|HBB1_TRICR Hemoglobin subunit beta-1 OS=Triturus 1.1e-35 127.8 0.8 1.3e-35 127.7 0.8 1.0 1 sp|P10783|HBA1_TRICR Hemoglobin subunit alpha-1 OS=Triturus 1.5e-35 127.4 0.1 1.7e-35 127.3 0.1 1.0 1 sp|P02138|HBB_LEPPA Hemoglobin subunit beta OS=Lepidosiren 1.8e-35 127.2 0.0 2e-35 127.1 0.0 1.0 1 sp|P84610|HBB1_GADMO Hemoglobin subunit beta-1 OS=Gadus mor 1.9e-35 127.1 0.0 2.1e-35 127.0 0.0 1.0 1 sp|O93348|HBB1_PAGBO Hemoglobin subunit beta-1 OS=Pagotheni 2.2e-35 126.9 1.1 2.4e-35 126.8 1.1 1.0 1 sp|P06639|HBA1_PLEWA Hemoglobin subunit alpha-1 OS=Pleurode 2.3e-35 126.8 0.0 2.5e-35 126.7 0.0 1.0 1 sp|P83272|HBB1_ANAMI Hemoglobin subunit beta-1 OS=Anarhicha 2.9e-35 126.5 0.0 3.2e-35 126.4 0.0 1.0 1 sp|Q1AGS7|HBB1_BORSA Hemoglobin subunit beta-1 OS=Boreogadu 3.1e-35 126.4 0.1 3.5e-35 126.3 0.1 1.0 1 sp|P02206|MYG_HETPO Myoglobin OS=Heterodontus portusjackso 3.3e-35 126.3 0.1 3.6e-35 126.2 0.1 1.0 1 sp|Q1AGS5|HBA1_ARCGL Hemoglobin subunit alpha-1 OS=Arctogad 3.3e-35 126.3 0.0 3.6e-35 126.2 0.0 1.0 1 sp|P0C239|HBB_ARTOR Hemoglobin subunit beta OS=Artedidraco 3.5e-35 126.2 0.1 3.9e-35 126.1 0.1 1.0 1 sp|P80044|HBB_TREBE Hemoglobin subunit beta OS=Trematomus 4.6e-35 125.9 0.0 5e-35 125.7 0.0 1.0 1 sp|Q6Y239|HBB_PAGMA Hemoglobin subunit beta OS=Pagrus majo 4.7e-35 125.8 0.0 5.2e-35 125.7 0.0 1.0 1 sp|P85082|HBB1_LIPTU Hemoglobin subunit beta-1 OS=Liparis t 5.2e-35 125.7 0.1 5.7e-35 125.6 0.1 1.0 1 sp|P23017|HBB1_CYGMA Hemoglobin subunit beta-1 OS=Cygnodrac 6.9e-35 125.3 0.0 7.4e-35 125.2 0.0 1.0 1 sp|P45720|HBB_TRENE Hemoglobin subunit beta-1/2 OS=Tremato 9.5e-35 124.8 0.1 1e-34 124.7 0.1 1.0 1 sp|P83612|HBB1_GOBGI Hemoglobin subunit beta-1 OS=Gobionoto 9.5e-35 124.8 0.0 1e-34 124.7 0.0 1.0 1 sp|P83614|HBB2_GOBGI Hemoglobin subunit beta-2 OS=Gobionoto 9.9e-35 124.8 0.1 1.1e-34 124.7 0.1 1.0 1 sp|P29628|HBB_NOTAN Hemoglobin subunit beta OS=Notothenia 1.1e-34 124.6 1.3 1.3e-34 124.4 1.3 1.0 1 sp|P02014|HBA_TARGR Hemoglobin subunit alpha OS=Taricha gr 1.4e-34 124.3 2.2 1.5e-34 124.2 2.2 1.0 1 sp|P10784|HBA2_TRICR Hemoglobin subunit alpha-2 OS=Triturus 1.4e-34 124.3 0.0 1.5e-34 124.2 0.0 1.0 1 sp|P07429|HBB1_XENTR Hemoglobin subunit beta-1 OS=Xenopus t 2.4e-34 123.5 0.0 2.7e-34 123.4 0.0 1.0 1 sp|P80945|HBAA_ANGAN Hemoglobin anodic subunit alpha OS=Ang 2.5e-34 123.5 0.0 2.8e-34 123.3 0.0 1.0 1 sp|O93349|HBB2_TRENE Hemoglobin subunit beta OS=Trematomus 3.3e-34 123.1 0.0 3.4e-34 123.0 0.0 1.0 1 sp|P86879|HBB1_LYCRE Hemoglobin subunit beta-1 OS=Lycodes r 3.9e-34 122.9 1.0 4.3e-34 122.7 1.0 1.0 1 sp|P20244|HBA1_TORMA Hemoglobin subunit alpha-1 OS=Torpedo 3.9e-34 122.8 0.0 4.2e-34 122.7 0.0 1.0 1 sp|P16309|HBB_NOTCO Hemoglobin subunit beta OS=Notothenia 5e-34 122.5 0.1 5.6e-34 122.3 0.1 1.0 1 sp|Q1AGS9|HBA1_BORSA Hemoglobin subunit alpha-1 OS=Boreogad 6.3e-34 122.2 0.1 6.8e-34 122.1 0.1 1.0 1 sp|P06714|HBAT_HORSE Hemoglobin subunit theta-1 OS=Equus ca 7.5e-34 121.9 0.3 8.5e-34 121.8 0.3 1.0 1 sp|Q6B0K9|HBM_HUMAN Hemoglobin subunit mu OS=Homo sapiens 7.9e-34 121.8 0.0 8.8e-34 121.7 0.0 1.0 1 sp|P14521|HBB_ELEEL Hemoglobin subunit beta OS=Electrophor 1e-33 121.5 0.0 1.1e-33 121.4 0.0 1.0 1 sp|P02020|HBA_LEPPA Hemoglobin subunit alpha OS=Lepidosire 1.1e-33 121.5 0.4 1.2e-33 121.3 0.4 1.0 1 sp|P14399|MYG_MUSAN Myoglobin OS=Mustelus antarcticus GN=m 1.2e-33 121.2 0.0 1.3e-33 121.1 0.0 1.0 1 sp|P84604|HBB2_ARCGL Hemoglobin subunit beta-2 OS=Arctogadu 1.4e-33 121.0 0.3 1.6e-33 120.9 0.3 1.0 1 sp|P29627|HBBZ_MESAU Hemoglobin subunit beta-Z (Fragment) O 1.7e-33 120.7 1.0 1.9e-33 120.6 1.0 1.0 1 sp|P56691|HBA_DASAK Hemoglobin subunit alpha OS=Dasyatis a 3.6e-33 119.7 0.0 4e-33 119.6 0.0 1.0 1 sp|P84611|HBB2_GADMO Hemoglobin subunit beta-2 OS=Gadus mor 3.8e-33 119.6 0.2 4.2e-33 119.5 0.2 1.0 1 sp|P68189|MYG_THUTH Myoglobin OS=Thunnus thynnus GN=mb PE= 3.8e-33 119.6 0.2 4.2e-33 119.5 0.2 1.0 1 sp|P68190|MYG_THUOR Myoglobin OS=Thunnus orientalis GN=mb 3.8e-33 119.6 0.2 4.2e-33 119.5 0.2 1.0 1 sp|Q76G09|MYG_THUOB Myoglobin OS=Thunnus obesus GN=mb PE=2 4.3e-33 119.5 0.2 4.7e-33 119.3 0.2 1.0 1 sp|P07408|HBA_SQUAC Hemoglobin subunit alpha OS=Squalus ac 4.3e-33 119.5 0.0 4.7e-33 119.3 0.0 1.0 1 sp|Q1AGS6|HBB2_BORSA Hemoglobin subunit beta-2 OS=Boreogadu 4.8e-33 119.3 0.1 5.4e-33 119.2 0.1 1.0 1 sp|O42425|HBA2_GADMO Hemoglobin subunit alpha-2 OS=Gadus mo 5.8e-33 119.0 0.2 6.4e-33 118.9 0.2 1.0 1 sp|P02205|MYG_THUAL Myoglobin OS=Thunnus albacares GN=mb P 6.6e-33 118.9 0.1 7.3e-33 118.7 0.1 1.0 1 sp|P83113|HBA2_TELPE Hemoglobin subunit alpha-2 (Fragment) 7.1e-33 118.8 0.6 7.8e-33 118.6 0.6 1.0 1 sp|Q9DGJ0|MYG_SARCH Myoglobin OS=Sarda chiliensis GN=mb PE 8e-33 118.6 0.4 8.9e-33 118.4 0.4 1.0 1 sp|P02015|HBA_AMBME Hemoglobin subunit alpha OS=Ambystoma 1.1e-32 118.2 0.0 1.1e-32 118.1 0.0 1.0 1 sp|P86887|HBB2_LYCRE Hemoglobin subunit beta-2 OS=Lycodes r 1.9e-32 117.4 0.0 2.1e-32 117.2 0.0 1.0 1 sp|O13078|HBB_MERMR Hemoglobin subunit beta OS=Merlangius 3.5e-32 116.5 0.0 3.8e-32 116.4 0.0 1.0 1 sp|Q1AGS3|HBB1_ARCGL Hemoglobin subunit beta-1 (Fragment) O 5.4e-32 115.9 0.0 6e-32 115.8 0.0 1.0 1 sp|P16417|HBAD_LIOMI Hemoglobin subunit alpha-D OS=Liophis 5.6e-32 115.9 1.1 6.2e-32 115.7 1.1 1.0 1 sp|P20245|HBA2_TORMA Hemoglobin subunit alpha-2 OS=Torpedo 5.7e-32 115.8 0.0 6.2e-32 115.7 0.0 1.0 1 sp|P10786|HBB2_TRICR Hemoglobin subunit beta-2 OS=Triturus 9.1e-32 115.2 0.3 1e-31 115.0 0.3 1.0 1 sp|P14397|MYG_GALGA Myoglobin OS=Galeorhinus galeus GN=mb 1e-31 115.0 0.0 1.2e-31 114.8 0.0 1.1 1 sp|A1A4Q3|HBM_BOVIN Hemoglobin subunit mu OS=Bos taurus GN 1e-31 115.0 1.6 1.1e-31 114.9 1.6 1.0 1 sp|Q9DGJ1|MYG_MAKNI Myoglobin OS=Makaira nigricans GN=mb P 1.1e-31 115.0 0.0 1.2e-31 114.8 0.0 1.0 1 sp|P02135|HBB_LITCT Hemoglobin subunit beta OS=Lithobates 1.2e-31 114.8 0.1 1.3e-31 114.6 0.1 1.0 1 sp|Q701N9|MYG_TETNG Myoglobin OS=Tetraodon nigroviridis GN 1.5e-31 114.4 0.2 1.7e-31 114.3 0.2 1.0 1 sp|Q6I7B0|MYG_AUXRO Myoglobin OS=Auxis rochei GN=mb PE=2 S 1.6e-31 114.4 0.2 1.8e-31 114.2 0.2 1.0 1 sp|P14398|MYG_GALJA Myoglobin OS=Galeorhinus japonicus GN= 1.8e-31 114.2 2.5 2e-31 114.0 2.5 1.0 1 sp|P84216|HBA_BATEA Hemoglobin subunit alpha OS=Bathyraja 1.9e-31 114.1 0.0 2e-31 114.0 0.0 1.0 1 sp|O09232|HBB_MELAE Hemoglobin subunit beta OS=Melanogramm 1.9e-31 114.1 0.0 2.1e-31 114.0 0.0 1.0 1 sp|P18991|HBB1_UROHA Hemoglobin subunit beta-1 (Fragments) 2.9e-31 113.5 0.1 3.2e-31 113.4 0.1 1.0 1 sp|Q9DGJ2|MYG_THUAA Myoglobin OS=Thunnus alalunga GN=mb PE 4.8e-31 112.8 0.6 5.3e-31 112.7 0.6 1.0 1 sp|Q9DGI8|MYG_KATPE Myoglobin OS=Katsuwonus pelamis GN=mb 7.8e-31 112.1 0.1 8.5e-31 112.0 0.1 1.0 1 sp|P02204|MYG_CYPCA Myoglobin OS=Cyprinus carpio GN=mb PE= 1.1e-30 111.6 0.0 1.3e-30 111.5 0.0 1.0 1 sp|P0C0U7|HBAD_DRYCE Hemoglobin subunit alpha-D OS=Drymarch 2.2e-30 110.7 0.1 2.4e-30 110.5 0.1 1.0 1 sp|Q9DEN9|MYG_GOBGI Myoglobin OS=Gobionotothen gibberifron 4.8e-30 109.6 0.0 5.2e-30 109.5 0.0 1.0 1 sp|Q6VN46|MYG_DANRE Myoglobin OS=Danio rerio GN=mb PE=2 SV 8.3e-30 108.8 0.1 9.1e-30 108.7 0.1 1.0 1 sp|Q9DEN8|MYG_NOTCO Myoglobin OS=Notothenia coriiceps negl 1e-29 108.5 0.1 1.1e-29 108.4 0.1 1.0 1 sp|Q7T044|MYG_CHARH Myoglobin OS=Channichthys rhinoceratus 1.3e-29 108.1 0.4 1.5e-29 108.0 0.4 1.0 1 sp|P06640|HBA2_PLEWA Hemoglobin subunit alpha-2 (Fragment) 1.8e-29 107.8 4.5 1.9e-29 107.6 4.5 1.0 1 sp|P07409|HBB_SQUAC Hemoglobin subunit beta OS=Squalus aca 1.8e-29 107.7 0.1 1.9e-29 107.6 0.1 1.0 1 sp|Q9DEP1|MYG_PSEGE Myoglobin OS=Pseudochaenichthys georgi 2e-29 107.5 0.2 2.3e-29 107.4 0.2 1.0 1 sp|Q9DGI9|MYG_SCOJP Myoglobin OS=Scomber japonicus GN=mb P 2.2e-29 107.5 0.1 2.4e-29 107.3 0.1 1.0 1 sp|P87497|MYG_CHIRA Myoglobin OS=Chionodraco rastrospinosu 5e-29 106.3 0.1 5.5e-29 106.1 0.1 1.0 1 sp|Q9DEP0|MYG_CRYAN Myoglobin OS=Cryodraco antarcticus GN= 5.2e-29 106.2 0.2 5.7e-29 106.1 0.2 1.0 1 sp|Q9YGW2|HBA_MUSGR Hemoglobin subunit alpha OS=Mustelus g 1e-28 105.2 2.3 1.2e-28 105.0 2.3 1.0 1 sp|P02021|HBA_HETPO Hemoglobin subunit alpha OS=Heterodont 1.5e-28 104.7 0.0 1.6e-28 104.6 0.0 1.0 1 sp|O13077|HBB_GADMO Hemoglobin subunit beta OS=Gadus morhu 8.8e-28 102.2 0.4 9.7e-28 102.1 0.4 1.0 1 sp|P07420|HBB_DASVI Hemoglobin subunit beta (Fragment) OS= 1e-26 98.8 1.7 1.1e-26 98.6 1.7 1.0 1 sp|P02143|HBB_HETPO Hemoglobin subunit beta OS=Heterodontu 9.9e-26 95.6 0.1 1.1e-25 95.4 0.1 1.0 1 sp|P02022|HBAM_LITCT Hemoglobin heart muscle subunit alpha- 1.2e-24 92.0 3.9 1.4e-24 91.9 3.9 1.0 1 sp|P20247|HBB2_TORMA Hemoglobin subunit beta-2 OS=Torpedo m 1.3e-24 91.9 2.6 1.5e-24 91.8 2.6 1.0 1 sp|P20246|HBB1_TORMA Hemoglobin subunit beta-1 OS=Torpedo m 1.4e-24 91.8 0.4 1.7e-24 91.6 0.4 1.1 1 sp|Q7M3C1|MYG_AILME Myoglobin (Fragment) OS=Ailuropoda mel 2.2e-24 91.2 0.1 2.9e-24 90.8 0.1 1.2 1 sp|Q7SID0|GLBF1_EPTBU Globin-F1 OS=Eptatretus burgeri PE=1 S 1.1e-23 88.9 1.4 1.3e-23 88.7 1.4 1.0 1 sp|P56692|HBB_DASAK Hemoglobin subunit beta OS=Dasyatis ak 1.6e-23 88.4 0.0 2e-23 88.1 0.0 1.0 1 sp|P09106|HBAT_PAPAN Hemoglobin subunit theta-1 OS=Papio an 3.6e-23 87.3 0.4 4.8e-23 86.9 0.4 1.2 1 sp|P02209|GLB3_MYXGL Globin-3 OS=Myxine glutinosa PE=1 SV=2 4.1e-23 87.1 0.9 1.1e-22 85.6 0.9 1.6 1 sp|Q9YGW1|HBB_MUSGR Hemoglobin subunit beta OS=Mustelus gr 1.1e-21 82.5 0.2 1.2e-21 82.3 0.2 1.0 1 sp|P80017|GLBD_CAUAR Globin D, coelomic OS=Caudina arenicol 6.8e-21 79.9 0.2 7.5e-21 79.7 0.2 1.0 1 sp|P18979|HBA1_UROHA Hemoglobin subunit alpha-1 (Fragment) 1.3e-20 79.0 0.8 1.4e-20 78.9 0.8 1.0 1 sp|P84217|HBB_BATEA Hemoglobin subunit beta OS=Bathyraja e 2e-20 78.3 0.0 2.3e-20 78.2 0.0 1.0 1 sp|P0C227|GLB_NERAL Globin OS=Nerita albicilla PE=1 SV=1 6.4e-17 67.0 0.4 7.7e-17 66.7 0.4 1.0 1 sp|P15161|GLB1_PARCH Globin-1 OS=Paracaudina chilensis PE=1 8.2e-17 66.6 0.8 9.9e-17 66.4 0.8 1.0 1 sp|P80018|GLBC_CAUAR Globin C, coelomic OS=Caudina arenicol 1.4e-15 62.6 0.0 1.5e-15 62.5 0.0 1.0 1 sp|P09965|GLB_DOLAU Globin OS=Dolabella auricularia PE=1 S 1.5e-14 59.3 0.0 1.8e-14 59.1 0.0 1.1 1 sp|P02211|GLB_APLKU Globin OS=Aplysia kurodai PE=1 SV=4 2.7e-13 55.2 0.0 3.3e-13 54.9 0.0 1.1 1 sp|P14393|GLB_APLJU Globin OS=Aplysia juliana PE=1 SV=1 3e-13 55.1 0.0 3.4e-13 54.9 0.0 1.1 1 sp|P29287|GLB_BURLE Globin OS=Bursatella leachii PE=1 SV=1 4.8e-13 54.4 0.1 5.5e-13 54.2 0.1 1.1 1 sp|P02210|GLB_APLLI Globin OS=Aplysia limacina PE=1 SV=4 1.4e-12 52.9 0.2 1.5e-12 52.8 0.2 1.0 1 sp|Q9TT33|HBB_COLGU Hemoglobin subunit beta (Fragment) OS= 1.8e-12 52.5 0.0 1.9e-12 52.5 0.0 1.0 1 sp|P81041|HBO_MACEU Hemoglobin subunit omega (Fragment) OS 3.1e-12 51.8 0.0 3.5e-12 51.6 0.0 1.0 1 sp|P14821|GLB2A_ANAIN Globin-2 A chain OS=Anadara inaequival 1.5e-11 49.6 0.0 1.7e-11 49.4 0.0 1.0 1 sp|Q8T7J9|GLB_YOLEI Globin OS=Yoldia eightsi PE=1 SV=1 6.2e-11 47.6 0.0 7.2e-11 47.4 0.0 1.0 1 sp|Q7M416|GLB1_LIOJA Globin-1 OS=Liolophura japonica PE=1 S 8.1e-11 47.2 0.0 1.3e-10 46.5 0.0 1.5 1 sp|P19363|GLB1_ARTSX Extracellular globin-E1 (Fragment) OS= 1.4e-10 46.4 0.0 1.6e-10 46.2 0.0 1.0 1 sp|P02215|GLB_CERRH Globin OS=Cerithidea rhizophorarum PE= 2.1e-10 45.8 1.5 2.5e-10 45.6 1.5 1.0 1 sp|Q7M424|GLB_BUCUU Globin OS=Buccinum undatum PE=1 SV=1 2.7e-10 45.5 0.3 2.8e-10 45.4 0.3 1.0 1 sp|Q9TT34|HBB_PONPY Hemoglobin subunit beta (Fragment) OS= 3.1e-10 45.3 0.1 3.4e-10 45.2 0.1 1.0 1 sp|O77003|GLB_BIOGL Globin OS=Biomphalaria glabrata PE=3 S 7.8e-10 44.0 0.0 8.7e-10 43.8 0.0 1.0 1 sp|P14822|GLB2B_ANAIN Globin-2 B chain OS=Anadara inaequival 9.4e-10 43.7 4.5 4e-06 31.9 4.3 2.3 1 sp|P81044|HBAZ_MACEU Hemoglobin subunit zeta (Fragments) OS 1.3e-09 43.3 0.0 1.4e-09 43.1 0.0 1.0 1 sp|P59742|NGB1_ONCMY Neuroglobin-1 OS=Oncorhynchus mykiss G 1.3e-09 43.2 0.0 1.5e-09 43.0 0.0 1.1 1 sp|P23216|GLBP1_GLYDI Globin, major polymeric component P1 O 1.4e-09 43.1 0.0 1.6e-09 43.0 0.0 1.1 1 sp|P21659|GLBP2_GLYDI Globin, polymeric component P2 OS=Glyc 2e-09 42.7 0.0 2.3e-09 42.4 0.0 1.1 1 sp|P02222|GLB2_CHITH Globin CTT-II beta OS=Chironomus thumm 2.9e-09 42.2 1.1 3.3e-09 42.0 1.1 1.0 1 sp|Q941Q2|HBL2_BRANA Non-symbiotic hemoglobin 2 OS=Brassica 3.1e-09 42.0 0.0 3.6e-09 41.8 0.0 1.0 1 sp|Q90W04|NGB_TETNG Neuroglobin OS=Tetraodon nigroviridis 3.5e-09 41.9 0.0 4e-09 41.7 0.0 1.1 1 sp|P14395|GLB1A_ANATR Globin-1 subunit alpha OS=Anadara trap 4.8e-09 41.4 0.0 5.8e-09 41.2 0.0 1.0 1 sp|P41261|GLB2_PHAPT Hemoglobin-2 OS=Phacoides pectinatus P 4.9e-09 41.4 0.3 7.3e-09 40.8 0.3 1.3 1 sp|P29243|GLBV_CHITP Globin CTT-V OS=Chironomus thummi pige 5.5e-09 41.2 0.0 6.3e-09 41.0 0.0 1.1 1 sp|P21660|GLBP3_GLYDI Globin, polymeric component P3 OS=Glyc 5.5e-09 41.2 0.1 9.7e-09 40.4 0.1 1.4 1 sp|P02216|GLB1_GLYDI Globin, major monomeric component OS=G 7.3e-09 40.8 0.1 8.3e-09 40.7 0.1 1.0 1 sp|P02213|GLB1_ANAIN Globin-1 OS=Anadara inaequivalvis PE=1 9.6e-09 40.5 0.0 1.1e-08 40.3 0.0 1.0 1 sp|P59743|NGB2_ONCMY Neuroglobin-2 OS=Oncorhynchus mykiss G 1.1e-08 40.2 0.4 2.3e-08 39.2 0.1 1.6 1 sp|Q23761|GLBZ_CHITH Globin CTT-Z OS=Chironomus thummi thum 1.4e-08 39.9 0.2 1.6e-08 39.7 0.2 1.0 1 sp|P31331|GLB_NASMU Globin OS=Nassarius mutabilis PE=1 SV= 1.6e-08 39.7 0.2 1.8e-08 39.6 0.2 1.0 1 sp|P02212|GLB1_ANABR Globin-1 OS=Anadara broughtonii PE=1 S 1.6e-08 39.7 0.3 3e-08 38.8 0.1 1.5 1 sp|P29245|GLBZ_CHITP Globin CTT-Z OS=Chironomus thummi pige 2.6e-08 39.1 0.0 3.1e-08 38.8 0.0 1.0 1 sp|P86881|NGB_DISMA Neuroglobin OS=Dissostichus mawsoni PE 2.7e-08 39.0 0.0 3.3e-08 38.7 0.0 1.0 1 sp|P86880|NGB_CHAAC Neuroglobin OS=Chaenocephalus aceratus 2.8e-08 38.9 0.2 3.2e-08 38.7 0.2 1.0 1 sp|P02214|GLB_BUSCA Globin OS=Busycotypus canaliculatus PE 3e-08 38.8 0.7 4.1e-08 38.4 0.5 1.3 1 sp|Q23763|GLB78_CHITH Globin CTT-VIIB-8 OS=Chironomus thummi 3.2e-08 38.7 0.6 4.2e-08 38.4 0.6 1.0 1 sp|P23244|HBP2_CASGL Hemoglobin-2 OS=Casuarina glauca GN=HB 3.3e-08 38.7 0.0 3.9e-08 38.5 0.0 1.0 1 sp|Q90YJ2|NGB_DANRE Neuroglobin OS=Danio rerio GN=ngb PE=1 3.5e-08 38.6 0.8 4.6e-08 38.2 0.5 1.3 1 sp|P12548|GLB73_CHITH Globin CTT-VIIB-3 OS=Chironomus thummi 3.6e-08 38.6 0.1 4e-08 38.4 0.1 1.0 1 sp|P04251|GLB1B_ANATR Globin-1 subunit beta OS=Anadara trape 4.2e-08 38.4 0.0 6.2e-08 37.8 0.0 1.3 1 sp|P02226|GLB7A_CHITH Globin CTT-VIIA OS=Chironomus thummi t 4.7e-08 38.2 0.9 6.1e-08 37.9 0.5 1.3 1 sp|P18966|GLB78_CHITP Globin CTT-VIIB-8 OS=Chironomus thummi 5.7e-08 37.9 0.1 6.7e-08 37.7 0.1 1.0 1 sp|Q42831|HBL_HORVU Non-symbiotic hemoglobin OS=Hordeum vu 7.4e-08 37.6 1.1 9.2e-08 37.3 0.6 1.3 1 sp|P84296|GLB74_CHITH Globin CTT-VIIB-4 OS=Chironomus thummi 7.4e-08 37.6 1.1 9.2e-08 37.3 0.6 1.3 1 sp|P84297|GLB74_CHITP Globin CTT-VIIB-4 OS=Chironomus thummi 9.6e-08 37.2 0.0 1.1e-07 37.1 0.0 1.0 1 sp|P25165|GLBM_ANATR Globin, minor OS=Anadara trapezia PE=3 9.9e-08 37.2 0.2 1.1e-07 37.0 0.2 1.0 1 sp|O24521|HBL2_ARATH Non-symbiotic hemoglobin 2 OS=Arabidop 1.1e-07 37.1 0.4 1.3e-07 36.8 0.4 1.1 1 sp|P02224|GLB6_CHITH Globin CTT-VI OS=Chironomus thummi thu 1.2e-07 36.9 0.5 1.5e-07 36.6 0.5 1.1 1 sp|O24520|HBL1_ARATH Non-symbiotic hemoglobin 1 OS=Arabidop 1.4e-07 36.7 0.2 1.6e-07 36.5 0.2 1.0 1 sp|P14394|GLB2_ANATR Globin-2B OS=Anadara trapezia PE=1 SV= 1.4e-07 36.7 0.1 1.7e-07 36.4 0.1 1.1 1 sp|Q9M630|HBL0_PHYPA Non-symbiotic hemoglobin 0 OS=Physcomi 1.6e-07 36.4 0.9 2.4e-07 35.9 0.9 1.2 1 sp|P29242|GLB77_CHITP Globin CTT-VIIB-7 OS=Chironomus thummi 1.9e-07 36.3 0.1 2.2e-07 36.1 0.1 1.0 1 sp|P02227|GLB8_CHITH Globin CTT-VIII OS=Chironomus thummi t 2e-07 36.2 1.3 2.3e-07 36.0 0.8 1.3 1 sp|P12549|GLB76_CHITH Globin CTT-VIIB-6 OS=Chironomus thummi 2e-07 36.2 0.0 2.2e-07 36.0 0.0 1.0 1 sp|Q99JA8|NGB_RAT Neuroglobin OS=Rattus norvegicus GN=Ng 2.1e-07 36.1 1.2 2.5e-07 35.9 0.7 1.3 1 sp|Q23762|GLB7X_CHITH Globin CTT-VIIB-10 OS=Chironomus thumm 2.1e-07 36.1 0.0 2.6e-07 35.8 0.0 1.1 1 sp|P13579|GLB4_LUMTE Extracellular globin-4 OS=Lumbricus te 2.4e-07 35.9 0.2 0.046 18.8 0.0 2.4 2 sp|P28316|GLB_ASCSU Extracellular globin OS=Ascaris suum P 2.9e-07 35.7 0.0 3.3e-07 35.5 0.0 1.1 1 sp|P19364|GLB7_ARTSX Extracellular globin-E7 OS=Artemia sp. 3.6e-07 35.4 1.0 5.3e-07 34.8 1.0 1.2 1 sp|P12550|GLB77_CHITH Globin CTT-VIIB-7 OS=Chironomus thummi 3.7e-07 35.3 1.5 4e-07 35.2 0.9 1.3 1 sp|P84298|GLB75_CHITH Globin CTT-VIIB-5/CTT-VIIB-9 OS=Chiron 3.7e-07 35.3 1.5 4e-07 35.2 0.9 1.3 1 sp|P84299|GLB75_CHITP Globin CTT-VIIB-5/CTT-VIIB-9 OS=Chiron 4.3e-07 35.1 0.7 6e-07 34.6 0.7 1.3 1 sp|P02228|GLB10_CHITH Globin CTT-X OS=Chironomus thummi thum 4.4e-07 35.0 0.0 5.5e-07 34.8 0.0 1.0 1 sp|Q6WZ20|NGB_MACMU Neuroglobin OS=Macaca mulatta GN=NGB P 4.5e-07 35.0 0.0 5.5e-07 34.8 0.0 1.0 1 sp|Q3KN66|NGB_PANTR Neuroglobin OS=Pan troglodytes GN=NGB 4.5e-07 35.0 0.0 5.5e-07 34.8 0.0 1.0 1 sp|Q9NPG2|NGB_HUMAN Neuroglobin OS=Homo sapiens GN=NGB PE= 4.5e-07 35.0 0.0 5.5e-07 34.8 0.0 1.0 1 sp|Q6WZ18|NGB_CANFA Neuroglobin OS=Canis familiaris GN=NGB 4.6e-07 35.0 0.7 5.4e-07 34.8 0.7 1.1 1 sp|O04985|HBL2_ORYSJ Non-symbiotic hemoglobin 2 OS=Oryza sa 5.7e-07 34.7 1.2 7e-07 34.4 1.2 1.0 1 sp|Q9FVL0|HBL1_MEDSA Non-symbiotic hemoglobin 1 OS=Medicago 5.9e-07 34.6 0.0 6.6e-07 34.5 0.0 1.0 1 sp|Q9ER97|NGB_MOUSE Neuroglobin OS=Mus musculus GN=Ngb PE= 6.1e-07 34.6 0.7 7.2e-07 34.4 0.7 1.0 1 sp|P68168|HBPL_PARAD Non-legume hemoglobin OS=Parasponia an 6.1e-07 34.6 0.7 7.2e-07 34.4 0.7 1.0 1 sp|P68169|HBPL_PARRI Non-legume hemoglobin OS=Parasponia ri 6.3e-07 34.6 0.0 7.2e-07 34.4 0.0 1.0 1 sp|Q6WZ17|NGB_PIG Neuroglobin OS=Sus scrofa GN=NGB PE=2 6.3e-07 34.6 1.3 8e-07 34.2 1.3 1.1 1 sp|O04986|HBL1_ORYSJ Non-symbiotic hemoglobin 1 OS=Oryza sa 1e-06 33.9 0.0 1.2e-06 33.6 0.0 1.0 1 sp|Q6WZ19|NGB_BOVIN Neuroglobin OS=Bos taurus GN=NGB PE=2 1e-06 33.9 0.0 1.2e-06 33.7 0.0 1.0 1 sp|Q6EV97|NGB_RABIT Neuroglobin OS=Oryctolagus cuniculus G 1.1e-06 33.8 0.8 1.4e-06 33.4 0.8 1.1 1 sp|Q9M593|HBL_ZEAMP Non-symbiotic hemoglobin OS=Zea mays s 1.2e-06 33.7 0.0 1.4e-06 33.5 0.0 1.1 1 sp|P13578|GLB3_TYLHE Extracellular globin-2B OS=Tylorrhynch 1.8e-06 33.1 0.1 2.5e-06 32.6 0.1 1.3 1 sp|P02223|GLB9_CHITH Globin CTT-IX OS=Chironomus thummi thu 2.1e-06 32.8 0.1 2.4e-06 32.6 0.1 1.0 1 sp|P28010|LGB4_MEDSA Leghemoglobin OS=Medicago sativa GN=LB 2.3e-06 32.7 0.7 3e-06 32.4 0.7 1.1 1 sp|Q9FY42|HBL_MAIZE Non-symbiotic hemoglobin OS=Zea mays G 2.6e-06 32.5 0.2 5.9e-06 31.4 0.2 1.5 1 sp|P15447|GLB4_GLYDI Globin, monomeric component M-IV OS=Gl 3.8e-06 32.0 0.0 4.7e-06 31.7 0.0 1.1 1 sp|P11582|GLBE_CHITH Globin CTT-E/E' OS=Chironomus thummi t 5e-06 31.6 0.1 7.2e-06 31.1 0.1 1.2 1 sp|P18968|GLBY_CHITP Globin CTT-Y OS=Chironomus thummi pige 6.4e-06 31.3 0.1 7.6e-06 31.1 0.1 1.1 1 sp|P02230|GLB4_CHITH Globin CTT-IV OS=Chironomus thummi thu 7.9e-06 31.0 1.4 9.2e-06 30.8 1.4 1.0 1 sp|P02240|LGB2_LUPLU Leghemoglobin-2 OS=Lupinus luteus PE=1 1.1e-05 30.6 0.1 1.2e-05 30.4 0.1 1.0 1 sp|O48668|LGB2_PEA Leghemoglobin Lb5-10 OS=Pisum sativum 1.1e-05 30.5 0.3 1.3e-05 30.3 0.3 1.1 1 sp|Q94FT7|HBL4_ORYSJ Non-symbiotic hemoglobin 4 OS=Oryza sa 1.2e-05 30.4 0.7 1.5e-05 30.1 0.7 1.1 1 sp|Q94FT8|HBL3_ORYSJ Non-symbiotic hemoglobin 3 OS=Oryza sa 1.2e-05 30.4 0.7 1.5e-05 30.1 0.7 1.0 1 sp|P09187|LGB1_MEDSA Leghemoglobin-1 OS=Medicago sativa PE= 1.2e-05 30.3 0.3 1.3e-05 30.3 0.3 1.1 1 sp|Q9SAZ0|LGB6_PEA Leghemoglobin Lb120-34 OS=Pisum sativu 1.5e-05 30.1 0.2 1.8e-05 29.9 0.2 1.1 1 sp|P14962|LGB3_MEDSA Leghemoglobin-3 OS=Medicago sativa PE= 1.5e-05 30.1 0.3 1.6e-05 30.0 0.3 1.1 1 sp|O80405|LGB3_PEA Leghemoglobin Lb120-1 OS=Pisum sativum 1.9e-05 29.8 0.0 2.3e-05 29.5 0.0 1.2 1 sp|Q7M419|GLBA1_OLIMA Extracellular giant hemoglobin major g 1.9e-05 29.8 0.0 2.2e-05 29.5 0.0 1.1 1 sp|P15469|GLB3_LAMSP Giant hemoglobin AIII chain OS=Lamelli 2.1e-05 29.6 0.1 3e-05 29.1 0.1 1.3 1 sp|P02221|GLB1_CHITH Globin CTT-I/CTT-IA OS=Chironomus thum 2.3e-05 29.5 0.2 2.5e-05 29.4 0.2 1.1 1 sp|Q9SAZ1|LGB4_PEA Leghemoglobin Lb120-8 OS=Pisum sativum 2.9e-05 29.2 0.3 5.2e-05 28.3 0.3 1.6 1 sp|Q23760|GLBW_CHITH Globin CTT-W OS=Chironomus thummi thum 3e-05 29.1 0.4 5.3e-05 28.3 0.4 1.6 1 sp|P29244|GLBW_CHITP Globin CTT-W OS=Chironomus thummi pige 3.2e-05 29.0 0.0 3.2e-05 29.0 0.0 1.0 1 sp|P18980|HBA2_UROHA Hemoglobin subunit alpha-2 (Fragment) 4.4e-05 28.6 0.4 5.5e-05 28.3 0.4 1.1 1 sp|P07803|HBL_TRETO Non-symbiotic hemoglobin OS=Trema tome 4.7e-05 28.5 2.0 5.7e-05 28.2 2.0 1.1 1 sp|Q947C5|HBL1_GOSHI Non-symbiotic hemoglobin 1 OS=Gossypiu 4.8e-05 28.4 0.2 5.3e-05 28.3 0.2 1.1 1 sp|P41260|GLB1_PHAPT Hemoglobin-1 OS=Phacoides pectinatus P 5.6e-05 28.2 0.1 7.4e-05 27.8 0.1 1.2 1 sp|Q7M418|GLBB2_OLIMA Extracellular giant hemoglobin major g 7.5e-05 27.8 0.0 9.5e-05 27.5 0.0 1.1 1 sp|P02218|GLB2_LUMTE Extracellular globin-2 OS=Lumbricus te 7.8e-05 27.8 0.0 8.8e-05 27.6 0.0 1.1 1 sp|P41262|GLB3_PHAPT Hemoglobin-3 OS=Phacoides pectinatus P 9.1e-05 27.5 0.2 9.7e-05 27.5 0.2 1.1 1 sp|O48665|LGB5_PEA Leghemoglobin Lb120-29 OS=Pisum sativu 0.00011 27.3 0.1 0.00013 27.0 0.1 1.1 1 sp|P02233|LGB1_PEA Leghemoglobin-1 OS=Pisum sativum PE=1 0.00013 27.1 0.0 0.00013 27.0 0.0 1.0 1 sp|P85313|HBBB_CATCL Hemoglobin subunit beta-B (Fragment) O 0.00018 26.6 5.4 0.19 16.8 0.2 2.4 2 sp|P26914|GLB_PSEDC Extracellular globin OS=Pseudoterranov 0.00019 26.5 1.8 0.00023 26.2 1.8 1.1 1 sp|P42511|LGB_CANLI Leghemoglobin OS=Canavalia lineata PE= 0.0002 26.4 0.1 0.00026 26.1 0.1 1.1 1 sp|P83122|GLB1_PHEHI Extracellular globin-1 OS=Pheretima hi 0.00021 26.4 0.3 0.00026 26.1 0.3 1.1 1 sp|Q941P9|HBL2_SOLLC Non-symbiotic hemoglobin 2 OS=Solanum 0.00021 26.3 0.2 0.00025 26.1 0.2 1.1 1 sp|P27992|LGB1_MEDTR Leghemoglobin 1 OS=Medicago truncatula 0.00026 26.1 0.0 0.0003 25.9 0.0 1.1 1 sp|P80592|GLBB_RIFPA Giant hemoglobins B chain OS=Riftia pa 0.00028 25.9 0.2 0.00034 25.7 0.2 1.1 1 sp|P27993|LGB2_MEDTR Leghemoglobin 2 OS=Medicago truncatula 0.00033 25.7 0.1 0.00043 25.4 0.1 1.1 1 sp|P11740|GLB1_PHESE Extracellular globin-1 OS=Pheretima si 0.00035 25.7 0.3 0.0004 25.5 0.3 1.1 1 sp|Q9FEP8|LGB_LOTJA Leghemoglobin OS=Lotus japonicus PE=2 0.00035 25.6 0.1 0.00041 25.4 0.1 1.1 1 sp|P93849|LGB3_VICFA Leghemoglobin 49 OS=Vicia faba PE=2 SV 0.00067 24.7 0.0 0.00091 24.3 0.0 1.2 1 sp|P02231|GLBT_CHITH Globin CTT-IIIA OS=Chironomus thummi t 0.0007 24.7 0.2 0.00075 24.6 0.2 1.1 1 sp|P10816|LGB3_SESRO Leghemoglobin 3 OS=Sesbania rostrata G 0.00086 24.4 0.2 0.001 24.2 0.2 1.1 1 sp|P14848|LGB2_SESRO Leghemoglobin 2 OS=Sesbania rostrata G 0.00086 24.4 1.0 0.0013 23.8 1.0 1.3 1 sp|P80721|GLB_PAREP Globin-3 OS=Paramphistomum epiclitum P 0.0011 24.1 0.1 0.0014 23.7 0.1 1.2 1 sp|P80722|GLB_ISOHY Globin OS=Isoparorchis hypselobagri PE 0.0012 24.0 0.0 0.0014 23.7 0.0 1.1 1 sp|P09966|GLB2_TYLHE Extracellular globin-2A OS=Tylorrhynch 0.0019 23.3 0.1 0.0028 22.7 0.1 1.4 1 sp|P02229|GLB3_CHITH Globin CTT-III OS=Chironomus thummi th 0.002 23.2 0.6 0.0025 22.9 0.6 1.1 1 sp|P02234|LGBA_PHAVU Leghemoglobin A OS=Phaseolus vulgaris 0.0022 23.0 0.0 0.0023 23.0 0.0 1.1 1 sp|P22431|GLB3_CHITP Globin CTP-III OS=Chironomus thummi pi 0.0024 22.9 0.0 0.0024 22.9 0.0 1.0 1 sp|P85312|HBBA_CATCL Hemoglobin subunit beta-A (Fragment) O 0.0025 22.9 0.6 0.003 22.6 0.6 1.1 1 sp|P27199|LGB_PSOTE Leghemoglobin OS=Psophocarpus tetragon 0.0026 22.8 0.0 0.0033 22.5 0.0 1.1 1 sp|P18202|GLB_TUBTU Globin, extracellular monomeric OS=Tub 0.0027 22.7 0.5 0.0034 22.5 0.5 1.1 1 sp|O04939|LGB2_PHAVU Leghemoglobin OS=Phaseolus vulgaris PE 0.0043 22.1 0.0 0.0054 21.8 0.0 1.1 1 sp|P08924|GLB1_LUMTE Extracellular globin-1 OS=Lumbricus te 0.0049 21.9 0.0 0.006 21.6 0.0 1.1 1 sp|Q7M413|GLBA2_OLIMA Extracellular giant hemoglobin major g 0.0053 21.8 0.1 0.0062 21.6 0.1 1.2 1 sp|P02232|LGB1_VICFA Leghemoglobin-1 OS=Vicia faba PE=1 SV= 0.0093 21.0 0.1 0.01 20.9 0.1 1.1 1 sp|P93848|LGB2_VICFA Leghemoglobin 29 OS=Vicia faba GN=LB29 ------ inclusion threshold ------ 0.011 20.7 0.4 0.013 20.6 0.4 1.1 1 sp|P02236|LGB2_SOYBN Leghemoglobin C2 OS=Glycine max PE=1 S 0.012 20.7 0.3 0.016 20.2 0.3 1.2 1 sp|Q93Y92|HBL2_GOSHI Non-symbiotic hemoglobin 2 OS=Gossypiu 0.013 20.5 0.4 0.027 19.6 0.4 1.5 1 sp|Q9KMY3|HMP_VIBCH Flavohemoprotein OS=Vibrio cholerae se 0.017 20.2 1.3 0.019 20.0 1.3 1.1 1 sp|Q43236|LGB1_VIGUN Leghemoglobin-1 OS=Vigna unguiculata G 0.019 20.0 0.8 0.021 19.9 0.8 1.1 1 sp|Q43296|LGB2_VIGUN Leghemoglobin-2 OS=Vigna unguiculata G 0.021 19.9 0.6 0.023 19.7 0.6 1.1 1 sp|P02235|LGB1_SOYBN Leghemoglobin C1 OS=Glycine max PE=2 S 0.026 19.6 0.0 0.029 19.4 0.0 1.1 1 sp|P11069|GLB3_LUMTE Extracellular globin-3 OS=Lumbricus te 0.026 19.6 0.0 0.037 19.1 0.0 1.2 1 sp|P02220|GLB4_TYLHE Extracellular globin-2C OS=Tylorrhynch 0.029 19.4 0.0 0.042 18.9 0.0 1.2 1 sp|P49672|GLB2_ASCSU Myoglobin OS=Ascaris suum PE=1 SV=1 0.034 19.2 0.0 0.04 19.0 0.0 1.1 1 sp|P02219|GLB1_TYLHE Extracellular globin-1 OS=Tylorrhynchu 0.063 18.3 1.0 0.067 18.2 1.0 1.1 1 sp|P02238|LGBA_SOYBN Leghemoglobin A OS=Glycine max GN=LBA 0.1 17.6 0.0 0.11 17.6 0.0 1.0 1 sp|P02217|GLB2_GLYDI Globin, minor monomeric component (Fra 0.12 17.5 0.2 0.12 17.4 0.2 1.1 1 sp|P02237|LGB3_SOYBN Leghemoglobin C3 OS=Glycine max GN=LGB 0.12 17.4 0.0 0.42 15.6 0.0 2.0 1 sp|Q821U7|SYC_CHLCV Cysteine--tRNA ligase OS=Chlamydophila 0.15 17.1 0.1 1.7 13.7 0.1 2.1 1 sp|O66586|Y211_AQUAE Uncharacterized globin-like protein aq 0.21 16.6 0.5 1.8 13.6 0.0 2.6 1 sp|Q24SX0|SYGB_DESHY Glycine--tRNA ligase beta subunit OS=D 0.22 16.6 0.0 0.25 16.4 0.0 1.1 1 sp|P06148|HBF1_URECA Hemoglobin F-I OS=Urechis caupo PE=1 S 0.36 15.9 0.0 0.45 15.6 0.0 1.1 1 sp|P51535|GLB2_NIPBR Myoglobin OS=Nippostrongylus brasilien 0.68 15.0 0.0 0.97 14.5 0.0 1.3 1 sp|P30627|GLBH_CAEEL Globin-like protein OS=Caenorhabditis 0.96 14.5 0.0 60 8.7 0.0 2.3 2 sp|B2AND4|MTLD_PODAN Mannitol-1-phosphate 5-dehydrogenase O 1.3 14.0 0.0 2.1 13.4 0.0 1.3 1 sp|Q68S17|RR2_PANGI 30S ribosomal protein S2, chloroplasti 1.6 13.7 0.1 1.8 13.6 0.1 1.1 1 sp|B1KJ42|Y2786_SHEWM UPF0352 protein Swoo_2786 OS=Shewanell 1.7 13.7 0.1 3.7 12.6 0.1 1.5 1 sp|Q7S1Y0|RNA14_NEUCR mRNA 3'-end-processing protein rna-14 2 13.4 0.1 3.3 12.8 0.1 1.3 1 sp|A8FU97|Y1809_SHESH UPF0352 protein Ssed_1809 OS=Shewanell 2.1 13.4 0.0 9.5 11.3 0.0 2.1 1 sp|Q14185|DOCK1_HUMAN Dedicator of cytokinesis protein 1 OS= 2.2 13.3 0.0 3.4 12.7 0.0 1.3 1 sp|B2LMI3|RR2_GUIAB 30S ribosomal protein S2, chloroplasti 2.3 13.3 0.0 3.5 12.7 0.0 1.3 1 sp|Q56P10|RR2_LACSA 30S ribosomal protein S2, chloroplasti 2.3 13.2 0.0 3.6 12.6 0.0 1.3 1 sp|Q1KXW9|RR2_HELAN 30S ribosomal protein S2, chloroplasti 2.4 13.2 0.0 3.6 12.6 0.0 1.3 1 sp|Q0G9X3|RR2_DAUCA 30S ribosomal protein S2, chloroplasti 3 12.9 0.0 3.3 12.7 0.0 1.2 1 sp|O76242|GLBN_CERLA Neural hemoglobin OS=Cerebratulus lact 3.2 12.8 0.1 6 11.9 0.0 1.3 1 sp|Q27302|GLBH_CAEBR Globin-like protein OS=Caenorhabditis 3.2 12.8 0.0 4.4 12.4 0.0 1.1 1 sp|Q01333|YCR4_ESCVU Uncharacterized 11.2 kDa protein in cr 3.8 12.6 0.0 17 10.5 0.0 1.9 1 sp|Q0AGZ8|UBIC_NITEC Probable chorismate--pyruvate lyase OS 4 12.5 0.1 10 11.2 0.0 1.6 1 sp|B0FZN9|SCML1_PONPY Sex comb on midleg-like protein 1 OS=P 4.2 12.4 0.8 6.3 11.8 0.1 1.6 1 sp|Q9UN30|SCML1_HUMAN Sex comb on midleg-like protein 1 OS=H 5.9 11.9 0.3 44 9.1 0.0 2.5 1 sp|B8FUJ0|SYGB_DESHD Glycine--tRNA ligase beta subunit OS=D 6.9 11.7 5.1 22 10.1 0.8 3.0 1 sp|Q498L9|KI15B_XENLA Kinesin-like protein KIF15-B OS=Xenopu Domain annotation for each sequence (and alignments): >> sp|P02185|MYG_PHYMC Myoglobin OS=Physeter macrocephalus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 222.6 3.2 1.5e-67 7.2e-65 2 149 .] 2 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 222.6 bits; conditional E-value: 1.5e-67 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLse+e++ v++vWakveadv+++G+diL+rlfks+P+t+e+F++Fk+L+te+e+k+s+d+kkHg++vl+Al+++l+k ++++ea+lk+L sp|P02185|MYG_PHYMC 2 VLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKTEAEMKASEDLKKHGVTVLTALGAILKK-KGHHEAELKPL 90 8*****************************************************************************.99********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +++Ha+k+k+++ky++++se++++vl++r+p++f+ad+q+a++K+l+l++k++a+kYk sp|P02185|MYG_PHYMC 91 AQSHATKHKIPIKYLEFISEAIIHVLHSRHPGDFGADAQGAMNKALELFRKDIAAKYK 148 *********************************************************7 PP >> sp|P02024|HBB_GORGO Hemoglobin subunit beta OS=Gorilla gorilla gorilla GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 217.0 0.1 7.6e-66 3.7e-63 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 217.0 bits; conditional E-value: 7.6e-66 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P02024|HBB_GORGO 2 VHLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAT 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02024|HBB_GORGO 89 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P68871|HBB_HUMAN Hemoglobin subunit beta OS=Homo sapiens GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 216.5 0.0 1.1e-65 5.4e-63 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 216.5 bits; conditional E-value: 1.1e-65 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P68871|HBB_HUMAN 2 VHLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAT 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68871|HBB_HUMAN 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P68872|HBB_PANPA Hemoglobin subunit beta OS=Pan paniscus GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 216.5 0.0 1.1e-65 5.4e-63 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 216.5 bits; conditional E-value: 1.1e-65 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P68872|HBB_PANPA 2 VHLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAT 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68872|HBB_PANPA 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P68873|HBB_PANTR Hemoglobin subunit beta OS=Pan troglodytes GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 216.5 0.0 1.1e-65 5.4e-63 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 216.5 bits; conditional E-value: 1.1e-65 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P68873|HBB_PANTR 2 VHLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAT 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68873|HBB_PANTR 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P02177|MYG_ESCGI Myoglobin OS=Eschrichtius gibbosus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 216.0 3.0 1.6e-65 7.7e-63 2 149 .] 2 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 216.0 bits; conditional E-value: 1.6e-65 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ae++ v+++Wakveadv+++G+diL+rlfk +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L sp|P02177|MYG_ESCGI 2 VLSDAEWQLVLNIWAKVEADVAGHGQDILIRLFKGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHEAELKPL 90 89****************************************************************************.99********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +++Ha+k+k+++ky++++s+++++vl++r+p++f+ad+qaa++K+l+l++k++a+kYk sp|P02177|MYG_ESCGI 91 AQSHATKHKIPIKYLEFISDAIIHVLHSRHPGDFGADAQAAMNKALELFRKDIAAKYK 148 *********************************************************7 PP >> sp|Q0KIY1|MYG_BALBO Myoglobin OS=Balaenoptera borealis GN=MB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 216.0 3.0 1.6e-65 7.7e-63 2 149 .] 2 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 216.0 bits; conditional E-value: 1.6e-65 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ae++ v+++Wakveadv+++G+diL+rlfk +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L sp|Q0KIY1|MYG_BALBO 2 VLSDAEWQLVLNIWAKVEADVAGHGQDILIRLFKGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHEAELKPL 90 89****************************************************************************.99********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +++Ha+k+k+++ky++++s+++++vl++r+p++f+ad+qaa++K+l+l++k++a+kYk sp|Q0KIY1|MYG_BALBO 91 AQSHATKHKIPIKYLEFISDAIIHVLHSRHPGDFGADAQAAMNKALELFRKDIAAKYK 148 *********************************************************7 PP >> sp|Q0KIY2|MYG_BALED Myoglobin OS=Balaenoptera edeni GN=MB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 216.0 3.0 1.6e-65 7.7e-63 2 149 .] 2 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 216.0 bits; conditional E-value: 1.6e-65 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ae++ v+++Wakveadv+++G+diL+rlfk +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L sp|Q0KIY2|MYG_BALED 2 VLSDAEWQLVLNIWAKVEADVAGHGQDILIRLFKGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHEAELKPL 90 89****************************************************************************.99********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +++Ha+k+k+++ky++++s+++++vl++r+p++f+ad+qaa++K+l+l++k++a+kYk sp|Q0KIY2|MYG_BALED 91 AQSHATKHKIPIKYLEFISDAIIHVLHSRHPGDFGADAQAAMNKALELFRKDIAAKYK 148 *********************************************************7 PP >> sp|P02025|HBB_HYLLA Hemoglobin subunit beta OS=Hylobates lar GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 215.9 0.1 1.7e-65 8.4e-63 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 215.9 bits; conditional E-value: 1.7e-65 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P02025|HBB_HYLLA 1 VHLTPEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02025|HBB_HYLLA 88 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02033|HBB_PILBA Hemoglobin subunit beta OS=Piliocolobus badius GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 215.4 0.2 2.4e-65 1.2e-62 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 215.4 bits; conditional E-value: 2.4e-65 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLst+d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P02033|HBB_PILBA 1 VHLTPDEKNAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSTADAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02033|HBB_PILBA 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02178|MYG_MEGNO Myoglobin OS=Megaptera novaeangliae GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 215.3 3.7 2.6e-65 1.2e-62 2 149 .] 2 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 215.3 bits; conditional E-value: 2.6e-65 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ae++ v+++Wakveadv+++G+diL+rlfk +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L sp|P02178|MYG_MEGNO 2 VLSDAEWQLVLNIWAKVEADVAGHGQDILIRLFKGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHEAELKPL 90 89****************************************************************************.99********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +++Ha+k+k+++ky++++s+++++vl++r+p++f+ad+qaa++K+l+l++k++a+kYk sp|P02178|MYG_MEGNO 91 AQSHATKHKIPIKYLEFISDAIIHVLHSRHPADFGADAQAAMNKALELFRKDIAAKYK 148 *********************************************************7 PP >> sp|P02174|MYG_GLOME Myoglobin OS=Globicephala melas GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 214.3 1.8 5.3e-65 2.6e-62 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 214.3 bits; conditional E-value: 5.3e-65 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G+diL+rlfk +P+t+e+F+kFk+L+te+++k+s+d+kkHg++vl+Al+++l+k ++++ea+lk+L+ sp|P02174|MYG_GLOME 3 LSDGEWQLVLNVWGKVEADLAGHGQDILIRLFKGHPETLEKFDKFKHLKTEADMKASEDLKKHGNTVLTALGAILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++r+p+ef+ad+q+a++K+l+l++k++a+kYk sp|P02174|MYG_GLOME 92 QSHATKHKIPIKYLEFISEAIIHVLHSRHPAEFGADAQGAMNKALELFRKDIAAKYK 148 ********************************************************7 PP >> sp|P02173|MYG_ORCOR Myoglobin OS=Orcinus orca GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 213.5 1.8 9.5e-65 4.6e-62 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 213.5 bits; conditional E-value: 9.5e-65 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G+diL+rlfk +P+t+e+F+kFk+L+te+++k+s+d+kkHg++vl+Al+++l+k +++++a+lk+L+ sp|P02173|MYG_ORCOR 3 LSDGEWQLVLNVWGKVEADLAGHGQDILIRLFKGHPETLEKFDKFKHLKTEADMKASEDLKKHGNTVLTALGAILKK-KGHHDAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++r+p+ef+ad+q+a++K+l+l++k++a+kYk sp|P02173|MYG_ORCOR 92 QSHATKHKIPIKYLEFISEAIIHVLHSRHPAEFGADAQGAMNKALELFRKDIAAKYK 148 ********************************************************7 PP >> sp|P02179|MYG_BALAC Myoglobin OS=Balaenoptera acutorostrata GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 213.3 4.2 1e-64 5.1e-62 2 149 .] 2 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 213.3 bits; conditional E-value: 1e-64 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ae+ v+++Wakveadv+++G+diL+rlfk +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L sp|P02179|MYG_BALAC 2 VLSDAEWHLVLNIWAKVEADVAGHGQDILIRLFKGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHEAELKPL 90 89****************************************************************************.99********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +++Ha+k+k+++ky++++s+++++vl++r+p+ef+ad+qaa++K+l+l++k++a+kYk sp|P02179|MYG_BALAC 91 AQSHATKHKIPIKYLEFISDAIIHVLHSRHPAEFGADAQAAMNKALELFRKDIAAKYK 148 *********************************************************7 PP >> sp|P02181|MYG_INIGE Myoglobin OS=Inia geoffrensis GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 213.2 1.3 1.1e-64 5.5e-62 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 213.2 bits; conditional E-value: 1.1e-64 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kvead +++G+d+L+rlfk +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L+ sp|P02181|MYG_INIGE 3 LSDGEWQLVLNIWGKVEADLAGHGQDVLIRLFKGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++r+p++f+ad+qaa++K+l+l++k++a+kYk sp|P02181|MYG_INIGE 92 QSHATKHKIPIKYLEFISEAIIHVLHSRHPGDFGADAQAAMNKALELFRKDIAAKYK 148 ********************************************************7 PP >> sp|P02028|HBB_CHLAE Hemoglobin subunit beta OS=Chlorocebus aethiops GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 213.1 0.1 1.2e-64 5.9e-62 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 213.1 bits; conditional E-value: 1.2e-64 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ekt+v+++W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P02028|HBB_CHLAE 1 VHLTPEEKTAVTTLWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02028|HBB_CHLAE 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02184|MYG_KOGSI Myoglobin OS=Kogia sima GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 213.0 4.2 1.3e-64 6.3e-62 2 149 .] 2 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 213.0 bits; conditional E-value: 1.3e-64 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLse+e++ v++vWakvead++++G+diL+rlfk +P+t+e+F++Fk+L+ e+e+k+s+d+kkHg++vl+Al+++l+k ++++ea+lk+L sp|P02184|MYG_KOGSI 2 VLSEGEWQLVLHVWAKVEADIAGHGQDILIRLFKHHPETLEKFDRFKHLKSEAEMKASEDLKKHGVTVLTALGAILKK-KGHHEAELKPL 90 8*****************************************************************************.99********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +++Ha+k+k+++ky++++se++++vl++r+p++f+ad+q+a+ K+l+l++k++a+kYk sp|P02184|MYG_KOGSI 91 AQSHATKHKIPIKYLEFISEAIIHVLHSRHPADFGADAQGAMSKALELFRKDIAAKYK 148 *********************************************************7 PP >> sp|Q0KIY5|MYG_KOGBR Myoglobin OS=Kogia breviceps GN=MB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 213.0 4.2 1.3e-64 6.3e-62 2 149 .] 2 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 213.0 bits; conditional E-value: 1.3e-64 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLse+e++ v++vWakvead++++G+diL+rlfk +P+t+e+F++Fk+L+ e+e+k+s+d+kkHg++vl+Al+++l+k ++++ea+lk+L sp|Q0KIY5|MYG_KOGBR 2 VLSEGEWQLVLHVWAKVEADIAGHGQDILIRLFKHHPETLEKFDRFKHLKSEAEMKASEDLKKHGVTVLTALGAILKK-KGHHEAELKPL 90 8*****************************************************************************.99********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +++Ha+k+k+++ky++++se++++vl++r+p++f+ad+q+a+ K+l+l++k++a+kYk sp|Q0KIY5|MYG_KOGBR 91 AQSHATKHKIPIKYLEFISEAIIHVLHSRHPADFGADAQGAMSKALELFRKDIAAKYK 148 *********************************************************7 PP >> sp|P02040|HBB_CEBAL Hemoglobin subunit beta OS=Cebus albifrons GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 212.7 0.2 1.6e-64 7.9e-62 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 212.7 bits; conditional E-value: 1.6e-64 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLst+d+++++++vk+Hgkkvl+A+sd+l +ld +l++++++ sp|P02040|HBB_CEBAL 1 VHLTAEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSTPDAVMNNPKVKAHGKKVLGAFSDGLTHLD-NLKGTFAQ 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02040|HBB_CEBAL 88 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|Q0KIY3|MYG_PENEL Myoglobin OS=Peponocephala electra GN=MB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 212.2 1.8 2.4e-64 1.2e-61 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 212.2 bits; conditional E-value: 2.4e-64 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G+diL+rlfk +P+t+e+F+kFk+L+te+++k+s+d+kkHg +vl+Al+++l+k +++++a+lk+L+ sp|Q0KIY3|MYG_PENEL 3 LSDGEWQLVLNVWGKVEADLAGHGQDILIRLFKGHPETLEKFDKFKHLKTEADMKASEDLKKHGITVLTALGAILKK-KGHHDAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++r+p+ef+ad+q+a++K+l+l++k++a+kYk sp|Q0KIY3|MYG_PENEL 92 QSHATKHKIPIKYLEFISEAIIHVLHSRHPAEFGADAQGAMNKALELFRKDIAAKYK 148 ********************************************************7 PP >> sp|Q6WN25|HBB_LAGLA Hemoglobin subunit beta OS=Lagothrix lagotricha GN=HBB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 212.1 0.1 2.4e-64 1.2e-61 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 212.1 bits; conditional E-value: 2.4e-64 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLst+d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|Q6WN25|HBB_LAGLA 2 VHLTGEEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSTPDAVMSNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|Q6WN25|HBB_LAGLA 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P68276|MYG_DELDE Myoglobin OS=Delphinus delphis GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 212.1 2.0 2.4e-64 1.2e-61 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 212.1 bits; conditional E-value: 2.4e-64 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G+d+L+rlfk +P+t+e+F+kFk+L+te+++k+s+d+kkHg++vl+Al+++l+k +++++a+lk+L+ sp|P68276|MYG_DELDE 3 LSDGEWQLVLNVWGKVEADLAGHGQDVLIRLFKGHPETLEKFDKFKHLKTEADMKASEDLKKHGNTVLTALGAILKK-KGHHDAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++r+p+ef+ad+q+a++K+l+l++k++a+kYk sp|P68276|MYG_DELDE 92 QSHATKHKIPIKYLEFISEAIIHVLHSRHPAEFGADAQGAMNKALELFRKDIAAKYK 148 ********************************************************7 PP >> sp|P68279|MYG_TURTR Myoglobin OS=Tursiops truncatus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 212.1 2.0 2.4e-64 1.2e-61 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 212.1 bits; conditional E-value: 2.4e-64 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G+d+L+rlfk +P+t+e+F+kFk+L+te+++k+s+d+kkHg++vl+Al+++l+k +++++a+lk+L+ sp|P68279|MYG_TURTR 3 LSDGEWQLVLNVWGKVEADLAGHGQDVLIRLFKGHPETLEKFDKFKHLKTEADMKASEDLKKHGNTVLTALGAILKK-KGHHDAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++r+p+ef+ad+q+a++K+l+l++k++a+kYk sp|P68279|MYG_TURTR 92 QSHATKHKIPIKYLEFISEAIIHVLHSRHPAEFGADAQGAMNKALELFRKDIAAKYK 148 ********************************************************7 PP >> sp|Q0KIY7|MYG1_STEAT Myoglobin-1 OS=Stenella attenuata GN=MB1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 212.1 2.0 2.4e-64 1.2e-61 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 212.1 bits; conditional E-value: 2.4e-64 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls++e++ v++vW+kvead +++G+d+L+rlfk +P+t+e+F+kFk+L+te+++k+s+d+kkHg++vl+Al+++l+k +++++a+lk+L sp|Q0KIY7|MYG1_STEAT 3 LSDGEWQLVLNVWGKVEADLAGHGQDVLIRLFKGHPETLEKFDKFKHLKTEADMKASEDLKKHGNTVLTALGAILKK-KGHHDAELKPL 90 9****************************************************************************.99********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +++Ha+k+k+++ky++++se++++vl++r+p+ef+ad+q+a++K+l+l++k++a+kYk sp|Q0KIY7|MYG1_STEAT 91 AQSHATKHKIPIKYLEFISEAIIHVLHSRHPAEFGADAQGAMNKALELFRKDIAAKYK 148 *********************************************************7 PP >> sp|P02032|HBB_SEMEN Hemoglobin subunit beta OS=Semnopithecus entellus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 212.1 0.1 2.6e-64 1.3e-61 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 212.1 bits; conditional E-value: 2.6e-64 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P02032|HBB_SEMEN 1 VHLTPEEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02032|HBB_SEMEN 88 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P68277|MYG_PHODA Myoglobin OS=Phocoenoides dalli dalli GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 212.0 1.4 2.6e-64 1.3e-61 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 212.0 bits; conditional E-value: 2.6e-64 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Lse+e++ v++vW+kvead +++G+d+L+rlfk +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k +++++a+lk+L+ sp|P68277|MYG_PHODA 3 LSEGEWQLVLNVWGKVEADLAGHGQDVLIRLFKGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHDAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++r+p+ef+ad+q+a++K+l+l++k++a+kYk sp|P68277|MYG_PHODA 92 QSHATKHKIPIKYLEFISEAIIHVLHSRHPAEFGADAQGAMNKALELFRKDIATKYK 148 ********************************************************7 PP >> sp|P68278|MYG_PHOPH Myoglobin OS=Phocoenoides phocoena GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 212.0 1.4 2.6e-64 1.3e-61 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 212.0 bits; conditional E-value: 2.6e-64 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Lse+e++ v++vW+kvead +++G+d+L+rlfk +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k +++++a+lk+L+ sp|P68278|MYG_PHOPH 3 LSEGEWQLVLNVWGKVEADLAGHGQDVLIRLFKGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHDAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++r+p+ef+ad+q+a++K+l+l++k++a+kYk sp|P68278|MYG_PHOPH 92 QSHATKHKIPIKYLEFISEAIIHVLHSRHPAEFGADAQGAMNKALELFRKDIATKYK 148 ********************************************************7 PP >> sp|P67821|HBB_CEBAP Hemoglobin subunit beta OS=Cebus apella GN=HBB PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 211.9 0.2 2.8e-64 1.4e-61 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 211.9 bits; conditional E-value: 2.8e-64 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+++W+kv +v+e+G+++L rl++++P+tq+fF++F+dLst+d+++++++vk+Hgkkvl+A+sd+l +ld +l++++++ sp|P67821|HBB_CEBAP 2 VHLTAEEKSAVTTLWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSTPDAVMNNPKVKAHGKKVLGAFSDGLTHLD-NLKGTFAQ 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P67821|HBB_CEBAP 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|Q0KIY6|MYG2_STEAT Myoglobin-2 OS=Stenella attenuata GN=MB2 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 211.9 2.5 2.8e-64 1.4e-61 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 211.9 bits; conditional E-value: 2.8e-64 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls++e++ v++vW+kvead +++G+d+L+rlfk +P+t+e+F+kFk+L+te+++k+s+d+kkHg++vl+Al+++l+k +++++a+lk+L sp|Q0KIY6|MYG2_STEAT 3 LSDGEWQLVLNVWGKVEADLAGHGQDVLIRLFKGHPETLEKFDKFKHLKTEADMKASEDLKKHGNTVLTALGAILKK-KGHHDAELKPL 90 9****************************************************************************.99********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +++Ha+k+k+++ky++++se++++vl++r+p+ef+ad+qaa++K+l+l++k++a+kYk sp|Q0KIY6|MYG2_STEAT 91 AQSHATKHKIPIKYLEFISEAIIHVLHSRHPAEFGADAQAAMNKALELFRKDIATKYK 148 *********************************************************7 PP >> sp|P08259|HBB_MANSP Hemoglobin subunit beta OS=Mandrillus sphinx GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 211.8 0.1 3.1e-64 1.5e-61 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 211.8 bits; conditional E-value: 3.1e-64 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ekt+v+++W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+A+sd+l++ld +l++++++ sp|P08259|HBB_MANSP 1 VHLTPEEKTAVTTLWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLNHLD-NLKGTFAQ 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P08259|HBB_MANSP 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P19885|HBB_COLPO Hemoglobin subunit beta OS=Colobus polykomos GN=HBB PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 211.7 0.1 3.3e-64 1.6e-61 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 211.7 bits; conditional E-value: 3.3e-64 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P19885|HBB_COLPO 2 VHLTPDEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P19885|HBB_COLPO 89 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P67822|HBB_CEBCA Hemoglobin subunit beta OS=Cebus capucinus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 211.7 0.2 3.4e-64 1.7e-61 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 211.7 bits; conditional E-value: 3.4e-64 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+++W+kv +v+e+G+++L rl++++P+tq+fF++F+dLst+d+++++++vk+Hgkkvl+A+sd+l +ld +l++++++ sp|P67822|HBB_CEBCA 1 VHLTAEEKSAVTTLWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSTPDAVMNNPKVKAHGKKVLGAFSDGLTHLD-NLKGTFAQ 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P67822|HBB_CEBCA 88 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P13557|HBB_TARSY Hemoglobin subunit beta OS=Tarsius syrichta GN=HBB PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 211.2 0.9 4.7e-64 2.3e-61 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 211.2 bits; conditional E-value: 4.7e-64 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v+a+W+kv dve++G+++L rl++++P+tq+fF++F+dLst+++++++a+vk+Hgkkvl+A+sd++a+ld +l++++++ sp|P13557|HBB_TARSY 2 VHLTAEEKAAVTALWGKV--DVEDVGGEALGRLLVVYPWTQRFFDSFGDLSTPAAVMSNAKVKAHGKKVLNAFSDGMAHLD-NLKGTFAK 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P13557|HBB_TARSY 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVATALAHKYH 147 **********************************************************7 PP >> sp|P02169|MYG_LEPMU Myoglobin OS=Lepilemur mustelinus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 210.7 1.8 6.7e-64 3.2e-61 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 210.7 bits; conditional E-value: 6.7e-64 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kveadv+++G+++L+rlf+ +P+t+e+F+kFk+L+t+de+k+s+d+kkHg +vl+Al+ +l+k ++++ea+lk+L+ sp|P02169|MYG_LEPMU 3 LSDGEWQLVLNVWGKVEADVGGHGQEVLIRLFTGHPETLEKFDKFKHLKTADEMKASEDLKKHGTTVLTALGGILKK-KGQHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++v+vl++++p+ef+ad+qaa++K+l+l+++++a+kYk sp|P02169|MYG_LEPMU 92 QSHATKHKIPIKYLEFISDAIVHVLHSKHPAEFGADAQAAMKKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P02055|HBB_MELME Hemoglobin subunit beta OS=Meles meles GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 210.3 0.2 9e-64 4.4e-61 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 210.3 bits; conditional E-value: 9e-64 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+++W+kv +v+e+G+++L rl++++P+tq++F++F+dLst+d+++++++vk+Hgkkvl+ +s++l++ld +l++++++ sp|P02055|HBB_MELME 1 VHLTAEEKSAVTSLWGKV--NVDEVGGEALGRLLVVYPWTQRYFDSFGDLSTPDAVMGNPKVKAHGKKVLNSFSEGLKNLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02055|HBB_MELME 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02051|HBB_TARBA Hemoglobin subunit beta OS=Tarsius bancanus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 210.3 0.7 9.2e-64 4.5e-61 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 210.3 bits; conditional E-value: 9.2e-64 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v+a+W+kv dve++G+++L rl++++P+tq+fF++F+dLst+++++++a+vk+Hgkkvl+A+s+++a+ld +l++++++ sp|P02051|HBB_TARBA 1 VHLTADEKAAVTALWGKV--DVEDVGGEALGRLLVVYPWTQRFFDSFGDLSTPAAVMGNAKVKAHGKKVLNAFSEGMAHLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02051|HBB_TARBA 88 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P02030|HBB_PAPCY Hemoglobin subunit beta OS=Papio cynocephalus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 210.2 0.1 9.4e-64 4.6e-61 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 210.2 bits; conditional E-value: 9.4e-64 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +++++++++vk+Hgkkvl+A+sd+l++ld +l++++++ sp|P02030|HBB_PAPCY 1 VHLTPEEKNAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPAAVMGNPKVKAHGKKVLGAFSDGLNHLD-NLKGTFAQ 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02030|HBB_PAPCY 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|Q9TSP1|HBB_PAPAN Hemoglobin subunit beta OS=Papio anubis GN=HBB PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 210.2 0.1 9.7e-64 4.7e-61 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 210.2 bits; conditional E-value: 9.7e-64 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +++++++++vk+Hgkkvl+A+sd+l++ld +l++++++ sp|Q9TSP1|HBB_PAPAN 2 VHLTPEEKNAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPAAVMGNPKVKAHGKKVLGAFSDGLNHLD-NLKGTFAQ 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|Q9TSP1|HBB_PAPAN 89 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P68222|HBB_MACFU Hemoglobin subunit beta OS=Macaca fuscata fuscata GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 210.1 0.1 1.1e-63 5.1e-61 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 210.1 bits; conditional E-value: 1.1e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+++W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+l++ld +l++++++ sp|P68222|HBB_MACFU 2 VHLTPEEKNAVTTLWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLNHLD-NLKGTFAQ 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68222|HBB_MACFU 89 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P68223|HBB_MACFA Hemoglobin subunit beta OS=Macaca fascicularis GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 210.1 0.1 1.1e-63 5.1e-61 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 210.1 bits; conditional E-value: 1.1e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+++W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+l++ld +l++++++ sp|P68223|HBB_MACFA 2 VHLTPEEKNAVTTLWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLNHLD-NLKGTFAQ 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68223|HBB_MACFA 89 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P68224|HBB_MACSP Hemoglobin subunit beta OS=Macaca speciosa GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 210.1 0.1 1.1e-63 5.1e-61 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 210.1 bits; conditional E-value: 1.1e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+++W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+l++ld +l++++++ sp|P68224|HBB_MACSP 2 VHLTPEEKNAVTTLWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLNHLD-NLKGTFAQ 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68224|HBB_MACSP 89 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P68225|HBB_MACNE Hemoglobin subunit beta OS=Macaca nemestrina GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 210.1 0.1 1.1e-63 5.1e-61 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 210.1 bits; conditional E-value: 1.1e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+++W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+l++ld +l++++++ sp|P68225|HBB_MACNE 2 VHLTPEEKNAVTTLWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLNHLD-NLKGTFAQ 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68225|HBB_MACNE 89 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P02036|HBB_SAISC Hemoglobin subunit beta OS=Saimiri sciureus GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 210.1 0.1 1.1e-63 5.2e-61 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 210.1 bits; conditional E-value: 1.1e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+a+W+kv +ve++G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P02036|HBB_SAISC 2 VHLTGDEKAAVTALWGKV--NVEDVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMNNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02036|HBB_SAISC 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P68232|HBB_ATEGE Hemoglobin subunit beta OS=Ateles geoffroyi GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 209.6 0.1 1.4e-63 7e-61 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 209.6 bits; conditional E-value: 1.4e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P68232|HBB_ATEGE 2 VHLTGEEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMSNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++ qaa++K++a va++la+kY+ sp|P68232|HBB_ATEGE 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQLQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P68234|HBB_ATEBE Hemoglobin subunit beta OS=Ateles belzebuth GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 209.6 0.1 1.4e-63 7e-61 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 209.6 bits; conditional E-value: 1.4e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P68234|HBB_ATEBE 2 VHLTGEEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMSNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++ qaa++K++a va++la+kY+ sp|P68234|HBB_ATEBE 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQLQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|Q6WN29|HBB_ALOBE Hemoglobin subunit beta OS=Alouatta belzebul GN=HBB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 209.5 0.1 1.5e-63 7.5e-61 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 209.5 bits; conditional E-value: 1.5e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++ +++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|Q6WN29|HBB_ALOBE 2 VHLTGDEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMHNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|Q6WN29|HBB_ALOBE 89 LSELHCDKLHVDPENFRLLGNVLVCVLAQHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P02026|HBB_MACMU Hemoglobin subunit beta OS=Macaca mulatta GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 209.5 0.1 1.6e-63 7.6e-61 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 209.5 bits; conditional E-value: 1.6e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+++W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+l++ld +l++++++ sp|P02026|HBB_MACMU 1 VHLTPEEKNAVTTLWGKV--NVDEVGGEALGRLLLVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLNHLD-NLKGTFAQ 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02026|HBB_MACMU 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P21201|HBB_VULVU Hemoglobin subunit beta OS=Vulpes vulpes GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 209.5 0.2 1.6e-63 7.6e-61 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 209.5 bits; conditional E-value: 1.6e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek+ v+ +W+kv +v+e+G+++L rl+ ++P+tq+fF++F+dLst+d+++++a+vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P21201|HBB_VULVU 1 VHLTAEEKSLVTGLWGKV--NVDEVGGEALGRLLIVYPWTQRFFDSFGDLSTPDAVMGNAKVKAHGKKVLNSFSDGLKNLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P21201|HBB_VULVU 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02035|HBB_AOTTR Hemoglobin subunit beta OS=Aotus trivirgatus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 209.4 0.1 1.7e-63 8.5e-61 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 209.4 bits; conditional E-value: 1.7e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P02035|HBB_AOTTR 1 VHLTGEEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPDAVMNNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02035|HBB_AOTTR 88 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02039|HBB_SAGFU Hemoglobin subunit beta OS=Saguinus fuscicollis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 209.3 0.1 1.9e-63 9.2e-61 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 209.3 bits; conditional E-value: 1.9e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v+++W+kv +vee+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P02039|HBB_SAGFU 1 VHLTGEEKSAVTTLWGKV--NVEEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02039|HBB_SAGFU 88 LSELHCNKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02166|MYG_PERPO Myoglobin OS=Perodicticus potto edwarsi GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 209.2 0.6 1.9e-63 9.3e-61 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 209.2 bits; conditional E-value: 1.9e-63 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G++iL+rlf+++P+t+e+F+kFk+L+t+de+k+s+d+kkHg++vl+Al+ +l+k ++++ea++k+L+ sp|P02166|MYG_PERPO 3 LSDGEWQSVLNVWGKVEADLAGHGQEILIRLFTAHPETLEKFDKFKNLKTPDEMKASEDLKKHGVTVLTALGGILKK-KGHHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+q+a++K+l+l+++++a+kYk sp|P02166|MYG_PERPO 92 QSHATKHKIPVKYLEFISEAIIHVLQSKHPGDFGADAQGAMNKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P02038|HBB_SAGMY Hemoglobin subunit beta OS=Saguinus mystax GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 209.2 0.1 2e-63 9.7e-61 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 209.2 bits; conditional E-value: 2e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v+++W+kv +vee+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P02038|HBB_SAGMY 1 VHLTGEEKSAVTTLWGKV--NVEEVGGEALGRLLVVYPWTQRFFDSFGDLSSPDAVMNNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02038|HBB_SAGMY 88 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02029|HBB_THEGE Hemoglobin subunit beta OS=Theropithecus gelada GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 209.2 0.1 2e-63 9.7e-61 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 209.2 bits; conditional E-value: 2e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+++W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +++++++++vk+Hgkkvl+A+sd+l++ld +l++++++ sp|P02029|HBB_THEGE 1 VHLTPEEKNAVTTLWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPAAVMGNPKVKAHGKKVLGAFSDGLNHLD-NLKGTFAQ 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02029|HBB_THEGE 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P18985|HBB_CALAR Hemoglobin subunit beta OS=Callithrix argentata GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 209.2 0.2 2e-63 9.8e-61 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 209.2 bits; conditional E-value: 2e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v+a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvl+A+sd+l +ld +l++++++ sp|P18985|HBB_CALAR 1 VHLTGEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMNNPKVKAHGKKVLGAFSDGLTHLD-NLKGTFAH 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft+ vqaa++K++a va++la+kY+ sp|P18985|HBB_CALAR 88 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPVVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|Q6WN28|HBB_CALJA Hemoglobin subunit beta OS=Callithrix jacchus GN=HBB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 209.1 0.2 2.1e-63 1e-60 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 209.1 bits; conditional E-value: 2.1e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v+a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvl+A+sd+l +ld +l++++++ sp|Q6WN28|HBB_CALJA 2 VHLTGEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMNNPKVKAHGKKVLGAFSDGLTHLD-NLKGTFAH 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft+ vqaa++K++a va++la+kY+ sp|Q6WN28|HBB_CALJA 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPVVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|Q6WN27|HBB_PITPI Hemoglobin subunit beta OS=Pithecia pithecia GN=HBB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 209.0 0.1 2.3e-63 1.1e-60 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 209.0 bits; conditional E-value: 2.3e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|Q6WN27|HBB_PITPI 2 VHLTGEEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMNNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|Q6WN27|HBB_PITPI 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P68054|HBB_SAGNI Hemoglobin subunit beta OS=Saguinus nigricollis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 208.9 0.1 2.5e-63 1.2e-60 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 208.9 bits; conditional E-value: 2.5e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v+++W+kv +vee+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P68054|HBB_SAGNI 1 VHLTGEEKSAVTTLWGKV--NVEEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMNNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68054|HBB_SAGNI 88 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P68055|HBB_SAGOE Hemoglobin subunit beta OS=Saguinus oedipus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 208.9 0.1 2.5e-63 1.2e-60 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 208.9 bits; conditional E-value: 2.5e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v+++W+kv +vee+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P68055|HBB_SAGOE 1 VHLTGEEKSAVTTLWGKV--NVEEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMNNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68055|HBB_SAGOE 88 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02180|MYG_BALPH Myoglobin OS=Balaenoptera physalus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 208.8 4.4 2.6e-63 1.3e-60 2 149 .] 2 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 208.8 bits; conditional E-value: 2.6e-63 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vL++ae+ v+++Wakveadv+++G+diL+ lfk +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L sp|P02180|MYG_BALPH 2 VLTDAEWHLVLNIWAKVEADVAGHGQDILISLFKGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHEAELKPL 90 79****************************************************************************.99********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +++Ha+k+k+++ky++++s+++++vl++r+p++f+ad+qaa++K+l+l++k++a+kYk sp|P02180|MYG_BALPH 91 AQSHATKHKIPIKYLEFISDAIIHVLHSRHPADFGADAQAAMNKALELFRKDIAAKYK 148 *********************************************************7 PP >> sp|P02031|HBB_CERAT Hemoglobin subunit beta OS=Cercocebus atys GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 208.7 0.1 2.8e-63 1.4e-60 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 208.7 bits; conditional E-value: 2.8e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v+++W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+l++ld +l++++++ sp|P02031|HBB_CERAT 1 VHLTPEEKVAVTTLWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSNPDAVMGNPKVKAHGKKVLGAFSDGLNHLD-NLKGTFAQ 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02031|HBB_CERAT 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02182|MYG_ZIPCA Myoglobin OS=Ziphius cavirostris GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 208.6 3.8 3.1e-63 1.5e-60 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 208.6 bits; conditional E-value: 3.1e-63 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Lseae++ v++vWakvead ++G++iL+rlfk +P+t+e+F+kFk+L+ e+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L+ sp|P02182|MYG_ZIPCA 3 LSEAEWQLVLHVWAKVEADLSGHGQEILIRLFKGHPETLEKFDKFKHLKSEAEMKASEDLKKHGHTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++++vl++r+p++f+ad+qaa+ K+l+l++k++a+kYk sp|P02182|MYG_ZIPCA 92 QSHATKHKIPIKYLEFISDAIIHVLHSRHPSDFGADAQAAMTKALELFRKDIAAKYK 148 ********************************************************7 PP >> sp|P02044|HBD_ATEGE Hemoglobin subunit delta OS=Ateles geoffroyi GN=HBD PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 208.4 0.1 3.4e-63 1.7e-60 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 208.4 bits; conditional E-value: 3.4e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+++++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P02044|HBD_ATEGE 2 VHLTPEEKAAVAALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPAAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++a va++la+kY+ sp|P02044|HBD_ATEGE 89 LSELHCDKLHVDPENFRLLGNVLVCVLARNFGKEFTPQVQAAFQKVVAGVATALAHKYH 147 **********************************************************7 PP >> sp|P68082|MYG_HORSE Myoglobin OS=Equus caballus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.8 1.2 5.3e-63 2.6e-60 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 207.8 bits; conditional E-value: 5.3e-63 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+++v++vW+kvead++++G+++L+rlf+ +P+t+e+F+kFk+L+te+e+k+s+d+kkHg vl+Al+ +l+k ++++ea+lk+L+ sp|P68082|MYG_HORSE 3 LSDGEWQQVLNVWGKVEADIAGHGQEVLIRLFTGHPETLEKFDKFKHLKTEAEMKASEDLKKHGTVVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++++vl++++p++f+ad+q+a+ K+l+l+++++a+kYk sp|P68082|MYG_HORSE 92 QSHATKHKIPIKYLEFISDAIIHVLHSKHPGDFGADAQGAMTKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P68083|MYG_EQUBU Myoglobin OS=Equus burchelli GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.8 1.2 5.3e-63 2.6e-60 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 207.8 bits; conditional E-value: 5.3e-63 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+++v++vW+kvead++++G+++L+rlf+ +P+t+e+F+kFk+L+te+e+k+s+d+kkHg vl+Al+ +l+k ++++ea+lk+L+ sp|P68083|MYG_EQUBU 3 LSDGEWQQVLNVWGKVEADIAGHGQEVLIRLFTGHPETLEKFDKFKHLKTEAEMKASEDLKKHGTVVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++++vl++++p++f+ad+q+a+ K+l+l+++++a+kYk sp|P68083|MYG_EQUBU 92 QSHATKHKIPIKYLEFISDAIIHVLHSKHPGDFGADAQGAMTKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P60524|HBB_CANFA Hemoglobin subunit beta OS=Canis familiaris GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.6 0.2 6.2e-63 3e-60 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 207.6 bits; conditional E-value: 6.2e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek+ v +W+kv +v+e+G+++L rl+ ++P+tq+fF++F+dLst+d+++++a+vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P60524|HBB_CANFA 1 VHLTAEEKSLVSGLWGKV--NVDEVGGEALGRLLIVYPWTQRFFDSFGDLSTPDAVMSNAKVKAHGKKVLNSFSDGLKNLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P60524|HBB_CANFA 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P60525|HBB_CANLA Hemoglobin subunit beta OS=Canis latrans GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.6 0.2 6.2e-63 3e-60 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 207.6 bits; conditional E-value: 6.2e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek+ v +W+kv +v+e+G+++L rl+ ++P+tq+fF++F+dLst+d+++++a+vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P60525|HBB_CANLA 1 VHLTAEEKSLVSGLWGKV--NVDEVGGEALGRLLIVYPWTQRFFDSFGDLSTPDAVMSNAKVKAHGKKVLNSFSDGLKNLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P60525|HBB_CANLA 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P60526|HBB_CHRBR Hemoglobin subunit beta OS=Chrysocyon brachyurus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.6 0.2 6.2e-63 3e-60 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 207.6 bits; conditional E-value: 6.2e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek+ v +W+kv +v+e+G+++L rl+ ++P+tq+fF++F+dLst+d+++++a+vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P60526|HBB_CHRBR 1 VHLTAEEKSLVSGLWGKV--NVDEVGGEALGRLLIVYPWTQRFFDSFGDLSTPDAVMSNAKVKAHGKKVLNSFSDGLKNLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P60526|HBB_CHRBR 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P61772|HBD_PANTR Hemoglobin subunit delta OS=Pan troglodytes GN=HBD PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.5 0.0 6.7e-63 3.3e-60 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 207.5 bits; conditional E-value: 6.7e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ekt+v+a+W+kv +v+ +G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P61772|HBD_PANTR 2 VHLTPEEKTAVNALWGKV--NVDAVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFSQ 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++a va++la+kY+ sp|P61772|HBD_PANTR 89 LSELHCDKLHVDPENFRLLGNVLVCVLARNFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P61773|HBD_GORGO Hemoglobin subunit delta OS=Gorilla gorilla gorilla GN=HBD PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.5 0.0 6.7e-63 3.3e-60 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 207.5 bits; conditional E-value: 6.7e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ekt+v+a+W+kv +v+ +G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P61773|HBD_GORGO 2 VHLTPEEKTAVNALWGKV--NVDAVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFSQ 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++a va++la+kY+ sp|P61773|HBD_GORGO 89 LSELHCDKLHVDPENFRLLGNVLVCVLARNFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P61774|HBD_HYLLA Hemoglobin subunit delta OS=Hylobates lar GN=HBD PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.5 0.0 6.7e-63 3.3e-60 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 207.5 bits; conditional E-value: 6.7e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ekt+v+a+W+kv +v+ +G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P61774|HBD_HYLLA 2 VHLTPEEKTAVNALWGKV--NVDAVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFSQ 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++a va++la+kY+ sp|P61774|HBD_HYLLA 89 LSELHCDKLHVDPENFRLLGNVLVCVLARNFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P61775|HBD_PONPY Hemoglobin subunit delta OS=Pongo pygmaeus GN=HBD PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.5 0.0 6.7e-63 3.3e-60 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 207.5 bits; conditional E-value: 6.7e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ekt+v+a+W+kv +v+ +G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P61775|HBD_PONPY 2 VHLTPEEKTAVNALWGKV--NVDAVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFSQ 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++a va++la+kY+ sp|P61775|HBD_PONPY 89 LSELHCDKLHVDPENFRLLGNVLVCVLARNFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|Q0KIY9|MYG_INDPC Myoglobin OS=Indopacetus pacificus GN=MB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.5 4.4 6.7e-63 3.2e-60 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 207.5 bits; conditional E-value: 6.7e-63 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Lseae++ v++vWakvead ++G++iL+rlfk +P+t+e+F+kFk+L+ e+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L+ sp|Q0KIY9|MYG_INDPC 3 LSEAEWQLVLHVWAKVEADLSGHGQEILIRLFKGHPETLEKFDKFKHLKSEAEMKASEDLKKHGHTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++++vl++++p++f+ad+qaa+ K+l+l++k++a+kYk sp|Q0KIY9|MYG_INDPC 92 QSHATKHKIPIKYLEFISDAIIHVLHSKHPSDFGADAQAAMTKALELFRKDIAAKYK 148 ********************************************************7 PP >> sp|Q6WN22|HBB_ATEPA Hemoglobin subunit beta OS=Ateles paniscus GN=HBB PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.4 0.1 6.8e-63 3.3e-60 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 207.4 bits; conditional E-value: 6.8e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v+++W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|Q6WN22|HBB_ATEPA 2 VHLTGEEKSAVTTLWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++ qaa++K++a va++la+kY+ sp|Q6WN22|HBB_ATEPA 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQLQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P68046|HBB_ODORO Hemoglobin subunit beta OS=Odobenus rosmarus divergens GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.5 0.2 6.8e-63 3.3e-60 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 207.5 bits; conditional E-value: 6.8e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P68046|HBB_ODORO 1 VHLTADEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPDAVMGNPKVKAHGKKVLNSFSDGLKNLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68046|HBB_ODORO 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P68047|HBB_ARCGA Hemoglobin subunit beta OS=Arctocephalus galapagoensis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.5 0.2 6.8e-63 3.3e-60 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 207.5 bits; conditional E-value: 6.8e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P68047|HBB_ARCGA 1 VHLTADEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPDAVMGNPKVKAHGKKVLNSFSDGLKNLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68047|HBB_ARCGA 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P09909|HBB_PHOVI Hemoglobin subunit beta OS=Phoca vitulina GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.3 0.2 7.5e-63 3.6e-60 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 207.3 bits; conditional E-value: 7.5e-63 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P09909|HBB_PHOVI 1 VHLTGEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSADAIMGNPKVKAHGKKVLNSFSDGLKNLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P09909|HBB_PHOVI 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02183|MYG_MESCA Myoglobin OS=Mesoplodon carlhubbsi GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.2 3.7 8.3e-63 4e-60 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 207.2 bits; conditional E-value: 8.3e-63 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Lseae++ v++vWakvead ++G++iL+rlfk +P+t+e+F+kFk+L+ e+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L+ sp|P02183|MYG_MESCA 3 LSEAEWQLVLHVWAKVEADLSGHGQEILIRLFKGHPETLEKFDKFKHLKSEAEMKASEDLKKHGHTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++++vl++++p++f+ad+q+a+ K+l+l++k++a+kYk sp|P02183|MYG_MESCA 92 QSHATKHKIPIKYLEFISDAIIHVLHSKHPSDFGADAQGAMTKALELFRKDIAAKYK 148 ********************************************************7 PP >> sp|Q0KIY0|MYG_MESST Myoglobin OS=Mesoplodon stejnegeri GN=MB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 207.2 3.7 8.3e-63 4e-60 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 207.2 bits; conditional E-value: 8.3e-63 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Lseae++ v++vWakvead ++G++iL+rlfk +P+t+e+F+kFk+L+ e+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L+ sp|Q0KIY0|MYG_MESST 3 LSEAEWQLVLHVWAKVEADLSGHGQEILIRLFKGHPETLEKFDKFKHLKSEAEMKASEDLKKHGHTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++++vl++++p++f+ad+q+a+ K+l+l++k++a+kYk sp|Q0KIY0|MYG_MESST 92 QSHATKHKIPIKYLEFISDAIIHVLHSKHPSDFGADAQGAMTKALELFRKDIAAKYK 148 ********************************************************7 PP >> sp|P15449|HBB_MELCA Hemoglobin subunit beta OS=Mellivora capensis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 206.9 0.3 1e-62 5e-60 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 206.9 bits; conditional E-value: 1e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+ +s++l++ld +l++++++ sp|P15449|HBB_MELCA 1 VHLTAEEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPDAVMGNPKVKAHGKKVLNSFSEGLKNLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P15449|HBB_MELCA 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|Q6WN21|HBB_CALGO Hemoglobin subunit beta OS=Callimico goeldii GN=HBB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 206.6 0.1 1.3e-62 6.2e-60 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 206.6 bits; conditional E-value: 1.3e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v+++W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+l +ld +l++++++ sp|Q6WN21|HBB_CALGO 2 VHLTGEEKSAVTTLWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMNNPKVKAHGKKVLGAFSDGLTHLD-NLKGTFAQ 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft+ vqaa++K++a va++la+kY+ sp|Q6WN21|HBB_CALGO 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPTVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P23602|HBB_MUSLU Hemoglobin subunit beta OS=Mustela lutreola GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 206.6 0.3 1.3e-62 6.2e-60 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 206.6 bits; conditional E-value: 1.3e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+ +s++l++ld +l++++++ sp|P23602|HBB_MUSLU 1 VHLTAEEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPDAVMGNPKVKAHGKKVLNSFSEGLKNLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P23602|HBB_MUSLU 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P02165|MYG_TUPGL Myoglobin OS=Tupaia glis GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 206.5 0.9 1.3e-62 6.4e-60 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 206.5 bits; conditional E-value: 1.3e-62 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kveadv+++G+++L+rlfk +P+t+e+F+kFk+L+tede+k+s+d+kkHg++vl Al+ +l+k ++++ea++k+L+ sp|P02165|MYG_TUPGL 3 LSDGEWQLVLNVWGKVEADVAGHGQEVLIRLFKGHPETLEKFDKFKHLKTEDEMKASEDLKKHGNTVLSALGGILKK-KGQHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+qaa+ K+l+l+++++a+kYk sp|P02165|MYG_TUPGL 92 QSHATKHKIPVKYLEFISEAIIQVLQSKHPGDFGADAQAAMSKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P02208|GLB5_PETMA Globin-5 OS=Petromyzon marinus PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 206.4 0.2 1.4e-62 6.8e-60 2 148 .. 11 150 .] 10 150 .] 0.98 Alignments for each domain: == domain 1 score: 206.4 bits; conditional E-value: 1.4e-62 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 +Ls+aektk++++Wa+v++++e+sG+diLv++f+stPa+qefF+kFk+L+t+d+lkksadv++H++++++A++da+a++d ek+++kl sp|P02208|GLB5_PETMA 11 PLSAAEKTKIRSAWAPVYSTYETSGVDILVKFFTSTPAAQEFFPKFKGLTTADQLKKSADVRWHAERIINAVNDAVASMDdtEKMSMKL 99 8******************************************************************************5599****** PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 +dLs++Hak+++vdp+yfk+l++v++d++aa+ +a++eKl++++++ll+s+Y sp|P02208|GLB5_PETMA 100 RDLSGKHAKSFQVDPQYFKVLAAVIADTVAAG---------DAGFEKLMSMICILLRSAY 150 ********************************.........******************9 PP >> sp|Q6WN20|HBB_CALTO Hemoglobin subunit beta OS=Callicebus torquatus GN=HBB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 206.2 0.3 1.7e-62 8.2e-60 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 206.2 bits; conditional E-value: 1.7e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+a+W+kv +v e+G+++L rl++++P+tq+fFe+F+dLs +d+++++ +vk+Hgkkvl+A+sd+la+ld +l++++++ sp|Q6WN20|HBB_CALTO 2 VHLTGEEKAAVTALWGKV--NVXEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMSNXKVKAHGKKVLGAFSDGLAHLD-NLKSTFAQ 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|Q6WN20|HBB_CALTO 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P33499|HBD_ATEFU Hemoglobin subunit delta OS=Ateles fusciceps GN=HBD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 206.1 0.1 1.7e-62 8.3e-60 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 206.1 bits; conditional E-value: 1.7e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+ Lst+d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P33499|HBD_ATEFU 1 VHLTGEEKSAVAALWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGALSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++a va++la+kY+ sp|P33499|HBD_ATEFU 88 LSELHCDKLHVDPENFRLLGNVLVCVLARNFGKEFTPQVQAAFQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|Q6WN26|HBB_AOTAZ Hemoglobin subunit beta OS=Aotus azarae GN=HBB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 206.1 0.1 1.7e-62 8.4e-60 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 206.1 bits; conditional E-value: 1.7e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|Q6WN26|HBB_AOTAZ 2 VHLTGEEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPDAVMNNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+v p++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|Q6WN26|HBB_AOTAZ 89 LSELHCDKLHVXPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P18989|HBB_PROLO Hemoglobin subunit beta OS=Procyon lotor GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 205.9 0.1 2e-62 9.6e-60 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 205.9 bits; conditional E-value: 2e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ekt+v+++W+kv +vee+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+ +s++l++ld +l++++++ sp|P18989|HBB_PROLO 1 VHLTADEKTAVTTLWGKV--NVEEVGGEALGRLLVVYPWTQRFFESFGDLSSADAIMGNPKVKAHGKKVLNSFSEGLKNLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P18989|HBB_PROLO 88 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02042|HBD_HUMAN Hemoglobin subunit delta OS=Homo sapiens GN=HBD PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 205.7 0.0 2.4e-62 1.2e-59 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 205.7 bits; conditional E-value: 2.4e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ekt+v+a+W+kv +v+ +G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P02042|HBD_HUMAN 2 VHLTPEEKTAVNALWGKV--NVDAVGGEALGRLLVVYPWTQRFFESFGDLSSPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFSQ 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft+++qaa++K++a va++la+kY+ sp|P02042|HBD_HUMAN 89 LSELHCDKLHVDPENFRLLGNVLVCVLARNFGKEFTPQMQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P68080|MYG_PHOVI Myoglobin OS=Phoca vitulina GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 205.7 1.6 2.4e-62 1.2e-59 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 205.7 bits; conditional E-value: 2.4e-62 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+ v++vW+kve+d +++G+++L+rlfks+P+t+e+F+kFk+L+ ed+++ s+d++kHg++vl+Al+ +l+k ++++ea+lk+L+ sp|P68080|MYG_PHOVI 3 LSDGEWHLVLNVWGKVETDLAGHGQEVLIRLFKSHPETLEKFDKFKHLKSEDDMRRSEDLRKHGNTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p+ef+ad+qaa++K+l+l+++++a+kYk sp|P68080|MYG_PHOVI 92 QSHATKHKIPIKYLEFISEAIIHVLHSKHPAEFGADAQAAMKKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P68081|MYG_HALGR Myoglobin OS=Halichoerus grypus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 205.7 1.6 2.4e-62 1.2e-59 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 205.7 bits; conditional E-value: 2.4e-62 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+ v++vW+kve+d +++G+++L+rlfks+P+t+e+F+kFk+L+ ed+++ s+d++kHg++vl+Al+ +l+k ++++ea+lk+L+ sp|P68081|MYG_HALGR 3 LSDGEWHLVLNVWGKVETDLAGHGQEVLIRLFKSHPETLEKFDKFKHLKSEDDMRRSEDLRKHGNTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p+ef+ad+qaa++K+l+l+++++a+kYk sp|P68081|MYG_HALGR 92 QSHATKHKIPIKYLEFISEAIIHVLHSKHPAEFGADAQAAMKKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P19886|HBD_COLPO Hemoglobin subunit delta OS=Colobus polykomos GN=HBD PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 205.6 0.1 2.6e-62 1.2e-59 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 205.6 bits; conditional E-value: 2.6e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ekt v a+W+kv +v+ +G+++L rl++++P+tq+fFe+F+dLs +++++++++vk+Hgkkvl+A+sd+la+ld l++++++ sp|P19886|HBD_COLPO 2 VHLTPEEKTVVSALWGKV--NVDAVGGEALGRLLVVYPWTQRFFESFGDLSSPAAVMGNPKVKAHGKKVLGAFSDGLAHLD-SLKGTFSQ 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P19886|HBD_COLPO 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHNFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P68052|HBB_PTEBR Hemoglobin subunit beta OS=Pteronura brasiliensis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 205.3 0.2 3.1e-62 1.5e-59 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 205.3 bits; conditional E-value: 3.1e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+ +s++l++ld +l++++++ sp|P68052|HBB_PTEBR 1 VHLTGEEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPDAVMGNPKVKAHGKKVLNSFSEGLKNLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68052|HBB_PTEBR 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P68053|HBB_MARFO Hemoglobin subunit beta OS=Martes foina GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 205.3 0.2 3.1e-62 1.5e-59 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 205.3 bits; conditional E-value: 3.1e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+ +s++l++ld +l++++++ sp|P68053|HBB_MARFO 1 VHLTGEEKAAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPDAVMGNPKVKAHGKKVLNSFSEGLKNLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68053|HBB_MARFO 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P10893|HBB_LUTLU Hemoglobin subunit beta OS=Lutra lutra GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 205.2 0.1 3.4e-62 1.7e-59 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 205.2 bits; conditional E-value: 3.4e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+++W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+ +s++l++ld +l++++++ sp|P10893|HBB_LUTLU 1 VHLTGEEKAAVTSLWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPDAVMGNPKVKAHGKKVLNSFSEGLKNLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P10893|HBB_LUTLU 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P26916|HBB_NASNA Hemoglobin subunit beta OS=Nasua nasua GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 205.1 0.1 3.6e-62 1.8e-59 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 205.1 bits; conditional E-value: 3.6e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ekt+v+++Wakv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+ +s++l++ld +l++++++ sp|P26916|HBB_NASNA 1 VHLTGEEKTAVTNLWAKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSSPDAIMGNPKVKAHGKKVLNSFSEGLKNLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P26916|HBB_NASNA 88 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02170|MYG_RABIT Myoglobin OS=Oryctolagus cuniculus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 205.1 3.2 3.6e-62 1.8e-59 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 205.1 bits; conditional E-value: 3.6e-62 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls+ae++ v++vW+kvead +++G+++L+rlf ++P+t+e+F+kFk+L+ ede+k+s+d+kkHg++vl+Al+++l+k ++++ea++k+L+ sp|P02170|MYG_RABIT 3 LSDAEWQLVLNVWGKVEADLAGHGQEVLIRLFHTHPETLEKFDKFKHLKSEDEMKASEDLKKHGNTVLTALGAILKK-KGHHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+qaa+ K+l+l+++++a++Yk sp|P02170|MYG_RABIT 92 QSHATKHKIPVKYLEFISEAIIHVLHSKHPGDFGADAQAAMSKALELFRNDIAAQYK 148 ********************************************************7 PP >> sp|P18984|HBB_BALAC Hemoglobin subunit beta OS=Balaenoptera acutorostrata GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.9 0.9 4.1e-62 2e-59 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 204.9 bits; conditional E-value: 4.1e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+a+Wakv +vee+G+++L rl++++P+tq+fFe F+dLst+d+++k+++vk+Hgkkvl +sd+l++ld +l++++++ sp|P18984|HBB_BALAC 1 VHLTAEEKSAVTALWAKV--NVEEVGGEALGRLLVVYPWTQRFFEAFGDLSTADAVMKNPKVKAHGKKVLASFSDGLKHLD-DLKGTFAT 87 69****************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv vla +++keft++ qaa++K++a va++la+kY+ sp|P18984|HBB_BALAC 88 LSELHCDKLHVDPENFRLLGNVLVIVLARHFGKEFTPELQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02167|MYG_NYCCO Myoglobin OS=Nycticebus coucang GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.5 0.3 5.5e-62 2.7e-59 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 204.5 bits; conditional E-value: 5.5e-62 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G++iL+rlf+++P+t+e+F+kFk+L+t+de+k+s+d+kkHg++vl+Al+ +l+k ++++ea++k+L+ sp|P02167|MYG_NYCCO 3 LSDGEWQSVLNVWGKVEADLAGHGQEILIRLFTAHPETLEKFDKFKNLKTPDEMKASEDLKKHGVTVLTALGGILKK-KGQHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s ++++vl++++p++f+ad+q+a+ K+l+l+++++a+kYk sp|P02167|MYG_NYCCO 92 QSHATKHKIPVKYLEFISGAIIHVLQSKHPGDFGADAQGAMSKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P02145|MYG_PANTR Myoglobin OS=Pan troglodytes GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.5 0.3 5.6e-62 2.7e-59 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 204.5 bits; conditional E-value: 5.6e-62 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead+ ++G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg +vl+Al+ +l+k ++++ea++k+L+ sp|P02145|MYG_PANTR 3 LSDGEWQLVLNVWGKVEADIPGHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGATVLTALGGILKK-KGHHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+q+a++K+l+l++k++as+Yk sp|P02145|MYG_PANTR 92 QSHATKHKIPVKYLEFISECIIQVLHSKHPGDFGADAQGAMNKALELFRKDMASNYK 148 ********************************************************7 PP >> sp|Q9I9I3|GLB2_PETMA Globin-2 OS=Petromyzon marinus PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.3 0.2 6.2e-62 3e-59 2 148 .. 11 150 .] 10 150 .] 0.98 Alignments for each domain: == domain 1 score: 204.3 bits; conditional E-value: 6.2e-62 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 +Ls+aektk++++Wa+v++++e+sG+diLv++f+stPa+qefF+kFk+L+t+d+lkksadv++H++++++A++da+ ++d ek+++kl sp|Q9I9I3|GLB2_PETMA 11 PLSAAEKTKIRSAWAPVYSNYETSGVDILVKFFTSTPAAQEFFPKFKGLTTADQLKKSADVRWHAERIINAVNDAVVSMDdtEKMSMKL 99 8******************************************************************************5599****** PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 +dLs++Hak+++vdp+yfk+l++v++d++aa+ +a++eKl++++++ll+s+Y sp|Q9I9I3|GLB2_PETMA 100 RDLSGKHAKSFQVDPQYFKVLAAVIADTVAAG---------DAGFEKLMSMICILLRSAY 150 ********************************.........******************9 PP >> sp|P15166|HBB_LEPWE Hemoglobin subunit beta OS=Leptonychotes weddelli GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.4 0.2 6.1e-62 3e-59 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 204.4 bits; conditional E-value: 6.1e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+a+W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +++++++++vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P15166|HBB_LEPWE 1 VHLTAEEKSAVTALWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPNAIMSNPKVKAHGKKVLNSFSDGLKNLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH+++l+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P15166|HBB_LEPWE 88 LSELHCDQLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P13558|HBD_TARSY Hemoglobin subunit delta OS=Tarsius syrichta GN=HBD PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.2 1.2 6.7e-62 3.3e-59 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 204.2 bits; conditional E-value: 6.7e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v+a+W+kv +ve++G+++L rl++++P+tq+fF++F+dLst+++++++a+vk+Hgkkvl+A+sd++a+ld +l++++++ sp|P13558|HBD_TARSY 2 VHLTADEKAAVTALWSKV--NVEDVGGEALGRLLVVYPWTQRFFDSFGDLSTPAAVMSNAKVKAHGKKVLNAFSDGMAHLD-NLKGTFAK 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++k+ft++ qaa++K++a va +la+kY+ sp|P13558|HBD_TARSY 89 LSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKQFTPQLQAAYQKVVAGVAAALAHKYH 147 **********************************************************7 PP >> sp|P02189|MYG_PIG Myoglobin OS=Sus scrofa GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.2 0.7 6.9e-62 3.4e-59 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 204.2 bits; conditional E-value: 6.9e-62 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLsel 94 Ls++e++ v++vW+kveadv+++G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg++vl+Al+ +l+k ++++ea+l +L+++ sp|P02189|MYG_PIG 3 LSDGEWQLVLNVWGKVEADVAGHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGNTVLTALGGILKK-KGHHEAELTPLAQS 93 9****************************************************************************.99************ PP globins4 95 HakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ha+k+k+++ky++++se++++vl++++p++f+ad+q+a+ K+l+l+++++a+kYk sp|P02189|MYG_PIG 94 HATKHKIPVKYLEFISEAIIQVLQSKHPGDFGADAQGAMSKALELFRNDMAAKYK 148 ******************************************************7 PP >> sp|Q9TS35|HBA1_HYLLA Hemoglobin subunit alpha-1 OS=Hylobates lar GN=HBA1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.1 1.6 7.3e-62 3.6e-59 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 204.1 bits; conditional E-value: 7.3e-62 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+kt+vka+W+kv+a+++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl++a+a++d +++++l++ sp|Q9TS35|HBA1_HYLLA 2 VLSPADKTNVKAAWGKVGAHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTNAVAHVD-DMPNALSA 83 8*********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls++l+++laa++p+eft++v+a+l+K+la+v+++l+skY+ sp|Q9TS35|HBA1_HYLLA 84 LSDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPAEFTPAVHASLDKFLASVSTVLTSKYR 142 **********************************************************7 PP >> sp|P68011|HBB_URSMA Hemoglobin subunit beta OS=Ursus maritimus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.1 0.1 7.5e-62 3.7e-59 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 204.1 bits; conditional E-value: 7.5e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek+ v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P68011|HBB_URSMA 1 VHLTGEEKSLVTGLWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSADAIMNNPKVKAHGKKVLNSFSDGLKNLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68011|HBB_URSMA 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P68012|HBB_URSTH Hemoglobin subunit beta OS=Ursus thibetanus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.1 0.1 7.5e-62 3.7e-59 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 204.1 bits; conditional E-value: 7.5e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek+ v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P68012|HBB_URSTH 1 VHLTGEEKSLVTGLWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSADAIMNNPKVKAHGKKVLNSFSDGLKNLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68012|HBB_URSTH 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P68013|HBB_URSML Hemoglobin subunit beta OS=Ursus malayanus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.1 0.1 7.5e-62 3.7e-59 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 204.1 bits; conditional E-value: 7.5e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek+ v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P68013|HBB_URSML 1 VHLTGEEKSLVTGLWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSADAIMNNPKVKAHGKKVLNSFSDGLKNLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68013|HBB_URSML 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P18983|HBB_AILME Hemoglobin subunit beta OS=Ailuropoda melanoleuca GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.0 0.2 7.8e-62 3.8e-59 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 204.0 bits; conditional E-value: 7.8e-62 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLst+d+++++++vk+Hgkkvl+ +s++l++ld +l++++++ sp|P18983|HBB_AILME 2 VHLTGEEKAAVTGLWSKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSTPDAVMNNPKVKAHGKKVLNSFSEGLKNLD-NLKGTFAK 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P18983|HBB_AILME 89 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P69905|HBA_HUMAN Hemoglobin subunit alpha OS=Homo sapiens GN=HBA1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.0 1.3 7.8e-62 3.8e-59 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 204.0 bits; conditional E-value: 7.8e-62 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+a+++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl++a+a++d +++++l++L sp|P69905|HBA_HUMAN 2 VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTNAVAHVD-DMPNALSAL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P69905|HBA_HUMAN 85 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|P69906|HBA_PANPA Hemoglobin subunit alpha OS=Pan paniscus GN=HBA1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.0 1.3 7.8e-62 3.8e-59 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 204.0 bits; conditional E-value: 7.8e-62 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+a+++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl++a+a++d +++++l++L sp|P69906|HBA_PANPA 2 VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTNAVAHVD-DMPNALSAL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P69906|HBA_PANPA 85 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|P69907|HBA_PANTR Hemoglobin subunit alpha OS=Pan troglodytes GN=HBA1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 204.0 1.3 7.8e-62 3.8e-59 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 204.0 bits; conditional E-value: 7.8e-62 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+a+++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl++a+a++d +++++l++L sp|P69907|HBA_PANTR 2 VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTNAVAHVD-DMPNALSAL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P69907|HBA_PANTR 85 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|P11343|MYG_LUTLU Myoglobin OS=Lutra lutra GN=MB PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 203.7 0.3 9.9e-62 4.8e-59 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 203.7 bits; conditional E-value: 9.9e-62 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg++vl+Al+ +l+k ++k+ea+lk+L+ sp|P11343|MYG_LUTLU 3 LSDGEWQLVLNVWGKVEADLAGHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKGSEDLKKHGNTVLTALGGILKK-KGKHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+q+a++++l+l+++++a+kYk sp|P11343|MYG_LUTLU 92 QSHATKHKIPIKYLEFISEAIIQVLQSKHPGDFGADAQGAMKRALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P02147|MYG_GORBE Myoglobin OS=Gorilla gorilla beringei GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 203.6 0.4 1.1e-61 5.1e-59 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 203.6 bits; conditional E-value: 1.1e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead+ ++G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg +vl+Al+ +l+k ++++ea++k+L+ sp|P02147|MYG_GORBE 3 LSDGEWQLVLNVWGKVEADISGHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGATVLTALGGILKK-KGHHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+q+a++K+l+l++k++as+Yk sp|P02147|MYG_GORBE 92 QSHATKHKIPVKYLEFISECIIQVLQSKHPGDFGADAQGAMNKALELFRKDMASNYK 148 ********************************************************7 PP >> sp|P08535|HBB_LEPEU Hemoglobin subunit beta OS=Lepus europaeus GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 203.4 0.3 1.2e-61 6e-59 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 203.4 bits; conditional E-value: 1.2e-61 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek++v+a+W+kv +vee+G++ L rl++++P+tq+fFe+F+dLst+ +++++++vk+Hgkkvl A+s++l +ld +l++++++ sp|P08535|HBB_LEPEU 2 VHLSGEEKSAVTALWGKV--NVEEVGGETLGRLLVVYPWTQRFFESFGDLSTASAVMGNPKVKAHGKKVLAAFSEGLSHLD-NLKGTFAK 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv vl ++++keft++vqaa++K++a va++la+kY+ sp|P08535|HBB_LEPEU 89 LSELHCDKLHVDPENFRLLGNVLVIVLSHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P02161|MYG_ZALCA Myoglobin OS=Zalophus californianus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 203.3 0.9 1.3e-61 6.5e-59 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 203.3 bits; conditional E-value: 1.3e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kvead ++G+++L+rlfk +P+t+e+F+kFk+L+ ede+k s+d+kkHgk+vl+Al+ +l+k +++++a+lk+L+ sp|P02161|MYG_ZALCA 3 LSDGEWQLVLNIWGKVEADLVGHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKRSEDLKKHGKTVLTALGGILKK-KGHHDAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad +aa++K+l+l+++++a+kY+ sp|P02161|MYG_ZALCA 92 QSHATKHKIPIKYLEFISEAIIHVLQSKHPGDFGADTHAAMKKALELFRNDIAAKYR 148 ********************************************************7 PP >> sp|P07421|HBA_CEBCA Hemoglobin subunit alpha OS=Cebus capucinus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 203.2 1.3 1.4e-61 6.6e-59 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 203.2 bits; conditional E-value: 1.4e-61 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk++W+kv+a+++++Gad+L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAls+a+a++d +++++l++L sp|P07421|HBA_CEBCA 1 VLSPADKTNVKTAWGKVGAHAGDYGADALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALSNAVAHVD-DMPNALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p++ft++v+a+l+K+la+v+++l+skY+ sp|P07421|HBA_CEBCA 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPADFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|Q03902|HBD_OTOCR Hemoglobin subunit delta OS=Otolemur crassicaudatus GN=HBD PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 203.0 0.1 1.6e-61 7.7e-59 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 203.0 bits; conditional E-value: 1.6e-61 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v a+W+kv +vee+G+++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkvl A+s++l++ld +l++++++ sp|Q03902|HBD_OTOCR 2 VHLTPDEKNAVCALWGKV--NVEEVGGEALGRLLVVYPWTQRFFDSFGDLSSPSAVMGNPKVKAHGKKVLSAFSEGLNHLD-NLKGTFAK 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++k+ft++vqaa++K++a va++la+kY+ sp|Q03902|HBD_OTOCR 89 LSELHCDKLHVDPENFRLLGNVLVVVLAHHFGKDFTPEVQAAYQKVVAGVATALAHKYH 147 **********************************************************7 PP >> sp|P20856|MYG_CTEGU Myoglobin OS=Ctenodactylus gundi GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 203.0 0.4 1.6e-61 8e-59 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 203.0 bits; conditional E-value: 1.6e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kve+d++++G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg +vl+Al+++l+k ++++ea+l++L+ sp|P20856|MYG_CTEGU 3 LSDGEWQLVLNAWGKVETDIGGHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGTTVLTALGNILKK-KGQHEAELAPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl +++p++f+ad+q+a+ K+l+l+++++a+kYk sp|P20856|MYG_CTEGU 92 QSHATKHKIPVKYLEFISEAIIQVLESKHPGDFGADAQGAMSKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P68044|HBB_MUSPF Hemoglobin subunit beta OS=Mustela putorius furo GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.9 0.2 1.7e-61 8.3e-59 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 202.9 bits; conditional E-value: 1.7e-61 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+a+W+kv +v+e+G++ L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+ +s++l++ld +l++++++ sp|P68044|HBB_MUSPF 1 VHLTGEEKAAVTALWGKV--NVDEVGGETLGRLLVVYPWTQRFFDSFGDLSSPDAVMSNPKVKAHGKKVLNSFSEGLKNLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68044|HBB_MUSPF 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P68045|HBB_MUSPU Hemoglobin subunit beta OS=Mustela putorius GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.9 0.2 1.7e-61 8.3e-59 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 202.9 bits; conditional E-value: 1.7e-61 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+a+W+kv +v+e+G++ L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+ +s++l++ld +l++++++ sp|P68045|HBB_MUSPU 1 VHLTGEEKAAVTALWGKV--NVDEVGGETLGRLLVVYPWTQRFFDSFGDLSSPDAVMSNPKVKAHGKKVLNSFSEGLKNLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P68045|HBB_MUSPU 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P32428|MYG_ONDZI Myoglobin OS=Ondatra zibethicus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.8 1.0 1.9e-61 9.2e-59 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 202.8 bits; conditional E-value: 1.9e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G+d+L+rlfk++P+t+e+F+kFk+++ ede+k+s+d+kkHg++vl+Al+ +l+k ++++ea++k+L+ sp|P32428|MYG_ONDZI 3 LSDGEWQLVLHVWGKVEADLAGHGQDVLIRLFKAHPETLEKFDKFKHIKSEDEMKGSEDLKKHGBTVLTALGGILKK-KGHHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl +++p++f+adv++a++++l+l+++++a+kYk sp|P32428|MYG_ONDZI 92 QSHATKHKIPIKYLEFISEAIIHVLZSKHPSBFGADVZGAMKRALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P14396|MYG_CASFI Myoglobin OS=Castor fiber GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.7 1.4 2e-61 9.6e-59 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 202.7 bits; conditional E-value: 2e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G+++L+rlfk +P+t+e+F+kFk+++ ede+k+s+d+kkHg++vl+Al+ +l+k ++++ea++k+L+ sp|P14396|MYG_CASFI 3 LSDGEWQLVLHVWGKVEADLAGHGQEVLIRLFKGHPETLEKFNKFKHIKSEDEMKASEDLKKHGVTVLTALGGVLKK-KGHHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+++a++K+l+l++k++a+kYk sp|P14396|MYG_CASFI 92 QSHATKHKIPIKYLEFISEAIIHVLQSKHPGBFGADABGAMNKALELFRKDIAAKYK 148 ********************************************************7 PP >> sp|P18972|HBA_CALAR Hemoglobin subunit alpha OS=Callithrix argentata GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.6 1.3 2.1e-61 1e-58 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 202.6 bits; conditional E-value: 2.1e-61 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W+kv+++++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl++a+a++d +++++l++L sp|P18972|HBA_CALAR 1 VLSPADKSNVKAAWGKVGSHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTNAVAHVD-DMPNALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p+eft++v+a+l+K+la+v+++l+skY+ sp|P18972|HBA_CALAR 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|Q5XLE5|HBD_AILME Hemoglobin subunit delta OS=Ailuropoda melanoleuca GN=HBD PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.6 0.2 2.1e-61 1e-58 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 202.6 bits; conditional E-value: 2.1e-61 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLst+d+++++++vk+Hgkkvl+ +s++l++ld +l++++ + sp|Q5XLE5|HBD_AILME 2 VHLTGEEKAAVTGLWSKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSTPDAVMNNPKVKAHGKKVLNSFSEGLKNLD-NLKGTFVK 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|Q5XLE5|HBD_AILME 89 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P02144|MYG_HUMAN Myoglobin OS=Homo sapiens GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.6 0.3 2.1e-61 1e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 202.6 bits; conditional E-value: 2.1e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead+ ++G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg +vl+Al+ +l+k ++++ea++k+L+ sp|P02144|MYG_HUMAN 3 LSDGEWQLVLNVWGKVEADIPGHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGATVLTALGGILKK-KGHHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+q+a++K+l+l++k++as+Yk sp|P02144|MYG_HUMAN 92 QSHATKHKIPVKYLEFISECIIQVLQSKHPGDFGADAQGAMNKALELFRKDMASNYK 148 ********************************************************7 PP >> sp|P01923|HBA_GORGO Hemoglobin subunit alpha OS=Gorilla gorilla gorilla GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.4 1.2 2.4e-61 1.2e-58 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 202.4 bits; conditional E-value: 2.4e-61 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+a+++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl++a+a++d +++++l++L sp|P01923|HBA_GORGO 1 VLSPADKTNVKAAWGKVGAHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTNAVAHVD-DMPNALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P01923|HBA_GORGO 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02192|MYG_BOVIN Myoglobin OS=Bos taurus GN=MB PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.3 3.4 2.7e-61 1.3e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 202.3 bits; conditional E-value: 2.7e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kveadv+++G+++L+rlf+ +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea++k+L+ sp|P02192|MYG_BOVIN 3 LSDGEWQLVLNAWGKVEADVAGHGQEVLIRLFTGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHEAEVKHLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha+k+k+++ky++++s+++++vl+a++p++f+ad+qaa+ K+l+l+++++a++Yk sp|P02192|MYG_BOVIN 92 ESHANKHKIPVKYLEFISDAIIHVLHAKHPSDFGADAQAAMSKALELFRNDMAAQYK 148 ********************************************************7 PP >> sp|P86873|MYG_BISBI Myoglobin OS=Bison bison GN=MB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.3 3.4 2.7e-61 1.3e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 202.3 bits; conditional E-value: 2.7e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kveadv+++G+++L+rlf+ +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea++k+L+ sp|P86873|MYG_BISBI 3 LSDGEWQLVLNAWGKVEADVAGHGQEVLIRLFTGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHEAEVKHLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha+k+k+++ky++++s+++++vl+a++p++f+ad+qaa+ K+l+l+++++a++Yk sp|P86873|MYG_BISBI 92 ESHANKHKIPVKYLEFISDAIIHVLHAKHPSDFGADAQAAMSKALELFRNDMAAQYK 148 ********************************************************7 PP >> sp|Q2MJN4|MYG_BOSMU Myoglobin OS=Bos mutus grunniens GN=MB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.3 3.4 2.7e-61 1.3e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 202.3 bits; conditional E-value: 2.7e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kveadv+++G+++L+rlf+ +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea++k+L+ sp|Q2MJN4|MYG_BOSMU 3 LSDGEWQLVLNAWGKVEADVAGHGQEVLIRLFTGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHEAEVKHLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha+k+k+++ky++++s+++++vl+a++p++f+ad+qaa+ K+l+l+++++a++Yk sp|Q2MJN4|MYG_BOSMU 92 ESHANKHKIPVKYLEFISDAIIHVLHAKHPSDFGADAQAAMSKALELFRNDMAAQYK 148 ********************************************************7 PP >> sp|P02057|HBB_RABIT Hemoglobin subunit beta-1/2 OS=Oryctolagus cuniculus GN=HBB1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.2 0.5 2.8e-61 1.3e-58 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 202.2 bits; conditional E-value: 2.8e-61 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek++v+a+W+kv +vee+G+++L rl++++P+tq+fFe+F+dLs +++++++++vk+Hgkkvl A+s++l +ld +l++++++ sp|P02057|HBB_RABIT 2 VHLSSEEKSAVTALWGKV--NVEEVGGEALGRLLVVYPWTQRFFESFGDLSSANAVMNNPKVKAHGKKVLAAFSEGLSHLD-NLKGTFAK 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv vl ++++keft++vqaa++K++a va++la+kY+ sp|P02057|HBB_RABIT 89 LSELHCDKLHVDPENFRLLGNVLVIVLSHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P02049|HBB_NYCCO Hemoglobin subunit beta OS=Nycticebus coucang GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.1 0.1 3.1e-61 1.5e-58 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 202.1 bits; conditional E-value: 3.1e-61 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v+a+W+kv +v+++G+++L rl++++P+tq+fFe+F+dLs + +++++++vk+Hgkkvl A+sd+l++ld +l++++++ sp|P02049|HBB_NYCCO 1 VHLTGEEKSAVTALWGKV--NVDDVGGEALGRLLVVYPWTQRFFESFGDLSSPSAVMGNPKVKAHGKKVLSAFSDGLNHLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++k+ft++vq+a++K++a va++la+kY+ sp|P02049|HBB_NYCCO 88 LSELHCDKLHVDPENFRLLGNVLVVVLAHHFGKDFTPQVQSAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02163|MYG_ROUAE Myoglobin OS=Rousettus aegyptiacus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.1 0.3 3.1e-61 1.5e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 202.1 bits; conditional E-value: 3.1e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead+ ++G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg +vl+Al+ +l+k ++++ea+lk+L+ sp|P02163|MYG_ROUAE 3 LSDGEWQLVLNVWGKVEADIPGHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGATVLTALGGILKK-KGQHEAQLKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++sev+++vl++++p++f+ad+q+a+ K+l+l+++++a+kYk sp|P02163|MYG_ROUAE 92 QSHATKHKIPVKYLEFISEVIIQVLQSKHPGDFGADAQGAMGKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P02207|GLB_LAMFL Globin OS=Lampetra fluviatilis PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.0 0.2 3.2e-61 1.6e-58 2 148 .. 11 150 .] 10 150 .] 0.98 Alignments for each domain: == domain 1 score: 202.0 bits; conditional E-value: 3.2e-61 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklk 89 +Ls+aektk++++Wa+v++++e+sG+diLv++f+stPa+qefF+kFk+++ +d+lkksadv++H++++++A++da+a++d ek+++kl+ sp|P02207|GLB_LAMFL 11 PLSAAEKTKIRSAWAPVYSNYETSGVDILVKFFTSTPAAQEFFPKFKGMTSADQLKKSADVRWHAERIINAVNDAVASMDdtEKMSMKLR 100 8******************************************************************************5599******* PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 dLs++Hak+++vdp+yfk+l++v++d++aa+ +a++eKl++++++ll+s+Y sp|P02207|GLB_LAMFL 101 DLSGKHAKSFQVDPQYFKVLAAVIADTVAAG---------DAGFEKLMSMICILLRSAY 150 *******************************.........******************9 PP >> sp|P18986|HBB_CROCR Hemoglobin subunit beta OS=Crocuta crocuta GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.1 0.1 3.1e-61 1.5e-58 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 202.1 bits; conditional E-value: 3.1e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek+ v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++ +vk+Hgkkvl+ +sd+l+++d +l++++++Ls sp|P18986|HBB_CROCR 3 LTAEEKSLVNDLWSKV--NVDEVGGEALGRLLVVYPWTQRFFQSFGDLSSADAIMGNSKVKAHGKKVLNSFSDGLKHID-DLKGTFAKLS 89 99**************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++fkll++vlv+vla+++++eft++vqaa++K++a va++la+kY+ sp|P18986|HBB_CROCR 90 ELHCDKLHVDPENFKLLGNVLVCVLAHHFGNEFTPPVQAAYQKVVAGVANALAHKYH 146 ********************************************************7 PP >> sp|P62734|MYG_HYLAG Myoglobin OS=Hylobates agilis GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.0 0.4 3.3e-61 1.6e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 202.0 bits; conditional E-value: 3.3e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead+ +G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg +vl+Al+ +l+k ++++ea++k+L+ sp|P62734|MYG_HYLAG 3 LSDGEWQLVLNVWGKVEADIPSHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGATVLTALGGILKK-KGHHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+q+a++K+l+l++k++as+Yk sp|P62734|MYG_HYLAG 92 QSHATKHKIPVKYLEFISECIIQVLQSKHPGDFGADAQGAMNKALELFRKDMASNYK 148 ********************************************************7 PP >> sp|P62735|MYG_HYLSY Myoglobin OS=Hylobates syndactylus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.0 0.4 3.3e-61 1.6e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 202.0 bits; conditional E-value: 3.3e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead+ +G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg +vl+Al+ +l+k ++++ea++k+L+ sp|P62735|MYG_HYLSY 3 LSDGEWQLVLNVWGKVEADIPSHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGATVLTALGGILKK-KGHHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+q+a++K+l+l++k++as+Yk sp|P62735|MYG_HYLSY 92 QSHATKHKIPVKYLEFISECIIQVLQSKHPGDFGADAQGAMNKALELFRKDMASNYK 148 ********************************************************7 PP >> sp|P18982|HBB_AILFU Hemoglobin subunit beta OS=Ailurus fulgens GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 202.0 0.1 3.4e-61 1.6e-58 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 202.0 bits; conditional E-value: 3.4e-61 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hgkkvl+ +s++l++ld +l++++++ sp|P18982|HBB_AILFU 1 VHLTGEEKAAVTGLWSKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPDAVMGNPKVKAHGKKVLNSFSEGLKNLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P18982|HBB_AILFU 88 LSELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02190|MYG_SHEEP Myoglobin OS=Ovis aries GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 201.9 2.7 3.5e-61 1.7e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 201.9 bits; conditional E-value: 3.5e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kveadv+++G+++L+rlf+ +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea++k+L+ sp|P02190|MYG_SHEEP 3 LSDGEWQLVLNAWGKVEADVAGHGQEVLIRLFTGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHEAEVKHLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha+k+k+++ky++++s+++++vl+a++p++f+ad+q+a+ K+l+l+++++a++Yk sp|P02190|MYG_SHEEP 92 ESHANKHKIPVKYLEFISDAIIHVLHAKHPSDFGADAQGAMSKALELFRNDMAAQYK 148 ********************************************************7 PP >> sp|P67817|HBA_ATEGE Hemoglobin subunit alpha OS=Ateles geoffroyi GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 201.6 1.0 4.4e-61 2.1e-58 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 201.6 bits; conditional E-value: 4.4e-61 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W+kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl++a+a++d +++++l++L sp|P67817|HBA_ATEGE 2 VLSPADKSNVKAAWGKVGGHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTNAVAHVD-DMPNALSAL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p++ft++v+a+l+K+la+v+++l+skY+ sp|P67817|HBA_ATEGE 85 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPADFTPAVHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|P02168|MYG_OTOCR Myoglobin OS=Otolemur crassicaudatus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 201.5 1.1 4.6e-61 2.2e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 201.5 bits; conditional E-value: 4.6e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kvead +++G+d+L+rlf+++P+t+e+F+kFk+L+t+de+k+s+d+kkHg++vl+Al+ +l+k ++++ea++k+L+ sp|P02168|MYG_OTOCR 3 LSDGEWQLVLKIWGKVEADLAGHGQDVLIRLFTAHPETLEKFDKFKNLKTADEMKASEDLKKHGVTVLTALGGILKK-KGQHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl+++++++f++dvq+a+ K+l+l+++++a+kYk sp|P02168|MYG_OTOCR 92 QSHATKHKIPVKYLEFISEAIIHVLQNKHSGDFGTDVQGAMSKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P09968|GLB3_PETMA Globin-3 OS=Petromyzon marinus PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 201.4 0.1 4.8e-61 2.3e-58 2 148 .. 11 150 .] 10 150 .] 0.98 Alignments for each domain: == domain 1 score: 201.4 bits; conditional E-value: 4.8e-61 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 +Ls+aektk++++Wa+v++++e++G+diLv++f+stPa+qefF+kFk+L+t+d+lkksadv++H++++++A++da+ ++d ek+++kl sp|P09968|GLB3_PETMA 11 PLSAAEKTKIRSAWAPVYSNYETTGVDILVKFFTSTPAAQEFFPKFKGLTTADQLKKSADVRWHAERIINAVNDAVVSMDdtEKMSMKL 99 8******************************************************************************5599****** PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 dLs++Hak+++vdp+yfk+l++v++d++aa+ +a++eKl++++++ll+s+Y sp|P09968|GLB3_PETMA 100 GDLSGKHAKSFQVDPQYFKVLAAVIADTVAAG---------DAGFEKLMSMICILLRSAY 150 ********************************.........******************9 PP >> sp|P02150|MYG_MACFA Myoglobin OS=Macaca fascicularis GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 201.5 0.5 4.7e-61 2.3e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 201.5 bits; conditional E-value: 4.7e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead+ +G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg++vl+Al+ +l+k ++++ea++k+L+ sp|P02150|MYG_MACFA 3 LSDGEWQLVLNVWGKVEADIPSHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGVTVLTALGGILKK-KGHHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++l+se +++vl++++p++f+ad+q+a++K+l+l+++++a+kYk sp|P02150|MYG_MACFA 92 QSHATKHKIPVKYLELISESIIQVLQSKHPGDFGADAQGAMNKALELFRNDMAAKYK 148 ********************************************************7 PP >> sp|P06635|HBA_PONPY Hemoglobin subunit alpha OS=Pongo pygmaeus GN=HBA1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 201.4 1.4 4.8e-61 2.3e-58 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 201.4 bits; conditional E-value: 4.8e-61 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk++W+kv+a+++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl++a+a++d +++++l++L sp|P06635|HBA_PONPY 2 VLSPADKTNVKTAWGKVGAHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKDHGKKVADALTNAVAHVD-DMPNALSAL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P06635|HBA_PONPY 85 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|P01928|HBA_CEBAP Hemoglobin subunit alpha OS=Cebus apella GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 201.4 0.9 5.1e-61 2.5e-58 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 201.4 bits; conditional E-value: 5.1e-61 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk++W+kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAls+a+a++d +++++l++L sp|P01928|HBA_CEBAP 2 VLSPADKTNVKTAWGKVGGHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALSNAVAHVD-DMPNALSAL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p++ft++v+a+l+K+la+v+++l+skY+ sp|P01928|HBA_CEBAP 85 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPADFTPAVHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|P02050|HBB_OTOCR Hemoglobin subunit beta-1/2 OS=Otolemur crassicaudatus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 201.3 0.0 5.4e-61 2.6e-58 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 201.3 bits; conditional E-value: 5.4e-61 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v a+W+kv +vee+G+++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkvl A+sd+l++ld +l +++++ sp|P02050|HBB_OTOCR 1 VHLTPDEKNAVCALWGKV--NVEEVGGEALGRLLVVYPWTQRFFDSFGDLSSPSAVMGNPKVKAHGKKVLSAFSDGLQHLD-NLCGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+v+p++f+ll++vlv+vla++++k+ft++vqaa+eK++a va++la+kY+ sp|P02050|HBB_OTOCR 88 LSELHCDKLHVNPENFRLLGNVLVCVLAHHFGKDFTPEVQAAYEKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P02047|HBD_SAISC Hemoglobin subunit delta OS=Saimiri sciureus GN=HBD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 201.2 0.1 5.9e-61 2.9e-58 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 201.2 bits; conditional E-value: 5.9e-61 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+ Ls +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P02047|HBD_SAISC 1 VHLTGDEKSAVAALWSKV--NVDEVGGEALGRLLVVYPWTQRFFESFGALSSADAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++a va++la+kY+ sp|P02047|HBD_SAISC 88 LSELHCDKLHVDPENFRLLGNVLVCVLARNFGKEFTPQVQAAFQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P23020|HBB_PROCR Hemoglobin subunit beta OS=Proteles cristata GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 201.1 0.1 6e-61 2.9e-58 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 201.1 bits; conditional E-value: 6e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek+ v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++ +vk+Hgkkvl+ +sd+l+++d +l++++++Ls sp|P23020|HBB_PROCR 3 LTAEEKSLVNDLWSKV--NVDEVGGEALGRLLVVYPWTQRFFQSFGDLSSADAIMGNGKVKAHGKKVLNSFSDGLKHID-DLKGTFAKLS 89 99**************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++fkll++vlv+vla+++++eft++vqaa++K++a va++la+kY+ sp|P23020|HBB_PROCR 90 ELHCDKLHVDPENFKLLGNVLVCVLAHHFGNEFTPPVQAAYQKVVAGVANALAHKYH 146 ********************************************************7 PP >> sp|P68015|HBD_SAGNI Hemoglobin subunit delta OS=Saguinus nigricollis GN=HBD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 201.1 0.1 6.3e-61 3.1e-58 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 201.1 bits; conditional E-value: 6.3e-61 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+ Ls +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P68015|HBD_SAGNI 1 VHLTGEEKSAVAALWSKV--NVDEVGGEALGRLLVVYPWTQRFFESFGALSSPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft+ vqaa++K++a va++la+kY+ sp|P68015|HBD_SAGNI 88 LSELHCDKLHVDPENFRLLGNVLVCVLARNFGKEFTPRVQAAFQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P67818|HBA_SAGOE Hemoglobin subunit alpha OS=Saguinus oedipus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 201.1 1.0 6.4e-61 3.1e-58 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 201.1 bits; conditional E-value: 6.4e-61 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W+kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl++a+a++d +++++l++L sp|P67818|HBA_SAGOE 1 VLSPADKSNVKAAWGKVGGHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTNAVAHVD-DMPNALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p++ft++v+a+l+K+la+v+++l+skY+ sp|P67818|HBA_SAGOE 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPADFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02164|MYG_ORYAF Myoglobin OS=Orycteropus afer GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 200.9 0.4 7.2e-61 3.5e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 200.9 bits; conditional E-value: 7.2e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls+ae++ v++vW+kvead+ ++G+d+L+rlfk +P+t+e+F++Fk+L+tede+k+s+d+kkHg +vl+Al+ +l+k ++++ea++++L+ sp|P02164|MYG_ORYAF 3 LSDAEWQLVLNVWGKVEADIPGHGQDVLIRLFKGHPETLEKFDRFKHLKTEDEMKASEDLKKHGTTVLTALGGILKK-KGQHEAEIQPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++v++++++++f+ad+q+a+ K+l+l+++++a+kYk sp|P02164|MYG_ORYAF 92 QSHATKHKIPVKYLEFISEAIIQVIQSKHSGDFGADAQGAMSKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P68084|MYG_PAPAN Myoglobin OS=Papio anubis GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 200.8 0.6 7.8e-61 3.8e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 200.8 bits; conditional E-value: 7.8e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead+ +G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg +vl+Al+ +l+k ++++ea++k+L+ sp|P68084|MYG_PAPAN 3 LSDGEWQLVLNVWGKVEADIPSHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGATVLTALGGILKK-KGHHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++l+se +++vl++++p++f+ad+q+a++K+l+l+++++a+kYk sp|P68084|MYG_PAPAN 92 QSHATKHKIPVKYLELISESIIQVLQSKHPGDFGADAQGAMNKALELFRNDMAAKYK 148 ********************************************************7 PP >> sp|P68085|MYG_SEMEN Myoglobin OS=Semnopithecus entellus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 200.8 0.6 7.8e-61 3.8e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 200.8 bits; conditional E-value: 7.8e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead+ +G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg +vl+Al+ +l+k ++++ea++k+L+ sp|P68085|MYG_SEMEN 3 LSDGEWQLVLNVWGKVEADIPSHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGATVLTALGGILKK-KGHHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++l+se +++vl++++p++f+ad+q+a++K+l+l+++++a+kYk sp|P68085|MYG_SEMEN 92 QSHATKHKIPVKYLELISESIIQVLQSKHPGDFGADAQGAMNKALELFRNDMAAKYK 148 ********************************************************7 PP >> sp|P68086|MYG_ERYPA Myoglobin OS=Erythrocebus patas GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 200.8 0.6 7.8e-61 3.8e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 200.8 bits; conditional E-value: 7.8e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead+ +G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg +vl+Al+ +l+k ++++ea++k+L+ sp|P68086|MYG_ERYPA 3 LSDGEWQLVLNVWGKVEADIPSHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGATVLTALGGILKK-KGHHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++l+se +++vl++++p++f+ad+q+a++K+l+l+++++a+kYk sp|P68086|MYG_ERYPA 92 QSHATKHKIPVKYLELISESIIQVLQSKHPGDFGADAQGAMNKALELFRNDMAAKYK 148 ********************************************************7 PP >> sp|P02191|MYG_CEREL Myoglobin OS=Cervus elaphus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 200.7 2.7 8.4e-61 4.1e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 200.7 bits; conditional E-value: 8.4e-61 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kveadv+++G+++L+rlf+ +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea++k+L+ sp|P02191|MYG_CEREL 3 LSDGEWQLVLNAWGKVEADVAGHGQEVLIRLFTGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHEAEVKHLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha+k+k+++ky++++s+++++vl+a++p++f+ad+q+a+ K+l+l+++++a++Yk sp|P02191|MYG_CEREL 92 ESHANKHKIPVKYLEFISDAIIHVLHAKHPSNFGADAQGAMSKALELFRNDMAAQYK 148 ********************************************************7 PP >> sp|P02171|MYG_OCHPR Myoglobin OS=Ochotona princeps GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 200.4 0.3 1e-60 5e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 200.4 bits; conditional E-value: 1e-60 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg++vl Al+ +l+k ++++ea+lk+L+ sp|P02171|MYG_OCHPR 3 LSDGEWQLVLNVWGKVEADLAGHGQEVLIRLFKNHPETLEKFDKFKNLKSEDEMKGSDDLKKHGNTVLSALGGILKK-KGQHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+q+a+ K+l+l+++++a+kYk sp|P02171|MYG_OCHPR 92 QSHATKHKIPVKYLEFISEAIIQVLQSKHPGDFGADAQGAMSKALELFRNDMAAKYK 148 ********************************************************7 PP >> sp|B7U9B5|MYG_CAPHI Myoglobin OS=Capra hircus GN=MB PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 200.3 2.2 1.1e-60 5.1e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 200.3 bits; conditional E-value: 1.1e-60 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+t v+++W+kveadv+++G+++L+rlf+ +P+t+e+F+kFk+L+t +e+k+s+d+kkHg++vl+Al+ +l+k ++++ea++k+L+ sp|B7U9B5|MYG_CAPHI 3 LSDGEWTLVLNAWGKVEADVAGHGQEVLIRLFTGHPETLEKFDKFKHLKTGAEMKASEDLKKHGNTVLTALGGILKK-KGHHEAEVKHLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha+k+k+++ky++++s+++++vl+a++p++f+ad+q+a+ K+l+l+++++a++Yk sp|B7U9B5|MYG_CAPHI 92 ESHANKHKIPVKYLEFISDAIIHVLHAKHPSDFGADAQGAMSKALELFRNDMAAQYK 148 ********************************************************7 PP >> sp|Q6PL31|MYG_OCHCU Myoglobin OS=Ochotona curzoniae GN=MB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 200.3 0.4 1.1e-60 5.3e-58 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 200.3 bits; conditional E-value: 1.1e-60 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg++vl Al+ +l+k ++++ea+lk+L+ sp|Q6PL31|MYG_OCHCU 3 LSDGEWQLVLTVWGKVEADLAGHGQEVLIRLFKNHPETLEKFDKFKNLKSEDEMKGSDDLKKHGNTVLSALGGILKK-KGQHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+q+a+ K+l+l+++++a+kYk sp|Q6PL31|MYG_OCHCU 92 QSHATKHKIPVKYLEFISEAIIQVLQSKHPGDFGADAQGAMSKALELFRNDMAAKYK 148 ********************************************************7 PP >> sp|P68014|HBD_SAGMY Hemoglobin subunit delta OS=Saguinus mystax GN=HBD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 200.3 0.1 1.1e-60 5.4e-58 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 200.3 bits; conditional E-value: 1.1e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v a+W+kv +v+e+G+++L rl++++P+tq+fFe+F+ Ls +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P68014|HBD_SAGMY 1 VHLTGDEKSAVAALWSKV--NVDEVGGEALGRLLVVYPWTQRFFESFGALSSPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft+ vqaa++K++a va++la+kY+ sp|P68014|HBD_SAGMY 88 LSELHCDKLHVDPENFRLLGNVLVCVLARNFGKEFTPRVQAAFQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P18990|HBB_TURTR Hemoglobin subunit beta OS=Tursiops truncatus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 200.2 0.2 1.2e-60 5.6e-58 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 200.2 bits; conditional E-value: 1.2e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v+a+W+kv +vee+G+++L rl++++P+tq+fFe+F+dLst+d+++k+++vkkHg+kvl ++++l++ld +l++++++ sp|P18990|HBB_TURTR 1 VHLTGEEKSAVTALWGKV--NVEEVGGEALGRLLVVYPWTQRFFESFGDLSTADAVMKNPNVKKHGQKVLASFGEGLKHLD-DLKGTFAA 87 689***************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++ q+a++K++a va++la+kY+ sp|P18990|HBB_TURTR 88 LSELHCDKLHVDPENFRLLGNVLVVVLARHFGKEFTPELQSAYQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P02048|HBB_LORTA Hemoglobin subunit beta OS=Loris tardigradus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 200.1 0.1 1.3e-60 6.1e-58 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 200.1 bits; conditional E-value: 1.3e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v+ +W+kv +ve++G+++L rl++++P+tq+fFe+F+dLs + +++++++vk+Hgkkvl A+sd+l++ld +l++++++ sp|P02048|HBB_LORTA 1 VHLTGEEKSAVTGLWGKV--NVEDVGGEALGRLLVVYPWTQRFFESFGDLSSPSAVMGNPKVKAHGKKVLSAFSDGLNHLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++k+ft++vq+a++K++a va++la+kY+ sp|P02048|HBB_LORTA 88 LSELHCDKLHVDPENFRLLGNVLVVVLAHHFGKDFTPQVQSAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P24660|HBB_MACGG Hemoglobin subunit beta OS=Macroderma gigas GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 199.8 0.0 1.6e-60 7.6e-58 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 199.8 bits; conditional E-value: 1.6e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek +v+ +W+kv +vee+G+++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P24660|HBB_MACGG 1 VHLTGEEKAAVTGLWGKV--NVEEVGGEALGRLLVVYPWTQRFFDSFGDLSSPSAVMGNPKVKAHGKKVLNSFSDGLKNLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++a va++la+kY+ sp|P24660|HBB_MACGG 88 LSELHCDKLHVDPENFRLLGNVLVCVLARHFGKEFTPQVQAAYQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|D0VX08|HBB_PTEGI Hemoglobin subunit beta OS=Pteropus giganteus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 199.6 0.1 1.8e-60 8.7e-58 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 199.6 bits; conditional E-value: 1.8e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek +v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkvld +s++l++ld +l++++++ sp|D0VX08|HBB_PTEGI 1 VHLSGEEKAAVTGLWGKV--KVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSASAVMGNPKVKAHGKKVLDSFSEGLQHLD-NLKGTFAK 87 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++a va++la+kY+ sp|D0VX08|HBB_PTEGI 88 LSELHCDKLHVDPENFRLLGNVLVCVLARHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P14391|HBB_PTEAL Hemoglobin subunit beta OS=Pteropus alecto GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 199.6 0.1 1.8e-60 8.7e-58 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 199.6 bits; conditional E-value: 1.8e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek +v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkvld +s++l++ld +l++++++ sp|P14391|HBB_PTEAL 1 VHLSGEEKAAVTGLWGKV--KVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSASAVMGNPKVKAHGKKVLDSFSEGLQHLD-NLKGTFAK 87 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++a va++la+kY+ sp|P14391|HBB_PTEAL 88 LSELHCDKLHVDPENFRLLGNVLVCVLARHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P04250|MYG_LAGMA Myoglobin OS=Lagostomus maximus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 199.3 0.3 2.2e-60 1.1e-57 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 199.3 bits; conditional E-value: 2.2e-60 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G+++L+rlfk +P+t+e+F+kFk+L++ede+++s+d+kkHg +vl+Al+ +l+k +++ a+l++L+ sp|P04250|MYG_LAGMA 3 LSDGEWQLVLNVWGKVEADLGGHGQEVLIRLFKGHPETLEKFDKFKHLKAEDEMRASEDLKKHGTTVLTALGGILKK-RGQHAAELAPLA 91 9****************************************************************************.88********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+qaa+ K+l+l+++++a+kYk sp|P04250|MYG_LAGMA 92 QSHATKHKIPVKYLEFISEAIIQVLQSKHPGDFGADAQAAMSKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P02148|MYG_PONPY Myoglobin OS=Pongo pygmaeus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 199.3 0.5 2.2e-60 1.1e-57 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 199.3 bits; conditional E-value: 2.2e-60 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead+ +G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg +vl+Al+ +l+k ++++ea++k+L+ sp|P02148|MYG_PONPY 3 LSDGEWQLVLNVWGKVEADIPSHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGATVLTALGGILKK-KGHHEAEIKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se +++vl++++p++f+ad+q+a++K+l+l++k++as+Yk sp|P02148|MYG_PONPY 92 QSHATKHKIPVKYLEFISESIIQVLQSKHPGDFGADAQGAMNKALELFRKDMASNYK 148 ********************************************************7 PP >> sp|P28781|HBB_TAPGE Hemoglobin subunit beta OS=Taphozous georgianus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 199.2 0.1 2.4e-60 1.2e-57 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 199.2 bits; conditional E-value: 2.4e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs++ +++++++vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P28781|HBB_TAPGE 1 VHLTADEKAAVTGLWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSAASAVMGNPKVKAHGKKVLNSFSDGLKNLD-NLKGTYAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K+++ va++la+kY+ sp|P28781|HBB_TAPGE 88 LSELHCDKLHVDPENFRLLGNVLVCVLARHFGKEFTPQVQAAYQKVVSGVATALAHKYH 146 **********************************************************7 PP >> sp|B3EWE2|HBB_BLABR Hemoglobin subunit beta OS=Blarina brevicauda PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 199.1 0.1 2.6e-60 1.3e-57 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 199.1 bits; conditional E-value: 2.6e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek+ v+ +W+kv +vee G+++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkvl+ ++d+la+ld +l++++++ sp|B3EWE2|HBB_BLABR 1 VHLTAEEKSLVTGLWGKV--NVEEAGGEALGRLLVVYPWTQRFFDSFGDLSSASAVMGNPKVKAHGKKVLQSMGDGLANLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++a va++la+kYk sp|B3EWE2|HBB_BLABR 88 LSELHCDKLHVDPENFRLLGNVLVVVLARHFGKEFTPPVQAAFQKVVAGVATALAHKYK 146 **********************************************************7 PP >> sp|P02058|HBB_ROUAE Hemoglobin subunit beta OS=Rousettus aegyptiacus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 199.0 0.3 2.7e-60 1.3e-57 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 199.0 bits; conditional E-value: 2.7e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek +v+a+W+kv +vee+G+++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkvld +s++l++ld l++++++ sp|P02058|HBB_ROUAE 1 VHLSGEEKAAVTALWGKV--KVEEVGGEALGRLLVVYPWTQRFFDSFGDLSSASAVMSNPKVKAHGKKVLDSFSEGLQHLD-SLKGTFAK 87 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++a va++la+kY+ sp|P02058|HBB_ROUAE 88 LSELHCDKLHVDPENFRLLGNVLVCVLARHFGKEFTPQVQAAYQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P04248|MYG_SPAEH Myoglobin OS=Spalax ehrenbergi GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 199.0 0.3 2.8e-60 1.3e-57 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 199.0 bits; conditional E-value: 2.8e-60 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kve d +++G+++L++lfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg++vl+Al+ +l+k ++++ a++++L+ sp|P04248|MYG_SPAEH 3 LSDGEWQLVLNVWGKVEGDLAGHGQEVLIKLFKNHPETLEKFDKFKHLKSEDEMKGSEDLKKHGNTVLTALGGILKK-KGQHAAEIQPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+q+a+ K+l+l+++++a+kYk sp|P04248|MYG_SPAEH 92 QSHATKHKIPIKYLEFISEAIIQVLQSKHPGDFGADAQGAMSKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P84997|MYG_BUBBU Myoglobin OS=Bubalus bubalis GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 198.8 3.0 3.2e-60 1.6e-57 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 198.8 bits; conditional E-value: 3.2e-60 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kve+dv+++G+++L+rlf+ +P+t+e+F+kFk+L+te+e+k+s+d+kkHg++vl+Al+ +l+k ++++ea++k+L+ sp|P84997|MYG_BUBBU 3 LSDGEWQLVLNAWGKVETDVAGHGQEVLIRLFTGHPETLEKFDKFKHLKTEAEMKASEDLKKHGNTVLTALGGILKK-KGHHEAEVKHLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha+k+k+++ky++++s+++++vl+ ++p++f+ad+qaa+ K+l+l+++ +a++Yk sp|P84997|MYG_BUBBU 92 ESHANKHKIPVKYLEFISDAIIHVLHDKHPSDFGADAQAAMSKALELFRNEMAAQYK 148 ********************************************************7 PP >> sp|P01924|HBA_SEMEN Hemoglobin subunit alpha OS=Semnopithecus entellus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 198.7 0.7 3.3e-60 1.6e-57 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 198.7 bits; conditional E-value: 3.3e-60 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+ + +e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl++a+a++d +++ +l++L sp|P01924|HBA_SEMEN 1 VLSPADKTNVKAAWGKVGGHGGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTNAVAHVD-DMPHALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P01924|HBA_SEMEN 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|Q9TS34|HBA2_HYLLA Hemoglobin subunit alpha-2 OS=Hylobates lar GN=HBA2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 198.7 1.5 3.4e-60 1.7e-57 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 198.7 bits; conditional E-value: 3.4e-60 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+kt+vk++W+kv+a+++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl++a+a++d +++++ + sp|Q9TS34|HBA2_HYLLA 2 VLSPADKTNVKTAWGKVGAHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTNAVAHVD-DMPNAQTA 83 8*********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls++l+++laa++p+eft++v+a+l+K+la+v+++l+skY+ sp|Q9TS34|HBA2_HYLLA 84 LSDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPAEFTPAVHASLDKFLASVSTVLTSKYR 142 **********************************************************7 PP >> sp|P14392|HBB_PTEPO Hemoglobin subunit beta OS=Pteropus poliocephalus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 198.5 0.1 3.8e-60 1.8e-57 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 198.5 bits; conditional E-value: 3.8e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek +v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkvld +s++l++ld +l++++++ sp|P14392|HBB_PTEPO 1 VHLSGEEKAAVTGLWGKV--KVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSAPAVMGNPKVKAHGKKVLDSFSEGLQHLD-NLKGTFAK 87 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++a va++la+kY+ sp|P14392|HBB_PTEPO 88 LSELHCDKLHVDPENFRLLGNVLVCVLARHFGKEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|B3EWD0|HBB_SPEBE Hemoglobin subunit beta OS=Spermophilus beecheyi PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 198.4 0.3 4.3e-60 2.1e-57 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 198.4 bits; conditional E-value: 4.3e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek+++ ++W+kv +++e+G+++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkvld +s++l++ld +l++++++ sp|B3EWD0|HBB_SPEBE 1 VHLTDGEKNALSTAWGKV--NADEVGGEALGRLLVVYPWTQRFFDSFGDLSSATAVMGNPKVKAHGKKVLDSFSNGLKHLD-NLKGTFAS 87 69****************..999**********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++l+keft++vqaa++K++a va++la+kY+ sp|B3EWD0|HBB_SPEBE 88 LSELHCDKLHVDPENFRLLGNVLVVVLAHHLGKEFTPQVQAAFQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02157|MYG_MELME Myoglobin OS=Meles meles GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 198.2 0.9 4.7e-60 2.3e-57 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 198.2 bits; conditional E-value: 4.7e-60 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg++vl+Al+ +l+k +++ ea+lk+L+ sp|P02157|MYG_MELME 3 LSDGEWQLVLNVWGKVEADLAGHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKGSEDLKKHGNTVLTALGGILKK-KGHQEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++++vl++++p++f+a++q+a++K+l+l+++++a+kYk sp|P02157|MYG_MELME 92 QSHATKHKIPVKYLEFISDAIAQVLQSKHPGNFAAEAQGAMKKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P02046|HBD_AOTTR Hemoglobin subunit delta OS=Aotus trivirgatus GN=HBD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 198.2 0.0 4.7e-60 2.3e-57 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 198.2 bits; conditional E-value: 4.7e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v a+W+kv +vee+G+++L rl++++P+tq+fFe+F+ Ls +d+++++++vk+Hgkkvl+A+sd+la+ld +l++++++ sp|P02046|HBD_AOTTR 1 VHLTGDEKSAVAALWGKV--NVEEVGGEALGRLLVVYPWTQRFFESFGALSSPDAVMGNPKVKAHGKKVLGAFSDGLAHLD-NLKGTFAQ 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft+ qaa++K++a va++la+kY+ sp|P02046|HBD_AOTTR 88 LSELHCDKLHVDPENFRLLGNVLVCVLARNFGKEFTPLLQAAFQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P19646|HBB_PAGLA Hemoglobin subunit beta OS=Paguma larvata GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 198.1 0.2 5.1e-60 2.5e-57 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 198.1 bits; conditional E-value: 5.1e-60 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++ + +vk+Hgkkvl+ +sd+l+++d +l++++++Ls sp|P19646|HBB_PAGLA 3 LTAEEKGLVNGLWGKV--NVDEVGGEALGRLLVVYPWTQRFFQSFGDLSSADAIMHNSKVKAHGKKVLNSFSDGLKHVD-DLKGTFAKLS 89 89**************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++fkll++vlv+vla++++keft++vqaa++K++a va +la++Y+ sp|P19646|HBB_PAGLA 90 ELHCDKLHVDPENFKLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVASALAHRYH 146 ********************************************************7 PP >> sp|P09421|HBB_SPECI Hemoglobin subunit beta OS=Spermophilus citellus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 198.1 1.1 5.3e-60 2.6e-57 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 198.1 bits; conditional E-value: 5.3e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls++ek+++ ++W+kv +++e+Ga++L rl++++P+tq+fF++F+dLs + +++++a+vk+Hgkkv+d +s++l++ld +l++++++ sp|P09421|HBB_SPECI 1 VHLSDGEKNAISTAWGKV--HAAEVGAEALGRLLVVYPWTQRFFDSFGDLSSASAVMGNAKVKAHGKKVIDSFSNGLKHLD-NLKGTFAS 87 69****************..99***********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++++v v+a++l+k+ft+++qaa++K++a va++la+kY+ sp|P09421|HBB_SPECI 88 LSELHCDKLHVDPENFKLLGNMIVIVMAHHLGKDFTPEAQAAFQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P09905|HBB_PHYMC Hemoglobin subunit beta-1/2 OS=Physeter macrocephalus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 198.0 0.2 5.5e-60 2.7e-57 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 198.0 bits; conditional E-value: 5.5e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek+ ++a+Wakv +vee G+++L rl++++P+tq+fFe+F+dLst+d+++k+++vkkHg+kvl ++++l++ld +l++++++ sp|P09905|HBB_PHYMC 1 VHLTGEEKSGLTALWAKV--NVEEIGGEALGRLLVVYPWTQRFFEHFGDLSTADAVMKNPKVKKHGQKVLASFGEGLKHLD-NLKGTFAT 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++ q+a++K++a va++la+kY+ sp|P09905|HBB_PHYMC 88 LSELHCDKLHVDPENFRLLGNVLVVVLARHFGKEFTPELQTAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P11754|HBB_CYNSP Hemoglobin subunit beta OS=Cynopterus sphinx GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 197.8 0.3 6.4e-60 3.1e-57 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 197.8 bits; conditional E-value: 6.4e-60 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek++v+++W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs + +++++a+vk+Hgkkvld +s++l++ld l++++++ sp|P11754|HBB_CYNSP 1 VHLSGEEKSAVTSLWGKV--KVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSASAVMGNAKVKAHGKKVLDSFSEGLQHLD-SLKGTFAK 87 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++ qaa++K++a va++la+kY+ sp|P11754|HBB_CYNSP 88 LSELHCDKLHVDPENFRLLGNVLVVVLARHFGKEFTPQLQAAYQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P02073|HBB_ALCAA Hemoglobin subunit beta OS=Alces alces alces GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 197.7 0.6 6.8e-60 3.3e-57 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 197.7 bits; conditional E-value: 6.8e-60 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek +v+a W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++ +a+vk+Hgk+vldA+s++l++ld +l++++++Ls sp|P02073|HBB_ALCAA 2 LTAEEKAAVTAFWGKV--KVDEVGGEALGRLLVVYPWTQRFFEHFGDLSTADAVMHNAKVKEHGKRVLDAFSEGLKHLD-DLKGAFAKLS 88 99**************..9***********************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla +++keft++ qa ++K++ va++la++Y+ sp|P02073|HBB_ALCAA 89 ELHCDKLHVDPENFRLLGNVLVVVLARHFGKEFTPELQADYQKVVTGVANALAHRYH 145 ********************************************************7 PP >> sp|Q7M3B6|HBA_SAGMY Hemoglobin subunit alpha OS=Saguinus mystax GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 197.7 0.7 7e-60 3.4e-57 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 197.7 bits; conditional E-value: 7e-60 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W+kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl++a+a +d +++++l++L sp|Q7M3B6|HBA_SAGMY 1 VLSPADKSNVKAAWGKVGGHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTNAVALVD-DMPNALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p++ft++v+a+l+K+la+v+++l+skY+ sp|Q7M3B6|HBA_SAGMY 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPADFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02193|MYG_DIDVI Myoglobin OS=Didelphis virginiana GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 197.7 0.5 7.1e-60 3.5e-57 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 197.7 bits; conditional E-value: 7.1e-60 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kvead+ ++G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg +vl+Al+++l+k ++++ea+lk+L+ sp|P02193|MYG_DIDVI 3 LSDGEWQLVLNAWGKVEADIPGHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGATVLTALGNILKK-KGNHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+ +++++++se++++v+++++p++f+ d+qaa+ K+l+l+++++a+kYk sp|P02193|MYG_DIDVI 92 QSHATKHKISVQFLEFISEAIIQVIQSKHPGDFGGDAQAAMGKALELFRNDMAAKYK 148 ********************************************************7 PP >> sp|P02160|MYG_VULCH Myoglobin OS=Vulpes chama GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 197.6 1.8 7.5e-60 3.6e-57 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 197.6 bits; conditional E-value: 7.5e-60 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kve+d +++G+++L+rlfk +P+t+++F+kFk+L+tede+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L+ sp|P02160|MYG_VULCH 3 LSDGEWQLVLNIWGKVETDLAGHGQEVLIRLFKNHPETLDKFDKFKHLKTEDEMKGSEDLKKHGNTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++++vl+++++++f ad +aa++K+l+l+++++a+kYk sp|P02160|MYG_VULCH 92 QSHATKHKIPVKYLEFISDAIIQVLQSKHSGDFHADTEAAMKKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P02151|MYG_AOTTR Myoglobin OS=Aotus trivirgatus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 197.6 1.8 7.6e-60 3.7e-57 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 197.6 bits; conditional E-value: 7.6e-60 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kveadv +G+++L+ lfk +P+t+e+F+kFk+L+ ede+k+s+++kkHg++vl+Al+ +l+k ++++ea+lk+L+ sp|P02151|MYG_AOTTR 3 LSDGEWQLVLNVWGKVEADVPSHGQEVLISLFKGHPETLEKFDKFKHLKSEDEMKASEELKKHGVTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++v+vl++++p++f+ad+q+a++K+l+l+++++a+kYk sp|P02151|MYG_AOTTR 92 QSHATKHKIPVKYLEFISDAIVHVLQKKHPGDFGADAQGAMKKALELFRNDMAAKYK 148 ********************************************************7 PP >> sp|P02084|HBB_ELEMA Hemoglobin subunit beta OS=Elephas maximus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 197.3 0.4 9.5e-60 4.6e-57 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 197.3 bits; conditional E-value: 9.5e-60 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++aekt+v+++W+kv +v+e G+++L rl++++P+t++fFe+F+dLst+d++ +a+v +Hg+kvl+ ++++l++ld +l+++++dL sp|P02084|HBB_ELEMA 2 NLTAAEKTQVTNLWGKV--NVKELGGEALSRLLVVYPWTRRFFEHFGDLSTADAVLHNAKVLAHGEKVLTSFGEGLKHLD-NLKGTFADL 88 79***************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv vla +++keft+dvqaa+eK++a va++la+kY+ sp|P02084|HBB_ELEMA 89 SELHCDKLHVDPENFRLLGNVLVIVLARHFGKEFTPDVQAAYEKVVAGVANALAHKYH 146 *********************************************************7 PP >> sp|Q45XI9|HBD_ELEMA Hemoglobin subunit delta OS=Elephas maximus GN=HBD PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 197.2 0.4 9.7e-60 4.7e-57 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 197.2 bits; conditional E-value: 9.7e-60 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++aekt+v+++W+kv +v+e G+++L rl++++P+t++fFe+F+dLst+d++ +a+v +Hg+kvl+ ++++l++ld +l+++++dL sp|Q45XI9|HBD_ELEMA 3 NLTAAEKTQVTNLWGKV--NVKELGGEALSRLLVVYPWTRRFFEHFGDLSTADAVLHNAKVLAHGEKVLTSFGEGLKHLD-NLKGTFADL 89 79***************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv vla +++keft+dvqaa+eK++a va++la+kY+ sp|Q45XI9|HBD_ELEMA 90 SELHCDKLHVDPENFRLLGNVLVIVLARHFGKEFTPDVQAAYEKVVAGVANALAHKYH 147 *********************************************************7 PP >> sp|P02090|HBB_SPAEH Hemoglobin subunit beta OS=Spalax ehrenbergi GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 197.2 0.5 1e-59 4.9e-57 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 197.2 bits; conditional E-value: 1e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L++aek +v +W+kv +v+e G+++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkvl+ +s++l++ld +l++++++ sp|P02090|HBB_SPAEH 1 VHLTDAEKAAVSGLWSKV--NVDEIGGEALGRLLVVYPWTQRFFDSFGDLSSPSAVMSNPKVKAHGKKVLNSFSEGLKHLD-NLKGTFSS 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++v+v+vla++l+k+ft+++qaa++K++a va++la+kY+ sp|P02090|HBB_SPAEH 88 LSELHCDKLHVDPENFKLLGNVIVVVLAHHLGKDFTPAAQAAFQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P02156|MYG_ERIEU Myoglobin OS=Erinaceus europaeus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 197.0 0.7 1.2e-59 5.7e-57 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 197.0 bits; conditional E-value: 1.2e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead+ ++G+++L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg +vl+Al+ +l+k ++++ea+l++L+ sp|P02156|MYG_ERIEU 3 LSDGEWQLVLNVWGKVEADIPGHGQEVLIRLFKDHPETLEKFDKFKHLKSEDEMKSSEDLKKHGTTVLTALGGILKK-KGQHEAQLAPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl+++++++f+ad+q+a+ K+l+l+++++a+kYk sp|P02156|MYG_ERIEU 92 QSHANKHKIPVKYLEFISEAIIQVLKSKHAGDFGADAQGAMSKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P02059|HBB_ERIEU Hemoglobin subunit beta OS=Erinaceus europaeus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.9 0.1 1.2e-59 6e-57 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 196.9 bits; conditional E-value: 1.2e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek v+ +W+kv +vee G+++L rl++++P+tq+fF++F+dLs +d+++++++vk+Hg kvl+ ++d++++ld +l++++++ sp|P02059|HBB_ERIEU 1 VHLTAEEKALVTGLWGKV--KVEEFGGEALGRLLVVYPWTQRFFDSFGDLSSADAVMGNPKVKAHGAKVLQSMGDGIKNLD-NLKGTFSK 87 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++k+ft+++qaa++K++a va++la+kY+ sp|P02059|HBB_ERIEU 88 LSELHCDKLHVDPENFRLLGNVLVCVLARHFGKDFTPAAQAAFQKVVAGVANALAAKYH 146 **********************************************************7 PP >> sp|P63113|MYG_CANFA Myoglobin OS=Canis familiaris GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.8 1.7 1.3e-59 6.1e-57 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 196.8 bits; conditional E-value: 1.3e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kve+d +++G+++L+rlfk +P+t+++F+kFk+L+tede+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L+ sp|P63113|MYG_CANFA 3 LSDGEWQIVLNIWGKVETDLAGHGQEVLIRLFKNHPETLDKFDKFKHLKTEDEMKGSEDLKKHGNTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++++vl+++++++f ad +aa++K+l+l+++++a+kYk sp|P63113|MYG_CANFA 92 QSHATKHKIPVKYLEFISDAIIQVLQSKHSGDFHADTEAAMKKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P63114|MYG_OTOME Myoglobin OS=Otocyon megalotis GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.8 1.7 1.3e-59 6.1e-57 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 196.8 bits; conditional E-value: 1.3e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kve+d +++G+++L+rlfk +P+t+++F+kFk+L+tede+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L+ sp|P63114|MYG_OTOME 3 LSDGEWQIVLNIWGKVETDLAGHGQEVLIRLFKNHPETLDKFDKFKHLKTEDEMKGSEDLKKHGNTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++++vl+++++++f ad +aa++K+l+l+++++a+kYk sp|P63114|MYG_OTOME 92 QSHATKHKIPVKYLEFISDAIIQVLQSKHSGDFHADTEAAMKKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P01929|HBA_SAGFU Hemoglobin subunit alpha OS=Saguinus fuscicollis GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.8 0.8 1.3e-59 6.2e-57 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 196.8 bits; conditional E-value: 1.3e-59 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W+kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl+ a+a++d +++++l++L sp|P01929|HBA_SAGFU 1 VLSPADKSNVKAAWGKVGGHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTVAVAHVD-DMPNALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp++ft++v+a+l+K+la+v+++l+skY+ sp|P01929|HBA_SAGFU 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPADFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02067|HBB_PIG Hemoglobin subunit beta OS=Sus scrofa GN=HBB PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.8 0.1 1.3e-59 6.4e-57 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 196.8 bits; conditional E-value: 1.3e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 v+Ls++ek++v+ +W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+ +sd+l++ld +l++++++Ls sp|P02067|HBB_PIG 2 VHLSAEEKEAVLGLWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSNADAVMGNPKVKAHGKKVLQSFSDGLKHLD-NLKGTFAKLS 90 69****************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH+++l+vdp++f+ll++v+v+vla rl+++f ++vqaa++K++a va++la+kY+ sp|P02067|HBB_PIG 91 ELHCDQLHVDPENFRLLGNVIVVVLARRLGHDFNPNVQAAFQKVVAGVANALAHKYH 147 ********************************************************7 PP >> sp|P01937|HBA_NYCCO Hemoglobin subunit alpha OS=Nycticebus coucang GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.7 1.6 1.4e-59 6.9e-57 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 196.7 bits; conditional E-value: 1.4e-59 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W kv+++++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk+Hgkkv+dAl++a+ ++d +++++l++L sp|P01937|HBA_NYCCO 1 VLSPADKTNVKAAWEKVGSHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVADALTNAVSHVD-DMPSALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la ++p++ft++v+a+l+K+la+v+++l+skY+ sp|P01937|HBA_NYCCO 84 SDLHAHKLRVDPVNFKLLSHCLLVTLACHHPADFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02152|MYG_CALJA Myoglobin OS=Callithrix jacchus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.7 1.6 1.4e-59 7e-57 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 196.7 bits; conditional E-value: 1.4e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead+ +G+++L+ lfk +P+t+e+F+kFk+L+ ede+k+s+++kkHg++vl+Al+ +l+k ++++ea+lk+L+ sp|P02152|MYG_CALJA 3 LSDGEWQLVLNVWGKVEADIPSHGQEVLISLFKGHPETLEKFDKFKHLKSEDEMKASEELKKHGVTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++v+vl++++p++f+ad+q+a++K+l+l+++++a+kYk sp|P02152|MYG_CALJA 92 QSHATKHKIPVKYLEFISDAIVHVLQKKHPGDFGADAQGAMKKALELFRNDMAAKYK 148 ********************************************************7 PP >> sp|P21667|HBB_VARVI Hemoglobin subunit beta OS=Varecia variegata GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.6 0.1 1.5e-59 7.2e-57 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 196.6 bits; conditional E-value: 1.5e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++e ++v+++W+kv +ve++G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl+A+s++l +ld +l++++++Ls sp|P21667|HBB_VARVI 3 LTPEENNHVTSLWGKV--NVEKVGGEALGRLLVVYPWTQRFFESFGDLSSPDAIMGNPKVKAHGKKVLTAFSEGLHHLD-NLKGTFAQLS 89 99**************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++fkll++vlv vla++++++f+++ qaa++K++ va++la+kY+ sp|P21667|HBB_VARVI 90 ELHCDKLHVDPQNFKLLGNVLVIVLAHHFGNDFSPQTQAAFQKVVTGVANALAHKYH 146 ********************************************************7 PP >> sp|B3EWC8|HBB_TAMMR Hemoglobin subunit beta OS=Tamias merriami PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.6 0.8 1.5e-59 7.4e-57 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 196.6 bits; conditional E-value: 1.5e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v a+W+kv + +e+G+++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkv d +s++l++ld +l++++++ sp|B3EWC8|HBB_TAMMR 1 VHLTAEEKSAVAALWGKV--NTDEVGGEALGRLLVVYPWTQRFFDSFGDLSSASAVMSNPKVKAHGKKVFDSFSNGLKHLD-NLKGTFAS 87 69****************..99***********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla++l+keft++vq+a++K++ va++la+kY+ sp|B3EWC8|HBB_TAMMR 88 LSELHCDKLHVDPENFKLLGNVLVVVLAHHLGKEFTPQVQSAFQKVVTGVANALAHKYH 146 **********************************************************7 PP >> sp|P07412|HBB_FELCA Hemoglobin subunit beta-A/B OS=Felis catus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.5 0.1 1.6e-59 8e-57 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 196.5 bits; conditional E-value: 1.6e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek v+ +W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++a+vk+Hgkkvl+ +sd+l+++d +l++++++Ls sp|P07412|HBB_FELCA 3 LTAEEKGLVNGLWGKV--NVDEVGGEALGRLLVVYPWTQRFFESFGDLSSADAIMSNAKVKAHGKKVLNSFSDGLKNID-DLKGAFAKLS 89 89**************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla++++++f ++vqaa++K++a va++la+kY+ sp|P07412|HBB_FELCA 90 ELHCDKLHVDPENFRLLGNVLVCVLAHHFGHDFNPQVQAAFQKVVAGVANALAHKYH 146 ********************************************************7 PP >> sp|P08853|HBB_MARMA Hemoglobin subunit beta OS=Marmota marmota marmota GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.4 0.7 1.7e-59 8.4e-57 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 196.4 bits; conditional E-value: 1.7e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls++ek+++ ++W+kv ++++ Ga++L rl++++P+tq+fF++F+dLs + +++++a+vk+Hgkkv+d +s++l++ld +l++++++ sp|P08853|HBB_MARMA 1 VHLSDGEKNAISTAWGKV--NAADIGAEALGRLLVVYPWTQRFFDSFGDLSSASAVMGNAKVKAHGKKVIDSFSNGLKHLD-NLKGTFAS 87 69****************..999**********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++++v v+a++l+k+ft+++qaa++K++a va++la+kY+ sp|P08853|HBB_MARMA 88 LSELHCDKLHVDPENFKLLGNMIVIVMAHHLGKDFTPEAQAAFQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02196|MYG_ORNAN Myoglobin OS=Ornithorhynchus anatinus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.2 1.1 2e-59 9.6e-57 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 196.2 bits; conditional E-value: 2e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kve d ++G+++L+rlfk++P+t+e+F+kFk+L+tede+k+sad+kkHg +vl+Al+++l+k ++++ea+lk+L+ sp|P02196|MYG_ORNAN 3 LSDGEWQLVLKVWGKVEGDLPGHGQEVLIRLFKTHPETLEKFDKFKGLKTEDEMKASADLKKHGGTVLTALGNILKK-KGQHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+ +k+++ +se++++vl+++++++f+ad+qaa+ K+l+l+++++a+kYk sp|P02196|MYG_ORNAN 92 QSHATKHKISIKFLEYISEAIIHVLQSKHSADFGADAQAAMGKALELFRNDMAAKYK 148 ********************************************************7 PP >> sp|P02195|MYG_TACAC Myoglobin OS=Tachyglossus aculeatus aculeatus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.1 3.0 2.1e-59 1e-56 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 196.1 bits; conditional E-value: 2.1e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kve+d+ ++G+d+L+rlfk++P+t+e+F+kFk+L+tede+k+sad+kkHg vl+Al+ +l+k ++++ea+lk+L+ sp|P02195|MYG_TACAC 3 LSDGEWQLVLKVWGKVETDITGHGQDVLIRLFKTHPETLEKFDKFKHLKTEDEMKASADLKKHGGVVLTALGSILKK-KGQHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+ +k+++++se++++vl+++++++f+ad+qaa+ K+l+l+++++a+kYk sp|P02195|MYG_TACAC 92 QSHATKHKISIKFLEFISEAIIHVLQSKHSADFGADAQAAMGKALELFRNDMATKYK 148 ********************************************************7 PP >> sp|P02159|MYG_LYCPI Myoglobin OS=Lycaon pictus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.0 1.7 2.3e-59 1.1e-56 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 196.0 bits; conditional E-value: 2.3e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kve+d +++G+++L+rlfk +P+t+++F+kFk+L+tede+k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L+ sp|P02159|MYG_LYCPI 3 LSDGEWQIVLNIWGKVETDLAGHGQEVLIRLFKNHPETLDKFDKFKHLKTEDEMKGSEDLKKHGNTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++++vl+++++++f ad +aa++K+l+l+++++a+kYk sp|P02159|MYG_LYCPI 92 QSHATKHKIPVKYLEFISDAIIQVLQNKHSGDFHADTEAAMKKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P67819|HBB_BOSGF Hemoglobin subunit beta OS=Bos gaurus frontalis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.0 0.5 2.3e-59 1.1e-56 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 196.0 bits; conditional E-value: 2.3e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek +v+a W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvld +s+++++ld +l++++++Ls sp|P67819|HBB_BOSGF 2 LTAEEKAAVTAFWGKV--HVDEVGGEALGRLLVVYPWTQRFFESFGDLSTADAVMNNPKVKAHGKKVLDSFSNGMKHLD-DLKGTFAALS 88 99**************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++fkll++vlv+vla +++keft+ qa ++K++a va++la++Y+ sp|P67819|HBB_BOSGF 89 ELHCDKLHVDPENFKLLGNVLVVVLARHFGKEFTPVLQADFQKVVAGVANALAHRYH 145 ********************************************************7 PP >> sp|P67820|HBB_BUBBU Hemoglobin subunit beta OS=Bubalus bubalis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 196.0 0.5 2.3e-59 1.1e-56 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 196.0 bits; conditional E-value: 2.3e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek +v+a W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvld +s+++++ld +l++++++Ls sp|P67820|HBB_BUBBU 2 LTAEEKAAVTAFWGKV--HVDEVGGEALGRLLVVYPWTQRFFESFGDLSTADAVMNNPKVKAHGKKVLDSFSNGMKHLD-DLKGTFAALS 88 99**************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++fkll++vlv+vla +++keft+ qa ++K++a va++la++Y+ sp|P67820|HBB_BUBBU 89 ELHCDKLHVDPENFKLLGNVLVVVLARHFGKEFTPVLQADFQKVVAGVANALAHRYH 145 ********************************************************7 PP >> sp|P04249|MYG_PROGU Myoglobin OS=Proechimys guairae GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 195.9 0.3 2.4e-59 1.2e-56 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 195.9 bits; conditional E-value: 2.4e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kve d ++G+++L+rlfk +P+t+e+F+kFk+L++ede+++s+++kkHg +vl+Al+ +l+k ++++ a+l++L+ sp|P04249|MYG_PROGU 3 LSDGEWQLVLNVWGKVEGDLSGHGQEVLIRLFKGHPETLEKFDKFKHLKAEDEMRASEELKKHGTTVLTALGGILKK-KGQHAAELAPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++++p++f+ad+q+a+ K+l+l+++++a+kYk sp|P04249|MYG_PROGU 92 QSHATKHKIPVKYLEFISEAIIQVLQSKHPGDFGADAQGAMSKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P63107|HBA_MACFU Hemoglobin subunit alpha OS=Macaca fuscata fuscata GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 195.7 0.6 2.8e-59 1.4e-56 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 195.7 bits; conditional E-value: 2.8e-59 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl+ a+ ++d +++++l++L sp|P63107|HBA_MACFU 2 VLSPADKSNVKAAWGKVGGHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTLAVGHVD-DMPNALSAL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P63107|HBA_MACFU 85 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|P63108|HBA_MACMU Hemoglobin subunit alpha OS=Macaca mulatta GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 195.7 0.6 2.8e-59 1.4e-56 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 195.7 bits; conditional E-value: 2.8e-59 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl+ a+ ++d +++++l++L sp|P63108|HBA_MACMU 2 VLSPADKSNVKAAWGKVGGHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTLAVGHVD-DMPNALSAL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P63108|HBA_MACMU 85 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|P04245|HBB_TRAST Hemoglobin subunit beta OS=Tragelaphus strepsiceros GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 195.7 0.3 2.9e-59 1.4e-56 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 195.7 bits; conditional E-value: 2.9e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek +v+a W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvld +s+++++ld +l++++++Ls sp|P04245|HBB_TRAST 2 LTAEEKAAVTAFWGKV--KVDEVGGEALGRLLVVYPWTQRFFESFGDLSTADAVMNNPKVKAHGKKVLDSFSNGMKHLD-DLKGTFAALS 88 99**************..9***********************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++fkll++vlv+vla +++keft++ qa ++K++ va++la++Y+ sp|P04245|HBB_TRAST 89 ELHCDKLHVDPENFKLLGNVLVVVLARHFGKEFTPELQADYQKVVTGVANALAHRYH 145 ********************************************************7 PP >> sp|P02085|HBB_LOXAF Hemoglobin subunit beta OS=Loxodonta africana GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 195.6 0.4 3e-59 1.5e-56 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 195.6 bits; conditional E-value: 3e-59 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++aekt+v+++W+kv +v+e G+++L rl++++P+t++fFe+F+dLst++++ +a+v +Hg+kvl+ ++++l++ld +l+++++dL sp|P02085|HBB_LOXAF 2 NLTAAEKTQVTNLWGKV--NVKELGGEALSRLLVVYPWTRRFFEHFGDLSTAEAVLHNAKVLAHGEKVLTSFGEGLKHLD-NLKGTFADL 88 79***************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv vla +++keft+dvqaa+eK++a va++la+kY+ sp|P02085|HBB_LOXAF 89 SELHCDKLHVDPENFRLLGNVLVIVLARHFGKEFTPDVQAAYEKVVAGVANALAHKYH 146 *********************************************************7 PP >> sp|Q45XJ0|HBD_LOXAF Hemoglobin subunit delta OS=Loxodonta africana GN=HBD PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 195.6 0.4 3.1e-59 1.5e-56 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 195.6 bits; conditional E-value: 3.1e-59 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++aekt+v+++W+kv +v+e G+++L rl++++P+t++fFe+F+dLst++++ +a+v +Hg+kvl+ ++++l++ld +l+++++dL sp|Q45XJ0|HBD_LOXAF 3 NLTAAEKTQVTNLWGKV--NVKELGGEALSRLLVVYPWTRRFFEHFGDLSTAEAVLHNAKVLAHGEKVLTSFGEGLKHLD-NLKGTFADL 89 79***************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv vla +++keft+dvqaa+eK++a va++la+kY+ sp|Q45XJ0|HBD_LOXAF 90 SELHCDKLHVDPENFRLLGNVLVIVLARHFGKEFTPDVQAAYEKVVAGVANALAHKYH 147 *********************************************************7 PP >> sp|P41328|HBB_LYNLY Hemoglobin subunit beta OS=Lynx lynx GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 195.4 0.1 3.4e-59 1.7e-56 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 195.4 bits; conditional E-value: 3.4e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++ +vk+Hgkkvl+ +sd+l+++d +l++++++Ls sp|P41328|HBB_LYNLY 3 LTAEEKGLVNGLWGKV--NVDEVGGEALGRLLVVYPWTQRFFQSFGDLSSADAIMGNSKVKAHGKKVLNSFSDGLKNID-DLKGAFAKLS 89 89**************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla+++++ef ++vqaa++K++a va++la+kY+ sp|P41328|HBB_LYNLY 90 ELHCDKLHVDPENFRLLGNVLVCVLAHHFGHEFNPQVQAAFQKVVAGVANALAHKYH 146 ********************************************************7 PP >> sp|P07410|HBB_SPETO Hemoglobin subunit beta-S/F OS=Spermophilus townsendii PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 195.3 0.7 3.7e-59 1.8e-56 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 195.3 bits; conditional E-value: 3.7e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek+++ ++W+kv +++e Ga++L rl++++P+tq+fF++F+dLs + +++++a+vk+Hgkkv+d +s++l++ld +l++++++ sp|P07410|HBB_SPETO 1 VHLTDGEKNAISTAWGKV--NAAEIGAEALGRLLVVYPWTQRFFDSFGDLSSASAVMGNAKVKAHGKKVIDSFSNGLKHLD-NLKGTFAS 87 69****************..99***********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++++v v+a++l+k+ft+++qaa++K++a va++l++kY+ sp|P07410|HBB_SPETO 88 LSELHCDKLHVDPENFKLLGNMIVIVMAHHLGKDFTPEAQAAFQKVVAGVANALSHKYH 146 **********************************************************7 PP >> sp|P20855|HBB_CTEGU Hemoglobin subunit beta OS=Ctenodactylus gundi GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 195.3 0.1 3.9e-59 1.9e-56 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 195.3 bits; conditional E-value: 3.9e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls++ek +v+ +W+kv +vee+G+++L rl++++P+tq+fFe+F+dLs +++++++++vk+Hgkkvl+ +s++l +ld +l++++++ sp|P20855|HBB_CTEGU 1 VHLSAEEKAAVTGLWGKV--NVEEVGGEALGRLLVVYPWTQRFFESFGDLSSAAAVMGNPKVKAHGKKVLTSFSEGLSHLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++++v +la++++ ef+++ qaa++K++a va++la+kY+ sp|P20855|HBB_CTEGU 88 LSELHCDKLHVDPENFRLLGNMIVITLAHHYGPEFGPQTQAAFQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02088|HBB1_MOUSE Hemoglobin subunit beta-1 OS=Mus musculus GN=Hbb-b1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 195.2 0.2 4.1e-59 2e-56 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 195.2 bits; conditional E-value: 4.1e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 v+L++aek +v +W+kv + +e+G+++L rl++++P+tq++F++F+dLs + +++++a+vk+Hgkkv++A++d+l++ld l+++++ sp|P02088|HBB1_MOUSE 2 VHLTDAEKAAVSCLWGKV--NSDEVGGEALGRLLVVYPWTQRYFDSFGDLSSASAIMGNAKVKAHGKKVITAFNDGLNHLD-SLKGTFA 87 69****************..889**********************************************************.******* PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +LselH++kl+vdp++f+ll++++v vl ++l+k+ft+++qaa++K++a va++la+kY+ sp|P02088|HBB1_MOUSE 88 SLSELHCDKLHVDPENFRLLGNMIVIVLGHHLGKDFTPAAQAAFQKVVAGVATALAHKYH 147 ***********************************************************7 PP >> sp|P21767|HBA_MACFA Hemoglobin subunit alpha-A/Q/R/T OS=Macaca fascicularis PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 195.2 0.6 4.1e-59 2e-56 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 195.2 bits; conditional E-value: 4.1e-59 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl+ a+ ++d +++++l++L sp|P21767|HBA_MACFA 1 VLSPADKTNVKAAWGKVGGHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTLAVGHVD-DMPQALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P21767|HBA_MACFA 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02153|MYG_CEBAP Myoglobin OS=Cebus apella GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 195.1 1.4 4.2e-59 2.1e-56 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 195.1 bits; conditional E-value: 4.2e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead+ +G+++L+ lfk +P+t+e+F+kFk+L+ ede+k+s+++kkHg +vl+Al+ +l+k ++++ea+lk+L+ sp|P02153|MYG_CEBAP 3 LSDGEWQLVLNVWGKVEADIPSHGQEVLISLFKGHPETLEKFDKFKHLKSEDEMKASEELKKHGATVLTALGGILKK-KGQHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++v+vl++++p++f+ad+q+a++K+l+l+++++a+kYk sp|P02153|MYG_CEBAP 92 QSHATKHKIPVKYLEFISDAIVHVLQKKHPGDFGADAQGAMKKALELFRNDMAAKYK 148 ********************************************************7 PP >> sp|P02155|MYG_SAISC Myoglobin OS=Saimiri sciureus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 195.1 1.1 4.5e-59 2.2e-56 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 195.1 bits; conditional E-value: 4.5e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kvead+ +G+++L+ lfk +P+t+e+F+kFk+L+ ede+k+s+++kkHg +vl+Al+ +l+k ++++ea+lk+L+ sp|P02155|MYG_SAISC 3 LSDGEWQLVLNIWGKVEADIPSHGQEVLISLFKGHPETLEKFDKFKHLKSEDEMKASEELKKHGTTVLTALGGILKK-KGQHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++l+s+++v+vl++++p++f+ad+q+a++K+l+l+++++a+kYk sp|P02155|MYG_SAISC 92 QSHATKHKIPVKYLELISDAIVHVLQKKHPGDFGADAQGAMKKALELFRNDMAAKYK 148 ********************************************************7 PP >> sp|P02066|HBB_CERSI Hemoglobin subunit beta OS=Ceratotherium simum GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.9 0.8 4.9e-59 2.4e-56 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 194.9 bits; conditional E-value: 4.9e-59 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L+++ek +v+a+W kv + +e+G+++L rl++++P+tq+fF++F+dLst+++++++a+vk+Hgkkvl+ ++d++ +ld +l++++++L sp|P02066|HBB_CERSI 2 ELTAEEKAAVLALWDKV--KEDEVGGEALGRLLVVYPWTQRFFDSFGDLSTPAAVMGNAKVKAHGKKVLHSFGDGVHHLD-NLKGTFAAL 88 79***************..999**********************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla++++k+ft++ qaa++K++a va++la+kY+ sp|P02066|HBB_CERSI 89 SELHCDKLHVDPENFRLLGNVLVVVLAKHFGKQFTPELQAAYQKVVAGVANALAHKYH 146 *********************************************************7 PP >> sp|P11752|HBB_MEGLY Hemoglobin subunit beta OS=Megaderma lyra GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.7 0.0 5.8e-59 2.8e-56 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 194.7 bits; conditional E-value: 5.8e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ekt+v +W+kv +vee+G+++L rl++++P+tq+fFe+F+dLs + +++++++vk+Hgkkvl+ +s++l++ld +l++++++ sp|P11752|HBB_MEGLY 1 VHLTNEEKTAVIGLWGKV--NVEEVGGEALGRLLVVYPWTQRFFESFGDLSSPSAIMGNPKVKAHGKKVLNSFSEGLKNLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll+ +l++vla +++keft++vqaa++K++a va++la+kY+ sp|P11752|HBB_MEGLY 88 LSELHCDKLHVDPENFRLLGYILLCVLARHFGKEFTPQVQAAYQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P21766|HBA_MACAS Hemoglobin subunit alpha-1/2/3 OS=Macaca assamensis PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.7 0.7 5.9e-59 2.9e-56 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 194.7 bits; conditional E-value: 5.9e-59 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl+ a+ ++d +++ +l++L sp|P21766|HBA_MACAS 1 VLSPADKTNVKAAWGKVGGHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTLAVGHVD-DMPHALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P21766|HBA_MACAS 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02060|HBB_SUNMU Hemoglobin subunit beta OS=Suncus murinus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.7 0.1 6e-59 2.9e-56 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 194.7 bits; conditional E-value: 6e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek v+ +W+kv + +e+Ga++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkvl+ l++++a+ld +l++++++ sp|P02060|HBB_SUNMU 1 VHLSGEEKACVTGLWGKV--NEDEVGAEALGRLLVVYPWTQRFFDSFGDLSSASAVMGNPKVKAHGKKVLHSLGEGVANLD-NLKGTFAK 87 69****************..99***********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|P02060|HBB_SUNMU 88 LSELHCDKLHVDPENFRLLGNVLVVVLASKFGKEFTPPVQAAFQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P04244|HBB_PANPO Hemoglobin subunit beta OS=Panthera pardus orientalis GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.6 0.1 6.1e-59 2.9e-56 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 194.6 bits; conditional E-value: 6.1e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++ek+ v +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++a+vk+Hgkkvl+ +sd+l+++d +l++++++Ls sp|P04244|HBB_PANPO 4 LSAEEKNLVSGLWGKV--NVDEVGGEALGRLLVVYPWTQRFFQSFGDLSSADAIMSNAKVKAHGKKVLNSFSDGLKNID-DLKGAFAKLS 90 9***************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla+++++ef ++vqaa++K++a va +la++Y+ sp|P04244|HBB_PANPO 91 ELHCDKLHVDPENFRLLGNVLVCVLAHHFGHEFNPQVQAAFQKVVAGVASALAHRYH 147 ********************************************************7 PP >> sp|P04346|HBBA_BOSJA Hemoglobin subunit beta-A OS=Bos javanicus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.6 0.4 6.1e-59 3e-56 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 194.6 bits; conditional E-value: 6.1e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L+++ek +v+a W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvld +sd++++ld +l++++++L sp|P04346|HBBA_BOSJA 2 LTAEEKAAVTAFWGKV--HVDEVGGEALGRLLVVYPWTQRFFESFGDLSTADAVMNNPKVKAHGKKVLDSFSDGMKHLD-DLKGTFAAL 87 99**************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++fkll++vlv+vla +++keft+ qa ++K++a va++la++Y+ sp|P04346|HBBA_BOSJA 88 SELHCDKLHVDPENFKLLGNVLVVVLARNFGKEFTPVLQADFQKVVAGVANALAHRYH 145 *********************************************************7 PP >> sp|P02089|HBB2_MOUSE Hemoglobin subunit beta-2 OS=Mus musculus GN=Hbb-b2 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.5 0.1 6.7e-59 3.3e-56 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 194.5 bits; conditional E-value: 6.7e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 v+L++aek++v +Wakv + +e+G+++L rl++++P+tq++F++F+dLs + +++++++vk+Hgkkv++A++++l++ld +l+++++ sp|P02089|HBB2_MOUSE 2 VHLTDAEKSAVSCLWAKV--NPDEVGGEALGRLLVVYPWTQRYFDSFGDLSSASAIMGNPKVKAHGKKVITAFNEGLKNLD-NLKGTFA 87 69****************..99***********************************************************.******* PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +LselH++kl+vdp++f+ll++++v vl ++l+k+ft+++qaa++K++a va++la+kY+ sp|P02089|HBB2_MOUSE 88 SLSELHCDKLHVDPENFRLLGNAIVIVLGHHLGKDFTPAAQAAFQKVVAGVATALAHKYH 147 ***********************************************************7 PP >> sp|Q45XH3|HBE_BRATR Hemoglobin subunit epsilon OS=Bradypus tridactylus GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.5 0.3 6.7e-59 3.3e-56 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 194.5 bits; conditional E-value: 6.7e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +v ++W+kv +vee G+++L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ ++da++++d +l++++++ sp|Q45XH3|HBE_BRATR 2 VHFTAEEKATVASLWGKV--NVEEAGGEVLGRLLVVYPWTQRFFDNFGNLSSSSAIMGNPKVKAHGKKVLTSFGDAVKHMD-DLKGTFAH 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v+vla++++keft++vqaa +Kl+ va++la+kY+ sp|Q45XH3|HBE_BRATR 89 LSELHCDKLHVDPENFRLLGNVMVVVLASHFGKEFTPEVQAAWQKLVGGVANALAHKYH 147 **********************************************************7 PP >> sp|P01926|HBA_CHLAE Hemoglobin subunit alpha OS=Chlorocebus aethiops GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.5 0.8 6.9e-59 3.3e-56 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 194.5 bits; conditional E-value: 6.9e-59 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl+ a+ ++d +++ +l++L sp|P01926|HBA_CHLAE 2 VLSPADKSNVKAAWGKVGGHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTLAVGHVD-DMPHALSAL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P01926|HBA_CHLAE 85 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|Q7M2Y5|HBB2_CHAMP Hemoglobin subunit beta-2 OS=Chalinolobus morio GN=HBB2 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.3 0.1 7.4e-59 3.6e-56 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 194.3 bits; conditional E-value: 7.4e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 v+L+ +ek +v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs + +++++a+vk+Hgkkvl+A++++l++ld +l+++++ sp|Q7M2Y5|HBB2_CHAMP 2 VHLTGEEKAAVTGLWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSNAGAVMGNAKVKAHGKKVLNAFGEGLKNLD-NLKGTFA 87 689***************..*************************************************************.******* PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +LselH++kl+vdp++f+ll++vlv+vla +++k+ft++vqaa++Kl va++la+kY+ sp|Q7M2Y5|HBB2_CHAMP 88 KLSELHCDKLHVDPENFRLLGNVLVVVLARHFGKDFTPPVQAAFQKLALGVATALAHKYH 147 ***********************************************************7 PP >> sp|P19002|HBA_MACNE Hemoglobin subunit alpha-1/2/3 OS=Macaca nemestrina PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.2 0.5 8.2e-59 4e-56 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 194.2 bits; conditional E-value: 8.2e-59 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl+ a+ ++d +++++l++L sp|P19002|HBA_MACNE 1 VLSPADKTNVKAAWGKVGGHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTLAVDHVD-DMPQALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v ++l+skY+ sp|P19002|HBA_MACNE 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVGTVLTSKYR 141 *********************************************************7 PP >> sp|P18988|HBB2_PANLE Hemoglobin subunit beta-2 OS=Panthera leo GN=HBB2 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.1 0.1 8.7e-59 4.2e-56 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 194.1 bits; conditional E-value: 8.7e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls++ek v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++a+vk+Hgkkvl+ +sd+l+++d +l++++++L sp|P18988|HBB2_PANLE 3 LSAEEKGLVNGLWSKV--NVDEVGGEALGRLLVVYPWTQRFFQSFGDLSSADAIMSNAKVKAHGKKVLNSFSDGLKNID-DLKGAFAKL 88 9***************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla+++++ef ++vqaa++K++a va +la+kY+ sp|P18988|HBB2_PANLE 89 SELHCDKLHVDPENFRLLGNVLVCVLAHHFGHEFNPQVQAAFQKVVAGVASALAHKYH 146 *********************************************************7 PP >> sp|P11517|HBB2_RAT Hemoglobin subunit beta-2 OS=Rattus norvegicus PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.0 0.2 9.6e-59 4.7e-56 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 194.0 bits; conditional E-value: 9.6e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 v+L++aek +v +W+kv +++++Ga++L rl++++P+tq++F kF+dLs + +++++++vk+Hgkkv++A++d+l++ld +l++++++L sp|P11517|HBB2_RAT 2 VHLTDAEKATVSGLWGKV--NADNVGAEALGRLLVVYPWTQRYFSKFGDLSSASAIMGNPQVKAHGKKVINAFNDGLKHLD-NLKGTFAHL 89 69****************..999**********************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++++v vl ++l+keft+ +qaa++K++a va +la+kY+ sp|P11517|HBB2_RAT 90 SELHCDKLHVDPENFRLLGNMIVIVLGHHLGKEFTPCAQAAFQKVVAGVASALAHKYH 147 *********************************************************7 PP >> sp|P07415|HBB_TRIIN Hemoglobin subunit beta OS=Trichechus inunguis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.0 0.1 9.6e-59 4.6e-56 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 194.0 bits; conditional E-value: 9.6e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek v +Wakv +v+e+G+++L rl++++P+tq+fFe+F+dLs + +++++++vk+Hg+kv + ++d+l++l+ +l++++++ sp|P07415|HBB_TRIIN 1 VHLTPEEKALVIGLWAKV--NVKEYGGEALGRLLVVYPWTQRFFEHFGDLSSASAIMNNPKVKAHGEKVFTSFGDGLKHLE-DLKGAFAE 87 69****************..***********************************************************98.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++kef++++qaa++K++a va++la+kY+ sp|P07415|HBB_TRIIN 88 LSELHCDKLHVDPENFRLLGNVLVCVLARHFGKEFSPEAQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P30562|MYG_PHOSI Myoglobin OS=Phoca sibirica GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.0 1.6 9.7e-59 4.7e-56 3 148 .. 3 147 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 194.0 bits; conditional E-value: 9.7e-59 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+ v++vW+k e+d +++G+++L+rlfks+P+t+e+F+kFk+L+ ed+++ s d++kHg++vl+Al+ +l+k ++++ea+lk+L+ sp|P30562|MYG_PHOSI 3 LSDGEWHLVLNVWGKWETDLAGHGQEVLIRLFKSHPETLEKFDKFKHLKSEDDMRRSFDLRKHGNTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 ++Ha+k+k+++ky++++se++++vl++++p+ef+ad+qaa++K+l+l+++++a+k sp|P30562|MYG_PHOSI 92 QSHATKHKIPIKYLEFISEAIIHVLHSKHPAEFGADAQAAMKKALELFRNDIAAKI 147 *****************************************************995 PP >> sp|Q45XI8|HBD_TRIMA Hemoglobin subunit delta OS=Trichechus manatus GN=HBD PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 194.0 0.1 9.8e-59 4.8e-56 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 194.0 bits; conditional E-value: 9.8e-59 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek v +Wakv +v+e+G+++L rl++++P+tq+fFe+F+dLs + +++++++vk+Hg+kv + ++d+l++l+ +l++++++ sp|Q45XI8|HBD_TRIMA 2 VHLTPEEKALVIGLWAKV--NVKEYGGEALGRLLVVYPWTQRFFEHFGDLSSASAIMNNPKVKAHGEKVFTSFGDGLKHLE-DLKGAFAE 88 69****************..***********************************************************98.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++kef++++qaa++K++a va++la+kY+ sp|Q45XI8|HBD_TRIMA 89 LSELHCDKLHVDPENFRLLGNVLVCVLARHFGKEFSPEAQAAYQKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P21768|HBA_MACSI Hemoglobin subunit alpha-1/2 OS=Macaca sinica PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.9 0.5 1e-58 4.9e-56 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 193.9 bits; conditional E-value: 1e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk +W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl+ a+ ++d +++++l++L sp|P21768|HBA_MACSI 1 VLSPADKTNVKDAWGKVGGHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTLAVGHVD-DMPQALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P21768|HBA_MACSI 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P09840|HBB_MACCA Hemoglobin subunit beta OS=Macrotus californicus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.7 0.1 1.1e-58 5.5e-56 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 193.7 bits; conditional E-value: 1.1e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek++v a+W+kv +vee G+++L rl++++P+tq+fF++F+dLs + ++ ++a+vk Hgkkvld +s+++++ld +l++++++ sp|P09840|HBB_MACCA 1 VHLTGEEKSTVSALWGKV--NVEEIGGEALGRLLVVYPWTQRFFDSFGDLSSPSAVFGNAKVKSHGKKVLDSFSNGMQHLD-NLKGTFAK 87 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++a va++la+kY+ sp|P09840|HBB_MACCA 88 LSELHCDKLHVDPENFRLLGNVLVVVLARNFGKEFTPQVQAAYQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|Q862A7|HBA_PIPAB Hemoglobin subunit alpha OS=Pipistrellus abramus GN=HBA PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.7 0.6 1.2e-58 5.7e-56 2 149 .] 2 143 .] 1 143 [] 0.99 Alignments for each domain: == domain 1 score: 193.7 bits; conditional E-value: 1.2e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk+Hgkkv dAl++a+ ++d +l+++l++L sp|Q862A7|HBA_PIPAB 2 VLSPADKTNVKAAWDKVGGHAGDYGAEALERMFLSFPTTKTYFPHFSDLS-----HGSAQVKAHGKKVGDALNNAVGHMD-DLPTALSAL 85 8*************************************************.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la ++p+eft++v+a+l+K+la v+++l skY+ sp|Q862A7|HBA_PIPAB 86 SDLHAHKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFLANVSTVLVSKYR 143 *********************************************************7 PP >> sp|B2KHZ4|HBB_RHIFE Hemoglobin subunit beta OS=Rhinolophus ferrumequinum GN=HBB PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.6 0.0 1.3e-58 6.2e-56 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 193.6 bits; conditional E-value: 1.3e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +++++++a+vk+Hgkkvld +s++l++ld +l++++++ sp|B2KHZ4|HBB_RHIFE 2 VHLTGEEKGIVTGLWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSAAAVMGNAKVKAHGKKVLDSFSEGLKNLD-NLKGTFAK 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqaa++K++ va++la+kY+ sp|B2KHZ4|HBB_RHIFE 89 LSELHCDKLHVDPENFRLLGNVLVCVLARNFGKEFTPQVQAAYQKVVVGVATALAHKYH 147 **********************************************************7 PP >> sp|P01930|HBA_PILBA Hemoglobin subunit alpha OS=Piliocolobus badius GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.6 0.7 1.3e-58 6.3e-56 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 193.6 bits; conditional E-value: 1.3e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk++W+kv+ + +e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl+ a a++d +++++l++L sp|P01930|HBA_PILBA 2 VLSPADKTNVKTAWGKVGGHGGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTLAAAHVD-DMPSALSAL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p+eft++v+a+l+K+la+v+++l+skY+ sp|P01930|HBA_PILBA 85 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPAEFTPAVHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|P81042|HBE_MACEU Hemoglobin subunit epsilon OS=Macropus eugenii GN=HBE1 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.5 0.5 1.3e-58 6.4e-56 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 193.5 bits; conditional E-value: 1.3e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ekt++++vW+kv +vee+G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ l++a+++ld +l+a++++ sp|P81042|HBE_MACEU 2 VHFTAEEKTAITSVWGKV--NVEETGGEALGRLLVVYPWTQRFFDSFGNLSSASAILGNPKVKAHGKKVLTSLGEAVKNLD-NLKATFSK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++v+aa +Kl+a va +la+kY+ sp|P81042|HBE_MACEU 89 LSELHCDKLHVDPENFRLLGNVLVVVLAVHFGKEFTPEVHAAWQKLVAGVASALAHKYH 147 **********************************************************7 PP >> sp|P68230|HBB_CAMBA Hemoglobin subunit beta OS=Camelus bactrianus GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.5 0.1 1.3e-58 6.5e-56 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 193.5 bits; conditional E-value: 1.3e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek++v+ +W+kv +v+e+G+++L rl++++P+t++fFe+F+dLst+d+++++++vk+Hg kvl+ ++d+l++ld +l++++++ sp|P68230|HBB_CAMBA 2 VHLSGDEKNAVHGLWSKV--KVDEVGGEALGRLLVVYPWTRRFFESFGDLSTADAVMNNPKVKAHGSKVLNSFGDGLNHLD-NLKGTYAK 88 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft+d qaa++K++a va++la++Y+ sp|P68230|HBB_CAMBA 89 LSELHCDKLHVDPENFRLLGNVLVVVLARHFGKEFTPDLQAAYQKVVAGVANALAHRYH 147 **********************************************************7 PP >> sp|P68231|HBB_CAMDR Hemoglobin subunit beta OS=Camelus dromedarius GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.5 0.1 1.3e-58 6.5e-56 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 193.5 bits; conditional E-value: 1.3e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek++v+ +W+kv +v+e+G+++L rl++++P+t++fFe+F+dLst+d+++++++vk+Hg kvl+ ++d+l++ld +l++++++ sp|P68231|HBB_CAMDR 2 VHLSGDEKNAVHGLWSKV--KVDEVGGEALGRLLVVYPWTRRFFESFGDLSTADAVMNNPKVKAHGSKVLNSFGDGLNHLD-NLKGTYAK 88 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft+d qaa++K++a va++la++Y+ sp|P68231|HBB_CAMDR 89 LSELHCDKLHVDPENFRLLGNVLVVVLARHFGKEFTPDLQAAYQKVVAGVANALAHRYH 147 **********************************************************7 PP >> sp|P02154|MYG_LAGLA Myoglobin OS=Lagothrix lagotricha GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.5 1.1 1.3e-58 6.5e-56 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 193.5 bits; conditional E-value: 1.3e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kvead+ +G+++L+ lfk +P+t+e+F+kFk+L+ ede+k+s+++kkHg++vl+Al+ +l+k ++++ea+lk+L+ sp|P02154|MYG_LAGLA 3 LSDGEWQLVLNIWGKVEADIPSHGQEVLISLFKGHPETLEKFDKFKHLKSEDEMKASEELKKHGVTVLTALGGILKK-KGQHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++++ l++++p++f+ad+q+a++K+l+l+++++a+kYk sp|P02154|MYG_LAGLA 92 QSHATKHKIPVKYLEFISDAIIHALQKKHPGDFGADAQGAMKKALELFRNDMAAKYK 148 ********************************************************7 PP >> sp|P01938|HBA_LORTA Hemoglobin subunit alpha OS=Loris tardigradus GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.5 1.2 1.3e-58 6.5e-56 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 193.5 bits; conditional E-value: 1.3e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk++W kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk+Hgkkv+dAl+ a+ ++d +++++l++L sp|P01938|HBA_LORTA 1 VLSPADKTNVKTAWEKVGGHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVADALTTAVSHVD-DMPSALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la ++p++ft++v+a+l+K+la+v+++l+skY+ sp|P01938|HBA_LORTA 84 SDLHAHKLRVDPVNFKLLSHCLLVTLACHHPADFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P68064|HBB2_PANON Hemoglobin subunit beta-2 OS=Panthera onca GN=HBB2 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.5 0.1 1.4e-58 6.7e-56 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 193.5 bits; conditional E-value: 1.4e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls++ek v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++a+vk+Hgkkvl+ +sd+l+++d +l++++++L sp|P68064|HBB2_PANON 4 LSAEEKGLVNGLWSKV--NVDEVGGEALGRLLVVYPWTQRFFQSFGDLSSADAIMSNAKVKAHGKKVLNSFSDGLKNID-DLKGAFAKL 89 9***************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla+++++ef ++vqaa++K++a vak+la++Y+ sp|P68064|HBB2_PANON 90 SELHCDKLHVDPENFRLLGNVLVCVLAHHFGHEFNPQVQAAFQKVVAGVAKALAHRYH 147 *********************************************************7 PP >> sp|P68087|HBB1_CHAMP Hemoglobin subunit beta-1 OS=Chalinolobus morio GN=HBB1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.4 0.1 1.5e-58 7.2e-56 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 193.4 bits; conditional E-value: 1.5e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 v+L+ +ek +v+ +W+kv +vee+G+++L rl++++P+tq+fF++F+dLs + +++++a+vk+Hgkkvl+ ++++l++ld +l+++++ sp|P68087|HBB1_CHAMP 2 VHLTGEEKAAVTGLWGKV--NVEEVGGEALGRLLVVYPWTQRFFDSFGDLSNAGAVMGNAKVKAHGKKVLNSFGEGLKNLD-NLKGTFA 87 689***************..*************************************************************.******* PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +LselH++kl+vdp++f+ll++vlv+vla +++k+ft++vqaa++Kl + va++la+kY+ sp|P68087|HBB1_CHAMP 88 KLSELHCDKLHVDPENFRLLGNVLVVVLARHFGKDFTPPVQAAFQKLAQGVATALAHKYH 147 ***********************************************************7 PP >> sp|P09907|HBB_RHIUN Hemoglobin subunit beta OS=Rhinoceros unicornis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.4 0.2 1.5e-58 7.3e-56 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 193.4 bits; conditional E-value: 1.5e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L+++ek +v+a+W+kv + +e+G+++L rl++++P+tq+fF++F+dLst++++ ++a+vk+Hgkkvl+ ++d++ +ld +l++++++L sp|P09907|HBB_RHIUN 2 DLTAEEKAAVLALWGKV--NEDEVGGEALGRLLVVYPWTQRFFDSFGDLSTPAAVLGNAKVKAHGKKVLHSFGDGVHNLD-NLKGTYAAL 88 69***************..99***********************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla+++++eft++ qaa++K++a va++la+kY+ sp|P09907|HBB_RHIUN 89 SELHCDKLHVDPENFRLLGNVLVVVLAQHFGQEFTPELQAAYQKVVAGVANALAHKYH 146 *********************************************************7 PP >> sp|Q28338|HBE_CHEME Hemoglobin subunit epsilon OS=Cheirogaleus medius GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.3 0.3 1.5e-58 7.4e-56 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 193.3 bits; conditional E-value: 1.5e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek++++++W+kv +vee G+++L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ +++a++++d +l++++++ sp|Q28338|HBE_CHEME 2 VHFTAEEKSTILSLWGKV--NVEEAGGEALGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSFGEAVKNMD-NLKGAFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++v+v +la++++keft+dvqaa +Kl++ va++la+kY+ sp|Q28338|HBE_CHEME 89 LSELHCDKLHVDPENFKLLGNVMVIILATHFGKEFTPDVQAAWQKLVSGVATALAHKYH 147 **********************************************************7 PP >> sp|P02070|HBB_BOVIN Hemoglobin subunit beta OS=Bos taurus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.2 0.3 1.7e-58 8.4e-56 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 193.2 bits; conditional E-value: 1.7e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek +v+a W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLst+d+++++++vk+Hgkkvld +s+++++ld +l++++++Ls sp|P02070|HBB_BOVIN 2 LTAEEKAAVTAFWGKV--KVDEVGGEALGRLLVVYPWTQRFFESFGDLSTADAVMNNPKVKAHGKKVLDSFSNGMKHLD-DLKGTFAALS 88 99**************..9***********************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++fkll++vlv+vla +++keft+ qa ++K++a va++la++Y+ sp|P02070|HBB_BOVIN 89 ELHCDKLHVDPENFKLLGNVLVVVLARNFGKEFTPVLQADFQKVVAGVANALAHRYH 145 ********************************************************7 PP >> sp|P11756|HBB_TADBR Hemoglobin subunit beta OS=Tadarida brasiliensis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.1 0.1 1.8e-58 8.6e-56 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 193.1 bits; conditional E-value: 1.8e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek +v+a+W+kv + ee+G+++L rl++++P+tq+fF++F+dLs + +++++a+vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P11756|HBB_TADBR 1 VHLSGEEKGAVTALWGKV--NQEEVGGEALGRLLVVYPWTQRFFDSFGDLSSASAVMGNAKVKAHGKKVLNSFSDGLKNLD-NLKGAFAK 87 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla ++keft++vq+a++K+ a va++la+kY+ sp|P11756|HBB_TADBR 88 LSELHCDKLHVDPENFKLLGNVLVVVLARTFGKEFTPPVQSAFQKVAAGVATALAHKYH 146 **********************************************************7 PP >> sp|P01935|HBA3_PANTR Hemoglobin subunit alpha-3 OS=Pan troglodytes PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 193.1 0.9 1.8e-58 8.8e-56 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 193.1 bits; conditional E-value: 1.8e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+kt+vka+W+kv+a+++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv++Als+a+++ld +++++l++ sp|P01935|HBA3_PANTR 1 VLSPADKTNVKAAWGKVGAHAGZYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAZVKGHGKKVAKALSBAVZHLD-DMPNALSA 82 69********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+v+p +fkll ++l+++laa +p++ft++v+a+++K+la+v+++l+skY+ sp|P01935|HBA3_PANTR 83 LSBLHAHKLRVBPVBFKLLNHCLLVTLAABFPSZFTPAVHASVDKFLASVSTVLTSKYR 141 **********************************************************7 PP >> sp|P02091|HBB1_RAT Hemoglobin subunit beta-1 OS=Rattus norvegicus GN=Hbb PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.9 0.1 2.1e-58 1e-55 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 192.9 bits; conditional E-value: 2.1e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 v+L++aek +v+ +W+kv + +++G+++L rl++++P+tq++F++F+dLs + +++++++vk+Hgkkv++A++d+l++ld +l++++++L sp|P02091|HBB1_RAT 2 VHLTDAEKAAVNGLWGKV--NPDDVGGEALGRLLVVYPWTQRYFDSFGDLSSASAIMGNPKVKAHGKKVINAFNDGLKHLD-NLKGTFAHL 89 69****************..99***********************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++++v vl ++l+keft+ +qaa++K++a va +la+kY+ sp|P02091|HBB1_RAT 90 SELHCDKLHVDPENFRLLGNMIVIVLGHHLGKEFTPCAQAAFQKVVAGVASALAHKYH 147 *********************************************************7 PP >> sp|P02086|HBB_PROHA Hemoglobin subunit beta OS=Procavia capensis habessinica GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.8 0.3 2.2e-58 1.1e-55 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 192.8 bits; conditional E-value: 2.2e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L++aek +v+ +W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++ +++v +Hgkkvl ++d+l++ld +l++++++ sp|P02086|HBB_PROHA 1 VHLTDAEKAAVTGLWGKV--KVDEYGGEALGRLLVVYPWTQRFFEHFGDLSNADAIMHNPKVLAHGKKVLSSFGDGLNHLD-NLKGTFAQ 87 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla ++ +eft+dvqaa++K++ va++la+kY+ sp|P02086|HBB_PROHA 88 LSELHCDKLHVDPENFRLLGNVLVVVLARHFHEEFTPDVQAAFQKVVTGVANALAHKYH 146 **********************************************************7 PP >> sp|P02194|MYG_MACRU Myoglobin OS=Macropus rufus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.8 1.9 2.2e-58 1.1e-55 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 192.8 bits; conditional E-value: 2.2e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v+++W+kve+d +++G+d+L+rlfk +P+t+e+F+kFk+L+ ede+k+s+d+kkHg +vl+Al+++l+k ++++ea+lk+L+ sp|P02194|MYG_MACRU 3 LSDGEWQLVLNIWGKVETDEGGHGKDVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGITVLTALGNILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++++++++s+++++v++++++++f+ad+qaa++K+l+l+++++a+kYk sp|P02194|MYG_MACRU 92 QSHATKHKIPVQFLEFISDAIIQVIQSKHAGNFGADAQAAMKKALELFRHDMAAKYK 148 ********************************************************7 PP >> sp|Q28356|HBE_DAUMA Hemoglobin subunit epsilon OS=Daubentonia madagascariensis GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.7 0.2 2.3e-58 1.1e-55 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 192.7 bits; conditional E-value: 2.3e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek ++ ++W+kv +vee G+++L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ ++da++++d +l++++++ sp|Q28356|HBE_DAUMA 2 VHFTAEEKATIMSLWGKV--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSASAIMGNPKVKAHGKKVLTSFGDAVKNMD-NLKGAFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft+dvqaa +Kl++ va++la+kY+ sp|Q28356|HBE_DAUMA 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPDVQAAWQKLVSGVATALAHKYH 147 **********************************************************7 PP >> sp|Q95238|HBE_PROVE Hemoglobin subunit epsilon OS=Propithecus verreauxi GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.7 0.2 2.4e-58 1.2e-55 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 192.7 bits; conditional E-value: 2.4e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek+++++vW+kv +vee G+++L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ +++a++++d +l++++++ sp|Q95238|HBE_PROVE 2 VHFTAEEKSTILSVWGKV--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAIMGNPKVKAHGKKVLTSFGEAVKNMD-NLKGAFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++++v +la++++keft+dvqaa +Kl++ va++la+kY+ sp|Q95238|HBE_PROVE 89 LSELHCDKLHVDPENFKLLGNAMVIILATHFGKEFTPDVQAAWQKLVSGVATALAHKYH 147 **********************************************************7 PP >> sp|P68050|HBB1_PANLE Hemoglobin subunit beta-1 OS=Panthera leo GN=HBB1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.5 0.1 2.8e-58 1.4e-55 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 192.5 bits; conditional E-value: 2.8e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls++ek v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++a+vk+Hgkkvl+ +sd+l+++d +l++++++L sp|P68050|HBB1_PANLE 3 LSAEEKGLVNGLWSKV--NVDEVGGEALGRLLVVYPWTQRFFQSFGDLSSADAIMSNAKVKAHGKKVLNSFSDGLKNID-DLKGAFAKL 88 9***************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla+++++ef ++vqaa++K++a va +la++Y+ sp|P68050|HBB1_PANLE 89 SELHCDKLHVDPENFRLLGNVLVCVLAHHFGHEFNPQVQAAFQKVVAGVASALAHRYH 146 *********************************************************7 PP >> sp|P01934|HBA3_GORGO Hemoglobin subunit alpha-3 OS=Gorilla gorilla gorilla PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.4 0.9 2.9e-58 1.4e-55 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 192.4 bits; conditional E-value: 2.9e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+kt+vka+W+kv+a+++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv++Al++a+++ld +++++l++ sp|P01934|HBA3_GORGO 1 VLSPADKTNVKAAWGKVGAHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAZVKGHGKKVAKALTBAVZHLD-DMPNALSA 82 69********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+v+p +fkll ++l+++laa +p++ft++v+a+++K+la+v+++l+skY+ sp|P01934|HBA3_GORGO 83 LSBLHAHKLRVBPVBFKLLNHCLLVTLAABFPSZFTPAVHASVDKFLASVSTVLTSKYR 141 **********************************************************7 PP >> sp|P68048|HBB1_PANTS Hemoglobin subunit beta-1 OS=Panthera tigris sumatrae GN=HBB1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.4 0.1 2.9e-58 1.4e-55 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 192.4 bits; conditional E-value: 2.9e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls++ek v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++a+vk+Hgkkvl+ +sd+l+++d +l++++++L sp|P68048|HBB1_PANTS 4 LSAEEKGLVNGLWSKV--NVDEVGGEALGRLLVVYPWTQRFFQSFGDLSSADAIMSNAKVKAHGKKVLNSFSDGLKNID-DLKGAFAKL 89 9***************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla+++++ef ++vqaa++K++a va +la++Y+ sp|P68048|HBB1_PANTS 90 SELHCDKLHVDPENFRLLGNVLVCVLAHHFGHEFNPQVQAAFQKVVAGVASALAHRYH 147 *********************************************************7 PP >> sp|P68049|HBB1_PANON Hemoglobin subunit beta-1 OS=Panthera onca GN=HBB1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.4 0.1 2.9e-58 1.4e-55 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 192.4 bits; conditional E-value: 2.9e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls++ek v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++a+vk+Hgkkvl+ +sd+l+++d +l++++++L sp|P68049|HBB1_PANON 4 LSAEEKGLVNGLWSKV--NVDEVGGEALGRLLVVYPWTQRFFQSFGDLSSADAIMSNAKVKAHGKKVLNSFSDGLKNID-DLKGAFAKL 89 9***************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla+++++ef ++vqaa++K++a va +la++Y+ sp|P68049|HBB1_PANON 90 SELHCDKLHVDPENFRLLGNVLVCVLAHHFGHEFNPQVQAAFQKVVAGVASALAHRYH 147 *********************************************************7 PP >> sp|P68051|HBB1_PANPS Hemoglobin subunit beta-1 OS=Panthera pardus saxicolor GN=HBB1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.4 0.1 2.9e-58 1.4e-55 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 192.4 bits; conditional E-value: 2.9e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls++ek v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++a+vk+Hgkkvl+ +sd+l+++d +l++++++L sp|P68051|HBB1_PANPS 4 LSAEEKGLVNGLWSKV--NVDEVGGEALGRLLVVYPWTQRFFQSFGDLSSADAIMSNAKVKAHGKKVLNSFSDGLKNID-DLKGAFAKL 89 9***************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla+++++ef ++vqaa++K++a va +la++Y+ sp|P68051|HBB1_PANPS 90 SELHCDKLHVDPENFRLLGNVLVCVLAHHFGHEFNPQVQAAFQKVVAGVASALAHRYH 147 *********************************************************7 PP >> sp|P68065|HBB2_PANPS Hemoglobin subunit beta-2 OS=Panthera pardus saxicolor GN=HBB2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.4 0.1 3e-58 1.5e-55 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 192.4 bits; conditional E-value: 3e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls++ek v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++a+vk+Hgkkvl+ +sd+l+++d +l++++++L sp|P68065|HBB2_PANPS 3 LSAEEKGLVNGLWSKV--NVDEVGGEALGRLLVVYPWTQRFFQSFGDLSSADAIMSNAKVKAHGKKVLNSFSDGLKNID-DLKGAFAKL 88 9***************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla+++++ef ++vqaa++K++a va +la++Y+ sp|P68065|HBB2_PANPS 89 SELHCDKLHVDPENFRLLGNVLVCVLAHHFGHEFNPQVQAAFQKVVAGVASALAHRYH 146 *********************************************************7 PP >> sp|P68194|HBB2_PANTS Hemoglobin subunit beta-2 OS=Panthera tigris sumatrae GN=HBB2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.4 0.1 3e-58 1.5e-55 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 192.4 bits; conditional E-value: 3e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls++ek v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs +d+++++a+vk+Hgkkvl+ +sd+l+++d +l++++++L sp|P68194|HBB2_PANTS 3 LSAEEKGLVNGLWSKV--NVDEVGGEALGRLLVVYPWTQRFFQSFGDLSSADAIMSNAKVKAHGKKVLNSFSDGLKNID-DLKGAFAKL 88 9***************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla+++++ef ++vqaa++K++a va +la++Y+ sp|P68194|HBB2_PANTS 89 SELHCDKLHVDPENFRLLGNVLVCVLAHHFGHEFNPQVQAAFQKVVAGVASALAHRYH 146 *********************************************************7 PP >> sp|P09422|HBB_BISBO Hemoglobin subunit beta OS=Bison bonasus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.3 0.8 3.2e-58 1.6e-55 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 192.3 bits; conditional E-value: 3.2e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek +v+a W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++a+vk+Hgkkvld +s+++++ld +l++++++Ls sp|P09422|HBB_BISBO 2 LTAEEKAAVTAFWGKV--HVDEVGGEALGRLLVVYPWTQRFFESFGDLSSADAVMNNAKVKAHGKKVLDSFSNGMKHLD-DLKGTFAALS 88 99**************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++fkll++vlv+vla +++keft+ qa ++K++ va++la++Y+ sp|P09422|HBB_BISBO 89 ELHCDKLHVDPENFKLLGNVLVVVLARHFGKEFTPVLQADFQKVVTGVANALAHRYH 145 ********************************************************7 PP >> sp|P68226|HBB_LAMGL Hemoglobin subunit beta OS=Lama glama GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.2 0.0 3.4e-58 1.6e-55 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 192.2 bits; conditional E-value: 3.4e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls +ek++v+ +W+kv +v+e+G+++L rl++++P+t++fFe+F+dLst+d+++++++vk+Hg kvl+ ++d+l +ld +l++++++L sp|P68226|HBB_LAMGL 3 NLSGDEKNAVHGLWSKV--KVDEVGGEALGRLLVVYPWTRRFFESFGDLSTADAVMNNPKVKAHGSKVLNSFGDGLSHLD-NLKGTYAKL 89 79***************..9************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla +++keft+d qaa++K++a va++la++Y+ sp|P68226|HBB_LAMGL 90 SELHCDKLHVDPENFRLLGNVLVVVLARHFGKEFTPDLQAAYQKVVAGVANALAHRYH 147 *********************************************************7 PP >> sp|P68227|HBB_LAMVI Hemoglobin subunit beta OS=Lama vicugna GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.2 0.0 3.4e-58 1.6e-55 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 192.2 bits; conditional E-value: 3.4e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls +ek++v+ +W+kv +v+e+G+++L rl++++P+t++fFe+F+dLst+d+++++++vk+Hg kvl+ ++d+l +ld +l++++++L sp|P68227|HBB_LAMVI 3 NLSGDEKNAVHGLWSKV--KVDEVGGEALGRLLVVYPWTRRFFESFGDLSTADAVMNNPKVKAHGSKVLNSFGDGLSHLD-NLKGTYAKL 89 79***************..9************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla +++keft+d qaa++K++a va++la++Y+ sp|P68227|HBB_LAMVI 90 SELHCDKLHVDPENFRLLGNVLVVVLARHFGKEFTPDLQAAYQKVVAGVANALAHRYH 147 *********************************************************7 PP >> sp|P68228|HBB_LAMPA Hemoglobin subunit beta OS=Lama guanicoe pacos GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.2 0.0 3.4e-58 1.6e-55 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 192.2 bits; conditional E-value: 3.4e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls +ek++v+ +W+kv +v+e+G+++L rl++++P+t++fFe+F+dLst+d+++++++vk+Hg kvl+ ++d+l +ld +l++++++L sp|P68228|HBB_LAMPA 3 NLSGDEKNAVHGLWSKV--KVDEVGGEALGRLLVVYPWTRRFFESFGDLSTADAVMNNPKVKAHGSKVLNSFGDGLSHLD-NLKGTYAKL 89 79***************..9************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla +++keft+d qaa++K++a va++la++Y+ sp|P68228|HBB_LAMPA 90 SELHCDKLHVDPENFRLLGNVLVVVLARHFGKEFTPDLQAAYQKVVAGVANALAHRYH 147 *********************************************************7 PP >> sp|P68229|HBB_LAMGU Hemoglobin subunit beta OS=Lama guanicoe GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.2 0.0 3.4e-58 1.6e-55 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 192.2 bits; conditional E-value: 3.4e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls +ek++v+ +W+kv +v+e+G+++L rl++++P+t++fFe+F+dLst+d+++++++vk+Hg kvl+ ++d+l +ld +l++++++L sp|P68229|HBB_LAMGU 3 NLSGDEKNAVHGLWSKV--KVDEVGGEALGRLLVVYPWTRRFFESFGDLSTADAVMNNPKVKAHGSKVLNSFGDGLSHLD-NLKGTYAKL 89 79***************..9************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla +++keft+d qaa++K++a va++la++Y+ sp|P68229|HBB_LAMGU 90 SELHCDKLHVDPENFRLLGNVLVVVLARHFGKEFTPDLQAAYQKVVAGVANALAHRYH 147 *********************************************************7 PP >> sp|Q28931|HBE_SMICR Hemoglobin subunit epsilon OS=Sminthopsis crassicaudata GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 192.2 0.2 3.4e-58 1.7e-55 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 192.2 bits; conditional E-value: 3.4e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek++++++W+kv +vee+G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da+++ld +l++++++ sp|Q28931|HBE_SMICR 2 VHFTAEEKNAITTIWGKV--NVEETGGEALGRLLVVYPWTQRFFDSFGNLSSASAILGNPKVKAHGKKVLTSFGDAVKNLD-NLKGTFSK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv v+aa++ keft++vqaa++Kl+ va++la+kY+ sp|Q28931|HBE_SMICR 89 LSELHCDKLHVDPENFRLLGNVLVIVMAAHFNKEFTPEVQAAFQKLVTGVANALAHKYH 147 **********************************************************7 PP >> sp|P07402|HBA_MACSP Hemoglobin subunit alpha-1/2 OS=Macaca speciosa PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 191.9 0.9 4.1e-58 2e-55 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 191.9 bits; conditional E-value: 4.1e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl+ a+ ++d +++ +l++L sp|P07402|HBA_MACSP 1 VLSPADKTNVKAAWDKVGGHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTLAVGHVD-DMPHALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P07402|HBA_MACSP 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P01940|HBA_TARBA Hemoglobin subunit alpha OS=Tarsius bancanus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 191.9 0.5 4.3e-58 2.1e-55 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 191.9 bits; conditional E-value: 4.3e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++s +vk Hgkkv+dAl+ a+ ++d +++++l++L sp|P01940|HBA_TARBA 1 VLSPADKTNVKAAWDKVGGHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSSQVKGHGKKVADALTTAVGHID-NMPNALSAL 83 69********************************************.***.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la ++p++ft++v+a+l+K++a+v+++l+skY+ sp|P01940|HBA_TARBA 84 SDLHAHKLRVDPVNFKLLSHCLLVTLACHHPADFTPAVHASLDKFVASVSTVLTSKYR 141 *********************************************************7 PP >> sp|G1NJB6|MYG_MELGA Myoglobin OS=Meleagris gallopavo GN=MB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 191.7 1.6 5e-58 2.4e-55 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 191.7 bits; conditional E-value: 5e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+++v+++W+kvead++++G ++L+rlf +P+t++ F+kFk+L+t+d++k+s+d+kkHg +vl+ l+++l++ ++++e++lk+L+ sp|G1NJB6|MYG_MELGA 3 LSDQEWQQVLTIWGKVEADIAGHGHEVLMRLFHDHPETLDRFDKFKGLKTPDQMKGSEDLKKHGATVLTQLGKILKQ-KGNHESELKPLA 91 99***************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + Ha+k+k+++ky++++sev+++v+a++++++f+ad qaa++K+l+l+++++askYk sp|G1NJB6|MYG_MELGA 92 QTHATKHKIPVKYLEFISEVIIKVIAEKHAADFGADSQAAMKKALELFRNDMASKYK 148 ********************************************************7 PP >> sp|P02197|MYG_CHICK Myoglobin OS=Gallus gallus GN=MB PE=1 SV=4 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 191.7 1.6 5e-58 2.4e-55 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 191.7 bits; conditional E-value: 5e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+++v+++W+kvead++++G ++L+rlf +P+t++ F+kFk+L+t+d++k+s+d+kkHg +vl+ l+++l++ ++++e++lk+L+ sp|P02197|MYG_CHICK 3 LSDQEWQQVLTIWGKVEADIAGHGHEVLMRLFHDHPETLDRFDKFKGLKTPDQMKGSEDLKKHGATVLTQLGKILKQ-KGNHESELKPLA 91 99***************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + Ha+k+k+++ky++++sev+++v+a++++++f+ad qaa++K+l+l+++++askYk sp|P02197|MYG_CHICK 92 QTHATKHKIPVKYLEFISEVIIKVIAEKHAADFGADSQAAMKKALELFRNDMASKYK 148 ********************************************************7 PP >> sp|P21380|HBB_RANTA Hemoglobin subunit beta OS=Rangifer tarandus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 191.5 0.4 5.6e-58 2.7e-55 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 191.5 bits; conditional E-value: 5.6e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+ +ek +v+ W+kv +v+e+Ga++L rl++++P+tq+fFe+F+dLs +d+++ +++vk+Hgk+vldA+sd+l++ld +l++++++Ls sp|P21380|HBB_RANTA 2 LTSEEKAAVTGFWGKV--KVDEVGAEALGRLLVVYPWTQRFFEHFGDLSSADAIMHNDKVKAHGKRVLDAFSDGLKHLD-DLKGAFAKLS 88 899*************..9***********************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla +++k+ft+ qa ++K++ va++la++Y+ sp|P21380|HBB_RANTA 89 ELHCDKLHVDPENFRLLGNVLVVVLARHFGKDFTPVLQADYQKVVTGVANALAHRYH 145 ********************************************************7 PP >> sp|P02053|HBB_EULFU Hemoglobin subunit beta OS=Eulemur fulvus fulvus GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 191.4 0.3 5.9e-58 2.9e-55 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 191.4 bits; conditional E-value: 5.9e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e +v+++W+kv dve++G+++L rl++++P+tq+fFe+F+dLs + +++++++vk+Hgkkvl A+s++l +ld +l++++++Ls sp|P02053|HBB_EULFU 4 LSAEENAHVTSLWGKV--DVEKVGGEALGRLLVVYPWTQRFFESFGDLSSPSAVMGNPKVKAHGKKVLSAFSEGLHHLD-NLKGTFAQLS 90 9***************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f ll++vlv+vla+++++ f+++vqaa++K++a va++la+kY+ sp|P02053|HBB_EULFU 91 ELHCDKLHVDPQNFTLLGNVLVVVLAEHFGNAFSPAVQAAFQKVVAGVANALAHKYH 147 ********************************************************7 PP >> sp|P02075|HBB_SHEEP Hemoglobin subunit beta OS=Ovis aries GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 191.4 0.6 5.9e-58 2.9e-55 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 191.4 bits; conditional E-value: 5.9e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek +v+ W+kv +v+e+Ga++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvld +s+++++ld +l++++++Ls sp|P02075|HBB_SHEEP 2 LTAEEKAAVTGFWGKV--KVDEVGAEALGRLLVVYPWTQRFFEHFGDLSNADAVMNNPKVKAHGKKVLDSFSNGMKHLD-DLKGTFAQLS 88 99**************..9***********************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla ++++eft+ qa ++K++a va++la+kY+ sp|P02075|HBB_SHEEP 89 ELHCDKLHVDPENFRLLGNVLVVVLARHHGNEFTPVLQADFQKVVAGVANALAHKYH 145 ********************************************************7 PP >> sp|Q28496|HBE_MICMU Hemoglobin subunit epsilon OS=Microcebus murinus GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 191.1 0.2 7.7e-58 3.7e-55 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 191.1 bits; conditional E-value: 7.7e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek++++++W+kv +vee G+++L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ +++a+++ld +l+ ++++ sp|Q28496|HBE_MICMU 2 VHFTAEEKSTILSLWGKV--NVEEAGGEALGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSFGEAVKNLD-NLKPAFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++v+v +la++++keft+dvqaa +Kl++ va++la+kY+ sp|Q28496|HBE_MICMU 89 LSELHCDKLHVDPENFKLLGNVMVIILATHFGKEFTPDVQAAWQKLVSGVATALAHKYH 147 **********************************************************7 PP >> sp|Q7M3C2|HBB_HAPGR Hemoglobin subunit beta OS=Hapalemur griseus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 191.0 0.0 7.7e-58 3.8e-55 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 191.0 bits; conditional E-value: 7.7e-58 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++e +v+++W+kv dve++G+++L rl++++P+tq+fFe+F+dLst+ +++++++vk+Hgkkvl A+s++l +ld +l++++++Ls sp|Q7M3C2|HBB_HAPGR 3 LTPEENGHVTSLWGKV--DVEKVGGEALGRLLVVYPWTQRFFESFGDLSTPSAIMGNPKVKAHGKKVLSAFSEGLHHLD-NLKGTFAQLS 89 99**************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f ll++vlv vla+++++ f+++vqaa++K++ va++la+kY+ sp|Q7M3C2|HBB_HAPGR 90 ELHCDKLHVDPQNFTLLGNVLVIVLAEHFGNAFSPPVQAAFQKVVTGVANALAHKYH 146 ********************************************************7 PP >> sp|P01939|HBA2_OTOCR Hemoglobin subunit alpha-B OS=Otolemur crassicaudatus GN=HBAB PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 190.9 1.0 8.4e-58 4.1e-55 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 190.9 bits; conditional E-value: 8.4e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+ +k++vka+W kv+a+++++Ga++L+r+f+s+P+t+++F++F dLs ++s +vk Hgkkv+dAl++a+ ++d +++++l++ sp|P01939|HBA2_OTOCR 2 VLSPTDKSNVKAAWEKVGAHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSTQVKGHGKKVADALTNAVLHVD-DMPSALSA 83 8*********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fkll ++l+++la ++p+eft++v+a+l+K++a+v+++l+skY+ sp|P01939|HBA2_OTOCR 84 LSDLHAHKLRVDPVNFKLLRHCLLVTLACHHPAEFTPAVHASLDKFMASVSTVLTSKYR 142 **********************************************************7 PP >> sp|P02093|HBB_ONDZI Hemoglobin subunit beta OS=Ondatra zibethicus GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 190.9 0.3 8.8e-58 4.3e-55 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 190.9 bits; conditional E-value: 8.8e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L++aek ++ +W+kv +++++Ga++L rl++++P+tq+fFe+F+dLs + +++++a+vk Hgkkv++A++d+l++ld +l++++++ sp|P02093|HBB_ONDZI 1 VHLTDAEKAAISGLWGKV--NADGVGAEALGRLLVVYPWTQRFFEHFGDLSSSSAVMGNAKVKSHGKKVITAFADGLKHLD-NLKGTFSA 87 69****************..999**********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++++v vl + l+k+ft+d+q+a++K++ va++l +kY+ sp|P02093|HBB_ONDZI 88 LSELHCDKLHVDPENFKLLGNMIVIVLSHDLGKDFTPDAQSAFQKVVTGVATALGHKYH 146 **********************************************************7 PP >> sp|P14388|HBB_ANTPA Hemoglobin subunit beta OS=Antrozous pallidus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 190.8 0.0 9e-58 4.4e-55 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 190.8 bits; conditional E-value: 9e-58 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++v+ +W+kv +vee+G+++L rl++++P+tq+fFe+F+dLs + +++++a+vk+Hgkkvl+A+sd+l++ld +l++++++ sp|P14388|HBB_ANTPA 1 VHLTADEKSAVTGLWGKV--NVEEVGGEALGRLLVVYPWTQRFFESFGDLSNAGAVMGNAKVKAHGKKVLNAFSDGLKNLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vl+ vla +++kef ++vqaa++K+ va++l +kY+ sp|P14388|HBB_ANTPA 88 LSELHCDKLHVDPENFRLLGNVLMIVLARHFGKEFCPPVQAAFQKVSLGVATALGHKYH 146 **********************************************************7 PP >> sp|P67823|HBB_EQUHE Hemoglobin subunit beta OS=Equus hemionus kulan GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 190.8 0.1 9.1e-58 4.4e-55 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 190.8 bits; conditional E-value: 9.1e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 +Ls +ek +v+a+W kv + ee+G+++L rl++++P+tq+fF++F+dLs +++++++++vk+Hgkkvl+ +++++ +ld +l++++++L sp|P67823|HBB_EQUHE 2 QLSGEEKAAVLALWDKV--NEEEVGGEALGRLLVVYPWTQRFFDSFGDLSNPAAVMGNPKVKAHGKKVLHSFGEGVHHLD-NLKGTFAQL 88 79***************..99***********************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla +++k+ft++ qa+++K++a va++la+kY+ sp|P67823|HBB_EQUHE 89 SELHCDKLHVDPENFRLLGNVLVVVLARHFGKDFTPELQASYQKVVAGVANALAHKYH 146 *********************************************************7 PP >> sp|P67824|HBB_EQUZE Hemoglobin subunit beta OS=Equus zebra GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 190.8 0.1 9.1e-58 4.4e-55 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 190.8 bits; conditional E-value: 9.1e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 +Ls +ek +v+a+W kv + ee+G+++L rl++++P+tq+fF++F+dLs +++++++++vk+Hgkkvl+ +++++ +ld +l++++++L sp|P67824|HBB_EQUZE 2 QLSGEEKAAVLALWDKV--NEEEVGGEALGRLLVVYPWTQRFFDSFGDLSNPAAVMGNPKVKAHGKKVLHSFGEGVHHLD-NLKGTFAQL 88 79***************..99***********************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla +++k+ft++ qa+++K++a va++la+kY+ sp|P67824|HBB_EQUZE 89 SELHCDKLHVDPENFRLLGNVLVVVLARHFGKDFTPELQASYQKVVAGVANALAHKYH 146 *********************************************************7 PP >> sp|P19015|HBA_HIPAM Hemoglobin subunit alpha OS=Hippopotamus amphibius GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 190.8 0.9 9.4e-58 4.6e-55 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 190.8 bits; conditional E-value: 9.4e-58 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k++vka+W+kv+ ++ e+Ga++L+r+f+s+P+t+++F++F dLs ++s +vk+Hgkkv+dAl++a+ +ld +l+++l+dL sp|P19015|HBA_HIPAM 1 VLSANDKSNVKAAWGKVGNHAPEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSSQVKAHGKKVADALTKAVGHLD-DLPGALSDL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p++ft++++a+l+K+la v+++l+skY+ sp|P19015|HBA_HIPAM 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPSDFTPAAHASLDKFLANVSTVLTSKYR 141 *********************************************************7 PP >> sp|P14387|HBA_ANTPA Hemoglobin subunit alpha OS=Antrozous pallidus GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 190.7 0.1 1e-57 5e-55 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 190.7 bits; conditional E-value: 1e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv dAl++a+a++d +l+++l++L sp|P14387|HBA_ANTPA 2 VLSPADKTNVKAAWDKVGGHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVGDALGNAVAHMD-DLPGALSAL 84 8*********************************************.***.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p++ft++v+a+l+K+la+v+++l skY+ sp|P14387|HBA_ANTPA 85 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPGDFTPAVHASLDKFLASVSTVLVSKYR 142 *********************************************************7 PP >> sp|P08223|HBE_EULFU Hemoglobin subunit epsilon OS=Eulemur fulvus fulvus GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 190.5 0.2 1.1e-57 5.4e-55 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 190.5 bits; conditional E-value: 1.1e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek++++++W+kv +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ +++a++++d +l++++++ sp|P08223|HBE_EULFU 2 VHFTAEEKSTILSLWGKV--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSASAILGNPKVKAHGKKVLTSFGEAVKNMD-NLKGAFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++v+v +la++++keft+dvqaa +Kl++ va++la+kY+ sp|P08223|HBE_EULFU 89 LSELHCDKLHVDPENFKLLGNVMVIILATHFGKEFTPDVQAAWQKLVSGVATALAHKYH 147 **********************************************************7 PP >> sp|P02077|HBBA_CAPHI Hemoglobin subunit beta-A OS=Capra hircus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 190.4 0.9 1.2e-57 6e-55 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 190.4 bits; conditional E-value: 1.2e-57 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L+++ek +v+ W+kv +v+e+Ga++L rl++++P+tq+fFe+F+dLs +d+++++a+vk+Hgkkvld +s+++++ld +l++++++L sp|P02077|HBBA_CAPHI 2 LTAEEKAAVTGFWGKV--KVDEVGAEALGRLLVVYPWTQRFFEHFGDLSSADAVMNNAKVKAHGKKVLDSFSNGMKHLD-DLKGTFAQL 87 99**************..9***********************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++fkll++vlv+vla ++++eft+ qa ++K++a va++la++Y+ sp|P02077|HBBA_CAPHI 88 SELHCDKLHVDPENFKLLGNVLVVVLARHHGSEFTPLLQAEFQKVVAGVANALAHRYH 145 *********************************************************7 PP >> sp|P02187|MYG_LOXAF Myoglobin OS=Loxodonta africana GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 190.4 0.8 1.3e-57 6.2e-55 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 190.4 bits; conditional E-value: 1.3e-57 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++ W+kvead+ ++G+ +Lvrlf+ +P+t+e+F+kFk+L+te e+k+s+d+kk g++vl+Al+ +l+k ++++ea++++L+ sp|P02187|MYG_LOXAF 3 LSDGEWELVLKTWGKVEADIPGHGEFVLVRLFTGHPETLEKFDKFKHLKTEGEMKASEDLKKQGVTVLTALGGILKK-KGHHEAEIQPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++++vl++++p+ef+ad+qaa++K+l+l+++++a+kYk sp|P02187|MYG_LOXAF 92 QSHATKHKIPIKYLEFISDAIIHVLQSKHPAEFGADAQAAMKKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P01936|HBA_EULFU Hemoglobin subunit alpha OS=Eulemur fulvus fulvus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 190.3 0.8 1.3e-57 6.2e-55 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 190.3 bits; conditional E-value: 1.3e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk++W v+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++s +vk+Hgkkv+dAl++a+ +ld +++++l++L sp|P01936|HBA_EULFU 1 VLSPADKTNVKTAWNAVGGQAGEHGAEALERMFLSFPTTKTYFPHF-DLS-----HGSGQVKAHGKKVADALTNAVSHLD-DMPGALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la+++p+eft++v+a+l+K++a v+++l+skY+ sp|P01936|HBA_EULFU 84 SDLHAHKLRVDPVNFKLLSHCLLVTLASHHPAEFTPAVHASLDKFFAAVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02061|HBB_TALEU Hemoglobin subunit beta OS=Talpa europaea GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 190.3 0.0 1.3e-57 6.5e-55 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 190.3 bits; conditional E-value: 1.3e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek v+ +W+kv +v+e+G+++L rl++++P+tq+fF++F+dLs + +++++a+vk+Hgkkv++ ++d++++ld +l++++++ sp|P02061|HBB_TALEU 1 VHLSGEEKGLVTGMWGKV--NVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSASAIMGNAKVKAHGKKVANSITDGVKNLD-NLKGTYAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +l+keft+++qaa++K++ va++la+kY+ sp|P02061|HBB_TALEU 88 LSELHCDKLHVDPENFRLLGNVLVCVLARNLGKEFTPQAQAAFQKVVLGVATALAHKYH 146 **********************************************************7 PP >> sp|P02072|HBB_BOSMU Hemoglobin subunit beta OS=Bos mutus grunniens GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 190.2 0.5 1.4e-57 6.9e-55 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 190.2 bits; conditional E-value: 1.4e-57 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek +v+a W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvld +s+++++ld +l++++++Ls sp|P02072|HBB_BOSMU 2 LTAEEKAAVTAFWGKV--KVDEVGGEALGRLLVVYPWTQRFFESFGDLSSADAVMNNPKVKAHGKKVLDSFSNGMKHLD-DLKGTFAALS 88 99**************..9***********************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++fkll++vlv+vla +++keft+ qa ++K++ va++la++Y+ sp|P02072|HBB_BOSMU 89 ELHCDKLHVDPENFKLLGNVLVVVLARHFGKEFTPVLQADFQKVVVGVANALAHRYH 145 ********************************************************7 PP >> sp|B3EWE0|HBB_TAMST Hemoglobin subunit beta OS=Tamias striatus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 190.0 0.2 1.7e-57 8.2e-55 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 190.0 bits; conditional E-value: 1.7e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek + ++W+kv + +e G+++L rl++++P+tq+fF++F+dLs + +++++a+vk+Hgkkvld +sd+l++ld +l++++++ sp|B3EWE0|HBB_TAMST 1 VHLTADEKVSLSSLWGKV--NPDELGGEALGRLLLVYPWTQRFFDSFGDLSSAVAVMGNAKVKAHGKKVLDSFSDGLKHLD-NLKGTFAS 87 69****************..99***********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv vla++l+keft+++q++++K++a va++la+kY+ sp|B3EWE0|HBB_TAMST 88 LSELHCDKLHVDPENFKLLGNVLVLVLAHHLGKEFTPQAQGTFQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|Q7LZM2|MYG_ANAPO Myoglobin OS=Anas poecilorhyncha GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.9 1.5 1.8e-57 8.7e-55 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 189.9 bits; conditional E-value: 1.8e-57 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+++v+++W+kvead +++G +L+rlf+ +P+t++ FekFk+L+t+d++k+s+d+kkHg++vl+ l+++l++ ++++ea+lk+L+ sp|Q7LZM2|MYG_ANAPO 3 LSDQEWQQVLTIWGKVEADLAGHGHAVLMRLFQDHPETLDRFEKFKGLKTPDQMKGSEDLKKHGVTVLTQLGKILKQ-KGNHEAELKPLA 91 99***************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + Ha+k+k+++ky++++sev+++v+a++++++f+ad qaa++K+l+l+++++askYk sp|Q7LZM2|MYG_ANAPO 92 QTHATKHKIPVKYLEFISEVIIKVIAEKHSADFGADSQAAMKKALELFRNDMASKYK 148 ********************************************************7 PP >> sp|Q7LZM3|MYG_PHAFI Myoglobin OS=Phalacrocorax filamentosus GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.8 0.6 1.9e-57 9e-55 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 189.8 bits; conditional E-value: 1.9e-57 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+++v+++W+kve+d ++G ++L+rlf +P+t++ Fe+Fk+L+t+d++k+s+d+kkHg++vl+ l+++l++ ++++e++lk+L+ sp|Q7LZM3|MYG_PHAFI 3 LSDQEWQQVLTIWGKVESDLPGHGHEVLMRLFRDHPETLDRFERFKGLKTPDQMKASEDLKKHGVTVLTQLGKILKQ-KGNHESELKPLA 91 99***************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + Ha+k+k+++ky++++sev+++v+a++++++f+ad qaa++K+l+l+++++askYk sp|Q7LZM3|MYG_PHAFI 92 QTHATKHKIPVKYLEFISEVIIKVIAEKHSADFGADSQAAMKKALELFRNDMASKYK 148 ********************************************************7 PP >> sp|P02102|HBE1_CAPHI Hemoglobin subunit epsilon-1 OS=Capra hircus GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.8 0.1 1.9e-57 9.3e-55 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 189.8 bits; conditional E-value: 1.9e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 v+ +++ek +++ +W+kv +vee G+++L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ +++a+++ld +l+++++ sp|P02102|HBE1_CAPHI 2 VHFTAEEKAAITGLWGKV--NVEEAGGEALGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSFGEAIKNLD-NLKGAFA 87 5789**************..*************************************************************.******* PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +LselH++kl+vdp++f+ll++v+v +la+++++eft+dvqaa +Kl++ va++la+kY+ sp|P02102|HBE1_CAPHI 88 KLSELHCDKLHVDPENFRLLGNVIVIILATHFGREFTPDVQAAWQKLVSGVATALAHKYH 147 ***********************************************************7 PP >> sp|P19016|HBB_HIPAM Hemoglobin subunit beta OS=Hippopotamus amphibius GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.5 0.1 2.2e-57 1.1e-54 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 189.5 bits; conditional E-value: 2.2e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v+ +W+kv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvld ++d+l++ld +l++++++ sp|P19016|HBB_HIPAM 1 VHLTAEEKDAVLGLWGKV--NVQEVGGEALGRLLVVYPWTQRFFESFGDLSSADAVMNNPKVKAHGKKVLDSFADGLKHLD-NLKGTFAA 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH+++l+vdp++f+ll++ lv+vla ++keft++ qaa++K++a va++la++Y+ sp|P19016|HBB_HIPAM 88 LSELHCDQLHVDPENFRLLGNELVVVLARTFGKEFTPELQAAYQKVVAGVANALAHRYH 146 **********************************************************7 PP >> sp|P0CH26|HBA2_CAPHI Hemoglobin subunit alpha-2 OS=Capra hircus GN=HBA2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.5 0.6 2.3e-57 1.1e-54 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 189.5 bits; conditional E-value: 2.3e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+k++vka+W+kv+++++ +Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg+kv+ Al++a+ +ld +l+++l+d sp|P0CH26|HBA2_CAPHI 2 VLSAADKSNVKAAWGKVGSNAGAYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGEKVAAALTKAVGHLD-DLPGTLSD 83 8*********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls+ l+++la ++p++ft++v+a+l+K+la v+++l+skY+ sp|P0CH26|HBA2_CAPHI 84 LSDLHAHKLRVDPVNFKLLSHSLLVTLACHHPSDFTPAVHASLDKFLANVSTVLTSKYR 142 **********************************************************7 PP >> sp|P28780|HBA_TAPGE Hemoglobin subunit alpha OS=Taphozous georgianus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.5 0.3 2.3e-57 1.1e-54 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 189.5 bits; conditional E-value: 2.3e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++s +vk Hgkkv dAl++a+a++d +l+++l++L sp|P28780|HBA_TAPGE 1 VLSPADKTNVKAAWEKVGGHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSSQVKGHGKKVGDALGNAVAHMD-DLPGALSAL 83 69********************************************.***.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la++++++ft++v+a+l+K+la+v+++l+skY+ sp|P28780|HBA_TAPGE 84 SDLHAYKLRVDPVNFKLLSHCLLVTLASHHAADFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02054|HBB_LEMCA Hemoglobin subunit beta OS=Lemur catta GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.4 0.1 2.5e-57 1.2e-54 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 189.4 bits; conditional E-value: 2.5e-57 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++e +v+++W+kv +ve++G+++L rl++++P+tq+fFe+F+dLs +d+++++++vk+Hgkkvl A+s++l +ld +l++++++Ls sp|P02054|HBB_LEMCA 3 LTPEENGHVTSLWGKV--NVEKVGGEALGRLLVVYPWTQRFFESFGDLSSPDAIMGNPKVKAHGKKVLSAFSEGLHHLD-NLKGTFAQLS 89 99**************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH+ l+vdp++fkll++vlv vla++++++f+++ qaa++K++ va++la+kY+ sp|P02054|HBB_LEMCA 90 ELHCVALHVDPENFKLLGNVLVIVLAHHFGNDFSPQTQAAFQKVVTGVANALAHKYH 146 ********************************************************7 PP >> sp|P11025|HBE_DIDVI Hemoglobin subunit epsilon-M OS=Didelphis virginiana GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.4 0.0 2.5e-57 1.2e-54 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 189.4 bits; conditional E-value: 2.5e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ ++++kt++++vW+kv dve++G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ ++++++++d +l++++++ sp|P11025|HBE_DIDVI 2 VHFTPEDKTNITSVWTKV--DVEDVGGESLARLLVVYPWTQRFFDSFGNLSSASAVMGNPKVKAHGKKVLTSFGEGVKNMD-NLKGTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vl+ vla+r++keft++vqa+ +Kl++ v+ +l +kY+ sp|P11025|HBE_DIDVI 89 LSELHCDKLHVDPENFRLLGNVLIIVLASRFGKEFTPEVQASWQKLVSGVSSALGHKYH 147 **********************************************************7 PP >> sp|P14259|HBA1_OTOCR Hemoglobin subunit alpha-A OS=Otolemur crassicaudatus GN=HBAA PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.4 0.9 2.6e-57 1.3e-54 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 189.4 bits; conditional E-value: 2.6e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+ +k+ vka+W kv+a+++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl++a+ ++d +++++l++ sp|P14259|HBA1_OTOCR 2 VLSPTDKSIVKAAWEKVGAHAGDYGAEALERMFLSFPTTKTYFPQF-DLS-----HGSAQVKGHGKKVADALTNAVLHVD-DMPSALSA 83 8*********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl vdp +fklls++l+++la +lp+eft++v+a+l+K++a+v+++l+skY+ sp|P14259|HBA1_OTOCR 84 LSDLHAHKLTVDPVNFKLLSHCLLVTLACHLPAEFTPAVHASLDKFMASVSTVLTSKYR 142 **********************************************************7 PP >> sp|P19759|HBE_OTOCR Hemoglobin subunit epsilon OS=Otolemur crassicaudatus GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.3 0.3 2.8e-57 1.3e-54 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 189.3 bits; conditional E-value: 2.8e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek + ++W+kv ++ee G+++L rl++++P+tq+fFe F++Ls + +++++++vk+Hgkkvl+ +++a++++d +l++++++ sp|P19759|HBE_OTOCR 2 VHFTAEEKAIIMSLWGKV--NIEEAGGEALGRLLVVYPWTQRFFETFGNLSSASAIMGNPKVKAHGKKVLTSFGEAVKNMD-NLKGAFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++v+v +la++++keft+dvqaa +Kl++ va++la+kY+ sp|P19759|HBE_OTOCR 89 LSELHCDKLHVDPENFKLLGNVMVIILATHFGKEFTPDVQAAWQKLVSGVATALAHKYH 147 **********************************************************7 PP >> sp|P02064|HBB1_TAPTE Hemoglobin subunit beta-1 OS=Tapirus terrestris GN=HBB1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.3 0.5 2.7e-57 1.3e-54 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 189.3 bits; conditional E-value: 2.7e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 L+ +ek +v+a+W kv d +++G+++L rl++++P+tq+fF++F+dLst+++++++++vk+Hgkkvl+ ++d++ +ld +l+ ++++ sp|P02064|HBB1_TAPTE 2 ELTGEEKAAVLALWDKV--DEDKVGGEALGRLLVVYPWTQRFFDSFGDLSTAAAVMGNPKVKAHGKKVLHSFGDGVHHLD-DLKVTFAQ 87 6999*************..99**********************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla++++k ft++ qaa++K++a va++la+kY+ sp|P02064|HBB1_TAPTE 88 LSELHCDKLHVDPENFRLLGNVLVVVLAQQFGKAFTPELQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02101|HBE_PIG Hemoglobin subunit epsilon OS=Sus scrofa GN=HBE1 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.3 0.0 2.8e-57 1.3e-54 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 189.3 bits; conditional E-value: 2.8e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 v+ +++ek+ ++ +W+kv +vee+G++++ rl++++P+tq+fF++F+++s + +++++++vk+Hgkkvl+A++da++++d +l++++++Ls sp|P02101|HBE_PIG 2 VHFTAEEKSVITGLWGKV--NVEETGGQAVGRLLVVYPWTQRFFDSFGNMSSPSAIMGNPKVKAHGKKVLTAFGDAVKNMD-NLKGTFAKLS 90 5789**************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++++v +la+++++eft++vqaa +Kl+a va++la+kY+ sp|P02101|HBE_PIG 91 ELHCDKLHVDPENFRLLGNMIVIILASHFGGEFTPEVQAAWQKLVAGVATALAHKYH 147 ********************************************************7 PP >> sp|P11757|HBA_MYOVE Hemoglobin subunit alpha OS=Myotis velifer GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.3 0.1 2.8e-57 1.3e-54 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 189.3 bits; conditional E-value: 2.8e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt++ka+W kv+a+++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv dAl++a+a++d +l+++l++L sp|P11757|HBA_MYOVE 1 VLSPADKTNIKAAWDKVGAHAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVGDALGNAVAHMD-DLPGALSAL 83 69********************************************.***.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la +lp+eft++++a+l+K+la+v+++l skY+ sp|P11757|HBA_MYOVE 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHLPGEFTPAIHASLDKFLASVSTVLVSKYR 141 *********************************************************7 PP >> sp|B3EWD2|HBB_SCICA Hemoglobin subunit beta OS=Sciurus carolinensis PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.2 0.1 2.9e-57 1.4e-54 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 189.2 bits; conditional E-value: 2.9e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls++ek+++ ++W+kv + +e G+++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkvld +sd+l++ld +l++++++ sp|B3EWD2|HBB_SCICA 1 VHLSADEKNALATLWGKV--NPDELGGEALGRLLVVYPWTQRFFDSFGDLSSATAVMGNPKVKAHGKKVLDSFSDGLKHLD-NLKGTFSS 87 69****************..99***********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++ lv vla +l+k+ft++vqaa++K++a va++la+kY+ sp|B3EWD2|HBB_SCICA 88 LSELHCDKLHVDPENFRLLGNELVLVLALHLGKDFTPQVQAAFQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P20018|HBA1_VARVI Hemoglobin subunit alpha-1 OS=Varecia variegata PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.2 0.9 2.9e-57 1.4e-54 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 189.2 bits; conditional E-value: 2.9e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+k++vk++W ++++++e+Ga++L+r+f+s+P t+++F++F dLs ++sa++k+Hgkkv+dAl++a++++d +++++l++ sp|P20018|HBA1_VARVI 1 VLSPADKNNVKSAWNAIGSHAGEHGAEALERMFLSFPPTKTYFPHF-DLS-----HGSAQIKTHGKKVADALTNAVNHID-DMPGALSA 82 69********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls++l+++la+++p+eft++v+a+l+K++a v+++l+skY+ sp|P20018|HBA1_VARVI 83 LSDLHAHKLRVDPVNFKLLSHCLLVTLASHHPAEFTPAVHASLDKFFAAVSTVLTSKYR 141 **********************************************************7 PP >> sp|P02062|HBB_HORSE Hemoglobin subunit beta OS=Equus caballus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.2 0.1 2.9e-57 1.4e-54 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 189.2 bits; conditional E-value: 2.9e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 +Ls +ek +v+a+W kv + ee+G+++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkvl+ +++++ +ld +l++++++L sp|P02062|HBB_HORSE 2 QLSGEEKAAVLALWDKV--NEEEVGGEALGRLLVVYPWTQRFFDSFGDLSNPGAVMGNPKVKAHGKKVLHSFGEGVHHLD-NLKGTFAAL 88 79***************..99***********************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla +++k+ft++ qa+++K++a va++la+kY+ sp|P02062|HBB_HORSE 89 SELHCDKLHVDPENFRLLGNVLVVVLARHFGKDFTPELQASYQKVVAGVANALAHKYH 146 *********************************************************7 PP >> sp|P63111|HBA_PAPAN Hemoglobin subunit alpha OS=Papio anubis GN=HBA PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.0 1.3 3.2e-57 1.6e-54 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 189.0 bits; conditional E-value: 3.2e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k++vka+W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++s++v kHgkkv+dAl+ a+ ++d +++++l++L sp|P63111|HBA_PAPAN 2 VLSPDDKKHVKAAWGKVGEHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSDQVNKHGKKVADALTLAVGHVD-DMPQALSKL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P63111|HBA_PAPAN 85 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|P63112|HBA_PAPCY Hemoglobin subunit alpha OS=Papio cynocephalus GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.0 1.3 3.2e-57 1.6e-54 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 189.0 bits; conditional E-value: 3.2e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k++vka+W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++s++v kHgkkv+dAl+ a+ ++d +++++l++L sp|P63112|HBA_PAPCY 2 VLSPDDKKHVKAAWGKVGEHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSDQVNKHGKKVADALTLAVGHVD-DMPQALSKL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P63112|HBA_PAPCY 85 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|B3EWD4|HBB_PERCR Hemoglobin subunit beta OS=Peromyscus crinitus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 189.0 0.4 3.2e-57 1.6e-54 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 189.0 bits; conditional E-value: 3.2e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L++aek v+ +W+kv + +e G+++L rl+ ++P+tq+fF++F+dLs + +l+++a+vk+Hgkkvld +s++l++ld +l++++++ sp|B3EWD4|HBB_PERCR 1 VHLTDAEKALVTGLWGKV--KPDELGGEALGRLLGVYPWTQRFFDSFGDLSSASALMSNAKVKAHGKKVLDSFSEGLKHLD-NLKGTFAS 87 69****************..899**********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll+++lv v+a++l+k+ft+++qaa++K++a va++la+kY+ sp|B3EWD4|HBB_PERCR 88 LSELHCDKLHVDPENFKLLGNMLVLVMAHHLGKDFTPAAQAAYQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P08258|HBA_MANSP Hemoglobin subunit alpha-1/2 OS=Mandrillus sphinx PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 188.9 0.8 3.6e-57 1.8e-54 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 188.9 bits; conditional E-value: 3.6e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W kv+ +++e+Ga++L+r+f+s+P+t+++F++F +Ls ++s++vk Hgkkv+dAl+ a+ ++d +++++l++L sp|P08258|HBA_MANSP 1 VLSPADKKNVKAAWDKVGGHAGEYGAEALERMFLSFPTTKTYFPHF-NLS-----HGSDQVKGHGKKVADALTLAVGHVD-DMPQALSKL 83 69********************************************.9**.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P08258|HBA_MANSP 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02092|HBB_MICXA Hemoglobin subunit beta OS=Microtus xanthognathus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 188.8 1.4 3.7e-57 1.8e-54 1 149 [] 1 146 [] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 188.8 bits; conditional E-value: 3.7e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L++aek ++ +W+kv +++ Ga++L rl++++P+t++fF++F++Ls + +++++a+vk+Hgkkv++A++d+l++ld +l++++++ sp|P02092|HBB_MICXA 1 VHLTDAEKAAISGLWGKV--BABAAGAZALGRLLVVYPWTZRFFZHFGBLSSASAVMGNAQVKAHGKKVIHAFADGLKHLD-BLKGTFAS 87 69****************..77788********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lH++kl+v+p++f+ll++++v vla++l+k+ft++++aa++K++a va +la+kY+ sp|P02092|HBB_MICXA 88 LSZLHCBKLHVBPZBFRLLGBMIVIVLAHHLGKDFTPSAZAAFZKVVAGVASALAHKYH 146 **********************************************************7 PP >> sp|P02186|MYG_ELEMA Myoglobin OS=Elephas maximus GN=MB PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 188.8 0.6 3.8e-57 1.8e-54 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 188.8 bits; conditional E-value: 3.8e-57 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++ W+kvead+ ++G+ + vrlf+ +P+t+e+F+kFk+L+te e+k+s+d+kk g++vl+Al+ +l+k ++++ea++++L+ sp|P02186|MYG_ELEMA 3 LSDGEWELVLKTWGKVEADIPGHGETVFVRLFTGHPETLEKFDKFKHLKTEGEMKASEDLKKQGVTVLTALGGILKK-KGHHEAEIQPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++s+++++vl++++p+ef+ad+q+a++K+l+l+++++a+kYk sp|P02186|MYG_ELEMA 92 QSHATKHKIPIKYLEFISDAIIHVLQSKHPAEFGADAQGAMKKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|Q9XSK1|HBA4_BUBBU Hemoglobin subunit alpha-4 OS=Bubalus bubalis PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 188.8 0.8 3.9e-57 1.9e-54 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 188.8 bits; conditional E-value: 3.9e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+k++vka+W+kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg kv++Al++a+ +ld +l+++l++ sp|Q9XSK1|HBA4_BUBBU 2 VLSAADKSNVKAAWGKVGGHAADYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGAKVANALTKAVGHLD-DLPGALSE 83 8*********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls+ l+++la++lp++ft++v+a+l+K+la+v+++l+skY+ sp|Q9XSK1|HBA4_BUBBU 84 LSDLHAHKLRVDPVNFKLLSHSLLVTLASHLPNDFTPAVHASLDKFLASVSTVLTSKYR 142 **********************************************************7 PP >> sp|P01932|HBA_THEGE Hemoglobin subunit alpha OS=Theropithecus gelada GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 188.7 1.3 4.1e-57 2e-54 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 188.7 bits; conditional E-value: 4.1e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k++vk +W+kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++s++vkkHgkkv+dAl+ a+ ++d +++++l++L sp|P01932|HBA_THEGE 1 VLSPDDKKHVKDAWGKVGEHAGQYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSDQVKKHGKKVADALTLAVGHVD-DMPQALSKL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P01932|HBA_THEGE 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02110|HBB_TACAC Hemoglobin subunit beta OS=Tachyglossus aculeatus aculeatus GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 188.5 0.3 4.6e-57 2.3e-54 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 188.5 bits; conditional E-value: 4.6e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls ekt+v+++W+ v +v+e G+++L rl++++P+tq+fFe+F+dLs +d+++++a+vk+Hg kvl+ ++dal++ld +l++++++ sp|P02110|HBB_TACAC 2 VHLSGSEKTAVTNLWGHV--NVNELGGEALGRLLVVYPWTQRFFESFGDLSSADAVMGNAKVKAHGAKVLTSFGDALKNLD-NLKGTFAK 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ l++vlv+vla +++keft+++qaa +Kl++ v+++la+kY+ sp|P02110|HBB_TACAC 89 LSELHCDKLHVDPENFNRLGNVLVVVLARHFSKEFTPEAQAAWQKLVSGVSHALAHKYH 147 **********************************************************7 PP >> sp|P01933|HBA_CERAT Hemoglobin subunit alpha OS=Cercocebus atys GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 188.5 1.2 4.8e-57 2.4e-54 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 188.5 bits; conditional E-value: 4.8e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k++vka+W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F +Ls ++s++vk Hgkkv+dAl+ a+ ++d +++ +l++L sp|P01933|HBA_CERAT 1 VLSPDDKKHVKAAWGKVGEHAGEYGAEALERMFLSFPTTKTYFPHF-NLS-----HGSDQVKGHGKKVADALTLAVGHVD-DMPHALSKL 83 69********************************************.9**.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp+eft++v+a+l+K+la+v+++l+skY+ sp|P01933|HBA_CERAT 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P20019|HBA2_VARVI Hemoglobin subunit alpha-2 OS=Varecia variegata PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 188.4 1.1 4.9e-57 2.4e-54 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 188.4 bits; conditional E-value: 4.9e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+k++vk++W ++++++e+Ga++L+r+f+s+P t+++F++F dLs ++sa++k+Hgkkv+dAl++a++++d +++++l++ sp|P20019|HBA2_VARVI 1 VLSPADKNNVKSAWKAIGSHAGEHGAEALERMFLSFPPTKTYFPHF-DLS-----HGSAQIKTHGKKVADALTNAVNHID-DMPGALSA 82 69********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls++l+++la+++p+eft++v+a+l+K++a v+++l+skY+ sp|P20019|HBA2_VARVI 83 LSDLHAHKLRVDPVNFKLLSHCLLVTLASHHPAEFTPAVHASLDKFFAAVSTVLTSKYR 141 **********************************************************7 PP >> sp|P21379|HBA_RANTA Hemoglobin subunit alpha OS=Rangifer tarandus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 188.3 0.5 5.3e-57 2.6e-54 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 188.3 bits; conditional E-value: 5.3e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W+kv+ ++ +Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk+Hg+kv++Al++a+ +ld +l+++l+dL sp|P21379|HBA_RANTA 1 VLSAADKSNVKAAWGKVGGNAPAYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKAHGEKVANALTKAVGHLD-DLPGTLSDL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls+ l+++la++lp++ft++v+a+l+K+la v+++l+skY+ sp|P21379|HBA_RANTA 84 SDLHAHKLRVDPVNFKLLSHTLLVTLASHLPSDFTPAVHASLDKFLANVSTVLTSKYR 141 *********************************************************7 PP >> sp|P83682|MYG_DELLE Myoglobin OS=Delphinapterus leucas GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 188.3 1.7 5.5e-57 2.7e-54 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 188.3 bits; conditional E-value: 5.5e-57 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Lse+e++ v+ kvead +++G+d+L+rlfk +P+t+e+F+kFk+L+t +k+s+d+kkHg++vl+Al+ +l+k ++++ea+lk+L+ sp|P83682|MYG_DELLE 3 LSEGEWQLVLXXXXKVEADLAGHGQDVLIRLFKGHPETLEKFDKFKHLKTXXXMKASEDLKKHGNTVLTALGGILKK-KGHHEAELKPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky+ e++++vl++r+p+ef+ad+q+a++K+l+l++k++a+kYk sp|P83682|MYG_DELLE 92 QSHATKHKIPIKYLXXXXEAIIHVLHSRHPAEFGADAQGAMNKALELFRKDIAAKYK 148 ********************************************************7 PP >> sp|P04246|HBT_PIG Hemoglobin subunit theta OS=Sus scrofa PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 188.1 0.0 6.1e-57 3e-54 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 188.1 bits; conditional E-value: 6.1e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 v+ +++ek+ ++ +W+kv +vee+G++++ rl++++P+tq+fF++F+++s + +++++++vk+Hgkkvl+ ++da++++d +l++++++Ls sp|P04246|HBT_PIG 1 VHFTAEEKSVITGLWGKV--NVEETGGEAVGRLLVVYPWTQRFFDSFGNMSSPSAIMGNPKVKAHGKKVLTSFGDAVKNMD-NLKGTFAKLS 89 5789**************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++++v +la+++++eft++vqaa +Kl+a va++la+kY+ sp|P04246|HBT_PIG 90 ELHCDKLHVDPENFRLLGNMIVIILASHFGGEFTPEVQAAWQKLVAGVATALAHKYH 146 ********************************************************7 PP >> sp|Q45XH7|HBG_ELEMA Hemoglobin subunit gamma OS=Elephas maximus GN=HBG PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 188.1 0.1 6.4e-57 3.1e-54 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 188.1 bits; conditional E-value: 6.4e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W++v +vee+G+++L rl++++P+tq+fF+ F++Ls + ++++++ vk+Hgkkvl+ ++da+++ld +l++++++ sp|Q45XH7|HBG_ELEMA 2 VHFTAEEKAAITSLWGQV--NVEETGGEALGRLLVVYPWTQRFFDTFGNLSSASAIMGNPRVKAHGKKVLTSFGDAVKNLD-NLKGTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv vla++++keft++vqaa +K++ va++la kY+ sp|Q45XH7|HBG_ELEMA 89 LSELHCDKLHVDPENFRLLGNVLVIVLANHFGKEFTPQVQAAWQKMVTGVANALAYKYH 147 **********************************************************7 PP >> sp|P04247|MYG_MOUSE Myoglobin OS=Mus musculus GN=Mb PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 188.0 0.3 6.5e-57 3.2e-54 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 188.0 bits; conditional E-value: 6.5e-57 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++ v++vW+kvead +++G+++L+ lfk++P+t+++F+kFk+L+ e+++k+s+d+kkHg +vl+Al+ +l+k ++++ a++++L+ sp|P04247|MYG_MOUSE 3 LSDGEWQLVLNVWGKVEADLAGHGQEVLIGLFKTHPETLDKFDKFKNLKSEEDMKGSEDLKKHGCTVLTALGTILKK-KGQHAAEIQPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++Ha+k+k+++ky++++se++++vl++r++++f+ad+q+a+ K+l+l+++++a+kYk sp|P04247|MYG_MOUSE 92 QSHATKHKIPVKYLEFISEIIIEVLKKRHSGDFGADAQGAMSKALELFRNDIAAKYK 148 ********************************************************7 PP >> sp|P02074|HBB_ODOVI Hemoglobin subunit beta-3 OS=Odocoileus virginianus virginianus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 188.0 0.0 6.8e-57 3.3e-54 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 188.0 bits; conditional E-value: 6.8e-57 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek +v+ W+kv +v+ +Ga++L rl++++P+tq+fFe+F+dLs + +++++++vk+Hgk+vldA+s++l++ld +l++++++Ls sp|P02074|HBB_ODOVI 2 LTAEEKAAVTGFWGKV--NVDVVGAEALGRLLVVYPWTQRFFEHFGDLSSAGAVMGNPKVKAHGKRVLDAFSEGLKHLD-DLKGAFAELS 88 99**************..9***********************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla ++++eft+ vqa ++K++a va++la++Y+ sp|P02074|HBB_ODOVI 89 ELHCNKLHVDPENFRLLGNVLVVVLARNFGGEFTPLVQADFQKVVAGVANALAHRYH 145 ********************************************************7 PP >> sp|P01971|HBA_ALCAA Hemoglobin subunit alpha OS=Alces alces alces GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.9 0.5 7.3e-57 3.6e-54 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 187.9 bits; conditional E-value: 7.3e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ +k++vka+W+kv+ ++ +Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk+Hg+kv++Al++a+ +ld +l+++l+dL sp|P01971|HBA_ALCAA 2 VLSATDKSNVKAAWGKVGGNAPAYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKAHGEKVANALTKAVGHLD-DLPGTLSDL 84 89********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls+ l+++laa+lp++ft++v+a+l+K+la v+++l+skY+ sp|P01971|HBA_ALCAA 85 SDLHAHKLRVDPVNFKLLSHTLLVTLAAHLPSDFTPAVHASLDKFLANVSTVLTSKYR 142 *********************************************************7 PP >> sp|Q9TSN8|HBA2_BUBBU Hemoglobin subunit alpha-2 OS=Bubalus bubalis PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.9 0.6 7.4e-57 3.6e-54 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 187.9 bits; conditional E-value: 7.4e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+k++++a+W+kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg kv++Al++a+ +ld +l+++l++ sp|Q9TSN8|HBA2_BUBBU 2 VLSAADKSNIQAAWGKVGGHAADYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGAKVANALTKAVGHLD-DLPGALSE 83 8*********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls+ l+++la++lp++ft++v+a+l+K+la+v+++l+skY+ sp|Q9TSN8|HBA2_BUBBU 84 LSDLHAHKLRVDPVNFKLLSHSLLVTLASHLPNDFTPAVHASLDKFLASVSTVLTSKYR 142 **********************************************************7 PP >> sp|Q9QZ76|MYG_RAT Myoglobin OS=Rattus norvegicus GN=Mb PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.9 0.4 7.5e-57 3.6e-54 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 187.9 bits; conditional E-value: 7.5e-57 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLsel 94 Ls++e++ v+++W+kve d +++G+++L+ lfk++P+t+e+F+kFk+L+ e+e+k+s+d+kkHg +vl+Al+ +l+k ++++ a++++L+++ sp|Q9QZ76|MYG_RAT 3 LSDGEWQMVLNIWGKVEGDLAGHGQEVLISLFKAHPETLEKFDKFKNLKSEEEMKSSEDLKKHGCTVLTALGTILKK-KGQHAAEIQPLAQS 93 9****************************************************************************.99************ PP globins4 95 HakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ha+k+k+++ky++++sev+++vl++r++++f+ad+q+a+ K+l+l+++++a+kYk sp|Q9QZ76|MYG_RAT 94 HATKHKIPVKYLEFISEVIIQVLKKRYSGDFGADAQGAMSKALELFRNDIAAKYK 148 ******************************************************7 PP >> sp|O77655|HBG_TARBA Hemoglobin subunit gamma OS=Tarsius bancanus GN=HBG PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.8 0.4 7.8e-57 3.8e-54 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 187.8 bits; conditional E-value: 7.8e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek ++++Wakv +vee+G+++L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl l++a+ ++d +l+ ++++ sp|O77655|HBG_TARBA 2 VHFTAEEKAIITSLWAKV--NVEETGGEALGRLLVVYPWTQRFFDNFGNLSSASAIMGNPKVKAHGKKVLSSLGEAVTHMD-DLKDAFAH 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH+++l+vdp++f+ll++vlv vla+++++eft++vqaa +Kl++ va++l +kY+ sp|O77655|HBG_TARBA 89 LSELHCDRLHVDPENFRLLGNVLVIVLAHHFGREFTPQVQAAWKKLMSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P11758|HBB_MYOVE Hemoglobin subunit beta OS=Myotis velifer GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.7 0.1 8.6e-57 4.2e-54 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 187.7 bits; conditional E-value: 8.6e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v +W+kv +v+e+G+++L rl++++P+tq+fF +F+dLs +++++++ +vk+Hgkkvl+ ++++l+++d +l++++++ sp|P11758|HBB_MYOVE 1 VHLTADEKAAVSGLWGKV--NVDEVGGEALGRLLVVYPWTQRFFTSFGDLSNAAAVMGNSKVKAHGKKVLNSFGEGLKNVD-NLKGTFAS 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv vla +++keft++vq+a++Kl va++la+kY+ sp|P11758|HBB_MYOVE 88 LSELHCDKLHVDPENFRLLGNVLVIVLARHFGKEFTPQVQGAFQKLALGVATALAHKYH 146 **********************************************************7 PP >> sp|P85077|MYG_STRCA Myoglobin OS=Struthio camelus GN=MB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.6 1.8 8.7e-57 4.3e-54 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 187.6 bits; conditional E-value: 8.7e-57 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+++v+++W+kve+d++++G iL+rlf+ +P+t++ FekFk+L+t++++k+s+++kkHg++vl+ l+++l++ ++k+ea+lk+L+ sp|P85077|MYG_STRCA 3 LSDQEWQQVLTIWGKVESDIAGHGHAILMRLFQDHPETLDRFEKFKGLTTPEQMKASEELKKHGVTVLTQLGKILKQ-KGKHEAELKPLA 91 99***************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + Ha+k+k+++ky++++sev+++v+a++++++f+ad qaa++K+l+l+++++askYk sp|P85077|MYG_STRCA 92 QTHATKHKIPVKYLEFISEVIIKVIAEKHSADFGADSQAAMKKALELFRNDMASKYK 148 ********************************************************7 PP >> sp|Q7M2Y4|HBA_CHAMP Hemoglobin subunit alpha OS=Chalinolobus morio GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.6 0.2 8.9e-57 4.3e-54 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 187.6 bits; conditional E-value: 8.9e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W kv+ ++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv dAl++a+a+ld +l+++l++L sp|Q7M2Y4|HBA_CHAMP 1 VLSPADKSNVKAAWDKVGGSAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVGDALGNAVAHLD-DLPGALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l++++a ++p++ft++v+a+l+K+la v+++l skY+ sp|Q7M2Y4|HBA_CHAMP 84 SDLHAHKLRVDPVNFKLLSHCLLVTVACHHPNDFTPAVHASLDKFLANVSTVLVSKYR 141 *********************************************************7 PP >> sp|Q7LZM5|MYG_AETPY Myoglobin OS=Aethia pygmaea GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.6 0.9 9e-57 4.4e-54 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 187.6 bits; conditional E-value: 9e-57 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+++v+++W+kve+d +++G ++L+rlf+ +P+t++ F+kFk+L+t+d++k+s+d+kkHg++vl+ l+++l++ ++++e++lk+L+ sp|Q7LZM5|MYG_AETPY 3 LSDQEWQQVLSIWGKVESDLAGHGHQVLMRLFQDHPETLDRFDKFKGLKTPDQMKGSEDLKKHGVTVLTQLGKILKQ-KGNHESELKPLA 91 99***************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + Ha+k+k+++ky++++se++++v+a++++++f+ d qaa++K+l+l+++++askYk sp|Q7LZM5|MYG_AETPY 92 QTHATKHKIPVKYLEFISEAIMKVIAEKHAADFGGDSQAAMKKALELFRNDMASKYK 148 ********************************************************7 PP >> sp|P01951|HBA_TALEU Hemoglobin subunit alpha OS=Talpa europaea GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.6 0.6 9.2e-57 4.5e-54 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 187.6 bits; conditional E-value: 9.2e-57 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs +k+++ka+W kv+a+++e+Ga++L+r f+s+P+t+++F++F dLs ++sa+vk+Hgkkv+dAl++a+ +ld +l++++++L sp|P01951|HBA_TALEU 1 VLSGTDKSNIKAAWDKVGAHAGEYGAEALERTFTSFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVADALTNAVGHLD-DLPGAMSAL 83 6999******************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la ++p++ft++v+a+l+K+la+v+++l+skY+ sp|P01951|HBA_TALEU 84 SDLHAHKLRVDPVNFKLLSHCLLVTLACHHPNDFTPAVHASLDKFLATVSTVLTSKYR 141 *********************************************************7 PP >> sp|B3EWD8|HBB_TAMHU Hemoglobin subunit beta OS=Tamiasciurus hudsonicus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.5 0.5 9.7e-57 4.7e-54 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 187.5 bits; conditional E-value: 9.7e-57 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ekt++ ++W+k ++e+G+++L rl++++P+tq+fF++F+dLs + +l+++a+vk+Hgkkvld +s++l++ld +l++++++ sp|B3EWD8|HBB_TAMHU 1 VHLSGEEKTALATLWGKN--VADEVGGEALGRLLVVYPWTQRFFDSFGDLSSASALMSNAKVKAHGKKVLDSFSEGLKHLD-DLKGTFSS 87 69***************8..689*********************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll+++lv v+a++l+k+ft+++qaa++K++a va++la+kY+ sp|B3EWD8|HBB_TAMHU 88 LSELHCDKLHVDPENFRLLGNMLVLVMAHHLGKDFTPAAQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P18435|HBE_TARSY Hemoglobin subunit epsilon OS=Tarsius syrichta GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.4 0.1 1e-56 4.9e-54 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 187.4 bits; conditional E-value: 1e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek+ v+++W+k+ +v+e G+++L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P18435|HBE_TARSY 2 VHLTAEEKSSVTSLWGKM--NVDEAGGEALGRLLVVYPWTQRFFDNFGNLSSSSAIMGNPKVKAHGKKVLTSFGDAIKNMD-NLKGAFAK 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv +l ++++k+ft++vq a +Kl++ va++la+kY+ sp|P18435|HBE_TARSY 89 LSELHCDKLHVDPENFRLLGNVLVIILVTHFGKDFTPEVQVAWQKLVSGVATALAHKYH 147 **********************************************************7 PP >> sp|B3EWD6|HBB_PERCA Hemoglobin subunit beta OS=Peromyscus californicus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.4 0.1 1e-56 4.9e-54 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 187.4 bits; conditional E-value: 1e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L++aek v+ +W+kv + +e G+++L rl++ +P+tq+fF++F+dLs + +l+++++vk+Hgkkvld +s++l++ld +l++++++ sp|B3EWD6|HBB_PERCA 1 VHLTDAEKALVTGLWGKV--KPDELGGEALGRLLVGYPWTQRFFDSFGDLSSASALMGNPKVKAHGKKVLDSFSEGLKHLD-NLKGTFAS 87 69****************..899**********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll+++lv vla+ l+k+ft+++qaa++K++a va++la+kY+ sp|B3EWD6|HBB_PERCA 88 LSELHCDKLHVDPENFKLLGNMLVLVLAHLLGKDFTPAAQAAYQKVVAGVATALAHKYH 146 **********************************************************7 PP >> sp|P86874|MYG_DRONO Myoglobin OS=Dromaius novaehollandiae GN=MB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.3 1.3 1.1e-56 5.3e-54 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 187.3 bits; conditional E-value: 1.1e-56 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+++v+++W+kve+d +++G +iL+rlf P+t++ Fe+Fk+L+t+d++k+s+++kkHg++vl+ l+++l+ ++k+ea+lk+L+ sp|P86874|MYG_DRONO 3 LSDQEWQHVLTIWGKVESDLAGHGHEILMRLFHDLPETLDRFERFKGLTTPDQMKASEELKKHGVTVLTQLGKILKL-KGKHEAELKPLA 91 99************************************************************************987.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + Ha+k+k+++ky++++sev+++v+a++++++f+ad qaa++K+l+l+++++askYk sp|P86874|MYG_DRONO 92 QTHATKHKIPVKYLEFISEVIIKVIAEKHSADFGADSQAAMKKALELFRNDMASKYK 148 ********************************************************7 PP >> sp|P51438|HBE_ATEBE Hemoglobin subunit epsilon OS=Ateles belzebuth GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.3 0.1 1.1e-56 5.3e-54 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 187.3 bits; conditional E-value: 1.1e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P51438|HBE_ATEBE 2 VHLTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P51438|HBE_ATEBE 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P19760|HBG_OTOCR Hemoglobin subunit gamma OS=Otolemur crassicaudatus GN=HBG PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.3 0.1 1.1e-56 5.5e-54 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 187.3 bits; conditional E-value: 1.1e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek ++++W+kv +vee G+++L rl++++P+tq+fF+ F++Ls + +++++++vk+Hgkkvl l++a++++d +l++++++ sp|P19760|HBG_OTOCR 2 VHFTAEEKAIITSLWGKV--NVEEDGGEALGRLLVVYPWTQRFFDTFGNLSSASAIMGNPKVKAHGKKVLSSLGEAIKNMD-DLKGTFSH 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH+++l+vdp++f+ll++vlv vla++++keft+++qaa +K++a va++la+kY+ sp|P19760|HBG_OTOCR 89 LSELHCDRLHVDPENFRLLGNVLVIVLAKHFGKEFTPQIQAACQKMVAGVATALAHKYH 147 **********************************************************7 PP >> sp|P10892|HBA_LUTLU Hemoglobin subunit alpha OS=Lutra lutra GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.3 0.3 1.1e-56 5.6e-54 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 187.3 bits; conditional E-value: 1.1e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk+ W k++ +++e+G+++L+r f+s+P+t+++F++F dLs ++sa+vk+Hgkkv+dAl++a+a++d +l+++l++L sp|P10892|HBA_LUTLU 1 VLSPADKTNVKSTWDKIGGHAGEYGGEALERTFVSFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVADALTNAVAHMD-DLPGALSAL 83 69********************************************.***.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K+++ v+++l+skY+ sp|P10892|HBA_LUTLU 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFFSAVSTVLTSKYR 141 *********************************************************7 PP >> sp|Q7LZM4|MYG_CERMN Myoglobin OS=Cerorhinca monocerata GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.2 0.9 1.2e-56 5.6e-54 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 187.2 bits; conditional E-value: 1.2e-56 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+++v+++W+kve+d +++G ++L+rlf+ +P+t++ FekFk+L+t+d++k+s+d+kkHg++vl+ l+++l++ ++++e++lk+L+ sp|Q7LZM4|MYG_CERMN 3 LSDQEWQQVLSIWGKVESDLAGHGHQVLMRLFQDHPETLDRFEKFKGLKTPDQMKGSEDLKKHGVTVLTQLGKILKQ-KGNHESELKPLA 91 99***************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + Ha+k+k+++ky++++se++++v+a++++++f+ d qaa++K+l+l+++++askYk sp|Q7LZM4|MYG_CERMN 92 QTHATKHKIPVKYLEFISEAIMKVIAEKHAADFGGDSQAAMKKALELFRNDMASKYK 148 ********************************************************7 PP >> sp|P02094|HBB_MESAU Hemoglobin subunit beta OS=Mesocricetus auratus GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.1 0.8 1.2e-56 6e-54 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 187.1 bits; conditional E-value: 1.2e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L++aek v+ +W+kv +++ +Ga++L rl++++P+tq+fFe+F+dLs + +++++++vk+Hgkkv++ ++d+l++ld +l++++++ sp|P02094|HBB_MESAU 2 VHLTDAEKALVTGLWGKV--NADAVGAEALGRLLVVYPWTQRFFEHFGDLSSASAVMNNPQVKAHGKKVIHSFADGLKHLD-NLKGAFSS 88 69****************..8899*********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll+++++ vl + l+k+ft+++q+a++K++a va++la+kY+ sp|P02094|HBB_MESAU 89 LSELHCDKLHVDPENFKLLGNMIIIVLSHDLGKDFTPSAQSAFHKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|Q45XH8|HBG_LOXAF Hemoglobin subunit gamma OS=Loxodonta africana GN=HBG PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.0 0.1 1.4e-56 6.6e-54 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 187.0 bits; conditional E-value: 1.4e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek ++ ++W++v +vee+G+++L rl++++P+tq+fF+ F++Ls + ++++++ vk+Hgkkvl+ ++da+++ld +l++++++ sp|Q45XH8|HBG_LOXAF 2 VHFTAEEKAAIASLWGQV--NVEETGGEALGRLLVVYPWTQRFFDTFGNLSSASAIMGNPRVKAHGKKVLTSFGDAVKNLD-NLKGTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv vla++++keft++vqaa +K++ va++la kY+ sp|Q45XH8|HBG_LOXAF 89 LSELHCDKLHVDPENFRLLGNVLVIVLANHFGKEFTPQVQAAWQKMVTGVANALAYKYH 147 **********************************************************7 PP >> sp|P01963|HBA_CERSI Hemoglobin subunit alpha OS=Ceratotherium simum GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.0 0.2 1.4e-56 6.7e-54 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 187.0 bits; conditional E-value: 1.4e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ +kt+vk++W+ v+a+++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk+Hgkkv dAl++a+ +ld +l+++l++L sp|P01963|HBA_CERSI 2 VLSPTDKTNVKTAWGHVGAQAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTQAVGHLD-DLPGALSAL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p++ft++v+a+l+K+l+ v+++l+skY+ sp|P01963|HBA_CERSI 85 SDLHAYKLRVDPVNFKLLSHCLLVTLALHHPQDFTPAVHASLDKFLSNVSTVLTSKYR 142 *********************************************************7 PP >> sp|P02104|HBE_MOUSE Hemoglobin subunit epsilon-Y2 OS=Mus musculus GN=Hbb-y PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 187.0 0.2 1.4e-56 6.7e-54 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 187.0 bits; conditional E-value: 1.4e-56 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++ekt ++ +W+kv +vee+G+++L rl++++P+tq+fF++F++Ls + ++++++ vk+Hgkkvl+A+++ +++ld +l+++l++Ls sp|P02104|HBE_MOUSE 4 FTAEEKTLINGLWSKV--NVEEVGGEALGRLLVVYPWTQRFFDSFGNLSSASAIMGNPRVKAHGKKVLTAFGESIKNLD-NLKSALAKLS 90 789*************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++fkll++vlv vla+++++efta++qaa +Kl+a va++l++kY+ sp|P02104|HBE_MOUSE 91 ELHCDKLHVDPENFKLLGNVLVIVLASHFGNEFTAEMQAAWQKLVAGVATALSHKYH 147 ********************************************************7 PP >> sp|Q2KPA3|HBB_SCAOR Hemoglobin subunit beta OS=Scapanus orarius GN=HBB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.9 0.0 1.5e-56 7.2e-54 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 186.9 bits; conditional E-value: 1.5e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls++ek v+ +W+kv +v+++Ga++L rl++++P+tq+fF++F+dLs + +++++++vk+Hgkkv++ +sd++++ld +l++++++ sp|Q2KPA3|HBB_SCAOR 2 VHLSAEEKGLVTGLWGKV--NVDDVGAEALGRLLVVYPWTQRFFDSFGDLSSAGAIMGNPKVKAHGKKVANSISDGIKNLD-NLKGTYAK 88 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+v+a l+keft+++qaa++K++ va++la+kY+ sp|Q2KPA3|HBB_SCAOR 89 LSELHCDKLHVDPENFRLLGNVLVCVMARTLGKEFTPHAQAAFQKMVLGVATALAHKYH 147 **********************************************************7 PP >> sp|P18994|HBE_PONPY Hemoglobin subunit epsilon OS=Pongo pygmaeus GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.8 0.5 1.6e-56 7.8e-54 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 186.8 bits; conditional E-value: 1.6e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +v+++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P18994|HBE_PONPY 2 VHFTAEEKAAVTSLWSKM--NVEEAGGEALGRLLVVYPWTQRFFDSFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++v+v +la++++keft++vqaa +Kl++ va++la+kY+ sp|P18994|HBE_PONPY 89 LSELHCDKLHVDPENFKLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALAHKYH 147 **********************************************************7 PP >> sp|P61921|HBG2_PANTR Hemoglobin subunit gamma-2 OS=Pan troglodytes GN=HBG2 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.7 0.0 1.6e-56 8e-54 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 186.7 bits; conditional E-value: 1.6e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +e++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+da+++ld +l++++++ sp|P61921|HBG2_PANTR 3 HFTEEDKATITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGDAIKHLD-DLKGTFAQ 88 6799*************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla +++keft++vqa+ +K++ va +l+s+Y+ sp|P61921|HBG2_PANTR 89 LSELHCDKLHVDPENFKLLGNVLVTVLAIHFGKEFTPEVQASWQKMVTGVASALSSRYH 147 **********************************************************7 PP >> sp|P62742|HBG2_GORGO Hemoglobin subunit gamma-2 OS=Gorilla gorilla gorilla GN=HBG2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.7 0.0 1.6e-56 8e-54 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 186.7 bits; conditional E-value: 1.6e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +e++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+da+++ld +l++++++ sp|P62742|HBG2_GORGO 3 HFTEEDKATITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGDAIKHLD-DLKGTFAQ 88 6799*************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla +++keft++vqa+ +K++ va +l+s+Y+ sp|P62742|HBG2_GORGO 89 LSELHCDKLHVDPENFKLLGNVLVTVLAIHFGKEFTPEVQASWQKMVTGVASALSSRYH 147 **********************************************************7 PP >> sp|P69892|HBG2_HUMAN Hemoglobin subunit gamma-2 OS=Homo sapiens GN=HBG2 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.7 0.0 1.6e-56 8e-54 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 186.7 bits; conditional E-value: 1.6e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +e++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+da+++ld +l++++++ sp|P69892|HBG2_HUMAN 3 HFTEEDKATITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGDAIKHLD-DLKGTFAQ 88 6799*************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla +++keft++vqa+ +K++ va +l+s+Y+ sp|P69892|HBG2_HUMAN 89 LSELHCDKLHVDPENFKLLGNVLVTVLAIHFGKEFTPEVQASWQKMVTGVASALSSRYH 147 **********************************************************7 PP >> sp|P61920|HBG1_PANTR Hemoglobin subunit gamma-1 OS=Pan troglodytes GN=HBG1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.7 0.1 1.7e-56 8.4e-54 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 186.7 bits; conditional E-value: 1.7e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +e++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+da+++ld +l++++++ sp|P61920|HBG1_PANTR 3 HFTEEDKATITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGDAIKHLD-DLKGTFAQ 88 6799*************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla +++keft++vqa+ +K++ va +l+s+Y+ sp|P61920|HBG1_PANTR 89 LSELHCDKLHVDPENFKLLGNVLVTVLAIHFGKEFTPEVQASWQKMVTAVASALSSRYH 147 **********************************************************7 PP >> sp|P69891|HBG1_HUMAN Hemoglobin subunit gamma-1 OS=Homo sapiens GN=HBG1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.7 0.1 1.7e-56 8.4e-54 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 186.7 bits; conditional E-value: 1.7e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +e++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+da+++ld +l++++++ sp|P69891|HBG1_HUMAN 3 HFTEEDKATITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGDAIKHLD-DLKGTFAQ 88 6799*************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv+vla +++keft++vqa+ +K++ va +l+s+Y+ sp|P69891|HBG1_HUMAN 89 LSELHCDKLHVDPENFKLLGNVLVTVLAIHFGKEFTPEVQASWQKMVTAVASALSSRYH 147 **********************************************************7 PP >> sp|P11753|HBA_CYNSP Hemoglobin subunit alpha OS=Cynopterus sphinx GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.5 0.1 1.9e-56 9.4e-54 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 186.5 bits; conditional E-value: 1.9e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W kv+ +++e+Ga++L+r+f+s+P+t+++F++F dL ++s++vk Hgkkv dAl++a+ ++d +l+++l++L sp|P11753|HBA_CYNSP 1 VLSPADKTNVKAAWDKVGGNAGEYGAEALERMFLSFPTTKTYFPHF-DLA-----HGSPQVKGHGKKVGDALTNAVSHID-DLPGALSAL 83 69********************************************.999.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la++lp++ft++v+a+l+K+la+v+++l+skY+ sp|P11753|HBA_CYNSP 84 SDLHAYKLRVDPVNFKLLSHCLLVTLANHLPSDFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P0CH25|HBA1_CAPHI Hemoglobin subunit alpha-1 OS=Capra hircus GN=HBA1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.5 0.3 2e-56 9.5e-54 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 186.5 bits; conditional E-value: 2e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+k++vka+W+kv+ +++ +Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg+kv+ Al++a+ +ld +l+++l+d sp|P0CH25|HBA1_CAPHI 2 VLSAADKSNVKAAWGKVGGNAGAYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGEKVAAALTKAVGHLD-DLPGTLSD 83 8*********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls+ l+++la +lp++ft++v+a+l+K+la v+++l+skY+ sp|P0CH25|HBA1_CAPHI 84 LSDLHAHKLRVDPVNFKLLSHSLLVTLACHLPNDFTPAVHASLDKFLANVSTVLTSKYR 142 **********************************************************7 PP >> sp|P68239|HBA_AMMLE Hemoglobin subunit alpha-1/2 OS=Ammotragus lervia PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.5 0.3 2e-56 9.5e-54 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 186.5 bits; conditional E-value: 2e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W+kv+ +++ +Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg+kv+ Al++a+ +ld +l+++l+dL sp|P68239|HBA_AMMLE 2 VLSAADKSNVKAAWGKVGGNAGAYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGEKVAAALTKAVGHLD-DLPGTLSDL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls+ l+++la +lp++ft++v+a+l+K+la v+++l+skY+ sp|P68239|HBA_AMMLE 85 SDLHAHKLRVDPVNFKLLSHSLLVTLACHLPNDFTPAVHASLDKFLANVSTVLTSKYR 142 *********************************************************7 PP >> sp|P68240|HBA_SHEEP Hemoglobin subunit alpha-1/2 OS=Ovis aries PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.5 0.3 2e-56 9.5e-54 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 186.5 bits; conditional E-value: 2e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W+kv+ +++ +Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg+kv+ Al++a+ +ld +l+++l+dL sp|P68240|HBA_SHEEP 2 VLSAADKSNVKAAWGKVGGNAGAYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGEKVAAALTKAVGHLD-DLPGTLSDL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls+ l+++la +lp++ft++v+a+l+K+la v+++l+skY+ sp|P68240|HBA_SHEEP 85 SDLHAHKLRVDPVNFKLLSHSLLVTLACHLPNDFTPAVHASLDKFLANVSTVLTSKYR 142 *********************************************************7 PP >> sp|Q28507|HBE_MACMU Hemoglobin subunit epsilon OS=Macaca mulatta GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.4 0.4 2.1e-56 1e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 186.4 bits; conditional E-value: 2.1e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +v+++W+k+ +vee+G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l+ ++++ sp|Q28507|HBE_MACMU 2 VHFTAEEKAAVTSLWSKM--NVEETGGEALGRLLVVYPWTQRFFDSFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKITFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++v+v +la++++keft++vqaa +Kl++ va++la+kY+ sp|Q28507|HBE_MACMU 89 LSELHCDKLHVDPENFKLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALAHKYH 147 **********************************************************7 PP >> sp|P07405|HBA_FELCA Hemoglobin subunit alpha OS=Felis catus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.4 0.7 2.1e-56 1e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 186.4 bits; conditional E-value: 2.1e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka W+k++++++e+Ga++L+r f s+P+t+++F++F dLs ++sa+vk+Hg+kv+dAl++a+a++d +l++++++L sp|P07405|HBA_FELCA 1 VLSAADKSNVKACWGKIGSHAGEYGAEALERTFCSFPTTKTYFPHF-DLS-----HGSAQVKAHGQKVADALTQAVAHMD-DLPTAMSAL 83 69********************************************.***.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fk+ls++l+++la ++p+eft++v+a+l+K+++ v+++l+skY+ sp|P07405|HBA_FELCA 84 SDLHAYKLRVDPVNFKFLSHCLLVTLACHHPAEFTPAVHASLDKFFSAVSTVLTSKYR 141 *********************************************************7 PP >> sp|P23601|HBA_MUSPU Hemoglobin subunit alpha-1/2 OS=Mustela putorius PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.3 0.3 2.2e-56 1.1e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 186.3 bits; conditional E-value: 2.2e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk+ W k++ +++e+G+++L+r f s+P+t+++F++F dLs ++sa+vk+Hgkkv+dAl++a+a++d +l+++l++L sp|P23601|HBA_MUSPU 1 VLSPADKTNVKSTWDKIGGHAGEYGGEALERTFASFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVADALTNAVAHMD-DLPGALSAL 83 69********************************************.***.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K+++ v+++l+skY+ sp|P23601|HBA_MUSPU 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFFSAVSTVLTSKYR 141 *********************************************************7 PP >> sp|P09839|HBA_MACCA Hemoglobin subunit alpha OS=Macrotus californicus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.3 0.3 2.2e-56 1.1e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 186.3 bits; conditional E-value: 2.2e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k +vka+W kv+ +++e+Ga++L+r+f+s+P+t+++F++F dL ++sa+vk Hgkkv+dAl++a+ ++d +l+++l++L sp|P09839|HBA_MACCA 1 VLSAADKGNVKAAWDKVGGQAGEYGAEALERMFLSFPTTKTYFPHF-DLA-----HGSAQVKGHGKKVADALTNAVGHMD-DLPGALSAL 83 69********************************************.999.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la+++p+eft++++a+l+K++a+v+++l+skY+ sp|P09839|HBA_MACCA 84 SDLHAYKLRVDPVNFKLLSHCLLVTLASHHPAEFTPAIHASLDKFFASVSTVLTSKYR 141 *********************************************************7 PP >> sp|Q9TSN7|HBA1_BUBBU Hemoglobin subunit alpha-1 OS=Bubalus bubalis PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.3 0.8 2.2e-56 1.1e-53 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 186.3 bits; conditional E-value: 2.2e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+k++v+a+W+kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg kv+ Al++a+ +ld +l+++l++ sp|Q9TSN7|HBA1_BUBBU 2 VLSAADKSNVQAAWGKVGGHAADYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGAKVAAALTKAVGHLD-DLPGALSE 83 8*********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls+ l+++la++lp++ft++v+a+l+K+la+v+++l+skY+ sp|Q9TSN7|HBA1_BUBBU 84 LSDLHAHKLRVDPVNFKLLSHSLLVTLASHLPNDFTPAVHASLDKFLASVSTVLTSKYR 142 **********************************************************7 PP >> sp|P04237|HBA_TRAST Hemoglobin subunit alpha OS=Tragelaphus strepsiceros GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.3 1.0 2.2e-56 1.1e-53 3 149 .] 1 140 [] 1 140 [] 0.99 Alignments for each domain: == domain 1 score: 186.3 bits; conditional E-value: 2.2e-56 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls+a+k +vka+W+kv+++++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg kv+ Al++a+ +ld +l+++l+dLs sp|P04237|HBA_TRAST 1 LSAADKGHVKAAWGKVGSHAAEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGAKVAAALTKAVDHLD-DLPGALSDLS 83 89*******************************************.***.....************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +lHa+kl+vdp +fklls+ l+++la++lp++ft++v+a+l+K+la v+++l+skY+ sp|P04237|HBA_TRAST 84 DLHAHKLRVDPVNFKLLSHSLLVTLASHLPGDFTPAVHASLDKFLANVSTVLTSKYR 140 ********************************************************7 PP >> sp|P01966|HBA_BOVIN Hemoglobin subunit alpha OS=Bos taurus GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.3 1.0 2.3e-56 1.1e-53 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 186.3 bits; conditional E-value: 2.3e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k +vka+W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg kv+ Al++a+ +ld +l+++l++L sp|P01966|HBA_BOVIN 2 VLSAADKGNVKAAWGKVGGHAAEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGAKVAAALTKAVEHLD-DLPGALSEL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls+ l+++la++lp++ft++v+a+l+K+la v+++l+skY+ sp|P01966|HBA_BOVIN 85 SDLHAHKLRVDPVNFKLLSHSLLVTLASHLPSDFTPAVHASLDKFLANVSTVLTSKYR 142 *********************************************************7 PP >> sp|B3EWE4|HBB_MICPE Hemoglobin subunit beta OS=Microtus pennsylvanicus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.3 0.9 2.3e-56 1.1e-53 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 186.3 bits; conditional E-value: 2.3e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L++aek ++ +W+k +++ +Ga++L rl++++P+tq+fFe+F+dLs + +++++++vk+Hgkkvl+A++d+l++ld +l++++++ sp|B3EWE4|HBB_MICPE 1 VHLTDAEKAALSGLWGKA--NADAVGAEALGRLLVVYPWTQRFFEHFGDLSSASAVMGNPKVKAHGKKVLHAFADGLKHLD-NLKGTFSA 87 69**************98..8999*********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll+++lv vl + l+k+ft+++qaa++K++a va +la+kY+ sp|B3EWE4|HBB_MICPE 88 LSELHCDKLHVDPENFRLLGNMLVLVLSHDLGKDFTPAAQAAFQKVVAGVASALAHKYH 146 **********************************************************7 PP >> sp|Q28932|HBB_SMICR Hemoglobin subunit beta OS=Sminthopsis crassicaudata GN=HBB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.2 0.2 2.5e-56 1.2e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 186.2 bits; conditional E-value: 2.5e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls++ek +++a+W+kv v+++Ga++L rl+ ++P+t +fF++F+dLs + ++++a+v+ Hg kvl+ ++da++++d +l++++++ sp|Q28932|HBB_SMICR 2 VHLSAEEKGHINAIWSKV--SVDQTGAEALGRLLIVYPWTSRFFDHFGDLSSAKGVMGNAKVQGHGAKVLTSFGDAVKNMD-NLKGTFAK 88 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll+++lv la++++k+ft++vqaa +Kl+a va++la+kY+ sp|Q28932|HBB_SMICR 89 LSELHCDKLHVDPENFRLLGNILVICLAEHFGKDFTPEVQAAWQKLVAGVATALAHKYH 147 **********************************************************7 PP >> sp|Q95190|HBE_HYLSY Hemoglobin subunit epsilon OS=Hylobates syndactylus GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.2 0.5 2.5e-56 1.2e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 186.2 bits; conditional E-value: 2.5e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +v+++W k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|Q95190|HBE_HYLSY 2 VHFTAEEKAAVTSLWNKM--NVEEAGGEALGRLLVVYPWTQRFFDSFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++v+v +la++++keft++vqaa +Kl++ va++la+kY+ sp|Q95190|HBE_HYLSY 89 LSELHCDKLHVDPENFKLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALAHKYH 147 **********************************************************7 PP >> sp|Q28779|HBG1_PANPA Hemoglobin subunit gamma-1 OS=Pan paniscus GN=HBG1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.2 0.0 2.5e-56 1.2e-53 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 186.2 bits; conditional E-value: 2.5e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +e++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+da+++ld +l++++++ sp|Q28779|HBG1_PANPA 3 HFTEEDKATITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGDAIKHLD-DLKGTFAQ 88 6799*************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqa+ +K++ va +l+s+Y+ sp|Q28779|HBG1_PANPA 89 LSELHCDKLHVDPENFRLLGNVLVTVLAIHFGKEFTPEVQASWQKMVTAVASALSSRYH 147 **********************************************************7 PP >> sp|P01956|HBA_ROUAE Hemoglobin subunit alpha OS=Rousettus aegyptiacus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.0 0.1 2.7e-56 1.3e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 186.0 bits; conditional E-value: 2.7e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs a+kt++ka+W kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv dAl++a+ +ld +l+++l++L sp|P01956|HBA_ROUAE 1 VLSSADKTNIKAAWDKVGGNAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVGDALTNAVGHLD-DLPGALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la++lp++ft++v+a+l+K+la+v+++l+skY+ sp|P01956|HBA_ROUAE 84 SDLHAYKLRVDPVNFKLLSHCLLVTLANHLPSDFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P09908|HBA_PHOVI Hemoglobin subunit alpha OS=Phoca vitulina GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.0 0.6 2.8e-56 1.4e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 186.0 bits; conditional E-value: 2.8e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka W k++ +++e+G+++L+r f+++P+t+++F++F dLs ++sa+vk+Hgkkv+dAl+ a+a++d +l+++l++L sp|P09908|HBA_PHOVI 1 VLSPADKTNVKATWDKIGGHAGEYGGEALERTFTAFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVADALTTAVAHMD-DLPGALSAL 83 69********************************************.***.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la ++p++ft++v+a+l+K+++ v+++l+skY+ sp|P09908|HBA_PHOVI 84 SDLHAHKLRVDPVNFKLLSHCLLVTLACHHPADFTPAVHASLDKFFSAVSTVLTSKYR 141 *********************************************************7 PP >> sp|Q0ZA50|HBA_PANHO Hemoglobin subunit alpha OS=Pantholops hodgsonii GN=HBA PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 186.0 0.2 2.9e-56 1.4e-53 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 186.0 bits; conditional E-value: 2.9e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W+kv+ +++ +Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg+kv+ Al++a+ +ld +l+++l+dL sp|Q0ZA50|HBA_PANHO 2 VLSAADKSNVKAAWGKVGGNAGAYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGEKVAAALTKAVGHLD-DLPGTLSDL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls+ l+++la +lp++ft++v+a+l+K+la+v ++l+skY+ sp|Q0ZA50|HBA_PANHO 85 SDLHAHKLRVDPVNFKLLSHTLLVTLACHLPNDFTPAVHASLDKFLASVGTVLTSKYR 142 *********************************************************7 PP >> sp|P02103|HBE_RABIT Hemoglobin subunit epsilon OS=Oryctolagus cuniculus GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.9 0.0 3e-56 1.5e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 185.9 bits; conditional E-value: 3e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek + + W++v +++e+G+++L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P02103|HBE_RABIT 2 VHFTPEEKCIISKQWGQV--NIDETGGEALGRLLVVYPWTQRFFDNFGNLSSSSAIMGNPKVKAHGKKVLTSFGDAIKNMD-NLKGAFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vl+ vla++++keft++vqaa +Kl++ va++la+kY+ sp|P02103|HBE_RABIT 89 LSELHCDKLHVDPENFKLLGNVLLIVLATHFGKEFTPEVQAAWQKLVSGVAIALAHKYH 147 **********************************************************7 PP >> sp|P18707|HBB_MESBR Hemoglobin subunit beta OS=Mesocricetus brandti GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.8 0.8 3.2e-56 1.6e-53 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 185.8 bits; conditional E-value: 3.2e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L++aek+ v +W+kv +++ +Ga++L rl+++tP+tq+fFe+F+dLs + +++++++vk+Hgkkv++ ++d+l++ld +l++++++ sp|P18707|HBB_MESBR 1 VHLTDAEKNLVSGLWGKV--NADAVGAEALGRLLVVTPWTQRFFEHFGDLSSASAVMNNPQVKAHGKKVIHSFADGLKHLD-NLKGAFSS 87 69****************..8899*********************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll+++++ vl + l+k+ft+++q+a++K++a va++la+kY+ sp|P18707|HBB_MESBR 88 LSELHCDKLHVDPENFKLLGNMIIIVLSHDLGKDFTPSAQSAFHKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P26915|HBA_NASNA Hemoglobin subunit alpha OS=Nasua nasua GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.8 0.3 3.3e-56 1.6e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 185.8 bits; conditional E-value: 3.3e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt++k+ W k+++++ e+G+++L+r f s+P+t+++F++F dLs +sa+vk+Hgkkv++Al++a+a+ld +l+++l++L sp|P26915|HBA_NASNA 1 VLSPADKTNIKSTWEKIGSHASEYGGEALERTFASFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVAEALTNAVAHLD-DLPGALSTL 83 69********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fk+ls++l+++la+++p+eft++v+a+l+K++++v+++l+skY+ sp|P26915|HBA_NASNA 84 SDLHAYKLRVDPVNFKFLSHCLLVTLASHHPAEFTPAVHASLDKFFSSVSTVLTSKYR 141 *********************************************************7 PP >> sp|P09423|HBA_BISBO Hemoglobin subunit alpha-I/II OS=Bison bonasus PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.8 0.7 3.3e-56 1.6e-53 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 185.8 bits; conditional E-value: 3.3e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k +vka+W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg kv+ Al++a+ +ld +l+++l++L sp|P09423|HBA_BISBO 2 VLSAADKGNVKAAWGKVGGHAAEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGAKVAAALTKAVGHLD-DLPGALSEL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls+ l+++la++lp++ft++v+a+l+K+la v+++l+skY+ sp|P09423|HBA_BISBO 85 SDLHAHKLRVDPVNFKLLSHSLLVTLASHLPNDFTPAVHASLDKFLANVSTVLTSKYR 142 *********************************************************7 PP >> sp|Q45XI7|HBD_DUGDU Hemoglobin subunit delta OS=Dugong dugon GN=HBD PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.8 0.4 3.3e-56 1.6e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 185.8 bits; conditional E-value: 3.3e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++e v+ +Wakv +v+e+G+++L rl++++P+tq+fFe+F+dLs + +++ +++vk+Hg+kvl ++d+l++ld +l++++++ sp|Q45XI7|HBD_DUGDU 2 VHLTADETALVTGLWAKV--NVKEYGGEALGRLLVVYPWTQRFFEHFGDLSSASAVMHNPKVKAHGEKVLASFGDGLKHLD-DLKGAFAE 88 69****************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls lH++k +vdp++fkll+++lv+vl +l+kef++++qaa+eK++a va++la+kY+ sp|Q45XI7|HBD_DUGDU 89 LSALHCEKSHVDPQNFKLLGNMLVCVLSRHLGKEFSPQAQAAYEKVVAGVANALAHKYH 147 **********************************************************7 PP >> sp|Q7LZM1|MYG_URILO Myoglobin OS=Uria lomvia GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.7 1.4 3.3e-56 1.6e-53 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 185.7 bits; conditional E-value: 3.3e-56 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+++v+++W+kve+d +++G ++L+rlf+ +P+t++ FekFk+L+t+d++k+s+d+kkHg++vl+ l+++l++ ++++e++lk+L+ sp|Q7LZM1|MYG_URILO 3 LSDQEWQHVLTIWGKVESDLAGHGHQVLMRLFQDHPETLDRFEKFKGLKTPDQMKGSEDLKKHGVTVLTQLGKILKQ-KGNHESELKPLA 91 99***************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + Ha+k+k+++ky++++se++++v+a+++++ f+ad qaa++K+l+l+++++askYk sp|Q7LZM1|MYG_URILO 92 QTHATKHKIPVKYLEFISEAIIKVIAEKHASSFGADSQAAMKKALELFRNDMASKYK 148 ********************************************************7 PP >> sp|B3EWC7|HBA_TAMMR Hemoglobin subunit alpha OS=Tamias merriami PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.7 1.0 3.5e-56 1.7e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 185.7 bits; conditional E-value: 3.5e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W kv+ + + +Ga++L+r+f+s+P+t+++F++F dLs ++sa+v+ Hgkkv+dAl++a +ld +l+++l++L sp|B3EWC7|HBA_TAMMR 1 VLSPADKTNVKAAWEKVGGHGAAYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVQGHGKKVADALANAAGHLD-DLPSALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p+eft++v+a+l+K+la+v+++l+skY+ sp|B3EWC7|HBA_TAMMR 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPAEFTPAVHASLDKFLATVSTVLTSKYR 141 *********************************************************7 PP >> sp|P68026|HBE_CALJA Hemoglobin subunit epsilon OS=Callithrix jacchus GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.7 0.1 3.5e-56 1.7e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 185.7 bits; conditional E-value: 3.5e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P68026|HBE_CALJA 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv +la++++keft++vqaa +Kl++ va++l +kY+ sp|P68026|HBE_CALJA 89 LSELHCDKLHVDPENFRLLGNVLVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P68027|HBE_CALPY Hemoglobin subunit epsilon OS=Callithrix pygmaea GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.7 0.1 3.5e-56 1.7e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 185.7 bits; conditional E-value: 3.5e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P68027|HBE_CALPY 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv +la++++keft++vqaa +Kl++ va++l +kY+ sp|P68027|HBE_CALPY 89 LSELHCDKLHVDPENFRLLGNVLVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P08224|HBG_CHEME Hemoglobin subunit gamma OS=Cheirogaleus medius GN=HBG PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.7 0.3 3.5e-56 1.7e-53 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 185.7 bits; conditional E-value: 3.5e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + + +ek ++++W+kv +vee G+++L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l++a++++d +l++++++L sp|P08224|HBG_CHEME 3 HFTVEEKAVITSLWGKV--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSASAIMGNPKVKAHGKKVLTSLGEAIKNMD-DLKGTFAHL 89 78899************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH+++l+vdp++fkll++ lv vla++++keft++vqaa +K++a va++la+kY+ sp|P08224|HBG_CHEME 90 SELHCDRLHVDPENFKLLGNELVIVLAKHFGKEFTPQVQAAWQKMVAGVAIALAHKYH 147 *********************************************************7 PP >> sp|P41327|HBA_LYNLY Hemoglobin subunit alpha OS=Lynx lynx GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.6 0.5 3.6e-56 1.8e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 185.6 bits; conditional E-value: 3.6e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka W+k++++++++G+++L+r f s+P+t+++F++F dLs ++sa+vk+Hg+kv+dAl++a+a++d +l+++l++L sp|P41327|HBA_LYNLY 1 VLSAADKSNVKACWGKIGSHAGDYGTEALERTFCSFPTTKTYFPHF-DLS-----HGSAQVKAHGQKVADALTQAVAHID-DLPNALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fk+ls++l+++la ++p+eft++v+a+l+K+++ v+++l+skY+ sp|P41327|HBA_LYNLY 84 SDLHAYKLRVDPVNFKFLSHCLLVTLACHHPAEFTPAVHASLDKFFSAVSTVLTSKYR 141 *********************************************************7 PP >> sp|P08852|HBA_MARMA Hemoglobin subunit alpha OS=Marmota marmota marmota GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.6 1.2 3.6e-56 1.8e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 185.6 bits; conditional E-value: 3.6e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W k++ + + +Ga++L+r+f+s+P+t+++F++F dLs ++sa+++ Hgkkv+dAl++a a++d +l+++l++L sp|P08852|HBA_MARMA 1 VLSPADKTNVKAAWEKIGGHGAAYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQIQGHGKKVADALANAAAHVD-DLPSALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p+eft++v+a+l+K+la+v+++l+skY+ sp|P08852|HBA_MARMA 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P08225|HBG_EULFU Hemoglobin subunit gamma OS=Eulemur fulvus fulvus GN=HBG PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.5 0.2 3.9e-56 1.9e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 185.5 bits; conditional E-value: 3.9e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek ++++W+kv +vee G+++L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+da++++d +l++++++ sp|P08225|HBG_EULFU 2 VHFTAEEKAVITSLWGKV--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSASAIMGNPKVKAHGKKVLTSLGDAIKNMD-DLKGTFAH 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH+++l+vdp++fkll++ lv vla+ ++keft++vqaa +K++a va++la+kY+ sp|P08225|HBG_EULFU 89 LSELHCDRLHVDPENFKLLGNELVIVLAKYFGKEFTPQVQAAWQKMVAGVAIALAHKYH 147 **********************************************************7 PP >> sp|P68077|HBG_MACMU Hemoglobin subunit gamma OS=Macaca mulatta GN=HBG PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.3 0.0 4.4e-56 2.2e-53 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 185.3 bits; conditional E-value: 4.4e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +e++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+da+++ld +l++++++L sp|P68077|HBG_MACMU 3 HFTEEDKATITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGDAIKNLD-DLKGTFAQL 89 6799*************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla +++keft++vqa+ +K++a va +l+s+Y+ sp|P68077|HBG_MACMU 90 SELHCDKLHVDPENFRLLGNVLVTVLAIHFGKEFTPEVQASWQKMVAGVASALSSRYH 147 *********************************************************7 PP >> sp|P68078|HBG_MACFU Hemoglobin subunit gamma OS=Macaca fuscata fuscata GN=HBG PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.3 0.0 4.4e-56 2.2e-53 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 185.3 bits; conditional E-value: 4.4e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +e++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+da+++ld +l++++++L sp|P68078|HBG_MACFU 3 HFTEEDKATITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGDAIKNLD-DLKGTFAQL 89 6799*************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla +++keft++vqa+ +K++a va +l+s+Y+ sp|P68078|HBG_MACFU 90 SELHCDKLHVDPENFRLLGNVLVTVLAIHFGKEFTPEVQASWQKMVAGVASALSSRYH 147 *********************************************************7 PP >> sp|P68079|HBG_PAPCY Hemoglobin subunit gamma OS=Papio cynocephalus GN=HBG PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.3 0.0 4.4e-56 2.2e-53 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 185.3 bits; conditional E-value: 4.4e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +e++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+da+++ld +l++++++L sp|P68079|HBG_PAPCY 3 HFTEEDKATITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGDAIKNLD-DLKGTFAQL 89 6799*************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla +++keft++vqa+ +K++a va +l+s+Y+ sp|P68079|HBG_PAPCY 90 SELHCDKLHVDPENFRLLGNVLVTVLAIHFGKEFTPEVQASWQKMVAGVASALSSRYH 147 *********************************************************7 PP >> sp|P01945|HBA_MESAU Hemoglobin subunit alpha OS=Mesocricetus auratus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.3 0.4 4.5e-56 2.2e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 185.3 bits; conditional E-value: 4.5e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++kt++ ++W+k++ +++e+Ga++L+r+f ++P+t+++F++F d+s ++sa+vk Hgkkv+dAl++a+ +ld +l+++l++L sp|P01945|HBA_MESAU 1 VLSAKDKTNISEAWGKIGGHAGEYGAEALERMFFVYPTTKTYFPHF-DVS-----HGSAQVKGHGKKVADALTNAVGHLD-DLPGALSAL 83 69********************************************.888.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la+++p++ft++v+a+l+K++a+v+++l+skY+ sp|P01945|HBA_MESAU 84 SDLHAHKLRVDPVNFKLLSHCLLVTLANHHPADFTPAVHASLDKFFASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02095|HBB_CAVPO Hemoglobin subunit beta OS=Cavia porcellus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.3 0.8 4.5e-56 2.2e-53 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 185.3 bits; conditional E-value: 4.5e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L++aek++++ +W+kv +v+e Ga++L rl++++P+tq+fFekF+dLs + +++++a+vk Hg kvl +s++l++l+ +l++++++ sp|P02095|HBB_CAVPO 1 VHLTAAEKSAILDLWGKV--NVGEIGAEALGRLLVVYPWTQRFFEKFGDLSSASAIMSNAHVKSHGAKVLASFSEGLKHLQ-DLKGTFAK 87 69****************..************************************************************8.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++++v la+++p+eft+ qaa++K+ a va++la+kY+ sp|P02095|HBB_CAVPO 88 LSELHCDKLHVDPENFRLLGNMIVIALAHHHPSEFTPCTQAAFQKVTAGVANALAHKYH 146 **********************************************************7 PP >> sp|P20243|HBA_MUSPF Hemoglobin subunit alpha-1/2 OS=Mustela putorius furo PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.3 0.3 4.5e-56 2.2e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 185.3 bits; conditional E-value: 4.5e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk+ W k++ +++e+G+++L+r f s+P+t+++F++F dLs ++sa+vk+Hgkkv+dAl++a+a++d +l+++l++L sp|P20243|HBA_MUSPF 1 VLSPADKTNVKSTWDKIGGHAGEYGGEALERTFASFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVADALTNAVAHVD-DLPGALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K+++ v+++l+skY+ sp|P20243|HBA_MUSPF 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFFSAVSTVLTSKYR 141 *********************************************************7 PP >> sp|P01953|HBA_MELME Hemoglobin subunit alpha OS=Meles meles GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.3 0.2 4.6e-56 2.3e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 185.3 bits; conditional E-value: 4.6e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k ++ka W k++ +++e+G+++L+r f s+P+t+++F++F dLs ++sa+vk Hgkkv+dAl++a+a+ld +l+++l++L sp|P01953|HBA_MELME 1 VLSPADKANIKATWDKIGGHAGEYGGEALERTFASFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVADALTNAVAHLD-DLPGALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K+l++v+++l+skY+ sp|P01953|HBA_MELME 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFLSSVSTVLTSKYR 141 *********************************************************7 PP >> sp|P11750|HBA_SPEPA Hemoglobin subunit alpha OS=Spermophilus parryii GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.3 0.9 4.6e-56 2.3e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 185.3 bits; conditional E-value: 4.6e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka W k++ + + +Ga++L+r+f+s+P+t+++F++F dLs ++sa+v+ Hgkkv+dAl++a a++d +l+++l++L sp|P11750|HBA_SPEPA 1 VLSPADKTNVKASWEKIGGHGAAYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVQGHGKKVADALANAAAHVD-DLPGALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p+eft++v+a+l+K+la+v+++l+skY+ sp|P11750|HBA_SPEPA 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02100|HBE_HUMAN Hemoglobin subunit epsilon OS=Homo sapiens GN=HBE1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.3 0.4 4.7e-56 2.3e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 185.3 bits; conditional E-value: 4.7e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +v+++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l+ ++++ sp|P02100|HBE_HUMAN 2 VHFTAEEKAAVTSLWSKM--NVEEAGGEALGRLLVVYPWTQRFFDSFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKPAFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++v+v +la++++keft++vqaa +Kl++ va++la+kY+ sp|P02100|HBE_HUMAN 89 LSELHCDKLHVDPENFKLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALAHKYH 147 **********************************************************7 PP >> sp|Q6LDH0|HBE_GORGO Hemoglobin subunit epsilon OS=Gorilla gorilla gorilla GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.3 0.4 4.7e-56 2.3e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 185.3 bits; conditional E-value: 4.7e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +v+++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l+ ++++ sp|Q6LDH0|HBE_GORGO 2 VHFTAEEKAAVTSLWSKM--NVEEAGGEALGRLLVVYPWTQRFFDSFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKPAFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++v+v +la++++keft++vqaa +Kl++ va++la+kY+ sp|Q6LDH0|HBE_GORGO 89 LSELHCDKLHVDPENFKLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALAHKYH 147 **********************************************************7 PP >> sp|Q6LDH1|HBE_PANTR Hemoglobin subunit epsilon OS=Pan troglodytes GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.3 0.4 4.7e-56 2.3e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 185.3 bits; conditional E-value: 4.7e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +v+++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l+ ++++ sp|Q6LDH1|HBE_PANTR 2 VHFTAEEKAAVTSLWSKM--NVEEAGGEALGRLLVVYPWTQRFFDSFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKPAFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++v+v +la++++keft++vqaa +Kl++ va++la+kY+ sp|Q6LDH1|HBE_PANTR 89 LSELHCDKLHVDPENFKLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALAHKYH 147 **********************************************************7 PP >> sp|P23600|HBA_MUSLU Hemoglobin subunit alpha-1/2 OS=Mustela lutreola PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.2 0.3 4.8e-56 2.3e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 185.2 bits; conditional E-value: 4.8e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk+ W k++ +++e+G+++L+r f s+P+t+++F++F dLs ++sa+vk+Hgkkv+dAl++a+a++d +l++++++L sp|P23600|HBA_MUSLU 1 VLSPADKTNVKSTWDKIGGHAGEYGGEALERTFASFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVADALTNAVAHMD-DLPGAMSAL 83 69********************************************.***.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K+++ v+++l+skY+ sp|P23600|HBA_MUSLU 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFFSAVSTVLTSKYR 141 *********************************************************7 PP >> sp|P01969|HBA_BOSGF Hemoglobin subunit alpha OS=Bos gaurus frontalis GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.2 0.9 5e-56 2.4e-53 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 185.2 bits; conditional E-value: 5e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k +vka+W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg kv+ Al++a+ +ld +l+++l++L sp|P01969|HBA_BOSGF 2 VLSAADKGNVKAAWGKVGDHAAEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGAKVAAALTKAVGHLD-DLPGALSEL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls+ l+++la++lp++ft++v+a+l+K+la v+++l+skY+ sp|P01969|HBA_BOSGF 85 SDLHAHKLRVDPVNFKLLSHSLLVTLASHLPNDFTPAVHASLDKFLANVSTVLTSKYR 142 *********************************************************7 PP >> sp|P09420|HBA_SPECI Hemoglobin subunit alpha OS=Spermophilus citellus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.2 0.6 5e-56 2.4e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 185.2 bits; conditional E-value: 5e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vk W k++ + +e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+v+ Hgkkv+dAl++a a++d +l+++l++L sp|P09420|HBA_SPECI 1 VLSPADKKNVKDCWEKIGGHGAEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVQGHGKKVADALANAAAHVD-DLPGALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p+eft++v+a+l+K+la+v+++l+skY+ sp|P09420|HBA_SPECI 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P01967|HBA1_BOSMU Hemoglobin subunit alpha-1 OS=Bos mutus grunniens PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.1 0.7 5.2e-56 2.5e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 185.1 bits; conditional E-value: 5.2e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+k +vka+W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg kv+ Al++a+ +ld +l+++l++ sp|P01967|HBA1_BOSMU 1 VLSAADKGNVKAAWGKVGGHAAEYGAEALERMFLSFPTTKTYFPHF-DLS-----QGSAQVKGHGAKVAAALTKAVEHLD-DLPGALSE 82 69********************************************.9**.....9***********************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls+ l+++la++lp++ft++v+a+l+K+la v+++l+skY+ sp|P01967|HBA1_BOSMU 83 LSDLHAHKLRVDPVNFKLLSHSLLVTLASHLPSDFTPAVHASLDKFLANVSTVLTSKYR 141 **********************************************************7 PP >> sp|P09904|HBA_PHYMC Hemoglobin subunit alpha OS=Physeter macrocephalus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.0 1.1 5.5e-56 2.7e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 185.0 bits; conditional E-value: 5.5e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+Wakv+ ++++ Ga++L+r+f+s+P t+++F +F dL ++s +vk Hgkkv+dAl++a+ +ld l+ +l+dL sp|P09904|HBA_PHYMC 1 VLSPADKTNVKAAWAKVGNHAADFGAEALERMFMSFPSTKTYFSHF-DLG-----HNSTQVKGHGKKVADALTKAVGHLD-TLPDALSDL 83 69********************************************.999.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp++ft++v+a+l+K+la+v+++l+skY+ sp|P09904|HBA_PHYMC 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPGDFTPSVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P01968|HBA2_BOSMU Hemoglobin subunit alpha-2 OS=Bos mutus grunniens PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.0 0.7 5.5e-56 2.7e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 185.0 bits; conditional E-value: 5.5e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+k +vka+W+kv+ +++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg kv+ Al++a+ +ld +l+++l++ sp|P01968|HBA2_BOSMU 1 VLSAADKGNVKAAWGKVGGHAAEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGAKVAAALTKAVGHLD-DLPGALSE 82 69********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls+ l+++la++lp++ft++v+a+l+K+la v+++l+skY+ sp|P01968|HBA2_BOSMU 83 LSDLHAHKLRVDPVNFKLLSHSLLVTLASHLPSDFTPAVHASLDKFLANVSTVLTSKYR 141 **********************************************************7 PP >> sp|P02065|HBB2_TAPTE Hemoglobin subunit beta-2 OS=Tapirus terrestris GN=HBB2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 185.0 0.9 5.7e-56 2.8e-53 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 185.0 bits; conditional E-value: 5.7e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 v+L +ek +v+a+W kv d e++G+++L rl++++P+tq+fF++F+dLst+++++++++vk+Hgkkvl+ +++++ +ld +l+ +++ sp|P02065|HBB2_TAPTE 1 VHLHGDEKAAVLALWDKV--DEEKVGGEALGRLLVVYPWTQRFFDSFGDLSTAAAVMGNPKVKAHGKKVLHSFGEGVHHLD-DLKVTFA 86 578899************..99**********************************************************9.******* PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +LselH++kl+vdp++f+ll++vlv+vla++++k ft++ qaa++K++a va +la+kY+ sp|P02065|HBB2_TAPTE 87 QLSELHCDKLHVDPENFRLLGNVLVVVLAQQFGKAFTPELQAAYQKVVAGVASALAHKYH 146 ***********************************************************7 PP >> sp|P68016|HBE_AOTAZ Hemoglobin subunit epsilon OS=Aotus azarae GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.9 0.1 6e-56 2.9e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 184.9 bits; conditional E-value: 6e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P68016|HBE_AOTAZ 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P68016|HBE_AOTAZ 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P68017|HBE_ALOBE Hemoglobin subunit epsilon OS=Alouatta belzebul GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.9 0.1 6e-56 2.9e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 184.9 bits; conditional E-value: 6e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P68017|HBE_ALOBE 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P68017|HBE_ALOBE 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P68018|HBE_ALOSE Hemoglobin subunit epsilon OS=Alouatta seniculus GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.9 0.1 6e-56 2.9e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 184.9 bits; conditional E-value: 6e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P68018|HBE_ALOSE 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P68018|HBE_ALOSE 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P68019|HBE_ATEGE Hemoglobin subunit epsilon OS=Ateles geoffroyi GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.9 0.1 6e-56 2.9e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 184.9 bits; conditional E-value: 6e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P68019|HBE_ATEGE 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P68019|HBE_ATEGE 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P68020|HBE_BRAAR Hemoglobin subunit epsilon OS=Brachyteles arachnoides GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.9 0.1 6e-56 2.9e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 184.9 bits; conditional E-value: 6e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P68020|HBE_BRAAR 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P68020|HBE_BRAAR 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P68021|HBE_CACCA Hemoglobin subunit epsilon OS=Cacajao calvus GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.9 0.1 6e-56 2.9e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 184.9 bits; conditional E-value: 6e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P68021|HBE_CACCA 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P68021|HBE_CACCA 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P68022|HBE_CALMO Hemoglobin subunit epsilon OS=Callicebus moloch GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.9 0.1 6e-56 2.9e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 184.9 bits; conditional E-value: 6e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P68022|HBE_CALMO 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P68022|HBE_CALMO 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P68023|HBE_CALTO Hemoglobin subunit epsilon OS=Callicebus torquatus GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.9 0.1 6e-56 2.9e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 184.9 bits; conditional E-value: 6e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P68023|HBE_CALTO 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P68023|HBE_CALTO 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P68024|HBE_CALGO Hemoglobin subunit epsilon OS=Callimico goeldii GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.9 0.1 6e-56 2.9e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 184.9 bits; conditional E-value: 6e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P68024|HBE_CALGO 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P68024|HBE_CALGO 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P68025|HBE_CHISA Hemoglobin subunit epsilon OS=Chiropotes satanas GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.9 0.1 6e-56 2.9e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 184.9 bits; conditional E-value: 6e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P68025|HBE_CHISA 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P68025|HBE_CHISA 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P14390|HBA_PTEPO Hemoglobin subunit alpha OS=Pteropus poliocephalus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.9 0.1 6.2e-56 3e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 184.9 bits; conditional E-value: 6.2e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs +k++vka+W kv+ +v+e+Ga++L+r+f+s+P+t+++F++F dL ++s +vk+Hgkkv dAl++a+ ++d +l+++l++L sp|P14390|HBA_PTEPO 1 VLSSTDKSNVKAAWDKVGGNVGEYGAEALERMFLSFPTTKTYFPHF-DLA-----HGSSQVKAHGKKVGDALTNAVGHMD-DLPGALSAL 83 69********************************************.999.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la++lp++ft++v+a+l+K+la+v+++l+skY+ sp|P14390|HBA_PTEPO 84 SDLHAYKLRVDPVNFKLLSHCLLVTLANHLPNDFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P10885|HBA_PTEBR Hemoglobin subunit alpha OS=Pteronura brasiliensis GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.7 0.2 6.9e-56 3.3e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 184.7 bits; conditional E-value: 6.9e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka W k++ +++e+G+++L+r f s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl++a+a++d +l+a+l++L sp|P10885|HBA_PTEBR 1 VLSPADKTNVKATWDKIGGHAGEYGGEALERTFASFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTNAVAHMD-DLPAALSAL 83 69********************************************.9**.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K++++v+++l+skY+ sp|P10885|HBA_PTEBR 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFFSTVSTVLTSKYR 141 *********************************************************7 PP >> sp|P68056|HBBC_SHEEP Hemoglobin subunit beta-C OS=Ovis aries GN=HBBC PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.7 0.2 7e-56 3.4e-53 7 149 .] 3 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 184.7 bits; conditional E-value: 7e-56 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 +k ++ W+kv +v+e+Ga++L rl++++P+tq+fFe+F+dLst+d++ ++a+vk+Hgkkvld +s+++++ld +l++++++LselH sp|P68056|HBBC_SHEEP 3 NKALITGFWSKV--KVDEVGAEALGRLLVVYPWTQRFFEHFGDLSTADAVLGNAKVKAHGKKVLDSFSNGVQHLD-DLKGTFAQLSELH 88 68899*******..9***********************************************************9.************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++kl+vdp++f+ll++vlv+vla +++keft++ qa ++K++a va +la++Y+ sp|P68056|HBBC_SHEEP 89 CDKLHVDPENFRLLGNVLVVVLARHFGKEFTPELQAEFQKVVAGVASALAHRYH 142 *****************************************************7 PP >> sp|P20854|HBA_CTEGU Hemoglobin subunit alpha OS=Ctenodactylus gundi GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.6 1.4 7.5e-56 3.7e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 184.6 bits; conditional E-value: 7.5e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W k++ + +e+Ga++L+r+f+s+P+t+++F++F d+s ++sa+vk+Hgkkv+dAl++a +ld +l+++l++L sp|P20854|HBA_CTEGU 1 VLSAADKTNVKAAWDKIGGHGGEYGAEALERMFLSFPTTKTYFPHF-DVS-----HGSAQVKAHGKKVADALANAASHLD-DLPNALSAL 83 69********************************************.888.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la ++p+eft++v+a+l+K+la+va++l+skY+ sp|P20854|HBA_CTEGU 84 SDLHAHKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFLATVATVLTSKYR 141 *********************************************************7 PP >> sp|Q28775|HBE_PANPA Hemoglobin subunit epsilon OS=Pan paniscus GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.6 0.3 7.6e-56 3.7e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 184.6 bits; conditional E-value: 7.6e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +v+++W+k+ +vee G+++L rl+ ++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l+ ++++ sp|Q28775|HBE_PANPA 2 VHFTAEEKAAVTSLWSKM--NVEEAGGEALGRLLIVYPWTQRFFDSFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKPAFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++v+v +la++++keft++vqaa +Kl++ va++la+kY+ sp|Q28775|HBE_PANPA 89 LSELHCDKLHVDPENFKLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALAHKYH 147 **********************************************************7 PP >> sp|P68057|HBBC_OVIMU Hemoglobin subunit beta-C OS=Ovis orientalis musimon GN=HBBC PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.6 0.2 7.5e-56 3.6e-53 7 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 184.6 bits; conditional E-value: 7.5e-56 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 +k ++ W+kv +v+e+Ga++L rl++++P+tq+fFe+F+dLst+d++ ++a+vk+Hgkkvld +s+++++ld +l++++++LselH sp|P68057|HBBC_OVIMU 2 NKALITGFWSKV--KVDEVGAEALGRLLVVYPWTQRFFEHFGDLSTADAVLGNAKVKAHGKKVLDSFSNGVQHLD-DLKGTFAQLSELH 87 58899*******..9***********************************************************9.************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++kl+vdp++f+ll++vlv+vla +++keft++ qa ++K++a va +la++Y+ sp|P68057|HBBC_OVIMU 88 CDKLHVDPENFRLLGNVLVVVLARHFGKEFTPELQAEFQKVVAGVASALAHRYH 141 *****************************************************7 PP >> sp|P51443|HBE_SAGMI Hemoglobin subunit epsilon OS=Saguinus midas GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.4 0.1 8.6e-56 4.2e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 184.4 bits; conditional E-value: 8.6e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P51443|HBE_SAGMI 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSFPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv +la++++keft++vqaa +Kl++ va++l +kY+ sp|P51443|HBE_SAGMI 89 LSELHCDKLHVDPENFRLLGNVLVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P14389|HBA_PTEAL Hemoglobin subunit alpha OS=Pteropus alecto GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.4 0.2 8.7e-56 4.3e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 184.4 bits; conditional E-value: 8.7e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs +k++vka+W kv+ +v+e+Ga++L+r+f+s+P+t+++F++F dL ++s +vk+Hgkkv dAl++a+ ++d +l+++l++L sp|P14389|HBA_PTEAL 1 VLSSTDKSNVKAAWDKVGGHVGEYGAEALERMFLSFPTTKTYFPHF-DLA-----HGSSQVKAHGKKVGDALTNAVGHID-DLPGALSAL 83 69********************************************.999.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la++lp++ft++v+a+l+K+la+v+++l+skY+ sp|P14389|HBA_PTEAL 84 SDLHAYKLRVDPVNFKLLSHCLLVTLASHLPSDFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P11755|HBA1_TADBR Hemoglobin subunit alpha-1 OS=Tadarida brasiliensis PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.4 0.0 8.8e-56 4.3e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 184.4 bits; conditional E-value: 8.8e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+++k++vka+W+kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hgkkv +Al+ a++++d +l+++l++ sp|P11755|HBA1_TADBR 1 VLSPEDKNNVKAAWSKVGGQAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGKKVGEALTTAVNHMD-DLPGALST 82 69********************************************.***.....*************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa kl+vdp +fklls++l+++la + p+eft++v+a+l+K+la+v+++l+skY+ sp|P11755|HBA1_TADBR 83 LSDLHAYKLRVDPVNFKLLSHCLLVTLACHNPGEFTPAVHASLDKFLASVSTVLTSKYR 141 **********************************************************7 PP >> sp|P02097|HBG_MACNE Hemoglobin subunit gamma OS=Macaca nemestrina GN=HBG PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.3 0.0 9e-56 4.4e-53 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 184.3 bits; conditional E-value: 9e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +e++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+da+++ld +l++++++L sp|P02097|HBG_MACNE 2 HFTEEDKATITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGDAIKNLD-DLKGTFAQL 88 6799*************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla r++keft++vqa+ +K++a va +l+s+Y+ sp|P02097|HBG_MACNE 89 SELHCDKLHVDPENFRLLGNVLVTVLAIRFGKEFTPEVQASWQKMVAGVASALSSRYH 146 *********************************************************7 PP >> sp|P01958|HBA_HORSE Hemoglobin subunit alpha OS=Equus caballus GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.3 0.3 9.2e-56 4.5e-53 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 184.3 bits; conditional E-value: 9.2e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+ +++e+Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl+ a+ +ld +l+++l++L sp|P01958|HBA_HORSE 2 VLSAADKTNVKAAWSKVGGHAGEYGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTLAVGHLD-DLPGALSNL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+ +la +lp++ft++v+a+l+K+l++v+++l+skY+ sp|P01958|HBA_HORSE 85 SDLHAHKLRVDPVNFKLLSHCLLSTLAVHLPNDFTPAVHASLDKFLSSVSTVLTSKYR 142 *********************************************************7 PP >> sp|P51440|HBE_LAGLA Hemoglobin subunit epsilon OS=Lagothrix lagotricha GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.3 0.2 9.3e-56 4.5e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 184.3 bits; conditional E-value: 9.3e-56 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P51440|HBE_LAGLA 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFEDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P51440|HBE_LAGLA 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|D0VX09|HBA_PTEGI Hemoglobin subunit alpha OS=Pteropus giganteus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.3 0.1 9.6e-56 4.7e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 184.3 bits; conditional E-value: 9.6e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs +k++vka+W kv+ +v+e+Ga++L+r+f+s+P+t+++F++F dL ++s +vk+Hgkkv dAl++a+ ++d +l+++l++L sp|D0VX09|HBA_PTEGI 1 VLSSTDKSNVKAAWDKVGGNVGEYGAEALERMFLSFPTTKTYFPHF-DLA-----HGSSQVKAHGKKVGDALTNAVGHID-DLPGALSAL 83 69********************************************.999.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la++lp++ft++v+a+l+K+la+v+++l+skY+ sp|D0VX09|HBA_PTEGI 84 SDLHAYKLRVDPVNFKLLSHCLLVTLASHLPSDFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P07403|HBA_SPETO Hemoglobin subunit alpha OS=Spermophilus townsendii GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.3 0.9 9.6e-56 4.7e-53 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 184.3 bits; conditional E-value: 9.6e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka W k++ + + +Ga++L+r+f+s+P+t+++F++F dLs ++sa+v+ Hgkkv+dAl++a a++d +l+++l++L sp|P07403|HBA_SPETO 1 VLSPADKNNVKACWEKIGGHGAAYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVQGHGKKVADALANAAAHVD-DLPSALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p+eft++v+a+l+K+la+v+++l+skY+ sp|P07403|HBA_SPETO 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P18995|HBG1_PONPY Hemoglobin subunit gamma-1 OS=Pongo pygmaeus GN=HBG1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.2 0.0 9.7e-56 4.7e-53 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 184.2 bits; conditional E-value: 9.7e-56 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +e++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+da+++ld +l++++++ sp|P18995|HBG1_PONPY 3 HFTEEDKATITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGDAIKNLD-DLKGTFAQ 88 6799*************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqa+ +K++ va +l+s+Y+ sp|P18995|HBG1_PONPY 89 LSELHCDKLHVDPENFRLLGNVLVTVLAIHFGKEFTPEVQASWQKMVTGVASALSSRYH 147 **********************************************************7 PP >> sp|P02082|HBBF_CAPHI Hemoglobin fetal subunit beta OS=Capra hircus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 184.1 0.0 1.1e-55 5.3e-53 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 184.1 bits; conditional E-value: 1.1e-55 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls++ek v++++akv +vee+G+++L rl++++P+tq+fFe+F+dLs +d++ ++++vk+Hgkkvld +s++l++ld +l++++++L sp|P02082|HBBF_CAPHI 2 LSAEEKASVLSLFAKV--NVEEVGGEALGRLLVVYPWTQRFFEHFGDLSSADAILGNPKVKAHGKKVLDTFSEGLKQLD-DLKGAFASL 87 9***************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla r+++eft++ qa ++K++ va++la++Y+ sp|P02082|HBBF_CAPHI 88 SELHCDKLHVDPENFRLLGNVLVVVLARRFGGEFTPELQANFQKVVTGVANALAHRYH 145 *********************************************************7 PP >> sp|Q9TVA3|HBA2_EQUBU Hemoglobin subunit alpha-2 OS=Equus burchelli GN=HBA2 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.9 0.2 1.2e-55 6.1e-53 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 183.9 bits; conditional E-value: 1.2e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+kt+vka+W+kv+ +++e Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl+ a+ +ld +l+++l++ sp|Q9TVA3|HBA2_EQUBU 2 VLSAADKTNVKAAWGKVGGNAGEFGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTLAVGHLD-DLPGALSN 83 8*********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls++l+ +la +lp++ft++v+a+l+K+l++v+++l+skY+ sp|Q9TVA3|HBA2_EQUBU 84 LSDLHAHKLRVDPVNFKLLSHCLLSTLAVHLPNDFTPAVHASLDKFLSTVSTVLTSKYR 142 **********************************************************7 PP >> sp|Q9TSN9|HBA3_BUBBU Hemoglobin subunit alpha-3 OS=Bubalus bubalis PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.9 0.8 1.3e-55 6.1e-53 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 183.9 bits; conditional E-value: 1.3e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+k++v+a+W+kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk Hg kv+ Al++a+ +ld +l+++l++ sp|Q9TSN9|HBA3_BUBBU 2 VLSAADKSNVQAAWGKVGGHAADYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKGHGAKVAAALTKAVGHLD-DLPGALSE 83 8*********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls+ l+++la++lp++ft++v+a+l+K++a v+++l+skY+ sp|Q9TSN9|HBA3_BUBBU 84 LSDLHAHKLRVDPVNFKLLSHSLLVTLASHLPNDFTPAVHASLDKFFANVSTVLTSKYR 142 **********************************************************7 PP >> sp|P14526|HBB_BRATR Hemoglobin subunit beta OS=Bradypus tridactylus GN=HBB PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.8 1.1 1.3e-55 6.6e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 183.8 bits; conditional E-value: 1.3e-55 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek +v a+W kv +vee G+++L rl++++P+t +fFe+F+dLs +d++ ++a+vk+Hgkkvl+ ++++l++ld +l++++++ sp|P14526|HBB_BRATR 2 VHLADDEKAAVSALWHKV--HVEEFGGEALGRLLVVYPWTSRFFESFGDLSSADAVFSNAKVKAHGKKVLTSFGEGLKHLD-DLKGTYAH 88 689***************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv vla +++keft++ qaa++K+ v+++la+kY+ sp|P14526|HBB_BRATR 89 LSELHCDKLHVDPENFKLLGNVLVIVLARHFGKEFTPQLQAAYQKVTTGVSTALAHKYH 147 **********************************************************7 PP >> sp|P01942|HBA_MOUSE Hemoglobin subunit alpha OS=Mus musculus GN=Hba PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.8 0.4 1.4e-55 6.7e-53 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 183.8 bits; conditional E-value: 1.4e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs ++k+++ka+W+k++ + +e+Ga++L+r+f s+P+t+++F++F d+s ++sa+vk Hgkkv+dAl+ a +ld +l+++l++L sp|P01942|HBA_MOUSE 2 VLSGEDKSNIKAAWGKIGGHGAEYGAEALERMFASFPTTKTYFPHF-DVS-----HGSAQVKGHGKKVADALASAAGHLD-DLPGALSAL 84 79********************************************.888.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la+++p++ft++v+a+l+K+la+v+++l+skY+ sp|P01942|HBA_MOUSE 85 SDLHAHKLRVDPVNFKLLSHCLLVTLASHHPADFTPAVHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|P68058|HBBC_AMMLE Hemoglobin subunit beta-C OS=Ammotragus lervia PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.7 0.2 1.4e-55 6.7e-53 7 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 183.7 bits; conditional E-value: 1.4e-55 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 +k ++ W+kv +v+e+Ga++L rl++++P+tq+fFe+F+dLst+d++ ++a+vk+Hgkkvld +s+++++ld +l++++++LselH sp|P68058|HBBC_AMMLE 2 NKALITGFWSKV--KVDEVGAEALGRLLVVYPWTQRFFEHFGDLSTADAVLGNAKVKAHGKKVLDSFSZGVQHLD-DLKGTFAQLSELH 87 58899*******..9***********************************************************9.************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++kl+vdp++f+ll++vlv+vla +++keft++ qa ++K++a va +la++Y+ sp|P68058|HBBC_AMMLE 88 CDKLHVDPENFRLLGNVLVVVLARHFGKEFTPELQAEFQKVVAGVASALAHRYH 141 *****************************************************7 PP >> sp|P68028|HBE_SAISC Hemoglobin subunit epsilon OS=Saimiri sciureus GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.5 0.2 1.6e-55 7.8e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 183.5 bits; conditional E-value: 1.6e-55 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P68028|HBE_SAISC 2 VHFTAEEKAAITSLWSKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P68028|HBE_SAISC 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P68029|HBE_SAIBB Hemoglobin subunit epsilon OS=Saimiri boliviensis boliviensis GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.5 0.2 1.6e-55 7.8e-53 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 183.5 bits; conditional E-value: 1.6e-55 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P68029|HBE_SAIBB 2 VHFTAEEKAAITSLWSKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P68029|HBE_SAIBB 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P56208|MYG_CARCR Myoglobin OS=Caretta caretta GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.5 1.1 1.6e-55 7.8e-53 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 183.5 bits; conditional E-value: 1.6e-55 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+++v+ +Wakve d +G+++++rlf+ +P+tqe F kFk+L+t d+lk+s++vkkHg +vl+Al+ +l++ ++++e++lk+L+ sp|P56208|MYG_CARCR 3 LSDDEWNHVLGIWAKVEPDLSAHGQEVIIRLFQLHPETQERFAKFKNLTTIDALKSSEEVKKHGTTVLTALGRILKQ-KNNHEQELKPLA 91 99***************************************************************************.88********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha+k+k+++ky++++ e++v+v+a+++p++f+ad qaa++K+l+l+++++askYk sp|P56208|MYG_CARCR 92 ESHATKHKIPVKYLEFICEIIVKVIAEKHPSDFGADSQAAMKKALELFRNDMASKYK 148 ********************************************************7 PP >> sp|P02087|HBB_DASNO Hemoglobin subunit beta OS=Dasypus novemcinctus GN=HBB PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.4 0.5 1.7e-55 8.3e-53 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 183.4 bits; conditional E-value: 1.7e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L+ +ekt+v+a+W kv dve+ G+++L rl++++P+tq+fFe+F+dLst++++ ++a+vk+Hgkkvl+ +++++++ld +l++++++L sp|P02087|HBB_DASNO 3 NLTSDEKTAVLALWNKV--DVEDCGGEALGRLLVVYPWTQRFFESFGDLSTPAAVFANAKVKAHGKKVLTSFGEGMNHLD-NLKGTFAKL 89 799**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++fkll+++lv+vla +++kef +++a ++K++a va++la+kY+ sp|P02087|HBB_DASNO 90 SELHCDKLHVDPENFKLLGNMLVVVLARHFGKEFDWHMHACFQKVVAGVANALAHKYH 147 *********************************************************7 PP >> sp|P02052|HBB_TUPGL Hemoglobin subunit beta OS=Tupaia glis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.5 0.0 1.7e-55 8.2e-53 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 183.5 bits; conditional E-value: 1.7e-55 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek +v+ +W+kv d e++G++ L l+ ++P+tq+fF++F+dLs + +++++++vk+Hgkkvl+ +sd+l++ld +l++++++ sp|P02052|HBB_TUPGL 1 VHLSGEEKAAVTGLWGKV--DLEKVGGQSLGSLLIVYPWTQRFFDSFGDLSSPSAVMSNPKVKAHGKKVLTSFSDGLNHLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv vla +++ eft++vqaa++K++a va++la+kY+ sp|P02052|HBB_TUPGL 88 LSELHCDKLHVDPENFRLLGNVLVRVLACNFGPEFTPQVQAAFQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P02202|MYG_CHEMY Myoglobin OS=Chelonia mydas GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.4 1.1 1.8e-55 8.8e-53 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 183.4 bits; conditional E-value: 1.8e-55 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+++v+ +Wakve d +G+++++rlf+ +P+tqe F kFk+L+t d+lk+s++vkkHg +vl+Al+ +l++ ++++e++lk+L+ sp|P02202|MYG_CHEMY 3 LSDDEWNHVLGIWAKVEPDLTAHGQEVIIRLFQLHPETQERFAKFKNLTTIDALKSSEEVKKHGTTVLTALGRILKQ-KNNHEQELKPLA 91 99***************************************************************************.88********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha+k+k+++ky++++ e++v+v+a+++p++f+ad qaa++K+l+l+++++askYk sp|P02202|MYG_CHEMY 92 ESHATKHKIPVKYLEFICEIIVKVIAEKHPSDFGADSQAAMKKALELFRNDMASKYK 148 ********************************************************7 PP >> sp|P62741|HBG1_GORGO Hemoglobin subunit gamma-1 OS=Gorilla gorilla gorilla GN=HBG1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.3 0.0 1.9e-55 9.5e-53 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 183.3 bits; conditional E-value: 1.9e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +e++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+ a+++ld +l++++++ sp|P62741|HBG1_GORGO 3 HFTEEDKATITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGGAIKHLD-DLKGTFAQ 88 6799*************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqa+ +K++ va +l+s+Y+ sp|P62741|HBG1_GORGO 89 LSELHCDKLHVDPENFRLLGNVLVTVLAIHFGKEFTPEVQASWQKMVTAVASALSSRYH 147 **********************************************************7 PP >> sp|P61948|HBG2_HYLLA Hemoglobin subunit gamma-2 OS=Hylobates lar GN=HBG2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.1 0.0 2.1e-55 1e-52 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 183.1 bits; conditional E-value: 2.1e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +e++k +++++W+kv +ve++G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+ a+++ld +l++++++ sp|P61948|HBG2_HYLLA 3 HFTEEDKATITSLWGKV--NVEDVGGETLGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGGAIKNLD-DLKGTFAQ 88 6799*************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqa+ +K++a va +l+s+Y+ sp|P61948|HBG2_HYLLA 89 LSELHCDKLHVDPENFRLLGNVLVTVLAIHFGKEFTPEVQASWQKMVAGVASALSSRYH 147 **********************************************************7 PP >> sp|P09906|HBA_RHIUN Hemoglobin subunit alpha OS=Rhinoceros unicornis GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.1 0.3 2.2e-55 1.1e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 183.1 bits; conditional E-value: 2.2e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ +kt+vk++W+ v+a+++e+Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk+Hgkkv dAl++a+ +ld +l+++l++L sp|P09906|HBA_RHIUN 1 VLSPTDKTNVKTAWSHVGAHAGEYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTQAVGHLD-DLPGALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la + p++ft++v+a+l+K+l+ v+++l+skY+ sp|P09906|HBA_RHIUN 84 SDLHAYKLRVDPVNFKLLSHCLLVTLALHNPQDFTPAVHASLDKFLSNVSTVLTSKYR 141 *********************************************************7 PP >> sp|P51441|HBE_LEORO Hemoglobin subunit epsilon OS=Leontopithecus rosalia GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.1 0.1 2.2e-55 1.1e-52 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 183.1 bits; conditional E-value: 2.2e-55 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G++ L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|P51441|HBE_LEORO 2 VHFTAEEKAAITSLWGKM--NVEEAGGESLGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P51441|HBE_LEORO 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P18970|HBA_AILME Hemoglobin subunit alpha OS=Ailuropoda melanoleuca GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 183.0 0.2 2.3e-55 1.1e-52 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 183.0 bits; conditional E-value: 2.3e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka W k++ +++e+G+++L+r f s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl+ a+ +ld +l+++l++L sp|P18970|HBA_AILME 2 VLSPADKTNVKATWDKIGGHAGEYGGEALERTFASFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTTAVGHLD-DLPGALSAL 84 8*********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la+++p+eft++v+a+l+K+++ v+++l+skY+ sp|P18970|HBA_AILME 85 SDLHAHKLRVDPVNFKLLSHCLLVTLASHHPAEFTPAVHASLDKFFSAVSTVLTSKYR 142 *********************************************************7 PP >> sp|P51442|HBE_PITIR Hemoglobin subunit epsilon OS=Pithecia irrorata GN=HBE1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.9 0.2 2.4e-55 1.2e-52 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 182.9 bits; conditional E-value: 2.4e-55 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++ +vk+Hgkkvl+ ++da++++d +l++++++ sp|P51442|HBE_PITIR 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNLKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|P51442|HBE_PITIR 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|Q9XSE9|HBA_EQUPR Hemoglobin subunit alpha OS=Equus caballus przewalskii GN=HBA PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.9 0.3 2.5e-55 1.2e-52 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 182.9 bits; conditional E-value: 2.5e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+ +++e Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl+ a+ +ld +l+++l++L sp|Q9XSE9|HBA_EQUPR 2 VLSAADKTNVKAAWSKVGGHAGEFGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTLAVGHLD-DLPGALSNL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+ +la +lp++ft++v+a+l+K+l++v+++l+skY+ sp|Q9XSE9|HBA_EQUPR 85 SDLHAHKLRVDPVNFKLLSHCLLSTLAVHLPNDFTPAVHASLDKFLSSVSTVLTSKYR 142 *********************************************************7 PP >> sp|Q7LZB9|HBB_STROE Hemoglobin subunit beta OS=Streptopelia orientalis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.9 0.2 2.5e-55 1.2e-52 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 182.9 bits; conditional E-value: 2.5e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++++W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ ++++vk+Hgkkvl+ ++da+++ld ++++++++L sp|Q7LZB9|HBB_STROE 2 HWSAEEKQLITSIWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSATAISGNPNVKAHGKKVLTSFGDAVKNLD-NIKGTFAQL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++fkll+++lv vlaa+++k+ft++ qaa +Kl+ +va++la kY+ sp|Q7LZB9|HBB_STROE 89 SELHCNKLHVDPENFKLLGDILVIVLAAHFGKDFTPECQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|Q29415|HBE_CEBOL Hemoglobin subunit epsilon OS=Cebus olivaceus GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.8 0.2 2.6e-55 1.3e-52 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 182.8 bits; conditional E-value: 2.6e-55 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|Q29415|HBE_CEBOL 2 VHFTAEEKVAITSLWSKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|Q29415|HBE_CEBOL 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|Q7JFR7|HBE_CEBKA Hemoglobin subunit epsilon OS=Cebus kaapori GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.8 0.2 2.6e-55 1.3e-52 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 182.8 bits; conditional E-value: 2.6e-55 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|Q7JFR7|HBE_CEBKA 2 VHFTAEEKVAITSLWSKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|Q7JFR7|HBE_CEBKA 89 LSELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 **********************************************************7 PP >> sp|P01965|HBA_PIG Hemoglobin subunit alpha OS=Sus scrofa GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.8 0.7 2.7e-55 1.3e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 182.8 bits; conditional E-value: 2.7e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 vLs+a+k +vka+W+kv+ +++ +Ga++L+r+f+ +P+t+++F++F +Ls ++s++vk+Hg+kv+dAl++a+ +ld +l+++l++Ls+ sp|P01965|HBA_PIG 1 VLSAADKANVKAAWGKVGGQAGAHGAEALERMFLGFPTTKTYFPHF-NLS-----HGSDQVKAHGQKVADALTKAVGHLD-DLPGALSALSD 85 69********************************************.9**.....************************9.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lHa+kl+vdp +fklls++l+++laa++p +f ++v+a+l+K+la v+++l+skY+ sp|P01965|HBA_PIG 86 LHAHKLRVDPVNFKLLSHCLLVTLAAHHPDDFNPSVHASLDKFLANVSTVLTSKYR 141 *******************************************************7 PP >> sp|P01944|HBA_ONDZI Hemoglobin subunit alpha OS=Ondatra zibethicus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.7 0.3 2.8e-55 1.4e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 182.7 bits; conditional E-value: 2.8e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs ++k+++k++W+k++ +++e+Ga++L+r+f+++P+t+++F++F d+s ++s +vk+Hgkkv+dAl+ a+ +ld +l+++l++L sp|P01944|HBA_ONDZI 1 VLSGEDKNNIKTAWGKIGGHAAEYGAEALERMFVVYPTTKTYFPHF-DVS-----HGSGQVKAHGKKVADALTTAVGHLD-DLPGALSAL 83 69********************************************.888.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la++ p++ft++v+a+l+K+la+v+++l+skY+ sp|P01944|HBA_ONDZI 84 SDLHAHKLRVDPVNFKLLSHCLLVTLANHIPADFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P63109|HBA_PANON Hemoglobin subunit alpha OS=Panthera onca GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.7 0.4 2.8e-55 1.4e-52 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 182.7 bits; conditional E-value: 2.8e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs a+k++vka W+k++++++e+Ga++L+r f s+P+t+++F++F dLs ++sa+v++Hg+kv+dAl++a+a+++ +l+++l+dL sp|P63109|HBA_PANON 2 VLSSADKNNVKACWGKIGSHAGEYGAEALERTFCSFPTTKTYFPHF-DLS-----HGSAQVQAHGQKVADALTKAVAHIN-DLPNALSDL 84 89********************************************.***.....***********************98.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fk+ls++l+++la ++p+eft++v+a+l+K+++ v+++l+skY+ sp|P63109|HBA_PANON 85 SDLHAYKLRVDPVNFKFLSHCLLVTLACHHPEEFTPAVHASLDKFFSAVSTVLTSKYR 142 *********************************************************7 PP >> sp|P02099|HBG_RABIT Hemoglobin subunit gamma OS=Oryctolagus cuniculus GN=HBG PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.6 0.7 3e-55 1.5e-52 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 182.6 bits; conditional E-value: 3e-55 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek ++++ W v dve+ Ga++L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+A++da++++d +l++++++ sp|P02099|HBG_RABIT 2 VHFTAEEKAAITSTWKLV--DVEDAGAEALGRLLVVYPWTQRFFDSFGNLSSSSAIMGNPKVKAHGKKVLTAFGDAVKNVD-DLKNTFAH 88 5789**************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH+++l+vdp++fkll++vlv vla+ ++keft++vq+a +Kl+a va++la+kY+ sp|P02099|HBG_RABIT 89 LSELHCDRLHVDPENFKLLGNVLVIVLAKYFGKEFTPQVQSAWQKLVAGVATALAHKYH 147 **********************************************************7 PP >> sp|P01962|HBA_TAPTE Hemoglobin subunit alpha-1/2 OS=Tapirus terrestris PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.5 0.1 3.3e-55 1.6e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 182.5 bits; conditional E-value: 3.3e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ +kt+vka+W+kv+++++e+Ga++L+r+f+ +P+t+++F++F dLs ++sa+v++Hgkkv dAl++a+ +ld +l+++l++L sp|P01962|HBA_TAPTE 1 VLSPTDKTNVKAAWSKVGSHAGEYGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVQAHGKKVGDALTQAVGHLD-DLPGALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p +ft++++a+l+K+l+ v+++l+skY+ sp|P01962|HBA_TAPTE 84 SDLHAYKLRVDPVNFKLLSHCLLVTLALHHPDDFTPAIHASLDKFLSNVSTVLTSKYR 141 *********************************************************7 PP >> sp|P01959|HBA_EQUAS Hemoglobin subunit alpha OS=Equus asinus GN=HBA1 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.5 0.2 3.4e-55 1.7e-52 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 182.5 bits; conditional E-value: 3.4e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+ +++e Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl+ a+ +ld +l+++l++L sp|P01959|HBA_EQUAS 2 VLSAADKTNVKAAWSKVGGNAGEFGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTLAVGHLD-DLPGALSNL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+ +la +lp++ft++v+a+l+K+l++v+++l+skY+ sp|P01959|HBA_EQUAS 85 SDLHAHKLRVDPVNFKLLSHCLLSTLAVHLPNDFTPAVHASLDKFLSTVSTVLTSKYR 142 *********************************************************7 PP >> sp|P01960|HBA_EQUZE Hemoglobin subunit alpha OS=Equus zebra GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.5 0.2 3.4e-55 1.7e-52 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 182.5 bits; conditional E-value: 3.4e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+ +++e Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl+ a+ +ld +l+++l++L sp|P01960|HBA_EQUZE 2 VLSAADKTNVKAAWSKVGGNAGEFGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTLAVGHLD-DLPGALSNL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+ +la +lp++ft++v+a+l+K+l++v+++l+skY+ sp|P01960|HBA_EQUZE 85 SDLHAHKLRVDPVNFKLLSHCLLSTLAVHLPNDFTPAVHASLDKFLSTVSTVLTSKYR 142 *********************************************************7 PP >> sp|Q7JFN6|HBA2_EQUGR Hemoglobin subunit alpha-2 OS=Equus grevyi GN=HBA2 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.5 0.2 3.4e-55 1.7e-52 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 182.5 bits; conditional E-value: 3.4e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+kt+vka+W+kv+ +++e Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl+ a+ +ld +l+++l++ sp|Q7JFN6|HBA2_EQUGR 2 VLSAADKTNVKAAWSKVGGNAGEFGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTLAVGHLD-DLPGALSN 83 8*********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls++l+ +la +lp++ft++v+a+l+K+l++v+++l+skY+ sp|Q7JFN6|HBA2_EQUGR 84 LSDLHAHKLRVDPVNFKLLSHCLLSTLAVHLPNDFTPAVHASLDKFLSTVSTVLTSKYR 142 **********************************************************7 PP >> sp|P01941|HBA_TUPGL Hemoglobin subunit alpha OS=Tupaia glis GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.4 0.1 3.4e-55 1.7e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 182.4 bits; conditional E-value: 3.4e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k+++ka+W+k++ ++ ++Ga++L+r+f+s+P+t+++F++F d+s ++sa++++Hgkkv+dAls a+ +ld +l+++l++L sp|P01941|HBA_TUPGL 1 VLSPGDKSNIKAAWGKIGGQAPQYGAEALERMFLSFPTTKTYFPHF-DMS-----HGSAQIQAHGKKVADALSTAVGHLD-DLPTALSAL 83 69********************************************.888.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++++++la ++p++ft++++a+l+K+la v+++l+skY+ sp|P01941|HBA_TUPGL 84 SDLHAHKLRVDPANFKLLSHCILVTLACHHPGDFTPEIHASLDKFLANVSTVLTSKYR 141 *********************************************************7 PP >> sp|P61947|HBG1_HYLLA Hemoglobin subunit gamma-1 OS=Hylobates lar GN=HBG1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.4 0.0 3.5e-55 1.7e-52 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 182.4 bits; conditional E-value: 3.5e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +e++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+ a+++ld +l++++++ sp|P61947|HBG1_HYLLA 3 HFTEEDKATITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGGAIKNLD-DLKGTFAQ 88 6799*************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqa+ +K++a va +l+s+Y+ sp|P61947|HBG1_HYLLA 89 LSELHCDKLHVDPENFRLLGNVLVTVLAIHFGKEFTPEVQASWQKMVAGVASALSSRYH 147 **********************************************************7 PP >> sp|P41330|HBA2_ARCGA Hemoglobin subunit alpha-2 OS=Arctocephalus galapagoensis PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.2 0.4 4.1e-55 2e-52 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 182.2 bits; conditional E-value: 4.1e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+kt+vk+ W k + +++e+G+++L+r f+++P+t+++F++F dLs ++sa+vk+Hgkkv+dAl+ a+a++d +l+++l++ sp|P41330|HBA2_ARCGA 2 VLSPADKTNVKTTWDKLGGHAGEYGGEALERTFTAFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVADALTTAVAHMD-DLPGALSA 83 8*********************************************.***.....*************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K+++ v+++l+skY+ sp|P41330|HBA2_ARCGA 84 LSDLHAYKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFFSAVSTVLTSKYR 142 **********************************************************7 PP >> sp|P63110|HBA_PANPO Hemoglobin subunit alpha OS=Panthera pardus orientalis GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.2 0.3 4.2e-55 2e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 182.2 bits; conditional E-value: 4.2e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs a+k++vka W+k++++++e+Ga++L+r f s+P+t+++F++F dLs ++sa+v++Hg+kv+dAl++a+a+++ +l+++l+dL sp|P63110|HBA_PANPO 1 VLSSADKNNVKACWGKIGSHAGEYGAEALERTFCSFPTTKTYFPHF-DLS-----HGSAQVQAHGQKVADALTKAVAHIN-DLPNALSDL 83 69********************************************.***.....***********************98.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fk+ls++l+++la ++p+eft++v+a+l+K+++ v+++l+skY+ sp|P63110|HBA_PANPO 84 SDLHAYKLRVDPVNFKFLSHCLLVTLACHHPEEFTPAVHASLDKFFSAVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02083|HBBF_SHEEP Hemoglobin fetal subunit beta OS=Ovis aries PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.1 0.0 4.3e-55 2.1e-52 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 182.1 bits; conditional E-value: 4.3e-55 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L+++ek v +++akv +vee+G+++L rl++++P+tq+fFe+F+dLs +d++ ++++vk Hgkkvl+ +s++l++ld +l++++++L sp|P02083|HBBF_SHEEP 2 LTAEEKASVISLFAKV--NVEEVGGEALGRLLVVYPWTQRFFEHFGDLSSADAILGNPKVKGHGKKVLNSFSEGLKQLD-DLKGAFASL 87 99**************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla r+++eft++ qa ++K++ va++la++Y+ sp|P02083|HBBF_SHEEP 88 SELHCDKLHVDPENFRLLGNVLVVVLARRFGGEFTPELQANFQKVVTGVANALAHRYH 145 *********************************************************7 PP >> sp|P16418|HBB_LIOMI Hemoglobin subunit beta OS=Liophis miliaris GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.1 1.1 4.3e-55 2.1e-52 2 149 .] 2 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 182.1 bits; conditional E-value: 4.3e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek++++a+W+kv dv+ G+++L rl+ ++P+tq+fF +F++Ls +++++++a+vk+Hgkkv +A++da+++ e ++ ++++L sp|P16418|HBB_LIOMI 2 HWTAEEKSAITAIWGKV--DVAAIGGEALCRLLIVYPWTQRFFTSFGNLSNAAAIQSNAQVKAHGKKVFTAFGDAVKN-PEGVKDTFAKL 88 6799*************..***********************************************************.669******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp +fkll+++l++vlaa+++k+ft++vqaa++Kl+++va++la++Y+ sp|P16418|HBB_LIOMI 89 SELHCDKLHVDPVNFKLLGQILITVLAAHFGKDFTPNVQAAYQKLVSVVAHALAHQYH 146 *********************************************************7 PP >> sp|Q9XSN3|HBA1_EQUBU Hemoglobin subunit alpha-1 OS=Equus burchelli GN=HBA1 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.1 0.1 4.4e-55 2.1e-52 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 182.1 bits; conditional E-value: 4.4e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+++k++vka+W+kv+ +++e Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl+ a+ +ld +l+++l++ sp|Q9XSN3|HBA1_EQUBU 2 VLSADDKSNVKAAWGKVGGNAGEFGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTLAVGHLD-DLPGALSN 83 89********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls++l+ +la +lp++ft++v+a+l+K+l++v+++l+skY+ sp|Q9XSN3|HBA1_EQUBU 84 LSDLHAHKLRVDPVNFKLLSHCLLSTLAVHLPNDFTPAVHASLDKFLSTVSTVLTSKYR 142 **********************************************************7 PP >> sp|P02111|HBB_ORNAN Hemoglobin subunit beta OS=Ornithorhynchus anatinus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.1 0.0 4.5e-55 2.2e-52 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 182.1 bits; conditional E-value: 4.5e-55 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek++v+++W+kv +++e G+++L rl++++P+tq+fFe F+dLs + +++++++vk+Hg kvl+ ++dal++ld +l++++++ sp|P02111|HBB_ORNAN 1 VHLSGGEKSAVTNLWGKV--NINELGGEALGRLLVVYPWTQRFFEAFGDLSSAGAVMGNPKVKAHGAKVLTSFGDALKNLD-DLKGTFAK 87 69****************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ l++vl++vla +++k+f+++vqaa +Kl++ va++l +kY+ sp|P02111|HBB_ORNAN 88 LSELHCDKLHVDPENFNRLGNVLIVVLARHFSKDFSPEVQAAWQKLVSGVAHALGHKYH 146 **********************************************************7 PP >> sp|Q28220|HBE_CEBAL Hemoglobin subunit epsilon OS=Cebus albifrons GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.1 0.2 4.5e-55 2.2e-52 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 182.1 bits; conditional E-value: 4.5e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++L sp|Q28220|HBE_CEBAL 3 HFTADEKVAITSLWSKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAKL 89 7899*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++v+v +la++++keft++vqaa +Kl++ va++l +kY+ sp|Q28220|HBE_CEBAL 90 SELHCDKLHVDPENFRLLGNVMVIILATHFGKEFTPEVQAAWQKLVSAVAIALGHKYH 147 *********************************************************7 PP >> sp|P11342|HBB_COLLI Hemoglobin subunit beta OS=Columba livia GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 182.0 0.1 4.7e-55 2.3e-52 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 182.0 bits; conditional E-value: 4.7e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++++W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ ++++vk+Hgkkvl+ ++da+++ld ++++++++L sp|P11342|HBB_COLLI 2 HWSAEEKQLITSIWGKV--NVADCGAEALARLLIVYPWTQRFFSSFGNLSSATAISGNPNVKAHGKKVLTSFGDAVKNLD-NIKGTFAQL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++lv +laa+++k+ft++ qaa +Kl+ +va++la kY+ sp|P11342|HBB_COLLI 89 SELHCDKLHVDPENFRLLGDILVIILAAHFGKDFTPECQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P10883|HBA_PANTS Hemoglobin subunit alpha OS=Panthera tigris sumatrae GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 181.9 0.3 4.9e-55 2.4e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 181.9 bits; conditional E-value: 4.9e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs a+k++vka W+k++++++e+Ga++L+r f s+P+t+++F++F dLs ++sa+v++Hg+kv+dAl++a+a+++ +l+++l+dL sp|P10883|HBA_PANTS 1 VLSSADKNNVKACWGKIGSHAGEYGAEALERTFCSFPTTKTYFPHF-DLS-----HGSAQVQTHGQKVADALTKAVAHIN-NLPNALSDL 83 69********************************************.***.....***********************99.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fk+ls++l+++la ++p+eft++v+a+l+K+++ v+++l+skY+ sp|P10883|HBA_PANTS 84 SDLHAYKLRVDPVNFKFLSHCLLVTLACHHPEEFTPAVHASLDKFFSAVSTVLTSKYR 141 *********************************************************7 PP >> sp|P18976|HBA_PANPS Hemoglobin subunit alpha OS=Panthera pardus saxicolor GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 181.8 0.3 5.4e-55 2.6e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 181.8 bits; conditional E-value: 5.4e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs a+k++vka W+k++++++e+Ga++L+r f s+P+t+++F++F dLs ++sa+v++Hg+kv+dAl++a+a+++ +l+++l+dL sp|P18976|HBA_PANPS 1 VLSSADKNNVKACWGKIGSHAGEYGAEALERTFCSFPTTKTYFPHF-DLS-----HGSAQVQTHGQKVADALTKAVAHIN-DLPNALSDL 83 69********************************************.***.....***********************98.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fk+ls++l+++la ++p+eft++v+a+l+K+++ v+++l+skY+ sp|P18976|HBA_PANPS 84 SDLHAYKLRVDPVNFKFLSHCLLVTLACHHPEEFTPAVHASLDKFFSAVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02201|MYG_GRAGE Myoglobin OS=Graptemys geographica GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 181.8 0.5 5.5e-55 2.7e-52 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 181.8 bits; conditional E-value: 5.5e-55 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+ +v+ +Wakve d +G+++++rlf+++P+tqe F kFk+L+t del++s++vkkHg +vl+Al+ +l+ ++++e +lk+L+ sp|P02201|MYG_GRAGE 3 LSDDEWHHVLGIWAKVEPDLSAHGQEVIIRLFQVHPETQERFAKFKNLKTIDELRSSEEVKKHGTTVLTALGRILKL-KNNHEPELKPLA 91 99************************************************************************987.88********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha+k+k+++ky++++ e++v+v+a+++p++f+ad qaa+ K+l+l+++++askYk sp|P02201|MYG_GRAGE 92 ESHATKHKIPVKYLEFICEIIVKVIAEKHPSDFGADSQAAMRKALELFRNDMASKYK 148 ********************************************************7 PP >> sp|B3EWC9|HBA_SPEBE Hemoglobin subunit alpha OS=Spermophilus beecheyi PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 181.6 0.6 6.3e-55 3.1e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 181.6 bits; conditional E-value: 6.3e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka W k + + + +Ga++L+r+f+s+P+t+++F++F dLs ++sa+++ Hgkkv+dAl++a a++d +l+++l++L sp|B3EWC9|HBA_SPEBE 1 VLSPADKTNVKASWEKLGGHGAAYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQLQGHGKKVADALANAAAHVD-DLPGALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+lp++ft++v+a+l+K+la+v+++l+skY+ sp|B3EWC9|HBA_SPEBE 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPADFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P18996|HBG2_PONPY Hemoglobin subunit gamma-2 OS=Pongo pygmaeus GN=HBG2 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 181.5 0.0 6.7e-55 3.3e-52 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 181.5 bits; conditional E-value: 6.7e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +e++k +++++W+k +ve+ G++ L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ l+da+++ld +l++++++ sp|P18996|HBG2_PONPY 3 HFTEEDKATITSLWGKL--NVEDAGGETLGRLLLVYPWTQRFFDSFGNLSSASAIMGNPKVKAHGKKVLTSLGDAVKNLD-DLKGTFAQ 88 6799*************..************************************************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +++keft++vqa+ +K++ va +l+s+Y+ sp|P18996|HBG2_PONPY 89 LSELHCDKLHVDPENFRLLGNVLVTVLAIHFGKEFTPEVQASWQKMVTGVASALSSRYH 147 **********************************************************7 PP >> sp|P02081|HBBF_BOVIN Hemoglobin fetal subunit beta OS=Bos taurus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 181.4 0.0 7.3e-55 3.6e-52 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 181.4 bits; conditional E-value: 7.3e-55 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls++ek +v++++akv +v+e+G+++L rl++++P+tq+fFe+F+dLs +d++ ++++vk+Hgkkvld + ++l++ld +l++++++L sp|P02081|HBBF_BOVIN 2 LSAEEKAAVTSLFAKV--KVDEVGGEALGRLLVVYPWTQRFFESFGDLSSADAILGNPKVKAHGKKVLDSFCEGLKQLD-DLKGAFASL 87 9***************..9***********************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla r+++ef+++ qa+++K++ va++la++Y+ sp|P02081|HBBF_BOVIN 88 SELHCDKLHVDPENFRLLGNVLVVVLARRFGSEFSPELQASFQKVVTGVANALAHRYH 145 *********************************************************7 PP >> sp|P01961|HBA_EQUHE Hemoglobin subunit alpha-1/2 OS=Equus hemionus kulan PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 181.3 0.2 7.5e-55 3.7e-52 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 181.3 bits; conditional E-value: 7.5e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+ ++++ Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl+ a+ +ld +l+++l++L sp|P01961|HBA_EQUHE 2 VLSAADKTNVKAAWSKVGGNAGDFGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTLAVGHLD-DLPGALSNL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+ +la +lp++ft++v+a+l+K+l++v+++l+skY+ sp|P01961|HBA_EQUHE 85 SDLHAHKLRVDPVNFKLLSHCLLSTLAVHLPNDFTPAVHASLDKFLSTVSTVLTSKYR 142 *********************************************************7 PP >> sp|P80216|HBB_APTFO Hemoglobin subunit beta OS=Aptenodytes forsteri GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 181.2 0.2 8.3e-55 4e-52 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 181.2 bits; conditional E-value: 8.3e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++ +W+kv +v+e Ga++L rl+ ++P+tq+fF +F++Ls ++++ +++ v++Hgkkvl+ ++da++++d ++++++++L sp|P80216|HBB_APTFO 2 HWSAEEKQLITGLWGKV--NVAECGAEALARLLIVYPWTQRFFASFGNLSSPAAVLANPMVRAHGKKVLTSFGDAVKNMD-NIKNTFAQL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+ft+d qaa +Kl+ +va++la kY+ sp|P80216|HBB_APTFO 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFSKDFTPDCQAAAQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|Q2KPA4|HBB_SCAAQ Hemoglobin subunit beta OS=Scalopus aquaticus GN=HBB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 181.2 0.1 8.4e-55 4.1e-52 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 181.2 bits; conditional E-value: 8.4e-55 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v++s++ek v+++W+kv +v++ Ga++L rl++++P+tq+fF++F+dLs +++++++++vk+Hgkkv++ +sd++++ld +l++++++ sp|Q2KPA4|HBB_SCAAQ 2 VHMSAEEKGIVTSMWGKV--NVDDIGAEALGRLLVVYPWTQRFFDSFGDLSSPAAIMGNPKVKAHGKKVAHSISDGIKNLD-NLKGTYAK 88 689***************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+vla +l+keft+++ +a++K++ va +la+kY+ sp|Q2KPA4|HBB_SCAAQ 89 LSELHCDKLHVDPENFRLLGNVLVCVLARNLGKEFTPHARTAFQKMVLEVAAALAHKYH 147 **********************************************************7 PP >> sp|P01943|HBA_SPAEH Hemoglobin subunit alpha OS=Spalax ehrenbergi GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 181.2 0.3 8.5e-55 4.1e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 181.2 bits; conditional E-value: 8.5e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k++v++ W k++ + +e+Ga++L+r+f+s+P+t+++F++F d+s ++sa+vk+Hgkkv+dAl++a +ld +l+++l++L sp|P01943|HBA_SPAEH 1 VLSPEDKNHVRSTWDKIGGHGAEYGAEALERMFTSFPTTKTYFPHF-DVS-----HGSAQVKAHGKKVADALANAAGHLD-DLPGALSAL 83 69********************************************.888.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la+++p+eft+ v+a+l+K+la+v+++l+skY+ sp|P01943|HBA_SPAEH 84 SDLHAHKLRVDPVNFKLLSHCLLVTLANHHPAEFTPGVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P01950|HBA_SUNMU Hemoglobin subunit alpha OS=Suncus murinus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 181.1 0.8 9.1e-55 4.4e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 181.1 bits; conditional E-value: 9.1e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k +vka+W kv+ +++++Ga++L+r f s+P+t+++F+++ dLs +sa+vk+Hgkkv+dAl++a+ ++d +l+++l++L sp|P01950|HBA_SUNMU 1 VLSANDKANVKAAWDKVGGQAANYGAEALERTFASFPTTKTYFPHY-DLS-----PGSAQVKAHGKKVADALTKAVGSMD-DLPGALSAL 83 69********************************************.9**.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p++ft++v+a+l+K+la+v+++l+skY+ sp|P01950|HBA_SUNMU 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPADFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P68235|HBA_URSMA Hemoglobin subunit alpha OS=Ursus maritimus GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 181.1 0.3 9.2e-55 4.5e-52 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 181.1 bits; conditional E-value: 9.2e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka W k++++++e+G+++L+r f s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl+ a +ld +l+++l++L sp|P68235|HBA_URSMA 2 VLSPADKSNVKATWDKIGSHAGEYGGEALERTFASFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTTAAGHLD-DLPGALSAL 84 8*********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+ls++l+++la+++p+eft++v+a+l+K+++ v+++l+skY+ sp|P68235|HBA_URSMA 85 SDLHAHKLRVDPVNFKFLSHCLLVTLASHHPAEFTPAVHASLDKFFSAVSTVLTSKYR 142 *********************************************************7 PP >> sp|P68236|HBA_URSTH Hemoglobin subunit alpha OS=Ursus thibetanus GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 181.1 0.3 9.2e-55 4.5e-52 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 181.1 bits; conditional E-value: 9.2e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka W k++++++e+G+++L+r f s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl+ a +ld +l+++l++L sp|P68236|HBA_URSTH 2 VLSPADKSNVKATWDKIGSHAGEYGGEALERTFASFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTTAAGHLD-DLPGALSAL 84 8*********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+ls++l+++la+++p+eft++v+a+l+K+++ v+++l+skY+ sp|P68236|HBA_URSTH 85 SDLHAHKLRVDPVNFKFLSHCLLVTLASHHPAEFTPAVHASLDKFFSAVSTVLTSKYR 142 *********************************************************7 PP >> sp|P68237|HBA_URSML Hemoglobin subunit alpha OS=Ursus malayanus GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 181.1 0.3 9.2e-55 4.5e-52 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 181.1 bits; conditional E-value: 9.2e-55 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka W k++++++e+G+++L+r f s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl+ a +ld +l+++l++L sp|P68237|HBA_URSML 2 VLSPADKSNVKATWDKIGSHAGEYGGEALERTFASFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTTAAGHLD-DLPGALSAL 84 8*********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+ls++l+++la+++p+eft++v+a+l+K+++ v+++l+skY+ sp|P68237|HBA_URSML 85 SDLHAHKLRVDPVNFKFLSHCLLVTLASHHPAEFTPAVHASLDKFFSAVSTVLTSKYR 142 *********************************************************7 PP >> sp|B3EWD5|HBA_PERCA Hemoglobin subunit alpha OS=Peromyscus californicus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 180.9 0.4 1e-54 5e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 180.9 bits; conditional E-value: 1e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k +vka+W+k + + +e+Ga++L r+f s+P+t+++F++F d+s ++sa+vk Hg kv+dAl+ a +ld +l+++l++L sp|B3EWD5|HBA_PERCA 1 VLSADDKANVKAAWGKLGGHGAEYGAEALGRMFCSFPTTKTYFPHF-DVS-----HGSAQVKGHGAKVADALTTAAGHLD-DLPGALSAL 83 69********************************************.888.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p+eft++v+a+l+K+la+v+++l+skY+ sp|B3EWD5|HBA_PERCA 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02078|HBBC_CAPHI Hemoglobin subunit beta-C OS=Capra hircus GN=HBBC PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 180.8 0.2 1.1e-54 5.2e-52 7 149 .] 3 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 180.8 bits; conditional E-value: 1.1e-54 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 +k ++ W+kv +v+e+Ga++L rl++++P+tq+fFe+F+dLs +d++ ++a+vk+Hgkkvld +s+++++ld +l++++++LselH sp|P02078|HBBC_CAPHI 3 NKALITGFWSKV--KVDEVGAEALGRLLVVYPWTQRFFEHFGDLSSADAVLGNAKVKAHGKKVLDSFSNGVQHLD-DLKGTFAELSELH 88 68899*******..9***********************************************************9.************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++kl+vdp++f+ll++vlv vla +++keft++ qa ++K++a va +la++Y+ sp|P02078|HBBC_CAPHI 89 CDKLHVDPENFRLLGNVLVIVLARHFGKEFTPELQAEFQKVVAGVASALAHRYH 142 *****************************************************7 PP >> sp|P41329|HBA1_ARCGA Hemoglobin subunit alpha-1 OS=Arctocephalus galapagoensis PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 180.8 0.2 1.1e-54 5.3e-52 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 180.8 bits; conditional E-value: 1.1e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+kt++k+ W k + +++e+G+++L+r f+s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl+ a+a++d +l+++l++ sp|P41329|HBA1_ARCGA 2 VLSPADKTNIKTTWDKLGGHAGEYGGEALERTFMSFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTTAVAHMD-DLPKALSA 83 8*********************************************.9**.....9************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K++++v+++l+skY+ sp|P41329|HBA1_ARCGA 84 LSDLHAYKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFFSTVSTVLTSKYR 142 **********************************************************7 PP >> sp|P24659|HBA_MACGG Hemoglobin subunit alpha-1/2 OS=Macroderma gigas PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 180.7 0.3 1.2e-54 5.7e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 180.7 bits; conditional E-value: 1.2e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k +vka+W kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk+Hgkkv dAls+a +ld +l+++l++L sp|P24659|HBA_MACGG 1 VLSPADKANVKAAWDKVGGQAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALSNAAGHLD-DLPGALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la+++++eft++v+a+l+K+la+v ++l+skY+ sp|P24659|HBA_MACGG 84 SDLHAYKLRVDPVNFKLLSHCLLVTLASHHAAEFTPAVHASLDKFLASVGTVLTSKYR 141 *********************************************************7 PP >> sp|B3EWE3|HBA_MICPE Hemoglobin subunit alpha OS=Microtus pennsylvanicus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 180.6 0.2 1.3e-54 6.2e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 180.6 bits; conditional E-value: 1.3e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs ++k+++k++W+k + +++e+Ga++L+r+f+++P+t+++F++F d+s ++sa+vk Hgkkv+dAl+ a+ +ld +l+++l++L sp|B3EWE3|HBA_MICPE 1 VLSGDDKSNLKTAWGKLGGHAGEYGAEALERMFVAYPTTKTYFPHF-DVS-----HGSAQVKGHGKKVADALTTAVGHLD-DLPGALSAL 83 699*******************************************.888.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la++lp++ft++v+a+l+K+la+v+++l+skY+ sp|B3EWE3|HBA_MICPE 84 SDLHAHKLRVDPVNFKLLSHCLLVTLANHLPADFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P18975|HBA_PANLE Hemoglobin subunit alpha OS=Panthera leo GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 180.3 0.3 1.6e-54 7.6e-52 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 180.3 bits; conditional E-value: 1.6e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs a+k++vka W+k++++++e+Ga++L+r f s+P+t+++F++F dLs ++sa+v++Hg+kv+dAl++a+ +++ +l+++l+dL sp|P18975|HBA_PANLE 2 VLSSADKNNVKACWGKIGSHAGEYGAEALERTFCSFPTTKTYFPHF-DLS-----HGSAQVQAHGQKVADALTKAVVHIN-DLPNALSDL 84 89********************************************.***.....***********************98.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fk+ls++l+++la ++p+eft++v+a+l+K+++ v+++l+skY+ sp|P18975|HBA_PANLE 85 SDLHAYKLRVDPVNFKFLSHCLLVTLACHHPEEFTPAVHASLDKFFSAVSTVLTSKYR 142 *********************************************************7 PP >> sp|P01972|HBA_ODOVI Hemoglobin subunit alpha-1/2 OS=Odocoileus virginianus virginianus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 180.3 0.5 1.6e-54 7.8e-52 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 180.3 bits; conditional E-value: 1.6e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vka+W+kv+ +++ +Ga++L+r+f+s+P+t+++F++F +Ls ++sa+vk+Hg+kv++Al++a+ +l+ +l+++l++L sp|P01972|HBA_ODOVI 1 VLSAABKSBVKAAWGKVGGNAAPYGAZALZRMFLSFPTTKTYFPHF-BLS-----HGSAZVKAHGZKVABALTKAVGHLB-BLPGTLSBL 83 69********************************************.9**.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+v+p +fklls+ l+++la++lp++ft++v+a+l+K+la v+++l+skY+ sp|P01972|HBA_ODOVI 84 SBLHAHKLRVBPVBFKLLSHSLLVTLATHLPBBFTPAVHASLBKFLABVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02125|HBB_CICCI Hemoglobin subunit beta OS=Ciconia ciconia GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.9 0.4 2.1e-54 1e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 179.9 bits; conditional E-value: 2.1e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v+e Ga++L rl+ ++P+tq+fF +F++L t+ ++ ++a v++Hgkkvl+ +++a+++ld ++++++++L sp|P02125|HBB_CICCI 2 HWTAEEKQLITGLWGKV--NVDECGAEALARLLIVYPWTQRFFASFGNLATASAITGNAMVHAHGKKVLTSFGEAVKNLD-NIKNTFAQL 88 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++fkll+++l+ vlaa+++k+ft+d qaa +Kl+ +va++la kY+ sp|P02125|HBB_CICCI 89 SELHCDKLHVDPENFKLLGDILIIVLAAHFGKDFTPDCQAAWKKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P02126|HBB_STUVU Hemoglobin subunit beta OS=Sturnus vulgaris GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.9 0.1 2.2e-54 1e-51 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 179.9 bits; conditional E-value: 2.2e-54 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++ek+ ++ +W+kv +v+e Ga++L rl+ ++P+tq+fF +F++Ls + ++ ++++v++Hgkkvl+ ++da+++ld +++++++Ls sp|P02126|HBB_STUVU 3 WTAEEKQLITGLWGKV--NVAECGAEALARLLIVYPWTQRFFASFGNLSSPTAVLGNPKVQAHGKKVLTSFGDAVKNLD-SIKNTFSQLS 89 589*************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll+++lv+vlaa+++k+ft+d qaa +Kl+ +va++la kY+ sp|P02126|HBB_STUVU 90 ELHCDKLHVDPENFRLLGDILVVVLAAHFGKDFTPDCQAAWQKLVRVVAHALARKYH 146 ********************************************************7 PP >> sp|P17689|HBA_MARFO Hemoglobin subunit alpha OS=Martes foina GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.8 0.2 2.3e-54 1.1e-51 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 179.8 bits; conditional E-value: 2.3e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk+ W k++ +++e+G+++L+r f+s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl+ a+ +ld +l ++l++L sp|P17689|HBA_MARFO 1 VLSPADKTNVKSTWDKIGGHAGEYGGEALERTFVSFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTLAVGHLD-DLAGALSAL 83 69********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la ++p+eft++v+a+l+K++++v+++l+skY+ sp|P17689|HBA_MARFO 84 SDLHAHKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFFSTVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02105|HBE2_CAPHI Hemoglobin subunit epsilon-2 OS=Capra hircus GN=HBE2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.7 0.3 2.4e-54 1.2e-51 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 179.7 bits; conditional E-value: 2.4e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + + +ek +v ++Wakv +ve +G++ L rl+ ++P+tq+fF++F++L e +++++++vk+Hg+kvl+ +++a++++d +l+++++d sp|P02105|HBE2_CAPHI 3 HFTTEEKAAVASLWAKV--NVEVVGGESLARLLIVYPWTQRFFDSFGNLCSESAIMGNPKVKAHGRKVLNSFGNAIKHMD-DLKGTFAD 88 7899*************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp +f+ll+++++ vla++++keft+++qaa +Kl + va++la+kY+ sp|P02105|HBE2_CAPHI 89 LSELHCDKLHVDPPNFRLLGNMILIVLATHFSKEFTPQMQAAWQKLTNAVANALAHKYH 147 **********************************************************7 PP >> sp|P06643|HBE4_BOVIN Hemoglobin subunit epsilon-4 OS=Bos taurus GN=HBE4 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.6 0.3 2.6e-54 1.3e-51 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 179.6 bits; conditional E-value: 2.6e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + + +ek +v ++Wakv +ve +G++ L rl+ ++P+tq+fF++F++L e +++++++vk+Hg+kvl+ +++a+ ++d +l+++++d sp|P06643|HBE4_BOVIN 3 HFTTEEKAAVASLWAKV--NVEVVGGESLARLLIVYPWTQRFFDSFGNLYSESAIMGNPKVKAHGRKVLNSFGNAIEHMD-DLKGTFAD 88 7899*************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll+++++ vla++++keft+++qa+ +Kl + va++la+kY+ sp|P06643|HBE4_BOVIN 89 LSELHCDKLHVDPENFRLLGNMILIVLATHFSKEFTPQMQASWQKLTNAVANALAHKYH 147 **********************************************************7 PP >> sp|P18971|HBA_BALAC Hemoglobin subunit alpha OS=Balaenoptera acutorostrata GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.4 0.7 2.9e-54 1.4e-51 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 179.4 bits; conditional E-value: 2.9e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ +k++vka Wak++ + +e+Ga++L+r+f+ +P t+++F++F dL + sa+vk Hgkkv+dAl++a+ ++d +l +l+dL sp|P18971|HBA_BALAC 2 VLSPTDKSNVKATWAKIGNHGAEYGAEALERMFMNFPSTKTYFPHF-DLG-----HDSAQVKGHGKKVADALTKAVGHMD-NLLDALSDL 84 8*********************************************.999.....9************************.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la +lp+eft++v+a+l+K+la+v+++l+skY+ sp|P18971|HBA_BALAC 85 SDLHAHKLRVDPANFKLLSHCLLVTLALHLPAEFTPSVHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|P01948|HBA_RABIT Hemoglobin subunit alpha-1/2 OS=Oryctolagus cuniculus PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.4 0.2 3e-54 1.5e-51 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 179.4 bits; conditional E-value: 3e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt++k++W k++++ +e+Ga++++r+f+ +P+t+++F++F d + ++s+++k+Hgkkv +Al++a+ +ld +l+++l++L sp|P01948|HBA_RABIT 2 VLSPADKTNIKTAWEKIGSHGGEYGAEAVERMFLGFPTTKTYFPHF-DFT-----HGSEQIKAHGKKVSEALTKAVGHLD-DLPGALSTL 84 8*********************************************.777.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la+++p+eft++v+a+l+K+la v+++l+skY+ sp|P01948|HBA_RABIT 85 SDLHAHKLRVDPVNFKLLSHCLLVTLANHHPSEFTPAVHASLDKFLANVSTVLTSKYR 142 *********************************************************7 PP >> sp|P10778|HBA_ODORO Hemoglobin subunit alpha OS=Odobenus rosmarus divergens GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.4 0.1 3.1e-54 1.5e-51 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 179.4 bits; conditional E-value: 3.1e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk+ W k + +++e+G+++L+r f+s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl+ a+a++d +l+++l++L sp|P10778|HBA_ODORO 1 VLSPADKTNVKTTWDKLGGHAGEYGGEALERTFMSFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTTAVAHID-DLPGALSAL 83 69********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K++++v+++l+skY+ sp|P10778|HBA_ODORO 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFFSTVSTVLTSKYR 141 *********************************************************7 PP >> sp|P68256|HBG1_CEBAP Hemoglobin subunit gamma-1 OS=Cebus apella GN=HBG1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.3 0.0 3.3e-54 1.6e-51 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 179.3 bits; conditional E-value: 3.3e-54 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 ++++k +++++Wakv +ve+ G++ L rl++++P+tq+fF++F+ Ls + +++++++vk+Hg kvl+ l++a+++ld +l++++ +L sp|P68256|HBG1_CEBAP 4 FTAEDKAAITSLWAKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGSLSSPSAIMGNPKVKAHGAKVLTSLGEAIKNLD-DLKGTFGQL 89 6899************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla +++keft++vqa+ +K++a va +l s+Y+ sp|P68256|HBG1_CEBAP 90 SELHCDKLHVDPENFRLLGNVLVTVLAVHHGKEFTPEVQASWQKMVAGVASALGSRYH 147 *********************************************************7 PP >> sp|Q28221|HBG1_CEBAL Hemoglobin subunit gamma-1 OS=Cebus albifrons GN=HBG1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.3 0.0 3.3e-54 1.6e-51 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 179.3 bits; conditional E-value: 3.3e-54 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 ++++k +++++Wakv +ve+ G++ L rl++++P+tq+fF++F+ Ls + +++++++vk+Hg kvl+ l++a+++ld +l++++ +L sp|Q28221|HBG1_CEBAL 4 FTAEDKAAITSLWAKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGSLSSPSAIMGNPKVKAHGAKVLTSLGEAIKNLD-DLKGTFGQL 89 6899************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla +++keft++vqa+ +K++a va +l s+Y+ sp|Q28221|HBG1_CEBAL 90 SELHCDKLHVDPENFRLLGNVLVTVLAVHHGKEFTPEVQASWQKMVAGVASALGSRYH 147 *********************************************************7 PP >> sp|P01964|HBA_DASNO Hemoglobin subunit alpha OS=Dasypus novemcinctus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.3 1.0 3.3e-54 1.6e-51 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 179.3 bits; conditional E-value: 3.3e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka W+kv+ +++e Ga++L+r+f s+P t+++F + dLs ++sa+vk+Hgkkv+dAl+ a+ +ld +l+++l++L sp|P01964|HBA_DASNO 1 VLSAADKTHVKAFWGKVGGHAAEFGAEALERMFASFPPTKTYFSHM-DLS-----HGSAQVKAHGKKVADALTLAVGHLD-DLPGALSTL 83 69*******************************************9.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+ls++l+++la +lp +ft++v+a+++K++a v+++l skY+ sp|P01964|HBA_DASNO 84 SDLHAHKLRVDPVNFKFLSHCLLVTLACHLPDDFTPAVHASMDKFMAGVSTVLVSKYR 141 *********************************************************7 PP >> sp|P21668|HBB_PSIKR Hemoglobin subunit beta OS=Psittacula krameri GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.2 0.0 3.4e-54 1.7e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 179.2 bits; conditional E-value: 3.4e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++ +W+kv +v+e Ga++L rl+ ++P+tq+fF +F++Ls + ++ ++++v++Hgkkvl+ +++a+++ld ++++++++L sp|P21668|HBB_PSIKR 2 HWSAEEKQLITGLWGKV--NVAECGAEALARLLIVYPWTQRFFTSFGNLSSASAVLGNPNVRAHGKKVLTSFGEAVKNLD-NIKNTFAQL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vla +++k+ft+d qaa +Kl+ va++la kY+ sp|P21668|HBB_PSIKR 89 SELHCDKLHVDPENFRLLGDILIIVLAGHFGKDFTPDCQAAWQKLVRAVAHALARKYH 146 *********************************************************7 PP >> sp|P15448|HBA_MELCA Hemoglobin subunit alpha OS=Mellivora capensis GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.0 0.1 4e-54 1.9e-51 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 179.0 bits; conditional E-value: 4e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ +k +vka W k++ +++e+G+++L+r f s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl++a+a+ d +l+++l++L sp|P15448|HBA_MELCA 1 VLSPSDKANVKATWDKIGGHAGEYGGEALERTFASFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTNAVAHGD-DLPMALSTL 83 69********************************************.9**.....9**********************77.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K++++v+++l+skY+ sp|P15448|HBA_MELCA 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFFSTVSTVLTSKYR 141 *********************************************************7 PP >> sp|P68257|HBG2_CEBAP Hemoglobin subunit gamma-2 OS=Cebus apella GN=HBG2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.0 0.0 4.1e-54 2e-51 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 179.0 bits; conditional E-value: 4.1e-54 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 ++++k +++++Wakv +ve+ G++ L rl++++P+tq+fF++F+ Ls + +++++++vk+Hg kvl+ l++a+++ld +l++++ +L sp|P68257|HBG2_CEBAP 4 FTAEDKAAITSLWAKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGSLSSPSAIMGNPKVKAHGAKVLTSLGEAIKNLD-DLKGTFGQL 89 6899************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla +++keft++vqa+ +K++a va +l s+Y+ sp|P68257|HBG2_CEBAP 90 SELHCDKLHVDPENFRLLGNVLVTVLAIHHGKEFTPEVQASWQKMVAGVASALGSRYH 147 *********************************************************7 PP >> sp|P68258|HBG2_CEBAL Hemoglobin subunit gamma-2 OS=Cebus albifrons GN=HBG2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 179.0 0.0 4.1e-54 2e-51 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 179.0 bits; conditional E-value: 4.1e-54 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 ++++k +++++Wakv +ve+ G++ L rl++++P+tq+fF++F+ Ls + +++++++vk+Hg kvl+ l++a+++ld +l++++ +L sp|P68258|HBG2_CEBAL 4 FTAEDKAAITSLWAKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGSLSSPSAIMGNPKVKAHGAKVLTSLGEAIKNLD-DLKGTFGQL 89 6899************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla +++keft++vqa+ +K++a va +l s+Y+ sp|P68258|HBG2_CEBAL 90 SELHCDKLHVDPENFRLLGNVLVTVLAIHHGKEFTPEVQASWQKMVAGVASALGSRYH 147 *********************************************************7 PP >> sp|P02115|HBB_ANAPP Hemoglobin subunit beta OS=Anas platyrhynchos platyrhynchos GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.9 0.0 4.2e-54 2e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 178.9 bits; conditional E-value: 4.2e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++L sp|P02115|HBB_ANAPP 2 HWTAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFAQL 88 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa++pkeft++ qaa +Kl+ +va++la kY+ sp|P02115|HBB_ANAPP 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFPKEFTPECQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P22742|HBB_FRAPO Hemoglobin subunit beta OS=Francolinus pondicerianus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.8 0.0 4.6e-54 2.2e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 178.8 bits; conditional E-value: 4.6e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v+e Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++L sp|P22742|HBB_FRAPO 2 HWTAEEKQLITGLWGKV--NVAECGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFSQL 88 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+ft+d qaa +Kl+ +va++la kY+ sp|P22742|HBB_FRAPO 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFSKDFTPDCQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P02118|HBB_ANSIN Hemoglobin subunit beta OS=Anser indicus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.8 0.1 4.7e-54 2.3e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 178.8 bits; conditional E-value: 4.7e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++L sp|P02118|HBB_ANSIN 2 HWSAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFSSFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFAQL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++keft+d qaa +Kl+ +va++la kY+ sp|P02118|HBB_ANSIN 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFAKEFTPDCQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P30893|HBB_COTJA Hemoglobin subunit beta OS=Coturnix coturnix japonica GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.7 0.1 5e-54 2.5e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 178.7 bits; conditional E-value: 5e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++ +W+kv +v+e Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++L sp|P30893|HBB_COTJA 2 HWSAEEKQLITGLWGKV--NVAECGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFSQL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa++ k+ft++ qaa +Kl+ +va++la kY+ sp|P30893|HBB_COTJA 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFTKDFTPECQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P18969|HBA_AILFU Hemoglobin subunit alpha OS=Ailurus fulgens GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.6 0.1 5.2e-54 2.5e-51 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 178.6 bits; conditional E-value: 5.2e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk+ W k + +++e+G+++L+r f s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl+ a+ +ld +l+++l++L sp|P18969|HBA_AILFU 2 VLSPADKTNVKSTWDKLGGHAGEYGGEALERTFASFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTLAVGHLD-DLPGALSAL 84 8*********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la ++p+eft++v+a+l+K+++ v+++l+skY+ sp|P18969|HBA_AILFU 85 SDLHAHKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFFSAVSTVLTSKYR 142 *********************************************************7 PP >> sp|P10058|HBB_EUDCH Hemoglobin subunit beta OS=Eudyptes chrysocome GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.6 0.0 5.3e-54 2.6e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 178.6 bits; conditional E-value: 5.3e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++ +W+kv +v++ G+++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da++++d ++++++++L sp|P10058|HBB_EUDCH 2 HWSAEEKQLITGLWGKV--NVAQCGGEALARLLIVYPWTQRFFSSFGNLSSPSAILGNPMVRAHGKKVLTSFGDAVKNMD-NIKNTFAQL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+ft++ qaa eKl+ +va++la kY+ sp|P10058|HBB_EUDCH 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFAKDFTPECQAAWEKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P24292|HBB_ECHTE Hemoglobin subunit beta OS=Echinops telfairi GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.5 0.4 5.7e-54 2.8e-51 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 178.5 bits; conditional E-value: 5.7e-54 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v++++aek+ v+++W+k dv+ Ga+ L r+++++P+tq+fF +F+dLs + +++ +++v++Hgkkvl+ l+d+l++ld +l+ +++ sp|P24292|HBB_ECHTE 1 VHMTDAEKKLVTTMWGKL--DVDAAGAETLGRVLVVYPWTQRFFGHFGDLSSACAVMDNPKVQAHGKKVLHSLGDGLNHLD-DLKHFYAA 87 5899**************..9***********************************************************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll++vlv+v+ ++++eft++vqaa++K++a va++la+kY+ sp|P24292|HBB_ECHTE 88 LSELHCDKLHVDPENFRLLGNVLVCVMSRHFGAEFTPQVQAAYQKVVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P07036|HBB_CHLME Hemoglobin subunit beta OS=Chloephaga melanoptera GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.5 0.1 5.8e-54 2.8e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 178.5 bits; conditional E-value: 5.8e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++L sp|P07036|HBB_CHLME 2 HWTAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAISGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFSQL 88 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa++ k+ft+d qaa +Kl+ +va++la kY+ sp|P07036|HBB_CHLME 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFTKDFTPDCQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P02107|HBB_MACRU Hemoglobin subunit beta OS=Macropus rufus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.4 0.2 5.9e-54 2.9e-51 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 178.4 bits; conditional E-value: 5.9e-54 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++++++W+kv +e++G+++L rl+ ++P+t +fF++F+dLs + +++++++v +Hg kvl A++da+++ld +l++++++ sp|P02107|HBB_MACRU 1 VHLTAEEKNAITSLWGKV--AIEQTGGEALGRLLIVYPWTSRFFDHFGDLSNAKAVMGNPKVLAHGAKVLVAFGDAIKNLD-NLKGTFAK 87 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++++v la++++keft d q a +Kl+a va++la+kY+ sp|P02107|HBB_MACRU 88 LSELHCDKLHVDPENFKLLGNIIVICLAEHFGKEFTIDTQVAWQKLVAGVANALAHKYH 146 **********************************************************7 PP >> sp|Q6H1U7|HBB_MACEU Hemoglobin subunit beta OS=Macropus eugenii GN=HBB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.4 0.4 5.9e-54 2.9e-51 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 178.4 bits; conditional E-value: 5.9e-54 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++++++W+kv +e++G+++L rl+ ++P+t +fF++F+dLs + +++++++v +Hg kvl A++da+++ld +l++++++ sp|Q6H1U7|HBB_MACEU 2 VHLTAEEKNAITSLWGKV--AIEQTGGEALGRLLIVYPWTSRFFDHFGDLSNAKAVMSNPKVLAHGAKVLVAFGDAIKNLD-NLKGTFAK 88 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++++v la++++keft d+q a +Kl+a va++la+kY+ sp|Q6H1U7|HBB_MACEU 89 LSELHCDKLHVDPENFKLLGNIIVICLAEHFGKEFTIDAQVAWQKLVAGVANALAHKYH 147 **********************************************************7 PP >> sp|P60529|HBA_CANFA Hemoglobin subunit alpha OS=Canis familiaris GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.4 0.1 6.1e-54 3e-51 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 178.4 bits; conditional E-value: 6.1e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt++k+ W k++ +++++G+++L r f+s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl+ a+a+ld +l+++l++L sp|P60529|HBA_CANFA 1 VLSPADKTNIKSTWDKIGGHAGDYGGEALDRTFQSFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTTAVAHLD-DLPGALSAL 83 69********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K++a v+++l+skY+ sp|P60529|HBA_CANFA 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPTEFTPAVHASLDKFFAAVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02127|HBRH_CHICK Hemoglobin subunit rho OS=Gallus gallus PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.3 0.1 6.3e-54 3.1e-51 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 178.3 bits; conditional E-value: 6.3e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + s++ek+ +++vW+kv +vee Ga++L rl+ ++P+tq+fF++F++Ls + ++ ++++v++Hgkkvl +++a+++ld ++++++++ sp|P02127|HBRH_CHICK 3 HWSAEEKQLITSVWSKV--NVEECGAEALARLLIVYPWTQRFFDNFGNLSSPTAIIGNPKVRAHGKKVLSSFGEAVKNLD-NIKNTYAK 88 779**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll+++l+ vlaa++ k+ft+ qa +Kl+++va++la kY+ sp|P02127|HBRH_CHICK 89 LSELHCEKLHVDPENFRLLGNILIIVLAAHFTKDFTPTCQAVWQKLVSVVAHALAYKYH 147 **********************************************************7 PP >> sp|Q45XH5|HBG_DUGDU Hemoglobin subunit gamma OS=Dugong dugon GN=HBG PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.2 0.0 7.1e-54 3.5e-51 3 149 .] 4 147 .] 2 147 .] 0.98 Alignments for each domain: == domain 1 score: 178.2 bits; conditional E-value: 7.1e-54 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++ek +++++W+kv +vee G+ +L rl+ ++P+tq+fF+kF++Ls + ++++++++k+Hgkkvl+ ++da+ + d +l++++++Ls sp|Q45XH5|HBG_DUGDU 4 FTAEEKAAITSLWGKV--NVEEAGGKALGRLLIVYPWTQRFFDKFGNLSSASAIMGNPKIKAHGKKVLNSFGDAVENPD-NLKGTFAKLS 90 689*************..***********************************************************77.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl vdp+ f+ll++v+v vla++++keft++vqaa +K++ va +la kY+ sp|Q45XH5|HBG_DUGDU 91 ELHCDKLLVDPEDFRLLGNVIVIVLANHFGKEFTPQVQAAWQKMVTGVASALARKYH 147 ********************************************************7 PP >> sp|P02106|HBB_MACGI Hemoglobin subunit beta OS=Macropus giganteus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.1 0.4 7.3e-54 3.5e-51 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 178.1 bits; conditional E-value: 7.3e-54 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+++ek++++++W+kv +e++G+++L rl+ ++P+t +fF++F+dLs + +++++++v +Hg kvl A++da+++ld +l++++++ sp|P02106|HBB_MACGI 1 VHLTAEEKNAITSLWGKV--AIEQTGGEALGRLLIVYPWTSRFFDHFGDLSNAKAVMANPKVLAHGAKVLVAFGDAIKNLD-NLKGTFAK 87 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++++v la++++keft d q a +Kl+a va++la+kY+ sp|P02106|HBB_MACGI 88 LSELHCDKLHVDPENFKLLGNIIVICLAEHFGKEFTIDTQVAWQKLVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P07406|HBB_PASMO Hemoglobin subunit beta OS=Passer montanus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.1 0.0 7.5e-54 3.7e-51 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 178.1 bits; conditional E-value: 7.5e-54 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++ek+ ++ +W+kv +v+e G+++L rl+ ++P+tq+fF +F++Ls + ++ ++++v++Hgkkvl+ +++a+++ld +++++++Ls sp|P07406|HBB_PASMO 3 WTAEEKQLITGLWGKV--NVAECGGEALARLLIVYPWTQRFFASFGNLSSPTAVLGNPKVQAHGKKVLTSFGEAVKNLD-SIKNTFSQLS 89 589*************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll+++lv+vlaa+++k+ft+d qaa +Kl+ +va++la kY+ sp|P07406|HBB_PASMO 90 ELHCDKLHVDPENFRLLGDILVVVLAAHFGKDFTPDCQAAWQKLVRVVAHALARKYH 146 ********************************************************7 PP >> sp|P02199|MYG_APTFO Myoglobin OS=Aptenodytes forsteri GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.0 1.5 7.9e-54 3.8e-51 3 149 .] 3 147 .. 1 147 [. 0.98 Alignments for each domain: == domain 1 score: 178.0 bits; conditional E-value: 7.9e-54 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L ++e+++v+++W+kve+d +++G +L+rlfks+P+t + F+kF++L+t+de+++s+d+kkHg++vl+ l+++l+k ++++ea+lk+Ls sp|P02199|MYG_APTFO 3 LNDQEWQQVLTMWGKVESDLAGHGHAVLMRLFKSHPETMDRFDKFRGLKTPDEMRGSEDMKKHGVTVLT-LGQILKK-KGHHEAELKPLS 90 7889****************************************************************7.9******.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + Ha+k+kv++ky++++se++++v+a++++++f+ad+q a++K+l+l+++++askYk sp|P02199|MYG_APTFO 91 QTHATKHKVPVKYLEFISEAIMKVIAQKHASNFGADAQEAMKKALELFRNDMASKYK 147 ********************************************************7 PP >> sp|P08261|HBB_CHRRI Hemoglobin subunit beta/beta' OS=Chroicocephalus ridibundus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.0 0.1 8e-54 3.9e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 178.0 bits; conditional E-value: 8e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++++++ v++Hgkkvl+ +++a+++ld ++++++++L sp|P08261|HBB_CHRRI 2 HWSAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAINGNPMVRAHGKKVLTSFGEAVKNLD-NIKNTFAQL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+ft+d qaa +Kl+ +va++la kY+ sp|P08261|HBB_CHRRI 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFAKDFTPDSQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P02121|HBB_PHORU Hemoglobin subunit beta OS=Phoenicopterus ruber ruber GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 178.0 0.1 8.2e-54 4e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 178.0 bits; conditional E-value: 8.2e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++++W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ +++a+++ld ++++++++L sp|P02121|HBB_PHORU 2 HWSAEEKQLITSLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGEAVKNLD-NIKNTFAQL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+ft++ qaa +Kl+ +va++la kY+ sp|P02121|HBB_PHORU 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFAKDFTPECQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P60530|HBA_CANLA Hemoglobin subunit alpha OS=Canis latrans GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.9 0.1 8.7e-54 4.2e-51 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 177.9 bits; conditional E-value: 8.7e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt++k+ W k++ +++++G+++L r f+s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl+ a+a+ld +l+++l++L sp|P60530|HBA_CANLA 2 VLSPADKTNIKSTWDKIGGHAGDYGGEALDRTFQSFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTTAVAHLD-DLPGALSAL 84 8*********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K++ v+++l+skY+ sp|P60530|HBA_CANLA 85 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPTEFTPAVHASLDKFFTAVSTVLTSKYR 142 *********************************************************7 PP >> sp|P02112|HBB_CHICK Hemoglobin subunit beta OS=Gallus gallus GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.9 0.1 9e-54 4.4e-51 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 177.9 bits; conditional E-value: 9e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v+e Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++L sp|P02112|HBB_CHICK 3 HWTAEEKQLITGLWGKV--NVAECGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFSQL 89 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+ft++ qaa +Kl+ +va++la kY+ sp|P02112|HBB_CHICK 90 SELHCDKLHVDPENFRLLGDILIIVLAAHFSKDFTPECQAAWQKLVRVVAHALARKYH 147 *********************************************************7 PP >> sp|P68944|HBB_BRACA Hemoglobin subunit beta OS=Branta canadensis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.9 0.1 9e-54 4.4e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 177.9 bits; conditional E-value: 9e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++L sp|P68944|HBB_BRACA 2 HWTAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFSSFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFAQL 88 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+ft+d qaa +Kl+ +va++la kY+ sp|P68944|HBB_BRACA 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFAKDFTPDCQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P68945|HBB_CYGOL Hemoglobin subunit beta OS=Cygnus olor GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.9 0.1 9e-54 4.4e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 177.9 bits; conditional E-value: 9e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++L sp|P68945|HBB_CYGOL 2 HWTAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFSSFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFAQL 88 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+ft+d qaa +Kl+ +va++la kY+ sp|P68945|HBB_CYGOL 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFAKDFTPDCQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P02117|HBB_ANSAN Hemoglobin subunit beta OS=Anser anser anser GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.8 0.1 9.1e-54 4.4e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 177.8 bits; conditional E-value: 9.1e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++L sp|P02117|HBB_ANSAN 2 HWSAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFSSFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFAQL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++keft++ qaa +Kl+ +va++la kY+ sp|P02117|HBB_ANSAN 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFAKEFTPECQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P68068|HBG_ATEGE Hemoglobin subunit gamma OS=Ateles geoffroyi GN=HBG PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.8 0.0 9.2e-54 4.5e-51 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 177.8 bits; conditional E-value: 9.2e-54 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F+ Ls + +++++++vk+Hg+kvl+ l++a+++ld +l++++ +Ls sp|P68068|HBG_ATEGE 4 FTAEDKAAITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGSLSSPSAIMGNPKVKAHGVKVLTSLGEAIKNLD-DLKGTFGQLS 90 6899************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla ++keft++vqa+ +K++a va +las+Y+ sp|P68068|HBG_ATEGE 91 ELHCDKLHVDPENFRLLGNVLVTVLAILHGKEFTPEVQASWQKMVAGVASALASRYH 147 ********************************************************7 PP >> sp|P68069|HBG_ATEPA Hemoglobin subunit gamma OS=Ateles paniscus GN=HBG PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.8 0.0 9.2e-54 4.5e-51 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 177.8 bits; conditional E-value: 9.2e-54 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F+ Ls + +++++++vk+Hg+kvl+ l++a+++ld +l++++ +Ls sp|P68069|HBG_ATEPA 4 FTAEDKAAITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGSLSSPSAIMGNPKVKAHGVKVLTSLGEAIKNLD-DLKGTFGQLS 90 6899************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla ++keft++vqa+ +K++a va +las+Y+ sp|P68069|HBG_ATEPA 91 ELHCDKLHVDPENFRLLGNVLVTVLAILHGKEFTPEVQASWQKMVAGVASALASRYH 147 ********************************************************7 PP >> sp|P68070|HBG_LAGLA Hemoglobin subunit gamma OS=Lagothrix lagotricha GN=HBG PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.8 0.0 9.2e-54 4.5e-51 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 177.8 bits; conditional E-value: 9.2e-54 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F+ Ls + +++++++vk+Hg+kvl+ l++a+++ld +l++++ +Ls sp|P68070|HBG_LAGLA 4 FTAEDKAAITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGSLSSPSAIMGNPKVKAHGVKVLTSLGEAIKNLD-DLKGTFGQLS 90 6899************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla ++keft++vqa+ +K++a va +las+Y+ sp|P68070|HBG_LAGLA 91 ELHCDKLHVDPENFRLLGNVLVTVLAILHGKEFTPEVQASWQKMVAGVASALASRYH 147 ********************************************************7 PP >> sp|P68071|HBG_BRAAR Hemoglobin subunit gamma OS=Brachyteles arachnoides GN=HBG PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.8 0.0 9.2e-54 4.5e-51 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 177.8 bits; conditional E-value: 9.2e-54 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F+ Ls + +++++++vk+Hg+kvl+ l++a+++ld +l++++ +Ls sp|P68071|HBG_BRAAR 4 FTAEDKAAITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGSLSSPSAIMGNPKVKAHGVKVLTSLGEAIKNLD-DLKGTFGQLS 90 6899************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla ++keft++vqa+ +K++a va +las+Y+ sp|P68071|HBG_BRAAR 91 ELHCDKLHVDPENFRLLGNVLVTVLAILHGKEFTPEVQASWQKMVAGVASALASRYH 147 ********************************************************7 PP >> sp|B3EWE1|HBA_BLABR Hemoglobin subunit alpha OS=Blarina brevicauda PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.7 0.3 9.7e-54 4.7e-51 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 177.7 bits; conditional E-value: 9.7e-54 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ +kt++ka+W k + +++++Ga++L+r f s+P+t+++F++F dLs +sa+vk Hgkkv+dAl++a+ +ld +l+++l++L sp|B3EWE1|HBA_BLABR 1 VLSASDKTNLKAAWDKLGGQAANYGAEALERTFASFPTTKTYFPHF-DLS-----PGSAQVKGHGKKVADALTKAVGSLD-DLPGALSAL 83 69********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la+++p++ft++v+a+l+K+la+v+++l+skY+ sp|B3EWE1|HBA_BLABR 84 SDLHAHKLRVDPVNFKLLSHCLLVTLASHHPADFTPAVHASLDKFLATVSTVLTSKYR 141 *********************************************************7 PP >> sp|P07411|HBB_VULGR Hemoglobin subunit beta OS=Vultur gryphus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.7 0.1 1e-53 4.9e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 177.7 bits; conditional E-value: 1e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++ +W+kv +v+e Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ +++a+++ld ++++++++L sp|P07411|HBB_VULGR 2 HWSAEEKQLITGLWGKV--NVAECGAEALARLLIVYPWTQRFFASFGNLSSPTAIIGNPMVRAHGKKVLTSFGEAVKNLD-NIKNTFAQL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+ft+d qaa +Kl+ va++la kY+ sp|P07411|HBB_VULGR 89 SELHCEKLHVDPENFRLLGDILIIVLAAHFAKDFTPDCQAAWQKLVRAVAHALARKYH 146 *********************************************************7 PP >> sp|P02113|HBB_PHACO Hemoglobin subunit beta OS=Phasianus colchicus colchicus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.7 0.0 1e-53 5e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 177.7 bits; conditional E-value: 1e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++L sp|P02113|HBB_PHACO 2 HWSAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFSQL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+ft++ qaa +Kl+ +va++la kY+ sp|P02113|HBB_PHACO 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFSKDFTPECQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P21200|HBA_VULVU Hemoglobin subunit alpha OS=Vulpes vulpes GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.5 0.1 1.2e-53 5.7e-51 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 177.5 bits; conditional E-value: 1.2e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt++k+ W k++ +++++G+++L r f+s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl+ a+a+ld +l+++l++L sp|P21200|HBA_VULVU 1 VLSPADKTNIKSTWDKIGGHAGDYGGEALDRTFQSFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTTAVAHLD-DLPGALSAL 83 69********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K++ v+++l+skY+ sp|P21200|HBA_VULVU 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPNEFTPAVHASLDKFFTAVSTVLTSKYR 141 *********************************************************7 PP >> sp|P82113|HBB_STEMC Hemoglobin subunit beta OS=Stercorarius maccormicki GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.5 0.1 1.2e-53 5.7e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 177.5 bits; conditional E-value: 1.2e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ +++a+++ld ++++++++L sp|P82113|HBB_STEMC 2 HWSAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFSSFGNLSSPTAIIGNPMVRAHGKKVLTSFGEAVKNLD-NIKNTFAQL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++keft+d qaa +Kl+ +va++la kY+ sp|P82113|HBB_STEMC 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFAKEFTPDCQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|B3EWD9|HBA_TAMST Hemoglobin subunit alpha OS=Tamias striatus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.4 0.3 1.2e-53 6e-51 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 177.4 bits; conditional E-value: 1.2e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt++ka+W k + + +e+Ga++L+r+f ++P+t+++F++F dLs ++sa+v+ Hg+kv+dAl a+ +ld +l+++l++L sp|B3EWD9|HBA_TAMST 1 VLSPADKTNLKAAWHKLGGHGGEYGAEALERMFATFPTTKTYFPHF-DLS-----HGSAQVQGHGEKVADALLHAVGNLD-DLPGALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p+eft++v+a+l+K+la+v+++l+skY+ sp|B3EWD9|HBA_TAMST 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPAEFTPAVHASLDKFLATVSTVLTSKYR 141 *********************************************************7 PP >> sp|P68030|HBG_ALOBE Hemoglobin subunit gamma OS=Alouatta belzebul GN=HBG PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.4 0.0 1.2e-53 6e-51 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 177.4 bits; conditional E-value: 1.2e-53 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F+ Ls + +++++++vk+Hg+kvl+ l++a+++ld +l++++ +Ls sp|P68030|HBG_ALOBE 4 FTAEDKAAITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGSLSSPSAIMGNPKVKAHGVKVLTSLGEAIKNLD-DLKGTFGSLS 90 6899************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla ++keft++vqa+ +K++a va +las+Y+ sp|P68030|HBG_ALOBE 91 ELHCDKLHVDPENFRLLGNVLVTVLAILHGKEFTPEVQASWQKMVAGVASALASRYH 147 ********************************************************7 PP >> sp|P68031|HBG_ALOCA Hemoglobin subunit gamma OS=Alouatta caraya GN=HBG PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.4 0.0 1.2e-53 6e-51 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 177.4 bits; conditional E-value: 1.2e-53 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F+ Ls + +++++++vk+Hg+kvl+ l++a+++ld +l++++ +Ls sp|P68031|HBG_ALOCA 4 FTAEDKAAITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGSLSSPSAIMGNPKVKAHGVKVLTSLGEAIKNLD-DLKGTFGSLS 90 6899************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla ++keft++vqa+ +K++a va +las+Y+ sp|P68031|HBG_ALOCA 91 ELHCDKLHVDPENFRLLGNVLVTVLAILHGKEFTPEVQASWQKMVAGVASALASRYH 147 ********************************************************7 PP >> sp|P14260|HBB_CAIMO Hemoglobin subunit beta OS=Cairina moschata GN=HBB PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.4 0.1 1.3e-53 6.1e-51 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 177.4 bits; conditional E-value: 1.3e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++L sp|P14260|HBB_CAIMO 3 HWTAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFAQL 89 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa++ k+ft+d qaa +Kl+ +va++la kY+ sp|P14260|HBB_CAIMO 90 SELHCDKLHVDPENFRLLGDILIIVLAAHFTKDFTPDCQAAWQKLVRVVAHALARKYH 147 *********************************************************7 PP >> sp|Q9GJS7|HBG_CALJA Hemoglobin subunit gamma OS=Callithrix jacchus GN=HBG1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.4 0.0 1.3e-53 6.2e-51 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 177.4 bits; conditional E-value: 1.3e-53 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++++k +++++Wakv +ve+ G++ L rl++++P+tq+fF++F+ Ls + +++++++vk+Hg+kvl+ l++a+++ld +l++++ +Ls sp|Q9GJS7|HBG_CALJA 4 FTAEDKAAITSLWAKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGSLSSPSAIMGNPKVKAHGVKVLTSLGEAIKNLD-DLKGTFGQLS 90 6899************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla ++keft++vqa+ +K++a va +las+Y+ sp|Q9GJS7|HBG_CALJA 91 ELHCDKLHVDPENFRLLGNVLVTVLAILYGKEFTPEVQASWQKMVAGVASALASRYH 147 ********************************************************7 PP >> sp|Q7M3B8|HBA1_HAPGR Hemoglobin subunit alpha-1 OS=Hapalemur griseus GN=HBA1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.3 1.0 1.3e-53 6.3e-51 2 149 .] 1 140 [] 1 140 [] 0.98 Alignments for each domain: == domain 1 score: 177.3 bits; conditional E-value: 1.3e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs a+kt++k++W+ ++++++++Ga++L+r+f+s+P+t+++F++F d+s ++s ++ +Hgkkv+dAl++a+ ++d +++++l++ sp|Q7M3B8|HBA1_HAPGR 1 VLSSADKTNIKTAWGAIGSHAADHGAEALERMFLSFPTTKTYFPHF-DMS-----HGSGQI-AHGKKVADALTNAVGHID-DMPGALSA 81 69********************************************.888.....9**999.8****************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fklls++l+++la+++p+eft++v+a+l+K++a v+++l+skY+ sp|Q7M3B8|HBA1_HAPGR 82 LSDLHAHKLRVDPVNFKLLSHCLLVTLASHHPAEFTPAVHASLDKFFAAVSTVLTSKYR 140 **********************************************************7 PP >> sp|P60523|HBA_CHRBR Hemoglobin subunit alpha OS=Chrysocyon brachyurus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.3 0.1 1.3e-53 6.5e-51 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 177.3 bits; conditional E-value: 1.3e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt++k+ W k++ +++++G+++L r f+s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl+ a+a+ld +l+++l++L sp|P60523|HBA_CHRBR 1 VLSPADKTNIKSTWDKIGGHAGDYGGEALDRTFQSFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTTAVAHLD-DLPGALSAL 83 69********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K++ v+++l+skY+ sp|P60523|HBA_CHRBR 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPTEFTPAVHASLDKFFTAVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02116|HBB_ARAAR Hemoglobin subunit beta OS=Ara ararauna GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.3 0.0 1.3e-53 6.4e-51 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 177.3 bits; conditional E-value: 1.3e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ +++a+++ld ++++++++L sp|P02116|HBB_ARAAR 2 HWTAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGEAVKNLD-NIKNTFAQL 88 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+ft++ qaal+Kl+ +va++la kY+ sp|P02116|HBB_ARAAR 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFGKDFTPECQAALQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P63105|HBA_CAMBA Hemoglobin subunit alpha OS=Camelus bactrianus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.2 0.9 1.4e-53 6.8e-51 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 177.2 bits; conditional E-value: 1.4e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs ++kt+vk++++k++ +++e+Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl++a +ld +l+++l++L sp|P63105|HBA_CAMBA 1 VLSSKDKTNVKTAFGKIGGHAAEYGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTKAADHLD-DLPSALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l++++aa++p++ft++v+a+l+K+la v+++l+skY+ sp|P63105|HBA_CAMBA 84 SDLHAHKLRVDPVNFKLLSHCLLVTVAAHHPGDFTPSVHASLDKFLANVSTVLTSKYR 141 *********************************************************7 PP >> sp|P63106|HBA_CAMDR Hemoglobin subunit alpha OS=Camelus dromedarius GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.2 0.9 1.4e-53 6.8e-51 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 177.2 bits; conditional E-value: 1.4e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs ++kt+vk++++k++ +++e+Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl++a +ld +l+++l++L sp|P63106|HBA_CAMDR 1 VLSSKDKTNVKTAFGKIGGHAAEYGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTKAADHLD-DLPSALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l++++aa++p++ft++v+a+l+K+la v+++l+skY+ sp|P63106|HBA_CAMDR 84 SDLHAHKLRVDPVNFKLLSHCLLVTVAAHHPGDFTPSVHASLDKFLANVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02200|MYG_ALLMI Myoglobin OS=Alligator mississippiensis GN=MB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.2 2.7 1.4e-53 6.9e-51 2 149 .] 2 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 177.2 bits; conditional E-value: 1.4e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls++e+++v+ +W+kve++ e+G ++++rl++ +P+tqe FekFk+++t+de+k+s+++k+Hg++v +Al+++l++ ++++ lk+L sp|P02200|MYG_ALLMI 2 ELSDQEWKHVLDIWTKVESKLPEHGHEVIIRLLQEHPETQERFEKFKHMKTADEMKSSEKMKQHGNTVFTALGNILKQ-KGNHAEVLKPL 90 59****************************************************************************.99********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +++Ha ++k+++ky++++se++v+v+a+++p++f+ad qaa+ K+l+l+++++askYk sp|P02200|MYG_ALLMI 91 AKSHALEHKIPVKYLEFISEIIVKVIAEKYPADFGADSQAAMRKALELFRNDMASKYK 148 *********************************************************7 PP >> sp|P07414|HBA_TRIIN Hemoglobin subunit alpha OS=Trichechus inunguis GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.1 0.0 1.5e-53 7.2e-51 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 177.1 bits; conditional E-value: 1.5e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++kt+vk+ W+k++++ +e+G+++L+r+f+s+P+t+++F++F dLs ++s ++k+Hgkkv+dAl+ a+ +l+ +l+++l++L sp|P07414|HBA_TRIIN 1 VLSDEDKTNVKTFWGKIGTHTGEYGGEALERMFLSFPTTKTYFPHF-DLS-----HGSGQIKAHGKKVADALTRAVGHLE-DLPGTLSEL 83 69********************************************.***.....***********************98.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa++l+vdp +fklls++l+++l ++l ++ft++v+a+l+K+l++v+++l+skY+ sp|P07414|HBA_TRIIN 84 SDLHAHRLRVDPVNFKLLSHCLLVTLSSHLREDFTPSVHASLDKFLSSVSTVLTSKYR 141 *********************************************************7 PP >> sp|P14524|HBB_TURME Hemoglobin subunit beta OS=Turdus merula GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.1 0.0 1.5e-53 7.3e-51 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 177.1 bits; conditional E-value: 1.5e-53 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++ek+ ++ +W+kv +v+e G+++L rl+ ++P+tq+fF +F++Ls + ++ ++++v++Hgkkvl+ +++a+++ld +++++++Ls sp|P14524|HBB_TURME 3 WTAEEKQLITGLWGKV--NVAECGGEALARLLIVYPWTQRFFASFGNLSSPTAVLGNPKVQAHGKKVLTSFGEAVKNLD-SIKGTFAQLS 89 589*************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll+++lv+vlaa+++k+ft+d qaa +Kl+ +va++la kY+ sp|P14524|HBB_TURME 90 ELHCDKLHVDPENFRLLGDILVVVLAAHFGKDFTPDCQAAWQKLVRVVAHALARKYH 146 ********************************************************7 PP >> sp|Q45XI4|HBD_DENDR Hemoglobin subunit deltaH OS=Dendrohyrax dorsalis GN=HBD PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.0 0.1 1.6e-53 7.9e-51 2 149 .] 3 147 .] 2 147 .] 0.98 Alignments for each domain: == domain 1 score: 177.0 bits; conditional E-value: 1.6e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++ ek +v ++W+kv d + G ++L rl++ +P+tq+fFe+F+dLst+d+++k++ v++Hg+kvl ++++l++l +l++++++L sp|Q45XI4|HBD_DENDR 3 RLTDSEKAEVVSLWSKV--DEKIIGSEALGRLLVIYPWTQRFFEHFGDLSTADAIMKNPRVQAHGEKVLSSFGEGLNHLG-DLKGTFAQL 89 699**************..88899******************************************************96.8******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH+++l+vdp++fkll+++lv+vla +++keft +vqaa++K++a +a++la+kY+ sp|Q45XI4|HBD_DENDR 90 SELHCDELHVDPENFKLLGNILVVVLARHYGKEFTLEVQAAYQKFVAGMANALAHKYH 147 *********************************************************7 PP >> sp|P84792|HBB_AYTFU Hemoglobin subunit beta OS=Aythya fuligula PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 177.0 0.1 1.7e-53 8.2e-51 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 177.0 bits; conditional E-value: 1.7e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++L sp|P84792|HBB_AYTFU 3 HWTAEEKQIITGLWGKV--NVADCGAEALARLLIVYPWTQRFFSSFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFAQL 89 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l++vlaa+++keft++ qaa +Kl+ +va++la kY+ sp|P84792|HBB_AYTFU 90 SELHCDKLHVDPENFRLLGDILIVVLAAHFSKEFTPECQAAWQKLVRVVAHALARKYH 147 *********************************************************7 PP >> sp|P0C0U8|HBB1_DRYCE Hemoglobin subunit beta-1 OS=Drymarchon corais erebennus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 176.9 1.9 1.8e-53 8.7e-51 2 149 .] 2 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 176.9 bits; conditional E-value: 1.8e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +++ek++++++W kv dv +G ++L rl+ ++P+tq+fF +F++Ls +++++++a+vk+Hgkkv +A++da+++ e ++ ++++ sp|P0C0U8|HBB1_DRYCE 2 HWTAEEKSAITSIWNKV--DVPAVGSEALSRLLIVYPWTQRFFTSFGNLSNAAAIQSNAQVKAHGKKVFTAFGDAVKN-PEAVKETFAK 87 6799*************..***********************************************************.67******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp +fkll+++l++vlaa+++keft++vqa+++Kl+++va++la++Y+ sp|P0C0U8|HBB1_DRYCE 88 LSELHCDKLHVDPINFKLLGQILITVLAAHFGKEFTPHVQASYQKLVSVVAHALAHRYH 146 **********************************************************7 PP >> sp|P19645|HBA_PAGLA Hemoglobin subunit alpha OS=Paguma larvata GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 176.6 0.7 2.2e-53 1.1e-50 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 176.6 bits; conditional E-value: 2.2e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs a+k+++ka W k++++++e+Ga++L+r f s+P+t+++F++F dLs ++sa+vk+Hgkkv+dAl+ a+ +l+ +l+++l++L sp|P19645|HBA_PAGLA 1 VLSSADKNNIKATWDKIGSHAGEYGAEALERTFISFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVADALTLAVGHLE-DLPNALSAL 83 69********************************************.***.....***********************98.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p+eft++v++al+K+++ v+++l+skY+ sp|P19645|HBA_PAGLA 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHSALDKFFSAVSTVLTSKYR 141 *********************************************************7 PP >> sp|O13071|HBE_CALGE Hemoglobin subunit epsilon (Fragment) OS=Callithrix geoffroyi GN=HBE1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 176.6 0.1 2.2e-53 1.1e-50 1 144 [. 2 142 .] 2 142 .] 0.98 Alignments for each domain: == domain 1 score: 176.6 bits; conditional E-value: 2.2e-53 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek +++++W+k+ +vee G+++L rl++++P+tq+fF++F++Ls + ++ ++++vk+Hgkkvl+ ++da++++d +l++++++ sp|O13071|HBE_CALGE 2 VHFTAEEKAAITSLWGKM--NVEEAGGEALGRLLVVYPWTQRFFDNFGNLSSPSAILGNPKVKAHGKKVLTSFGDAIKNMD-NLKTTFAK 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 LselH++kl+vdp++f+ll++vlv +la++++keft++vqaa +Kl++ va++l sp|O13071|HBE_CALGE 89 LSELHCDKLHVDPENFRLLGNVLVIILATHFGKEFTPEVQAASQKLVSAVAIAL 142 **************************************************9876 PP >> sp|Q45XI5|HBD_HETBR Hemoglobin subunit deltaH OS=Heterohyrax brucei PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 176.5 0.0 2.3e-53 1.1e-50 2 149 .] 3 147 .] 2 147 .] 0.98 Alignments for each domain: == domain 1 score: 176.5 bits; conditional E-value: 2.3e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++ ek +v ++W+kv d + G ++L rl++ +P+tq+fFe+F+dLst+d+++k++ v++Hg+kvl ++++l++ld +l++++++L sp|Q45XI5|HBD_HETBR 3 RLTDSEKAEVVSLWSKV--DEKIIGSEALGRLLVIYPWTQRFFEHFGDLSTADAIMKNPRVQAHGEKVLSSFGEGLNHLD-NLRGTFAQL 89 699**************..88899********************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH+++l+vdp++f+ll+++lv+vla +++keft +vqaa +K++a +a++la+kY+ sp|Q45XI5|HBD_HETBR 90 SELHCDELHVDPENFRLLGNILVVVLARHYGKEFTLEVQAACQKFVAGMANALAHKYH 147 *********************************************************7 PP >> sp|P07419|HBA_DASVI Hemoglobin subunit alpha OS=Dasyurus viverrinus GN=HBA PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 176.5 1.0 2.3e-53 1.1e-50 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 176.5 bits; conditional E-value: 2.3e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+ +++ + a++L r f+s+P+t+++F++F dLs +sa+++ Hgkkv+dAls+a+a+ld +l+++l++L sp|P07419|HBA_DASVI 2 VLSDADKTHVKAIWGKVGGHAGAYAAEALARTFLSFPTTKTYFPHF-DLS-----PGSAQIQGHGKKVADALSQAVAHLD-DLPGTLSKL 84 89********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa+l+k++t++v+a+++K++a+va++l+skY+ sp|P07419|HBA_DASVI 85 SDLHAHKLRVDPVNFKLLSHCLIVTLAAHLSKDLTPEVHASMDKFFASVATVLTSKYR 142 *********************************************************7 PP >> sp|P09967|GLB1_PETMA Globin-1 OS=Petromyzon marinus PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 176.3 0.1 2.6e-53 1.3e-50 3 148 .. 12 150 .] 10 150 .] 0.98 Alignments for each domain: == domain 1 score: 176.3 bits; conditional E-value: 2.6e-53 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklk 89 L++aek +++++Wa+v+a+++ +G+diL+++f+s Pa+q fF+kF++L+ +d+lkks dv++H++++++A++da+ +d ek++ kl+ sp|P09967|GLB1_PETMA 12 LTAAEKATIRTAWAPVYAKYQSTGVDILIKFFTSNPAAQAFFPKFQGLTSADQLKKSMDVRWHAERIINAVNDAVVAMDdtEKMSLKLR 100 99****************************************************************************5599******* PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 +Ls++Hak+++vdp+yfk+l++v+vd++ + +a+leKl++++++ll+s Y sp|P09967|GLB1_PETMA 101 ELSGKHAKSFQVDPQYFKVLAAVIVDTVLPG---------DAGLEKLMSMICILLRSSY 150 ****************************999.........9****************99 PP >> sp|P02114|HBB_ANAPL Hemoglobin subunit beta OS=Anas platyrhynchos GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 176.5 0.1 2.4e-53 1.2e-50 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 176.5 bits; conditional E-value: 2.4e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++L sp|P02114|HBB_ANAPL 3 HWTAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFAQL 89 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa++ k+ft++ qaa +Kl+ +va++la kY+ sp|P02114|HBB_ANAPL 90 SELHCDKLHVDPENFRLLGDILIIVLAAHFTKDFTPECQAAWQKLVRVVAHALARKYH 147 *********************************************************7 PP >> sp|P18978|HBA_TURTR Hemoglobin subunit alpha OS=Tursiops truncatus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 176.4 0.3 2.5e-53 1.2e-50 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 176.4 bits; conditional E-value: 2.5e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk W+k++ + +e+Ga++L+r+f +P t+++F +F dL ++sa++k Hgkkv+dAl++a+ ++d +l+ +l++L sp|P18978|HBA_TURTR 1 VLSPADKTNVKGTWSKIGNHSAEYGAEALERMFINFPSTKTYFSHF-DLG-----HGSAQIKGHGKKVADALTKAVGHID-NLPDALSEL 83 69********************************************.999.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la +lp++ft++v+a+l+K+la+v+++l+skY+ sp|P18978|HBA_TURTR 84 SDLHAHKLRVDPVNFKLLSHCLLVTLALHLPADFTPSVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P10782|HBB_PHACA Hemoglobin subunit beta OS=Phalacrocorax carbo GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 176.4 0.2 2.6e-53 1.2e-50 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 176.4 bits; conditional E-value: 2.6e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v+e Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ +++a+++ld +++a++++L sp|P10782|HBB_PHACA 2 HWTAEEKQLITGLWGKV--NVAECGAEALARLLIVYPWTQRFFASFGNLSSATAITGNPMVRAHGKKVLTSFGEAVKNLD-NIKATFAQL 88 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+ft++ qaa +Kl+ va++la kY+ sp|P10782|HBB_PHACA 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFAKDFTPECQAAWQKLVGAVAHALARKYH 146 *********************************************************7 PP >> sp|P15163|HBA_LEPWE Hemoglobin subunit alpha-1/2 OS=Leptonychotes weddelli PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 176.2 0.1 2.9e-53 1.4e-50 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 176.2 bits; conditional E-value: 2.9e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk+ W k++ +++e+G+++L+r f+++P+t+++F++F dLs +sa+vk+Hgkkv+dAl+ a+ ++d +l+++l++L sp|P15163|HBA_LEPWE 1 VLSPADKTNVKTTWDKIGGHAGEYGGEALERTFMAFPTTKTYFPHF-DLS-----PGSAQVKTHGKKVADALTTAVSHID-DLPGALSAL 83 69********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p++ft++v+a+l+K+++ v+++l+skY+ sp|P15163|HBA_LEPWE 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPADFTPAVHASLDKFFSAVSTVLTSKYR 141 *********************************************************7 PP >> sp|P23019|HBA_PROCR Hemoglobin subunit alpha OS=Proteles cristata GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 176.0 0.9 3.3e-53 1.6e-50 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 176.0 bits; conditional E-value: 3.3e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs a+k ++ka W k++ + +e+Ga++L+r f+ +P+t+++F++F dLs ++sa+vk+Hgkkv+dAl+ a a+ld +l+a+l++L sp|P23019|HBA_PROCR 1 VLSSADKANIKATWDKIGGHGGEYGAEALERTFLCFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVADALAVAAAHLD-DLPAALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++laa++p+eft++v+a+l+K+l++v+++l+skY+ sp|P23019|HBA_PROCR 84 SDLHAYKLRVDPVNFKLLSHCLLVTLAAHHPAEFTPAVHASLDKFLSSVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02124|HBB_RHEAM Hemoglobin subunit beta OS=Rhea americana GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 176.0 0.1 3.4e-53 1.7e-50 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 176.0 bits; conditional E-value: 3.4e-53 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++Ls sp|P02124|HBB_RHEAM 3 WTAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFAQLS 89 589*************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll+++l+ vlaa+++k+ft++ qaa +Kl+ +va++la kY+ sp|P02124|HBB_RHEAM 90 ELHCDKLHVDPENFRLLGDILIIVLAAHFAKDFTPECQAAWQKLVRVVAHALARKYH 146 ********************************************************7 PP >> sp|P86390|HBB2_IGUIG Hemoglobin subunit beta-2 OS=Iguana iguana GN=HBB2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 175.9 0.1 3.5e-53 1.7e-50 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 175.9 bits; conditional E-value: 3.5e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +++ek+ ++ +W+kv dv ++Gad+L +++ +P+tq+fF F++Ls + ++ ++++v++Hgkkvl+A++da+++ld +++ ++++ sp|P86390|HBB2_IGUIG 2 HWTAEEKQLITCLWGKV--DVPTVGADALAGMLVMYPWTQRFFADFGNLSSATAICGNPKVRAHGKKVLTAFGDAIKNLD-NIKDTFAK 87 6799*************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vl+ vla +++k+ft++ +aa++Kl+++va++la +Y+ sp|P86390|HBB2_IGUIG 88 LSELHCDKLHVDPENFKLLGNVLIIVLAGHYGKDFTPACHAAYQKLVNVVAHALARRYH 146 **********************************************************7 PP >> sp|P02123|HBB_STRCA Hemoglobin subunit beta OS=Struthio camelus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 175.7 0.0 4e-53 2e-50 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 175.7 bits; conditional E-value: 4e-53 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 s++ek+ + +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ ++da+++ld ++++++++Ls sp|P02123|HBB_STRCA 3 WSAEEKQLISGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLD-NIKNTFAQLS 89 699*************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll+++l+ vlaa++ keft++ qaa +Kl+ +va++la kY+ sp|P02123|HBB_STRCA 90 ELHCDKLHVDPENFRLLGDILIIVLAAHFTKEFTPECQAAWQKLVRVVAHALARKYH 146 ********************************************************7 PP >> sp|Q27940|HBG_AOTAZ Hemoglobin subunit gamma OS=Aotus azarae GN=HBG PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 175.6 0.0 4.3e-53 2.1e-50 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 175.6 bits; conditional E-value: 4.3e-53 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++++k +++++Wakv +ve+ G++ L rl++++P+tq+fF++F+ Ls + +++++++vk+Hg kvl+ l++a+++ld +l++++ +Ls sp|Q27940|HBG_AOTAZ 4 FTAEDKAAITSLWAKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGSLSSPSAIMGNPKVKAHGAKVLTSLGEAIKNLD-DLKGTFGQLS 90 6899************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll++vlv+vla ++keft++vqa+ +K++a va +l s+Y+ sp|Q27940|HBG_AOTAZ 91 ELHCDKLHVDPENFRLLGNVLVTVLAVLHGKEFTPEVQASWQKMVAGVASALGSRYH 147 ********************************************************7 PP >> sp|P02120|HBB_ANSSE Hemoglobin subunit beta OS=Anseranas semipalmata GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 175.6 0.0 4.5e-53 2.2e-50 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 175.6 bits; conditional E-value: 4.5e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+t++fF +F++Ls + ++ +++ v++Hgkkvl+ +++a+++ld ++++++++L sp|P02120|HBB_ANSSE 2 HWSAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTERFFSSFGNLSSPTAIIGNPMVRAHGKKVLTSFGEAVKNLD-NIKNTFAQL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+ft+d qaa +Kl+ +va++la kY+ sp|P02120|HBB_ANSSE 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFSKDFTPDCQAAWQKLVRVVAHALARKYH 146 *********************************************************7 PP >> sp|P02203|MYG_VARVA Myoglobin OS=Varanus varius GN=MB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 175.3 0.3 5.4e-53 2.6e-50 3 149 .] 3 148 .. 1 148 [. 0.99 Alignments for each domain: == domain 1 score: 175.3 bits; conditional E-value: 5.4e-53 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e++kv +W+kve d +G+++++r+f+ +P+tq+ F kFk+L+t de+k+s+d+kkHg +vl+Al+ +l++ ++++ea++++L+ sp|P02203|MYG_VARVA 3 LSDEEWKKVVDIWGKVEPDLPSHGQEVIIRMFQNHPETQDRFAKFKNLKTLDEMKNSEDLKKHGTTVLTALGRILKQ-KGHHEAEIAPLA 91 9****************************************************************************.99********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + Ha+ +k+++ky++++ ev+v v+a++++++f+ad q a+ K+l+l+++++as+Yk sp|P02203|MYG_VARVA 92 QTHANTHKIPIKYLEFICEVIVGVIAEKHSADFGADSQEAMRKALELFRNDMASRYK 148 ********************************************************7 PP >> sp|P68061|HBB_AEGMO Hemoglobin subunit beta OS=Aegypius monachus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 175.3 0.0 5.5e-53 2.7e-50 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 175.3 bits; conditional E-value: 5.5e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ +++a+++ld ++++++++L sp|P68061|HBB_AEGMO 2 HWTAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAIIGNPMVRAHGKKVLTSFGEAVKNLD-NIKNTFAQL 88 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+f++d qaa +Kl+ va++la kY+ sp|P68061|HBB_AEGMO 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFGKDFSPDCQAAWQKLVRAVAHALARKYH 146 *********************************************************7 PP >> sp|P68062|HBB_TRIOC Hemoglobin subunit beta OS=Trigonoceps occipitalis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 175.3 0.0 5.5e-53 2.7e-50 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 175.3 bits; conditional E-value: 5.5e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ +++a+++ld ++++++++L sp|P68062|HBB_TRIOC 2 HWTAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAIIGNPMVRAHGKKVLTSFGEAVKNLD-NIKNTFAQL 88 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+f++d qaa +Kl+ va++la kY+ sp|P68062|HBB_TRIOC 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFGKDFSPDCQAAWQKLVRAVAHALARKYH 146 *********************************************************7 PP >> sp|P68063|HBB_GYPRU Hemoglobin subunit beta OS=Gyps rueppellii GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 175.3 0.0 5.5e-53 2.7e-50 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 175.3 bits; conditional E-value: 5.5e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ +++a+++ld ++++++++L sp|P68063|HBB_GYPRU 2 HWTAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAIIGNPMVRAHGKKVLTSFGEAVKNLD-NIKNTFAQL 88 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa+++k+f++d qaa +Kl+ va++la kY+ sp|P68063|HBB_GYPRU 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFGKDFSPDCQAAWQKLVRAVAHALARKYH 146 *********************************************************7 PP >> sp|P08851|HBB_ACCGE Hemoglobin subunit beta OS=Accipiter gentilis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 175.2 0.1 5.9e-53 2.9e-50 4 149 .] 4 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 175.2 bits; conditional E-value: 5.9e-53 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ +++a+++ld ++++++++Lse sp|P08851|HBB_ACCGE 4 AAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSATAVLGNPMVRAHGKKVLTSFGEAVKNLD-NIKNTFAQLSE 90 689************..*************************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp++f+ll+++l++vlaa+++k+f++d qaa +Kl+ va++la kY+ sp|P08851|HBB_ACCGE 91 LHCDKLHVDPENFRLLGDILIVVLAAHFGKDFSPDCQAAWQKLVRAVAHALARKYH 146 *******************************************************7 PP >> sp|P01957|HBA_PROHA Hemoglobin subunit alpha OS=Procavia capensis habessinica GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 175.1 0.4 6.1e-53 3e-50 2 149 .] 1 142 [] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 175.1 bits; conditional E-value: 6.1e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vk +W kv+++++e+Ga++L+r+f+s+P+t+++F++F dL+ ++sa+vk+Hg+kv Al++a+ +ld +l+++l+dL sp|P01957|HBA_PROHA 1 VLSAADKNNVKGAWEKVGTHAGEYGAEALERMFLSFPTTKTYFPHF-DLT-----HGSAQVKAHGQKVGAALTKAVGHLD-DLPNALSDL 83 69********************************************.999.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlp.keftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++l +lp +eft++v+a+l+K+++ v+++l+skY+ sp|P01957|HBA_PROHA 84 SDLHAHKLRVDPVNFKLLSHCLLVTLSRHLPeQEFTPAVHASLDKFFSNVSTVLTSKYR 142 ******************************9459************************7 PP >> sp|Q9GLX4|HBG1_CALMO Hemoglobin subunit gamma-1 OS=Callicebus moloch GN=HBG1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 175.1 0.0 6.1e-53 3e-50 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 175.1 bits; conditional E-value: 6.1e-53 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 ++++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F+ Ls + +++++++vk+Hg+kvl+ l++a+++ld +l++++ +L sp|Q9GLX4|HBG1_CALMO 4 FTAEDKAAITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGSLSSPSAIMGNPKVKAHGVKVLTSLGEAIKNLD-DLKGTFDQL 89 6899************..************************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll++vlv+vla ++keft++vqa+ +K++a va +l s+Y+ sp|Q9GLX4|HBG1_CALMO 90 SELHCDKLHVDPENFRLLGNVLVTVLAILHGKEFTPEVQASRQKMVAGVASALGSRYH 147 *********************************************************7 PP >> sp|P02128|HBE_CHICK Hemoglobin subunit epsilon OS=Gallus gallus GN=HBE PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 175.1 0.1 6.3e-53 3.1e-50 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 175.1 bits; conditional E-value: 6.3e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ +++vW+kv +vee Ga++L rl+ ++P+tq+fF +F++Ls + ++++++ v++Hgkkvl +++a+++ld ++++++++L sp|P02128|HBE_CHICK 3 HWSAEEKQLITSVWSKV--NVEECGAEALARLLIVYPWTQRFFASFGNLSSPTAIMGNPRVRAHGKKVLSSFGEAVKNLD-NIKNTYAKL 89 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vla++++++ft++ q a +Kl+++va++la kY+ sp|P02128|HBE_CHICK 90 SELHCDKLHVDPENFRLLGDILIIVLASHFARDFTPACQFAWQKLVNVVAHALARKYH 147 *********************************************************7 PP >> sp|P01949|HBA_ERIEU Hemoglobin subunit alpha OS=Erinaceus europaeus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 174.9 0.1 7.1e-53 3.5e-50 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 174.9 bits; conditional E-value: 7.1e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ +k +vk+ W+k + + +e+G+++L r+f+++P+t+++F++F dL+ +sa+vk Hgkkv+dAl+ a+++ld +++++l++L sp|P01949|HBA_ERIEU 1 VLSATDKANVKTFWGKLGGHGGEYGGEALDRMFQAHPTTKTYFPHF-DLN-----PGSAQVKGHGKKVADALTTAVNNLD-DVPGALSAL 83 69********************************************.999.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++la ++p++ft++v+a+l+K+la+va++l+skY+ sp|P01949|HBA_ERIEU 84 SDLHAHKLRVDPVNFKLLSHCLLVTLALHHPADFTPAVHASLDKFLATVATVLTSKYR 141 *********************************************************7 PP >> sp|P01979|HBA_ORNAN Hemoglobin subunit alpha OS=Ornithorhynchus anatinus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 174.7 1.4 8.6e-53 4.2e-50 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 174.7 bits; conditional E-value: 8.6e-53 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L++aek++v+a+W+k + ee+Ga++L+rlf+++P+t+++F +F dLs ++sa++k+Hgkkv+dAls a ++d +++++l++Ls sp|P01979|HBA_ORNAN 2 LTDAEKKEVTALWGKAAGHGEEYGAEALERLFQAFPTTKTYFSHF-DLS-----HGSAQIKAHGKKVADALSTAAGHFD-DMDSALSALS 84 99*******************************************.***.....************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +lHa+kl+vdp +fkll++++++vla + p+eft++++aa++K+l+ va++l+skY+ sp|P01979|HBA_ORNAN 85 DLHAHKLRVDPVNFKLLAHCILVVLARHCPGEFTPSAHAAMDKFLSKVATVLTSKYR 141 ********************************************************7 PP >> sp|P18977|HBA_PROLO Hemoglobin subunit alpha OS=Procyon lotor GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 174.6 0.1 8.8e-53 4.3e-50 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 174.6 bits; conditional E-value: 8.8e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k ++ka W k++ +++e+G+++L+r f s+P+t+++F++F dLs +sa+vk+Hgkkv+dAl+ a+ +ld +l+++l++L sp|P18977|HBA_PROLO 1 VLSPADKANIKATWDKIGGHAGEYGGEALERTFASFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVADALTLAVGHLD-DLPGALSAL 83 69********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la ++p+eft++v+a+l+K++ +v+++l+skY+ sp|P18977|HBA_PROLO 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHHPAEFTPAVHASLDKFFTSVSTVLTSKYR 141 *********************************************************7 PP >> sp|P01973|HBA_LAMGL Hemoglobin subunit alpha OS=Lama glama GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 174.6 0.6 8.8e-53 4.3e-50 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 174.6 bits; conditional E-value: 8.8e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs ++k ++k++++k++ +++++Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl++a +ld +l+++l++L sp|P01973|HBA_LAMGL 1 VLSSKDKANIKTAFGKIGGHAADYGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTKAADHLD-DLPSALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l++++aa++p++ft++v+a+l+K+la v+++l+skY+ sp|P01973|HBA_LAMGL 84 SDLHAHKLRVDPVNFKLLSHCLLVTVAAHHPGDFTPAVDASLDKFLANVSTVLTSKYR 141 *********************************************************7 PP >> sp|P67815|HBA_LAMGU Hemoglobin subunit alpha OS=Lama guanicoe GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 174.6 0.9 9.4e-53 4.6e-50 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 174.6 bits; conditional E-value: 9.4e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs ++k ++k++++k++ +++++Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl++a +ld +l+++l++L sp|P67815|HBA_LAMGU 1 VLSSKDKANIKTAFGKIGGHAADYGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTKAADHLD-DLPSALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l++++aa++p++ft++v+a+l+K+la v+++l+skY+ sp|P67815|HBA_LAMGU 84 SDLHAHKLRVDPVNFKLLSHCLLVTVAAHHPGDFTPAVHASLDKFLANVSTVLTSKYR 141 *********************************************************7 PP >> sp|P67816|HBA_LAMPA Hemoglobin subunit alpha OS=Lama guanicoe pacos GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 174.6 0.9 9.4e-53 4.6e-50 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 174.6 bits; conditional E-value: 9.4e-53 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs ++k ++k++++k++ +++++Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl++a +ld +l+++l++L sp|P67816|HBA_LAMPA 1 VLSSKDKANIKTAFGKIGGHAADYGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTKAADHLD-DLPSALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l++++aa++p++ft++v+a+l+K+la v+++l+skY+ sp|P67816|HBA_LAMPA 84 SDLHAHKLRVDPVNFKLLSHCLLVTVAAHHPGDFTPAVHASLDKFLANVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02108|HBB_POTTR Hemoglobin subunit beta OS=Potorous tridactylus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 174.2 0.1 1.2e-52 5.8e-50 1 149 [] 1 146 [] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 174.2 bits; conditional E-value: 1.2e-52 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+Ls +ek ++++W+k+ d+e++G+++L rl+ ++P+t +fF++F+dLs + ++ ++a+v +Hg kvl ++da+++ld +l++++++ sp|P02108|HBB_POTTR 1 VHLSSEEKGLITSLWGKI--DIEQTGGEALGRLLIVYPWTSRFFDHFGDLSSAKAVLGNAKVLAHGAKVLVSFGDAIKNLD-NLKGTFAK 87 69****************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vlv la++++k+ft d+q a +Kl+a va++la+kY+ sp|P02108|HBB_POTTR 88 LSELHCDKLHVDPENFKLLGNVLVICLAEHFGKDFTIDAQVAWQKLVAGVANALAHKYH 146 **********************************************************7 PP >> sp|P83123|HBB_CHENI Hemoglobin subunit beta OS=Chelonoidis nigra GN=HBB PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 174.2 0.4 1.2e-52 5.8e-50 2 149 .] 3 147 .] 2 147 .] 0.98 Alignments for each domain: == domain 1 score: 174.2 bits; conditional E-value: 1.2e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++++Wakv +vee+G+++L rl+ ++P+tq+fF +F++Ls + ++ +a+v +Hgkkvl+ ++da+++ld ++++++++L sp|P83123|HBB_CHENI 3 HWTPEEKQYITSLWAKV--NVEEVGGEALARLLIVYPWTQRFFSSFGNLSSASAILHNAKVLAHGKKVLTSFGDAVKNLD-NIKKTFAQL 89 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++fkll+++l+ vla+r+pkeft++ qaa Kl++ va++la Y+ sp|P83123|HBB_CHENI 90 SELHCEKLHVDPENFKLLGNILIIVLATRFPKEFTPASQAAWTKLVNAVAHALALGYH 147 ******************************************************9996 PP >> sp|P02109|HBB_DIDVI Hemoglobin subunit beta-M OS=Didelphis virginiana GN=HBB PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 174.2 0.1 1.2e-52 6e-50 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 174.2 bits; conditional E-value: 1.2e-52 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+L+ +ek+ ++++W+kv +v+++G+++L r+++++P+t +fF +F+dLs + +++++ +v++Hg kvl+ +++a+++ld +l++++++ sp|P02109|HBB_DIDVI 2 VHLTSEEKNCITTIWSKV--QVDQTGGEALGRMLVVYPWTTRFFGSFGDLSSPGAVMSNSKVQAHGAKVLTSFGEAVKHLD-NLKGTYAK 88 69****************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fk+l++++v la++++k+ft++ q a +Kl+a va++la+kY+ sp|P02109|HBB_DIDVI 89 LSELHCDKLHVDPENFKMLGNIIVICLAEHFGKDFTPECQVAWQKLVAGVAHALAHKYH 147 **********************************************************7 PP >> sp|P02122|HBB_AQUCH Hemoglobin subunit beta OS=Aquila chrysaetos GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 174.2 0.1 1.2e-52 6e-50 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 174.2 bits; conditional E-value: 1.2e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ +++a+++ld ++++++++L sp|P02122|HBB_AQUCH 2 HWTAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAIIGNPMVRAHGKKVLTSFGEAVKNLD-NIKNTFAQL 88 6799*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vlaa++ k+f++d qaa +Kl+ va++la kY+ sp|P02122|HBB_AQUCH 89 SELHCDKLHVDPENFRLLGDILIIVLAAHFTKDFSPDCQAAWQKLVRAVAHALARKYH 146 *********************************************************7 PP >> sp|P01977|HBA1_TACAC Hemoglobin subunit alpha-1 OS=Tachyglossus aculeatus aculeatus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 173.9 2.2 1.5e-52 7.3e-50 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 173.9 bits; conditional E-value: 1.5e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vL++aek++v+++W+k ++ee+Ga++L+rlf+s+P+t+++F + dLs k+sa+vk+Hgk+v+dAl+ a +++ +++++l++ sp|P01977|HBA1_TACAC 1 VLTDAEKKEVTSLWGKASGHAEEYGAEALERLFLSFPTTKTYFSHM-DLS-----KGSAQVKAHGKRVADALTTAAGHFN-DMDSALSA 82 69*******************************************9.9**.....***********************98.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fkll+++ ++vla ++p+eft++++aa++K+l+ va++l+skY+ sp|P01977|HBA1_TACAC 83 LSDLHAHKLRVDPVNFKLLAHCFLVVLARHHPAEFTPSAHAAMDKFLSRVATVLTSKYR 141 **********************************************************7 PP >> sp|P07425|HBA_LAMVI Hemoglobin subunit alpha OS=Lama vicugna GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 173.9 0.9 1.5e-52 7.4e-50 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 173.9 bits; conditional E-value: 1.5e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs ++k +vk++++k++ +++++Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl++a +ld +l+++l++L sp|P07425|HBA_LAMVI 1 VLSSKDKANVKTAFGKIGGHAADYGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTKAADHLD-DLPSALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l++++aa++p++ft++v+a+l+K+l v+++l+skY+ sp|P07425|HBA_LAMVI 84 SDLHAHKLRVDPVNFKLLSHCLLVTVAAHHPGDFTPAVHASLDKFLTNVSTVLTSKYR 141 *********************************************************7 PP >> sp|P01978|HBA2_TACAC Hemoglobin subunit alpha-2 OS=Tachyglossus aculeatus aculeatus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 173.6 1.2 1.8e-52 9e-50 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 173.6 bits; conditional E-value: 1.8e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vL++ae+++v+++W+k ++e++Ga++L+rlf+s+P+t+++F + dLs k+sa+v++Hgkkv+dAl+ a+ +++ +++++l+d sp|P01978|HBA2_TACAC 1 VLTDAERKEVTSLWGKASGHAEDYGAEALERLFLSFPTTKTYFSHM-DLS-----KGSAHVRAHGKKVADALTTAVGHFN-DMDGALSD 82 699******************************************9.9**.....***********************98.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fkll+++ ++vla ++p+eft++++aa++K+l+ va++l+skY+ sp|P01978|HBA2_TACAC 83 LSDLHAHKLRVDPVNFKLLAHCFLVVLARHHPEEFTPSAHAAMDKFLSRVATVLTSKYR 141 **********************************************************7 PP >> sp|P04444|HBBZ_MOUSE Hemoglobin subunit beta-H1 OS=Mus musculus GN=Hbb-bh1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 173.5 0.2 2e-52 9.6e-50 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 173.5 bits; conditional E-value: 2e-52 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 v+ +++ek +++++W kv d e++G++ L rl+ ++P+tq+fF+kF++Ls + ++++++ +++Hgkkvl+ l+ +++++d +l+ +++ sp|P04444|HBBZ_MOUSE 2 VHFTAEEKAAITSIWDKV--DLEKVGGETLGRLLIVYPWTQRFFDKFGNLSSALAIMGNPRIRAHGKKVLTSLGLGVKNMD-NLKETFA 87 5789**************..*************************************************************.******* PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +LselH++kl+vdp++fkll+++lv vl ++++keft++vqaa +Kl+ va++l++kY+ sp|P04444|HBBZ_MOUSE 88 HLSELHCDKLHVDPENFKLLGNMLVIVLSTHFAKEFTPEVQAAWQKLVIGVANALSHKYH 147 ***********************************************************7 PP >> sp|P22743|HBB2_NAJNA Hemoglobin subunit beta-2 OS=Naja naja GN=HBB2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 173.3 0.4 2.2e-52 1.1e-49 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 173.3 bits; conditional E-value: 2.2e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + s++ek+ ++++Wakv dv e+Ga L ++++ +P+tq+fF +F++Ls + +l ++++v++Hgkkvl+ +++al++ld +++ ++++ sp|P22743|HBB2_NAJNA 2 HWSAEEKQLITSLWAKV--DVPEVGAATLGKMMVMYPWTQRFFAHFGNLSGPSALCGNPQVRAHGKKVLTSFGEALKHLD-NVKETFAK 87 779**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH +kl+vdp++fkll++vl+ vla +++keft++ +a+++Kl+++va++la +Y+ sp|P22743|HBB2_NAJNA 88 LSELHFDKLHVDPENFKLLGNVLIIVLAGHHGKEFTPSTHASFQKLVNVVAHALARRYH 146 **********************************************************7 PP >> sp|P01954|HBA_ELEMA Hemoglobin subunit alpha OS=Elephas maximus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 173.2 0.5 2.5e-52 1.2e-49 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 173.2 bits; conditional E-value: 2.5e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++kt+vka W+kv+ ++ ++ a++L+r+f s+P+t+++F++F dLs ++s +vk Hgkkv +Al++a+ +ld +l+++l++L sp|P01954|HBA_ELEMA 1 VLSDKDKTNVKATWSKVGDHASDYVAEALERMFFSFPTTKTYFPHF-DLS-----HGSGQVKGHGKKVGEALTQAVGHLD-DLPSALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++l ++ p+eft++v+a+l+K+l+ v+++l+skY+ sp|P01954|HBA_ELEMA 84 SDLHAHKLRVDPVNFKLLSHCLLVTLSSHQPTEFTPEVHASLDKFLSNVSTVLTSKYR 141 *********************************************************7 PP >> sp|P13274|HBB_CHRPI Hemoglobin subunit beta OS=Chrysemys picta bellii GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 173.1 1.2 2.6e-52 1.3e-49 2 149 .] 2 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 173.1 bits; conditional E-value: 2.6e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +++ek+ ++++W+kv +vee G ++L rl+ ++P+tq+fF F++Ls ++++ +++v++Hgkkvl+ +++a+++ld ++++++++L sp|P13274|HBB_CHRPI 2 HWTADEKQLITSLWGKV--NVEECGSEALARLLIVYPWTQRFFSTFGNLSNAEAILHNPHVHAHGKKVLTSFGEAVKNLD-HIKQTFATL 88 67899************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lH++kl+vdp++fkll++vl+ vla+++ keft++ qaa +Kl++ va++la Y+ sp|P13274|HBB_CHRPI 89 SKLHCEKLHVDPENFKLLGNVLIIVLASHFTKEFTPACQAAWQKLVSAVAHALALGYH 146 ******************************************************9996 PP >> sp|P29626|HBBY_MESAU Hemoglobin subunit beta-Y OS=Mesocricetus auratus GN=HBBY PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 172.7 0.2 3.6e-52 1.7e-49 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 172.7 bits; conditional E-value: 3.6e-52 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 v+ +++ek +++++W kv d e+ G++ L rl+ ++P+tq+fFekF++Ls ++++++++ +++Hgkkvl+ l+ a++++d +l+ +++ sp|P29626|HBBY_MESAU 2 VHFTAEEKAAITSIWDKV--DLEKAGGETLGRLLIVYPWTQRFFEKFGNLSPPQAIMGNPRIRAHGKKVLTSLGLAVQNMD-NLKETFA 87 5789**************..*************************************************************.******* PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +LselH++kl+vdp++fkll+++lv vl ++l+kefta+vqaa +Kl+a va++l+ kY+ sp|P29626|HBBY_MESAU 88 HLSELHCDKLHVDPENFKLLGNMLVIVLSSHLGKEFTAEVQAAWQKLVAAVANALSLKYH 147 ***********************************************************7 PP >> sp|P56285|HBG_ALOSE Hemoglobin subunit gamma OS=Alouatta seniculus GN=HBG PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 172.6 0.0 3.6e-52 1.8e-49 3 149 .] 4 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 172.6 bits; conditional E-value: 3.6e-52 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++++k +++++W+kv +ve+ G++ L rl++++P+tq+fF++F+ Ls + +++++++vk+Hg+kvl+ l++a+++ld +l++++ +Ls sp|P56285|HBG_ALOSE 4 FTAEDKAAITSLWGKV--NVEDAGGETLGRLLVVYPWTQRFFDSFGSLSSPSAIMGNPKVKAHGVKVLTSLGEAIKNLD-DLKGTFGSLS 90 6899************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+l ++vlv+vla ++keft++vqa+ +K++a va +las+Y+ sp|P56285|HBG_ALOSE 91 ELHCDKLHVDPENFRLPGNVLVTVLAILHGKEFTPEVQASWQKMVAGVASALASRYH 147 ********************************************************7 PP >> sp|Q45XI6|HBD_PROCA Hemoglobin subunit deltaH OS=Procavia capensis PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 172.6 0.0 3.7e-52 1.8e-49 2 149 .] 3 147 .] 2 147 .] 0.98 Alignments for each domain: == domain 1 score: 172.6 bits; conditional E-value: 3.7e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++ ek +v ++W+kv d + G ++L rl++ +P+t++fFe+F+dLst+d++ k++ v++Hg+kvl ++++l++ld +l++++++L sp|Q45XI6|HBD_PROCA 3 RLTDSEKAEVVSLWSKV--DEKIIGSEALGRLLVIYPWTRRFFEHFGDLSTADAILKNPRVQAHGEKVLSSFGEGLNHLD-NLRGTFAQL 89 699**************..88899********************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH+++l+vdp++f+ll+++lv+vla +++keft +vqaa +K++a +a++la+kY+ sp|Q45XI6|HBD_PROCA 90 SELHCDELHVDPENFRLLGNILVVVLARHYGKEFTLEVQAACQKFVAGMANALAHKYH 147 *********************************************************7 PP >> sp|Q98905|HBB_CHECB Hemoglobin subunit beta OS=Chelonoidis carbonaria GN=HBB PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 172.5 0.5 3.9e-52 1.9e-49 2 149 .] 3 147 .] 2 147 .] 0.98 Alignments for each domain: == domain 1 score: 172.5 bits; conditional E-value: 3.9e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s +ek+ ++++Wakv +vee+G+++L rl+ ++P+tq+fF +F++Ls ++++ +a+v +Hgkkvl+ +++a+++ld ++++++++L sp|Q98905|HBB_CHECB 3 HWSCEEKQFITSLWAKV--NVEEVGGEALARLLIVYPWTQRFFSSFGNLSSPNAILHNAKVLAHGKKVLTSFGEAVKNLD-NIKKTFAQL 89 6789*************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++fkll+++l+ vla+++pkeft++ qaa Kl++ va++la Y+ sp|Q98905|HBB_CHECB 90 SELHCEKLHVDPENFKLLGNILIIVLATHFPKEFTPASQAAWTKLVNAVAHALALGYH 147 ******************************************************9996 PP >> sp|P01955|HBA_LOXAF Hemoglobin subunit alpha OS=Loxodonta africana GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 171.8 0.4 6.6e-52 3.2e-49 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 171.8 bits; conditional E-value: 6.6e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++kt+vka W+kv+ ++ ++ a++L+r+f s+P+t+++F++F dL ++s +vk+Hgkkv +Al++a+ +ld +l+++l++L sp|P01955|HBA_LOXAF 1 VLSDNDKTNVKATWSKVGDHASDYVAEALERMFFSFPTTKTYFPHF-DLG-----HGSGQVKAHGKKVGEALTQAVGHLD-DLPSALSAL 83 69********************************************.999.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++l ++ p+eft++v+a+l+K+l+ v+++l+skY+ sp|P01955|HBA_LOXAF 84 SDLHAHKLRVDPVNFKLLSHCLLVTLSSHQPTEFTPEVHASLDKFLSNVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02080|HBBN_AMMLE Hemoglobin subunit beta-C(NA) OS=Ammotragus lervia PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 171.5 0.4 7.9e-52 3.9e-49 7 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 171.5 bits; conditional E-value: 7.9e-52 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 +k ++ W+kv +v+++Ga++L rl++++P+t++fF++F++Ls +++++ +a+vk+Hgkkvl+ +s++l++l+ +l++++++Ls+lH sp|P02080|HBBN_AMMLE 2 BKALITGFWSKV--KVBZVGAZALGRLLVVYPWTZRFFZHFGBLSSABAVMBBAKVKAHGKKVLBSFSBGLKHLB-BLKGAFASLSZLH 87 68999*******..9***********************************************************9.************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 ++kl+v+p++f+ll++vlv+vla +++k+f ++ +a ++K++a va +la++Y+ sp|P02080|HBBN_AMMLE 88 CBKLHVBPZBFRLLGBVLVVVLARHFGKZFBPZLZAZFZKVVAGVASALAHRYH 141 *****************************************************7 PP >> sp|B3EWD3|HBA_PERCR Hemoglobin subunit alpha OS=Peromyscus crinitus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 171.5 1.4 8.1e-52 4e-49 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 171.5 bits; conditional E-value: 8.1e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k +vkavW+k + + +e+Ga++L r+f s+P+t+++ +F d+s ++sa+vk Hgkkv+dAl+ a +ld +l+++l++L sp|B3EWD3|HBA_PERCR 1 VLSAEDKANVKAVWSKLGGHGAEYGAEALGRMFESHPTTKTYPFHF-DVS-----HGSAQVKGHGKKVADALATAASHLD-DLPGALSAL 83 69****************************************99**.888.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p+eft++++a+l+K+la+v+++l+skY+ sp|B3EWD3|HBA_PERCR 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHHPAEFTPAAHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P01975|HBA_MACGI Hemoglobin subunit alpha OS=Macropus giganteus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 171.5 0.6 8.2e-52 4e-49 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 171.5 bits; conditional E-value: 8.2e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k +vka+W+kv+ +++e+ a+ L+r f s+P+t+++F++F dLs ++sa++++Hgkk++dAl++a+ ++d +l+++l++L sp|P01975|HBA_MACGI 1 VLSAADKGHVKAIWGKVGGHAGEYAAEGLERTFHSFPTTKTYFPHF-DLS-----HGSAQIQAHGKKIADALGQAVEHID-DLPGTLSKL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++ aa+l+ ft++v+a+l+K+la v+++l+skY+ sp|P01975|HBA_MACGI 84 SDLHAHKLRVDPVNFKLLSHCLLVTFAAHLGDAFTPEVHASLDKFLAAVSTVLTSKYR 141 *********************************************************7 PP >> sp|P86391|HBB2_AMBCR Hemoglobin subunit beta-2 OS=Amblyrhynchus cristatus GN=HBB2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 171.4 0.0 8.7e-52 4.2e-49 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 171.4 bits; conditional E-value: 8.7e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +++ek+ ++ +W+kv dv++ G++ L +f+ +P+tq+ F +F++Ls + ++ ++++vk+Hgkkvl+A++da+++ld +++ ++++ sp|P86391|HBB2_AMBCR 2 HWTAEEKQLITCLWGKV--DVATIGGESLAGMFVMYPWTQRLFSEFGNLSSPTAICGNPKVKAHGKKVLTAFGDAIRNLD-NIKDTFAK 87 6799*************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++fkll++vl+ vla +++k+ft++ +aa++Kl+++va++la +Y+ sp|P86391|HBB2_AMBCR 88 LSELHCDKLHVDPENFKLLGKVLLIVLAGHYGKDFTPACHAAYQKLVNVVAHALARRYH 146 **********************************************************7 PP >> sp|B3EWD1|HBA_SCICA Hemoglobin subunit alpha OS=Sciurus carolinensis PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 171.4 0.3 9e-52 4.4e-49 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 171.4 bits; conditional E-value: 9e-52 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka W k + + + G+++L r+f+s+P+t+++F +F dLs +s ++k+Hgkkv+dAl++a +ld +l+++l++L sp|B3EWD1|HBA_SCICA 1 VLSAADKTNVKASWEKLGGHPGAFGGEALDRMFLSFPTTKTYFHHF-DLS-----PGSSNLKTHGKKVADALANAAGHLD-DLPGALSTL 83 69********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p++ft++v+a+l+K+la+v+++l+skY+ sp|B3EWD1|HBA_SCICA 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHMPADFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P18987|HBB1_IGUIG Hemoglobin subunit beta-1 OS=Iguana iguana GN=HBB1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 171.2 0.2 1e-51 5e-49 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 171.2 bits; conditional E-value: 1e-51 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +++ek+ +++vW+k+ dv++ G++ L l++++P+tq+fF+ F++Ls ++++ ++a+vk+Hgkkvl+ ++da+++ld +++ ++++ sp|P18987|HBB1_IGUIG 2 HWTAEEKQLITQVWGKI--DVAQIGGETLACLLVVYPWTQRFFPDFGNLSNAAAICGNAKVKAHGKKVLTSFGDAVKNLD-NIKDTFAK 87 6799*************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp +f+ll++v+++ laa+++k+ft++ +aa++Kl va++la +Y+ sp|P18987|HBB1_IGUIG 88 LSELHCDKLHVDPVNFRLLGNVMITRLAAHFGKDFTPACHAAFQKLTGAVAHALARRYH 146 **********************************************************7 PP >> sp|P18973|HBA_CROCR Hemoglobin subunit alpha OS=Crocuta crocuta GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 171.1 0.6 1.1e-51 5.2e-49 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 171.1 bits; conditional E-value: 1.1e-51 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs a+k ++ka W k++ + +e+Ga++L+r f+ +P+t+++F++F dLs ++sa+vk+Hgkkv+dAl+ a a+ld +l+++l++L sp|P18973|HBA_CROCR 1 VLSSADKANIKATWDKIGGHGGEYGAEALERTFLCFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVADALALAAAHLD-DLPSALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++laa++p+eft++v++ l+K+l++v+++l+skY+ sp|P18973|HBA_CROCR 84 SDLHAYKLRVDPVNFKLLSHCLLVTLAAHHPAEFTPAVHSDLDKFLSSVSTVLTSKYR 141 *********************************************************7 PP >> sp|P10061|HBB2_SPHPU Hemoglobin subunit beta-2 OS=Sphenodon punctatus GN=HBB2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 171.0 0.1 1.2e-51 5.6e-49 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 171.0 bits; conditional E-value: 1.2e-51 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +++ek+ v+++W+kv +v+e G+++L rl+ ++P+tq+fF +F++Ls + ++ +++ vk+Hgkkv + +++a+++ld +++a++++ sp|P10061|HBB2_SPHPU 2 HWTAEEKQLVTSLWTKV--NVDECGGEALGRLLIVYPWTQRFFSSFGNLSSSTAICGNPRVKAHGKKVFTSFGEAVKNLD-NIKATYAK 87 6799*************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll+++ + vlaa+++k+ft++ qaa +Kl+ +va++la Y+ sp|P10061|HBB2_SPHPU 88 LSELHCEKLHVDPQNFNLLGDIFIIVLAAHFGKDFTPACQAAWQKLVRVVAHALAYHYH 146 *******************************************************9997 PP >> sp|P06642|HBE2_BOVIN Hemoglobin subunit epsilon-2 OS=Bos taurus GN=HBE2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 170.9 0.2 1.3e-51 6.2e-49 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 170.9 bits; conditional E-value: 1.3e-51 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + + +e +v ++Wakv +ve +G++ L rl+ + P+tq+fF++F++L e +++++++vk +g+kvl+ +++a++++d +l+++++d sp|P06642|HBE2_BOVIN 3 HFTTEENVAVASLWAKV--NVEVVGGESLARLLIVCPWTQRFFDSFGNLYSESAIMGNPKVKVYGRKVLNSFGNAIKHMD-DLKGTFAD 88 78999************..9************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp++f+ll+++++ vla++++keft+++qaa +Kl + va++l++kY+ sp|P06642|HBE2_BOVIN 89 LSELHCDKLHVDPENFRLLGNMILIVLATHFSKEFTPQMQAAWQKLTNAVANALTHKYH 147 **********************************************************7 PP >> sp|P04443|HBB0_MOUSE Hemoglobin subunit beta-H0 OS=Mus musculus GN=Hbb-bh0 PE=2 SV=5 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 170.8 0.4 1.3e-51 6.4e-49 1 149 [] 2 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 170.8 bits; conditional E-value: 1.3e-51 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 v+ +++ek +++++W kv d e++G++ L rl+ ++P+tq+fF+kF++Ls ++++++++ +k+Hgkkvl+ l+ a++++d +l+ +++ sp|P04443|HBB0_MOUSE 2 VHFTAEEKAAITSIWDKV--DLEKVGGETLGRLLIVYPWTQRFFDKFGNLSSAQAIMGNPRIKAHGKKVLTSLGLAVKNMD-NLKETFA 87 5789**************..*************************************************************.******* PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +LselH++kl+ dp++fkll+++lv vl + ++kefta++qaa +Kl+ va++l++kY+ sp|P04443|HBB0_MOUSE 88 HLSELHCDKLHADPENFKLLGNMLVIVLSSYFGKEFTAEAQAAWQKLVVGVATALSHKYH 147 ***********************************************************7 PP >> sp|Q45XH6|HBG_TRIMA Hemoglobin subunit gamma OS=Trichechus manatus GN=HBG PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 170.8 0.1 1.4e-51 6.7e-49 3 149 .] 4 147 .] 2 147 .] 0.98 Alignments for each domain: == domain 1 score: 170.8 bits; conditional E-value: 1.4e-51 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++ek +++ +W+k+ +vee G+ +L rl+ ++P+tq+fF++F++Ls + +++++++vk+Hgkkvl+ ++da+++ d +l++++++Ls sp|Q45XH6|HBG_TRIMA 4 FTAEEKAAITRLWGKM--NVEEAGGKALGRLLIVYPWTQRFFDNFGNLSSASAIMGNPKVKAHGKKVLNSFGDAVKNPD-NLKGTFAKLS 90 689*************..***********************************************************77.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl vd ++f+ll++vlv vla++++keft++vqaa +K+ va ++a kY+ sp|Q45XH6|HBG_TRIMA 91 ELHCDKLLVDSENFRLLGNVLVIVLANHFGKEFTPQVQAAWQKMATGVASAVARKYH 147 ********************************************************7 PP >> sp|P83133|HBB_ALDEL Hemoglobin A/D subunit beta OS=Aldabrachelys elephantina PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 170.7 0.6 1.5e-51 7.2e-49 2 149 .] 2 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 170.7 bits; conditional E-value: 1.5e-51 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + + +ek+ ++++Wakv +v+e+G+++L rl+ ++P+tq+fF +F++Ls ++++ +a+v +Hg+kvl+ +++a+++ld ++++++++L sp|P83133|HBB_ALDEL 2 HWTSEEKQYITSLWAKV--NVGEVGGEALARLLIVYPWTQRFFASFGNLSSANAILHNAKVLAHGQKVLTSFGEAVKNLD-NIKKTFAQL 88 67899************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++fkll+++l+ vla+++pkeft++ qaa Kl++ va++la Y+ sp|P83133|HBB_ALDEL 89 SELHCEKLHVDPENFKLLGNILIIVLATHFPKEFTPASQAAWTKLVNAVAHALALGYH 146 ******************************************************9996 PP >> sp|P21198|GLB2_MORMR Globin-2 OS=Mordacia mordax PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 170.5 0.1 1.7e-51 8.3e-49 2 148 .. 11 150 .] 10 150 .] 0.98 Alignments for each domain: == domain 1 score: 170.5 bits; conditional E-value: 1.7e-51 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 +Ls+aek+k++a+W v+ ++e+ G+diLv++f+ tPa+q fF+kFk+L+t+d+lkks dv++H++++++A++da++++d ek+++kl sp|P21198|GLB2_MORMR 11 PLSDAEKNKIRAAWDIVYKNYEKNGVDILVKFFTGTPAAQAFFPKFKGLTTADALKKSSDVRWHAERIINAVNDAVKSMDdtEKMSMKL 99 79*****************************************************************************5599****** PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 ++Ls +Ha+++ vd +yfk+l+ +++d+ a + +a++eKl++++++ll+s+Y sp|P21198|GLB2_MORMR 100 QELSVKHAQSFYVDRQYFKVLAGIIADTTAPG---------DAGFEKLMSMICILLSSAY 150 *************************9998877.........*****************99 PP >> sp|P81043|HBA_MACEU Hemoglobin subunit alpha OS=Macropus eugenii GN=HBA PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 170.2 0.4 2e-51 9.8e-49 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 170.2 bits; conditional E-value: 2e-51 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k +vk +W+kv+ +++e+ a+ L+r f s+P+t+++F++F dLs ++sa++++Hgkk++dAl++a+ ++d +l+++l++L sp|P81043|HBA_MACEU 2 VLSAADKGHVKGIWGKVGGHAGEYAAEGLERTFHSFPTTKTYFPHF-DLS-----HGSAQIQAHGKKIADALGQAVEHID-DLPGTLSKL 84 8*********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++ aa+l+ ft++v+a+l+K+la v+++l+skY+ sp|P81043|HBA_MACEU 85 SDLHAHKLRVDPVNFKLLSHCLLVTFAAHLGDAFTPEVHASLDKFLAAVSTVLTSKYR 142 *********************************************************7 PP >> sp|P14525|HBA_BRATR Hemoglobin subunit alpha OS=Bradypus tridactylus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 170.1 0.2 2.1e-51 1e-48 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 170.1 bits; conditional E-value: 2.1e-51 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k +vka W+k++ +++e+G+++L+r f+s+P+t+++F++F dLs +sa+vk+Hgkkv dAl+ a+ +ld +l+++l+dL sp|P14525|HBA_BRATR 1 VLSAADKAHVKAFWTKIGGHAGEYGGEALERTFLSFPTTKTYFPHF-DLS-----PGSAQVKAHGKKVGDALTLAVGHLD-DLPGALSDL 83 69********************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++++++la ++p ft++v+a+l+K++ +v+++l+skY+ sp|P14525|HBA_BRATR 84 SDLHAHKLRVDPVNFKLLGHCVLVTLALHHPDAFTPAVHASLDKFITTVSTVLTSKYR 141 *********************************************************7 PP >> sp|P21197|GLB1_MORMR Globin-1 OS=Mordacia mordax PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 169.8 0.1 2.7e-51 1.3e-48 2 148 .. 11 150 .] 10 150 .] 0.98 Alignments for each domain: == domain 1 score: 169.8 bits; conditional E-value: 2.7e-51 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 +Ls+aek+k++a+W v+ d+e++G+diLv++f+ tPa+q fF+kFk+L+t+d+lk+s dv++H++++++A++da++++d ek+++kl sp|P21197|GLB1_MORMR 11 PLSDAEKNKIRAAWDLVYKDYEKTGVDILVKFFTGTPAAQAFFPKFKGLTTADDLKQSSDVRWHAERIINAVNDAVKSMDdtEKMSMKL 99 79*****************************************************************************5599****** PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 k+Ls +Ha+++ vd +yfk+l+ +++d+ a + +a++eKl++++++ll+s+Y sp|P21197|GLB1_MORMR 100 KELSIKHAQSFYVDRQYFKVLAGIIADTTAPG---------DAGFEKLMSMICILLSSAY 150 *************************9998877.........*****************99 PP >> sp|P15165|HBB_APUAP Hemoglobin subunit beta OS=Apus apus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 169.0 0.2 4.8e-51 2.3e-48 3 149 .] 3 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 169.0 bits; conditional E-value: 4.8e-51 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++ek+ ++ +W+kv +v++ Ga++L rl+ ++P+tq+fF +F++Ls + ++ +++ v++Hgkkvl+ +++a+++ld +++++++Ls sp|P15165|HBB_APUAP 3 WTAEEKQLITGLWGKV--NVADCGAEALARLLIVYPWTQRFFASFGNLSSATAVIGNPMVRAHGKKVLTSFGEAVKNLD-SIKSTFAQLS 89 589*************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+vdp++f+ll+++l+ vlaa+++k+ft+++q a Kl+ va++la kY+ sp|P15165|HBB_APUAP 90 ELHCDKLHVDPENFRLLGDILIIVLAAHFSKDFTPEAQQAWAKLVRAVAHALARKYH 146 ********************************************************7 PP >> sp|P18436|HBG_TARSY Hemoglobin subunit gamma OS=Tarsius syrichta GN=HBG PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 169.0 0.4 4.8e-51 2.4e-48 1 149 [] 2 148 .] 2 148 .] 0.98 Alignments for each domain: == domain 1 score: 169.0 bits; conditional E-value: 4.8e-51 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v+ +++ek ++++Wakv +vee+G+++L rl++++P+tq+fF++F++Ls + +++++++vk+Hgkkvl l++a+ ++d +l+ ++++ sp|P18436|HBG_TARSY 2 VHFTAEEKAIITSLWAKV--NVEETGGEALGRLLVVYPWTQRFFDNFGNLSSASAIMGNPKVKAHGKKVLSSLGEAVTHMD-DLKDAFAH 88 5789**************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkll.sevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls lH+++l+vdp++f++ ++ v vla+++++eft++vqaa +Kl++ va+++ +kY+ sp|P18436|HBG_TARSY 89 LSRLHCDELHVDPENFRVTpGKRAVIVLAHHFGREFTPQVQAAWKKLMSAVAIAMGHKYH 148 ******************85788999*********************************7 PP >> sp|P10059|HBA_SPHPU Hemoglobin subunit alpha-A OS=Sphenodon punctatus GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 168.9 1.2 5.2e-51 2.5e-48 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 168.9 bits; conditional E-value: 5.2e-51 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls+ +k +vka+W+kv ++ee+Ga+ L+r+f+++P t+++F++F dL+ ++sa+vk+Hgkkv++A+++a+++ld ++ ++l +Ls sp|P10059|HBA_SPHPU 2 LSASDKANVKAIWSKVCVHAEEYGAETLERMFTVYPSTKTYFPHF-DLT-----HGSAQVKAHGKKVVNAMGEAVNHLD-DMAGALLKLS 84 9********************************************.999.....************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +lHa+kl+vdp +fkll+++ ++vl ++p+ +t++v+a+l+K+l v +l++kY+ sp|P10059|HBA_SPHPU 85 DLHAQKLRVDPVNFKLLAQCFLVVLGVHHPAALTPEVHASLDKFLCAVGLVLTAKYR 141 ********************************************************7 PP >> sp|P41332|HBB_MICGA Hemoglobin subunit beta OS=Microcephalophis gracilis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 168.7 0.4 5.8e-51 2.8e-48 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 168.7 bits; conditional E-value: 5.8e-51 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++ +W+kv dv+e+G+ L +l++++P+tq+fF +F++Ls ++++ ++ vk+Hgkkvl+ +++a+++ld ++ ++++L sp|P41332|HBB_MICGA 2 HWSAEEKQLITGLWGKV--DVAEVGGATLGKLLVVFPWTQRFFAHFGNLSSANAIICNPVVKAHGKKVLTSFGEAIKHLD-SIKETFAKL 88 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+vdp++f+ll+++l+ vla +++keft++ +aa++Kl+ va+ la Y+ sp|P41332|HBB_MICGA 89 SELHCEKLHVDPENFRLLGNILIIVLAGHHGKEFTPSTHAAFQKLVRAVAHSLARVYH 146 ******************************************************9996 PP >> sp|P01946|HBA_RAT Hemoglobin subunit alpha-1/2 OS=Rattus norvegicus GN=Hba1 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 168.4 0.2 7.3e-51 3.6e-48 2 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 168.4 bits; conditional E-value: 7.3e-51 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 vLs+++kt++k+ W+k++ + +e+G+++L+r+f ++P+t+++F + d+s +sa+vk+Hgkkv+dAl++a +++ +l+++l++Ls+ sp|P01946|HBA_RAT 2 VLSADDKTNIKNCWGKIGGHGGEYGEEALQRMFAAFPTTKTYFSHI-DVS-----PGSAQVKAHGKKVADALAKAADHVE-DLPGALSTLSD 86 89*******************************************9.888.....9**********************98.9********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lHa+kl+vdp +fk+ls++l+++la ++p++ft++++a+l+K+la+v+++l+skY+ sp|P01946|HBA_RAT 87 LHAHKLRVDPVNFKFLSHCLLVTLACHHPGDFTPAMHASLDKFLASVSTVLTSKYR 142 *******************************************************7 PP >> sp|P19014|HBA_CRIGA Hemoglobin subunit alpha OS=Cricetomys gambianus GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 168.4 1.2 7.5e-51 3.6e-48 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 168.4 bits; conditional E-value: 7.5e-51 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k ++ka W k++ + +e+Ga++L+r+f s+P+t+++F++F d+s ++sa+vk Hgkkv+dAl++a +ld +l+++l++L sp|P19014|HBA_CRIGA 2 VLSADDKANIKATWEKIGGHGAEYGAEALERMFASFPTTKTYFPHF-DVS-----HGSAQVKSHGKKVADALANAAHHLD-DLPGALSAL 84 89********************************************.888.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++l+++la++l + +t++++a+l+K+la+v+++l+skY+ sp|P19014|HBA_CRIGA 85 SDLHAHKLRVDPVNFKLLGHCLLVTLATHLQAGLTPAAHASLDKFLASVSTVLTSKYR 142 *********************************************************7 PP >> sp|P21199|GLB3_MORMR Globin-3 OS=Mordacia mordax PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 167.6 0.6 1.3e-50 6.4e-48 2 148 .. 11 150 .] 10 150 .] 0.98 Alignments for each domain: == domain 1 score: 167.6 bits; conditional E-value: 1.3e-50 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 +L++a+ktk++a+W v+ ++e+ +diLv++f+ tPa+q fF+kFk+L+t+d+lkks dv++H++++++A++da++++d ek+++kl sp|P21199|GLB3_MORMR 11 PLTAADKTKILAAWDLVYKNYEKNSVDILVKFFTGTPAAQAFFPKFKGLTTADDLKKSSDVRWHAERIINAVNDAVKSMDdtEKMSMKL 99 79*****************************************************************************5599****** PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 k+Ls++H k+++vd kyfk+l+ v++d++a + +a++eKl++++++ll s+Y sp|P21199|GLB3_MORMR 100 KELSNKHVKNFNVDRKYFKVLAGVIADTVAPG---------DASFEKLMSIICILLNSAY 150 ******************************99.........*****************99 PP >> sp|P81024|HBAD_MELGA Hemoglobin subunit alpha-D OS=Meleagris gallopavo GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 167.6 0.3 1.3e-50 6.5e-48 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 167.6 bits; conditional E-value: 1.3e-50 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ ++++W k ++ ee Ga++L+r+f+++P+t+++F++F dLs +s++v+ Hgkkvl+Al++a++++d +l++++++L sp|P81024|HBAD_MELGA 2 LTAEDKKLIQQAWEKAASHQEEFGAEALTRMFTTYPQTKTYFPHF-DLS-----PGSDQVRGHGKKVLGALGNAVKNVD-NLSQAMSEL 83 99*******************************************.9**.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls+++ +vlaa+l+k++t++v+aa++K+l+ v+ +la+kY+ sp|P81024|HBAD_MELGA 84 SNLHAYNLRVDPVNFKLLSQCIQVVLAAHLGKDYTPEVHAAFDKFLSAVSAVLAEKYR 141 *********************************************************7 PP >> sp|Q9XSN2|HBA1_EQUGR Hemoglobin subunit alpha-1 OS=Equus grevyi GN=HBA1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 167.1 0.1 1.8e-50 8.9e-48 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 167.1 bits; conditional E-value: 1.8e-50 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs+a+kt+vka+W+kv+ +++e Ga++L+r+f+ +P+t+++F++F dLs ++sa+vk+Hgkkv dAl+ a+ +ld +l+++l++ sp|Q9XSN2|HBA1_EQUGR 2 VLSAADKTNVKAAWSKVGGNAGEFGAEALERMFLGFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALTLAVGHLD-DLPGALSN 83 8*********************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fk+ + + +la +lp++ft++v+a+l+K+l++v+++l+skY+ sp|Q9XSN2|HBA1_EQUGR 84 LSDLHAHKLRVDPVNFKVSPGAGLSTLAVHLPNDFTPAVHASLDKFLSTVSTVLTSKYR 142 **********************************************************7 PP >> sp|Q9DF25|HBAD_CHECB Hemoglobin subunit alpha-D OS=Chelonoidis carbonaria GN=HBAD PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 167.1 0.6 1.8e-50 9e-48 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 167.1 bits; conditional E-value: 1.8e-50 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L+e+ek+ +++vW kv + e+ Ga++L+r+f+++P t+++F++F dL+ + s+++++Hgkkv+ Al+da++++d +l+a+l++L sp|Q9DF25|HBAD_CHECB 2 LTEDEKQLIQHVWEKVLGHQEDFGAEALERMFTVYPSTKTYFPHF-DLH-----HDSEQIRHHGKKVVSALGDAVRHMD-NLSATLSEL 83 99*******************************************.999.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vl a+l++e+t++vq a++K+la v+ +la+kY+ sp|Q9DF25|HBAD_CHECB 84 SNLHAYNLRVDPVNFKLLSHCFQVVLGAHLGREYTPQVQVAYDKFLAAVSAVLAEKYR 141 *********************************************************7 PP >> sp|P01998|HBA_CRONI Hemoglobin subunit alpha OS=Crocodylus niloticus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 167.0 0.2 2e-50 9.8e-48 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 167.0 bits; conditional E-value: 2e-50 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs ++k +vkavW+kv + ee+Ga++L+r+f ++P+t+ +F++F dLs ++sa++++Hgkkv Al +a++++d +l+++l L sp|P01998|HBA_CRONI 1 VLSSDDKCNVKAVWSKVAGHLEEYGAEALERMFCAYPQTKIYFPHF-DLS-----HGSAQIRAHGKKVFAALHEAVNHID-DLPGALCRL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selHa++l+vdp +fk+l++++++v+a ++p+ +t++v+a+l+K+l v+ +l+skY+ sp|P01998|HBA_CRONI 84 SELHAHSLRVDPVNFKFLAQCVLVVVAIHHPGSLTPEVHASLDKFLCAVSSVLTSKYR 141 *********************************************************7 PP >> sp|P08849|HBAD_ACCGE Hemoglobin subunit alpha-D OS=Accipiter gentilis GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 165.9 0.3 4.2e-50 2e-47 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 165.9 bits; conditional E-value: 4.2e-50 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ ++a+W kv+ + e+ Ga++L+r+f ++P+t+++F++F dLs +s++v+ Hgkkv++Al++a++++d +l+++l++L sp|P08849|HBAD_ACCGE 2 LTAEDKKLIQAIWDKVQGHQEDFGAEALQRMFITYPTTKTYFPHF-DLS-----PGSDQVRSHGKKVVNALGNAVKSMD-NLSQALSEL 83 99*******************************************.9**.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vla +l+ke+t++v++a++K+l+ va +la+kY+ sp|P08849|HBAD_ACCGE 84 SNLHAYNLRVDPVNFKLLSQCFQVVLAVHLGKEYTPEVHSAFDKFLSAVAAVLAEKYR 141 *********************************************************7 PP >> sp|Q10732|HBA_CARCR Hemoglobin subunit alpha-A OS=Caretta caretta GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 165.9 1.1 4.3e-50 2.1e-47 2 149 .] 1 141 [] 1 141 [] 0.98 Alignments for each domain: == domain 1 score: 165.9 bits; conditional E-value: 4.3e-50 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs ++k +vk+vW+kv+ + e++Ga+ L r+f+++P+t+++F +F d++ ++s +++ Hgkkv+ Al+da++++d ++ ++l++L sp|Q10732|HBA_CARCR 1 VLSSGDKANVKSVWSKVQGHLEDYGAETLDRMFTVFPQTKTYFSHF-DVH-----HGSTQIRSHGKKVMLALGDAVNHID-DIATALSAL 83 69********************************************.666.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s++Ha+ l+vdp +fklls++l++v+a ++p+ ft+dv+ +l+K++ +v+++l+skY+ sp|Q10732|HBA_CARCR 84 SDKHAHILRVDPVNFKLLSHCLLVVVARHHPTLFTPDVHVSLDKFMGTVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02007|HBPI_CHICK Hemoglobin subunit pi OS=Gallus gallus PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 165.7 0.0 5e-50 2.4e-47 2 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 165.7 bits; conditional E-value: 5e-50 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 L++aek +v+++Wakv +++e G + L+rlf s+P+t+++F++F d+s ++s +++ Hg kvl+A+++a++++d +++++l++ sp|P02007|HBPI_CHICK 2 ALTQAEKAAVTTIWAKVATQIESIGLESLERLFASYPQTKTYFPHF-DVS-----QGSVQLRGHGSKVLNAIGEAVKNID-DIRGALAK 83 599*******************************************.888.....9***********************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa l+vdp +fklls+++++ +aar+p++ft++v+aa +K+l++++ +l++kY+ sp|P02007|HBPI_CHICK 84 LSELHAYILRVDPVNFKLLSHCILCSVAARYPSDFTPEVHAAWDKFLSSISSVLTEKYR 142 **********************************************************7 PP >> sp|P13787|HBAZ_HORSE Hemoglobin subunit zeta OS=Equus caballus GN=HBZ1 PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 165.7 0.3 5e-50 2.5e-47 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 165.7 bits; conditional E-value: 5e-50 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 L++ae+t v ++W+k+ +++ +G+++L+rlf s+P+t+++F++F dL+ ++s+++++Hg kv+ A++da++++d ++ ++l++ sp|P13787|HBAZ_HORSE 2 SLTKAERTMVVSIWGKISMQADAVGTEALQRLFSSYPQTKTYFPHF-DLH-----EGSPQLRAHGSKVAAAVGDAVKSID-NVAGALAK 83 599*******************************************.999.....9************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa l+vdp +fk+ls++l+++la+rlp++ftad++aa +K+l++v+ +l++kY+ sp|P13787|HBAZ_HORSE 84 LSELHAYILRVDPVNFKFLSHCLLVTLASRLPADFTADAHAAWDKFLSIVSSVLTEKYR 142 **********************************************************7 PP >> sp|B3EWD7|HBA_TAMHU Hemoglobin subunit alpha OS=Tamiasciurus hudsonicus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 165.7 0.3 5.2e-50 2.5e-47 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 165.7 bits; conditional E-value: 5.2e-50 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk++W k + + +e+Ga++L r+f+s+P+t+++ +F dLs ++sa+ + Hgkkv++Al+ a +ld +l+++l++L sp|B3EWD7|HBA_TAMHU 1 VLSAADKTNVKSAWDKLGGHGAEYGAEALGRMFLSFPTTKTYPFHF-DLS-----HGSAQPQGHGKKVAEALATAAGHLD-DLPGALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fklls++l+++laa++p+eft++v+a+l+K+la+v+++l+skY+ sp|B3EWD7|HBA_TAMHU 84 SDLHAHKLRVDPVNFKLLSHCLLVTLAAHMPAEFTPAVHASLDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P24291|HBA_ECHTE Hemoglobin subunit alpha OS=Echinops telfairi GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 165.3 0.0 6.6e-50 3.2e-47 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 165.3 bits; conditional E-value: 6.6e-50 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k +vkavW k + +v+++G+++L r f+s+P+t+++F++ dL+ +sad+ +Hgkkv+dAl+ a+ ++d +l+++l++L sp|P24291|HBA_ECHTE 1 VLSAADKANVKAVWEKAGGNVGKYGGEALDRTFLSFPTTKTYFPHM-DLT-----PGSADIMAHGKKVADALTLAVGHMD-DLPGALSKL 83 69********************************************.999.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fklls++l+++la +l+++ft++++a+l+K+l++v+++l+skY+ sp|P24291|HBA_ECHTE 84 SDLHAYKLRVDPVNFKLLSHCLLVTLACHLGGDFTPAAHASLDKFLSSVSTVLTSKYR 141 *********************************************************7 PP >> sp|P02076|HBB_OVIMU Hemoglobin subunit beta OS=Ovis orientalis musimon GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 165.3 0.7 6.6e-50 3.2e-47 3 149 .] 2 145 .] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 165.3 bits; conditional E-value: 6.6e-50 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ek +v+ W+kv +v+e+Ga++L rl++++P+tq+fFe+F+dLs +d+++++a+vk+Hgkkvl+ +s+++++ld +l++++++Ls sp|P02076|HBB_OVIMU 2 LTAEEKAAVTGFWGKV--KVDEVGAEALGRLLVVYPWTQRFFEHFGDLSSADAVMNNAKVKAHGKKVLBSFSNGMKHLD-DLKGTFAQLS 88 99**************..9***********************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elH++kl+v+p++f+ ++++eft+ qa ++K++a va++la++Y+ sp|P02076|HBB_OVIMU 89 ELHCDKLHVBPZBFRXXXXXXXXXXXXHHGSEFTPVLQAZFQKVVAGVANALAHRYH 145 ********************************************************7 PP >> sp|P83134|HBAD_ALDEL Hemoglobin D subunit alpha OS=Aldabrachelys elephantina PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 165.3 0.7 6.8e-50 3.3e-47 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 165.3 bits; conditional E-value: 6.8e-50 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L+e++k+ +++vW kv + e+ Ga++L+r+f ++P t+++F++F dL+ + s+++++Hgkkv++Al+da++++d +l+a+l++L sp|P83134|HBAD_ALDEL 2 LTEDDKQLIQHVWEKVLEHQEDFGAEALERMFIVYPSTKTYFPHF-DLH-----HDSEQIRHHGKKVVGALGDAVKHID-NLSATLSEL 83 99*******************************************.999.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vl a+l++e+t++vq a++K+la v+ +la+kY+ sp|P83134|HBAD_ALDEL 84 SNLHAYNLRVDPVNFKLLSHCFQVVLGAHLGREYTPQVQVAYDKFLAAVSAVLAEKYR 141 *********************************************************7 PP >> sp|P02001|HBAD_CHICK Hemoglobin subunit alpha-D OS=Gallus gallus GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 165.2 0.3 7e-50 3.4e-47 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 165.2 bits; conditional E-value: 7e-50 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ ++++W k ++ ee Ga++L+r+f+++P+t+++F++F dLs +s++v+ Hgkkvl+Al++a++++d +l++++++L sp|P02001|HBAD_CHICK 2 LTAEDKKLIQQAWEKAASHQEEFGAEALTRMFTTYPQTKTYFPHF-DLS-----PGSDQVRGHGKKVLGALGNAVKNVD-NLSQAMAEL 83 99*******************************************.9**.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls+++ +vla +++k++t++v+aa++K+l+ v+ +la+kY+ sp|P02001|HBAD_CHICK 84 SNLHAYNLRVDPVNFKLLSQCIQVVLAVHMGKDYTPEVHAAFDKFLSAVSAVLAEKYR 141 *********************************************************7 PP >> sp|P11751|HBA_MEGLY Hemoglobin subunit alpha OS=Megaderma lyra GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 165.2 0.5 7.1e-50 3.4e-47 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 165.2 bits; conditional E-value: 7.1e-50 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k +vka++ kv+ +++++Ga++L+r+f+s+P+t+++F++F dLs ++sa+vk+Hgkkv dAl +a+ +ld +l+++l++L sp|P11751|HBA_MEGLY 1 VLSAADKANVKAAFDKVGGQAGDYGAEALERMFLSFPTTKTYFPHF-DLS-----HGSAQVKAHGKKVGDALVNAVGHLD-DLPGALSAL 83 69********************************************.***.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fkl s+vl+++la + ++ ft++v+a+l+K+la+v ++l+skY+ sp|P11751|HBA_MEGLY 84 SDLHAYKLRVDPVNFKLASNVLLVTLAVHVAAGFTPAVHASLDKFLASVGTVLTSKYR 141 *********************************************************7 PP >> sp|P18993|HBB1_VARAL Hemoglobin subunit beta-1 OS=Varanus albigularis GN=HBB1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 164.8 0.1 9.4e-50 4.6e-47 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 164.8 bits; conditional E-value: 9.4e-50 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +++ek+ + ++W+k+ dv+ G++ L l++ +P+tq+ F +F++Ls + ++ +++ vk+Hgkkvl+ ++da+++ld +++ ++++ sp|P18993|HBB1_VARAL 2 HWTAEEKQLICSLWGKI--DVGLIGGETLAGLLVIYPWTQRQFSHFGNLSSPTAIAGNPRVKAHGKKVLTSFGDAIKNLD-NIKDTFAK 87 6799*************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vdp +fkll++vlv vla +++keft++ +aa++Kl+++v++ la +Y+ sp|P18993|HBB1_VARAL 88 LSELHCDKLHVDPTNFKLLGNVLVIVLADHHGKEFTPAHHAAYQKLVNVVSHSLARRYH 146 **********************************************************7 PP >> sp|P68059|HBAD_AEGMO Hemoglobin subunit alpha-D OS=Aegypius monachus GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 164.2 0.2 1.4e-49 7e-47 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 164.2 bits; conditional E-value: 1.4e-49 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ ++a W kv+ + e+ Ga++L+r+f ++P t+++F++F dLs +s++v+ Hgkkv++Al++a++++d +l+++l++L sp|P68059|HBAD_AEGMO 2 LTADDKKLIQATWDKVQGHQEDFGAEALQRMFITYPPTKTYFPHF-DLS-----PGSDQVRGHGKKVVNALGNAVKSMD-NLSQALSEL 83 89*******************************************.9**.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vla +l+ke+t++v+aa++K+l+ va +la+kY+ sp|P68059|HBAD_AEGMO 84 SNLHAYNLRVDPVNFKLLSQCFQVVLAVHLGKEYTPEVHAAFDKFLSAVAAVLAEKYR 141 *********************************************************7 PP >> sp|P68060|HBAD_TRIOC Hemoglobin subunit alpha-D OS=Trigonoceps occipitalis GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 164.2 0.2 1.4e-49 7e-47 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 164.2 bits; conditional E-value: 1.4e-49 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ ++a W kv+ + e+ Ga++L+r+f ++P t+++F++F dLs +s++v+ Hgkkv++Al++a++++d +l+++l++L sp|P68060|HBAD_TRIOC 2 LTADDKKLIQATWDKVQGHQEDFGAEALQRMFITYPPTKTYFPHF-DLS-----PGSDQVRGHGKKVVNALGNAVKSMD-NLSQALSEL 83 89*******************************************.9**.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vla +l+ke+t++v+aa++K+l+ va +la+kY+ sp|P68060|HBAD_TRIOC 84 SNLHAYNLRVDPVNFKLLSQCFQVVLAVHLGKEYTPEVHAAFDKFLSAVAAVLAEKYR 141 *********************************************************7 PP >> sp|P04242|HBAD_STRCA Hemoglobin subunit alpha-D OS=Struthio camelus GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 164.2 0.2 1.5e-49 7.1e-47 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 164.2 bits; conditional E-value: 1.5e-49 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ ++++W kv+++ e+ Ga++L+r+f ++P+t+++F++F dL+ +s++++ Hgkkv++Al++a+++ld +l+++l++L sp|P04242|HBAD_STRCA 2 LTADDKKLIQQIWEKVGSHLEDFGAEALERMFITYPQTKTYFPHF-DLH-----PGSEQIRGHGKKVANALGNAVKSLD-NLSQALSEL 83 89*******************************************.999.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vla +++k++t++v+aa++K+l va +la+kY+ sp|P04242|HBAD_STRCA 84 SNLHAYNLRVDPVNFKLLSQCFQVVLAVHMGKDYTPEVHAAYDKFLTAVAAVLAEKYR 141 *********************************************************7 PP >> sp|P02008|HBAZ_HUMAN Hemoglobin subunit zeta OS=Homo sapiens GN=HBZ PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 164.0 0.2 1.7e-49 8.1e-47 2 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 164.0 bits; conditional E-value: 1.7e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 L++ e+t + ++Wak+ +++++ G++ L+rlf+s+P+t+++F++F dL+ +sa++++Hg kv+ A++da++++d ++ ++l++ sp|P02008|HBAZ_HUMAN 2 SLTKTERTIIVSMWAKISTQADTIGTETLERLFLSHPQTKTYFPHF-DLH-----PGSAQLRAHGSKVVAAVGDAVKSID-DIGGALSK 83 5999******************************************.999.....9***********************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa l+vdp +fklls++l+++laar+p++fta+++aa +K+l++v+ +l++kY+ sp|P02008|HBAZ_HUMAN 84 LSELHAYILRVDPVNFKLLSHCLLVTLAARFPADFTAEAHAAWDKFLSVVSSVLTEKYR 142 **********************************************************7 PP >> sp|P04243|HBPI_CAIMO Hemoglobin subunit pi OS=Cairina moschata PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 164.0 0.0 1.7e-49 8.3e-47 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 164.0 bits; conditional E-value: 1.7e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 +L++aek +v ++W+kv ++++ Ga+ L+rlf s+P+t+++F++F dLs ++s +++ Hg kv++A+++a++++d +++++l++ sp|P04243|HBPI_CAIMO 2 TLTQAEKAAVITIWTKVATQADAIGAESLERLFSSYPQTKTYFPHF-DLS-----QGSTQLRGHGSKVMNAIGEAVKNID-DIRGALAK 83 699*******************************************.9**.....9***********************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa l+vdp +fkll +++++ +aar+p++ft++v+aa +K+l++v+ +l++kY+ sp|P04243|HBPI_CAIMO 84 LSELHAYILRVDPVNFKLLCHCILCSVAARYPSDFTPEVHAAWDKFLSSVSSVLTEKYR 142 **********************************************************7 PP >> sp|P13273|HBA_CHRPI Hemoglobin subunit alpha-A OS=Chrysemys picta bellii GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 163.8 1.3 1.9e-49 9.5e-47 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 163.8 bits; conditional E-value: 1.9e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vL +++k +vkavW kv a+vee+Ga+ L+r+f+++P+t+++F++F dL+ ++sa++++Hgkkvl+Al++a++++d +l ++l++L sp|P13273|HBA_CHRPI 1 VLNAGDKANVKAVWNKVAAHVEEYGAETLERMFTVYPQTKTYFPHF-DLH-----HGSAQIRTHGKKVLTALGEAVNHID-DLASALSKL 83 6899******************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+ Ha+ l+vdp +fk+l ++ ++v+a + p+ +t++v+ +l+K+l+ v ++l+skY+ sp|P13273|HBA_CHRPI 84 SDIHAQTLRVDPVNFKFLNHCFLVVVAIHQPSVLTPEVHVSLDKFLSAVGTVLTSKYR 141 *********************************************************7 PP >> sp|P83124|HBAD_CHENI Hemoglobin subunit alpha-D OS=Chelonoidis nigra GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 163.6 0.3 2.3e-49 1.1e-46 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 163.6 bits; conditional E-value: 2.3e-49 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L+e++k+ +++vW v + e+ Ga++L+r+f+++P t+++F++F dL+ ++s+++++Hgkkv++Al+da++++d +l+a+l++L sp|P83124|HBAD_CHENI 2 LTEDDKQLIQHVWETVLEHQEDFGAEALERMFTVYPSTKTYFPHF-DLH-----HGSEQIRHHGKKVVGALGDAVRHID-DLSATLSEL 83 99*******************************************.999.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vl a+l++e+t++vq a++K+la v+ +la+kY+ sp|P83124|HBAD_CHENI 84 SNLHAYNLRVDPVNFKLLSHCFQVVLGAHLGREYTPQVQVAYDKFLAAVSAVLAEKYR 141 *********************************************************7 PP >> sp|P06638|HBA5_XENLA Hemoglobin subunit alpha-5 OS=Xenopus laevis GN=hba5 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 163.6 1.2 2.3e-49 1.1e-46 3 149 .] 3 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 163.6 bits; conditional E-value: 2.3e-49 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 s aek ++ ++W+kv + +e Ga++L+rlf+s+P+t+++F +F dLs ++s+d++ Hg kv++A+++a ++d +++ +l++L sp|P06638|HBA5_XENLA 3 FSSAEKAAIASLWGKVSGHTDEIGAEALERLFLSYPQTKTYFSHF-DLS-----HGSKDLRSHGGKVVKAIGNAATHID-DIPHALSAL 84 699******************************************.***.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa klkvdp +fklls+++ ++la ++p+ef ad+qaa +K+la+v+ +l skY+ sp|P06638|HBA5_XENLA 85 SDLHAFKLKVDPGNFKLLSHAIQVTLAIHFPAEFNADAQAAWDKFLAVVSAVLVSKYR 142 *********************************************************7 PP >> sp|P02000|HBA_CAICR Hemoglobin subunit alpha OS=Caiman crocodilus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 163.4 0.2 2.5e-49 1.2e-46 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 163.4 bits; conditional E-value: 2.5e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLse++k++vka+W+kv + ee+Ga++L+r+f ++P+t+ +F++F d+s ++sa+++ Hgkkv Al da++++d +l ++l L sp|P02000|HBA_CAICR 1 VLSEEDKSHVKAIWGKVAGHLEEYGAEALERMFCAYPQTKIYFPHF-DMS-----HNSAQIRGHGKKVFAALHDAVNHID-DLAGALCRL 83 69********************************************.888.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa++l+vdp +fk+ls+++++v ++p +t++v+a+l+K+l v+ +l+skY+ sp|P02000|HBA_CAICR 84 SDLHAHNLRVDPVNFKFLSQCILVVFGVHHPCSLTPEVHASLDKFLCAVSAMLTSKYR 141 *********************************************************7 PP >> sp|P04241|HBAD_RHEAM Hemoglobin subunit alpha-D OS=Rhea americana GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 163.4 0.3 2.6e-49 1.3e-46 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 163.4 bits; conditional E-value: 2.6e-49 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ + ++W+kv + +e G+++L+r+f ++P+t+++F++F dL+ +s++v+ Hgkkv++Als+a+++ld +l+++l++L sp|P04241|HBAD_RHEAM 2 LTADDKKLISQIWTKVAEHGGEFGGEALERMFITYPQTKTYFPHF-DLH-----VGSEQVRGHGKKVVNALSNAVKNLD-NLSQALAEL 83 89*******************************************.999.....8************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vla +l+ke+t++v+aa++K+l+ va +la+kY+ sp|P04241|HBAD_RHEAM 84 SNLHAYNLRVDPVNFKLLSQCFQVVLAVHLGKEYTPEVHAAYDKFLSAVASVLAEKYR 141 *********************************************************7 PP >> sp|P01986|HBA_ANAPL Hemoglobin subunit alpha-A OS=Anas platyrhynchos GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 162.9 1.4 3.5e-49 1.7e-46 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 162.9 bits; conditional E-value: 3.5e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk v++k++ ++ee+Ga+ L+r+f ++P+t+++F++F dLs ++sa++k+Hgkkv+ Al +a++++d ++ ++l++L sp|P01986|HBA_ANAPL 2 VLSAADKTNVKGVFSKIGGHAEEYGAETLERMFIAYPQTKTYFPHF-DLS-----HGSAQIKAHGKKVAAALVEAVNHVD-DIAGALSKL 84 8*********************************************.***.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+l+++ ++v+a ++p+ +t++v+a+l+K++ v +l++kY+ sp|P01986|HBA_ANAPL 85 SDLHAQKLRVDPVNFKFLGHCFLVVVAIHHPAALTPEVHASLDKFMCAVGAVLTAKYR 142 *********************************************************7 PP >> sp|P01989|HBA_ANSAN Hemoglobin subunit alpha-A OS=Anser anser anser GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 162.8 1.0 3.8e-49 1.8e-46 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 162.8 bits; conditional E-value: 3.8e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk v++k++ ++ee+Ga+ L+r+f+++P+t+++F++F dL+ ++sa++k+Hgkkv+ Al +a++++d ++ ++l++L sp|P01989|HBA_ANSAN 2 VLSAADKTNVKGVFSKIGGHAEEYGAETLERMFTAYPQTKTYFPHF-DLQ-----HGSAQIKAHGKKVAAALVEAVNHID-DIAGALSKL 84 8*********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+l+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P01989|HBA_ANSAN 85 SDLHAQKLRVDPVNFKFLGHCFLVVVAIHHPSALTPEVHASLDKFLCAVGTVLTAKYR 142 *********************************************************7 PP >> sp|P08257|HBAD_GYPRU Hemoglobin subunit alpha-D/D' OS=Gyps rueppellii GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 162.8 0.2 4e-49 1.9e-46 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 162.8 bits; conditional E-value: 4e-49 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ +++ W kv+ + e+ Ga++L+r+f ++P+t+++F++F dLs +s++v+ Hgkkv++Al++a++++d +l+++l++L sp|P08257|HBAD_GYPRU 2 LTADDKKLIQTTWDKVQGHQEDFGAEALQRMFITYPQTKTYFPHF-DLS-----PGSDQVRGHGKKVVNALGNAVKSMD-NLSQALSEL 83 89*******************************************.9**.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vla +l+ke+t++v++a++K+l+ va +la+kY+ sp|P08257|HBAD_GYPRU 84 SNLHAYNLRVDPVNFKLLSQCFQVVLAVHLGKEYTPEVHSAFDKFLSAVAAVLAEKYR 141 *********************************************************7 PP >> sp|P01988|HBA_ANAPP Hemoglobin subunit alpha-A OS=Anas platyrhynchos platyrhynchos GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 162.8 1.3 4e-49 1.9e-46 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 162.8 bits; conditional E-value: 4e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk v++k++ ++ee+Ga+ L+r+f ++P+t+++F++F dLs ++sa++k+Hgkkv+ Al +a++++d ++ ++l++L sp|P01988|HBA_ANAPP 2 VLSAADKTNVKGVFSKIGGHAEEYGAETLERMFIAYPQTKTYFPHF-DLS-----HGSAQIKAHGKKVAAALVEAVNHID-DIAGALSKL 84 8*********************************************.***.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+l+++ ++v+a ++p+ +t++v+a+l+K++ v +l++kY+ sp|P01988|HBA_ANAPP 85 SDLHAQKLRVDPVNFKFLGHCFLVVVAIHHPAALTPEVHASLDKFMCAVGAVLTAKYR 142 *********************************************************7 PP >> sp|P02002|HBAD_PHACO Hemoglobin subunit alpha-D OS=Phasianus colchicus colchicus GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 162.7 0.4 4.3e-49 2.1e-46 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 162.7 bits; conditional E-value: 4.3e-49 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L +++k+ ++++W k ++ +e Ga++Lvr+f+++P+t+++F++F dLs +s++++ Hgkkvl+Als+a++++d +l++++++L sp|P02002|HBAD_PHACO 2 LNAEDKKLIQQAWEKAASHQQEFGAEALVRMFTAYPQTKTYFPHF-DLS-----PGSDQIRGHGKKVLGALSNAVKNVD-NLSQAMSEL 83 889******************************************.9**.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls+++ +vla +++k++t++v+aa++K+l+ v+ +la+kY+ sp|P02002|HBAD_PHACO 84 SNLHAYNLRVDPVNFKLLSQCIEVVLAVHMGKDYTPEVHAAFDKFLSAVSAVLAEKYR 141 *********************************************************7 PP >> sp|P01993|HBA_AQUCH Hemoglobin subunit alpha-A OS=Aquila chrysaetos GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 162.6 0.5 4.4e-49 2.1e-46 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 162.6 bits; conditional E-value: 4.4e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++kt+vk+v++k+ ++e++Ga++L+r+f+++P t+++F++F dL+ ++sa++k+Hgkkv++Al +a++++d ++ ++l++L sp|P01993|HBA_AQUCH 2 VLSANDKTNVKNVFTKISGHAEDYGAEALERMFTTYPPTKTYFPHF-DLH-----HGSAQIKAHGKKVVGALIEAVNHID-DMAGALSKL 84 89********************************************.999.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P01993|HBA_AQUCH 85 SDLHAQKLRVDPVNFKLLGQCFLVVVAIHHPSVLTPEVHASLDKFLCAVGNVLTAKYR 142 *********************************************************7 PP >> sp|P84791|HBAD_AYTFU Hemoglobin subunit alpha-D OS=Aythya fuligula GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 162.6 0.4 4.5e-49 2.2e-46 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 162.6 bits; conditional E-value: 4.5e-49 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ ++++W kv + ++ G+++L+r+f+++P+t+++F++F dL+ +s++v+ Hgkkv+ Al++a+++ld +++++l++L sp|P84791|HBAD_AYTFU 2 LTAEDKKLITQLWEKVAGHQDDFGNEALQRMFVTYPQTKTYFPHF-DLH-----PGSEQVRGHGKKVAAALGNAVKSLD-NISQALSEL 83 99*******************************************.999.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fkll+++ +vlaa+l+k++t+d++aa++K+l+ va +la+kY+ sp|P84791|HBAD_AYTFU 84 SNLHAYNLRVDPVNFKLLAQCFQVVLAAHLGKDYTPDMHAAFDKFLSAVAAVLAEKYR 141 *********************************************************7 PP >> sp|P06347|HBAZ_PANTR Hemoglobin subunit zeta OS=Pan troglodytes GN=HBZ1 PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 162.3 0.2 5.7e-49 2.8e-46 2 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 162.3 bits; conditional E-value: 5.7e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 L++ e t + ++Wak+ +++++ G++ L+rlf+s+P+t+++F++F dL+ +sa++++Hg kv+ A++da++++d ++ ++l++ sp|P06347|HBAZ_PANTR 2 SLTKTEGTIIVSMWAKISTQADTIGTETLERLFLSHPQTKTYFPHF-DLH-----PGSAQLRAHGSKVVAAVGDAVKSID-NIGGALSK 83 58999*****************************************.999.....9************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa l+vdp +fklls++l+++laar+p++fta+++aa +K+l++v+ +l++kY+ sp|P06347|HBAZ_PANTR 84 LSELHAYILRVDPVNFKLLSHCLLVTLAARFPADFTAEAHAAWDKFLSVVSSVLTEKYR 142 **********************************************************7 PP >> sp|P22740|HBA_ANAPE Hemoglobin subunit alpha-A OS=Anas penelope GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 162.2 1.2 5.9e-49 2.9e-46 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 162.2 bits; conditional E-value: 5.9e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk v++k++ ++ee+Ga+ L+r+f ++P+t+++F++F dLs ++sa++k+Hgkkv+ Al +a++++d ++ ++l++L sp|P22740|HBA_ANAPE 2 VLSAADKTNVKGVFSKIGGHAEEYGAETLERMFIAYPQTKTYFPHF-DLS-----HGSAQIKAHGKKVAAALVEAVNHID-DIAGALSKL 84 8*********************************************.***.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+l+++ ++v+a ++p+ +t++v+a+l+K+l v +l++kY+ sp|P22740|HBA_ANAPE 85 SDLHAQKLRVDPVNFKFLGHCFLVVVAIHHPAALTPEVHASLDKFLCAVGAVLTAKYR 142 *********************************************************7 PP >> sp|P82112|HBA2_STEMC Hemoglobin subunit alpha-2 OS=Stercorarius maccormicki PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 162.2 0.4 6e-49 2.9e-46 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 162.2 bits; conditional E-value: 6e-49 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ ++++W kv + e+ Ga++L+r+f ++P+t+++F++F dL+ ++s++++ Hgkkv++Al++a+++ld +l+++l++L sp|P82112|HBA2_STEMC 2 LTADDKKLILQIWEKVLGHQEDFGAEALERMFITYPQTKTYFPHF-DLQ-----HGSDQIRSHGKKVVTALGNAVKSLD-NLSQALSEL 83 89*******************************************.999.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vla +l+k++t++v+aa++K+l+ va +l++kY+ sp|P82112|HBA2_STEMC 84 SNLHAYNLRVDPVNFKLLSQCFQVVLAVHLGKDYTPEVHAAFDKFLSAVAAVLSEKYR 141 *********************************************************7 PP >> sp|P01991|HBA_BRACA Hemoglobin subunit alpha-A OS=Branta canadensis GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 162.0 1.0 6.7e-49 3.3e-46 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 162.0 bits; conditional E-value: 6.7e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk v++k++ +++e+Ga+ L+r+f+++P+t+++F++F dL+ ++sa++k+Hgkkv+ Al +a++++d ++ ++l++L sp|P01991|HBA_BRACA 1 VLSAADKTNVKGVFSKIGGHADEYGAETLERMFVAYPQTKTYFPHF-DLQ-----HGSAQIKAHGKKVAAALVEAVNHID-DIAGALSKL 83 69********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+l+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P01991|HBA_BRACA 84 SDLHAQKLRVDPVNFKFLGHCFLVVVAIHHPSALTPEVHASLDKFLCAVGTVLTAKYR 141 *********************************************************7 PP >> sp|P01987|HBA_CAIMO Hemoglobin subunit alpha-A OS=Cairina moschata GN=HBAA PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 162.0 1.3 6.8e-49 3.3e-46 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 162.0 bits; conditional E-value: 6.8e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk v++k++ ++ee+Ga+ L+r+f ++P+t+++F++F dL+ ++sa++k+Hgkkv+ Al +a++++d ++ ++l++L sp|P01987|HBA_CAIMO 2 VLSAADKTNVKGVFSKIGGHAEEYGAETLERMFIAYPQTKTYFPHF-DLQ-----HGSAQIKAHGKKVAAALVEAVNHID-DIAGALSKL 84 8*********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+l+++ ++v+a ++p+ +t++v+a+l+K++ v +l++kY+ sp|P01987|HBA_CAIMO 85 SDLHAQKLRVDPVNFKFLGHCFLVVVAIHHPAALTPEVHASLDKFMCAVGAVLTAKYR 142 *********************************************************7 PP >> sp|P01990|HBA_ANSIN Hemoglobin subunit alpha-A OS=Anser indicus GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 161.9 2.0 7.7e-49 3.7e-46 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 161.9 bits; conditional E-value: 7.7e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk v++k+ ++ee+Ga+ L+r+f+++P+t+++F++F dL+ ++sa++k+Hgkkv+ Al +a++++d ++ ++l++L sp|P01990|HBA_ANSIN 2 VLSAADKTNVKGVFSKISGHAEEYGAETLERMFTAYPQTKTYFPHF-DLQ-----HGSAQIKAHGKKVVAALVEAVNHID-DIAGALSKL 84 8*********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+l+++ ++v+a ++p+ +ta+v+a+l+K+l v ++l++kY+ sp|P01990|HBA_ANSIN 85 SDLHAQKLRVDPVNFKFLGHCFLVVVAIHHPSALTAEVHASLDKFLCAVGTVLTAKYR 142 *********************************************************7 PP >> sp|P22741|HBA_FRAPO Hemoglobin subunit alpha-A OS=Francolinus pondicerianus GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 161.7 0.5 8.3e-49 4e-46 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 161.7 bits; conditional E-value: 8.3e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vk +++k+ +++e++Ga++L+r+f ++P t+++F++F dLs ++sa+vk Hgkkv+ Al +a +++d ++ ++l++L sp|P22741|HBA_FRAPO 1 VLSAADKNNVKGIFGKISSHAEDYGAEALERMFITYPSTKTYFPHF-DLS-----HGSAQVKGHGKKVVAALIEAANHID-DIAGTLSKL 83 69********************************************.***.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P22741|HBA_FRAPO 84 SDLHAHKLRVDPVNFKLLGQCFLVVVAIHHPSALTPEVHASLDKFLCAVGNVLTAKYR 141 *********************************************************7 PP >> sp|P83135|HBAA_CHENI Hemoglobin subunit alpha-A OS=Chelonoidis nigra GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 161.5 0.2 9.7e-49 4.7e-46 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 161.5 bits; conditional E-value: 9.7e-49 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vL++++k +vk+vW+kv+++ ee+G + L+rlf ++P t+++F++F dL+ + sa+v++Hg+kvl Al++a++++d +++++l++ sp|P83135|HBAA_CHENI 2 VLTAGDKANVKTVWSKVGSHLEEYGSETLERLFIVYPSTKTYFPHF-DLH-----HDSAQVRAHGRKVLSALGEAVNHID-DIPGALSK 83 79********************************************.999.....9***********************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+ l+vdp +fkll + v+v+ ++p+ +t++v+ +l+K+l+ va++l+skY+ sp|P83135|HBAA_CHENI 84 LSDLHAQTLRVDPVNFKLLNLCFVVVVGRHHPTILTPEVHVSLDKFLSAVATALTSKYR 142 **********************************************************7 PP >> sp|P04442|HBAD_ANAPL Hemoglobin subunit alpha-D OS=Anas platyrhynchos GN=HBAD PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 161.4 0.6 1e-48 5e-46 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 161.4 bits; conditional E-value: 1e-48 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ ++++W kv + ee G ++L+r+f+++P+t+++F++F dL+ +s++v+ Hgkkv+ Al++a+++ld +l+++l++L sp|P04442|HBAD_ANAPL 2 LTAEDKKLITQLWEKVAGHQEEFGSEALQRMFLAYPQTKTYFPHF-DLH-----PGSEQVRGHGKKVAAALGNAVKSLD-NLSQALSEL 83 99*******************************************.999.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fkll+++ +vlaa+l+k+++++++aa++K+++ va +la+kY+ sp|P04442|HBAD_ANAPL 84 SNLHAYNLRVDPVNFKLLAQCFQVVLAAHLGKDYSPEMHAAFDKFMSAVAAVLAEKYR 141 *********************************************************7 PP >> sp|P83132|HBA2_ALDEL Hemoglobin A subunit alpha-2 OS=Aldabrachelys elephantina PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 161.4 0.1 1e-48 5e-46 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 161.4 bits; conditional E-value: 1e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vL++++k +vk+vW+kv+++ e++G + L+rlf+++P t+++F++F dL+ + s++v++Hgkkvl Al++a++++d +++++l++ sp|P83132|HBA2_ALDEL 2 VLTAGDKANVKTVWSKVGSHLEDYGSETLERLFVVYPSTKTYFPHF-DLH-----HDSPQVRAHGKKVLSALGEAVNHID-DIPGALSK 83 79********************************************.999.....9***********************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa++l+vdp +fkll + v+v+ ++p+ +t++v+ +l+K+l+ va+ l+skY+ sp|P83132|HBA2_ALDEL 84 LSDLHAQNLRVDPVNFKLLNLCFVVVVGRHHPTILTPEVHVSLDKFLSAVAQNLTSKYR 142 **********************************************************7 PP >> sp|P02005|HBAD_CHRPI Hemoglobin subunit alpha-D OS=Chrysemys picta bellii GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 161.4 2.7 1.1e-48 5.1e-46 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 161.4 bits; conditional E-value: 1.1e-48 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L +ek+ +k++W kv + e+ Ga++L+r+f ++P+t+++F++F dL+ + s+++++Hgkkv++Al+da++++d +l+ +l++L sp|P02005|HBAD_CHRPI 2 LNHDEKQLIKHAWEKVLGHQEDFGAEALERMFAVYPQTKTYFPHF-DLH-----HDSEQIRHHGKKVVTALGDAVRHMD-NLSEALSEL 83 7889*****************************************.999.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vla +l+ e+t++v+ a++K+la v+ +la+kY+ sp|P02005|HBAD_CHRPI 84 SNLHAYNLRVDPVNFKLLSHCFQVVLAVHLADEYTPQVHVAYDKFLAAVSAVLAEKYR 141 *********************************************************7 PP >> sp|P01995|HBA_PHACO Hemoglobin subunit alpha-A OS=Phasianus colchicus colchicus GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 161.2 0.4 1.3e-48 6.1e-46 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 161.2 bits; conditional E-value: 1.3e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vk +++k+ ++ee+Ga++L+r+f ++P t+++F++F dLs ++sa++k Hgkkv+ Al +a++++d ++ ++l++L sp|P01995|HBA_PHACO 1 VLSAADKNNVKGIFTKIAGHAEEYGAEALERMFITYPSTKTYFPHF-DLS-----HGSAQIKGHGKKVVAALIEAVNHID-DITGTLSKL 83 69********************************************.***.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P01995|HBA_PHACO 84 SDLHAHKLRVDPVNFKLLGQCFLVVVAIHHPSALTPEVHASLDKFLCAVGTVLTAKYR 141 *********************************************************7 PP >> sp|P10057|HBA_EUDCH Hemoglobin subunit alpha OS=Eudyptes chrysocome GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 160.8 1.0 1.6e-48 7.9e-46 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 160.8 bits; conditional E-value: 1.6e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k++vk v++k+ +++ee+Ga+ L+r+f+++P+t+++F++F dL+ ++sa+vk+Hgkkv++Al +a +++d ++ ++l++L sp|P10057|HBA_EUDCH 1 VLSANDKSNVKGVFSKISSHAEEYGAETLERMFTTYPQTKTYFPHF-DLH-----HGSAQVKAHGKKVATALMEAANHID-DIAGALSKL 83 69********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l+skY+ sp|P10057|HBA_EUDCH 84 SDLHAQKLRVDPVNFKLLGQCFLVVMAIHHPSALTPEVHASLDKFLCAVGNVLTSKYR 141 *********************************************************7 PP >> sp|P84790|HBA_AYTFU Hemoglobin subunit alpha-A OS=Aythya fuligula PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 160.6 0.5 1.8e-48 8.9e-46 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 160.6 bits; conditional E-value: 1.8e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk +++k++ ++ee+Ga+ L+r+f ++P+t+++F++F dL+ ++sa++k+Hgkkv+ Al +a++++d ++ ++l++L sp|P84790|HBA_AYTFU 2 VLSAADKTNVKGIFSKIGGHAEEYGAETLERMFITYPQTKTYFPHF-DLQ-----HGSAQIKAHGKKVAAALVEAVNHID-DIAGALSKL 84 8*********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +f++l+++ ++vla ++p+ +t++v+a+l+K++ v +l++kY+ sp|P84790|HBA_AYTFU 85 SDLHAQKLRVDPVNFRFLGHCFLVVLAIHHPSALTPEVHASLDKFMCAVGATLTAKYR 142 *********************************************************7 PP >> sp|P02006|HBAD_PHRHI Hemoglobin subunit alpha-D OS=Phrynops hilarii GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 160.5 3.2 2e-48 9.8e-46 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 160.5 bits; conditional E-value: 2e-48 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls++ek+ ++++W kv+++ e+ Ga++L+r+f+++P+t+++F +F dL+ ++s++++ Hgkkv+ Al++a+ ++d +l+a+l +L sp|P02006|HBAD_PHRHI 2 LSADEKQLILHAWEKVHTHQEDFGAEALERMFTVYPQTKTYFHHF-DLH-----HGSEQIRRHGKKVVVALENAVHHMD-NLSAALCKL 83 9********************************************.999.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vla +l++e++++v+ a++K+la v+ +la+kY+ sp|P02006|HBAD_PHRHI 84 SDLHAYNLRVDPVNFKLLSHCFHVVLAGHLGEEYSPQVHVAYDKFLAAVSDVLAEKYR 141 *********************************************************7 PP >> sp|P08850|HBA_ACCGE Hemoglobin subunit alpha-A OS=Accipiter gentilis GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 160.5 0.3 2e-48 9.9e-46 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 160.5 bits; conditional E-value: 2e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++kt+vk+v++k++ ++ee+Ga+ L+r+f+++P t+++F++F dL+ ++sa++k+Hgkkv++Al +a++++d ++ ++l++L sp|P08850|HBA_ACCGE 2 VLSANDKTNVKNVFTKIGGHAEEYGAETLERMFTTYPPTKTYFPHF-DLH-----HGSAQIKAHGKKVVGALIEAVNHID-DIAGALSKL 84 89********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P08850|HBA_ACCGE 85 SDLHAQKLRVDPVNFKLLGQCFLVVVAIHHPSVLTPEVHASLDKFLCAVGNVLTAKYR 142 *********************************************************7 PP >> sp|P83131|HBA1_ALDEL Hemoglobin A subunit alpha-1 OS=Aldabrachelys elephantina PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 160.3 0.2 2.3e-48 1.1e-45 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 160.3 bits; conditional E-value: 2.3e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vL++++k +vk+vW+kv+++ ee+G + L+rlf+++P t+++F++F dL+ + s++v++Hgkkvl Al++a++++d +++++l++ sp|P83131|HBA1_ALDEL 2 VLTAGDKANVKTVWSKVGSHLEEYGSETLERLFVVYPSTKTYFPHF-DLH-----HDSPQVRAHGKKVLSALGEAVNHID-DIPGALSK 83 79********************************************.999.....9***********************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa++l+vdp +fkll + v+v +++p+ +t++v+ +l+K+l+ va++l+skY+ sp|P83131|HBA1_ALDEL 84 LSDLHAQNLRVDPVNFKLLNLCFVVVSGTHHPTILTPEVHVSLDKFLSAVATALTSKYR 142 **********************************************************7 PP >> sp|P30892|HBAD_COTJA Hemoglobin subunit alpha-D OS=Coturnix coturnix japonica GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 160.2 0.4 2.5e-48 1.2e-45 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 160.2 bits; conditional E-value: 2.5e-48 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ ++++W k ++ e+ Ga++L r+f+++P+t+++F++F dLs +s++++ Hgkkvl Al++a++++d +l++++++L sp|P30892|HBAD_COTJA 2 LTAEDKKLIQQAWEKASSHQEDFGAEALLRMFTAYPQTKTYFPHF-DLS-----PGSDQIRGHGKKVLAALGNAVKNID-DLSQAMAEL 83 99*******************************************.9**.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls+++ +vlaa+++k+++++v+aa++K+l+ va +la kY+ sp|P30892|HBAD_COTJA 84 SNLHAFNLRVDPVNFKLLSQCIQVVLAAHMGKDYSPEVHAAFDKFLSAVAAVLAGKYR 141 *********************************************************7 PP >> sp|P02003|HBAD_CAIMO Hemoglobin subunit alpha-D OS=Cairina moschata GN=HBAD PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 160.2 0.6 2.5e-48 1.2e-45 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 160.2 bits; conditional E-value: 2.5e-48 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ + +vW kv + ee G ++L+r+f+++P+t+++F++F dL+ +s++v+ Hgkkv+ Al++a+++ld +l+++l++L sp|P02003|HBAD_CAIMO 2 LTAEDKKLIVQVWEKVAGHQEEFGSEALQRMFLAYPQTKTYFPHF-DLH-----PGSEQVRGHGKKVAAALGNAVKSLD-NLSQALSEL 83 99*******************************************.999.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fkll+++ +vlaa+l+k+++++++aa++K+l+ va +la+kY+ sp|P02003|HBAD_CAIMO 84 SNLHAYNLRVDPVNFKLLAQCFQVVLAAHLGKDYSPEMHAAFDKFLSAVAAVLAEKYR 141 *********************************************************7 PP >> sp|P01981|HBA_STRCA Hemoglobin subunit alpha-A OS=Struthio camelus GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 160.2 0.5 2.5e-48 1.2e-45 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 160.2 bits; conditional E-value: 2.5e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs +kt+vk +++k+ +++ee+Ga+ L+r+f ++P+t+++F++F dL+ ++sa++k+Hgkkv++Al +a++++d +++++l++L sp|P01981|HBA_STRCA 1 VLSGTDKTNVKGIFSKISSHAEEYGAETLERMFITYPQTKTYFPHF-DLH-----HGSAQIKAHGKKVANALIEAVNHID-DISGALSKL 83 6999******************************************.999.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v +l++kY+ sp|P01981|HBA_STRCA 84 SDLHAQKLRVDPVNFKLLGQCFLVVVAIHHPSALTPEVHASLDKFLCAVGAVLTAKYR 141 *********************************************************7 PP >> sp|P10060|HBB1_SPHPU Hemoglobin subunit beta-1 OS=Sphenodon punctatus GN=HBB1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 160.0 0.6 2.8e-48 1.4e-45 2 149 .] 2 146 .] 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 160.0 bits; conditional E-value: 2.8e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +++ek + ++Wakv dv++ G+++L rl++++P+tq+fF F++Ls + ++ +++ vk+Hgkkv + +++al++ld +l+ ++++ sp|P10060|HBB1_SPHPU 2 HWTAEEKHLLGSLWAKV--DVADIGGEALGRLLVVYPWTQRFFADFGNLSSATAICGNPRVKAHGKKVFTMFGEALKHLD-NLKETFAS 87 6799*************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselH++kl+vd ++fkll++ +++vlaarl ft+++qaa++Kl +va++la +Y+ sp|P10060|HBB1_SPHPU 88 LSELHCDKLHVDTENFKLLGNLVIVVLAARLHDSFTPAAQAAFHKLAYSVAHALARRYH 146 **********************************************************7 PP >> sp|P01980|HBA_APTFO Hemoglobin subunit alpha OS=Aptenodytes forsteri GN=HBA PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 159.8 1.2 3.4e-48 1.7e-45 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 159.8 bits; conditional E-value: 3.4e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k++vk++++k+ +++ee+Ga+ L+r+f+++P+t+++F++F dL+ ++sa+vk+Hgkkv+ Al +a +++d ++ ++l++L sp|P01980|HBA_APTFO 2 VLSANDKSNVKSIFSKISSHAEEYGAETLERMFTTYPQTKTYFPHF-DLH-----HGSAQVKAHGKKVAAALIEAANHID-DIAGALSKL 84 89********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++++a+l+K+l v ++l+skY+ sp|P01980|HBA_APTFO 85 SDLHAEKLRVDPVNFKLLGQCFMVVVAIHHPSALTPEIHASLDKFLCAVGNVLTSKYR 142 *********************************************************7 PP >> sp|P01947|HBA_CAVPO Hemoglobin subunit alpha OS=Cavia porcellus GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 159.7 0.7 3.6e-48 1.8e-45 2 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 159.7 bits; conditional E-value: 3.6e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vk+ W k++ +++e+ a+ L+r+f+s+P+t+++F + d+s +s d+k+Hgkkv+dAl+ a+ +ld +l+++l++L sp|P01947|HBA_CAVPO 2 VLSAADKNNVKTTWDKIGGHAAEYVAEGLTRMFTSFPTTKTYFHHI-DVS-----PGSGDIKAHGKKVADALTTAVGHLD-DLPTALSTL 84 8********************************************9.888.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+ Ha+kl+vdp +fk+l ++l+++laa+l+++ft++++a+l+K++a+v+++l+skY+ sp|P01947|HBA_CAVPO 85 SDVHAHKLRVDPVNFKFLNHCLLVTLAAHLGADFTPSIHASLDKFFASVSTVLTSKYR 142 *********************************************************7 PP >> sp|P01983|HBA_CICCI Hemoglobin subunit alpha-A OS=Ciconia ciconia GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 159.5 0.5 4.1e-48 2e-45 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 159.5 bits; conditional E-value: 4.1e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k++v+ v++k+ a+++++Ga+ L+r+f+++P+ +++F++F dL+ ++sa++k+Hgkkv++Al +a++++d ++ ++l++L sp|P01983|HBA_CICCI 2 VLSANDKSNVRGVFGKISAHADDYGAETLERMFTVHPTQKTYFPHF-DLH-----RGSAQIKAHGKKVAGALLEAVNHID-DIAGALSKL 84 89********************************************.999.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l +v+++l+ kY+ sp|P01983|HBA_CICCI 85 SDLHAQKLRVDPVNFKLLGQCFLVVVAVHHPSLLTPEVHASLDKFLCTVSTVLTDKYR 142 *********************************************************7 PP >> sp|P13786|HBAZ_CAPHI Hemoglobin subunit zeta OS=Capra hircus GN=HBZ1 PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 159.5 0.2 4.1e-48 2e-45 2 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 159.5 bits; conditional E-value: 4.1e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 L+ e+t ++++W+k+ ++++ G++ L+rlf +P+++++F++F dL+ +sa++++Hg kv+ A++da++++d ++ ++l++ sp|P13786|HBAZ_CAPHI 2 SLTRTERTIILSLWSKISTQADVIGTETLERLFSCYPQAKTYFPHF-DLH-----SGSAQLRAHGSKVVAAVGDAVKSID-NVTSALSK 83 5899******************************************.999.....9************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa l+vdp +fk+ls++l+++la+++p++ftad++aa +K+l++v+ +l++kY+ sp|P13786|HBAZ_CAPHI 84 LSELHAYVLRVDPVNFKFLSHCLLVTLASHFPADFTADAHAAWDKFLSIVSGVLTEKYR 142 **********************************************************7 PP >> sp|P01992|HBA_CYGOL Hemoglobin subunit alpha-A OS=Cygnus olor GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 159.4 1.0 4.4e-48 2.1e-45 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 159.4 bits; conditional E-value: 4.4e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk v++k++ +++++Ga+ L+r+f ++P+t+++F++F dL+ ++sa++k+Hgkkv+ Al +a++++d ++ ++l++L sp|P01992|HBA_CYGOL 1 VLSAADKTNVKGVFSKIGGHADDYGAETLERMFIAYPQTKTYFPHF-DLQ-----HGSAQIKAHGKKVAAALVEAVNHID-DIAGALSKL 83 69********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+l+++ ++v+a ++p+ +t++v+a+l+K+l v +l++kY+ sp|P01992|HBA_CYGOL 84 SDLHAQKLRVDPVNFKFLGHCFLVVVAIHHPSALTPEVHASLDKFLCAVGAVLTAKYR 141 *********************************************************7 PP >> sp|P01999|HBA_ALLMI Hemoglobin subunit alpha OS=Alligator mississippiensis GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 159.4 0.5 4.5e-48 2.2e-45 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 159.4 bits; conditional E-value: 4.5e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs ++k++vka+W+k + ee+Ga++L+r+f ++P+t+ +F++F d+s ++sa++++Hgkkv Al +a++++d +l+++l L sp|P01999|HBA_ALLMI 2 VLSMEDKSNVKAIWGKASGHLEEYGAEALERMFCAYPQTKIYFPHF-DMS-----HNSAQIRAHGKKVFSALHEAVNHID-DLPGALCRL 84 79********************************************.888.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selHa++l+vdp +fk+l++++++v a ++p+ ++++++a+l+K+l v+ +l+skY+ sp|P01999|HBA_ALLMI 85 SELHAHSLRVDPVNFKFLAHCVLVVFAIHHPSALSPEIHASLDKFLCAVSAVLTSKYR 142 *********************************************************7 PP >> sp|P24589|HBA_COTJA Hemoglobin subunit alpha-A OS=Coturnix coturnix japonica GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 159.3 0.8 4.7e-48 2.3e-45 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 159.3 bits; conditional E-value: 4.7e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk ++ak+ ++ee+Ga++L r+f+++P+t+++F++F d+s ++sa++k Hgkkv+ Al +a +++d ++ ++l++L sp|P24589|HBA_COTJA 2 VLSAADKTNVKGIFAKIAGHAEEYGAEALDRMFTTYPQTKTYFPHF-DVS-----HGSAQIKGHGKKVAAALVEAANHID-DIAGTLSKL 84 8*********************************************.888.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P24589|HBA_COTJA 85 SDLHAQKLRVDPVNFKLLGQCFLVVVAIHHPAALTPEVHASLDKFLCAVGTVLTAKYR 142 *********************************************************7 PP >> sp|P02009|HBAZ_PIG Hemoglobin subunit zeta OS=Sus scrofa PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 159.1 0.2 5.3e-48 2.6e-45 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 159.1 bits; conditional E-value: 5.3e-48 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 L++ae+t + ++W+k+ +++++ G++ L+rlf s+P+++++F++F dL+ +sa++++Hg kvl A+++a++++d +++a+l++Lse sp|P02009|HBAZ_PIG 2 LTKAERTIIGSMWTKISSQADTIGTETLERLFASYPQAKTYFPHF-DLN-----PGSAQLRAHGSKVLAAVGEAVKSID-NVSAALAKLSE 85 89*******************************************.999.....9************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lHa l+vdp +fk+ls++l+++la+++p+++ta+++aa +K+l +v+ +l++kY+ sp|P02009|HBAZ_PIG 86 LHAYVLRVDPVNFKFLSHCLLVTLASHFPADLTAEAHAAWDKFLTIVSGVLTEKYR 141 *******************************************************7 PP >> sp|P02129|HBB_CRONI Hemoglobin subunit beta OS=Crocodylus niloticus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 158.8 0.2 6.7e-48 3.2e-45 4 149 .] 4 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 158.8 bits; conditional E-value: 6.7e-48 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 + ek+ + +W kv dv+ G+++L r++ ++P+ +++Fe+F+d+s +++++ +++v++Hgkkvl +++a+ +ld ++a++++Ls+ sp|P02129|HBB_CRONI 4 DPHEKQLIGDLWHKV--DVAHCGGEALSRMLIVYPWKRRYFENFGDISNAQAIMHNEKVQAHGKKVLASFGEAVCHLD-GIRAHFANLSK 90 589************..*************************************************************.9********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp++fkll+++++ vlaa++pk+f+ + +aa++Kl+ va +la+ Y+ sp|P02129|HBB_CRONI 91 LHCEKLHVDPENFKLLGDIIIIVLAAHYPKDFGLECHAAYQKLVRQVAAALAAEYH 146 *******************************************************7 PP >> sp|P02137|HBBL_XENLA Hemoglobin larval subunit beta-1 OS=Xenopus laevis PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 158.6 1.0 7.5e-48 3.6e-45 1 148 [. 2 146 .. 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 158.6 bits; conditional E-value: 7.5e-48 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 v+Ls++ek++++avW+kv ++e+ G d+L+rl++++P+tq++F +F++Ls +++ ++a+v++Hgkkvl A+ + + +ld ++++ l+ sp|P02137|HBBL_XENLA 2 VHLSADEKSAINAVWSKV--NIENDGHDALTRLLVVFPWTQRYFSSFGNLSNVAAISGNAKVRAHGKKVLSAVDESIHHLD-DIKNFLS 87 69****************..************************************************************9.9****** PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 Ls +Ha++l+vdp++fk l++vlv vla +l++ ft++vqaa eK+ a + +l++ Y sp|P02137|HBBL_XENLA 88 VLSTKHAEELHVDPENFKRLADVLVIVLAGKLGAAFTPQVQAAWEKFSAGLVAALSHGY 146 *******************************************************9988 PP >> sp|P08256|HBA_GYPRU Hemoglobin subunit alpha-A/A' OS=Gyps rueppellii GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 158.5 0.4 8.2e-48 4e-45 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 158.5 bits; conditional E-value: 8.2e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++kt+vk+v++k+ ++e++Ga+ L+r+f+++P t+++F++F dL+ ++sa++k+Hgkkv++Al +a++++d ++ ++l++L sp|P08256|HBA_GYPRU 1 VLSANDKTNVKNVFTKITGHAEDYGAETLERMFTTYPPTKTYFPHF-DLH-----HGSAQIKAHGKKVVGALIEAVNHID-DIAGALSKL 83 69********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P08256|HBA_GYPRU 84 SDLHAQKLRVDPVNFKLLGQCFLVVVAIHHPSVLTPEVHASLDKFLCAVGNVLTAKYR 141 *********************************************************7 PP >> sp|P07034|HBA_CHLME Hemoglobin subunit alpha-A OS=Chloephaga melanoptera GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 158.3 1.4 9.2e-48 4.5e-45 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 158.3 bits; conditional E-value: 9.2e-48 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k +vk v++k++ +++++Ga+ L+r+f ++P+t+++F++F dL+ ++sa++k+Hgkkv+ Al +a++++d ++ ++l++L sp|P07034|HBA_CHLME 1 VLSAADKANVKGVFSKIGGHADDYGAETLERMFIAYPQTKTYFPHF-DLH-----HGSAQIKAHGKKVAAALVEAVNHID-DITGALSKL 83 69********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+l+++ ++v+a ++p+ +t++v+a+l+K++ v +l++kY+ sp|P07034|HBA_CHLME 84 SDLHAQKLRVDPVNFKFLGHCFLVVVAIHHPAALTPEVHASLDKFMCAVGAVLTAKYR 141 *********************************************************7 PP >> sp|P07417|HBA_AEGMO Hemoglobin subunit alpha-A OS=Aegypius monachus GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 158.1 0.4 1.1e-47 5.3e-45 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 158.1 bits; conditional E-value: 1.1e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++kt+vk+v++k+ ++e++Ga+ L+r+f ++P t+++F++F dL+ ++sa++k+Hgkkv++Al +a++++d ++ ++l++L sp|P07417|HBA_AEGMO 2 VLSANDKTNVKTVFTKITGHAEDYGAETLERMFITYPPTKTYFPHF-DLH-----HGSAQIKAHGKKVVGALIEAVNHID-DIAGALSKL 84 89********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P07417|HBA_AEGMO 85 SDLHAQKLRVDPVNFKLLGQCFLVVVAIHHPSVLTPEVHASLDKFLCAVGNVLTAKYR 142 *********************************************************7 PP >> sp|P10780|HBA_PHACA Hemoglobin subunit alpha-A OS=Phalacrocorax carbo GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 157.8 1.7 1.4e-47 6.7e-45 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 157.8 bits; conditional E-value: 1.4e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ +kt+vk v+akv+ +e +Ga+ L+r+f+++P+t+++F++F dL+ ++sa++k+Hgkkv+ Al +a +++d ++ ++l++L sp|P10780|HBA_PHACA 1 VLSASDKTNVKGVFAKVGGSAEAYGAETLERMFTAYPQTKTYFPHF-DLH-----HGSAQIKAHGKKVAAALVEAANHID-DIAGALSKL 83 69********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K++ vak l++kY+ sp|P10780|HBA_PHACA 84 SDLHAQKLRVDPVNFKLLGHCFLVVVAIHHPTLLTPEVHASLDKFMCAVAKELTAKYR 141 *********************************************************7 PP >> sp|P07413|HBAD_PASMO Hemoglobin subunit alpha-D OS=Passer montanus GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 157.8 0.1 1.4e-47 6.8e-45 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 157.8 bits; conditional E-value: 1.4e-47 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ ++++W+k + ee Gad+L r+f s+P t+++F++F dLs ++s++++ Hgkkv+ Als+a+++ld +l+++l++L sp|P07413|HBAD_PASMO 2 LTAEDKKLIQQIWGKLGGAEEEIGADALWRMFHSYPSTKTYFPHF-DLS-----QGSDQIRGHGKKVVAALSNAIKNLD-NLSQALSEL 83 99*******************************************.9**.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fk+ls++l + la+rl+ke++++v++a++K+++ va +la+kY+ sp|P07413|HBAD_PASMO 84 SNLHAYNLRVDPVNFKFLSQCLQVSLATRLGKEYSPEVHSAVDKFMSAVASVLAEKYR 141 *********************************************************7 PP >> sp|P01985|HBA_ANSSE Hemoglobin subunit alpha-A OS=Anseranas semipalmata GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 157.6 0.6 1.5e-47 7.5e-45 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 157.6 bits; conditional E-value: 1.5e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k +vk+v++k++ ++ee+Ga+ L+r+f+++P+t+++F++F dL+ +sa++k+Hgkkv+ Al +a +++d ++ ++l++L sp|P01985|HBA_ANSSE 2 VLSAADKGNVKTVFGKIGGHAEEYGAETLQRMFQTFPQTKTYFPHF-DLQ-----PGSAQIKAHGKKVAAALVEAANHID-DIAGALSKL 84 8*********************************************.999.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+l+++ ++vla ++p+ +t++v+a+++K+l va++l++kY+ sp|P01985|HBA_ANSSE 85 SDLHAQKLRVDPVNFKFLGHCFLVVLAIHHPSLLTPEVHASMDKFLCAVATVLTAKYR 142 *********************************************************7 PP >> sp|O12985|HBAD_COLLI Hemoglobin subunit alpha-D OS=Columba livia GN=HBAD PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 157.6 0.2 1.6e-47 7.6e-45 3 149 .] 2 140 .] 1 140 [] 0.97 Alignments for each domain: == domain 1 score: 157.6 bits; conditional E-value: 1.6e-47 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++ +k+ v++vW kv + Ga++L+rlf+++P+t+++F++F dL+ ++s++v++Hgkkvl Al++a+++l +l+++l+dL sp|O12985|HBAD_COLLI 2 LTDSDKKLVLQVWEKV-IRHPDCGAEALERLFTTYPQTKTYFPHF-DLH-----HGSDQVRNHGKKVLAALGNAVKSLG-NLSQALSDL 82 899*************.666789**********************.999.....***********************97.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fkll+++ +vla++l++++t++++aa++K+l+ v+++la+kY+ sp|O12985|HBAD_COLLI 83 SDLHAYNLRVDPVNFKLLAQCFHVVLATHLGNDYTPEAHAAFDKFLSAVCTVLAEKYR 140 *********************************************************7 PP >> sp|P01994|HBA_CHICK Hemoglobin subunit alpha-A OS=Gallus gallus GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 157.6 0.4 1.6e-47 7.8e-45 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 157.6 bits; conditional E-value: 1.6e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vk +++k+ ++ee+Ga+ L+r+f+++P t+++F++F dLs ++sa++k Hgkkv+ Al +a +++d ++ ++l++L sp|P01994|HBA_CHICK 2 VLSAADKNNVKGIFTKIAGHAEEYGAETLERMFTTYPPTKTYFPHF-DLS-----HGSAQIKGHGKKVVAALIEAANHID-DIAGTLSKL 84 8*********************************************.***.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P01994|HBA_CHICK 85 SDLHAHKLRVDPVNFKLLGQCFLVVVAIHHPAALTPEVHASLDKFLCAVGTVLTAKYR 142 *********************************************************7 PP >> sp|P04239|HBAD_ANSIN Hemoglobin subunit alpha-D OS=Anser indicus GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 157.5 0.6 1.6e-47 8e-45 3 149 .] 2 141 .] 1 141 [] 0.98 Alignments for each domain: == domain 1 score: 157.5 bits; conditional E-value: 1.6e-47 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+++k+ + ++W kv + +e G+++L+r+f+++P+t+++F++F d++ +s++v+ Hgkkv+ Al++a+++ld +++++l++L sp|P04239|HBAD_ANSIN 2 LSADDKKIIAQLWEKVAGHQDEFGNEALQRMFVTYPQTKTYFPHF-DVH-----PGSEQVRSHGKKVAAALGNAVKSLD-NISQALSEL 83 9********************************************.666.....8************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vla +l+k++t++++aa++K+l+ va +la+kY+ sp|P04239|HBAD_ANSIN 84 SNLHAYNLRVDPANFKLLSQCFQVVLAVHLGKDYTPEMHAAFDKFLSAVAAVLAEKYR 141 *********************************************************7 PP >> sp|P04238|HBAD_ANSAN Hemoglobin subunit alpha-D OS=Anser anser anser GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 157.3 0.6 1.9e-47 9.2e-45 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 157.3 bits; conditional E-value: 1.9e-47 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ + ++W kv + +e G+++L+r+f+++P+t+++F++F dL+ +s++v+ Hgkkv+ Al++a+++ld +++++l++L sp|P04238|HBAD_ANSAN 2 LTADDKKLLAQLWEKVAGHQDEFGNEALQRMFVTYPQTKTYFPHF-DLH-----PGSEQVRSHGKKVAAALGNAVKSLD-NISQALSEL 83 899******************************************.999.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vla +l+k++t++++aa++K+l+ va +la+kY+ sp|P04238|HBAD_ANSAN 84 SNLHAYNLRVDPANFKLLSQCFQVVLAVHLGKDYTPEMHAAFDKFLSAVAAVLAEKYR 141 *********************************************************7 PP >> sp|P10781|HBAD_PHACA Hemoglobin subunit alpha-D OS=Phalacrocorax carbo GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 157.3 0.3 1.9e-47 9.4e-45 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 157.3 bits; conditional E-value: 1.9e-47 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L ++e v+ vW kve+ +e+G++ L+r+f+++P+t+++F++F dL+ ++s+++++Hgkkv++Al++a+++ld +l+++l+dL sp|P10781|HBAD_PHACA 2 LGAEETALVRGVWQKVESAKDEMGEETLTRMFLVYPKTKTYFPHF-DLH-----HGSEQIRNHGKKVVTALGNAIQNLD-NLRQTLADL 83 78999****************************************.999.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fkll+++ +vla +l++e+t++v+ a++K+l va +la+kY+ sp|P10781|HBAD_PHACA 84 SNLHAYNLRVDPVNFKLLAQCFQVVLAVHLGQEYTPEVHVAFDKFLTAVAAVLAEKYR 141 *********************************************************7 PP >> sp|P04240|HBAD_BRACA Hemoglobin subunit alpha-D OS=Branta canadensis GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 157.2 0.8 2.1e-47 1e-44 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 157.2 bits; conditional E-value: 2.1e-47 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ + ++W kv + +e G+++L+r+f+++P+t+++F++F dL+ +s++v+ Hgkkv+ Als+a++++d +l+++l++L sp|P04240|HBAD_BRACA 2 LTADDKKILAQLWEKVAGHQDEFGNEALERMFVTYPQTKTYFPHF-DLH-----PGSEQVRSHGKKVAAALSNAVKSID-NLSQALSEL 83 899******************************************.999.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fklls++ +vla +l+k++t++++aa++K+l+ va +la+kY+ sp|P04240|HBAD_BRACA 84 SNLHAYNLRVDPANFKLLSQCFQVVLAVHLGKDYTPEMHAAFDKFLSAVAAVLAEKYR 141 *********************************************************7 PP >> sp|P15164|HBAD_APUAP Hemoglobin subunit alpha-D OS=Apus apus GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 157.1 0.2 2.3e-47 1.1e-44 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 157.1 bits; conditional E-value: 2.3e-47 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ +++vW k + ee+Ga+ L+r+f+++P+t+++F++F dLs +s++++ Hgkkv+ Al+ a+++ld +l+++l++L sp|P15164|HBAD_APUAP 2 LTAEDKKLIQQVWDKLQGCQEEVGAETLQRMFTTYPQTKTYFPHF-DLS-----PGSDQIRGHGKKVVAALGTAVKSLD-NLSQALSEL 83 99*******************************************.9**.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fkll+++l +vla+++ k++t++++aa++K+l+ va +la+kY+ sp|P15164|HBAD_APUAP 84 SNLHAYNLRVDPVNFKLLAQCLQVVLATHMTKDYTPEIHAAFDKFLSAVAAVLAEKYR 141 *********************************************************7 PP >> sp|P07035|HBAD_CHLME Hemoglobin subunit alpha-D OS=Chloephaga melanoptera GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 156.8 0.4 2.7e-47 1.3e-44 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 156.8 bits; conditional E-value: 2.7e-47 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+ ++++W kv + ee G ++L+r+f+++P+t+++F++F dL+ +s++v+ Hgkkv+ Al++a+++ld +l+++l++L sp|P07035|HBAD_CHLME 2 LTADDKKLLTQLWEKVAGHQEEFGSEALQRMFLTYPQTKTYFPHF-DLH-----PGSEQVRGHGKKVAAALGNAVKSLD-NLSQALSEL 83 89*******************************************.999.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +fkll+++ +vla++l+k+++++++aa++K+l+ va +la+kY+ sp|P07035|HBAD_CHLME 84 SNLHAYNLRVDPANFKLLAQCFQVVLATHLGKDYSPEMHAAFDKFLSAVAAVLAEKYR 141 *********************************************************7 PP >> sp|P08260|HBA_CHRRI Hemoglobin subunit alpha-A OS=Chroicocephalus ridibundus GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 156.7 0.3 2.9e-47 1.4e-44 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 156.7 bits; conditional E-value: 2.9e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs +kt+vk v++k++ ++ee+Ga+ L+r+f ++P+t+++F++F dL+ ++sa+vk+Hgkkv+ Al +a +++d ++ ++l++L sp|P08260|HBA_CHRRI 1 VLSGSDKTNVKGVFGKIGGHAEEYGAETLERMFATYPQTKTYFPHF-DLQ-----HGSAQVKAHGKKVAAALVEAANHID-DIAGALSKL 83 6999******************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P08260|HBA_CHRRI 84 SDLHAQKLRVDPVNFKLLGQCFLVVVAIHHPSVLTPEVHASLDKFLCAVGNVLTAKYR 141 *********************************************************7 PP >> sp|P19832|HBA_TRIOC Hemoglobin subunit alpha-A OS=Trigonoceps occipitalis GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 156.7 0.4 3e-47 1.5e-44 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 156.7 bits; conditional E-value: 3e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++kt+vk+v++k+ ++e++Ga+ L+r+f ++P t+++F++F dL+ ++sa++k+Hgkkv++Al +a++++d ++ ++l++L sp|P19832|HBA_TRIOC 1 VLSANDKTNVKTVFTKITGHAEDYGAETLERMFITYPPTKTYFPHF-DLH-----HGSAQIKAHGKKVVGALIEAVNHID-DIAGALSKL 83 69********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P19832|HBA_TRIOC 84 SDLHAQKLRVDPVNFKLLGQCFLVVVAIHHPSVLTPEVHASLDKFLCAVGNVLSAKYR 141 *********************************************************7 PP >> sp|P81023|HBA_MELGA Hemoglobin subunit alpha-A OS=Meleagris gallopavo GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 156.7 0.4 3e-47 1.5e-44 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 156.7 bits; conditional E-value: 3e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vk +++k+ ++ee+Ga+ L+r+f ++P t+++F++F dLs ++sa++k Hgkkv+ Al +a +++d ++ ++l++L sp|P81023|HBA_MELGA 2 VLSAADKNNVKGIFTKIAGHAEEYGAETLERMFITYPPTKTYFPHF-DLS-----HGSAQIKGHGKKVVAALIEAANHID-DIAGTLSKL 84 8*********************************************.***.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P81023|HBA_MELGA 85 SDLHAHKLRVDPVNFKLLGQCFLVVVAIHHPAALTPEVHASLDKFLCAVGTVLTAKYR 142 *********************************************************7 PP >> sp|Q8HY34|HBA_MONDO Hemoglobin subunit alpha OS=Monodelphis domestica GN=HBA PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 156.4 0.5 3.5e-47 1.7e-44 2 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 156.4 bits; conditional E-value: 3.5e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vka+W+kv+ + + + +++L r f+s+P t+++F++F + s +sa++k g+k++dA+s a+a++d +l ++l++L sp|Q8HY34|HBA_MONDO 2 VLSAADKTNVKAAWSKVGGNSGAYMGEALYRTFLSFPPTKTYFPHF-EFS-----AGSAQIKGQGQKIADAVSLAVAHMD-DLATALSAL 84 8*********************************************.788.....8************************.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa++lkvdp +fk+l + ++++la++l+k+ft++++a+l+K+lal++++l+skY+ sp|Q8HY34|HBA_MONDO 85 SDLHAHNLKVDPVNFKFLCHNVLVTLASHLGKDFTPEIHASLDKFLALLSTVLTSKYR 142 *********************************************************7 PP >> sp|P82111|HBA1_STEMC Hemoglobin subunit alpha-1 OS=Stercorarius maccormicki PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 156.4 0.2 3.6e-47 1.7e-44 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 156.4 bits; conditional E-value: 3.6e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs +k++vk v++k++ ++ee+Ga+ L+r+f ++P+t+++F++F dL+ ++sa+vk+Hgkkv+ Al +a +++d +++++l++ sp|P82111|HBA1_STEMC 1 VLSGSDKNNVKGVFGKIGGHAEEYGAETLERMFATYPQTKTYFPHF-DLQ-----HGSAQVKAHGKKVAAALVEAANHID-DISGALSK 82 6999******************************************.999.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P82111|HBA1_STEMC 83 LSDLHAQKLRVDPVNFKLLGQCFLVVVAIHHPSVLTPEVHASLDKFLCAVGNVLTAKYR 141 **********************************************************7 PP >> sp|P21871|HBA_COLLI Hemoglobin subunit alpha-A OS=Columba livia GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 156.2 0.3 4.4e-47 2.1e-44 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 156.2 bits; conditional E-value: 4.4e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++k++vkav+ak++ ++++ G+++L+rlf ++P+t+++F++F dLs ++sa++k Hgkkv++Al +a +++d ++ ++l++L sp|P21871|HBA_COLLI 2 VLSANDKSNVKAVFAKIGGQAGDLGGEALERLFITYPQTKTYFPHF-DLS-----HGSAQIKGHGKKVAEALVEAANHID-DIAGALSKL 84 89********************************************.***.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K++ v ++l++kY+ sp|P21871|HBA_COLLI 85 SDLHAQKLRVDPVNFKLLGHCFLVVVAVHFPSLLTPEVHASLDKFVLAVGTVLTAKYR 142 *********************************************************7 PP >> sp|P02130|HBB_ALLMI Hemoglobin subunit beta OS=Alligator mississippiensis GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 156.1 2.4 4.6e-47 2.2e-44 5 149 .] 5 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 156.1 bits; conditional E-value: 4.6e-47 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLsel 94 + e++ + +Wakv dv++ Gad+L r++ ++P+ +++Fe+F+++ + ++ + +v++Hgkkvl +++a+++ld ++++++++Ls+l sp|P02130|HBB_ALLMI 5 AHERKFIVDLWAKV--DVAQCGADALSRMLIVYPWKRRYFEHFGKMCNAHDILHNSKVQEHGKKVLASFGEAVKHLD-NIKGHFANLSKL 91 6799999*******..*************************************************************.************ PP globins4 95 HakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 H++k++vdp++fkll+++++ vlaa++p++f+ + +aa++Kl+ va +la+ Y+ sp|P02130|HBB_ALLMI 92 HCEKFHVDPENFKLLGDIIIIVLAAHHPEDFSVECHAAFQKLVRQVAAALAAEYH 146 ******************************************************7 PP >> sp|P02131|HBB_CAICR Hemoglobin subunit beta OS=Caiman crocodilus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 156.0 1.8 5e-47 2.4e-44 3 149 .] 3 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 156.0 bits; conditional E-value: 5e-47 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 s+ e + + +Wakv dv+ G+d+L r++ +P+ +++Fe+F++Lst++++ ++++++Hgkkvl +++a+++ld ++++++++Ls sp|P02131|HBB_CAICR 3 FSAHEEKLIVDLWAKV--DVASCGGDALSRMLIIYPWKRRYFEHFGKLSTDQDVLHNEKIREHGKKVLASFGEAVKHLD-NIKGHFAHLS 89 69999***********..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +lH +k++vd ++fkll++++++vl ++pk+ft + +aa++Kl+ va +l++ Y+ sp|P02131|HBB_CAICR 90 KLHFEKFHVDCENFKLLGDIIIVVLGMHHPKDFTLQTHAAFQKLVRHVAAALSAEYH 146 ********************************************************7 PP >> sp|P02136|HBB3_LITCT Hemoglobin subunit beta-3 OS=Lithobates catesbeiana PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 155.8 0.3 5.7e-47 2.8e-44 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 155.8 bits; conditional E-value: 5.7e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +++ek +++vW kv dve+ G ++L+rlf ++P+tq++F F+dLs ++++ ++++v++Hgkk+l+A+ +a+ +ld +++++l+d sp|P02136|HBB3_LITCT 3 HWTAEEKAVINSVWQKV--DVEQDGHEALTRLFIVYPWTQRYFSTFGDLSSPAAIAGNPKVHAHGKKILGAIDNAIHNLD-DVKGTLHD 88 6799*************..************************************************************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Lse Ha++l+vdp++f+ l+evl++vl a+l+k f+++vq eK++a++ +l++ Y+ sp|P02136|HBB3_LITCT 89 LSEEHANELHVDPENFRRLGEVLIVVLGAKLGKAFSPQVQHVWEKFIAVLVDALSHSYH 147 **********************************************************7 PP >> sp|P19789|HBA_EUDSC Hemoglobin subunit alpha-A OS=Eudynamys scolopacea GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 155.8 0.8 5.8e-47 2.8e-44 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 155.8 bits; conditional E-value: 5.8e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk ++ak++ + +++Ga+ L r+f+++P+t+++F++F d+s ++sa++k+Hgkkv+ Al +a++++d ++ ++l++L sp|P19789|HBA_EUDSC 1 VLSAADKTNVKGIFAKIGGHGDDYGAETLDRMFTVYPQTKTYFPHF-DVS-----HGSAQIKAHGKKVVAALVEAVNHID-DIAGALSKL 83 69********************************************.888.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+ ++++ +t++v+a+l+K+l v+++l++kY+ sp|P19789|HBA_EUDSC 84 SDLHAHKLRVDPANFKLLGQCFLVVVGIHHASALTPEVHASLDKFLCAVSTVLTAKYR 141 *********************************************************7 PP >> sp|P07404|HBA_VULGR Hemoglobin subunit alpha-A OS=Vultur gryphus GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 155.6 0.1 6.4e-47 3.1e-44 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 155.6 bits; conditional E-value: 6.4e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs +kt+vk v+ak++ ++e++Ga+ L+r+f ++P+t+++F++F dL+ ++sa++k Hgkkv++Al +a +++d ++ a+l++L sp|P07404|HBA_VULGR 1 VLSGSDKTNVKGVFAKIGGHAEDYGAETLERMFITYPQTKTYFPHF-DLQ-----HGSAQIKGHGKKVVGALIEAANHID-DIAASLSKL 83 6999******************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P07404|HBA_VULGR 84 SDLHAQKLRVDPVNFKLLGQCFLVVVAIHHPSVLTPEVHASLDKFLCAVGNVLTAKYR 141 *********************************************************7 PP >> sp|P02004|HBAD_STUVU Hemoglobin subunit alpha-D OS=Sturnus vulgaris GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 155.4 0.0 7.5e-47 3.7e-44 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 155.4 bits; conditional E-value: 7.5e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vL++++k+ +++ W+k + ee Ga++L r+f ++P t+++F++F dLs ++s++++ Hgkkv+ Al++a+++ld +l+++l++ sp|P02004|HBAD_STUVU 1 VLTAEDKKLIQQTWGKLGGAEEEIGAEALWRMFHAYPPTKTYFPHF-DLS-----QGSDQIRGHGKKVVAALGNAIKNLD-NLSQALSE 82 69********************************************.9**.....9************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa +l+vdp +fk+ls++l ++la+rl+ke++++v++a++K+++ va +la+kY+ sp|P02004|HBAD_STUVU 83 LSNLHAYNLRVDPVNFKFLSQCLQVTLATRLGKEYSPEVHSAVDKFMSAVAAVLAEKYR 141 **********************************************************7 PP >> sp|Q7LZC3|HBA_STROE Hemoglobin subunit alpha-A OS=Streptopelia orientalis GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 155.2 0.2 8.3e-47 4e-44 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 155.2 bits; conditional E-value: 8.3e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ +k++vka+++k++ ++++ G+++L+r+f ++P+t+++F++F dLs ++sa++k Hgkkv++Al +a +++d ++ ++l++L sp|Q7LZC3|HBA_STROE 1 VLSASDKSNVKAAFGKIGGQAGDLGGQALERMFITYPQTKTYFPHF-DLS-----HGSAQIKGHGKKVAEALVEAANHID-DIAGALSKL 83 69********************************************.***.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+aa++p+ +t++v+a+l+K++ v ++l++kY+ sp|Q7LZC3|HBA_STROE 84 SDLHAQKLRVDPVNFKLLGHCFLVVVAAHFPSLLTPEVHASLDKFVLAVGTVLTAKYR 141 *********************************************************7 PP >> sp|P07407|HBA_PASMO Hemoglobin subunit alpha-A OS=Passer montanus GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 155.1 0.0 9.4e-47 4.6e-44 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 155.1 bits; conditional E-value: 9.4e-47 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k++vk v+ak++ ++ee+Gad+L+r+f ++P+t+++F++F dL k+sa+vk Hgkkv+ Al +a++++d +l ++l++L sp|P07407|HBA_PASMO 1 VLSPADKSNVKGVFAKIGGQAEEYGADALERMFATYPQTKTYFPHF-DLG-----KGSAQVKGHGKKVAAALVEAVNNID-DLAGALSKL 83 69********************************************.999.....************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a++ p+ +t++v+a l+K+l v ++l++kY+ sp|P07407|HBA_PASMO 84 SDLHAQKLRVDPVNFKLLGQCFLVVVATGNPALLTPEVHAPLDKFLCAVGTVLTAKYR 141 *********************************************************7 PP >> sp|P01976|HBA_DIDVI Hemoglobin subunit alpha OS=Didelphis virginiana GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 155.0 0.1 1e-46 4.9e-44 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 155.0 bits; conditional E-value: 1e-46 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+++kt+vk +W+kv+ + + + +++L r f+s+P+t+++F+++ d s +sa++k+ g+k++dA++ a+a+ld +++++l++L sp|P01976|HBA_DIDVI 1 VLSANDKTNVKGAWSKVGGNSGAYMGEALYRTFLSFPTTKTYFPNY-DFS-----AGSAQIKTQGQKIADAVGLAVAHLD-DMPTALSSL 83 69********************************************.888.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa++lkvdp +fk+l + +++++aa+l+k+ft++++a+++K+la+v+++l+skY+ sp|P01976|HBA_DIDVI 84 SDLHAHELKVDPVNFKFLCHNVLVTMAAHLGKDFTPEIHASMDKFLASVSTVLTSKYR 141 *********************************************************7 PP >> sp|P06636|HBA3_XENLA Hemoglobin subunit alpha-3 OS=Xenopus laevis GN=hba3 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 154.8 1.2 1.2e-46 5.6e-44 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 154.8 bits; conditional E-value: 1.2e-46 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 +L++ +k +v a+W+k+ +++ Ga++L+rlf+s+P+t+++F +F dLs ++sad+ +Hg kv++Al++a +++d +l+a+l++ sp|P06636|HBA3_XENLA 2 TLTDSDKAAVVALWGKIAPQANAIGAEALERLFLSYPQTKTYFSHF-DLS-----HGSADLANHGGKVVNALGEAAKHID-DLDAALST 83 6999******************************************.***.....************************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa +l+vdp +fklls+ + ++la ++ kef a+ qaa +K+la va++l+skY+ sp|P06636|HBA3_XENLA 84 LSDLHAYNLRVDPGNFKLLSHTIQVTLAIHFHKEFDAATQAAWDKFLAEVATVLTSKYR 142 **********************************************************7 PP >> sp|P06467|HBAZ_MOUSE Hemoglobin subunit zeta OS=Mus musculus GN=Hbz PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 154.6 0.1 1.3e-46 6.4e-44 3 149 .] 3 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 154.6 bits; conditional E-value: 1.3e-46 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L ++e+ + ++W k+ a++e G++ L+rlf s+P+t+++F++F dL+ ++s+++++Hg k+++A++da++++d +l+++l +L sp|P06467|HBAZ_MOUSE 3 LMKNERAIIMSMWEKMAAQAEPIGTETLERLFCSYPQTKTYFPHF-DLH-----HGSQQLRAHGFKIMTAVGDAVKSID-NLSSALTKL 84 778999***************************************.999.....*************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selHa l+vdp +fklls++l++++aar+p++ft++v+ a +K++++++ l++kY+ sp|P06467|HBAZ_MOUSE 85 SELHAYILRVDPVNFKLLSHCLLVTMAARFPADFTPEVHEAWDKFMSILSSILTEKYR 142 *********************************************************7 PP >> sp|P01997|HBA_STUVU Hemoglobin subunit alpha-A OS=Sturnus vulgaris GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 154.5 0.3 1.4e-46 6.6e-44 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 154.5 bits; conditional E-value: 1.4e-46 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+ +k +vkav++k++ ++ee Ga+ L+r+f ++P+t+++F++F dL k+sa+vk Hgkkv+ Al +a +++d ++ ++l++L sp|P01997|HBA_STUVU 1 VLSASDKANVKAVFGKIGGQAEEFGAETLERMFATYPQTKTYFPHF-DLG-----KGSAQVKGHGKKVAAALVEAANHVD-DIAGALSKL 83 69********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a++ p+ +t++v+a+l+K+l v ++l++kY+ sp|P01997|HBA_STUVU 84 SDLHAQKLRVDPVNFKLLGQCFLVVVASHNPALLTPEVHASLDKFLCAVGTVLTAKYR 141 *********************************************************7 PP >> sp|P15162|HBA_APUAP Hemoglobin subunit alpha-A OS=Apus apus GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 153.9 0.4 2.1e-46 1e-43 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 153.9 bits; conditional E-value: 2.1e-46 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk v+ak++ ++e G+++L r+f ++P t+++F++F dLs +sa+vk+Hgkkv+ Al +a +++d ++ ++l++L sp|P15162|HBA_APUAP 2 VLSAADKTNVKGVFAKIGGQAEALGGEALARMFAAYPPTKTYFPHF-DLS-----PGSAQVKAHGKKVASALVEAANNID-DIAGALSKL 84 8*********************************************.9**.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l va++l++kY+ sp|P15162|HBA_APUAP 85 SDLHAQKLRVDPVNFKLLGHCFLVVVAIHHPSVLTPEVHASLDKFLCAVATVLTAKYR 142 *********************************************************7 PP >> sp|P08423|HBB2_XENTR Hemoglobin subunit beta-2 OS=Xenopus tropicalis GN=hbb2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 153.5 1.1 2.9e-46 1.4e-43 2 148 .. 3 146 .. 2 147 .] 0.98 Alignments for each domain: == domain 1 score: 153.5 bits; conditional E-value: 2.9e-46 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +++ek ++ +vW+kv d+e+ G d+L rl++++P+tq++F +F++Ls ++ ++ +vk+Hg+kvl A++ a+++ld +++++lk sp|P08423|HBB2_XENTR 3 HWTAEEKATIASVWGKV--DIEQDGHDALSRLLVVYPWTQRYFSSFGNLSNVSAVSGNVKVKAHGNKVLSAVGSAIQHLD-DVKSHLKG 88 6799*************..************************************************************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 Ls++Ha+ l+vdp++fk l++vlv vlaa+l++ ft++vqa eKl a++ +l++ Y sp|P08423|HBB2_XENTR 89 LSKSHAEDLHVDPENFKRLADVLVIVLAAKLGSAFTPQVQAVWEKLNATLVAALSHGY 146 ******************************************************9988 PP >> sp|P14522|HBA_TURME Hemoglobin subunit alpha-A OS=Turdus merula GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 153.2 0.3 3.5e-46 1.7e-43 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 153.2 bits; conditional E-value: 3.5e-46 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt+vk++++k++ +++e+Ga+ L+r+f ++P+t+++F++F dL k+sa+vk+Hgkkv+ Al +a + +d ++ ++l++L sp|P14522|HBA_TURME 1 VLSAADKTNVKSAFSKIGGQADEYGAETLERMFATYPQTKTYFPHF-DLG-----KGSAQVKAHGKKVAAALVEAANAVD-DIAGALSKL 83 69********************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++++a++ p+ +t++v+a+l+K+l v ++l++kY+ sp|P14522|HBA_TURME 84 SDLHAQKLRVDPVNFKLLGQCFLVTVATHNPSLLTPEVHASLDKFLCAVGTVLTAKYR 141 *********************************************************7 PP >> sp|P14261|HBE_CAIMO Hemoglobin subunit epsilon OS=Cairina moschata GN=HBE PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 153.0 0.0 4e-46 2e-43 2 149 .] 3 147 .] 2 147 .] 0.99 Alignments for each domain: == domain 1 score: 153.0 bits; conditional E-value: 4e-46 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + s++ek+ ++ +W+kv +vee Ga++L rl+ ++P+tq+fF +F++Ls + ++ ++++v Hg+k + +++ +++ld ++++++++L sp|P14261|HBE_CAIMO 3 HWSAEEKQLITGLWGKV--NVEECGAEALARLLIVYPWTQRFFSSFGNLSSPTAIIGNPKVPPHGRKFFTSFGEPVKNLD-NIKNTYAKL 89 779**************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selH++kl+v+p++f+ll+++l+ vla++++++ft++ q +Kl+++va++l kY+ sp|P14261|HBE_CAIMO 90 SELHCEKLQVEPENFRLLGDILIIVLASHFARDFTPACQFPWQKLVSVVAHALPRKYH 147 *********************************************************7 PP >> sp|Q10733|HBB_CARCR Hemoglobin subunit beta OS=Caretta caretta GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 152.2 0.6 7e-46 3.4e-43 3 149 .] 3 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 152.2 bits; conditional E-value: 7e-46 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++e+ ++++W k+ +v+e G++ L r++ ++P+tq+fF F++L+ + +++ + ++++Hgkkvl+ ++ a++++d +++ +++dLs sp|Q10733|HBB_CARCR 3 WTAEERHYITSMWDKI--NVAEIGGESLARMLIVYPWTQKFFSDFGNLTSSSAIMHNVKIQEHGKKVLNSFGSAVKNMD-HIKETFADLS 89 6899************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +lH++ l+vdp++fkll+ +l+ vla +++ke t+ qaa +Kl++ va++l+ +Y+ sp|Q10733|HBB_CARCR 90 KLHCETLHVDPENFKLLGSILIIVLAMHFGKEPTPTWQAAWQKLVSAVAHALTLQYH 146 ******************************************************997 PP >> sp|P01982|HBA_RHEAM Hemoglobin subunit alpha-A OS=Rhea americana GN=HBAA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 152.2 0.2 7.1e-46 3.5e-43 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 152.2 bits; conditional E-value: 7.1e-46 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs +kt+vk+v+ak++ +++ +Ga+ L+r+f+++P+t+++F++F dL+ ++sa++k+Hgkkv+ Al da +++d ++ ++l++L sp|P01982|HBA_RHEAM 1 VLSGPDKTNVKNVFAKIGGHADAYGAETLERMFTTYPQTKTYFPHF-DLH-----HGSAQIKTHGKKVVSALIDAANNID-DIYGALSKL 83 69999*****************************************.999.....************************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v +l++kY+ sp|P01982|HBA_RHEAM 84 SDLHAQKLRVDPVNFKLLGQCFLVVVAIHHPSLLTPEVHASLDKFLCAVGAVLTAKYR 141 *********************************************************7 PP >> sp|P08422|HBA3_XENTR Hemoglobin subunit alpha-3 OS=Xenopus tropicalis GN=hba-l8 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 151.8 1.4 9.5e-46 4.6e-43 2 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 151.8 bits; conditional E-value: 9.5e-46 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 +L++ ek +v a+W+k+ ++ Ga++L+rlf+s+P+t+++F +F d+s ++sad+++Hg kv++Al++a ++l+ +l+a+l++ sp|P08422|HBA3_XENTR 2 TLTDSEKAAVVALWSKIAPQASAIGAEALERLFLSYPQTKTYFSHF-DVS-----HGSADLQNHGGKVVNALGEAAKHLN-DLDAALST 83 699*******************************************.888.....************************8.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa +l+vdp +fklls+ + ++la ++ kef a+ qaa +K+l+ va++l+skY+ sp|P08422|HBA3_XENTR 84 LSDLHAYNLRVDPGNFKLLSHTIQVTLAVHFQKEFDAATQAAWDKFLSEVATVLTSKYR 142 **********************************************************7 PP >> sp|P11896|HBA3_PLEWA Hemoglobin larval subunit alpha OS=Pleurodeles waltl PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 151.3 0.0 1.3e-45 6.6e-43 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 151.3 bits; conditional E-value: 1.3e-45 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs++ek v + +k+ + + G+++L rlf s+ +t+++F +F dLs +sadvk Hg kvl A+++a +++d ++++l++ sp|P11896|HBA3_PLEWA 2 VLSAEEKALVVGLCGKISGHCDALGGEALDRLFASFGQTRTYFSHF-DLS-----PGSADVKRHGGKVLSAIGEAAKHID-SMDQALSK 83 8*********************************************.9**.....9************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa +l+vdp +f+lls+++ vlaa++p++ft++ qaa +K+la v+ +l+skY+ sp|P11896|HBA3_PLEWA 84 LSDLHAYNLRVDPGNFQLLSHCIQAVLAAHFPADFTPQCQAAWDKFLAAVSAVLTSKYR 142 **********************************************************7 PP >> sp|P06637|HBA4_XENLA Hemoglobin subunit alpha-4 OS=Xenopus laevis GN=hba4 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 151.0 0.8 1.7e-45 8e-43 2 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 151.0 bits; conditional E-value: 1.7e-45 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 +L++ +k ++ a+W+k+ ++ Ga++L+rlf+s+P+t+++F +F d+s ++sad+ +Hg kv++Al++a +++d +l+++l++ sp|P06637|HBA4_XENLA 2 TLTDSDKAAIVALWGKIAPQASAIGAEALERLFLSYPQTKTYFSHF-DVS-----HGSADLSNHGGKVVNALGEAAKHID-DLDSALST 83 6999******************************************.888.....************************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa +l++dp +fklls+ + ++la ++ kef a+ qaa +K+la va++l+skY+ sp|P06637|HBA4_XENLA 84 LSDLHAYNLRIDPGNFKLLSHTIQVTLAIHFHKEFDAATQAAWDKFLAEVATVLTSKYR 142 **********************************************************7 PP >> sp|P84203|HBAC_GYMUN Hemoglobin cathodic subunit alpha OS=Gymnothorax unicolor PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 150.0 0.0 3.4e-45 1.7e-42 3 149 .] 2 143 .] 1 143 [] 0.98 Alignments for each domain: == domain 1 score: 150.0 bits; conditional E-value: 3.4e-45 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvl.dAlsdalakldekleaklkd 90 L++++kt vk+ W kv+ +++e G+++L r++ ++P t+ +F ++ dL +s+ vkkHgkk++ +A+sd + k+d +l + l++ sp|P84203|HBAC_GYMUN 2 LAPGDKTVVKKFWEKVGGQADEIGGEALSRMIAVYPPTRIYFSHWPDLA-----PGSPSVKKHGKKIImKAVSDSVGKMD-NLVGGLSA 84 899******************************************9999.....9***********8648**********.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa++l++dp +fk+ls+ ++++laa++p++fta+v+ a++K+l+ v+ +l+ kY+ sp|P84203|HBAC_GYMUN 85 LSDLHATRLHIDPSNFKILSHNILVTLAAHFPSDFTAEVHVAMDKFLSAVCAALSDKYR 143 **********************************************************7 PP >> sp|P14523|HBAD_TURME Hemoglobin subunit alpha-D OS=Turdus merula GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 149.8 0.1 4e-45 1.9e-42 2 149 .] 1 141 [] 1 141 [] 0.98 Alignments for each domain: == domain 1 score: 149.8 bits; conditional E-value: 4e-45 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vL+ ++k++v+++W+ e+ Ga++L r+f+s+P t+++F++F d++ ++s++++ Hgkk + Al++a++++d +l+++l++ sp|P14523|HBAD_TURME 1 VLTGEDKKHVQHIWGLLSGAEEDLGAEVLYRMFQSYPPTKTYFPHF-DVT-----QGSEQIRGHGKKFMAALGNAVKNVD-NLSQALSE 82 6999******************************************.777.....9************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa +l+vdp +fk+ls++l + laarl+ke++++v++a++K++a va +la+kY+ sp|P14523|HBAD_TURME 83 LSNLHAYNLRVDPVNFKFLSQCLQVALAARLGKEYSPEVHSAVDKFMAAVAAVLAEKYR 141 **********************************************************7 PP >> sp|P02011|HBA3_LITCT Hemoglobin subunit alpha-3 OS=Lithobates catesbeiana PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 149.5 0.0 4.8e-45 2.3e-42 3 149 .] 2 141 .] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 149.5 bits; conditional E-value: 4.8e-45 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+ ek +v+++ +k++++ G ++L+rlf+s+P+t+++F++F dL+ +sad+ +Hg k+++Al+ a ++ld +l ++l++L sp|P02011|HBA3_LITCT 2 LSASEKAAVLSIVGKIGSQGSALGSEALTRLFLSFPQTKTYFPHF-DLT-----PGSADLNTHGGKIINALAGAANHLD-DLAGNLSSL 83 9********************************************.999.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa +l+vdp +f ll++++ +vla+++p++fta+vqaa +K+lalv+ +l+skY+ sp|P02011|HBA3_LITCT 84 SDLHAYNLRVDPGNFPLLAHIIQVVLATHFPGDFTAEVQAAWDKFLALVSAVLTSKYR 141 *********************************************************7 PP >> sp|Q9PVU6|HBAE_ORYLA Hemoglobin embryonic subunit alpha OS=Oryzias latipes PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 149.1 0.4 6.4e-45 3.1e-42 2 149 .] 3 144 .] 2 144 .] 0.99 Alignments for each domain: == domain 1 score: 149.1 bits; conditional E-value: 6.4e-45 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 Ls+++k vka Wak+ +++ + Gad+L r+++++P+t+++F ++kdLs +sa vkkHg++v++ +++a+ k+d +l a l + sp|Q9PVU6|HBAE_ORYLA 3 SLSAKDKDVVKAFWAKISSKATDIGADALGRMLVVYPQTKTYFAHWKDLS-----PGSAPVKKHGQTVMGGVAEAVGKID-NLTAGLLN 85 59************************************************.....9************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa l+vdp +fk+ls+ +++vla +p++ft++v+ a++K+la +a +la+kY+ sp|Q9PVU6|HBAE_ORYLA 86 LSELHAFTLRVDPANFKILSHNILVVLAIMFPNDFTPEVHVAMDKFLAALALALAEKYR 144 **********************************************************7 PP >> sp|P01996|HBA_ARAAR Hemoglobin subunit alpha-A OS=Ara ararauna GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 148.9 0.2 7.6e-45 3.7e-42 2 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 148.9 bits; conditional E-value: 7.6e-45 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs +kt+vk +++k++ ++e++Ga++L+r+f ++P+t+++F++F d+s +sa+vk+Hgkkv+ Al +a +++d ++ ++l++L sp|P01996|HBA_ARAAR 2 VLSGSDKTNVKGIFSKIGGQAEDYGAEALERMFATFPQTKTYFPHF-DVS-----PGSAQVKAHGKKVAAALVEAANHID-DIATALSKL 84 79********************************************.888.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a + p+ +t++v+a+l+K+l v ++l++kY+ sp|P01996|HBA_ARAAR 85 SDLHAQKLRVDPVNFKLLGQCFLVVVAIHNPSALTPEVHASLDKFLCAVGNVLTAKYR 142 *********************************************************7 PP >> sp|P02133|HBB2_XENLA Hemoglobin subunit beta-2 OS=Xenopus laevis GN=hbb2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 148.9 0.2 7.7e-45 3.8e-42 2 148 .. 3 146 .. 2 147 .] 0.97 Alignments for each domain: == domain 1 score: 148.9 bits; conditional E-value: 7.7e-45 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +++ek ++++vW kv +ve G d+L rl+ ++P+tq++F +F++Ls ++++ ++a+v++Hgkkvl A+++a+ ++d ++++l++ sp|P02133|HBB2_XENLA 3 HWTAEEKAAITSVWQKV--NVEHDGHDALGRLLIVYPWTQRYFSNFGNLSNSAAVAGNAKVQAHGKKVLSAVGNAISHID-SVKSSLQQ 88 6799*************..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 Ls+ Ha++l vdp++fk ++ vlv vl a+l++ ft++vqaa eK++a++ l++ Y sp|P02133|HBB2_XENLA 89 LSKIHATELFVDPENFKRFGGVLVIVLGAKLGTAFTPKVQAAWEKFIAVLVDGLSQGY 146 *************************************************999988877 PP >> sp|P0C0U6|HBA_DRYCE Hemoglobin subunit alpha-A OS=Drymarchon corais erebennus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 148.3 0.0 1.1e-44 5.5e-42 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 148.3 bits; conditional E-value: 1.1e-44 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vL+e++k++v+a+W++v ++e +Ga+ L+rlf+++Pat+++F +F dLs +s ++k+Hgkkv+dA+++a+++ld ++ ++l++L sp|P0C0U6|HBA_DRYCE 1 VLTEEDKSRVRAAWGPVSKNAELYGAETLTRLFTAYPATKTYFHHF-DLS-----PGSSNLKTHGKKVIDAITEAVNNLD-DVAGALSKL 83 69********************************************.9**.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++l +++aa+ ++ + ++v +l+K+l lvak+l s+Y+ sp|P0C0U6|HBA_DRYCE 84 SDLHAQKLRVDPVNFKLLGHCLEVTIAAHNGGPLKPEVILSLDKFLCLVAKTLVSRYR 141 *********************************************************6 PP >> sp|P01984|HBA_PHORU Hemoglobin subunit alpha-A OS=Phoenicopterus ruber ruber GN=HBAA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 148.2 0.7 1.2e-44 6.1e-42 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 148.2 bits; conditional E-value: 1.2e-44 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs +k++vk +++kv+ + ee+ a+ L r+f ++P+t+++F++F dL+ +sa+vk+Hgkkv++Al++a +++d ++ ++l++L sp|P01984|HBA_PHORU 1 VLSSHDKSNVKGLFGKVGGHLEEYCAETLARMFAAYPQTKTYFPHF-DLQ-----PGSAQVKAHGKKVAGALAEAANHID-DIASALSKL 83 69********************************************.999.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lH +kl+vdp +fkll+++ ++v+a ++p+ +t++v+a+l+K+l v ++l++kY+ sp|P01984|HBA_PHORU 84 SDLHQHKLRVDPVNFKLLAHCFLVVMAIHHPSLLTPEVHASLDKFLCAVGTVLTAKYR 141 *********************************************************7 PP >> sp|P82316|HBBC_HOPLI Hemoglobin cathodic subunit beta OS=Hoplosternum littorale GN=hbb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 148.0 0.0 1.4e-44 7e-42 1 148 [. 1 145 [. 1 146 [] 0.99 Alignments for each domain: == domain 1 score: 148.0 bits; conditional E-value: 1.4e-44 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 v+ s+ae+ ++ a+W+k+ +++e G + L r++ ++P+tq++F kF+d+s +++ ++++v +Hgk vl+Al++++++ld +++a+++ sp|P82316|HBBC_HOPLI 1 VHFSDAERDAIAAIWGKI--HIDEIGPQSLARVLIVYPWTQRYFSKFGDMSSVAAISGNPKVAAHGKVVLGALEKGVKNLD-NVKATYS 86 5889**************..*************************************************************.******* PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 +Ls+lH++kl+vdp +f+ l++++ v+a+++++ ft++ q a +K+l++va +l+s+Y sp|P82316|HBBC_HOPLI 87 NLSQLHCEKLNVDPDNFRALGDCITIVVASKFGNAFTPELQNAWHKFLSVVAAALSSRY 145 *********************************************************99 PP >> sp|P83270|HBA1_ANAMI Hemoglobin subunit alpha-1 OS=Anarhichas minor GN=hba1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 147.8 0.4 1.7e-44 8.2e-42 2 149 .] 2 143 .] 1 143 [] 0.99 Alignments for each domain: == domain 1 score: 147.8 bits; conditional E-value: 1.7e-44 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 L++++k +v+a Wak +++e G d+L r+++++P+t+++F ++kdLs +s+ vkkHgk v++ ++da+ k++ +l+a l + sp|P83270|HBA1_ANAMI 2 SLTAKDKDTVRAFWAKASGKAAEIGSDALSRMLVVYPQTKTYFSHWKDLS-----PGSEPVKKHGKSVMGGVADAVMKIE-DLNAGLLN 84 599***********************************************.....9**********************98.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa l+vdp +fk+ls+ +++v+a +pk+ft++v+ a++K+la ++++la+kY+ sp|P83270|HBA1_ANAMI 85 LSELHAFTLRVDPANFKILSHNILVVMAIMFPKDFTPEVHVAMDKFLAALSRALAEKYR 143 **********************************************************7 PP >> sp|P19831|HBA_PSIKR Hemoglobin subunit alpha OS=Psittacula krameri GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 147.3 0.1 2.3e-44 1.1e-41 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 147.3 bits; conditional E-value: 2.3e-44 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs +kt+vk++++k++ +++++Ga++L+r+f+++P+t+++F++F d+s +sa+vk+Hgkkv++ ls+a +++d ++ ++l++L sp|P19831|HBA_PSIKR 1 VLSGTDKTNVKSIFSKIGGQADDYGAEALERMFVTYPQTKTYFPHF-DVS-----PGSAQVKAHGKKVAGGLSEAANHID-DIATSLSKL 83 6999******************************************.888.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fkll+++ ++v+a + p+ +t++++a+l+K+l v +l++kY+ sp|P19831|HBA_PSIKR 84 SDLHAQKLRVDPVNFKLLGQCFLVVVAIHNPSALTPEAHASLDKFLCAVGLVLTAKYR 141 *********************************************************7 PP >> sp|P02018|HBA_CARAU Hemoglobin subunit alpha OS=Carassius auratus GN=hba PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 147.4 0.0 2.3e-44 1.1e-41 3 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 147.4 bits; conditional E-value: 2.3e-44 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls+++k vka+Wak+++ ++e Ga++L r+++++P+t+++F ++ dLs +s vkkHgk++++A++da+ k+d +l ++l++Ls sp|P02018|HBA_CARAU 2 LSDKDKAVVKALWAKIGSRADEIGAEALGRMLTVYPQTKTYFSHWSDLS-----PGSGPVKKHGKTIMGAVGDAVSKID-DLVGALSALS 85 99***********************************************.....9***********************9.9********* PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elHa kl++dp +fk+l++ +++v+ +p++ft++v+ +++K+++ +a +l++kY+ sp|P02018|HBA_CARAU 86 ELHAFKLRIDPANFKILAHNVIVVIGMLFPGDFTPEVHMSVDKFFQNLALALSEKYR 142 ********************************************************7 PP >> sp|P80727|HBBC_ANGAN Hemoglobin cathodic subunit beta OS=Anguilla anguilla GN=hbb2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 147.1 0.0 2.7e-44 1.3e-41 3 148 .. 3 145 .. 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 147.1 bits; conditional E-value: 2.7e-44 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 s+ e+++++++W+k+ +v+e G ++L r++ ++P+tq++F kF+dLs +++++++a+v +Hgk vl+Al++a++++d ++++++++L sp|P80727|HBBC_ANGAN 3 WSASERSTITSLWGKI--NVAEIGPQALARVLIVYPWTQRYFGKFGDLSNAAAIQGNAKVAAHGKVVLGALEKAVKNMD-DVKGTYSKL 88 5899************..*************************************************************.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 s+lH +kl+vdp +f+ll+++l vla++l++ f a++qa +K++a+v +l+++Y sp|P80727|HBBC_ANGAN 89 SQLHNEKLNVDPDNFRLLGDCLTIVLATKLGAGFPAEIQAVWQKFVAVVVSALSKQY 145 *****************************************************9999 PP >> sp|P11748|HBA_THUTH Hemoglobin subunit alpha OS=Thunnus thynnus GN=hba PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 147.0 0.1 3e-44 1.4e-41 2 149 .] 2 143 .] 1 143 [] 0.98 Alignments for each domain: == domain 1 score: 147.0 bits; conditional E-value: 3e-44 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 +Ls+++k++vka+W+k+ ++ Gad+L r++ ++P+t+++F ++ d+s +s vk+Hgkkv++ ++ a+ k+d +l + l dL sp|P11748|HBA_THUTH 2 TLSDKDKSTVKALWGKISKSADAIGADALGRMLAVYPQTKTYFSHWPDMS-----PGSGPVKAHGKKVMGGVALAVTKID-DLTTGLGDL 85 69********************************************9999.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selHa k++vdp +fk+ls+++++v+a+ +pkeft+d++ +l+K+la+va +la++Y+ sp|P11748|HBA_THUTH 86 SELHAFKMRVDPSNFKILSHCILVVVAKMFPKEFTPDAHVSLDKFLASVALALAERYR 143 *********************************************************6 PP >> sp|Q9PRL9|HBA1_NAJNA Hemoglobin subunit alpha-1 OS=Naja naja PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 146.4 0.0 4.4e-44 2.1e-41 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 146.4 bits; conditional E-value: 4.4e-44 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vL++++k +v+a W +v+ ++e +G + L+r+f ++P+t+++F++F dLs +s+++++Hgkkv+dA+++a+++ld ++ ++l++ sp|Q9PRL9|HBA1_NAJNA 1 VLTDEDKARVRASWVPVGKNAELYGSETLTRMFAAHPTTKTYFPHF-DLS-----PGSNNLRAHGKKVIDAITEAVNNLD-DVAGTLSK 82 699*******************************************.9**.....9***********************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa+kl+vdp +fkll+++l++++aa+ ++ + ++v +l+K+l ++k+l skY+ sp|Q9PRL9|HBA1_NAJNA 83 LSDLHAQKLRVDPVNFKLLAHCLLVTIAAHNGGVLKPEVIVSLDKFLGDLSKDLVSKYR 141 **********************************************************7 PP >> sp|P02142|HBB1_ONCMY Hemoglobin subunit beta-1 OS=Oncorhynchus mykiss GN=hbb1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 146.1 0.0 5.7e-44 2.8e-41 4 148 .. 4 145 .. 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 146.1 bits; conditional E-value: 5.7e-44 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++aek+++ avW+kv +++e G +L r++ ++P+tq++F +F+++st+++++++++v +Hgk v +Al +a++++ ++ a++k+Ls sp|P02142|HBB1_ONCMY 4 TDAEKSTISAVWGKV--NIDEIGPLALARVLIVYPWTQRYFGSFGNVSTPAAIMGNPKVAAHGKVVCGALDKAVKNMG-NILATYKSLS 89 789************..***********************************************************97.9********* PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 e Ha+kl vdp +f++l++vl v+aa++++ ft+++qa+ +K++++v ++ s+Y sp|P02142|HBB1_ONCMY 90 ETHANKLFVDPDNFRVLADVLTIVIAAKFGASFTPEIQATWQKFMKVVVAAMGSRY 145 ****************************************************9999 PP >> sp|Q90487|HBA_DANRE Hemoglobin subunit alpha OS=Danio rerio GN=hbaa1 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 145.4 0.1 9.2e-44 4.5e-41 2 149 .] 2 143 .] 1 143 [] 0.99 Alignments for each domain: == domain 1 score: 145.4 bits; conditional E-value: 9.2e-44 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+ +k vka+Wak+ +++e Ga++L r+++++P+t+++F ++ dLs +s vkkHgk++++A+++a+ k+d +l + l++L sp|Q90487|HBA_DANRE 2 SLSDTDKAVVKAIWAKISPKADEIGAEALARMLTVYPQTKTYFSHWADLS-----PGSGPVKKHGKTIMGAVGEAISKID-DLVGGLAAL 85 59************************************************.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selHa kl+vdp +fk+ls+ +++v+a +p++ft++v+ +++K+++ +a +l++kY+ sp|Q90487|HBA_DANRE 86 SELHAFKLRVDPANFKILSHNVIVVIAMLFPADFTPEVHVSVDKFFNNLALALSEKYR 143 *********************************************************7 PP >> sp|P10062|HBAD_SPHPU Hemoglobin subunit alpha-D OS=Sphenodon punctatus GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 145.3 0.1 9.9e-44 4.8e-41 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 145.3 bits; conditional E-value: 9.9e-44 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vL+ ++ + +++ W kv + e+ Ga++L+r+f ++P+t+++F++F dL+ ++s+++++Hg+kv++Al++a++++d +++++ + sp|P10062|HBAD_SPHPU 1 VLTHEDCELLQQTWEKVLGHQEDFGAEALERMFITYPQTKTYFPHF-DLH-----HGSEQIRNHGRKVVNALGEAVKNMD-HMSTASGE 82 69999*****************************************.999.....*************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa +l+vdp +fkllse+ +vla +l ++t+dv+ a++K+l+ v +la+kY+ sp|P10062|HBAD_SPHPU 83 LSNLHAYNLRVDPVNFKLLSECFEVVLAVHLKDQYTPDVHRAYDKFLSAVGDMLAEKYR 141 **********************************************************7 PP >> sp|P18974|HBA1_IGUIG Hemoglobin subunit alpha-1 OS=Iguana iguana PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 144.2 0.5 2.2e-43 1.1e-40 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 144.2 bits; conditional E-value: 2.2e-43 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vL+e++k++++a+W+ v+ + e G+++L+rlf+++Pat+++F +F dL+ +sa++k+Hgkkv+dAl++a+++ld +++ +l++ sp|P18974|HBA1_IGUIG 1 VLTEDDKNHIRAIWGHVDNNPEAFGVEALTRLFLAYPATKTYFAHF-DLN-----PGSAQIKAHGKKVVDALTQAVNNLD-DIPDALAK 82 69********************************************.999.....9***********************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 L++lHa+kl+vdp +f ll++++++++aa+ + + adv +++K+l vak+l + Y+ sp|P18974|HBA1_IGUIG 83 LADLHAEKLRVDPVNFGLLGHCILVTIAAHNHGPLKADVALSMDKFLTKVAKTLVAHYR 141 ********************************************************996 PP >> sp|P83271|HBA2_ANAMI Hemoglobin subunit alpha-2 OS=Anarhichas minor GN=hba2 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 143.9 0.3 2.6e-43 1.2e-40 2 149 .] 2 143 .] 1 143 [] 0.99 Alignments for each domain: == domain 1 score: 143.9 bits; conditional E-value: 2.6e-43 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 L+e++k +v a+W+k++ ++ Gad+L r+++++P+t+++F ++ dLs +sa vk+Hgk+v+ ++ a+ k+d ++ + l + sp|P83271|HBA2_ANAMI 2 SLTEKDKAAVIAMWGKIHKSADAIGADALGRMLVVYPQTKTYFSHWSDLS-----PNSAPVKTHGKNVMSGVALAVSKID-DMTKGLMA 84 599***********************************************.....89**********************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Lse+Ha +l+vdp +fk+ls+++++v+a+ +pk+ft++++ +++K++ ++ +la+kY+ sp|P83271|HBA2_ANAMI 85 LSEQHAFQLRVDPANFKILSHCILVVIASMFPKDFTPEAHVSMDKFFCGLSLALAEKYR 143 **********************************************************7 PP >> sp|P29624|HBA1_NOTAN Hemoglobin subunit alpha-1 OS=Notothenia angustata GN=hba1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 143.8 0.1 2.8e-43 1.4e-40 3 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 143.8 bits; conditional E-value: 2.8e-43 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+++k +v+a+W+k++ ++ G+d+L r+++++P+t+++F ++ d++ +sa++k+Hgkkv++ ++ a+ k+d +l+a l+dL sp|P29624|HBA1_NOTAN 2 LSDKDKAAVRALWSKIGKSADAIGNDALSRMIVVYPQTKTYFSHWPDVT-----PGSAHIKAHGKKVMGGIALAVSKID-DLKAGLSDL 84 99*******************************************8888.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 se+Ha kl+vdp +fk+l +++++v+ + +pk+ft++++ +l+K+l+ va +la++Y+ sp|P29624|HBA1_NOTAN 85 SEQHAYKLRVDPANFKILNHCILVVISTMFPKDFTPEAHVSLDKFLSGVALALAERYR 142 *********************************************************6 PP >> sp|P83478|HBBC_CONCO Hemoglobin cathodic subunit beta OS=Conger conger PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 143.6 0.0 3.1e-43 1.5e-40 3 148 .. 3 145 .. 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 143.6 bits; conditional E-value: 3.1e-43 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 s e++++ ++W+k+ +v+e G ++L r++ ++P+tq++F kF+dLs +++ ++a+ kHg++vl+Al++a++++d ++++++++L sp|P83478|HBBC_CONCO 3 WSSSERSTISTLWGKI--NVAEIGPQALARVLIVYPWTQRYFGKFGDLSSVAAIVGNANGAKHGRTVLQALGQAVNNMD-NIKGTYAKL 88 5889************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 s++H+++l+vdp +f+ll+++l +vla+++++ef ++vqa +K++a+v +l+ +Y sp|P83478|HBBC_CONCO 89 SQKHSEELNVDPDNFRLLGDCLTVVLATKFGAEFPPEVQAVWQKFVAVVVSALSRQY 145 *****************************************************9998 PP >> sp|Q7LZC2|HBB1_MURHE Hemoglobin subunit beta-1 OS=Muraena helena GN=hbb1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 143.2 0.0 4.2e-43 2.1e-40 4 148 .. 4 145 .. 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 143.2 bits; conditional E-value: 4.2e-43 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 s +e+++++++W+k+ + +e G+ +L r++ ++P+tq++F +F+dLs +++ ++++v +Hgk vld +++a+++ld ++a++ +Ls sp|Q7LZC2|HBB1_MURHE 4 SSNERSTITSLWGKI--NNAEIGQVALARVLIVYPWTQRYFGQFGDLSSIAAISGNPKVAAHGKVVLDGVEKAVKNLD-SIKATYTKLS 89 889************..99***********************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 +lH++ l+vdp +fkll+++l vl a++++eft++vqa +K+l+ v +l+ +Y sp|Q7LZC2|HBB1_MURHE 90 QLHSDTLNVDPDNFKLLGDCLTIVLSAKFGAEFTPAVQAVWQKFLSCVISALSRQY 145 ****************************************************9998 PP >> sp|P23740|HBA_LATCH Hemoglobin subunit alpha OS=Latimeria chalumnae GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 143.2 1.8 4.3e-43 2.1e-40 3 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 143.2 bits; conditional E-value: 4.3e-43 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L++a+kt +k++W+kve + e G+++Lvrlfk +P+++ +F++F dLs +s+++++H+k vl+Al++a+++ld ++ +l+d+s sp|P23740|HBA_LATCH 2 LTAADKTLIKSIWGKVEKETEAIGVEALVRLFKCFPQSKVYFDHFTDLS-----PSSQKLHAHAKVVLGALTKAVNHLD-NITDTLHDIS 85 89***********************************************.....89***********************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Hakkl vdp +f+ll+++l + laa+++++ft++v+ a++K+l v k+l + Y+ sp|P23740|HBA_LATCH 86 LVHAKKLLVDPVNFELLGHCLEVALAAHFATDFTPEVHLAIDKFLYEVEKALFETYR 142 ****************************************************99996 PP >> sp|P86882|HBA_LYCRE Hemoglobin subunit alpha OS=Lycodes reticulatus GN=hba PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 143.2 0.2 4.4e-43 2.1e-40 3 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 143.2 bits; conditional E-value: 4.4e-43 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls+++k +vka+W k+ ++ Gad++ r+++++P+t+++F ++ dLs +sa vk+Hgk+v++ ++ a+ ++d ++ + lk+Ls sp|P86882|HBA_LYCRE 2 LSDKDKAAVKAIWNKISKSADVIGADAMGRMLVVYPQTKTYFSHWSDLS-----PNSAPVKNHGKTVMTGVALAVSNID-DMTTGLKALS 85 99***********************************************.....89**********************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha +l+vdp +fk+ls+++++v+a +pk+ft++++ +++K++ ++ +la+kY+ sp|P86882|HBA_LYCRE 86 EKHAFQLRVDPSNFKILSHCILVVIAMMYPKDFTPEAHVSMDKFFCGLSLALAEKYR 142 ********************************************************7 PP >> sp|P0C238|HBA_POGSC Hemoglobin subunit alpha OS=Pogonophryne scotti GN=hba PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 143.2 0.6 4.4e-43 2.2e-40 2 149 .] 2 143 .] 1 143 [] 0.99 Alignments for each domain: == domain 1 score: 143.2 bits; conditional E-value: 4.4e-43 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+++k++vka+W+k++ ++ G+d++ r+++++P+t+++F ++ dL+ +s ++k+Hgkkv++ ++ a+ k+d +l+a l++L sp|P0C238|HBA_POGSC 2 SLSDKDKSAVKALWSKINKSADVIGNDAVSRMIVVYPQTKTYFAHWPDLT-----PGSTHIKAHGKKVMGGIALAVSKID-DLKAGLSNL 85 59***********************************************9.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 se+Ha kl+vdp +fk+l +++++v+ + +pk+ft++++ +l+K+l+ va +la+kY+ sp|P0C238|HBA_POGSC 86 SEQHAFKLRVDPANFKILNHCIMVVISSMFPKDFTPEAHVSLDKFLSAVALALAEKYR 143 *********************************************************7 PP >> sp|P41331|HBA_MICGA Hemoglobin subunit alpha OS=Microcephalophis gracilis GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 142.9 0.0 5.5e-43 2.7e-40 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 142.9 bits; conditional E-value: 5.5e-43 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vL+e++k +v+ +W +v ++e +Ga+ L+rlf ++P+t+++F++F dLs +s+d+k Hgkkv+dAl++a+++ld ++ ++l++L sp|P41331|HBA_MICGA 1 VLTEEDKARVRVAWVPVSKNAELYGAETLTRLFAAHPTTKTYFPHF-DLS-----PGSNDLKVHGKKVIDALTEAVNNLD-DVAGALSKL 83 69********************************************.9**.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +f++l+ +l +++aa+ ++ + ++v +++K+l ++k+las+Y+ sp|P41331|HBA_MICGA 84 SDLHAQKLRVDPDNFQFLGLCLEVTIAAHSGGPLKPEVLLSVDKFLGQISKVLASRYR 141 *********************************************************7 PP >> sp|P83479|HBAC_CONCO Hemoglobin cathodic subunit alpha OS=Conger conger PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 142.7 0.2 6e-43 2.9e-40 2 149 .] 2 143 .] 1 143 [] 0.97 Alignments for each domain: == domain 1 score: 142.7 bits; conditional E-value: 6e-43 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 L++++kt vk+ W+kv+ +++ +Ga++L r+++++P+t+++F ++ d+ +s+ vk+ k++++A++da+ k+d +l + l++ sp|P83479|HBAC_CONCO 2 SLTAKDKTLVKTFWGKVKGKADAMGAEALGRMLVVYPQTKTYFAHWS-----DQSPGSEPVKHGKKTIMGAVGDAVGKID-NLLGGLSA 84 599*******************************************4.....6669******99999*************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Lse Ha+kl +dp +fklls++l+++ a ++p++fta+v+ a++K+la v+ +la kY+ sp|P83479|HBAC_CONCO 85 LSEVHATKLAIDPGNFKLLSHCLLVTFAVNYPTDFTAEVHVAVDKFLAAVSAALADKYR 143 **********************************************************7 PP >> sp|P11251|HBA_SALSA Hemoglobin subunit alpha OS=Salmo salar GN=hba PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 142.6 0.0 6.7e-43 3.3e-40 2 149 .] 2 143 .] 1 143 [] 0.99 Alignments for each domain: == domain 1 score: 142.6 bits; conditional E-value: 6.7e-43 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++ +k+ v+a W+k++ +++ +Ga++L r+++++P+t+++F ++ dLs +sa vkkHg +++A+++a+ +d +l + ++ L sp|P11251|HBA_SALSA 2 SLTARDKSVVNAFWGKIKGKADVVGAEALGRMLTAYPQTKTYFSHWADLS-----PGSAPVKKHGGVIMGAIGNAVGLMD-DLVGGMSGL 85 599***********************************************.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa kl+vdp +fk+ls+ ++++la ++p++ft++v+ a++K+la ++ +la kY+ sp|P11251|HBA_SALSA 86 SDLHAFKLRVDPGNFKILSHNILVTLAIHFPADFTPEVHIAVDKFLAALSAALADKYR 143 *********************************************************7 PP >> sp|P0C237|HBA_ARTOR Hemoglobin subunit alpha OS=Artedidraco orianae GN=hba PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 142.5 0.5 7.1e-43 3.5e-40 2 149 .] 2 143 .] 1 143 [] 0.99 Alignments for each domain: == domain 1 score: 142.5 bits; conditional E-value: 7.1e-43 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+++k +vka+W+k+ ++ G+d++ r+++++P+t+++F ++ dL+ +s ++k+Hgkkv++ ++ a+ k+d +l+a l+dL sp|P0C237|HBA_ARTOR 2 SLSDKDKAAVKALWSKIAKSADVIGNDAVSRMIVVYPQTKTYFAHWPDLT-----PGSTNIKAHGKKVMGGIALAVSKID-DLKAGLSDL 85 59***********************************************9.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 se+Ha kl+vdp +fk+l +++++v+ + +pk+ft++++ +l+K+l+ va +la+kY+ sp|P0C237|HBA_ARTOR 86 SEQHAFKLRVDPANFKILNHCIMVVISSMFPKDFTPEAHISLDKFLSAVALALAEKYR 143 *********************************************************7 PP >> sp|P83613|HBA2_GOBGI Hemoglobin subunit alpha-2 OS=Gobionotothen gibberifrons GN=hba2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 142.4 0.1 7.7e-43 3.8e-40 3 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 142.4 bits; conditional E-value: 7.7e-43 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls ++k++vka W+kv + ++ G+d+L r+++++P+t+++F ++k+L+ +sa v+kHg +v++ ++da+ k++ +l a l +L sp|P83613|HBA2_GOBGI 2 LSTKDKETVKAFWSKVSGKSADIGNDALSRMLVVYPQTKTYFSHWKELT-----PGSAPVRKHGMTVMKGVGDAVSKIE-DLTAGLMEL 84 99***********************************************.....9**********************98.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selHa l+vdp +fk+ls+ +++v a +p++ft+dv+ +++K+la + ++l++kY+ sp|P83613|HBA2_GOBGI 85 SELHAFTLRVDPANFKILSHNILVVFAIMFPNDFTPDVHVSMDKFLAALGRALSEKYR 142 *********************************************************7 PP >> sp|P84653|HBA1_COTGO Hemoglobin subunit alpha-1 OS=Cottoperca gobio GN=hba1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 142.0 0.1 9.8e-43 4.8e-40 2 149 .] 2 143 .] 1 143 [] 0.99 Alignments for each domain: == domain 1 score: 142.0 bits; conditional E-value: 9.8e-43 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 L+e++k +v+a+W+k+ ++ Gad+L r++ ++P+t+++F ++ dLs +s +vkkHgk+v++ ++ a+ k+d +l + l + sp|P84653|HBA1_COTGO 2 SLTEKDKAAVRALWGKISKSADAIGADALSRMLFVYPQTKTYFTHWPDLS-----PGSVHVKKHGKNVMGGIALAVSKID-DLTNGLME 84 599***********************************************.....99**********************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Lse+Ha +l+vdp +fk+ls+++++v+ +pk+ft++++ +l+K+l+ v+ +la++Y+ sp|P84653|HBA1_COTGO 85 LSEQHAYQLRVDPANFKILSHCILVVVSIMYPKDFTPEAHVSLDKFLSGVSLALAERYR 143 **********************************************************6 PP >> sp|Q9PVM2|HBBA_SERQU Hemoglobin subunit beta-A OS=Seriola quinqueradiata GN=hbb1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 142.0 0.0 9.8e-43 4.8e-40 4 149 .] 5 148 .] 2 148 .] 0.98 Alignments for each domain: == domain 1 score: 142.0 bits; conditional E-value: 9.8e-43 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++ae+ ++ ++W+k+ dv+e G ++L+rl+ ++P+tq++F F+++st++++ ++++v +Hgk+v++ l++a+++ld ++++++++Ls sp|Q9PVM2|HBBA_SERQU 5 TDAERAAISSLWGKI--DVGEIGPQALTRLLIVYPWTQRHFTTFGNVSTNAAILGNPKVAQHGKTVMGGLENAVKNLD-DIKNTYAKLS 90 789************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpke.ftadvqaaleKllalvakllaskYk 149 + H++kl+vdp +f+ l+e++ + +aa+++k+ ftadvq a +K+l++v +l +Y+ sp|Q9PVM2|HBBA_SERQU 91 QMHSEKLHVDPDNFRTLAECISVCVAAKFGKQvFTADVQEAWQKFLSVVVSALGRQYH 148 ******************************9779*******************99997 PP >> sp|P85083|HBA2_COTGO Hemoglobin subunit alpha-2 OS=Cottoperca gobio GN=hba2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 142.0 0.0 1e-42 4.9e-40 2 149 .] 2 143 .] 1 143 [] 0.99 Alignments for each domain: == domain 1 score: 142.0 bits; conditional E-value: 1e-42 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 Ls ++k +v+a W+kv +++++ G+d+L r+++++P+t+++F ++k+L +s+ v+kHg +v++ +++a+ak+d +l a l + sp|P85083|HBA2_COTGO 2 SLSTKDKDTVTAFWGKVSCKAGDIGTDALSRMLVVYPQTKTYFSHWKELG-----PGSPPVQKHGMTVMKGVGEAVAKID-DLTAGLLN 84 59************************************************.....9***********************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa l+vdp +fk+ls+ +++v a +p++ft++v+ +++K+la +a++l++kY+ sp|P85083|HBA2_COTGO 85 LSELHAFTLRVDPANFKILSHNILVVFAIMFPHDFTPEVHVSMDKFLAALARALSEKYR 143 **********************************************************7 PP >> sp|P14520|HBA_ELEEL Hemoglobin subunit alpha OS=Electrophorus electricus GN=hba PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 142.0 0.1 1e-42 5e-40 3 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 142.0 bits; conditional E-value: 1e-42 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L+++ k+ vka W+k+++ +++ Ga++ r+++++P+t+++F ++ dLs +sa vkkHgk++++ +++a+ ++d +l + l++Ls sp|P14520|HBA_ELEEL 2 LTAKSKSIVKAFWGKIGSRADDIGAEAFGRMLTVYPETKTYFASWSDLS-----PGSAAVKKHGKTIMGGIAEAVGHID-DLTGGLASLS 85 8999*********************************************.....9***********************9.9********* PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elHa kl+vdp +fk+l++ l++vla +p++ft++v+ a++K+++ va +l++kY+ sp|P14520|HBA_ELEEL 86 ELHAFKLRVDPANFKILAHNLIVVLALFFPADFTPEVHMAVDKFFQNVASALSEKYR 142 ********************************************************7 PP >> sp|P02010|HBA_VIPAS Hemoglobin subunit alpha OS=Vipera aspis GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 141.9 0.0 1.1e-42 5.1e-40 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 141.9 bits; conditional E-value: 1.1e-42 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLse++k++v++ +k +e+G + L+r+f ++P+t+++F++F dLs +s+++k+Hgkkv+dAl +a+ ld + a+l++L sp|P02010|HBA_VIPAS 1 VLSEDDKNRVRTSVGKNPELPGEYGSETLTRMFAAHPTTKTYFPHF-DLS-----SGSPNLKAHGKKVIDALDNAVEGLD-DAVATLSKL 83 69***************999**************************.9*9.....9***********************9.999****** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa+kl+vdp +fk+ls++l+ +la++ ef+++v a+++K+l v+++l skY+ sp|P02010|HBA_VIPAS 84 SDLHAQKLRVDPANFKILSQCLLSTLANHRNPEFGPAVLASVDKFLCNVSEVLESKYR 141 *********************************************************7 PP >> sp|P23741|HBB_LATCH Hemoglobin subunit beta OS=Latimeria chalumnae GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 141.7 1.5 1.2e-42 5.9e-40 2 149 .] 2 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 141.7 bits; conditional E-value: 1.2e-42 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + +e e+ ++++v+ k + +e+G ++L+rlf ++P+t ++F++F+dLs + ++ ++++v +Hg kv++ l++a+ +ld +++ +++L sp|P23741|HBB_LATCH 2 HWTETERATIETVYQKL--HLDEVGREALTRLFIVYPWTTRYFKSFGDLSSSKAIASNPKVTEHGLKVMNKLTEAIHNLD-HIKDLFHKL 88 67899************..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 se+H ++l+vdp++fklls++l+ vla++l+k++t+dvqa+ eKll++v +l+ Y+ sp|P23741|HBB_LATCH 89 SEKHFHELHVDPQNFKLLSKCLIIVLATKLGKQLTPDVQATWEKLLSVVVAALSREYH 146 ******************************************************9997 PP >> sp|P45719|HBA2_TRENE Hemoglobin subunit alpha-2 OS=Trematomus newnesi GN=hba2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 141.7 0.1 1.3e-42 6.2e-40 3 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 141.7 bits; conditional E-value: 1.3e-42 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls ++k++vka W+kv + e+ G+d+L r+++++P+t+ +F ++k+L+ +sa v+kHg +v++ ++da+ k++ +l a l +L sp|P45719|HBA2_TRENE 2 LSTKDKETVKAFWSKVSGKTEDIGNDALSRMLVVYPQTKIYFSHWKELT-----PGSAPVRKHGMTVMKGVGDAVSKIE-DLTAGLTEL 84 99***********************************************.....9**********************98.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selHa l+vdp +fk+ls+ +++v a +p++ft++v+ +++K+la ++++l++kY+ sp|P45719|HBA2_TRENE 85 SELHAFTLRVDPGNFKILSHNILVVFAIMFPNDFTPQVHVSMDKFLAALSRALSEKYR 142 *********************************************************7 PP >> sp|P06890|HBAT_PONPY Hemoglobin subunit theta-1 OS=Pongo pygmaeus GN=HBQ1 PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 141.4 0.1 1.6e-42 7.7e-40 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 141.4 bits; conditional E-value: 1.6e-42 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 Ls++++ v+a+W k +++v+ + +++L+r f+++Pat+++F + dLs +s +v++Hg+kv+dAls a+ +ld +l+ +l++ sp|P06890|HBAT_PONPY 2 ALSAEDRALVRALWKKLGSNVGVYTTEALERTFLAFPATKTYFSHL-DLS-----PGSSQVRAHGQKVADALSLAVERLD-DLPHALSA 83 69********************************************.9*9.....9***********************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa +l+vdp f+ll+++l+++la ++p++f+++ qa+l+K+l+ v +las Y+ sp|P06890|HBAT_PONPY 84 LSHLHACQLRVDPASFQLLGHCLLVTLARHYPGDFSPALQASLDKFLSHVISALASEYR 142 **********************************************************6 PP >> sp|P85081|HBA1_LIPTU Hemoglobin subunit alpha-1 OS=Liparis tunicatus GN=hba1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 141.1 0.0 1.9e-42 9.4e-40 2 149 .] 2 143 .] 1 143 [] 0.99 Alignments for each domain: == domain 1 score: 141.1 bits; conditional E-value: 1.9e-42 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 Ls ++k++vk +W+ + a ++ Gad+L rl++++P+t+ +F ++ dLs +s+ vk+Hgk+++ ++ a+ k+d +l++ l++ sp|P85081|HBA1_LIPTU 2 SLSTKDKETVKDLWGHISASADAIGADALGRLLVVYPQTKIYFLHWPDLS-----PNSPSVKNHGKNIMSGIALAVTKID-DLKSGLNA 84 59************************************************.....89**********************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Lse+Ha +l+vdp +fklls+++++vla r+p+eft++++ a++K++ v+ +la+kY+ sp|P85081|HBA1_LIPTU 85 LSEQHAFQLRVDPANFKLLSHCILVVLAIRFPHEFTPEAHVAMDKFFCGVSLALAEKYR 143 **********************************************************7 PP >> sp|Q9PVM1|HBBB_SERQU Hemoglobin subunit beta-B OS=Seriola quinqueradiata GN=hbb2 PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 141.0 0.0 2e-42 9.8e-40 4 149 .] 5 148 .] 2 148 .] 0.97 Alignments for each domain: == domain 1 score: 141.0 bits; conditional E-value: 2e-42 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++ae+ +++++W+k+ dv+e G ++L+rl+ ++P+tq++F F+++st++++ ++++v +Hgk+v++ l++a+++ld ++++++++Ls sp|Q9PVM1|HBBB_SERQU 5 TDAERAAITSLWGKI--DVGEIGPQALTRLLIVYPWTQRHFTTFGNVSTNAAILGNPKVAQHGKTVMGGLENAVKNLD-DIKNTYAKLS 90 789************..************************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpke.ftadvqaaleKllalvakllaskYk 149 H++kl+vdp +f+ l+e++ + +aa+++k+ ftadvq a +K+l+ v +l +Y+ sp|Q9PVM1|HBBB_SERQU 91 RMHSEKLHVDPDNFRALAECISVCVAAKFGKQaFTADVQEAWQKFLSAVVSALGRQYH 148 *****************************9855********************99997 PP >> sp|P80043|HBA_TREBE Hemoglobin subunit alpha OS=Trematomus bernacchii GN=hba PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 140.8 0.1 2.3e-42 1.1e-39 3 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 140.8 bits; conditional E-value: 2.3e-42 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls+++k +v+a+W+k++ ++ G+d+L r+++++P+t+++F ++ d++ +s+++k+Hgkkv++ ++ a+ k+d +l++ l +Ls sp|P80043|HBA_TREBE 2 LSDKDKAAVRALWSKIGKSADAIGNDALSRMIVVYPQTKTYFSHWPDVT-----PGSPHIKAHGKKVMGGIALAVSKID-DLKTGLMELS 85 99*******************************************8888.....9***********************9.9********* PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha kl+vdp +fk+l +++++v+ + +pkeft++++ +l+K+l+ va +la++Y+ sp|P80043|HBA_TREBE 86 EQHAYKLRVDPANFKILNHCILVVISTMFPKEFTPEAHVSLDKFLSGVALALAERYR 142 ********************************************************6 PP >> sp|P83114|HBB2_TELPE Hemoglobin subunit beta-2 OS=Telmatobius peruvianus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 140.8 0.2 2.4e-42 1.2e-39 1 149 [] 1 145 [] 1 145 [] 0.97 Alignments for each domain: == domain 1 score: 140.8 bits; conditional E-value: 2.4e-42 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 v+L+++e + ++a+W+kv d++++G+++L rl+ ++P+tq++F F++L +d++ + +v +Hg+kvl +++al++ld +l++ ++ sp|P83114|HBB2_TELPE 1 VHLTDQEIKYINAIWSKV--DYKQVGGEALARLLIVYPWTQRYFSTFGNLASADAISHNSKVIAHGEKVLRSIGEALKHLD-NLKG-YA 85 68****************..************************************************************9.7765.79 PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +Ls+ H++kl+vdp +f ++ v+v vla+++ +eft++vqaa+eK++ va ++ + Y+ sp|P83114|HBB2_TELPE 86 KLSQYHSEKLHVDPANFVRFGGVVVIVLAHHFHEEFTPEVQAAFEKAFGGVADAVGKGYH 145 9***************************************************99988886 PP >> sp|P51465|HBAB_LITCT Hemoglobin subunit alpha-B OS=Lithobates catesbeiana PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 140.0 0.8 4e-42 2e-39 3 149 .] 3 142 .] 1 142 [] 0.97 Alignments for each domain: == domain 1 score: 140.0 bits; conditional E-value: 4e-42 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 s+ ++ ++++W k+ +ve G+++++rlfks+P+t+++F + +++ ++sa v++ g kvl+A++ a ++ld +l+ +l++L sp|P51465|HBAB_LITCT 3 FSASDRHDITHLWEKMAPNVEFLGEEAMERLFKSHPKTKTYFSHL-NVE-----HGSAAVRAQGAKVLNAIGHASKNLD-HLDEALSNL 84 7999**************************************998.566.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s++Ha+ l+vdp +f+ll + +++vla ++p++ft+ ++aa++K+la v+++l skY+ sp|P51465|HBAB_LITCT 85 SDKHAHDLRVDPGNFHLLCHNILVVLAIHFPEDFTPRAHAAFDKFLAAVSETLYSKYR 142 *********************************************************7 PP >> sp|P09105|HBAT_HUMAN Hemoglobin subunit theta-1 OS=Homo sapiens GN=HBQ1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 139.5 0.1 5.8e-42 2.8e-39 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 139.5 bits; conditional E-value: 5.8e-42 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 Ls++++ v+a+W k +++v+ + +++L+r f+++Pat+++F + dLs +s +v++Hg+kv+dAls a+ +ld +l+ +l++ sp|P09105|HBAT_HUMAN 2 ALSAEDRALVRALWKKLGSNVGVYTTEALERTFLAFPATKTYFSHL-DLS-----PGSSQVRAHGQKVADALSLAVERLD-DLPHALSA 83 69********************************************.9*9.....9***********************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa +l+vdp f+ll+++l+++la ++p++f+++ qa+l+K+l+ v +l s Y+ sp|P09105|HBAT_HUMAN 84 LSHLHACQLRVDPASFQLLGHCLLVTLARHYPGDFSPALQASLDKFLSHVISALVSEYR 142 *********************************************************96 PP >> sp|P82315|HBAC_HOPLI Hemoglobin cathodic subunit alpha OS=Hoplosternum littorale PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 139.4 1.0 6.5e-42 3.2e-39 3 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 139.4 bits; conditional E-value: 6.5e-42 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k vka ++k+ +++ +G ++Lvr+++++P+t+++F ++ dLs +s++vkkHgk+++ A+++a+ k+d +l + +++L sp|P82315|HBAC_HOPLI 2 LTAKDKALVKAFFGKIAGKADAVGHEALVRMLVVYPQTKTYFAHWPDLS-----PSSEEVKKHGKTIMAAVKEAVGKID-DLVGGMAQL 84 899**********************************************.....89**********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa k++vdp +fk+ls+ ++++ a ++p +ft++v+ +++K+la ++ + a kY+ sp|P82315|HBAC_HOPLI 85 SDLHAFKMRVDPSNFKILSHNILVTCAVHFPDDFTPEVHVSFDKFLAALSSTAADKYR 142 *********************************************************6 PP >> sp|P07428|HBA_XENTR Hemoglobin subunit alpha OS=Xenopus tropicalis GN=hba-A PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 139.2 0.6 7.3e-42 3.6e-39 2 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 139.2 bits; conditional E-value: 7.3e-42 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 +L++++k+++ka+W v a+ +++G+++L r+f+ P+t+++F+ F d s + s+++ +Hgkkv dAl++a ++ld ++ + l++L sp|P07428|HBA_XENTR 2 HLTADDKKHIKAIWPSVAAHGDKYGGEALHRMFMCAPKTKTYFPDF-DFS-----EHSKHILAHGKKVSDALNEACNHLD-NIAGCLSKL 84 89********************************************.888.....89***********************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa l+vdp +f ll++ +++v+a ++pk+f ++ + al+K+l +v+++l+skY+ sp|P07428|HBA_XENTR 85 SDLHAYDLRVDPGNFPLLAHQILVVVAIHFPKQFDPATHKALDKFLVSVSNVLTSKYR 142 *********************************************************7 PP >> sp|P84206|HBBA_GYMUN Hemoglobin anodic subunit beta OS=Gymnothorax unicolor PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 139.0 0.1 8.6e-42 4.2e-39 4 149 .] 4 147 .] 1 147 [] 0.97 Alignments for each domain: == domain 1 score: 139.0 bits; conditional E-value: 8.6e-42 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++e+t+++++W k+ +vee Ga+++ rl+ ++P+t+++F +F++Lst+ +++++++v kHg +v++ l +a++++d +++++++dLs sp|P84206|HBBA_GYMUN 4 TDGERTAILTLWKKI--NVEEIGAQAMGRLLIVYPWTHRHFASFGNLSTPSAIMSNDKVAKHGATVMGGLDKAIKNMD-DIKNAYRDLS 89 789************..*************************************************************.9********* PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarl.pkeftadvqaaleKllalvakllaskYk 149 H++kl+vdp +f+llse++ +aa++ pkef adv+ a K+l v+ +la +Y+ sp|P84206|HBBA_GYMUN 90 VMHSEKLHVDPDNFRLLSECITLCVAAKFgPKEFNADVHEAWYKFLMAVTSALARQYH 147 **********************9999999679*************************7 PP >> sp|P18981|HBA2_VARAL Hemoglobin subunit alpha-2 OS=Varanus albigularis PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 138.8 4.0 9.9e-42 4.8e-39 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 138.8 bits; conditional E-value: 9.9e-42 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vL+e++k++vk +Wa v+ +++e ad+L+r+f+++Pa++++F +F dLs +a++k+Hgkkv++Al++a+a+ld +++++l++ sp|P18981|HBA2_VARAL 1 VLTEDDKNHVKGLWAHVHDHIDEIAADALTRMFLAHPASKTYFAHF-DLS-----PDNAQIKAHGKKVANALNQAVAHLD-DIKGTLSK 82 69********************************************.***.....789*********************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa++l+vdp +f +l ++l + +aa+l ++ a+v +l+K+l+ v+k+l skY+ sp|P18981|HBA2_VARAL 83 LSELHAQQLRVDPVNFGFLRHCLEVSIAAHLHDHLKASVIVSLDKFLEEVCKDLVSKYR 141 **********************************************************7 PP >> sp|P10777|HBA1_NOTCO Hemoglobin subunit alpha-1 OS=Notothenia coriiceps neglecta GN=hba1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 138.5 0.1 1.2e-41 5.8e-39 3 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 138.5 bits; conditional E-value: 1.2e-41 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+++k +vka+W+k++ ++ G+d+L r+++++P+t+++F ++ ++ + +d+k+Hgkkv++ l+ a+ k++ +l+a l++L sp|P10777|HBA1_NOTCO 2 LSDKDKAAVKALWSKIGKSADAIGNDALSRMIVVYPQTKTYFSHWPSVT-----PGHPDIKAHGKKVMGGLAIAVSKIN-DLKAGLSNL 84 99*******************************************8887.....89*********************98.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s++Ha kl+vdp +fk+l +++++v+ + +pk+ft++++ +l+K+l+ va +la++Y+ sp|P10777|HBA1_NOTCO 85 SQQHAYKLRVDPANFKILNHCILVVISTMFPKNFTPQAHVSLNKFLSGVALALAQRYR 142 *********************************************************6 PP >> sp|P14527|HBA4_ONCMY Hemoglobin subunit alpha-4 OS=Oncorhynchus mykiss GN=hba4 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 138.5 0.1 1.2e-41 6e-39 3 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 138.5 bits; conditional E-value: 1.2e-41 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+++k +vka+W+k+ + +e G+++L r+++++P+t+ +F ++ + +sa vkkHg ++++ + d + ++d +l + l +L sp|P14527|HBA4_ONCMY 2 LSAKDKANVKAIWGKILPKSDEIGEQALSRMLVVYPQTKAYFSHWASVA-----PGSAPVKKHGITIMNQIDDCVGHMD-DLFGFLTKL 84 9********************************************7776.....9************************.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selHa+kl+vdp +fk+l++ l++v+aa +p+eft++++ +++K+l+ +a +la+kY+ sp|P14527|HBA4_ONCMY 85 SELHATKLRVDPTNFKILAHNLIVVIAAYFPAEFTPEIHLSVDKFLQQLALALAEKYR 142 *********************************************************7 PP >> sp|P45718|HBA1_TRENE Hemoglobin subunit alpha-1 OS=Trematomus newnesi GN=hba1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 138.5 0.0 1.2e-41 6.1e-39 3 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 138.5 bits; conditional E-value: 1.2e-41 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+++k +v+a+W+k++ + G+d+L r+++++P+t+ +F ++ d++ +s+++k+Hgkkv++ ++ a+ k+d +l++ l +L sp|P45718|HBA1_TRENE 2 LSDKDKAAVRALWSKIGKSSDAIGNDALSRMIVVYPQTKIYFSHWPDVT-----PGSPNIKAHGKKVMGGIALAVSKID-DLKTGLMEL 84 99*******************************************8888.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 se+Ha kl+vdp +fk+l +++++v+ + +pkeft++++ +l+K+l+ va +la++Y+ sp|P45718|HBA1_TRENE 85 SEQHAYKLRVDPSNFKILNHCILVVISTMFPKEFTPEAHVSLDKFLSGVALALAERYR 142 *********************************************************6 PP >> sp|P83611|HBA1_GOBGI Hemoglobin subunit alpha-1 OS=Gobionotothen gibberifrons GN=hba1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 138.3 0.1 1.4e-41 7e-39 3 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 138.3 bits; conditional E-value: 1.4e-41 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls ++k +v+a+W+k+ + G+d+L r+++++P+t+++F ++ d++ +sa++k+Hgkkv++ ++ a+ k+d +l+a l +L sp|P83611|HBA1_GOBGI 2 LSVKDKAAVRALWSKISKSSDAIGNDALSRMIVVYPQTKTYFSHWPDVT-----PGSAHIKAHGKKVMGGIALAVSKID-DLNAGLLEL 84 899******************************************8888.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 se+Ha kl+vdp +fk+l +++++v+ + +pk+ft++++ +l+K+l+ va +la++Y+ sp|P83611|HBA1_GOBGI 85 SEQHAYKLRVDPANFKILNHCILVVISTMFPKDFTPEAHVSLDKFLSGVALALAERYR 142 *********************************************************6 PP >> sp|P82990|HBA_PAGBO Hemoglobin subunit alpha OS=Pagothenia borchgrevinki GN=hba PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 137.7 0.1 2.1e-41 1e-38 3 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 137.7 bits; conditional E-value: 2.1e-41 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Lse++k +vka+W+k++ + G+d+L r+++++P+t+++F ++ +++ +s+++k+Hgkkv++ ++ a+ k+d +l++ l++Ls sp|P82990|HBA_PAGBO 2 LSEKNKAAVKALWSKIGKSSDAIGNDALSRMIVVYPQTKTYFSHWPEVT-----PGSPHIKAHGKKVMGGIALAVTKID-DLKTGLSELS 85 9********************************************8888.....9***********************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha kl+vdp +fk l +++++v+ + +pkeft++++ +l+K+l+ va +la +Y+ sp|P82990|HBA_PAGBO 86 EQHAYKLRVDPANFKTLNHCILVVISTMFPKEFTPEAHVSLDKFLSGVALALADRYR 142 *******************************************************96 PP >> sp|P55267|HBAC_LITCT Hemoglobin subunit alpha-C OS=Lithobates catesbeiana PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 137.3 1.2 2.9e-41 1.4e-38 3 149 .] 3 142 .] 1 142 [] 0.97 Alignments for each domain: == domain 1 score: 137.3 bits; conditional E-value: 2.9e-41 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L ++k +++a+W +++e++Ga++L r+f+ +P+t+++F++F d + +sa++k+Hgkkv++Al+da+++ld + ea+l++L sp|P55267|HBAC_LITCT 3 LNCDDKAHIRAIWPCLASHAEQYGAEALHRMFLCHPQTKTYFPNF-DFH-----ANSAHLKNHGKKVMNALTDAVKHLD-HPEASLSSL 84 67789****************************************.776.....79***********************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa l+vdp +f lls+ +++v+a +++ +++ + + al+K+l++v+ ll+skY+ sp|P55267|HBAC_LITCT 85 SDLHAFTLRVDPGNFALLSNNILVVVAVHHSDKLSYETHQALDKFLNVVSGLLTSKYR 142 *********************************************************7 PP >> sp|P83623|HBA_PSEUR Hemoglobin subunit alpha OS=Pseudaphritis urvillii GN=hba PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 136.6 0.1 4.7e-41 2.3e-38 3 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 136.6 bits; conditional E-value: 4.7e-41 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 L++++k +vka+W+k+ ++ +Gad++ r+++++P+t+++F ++ dL +s++vk+Hgk+v++ ++ a+ k+d +l + l +Ls sp|P83623|HBA_PSEUR 2 LTDKDKATVKALWGKISKSADAVGADAVGRMIVVYPQTKTYFSHWPDLA-----PNSPHVKTHGKTVMTGIALAVSKID-DLTNGLLELS 85 899******************************************9999.....89**********************9.9********* PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e Ha k++vdp +fk+ls+++++v+a+ +pkeft++++ l+K+l v+ +l+++Y+ sp|P83623|HBA_PSEUR 86 EEHAYKMRVDPANFKILSHCMLVVIATMFPKEFTPEAHVCLDKFLCAVSLALSERYR 142 *******************************************************96 PP >> sp|P80270|HBA_CHEKU Hemoglobin subunit alpha OS=Chelidonichthys kumu GN=hba PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 136.6 0.2 4.7e-41 2.3e-38 3 149 .] 2 142 .] 1 142 [] 0.99 Alignments for each domain: == domain 1 score: 136.6 bits; conditional E-value: 4.7e-41 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls+++k++v+a+Wak+ ++ Ga++L r+++++P+t+++F ++ dLs +s vk+Hgk+++ +s a+ k+d +l a l +Ls sp|P80270|HBA_CHEKU 2 LSDKDKNTVRALWAKISKSADVIGAEALARMLTVYPQTKTYFTHWTDLS-----PSSTSVKNHGKNIMVGVSLAVSKMD-DLTAGLLELS 85 99***********************************************.....89***********************.9********* PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha +l+vdp +fklls++l++v+ +pkef+++v+ +++K++a +a +l+++Y+ sp|P80270|HBA_CHEKU 86 EKHAFQLRVDPANFKLLSHCLLVVISIMFPKEFGPEVHVSVDKFFANLALALSERYR 142 ******************************************************996 PP >> sp|P23018|HBB2_CYGMA Hemoglobin subunit beta-2 OS=Cygnodraco mawsoni GN=hbb2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 136.4 0.1 5.2e-41 2.5e-38 5 149 .] 5 146 .] 1 146 [] 0.97 Alignments for each domain: == domain 1 score: 136.4 bits; conditional E-value: 5.2e-41 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 + e+ ++k +++k +++ +G L r ++++P+tq++F kF++L ++++ ++a v kHg ++++ l +a++++d ++++++++Ls sp|P23018|HBB2_CYGMA 5 NFERATIKDIFSKL--EYDVVGPATLARCLVVYPWTQRYFGKFGNLYNAAAIAENAMVSKHGTTIIHGLDQAVKNMD-DIKNTYAELSV 90 6689999*******..9999*********************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +f+ll+e+l vlaa+l+keft +vqaa++K++a+v l ++Y+ sp|P23018|HBB2_CYGMA 91 LHCDKLHVDPDNFQLLAECLTIVLAAQLGKEFTGEVQAAFQKFMAVVVSSLGKQYH 146 ****************************************************9997 PP >> sp|Q8WWM9|CYGB_HUMAN Cytoglobin OS=Homo sapiens GN=CYGB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 136.2 0.2 6.3e-41 3.1e-38 3 149 .] 19 167 .. 17 167 .. 0.98 Alignments for each domain: == domain 1 score: 136.2 bits; conditional E-value: 6.3e-41 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklk 89 Lseae+++v+a+Wa+ +a+ e++G+ iLvr+f+ +P ++++F +Fk+++ + e++ s++++kH+ +v++Al+ ++ +l d +k+++ l+ sp|Q8WWM9|CYGB_HUMAN 19 LSEAERKAVQAMWARLYANCEDVGVAILVRFFVNFPSAKQYFSQFKHMEDPLEMERSPQLRKHACRVMGALNTVVENLhDpDKVSSVLA 107 9*****************************************************************************878999***** PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + + Ha k+kv+p yfk+ls v+++v+a++++++f ++ q a Kl l+ ++++Yk sp|Q8WWM9|CYGB_HUMAN 108 LVGKAHALKHKVEPVYFKILSGVILEVVAEEFASDFPPETQRAWAKLRGLIYSHVTAAYK 167 ***********************************************************7 PP >> sp|P02016|HBA_CYPCA Hemoglobin subunit alpha OS=Cyprinus carpio GN=hba PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 136.2 0.0 6.1e-41 3e-38 2 149 .] 2 143 .] 1 143 [] 0.99 Alignments for each domain: == domain 1 score: 136.2 bits; conditional E-value: 6.1e-41 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+++k +vk +Wak+ ++++ Ga++L r+++++P+t+++F ++ dLs +s vkkHgk +++A++da+ k+d +l + l++L sp|P02016|HBA_CYPCA 2 SLSDKDKAAVKGLWAKISPKADDIGAEALGRMLTVYPQTKTYFAHWADLS-----PGSGPVKKHGKVIMGAVGDAVSKID-DLVGGLAAL 85 59************************************************.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selHa kl+vdp +fk+l++ +++v+ +p++f ++v+ +++K+++ +a +l++kY+ sp|P02016|HBA_CYPCA 86 SELHAFKLRVDPANFKILAHNVIVVIGMLYPGDFPPEVHMSVDKFFQNLALALSEKYR 143 *********************************************************7 PP >> sp|P62363|HBA2_NOTAN Hemoglobin subunit alpha-2 OS=Notothenia angustata GN=hba2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 136.0 0.3 7.2e-41 3.5e-38 3 149 .] 2 141 .] 1 141 [] 0.98 Alignments for each domain: == domain 1 score: 136.0 bits; conditional E-value: 7.2e-41 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls ++k++vka W+kv + e+ G+d+L r+++++P+t+++F ++k+L+ +sa v+kHg +v++ ++da+ k++ +l a l +L sp|P62363|HBA2_NOTAN 2 LSTKDKETVKAFWSKVSGKSEDIGNDALSRMLVVYPQTKTYFSHWKELT-----PGSAPVRKHGMTVMKGVGDAVSKIE-DLTAGLMEL 84 99***********************************************.....9**********************98.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selHa l+vdp +fk +s+ +++v a +pkefta+v+ +++K+la +a++l++kY+ sp|P62363|HBA2_NOTAN 85 SELHAFTLRVDPANFK-ISHNILVVFAIMFPKEFTAEVHVSMDKFLAALARALSEKYR 141 ****************.6999999*********************************7 PP >> sp|P62387|HBA2_NOTCO Hemoglobin subunit alpha-2 OS=Notothenia coriiceps neglecta GN=hba2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 136.0 0.3 7.2e-41 3.5e-38 3 149 .] 2 141 .] 1 141 [] 0.98 Alignments for each domain: == domain 1 score: 136.0 bits; conditional E-value: 7.2e-41 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls ++k++vka W+kv + e+ G+d+L r+++++P+t+++F ++k+L+ +sa v+kHg +v++ ++da+ k++ +l a l +L sp|P62387|HBA2_NOTCO 2 LSTKDKETVKAFWSKVSGKSEDIGNDALSRMLVVYPQTKTYFSHWKELT-----PGSAPVRKHGMTVMKGVGDAVSKIE-DLTAGLMEL 84 99***********************************************.....9**********************98.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selHa l+vdp +fk +s+ +++v a +pkefta+v+ +++K+la +a++l++kY+ sp|P62387|HBA2_NOTCO 85 SELHAFTLRVDPANFK-ISHNILVVFAIMFPKEFTAEVHVSMDKFLAALARALSEKYR 141 ****************.6999999*********************************7 PP >> sp|P23016|HBA_CYGMA Hemoglobin subunit alpha OS=Cygnodraco mawsoni GN=hba PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 135.8 0.1 8e-41 3.9e-38 3 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 135.8 bits; conditional E-value: 8e-41 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls+++k +vka+W+ + + G+d+L r+++++P+t+++F ++ d++ +s +++ Hgkkv++ +s a+ k+d +l++ l +Ls sp|P23016|HBA_CYGMA 2 LSDKDKAAVKALWTTISKSSDAIGNDALSRMIVVYPQTKTYFSHWPDVT-----PGSTHIRDHGKKVMGGISLAVSKID-DLKTGLFELS 85 99*******************************************8888.....9***********************9.9********* PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha kl+vdp +fk+l +++++v+a+ +pkeft++++ +l+K+l+ va +la++Y+ sp|P23016|HBA_CYGMA 86 EQHAFKLRVDPANFKILNHCILVVIATMFPKEFTPEAHVSLDKFLSGVALALAERYR 142 ********************************************************6 PP >> sp|P02134|HBB_RANES Hemoglobin subunit beta OS=Rana esculenta GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 135.7 0.3 9.1e-41 4.4e-38 10 149 .] 4 140 .] 2 140 .] 0.97 Alignments for each domain: == domain 1 score: 135.7 bits; conditional E-value: 9.1e-41 globins4 10 kvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHakkl 99 v W+kv d+++ G+++L rl++++P+tq++F F++L +d++ +a+v +Hg+kvl A++++l++ e+l+a++++Lse H++kl sp|P02134|HBB_RANES 4 LVSGFWGKV--DAHKIGGEALARLLVVYPWTQRYFTTFGNLGSADAICHNAKVLAHGEKVLAAIGEGLKH-PENLKAHYAKLSEYHSNKL 90 57889****..8889*******************************************************.67***************** PP globins4 100 kvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +vdp +f+ll++v ++vla ++ +eft++ q ale + v +la++Y+ sp|P02134|HBB_RANES 91 HVDPANFRLLGNVFITVLARHFQHEFTPELQHALEAHFCAVGDALAKAYH 140 *************************************************7 PP >> sp|P02019|HBA1_ONCMY Hemoglobin subunit alpha-1 OS=Oncorhynchus mykiss GN=hba1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 135.0 0.0 1.4e-40 7e-38 3 149 .] 2 144 .] 1 144 [] 0.98 Alignments for each domain: == domain 1 score: 135.0 bits; conditional E-value: 1.4e-40 globins4 3 LseaektkvkavWakveadveesGadiLvr..lfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 L++++k+ vka W+k+ +++ +Ga++L r +++++P+t+++F ++ dLs +s vkkHg +++A+++a+ +d +l + ++ sp|P02019|HBA1_ONCMY 2 LTAKDKSVVKAFWGKISGKADVVGAEALGRdkMLTAYPQTKTYFSHWADLS-----PGSGPVKKHGGIIMGAIGKAVGLMD-DLVGGMS 84 899*************************8555*******************.....9***********************9.9****** PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +Ls+lHa kl+vdp +fk+ls+ ++++la ++p++ft++v+ a++K+la v+ +la kY+ sp|P02019|HBA1_ONCMY 85 ALSDLHAFKLRVDPGNFKILSHNILVTLAIHFPSDFTPEVHIAVDKFLAAVSAALADKYR 144 ***********************************************************7 PP >> sp|Q575S8|CYGB2_DANRE Cytoglobin-2 OS=Danio rerio GN=cygb2 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 134.8 0.0 1.6e-40 7.8e-38 2 148 .. 18 166 .. 17 167 .. 0.98 Alignments for each domain: == domain 1 score: 134.8 bits; conditional E-value: 1.6e-40 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleak 87 +L++ e+ +k Wa+v+a e++G+ iL+r+f+ +P ++++F +F+d++ ++e++ks +++kH+++v++A++ ++ +l d ek+++ sp|Q575S8|CYGB2_DANRE 18 PLTDVERGIIKDTWARVYASCEDVGVTILIRFFVNFPSAKQYFSQFQDMEDPEEMEKSSQLRKHARRVMNAINTVVENLhDpEKVSSV 105 589999*************************************************************************8799***** PP globins4 88 lkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 l + + Ha k+kv+p yfk+ls v++++la+++++ ft++vq++ Kl+a + ++ +Y sp|Q575S8|CYGB2_DANRE 106 LVLVGKAHAFKYKVEPIYFKILSGVILEILAEEFGECFTPEVQTSWSKLMAALYWHITGAY 166 *****************************************************99999998 PP >> sp|P80946|HBBA_ANGAN Hemoglobin anodic subunit beta OS=Anguilla anguilla GN=hbb1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 134.5 0.1 2.1e-40 1e-37 4 149 .] 4 147 .] 1 147 [] 0.98 Alignments for each domain: == domain 1 score: 134.5 bits; conditional E-value: 2.1e-40 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +e+e+t++k+ W k+ ++ee G +++ rl+ + P+tq++F +F++Lst+++++++++v kHg +v++ l a++++d ++++++++Ls sp|P80946|HBBA_ANGAN 4 TEDERTAIKSKWLKI--NIEEIGPQAMRRLLIVCPWTQRHFANFGNLSTAAAIMNNDKVAKHGTTVMGGLDRAIQNMD-DIKNAYRQLS 89 899************..************************************************************9.9********* PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarl.pkeftadvqaaleKllalvakllaskYk 149 H++kl+vdp +f+ll+e + +aa++ p+eftadvq a +K+l v+ +la +Y+ sp|P80946|HBBA_ANGAN 90 VMHSEKLHVDPDNFRLLAEHITLCMAAKFgPTEFTADVQEAWQKFLMAVTSALARQYH 147 ***************************99569*************************7 PP >> sp|Q9PVM4|HBAA_SERQU Hemoglobin subunit alpha-A OS=Seriola quinqueradiata GN=hbaa PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 134.3 0.1 2.3e-40 1.1e-37 2 149 .] 2 143 .] 1 143 [] 0.98 Alignments for each domain: == domain 1 score: 134.3 bits; conditional E-value: 2.3e-40 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 Ls ++k+ vka W k+ + +e Ga++L r+++++P+t+++F ++ d+ sa+vkkHg +++ A++da+ k+d +l + l++ sp|Q9PVM4|HBAA_SERQU 2 SLSGKDKSVVKAFWDKMSPKSAEIGAEALGRMLTVYPQTKTYFSHWADVG-----PDSAQVKKHGATIMAAVGDAVGKID-DLVGGLSA 84 5999******************************************8888.....88**********************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa kl+vdp +f++l++ ++ v a +p++ft++++ +++K+l+ +a +la++Y+ sp|Q9PVM4|HBAA_SERQU 85 LSELHAFKLRVDPANFRILAHNIILVTAMYFPTDFTPEIHVSVDKFLQNLALALAERYR 143 *********************************************************96 PP >> sp|Q98TS0|HBB_ONCNE Hemoglobin subunit beta OS=Oncorhynchus nerka GN=hbb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 134.3 0.0 2.4e-40 1.1e-37 4 149 .] 5 148 .] 2 148 .] 0.97 Alignments for each domain: == domain 1 score: 134.3 bits; conditional E-value: 2.4e-40 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 ++ae++++ +W+k+ v+e G ++L rl+ + P+tq++F F++Lst++++++++ v kHgk+v++ l a+++ld ++++++++Ls sp|Q98TS0|HBB_ONCNE 5 TDAERSAIVGLWGKI--SVDEIGPQALARLLIVSPWTQRHFSTFGNLSTPAAIMGNPAVAKHGKTVMHGLDRAVQNLD-DIKNTYAALSV 91 789************..9***********************************************************9.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarl.pkeftadvqaaleKllalvakllaskYk 149 H++kl+vdp +f+ll++++ + +aa+l p+ f ad q a++K+la+v +l +Y+ sp|Q98TS0|HBB_ONCNE 92 MHSEKLHVDPDNFRLLADCITVCVAAKLgPAVFNADTQEAFQKFLAVVVSALGRQYH 148 ********************999999984689********************99997 PP >> sp|P83624|HBB1_PSEUR Hemoglobin subunit beta-1 OS=Pseudaphritis urvillii GN=hbb1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 134.3 0.0 2.4e-40 1.2e-37 2 149 .] 2 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 134.3 bits; conditional E-value: 2.4e-40 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 v +++e++ + +++++ d+++ G +L r + ++P+tq++F F++L t+++++ + +v +Hg+kvl+ l a++++d +++a++ d sp|P83624|HBB1_PSEUR 2 VWTNEERSIISSIFSNL--DYDDIGPKALCRCLIVYPWTQRHFTTFGNLYTPEAIMTNSKVAEHGVKVLHGLDRAVKNMD-NIKATYYD 87 56899**********99..*************************************************************.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls lH++kl+vdp +fklls++l v+aa++++ ft++ qaa++K+la+v +l ++Y+ sp|P83624|HBB1_PSEUR 88 LSILHSEKLHVDPDNFKLLSDCLTIVVAAKMGSGFTPETQAAFQKFLAVVVSALGKQYH 146 ********************************************************997 PP >> sp|Q91473|HBB_SALSA Hemoglobin subunit beta OS=Salmo salar GN=hbb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 134.2 0.0 2.5e-40 1.2e-37 4 149 .] 5 148 .] 2 148 .] 0.97 Alignments for each domain: == domain 1 score: 134.2 bits; conditional E-value: 2.5e-40 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 ++ae++++ +W+k+ v+e G ++L rl+ + P+tq++F F++Lst++++++++ v kHgk+v++ l a+++ld ++++++ +Ls sp|Q91473|HBB_SALSA 5 TDAERSAIVGLWGKI--SVDEIGPQALARLLIVSPWTQRHFSTFGNLSTPAAIMGNPAVAKHGKTVMHGLDRAVQNLD-DIKNAYTALSV 91 789************..9***********************************************************9.9********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarl.pkeftadvqaaleKllalvakllaskYk 149 H++kl+vdp +f+ll++++ + +aa+l p+ f+ad+q a++K+la+v +l +Y+ sp|Q91473|HBB_SALSA 92 MHSEKLHVDPDNFRLLADCITVCVAAKLgPTVFSADIQEAFQKFLAVVVSALGRQYH 148 ********************999999984678********************99997 PP >> sp|P07430|HBA1_XENBO Hemoglobin subunit alpha-1 OS=Xenopus borealis GN=hba1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 133.7 0.6 3.7e-40 1.8e-37 3 149 .] 3 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 133.7 bits; conditional E-value: 3.7e-40 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+++k+++ka+ + a+ ++ G+++L r+f++ P+t+++F+ F d + ++s+++ +Hgkkv+dAl++a ++ld ++ ++l++L sp|P07430|HBA1_XENBO 3 LSADDKKHIKAIMPSIAAHGDKFGGEALYRMFLVNPKTKTYFPTF-DFH-----HNSKQISAHGKKVVDALNEASNHLD-NIAGSLSKL 84 9********************************************.777.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa l+vdp +f ll++ +++v+a ++pk+f ++ + al+K+la+v+ +l+skY+ sp|P07430|HBA1_XENBO 85 SDLHAYDLRVDPGNFPLLAHNILVVVAMNFPKQFDPATHKALDKFLATVSSVLTSKYR 142 *********************************************************7 PP >> sp|P02012|HBA1_XENLA Hemoglobin subunit alpha-1 OS=Xenopus laevis GN=hba1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 133.6 0.7 3.8e-40 1.9e-37 3 149 .] 3 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 133.6 bits; conditional E-value: 3.8e-40 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+++k+++ka+ + a+ ++ G+++L r+f + P+t+++F++F d + ++s+++ +Hgkkv+dAl++a ++ld ++ +++++L sp|P02012|HBA1_XENLA 3 LSADDKKHIKAIMPAIAAHGDKFGGEALYRMFIVNPKTKTYFPSF-DFH-----HNSKQISAHGKKVVDALNEASNHLD-NIAGSMSKL 84 9********************************************.777.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa l+vdp +f ll++ +++v+a ++pk+f ++ + al+K+la+v+++l+skY+ sp|P02012|HBA1_XENLA 85 SDLHAYDLRVDPGNFPLLAHNILVVVAMNFPKQFDPATHKALDKFLATVSTVLTSKYR 142 *********************************************************7 PP >> sp|P56251|HBB_LEIXA Hemoglobin subunit beta OS=Leiostomus xanthurus GN=hbb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 133.4 0.0 4.5e-40 2.2e-37 4 149 .] 4 147 .] 1 147 [] 0.97 Alignments for each domain: == domain 1 score: 133.4 bits; conditional E-value: 4.5e-40 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 ++ae+ ++ka+W+k+ dv+e G ++L rl+ ++P+tq++F+ F+++st++++ ++a+v +Hgk+v++ l a++++d ++++ +k+Ls sp|P56251|HBB_LEIXA 4 TDAERAAIKALWGKI--DVGEIGPQALSRLLIVYPWTQRHFKGFGNISTNAAILGNAKVAEHGKTVMGGLDRAVQNMD-NIKNVYKQLSI 90 789************..*************************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarl.pkeftadvqaaleKllalvakllaskYk 149 +H++k +vdp +f+ll+e++ + + a++ p+ ft++++ a +K+la+v +l +Y+ sp|P56251|HBB_LEIXA 91 KHSEKIHVDPDNFRLLGEIITMCVGAKFgPSAFTPEIHEAWQKFLAVVVSALGRQYH 147 *********************99999995689********************99997 PP >> sp|Q575T0|CYGB1_ORYLA Cytoglobin-1 OS=Oryzias latipes GN=cygb1 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 133.1 0.1 5.6e-40 2.7e-37 2 148 .. 16 164 .. 15 165 .. 0.98 Alignments for each domain: == domain 1 score: 133.1 bits; conditional E-value: 5.6e-40 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleak 87 +L+++e+ ++ Wakv+ + ++ G+ iLvrlf+ +P ++++F +Fk+++ ++el+ks +++kH+++v++A++ + +ld +k+++ sp|Q575T0|CYGB1_ORYLA 16 PLTDKERVMIQDSWAKVYQNCDDAGVAILVRLFVNFPSSKQYFSQFKHIEDAEELEKSSQLRKHARRVMNAINTLVESLDnsDKVSSV 103 6999***************************************************************************8678999** PP globins4 88 lkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 l+++ + Ha ++kvdp yfk+ls v+++vl + +p+ +ta+v +a lla+++ +++ Y sp|Q575T0|CYGB1_ORYLA 104 LNAVGKAHAIRHKVDPVYFKILSGVILEVLGEAYPQVMTAEVASAWTNLLAILCCSIKAVY 164 *********************************************************9998 PP >> sp|Q921A4|CYGB_RAT Cytoglobin OS=Rattus norvegicus GN=Cygb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 133.1 0.3 5.7e-40 2.8e-37 3 149 .] 19 167 .. 17 167 .. 0.98 Alignments for each domain: == domain 1 score: 133.1 bits; conditional E-value: 5.7e-40 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkdL 91 Lseae+++v+a Wa+ +a+ e++G+ iLvr+f+ +P ++++F +Fk+++ + e++ s++++kH+ +v++Al+ ++ +l d +k+++ l+ + sp|Q921A4|CYGB_RAT 19 LSEAERKAVQATWARLYANCEDVGVAILVRFFVNFPSAKQYFSQFKHMEDPLEMERSPQLRKHACRVMGALNTVVENLhDpDKVSSVLALV 109 9*****************************************************************************878999******* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + Ha k+kv+p yfk+ls v++dv+a++++++f + q a Kl l+ ++++Yk sp|Q921A4|CYGB_RAT 110 GKAHALKHKVEPMYFKILSGVILDVIAEEFANDFPVETQKAWTKLRGLIYSHVTAAYK 167 *********************************************************7 PP >> sp|P84609|HBA1_GADMO Hemoglobin subunit alpha-1 OS=Gadus morhua GN=hba1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 133.1 0.0 5.6e-40 2.7e-37 2 149 .] 2 143 .] 1 143 [] 0.99 Alignments for each domain: == domain 1 score: 133.1 bits; conditional E-value: 5.6e-40 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 Ls ++k +vk W+++ ++e Gad+L r++ ++P+t+++F ++k Ls +s+dvkkHgk+++ ++da+ k+d +le l + sp|P84609|HBA1_GADMO 2 SLSSKDKATVKLFWGRMSGKAELIGADALSRMLAVYPQTKTYFSHWKSLS-----PGSPDVKKHGKTIMMGIGDAVTKMD-DLERGLLT 84 59************************************************.....9************************.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa kl+vdp +fklls +++v+a +p +ft+ ++ a++Kl+ a +la+kY+ sp|P84609|HBA1_GADMO 85 LSELHAFKLRVDPTNFKLLSLNILVVMAIMFPDDFTPMAHLAVDKLFCGRALALAEKYR 143 **********************************************************7 PP >> sp|P80726|HBAC_ANGAN Hemoglobin cathodic subunit alpha OS=Anguilla anguilla PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 133.0 0.1 5.9e-40 2.9e-37 2 149 .] 2 143 .] 1 143 [] 0.98 Alignments for each domain: == domain 1 score: 133.0 bits; conditional E-value: 5.9e-40 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 L++++k+ ++ W k+ +++++ Ga++L r+++++Pat+ +F ++ dL +s+ vkkHgk ++ A++da+ k++ +l ++l++ sp|P80726|HBAC_ANGAN 2 SLTAKDKSLITGFWQKISSKADDLGAEALSRMIVVFPATKVYFSHWPDLG-----PGSPSVKKHGKVIMAAVGDAVGKMN-DLVGALSA 84 599**********************************************9.....9***********************8.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa k+++dp +fk ls+ +++ a ++p +fta+v+ a++K+la + +l+ kY+ sp|P80726|HBAC_ANGAN 85 LSDLHAFKMRIDPGNFKTLSHNILVACAVNFPVDFTAEVHVAMDKFLAALGAALSDKYR 143 **********************************************************7 PP >> sp|P07433|HBB2_XENBO Hemoglobin subunit beta-2 OS=Xenopus borealis GN=hbb2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 132.7 0.0 7.6e-40 3.7e-37 3 149 .] 3 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 132.7 bits; conditional E-value: 7.6e-40 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++ ek+ ++ W+k+ +++ G+++L rl+ ++P+tq++F +F++L ++++ ++ v +Hg+kv++ +++a++++d ++++ +++L sp|P07433|HBB2_XENBO 3 LTAHEKQLITGSWGKI--NAKAIGKEALGRLLNTFPWTQRYFSSFGNLGSAEAIFHNEAVAAHGEKVVTSVGEAIKHMD-DIKGYYAEL 88 899*************..8889*********************************************************.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+ H++ l+vdp++fk ++ +l +l +++++e+t++ +aa+e l++ +a +l + Y+ sp|P07433|HBB2_XENBO 89 SKYHSETLHVDPNNFKRFGGCLSITLGHHFGEEYTPELHAAYEHLFDAIADALGKGYH 146 *****************************************************99986 PP >> sp|P02141|HBB4_ONCMY Hemoglobin subunit beta-4 OS=Oncorhynchus mykiss GN=hbb4 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 132.3 0.0 1e-39 4.9e-37 4 149 .] 5 148 .] 2 148 .] 0.96 Alignments for each domain: == domain 1 score: 132.3 bits; conditional E-value: 1e-39 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++ e++++ +W+k+ v+e G ++L rl+ + P+tq++F F++Lst++++++++ v kHgk+v++ l a+++ld ++++++ +Ls sp|P02141|HBB4_ONCMY 5 TDPERSAIVGLWGKI--SVDEIGPQALARLLIVSPWTQRHFSTFGNLSTPAAIMGNPAVAKHGKTVMHGLDRAVQNLD-DIKNTYTALS 90 567999*********..9***********************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarl.pkeftadvqaaleKllalvakllaskYk 149 H++kl+vdp +f+ll++++ + +aa+l p+ f+ad q a++K+la+v +l +Y+ sp|P02141|HBB4_ONCMY 91 VMHSEKLHVDPDNFRLLADCITVCVAAKLgPAVFSADTQEAFQKFLAVVVSALGRQYH 148 *********************999999984689********************99997 PP >> sp|Q90486|HBB1_DANRE Hemoglobin subunit beta-1 OS=Danio rerio GN=ba1 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 132.0 0.0 1.2e-39 5.7e-37 4 149 .] 5 148 .] 2 148 .] 0.97 Alignments for each domain: == domain 1 score: 132.0 bits; conditional E-value: 1.2e-39 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++ae+t+++ +W+k +++e G ++L r + ++P+tq++F F++Ls +++++++++v +Hg++v++ l+ a++++d ++++++++Ls sp|Q90486|HBB1_DANRE 5 TDAERTAILGLWGKL--NIDEIGPQALSRCLIVYPWTQRYFATFGNLSSPAAIMGNPKVAAHGRTVMGGLERAIKNMD-NVKNTYAALS 90 789************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpk.eftadvqaaleKllalvakllaskYk 149 H++kl+vdp +f+ll++++ + a ++++ f advq a +K+la+v +l +Y+ sp|Q90486|HBB1_DANRE 91 VMHSEKLHVDPDNFRLLADCITVCAAMKFGQaGFNADVQEAWQKFLAVVVSALCRQYH 148 *****************************8527*********************9997 PP >> sp|P56250|HBA_LEIXA Hemoglobin subunit alpha OS=Leiostomus xanthurus GN=hba PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.9 0.0 1.3e-39 6.2e-37 3 149 .] 2 143 .] 1 143 [] 0.97 Alignments for each domain: == domain 1 score: 131.9 bits; conditional E-value: 1.3e-39 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls+ +k +vka+W k+e + +e Ga++L r+++s+P+t+ +F +++ +d + ++v++Hg ++ A+++a++++d +l + l++Ls sp|P56250|HBA_LEIXA 2 LSATDKARVKALWDKIEGKSAELGAEALGRMLVSFPQTKIYFSEWG----QDLGPQTPQVRNHGAVIMAAVGKAVKSID-NLVGGLSQLS 86 9*******************************************94....3444889**********************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 elHa kl+vdp +fk+l++ ++ v+ +p++ft++v+ +++K+la +a +l++kY+ sp|P56250|HBA_LEIXA 87 ELHAFKLRVDPANFKILAHNIILVISMYFPGDFTPEVHLSVDKFLACLALALSEKYR 143 ********************************************************7 PP >> sp|P82345|HBB0_PAGBO Hemoglobin subunit beta-0 OS=Pagothenia borchgrevinki GN=hbb0 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 132.0 0.1 1.2e-39 6e-37 5 149 .] 5 146 .] 1 146 [] 0.97 Alignments for each domain: == domain 1 score: 132.0 bits; conditional E-value: 1.2e-39 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 + e+ ++k +++k +++ +G L r ++++P+tq++F kF++L t+ ++ ++a v kHg ++l+ l a++++d ++++++++Ls sp|P82345|HBB0_PAGBO 5 DFERATIKDIFSKL--EYDVVGPATLARCLVVYPWTQRYFAKFGNLYTATAIAENAMVSKHGITILHGLDRAVKNMD-DIKNTYAELSV 90 568999********..9999*********************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fkll+++l v+aar+++ ft +vqaa+eK++a+v l +Y+ sp|P82345|HBB0_PAGBO 91 LHSEKLHVDPDNFKLLADCLTIVVAARFGSAFTGEVQAAFEKFMAVVVSSLGRQYH 146 ***************************************************99997 PP >> sp|Q90485|HBB2_DANRE Hemoglobin subunit beta-2 OS=Danio rerio GN=ba2 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.5 0.0 1.8e-39 8.7e-37 4 149 .] 5 148 .] 2 148 .] 0.97 Alignments for each domain: == domain 1 score: 131.5 bits; conditional E-value: 1.8e-39 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++ae+t+++ +W+k +++e G ++L r + ++P+tq++F F++Ls +++++++++v +Hg++v++ l+ a++++d ++++++++Ls sp|Q90485|HBB2_DANRE 5 TDAERTAILGLWGKL--NIDEIGPQALSRCLIVYPWTQRYFATFGNLSSPAAIMGNPKVAAHGRTVMGGLERAIKNMD-NIKNTYAALS 90 789************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpk.eftadvqaaleKllalvakllaskYk 149 H++kl+vdp +fkll++++ + a ++++ f ad+q a +K+la+v +l +Y+ sp|Q90485|HBB2_DANRE 91 VMHSEKLHVDPDNFKLLADCITVCAAMKFGQaGFNADIQEAWQKFLAVVVSALCRQYH 148 *****************************8527*********************9997 PP >> sp|P84204|HBBC_GYMUN Hemoglobin cathodic subunit beta OS=Gymnothorax unicolor PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.4 0.0 1.9e-39 9.2e-37 4 148 .. 4 145 .. 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 131.4 bits; conditional E-value: 1.9e-39 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 s e+++++++W+kv +e G + r++ ++P+tq++F +F+dLs +++ ++a+v +Hgk vld + +a+++ld ++++++ +Ls sp|P84204|HBBC_GYMUN 4 SSSERSTITSLWGKV--IPAEIGPVAFARVLIVYPWTQRYFGNFGDLSNIAAISGNAKVAAHGKVVLDGVDKAVKNLD-NIKGAYTSLS 89 889************..789**********************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 lH++kl+vdp +fkll+++l vla+++++eft++vqa +K+l ++ ++l+ +Y sp|P84204|HBBC_GYMUN 90 LLHSEKLNVDPDNFKLLGDCLTIVLATKFGAEFTPKVQAVWQKFLIVLIHALSRQY 145 *************************************************9999988 PP >> sp|P83273|HBB2_ANAMI Hemoglobin subunit beta-2 OS=Anarhichas minor GN=hbb2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.3 0.0 2e-39 9.8e-37 5 149 .] 5 146 .] 1 146 [] 0.97 Alignments for each domain: == domain 1 score: 131.3 bits; conditional E-value: 2e-39 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 + e+ +++ +++k+ d+e +G +L r + ++P+tq++F +F++L +++++++++v kHg +l+ l +++++d +++ ++++Ls sp|P83273|HBB2_ANAMI 5 DFERATIQDIFSKM--DYEVVGPAALSRCLIVYPWTQRYFGSFGNLYNAAAIMGNPNVAKHGTIILHGLDRGVKNMD-NIKETYAELSV 90 56889999999*99..9************************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fkl+s++l +v+aa+++k ft +vqaa++K++a+v +l +Y+ sp|P83273|HBB2_ANAMI 91 LHSEKLHVDPDNFKLISDCLTVVVAAQFGKAFTGEVQAAFQKFMAVVVSALGRQYH 146 ***************************************************99997 PP >> sp|P45721|HBBC_TRENE Hemoglobin subunit beta-C OS=Trematomus newnesi PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.2 0.1 2.2e-39 1.1e-36 5 149 .] 5 146 .] 1 146 [] 0.97 Alignments for each domain: == domain 1 score: 131.2 bits; conditional E-value: 2.2e-39 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 + e+ ++k +++k +++ +G L r ++++P+tq++F kF++L ++++ ++a v kHg ++l+ l a++++d ++ +++++Ls sp|P45721|HBBC_TRENE 5 DFERATIKDIFSKL--EYDVVGPATLARCLVVYPWTQRYFGKFGNLYNAAAIAQNAMVSKHGTTILNGLDRAVKNMD-DITNTYAELSV 90 568999********..9999*********************************************************.9********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fkll+++l v+aar+++ ft +vqaa++K++a+v l ++Y+ sp|P45721|HBBC_TRENE 91 LHSEKLHVDPDNFKLLADCLTIVVAARFGSAFTGEVQAAFQKFMAVVVSSLGKQYR 146 ***************************************************99996 PP >> sp|P02017|HBA_CATCL Hemoglobin subunit alpha OS=Catostomus clarkii GN=hba PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.1 0.0 2.3e-39 1.1e-36 3 149 .] 2 142 .] 1 142 [] 0.96 Alignments for each domain: == domain 1 score: 131.1 bits; conditional E-value: 2.3e-39 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkv.ldAlsdalakldekleaklkdL 91 Ls+++k vk +Wak+ ++e Ga++L r+++++P+t+++F ++ dLs +s vk Hgkkv ++A++da+ k+d +l + l++L sp|P02017|HBA_CATCL 2 LSDKDKADVKIAWAKISPRADEIGAEALGRMLTVYPQTKTYFAHWADLS-----PGSGPVK-HGKKViMGAIGDAVTKFD-DLLGGLASL 84 99***********************************************.....9999998.67665169*********9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selHa+kl+vdp +fk+l++++ +v+ lp++f ++v+a+++K+++ +a +l +kY+ sp|P02017|HBA_CATCL 85 SELHASKLRVDPSNFKILANCITVVIMFYLPGDFPPEVHASVDKFFQNLALALGQKYR 142 *********************************************************7 PP >> sp|P02013|HBA2_XENLA Hemoglobin subunit alpha-2 OS=Xenopus laevis GN=hba2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 131.0 0.9 2.4e-39 1.2e-36 3 149 .] 3 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 131.0 bits; conditional E-value: 2.4e-39 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+++k+++ka+ + a+ ++ G+++ r+f++ P+t+++F++F d + ++s+++ Hgkkv+dAl++a ++ld ++ +++++L sp|P02013|HBA2_XENLA 3 LSADDKKHIKAIMPSIAAHGDKFGGEASYRMFLVNPKTKTYFPSF-DFH-----HNSKQITSHGKKVVDALNEAANHLD-NIAGSMSKL 84 9********************************************.777.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa l+vdp +f ll++ l++v+a ++pk+f ++ + al+K+la+v+++l+skY+ sp|P02013|HBA2_XENLA 85 SDLHAYDLRVDPGNFPLLAHNLLVVVAMHFPKQFDPATHKALDKFLATVSTVLTSKYR 142 *********************************************************7 PP >> sp|Q1AGS4|HBA2_ARCGL Hemoglobin subunit alpha-2 OS=Arctogadus glacialis GN=hba2 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 130.9 0.1 2.7e-39 1.3e-36 2 149 .] 2 143 .] 1 143 [] 0.99 Alignments for each domain: == domain 1 score: 130.9 bits; conditional E-value: 2.7e-39 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 Ls ++k +vk W+++ ++e Gad+L r++ ++P+t+ +F ++k Ls +s +vkkHgk+++ ++da+ k++ +le l + sp|Q1AGS4|HBA2_ARCGL 2 SLSSKDKATVKLFWGRMSGKAELIGADALSRMLAVYPQTKIYFSHWKSLS-----PGSSEVKKHGKTIMMGIGDAVTKME-DLERGLLT 84 59************************************************.....9**********************98.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa kl+vdp +fklls +++v+a +p++ft+ ++ a++K+l +a +l++kY+ sp|Q1AGS4|HBA2_ARCGL 85 LSELHAFKLRVDPTNFKLLSLNILVVMAIMFPEDFTPMAHLAVDKFLCALALALSEKYR 143 **********************************************************7 PP >> sp|O13163|HBB_SILAS Hemoglobin subunit beta OS=Silurus asotus GN=hbb PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 130.8 0.1 2.9e-39 1.4e-36 4 149 .] 5 148 .] 2 148 .] 0.96 Alignments for each domain: == domain 1 score: 130.8 bits; conditional E-value: 2.9e-39 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 ++ e+ + vW+k+ + +e G +L rl+ ++P+tq++F +F++Ls ++++ ++++v +Hgk v++ l +a+++ld ++++++++Lse sp|O13163|HBB_SILAS 5 TDXERHVIADVWGKI--NPDEIGPHALARLLIVYPWTQRYFSSFGNLSNAAAILGNPKVAAHGKVVVGGLDKAVKHLD-NVKGTYAKLSE 91 6789999********..99***********************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarl.pkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +f ll+++l +laa++ p+ ft++v+ +K+l++ +l ++Y+ sp|O13163|HBB_SILAS 92 LHSEKLHVDPSNFTLLADCLTITLAAKFgPSVFTPEVHEVWQKFLNVAVAALGKQYH 148 ***************************94578********************99997 PP >> sp|Q8UUR3|CYGB1_DANRE Cytoglobin-1 OS=Danio rerio GN=cygb1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 130.7 0.0 3.1e-39 1.5e-36 3 148 .. 16 164 .. 14 165 .. 0.95 Alignments for each domain: == domain 1 score: 130.7 bits; conditional E-value: 3.1e-39 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleakl 88 L+e++ ++ W +v+a+ ++ G+ +Lvr+f+ +P ++++Fe+F++L+ ++e++++a++k+Hg++vl+Al+ + +l d +kl++ + sp|Q8UUR3|CYGB1_DANRE 16 LTEEDVCVIQDTWKPVYAERDNAGVAVLVRFFTNFPSAKQYFEHFRELQDPAEMQQNAQLKEHGQRVLNALNTLVENLrDaDKLNTIF 103 899***************************************************************************87899***** PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkefta.dvqaaleKllalvakllaskY 148 +++ ++Ha ++kvdp yfk+l+ v+++vl + +p+ f++ +vq++ Kl+ ++ ++ Y sp|Q8UUR3|CYGB1_DANRE 104 NQMGKSHALRHKVDPVYFKILAGVILEVLVEAFPQCFSPaEVQSSWSKLMGILYWQMNRVY 164 *************************************9736*********98877766655 PP >> sp|Q9CX80|CYGB_MOUSE Cytoglobin OS=Mus musculus GN=Cygb PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 130.6 0.2 3.3e-39 1.6e-36 3 149 .] 19 167 .. 17 167 .. 0.98 Alignments for each domain: == domain 1 score: 130.6 bits; conditional E-value: 3.3e-39 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklk 89 Lseae+++v+a Wa+ +a+ e++G+ iLvr+f+ +P ++++F +F++++ + e++ s++++kH+ +v++Al+ ++ +l d +k+++ l+ sp|Q9CX80|CYGB_MOUSE 19 LSEAERKAVQATWARLYANCEDVGVAILVRFFVNFPSAKQYFSQFRHMEDPLEMERSPQLRKHACRVMGALNTVVENLhDpDKVSSVLA 107 9*****************************************************************************878999***** PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + + Ha k+kv+p yfk+ls v+++v+a++++++f + q a Kl l+ ++++Yk sp|Q9CX80|CYGB_MOUSE 108 LVGKAHALKHKVEPMYFKILSGVILEVIAEEFANDFPVETQKAWAKLRGLIYSHVTAAYK 167 **********************************************************97 PP >> sp|P84652|HBB_COTGO Hemoglobin subunit beta OS=Cottoperca gobio GN=hbb PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 130.5 0.1 3.6e-39 1.8e-36 5 149 .] 6 147 .] 2 147 .] 0.97 Alignments for each domain: == domain 1 score: 130.5 bits; conditional E-value: 3.6e-39 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLsel 94 + e+ ++k v++k+ ++e +G +L r ++++P+tq++F +F++L ++++ ++++v kHg ++l+ l +a++++d ++++++++Ls l sp|P84652|HBB_COTGO 6 DFERATIKDVFSKI--EYEVVGPAALARCLVVYPWTQRYFGNFGNLYNAAAITGNPKVAKHGITILHGLDKAVKNMD-DIRNTYAELSVL 92 668999********..99***********************************************************.9*********** PP globins4 95 HakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 H++kl+vdp +fkll+++l v+aa+++k ft ++qaa++K+la+v l +Y+ sp|P84652|HBB_COTGO 93 HSEKLHVDPDNFKLLADCLTIVVAAQMGKAFTGEIQAAFQKFLAVVVSSLGRQYH 147 **************************************************99997 PP >> sp|P29623|HBA_GYMAC Hemoglobin subunit alpha OS=Gymnodraco acuticeps GN=hba PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 130.4 0.0 3.8e-39 1.9e-36 3 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 130.4 bits; conditional E-value: 3.8e-39 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls+++k +v+a+W+ + + G+d+L r+++++P+t+ +F ++ ++ + +s ++k+Hgkkv++ ++ a+ k+d +l++ l +Ls sp|P29623|HBA_GYMAC 2 LSDKDKAAVRALWSTISKSSDAIGNDALSRMIVVYPQTKIYFSHW-----PEVIPGSIHIKEHGKKVMGGIELAVSKID-DLKTGLFELS 85 99*******************************************.....6677************************9.9********* PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha kl+vdp +fk+l +++++v+a+ +pkeft++++ +l+K+l+ va +la++Y+ sp|P29623|HBA_GYMAC 86 EQHAFKLRVDPGNFKILNHCILVVIATMFPKEFTPEAHVSLDKFLSGVALALAERYR 142 ********************************************************6 PP >> sp|P84205|HBAA_GYMUN Hemoglobin anodic subunit alpha OS=Gymnothorax unicolor PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 130.3 0.0 3.9e-39 1.9e-36 3 149 .] 2 142 .] 1 142 [] 0.97 Alignments for each domain: == domain 1 score: 130.3 bits; conditional E-value: 3.9e-39 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls ++k vk W+k+ + +e G++++ r+++++P+t+ +F ++ + +sa vkkHg ++l+A++da++++d ++ ++l +L sp|P84205|HBAA_GYMUN 2 LSTKDKAVVKGFWSKISGKSDEIGTEAVGRMLTVYPQTKAYFSHWPET-----TPGSAPVKKHGARILGAINDAVNRID-DMAGALGSL 84 99*******************************************554.....59***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 selHa+kl vdp +fk+l+++l+ + +p++ft++v+ +++K+l+ +a +la +Y+ sp|P84205|HBAA_GYMUN 85 SELHANKLCVDPANFKILAHCLMASICLFYPTDFTPEVHLSVDKFLQNLALALADRYR 142 ********************************************************96 PP >> sp|P0C240|HBB_POGSC Hemoglobin subunit beta OS=Pogonophryne scotti GN=hbb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 130.4 0.0 3.9e-39 1.9e-36 3 149 .] 3 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 130.4 bits; conditional E-value: 3.9e-39 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 se e+t ++ +++ d+++ G + r + ++P+tq++F +F++L+ +++++++a+v +Hg kvl+ l +l+++d ++ +++++Ls sp|P0C240|HBB_POGSC 3 WSESERTIINGIFSHL--DYDDLGPKAFSRCLIVYPWTQRYFSSFGNLHNAEAIMGNANVAAHGIKVLHGLDLGLKHMD-DIMGAYAELS 89 58999*********99..*************************************************************.999******* PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fklls++++ +aa+l++ ft++ qaa++K+la+v +l ++Y+ sp|P0C240|HBB_POGSC 90 SLHSEKLHVDPDNFKLLSDCIIIAVAAKLGNAFTPETQAAFHKFLAVVVSALGKQYH 146 ******************************************************997 PP >> sp|Q575S9|CYGB2_ORYLA Cytoglobin-2 OS=Oryzias latipes GN=cygb2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.8 0.2 5.7e-39 2.8e-36 2 148 .. 18 166 .. 17 167 .. 0.98 Alignments for each domain: == domain 1 score: 129.8 bits; conditional E-value: 5.7e-39 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleak 87 +Ls+ae + +++ W+ v+ + e++G+ +L+r+f+ +P ++++F +F+d++ ++e++ks ++++H+++v++A++ ++ +l d ek+++ sp|Q575S9|CYGB2_ORYLA 18 PLSDAEMEIIQHTWGHVYKNCEDVGVSVLIRFFVNFPSAKQYFSQFQDMQDPEEMEKSSQLRQHARRVMNAINTVVENLqDpEKVSSV 105 69*****************************************************************************8799***** PP globins4 88 lkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 l+ + + Ha k+kv+p yfk+ s v++ vl + +p+ fta+vq Kl+a v ++ +Y sp|Q575S9|CYGB2_ORYLA 106 LALVGKAHAVKHKVEPIYFKIXSGVMLSVLSEDFPEFFTAEVQLVWTKLMAAVYWHVTGAY 166 *****************************************************99999888 PP >> sp|P11749|HBB_THUTH Hemoglobin subunit beta OS=Thunnus thynnus GN=hbb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.3 0.0 8.4e-39 4.1e-36 5 149 .] 5 146 .] 1 146 [] 0.95 Alignments for each domain: == domain 1 score: 129.3 bits; conditional E-value: 8.4e-39 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLsel 94 ++e++ + a+ ++e+ G +L r + ++P+tq++F ++dLst+d++k++a++ +Hg+kvl+ l a++++d +++ ++++Ls l sp|P11749|HBB_THUTH 5 QQERSIIAGFIANL--NYEDIGPKALARCLIVYPWTQRYFGAYGDLSTPDAIKGNAKIAAHGVKVLHGLDRAVKNMD-NINEAYSELSVL 91 56666666666766..99***********************************************************.************ PP globins4 95 HakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 H++kl+vdp +f++l+++l +v+aa+l+ ft + q a++K+la+v +l kY+ sp|P11749|HBB_THUTH 92 HSDKLHVDPDNFRILGDCLTVVIAANLGDAFTVETQCAFQKFLAVVVFALGRKYH 146 ******************************************************7 PP >> sp|P80271|HBB_CHEKU Hemoglobin subunit beta OS=Chelidonichthys kumu GN=hbb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.2 0.0 8.8e-39 4.3e-36 5 149 .] 5 146 .] 1 146 [] 0.97 Alignments for each domain: == domain 1 score: 129.2 bits; conditional E-value: 8.8e-39 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLsel 94 + e+ +++ +++k+ d+e++G L+r + ++P+t+++F kF+++ +++ +++++ kHg ++l+ l +++++d ++++++++Ls+l sp|P80271|HBB_CHEKU 5 DFERATIQDIFSKM--DYETVGPATLTRTVIVYPWTLRYFAKFGNICSTAAILGNKEIAKHGTTILHGLDRGVKNMD-DIKNTYAELSKL 91 5688999999**99..*************************************************************.************ PP globins4 95 HakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 H++kl+vdp +f+lls++l v+aa+++k+ft +vqaa++K+l++v + l +Y+ sp|P80271|HBB_CHEKU 92 HSEKLHVDPDNFRLLSDCLTIVVAAKMGKDFTGEVQAAFQKFLSVVVNSLGRQYH 146 ***************************************************9997 PP >> sp|P45722|HBBC_TREBE Hemoglobin subunit beta-C OS=Trematomus bernacchii GN=hbbc PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.2 0.1 8.8e-39 4.3e-36 5 149 .] 5 146 .] 1 146 [] 0.97 Alignments for each domain: == domain 1 score: 129.2 bits; conditional E-value: 8.8e-39 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 + e+ ++k +++k +++ +G L r ++++P+tq++F kF++L + ++ ++a v kHg ++l+ l a++++d ++++++++Ls sp|P45722|HBBC_TREBE 5 DFERATIKDIFSKL--EYDVVGPATLARCLVVYPWTQRYFGKFGNLYNATAIAENAMVSKHGTTILHGLDRAVKNMD-DIKNTYAELSV 90 568999********..9999*********************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fkll+++l v+aar+++ ft +vqaa+eK++a+v l +Y+ sp|P45722|HBBC_TREBE 91 LHSEKLHVDPDNFKLLADCLTIVVAARFGSAFTGEVQAAFEKFMAVVVSSLGRQYH 146 ***************************************************99997 PP >> sp|P83625|HBB2_PSEUR Hemoglobin subunit beta-2 OS=Pseudaphritis urvillii GN=hbb2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 129.1 0.0 9.5e-39 4.6e-36 5 149 .] 5 146 .] 1 146 [] 0.97 Alignments for each domain: == domain 1 score: 129.1 bits; conditional E-value: 9.5e-39 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 + e+ ++k +++k+ ++e +G +L r ++++P+tq++F kF++L ++++ +++ + kHg ++l+ l a++++d ++++++++Ls sp|P83625|HBB2_PSEUR 5 DFERATIKDIFSKI--EYEVVGPAALARCLVVYPWTQRYFGKFGNLYNAEAITGNPMISKHGTTILHGLDRAVKNMD-DIKNTYAELSV 90 668999********..99***********************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++ l+vdp +fklls++l v+a +l+k+ft +vqaa++K+la+v l +Y+ sp|P83625|HBB2_PSEUR 91 LHSETLHVDPDNFKLLSDCLTIVVAGQLGKDFTGEVQAAFQKFLAVVVSSLGRQYH 146 ***************************************************99997 PP >> sp|P07431|HBA2_XENBO Hemoglobin subunit alpha-2 OS=Xenopus borealis GN=hba2 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.9 0.4 1.1e-38 5.3e-36 3 149 .] 3 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 128.9 bits; conditional E-value: 1.1e-38 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++k+++ka+ + a+ ++ G+++L r+f+ P+t+++F++F d + ++s+++ +Hgkkv+dAl++a ++ld ++ +++++L sp|P07431|HBA2_XENBO 3 LTADDKKHIKAILPSIAAHGDKFGGEALYRMFLINPKTKTYFPNF-DFH-----HNSKQISAHGKKVVDALNEAANHLD-NIAGSMSKL 84 89*******************************************.777.....9************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+lHa l+vdp +f ll++ +++++a +p++f ++ + al+K+la+v+ +l+skY+ sp|P07431|HBA2_XENBO 85 SDLHAYDLRVDPGNFPLLAHNILVTVAMYFPQQFDPHTHKALDKFLASVSSVLTSKYR 142 *********************************************************7 PP >> sp|P29625|HBB_GYMAC Hemoglobin subunit beta OS=Gymnodraco acuticeps GN=hbb PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.9 0.1 1.1e-38 5.4e-36 4 149 .] 5 147 .] 2 147 .] 0.98 Alignments for each domain: == domain 1 score: 128.9 bits; conditional E-value: 1.1e-38 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 ++ ek +++ +++ d+++ G +L r + ++P+tq++F F++L ++++ ++a+v +Hg kvl+ l +l+k+d ++ea+++dLs sp|P29625|HBB_GYMAC 5 TKTEKATITDIFSHL--DYDDIGPKALSRCLIVYPWTQRYFSGFGNLYNAAAIIGNAKVAEHGIKVLHGLDLGLKKMD-NIEAAYADLSS 91 7899**********9..*************************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fklls+++ vlaa+l++ fta+ qa+++K+l v +l ++Y+ sp|P29625|HBB_GYMAC 92 LHSEKLHVDPDNFKLLSDCITIVLAAKLGSAFTAETQATFQKFLGAVMSALGKQYH 147 *****************************************************997 PP >> sp|P02139|HBB_CYPCA Hemoglobin subunit beta-A/B OS=Cyprinus carpio PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.7 0.0 1.2e-38 6e-36 4 149 .] 4 147 .] 1 147 [] 0.97 Alignments for each domain: == domain 1 score: 128.7 bits; conditional E-value: 1.2e-38 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 ++ae++++ a+W+k + +e G ++L r + ++P+tq+fF ++++Ls +++++++++v +Hg++v + l a++ +d +++a++++Ls sp|P02139|HBB_CYPCA 4 TDAERSAIIALWGKL--NPDELGPEALARCLIVYPWTQRFFASYGNLSSPAAIMGNPKVAAHGRTVEGGLMRAIKDMD-NIKATYAPLSV 90 789************..99***********************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarl.pkeftadvqaaleKllalvakllaskYk 149 H++kl+vdp +f+ll++++ + a ++ p+ f+++vq a +K+l++v ++l+ +Y+ sp|P02139|HBB_CYPCA 91 MHSEKLHVDPDNFRLLADCITVCAAMKFgPSGFSPNVQEAWQKFLSVVVNALKRQYH 147 *********************99999995689***********************97 PP >> sp|P07432|HBB1_XENBO Hemoglobin subunit beta-1 OS=Xenopus borealis GN=hbb1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.7 0.0 1.3e-38 6.3e-36 3 149 .] 3 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 128.7 bits; conditional E-value: 1.3e-38 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++ +++ +++ W+kv +++ G+++L rl+ ++P+tq++F +F++L+ +d++ ++ v +Hg+kv++ +++a++++d ++++ +++L sp|P07432|HBB1_XENBO 3 LTAHDRQLINSTWGKV--CAKTIGKEALGRLLWTYPWTQRYFSSFGNLNSADAVFHNEAVAAHGEKVVTSIGEAIKHMD-DIKGYYAQL 88 899*************..6789*********************************************************.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+ H++ l+vdp +fk ++ +l la ++ +e+t++ +aa+e l++ +a +l + Y+ sp|P07432|HBB1_XENBO 89 SKYHSETLHVDPCNFKRFGGCLSISLARQFHEEYTPELHAAYEHLFDAIADALGKGYH 146 *****************************************************99986 PP >> sp|P02132|HBB1_XENLA Hemoglobin subunit beta-1 OS=Xenopus laevis GN=hbb1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.6 0.0 1.3e-38 6.4e-36 3 149 .] 3 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 128.6 bits; conditional E-value: 1.3e-38 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++ +++ +++ W+k +++ G+++L rl+ ++P+tq++F +F++L+ +d++ ++ v +Hg+kv++ +++a++++d ++++ +++L sp|P02132|HBB1_XENLA 3 LTAHDRQLINSTWGKL--CAKTIGQEALGRLLWTYPWTQRYFSSFGNLNSADAVFHNEAVAAHGEKVVTSIGEAIKHMD-DIKGYYAQL 88 899*************..6789*********************************************************.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s+ H++ l+vdp +fk ++ +l la ++ +e+t++ +aa+e l++ +a +l + Y+ sp|P02132|HBB1_XENLA 89 SKYHSETLHVDPLNFKRFGGCLSIALARHFHEEYTPELHAAYEHLFDAIADALGKGYH 146 *****************************************************99986 PP >> sp|Q7LZC1|HBB3_MURHE Hemoglobin subunit beta-3 OS=Muraena helena GN=hbb3 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.6 0.0 1.4e-38 6.7e-36 4 149 .] 4 147 .] 1 147 [] 0.98 Alignments for each domain: == domain 1 score: 128.6 bits; conditional E-value: 1.4e-38 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++ae+t+++++W k+ +++e G ++ rl+ + P+tq++F F+++st+++++ ++ v kHg +v++ l a++++d ++++++++Ls sp|Q7LZC1|HBB3_MURHE 4 TDAERTAILTLWKKI--NIDEIGPCAMRRLLIVSPWTQRHFSTFGNISTNAAIMDNDLVAKHGSTVMGGLDRAIKNMD-DIKGAYRELS 89 789************..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarl.pkeftadvqaaleKllalvakllaskYk 149 ++H+++l+vdp +f+ll+e++ +a ++ pkeftadv+ a K+la v+ +l+ +Y+ sp|Q7LZC1|HBB3_MURHE 90 KKHSDQLHVDPDNFRLLAECITLCVAGKFgPKEFTADVHEAWYKFLAAVTSALSRQYH 147 **************************999679************************97 PP >> sp|O93351|HBB_TREHA Hemoglobin subunit beta OS=Trematomus hansoni GN=hbb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.6 0.0 1.4e-38 6.6e-36 4 149 .] 5 147 .] 2 147 .] 0.97 Alignments for each domain: == domain 1 score: 128.6 bits; conditional E-value: 1.4e-38 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 +++e++ + +++ + d+++ G +L r ++++P+tq++F F++L ++ ++++a+v +Hg kvl+ l +++++d ++ a+++dLs sp|O93351|HBB_TREHA 5 TDKERSIISDIFSHM--DYDDIGPKALSRCLVVYPWTQRYFSGFGNLYNAEGIMSNANVAAHGIKVLHGLDRGVKNMD-NIAATYADLST 91 677888899999988..9************************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fklls+++ vlaa++++ fta+ q+a++K+la+v +l ++Y+ sp|O93351|HBB_TREHA 92 LHSEKLHVDPDNFKLLSDCITIVLAAKMGHAFTAETQGAFQKFLAVVVSALGKQYH 147 *****************************************************997 PP >> sp|Q9PVM3|HBAB_SERQU Hemoglobin subunit alpha-B OS=Seriola quinqueradiata GN=hbab PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.4 0.1 1.6e-38 7.8e-36 2 149 .] 2 144 .] 1 144 [] 0.96 Alignments for each domain: == domain 1 score: 128.4 bits; conditional E-value: 1.6e-38 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFk.dLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 Ls+++kt+vk+ W kve + +e G+++L r+++++P+t+ +F +++ dL+ + + vkkHg +++ +++a++++d +l l+ sp|Q9PVM3|HBAB_SERQU 2 SLSAKDKTTVKKFWDKVEGKSAEIGGEALGRMLVAYPQTKAYFSHWGsDLN-----PQHPMVKKHGAIIMGGIGKAVKNID-DLVRGLS 84 69********************************************52455.....78899*******************9.9****** PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +LselHa kl+vdp +fk+l++ ++ v a +p++ft++v+ +++K+l+ va +la++Y+ sp|Q9PVM3|HBAB_SERQU 85 ALSELHAFKLRVDPANFKILAHNVILVAAMYFPADFTPEVHVSVDKFLQRVALALAERYR 144 ***********************************************************6 PP >> sp|Q1AGS8|HBA2_BORSA Hemoglobin subunit alpha-2 OS=Boreogadus saida GN=hba2 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.2 0.1 1.8e-38 8.8e-36 2 149 .] 2 143 .] 1 143 [] 0.99 Alignments for each domain: == domain 1 score: 128.2 bits; conditional E-value: 1.8e-38 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 Ls+++k +vk W+k+ + e Gad+L r++ ++P+t+ +F ++k s +s++vkkHgk+++ +++a+ k+d +le l + sp|Q1AGS8|HBA2_BORSA 2 SLSAKDKATVKLFWGKMSGKSELIGADALSRMLAVYPQTKIYFSHWKSCS-----PGSPEVKKHGKTIMMGIGEAVTKMD-DLERGLLT 84 69*********************************************999.....9************************.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa kl+vdp +fklls +++v+a +p +ft+ ++ a++K+l +a +l++kY+ sp|Q1AGS8|HBA2_BORSA 85 LSELHAFKLRVDPTNFKLLSLNILVVMAIMFPLDFTPMAHLAVDKFLCALALALSEKYR 143 **********************************************************7 PP >> sp|P02140|HBB_CARAU Hemoglobin subunit beta OS=Carassius auratus GN=hbb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.1 0.0 1.9e-38 9.3e-36 4 149 .] 4 147 .] 1 147 [] 0.97 Alignments for each domain: == domain 1 score: 128.1 bits; conditional E-value: 1.9e-38 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 ++ae++++ +W+k + +e G ++L r + ++P+tq++F F++Ls +++++++++v +Hg++v++ l+ a++++d +++a++++Ls sp|P02140|HBB_CARAU 4 TDAERSAIIGLWGKL--NPDELGPQALARCLIVYPWTQRYFATFGNLSSPAAIMGNPKVAAHGRTVMGGLERAIKNMD-NIKATYAPLSV 90 789************..99***********************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarl.pkeftadvqaaleKllalvakllaskYk 149 H++kl+vdp +f+ll++++ + a ++ p+ f advq a +K+l++v +l +Y+ sp|P02140|HBB_CARAU 91 MHSEKLHVDPDNFRLLADCITVCAAMKFgPSGFNADVQEAWQKFLSVVVSALCRQYH 147 *********************99999995689*********************9997 PP >> sp|O13164|HBB_DECMA Hemoglobin subunit beta OS=Decapterus maruadsi GN=hbb PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 128.1 0.0 1.9e-38 9.4e-36 4 149 .] 5 148 .] 2 148 .] 0.97 Alignments for each domain: == domain 1 score: 128.1 bits; conditional E-value: 1.9e-38 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 ++ e+ +++++W+k+ dv+e G ++L rl+ ++P+tq++F F++Lst++++ ++++v +Hgk+v++ l+ a++++d ++++++++Ls+ sp|O13164|HBB_DECMA 5 TDXERAAITSLWGKI--DVGEIGPQALARLLIVYPWTQRHFSTFGNLSTNAAILGNPKVAAHGKTVMGGLELAVKNMD-NIKGAYANLSK 91 67899**********..*************************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarl.pkeftadvqaaleKllalvakllaskYk 149 H++k +vdp +f+ll+e+ laa++ p+ ft+d q a +K+ + v +l +Y+ sp|O13164|HBB_DECMA 92 MHSEKIHVDPDNFRLLAEITTICLAAKFgPSVFTPDFQEAWQKFENAVVSALGRQYH 148 ***************************94578********************99996 PP >> sp|P10785|HBB1_TRICR Hemoglobin subunit beta-1 OS=Triturus cristatus GN=HBB1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.9 0.3 2.2e-38 1e-35 4 149 .] 3 145 .] 1 145 [] 0.98 Alignments for each domain: == domain 1 score: 127.9 bits; conditional E-value: 2.2e-38 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++e ++++ v +k+ v+++Ga++L rl+++ P+t+++F++F+dLs +++++ +++v Hg kv++ +++a+++ld +l+a ++dLs sp|P10785|HBB1_TRICR 3 TNDESQHIHDVCGKI--PVDQVGAEALGRLILVNPWTRRYFKSFGDLSSAEAIQHNPKVASHGAKVMHSIAEAVKHLD-DLKAYYADLS 88 78999**********..9***********************************************************9.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 H+kkl vdp +fkl++ ++ v +l++++ta+ qaa+eK+l v +la+ Y+ sp|P10785|HBB1_TRICR 89 TIHCKKLYVDPANFKLFGGIVSIVTGMHLGTDYTAQKQAAFEKFLHHVEAALATGYH 145 *****************************************************9997 PP >> sp|P10783|HBA1_TRICR Hemoglobin subunit alpha-1 OS=Triturus cristatus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.7 0.8 2.6e-38 1.3e-35 2 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 127.7 bits; conditional E-value: 2.6e-38 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 +Ls+++k +vka+W v+ + e Ga++L r+f+s P+t+++F+ kd++ ++s ++ Hgkkv++Als+a+a++d +++++l++ sp|P10783|HBA1_TRICR 2 KLSADDKHNVKAIWEHVKGHEEAIGAEALCRMFTSLPTTRTYFPT-KDIK-----EGSSFLHSHGKKVMGALSNAVAHID-DIDGALSK 83 69******************************************7.5888.....9***********************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls++Ha++l vdp +f l++ +++vl +l ++t +v+++++K+la+v +laskY+ sp|P10783|HBA1_TRICR 84 LSDKHAEELMVDPANFPKLAHNILVVLGIHLKPHLTYSVHSSVDKFLATVGYVLASKYR 142 **********************************************************7 PP >> sp|P02138|HBB_LEPPA Hemoglobin subunit beta OS=Lepidosiren paradoxus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.3 0.1 3.4e-38 1.7e-35 4 149 .] 4 147 .] 1 147 [] 0.97 Alignments for each domain: == domain 1 score: 127.3 bits; conditional E-value: 3.4e-38 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 +aek+ + +v++k+ dv+ +Ga+ L+r++ ++P+t+++F++F+dLs + ++k +++v +Hg+kvl A+ + +++ +++++l++Ls+ sp|P02138|HBB_LEPPA 4 EDAEKQYIVSVFSKI--DVDHVGANTLERVLIVFPWTKRYFNSFGDLSSPGAIKHNNKVSAHGRKVLAAIIECTRHFG-NIKGHLANLSH 90 679************..***********************************************************76.9********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlp.keftadvqaaleKllalvakllaskYk 149 lH++kl+vdp++f++l+++l laa l+ keft++ +a ++K+++++++ l Y+ sp|P02138|HBB_LEPPA 91 LHSEKLHVDPHNFRVLGQCLRIELAAALGfKEFTPERNAYFQKFMDVISHSLGREYH 147 ************************9999879*********************99996 PP >> sp|P84610|HBB1_GADMO Hemoglobin subunit beta-1 OS=Gadus morhua GN=hbb1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.1 0.0 4e-38 2e-35 4 149 .] 5 147 .] 2 147 .] 0.98 Alignments for each domain: == domain 1 score: 127.1 bits; conditional E-value: 4e-38 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++ae+ +v+avW+k+ d++ G +L+r + ++P+tq++F +F+dLst++++ ++++v +Hg+ l+ l al ++d ++++++++Ls sp|P84610|HBB1_GADMO 5 TAAERRHVEAVWSKI--DIDVCGPLALQRCLIVYPWTQRYFGEFGDLSTDAAIVGNPKVAAHGVVALTGLRTALDHMD-EIKSTYAALS 90 899************..9999*********************************************************.9********* PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +f+ll e+l v+a +++k++++++qaa +K l v +l +Y+ sp|P84610|HBB1_GADMO 91 VLHSEKLHVDPDNFRLLCECLTIVVAGKMGKKLSPEMQAAWQKYLCAVVSALGRQYH 147 ****************************************************99997 PP >> sp|O93348|HBB1_PAGBO Hemoglobin subunit beta-1 OS=Pagothenia borchgrevinki GN=hbb1 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 127.0 0.0 4.3e-38 2.1e-35 4 149 .] 5 147 .] 2 147 .] 0.97 Alignments for each domain: == domain 1 score: 127.0 bits; conditional E-value: 4.3e-38 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++e++ + +++ d+e+ G +L r + ++P+tq++F F++L ++ + ++a+v +Hg kvl+ l +l+++d ++ea+++dLs sp|O93348|HBB1_PAGBO 5 TDKERSIISDIFSHL--DYEDIGPKALSRCLIVYPWTQRHFSGFGNLYNAESIIGNANVAAHGIKVLHGLDRGLKNMD-NIEATYADLS 90 677888899999998..9************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fkll++++ vlaa++++ fta++q+a++K+la+v +l ++Y+ sp|O93348|HBB1_PAGBO 91 TLHSEKLHVDPDNFKLLADCITIVLAAKMGQAFTAEIQGAFQKFLAVVVSALGKQYH 147 ******************************************************997 PP >> sp|P06639|HBA1_PLEWA Hemoglobin subunit alpha-1 OS=Pleurodeles waltl PE=2 SV=4 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.8 1.1 5e-38 2.4e-35 2 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 126.8 bits; conditional E-value: 5e-38 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 +L++++k +vka+W v+ + e Ga++L r+f +P+t+ +F+ kdLs + s ++ Hgkkv++Al++a+a++d ++++++++ sp|P06639|HBA1_PLEWA 2 KLTAEDKHNVKAIWDHVKGHEEAIGAEALYRMFCCMPTTRIYFPA-KDLS-----ERSSYLHSHGKKVVGALTNAVAHID-DIDTAFSK 83 69******************************************8.6***.....99**********************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls++Ha++l vdp +f l++ +++vl +l +ft +v+ +++K+l++va +laskY+ sp|P06639|HBA1_PLEWA 84 LSDKHAEELMVDPANFPKLAHNILVVLGIHLKPHFTYSVHRSVDKFLSTVAYVLASKYR 142 **********************************************************7 PP >> sp|P83272|HBB1_ANAMI Hemoglobin subunit beta-1 OS=Anarhichas minor GN=hbb1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.7 0.0 5.1e-38 2.5e-35 4 148 .. 4 145 .. 1 146 [] 0.97 Alignments for each domain: == domain 1 score: 126.7 bits; conditional E-value: 5.1e-38 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 s++e+ + +++a d+e+ G +L r + ++P+tq++F +F++Lst++++++++++ +Hg kvl+ l +++++d +++ ++ +Ls sp|P83272|HBB1_ANAMI 4 SDKERAVIISIFAGL--DYEDIGPKALSRCLIVYPWTQRYFGSFGNLSTPAAIMGNPKIAAHGIKVLHGLDRGVKNMD-NIKDAYTELS 89 889999999999999..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 lH++ l+vdp +fkll+++l v+aa+++ ft+d q a++K+la+v +l ++Y sp|P83272|HBB1_ANAMI 90 ILHSETLHVDPDNFKLLADCLTIVVAAKMGCAFTPDTQLAFQKFLAVVVSALGKQY 145 ****************************************************9998 PP >> sp|Q1AGS7|HBB1_BORSA Hemoglobin subunit beta-1 OS=Boreogadus saida GN=hbb1 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.4 0.0 6.6e-38 3.2e-35 4 149 .] 5 147 .] 2 147 .] 0.98 Alignments for each domain: == domain 1 score: 126.4 bits; conditional E-value: 6.6e-38 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++ e+t+++a+W+k+ d++ G +L+r + ++P+tq++F +F+dLst++++ ++++v +Hg+ l+ l al ++d +++a++++Ls sp|Q1AGS7|HBB1_BORSA 5 TATERTHIEAIWSKI--DIDVCGPLALQRCLIVYPWTQRYFGSFGDLSTDAAIVGNPKVANHGVVALTGLRTALDHMD-DIKATYATLS 90 789************..9999*********************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +f+ll ++l v+a +++ + +++qaa +K l+ v +l +Y+ sp|Q1AGS7|HBB1_BORSA 91 VLHSEKLHVDPDNFRLLCDCLTIVVAGKFGPTLRPEMQAAWQKYLSAVVSALGRQYH 147 ****************************************************99997 PP >> sp|P02206|MYG_HETPO Myoglobin OS=Heterodontus portusjacksoni GN=mb PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.3 0.1 7.1e-38 3.5e-35 6 149 .] 2 143 .. 1 143 [. 0.98 Alignments for each domain: == domain 1 score: 126.3 bits; conditional E-value: 7.1e-38 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 e+++v++vWa ve d+ +G iL rlfk + +t++ F+kFk++ ++l +++d++kHg++vl Al+++l++ ++k+++++k+L++ H sp|P02206|MYG_HETPO 2 TEWEHVNKVWAVVEPDIPAVGLAILLRLFKEHKETKDLFPKFKEIP-VQQLGNNEDLRKHGVTVLRALGNILKQ-KGKHSTNVKELADTH 89 59*******************************************9.89*************************.99************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +k+k++pk+f l++++ v+vl + +p+++t ++q ++ K++ +++ +l + Yk sp|P02206|MYG_HETPO 90 INKHKIPPKNFVLITNIAVKVLTEMYPSDMTGPMQESFSKVFTVICSDLETLYK 143 *************************************************99996 PP >> sp|Q1AGS5|HBA1_ARCGL Hemoglobin subunit alpha-1 OS=Arctogadus glacialis GN=hba1 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.2 0.1 7.4e-38 3.6e-35 2 149 .] 2 143 .] 1 143 [] 0.98 Alignments for each domain: == domain 1 score: 126.2 bits; conditional E-value: 7.4e-38 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 Ls ++k +vk+ ++k+ + ++ Ga++L rl+ ++P+t+ +F ++kd s +sa v+kHg ++++ + da+ k+d +l++ l + sp|Q1AGS5|HBA1_ARCGL 2 SLSSKDKATVKEFFGKMSTRSDDIGAEALSRLVAVYPQTKSYFSHWKDAS-----PGSAPVRKHGITIMGGVYDAVTKID-DLKGGLLS 84 59********************************************9988.....9***********************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa l+vdp +fkll++++++ + +p+eft++v+ a++K+la +a +la+kY+ sp|Q1AGS5|HBA1_ARCGL 85 LSELHAFMLRVDPVNFKLLAHCMLVCMSMVFPEEFTPQVHVAVDKFLAQLALALAEKYR 143 **********************************************************7 PP >> sp|P0C239|HBB_ARTOR Hemoglobin subunit beta OS=Artedidraco orianae GN=hbb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.2 0.0 7.5e-38 3.6e-35 3 149 .] 3 146 .] 1 146 [] 0.97 Alignments for each domain: == domain 1 score: 126.2 bits; conditional E-value: 7.5e-38 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 s+ e+t ++ ++++ d+++ G + r + ++P+tq++F +F++L +++++++a+v +Hg kvl+ l +++++d ++ + +++Ls sp|P0C239|HBB_ARTOR 3 WSDSERTIINGIFSQL--DYDDLGPKAFSRCLIVYPWTQRYFSSFGNLDNAEAIMGNANVAAHGIKVLHGLDRGVKNMD-DIMGVYAELS 89 588999999****999..*************************************************************.9999****** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fklls+++ v+aa+l++ ft++ qaa++K+l v l ++Y+ sp|P0C239|HBB_ARTOR 90 SLHSEKLHVDPDNFKLLSDCITIVVAAKLGNAFTPETQAAFQKFLGAVVMFLGKQYH 146 ****************************************************99997 PP >> sp|P80044|HBB_TREBE Hemoglobin subunit beta OS=Trematomus bernacchii GN=hbb PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 126.1 0.1 7.9e-38 3.9e-35 4 149 .] 5 147 .] 2 147 .] 0.97 Alignments for each domain: == domain 1 score: 126.1 bits; conditional E-value: 7.9e-38 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 +++e++ + +++ + d+++ G +L r + ++P+tq++F F++L ++++ ++a+v +Hg kvl+ l +++++d ++ a+++dLs sp|P80044|HBB_TREBE 5 TDKERSIISDIFSHM--DYDDIGPKALSRCLIVYPWTQRHFSGFGNLYNAEAIIGNANVAAHGIKVLHGLDRGVKNMD-NIAATYADLST 91 677888899999988..9************************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fklls+++ vlaa++++ fta+ q+a++K+la+v +l ++Y+ sp|P80044|HBB_TREBE 92 LHSEKLHVDPDNFKLLSDCITIVLAAKMGHAFTAETQGAFQKFLAVVVSALGKQYH 147 *****************************************************997 PP >> sp|Q6Y239|HBB_PAGMA Hemoglobin subunit beta OS=Pagrus major GN=hbb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 125.7 0.0 1e-37 5e-35 4 149 .] 5 148 .] 2 148 .] 0.95 Alignments for each domain: == domain 1 score: 125.7 bits; conditional E-value: 1e-37 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 ++ae++++k++W+k+ +v+e G ++L+rl+ ++P+tq++F +F+++st++++ ++++v +Hg++v++ l a+++ld ++++++ Ls+ sp|Q6Y239|HBB_PAGMA 5 TDAERSAIKTLWGKI--NVAEIGPQALTRLMIVYPWTQRHFSSFGNISTNAAILGNEKVAEHGRTVMGGLDRAVQNLD-DIKNAYTLLSQ 91 789************..************************************************************9.9********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarl.pkeftadvqaaleKllalvakllaskYk 149 +H++ +vdp +f+ll+e+ + +l pk f a+vq a +K+la+v ++l +Y+ sp|Q6Y239|HBB_PAGMA 92 KHSEIIHVDPDNFRLLAECFSICVGIKLgPKVFNANVQEAWQKFLAVVVNALGRQYH 148 *******************9766665553899*********************9997 PP >> sp|P85082|HBB1_LIPTU Hemoglobin subunit beta-1 OS=Liparis tunicatus GN=hbb1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 125.7 0.0 1.1e-37 5.2e-35 3 149 .] 4 147 .] 2 147 .] 0.98 Alignments for each domain: == domain 1 score: 125.7 bits; conditional E-value: 1.1e-37 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 ++ e++++k ++ak+ d++ +G + r + ++P+tq++F +F++L ++++ ++++v kHg ++++ l+ ++++ld +l ++++L sp|P85082|HBB1_LIPTU 4 WTDFERSTIKDIFAKI--DYDCVGPAAFARCLIVYPWTQRYFGNFGNLFNAAAIIGNPNVAKHGITIMHGLERGVKNLD-HLTETYEEL 89 577899**********..*************************************************************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s lH++kl+vdp +fkl+s++l v+a+rl+k ft +vqaal+K+la+v l ++Y+ sp|P85082|HBB1_LIPTU 90 SVLHSEKLHVDPDNFKLISDCLTIVVASRLGKAFTGEVQAALQKFLAVVVFSLGKQYH 147 *****************************************************99997 PP >> sp|P23017|HBB1_CYGMA Hemoglobin subunit beta-1 OS=Cygnodraco mawsoni GN=hbb1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 125.6 0.1 1.2e-37 5.7e-35 4 149 .] 5 147 .] 2 147 .] 0.97 Alignments for each domain: == domain 1 score: 125.6 bits; conditional E-value: 1.2e-37 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 s+ e t ++ +++ d+++ G +L r + ++P+tq++F F++L ++++ ++a+v +Hg kvl+ l +l+++d ++ ++++Ls sp|P23017|HBB1_CYGMA 5 SKTELTIINDIFSHL--DYDDIGPKALSRCLIVYPWTQRHFSGFGNLYNAEAIIGNANVAAHGIKVLHGLDRGLKNMD-NIVDAYAELS 90 778889999999999..9************************************************************.9********* PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fklls+++ vlaa+l+k fta+ qaa++K++a+v +l ++Y+ sp|P23017|HBB1_CYGMA 91 TLHSEKLHVDPDNFKLLSDCITIVLAAKLGKAFTAETQAAFQKFMAVVVSALGKQYH 147 ******************************************************997 PP >> sp|P45720|HBB_TRENE Hemoglobin subunit beta-1/2 OS=Trematomus newnesi PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 125.2 0.0 1.5e-37 7.4e-35 4 149 .] 4 146 .] 1 146 [] 0.97 Alignments for each domain: == domain 1 score: 125.2 bits; conditional E-value: 1.5e-37 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 +++e++ + +++ + d+++ G +L r ++++P+tq++F F++L ++ ++++a+v +Hg kvl+ l +++++d ++ ++ dLs sp|P45720|HBB_TRENE 4 TDKERSIISDIFSHM--DYDDIGPKALSRCLVVYPWTQRYFSGFGNLYNAEGIMSNANVAAHGIKVLHGLDRGMKNMD-NIADAYTDLST 90 677888899999988..9************************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fklls+++ vlaa++++ fta+ q+a++K+la v +l ++Y+ sp|P45720|HBB_TRENE 91 LHSEKLHVDPDNFKLLSDCITIVLAAKMGHAFTAETQGAFQKFLAAVVSALGKQYH 146 *****************************************************997 PP >> sp|P83612|HBB1_GOBGI Hemoglobin subunit beta-1 OS=Gobionotothen gibberifrons GN=hbb1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 124.7 0.1 2.1e-37 1e-34 4 149 .] 4 146 .] 1 146 [] 0.97 Alignments for each domain: == domain 1 score: 124.7 bits; conditional E-value: 2.1e-37 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++e+ ++ +++ + d+++ G +L r + ++P+tq++F F++L ++++ ++a+v +Hg kvl+ l +++++d ++ a++++Ls sp|P83612|HBB1_GOBGI 4 TDKERAIITDIFSHM--DYDDIGPKALSRCLIVYPWTQRHFSGFGNLYNAEAIIGNANVAAHGIKVLHGLDRGVKNMD-NIAATYAELS 89 667888899999988..9************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fklls+++ v+aa+l++ fta+ q+al+K+la+v +l ++Y+ sp|P83612|HBB1_GOBGI 90 TLHSEKLHVDPDNFKLLSDCITIVVAAKLGHAFTAETQGALQKFLAVVVSALGKQYH 146 ******************************************************997 PP >> sp|P83614|HBB2_GOBGI Hemoglobin subunit beta-2 OS=Gobionotothen gibberifrons GN=hbb2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 124.7 0.0 2.1e-37 1e-34 5 149 .] 5 146 .] 1 146 [] 0.97 Alignments for each domain: == domain 1 score: 124.7 bits; conditional E-value: 2.1e-37 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 + e+ +++ +++k ++e +G L r ++++P+tq++F +F++L ++++ +++ v kHg ++l+ l a++++d ++++++++Ls sp|P83614|HBB2_GOBGI 5 DFERATINDIFSKL--EYEVVGPATLARCLVVYPWTQRYFGNFGNLYNAAAIAENPMVSKHGITILHGLDRAVKNMD-DIKNTYAELSV 90 56888999999999..999**********************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +f+ll+++l v+aar+++ ft +vqaa++K+l++v l +Y+ sp|P83614|HBB2_GOBGI 91 LHSEKLHVDPDNFQLLADCLTIVVAARFGNTFTGEVQAAFQKFLSVVVSSLGRQYH 146 ***************************************************99997 PP >> sp|P29628|HBB_NOTAN Hemoglobin subunit beta OS=Notothenia angustata GN=hbb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 124.7 0.1 2.2e-37 1.1e-34 4 149 .] 4 146 .] 1 146 [] 0.97 Alignments for each domain: == domain 1 score: 124.7 bits; conditional E-value: 2.2e-37 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 s+ e+ ++ +++ + d+++ G +L r + ++P+tq++F F++L ++++ ++a+v +Hg kvl+ l +++++d ++ a++++Ls sp|P29628|HBB_NOTAN 4 SDSERAIITDIFSHM--DYDDIGPKALSRCLIVYPWTQRHFSGFGNLYNAEAILGNANVAAHGIKVLHGLDRGVKNMD-NIAATYAELSI 90 788999999999999..*************************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fklls+++ v+aa++++ ft++ qaa++K+la+v +l ++Y+ sp|P29628|HBB_NOTAN 91 LHSEKLHVDPDNFKLLSDCITIVVAAKMGQAFTPETQAAVQKFLAVVVSALGKQYH 146 *****************************************************997 PP >> sp|P02014|HBA_TARGR Hemoglobin subunit alpha OS=Taricha granulosa GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 124.4 1.3 2.6e-37 1.3e-34 2 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 124.4 bits; conditional E-value: 2.6e-37 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 +Ls+++k +vk+ W ++ + e Ga++L r+f+s Pat+++F+ kdLs ++s ++ Hgkkv++Als+a+a++d +++a+l +L sp|P02014|HBA_TARGR 2 KLSAEDKHNVKTTWDHIKGHEEALGAEALFRMFTSLPATRTYFPA-KDLS-----EGSSFLHSHGKKVMGALSNAVAHID-DIDAALCKL 84 69******************************************8.6***.....9***********************9.9******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s++Ha+ l vdp +f l++ +++v+ +l +++t +v+ +++K+l++v ++l+skY+ sp|P02014|HBA_TARGR 85 SDKHAQDLMVDPANFPKLAHNILVVMGIHLKAHLTYPVHCSVDKFLDVVGHVLTSKYR 142 *********************************************************7 PP >> sp|P10784|HBA2_TRICR Hemoglobin subunit alpha-2 OS=Triturus cristatus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 124.2 2.2 3.1e-37 1.5e-34 2 149 .] 1 141 [] 1 141 [] 0.98 Alignments for each domain: == domain 1 score: 124.2 bits; conditional E-value: 3.1e-37 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLs ++k +vkavW v+ + e +Ga++L r f+ P+tq++F kdL+ ++sa ++ Hgkkv+ Al++a+a++d ++e+++++ sp|P10784|HBA2_TRICR 1 VLSSQDKANVKAVWEHVKGHEEVYGAEALHRAFVCDPQTQTYFAG-KDLK-----ENSAYLHGHGKKVMSALTNAVAHID-DIEGSMSK 82 69*****************************************87.7***.....99**********************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls++Ha++l vdp +f +l++ +++++a +p+ +t++ + +++K+l++v+++l+skY+ sp|P10784|HBA2_TRICR 83 LSDKHAHELMVDPGNFDILAHHILTTMAMFMPQCLTSANHRSVDKFLSTVKHVLTSKYR 141 **********************************************************7 PP >> sp|P07429|HBB1_XENTR Hemoglobin subunit beta-1 OS=Xenopus tropicalis GN=hbb1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 124.2 0.0 3.1e-37 1.5e-34 2 149 .] 3 147 .] 2 147 .] 0.98 Alignments for each domain: == domain 1 score: 124.2 bits; conditional E-value: 3.1e-37 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 L+++e++ ++ W+k+ +++ G+++L ++ ++P+tq++F +F++Ls +++ +a v +Hg+kvl+ +++a++++d ++++ +++ sp|P07429|HBB1_XENTR 3 NLTAKERQLITGTWSKI--CAKTLGKQALGSMLYTYPWTQRYFSSFGNLSSIEAIFHNAAVATHGEKVLTSIGEAIKHMD-DIKGYYAQ 88 79***************..6789*********************************************************.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+ H++ l+vdp +fk + + + +a+ l ++ft++ qaa+eKl+a +a +l + Y+ sp|P07429|HBB1_XENTR 89 LSKYHSETLHVDPYNFKRFCSCTIISMAQTLQEDFTPELQAAFEKLFAAIADALGKGYH 147 ******************************************************99986 PP >> sp|P80945|HBAA_ANGAN Hemoglobin anodic subunit alpha OS=Anguilla anguilla GN=hba PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 123.4 0.0 5.5e-37 2.7e-34 2 149 .] 2 143 .] 1 143 [] 0.98 Alignments for each domain: == domain 1 score: 123.4 bits; conditional E-value: 5.5e-37 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 Ls+++ vk W k+ +++e G+++L r++ ++P+t+ +F ++kd s +s++vkkHg +l ++d++++++ ++ + l + sp|P80945|HBAA_ANGAN 2 SLSAKDMAVVKGFWNKIAPKADEIGGEALGRMLRVFPQTKAYFAHWKDTS-----PNSPEVKKHGALILATIGDVVNRIE-NMTTVLGS 84 59********************************************9999.....89*********************98.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa kl+vdp +fk+l++ +++v+ +p++ft++v+ +++K+++ ++ +l+++Y+ sp|P80945|HBAA_ANGAN 85 LSDLHAFKLRVDPANFKILGHNIMVVICMTFPNDFTPEVHLSVDKFFQNFTLALSERYR 143 ********************************************************996 PP >> sp|O93349|HBB2_TRENE Hemoglobin subunit beta OS=Trematomus newnesi PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 123.3 0.0 5.7e-37 2.8e-34 4 149 .] 5 147 .] 2 147 .] 0.97 Alignments for each domain: == domain 1 score: 123.3 bits; conditional E-value: 5.7e-37 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++e+t + +++ + d+++ G +L r + ++P+tq++F F++L ++++ ++a+v +Hg kvl+ l +++++d ++ ++ dLs sp|O93349|HBB2_TRENE 5 TDKERTIISDIFSHM--DYDDIGPKALSRCLIVYPWTQRHFSGFGNLYNAEAIIGNANVAAHGIKVLHGLDRGMKNMD-NIADAYTDLS 90 678999999999999..9************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fklls+++ vlaa++++ fta+ q+a++K+la v +l ++Y+ sp|O93349|HBB2_TRENE 91 TLHSEKLHVDPDNFKLLSDCITIVLAAKMGHAFTAETQGAFQKFLAAVVSALGKQYH 147 ******************************************************997 PP >> sp|P86879|HBB1_LYCRE Hemoglobin subunit beta-1 OS=Lycodes reticulatus GN=hbb1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 123.0 0.0 7e-37 3.4e-34 5 148 .. 5 145 .. 1 146 [] 0.94 Alignments for each domain: == domain 1 score: 123.0 bits; conditional E-value: 7e-37 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 ++e+ ++ +++ d+e+ G +Lvr + ++P+tq++F F++Lst++++ +++++ +Hg+kvl+ l al+++d ++ +++dLs sp|P86879|HBB1_LYCRE 5 DKERAVILGIFSGL--DYEDIGPKALVRCLIVYPWTQRYFGTFGNLSTPAAISGNPKIAAHGVKVLHGLDMALQHMD-NIMETYADLSI 90 56666666677666..99***********************************************************.99999****** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 lH++ l+vdp +fkll+++l ++aa++++ ft+d q a++K+la+v +l ++Y sp|P86879|HBB1_LYCRE 91 LHSETLHVDPDNFKLLADCLTITIAAKMGHCFTPDTQIAFHKFLAVVVSALGKQY 145 ***************************************************9998 PP >> sp|P20244|HBA1_TORMA Hemoglobin subunit alpha-1 OS=Torpedo marmorata PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 122.7 1.0 8.9e-37 4.3e-34 2 149 .] 1 141 [] 1 141 [] 0.97 Alignments for each domain: == domain 1 score: 122.7 bits; conditional E-value: 8.9e-37 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLse++k+++k++ k++++ e Ga++L rlf +P+t+ +F+kF + s + + vk+Hg vl+Al d+ ++ld +l+ +l++ sp|P20244|HBA1_TORMA 1 VLSEGNKKAIKNLLQKIHSQTEVLGAEALARLFECHPQTKSYFPKFSGFS-----ANDKRVKHHGALVLKALVDTNKHLD-DLPHHLNK 83 69************************************************.....56689*******************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 L+e+H k l vdp++fkl+s++++++laa+ +ef+++ + a++K+l+ v+ +l+s Y+ sp|P20244|HBA1_TORMA 84 LAEKHGKGLLVDPHNFKLFSDCIAVTLAAH-LQEFSPETHCAVDKFLEEVTYQLSSLYR 141 *****************************9.79**********************9996 PP >> sp|P16309|HBB_NOTCO Hemoglobin subunit beta OS=Notothenia coriiceps neglecta GN=hbb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 122.7 0.0 8.7e-37 4.2e-34 4 149 .] 4 146 .] 1 146 [] 0.97 Alignments for each domain: == domain 1 score: 122.7 bits; conditional E-value: 8.7e-37 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 s+ e+ ++ +++ + d+++ G +L r + ++P+tq++F F++L ++++ ++a+v +Hg kvl+ l +++++d k+ ++++Ls sp|P16309|HBB_NOTCO 4 SDSERAIITDIFSHM--DYDDIGPKALSRCLIVYPWTQRHFSGFGNLYNAEAILGNANVAAHGIKVLHGLDRGVKNMD-KIVDAYAELSM 90 788999999999999..9************************************************************.9********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +fklls+++ v+aa++++ ft+++q a++K+la+v +l ++Y+ sp|P16309|HBB_NOTCO 91 LHSEKLHVDPDNFKLLSDCITIVVAAKMGSAFTPEIQCAFQKFLAVVVSALGKQYH 146 *****************************************************997 PP >> sp|Q1AGS9|HBA1_BORSA Hemoglobin subunit alpha-1 OS=Boreogadus saida GN=hba1 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 122.3 0.1 1.1e-36 5.6e-34 2 149 .] 2 143 .] 1 143 [] 0.98 Alignments for each domain: == domain 1 score: 122.3 bits; conditional E-value: 1.1e-36 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 Ls+++k +vk ++k+ + ++ Ga++L rl+ ++P+t+ +F ++k s +sa v+kHg ++++ + da+ k+d +l+a l + sp|Q1AGS9|HBA1_BORSA 2 SLSAKDKATVKDFFGKMSTRSDDIGAEALSRLVAVYPQTKSYFAHWKSAS-----PGSAPVRKHGITIMGGVYDAVGKID-DLKAGLLS 84 69********************************************9888.....9***********************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa l+vdp +fkll++++++ + +p+eft++v+ a++K+la +a +l +kY+ sp|Q1AGS9|HBA1_BORSA 85 LSELHAFMLRVDPVNFKLLAHCMLVCMSMVFPEEFTPQVHVAVDKFLAQLALALCEKYR 143 **********************************************************7 PP >> sp|P06714|HBAT_HORSE Hemoglobin subunit theta-1 OS=Equus caballus GN=HBQ1 PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 122.1 0.1 1.4e-36 6.8e-34 2 147 .. 2 140 .. 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 122.1 bits; conditional E-value: 1.4e-36 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 L++a++ +v+a+W k++++v+ + +++L+r+f+ +P t ++F + dLs +s +vk+Hg+kv+dAl+ a+ +l+ +l+ +l++ sp|P06714|HBAT_HORSE 2 ALAAADRATVRALWKKMGSNVGVYATEALERMFLGFPSTTTYFLHL-DLS-----LGSTQVKAHGQKVADALTLAVEHLE-DLPRALSA 83 5899******************************************.9*9.....9**********************98.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllask 147 L ++H ++l+vdp f+ll+++l+++ a ++p++f++ +a+l K+l+ v +las sp|P06714|HBAT_HORSE 84 LRHRHVRELRVDPASFQLLGHCLLVTPARHFPGDFSPTLHASLVKFLSHVISALASD 140 *****************************************************9985 PP >> sp|Q6B0K9|HBM_HUMAN Hemoglobin subunit mu OS=Homo sapiens GN=HBM PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 121.8 0.3 1.7e-36 8.5e-34 3 149 .] 2 141 .] 1 141 [] 0.97 Alignments for each domain: == domain 1 score: 121.8 bits; conditional E-value: 1.7e-36 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+ ++ +vW + + ++ Ga+ L rlf+++P t+ +F++ s + + + ++ Hg+++l A+++a++++d +l+a+l++L+ sp|Q6B0K9|HBM_HUMAN 2 LSAQERAQIAQVWDLIAGHEAQFGAELLLRLFTVYPSTKVYFPHL---S---ACQDATQLLSHGQRMLAAVGAAVQHVD-NLRAALSPLA 84 9******************************************88...4...6678999********************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +lHa l+vdp +f ll ++ +vla++l eft ++qaa +K+l va +l++kY+ sp|Q6B0K9|HBM_HUMAN 85 DLHALVLRVDPANFPLLIQCFHVVLASHLQDEFTVQMQAAWDKFLTGVAVVLTEKYR 141 ********************************************************7 PP >> sp|P14521|HBB_ELEEL Hemoglobin subunit beta OS=Electrophorus electricus GN=hbb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 121.7 0.0 1.8e-36 8.8e-34 2 149 .] 2 147 .] 1 147 [] 0.97 Alignments for each domain: == domain 1 score: 121.7 bits; conditional E-value: 1.8e-36 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L+ea++ ++ ++W+ +e G ++L rl+ ++P+tq++F +F+++s +++++++++v +Hgk v++Al +a+++l+ ++++++++L sp|P14521|HBB_ELEEL 2 ELTEAQRGAIVNLWGHL--SPDEIGPQALARLLIVYPWTQRYFASFGNISSAAAIMGNPKVAAHGKVVVGALDKAVKNLN-NIKGTYAAL 88 79***************..899*********************************************************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarl.pkeftadvqaaleKllalvakllaskYk 149 s H++kl+vdp +f+ll+e + +a +l p+ f a+ q al K+la v +l ++Y+ sp|P14521|HBB_ELEEL 89 STIHSEKLHVDPDNFRLLAESFTVSVAMKLgPSGFNAETQHALAKFLAEVVSALGKQYH 147 ************************9999984689**********************997 PP >> sp|P02020|HBA_LEPPA Hemoglobin subunit alpha OS=Lepidosiren paradoxus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 121.4 0.0 2.3e-36 1.1e-33 3 149 .] 3 143 .] 1 143 [] 0.95 Alignments for each domain: == domain 1 score: 121.4 bits; conditional E-value: 2.3e-36 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 s+++ +k++W+ ++ + G+++L r+f +P t+ +F++F++ d ++++vk+Hgkkv+dA+++++++l +l++ l++Ls sp|P02020|HBA_LEPPA 3 FSQDDEVLIKEAWGLL-HQIPNAGGEALARMFSCYPGTKSYFPHFGH----DFSANNEKVKHHGKKVVDAIGQGVQHLH-DLSSCLHTLS 86 5889999*******99.899*************************75....445889*********************8.9********* PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 e+Ha++l vdp +f+ l e++++++aa+++++ft++++ a eK l + ++l s Y+ sp|P02020|HBA_LEPPA 87 EKHARELMVDPCNFQYLIEAIMTTIAAHYGEKFTPEINCAAEKCLGQIVHVLISLYR 143 ****************************************************99996 PP >> sp|P14399|MYG_MUSAN Myoglobin OS=Mustelus antarcticus GN=mb PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 121.3 0.4 2.4e-36 1.2e-33 7 149 .] 3 143 .. 1 143 [. 0.98 Alignments for each domain: == domain 1 score: 121.3 bits; conditional E-value: 2.4e-36 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHa 96 +++kv++vW+ ve+d G++iL rlf +P++q++F+kFk+ s elk ad+k+ + +vl Al+++++k ++ +++ +k+L+ H sp|P14399|MYG_MUSAN 3 DWEKVNSVWSAVESDLTAIGQNILLRLFEQYPESQNHFPKFKNKS-LGELKDTADIKAQADTVLSALGNIVKK-KGSHSQPVKALAATHI 90 89***************************************9877.89*************************.99************** PP globins4 97 kklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + +k++p+yf ++ + vdvl + +p+e+ a+vqaa+ ++++++ ++ + Yk sp|P14399|MYG_MUSAN 91 TTHKIPPHYFTKITTIAVDVLSEMYPSEMNAQVQAAFSGAFKIICSDIEKEYK 143 **************************************************997 PP >> sp|P84604|HBB2_ARCGL Hemoglobin subunit beta-2 OS=Arctogadus glacialis GN=hbb2 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 121.1 0.0 2.8e-36 1.3e-33 4 149 .] 5 147 .] 2 147 .] 0.97 Alignments for each domain: == domain 1 score: 121.1 bits; conditional E-value: 2.8e-36 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++ e+ ++ ++a d+ee G L+r + ++P+tq++F F++L ++ +++++ + +Hg k+l+ l al+++d ++++++++Ls sp|P84604|HBB2_ARCGL 5 TDSERAIINDIFATL--DYEEIGRKSLTRCLIVYPWTQRYFGAFGNLYNAATIMANPLIAAHGTKILHGLDRALKNMD-DIKNTYAELS 90 678899999999999..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +f+ll+++l +v+aa++++ ft d q a +K+l++v +l +Y+ sp|P84604|HBB2_ARCGL 91 LLHSDKLHVDPDNFRLLADCLTVVIAAKMGAAFTVDTQVAWQKFLSVVVSALGRQYH 147 ****************************************************99997 PP >> sp|P29627|HBBZ_MESAU Hemoglobin subunit beta-Z (Fragment) OS=Mesocricetus auratus GN=HBBZ PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 120.9 0.3 3.3e-36 1.6e-33 47 149 .] 1 102 [] 1 102 [] 0.99 Alignments for each domain: == domain 1 score: 120.9 bits; conditional E-value: 3.3e-36 globins4 47 FkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleK 135 F++Ls ++++++++ +++Hgkkvl+ l+ a++++d +l+ ++++LselH++kl+vdp++fkll++vlv vl ++++keft++vqaa +K sp|P29627|HBBZ_MESAU 1 FGNLSSAQAIMGNPRIRAHGKKVLTSLGLAVQNMD-NLKETFAHLSELHCDKLHVDPENFKLLGNVLVIVLSTHFAKEFTPEVQAAWQK 88 899********************************.***************************************************** PP globins4 136 llalvakllaskYk 149 l+a va++l++kY+ sp|P29627|HBBZ_MESAU 89 LVAGVANALSHKYH 102 *************7 PP >> sp|P56691|HBA_DASAK Hemoglobin subunit alpha OS=Dasyatis akajei GN=hba PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 120.6 1.0 4e-36 1.9e-33 2 149 .] 2 142 .] 1 142 [] 0.98 Alignments for each domain: == domain 1 score: 120.6 bits; conditional E-value: 4e-36 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs ++k++++++ ++a++e Gad+L rlf +P+t+++F kF + + +++vkkHgk+v++Al+da +ld +l+ +l+dL sp|P56691|HBA_DASAK 2 VLSSQNKKAIEELGNLIKANAEAWGADALARLFELHPQTKTYFSKFSGFE-----ACNEQVKKHGKRVMNALADATHHLD-NLHLHLEDL 85 79********************************************9999.....899**********************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + +H ++l vdp++f+l+++++v++la + + ft+ + a++K+l+lva l+s Y+ sp|P56691|HBA_DASAK 86 ARKHGENLLVDPHNFHLFADCIVVTLAVN-LQAFTPVTHCAVDKFLELVAYELSSCYR 142 ****************************9.678**********************996 PP >> sp|P84611|HBB2_GADMO Hemoglobin subunit beta-2 OS=Gadus morhua GN=hbb2 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.6 0.0 8.2e-36 4e-33 4 149 .] 5 147 .] 2 147 .] 0.98 Alignments for each domain: == domain 1 score: 119.6 bits; conditional E-value: 8.2e-36 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 +++e+t ++ +++ d+ee G L r + ++P+tq++F F++L ++ +++++ + +Hg k+l+ l al+++d ++++++++Ls sp|P84611|HBB2_GADMO 5 TDEERTIINDIFSTL--DYEEIGRKSLCRCLIVYPWTQRYFGAFGNLYNAETIMANPLIAAHGTKILHGLDRALKNMD-DIKNTYAELS 90 7899999*****999..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +f+ll+++l +v+aa+++ ft d q a++K+l++v +l +Y+ sp|P84611|HBB2_GADMO 91 LLHSDKLHVDPDNFRLLADCLTVVIAAKMGPAFTVDTQVAVQKFLSVVVSALGRQYH 147 ****************************************************99997 PP >> sp|P68189|MYG_THUTH Myoglobin OS=Thunnus thynnus GN=mb PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.5 0.2 8.6e-36 4.2e-33 6 149 .] 2 141 .. 1 141 [. 0.96 Alignments for each domain: == domain 1 score: 119.5 bits; conditional E-value: 8.6e-36 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ +v++ W++vead+ + G+ +L+rlfk +P+tq+ F+kF ++ ++++ ++a v +Hg +vl+ l++ l+ ++ + a lk+L+++H sp|P68189|MYG_THUTH 2 ADFDAVLKCWGPVEADYTTIGGLVLTRLFKEHPETQKLFPKFAGIA-QADIAGNAAVSAHGATVLKKLGELLKA-KGSHAAILKPLANSH 89 57789***************************************99.999**********************99.99************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+++++fkl+sevlv+v++++ + + a q+al ++ ++ +l ++Yk sp|P68189|MYG_THUTH 90 ATKHKIPINNFKLISEVLVKVMHEK--AGLDAGGQTALRNVMGIIIADLEANYK 141 *************************..66667889*****************97 PP >> sp|P68190|MYG_THUOR Myoglobin OS=Thunnus orientalis GN=mb PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.5 0.2 8.6e-36 4.2e-33 6 149 .] 2 141 .. 1 141 [. 0.96 Alignments for each domain: == domain 1 score: 119.5 bits; conditional E-value: 8.6e-36 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ +v++ W++vead+ + G+ +L+rlfk +P+tq+ F+kF ++ ++++ ++a v +Hg +vl+ l++ l+ ++ + a lk+L+++H sp|P68190|MYG_THUOR 2 ADFDAVLKCWGPVEADYTTIGGLVLTRLFKEHPETQKLFPKFAGIA-QADIAGNAAVSAHGATVLKKLGELLKA-KGSHAAILKPLANSH 89 57789***************************************99.999**********************99.99************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+++++fkl+sevlv+v++++ + + a q+al ++ ++ +l ++Yk sp|P68190|MYG_THUOR 90 ATKHKIPINNFKLISEVLVKVMHEK--AGLDAGGQTALRNVMGIIIADLEANYK 141 *************************..66667889*****************97 PP >> sp|Q76G09|MYG_THUOB Myoglobin OS=Thunnus obesus GN=mb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.5 0.2 8.6e-36 4.2e-33 6 149 .] 2 141 .. 1 141 [. 0.96 Alignments for each domain: == domain 1 score: 119.5 bits; conditional E-value: 8.6e-36 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ +v++ W++vead+ + G+ +L+rlfk +P+tq+ F+kF ++ ++++ ++a v +Hg +vl+ l++ l+ ++ + a lk+L+++H sp|Q76G09|MYG_THUOB 2 ADFDAVLKCWGPVEADYTTIGGLVLTRLFKEHPETQKLFPKFAGIA-QADIAGNAAVSAHGATVLKKLGELLKA-KGSHAAILKPLANSH 89 57789***************************************99.999**********************99.99************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+++++fkl+sevlv+v++++ + + a q+al ++ ++ +l ++Yk sp|Q76G09|MYG_THUOB 90 ATKHKIPINNFKLISEVLVKVMHEK--AGLDAGGQTALRNVMGIIIADLEANYK 141 *************************..66667889*****************97 PP >> sp|P07408|HBA_SQUAC Hemoglobin subunit alpha OS=Squalus acanthias GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.3 0.2 9.7e-36 4.7e-33 2 149 .] 1 141 [] 1 141 [] 0.98 Alignments for each domain: == domain 1 score: 119.3 bits; conditional E-value: 9.7e-36 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+kt++k++ + +++e Ga+ L r+f +tP t+++F kF d s + + vk+Hg kvl+A++da +ld ++ ++l +L sp|P07408|HBA_SQUAC 1 VLSAADKTAIKHLTGSLRTNAEAWGAESLARMFATTPSTKTYFSKFTDFS-----ANGKRVKAHGGKVLNAVADATDHLD-NVAGHLDPL 84 69********************************************9999.....67899********************.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + lH + l vdp++f ll+++++++laa+ +e+ ++ + al+K+l va++l s Y+ sp|P07408|HBA_SQUAC 85 AVLHGTTLCVDPHNFPLLTQCILVTLAAH-LTELKPETHCALDKFLCEVATALGSHYR 141 ****************************9.789***********************96 PP >> sp|Q1AGS6|HBB2_BORSA Hemoglobin subunit beta-2 OS=Boreogadus saida GN=hbb2 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.3 0.0 9.7e-36 4.7e-33 4 149 .] 5 147 .] 2 147 .] 0.97 Alignments for each domain: == domain 1 score: 119.3 bits; conditional E-value: 9.7e-36 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 ++ e+ +++++++ d+ee G L r + ++P+tq++F F++L ++ +++++ + +Hg k+l+ l al+++d ++++++++Ls sp|Q1AGS6|HBB2_BORSA 5 TDSERAIITSIFSNL--DYEEIGRKSLCRCLIVYPWTQRYFGAFGNLYNAETIMANPLIAAHGTKILHGLDRALKNMD-DIKNTYAELS 90 678999999999999..*************************************************************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +f+ll+++l +v+aa++++ ft + q a +K+l++v +l +Y+ sp|Q1AGS6|HBB2_BORSA 91 LLHSDKLHVDPDNFRLLADCLTVVIAAKMGSAFTVETQVAWQKFLSVVVSALGRQYH 147 ****************************************************99997 PP >> sp|O42425|HBA2_GADMO Hemoglobin subunit alpha-2 OS=Gadus morhua GN=hba2 PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 119.2 0.1 1.1e-35 5.4e-33 2 149 .] 2 143 .] 1 143 [] 0.98 Alignments for each domain: == domain 1 score: 119.2 bits; conditional E-value: 1.1e-35 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 Ls ++k +vk ++k+ + ++ Ga++L rl+ ++P+t+ +F ++kd s +sa v+kHg + ++ + da+ k+d +l++ l + sp|O42425|HBA2_GADMO 2 SLSSKQKATVKDFFSKMSTRSDDIGAEALSRLVAVYPQTKSYFSHWKDAS-----PGSAPVRKHGITTMGGVYDAVGKID-DLKGGLLS 84 5999******************************************9988.....9***********************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 LselHa l+vdp +fkll++++++ + +p+eft++v+ a++K+la +a +la+kY+ sp|O42425|HBA2_GADMO 85 LSELHAFMLRVDPVNFKLLAHCMLVCMSMIFPEEFTPQVHVAVDKFLAQLALALAEKYR 143 **********************************************************7 PP >> sp|P02205|MYG_THUAL Myoglobin OS=Thunnus albacares GN=mb PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.9 0.2 1.3e-35 6.4e-33 6 149 .] 2 141 .. 1 141 [. 0.96 Alignments for each domain: == domain 1 score: 118.9 bits; conditional E-value: 1.3e-35 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ +v++ W++vead+ ++G+ +L+rlfk +P+tq+ F+kF ++ ++++ ++a + +Hg +vl+ l++ l+ ++ + a lk+L+++H sp|P02205|MYG_THUAL 2 ADFDAVLKCWGPVEADYTTMGGLVLTRLFKEHPETQKLFPKFAGIA-QADIAGNAAISAHGATVLKKLGELLKA-KGSHAAILKPLANSH 89 57789***************************************99.999**********************99.99************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+++++fkl+sevlv+v++++ + + a q+al ++ ++ +l ++Yk sp|P02205|MYG_THUAL 90 ATKHKIPINNFKLISEVLVKVMHEK--AGLDAGGQTALRNVMGIIIADLEANYK 141 *************************..66667889*****************97 PP >> sp|P83113|HBA2_TELPE Hemoglobin subunit alpha-2 (Fragment) OS=Telmatobius peruvianus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.7 0.1 1.5e-35 7.3e-33 7 149 .] 2 137 .] 1 137 [] 0.98 Alignments for each domain: == domain 1 score: 118.7 bits; conditional E-value: 1.5e-35 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 ++++++a+W v ++ +++G+++L rlf+s P+t+++F++F d + k s+++k+Hgkkv+dAl++a ++ld +++++l++L +lH sp|P83113|HBA2_TELPE 2 DRSHILAIWPSVASHGADYGGEALYRLFLSNPQTKTYFPNF-DFH-----KDSPQIKAHGKKVVDALTEASKHLD-NINGALSKLFDLH 83 7899*************************************.777.....9************************.************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a +l+vdp +f ll++ + +++a +p + ++ l+K+la v l+skY+ sp|P83113|HBA2_TELPE 84 AFELRVDPGNFPLLAHHINVTIAVMFPDDKFDIAHHQLDKFLAAVGGSLTSKYR 137 *****************************999*********************7 PP >> sp|Q9DGJ0|MYG_SARCH Myoglobin OS=Sarda chiliensis GN=mb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.6 0.6 1.6e-35 7.8e-33 6 149 .] 2 141 .. 1 141 [. 0.95 Alignments for each domain: == domain 1 score: 118.6 bits; conditional E-value: 1.6e-35 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ +v++ W++vead+ +G+ +L+rlfk +P+tq+ F+kF ++ ++++ ++a + +Hg +vl+ l++ l+ ++++ a lk+++++H sp|Q9DGJ0|MYG_SARCH 2 ADFDAVLKFWGPVEADYTSHGGLVLTRLFKEHPETQKLFPKFTGIA-QADMAGNAAISAHGATVLKKLGELLKA-KGNHAAILKPMANSH 89 57789***************************************99.999**********************99.99************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+++++fkl+se++v+v++++ + + a q al ++a v +l ++Yk sp|Q9DGJ0|MYG_SARCH 90 ATKHKIPINNFKLISEIIVKVMQEKAG--MDAGGQQALRNVMAAVIADLEANYK 141 *************************55..5567799****************97 PP >> sp|P02015|HBA_AMBME Hemoglobin subunit alpha OS=Ambystoma mexicanum GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.4 0.4 1.8e-35 8.9e-33 2 149 .] 3 143 .] 2 143 .] 0.98 Alignments for each domain: == domain 1 score: 118.4 bits; conditional E-value: 1.8e-35 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 +Ls ++k +vkavW v+ + + G ++L r+f+ +t+++F+ kdL+ ++s ++ Hgkkv++Als+a+a++d +lea+l +L sp|P02015|HBA_AMBME 3 KLSGEDKANVKAVWDHVKGHEDAFGHEALGRMFTGIEQTHTYFPD-KDLN-----EGSFALHSHGKKVMGALSNAVAHID-DLEATLVKL 85 599*****************************************9.69*9.....9***********************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s++Ha+ l vdp f l+e +++vl +lp++ft +vq +++K+l + +l skY+ sp|P02015|HBA_AMBME 86 SDKHAHDLMVDPAEFPRLAEDILVVLGFHLPAKFTYAVQCSIDKFLHVTMRLCISKYR 143 ****************************************************99**96 PP >> sp|P86887|HBB2_LYCRE Hemoglobin subunit beta-2 OS=Lycodes reticulatus GN=hbb2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 118.1 0.0 2.3e-35 1.1e-32 5 148 .. 5 145 .. 1 146 [] 0.94 Alignments for each domain: == domain 1 score: 118.1 bits; conditional E-value: 2.3e-35 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 ++e+ ++ +++ d+e+ G +Lvr + ++P+tq++F F++Ls ++++ ++ ++ +Hg+kvl+ l al+++d ++ +++dLs sp|P86887|HBB2_LYCRE 5 DKERAVILGIFSGL--DYEDIGPKALVRCLIVYPWTQRYFGAFGNLSSAAAISGNLKIAAHGVKVLHGLDMALQHMD-NIMETYADLSI 90 56666666677666..99***********************************************************.99999****** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 lH++ l+vdp +fkll+++l ++aa++++ ft+d q a++K+la+v +l ++Y sp|P86887|HBB2_LYCRE 91 LHSETLHVDPDNFKLLADCLTITIAAKMGHCFTPDTQIAFHKFLAVVVSALGKQY 145 ***************************************************9998 PP >> sp|O13078|HBB_MERMR Hemoglobin subunit beta OS=Merlangius merlangus GN=hbb PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 117.2 0.0 4.3e-35 2.1e-32 4 149 .] 5 147 .] 2 147 .] 0.97 Alignments for each domain: == domain 1 score: 117.2 bits; conditional E-value: 4.3e-35 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 +++e+ ++++++ d+ee G L r + ++P+tq++F F++L ++ + ++ + +Hg k+l+ l al+++d ++++++++Ls+ sp|O13078|HBB_MERMR 5 TDDERAIINSIFSTL--DYEEIGRKSLCRCLIVYPWTQRYFGGFGNLYNAETILCNPLIAAHGTKILHGLDRALKNMD-DIKNTYAELSQ 91 678899999999999..9************************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +f+ll+++l +v+aa++++ ft + q a +K+la+v +l +Y+ sp|O13078|HBB_MERMR 92 LHSDKLHVDPDNFRLLADCLTVVIAAKMGTAFTVETQVAWQKFLAVVVSALGRQYH 147 ***************************************************99997 PP >> sp|Q1AGS3|HBB1_ARCGL Hemoglobin subunit beta-1 (Fragment) OS=Arctogadus glacialis GN=hbb1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 116.4 0.0 7.8e-35 3.8e-32 15 149 .] 1 132 [] 1 132 [] 0.98 Alignments for each domain: == domain 1 score: 116.4 bits; conditional E-value: 7.8e-35 globins4 15 WakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHakklkvdp 103 W+k+ d++ G +L+r + ++P+tq++F +F+dLst ++++++++v +Hg+ l+ l al ++d ++++++++Ls lH++kl+vdp sp|Q1AGS3|HBB1_ARCGL 1 WSKI--DIDVCGPLALQRCLIVYPWTQRYFGSFGDLSTVAAIMGNPKVAQHGVVALTGLRTALDHMD-EIKSTYAALSVLHSEKLHVDP 86 8899..89999********************************************************.9******************** PP globins4 104 kyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +f+ll e+l v+a +++k++++d+qaa +K l v +l +Y+ sp|Q1AGS3|HBB1_ARCGL 87 DNFRLLCECLTIVIAGKMGKKLSPDMQAAWQKYLCAVVSALGRQYH 132 *****************************************99997 PP >> sp|P16417|HBAD_LIOMI Hemoglobin subunit alpha-D OS=Liophis miliaris GN=HBAD PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 115.8 0.0 1.2e-34 6e-32 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 115.8 bits; conditional E-value: 1.2e-34 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vL+++++ ++a +k ++ e+ Gad+L rl+ ++P+++++F +F +Ls +s+d+ + g+kv +Al al++ld +++++l++ sp|P16417|HBAD_LIOMI 1 VLTAEDRRLLQASVGKLGCRLEDIGADALNRLLITFPQSKTYFSHF-NLS-----PGSKDIIHQGEKVGKALDSALKHLD-DIRGTLSQ 82 699*******************************************.999.....9***********************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa +l+vdp +f+lls+++ + la++l +e++a+v a +K+l+lva +l++kY+ sp|P16417|HBAD_LIOMI 83 LSDLHAYNLRVDPVNFQLLSKCIHVSLATHLRNEYSASVTLAWDKFLELVADVLSEKYR 141 **********************************************************7 PP >> sp|P20245|HBA2_TORMA Hemoglobin subunit alpha-2 OS=Torpedo marmorata PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 115.7 1.1 1.3e-34 6.2e-32 2 149 .] 1 141 [] 1 141 [] 0.97 Alignments for each domain: == domain 1 score: 115.7 bits; conditional E-value: 1.3e-34 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vLse++k+ +k++ k++++ e Ga++L rlf +P+t+ +F+kF + s + + vk+Hg vl+Al d+ +ld +l+ +l++ sp|P20245|HBA2_TORMA 1 VLSEGNKKIIKNLLQKIHSQTEVLGAEALARLFECHPQTKSYFPKFSGFS-----ANDKRVKHHGDLVLKALVDTNDHLD-DLPHHLHK 83 69************************************************.....56689*******************9.******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 L+e+H k l vdp++fkl+s++++++laa+ +e +++ + a++K+l+ v+ +l+s Y+ sp|P20245|HBA2_TORMA 84 LAEKHGKDLLVDPHNFKLFSDCIAVTLAAH-LQEKSPETHCAVDKFLEEVTYQLSSLYR 141 ******************************.6889********************9996 PP >> sp|P10786|HBB2_TRICR Hemoglobin subunit beta-2 OS=Triturus cristatus GN=HBB2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 115.7 0.0 1.3e-34 6.2e-32 1 148 [. 1 145 [] 1 145 [] 0.99 Alignments for each domain: == domain 1 score: 115.7 bits; conditional E-value: 1.3e-34 globins4 1 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk 89 v+L++++++++ a+ +kv +v+ G++ L rl+++ P+++++F F+dLs d++ +++v +Hg kv+ + +a ++ld +l+ ++ sp|P10786|HBB2_TRICR 1 VHLTAEDRKEIAAILGKV--NVDSLGGQCLARLIVVNPWSRRYFHDFGDLSSCDAICRNPKVLAHGAKVMRSIVEATKHLD-NLREYYA 86 69****************..*************************************************************.******* PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 dLs H+ k+ vdp++fkl+s ++++ la l ++f+ + q a+eKl++ v+++l + Y sp|P10786|HBB2_TRICR 87 DLSVTHSLKFYVDPENFKLFSGIVIVCLALTLQTDFSCHKQLAFEKLMKGVSHALGHGY 145 *******************************************************9988 PP >> sp|P14397|MYG_GALGA Myoglobin OS=Galeorhinus galeus GN=mb PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 115.0 0.3 2.1e-34 1e-31 6 149 .] 2 143 .. 1 143 [. 0.98 Alignments for each domain: == domain 1 score: 115.0 bits; conditional E-value: 2.1e-34 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a++ kv++vW+ +ea++ +G++iL rlf +P++q +F+k k+ s elk ad+k+ + +vl+Al+++++k ++++++ +k+L+ H sp|P14397|MYG_GALGA 2 ADWDKVNSVWSAMEANITAVGQNILLRLFEQYPESQSYFPKLKNKS-LGELKDTADIKAQADTVLKALGNIVKK-KGNHSQPVKALAATH 89 79****************************************9877.89*************************.99************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + +k++p+yf ++ + v vl + +p+e+ a++q a+ ++++++ ++ + Yk sp|P14397|MYG_GALGA 90 ITTHKIPPHYFTKITTIAVGVLSEMYPSEMNAQAQEAFSGAFKSICSDIEKEYK 143 ***************************************************997 PP >> sp|A1A4Q3|HBM_BOVIN Hemoglobin subunit mu OS=Bos taurus GN=HBM PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.8 0.0 2.4e-34 1.2e-31 3 149 .] 2 141 .] 1 141 [] 0.97 Alignments for each domain: == domain 1 score: 114.8 bits; conditional E-value: 2.4e-34 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 Ls++e+ ++++vW + + + Ga+ L rlf+++P t+ +F + +d de ++ Hg+++l+A++ a++ +d +l+a l++L+ sp|A1A4Q3|HBM_BOVIN 2 LSAQERAHITQVWDLIAGHEAPFGAELLRRLFTVYPSTKVYFRHLGDHP--DE----VQLLSHGQRMLQAVGVAVQYMD-NLRAVLSPLA 84 9********************************************8866..54....57899*****************.********** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +lHa+ l+vdp +f l+ ++ +vla++l +eft ++qaa +K+l va +l++kY+ sp|A1A4Q3|HBM_BOVIN 85 DLHAQVLRVDPTNFPLVIQCFQVVLASHLQGEFTVEMQAAWDKFLTGVAVVLTEKYR 141 ********************************************************7 PP >> sp|Q9DGJ1|MYG_MAKNI Myoglobin OS=Makaira nigricans GN=mb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.9 1.6 2.3e-34 1.1e-31 6 149 .] 2 141 .. 1 141 [. 0.96 Alignments for each domain: == domain 1 score: 114.9 bits; conditional E-value: 2.3e-34 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ + v++ W++vead++++G+ +L+rlf+ +P+tq+ F+kF ++ ++++ ++a + +Hg +vl+ l++ l+ ++ + a +k+++++H sp|Q9DGJ1|MYG_MAKNI 2 ADFEMVLKHWGPVEADYATHGNLVLTRLFTEHPETQKLFPKFAGIA-KADMAGNAAISAHGATVLKKLGELLKA-KGSHAAIIKPMANSH 89 5778899*************************************99.999**********************99.99************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+++k+f+l+sev+ +v++++ + + a+ q al+ ++ ++ ++ ++Yk sp|Q9DGJ1|MYG_MAKNI 90 ATKHKIPIKNFELISEVIGKVMHEK--AGLDAAGQKALKNVMTTIIADIEANYK 141 *************************..77789999***************9997 PP >> sp|P02135|HBB_LITCT Hemoglobin subunit beta OS=Lithobates catesbeiana GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.8 0.0 2.5e-34 1.2e-31 10 149 .] 4 140 .] 2 140 .] 0.96 Alignments for each domain: == domain 1 score: 114.8 bits; conditional E-value: 2.5e-34 globins4 10 kvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHakkl 99 v a akv d +G+++L rl+ ++P+tq++F F++L +d++ + +v +Hg++vld ++++l++ ++l+a +++Lse+H+ +l sp|P02135|HBB_LITCT 4 DVSAFLAKV--DKRAVGGEALARLLIVYPWTQRYFSTFGNLGSADAISHNSKVLAHGQRVLDSIEEGLKH-PZBLKAYYAKLSERHSGEL 90 577888999..8899*******************************************************.66***************** PP globins4 100 kvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +vdp +f l++vl++v+a ++ +eft++ q al+ + v ++la+ Y+ sp|P02135|HBB_LITCT 91 HVDPANFYRLGNVLITVMARHFHEEFTPELQCALHSSFCAVGEALAKGYH 140 **********************************************9996 PP >> sp|Q701N9|MYG_TETNG Myoglobin OS=Tetraodon nigroviridis GN=mb PE=3 SV=4 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.6 0.1 2.7e-34 1.3e-31 7 149 .] 3 141 .. 1 141 [. 0.96 Alignments for each domain: == domain 1 score: 114.6 bits; conditional E-value: 2.7e-34 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHa 96 + v++ W++vead+ +G+ +L+rlf+ P+tq+ F+kF ++ + el ++a v +Hg +vl+ l++ l+ ++++ a l++L+++Ha sp|Q701N9|MYG_TETNG 3 DFDMVLKFWGPVEADYSAHGGMVLTRLFTENPETQQLFPKFVGIA-QSELAGNAAVSAHGATVLKKLGELLKA-KGNHAAILQPLANSHA 90 567899************************************999.99***********************99.99************** PP globins4 97 kklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +k+k+++k+fkl++ev+ +v+a++ + + ++ q al ++a++ ++ + Yk sp|Q701N9|MYG_TETNG 91 TKHKIPIKNFKLIAEVIGKVMAEK--AGLDTAGQQALRNIMATIIADIDATYK 141 ************************..666678899***************997 PP >> sp|Q6I7B0|MYG_AUXRO Myoglobin OS=Auxis rochei GN=mb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.3 0.2 3.5e-34 1.7e-31 6 149 .] 2 141 .. 1 141 [. 0.97 Alignments for each domain: == domain 1 score: 114.3 bits; conditional E-value: 3.5e-34 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ +v++ W++vead +++G+ +L rlfk +P tq+ F+kF ++ + +l ++a v +Hg +vl+ l++ l+ ++++ a +k+L+++H sp|Q6I7B0|MYG_AUXRO 2 ADFDAVLKCWGPVEADFNTVGGMVLARLFKDHPDTQKLFPKFAGIA-AGDLAGNAAVAAHGGTVLKKLGELLKA-KGNHAAIIKPLANSH 89 57789***************************************99.889**********************99.99************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+++++fkl++e+lv+v++++ + + a+ q+al ++ +v +l ++Yk sp|Q6I7B0|MYG_AUXRO 90 ATKHKIPINNFKLITEALVHVMQEK--AGLDAAGQTALRNVMGIVIADLEANYK 141 ************************9..7788999******************97 PP >> sp|P14398|MYG_GALJA Myoglobin OS=Galeorhinus japonicus GN=mb PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.2 0.2 3.6e-34 1.8e-31 6 149 .] 2 143 .. 1 143 [. 0.98 Alignments for each domain: == domain 1 score: 114.2 bits; conditional E-value: 3.6e-34 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a++ kv++vW+ ve ++ G++iL rlf +P+++++F+k k+ s elk ad+k+ + +vl Al+++++k ++++++ +k+L+ H sp|P14398|MYG_GALJA 2 ABWDKVNSVWSAVEQNITAIGQNILLRLFEQYPESEDYFPKLKNKS-LGELKDTADIKAQADTVLRALGNIVKK-KGDHSQPVKALAATH 89 79****************************************9877.89*************************.99************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + +k++p+yf ++ + v vl + +p+e+ a++qaa+ +++ ++ ++ + Yk sp|P14398|MYG_GALJA 90 ITTHKIPPHYFTKITTIAVGVLSEMYPSEMNAQAQAAFSGAFKNICSDIEKEYK 143 ***************************************************997 PP >> sp|P84216|HBA_BATEA Hemoglobin subunit alpha OS=Bathyraja eatonii GN=HBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.0 2.5 4.2e-34 2e-31 2 149 .] 2 142 .] 1 142 [] 0.97 Alignments for each domain: == domain 1 score: 114.0 bits; conditional E-value: 4.2e-34 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 vLs+a+k+++++v ++ ++e +Gad+L rlf +P+t+++F++F + + a vk+Hg kv++A+ +a +ld +l+++l++L sp|P84216|HBA_BATEA 2 VLSDANKQEIHHVAELIKPHAEAVGADALARLFELHPQTKTYFPNFSGYH-----ATDAPVKAHGAKVINAVLKAAEHLD-DLPKHLEKL 85 89********************************************9998.....67799*******************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + +H ++l vdp++f l+s+++v++la++lp f+++ + a++K+l+ + ++l+skY+ sp|P84216|HBA_BATEA 86 ATKHGHELLVDPHNFVLFSDIIVVTLATKLP-TFSPATHRAIDKFLEELVHQLSSKYR 142 *****************************98.5************************7 PP >> sp|O09232|HBB_MELAE Hemoglobin subunit beta OS=Melanogrammus aeglefinus GN=hbb PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.0 0.0 4.2e-34 2e-31 4 149 .] 5 147 .] 2 147 .] 0.96 Alignments for each domain: == domain 1 score: 114.0 bits; conditional E-value: 4.2e-34 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 +++e+ ++ ++++ d+ee G L r + ++P+tq++F F++L ++ + ++ + +Hg k+l+ l al+++d ++++++++Ls sp|O09232|HBB_MELAE 5 TDDERAIINGIFSNL--DYEEIGRKSLCRCLIVYPWTQRYFGGFGNLYNAETILCNPLIAAHGTKILHGLDRALKNMD-DIKNTYAELSL 91 567777788888888..9************************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +f+ll+++l +v+aa++++ ft d q a +K+la+v +l +Y+ sp|O09232|HBB_MELAE 92 LHSDKLHVDPDNFRLLADCLTVVIAAKMGAAFTVDTQVAWQKFLAVVVSALGRQYH 147 ***************************************************99997 PP >> sp|P18991|HBB1_UROHA Hemoglobin subunit beta-1 (Fragments) OS=Uromastyx hardwickii PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 114.0 0.0 4.4e-34 2.1e-31 2 149 .] 2 146 .] 1 146 [] 0.98 Alignments for each domain: == domain 1 score: 114.0 bits; conditional E-value: 4.4e-34 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 + +++ek ++a W+kv dv+ +G++ L l++++P+tq+fFe F++Lst+ ++ ++++ v++ ++dal++ld ++ + sp|P18991|HBB1_UROHA 2 HWTAEEKALINAYWGKV--DVGSVGGETLANLLVVYPWTQRFFEDFGNLSTPSAILNNPKXXXXXXXVITSFGDALKNLD-NVXXXXXK 87 6799*************..*************************************************************.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Lse H++kl+vdp +f+ll++vl++ aa+++k l+ +va++la +Y+ sp|P18991|HBB1_UROHA 88 LSEYHCNKLHVDPVNFRLLGDVLITLSAANFGKXXXXXXXXXXXXLVGVVAHALARRYH 146 ********************************************************997 PP >> sp|Q9DGJ2|MYG_THUAA Myoglobin OS=Thunnus alalunga GN=mb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 113.4 0.1 6.6e-34 3.2e-31 6 149 .] 2 141 .. 1 141 [. 0.96 Alignments for each domain: == domain 1 score: 113.4 bits; conditional E-value: 6.6e-34 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ +v++ W++vead+ + G+ +L+rlfk +P tq+ F+kF ++ +++l ++a + +Hg +vl+ l++ l+ ++ + + lk+++++H sp|Q9DGJ2|MYG_THUAA 2 ADFDAVLKCWGPVEADYTTIGGLVLTRLFKEHPDTQKLFPKFAGIA-QADLAGNAAISAHGATVLKKLGELLKA-KGSHASILKPMANSH 89 57789***************************************99.999**********************99.99************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+++++fkl+sevlv+v++++ + + a q+al ++ ++ +l ++Yk sp|Q9DGJ2|MYG_THUAA 90 ATKHKIPINNFKLISEVLVKVMQEK--AGLDAGGQTALRNVMGIIIADLEANYK 141 *************************..66667889*****************97 PP >> sp|Q9DGI8|MYG_KATPE Myoglobin OS=Katsuwonus pelamis GN=mb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 112.7 0.6 1.1e-33 5.3e-31 7 149 .] 3 140 .. 1 140 [. 0.96 Alignments for each domain: == domain 1 score: 112.7 bits; conditional E-value: 1.1e-33 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHa 96 + +v++ W+ vead +++G+ +L rlfk +P+tq+ F+kF +++ ++ ++a v +Hg +vl+ l++ l+ ++++ a +k+L+++Ha sp|Q9DGI8|MYG_KATPE 3 DLDAVLKCWGAVEADFNTVGGLVLARLFKDHPETQKLFPKFAGIT--GDIAGNAAVAAHGATVLKKLGELLKA-KGNHAAIIKPLANSHA 89 67899**************************************99..89**********************99.99************** PP globins4 97 kklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 k++k+++++fkl++e+l++vl+++ + + a+ q+al ++ +v +l ++Yk sp|Q9DGI8|MYG_KATPE 90 KQHKIPINNFKLITEALAHVLHEK--AGLDAAGQTALRNVMGIVIADLEANYK 140 ************************..7788999******************97 PP >> sp|P02204|MYG_CYPCA Myoglobin OS=Cyprinus carpio GN=mb PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 112.0 0.1 1.7e-33 8.5e-31 7 149 .] 3 141 .. 1 141 [. 0.95 Alignments for each domain: == domain 1 score: 112.0 bits; conditional E-value: 1.7e-33 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHa 96 + + v++ W+ vead e++G+++L+rlfk +P+tq+ F+kF ++ ++el ++a vk+Hg +vl+ l++ l+ +++ a lk+L+ Ha sp|P02204|MYG_CYPCA 3 DAELVLKCWGGVEADFEGTGGEVLTRLFKQHPETQKLFPKFVGIA-SNELAGNAAVKAHGATVLKKLGELLKA-RGDHAAILKPLATTHA 90 567899************************************999.99***********************99.889************* PP globins4 97 kklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 + +k+ ++f+l++evlv+v+a++ + + a q+al +++++v ++ + Yk sp|P02204|MYG_CYPCA 91 NTHKIALNNFRLITEVLVKVMAEK--AGLDAGGQSALRRVMDVVIGDIDTYYK 141 ************************..66667889**********999998886 PP >> sp|P0C0U7|HBAD_DRYCE Hemoglobin subunit alpha-D OS=Drymarchon corais erebennus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 111.5 0.0 2.6e-33 1.3e-30 2 149 .] 1 141 [] 1 141 [] 0.99 Alignments for each domain: == domain 1 score: 111.5 bits; conditional E-value: 2.6e-33 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 vL+++++ ++a +k ++ e+ Gad+L rl+ ++P+++++F +F +Ls +s+d+ + g+kv +Al al++ld +++++l++ sp|P0C0U7|HBAD_DRYCE 1 VLTAEDRRLLQASVGKLGCRLEDIGADALNRLLIVFPQSKTYFSHF-NLS-----PGSKDIVHQGEKVGKALDSALKHLD-DIRGTLSQ 82 699*******************************************.999.....9***********************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls+lHa +l+vdp +f+lls++l + la++l +e+ a+ a +K+l+ va +l +kY+ sp|P0C0U7|HBAD_DRYCE 83 LSDLHAYNLRVDPVNFQLLSKCLHVSLATHLRNEYNASTCLAWDKFLEQVADVLCEKYR 141 **********************************************************7 PP >> sp|Q9DEN9|MYG_GOBGI Myoglobin OS=Gobionotothen gibberifrons GN=mb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 110.5 0.1 5e-33 2.4e-30 6 149 .] 2 141 .. 1 141 [. 0.96 Alignments for each domain: == domain 1 score: 110.5 bits; conditional E-value: 5e-33 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ v++ W++vead+ ++G +L+rlf+ +P+t++ F+kF ++ + +l + a v +Hg +vl+ l+d l+ + + a lk+Ls +H sp|Q9DEN9|MYG_GOBGI 2 ADFDMVLKCWGPVEADYTTHGSLVLTRLFTEHPETLKLFPKFAGIA-HGDLAGDAGVSAHGATVLNKLGDLLKA-RGAHAALLKPLSSSH 89 5677899*************************************99.899***********************9.88************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+++ +fkl++ev+ +v+ ++ + + a+ q+al ++a++ ++ + Yk sp|Q9DEN9|MYG_GOBGI 90 ATKHKIPIINFKLIAEVIGKVMEEK--AGLDAAGQTALRNVMAVIIADMEADYK 141 ************************9..7788999*****************997 PP >> sp|Q6VN46|MYG_DANRE Myoglobin OS=Danio rerio GN=mb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 109.5 0.0 1.1e-32 5.2e-30 6 149 .] 2 141 .. 1 141 [. 0.96 Alignments for each domain: == domain 1 score: 109.5 bits; conditional E-value: 1.1e-32 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a++ v++ W+ vead++ G+++L rlfk +P t++ F+kF ++s + +l +s+ v +Hg +vl+ l++ l+ ++++ a lk+L++ H sp|Q6VN46|MYG_DANRE 2 ADHDLVLKCWGAVEADYAANGGEVLNRLFKEYPDTLKLFPKFSGIS-QGDLAGSPAVAAHGATVLKKLGELLKA-KGDHAALLKPLANTH 89 67889****************************************9.899**********************99.99************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+ +kv ++f+l++evlv+v+a++ + + a+ q+al ++++ v ++ Yk sp|Q6VN46|MYG_DANRE 90 ANIHKVALNNFRLITEVLVKVMAEK--AGLDAAGQGALRRVMDAVIGDIDGYYK 141 *************************..7788999***********999987775 PP >> sp|Q9DEN8|MYG_NOTCO Myoglobin OS=Notothenia coriiceps neglecta GN=mb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.7 0.1 1.9e-32 9.1e-30 6 149 .] 2 141 .. 1 141 [. 0.96 Alignments for each domain: == domain 1 score: 108.7 bits; conditional E-value: 1.9e-32 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ v++ W+++ead++++G+ +L+rlf+ +P+t++ F+kF ++ + +l + a v +Hg +vl+ l+d l+ + + a lk+Ls +H sp|Q9DEN8|MYG_NOTCO 2 ADFDMVLKCWGPMEADYATHGGLVLTRLFTEHPETLKLFPKFAGIA-HGDLAGDAGVSAHGATVLNKLGDLLKA-RGAHAALLKPLSSSH 89 5677899*************************************99.899***********************9.88************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+++ +fkl++ev+ +v+ ++ + + a+ q+al ++a++ ++ + Yk sp|Q9DEN8|MYG_NOTCO 90 ATKHKIPIINFKLIAEVIGKVMEEK--AGLDAAGQTALRNVMAVIIADMEADYK 141 ************************9..7788999*****************997 PP >> sp|Q7T044|MYG_CHARH Myoglobin OS=Channichthys rhinoceratus GN=mb PE=3 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.4 0.1 2.4e-32 1.1e-29 6 149 .] 2 141 .. 1 141 [. 0.96 Alignments for each domain: == domain 1 score: 108.4 bits; conditional E-value: 2.4e-32 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ v++ W++vead +++G +L+rlf+ +P+t++ F+kF ++ + +l + a v +Hg +vl+ l+d l+ + + a lk+Ls +H sp|Q7T044|MYG_CHARH 2 ADFDMVLKCWGPVEADHATHGSLVLTRLFTEHPETLKLFPKFAGIA-HGDLAGDAGVSAHGATVLKKLGDLLKA-RGGHAALLKPLSSSH 89 5677899*************************************99.899***********************9.889************ PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+++ +fkl++ev+ +v+ ++ + + a+ q+al ++a++ +++ + Yk sp|Q7T044|MYG_CHARH 90 ATKHKIPIINFKLIAEVIGKVMEEK--AGLDAAGQTALRNVMAIIITDMEADYK 141 ************************9..7788999*****************997 PP >> sp|P06640|HBA2_PLEWA Hemoglobin subunit alpha-2 (Fragment) OS=Pleurodeles waltl PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 108.0 0.4 3.1e-32 1.5e-29 10 149 .] 1 133 [] 1 133 [] 0.98 Alignments for each domain: == domain 1 score: 108.0 bits; conditional E-value: 3.1e-32 globins4 10 kvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHakk 98 +vkavW v+ + e +Ga++L r f+ P+tq++F kdLs ++sa ++ Hgkkv+ Al++a+a++d ++++ +++Ls++Ha++ sp|P06640|HBA2_PLEWA 1 NVKAVWEHVKGHEEVYGAEALYRAFLCDPQTQTYFAG-KDLS-----ENSAFLHSHGKKVMCALTNAIAHID-DIDGCMSKLSDKHAHE 82 69*********************************87.7***.....99**********************9.9*************** PP globins4 99 lkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 l vdp +f +l++ +++vla l++ +t + + +++K+l+ v+++l+s+Y+ sp|P06640|HBA2_PLEWA 83 LMVDPGNFDILAHHILTVLAMFLSQLLTCANHRSVDKFLSCVKNVLTSRYR 133 **************************************************7 PP >> sp|P07409|HBB_SQUAC Hemoglobin subunit beta OS=Squalus acanthias GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.6 4.5 4e-32 1.9e-29 2 149 .] 2 142 .] 1 142 [] 0.94 Alignments for each domain: == domain 1 score: 107.6 bits; conditional E-value: 4e-32 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkks.advkkHgkkvldAlsdalakldekleaklkd 90 + + +ek v+avW+k d + + a +L+rlf+++P+t+++F kF++ ++++s v++H+ kv+ Al+ a +++d +++ ++ + sp|P07409|HBB_SQUAC 2 HWTGEEKALVNAVWTKT--DHQAVVAKALERLFVVYPWTKTYFVKFNG-----KFHASdSTVQTHAGKVVSALTVAYNHID-DVKPHFVE 83 56789***********9..899999*********************54.....45666257*******************9.9******* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 Ls++H ++l+vdp++fkll+++l + l + l keft++vqaa K+ ++v +l++ Y+ sp|P07409|HBB_SQUAC 84 LSKKHYEELHVDPENFKLLANCLEVELGHALHKEFTPEVQAAWSKFSNVVVDALSKGYH 142 ******************************************************99996 PP >> sp|Q9DEP1|MYG_PSEGE Myoglobin OS=Pseudochaenichthys georgianus GN=mb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.6 0.1 4e-32 1.9e-29 6 149 .] 2 141 .. 1 141 [. 0.96 Alignments for each domain: == domain 1 score: 107.6 bits; conditional E-value: 4e-32 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ v++ W+ vead++++G +L+rlf+ +P+t++ F+kF ++ + +l + a v +Hg +vl+ l+d l+ + + a lk+Ls +H sp|Q9DEP1|MYG_PSEGE 2 ADFDMVLKCWGLVEADYATYGSLVLTRLFTEHPETLKLFPKFAGIA-HGDLAGDAGVSAHGATVLNKLGDLLKA-RGGHAALLKPLSSSH 89 5677899*************************************99.899***********************9.889************ PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+++ +fkl++ev+ +v+ ++ + + a+ q+al ++a++ ++ + Yk sp|Q9DEP1|MYG_PSEGE 90 ATKHKIPIINFKLIAEVIGKVMEEK--AGLDAAGQTALRNVMAVIIADMEADYK 141 ************************9..7788999*****************997 PP >> sp|Q9DGI9|MYG_SCOJP Myoglobin OS=Scomber japonicus GN=mb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.4 0.2 4.6e-32 2.3e-29 6 149 .] 2 141 .. 1 141 [. 0.95 Alignments for each domain: == domain 1 score: 107.4 bits; conditional E-value: 4.6e-32 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ +v++ W++vead+++ G+ +L+rlf+ +P tq+ F+kF ++ ++ ++a + +Hg +vl+ l+++l+ ++++ + +k+L+++H sp|Q9DGI9|MYG_SCOJP 2 ADFDAVLKFWGPVEADYDKIGNMVLTRLFTEHPDTQKLFPKFAGIG-LGDMAGNAAISAHGATVLKKLAEVLKA-KGNHAGIIKPLANSH 89 57789**************************************999.778**********************99.99************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+ +++fkl++e++v+v++++ + + a q+al ++ ++ ++ ++Yk sp|Q9DGI9|MYG_SCOJP 90 ATKHKIAINNFKLITEIIVKVMQEK--AGLDAGGQTALRNVMGVFIADMDANYK 141 *************************..66667789**************99997 PP >> sp|P87497|MYG_CHIRA Myoglobin OS=Chionodraco rastrospinosus GN=mb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 107.3 0.1 4.9e-32 2.4e-29 6 149 .] 2 141 .. 1 141 [. 0.96 Alignments for each domain: == domain 1 score: 107.3 bits; conditional E-value: 4.9e-32 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ v++ W+++ead +++G +L+rlf+ +P+t++ F+kF ++ + +l + a v +Hg +vl+ l+d l+ + + a lk+Ls +H sp|P87497|MYG_CHIRA 2 ADFDMVLKCWGPMEADHATHGSLVLTRLFTEHPETLKLFPKFAGIA-HGDLAGDAGVSAHGATVLNKLGDLLKA-RGAHAALLKPLSSSH 89 5677899*************************************99.899***********************9.88************* PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+++ +fkl++ev+ +v+ ++ + + a+ q+al ++a++ +++ + Yk sp|P87497|MYG_CHIRA 90 ATKHKIPIINFKLIAEVIGKVMEEK--AGLDAAGQTALRNVMAIIITDMEADYK 141 ************************9..7788999*****************997 PP >> sp|Q9DEP0|MYG_CRYAN Myoglobin OS=Cryodraco antarcticus GN=mb PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 106.1 0.1 1.1e-31 5.5e-29 6 149 .] 2 141 .. 1 141 [. 0.96 Alignments for each domain: == domain 1 score: 106.1 bits; conditional E-value: 1.1e-31 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselH 95 a+ v++ W++vead +++G +L+rlf+ +P+t++ F+kF ++ + +l + a v +Hg +vl+ l+d l+ + + a lk+Ls +H sp|Q9DEP0|MYG_CRYAN 2 ADFDMVLKCWGPVEADHATHGSLVLTRLFTEHPETLKLFPKFAGIA-HGDLAGDAGVSAHGATVLKKLGDLLKA-RGGHAALLKPLSSSH 89 5677899*************************************99.899***********************9.889************ PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 a+k+k+++ +f l++ev+ +v+ ++ + + a+ q+al ++a++ +++ + Yk sp|Q9DEP0|MYG_CRYAN 90 ATKHKIPIINFTLIAEVIGKVMEEK--AGLDAAGQTALRNVMAIIITDMEADYK 141 ************************9..7788999*****************997 PP >> sp|Q9YGW2|HBA_MUSGR Hemoglobin subunit alpha OS=Mustelus griseus GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 106.1 0.2 1.2e-31 5.7e-29 4 149 .] 4 141 .] 1 141 [] 0.92 Alignments for each domain: == domain 1 score: 106.1 bits; conditional E-value: 1.2e-31 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 ++ ek+++ ++ e +Ga+ L rlf+++P ++ +Fe +kd s + a+v+ Hg kv+ A+ +a ++d +l+++l++L+ sp|Q9YGW2|HBA_MUSGR 4 TACEKQTIGKIAQVLAKSPEAYGAECLARLFVTHPGSKSYFE-YKDYS-----AAGAKVQVHGGKVIRAVVKAAEHVD-DLHSHLETLAL 86 677888888774444445688********************7.78999.....889*********************9.9********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 H kkl vdp++f +lse+++++la++ +ef++d + a++Kll+ +++ l+s+Y+ sp|Q9YGW2|HBA_MUSGR 87 THGKKLLVDPQNFPMLSECIIVTLATH-LTEFSPDTHCAVDKLLSAICQELSSRYR 141 **************************9.78*************************7 PP >> sp|P02021|HBA_HETPO Hemoglobin subunit alpha OS=Heterodontus portusjacksoni GN=HBA PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 105.0 2.3 2.6e-31 1.2e-28 5 149 .] 11 148 .] 8 148 .] 0.91 Alignments for each domain: == domain 1 score: 105.0 bits; conditional E-value: 2.6e-31 globins4 5 eaektkvkavWakvea.dveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 +a++ ++ + +kv a ++e Ga++L r+f+++ at+ +F+ +kd + +++ +k+Hg kv++Al++a +ld +l+++l++L+ sp|P02021|HBA_HETPO 11 AADRAELA-ALSKVLAqNAEAFGAEALARMFTVYAATKSYFKDYKDFT-----AAAPSIKAHGAKVVTALAKACDHLD-DLKTHLHKLAT 93 56666654.4566665267889*************************9.....7899********************9.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 H ++lkvdp +f+ ls +l + la + +ef+++ + al+K+l v++ l+s+Y+ sp|P02021|HBA_HETPO 94 FHGSELKVDPANFQYLSYCLEVALAVH-LTEFSPETHCALDKFLTNVCHELSSRYR 148 *************************99.78*************************7 PP >> sp|O13077|HBB_GADMO Hemoglobin subunit beta OS=Gadus morhua GN=hbb PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 104.6 0.0 3.3e-31 1.6e-28 4 149 .] 5 147 .] 2 147 .] 0.97 Alignments for each domain: == domain 1 score: 104.6 bits; conditional E-value: 3.3e-31 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 ++ e+ +++++++ d+ee G L r + ++P+tq++F F++L ++ + ++ + +Hg k+l+ l al+++d ++++++++Ls sp|O13077|HBB_GADMO 5 TDSERAIINSIFSNL--DYEEIGRKSLCRCLIVYPWTQRYFGGFGNLYNAETILCNPLIAAHGTKILHGLDRALKNMD-DIKNTYAELSL 91 678899999999999..*************************************************************.*********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 lH++kl+vdp +f+ll+++l v+aa++ ft d q + +K+ + v +l Y+ sp|O13077|HBB_GADMO 92 LHSDKLHVDPDNFRLLADCLTGVIAAKMVPAFTVDTQVGWQKFRSFVVSALGREYH 147 ***************************************************99996 PP >> sp|P07420|HBB_DASVI Hemoglobin subunit beta (Fragment) OS=Dasyurus viverrinus GN=HBB PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 102.1 0.4 2e-30 9.7e-28 62 149 .] 1 87 [] 1 87 [] 0.99 Alignments for each domain: == domain 1 score: 102.1 bits; conditional E-value: 2e-30 globins4 62 vkkHgkkvldAlsdalakldekleaklkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 v++Hg kvl ++da+++ld +l++++++LselH++kl+ dp++fkll+++lv la++++keft++vqaa +K +a va++la+kY+ sp|P07420|HBB_DASVI 1 VRAHGAKVLVSFGDAVKNLD-NLKGTFAKLSELHCDKLHEDPENFKLLGNILVICLAEHFGKEFTPEVQAATQKTVAGVANALAHKYH 87 89******************.******************************************************************7 PP >> sp|P02143|HBB_HETPO Hemoglobin subunit beta OS=Heterodontus portusjacksoni GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 98.6 1.7 2.3e-29 1.1e-26 2 149 .] 2 141 .] 1 141 [] 0.97 Alignments for each domain: == domain 1 score: 98.6 bits; conditional E-value: 2.3e-29 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 + se e ++++ W + d + Ga +L r+f ++P+t ++F + k+ + s vk+H+kkv +Al+ a+ +l ++++++ dL sp|P02143|HBB_HETPO 2 HWSEVELHEITTTWKSI--DKHSLGAKALARMFIVYPWTTRYFGNLKEFT-----ACSYGVKEHAKKVTGALGVAVTHLG-DVKSQFTDL 83 6799999**********..8999************************999.....899********************96.8******** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s++Ha++l+vd++ fkll+++ v+ l l +f+++ qa eK + +v ++++ Y+ sp|P02143|HBB_HETPO 84 SKKHAEELHVDVESFKLLAKCFVVELGILLKDKFAPQTQAIWEKYFGVVVDAISKEYH 141 *******************************************************997 PP >> sp|P02022|HBAM_LITCT Hemoglobin heart muscle subunit alpha-type OS=Lithobates catesbeiana PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 95.4 0.1 2.2e-28 1.1e-25 3 146 .. 2 131 .. 1 132 [] 0.96 Alignments for each domain: == domain 1 score: 95.4 bits; conditional E-value: 2.2e-28 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+ ek++v ++W k+ + ++ Ga+ ++rlfk +P+t+ fF +F d+s +s+d+ +Hg k+ +Al++a+++ld +l++ sp|P02022|HBAM_LITCT 2 LSDSEKSAVASLWEKIAPQTNKLGAESMERLFKNHPETKSFFSRF-DIS-----PGSQDLLTHGGKIFGALGEAIKSLD-----NLQKY 79 89*******************************************.899.....9************************.....89999 PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllas 146 +lH++klk+ ++klls+++++v a++++e qaa +K+l v l+s sp|P02022|HBAM_LITCT 80 QDLHTNKLKLSSDHMKLLSAAIIEVFTAHFGGEVN---QAAWNKFLGEVGAILTS 131 *****************************888864...9*******999998876 PP >> sp|P20247|HBB2_TORMA Hemoglobin subunit beta-2 OS=Torpedo marmorata GN=HBB2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.9 3.9 2.8e-27 1.4e-24 2 149 .] 2 142 .] 1 142 [] 0.95 Alignments for each domain: == domain 1 score: 91.9 bits; conditional E-value: 2.8e-27 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksad.vkkHgkkvldAlsdalakldekleaklk 89 L+++ek ++++W++v +v e a +L+r+f ++P+t + F +F++ ++k+s++ v+ H+++v +Als+a+ l +++++++ sp|P20247|HBB2_TORMA 2 SLTDEEKHLIQHIWSNV--NVVEITAKALERVFYVYPWTTRLFTSFNH-----NFKASDKgVHDHAVNVSKALSAAIGDLH-NVNKNFS 82 79***************..9**************************55.....55777654******************99.9****** PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +Ls +H kkl vd +f ll+++ ++ laa +ft++ + a Kl+++v+++l+ +Y+ sp|P20247|HBB2_TORMA 83 ALSTKHQKKLGVDTSNFMLLGQAFLVELAAFEKDKFTPQYHKAALKLFEVVTEALSCQYH 142 *******************************99************************997 PP >> sp|P20246|HBB1_TORMA Hemoglobin subunit beta-1 OS=Torpedo marmorata GN=HBB1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.8 2.6 3e-27 1.5e-24 2 149 .] 2 142 .] 1 142 [] 0.95 Alignments for each domain: == domain 1 score: 91.8 bits; conditional E-value: 3e-27 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkks.advkkHgkkvldAlsdalakldekleaklk 89 L+++e ++++W++v +v e a +L+r+f ++P+t + F +F++ ++k+s ++v+ H+++v +A+s+a+ l +++++++ sp|P20246|HBB1_TORMA 2 SLTDEEIRLIQHIWSNV--NVVEITAKALERVFYVYPWTTRLFTSFNH-----NFKASdKQVHDHAVNVSNAISAAIGDLH-DINKNFS 82 799**************..9**************************65.....44655268******************98.8****** PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +Ls +H kkl vd +f ll+++ ++ laa +ft++ + a Kl+++v+++l+ +Y+ sp|P20246|HBB1_TORMA 83 ALSTKHQKKLGVDTSNFMLLGQAFLVELAALEKDKFTPQYHKAALKLFEVVTEALSCQYH 142 *******************************9*************************997 PP >> sp|Q7M3C1|MYG_AILME Myoglobin (Fragment) OS=Ailuropoda melanoleuca GN=MB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 91.6 0.4 3.5e-27 1.7e-24 3 80 .. 2 76 .. 1 92 [. 0.90 Alignments for each domain: == domain 1 score: 91.6 bits; conditional E-value: 3.5e-27 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl 80 Ls++e++ v++vW+kvead +++G+++L+rlfk +P+t+e+F+kFk+L+ k+s+d+kkHg++v +Al+ +l+k sp|Q7M3C1|MYG_AILME 2 LSDGEWQLVLNVWGKVEADLAGHGQEVLIRLFKGHPETLEKFDKFKHLK---SEKGSEDLKKHGNTVETALEGILKKK 76 89***********************************************...559********************993 PP >> sp|Q7SID0|GLBF1_EPTBU Globin-F1 OS=Eptatretus burgeri PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 90.8 0.1 6e-27 2.9e-24 3 148 .. 11 146 .] 9 146 .] 0.95 Alignments for each domain: == domain 1 score: 90.8 bits; conditional E-value: 6e-27 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 L++++k++++++W k++ ++e++ +iL r++k +P++q F+kF + +l++ ++vk+ ++ + + ++++++++d e++ ++l sp|Q7SID0|GLBF1_EPTBU 11 LTDGDKKAINKIWPKIYKEYEQYSLNILLRFLKCFPQAQASFPKFSTK--KSNLEQDPEVKHQAVVIFNKVNEIINSMDnqEEIIKSL 96 99*******************************************443..589*************************85678889** PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 kdLs++H + +kvd fk ls + v ++ + a +eKl++++++ll+s+Y sp|Q7SID0|GLBF1_EPTBU 97 KDLSQKHKTVFKVDSIWFKELSSIFVSTIDGG----------AEFEKLFSIICILLRSAY 146 *****************************998..........999*************99 PP >> sp|P56692|HBB_DASAK Hemoglobin subunit beta OS=Dasyatis akajei GN=HBB PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 88.7 1.4 2.7e-26 1.3e-23 2 149 .] 3 142 .] 2 142 .] 0.96 Alignments for each domain: == domain 1 score: 88.7 bits; conditional E-value: 2.7e-26 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 +Lse++ +k vW v d ++ a +L+r+f+++P+t + F k ++L ++++ v++H+ kv Al++a+ l+ k+e ++++L sp|P56692|HBB_DASAK 3 KLSEDQEHYIKGVWKDV--DHKQITAKALERVFVVYPWTTRLFSKLQGLFSANDI----GVQQHADKVQRALGEAIDDLK-KVEINFQNL 85 79***************..9999**************************976665....79******************9.********* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 s++H ++ vd ++fkll++ ++ la ++ k f ++ +aa K++ lva++l+s+Y+ sp|P56692|HBB_DASAK 86 SGKH-QEIGVDTQNFKLLGQTFMVELALHYKKTFRPKEHAAAYKFFRLVAEALSSNYH 142 ****.5799************************************************7 PP >> sp|P09106|HBAT_PAPAN Hemoglobin subunit theta-1 OS=Papio anubis GN=HBQ1 PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 88.1 0.0 4.2e-26 2e-23 2 106 .. 2 99 .. 1 101 [. 0.98 Alignments for each domain: == domain 1 score: 88.1 bits; conditional E-value: 4.2e-26 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 Ls++++ v+a+W k +++v+ + +++L+r f+++Pat+++F + dLs +sa+v++Hg+kv+dAls a+ +ld +l+ +l++ sp|P09106|HBAT_PAPAN 2 ALSAEDRALVRALWKKLGSNVGVYATEALERTFLAFPATKTYFSHL-DLS-----PGSAQVRAHGQKVADALSLAVERLD-DLPRALSA 83 69********************************************.9*9.....9***********************9.******** PP globins4 91 LselHakklkvdpkyf 106 Ls+lHa +l+vdp +f sp|P09106|HBAT_PAPAN 84 LSHLHACQLRVDPANF 99 **************99 PP >> sp|P02209|GLB3_MYXGL Globin-3 OS=Myxine glutinosa PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 86.9 0.4 9.9e-26 4.8e-23 2 148 .. 11 147 .. 10 148 .. 0.95 Alignments for each domain: == domain 1 score: 86.9 bits; conditional E-value: 9.9e-26 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 +Lse++k+++++ W +++ + e+ +L ++k +P++q+ F+kF + +l++ + vk ++ +++A++ ++ +d +++ l sp|P02209|GLB3_MYXGL 11 TLSEGDKKAIRESWPQIYKNFEQNSLAVLLEFLKKFPKAQDSFPKFSAK--KSHLEQDPAVKLQAEVIINAVNHTIGLMDkeAAMKKYL 97 59********************************************655..599*************************755679999* PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 kdLs +H+++++v+p fk ls+v v ++ + aa+eKl++++a+ll+s Y sp|P02209|GLB3_MYXGL 98 KDLSTKHSTEFQVNPDMFKELSAVFVSTMGGK----------AAYEKLFSIIATLLRSTY 147 ****************************9988..........****************99 PP >> sp|Q9YGW1|HBB_MUSGR Hemoglobin subunit beta OS=Mustelus griseus GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 85.6 0.9 2.3e-25 1.1e-22 4 149 .] 5 137 .] 2 137 .] 0.91 Alignments for each domain: == domain 1 score: 85.6 bits; conditional E-value: 2.3e-25 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 +++e+ ++ + + d++++ +++L r+fk++P+t+++F+k d + H+ v++Al+da++++d ++++ +kdLs+ sp|Q9YGW1|HBB_MUSGR 5 TQEERDEISKTFQGT--DMKTVVTQALDRMFKVYPWTNRYFQKRTDFR----------SSIHAGIVVGALQDAVKHMD-DVKTLFKDLSK 81 566666776666654..899999********************98877..........347*****************.9********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +Ha+ l+vdp f+ll++++++ la ft+++q+ +K++++v +++++Y+ sp|Q9YGW1|HBB_MUSGR 82 KHADDLHVDPGSFHLLTDCIIVELAYLRKDCFTPHIQGIWDKFFEVVIDAISKQYH 137 **************************99999***********************97 PP >> sp|P80017|GLBD_CAUAR Globin D, coelomic OS=Caudina arenicola PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 82.3 0.2 2.5e-24 1.2e-21 3 147 .. 13 156 .. 11 158 .. 0.96 Alignments for each domain: == domain 1 score: 82.3 bits; conditional E-value: 2.5e-24 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleaklkd 90 L++aek +++ W + ++ + ad+ +r+f P++q++F++ +Ls ++el+ s ++++H+ +v ++ + ++d e l+ l++ sp|P80017|GLBD_CAUAR 13 LTPAEKDLIRSTWDQLMTHRTGFVADVFIRIFHNDPTAQRKFPQMAGLS-PAELRTSRQMHAHAIRVSALMTTYIDEMDtEVLPELLAT 100 99***********************************************.****************************98999999*** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllask 147 L+ H +k +v k++ l+++vl++ ++a+l+ ft +v+ a K +a+v+ +l +k sp|P80017|GLBD_CAUAR 101 LTRTH-DKNHVGKKNYDLFGKVLMEAIKAELGVGFTKQVHDAWAKTFAIVQGVLITK 156 *****.6789****************************************9998776 PP >> sp|P18979|HBA1_UROHA Hemoglobin subunit alpha-1 (Fragment) OS=Uromastyx hardwickii PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 79.7 0.2 1.5e-23 7.5e-21 2 98 .. 1 90 [] 1 90 [] 0.98 Alignments for each domain: == domain 1 score: 79.7 bits; conditional E-value: 1.5e-23 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 vL++++k++v+a+W+ v + e Ga++L rlf+++Pa++++F +F dL+ ++sa+++ kv+dAl++a+++ld +l++++++Ls sp|P18979|HBA1_UROHA 1 VLTDDDKNHVRAIWGHVSNNPEAFGAEALYRLFTAHPASKTYFSHF-DLH-----ENSAQIRXXXXKVVDALTQAVNNLD-DLSGAISKLS 84 699*******************************************.999.....99**********************9.********** PP globins4 93 elHakk 98 +lHa+k sp|P18979|HBA1_UROHA 85 DLHAEK 90 ****97 PP >> sp|P84217|HBB_BATEA Hemoglobin subunit beta OS=Bathyraja eatonii GN=HBB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 78.9 0.8 2.9e-23 1.4e-20 4 149 .] 4 141 .] 1 141 [] 0.90 Alignments for each domain: == domain 1 score: 78.9 bits; conditional E-value: 2.9e-23 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLse 93 +++ ++ +W+k + +v + a +L+r+f+++P+t + F++F++ + v+ H++kv++Al a+ +l +++a +k+Lse sp|P84217|HBB_BATEA 4 TDKKAAYITGIWSKLDKKV--TTAHALERVFTVYPWTTRLFKSFNGHF----KAGDSGVQGHAEKVVGALDTAVLHLH-DIDAGYKKLSE 86 566677899******6555..5689*******************6433....267889*******************8.9********** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 +H + vd ++fkll+++ ++ la + + ft++ + a K++ va l+s+Y+ sp|P84217|HBB_BATEA 87 KH-QLIGVDTQNFKLLGQAFLVELAILFKEGFTPELHEAAYKFFLAVAGGLSSQYH 141 **.5799***********************************************97 PP >> sp|P0C227|GLB_NERAL Globin OS=Nerita albicilla PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 78.2 0.0 4.7e-23 2.3e-20 3 146 .. 9 152 .. 7 155 .. 0.91 Alignments for each domain: == domain 1 score: 78.2 bits; conditional E-value: 4.7e-23 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkd 90 Ls+++k ++k+ Wa ad+ + G ++Lv++fk +P q +F+kF d + +delk+ a++ +H+ +v + l++++ ++d +k+ + l + sp|P0C227|GLB_NERAL 9 LSADQKAAIKSSWAAFAADITGNGSNVLVQFFKDYPGDQSYFKKF-DGKKPDELKGDAQLATHASQVFGSLNNMIDSMDdpDKMVGLLCK 97 9********************************************.5566****************************648899999999 PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllas 146 + H + v + +k l l++ +++ +++ + d +aa +K+l+ +a+ + + sp|P0C227|GLB_NERAL 98 NASDHIPRG-VRQQQYKELFSTLMNYMQSLPGANVAGDTKAAWDKALNAMANIIDA 152 999999875.666666667778999999999*******************999876 PP >> sp|P15161|GLB1_PARCH Globin-1 OS=Paracaudina chilensis PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 66.7 0.4 1.6e-19 7.7e-17 3 146 .. 13 155 .. 11 157 .. 0.95 Alignments for each domain: == domain 1 score: 66.7 bits; conditional E-value: 1.6e-19 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleaklkd 90 L+ a+k+ v++ W + + +d +r+f Pa+q++F++ ++s + +l++s ++++H+ +v +s+ + +ld + l+ l++ sp|P15161|GLB1_PARCH 13 LTLAQKKIVRKTWHQLMRNKTSFVTDLFIRIFAYDPAAQNKFPQMAGMS-ASQLRSSRQMQAHAIRVSSIMSEYIEELDsDILPELLAT 100 78899*******************************************9.99**************************966788999** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllas 146 L+ H + kv p ++ l+++vl++ l+a+l+++f + + K++++v+ +l sp|P15161|GLB1_PARCH 101 LARTH-DLNKVGPAHYDLFAKVLMEALQAELGSDFNQKTRDSWAKAFSIVQAVLLV 155 *****.6679****************************************999865 PP >> sp|P80018|GLBC_CAUAR Globin C, coelomic OS=Caudina arenicola PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 66.4 0.8 2e-19 9.9e-17 3 146 .. 13 155 .. 11 157 .. 0.95 Alignments for each domain: == domain 1 score: 66.4 bits; conditional E-value: 2e-19 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleaklkd 90 L+ a+k+ v++ W + + +d+ +r+f P +q++F++ ++s + +l++s ++++H+ +v +s+ + +ld + l+ l++ sp|P80018|GLBC_CAUAR 13 LTLAQKKIVRKTWHQLMRNKTSFVTDVFIRIFAYDPSAQNKFPQMAGMS-ASQLRSSRQMQAHAIRVSSIMSEYVEELDsDILPELLAT 100 78899*******************************************9.99**************************966788999** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllas 146 L+ H + kv +++l+++vl++ l+a+l+++f + a K++++v+ +l sp|P80018|GLBC_CAUAR 101 LARTH-DLNKVGADHYNLFAKVLMEALQAELGSDFNEKTRDAWAKAFSVVQAVLLV 155 *****.6679****************************************999865 PP >> sp|P09965|GLB_DOLAU Globin OS=Dolabella auricularia PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 62.5 0.0 3.2e-18 1.5e-15 3 145 .. 2 142 .. 1 146 [] 0.92 Alignments for each domain: == domain 1 score: 62.5 bits; conditional E-value: 3.2e-18 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkd 90 Ls+ae + v + W++v a+ + G + L+ lf ++P + +fF Fk+ s +++++s+++++ + +++ l++ + + d +k+ a l + sp|P09965|GLB_DOLAU 2 LSAAEAEVVAKSWGPVFANKDANGDNFLIALFEAYPDSPNFFADFKGKS-IADIRASPKLRNVSSRIVSRLNEFVSSAaDaGKMAAMLDQ 90 9********************************************9988.788***********************99888********* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvaklla 145 s+ Ha + v + f+ +s++ +a+ + a ++aa Kl+ l+ +++ sp|P09965|GLB_DOLAU 91 FSKEHAG-FGVGSQQFQNVSAMFPGFVASI--AAPPAGADAAWGKLFGLIIDAMK 142 *****95.9************999999988..55567789999999988877766 PP >> sp|P02211|GLB_APLKU Globin OS=Aplysia kurodai PE=1 SV=4 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 59.1 0.0 3.7e-17 1.8e-14 2 147 .. 2 143 .. 1 145 [] 0.93 Alignments for each domain: == domain 1 score: 59.1 bits; conditional E-value: 3.7e-17 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklk 89 Ls+ae v + Wa+v+a+ + G L lf +P+ ++F Fk+ s +++k+s++++ + ++ + l++ +++ d +k++a l+ sp|P02211|GLB_APLKU 2 SLSAAEADLVGKSWAPVYANKDANGDAFLLSLFEKFPNNANYFADFKGKS-IADIKASPKLRDVSSRIFTRLNEFVNNAaDaGKMSAMLS 90 69********************************************9988.788**********************999888******** PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllask 147 + + H + v f+ + + +a+ +++++ a +Kl+ l+ +l+++ sp|P02211|GLB_APLKU 91 QFASEHV-GFGVGSAQFENVRSMFPAFVASL----SAPPADDAWNKLFGLIVAALKAA 143 ******8.59999999999999999999888....68999999***999999998875 PP >> sp|P14393|GLB_APLJU Globin OS=Aplysia juliana PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 54.9 0.0 6.8e-16 3.3e-13 3 147 .. 2 142 .. 1 144 [] 0.91 Alignments for each domain: == domain 1 score: 54.9 bits; conditional E-value: 6.8e-16 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkd 90 Ls+a+ + + Wa+v a+ + Ga Lv lf+ +P++ +fF+ Fk+ s +++++s++++ + ++ l++ + + d +k+ + l++ sp|P14393|GLB_APLJU 2 LSAADAGLLAQSWAPVFANSDANGASFLVALFTQFPESANFFNDFKGKS-LADIQASPKLRDVSSRIFARLNEFVSNAaDaGKMGSMLQQ 90 999******************************************9988.788**********************9997889******** PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllask 147 + Ha + v f+ + + +a+ +++++aa + l+ l+ +l+s+ sp|P14393|GLB_APLJU 91 FATEHAG-FGVGSAQFQNVRSMFPGFVASL----SAPAADAAWNSLFGLIISALQSA 142 *****95.8999999998888888888887....67889999999988888888775 PP >> sp|P29287|GLB_BURLE Globin OS=Bursatella leachii PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 54.9 0.0 7e-16 3.4e-13 3 145 .. 2 142 .. 1 146 [] 0.86 Alignments for each domain: == domain 1 score: 54.9 bits; conditional E-value: 7e-16 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkd 90 Ls ae + + Wa+v a+ + G + L+ lf ++P + +fF Fk+ s +++++s++++ + ++++ l+d + + d +k+ + l + sp|P29287|GLB_BURLE 2 LSGAEADLLAKSWAPVFANKDANGDNFLIALFEAFPDSANFFGDFKGKS-IADIRASPKLRSVSSRIVNRLNDFVGNAaDaGKMAGMLDQ 90 8999*****************************************9988.788**********************998788********* PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvaklla 145 s+ H + v + f+ + + + + + a ++aa Kl+ l+ +l+ sp|P29287|GLB_BURLE 91 FSKEHV-GFGVGSQQFENVRSMFPGFVSSV--AAPPAGADAAWGKLFGLIIDALK 142 *****8.58899888888777665555554..33356677888888877777766 PP >> sp|P02210|GLB_APLLI Globin OS=Aplysia limacina PE=1 SV=4 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 54.2 0.1 1.1e-15 5.5e-13 2 146 .. 2 144 .. 1 147 [] 0.89 Alignments for each domain: == domain 1 score: 54.2 bits; conditional E-value: 1.1e-15 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklk 89 Ls+ae + Wa+v a+ + G Lv lf +P + +fF Fk+ s +++k+s++++ + ++ + l++ +++ d +k++a l+ sp|P02210|GLB_APLLI 2 SLSAAEADLAGKSWAPVFANKDANGDAFLVALFEKFPDSANFFADFKGKS-VADIKASPKLRDVSSRIFTRLNEFVNNAaDaGKMSAMLS 90 599*******************************************9988.788**********************999888******** PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllas 146 + ++ H + v f+ + + +a+ + a ++aa Kl+ l+ +l++ sp|P02210|GLB_APLLI 91 QFAKEHV-GFGVGSAQFENVRSMFPGFVASV--AAPPAGADAAWTKLFGLIIDALKA 144 ******8.58898888888888877777776..445677899999999998888876 PP >> sp|Q9TT33|HBB_COLGU Hemoglobin subunit beta (Fragment) OS=Colobus guereza GN=HBB PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 52.8 0.2 3e-15 1.5e-12 109 149 .] 1 41 [] 1 41 [] 0.98 Alignments for each domain: == domain 1 score: 52.8 bits; conditional E-value: 3e-15 globins4 109 lsevlvdvlaarlpkeftadvqaaleKllalvakllaskYk 149 l++vlv+vla++++keft++vqaa++K++a va++la+kY+ sp|Q9TT33|HBB_COLGU 1 LGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 41 799*************************************7 PP >> sp|P81041|HBO_MACEU Hemoglobin subunit omega (Fragment) OS=Macropus eugenii PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 52.5 0.0 3.8e-15 1.9e-12 2 54 .. 2 52 .. 1 54 [] 0.94 Alignments for each domain: == domain 1 score: 52.5 bits; conditional E-value: 3.8e-15 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLsted 54 + +++ek+ ++a+Wak+ d+ee Ga +L rl++++P+tq++F++F++Ls + sp|P81041|HBO_MACEU 2 HWTAEEKQIILAIWAKI--DIEEAGAAALSRLLVVYPWTQRYFKNFGNLSSPT 52 6799*************..******************************9876 PP >> sp|P14821|GLB2A_ANAIN Globin-2 A chain OS=Anadara inaequivalvis PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 51.6 0.0 7.2e-15 3.5e-12 4 143 .. 12 149 .. 9 150 .] 0.90 Alignments for each domain: == domain 1 score: 51.6 bits; conditional E-value: 7.2e-15 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklk 89 sea k +++ W+ ad+e +G + lf+ P t+++F + +d++ + k++ +++ H+ ++ Al++ + +ld +l+ ++ sp|P14821|GLB2A_ANAIN 12 SEAIKANLRRSWGVLSADIEATGLMLMSNLFTLRPDTKTYFTRLGDVQ---KGKANSKLRGHAITLTYALNNFVDSLDdpSRLKCVVE 96 788899****************************************99...889***********************73556666677 PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakl 143 + + +H ++ k+ f + e + ++l+ar+++ ++ dv +a l+ +v+ + sp|P14821|GLB2A_ANAIN 97 KFAVNHINR-KISGDAFGAIVEPMKETLKARMGNYYSDDVAGAWAALVGVVQAA 149 777777654.9********************************99999888765 PP >> sp|Q8T7J9|GLB_YOLEI Globin OS=Yoldia eightsi PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 49.4 0.0 3.5e-14 1.7e-11 3 144 .. 3 143 .. 1 146 [. 0.92 Alignments for each domain: == domain 1 score: 49.4 bits; conditional E-value: 3.5e-14 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleaklkdL 91 s+a+ +v++ W + ad++ G i + lf+ P q +F+ Fk+L +lk++++ kH + vl+ l+ +l l+ +l+ +k++ sp|Q8T7J9|GLB_YOLEI 3 FSAAQVDTVRSNWCSMTADIDAAGYRIFELLFQRNPDYQSKFKAFKGLA-VSALKGNPNAEKHIRIVLGGLGRILGALNtPELDVIYKEM 91 6899999*****************************************9.889*************************768999****** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 + +H v + fk +++++v+ l + +k ++ a+ e l+++va+ + sp|Q8T7J9|GLB_YOLEI 92 ASNHKP-RGVMKQQFKDMGQAIVTALSEIQSKSGGSFDRATWEALFESVANGI 143 ***965.579999*************999888888888888888888888765 PP >> sp|Q7M416|GLB1_LIOJA Globin-1 OS=Liolophura japonica PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 47.4 0.0 1.5e-13 7.2e-11 4 136 .. 3 132 .. 1 141 [. 0.89 Alignments for each domain: == domain 1 score: 47.4 bits; conditional E-value: 1.5e-13 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 s+++ +++k a v + ++ G+ +++f P e+F+ +k+ s de+k+s+++ +Hg kv++ l++ +++++ ++ lk+ sp|Q7M416|GLB1_LIOJA 3 SADQAKALKDDIAVVAQNPNGCGKALFIKMFEMNPGWVEKFPAWKGKS-LDEIKASDKITNHGGKVINELANWINNIN-SASGILKSQG 89 55666677777888999999************************9977.9**************************99.9999999877 PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKl 136 H + ++yf+ + v+ + a+++++ +ta+++ al+ + sp|Q7M416|GLB1_LIOJA 90 TAHK-GRSIGIEYFENVLPVIDATFAQQMGGAYTAAMKDALKAA 132 7774.457****************************99998765 PP >> sp|P19363|GLB1_ARTSX Extracellular globin-E1 (Fragment) OS=Artemia sp. PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 46.5 0.0 2.6e-13 1.3e-10 3 95 .. 56 150 .. 54 192 .. 0.84 Alignments for each domain: == domain 1 score: 46.5 bits; conditional E-value: 2.6e-13 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld...ekleakl 88 Ls ek++++ W+kv + +e+G+ +lf ++P+ q++F F++++ + l +s++ +H+++v+ Al ++l l+ +++ + sp|P19363|GLB1_ARTSX 56 LSGLEKNAILDTWGKVRGNLQEVGKATFGKLFAAHPEYQQMFRFFQGVQ-LAFLVQSPKFAAHTQRVVSALDQTLLALNrpsDQFVYMI 143 8889*******************************************99.88999******************9988852334445555 PP globins4 89 kdLselH 95 k+L H sp|P19363|GLB1_ARTSX 144 KELGLDH 150 5555555 PP >> sp|P02215|GLB_CERRH Globin OS=Cerithidea rhizophorarum PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 46.2 0.0 3.4e-13 1.6e-10 3 141 .. 2 143 .. 1 149 [. 0.89 Alignments for each domain: == domain 1 score: 46.2 bits; conditional E-value: 3.4e-13 globins4 3 LseaektkvkavW...akveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleak 87 L +a k+++ + W ak a++++ Ga lfk +P t+++F +F+++s ++e+k k+H+ v ++ ++ ++d + +++ sp|P02215|GLB_CERRH 2 LQPASKSALASSWktlAKDAATIQNNGATLFSLLFKQFPDTRNYFTHFGNMS-DAEMKTTGVGKAHSMAVFAGIGSMIDSMDdaDCMNGL 90 7899999999999666677899999**************************9.999***9999******************644445555 PP globins4 88 lkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalva 141 +Ls +H ++ k+ f + +v + l + l++ + dv++a + lla ++ sp|P02215|GLB_CERRH 91 ALKLSRNHIQR-KIGASRFGEMRQVFPNFLDEALGGGASGDVKGAWDALLAYLQ 143 569*****986.9**********************************9999875 PP >> sp|Q7M424|GLB_BUCUU Globin OS=Buccinum undatum PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 45.6 1.5 5.2e-13 2.5e-10 3 142 .. 2 143 .. 1 145 [. 0.83 Alignments for each domain: == domain 1 score: 45.6 bits; conditional E-value: 5.2e-13 globins4 3 LseaektkvkavWakvea...dveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleakl 88 L+e +kt++k W ++ +sGa lfks+P t+++F++F d + + + k+Hg v + l++ + ++d + + l sp|Q7M424|GLB_BUCUU 2 LTEPQKTALKDSWKLLAGdgkTMMKSGALLFGLLFKSHPDTKKHFKHFDDAT-FATM-DTGVGKAHGMAVFTGLGAFVSSIDdDACVNGL 89 7889999999999776541115678999999*****************7765.5555.45566******************634444444 PP globins4 89 .kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvak 142 k+Ls +H+ + + fkll v + l + +k+ t + +aa + ll ++ k sp|Q7M424|GLB_BUCUU 90 aKKLSRNHTAR-GITADDFKLLQGVFKTFLDEATGKKATNEHKAAWDALLTMLIK 143 278*****876.799***********************************99865 PP >> sp|Q9TT34|HBB_PONPY Hemoglobin subunit beta (Fragment) OS=Pongo pygmaeus GN=HBB PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 45.4 0.3 5.8e-13 2.8e-10 114 149 .] 1 36 [] 1 36 [] 0.98 Alignments for each domain: == domain 1 score: 45.4 bits; conditional E-value: 5.8e-13 globins4 114 vdvlaarlpkeftadvqaaleKllalvakllaskYk 149 v+vla++++keft++vqaa++K++a va++la+kY+ sp|Q9TT34|HBB_PONPY 1 VCVLAHHFGKEFTPQVQAAYQKVVAGVANALAHKYH 36 79*********************************7 PP >> sp|O77003|GLB_BIOGL Globin OS=Biomphalaria glabrata PE=3 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 45.2 0.1 7e-13 3.4e-10 2 145 .. 2 149 .. 1 151 [] 0.91 Alignments for each domain: == domain 1 score: 45.2 bits; conditional E-value: 7e-13 globins4 2 vLseaektkvkavWakveadvee...sGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..eklea 86 Ls+a+k+++ a W k a +++ G + + +f P+ + F kF+ + +d+lk+ a+ k + ++ Al l++++ ++l+a sp|O77003|GLB_BIOGL 2 SLSDADKKALDASWKKLTAGADGkknAGINLVLWMFANVPNMRAQFSKFNANQSDDALKGDAEFIKQVNVIVAALDGLLQSVNnpGQLQA 91 69***************998875222799*****************************************************5589**** PP globins4 87 klkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvaklla 145 +l +L+++H +lk+ ++f l + + + + l+ ++d a l+a + ++l+ sp|O77003|GLB_BIOGL 92 NLDKLAKSHV-NLKIGLEFFGPLQQNIHSFIESALGVGAGSDEPKAWGNLIAAFNETLK 149 *********8.59**************99999999999999988888888888887776 PP >> sp|P14822|GLB2B_ANAIN Globin-2 B chain OS=Anadara inaequivalvis PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 43.8 0.0 1.8e-12 8.7e-10 5 142 .. 14 149 .. 9 151 .] 0.90 Alignments for each domain: == domain 1 score: 43.8 bits; conditional E-value: 1.8e-12 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkd 90 +++k ++ W+ d+e++G + lfk+ P ++ +F + +d+s + k + +++ H+ +++ Al++ + ld e+l+ +++ sp|P14822|GLB2B_ANAIN 14 ADQKDLLRMSWGVLSVDMEGTGLMLMANLFKTSPSAKGKFARLGDVS---AGKDNSKLRGHSITLMYALQNFVDALDdvERLKCVVEK 98 3457788999*************************************...7799**********************648889999999 PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvak 142 + +H ++ ++ f + l ++l+ar+++ f d +a l+a+v+ sp|P14822|GLB2B_ANAIN 99 FAVNHINR-QISADEFGEIVGPLRQTLKARMGNYFDEDTVSAWASLVAVVQA 149 99999876.899****99999*********************9999999876 PP >> sp|P81044|HBAZ_MACEU Hemoglobin subunit zeta (Fragments) OS=Macropus eugenii PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 31.9 4.3 8.3e-09 4e-06 31 113 .. 16 77 .. 7 79 .] 0.88 Alignments for each domain: == domain 1 score: 31.9 bits; conditional E-value: 8.3e-09 globins4 31 vrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHakklkvdpkyfkllsevl 113 rlf+s+P+t+++F++F dL+ sa+++k +d +++++l++LselHa l+vdp +fklls+ sp|P81044|HBAZ_MACEU 16 KRLFTSYPQTKTYFPHF-DLH-----PDSAQLRKN--------------ID-NIHSALSKLSELHAYILRVDPVNFKLLSHXF 77 69***************.999.....789999964..............55.67778999********************976 PP >> sp|P59742|NGB1_ONCMY Neuroglobin-1 OS=Oncorhynchus mykiss GN=ngb1 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 43.1 0.0 3e-12 1.4e-09 2 139 .. 3 141 .. 2 150 .. 0.91 Alignments for each domain: == domain 1 score: 43.1 bits; conditional E-value: 3e-12 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 +L+e+ek+ ++ W + d +G+ + rlf Pa ++ F + t ++ +s++ H kv+ + +a+ +ld le l sp|P59742|NGB1_ONCMY 3 KLTEKEKELIRVSWESLGKDKVPHGVIMFSRLFELEPALLNLFHYNTNCGTIQDCLSSPEFLDHVTKVMLVIDAAVSHLDnlHTLEDFL 91 599****************************************************************************9556678889 PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllal 139 +L ++H + v+ + f +++e l+ +l+ l++ +ta+ a + + sp|P59742|NGB1_ONCMY 92 LNLGKKH-QAVGVNTQSFAVVGESLLYMLQCSLGQGYTAPLRQAWLNMYTI 141 9999999.5789***************************997776555444 PP >> sp|P23216|GLBP1_GLYDI Globin, major polymeric component P1 OS=Glycera dibranchiata PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 43.0 0.0 3.2e-12 1.5e-09 2 123 .. 2 124 .. 1 144 [. 0.86 Alignments for each domain: == domain 1 score: 43.0 bits; conditional E-value: 3.2e-12 globins4 2 vLseaektkvkavWakveadv..eesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekle 85 +L++++ ++ka W +v a ++ G ++ ++ f P+ F + ++lk s ++++Hgk ++d +++a+a++d +++ sp|P23216|GLBP1_GLYDI 2 HLTADQVAALKASWPEVSAGDggAQLGLEMFTKYFHENPQMMFIFGYS-G--RTEALKHSSKLQHHGKVIIDQIGKAVAEMDnaKQMA 86 7999999**********8865125679999999999999988887655.3..3479*************************8677999 PP globins4 86 aklkdLselHakklkvdpkyfkllsevlvdvlaarlpk 123 ++l++L +H + ++f l+ +l+d + ++ p+ sp|P23216|GLBP1_GLYDI 87 GTLHALGVRHKGFGDIRAEFFPALGMCLLDAMEEKVPG 124 9*******************************999887 PP >> sp|P21659|GLBP2_GLYDI Globin, polymeric component P2 OS=Glycera dibranchiata PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 43.0 0.0 3.4e-12 1.6e-09 2 124 .. 2 125 .. 1 146 [. 0.84 Alignments for each domain: == domain 1 score: 43.0 bits; conditional E-value: 3.4e-12 globins4 2 vLseaektkvkavWakveadv..eesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekle 85 +L++++ ++ka W +v a ++ G + ++ f P+ F d+lk +a++++Hgk ++d +++a+a++d +++ sp|P21659|GLBP2_GLYDI 2 PLTADQVAALKASWPEVSAGDggGQLGLELFTKYFHENPQMMFIFGYS---GRTDALKHNAKLQNHGKVIIDQIGKAVAEMDnaKQMA 86 68999999*********7754114568888888888888877766544...4569**************************8677999 PP globins4 86 aklkdLselHakklkvdpkyfkllsevlvdvlaarlpke 124 ++l++L +H + +f l+ +l+d + ++ p+ sp|P21659|GLBP2_GLYDI 87 GTLHALGVRHKGFGDIRADFFPALGMCLLDAMEEKVPGL 125 9*******************************9998875 PP >> sp|P02222|GLB2_CHITH Globin CTT-II beta OS=Chironomus thummi thummi PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 42.4 0.0 4.8e-12 2.3e-09 2 139 .. 17 155 .. 16 160 .] 0.76 Alignments for each domain: == domain 1 score: 42.4 bits; conditional E-value: 4.8e-12 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleakl 88 +Ls++e + v+ Wa+v + s +diL +fk+ P +F++F + + lk+ + +H+ ++++ +s+++a + + ++ ++ sp|P02222|GLB2_CHITH 17 PLSADEASLVRGSWAQV----KHSEVDILYYIFKANPDIMAKFPQFAGKD-LETLKGTGQFATHAGRIVGFVSEIVALMgNsANM-PAM 99 89**************9....77889********************5433.568*************************643333.345 PP globins4 89 kdLselHakklk...vdpkyfkllsevlvdvlaarlp..keftadvqaaleKllal 139 ++L + a ++k ++ f+ + + lv l+++ + ++a+ +l+ ++++ sp|P02222|GLB2_CHITH 100 ETLIKDMAANHKargIPKAQFNEFRASLVSYLQSKVSwnDSLGAAWTQGLDNVFNM 155 55555555444433388999999999999999887531144566666666666555 PP >> sp|Q941Q2|HBL2_BRANA Non-symbiotic hemoglobin 2 OS=Brassica napus GN=HB2 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 42.0 1.1 6.8e-12 3.3e-09 2 146 .. 5 151 .. 4 154 .. 0.86 Alignments for each domain: == domain 1 score: 42.0 bits; conditional E-value: 6.8e-12 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl..dek...le 85 v +e++ vk+ W + d+ ++ +++ Pa++++F +d t++ ++++++k+H++kv + ++ +l ++k + sp|Q941Q2|HBL2_BRANA 5 VFTEKQEALVKESWEILKQDIPKYSLHFFSQILEIAPAAKDMFSFLRD--TDEVPHNNPKLKAHAVKVFKMTCETAIQLreKGKvvvAD 91 567888899*********************************975543..44555999***********99988888884234422246 PP globins4 86 aklkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllas 146 ++l+ L H k+ +dp+ f+++ e+lv +l+++l++++ +v++a K+ + +a ++++ sp|Q941Q2|HBL2_BRANA 92 TTLQYLGSVHFKSGVLDPH-FEVVKEALVRTLKEGLGEKYNEEVEGAWSKAYDHLALAIKA 151 7999**********99995.9******************************9999988876 PP >> sp|Q90W04|NGB_TETNG Neuroglobin OS=Tetraodon nigroviridis GN=ngb PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 41.8 0.0 7.4e-12 3.6e-09 2 140 .. 3 142 .. 2 150 .. 0.90 Alignments for each domain: == domain 1 score: 41.8 bits; conditional E-value: 7.4e-12 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklk 89 +Ls ++k+ ++ W + + +G+ rlf P+ ++ F + ++ +s++ +H kv+ + +a+ +ld le l sp|Q90W04|NGB_TETNG 3 KLSSKDKELIRGSWDSLGKNKVPHGVILFSRLFELDPELLNLFHYTTNCGSTQDCLSSPEFLEHVTKVMLVIDAAVSHLDdlHSLEDFLL 92 599*****************************************9999988888999**********************74667788899 PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalv 140 +L +H + v p+ f +++e l+ +l+ l++ +ta+ a + ++v sp|Q90W04|NGB_TETNG 93 NLGRKH-QAVGVKPQSFAMVGESLLYMLQCSLGQAYTASLRQAWLNMYSVV 142 *****9.5789***************************9987766665555 PP >> sp|P14395|GLB1A_ANATR Globin-1 subunit alpha OS=Anadara trapezia PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 41.7 0.0 8.2e-12 4e-09 4 143 .. 12 150 .. 9 151 .] 0.88 Alignments for each domain: == domain 1 score: 41.7 bits; conditional E-value: 8.2e-12 globins4 4 seaektkvkavWakv.eadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 sea k +++ W+ ad+e +G L lf+ P t+++F + +d++ + k++ +++ H+ ++ Al + +ld +l+ + sp|P14395|GLB1A_ANATR 12 SEAIKGNLRRSWGVLmSADIEATGLTYLANLFTLRPDTKTYFTRLGDVQ---KGKANSKLRGHAITLTYALDWFVDSLDdpSRLKCVV 96 677899999***9862689****************************99...889***********************7355666667 PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakl 143 ++ + +H ++ k+ f + e + ++l+ar+++ ++ dv +a l+ +v+ + sp|P14395|GLB1A_ANATR 97 EKFAVNHINR-KISGDAFGSIIEPMKETLKARMGSYYSDDVAGAWAALIGVVQAA 150 7777777654.9********************************99998888765 PP >> sp|P41261|GLB2_PHAPT Hemoglobin-2 OS=Phacoides pectinatus PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 41.2 0.0 1.2e-11 5.8e-09 2 144 .. 3 143 .. 2 147 .. 0.87 Alignments for each domain: == domain 1 score: 41.2 bits; conditional E-value: 1.2e-11 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFek.FkdLstedelkksadvkkHgkkvldAlsdalakldekleakl. 88 +L++ +k ++++ W+k + G+ + lfk++P+t++ F++ F++L+ ++l+ ++++k+ + + +s + +ld+++ l sp|P41261|GLB2_PHAPT 3 TLTNPQKAAIRSSWSKFMDNGVSNGQGFYMDLFKAHPETLTPFKSlFGGLT-LAQLQDNPKMKAQSLVFCNGMSSFVDHLDDNMLVVLi 90 589999*************************************98477776.99**************************977766542 PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 +++++lH ++ + ++ ++l++ + + +++ ++ a e ++ ++k+l sp|P41261|GLB2_PHAPT 91 QKMAKLHNNR-GIRASDLRTAYDILIHYMEDH--NHMVGGAKDAWEVFVGFICKTL 143 8899999765.799999999999999999999..6777777888888888888876 PP >> sp|P29243|GLBV_CHITP Globin CTT-V OS=Chironomus thummi piger GN=CTT-V PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 40.8 0.3 1.5e-11 7.3e-09 2 139 .. 18 152 .. 2 158 .. 0.80 Alignments for each domain: == domain 1 score: 40.8 bits; conditional E-value: 1.5e-11 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 +L+ +e + vk+ W +v + +diL +fk++P q +F++F + d +k s + +H+ +++ ls+ +a ea+l++ sp|P29243|GLBV_CHITP 18 PLTSDEANLVKSSWNQV----KHNEVDILAAVFKAYPDIQAKFPQFAGK-DLDSIKTSGQFATHATRIVSFLSELIALS--GNEANLSA 99 6999*************....56679********************665.489*********************99984..34455555 PP globins4 91 LselHakklkvdpky.......fkllsevlvdvlaarlpkeftadvqaaleKllal 139 + +l kkl vd k+ f+ + +l+ l ++ ++ +v aa e +l+ sp|P29243|GLBV_CHITP 100 VYGL-VKKLGVDHKNrgitqgqFNEFKTALISYLSSH--VSWGDNVAAAWEHALEN 152 4443.34444444432222222888889999999999..78999999999998876 PP >> sp|P21660|GLBP3_GLYDI Globin, polymeric component P3 OS=Glycera dibranchiata PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 41.0 0.0 1.3e-11 6.3e-09 2 121 .. 2 122 .. 1 143 [. 0.88 Alignments for each domain: == domain 1 score: 41.0 bits; conditional E-value: 1.3e-11 globins4 2 vLseaektkvkavWakveadv..eesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekle 85 +L++++ ++ka W +v a ++ G ++ +r f P+ F + +lk + ++++Hgk +++ +++a+ +ld k+e sp|P21660|GLBP3_GLYDI 2 HLTADQVAALKASWPEVSAGDggAQLGLEMFTRYFDENPQMMFVFGYSGRT---SALKHNSKLQNHGKIIVHQIGQAVSELDdgSKFE 86 7999999**********98651256899***********999888776544...59*************************657899* PP globins4 86 aklkdLselHakklkvdpkyfkllsevlvdvlaarl 121 a+l++L + H + +yf l+++l++ + ++ sp|P21660|GLBP3_GLYDI 87 ATLHKLGQEHKGFGDIKGEYFPALGDALLEAMNSKV 122 *****************************9998874 PP >> sp|P02216|GLB1_GLYDI Globin, major monomeric component OS=Glycera dibranchiata PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 40.4 0.1 2e-11 9.7e-09 3 144 .. 2 141 .. 1 145 [. 0.88 Alignments for each domain: == domain 1 score: 40.4 bits; conditional E-value: 2e-11 globins4 3 LseaektkvkavWakvea..dveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleak 87 Ls+a+++ + a W + + +++G+d L++++ ++P+ F F + s + v + g kvl ++ a+ +l d +k+ a+ sp|P02216|GLB1_GLYDI 2 LSAAQRQVIAATWKDIAGadNGAGVGKDCLIKFLSAHPQMAAVFG-FSGAS-------DPGVAALGAKVLAQIGVAVSHLgDeGKMVAQ 82 89************996422457899****************996.76655.......799*******************9779***** PP globins4 88 lkdLselHa..kklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 +k++ +H + ++ +yf+ l++ l+ + +r ++++ a+++ a + a ++ +l sp|P02216|GLB1_GLYDI 83 MKAVGVRHKgyGNKHIKAQYFEPLGASLLSAMEHRIGGKMNAAAKDAWAAAYADISGAL 141 *****9996225789*****************************999988888777666 PP >> sp|P02213|GLB1_ANAIN Globin-1 OS=Anadara inaequivalvis PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 40.7 0.1 1.7e-11 8.3e-09 2 143 .. 9 145 .. 8 146 .] 0.93 Alignments for each domain: == domain 1 score: 40.7 bits; conditional E-value: 1.7e-11 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 +L+++ k+ ++ W +++d ++ G+ ++ lf +t +F++ +d+s + +++++++ H+ +++ Al++ + +ld ++l + sp|P02213|GLB1_ANAIN 9 QLTADVKKDLRDSWKVIGSDKKGNGVALMTTLFADNQETIGYFKRLGDVS---QGMANDKLRGHSITLMYALQNFIDQLDnpDDLVCVV 94 689999*******************************************9...999***********************8677888888 PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakl 143 ++ + +H ++ k+ f + + +vla++ +f+ + a Kl+a+v+ + sp|P02213|GLB1_ANAIN 95 EKFAVNHITR-KISAAEFGKINGPIKKVLASK---NFGDKYANAWAKLVAVVQAA 145 9999999876.9*******************9...9**************99876 PP >> sp|P59743|NGB2_ONCMY Neuroglobin-2 OS=Oncorhynchus mykiss GN=ngb2 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 40.3 0.0 2.3e-11 1.1e-08 2 136 .. 3 138 .. 2 150 .. 0.90 Alignments for each domain: == domain 1 score: 40.3 bits; conditional E-value: 2.3e-11 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 +L+e++k+ ++ W + + +G+ + rlf Pa ++ F + s ++ +s++ H kv+ + +a+ +ld le l sp|P59743|NGB2_ONCMY 3 KLTEKDKELIRGSWESLGKNKVPHGVVMFSRLFELEPALLNLFHYNTNCSPTQDCLSSPEFLDHVTKVMLVIDAAVSHLDdlHTLEDFL 91 599***********************************************999999***********************7466778889 PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKl 136 +L ++H + v+ + f +++e l+ +l+ l++ +t + a + sp|P59743|NGB2_ONCMY 92 LNLGKKH-QAVGVNTQSFAVVGESLLYMLQCSLGHGYTGPLRQAWLNM 138 9**9999.5789*************************98887665444 PP >> sp|Q23761|GLBZ_CHITH Globin CTT-Z OS=Chironomus thummi thummi GN=CTT-Z PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 39.2 0.1 4.7e-11 2.3e-08 2 142 .. 18 155 .. 17 160 .. 0.76 Alignments for each domain: == domain 1 score: 39.2 bits; conditional E-value: 4.7e-11 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl..dekleakl 88 +L+ +e vk+ Wa+v + +diL +fk++P q F++F + d +k s + +H+ +++ ls+ +a + +l+a + sp|Q23761|GLBZ_CHITH 18 PLTSDEAALVKSSWAQV----KHNEVDILYTVFKAYPDIQARFPQFAGK-DLDTIKTSGQFATHATRIVSFLSELIALSgsESNLSAIY 101 6999*************....56679********************664.4889********************999754224444443 PP globins4 89 kdLselHakklk...vdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvak 142 +s+ + +k + f+ + +lv + ++ ++ +v aa +l+ v + sp|Q23761|GLBZ_CHITH 102 GLISK-MGTDHKnrgITQTQFNKFRTALVSYISSN--VAWGDNVAAAWTHALDNVYT 155 33333.33333323377777888888888888887..66777888887777777765 PP >> sp|P31331|GLB_NASMU Globin OS=Nassarius mutabilis PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 39.7 0.2 3.4e-11 1.6e-08 3 139 .. 2 141 .. 1 145 [. 0.85 Alignments for each domain: == domain 1 score: 39.7 bits; conditional E-value: 3.4e-11 globins4 3 LseaektkvkavWakveadvees...GadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleakl 88 Ls+++kt++k W a+ e++ a + lf +P t+++F+ F +++k+ k+Hg v l++ + ++d ++ l sp|P31331|GLB_NASMU 2 LSAEQKTALKDSWKILAANGETMvknSAAMFGLLFEKYPDTKKHFKTFD-GDHFAAMKATGMGKAHGMSVFSGLGALVSSVDdGECVLGL 90 89***********999998887611145578899**************5.55699**************************645655555 PP globins4 89 .kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllal 139 k+Ls +H+ + v + fkl+ + + l + +++ t ++++a + ll + sp|P31331|GLB_NASMU 91 aKKLSRNHTAR-GVTANDFKLMRSIFGEFLDKATGGKATESMKSAWDALLGV 141 378*****876.799*****************99**9999999999988765 PP >> sp|P02212|GLB1_ANABR Globin-1 OS=Anadara broughtonii PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 39.6 0.2 3.7e-11 1.8e-08 2 143 .. 9 145 .. 8 146 .] 0.93 Alignments for each domain: == domain 1 score: 39.6 bits; conditional E-value: 3.7e-11 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 +L+++ k+ ++ W +++d ++ G+ ++ lf +t +F++ +++s + +++++++ H+ +++ Al++ + +ld ++l + sp|P02212|GLB1_ANABR 9 QLTADVKKDLRDSWKVIGSDKKGNGVALMTTLFADNQETIGYFKRLGNVS---QGMANDKLRGHSITLMYALQNFIDQLDntDDLVCVV 94 689999*************************************9999999...999***********************8567788888 PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakl 143 ++ + +H ++ k+ f + + +vla++ +f+ + a Kl+a+v+ + sp|P02212|GLB1_ANABR 95 EKFAVNHITR-KISAAEFGKINGPIKKVLASK---NFGDKYANAWAKLVAVVQAA 145 9999999876.9*******************9...9**************99876 PP >> sp|P29245|GLBZ_CHITP Globin CTT-Z OS=Chironomus thummi piger GN=CTT-Z PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 38.8 0.1 6.2e-11 3e-08 2 142 .. 18 155 .. 17 160 .. 0.76 Alignments for each domain: == domain 1 score: 38.8 bits; conditional E-value: 6.2e-11 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl..dekleakl 88 +L+ +e vk+ Wa+v + +diL +fk++P q F++F + d +k s + +H+ +++ +s+ +a + +l+a + sp|P29245|GLBZ_CHITP 18 PLTSDEAALVKSSWAQV----KHNEVDILYTVFKAYPDIQARFPQFAGK-DLDSIKTSGQFATHATRIVSFFSELIALSgsESNLSAIY 101 6999*************....56679********************665.489*********************999753224444443 PP globins4 89 kdLselHakklk...vdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvak 142 +s+ + +k + f+ + +lv + ++ ++ +v aa +l+ v + sp|P29245|GLBZ_CHITP 102 GLISK-MGTDHKnrgITQTQFNEFRTALVSYISSN--VSWGDNVAAAWTHALDNVYT 155 33333.33333323377777888888888888887..67788888888777777765 PP >> sp|P86881|NGB_DISMA Neuroglobin OS=Dissostichus mawsoni PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 38.8 0.0 6.3e-11 3.1e-08 2 143 .. 3 145 .. 2 150 .. 0.92 Alignments for each domain: == domain 1 score: 38.8 bits; conditional E-value: 6.3e-11 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklk 89 +Lse++k+ ++ W + + +G+ + rlf P+ ++ F + ++ +s++ +H kv+ + +a+ +ld le l sp|P86881|NGB_DISMA 3 KLSEKDKELIRGSWESLGKNKVPHGVVMFSRLFELDPELLTLFHYTTNCGSTQDCLSSPEFLEHVTKVMLVIDAAVSNLDdlPSLEDFLL 92 59******************************************9999988888999**********************746689999** PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakl 143 +L +H + v+ + f ++e l+++l+ l++ +ta+ a l ++v + sp|P86881|NGB_DISMA 93 NLGRKH-QAVGVNTQSFAEVGESLLHMLQCSLGQAYTAPLRQAWLNLYSIVVAA 145 *****9.5789****************************998887777776665 PP >> sp|P86880|NGB_CHAAC Neuroglobin OS=Chaenocephalus aceratus PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 38.7 0.0 6.7e-11 3.3e-08 2 143 .. 3 145 .. 2 150 .. 0.92 Alignments for each domain: == domain 1 score: 38.7 bits; conditional E-value: 6.7e-11 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklk 89 +Lse++k+ ++ W + + +G+ + rlf P+ ++ F + ++ +s++ +H kv+ + +a+ +ld le l sp|P86880|NGB_CHAAC 3 KLSEKDKELIRGSWESLGKNKVPHGVVMFSRLFELDPELLTLFHYTTNCGSTQDCLSSPEFLEHVTKVMLVIDAAVSHLDdlPSLEDFLL 92 59******************************************9999988888999**********************746688999** PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakl 143 +L +H + v+ + f ++e l+ +l+ l++ +ta+ a l ++v + sp|P86880|NGB_CHAAC 93 NLGRKH-QAVGVNTQSFAEVGESLLYMLQCSLGQAYTAPLRQAWLNLYSIVVAA 145 *****9.5789****************************998887777776665 PP >> sp|P02214|GLB_BUSCA Globin OS=Busycotypus canaliculatus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 38.7 0.2 6.7e-11 3.2e-08 5 127 .. 4 129 .. 1 145 [. 0.77 Alignments for each domain: == domain 1 score: 38.7 bits; conditional E-value: 6.7e-11 globins4 5 eaektkvkavWakvead...veesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ek.leaklk 89 a+kt++k+ W +ad + + G lfk++P t+++F++F d t +++ k+Hg+ v l+ ++ ++d ++ +++ k sp|P02214|GLB_BUSCA 4 GAQKTALKESWKVLGADgptMMKNGSLLFGLLFKTYPDTKKHFKHFDD-ATFAAMDTTGVGKAHGVAVFSGLGSMICSIDdDDcVBGLAK 92 6789999999988888622266789999999***************55.67999**99999******************54551455568 PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkefta 127 +Ls +H + v fkll +v + l + ++ t sp|P02214|GLB_BUSCA 93 KLSRNHLAR-GVSAADFKLLEAVFKZFLDEATQRKATD 129 9*****876.799********99988887654443332 PP >> sp|Q23763|GLB78_CHITH Globin CTT-VIIB-8 OS=Chironomus thummi thummi GN=CTT-7B8 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 38.4 0.5 8.4e-11 4.1e-08 2 139 .. 18 152 .. 17 159 .. 0.85 Alignments for each domain: == domain 1 score: 38.4 bits; conditional E-value: 8.4e-11 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.dekleakl 88 +L+++e + v++ W v ++iL +f ++P q++F++F + + +k +H+ +++ ls+++a +e +++ sp|Q23763|GLB78_CHITH 18 PLTADEASLVQSSWKAV----SHNEVEILAAVFAAYPDIQNKFPQFAGKD-LASIKDTGAFATHATRIVSFLSEVIALSgNESNASAV 100 699************99....44568********************6544.779**********************987556777777 PP globins4 89 kdLselHakklk...vdpkyfkllsevlvdvlaarlpkeftadvqaaleKllal 139 ++L + + +k v f + +lv l ++ ++ +v aa +K+l+ sp|Q23763|GLB78_CHITH 101 NSLVSKLGDDHKargVSAAQFGEFRTALVAYLSNH--VSWGDNVAAAWNKALDN 152 77777777666644588999999999********9..899**********9975 PP >> sp|P23244|HBP2_CASGL Hemoglobin-2 OS=Casuarina glauca GN=HBII PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 38.4 0.6 8.5e-11 4.2e-08 4 141 .. 10 153 .. 8 158 .. 0.81 Alignments for each domain: == domain 1 score: 38.4 bits; conditional E-value: 8.5e-11 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekl...eak 87 +e++ v + W+ ++ +++e G ++f P +q+ F kd + l+ ++++k H+ v + +l + +k+ e++ sp|P23244|HBP2_CASGL 10 TEEQEALVVKSWSAMKPNAGELGLKFFLKIFEIAPSAQKLFSFLKDSN--VPLERNPKLKSHAMSVFLMTCESAVQLrKaGKVtvrESS 96 677888999********************************9998876..7799***********965554444444244554222678 PP globins4 88 lkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqa....aleKllalva 141 lk+L +H k+ v ++f++ +l++++++ p+ ++++++ a++Kl+a ++ sp|P23244|HBP2_CASGL 97 LKKLGASHF-KHGVADEHFEVTKFALLETIKEAVPETWSPEMKNawgeAYDKLVAAIK 153 888988886.68999************************9998622235788888776 PP >> sp|Q90YJ2|NGB_DANRE Neuroglobin OS=Danio rerio GN=ngb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 38.5 0.0 8.1e-11 3.9e-08 2 143 .. 3 145 .. 2 150 .. 0.91 Alignments for each domain: == domain 1 score: 38.5 bits; conditional E-value: 8.1e-11 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklk 89 +Lse++k ++ W + + +G +rlf Pa ++ F + + e +s++ +H kv+ + +a+ +ld le l sp|Q90YJ2|NGB_DANRE 3 KLSEKDKGLIRDSWESLGKNKVPHGIVLFTRLFELDPALLTLFSYSTNCGDAPECLSSPEFLEHVTKVMLVIDAAVSHLDdlHTLEDFLL 92 59************************************************9****************************74667788899 PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakl 143 +L +H + v+ + f l++e l+ +l++ l+ +t++ a + ++v + sp|Q90YJ2|NGB_DANRE 93 NLGRKH-QAVGVNTQSFALVGESLLYMLQSSLGPAYTTSLRQAWLTMYSIVVSA 145 *****9.5789**********************999999888776666666555 PP >> sp|P12548|GLB73_CHITH Globin CTT-VIIB-3 OS=Chironomus thummi thummi GN=CTT-7B3 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 38.2 0.5 9.5e-11 4.6e-08 2 139 .. 18 152 .. 17 159 .. 0.86 Alignments for each domain: == domain 1 score: 38.2 bits; conditional E-value: 9.5e-11 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.dekleakl 88 +L+++e + v++ W v +diL +f ++P q +F++F + + +k +H+ +++ ls+++a +e +++ sp|P12548|GLB73_CHITH 18 PLTADEASLVQSSWKAV----SHNEVDILAAVFAAYPDIQAKFPQFAGKD-LASIKDTGAFATHATRIVSFLSEVIALSgNESNASAV 100 699************99....44568********************6544.779**********************987556777777 PP globins4 89 kdLselHakklk...vdpkyfkllsevlvdvlaarlpkeftadvqaaleKllal 139 ++L + + +k v f + +lv l ++ ++ +v aa +K+l+ sp|P12548|GLB73_CHITH 101 NSLVSKLGDDHKargVSAAQFGEFRTALVAYLSNH--VSWGDNVAAAWNKALDN 152 77777777666644588999999999********9..899**********9975 PP >> sp|P04251|GLB1B_ANATR Globin-1 subunit beta OS=Anadara trapezia PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 38.4 0.1 8.3e-11 4e-08 4 143 .. 13 151 .. 10 152 .] 0.89 Alignments for each domain: == domain 1 score: 38.4 bits; conditional E-value: 8.3e-11 globins4 4 seae.ktkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 s+a+ k ++ W+ d+e++G + lfk+ a++++F + +d+s + k + +++ H+ +++ Al++ + ld ++l+ + sp|P04251|GLB1B_ANATR 13 SNADqKDLLRLSWGVLSVDMEGTGLMLMANLFKTSSAARTKFARLGDVS---AGKDNSKLRGHSITLMYALQNFIDALDnvDRLKCVV 97 555416778899*************************************...7799****************9999997556788888 PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakl 143 ++ + +H ++ ++ f + l ++l+ar+++ f d +a l+a+v+ + sp|P04251|GLB1B_ANATR 98 EKFAVNHINR-QISADEFGEIVGPLRQTLKARMGSYFDEDTVSAWASLVAVVQAA 151 8888888875.899****99999**********************9999999876 PP >> sp|P02226|GLB7A_CHITH Globin CTT-VIIA OS=Chironomus thummi thummi GN=ctt-7A.1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 37.8 0.0 1.3e-10 6.2e-08 2 101 .. 18 113 .. 17 160 .. 0.82 Alignments for each domain: == domain 1 score: 37.8 bits; conditional E-value: 1.3e-10 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.dekleakl 88 +Ls+++ vk+ Wa+v +s ++iL +f+++P q F++F + + +k +H+ ++++ +s+++a + +e ++ sp|P02226|GLB7A_CHITH 18 PLSADQAALVKSTWAQV----RNSEVEILAAVFTAYPDIQARFPQFAGKD-VASIKDTGAFATHAGRIVGFVSEIIALIgNESNAPAV 100 6999************9....77889********************7655.899*************************668888899 PP globins4 89 kdLselHakklkv 101 ++L ++ a ++k sp|P02226|GLB7A_CHITH 101 QTLVGQLAASHKA 113 9999999999873 PP >> sp|P18966|GLB78_CHITP Globin CTT-VIIB-8 OS=Chironomus thummi piger GN=CTT-7B8 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 37.9 0.5 1.3e-10 6.1e-08 2 139 .. 18 152 .. 17 159 .. 0.85 Alignments for each domain: == domain 1 score: 37.9 bits; conditional E-value: 1.3e-10 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.dekleakl 88 +L+++e + v++ W v ++iL +f ++P q++F++F + + +k +H+ +++ ls+++a +e +++ sp|P18966|GLB78_CHITP 18 PLTADEASLVQSSWKAV----SHNEVEILAAVFAAYPDIQNKFPQFAGKD-LASIKDTGAFATHATRIVSFLSEVIALSgNESNASAV 100 699************99....44568********************6544.779**********************987556777777 PP globins4 89 kdLselHakklk...vdpkyfkllsevlvdvlaarlpkeftadvqaaleKllal 139 ++L + + +k v f + +lv l+a+ ++ +v aa +K+l+ sp|P18966|GLB78_CHITP 101 NSLVSKLGDDHKargVSAAQFGEFRTALVAYLQAN--VSWGDNVAAAWNKALDN 152 77777777666644488899999999999999999..899**********9975 PP >> sp|Q42831|HBL_HORVU Non-symbiotic hemoglobin OS=Hordeum vulgare GN=HB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 37.7 0.1 1.4e-10 6.7e-08 2 141 .. 9 155 .. 8 161 .. 0.82 Alignments for each domain: == domain 1 score: 37.7 bits; conditional E-value: 1.4e-10 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekl...ea 86 v se+ v++ Wa ++ d ++ G ++f P ++++F+ +d l+ ++++k+H++ v +a a+l + +k+ e+ sp|Q42831|HBL_HORVU 9 VFSEEKEALVLKSWAIMKKDSANLGLRFFLKIFEIAPSARQMFPFLRDSD--VPLETNPKLKTHAVSVFVMTCEAAAQLrKaGKItvrET 96 78999999************************************997765..6799*************999999999964565422378 PP globins4 87 klkdLselHakklkvdpkyfkllsevlvdvlaarlpke.ftadvqa....aleKllalva 141 +lk L + H k+ v +f++ +l++++++ lp++ +++++ a+++l+a ++ sp|Q42831|HBL_HORVU 97 TLKRLGGTHL-KYGVADGHFEVTRFALLETIKEALPADmWGPEMRNawgeAYDQLVAAIK 155 99*******7.799999*******************994477776511114555555554 PP >> sp|P84296|GLB74_CHITH Globin CTT-VIIB-4 OS=Chironomus thummi thummi GN=CTT-7B4 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 37.3 0.6 1.9e-10 9.2e-08 2 140 .. 18 153 .. 16 160 .. 0.81 Alignments for each domain: == domain 1 score: 37.3 bits; conditional E-value: 1.9e-10 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d....ekl 84 +L+++e + v++ W v +diL +f ++P q +F++F + + +k +H+ +++ ls+++a + + sp|P84296|GLB74_CHITH 18 PLTADEASLVQSSWKAV----SHNEVDILAAVFAAYPDIQAKFPQFAGKD-LASIKDTGAFATHATRIVSFLSEVIALSgNasnaAAV 100 699************99....44568********************6544.779********************99975331111234 PP globins4 85 eaklkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalv 140 e+ l++L H v f + +lv l ++ ++ +v aa +K+l+ sp|P84296|GLB74_CHITH 101 EGLLNKLGSDHK-ARGVSAAQFGEFRTALVSYLSNH--VSWGDNVAAAWNKALDNT 153 445666666663.3459999999999**********..899***********9764 PP >> sp|P84297|GLB74_CHITP Globin CTT-VIIB-4 OS=Chironomus thummi piger GN=CTT-7B4 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 37.3 0.6 1.9e-10 9.2e-08 2 140 .. 18 153 .. 16 160 .. 0.81 Alignments for each domain: == domain 1 score: 37.3 bits; conditional E-value: 1.9e-10 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d....ekl 84 +L+++e + v++ W v +diL +f ++P q +F++F + + +k +H+ +++ ls+++a + + sp|P84297|GLB74_CHITP 18 PLTADEASLVQSSWKAV----SHNEVDILAAVFAAYPDIQAKFPQFAGKD-LASIKDTGAFATHATRIVSFLSEVIALSgNasnaAAV 100 699************99....44568********************6544.779********************99975331111234 PP globins4 85 eaklkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalv 140 e+ l++L H v f + +lv l ++ ++ +v aa +K+l+ sp|P84297|GLB74_CHITP 101 EGLLNKLGSDHK-ARGVSAAQFGEFRTALVSYLSNH--VSWGDNVAAAWNKALDNT 153 445666666663.3459999999999**********..899***********9764 PP >> sp|P25165|GLBM_ANATR Globin, minor OS=Anadara trapezia PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 37.1 0.0 2.2e-10 1.1e-07 7 143 .. 17 151 .. 11 152 .] 0.91 Alignments for each domain: == domain 1 score: 37.1 bits; conditional E-value: 2.2e-10 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLse 93 k ++ W+ d+e++G + lf P+++ +F + ++Lst + + +++ H+ +++ Al++ + ld ++l+ +++ + sp|P25165|GLBM_ANATR 17 HKDLLRLSWGVLSDDMEGTGLMLMANLFNMSPESRLKFGRLGHLSTG---RDNSKLRGHSITLMYALKNFVDALDdvDRLKCVVEKFAV 102 57788999*************************************86...6899*****************999647788999999999 PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakl 143 +H ++ ++ + f + vl r++ f ++ aa l+a+v+ + sp|P25165|GLBM_ANATR 103 NHINR-QISAEEFGKIVGPFRAVLRIRMGDYFDEEIVAAWAALIAVVQAA 151 99876.899999999999999********************999999876 PP >> sp|O24521|HBL2_ARATH Non-symbiotic hemoglobin 2 OS=Arabidopsis thaliana GN=AHB2 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 37.0 0.2 2.3e-10 1.1e-07 4 145 .. 7 150 .. 4 154 .. 0.86 Alignments for each domain: == domain 1 score: 37.0 bits; conditional E-value: 2.3e-10 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedel.kksadvkkHgkkvldAlsdalakl.d.ek...lea 86 +e++ vk+ W + d+ ++ +++ Pa++ F F L+ +de+ ++++++k+H++kv + ++ +l + +k ++ sp|O24521|HBL2_ARATH 7 TEKQEALVKESWEILKQDIPKYSLHFFSQILEIAPAAKGLFS-F--LRDSDEVpHNNPKLKAHAVKVFKMTCETAIQLrEeGKvvvADT 92 6677789*********************************96.6..666777758899**********999888888843244222468 PP globins4 87 klkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvaklla 145 +l+ L H k+ +dp+ f+++ e+l+ +l+++l++++ +v++a ++ + +a +++ sp|O24521|HBL2_ARATH 93 TLQYLGSIHLKSGVIDPH-FEVVKEALLRTLKEGLGEKYNEEVEGAWSQAYDHLALAIK 150 9***************95.9***************************999988887776 PP >> sp|P02224|GLB6_CHITH Globin CTT-VI OS=Chironomus thummi thummi GN=CTT-6 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 36.8 0.4 2.6e-10 1.3e-07 2 138 .. 17 150 .. 16 160 .. 0.82 Alignments for each domain: == domain 1 score: 36.8 bits; conditional E-value: 2.6e-10 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.dekleaklk 89 vL+ ++ vk+ W+ v + +diL +fk++P +F++F + d +k sa +H+ +++ ls+++ + +++ sp|P02224|GLB6_CHITH 17 VLTTEQADLVKKTWSTV--KF--NEVDILYAVFKAYPDIMAKFPQFAGK-DLDSIKDSAAFATHATRIVSFLSEVISLAgSDANIPAIQ 100 899999*********99..44..458********************665.489*********************987764245556899 PP globins4 90 dLselHakklk...vdpkyfkllsevlvdvlaarlpkeftadvqaaleKlla 138 +L++ a+++k v f + +l + l+a+ +f + ++a +l+ sp|P02224|GLB6_CHITH 101 NLAKELATSHKprgVSKDQFTEFRTALFTYLKAH--INFDGPTETAWTLALD 150 9999999999866788888988899999999998..6777777766665555 PP >> sp|O24520|HBL1_ARATH Non-symbiotic hemoglobin 1 OS=Arabidopsis thaliana GN=AHB1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 36.6 0.5 3e-10 1.5e-07 2 145 .. 8 153 .. 7 157 .. 0.81 Alignments for each domain: == domain 1 score: 36.6 bits; conditional E-value: 3e-10 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekl...e 85 v +e++ v + W+ ++ + +e G +++f P+t+++F +d ++ ++++++k H+ v + +l + +k+ e sp|O24520|HBL1_ARATH 8 VFTEEQEALVVKSWSVMKKNSAELGLKLFIKIFEIAPTTKKMFSFLRDSPIPA--EQNPKLKPHAMSVFVMCCESAVQLrKtGKVtvrE 94 578899999**********************************9888876555..689*********9877666555553445542227 PP globins4 86 aklkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvaklla 145 ++lk L +H+k + v ++f++ +l++++++ p+ ++++++ a ++ + + +++ sp|O24520|HBL1_ARATH 95 TTLKRLGASHSK-YGVVDEHFEVAKYALLETIKEAVPEMWSPEMKVAWGQAYDHLVAAIK 153 89********86.5666689**********************999877666665555554 PP >> sp|P14394|GLB2_ANATR Globin-2B OS=Anadara trapezia PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 36.5 0.2 3.3e-10 1.6e-07 2 143 .. 9 145 .. 8 146 .] 0.92 Alignments for each domain: == domain 1 score: 36.5 bits; conditional E-value: 3.3e-10 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 +L+++ k+ ++ W ++d ++ G ++ lf + +t +F++ +d+s + +++ +++ H+ +++ Al++ + +ld ++l + sp|P14394|GLB2_ANATR 9 QLTADVKKDLRDSWKVLGSDKKGDGMALMTTLFNDHQETIAYFKRMGDVS---QGMANSKLRGHSITLMYALQNFIDQLDstDDLICVV 94 689999*******************************************9...8899**********************8667888888 PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakl 143 ++ + +H ++ k+ f + + +vla++ +f+ + a Kl+ +v+ + sp|P14394|GLB2_ANATR 95 EKFAVNHITR-KISGAEFGKINGPMKKVLASK---NFGDKYANAWAKLVGVVQAA 145 9999999876.899999*99**********99...99999999999999988765 PP >> sp|Q9M630|HBL0_PHYPA Non-symbiotic hemoglobin 0 OS=Physcomitrella patens subsp. patens GN=GLB0 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 36.4 0.1 3.6e-10 1.7e-07 4 146 .. 25 169 .. 22 172 .. 0.88 Alignments for each domain: == domain 1 score: 36.4 bits; conditional E-value: 3.6e-10 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl..dek...leak 87 s+++ + vk+ W + d++ G + ++f P ++ ++ +d + ++++++vk+H++ v +da +l ++ le+k sp|Q9M630|HBL0_PHYPA 25 SKENEQLVKQSWEILKKDAQRNGINFFRKVFEIAPGAKAMYSFLRDST--IPFEENPKVKNHARYVFMMTGDAAVQLgeKGAyqvLESK 111 88999***********************************99888877..5689*******************9999533323337899 PP globins4 88 lkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllas 146 l++L+ H + v f+++ e+++ + + p ++++ ++a + +++a+++++ sp|Q9M630|HBL0_PHYPA 112 LQKLAATHVNA-GVTDDQFEIVKEAILYAIEMGVPDLWSPELKSAWGDAYDMLAEQVKA 169 ********986.577788***************************99999999988876 PP >> sp|P29242|GLB77_CHITP Globin CTT-VIIB-7 OS=Chironomus thummi piger GN=CTT-7B7 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 35.9 0.9 4.9e-10 2.4e-07 2 139 .. 18 152 .. 17 160 .. 0.80 Alignments for each domain: == domain 1 score: 35.9 bits; conditional E-value: 4.9e-10 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleak 87 +Ls++e + vk+ W +v + +diL +f ++P q +F++F + + +k a +H+ +++ +++++ + +l+a sp|P29242|GLB77_CHITP 18 PLSADEANLVKSSWDQV----KHNEVDILAAVFAAYPDIQAKFPQFAGKD-LASIKDTAAFATHATRIVSFFTEVISLSgNqANLSAV 100 79***************....56679********************6544.779*******************998765433566666 PP globins4 88 lkdLselHak..klkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllal 139 ++ +s+l + + f + +lv l+a+ ++ +v aa + +l+ sp|P29242|GLB77_CHITP 101 YALVSKLGVDhkARGISAAQFGEFRTALVSYLQAH--VSWGDNVAAAWNHALDN 152 66666654431033488888988999999999999..78899999999988865 PP >> sp|P02227|GLB8_CHITH Globin CTT-VIII OS=Chironomus thummi thummi GN=CTT-8 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 36.1 0.1 4.4e-10 2.2e-07 3 130 .. 5 129 .. 3 148 .. 0.81 Alignments for each domain: == domain 1 score: 36.1 bits; conditional E-value: 4.4e-10 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.dekleaklkd 90 +s+++ k+ W v + +diL +fk+ P q +F++F + d +k sad H+ ++++ +s+++ + + + + +lk+ sp|P02227|GLB8_CHITH 5 MSADQLALFKSSWNTV----KHNEVDILYAVFKANPDIQAKFPQFAGK-DLDSIKDSADFAVHSGRIVGFFSEVIGLIgNPENRPALKT 88 5667777788888888....66679********************665.489*************************966788889*** PP globins4 91 LselHakklk...vdpkyfkllsevlvdvlaarlpkeftadvq 130 L + a+++k ++ f+ + + lvd l ++l + ++ sp|P02227|GLB8_CHITH 89 LIDGLASSHKargIEKAQFEEFRASLVDYLSHHLD--WNDTMK 129 *99999999866689999************99954..444444 PP >> sp|P12549|GLB76_CHITH Globin CTT-VIIB-6 OS=Chironomus thummi thummi GN=CTT-7B6 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 36.0 0.8 4.7e-10 2.3e-07 2 139 .. 18 152 .. 16 159 .. 0.85 Alignments for each domain: == domain 1 score: 36.0 bits; conditional E-value: 4.7e-10 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.dekleakl 88 +L+++e + v++ W v ++iL +f ++P q++F +F + + +k +H+ +++ ls+++a ++ a++ sp|P12549|GLB76_CHITH 18 PLTADEASLVQSSWKAV----SHNEVEILAAVFAAYPDIQNKFSQFAGKD-LASIKDTGAFATHATRIVSFLSEVIALSgNDSNAAAV 100 699************99....44568********************6544.779**********************987545666777 PP globins4 89 kdLselHakklk...vdpkyfkllsevlvdvlaarlpkeftadvqaaleKllal 139 ++L + + +k v f + +lv l+a+ ++ +v aa +K+l+ sp|P12549|GLB76_CHITH 101 NSLVSKLGDDHKargVSAAQFGEFRTALVAYLQAN--VSWGDNVAAAWNKALDN 152 77777777666644488899999999999999999..899**********9975 PP >> sp|Q99JA8|NGB_RAT Neuroglobin OS=Rattus norvegicus GN=Ngb PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 36.0 0.0 4.6e-10 2.2e-07 7 144 .. 5 144 .. 1 148 [. 0.92 Alignments for each domain: == domain 1 score: 36.0 bits; conditional E-value: 4.6e-10 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekF.kdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkdLselH 95 e + +++ W v e+G+ rlf P + F+ ++ s +++ +s++ H +kv+ + +a+ ++ d le l++L +H sp|Q99JA8|NGB_RAT 5 ESELIRQSWRAVSRSPLEHGTVLFSRLFALEPSLLPLFQYNgRQFSSPEDCLSSPEFLDHIRKVMLVIDAAVTNVeDlSSLEEYLATLGRKH 96 67899*********************************8652689******************************768899*********** PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 v f ++e l+ +l + l+ +ft++ +a +l v +++ sp|Q99JA8|NGB_RAT 97 R-AVGVRLSSFSTVGESLLYMLEKCLGPDFTPATRTAWSQLYGAVVQAM 144 5.689********************************999888777665 PP >> sp|Q23762|GLB7X_CHITH Globin CTT-VIIB-10 OS=Chironomus thummi thummi GN=CTT-7B10 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 35.9 0.7 5e-10 2.5e-07 2 139 .. 18 152 .. 17 159 .. 0.85 Alignments for each domain: == domain 1 score: 35.9 bits; conditional E-value: 5e-10 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.dekleakl 88 +L+++e + v++ W v ++iL +f ++P q++F +F + + +k +H+ +++ ls+++a +e +++ sp|Q23762|GLB7X_CHITH 18 PLTADEASLVQSSWKAV----SHNEVEILAAVFAAYPDIQNKFSQFAGKD-LASIKDTGAFATHATRIVSFLSEVIALSgNESNASAV 100 699************99....44568********************6544.779**********************987556777777 PP globins4 89 kdLselHakklk...vdpkyfkllsevlvdvlaarlpkeftadvqaaleKllal 139 ++L + + +k v f + +lv l+a+ ++ +v aa +K+l+ sp|Q23762|GLB7X_CHITH 101 NSLVSKLGDDHKargVSAAQFGEFRTALVAYLQAN--VSWGDNVAAAWNKALDN 152 77777777666644488899999999999999999..899**********9975 PP >> sp|P13579|GLB4_LUMTE Extracellular globin-4 OS=Lumbricus terrestris PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 35.8 0.0 5.3e-10 2.6e-07 4 144 .. 8 150 .. 6 151 .] 0.82 Alignments for each domain: == domain 1 score: 35.8 bits; conditional E-value: 5.3e-10 globins4 4 seaektkvkavWakveadveesGadiLvr.....lfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldek..le 85 s +++ +++++W v + + ++vr lfk +P+++ Fe+ k + +s + k H ++v++ l ++ ld+ l+ sp|P13579|GLB4_LUMTE 8 SYEDRREIRHIWDDVWSSSFTDRRVAIVRavfddLFKHYPTSKALFERVKIDE-----PESGEFKSHLVRVANGLDLLINLLDDTlvLQ 91 678999*********98776665555554444449*************95433.....6899*************99999998542278 PP globins4 86 aklkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 ++l +L+++H ++ v +yf+ ++e+ + vl + l+ + + +++l+a +ak+l sp|P13579|GLB4_LUMTE 92 SHLGHLADQHIQRKGVTKEYFRGIGEAFARVLPQVLSCFNVDAWNRCFHRLVARIAKDL 150 99******************************998665444455778888888888876 PP >> sp|P28316|GLB_ASCSU Extracellular globin OS=Ascaris suum PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 18.8 0.0 9.4e-05 0.046 16 103 .. 32 123 .. 22 134 .. 0.84 2 ! 14.8 0.1 0.0016 0.78 21 95 .. 188 263 .. 179 274 .. 0.87 Alignments for each domain: == domain 1 score: 18.8 bits; conditional E-value: 9.4e-05 globins4 16 akvea..dveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLselHakkl.k 100 akv++ ++ + G d ++f +P +++F++ ++ t++++++ + k g+k+l A a d e ++a ++L ++Ha+ + + sp|P28316|GLB_ASCSU 32 AKVDTsnEARQDGIDLYKHMFENYPPLRKYFKNREEY-TAEDVQNDPFFAKQGQKILLACHVLCATYDdrETFNAYTRELLDRHARDHvH 120 555431156688*******************998665.5999***********************995478899999********87636 PP globins4 101 vdp 103 ++p sp|P28316|GLB_ASCSU 121 MPP 123 666 PP == domain 2 score: 14.8 bits; conditional E-value: 0.0016 globins4 21 dveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLselH 95 ++++ G d ++f +P +e F+ ++ t+++++k + k g+++l A a+ d e +++ +++L e+H sp|P28316|GLB_ASCSU 188 TAKQNGIDLYKHMFENYPSMREAFKDRENY-TAEDVQKDPFFVKQGQRILLACHLLCASYDdeETFHMYVHELMERH 263 57789*******************998665.68889999999999**************954677889999999998 PP >> sp|P19364|GLB7_ARTSX Extracellular globin-E7 OS=Artemia sp. PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 35.5 0.0 6.8e-10 3.3e-07 3 114 .. 2 119 .. 1 136 [. 0.83 Alignments for each domain: == domain 1 score: 35.5 bits; conditional E-value: 6.8e-10 globins4 3 LseaektkvkavWakvead.veesGadiLvrlfkstPatqefFekFkdLstedelkk..sadvkkHgkkvldAlsdalakl.dekleak 87 L++ ek+ ++ +W+ +a e + + +lf +P+ + +F++F L++ + + +++++H ++v+dA+ ++ l e l+++ sp|P19364|GLB7_ARTSX 2 LTALEKQSIQDIWTILKAVgLEFLQVKMFGKLFADHPEYKAHFDNF--LTAIFSVAEdlVPKLRAHLHRVIDAFDLVIFALgRESLRGS 88 8999**********998852566788999*****************..66555554411699*****************99559***** PP globins4 88 lkdLselHakklkvdpky....fkllsevlv 114 lkdL H+ + vdp fkl+ +v+ sp|P19364|GLB7_ARTSX 89 LKDLGIFHTGRDIVDPVEsltgFKLMVAVIE 119 ***************9753444777777775 PP >> sp|P12550|GLB77_CHITH Globin CTT-VIIB-7 OS=Chironomus thummi thummi GN=CTT-7B7 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 34.8 1.0 1.1e-09 5.3e-07 2 139 .. 18 152 .. 17 160 .. 0.80 Alignments for each domain: == domain 1 score: 34.8 bits; conditional E-value: 1.1e-09 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleak 87 +Ls++e vk+ W +v + +diL +f ++P q +F++F + + +k a +H+ +++ +++++ + +l+a sp|P12550|GLB77_CHITH 18 PLSADEAAIVKSSWDQV----KHNEVDILAAVFAAYPDIQAKFPQFAGKD-LASIKDTAAFATHATRIVSFFTEVISLSgNqANLSAV 100 79***************....56679********************6544.779*******************998765433566666 PP globins4 88 lkdLselHak..klkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllal 139 ++ +s+l + + f + +lv l+a+ ++ +v aa + +l+ sp|P12550|GLB77_CHITH 101 YALVSKLGVDhkARGISAAQFGEFRTALVSYLQAH--VSWGDNVAAAWNHALDN 152 66666654431033488888988999999999999..78899999999988865 PP >> sp|P84298|GLB75_CHITH Globin CTT-VIIB-5/CTT-VIIB-9 OS=Chironomus thummi thummi GN=CTT-7B5 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 35.2 0.9 8.3e-10 4e-07 2 139 .. 18 152 .. 17 159 .. 0.83 Alignments for each domain: == domain 1 score: 35.2 bits; conditional E-value: 8.3e-10 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.dekleakl 88 +L+++e + v++ W v ++iL +f ++P q++F +F + + +k +H+ +++ ls+++a + a++ sp|P84298|GLB75_CHITH 18 PLTADEASLVQSSWKAV----SHNEVEILAAVFAAYPDIQNKFSQFAGKD-LASIKDTGAFATHATRIVSFLSEVIALSgNTSNAAAV 100 699************99....44568********************6544.779**********************986344555667 PP globins4 89 kdLselHakklk...vdpkyfkllsevlvdvlaarlpkeftadvqaaleKllal 139 ++L + + +k v f + +lv l+a+ ++ +v aa +K+l+ sp|P84298|GLB75_CHITH 101 NSLVSKLGDDHKargVSAAQFGEFRTALVAYLQAN--VSWGDNVAAAWNKALDN 152 77777766666544488899999999999999999..899**********9975 PP >> sp|P84299|GLB75_CHITP Globin CTT-VIIB-5/CTT-VIIB-9 OS=Chironomus thummi piger GN=CTT-7B5 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 35.2 0.9 8.3e-10 4e-07 2 139 .. 18 152 .. 17 159 .. 0.83 Alignments for each domain: == domain 1 score: 35.2 bits; conditional E-value: 8.3e-10 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.dekleakl 88 +L+++e + v++ W v ++iL +f ++P q++F +F + + +k +H+ +++ ls+++a + a++ sp|P84299|GLB75_CHITP 18 PLTADEASLVQSSWKAV----SHNEVEILAAVFAAYPDIQNKFSQFAGKD-LASIKDTGAFATHATRIVSFLSEVIALSgNTSNAAAV 100 699************99....44568********************6544.779**********************986344555667 PP globins4 89 kdLselHakklk...vdpkyfkllsevlvdvlaarlpkeftadvqaaleKllal 139 ++L + + +k v f + +lv l+a+ ++ +v aa +K+l+ sp|P84299|GLB75_CHITP 101 NSLVSKLGDDHKargVSAAQFGEFRTALVAYLQAN--VSWGDNVAAAWNKALDN 152 77777766666544488899999999999999999..899**********9975 PP >> sp|P02228|GLB10_CHITH Globin CTT-X OS=Chironomus thummi thummi GN=CTT-10 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 34.6 0.7 1.2e-09 6e-07 3 145 .. 7 150 .. 5 151 .] 0.75 Alignments for each domain: == domain 1 score: 34.6 bits; conditional E-value: 1.2e-09 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.dekleaklk 89 L + e ++v+a W v ++iL +fk++P +F+kF + +++k ad H+ ++++ +++ + l +a+++ sp|P02228|GLB10_CHITH 7 LDAHEVEQVQATWKAV----SHDEVEILYTVFKAHPDIMAKFPKFAGKD-LEAIKDTADFAVHASRIIGFFGEYVTLLgSSGNQAAIR 89 6788999******999....34458********************6544.669***********************995445555555 PP globins4 90 dL....selHakklkvdpkyfkllsevlvdvl..aarlpkeftadvqaaleKllalvaklla 145 +L H ++ + f + e + l ++++ ++ + + + a++K+++++ ++l sp|P02228|GLB10_CHITH 90 TLlhdlGVFHKTR-GITKAQFGEFRETMTAYLkgHNKWNADISHSWDDAFDKAFSVIFEVLE 150 5410005555444.466666766777777777334567889999999999999999988875 PP >> sp|Q6WZ20|NGB_MACMU Neuroglobin OS=Macaca mulatta GN=NGB PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 34.8 0.0 1.1e-09 5.5e-07 8 144 .. 6 144 .. 2 148 .. 0.92 Alignments for each domain: == domain 1 score: 34.8 bits; conditional E-value: 1.1e-09 globins4 8 ktkvkavWakveadveesGadiLvrlfkstPatqefFe.kFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkdLsel 94 + +++ W v e+G+ rlf P + F+ + ++ s +++ +s++ H +kv+ + +a+ ++ d le l++L + sp|Q6WZ20|NGB_MACMU 6 PELIRQSWRAVSRSPLEHGTVLFARLFALEPDLLPLFQyNCRQFSSPEDCLSSPEFLDHIRKVMLVIDAAVTNVeDlSSLEEYLASLGRK 95 57899*******9**********************998457899******************************7688999********* PP globins4 95 HakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 H v f ++e l+ +l + l+ ft++ aa +l v +++ sp|Q6WZ20|NGB_MACMU 96 HR-AVGVKLSSFSTVGESLLYMLEKCLGPAFTPATRAAWSQLYGAVVQAM 144 *5.689*********************************99988887765 PP >> sp|Q3KN66|NGB_PANTR Neuroglobin OS=Pan troglodytes GN=NGB PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 34.8 0.0 1.1e-09 5.5e-07 8 144 .. 6 144 .. 2 148 .. 0.92 Alignments for each domain: == domain 1 score: 34.8 bits; conditional E-value: 1.1e-09 globins4 8 ktkvkavWakveadveesGadiLvrlfkstPatqefFe.kFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkdLsel 94 + +++ W v e+G+ rlf P + F+ + ++ s +++ +s++ H +kv+ + +a+ ++ d le l++L + sp|Q3KN66|NGB_PANTR 6 PELIRQSWRAVSRSPLEHGTVLFARLFALEPDLLPLFQyNCRQFSSPEDCLSSPEFLDHIRKVMLVIDAAVTNVeDlSSLEEYLASLGRK 95 57899*******9**********************998457899******************************7688999********* PP globins4 95 HakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 H v f ++e l+ +l + l+ ft++ aa +l v +++ sp|Q3KN66|NGB_PANTR 96 HR-AVGVKLSSFSTVGESLLYMLEKCLGPAFTPATRAAWSQLYGAVVQAM 144 *5.689*********************************99988887765 PP >> sp|Q9NPG2|NGB_HUMAN Neuroglobin OS=Homo sapiens GN=NGB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 34.8 0.0 1.1e-09 5.5e-07 8 144 .. 6 144 .. 2 148 .. 0.92 Alignments for each domain: == domain 1 score: 34.8 bits; conditional E-value: 1.1e-09 globins4 8 ktkvkavWakveadveesGadiLvrlfkstPatqefFe.kFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkdLsel 94 + +++ W v e+G+ rlf P + F+ + ++ s +++ +s++ H +kv+ + +a+ ++ d le l++L + sp|Q9NPG2|NGB_HUMAN 6 PELIRQSWRAVSRSPLEHGTVLFARLFALEPDLLPLFQyNCRQFSSPEDCLSSPEFLDHIRKVMLVIDAAVTNVeDlSSLEEYLASLGRK 95 57899*******9**********************998457899******************************7688999********* PP globins4 95 HakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 H v f ++e l+ +l + l+ ft++ aa +l v +++ sp|Q9NPG2|NGB_HUMAN 96 HR-AVGVKLSSFSTVGESLLYMLEKCLGPAFTPATRAAWSQLYGAVVQAM 144 *5.689*********************************99988887765 PP >> sp|Q6WZ18|NGB_CANFA Neuroglobin OS=Canis familiaris GN=NGB PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 34.8 0.0 1.1e-09 5.5e-07 8 144 .. 6 144 .. 2 148 .. 0.92 Alignments for each domain: == domain 1 score: 34.8 bits; conditional E-value: 1.1e-09 globins4 8 ktkvkavWakveadveesGadiLvrlfkstPatqefFe.kFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkdLsel 94 + +++ W v e+G+ rlf P + F+ + ++ s +++ +s++ H +kv+ + a+ ++ d le l+ L ++ sp|Q6WZ18|NGB_CANFA 6 PELIRQSWRAVRRSPLEHGTVLFARLFDLEPDLLPLFQyNCRQFSSPEDCLSSPEFLDHIRKVMLVIDTAVTNVeDlSSLEEYLAGLGKK 95 57899******************************998457899******************************66889999******** PP globins4 95 HakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 H v f ++e l+ +l + l+ ft++v aa +l v +++ sp|Q6WZ18|NGB_CANFA 96 HR-AVGVKLSSFSTVGESLLYMLEKCLGPAFTPAVRAAWSQLYGAVVQAM 144 95.689*********************************99988887765 PP >> sp|O04985|HBL2_ORYSJ Non-symbiotic hemoglobin 2 OS=Oryza sativa subsp. japonica GN=HB2 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 34.8 0.7 1.1e-09 5.4e-07 3 144 .. 17 161 .. 15 168 .. 0.77 Alignments for each domain: == domain 1 score: 34.8 bits; conditional E-value: 1.1e-09 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekle...a 86 se++ v++ Wa ++ d ++ G ++f + P + ++F ++ + l+k++++k+H+ v +a a+l + +k+ + sp|O04985|HBL2_ORYSJ 17 FSEEQEALVLKSWAIMKKDSANIGLRFFLKIFEVAPSASQMFSFLRN--SDVPLEKNPKLKTHAMSVFVMTCEAAAQLrKaGKVTvrdT 103 7999999***********************************75543..35679**************999999999965566651114 PP globins4 87 klkdLselHakklkvdpkyfkllsevlvdvlaarlpkef.tadvqaaleKllalvakll 144 +lk L H k+ v +f++ +l++++++ p ++ ++++++a + + + ++ sp|O04985|HBL2_ORYSJ 104 TLKRLGATHF-KYGVGDAHFEVTRFALLETIKEAVPVDMwSPAMKSAWSEAYNQLVAAI 161 5666666664.5679999******************99625666665444443333333 PP >> sp|Q9FVL0|HBL1_MEDSA Non-symbiotic hemoglobin 1 OS=Medicago sativa GN=MHB1 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 34.4 1.2 1.4e-09 7e-07 4 147 .. 10 155 .. 8 157 .. 0.81 Alignments for each domain: == domain 1 score: 34.4 bits; conditional E-value: 1.4e-09 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekl...eak 87 +e++ v + W ++ + +e G ++f P +q+ F kd + l+++ ++k H+ v + +l + +k+ e++ sp|Q9FVL0|HBL1_MEDSA 10 TEEQEALVVKSWNAMKKNSAELGLKLFLKIFEIAPSAQKLFSFLKDSK--VPLEQNTKLKPHAMSVFLMTCESAVQLrKsGKVtvrESS 96 677888999*********************************999988..6799***********976555444444344665112566 PP globins4 88 lkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllask 147 lk+L +H k + v ++f++ +l++++++ p+ ++++++ a + + + ++++s sp|Q9FVL0|HBL1_MEDSA 97 LKKLGANHFK-YGVVDEHFEVTKFALLETIKEAVPEMWSPAMKNAWGEAYDQLVNAIKSE 155 7777777764.4566689*************************99988888888888765 PP >> sp|Q9ER97|NGB_MOUSE Neuroglobin OS=Mus musculus GN=Ngb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 34.5 0.0 1.4e-09 6.6e-07 7 144 .. 5 144 .. 1 148 [. 0.92 Alignments for each domain: == domain 1 score: 34.5 bits; conditional E-value: 1.4e-09 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekF.kdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkdLse 93 e + +++ W v e+G+ rlf P + F+ ++ s +++ +s++ H +kv+ + +a+ ++ d le l +L sp|Q9ER97|NGB_MOUSE 5 ESELIRQSWRVVSRSPLEHGTVLFARLFALEPSLLPLFQYNgRQFSSPEDCLSSPEFLDHIRKVMLVIDAAVTNVeDlSSLEEYLTSLGR 94 67899*******9999**********************8652689******************************7688999******** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 +H v f ++e l+ +l + l+ +ft++ +a +l v +++ sp|Q9ER97|NGB_MOUSE 95 KHR-AVGVRLSSFSTVGESLLYMLEKCLGPDFTPATRTAWSRLYGAVVQAM 144 **5.689********************************999988887765 PP >> sp|P68168|HBPL_PARAD Non-legume hemoglobin OS=Parasponia andersonii PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 34.4 0.7 1.5e-09 7.2e-07 3 135 .. 10 144 .. 8 159 .. 0.78 Alignments for each domain: == domain 1 score: 34.4 bits; conditional E-value: 1.5e-09 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklk 89 +e++ v ++Wa ++ + +e G + ++f P +++ F kd + l++++++k H+ +v + +l + +k k + sp|P68168|HBPL_PARAD 10 FTEEQEALVVKAWAVMKKNSAELGLQFFLKIFEIAPSAKNLFSYLKDS--PVPLEQNPKLKPHATTVFVMTCESAVQLrKaGKATVKES 96 68899999*************************************985..5889************98766655555535577666666 PP globins4 90 dLselHakklk..vdpkyfkllsevlvdvlaarlpkeftadvqaaleK 135 dL a ++k v ++f++ +l++++++ p+ ++++++ a sp|P68168|HBPL_PARAD 97 DLKRIGAIHFKtgVVNEHFEVTRFALLETIKEAVPEMWSPEMKNAWGV 144 666666666652256688******************999999876433 PP >> sp|P68169|HBPL_PARRI Non-legume hemoglobin OS=Parasponia rigida PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 34.4 0.7 1.5e-09 7.2e-07 3 135 .. 10 144 .. 8 159 .. 0.78 Alignments for each domain: == domain 1 score: 34.4 bits; conditional E-value: 1.5e-09 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklk 89 +e++ v ++Wa ++ + +e G + ++f P +++ F kd + l++++++k H+ +v + +l + +k k + sp|P68169|HBPL_PARRI 10 FTEEQEALVVKAWAVMKKNSAELGLQFFLKIFEIAPSAKNLFSYLKDS--PVPLEQNPKLKPHATTVFVMTCESAVQLrKaGKATVKES 96 68899999*************************************985..5889************98766655555535577666666 PP globins4 90 dLselHakklk..vdpkyfkllsevlvdvlaarlpkeftadvqaaleK 135 dL a ++k v ++f++ +l++++++ p+ ++++++ a sp|P68169|HBPL_PARRI 97 DLKRIGAIHFKtgVVNEHFEVTRFALLETIKEAVPEMWSPEMKNAWGV 144 666666666652256688******************999999876433 PP >> sp|Q6WZ17|NGB_PIG Neuroglobin OS=Sus scrofa GN=NGB PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 34.4 0.0 1.5e-09 7.2e-07 7 144 .. 5 144 .. 1 148 [. 0.92 Alignments for each domain: == domain 1 score: 34.4 bits; conditional E-value: 1.5e-09 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFe.kFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkdLselH 95 e++ +++ W v e+G+ rlf P + F+ + ++ s +++ +s++ H +kv+ + +a+ ++ d le l+ L +H sp|Q6WZ17|NGB_PIG 5 EHELIRQSWRAVSRSPLEHGTVLFARLFDLEPDLLPLFQyNCRQFSSPEDCLSSPEFLDHIRKVMLVIDAAVTNVeDlSSLEEYLAGLGRKH 96 7889********************************998457899******************************668899999*******9 PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 v f ++e l+ +l + l+ ft++ aa +l v +++ sp|Q6WZ17|NGB_PIG 97 R-AVGVKLSSFSAVGESLLYMLEKCLGPTFTPATRAAWSQLYGAVVQAM 144 5.689*********************************99988887765 PP >> sp|O04986|HBL1_ORYSJ Non-symbiotic hemoglobin 1 OS=Oryza sativa subsp. japonica GN=HB1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 34.2 1.3 1.6e-09 8e-07 3 144 .. 14 158 .. 12 164 .. 0.79 Alignments for each domain: == domain 1 score: 34.2 bits; conditional E-value: 1.6e-09 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekl...ea 86 se++ v++ Wa + d ++ ++f + P + ++F ++ + l+k++++k+H+ v +a a+l + +k+ ++ sp|O04986|HBL1_ORYSJ 14 FSEEQEALVLKSWAILKKDSANIALRFFLKIFEVAPSASQMFSFLRN--SDVPLEKNPKLKTHAMSVFVMTCEAAAQLrKaGKVtvrDT 100 7899999***********************************75543..35679**************999999999965566511145 PP globins4 87 klkdLselHakklkvdpkyfkllsevlvdvlaarlpkef.tadvqaaleKllalvakll 144 +lk L H k+ v +f+++ +l+d+++++ p+++ ++++++a + + + ++ sp|O04986|HBL1_ORYSJ 101 TLKRLGATHL-KYGVGDAHFEVVKFALLDTIKEEVPADMwSPAMKSAWSEAYDHLVAAI 158 6777777775.678999********************9625666666555444444433 PP >> sp|Q6WZ19|NGB_BOVIN Neuroglobin OS=Bos taurus GN=NGB PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 33.6 0.0 2.5e-09 1.2e-06 9 144 .. 7 144 .. 3 148 .. 0.92 Alignments for each domain: == domain 1 score: 33.6 bits; conditional E-value: 2.5e-09 globins4 9 tkvkavWakveadveesGadiLvrlfkstPatqefFe.kFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkdLselH 95 + +++ W +v e+G+ rlf P + F+ + ++ s +++ +s++ H +kv+ + +a+ ++ d le l+ L +H sp|Q6WZ19|NGB_BOVIN 7 ELIRQSWREVSRSPLEHGTVLFARLFDLEPDLLPLFQyNCRQFSSPEDCLSSPEFLDHIRKVMLVIDAAVTNVeDlSSLEEYLAGLGRKH 96 6899******************************998457899******************************668899999*******9 PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 v f ++e l+ +l + l+ ft++ aa +l v +++ sp|Q6WZ19|NGB_BOVIN 97 R-AVGVKLSSFSTVGESLLYMLEKCLGPAFTPATRAAWSQLYGAVVQAM 144 5.689*********************************99988887765 PP >> sp|Q6EV97|NGB_RABIT Neuroglobin OS=Oryctolagus cuniculus GN=NGB PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 33.7 0.0 2.4e-09 1.2e-06 7 144 .. 5 144 .. 1 148 [. 0.92 Alignments for each domain: == domain 1 score: 33.7 bits; conditional E-value: 2.4e-09 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFe.kFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkdLse 93 e++ +++ W v e+G+ rlf P + F+ + ++ s +++ +s++ H +kv+ + +a+ ++ d le l+ L sp|Q6EV97|NGB_RABIT 5 EQELIRQSWRAVSRSPLEHGTVLFARLFDLEPDLLPLFQyNCRQFSSPEDCLSSPEFLDHIRKVMLVIDAAVTNVeDlSSLEEYLAGLGR 94 7899********************************998457899******************************668899999*****9 PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 +H v f ++e l+ +l + l+ ft++ aa +l v +++ sp|Q6EV97|NGB_RABIT 95 KHR-AVGVRFSSFSTVGESLLYMLEKCLGPAFTPATRAAWSQLYGAVVQAM 144 995.68999*******************************99988887765 PP >> sp|Q9M593|HBL_ZEAMP Non-symbiotic hemoglobin OS=Zea mays subsp. parviglumis GN=HB PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 33.4 0.8 2.9e-09 1.4e-06 3 126 .. 13 138 .. 11 162 .. 0.78 Alignments for each domain: == domain 1 score: 33.4 bits; conditional E-value: 2.9e-09 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekl...eak 87 e++ v++ Wa ++ d+++ G ++f P ++++F +d l+k++++k+H+ v +a a+l + +k+ e++ sp|Q9M593|HBL_ZEAMP 13 FGEEQEALVLKSWAVMKKDAANLGLRFFLKVFEIAPSAKQMFSFLRDSD--VPLEKNPKLKTHAMSVFVMTCEAAAQLrKaGKVtvrETT 100 56788899**********************************8776654..679**************9999999999656676111445 PP globins4 88 lkdLselHakklkvdpkyfkllsevlvdvlaarlpkeft 126 lk L H ++ v +f++ + +l++++++ lp+++ sp|Q9M593|HBL_ZEAMP 101 LKRLGATHL-RYGVADGHFEVTGFALLETIKEALPADMW 138 555555554.45688899*****************9963 PP >> sp|P13578|GLB3_TYLHE Extracellular globin-2B OS=Tylorrhynchus heterochaetus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 33.5 0.0 2.8e-09 1.4e-06 4 132 .. 5 131 .. 3 147 .. 0.77 Alignments for each domain: == domain 1 score: 33.5 bits; conditional E-value: 2.8e-09 globins4 4 seaektkvkavWakvea.....dveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekle 85 s+a++ +v+ W + + G+ i + lf P+++ F + ++ + ad k+H +v++ l a++ l d + l+ sp|P13578|GLB3_TYLHE 5 SAADRHEVLDNWKGIWSaeftgRRVAIGQAIFQELFALDPNAKGVFGRV-NVD----KPSEADWKAHVIRVINGLDLAVNLLeDpKALQ 88 667777777777555331111134568*********************9.333....36779********************768899* PP globins4 86 aklkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaa 132 +lk+L+ +H ++ v yf + ++l++vl + +++f + +a sp|P13578|GLB3_TYLHE 89 EELKHLARQHRERSGVKAVYFDEMEKALLKVLPQV-SSHFNS---GA 131 *******************************9876.555643...44 PP >> sp|P02223|GLB9_CHITH Globin CTT-IX OS=Chironomus thummi thummi GN=CTT-9 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 32.6 0.1 5.1e-09 2.5e-06 3 121 .. 19 136 .. 17 161 .] 0.72 Alignments for each domain: == domain 1 score: 32.6 bits; conditional E-value: 5.1e-09 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.dekleak... 87 +s ++ ++++a Wa v + +diL +f +P q F++F + + +k +H+ ++++ +s+++a + +e + sp|P02223|GLB9_CHITH 19 VSSDQANAIRASWAGV----KHNEVDILAAVFSDHPDIQARFPQFAGKD-LASIKDTGAFATHAGRIVGFISEIVALVgNESNAPAmat 102 57788899*******9....56679********************6544.779************************965554444001 PP globins4 88 .lkdLselHakklkvdpkyfkllsevlvdvlaarl 121 +++Ls +H ++ + f+ + lv l ++ sp|P02223|GLB9_CHITH 103 lINELSTSHHNR-GITKGQFNEFRSSLVSYLSSHA 136 145566666444.3555556666666677776664 PP >> sp|P28010|LGB4_MEDSA Leghemoglobin OS=Medicago sativa GN=LB3 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 32.6 0.1 5e-09 2.4e-06 5 146 .. 5 144 .. 2 147 .] 0.85 Alignments for each domain: == domain 1 score: 32.6 bits; conditional E-value: 5e-09 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdL 91 +++ v++ W + + ++ + + ++ Pa++ +F F L+ ++ ++ s+++++H++kv + + d +l +++ ++L sp|P28010|LGB4_MEDSA 5 ADQEALVNSSWESFKQNLPGYSVFFYTTILEKAPAAKGMFS-F--LKDSAGVQDSPQLQAHAEKVFGMVRDSAVQLRatGEVVLGDATL 90 667788999999999999999999999***********996.6..77788*********************99999623455555589* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllas 146 H +k vdp+ f ++ e+l++++++ + +++ + ++ e + + +a ++++ sp|P28010|LGB4_MEDSA 91 GSIHIQKGVVDPH-FVVVKEALLKTIKEAVGDKWSEELSTSWEVAYDGLASAIKK 144 ************7.77999*******99999999988888888777777776654 PP >> sp|Q9FY42|HBL_MAIZE Non-symbiotic hemoglobin OS=Zea mays GN=HB PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 32.4 0.7 6.1e-09 3e-06 3 126 .. 13 138 .. 11 162 .. 0.78 Alignments for each domain: == domain 1 score: 32.4 bits; conditional E-value: 6.1e-09 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekl...eak 87 e++ v++ Wa ++ d+++ G ++f P ++++F +d l+k++++k+H+ v +a a+l + +k+ e++ sp|Q9FY42|HBL_MAIZE 13 FGEEQEALVLKSWAVMKKDAANLGLRFFLKVFEIAPSAEQMFSFLRDSD--VPLEKNPKLKTHAMSVFVMTCEAAAQLrKaGKVtvrETT 100 56788899**********************************8776654..679**************9999999999656676111445 PP globins4 88 lkdLselHakklkvdpkyfkllsevlvdvlaarlpkeft 126 lk L H ++ v +f++ + +l++++++ lp+++ sp|Q9FY42|HBL_MAIZE 101 LKRLGATHL-RYGVADGHFEVTGFALLETIKEALPADMW 138 555555554.45688899*****************9963 PP >> sp|P15447|GLB4_GLYDI Globin, monomeric component M-IV OS=Glycera dibranchiata PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 31.4 0.2 1.2e-08 5.9e-06 3 144 .. 3 142 .. 1 146 [. 0.86 Alignments for each domain: == domain 1 score: 31.4 bits; conditional E-value: 1.2e-08 globins4 3 LseaektkvkavWakvea..dveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleak 87 Ls+a+++ v + W + + +++G++ ++++ ++ F F + s + v g kvl ++ a+ +l d +k+ a+ sp|P15447|GLB4_GLYDI 3 LSAAQRQVVASTWKDIAGsdNGAGVGKECFTKFLSAHHDIAAVFG-FSGAS-------DPGVADLGAKVLAQIGVAVSHLgDeGKMVAE 83 99************9965224568999**********99999995.75655.......7889999***************9779***** PP globins4 88 lkdLselHak..klkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 +k++ +H ++ +yf+ l++ l+ + +r ++++ta+++ a + a ++ +l sp|P15447|GLB4_GLYDI 84 MKAVGVRHKGygYKHIKAEYFEPLGASLLSAMEHRIGGKMTAAAKDAWAAAYADISGAL 142 *****9997522579*****************************999988888777666 PP >> sp|P11582|GLBE_CHITH Globin CTT-E/E' OS=Chironomus thummi thummi GN=CTT-E PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 31.7 0.0 9.7e-09 4.7e-06 3 137 .. 16 141 .. 14 151 .. 0.84 Alignments for each domain: == domain 1 score: 31.7 bits; conditional E-value: 9.7e-09 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls ++ v++ ++kv ++ + iL +fk+ P+ q F++F + d++k+ a+ +H+ ++++ l+ ++ l ++ +++ +L sp|P11582|GLBE_CHITH 16 LSGDQIGLVQSTYGKV----KGDSVGILYAVFKADPTIQAAFPQFVGKD-LDAIKGGAEFSTHAGRIVGFLGGVIDDLP-NIGKHVDAL 98 6667777889999999....4555679******************6644.88*************************98.9999***** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKll 137 H + v f+ + ++ + l+ + ++ta+v+aa + sp|P11582|GLBE_CHITH 99 VATHKPR-GVTHAQFNNFRAAFIAYLKGH--VDYTAAVEAAWGATF 141 ***9665.677778888888999999999..8********986655 PP >> sp|P18968|GLBY_CHITP Globin CTT-Y OS=Chironomus thummi piger GN=CTT-Y PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 31.1 0.1 1.5e-08 7.2e-06 14 144 .. 28 155 .. 17 159 .. 0.79 Alignments for each domain: == domain 1 score: 31.1 bits; conditional E-value: 1.5e-08 globins4 14 vWakveadveesGadiLvrlfkstPatqefFekF..kdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkdLselHa.. 96 +W +++ ++iL +fk++P q +F++F kdL + +k+ a+ H+ +++ +++++ l + ++l+a ++ Ls+l sp|P18968|GLBY_CHITP 28 AWNT----MKNEEVEILYTVFKAYPDIQAKFPQFvgKDL---ETIKGTAEFAVHATRIVSFMTEVISLLgNpDNLPAIMSLLSKLGKdh 109 5544....466779********************44455...589**********************9975689999999888764310 PP globins4 97 kklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 k + +k f + e+ + l+++ + + +v+aa + + ++k++ sp|P18968|GLBY_CHITP 110 KGRGITVKQFDEFHEAFHNFLHTH--SVWNDNVDAAWHCNEKEIRKVI 155 445699999999999999999999..7788888888876666666666 PP >> sp|P02230|GLB4_CHITH Globin CTT-IV OS=Chironomus thummi thummi GN=D PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 31.1 0.1 1.6e-08 7.6e-06 3 98 .. 16 105 .. 14 150 .. 0.75 Alignments for each domain: == domain 1 score: 31.1 bits; conditional E-value: 1.6e-08 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 L++++ ++v++ +a v ++ + iL +fk+ P q +F +F + d +k+sad +H++k+++ +s+++ l ++++++ + sp|P02230|GLB4_CHITH 16 LTADQISTVQSSFAGV----KGDAVGILYAVFKADPSIQAKFTQFAGK-DLDSIKGSADFSAHANKIVGFFSKIIGDLP-NIDGDVTTF 98 6777777788888777....5555779******************664.489************************998.899999999 PP globins4 92 selHakk 98 +H+ + sp|P02230|GLB4_CHITH 99 VASHTPR 105 9999765 PP >> sp|P02240|LGB2_LUPLU Leghemoglobin-2 OS=Lupinus luteus PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 30.8 1.4 1.9e-08 9.2e-06 3 145 .. 4 147 .. 2 151 .. 0.85 Alignments for each domain: == domain 1 score: 30.8 bits; conditional E-value: 1.9e-08 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld....ekleak 87 L+e + vk+ W + +a++ ++ + ++ Pa+++ F k+ s + ++++++++H+ kv + + +a +l+ +a+ sp|P02240|LGB2_LUPLU 4 LTESQAALVKSSWEEFNANIPKHTHRFFILVLEIAPAAKDLFSFLKGTS--EVPQNNPELQAHAGKVFKLVYEAAIQLQvtgvVVTDAT 90 8999999***********************************8776654..5668899***********9998887775332235789* PP globins4 88 lkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvaklla 145 lk+L H +k v +f ++ e++++++++ +++++ + ++a + + +a++++ sp|P02240|LGB2_LUPLU 91 LKNLGSVHVSKG-VADAHFPVVKEAILKTIKEVVGAKWSEELNSAWTIAYDELAIVIK 147 *********996.666789************999999999999888777777766665 PP >> sp|O48668|LGB2_PEA Leghemoglobin Lb5-10 OS=Pisum sativum PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 30.4 0.1 2.5e-08 1.2e-05 6 146 .. 6 144 .. 2 147 .] 0.82 Alignments for each domain: == domain 1 score: 30.4 bits; conditional E-value: 2.5e-08 globins4 6 aektkvkavWakveadveesGadiL..vrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl..dekleaklkdLs 92 ++ v++ W + + sG+ iL + ++ Pa++ F F L+ + ++ s+++++H+++v + + d a+l ++++ ++L sp|O48668|LGB2_PEA 6 KQEALVNSSWESF--KQNLSGNSILfyTIILEKAPAAKGLFS-F--LKDTAGVEDSPKLQAHAEQVFGLVRDSAAQLrtKGEVVLGNATLG 91 5566788999988..5555677777224578899****9996.5..677789*************************433555555689** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllas 146 H ++ dp+ f ++ e+l++++++ +++++ + ++a e + + +a+++++ sp|O48668|LGB2_PEA 92 AIHVQRGVTDPH-FVVVKEALLQTIKKASGNNWSEELNTAWEVAYDGLATAIKK 144 *****9999986.7899***********************99999999998876 PP >> sp|Q94FT7|HBL4_ORYSJ Non-symbiotic hemoglobin 4 OS=Oryza sativa subsp. japonica GN=HB4 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 30.3 0.3 2.7e-08 1.3e-05 3 140 .. 13 153 .. 11 162 .. 0.79 Alignments for each domain: == domain 1 score: 30.3 bits; conditional E-value: 2.7e-08 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekl...ea 86 +e++ v++ Wa ++ d ++ G ++f + P +++ F ++ + l+k++++kkH+ v +a a+l + +++ ++ sp|Q94FT7|HBL4_ORYSJ 13 FTEEQEALVLKSWAIMKDDSANIGHRFFLKIFEVAPSARHLFSFLRN--SDVPLEKNPNLKKHAMAVFVMTCEAAAQLrKtGRVtvrDT 99 67889999**********************************75533..35679**************999999999954444312256 PP globins4 87 klkdLselHakklkvdpkyfkllsevlvdvlaarlpke.ftadvqaaleKllalv 140 ++k L H k v +f++ +l+++++ + p+ ++++++ a + + + sp|Q94FT7|HBL4_ORYSJ 100 TIKRLGSTHFK-NGVSDTHFEVARFALLETIKDGIPASmWSPEMKNAWGEAYEHL 153 78888888875.4688899************999998624666666555444444 PP >> sp|Q94FT8|HBL3_ORYSJ Non-symbiotic hemoglobin 3 OS=Oryza sativa subsp. japonica GN=HB3 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 30.1 0.7 3e-08 1.5e-05 3 140 .. 16 156 .. 14 165 .. 0.79 Alignments for each domain: == domain 1 score: 30.1 bits; conditional E-value: 3e-08 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekl...ea 86 +e++ v++ Wa ++ d + G ++f + P +++ F ++ + l+k++++k H+ v +a a+l + +++ ++ sp|Q94FT8|HBL3_ORYSJ 16 FTEEQEALVLKSWAIMKNDSAHIGHRFFLKIFEVAPSARQLFSFLRN--SDVPLEKNPKLKIHAMAVFVMTCEAAAQLrKtGRVtvrDT 102 67889999**********************************75543..35679**************999999999954444412256 PP globins4 87 klkdLselHakklkvdpkyfkllsevlvdvlaarlpke.ftadvqaaleKllalv 140 ++k L H k v +f++ +l++++++ p+ +++++++a + + + sp|Q94FT8|HBL3_ORYSJ 103 TIKRLGSTHFK-NGVSDAHFEVAKFALLETIKEAVPASmWSPAMKGAWGEAYDHL 156 78888888875.4688899**************9998725677777655544444 PP >> sp|P09187|LGB1_MEDSA Leghemoglobin-1 OS=Medicago sativa PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 30.1 0.7 3e-08 1.5e-05 6 146 .. 6 144 .. 1 146 [. 0.85 Alignments for each domain: == domain 1 score: 30.1 bits; conditional E-value: 3e-08 globins4 6 aektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLs 92 ++ v++ W + + + + + ++ Pa++ F F L+ ++e++ s+++++H++kv + + d +l + + ++L sp|P09187|LGB1_MEDSA 6 KQEALVNSSWEAFKQNLPRYSVFFYTVVLEKAPAAKGLFS-F--LKNSAEVQDSPQLQAHAEKVFGLVRDSAVQLRatGGVVLGDATLG 91 5556788888888888888888888889999999999994.7..89999*********************99999623555555589** PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllas 146 H +k vdp+ f ++ e+l++++++ + +++ + ++a e + + +a+++++ sp|P09187|LGB1_MEDSA 92 AIHVRKGVVDPH-FVVVKEALLKTIKEAAGDKWSEELNTAWEVAYDALATAIKK 144 ***********7.7799********************99999999999888875 PP >> sp|Q9SAZ0|LGB6_PEA Leghemoglobin Lb120-34 OS=Pisum sativum PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 30.3 0.3 2.7e-08 1.3e-05 33 146 .. 32 143 .. 3 146 .] 0.83 Alignments for each domain: == domain 1 score: 30.3 bits; conditional E-value: 2.7e-08 globins4 33 lfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleakl..kdLselHakklkvdpkyfkllsevlvdvlaarl 121 ++k Pa++ +F F L+ ++e+ s+++++H++kv + + d +l e l ++L H +k vdp+ f ++ e+l++++++ sp|Q9SAZ0|LGB6_PEA 32 ILKKAPAAKGMFS-F--LKDSAEVVDSPKLQAHAEKVFGMVHDSAIQLRASGEVVLgdATLGAIHIQKGVVDPH-FVVVKEALLETIKEAS 118 6788899999985.5..77889**********************9999645555553389*************7.7799**********99 PP globins4 122 pkeftadvqaaleKllalvakllas 146 +++++ + +a e + + +a ++++ sp|Q9SAZ0|LGB6_PEA 119 GEKWSEELSTAWEVAYEGLASAIKK 143 9999999999999999888888775 PP >> sp|P14962|LGB3_MEDSA Leghemoglobin-3 OS=Medicago sativa PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 29.9 0.2 3.6e-08 1.8e-05 23 146 .. 20 143 .. 3 145 .. 0.79 Alignments for each domain: == domain 1 score: 29.9 bits; conditional E-value: 3.6e-08 globins4 23 eesGadiL..vrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLselHakklkvdpkyfk 107 ++ G+ +L + ++ Pa++ +F F L+ ++ ++ s++++ H++kv + + d a+l + + ++L H +k vdp+ f sp|P14962|LGB3_MEDSA 20 QNPGNSVLfyTIILEKAPAAKGMFS-F--LKDSAGVQDSPKLQSHAEKVFGMVRDSAAQLRatGGVVLGDATLGAIHIQKGVVDPH-FA 104 4455555521346778899999995.5..77788**************************623555555589*************6.89 PP globins4 108 llsevlvdvlaarlpkeftadvqaaleKllalvakllas 146 ++ e+l++++++ + +++ + ++a e + + +a+++++ sp|P14962|LGB3_MEDSA 105 VVKEALLKTIKEVSGDKWSEELNTAWEVAYDALATAIKK 143 *************99999999999999999988888875 PP >> sp|O80405|LGB3_PEA Leghemoglobin Lb120-1 OS=Pisum sativum PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 30.0 0.3 3.2e-08 1.6e-05 33 146 .. 32 143 .. 3 146 .] 0.85 Alignments for each domain: == domain 1 score: 30.0 bits; conditional E-value: 3.2e-08 globins4 33 lfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLselHakklkvdpkyfkllsevlvdvlaarl 121 ++k Pa++ +F F L+ ++e+ s+++++H++kv + + d +l +++ ++L H +k vdp+ f ++ e+l++++++ sp|O80405|LGB3_PEA 32 ILKKAPAAKGMFS-F--LKDSAEVVDSPKLQAHAEKVFGMVHDSAIQLRasGEVVVGDATLGAIHIQKGVVDPH-FVVVKEALLETIKEAS 118 6788899999985.5..77889*********************9999953477788889**************7.7799**********99 PP globins4 122 pkeftadvqaaleKllalvakllas 146 +++++ + +a e + + +a ++++ sp|O80405|LGB3_PEA 119 GEKWSEELSTAWEVAYEGLASAIKK 143 9999999999999999888888775 PP >> sp|Q7M419|GLBA1_OLIMA Extracellular giant hemoglobin major globin subunit A1 OS=Oligobrachia mashikoi GN=ghbA1 PE=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 29.5 0.0 4.7e-08 2.3e-05 7 121 .. 22 135 .. 16 155 .. 0.82 Alignments for each domain: == domain 1 score: 29.5 bits; conditional E-value: 4.7e-08 globins4 7 ektkvkavWakveadvees...GadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklk 89 e+ vk+ Wa+ + ++e+ d lf ++ F + d+ ++sa +H +v +Al+ + +ld ++a+l+ sp|Q7M419|GLBA1_OLIMA 22 EQILVKTQWAQSYGEAENRaafSRDLFSELFNIQGSSRALFSGVG----VDD-MNSAAFTAHCLRVTGALNRLISQLDqqATINADLA 104 677899999999988876511157999999999999999988773....334.68999*******************85567899*** PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarl 121 +L+++Ha++ ++d +f ++++++ v+ ++l sp|Q7M419|GLBA1_OLIMA 105 HLAGQHASR-NLDASNFAAMGQAVMSVVPTHL 135 *******76.89****************9985 PP >> sp|P15469|GLB3_LAMSP Giant hemoglobin AIII chain OS=Lamellibrachia sp. PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 29.5 0.0 4.6e-08 2.2e-05 8 125 .. 8 125 .. 4 142 .. 0.82 Alignments for each domain: == domain 1 score: 29.5 bits; conditional E-value: 4.6e-08 globins4 8 ktkvkavWakve...adveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdL 91 + kvk Wa+ + d ee G i +++fk P +++ F++ ++ d+++ + ++H+ +vl+ l +a ld + l+++l++L sp|P15469|GLB3_LAMSP 8 RLKVKRQWAEAYgsgNDREEFGHFIWTHVFKDAPSARDLFKRVRG----DNIH-TPAFRAHATRVLGGLDMCIALLDdeGVLNTQLAHL 91 56899999998733257899*******************999954....5666.6789******************6467899****** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpke.f 125 + +H+++ v + ++ + +++ + ++ +++ f sp|P15469|GLB3_LAMSP 92 ASQHSSR-GVSAAQYDVVEHSVMMGVEHEIGQNvF 125 ****865.799999999999999999999887634 PP >> sp|P02221|GLB1_CHITH Globin CTT-I/CTT-IA OS=Chironomus thummi thummi GN=CTT-1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 29.1 0.1 6.1e-08 3e-05 12 142 .. 26 152 .. 17 157 .. 0.73 Alignments for each domain: == domain 1 score: 29.1 bits; conditional E-value: 6.1e-08 globins4 12 kavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl..dekleaklkdLsel.Hak 97 ka W v ++ +diL +fk+ P q+ F +F + d +k+ +d kH+ +v++ +s+++ l d + ++ l++ + ++ sp|P02221|GLB1_CHITH 26 KASWNTV----KNNQVDILYAVFKANPDIQTAFSQFAGK-DLDSIKGTPDFSKHAGRVVGLFSEVMDLLgnDANTPTILAKAKDFgKSH 109 4555555....77889********************664.489*********************9999964455555555444422455 PP globins4 98 klkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvak 142 k + p + + + lv+ l+ +++ ++v+++ +l+ v sp|P02221|GLB1_CHITH 110 KSRASPAQLDNFRKSLVVYLKGA--TKWDSAVESSWAPVLDFVFS 152 66777888887888887777665..66667777777666666655 PP >> sp|Q9SAZ1|LGB4_PEA Leghemoglobin Lb120-8 OS=Pisum sativum PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 29.4 0.2 5.1e-08 2.5e-05 33 146 .. 32 143 .. 3 146 .] 0.83 Alignments for each domain: == domain 1 score: 29.4 bits; conditional E-value: 5.1e-08 globins4 33 lfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleakl..kdLselHakklkvdpkyfkllsevlvdvlaarl 121 ++k Pa++ +F F L+ ++e+ s+++++H++kv + + d +l e l +L H +k +dp+ f ++ e+l+d++++ sp|Q9SAZ1|LGB4_PEA 32 ILKKAPAAKGMFS-F--LKDSAEVVDSPKLQAHAEKVFGMVHDSAIQLRASGEVVLgdVTLGAIHIQKGVIDPH-FVVVKEALLDTIKEAS 118 6788899999985.5..77889**********************999976666666225799***********7.7799***********9 PP globins4 122 pkeftadvqaaleKllalvakllas 146 +++++ + +a e + + +a ++++ sp|Q9SAZ1|LGB4_PEA 119 GEKWSEELSTAWEIAYEGLASAIKK 143 9999999999999999988888875 PP >> sp|Q23760|GLBW_CHITH Globin CTT-W OS=Chironomus thummi thummi GN=CTT-W PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 28.3 0.3 1.1e-07 5.2e-05 11 99 .. 24 108 .. 15 141 .. 0.80 Alignments for each domain: == domain 1 score: 28.3 bits; conditional E-value: 1.1e-07 globins4 11 vkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.dekleaklkdLselHakk 98 +ka W +v + +diL +fk++P+ q+ F++F + +++k+ a+ H+ +++ +s+++ + + +++++ L + a+ sp|Q23760|GLBW_CHITH 24 IKASWNQV----KHNEVDILYTVFKAYPEIQDRFPQFAGKD-LEAIKETAEFAVHSTRIVSFMSEIVSLVgNPAVQSSIDLLLVKMAND 107 78889888....56679********************6544.669**********************9884455555555555555554 PP globins4 99 l 99 + sp|Q23760|GLBW_CHITH 108 H 108 4 PP >> sp|P29244|GLBW_CHITP Globin CTT-W OS=Chironomus thummi piger GN=CTT-W PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 28.3 0.4 1.1e-07 5.3e-05 11 99 .. 24 108 .. 15 142 .. 0.80 Alignments for each domain: == domain 1 score: 28.3 bits; conditional E-value: 1.1e-07 globins4 11 vkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.dekleaklkdLselHakk 98 +ka W +v + +diL +fk++P+ q+ F++F + +++k+ a+ H+ +++ +s+++ + + +++++ L + a+ sp|P29244|GLBW_CHITP 24 IKASWNQV----KHNEVDILYTVFKAYPEIQDRFPQFAGKD-LEAIKETAEFAVHSTRIVSFMSEIVSLVgNPAVQSSIDLLLVKMAND 107 78889888....56679********************6544.669**********************9884455555555555555554 PP globins4 99 l 99 + sp|P29244|GLBW_CHITP 108 H 108 4 PP >> sp|P18980|HBA2_UROHA Hemoglobin subunit alpha-2 (Fragment) OS=Uromastyx hardwickii PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 29.0 0.0 6.5e-08 3.2e-05 18 55 .. 1 38 [. 1 40 [] 0.84 Alignments for each domain: == domain 1 score: 29.0 bits; conditional E-value: 6.5e-08 globins4 18 veadveesGadiLvrlfkstPatqefFekFkdLstede 55 v+ + +++G+++L r f ++P+t+++F++F +++ sp|P18980|HBA2_UROHA 1 VGPHLDDYGGEALHRNFEVYPQTKTYFPHFDASAGSNQ 38 567899************************66555555 PP >> sp|P07803|HBL_TRETO Non-symbiotic hemoglobin OS=Trema tomentosa GN=GLB1 PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 28.3 0.4 1.1e-07 5.5e-05 3 145 .. 10 153 .. 8 158 .. 0.73 Alignments for each domain: == domain 1 score: 28.3 bits; conditional E-value: 1.1e-07 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekl...eak 87 +e++ v + Wa ++ + +e G ++f P +++ F kd + l++++++k H+ +v + +l + +k+ e++ sp|P07803|HBL_TRETO 10 FTEEQEALVVKSWAVMKKNSAELGLKFFLKIFEIAPSAKNLFSYLKDS--PIPLEQNPKLKPHAMTVFVMTCESAVQLrKaGKVtvrESN 97 68889999*************************************985..5889************976665554445345665111556 PP globins4 88 lkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvaklla 145 lk L H k+ v+ ++f+ +l++++++ p+ ++++++ a + + + +++ sp|P07803|HBL_TRETO 98 LKRLGAIHFKNGVVN-EHFET-RFALLETIKEAVPEMWSPEMKNAWGEAYDQLVAAIK 153 666776676555444.44553.346778888888888888877765555554444444 PP >> sp|Q947C5|HBL1_GOSHI Non-symbiotic hemoglobin 1 OS=Gossypium hirsutum GN=HB1 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 28.2 2.0 1.2e-07 5.7e-05 3 144 .. 9 156 .. 7 160 .. 0.76 Alignments for each domain: == domain 1 score: 28.2 bits; conditional E-value: 1.2e-07 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekl...ea 86 +e++ v + W+ ++ + +e G ++f P +++ F +d + l+++ ++k H+ v + +l + +k+ e+ sp|Q947C5|HBL1_GOSHI 9 FTEEQEALVVKSWTVMKKKTAELGLKFFLKIFEIAPSAKKLFSFLRDSN--VPLEQNTKLKPHAMSVFVMTCESAVQLrKaGKVtvrES 95 68889999**********************************9887765..7899**********997665555444434566511156 PP globins4 87 klkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqa....aleKllalvakll 144 +lk+L H k + v ++f++ +l++++++ p ++ +++ a+++l+a +++ + sp|Q947C5|HBL1_GOSHI 96 NLKKLGATHFK-YGVVDEHFEVTKFALLETIKEAVPDMWSDEMKNawgeAYDRLVAAIKIEM 156 67777777764.4466689**********999999877666655411126788888887766 PP >> sp|P41260|GLB1_PHAPT Hemoglobin-1 OS=Phacoides pectinatus PE=1 SV=4 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 28.3 0.2 1.1e-07 5.3e-05 2 96 .. 2 98 .. 1 136 [. 0.86 Alignments for each domain: == domain 1 score: 28.3 bits; conditional E-value: 1.1e-07 globins4 2 vLseaektkvkavWakveadveesGadiLvrlfkstPatqefFek.FkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklk 89 Ls+a+k +vk+ Wak a ++ G + + lf ++ +F Fk+ ++ +k+ +++ + ++ + +s+ + +ld + le++ k sp|P41260|GLB1_PHAPT 2 SLSAAQKDNVKSSWAKASAAWGTAGPEFFMALFDAHDDVFAKFSGlFKG-AAKGTVKNTPEMAAQAQSFKGLVSNWVDNLDnaGALEGQCK 91 69*********************************99887777652544.45889*************************86788999999 PP globins4 90 dLselHa 96 + + +H sp|P41260|GLB1_PHAPT 92 TFAANHK 98 9999985 PP >> sp|Q7M418|GLBB2_OLIMA Extracellular giant hemoglobin major globin subunit B2 OS=Oligobrachia mashikoi GN=ghbB2 PE=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 27.8 0.1 1.5e-07 7.4e-05 6 119 .. 23 138 .. 19 161 .. 0.72 Alignments for each domain: == domain 1 score: 27.8 bits; conditional E-value: 1.5e-07 globins4 6 aektkvkavW....akveadvee.sGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.eklea 86 +++ +v + W + ++d + + lf a+q F ++s ++ sad ++H ++v++ l a++ l d l+ sp|Q7M418|GLBB2_OLIMA 23 EDRANVMHNWdaawSAAYSDRRVaLAQAVFASLFSRDAAAQGLFS---GVS--ADNPDSADFRAHCVRVVNGLDVAINMLnDpAVLNE 105 566666554410004444444321344555566666666666655...445..55679**********************7678899* PP globins4 87 klkdLselHakklkvdpkyfkllsevlvdvlaa 119 +l++Ls +H + v +f +++e+ ++v+ + sp|Q7M418|GLBB2_OLIMA 106 QLAHLSAQHQARAGVAAAHFDVMAEAFAEVMPQ 138 ***************************999865 PP >> sp|P02218|GLB2_LUMTE Extracellular globin-2 OS=Lumbricus terrestris PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 27.5 0.0 2e-07 9.5e-05 10 128 .. 11 128 .. 6 142 .. 0.82 Alignments for each domain: == domain 1 score: 27.5 bits; conditional E-value: 2e-07 globins4 10 kvkavWakvea...dveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLse 93 kvk+ W++ + d e + i f P+++ F++ ++ + + +H+++vl+ l a+ ld l+ +l +L sp|P02218|GLB2_LUMTE 11 KVKSEWGRAYGsghDREAFSQAIWRATFAQVPESRSLFKRVHGDD-----TSHPAFIAHAERVLGGLDIAISTLDqpATLKEELDHLQV 94 799999998752224566777888889**********99995555.....4567889*****************8677999******99 PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftad 128 +H k++ +yf + ++++v+aa+l++ + + sp|P02218|GLB2_LUMTE 95 QHE-GRKIPDNYFDAFKTAILHVVAAQLGRCYDRE 128 995.579********************99877654 PP >> sp|P41262|GLB3_PHAPT Hemoglobin-3 OS=Phacoides pectinatus PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 27.6 0.0 1.8e-07 8.8e-05 3 108 .. 5 111 .. 3 145 .. 0.79 Alignments for each domain: == domain 1 score: 27.6 bits; conditional E-value: 1.8e-07 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFek.FkdLstedelkksadvkkHgkkvldAlsdalakld..ekleakl 88 L+ +k ++k+ W++ ++ + G++ + lfk++P t++ F++ F+d+s +++ + +k+ + d +s + +ld e l l sp|P41262|GLB3_PHAPT 5 LTGPQKAALKSSWSRFMDNAVTNGTNFYMDLFKAYPDTLTPFKSlFEDVS-FNQMTDHPTMKAQALVFCDGMSSFVDNLDdhEVLVVLL 92 6667899***********************************97588888.99**************************7344456778 PP globins4 89 kdLselHakklkvdpkyfkl 108 +++++lH ++ + +k ++ sp|P41262|GLB3_PHAPT 93 QKMAKLHFNR-GIRIKELRD 111 9999999765.455555555 PP >> sp|O48665|LGB5_PEA Leghemoglobin Lb120-29 OS=Pisum sativum PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 27.5 0.2 2e-07 9.7e-05 32 146 .. 31 143 .. 3 146 .] 0.82 Alignments for each domain: == domain 1 score: 27.5 bits; conditional E-value: 2e-07 globins4 32 rlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLselHakklkvdpkyfkllsevlvdvlaar 120 ++k Pat+ +F F L+ ++ + s+++++H++kv + + d +l +++ ++L H +k vd +f ++ e+l++++++ sp|O48665|LGB5_PEA 31 IILKKAPATKGMFS-F--LKDSAGVVDSPKLQAHAEKVFGMVHDSAVQLRvsGEVVLGDATLGAIHIQKGVVDS-HFVVVKEALLETIKEA 117 478899****9995.6..77788*********************99998623666666689*********9997.5889***********9 PP globins4 121 lpkeftadvqaaleKllalvakllas 146 +++++ + +a e + + +a ++++ sp|O48665|LGB5_PEA 118 SGEKWSEELSTAWEVAYEGLASAIKK 143 99999999999999998888888765 PP >> sp|P02233|LGB1_PEA Leghemoglobin-1 OS=Pisum sativum PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 27.0 0.1 2.7e-07 0.00013 35 147 .. 34 144 .. 17 146 .. 0.84 Alignments for each domain: == domain 1 score: 27.0 bits; conditional E-value: 2.7e-07 globins4 35 kstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl..dekleaklkdLselHakklkvdpkyfkllsevlvdvlaarlpk 123 Pa++ F F L+ + ++ s+++++H+++v + + d a+l ++++ ++L H +k +p +f ++ e+l++++++ ++ sp|P02233|LGB1_PEA 34 EKAPAAKGLFS-F--LKDTAGVEDSPKLQAHAEQVFGLVRDSAAQLrtKGEVVLGNATLGAIHVQKGVTNP-HFVVVKEALLQTIKKASGN 120 56788888875.4..777789*************************433555555689*******976655.6889*************** PP globins4 124 eftadvqaaleKllalvakllask 147 +++ + ++a e + + +a++++++ sp|P02233|LGB1_PEA 121 NWSEELNTAWEVAYDGLATAIKKA 144 ***********9999999998876 PP >> sp|P85313|HBBB_CATCL Hemoglobin subunit beta-B (Fragment) OS=Catostomus clarkii GN=hbbb PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 27.0 0.0 2.7e-07 0.00013 4 50 .. 4 48 .] 1 48 [] 0.95 Alignments for each domain: == domain 1 score: 27.0 bits; conditional E-value: 2.7e-07 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdL 50 ++ae+ +++++W+k+ d +e G L r +++ tq++F +F+dL sp|P85313|HBBB_CATCL 4 TDAERGAILSLWGKI--DPDELGPALLARXXLVYXXTQRYFASFGDL 48 789************..99**************************98 PP >> sp|P26914|GLB_PSEDC Extracellular globin OS=Pseudoterranova decipiens PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 16.8 0.2 0.00038 0.19 16 102 .. 32 122 .. 23 165 .. 0.79 2 ? 11.9 0.8 0.013 6.1 21 97 .. 188 265 .. 184 310 .. 0.77 Alignments for each domain: == domain 1 score: 16.8 bits; conditional E-value: 0.00038 globins4 16 akvea..dveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLselHakkl.k 100 akv++ ++++ G d ++f +Pa +++F++ + t+++++k + k g+++l A a d e ++a + +L +H + + k sp|P26914|GLB_PSEDC 32 AKVGTskEAKQDGIDLYKHMFEHYPAMKKYFKHRE-NYTPADVQKDPFFIKQGQNILLACHVLCATYDdrETFDAYVGELMARHERDHvK 120 555541156788*******************9985.5669*******************9999999954677788888888888654325 PP globins4 101 vd 102 ++ sp|P26914|GLB_PSEDC 121 IP 122 55 PP == domain 2 score: 11.9 bits; conditional E-value: 0.013 globins4 21 dveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLselHak 97 + ++ G d ++f +P+ ++ F+ ++ + +++++k a k g+k+l Al + d ++ + +L ++H k sp|P26914|GLB_PSEDC 188 HQKQNGIDLYKHMFEHYPHMRKAFKGRENFT-KEDVQKDAFFVKQGHKILLALRMLCSSYDdePTFDYFVDALMDRHIK 265 56789*******************9887765.8889999999999*********9999996323455566788888875 PP >> sp|P42511|LGB_CANLI Leghemoglobin OS=Canavalia lineata PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 26.2 1.8 4.8e-07 0.00023 4 144 .. 5 146 .. 3 149 .] 0.79 Alignments for each domain: == domain 1 score: 26.2 bits; conditional E-value: 4.8e-07 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk..dL 91 se++ + vk+ W + +v + a + ++ Pa+q++F F Ls + +++++k+H++kv + d +l k e l+ +L sp|P42511|LGB_CANLI 5 SEKQESLVKSSWEAFKQNVPHHSAVFYTLILEKAPAAQNMFS-F--LS-NGVDPNNPKLKAHAEKVFKMTVDSAVQLRAKGEVVLAdpTL 90 888999******************999*************96.6..66.34446899**********9988888888666666665227* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlp....keftadvqaaleKllalvakll 144 H +k +dp+++ ++ e+l+++ ++ + e++ + + a++ l a ++k++ sp|P42511|LGB_CANLI 91 GSVHVQKGVLDPHFL-VVKEALLKTFKEAVGdkwnDELGNAWEVAYDELAAAIKKAM 146 ************866.78899998877655511116677777777777777777766 PP >> sp|P83122|GLB1_PHEHI Extracellular globin-1 OS=Pheretima hilgendorfi PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 26.1 0.1 5.4e-07 0.00026 7 127 .. 6 124 .. 4 138 .. 0.84 Alignments for each domain: == domain 1 score: 26.1 bits; conditional E-value: 5.4e-07 globins4 7 ektkvkavWakv..eadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdL 91 e+ kvk+ W v ea+ e ++ +P e F + ++ + s++ ++Hg +vl l ++ ld l +l++L sp|P83122|GLB1_PHEHI 6 ERFKVKHQWQTVfsEAHRTEFSLHFWKEFLHDHPSLVELFTRVNGAN-----IYSPEFQAHGIRVLAGLDSVIGVLDeiPTLTVQLAHL 89 6779********434556678889999***************97766.....78*********************99444788899999 PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkefta 127 +H+++ p+yf l+++ l+ l +l+++f sp|P83122|GLB1_PHEHI 90 KAQHTER-GTKPEYFDLFGKHLASHLGDELGTHFDY 124 9999876.579*********9999999998888864 PP >> sp|Q941P9|HBL2_SOLLC Non-symbiotic hemoglobin 2 OS=Solanum lycopersicum GN=HB2 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 26.1 0.3 5.4e-07 0.00026 7 146 .. 7 148 .. 2 151 .. 0.79 Alignments for each domain: == domain 1 score: 26.1 bits; conditional E-value: 5.4e-07 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedel.kksadvkkHgkkvldAlsdalakl..dekl...eaklk 89 + v+ W ++ d+ + ++ P ++++F F L+ +del ++++++++H++kv + + +l ++++ e++lk sp|Q941P9|HBL2_SOLLC 7 QEALVRDSWEFMKQDIPQLSLRFFSLILEIAPVAKNMFS-F--LKDSDELpENNPKLRAHAVKVFKMTCESAIQLreKGEVvvgETTLK 92 5566777788787788888888888889999****9996.5..677788835689**********9998888888323443344789** PP globins4 90 dLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllas 146 L H +k dp +f+++ e+l+ ++++ ++++ +++ a + + +a ++++ sp|Q941P9|HBL2_SOLLC 93 YLGSIHLQKRVADP-HFEVVKEALLRTVKEATGNKWKDEMKEAWSEAYDQLASAIKA 148 ********977776.69**************99999999999988888888877766 PP >> sp|P27992|LGB1_MEDTR Leghemoglobin 1 OS=Medicago truncatula GN=LB1 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 26.1 0.2 5.2e-07 0.00025 32 145 .. 32 143 .. 2 146 .. 0.80 Alignments for each domain: == domain 1 score: 26.1 bits; conditional E-value: 5.2e-07 globins4 32 rlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLselHakklkvdpkyfkllsevlvdvla 118 ++ Pa++ F F L+ ++ ++ s+++++H++kv + + d +l + + ++L H +k vdp+ f ++ e+l+++++ sp|P27992|LGB1_MEDTR 32 VILEKAPAAKGLFS-F--LKDSAGVQDSPQLQAHAEKVFGLVRDSASQLRatGGVVLGDAALGAIHIQKGVVDPH-FVVVKEALLKTIK 116 56777888988885.5..77788**************************6234555555889************7.7799********* PP globins4 119 arlpkeftadvqaaleKllalvaklla 145 + + +++ + +a e + + +a+ ++ sp|P27992|LGB1_MEDTR 117 EAAGDKWSEELSTAWEVAYDALATEIK 143 *99999999999999988888887776 PP >> sp|P80592|GLBB_RIFPA Giant hemoglobins B chain OS=Riftia pachyptila PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 25.9 0.0 6.1e-07 0.0003 8 123 .. 9 123 .. 3 141 .. 0.81 Alignments for each domain: == domain 1 score: 25.9 bits; conditional E-value: 6.1e-07 globins4 8 ktkvkavWakvea...dveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdL 91 + kvk Wa+ + ee G i ++f+ Pa++++F++ ++ d+++ + ++H+ +vl+ l +a ld l+++l++L sp|P80592|GLBB_RIFPA 9 RLKVKRQWAEAYGsgnSREEFGHFIWSHVFQHSPAARDMFKRVRG----DNIH-TPAFRAHATRVLGGLDMCIALLDdePVLNTQLAHL 92 668999999987522257899******************999954....5666.6789******************733358999**** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpk 123 +++H ++ v+ ++ + +++++ + + ++ sp|P80592|GLBB_RIFPA 93 AKQHETR-GVEAAHYDTVNHAVMMGVENVIGS 123 ****775.688888888888777776666555 PP >> sp|P27993|LGB2_MEDTR Leghemoglobin 2 OS=Medicago truncatula GN=LB2 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 25.7 0.2 7.1e-07 0.00034 33 145 .. 32 142 .. 3 145 .. 0.76 Alignments for each domain: == domain 1 score: 25.7 bits; conditional E-value: 7.1e-07 globins4 33 lfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLselHakklkvdpkyfkllsevlvdvlaa 119 ++ Pa++ +F F L+ + ++ s++++ H++kv + + d +l + + ++L H +k vdp+ f ++ e+l++++++ sp|P27993|LGB2_MEDTR 32 ILEKAPAAKGMFS-F--LKDTAGVQDSPKLQSHAEKVFGMVRDSAVQLRatGGVVLGDATLGAIHIQKGVVDPH-FVVVKEALLKTIKE 116 5677899999995.5..67778*********************99999623555555589*************7.67999*******99 PP globins4 120 rlpkeftadvqaaleKllalvaklla 145 + +++ + +a e + + +a +++ sp|P27993|LGB2_MEDTR 117 VSGDKWSEELSTAWEVAYDALAAAIK 142 88888888888877777766666665 PP >> sp|P11740|GLB1_PHESE Extracellular globin-1 OS=Pheretima sieboldi PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 25.4 0.1 8.9e-07 0.00043 10 128 .. 9 126 .. 4 139 .. 0.80 Alignments for each domain: == domain 1 score: 25.4 bits; conditional E-value: 8.9e-07 globins4 10 kvkavWakvea...dveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLse 93 kvk+ W +v + + e ++ +P F++ ++ e s++ ++Hg +vl l ++ ld + + +l++L sp|P11740|GLB1_PHESE 9 KVKHQWQQVFSgehHRTEFSLHFWKEFLHDHPDLVSLFKRVQG-----ENIYSPEFQAHGIRVLAGLDSVIGVLDedDTFTVQLAHLKA 92 7999999996522244555566667888889988888888844.....44789*****************999963367889999**** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftad 128 +H+++ p+yf l++ l d+l +l+++f + sp|P11740|GLB1_PHESE 93 QHTER-GTKPEYFDLFGTQLFDILGDKLGTHFDQA 126 *9987.579*********************99755 PP >> sp|Q9FEP8|LGB_LOTJA Leghemoglobin OS=Lotus japonicus PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 25.5 0.3 8.3e-07 0.0004 34 146 .. 34 144 .. 8 146 .. 0.79 Alignments for each domain: == domain 1 score: 25.5 bits; conditional E-value: 8.3e-07 globins4 34 fkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl..dekleaklkdLselHakklkvdpkyfkllsevlvdvlaarl 121 + P+++++F F L+ e k s+++++H++kv da +l ++++ + ++L H +k dp+ f ++ e+l++++++ sp|Q9FEP8|LGB_LOTJA 34 LEIAPTAKDMFS-F--LK-ESGPKHSPQLQAHAEKVFALTRDAATQLvaKGEVTLADASLGAVHVQKAVTDPH-FVVVKEALLQTVKEAV 118 566788888885.4..56.67789*************9999999998433455555567889*****999996.77999*******9988 PP globins4 122 pk.eftadvqaaleKllalvakllas 146 ++ e++ d +a e + + +a+++++ sp|Q9FEP8|LGB_LOTJA 119 GAdEWSDDLSTAWEGAYDGLATAIKK 144 76257888888888887777777765 PP >> sp|P93849|LGB3_VICFA Leghemoglobin 49 OS=Vicia faba PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 25.4 0.1 8.5e-07 0.00041 33 146 .. 32 143 .. 3 145 .. 0.81 Alignments for each domain: == domain 1 score: 25.4 bits; conditional E-value: 8.5e-07 globins4 33 lfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklk..dLselHakklkvdpkyfkllsevlvdvlaa 119 ++ Pa++ +F F L+ ++ + s+++++H+++v + + d +l+ e lk +L H +k vdp+ f ++ e+l++++++ sp|P93849|LGB3_VICFA 32 ILEKAPAAKGMFS-F--LKDSAGVVDSPKLQAHAEQVFGMVRDSAIQLQATGEVVLKngSLGAIHIQKGVVDPH-FVVVKEALLKTIKE 116 5667888988885.5..77788**********************999975555555522799***********7.7799*********9 PP globins4 120 rlpkeftadvqaaleKllalvakllas 146 + +++ + a e + + +a+++++ sp|P93849|LGB3_VICFA 117 ASGDKWSEELSIAWEVAYDGLATAIKK 143 999999999998888888888877765 PP >> sp|P02231|GLBT_CHITH Globin CTT-IIIA OS=Chironomus thummi thummi PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 24.3 0.0 1.9e-06 0.00091 4 117 .. 10 119 .. 8 147 .. 0.75 Alignments for each domain: == domain 1 score: 24.3 bits; conditional E-value: 1.9e-06 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLste.delkksadvkkHgkkvldAlsdalakl..d.ekleakl 88 ++a+ +vk W k+ ++sG++iL ++ +P F+ Fk+L + ++ k+ a+ k + k++ l+ ++ kl d + +a l sp|P02231|GLBT_CHITH 10 TDAQVAAVKGDWEKI----KGSGVEILYFFLNKFPGN---FPMFKKLGNDlAAAKGTAEFKDQADKIIAFLQGVIEKLgsDmGGAKALL 91 667778889999998....99**************85...777777764426889***********************64455667778 PP globins4 89 kdLselHakklkvdpkyfkllsevlvdvl 117 ++L +H k + + f + ++l + l sp|P02231|GLBT_CHITH 92 NQLGTSH-KAMGITKDQFDQFRQALTELL 119 8888888.445566666666666665555 PP >> sp|P10816|LGB3_SESRO Leghemoglobin 3 OS=Sesbania rostrata GN=GLB3 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 24.6 0.2 1.5e-06 0.00075 33 146 .. 33 145 .. 4 148 .] 0.80 Alignments for each domain: == domain 1 score: 24.6 bits; conditional E-value: 1.5e-06 globins4 33 lfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLselHakklkvdpkyfkllsevlvdvlaa 119 ++ Pa++ +F kd + ++++ +++H++kv + + d a+l + + + ++L H +k +dp+ f ++ e+l+++l++ sp|P10816|LGB3_SESRO 33 ILEKAPAAKGMFSFLKDFD--EVPQNNPSLQAHAEKVFGLVRDSAAQLRatGVVVLADASLGSVHVQKGVLDPH-FVVVKEALLKTLKE 118 4567899999998777776..4447889********************723445555567999*********96.7799*********9 PP globins4 120 rlpkeftadvqaaleKllalvakllas 146 ++ ++ +v a e + + ++ ++++ sp|P10816|LGB3_SESRO 119 AGGATWSDEVSNAWEVAYDELSAAIKK 145 999999999999988887777777665 PP >> sp|P14848|LGB2_SESRO Leghemoglobin 2 OS=Sesbania rostrata GN=GLB2 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 24.2 0.2 2.1e-06 0.001 34 146 .. 34 145 .. 4 147 .. 0.80 Alignments for each domain: == domain 1 score: 24.2 bits; conditional E-value: 2.1e-06 globins4 34 fkstPatqefFekFkdLstedel.kksadvkkHgkkvldAlsdalakld..ekleaklkdLselHakklkvdpkyfkllsevlvdvlaa 119 + Pa++ +F L+ +d + ++++ +++H++kv + + d a+l + + + ++L H +k +dp+ f ++ e+l+++l++ sp|P14848|LGB2_SESRO 34 LEKAPAAKGMFSF---LKDSDGVpQNNPSLQAHAEKVFGLVRDSAAQLRatGVVVLADASLGSVHVQKGVLDPH-FVVVKEALLKTLKE 118 5567888888864...5555666367899*******************723445555567999*********96.7799********** PP globins4 120 rlpkeftadvqaaleKllalvakllas 146 ++ ++ +v a e + + ++ ++++ sp|P14848|LGB2_SESRO 119 AAGATWSDEVSNAWEVAYDGLSAAIKK 145 ***********9999998888887765 PP >> sp|P80721|GLB_PAREP Globin-3 OS=Paramphistomum epiclitum PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 23.8 1.0 2.7e-06 0.0013 20 143 .. 23 143 .. 2 147 .. 0.73 Alignments for each domain: == domain 1 score: 23.8 bits; conditional E-value: 2.7e-06 globins4 20 adveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleaklkdLselHakklkvdpkyfkl 108 a++ e+G + lf+++P+ +F + + +t +++++s+ +k++++++ +A+ +l+++ + +k+++ ++ ++ kv f + sp|P80721|GLB_PAREP 23 AHIVETGLGAYHALFTAHPQYIIHFSRLE-GHTIENVMQSEGIKHYARTLTEAIVHMLKEISnDAEVKKIAAQYGKDHTSRKVTKDEF-M 110 788899**********************5.567999************************9613333344444444455567776666.3 PP globins4 109 lsevlvdvlaarlpkeftadvqaaleKllalvakl 143 +e + + ++l k+ a+ +aa+eK+l+ v + sp|P80721|GLB_PAREP 111 SGEPIFTKYFQNLVKD--AEGKAAVEKFLKHVFPM 143 4556666555665555..55677777777776655 PP >> sp|P80722|GLB_ISOHY Globin OS=Isoparorchis hypselobagri PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 23.7 0.1 3e-06 0.0014 21 143 .. 24 144 .. 2 148 .. 0.82 Alignments for each domain: == domain 1 score: 23.7 bits; conditional E-value: 3e-06 globins4 21 dveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkdLselHakklkvdpkyfkl 108 + e G + + lf ++P+ ++F + ++ t++++++ + k ++k++++ l + l+ d l+++++ + + k +v f+ sp|P80722|GLB_ISOHY 24 HRMELGLGAYTELFAAHPEYIKKFSRLQE-ATPANVMAQDGAKYYAKTLINDLVELLKAStDeATLNTAIARTATKDHKPRNVSGAEFQT 112 45678999999****************65.67*************************986564567777888888888888899999998 PP globins4 109 lsevlvdvlaarlpkeftadvqaaleKllalvakl 143 + ++ + t++ qa +eKll + + sp|P80722|GLB_ISOHY 113 GEPIFIKYFSHV---LTTPANQAFMEKLLTKIFTG 144 777778777777...45899999999999988765 PP >> sp|P09966|GLB2_TYLHE Extracellular globin-2A OS=Tylorrhynchus heterochaetus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 23.7 0.0 2.8e-06 0.0014 8 132 .. 10 133 .. 4 140 .. 0.78 Alignments for each domain: == domain 1 score: 23.7 bits; conditional E-value: 2.8e-06 globins4 8 ktkvkavWakvea...dveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekleaklkdL 91 + kvk+ Wak + + e G +f +++ F++ + ed s+ +H +v + l ++ +l d l+a+l++L sp|P09966|GLB2_TYLHE 10 RLKVKQQWAKAYGvghERVELGIALWKSMFAQDNDARDLFKRV---HGED--VHSPAFEAHMARVFNGLDRVISSLtDePVLNAQLEHL 93 6789******754111344455555555665555555555555...5444..57999*******************87456899***** PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaa 132 ++H kl + + f+l+ l+ vl a+l++ f ++ aa sp|P09966|GLB2_TYLHE 94 RQQHI-KLGITGHMFNLMRTGLAYVLPAQLGRCFDKEAWAA 133 ****7.79************************999988776 PP >> sp|P02229|GLB3_CHITH Globin CTT-III OS=Chironomus thummi thummi GN=A PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.7 0.1 5.7e-06 0.0028 3 125 .. 16 129 .. 13 151 .] 0.76 Alignments for each domain: == domain 1 score: 22.7 bits; conditional E-value: 5.7e-06 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+++ ++v+a + kv ++ + iL +fk+ P +F +F + + +k+ a H++++++ +s+++ +l ++ea++++ sp|P02229|GLB3_CHITH 16 LSADQISTVQASFDKV----KGDPVGILYAVFKADPSIMAKFTQFAGKD-LESIKGTAPFEIHANRIVGFFSKIIGELP-NIEADVNTF 98 8888888999999998....5556679******************6544.679************************98.999999999 PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkef 125 +H + v ++ + + v ++a+ ++f sp|P02229|GLB3_CHITH 99 VASHKPR-GVTHDQLNNFRAGFVSYMKAH--TDF 129 9999544.444455555555555555555..444 PP >> sp|P02234|LGBA_PHAVU Leghemoglobin A OS=Phaseolus vulgaris PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.9 0.6 5.1e-06 0.0025 4 148 .. 5 145 .. 3 146 .] 0.88 Alignments for each domain: == domain 1 score: 22.9 bits; conditional E-value: 5.1e-06 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleaklkdL 91 +e++ v++ W + ++ ++ + + ++ Pa+++ F + ++++ +H++ + + + d a+l + + ++L sp|P02234|LGBA_PHAVU 5 TEKQEALVNSSWEAFKGNIPQYSVVFYTSILEKAPAAKNLFSFL---A-NGVDPTNPKLTAHAESLFGLVRDSAAQLRaNGAVVADAAL 89 56677889999****************************99644...3.3334689*********************635566677899 PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 H++k v f ++ e+l+++l++ + ++t + +ale + + +a +++++Y sp|P02234|LGBA_PHAVU 90 GSIHSQK-GVSNDQFLVVKEALLKTLKQAVGDKWTDQLSTALELAYDELAAAIKKAY 145 9***998.6999999**************************************9999 PP >> sp|P22431|GLB3_CHITP Globin CTP-III OS=Chironomus thummi piger PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 23.0 0.0 4.8e-06 0.0023 3 125 .. 1 114 [. 1 136 [] 0.75 Alignments for each domain: == domain 1 score: 23.0 bits; conditional E-value: 4.8e-06 globins4 3 LseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL 91 Ls+++ ++v+a + kv ++ + iL +fk+ P +F +F + + +k+ a +H++++++ +s+++ +l ++ea++++ sp|P22431|GLB3_CHITP 1 LSADQISTVQASFDKV----KGDPVGILYAVFKADPSIMAKFTQFAGKD-LESIKGTAPFETHANRIVGFFSKIIGELP-NIEADVNTF 83 6777777888888888....5556679******************6544.679************************98.999999999 PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkef 125 +H + v ++ + + v ++a+ ++f sp|P22431|GLB3_CHITP 84 VASHKPR-GVTHDQLNNFRAGFVSYMKAH--TDF 114 9999544.455555555555555555555..455 PP >> sp|P85312|HBBA_CATCL Hemoglobin subunit beta-A (Fragment) OS=Catostomus clarkii GN=hbba PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.9 0.0 5e-06 0.0024 4 44 .. 4 42 .] 1 42 [] 0.95 Alignments for each domain: == domain 1 score: 22.9 bits; conditional E-value: 5e-06 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefF 44 ++ae+++++++W+k+ d +e G L rl ++ tq++F sp|P85312|HBBA_CATCL 4 TDAERSAILSLWGKI--DTDELGPALLARLXLVXXXTQRYF 42 799************..99*********************9 PP >> sp|P27199|LGB_PSOTE Leghemoglobin OS=Psophocarpus tetragonolobus PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.6 0.6 6.1e-06 0.003 5 147 .. 6 144 .. 3 145 .] 0.84 Alignments for each domain: == domain 1 score: 22.6 bits; conditional E-value: 6.1e-06 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleaklkdLse 93 e++ v++ + +a+v ++ + + ++ Pa+++ F+ + ++++ H++k+ + + d a+l + + ++L sp|P27199|LGB_PSOTE 6 EKQEALVNSSYEAFKANVPQYSVVFYTSILEKAPAAKDLFPFLA----NGVDPTNPKLIGHAEKLFGLVHDSAAQLRaKGAVVADAALGS 91 55667788888889999999999999999999*******99663....3334689*********************63455566789*** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllask 147 lHa+k dp+ f ++ e+l++++++ + +++ + a e + + +a +l+++ sp|P27199|LGB_PSOTE 92 LHAQKGVTDPQ-FVVVKEALLKTVKEAVGDKWSDELSNAWEVAYNELAAALKKA 144 ******99998.6799**********9999999999999988888888877765 PP >> sp|P18202|GLB_TUBTU Globin, extracellular monomeric OS=Tubifex tubifex PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.5 0.0 6.7e-06 0.0033 9 122 .. 8 120 .. 3 131 .. 0.81 Alignments for each domain: == domain 1 score: 22.5 bits; conditional E-value: 6.7e-06 globins4 9 tkvkavWakveadve...esGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLse 93 kvk+ Wa+ + + + G +f P+ + F++ + + sa+ +H+++vl+ l ++ ld ++a+l++L sp|P18202|GLB_TUBTU 8 FKVKHQWAEAFGTSHhrlDFGLKLWNSIFRDAPEIRGLFKRVDGDN-----AYSAEFEAHAERVLGGLDMTISLLDdqAAFDAQLAHLKS 92 5899999997654431126788999999999999999999985444.....789*********************63567899******* PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlp 122 +Ha++ ++ y+ ++ + l+ vl l+ sp|P18202|GLB_TUBTU 93 QHAER-NIKADYYGVFVNELLAVLPDYLG 120 ***97.79999999999999999977665 PP >> sp|O04939|LGB2_PHAVU Leghemoglobin OS=Phaseolus vulgaris PE=2 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 22.5 0.5 6.9e-06 0.0034 4 148 .. 5 145 .. 3 146 .] 0.87 Alignments for each domain: == domain 1 score: 22.5 bits; conditional E-value: 6.9e-06 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleaklkdL 91 +e++ v++ W + ++ ++ + + ++ Pa+++ F + ++++ +H++ + + + d a+l + + ++L sp|O04939|LGB2_PHAVU 5 TEKQEALVNSSWEAFKGNIPQYSVVFYTSILEKAPAAKNLFSFL---A-NGVDPTNPKLTAHAESLFGLVRDSAAQLRaNGAVVADAAL 89 56677889999****************************99644...3.3334689*********************63556667789* PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 H++k d + f ++ e+l+++l++ + ++t + +ale + + +a ++++Y sp|O04939|LGB2_PHAVU 90 GSIHSQKALNDSQ-FLVVKEALLKTLKEAVGDKWTDELSTALELAYDEFAAGIKKAY 145 ******9877765.6699**************************9999999999998 PP >> sp|P08924|GLB1_LUMTE Extracellular globin-1 OS=Lumbricus terrestris PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 21.8 0.0 1.1e-05 0.0054 10 127 .. 9 125 .. 4 141 .. 0.81 Alignments for each domain: == domain 1 score: 21.8 bits; conditional E-value: 1.1e-05 globins4 10 kvkavWakveadvee...sGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLse 93 kvk Wa ++++ G + ++ +P+ + F + ++ + s++ +H+++vl l ++ ld + l a+l++L sp|P08924|GLB1_LUMTE 9 KVKLQWASAFGHAHQrvaFGLELWKGILREHPEIKAPFSRVRGDN-----IYSPQFGAHSQRVLSGLDITISMLDtpDMLAAQLAHLKV 92 677778777666654222699999999999999999999996544.....679******************999876678899****** PP globins4 94 lHakklkvdpkyfkllsevlvdvlaarlpkefta 127 +H ++ ++ p++f ++ + l++vl rl+++f sp|P08924|GLB1_LUMTE 93 QHVER-NLKPEFFDIFLKHLLHVLGDRLGTHFDF 125 **986.799*******************998853 PP >> sp|Q7M413|GLBA2_OLIMA Extracellular giant hemoglobin major globin subunit A2 OS=Oligobrachia mashikoi GN=ghbA2 PE=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 21.6 0.0 1.2e-05 0.006 9 140 .. 24 156 .. 17 158 .] 0.81 Alignments for each domain: == domain 1 score: 21.6 bits; conditional E-value: 1.2e-05 globins4 9 tkvkavWakve...adveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdL 91 vk Wa+ + ++ e G+ i + lf +P ++ F + ++ s + ++H+ +vl+ l +a+ld l+a l+ L sp|Q7M413|GLBA2_OLIMA 24 LLVKRQWAEAYgegTNRELLGNRIWEDLFANMPDARGLFSRVNGND-----IDSSEFQAHSLRVLGGLDMCVASLDdvPVLNALLARL 106 57899999987222456778*********************96655.....67889*******************7355688899999 PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadv.qaaleKllalv 140 +H ++ y +++ ++ v a+ ++ f d+ ++ ++++++ + sp|Q7M413|GLBA2_OLIMA 107 NSQHDSRGIPAAGYPAFVASAISAVRATVGARSFDNDAwNSCMNQIVSGI 156 99997665555668899999999998888888998887467788888877 PP >> sp|P02232|LGB1_VICFA Leghemoglobin-1 OS=Vicia faba PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 21.6 0.1 1.3e-05 0.0062 34 146 .. 34 143 .. 7 144 .] 0.88 Alignments for each domain: == domain 1 score: 21.6 bits; conditional E-value: 1.3e-05 globins4 34 fkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdL.selHakklkvdpkyfkllsevlvdvlaarl 121 ++ P+++ +F F L+ ++ + s+++ +H++kv + + d +l e l H +k +dp+ f ++ e+l++++++ sp|P02232|LGB1_VICFA 34 LQKAPTAKAMFS-F--LKDSAGVVDSPKLGAHAEKVFGMVRDSAVQLRATGEVVLDGKdGSIHIQKGVLDPH-FVVVKEALLKTIKEAS 118 667899999885.5..77788*************************9878888887551457********96.7799************ PP globins4 122 pkeftadvqaaleKllalvakllas 146 + +++ + aa e + + +a+++++ sp|P02232|LGB1_VICFA 119 GDKWSEELSAAWEVAYDGLATAIKA 143 *************999999999876 PP >> sp|P93848|LGB2_VICFA Leghemoglobin 29 OS=Vicia faba GN=LB29 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ! 20.9 0.1 2.2e-05 0.01 34 143 .. 34 142 .. 6 147 .. 0.81 Alignments for each domain: == domain 1 score: 20.9 bits; conditional E-value: 2.2e-05 globins4 34 fkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleakl..kdLselHakklkvdpkyfkllsevlvdvlaar 120 + P ++++F kd + + +++ + +H++ v + + da a+l+ + l +L H++k +vd +f ++ e+l++++++ sp|P93848|LGB2_VICFA 34 LEKAPIAKNMFSVLKDAN--EIPLANPSINAHTEMVFEMVRDAAAQLQTTGQVVLgdTTLGVVHTQK-RVDGLHFMVVKEALLKTIKEA 119 566789999988887766..444699*********************85555555226899999887.9******************** PP globins4 121 lpkeftadvqaaleKllalvakl 143 + +++ + a e + + +a + sp|P93848|LGB2_VICFA 120 VGDKWSEELSNAWEIAYDGLAVA 142 99999999888888776666655 PP >> sp|P02236|LGB2_SOYBN Leghemoglobin C2 OS=Glycine max PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 20.6 0.4 2.6e-05 0.013 8 146 .. 9 143 .. 3 145 .] 0.78 Alignments for each domain: == domain 1 score: 20.6 bits; conditional E-value: 2.6e-05 globins4 8 ktkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleaklkdLselH 95 v + + +a++ ++ + + ++ Pa+++ F F Ls + +++++ H++k+ + + d +l+ + + ++L H sp|P02236|LGB2_SOYBN 9 EALVSSSFEAFKANIPQYSVVFYTSILEKAPAAKDLFS-F--LS-NGVDPSNPKLTGHAEKLFGLVRDSAGQLKaNGTVVADAALGSIH 93 55666666677777777777777888888899998885.5..55.33345789********************85556667789***** PP globins4 96 akklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllas 146 a+k dp+ f ++ e+l++++++ + +++ + +a e + + +a ++++ sp|P02236|LGB2_SOYBN 94 AQKAITDPQ-FVVVKEALLKTIKEAVGDKWSDELSSAWEVAYDELAAAIKK 143 *******98.67999*******99999999988888888877777777765 PP >> sp|Q93Y92|HBL2_GOSHI Non-symbiotic hemoglobin 2 OS=Gossypium hirsutum GN=HB2 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 20.2 0.3 3.3e-05 0.016 5 142 .. 5 145 .. 2 154 .. 0.73 Alignments for each domain: == domain 1 score: 20.2 bits; conditional E-value: 3.3e-05 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedel.kksadvkkHgkkvldAlsdalakldek.....leak 87 e++ vk+ W + d+ s ++ P ++++F F L+ ++e+ ++++++k+H++kv + + +l ek +++ sp|Q93Y92|HBL2_GOSHI 5 EKQEGLVKESWEVLKQDIPHSSLRFFSLILEIAPGAKNMFS-F--LRESEEIpQNNPKLKAHAVKVFKMTCESAIQLREKgevvvADTT 90 555667889999999999999999999999999****9996.5..454455527899**********9998888888544112224679 PP globins4 88 lkdLselHakklkvdpkyfkllsevlvdvlaarlpke.ftadvqaaleKllalvak 142 lk L H k+ dp +f+++ e+l+ ++ + ++e + +++ a + + +a+ sp|Q93Y92|HBL2_GOSHI 91 LKYLGTVHVKSGVKDP-HFEVVKEALLRTIEEAIGEEkWNEEMKNAWGEAYDQLAE 145 9*******98865555.79***********99888752455555555555444444 PP >> sp|Q9KMY3|HMP_VIBCH Flavohemoprotein OS=Vibrio cholerae serotype O1 (strain ATCC 39315 / El Tor Inaba N16961) GN=hmp # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 19.6 0.4 5.5e-05 0.027 61 134 .. 49 123 .. 13 135 .. 0.77 Alignments for each domain: == domain 1 score: 19.6 bits; conditional E-value: 5.5e-05 globins4 61 dvkkHgkkvldAlsdalakld..ekleaklkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaale 134 + ++ + +A+++ +++d l ++++ ++++H ++++++p++++++++ l+++l + p ft +v+ a sp|Q9KMY3|HMP_VIBCH 49 KTGRQSVALFEAIAAYAKHIDnlAALTSAVERIAHKH-TSFNIQPEHYQIVGHHLLETLRELAPDAFTQPVEEAWT 123 3344566778999999999985667888999999999.58*******************************98865 PP >> sp|Q43236|LGB1_VIGUN Leghemoglobin-1 OS=Vigna unguiculata GN=LBI PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 20.0 1.3 3.9e-05 0.019 4 148 .. 5 145 .] 2 145 .] 0.78 Alignments for each domain: == domain 1 score: 20.0 bits; conditional E-value: 3.9e-05 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleaklkdL 91 s+++ v+ ++ +a++ ++ + + ++ Pa+++ F F L + ++++ H++k+ + + d a+l + ++L sp|Q43236|LGB1_VIGUN 5 SDKQEALVNGAYEAFKANIPKYSVVFYTTILEKAPAAKNLFS-F--LA-NGVDATNPKLTGHAEKLFGLVRDSAAQLRaSGGVVADAAL 89 666677788888888888888888899999999999999996.5..33.33335799********************634455566889 PP globins4 92 selHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 H++k v+ f ++ e+lv++l++ + +++ + +a+e + + +a +++++Y sp|Q43236|LGB1_VIGUN 90 GAVHSQKA-VNDAQFVVVKEALVKTLKEAVGDKWSDELGTAVELAYDELAAAIKKAY 145 99**9996.7777899**********9988887777777777777777777766666 PP >> sp|Q43296|LGB2_VIGUN Leghemoglobin-2 OS=Vigna unguiculata GN=LBII PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 19.9 0.8 4.3e-05 0.021 5 148 .. 6 145 .] 2 145 .] 0.76 Alignments for each domain: == domain 1 score: 19.9 bits; conditional E-value: 4.3e-05 globins4 5 eaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleaklkdLs 92 +++ v+ ++ +ad+ ++ + + ++ Pa+++ F F L + ++++ H++k+ + + d a+l + ++L sp|Q43296|LGB2_VIGUN 6 DKQEGLVNGAYEAFKADIPKYSVVFYTTILEKAPAAKNLFS-F--LA-NGVDATNPKLTGHAEKLFGLVRDSAAQLRaSGGVVADAALG 90 55555677777777788888888888888999999999996.4..33.33335799********************6344555668899 PP globins4 93 elHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskY 148 H++k v+ f ++ e+lv++l++ + +++ + +a+e + + +a +++++Y sp|Q43296|LGB2_VIGUN 91 AVHSQKA-VNDAQFVVVKEALVKTLKEAVGDKWSDELGTAVELAYDELAAAIKKAY 145 9**9996.7777899**********9988887777777777777777777766666 PP >> sp|P02235|LGB1_SOYBN Leghemoglobin C1 OS=Glycine max PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 19.7 0.6 4.8e-05 0.023 10 145 .. 11 142 .. 3 144 .] 0.77 Alignments for each domain: == domain 1 score: 19.7 bits; conditional E-value: 4.8e-05 globins4 10 kvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleaklkdLselHak 97 v + + +a++ ++ + ++ Pa+++ F F L + ++++ H++k+ + d +l+ + + ++L Ha+ sp|P02235|LGB1_SOYBN 11 LVSSSFEAFKANIPQYSVVFYNSILEKAPAAKDLFS-F--LA-NGVDPTNPKLTGHAEKLFALVRDSAGQLKtNGTVVADAALVSIHAQ 95 566666666666666666677777778888888875.4..33.33335799********************84556667789******* PP globins4 98 klkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvaklla 145 k dp+ f ++ e+l++++++ +++++ + +a e + + +a +++ sp|P02235|LGB1_SOYBN 96 KAVTDPQ-FVVVKEALLKTIKEAVGGNWSDELSSAWEVAYDELAAAIK 142 *****98.6799**************9999999998887777776665 PP >> sp|P11069|GLB3_LUMTE Extracellular globin-3 OS=Lumbricus terrestris PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 19.4 0.0 6e-05 0.029 24 121 .. 51 145 .. 23 170 .] 0.75 Alignments for each domain: == domain 1 score: 19.4 bits; conditional E-value: 6e-05 globins4 24 esGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld..ekleaklkdLselHakklkvdpkyfklls 110 + G L++l k P ++ F++ d++ + ++ +H+ ++l+ l a++ ld l+a+l +L+++H + v+ +fk ++ sp|P11069|GLB3_LUMTE 51 GFGRLLLTKLAKDIPDVNDLFKRV-DIE----HAEGPKFSAHALRILNGLDLAINLLDdpPALDAALDHLAHQHEVREGVQKAHFKKFG 134 356778999999999999999998.666....45679999*****************647789************************** PP globins4 111 evlvdvlaarl 121 e+l++ l + l sp|P11069|GLB3_LUMTE 135 EILATGLPQVL 145 *9998887654 PP >> sp|P02220|GLB4_TYLHE Extracellular globin-2C OS=Tylorrhynchus heterochaetus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 19.1 0.0 7.6e-05 0.037 4 141 .. 5 144 .. 3 148 .. 0.74 Alignments for each domain: == domain 1 score: 19.1 bits; conditional E-value: 7.6e-05 globins4 4 seaektkvkavWakveadvee.....sGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakl.d.ekle 85 s +++ +v+a+W + + ++ G + lf at+ F++ + d+ s++ +H +v++ l + l d + l+ sp|P02220|GLB4_TYLHE 5 SIEDRREVQALWRSIWSAEDTgrrtlIGRLLFEELFEIDGATKGLFKRV---N-VDDT-HSPEEFAHVLRVVNGLDTLIGVLgDsDTLN 88 6689999999999997655541111123333345677888888888887...3.3344.5666679************99998767788 PP globins4 86 aklkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadv.qaaleKllalva 141 + + +L+e+H + yfk ++++l +vl + ++ f +++ + ++ l+++++ sp|P02220|GLB4_TYLHE 89 SLIDHLAEQHKARAGFKTVYFKEFGKALNHVLPEV-ASCFNPEAwNHCFDGLVDVIS 144 88899**************************9876.677777653456666666665 PP >> sp|P49672|GLB2_ASCSU Myoglobin OS=Ascaris suum PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.9 0.0 8.6e-05 0.042 25 92 .. 23 87 .. 10 106 .. 0.85 Alignments for each domain: == domain 1 score: 18.9 bits; conditional E-value: 8.6e-05 globins4 25 sGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLs 92 G++ lf +P +++F+ ++L+ +++kks++ kk g+++l A +la+l+ + +a++k+ + sp|P49672|GLB2_ASCSU 23 NGTEFYALLFDKHPDLRHYFKGNENLT-GADVKKSDHFKKQGQRLLLAC-HVLAHLE-NDPASFKAYA 87 68999999***************9998.888***************997.6899997.6677776655 PP >> sp|P02219|GLB1_TYLHE Extracellular globin-1 OS=Tylorrhynchus heterochaetus PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 19.0 0.0 8.2e-05 0.04 9 129 .. 9 126 .. 6 139 .] 0.71 Alignments for each domain: == domain 1 score: 19.0 bits; conditional E-value: 8.2e-05 globins4 9 tkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHak 97 kvk+ Wa+v++ v+es +d + +f + t+ F+ ++ d+ s++ k+H ++v + + ld + + ++L++ a sp|P02219|GLB1_TYLHE 9 IKVKQQWAQVYS-VGESRTDFAIDVFNNFFRTNPDRSLFNRVN-GDN-VYSPEFKAHMVRVFAGFDILISVLD-DKPVLDQALAHYAAF 93 689*******87.666666666666666666666556665555.444.579***********99987777778.566666677777777 PP globins4 98 klkvdpkyfkllsevlvdvlaar.lpkeftadv 129 + + fk +++ + +++a++ ++++ +a sp|P02219|GLB1_TYLHE 94 HKQFGTIPFKAFGQTMFQTIAEHiHGADIGAWR 126 777777789999********9884677777654 PP >> sp|P02238|LGBA_SOYBN Leghemoglobin A OS=Glycine max GN=LBA PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 18.2 1.0 0.00014 0.067 9 144 .. 10 141 .. 2 144 .] 0.75 Alignments for each domain: == domain 1 score: 18.2 bits; conditional E-value: 0.00014 globins4 9 tkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekleaklkdLselHa 96 v + + +a++ ++ + + ++ Pa+++ F F L + ++++ H++k+ + d +l+ + ++L Ha sp|P02238|LGBA_SOYBN 10 ALVSSSFEAFKANIPQYSVVFYTSILEKAPAAKDLFS-F--LA-NGVDPTNPKLTGHAEKLFALVRDSAGQLKaSGTVVADAALGSVHA 94 5566666666677777777777777888888888885.4..33.33335799********************85556667789****** PP globins4 97 kklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 +k dp+ f ++ e+l+++++a + +++ + a e + + +a ++ sp|P02238|LGBA_SOYBN 95 QKAVTDPQ-FVVVKEALLKTIKAAVGDKWSDELSRAWEVAYDELAAAI 141 ******98.67999********99999888887777766666555555 PP >> sp|P02217|GLB2_GLYDI Globin, minor monomeric component (Fragment) OS=Glycera dibranchiata PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 17.6 0.0 0.00022 0.11 3 44 .. 2 45 .] 1 45 [] 0.83 Alignments for each domain: == domain 1 score: 17.6 bits; conditional E-value: 0.00022 globins4 3 LseaektkvkavWakve.adv.eesGadiLvrlfkstPatqefF 44 Ls+ae++ v + W + ad +++G++ L++++ + P+ F sp|P02217|GLB2_GLYDI 2 LSAAERQVVASCWKDIAgADXgAGVGKEXLIKFISAAPEMAAVF 45 9*************995233326899************987666 PP >> sp|P02237|LGB3_SOYBN Leghemoglobin C3 OS=Glycine max GN=LGB1 PE=2 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 17.4 0.2 0.00025 0.12 57 146 .. 54 143 .. 4 145 .] 0.77 Alignments for each domain: == domain 1 score: 17.4 bits; conditional E-value: 0.00025 globins4 57 kksadvkkHgkkvldAlsdalakldekleakl.kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakll 144 ++++ H++k+ + + d +l+ + ++L Ha+k dp+ f ++ e+l++++++ + +++ + +a e + + +a ++ sp|P02237|LGB3_SOYBN 54 PTNPKLTGHAEKLFGLVRDSAGQLKASGTVVIdAALGSIHAQKAITDPQ-FVVVKEALLKTIKEAVGDKWSDELSSAWEVAYDELAAAI 141 46899*******************95544444378************98.67999*******999999999888888888777777777 PP globins4 145 as 146 ++ sp|P02237|LGB3_SOYBN 142 KK 143 65 PP >> sp|Q821U7|SYC_CHLCV Cysteine--tRNA ligase OS=Chlamydophila caviae (strain GPIC) GN=cysS PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.6 0.0 0.00087 0.42 55 107 .. 346 398 .. 298 414 .. 0.90 Alignments for each domain: == domain 1 score: 15.6 bits; conditional E-value: 0.00087 globins4 55 elkksadvkkHgkkvldAlsdalakldekleaklkdLse.lHakklkvdpkyfk 107 + s+d+++Hg+ l+A+s+a+a+ d ++ a+l++L + H ++ +d +f sp|Q821U7|SYC_CHLCV 346 SSHISEDMQQHGEGFLQAFSEAIAN-DLNIAAALAALFDfIHQTNSTIDQANFT 398 56789********************.99*********985699******99996 PP >> sp|O66586|Y211_AQUAE Uncharacterized globin-like protein aq_211 OS=Aquifex aeolicus (strain VF5) GN=aq_211 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.7 0.1 0.0036 1.7 22 120 .. 17 106 .. 2 135 .. 0.69 Alignments for each domain: == domain 1 score: 13.7 bits; conditional E-value: 0.0036 globins4 22 veesGadiLvrl....fkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHakklkvdpkyf 106 +e+G++i r+ f +P+t+e F + ++ kk ++ ++ A + + +l+ +l++++++++ +H ++ +v p+++ sp|O66586|Y211_AQUAE 17 LKEHGTEITARMyellFSKYPKTKELFAGA----------SEEQPKKLANAII-AYATYIDRLE-ELDNAISTIARSHVRR-NVKPEHY 92 568888888886222244566666555433..........3455566666555.5666677766.999**********976.8****** PP globins4 107 kllsevlvdvlaar 120 l+ e+l++ + + sp|O66586|Y211_AQUAE 93 PLVKECLLQAIEEV 106 ********998765 PP >> sp|Q24SX0|SYGB_DESHY Glycine--tRNA ligase beta subunit OS=Desulfitobacterium hafniense (strain Y51) GN=glyS PE=3 SV= # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.6 0.0 0.0037 1.8 86 134 .. 24 76 .. 13 81 .. 0.85 Alignments for each domain: == domain 1 score: 13.6 bits; conditional E-value: 0.0037 globins4 86 aklkdLselHakklkvdpkyfklls.....evlvdvlaarlpkeftadvqaale 134 ++l++ +++H+++l++d + +k+ + +vl++ la++ ++fta+v++ sp|Q24SX0|SYGB_DESHY 24 NQLREQAQKHCQELRLDYQDLKVYTtprrfAVLIQGLAEK-QTDFTAEVKGPAV 76 78999******************984555569******99.99****9998655 PP >> sp|P06148|HBF1_URECA Hemoglobin F-I OS=Urechis caupo PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 16.4 0.0 0.00051 0.25 3 126 .. 3 125 .. 1 137 [. 0.82 Alignments for each domain: == domain 1 score: 16.4 bits; conditional E-value: 0.00051 globins4 3 LseaektkvkavWa.kveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkd 90 L+ a+ ++++ W +++ + i + ++++P + fF kF + l++++ k+ + +v++ l +++ l ++ a +k+ sp|P06148|HBF1_URECA 3 LTTAQIKAIQDHWFlNIKGCLQAAADSIFFKYLTAYPGDLAFFHKFSSVP-LYGLRSNPAYKAQTLTVINYLDKVVDALGGNAGALMKA 90 56666677777774267777777888899*****************8887.789*************************9999999999 PP globins4 91 LselHakklkvdpkyfkllsevlvdvlaarlpkeft 126 +H + + + pk+f l + + v +++++++ t sp|P06148|HBF1_URECA 91 KVPSH-DAMGITPKHFGQLLKLVGGVFQEEFSADPT 125 99999.678899999988877777777777766655 PP >> sp|P51535|GLB2_NIPBR Myoglobin OS=Nippostrongylus brasiliensis GN=GLBB PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 15.6 0.0 0.00092 0.45 19 139 .. 19 137 .. 9 146 .. 0.74 Alignments for each domain: == domain 1 score: 15.6 bits; conditional E-value: 0.00092 globins4 19 eadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakld.ekl.eaklkdLselHakklkvdpky 105 +a+ +++G+d +f+ +P +++F+ ++ + +d+++ks+ k g +l + + +d e++ +a ++ ++H + +dp sp|P51535|GLB2_NIPBR 19 KAQQAQVGKDFYKFFFTNHPDLRKYFKGAENFT-ADDVQKSDRFEKLGSGLLLSVHILANTFDnEDVfRAFCRETIDRHVGR-GLDPAL 105 578899********************9997765.9*************9999888654444453333023334444555443.578888 PP globins4 106 fkllsevlvdvlaarlpkeftadvqaaleKllal 139 +k + v v l ++ + + d +aa +Kl + sp|P51535|GLB2_NIPBR 106 WKAFWSVWVAFLESK--GGVSGDQKAAWDKLGTV 137 888888888888888..66777788888887555 PP >> sp|P30627|GLBH_CAEEL Globin-like protein OS=Caenorhabditis elegans GN=glb-1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 14.5 0.0 0.002 0.97 20 74 .. 25 78 .. 12 117 .. 0.79 Alignments for each domain: == domain 1 score: 14.5 bits; conditional E-value: 0.002 globins4 20 adveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAls 74 a+ e G+ +f+ +P + +F+ + t+d++kks+ k g+++l A sp|P30627|GLBH_CAEEL 25 AQNIENGNAFYRYFFTNFPDLRVYFKGA-EKYTADDVKKSERFDKQGQRILLACH 78 55567788888889***********998.5567******************9853 PP >> sp|B2AND4|MTLD_PODAN Mannitol-1-phosphate 5-dehydrogenase OS=Podospora anserina (strain S / ATCC MYA-4624 / DSM 980 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 8.7 0.0 0.12 60 89 137 .. 84 131 .. 60 139 .. 0.81 2 ? 3.5 0.0 4.7 2.3e+03 68 116 .. 242 288 .. 225 309 .. 0.80 Alignments for each domain: == domain 1 score: 8.7 bits; conditional E-value: 0.12 globins4 89 kdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKll 137 ++++ v p+ +k+l+ v+++ laar ++++t+++ a e ++ sp|B2AND4|MTLD_PODAN 84 EEIATADVVTCSVGPNILKFLAPVIAKGLAAR-STDLTPAAVIACENAI 131 55666666677899******************.99****9988877665 PP == domain 2 score: 3.5 bits; conditional E-value: 4.7 globins4 68 kvldAlsdalakldekleaklkdLselHakklkvdpkyfkllsevlvdv 116 +v dAl+d + ++++++lk+ ++l ++k+ +d + k + +v sp|B2AND4|MTLD_PODAN 242 TVYDALQDKDIR--DEVKNALKETADLITEKHGIDEEEQKQYVDKIVRR 288 677777775444..59*******************98877666666655 PP >> sp|Q68S17|RR2_PANGI 30S ribosomal protein S2, chloroplastic OS=Panax ginseng GN=rps2 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.4 0.0 0.0043 2.1 7 55 .. 78 126 .. 73 149 .. 0.90 Alignments for each domain: == domain 1 score: 13.4 bits; conditional E-value: 0.0043 globins4 7 ektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstede 55 +k + + +Wa ++a + + + L +++ + +t++ kF+dL+te++ sp|Q68S17|RR2_PANGI 78 NKAANLVAWAAIKARCHYVNKKWLGGMLTNWSTTETRLHKFRDLRTEQK 126 56677789**************************************986 PP >> sp|B1KJ42|Y2786_SHEWM UPF0352 protein Swoo_2786 OS=Shewanella woodyi (strain ATCC 51908 / MS32) GN=Swoo_2786 PE=3 SV # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 13.6 0.1 0.0037 1.8 96 139 .. 23 67 .. 2 70 .. 0.76 Alignments for each domain: == domain 1 score: 13.6 bits; conditional E-value: 0.0037 globins4 96 akklkvdpk.yfkllsevlvdvlaarlpkeftadvqaaleKllal 139 +k++ + + +l++++ d la + p+e a+v + K+la sp|B1KJ42|Y2786_SHEWM 23 LDKHQAPTDlRLMVLGNCVTDLLARKVPAEARASVAEQFSKALAQ 67 35666655425789****************************985 PP >> sp|Q7S1Y0|RNA14_NEUCR mRNA 3'-end-processing protein rna-14 OS=Neurospora crassa (strain ATCC 24698 / 74-OR23-1A / C # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.6 0.1 0.0075 3.7 10 96 .. 552 647 .. 546 652 .. 0.83 Alignments for each domain: == domain 1 score: 12.6 bits; conditional E-value: 0.0075 globins4 10 kvkavWakveadveesGadiLvrlfkstPat.qefFekFkdLst........edelkksadvkkHgkkvldAlsdalakldekleakl 88 ++++v kv d + G++ L+r + + P++ + F++ +++ e++++ + vk+ +kvld l +++++l+ek a++ sp|Q7S1Y0|RNA14_NEUCR 552 NITTVENKVTKDGNANGVEFLIRGIEANPESvLLAFKHADHIEStypieendEAKIQRGEAVKAPYNKVLDTLYAMIKSLKEKEAAQI 639 78889999*9*******************97356799998886423333333567888999*************************** PP globins4 89 kdLselHa 96 ++L e a sp|Q7S1Y0|RNA14_NEUCR 640 AKLQEMTA 647 **998776 PP >> sp|A8FU97|Y1809_SHESH UPF0352 protein Ssed_1809 OS=Shewanella sediminis (strain HAW-EB3) GN=Ssed_1809 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.8 0.1 0.0067 3.3 98 139 .. 25 67 .. 8 70 .. 0.82 Alignments for each domain: == domain 1 score: 12.8 bits; conditional E-value: 0.0067 globins4 98 klkvdpk.yfkllsevlvdvlaarlpkeftadvqaaleKllal 139 k++ + + +l++++ d la + p+e a+v + K+la sp|A8FU97|Y1809_SHESH 25 KHQAPTDlRLMVLGNCVTDLLARKVPQEARAAVAEQFSKALAQ 67 555554325789****************************985 PP >> sp|Q14185|DOCK1_HUMAN Dedicator of cytokinesis protein 1 OS=Homo sapiens GN=DOCK1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.3 0.0 0.02 9.5 32 98 .. 1549 1611 .. 1543 1618 .. 0.81 Alignments for each domain: == domain 1 score: 11.3 bits; conditional E-value: 0.02 globins4 32 rlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHakk 98 r ++ +P+++e+ ek kdL + + ++ ++ Hg kv +Al e++ea +k+L e+ k+ sp|Q14185|DOCK1_HUMAN 1549 RYLQEHPEAHEKIEKLKDLIAWQIPFLAEGIRIHGDKVTEALRPFH----ERMEACFKQLKEKVEKE 1611 78899***************8877789999********99987653....56777788777766555 PP >> sp|B2LMI3|RR2_GUIAB 30S ribosomal protein S2, chloroplastic OS=Guizotia abyssinica GN=rps2 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.7 0.0 0.007 3.4 8 56 .. 79 127 .. 73 149 .. 0.88 Alignments for each domain: == domain 1 score: 12.7 bits; conditional E-value: 0.007 globins4 8 ktkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedel 56 k++ +Wa + a + + + L +++ + +t++ kF+dL+te++ sp|B2LMI3|RR2_GUIAB 79 KEADSVAWAAIRARCHYVNKKWLGGMLTNWSTTETRLHKFRDLRTEQKT 127 5556679**************************************9876 PP >> sp|Q56P10|RR2_LACSA 30S ribosomal protein S2, chloroplastic OS=Lactuca sativa GN=rps2 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.7 0.0 0.0072 3.5 8 56 .. 79 127 .. 73 149 .. 0.88 Alignments for each domain: == domain 1 score: 12.7 bits; conditional E-value: 0.0072 globins4 8 ktkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedel 56 k++ +Wa + a + + + L +++ + +t++ kF+dL+te++ sp|Q56P10|RR2_LACSA 79 KEADSVAWAAIRARCHYVNKKWLGGMLTNWSTTETRLHKFRDLRTEQKT 127 5556679**************************************9875 PP >> sp|Q1KXW9|RR2_HELAN 30S ribosomal protein S2, chloroplastic OS=Helianthus annuus GN=rps2 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.6 0.0 0.0074 3.6 8 56 .. 79 127 .. 73 149 .. 0.88 Alignments for each domain: == domain 1 score: 12.6 bits; conditional E-value: 0.0074 globins4 8 ktkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedel 56 k++ +Wa + a + + + L +++ + +t++ kF+dL+te++ sp|Q1KXW9|RR2_HELAN 79 KEADSVAWAAIRARCHYVNKKWLGGMLTNWSTTETRLHKFRDLRTEQKT 127 5556679**************************************9875 PP >> sp|Q0G9X3|RR2_DAUCA 30S ribosomal protein S2, chloroplastic OS=Daucus carota GN=rps2 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.6 0.0 0.0074 3.6 8 56 .. 79 127 .. 73 151 .. 0.86 Alignments for each domain: == domain 1 score: 12.6 bits; conditional E-value: 0.0074 globins4 8 ktkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedel 56 k + + +Wa + a + + + L +++ + +t++ kF+dL+te++ sp|Q0G9X3|RR2_DAUCA 79 KAADLVAWAAIRARCHYVNKKWLGGMLTNWSTTETRLHKFRDLRTEQKT 127 5556789**************************************9865 PP >> sp|O76242|GLBN_CERLA Neural hemoglobin OS=Cerebratulus lacteus PE=1 SV=3 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.7 0.0 0.0068 3.3 27 121 .. 9 95 .. 2 110 .] 0.74 Alignments for each domain: == domain 1 score: 12.7 bits; conditional E-value: 0.0068 globins4 27 adiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHakklkvdpkyfkllsevlvd 115 d + lfk++P+ q++F Fk++ lk++a k+ + k +d +++a+ +a+ + L+ +H +v f+ ++l++ sp|O76242|GLBN_CERLA 9 DDFYQELFKAHPEYQNKFG-FKGVA-LGSLKGNAAYKTQAGKTVDYINAAIGG-----SADAAGLASRHK-GRNVGSAEFHNAKACLAK 89 567789************6.99998.889*******************99976.....445566666663.345666666666666666 PP globins4 116 vlaarl 121 a+ sp|O76242|GLBN_CERLA 90 ACSAHG 95 666664 PP >> sp|Q27302|GLBH_CAEBR Globin-like protein OS=Caenorhabditis briggsae GN=glb-1 PE=2 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.9 0.0 0.012 6 26 77 .. 31 81 .. 19 111 .. 0.76 Alignments for each domain: == domain 1 score: 11.9 bits; conditional E-value: 0.012 globins4 26 GadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdal 77 G+ + +f+ +P + +F+ ++ t++++kks+ k g+++l A + sp|Q27302|GLBH_CAEBR 31 GNGFYQYFFTNFPDLRVYFKGAEKF-TAEDVKKSERFDKQGQRILLACHLIA 81 55566779***********988665.5999***************9975443 PP >> sp|Q01333|YCR4_ESCVU Uncharacterized 11.2 kDa protein in crtE 3'region OS=Escherichia vulneris PE=4 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 12.4 0.0 0.009 4.4 4 50 .. 45 89 .. 43 99 .. 0.84 Alignments for each domain: == domain 1 score: 12.4 bits; conditional E-value: 0.009 globins4 4 seaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdL 50 + + v ++Wa+ + ++ + iL + f ++P ++e+ F ++ sp|Q01333|YCR4_ESCVU 45 NAIDTADVYSAWAPG--NKGGESETILGKWFAAHPGAREKITLFTKV 89 56678899******9..8999999***************99998654 PP >> sp|Q0AGZ8|UBIC_NITEC Probable chorismate--pyruvate lyase OS=Nitrosomonas eutropha (strain C91) GN=ubiC PE=3 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.5 0.0 0.034 17 58 113 .. 3 55 .. 1 66 [. 0.69 Alignments for each domain: == domain 1 score: 10.5 bits; conditional E-value: 0.034 globins4 58 ksadvkkHgkkvldAlsdalakldekleaklkdLselHakklkvdpkyfkllsevl 113 +++ + +H + v ++ ++ +l L + H+++++v+p + l ++++ sp|Q0AGZ8|UBIC_NITEC 3 ANPPLAWHPVPVSAPVNLRWWL---MHQESLTRLLQAHCEHFRVEPVFQTLATACI 55 5555666666665555544444...35889****************8666555554 PP >> sp|B0FZN9|SCML1_PONPY Sex comb on midleg-like protein 1 OS=Pongo pygmaeus GN=SCML1 PE=3 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.2 0.0 0.021 10 51 100 .. 50 98 .. 43 106 .. 0.92 Alignments for each domain: == domain 1 score: 11.2 bits; conditional E-value: 0.021 globins4 51 stedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHakklk 100 +te++lk +dv H + + dA+++ +k+d ++ k++++ Ha++l sp|B0FZN9|SCML1_PONPY 50 NTEEQLKTVNDVLIHCQVIYDAMQNLDKKID-VIRRKVSKIQRFHARSLW 98 79****************************9.99************9875 PP >> sp|Q9UN30|SCML1_HUMAN Sex comb on midleg-like protein 1 OS=Homo sapiens GN=SCML1 PE=1 SV=2 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 11.8 0.1 0.013 6.3 51 100 .. 50 98 .. 44 117 .. 0.92 Alignments for each domain: == domain 1 score: 11.8 bits; conditional E-value: 0.013 globins4 51 stedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHakklk 100 +te++lk +dv H + + dAl++ +k+d ++ k++++ Ha++l sp|Q9UN30|SCML1_HUMAN 50 NTEEQLKTVDDVLIHCQVIYDALQNLDKKID-VIRRKVSKIQRFHARSLW 98 79****************************9.99************9985 PP >> sp|B8FUJ0|SYGB_DESHD Glycine--tRNA ligase beta subunit OS=Desulfitobacterium hafniense (strain DCB-2 / DSM 10664) GN # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 9.1 0.0 0.091 44 86 134 .. 24 76 .. 13 81 .. 0.85 Alignments for each domain: == domain 1 score: 9.1 bits; conditional E-value: 0.091 globins4 86 aklkdLselHakklkvdpkyfklls.....evlvdvlaarlpkeftadvqaale 134 ++l++ +++++++l++d + +k+ + +vl++ la++ ++fta+v++ sp|B8FUJ0|SYGB_DESHD 24 NQLREQAQKYCQELRLDYQDLKVYTtprrfAVLIQGLAEK-QTDFTAEVKGPAV 76 789999*****************984555569******99.99****9998655 PP >> sp|Q498L9|KI15B_XENLA Kinesin-like protein KIF15-B OS=Xenopus laevis GN=kif15-b PE=1 SV=1 # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 10.1 0.8 0.044 22 38 100 .. 600 661 .. 587 674 .. 0.86 Alignments for each domain: == domain 1 score: 10.1 bits; conditional E-value: 0.044 globins4 38 PatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHakklk 100 ++++ +e+Fk+L+ + ++++ +++ k + l+++l ++e+ + ++++L Ha+ k sp|Q498L9|KI15B_XENLA 600 ATSKQEYEEFKELTKKKQVEQESELQSLMK-SNQHLENILDAIKENKRHEVSQLNRMHAETIK 661 467889*******************98765.57889999999999**************9765 PP Internal pipeline statistics summary: ------------------------------------- Query model(s): 1 (149 nodes) Target sequences: 539165 (191456931 residues searched) Passed MSV filter: 20801 (0.03858); expected 10783.3 (0.02) Passed bias filter: 17061 (0.0316434); expected 10783.3 (0.02) Passed Vit filter: 2321 (0.0043048); expected 539.2 (0.001) Passed Fwd filter: 1109 (0.00205688); expected 5.4 (1e-05) Initial search space (Z): 539165 [actual number of targets] Domain search space (domZ): 1108 [number of targets reported over threshold] # CPU time: 6.50u 0.11s 00:00:06.61 Elapsed: 00:00:02.59 # Mc/sec: 11014.32 // [ok] hmmer-3.1b2/tutorial/MADE1.hmm0000664361611702660230000003477212473612615015444 0ustar wheelerteddyHMMER3/f [3.1 | February 2013] NAME MADE1 ACC DF0000629.2 DESC MADE1 (MAriner Derived Element 1), a TcMar-Mariner DNA transposon LENG 80 MAXL 426 ALPH DNA RF yes MM no CONS yes CS no MAP yes DATE Tue Feb 19 20:33:41 2013 NSEQ 1997 EFFN 3.911818 CKSUM 3015610723 STATS LOCAL MSV -8.5786 0.71858 STATS LOCAL VITERBI -9.3632 0.71858 STATS LOCAL FORWARD -3.4823 0.71858 HMM A C G T m->m m->i m->d i->m i->i d->m d->d COMPO 1.24257 1.59430 1.62906 1.16413 1.38629 1.38629 1.38629 1.38629 0.03960 3.94183 3.94183 1.46634 0.26236 0.00000 * 1 2.69765 2.44396 2.81521 0.24089 1 t x - - 1.38629 1.38629 1.38629 1.38629 0.03960 3.94183 3.94183 1.46634 0.26236 1.09861 0.40547 2 2.72939 2.37873 2.85832 0.24244 2 t x - - 1.38629 1.38629 1.38629 1.38629 0.03725 4.00179 4.00179 1.46634 0.26236 1.09861 0.40547 3 0.16099 3.16370 2.87328 2.99734 3 a x - - 1.38629 1.38629 1.38629 1.38629 0.03604 4.03416 4.03416 1.46634 0.26236 1.09861 0.40547 4 1.98862 2.42132 0.42649 2.10770 4 g x - - 1.38629 1.38629 1.38629 1.38629 0.03539 4.05203 4.05203 1.46634 0.26236 1.09861 0.40547 5 1.96369 2.69532 0.36534 2.32099 5 g x - - 1.38629 1.38629 1.38629 1.38629 0.03764 4.06427 3.92372 1.46634 0.26236 1.09861 0.40547 6 2.56994 2.11239 2.71946 0.30571 6 t x - - 1.37159 1.41129 1.39124 1.37159 0.03806 3.89715 4.07214 1.50442 0.25122 1.00714 0.45454 7 2.58388 2.10353 2.64646 0.31253 12 t x - - 1.38764 1.38524 1.38764 1.38465 0.03494 4.03864 4.09125 1.40070 0.28293 1.09237 0.40860 8 2.18552 2.70201 0.28821 2.64645 14 g x - - 1.38629 1.38629 1.38629 1.38629 0.03628 4.09157 3.96779 1.46634 0.26236 1.09861 0.40547 9 2.16916 2.82142 0.28427 2.60854 15 g x - - 1.38091 1.39033 1.38365 1.39033 0.03566 4.00237 4.08886 1.38021 0.28972 1.01958 0.44745 10 2.45517 2.15232 2.42886 0.34277 18 t x - - 1.39065 1.39065 1.39065 1.37335 0.03536 4.01212 4.09576 1.39554 0.28462 1.09775 0.40589 11 2.10260 2.95484 0.28160 2.64222 21 g x - - 1.36740 1.40555 1.40555 1.36740 0.03843 3.92069 4.02468 1.44733 0.26814 1.09856 0.40549 12 2.54740 0.30185 2.61355 2.21647 26 c x - - 1.38748 1.38276 1.38748 1.38748 0.03457 4.05446 4.09623 1.40847 0.28040 1.05496 0.42803 13 0.28443 2.72003 2.32214 2.48149 28 a x - - 1.38740 1.38740 1.38298 1.38740 0.03441 4.05976 4.10001 1.41198 0.27926 1.09780 0.40587 14 0.29412 2.55413 2.49679 2.35701 30 a x - - 1.38194 1.39067 1.38194 1.39067 0.03505 4.02482 4.10005 1.39522 0.28473 1.09929 0.40512 15 0.18837 2.99710 2.82270 2.77556 33 a x - - 1.39015 1.39472 1.37503 1.38539 0.03725 3.97815 4.02618 1.37955 0.28994 1.10102 0.40426 16 0.50816 2.05151 2.22111 1.82407 37 a x - - 1.36727 1.38730 1.39683 1.39405 0.04830 3.89881 3.61610 1.29026 0.32186 1.05306 0.42905 17 2.11260 2.73141 0.29747 2.64152 41 g x - - 1.36913 1.40376 1.40376 1.36913 0.03705 3.93681 4.08299 1.44872 0.26771 1.07479 0.41759 18 2.24459 1.90539 2.34054 0.43234 46 t x - - 1.33632 1.42493 1.39937 1.38665 0.04427 3.64574 4.06297 1.70501 0.20061 1.21309 0.35279 19 0.44322 2.17202 2.18055 2.03175 57 a x - - 1.41047 1.41471 1.36338 1.35797 0.03970 3.81957 4.07540 1.65588 0.21186 1.22788 0.34660 20 0.33340 2.42691 2.40824 2.25160 66 a x - - 1.29389 1.44615 1.37917 1.43324 0.04223 3.70146 4.09459 1.55158 0.23815 1.05880 0.42598 21 2.50563 1.98543 2.69601 0.33746 74 t x - - 1.39462 1.39462 1.42862 1.32990 0.04184 3.80216 3.98177 1.80466 0.17976 1.00279 0.45705 22 2.54484 1.97505 2.66483 0.33806 84 t x - - 1.39134 1.39489 1.38662 1.37246 0.03877 3.97504 3.95038 1.37620 0.29107 1.13932 0.38572 23 2.10159 2.83856 0.29282 2.61635 88 g x - - 1.39682 1.39682 1.35536 1.39682 0.05046 3.75402 3.65808 1.08330 0.41321 1.13019 0.39004 24 2.25298 0.61854 2.50691 1.29221 90 c x - - 1.35803 1.49605 1.46737 1.24379 0.06091 3.28322 3.83564 1.89752 0.16245 1.28788 0.32276 25 1.27819 2.23285 0.76242 1.91259 106 g x - - 1.29024 1.67349 1.68279 1.04597 0.05752 3.44263 3.73311 2.58671 0.07825 1.26818 0.33037 26 1.86925 2.58352 0.39466 2.33986 131 g x - - 1.31084 1.49412 1.46666 1.29002 0.04698 3.54257 4.07715 2.25245 0.11109 0.86163 0.54900 27 2.38297 1.93394 2.39162 0.39800 151 t x - - 1.33582 1.47359 1.44163 1.30411 0.04951 3.48445 4.03783 2.15951 0.12260 1.21681 0.35122 28 2.41717 2.17810 2.62774 0.32113 170 t x - - 1.36805 1.48060 1.37439 1.32840 0.04849 3.50958 4.05014 2.58370 0.07850 1.22399 0.34822 29 2.57764 2.35132 2.56552 0.28512 194 t x - - 1.43829 1.43458 1.24787 1.43829 0.04667 3.56670 4.05428 2.49706 0.08591 1.23744 0.34267 30 2.47248 2.07688 2.62257 0.33172 215 t x - - 1.25120 1.52623 1.70635 1.15531 0.08932 3.31524 3.01336 2.81842 0.06156 1.22909 0.34610 31 2.25937 2.13157 2.02027 0.43957 248 t x - - 1.18172 1.43522 1.72841 1.28150 0.07936 2.93117 3.77395 2.46269 0.08906 0.60457 0.79034 32 2.04508 2.84981 0.30490 2.58263 280 g x - - 1.17665 1.66785 1.66218 1.16056 0.05998 3.23615 3.96853 2.83684 0.06040 1.01952 0.44749 33 2.45103 0.38098 2.56776 1.87147 317 c x - - 1.24153 1.52524 1.60663 1.22783 0.05538 3.39046 3.90294 2.73920 0.06680 1.18729 0.36391 34 2.22082 0.36258 2.75077 2.02704 347 c x - - 1.15008 1.62014 1.86511 1.10673 0.06086 3.18178 4.04341 2.94504 0.05403 1.25991 0.33363 35 0.27033 2.66664 2.52541 2.43767 388 a x - - 1.24951 1.47565 1.41392 1.42074 0.07123 3.00373 3.95552 3.13655 0.04440 1.28173 0.32512 36 2.83107 2.41670 2.97197 0.22235 439 t x - - 1.37071 1.57683 1.38637 1.23972 0.05293 3.45216 3.91807 2.54402 0.08181 1.14651 0.38235 37 2.52322 2.25084 2.45909 0.31611 465 t x - - 1.26335 1.55077 1.59008 1.19965 0.07504 3.13329 3.55006 3.08962 0.04659 1.13108 0.38962 38 0.45807 2.30687 1.98940 2.03143 512 a x - - 1.15472 1.67511 1.53797 1.26320 0.09820 3.13076 2.99876 2.79197 0.06326 1.39915 0.28343 39 2.37471 0.42180 2.44763 1.80427 550 c x - - 1.23785 1.49058 1.48364 1.35502 0.06081 3.19472 4.01643 2.41851 0.09327 0.94671 0.49105 40 2.32826 1.95481 2.36781 0.40458 578 t x - - 1.36586 1.46001 1.43000 1.29720 0.05257 3.39673 4.03256 1.84862 0.17133 1.40979 0.27997 41 2.68669 2.13935 2.81520 0.28200 592 t x - - 1.34965 1.42793 1.45781 1.31633 0.04735 3.57826 3.99988 2.09424 0.13144 1.22129 0.34934 42 2.55904 2.16444 2.70859 0.29952 609 t x - - 1.12072 1.61936 1.63578 1.26895 0.07346 3.25910 3.42962 2.85641 0.05919 1.38363 0.28857 43 1.99923 1.61027 2.26343 0.57851 646 t x - - 1.32290 1.58747 1.61095 1.11018 0.06656 3.08568 3.97944 2.44774 0.09046 0.75593 0.63407 44 0.23887 2.79899 2.55209 2.60783 675 a x - - 1.18557 1.50323 1.59070 1.31590 0.05597 3.38637 3.88222 2.46900 0.08847 1.27945 0.32599 45 0.29593 2.53488 2.53903 2.32335 701 a x - - 1.08710 1.54222 1.59276 1.40430 0.07539 2.94521 3.91062 1.91623 0.15918 1.22327 0.34852 46 2.58352 2.40524 2.76700 0.25955 725 t x - - 1.19685 1.58503 1.74852 1.14293 0.06124 3.18279 4.02089 2.82961 0.06085 1.05474 0.42814 47 2.13251 2.88788 0.29508 2.50964 764 g x - - 1.20891 1.55463 1.68206 1.19000 0.06526 3.12574 3.94910 2.41448 0.09367 1.10396 0.40280 48 2.23841 2.99164 0.25118 2.72900 792 g x - - 1.26330 1.55339 1.52606 1.24355 0.05464 3.34968 4.01313 2.78872 0.06347 1.15133 0.38012 49 2.57533 0.32900 2.64632 2.01501 824 c x - - 1.35118 1.39828 1.40141 1.39516 0.04340 3.79297 3.91506 1.59549 0.22666 1.20075 0.35806 50 0.46433 2.04127 2.23437 2.00605 833 a x - - 1.23062 1.36903 1.62282 1.36182 0.05764 3.31530 3.92762 2.28791 0.10700 1.07910 0.41536 51 0.27513 2.77017 2.28518 2.57549 853 a x - - 1.27958 1.58726 1.46109 1.25394 0.05750 3.30072 3.96214 2.60776 0.07656 1.25708 0.33475 52 0.20149 2.86434 2.84551 2.69770 883 a x - - 1.23645 1.62259 1.71174 1.10368 0.05756 3.26729 4.02702 2.54508 0.08172 1.27391 0.32814 53 0.26982 2.65833 2.50477 2.46835 911 a x - - 1.36005 1.50358 1.48100 1.22550 0.06921 3.37553 3.42118 2.36646 0.09851 1.27560 0.32748 54 0.40022 2.19284 2.22687 2.20396 934 a x - - 1.12070 1.60472 1.53213 1.35895 0.05523 3.36752 3.94966 2.42917 0.09224 0.84774 0.55928 55 2.11356 0.46400 2.46442 1.79955 960 c x - - 1.23932 1.35913 1.50478 1.46331 0.05187 3.47055 3.94022 2.35854 0.09933 1.12102 0.39445 56 1.85868 0.79440 2.22069 1.25971 983 c x - - 1.21951 1.50212 1.51138 1.34185 0.06404 3.29054 3.69705 1.75742 0.18933 1.18410 0.36532 57 1.33272 2.32720 0.71452 1.90215 999 g x - - 1.12229 1.49343 1.56653 1.42255 0.04920 3.46654 4.08749 2.17995 0.11996 1.31769 0.31164 58 2.48337 0.43652 2.46331 1.68683 1017 c x - - 1.34704 1.55461 1.38112 1.28222 0.04823 3.61532 3.90311 2.20911 0.11631 1.00864 0.45368 59 0.41659 2.44509 1.93972 2.20507 1034 a x - - 1.38198 1.38198 1.39194 1.38932 0.03641 3.98130 4.06929 1.35873 0.29704 1.31330 0.31325 60 0.41612 2.39160 1.97116 2.21075 1037 a x - - 1.03649 1.46430 1.57421 1.57557 0.04769 3.52580 4.06641 2.32461 0.10294 0.84329 0.56263 61 2.66264 2.12302 2.82746 0.28581 1056 t x - - 1.36925 1.39635 1.38930 1.39048 0.04097 3.97400 3.84718 1.39433 0.28502 1.12205 0.39395 62 2.26510 2.13196 2.42551 0.37231 1060 t x - - 1.37965 1.39147 1.39147 1.38264 0.04082 3.91610 3.90805 1.24613 0.33914 0.95192 0.48776 63 0.41244 2.25761 2.16787 2.12907 1062 a x - - 1.34515 1.41203 1.41203 1.37753 0.04054 3.77835 4.08203 1.30483 0.31638 1.11819 0.39582 64 2.51464 0.37905 2.62296 1.82008 1068 c x - - 1.39543 1.38753 1.39233 1.37008 0.03854 3.90584 4.03535 1.36573 0.29463 1.13682 0.38689 65 2.16380 2.11332 2.18714 0.42765 1073 t x - - 1.38764 1.38471 1.38519 1.38764 0.03575 4.05376 4.03073 1.40080 0.28289 1.03825 0.43707 66 2.79349 2.39141 2.87271 0.23478 1075 t x - - 1.37227 1.39101 1.39101 1.39101 0.03597 4.01447 4.05827 1.39017 0.28639 1.06429 0.42308 67 2.82488 2.47749 2.93179 0.21887 1078 t x - - 1.38141 1.39112 1.38915 1.38353 0.03661 3.99477 4.04370 1.35958 0.29675 1.13439 0.38804 68 2.77679 2.30433 2.90694 0.24425 1081 t x - - 1.37593 1.38989 1.45520 1.32825 0.04447 3.68736 3.99242 1.76176 0.18843 0.98580 0.46703 69 2.47698 3.17398 0.19595 2.95437 1093 g x - - 1.38264 1.38264 1.39734 1.38264 0.05358 3.96553 3.40487 1.40348 0.28202 1.03112 0.44100 70 2.84327 0.27906 2.97336 2.00890 1097 c x - - 1.38629 1.38629 1.38629 1.38629 0.03412 4.08811 4.08811 1.46634 0.26236 0.69006 0.69625 71 0.21870 2.83638 2.69251 2.65798 1098 a x - - 1.37446 1.37942 1.39640 1.39509 0.03670 3.93983 4.09935 1.41905 0.27700 1.10002 0.40476 72 2.35233 0.46085 2.23804 1.78715 1103 c x - - 1.38536 1.38781 1.38781 1.38421 0.03493 4.03822 4.09272 1.39310 0.28542 1.09638 0.40658 73 2.57111 0.32543 2.74124 1.98892 1105 c x - - 1.38629 1.38629 1.38629 1.38629 0.03381 4.09688 4.09688 1.46634 0.26236 1.09626 0.40664 74 0.27014 2.61416 2.53262 2.47636 1106 a x - - 1.38629 1.38629 1.38629 1.38629 0.03461 4.09267 4.05587 1.46634 0.26236 1.09748 0.40603 75 0.52873 2.16549 1.91736 1.90409 1107 a x - - 1.38629 1.38629 1.38629 1.38629 0.03426 4.08396 4.08396 1.46634 0.26236 1.07423 0.41788 76 2.33134 0.38082 2.65861 1.90055 1108 c x - - 1.38629 1.38629 1.38629 1.38629 0.03466 4.07266 4.07266 1.46634 0.26236 1.09861 0.40547 77 2.20588 0.45134 2.35553 1.84373 1109 c x - - 1.38629 1.38629 1.38629 1.38629 0.03550 4.04912 4.04912 1.46634 0.26236 1.09861 0.40547 78 2.69018 2.22054 2.82311 0.26898 1110 t x - - 1.38629 1.38629 1.38629 1.38629 0.03711 4.00561 4.00561 1.46634 0.26236 1.09861 0.40547 79 0.16248 3.15867 2.86159 2.98963 1111 a x - - 1.38629 1.38629 1.38629 1.38629 0.04048 3.92018 3.92018 1.46634 0.26236 1.09861 0.40547 80 0.17484 3.04770 2.86638 2.88183 1112 a x - - 1.38629 1.38629 1.38629 1.38629 0.02045 3.90014 * 1.46634 0.26236 0.00000 * // hmmer-3.1b2/tutorial/minifam.h3p0000664361611702660230000033614512473612615016205 0ustar wheelerteddyóðæ³•globins4 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYkîäœåÇåÆåÇåÇåÇåÇå€íÿïÿïÿïÿïÿïÿïÿ€AþAþAþAþAþAþAþ€=þ¢þ¢þ¢þ¢þ¢þ¢þó”ò7ò7ò7ò7ò7ò7òõô@ô@ô@ô@ô@ô@ôÓýÓýÓýÓýÓýÓýÓýÓýå¹åÇåÇåÇåÇåÇåÇåéÿíÿïÿïÿïÿïÿïÿïÿAþAþAþAþAþAþAþAþÿÚþ¢þ¢þ¢þ¢þ¢þ¢þ7ò7ò7ò7ò7ò7ò7ò7ò@ô@ô@ô@ô@ô@ô@ô@ôÓýÓýÓýÓýÓýÓýÓýÓý²åÂåÇåÇåÇåÇåÇåÇåïÿïÿïÿïÿïÿïÿïÿïÿAþAþAþAþAþAþAþAþ¢þ¢þ¢þ¢þ¢þ¢þ¢þ¢þ7ò7ò7ò7òÑú7ò7ò7ò@ô@ô@ô@ô@ô@ô@ô@ôÓýÓýÓýÓýÓýÓýÓýÓý¿åÅåÇåÇåQåÇåÇåÇåïÿïÿïÿïÿvÿïÿïÿïÿAþAþAþAþAþAþAþAþ¢þ¢þ¢þ¢þ¢þ¢þ¢þ¢þ7ò7ò7ò7ò­ò7ò7ò7ò@ô@ô@ô@ôrû@ô@ô@ôÓýÓýÓýÓýïûÓýÓýÓýÄåÆåÇåÇå£åÇåÇåÇåïÿïÿïÿïÿXÿïÿïÿïÿAþAþAþAþ>ÿAþAþAþ¢þ¢þ¢þ¢þåþ¢þ¢þ¢þ7ò7ò7ò7òøû7ò7ò7ò@ô@ô@ô@ôûú@ô@ô@ôÓýÓýÓýÓýïûÓýÓýÓýÆåÇåÇåÇååÇåÇåÇåïÿïÿïÿïÿ†þïÿïÿïÿAþAþAþAþ>ÿAþAþAþ¢þ¢þ¢þ¢þ¢þ¢þ¢þ¢þ7ò7ò7ò7òôò7òÙú7ò@ô@ô@ô@ôþô@ô@ô@ôÓýÓýÓýÓýÓýÓýÓýÓýÇåÇåÇåÇå’åÇåOåÇåïÿïÿïÿïÿêÿïÿtÿïÿAþAþAþAþAþAþAþAþ¢þ¢þ¢þ¢þÿþ¢þ¢þ¢þ7ò7ò7ò7ò7ò7ò®ò7ò@ô@ô@ô@ô@ô@ô·ô@ôÓýÓýÓýÓýÓýÓýÓýÓýÇåÇåÇåÇå´åÇååÇåïÿïÿïÿïÿïÿïÿìÿïÿAþAþAþAþAþAþAþAþ¢þ¢þ¢þ¢þ¢þ¢þ%þ¢þ7ò7ò7ò7ò7ò7ò®ò7ò@ô@ô@ô@ô@ô@ô·ô@ôÓýÓýÓýÓýÓýÓýÓýÓýÇåÇåÇåÇåÀåÇå«åÇåïÿïÿïÿïÿïÿïÿìÿïÿAþAþAþAþAþAþAþAþ¢þ¢þ¢þ¢þ¢þ¢þ%þ¢þ7ò7òøù7ò7ò7ò®ò7ò@ô@ô@ô@ô@ô@ô·ô@ôÓýÓýÓýÓýÓýÓýÓýÓýÇåÇåsåÇåÄåÇå¸åÇåïÿïÿ™ÿïÿïÿïÿìÿïÿAþAþAþAþAþAþAþAþ¢þ¢þ¢þ¢þ¢þ¢þ%þ¢þ7ò7ò‹ò7ò7ò7ò®ò7ò@ô@ô”ô@ô@ô@ô·ô@ôÓýÓýÓýÓýÓýÓýÓýÓýÇåÇå¬åÇåÆåÇå¾åÇåïÿïÿíÿïÿïÿïÿìÿïÿAþAþAþAþAþAþAþAþ¢þ¢þÕþ¢þ¢þ¢þ%þ¢þ7ò7ò7ò7ò7ò7ò®ò7ò@ô@ô@ô@ô@ô@ô·ô@ôÓýÓýÓýÓýÓýÓýÓýÓýÇåÇå½åÇåÇåÇåÁåÇåïÿïÿïÿïÿïÿïÿìÿïÿAþAþAþAþAþAþAþAþ¢þ¢þ¢þ¢þ¢þ¢þ%þ¢þ7ò7ò7ò7ò7ò7ò®ò7ò@ô@ô@ô@ô@ô@ô·ô@ôÓýÓýÓýÓýÓýÓýÓýÓýÇåÇåÃåÇåÇåÇåÂåÇåïÿïÿïÿïÿïÿïÿìÿïÿAþAþAþAþAþAþAþAþ¢þ¢þ¢þ¢þ¢þ¢þ%þ¢þ7ò7òøù7ò7ò7ò®ò7ò@ô@ô@ô@ô@ô@ô·ô@ôÓýÓýÓýÓýÓýÓýÓýÓýÇåÇåråÇåÇåÇåÃåÇåïÿïÿ™ÿïÿïÿïÿìÿïÿAþAþAþAþAþAþAþAþ¢þ¢þ¢þ¢þ¢þ¢þ%þ¢þ7ò7ò‹ò7ò7ò7ò®ò7ò@ô@ô”ô@ô@ô@ô·ô@ôÓýÓýÓýÓýÓýÓýÓýÓýÇåÇå åÇåÇåÇåÃåÇåïÿïÿíÿïÿïÿïÿìÿïÿAþAþAþAþAþAþAþAþ¢þ¢þFþ¢þ¢þ¢þ%þ¢þ7ò7ò‹ò7ò7ò7ò®òÙú@ô@ô”ô@ô@ô@ô·ô@ôÓýÓýÓýÓýÓýÓýÓýÓýÇåÇåµåÇåÇåÇåÅåOåïÿïÿíÿïÿïÿïÿìÿtÿAþAþAþAþAþAþAþAþ¢þ¢þFþ¢þ¢þ¢þæþ¢þ7ò7ò‹ò7ò7ò7ò7ò€@ô@ô”ô@ô@ô@ô@ô€ÓýÓýÓýÓýÓýÓýÓý€ÇåÇå½åÇåÇåÇåÆå€ïÿïÿíÿïÿïÿïÿïÿ€AþAþAþAþAþAþAþ€¢þ¢þFþ¢þ¢þ¢þ¢þ€7ò7ò‹ò7ò7ò7ò7ò€@ô@ô”ô@ô@ô@ô@ô€ÓýÓýÓýÓýÓýÓýÓý€ÇåÇåÁåÇåÇåÇåÇå€ïÿïÿíÿïÿïÿïÿïÿ€AþAþAþAþAþAþAþ€¢þ¢þFþ¢þ¢þ¢þ¢þ€:ú7ò‹ò7ò7ò7ò7ò€@ô@ô”ô@ô@ô@ô@ô€ÓýÓýÓýÓýÓýÓýÓý€jåÇåÅåÇåÇåÇåÇå€ÿïÿíÿïÿïÿïÿïÿ€AþAþAþAþAþAþAþ€¢þ¢þÕþ¢þ¢þ¢þ¢þ€”ò7ò7ò7ò7ò7ò7ò€ô@ô@ô@ô@ô@ô@ô€ÓýÓýÓýÓýÓýÓýÓý€†üëüOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýÔüOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýšüOýOýOýOýOýOýOýOýOýòýOýOýOýOýOýOýOýòýOýOýOýOýOýOýOýòýOýOýOýóüOýOýOýòýOýOýOýOýOýOýOýòýOýOýOýOýOýOýOýòýOýOýOýOýOýOýOýòýOýOýOýÍýOýOýOýòýOýOýOýÍýOýOýOýÓüOýOýOýÍýOýOýOýOý€OýOýÍýOýOýOýOý€OýOýóüOýOýOýOý€×ýOýOýOýOýOýOý€^¤ •!þYÐÿÿÂÿ}ÿwD™ÿ«ÿðýGýî3ÿ7[ÿBÿüý#4mÿÿqþºþWÿýhÿñþ<þÎþïþmn¸ÿÕü'þlÿ'þUÿàÿ‹þ{þûþëmÿÔþðþwþÃþ @ÿ£ýWÿtÿ2qÚÿxþÕü°‹ÿ…ÿb±ÿÚ/Bÿrÿh¿þÕþê'þGý'ÿÿ»fýýŠýiÿ»ÿGý'þ[ýäþ¬y1þËÿžÕ0þ¦ž=­ýÿŠýBu:ü`ýƒOGý’·üØ«ÿÌ&þ™CÿíþÿU"(ÿÄO€þZÿVþ\“ÿ³ý€˜ÿ&þWÿž£ýÖþ€ äþ€þ÷þ- yü4ÿTýÕÿ×þ‘þ{ý¤ÿýþ×ÿßý$þ­ýÒýÌþÐÿ¹ÿý’ý¸ü0ÿ ÿÙþÝþþÞýüþÿ}üýæþIþKþ8ÿÄýÚüÔý+ÿÍýµÿéû=þüÐþýáü&ÿcÿðýùþoý]ýhÿ?ÿ]ÿq“þ¹ûÄý¿ÿwýŸýµþ‘þ_þ†ÿåýÜýÿþ@ü ÿ+ÿþñüzý½ýUþLþˆþFþgÿþ+ÿMþýÝÿöþÚþÚüoþ`ÿÕý ÿÇÿÕþšÿ›þ‚ÿ{ý(þˆþþ þSýMþ/þ~ÿþÎÿßÿ‚ýËÿ9ÿËýÿÖÿrýøüdý—ýµÿ‘ýØþ«ü6Ïÿ€ÿNÿÿýµþ·þÙÿ€>þþ þ¿ÿ]ý™ÿÿ€¦ýfþ]ÿÁÿ³ú“ü[«æþOØýôÿ\ÿ²Òü{þûBýDÿZáÿšÿªú9üXþ…$ÍUûÂüXÿŠúq¢¥ýÅú²ÿyÿKgÔþ%ûýý]+úœÿ<þ7ý$Cÿ÷iý™ú`þLÿpÿwþ¥ýÍýHÿ†þ³ÿª%ûNþsüÿõÿwÿšÿcüÞÿâÿ5ÿ0ÿÅV+úû~øþ-—úÌûú ÿªþû+úBúlÿÖþõþ‚ÿÒýžÿ¡û‘ÿ¥úàþŠÿ²ü*úþ.úË`ÿZû§úŽýûRþý'ü0þ þ3›ú*þ¥›ÿ€ÿöý̹ÿ‹'ü"þ€|û÷ýûâ!ÿ ú:þ€ioý7ÿÿýwþ“û•û€#þþŒ=ûõü@²©ÿ"#þéÿØÿmý ÿtû þ0('yû2ýŒþŠ÷=Jü—ýºÿ„û3×}þŠû:9(ùºÿ#û`ÿéú`%ÿž ý…'(:þ…ûkÿugþ™þZþ<ÿgÿE¡#û8þ%ÃfWn ýAðøÿlÿÊàÿèútû;>ûæûäúØtûèú ûúùþÄÿDÿMŠü˜ûÿ‰ý&û$þºäúþÿSûDûPsýtû‘þ•ýü2þ•ÿŽûLþ8/%_þd"gèü&þ€ÁûÝþü6÷ÿäútþ€.ý8¬þgþ‚üˆü€šþýiþôü’ÿŠýnþ¸û×þ–ü$ý¢üýºütþçûÛÿÉÿPýýüôü|üÍÿÄü+ü¸üñû(žþçü³ü[Jÿ±ûüŸýñüÖünÿSŒû•ü§þýPÿ2û]ûÈûHþSü¶û„»|þþüÿ¾þ´ü?þIýûSSü¤üßü7ýþÂýÎþƒü)ý:þð‹û‘þ§þÛÿ:üwüñüžÉ«ýûþÛÿ§þ1÷ûýýý‰û&ýœÿéü ?ý‹ý"ÿCmýnüòüÍü¯üˆ×ýÂüÛÿ„ü‰þiqüÑþbü­˜ü·üXüyücüÂýÄüÒüèûÛþ{ü€kþ‚"ü,þÇÿü€üýçûýˆþÿKÿI€:þ)ÿ¹ýÜûúÅþ»ýþ©ýþÃþ‘þþðýiý ý<ûýqýþ¹ýÇýêúnüãþ\ÐýþcûSüþÔúþñ·üûþUý4þ3þ ýû×üøú§ïÿ-þk$þÉÿýý$þ©ü-ûý:Šýûüæüfý0"þþ4þûNòýÇý@²ý¼ýºü¶ý;/ýiþ‹ýú<û]ýäýÉúü=úzýÕÿ<ûúwúfýHþ/þÈü þÃûºýûðþ5þÆü”ú‚þz'þ=úhþÄýüûÓú7þ‹þ<û¤Ãý¶ûhýlþ ûþþùýþ`ýœý€þþDñý9€,üý>û4þ›ýMú€:xý}ý±ûüÃûü€—þžþØÿÈüáýáÏ]þ>ÿ¯ÿªþxÿâü+ÿ>ûÿ\ËüšþŠþ K(Žýçðýúÿýÿ'¹üäÿ@.çÿÊÿ<ÿ@ýÿëûu¦ÿ¾ÿûüûÿdÿ&JýéÿåÓJ¾þÜþ—ÿëÿ·ÿ<ÿþXf/8ÒýDàÿ&ÐÿëûâüÌQW¦þˆÿbü>·ÿâüëûžý]àþÂÿœ<¼ýUŽýòþ.Xþ2ýUþbüíÿxþÍþ²ýâü‚þ,þîÿ,þÏÿÄÿxýTþÊýýÿ¤þK ÿ$þ)þ€£ü„iýìÿSüpþ€;1ýÓÿÓ¶ýÿ€3¹ýÿ‚ýQñþ ÿýûmÿôümþÚüæý"ýWUüèùèýŒýUýý‹iý†ü=ýEü÷ÿþÚtý3ýkÿ…üû«üþ{ý_ýÿÿRüý mýiû$ûüÚþªüðûÝÿŠêýÇþýVü[Ž ýèþÕý6ûÿòüýaýÍýócþ0ýãýáþ þÊûåÿèqüýrýбÿrWþÆè<üØýDþ þSü·ýEsý½þõý¦dµþÑüsýrNývýèü·¥ýùýèýƒœýýþÿýÃ:ýý‘üýìüûþ@ýHý5ü`"ý€®ÿ\üÝþy ý€2þÑûþVüvÙ€­þÆþkGü›ý˜2ð‰þªÿ“Z þrü»þ…”ªHFü×ýÐþšX.ýKþ&<ü“‘ÄNüz:TxI5¾ûåj‰ûz¬ÿÏÿ¿üOf´ÿèþ3üopí1ÿoÿóþ!ÿ¨³ÿ¾û+þ/„S'F§ý8÷P§ÿ/ˆûrüv˜aü€ü´ûYìÿrüˆûÌûË$ÿš`Åg:ý¨LüAÿa%þÞûŸþ¦¯´û‡Doü ü¶µýrü±þ#þÜü;þÏýÿAüzþâƒqÐþ(¡ý6þ€qübÿÈüAM¬û”þ€Ã5ý€ÿ1ÿ!ýEý€mÿ ý”þ;ý!Ãý‘þüÙþçühý‰ükýýOÿXüöÚÿBý>ýçüÎÙÎüü%ýUüŶýu.ýûü(ÿ7ýûØü±ý0ýýÿ£ÿœüÇühQýÒuûÚúüqþ¶ü×û/ÍýGþý€üKtÿªüdþ†ýJû£ÿSüýKý|ýDþïÿåÿçüýfþìýÎûzhöiü ýNýÆ+  >ÿöhH½ü4ýÑý¯ýžüqýÌYý,iýýD˺ý¼ü9ý  ý(ýcý[ýøüöŽüqÿþýuüC˜üUœü ý–ü&ýÝüîýýýDüjÿü€¿ÿBÿïEüò6•ü€âý—û×ýÌþ€üiö€IšþÛþ{ÿËý@¡þÉþ#þçþ×þ*™ýrý>ÿáþáþzþ»ˆ]þ2þÐþþ¶Ï'ÿ¤ÌþŸþG+“ýþEÿÒþ¯þq­ÿþKþ¯íþuüüü½ýùÿxþ\ý¶r"ÿÎÿÉþkýÐ?.þçÿ ÿÎü­ÿæýÂþýþÿÏÿ›ÿsþ(ÿCÿWýD¯rþ¹þÿ•@“ÿ˜r¯bþ¸þ\ÿDÿþÿtÿý×þ4ÿÚW¼þpþçþ®þ©þºýuøþþr;þB[þ þ{þ3þÀþKþ¹þgþ6ÿÃþ²þûý{þ€‹ªêýÝÿÆ@þ€nÿ†ü›kýI€÷þŠÿ8N;ü™þ>Òÿl%ÿÊ×?þ=ÿü²þ2•}5,üêýiÿ¡þäüVþíÿ4üœ±úþGü÷=*‰…Úÿ©ü¤ÿø³ûZuÿ%Âý.oÊÕþoüœÿ$i¤þôþÎþ¸ÿ¿ÿQ1©ü;ÿѧwíäÈýJß¼`ìÿ³ûüü$µqü9ýŽû&¨ÿü³ûòûOµÿûÿ1ÿU3ýtsü¸ÿ5#þòûýþ⣎ûäiüƒü»œþüvÿwþcý;ÿ·ÿàdüPÿ_ô;/ÿãßþ5ÿ€µü=ÿ´ü· ˜ûhÿ€¨³ý9>ÿ¤þ4ý‘ý€výþ—ý«ý(û©ý›ý ý&ºý·ý²ý}ýÁýÈü±ü)ûíü^ýý‰ýhý"ûuüÓýªýœýšý¬û^üý;ûeªý³ü(ûxýRý±ý³ý­ýiý;ûÝüÏý»ú{ý\ýoýªüÿ‘ý¸ýM¬ügûý¢ý}ýcüæü2¡¥ý®ýmý;ûÌýpªýÔý•ýšýSü}ýý£ýÝü°ýeý»ú)ûšýOýµýû½û¿úoýQý)û»úïúSýþ¡ý°ýÐüªýØû˜ýkûóý†üûýµýH¿ú]cýzûûgý)ûìý ýiûÒýSý´ýaûÞýµý¥ý]ýÞ–ý»ýÏý¦ýäüÑý€¥ûÿüûœýpýÀúëý€®ýYoýpýcüØû2ü€éþÿƦÊüþËÐO3ÎþëÿoVKþ=ÂüÿãÍ&Ü×ü`þÿ3­œýÄþ)ýÍÓyÿ¸ü».x¶”h¥ü*¿ðûðÿ ý×ÌFVGÿåü¦£WÔþ’ÿÿeÿ&á„¥ü’þFÞËñòýÒ"„ÒÿÑkðûÂüä9?üüGýxü *ÂüðûÊüNeÿ{ƒ$Õ´ý<"ý{ÿ„zþêü®þþðxüæÁ‰üýïøýÂüÿiþZý¡þW‰ýÑþ3öm× ÿiþ›þ€ŸüºÿpýÄ´]üùþ€ôIýiÿÔþšý þ€,þ3þ·ÿÖÿüUý©ÿGÿtÿÌÿþÐþ+—ý]üGþÿ²Öü‘ý5þ_ÿå¹ÿÆüîýkÿ'üÿ‚ÿ·þü6ÿ­vÿsÿDÿjÿâû¥dÿEûoÿcþxüÿöÿmþnþ!ü ÿ–ÆþéþcþrþËÊÿ6þâû ý*‘5=ý»zpÿðþ²þKÿDû]ü=ÿï=ü…ü§ûS&ÿ]üDûØû·„þ€ÿýðüJEüœþÿ«ýòû1þzÿ›ÿ§ûgÿ½üü±ÿYý]üþ®ýËü®ýÿÌþ9üçýïÿÆÿç<þ0ÿbÿIý¬ý€1ü¿þ˜üÿþ6—ûïý€Êÿçüé}þÆþÒü:ý€æÿðäÿÅüUêÿ¸ÿ±ÿýÿ[4Èÿ!ÿBþYüÿÿúÿƒÅ³üoþƒÖÿÚÿ¸ÿRýZþÕÿ½üòÿíÿÉþÓüqÿgÿßÖýÿE‰ü˜þ×ÿLü®ÿëJÿ_þÿÜÿ÷ÿ`ÿµþýöþÿÿ$Öýúþ#ÿ/rƒ@ÿ‰üp…òÿ+ßÿãÿ~þ“ÿÌÿôþÿ«ÿKüYü·ÿfÿ”ü(ýü ÿ‹ÿYüKüDübÿ– Ý€þV°ýý‚´­þ|üãÿõÿü “ÿüœüäÿYü¡qÿÔüzÿØÿõüvøÿÒÿZÿ_ÿ:íÿÓÆÿAÿy€‹ý'ÿ,ýºÿiüL€äÿ þžÿÝÿÖý¶ýþ€7†jøÿvþJ0fÿÌÇãÿÉÿ²eUþ‰ýïÿªÿçÿÂÿŠÿSþ¥ÿ”™ÿbxÿØþ$ÿÝÿkþÜÿ\ÿŠþÿwÿðÿÝÿ ýÊþ˜ÿuþºÿ4ÉþþGÿÏÿþþZÿÙþ<ÿ,¹ÿÍýÀÿ”ÿùÿF³þ ý+íÿòÿ a eÿ…ÿÜÿ5 ÿÿuþ‰ýtÿÙxÏýµýòý{‰ýuþÉýgÿĸþÿèÿšþ\–ÿ#þ±ò¯òýõÿ•ÿeüÆýüÿ¶ÿ‰ý_ëÿõü:ÐÿþPßÿ ÿzÿ^ÿ'Óÿë~ÿìÿ;€œþé¾þmÿñÿþa€óÿåýÌÿ,Íý=ÿCÿ€ãÍþlÿ@þñŸÿ³ÙüN±ý2ÿáýþÜýºÒü8Wþ7þôý²ýu~þQýåýý¼èÿ²þ"þëý•ÿ¢ÅüSýµþ3þþ©þÚü»ýïþUBüCüæüEÿvýÄüàÿÆDþ;¹ýºüSˆþlÿ~þü©þ4þÌýùÿþ'ÿÝþû´ýÂXÿ`þüGî87ý³ýþ&RÿÅþÊ8îg:ýÏþÞþ°þÖücþíþÄêþ¡þçˆ@ÿœý.þþþÒüNþºþ8HþÁýNþjÃýÆlþÒýUý™ýýÅéý2þ ý¯Wþ€•çÿÅ.ý<ÿSþ€°þ‹ü~þ>ºü7—€˜ý­ü˜ý}ýéüþüVþÌü«üüýÿü`ýÅüÍýêþ{ýûü7ýëüœýÇþzücü ýPü)þ•¢ýðýêüÄü{KýýûýiýìüÍüÖþ³öüµüŒüQý²þnû üüJ¯üàûÎþzÉý%ý†þÿËýºüáý<ýCû³üîü-ý;ýÕý­ý~ý÷üLýåýüÿÂû þ‹üÍý_ü*ý$ýæ–ý¹ýhþÍý‹üÿèüÚülýjýúü4ýþ?ýŠþïü\ýöýyþïü˜üýü–ýÓüþüU 9ýVüÍýMülýE0üLþXütþMüéü™üTýêü+ýôüÉü7üåý7ü€Åüþ%üíýnýPü€¿ýUü§ýéý†þåýôÿ€JþVýôþêýþqýþþoý7ÿÿýKýýçý#þ þ7ýsþãRþþ5þÅýþgÿ-ý©ý þ“ý‹þB¯þ7þõýÙýºìýHýÌýVþðýÏý  ký¿ý3ýDþgÿëüÊû^ýâþæýý‹½þeÿ¢þþóÿ‘þJýžþ(þÐü ªüþ2þ!þ·þ–þ'þÁýBþºþ†9ýàþ3ýsþ¬ýèý3þ³Èïý…þ)ÿsþ3ý.¶ý†ý8þYþfýþ„þ+þCÿ¡ýMþšþÿýÊý þïýïýËýQìþÚüsþõüþ2Ãü ÿ†ý"ÿôüþÝý þ³ýòý þ¹ýŒý~þÉü€ŠýNuþqýÀþØýóü€§Kü‹þ™þzþS€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€9þæþ½ÿþÿ^ûuýßÝMÿ\iþ0¤ÿSrýÐþ‰ûâý¬ÿt%ÝÿRûöüÏþÝ[“ürý™ÿDû„©:þnû—ÿÆÿftFÿÎûµþ1ÖúïÿÅþPý>ªÿ,+þfûêþªÿÝÿ‹þ7þ=þyÿÿøÿ&Îû¶þœG.Ššÿü '^,¹¸Öú‰ûf{ÿhfûkü±ú‡ÿÿ‰ûÖúÿúÏÿ7ÿgÿÏÿ•þîÿQüôÿoû?ÿÕÿSýñú~þ}y±ú÷¯ÿÐûwû¡þ‰ûÑþ­ý±ü¤þÿ¿cûªþfâŠÿÅÿþÖèüüšþ€ü…þÎû_†ÿ·ú¾þ€…Œý¨ÿŠþ‹þIüsü€NýÀþVýÒ6þ¿þ üÿìüËý¨üšýýWülG?ÿ^ýGýñü&¼ ý‚ü.ýOüMÝýÙIýýAÿTýûÇüÔýMý/ý1ÿkÿ€üÝüÊ\ýŠpûöúü™þ±üáû¯Øýxþýpüð¢Ðü–þ¤ýCûkÿü ýSý›ýIÿXÿ†òü°ý”þøýÍûAËllüý\ýýÿÑfÿ4lË «ürýýýÒýüŒýúcý ¨ý¿ýiáþÄüOýÑ&ýEý4ýÒwýYýl¹ü:Ùý±ü)Áü¼Øüý”üýãüTþ,ýý>ü)½ü€¤kÿ—Nü'±Ãü€þ­ûêý pü1Š€mþÃþCdüûZýt½çÿ(bþêÿ$¿ý|ÿðû{þ§Èjûû£ý¾þùOÆÈüþãÿü®Ûþûû R2žtûÿ³û 8Kû£pÿ ýåd3ÄžþüàÿÉþöþžþKÿ®ÿ=y³ûZþÒ-Œ¦`ýw£,’ÿ¯Jûðû»äûiüzûu—ðûJû²ûº!ÿ=öÿùüÇ*ü6ÿ@ãýÎûXþ ÎzûùFÆûêûͤýðûÁþäý’ü[þÝÿ× ü~þ×8Ÿ^ þ©<¨RýRþ€ü/ÿ”ü >pû¥þ€¹.ý‹òþþêüý€­þÆþkGü›ý˜2ð‰þªÿ“Z þrü»þ…”ªHFü×ýÐþšX.ýKþ&<ü“‘ÄNüz:TxI5¾ûåj‰ûz¬ÿÏÿ¿üOf´ÿèþ3üopí1ÿoÿóþ!ÿ¨³ÿ¾û+þ/„S'F§ý8÷P§ÿ/ˆûrüv˜aü€ü´ûYìÿrüˆûÌûË$ÿš`Åg:ý¨LüAÿa%þÞûŸþ¦¯´û‡Doü ü¶µýrü±þ#þÜü;þÏýÿAüzþâƒqÐþ(¡ý6þ€qübÿÈüAM¬û”þ€Ã5ý€ÿ1ÿ!ýEý€ äþ€þ÷þ- yü4ÿTýÕÿ×þ‘þ{ý¤ÿýþ×ÿßý$þ­ýÒýÌþÐÿ¹ÿý’ý¸ü0ÿ ÿÙþÝþþÞýüþÿ}üýæþIþKþ8ÿÄýÚüÔý+ÿÍýµÿéû=þüÐþýáü&ÿcÿðýùþoý]ýhÿ?ÿ]ÿq“þ¹ûÄý¿ÿwýŸýµþ‘þ_þ†ÿåýÜýÿþ@ü ÿ+ÿþñüzý½ýUþLþˆþFþgÿþ+ÿMþýÝÿöþÚþÚüoþ`ÿÕý ÿÇÿÕþšÿ›þ‚ÿ{ý(þˆþþ þSýMþ/þ~ÿþÎÿßÿ‚ýËÿ9ÿËýÿÖÿrýøüdý—ýµÿ‘ýØþ«ü6Ïÿ€ÿNÿÿýµþ·þÙÿ€>þþ þ¿ÿ]ý™ÿÿ€{ÿ(ÿ·ÿƒÿ5þÞþ¸ÿ÷þ¾ÿSÿÿÿ\ÿdÿÿTþúýrÿvÿ„ÿSÿ%ÿ0þ:ÿÿJÿZÿ ÿ–þ'ÿgÿ6þÿlÿLÿ/þÐþÿ…ÿqÿxÿºÿžýþVÿ·ýjÿÌÿ‰þrý ÿ»ÿ<ÿÊþWÿXþ!ÿÀÿCÿþvÿjÿ0ÿŸÿvÿvþžýÝþpÿrÿœÿ­ÿ²ÿùþ>ÿÿ»ÿ'ÿÆþÎÿ·ýúý*ÿ%ÿvÿþ+þØý›ÿÎÿúý·ýüýÿPÿ‰ÿ„ÿ…þvÿÓþnÿhþcÿ€ÿ?ÿþóþ\ÿÿØý~ÿ9ÿèüþ‘ÿ”þúýÿ?ÿ•ýëþ¼ÿ,ÿ_þéþaÿ"ÿÿ!ÿEÿcÿuÿ'ÿÿæþ€*þÿ}þÿ·ÿÜýÿ€«ÿ…ýfÿŸÿþÌþçþ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ þ þ1ò1ò1ò>V4Dà.ÜøŒ8…ˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?ñd&<ÑÀõ;ÑÀõ;ÑÀõ;ÍR«<% }<% }<% }<~uì>~uì>~uì>~uì>úQ°8…ˆ¾8…ˆ¾8…ˆ¾8û x?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?”y5?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì>Ð+¹8…ˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;†¼">ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì> ‚¼8…ˆ¾8Ä®¡8…ˆ¾8m z?m z?ó\S?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÌÍ<ÑÀõ;% }<% }<ÄYK>% }<~uì>~uì>mÅq>~uì>+Ž8…ˆ¾8®Pµ8…ˆ¾8m z?m z?æJ?m z?ŠÅ ?ŠÅ ?ߎC?ŠÅ ?­?­?g÷,?­?ÑÀõ;ÑÀõ;èÀt>ÑÀõ;% }<% }<8,>% }<~uì>~uì>mÅq>~uì>Ø>¾8…ˆ¾8Ü‘8…ˆ¾8m z?m z?ì«?m z?ŠÅ ?ŠÅ ?ߎC?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;@å<¯l$>% }<% }<=¢¤<% }<~uì>~uì>~uì>~uì>¶l¾8…ˆ¾8¢!±8Q^¡8m z?m z?h[x?×ðR?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?cU3?­?ÑÀõ;ÑÀõ;ÑÀõ;Ë<% }<% }<% }~uì>~uì>~uì>~¾8…ˆ¾8"z¹8ö=°8m z?m z?m z?Þy?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?Š?ÑÀõ;ÑÀõ;ÑÀõ;Ë<% }<% }<% }~uì>~uì>~uì>„¾8…ˆ¾8. ¼8•H·8m z?m z?m z?Þy?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?Š?ÑÀõ;[Üð=ÑÀõ;Ë<% }<% }<% }~uì>~uì>~uì>‡¾8ž©8Jн8øº8m z?ð]?m z?Þy?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?Š?ÑÀõ;¾ <ÑÀõ;Ë<% }<ß+Ž<% }~uì>~uì>~uì>ö‡¾8Ç·8C¾8ø1¼8m z?]fy?m z?Þy?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?—?)?­?Š?ÑÀõ;ÑÀõ;ÑÀõ;Ë<% }<% }<% }~uì>~uì>~uì>Uˆ¾8'ä»8Jn¾8@ñ¼8m z?m z?m z?Þy?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?Š?ÑÀõ;ÑÀõ;ÑÀõ;Ë<% }<% }<% }~uì>~uì>~uì>yˆ¾8X‰½8¨~¾8ÌK½8m z?m z?m z?Þy?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?Š?ÑÀõ;[Üð=ÑÀõ;Ë<% }<% }<% }~uì>~uì>~uì>…ˆ¾8tI©8Ì„¾8¨v½8m z?ð]?m z?Þy?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?Š?ÑÀõ;¾ <ÑÀõ;Ë<% }<ß+Ž<% }~uì>~uì>~uì>…ˆ¾8t¡´8 ‡¾8÷н8m z?]fy?m z?Þy?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?zµ ?­?Š?ÑÀõ;¾ <ÑÀõ;Ë<% }<ß+Ž<% }~uì>~uì>~uì>…ˆ¾8z»¹8ˆ¾8ô¾8m z?]fy?m z?Þy?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?zµ ?­?º-?ÑÀõ;¾ <ÑÀõ;ÑÀõ;% }<ß+Ž<% }<% }<~uì>~uì>~uì>~uì>…ˆ¾8ä¼8Uˆ¾8/_¾8m z?]fy?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?zµ ?­?­?ÑÀõ;¾ <ÑÀõ;ÑÀõ;% }<ß+Ž<% }<% }<~uì>~uì>~uì>~uì>…ˆ¾8½8yˆ¾8ðx¾8m z?]fy?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?zµ ?­?­?>¾ <ÑÀõ;ÑÀõ;% }<ß+Ž<% }<% }<~uì>~uì>~uì>~uì>uf§8Èù½8…ˆ¾8¨‚¾8‰ [?]fy?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?—?)?­?­?dÛ <ÑÀõ;ÑÀõ;ÑÀõ;_<% }<% }<% }<~uì>~uì>~uì>~uì>阳8®R¾8…ˆ¾8U†¾8©Py?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?ò ?­?­?­?dÛ <ÑÀõ;ÑÀõ;ÑÀõ;_<% }<% }<% }<~uì>~uì>~uì>~uì>gâº82t¾8…ˆ¾8®‡¾8©Py?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?žL*?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì>(½8䀾8…ˆ¾8>ˆ¾8m z?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì>’¾8¢…¾8…ˆ¾8mˆ¾8m z?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì>ZV¾8s‡¾8…ˆ¾8yˆ¾8m z?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì>—u¾8&ˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì>g¾8aˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì>Ò…¾8yˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì>‹‡¾8…ˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì>&ˆ¾8…ˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì>aˆ¾8…ˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì>yˆ¾8…ˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì>…ˆ¾8…ˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì>…ˆ¾8…ˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<% }<~uì>~uì>~uì>~uì>…ˆ¾8…ˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;¯l$>% }<% }<% }<% }<~uì>~uì>~uì>~uì>…ˆ¾8…ˆ¾8…ˆ¾8Q^¡8m z?m z?m z?×ðR?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<~uì>~uì>~uì>…ˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<~uì>~uì>~uì>…ˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<~uì>~uì>~uì>…ˆ¾8…ˆ¾8…ˆ¾8m z?m z?m z?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?ÑÀõ;ÑÀõ;ÑÀõ;% }<% }<% }<~uì>~uì>~uì>† •>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>L¦>Å>Å>Å>Å>Å>Å>Å>öT™>Å>Å>Å>Å>ˆëö>Å>Å>Å>ˆëö>Å>Å>Å>ˆëö>Å>P€­>Å>ˆëö>Å>Å>Å>ˆëö>Å>Å>Å>ˆëö>Å>Å>Å>ˆëö>Å>õ”ê>Å>ˆëö>Å>õ”ê>Å>É¥>Å>õ”ê>Å>Å>Å>õ”ê>Å>Å>Å>P€­>Å>Å>Ëïí>Å>Å>Å> g«>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>ŽS@qê¾?ˆÇ?yo?PÅj?ç@ðK@hqc?‡¶Â>ç¶@?„ÅK?aú>i[œ?œ¨P?61?\PQ@ÖÄÒ?õÇ/? ‡'?=F@Ü@Þo¦>RœP?ñI?Sµ?—Z2?ÑÒP?D³/?1â$?WD?ʈJ?G‰?Êàr?Þo¦>I³Y?ËÑ?±%­? žD?õÓÒ?Õ)?.×?H˜=?9ý¥? kÒ>h™O?‡¶Â>}?È>©Œ¢?íF @Ëm?ì«?ìË#@¦š @n¬‚?‹^·?ÎÈ?Â?†>ùìÚ?‡¶Â>Põ@ÞBz@8ò?šã @;ùD??å4?M¨¶?ÔÚ=?1º“@…¤?Y ?Gô[?*þ]@Á±]?ʈJ?LEÝ>0`)?Ðh@Dà?]Ï•@¢ð7?¯zU?€?[Ø]?~%ö>Z²?¯\ @‰D?ü¥¿?3Ä? ;?‡ë"?>Hû>ßÌZ?¾?¤[/?-û@£g?Ó?â?«ñt? c?NQ±?½þ(?¡s? ݹ?LEÝ>6¾R?‡eÕ?†»?$&@¨áW?9ue?Ïá @0]R?œ'$?&ö°?‡¶Â>>v4?¤iË>¶ÂÕ>‡h?.×?ù½,?£é@$ ?=qŸ?Tz?Ù!ã?4Kà>þU?¶ÂÕ>é“Ö?GÉ>!‡Ò@´E@‡Ÿ>þŸc?~¡?úê¼?¶á.?ôê?Z †?*¯ï??\K?&yÏ?®Mâ>n°?Z"@G-½?ʃ?W’,?9M1?L4<@7ø@?’q?ôç?îka?`¦þ>krð>Ï„à>q'?h?"%Ø>óÁ??¥ù)?·T?ž€2?+“><--?)¦ ?·Êç>wÒì>Àê>Íüo>—î–>ò¶>¥P=?ˆ"ö>çÝÍ>Þ7O?ŒCL?ín?·Êç>à]Ð>[¾!?P¯? gò>r9:?Ç>‡>¤¢>?)ö¬> Oå>+× ?ѽ ?`¦þ>é ?„ès?´^*?¦å?ÇEí>£l?^?áÕV?4#?Bj?wÆ>Ðf?`¦þ>yt?Qn?šÖé>ç˜q?&¯®>ªžÙ>á×>;åœ>o?P47?&Q;?ü¸!?C˜r?( ?J›ÿ>ÖÈ>ê9Z?P<‚?ÃV?9ÇÈ@ŒV’>WtÆ>]ž)?™_Ñ>˜Êµ>êr?¨W?Ä*ì>9qo?ÌY±>>ß>-˜;?•+?ÏIð>”Û7?á·>xF ?¾üA? r§>¤¢>?„£f?£÷?¬ (?!&©>øåM?MÉ1?ÖÈ>·ÈC?½±š@ôo`>•Ìi?¶:Ü>1å?Ö X? qï>ÁP?ƒ¬6?`¦þ>84Ñ> ?ú?äúN?¤¢>?ÖÛ±>j1?®t§>4M?3¸6?L)?n?ÓqÑ>ú?ê&ÿ>þ ?‹½U?C½n?a{Ó>EHB?X›4?«çÎ>¿°Ê>ùÐf?xí)?K“Ž@0ýG?X´>ºI"?Áüü>ûËi?®ê]?Â^Þ>4NL?‘ >«Ï?˜-?{Rî>bÒK?D¿¥>Á3>fE?‰Eu?7>ç6?œ†?þbC>ýñJ?_«•?®ÝÝ>p©@ë7T?>¬“?Ö6>ÃÉÏ?Æ¿^?ÜkH@ ýB@J‹@:;Ì>¢Û?}±Q?äëÝ>Ø>F?íïe?Ö6> –?ê|?R$^?_Mt?à$A?Üs@Ž+>œ#]@ð8ˆ?ìTf>¢´6?Á3>;o>VG)?»W?–_?,{[?pÆ+?Zbž>D¶?/Ï@Ñw,@­ªD>tÅ›?Á3>.¤´> ?HŽ@}d?'J!@qCV?gÁ©?ÓÕ@Nó?žN>!~4>Ò;?ud?È%”?õµA?u?&‹U>½?@Šj?\²—>[ç$@<@\«{?ë›é?†3?I€Á>hø?_^?bý…>D’@ yv@~ú¡>×€>XO ?8 >Ðñ8?ˆù?LÝ(?;½ú>ŸO> Ö?|$Ó>öìD?è{½@›‚>G?u?ã”ê>#–?[§@ÃJ ?ì¯~?’­S?­ Ž>‰¸u?Æ??P—Í?Á3>(•1?Q3>/ƒõ=I?Ž+>˜ƒP?‚Ü0?G5ì>ˆ5Y>ã>?kY?v>óÊ @/ƒõ=ú M?&ƒ>t×><ó ?‚¸‚>Ü-?Qì>-ë ?àã3?Çbø>Æèg?Æ£‚> •ø>$Í}@Õéö=ÿÑÍ>1Žû>ìáT>î%?>·Ý?,ÉO>O׋?Këb??2Rr?ÖDÍ>(úK>8¼ˆ?øAœ?kM>Þô?¦Z7@‰2‰>Dh?…Å @þÅ?{ÚÅ?ïp?Ïæ@$g6>R¦?@ö?’?|»¤@¿‡@ÁÁ?·?=P?Îs–?ÿš?­C?‘áŒ?$g6>ö@-k“?0.•?ÝŒ?¹A}? }u@³ó'>QôÅ?•å@Õýn>àI…?(úK> ƒ0>̺1?Štƒ?m\Ž?¾™? ö6?7€Õ>›f?7§¥?¨g·?þ×B>hi@(úK>†ùØ>;ë?i¸?é ?_ðÂ?4ëƒ?‚@p@Ê?Äb>çó}>¾û|?ÇÈ?­ @¤CŠ?R:?p™•>·º?§`‹?›È­>|•&@cQ¿?áx?¨¸?Ã6??‚?n— @ć?YW½>ï¬@ ©Æ?²±Ù>zhP>(A/@naR>àtŠ?È~ @£7h?95M? (>™Úì‡?Z¸?ÀÚP>-™‚?R:?‚˜?=îN?²)h@›?´Lï?kR?øÑ²> ƒþ?ŠœP?yÙt?(úK>7µƒ?ú>=>ø'>1¤¬?³ó'>5@o³k?í/E?šÚ•>&?V>:I„?$7>)»?ø'>C#?íá>>±Ï>¬ý? •€>„º\?æGS>– @»¨†?y°?Ɔ?Z¬ª>²þ*?$ÂÄ?õ&>6¸>Þ?M,”>|Î?{‘?Xª[?ª?V’)?¦„¹>ô4¶>üå?”%s?‡?Å>溭>Nˆn?y¢>‚ÒŸ>QN‡?…gü> ‰ª>Ó$–@ã^>ÆòÛ>k…¦>/dWA¤4˜>R€µ>°1:>ž-e>síŠ> Ä^@^{?Uq–>K&€?ÊŸ>xÃ>/dWAêy›>i„¾>yôæ>v”>8„?¯R>д?Í:†>uí¬>”È1AéÉß>”%s?^F@öi¸>·xÛ>º>´úª>´À>ðöB­>¤>+‘š?6ˆµ>”%s?Ì+?É>SÝ>ò˜>Ã÷‹>ö>¢q¢>cmo>:Í’>xû?žD†? Ê?\ –>â€ú>¥ ×>Ž(;?¨_M@(±>¦Œ­>SÌÕ>yú_><{˜>› ›>b" >¼0o>Î*m?ŒÈ¯>¹“>„B@Ifƒ>nfr>Æg@<Ü„?®˜ž>ÈF?Í¿~>9ï¬>ÏQ?ÚáR>H¹?“H?ŠE>N ?Pc_>½Œ(@e*?Ž(;?bÞ#?Ð[ ?¥™/>\áŠ>^Ũ>fLü>^i'?‘áº>‡²?oÝ?”%s?1 ’>ë@ð÷€?gE2?д?!¶t>Á¢Ö>xïQ>ÑÜ^?‡ç<@–÷Õ>pK@‚2>ð÷€?¡½>Õþ@b ¢>F«”>‰@‘(?|z%@Ï‚Ÿ>Fe’>ÿêæ>ð–¥>‚›*?ß@hÞw>g¨l?Fo><ð?G?Di?Œ9ä>Û[,>uáä>ƒPß>ä$?N¶ü>²Ì>V½<>^Î>ä>}w(>ÆZ,?F³ë> G>e‡?(ö?>Ý–?ïY?êɾ?ÔO>œ»@_¡?ò?«U?ð•ú>˜|œ>Óµ>¡çÕ>†_ª>Ó @„,?ÔO>qÊö>GWÇ?Œ3å>ä]º?'ñŠ?æ•?o>rRº?ò<ò>2™w>x/Ñ>V½<>„‹>}Õ@¥j?@´ÿ>ïWä>ü“/?.ð¢>X§?íô?4i?‰fv>zô?V½<>‹<ç>dõ?@í!?+3?¢€ü>8Û>ݲ?¿²?ç @÷®ƒ>“=>5ÝÚ>d@ö§Š?NìÑ>Ú;¯>K¥|>{>?œu÷?ëT%?‡|?‹ý>þ?» ö>ì²>b­¶>‡ü?HÌè>J>¡‚‘?Hþ>[׊>If#>‡Ô²?Íò0>´†Æ>&?ïÓ>¥Ã¦>¶²>ßz?$AcBm?ïQ?˜Â8>½´Š?Ú;¯>ÜiË>Ž ?‹F?'X“@òÃè>!â>öL >ØEã>"޼>A"Ö>V½<>‘ÓÈ>Ò >z>™q?o>¿@Ë>úf?Ôk£>juc>ŒÑ3>Ht?ss>)°—?z>FÔç>Ä0#>s•?.å?€e_>ËÌ>ãU0>ý7ù>+ÒÉ>HF?“‘È?æ$Ó>ŒV²>D6?P‚>:bÐ>½‘£?@°c>½G?΄?m[£>”¤:@ýÓ1@F??%ðd?Ó7?ò@©>Ik‹?qC–@J¤>,„?EŽ?”×>L‚@Ü}?-3‡?Uv?ö­E@a¨m?Œ*C?FÎ~?Œµ›@ίi?XI~?/U@Ž”‹@Ññ‚?\Æ2@²M@,¸*?/ˆx?Œ*C?N°?l€?^Š?X€?¬Ét?dB€?¨\p>ØYv@šb?$ÜX?Ûi‹?ò@©>ºÝÛ>Ë+?=|f@"k€?’?é(0?Ñ7?W¹ ?ᜃ?¡„ƒ?½Ä?„…?ò@©>ÌÅ?Î?C„k?ËV ?ðÕ8@ Ü~?rú?Ù†?|1? ›> >Ì>`?Á ?ÉáŠ?Šg.@ÕE·AC!8?ú½?#Zr?/ñ>×ï„?«f-@†C?˵$@¿%T?d—>?šL~?n€?YÊ?ÈÁ…?ÊC‡?Ã@vu±>^Ê~?hæŸ>^àJ@-2w?0¡A@(î‹?‘p><ôa?ÐY¯>‹…?ý[?w¥Ã>6!x?ÕE·A:Ñ#?*d]?%mg?ÉW?ªa“?õ›ˆ?”Iì>žŒ?%è†?]o?ò@©>–L?t? Ã>og?¨\p>_‘?©Õj?¥‹?)å>€×>­¿E@>W½>ý…? Ã>Oy?ñ:'?Šìá>¾?A¬y??o?åfÐ> K,@c›b@ù?ã`?ïg?µ^@þx?&õŠ>½>ãÕ7?ØTã>¿ÕÃ?Õc5?ë…@N 6?ëÄP?©c?ɽò>Î?[¬°?o‘ó>­Æ>`ã@åFÌ>¬À>”w@»0?Ñ^Ï>kP?Xdv>¤j?ÛÉ>͆7?=ß°>ã?Í>jíH>–f>ÔÏœ>2ùs?¡&ô>A}µ>ÿ ‘?˳>é í>͆7?Æ´>H¥ê> b?Š–±>ç+?áËe> ò†@fÎ>êÊÎ>{„e?ô ?[¬°?•[Æ?3î>Øbÿ>q„ã>Ï>)u?Þå?ƒº!?Ï>àšÄ>V®ª>äÝ>[¬°?£ÒÚ?¾iµ>‚±>`¿>L—>³«>Á>¥?…>O1¹>°@Ä@Ïø*?ܳ>â?”…þ>·„‹>Ù¬?ì!ä>ô‘Ó>Ô/?vv>Ôœ­>Ú‡§>‚¹>N‹>ã´?çBÖ>Wư>Î>Ý?œ•>Ž9ˆ>€ã|?ìö?b_½>‡i@ª> bÑ>ïñU?Õ°Š>N{†@}¼ƒ?èŠ6>‘e*?5Rr>”`@ Ó%?·„‹>*n@¼Ž-?þ>;>Œ$­>yâÉ>½Y³?n`@þñ>Ƚÿ>Úsv?[¬°?œö·>‚Ǫ?r|Y@ð? ò†@Bï–>fZ ?OîŠ>UGL@îí?ø>ðºÑ?Z‚¥>r|Y@"óÏ>ø¥?Šwù>îy°>ÄIÛ>vM? ï?V^¸>ƒ²>ŽU2?ØÃ>Ê™Ð?Ô•d?ͳŒ>„˜œ@€ág>`@1•Z@Ÿ ?¾Ÿ?¶Žˆ>×ÿ?9F‰?×=?cu@»áÿ>€ú>(•@²Í$@Doˆ>_ (?bEÎ?Éz°>öå†?ôòœ?T•ï? @ëÕ?kº?•b>†\”?¡Ø?±Fo?UãŽ?¢Ü@–³-?»[š@‡ä4@Ê[Q?wï;?Ûž¡?•b>î @ä@>x@?þŽ@h?\„„?þÐQ>°–?Ù@ÊÞ“>'5@€ú>®vf>K¢µ¼¤?€ú>Æ?þ ?°î~?Ü%? 5¯?»àš@ˆ »?ŽñŸ?\­? ¾>¿N£>ÙÉ@´…?vѧ?]@ñ)@?Õ\Â>®‘%?­ë@vÝÚ>ž›?ò¡²?G?c?‡ˆ@yÏAÿ'#?®1?˜B’@µæí>ú‡ž?° @2Æ ? }†>—xœ?vé‰>'I@›—?€¼‰?—´µ@ÌR>äÞc?{o¡>Ù@‹zf?CÑ„>Ž’•?ñ)@?^0?KR?hòe?–¨?D<@[ @¦uÞ>†X7@¢bb?ršˆ?€ú>6e@yUy>FÍ^>×y?þÐQ>êu@ `ž?bÝs@a¿>F„‰>÷e’?>Ol> ¡?FÍ^>»c‘@Hþ{> ã>Ì× ?,ö§>t#ó?m‡>?b·?C¬^@1(?ý9‡?d×>°M?!Œ?æ|\>¨¾>×;?„¸¸>µÑP?è™?=dB@rØ? /*?—×Ë>ÏÌ>dH?vº@Åù‚?)tÀ>Óv@d¤>êŹ>Ÿ+@’ã>6¼>ݵ=?1rv>*™á>]ô´>ø)a?à£>—“Å>ÏL>§ €>BŸ>B»Â?Ôê>>¤·>4uÊ?$¾œ>(˜Ô>ø)a?A²>ÏÑ>§üy?nŽª>Jê?g>êÒ“?¬/>˜¾Ä>zæ‡?5‚?vº@öQ’@>µ½>Ðá>žÎ>–ÛÇ>í<Ì>ZÈ?è‚ä>Lø¾>‚Ö³>Ó€Ê>Ã_È>vº@ºåQ?Ø—‘>Üݘ>Ö¸™>‰˜>N3¨>No¸>Zˆ>¼“>j?>5@Úù²?8J˜>°ñ>Úí>Ëé“>W@¾¶³>m˜¿>]pç>Þ>Xª>´Å•>øY¶>©ô‹>„Úr?U‰Á>”nª>”¼ö?Í£“>W‹> Ú@½@Z@I¯>ek @+§>²Ì¼>aß3?NÍ™> Ï“?s&«?¤$>aU?´ j>GK½?àð ?Ëé“>yøR?Ε?‹r@>æâŠ>lÑÃ>-Q ?Æ£v?Òµ×>†åô>¥—?vº@f˜¸>ºS+@`^†@ï‰C?êÒ“?£Õ > âë>Tš>ð™,@”;E@r‹Û>¸¾u@ › >`^†@¤Œº>'9@¢ƒ®>¢·–>Sû>ÓdŒ?üÁP@"³>Òº>yõ>ây±>ŒP?»½D?ÃMˆ>6H@\"V>¼'?œ4Ó?¤?|„?­“Ø?.„?dÊ‹?”?&?·X-?M®‡?+ëÕ?¸½C? ÿ+??–ì?O?½è'?(Jª@÷—=?u '?#3?ÀTØ>T‹E?Üt ?’Ÿ’å>™¸?DÀ¤?ö(-8£?Ý?¬3?VÓ‹?•\?+ëÕ?´ƒ@s"?ƒ=E?Qð7?Ø¡4?ý )?$­?¿l#?yj-?/S ?’jä>ax1?+ëÕ?›?Œ?Xÿ>û€?~?N¨ ?†<?‚%?Çú>M,? æ‚? §@nàs?þŒ ?HöP?}r!@źÌ>\T’@[Ø?.p*?qþ7?Iê>b?j?)?_?Ú>Tæµ?ní+?¹?z‰Ü?\ù?óTþ>¤šª?$6¦@ó?cºÁ?3?`](?Ï¢•?“?A5£?!Z@­y>]ˆ}?@¥È>ÀÃÕ?ZËn?źÌ>ƒ½‹?„3w?Ö¨¤>"¼ò>¤»2?œ?o?, œ?H®=?¡ 8?·Œ?+ëÕ?æº"?›Rà?}@äž?-8£?8?MàK?ë_?ÀnÖ?Ï•@•A?Û4•@§?}@z4?ˆÖ?:5?‹©?~Æ?E¸—?ˆŒ@â.$?y°"?¬‰A?Å!?µ—?4›?—/ô>ÍRð?ðû”>b…?2Ú¼?§G1? GŠ?~W†>§‹?Ù9p?äî+‰?1F˜?ªŸƒ>ö™O?Š ?0¸©>¸iy?Ñìž?yþ1?ê]´?5®‡?ƒÞ™?7iœ>#ž´?}ñ?ÈÀ?©¼??â@” )?ƒà^?¯”?’ƒ0?3¡g?Ñ9?7iœ>© «?È —?¼kú?wÂ?ºŒø?…uÐ?L{^>ó‹µ?y“¤?jö¾>»ð†?ª{€>Øßr>‡¾f?øˆ??h–?IÎg?ü1?Êã2? ‹ ?jª¯?“@>üÙ¥?ª{€>,ˆ?ÜB?º…®?žŒH?ª¤³?ƒ…?b¯?Ø»?Y8A?æ Ÿ>‹Ýž>lÆ?OJO?™|¡?o–Š??±Ø×>ŒXY?nŒŽ?ð·?G*A@îC@R,@u‚¬?õlC?Å !?¦_?BÉ?­ ô>Q<·?¤$¶?» ?L…>Hª£?‹­ˆ>øR‹?»Îš?ãs?V;a?n±^> S?ç>Uˆ?žx©?']>‡‡†??áš'?œÖi?šOÃ? óB?ön¡?ú}ý?“÷è>’÷˜?8×p@jëx?ª{€>w†?„Å>«uS>±b?L{^>èÝŽ?Ä@~?”F[?Jc½>XF‘>T¸‰?ºr>ií1@«uS>Zÿƒ?ôv”>…`?jS?¾˜Ê>æhg?PŽ>Ñp@ÆçŠ?‚¸??ƒi1@á¦?ulC?G£'@=BV>Ú8â>C?E¥½>DäÏ>Ö¹Ù>5„7>8ÃÚ> QÀ?²ã>úÑ>]r£>ºÒ7>v É>]xÕ> 6>:Šì>¨1Û><\>7Ó>4Ì@ŽÅž>IvÐ>¶«á>Q[à> i<>~=ë>ØsÑ>6Î>Z9@A´ã>:">À°>ñéÑ>GAª>N€¥@¿§à> i<>Ì|•?DÌì>vÚ>†ùÑ>þ9Ý>cDá>ÞÏ>Q£Ú>ðã>Í´a>ÒÔÍ>ºÒ7>Õ)>*ý>½wá>z…ß>d Ú>þs@f•>š7Ó>Æ“É? ÃÏ?rÆM>Ô‡¾?ºÒ7>¸Ô³>½ì>i¦â>²!ð>ÍÞ>3ø?‹³ä>³Þ>ƒÁë>ÄkZ>”S>’9Î>-£ô>A³à>âÍ>ŠŽ>?¼„>g²?®ß>&ß>9‚Ü>&„ä>™â>¬Ðæ>**ž>í¬>=©µ?uÌ>»œ‘>¢ß>o¤Ú>FóŒ>*’<>uyß>T‚7>¢ãÅ>°Bâ>KOÌ>°¨>ëè>ùŒÈ>0¾œ>˜Ø>ˆµ@`SH>•Ý>ŠŽ>3É@ÆñÝ>ŠkÍ>)ê>Vß>r,Ù>CíŠ>Gz×>/1¨>±7Ë>ºÒ7> ðÄ>0E3>DÈ>þ…Å>ÞÏ>èøÅ>ÓÜ>À*¥>‰#j>ˆI>•:â> Ð4>)ã>DÈ>É™Ê>•Ú3>’±Ë>†Ìô>GÃH>}þÅ>y«F>Éââ>?óÈ>æÙ>B6ë>øî©>¦W°>þ&Û> Ø>Ž&YA1XÎ>j>Wý-?$m¨?dË£>a–©?M¾Ž?;j'? D•?¤° ?<¢>Ì5~@ cÀ?ÍѦ>Ûá7?åÃ?,Û>ýЇ?ª?Œ3T?”ñ¥?S5—?]0?&œ›>±¿¦?Žà»?ò£›?uu¬?ï<É?=9F?\ ¡?£ÙÍ?`é[?­bN?ÞÂ1@&œ›>£!É?-¨©?>·?íZ«?À·™?ä÷ª?ºr>»¥¯?„EÇ?X±Â>šî¸?<¢>²Ñ£>ÕnN?4e™?Uû«?ŸjÆ?MÝT?ß?±J ?Tœ²?í+°?(¸•>ü+²?<¢>4˜?Æa?ú·š?@I(?k—‚@½k¬?A@;?@?ÝLÎ>ÔM¤?ù¹1?Ïš³?nõ¼?ë(?Jaÿ>b¼9?´,¡?øþ>'°-@'÷Ã?wÇx?—“Í?fG‹?Õ9?ú+ª?³Ž­?Ñä?ñd·?”[%@×4%?Žê±>)«?П>>´E@ʤ?Ý“?ÍdÁ?H[r>]yz?_z³>‚Ô©?-&?|ª>Ê)#@ë(?8?Þ†?®È™?{<?Ò1@<¸²?&êö>é<¿?Åp?‡x”?<¢>q§Å?*¨¯> $’>’™‡?ºr>fË?1á—?ëÔ¿?5ªâ>(¹>F°™?-«>™¶? $’>Î=§?2ñ°>ðø>«8?0&È>X?úž¶>‹ÏÃ?¸FÔ?ÿŠ6?æ”?þ>_5h?vû§?¯ÎŒ>šrÃ>2ˆO?´ŸÚ>Ì?›Mg?¼ü~>òb?;ÌR?Í2ü>_!ƒ?‹Ù>>ÝŒ> ì·?Å£?rÁ€>šf?ÂÏú? Ï¢>Š(P?dIZ?Ì#"?AmA?ØSS?^@E?¥hm>ä*N?ôÈ@šn?pg4?Òî€?¨œ?¢Ö¸?- @.?Œ?mkm?¥hm>_¢‡?ÏÏ€?ìÕ‰?Èü¥?©Q?«!?Xñ>>pxC?–M‹?±í”>Ú@>ÝŒ>yPj>E?ËrV?Z̓?˜J@G;?(Îß>°¸?Ï…^?´O?b¹“>›~e?>ÝŒ> —à>YÇà>Ðü&?ÀIó>—Il?v6°? êƒ?–’M?š'à>„>^ã˜>gö‰?_èõ>1xm?lð?6³%?MU¿>Â? ªq?¦‘Æ>ÿE?Èn?dÚ'?i܇?ëº?ªâ ? ïZ?à3¬?Çþ×>GÜL?#êg?¨ õ>Ø›‚>W?ý7}>{%@Å£R?sÝO?Bi@:#?>„4?;3’>œ]|?X?|†>ëíZ?6³%??hññ?ƒ—?<~Ü>‹œ?žªƒ?FÀ>]–—?*¢/?/G?>ÝŒ>ø15@ È}>©[>”M=?Xñ>>Ñ¥'@F„@ýí»@š¿¬>à@ˆ>q%V?;ìr>ÖªT?©[>ÁI¦?€>PÎÇ>ƒ7ý>l¤>¾½Z?Æ>¦z?F¾:@ÈÚ?í??KpÃ>Ê$?I3?¸+V>¢ª>åÈ?|¨¥>Vw?õ2v?l¹¢> Wx?§ˆe?O*‘?¹l?Kö;?.Œ>¾˜V? òÚ?­³ž> ”ž@6²r?°æÅ>#Lq?@*{?óa&?JÞQ?Æø?ÙÎ~?½Ê•>:µq?2rd?æG?-B_?êí|?í¿!?u'1?“Ø¿?è2?Ô‹ˆ?ÚæÚ?½Ê•> WÛ? Û‡?ÝÂu?K\?$%€?î [?ÇY‰>ebg?ê«€?<¬º>2`?.Œ>~ ˆ>Y?5ø?¦—@­¡½?Š3™?„è?Ðu?F£…?¯Ø…?FS}>3À‚?.Œ>qÙQ?…’—? r?ÌÕ›@,6p?ȺL?ï0y?vKl?V_—?V6Ö>t‹»>k*Ó?ïƒ@ v? _?-í>|I?n›5@D?É ?‘¶g?“Ë~?þ6Ž@³ƒ?“î ?š8?%É}?×ï?ê?hq?à‹g?è’?ßÔ >’1y?ÜÍ¥>5O?\§õ?!öÈ?*]?å{‰>äF±?K“?S~s?þôL?7 µ>O®?-í>Yn?´o0?K—c?.Œ>;ÄN?’˜>Áûy>öªY?ÇY‰>˜¯M?°‰?êU?gqá>Ü„±>ñ'@…“>u|?Áûy>¶\?D®™>/iv?Qìg@Ô¦>Ö+Z?îà­>£}?\QK?Qw@7zô?QtD?~’=?!Xh?i>qÓÿ>=t?&[ã>¶+Š?øaÓ?ä4?iÙˆ?Dƒ?œQ®@7m?ëcU@.Õ>à#c?%k?c1 ?ä¾@E-Ñ?ŸÖ)?Ás?¼bs?$×K?ìÆ9?ýe…?ôðs?ãÔ²>¤]?Bch?0n&?—F?WUo?šNK?åøB?Vh?~Rj?‘g}?"”:@ãÔ²>ÑLy?{È…?–Þ?ÁøW?¡Å‰?g³8??êñR?Eƒ×?FÃâ>úVØ?.Õ>x`é>ÊÌ…@œû„?9@)Æw?@a‘?È"]?5.ñ@Îè?¨ü{?-^Ž>Vu~?.Õ>1žx?쵊?ˆôZ?ð?’`? `L?ú]p?ÞæU?ìЊ?6c?Û#?íºz?p’?{?3n?Ã¥ê>&üD?"(š?~F}?DÅ?/½N?üQò?6Ûu?Çé?~¬ ?ð+z?ëcw?1eY? ”a?7ñ]?T?¯Î4M\?B?™j!?óê‡?~{?ÈèÐ?n\N?v›s?RÁ6?uÅ‚?.Õ>§¿ö?I1ë>Döö>ƒ³„??â3O?…¡ï?ã‚"?¶ë8?ïÖ?gá„?…?5;ÿ?Döö>E»\?³yè>{g?/’?×ø­>i`ó?ž½?¸bt?¹…T?§‡?çÌü?Èæx?(ü?&ÊP?!ð? ‚ò>†ø‡?ÓTC?àQ2@r›P?6œ@{¤?†@Ô€@?M}? p@yLŠ?Ã?z‰÷>¤]@@æã?›ˆò>Ý)@2!?ãô?Α\?6±¢>ëä!??Z ?ã­ä>-¢ý>̶‡>H1ª>”ÞÏ>ßt?sS ?˜=ä>•‰?íQ?×Û?Z ?ä2ê> ™?xç*?Ыâ>ÀâJ?‹ý™>” ¸@ˆŽ¾> –?I?.?­G3@‹ D?z:?Š?¡¥>o> ?yLŠ?®“r@¿4 ?/dç>#?•½Æ>ÃB×>Ãûó>ü²>ó?è@Œ+@¤C?@O ?bž ?Uì?r1 >¸?!['?Lj ?ÐÌ_?oX§>Ãá> ñ>¿|ï>ˆ¦¥>5‘?@Ëô?iýá> @YjÅ>3 µ>5¹w?cª@é´ô>¼¥¥@ŠÆ>É)?GÖ½?oj§>!f¸@ç?n·>Ç„E?)Œ¢>Ät@[Æ?r1 >‘š?WzP?6u>âa?:Ž}?ÎŒ=?¼7@Œ’§?_È?+IÉ?yLŠ?ì%â>¿ä†?„ß?pfñ?” ¸@Ï]¿>›P+?6€¦>ú…ý? °*@Z?ã~š? Û>„ß?eû?(±ƒ?Vã"?Õ, ?±g×>KÓ?nW+@Üaì>ô?Ú>ìÇï?Êû?±l@…Fw?õ2¼>G@®3–>Vz‹?xbH@éÙ> e@LÕÑ>Q?pá ?Jþœ>Ö6¶>c¶É>uqê>ÕgÑ>p¬¾>ƒDÛ>)‘’>,«²>7?è)Ý>äJ«> à—?è´v>8Ì>'e¤>û¤? Ÿ>R‰Å>óaJ>5jx>üß>5Sª?”kß@”ɹ>Y5?¹' >Ù¿>û¤?Ú0¬>=µ¿>Oà>Tx®>íªò>”9c>1–>KG>ö¤¹>w°?ƒ?ä>uqê>ÿÌ4?Ü’§>{Ì>Ùν>À>úX¬>Õuø>®q¬>0ç¯>TÇ¥>æ_B„µ>uqê>¾Í>¨V„>½è‹>㩉>X ™>½6«>䦭>›ˆ…>=¢…>é°¢>ÌŽ?‘!õ>îUŠ>Wæ>5°Þ>u~?‹¥{?lZ>´°>‹øª>¶||>HG¤>1”>da°>U¶¢>¡8.?)]¯>cr«>·õ%?ðŽ>äIŠ>'L?ñdö>*o¢>ÃÎÃ>xë±>´¿«>jt)?¸6®>>–>6!?¡M{>Ú¥’@øl>6œ?õcé>u~?ÍÐé>¥ ñ>©>>áØ>Kà»>Œ2í>œKÒ>½LÄ>|‡~?-?uqê>1»>U÷‚?XÙ>¸p?1–>Håª>"õÌ>5¯>D»û>ÛW?þ”È>öÇ?ãò˜>XÙ>õ°>­‘Š?Œ‹>ˉ>0·È? ç ?‚ò?L«>kNÆ>'R»>n±£>iò>îž‚?Jj‚>nÍ> ^‹>YÎó>§fò>ƒt ?{0?§ƒý>Òú2?ÊA?±íÃ>D ó>«õÿ>6¶?²ú ?gx?å£?4ë»>~#?kŒ?Mg ?2Ï÷>ìp@ùÃ>“» ?/^ë>ge"@e æ>IK ?ªk«>B4É>£ó>ªÓ@ lN?¯þ>©’{?ý”Ã>?ge"@ÁS?€»?Ïò?IÚæ>'Ú"?“!¿>mc½>z!à>÷%?°+@Fm?6¶?žoˆ?ÔxÔ>nq?ÁO?=¯?q®Ü>hÄ?­×>¿'?§ö>À-Ì?š ?6¶?“;?iY¢>M¼Ô>¦­>õï>|&â>…6?_~Ö> ££>ñëÕ>b?Éa$?Îb­>Ô($@>”?w"?ŠYP@êÇ>wô>gšÎ>° Î>w‰û>_Ó>M*?Ø©¾>ì12@‡lü>Ùç>ØùN?Qß>•šØ>…ž@Ò?>¢î>kÆô>vTê>²_ö>Ò}@\ÇÌ>¶z½>þN?ù³e>p,?O‚¶>Z§#?û¢?w"?×?HÑ?¾3¥>Ö¥œ>c?ÿE"?øø?ñÛ ?F%ã@’µ+?6¶?ü¤ó><ê?—èõ>§æ=?mc½>ã>s#?ºAË>Ó?£E?A ?†4?½¦é>—èõ> ê>iý?g§>hö­>Œ’A®Î6?9"Üö>Oä>“á?«ßN@“Î>Ô+î>`P‰>Ï??J?Y*i?¤ÌE>@J®?R°G?ɱ?DXa?º´Î>ÃR> äc?áȆ?þ¦B>9½'?ª0‘?@£x>ø ^?ᣙ?¥Z?¸->@@l?qX–?g>QvÃ?îây?à]@ÃØ @‡@ @øxþ>B$.?^Ïs?–à?Q-T?~}?g>íßž?õ`ˆ?š^ž? Y‚?â‘?œI(@<Â#>ð@hð“?Iš>°œX?ÃR>oJ->|ÇA?  o?ÙÆy?ÞØ{?ÎÆC?Æ>†ä?í×?Nz@Âg>ª ?ÃR>oà>S?æ²)@ö^?nÜù?çÝk?N0¬?Ÿ¯û?NØ?°y>èg>‹KX?î¹#?ËÓ™? ~b?ˆ–?X)‘>M-?íd?,¢Ï>O°0@Ö@~8Ã?„¨Ì?oÙ'?«¯ñ>B–?’t?t®>ÏØ÷?ž@3ÈÎ>HÊ>>úá?1J>+]?9p“?>ðE?ä!?bí#>ˆQ%?ŸÛ>+c?òE@“ÿG>MPc?ˆ–?{ ?É&7?ž«C@´ó!?7;?Xñš?ÆG°>û0‡?¬ïÁ? '¥?ÃR>æÖT?&H>¬¢>½Í9?<Â#>¹>o?ì6O?Ö¶?pnŠ>J>€q?/*>»®@¬¢>¤ôd?e¹L>¶€ý>P:(?…Cž>‹:?~G>8Ò?„tY??è¼?Vš¯>`m?²ÈS@¯>Ž|Ö>G}?¡óˆ>,”„?(F$?^&.@æÿ#?Ãê7?ºãé>õuÚ>{Áƒ?D‹W@©ÖC?'ËÂ>n©C@œÆ²>Ž%¼>ͯ@8êï>EÃ>X€D?ïlv>füì>q¼>aWP?¶5¨>ÄtÈ>fäJ>$Ô>Sž>o £?')î>;Ò¶>Òi²?S ¥>†‘Ý>aWP?d³>PêÚ>òJ?‚1­>E ?$”f>¯¾ñ? Ì>l€È>Cå~?ú¹N?D‹W@hB@µÊÎ>Òì>4HÖ>‹Ê>ŒÕÞ>^.Ó?‰_?:òÄ>¹º>þŽ>ÇIÐ>D‹W@œºŠ?Gž>5Ë¡>7§>^˜>U…©>«»>V÷†>ù >„¡ ?üz @>/‡?@9¢>Cýû> ô>Òª>ÆãÜ?‚ÁÄ>éòÆ>C¥?ÓÅ{>Á­«>|Hœ>¬d·>Qµ‹>E?ï(É>BЬ>$ºì?r/”> &Š>á4Ë?0Ê/@ì´>rJ@Ô5£>í]Ä>@?áà“>•iñ?»ôš?x9+>³?V&m>Ah@?˜?Òª>&- ?Aø?t>>Þ—>§Æ>a¡F?êäÛ?VVá>¸õø>'Œ?D‹W@äZ¸>çƒ@Ÿüw@¨…‰?¯¾ñ?&>Οú>Œ ”>à8@KŽ"@»ôå>ªÖ1@±s¢>Ÿüw@tgÂ>`3ô?¨àÇ>> >š{î>Li‡?Lé(@‹µ>u ·>Šr ?fñ·>~‡?ŠFP?1õ‰>Š.m@>µ\>83‚?ß4 @Ša?Æ+È?uv>=–? %w?J@? ï‚?13æ>Vr>ùÓÞ?ÜÒ¨?²v>Ì#?ç8@bH£>†v?Œaè?Ð}*?ÐS¹?ª$‰?ôzÖ?S~^>,¢ @»† ?î¤@@2Îú?þÄ?rÑ?#ét?-©? ÷0?È7G?®ÄÆ?S~^>ß2ô?_S›?§¡?Ôí–?ˆ?ÇÔ%@£X½?ò‡ì?ÂG>¥Œ–?Vr>º(^>¨ç;?¢8‹?Lº˜?擨?WŽA?l½ñ>¿'?¦[ª?Y®´?¨šd>Ñaò?Vr>ò>ñÞ?’ެ?Û?SŸ @̺‘?ìn$@9$@ì ?4R~>A˜>€i‹?nG?øë?[K›?JŸ?¾ƒ¶><î$?š“?ÿ&È>í0)@|Á?C\x?éÒ¿?ÕEU?¦N?%æ?F”?ô<Ý>>ä@žð?¬;þ>WG~>e]@Èu>ߊÌ?Oã?¸~?Và?¸@>zÃQ?D³>“?ç¨?ÀYz>Q•·?JŸ?ïÍ?ô]d?Íî@ö—?n @TCœ?ÍÉ>mÙä?Î[?`‡ƒ?Vr>+™?42n>8¼M> Ð?ø,ì?8‚?¾|?QÈ®>bLƒ>aß‹?Mg><¹?8¼M>Q?T#p>$´Ý>8$? ”—>¦ås?ð|>™Æõ?~Ÿ?X?')‹?çÅ>Rš??Û…¹?ÉJ>_=¼>P(0?¥;«>Ÿ ?¾Ÿ?¶Žˆ>×ÿ?9F‰?×=?cu@»áÿ>€ú>(•@²Í$@Doˆ>_ (?bEÎ?Éz°>öå†?ôòœ?T•ï? @ëÕ?kº?•b>†\”?¡Ø?±Fo?UãŽ?¢Ü@–³-?»[š@‡ä4@Ê[Q?wï;?Ûž¡?•b>î @ä@>x@?þŽ@h?\„„?þÐQ>°–?Ù@ÊÞ“>'5@€ú>®vf>K¢µ¼¤?€ú>Æ?þ ?°î~?Ü%? 5¯?»àš@ˆ »?ŽñŸ?\­? ¾>¿N£>ÚÉ@´…?vѧ?]@ñ)@?Õ\Â>®‘%?­ë@vÝÚ>ž›?ò¡²?G?c?‡ˆ@yÏAÿ'#?®1?˜B’@µæí>ú‡ž?° @2Æ ?¡}†>—xœ?vé‰>'I@›—?€¼‰?—´µ@ÌR>äÞc?{o¡>Ù@‹zf?CÑ„>Ž’•?ñ)@?^0?KR?hòe?–¨?D<@[ @¦uÞ>†X7@¢bb?ršˆ?€ú>6e@yUy>FÍ^>×y?þÐQ>êu@ `ž?bÝs@a¿>F„‰>÷e’?>Ol> ¡?FÍ^>»c‘@Hþ{> ã>Ì× ?,ö§>t#ó?m‡>?b·?C¬^@1(?ý9‡?d×>°M?!Œ?æ|\>¨¾>×;?„¸¸>ʃ?W’,?9M1?L4<@7ø@?’q?ôç?îka?`¦þ>krð>Ï„à>q'?h?"%Ø>óÁ??¥ù)?·T?ž€2?+“><--?)¦ ?·Êç>wÒì>Àê>Íüo>—î–>ò¶>¥P=?ˆ"ö>çÝÍ>Þ7O?ŒCL?ín?·Êç>à]Ð>[¾!?P¯? gò>r9:?Ç>‡>¤¢>?)ö¬> Oå>+× ?ѽ ?`¦þ>é ?„ès?´^*?¦å?ÇEí>£l?^?áÕV?4#?Bj?wÆ>Ðf?`¦þ>yt?Qn?šÖé>ç˜q?'¯®>ªžÙ>á×>;åœ>o?P47?&Q;?ü¸!?C˜r?( ?J›ÿ>ÖÈ>ê9Z?P<‚?ÃV?9ÇÈ@ŒV’>WtÆ>]ž)?™_Ñ>˜Êµ>êr?¨W?Ä*ì>9qo?ÌY±>>ß>-˜;?•+?ÏIð>”Û7?á·>xF ?¾üA? r§>¤¢>?„£f?£÷?¬ (?!&©>øåM?MÉ1?ÖÈ>·ÈC?½±š@ôo`>•Ìi?¶:Ü>1å?Ö X? qï>ÁP?ƒ¬6?`¦þ>84Ñ> ?ú?äúN?¤¢>?ÖÛ±>j1?®t§>4M?3¸6?L)?n?ÓqÑ>ú?ê&ÿ>þ ?‹½U?C½n?a{Ó>EHB?X›4?«çÎ>À°Ê>ùÐf?xí)?K“Ž@0ýG?X´>ºI"?Áüü>ûËi?®ê]?C÷T?ÆFg?˜?b§g?Ù¨i?¬7?[çK?Q:?ðù>ÔSS?ýtI?e„?ž3?LcK?Sô?T6O?õU?+–G?(?±ÄW?sT?gÑÛ>®^J?DP?|4?+¯5?žC?auJ?zÎ;? êD?¥S?~Ø??s\S?gÑÛ>¸‘Q?ë^?w²e?ôÀC?äh?½¹%?uzã>ˆ0>?&hS? ?d©^?ðù>h:ú> ²H?§¢W?¥uS?ÀÿP?æM?üèC?–:0?‹0Z?8®U?°µª>Éc[?ðù>ÌC?†{.?DÆ>?èû-?RI;-?{?•²?”Eg?ø 8?'¡c?\ÀN?´þ>Òb-?›¶=?¢aW?#-+?Ñ41?åxI?„ê9?(N? z ?¢ER?»tW? =?ŸB?rìF?Ö5?6=?¹ ?8iP?qM?Å@5?*R?óZh?t?Ó–ã>GCn?Ó´Î>‹Äh?ñ&?Ê=?;Zj?´þ>¼èO? ¨_?¨=?x +?NQR?Êd?Ÿ´1?ò3V?òk=?rÝn?ðù>gû¤Ën?uzã>ªß4?ª/Y?BQ?=´(?ºY?F]B?Q:?Ô¢?Ô~8?š Ù>i?X©?*dM?ŸÎ9?qE?8S?¨)9?Õ2V?ö7?!pï>ÆVÔ>EÞ_? ø&???5îó;$~?5îó;$~?5îó;$~?€OÃÇ€OÃÇ€OÃÇ€OÃÇ€OÃÇ€OÃÇ€?óðæ³óðæ³Vfn3 PF00041.13Fibronectin type III domain ----CEEEEEEECTTEEEEEEE--S--SS--SEEEEEEEETTTCCGCEEEEEETTTSEEEEES--TT-EEEEEEEEEETTEE-EBE psaPenlsvsevtstsltlsWsppkdgggpitgYeveyqekgegeewqevtvprtttsvtltgLepgteYefrVqavngagegpesêè»èéèéè°èéèéèéè€ÏÿþÿþÿÆÿÍÿþÿþÿ€AþAþAþAþÛüAþAþ€¢þ¢þ¢þ¢þ¢þ¢þ¢þÏìýìÏìÏì#ýüÏìAòIùmûØîØîtýØîØîØîdùýÓýÓýMÿÓýÓýÓýêèÞèéèéèçïçéèäè¹ÿ`ÿþÿþÿåûÿþÿùÿ·ÿ¿þAþAþ»ûAþAþAþ¢þ.ÿ¢þ¢þFý¢þ¢þ¢þÏìÏìWüÏìIîÊíÏìÔìØîØîØîØîRð ûØîÝîÓýÓýÓýÓýÓýœúÓýÓýêèåèèéèºèèéèèèþÿþÿÿþÿüÿSÿþÿþÿAþAþAþAþAþÿAþAþ¢þ¢þ¢þ¢þ{ÿþ¢þ¹þÏìõyûL÷ïì+íÏìÂüØîØîéýØîøî4ïØîØîÓýÓý½ûÓýÓýÓýÓýÓýêèÚè çÉèÜèÙèéèØçþÿðÿÒüÝÿýÿýÿþÿëþAþAþMÿAþAþAþAþAþ¢þ¢þJû¢þÿfÿ¢þ¢þÏìÝìTîðìÏìÏìÏìáí@ùæî]ðùîØîØîØî,üjùÓýÓýÓýÓýÓýÓýQýéèäèèáèåèãèéè èºÿþÿüÿýÿþÿþÿþÿ(ÿ·ÿAþAþAþAþAþAþ¡þ¢þÝþƒüÿ¢þ¢þ¢þýúóÏìõíÏìÏìÏìÏìáíØîØîþïäùØîØîØîêïÓýÓýÓýŽýÓýÓýÓýÓýãèèèÇèæèèèçèéè@è÷ÿþÿüÿ§ÿþÿþÿþÿüÿAþAþAþwþAþAþAþAþ¢þ¢þoÿ¢þ¢þ¢þ¢þ˜ûÖìÏìêìÈõÏìÏìÏìÎíßîØîóîØîØîØîØî×ïÓýÓýÓýÓýÓýÓýÓýÓýçèéèàèÖèéèéèéèÁèþÿþÿýÿëÿþÿþÿþÿýÿAþAþAþAþAþAþAþAþÁþ¢þÿ¢þ¢þ¢þ¢þ$ÿ…öÏìÏìâìÏìÏìÏìÿìØîØîØîëî6øØîØîïÓýÓýÓýÓý«þÓýÓýÓýÐèéèæèàèéèéèéèàèåÿþÿþÿýÿÐÿþÿþÿýÿAþAþAþAþ@ýAþAþAþ¢þ¢þ¢þþ¢þ¢þ¢þ0ÿèìÏìÏì>ùÏìÏìÏìÏìñîØîØîëîØîØîØîØîÓýÓýÓýÓýÓýÓýÓýÓýâèéèèè£èéèéèéèæèýÿþÿþÿ¹ÿþÿþÿþÿþÿAþAþAþAþAþAþAþAþþþ¢þ¢þíþ¢þ¢þ¢þ¢þÏìÏìÏìíÏìÏì¿ò€ØîØîØîïØîÖôãõ€ÓýÓýÓýÓýÓýOüÃû€çèéèéèÛèéèéèäè€þÿþÿþÿýÿþÿñÿåÿ€AþAþAþAþAþÿKÿ€¢þ¢þ¢þKÿ¢þ¢þ¢þ€ÏìÏìÏìÏìÏìÏìÕì€ØîØîØîØîØîØîÞî€ÓýÓýÓýÓýÓýÓýÓý€èèéèéèäèéèéèçè€þÿþÿþÿþÿþÿþÿþÿ€AþAþAþAþAþAþAþ€¢þ¢þ¢þ¢þ¢þ¢þ½þ€9øÏìÏìµøÏìÏìÏì€ØîØîØîØîjøØîØî€ÓýÓýÓýÓýâþÓýÓý€Oý!üOýOý§þOýOýOýOýOýOýOýüúlýOý)ýOýOýjÿOýqü[ûOýOýOýäü ÿküOýOýOý{ÿOýOý3ûOýOýOýOýWÿýOýŽüOýOýOýOý=üOýOýOýþOýOýOýüüOýOýÃüOýOýOýOýOýOýOýÃûOýOýOý€OýOýOýOýOýOý ý€OýOýOýOýOýOýOý€:þVÿ`Öù/ÿœ{ÿòýŒÿ6þ­ÿ™þ™ÒþfgE G”ü‘ÿQÿ ÿæÈýiý^ÿ½ÿžÿ(XõËþ×þ2ÿÚþ¯þŠþZþ„þ&ÿoÿ¯Íþ ÿöü(þ£ýÊýµþ;ÿ­ýjþ3þàÿAþûü‚ÿøÿm¾ýŒü(1ùþ’þŒýIÿŒø§šþ«þ‹÷ÿÿþEåþë€]fþþkþYÿ&ÿ€ý‚ÿ?ûëúûøú÷úkþùúôú7ûóúƒü­ûþ’þòúñú…û+ûÉEûòúÞýlýûåûƒþGûAÏ÷ü¬þòú=þÏóúûûúÿÿ÷úÐýûw³þ»ýþÿûûÅýšþÿúýúûñúZûúýÿñúQüïúWû¯û•ñúÏýûëýÞù þû¿ýùáþðúòúòú;ý€ñúñúÿú ûòúQû€‚û#ÿœýnö½*þ/Nëÿ½þ€ýÿyýû]þÌ¿ôgöý›¨§û°oPÿø¤ô}þ+þçÿ ªøÃþÐÿ2þ§ÿøSþ«þÿýƒø´ý™ýŠþƒÁžÿ^ÿ®ÿÎþ^÷/•†ÿõUýœø¾þ¸˜œTû¦þ¬ý ûôAEÿTÿ¶ú€ïà`ÿ\þ.‘ý5ú€Tþbÿ6õö&H¾ÿáþ7šÿGÿ15ãÿftf`]õ°Ô¹§ú5ÿ¾à‰þ¬ùÛó×ÿhz0ÿÅùÌx*  ¬ù!&êÿ§ùŸù™þLþ|@8ÿ5¸ðÿiø¼ÿ Ôõ·ùò¿ùŠJõ0BÿÉúô!àpÇŠü€Ú³¾ÿoÔÿ¹Ÿþ€Ûü´ûú'6úú0ýúúúvú‚þÀýíýŸúÊûúú>úšüÿÿýpû+ý%ú¦ýQý~ÿIyþ8´üwû®úCú,ýÿ.ü.%úNýF³4ûþ'úúbÿ§ýú3üPü]úeúæûú@þ€úEÏü£ý$ÿûþAú_úØÔýúúúãü€xÿü[ýÓûúšúúÿ€·ûXûZþl÷’‹ûÚ[ü-ߌýLüîþ;þtû%®ý»ÿ1ýAõ¬þ&þþúú¤þ{üŸûxû¬ûØô m¨þNú‚ü…ûãüÂÿïþ HýKýúÎû¦úü/[ýˆûnýäülXýÃøºý+ýçüÕõµýïý½ýÔûLÿîô|ûKÿ:üžõaû†‡±ü‘þ€2püW5þtû]ú€þßýœÜzEcÿ$þ%þþøÿŽqÿ&þrgüõo,’GücÀ3ü†þÿµÿðþ9˜¦þÕÿ{þÛÜþŸÿ2ü:üvÿHüÑ"þƒœÒ}ÿ‚,Ôú!ÿžýe ÷èýJü Kü;ÿ³ÿZ÷ÌO±ûñýg&þÍÿ¥ü€ÿÐÿ˜þóþI€ƒþ•Bÿ·ýµûuýqú ýuúmú#ü%þåþdþ×üõûiúfúüú³þ0ý=ý¤ÿ^šýpýºÿPÿþÿ‚÷{ü{úiú™ýýÿÿûðÿþlÿºþjGþGþÝ·Þ·ûì=ÿ3þÁûÆÿhú‡ý÷ûýÁšýþþÇdúzþífú/•úrú Dÿ_üqÌü(ÿeúŸûþ­þ€húEý~üýŸû ûñ€…ýxÿf‘ýR!ëÿ‘ÿxÿÜÿ'ýÿ&\—:¼ÿÒ¼õ¸Úÿ–\^ûÿM¶žúàô2ÿv¨§'ÿ¹ÿŒºs¤ÿúæ0”ú‘ú¦ÿ¸úNÿŒÿK¨Iù\ûþóWöÑÿü{¬úqÿÎõ4‹ÿúþõ3I<=ü€XÿÇ\ÿcÿÙþ€¡ÿ!ýäüEþ.þ=û>ûGþüaþlþŠý¡ýLü…ú[ûmûDþ¾–þ2ü þ‘ü8þ’úvûfýÁþ‹8ûý–ýƒúqÿ „ú¢þÜüÿ8ýÎEûËýçÿЮ_þªÿpü†ü3ýFû„úâüHû}9ûåþßú¢âþH„ýs÷ü„üþ þ§úYþ›ý ýQþðþƒþ€‚úàýóûý‚úòú\€]þ¼¦üü…ügüfüeühüþŸücüÿ|dübü`üõüÁþ,ÿþ­þþšþoüTý‡ü(þ‹·øÖýþbüÿÿvþËêýšýfüksüŽümÿüÿ 5ýoSþRˆÿ„ÿîþQsü;þîþÿýjþþæÃþŽüfüŸü{üÿµûIþžýaü®ýYþ€aüíý5Daüþ²ÿ€Åü“Gÿ-ùSþ¥&ÄÿªÁÿu"ÿ kÿ»ÿ9ö ÿÉ6ßûH±‘þxûËü`ÿ@ÿ*Ñ!ûÈÌüÝûüIÿ°þû ûþ#û Ëÿø=o×ñÿ¿ùJ{þ•lÎö´þûpû§tÿÛõXÿlþ|ÿÞ÷Îÿì]6ü€±v€ÖŒ€ÿïû€aþu‰÷îþÍÿvûØÿ wû‚wûx`û‡ü£(Öõ^þÒÿýüÁ€ûrŠûþú4õéûÓþwûJú!ÿ¸üuû²ýœþúUÿ3ýûú úþ×Öüyü»%þwû2ˆûÝøEÔþ†üýQö¨*üxû5ÿ£ûŽögûhûÓüFüMûxû…nýiú€Zýtû”5Yú€þûÎÿ/ùƒv¹ÿ¸ÿÌÿ^Œÿ¡?}O~…¢ÿÂ4ö‡· æû/ÿq´ìgûX÷]ÿ?N„uû;2åM8fû`ZZû(ÿxû­i5xÕˆRúì>NþôöFÿ¨þûhý(&ÿ§÷~ÿäÿÛ÷Ô«áÿ^¦ü€HÌ ½Æÿø€Qü¤ÐÿVø3ÿÿ ÿ†ÿÍþ,Ìý ‰¤àÿÉþȇõHþ‡@ÓÿšýŠÿ‚’nüðõ)þÖªÿwþÍyÿ};ÿßú!&ÂÏúÒú¿ÿéúŽoÿ_ýj{›‚ùÔþàþdþHö–÷üyçúgÿlööhÿN¸öÓÿ´ÿp3Àû€¶ÿÄÿÕßýÝþÀý^€rþãþ‚ÿTùP:{Ctíµ.ùÿU²×ÿ•ZÍö´àþ#ütíÿDÿü‚ö€6ñ˜ÿuýºnÿå‹ÿºþü/ÿýüü¯°š%+ÿ$³úïÿ5ŒþØÿ÷Ç­ýR#ýl¨öÌþ…r^÷Ìé¥ÿ€àôôi¼þ¹ý€(ÿ”`EúÑÿlþø_ÿƒîþÛÿ®Ÿòþ % úŸµ#ÿvþÊ@Ô©ÿéõxï+ÿÿGýŒAûþ3þSÿ ÿ‚ÿ^ýhýþmý{3ÿÚ©ÛuµÿyZýf*7Èýeú÷ÿûýBþ[¨ùÝI‡øOÉýa €¼ÿmÍÿTÿ!ÿ€{ÿÿØý<ý³þüEü‡ýJû]ÿ­þâªýnÿðþPþùû®ýHÐþñý>ýÜ×±ü!ÿþký5÷ýDý™ý‹þ'¯ÿuÿLûÆÃüþ4–uSüN®ÿþ¶þùþ`ý|þÿ2:ÿ4Dû,üpFûHrýGÿþÀÿmûËÿæùCÑüùû2ÿÑÿ€ÿAýmþžþ¡ÿdüÔ€@üûk®‹úÕþŠúŒúGþºúˆúA;ûÐú‰ú‡úÔÿûo÷oÔú±ÿŽúdü”úyûªú þxÿýýÜûÿÿÍ&ÖŸúúõ‹úÜüãþæxûÅüÑüRûÐü»þú’ú”úÄÿ:§ú˜úŠû†ú¶ú–û„úLøÊäÿyþ‡³ú‹ú¡ùºú›ú»þê ]þ…úl‡ú8ü€†ú†úcþ˜ú†úÉþžü€¾þnü?ýtâûÀûs<ÿÙý¾ÿÞûÀþÑzìûÀûþýýþø÷ûùþ¾û‡þüü³ÿ‘þRÿ‡ýÑq Wýnþ.\ÿÀþeÿ:Êþ/ÿ•ÿÅÿKQýPü^ýþþÝýÉûÆû‚ý©ÿ'ýÏûüþàûsüÙýÙø+iý½ûF3ýÀûiùÇû¯ý‚ÿký½û5ýïþÛü€ƒÿ=ý]Sÿýý¹€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€üÄÿWþ¡÷Oþckûâ.ÿëžÿ(_þþöþudõ_1ÿNÀ–ûb¬mÿ±ªù3øàþ¤þm½ù¥ÿ>Ùÿ|I©ù žþ­þ³üù þ†ü1ÿúÿ¶×iËÿ_ÿgøËªÿüÿ0Ùõîý³ùëÿFþ«ñøôþÿýÌÿ=ö0JmÈÿ^û€D!MPÇiþöú€Óÿ­ðý4ýLýèýïúíûÔükû‡ýQþþëýüûÿú ûýÞiþ’ü¾ý¼ý ÿ¹û6üIþ÷þVÏùÒühüyú¾þû!ÿMý:ÿÊý¨jüúýDÆ‚]ý ÿý;ü-þòú©û‰ü&ü6 üïþ7uú·’þèUüÞü»û¼þNû%ÿMý´ÿ üKýšþ“þ€xú¥ý(üdýîúûú•€:þúÿÉ÷êú¼ÿ1ÿBaÿî×P ÏÙ¾&­õ£ÉØû3ÿ/*Qú'õªÿ¸ɯÿeú7½{Pú}@Ô%üDúÎþ?ýíO$-=q¦Óù¨)4ÿ?öŽûUûÅÝÿ ölXÿt ödm;ÿ•ü€E¼ÛÿªŠ_~ÿ€…ýxÿf‘ýR!ëÿ‘ÿxÿÜÿ'ýÿ&\—:¼ÿÒ¼õ¸Úÿ–\^ûÿM¶žúàô2ÿv¨§'ÿ¹ÿŒºs¤ÿúæ0”ú‘ú¦ÿ¸úNÿŒÿK¨Iù\ûþóWöÑÿü{¬úqÿÎõ4‹ÿúþõ3I<=ü€XÿÇ\ÿcÿÙþ€ý‚ÿ?ûëúûøú÷úkþùúôú7ûóúƒü­ûþ’þòúñú…û+ûÉEûòúÞýlýûåûƒþGûAÏ÷ü¬þòú=þÏóúûûúÿÿ÷úÐýûw³þ»ýþÿûûÅýšþÿúýúûñúZûúýÿñúQüïúWû¯û•ñúÏýûëýÞù þû¿ýùáþðúòúòú;ý€ñúñúÿú ûòúQû€lþdÿ<ÿ9ûNÿÿËþ©þÿ¹þÔþUÿÁÿŒÿÇþ ÿÍþûþqÿ*úÿFÿxÿˆÿŸýŸþKÿ@ÿxÿþô÷ïþ`ÿÊþÿþìþ4ÿ7ÿÅÿÿþ-ÿRÿ”ÿìý¦ý¥þIþÿ<ÿÿ;ÿ'ÿçþYÿïþ½ü%ÿ~ÿWÿkþŽúhÿvþÆþ}þïþ,ÿ)úSÿ$þdÿcùjÿúþ4ÿNÿKþ€2ÿ+ÿ:ÿVÿñþ/þæþ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ þ þ1ò1ò1ò>V4Dà.ºj‘9‹ç9PÓ…9‚ç9Ý"?«-l?Ý"?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?o:o:$E¹>o:Nܼ=ʶ;obÏ>ʶ;ÌÄ=~uì>¿G?~uì>òñ9¸ç9±i39¸ç9…h?Ý"?g°n>Ý"?|}g?ŠÅ ?°a>ŠÅ ?­?­?1pÂ>­?o:©‹>Aûó:o:ʶ;ʶ;6{;ʶ;~uì>~uì>~uì>~uì>¸ë9»S9®¦‡9Êç9Ý"?r–9?ÛŠ~?Ý"?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?–ÙT?­?o:JWM>sê–:o:ʶ;tÉó>Sc;ʶ;~uì>º“a>~uì>~uì>Yé9ú£79QŽ9Ôç9Ý"?*‹¥>?Ý"?ŠÅ ?=›G?ŠÅ ?ŠÅ ?­?:b@>ÑŒ7?­?o:•÷:o:o:ž»º=6ë~;ʶ;ʶ;ÀåÅ=~uì>~uì>~uì>‰è9|6V9˜é9Üç9L`h?þ„~?Ý"?Ý"?pCg?ŠÅ ?ŠÅ ?ŠÅ ?­?–a”>­?­?´%<šÙ:o:o:ʶ;¦‹_;ʶ;ʶ;~uì>~uì>~uì>~uì>í™9)Š9P†9Üç9}Ô|?ì³~?Ý"?Ý"?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?ÀjQ?­?­?™¿‘:\ï•:o:o:ã;Ì`;ʶ;ʶ;~uì>~uì>~uì>~uì>5r9ªêŽ9jÂ9Üç9ç ?_?Ý"?Ý"?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?¶h$?J¥4?­?­? =o:o:o:ʶ;ʶ;¬=ʶ;~uì>~uì>¼?~uì>Êå‹9~$9ÀÙ9Üç9¦’v?Ý"?•o?Ý"?ŠÅ ?ŠÅ ?·Á>ŠÅ ?­?­?­?­?bo•:o:o:o:¢Ü;ʶ;ʶ;ʶ;~uì>~uì>~uì>~uì>il9çœ9sâ9Üç9®?Ý"?Ý"?Ý"?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?Ó 3?­?­?­?o:o:o:ÝŠ<ʶ;ʶ;ʶ;HSâ<~uì>~uì>~uì>:–c>IV9Ë9Æå9°À9Ý"?Ý"?Ý"?|›v?ŠÅ ?ŠÅ ?ŠÅ ?¢G?­?­?­?­?o:o:o:˜‘:ʶ;ʶ;ʶ;’è;~uì>~uì>~uì>~uì>°9ÓÜ9 ç9B9Ý"?Ý"?Ý"?Ž!?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?ø§#?µ°=o:o:o:ʶ;ʶ;®Š=ʶ;~uì>~uì>Ý*,?~uì>öч9žã9¦ç9»¿9~5o?Ý"?úan?Ý"?ŠÅ ?ŠÅ ?†ª§>ŠÅ ?­?­?­?­?·š:o:î–>‚6ù;ÄòI>ʶ;ʶ;ʶ;“Í·>~uì>~uì>~uì>v¤Ž9<æ9βL9¼ç9y6M?Ý"? ô3?y}?>$?ŠÅ ?ŠÅ ?ŠÅ ?Ý2°;~uì>~uì>Ÿ*>~uì>Œ 9:ç9Џ9Ñ‹9Ý"?Ý"?mpI?Ž!?ŠÅ ?ŠÅ ?-5Z?ŠÅ ?­?­?W|?•"? ‘¥<ê¼:=5¤:þ¢>ʶ;ʶ;•ä(;ʶ;~uì>~uì>~uì>~uì>öÑ9†uŠ9>­9UF9‡>z?¥¿s?Ó?†_.?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?÷ÁN?­?£?“:±(—:o:¿Ó:Mœ;j£;ʶ;Þšƒ>~uì>~uì>~uì>7xÅ>²å9g 9¹ª9ŽU9ò??Ý"?;É=?ŠÅ ?ŠÅ ?ŠÅ ? D? +?ÿ:8?­?æ->o:o:o:¿Ó:ʶ;þ`ê=ʶ;tAY;~uì>ÀãÖ>~uì>~uì>Ì„9U990n9¿Ge9Ý"?Ûkb?Ý"? ½~?ŠÅ ?*Ž?ŠÅ ?ŠÅ ?­?­?­?¸NV>o:_Ú<o:D»Í:ʶ;ʶ;ʶ;pÓS;~uì>~uì>~uì>~uì>ÚÁ9©öŒ9(¹97ôˆ9Ý"?ašx?Ý"?‡Å~?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?6£~uì>~uì>~uì>JÙ9ïŽ9îÕ9òŽ9Ý"?ü?Ý"?×?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?@Ä?­?ìÑ??o:k6º=o:o:ʶ;¾›;ʶ;ʶ;~uì>~uì>~uì>~uì>Fâ9_vƒ9÷à9X'9Ý"?® h?Ý"?Ý"?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?Q×.?­?­?o:ÀHž:o:ʶ;†ù";*Ý›<~uì>~uì>[Š>´å9Òö9uå9Ý"?÷ ?Ùz?ŠÅ ?ŠÅ ?uô:?­?[&G?­?o:o:o:ʶ;ʶ;ʶ;~uì>~uì>~uì> ç9ïÆ9ñæ9Ý"?Ý"?Ý"?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?o:\ë™=o:ʶ;ʶ;ʶ;~uì>~uì>~uì>Å>Å>È?Å>Å>Å>ñ˜,>Å>Å>zçO?næ>Å>Å>$Ï5?Å>Å>Å> T:>Å>Å>Ì.·>Dµ–>Å>Å>Å>Å>Å>Å>~ä™>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>ù¯¸>Å>Å>Å>Å>†>Å>Å>Å>Å>Å>—Í>¿Ôº>Å>Å>Ö÷D>Å>ÅÔ©>Љ>Å>ü¿T?Å>Å>Å>.lJ?Å>Å>Å>8¹†>Å>+wü>Å>Z\€>Å>LQ¢>Å>Å>Å>£gc>Å>Å>Å>Å>Å>Å>Å>®|?ÛŠÐ?œ²?? äT?¢ØY?½d?@Ož?ßz“?èL@ò>?è„[?Ê´6?kêè>áœL?[—_?¾¿ºŽÔŠ?Éà>°?ô× ?-öV?îõ”?PC–>zT @@?ÂŽF?_=¡?,‡?ÂÏ3?[ÓŒ?Ûe·@‹‘?CÌ?Ü8K?>=?“J?a¿å=«Ìž?ÚÏö>{¯?~Œ?H|(?|œ“?~½¾?Kð—>×»H?²°?·BÌ>j-i?ðäÀ?ÒÐ&?1~@?›w ?°?N=?< £?îû?®®> jÝ>ŽÞ!?|];?1Ì?  u?%@¯>ò}?¤Âå>y`‡?½Ü1?NtÖ>‚‘=lÙ?`«K=ÐQ3? Ü,?S?Ï?„¤¸?Š¢·>Ò=>üß2>Qb+>Ûë+>Xi;>눔>ì ?S*>¤áP>'©?^*>ëÍ>Mwn>2¦?>®¼_=êä?é ?U–*>¦~,>`w+>lh.>ëA!?×T?òëç>M}->ÒŠ.>)‘??Øù>ê*>÷nŠ>÷ÑC>ï^?äë><´ô>æÁÿ>¼æ>È,? F*>U¿>È,*>…w->`@*> „?“óV?j(>îÂ+>v?¤Ò*>Þ£*>ðÉ\>˜*?Rý)>¢Y8>2?> 3ð>¿->UÝ?o@ª“>4`*>m°@Ú12>óÉ?5¶ë>[ß–?íä>6v>Mê?2é,>>0*>+2>P<:?+c;@à‹)>üh]>ü)>Ž5>ghè=›1>EW±=VØ)>„a*>n*>Ü/>õNB>t P>ˆ-Û>¼Eí?ÒÂ?+¶ü?Ž€#?Dü~? z×>ÚN?Þ©?¾œÒ?W¦ž?…éZ>µÚ@ÿ´H?Bz‘<¦?‹ä…?w%?¸ã?Æ.@5ÐÌ?;}?´Ÿ=å*Ú>Êz…?­J§?†L?ùw'?†æÂ?èMX?vƒ«´\þ?ÖõL?²¦Â?¦ >}b §¡?Æèè?f„?D?’=†·?d!w?蘗=­o?’fb?T’=Б?Æû>,›â>V]?ûg™?gq_?cd?sJ?=jS?û9@^‰Æ>;ç#?D£ @‹ C>Ïóß>l÷£ Z ?#é‰?n> @á„i?B Š?/F?ËyÃ?¤ñu?:;–?“Ð?¾G·?ïäô? m>Q„¦?%?¬ô[<3¹Ò?qþ??â¶,@óï @‚Ñ?” †?¡Qx?uåÔ=ÖÑ ?;Ö‹?¼*[?AˆÄ?ºdz?7–@‘Öh?ð¿Ý"õö?0œi? äp?¹Ó?à“M?Û_%=7Ý@OÜ+?K)^?Y!@bÕ‰?Z†“?áZÒ?ËÛ»<÷R£?öe¥?fDA?Øø?èØ='àq?-¢—?‰Jà=”—?Šàã?´²Ø=&æ†?Î`×=Ü‹?ì—?– @±E½?xë?+€Š=à¾?vã?ÑÕ@ÿ²?‡öš?“ת<Þ¯D?ÀÈ£ ¥>[R>ÖѼ>,Ìý=m> >æ>n¸>x`ú=§‚?BA™>XPû>,€»>Y.Þ>ÙU?FÉ×?WeŠ?»ÏL>Eîú=:‹»>„>á>^@¦ä¾@*þ¹?Ñ>V‡M?2/û=}TŠ>®Ñù=FÑn> ?ø(?@R<@“IÝ>ù42?Ìù >SÅì>ŸCú=Ž–©>ðßS?îDÈ>w7ú=ä¹}?cÏ^>¯‹@úoý=x‡ü=Þnû=Õ¶?ÆXõ>\äe>Ũù=>Zù8?»ËJ>1>U‹Å>õî@X@ý>2Ÿ>Ôý¢?”>ÃP_?VÌ @„ÌÄ>Ð&@½:>.‹þ>,æý=Z¡Þ>|ñ„>ô¼Ï? þ >Êôø=þä˜?î¤ù=Öܤ>±ÐOö?ñXù=S}ú=ž“>ø´h>ÈÍ>¼ª_>´š?¯œ?5{@¦Jˆ?Ñ‚Ö>+-/?tõK>8Ìà>è¼>Ká?Ñgý>Îý=Û’> øL>HœŒ…©>Ž/²?y@LøÃ>Âêf>ãFû=” F@bËQ>F¼©>YÇ>P¦ä>錪>hÞ<2Úõ> i>Öç:?Ô*N>$†>t€F>ú0Ü?"Ó? 2‰?æA@†z?Éž >j:D>žC=ÿ’R>Ù€Œ>[Ëø?y‰>‹“?o?C@ù„h?â±´< É?.÷´?#ÿ?ÂUX>Ä}\>²)¥@ìË?wý=ËÃP>´k?~°?‚8Ã>Ë—ô=Ö¢¦@60>m\È>4‰Í>þ·”?ñœ=—t»>½®a@Òèâ>:Œå>G@`:¡p¯>øÂ@ÙòK>37?Xüž?0¬—?äI:@tM?¼õ?”¶@»ãQ? ª?:oÒ?ºO•?êÆœ?謈>bÑ?ò-î?êÊ„>êR¸?LÓf?[O@»?œ6q?%÷?Ö½_?ŽA†>šÂˆ>Mþ?Ÿ?xU?þ"E@–ù¼?VãÛ>£´*=¢(‰>Þm‰>·öe?¤Á©?ª„?uö>È­?®º›>¥ 9?&iá?Jšÿ?݈?v•ð>–­?uÉÈ?™ßM?“?2}?#Þ?!•ƒ?¹ß•?!>ê<"ˆ?!}@T›˜?q+½?'Ù»?o ?ù9?ˆ›/?íAá??o?™:?Æä*?„>PyS?Y·ó?qe™?[6«?àzÚ?àl#>Çë;?ä/“?ò‹ó>%ê¸?0ÒB?Ó6>=ÑãŽ?/Ô]>¶ŠÒ?„Šn?;¢o?"}?Šºþ> þ?úÙD?;-_>¸d>†2> ‚>àè,?ææ¦>.Ù >4Í,>‡A? À>æ‘?&Î>ΧH?õ,I=®c>T2Ú>¨8w>¡ ý>…á"?åà ?pÊ­?ø0@üv±?:'?ø\l?jÕ>-„×>1µÚ>3sð?Gí[@œ–ý?17@@°>¼1E?aΕ?TÉ=?QrX>Íö?០>=`“>jX>aò?"û@Ø‘ã>?™Ï>Ôü²>B’ >dv?˜±?áÕs>zZ >\­©@|¶¼>ya?´Ú> Eh?c@?BÒ’>×ê >cÑ~?;jz?KŒP?ÎÇ@æÐ ?À'@Ê_>m@C?ôb>‘¤ >êŽt>‘-*@~3?´ì >ߊ?RX >Ž«>9G‚?M,>ØW¤>ç# >Vh?ShÂ>>O¸>Ž0>=nÔ>˜j“?rÌ?û±x?l4?[ws?Ç~?7Z‘?iÂÅ?¬ô?/B¥?¸à?ˆíE>ˆ²¶?aë?#ê<ÆÔ–?Þg¡?øh?b¸¥?>;a?6–…?ïLj?+Í>(>GäY?»…?ãMæ?¨n@Â?Ï?º? Ø=Fsx>@›> ”º?>Ä?Òµ?îS‰?ýxÆ?b½†> ñJ?WlÏ?fU5?6û)?“ÿS?¤Î×>êþ¾?ürœ?o÷S?ã˜À?BÛ†?³?ži?sÖ<½Ûr?$zÏ?E_?lË?³Ÿ>xg@?X‰¡?|=?®O›?#–?uz>èú?9…>#b?€èG?§‚Ê?6Œ¼?bŸ?ã¼=¸R@ú4³?i¼o?—É—?âR?VÜÛ<<¸Y?Žë<8Ê?1†@æqð?ë‹€?`ÞM?*ñŸ?ɸ>¿‡ ?lí<>Vè ?T?vºÕ>›–‰>€E>›X ?Š?d6?$? pL>g$?ã¸;>umÙ>­R?)>3ù§>¶»¾>)?>\Dw?®Ù¢?0k@ê¡>V€½>³G>ªï?>Æà;>˜C®?´9 ?i?u –?.œ”>¤?Ì‚?NÞ?¬ê ?»Þ?h½>ÿZs>-Ñ>¦d‘?ÓÑV?ש>ß*?ª1=>Öy>–,?˜±Ü>NS> J>Åzí?¦„>”[—>ú>DzË>=›?~²>Mñ>îï?.†?ëž:?·E-@ÅØé>/-@…¤?5?Z*•>s^?>ºQ©>ô£\@õ-?v(>›C,?ÚäÓ>OAõ|>aêÚ>õ²>¯‚/?žÖð>Þ%×>·e*>J%??Ô›>âè”>Ù†Ž>ùêŽ>‡Fš>yHZ?fô@Ò¿>=Ó­>…ç>?×»¢?Kî?nYÆ>ÿù?wZš=MØ?-U7?)0?Ÿ\ô>y°Ž>m,‘>°ÝP?ºé¸?©Ìº?U ?êX?˜$/?F‘>ƒŒ?ü)/?JÏ?ó¯?r<½?ϬŽ>‚Hš>íZ?ûC ?c¶>Hw?â£>å´‰?²>{¡e?ÿ¥? n}>¶ÍŽ>»}Ž>³½?û>ëô—?69Ž>>ãƒ$?ñ?ý3?¼y>(T•>P,Ý?þeí>@É>˜½4?¿…©?þžÚ>ÿ@0§–>©¢~?¾>€3•?±T?W?õ2?M¯˜?Z ?Iû>°¾? %?’§–>¼&œ?·½’>Ž*_>5ÂÛ>¶žà>h0õ>¬—Œ?Ã?'¸¢>ì6F?§?Äwå?êk?|™j?ê@‡£?¨ª@Z¤>QD?øª?ûú¨?3x@œ¨³@™®8@þ± ?·/>‚.6>âÒm?J@€k¬?r΄?8ì?'Q?ºÒ=n:4>ì5>˜òR?hÂJ?m U?!Èn?hý?!p…>^[&@iÚ?‰@+òq>yÿœ?”Òµ=«.?fðÆ@…Ô$@K’Ö?ÊË@Þá¶?”$½?}ÿþ<ü©?ÿH®?ò"M@7Ý?eê2>LM?C§‡?¶Ò5>YÆ©?¤vÞ?Ó¿2>»‹F?U#/>yp?v»?‹z´?âÙÔ?›z?(oÞ=¬3?C W@'‘!? Õ?”Èi@€ðß<1?pmd=¹=·?Ò›‘?Õ×?Æ(/@:wV?yÜAC‰›@+/?-žL>å"@ZÑá@L·×?ÆaF>¾ËA@ºÏÀ?Óü‚?þ7p?–Ç/Aòæ•?F…?÷¥±<õÃ(?ºÅ?7ë;?^TL>ç0?@õI?2ž4>÷ø=7„¬?óc’>¤ƒ?NÌL>1‘Q>¿-L@Ù •>`½=é%ƒ>̼˥>ÌQA>ZuÛ?$ê >Lì? L>„·?äÇ >é$?Û9K=jŠn?+Xr?bÃL>{ÐL>ó°…?I9•>Rãä?$'Þ<àj?ÐÕ¯>5&R>‹ü=¸÷o>OâL>d1ý=‘±Ÿ>(â>Kèû=|½>VCõ=§¢?h•¦>7¡(@„?fÝF@غ¢=ÞÊ(?ü?µ> <$@üL>úÏY>£(õ<®¬H>$zˆ>|M>»Í>LOµ>1:?HÒAn‰? Ñn?ýÚ?»ûg?Ð!n? èY?«‹?²ÂŽ?D–Û?ô™§?€?µ,ë?Ån>Œ…Õ?ÿg4@ ¨==´@ÓË™?úÅ?©Ýú?.cÅ?†ò¼?h·@ŒœD>>M>k”?æÄ?tõ?ÞÎ@/n±?W\ ?I$%=Bô?p×Ë>3%=?Tì]@Öcv?Ñ«?ý]u?êé›>z†?Øé?+:í?)›´?&%µ?°B¶=Ó×?pÍg?ìíÏ?­ä?Ÿ ˜?À}Ù?4Î`?µ%ýJL?€Ë?L>gƒÃ? Ë? H>KÅ@@ï?¹=?}%è?H†@ ¢×?î[Ü?ÎÖù=ýÙÆ?^À„?„¹E?OP@B Á?˜¨S= äU? Ÿc=sQ¢?}0@—ò?}x@l?¢Š>×o?ˆX‰?†[6?`'?C*ê>âJ‚?´å?Ÿìt?ñǨ?¿ ??â‹?Ÿ¦Ú>EY?eÀœ?‰æ<º°õ?n™„?Sø©?:˜?ø€?¥ð…?Е§?ù">ò(>0äÔ?k ’?ŽáV@ Gâ?Æä(?‰É‚?3=Dz®>.£'>ãi9?æM@ƒ¨Ž?~p?°@?¼b>?g?x¬?.è*?ÝÏ?^¼ ?ûæ†=†?„MX?Žˆ?Óï@°»š?›¤…?g&?”Ç<ùÛ?ù§p?Iƒ?DvÚ?Ö>L?¬:c?æu?¹kT?'¸B?ŠÑ%>™D @L'">Iÿi?vñ›?ê7?ùƵ?YÅ—?ÜnÌ=M¶+?À‘?›¨?ß×?8«“?Ú=¯QO?ø=©Sf?,ª @©¡k?Ouð>®kæ>Ÿ_?ÕW?0õË?¾²—?XùY@L²ê?•’}?Í£?‡\…?ð‘?<1Ÿ?'@?ÿ> ]Ö?÷DE?ð =@¢Ä?™£]?b—¥?·¯?ë#?4íÂ?µò4?$†z>fð~>I¿è?÷âá?<&À?(Ð@%z?ÜÁ??H=ükà>Ui¹>²@M÷&?e@€÷›?:¼°?3S¾?…œ®?a¢³? &Ó?uRä>†,?nÝ¿=y§Š?ÂÏ@‰ý?ï›Â?' ?Ðîq?&é@ƒ|=P'@±+?V6@£My?¬>ëç˜?Á¢@½±Ï>yQ?æ‘Y?õÇ~>‡·?b:±>'Á9@B£»?rE£?F8Ú?Ú>?µ>º×‰?6r?óž¨?ÄÔO@l¼”?µ=¾ìâ@(b?=pNò?ˆa?Ûÿ?¥µ„?€`#?Í=?y@’?¬þo?Ë}?¢ºL?£/?¹^?Ä¥@ü/?*"À?xŸ?›¿?<[?áŽñ?\È«?…ä"GÍ>ŽÈ@?“$@ÍÖ?¤ð@›„“?> Š?Ö >Éú>òü ?w¡?´Û­?oõ@Èž9@„Té>ë@ îh? ªn?×ï>@HÙ;?"@?·ó>.vW@Z£@*‡^@ìµ§?…À%@Õ·º?UÔ¾?=›þ=²N'@0:Z?÷O‡@"+@ëb?Ds×?Á @œ>5?~΃@”Œ?ç?@ö5?ò!É>êý>¸@@ª4­?Šd0@ôØf?ÙÿÇ>maÁ?âêè>‰Ý|?x@)‘?ó{¯=€ Ê?½Äp= £Ë?£æÐ?)q@Zœ?ô‘I?àëT?‘ì7?п>º—>¡üÔ>îVL?W¯?óP?¿ ?Ȧà>(?JÀ>¸Öõ?”Ì;?×]”?*¼4=Â>~¼?aÙd?Èl„?ÐA>6¢>¾,Ä?^#Z@úG@@,¡d?"?ÅÆÉ>–Â3?yB?jqG@ÊŸ A°µX@¿@/÷E?rhj?»äm?dxŒ?Aau>ªÌo?g8?ìg?O`?˜Þx@I¸@ï#î>Ak!?„Lˆ>pf@>!í?Ænß>‹x/?º(u>ítÐ@Csö>\­??Už>ع?æ8@Š›°>„@Ú>ï¦À?T7ƒ?V=S?èL+@1ü>›d@gãŠ>ATË?/Ôý>–Á1?`†?uã@eÉ·?æ¶>>õƒ>l:?>íÎ>¸(þ>ŠJ>àäê=fg¥>¾e@?@Á>^¨?| Ž>U‡>Â#…?¦å¢?C )?=Å>Ì>SŒ?÷l">žÅ>Tø3>MÜA9}e?ÑNŽ>â;M>Fcÿ>›¡ú>•8?I#ª?{/@,#>É»>2k,?£,M>Òp¥>ã>¥>ŒÃ>m>ÞÅ?a>ó›>fÎU>Á…=wSv?ñ&Ü?°>у>Ö #?4?Ä’”?ø½…>•­>Ø]?™¹>žš>üªO>ŸÓ? ­>¬h>Qä ?eø>$d<>}J>ÄÔp?níC=Èf#>@>p>‚>Î#T?šk>qà4?VøÆ@<¹>Rb‚@,¨>Y¶@•ž¢>ГB>#?“>6kk?™>ÈAR>õË>‚4>+¯@ù÷?`ÿ>çfÕ=e >ô=‰BLx>¦Î> >&A>ÉJ&?wâ#?³¢À>{m>ò2Ö?°¤î>8(l>åöª?nòp>î û>‘Kü>Ü~t>aÙa>Øx¯>CÔ?ÏìÔ>$?äANm¶>¯­?mãK?–N?w&?k±\?އÊ?|s¾?,É>Xéï>fcd>üìb? Ag>ˆ?&M‘>B³¡=uDÌ>é@É?¼–b>päâ?æà>BÅÌ>K$¾> £§>¤:W? Š‘?µ×>öë? =>Q– A²b>£C?oi?Ÿ5$?¬ Ø?²b>Ûž×>’œt=fÃ1?%Í?Žf?]3I?^Ȱ@IßÍ?ð'œ?ªjA£R$?ª®Š?]z??Žñk?~¤Å>GRŠ>³"3?Œe>YŽÓ>ùTº>ƒi}>œþl>>î>÷·?Ha>Ëg½>kÅ=—ãd>ñÛV?T‡a>g/?-À>$I? iÒ>ñç|>?î ?Šœ¾?Ä>Ñ?o%µ?.g??.]_?ɪ?®1?!ƒ–?Eÿ‘?&mË?iÜU>(Ïç??Œ£?,†€=Bù?íö”?ß«a?HŸr?ø^M@–u@® ?þ:Ô=•>Ô}?ªÕõ?vt€?ÈÎL?Á´©? »~?¿2ß÷ý@#{Ž?Òð?$O+>ðnk?ƒïQ=Ÿy ?Qú@.2¯? F±? äÀ?ö¶?|-½?ǽ<ø:@?b §?©@JñP?$Ø=j»+?¦³€?dÞ=ƒ‹?¹˜?Ãå×=ÓÅ?óºž>B9?A5@?X®¤?ñ”?ñîm?¯;Š=À4c?A¸x?Ç7=@g6§=–û>Í5=FÊ?9¾l?Â0¿?P?€š?Rˆp?­Fö>Å%Ä>Ű)>¦>EÕ>´J??”>lp->K×±>$„?…Ìå> Û5?Qj…>¶S1?)­ã=ö >ÕÃ#?êr2>tmÄ>¢ºé>¹R>¸³Œ?é¯Ú?Ì_"@Gg·>T?:‡[>|‚>Ð|>bíÄ?§ë?‡°?ð9ø?pî`>úy?ŒùÚB?“Æ>¯Ü‚>h)>ìB?:•¢?ͽ>Ãjó>Q q>\I>§Î ?²ô>)¤1>Äî/>"í0@¬¦—>Yå>O`>î2 ?I?f»¥>n>¡ø€?OØ;?š©B?D\$@¹˜ù>5S+@ÞÐÈ>r›:? s†>â>*>Ì¡•>FëG@€P/?Ý%>)#?VD‹>UÔ|>×p@wA>eTÄ>Á¯z>ÕÞ?xÞ>ßÊ>"„,>šq?·‚?k_ü?aòh?°´‚?¦>M?Z¬?ôü?~­?²HÀ?âm ?Þ;ñ?sÚ4>º¥¶?ü¶‡?FH® ‹À>"ØŽ?”-ˆ?jXÕ?Et«?&‡æ?}ä@?Œ”=œ\S>>R4>Ùús?OíÓ?ÅH–?’ü’?†àŠ?È ˜>wÆÈ?ùs?1ùš?LàU?²Ë}?uà]=:@%@?Í>Œ?¥ºý?#üŽ?»nª?  ¦?<åÑ<…¶? À¬?2§@?IÑ @l<>.'c?*©?j >ÄO¦?NÚ?ƒ>ßWÇ?BL‚>Nx'?Þ±?ÈÁ@2­Æ?Þ»å?œy¬=ÇOÁ?#ò‚?üò·?Ž?Í?Æ(¨?úgï<¦êJ?ìˆï<^Ô?C@&þì?Ýøæ?õ‘?=nÔ>˜j“?rÌ?û±x?l4?[ws?Ç~?7Z‘?iÂÅ?¬ô?/B¥?¸à?ˆíE>ˆ²¶?`ë?#ê<ÆÔ–?Þg¡?øh?b¸¥?>;a?6–…?ïLj?+Í>(>GäY?»…?ãMæ?¨n@Â?Ï?º? Ø=Fsx>A›> ”º?>Ä?Òµ?îS‰?ýxÆ?b½†> ñJ?WlÏ?fU5?6û)?“ÿS?¤Î×>êþ¾?ürœ?o÷S?ã˜À?BÛ†?³?ži?sÖ<½Ûr?$zÏ?E_?lË?³Ÿ>xg@?X‰¡?|=?®O›?#–?uz>èú?9…>#b?€èG?§‚Ê?6Œ¼?bŸ?ã¼=¸R@ú4³?i¼o?—É—?âR?VÜÛ<<¸Y?Žë<8Ê?1†@æqð?ë‹€?`ÞM?Š¢·>Ò=>üß2>Qb+>Ûë+>Xi;>눔>ì ?S*>¤áP>'©?^*>ëÍ>Mwn>2¦?>®¼_=êä?é ?U–*>¦~,>`w+>lh.>ëA!?×T?òëç>L}->ÒŠ.>)‘??Øù>ê*>÷nŠ>õÑC>ï^?äë><´ô>æÁÿ>¼æ>È,? F*>U¿>È,*>…w->`@*> „?“óV?j(>ðÂ+>v?¤Ò*>Þ£*>ðÉ\>˜*?Rý)>¢Y8>2?> 3ð>¿->UÝ?o@ª“>4`*>m°@Ú12>óÉ?5¶ë>[ß–?íä>6v>Mê?2é,>>0*>+2>P<:?+c;@à‹)>üh]>ü)>Ž5>ghè=›1>EW±=WØ)>„a*>p*>Ü/>õNB>ÅO?5C?˜âG?¶½&?¦7?ÆØ(?Õ©j?î%?(F'?`R?+ V?ãS?œ6Ü>0G?çS?YŒk=*M?[?̯.?†¬A?¸|8?Ö ?? €\?a'Þ>9 ?¦C?ñB?Ös-?ÓB/?|áVY?[Ï?¿Û>?ZuI? N?SáO?¶Ô@?±¨ ?`u@?–B?H»/?ÌB-?$IN?ë;>XQ8?5?È"?'ÞI?yÿY?’6?´Y2?:> ´E?0ÑX?mþ?Ù-D?§}?£L/?e~&?P¡þ>-A?<ýk? Ÿ?3I?€Ýô>'9?ÊFZ?ýŸ9?_e=?,K?Àü >Ù©U?ë?DOO?XŸ%?L[/?r÷>ÏF?×ÚÃ=°2?.!H?‹>?¸PJ?cV???5îó;$~?5îó;$~?5îó;$~?Affæ@Affæ@ÍÌü@ÍÌü@€?óðæ³óðæ³Pkinase PF00069.17Protein kinase domain EEEEEEEEEETTEEEEEEEETTTTEEEEEEEEEHHHCCCCCCHHHHHHHHHHHHHSSSSB--EEEEEEETTEEEEEEE--TS-BHHHHHHHHHST-HHHHHHHHHHHHHHHHHHHHTTEE-S--SGGGEEEETTTEEEE--GTT.E..EECSS-C-S--S-GGGS-HHHHCCS-CTHHHHHHHHHHHHHHHHHHSS-TTSSSHHCCTHHHHSSHHH......TTS.....HHHHHHHHHHT-SSGGGSTTHHHHHTSGGG yelleklGsGsfGkVykakkkktgkkvAvKilkkeeekskkektavrElkilkklsHpnivkllevfetkdelylvleyveggdlfdllkkegklseeeikkialqilegleylHsngiiHrDLKpeNiLldkkgevkiaDFGlakkleksseklttlvgtreYmAPEvllkakeytkkvDvWslGvilyelltgklpfsgeseedqleliekilkkkleedepkssskseelkdlikkllekdpakRltaeeilkhpwl©â¨â¨â¨âNâ¨â§â¡â€ùÿùÿùÿvÿùÿùÿùÿ€AþAþAþÿAþAþAþ€¢þ¢þ¢þ¢þ¢þ¢þ¢þÔïÔï÷Ôï.ðÔïÔïÔïÝñÝñÝñÝñ8òÝñÝñÝñÓýÓýÓýÓýÓýÓýÓýÓý¨â¨â‹â¨âˆâ¨â¨â¥âùÿùÿÜÿùÿøÿùÿùÿùÿAþAþAþAþAþAþAþAþ¢þ¢þ¢þ¢þ±þ¢þ¢þ¢þÔïÔïðóÔïñïÔïYôÔïÝñþôúñÝñúñ7öÿ÷ÝñÓýQýÓýÓýÓý´þ>üÓý¨â¨â—â¨ââ¨âžâ§âùÿïÿñÿùÿùÿçÿÈÿùÿAþ þAþAþAþ1ý#ÿAþ¢þ¢þÍþ¢þÍþ¢þ¢þ¢þÔïÔïÜïÔïÔïÔïÞïÔïÝñÝñ§üÝñÝñÝñçñÝñÓýÓýmÿÓýÓýÓýÓýÓý¨â¨â¢â¨â¤â¨â¤â§âùÿùÿöþùÿùÿùÿùÿùÿAþAþ=ûAþAþAþAþAþ¢þ¢þ®þ¢þ¢þ¢þˆþ¢þÔïÔïÔïÔïÔï»óxûÔïÝñÝñÝñÝñÝñ½ùÍûÝñÓýÓýÓýÓýÓýÿ3ÿÓý¨â¨â¥â¨â¦â¡ââ¨âùÿùÿùÿùÿùÿ£ÿpþùÿAþAþAþAþAþ‡üüAþ¢þ¢þ¢þ¢þ¢þ¢þˆþ¢þÔïÔïÔïÔïÔïÛï|ðÔïÝñÝñÝñÝñ¢üäñ…òÝñÓýÓýÓýÓý˜ÿÓýÓýÓý¨â¨â§â¨â§â¥âIâ¨âùÿùÿùÿùÿøþùÿ÷ÿùÿAþAþAþAþUúAþAþAþ¢þ¢þ¢þ¢þ¢þŽþQý¢þÔï^öÔïÔïÔï·ü|ðÔïÝñÝñÝñÝñÝñµú…òÝñÓýÓýÓýÓýÓý–ÿÓýÓý¨â’â§â¨â¨âžávâ¨âùÿãÿùÿùÿùÿ>þ÷ÿùÿAþAþAþAþAþfúAþAþ¢þ¢þ¢þ¢þ¢þ®þÓý¢þÔïêïÔïÔïÔïÛðVðÔïÝñóñÝñÝñÝñäò_òÝñÓýÓýÓýÓýÓýÓýÓýÓý¨âžâ¨â¨â¨âvâšâ¨âùÿùÿùÿùÿùÿöÿ÷ÿùÿAþAþAþAþAþAþAþAþ¢þgþ¢þ¢þ¢þNÿ ÿ¢þÔïÝ÷YôÔïÔïÛïÞïÔïÝñóñ÷øÝñÝñäñçñÝñÓýÓýûýÓýÓýÓýÓýÓý¨â}âžâ¨â¨â–â¢â¨âùÿÑÿµÿùÿùÿùÿùÿùÿAþAþþAþAþAþAþAþ¢þgþ¢þ¢þ¢þ¬þˆþ¢þÔï øÞïÔïÔïÔïÞïÔïÝñòçñÝñÝñÝñçñÝñÓýÓýÓýÓýÓýÓýÓýÓý¨âjâ¤â¨â¨â¡â¥â¨âùÿÎÿùÿùÿùÿùÿùÿùÿAþAþAþAþAþAþAþAþ¢þ þˆþ¢þ¢þ¢þˆþ¢þÔïlöÞïÔïÔïÔïÞïÔïÝñCòçñÝñÝñÝñçñÝñÓýÓýÓýÓýÓýÓýÓýÓý¨âqâ¦â¨â¨â¥â§â¨âùÿâÿùÿùÿùÿùÿùÿùÿAþAþAþAþAþAþAþAþ¢þ»ý±þ¢þ¢þ¢þˆþ¢þÔïZúÔïÔïÔïÔïÞïÔïÝñYòÝñÝñÝñÝñçñÝñÓýÓýÓýÓýÓýÓýÓýÓý¨â&â§â¨â¨â§â§â¨âùÿ‘ÿùÿùÿùÿùÿùÿùÿAþAþAþAþAþAþAþAþ¢þ•ý¢þ¢þ¢þ¢þ±þ¢þÔïò÷ÔïÔï”õÔïÔïÔïÝñ¾òÝñÝñÝñÝñÝñÝñÓýÓýÓýÓýÓýÓýÓýÓý¨â0â¨â¨â˜â§â¨â¨âùÿÎÿùÿùÿéÿùÿùÿùÿAþAþAþAþAþAþAþAþ¢þý¢þ¢þ¢þ¢þ¢þ¢þÔï(øÔïÔïgøÔïÔïÔïÝñåòÝñÝñíñÝñÝñÝñÓýÓýÓýÓýÓýÓýÓýÓý¨â3â¨â¨ârâ¨â¨â¨âùÿËÿùÿùÿÈÿùÿùÿùÿAþAþAþAþAþAþAþAþ¢þý¢þ¢þvþ¢þ¢þ¢þÔïôð~öÔïÿùÔïÔïÔïÝñ–ýÝñÝñòÝñÝñÝñÓýjÿÓýÓýÓýÓýÓýÓý¨â’â‘â¨â8â¨â¨â¨âùÿkþâÿùÿŸÿùÿùÿùÿAþJûAþAþAþAþAþAþ¢þaÿ¢þ¢þþ¢þ¢þ¢þÔïÔïëïÔïüÔïÔïÔï'ùÝñôñÝñuòÝñÝñÝñûýÓýÓýÓýÓýÓýÓýÓý¨â âžâ¨â«á¨â¨â¨â»ÿùÿùÿùÿ+ÿùÿùÿùÿþAþAþAþAþAþAþAþ¢þ¢þdþ¢þhý¢þ¢þ¢þÔïÔïnùÔï5ñÔïÔïÔïÝñÝñôñÝñ9þÝñÝñÝñÓýÓýÓýÓýKÿÓýÓýÓý¨â¥â]â¨â€â¨â¨â¨âùÿùÿ±ÿùÿÓýùÿùÿùÿAþAþAþAþÁûAþAþAþ¢þ¢þdþ¢þoÿ¢þ¢þ¢þÔïÔï2ðÔïÔïÔïÔïÔïÝñÝñIûI÷ÝñÝñÝñÝñÓýÓý4ÿüÓýÓýÓýÓý¨â§â”â¨â™â¨â¨â¨âùÿùÿgÿÜÿùÿùÿùÿùÿAþAþüÿAþAþAþAþ¢þ¢þÿ¢þ¢þ¢þ¢þ¢þÔïÔïÔïÔïÔïÔï÷÷ÝñÝñÝñ;ùÝñÝñÝñÝñÓýÓýÓýnÿÓýÓýÓýÓý¨â§â â¨â¢â¨â‹â‹âùÿùÿùÿ¹ÿùÿùÿÜÿÜÿAþAþAþ9ûAþAþAþAþ¢þ¢þ¢þ¢þ¢þ¢þ¢þ¢þÔïÔïÔïÔïÔïÔïñï[õÝñÝñÝñÝñÝñÝñúñLùÓýÓýÓýÓýÓýÓýÓýõþ¨â¨â¥â¨â¦â¨â›ââùÿùÿùÿùÿùÿùÿùÿ§ÿAþAþAþAþAþAþAþ±ü¢þ¢þ¢þ¢þ¢þ¢þVþÍþÔïÔïöúÔïÔïÔïõóâïÝñÝñy÷ÝñÝñÝñúñëñÓýÓýµýÓýÓýÓýÓýÓý¨â¨â&â¨â§â¨âšâžâùÿùÿQÿùÿùÿùÿñÿùÿAþAþZþAþAþAþAþAþ¢þ¢þ¢þ¢þ¢þ¢þVþ|þÔïÔïVðÔïÔïÔïùïâïÝñÝñ_òÝñUöÝñòëñÓýÓýÓýÓýîüÓýÓýÓý¨â¨â^â¨â¨â¨â¡â¤âùÿùÿ÷ÿùÿæÿùÿøÿùÿAþAþAþAþØþAþAþAþ¢þ¢þŒý¢þ¢þ¢þCþ¸þÔïÙõVðÔïÔïÔïùïÔïÝñãú_òÝñÝñÝñòÝñÓý{úÓýÓýÓýÓýÓýÓý¨â–â}â¨â¨â¨â¤â¦âùÿhÿ÷ÿùÿùÿùÿøÿùÿAþ’ÿAþAþAþAþAþAþ¢þ¢þŒý¢þ¢þ¢þCþ¢þ¨õæïVðÔïÔïÔïùïÔïÝñÜø_òÝñÝñÝñòÝñÓýŒþÓýÓýÓýÓýÓýÓý˜â¢â”â¨â¨â¨â¦â§âèÿÂÿ÷ÿùÿùÿùÿøÿùÿAþqýAþAþAþAþAþAþ¢þ¾þ<þ¢þ¢þ¢þCþ¢þúÔï?ûÔïÔïÔïöÔïîñÝñwüÝñÝñÝñòÝñÓýÓý3ÿÓýÓýÓýÓýÓýIâ¥ââ¨â¨â¨â”â¨âŸÿùÿ6þùÿùÿùÿæÿùÿAþAþüAþAþAþAþAþuþ¢þåý¢þ¢þ¢þCþ¢þPùÔï´ðÔïÔïÔïfóÔïmùÝñ½òÝñÝñÝñòÝñ/ÿÓýÓýÓýÓýÓýÓýÓý4â§ââ¨â¨â¨â˜â¨âhÿùÿöÿùÿùÿùÿòÿùÿüAþAþAþAþAþAþAþ´ý¢þ ÿ¢þ¢þ¢þþ¢þðÔïõïÔïÔïÔï÷ðúŠòwõþñÝñÝñÝñòÝñÓýæýÓýÓýÓýÓýÓýÓýŽâ§â•â¨â¨â¨â}â(â÷ÿìÿùÿùÿùÿùÿÕÿwÿAþ0þAþAþAþAþAþAþ;ÿ¢þMþ¢þ¢þ¢þ þ¢þÔïÔïõïÔïÔïÔï3ðUðÝñÂöþñÝñÝñÝñ=ò^òÓýîýÓýÓýÓýÓýÓýÓýžâ¨â¡â¨â¨â¨ââ_âùÿâÿùÿùÿùÿùÿøÿ÷ÿAþ(þAþAþAþAþAþAþ¢þ¢þ³þ¢þ¢þ¢þÇýýÔïÔïÜïÔïÔïÔïùUðÝñÝñåñÝñÝñÝñ=ò^òÓýÓýÓýÓýÓýÓýÓýÓý¤â¨â¥â¨â¨â¨âRâ–âùÿùÿùÿùÿùÿùÿ®ÿ÷ÿAþAþAþAþAþAþAþAþ¢þ¢þ‹þ¢þ¢þ¢þÇý$ÿÔïÔïÜïÔïÔï†ôáô€ÝñÝñ úÝñÝñ/ø…ò€ÓýÓýµþÓýÓý ÿÓý€¦â¨â§â¨â¨âžâiâ€ùÿùÿ ÿùÿùÿÄÿìÿ€AþAþ/ýAþAþüAþ€¢þ¢þ¯þ¢þ¢þ¢þQý€ÔïÔïÔïÔïÔï³ô*ú€ÝñÝñÝñÝñÝñèñò€ÓýÓýÓýÓýÓýÓýÓý€§â¨â§â¨â¨â™â%â€ùÿùÿùÿùÿùÿîÿ˜ÿ€AþAþAþAþAþAþAþ€¢þ¢þ¢þ¢þ¢þ†þAý€ÔïÔïÔïÔïÔïéïäô€ÝñÝñÝñÝñÝñCøîò€ÓýÓýÓýÓýÓýCÿÓý€¨â¨â¨â¨â¨â£âFâ€ùÿùÿùÿùÿùÿÎÿëÿ€AþAþAþAþAþÜûAþ€¢þ¢þ¢þ¢þ¢þÃþÒü€ÔïÔïÔïÔïÔïÔïðð€ÝñÝñÝñÝñÝñÝñ½ý€ÓýÓýÓýÓýÓýÓýÛÿ€¨â¨â¨â¨â¨â¦â•â€ùÿùÿùÿùÿùÿùÿMþ€AþAþAþAþAþAþ÷€¢þ¢þ¢þ¢þ¢þ¢þ`ÿ€ÔïÔïÔï úÔïÔïÔï€ÝñÝñÝñÆ÷ÝñÝñÝñ€ÓýÓýÓýYüÓýÓýÓý€OýOýOýOý5ýOýOýOýOýOýýOýýOýOýOýOýOý;ýOýOýOýwýOýOýOýOýOýOýOýwýOýOýOýOýOýOýmý þOýOýOýOýOýOý;ýAþOýOý¤ýOýOýOý¶ûzüOýOý¤ýOýOýOý>ýwýOýOý þwýOýOýOýwýOýOýUþ5ýOýOýOýwýOýOýrþOýOýOýOý5ýOýOýËþOýOýOýOýOýOýOýÅþOýOýýOýOýOýOýpûOýOýþOýOýOýOýOý¨ýOý‘þOýOýOýOýOý¨ýOý5ûOýOýOýOýOýwüOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýOýºýýOýOýOýOýOýOýºýˆýOýOýyþOýOýOýÐý)ýOýOýyþOýOýOýÐýOýOýýØýOýOýOýÐýOý‘ýOý1þOýOýOýÐýOýZþOý€üOýOýOýþOý÷ûOýÅýOýOýOý þOýOýOý2ýOýOýOýKþxþOýOýqýOýOýOýKþ;üOýOý9ýOýOýOý þ€OýOýOýOýOýzýªþ€OýOýOýOýOýýæþ€OýOýOýOýOýOýtû€OýOýOýOýOýOýOý€ñþrÿ2ÿèUÿŸÖþÌÿYÿ4ÿòÿ§ÿ`ÿvþ}ÿðüþ:ÿCÿ®ÿÿÓü¹ÿÿR ÿPÿnÿGÿeªÿšÿ3ÿåÿÁÊÿôþ’ÿþYÿ<ÿâÿÖÿìþÁÿ«ÿÇþýhÿOÿ…ÿ÷üÔÿm¿ÿèÿáÿý>w®ÿHÿ¬€þ´ú8ÿ bÿ\ú¬ÿÿÀÿúoÿ ÿ±þX7ðþØü)¦öþ^ÿ*üþÿÿjÿÿî’:ÿþúFGÿfÿ‚ÿ¦ÿ;>ÿúÿ½P4þ;ü‹ÿþ´ÿÎùÿþõþŽWxúaÊý¦ÿ(ÿZXÿÖÿ•ÿÇþLÿóû»±ÿÿûÿœÿ-úPÿ×ÿÿƒÿöþQÿ{ùÿJÿ ÿêéÿ$ýùÿH€ÿþÚÿ ÿ²ÍÿäÛÿrµÿîþÔ!ú?ÿçþ^ÿ¬ÿƒÿÿrü–þoþîÿ¶WÿÖþ*ú ÿUÿÃÿõþ4ÿjÿIûùÿJÿÂÿKÿVÿïÿRúJÿ°ÿÃÿ ÿÛþyýÿuÿbÿ™ÿ8ÿCþåÿ¨#—ÿþWÿ}ÿ¯þ6û¾þÉÿJÿ·þƒûcÿùÿ'ýŽÿpÿâÿ€Jÿøÿ$û„ÿÿpÿ€Cÿ1ÜÿKþú«ÿ€}ÿ;±ÿ/ÿ4àþ€©ÿAýpG¿üKþ—Èüóÿíÿîÿ¤¨ü¦ý5þNiŸü¢üœ¥ÿ\ú¢ü´ þÉüœü7Êüÿ†þžüœü°üüfŒ3æüñþ] µüÞýþˆý(ýcpþ›þB°þ‚ý3ýýàý´ÿ‹þð±+ÿïþ¤ü«þGÿ®Kùþ¹ük¯úïü/T¤ûÆü ýªüKý‹ÿ5þNû€þýë9ÿcýüRýtEýw¾ýBþuÿΞüºôü ÿÝþ Wþ¯ý­üåÿžãù©ür$˵ü±üx\P û;ú¨ý~ÿêüÂý•ÿTýŽÿ'þ;û”§ÿšüYÿª²ûgÿgdÿ†ÿWÿ¿ü­üPþÛ-ý¦ü¨ü?ÖÿªüØ·ü%ÞücþØüÉ®üÏýñþƒþ¥üYÚÿ ûaþɺüY·üÿ©ýÇûþ þ*ÿ`SýKùJþ¿ºüWàÿÞþýÚüý©ÿqÞÿþ’¬ü2úÿ]ýýcÿxþUþþg™ÿ"ý ý'à—üxaÂýåþbÛþwÿÈú²ý<ú€ÿ´úvšüÞûü£üðþ€¸„ÿ´ýküßü¤ý€¬ÿšÿ¢ÿ¤ûèþœý€úÿo´ü¸ÿ$ÿŸü€Ôúÿ¹þôúˆPûÓúÿýÿ‹ÿvêü×Þúèþ¦ùõ8ÒèþÿóÿHwúØûJ*YNm ú‚üÒú,Âù“ÿôl¯þïþõþª&ù.ùdÇúþÿ‰÷Þ‹ õüøÿLû ùùûOðí°ÿæ>ú®úâ]YúùQ úéÿ»÷ù¿ÿiúeÿiûMü¸ÿ9ÿi üW4÷æú=Pü,ÿ+û˜ý ûÏ«úFÿ“üÃÿÿûÊúSÿcÿ?éþcø!‹ùœÿæýcÿñûûoÿûCüfZ·µÿšÿ`°ÐÿbúkþÊú·þºú2’ÿmø)Hû‰þ“ûÏýéÿW ûŽÿ¿ÿhgÿ¯ÿxøk„úGòúÇÿZÿÔ˜ú¥ÿ0û¾þ<JªúbûpúIGú€ÕàbÜ÷sýhý®ù ÿ…úžÿéüFÿâÒhúzßûïÍ~ùöQ³úEÿôÿÿþ<´ú"ýµÿk«\úùëÿÿ þŽúuÇú˜ùåþ7`ü—úMSú©újÿMú°üJÿUþBKúTûxú+„øÅÿçl€>þžû¾öðN€­úe]Óù3ø`ý€¤ú]ü€ü¨€dý8#ÿü£eûäûÊ y&!“üýóû¹ÿÂyMZYY5'’ûVDý„Wö˹û&ýèûH×ú|ˆ[e“2$ú0úiÞûÆZøn;ô‹ü=[üúúü³%=î¦àüÆûý8mûHø„/û¼´÷.€ûÜvüÒü¸üRÿ¬;Ãþª¹™øûû ðýÊúìþü û‚$üo7ü‚ûO ”ù®:úA§ýTcþýý†öúNý/ÿRZO9Ó.{û¦ÿîüþÑûÎB©üäWü6žüMýOêIû©Þÿ2ùNÿ`ùXŸû,ü¯±ûø’úzþ×÷ÃûtüUúú\ûº3|†Äø†þbþ³ú ›û×Nýºý›‚ûÿçü¼îkè÷ÊÊûäñ¡ ÿ«cû*ÿ½º-jûõùOnÿÃþ¦ûWûû›ú`8ý±ûè5û½û$fû÷ûÕý”„eûÈü“û•rùVñ€w0ý7Í÷“ë€'ýæéú!øÿ¿€½û}Óý€ý7€& üöxÿáûújþñûŒýküçýÊû²úGþkh@þÅûàÌýsùÅûõþ þýfþe@ýsÿÌû.ý¿û+ýÀûÚ°„ÿ ü†…ýþ–ý½þ¤üþxþrþþìýÄÖûÆý¥ÿ_üçüÜùÕÿNþÿ•ýÑûÇûIýþÿœ˜÷þåûNÿ5÷"ümÏûðæþšÿöÒûüP û(øZÿþþÑûÏ ýGû{ÿp²þ/.tùü­Áû ûÉý0Ýû?ü­þ[sü×ûøÿXþÓüáøÍûúþºÿþþâûäü/Žü´Y•ø%ýÅû+üÛûJüÍûzýqÿÂý·úÄþîÿ½ûÖüÏýïóûáÿxþäÿ‘øýñýøùXüþûÍûÐû-½Òûõßû[üýûýôÿØû"ùÙÿŸüËûÞL2!ÿIÿýËûåûÇû¨þyýj¨þIàÿáûÃûäý˜÷Ýû’·üHüûàû|ýþEþ”ÀÿÁûUþôÏûZø¤Kü¿ÿŽý  ý˜ýCÿÓÿHüÌýþ¼ý»û¶ý‘€þ2^ÿÆûX$ù¾ú,Óý9ðø¹¼ûz:ýøüü€úþtþ”'ÿ¼þèý€“ÌûñýQ‡vöü€7ýOßûÙû;ÿóþÂû€·ýðýSüØü+þmþõû˜ý0ý2ýrþ³þ¯ýüü)þºÿ˜ü ÿ9ýým‚üþG.ý‹ÿùûHþü»þUþ ÿþŽÿ¼ü%ü üÿû ý¡ý2ýÏýúüçý„þaú;úªþ ü^þKøÂ:þ[ÿWÙýü.ú©ÿɳþ#ÿ5ýØý‰ûNþÉú¶ý£þ¦ûPÑýpûŽý4øïåýÁû'¾ýürê³ü„ý4ýiþxýýø üNGüõüçüü6ýœþ«ýü/ý|ýVý'þú,þ þŒý¶ý¶ùLüAÿNú(ýYýþŠý5üý+¯ùoýRü†þ5ý·ý÷ý•þûþÐûâþÇúêÿû\þ/ýwÿ¡ø¬VýÞü\ýEüPDþ=,³ÿ4ýÎýŒý‰ùüûÒý4ý*ýŠþØýüb“™üXþÜüSüEù*þ¯ûñý4ýãþÇþ­øtü†üæúJþ þ• ÿ:ýÉúIþÝû»ýàý»ýþ‰ý¾÷ØÿüVý—ý7ý¸üâÿ(úUþ#ýŽý!ý±ûˆüååýºýéûÄýòýÝûÙú–þŽý ü þWû”üþ¹ûùú3ýÑýYý ýºúïûyþ›ù$ýNlý€Åü'üøü›÷òþÿ–ÿ€Éý¶þ@û†ø„üþ€0ýüÍý³þ7üBü6ý€@þ\ÚÿBþåÇûKþÅÿ \âžÿäWü,<þÿ~(°`'þÂŒÿÛÅÿa)þ(Gþ °:®Ïÿ5þeþÚÿÈNýBìŸðÿ””ÿZüIüÇÿ=þ4Üù”8 ü­ÿnüeþDÐÿÎÿÎÿ½ý3þ=ûÌÿxÏýÂøïÿŽýÍÿnþÅHýýËÿoZþòüIûïÔĪþuî´ú¡ÿS÷+ûFÿc|øû¥ÃÿÁ•–ZÏÿ4_N]ú}ýØÿpü<«þË|þKþÊ¥ îý…ÿÎÿ¦Ä¬ÿƒýýRÿ¢þÊþ1þ¾’ZñþÛUþ‡Þ¡ÿcI½ûÃÿVÿ¼TûS,þLJþŽ9Þ2þêÌúùÿõ/4þ[v ‚ÖýƒæÉÿû‘úèþÇðüþÒÿ×V=û þºwþ­Éÿ!Çùä¨Íؾÿ‹züÓþ·ÿ¿ÿ##þóûÎÿRÿÈþþXñÿÞüÛü zïý3þXËþþJíýû?ýIÿÒóý2þþÎÿuûe€G¢+údî€3þ§:jýK­ÿ€c6þLþþÏÿ€Fÿ/6ünú ^ütþ6üzþÍþüñú8üvÎüüõüŠýœù ý÷ÿ™ÿü„hþL)þ®üü,þüÓ<w(þȇœþ>üÿý(ýëþYÿ+:Áý¦0üûÎü]ÿòüEúcþ9Füœýü¡ý\ýG£ö]ý;ýúöÂÇüýZü,+üTÿ„ûÂ÷Knýþ¹ÿSþ—ûHI!ýƒAþÀùí_íü®û–ýB:üøý|þ§Øý/þ2üËý•ýºø$üíÿ}=ýÈü33Àý“úb’øxü“ÿ6ü»ü¬ýB“ÿÃú±ÿŠü~ýÈþËû—ý+¸°!OüAýVúmýlü%ü)üzþ75þh¼ÿDÁÿ_üWüE3ülù)üSýü¯úþ8<þ#ü¬ýüO<þRÿK½ÿu<üïûþ£ö9üù¼ü@þ<üˆü¾†ý WüLÂþ%üiøÓÂþ•þÆü ì&þóþáÿ´"þèý°.ÿüÿÿ}ÿ0ü±÷2ûÇþ$ÿŒ³ùuü±ðþ'üþ€}ÿþf„üþ?ÿ€¿%ü+ýȯûÊÿpý€ùý¸ý3üÆ·þ€Çü!þÞüŸû§ýÍ›£3ÞãŒü•Íüëž#¿¤þ±ô“Š ‚üÈõüœƒÅE…¢üþÇü‰¹ûQ¦E­ªfóúøýѾü¨òøÏ!`'ü‡!ýÌúŸýü¯¨Ã7üªümú­"NüÉ÷üÑ®øHºý38ý6ýµúhÿOh1þ=-TùÕü_õ±úÝý šûõü’9 ëü*ü¿Ø6¯ùpýõúI7þ ÷ü:üeÿxü6/ÖŸÌeüMš“þ±üýŽ®[ù{ý]XýêýÍ:šûq½•rú[üãßüóºD›ü=ú½ÿ鯍üCþrûnCüîØÛŸlùÌÿÚÿ‡ûS}üÕÇýÙmúknü ‚4Žø|­üZ]mÈy þ¼üÕQüµúÎÿÍþŒüûLCüoû’n¾ý›ü<ü¨þLPüÜúsý÷Rü €üF/ú$ K€°üÿ …ø•I€ªü«sÐû ùÖþÚ€Ú¥ü#Vþ$þ‘€ú'ÿÿÿÛPüûùký.ýsý þÞþ8ü]ú›ü sý‹ü}þþÅù3üfÿý,üVýQ¯ý¶ü-ü€þ.üw+©Aý©çþôü«ý¤óüˆ(þ\k“þ@ü†ÍüžþýÖùnþ™\aÿPü=ü4ü5üFþâ­ööÕýþYö‡ü-¡þ~¹üÃØ=ühþÍû¹÷Nþý<üÿèþ°û3¤ý/›ÿFù5h$ýû%þsEü(ý(ÈŸýËý!þþHýNþÚø•ü½ÿTÿ‹þ¸ýØBýZûT{ø?þÐý¼ÿëüü9ýÿÙ û·ÿ—­üêý´þ^üÓý0þ·Vü}ýäùˆýÒü_þpþ¸ÿ²ýÎþ¼Aÿ“þjüç˜üàø]âý_ý_ÑŠû/þ%Oþ7üMü5üδþ—.ÿÁKü‰ûHýöö˜ücMüÃtýHü+ý¯»üøÿÿõüÔÿ?þ»ýàø”£ü þôý‚ÿ# ýÞÿ8ÿÐ7þ$ý{þÜöý(üÌý}àþMɤüÚÀ÷Ïú¨ÿøýÓBú±+ügLÿ7ü ÿ€þufþ +ý¬üŽþ€Õ8ü«ýÚEüëþ€3ýÿÓü¤£4ý€à þa`ÜþÀûÄ),þþŸ·þþÎûÞþØþþUÅÿAûþëþ ôÿ þŽGÿÖþþÿÿ þ°À•TþìÇþÞ"þ0ÿC4oÿ3#uÿ7ùþîÿþUÿþûjÍY€'þþþþ4þŒGÊ÷þ#–H÷Ýÿþ;þ_èþAÿ|ÈüùÆÿ|þþ¹Æþ‚ý4¡þ <û´4 þ·üZþ<þ^þ¨ÿ.§þ‰þþÔÿïÿÛþ(út(Ür%Iÿª9¾û+«ùéÿþ'ÿ7ÿ[þþÿ¨ãuüYŽ þÌŽÿÆüÐÿÎ…Sh*þþ°ûmÿ þþþ‰ÒÿþK%þxFþ’Gþ©þ’ú2¡þ»‰Øûœ#Bÿ$þØþ÷—§¦YÿB$þý‰Ê÷±ÿ°6aöþGÿNÿÞ'ÿˆ—ÿ þ8¹ÿþýù£fþ¼þUÿ,çÿTþßÿSJ‡þtþhî÷þ’ÿ9ÿ6ïÿ HþâÂøxüˆÿáþ¦”ûO þûÿaþþ¢þ€N)ÝGþ%þÙÿ€äþtÿ£ªüÚ¾€+þ® þþþ5gþ€&ý 74ýVýýO™$SÞÿ´‰ÿs)ý˜ÿ´¶i´s]cøütAý±–+Ò•ýnÿ®þ½üÖÿhÛùÿÉÿƱcûPûy€þIù|IKˆýdÂþ6û»ýP±möQ™üýÏüq´üMù³zü‘úÃáÐü(ÔþÂýÐüÿóþ² ™ùkþæÿµþ©ÿÙüêþ?ýbþü Ÿÿâ þ=ý¤üö#rÊNúúÿ­RûaÿÁ#Œþþûû+þèþ¹ròftÕü`ÿýlþÞþ¡›k%ûN_ýwÿOþÿÅ”ýn—Bö:ŠúÿüŒ8ý\_º ý%yü¬íý‹ý¹û]´ü!€„º°ù¸þ­òûöÿåüpùýSÏüÏàüt…þŒT4¸øƒýäÿcæÂÑûÍÿØ;Êüûkÿ_þöüF¤üàû «íý ýåÿ¾üúü–þ‹Fþ¯þÃüHýòüœúöæ€>ÿŒý®ÿ”øøóð€ýg6@üû]€ìý#ò_ÿþ;€ ü°þãý ü‡þÝýªþýýüüŽþ`0üNýNþÇþýKÿÃû›ÿïüÈü­þãÿúûýü`ÿ ýþ™ýÿüÁÿ üƒÿ6ûØÿ“ÿýÛüéüõüÒþˆúpúÙýÀÿýÚø{ý5þýþû ýÈþ[ú2üþý"ý ýþ6ÿšûüÐùÆêþ­û$ùCýzûýœøÞÿ…ýÉûý<ýüIüwú¦üHþýPüdýˆÿAù ü‹ÿAý üÞüü!ý2üÕüýýFýYþ¥ú'ý~4ÿm”ù^û<ŠúýRüýàý1üüäþnù¿üEûêü ýýýýý«ýÔûþìúiüÿû{þý‡ýÝøþþ¶Ïü#ü@üèýq'üxëüý§þþÌùmþýûÁ¯þ þýRýüRÿ§ûûÿ‘ÿÕþüQü(ù¦ÿµûiþýþUùUüKÿûúÿØû–1ü&ýÐù¾ýáû.üIý§ þªøVÿü2þ!ý˜þªü.ýÃùWþýµ ý·û:úHþFdüìûvþþiûíúêýKüüÿeûãûÔþÃûõù3ü¾üþÊû­úñûÿßù&ýÔ€·ü%üGÿ·ø6ÿ'ý1ÿ€üýeþVûÆøa€¼ÿüœýý3ü-€ýÛpÿýö-üvýÁmší¼ü‚ýÿÿ_™Âôþ_ñ~9Ký1zþÀercýíýý–üG®Q1w$­´ûÆûkxýÓù _ú‹þAÃýˆû!þZ k6•¢þhý¢û4ý?øæ©þô‹ú^‘.ýûÞb†ý¬ûFÚÔþ…S”ú‰ý‡gþƒrûFœýÂ,ü’¢ýÁššýâü¿I­%ú3þ]âû"EÿUñ)þ6ÿ ü•þ·ýTýlÕ™}É+ýðvÿïþlý=|õú•Áýœuþ.ÿÄË'üµA+tÓúRý[“ý(^ýøúEÿÎgýêý¾ûîýÇ,Œúÿùÿ=ü.9ýèçýK¢ûv6ý"ÿMÈÄýùÝkýT¢1µÿ<.ýkÆõýdû]ÿOý7¿ü"ü¬¢þ^ý…`þPýNý?ûåýçÿÑýÿGý]ôú¬ 3€ÿ§þMHú¸±ø€gý*¥üÒúÕÿ;€eýAË3þ„þ¯€Þý¢±ý’þ©<ûÙüj^¼²·ü¹éükÿ¿Wÿ¶þ#œÜþP?ÂüAÿ[ÏÿUW€ÕüHþéü®õûˆË%}¡ÖûûYþÃÿù'º¾¦û³ÿýëúWýpÅÕyGgüÖüù[yü øí9ü_ùÚÿ šü´¡$ýbþÆùàþ>ûýëÿ¨ùïüOÿÏA†ú]þiYû>ýíÿ:ûüôû 1Ùÿù"ü1û…ÿ¿ý}.ZÿÃýgÿëûÛýËú'oña­ÿ¡‡ÿü\ïúýØü@üe×ùý8ýý’8ûiýþäÌ_ÿ3ú!Èüqøü˜óãiýh'úâþÍêÿOþ¬þ^ûþxüÜ&Ðÿb£ù»ëþ©ûU¨üM$ýxù9©ü›ÿ‡þYÍÿÈëøfÿØü‚SRÿÉ™þànÿœ#†üÆúÉÝþWÿ½ü˜ÿ[üû“ûú‰ÿ2ýíýÜÿDü»üg‹üHú–üìÿiü »üBOú2VY€•cÿ‘ÿùø€Öü°Ùü£ù*þ3€Ú×üÈÿ‹ÿëtþ €xþèÿ(ÿ ÿsfþµÖÉÿÞÿŽ_þP þ"ÿÅI„%ýƒJÿƒÿ ÷öýbþI mÑ™ÿ0þCÿSýõÿŠ!CÿòÿIü%ü±ãþ\úø®ÿ©©þjÿ²ÿü›ÖûÐë…ýAÿ¨ú²±¡ý&úãÿgý5òù°ÿ ¾ýéÝ«þƒ:üÿ ãÿkvlú¶Àþuÿ ÿþHwêVÿöÿ3ʰþœüêÿæÿŠÿbûýõÿ;üÔÿ6MÿÃþsÿðúÍþòüDÿe^†©cÌýSüÿVÿÚƒÿ>púç\ÿ¸þUœSúÿξÿÛÿª_û²þˆ(ÿ*1˜Yÿ„_þMÿõÿA°ÿWþ­úÊ&þÀFÄ\púÿ½ÿŸý—Óýxå8¨úòÙýI ÿ<p tùžþ‰«ÿïþëžúþþ… ­ýïûŠÿ Žþ<þjS¬ýý‡ þPýLþiµý_û¥ì½ýöûìý>tûç¶ÿ´€8ÿªþÆÿ\ù}ÿŒ€ÊþCðÿ7ýSúÈÿ‘€˜Ú%Ûþßþ.€Yÿa`ÿìÿN þ>ÿÑ+ÿÿ¨oÿ:þËÿêÿ׎1ùÿý/Uòÿ—»ÿSÿ¼çÿ rÿ´ÿíÿ³E]ÿƒÀÿ¦ÿ¦Wÿqÿþæý0y¤ü­\[ÿ\ÿD›Àÿ‚sÿâÿéþVÿÿùo¬ÿåùÊÿæþ(‚úøÿrÿÿA¦:Bÿ¿ûgÿ«ÿ;Ðÿùþ›üZÿ„Œj€þ½ÿsÿÉþkÀÿÔÙÿ[ÿiþÿÿ§ÿmÿ þWüªÿäý1ëÿ¥ÿœ]ÿ[ÿuÌúõÿ6üa^¤ÿðÿfsÿ\SØÿºüúÿSÿrÿ¨úz[ÿæãÿrÿDærÿY ÿ…ýþÿUÿ/šÿ½ÿ­ 8Óúýú² §ÿ˜ÿ‚ú=ÿ·ÿsÿº3Ýü±Èÿ3ÿyÿ¥þiÿùbÈÿ]ÿ2Üÿ\üPTÿÁÿ1€ÿÇúbÿ)üÿ]ÿÚý*Kh!°¡ÿƒþºÿ¨lÿÿaÃ|þ:ÿªÿöú"Íl ÿ9üŠb‰ýqÿhÿv€¯]ÿ«û˜ y€·ÿqÿ1´þ˜þ€Üÿ€óÿàu]ÿFÿ€ôcÿ Ôý.ü˜þžÿ“ÿÁþ8ÿèþþ ýõ#jþ®ýþíþzúøü{þoWþñü»ãþôüêýKþ/þ¾V[=ýeñÿæýHþÕþƒþÉþ(þPrþJý°”ýÿ©ýçûÂÿ»Ðÿýèý_ýŠý#U‹÷Ÿý‚þ÷ þ<ý`ü<þ%þHþ,þGƒý8ùòÿñÿcþjÛþuü¢%»ýÓ´ÿ×ûqZ¶ý*þBþðˆþ<1ÿÜøýGÿýóÿlÿW­ùTþV 2þlþ¨ü©ýú[¡ùq÷ü’þËýÿoý¿þ„­ÿ$ûi¸eý!þOÿµû ýQ§À@ýBþ&üþ4ýþüþÕþЃý”ýà”ÿ þ0ýÇ:ÿiûŸ€ý~ýP§úÿýßýšþúü«þ—…ÿó˜ýéüßþ‹÷¢ýe¡ýŠý…ýëýHÿëÿûýWÿˆÿýñøS‘þ„þtýkÁxþœþ‰y¢þþfNÁÿíü€­Eÿ<åùüŠÌøeüCÿ6ÿÿ1ú^ðü¨ôýüü¥ý€©Í>þïÿøýÚý¬ÿ€výü.þ5šûþ€ðý “þgÿ“„õü€<¯ü®¯þTüÓùâüþLü@ü•üÂü<üYúÄÿ±þéý3ü6üšü«üåù5üðücýSü0üSüù:ü2ü1ü?ü1ü ˜þºþxüþÐüêþ§þò³üèüªüýýºþ<üHûºüŸü9ü±ù¾üÂßüZþHü<ü#6ü9ÿ]þ·þµø>üGü_þÅøyü þ9üPüúüþ:üÂüœþÓúæøyèÿ;üUþÜü°ûDüµþ¯ülþ=ÿ;ù312ü³úsü¯þ=üvüرþóÿŸü>ü²üïü÷ú3ù=ü]ývýPþCü@ü®þ¨ü‘ÿ,ÿ¿øý4ükü@ütü8üùþZiýÞ"þ°þ/üOüwÿå ìþ3Pý˜þnþgÿ=üÃùŠü%üí:ü–ÿ:ü;ü½þHü÷ÿbüRüjü½þ>üù¢ÿ=ü7ü¹þÑlüiþKü7üEü9ü"ü*ý þŒýÿˆþFüsûÄüµøôþ¡þKüˆþeüBü”üÁû&fM2ügý¨ý@üú'þ}üø‚ü:­üpüIý3þ§þ‘üÁüwýöÿ+üý¿þ‹ÑŒþ5üŒþù˜ú{ýðü›÷ú²þ/ü`üyü4ü»ü€ýš 9ü Güý€·þ7ü<þ> þ ý€ˆÿ˜Bü>üþ<þ3ü€²!'?ÿ[þAúÃWþyý/þþÉýsý/ûAÿ?ÿþ‹ÿôþJBûký¡þïþ[þFþM<ÿný¡þgý{ÿ þMÿ-ÿ'­ýáÿÓý†þ:q`ÿäýÿ ý‡ý–ý¢oýœû-ÿtÿDú£þëfýôþÿpýjÿký‰ýÝþEÿËøÿþwýéþw÷‰°þmýC+¶-ÿmý‡0ÿxûùág8ÿ[ÿôübüEÿlÿ ÿ"‡ùBÿ~Ëþ"û%ÿ„mý•ýŠþl¹ýoý éý£ûúsý¾ý[þóþ#ÿ 8ÿÃ~)úõýiýŽýýlýËÿAþ[üÍþpeý¿þ±ÿîVÿMKÿ$ xýoý-úBþ;ýÿmý,Äü|øzýKÿˆýßþ­þx&ÿ8ùŒrý#ÿ»ÿŸ :ÿþÓþ,ÿoýMüáýÖþ|ÿuÿNünÿËø¤ÆþÞŸþrýÿ·û¥ý—{hýÿÌ!æùK¦ÿGþ‹Bý•ý&þÜþ¯…ÿ·ýXý þ|þbý¥þApÿjýfúkû4ÿ#ÿûWeýàüÚÿgýJÿ€?ÿWü½Åþ!þ€Fÿ±ÿþ°ÿcŽÿæÿ€óþtzþpýÿƒÿ6þ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€×ûóÿ`ÿïûRüÓû+ žÜÿ¯ÿþ¬Þû5ÿcÛ÷ÙN5”ÿáÿ”žûü Eˆ¯ûÈýükÊú°ÿ· ?ÿNÿ/ úúÝgü6Mø³Þë5ý'Ïüþù¾ü¿Ô%?Eû¹û òf`û)ù|'ûløøâ>uû³*çüðüsþêÿ‘ÿ²¤ýî´zøoü§[ýbÿçû,þü¯ûœÿçýâÿèÿýû™û ·ÿU»ÿ9ùš úÏÿ‹þkˆý^ü•zûý±ƒ™Üÿ0óà‡sûÖþùû–þˆü0ðÿù91üñþÄü‘þ¹QùûðÿÇìÿ_ù´™ûõðû<é©ûÝÿ¿û–ÿ™‘¶ûSüûÁVûư¸ø¨øþÕþ«úrÿûÙ`ý»ÿ @|ûýĘͼ÷g½û‹ÿ¯ÿæ0ûLþ4VbkûíùÕwÿ/þ›û‡a—û—úÖÿú ý©ûaû¬ûíÿòûÝØþ\ÿ$_û.üŒû$nùî¡€­þvüáÿ‹÷ó–s€¸û†Lâúrùþy€å³ûÔIyý*ýè€33ÿµFü'úOÏüªýûüBþ×þ.ü•úvüuTðü`üèýäý¶ù…üÿ¢Vþ"ü¥¾ý±Þý³ü#ü`þ$üû’÷™ýò…ÿ•ý ý£ÿýëÿœþ ºCþK:üÍüæþýújþriMüÂü+ü¿üíýó%Öö§ý¾ýCöÚý‰íý2ÿ•üzÔ6üÂþgBû½÷ÿ8ýîüSÿ¯þ¦ûjyrýOÿtù{ýQûïý„Aüwý…ÿ»µýñýeýïýeý½ÿÎøjü¤€ÿ& þ]ý\rýûY„øÚÿ*ý¬ÿ¦ü©üeýjÿ•üüúµÿTrüÁý¼þ&ü½ý.aÿ.[Süfýú~ý«ü†ý“ý?ÿjxýF­þQrÿ½ýcüÍqüùà;ýZýw7ûþîHþ0üÒü+üÿ‡þ]LÿfEü¯û¿ýÖötüÙwüϳýDüíüSýʃÿ¡ücqþ!ý³ø¬qý?þýïÿVvý…ÿxÿ/þnýQÿmþüBþòìþþÿ³qü“»÷õúSÿjþ ú9!ü)ÿ1ü°þ€äÿÙ þTëü.ýÑþ€.1üzý5 üŠ[þ€~ýÛ…þ–ü±«‰ý€nýu?ÿ™ü¯ûyü0…¿K¢üe‡üÓÿNi˜™[ñPº6ü¨·ýª»@ Wüpý€ü3}ûÈ7WRˆÙ`¹úÇúivüæøQI—Jýžáü•úhýPN  ˆýaüŒüfõüEøzüÑÂø.² üçSìýýTü­ÿtµþûuVùü8þ“ûmÿªüñtûç²ü,=§üüó2#xù‡èÅúôAþ´˜þÝý_ûÇý£þS–7á\³ü!ßýdþiü˜·ü&Þü»Nýþzß›û­/[»ÿêùAü>šü6;QüиúÆþ¼è_üÿüÛúõúû{+9#nùãþùþFû¸5ü=‡ýOŒüì$ü ¸ýòŒ®øÑeü¯36Kÿ‚ü¯ÿàw ü}ú˜¥ÿüþDü« ü,ûBºŽýQüÃcüSü“ ü²ûÛýT¡ ü£ý5ü€úó™ €©»ý!¹øAœð€?ýšjŽû!ùRÿí€[ügÐvýàý€Çü!þÞüŸû§ýÍ›£3ÞãŒü•Íüëž#¿¤þ±ô“Š ‚üÈõüœƒÅE…¢üþÇü‰¹ûQ¦E­ªfóúøýѾü¨òøÏ!`'ü‡!ýÌúŸýü¯¨Ã7üªümú­"NüÉ÷üÑ®øHºý38ý6ýµúhÿOh1þ=-TùÕü_õ±úÝý šûõü’9 ëü*ü¿Ø6¯ùpýõúI7þ ÷ü:üeÿxü6/ÖŸÌeüMš“þ±üýŽ®[ù{ý]XýêýÍ:šûq½•rú[üãßüóºD›ü=ú½ÿ鯍üCþrûnCüîØÛŸlùÌÿÚÿ‡ûS}üÕÇýÙmúknü ‚4Žø|­üZ]mÈy þ¼üÕQüµúÎÿÍþŒüûLCüoû’n¾ý›ü<ü¨þLPüÜúsý÷Rü €üF/ú$ K€°üÿ …ø•I€ªü«sÐû ùÖþÚ€Ú¥ü#Vþ$þ‘€©ÿAýpG¿üKþ—Èüóÿíÿîÿ¤¨ü¦ý5þNiŸü¢üœ¥ÿ\ú¢ü´ þÉüœü7Êüÿ†þžüœü°üüfŒ3æüñþ] µüÞýþˆý(ýcpþ›þB°þ‚ý3ýýàý´ÿ‹þð±+ÿïþ¤ü«þGÿ®Kùþ¹ük¯úïü/T¤ûÆü ýªüKý‹ÿ5þNû€þýë9ÿcýüRýtEýw¾ýBþuÿΞüºôü ÿÝþ Wþ¯ý­üåÿžãù©ür$˵ü±üx\P û;ú¨ý~ÿêüÂý•ÿTýŽÿ'þ;û”§ÿšüYÿª²ûgÿgdÿ†ÿWÿ¿ü­üPþÛ-ý¦ü¨ü?ÖÿªüØ·ü%ÞücþØüÉ®üÏýñþƒþ¥üYÚÿ ûaþɺüY·üÿ©ýÇûþ þ*ÿ`SýKùJþ¿ºüWàÿÞþýÚüý©ÿqÞÿþ’¬ü2úÿ]ýýcÿxþUþþg™ÿ"ý ý'à—üxaÂýåþbÛþwÿÈú²ý<ú€ÿ´úvšüÞûü£üðþ€¸„ÿ´ýküßü¤ý€¬ÿšÿ¢ÿ¤ûèþœý€úÿo´ü¸ÿ$ÿŸü€ûþ§ÿ|ÿÿ?ÿ5ý²þzÿhÿÿÿ—ÿFÿ<ýzÿÿ´ÿÿDÿ“ÿ³ÿ-ý\ÿ¦ÿÐÿ‘ÿ^ÿµþ–ÿ÷þŽÿ>ÿBÿ˜ÿ[ÿòþ]ÿáþ…ÿ:þ¶ÿ“ÿiÿ³ÿÿªÿºÿ¼ýÁý¦ÿ!ÿÿ]ü‹ÿ´ÿuÿ+ý¦ÿÿžýKÿ†ÿAÿMÿIÿ–ÿ‘þÿ\ú‹ÿÿvþdùsÿZþ\ÿ•û”ÿÄÿ’þTÿžÿùþþ‰ûsÿÿ]ÿ@ÿ©ÿ¹þ¥üûþ“ÿzÿÀÿ¿ü±ÿÞþHÿ‚ýžÿÿ ÿtÿ²ÿ ÿ˜ý{ÿaÿ¿ÿlÿü{üeÿ¥ý·ÿfÿxÿ‚ÿ5ÿ%ÿÿÓûsÿ1ü¦ÿ:ÿ…ÿYÿLÿ\ÿÈÿþÁÿìü}ÿàþ4ÿnÿËÿ˜ûÿ:ÿ£ÿ#ÿ/ÿ^ÿ‡ÿ5ý ÿÿ=ÿeÿºÿý‚ÿÖþ†ÿÿžÿwÿKÿßþzÿ@üÀÿ~ÿÿÝþ0ÿ¥û¾ÿ|þ‘ÿ.ÿ\ÿ<ÿ¯üÛþ±ÿþÙÿÙþeÿÆýˆÿ\úZÿ²þ`ÿYÿfÿAÿpÿüžÿËþÆÿ6ÿÀÿPÿdÿ5ûµÿLÿ¸ÿ2ÿlþpý„ÿ‹ÿVÿ°þ¨ÿ]ÿþùýÇÿÿÙþîþÍÿ*þÄþ?ÿŸþÖúÅýªÿ³ÿ£þ_üÃþAÿý§ÿ+ÿ¦ÿ€¤ÿHÿ—ÿôûŽÿyÿÑÿ€ÿþNÿ¡ÿKþ„û«ÿ²ÿ€ÿùþ}ÿWÿ4ÿÿeÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ þ þ1ò1ò1ò>V4Dà.±37ü7c¶û7s¶û7¼“ö7ez}?ez}?S¤y?ŠÅ ?ŠÅ ?ŠÅ ?­?­?€?»÷R;»÷R;»÷R;¤%Y;–7Ù;–7Ù;–7Ù;_|ƒ=~uì>~uì>~uì>wE?’çû7s¶û7s¶û7"ëù7ez}?ez}?ez}?y·n?ŠÅ ?ŠÅ ?ŠÅ ?Bk>­?­?­?í$?»÷R;,=Ò÷ö=»÷R;–7Ù;–7Ù;Zã\=–7Ù;~uì>~uì>~Œ>~uì>2Éû7zòñ7[+Þ7=û7ez}?à‹s?¬RS?ez}?ŠÅ ?ŠÅ ?kø9?ŠÅ ?­?­?­?­?»÷R;¤‚b<–o;»÷R;–7Ù;üá;8ö;–7Ù;~uì>~uì>~uì>~uì>¤½û7Ùõ7^Äð7Ÿsû7ez}?ò±z?Ì$}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?ãZ'?§ý ?­?»÷R;U;¨{[;»÷R;–7Ù;%œ>üá;–7Ù;~uì>U½P?~uì>~uì>7¹û7Ç‹ù7Fú÷7óœû7ez}?‚*1?r`}?ez}?ŠÅ ?á =>ŠÅ ?ŠÅ ?­?øB ?ãZ'?­?»÷R;»÷R;»÷R;´ƒ<–7Ù;–7Ù;–7Ù;…0o=~uì>~uì>~uì>Ì݆>~·û7Øâú7§Iú7˜uø7ez}?ez}?ez}?Oôl?ŠÅ ?ŠÅ ?ŠÅ ?Y‘~uì>~uì>~uì>á¶û7°eû7I+û7z\ú7ez}?ez}?ez}?öq}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?`î?»÷R;»÷R;»÷R;÷M>–7Ù;–7Ù;ë›>ŠÑf>~uì>~uì>ËÃ]?~Í@?¢¶û7«—û7¯û7÷ËÉ7ez}?ez}?:©1?S?ŠÅ ?ŠÅ ?šð>Ë|>­?­?­?`î?»÷R;»÷R;»÷R;…;–7Ù;–7Ù;–7Ù; <~uì>~uì>~uì>~uì>ƒ¶û7¶ªû7[¢û7ø¿Ü7ez}?ez}?ez}?æÑ|?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?‘—Å>»÷R;´ƒ<»÷R;…;–7Ù;L«¨=–7Ù; <~uì>¤æù>~uì>~uì>ƒ¶û7¡zø7Å®û7nÆê7ez}?àÑf?ez}?æÑ|?ŠÅ ?À ?ŠÅ ?ŠÅ ?­?­?­?’©ì>»÷R;¿²U;»÷R;X|;–7Ù;æÜ;–7Ù;ƒ <~uì>~uì>~uì>~uì>s¶û7^ú7€³û7ìæö7ez}?öq}?ez}?Vû|?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?`î?­?¦¼6?»÷R;¿²U;»÷R;¿²U;–7Ù;æÜ;–7Ù;æÜ;~uì>~uì>~uì>~uì>s¶û7Â9û7Xµû7¾»ù7ez}?öq}?ez}?öq}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?Åú ?­?`î?»÷R;»÷R;»÷R;¿²U;–7Ù;–7Ù;–7Ù;æÜ;~uì>~uì>~uì>~uì>s¶û7ç†û7¶û7àú7ez}?ez}?ez}?öq}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?`î?»÷R;»÷R;»÷R;¿²U;–7Ù;–7Ù;–7Ù;æÜ;~uì>~uì>~uì>~uì>s¶û7S¤û7D¶û7ëUû7ez}?ez}?ez}?öq}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?`î?»÷R;»÷R;&ÒÊ<¿²U;–7Ù;–7Ù;–7Ù;æÜ;~uì>~uì>~uì>~uì>s¶û7¯û7±Jö7È”û7ez}?ez}?÷w?öq}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?Åú ?»÷R;R- =Š=»÷R;ª.´=–7Ù;Þ;–7Ù;-2ú>~uì>~uì>~uì>’¶û7aæó7q–é7›©û7!§h?·Šu?qm?ez}?Ýæ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?W?­?»÷R;}·Y;æNó=»÷R;–7Ù; +à;7í;–7Ù;~uì>~uì>~uì>~uì>ƒ¶û7c?ø7¸x×7ˆ±û7ez}?¢e}?â»_?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?ï¤? ²ý>­?»÷R;bîÆ= }>»÷R;–7Ù; +à;€<–7Ù;~uì>~uì>~uì>~uì>ƒ¶û7Öâ7(2±7›´û7ez}?·ae?̦>?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?ï¤?–üË>­?»÷R;„Ap;2¬;»÷R;–7Ù;S@>³R?–7Ù;~uì>ãÕ@?LG?~uì>s¶û7öºô7mCî7Ƶû7ez}?hO?ɪì>ez}?ŠÅ ?{§|>yÐb>ŠÅ ?­?ÿ7?†IQ?­?»÷R;»÷R;»÷R;»÷R;–7Ù;–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>s¶û7s ù7”ö74¶û7ez}?ez}?ez}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?»÷R;»÷R;»÷R;»÷R;–7Ù;–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>s¶û7;²ú7;Áù7S¶û7ez}?ez}?ez}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?»÷R;Ê.+>»÷R;Þž+=–7Ù;D™F=–7Ù;–7Ù;~uì>Íãâ>~uì>~uì>s¶û709Ò7/÷ú7Üùñ7ez}?¥ÊH?ez}?\“s?ŠÅ ?Ž?ŠÅ ?ŠÅ ?­?­?­?­?»÷R;>V|;»÷R;Wt[;–7Ù;>è<–7Ù;*õá;~uì>~uì>~uì>~uì>s¶û7±Tã7|mû7žI÷7ez}?ûû|?ez}?r`}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­? LÖ>­?¶Ç ?(wÐ<>V|;»÷R;‰d<–7Ù;>è<l=*õá;~uì>~uì>¬¬>~uì>tö7J6í7Žšû7÷7úÉw?ûû|?æv?+¬z?ŠÅ ?ŠÅ ?Æó)?ŠÅ ?­? LÖ>­?¶Ç ?n«ô=>V|;»÷R;»Ì];Î'Þ;>è<–7Ù;X_ä;~uì>~uì>~uì>~uì>жÜ7ˆÁô7Ò«û7Lnù7#®_?ûû|?ez}?OY}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?~?àÝ?­?n( ?®®¾=Nj=>»÷R;»Ì];;¬Æ=ýí‘>–7Ù;X_ä;»Œ??-›@?~uì>~uì>³yÖ7tfË7e²û7v‡ú7ÉTO?^®?ez}?OY}?¨æ€>þ“}>ŠÅ ?ŠÅ ?½»â>Hqò>­?n( ?ç †;Ùà;»÷R;»Ì];Æ ~uì>~uì>~uì>—ñò7³Ìí7ê´û7êû7Ì|?ë|?ez}?OY}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?ù×B?Ò 6?­?n( ?»÷R;²˜\;»÷R;÷×í<–7Ù;'"ã;–7Ù;X_ä;~uì>~uì>~uì>~uì>ñ]ø7üSõ7åµû7DÒô7ez}?3]}?ez}?SÈv?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?áû ?­?n( ?»÷R;²˜\;»÷R;†;<–7Ù;'"ã;–7Ù; bê;~uì>~uì>~uì>~uì>¬oú7º[ù74¶û73ö7ez}?3]}?ez}?¦>{?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?Ü_!?­?d,?»÷R;/HU;»÷R;Î)M=–7Ù;'šÛ;–7Ù;ÙBì;~uì>~uì>~uì>~uì>Â9û7²¼ú7c¶û7åGí7ez}?Bs}?ez}?Tq?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?¿?­?Uâÿ>»÷R;/HU;»÷R; ¬p;–7Ù;ø=–7Ù;mÎ÷;~uì>˜Ö!?~uì>~uì>ç†û7\û7s¶û7‘ó7ez}?õ)`?ez}?}?ŠÅ ?€R¼>ŠÅ ?ŠÅ ?­?Vx ?­?®è>»÷R;»÷R;»÷R;,(Ì=–7Ù;–7Ù;–7Ù;mÎ÷;~uì>~uì>~uì>~uì>S¤û7ü“û7s¶û7K–ß7ez}?ez}?ez}?0‹d?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?®è>»÷R;»÷R;»÷R;¼3ž<–7Ù;–7Ù;–7Ù;  <~uì>~uì>~uì>~uì>¯û7M©û7s¶û72 æ7ez}?ez}?ez}?üéx?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?F}Å>»÷R;»÷R;»÷R;ß >–7Ù;–7Ù;–7Ù;=/ <~uì>~uì>~uì>~uì>γû7i±û7s¶û7Ò7ez}?ez}?ez}?(]?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?âJÁ>»÷R;»÷R;»÷R;Òßž<–7Ù;–7Ù;–7Ù;v<~uì>~uì>~uì>~uì>wµû7‹´û7s¶û7~ÛÛ7ez}?ez}?ez}?íŽx?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?t—¥>»÷R;»÷R;»÷R;ž=œ;Ö¤<–7Ù;–7Ù; yå>¿¦Å>~uì>~uì>«/s?$¶û7¶µû7s¶û7]_õ7.z?ez}?ez}?ï ?´,?ŠÅ ?ŠÅ ?mM=­?­?­?ÄýL?»÷R;»÷R;»÷R;»÷R;–7Ù;–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>S¶û74¶û7s¶û7+Kù7ez}?ez}?ez}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?»÷R;»÷R;»÷R;»÷R;–7Ù;–7Ù;ë(þ<–7Ù;~uì>~uì>;„!?~uì>c¶û7S¶û7ñ¶û7*Êú7ez}?ez}? ŠÅ ?­?­?­?­?»÷R;»÷R;»÷R;»÷R;–7Ù;–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>s¶û7c¶û7¢¶û7L\û7ez}?ez}?ez}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?d=»÷R;ÊkR<»÷R;–7Ù;–7Ù;õåÝ=–7Ù;~uì>~uì>7W5?~uì> Hô7s¶û7€Jù7 ”û7˜ëu?ez}?ù`?ez}?ŠÅ ?ŠÅ ?§Q•>ŠÅ ?­?­?­?­?DbY;»÷R;‚U;»÷R;bÓß;–7Ù;ðSÛ;–7Ù;~uì>~uì>~uì>~uì>oø7s¶û7‰¸ú7\©û7îf}?ez}?Žt}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?6?­?_E?­?bd=»÷R;¥ŠŸ>»÷R;bÓß;–7Ù;i>–7Ù;~uì>~uì>cô\?~uì>×4í7s¶û7\ ®7y±û7®þo?ez}?‚ ?ez}?ŠÅ ?ŠÅ ?â- >ŠÅ ?6?­?6$ ?­?Þ×r=»÷R;Ü—;»÷R;‡2ì;–7Ù;¿[<–7Ù;~uì>~uì>~uì>~uì>nç7s¶û7Ôýê7‹´û7ún?ez}?Ì^|?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?+?­?k&H?­?9Ø=»÷R;^ÆT;»÷R;Ö&ú;–7Ù;õÛ;–7Ù;~uì>~uì>~uì>~uì>'é7s¶û7 ~õ7¶µû7%~u?ez}?4u}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?Ò²ä>­?ÍÖ?­?Fî >»÷R;»÷R;»÷R;„ç<–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>ª,Ò7s¶û7ÛVù74¶û7Û€[?ez}?ez}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?  Ù>­?­?­?ïÏj=»÷R;»÷R;»÷R;Q<–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>0 Õ7s¶û7¢Îú7S¶û7vo?ez}?ez}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?È;²>­?­?­?\H}=»÷R;»÷R;»÷R;›<–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>HÖ7s¶û7^û7c¶û7+¹m?ez}?ez}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?6µ>­?­?­?Z4;»÷R;»÷R;»÷R;éTÙ>–7Ù;–7Ù;–7Ù;áO?~uì>~uì>~uì>(Gô7s¶û7¸”û7s¶û7S?ez}?ez}?ez}?Üz@>ŠÅ ?ŠÅ ?ŠÅ ?˜MM?­?­?­?»÷R;»÷R;»÷R;»÷R;–7Ù;–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>Càø7s¶û7›©û7s¶û7ez}?ez}?ez}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?»÷R;»÷R;»÷R;»÷R;–7Ù;–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>f¡ú7s¶û7ˆ±û7s¶û7ez}?ez}?ez}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?»÷R;»÷R;»÷R;»÷R;–7Ù;–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>·Lû7s¶û7›´û7s¶û7ez}?ez}?ez}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?»÷R;»÷R;»÷R;»÷R;–7Ù;߯9=–7Ù;–7Ù;~uì>Ä;—>~uì>~uì>&Žû7ñ¶û7Ƶû7s¶û7ez}?Ýs?ez}?ez}?ŠÅ ?Hb4?ŠÅ ?ŠÅ ?­?­?­?­?»÷R;»÷R;»÷R;»÷R;–7Ù;p_¹=–7Ù;–7Ù;~uì>h Q?~uì>~uì>§û7ñ¶û74¶û7s¶û7ez}?1h?ez}?ez}?ŠÅ ?ÆÒ;>ŠÅ ?ŠÅ ?­?­?­?­?»÷R;»÷R;»÷R;»÷R;–7Ù;–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>œ°û7¢¶û7S¶û7s¶û7ez}?ez}?ez}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?»÷R;»÷R;»÷R;,=–7Ù;–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>=´û7ƒ¶û7c¶û7‰òñ7ez}?ez}?ez}?à‹s?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?8ß<»÷R;»÷R;øJ»–7Ù;–7Ù;¯Í½=l>~uì>~uì>›ê0?—ªõ7ƒ¶û7s¶û7A©ó7QO?ez}?ez}?Ûkb?øä[?ŠÅ ?ŠÅ ?z*ž>­?­?­?ãZ'?,(X;»÷R;»÷R;ÕÿV;¾m¢=–7Ù;–7Ù;Ü^Ý;¶Ã?~uì>~uì>~uì>î‘ù7s¶û7s¶û7èTø7:Új?ez}?ez}?n}?ÓxÎ>ŠÅ ?ŠÅ ?ŠÅ ?V×#?­?­?yv?»÷R;»÷R;»÷R;ÕÿV;–7Ù;–7Ù;–7Ù;Ü^Ý;~uì>~uì>~uì>~uì>,åú7s¶û7s¶û7ðú7ez}?ez}?ez}?n}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?Í…"?»÷R;»÷R;»÷R;»÷R;–7Ù;–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>œfû7s¶û7s¶û7ô?û7ez}?ez}?ez}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?»÷R;»÷R;»÷R;»÷R;Z¹Â<–7Ù;–7Ù;–7Ù;?öò>~uì>~uì>~uì>9˜û7s¶û7s¶û7<‰û7>y?ez}?ez}?ez}?ï„?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?»÷R;»÷R;»÷R;»÷R;Ò$=–7Ù;–7Ù;–7Ù;Uºõ>~uì>~uì>~uì>«û7s¶û7s¶û7/¥û7·Šu?ez}?ez}?ez}?#?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?»÷R;»÷R;»÷R;»÷R;–7Ù;–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>&²û7s¶û7s¶û7à¯û7ez}?ez}?ez}?ez}?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?»÷R;»÷R;»÷R;8è)>–7Ù;–7Ù;–7Ù;–7Ù;~uì>~uì>~uì>~uì>Ê´û7s¶û7s¶û7ÀÀÒ7ez}?ez}?ez}?”ÓS?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?­?»÷R;»÷R;»÷R;³ö{;–7Ù;–7Ù;–7Ù;½¶<~uì>~uì>~uì>~uì>Öµû7s¶û7s¶û7s®ã7ez}?ez}?ez}?Gý|?ŠÅ ?ŠÅ ?ŠÅ ?ŠÅ ?­?­?­?šÑÖ>»÷R;»÷R;=„‹<³ö{;–7Ù;–7Ù;ù|=½¶<~uì>~uì>s16?~uì>4¶û7s¶û7k<ø7õ7ez}?ez}?Ñ«k?Gý|?ŠÅ ?ŠÅ ?ôœ“>ŠÅ ?­?­?­? Ó~uì>~uì>Å>Å>Å>©%¶>Å>Å>Å>Å>Å>$J±>h¾>Å>Å>rz¿>$J±>Å>Å>Å>Å>Å>Å>Å>Å>#Ð>Å>Å>Å>#Ð>Å>Å>Å>Y4?Å>Å>Å>« ?Å>#Ð>Å>‡’>Å>> ¾>Å>#Ð>Å>Å>Å>#Ð>Å>Å>Å>#Ð>Å>Å>Å>> ¾>Å>Å>ãQ×>Å>Å>¶Þ>Ô&?Å>Å>¶Þ>Ä?Å>Å>nþ‘>dÙ:>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>ëÙ?Å>´pä>Å>ëÙ?Å>´pä>ŸÞ×>èCî>Å>ª®ë>$¢?vÇ?Å>ª®ë>µŸt>eì“>Å>ª®ë>Å>'è>Å>ª®ë>Å>Ã@½>Å>¿¦û>Å>ÏÎ>Å>ü?Å>µ¿>Å>Ö¨ ?Å>Å>Å>Ö¨ ?Å>Å>Å>;A?Å>Å>Å>™Z?Å>Å>Å>4-?Å>Å>Å>îL>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>ø“Ý>Å>huÍ>Å>ø“Ý>Å>F·¿>Å>ó÷ÿ>Å>Úf_>Å>³¦ ?Å>RÀ>Å>ïy?Å>Å>Å>=â&?Å>Å>Å>@u%?Å>Å>Å>>ÉJ>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>$J±>‚Q¸>Å>Å>®Õ>Å>Å>Å>Øóº>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>Å>K—?Å>Å>Å>ÑY†>Å>Å>|ÿÐ>i¿/?è-Æ?°› ?‚8?Ü+K?5}@?3z??al€?ß¡2?@{?ßI?ʲ+?àß3?1õD?g(M?ŽZ)?›-^?[ï5?@5?»cU?_K?0¯v?‚Q?Ï h?N˜Ò>Vžu?úem?8“?…w?¥gH?.?PÌ[?ƒ¢?È4u?Le®>dc?Še >õ:?#â @9ø”?!Î?ï:9?´³ô=“d?‰!1?^²/?«Ýô=Bh‚?j²?ÌyL?ò}>½5?ÉüV?fyB?YS?µ¡?øC?úåŠ??»@eäO?ˆÏ0?Ï©Y? ¾}?ª&F?·5?v?YDf?…ìŽ?{Å(@úßJ?Á„’?^²}?4?¾Q5?]²\?¬ b?¾5?ž1?Ù^?dnG? Ýr?ýÒw?æ½H?1¶H?±f?)é£?D„}?C©}?qJW?x½«? ™n?!kV?vJ?¶‘>ŸÛC?Õ%s?Eç@?_ª‡?ëc•?€L?G?þ›?å5?žy?s–*?Ez?wd}?22k?™ùÎ@ø9?ÇÊF?Iß9?‹sJ?‰yv?œä?æMk? 5P>µd ?Ç™„?üþ]?:?Êp}?и#?€0]?E? }?²Z? öF?*WU?ás?ІW?·u?ÐPR?íTe?÷ö=åˆQ?úþ@?½¢û?yœ‰?’®c?5«B?šeb?,ë@…ƒ?£€?AWd?T?F#n?V»@?útH?bÐ¥> þ?øC?‚î?.F?·ñ?:cO?¯q?û©0?ä-c?«‚?2½W?¯j?ÊÈ?Z’‚?8×>Uép?5Ò%?ÿc?MT¤?õò–?Xêi? 6Š?;Vj?ŠB?F?ºã¼?€uz@žnQ?‘M?V¦œ?œ,ƒ>€‡?}Ò ?Ëña?º¶?CÒ4?‹¢ƒ?Õb†>ö€C?A?}…4?À›?Â7?à:¦?lÈN?¨‘?,Û>cª?¡‹€?ýQe?é«q?BÆé>a ¶?,'W?å:~?Í%?%=‡?çî°?ý€?F¢>¼&s>dÆ5?ù±¹> %\@¿q?Ï/?#u„?ß_?uÕF?üÊ7?yÓþ={Н?Ü9@ÙN)?Óù?x-?W–?ÑÚO?´³ô='?z¸c?K^J?FøS>eÛI?Šãê?…çÐ>„X>(VÊ?pÐ0?÷}?úS?ø@e?÷ãj?úƒU?b¡¡?¸¼M? `?†N?(;>¥¿?¨òA?QÍF?fº>ü5m?fï?F ‰?Ÿ6>xÄQ?nJ"?bÈb?¾G•?Q"»?ª„?ào{?¶0Õ?ÓÍg?4˜-?à$”?É™y?Üi¡>Ïó3œ>Õ?ƒÉ™>`¡™>ƈa?€?¯ƒ‘?šê™>ؽ£>æñš>òó?ÝŸ>b@}?Yñð>ŸôÇ?Ì)9@mDª>YZ›>&…@/eÓ>P‚º>û$>F?»s@Xý·>ѧœ>/ö @ÌŸ½=Ør>?CIB?qÐY?3üY> óŸ>ãø ?0§€>£mA>ë@Ü>?p@IGª?œxÖ?€À¶>vXŸ?¤`ð@êp@¤è–?µ¡@0šœ>5½?½`?Z?«> Ì?²×¿?ë¿ú?em¢@Hæ·>™Š„?"Ÿ>+N?;Q™>>Æ>áïÞ>0ê›>«dJ?¼ç?“ö?ÈV¨>Е‹?“J>×.O?›>À§>B²œ>ðW­?Œ¢Ÿ>,¹r?v¤>@‹Ÿ>n‚:?ýß> ?I´/?$Ýt?õÆ>œlð?~, >ÿÞ?«‚±>5z ?Ôÿ>1êM?y>ú¶>ž9 >·‡?d± ?5?¾È•?!“’?Äá@ç‡Ù@´íÈ>aL>ÃÒS?‡C—?¹> ¥?VK™>vâ>ç>8ãc?ø·â>Bl¯>µ?Gý}?Ë–`?®µ¨>›w/?Y6Á>Ìž>Z>aªÝ>9Ky?ΧL@Þ?ëIÛ>f_š>Ô)å?q¥ ?XTš> µ£>§¡â?“5Þ>öt£>.ž>oïÄ?ÇV >,‰“@e¹?ìq“?ÿ?_?öF¤?¦?“Hð>…üÃ?±8š>átf?F± ?pHÕ>e¼/?R‰?5?~½>Cç’?ÿm¬>aº%@È¥£?ö¡ƒ?»ýÃ>‰å?Ü“?]/?”tÊ>­e?‰ë¢>FAbS?ûÎÅ>`B?‡ê@x?Öš>€cÂ> i±?' ê=7ŽÒ> ­>…Ÿå>u^‘?þ›@Ôn>é+?]u§?®¦0>›],@Ä:8?y%b?V’\?ô7>FJž>GDX?](K?f´Z?ÔÀU?æbœ> V¡>âM^>E’<>’_?žœq? ž ?[®“?"~Î?pñ?έ/@騻>s_?ÎU0>X!ë>÷À?EO’?f‚‚?òNù@’ò?Ò.+?ÌŸ½=’72?ÕÙ?­›ß?„§>Ìí?²”Á?*­?†˜>ûÓb?Dì@ ôø?Ìf?Ó ¾?`St?Y©*?^³˜>r^?>Ó–?@› >Ÿô@ww³> …W?™8®?‹³I@òÝ,? 0^?ܧ>è@›>wxV?N#>LÒ>Pèä=}¥Ž?©3_?´¼"?ÒN@8ÀÉ>´¡-?ú V?Ežš?®Û“>ÕÍV?ÂÓ@ ßÖ?(A#>‡Ë?m®É?Ž©³?9{¬?u\?àx@B™¬?Ã?«?ò¶=9±”?7”> KÊ?î­>qh >“c/?éÂ?ðAe?¸ð@>+K=¢?`3®=ü¹>…?u>ô6›?í?~þ=k/ƒA€}5@¢š> ÔH>’®Y=Μ‘?ög8>EÄ?´…g?j?b.k?Ç/>+i'>|EB?¼K‰=X¡.>¨^>FaŠ>w¡r>ÑYÝ?î‚I?•±—>ó®f?QQ?|Å^?‡£‹?$"?‘Ð?øè‡>ÑM?I?ÐâF@Å›o?£í?×Ò?I@ë>à·[?ê?3l?céd?©a?Xq‡?Á]Ê?“.@&ÀÓ?¦¹Z?ºêø?êG>µÉa?eKÉ?W_?9¸c=t’?8Í#?`²? àE?ÄÞË>@ɘ?#4?Âh˜?i)«?g6?`B >"‹?4?ð,@»k >øËx?v¹>Ï¥E?{ç>åú,?#éþ>—h”?C>,t>V>x…?,! ?—·Á?æÚF? SŽ?Ë>Àg?mÛk?îÈ?·®„?0ÀÏ?в?À”?5Á:?2–Ï?w€=öNƒ?<ȵ?€Ê*>›šw>Iœ?ªå?—šY?pB>ô…¡?¡}{?*§›?X$«>*Fº?¢Ë?4’>ëhŠ?p–%> k³?¸í>ã1>î«-?5“?S ?'ë">©D@;A}?gV?UÆ0?.Sß=Œ°?X½­=®?´=Ú!? ý>üãŽ?¼âŸ?5uN?»x?…?‡Ô±?fQ?„Á‰>ûá´?ÑÈ >  Ú>ƒªP=~œ?¦Ó >ˆß7?n–ª?¥§Æ?sÓ?úÿ…? 5!>=ÈE? À>?‚›2>¢®=· N?‡@†W^?aØ2>‰Çò>õË-?…>6v£? %]Aêæ‚?ìáT>„?~ >’í¤?œO?¥x?¦P‹=ï7!>ëWK?šb=—5>½É?>ú&>´B>9>Ýj?ªÑ?&8>¬x9>6*>Îöª>ÎÏ>ÖS>‹?3ª?k/ƒA'xÙ=Gø«?•¹?zF&=¾ >>ܦ«="\>ø>c„l>LÎÒ= ÅV?ýÒf?Àí{? âO?ƒàÄ?Ö0>¡U¢?ÛÊ>hž>É'>7›–?Ê0X>ÛË=«¢ ?¾’>3¤@S8=T°? !>ÅØÊ>ޱa>Ÿ+(>)ãÞ?çC@QЉ?Fß×?ƒ3¿?Ò1n>lç@>“À?½˜?UÙµ?˜?O­©?/µÍ?1‡Î?¿+>¯Ï?Ò%º>æã?¡+–>'l>ל?"©É?¼þ?â|Œ>¡‡=RŽÃ?—M„=œù¨>b¯>æÆ?Ô¤­?ÉN9>*¶>s#À?Û$?Fâ‘>ÿ®W=dÅ?!>êª@ý½Ÿ> vˆ?ûÄ?š€>"Çu>§‹ç?íû®=|À>¥V/>Á_ö>·0û>k @f»?×+‚>V‚¼?Ôš?sŒ?§¤¹?·Ý?§vŠ?žÄ>Í?û‰?Òýò?KnÂ?Æc?ЇÃ?ÈiÄ>þ»?U b?\2£?øH?¨#±?4“¯?É%´?ªU»?Û§?}·¡?ôáØ?ÔY‘>d±@,%Â?vx¬?D4=ÿµ?i+?¶Ôì?(»¥?z??(Yì?²ÿŸ?¯ÈÓ?]¡ž?/¹?B7I>…Gç?‹L©?E¶? âW>7ºŽ?c:>?ɨ¯?ª£a>Wy€?¹Ý$?|¶¥?äh£>Ô H>UÖ¾>ßÎ?â–?ÄKà?"í>Œ°? _º>¨,H@uâ½?6È™?æd¾?اÞ?ƒ­ß?¢½²?XfŠ?Í@ã»z=¢2±?NÚ×?—Nz>_.²>“Ȧ?²»î?3Ó?‘¨G>Jl @$;@mŽ?Á—>ö5,@dõ³?ºT>t^ANs>QÜ?t`>¢ÿÁ>ñ¿?IþÒ?^M“?Ê o>®MÛ?¤®Æ?<ð?Íåƒ?êø#>ݶå?u[õ=š©Ô?Ä>_OÛ?+vd>Óó£?*@‹¶?ùì?A¸? Æ?û¡?ÑŽ¥>åÿº?¾÷I>æŒ.?”=ÛI? jO>4?u@¥ª?âÆ?Ô=+AÿÿO>T1™?§ì€?Õ´>'qý=¯œË?^L•? ÊË?þ$+>¢ƒÞ>?;Ûg>?œô?ÿŽ??OlÑ?ç;š>È?ÄÒM> ²Î?+¦´?1ÉŽ?¢–œ>D¬>ï·?=Ã=†@>°‹>¿ic>ƒ^>sX>t&t?åš?ù >˜>^Ëy>  Ä> ?ØCE> ÿõ?•îý?*¶>×$>,G@´†6?^Ág=* P>h*W>òÒï=ÀRG>]¶e>ì…ª>+â>íQ?Ò-q@þéþ?¨ù¿?LT@þŸZ>Ä'ˆ?ˆÆT>ætt>ìú]>>µ?E¦¼>¤õÇ=² ?=ú:>o'û?M _=Û-?×G>–C@HÁË?@MÌ?Pw#?½ªr>”‚@Ønj>öÑ–?éì“?ìª>À1m>êJ0?H6?½Ed>9®e>xê@’.b>g?h>ê>¶ê ?YRÔ>Àxb>"ÿÀ>Rd>û?ŠHÙ>Êh£?If>×Âç=bæ§?Px›>™{>SÃ>Uœƒ?f3è>°•?»Õ4=FP¶? 8?71>ÌLh>Šö”?ØiO=f!h>r7°@]x@cÞ…Až–n>ð‹È=úž?>-}=§/^? ‡>"t%@äBÕ?Æü2?Tñ¥>H€?F™5>¢µˆ?Tì @$Öf>Î(‘>R0 @sƒ>³Ø–>vUh?"}?&%?µ4‰>‡J@úem>Bš?Öœa>mÑ>6й>®f>jœ?f;ë>+ ç>‡b€>BŒE@—«ö>©\s>0f>x‡´>®Eh>vó‹>é„n>â³@×Dj>®l>6m>å?’õ;?‚r?¤Zv>ò>˜M”?h”´>¾› ?KÎÑ>' l>W@î“<@µWg>|t ?Z€Ÿ> 'ê>œÍ³>m#@0ij?|‚L?½Aå>2 E?@j?³§=Ô²Q@~ã>Ÿ&8?;ï1?ûpa>i>B>?5™@€ç?†q¿>î†ì>Žj¾>¶‘ö>2„=?K&”>›Œš>ú²l>:½_@e¡ó>2{Ö>ôS?s¼B?ƒ®>y” ?®=ó>/Xø=¼Lc>\:´>-„®?vÏ>Ò?l»>‹»@"0È=˜Ó?‡Óü>Þÿ/@aŒR?E¸0?ÇØô>£‡#? ´W?à*¼>èq?ô›i>žs?Mš_@+Æ?*0 ?]¼a?_j?³Ô>´ðž?0Ù>xª>ñö™>+Dg>çN?4·d>ù^Ü>Ðÿ/>PA-? ðG?C~µ?ÅÄT?dqK?®þ³?º ?vßb>!?3 h>&¬£=êR@ðfé>´oˆ?É¡„?>ù1?,æi>õk>Ik>@F¤?œ3? %?}¼y?Õ©f>r(“=°è©>_ v?B¦¦>ÿëQ?2-d>£g> #ù>´?5@ËØ>w°v>zí?Ïñð= Ru?Ä®?¦¡{?>@Òv>Ȱd>p Ã?Ô³=ÊüÎ?^”c>O©Ð>F?ÛTš>rÏl>ØiO=Ý?™+f>½•³?i­?ô„ß?Xu?dg?Ò¹‡=ù%à?Äh?'?[ Ú>ƒQ‰>=ìb>¦žd>âä`>Xm«?HðÖ>6(@§Š³=ß?½»ˆ>É»?ð~—?ˆ?ÆÅ@&~f>tÛ@ݲ®>*@Z—ã>#Gy>r²=>7?X–¼>UÜŠ>,n!?Å”>¡è˜>œƒ?n¨?¦‡>Ë6?3ò¾>'ýà>.Âs>«8`?å™Y?I@91?ˆJ³>°±Z?¦) ?DJ@‡>m&½>áf‚>¬ #?ÈÕAÕÇz>áþ®>#›V?Xî½>g€€>&Ü„=QB?VVAþðQ>«øb?¦q?ü+‡?ƒÇJ>PÜ >þH!?z´?I¿€>+º€=”³?{AÄ“µ>*:Ap^ò>üÊÑ>}>Cö{>òÔ>¼ãÛ=“ã?yU?2•ˆ>AE…>©D?Â?ë'~>ûtã>\7 @gŒº>’<Ö>è ±?Ç4d@Ñ÷Í>ê?”Ѝ>s?oI2?3„?g§½>oBˆ>£ÖS?“:,?*!»>ÌDÖ> L ?q}¢?Õœ­?î>f?ʈ?ïs,?“ÕŠ>–±’?íì>tà?¶=˜=?T™>ðä>¢8¿>š-•>ݪö>¢¾>ÍWÕ>mY ?èj ?rî]>Lgu?Cr?8ºä>àñk>Êšú?vŒ ?¢öÆ>’ì—>ø?ÄVä>ÐöÖ>ä~>ñv`>øÀ¿@½½ç><¶¢>,ê?Š’½>ËÍÿ>Øcé>>¢®>ø¢¹>ÚÅÇ>.©¼>%"?J0? Í>xö>!…ê>T%=Éð\?DZ½>l§>µ…>è"?â§5?Èa!?´Y?²)¾>\)¼>'T·>xޝ>PÚ>ò¡?ó0u>ÆS”>4h?\­Ü>» >{ì|>îÒý>‡^? (ë>iÊ{>N£ ?©î>€Z?f-ó>æ3>"-î>À>Û~§?1: >€÷ë>8 ?Š©?K?³å> ÞÖ>úã>ÍV=›@53²?‘ Z>ô–ª>BÍ”=š¿ž>¤Öb>DýÆ>v2¾>ô}Ë?%°½>â…‰>P>øÆß>˜®>@Ó±>“²>X?Ü^¼>´ø>ËÙ=ÔÚÇ>E>ã>%‘?P¶Š>áÕ>/È>œe¼>#Žg>ˆù½>sÚê>Þ€@sÆ•=F‹ >s?Ž|Î=ë@‹?ÙæÆ>['x>ºx>Ìgv>2$f?âù%?/æ»=Îø$AiÚ½>5N6?CT‘>,]]>xB?å,?PÜ >Æp'>ËÞ½>ŠÄŸ>•Z=êÔk>–ÿÿ>h•>Ì>,x>Ýñ>š™$>+bò>ÇQ¹>’Ù>ì–?Õ×>^Ìo>ˆà¸>¿q>ä,>×Sx>È÷>"Á‚>¨Ó=hì>¨øC>•¾?þ,P=¨ÌN@šÐ²>Þ~ ?¼? jÌ>ϲ?Á÷ã?Åþr?5ÒÊ?÷#d?±S4?D¯?¸Ãú?8Œ?T`­?àÀ?dƒ¯?:À ?ž£Š?‚ÂÐ?~K’?Ò"ˆ?ŸWŒ?D(o?±„ @Áî? îˆ>óvg@.Ñ?ˆ±@È`><é? ?5í¨?r¾n?•?±‰ç=÷€?Ì´œ=ÒWå>cà?u•@ òm?zÓÖ>!Ý<>wˆo??_?é†?\?h¢×?1`8>±'²?§@>hr?¢:§?¶Ü’?E?­æô?‰o >ôÈà?M¿t>¢Š?j?Êr?¿o?¾â ?[¡?im©?F‹?Úï‘?ל&?—Æc?Õ²?¶õ¼?{×@b¦?´Jº?"ÛW?°„@ g`?G ‘?¶@I?^BÞ?$í?±Ê?ƒH÷?ƒ’ˆ?Ö%®?¤œ?`Ak?Ê+m?…'Ï?. ±?¾1Ž?±p?á>k‰Ú?ƒ}? º¢?M,?ˆ«¨?ßÚ?³“i?€†?>@Bf¸?þ?B®@k¯?\ì?Ñe¨> ´n?C¼(?'ª?ˆ‘?kØ?&&?ŠÉi?xý?|õ>ã ö>åž?hL?äËn?U”À>¥•??¶É‡?,“?8ô?æÀ’?÷áÅ?ªÑ?r)€?JP‘??9@£}Ê?¿ä‚? ~Ï?øÜ ?5?6 „?è^Ù? ”_?Åd>–o?òk?þØè?ᨋ>Öl?eè¢?'@?ÃÏ?\×?¡q±?ß?è ?¬ùY?¾Žl?Yz?húr?Æüè?žd?½z‰?uV\?¨³Ä>Vù·?x/>¥?`[Œ>Rz?6?íÈ?*YŠ?à]•?Qsn?än?¯àn?\¨Ö?l&­>.¨?Q*ë>yíE?%S>J<5@ŠØú>ÉL?Üí—?¶w`?@‰ï?4 Ò>0Ú•@_öâ?^5´?}« ?Ô¦>z‰?ÞXk?|Þ§? 2õA/ ?9¤Ž?Þ»?:’™?dд>B°©?.ø?ì•ß? æú>ÙÞn?ë§?[å’?¾/?§°?×Î @F1C>˜a>­  ?97?Wð?Öß?â]J?’]µ?¥¿åAÕy!>/k ?±W¸AI§-?lí>CÞ³?§Rm?!Ý<>[˜¬>E"°?^>Ý?Þîà=ëÿ>êHü>š*s>ˆ°’>À©¡?!w?G°§>p?ÒÄz?Ë@ ?N#L>¼‡F? Ð&? æ?.˜ø= œ?úD÷>)¬Þ?ýb@u@£vü>Ú?ûˆ?¿ç„>îbm?ØÝò?ð ?Šf…>™¥?:2?š˜€>¤:>gÏ…?•~>Þ~>̦Õ>Ôå…>dXš?‰÷~>¨X?d>³>Ãf@øà†>X @\L?©>>½#@\¾º>ž?#“Ü>Ô™?xs»@ÅK?rõšãr@ê·=Ÿ1Û>h?d’§?÷€µ>œª¿>6¹Þ=áV>æ[=Ô€?¶ù>ä’?}ÚÉ?½Í>…@ýJ¡?ªü\>äÚ?e‰?µ‚>:L?ìYK@ñ\?,ræ>¢p:?•ãé>ô€e?^ >ÔÑ?¶2À>*¥?¨ñ}>éå?Ê@c‚>\†?6&?Ô;\?£‘j?®ü?kPÁ>ÆÙ>ÒÆ>6–‹>x…?„kÍ>|*à>£›Þ?+Ë„>çh?;†>¬ª“@ü‹ü>Xƒ?ü¨?¡€?CI?àÎ?‡ÐÊ?_…•>Œÿ…>‹ei?çÛŸ?N‚>ù‚Ô>6° >iE£?Ô³?;—«?v?º[F@åo??€.u?iÍ?ÎÚ=YŸ@èU4?þ?=@ˆ©}>º:>×3?ë})@813?‡š/?`¡£J»>ç©”>0ñ?{ÏE?6ìã>ö6]>.ðC?F„…>Ô‡@@V¨?0Î>v€>FA'?Ïâ >ê†?Vñ]?Ç­>£*>½ >½?æý^@ëÔ=ÖÙ–?{L?ÓŽô?¼£@ÌÙ|?.áæ>-\û>ÑZ@:}>U?ªd„>'t.?Ðíð?È>­'@…פ>€Œ@iÖ€? \É?ž}ˆ>š­>õžI?ˆ £>?ÐÈ>Ê>Ó1 ?nsP>©[Œ>Ê!@»¿±?ù¿@G Ž?ªÂ? n?|î«>R׸>n®?›=C!î>¬LÙ>¶ ?ÖG@ ²4@媄>p5†>|…>N>·ðØ?×Ù>Ê¿`@F<à>À´’=ÒX£>…z£?~GÒ>ÄUK@ ª€> ƒ>çŠ>hf>#‘>(D>ÿºË@Õ/ >R @s‹µ?ðTL@æ¾Ò?2¾>ã·€>î7>brÆ=þ@?¼q>¯Ñ?ʉH@` ƒ>+†>ê·=\ä’@gÿ>>Ì$?®q@¢é@ÆSZ@¢æA‘Š=x@í‹?…Ú‡@‰g0?ïÍ$?À‘>ü€>ï.}> C¤?ŽÑ¢>•Ö?3ÀV=³gº?~xó>ñ­@ë ñ@ç%?S‚U?_@‚>Žr“?’©‚>y@e/£>t¡›>¯g>™û@í,â?Hµ?‰@—V)?:±?ÂêÃ?»©@R`?Ö?Ì˶?ú?oÞ>MÓï?O@±·¦?Pà?ê¨@Ú•Û?ÐΨ?ˆµ£?Ýø>|ÐÈ?Ë?½£â?JÄ‚>¦.¡>§@ÕÜ?¯.Ú?†í¸>Ew§=^²¼?ï^=,…>¯!Ü>gÿ¾?q¶?2]|>á > +£?bº?®¾>]˜=¤8¿?ˆ¢>ÛKˆ?D~>]þ¶?Óî @üï>÷@¦>w‘Ë?ÝŒÙ=:‘«>pìV>…?E¥€?’·?4:@ÿ­>•4F@úÇÅ?öí@|¾¬?fl?¿‚Ÿ?^N?JÕ@~ˆÏ?eâµ?Ø©?–f¼?0.í?uFô>­dè?7&Ë?­ÿ?íו?ƒÊÅ?uØ?e,ð?a”È?¥#Ï?tŽÕ?G{­?m3 ?ú¶?²ú?ç¬?XTÆ=ð°Ô?ßgi?ÎÖ@þ„ö?޹r?½çý?ºpÔ?áó@yÉÓ?»ž? ‰Š>‘ßð?÷—?§y¹?1ô‡>^T@R*?E ‘?\Ü?û{ß?£_'?–µ?õBAU[Š>ý£å>1>@-Þè?Ä2É?ÙÏ>¾HÆ?«©œ>hÄ…?9ç¿?ÔK´?Ò*0@Ä-Ö?rh?ÑjÊ?R3:@œ'·??$­=«Ù?îÖä?l€¨>dà ?F­?t_ã?Nú0@ýƒX>Ïß?ìÜ?Œ@øO–>­ª?^)@*[”>À?”¤>"Ëå?Mõš>Ë­>‰6@Tåó?5è?Ì%£>`ÕÚ?Öë@¥¡?ƒDÒ?üi`>ªï?f­!>]ó?C£*>Ó­@`Éœ>1޵?òª@=ãÃ?³äó?5è?SO$@SÆ?y:¾>ÐÆÉ?¥ì‰>{ €?^Û¿=ÝLO?Qjä>‘´¹?2º@ý’? ÖÒ?ûBÎ>0Qƒ>íºÞ?¤@Ty®>Æï*>.)@cgß?7¢õ?3Ï>rà?¸ð‰?¬Vž>p¾¼?6*’>ÏÒã?¦ƒÇ>‹0Þ?À\Ž>òH@° @¨šò?eÕÁ=Šàá?çGì?‘ðû=FW>¶¸>†Oœ>•™>×q–>ƒ?ö‰ã?ÝAK>*v>l¼¨>8¥è>Àn?"ã‡>t=ü?†1Ä?á >ÿqQ>¬?Œ1€?n¸‘=àI>Ô4“>>f>ZâbA&y>* œ?î‡J>Vín?¦?Þ@ú„@ì¶Ô?qg–>B¬?oÅ“>Ž@%>Ï•™>'ÕÊ?’~?¬à>©§„?G~>%Q¢?÷= @’²Š>U µ?„?0@²4>n;¼>°ƒ?çÒ¥>%±¶?<ݸ?¯›?ö=Š>Oi ? Á¶?Ü–>7Ð…>Jƒ”?\Ã>9™ƒ>Í?¨”™>M-?päƒ>,Ç>ÌÚ„>)eW@7·ß>Ï«Á?ñá>&´å=Äš@g`­>F,Á>)W…>:ž?N}_@@ ?ÅR=4ù1@|^M?ùž?x«†>þ(ˆ? ’%=Š·†>¢Ó8?¸_ò?’„˜?ýP?Û¼=ø‡]>Ä Y=c¡§?✺>ãÒ?f0G@N9¶>=P ?dÞ¨?3‚3>»ÄÂ?¡ß‚?d4˜>ËÌé>¨+–?–äh?‰tÁ>ägi?Þ‰ý>gÍ?L“?Ru?¡f>Ö)7?šU ?xŽ?:Eo@¢‚!?š€ö?fD?Ú…g?Ù÷Ñ>¬ì>TÉ>=‚> ±>¿ Õ> ±‰>L «?Mʘ>cþ>çI‰>óv@UE?šÏ?É^Ï>ÐÿÂ>Œ¹?{Š ?úp?Èu»>¦ð˜>(ÿ4?IòV?îÑä>i >{ʼn>L?ô²>¹? ž3?4©?ªaø>ØB?ÉBÿ>ÍY>20@@ê>4Ú?ÝŽ?6V">ýž+?Sõ?¯ô?ª”G?où>˜½>ÚÓß>äO»>¯á6?Ru=?’/4?•+ˆ>8;?72Ï>ûa­?è ?‰S.?ó$Ï>¤'+?æÊñ=篽>Ýk×>àÈ?k… >ˆ“µ>àd?Ü¡˜?ª{à=+@î·­>Kÿ–?ñXÌ?)èN?l[?Í™ ?¤e$@KCŸ>kµ?wK‡>š?Zšj@;¶ ?Ò7Ï?˜k¤>¹Í@M<•>O%@³lŠ>ðæ´>y?ªw?×;í>}ü„>·®-?Ô3>ô >¦Ä@­×‰?¼ª‰@@ ?+tz@–R‡?D…¹>¶Ý>z—†>M¢="7Ü>šƒ?ƒ^?E@ö?¤ˆ@Ü?|8ˆ>)|«>«•D>÷¿I?Æ&Ã>Éîà?¶)¿>§Ž=C¿ã>Zé?@þ\ô>9œ?ë>³?Øh‹>Ì>p5>›<?ðä£?DVê=Ø @ÖØS@²8°?l0-@,œ¥>®3…>vWR>•]£=Nÿ¥?“çQ>ž!?3À?_šñ>Ûˆ> ’%=yÂ?¯…>ÅX ?z“¨@*ÊT@aî?7_†?/P£=ñE}?jy*@ò©­?d,t?k›>¼Ù­>Áe›>&è‚>Ú·-@êŽ÷>Ÿp&@öA[=vÝ@2¹>fªÖ?¢„Ò?g©b?2kŽ?sÌ…> 1Å@Ù¨…>_qô?&©®?“¨%@”¦ä?½p?wÄ?}ïÐ?ó2?v4­?cE€?%ªŸ?¦Æ*?»«“?W‚?“ç?Jû?©¨?t4?‰³ÿ>'òk?-+?´Ê%?Ó?F?Ú?F¹¿?®å?‡ô¦?€¯?f›O>­_ @~^Œ?Ö€ ? ?^(ª?ŠÆy?miQ?¿Š9=šš @ï˜?!üI?E?:¦›?Û*^=ç??¶Îë?Úüß@ý¤?ª@®3>®…Ó>uæ«=¨]Ð?Sr?®"Ä?ÙGÄ?Œp?4 *?6@꩟>UÚ<@Òê¡?0E–?‰H?§o @c=?Š_œ?’š­?¸Òp?¿Î?úÚ?Ì @'ʆ?ê]Û?ÿ>1ÃV?lx?‡?4ÕÒ?V{Z?Mú?· ?­¶š?Z?/”o?WR?ùÚ ?”?'ÝP?¶E?ËÜ?BÑ?Ðt?ÈI?y@õž?ý‰?Â%1? ÔÜ?€$@ñ\†?YPŠ? äG?ie?bK?¥"Â?®?z—=?ŠŠ?Ñ“?èl ?  ?4]?Ò@8R1?®œ?L#?éU>62@è1B?”Ò?˜œŽ?Qÿ>^-’>Eüy?8dú?œÿ@Wò?Yß+?••?íàR?Óý ?B•?Æ?þ«?Þ³œ>{r?Ù1?(Ð?vË@Dí?Èg?˜*"?îb>ê^?%å{?Ê?@g>ˆp‡?+´9?σ@²>>hkö?š®? Öl@Æ*¬?}n.?ßS?™Ö??NPà?çH?F0”? Ç1?ÖDÄ?Ʊ?V?ÖQ@Õk?z*G@Ès?¦zÉ?.ó?jÅ?êmD?Ã?ɯ?¬Þ?Ã%?âm£>òµ˜?x£@IM¤?¼7=@ÝOl?›«°?Z b?+8?ªD?ë ?̤>Ï­?¡’?Y.‹?#™Å?Ø)D@ž?ŠÃ?þA?dóa>Žü•?z?2Þ?§?ynØ=¸F?ìP@]ò?`™‘>ŠÂœ?à#p?ñ…]>UQª?ë(@‚$@w@U?6Ç)?³hj>†>6•×?±c¸>mÚ?:ôÞ?7 ?BþE?Û*^=ƒÞ#@Ù²D?h?/kø?Íãè? ðÇ?*w? «ò=„…Ü?rø@.²?pgt?¨ù?=?%Ñ?Ä[?z Ñ@ùI? O@èÈœ= I @šÕ?íÁ?xc~?‰ÚX?Óà¾?:e?â4|@5®?ƒÞ#@rº>¦ ´>)9‡>åA³?ª/ž?Ê%Š?‰Dÿ?«’„?ø¿]?ª?ã@†ý>†‘?9jê?…÷&@p ¸>ÓÕ‡?ž¯@W´¤?ï/–?©^q?ÚMà?ß|Ö?n>ê?%B>U÷?q7Q?”£?Õ$Õ>7S?é=m?wí?ó´?}µ$?½=ké?*ä½=J ™>,õä>mÊ?ÔÞ?§’>Øû¤>GS&@ÌR0?´ø(?›Í>>¤•?ÀI§>™c‚?º¥>7ô®?2©?a¯À> ?éH€?3½>?À>а>Ư!?Ãò? è?§´?‘ç_?_–‚?wd@µæ‚?Úò•?VB?ör“?Ф?^î?.¦S?Û ?@TÖ?g¥?_’@®%Z?tf”?æM?Am‘?MŸŠ?ÑÈ@f›Ž?V¢ý?¬£¥?’«@Þ•?rÛ?0Ö>š¼†?A_›? @I Ú=eÀÏ?šŠ¢?¬[›?²„?A–¢?)$¿?T£›?‰!Ä?÷9ó?º[|?¸Å£>þ÷î?˜™?Q>Ö?n„›>OÆ@·mn?,]v?f(¯>UĹ?lŸ?k÷Š?aÃ>é?Hõ>õº?ü‡C?ì8½?$© ?¥v?Àã´>µ|d?<"œ?«æµ?Ô;ý?sÀÄ?°l´?°?3³¸?$f†?A1>¾o²?˜†?—¼½>KæL?δ‘?dº?™4t? ¾¶>»ûÅ?ù”?ëȺ>zâ“?ƒ´>…Á>––?–¿×?™}?5 ?³€?Y÷’?¦¤˜?öð?H>ITÌ?„?;>3˜? 8G>l¤?@µ>½êË?ï‡Ê?êÁ?åö»?nD@à,Ô?Àé?©1ç>w¶§?€óž>,.?R*Ó=R8?N¥>é¶?[@;ßv?ãg@‘Þ}?Ts›>E‚?ØÁb?›²þ>x¢B>se†?äò1@è²?Eþu>ËwM?9{©?Š:+?Û9¾?¦-?ë¿?òt ?a!@U?¦>ò•?åþ³?EÍï?úÙ6>˜Ó>WÐ?ÙW>¢”´>'WÉ>«¬´>Gí²>oY°>'á?ÃX(@Ï‚`>u’>Vξ>÷}ù>g^"?|æž>ý»?"Û?Øû¤>‚¿r>ɘ?§¶@O¤š=4Þ¨>ª>^S4>híg>h˵>ý_?Ìl>É#P?b´¬?–>@K®?ON¢?W®>îu€?N­>ó¥A³>ÛüŒ?…ZÖ>V>¢2£?D¡>x§“?“=§´?)P¢>ö´z>ÎHy>ɾC>ÈAº>ë=·>Üïñ>ð¸> Þ@ò Ä>™Š¶>ºµ? ìÈ@ñC£>Þ%?Ä_?Ãï>Úl?)v?^:G?¥Ã?å*r?Ó3?²Ø¶>+±^?E>ìÁ·>´¯j?L0M?à w>Oj?ãìª>VW? Iþ>¦8&? ¢=äh(?èm³=»îV>¸±„>Hf?šÿ·>+£M>~Ðã=-¹>Æ?Š>éi€>4 ”=w3.?*|>ŸX?³>"rÔ>L«´>Ä|>º{>¨ ?4¿Ñ=Üg?0¹„>}LÁ>d„>NhÆ?¦Nº>˜Á}>\;µ>ÚÂ,?ZU¶>tA?/1>`x¶>§F¡>J¼·>Žß¤>7?¹ºß>C-«>^4¸>I‡>¤òÔ>?å?ªÖ?ÊÉ•?rò2?»5)?/èÅ>[?Ô‡×?"·>d“Š>I?½©î?…ƒ?Ø8À=Íb?XR~?ÏWÃ>¶$º>—EG?ü&™?s?&wÿ>çÞå>μ>õ6J?Ðò½?ŽºH>£ ?¾?oô?¡¼m> ±?TOŽ>½ê?±Ã>:‡c>tM‰>¸=?䇟>ã _?³ä„>©ñ6?1x>a4F?ƒsÀ?m?šíh?T¿?õ\A?zÓ«?x­ ?^*Û>p=U@?}€?Ô™{>Jñ„>‹O…?°> ?¬¥¯>Ò>?9Zœ? ?½l²>²[A‡G?+Ú>¶—u>Ãnc>]z>q&\?½y>¤œ|>¶g¬>‚¯î>‹Ã§>ä«{>v©¸>4ã²>¢Î·>ðô­>L-;>adA?N >æVÑ>Ë÷>w»Á>Ë3x>ióú> S¸>>÷¿>K¸>Wp¨?¤Œ¸>JÞÊ>…ÿˆ>xt?ØÒ\>ø†¨>{íº=´å›>ëje>&˜Â>@¶¸>ª”Y?,@¸>$ïE>ý>yô«?8È‚?ŒÝ}>æ…>WÙ?Øc¶>íñ·>ÓÆ=᫊>†ù™@†Tw>Ø^¸>Oô>>üÒð>Æô>b·>“ i>P¸>¬?Jró>ž–¢=ZÌ(>êܶ>¸â=L¸‚>ƒk'@¬Jx>.x>ø¬v>Îp«>Ÿè?ê™´=½[>Ý ?Û„>™6‹>D_>ù`[?tj@~Ðã={w,>ê?>Μ>¡Œ—=¾*m>„Vj>á>|Öß=v&x>R „>ò8)>âÏ‘@|;´>@¶¸>h×(?¤¶·>™áp>.Õ³>r>æÀï=¿kx>)âƒ@c?‚>d½è= ¡>²G>O-¸>=š=H³¶>+¢e>þlÒ>¢.Ë>¬±›>ØBé?…v@•Q?%„©?B>q?ª?“ý?›Y@!?èi˜?1Ÿ·?døÞ?;ÎÏ>–ä@ܺ?[d§?Øà@“sÉ?¨ÌÕ?\E @°KÐ?èld>VÌ?šKõ>ÉRî?c´?Ð>$é–?º?Ö6 @£yç>ôìä=©è?O¹‚=Ñ™?¦Û?(KÐ?[/µ?E ?¨YY>Iý¸?Åx?Á’?Y–>žŒG@KK>4æÌ?vq\>:ß?;½?<4Û>fÕ>lÿ/@6>ø“Ú>#šƒ>ÞK?tG?¯ÀÏ?é¦?ÃìÜ>xñÓ?¿ÒŸ?t@4×É?]\/?ü&ž?MÉ?™ƒ@[â?ã™Æ? ©?¶Û?ÖÓÁ?HT??†Æ¼?Èg²?—½@vZ–?‚¶©?,ià?í[ª?)ÁÙ?Fv@š¤?¯¨¨?'>ô>ãÝ?E(Ï?޽û?øÂ>èî±?o‡E?‡è@†_@ a}?*Zº?éR @Cuï?û×?‚\ˆ?j·>KuÆ?KÚ­?(I¿?Ø^¡>ꥻ?sZœ?æ?ofÅ>¡p¢?/,L?†@ð?àm8?ÊÀ·>_e?‡… @1¶?»°Ï?qò>•Û™?yÀË>…dŽ?S’¢?»«? æº?ŒÁ?W8¥?+úÃ?´~­?…_@õæ">]†´?©Óá?±P×> ?íôÅ?kGÐ?u»@jЃ>¹”è?ÚŸÅ?+Už? ° >ÊI§?{Ò?ÀÌÃ>q‡0?£|Ó>+÷¢?BƒÊ>s?šÿ?¹Ó?½ ‰?žŠÒ> £@iy@ÁÅ@Ä@ª‚˜>ôà?7Q>ñ¾?À^>v3@°ÝË>œ~@„ç´?\ø?æ@Ci@±­Ó?´žÛ?·uÔ>—èÏ?Ë ´>?!f> ?ò6¼>ctž?ÑÑî?jJš?åô?>?]V©>©^ß?YäÚ?NŠA?¨ˆm>åû¶?ƒB§?ù.@ñÃ}>“E?âÈ¢?0Í>HÙ?Rã>|øþ?O(?Àž@ F»>Ûž@§•@ƨ?¬+>LHS?ŸîÀ?„ #>aš‚>¡æ>Ë>øÉ>ÛßÅ>Üÿ‹?Þf @5ía>3Í+>ÌSØ>eKó> 4V?¼¦±>®Þ?là¨?¨YY>Šº†>íœA@F±f?—]ò=¬@¾>¿>(aG>nD¼>ÉÍÌ>È—9?ȼ>Žn€?D›Ó?Yå"@ @ô~ä?­ÝÄ>'Ö³?W³Â>=>ÏÉ>S¾?åž?úÆ*>qw?YÕ?.¼?< >:¹?¾C¸>ñ%ð>‚±¦>Šà|>¨•@MñÏ?§œá>-·Y?r^?QMP?ìߣ?Ρ?rÒ?ò¿*?ü¶Þ?HÚ¤?gW§>;s@%Ç?õJ?½h¥?¨—š?ô˜?~Œ?éI†?Œ5>ˆ·©?Þ ? E‘?‚|Z>ÊW?Œ(˜?‹ä¢?±à×?”µ¶>^(¬=-9¬?ïs= ÞŽ>‰Ç>¡¥?¶T¤?Gö…>² ²=6&¨?bÑä>J˜¹>»³Â=®‚?’¦>úž3?cÑà=;¹?{¸Š?c?Öq¬>i‘‹?ßLÐ=8k¯>MTD>Óª?WK?@ú›?Oz@¿°>²Ê²? O?2ÍW?¨ÕÝ?°Èù>Ðd?Ô!ï>AöØ?⤼?í‹?]X?‡?Q‡¯?Á)×> U“?\‘?^oá?XèL?Uß·?ªÇ¼?.@x?Jd¯? †?;CÓ?¼­o?c®?]Ù“?Òº•?: Ë?ö5Ö=q¶?Ž1,?æ…Î?x5—?ßP.?0¬­?ðT?Âð?þ~Š?{?D•>20©?·èN?M¢^?H%v>0=©?„®?lV™?lu >çä´?eJ?ãÚž?Ÿè¸?–>L#½>{…]?¬J?‡;Œ?àg˜>ã~s?Áž¦> [?ƒ‘ @ÆCÓ?¬)­?öÕ¬?ÐÞ?—å?Í4 ?r¾l?ò/Ö=”¤´?Yðì??ðü?9ÒÃ?ÅѦ?eD@4ž<>NÁŸ?"éË?J}¸?ú~>úL”?ƒs?Dë¡>Y"?à«>È@?¦K¦>¬7?óÞž?ff…? /À??«>’*o?þ*f?ãk?÷ä?Ås>\É?Œ±(>·?—€4>º¿±?B­¦>‚‚•?cˆ¦?­ ?u@£+Ï?î/õ?¾Q±?))?ªôr?Ìn’>Ñ„Ï?ì™×=<Ð+?..™>CŸ@œÿ“?†;H?k­§?&Ø>Èzs>PýÆ?àÚÇ?Ovç>>ä9>pÃ?ªKy?<¸Ð?Õˆp>þå>É›r?§>‹ïŸ?ôg!>€…ˆ?w²¾>‹ƒµ?Ôß™>2ÞÔ?äKò?gœ?xæ=†];Apyÿ?s§>Ø¡;>A:¶>=p ?iÌ>ªG£>ͧ2?!Ñ?ð»E>‹{>®>Є¹>Btô@Û5’> ª?—‹n?² ²=P‹[>Žì†??Ò4?VÉ¥=<‡œ>(5œ>‡? >¤•?0 §>öÇ?0ÝT>Þæ*?J.Q?—Ž?h@­2Y?[ç >$g†?Îe >´>’eõ>a;‘?LùM?‚í>Œy?’ˆ>åp£?Iå¯=â!?(—>»”?W­?Ÿq¾> „?§?ŸÀ=?D$À?ÓÜl?¨  ›?Ô~??À?†ˆ,?“áD?´Ì?Êü?¬ße?ì¿ó=ÓŸ?ðCÔ>糞?=Ÿd?6>ü?ŠÈË>ª³>Ô_µ?Wp”?ã§?¬¿î=1–£?d@\Gƒ?È4†>í?YìÃ?`B?òQ…?÷½…?æúF>,¿ ?·[@ËK$?si5?u|?bmx?¥JJ?Ú‘?ÆyR?Ö¾p?Ý w?Ë7?Øá„?U'?xyŽ?Ý{€?÷ùö?Pè’?±(E?$¬i?Fu"?;“‹?1N…?å‡?û÷¡?J‘â?0U°?ßÇ?Öž?Æ »?0á}?r¨?î?ÒÛ?vš?‹"—?ë#>oO©?tµG?–‹?%IÅ?‰Fi?mô¦?Bwc?AÆŸ?ßÿ²?ðÛ?pà>XG±?P!ã?ÁÿÉ?+à>_oY?3?’Ëš?“ì ?ï_š?ÒR?ºü„?á t>šèâ>>2‚?X”?ÊåA?ż @\P;@×…¸?é&?íl?øM°?Jˆ±?ûò?Pz?õeU?p\ê?Šw?ˆ{€?Í´>8g›?ÄG¬?¹6?›•*?U>ß?é¨?ÿ=t?šš@¢jÂ?íQ‚?C¤™?´?Ι¤?.«?ê.ø>–7×>º9ÿ>V1@¹ç]?'3?cG?…£?†? ßD?5z¹?P?Wt‘?Óöz?Gñ³>Y­ƒ?¨R~>t´?.ÿˆ>dÛu?¡QD?\4¬?&½¡?Ú­?Ž„Ä?zÈ£?IÞª?ß­–?þo™?¼ e?‹ÊÜ>¸n6?Ò >JZ?µå>vE©?‚c?óÖê?ÝÂu?îݰ>Ñ™™>” ±?„S?£õ$?Ôa†>*™?~|? 8š?Üä)>šÓÄ?oRY?c4J?G$@Ö­>2»?éK?Õ8W?¸&ê>›3“?ÚPs?RÍ?:G>sÕŠ>HÃ?4F>rªÓ@„Ù?—e?"K?É,!?p-@hcÏ?Ž>·—?Ã=?ɯ?˜¯4? ¾?Ö/|?t•?ª³>ïÜ>ÂòŒ?]/?L¶È=—î>Êmì>àèq>Š>‘ ü>>™6?˜Ö>ȸ? ×™?UCƒ?±&”?Å·¼?Ò?Pž¹?ÅÃô>ìF>)Ðû>ß”?UQ?–L>vè ?WFÅ>|_Œ?¤Â=rëf?B€å>$K?ì—®?y!?«Æ?öÍÁ?œúL?p[ƒ?¨ÓÙ?1V¬?ïw¡?Ï‘Ž?pÔE?!{?ÆÏ@øËÅ?o¶C?ÜXf?›h?‚³}?ºÒm?¥º?Ü#¤?ö"¦?ÞŽˆ?xàò>Ž}‚?-ëÈ?Ð*‚?ì¹K?f½ˆ?Â|J?qq™?°±u?pÒK?õZ›>í^œ?È}ê=fõ-?<3â?·…?·ªÇ?â1-?_ó=ÒR™?Ømo?OæÅ?Pß>WÍc?L?3æ1?Õ$b>%R?êèô?ˆJi?’sK?V|c?{ÿ>h­K?ºE&?½`›?ÓOL?òGc?D¦?2´„?ûSa?•¢–?(‰?÷*b??þ}?€a“?|?Ia?ô¯?éÀ€?qfÏ?;ÉÐ?Ÿ3R?:Êu?²zº?/r?ci?È$`?‘ªŒ?‚—?Þú?[ò¹?A@?3†Ù?úx(@/Ç]?è{«?š¥ˆ?6AT?Ü"¨>ÓB‹?µ? =‰?Ó1Ó?:+½?Ú_g?éRœ?ßP‘?@@úúl?b…4?ÓLV?‰i@Ël?Þé?€ŽÁ?±M?Krj?:‡B?Bš¡?bð“?{o~?@†>0ˆ9?–Z:?èr£?29£?xÑ?z A ©§?75g?l0ƒ?b÷Q?% ”?Œo{?2ðˆ?åž?¬ª–?0V’?È—–?t?ît—??•?y?ïFL?gs?ãÉ›?½[Q?H*?Ђ?È?Ÿÿˆ?šB? «?¹ƒy?ØmI?¦’´>õHx?Òòa?-„?Þ8w?Õ?' œ?B¡?ŠL?ëaR?Š…?Ðe—?±ôQ?Dj?—ƒ? vÈ?³Ì¢?ÿ?‡lm?eGJ?Sj?‚‘?Œ½å?a‡? N•?KO?9:?Exr?ÚnR?mG@á3Æ?„ ‹>H«?R®Ó?D”?ʶK?v'ò>º¹ƒ?ç9j?,hz?Õx!>½§x?“ïP?àMI?ëhR?çw…>Óž?:„?bER?Ÿ?ûå‘?VÉ?+R?v¹>¨J >3¶¢?t9Ô>Õbƒ? ÉK?Ib?¢RŠ?8J?%i@>T‰? æ>.Âù>YI^?g<?Êa€?\{9?s½£?0¤s?_ó=Œ£?ëhR?§ ‰?Cñx>í-„?¥@?­Ìî>¤u >¦I?ÓOL?:Ph?bÿ?Õk‡?Èg?fáæ?iŸP?5û…?ƨ‘?Ÿ›?VN+>L„’?ƒI`?vL?o†Õ>Cç,@/?’R?˜ú[>ØoO?®;?⣳?4-@_ @6áî>‚o_?Ü/¹?3O?5Ÿ?ª¿?Ú–$?x¤µ>RÀ™?büÔ?Qàà><-?ï›?@?ô>wì¬>žÎ.?¸‹³>¢˜z?:S?•f€?0ž®>®S@& ?ɯ@WT?xHo>~ Ê?!?ø-À>ÜXÉ>cl§?k&@‹"?É©P=À»¿?B«ª?èD5?1¡þ>Õ@Œ«K=¼)±>‡:”?pP?nt>X±?‚Çi>¦”‘>ˇ¸=l„?ù‹?q‘?(À?ºz?ÞØAL»÷?Ub?Äoô?¾›¡?”h ?Ô%F?þœþ?ö.?š9ß>·…?(M{?%õ“?445?™òÎ?Ü~?Z>¡?ÐË>€&$?J¡•?+°>Ø‹?|FH?pId?ïY\?i)?cû ?ˆw¸>(@Ò>Y±¼>‹ÄÓ>p÷?Rì?£äË?˜tB?ät´>ÜÙ>Íæ$@"5?‰ã?xàÕ>÷x+?£¾ƒ?Å$µ>*€J?Dbô>PáÜ>NáW?”Ž™@Úü°>ïnF?‚Ü><`Ò?Ò¤?ÚÀÌ?šx?"Ì~@?pj?Úy`@¦?oj>„úÜ?6é˜?š?Åס?¯’¬>Ú_Ž>ªzE?R@@~ ?çÁ÷>†fA?ö>Â?mäø>¶ÒÝ>JÎM?ûl?VW>‚ïc?¾ö[?©íô?Æß?¾º?‡×?ØñA?Æóƒ>ðá­>~ ?F?ìŠü> d?à ?Šrì?ŸF>|ܳ?þò>*±í?1~@M??Î/)?›ûÎ?:¿­>kôj?©ü±>p&?óÑ?ÇéÕ>®~p@NÅØ>Í~O@0?`…@*ï9?u0ß>¡½?ž~°>¼1Ü>#nó>w*?´¬Ó>ZÁ?Z,œ?jÕ?cvh@È){?+b?r@?[-ã>ù±ä>Kc?OÙ=-øø>œç ?Ž[f?øx@Ž??Ó3²>úõ?8Úé>êk>QëF@3§P?‡ (@'ØÍ>ÔgÕ=`)?Óø¦?Í·?¸â^@/t®>©?*™·>._>ð~6>§ÿ>î¸w@6t‚>Œ?ðâÝ?í~+@èà?8½½>~ ¯>t>XÒH>ûˆ®?¨èª>™À?ˆÞ>@S¸Ò>òTÔ>Œ«K=Ëd@ß™ð>8æX?>vÞ?’Ò?Òÿ?"õ)@ÇH§=¿,º?½?ž~“@;.?úç?\ú>Õ¾®>.¬>?ô×?CtÏ>ÐþÏ?Ûêž= è?úò?Ä%ª?>1$@WðD?ó'‹?÷ð¯>Dz?‚¨¯> @Ž®I@‘e@•U?Ÿˆ>É‚‰>Øoè?Bÿ†>(?yÖó>ü(˜> ‹>œ¶?ž~Ê>®b…>÷”†>µ@Ÿ|„>~a„>.èœ>œk?w>¥>Ž„>úÚŠ>]U…>Z?µ>Ýœ?èj?†>^SÚ=¡â"?òµž>óC’>T}…>Éùr@ ê?>̲œ>Ul=\B?V?]š> ?†>{‘?›ä™=†>Ÿ ?^b?wò@Qˆ>C<¹=Û]>Úͤ=Ò/¯>šä‘>‹ ‰?ô¹!?šw?kf+>TÙ ?-ø>;?*!?@Ú¹†>aš>¢_ ?L«>¢Nœ>!ÝÏ>ŠŽž>ìï?\Q‘>ص>?öè‡> AÅ>‘„>´·1?µ°>­Ô4@‰™?¶¢S?ï4Ì>¤Ì>]?;»†>b.?¨…>¬€>jY†> å•>24ˆ>ý«?/ô†> »ˆ>Ònˆ>\ß>6Ê>Ù¿`?ª{Ž>@l¢>:ôþ>ÏI‰>hÊË>ì÷—> ‚0?Jð3?½³Š?{<‡>â†?/Q‰>ä¡>t>(Ü?Ö#“@dÏ?§Š|?‡2?7@ø›+>XÚ?T°·>Éf@ðžÖ>¡„>êK>ñ`@uD"?ô@NS’>€ ¬>CêX?ô† @Ô„†@:\ >ô>°±‡>ŒÍ@>:µ>èG‡>[s ?ª9?âá³>Ý„>|¢>÷Ôä=›Õ„>¨ÕŠ>Ó9™>Þ½ >·q2?T/‡>{“Ù?äxê=:ã ?* .?qÍŸ?¼õ@˜º¬>ÎCA@¯ ³?½ý"?ŠÁ„>J&¡>ýŸ†>„¯ª>€»?âVB?’¨>ëO >º©¶>éj’>r3"?ààˆ> †>ð¡>p †>/׆><©¿?Ô¨>?#>ƒTŠ>a‡?Qv‰?;÷‡>Ø? ¼@Æbö?I´„>Ï>“H†>Ð?·=îO{?á"‘>¾@C?1F ?ÂÄÈ>CÙ†>öƆ>pD‡>*r[?J­ ?Áx¬>¸ ?ÆÛ…>Ûú›=l^‡>ú^?3!Š>³*R@…>T*†>2ôN?þ?B¿1@¼Š>` †>Š¥ß=BU‰?ÈÃ"?ø±#?J°#?EW‚>ç…>?¶¯=ÿ÷|?ˆK>€»> ’?¦Ç†>í¦‡>›ä™=ªXÖ>µ…>ÐñÞ>òb>ˆu?Œ?ÿr>j]ù=ò˜@ý?hCÐ>œLÃ> 6“> ¹„>‡?…>ƒ|ƒ>|«?S”>·)!?§Ð=sý#?KN—>²ˆž?¤q>_wÑ>‹€A³…>^ñ…>W…>Ëž?÷k©@õ@–?šGe?†Y%?+ÐÐ>h…Z?oD?Ú¶?A¸?¤UW?j@/?Ó”Y?— Ï>Ü/ï?iÂË>×¢ ?^È?ðÆ»?­‘ì>ÙÅÿ>û?ÞçÌ>àóÔ>vÜÅ?J??UÈÍ>$Ø># ä?<M?¼Uà>oÉÌ>Zh·@4tW>ý=;?J)F=ü*?My0?ßó‚?'uÍ>ø– ?¢ž=-Î>ϤR@´ì??¹Ê@€OÐ>P×Í=þ¸­>ëJ¬=â´¤?Õ3Ù>P®à@thE?^¼“?íµY>¹@ƒ?h6>¦í5?¦eÀ@[óÎ>@ä>Œ#Û?äçÖ>š8?Öà?—±?5'?çI×>»RÙ?„3#º?ø>„`;?Q£?Ue?%Á ?ÞÕ>>Â?7 Î>wAJ?A?„g@,P=? 2Ñ>ÈS?<¬‰>h B?Za›?“è?Q$Q?üµõ?ðf?c5?´–9?…® ?á˜?ìa@†?¼ãÝ>œ·%?ü‰Ç>~0Ù>iuÊ?ñXØ?Z:? w?$ß*?Þ—ƒ?Š4>(Z“?âP?ò÷W?:ÅC?o:Ë>ãNI>éŒ?K³E?T3?MÓr?þH†?[0?¿?Fj¦?úÌF?g ¿?›*?ßA~Ö? c?cûC?Æâ9?ÃÒv?£Ù?’hé>pD>© ?&Ê?w0?`h9>À?ýÈT?àcN@(>>¿PD?§?l®G?£C?Q?¤JÙ>D5@Ç ‡?Ym?)·?–ÍÍ>êIò>'=u?ókÕ>¼NË>ˆ??F^Ü>öך?¡E?Æ8?ÍR?iBš?UÍ>é%3?LèO?N)4?úL>Û: @;Ä-?]µD?!Ø>ï«´@À ??Hy?ŒÊ&?údP?ÝëA?ÎU>zÎ^A6ó¹ãÍ>ÎmÍ>×/¼?¶x*@ C0?Ê¿ó>Èv•?w)Í>7ù> ‚?±‰†?q!$?|¹m?éYÌ>ÍcÍ>•Ð>ü¸@twŒ>Qˆ+?6i¢>x>hŽ?Çh?¤:—?¹˜´?ö†¿>ëÍ>‰t†@Œ¥¸=à3G?´Š>Lñ>g{‚?¥§Î>qãÎ>¢ž=ôÖ?ë®(?ß ò?ÇÎ_>Èÿƒ?Ä\9?ŸÁ>âêê=(£@| ®??Öÿ>i©?§Õa?7Ì>uÌ>ÙPÊ>_%£?^ñ ?ÇòÍ?e³õ=л?hã>ÂSQ@Åñ¨>Òï@?Õ©š@ÂRe?xÍ}>¡ŠË>¿3:?*ñi>†r^>‘&> ™?ió?M?l@šÊ?ê0A?Xds?"gÌ?»> Gu?>÷?†:@òÆh>’ÐŒ?5Wã?“ù¬?P_¢?6"e?ŸÚ@Öý?0UÄ?—iý=˜©¹?üé>œb¸?V¾>oÃŽ>ðH?îÌÓ?!™‹?(Þ¤>q8…=L ¾?°á´=§ ?>*¡>Í'®?y¤?n17>êç<@«µ.@Ö•Ý>5†ª>ÔѨ=p[“?ò&o>¶0¤?wž?|{‹?mu?®–w>`q>„W[?×ݸ=Qnv>°A]>ÊjÈ>‰¡µ>$óá?|Ê?xIó>d†s?}p?!o?. ?y?G³?‘¶>Vx”?,Ï/?X±@žkš?ø‡™?‡ð?p?%‡z? e)?üo?­Þx?¤6Ì?†Š?ªRß?E+ü?·lê?viz?ñkë?‹>ºçs?fɳ?‘å¬?\.—=N]§?$é\?£ð§?¿h?Ý)?y¨?n²d?*$ª?§†Ç?w)R?0qI>H,°?£“?^†@!)V>W ¬?^Ú ?˜Y?„[\>Öyq? F?:6?"ýƒ>´Ïr>tƳ>,Gš?˜ ?$¾¿?Ñç)?F­…?Í3`>Äu?µJ…?ì¿?¿ê¯?àÊ? \³?¸ ?à{?>·«?È=Œ–?>pŸ?Ÿøq> ¹Ð>Öz—?u}Ñ?üÕd?;×>’†°?;?0´?ô|?z®Á?ìQÜ?ÄS>ŒŽ?ª*l>Øç¤?vp]>àx>€y\?PÚ­?ûöC?x”>zä@­!‡?LŠ?Oµˆ?,!>rá»?Òéò=2¤?žþ=,ì—?Ÿm`>á¦?DC±?p©‡?8±”?úõ²?4À?‘²?‚­¬>X¯?ˆrF>¶»?Aë=§;x?oAL>¢Äw?öšÙ?Ýg¡?gÄé?¥Þ‚?"¶V>Þ^?X³M?c>.À÷=$eg?%Ža@ Óˆ?­‰M>’º?“h?o–•>Ф®?QWm@œš?Ž¢>Ã?HÈK>Ú6ž?«Ïƒ?Ø[¥?FÔ=e\u>( ‹?ÃÌÂ=o!u>®‹„>ü_>Pn[>H¹V>b²›?™³@¾’->rgb>Õr>ŸÉ>wü>)™C>V9ž?³ž?êç<@l_>„Q£?xYº?\þY=H6N>>–S>‡Tí=Ķ9>Œ´a>.;²>ù >ÙÙS?Z›‰?>Œ·?hXy?¤÷´?ÄW>ù’’?àöR>iÎ÷?4b[>±T’?»‘><ÙÆ=ãK?>ŸF>NáÛ?e£K=–ì±?kF>ÙÃ?kv­?ТG@Ø0¼>|tß>Z ƒ?-u˜>¹›?ô Í?þù ?bˆ>*¢?©3 ?]€>µ „>}¿Ž?ì ‚>Û>Œ=ò>CÉ‘>qÈW?G3‚>Òå>¨Û”>#p@¥š¸>>•ß?µð>^›ó=XU@V²>Y2Ú>fm¡>Ž;œ?•ˆ@¸8?Ÿ1=Ý06@o”?ñ2-?¹s…>½¶Ü?ËŒ=f¢>ÑI?­Ò?}@?v´å>ЉÈ=άZ>¥ Z=6®—?Ì<Ð>q·?Ý@ÒѾ>á+i?]ó¥?.AB>h™Ë?DP…?£f>õrö>Ý;Û?.ñc?'¿Î>(QV?—ãõ>š“f?˜dœ>&žÎ?F?–RM?´‘>>÷O?ºµr?ò¾Ô>t–@™G#? „µ?J4R?šÕC?{Ë>/Oå>šÈ>ªŽ>#ŒÐ>’Ò>°¥> ½?5Ý>° ?ë>ˆ>(„@ú,?eˆ®?–gâ>cóå>öé„?Š ?Ö’?“¬>;s‘>lXG?Çíy?»Ä¸><~²>ß’>4øH?ôØÏ>–o¢?ã&W?jÛé?Ž_?BT?JV ?)c÷=:v@´ï ?Æ_?ˆ)v?6š>0ú*>².?œ° @^? >?æÒ?jeÒ>7.Ñ>û’«>4Ÿ ?|–@?‚i?Ë©{>%:(?tY¯>á¿ê?x£?¢Ì?‚•¬>È©)?yy>^…Õ>¾ ?šó>Ç»>¥>—Ö?úXå?X®Û= ŸÖ?Ü#Ù>qWµ?„.é?‰G_?”; ?#ê`?RA7@A–ž>;Í?z/†>zÂx?H#6@<õ>Šk@”¤>|¥<@¶îî>ï@ܯ‰>ä±>š«$?xDõ>æ®Þ>ùuƒ>Þ‹ ?4>>2>˜>`@þЗ?>W@û^7?ȳ.@‹ýW?á<´>êÎ>)¬>rdŸ=²Úâ>6Çõ>7r9?gÅ@3ýh@·'Ë>üs‡>6ì›>s1>¦ë†?­.Ë>ÒI@Ë>Ð=¼½È>È @Ðæ>Ðwà?ê0»>ðdØ>‘ëŠ> ‰‚>öÌ,>ZMå>°®@‘Íø=7® @ Œ@S‹ò?"h@cðœ>&{ƒ>j;>8ä¯=äÌ?„w]>@¶?æÿý?úƒ¿>Õù‡>ËŒ=ý@ŒE„>ú/?Ž”@é/@èý@À‡@õn™=:X©?oó?èé@WÐW?P„Î>&«š>µÈ>C@>v´@»#Ó>Sà @üˆY={hÿ?¦¹Í><Ÿö?Š™;@£TI?ÊM?¸p„>l›P@iƒ„>o¿@ø¡Í>:nŒ>‡wS> °â?( @¼õC?Nºª?ÿH?…p?%6@¦Ãî?Xôð>G? DË?ÚrÊ?ê|’>DQ@ÿm¾? ž?öüÑ?†É¨? è¸?i@æ?/Ï?®r >æüÍ?CÎ> /ç?{‰Ã>Tä‘>Á›š?¡èÃ?éÃ@€'©>”Ƥ=*cÐ?®¶ƒ=nÕ>ªÙË>"ØÉ?(i°?õ“’>TI–>Ãr½?*°!?·¼ô>ÅÑœ=T;@ü¦/>PaZ@.'‹>]У?Â?Ïœ>â–>àH@ñ³É= œ>æíK>Tü?>f?¸Ôû?vP³?ówž>‡çÄ?†)œ?5„³?>‚¿?‚?,{‘?ÀÅè>‡+ê?žè¥?*ná?,›¸?T?>åÂ?U²û>0®»?$î…?6¨Ä?dÅh?*W®?ZÀ?q°?¢Æ?¬¶?šÈ¢?,…Å?9K°>÷ó?¸âÆ?VƒÆ? ËÆ=:Þ³?–%?ôKÿ?¼Ë?ŽÝ1?5[Ø?œ¨Ä? ®Ý?8 ±?²1¥?Ö¢{>ò{Ú?núª?T’¹?ò³z>Ùž?íØd?g£?øèŠ>6/Œ?΂2?êA¾?/0Ý>;Ñz>§òÖ>L>ç?œ×¡?§øÙ?)ï><¾§?x§À>ñI@¾:³?ˆ ?j½?UÓ?,ÙÇ?>÷¸?­ˆ–?º@Ò²=ƒm²?\‚Û?Å!™>šüÏ>ºÁ±?œëâ?ŠÞ¦?Óe]>ãé@.ì?‹%”??›>{§@xž¾?#u…>¹—e@ûV•>ªòÄ?Æ‹><¢ã>²²?àCÓ?f? “>ô²ì?{1ã?äÝ:@žþ¬?èŠN>(Èã?f´>”OÌ?~O>é™@د>vùË?Þá?°Ì?9æó?9EÒ?«WË?@eµ?¦µ>k„Â?ukz>F«P?ÊEÀ=ud?@p>U‹?3ÿ?ÍSŠ?|]Ö?L¦_@VWy>A°? ùœ?Þüï> >Ê®Ã?޽›?p,ù?t$F>`¾ ?ø+Ÿ?^M>eõé?NÏ?ÃRá?ŸÄ>P3ë?“€>)Üà?J0Ï?À°—?• z>ìZð>Ü:»?ã-ì=kMW>òQ¨>„6>ÁuŠ>(s‡>›t€?R“¿?=%>t.>©3™>ÕÔ>µ],?üƒu>½Ïì?¤1Ú?TI–>ÀD?>$E@v"G?"w˜=š4‚>Æ6…>‘Þ>^ƒ|>¡jŽ>c¸ã>ô•8>ë¬a?®‡1@À¡ @OÛß?Ày(@g ˆ>‹ÿ–?š2…>Z^^>sŠ> x¸?ðßä>vô=£¸? ÿ>$Ùá?½Æš=„1ž?Céz>e/£>t¡›>¯g>™û@í,â?Hµ?‰@—V)?:±?ÂêÃ?»©@R`?Ö?Ì˶?ú?oÞ>MÓï?O@±·¦?Pà?ê¨@Ú•Û?ÐΨ?ˆµ£?Ýø>|ÐÈ?Ë?½£â?JÄ‚>¦.¡>§@ÕÜ?¯.Ú?†í¸>Ew§=^²¼?ï^=,…>¯!Ü>gÿ¾?q¶?2]|>á > +£?bº?®¾>]˜=¤8¿?‰¢>ÛKˆ?D~>]þ¶?Óî @üï>÷@¦>w‘Ë?ÝŒÙ=8‘«>pìV>…?E¥€?’·?4:@ÿ­>•4F@úÇÅ?öí@|¾¬?fl?¿‚Ÿ?^N?JÕ@~ˆÏ?dâµ?Ø©?–f¼?0.í?uFô>­dè?7&Ë?­ÿ?íו?ƒÊÅ?uØ?e,ð?a”È?¥#Ï?tŽÕ?G{­?m3 ?ú¶?²ú?ç¬?XTÆ=ð°Ô?ßgi?ÎÖ@þ„ö?޹r?½çý?ºpÔ?áó@yÉÓ?»ž? ‰Š>‘ßð?÷—?§y¹?1ô‡>^T@R*?E ‘?\Ü?û{ß?£_'?–µ?õBAU[Š>ý£å>1>@.Þè?Ä2É?ÙÏ>¾HÆ?«©œ>hÄ…?9ç¿?ÔK´?Ò*0@Ä-Ö?rh?ÑjÊ?R3:@œ'·??$­=«Ù?îÖä?l€¨>dà ?F­?t_ã?Nú0@ýƒX>Ïß?ìÜ?Œ@øO–>­ª?^)@*[”>À?”¤>"Ëå?Mõš>Ë­>‰6@Tåó?5è?Ì%£>`ÕÚ?Öë@¥¡?ƒDÒ?üi`>ªï?f­!>^ó?C£*>Ó­@`Éœ>1޵?òª@=ãÃ?³äó?5è?SO$@SÆ?y:¾>ÐÆÉ?¥ì‰>{ €?^Û¿=ÝLO?Qjä>‘´¹?2º@ý’? ÖÒ?ûBÎ>0Qƒ>íºÞ?¤@Ty®>Æï*>.)@cgß?7¢õ?3Ï>rà?¸ð‰?¬Vž>p¾¼?6*’>ÏÒã?¦ƒÇ>‹0Þ?À\Ž>òH@° @¨šò?eÕÁ=Šàá?èGì?‘ðû=FW>¶¸>†Oœ>•™>×q–>ƒ?÷‰ã?ÝAK>*v>l¼¨>8¥è>Àn?"ã‡>t=ü?†1Ä?á >ÿqQ>¬?Œ1€?n¸‘=àI>Ô4“>>f>ZâbA&y>* œ?î‡J>Vín?¦?Þ@ú„@ì¶Ô?qg–>B¬?oÅ“>Ž@%>Ï•™>'ÕÊ?’~?¬à>©§„?G~>%Q¢?÷= @’²Š>bÈb?¾G•?Q"»?ª„?ào{?¶0Õ?ÓÍg?4˜-?à$”?É™y?Üi¡>Ïó3œ>Õ?ƒÉ™>`¡™>ƈa?€?¯ƒ‘?šê™>ؽ£>æñš>óó?ÝŸ>b@}?Yñð>ŸôÇ?Ì)9@mDª>YZ›>&…@/eÓ>P‚º>û$>F?»s@Xý·>ѧœ>/ö @ÌŸ½=Ør>?CIB?qÐY?3üY> óŸ>ãø ?0§€>£mA>ë@Ü>?p@IGª?œxÖ?€À¶>vXŸ?¤`ð@êp@¤è–?µ¡@0šœ>5½?½`?Z?«> Ì?²×¿?ë¿ú?em¢@Hæ·>™Š„?"Ÿ>+N?;Q™>>Æ>áïÞ>0ê›>«dJ?¼ç?“ö?ÈV¨>Е‹?“J>×.O?›>À§>B²œ>ðW­?Œ¢Ÿ>,¹r?v¤>@‹Ÿ>n‚:?ýß> ?I´/?$Ýt?õÆ>œlð?~, >ÿÞ?«‚±>5z ?Ôÿ>1êM?y>ú¶>ž9 >·‡?d± ?5?¾È•?!“’?Äá@ç‡Ù@´íÈ>aL>ÃÒS?‡C—?¹> ¥?VK™>vâ>ç>8ãc?ø·â>Bl¯>µ?Gý}?Ë–`?®µ¨>›w/?Y6Á>Ìž>Z>aªÝ>9Ky?ΧL@Þ?ëIÛ>f_š>Ô)å?q¥ ?XTš> µ£>§¡â?“5Þ>øt£>.ž>oïÄ?ÇV >,‰“@e¹?ìq“?ÿ?_?öF¤?¦?“Hð>…üÃ?±8š>átf?F± ?pHÕ>e¼/?R‰?5?~½>Cç’?ÿm¬>aº%@È¥£?ö¡ƒ?»ýÃ>‰å?Ü“?]/?”tÊ>­e?‰ë¢>FAbS?ûÎÅ>`B?‡ê@x?Öš>€cÂ> i±?' ê=7ŽÒ> ­>…Ÿå>u^‘?þ›@Ôn>é+?]u§?®¦0>›],@Ä:8?y%b?V’\?ô7>FJž>GDX?](K?f´Z?ÔÀU?æbœ> V¡>âM^>E’<>’_?žœq? ž ?[®“?"~Î?pñ?έ/@騻>s_?ÎU0>X!ë>÷À?EO’?f‚‚?òNù@‘ò?Ò.+?ÌŸ½=’72?ÕÙ?­›ß?„§>Ìí?²”Á?*­?†˜>ûÓb?Dì@ ôø?Ìf?Ó ¾?`St?Y©*?^³˜>r^?>Ó–?@› >Ÿô@ww³> …W?™8®?‹³I@òÝ,? 0^?ܧ>è@›>wxV?¿W2?hÔ1?\¥ ?àBT?X~O?EU?×zJ?Vec?¹€f?¾_?®D?];?`¢o?€AE?2¸E?¶8!?ŒÈD?Î|L?uf?rT?Og?ΊK?Àó\?* L?Âæ>W“O?²WL?ÒZ?L€»>bù=h?Ä=…Ø?ë%G?¾f?¬’I?@’? ^ >ˆ„D?1ED?z¸1?“lU>°¤V?¼`¡>XÅ"?êþQ>ð­k?+ÁR?­[+?;>2?Z¼Z?8–>Ò½6?+vÓ>¾¾T?H9A?žN?™ûT?kŽ9?ËW?S [? ¢i?¦7j?`ëN?¢¬X?Ó…e?á‚[?Éfj?®¨Q?åOK?ÊŠr?ñC?¬N?"¢_?BÿL??Ù?›±W?N›f?òal?LD%?^}l?µCJ?ŠÉg?ÒT>FÞ?” *?W~b?j8a?ˆD?æç>wn?ªI3?å.]?:ab?,ðe? V?¬]`?‰yZ?b?(&b?è’U?-kP>´èo?>¥V?Ð…5?è@?#êe?ËV?v]?@¾>foN?¤‰[?š$\?žÍ¿>R‘T?ì†]?lå!?Ë»>‡†7?û[?¤/0?ùB1?™Ôa?ðb? óe?õ+?„·C?b?Cg4?µ1c?æ_?™!]?žÅÛ>¼Y?X.å>ÐkR?ÂÍ3?–6X?f S?#[_?“ L?VÉY?‚ G?òÊb?àp?w\?ã\?FNe?^›>u{R?m?9¡e?€CF?õ&\?¾$L?gæ’>{Ú>ÿ`_?‚[j?Tþª^M?¦Ì6?:K?6Íh>~´N?xlP?z±+?°L?q„>ÛèV?@„ Ò«>ÃS?ý“µ>Pþ½>›žB?H+? Œ+?¦e)?JÅ8?NC?HZ>†:‡>zŸ:?Õrè>œy*?¤{?ôËU?+vD? ^ >9Î?jE??6¡H?¸f}>Ã!?(*?ÕÎ>¾ô:>íâ&?HK?.ù>x¡Y?¯tG?“A?2ÌC?Hb8?4› ?°K@?¯%?¹¸#>/?ìUL?³”Yc?2y?¹ H?¬ds>|†>?°Ü???5îó;$~?5îó;$~?5îó;$~?š™ŒBš™ŒBš™ŒBš™ŒBffŒBffŒB€?óðæ³hmmer-3.1b2/tutorial/globins4.sto0000664361611702660230000000153712473612615016413 0ustar wheelerteddy# STOCKHOLM 1.0 HBB_HUMAN ........VHLTPEEKSAVTALWGKV....NVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVL HBA_HUMAN .........VLSPADKTNVKAAWGKVGA..HAGEYGAEALERMFLSFPTTKTYFPHF.DLS.....HGSAQVKGHGKKVA MYG_PHYCA .........VLSEGEWQLVLHVWAKVEA..DVAGHGQDILIRLFKSHPETLEKFDRFKHLKTEAEMKASEDLKKHGVTVL GLB5_PETMA PIVDTGSVAPLSAAEKTKIRSAWAPVYS..TYETSGVDILVKFFTSTPAAQEFFPKFKGLTTADQLKKSADVRWHAERII HBB_HUMAN GAFSDGLAHL...D..NLKGTFATLSELHCDKL..HVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANAL HBA_HUMAN DALTNAVAHV...D..DMPNALSALSDLHAHKL..RVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVL MYG_PHYCA TALGAILKK....K.GHHEAELKPLAQSHATKH..KIPIKYLEFISEAIIHVLHSRHPGDFGADAQGAMNKALELFRKDI GLB5_PETMA NAVNDAVASM..DDTEKMSMKLRDLSGKHAKSF..QVDPQYFKVLAAVIADTVAAG.........DAGFEKLMSMICILL HBB_HUMAN AHKYH...... HBA_HUMAN TSKYR...... MYG_PHYCA AAKYKELGYQG GLB5_PETMA RSAY....... // hmmer-3.1b2/tutorial/minifam.h3i0000664361611702660230000000036712473612615016170 0ustar wheelerteddyÓÓɳ #NfÏminifamPkinase´-fn3q•globins4PF00041.13fn3PF00069.17Pkinasehmmer-3.1b2/tutorial/fn3.out0000664361611702660230000001653612473612615015367 0ustar wheelerteddy# hmmsearch :: search profile(s) against a sequence database # HMMER 3.1 (February 2013); http://hmmer.org/ # Copyright (C) 2011 Howard Hughes Medical Institute. # Freely distributed under the GNU General Public License (GPLv3). # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # query HMM file: fn3.hmm # target sequence database: 7LESS_DROME # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Query: fn3 [M=86] Accession: PF00041.13 Description: Fibronectin type III domain Scores for complete sequences (score includes all domains): --- full sequence --- --- best 1 domain --- -#dom- E-value score bias E-value score bias exp N Sequence Description ------- ------ ----- ------- ------ ----- ---- -- -------- ----------- 1.9e-57 178.0 0.4 1.2e-16 47.2 0.9 9.4 9 7LESS_DROME RecName: Full=Protein sevenless; EC=2.7 Domain annotation for each sequence (and alignments): >> 7LESS_DROME RecName: Full=Protein sevenless; EC=2.7.10.1; # score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc --- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? -1.3 0.0 0.17 0.17 61 74 .. 396 409 .. 395 411 .. 0.85 2 ! 40.7 0.0 1.3e-14 1.3e-14 2 84 .. 439 520 .. 437 521 .. 0.95 3 ! 14.4 0.0 2e-06 2e-06 13 85 .. 836 913 .. 826 914 .. 0.73 4 ! 5.1 0.0 0.0016 0.0016 10 36 .. 1209 1235 .. 1203 1259 .. 0.82 5 ! 24.3 0.0 1.7e-09 1.7e-09 14 80 .. 1313 1380 .. 1304 1386 .. 0.82 6 ? 0.0 0.0 0.063 0.063 58 72 .. 1754 1768 .. 1739 1769 .. 0.89 7 ! 47.2 0.9 1.2e-16 1.2e-16 1 85 [. 1799 1890 .. 1799 1891 .. 0.91 8 ! 17.8 0.0 1.8e-07 1.8e-07 6 74 .. 1904 1966 .. 1901 1976 .. 0.90 9 ! 12.8 0.0 6.6e-06 6.6e-06 1 86 [] 1993 2107 .. 1993 2107 .. 0.89 Alignments for each domain: == domain 1 score: -1.3 bits; conditional E-value: 0.17 EES--TT-EEEEEE CS fn3 61 ltgLepgteYefrV 74 l+ L p+t+Y+fr 7LESS_DROME 396 LEALIPYTQYRFRF 409 67899*******95 PP == domain 2 score: 40.7 bits; conditional E-value: 1.3e-14 ---CEEEEEEECTTEEEEEEE--S--SS--SEEEEEEEETTTCCGCEEEEEETTTSEEEEES--TT-EEEEEEEEEETTEE-E CS fn3 2 saPenlsvsevtstsltlsWsppkdgggpitgYeveyqekgegeewqevtvprtttsvtltgLepgteYefrVqavngagegp 84 saP ++ + ++ l ++W p + +gpi+gY++++++++++ + e+ vp+ s+ +++L++gt+Y++ + +n++gegp 7LESS_DROME 439 SAPVIEHLMGLDDSHLAVHWHPGRFTNGPIEGYRLRLSSSEGNA-TSEQLVPAGRGSYIFSQLQAGTNYTLALSMINKQGEGP 520 78999999999*****************************9998.**********************************9997 PP == domain 3 score: 14.4 bits; conditional E-value: 2e-06 CTTEEEEEEE--S.--SS--S.....EEEEEEEETTTCCGCEEEEEETTTSEEEEES--TT-EEEEEEEEEETTE.E-EB CS fn3 13 tstsltlsWsppk.dgggpit.....gYeveyqekgegeewqevtvprtttsvtltgLepgteYefrVqavngag.egpe 85 ++ + +sW++p+ ++ + + +Ye+e+ ++ ++++ +++ ++ + l+ L+p+ Y++rV+a+n +g g++ 7LESS_DROME 836 GAQAAKISWKEPErNPYQSADaarswSYELEVLDVASQSAFSIRNIRGPI--FGLQRLQPDNLYQLRVRAINVDGePGEW 913 56677889999987443333223333899999999999955555566666..**********************965655 PP == domain 4 score: 5.1 bits; conditional E-value: 0.0016 EEECTTEEEEEEE--S--SS--SEEEE CS fn3 10 sevtstsltlsWsppkdgggpitgYev 36 ++ + ++++W+p+++gg + ++Y++ 7LESS_DROME 1209 DDGHWDDFHVRWQPSTSGGNHSVSYRL 1235 555678999*******99999999997 PP == domain 5 score: 24.3 bits; conditional E-value: 1.7e-09 TTEEEEEEE--S...--SS--SEEEEEEEETTTCCGCEEEEEETTTSEEEEES--TT-EEEEEEEEEETT CS fn3 14 stsltlsWsppk...dgggpitgYeveyqekgegeewqevtvprtttsvtltgLepgteYefrVqavnga 80 + s++l+W++p+ + + + Y + ++ ++ + e ++ ++ ++ +++L+p+++Y+f+V+a+ +a 7LESS_DROME 1313 NVSAVLRWDAPEqgqEAPMQALEYHISCWVG-SEL-HEELRLNQSALEARVEHLQPDQTYHFQVEARVAA 1380 5689********76556667899******55.665.688888888888*****************98665 PP == domain 6 score: 0.0 bits; conditional E-value: 0.063 EEEEES--TT-EEEE CS fn3 58 svtltgLepgteYef 72 s++lt+L p t+Y++ 7LESS_DROME 1754 SLNLTDLLPFTRYRV 1768 799**********98 PP == domain 7 score: 47.2 bits; conditional E-value: 1.2e-16 ----CEEEEEEECTTEEEEEEE--S--SS--SEEEEEEEETTTCC.......GCEEEEEETTTSEEEEES--TT-EEEEEEEEEETTEE-EB CS fn3 1 psaPenlsvsevtstsltlsWsppkdgggpitgYeveyqekgege.......ewqevtvprtttsvtltgLepgteYefrVqavngagegpe 85 ps+P+n+sv+ ++++l++sW pp++ +++ ++Y++++q++ +ge ++ + ++ +t+ ++ ltg++pg+ Y+++Vqa+ + +++ + 7LESS_DROME 1799 PSPPRNFSVRVLSPRELEVSWLPPEQLRSESVYYTLHWQQELDGEnvqdrreWEAHERRLETAGTHRLTGIKPGSGYSLWVQAHATPTKSNS 1890 9*************************************99989998****97777777777777*******************988776665 PP == domain 8 score: 17.8 bits; conditional E-value: 1.8e-07 EEEEEEECTTEEEEEEE--S--SS--SEEEEEEEETTTCCGCEEEEEETTTSEEEEES--TT-EEEEEE CS fn3 6 nlsvsevtstsltlsWsppkdgggpitgYeveyqekgegeewqevtvprtttsvtltgLepgteYefrV 74 +l++ e ++ sl+l+W +p+ + ++e++++ e+ +++v +++t ++++ L+p t+Y+ r+ 7LESS_DROME 1904 ELQLLELGPYSLSLTWAGT---PDPLGSLQLECRSSAEQ---LRRNVAGNHTKMVVEPLQPRTRYQCRL 1966 5788899************...8***********88555...79**********************986 PP == domain 9 score: 12.8 bits; conditional E-value: 6.6e-06 ----CEEEEEEECTTEEEEEEE--S--SS--SEEEEEEEETTTCC...........................GCEEEEEETTTS.EEEEES--TT- CS fn3 1 psaPenlsvsevtstsltlsWsppkdgggpitgYeveyqekgege...........................ewqevtvprttt.svtltgLepgt 68 ps+P+ ++++ + + ++++W++ + +g+pi Y++e + ++ e+q+ + +tt+ s+ ++ L ++ 7LESS_DROME 1993 PSQPGKPQLEHIAEEVFRVTWTAARGNGAPIALYNLEALQARSDIrrrrrrrrrnsggsleqlpwaeepvvvEDQWLDFCNTTElSCIVKSLHSSR 2088 89***********************9************7775554799999999999999999999999999999999999999999999999999 PP EEEEEEEEEETTE.E-EBE CS fn3 69 eYefrVqavngag.egpes 86 frV+a++ + +gp+s 7LESS_DROME 2089 LLLFRVRARSLEHgWGPYS 2107 9999999999554488876 PP Internal pipeline statistics summary: ------------------------------------- Query model(s): 1 (86 nodes) Target sequences: 1 (2554 residues searched) Passed MSV filter: 1 (1); expected 0.0 (0.02) Passed bias filter: 1 (1); expected 0.0 (0.02) Passed Vit filter: 1 (1); expected 0.0 (0.001) Passed Fwd filter: 1 (1); expected 0.0 (1e-05) Initial search space (Z): 1 [actual number of targets] Domain search space (domZ): 1 [number of targets reported over threshold] # CPU time: 0.01u 0.00s 00:00:00.01 Elapsed: 00:00:00.01 # Mc/sec: 21.96 // [ok] hmmer-3.1b2/tutorial/MADE1.out0000664361611702660230000001546012473612615015463 0ustar wheelerteddy# nhmmer :: search a DNA model or alignment against a DNA database # HMMER 3.1 (February 2013); http://hmmer.org/ # Copyright (C) 2011 Howard Hughes Medical Institute. # Freely distributed under the GNU General Public License (GPLv3). # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # query HMM file: MADE1.hmm # target sequence database: dna_target.fa # hits tabular output: MADE1.tblout # number of worker threads: 2 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Query: MADE1 [M=80] Accession: DF0000629.2 Description: MADE1 (MAriner Derived Element 1), a TcMar-Mariner DNA transposon Scores for complete hits: E-value score bias Sequence start end Description ------- ------ ----- -------- ----- ----- ----------- 8.4e-11 39.0 7.4 humanchr1/239220001-239550000 302390 302466 7.8e-08 29.5 6.0 humanchr1/239220001-239550000 302466 302390 8.4e-08 29.4 8.3 humanchr1/239220001-239550000 174456 174498 5.6e-06 23.6 7.0 humanchr1/239220001-239550000 174493 174456 ------ inclusion threshold ------ 1.7 6.0 6.7 humanchr1/239220001-239550000 304074 304104 Annotation for each hit (and alignments): >> humanchr1/239220001-239550000 score bias Evalue hmmfrom hmm to alifrom ali to envfrom env to sq len acc ------ ----- --------- ------- ------- --------- --------- --------- --------- --------- ---- ! 39.0 7.4 8.4e-11 4 80 .] 302390 302466 .. 302387 302466 .. 330000 0.87 Alignment: score: 39.0 bits xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....xxxxxxxxxxxxxxxxxxxxxxxx RF MADE1 4 ggttggtgcaaaagtaattgcggtttttgccattacttttaatggc....aaaaaccgcaattacttttgcacc 73 ggt ggtgcaaaa aattg ggtttttgccatt cttttaat gc a aaa g a t ctttt cacc humanchr1/239220001-239550000 302390 GGTCGGTGCAAAATCAATTGTGGTTTTTGCCATTGCTTTTAATTGCttttA-AAA--GTA-ATGCTTTTACACC 302459 899******************************************955533.443..334.4689********* PP xxxxxxx RF MADE1 74 aacctaa 80 aa ctaa humanchr1/239220001-239550000 302460 AATCTAA 302466 **99986 PP >> humanchr1/239220001-239550000 score bias Evalue hmmfrom hmm to alifrom ali to envfrom env to sq len acc ------ ----- --------- ------- ------- --------- --------- --------- --------- --------- ---- ! 29.5 6.0 7.8e-08 1 77 [. 302466 302390 .. 302466 302387 .. 330000 0.74 Alignment: score: 29.5 bits xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx................xxxxxxxxxxxxxxx RF MADE1 1 ttaggttggtgcaaaagtaattgcggtttttgccattactttt................aatggcaaaaaccgc 58 ttag ttggtg aaaag cattactttt aatggcaaaaacc c humanchr1/239220001-239550000 302466 TTAGATTGGTGTAAAAG----------------CATTACTTTTaaaagcaattaaaagcAATGGCAAAAACCAC 302409 68899999999999998................5667777776222222222222222268************* PP xxxxxxxxxxxxxxxxxxx RF MADE1 59 aattacttttgcaccaacc 77 aatt ttttgcacc acc humanchr1/239220001-239550000 302408 AATTGATTTTGCACCGACC 302390 ***************9998 PP >> humanchr1/239220001-239550000 score bias Evalue hmmfrom hmm to alifrom ali to envfrom env to sq len acc ------ ----- --------- ------- ------- --------- --------- --------- --------- --------- ---- ! 29.4 8.3 8.4e-08 1 43 [. 174456 174498 .. 174456 174518 .. 330000 0.93 Alignment: score: 29.4 bits xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx RF MADE1 1 ttaggttggtgcaaaagtaattgcggtttttgccattactttt 43 ttaggtt gtgcaaaagtaattg ggtttttg cattactttt humanchr1/239220001-239550000 174456 TTAGGTTAGTGCAAAAGTAATTGTGGTTTTTGTCATTACTTTT 174498 589************************************9975 PP >> humanchr1/239220001-239550000 score bias Evalue hmmfrom hmm to alifrom ali to envfrom env to sq len acc ------ ----- --------- ------- ------- --------- --------- --------- --------- --------- ---- ! 23.6 7.0 5.6e-06 43 80 .] 174493 174456 .. 174513 174456 .. 330000 0.93 Alignment: score: 23.6 bits xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx RF MADE1 43 taatggcaaaaaccgcaattacttttgcaccaacctaa 80 taatg caaaaacc caattacttttgcac aacctaa humanchr1/239220001-239550000 174493 TAATGACAAAAACCACAATTACTTTTGCACTAACCTAA 174456 689********************************985 PP >> humanchr1/239220001-239550000 score bias Evalue hmmfrom hmm to alifrom ali to envfrom env to sq len acc ------ ----- --------- ------- ------- --------- --------- --------- --------- --------- ---- ? 6.0 6.7 1.7 42 72 .. 304074 304104 .. 304053 304109 .. 330000 0.87 Alignment: score: 6.0 bits xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx RF MADE1 42 ttaatggcaaaaaccgcaattacttttgcac 72 t a tgg aaaaa ca tta ttttgca humanchr1/239220001-239550000 304074 TAAGTGGGAAAAAATACACTTATTTTTGCAT 304104 55779************************85 PP Internal pipeline statistics summary: ------------------------------------- Query model(s): 1 (80 nodes) Target sequences: 1 (660000 residues searched) Residues passing SSV filter: 61658 (0.0934); expected (0.02) Residues passing bias filter: 45802 (0.0694); expected (0.02) Residues passing Vit filter: 2443 (0.0037); expected (0.001) Residues passing Fwd filter: 2217 (0.00336); expected (1e-05) Total number of hits: 5 (0.000403) # CPU time: 0.05u 0.01s 00:00:00.06 Elapsed: 00:00:00.33 # Mc/sec: 160.00 // [ok] hmmer-3.1b2/tutorial/minifam.h3m0000664361611702660230000027523712473612615016206 0ustar wheelerteddyºííè€Á•2ÿ:>%R{<†m¾"@>ò,Ÿ;§¸‡<9ý“=:;GÏ;Ö™¼<zõ#2 >v€!=¶V;)ã6<Ü> ù;‘+€=Yt>®X<å¤=q0º<ÅÉÃ<5E•=‘=D~<½R=5{ç=ŸSW=÷ð<=IO‰=R=Ì-=þ>z;¦,q<%?><~<·ë|=ÜÔ >ß”S<Â-Ô=aN®<Á>¾ý$°>ò“ì;vö=Êd«<~´=<Ñ‘c=t\<§›<ŸŸ~=Ã,Ÿ<9 E=Õú<МY=”ú=9:’—Ø4="Çw!=V#Œ;°Š<ïIÚ=¤h <{;>=⃟=»¹’<àåþ<Œ÷Ê<œQ=Rs>K¼À=Ñ/©<ަ=s˨<ÃPh=‚œn=[†=1³`=Æ$8=pÙ£;ÁÌ–GRø<]‚< Ýó;E<ùE%^k[;PQ8<‡Ü‚=Μ<ýu=»…Ž=<,ŽŸ¡È=þp§<‡ï2=ëŸ<Û!j=/íü=§u=Å'»=ª2=º¦;[_“<˜–/>»L%<88=áŒ=n‹<Œ|=± ©=Añ3f= 8-=Ÿ]•;¡Š<¡…2>KƒW<¢‡<ŸJ䋵=©K¯<¸`f<øÀ¼<ηÁÅ}µ;½˜—<Ù?©ìfFD<ØG«<Àñ=Þà<¿=B<2=»p¶<©@Ç<Â<ý¹¥=6ÿo=B=FVA;¡< d=·$Ó;Q|7=Ä=`4<“Ÿó<šìº<¢<íL“>ö­=Eö\<¶ 1=;Å¿=äJZ=†˜=Ù_=Î0=ºïç®m;«1P<¿‹=<á»}=jH>%Ÿ<Š3š=®¸Ë<³þ<”›Ÿ=>V:=ùôž<#V=#­<5¸|<Á~ø<a$=5a<½MS={ëe<d×<øw=cŽ =m<©=×߯d\…=R4=·áe;´³AO†þ;‡l­=äY÷=¤¬;¨>J™(>Àô&<îÒ¡=%4Ä<ÁŒ'ƒI<&áÆ=6ߺ<­Ë²<ÔД=\$=+Èn<˜Y=¯ª¬< 3Y=¾:=b;ˆ=nÊå=ëÔ=Nm;–>h<Ô’=×6<<¢›=ûMx=xÉ=M¬ê<µŽ=âþI=cÿ‚=¸­Š=˧ã<= !=ôÛ<›3;=±ë3=JºÛ= f= ‹Ì=©÷;±ñ€=wU<=%ä< д<¿<àðú;§’-?²›<ÚX,<‹‰™<åß}<ö~½;„5™<¶6r<+:c?x>ß;q=a¼©<²É0àQ<ßKsf“Ó<§'¾=ddí<vš<¾®V¦<0Õ#=Õ…2=T: >ùœ™;‹i<zõRzÔ;Ѹ<Š®"=èx¢;.GÊ<ÙR=/_<2¾µ<Ÿ Ì<Õ+ƒ< ïg>ƒŒí<|ÔD<6b=<;<Þr=Pª¢>Ò_$= – =0f³Ú4&„ã=õî <¾´ |5<÷Mu<£Ê›="ªo„1#=ŽÞD<£ö ç=|{Ø=gÓæ<Âm=¼ú˜<î¾6=­U==i‹n=‹Ò=L©ã=4cÌ;¬é±<[pµ=|ò_<Þ´Ô<ɤ=¶³’Úºi=•->ÈÔˆ;@p<}0€= B<èßÔ<´UÉ=iH'=[uõ;ZA°<+ÚÄ<|à<¿ç<Ϩ <ÿíZ<>´<ý¥<ë©â;=ý•<ØÇ'? rw<’¢“<˜Û =ËÑ–ñi<¤ÌzjO=[e;À®><õr=Jé;” )=35’=‰Ÿz<Ý·å<`‚Ì<Òöå<ÿë>¹õÉ=Xæ”<õä5=ìV›<µë >J2Ÿ=Ý¢j=®D=ì=—ö˜;c4‰<{‡ƒ=k¶Ñ;Œf=iD>èK<=(oÐ>6z±<ÿQÆ<¬~D=›Üã=mC’=ÒÖ<¿ìÊ_'>Ø<Ñ+=”€º<É"q<²å‡=qÅ<¬¢.1WZ=Â&=^t=üN+=y`·œ• =Œ}<ˆeD=n0¢<ÉN‚=—¤ >ÓÂÑ=–¸H=ùëõ<¶‡;ÓÝw<@ÔÑ<Ëäà;Ÿ’< C<„Ö?ŸOf<6$<®F-=×W<ñ˜­=yž­<hO<Š“÷~= ¡`«Ó=R*<6Ï=œ®´=ê·ˆ<ÉP=ÁÉÜ1)=Øý|=}6=”QÍ<ÏeN;;!Z<zõAA=øë‹<0?=ø³¬<”¼Y=§*d=H >È@æ=ÁŒ=Ý¥Š;m—<ὤ=$qP<,ßß<·’ =¬}‚RS=©í{;qçQÞf„§f<ˆ2= Fׄ;ª<(¯>áâ;í4s>æÒÄ=¼@4<„"=_¼¬<˜§<¹ur=·ë¤fN<¨ =iCÐ<„I¶<¾æ±=,2=T{ºîþ=>©R<Ÿy#<º—‚<¨U„<áÍL¼¾;[Œa7= u=¦Å7=Ÿ<î:o= ™=Ž‚t=âN=‰!=qª¢;m~”< ^ >eÝ<~ÙH=~•=ø‚\<û™ >Ê¿±<ÜÀÇy·=妩°T= Þ=Ã=X;©jM<Äô0>fg<ÍJx=™> Y_<û«=ø‚º@lÔ=!ÿ<e =^jÆ<Å€<ÿæ>nÛÖ<9xA<7‡q=çî¨<­YÑ=´¼H=2+}=ák7=ªÃ<J;íÍR<•d,=Ùb2<1 <ô`<>’ü&*ƒ<…X>U^=]=5<£É <„TJ<^-[<ŽIµ<†ê=Êz²>Ë;«8n<t'=nv¢;ȸÖ?(íGß)=æ=Žb´<„ƒ~;ÁKG<â‹ß=p #^×b<–Gð<«Œ= v0<Ý£>¡©@<çx£<=þA=_ì´< EÃ<àÙ¾<.q£=**k=»Þ=ã:;#t<®š„=ÙPè; lR=³>ksm<ÑÀü O&=+J<÷ÖJ=ð|¦<¥r=l5ƒ=?‚=”¾R=Ç´=Ñc;+†<®‚c=cúÊ;æ= ÕŒ=‘9<€WßÚQ=¦“w<N2=Å)˜<)=z=Ö>+b=IvÕ=ͪó<Ÿ¼ˆ;ümGRø<]‚< Ýó;E<ùE%^k[;PQ8<ÉÉ=½G<:<=< <œ• =¸õ| ¶<”…>N#=Œ"{<è4<ä{|á·;û“<*ä†=(6Ë;9¶í=Y È=„77<Ʊ¨=%"Ã<ÙCœ<îêa<µAÒ=èDÖF=3¶<=h8>í#Ø;µ·<@©=ÝÞ$<˜F=`i=ÜeR<ß=«J¤Š²Ú=»p=Ð$o;82^<1È>Ì-¯;XY> cÒ=‰x<ÿ^=‡ž¶<ÿׄ; IÉÖb<ºk×<<ñ*= Á<[èµ=ÅÔ†<^½ý=sò1=Ñ€=­íÊ<§§=lnŸß¿$=T$2<Ë <_OF™;ºv<®€>iS<;‹.=Ý=ƒg<µ… =/é§<ÿ.å<5¨>aç=C݃â`=OÖ‚<ÁëI=Ýï¤<’s=<Á=Ädï=xYK=D[=ºG‹;Û׃<(‘9= :<R'<¶³’ù‰>Ò a<Á]*<±Š<ìëŒ<°aØ'žÂ;Ðv”bÓ=R <„=«´<[¡h< •>m¾<$<;,o=E¡<•R=el'=`we=/· =©K¯<Ø54;žã=<¼ƒ=9Æå;Áð±=5íL>idA⺒õÏQ>Oê<Œƒ<€5 =£œ=µB=D¶J=)¨š=Êw>ŒE<Í: =5=ÔøJ =ã§z¯®4<`f%=™f‡='u­<ð„š=‰³Oi=÷ >²¸[<¸²=:ËÓÃ<¾ >¯=­ˆ<Ð;Z=’o¯Ë+N=­!<}<ÿfOY<¤ñý<ÃBÓ<#sÃ<ÈI>9=h‰<ÎqG=my¨Ghjµ™w=%u=ÛI;‚)<,Zo=ê9˜;½)>àv >£<8ÉÆ=kbÅ<Ôœ{<ˆy=¬›«Âü >3„¹<,=ÃVŸ<)P=¼Ôn=…âæ=èX=¶5R=8³;ûŸ<´z =üÛÂ;›Cþ<êI=žÍí•ÍÂ=è<¢Ò¹ú– =gü€<øÀd=§V²=Wo=Må:<ër=Íc¼<Âæ¦<¹‹>hf=Tºb<Ÿ­6=– ˆ<='ó<±xz;g¤a@hš<@z»=ŸÃn=ï=ˆzQ>2Ç=ªð»<:ÏY<¢(ч×=-ƒd<¨¿8=üå˜<^Mú=ü;>“Žb=­7=UtÕ<Éö;Nd<ü†'=Fö8<êxÝ;®Å3<•¬É<ƒ^%<õp°;äð}>áÇG<™êã=ÍMø<@¦[;ùg8<Û U=u¤;ÿC¢>èÓÄ=ë <ª'=° ½'=•§¢=¦™Ô<@Þ<Í[>/é<Ø'ú<§ïM=-•>=bЦ==˪;‘¸•< ˆ=á¬Õ;KZ=¦àÿ=«pVçø=5ö‡<V=¹¬<§2à=‡=,@‰=h6Y=R™ˆ=œ<‰;ùeƒ<¬óN=¤Ðþ;÷9$=<_=þàb=à±Ñ<ðãÅ<uñ<7OW=šÏ<=¿Œ<~®>ûó<òû=«=’é@=ñ=Ðë=¨ì9<\]>ï8=ŠY <üŸ<<[J¾Ù2<-nh<§=¡=¡"m<„>H¤*=àø?<4ƒ <¶c^< ª[<§M¦<wË<çW‘=U?<±Óc=,ÇY=Ϭ;ä2=(ò > wLø<j[²ä`=8@3=ê0Î<ªy;’]<°‰)=$H1y&E=´£@<¶<®jjûÞ;Åο<ʾ=l‹<ð>Ò;Õ²2<Þ#=6m<%òÏ;ÃVM>»æS<1Ï>¶ H=“3 i¢gwÇ|=æô=DNI;N)<É+î=Z¿È;´Í‰=HS>¤¬JUŠ=¿_<8¶<ÆØ<÷Ðê{±;@Þ‘<ئ=Su<rÓ;†2<9Y=’³<ÕË;vÙ“>Y³Q<>š>?Ð6=¬<üuõ;¸D2<ñ`9<,y‹<ŠÑà<¸^ >K–;WËg<_î=þOW<”M6ð®¯<òÕ">Ö¨= z{°±;È‘<üó–=sš6=BF±=_‡•=íYº<•Šþ<âãˆ=bà+=ðD–=n9m=XÙÈ<9=°©<´V=–oD=öÇ=ÀÆl=MÖ°= b¾; 0®<¼^=‹¶Z<<ð<@}Û¿Q>ûW“;By<üÓ=[!"<ó<#¦[<Š=ªZ;<>—ð;Òü=u™ø3=¢‰.Ç* ;V|<:ñƒ>®ê$<Ë-=R[x=0Z < =óø½=ܹ÷>á(<ÿ»5=ŽhŠ=¦»‹<ª†=ü=}òBÎf=Šo.=·,•;ð‰<Η~=Äã;›À>=¯aœ=f<‡v³=™gä=*ÉÁ<…}Í=ùS=…<.3@=.Õ¡gÇy=× I=¤=K;b—†<ç]=V®7<å®<¤ö=ß… >î®<ê¾Ì=ÊXf=4%=q">Ŧú8lz‰¥="Zÿ<L•=W8[=bj =¤ùi;lX><¸Ð>î<ÓW= ¡=&r<”°Ý=ç`¼@Â!=J·Œ°?ƒ>ïØ<\è!=±#¼EÅ­‰=çPj<®õ>|TÏ4=%Ðt;~ÈN<€N>Üue<½=Ô¢C=CÙt{¿=:=ô§=9‰{=Õ½;=‘É{;ÖÅVQÄ=«Q<§¶!=hëÀ<Ÿ¹<ï¼’=ᦠ=çês3mÀ•;Ú}}<²Sx=M|©;  >–qÐ=È×1<Ýg =‘‡=ÎØŽ<²¢¦=:4ë©…L=RRƒ=.ÙA=í"Ö<©—_;»Ji<Ù=º>hþg<+þá<ý =¥†:<%³>|`C<^Ù®< =Íã<ô…D<»=í'¶< œÅ<:Â<‚¥=í-p=ø=²:C;nA<=ï‹> `k<È™é<¶=»b?<š>u¯W<^ЩÆ]}=¥A=3J;`¾(<¶ˆU=X»S<Þ6<öŸ?|Œ< ‡<¢1£=}Ú¸ Þ=(Ô2>K`ª<åÛ=ö`+=àY}=‰Ù2=)O´<Ën8;t…H<ï(=›a°;߉ÿ<³B=õ>Ã'=ÌÏ¡‘tò;.oÉ<²e=»ë%•ßü=‘^0<ݲ<û?a<Çb<±Ù¯<¼wü<ûô*>oû³;/„< ,*>d!<^)s=>>òº[<_(=FMµ¦X=J¢=¥éz;ýÆo<åfš=aÆ_4î¥=7î =kôšƒ£|<@ñ>:œ"={n?<ëÇ<'æã»;¡EŸ< „>1–=ÖÏ= D]=‡®À*=×jÑ=î•é=_t=Ê `=À°;jž˜<â£=»P<…E5=óQš=õH <ºuû<8cÈ´GU=éþµ<Ù¨=ȩÒ;Õ²2<Þ#=6m<%òÏ;ÃVM>»æS<1Ï>¶ H=“3 KÐ+<Æt=|=¡[ˆ<©=P<¬N$<0:=Ms=ãî‡<÷£= ‘=¬-ê<]<‹=ÞC)=Ô’Ûèe=Š)=—„’;îZˆ<©B>÷;}™/= hˆ=ÕlH<é=ñÙ¶<ÎUÄ<ÃFŠ>‡Ó=¶6r<…/=ꉜ<2¼S=âî=Œp=eô>=Qù =!§€;ÜÈc<:É<10Í;ã_<…}‰<9¿=:qxEi=Ƀw<‚18=qC›<)`†=o£!>ÚM^=YÚ7=2(ë< Û;‘x<„…‹=´®D<d=%`…=Ð@=9Û¸=Á€Å<³!=#ÀŒ=?Š=aj<„‹`=¸œ„=† *=<Æa=éŽ=d='O=.'<ÄrÜ<^‹=̹D<½U=¨g…=H=øÖ¸=Þ‹Åb¾‰>¶ë0>ðÄS?€?û x?ÍR«<ñd&<ŠÅ ?~uì>”y5?† •>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>‰ [?% }<>ŠÅ ?~uì>­?Å>©Py?_ò ?Ëïí>©Py?_žL*? g«>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>ð]?% }<\Üð=ŠÅ ?~uì>­?Å>]fy?ß+Ž<¾ <ŠÅ ?~uì>—?)?P€­>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>ð]?% }<\Üð=ŠÅ ?~uì>­?Å>]fy?ß+Ž<¾ <ŠÅ ?~uì>zµ ?õ”ê>]fy?ß+Ž<¾ <ŠÅ ?~uì>zµ ?õ”ê>]fy?ß+Ž<¾ <ŠÅ ?~uì>zµ ?õ”ê>]fy?ß+Ž<¾ <ŠÅ ?~uì>zµ ?õ”ê>]fy?ß+Ž<¾ <ŠÅ ?~uì>—?)?P€­>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>ó\S?% }<†¼">ŠÅ ?~uì>­?Å>æJ?ÄYK>ÌÍ<ߎC?mÅq>g÷,?K¦>ì«?8,>èÀt>ߎC?mÅq>­?Å>h[x?=¢¤<@å<ŠÅ ?~uì>cU3?öT™>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>×ðR?% }<¯l$>ŠÅ ?~uì>­?Å>Þy?ob•<Ë<ŠÅ ?~uì>Š?ˆëö>Þy?ob•<Ë<ŠÅ ?~uì>Š?ˆëö>Þy?ob•<Ë<ŠÅ ?~uì>Š?ˆëö>Þy?ob•<Ë<ŠÅ ?~uì>Š?ˆëö>Þy?ob•<Ë<ŠÅ ?~uì>Š?ˆëö>Þy?ob•<Ë<ŠÅ ?~uì>Š?ˆëö>Þy?ob•<Ë<ŠÅ ?~uì>Š?ˆëö>Þy?ob•<Ë<ŠÅ ?~uì>Š?ˆëö>Þy?ob•<Ë<ŠÅ ?~uì>º-?É¥>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>m z?% }<ÑÀõ;ŠÅ ?~uì>­?Å>×ðR?% }<¯l$>ŠÅ ?~uì>­?Å>7M?_ŽK>u©c>‰G?€? globins4 vvLseaektkvkavWakveadveesGadiLvrlfkstPatqefFekFkdLstedelkksadvkkHgkkvldAlsdalakldekleaklkdLselHakklkvdpkyfkllsevlvdvlaarlpkeftadvqaaleKllalvakllaskYkw?ÿÿÿÿThu Jun 16 11:45:13 2011  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ^`abcdefghijklmnopqtuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥…^Þx"lÁa¦5?óŽ+Áa¦5?=…Àa¦5?€OÃÇ€OÃÇ€OÃÇ€OÃÇ€OÃÇ€OÃÇdNÀ=a1<3ÀR=Æüˆ=š%=£iG=O>=bHa=™aŸ=èÂ=ŠÐ<²F'==B='ž-=—_<=/9Ž=¿Îk=¸Ìœ=;t,À»¢<ÂÅo<·"!=f2$=sje=ôµE;)Ÿ<R‰=Î&;0iØ=籓=Ä<¡;]’—=þB< 3<¼ª+=É0V=?oÙ;[@=û=2¾=Îß=4Tn>e1=€|å<Ëá×:ø@h<­¨€>ëA%;ôqõ<£ =nŸ;(ú<ΙBä‹=tÿS=¦Ð‘=ˆ>=Ó¦=ZlÖ:$Ut<ßÑ=…ùÆ;rw;< $<ñ<<”ìQ=€;m<• <ÅÐ?Š%<ªA½<Ç"Ž<ÎW= q>ÍæO;Æ*<°U=À"<àæäÙ;Ï;n>c\ñ<¾æy=C_=Ú;2=s1=›÷O<üÓ×:? ¢=N”ñ;SK…=VÈ<Íyiq; ÉC<òÇ-=Êhò;£i=¶Þ…= Ã/<‡²Ý<0–=¨zË< ø=»ú“<ÏÝ;"0=Ûë!<}™¸=›ÛÃ=Ë–>b,>„¯A=t±Û:Šá;®§/>ÿ¯˜<ïœ~;2ë;=ãò=6µ=“1É;ºlï=€Kl<œ Ú=Ø=/ýî;†©J<9>É<Œ—<ü`õ<ÂHØ«î3<\ÌFíÈ>E)€=ù/î;ŽàZ<é|·=K%;ÓÙ=r>—š=²“˜=õ·‡<0ÅY I=EŸ¥=Å‹ü¥±;z` ûrB<ª<›˜I=ëžÀ<¯ÝC<’Ú=¦5<¼Ÿƒ=ç£k=› >@‚@> NO<8éÊ;û>ã<îwð=>î$;¿¢=íà=º›ž;DK=ZØÛ<©ƒ<η]= Ä›<¯H×;cÏz=wÙ°=’N=8=õ×.>¥=P„< ë/<ðØQ<ÄÁ=c“(;üsÇ=÷§N=ƒÅ¢;е/=•Úß<û|Î<YT=ìÉe<êÍÛ;U>™ <™òj>>™ª<^QÚ:Úß<œ­r=/N%;¥¡S=`#¢=€ J<Ž™0=sfˆ<ö <$¢™=Ï a>Üî=Í(ë<º<›ù=¡§Í=l²ä;=z;еç;T[°=lW=#æZ<æ[>;<—…>_ºe=#í;¥¢Â;œOý;Ó†<\I‹u;íYº<L=sF=Áï‹=tþâ<,=ѵ€<3ô’=ú†=ç(Í=©q>™Û="9î;ÜV®<ÄðÜX¥³;"ª>;KèË•; ö;¬;`=ùì$;\ =—e¿=J™ž;~Hÿfcê=É N<é¡Ù;Ý’Û;^b€;/¬:ÞiŒ:p!¯:O{œ=WÈä:]²¢;*›Ñ<ð6=”%;u•=´<ú=ê;<è +>e Ð<}5Ö:ß:<ºt> Þ7;°±»<÷v“=N¹;š—=6é4Œ=fw=ßí;sk=TYp>-=}YO=[(k=r }=,F=êBŒð =`¯Ê~=P+\=Ræ:ŠÕå;²=DªJ;‹w‘=±ß=|&=ÓÒ<øV=n&#x ²=Å&<R£<‚‘=õ›Â‹K©<|ΩC5=+=#~=b“<ÈÝÜ;åô=É =@7o=Þg=!Õ=æB.=Ç®<0äû;¼ÈÖâA<ˆ5ÿ<=;O=§ß<¢W¸µž;ÎHþ<¿™ = ~Î<Å=ÄÙ<«¾O<Ì1<=Â>…¢`=;0=‚Àˆ=C<=ȉQ=z/Ö:Õ5{Ø <Zç=“ó=+,ð;äM=I <Þ<¹Ê<*¿î<¹á>-Р$Z—=µ5Ñ;¶IG<åA=ôM(;Ñ„/=;Ëy=8v~<èV>æR%=%‹ÞõX;¾ þ<ûÛÖ<¶?Í<‹ñ=‘ÈÀ;fq;˜;ý¿f;ˆˆi;#ÈÑ;zÃç;RK=ð”š<œI?-D=Ö%;Oò‚=Ý}>I¿<=ã˜<¶³¹<Î ú<¨,·=9ea=*Ø;ÀCŽ=Å?$õË:²7>èJz3:ðî:ü’=ö_<ÉÂb=¥ >Ûÿz<Í–p^ߣ=ía’<¼ ß<>=g z<ŽÙ<¤­z<=“¡î=¯J4=ï3å;®£=Žg’HM¡;ÓÞ<á<öFVû?¥=0=—„²=ו=¿=ŠÑÙ:¢fß; |Ÿ=ŒÏ5=º†=\FË=Üß±;ÃxÐ<ÜӉƲ¥=fyQhãŽ<†O ¿J(<ˆit=E¢= ¢= ({=¬ôÞ<´æã:U8<b=\Ê$;–þº=>iž;:{ô= k="P<)À=ù =|+'<ñûr=¹h<ˆ€M=ß\G=~w>˜*°=Ÿ7²ià@<í®<σt=à%=åÕlÛ¦;»,®=Ì{Þ<.¶R=ÇJ=àŸŠ=qÃm=úß=ŒžO= ¬Î<ûm<\ç;1•Ç=L;«[Z=‡Ñ=4F’<ìÐB=·#D=@#=€Pr=ãÇ$=$ ¦<€¡ù<¬¦=tÓ0=¡a=; Š=Š}@=ù¼=¨¬L<c&=`Š= ¤<â[´=1úÃ=¸¹B<Î1=!Û<“Ù÷<],=ÿo=s8‘<>4ñ< jJ=ž2"=§ð<Þ®=âô‰=± 5=u)å=óí;,ñŒ=ò9;bà+=`¯"=Û=Ýòc‡jŸ;(ù¤<{7Ò=Ïii<ÜÀ\=±_a<äsa<î`=Þ1=P¦z=½“=ý µ=W®=Ó“v=0Àÿ<ímÆ<À/e=^uöÅÌ<@Ûx=wÒ|=üúö=‹_>F“.=äLÚ:øEÞ;çË»=MP†;»;9=ë÷x=v¸<䫽<õE!<,ã=5=ÁZ>1?…<›P=irf<ô³±<áhb=¨'=¢Ùn=²äV>‚-;8i <òRz=ñkí;|Â=~¨—=n•Œ<;ÜO=é¨< ¸<4s±=É&å<­Ù;«Ü =ü¨.>iwï<Í| =ž‰>ø®‹=(MU=•×:¢…Ü;aб=Ï4%;`0)=¯ÎŸ=þž;´àô=KŸB<[L<+ü=àIY=Ä™×;3ɧ=R©=ªR=:¦>==Á=ÚÉ<Ä1„<Y< 9v,=FØ`<"“×;ü§Ñ=t=+–=Yî=`Þæ=é-%>i¯q=ÊZÖ:ùîQ2¡;´.j<ŽC=ðÄ<½¦µ=ªáN=ºBÙ;¢%Ç<¿N8=$ˆ=’2]= š—=Le:>sì-=p¾×:/ Ü;ciT=Ø7V;°µ=×a“=]ޛͽð<ëœ ;ÊDR=E}=ç9;™Ô<£®=ë< ¬=€°Ç<6,²<úf=:ŠÌ<eͼ>bÅ=÷î:÷­<$/ó=ï1 =žzz;fïç;°á¶=6u<3Æ =¹þp=¦4<>_ï=ð>(=–?í;ËÂ;ü‰ý;yyåõ<¨ ,>gã3=Cä,;Ý?M=»—¡=…¹©;‘+hŽa=?¨Ý:TìŸ<{Û<Þ;ðm׃4<Î…>V³Á<:=è;k€½;0~7=¸Z <-ÇÁ<éÿ­<®Pv>H“m;ÍY@<Ï7=¨%;¸X?=ibÊ=Õodž?=÷+ãŠ=c)ž;üz>eç×<È Œ<¼(=­Dú<.j„=+É<}MÄ"Ÿ;± °<<ô®<§xò<žâÿ=ÄP‡=-Þ*< A=ùôžmv=©qÇ<,¢2=Ï`.=#™<Ùðò;ÙÆL^¡ˆ=»p<#‡l=㨑<êÖØ;&$˜=ç<ÄÙ=ž×=9Ý¥=¦Æá<ÂÔ¢<”ôö;ÇvP=î¹=^Xü;͆¸<¶}ƒ=–ÆÀ;LÓb<¨ð™<|”<¶=Š=(Ô<ÐFJ=# =sG<Á½4=¨IÆ=Z³=¥ÃŽ>æ"a=ËJí:ê~ê;Wf=L%;M܇= î>Ô¨Ÿ=}\';Õç<@~>ýJn<‡¼û®Ž=kØ:2øÈ<ˆÒ'=•»w)g€<’ïÄ;¹'>x… <û=²© =)é;§«¿;Cëø;F <‘õˆ<—{°l²q;Z9=¹D*=o°Œ<}+/=º%Ò=Ä“Ÿ;Üü<ºœ<½ɼÒ=^Ó¹=RhÙ<‰<”ÙÜ<4p½<þ=;bà’:£í:®Å®°ü:Ú÷=Õ]<ùóÏ:–“Ë:¬Ñ:edá:*òZ;`ò;Âp?WB:ì^;áFË=e%ø;ÿÆ=+J’=ïmâ<He<–ù<1.:=0¤º=^üJ=̹ê;Ün=…Ü<{{ >ƒÞ=ÅŽ6=”g–="‘|=1æ:CÑ\=?6ç>ûÙ¹;Œ?<*Q ä=#0=4cC;&#<’”n=ž€<_•à;±'=(1!=V)<ÌœÏ<^Ǩ==ª!=î0à=ù­®<j ø#a;4¥e=R”=ª ?;=v¼=^9;=Ë%>Æ‘Þ=‹Û’œÁŽj^<öžŠ<¨ý6=¨ =¡–4=ø=ë‘ =yÀn;+ ›<¸JS<¨W=î}]=¥<å|Ç<±ÞÉ<­2ð<-ŠJ=ÇK>ª©Û<È¥•<¼!;0ž<ãwš=žÝ,;c»C=‰Èû=äê(~‹=^ƒ=LP=º´G=²!= @à:ÏW5<Õ«ª=)ÒV;‘ª<¡ >{DB=^Yü< 2<ݹò<Çd=Є=1ßCÖ<\Êý= Tú<¸vˆ=û]¸=îÀZ= Â<½¬=,=){D=pR,;dÈ¿<PR=L>©;²]=»™Ñ<ÄI…õÉ®=¦§Y<½«Ü:ºÂÞ;^‹=̹D<½U=¨g…=H=øÖ¸=Þ‹Å€?…h?Nܼ=o:|}g?ÌÄ=­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>L`h?»º=o:pCg?ÀåÅ=­?Å>}Ô|?ʶ;´%<ŠÅ ?~uì>­?Å>ç ?ã;™¿‘:ŠÅ ?~uì>¶h$?Í.·>¦’v?ʶ; =ŠÅ ?~uì>­?Å>®?¢Ü;bo•:ŠÅ ?~uì>Ó 3?~ä™>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>~5o?ʶ;µ°=ŠÅ ?~uì>­?Å>y6M?ÄòI>·š:>$?“Í·>ÝÝ"?ʶ;o:ŠÅ ?~uì>­?Å>‡>z?ʶ; ‘¥<ŠÅ ?~uì>­?Å>ò?Mœ;£?“:ŠÅ ?~uì> +?ÅÔ©>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>r–9?ʶ;©‹>ŠÅ ?~uì>­?Å>*‹¥>tÉó>JWM>=›G?º“a>:b@>zçO?þ„~?6ë~;•÷:ŠÅ ?~uì>–a”>$Ï5?ì³~?¦‹_;šÙ:ŠÅ ?~uì>ÀjQ? T:>_?Ì`;\ï•:ŠÅ ?~uì>J¥4?Dµ–>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>¥¿s?ʶ;ê¼:=ŠÅ ?~uì>­?Å>?j£;±(—:ŠÅ ?~uì>ÿ:8?Љ>Ûkb?þ`ê=o:*Ž?ÀãÖ>­?Å>ašx?ʶ;_Ú<ŠÅ ?~uì>­?Å>ü?¾›;º7”:ŠÅ ?~uì>@Ä?+wü>® h?¾›;k6º=ŠÅ ?~uì>Q×.?KQ¢>÷ ?†ù";ÀHž:ŠÅ ?~uì>[&G?£gc>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>«-l?ʶ;\ë™=ŠÅ ?~uì>­?Å>g°n>obÏ>$E¹>°a>¿G?1pÂ>È?ÛŠ~?6{;Aûó:ŠÅ ?~uì>–ÙT?ñ˜,>?Sc;sê–:ŠÅ ?~uì>ÑŒ7?næ>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>•o?¬=o:·Á>¼?­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>úan?®Š=o:†ª§>Ý*,?­?Å> ô3?ʶ;î–>ŠÅ ?~uì>­?Å>mpI?7¥X>œ}Ì:-5Z?Ÿ*>W|?—Í>Ó?•ä(;5¤:ŠÅ ?~uì>÷ÁN?Ö÷D>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ùz?*Ý›<o:uô:?[Š>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>|›v?HSâ<ÝŠ<¢G?:–c>­?Å>Ž!?’è;˜‘:ŠÅ ?~uì>ø§#?ù¯¸>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>y}?ʶ;‚6ù;ŠÅ ?~uì>­?Å>Ž!?2°;Qa‘:ŠÅ ?~uì>•"?¿Ôº>†_.?ʶ;þ¢>ŠÅ ?~uì>­?Å>;É=?Þšƒ>¿Ó: D?7xÅ>å->ü¿T? ½~?tAY;¿Ó:ŠÅ ?~uì>·NV>.lJ?‡Å~?pÓS;C»Í:ŠÅ ?~uì>6£×?;Ü;+Jš:ŠÅ ?~uì>ìÑ??Z\€>Ý"?ʶ;o:ŠÅ ?~uì>­?Å>gk?¬à;ŠÅ ?~uì>€?fn3 PF00041.13Fibronectin type III domain psaPenlsvsevtstsltlsWsppkdgggpitgYeveyqekgegeewqevtvprtttsvtltgLepgteYefrVqavngagegpes ----CEEEEEEECTTEEEEEEE--S--SS--SEEEEEEEETTTCCGCEEEEEETTTSEEEEES--TT-EEEEEEEEEETTEE-EBEjA§6AÿÿÿÿThu Jun 16 11:48:22 2011 !"#$%&'()*+,-1234567BCDEFGKLMNSTWXYZ[\]_`abcdefghiklmnopuvwxyÊétÔxÁ¦í7?aÁ¦í7?åauÀ¦í7?Affæ@Affæ@ÍÌü@ÍÌü@ö.‰=óð;]E=P’=Z&ß<]}n=s2Â<º[<=qyy=ÿ*=]Q<²žT=Ôõg=ΉG=1üS=ú±=}{˜=º®›=Á’<ùn$=ºííèŠß6‘]= \<áØ <;æØ<”ƒø=wý<°I/Ý=îÀv<1µAý€=Iôs<Ø#?=œm >†*<»Ñ<3'=þ— ="×=©=]ƒK<¬ÂQ=È”¥&Ã<)=©ì—<`×!=…L4=²M=•=ƒÎ=^²;ÍǾ<Åb=lÿ;Ôò7=,\“=ÜÀÇ<Ê =ëQþ<áõs=CU•=sæ >ðãÅ<¾A=øJ|ê“;2ª<$ Œ=à5•;ðýw=¿>u±<\y=~]Ë<ñ\p<Œä=’,Ë<=E‰¢œ…= <|*°ì<Þ¦>Ø=±¸<(ÙÛ;2™<â­<ñ•Ž<ÐÒ<‘ $>e„;?@O<ƒœ=¶Åé;‹ò”<â’ <Õ<“;žÛ(?Éǽ;I+ý;ð¼x<÷1<í;qQ<›ß><·TÁ<6=0=ëè€< zŸ:½B‚; âÌ=Ⱥ–;oSD=ÊÍ>Ø-x<’9Ó½ŒT=åñØ<ÅC;ÆMGTþ—;Ï]=a¬¹={”L»¬=t- =  D;åôG<©O_=<<®k„^ "=Çi<‚[=ó"=…Ž=Ð`3=¡Ïé<§¢U<«Æ<…Æ<çL¢=A!O=$¶Ÿ=ûåÎ;Í=ónà=½Ý<Èê< A, =ºã{<ÌN‡:lTH;Å„‡=A= fI=‡ Ò=Q¯+ à=+=Z»;µØR<ËŠô;K;Nü=èÎ;¾[X=mË<©þ³;i¢;@R¢;"L´;±Y;>]Ñd=±&¦;ŒE=…‘É=ÿ'<>õül޳=ø<Ù)-=5Œ<2*†=Áš=CyŸ=]îB=« &=çãQ;ß&Q<«ÅT>ð—=Ú =#Ë =dÖÑ<ŽçÄ=ftŽ´=…Ñ=Q<­êÒ<´¢Â=5v<“á=í[]=ýE< ½=3SŽ<ðdu=nî—=I~=dØ5=g¼½<"=0\¶<(™=HT£;y’J=¢€®=( #<üÐ<-#=³w]=Ç*ó=Ô‰—=h S‘=‰Ó<ž‡U=uO=Á·=ؾ>‡(=ìûF;¬¹úà=tÁ†<£N=[î–<Þu·=S²=\˜=%sm=ýqæ@¢J<Û=Êw?[ƒ<` <ÈÖf<#”<à2ƒ«=ís>ÏZ=òCh<¿¯7<Üêy<+ãŠ<•ý=EI(=–D‰>>ß; µ<¢>ƒ<œ¥;'<ñº®<Ü7T;0'/<8F<‡•Î;;k9?KŸM<˜¢;»N<(ï;â~é<ê  =k…<óg<Ê„ ‚ÿ”< $=>âx>=´Ýo<µ?<Àú€ží;5hÀ<ÿz†=>nv<&?c=ƒ•Ë=Lñq<óÏÑ<–D×<åuë<_Œ'>~,= ª’=…ûnTÿd<ÍAÑ<ë ­<î‹Q=Ò=&=²¿þæg=±C<8Û¡=(‘¨<@ü„=Uz=@»=ÖÚW=>—=Ð~E;‚Ï<9öu=b‘³ÇwC=è=ãCþ;ž—“<`º‚=åc ¹=¬ÂQ=ûN=Úù³<0d”<l©< ã:Æ€e=Æ7?BöO;ñð˜<$ <÷f’;›+Ä<íôù;Í·C;ãQ(=áî<Ïýª<Ç`<bÁ<•q<¦éé;cÛ…:„H“;[Ä=ô <ó<¢\Á< …(=ÃÅ<àL<{ó;>ð¥<ðÚ=>þO=yÞ¨<ñ%D<Øõ(&ê;=®=>Ò¶=’y¢=9èÙ= z<K =Ü=ö<ñ|<·é=@6=»H“<=m=ÝŽ<†Ý=©´=Èž¨=x X=ã÷û<¨E;ö%7=¬=j[<Òë<,ëw…—–a)=#ãlÌê;Qv=}Ÿ‡=£ÔQ<”M6<9ë¤<+]=: ß<6= Yš=ÈÀ½<Ýõ“>Kž=,@º<ÒH<ð’»<Œ¥NÑb=á˜E<<®n=â1õ 8€=ª”or<'=®<ž~<@˜º=ÃÓ<꜖<Â>=_Ò4>/ÎU=õyN=Óh£=!ÆR=ÓÇä<‰-F;`YI<Ñ =ô؆Or<”=5ƒ==½?=$!m=®³i=]Ú¢;Ì‘k=#¯=w@<²þ’;8<œk$='B¦<®X²;ñ-÷>`¿<`2Ï=f¼žf;VQ<<@#=_‹ñHŸ@m~=1<Ç¿<ß@$ü ˜;­üxžï`ü¡=¼Ç=QH¼<|ªB;´ûF<ßä=ðU’U=¾{e<ˆi;<çv<¨ÕŠ<‹Ï=’+†=²à=Œrë;(oH=Ñ¡z=Q<Ì"9<ñ·É<%®m=íi‘<íë¥r=à€%>æ=ÅŽÏF>n<übÓ=l¹(=ýóu<*`š=PÎ<ÜDS'=;=^¬r=‚ØÎ<\\ =Å\I=¨é%>Èmš<‰8²<–ü€=W‡ú=‹6=; <º„ =Ø=¢=¯¯‹=ìV1=K^;Ë51=šNx="]–;ƤÜ=½Óæ=s=¥’l=qL¬=LÅ=$I=ÑQº<fA;˜ì†<»›=ûU•;Ƕ>‚nµ=–àâK™]U=VÇ<± 5=o„<jö<¥<=I–l=þÈÙ=±öí;^=3‘š=H=µ9%¬e==í1@Á ~<ã6‰>Wô=ÅóJ<&<‡Çfp86À;?Jœ<Å€]=US<ùú+<ý›<ŒÕ¸=x. c*>èà<ÑoF-yó;:ïÉ<7ª=Ã!J<Ç =î˪<ˆç <…æ,=‹_'=°´=?y=²‰=…æ=¿Ûœ< Ì!;A)< -u=6¥<:‡<Ê‚‰<£9Ò=ĽŒä< —">%3=×_¯=Q9é=§‹<¼ˆ<”þ"=¡É=hÝ$=ÆH˜=c,£<ß1>l›Ö=Üì~<úÜýê;+zÿ<”4‰=ñ—;޽=ïá>v¦<.™Z= ±<߬u<®®=·±ê<×žä ‡øò§< i—<ê´—=ªyí<éVY<Ì…C=&üŒŸé>ßT<Œ=Ùfô<¯ÂoêÄ^=ÜØÚ<öì@;;·E<ò)_=¹^DIa =«¢==Q<<;ò<Ô<º<ú 1=ø¡T=V­–=ò+Ö;}Uü<«7œ=`n‡<šD=mâU= û=ŠJî<ÛØ-=kª =-ƒŽ=€²=haë=^\1=ü±=èA=š 6=pz!<úá<=ð¤Î=$¢;q>PÈ=Nae<¹h=¢sÿ<[ʃ<+ľ=IÝ<ÿ@S<¤[=€é˜<ð׉=З=‘߬=ÂÜ =nOË<¡¥Q;‹¤›<̃Ø=øk<p*<›k›<æÛ·=Efš<ï=¸,Ò=p=<ß>éô'=…ç<Þ#VR ¼;Ñd¾>P”C=×; …”;¢»;Ði¹;èiÿ»=;—ü<ÿ«=Å2À;s)=`6±=MÇ™<ã¨Ô<”{Ó<³=fuê=LW=Êû'=tO>=²ÒF‡=ƒ˜<Î ‚=kbÅ<•—=>dÐ=ͱ®=ãl{=e¨=Ô^;¢ž´<ª=šl˜;SKn=:M÷=Æø³¯<Дú<æœý=Rø =ù)WQ¡y<êÂ3<- >s–ƒ<¹Á‡>6‡=1«<ƒÌ/<¾£h<«é< ø<ê€ =àî=Nß;+h=ÿÁŸ=t»”;ä¥= Õï=9<0œ%=/$¯<–~o<ÏZ¿=7Ê<Ž B<]êz=V,=yƒ=¼Âr= ù>Mä´=ñ¹<åò@;uÉE<ן=³øÛ;=¢]=º V>Ní»=Y=¶ûb=¡»=߯À<ƒ{û<Ÿ†™=¿çY<Žè±=žî=,¥œ<Á=4=A"=¯Ô°<;³Ë=-‘,=4j <+s‚=V­ß<9út=¿™•=ù׈=,îl=õy=ÐÂÎ<3¡•<†=¾š;˜Ä±=a†%>ñ_<h=bãD=M1×<¤1®=‹ëŠ=-SH<À72=bV©<2@´=ÏêL={Œ=G‚=}c&=C=F;/,‘<½ž> F=ýA<àÒ…ûA <Ϭ>¥=ö˜{<fB<¢Lˆ"hê;¼¾<쵎=ïWÞ<¡X:=ƈ=ᇚ<žy3=Õú£<Ïé=´Q(>õƒ=¸v<šé!=‘¶‡söf=m:Û<\T=øÛ‰<ÏtH=°Ÿ=4ý§=Üm=Þ =Ú_;çâ«<î·|=¿ <ƒZë=í)q=i’g<šÁ=<.äw<Â&Œ<ú­=’A.=¬Ãþ=wîž<;ÝÈ=JX>š<Ö<´p<êŸß=³À²< ×F<ææ=}`“<Õè=")´=ÕÖn<ön@<ò1€<…ð< r=•€d=} >¿ui<ÂUÂ<ÃX˜=ö!é;s =Á=ßÇÏ<¥Â=·<'Ríhi<çl=ªÉì}K= Ÿ=Zù‚=mÆ¿nÄ<ïÂ>@ŸŸ=.Lø;ÖkÕ;Ÿ¦<ä<< ‹<1k­= >äDv;6ÝE<,Ï=ÅË =£¹<æIt<óI=oð=Ø.F<ñ¾=¨•ÁC=yp<ËÅ?<> <E<ΦV=Æý.=ß>Ãöì;{VÀ<4·“=@‹<ÁgT=Êcý=\ì<ùôî<8ã®%^<ïk<ö±<ÙŸß;›g¬>ùüý;ïÎD<éë´<¥Š<ô£ø;"I™<ųS<é}†<žù< ħ=ž*=ä<¾}î:}Ç;{_¥<÷ë¿;8±2;¥]ž;÷+= |¥;ÅNe;˜¸>jx¶;GÔ>þï=žŒ;Ñm;P%½;ìº;|¶<Áº„<}xz>Û¢F;å <tå= ‰•;f’=B¼ >Ö!ÝF(<<ÐÛ=hÔà<òÈy<<È)=Óiq<"N<‘iì;cV è"=÷g–=yˆ•;ô< "â<<éÖ’"<6áÑ>™8•=Ó <_÷ã;>]<µæ PŠ<É.=ÀDá<¶Ó6=`ÊÝ<ÀŽC;<«Gz×<ôh‚<¼æ=ðöÖ<ª%K<*þž=¼<‘µT=w¯‡=x~à=òÐ5=6ÒÅ< ,<ûJ<²ê<âkj<Ý&r;¡¢Ð;ú›–=ò¢å;$);ÿYÀ>ï;¸ü=¬¶<ØaÃ;¹ ¯;^mÎ;ß-â;W¶X<^˜·<Õt…>øòC;<¨ý¦=4Ùé<)­<wm<{Ü=¯ô‰<õïEq’<Ý> Hz=hCm<^Á?<]}~<@©°š%ï;.=’¡ EaC=6@}<É[±<í"=ù„<]Ÿ¡<º~ E=U ^=Á©%=Ó¤ˆ;2Öj<Õ?< û·:¬®`?`²Â<Å;/å2<à„Š;Ëw ;ó <ÎM;’©:7ÆZ<°;k– <\.š; (<¸IÒ;§r[;œÓ`:Æb;Ï…P—Š;ø?´ø<=}M;)0j;@l™;º;€tÛ;#\W<²ï=‹Æ%;¾ÐÙ;Šä+<#ký:Mæ<¸!U<ûs,;ª<<“,×;ÄÓ‚;®ÈW?ÁÒû;L™8;œÅ<Žò¬;ØZn<#«=»°%<<Ð ´;ð&¶:³ d;F …= )ù;Lë7=þ_=¹„й™"=6í=` Ê=¯u=‹G(=º¨Ž;<÷ÄË=(”;½˜¨=«¸b>à<=5ï<75Þ<× o<ºNÊ=ÚÉ<ä,§<+9W=ò<ž¤=¸ÿ;==WÎ=µz4=Ú[¹<•@; æD<†àk<©Ó;WS‡<'²‚< d;_[?<É÷; ÁJ;Ñ*<7 ©;ˆî:\?¦>¹;/éï;6Ùè;€Xú ÷;EN">DƒÁ­£N;Èk$<Ï9fï-=’O3<ë=<›E<­áZµÞ¿;$ß<Õeq=Ðç`—S·=aï̱ÿ*Õ<¬è<ZÂ=©oê<4¢=Û Œ=ŰÌ=s¬v=º¶Ã^˜Ö<ñ·É<™ž=ݰI=Æ{³¥•=}Q=kÙ}poõ<)Q><þ<Ú¶ =^T5=G›<¯×ð<=‡Ð­=Ñ >Î ã;Qº<±\=§3=ü1=—´§=7ŠE˜«=ŽÕ<¦K=š„ÎEŸ;sN¬>ð¾<źz;’jz;@ê;~•;|A<Òe†'0 ;n¯Ñ;Áß2>û2{=þR<'»’™>kO=ºÁÁ<ì~B<‡<C•<Å‘=t0=Š÷Î=EEì;_À¾òh=2<@|;<3½æ;lÜ-=³;ì¤P<’hL<áeŠ<`éò;­‡i<´M<9&<Œï)<‹xo>“×=Ž·=0Üã:…/±;±òŸ=f·<¼,=_ È=vp8<Á=Ñ[¯<þ—ýsA4=â®g<ä±n=ó<úPS=Vå=!Ї=ƒ)]=kU=‰a;$^=ôË•=ü™=‹vϨó³=[=`”-=áŒ<|Á¬=LÊ:= ƒ=4'm=c=FÖ—;ƒ ‹<½·¸=Ó˜€©R=7±<ø7yœ˜;ŸHw=3i½=µœ³Ô<Ú#£=ÏØ=äÀz<Ù®=ߘë¸< ëv=mÈ <Ôxr=lÁ=Òî<Óx=@H =þpî< IÊ=w O=<Öñ<0¾‰=Bµ.=~Ea=>Œ=ò¹=óp=ÑC=R;cj½<‘V¼=ìDé<Õ•®<²==o<=-ç¥<£j÷<;Ç==}Ùf=Á4ó=ƒy=’˜W=x÷=ee =¸á=1=[¦£=Xó=<º;Ò!o=5Qe=—S¹ýí<Æî<+a=:ºŸ=뤰;èDu= µ=´ë¯<Œ †=¿Ã=j¤È<À‡=éX÷<Ò8<á¡K=Ž==ö\=Û3=Wø=—û=/ÎU=÷ E<ÙòW<žžz=’¬/<{ž<hK=«¦Ï=k=.ƒw<Æ¢=Ýy=…3ò=ÑCô<=þŒÛ=…//=(¤'=¼ö=’Ýq>}ƒÅ;òK¦<Ú+§=Ã’<&r<ÎÌ<‡C<„@Õ>÷s4 <ù±/ƒ&ô>]g™<Š’Û:ëÃ;wÛ‰=É3ª;<úI= Ë=m?s<ðrÎyN ;wƒ=öÛP<²«¤;@øÑ<hî;’ ë;Xas;Ñ=Î;›d¹;äx<—{=´½g<%–=’Ò?õ|­=î×Ú=foM<Œøª<–ïÚ=“ƒ:=N¸0=æñ=áwÛ;ªè´<>?Š}<„9&¥ö=™,ޤy='›XRJ¥<[Œ>“÷=H €<ÿ-C<ÄÆ¼<ª=ÊC =&ßU= ñˆ>°f¼<ˆÚ½<ð¸^=c'¾<#„ j*›<“~}>ˆ¢*=×pÔ<úsB<G…<_”°öc=Šš¼;ª=C¦Š= ²Ìd2>^iö< Œf;—ÐÊ<ű=We¨;._)=.Σ=¹G”<žÝø<;v&=¨)͵RK=„¸F<Ö62=Kí§=yªg=m*©=÷K§=Géc=ÝÀ<E;`H<ÏÖ=m<'=ÊçÏ<äíí<˜ã<àBÞÒ„Í;ûŠ«³e‡ï„=\çY<®Y¸;ÉvÙ<¬¼÷;­wò; ?{;âžØ;è'Ç;ƒ<¦ü<xp<” ?>'3>ÅŠ>¾nîRc=RŒ<§]£:ú*|;‡;²=as*=ãoú;Óqg<Äñ¢=ó‰<;`D<—ùÆ=Ž<š†…>àÉ[=oØi<Ô—><–„z.=< >À™)=µR<.Z,<ê`<î}<_#=Ñu =ƧM>Û«Ô;úý<Æî#=Ðé,<";º;ö&< ÚÉ<6:<•,ý; °Š>À2GOOy==ò <|A<‘’*<›><˜ð<ý{=h„v>’œ;J¬~<Ë{~=Ò¸æ< ñ;Êt^¤(1=Åì_<?7ÕÄ•<éDÃ=À'=äq<~»?<;¥<|¨<_É =6r.=ä˜È=xÍ^=S¸>ò‚=ƒô¸<àªE=Œñ€>ÿy.<¥Î>;Óf<´:<¸=y<ÊE‹<á˜=oÐg=ö®è=$Îç;!Ç=Ì›ñ=Ë…=–<¶[mïmU=R\m<ñ?<à¡~<$hÔ<ý© =Ë€}=¶ú=à“ï;¿È6=ý†•=Þ²C=™”ò<ï§=LÍ,=g?=Ö›‘<á¢=aT|=À®=Æõ¤<ïgX=Âúx<á¢=‹W=ï¯=”>ô1T=ñ™;bÅ»Cßä<£ºv<Þb>,Î<ÆC<ä±n=ª)<Aj=ƒy=É{|=t3=D½<²rB;Fçgò<~I<³m=(é<Ö¨“=“@ç=žS=Ή`=J±=˜G;-ì <¥ç¡=ªm(<8Ŭ<•è@=Á¡?=õr¥¯Á=ÞË/=* æ=]¶=ÿàæ<ž}=q¼=ëe«=™»;œ«Ô›>OM¿<-æÿ<¸›;=v$+=t©¥=rºÇ;¯‘Ñ<œU=#™<ÉÍ <*²~(‹‡<ùþL>/=‚;©<³›=sÛÌ<ÖD<ÌN›=î,=Ûƒ=žxh=¾§=ÇEl=$%¼sÍ=éx< ^3=}®¯<…óÎ߀=¿þg=@%¤<.=DT =ˆ¸=ÑË5=tÈ=pï;ñK =ZË=1P±;‡]&=–÷=Íkã<µãëñ¨=òfÖ<Z•<£ó·<$ “=p£3=Ój†=«¯>ó¡Õ;«±<·Ïy=kYÛ{¥<ÄŽç=&.W=ás=YD<³Ù‹SKê;„EU=–/´=‘Ió<*)o=Æ=´Ð =dAî<ñÖ<]ÓÜ<èJ¤=HyC=Ž1·ê.³=ÈÃS=Æ©¼>à,>=±÷=5Öç<†Þa=ý¢{=úÀ‘=YƒQ=»øu=k*•;ñ†<& }=gIüZ;ìH†<ô(‡=ÁËš;-a¬=P˜Ï=Û\<%I=…”Ð<æä[=YÛí=³ D=´„Iÿ›Ð<‰W=/€D=£ú) =‡ =À*=¤{ñ=ŒµX=WkÌ<Ãu}=Fªl=%îk=-S–=¡‹¶=m)H=#-Ã<‘H;CÒ}< Y=D„÷;3=/áÅ=Ûü¶=X =¨>=^\\=í—ˆ=—‹‹=Àš†åÂ=†©J<ñ^þ<¤Z-=£¶—<Ÿf°=LpÔ<¶÷Ñ< Ž=UÃ’=&-r=C´@=¸ÜÜ=€ÙL=¨¦íù<êÖõ=ÄzQ=mûf<·­v=nå<è±=»½?=R2¢=Df=ŸÏ)=ÕYÄ<¥/Ò<˜m‹=’2à;±Âs= Ǽ=æ¾<Ò==Ô<µË)=H•¼=Q„=Ï)¾*<#Ä~=“¿==<< ä<ÿ»uW‚=ÒïBg<”{Ó<+]¯<Ë•ô={MC<4Dƒ==œq=:“=EGŠ=U’Ô=ÁUb=OZ»<¾B; ÿƒ<‘–=©—ž;K„Ÿ=$8>rG¹…<*È¡=üý =ŸÎ<> ‡=""ö<_ËS=&]€=»ø³=ù“=¯m'=ÙX<`5Š<% >(%=EÍ <¥õ<äl†=H=ZºH<ìlŽ=´†œes;=ê®w……Ÿ=°„<ÏñF=M5…<{w¡=Xƒ‰=AœY=ï*y=áÝ =/X|;@™<-4=¿¡•;~_(>ê=×o¿;òT/<ý >À2G<ˆD<ïxã=@oU<îß´>í=0o+< Ÿ<ÄA<–ÿR<ö¾Ä<Ï©J=¤6â=œ¼;9¬î<| Q=ˆŽ<9)š;qçJ"J—=ì<Çã;Ô <ˆ<<5Ê•Âm…;ÑwV<2s“=9n¸X<qb=GðÊ<×i£<ëd >êx =çnE<H†=èjŽgÍ<ÙD< ­Œ=g—Žüë;õWø=\ÆR<[ž*ˆd=¡êZ<'¤Ÿ=Aç½N=PþQ=µm=À4= Ñ`=þ÷{;9m<´‚å=U”™;}2`=fîß=ÒâW< Ûí<éø<;9š<`­Ø=Ê–/=­*—<û~=jº<òf¡=Vl=Ÿ­Ì=$f‰=ÿ{=ÃE;é ý>K5=¿C&¯<_aV>n=~…<@[>Âþ‘<Òº<êÞ‹=fK0=é5š=9¢H<ù— =¬z=ÉA¶;exH=6ˆ‚=_Î<€ñ=-l”<궇<à:y=h]ÿ<âB<ƒ:•=‡v„<Þ>1=M£=ˆC=>£ô\>pÌ<-k>;0f:<]Ti>Hgº<èÂ<¸Œ…<¼ƒ=g#Ó<:‚L<ù> { äD ã:ãÑ»<æçú;Wf<¢ª=‚Y=¿9<"N>Œ<4É7>”=‹aÎ'Þ;?f´›¤b=€ºÈ<| L< øêó)<÷ñ# =C†¹™<Ë™£=ñÜ>=㣙<æW*=wòŠ<^®c=9«h=¯óÊ=ù|=i†ß<±X;9‡<.ƒt=0 ®;õø€=kÌÁ=²»-<•c =ì·Žžp=Sj{=Qýœ=ØB= = ];gQ]<ÓŒ"=ó¸'< éé;BîG<Î"4>>ñY<*±t<•I=Àªq<ÌšÛ=[3=^ŸU»…>šL=‚P<àoç;:¯U<ç5>ÈÜÆ<[5<ú2>kéƒ< v<>OOy= ;W<ìl1<‰Ii<êÉ‚<¯îú<“\"=, >$ºg€?ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>!§h?ª.´=»÷R;Ýæ?-2ú>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>úÉw?–7Ù;)wÐ<ŠÅ ?~uì>­?Å>#®_?Î'Þ;n«ô=ŠÅ ?~uì>~?ŸÞ×>ÉTO?;¬Æ=®®¾=¨æ€>»Œ??½»â>$¢?Ì|?Æ <ç †;ŠÅ ?~uì>ù×B?µŸt>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>.z?Ö¤<»÷R;´,?¿¦Å>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>˜ëu?–7Ù;d=ŠÅ ?~uì>­?Å>îf}?bÓß;EbY;ŠÅ ?~uì>6?÷“Ý>®þo?bÓß;bd=ŠÅ ?~uì>6?÷“Ý>ún?‡2ì;Þ×r=ŠÅ ?~uì>+?ó÷ÿ>%~u?Ö&ú;9Ø=ŠÅ ?~uì>Ò²ä>³¦ ?Û€[?„çŠÅ ?~uì>  Ù>ïy?vo?Q<ïÏj=ŠÅ ?~uì>È;²>=â&?+¹m?›<\H}=ŠÅ ?~uì>6µ>@u%?S?éTÙ>Z4;Üz@>áO?˜MM?>ÉJ>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>QO?tÙ&>8ß<øä[?l>­?Å>:Új?¾m¢=,(X;ÓxÎ>¶Ã?V×#?‚Q¸>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>>y?Z¹Â<»÷R;ï„??öò>­?Å>·Šu?Ò$=»÷R;#?Uºõ>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>à‹s?–7Ù;,=ŠÅ ?~uì>­?Å>ò±z?üá;¤‚b<ŠÅ ?~uì>ãZ'?%J±>‚*1?%œ>U;á =>U½P?øB ?sz¿>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>àÑf?L«¨=´ƒ<À ?¤æù>­?Å>öq}?æÜ;¿²U;ŠÅ ?~uì>`î?#Ð>öq}?æÜ;¿²U;ŠÅ ?~uì>Åú ?> ¾>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>·Šu?–7Ù;R- =ŠÅ ?~uì>­?Å>¢e}? +à;}·Y;ŠÅ ?~uì>ï¤?¶Þ>·ae? +à;bîÆ=ŠÅ ?~uì>ï¤?¶Þ>hO?S@>„Ap;{§|>ãÕ@?ÿ7?nþ‘>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>¥ÊH?D™F=É.+>Ž?Íãâ>­?Å>ûû|?>è<>V|;ŠÅ ?~uì> LÖ>ëÙ?ûû|?>è<>V|;ŠÅ ?~uì> LÖ>ëÙ?ûû|?>è<>V|;ŠÅ ?~uì>àÝ?èCî>^®?ýí‘>Oj=>þ“}>-›@?Hqò>vÇ?ë|?Q$<Ùà;ŠÅ ?~uì>Ò 6?eì“>3]}?'"ã;²˜\;ŠÅ ?~uì>áû ?'è>3]}?'"ã;²˜\;ŠÅ ?~uì>Ü_!?Ã@½>Bs}?'šÛ;/HU;ŠÅ ?~uì>¿?ÏÎ>õ)`?ø=/HU;R¼>˜Ö!?Vx ?µ¿>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>Ýs?߯9=»÷R;Hb4?Ã;—>­?Å>1h?p_¹=»÷R;ÅÒ;>h Q?­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>¬RS?Zã\=Ò÷ö=kø9?~Œ>­?Å>Ì$}?8ö;–o;ŠÅ ?~uì>§ý ?h¾>r`}?üá;¨{[;ŠÅ ?~uì>ãZ'?%J±>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>:©1?ë›>»÷R;šð>ËÃ]?­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>÷w?–7Ù;&ÒÊ<ŠÅ ?~uì>­?Å>qm?Þ;Š=ŠÅ ?~uì>W?ãQ×>â»_?7í;æNó=ŠÅ ?~uì> ²ý>Ô&?̦>?€< }>ŠÅ ?~uì>–üË>Ä?ɪì>³R?2¬;yÐb>LG?†IQ?eÙ:>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>æv?l=»÷R;Æó)?«¬>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å> ;„!?­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ù`?õåÝ=ËkR<§Q•>7W5?­?Å>Žt}?ðSÛ;‚U;ŠÅ ?~uì>_E?huÍ>‚ ?i>¥ŠŸ>â- >cô\?6$ ?F·¿>Ì^|?¿[<Ü—;ŠÅ ?~uì>k&H?Úf_>4u}?õÛ;_ÆT;ŠÅ ?~uì>ÍÖ?RÀ>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>Ñ«k?ù|==„‹<ôœ“>s16?­?Å>S¤y?ƒBÜ;xf”<ŠÅ ?~uì>€?|ÿÐ>y·n?_|ƒ=¤%Y;Bk>wE?í$?©%¶>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>Oôl?…0o=´ƒ­?Å>öq}?æÜ;¿²U;ŠÅ ?~uì>`î?#Ð>S?‹Ñf>÷M>Ë|>~Í@?`î?#Ð>æÑ|? <…;ŠÅ ?~uì>‘—Å>Y4?æÑ|? <…;ŠÅ ?~uì>’©ì>« ?Vû|?ƒ ¦¼6?‡’>öq}?æÜ;¿²U;ŠÅ ?~uì>`î?#Ð>öq}?æÜ;¿²U;ŠÅ ?~uì>`î?#Ð>öq}?æÜ;¿²U;ŠÅ ?~uì>`î?#Ð>öq}?æÜ;¿²U;ŠÅ ?~uì>Åú ?> ¾>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>\“s?–7Ù;Þž+=ŠÅ ?~uì>­?Å>r`}?*õá;Wt[;ŠÅ ?~uì>¶Ç ?³pä>+¬z?*õá;‰d<ŠÅ ?~uì>¶Ç ?³pä>OY}?X_ä;»Ì];ŠÅ ?~uì>n( ?ª®ë>OY}?X_ä;»Ì];ŠÅ ?~uì>n( ?ª®ë>OY}?X_ä;»Ì];ŠÅ ?~uì>n( ?ª®ë>SÈv?X_ä;÷×í<ŠÅ ?~uì>n( ?ª®ë>¦>{? bê;†;<ŠÅ ?~uì>d,?¿¦û>Tq?ÙBì;Î)M=ŠÅ ?~uì>Uâÿ>ü?}?mÎ÷; ¬p;ŠÅ ?~uì>®è>Ö¨ ?0‹d?mÎ÷;+(Ì=ŠÅ ?~uì>®è>Ö¨ ?üéx?! <¼3ž<ŠÅ ?~uì>F}Å>;A?(]?=/ <ß >ŠÅ ?~uì>âJÁ>™Z?íŽx?v<Òßž<ŠÅ ?~uì>t—¥>4-?ï ? yå>Ÿ=œ;mM=«/s?ÄýL?îL>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>à‹s?–7Ù;,=ŠÅ ?~uì>­?Å>Ûkb?¯Í½=øJ»›ê0?ãZ'?%J±>n}?Ü^Ý;ÕÿV;ŠÅ ?~uì>yv?®Õ>n}?Ü^Ý;ÕÿV;ŠÅ ?~uì>Í…"?Øóº>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>ez}?–7Ù;»÷R;ŠÅ ?~uì>­?Å>”ÓS?–7Ù;8è)>ŠÅ ?~uì>­?Å>Gý|?½¶<³ö{;ŠÅ ?~uì>šÑÖ>K—?Gý|?½¶<³ö{;ŠÅ ?~uì> ÓTL~?ëÙ;ŠÅ ?~uì>€?Pkinase PF00069.17Protein kinase domain yelleklGsGsfGkVykakkkktgkkvAvKilkkeeekskkektavrElkilkklsHpnivkllevfetkdelylvleyveggdlfdllkkegklseeeikkialqilegleylHsngiiHrDLKpeNiLldkkgevkiaDFGlakkleksseklttlvgtreYmAPEvllkakeytkkvDvWslGvilyelltgklpfsgeseedqleliekilkkkleedepkssskseelkdlikkllekdpakRltaeeilkhpwl EEEEEEEEEETTEEEEEEEETTTTEEEEEEEEEHHHCCCCCCHHHHHHHHHHHHHSSSSB--EEEEEEETTEEEEEEE--TS-BHHHHHHHHHST-HHHHHHHHHHHHHHHHHHHHTTEE-S--SGGGEEEETTTEEEE--GTT.E..EECSS-C-S--S-GGGS-HHHHCCS-CTHHHHHHHHHHHHHHHHHHSS-TTSSSHHCCTHHHHSSHHH......TTS.....HHHHHHHHHHT-SSGGGSTTHHHHHTSGGG6òV@ÿÿÿÿThu Jun 16 11:44:06 2011 $%&'()*+,-/0123456789:NOPQRSTUW[\]`cdefghijk~€‚…†‡ˆ‰Š‹Œ“”•˜™š›¬­®¯°´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÊÕÖרÙÚÛÜÝÞßàáâãåæçèéýþÿ !"#$%&'()*+,1278GHIJKLMNOPQRSTUVWXYZ[\]cdklmnpqwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÓÔÕÖרÙÚÛÜŽË-¹D‹+Á©Ù3?2w:Á©Ù3?B`§À©Ù3?š™ŒBš™ŒBš™ŒBš™ŒBffŒBffŒB!˜=½÷u™Œ=;È.humanchr1/239220001-239550000 CCAAAAATACGAAAAAGTAGCCAGGCATAATGGCACACATGTGTGGTCCCGCTGCTTGGG AGGCCGAGGTGGGAGGATCGCTTGAGCTCGGAAGGCAGAGATTGCAGTGAGCTGAAATCC CACCACTGCACTCCAGCATGGGTGACAAAGCAAGACTCTGTCTCACCAAAAAAAAAAAAA AAAAGAAGGAACTGGCAGAGTCCCAACTGACAGGTATATTTTCTGTTGACCAAAATACGG TTCTTACTGATATTTGATACTGACTCATAGTCACAACTGCCATATGAAAAGAGAGAGATC ATTTTTTTTTCCTGGCAATATGTGATGGTGGAAGATACTTAGTGTGGTGTCCTGATAAGA TAAGTAAGCAACAATGAGGAGGGAACCCCAGGGAGGGAGGACCATTGTTCCGAGAGAACA GCTAATCACAGACAACCTGTTGGCAGGACATCCTGTTCCCAAATGCCTTGCTTGGCAAGT AGGCCCAGCAGCAGGACCTCATTGTGCAGGTGGCCCCCTCCAGCATGATCCTATAAAACT TCCCTCCAGCCCCCGCCTCTTGGCGGACAGACTTCTCTCTGCTGCACTGCCCATTGCTTT CTTGCAATCTTTGTACTTTCCCTAATAAATCTGCCTTTCCTTACCCATGACTGTCTGTCT TGGTAAATTCTTTTACCTCCCACGACACCAGCCACAGCCAGTTGCACTCACAGCACTTAG GAAAATAAAAAAAATCAAGGCTGACACTCTGGATACCAATATGTAATGAAGTGTTCTTCT TACAAGAGCTTATGAGATAAATAGAAACGTAACAACAATTTTTATTAAGCAAGATATAAA AACTTCACCATAGGCTGATCCTGTTTTCATTCATGGAAGATAAATACTATCCCTCACTTA AGAGCTTTTTGTGTAGGAATTCTTCTTCCTTATTTTTTCACGAATAAAGATAGGGATGTC CTTAGCATCCAAAATCAGTCAAAAAAAAATTGACATTTCATGTCCTGGTTAGACTACTCT GGCAGCTTGCTGGAATGGTCACTTGCTTCTCCCAACTGGATCTCAAGTCCAGACCCCTTT GTTGTCGGCCCCCCTCCTGGCCACCCCCACCACAATCACTTAATAAGAAATACCAGCTGT AGAGCTCAGAACTGCTATGACAATTAAAGCTTCCCACCTTCATGAAAACTGTTGAAAATG GGGCAGAACAAAAAGTAGTGTGACAGAATTTCTCTATACTGTCTGATGCATTGCTTCCAA TGTAGGGAGACCTTTAATTGGTTCTCTGGCTTTTGGTTCCATCCTATTGTAAACAAAGAA TCAAAGTATAGTAAGGTTCAAAGAAGTAGGGAGTGCTGAATTTGGCAGATGGCACAAGAC ATGGTTAGAAAGAAAGCATCCTCAGAGGAGATGAGAATGATGCTGAGCCTTGGCAAATTG CAAGGAATGCGTAGTTAAGCAGAGCAACTTTTCACAGTCAGATTTAGAGTATAACTAACT CTGGAATGACGAGACACACAAAAAGATAAATGCTATTTATCACCACTGCTCACAATGAGG AATCAGTAAGCAGCCATAACAGATGCTGCGCTGCCCAGATCCCCTCCTTAGGACTGAGGT GCTCACTTGCCAGCTGCAAAGACTCGTGCCTGAGTCTCTCTCCAGGCAATGTTCTCAGGT CAAAAGGCAGCTGCCCTGCTGGAGGTTATAGCTCCATCCAGCGGCATGCAGAATCCATTG ATTAGCAGATGTGGGCATATGAAGACAATGTCTTGGCTCAAATTAGAACGGTTCTAAAAT TGCTGCGACCCTGGCTAGAATTACATTGCAGGTGAGCTTCTTCCTCCATCCAGTCCTGTT TCTCTCACTCCATTACAGTTGTGATTCCCAAGAGCACTTCACAATAAACCTCCAGCACAC AGTCTCCTTCTCTGAGTCTCTTTCTAGGAAAGCCTGACCTAAGACAACAGCCTCCCTATG GCAAAAATGTCCAAATTAATAGCTTCTTTATATAGGGGGCAAAACCACCAGCAACCAAAA CTTTTATTTAAAAAAATGACAATTGTATGACTAATCAGCGTACATTTAACTTCAGGATTG AAAATGTTGCATCCTGAGCTTAATTTCCTTGATTTTACTTTGAACACTCTTTGAGTTGTG TTTCTATTTTTAGACCACAGAATTTAAGATAAATGTGCATAATTTAGAGAGGTTTCAAAG AAAGGCAAGTCAAGTGATTAAATAATGAGAATAAAATTAGTATAAAAAGTGCCAGGAACA TTTGGTCTTTTGAAAGGAAGGGCAAGGGGGCCATTTTAATAACAGCCTTCACATACATGC CTACTTATTCAGATAGACGGTTGTGAGGTCAAGCTGGAGGGGCAGATAGGGATCCGATCA CTATAGACCCAGATTCCTGCGGTAGCTTCCTACATTATCTCCCAGCTTTCACCCTCCTGG CAACATCCAGAGTGATCCTTGAGAAACCATAACAAATCACATCGCTCTTCACCTCCAATC CACCTCTTCACTCTCCATCAGTCCTTCTTATGAACTACACACACTCTGTGATCAAGCCCT GGCTGCCTCTAGGGATTGTCTCCTCCCATTCACCACTACAAAACTTCTTCCTCGAAGGTG TCCAGCAGGCCAAGCCACGCTGGACTCAGGGATCTCCCCACGGCTGTGTTCTTCCCATAG TACCACAAACCCTCCACTCCATTCACTTATCTGCTCAATGGCACCTCCTGTGAAAGGATT TAAAGTAGCCCTCCTCGTGATGTTTTATTCCCTTACTTTGCTTTACAAGCCATCAGAGCA TTTATTACTTCTTGATATTCTAATTCTAATATGCTAACGTTATATTTTCTATATATACCA TTAAATATGGAGAGAATGGATAGATATAGATTTAGATAGCTGATACAGGTAAATATAGAC AGAGGTAAAAATATAGATAGAGACTCTTTCATTTAGTCCTACGTGCCCATCAAAATGTAA GCTCCGTAAGGGTAGGATCTTTGTCTCTTAGTTAACTCCTCTATGGTGGAGGAGATGTGA GACAACCAGAAATTTCTGTCTAAAAAAAAAAATCACACACTCGATCACACACTCGATAGG TGTTCAATCAATATTTGGTGACTGAATGAATGGATGAATGTGATCCCTTTAAATCTGTAT CCTCACTATACAAACTTCCTTAAATATCTATTAGGTAATTTAGCTAAACTTTTCTTACTC GCTCCAGTGTGGTGTGTGTTTGTCTTTTCTTCCTCCTTGACCTATAACTATTGACAGTTA TACAATATGGTGGTTCCACAGCCACCAGCCTCCTTTTCCTATTCTCTAGAAAGAACGAGG ATGAGCTATAAAATTCATCTAACCCTATCATCTTTTTAAGGGGTATAATATTAAGTGGAA ATTCTTTACAAATTTAAAGTTATATTCAATTTGTAAATAAGAATAATTATTATTGCCTGT AACTTTTGAACTTGGCCCATCTCGTTTCTGCCTTCTTGAAATTCGGTATTTTTTATTAGA GCTTTCAGAGTCAGCTTTTGATTTTATTGATCTTTTTTGTTTTGTTTTTATTTATGTTCT TGTCTTTTTAACTTACATTGTGTGTGTATTCTTATTTATGTTCTTGTCTTTTTAACTTAG ATTTTTGTATGTATTCTTTTCTTTATTTCTACCTCCTACAATGGAATACCCAGTTATTTT TTATATATATGATATATATATGGCATATATATGACATATATGTATGTCTTTCTTACTTAT ATTTTTAAGTCTTTACTTCTAACTTCTAGAATGGAATATATATAAACCAAATATTTGAAG CAGCCTGTGTATTATGGATAAATATTTCTCTTGGATAGACACCAGTAAGTTTTATATATA TATATATATATATATATATATATATATATATATATATATATACACACACACACTCACACA CACACACACACGATTAAAATTCTCTTGTTTTTAATACATGTGGGTATGACTATGCATTCT TCTGTAAATACTACTTTATCTCATAAATGTTAATGAATAAGAAGTTTATTGTTTTGGCTT TAAGTTCATTTTGATATCCACTCTAATTCATTAATTCTTCAGTCACATATTGTTTTAAAA TACATAAGGTGTTATTGTTTTTAATTTTGGTATGTATTTTAATCGTGGTGAGAGACTATT ATCTGCGTTATATCATGTATTTGACATTAGCTGAGACTTCCTCAGTGACCATCAATATAA TCAATTTTGAAAATGTCCAAAAAAAAAAAAAGGGGGGGTTCCCTCTCTTGGCTTTGGAGC CCCCCTCCCTCTGTCTCTGTTCAGGGGGGAGCGTCTTCCTTCTTTCTTCCCCCTTCTACC TTGCCCATTAAACTCTCTGCTCCTTAAAACCAAAAAAAAAAAAAAAAAAAGGAAATAAAA TGTCTTCTGGTTTCTTGAAAAGAAAATATCTGCATTTACATTGTGCAGTGTTCTGTGTAT TTTTAAGTTTTTTAATTATATTGTTCAATTCTATTACACACTTAATATTTTGTATTTGCT TGATCAGTTTCCAGTAGACTAATATTAAAATCAATATTATAATAGTAAGTACATCCTCAA GATCCTAAAGGATTATTTATTTTTAAAAATGTTTTATTTAGATAGTCCTTACTATGTTCC AGACATTCTTAGCACTTTGCACATATTAACTCACACAACGTCACAATTGTTGCATTTTCT TGGAGGATTTTTCCAATTGTTATTAAATACTTTCCCTATCACTTTGGATTAAAATTGTTG GAGTTTTTAAATAAGAGGCTTATAACATATAATTATTGTCTTAGCCATGATGCCTTTTTA CAGGTAGTTTTTAGCAGTAGTAGTTTTAGTGTGAAAGTCTGGATATTTCAGTCTCTTTTA CCTTGCCCTCATTCTTTTTTTTCCCCCTCATTCTTAAAGCATATTTTACCAGTGCATAGA TTTCTAAATTAGATATCTATTGTCTTTTGACGTCAAATCTACTATTACTGTCATTGCTGT GGCTTTGCAGACAACCTTTTTTTAGGTAGTTTTTAAGAAACTTTTTTCTTTATCCTTGAT ACTGTGAGATTTCACTGCATTGTGTCTAGGCGTGGGTTTATTTTAGTTACCTTGCACGAT GCTTGTATTAGTGAGCTATTGTTATGTAAAAACTCAAACTCCAAACTCAACAGTTTAAAA CACCGTCGTTCATTCATTCATGCGCATACATTCACAGGAAGTTTGGGGATCATCTGACCC AGTCAGGATTTGGCAAGGCATACCACGAAGCTGTAGCTTGGGGTCAGGAGTAACATTTCA CATCTTTCCACCTATGGACAAACCCAGACACATGGCCAATGCCAAAGTCCAGAGGTAGGA AAGTACACTCTCCCTCTAAGCAGAGAAACTACAAAGTCTGACAATAGGCAGGTTACAATA CGGGGGGCAAGAATTCATTCTGCCATACTCTTTGATTTCAGTCTGAAAACATATATATCT ACTCATTATCAAAAAACATTTAGTCTTCATCCTTTTTTTTTTTTTTAGATGAAGTCTCCC TCTTTTTGCCCGGGTTGGAGTGCAGCGGCACGATCTTGGCTCACTGTAACCTTTGCCTCC CAGGTTCAAGCGATTCTCCTGCCTCAGCCTCCTGAGTAGCTGGGATTACAGGTACGTGCC ACCATGCCCAGCTAATTTTTCTATTTTAGTAGAGACAGGGTTTCACCATGATGGCCAGGC TGCATCCTTTTGAATATTGTTTCAAACTATTCCCTCTATTTTCAGCTTTTGTAGCTTCTT TTAGATGTATATTTCAGACTATCAAAATGTCCTCAATGTCTCTATTTTATTTTTAATAAT TGTTCTATTGATTTTGCATCCTTTCTATACCTGACAAGACAATGAAATTCTGCTAAAGAT TTTCTTTTGCCTTTTTGGACTTCCTAAAATTTACATTTTATTTAAATTACGTAAATAATA AATAATATAATAACATATTTATTTTACAGAAATCTTATGATATATACAATTAAGTCTCCA TCAAATTTTTCCTAGCTCTACACTGACCTCTAAAAGTTAAATACCCACTCCAAAGATAAT CACTCTTATGTATTCAGCATATATTCTTTCTGATCTATCTGCTGGAATATATGTGTGTGT GTGTGTGTATATATATATATTTATTTATATACACACACGAACATAGAGGAATATGCATTT GTTTATGAGAACCTTTTTTTTCACATATGTGGCTATAATTTTCATGTTTTTAGGAGACGT TTAGGTTTTGTGGAGAGTGAAGAAAAATTTGGTCTAAAGGCTTGACGAAGCCCCATGCAA GTGAAGGGCTCTCTGCATTTTACACGTCATTTCCTTTGTGGTAAATCTGCTCTTCTGTAT TTCTGTAAATGTATCTTCTGCACTTTGTTTTTTCACTAAAAAATTTACATTGGCTATCTT TCCATTCCTAAAACAAAAATCTAGCCAACATAACTCATTTCAAATATTGCATATAAGTGG TTTTATCGGTATTAAATCATCATATTATAGCTCTTAACCAAATGTTTGAAGCAGCCTCTG GGTTATGGATAAGTAGTTCTCTGGGATAAACAGCAACGAGGCCAATGCTTTTATGAAAGA TATATATTTGTAACTGGAATATATACTGTGAAATTGTTCTCAAAAAAGCTGTTCTATTTT ATACACTTGCCAATAATTGATATTATTAATCATTTTGCCTAGCTTTAAAGCATTGTACTA ACTGGTACCTCTTAATGCTTTGAAGTCTATATTGATAAATTTAATTTAAAAGTGTGTTTT TCTTTGATAACATAAAGGAAACTGGAGAGGTGAGATGGAGAATAAAAATAAGACATATAT TATTTAATGAACTTTAAAAACAAAACCCTAAATGAGATAAGTCCCATTTCACTACTTCAA AAAAATATATAATGCAAAGGGAATACTTATACATACACTTGGGAATACTCTGGAATTATC TATGAATGCTGATGATACACATAAACCTAGTCTGCCCACAGTCTCAAGTCATTTGTAGTC CTAACATTCCACCTCATTTGGTACTTGCCCCAGTATTTTTTTCATTTTTAACAATAATTT TTATTAATTGTTGCACTTAAATAATCCAGATGGACTGGAGAAAACTCCACTTTGTATTTT CAGCTTCTCATATGCTCTTTTCCACCAGTATATGAGACACATTAGCAGAAAACAAAATTC TTATGTGAACACATGCTGAAATCTGAAAAAAAATAATAAGTGAGAACTAATCTCTAGTTC TCAACTCTTTCCAGATACACTATAGCTAATACCTCACTTTCAGTAACAGTATAAAGTGAA TTCACTGATAATAACCAGTGCAGCTAAGTCCTTCTGGTCTAGGGCAGTGGTCGGAGTGGT GTTTAATATCGGTGCCCTTGCAGCCACTTTGCTTACCAGCTAGTTCTCCCTGAACCAGTA CTGCAACCTGCAAGAGTCAAAAGCTTATAGGCAACCCATTGGTGAGGTCAGTGGGAAATG CAGGGAATGATAGTTAAGATAGAAGTGACACGTGTGGGAAATAGAGACTGGGACATCCCG CCATAGAGTTCTAAAAACAATTTCAATATTCTCGCTACAGTTCTTTTAGTATTTATCATA TGCCGTATATCTTCAACTATTTATTTTACGTATTTGATTGCTTGATATGTGGGACCAACC CCTTTCAAGAGAAATGACTCAATGTCAAAAGTTACGTATGAGCTGAGAGTAATATAAATA AAACATTAAGTCTGAAATTTCCATTTCATAGAACGTTTAGAGAAACTTTTTAAAAATATT TATGAATACTTACAATCTTCCTATGTGCTATAGTAACATTGCTGTCCACATTAAAAAAAC AATATGACATAACTCTGTTGAAGGAAACTCAACATCCACTTTAAAGTTAGTACATTTAAC AAGGCTGCCCTCAAAATGATTATTTAACACATAAAAATAAAGAAGATGCATTTACATGTA AACCATGTAAGTCTGTGAAGCTTGAATTTTTCATTTAGATCAAACGACTATTTCTTAAAT AAATTCTGCTTGCGTCCATGTTCTATTGTGAATTATTAAAAAGTGAAGTAATAACTGTTA AGGTATTAACTTCATTGGTAGAAAAACTTTATAGTTAAAAGATTGCTGGTTTTATCAATT TCATCAAATGCTTTGAATACAAATTGGTTAAGTTTATTCCAATAACATTGTTTTTACATT TTTAAAATTTTCATTCATGAAGTAGAGGAAAGATAAAATTATTTAGGAGTTCATTCTGAC AAAGGTGAAACATCCAACTTTACAATAAATATTTTCATAAGTTTATCAAAAAGTTTAACA CTGAATAATAGTAAAATTACTCATTTTGTGGTAATAATAAAAATATAAATTTTGATGGAA TACAGCATCACGGTAAACACGATTTTCTTGCTAATTCAACAAACCTGGGAAGCAGAAATG TACTTGGATTTGCAATGCATACAAAATTCATAATTGCATGTAAGCAAGTTATAATATCCC AATGGCTAAATAGAAACTCTGTTTGTCTTTTTTTTTTTTTTATCACACACACAATTTGAG TAACTAAACTACAACATTTTTATGATAAAGTTGATGTTGGAAACAAACCAAAAAATCATT TTTCAGCATGGCAATGTGCTCCACTCATTGGATTTTACAAATGTCTGAACATGTGAAGAA TTATTTCATAAATCAACTTAAACATGTGACAATTGTATTGAGCTTTTTTTTTGGTATGTG GGTACTCTAAAGATGAGTATCCTTTGTTTTTGCAAAACCAGTAAAAATATTTAATAAATT TTTTCTATAAATGTAGTACCAAAATGTTTGAAGTTTCTACTGAACCATTGAAAACAAAAT ACGTAAGCAGAAATATATGACAAAGTCAAGAGAGAAACTGAACAGATTAAACAAAGGACA TGCAACGTGTTATATGATTTCATTTCTCAATTTTATAATCCCTTTCTATAATATCTTGAC TTGCAGAGAAAATTTTTGTTGGAGTTTCTATGTTTAATAAAATAAATGGATATATTTACT AGAATGAAATGAAATTAGGAAGGCCTATGATTTTGCAGCATAAACGAAGCAATTTATTTT AATTGCTTTTTCCTAATTAAACTAAGAAAGGTATACATAGAAGGACAATATCTGTAAAAA TATTTAGCATACAGTATTAAAAATTTTCAATACACAATATTCTCCAGAGAGCAAAAGTTT CTCTGAGTGTAGAATTTATATCAATATCTGTGAAGATAATATTTTTCTCAATTATAGATG AGTCAAAAATTTTGAAATTTATTAACCCACAAGATCAAATTTCAAACTTAAAACAATTTT ATGAAAAAAAGTCCAAAAATAGTAAGACCAAGTTGAAAAAAATACATTTAATACACAAAT GGTGATGACTCAATTGATTAGTATAAGTTAATATCTCTAATACTTGATTAACTATTTCAT TTATCATAAGCCCATTTAAATGAGTGGACTTTGTCCTAATTGTCTTCAGTGTAGACAAAT GTTATTATATTTTAGACATAATTTGATCTCTGAAAACACTTTTAGGATAAGACTATTGAG TTGGCAAGCCAATATATTAATAATCAATTTATCAGTCAATATCTTAATTCAAGCTACTAT AACAGAGTACCATAGACTGGGTGGTTTATAAATAACAGATATTTATTTCTCACAGTTTTG GAGGCTGAAATTCCAAGATCAGGATATAGCATGGTTGGGTTCTAGTGAAGGCCTCTTCAC TCAGAAGACTACTGTCTTTTTGCTGTATCCTTACATGGTAGAAAGAAGTCAAGAGAGCTC TCTGAGTTCCTTTTTATAAGGGCATTAATCCCATTCATGAGAATTCCACCCTCATGACCT AAAAACTCCCCTATTCCCCACCTTCTAATAGCACCCCACTGGGGTTTAGGATTTCAACAT GTGAATTTTGGAGTCACAGACATTCACTCCAAATAAGTTAGTAAATACCAGTTTGATTTA CATAATGTCAAGTATTTGATAACGCCCTTTAACTCTCAAAATGTCCCTATGTGTACAATA ACTTACATGGTAAATTTGCCTATGATTGAGTAATTCCTTTCTTAGTTATTTACCCAGGGG ATTGCAGGCACAGCAACACTAAGAGACAGGTTAAAAAAATGTTCACAGCTATGTCATAAT AACTTAAAATTAGGAACAATCCAAATATCCAAACACAACAGAATGGATAAATAATATAGT TTAGTCTTAGCATTGACTGGTATGGAAATTAACAGGAAAAATGCAACTATGTGGATAAAT CACACATATATACCACTAAGGGAACGAGATTAATACAAAAAATATATAGTCTATGAAAGA AATATAAATGTCAAAATGAGACTACACTGTCACTATTATTCAAACATCTGTACACAGTGA AACTATATAAAAAAGAAAGAAAATACTGACCACAATTTCAAGATTGTTGTTACTTATAAG GAGAGAAAAGAGTCAGCAGTTCTGGGGCTCTGAAAGTATTCTATTTCTTGACTTTGATAA GGTTTAGACAATTGTTGGCCTCATTTTTTTTAAAAAAAGCCTACATTTGAGGTTCATTTT GTTTTTCCTGTATATGTGCCAAATTTTAATTTTTTAAAAAAAGTAGGTGAACAATCTGAA ATTAAAAGTTTTTATTCTAAGGCCTCTTTGTCATTTACTAGAGTAGTTGATACTTTTAAA ATGTAAAGCTGTTAAACAATTATAAATTATATTTATATCAAGGTGATTTTCCCAATCTAG TGAGCACATGTGAATATGTATGTATCTAATCTAGTGAGCATGTGTGAATATGTATGCATC TGTTGGGGGGAGGTTTATGTGTGTGCCTATGTGTTTGCTTTTTATGTCTGTGTAGTTGTA AGCATGTGTACATGTATTTAGGTGTGTGCATTTATTTGTGTGCCTGTCTGTGTGTGCATG TATGTTTTGTAGGAAGGTGAGGATACATTTTTTTTTGGTGTAGAAGATATGATCATCACA GAAATAATTAAAATGAGCAGGTTTTTGAAAATAAAAACCCCAAAACAGAAATAAAATTTC AAGTAAATGAAATAAAATGAATAAATATATTTTTTCATCAAGTTAGATGTTTCAAAACAC AGACTTCAATGTTAGCTTATTTCCAGCTTTTTGTTTTCTCAGTATGTGGTTCACGCAGCT ATAATGCTTTTGAGAACACAGAGCGCCAGTTGTGGGAAAAGAAGCTCTGTTCATTATCCT CAGGTTGTCTTCATTTCGTAATTCTTTTCACTACCTCTTTATGAGTATTATCACAAAACA AAAACAAGAAACACCTGCTGTATTGTACACATGATTTTCAATCAATTCATCAGCAGCTTC AGAGTAAAAGAAAGAAATCAAGCAAATTATTAGTCCACTTGGGAACTATGAGAACACATT TAAAGGATGTGAATATTTTCATTTCAAAGTAATTTTGTTTCTTTGCCTTTTGGAATCATC GGCACCAAATGCTTTTTGGCTTGCTGCTTACACTTTTCATCATCGCCTTTTAGATATTTA TTGGAAAAAGGCTCTGAATTTTGGGGGCTGCGAAATATGAAGATGCACACAAACACACCC CACATACAAAGATATAATGTTCATTATAATGTGACCATTAATTCTGCCATTCTTTCAAAT TCTGAATTCACTTCTTTAATCCTTTCAGCTTAAAATTTGATATTTTGATTCTTGGGTAGA AAAATTCACTTAAATATAACAAAGATTTATTGAACCCCTGTTATATAACATATTGGATAA ATGCTCTAGCTCTGAAGTTTACAGACCTGGTTTTGAATTTTAGCTCTACAAATAATTATG TCAGCTTTGGGCACATTGCTTAACTTCCATTCAATTCCATTTCCTCACCTGTAAAACAGT TACAGTGTCCTGAGATAAAACATTAGTAACCCAGAAACAAGCATAAAATCAAGAAAAATG AAATTATTATTAGAAAGGTAGTCATGTAACATTACTGAGCAATTGTCACATCCTCGACTT TGTATAGTAATGCAAACATTTGGTGAAAACTTTTGTGTTGCTTTCAACTTACATGAATTG AATGCCAATCAGAATATTTCTAGGATTACATCAAAATTAGTACATAAATTGTGATAAGCT GAGAAAATAACTTATTTTTTCACCAAAACAAGTTACCCACATTGTATTTTTGCATTGCTT AATGTATATATAAATGCAAGCCATATACCAATTACTAATAAATGCAATAGAATAGGACAA ATTCAAAGCTCTTCTCTCTCTCCAGTTCCAACAGGAAAAAGAAATCCATTTTTATTTTAT AACATTGGCTGAGTAAAAAAAAAAAAAGTGAATGAAGTAAAAAGATAGACCTTAATGTTT TAATATAACATAATTATGGAGTTCTATTTTTTAAAAAAATTCATAATGCATGGAGTTCAT TTTATAAATACATATTAATATCTATAGCATAGTAAAATTAAAATAGAACAAGTATTTATC TTGAGAATTATGCTGTCATATTCAAAGTCCATATTGAATTAGAAAATGTTAAGCTCAATC TTTCTAGCCATGGAGATTGATAGGTCATCAGATCATCTAGTGTAATCATCTATATGATCA GCACCTCTGTTGCCTCGTTCAGCACAACAGATCAACTAGAAGTTACTAGTTTAGGTAACA GGTAAAGGGATCTCACTGGAGGAGGACAATCACAACCAAACAAATAAATGAAGACTGTGA TGAACCAACCAACACTGACAGCAATCAGTGAAAGTCTGGGATAATTCCCCAAATTCTGAA TCCTGGTGTTTTTCTTAGTAAATTGATGTAGTAATTATTGTGGTGACTATGTGGTCTGCG TTTTTACTTTTAGTCCAAATTTGCTTCTTTCAGGGAAGTTATGGGCTTGCTACTCTGGAC TATGAATACTGAGGCCCTCATGCAGATACAAAGGAATGTCCTGTTATAGTCTGTGATATG GTTTGTGGACAGCCTTGCTTGTGGGTGCAGGGAATTAAGAGCACACAAGTACTAATGGAA TAAGAAGGTAAGCATGATATACTCTGGAGTTCAATATTCTAACCTTCTTCTTGAAAACAA AATTAGATATAAAAGTGGCAGCAACTCTGGTAAAGTCATGGGAAAAGAGTACTGCCAGTG ACCCTGTTATTCCAGCAGGATCTCATAGAGCATGCCATTAACCTCAGTCCACAAGAGAGT ATATTATACAAGGAAGCAATTAAAAATGGCTGGTGTCTAATCTCTTGTGACTTTTGGGTG CTGGATTTTCCATAAAACAAAGGCACATCAATTTCACTGAGGAAAACTCCACCCTTCAGG GACTTAGTTTGGACTTGCTCCCATTGATGTGTGGAAGTGAAAAAGTCAGCTCTTTGTTCT TGGTGTTTATTGGTTTATCACAGTCATCATTCTCTTATTCAGCAAACGTTTATGCAGAAA TGTCTATACATAAGGCTTTGATTTAGGTGTTCAACTACAAGTGAAATAGACATTTTCTTC TTTGTTAGAGCTTATTGTCTAGAGGAATATGGAGATAACATACAGGTAAATGATCAAACA AAAATATGAAATAACCTGAGAATGATGCTATGATACAATCAAATTAGAAGCTAAGCAAAT AATTAGAAGGAAAGAACACATGTGAACAGCTTAGACAGGTCGGAGCTCTCGGAGGAGTTG GAATTTGAAGACCTTGAAGGAGCTAGCCATGCAATGTGCAGGGAGAAGGAAGAGAGGCAG GCTCAGGGGCTCTCATGGTGTCCTATCAACTTTATGGTGATGTTCACTAAATCTATATAA ATTTTCTTGACATCACCAAAGTCTTCAGGTTAACAATATGAACTGTGTTATCCAATTAAT TATTTTACCATCATCACAAATAAATATACAAAACTAAATCATTATGTCATCATCCCATGC TCGAGAGTGCTCCACCTCAAAACTCAAATTTTCTATGACTAGCTGTGTTTTATTTATTAT TCCAGATAGTATATTTCATAAACATACATTGAAAGACACTATTTAGCTTATAAAACAGAA CATTAGCAATATTGTTGATGCCCTTTGAGTGCTTCTCCCCAATTTAATTGTCCTTTCTAC CCACCGAAGCTATCCATTACTTTGTGCTCTGTACTTGTCATTTTTTTCATTGTTGTTTGT CTCCCTAGTTTGTATCCTTAAATGAGATATTGTTTAGTTTGGTTTGTATTCAAAGCTTGG TAAATACAAATGTATAGATTCTCCACTGACTTGCTTTATTTTATTGAATTTTATTCAATA TTATGCTTCTGAGGGTCTGTTAACTTCTGTAGCTATATTTCATTCAATTTCACTGTTGTG CACAGTTCCATTTTAAGAATTTGCCCAAATGGGTATATCTATTTTTCCATTAACAGACAG TAGGTGGTTTCCAATTTTTTCTTACAATCAACAATATTACTATGTTCATATTCTTCTTGT GAATATGAAAATGGTTTCCAGAGGGTATATATTTAGTAGCTAAATTTCTAGGTCTGTGTT AGATCATGTGCAAATTACTAGGTAATATCATCAGGCTTTTCAAAAAGAATGTACCAATCT ACATTCCCACAGGCAGATTTCAAATCGTCTACTATTCCACATACCTATCATTTTCATATT TTTAAGTTTCTTTCAATATATTAGATATAAACAGGTATCTCATTTTTATTTTAAGTTTGC ATTTCTCTGATGACTCTTGATATTGTGAGCATTTTCATTTGTTTATGAGTCATTGCTATG TCTTCTATGAAATGTCTGAGCATGTCTTCCGCTATTTCATCTTCTAGACTTATTGTCACT TCCTTATTGAGTTTTAAAAGTTTATATATTCTTCATATGATTTAATTTTTGAACAGAAAT TTTACTTTGAATGTAACTAGATTTATAAATACTTCCTTTAAAAGTTTTTGCTACTTTGTT TGGTTTAGGAAATCTCCATAACTCAGTTAATTTTCTGCTGAAACTTTGAAATTTTGCCTT TCACATTTGTCTTTGACTTAGGCAAATTACTCCTTTTTGTGTATTGTGTGGGAGAATCCT ATTAAATATATCTTGTCAGAACGACCTGTGGATCAGCTGTGGCTGTGGCAACCACTGCTT GTGGAAAGTGGAGGAAAGAGTATGAAGGGTTTTGTATTGTGGTTTGAGTATCAGCTTAGT CACAGTAGACTAGAACATCAGGTAAATTGCTAAGGTTTTTGACTCGAATCCCTAGCTCTC AGACAGCATCTCTGGACACATACAGGGCCTGGGGAATCTCACTCCCCTTGAAGGGAAGGA ACTTAGGCAAAGTCCAGTGCTGTGCAGGTTTCAGGTTTGACCCAGCAGAGTCCCAGTGGT GATGGCCACAGGGGTGCTTGCATCACCACACACTTAGTTCCAGGTGGCCCAGCACAGAGA GAGAAACTCCATTTGTTTGGGAGAAAGCAACAGAAAGAACAAAAGTCTCTGCTTGGTAGT CATGAGAATTATTCTGGATCTTACACAAGATCACCAAGGTGGTACTTCTACAAGTCTGCA AAACATATACTTATTGGGTTTGCAGCTTAAGTCTCTTTGAATACCCACAAAGCCTTCCCA GGAAGGACAGGCACAAACAAGCTCAGACTGTGAAGACTACAACAAATACCTAACTCATCA ATGCCCAGACACAGACAAACATCTACAAGCATCAACACCATTCACAAAAACATGGCCTTG CCAAATGAAGTAAATAATGCAGCATGGTCCAATCCTAGAGAAACAGAGATATATGATGTA TCAGACAGAGAATTCAAAATAGCTGTTTTGAGAAAATTCAAAGAAATTTAAGATAACACA GAAGAAATTCACAATTCTGTCAGAAAAATTTAACAAAAAGATTGAAATAATTTAAAAGAA TCACACATTCTAGAACTGAAAATTGCAATTGACATGCTGAAGAATGCATCAGAATCTCTT AATAGAGAATTGATCAAGAAAAAAAATTAGCGTGTTTTAAGACAGACTATTTGAAAATAC CATTCAGATGAGACAAAATAAAATAATAAAAACAATGAAGCACACCTACAAGATCTAGAA AATAGCCTCAAAGGGGTTAATCTAACAGCTCTTGGACATAAAGAGGAGGTAACAAAAATA TAGAGGTAGAAAGCTTATTCAAAGGAATAATATCAGAGAACTTCCTAAACCTAGAGAAAG ATATCCACATTCAAGTGCCAGAAGGTTATAGAATACCAAACAGATTTAACCCAAAGAAGA CTACCTCAAGGCATTTAATAATTAAACTCCCAATGGTCAAAGATAAAGAAAGGACCCTAA ACACAGCAAGAAAAAAGAAACAAATAACATACAGTGGAGTTCCAATATGTCTGGCAGCAG ACTTTTCAGGGAAACTTTACAGGCCAGCAGGCTAGGAGACAGTGGTGTGACATATTTAAT GTGCTGAAGGAAAAAAACTTTTACCCTAGAATCATATATCTGATAAAATATCTCTTAAGT ATGAAGAAATAAAGACTTTCCTAGAGAAGCAAAAGCTGAGGGATTTAATCAATCCGAGAC CTTTTCTACAAGAAATGCTAAAGCGAGTTCTTCGATCTGAAAGAAAAAGATAATAGTGAG CTATAAGAAATCATGGGAACGTATACAACTGACTGGTAATAGTAAGCACACAAAAAAACA CAGACTAATATAACACTCTTCTTGTGGTGTGTAAACTATTCTTAAGTAGAAAAACTAAAC TATGAACCAATCTAAAATGATAACTACAACAACTTTTTAAAATACAGACAGTACAATAAG ACATACAGAGAAACAACAAAAAGTTAAAAAGTAGGAAGATAAAGATAAAGTGTGGAGTTT TTATTAGTTTTATTTCTGCATATCAGTTTGTTTATGCAATTAGTGGTAAGTTGTCATCAG TTTAAAATAATGGGTTGTATTTGCAACCCTCATGGAAAACTCAAATCAAAAAACATACAA CAGATATACAAAAAATAAAAAACAAGAAACTAAATTATATCACCAGAGAAAATCACCTTC ACCAAAAGGAAGACAGGAAGAAAGGAAAGAAGGAAGAGAAGGTTGCAAAATAACCAGAAA ACAAATAATGAATGAAAGGAGTAAATCTGTATTTATCACTAATAACATTAAAAGTAAATG GAATAAACTCTCCGATAAAAATACATAGAATGGCTGAGTGGATAAAAATAAACAAGACCC ATTGATCTATTGCCCGCACGAAATGCAGTCCACCTATAAACATGCACATAGACTAAAAAT AAAGGGATAGAAAAAGATATTCCATGCCAATGGAAACCAAAAGACAGCAGAAGTAGCTAT TCTTATATCAGACAAAATAGACTTCAAGACAAAAACTGTAAGAGACAAAGAAGTTCCTTA TATAATGATAAAGTGGTCAATTCAGCAAGAGATATAATGATTGTTTATATATGCACCCAA TACTGGAACATCCAAATATATAAAGCAAATATTGTTAGAGCTAAAAAGAGATAGACACCA ATACAATAATAGCTGTAGACTGCAACACCTCACCTTAAGCATTGGACAGACCTCCCAGAC AGAAAATTAACAAACATCAGATTTAATCTGCACTACTGAACAAATGGACCTAATAGATAT TTACAGAACATTTCATTCAATGGTAGAGAATACACATTTTTCTCCTCAGCACATGGAGCA TTCTCAAGGACAGACCATATGTTATGTCAAAAAACAAGTCTTAAAACATTCAAAAAATGA AACAATATCAAGCATCTTCTCTGGCCACAATAGACTATAACTAGAAATCAATAACAAGAG GAATTTTGGAAACTATACACATGGGAACTTAAAAATATGCTCCTGAATGACCAGTTGATC ACAGAAGAAATTAAGAAGGAAATTGAAACTTTTCTTAAAACAATGATAATGGAAACACAG CCTACCAAAACCTCTGGGATACAGCAAAAGCAGTACTAATAGGGGAGTTTAGAGCTGTAA GGGCCTACATCAGAAAAAAAGAAAAACTTTAAATAAATAACCTAATGATGCATCTTAAAG AACTGGAAAAGCAAGAGCAAACCAAATCCAAAATTAATAGAAGAAATAAAAAACATGAGA GTAGAAATAAATAAGTTTGAAATAAATAAAACAATCCAAAAGATCAATGAAACAAAAAGT TTGTTTTTCAAAAAGATAAACAAAACTGAAAAACCATTAGCCAGACTAACAAAGAAAAAA AAAAGAGAGAAGACCCAAATAAATAAAATCAGAGGTGAAAAGGAGACATTACAGTTGATA CTGCAGAAATTCAAAGGATAATTAGTGGCTACTATGAGCAACTATATGCCAATGAATTGG AAATATCAAAAAGGAATGGATAAATTTCCAGATGCATACAACATACCAAGACTGAACCAG GAAAAAATCCAAAACCTGAACATACCGATAACAAATAGTGAGATAGACACTCATAAAACA TCTACCGGTAAAAAAAAAGCATGGGAACTGATGGTTTCACTGCTGAATTCTACCAAACCT TAAAAGAAGAATTAATACCAATCCCACTCAAATTGTTCCAATACAGCAGGAAGAATTACT TTCAAACTCATTCTATGAGGCCAGTGTTACCCTGATACCAAAACCAGACAAAAACACATC AAAAAAAGAAAACTACAGGTCAATATCCCTGATGAATATTGATGTAAAAATCCTCAACAA AATACTAGCATATCAGATTCAACAACACATTAGAAGGATCATTAGTCATGACCAAGTGGG ATTTATCCCTGGGATGCAAGAATGGTTCAAAATATGCAAATCAATATCATACATCATATC AACAGAATGAAGGACAAAAACCATATGATTATTTTAATCGATTCTGAAAAAGCATTCGAT AATGTTCAATATCTCTCCATGGTCAAAACCTAAGAAAACTGAAGATAGAAGGAACATACC TCAAAATAATAAAAGCCACATATAACAAACCCACAGCTAGTATCATACTGAATGGGGAAG AACTGAAAGCATTTCCTCTAAGATCTGGAACACAATGAGGATGCCAACTTTTACCACTGT TATTCAACATAGTACTGGAAGTTCTAAGAGAGCAATCAGATAAGAGAAAGATATAAAGGG CATCCAAAATTGGAAAACAGAAATCAAATTATCCTGTTTGCAGATAATATTATCTTACAT TTGCAAAATCCTAAAGACTACCAAAAAACTATGAGAACTTATAAACAAATTCAGTAAAGT TGCAGGATACAAAGTTCACAAGAATTAGTAGCATTTCTATATGCCAACAGTGAATAGGAA AAAGAAATCACAAAAGTAATCCTATTTACAATAGACACAAAATTAAATGCCTAGGAATTA ACCAAAAAAGTGAAAGATCTCTACAATGAAAACTATAAAACATTAATAAAATAAATTGAA GAGGACCCCAAAAAATGGAAAGGTATTCAATGTTCACGAATTGGAAGAAGCAAAAATTGT TAAAATGCTCATACTAGCCAAAGCAACCCACAAGTTCAATGCAATCCGTATCAAAATACC AATGACATTCTTCACAGAAATAGAAAAAAAATTCTAAAATTTATATAGAATTACAACAAG ACTTGGAATAGTAAAAACTATTCTGAACAAAAAGAGCAAAACTGGAGGAACCACACTACC AGACTTCAAATTATACTACAGAGCTATAATAATTAAAACAGCATGGTACTGGCATATAAA TAGACACACTGACCAATGAAACAGAATATAAAACCGAAAAGCAAATTCACACACCCACTG TGAACTCATTTGCAACAAGAGTGCCAATAACATACCCTGGGGAAAAGACATTCTCTTCAA TAAATGGTGCTGGGAAAACTGGATATCGATATGCAGAAGAAAGAAATTAGATCCCTATCT CTCCCTTGTACAAAAATTAAATCCAAATGGGTTAAAGACTTAAGCCTAGGACCTCAAACT ATGAAACTGCTACAAGAAAACATTGAGGAATCTCTCCACAACATTGATCTGGGCAAAATT TTCTTGAGTAATATCCCACAAGCAAAGGCAACCAAAGCAAAAATGGACAAAGAAGATCAC ATCCAGTTAACAAGCTTCTGCAGAGCAAAGGAAATAATCAACAAAGTGAAGAGACAACCC ACCAAATGGGAGAAAATATTTGAAAACTATCTGTCTGACAAGGAACTAATAACCAGAATA TTTAAGAAGCTCAAACAACTCTATAGGAAAAAAAGCTATTAATTCAATTTAAAAATGGGC AAGATTTGAATGGATATTCTCAAAAGAAAACACACAAATGGCAAACAGGCATATGAAAAA GTGCTCAACATCACTGATCATCACAGAAATGCAAATCAAAACTACAATGAGACATCATCT CACTCCAGTTAAAATGGTTTGTATCCAAAAGACAGGCAACAACAAATTCTGGCAAGAATG TGGAGAAAAGGGAATCCTCATAAACCTCTGATGAGAATGCAAATTAATATATCCGCTATG CAGAAGACTTTGGAGGTTCCTCAAAAAACTAAAAATAGAACTACCATATGATCCAGCAAT CCCACCGCTGGGTATATACCCAAAAGAAGGGAAAGAAATATATTGAAGAGATATCTGCAC TCCCATGTTTGTTGCAGCACCTTTCCAATAGCCAAGATTTGGAAGCAACCTAGTTGTCAA TCAACAGATAAATGGATGAAGAAAATATAGTACTTATACACAGAATACTATTGAGCCATA AAAGAGAATGAGATTTAGTCATTTGCAACAACATAGATAGAACTGGAGGTTATTCTGTTA AGTGACATAAGCCAGGCATAGAAAGACAAACATCACATGTTCTCACTTATTTGTGGAATC TGAAAATCCAAACAATTGAACTCATGGTGATAGAGAATAGAAGGATGGTTAACAGAGGCT GAGAATTGTGGTGGTGGTAGGGGTGGATTGGGGATCATTAATAGGTGTAAAAAAATTAGG AAGAATAAATAAGAACTAGTATTTGCTAGCACAGCAAGGGACCATGATTAATAATAATTG TACATTTTAAAACTAACTAAAAGAGTATGATTGGATTATTTGTAACACAAAGACAGGATA AATGCTTGAGGGGATGAATACTCAATGTTCCATGATGTGACTATTACACATTGCATGCCT GTACAAAAATACCTCATGTATTCCATTAATATATCCATCTATGTATCCACAAATATTTTT GAATCACATTTTCACATAAATACATAAATTTTTATCTATAAATTAAACAGAAATTTATAA AACATATTAAAAAAATGGCAGTGTTCCAAAAAAAATTCTGTCAGCTAGATAATTATTATT GAGCAGTATGCCCCTTCACACTGGTCAGCAATACCATCCCATTTACATGCCACAGTCCAA CATTCGTCTGGGTCTGACCTTGGGCTTTTTTTTTTCTGTCTTATTGTCCACTTTTTCTAC TACGTAATCAAAAGAACACTGCCTCAGTTGCTGCATTTTATATTAACTTTTACACCAAAT ACAGTCTCATCTATGTTTTTGTGTACATTTTTAAATGAGCTTTTCAAGTTAGAAAAAAAC AGTGTTTGCATTCTGATTGGGATATTTCAGACTCTGAGATTTTCAGGAAATTTGACATTA TTACAGTTAATGAACTTTGTGTCTCTCTCCAGTCAATTTAGGTCATGTTTAATATCTTCA ACAAGGTTTTATCATTTTCTCCATAAGAACTTTGCCTATCTTCATTATGCATATTTAGAG ATACTTATGATCATTGATATTGTCATGCAAAGTAGCTTTTTTATTTAATAATGTCCCCAT GCTTTTAACAGCATTCAGATATACCATTTGGTGTTTCAGTATTTTATTTTGCTGTTCATG TTTTTATTCTGCTTTAATATAAAATACACTTCAAAGTATACCATTTTAATATGTGACAGA AAACATTTATTTTAAACATGTTCTCAAAATCACTCAAAATCCTAAAACAGGAGCAACATG GAGACTCTAGGCTTTTTCTCTGAGTTAATTATGCATTTGCAGGAGATCTTCTCTCATAGA CCTCTACATTTTTCCCTCCGAATTTGTTTTTTTGGCTTAAGCAATAGAAATCTATTTCTC ACACTTCTGGAGGCTGGGAAGTCCAAGATCAAAGCGCTGGCCAATTTGCCTGAAGGCCTT CTTCCTGACTTGCAGAGAGTCAGTCTCCTTCTCCCCATGTTCTCATGTGGCAGAGAGATC TGTCTCTCTTCCTCTTTTTTTTTTTTTTTTGTGTGTTTTTAGTAGAGATGGGGTTTCACC GTGTTGGCAAGACTGGTCTAAAACTACTGACCTCCAGTGATCCTCCTGCCTTGGCCTCCC AAAGTGATTGGATATCTTTCTCTTTTTTTAAAAAAAAAATTTTATTTCCATAGGTTTTTG GGGAACAGGTGGTATTTCATTACGTAAGTTCTTTAGTGGTGATTTGTGAGATCGTGGTAC ACTCATCACCTGAATAGTATACATTGAACCCATTTCATAGTCTTTTATCCCTTAGCCGCT CCCCATGCTTTCCCCTGAGTCCCCAAAGTCCACTGTGTCATTCTTATGCCTTTGCATCCT TATAGCTTAGCTCCTGCTTACCACTGAGAACATACGATGTTTGGTTTTCCATTCCTGAGT TACTTCACTTAGGTTAATAGTCTCCAATCCCATCCAGCGTGCTGCAAATTAATTAATTTC TTTTTATGGCTGAGTAGTATTCGATCATATATCACAGCTTCTTTATCCACTCATTGATTG ATGGGCATTTGGGTTGGTTCCATGTTTTTGCTATCGCGAATCGTGCTGCTATAACCATGT GTGTGCAAATATCTTTTTTCTATAATGACTTCTTTTCCTCTGGGTACATACCCAATAGAG GGATTGCTGGATCAAATGGTAGGTCTACTTTCAGTTCTTTAAGGAATCTACACACTATTT CCCATAGTGGTTGTACTAGTTTACATTCCCACCAGCAGTGTAGAAGTCTTCTCTTTTCAC CACATCCATGCCAAAATCTATTATTTTTTTATTATGGCCATTCTTGCAGGAGTAAGGTGG TATCACATTGTGGTTTTGATTTGCATTTCCCTGATCTTTAGTGATGCTAAGCATTTTTTC ATATGTTTGTTGGCCATTTGTATATCCTCTTTTGCTTATTGTCTATTCATGTCCTTAGCC CACTTTTTGATGGGATATTTTTTTCTTGCTAATTTGTTTGAGTACGTTGTAGATTCTGGA TATCAGTCGTTTGTCAGATGTATAGATTGTGAAGATTTTATCCCACTCTGTGGGTTGTCT GTTTACTCTGCTGTTTCTTTTGCTGTGTAGAAACTCTTTAGTTTAATTAAGTTCCAGCTA TTTATATTTGTTTTTATTGCACTTGCTTTTGGGTTCTTCATCATGAAATCCTTGCCTAAG CCAATGACTAGAAGGATTTTTCTGATGTTATCTTCTAGAATTTTTATAGCTTCATGTCTT AGATTTAAGTCTTTGATCCATCTTGAGTTGATTTTTATATAAGGTGAGAGATGAGGATCC AGTTTCATTCTCCTACTTGTTTGCCAATTATCTCAGCACCATTTGTTGAATAGGGTGCCC TTTCCCCACTTTATGTTTTTGTTTGCTTTGTTGAAGATCAGTTGGCTATAAGTATTTGAC TTTATTTCTGGGTTATCTATTCTGTTTCATTGGTCTATGTGGCTATTTTTATACTAGTAC CATGTTGTTTTGGTGACTATGGCCTTATAGCATAGTTTGAAATCAGGTAATGTGATGCTT CCAGATTTGTTCTTTGTGCTTAGTCTTGTTTTGGCTGTGTGGGCTCTTTTTTGGTTCTAT ATGAGTTTTAGGATTTTTTTTTCTAGTTCTGTGAAGAATGATGGTGGTATCTTGATGAGA ATTGCATGGAATTTGTAGACTGCTTTTGGCAGTATGCTTATTTTCACAGTATTGATTCTA CCCATCTATGAGCATCAGATGTGTTTCCATTTGTTTGTGTCATCTATGATTTCTTTCAGC AATGTTCTGTAGTTTTCTTTGTAGAGGTCTTTCACCTCCTTGGTTAGATATATTTCTAAG TATTTTATTTTATTTTATTTTTTGCTGCTATTAGAAAAGGAGTTGAGTTCTTGATTTGAT TCTCAGCTTGGTTGCTGTTAGTGTAAAGCAGAGCTACTGATTTGCATATATTAATTTTGT ATCCTGAAACTTTGCTGGATTCATTTATCAGTTCTAGGAGCTTTTTGGAGGAGTCTTTAG GGTTTACCAGGTATAGAATTATATTATCCGCAAACAGCGACAGTTTGTCTCCCTCTTTAC CAATCCGATTGGTCTGCCTATGACTTCCAGTACTTCACTGAATAGAACTGGTGACAGTGG GCATGTCTTGTTCCAGTTCTCAAAGGGAATGCTTTCAACTTTTCCCCATTCAGTATTATG TTGGCTGTGGGTTCGCCATAGATGGCTTTTATTGCCTTGAGGTATGTCTCTTGTATTCCA ATTTTACTGAGAGTTTTCATCATAAATGGATGCTGGATTTTGTTGAATGTTTTTTCTGTG TCTATTGAGATGATCATGTGATTTTTGTTTTTAATTGTGTTTATGTGGTGTATCACATTT ATTGACTTGGATATGTTAAACTACCCCTGCATCCCTGGTATGAAACCCACTTGATCATAG TGGATTATTTTTTTTTGATACGTTGTTAGATTTGGTTAGCTAGCATTTTGTTAAGGAATT TTTCACCTATGTTCATCAGGGATATTGGTCTGTAGTTTTCATTTTTGGTTATGTCCTTTC CTGGTTTTGGTATTAGGGTGATACTGGCTTCATAGAATGACTTAGGGAGGATCCCCTCTT TCTCTATCTTGTGTAATAGTGTCAATAAGATTGGTACCAATTCTTCTTCGAATGTCTGGT AGAATTCAGCTGTGAATCTGTCTGATCTTGGACTTTTTTTGTTTTTGTTGTTGGTAATCT TTTAACTACCATTTCAATCTCACCACTTGTTATTGGTCTGTTTAGGGTATCTAATTCTTT CTGATTTAAGATAGGAAGGTTTTATCTTTCCAGGAATTTATCCATCTCCTCTAGGTTTTC TAGTTTATGTGCGTAAAGGTGTTCATAGTAGCCTTGAATGATCTTTTATATTTCTATGGT GTCACATAATATTTTCTGTTTCATTTGTAATTGAGCTGATTTGGATTTTCTCTCTTCTGT GCTTGGTTAATCTTGCCAATGGTCAATCCTTATTTATCTTTTCAAAGAACCAGCTTTCTG TTTCATTTATCTTTCGCATTTTTTTGTTTCAATTTCATTAGTCCTGACCTGATCTTGGTT ATTTCCTTTCTTTTGCTGGGTTTGGGTTTGGTTTGTTCTTGTTTCTCTACTTCCTTGAGG TGTGACCTTAGATTATCTATTTGTGCTTTTTTATACTTTCTGATGTCGGCATTTAGGGCT ATAAAATTTCCTCTTAGCACTGCCTTTGCTGTGTCCCAGATATTTTGATAGGTTGTGTCA CTATTGTCTTTCAGTTCAAAGAATTTTTTAATTGACATCTTGATTTCATTGTTGACCCAA TGATCATTCAGGAGCAGGTTATTTAATCTACATATATTTGCATGGTTTTGAAGGTTCCTT TTGGCATTGATTTCCAGTTTTATTCCACTGTGGTCTGAAAGAGTACTTGATATAATTTCA GTTTTCTTAAATGTATTGAGACTTGTTTTGTGGCCTATCATATAGGCTGTCTTGGAGAAA ATTCCATGCACTGATGAGTAGAATGTATATTCTGCAGTTGTTGGGTAGAATGCTCTGTAA ATATCTAGTAAGTCCATTTGTTCCAGGGCATAGTTTAAATCGATTGTTTCTTTGTTGACT TTCTGTCTTGATGATCGGTCTAGTGCTATCAGTGGAGGATTGGAGTCCCCCACTATTATT ATGTTGCTGTTCATCTCATTTCTTAGGTCTAGTAGTAATTGTTTTATAAATTTTGGAGCT CCAGACTTAGGTGCATATATAGTTAGGATTGTGATATTTTCCTGTTGGACAAGGACATTT ATCATTATATAATGTCCCTCTCAGTCTTTTTTAACTGCTGTTGCTTTATAGTTTATCTGT TATCATAGAATATCTTTTTCCACCCATTTACCTTAAGTTTATGTGAGTCCTTATGTGTTA GTTGAGTCTCTTGAAGCAGTGGATAGTTGGTTGATGAATTCTTATCCATTCTGCAATTCT GTGCCTTTTAAGTGGAGCATTAAGGCCATCTACATTCAATATTGAGCACTGAGATGTTAG GTACTATTCCATTCATTGTGCTATTTGTTGCCTGTATACCTTGTTTGTTTTTTATTTATT TTTGTTTTATAGGTCCTGTGAGATTTATGCTTTAAAGAGGTTCTGTTTTGATGTGTTTTC AGGATTTGTTTCAAGATTTGGATCTCCTTTTAGCAGTTCTTGTAATGCTTGTAATGCAGT TCTTGTAATGGTCGCGGTGAATTCTCTCAGTATTTCTCCGAAAAAGACTATCTTTCCTTC ATTTATGAAGCTTAGTTTTGCTGGATACAAAATTCTTGGCTGATAATTGCTTTGTTTAAG GAGGCTGAAGATAGGGATCCAATCCCTTCTAGATTGTCAGGTTTCTGCTGAAAAATCTGC TGTTGATCTGATAGGTTTGTCTTTTTTTTTTTTTTTTTTTTTTAGGTTTTATCAAGTTAC CTGGTGCTTTTGCCTCACAATTCTTAAGATTCTTTCCTTTGTCTTAACTTTAGATAACTT GGTGAAATGTGCCTAGGTGATTATCTTTTTGCAATGAATTTCCCAGGTGTTCTTTGAGCT TCTTGAATTTGGAAGTCCAGGTCTCTAGCAAGGCCAAGGAAGTTTTCCTCGAATGTTCCC TCAAACACGTTTTCCAAACTTTTAGATCTCTCTTCTTCCTCAGGAACACCAATTATTCTT AGGTTTGGTCATTTAACATAATCCCAAACTTCCCTGATACTTTGCTCATTTTTTCTTATT TTTTTTATTTGTCTTTGTCAGATTGGGTTAATTTAAAAACCTTGTCTTCGAGCTCTAAAG TTCTTTCTTCTGCATGTTCAATTCTATTGCTGAGACTTTCCAGAACACTTTGCATTTCTC TAAGTGCATCCATCATTTCCTGAAATTTTGATTGTTTTTATTTATGCTACCTATTTCACT GAAGATTTCTCCCCTCATTTCTTGTATCATTTTTTTGATTTCCTTAACTTGGACATCATC TTTCTTTGTGCCTTCTTGATTAGCTTAATAACTGACCTTCTGAATTATTTTTCAGGTAAA TCAAAGATTTCTTTTTAGTTTGGATCCATTGCTGGTGAGCTAGTGTGATTTTTTGGGTGT GTCAAAGAACTGTATTTTGTCATATTACCAGAATTCTTTTTCTGGTTCCTTCTCATTTGG GTAGGCTATGCCAGAGGGAAGGTCTACGGCTTAAGGCTGCTATTTGGATTCTCTTGTCCC ATAGGGTGTTCCCTTGATGTAGTACTCGCACCCTTTTCCTAAGGATGTGGCTTCTTGAGA GTGGAGCTGTAGAGATTGTTATCTCTTTTCTGGATCTAGCCACCCAATAGGTCTACCAGG CTCTAGGCTGGTACTGGGGGTTGTCTGTACAGTCCTGTGATGTGAACCATCTCCAGGTCT CTCAGCCCAGGATACCAGCACCTGCTCTGGCGTAGGTTGCAAGGGGGTGAATTGTACTCT GTGAGGGTCCTTAGTTTTGGTTGTTTAATGCACTATTTTTGTGCTGGTTGGCCTCCTGCC AGGAGGTGGCGCTTTCAAGAGCCATCTGTTGTGGTAGTGTAGGGATGATCAGGCAGTGTG TTGGGGCCCTAGAACTCCAAAGAGTATATGCCCTTTGTCTTCAGCCACCAGGGTGGGTAG GGAAGGACCCTCAGATGGAGGCAGGGCTAGGCATGTCTGAACTCAGACTCTCCTTGGGTG GGTCTTTTTTGCTGCAGCTGCTGTGGGGATGAGGATGTGGTTCCCAGCTCAATGGACTTA TGATCCCAGGAGGATTGTGGCTGCCTTTGCCATGTCATGCAGGTTGTCAGGGAAGTGGGG GAAAGCCAGAAGTCACAGGCTTCATCCAGCTTCCACACAACCCCAGAGGCCAGCCTCACT CCCACCATGCCCCCACCAAGAGGGCTGAGTCTGTTTCCAGGCAGTGGGTGAGCAGGGCTG AGGATTTCACCAGCCTCCCAGCTGTGAAAGGAAGCAGGCCTTTTGTGCCTCCCTGCGTGT GGAGTCAGCACACCAGATTCACCCCCTCCCCGAGTTCTGGCCAGGAGACTTAGCATTCAG TTGGAATTGTTACAAAGTTCAGTTCGGTTGGAGGTGTCCTTCTCCCTGTGGTCTTTTCCC CATACCTCTGGCAGCCATCCCCAAGGACCCCTATAAGGCAAGGCAGAAATGACTTCCCAG AGGACCCAGAGAGCCCACAGGGCTTTTCCTGCTGCTTCCTCTACCTCTTGATTTCTTAAG TATTTTTTTGTTATTCCTATTTTAAGCAGTATTTTTCTTTTAATAGCTTGAGTAGAAATG AATTTGATTGCTTTGTATCAACCTTACAGTCAGTAAATTTGCTATTTGAATAATTTTAGT AATTTGTAAGTCTTATGGCATTTGTCTTTGAAATGTCCTCACATCTGTCCCATCCTTCTG CCTAACTAGCTTGCACACTACCTGGTACTCCCTTTCACTAGGCCCTCATTCACATCAGCC CTGCATTTCCAGAAGAGCTTCTCAAATCTATTCATTGTCTAGTAATTTACCAAACTCTAA TTTAGTCTTAAAGAGCATTTCTTAGTGAATGGAAATGGGCCTGGTTCCTAGATAAAAATA AAAGTGTTCAAAATCTAAGATCCGTATCTTATTCGATTTTCCTGCCTTTCATTTAAATTC CTCTAAAAAAATTTCATACTATATATTTATAATCTCAATTTCCAACCTGCTATCTTCCAT TGCTGTCCAACAACCATCCTTTGCTATCTTCCTCCCTTTACTCCAACCTGCTACATATCT CTCTAAATATTTCTGTTGTAAGCATTAGTCTCTGCTTTCTAAAGTTTTTCTTATTACCCA TATCAAAAACTCCTCTCACCCTCAAAACAGTAGTTAAGCCCCTCTTCTATTTGAAGATCT TCTGTGTTCCAATCCACTTTGATAGCTCACTGCCCTTAGTAATTACTCTTTGCATTTTTA TATTGTTAGATTGGTTTTTTTTATGTTTTTACTTTTCATCTGTCAATGATAATTTACTGA ATGTCTCACATGTGTCAGGCACTGTGTCCCGCAGCAAAGCCTCTTTCATAGGTTGCAAAT ATGTCACTAAGTATCTCAAAAATAGCCTAAAGTTAACCTCAGCAATTATAGCTGTTCAAT CAATATCTCTTTATTAATTTCCCTTTTTACACAATTTCTTTCAGAGCAATTCTGCACATG ATAAACATTTAATGTACATATTTGTTTAATACAAATTAATGAATACATTTTATTAAGAAA ATAAGACATTCTCCTGAAGGCAAAGCGAGTTGTATTTTTTCCAATGTAACTTGGGAAGTT CTGGTGGCTATGACAGGATTTCTTTGGGGAAAAAAAAGTATATGATGTGCTGCAAATTCC AGAATCCTGATATATATTTTCCCTGGTTTGCCTAATTTCTATTAAAATAAACTGTCTTAT TCCAAATCAACTTAACATAATTTAGGATAAATCACTGTAACTTTGTTTGATGTTAGCATT AAGTGGCCTATGTTATCACTTCATTATAAGGTATCTTGTGGATTTCTCTCTCCAAGTTTT ATCAAGAAGGAGGATATAAGCCTGCGATTGTCAAACACCTTGTCTGTAAAAGAATTTTTT AATTTTGCATTTTACAGAGAACCATTTAGAAAGTACAAGTTCTACAACCCAACTATTTAC TCAAGAAACAATTAATTAGCTTTCAATGACCTTCATTAATGATCGTAGTATTTCTAATTT CACCTACTGTTTAACCTTTTGAATTTCAGTCAAGACAAACAGCTCCACATGATACAACAC TTAATCAGAATGAATGCCTCAAATGGAAAAAGACTTTTGTAATCTCAAGTATTAACATTA ATAATACAATTGAATGACAAATATTTGCACAAATAAAGGAACAATAATCTATATTTTCTG TCCATTTTATTTCTGGGAAGTAGTGGATGCCAAGAATGTATGATTCTAATTATAGATTCC ATCATTCCAGAAAATATGGATATAGATAATTAAGCTCCATAGAAATACTCTTACATGTAT TGAAAACTTATAAATAATTAGTTTATACTCTCTTAATAGCTTCCTATGAGCTACATTTAT TTCTATAGTAATGGCTATGATATTTCATCATATTTTTAGCCAGTGATATAATTTCTTTTA CTATGACAATAGTGAATTTTTTCTGCCATTATCCCTGCACATTTTAAAAACCTTTCTAAA ACCGATATGAAAGCTTCAATAAAGCCTTTTTTTTCCCTTTATTTTATATTTTCCAGAAAG GTAAATAATGACTTTCAAATAATTTTTAAAAATTCTTTTTAAGGTTTCTTTTAAAATTTA AAAGGATTTCCTTTTTCCTTTTTAGTTTTTTTGTTTTAAAGACTCATTTAAAATGACTTT ATAATATCACCACAGGGACAATAATGCTAAAATAACAGAGCTAGACTCTTCTTCTTCCAC TTTGTGAATAATGGAGGGATCAAAGTCATTCATACCCAGATTTCCTTTCCTAAGCTATAC AACGTTACAAAACAAACTAAACACTGAGATTACTTGTCTTATTATCTTATTTAAGTAAAA GGCTATTACTCATTGTGACTAGAATTGTAACAATTAGACTTATTCTCTGAATGCATTAAA ATAAATTTCTATAATTAAAACAAGTATACTATTTCTATAGCAAATGTGGAAAGTATGCCT CTATCTTCACTTAAATTCAGAATAATTTTAGTAACCCCTATTTAAATAAATGCAGGTTAA TAAATCAAAATACCATTAACTGGGTAGCTTGTAAACAACAGAAATTCTTTTGTTACAGTT CTAGACACTGAGAAGTTCAAGATCAAAATACTAGCAGATTCAGTGTCTGGCAAGGACTCA GTTTCTTATAGATAGCCCCTTCTCACTGAGTTCTCACATGGGGGAAGAGGCAAAGCAGAT CCCTGGGGACACTTTGGGCAACTAATCCCCTTCATGAGGGGTTTACCCAAAAACCTTACT TCTGATTACCTTTCAAAGACTTCACCTTCCCATTACAAAGATGCTGGGGATTAGGATCCT CATATAAATTTAGGGGGGATATAAACTTTCAAATCGTATCAACCCTATCCTTGCTTTTTT AGCACTTCAGAAAGCAGTAATATTAAGGCACATTTTCCATAGGTGCAGAATCTCCATTAT ATGATTATATATATGTGTGTGTGTACATATATATATTTACATTTACTTCTGTCAAAGTTT TTTTTTAATACTTTAAGTTTTAGGGTACATGTGCACCATGTGCAGGTTTGTTACATATGT ATACATGCGCCATGTTGGTGTGCTGCACCCATTAACGCGTCATTTACATTAGGCATATCT CCTAATGCTATCCCTCCCCGCTCCCCCCACCCCACAACAGGCCCCGGTGTGTGATGTTCC CCTTCCTGTGAACAATGAGTACACATGGACACACGATAAAGCCTTTTTGAGAAATGCTGA CAGAAACAAAGTTAGAACAAATGTGAAACAAAAAGTTTCATCAGAGATTTTAGTATCTTA ACATGCCTTACAAAAGTTCGGGAGGGGCAATAATATGTATGAAACTTCCTAAAAATCTTT AACCATGGAACCCTTCTTTTTTCAACTTTCCCATAGGACTGAAGACATGTTTTGAAATAC ATTGGTAGAGTGAAAATGATTCATTAAGATTACATTTGAATCCCAATTTCTCTCAGTTCT GCCTCTGTTCGTTTTTGTGTTTTTTTTTTTTTTTTGCCTTGATATCATCATATGTAAGCA GGAAGTATTATTGACCTAATGGGGCATTGTATAAATGCAATAAGCGATTTCAATTGACTT AATTCAACAAACGTTTACCTAGGTTCTAGTAAATGATCAGTATTTAGTTAGGAGCTGGAG ATAAAGAAACTAATAAAACATAACCCCTGACCTCAAAGAGTTATTGTTTTAAAATTCATC GGCCATTTGCTGCCGTGGGAATTTTCTCTGGCCACATTCTTCTTTGGTTCCCATTTACTA CACGTTTTCTTTGCATTTTTCACTCTTCTCTGGCCGTCAGCTGCAGACTGTTATAGTCCT AACCAGAGTAATTTAACCTTCCATTTCCCCAAACCAGCTATCCTTGAAAGTCCAAAAACT CATAGATGGCAAACAATAAGCCATATATGCTGGATATCTGTCCTTACAAATACAAAAACA ATAAAATGATTGAAATGAAAGATTTTTCTTGAACACACACCAGATCAAATTCTTAACACT TCTCTCATCCAGACGTCTCATTCACGAGAGAAACAACGGAAACATATAGTGTCCTGAGGG CTCTGTGGTCATCAAGAAAGGTGATTGTTATTATTATTAATTGTGTACACTTTCATTTAT TCTTATACAAAATGAAATCTTCAACCAAATACTACACATACAGAGGTTAGACCTCTTATC TCTAATAATCAGCATTTGTTGCCATCACTATTGGGAGTACACTCAATTGAAGAAAGGAAA GAAAGGTAGGCATATAACCGTGAATGAACAAAACAAACATGTTCTTATGAACATTGAATG TTTCTGGCTGAGTGCAATGGCTCATGCCTGTAATCCCAGCACTTTGGGAGGTCAAGGCAG GTGGCTCATTTAAGGTCAGTAGTTCGAGACCAGCAAGGCCCACATAGTGAAATCCCGTCT CTACTAAAAATACAAAAATTAGCTGGGTGGTAGTAGCACACACCTGTAATCCCAGCTACT CGGGAGGCTGAGGCAGGAGAATCGCTTGAGCCTGGGAGATGGAGGTTGCAGTGAGCTGAG TTCACACCACTGCACTCCAGCGAGGGTGACAGAGAGAGACCCTATCTCAAAAAACAAAAC AAAGCAAAACAAAAAATAACAAAAAATTAAATGTTTCTCAGCTAACCAAATTAGAATGTC TTCAGCTGAAGAAATAATAATTTATTCCAATTCAAAATAAATTTTTGACTACTACATCAA AAAAGAGGCAGTTAAAAATATACAAAAATGAAAACACAACCTCAATTTAAATTTTGCTGA AGCAATAATCTCAACTTTTAAAATACAAGCTTAAATTTTATACTGATAAATAGTTAACTA TTTATTGAAGCAATGCTCTCTGTTTAGAATTGTCAAATGATTTTTCTATTTTGTTTGCTT TGTATTTGAGAAAAAACCTTAGATTAGAAGCTTGAAGGTACAGATTACAATCTGCAGAAT GTAAACAGAGTAAATTCTGCAAAAAACAGCTCAAAGTAGAATGCCAGATTCTCTGGAGCA CTTGGAAAATTCTGACTACCTCAAGTAATTCCAGAGGATTCTTCCTTACTAAGTTCACTT GAATTTTTCATAGAAGACATTCATCTACCTGGTCAGAACACGAGCCCATAATTTCTGAAA AAGCATTATTAGTGTTTTGTAGATATCCAGAAATATTCATATTTACAAATATTTACAAAT ATCCAGAAATATGAATATTTCTGGATATCTACTCTCTCTTGCTTCACACACCCAATGTTG TGTTATTCTGTTTTGTGATTCCAGAATGAGATTAGATAATCTAATCAGGCATCATGTAAA AATTAAAGATTAATAGGGTCCCCTTTTCTTCCAACCTTATATCTTGGTGTAATGCTGATT GCCTCTTGATATGCTTGGCTGTGTGTCCCCATCCAGATCTCATCTTGAACTGGAATCCCC ACATGTCAAGGGAGGGAGGTGATTGAATCATGGGTGTTGTTTTCCCCATGCTGTCCTTGT GATAGTGAGTGAGTTCCCATAAGGTCTGCTGGTTTTCTAAGTGTTTGGCAGTTCCTCCTT CACATGCTCACACTATCTCTTGCTGCCTTGTGAAGAAGGTGCCTGGTTCGCCTTCCACCA TGATTGTAAGTTTCCTGAGGCTTCCCCAGCCATGTGGAACTGTGAGTCAATTGAATCTCC TTTGTTTATAAATTACCCGGTCTCAGATAATGTCTTCATAGCAGTGAGAAAATGGGCTAA TATACCTCTTATTAACATACATAATATACCTCTTATTAACATACATAAGATAATATACCT CTTATTAATATACATAAGACAACCTCTTATCTACATAAGATACTACTGACAAATAAGACA GTTTTCAGGGTTTATCTTTCTTTGATAGAGAGGAGAGTTTAGAAAAGTAAATGTAATAAA GATCATGGGTAAACACATTCTGATATGTTACATAGGTATGATGTAGAGTTACCAGAACAG TTCACAAATATTATCAAATACTTTTCTTGATTATTTTTTGTGCCCAAGAAAACATCATAG TCATTTTCTTTAAAATTACTTTATCTTCTTCTAGGGAACCTTTTATTTTTTTTAACTGTA CAATCACCAAAATAAAATTTCTAGATTTAGGTTCTTACTGATGAGATTAGTAAAATGGCT AAAGCTTTACGTACATTTACCCTAAGAGGGTACTATATCTTTTTCCAAAGAAAGAGGACC TGCCTGCCTAATAATTATACCCATGTTTCAGAGGCAGCTAAACAGAAGAAGGAAATGAGT GTTCCATCCCTGCACCCTCCCTCAGGGCAGTGAGAGAGTCGAAGGTCAGTTTTCTTCTTG ATGGTCCCTTCTCAAAACTTGCCTTGAACTTTGAATTATGACGTGTGTTAACTATCACTT CTGCCTCCAAAGTACTTCAGGTCAGTAGTCTGTTAAGATACTGCTTGCTATTAGACTATG AATTTAAACATAACAATACATTCCACAAATGATAATATTCTGTCACTTTTGTATACCCTT TATGTGCTTATCAACAATTGTAAAAACTGAACACATAATGCATATATCTAGTTCTTCATC TTTTTTGGGGGGAGTGAAGTCTTTTCAGCACACATAGATGAAAAATGACGTAAGGGAAAA CTCCACTCACTTCTTTTGTGTATGCAGGATCCAAAAGTAAACTATAATCCCCATTCCAGG CTGCAGTGTATATTTTACTCATGTGTCTAGATAAGTGCACTGTATATGTTATCCCATATA ACACAGAAAATATATCACTGCAAAGCTTTAAAAAGTCATTCTGTCATTTTGAATCAAAAG TTGGGGGAGCAGATGGGTAACTAGCTTGGAGGAGAGAGACGGGGTTACTATTGGCCAAAT GCAAGAGGAAGTATGAGAGTCTAATGATGAGGGCATTCTACTGCTAAGCATGTACAAAAT TTAGTTTTGGTAATAACTTTTCTACTCGGCGTGCATTTTATAGCTTGGGGTTATCTGCTG ACAATGTAAGAATTGAACATCAAGTGGAAGCTCTAAGGAATCAGAGTGGATATTTTGAAA GTTGCTAACAGAAGTAAATATAATTTTGAGTAAGAACATAGGTGTTTATCCAGCACAGAG AGCGCATGATGTGTTGGATTGGAAGTTACCCTCTGTATTATCAAGGCTGTCCTCAGTAGT TTCTATCTGTACAGTGTTTGACATCAAGATTACCATGTGTTCTTCACAGCCAGCTAGTGA GTAGGTTAATAATTTTTGTGCTGTTGTATAAATGGTCCAACTGAAACAGATAGGTTCTAC AAACCTTGGAACAAATACAGAATGGAGTGTGTTATTTAAAATATGTCAAAAGCTATATGA GAAGCTATATTATTATAAGTATATAAAGTACCAAATAAGGTTAAGTAGATATCCTCTTAA TTTTGAGGTTCCGTTTAATCAAGATGGAAATTCAATCAGTAATAGAATGTCGGCGTTTAA GATTTTTTTTTTGGATTAATTTAACTAAAGTAGTTGTGTAAGCTCCATAAATTAAATTTA TGATGATGTGGGTCAAATGAAAATATGTGACTTTACGGTAAAGCTGTAATCATAAAAAGG TGAACATTGCCTATGTTGTCTTCCAACTGAAATAAATTGGTTACCTAAAAATCTCTTCCC AATCCTTCTGACTTCAGCTCAGTCATATAAGAGCTCAGAAAGCAACAACTCCATTTTTAC AATAAGAAAAAAAAGATTAACTTAAAAAATCAATGACTTTTTAAGACTCATCTGAGAATT AAGGTCACATGGCAAACTGCTACCCCAAATTCTGTAGACAAATGAATGTAGACAATCACA GCACAGAGCAACTGACTTGGAGCAGAAACCACTGCACCCAGACACTGGCAGGAACACTCG CCTTGTAATTTTGATATTTATTTCCTGAGGCTGAGTGTGGATTAGATTGAGAAAGAAAAA CCCTGGATGGTTTCCATCTTATGGGGACCCCACACTTTTATAAATTTTACCTCCAGGAAT TCTACAATATTCTCATGGTAAAGAGTTAAAAAAAAAAAAAATCCCTTCTTGGCTCTGGCA GGAGGAGGTGAAAGTGGCCATCTGGAAATACACATTCCATAATGAAGGCCTGCTCTCCAG AGGAAGGGCTATTACCCAACTCCAGGCCACTCTAGAGTCACCTAGTGTGAGAAAATCAGG GAGAAAAGTGTTAAATATACTTGTAAAGGTCATACACCAGGCCCGAAGCCTACTAAAAGA CAGATTTAATCCTAAAATTACTTAACACTTAAAGCTCCTTCACCTCATCCTTTCCTTACC ACTACACCAACTAGCTCCAGTCTGATACCAGTGGATACAGATGAAAGAACTGTAAGACAC AGACTCCAAGAAGTTCTTGGGGGAAACTCAAAGACAACAGGAGAGACAAAAACAAGGACA CTAGAGGAATTTGCAGATCCTAGAACCTACAGCTATTGGAAATACTATGCATAGCCAAGC TCCTACCCCAACAAACTTAAAAACTCACATTGAAAGCCTATTTTACCCTATTCCTGTAAC TCAGTATGTCACGTCCAACTTCCAAAAAAATTACAAGGATAGGCTAACAGGGAAGAGAAA ACACAATCTGATGAGACAAAGCAAACCTCAGAATCAGACTCAAATATAATACCAAATTTG GAATTATCGAATAAGGATTTAAGAGAACTATAATTAATATAATAAAAATTCTAATAGAAA AAGCAGAACAAATGGATAATATAAGCAGAAAGAATGAAACATTAAGAAAGAATCAAAAGG AAATGCTGGAAATACAAAACACAGTTACAAATGAAGAATGTCTTTGGATGGACCTATCAG GAAAATACGTGAGCTTGAAGCAATGTCAACAAAAATTTCACAAGCTGAAATAGAAAGAGA AAAACATAATGAATCAATAGAGGATCCAAGAACTGCGAGACAATTTCCAAAGGTCTAATA TACCTTTAGAAATTGGAATACCAGAGGGAAAAGAAAGAATAGAGCACAAGGAATATTTGA AGTAATAATGGCTGAAAACTTTCAAAAGTTAATGACATACACTAATTCACAGACTCAGGA AGTTCAGACAACACCACACAGAATAATTCCCCCCCAAAAATCTACAATTAGGCATGCCAT ATCCTACTGTGGAAGCCCAACATTGTATTCATTGTATTTCATTTGAAATACAATGAAAAA AAGAGAGAAAAAAATGCCTTACTAACAAAGAAAAGAGATGAGAAATATTGTCTACTCATG AGAAACCACGCAAACAAGGAGCTAATTTAAAAAAAAAACAAACAAACCTAGAATTCTAAA ACCAGCAAAATTATCCTTCAAAAGTGAAAGAGAAATACCTCTTGGAAAAACAAAAAGTAA GAAATTCATTGTAAGCAAACCAGCCCTGTAAGATGTTAAAGAAGTTCTGCAAGAAGGAAA GTGATATGGGTCATAAGCTTAGATCTACACAAATAAAGAAAAATATTTAGGAAAAGAATT ACGGAAGGTAAATAATTTACTTTTTAAATTATCATTTGATATAGTAGATAACTGTTCAAA GTAATCATGGTACTAATGCATTATGTAATTATAGTATGTGATAAGTGAAATGACTCCTAA GAATAACATAAGAAATAGAGGGAAGAATTGAAAATACTATGTTTTAAGTTATCTGTACAA CCCATGAAGTGGTATAGTGGTATTTGAATGTGAAGTTGGATTAGTTAATAGTATACTGCA AGATGTAGGGCAAAATACAATAAAATAATACGCAAAGAGAAGAGAGAAAATAGAATCATA AAGTGCTCATACAGATACCCTTTGGAAGACAGTTTTTCAATTTCTAATAAAATTAAACAT AATCTTACCATGTAAGCCAACAATTGCACTCTGATATTTTATGAAAACTTAAGGCTTTAG AAAAACCTGCACACAGATGTTTATATAGAACGTTTATTTATAAATTACCAAGACTTGGAA GCAACCAAGATGTCCTTCAGTAGGTGAATGGATAAAAAATGAAGTACATGCAGACAATGA AATATTATTCAGCATTAAAATGAAATGAGCTATCAAGCCATGCAAAGACACAGAAGAAAT GTAAAGGCATAAATCTAAGTGAAAGAAGCCATTTTGAAAAATCTACATACTACATGATTC CACCTATATGACATTCTGGAAAAAAAGTGGTTCCCAAGGGTGAAAGGGGAGGGAAGGATG AATAGGCAGAGCACAGAGGATTTTTAGGTCAGTGAAACTACTCTGTATGATACTGCAATG GTGGATACATGTAATTACACATTTATGCAAAGAATGTTCAAACCCAGAAATTAACTCTAC TGTAAACTATGGAATTCAGATGATAATGATGTATCAATGTAGGCTGATCAATTGTAACAA ATTTACCACACTGATGGGGTTGATAATGGGGTAGGCTTTGCATCTGGGCACATGGGGTAT ATGAGAAACATCTGTGCCTGCCTCTCAATTTTGCTGTGAACATATATCCACTCTACAAAC AGGCTTAAACCTGCTCAATTGTGAAAGAAACAAAGAATAACAAATAGAAAAGAAAACATG GTACACACTTGCACATATACACACACATACACACACACATTATACATATATGATGTGCAC ATGATATAAACAAATACTAAATAGACTGAATATACAACCATTCCTCAATATCCATGGGCA TTGCTTCCAGAACCCTCTTGCAGATACTAAATTTTGCAGATATTCAAGTCTCTCATATAA AATTATGTAGTATTTGCATATAACCTAGGAACATCCTCCTGTATACTTTAAAACATCTCT AGATCATTTATAGTATCTAATACAATGCAAATGCTATGTAAATAGTTGTTATATTGTATT TTTTAATTTGTATTATGTTTTACTTCTGTATTTTTTTCCCGAATATTTTCTATCCATGGT TGGTTGAATCTGCTGATGCAGTCCCTGGGGAAAGAGAAGGCTGACTGTATAAATAAATAG GGGAGAAGAGACAAATTTCCATTGCAGACAAATTCTGCACAATTTATGCATATACGCTGC ATAAATCTGCACTTTTAAAATGTGGGCTGTAGATAATGACTTTGCTCCACAAAAGTCTCT ATAGAAAAGGGAGGCAAAAAAGATTACAGTGGAGAAAACTGATAAACACAACTTTAGCCA GGTGGCCAAGGTCAACGTCAAGAGTGATAAGTCATGCTAACAGTATGTATCTTGATTTGT TGTTGGGGAAGCAGCCATCACCACCTGTCCCACTCTAGGAGTTTGCTGAATCGAGGCTCT GGGTCTGGAAAGTTCCCCAGTATGGAAGTTGGCCCCAGATTCTTCTTACTTATTAGGATA AACTTTCCCTTCTTGTATGTGGTGAACTTCTTTGTGTTGCTTAAGCACGTGCACCAGATG GTACCTGCCCAGCCCCACCAGTATATCTGCACCCCCAGGGAAGGGAGAGAGTCTCTTGAC TATGGCATAAGAAGGGTTCATTCTGTCCATCACTCTGCATCAGCTCCTGGTAGGGACCCA CTTGCCCTGGAAGACTGAGCCCACTACAGATGTTGATCTTGCTGCAGCTCTTCTCATTTT TGTGAGTACAGAGTTGTTCTAACCAGTGCCTGGTATGTCAAGTCCTCCTTGGCAACTCCT CATCCTTAGAATATGCAGTGGGCTGAGGTCTGGGGCCTCCTACTGCTGGTGGTTGGCATT GCTATGATCTTTGCTGCCCTCCATGTGGTGGGGACTCTTCCCTCAAATTGGTTGCTGAAT CTTCCTGTTTGGTAGTAGGATATGATTGACTTGGCACTTTATCTTTGTGATCTTCCTCAT AAAAACCAATTACTCTAGTTGAATTATGAGAAAAATATCAGGCTAATTCCAAGACAAGGG CATCCTATAAAGTAGTTGACTGGTATTTCTCAAAACTGTCAAGGTCATGGAAAGCATGGA AAGTTTGAGGAACTATTCCAGCCAAAAGGAATCTAAGATGATATGACTATTAAACGTAAT GTGATAACCAGGATGGGGTCCTGGCATGGAAAACGACGTTAGGTAAAGCTAAAAAAACTG GAACAAACTATGGATTTTAGTTAACTATAATGTATCAATATTGGTTCATTAATGGTAACA AATGTACCATAGCAATATAAGATGTTAATTATGTGAGCAGGTATGAGGAAACTCTATGTA CTATCTTTTCAATTTTTTTCACAAATCTAAAACTATCTTGAAAAATAAAGTCTATTATTT TAAAATATTTTTGTTATATGGTAGCAGTTGGATACAATGTTTTCACTGAAGCTCTGAAAG AATATATGCCTGTATTCCCTTTTGAAGGCATATAGGCAACAATGTTTTAATATTATTTTC GTGTCATTAGTATTTATAGTATAGATAGCTAAACGAACATAAAAGTGAGTTTATTTAAGA AATGAAAAAATGACTGCTTCTCATATTTTGACCAGTGGCCAAATATGTCTATCTGGAGAT TACTCCTAGAACAGCTCACGTGTGAACCTAGGAGCTAGTCTCGAACCTGAGTGAGAAAGA AAGCCTGTGTGTTAGCTTAAAAGTGTGGATCTTGGTGTTCTTCAAAGCACAGTCCATGAG AGCTGAGAGCCCTGACTTAGAGGAATTCACTCTGGAAAGAAAATGGGGAAGACACAAAGC ACAGCACTTTCATGTGAAAGTGGACGTGAAGCTGATGAAACTGTTCCCGGGACTGAATCT GGCTTTCTGCACAGCAGAAGCAATGACTGCCTATGTGTGAAATGACACGCTGGAGCCCTT GCTAGGATAGAAAGGGCTTAAGGAATCCCTCTTTAATGTTCTGCTTATGAAATTTGAGGA GACAAATTTTTCCTTAACAGGAATAACTTTTAAAAGATGAAAGAAAGCATAAAATAGATG CTCTGAGCTAAGGCAGAACGATCAAATGCAGCATCTGGGAAACTTGGTGGTGAGCAGTGT GTGTCTGAGAGGAGGAAGGGAAATGCTGAGTCTCTGTGGATTGTATTAAGAGTACAAAAC TCCTTAACACACAGAGGGTGAATCCCCCCGTAAAATATGTCGTAGATACCAACCAGGTAG GAGCAATGCCTCTTGGGGAGGTGGGGTACAGATGCCACACTTTAAAACTGGACTATCTTC TGTACTGCGTGTACATCAGAGATGACTAAGCTACTAGGTGTGAGGTCACACAAATACTGC TGTGGAGGATCTATGCTACGCCCAGAAGAAGGAGAGGTAACTGAAGGCCCTGGGGACAGA GATGGTGTTTTAAATTTTTATTCCATCAGGAGGTTGAGAGTCAGAAAAGAAAGAAGTATT TGGAAAGAGAAGAGCAATGTGTACAGGACTTGTGAAAGAACAGGAAGTGGTTTGCAGTGT GAGGACTGCCTTGGAAGGGCATGGGCACTTTTTCATGTCCAGCCTCTTCTGTCCTGCCCT TTATCCTCACTTCTAGTGTAGCTGTGAAATGGTACGTGCTCACAAAAGCCTGTGCATTTG TCGGTCATTGCACTTGCAGCTGACATTGTCACTGTGTAGTAGACTGTATTAAGGGATGGA GATGGCTGTTGTACTCCCCGACTTGACTTACAAGGAGTTCTCTGCTTACGCATTTATGAA GGATGAACTTATGAACAGGAGAAGTCAGTCTGGAAAGGGAAGGATTAGACTGAATGAAAA TCCCAGGAAGATGGAAGTTTCCATCTGTAACTTCAGCATCTAGTATCATGCCTGACATAG AGCACAGTCTCAGTAGATTTGTATTTAATTAATCATTTACTTAATTAGTTACTGTGAACT ACAGTGTACATTTAGAAAAGAGAAAAATCATTGTAGTCAAGGGAGGATGGATTTGAATTC TAGATCTTCCACGTCTTAGTACTGTGACTTACGGGAAGTTTTTAGAAACTTGCTTTCTAC ATGTACAAAAGAACAATATTCATATTTATTTCACAATGTTGTAAAGAGAATTACATAATG TAGAAATAGATAGACAGACACATACCATTCTTTAAAAGGCCAGTTAGAGCAGGTACAGAT ATTAGAATTGTAGTTATGATTGCTTTTATTATTATTTCATGGCTTTTTCCCACATTGGCA TAGGTTATATGTCATCAAGGGCAGAGAAAATATCTTTTTCCCTCTTTTGTGTTCCTTGGT ATAACGTAGCCAAGTATGCATTTATTTCTATTTATCTAAATCTGTGTAACTGTGAGCAAA ATTAATTTTACTACAATGTAAATTTGATAGTGAAAATATACAAAAATATTATAATTCCAC ATTATAAAAATATTATAATTCCACAATATAAAATATTATAATTCCACAAAGTATGTAGAT GTCACCCAATGATAAAGATAGGACACATATCAATATACAGCTACCCCACCTTAGGACTCA TAACCAGTTTACCTATACATTTCAGAGTTAATTCACTGCACTTGCTAACCCACTGAAATT TCATAGGAGCATGCAACCACAAAGTCATCACAATTCAGTCATTTTCCAGCTATCACTTTG AAGACTTTCATTTATCACAGTTTTGGGAAATAAGATTTTCAGTTTCTCTGACTTCCTCAA TAAATAATGTGACCATTTAATAAATATGTGTTTCTTTAGTAAGCAGGCTCTGCCCATGTT GAAGAAAGTCTTTTGGGATCATTTATTCCTACACACCGGGGAGGGCTGGCACTACATACC AATTTAATGCCAGTATTCTCTTTCCATGACTACAAATAATAAAAATAGCCTTTTGCTTTT AAAGTTTGTTCTCCAATAAAATATGTAAAAAATAGAAACAAATGTCTTATTAGTTTCATG TAGGTATTGTTTTACTATTTATTATTGTGCTTGCATTTCAAGAAAAAGTCAAAGATACAA AGGTATAAAGAAAAACCAGAATGTTTCTCTCTATCTCTCTCTCCCTCATAGCATCCTTTT GAATGTTTATTACCAATTCTGAGAAAAATAAACCTCAAAGAATACCTAGCCCTTTCTTTA CCATTGCTTTCTCTCAAATTCACACACACACACACACACACACACACACACACACACACA CACGGGCTCCTTGTCAATGAGGCTGGCTGATAACAAAGGAAGACATGGTGACTTTGCTTA GTGCTTGCATGAAAACATCCTTCCTTTCTGCCCACCCTGCCACTCACCGTCAAGCTACAA GAAAAGCTATGGGCCTCAAAATCTTTGGTTAGTGCTAGGCGAAAGGCAGAAGAGGAAGAT AGATGCTAACGTTTTGAAGTGACTAGATAGAATTCAGATAAACCAAAAGGAAAATATTAA CATTTTGAAGAAAGAAAAATCAGTTTTTATCTTTACACAGAAAAGTTGGGTGGAATTTTT CTATTTCCATATTTCTCTATAGGACCATGGGAACATTGCACATTACATCTTGTGTGTGCA TGCACACACACACACGTACATGTGCTTTTGTGCATGCGTGCACATGTTCAGCTAATTTAC GTGGTAAATACAACTCTTCCTTCTGATTTCAATATGCATAATCTCATTTAATATTTGAGC TCTCCTGACAGACAGTTTGTTCAGCAAATACTGAGAAACACTCACCATCAGTTTAGAATA TAAAATTCCCTTAACACCCATCTGAGTTATTTGTCTGAATGTCTTCTACAAAGGCCTCAG CCCTATAACTAAAATGAGATAGACATGAGTGCACAGTTGTTCATTGTTCTTTCACTTGAC TTATTAATCGTTATATGATTTACTGGATTTGCTTCTTTTTTTTACAATAGCTTTATTGAG ATATAGTTTACATACTGTCAGGCCTCTGAGCCTAAGCTAAGCCATCATATCCCCTGTGAC CTAAATGTACACATGTAGGTGGCCTGTTCCTGCCTTAACTGATGACATTCTACCACAAAA GAAATGAAAATGGCCTGTTCCTGCCTTAACTGATGGCATTATCTTGTGAAATTCCTTCTT CTGGCTCAAAAGCCCCTTTACTGAGCACCTTGTGACCTCTACTCCTGCCTGCCAGAGAAC AACCTCCCTTTTTCCTTTACTTACCTAAATCCTATAAAACGGTCCTACCCCATCTCCTTT CGCTGACTCTCTTTTCGGACTCAGCTTGCCTGCACCTAGGTGATTAAAAGCTTTATTGCT CACACAAAGCCTGTTTGGTGGTCACACAGACACACATGAAATTTGGTGCCGTGACTCGGA TCAGGGGACCTCCCTTAGGAGACCAATCCCCTGTCCTCCTGTTCTTTGCTCCGGAAGAAA GATCCACCTACGACATCAGTTCCTCTGACCAACCAGCCCAAGGAACATCTCACCGATTTT AAATCCGGTAAGCAGCCTCTTTTTACTCTCTTCTCCAACCTCCCTCACTATCCCTCAACC TCTTTCTCCTTTCAATCTTGGCGCCACACTTCAATCTCTCCCTTCTCTTAATTTCAATTC CTTTCATTTTCTGGTAGAGACAAAGGAGACACGTTTTATCCCTGGACCCAGAACTCCGGC GCTGGTCACGGACTGGGAAGGCAGGCTTCCCTTGGTGTTTAATCATCGCAAGGACGCCTC TGATTATTCACCCACGTTTCAGAGGTGTCAGACCACGCAGGGACACCTGCCTTGGTCCTT CACCCTTAGTGGCAAGTCCCACTTTTCTGGGGGAAGGGCAAGTACCCCAGCCCCTTCTCT CCGTGTCTCTACCCCTCTCCGCTTTTCTGGAGGAGGGTTAAGAACCCCTCAACCCCTTCT CCTTCACTCTTAGCGGCAAGTCCCGCTTTTCTAGGGGGCAAGAACCCCCAATCCCTTATT TCTGTGCCCTGACCTCTTATCTCTGCACCCCAATCCCTTATTTCCATGCCCCAGCCTCTT ATCTCTGTACCCCATCCCTTATTTCTGCACTCTGACCTCTTATCTCTGTGCCCCAATCCC TTATTTCTGCACCCCGACCTCTTATCTCTGCACCCCGATCCCTTATTTCCATGCCCAGAT CTCATCTCTGCGCCCCCATCTCTTATTTCCACACTCCGACCTCTTATCTCTGCGCCCCAA CCCCTTATTTCTGCACCCCGACCCCTTTCTCGCTTTTCTGGAGGGTAAGAACCCCCGAAC CCCTTCCCTCCGTGTCTCTACTCTCTCTTTTCTCTGGGCTTGCCTCCTTCACTATAGGCA ATCTTCCACCCTCCATTCCTCTTTCTTCTCCCTTAGCCTGTGTTCTTAAGAACTTAAAAC CTCTTCAATTCTCACCTGACCTAAAATCTAAGCATCTTATTTTCTTCTGCAATGCCGCTT GACCCCAATACAAACTCGACAGTAGTTCCAAATAGTCAGAAAATGGCACTTTCAATTTTT CCATCTTGCAAGATCTAAATAATTCTTGTCGTAAAATAGGCAAACTGTCTGAGGTGCCTG ACGTCCAGGCCTTCTTTTACACATCAGTCCCTCCCTAGTCTCTGTGCCCAGTGCAACTCA TCCCAAATCTTCCTTCTTTCCCTCCCGCCTGTCCCCTCAGTCCCAACCCCAAGCGTCTTT GAGTCTTTCTAATCTTCCTTTTCTACAGACCCATCTGACCTCTCCCTTCCTCCCCAGGCT GCTCCTCGCCAGGCTGAGCTATGTCCCAATTCTTCCTCAGCCTCTGCTCCTCCACCCTAT AATCCTTCTACCACCTCCCCTCTTCACACCTGGTCCGGCTTATAGTTTCGTTCAGTGACT AGCCCTCCCTCACCTGCCCAGCAATTTACTCTTAAAAAGGTGGCTGAAGCTAAAGGCATA GTCAAGGTTAATGCTCCTTTTTCTTTATCAGACCTCTCCCAAATCAGTGAGCGTTTAGGC TCTTTCATCAAATATGAAAAACCCAGCCCGGTTCATGGCTCATTCGGCAGCAACCCTGAG ACGCTTAACAGCCCTAGACCCTAAAAGGTCAAAAGGCCGTCTTATTCTCAATATACATTT TATTACCCAATCTGCTCCCGACATTAAATAAAACTCCAAAAATTAAATTCCGGCCCTCAA ACCCTACAACAACACTTAATTAACCTCACCTTCAAGGTGTACAATAATAGAGGCAGCCAA GTAGCAACATATTTCTGAGTTGCAATTCTTTGCCTCCACTGTGAGACAAACCCCAGCCAC ATCTCCAGCACACAAGAACTCCAAACTCCTAAACTGCAGCTGCCAGGGGTTCCTCTAGAA CCTCCTCCCCCAGAGGCTTGCTACAAGTGCCAGAAATCTGGCCACTGGGCCAAGGAATGC CCACAGCCCGGGATTCCTCCTAAGCCATGTCCCATCTGTGCGGGACCCCACTGAAAATTG GACTGTTCAACTCACCTGGCAGCCACTTCCAGAGCCCCTGGAACTCTGGCCCAAGGCTCT CTGACTCCTTCCCAGATCTTCTCAGCTTAGCAGCTGAAGACTGACACTGCCCGATGGCCT CAGAAACCTACAGGACCATCACAGACGTTCTAGGTAACTCTCACAGTGGGGGGTAAGTCC GTCCCCTTCTTGATCAATACGGAGGCTACTCACTCCACATTACTTTGTTTTCAAGGGCCT GTTTCCCTTGCTTCCATAACTGTTGTGCGTACTGACAGCCAGGCTTCTAAACCTCTTAAA ACTCTGCAACTCTGGTGCCAACTCAGGCAATACTCTTTTAAGCACTCCTTTTTAGTTATC CCCACCTGCCCGGTTCCCTTATTAGGCCAAGACACTTAAACTAAATTATCTGCTTCCCTG ATTATTCCTGGGCTACAGCCACACCTCATTGCCACCTTTTCCCCCAGTTCAAAGCCTCCT TCACATCCTCCCCTTGTATCTCCCCACCTTAACCCACAAGTATAAGACACCTCTACTCCC TCCTTAGCGACCGATCATGCACCCCTTACCATCCCATTAAAACCTAATCACTCTTACCTC GCTCAGTGCCAATATCCCATCCCACAGCATGCTTTGAAAGGATTAAAGCCTGTTATCACT CGCCTGTTACAGCATGGCCTTTTAAAGCATATAAACTCTTCTTACCATTCCCCCATTTTA CCTGTCCTAAAACCAGACAAGCCTTACAAGTTAGTTCAGGATCTGCGCCTTATCAACCAA ATTGTTTTGCCTATCCACCCCATGGTGCCAAACCCGTATACTCTCCTATCCTCAATACCT CCCTCTACCACCCGTTATTCTGTTCTGGATCTCAAACATGCTTTCTTTACTGTTCCTTTG CACCCTTCATCCCAGCCTCTCTTTGCTTTCACTTAGACTGACCCTGACACCCATTAGGCT CAGCAAATTACCTGGGCTGTACTGCCGCAAGGCTTCACAGACAGCCCCCATTACTTCAGT CAAGCCCAAATTTCATCCTCATCTGTTACCTATCTTGGCATAATTCTCATAAAAACACAT GTGCTCTCCCTGCTGATCGTGTCCGATTAATCTCCCAAACCTCAATCCCTTACAAAACAA TAACTCCTTTCCTTCCTAGGCTTGGTTAGTGCGGTCAGAATTCTTACACAAGAGCCAGGA CCGCACCCTGTAGCCTTTCTGTCCAAACGACTTAACCTTACTGTTTTAGCCTAGCCCTCA TGTCTCCATGCAGCGGCTGCTGCCGCCCTAATACTTTTAGAGGCCCTAAAAATCACGAAC TATGCTCAACTCACTCTCTACATTTCTTATAACTTCCAAAATCTATTTTCTTCCTCATAC CTGACGCGTATACTTTCTGCTCCCCGGCTCCTTCAGCTGTACTCACTCTTTGTTAAGTCC CACAATTACCATTGTTCCTGGCGTGGACTTCATTCTGGCTCCCACATTACTCCTGATACC ACACCTGACCCCCATGCCTGTATCTCTCTGATCCACCTGACATTCACCCCATTTCCCCAT ATTTCCTTCTTTCCTGTTCCTCACCCTGATCACGCTTGATTTATTGATGGCGGTTCCACC AGGCCTAATCGCCACACACCAGCAAAGGCAGGCTATGCTATAGTACAAGCCACTAGCCCG CCTCTTAGAACCTCTCATTTCCTTTCCATCGTGGAAATCTATCCTCAAGGAAATAACTTC TCAGTGTTCCATCTGCTATTCTACTACTCCTCAGGGATTATTCAGGCCCCCTCCCTTCCC TACACATCAAGCTCGAGGATTTGCCCCCACCCAGGACTGGCAAATTAGCTTTACTCAACA TGCCCCAAGTCAGAGAACTAAAATACCTCTTAGTCTAGGTAGACACTTTCACTGGATAGG TAGAGGCCTTTCCTACAGGGTCTGAGAAGGCCACCGCAGTCATTTCTTCCCTTCTGTCAG ACCTAATTCCTCAGTTTAGCTTTCCCATCTCTATACAGTCTGATAACAGACTAGCCTTTA TTAGTCAAATCAGCCAAGCAGTTTTTCAGGCTCTTGGTATTCAGTGAAACCTTTATATCC CTTACAGTCCTCCGTCTTCAGGAAAGGTAGAATGGACTAATGGTCTTTTAAAAACACACC TCACCAAGCTCAGTCACCAACTTTAAAAGGACTGGACAATACTTTTACCTTTTTCTTTTC TCAGAATTCAGGCCTGCCCTCGGAATGTTACAGGGTACGGTCCATTTGAGCTCCTGTATG GATGCTCCTTTTTATTAAGCCCCAGTCTCATTTCAGACACCAGACCAACTTAGACTGTGC CCCCCAAAAAACTTGTCATCCCTACTATCTTCTGTCTAGTCATACTCCTATTCACCATTC TCAACTACTCATACATGCCCTGCTCTTGTTTACACTGCTGGCTTACACTGTTTTTCCAAG CTGTCACAGCTGATATCTCCTGGTGCTATCCCCAAACTGCCACTCTTAACTCTTGAAGTA AATAAATAATCTTTGCTAGCAGGACTATGCTGAATCTCCTTAGGCACTCTCTAATTAGAT GTCCTGGGTCCTCCCAATTCTTAGACCTTTAATACCTGTTTTTCTCCTCCTCTTATTCCG TTTAGTTTTTCAATTCATACAAAACCGTATCCAGGCCATCACCAATAATTCTAAATGACA AATGTTTCTTCTAACAGTCCCACAATATCACCCCTTACCACAAAATCTTCCTTCAGCTTA ATCTCTCCCACTCTAGGTTCCCGTGCCGCCCCTAATCCCGCTCGAAGCAGCCCTGAGAAA CATCGCCAATTATCTCTCCATACCATCCCCCAAAATTTTCGCCATCCCAACGCTTTACCA CTATTTCCTTTTATTTTTCATATTAATATAAGAAGACAGGAATGTCAGGCCTCTAAGCCC AAGCTAAGCCATCATATCCCCTGTGACCTGCACTTACACATCCAGATGGCCGGTTCCTGC CTTAACTGATGACATTCCACCACAAAAGAAATGAAAATGGCCTGTTCCTGCCTTAACTGA TGGCATTATCTTGTGAAATTCCTTCTCCTGGCTCATCCTGGCTCAAAAGCTCCCCTACTG AGCACCTTGTGACGACCACTCCTGCCTGCCAGAGAACAACCCCCCTTTTTCCTTTACCTA CCCAAATCCTATAAAACGGCCCCGCCCCTATCTCCCTTTGCTGACTCTCTTTTCGGACTC AGCCCGCCTGCACCCAGGTGATTAAAAGCTTTATTGCTCACACAAAGCCTGTTTGGTGGT CTCTTCACACAGATGCGCATGAAACATACTATACCATTTATCCTTTTAAAATGTACTATC CGATGGTTTTTAGTGTATTCAGGGTTGCTCTAATTTTAGAATTAGTATCTAATTAGATAA TCAGTATCTAATTTTAGAATATTTCACCCCCAAAAGCCTCATTTTTATTAACAGCCACTC CCCCTTTCTTTCACCCCAGCCCCTGGCAAACACTAATCTACTTTCTGACTCTATGGATTT TCCTCTTCTGGTGTATTTCGCCTTTTCTTTCACAGAATTACACAAATTATCTCAACCCCA ATCAGTCACCTGGCATGTTTCACTTGGGGATTCAAGTCAGAGCTATATCTCCATTAATAG GAAAAATGTATATTTAAAAATCTCTTTTAAGAGAAAATAATCTTGAGCTTATGGCTTAAA GAATAGTGTCTTATAAATGATGAAGCTTCCTTAGATGCGTTAATTAATTTCAACAAATAT TCACTGAGGCACTGAACCAGTGGGTCTCCAGGTGTGGTTTTTAATGGCCTACATCACAAC CACCTGGGGATACTTATTAAGGATGTAGATACTTGGGATTTGCCTCACATCTACTAAATT AGATGTTCAGGGAAGGGGCAAGGGAATCATCATCTTTTTTTTTTTTTTTTTTTTTTTTAG ACGGAGTCTGGCTGTGTCGCCAGGCTGGAGTGCAGTGTGATGATCTTGGCTCACTGCAAC CTCCGCCTCCTGGGTTCAAGCGACCGGGTTTCACCATGTTGGCCAGGAGGGTCTAATCCT CTAACCTCGTGATCCGCTTGCCTTGGCCTCCCAAAGTGCTGGGATTACAAGTGTGAGCCC CTGCACCTGGCTGGGAATCATCATCTTAACAGGGCCCCTGTGTGCTATTCTTATGCACAC TAACATTTGCCAATCAGAGGTCCACCCTGTACTAAGGTCTGGGGGTAAAATAGATGATTA AGACACAGAATTTGATATCAGGTCATTTCAACACACTTAGCCTACACATTATGCCAATGA TATTTTAGCAAAATTATATAAATACATTGATAGGGGAAGGAGCACTGAAAGAAAAGATTC CCGGTGATCAACCACTTTCTGCGTCTTACAAAGTACTTTACAAATACTGTTTCTCTTATG AAGTGCATCACCCAGTACCAGTTGCTGTGACATATATGTTTCCCATATTAGACCTTGCAC AGAAATACTCATATTAGCATAAATTTATTCATTTATTTAAGAAATGAATATCCATTGAGT TACAACTATGTGTTCAGCCCTGCTAAGGCAGCAAACAAAATAAAGTCTCTAAACTGTAAA ACTAAGGAAAGGAGAAGACCAATACAAGAAAGAAAGAACGCTGTGAATAGGGGAAGTCTT CCTGGAAAGACTAAAATGAACTCCTTCTCAGAGGATATGTAGGATTTGTGTGGGAACAAG TAGAGGCAACTCCTGTAGTGGAAGATACATAATAAAAGTATGTATAGCACCAAAAAAAAG AAGCATTTGATTCAGGTTAGATCCAACCAGCAGTCAAGTATCTGCTGGTGTCTGGAATAT ATGAGAGAGGCTTGAAGAAAATAACTGGAGCAGGACTGTTATTATGTATTGGAGAGCCAT GTAAGAATCTACAGACAGTACTGAAAATACCTAAGGAATGGCTCTTAACGGAGTGTGTCC TGATGAAAACTTAGTCACCCCAGGGGAAAATGCATCCATTTAACTCCAAGGGAACATCTA TACACCTATCAGCATCTATACATCTATCAGCATCTGTACATCTATCTGCATCTGTACATC TATCAGCATCTATACATCTATCAGCATGAATGAGCTTGAGCTTCCCACTCCGAAAGATCT GGGAAGCTAAATGACGGTCTCAATCCTCTGTATAGATAAGAGAGGGATGAGCGCTGGAAA ACAAAGTGGTATCTTTGGTGCACTGATGGTGGAATTCACAACCTGCCGCTGCTCAAATAC TGGCCCATAAGATTCTGTTCATTCTGCCACTAATCTGGCTATTTTCACTGCAGGTACCTC AGAATACGGATCTGAACATTAATAAGCAAGGAAAGAACAATAATGGTACACTAAGGTGCC AGCAGGCAGAGAGAGAGGGAGGAGAAAAACAAAAACCTAGATTAAGCGCATAAAAAATAA AAATTTTGGAGGACACAGACCAGAACATGAGCATTAATGAGCATTTAGTGAGCTTCAAGT ACAGTACAAAGACTTTATAGAAATATAAAACTAAAAAAAAACAAAAAACATTGGCTGGGC GCACTGGCTCACGCCTGTAATCCCAGAGCTTTGGGAGGCCAAGGCGCGTGGATCACATGA GGTCAGGAGTTCGAGACCAGCCTGGCCGATATGGTGAAATCCCGTCTCTACTAAAAATAC AAAAAATTAGCCAGGGACAGTGGTGGGTGCCTGTAATCCCAGCTACTTGGAAGGCTGAGG CAGGAGAATCACTTGAATCCAGGAGGTGGAGGTTGCTGTGAGCCGAGATCGTACCATTGC GTTCCATCCAGCTTGGGCAACAAGAGTGAGACTGTCTCAAAAAAAAAAAAAAAAAGATAG TCACTGTTAAGATCAGACCTGGTGGCCTCGATGACACAATGTAAGAAATATCTTAAAGTA CAGGGTCACAAATATGAAGAGATGAAAAATGATACAGGAAACGTGAGAACTGGACGAGAG ATCTGAGAGAACTAAGTGTGAATTGTAGGAGTTTCAGAGGGAGGAACAGAAACAGATGGA TGACTCAAAATAATAAAATCAAACATGTATTTTTGTTTTTCATTTGAACTGAAGAAAGAG CTGGGCCTTCGGACGAAATTGTTCAATGCACAATCCAGGCAAAGTTAATGACTTTTTAAA AAGGGTTGGAGAAATTGTGGAGCTTCCAATACAAAAATAAAAAGAAGTGTTTACAAGCTT CTAGAGACAAGAAACAGGTCACCTTAAAAAAGGAACAAATCAGACCAGTCACAGGCAACT AATTTGCTTCATCAGAAGTGAGAAAGTAGCAGAAAGCCACTCATAGAATATTGAGAAATT AGAATTGTAACCTAATTATTTCGTTCCTAAACAAGATAGTAATCCCTGATAGAAGTAAAA AAAGATGTACGTGGATGGTCTATGCTTTAGGGACTATATCATTCTTGTTCTTTGTGTAAC CAACAAAATTATCCCAGGAAAAGTGGAGTCAAGGAGATGAACAATGGGGAGGGGTGGGGA CAGACCGCAGGCTTCATATACATATAATTAAAATGGATAATGAGACACTTGAGAAACGCA ATAAAACAACCATAAGAGTGCTGAAAATTAATGAGAAACTCTTGAAATCAAATGAGTGTA AATGCTTAAAATTGAAAAGAAATTCTTGACATTGAAAGGAAAATCATAAAAAGAACCTGG GATTAAAAATATTAATGTTAAACTCTCCCAATTAAAACTCTGAGTTAAGGTGGGTGAAGG AAAAGAGAATTTTAAAATTCTCTTTCAGGTTGTGATGATGAGGAAAGGAGGGGAGTAAAT ACTTTTTTTTTTTCAGACAAACTCTCACTCTGTCACCAGGCTGGAGTGCAGTGGCACGAT CTCAGCTCACTGCAACTTCCGCCTCCCGTGTTCAAGCGATTCTCCTGCCTCAGCCTTCCG AGTAGCTGGGATTACAGGTGCCCACCACCACACTCAGCTAATATTTGTATTTTCAGTAGA AACAGGGTTTCACCATGTTGGTCAGGCCAGTCTCGAACTCCTGACCTCATGTGATCCGCC CACCTTGACCTCCCCAAGTGCTGGGATTACAGATGTAAGCCACCGTGTCCAGCTGTAAAT ACGTTCAAAAGAGCTCAATTTTACCGGCGAGGTGACAAGCAGGGTAAAGTTCTTGTTAGA GAATAACTAGCACTTGTGTCCAGGTATAGTAGTGTGACTATAAGAGTTGATAGAAATGAT GATCACTCATTAAATAAAGGCAACAGTAAATATAAATACAAGTTGTTCAAGGTTTCATAT TTTTAAAAAAGATGAAGACAAAAGAAGAAATTGGAGAGAAACAGGTAGATTTTGTAGCAT AAGTAAAGATAAAAAGGGGGAGAGAAGCAGAAAGGATAACCATTGGGTACTGGGTTTAAT ACCTGGGTGATGACATACTATGTAAAACGAACCCATGTGACACATGTTTACTTATGTGAC AAACCTTCGTATGTACCCCAAACCTAAAATAAAAGTTAAAAATAAAAAAGAAAAGCAATT GAGTAAAATAATAATTTTGTATATTTATATACATATACAACATATATATGCGTGTATATA CATATATGAGGGAGAAAGAAATGTCACATTGTTATAAACCAATGAAATTGGAAATAAAGT ATTAAAAAAACAAGTTTTTTATTTTATTTAACATAATCGTATCTGCTTAGAAATGAAAAA ACACAATACTTGATAAATCTTGGATCAAAAAAGAAAATGCCCTCAATTTATAAAGCTACA GAGCAAAGAATGCATCTACCAGAATTTATATGACATAGCAAAACTATACTTAGAAAATTG ATATTGCCTTAAGTGTCTTTATAATTAAAGAAATTTTCTGTATTAAAATTTCTATCAGAT TATAATTGTAAATATTTTAAATTGAATCAAATTCAAACAATATCCGTTAAGATTCATGAT TTTCTGTTTTAATATTTAAAGGTAATCAGCTCCATCAGTTGAATAATTTCAGCAAGAGTT TTTTCTTAAGGCAAAAGAAAAGGCATTGATAAAAATTCAGGATAGTAGAGTTTTGTATGA AAGCTGACATTCATTAGAATGTTAAAATCAGAACTCTTTACTAACTGGATAACTTTGTAA GTTTGTATTGCCCATTATGGACTTTGTATTGTTTCCTTTCTGTGGAACATCCATTCAATT TAAAATGAATCCAGTGGGGTACTCAAGCACAATAACAATTTTGCAATATACGTCAATGTT ATTATTAATGTTTATGTGTGCAATGAGTTCACCTATCATTTTATTAGCTAAGCTGTAATT TTAAACATACTTCCTGCATATAGCCAAGGAAGGACTTTGATATGTATGTAGTTATATTCC TTCAAGTACACTCTTTCTTCAAAAGCTTTCTAAAACCAGTGCACAAACTAAACATGGCCA GCTGTTAAATGTATCTCTTAAATATTAACTTCTCCAGTTAAAATTAGCACAATACAGGCC TTACACATAAGAAGCTATCTCTGAGATTATTATCGTATACTTAACTACATTGCTAACAAT GGATGAGAGCTTAGCAGCTAATAAACCTGCTGTTCCAGCTATAACAAAGGCAAGTTAATG TATTTGAAAGGAGAGTGATAAAATAACCAAGGCATCATAAACCTAAGATAAACAAAATCA CCTAGTGGTGACTAATTAACGTAACACATGCAAATCTTCAATATTTTCACTGCTTGAAAT CCCTTATAATGAATAATTGTATGAGACATTCATATATAAGGACTTCATTTGATTCTTTAT ATGAAATAAAGTTTCTTCTTCTGTTATGTGAAAATAAAGCCCACTCAAATGAGAACAAAC AAAAGCTATTTATTCAGAGCTTGTTACAGCAAGAGAGTCAGCCACCATCACTTGCGTTTG GCAGAAGCTCACAAGCAGGCAGAGGAGAGGGAAAGCTTCATAGCGGAAAAAATAGAAGGC TTCAGGTGCACCCTGACAAGAGGTTGTTGGCATGGAGAAGCTGGAGGTGGGCAAAAGTAG AAGTGGGACTTCCTATGCGACTGGGTGGGGGAGCATATTTGGCTTTCTTTGGTTGGTTTT AAGGTGGAAGCAGGAGCAAAAATTATGGAAGCTGGCAGTTATTGATTACTTGCATTTTTA GCTGATTGCTACAGAGGTTGTTGTCTGCCTTCCTGGACTGGTTGCTGCAAACTGTTTAAT TTTTTAAATATGGTCAGAGTTCTGTTTTAAAATACGGTCTGGTGGTTATCTGTTTGCATA TTTAGTCTCTCAGCTCCCATCCTGTGTCTGAAAAATATTACCTCAATAGAATTTGAATTC ATAATGGTTTTTAGCAGTATCAGAAGAAACAGACAAGTCTGGCTTCTGAGTAAATATGAT CAATCTGATCATCCCTTATTTTATATATTTTCTATAATCATACGAATTCCTTCTTGTGAT AATTTCTGCTATCTCCTATAGTATCTAAATATTTTCCAAGCACATAATTTAAACCCATGA AAATGGATATGGAAAGCTAAAATAGTCCTGTTTTATTATAAAGCATGTATATGCATTCTA AAAAAAATTCAGACTATATACAGTCTTGTCTTTGACCAGTATCACAAATAAATTCTTAAG GGCTAAAGCATATGACATGTATTGATGGAGAATGCATTATAGGTGCAGATTTTCAATTCA CTTGAATGAAACTTTCAGTAACTTCAGACGTTCAGACCTACACAGATAACTATTCCACGG CCTACAGCCAAAGGGCCAATGTTAGCTTCATAGTAACAAAAACAACCACCACCATAAGGA CAATTATTATTACTATTTATGAAACCACTACTGTCATTCAGGGTCTCTGTGTATATTCAT ATTTAAGTTTATTTAATCTTTGCAACACTTTAAATGTAATGTAAAACAGAAAGATAAGTT ATATTGACCCATTCATTCACTCAAAAATTAAAATAGTACTTGAACCATTTTTCTTTGAAA TAAATTTAAGTCTATTCATTTCAATTTGTTTGAATTTCAATTCATATAAATTAATGTATT CAGGGGCTCTTGAATGAGTCTGTCTGAGGCCCAAAGACAATTGTTTGACGTGGACGAGTC AGGAGTCAAATCCAAACCTGTCTGCATCCACTGTTTGTGTTCCTAGTCTAATATGTCCAA AGTTTCCTGTGAACTGAGGCTTATTCAAAGAAAATAAATGTTTTAAATTATCGGCTCCAA ATAATGATCAAGTTTTTCTACCATTGAAAAGTCAGTGCATAGAGCATATTAAAAAATTAG AAACATCCAAGGACTACAGGTTTATAGTCTTCCATATTTTCTTCTAAACTGATATTTTGT TTTCCAGTTGACACAGAGTAATCTTGACATGCAACTTGAAGATGTTAAGTAGGTATTCAT ATGAGATATGATGCTGACCAGAAGACAGATGTTCATATGTAGTAAAAAATATATTCCATT ATTAAAATGTATCAAATTAGAAAAATCAAAACTCAACCATCTTCATTCCTTGTTGATGGC AGAGAGTAAGAGCACACTCTTTATAAAAGACAACTGAGATGCTCATTTTTAAAAAAGCAT TTTTTAAAAGATCATGCATTTTAAAGGTGTTTCCAATTCACAGATCTACCATAAAAAACT TAAAACATGCACAAAAATGTGTTTAGAAAGAGACTTATTGCAATGATATTTATGACTACA ATAATATTCTTCAAGTATATAACATAGATATACAATGATAGAAGAATGGTAAATAAAATG TAGAATAGCCAAGTGGGGAAATACTATGCAGTGATAAATACCATGTTTACAAAATCAAAT TATATGTTAATATCCGGATATTTTTTGCTGGTTTTGTTTTTCTTTATTGTAGTAATTTCT CTTTGTAAATAGTCACAGTACTTTTCAACATCTCCCTTGAAGAATTGGAGTCCATTTCTC CAACTTCTAGATCTGGGATTGGACATGCGAAAAACTTTTAGAAACAAAAAATTTAGTATT AATACAATGTTTAGAAGTATACATGTAGTATATTATCATTTTGCAAAGTATAAAACATAT GAAATAACACTGTGTGGCCAGGCACGGTGGTTCACGCCTGTAATCCCAGCACTTTGGGAG GCCCAGACGGGCAGATCACGAGGTCAGGGGATCGAGACCATCCTGGCTAACACGGTGAAA CCCCGTCTCTACTAAAAATACAAAAAAATTAGCCGGAAGTGGTGGCGGGTGCCTGTAGTC CCAGCTACTCAGGAGGCTGAGGTAGGAGAATGGCATGAACTCGGGAGGCGGAGCTTGCAG TAAGCCGAGATCGTGCCACTGCACTCTAGCCTGGGCAACAGAGCGAGACTCCGTCTCAAA AAAAAAATAAAAAAAATTGTGCATTGTTTATGGACAAATGCATAGGTAACAAAATTATTA AATCACAGGTGGGAAAGGTACACAATTACTTAAAAAATGTAGGTATTTTTCTGGTAATAA ATGAGAAGGAATAAGGCTGAGAAGTATAAAAGGGATTTCAACTACATTTATAGCTTTTTT TTTTTTTTTTTGAGATGGAGTCTCGCTGTGTTGCCCAGCCTAGAGTGCAGTGGCGCGATC TCAGCTCACTGCAAACTCAGCCTCCCAGGTTCAAGCAATTCTCCTGCCTCAGCCTCCCGA GTAGCTGGGATTACAGGCAGCCGCCACCATGCCCAGCTAATTTTTGTATTTTTTAGTAGA AAAGGGGTTTCACCATCTTGGCCAGGCTGGTCTCAAACTCCTGATCTCATGATCCACCCA CTTCAGCCTCCCAAAATACTGGGATTACAGGAGTAAGCCACCATGCCTGGCCCATTTATA GCTTTTAAAATACCAAAAGCATATAAGCTGAATATCATTTTTAACAGACTATTAGAATTG TTATATTAGTTTGTGTGTGTGAAATATGTCTAACATAAATTTAAAAAGACAGTAAACTTA GCTGAAAGACAGAAGGAGGAAATGTGTAAGATGAACATTTGCCAGTCAGTATATGAAACA CCAAATGTTTCTCAGATAAGTTTTAACCAAATAGAATGTACGATGGAAAAAAATCTCATT CAAAATAATAACCAAGTATACAGCTCCTGGGGATATTTAACAAGAAATTTTTAAAACACA AATTCTTCAGTCAAATGGTTCTATATAATCTCAAATAAATCTCAGTGGAGATTACTTTGA TATCCCACAGTGAGACTAGAAATTTCAGTGATATTGTAGATAGTCACAATAGATAAGATC ATTTTCAATAAGAAGAAATAAAAAGAAAGGTTTTGAAATCTCAATAATTAAACAAATATG TTACTGATATAGTTTGGATATTGGCCACATCCAAATTTTATGTTGAAATGTAATCTCTAG TGTTGGAGGTGGGGCCTGGTGGAAGCGGATTGGATCATGGGGTGGATTTCTTGTGAATGG TTTACCACTGTTCCCTTGGTGCTGTCCTCATGAGATCTGGTGTTTTCAAAGTGTGGCTTC TCCCCAACACCCGCTTGCTTATGCTTTCGCCATGTGAGAGACCTGCTCCCCCTTCCCCTT CCGCCATGATTGTAAGCTTCCTGAGGCCTCCCCAGAAGCCGATGCTGCTATACTTCCTGT ACAGCCTGCAGAAGTGTGAGACAATTAAACCTTTTTCCTTTATAGATTACCCAGTCTCAG GTATTTATAGCAATGTGAGAACAAACTAATGCAGTTACTTATGCACGGTAATTAATAAAA CCTCAATGGATCACGATTCTGAAGAAATACAACTTAGTAAAACTTAGTGCCCTCATTTAT AAGAATTTATTTTTATATTTATTAACAATATGTAATAATTAACTATTCATTTCAAATAGC TGAGAAATCAAGTTGATAAATAGTTTGGGGTCAATTAACTAACCTTTAGGCAACTTAAGA TGAAGAAGGAAGAAGAGCAACAGCAACAACTAAGTTAAATTTTGAGAATCTCTATTAGAC ATTTGAATTTGGAATAGCTGGAAGCAGAATCCACCACCCCTTGCTCCTGCCACATTGCAG GTTTCACTCAGATGCAGACAGCACACTTGGGGAAGTAGAAATCTCTGGCCACAGATGCTG CGTGAGAAATTACCACTGGGCCACAGAATCCCTGGAGGAGCCAGCATCAGCTTCCAAAAC TGGGAGCTACCCTGTGAGCAATCTGTATACAACACTGGGCCCAGGCGGAAAAGAACTGCC AGAAATAATAACTTCAAACTCCAAAATAAGAGCGAATTCACCAAGGAAAGCAAATGTAAA GAAAGAAATGAACGGACTTAAAAATATCTAATTAGTGTTCATAGTTGGATTTAAGAGAAT TGCAGTGATAAAAACAATAGCAACTTGCAAAGAAAGTGAGGCAATCAGAGCAAGAAGCGT TCTTGGAAATAGAAAGCATGATTGCAAAACTTAATAGCTCAGTAATAATTCAGTAACAAA ATGGATAGTTCTAGAAACTGAATTTGTGATGACCCACTCTTATTAAAATTATGGGAAAGG GAAAGGCTAAAACACATAGAAAATGGTAAAGTACATGCTTGGCAAAACCAGGCAAGCCAA TACCCATTAGCAGCCTATAGAAAGAAAAAAGGATGGAAATTAATAATCGAACTAATTACA CATGAGAAATTTCTAGAGCAAAAGGAAACACTGGGACCTCTTATTCCCGCATACACATCC TATTAGAATTTTTGAATTCCTATGTTAAAAATGAAGCGCTACAAACTTTCAGACATACAG ATGTATACATGCAAAAAACACAGCACTGAAATAAACAAAAATAGCGAACATACGAATAAG AAAAAAAAACCAGGTTTACAAAGGAAAGCGAATCACAATAGTTGTGTGGCTCTGATCTGT AGTACCACATCACTATGTGAACAGTTGAGAAAAAAATCATTGCAAAAATTCTCAAACTAT CATTTAATTGGGAAGACAAAAGCAGGTTGTTAGAGAATATAAATCATATTCTCATTTCTT TTTTTTTAAACTACGTACATTGAAATGTCTTAGAGTAGATATGGATTATGGGGAAATTTA ACTTTTTGGACTTTTTTAACAAATGTATAAAGAACTCTGTTGTTCACAAATTGGTATCAT ACTGTGTGTCAACATGGATGGAGTCTCAGTTTGGGCCAAGCATCGTGATTTTCCTGACTT TAAGGAGGTCCTCTTCCATTATGGCAGACAGGAAACAAACAGTGCAAAACCAATGAGCAC ACATGGTGAGAAAGATCACCTATACGTGGTTTCACGGGGCTATATTTGCAGGCTCCTAAC TCAGCCAAATAAACGTGTATGGGGACTATCACTATAGATAAGTCTTAAGGAAAGAGCAGG ATTTAGCCAGCTCACAGGAGTGGAGGAAGCGTTCCAGGCAGAAGGGAAAACATGAGGCAA AAACAACACATTGTGTAGGAGGAAAGAAGTAGGACAACAAGCTGAGCAGTTGTCAGAACG TTTTAAAAAATGAGTCATTGCATTAAAAGAAATGAGGCTGAAGGGGTTAGTTATGCTCAA ATCATAGAGGGTCTTATAAACATACGCCAGATAATTGAAAGCATTTTGCAGAGCCAGAGC ATAGATTTTCAATTTTTGGAAGTAAAATAACCCTTTACTCAAACAGTATCTACCTAGAGA TCTAATATAGAAAAATGTGAAAAAAAAACCTTACAAGTTTAATTATATGAGCTACATTTG ATGACATCAACTAACATAGTCAGGCATTAGATGCAATGAGGCCACTGCAATGAATCCCCA AAATCATACATTCTGCATATAATTTATTTTCAAGTTTAATTTTACTTGCACAACATAAAA AGAGTTTGAAATTATAGAGACATATTTTCAAATGGTCACTCAATTTAAACAGAAGTAGCA AAAAAGGCATTATTCTGGGATCTGGAGAGAAAAAGAGAGTGAATGCTAGGAATAATAGCA AATATAATAAGCTGACCAGTGATGAGCCATTTAGGTGAACTCTCTGAACAGGCTAAGTAT TTGGTAGCATTTCTTCAGGATTTGCATGATGTTTATTAATGACAGAGGGCTGTTGATTTT CTTTTAGGAAACACTGTATTTCTTTGTATTCAAAATTGTTCATTAGCTAGTCAGAAAATC CAACTCTCAGCATTTAAGCAAAAGGGAGAAGCCAAGAGAAGATATGAGGGCTCACAGAAT TGCAAAGAGGATGGAAAAAGCTTGGAAAATGCACAGGAACCAAGATAACGCTAAAGTTCC AAAACCAGAACTCTACTTTCATCAGGGAGAGTCTAGCCAGGATGCAAACCACGTGTTGCA TGGCAGTTTCCACTTCAGAGACACTATAGCCATTGCCACTGACCATTACTAACCATCCCA GCATGAATGTCTTTTAGCTGAGCTCAGGTCCTGGGCCCATCCTGGTTCCTTGCAGATGGG GAGAAGGAATATCTTGCTCCTGGGGCTTTTGCAGTGGGAAGGTAGCAATGGCTACTGACA AAGAATGGGAAGATTTGGCTTAAAATTTAGAAAGTAGAAGTCAACAAATTGCAGAAAAAA GAGATATTATGGAACTTCCTGATAACTCAGAAAGGAATGGTGGTGTTGTGTCTTCTGCGA ATAGCACGGGTTCATCTTCTGTTCCCTCCACAACACCTTAGAGAATTCACAGGACATCAG ATGGAGGTAGCTGCTGGACAGTCTATGAAGACTGGCTAGCAGGTGACTTTTCCTCTAGCC CGTACAGTGGAGAAATACCCAAGGTTGGTAGAGAGTGGAAAAACACCTGTCTTCATGGGG CATGGTCATTCTGACGACACACTAGTGTGCACTAGCAATATGTTATTACCAATATGAACT GAATTTCAGGGGAGGTCCTTCCTTGAAACTTCTGTACTCCAGAAAACTCTTGAACATCCC TAAGGCAGCAACTCAGTGGGTGAGTAAAGCAGATTAAGTGAGATGTAGAGAAAGAAACAA ATAATCATAATTTCAAAATAGTCATAGCACTTTATGCCTTCATTTATTCCTCCTATCCCC CCATGTAGTATGTACTACTAGTATTATCCACCATTTTACATGTGTTAAATATGAAGGAAC CAAGAACTAGTGGGATTAAGTAATATGTCCAGAATTACACAGTTAATAAAGAGCAGAAGC AGATGTGACATCCAGGTAGCTTACCTGAAGTCTATGTTTGTAGCCTATATGCTGAACTTA TTTCGCAGGGTTAACACTAAACTTGATATCAACTACATTTGCATAAAAAAGATTATTTTT TTCATTGCTCACAACTTAAAAGCATTGGTTACTCATACTCATGAAGAAAGTGGCTAACAA TTCTCAAAGCTTTGTTTAATAAACATGTAATTCTTTCTGTTTTGTGTGAGAAAATATTTT GCTCTATTCTATTGTTCTTGTTTTCTCTTTCAAGTTCTTTTGCAATTTTCTAATCAAATA TCTTCTTGAACAAGAGATTAAGGATGTGAAAAATAACTAGAGATAAAGAAATAAATTGCT TATTCTTAGAAAAGACTACAGGGAAGTGGATTTGGTTTAGAATTCATGGTGATGGGGTAA TCAACATCATGAGACTCTTGGCAGAAATTTACTTATTTGCTTTGTCATTTATTTTGAAAT ATTCAACATAGTTCAATATATAACATAAAATTTCATGAAAACTCATGTTTAAATATGAAT TTATTAGTGATTACCTCATATTCTCAGTCTACCTCATGTTCTCAAAAACTGTGCTAGCCG ACAAAATTTCTCACTATTTGGAGGAACCAGGCAACATCCCCCGTATTGTCTAGGTCTCAT ATCTCGAGATCATCTTGCTGTAACACAGTGAATTTTTGGATCCCATTTATTTTATTTTAA AAATAAGGCTGGTGTTTGGGGTTAGTTTTACTCTATATTTTAGAGGTGGTTAGTTAACAA CTCCAGTGTTACTTACATAAAAGCCCGTTATTCAGAAATTTACAATTCAAATATAGTTAC TCTAAGTGTAAGGCTGTCTTTAACAACTTAGGTTAACTACTTAGTTGTGTCAATTAGCAT GACAATATTAAAAAATATCCAAGAGATGTCCATTGACTAGAAAATTTAAGATTCCCACTC TACCAACAATGCATTGAGCTCAGCCCCCTGTACATTCTGGAGCAGGTTTAGGATTCAGAA GTAGACCTGTATTAGCAAATAATCAGACATTTCTTCTGCCTGACCTGAGATTTAACTGAA TTCTGTTGCTAAGATGCTTCACATTTGTCTTGAGTGAGTGTTTTGTGCACAGTTCAAAGA CAGAGAGCTCTGACTTCAAGTTTTCAGATGTGATCAGACAATCCCTTTTGTAATTTCTGC TAATAGATGGTTTTATACGTGGTAGCATTGGGTCTGAGATTTGCCTTCATTTTGGCACCT ACTATTGGTGACAGAGTCAGAAGGTTAGAAACCCAAGCACCTGCACTATTCACAATAGCA AAGACTTGGAACCAACCCAAATGTCCAACAATGATAGACTGGATTAAGAAAATGTGGCAC ATATATATCATGGAATACTATGCAGCCATAAAAAATGATGAGTTCATGTCATTTGTAGGG ACATGGATGAAGCTGGAAACCATCATTCTCAGCAAATTATCGCAAGGACAAAAAAACCAA ACACCGCATGTTCTCACTCATAAGTGGGAATTGGACAATGAGAACACTTGGACACAGGAA GGGGAACATCACACACTGGGGCCTGTTGTGGGGTTCAGGGAGTGGGGAGGGATAGCATTA GGAGATACACCTGATGTAAATGATGAGTTAATGGGTGCAGCACACCAACATGGCACATGA ATACATATGTAACAAACCTGCACGTTGTGCACATGTACCCTAGAACTTAAAGTATAATTA AAAAAAAGAAACCCAAGCACCTCAGCTACCTCTAAAAATCGGGGAATGTTCATATCCAGT AAAAATAACCAATAATTGGGAATAACCAAATCAGCTACATAAGTTTGTCAGAGGAATGTG GTTGGGTCATACACTTCACCTGGGCCCATTGTAAAAATATTTAACAAAGATACATCAGTA CCAATGAAAATTAGGTTTTTGCTGCTGTTGTTTTGCTTTGTTTGTTTTTGTTTTATAGCA CTTTGGGGAAAGAAGAACAAATTTACATTTTGCCGATGATCTAAACATTTTCTTCTATCA TAAAGTTCCTATACTTAGTACAAAGCTCTTAATGCTCCTTAAATGAAACATCGTGAGCAG CCATATGGTGACCTGCCCCTTAACCTAGCACCAATTTTGAGGGGTTAAAAATAAATTTTA TTGAAACATTTTTTATCTTTCTAAAAAGATATAGAACAGGAAAACTATTTTAAACTAAAA TTGTAATGGAACATTGGCAGAATCCCTGAAGCACCTGCATGCAATGAACAGTCTGAAAAC TGCTAGTGTAGGTGAAGGGAAACTAGCAAAGGATTATACGGAAGGGAATGGCACTGTCAG ATTTACATTTGAAAGATAGTTCTGCATCTGTGGGAAGAGCAATTCTGATGAGAAAAATAC TGAAAACACAGAACTCCATTAAGAAGGCAAAGATGAATTAGAGCAATAGTGGTAGGAATG AAGAGAAGCTGGATTGAAAGATTATGTAGGAAGTAAAAGCTGCCAGGATTTAAGTCATTC TACTCTCTTCTAGTCTCATTTGTAGTCTTTCCAAAAAGCCATTAGATTAGCTATTTCCAC TAAAACTGGCTAGATGGTATAATAGTGAAGAACCCGGACCTTTATTTAAATCCCAGATCT GGAACTTACTAACTCTGTGATGCTGAGCAAATTACTTAACCTTTTGGTCCTCAATTTCCT CATCTGGAAAAATGGGAATAATAATTTCTACCTCACAGGTTTAATAGTAGAGATAAAAAG GAAAAAAGAGTCTATGCTAAAAGATTACAATAGTGCCTAGCTAAGCAAACAGTAAACGGT TACTTTTTTTTAACTCAAGAAAGAGGCAGTTTAAGAGAGGACAATAAAAGAAAAAAAGGG CTGGGCGCAGTGGCTCACGCCTGTAATCCAAGCACTTTGGTTGGCAGAGATGGGCGATGA ACTGAGTTCAGGAGTTGGAGACCAGCCTGGCGAACATGGTGAAACCCTGTCTCTGCTAAT AATAAAAAAAAATTGGCTGGGTGTGGTGGCGTGTGCCTGAAATCCCAGCTACTTGGGAAG CTGAGGCGGGAGAATCGCTGGAACCTGGGAGGCGGAGATCGCGCCACTGCACTCCATCCA GCCTGGGGGCCAGAGCGAGAGTCTGCCAAAAAAAAAAAAAAAAGGTATGTTAATGGTCTA GATGGATATATTAAATAACAGCGTAAGAATTAAGCAGTATTGCCGAAAGGAAATCAGGCT GTGTAAAAGAGAGTAAGTGAAATGAGTAAAACAGTGTTACTTTTATTTGGTTGTGCTTGA TTCAACCTGTTTATTACCAAGTGAAATTTCGTGGATAGCAGAGACTTCATCTGCAAAAAT AAAATAAAATAGTGAAAGGTGAGAAGATGAAGAAAATAGATGTGCCAGTGTGAGATTCTT CACAATTTGCAAAAGGAATGATTCTCACTGGCAAGTTAGCTTGGGTTTGTTAGCGAAGGA AAGGCGGATCGGATGAGTTGTGCAATAACTGGCTGTTTGACTGAAGCAGAAGCAGCTGAA TGCAGCTTTCCTGTTACATGACTTCCTGCAGGTCATCATCTCTGCATCTCCCTGGGTGCA AAGGTAGAATTCCTCCTGTGAAAAGCCAGGATAAGCTTTTCTCTGGCCTCTCTAATTAGG ACTGAGAATGAAATAAATTATCAGACTCCTCTGGAACTCCCATTAGATGTCCTGTGAACC TTTAATTCCTCTTGTGCTTCCGAGCCCGGATTGGAGCAAAGAAGACATATGTCCATGCAT GAAATCAAGTTTTTGTACACTCTAGAAGTATCTACTTGGTAGCATGGATTGTTTCCACTA AAATAGTTGGAGCCGCTGTCCTAGCATCCTTTTTCTGTTTGTAATTACAAGCAGCCAGTT TCCCCTAGGGAATAAATTCTCACTTTTTTGACCATTTTATTAACATACATTTTTGTCATC TAATAACACTTTTGTCACACAATATTAATGATAAATTGTGCTGACCTTGAATATCACCAA AAAACCAGACAACCTGGGTTTTTTGTTTTTTTTTTCTGACAGTGGTGATAAATTTTCACT ACTTTTTAAATTTTATTCATTTATTTATTTTTGAGTTCATCTCAGTCCTGGAATCAAGTA AATCTGGTTTATTGAGAAATTCTACATAATGTCATTTTGACAGAGTGGCAATGGGTTTTC ACATTACTTCTAAAACTTATTCTCAATGGTTTTATATCAGAATATAATCCCTAGTGTGAC TAGAATTTAATAGGAAAGCAACACAAACAACTGTCCCTGTTTTTTTTTCTCAATCCTAGC TCACCTTCCGCTATGCCAGGAAATGTCTCTGGATGCCTTCCAACACAGTGATTTATGATT TGATTGATTTATGATCCAATTGACTTATCAATCAAAGTTGCCACGTAAGACTAAACATAA TATGCCATCCAGTCCTAGGCTGAAAACTTTCTACATGGTCCCGAGCTTGGGCAATTCTTC AGTTGGGCTGAGATGGCTGAAAATGTCTGATACAGGGCTTCTCTTTTATAAAGTATAAAG GAGTTTATTCATAAATGGTTAGTTTCCCAGTAAGAGTACAGATTCTACACTCCCAAAGTA AATGGGTACTCTAAACACAATTCTCTTTATTTATTTATATTTATTCTAACTAAAAAGCCT CTTTCATAACTTTCTTTCAGCAAACATTTATTGACATCCTTAAAAGTGGCAAGCACTATT CCAGGCACAATGATCATCACAGGCAAAAATCCCTTCCCTCATGGCAATTACATTGTAGTT AAATTGTGGGGACACAGTCAGTAAACAAATAAATGGAGTAAATTCATATAATGGCAGATG CAGATAGTGCTATGGAGAGAAATAAAACAGAGAAAGAGACTAGGGAAGGGTTGTAATTTT AAACAGTGTGACCTAGAAAGTGTGAACTTAGCAGACACATTTGAGCAAAGACTTGAAAGG TGTTGAGAAGCAAGCCTTGAATTGTCTTTTAAGTAGAGGTCACAGCAAATTCCTCCCACG TGTCTGATATTGTGTTCTGTGAAGGAGGAACAGTGACAACACCCGCCAGTGTGTCCAGAG GGCAGGAGCCAAGGGCAGAGTGGGCAGAGATAAATGCAGAGAACAAGCAAATGAGAGGGA AAGAAAGACAACGTGGAAAGACAGGAGGGAGAGGAGGTTTGAAAAAGATCAGAGACCTAT CTGCTTGGAGCCTGTTAGGATGGGGCTACGTATTAGTCATATCCCAGTGGAATGGTAAAA AGACTGCAGGAGTTCAGGGCAGAATGCAGGAAGCAATGCTCCCAGAGGGAGAGCTGAAAT TAGCATCATGCTCAAGCCTGAGCCAGGCAGAAGTGACCCAGATGGGATTTAAAGCTCCTT CCTTCTGGACTCAGGAGACTGAGGCAGGAGGATCACATGAGCCCAGGAGTTCGAGGCTGC AATGTGATACGCTTCTGCCTGTGGATAGCCACTACACTCCAGCCCAGGCAACATAGTGAG ACATCGTCTCTAAAATATAAATAAATAAAATAATACAATAATAAACACATAAGTAAATAA ACATCTTCCTTCTGCAGGAAGGAATAAATGATTGGAGGAGGCAGAGACAGCCTGGTGTTA GAAGACCTAAAGTCACTATAATAAAATACCATCTCTAAAATACAAACAAATAAAATAATG AAAAAATGAATAAATAAAAATCTTTTTTCTGCAGGAAAAAAAAATTATTTAATGGGAGAA GACAGAGAGCACCTGGTGTTGAAAGACCTAAAGTCAGCTCTGAGGAAATAATGGGTGGGA GGTAGTTAACGTTCCAGGTGAAGGGGGAATCTACATGAAAAAAAAAAAAACCTCATTTGA ATAGATGTAGAGCCCAATCCCAATCCTAATGCAGGAAAAGGAAGTACATTTGTTATAGCT ATAGCCTCTGTACTTCTCATTATATTGCTGTGGTTTAAAAAACAAAAACAACAAACAAAC AAAACAGAAACACCTGATTCTTCAGCAAGACATGATTTGATATGTATCTGTTATCTGGGA ATACTAGTGAGGTAGAATGTTCAAAGGAAAGGACATGAAGCACTTCCAAAGCATCCTGTG AGAGCTCCAGTACACACAGGGCTAAAGACATGTAAATTAGCAGCTGGAGTGACCACATAT AGACCATTCATCAGAGTGAGGCATGAGAGGAGAGTGGCAGAAATAACCTACCCTCCAGAT TTAAGGGCAGAAAATCTGGATTCCCTGATGATCCCCCAACATGTCAACAGTAAGACACTT AGACACAGAAAAGGCAGAGTGCTGCTCTTGCTGTTACAATAAATACAAAAGTTAAGCTTC AACTAAATTCCTTCCCTTTGTTTCAAAGAGCAGTATACAGAAATCCTTTCAAGAGTCCAA CTCATCCTCAAGTCCACCAGTGTAAATTTCATAATGTGTCAGGATCAAAATAATTTTTCA GTCTTCTCAGTGATTGACCCAAAATCTACAATAATCAGGAATACGTTCTGTAGCAATTAA GTCTGTATTTATACATTGTTTTATGAAAATGAAGCCTCTTTCTTTTTGGTCAGGATCTGT CATTCTGATCATCCTTGGGTGAGAATTGGGAGGGAGCAAAATGGTCCATGCCATGGAACC CTATTATGAGAATGACCACATAGAAGGGTAGTTCTTAACCTCCTGGGAATCAAAGACTCA GTTGAGAATATGCTAACTACCATGGACATCTGATTAAAAACACAGAAAATAAAATACTTG GCACCTATGAAGAGATAGAAGTTTGCATTTTCAGGAGATTCATAGTTATTTTTCCGAATG TCTCATTAAATGAAAGGTCCCACAGTCGTCCCGCTAGGGGAGAGCAAATTAAAATAAAAT CAAGACCCAAGCTTCCCACCTTTCATGATCTCCACTGCTTCCTGCTGTCTTTTTTGTGGA TACAGGGGTGTTAAAGTGTCATTGTTTATAAACCTACAATAAAATGCAGAGCCCTCACTA CATTTCTAAACCTGAAAAACTACCTAGATTTTAAGCAAGGGAATTATTCTCTGCACATCT TCTTTTTAAAAAACTGTTTAGTAATGATGCTTCATGTAAAGCAGCTGCCGCCTCTCACAA AGAAGCCTCCACAGTGTTGCTGGATGAGTCATGAGTCATACATGAATATGGAATTAGCAA AATGATCATTTGCTCAATTGTCAAGGCCTGTCTCTGTAGAATGAACGCCTATTGTGAAAG TGCAAAATTTCTGTGAAAATACCAAAAGGAGGAGAGTTGCTTTTATATGGGGTAGGAATA TTGGACGCATCCTTGCTCAGGCTCAGGTAAAATAATATATACACCACCCTATAAGGAATG CAAAAGAAAACTGTTGTTTTGTTGTTGTTGTTGTTGTTTTTAGTTATCAGTAAAGTACAG TTAGTTCTTCTCCGTAACTCCTGGGAAGTGTACTTTGAAACCAGAGGCACCCATTTCAGT ATAGAGGAACCTTTCAGAACCTTCTACCTTCTACCAGTTTCTCCTCAGGGATTAGTTAAA TTGGGGTTAGGGACAGACAGATGAGAACAGGGGGTGGGGCCTTTTGGGTGGTGATTAGGC CACAAGAGTTGAGCTCTCAGGAATGAAATTAGTATCCTTATGAAGGAGATCCTAGAAAGT CCCCTCATCCCTTCCACTCTGTGAGGACACAGTGAGAAGGCTCCCTCTATGAACCAAAAG TAAGCCCTCATCAGACACCACATCTGCCAGTGCCTTGATCTTGGACTTCCCCGCCTCCAT AGCTGTGAATAATTTTCTGTTGCTTATTACTATCAGGTTTATGGTATTTTTTTTTATAGT AGCTTGGAAGGACTAAGACAAGGCCTATATGAGACACCTTCGTGGGAACTCGGGTAAGTC ATCCTTCACAGAAGAGTGAAAGATATGGAAAATGTCCCAACTCTAGTGAAAAGAGGGAAG TACCTCAAAGCTTTCAATATTTAGAAATATGTATGTGCTTATATCATTAGAAATCAGTCT TTGAGGCTTAGAAAAGAGAATGTTCATTAATATAAACCTGAAAGTTGTCAGAATGTACAT TTATGCTTTTTCTGATGAACATTATAAAATAGCAGGAGAGTAACCTTCTCAGCATTTTAA AAAACGTTATTCCTGATAAACATTTTTTTCCTAGAGAAACATGTCTCTTAAATGGTAAAC ACTAAGATAGTGGGAGAATAAATTATTTCCAAATTACACAGTTATGTTCAAAGCCTGGAG AGGTAATATTTTTTCTTTTTTTTTTTTATGTTTCACTTTTTTGAGATGGAGTCTTTCTCT GTCGCCCAGGCTGGAGTGCAGTGGCATGATCTTGGCTCACTGCAAGCTCCACCTCCTGGG TTCTTGCCATTCTCCTGCCTCAGCCTCCAAGTAGCTGGGACTACAGGCACCCGCCACCAC GCCTGGCTAATTTTTTGTATTTTTAGTACAGACAGGGTTTCACTGTGTTAGCCAGGATGG TCTCCATCTCCTGACCTCGTGATCCACCCACCTTGGCCTCCCAAAGTGCTGGGATTACAG GCGTGAGCCACCGCGCCCGGCCTATTTTCATTTTTTAGTCAGTGTGGAAGGCAATTTCAG AGGCATACTTCAAATTACTCCATAGCTTTACACTGTTGAGATGAAGACCACATGCTAATG AGAACTTAACAAATGCAGTGTAATAACAGCAATGCGCTCATGAACATATGTGATTTTAAT CCCTTCTTAAGTATTAAAGTGTACAATCTGTAGATAACGGTTAAGATTCTAGATTTAGGT TTGGATTTAGACAGTTGAGATTTTAGAGGGTTACACTCTGCTTTCCAGTTTGTGCTATTC TAAGCTGTTTAGTTTATCATTTCTATGACATTCCAAGTCAAACGAGGACAGCTTGATTTT GCTGATAGCTGATGAAACTGTAAAATGCTGCATAATTAGATAGAAGGGAAGTATCTATTT AAGAAGGAAACTAAACATCCAGGAAGTTATTCTATGAGGGGGAAAAAGTGATGTGAAAAA TATTTTTGCCCTGTTACCAGACTTTTCCAAGAATTTAGATTTAGCTTTTGTTTACAGCAT GGTTTGACATTCCTGGATGTCTTTATATAATTGACTTAAGTAATTGACATTTGAATCGTA CTTTCTAGGTATGAAACTGCTTCACACATACTGACTCCTTTAGTACTCCAAAATAATTGT AAGAAAAATATTGCCATTACTCAGTTTAATAATAAAGACACTTGAGCTTCCACAAGTTAG ATTATTTTCCCAAAGTTATACAGGATAAGTGGCAAAACTGGGAAGTAAATTCAAAAATAT TTTGTCTTTTCCCCACTATCATACTGACTTTAGCTTGAGAATGTCTAAGACTGAAAATGA GGAGTCAGTCATCTTGATTTGTCTAAAATCTCCTGACTTGTATCTCTGCGGCAGTCTCCT CACACAAACTCCATCCCTCCTACATACTGGTGATTCATAAAGCAGAAGCAATCAAGTCAC TACCTACTCAGGAGGCTGCTAGCATCTTAGCCCAGGAATCAAGGCTTTTAAAATACAGCC AAATCACATCTTCAGTAATCGTTACAACAGTTATAGCAATTGCTTACACAATGTTCCTAT TTATTATGTGCAAGACACCATTCCAATAATTTTGCATATATTATCTCATTTAATCCTAAC AACAATGACAACAAAAACTCATGAGGAAGGTACTATTAGGACATCAATTTTCCAGCAGAG GAAATATGGAAATCTGGAAAATGAAGTCACTTGTTCAGGATATCCTGTCTTCCCTTTCAC TGGGTTCATGATATACTGCCTTTTCTTTCCATTAACAAGGTGAGAAATAGAAGGGTTGGG GGTGTACAGCACCTGGATATGAAGCACTATCTGTAGTTGGGAGGGGAAACTGAGGACTGT AGGTGTGATGCATTACGGAATTTGGGATGTTTCATAAATTTATCCTACAGTGAAAGGGAA AGCTTAGAGAATGACAAGTTATGCAAGAAAATGCTATTCTCAGAGACCAAGAAAGGCACA GTGGATGCAAGATAATCACATTGTTAATAAATTGGGATACCACACAAATTAGTGTATATG ACCACATCCAGCTAAATGCTGATTATACCAAAGACTTCTGAAATATACTAAAGATGTAAA AGTTGGAAGGGCAATTAAGTAAACACAAAAGAAAAGAGAAGAAATGGAAATGGAAATTGG AATATTGTTCAAGCGAATTTACATAATTAAACCAACTATGTACTAATTATATGAAACACT TCTGAAATATACTGCATGTTTAAAAGGAAAAAAAAATGTAAATAGCAAACAGATGAAACA AGAATAGAAATACCAAACTGCATTGATATAAAAGGAAGAGGTTTGTTACTGAAACCAAAA CTGCTGTTTTGTCCTGAGTGATGGAATACAATGTTTATGACTAGAGGAATACTCTCTTTG TGCTGCTTTCAAAGCCGTATTTCAACTGGAGAATGGAAGAGAAAGACACTGAAAAGATGG CTCCCTCCGTAGTGGAGCAGTTTAACTAGCTTTTGTGCAAGATAGGACTAGGGAATCCCA GAGCTGATTTGGGAGGTATGAGATAAAAAGAGATTTATCTGAATTGGAAAATAAGGGAAA TTTGTTGTTCATTCTTTGTTATTTCTTAGTTCCAAGAAGGAGGAGGAAGATAAATATCGA AAATTAAATTTACCATGTTTCTCTTTGGACTACATAAATGTCCTTGTTCATCTCTAAGTT CTCAGTAAAACACAACACAGATAAACCCTCACGTGTAAGTCTCTCGGTATGTGGGGTTCT GAGTGTGTGACTCTGTGTGTATGTTTGTGTGTGTGTGTTTGCATTTAGTGCTCCAGGTGA CCATTGGTTAAATCCTGAAGTATCCAAACACCTTCCAAGCTTCTCAGGGTTTTCTCATTT CTCTTAGGCAAATACTATATTTTTAAGTGTGACCACTAACTATTATTTTCAACTATGTCA CATGAACAGCTTTGTGCACTTTCTTGGAATATAACTTTCATATACTGTTGGAGATGAAAT GCGTAATATGTGCAAAATTCATCTGAGAAATCTCTGTCCAAATCTGTAACATCGATGCTA CAAAAAAGCAGAAAATGTACTTATTACGTTGCCTCAATAAAATATTGTAAAAATATTATT AACCTTACCATGGCCAGTAATTTCTGCCTAAAAAGATTATACAGGAGACAGAATACCCTT TCCTTTTAATACACATTCCCAGTTTTGAGAAACGCCCCTTTGCAATCATGCATACTTCCC CAAACTGGGTCTAAATCATTAATGATTCACCTAAATTATTAACACTCTCGAGAGATCGAA AAACATTACACACCAACAGTAAGCGGTAAAGGCCATGTTAGCTTAGACACCTTGACACAC AGACATAGAAAATGCTTATAGTTTCAGTTCTATAATTTCAACCAAAAATAAATATAAGAA CACAGCTACTCACCTGTCGAGATATGAAATAACTTTTCTTCTTCCTAATGGGCGAAAAAA TTCTTAATTGATTTCAGCTACAATAGAAAAATAAGCCATCAAGCTAATAAATAACAAAAC AGACTCTATGTCATCTCTCATCCAAGGGATAAAATATCTCCATAGACTATTAATCCATTT ATAGTGATCAACAAATATGCAGACGATAAAATCTAATTCCTAATCATTGCTGCCACCAAT GAGGAATAATAACTTATCAGCCTTTAACAAATGAAAAGCAAAAACAAACCACAAAAATAT TGGAGAGAAGAAAGAAAATTTTGAAAAATAGAGTCGACAAAGTTCTACTGTCACATTGGA TCTATCATAAGGAGGTTTATTCTCTTCATGAACTACACCACTTCTCTGGTGATGAAGTTT ATTTGGTTCTGTCAGGTGAATCTGTCAAGCATTTTGGTGGAAGACCTCCAAAATTACATA CAGTTACAATATCTAAGCATTGGGATACCAGTACACAAATAGAAAAACAGTTCAATGAAA GATGAAATAGTCTCAAAGCTTCCATAGAGTATGTAGAATAATTTAATACAGGCTTACAGA GGCACCACACATCACTAGAAACAAATAAGGATTTTTCAATAAAAGACTCTGAGAGAATTA GTTATTTGGAAAGAAAATAAAATTAAGTCATAATCTTATACTTGTGCTAGCACAATAGAG TCCAAATATATCAAATGAAAAAAAATGAAAAAAATCAATCACTTTAATAACTACCAGAAA AAAAATAAGATGGTCATATTTGCACTGTTTGGGGAAAGACTTTCTAACATTTTATTTTAA AACTCAGATACAGAGATTAGATTATATGGTACTGTTGGTCTGTAGTCCGTTCTCATAGCT GACCACTTTAAAGCTCTCTTTTTGCCTCATTTATTGCTTGAGCTGATGTTCATGTCTCCT ATCCACTCTCTTTCTACTCCTCTCATAGAGGACCATTTTGCTGTTCTTAAATGTTTGCTA TTTTCTGTTTATAGGTGTTCATTATATACATCTGTTTTTAATTTTCATAAATATCATCAT GTTATGTATCTTATTCTACATTTATATTTTATGCTTTTAAAATCCCTCATGTTGCTGTGT TTACAATTATAACTGCTTCAAACTGCTGCATAATACTTCATGGTCAGCAGACATGGAGGG TTTTAATGTTTTGTTTTTGCTTTTGGTTTGTTAAAGGCCATTAGATTATGAATCCTCATT GGTTGTAGCAATGAATGGGGTTTTGGGTCTTTGGTCTGATTATTTCACGATCACTATAAA TAGGTTAATGGTTTATAGATATCTTTTATTCCTTGGGTGAGAGATGACAGAGAGTCTGTT TTGTTATTGATGTGTTTTATTCCCATTAGTTTGTCCATGTCTTATTGGACAAAGCTAGTG CCATGGCCAGGTGCAACATCAGTGTATAAGGAAATAGTTCTCTCACTTAACTGAAAAACT AAAAGGCTGAAATCAATCACCCAGTCTGCCATAGAAGATATTTAAGGCAACATTAAAGTT GTCGGGAAACTTCTTGGCATTTCAGTAACTTGTTTAACAGATACATCTGAAACAACTGGT AGCAGAAGAGTATGGAAAGTTACAGGGGCTGAGAGAGAAGAAAAAGAACAGGCTGGGAAT GAAATTAGGGTTAGGATAGATGACTAGAGGTGTTTTCCCTAGGATAAATATTCTAGATCA TTCAGAAGATGAAGAAATGCATTTTGAGCAGTGTACAGGAGCCAGTCAATTGAACTAATG GATATCATTCCCCCAATTTTTCCTATTGAAAAATGTAATAGATTGGAGAACATGAAAAAA ATTCAAGCTGGTAAAGGTAAATACCCTTTATTTCAAATTCTTTCCCTTCAAGCAAAAATG CTTAAGAGACTTTTTACTGCCCCTTTAAGAATCCCACAGTCTTTTGAGAGTTAGGAACAC TGGAGCCTAAAAGACTCCCCTAGCCTGAGGGAGCTCCATTGTTATAGCATGTGAGGAGCA GTATGCAAGTTATTCTAGCTTTACACCTTTACCTCTGGATAATGGTCCTATTAATAGAAT TATGCTGAATAAAATATAAAACAGTTGAAATGAATGACTATGTCTTAATTAAAAAGACAT TTTTATAAAAGCACTCACCTCCACATTGTTCCTTAATCGGAAAAGGCAATTAGCCACATT TTAGAACATTTCTAATTAATCAGAATTTCCATGATATTAACTTCTTCATAGTTTGAGCTT GTATCTGGTAAGATTCATTCATTTTTAAACCTGAGACTCATTCATCTACATATATAAATG AGAGTTGGTCATTTATAACACTATTTTCTATTCATGCTTGCTCACAGATTCTATATGCCA GTAGATCTGCTCCTGAATGAAAGCATATTTAATCAGTACATCAGCAATGCTACATTTCCG TTCACAGCAGAGCAAATGAGATTCCAAGCCTATCTTAAAAAAAAATTCTCGATTTATAAA AACATCTAAAAACAACTTTTCGTATTAATTCCTTAAGCACATTCCCAATTATAATTTTTG TTTATTTTATTTTCTCCTATACCAAGAAAGGCAGCACTATAGAGTTGACGAGGCACTATT GAGAAGCAACATAATTAAGTTGCCAAGCCGTGTATCTGAAGACAATTCAGTATGCCAAAT AGAGGTGGAATCTGGCACTTAAAACAGCCTTCTGTTACACTAGGTAGCTAGTCAGACATG AGCAGGGCAGGATAGGTGCCCCACACACAAACACCAGGAATATCCAGCTATGGTGATGGT CAATCAATTGTTAACTGTCTCTCTAAAATAATAATTGGTCATAGCCAGCAGCCCCAGGGA AAGTCAGTCTCCCAATAAAGAGGAAAAACCTGAAACTGGTGATCAGCAGCCTCGCGATGA GATCTCAGGAGTTGGGTGACTGGGTTCAAGCATGCACACTAAGAGGCAAAACGGTGGAGT TTAACTGGAATATGACCTTCCTCTAGAAACACTTGACTGGTAAGGGAAGAATGGCCCCAG TGAGCATGCGTAAAACTCCAATAAACACACTGCGTATGAGGCCCCTCCCAAATGCTAGCC AGCCACTGCACATGCAGACAGGCCAAGGGAAGAATCAGGGGAGAAGTGATGCAAGACCCC GAAGCATGCCAACATTTAAACCCCAAGTCAAAGGTCAAACAGTGCACTTGATCTCTCACG TTGCCCGATGGGCCCTATTCCAAGGGCAGTTTACTAGCTTTCATTGATGCTCTAAAGCTT TTTAACAAATTTTGACTTCTGCTCCTTGGTCTCTCCTTCTGCTTTATGCCCCTCAGTCAA ATTCTTTCTTCTGAGAAGGCTAGAATTGAGGTTGCTGCAAACCCGTACAGATTCGCAGCT GGTAACAAACTTTGGTGCCACATGACTTGGATACGTTCCACTGCTAACACTTTCCCACTT TCCCCTTTAGTCCTAAATCAAAAACTGAGATCATGATTGATCTCAATTATCAAAATCCTT ACTGGGTCAGGGGGTCAGGATTATAAACATTTCCTGAATACAAATGAAGACCTAAATGGT AGAGATGTTTAGAGAACGGTCCCTTGCTTACTTGACATTGCAATCCCTACTCACCAGTGC CCCAAACCAGGTACATGGTGTTTAGATTCCATTTGGGTCCCATTAGATGAAATGGGATTA ACACCAAATCTGGTCACTCAGTAGTCCATGCTAGAAACTCAAGAAAGACAGAATTTGGGT TTCCTTGTGTGCGCTTTCTCTGTTTTCAGAAACAGTCACAGCTGAAACTGCTACGGACTG CAGAGGGGATTTTCATTTCAATGTTAATATTTTATCACAGCAATATTAACTCCAAAATTA ACAATTATAATAATTATTTATGTTTTCTTCCTTATTTCCTTCCAAGTAGCTCAGTCACAT CCACCCTGACACCCACAGGGGAGGTGTGCTAGCAGTGGGGGGCAAGGATGGTCAGGCTTT ACATCTGACACATGGAAGACATAGGTAAGCTTACCTTAGAGGCTCATGGGATCAAGGATC TAGTCACCAGATGCAGTGGTCAAACTGATCACGCAGCCTTTCATTAGATTTCTCTCCTTC CCTGCTTCACTCCTCCATCCCTCATTTTTGCTCCCTGGGATGGTGTTTCAAAAACAACCA CTTGCACATGTTTCTTTTCTCTCAAGCTCTGCTTTTGGCAGAACCCAACCCAAGAAGTCT GAATCCTCATGTCTCCATCTCTCTCTCTGTTGTTCTGTCTGATTAGCTTTCTGTCTATCC ACCTTCCCTTGTTAAGGACTTATAATTTAGACCAAAATGATTGGATTGAGAGAAAGCATA CATCAATGAATAATTAGTAAGATGTATTAGTCTGTTCTTATGCTGCTGATAAAGACATAC CAGGGACTGGGTAATTTGTAAAGAAAAAGAGGTTTAATGGACTCACAGTTCCACGTGGCT AGGGAGGCCTCCCAATCATGGTGGAAGGTGAAAGGCACATCTTACACGGCGGCAGGCAAG AGAGAAGTCAGAACAAATGAAAGGGGTTTCCCTTTATACAACCATTGTATCTTATGAGAC TTATTCACTACCACGAGAATGGTATAGGGGCAACTGCCACCATGATTCAATTATCTCCCA CCAGGTTCCTCCCACAACATGGGGGAATTATGGGAGCTAAATTCAAGATGAGATTTGGAT GGGGACACAGCCAAACCATTCACCAGGCATGCTAATAAATGCTGAAACACAAGCACTTTC AAATTTTTTGGTATATTGTTCTAGAGTTTTTCTTTGGACATTTAAATATTTATATATGTA CATGTATTTTTACAAAAATGGGATACCATTATCCATAGCCACACACACATACATATATGT CAAGACTCTTATTTTTCAATTAAACTTAACATGGTATTTATTGATTTCAATAATTCTAGA TATTGCACCCATTTTTTGTAGCTGCAACATGTTAACATTACAATATTTGGATGGTTGACC CGGATTTAAAAATAATCCCTTAGCAATTAATGCTATTATTAATTTTTTAGGTATTCTGAC AACAAGTACACAAACACATTTTATGAATAGAGATAATATATTCACAAATAAATCTAATCT GTATGTATTTGACTATTGATGCAGCATATGTTATCCTGTTTGGGTTTTGAGCTTTGGTAT GCTTCCTCTTGTCAATTGCCTGTTTGTTTCCTTCCTCGAATTGTTCGCAATGAGTTCTTA TAGTAGTCATTCATTTCAATGGCAAATAGTACTGATGGAGGACCTTCAGTAATATTCAGA AGCTACAGATACAGTGGTAAACATGAAACATGGCTCTGCCCTCTGGAGCATAGAGTCTAG CAAAAAAAGATGGTCACTAACAATTACAGCTACAATGAAGGTTGGAAAATAATTCTCTGG CACAGAAAATGTACTGCAAGAGAAGTCAGAGAATTGGGCCATCAGGGAAGACTGCCTGAG GAAGTAATACAAGTTGAGATTGAAGAGTAAGTGAAAGTCGACCAAGTGAAGAACACAAGA ACATTTCATGGAGAAGAAAAAGACATAAAAACACAGGGAAAAAGTGTATTATGTTTGAAT ATATTAACCCTTTGTCAACCATATATGTGCATATATATATTCAATATATAAAACATTTTT TAGATCATTGTTTGGTTTGAGCCACTTTGCCAAATGCAAGTTTCAAAAATTTTTATTGTC AAATATGTAAATCTTTTCCTTTAAGATTTTAGGTTTGGATGTCATACCTAGATAAGCTTA TGTTCACATTCACTTATATTTTCTTCTAGTATTTTTTCTTCTTCTTTTTTCTTTTAGCTC TCAGACCATCACACAGAACTTCCTAGTGCTTTTCTCATTTTATTTTTTCTCTTTCACATT TTTACAGTCTGGAATGTATTTGGTTGTAGACTATAAAATGGGTATAATTTTATTTCAGAT GAATTTACATTCTTTTTTCTCAAAAGCTTACATTATCTAGTAGGTTCCCTACTTTGCCAC AGAACTTTCTTAAAGCAAATATCTATCCCCCACCACACATGGGTTCAAATCTTCAGAGAA ATGACAGAGCTCCCAAACATTACTAACATCTCCTGCTCTCTGGCCCAGCACATCCTTTCT CCAGGGTTCTCTCTGACCTTCACTCCTGATTTTCACCTCAATTTTTCTTTTAAAAATTCT TACATATTACTCTGTCCACGATGCTACCCCCAAATTAAGTCAATTAGTTTGGTATTCTTT ATTAACCCACAAATCAAAAAAGAGACATTAATATCCATTAATATGAAAATGAAATATACA TAAGAAATCCATTTTACCTTCTTTGGAACTATGTCATTCAACGAAAGTTTTCACTAGTTT TTTTAAATATTTTTTTTCTAAAATAACTAAGAGTAAAAGAATTCACTCTAAAAGTAACTG GTACTTAGACTGCATGACATTGGCACAATAAAATGCAACAAAATAATTTAGACAGTGCCC TTCACCAAAATAAGCAAATTTGTATAGCCAAATTCTTGCAAAGAGGATTAACCTGTCTCC GAAGCAGCAGTAATTACTGGATGTTGAGAAACACGAAATACCTGTGCTTGTAGCAGCGTG AAACCTGGCCTATGGTCCCAAAATATTACCAGAAATATAAAATCATGAATATACACATCA TTAAATACATTCCATATTTTAGAAGCAACTCACTAAAGCTGCTTAGAACCTTCTGAATTA GTAATTAAAATATATAACTAAAAGTATTATTTTCTTATTACAGCAATAAAAATGCAGGCA TTTTTTTTTCTCACTGAATATTCTTTTGTGATTTTAAAGACATGACACATGACCTCTAAA ATTGTCAGAGAGATAGAACTGGCTCTTGTATTTAAAACTTCTTTTATTGAAAACCTATGT TCAACCTTTCCCTGAATGATTATTGCCTATGGTCAGTAACAAGATGGTGGTCTAGACTCT ATGCTCATTAACACTTTGCCTGATTTGGCAAACATTATTCCTTTTTTAGAAGGGTTTAGA TCCTGATTGATTTAGTGATATTACTGGGGTGAGAGTAGCAGGATTACTATTAGGAAAGAA AAAATGGTACATTTTTCACACTGATTTGAAGGTCAGTTGTTCATACTGACCCAGTGAGTT CTCCACCTTGCAGCAATGATCAGCAAAGAGCAGCAACAGTAAAAGTCTACCTCTAAGCCT GGGAGAGGATCAAGGAAGGCAAAGGCAGTGTCAGCACTAGCAGGTTGGTGAAGATAAGGA GGAGTGGCAAATGCCGTGGCCAAGTGGGTCAGTCCAGGAAAAGAACAACAAGTTGGTCAA AATGCAGAGCCAATAACTGTCTAGTCTCTTCATAGAGTGTGTTCCTGTCCATGCCCTAGT TTGGTCTGAGTTTTGCTTTCTGGTATGGACATTTGGGAAGGGAAAGACTTGCAGCCCTGA AGACAAGAGCTTGCTGACACAGAGCCGGACTCCTGTAGAGGACAATATTCTGCTTCCCAA GCACAGGATGTTGTGGTGGGTGTCTAAGAACAATGTCTTCCTAAAAGATCATCTCTGTGT TATCATTGATCTTTATCTTCCTGAAGAATATATACTTTCCATTTTAAGTTAAGACATGGG ATTTGCCAAGATTGTAAACCACACTGAGAGTCAATTTTGGAGTTTGGCAAATCATGTATG CACACCCTATCTAGTATTGATATCTAGTTGTCAACTTTTTATTCTGTTGTTTAGCAGCTG TATTAAGAGAAAAATCTAGAGAGTAATTAGTTTATAGAGTATAGAGGGAAGGAATAACGA GCCGTTTTCTATTGTTGAGACATTAAAAGTACATACAGGGAGGTTATCTTGGAAGACAGT AACATTCCAAATTATTAAAATTTGGTGCTTGTATCTTAACGATGTGCATTATATTCCTAA TTCTGAATTGCTGACCAATCCAGTACAAGCCAGTTCACAGCATTTCCAGTGGCCTATTTC CAAACCTTGTGGTCTGGTACAAACAACATGTAGTTGTTACCATGTGGTAGCTTGTCCTAC TACACAGTCCCTGATGTCAGTCTGGCTATGGAAGGAAACACTTGACAGGAGACTGAACAA ATGCAAGCCCTAATGTACGAGATGCTCTCCACCTGTCAAATTCCCAAGAACACCCTCAAT GCTCACTCTCTGAATGAGCAGCGGAGATAACCATTTTCTACTCGAAACCATTTCAGAGCC ACCAACAATATTACTGGTATTTCCCTTGTTACTAAAAGGAGAAACAAAGAACTATCTGGA TGCATTCAGAAGATACTACACTTCAAGAAGAGCCCCTGACTTAAGTTGCAATAGTAAAAG ATGCTTCCCTAACCATTCCCACACCAGCTCTCCAAGGGCAGCAGAACCATTTTCAGAAAA CGACAATCGACATTCAGAACTTTTCACAGCACAGAACATATAATGCTTATGCTGACAGCT GTTATCAGGAAAGAATCGGAAAATCTGAATGAATGCCAGGATATTCTCAATAAAACTGGT AAACATCCCATGGACATAATGGCAACAAGCAGGGTGGAAGTTGTTATGAGATTCATCACG TTGCATGAGGAATGTCAGGATGATAAGGCTTTTATCACCCCATGGTCGCCACTGACAACT TTCCAGGGGGATCTTTTGAATGGCTGTGTCATTGAGCTCATTAATGAATTTGAAAGGAGG TTAATTTTAATCAAGAATGTAATCAAGGCTGGTGCGGTGGCTCACGCCTGTAATCCCAGC ACTTTGGGAGGCCGAGGCAGGCGGATCACGAGGTCAGGAGATCGAGACCATCCTGGCTAA CACAGTGAAACCCCATCTCTACTAAAAATGGAAAAAAAATAAAAAAATTAAAAAATAAAA ATTAGCCAGGCTTGGTGGTGGGCACCTGTAGTCCCAGCTACTCAGGAGGCTGAGGCAGGA GAATGGCATGAACCCAGGAGGCGGAGCTTGCAGTGAGCCAAGATGGGGCCACTGCACTCC AGCCTGGGCAACAGAGCAAGACTCTGTCTCAAAAAAAAAAAAAAAAAAAGAAAGAAAGAA TGTAATCGAGAAGGGGAAAGTCAAGCCCCAGTAACTCACTCACTTGCAGCAGAAGAGTAA GCACAGAACCACAGTGCGATGGAGTGAGGGTGCTCAACCTAGCCTGGGCCACAGGCCAAC CTGGCCTCTTATTCCTAATCAGGTGCTGGCAAGGATGCAATTTTGAACTTGTGTTAACAA ATACTCCATGTTTCCCATTCCACACCTGGGAAAATCATAGCAGAATCCAAACCTAACGAT GAAACTGACTTCTGATAGAAAAACAGGCCCCTTTACAGGAATACCCACGGACAACCTCTT CATACCGAACCTCCATGCTTGATGCCTTCTGATTACTGAGAGTTCGCCTCTGCAGTACCT ACACCAAGTTGCTTCCACCTGAGGCCACACCCTCAACTCCTCCCTGCCTCCACCTGTGGC TTCCGGGATCTGACTACCAAAGTTGGGCTTCTCTTCTGAAAATAGATTGGAGGTTTGACT CGGCTATAGTCACTAGGTACAGTCCAAGAACAACTGACATATCTCCTGAGGCTCTGATCT GAGCTGCTTTCACCTGAGGTCACAAAAGACTCACCTCTGCTTTCTGCTTTCAGGAGAATC ACATTTGAAGTACAGAGAGAGACACATGCGGGAAACAGACAGAGCTGACTGGTTTCCTGT AATCTGTCCAAATCTTCTTTGCTAGGTGTCACAACCCAGTCCACACTTCAAGTCTTAATA AAAGGAAGTAGGAACTTCAGAAACAGCAGTGCCCATGCCTGCATCTTTCTACCTGAACTC GTACAATCTCATAGATCCTTGCTTTACATACACAGAGCATGTTTAGTTCACCGCTTTTTA TCTTACAACATATGAGAAGGGATATTAGAAGTAAAAACTTGAAGAATGAGTGGTAGATAC TGAGAGAAGAAGAAACTCTTGGTTGCCAGACCCCCAATAGCCACCCACAGCAAGAGAAAT GAAGACATAACAATGGATAAAGAAAACGGAAACAAACAAACAAACAAAAAAACCTCAAAG TTCTATCACTGTTTAGTATCATGATGGCTGTTTGTAATGGCTTCATGTCAAAAAAAATTA AGTTGGTTCAATACACTTTGTGTAAGAGAGTGTCAAGCTTTTAAAACAAATGTTTCAATG TTTTTCTGGGCAAAGAGGGATAAGGTAAAAAGAAGAAAATAATAATTACCAGGATATAAG CAAAAGGGATTAGAACTAGGATATTAAACAAGTTTCATTTCATTTTCCAATTCTGTTTCA TGCTTAGGGACGTCTTGGAGCACTCTACTGCTAAGGAGTATGGGGCTATATCCAGTAGAA AGATGGCTGGGGCTGATTAGTGATGTTTTCCATGGCTTTGGAAGTAGGGAAGTGGGTGAA GTATAGAATGGAGGACTAGGAGGTGAACTTGGGTCCTGTACTTTCCATCCCTAGATAAAG AAAGTGGTGCTGCAGATAAAGGTAATGGAGAGATGCTATTGGCATTTACAAAACATACAC AGTTCACTCCTAAGACTTTTTTTTTTTTTTGAGACAGAGTCTTGCTCTATTGCCCAGGCT GGAGTGCAGTGGCACAATCATAGCTCACTGTAACCTCAAACTCTTAGACTCAAGCAATCT TCCACCTCAGCCTCCCAAGTAGCTGGGACTATAGGCACACACCACCACACAAACCTTTTT TTTCTTTTTTTCTGTTTTGGAGAGATGGGATCTCACTATGTTCTCCAGGCTGGTCTTGAA CTCTTGGCATCAAGAGATCCTACTGCCTTGGCCTCCCAAGGTGCTGGGATTACAGGCATG AGTCACTGTGCCAGGGCCTAAAACTTTTAAAATATTACTGAATAAAGACATGTCCACTGC TTTCATAGCTTAAGATATATAGCTACTTAGAATTTTAGTTGAATTCACAAAAATTAGGCA GTATAATATGGCAGGAGTCATTTAGCAAGCTTCTAATTAGAATATTTGATGATAGTATGG TGCATTGTAAACATTTCCATCTGTATTTTATTTCTGAGACTAAGAGTGATTTCTTTTAAT GAACCTTCTATTATGTCATTCAAGTTGTTGTTTAGAGAAAGACGTGATAAGAGTCCTGGT TCCTGAGAACATTTGCTATGGGCCATTAATTAACTTTGTGACCCAGTATAAGTCATAACA TTTCTTTGTTTCAATTTCAATAAACAATGAGTTCTCCATTAGCTAGAAAATCTACAAAAT CATTGTAAGTCTAGGGAAATTTATATTCTACAACAAATGTAAAATTCTCACAAAAGTAAT GACATGAACATATTGATCATCTGTAATATTTTCTAACACTTTGATTTACTATCCATATGT TCAGATGACAATCTTTTTAGGGAAAACAAAAACACAGACTGTTAGCATGTGAAAGAGATT CATGACCCTCCTTGGTCAGCAAAAACAATTGCAAATGAACATTTCTTAGTGATTTATTTG CATTAGCAAGGCTGTCAGGACATTTAAAATATTCCTGAATTGAGTTAATAAATAAAAGAA AGTCTGATTTTGACAAAAAGTCATAAAATGATACCATTCTAGGGCAATTATTTGAGGTTC TTTACTAGTCAATGTCTGTCTCCTGTCTCAGGGCAGGTATACTTCCAGCACATTCTTGTC ATGAGGAAAGCCAAACAAGCTCTGCTGGGCTTTGTTGCTTCAAAGTCTTATTTTTTATTG TGCGTTCAAAACCAAAACAAAAAAGAAGAGGTACAATCAACTGATCTTCTCAGTGTATTT GCCACTAGGTTCATGATGCAATTTAGGCAAGTTAGTGAATCCTGCTATGAAAATATCAAA GCTTTCGGTCATTTGTCCATATACTGGCATAACACATTGAACATAGTAATCAGGAAAACT CATTTTAATGAAGAAATGAACAAAATTACAAATAAGTGATTAAACCATTAAGAGTAAAAG CACCATTAGATTTCATTTATAATGCATCCTTCACAGCCTATCATTCACCTATGAAGTTCT AAACCATATTGCTGTGTATGCAAAAATGTCCTAGCTTACAGTAAAAACTCAGTTATGCTT CTTTCCACATGATAAGCTGAAATCGTAGTATCAAAGTTTCCAAAAAAATTCACCATTAAA TTAATTATTGGGGCAAAAACATCAAGGAAACCAGATAATAACAATAGCAACCACAATAAA AACCCGCAAGCAAAACAAAAAGACAATATCATTACATTTAGTGGTTGTGATCATGGCGAG TAATGGGTCACAGTGCTATTGAGTTTTCACCAAATTTTTGTTTATTATTATTAATGTTTA ATTAGAGGGACTTACAATATCTGAGTAGTCTACATTTAAATAATGTTGGAGATCACCAAT GTTAGCCCATTGAAATCATAATAAATATTGCACAATTGCTTTTTTAGTTTTCCAACTGAG CTTTATTTCTATCTTTTTATTTTACAAATGTAATAAAGAGCACTCAAAAATACACACATG TACATACTGCAGGTGAAGATAATTTAGTCCACACACACACGTTGTAGAAGATATTTTAGT TTCAGTAGAGGCACTGCTTATTCTGCAAATCCTTCATTGACTTTTGAGACTGAGTTAGAC CCTTTGTGTTCCCATTGTACATCACAATGATACATTCAGAATCATACAATGATACACCTA CCACAGTGTCAAAGACTTCCTAAGTGCCCATCTATCCAATTTTGACCATGAATCTTCTCA CATGTATACTACCAATGCCTGATAAAGTTCATAGCATATTAGATCTGTTCAGTAAATACT TACGTGAATGAATGACATTATGGTGGGGGAAAAGTAGTACAGGGTTGGACCATAAATTTC CGTGTGGATCACTGAAATATATACTATTAACAATTGTGAAAAAGAAAGACCGTCAGTCAT TGTACATTGTTCAATAACACCTTATGTAAGATTTGCATAGTGCTTTCCTCTAAAGTTTAA TATCATTTCAAGACAAACATTAGAAATAAATGCTTTAATTTTGTCCTTAACTTTTAAATA TATTATACTTTAAGAATCGGATCAGCCTTTAAATTCATTATTTTAAATCATGACAAACTT GAACTGTTACTAAAAGGAGACAAAGCTTAACTAAAACTTTAAAGGTAAGTTATGAGAATT TTTAAATGTGAGCAGTTTGTTGACTAAGAAAATCTCAAGGCAAAAATGGAGAATGTTTAA TATTCTATATGGGATAATAAATATGAATTCAATAACCTAATGAAATTTCCTAAAAATTAA CATCTATATAATTTAACTGTATAATCTGATAATTTATGGGATTTTTAAAGAATCATTCAT AAAGTGATTCCACTGAGTTAATATCTATATAAGTACATTTCCATTCATTGATGTAGGACA TAAAAAAGAGTCTGACCAGGTTCCGAAGGAGGAGAGGTTATTTTAATTAAAATGACTATA GTTTAGATCTTTAAAGGAAATATAATTTTGAATAGTTTGGAATTATTCCATACCATTTAA AAATATCTGGAAAATATGTGAGACATGTATAACTTTTCTTACATGCTTAAATATCTGTCT TCTTGTGAGAGTATTGAACTTTCTACCTTAAAATAACTTCAATGTGGAGAAAGTTCTAGT TTCAAACTGCTTTCTTCAAATATACAGAAAGAATAGTAATGATGGGTTAGAATAGAACAG TTTTGACTTTTGGAATAAAATTTTAGAGTTGGGTGATCTGGGATGAGGTCACTTTCCTGT CACTTTTTTTTGACATTCAGAGCTTAAATAAATACTGTATGATTTTTGTGACTGATGATT CCCCCAAGGACTTACTCACCATCCACTATGAGACCATTGCAGGGACTGCATTTGGAAAAC AGGATGACAGTCAGGCAAGGGACAGAAATTTCAGTTCGTAAAGCACTTGGATAATTTTTG CTCTTATCATTTCTTTCTTTTTATTTGTTTGTTTTATTTCCCTTTGACACATTAAATGTC CCGTACTTTAAGTTGCTTATCACTTTCATGAACTGGTTCATGTACTATTTACTGTAGCTA CTCTACTTTTTATTTTCTCTTTACCTTGTCTAGTCCCTGAGAGGAAATAATCTTTCATAC ACATCTTGTGGTGTTCTTTCCCGAAATTATTCTTCAGGGTTATTGTAATAAAATTATCCT TTTGTGTATTCAGTGTTTTGGATATGATCTATTCTTTACATGTCCCTAAGATACATTGCT TTATGTTATTAACCTTAGAATATGATTTCCATTGCTCTGTCCAATACTTATGGAGAAAGT ACTGAATTTAAAAGAAAGAAGAATTTAAAATATTGGCTACATCCTCTTTTATCAGAAAGT AGTGTTTTTGGAGATGCATAATTTGTCACATCTTAACTTATCTATATTCATATGAGAAAA TGGCCTAATGAAAATCTACACTGACATGAAAAAGAGTTTCTGTAAGCGATAAATCTTTGC TAAGATTGTTACATTTTTCTAAAAAAAAAATTTAAAAATTATATATGGCCATTACAGAAT GCTCATATAAAAAATGCAGAGTCCAGGACAAGCTCTCTACAGCAACTTCTTTATCAAGTG GAAGTATACCGTGATGAAATCCCAATGAGGTTAAAAATTTTTTAAAATTCGGCCAGGCAT GGTGGCTCACACCTGTAATCCCAGCACTTTGGGAGGCCAAGGTGGGTGGATCACCTGAGG TCATGAGTTCAAGACCAGCCTGTCCAACATGGTGAAACCCTGTCTCTACTAAAAATATAA AAATCAGCCAGGTGTGGCTAATTTTATACAGATAAATGCATATAAATATTTAAATAAATA TTTAAAATTAATGAGAATTAGAAAGAAAAACATTTAACATGCCTGTGTGAATGCACATGT AAATGTGTATACTCACACAAATACTGAACCATCAAACACTAATTGATGTAGGTTAAATTT ATTGATACAAATAGGACTCGAATCATCAAAGAACCAAAAAACACTTTATTTTCTATAATC TTTGCTGTCATTGACATTAAAAATCTGTTTATTTGATGTTTTTGTTGCCTAATAAATTAT CTTTATTCATGAAGCTCTCTTTGCACTTAAAAATATTGTTTTATCAAAGTGTTTCCACTC ATTATCATAAATCTAATGCCTAATAATATTGAAAAAATTCTATACAAAAATGATAGACTA TGATGAGTCAAGTAATCTTTCCCCTTAAAAATACAATATTAGATAAAATGCTGAAATTTC AAAAAATTATTTGGTTGACTCCCAAAAAGGATAAAAAAAATCATCGAGGGTACATCAGGA AACAGGGTACCCAAATCTTGGTGATCAGGAGGTGAAGCCAAGGTCCTGTGCTGTTATTAA CACTGGATTGAAGCTTTAAGAGTTGCAATTTAAATGTCCAAACATGTGCCATGAGGCCTT AGAGTCAGATCCATCATCAAAGTGGCATGGCAATGTGTTTTCTAGACAAATCTTAAAGCC AGGGATTGCAAAACTGTAAATAGGGAAAAAACAAGCAATCAGTCAACAAAAAAATGTCCT GCACAATGACTATGGAAAGGAAACTGACTCCAGTCTCAGGTTGGTGGGAGGGGGGGGCTG TATTATGATTGAATACGAACTTTAAATCACCAGTATCTTCAGAATATTAAGGTTAAAAAT GAAAGAACAAAAACCAAAGACTTTTCTAGATTGAAAAAGACATAGCAATTAAAAACAATG CAAGAACCTCGATTGGATCCTAACTTGGGAGGAAATGCACAAAAAATAATTGTAGCAATG TGAAAAATTAAATATGGACTAATTATTTTATGATGTTATGAAATTATTTTTAGTTCTCTA AGGCATAATAATGACATTGTGGCTGTAGAATAATTCCCTTATACTTAGGAGATGTGAGCG GAATCATTTGCAGGTGATATTGCTAAGACAAAGACAATACGACTTTGAAAACACAATTAA ACTCACCATAACAAAGGAAAAGAGGGGAAGATATGTTCATCTCAATATTTGCATTTGAAA AGTTTATACTCAGGTTTGAAATAATACATTCTTAGCACAAATTAGACATAGAATTAGAAA AACAATACCTACCCAGTCAGTAACTTTTACCATTTGTGGTGAAGTACTATGAGTACAATA AAGTTAAGCATAAGGCAAAGGCAAAGCCAAGTCATTAACAGAAAAAAGGGAGTAGGCACT ATGAGACAGAGGACTTTTTTGAAAATTATTATTTTTTTTTAATATTTGGAGAGAGGGTCT CACTTTGTCACCCAGGCTGGTGTCTGGAGTGCAGTGGTGTGATCTTAACTCACTGTAGCC TCCACCTTCCAGGCTCAAGCAATTCTCCCACCTCAGACTCCCAAGTAGCTGGAACTACAG ACATGCACCACCGTACCCAGCTAACTTTTTTGTTTTTTGTAGAGACAGAGTCTTGCCATG TTGTCCAGGCTCATCTTGGACTCGTGGCCTTAAGCAATCCTCCCACCTCAGCCTTCCAAA GGTTGGGATTACAGGTGTGAGCCACCATCCCCAGCCTAGTTTTTCGTTTTGTTTTTGTTT GTTTTAATTTACCATTTCCACACATTCCATAGTCAGGAAAAAAAAATTCCACCTTTTGTC CTAATTGTAACTGAAATGAATGTTAGTACATCTGAAAGGGAAGGGGCACTGAAAACCACA CACACTCTGCAACTTTGGATAACTTCTCTAAGTTTTAAGAATTTCAGAGATCAAAGAATA TGTAAATAATCGAATTTAAACTCCATGAATTGAGAATCTAACTTACCCTAGAATAGATGC TCTATGAAAACACCCAATTTACATATTACTATCACAACCAAATCCTTCATCATCAAGAGT GTGTGGTATACAAGCACTCAATACATATTTGTTAAGTGAATTAATAATGTTAGTCACCAA ATAAGGCATTTAAGGAGTCAAATAAAGGAGGCAATGCATGAAAAGCATTCAACACAATGC CTGGTGTACATAAGCATTCAAAAATCTTAGTTATCATCATCATCACATTCATCGTTAATT TTATAATTATTATCGTAAATCTGTCATTTAATGAATAATTTCACATACAAGGAGTTGCAA TTACTAGCACAAACATTGACAAGACTTTGCAACACAAAACTACCAGTGAACTCAAGAAAT GTTTACTTTTGAGGCAAAACCTGTGAGCACATTTTGCTGGAGTGGCTTGTCCTCAGTATA CTTACATCACTGGGGAAAGCTAAAGAGACAGATCTGGGAGTCTTTGTTGAGCTCTGAAAG TAAGTAATATTATTAATAGGAATGTATTTTATATGTGTGTACTAATCCAACTGCTTATTT AAGTTTGCAACATGCTGATAGTTTTTTTCAGACTCATGGTACATGTATAAATTTGAGGCT TCTGGAAACATTTTTCAGATATAAATATTTTAATTTAGTGATTTTCTTACAAGTGAACAA TCATCCAAAGATCTGGATAAACCTCAGGCTCTGATGACCATTGACTCAAGTCTACAGGTA AAATATTTATTTATTTATTTTGAGACAGAGCCTCACTCTGTTGCCCCAGCTAGAGTGCGA TGGCATGATCGTGGCTCACTGCAACCTCCGCCTCCCTGGTTCAAGGGATTCTCCTTCCTC AGCCTCCTGAGTAGCTGGGACTACAGGAGTCCACCACCACACCCAGCTAATTTTTATATT TTTAGTAGAAATGGGGTTTCACCAAGTTGCCGAGCCTGGTCTCAAACTCCTGTGATCCAC CTACCTCAGCCTCTCAGAGTGCTGGGATGAAAGGGGTGAGCCACTGCGTCTGGCAGGATT TATTTTTTAATGTTTTTTTTTTTTGTCGTTGTTGTTGTTTTGTCTCAGTGTTGTCACTCT TCAGGAAGAACACTGCTATGCTTTCTAACTTTTCTTCTGAATTGAATTGACTTGCTGCAC TTGTGAGGTTGTAAGATGCAGCATCCAAGAAAAATGCAGATGTTTCCTTCTAAGCTGAAT TCCAAGAATAATAGTTTAGCAAACTTCAGTACTTGATGAGATATTTATACTGGCATTTGT TGTACTGTATTTATTACAGATATAAATAATATGACCTTTAGATGGTATAATTTTTTTCTT TAATTGAAAATAATTCACGTTCAATGTGGATGACATGTTTTAACAACATATGTGAGTGTC TGTGAAAAACAACCATAAACAGTTGAAATCTTTTATAATCCATATAGGTTGCCTAATATG GGCAACTCAAGGGGACACACATAATTTTGGTTGAAGCATAGATTTATTATGAATGATTAA TGGAAATCTTATTTTCAATTTGTGGAATAGAAAGTAAAATAAGAGACATCTTGCCTATAC TGTAATTAGATTAATTTTTAAGTATATGAATGGAAATAAAAAGGATGATGATGATATTAA TGATAAAACAATCTCTAGCTTGTATAAAGTGCTTGTTAATTATTACGCTTTTAAAAAACT GTTACATAAATTATCTTATTTAATTCTTATAGCAATCCTACAATATACAAATGCCATCCA CTTTTTGCAGATAAGGAAAAAGAAACACAGGATTTAAATGTTGAGCCTCGCTGTAATACA AGGATATTCTTCCTTAATACCCTTAAGTATATCTAATCCTAATATTTTTTAGAACTTTCT ATAAGCAAAGTCTTATTTTAGGTGCCTCAAGCCATAGACATGTTAATGAGGCAAGTTTCT ACTCTCCATAGGTTCAAAACACAAATAAATAAGTATCAGGTATCACAGCCCTATCCACAG ATAATCTGACACTCAGAAGTTCCCATGCCCAGGAGTCTGCTATAGAGTCCTCAGCTTGGT AACCTCCACCATCAGCATCAGTGGGTTCAGGCTCTCTGGGTCTCCAGCTAATCCTGCAGA GGCAGTGAGTACATTAAAACATCACACCTAATTCCACTCTCCCCTTACCCCTTTGTTCTA ATGTAGTTTGAGCTAGCCTCTCACATCTGAACTCTGTTAACACTGCTAGGTTCTTGCTAC GCATCAGAGCCAGGTCTGCCTCCAGGGATTATCTGTAAGTATTCACACTGGTCAAAGCTC ACTTTTCTCTGATATCATGCTTGCCAAACACAGAAAAAAAATATGGACTGTACTTTGATT TCCACCCAAATATTCTGCCTGATTCTTCTATCCTCTCTTAGGATAGGAGTTGTGTCCTGA TTATTTGTCTGGTGTTACCTTCTTGAGGGTTGTCTCATAATGGGACCACTCAGTGTTACA GGCTGCCTGCCCTACTTCACTTCCGTTTAGAAATGCCGGTACCAACCCTCTCCTGAATCT CACCTGAGCATTCCACATACTCTGAATTCTGTGTCTACCTATTCAACTATCCCTTCAGTC TGGAGTCAAATTCACCCCATTCCTTCTCATCTCTCTAGTCATAAAAGGCAATTGTGCTAT TCCTGGCTCTTGACTCCCTCCATTTTGCCCAGAGTTTATATAATTATATCACCATGTCTC ATTCAAATGTCTAAATATAATCAGTCCTCCAATAACTATAATACAAAACCAAACGTAACA ATTGGCAAAAAAAAAATGTGTAAATTAGAAAGAGTCTGAAAATTAGAAAGAATAATTTTG TAAATTGTATAAATTAGAATGAATCTTTGAAAATTGGAAAGCTTATTTTTCATTGAAAAA AAATGATGGAAGGTACTATTGAACCGTGAAATGTGTGCTGCAAATTTTAAGTGATTGTGG CAAGCAGAGATGGTAGAGAAAGGTGTGCAAGTAGGAAATAGCCTTAGCCAACTGCATGGA GCACAATGGTCATAATCATGTAACACAAATAAATAACTCGGTCTGTGTTGTCTGTATGGT ATATGAGATTGTGGAATATAAGACAAATCTGAAAAAGCAGGATAAAACCATATTGGCCAG AATCTTGAATTTCAAAAGATGAGTTTGTACAAAATACTTTAGATAAAACAAATTAATGAG AAGATCCTTTCTCTCTCTCTCACTCTCTGTCTCTCTCTTTGTGGACATAGGAAGAATTAT GATAGAAAAATATTAGAAGCTGGAAATATATATTTGGGAGGAGATTGCAACAACACAAAC AAGATGAAATAGTCTGAATTAAGATGCTTATAGTAGACGAAAAAGTGCTTGGTAGAAAAT AAAGCGGAAAACTACAATTGGTATTTGAAAGAGAATTTTCTTGTTGGGAGATACTGAAGG ATGGTTAATCTCAAACTTACCATATCTCTGGGGTCCCTGATTACCACTCTTACAACTATA TTGGCCAATAAATGCCACAGCTCTCCCTCAGTCCTCTGATGACTTGAGAGGGGACACCTA AGCTCTCTTCCCCACCTGCTCCATAGCACAGCAGAGACAAGATTGGAACAATCAGGAAAT TATTTATGGAAGACTAGTATGCAAGTTGATGTAGAATGTAAAATCCAAATACACTGACAT ATGAAATATGACATCATTTTTATCTTGTGATTCACTACATAGAAGCTAGCTTACGGGCTA CTGAAGTTTAATAGACTTTTAGTATCCACCAGAGTCACACATCTCAACATAATTCAAGTC AAAGGAAGGGCCAAGCCTCTTAGCAATCTAATTATTTTTCTTTTAGTTCTAGCTTCCTGA TTGAGGATCTGTTTCGTTTCCTGGCCAACTTATACAAGGAATGAACTCATTCTGCTTACT CATTTGGTCATCATTTTATCTTTGACCTCTTTAAAATAACTGTATCAAAGTATATTGATC AACCCAACATCACTGGTGTACTAGTAAATGTTTAGTAGTAGATTCCCTAGGAAGAAACAC ACACACACATACACACACACACACACAAATAAAACAAACTGTTTTGTATTGTTTGCCAAT TTATGTGGTGTAAATATTCCCACTATGGTCAGTTTCAAGCTACTTATATGAGGTGACTGA ATTAGGATTTGGGAAGCACTGCTACTGATGTATAATAACAATGAGTAGTATTTGTTACAT CCTTACCAAATGCAAGAAAAAAATAATAAGCAATTAACATACATTTTCACCTTTAATCAT CCAATAGCTCTCAAAATAGGCATTATTTTATGATCATTATTTATAGGGAAGAAGAAATTA AAGATTACAGAGATTAAATCTCTAAAACTCACAAAATTAGTCAATAGAAGTGCTGACATT GAGTCTCATTATGTCACATGTCTTCCGATGTGCATGTCCATCTCCTAAGGAGGAAATTCT AGTGTTGGCATCAGTTTTCACGCAAGAATCTGCTTTCAATGCTTATGTTCTTGAGGTCTT TTCTATACTTTTCCTACATAAGAGAAAGTTATAATATAGAGATTACTAACATTAAAAGTA ATAAGCAATAAATGAACAGGTATAACTTTGTAAATATTGCAGATATAAAATCTGTATGAG GAGGCAGTTGATCAGATATAATAATAAGAGGGACAAAATCTCTCTATTTTTTATTTCTGG GTGACTGGAAGAATGGAGCAATCATTATAACTTTTAGAATCTGAAAAGAATCTTAGTTTA CAGAAAATATATTTAAGGAATGTTGATTTAGGAAGAGGAAGAACCAAAACATTTACAAGG GAAATATATTTTGCAGTAACCATTCTAGCAAGAGAGATGAGATGTCTGCAGCAATCAGTT TGGACAATGTGGGAACAAGGAAATTAATTTTCATTGTTATTTCATCAAGTTATCCAATTT GGAAAACCTAAAGTTGAGAACTCTGCTCAGATTATTTCCTCAGAGTATGATGGGAAGGTT AGCATATCTTTTACCAAAAAAGTGCTAAGTCCATCTCCAGTAGCTTCTGTGAAGTTAAGG CCAACTCTACCCCTCTCCAAGAGAGAAACCATCAGTTGGAGCAGCATTCTAGTTCTCAAA CCAATTCATTTTCTGCATATTTCTATAAGGTTCCTTTTTCTTTCTCACCATAATATTGGC AAAGGGCATCTTACAGAGAAGAAAGGCCTTGTTTTGTTTTGTTTCATTTTTTAAACACCT GTACAATCAATCCAAAATGTTGTGGCCTTCCAGCAACCTCACAGCAAGACCCCACCATCA CAGAGATAATAATTCTGAATACAAGGAATGTGATATTTCCTGCTCTGTAAGTTTATGTAA AATCTTGTCATGTGTCTTTAATATCCAAGAATCTGACAACTTTAAATTTATATTTGCTTC CCTCTATGAGGTTGAAGGCTGACACCTCACCCCAGTGTATCCAGGAGGTAGGACATGGAG TTGGAGTCAAAGATTATTCTCTAACCTTACTATTGATTGTCCTGTGCGGTTTGGGGATTA CTTGGAACCTGTTATGCCTTTATTCTTGCCTATTTATACCTCTTGGAATGGTAACGCCTA CGCTATTCCTTTCCCACCATTGCAGTTTAGGAAGCTCATAGCATGTTTGATTTCACAGGC CCACAGTAGGAAGGGCATTTGTCTTAGGGTGAACTGTACTTTGAATCTCACTCGTATCTG ATTTAGATGAGACTCTAGACTTTTGACTTTTAAGTGGGTCCTGAAATGAGTTAAGACTCT GGGGGCTACGGGAATGGAATGAATGTATTTTGTATCTAGGAAGGCATGAATTTGGGGGTG CTACTAAGGGCAGAATGCTGTGGTTTGAAAGTGTCCTCTCCAAAATTCATGTTGAAACTA CCTTATTGGGGTAGTATTAAGAGATGGACCTTTTGAGGAAGTTATTAAGTCATAAGGGCT CCTTCCTGATGAATGGATTAGTGCCCTGTAAAAGGGCTGGAAGAAAGGAGGTTAGGCCCA TTTTAATCTTCCACTCTTCTGCCATGTGAGAACACAGAGCTTACCTCCTTTTTATTCTTC AGTTCCTTCTGCCATTTAAGATTACAGCATTCATCCTCTTTTGCCCTTCAGTTTCCTCTA TCATGTGAGGACACCACACTTGTCCCCTCTGGGGGATGCATTAAAGGTACAACTTGGAAG CAGAGCCCAGGCTGTCACCAGGCATCAAATGCCAGTACCTTGATCTTGGACTTCCCAGCC TTCAGAACCACAATAAAATAAATTCAGGTTCTTTACAAATTACCTAGTGTCAGGTATTTC ATTACAGCAGCACAAACAAAGAGAAGCAAGAGGTAAAAAAAAGAATCCCAGAGACTACGA TTTACACTTATCTCAATGCTGTTCAGGATGGCCATAAAAGAGAGAACATTTTTACAAATG GTCTTTCCTGTAGATGGGGACTAGAACCTGGATGACTTGAGAAGAGAGGTAATACAGTGA TGTGTCAAAGCCAAGCTTGTGTAGGTTGCAAGAGGTGACTGTGTACATCTCATCTAAACT GCACTTCAAGTGATCTATGTTGGGAGTTTGAAATGGACCATAGTGAGAATTTTTATACAA TGGAAATAGTCACTGCTACAAATCAGAGATTTTTTTGCCCTGAGAGTCTATTATTAAGCC ATTAAAGATACGCCATTGCATATGTTCTCACAAGTTAAAGTCAGATATGTAGGCATAAAA CAAAATAATCTGGAGTCTAAAAGAAAGGATGGTTAGGAGCTGGAATGAAAATGGAAAAGC AGCAGCTTGGCAGGGTGGAGGAAGTTCAAATACAGGAAGTGCAGGATAGAGAATGTAGTA GGAATGAATGAGACCTTAATGTGGTGCTGGCAATTGAGAAAAAGAAGGAGAGGGATAATC TGAAGATAGGCTCTGGTGTTTTTTGGTTTGGGGCCTCCAAGAAGCAGATACCAAGATAGG ACTAGATGTTCAAGAGATTTATTAGGGGAAATGTCTGGGATAGATAAAAGGGAAAAAGTA GAAGTAGACAGGAACAGCTTTCAGTCTGTGATGCAGATCTGTGAAAGGAGAGGAGCAAGT GAAACAGATGAGGTAGAAAGCATCTGACACTACAGTGTAGTTCTGAAAAAGCTTCAACCA GACTAAGGGGTGCCCTGCACTCAAAGTCCTCCACAAGAAGAATCCCACATACTATGGGAA TAGGCCAACACTTGGTTCCTCTGCTGTGCTCTACCATCAGCTGTGAAAAGCGTGGGAGAA GCATGGCCTTGGCATGAGTGCAGTGGTGAATCCACCATGGCAGCTGCTGGGACCATCTGT CAATTGTGTTCCTAGGGAAGCTGAGCAGTGCATTTACATGTAAGTGGTGCTGTTTAGGAA AAAAACAAATTGTTCCATTCACTATACTCTCATAATATGCTTCTGACACCAGATATGTGG GGAATTTTTCCCCACACAAGCAAGCAATCAATTCTGCAGCAGACACCAGCTGGGTGTCCT CCCATTCTACCCTGACTGCCAGGAGAGAGTGCTTCAGACACCAGTTGCAAGTCTCAGGTT GTTTTTCCTGTACTTCTGACCCACCAGCTATAAATCAGGGTTCCCACGACCTCCTCCTTA GATTCAATTAATTTGTTAGAGTGGCTCGCAGAACTCAGGGAAACTCTTATGTTTACCAGT TTATTATAAAGAATATTACAAAGGATGCAGATAAAGAGACGCTTGGGGTAAGGTATGGAG AAAGGGGCATAGCGTTTTCATGCCCTCCCTAGATGGAACCTCCCAGCATTCTGGAAGCCA CTGGGTTCTGGAACCTCCCAGTGTTCTTTTCATGCCCCCTTCTAGGAACCTCCCAATGTT CTGGAAGCTACCCAAACTTCATCCTCTTGGATCTTTTATGGAGACTTCACCAAGTAAACA TAATGGAAGCATGGCCAACTGTGTAGATATATGATTGGGCAAAAAGGAAATGATCTAATA CTAATAGGCTGAGTGGGAAAACCCAGAAAGGCTGTCCGTTTAGGTTTTTCTTGGCCTCTC TGTGCAGCCTTCCTTCCACCTGGCTATGGGGCAGGACCCCTTCCGAAATGGGAGCCTTAT GACCTACAATCAGACAAAACAGGTCAGAGACTTTACTTCTGGGCAGCGCTAAGACAGAAA GGCAGAGGAATATTCCTGCCTTGGGGAGAAAAAGAGGTGAAAGAGGGCAGGAGAAGGTCT GAGAGAGGAATTCTGTTTTCTGAGGCCTGCTTTCGAGGCCTAAAGTGCCCCAACATGATA ACAAAACACTGTCTTTCACTTTTGTTGCTCTGAAGCTGTTCTGAAACCAATTCAGGAACC AAGGACAAAAGACCAAATGCTTTAACAAAAGTTATGCTTATTGTTTCAGTCACTTAGGAA ATAACAAGGGCTGTGAGAGTTATGATCCAGGAACCATGAACAAAAATGGATATACATATG GAGTTGTAGTAGAGATAGGATTTTCCTTAGCAGCCCCGTTCTACTACATAACTGTAAGAC TCCATGGCTGGGCCATCACTCCTCTGGGGCTACCTTGAGAGATATCACTGTTTCTTCATG GTGGATTTTAGGACTCCATTGAGAACTGCTGCTTTTGCCAAGACCCTGCTACAGTTACAT TCTAGGTCTAGGTCCTTGATTATCTCTGAAAACAGTTTATCATCCCTAGCAACTGGCCTT CCCAGTGTCCGGCCTTCCCAGTGTTCTGCCTTGAAATTGGTCATAAATTATTTCTAAATT TGCATATTCCGTGCATATTATTTGAGGTTTTCTCTGACCTCAGATATTTTTCTGATTCCT CGTATCATGCTCCAGTTCCTCAGTTCTGGTCTCATAATTTTTTTTTTTTTTTTTTTTTTT TTTTTTTTTTGCGACAGAGTCTCGCTCTGTCGCCTAAGCTGGAGTGCAGTGGCTCAATCT CAGCTCACTGCAACCTCCGCCTCCCAGGTTTAAGTGATTCTCCTGCCTCAGCCTCCTGAG TAGCTGGGTTTACAGGTACACACCACCACGCCTGGCTAATTTTTATATCTTTAGTAGAGA CGGGGTTTCACCATGTTGGTCAGGCTGGTCTCGAACTCCTGACCTCGTGATCCGCCCGCC TCAGCCTCCCAAAGTGCTGAGATTACAGGTGTGAGCCACCGCGCCCAGCCTCTTTGGTCT CATATTTAATGAGGGTTGCCCAGCAGCTGAGTTGGGGCCGTGTTGACAGGTTGACTTTCT CAGCTGGGCTGCATGTTTCCTAAGGGTGACGACAGTGTCTGTTTCTATCTCTGTGTTTCC CCCCCAGCACCTCAGATAGTTGGGCATGCAGCTGAGCTTCTGAGACATTAGTCAATATCC TTCTTTCTAGGACTTGAGTTTGGGATATTGGAGCTATTTTGCATTTTGCCTACCATCTCT CCTTTCTTCTTCCCGTAACACTTCATTTGATTTACAAGATAGTACATTAGATATTTGACT TTTGCTTACAGTTCCAGGGAAGCAGAGGTTGGCTGGTGGCAGATGGATAATATTTTCACC ATACTGCAATATTTATAATTTAACATTGGCACTCATGTACCTAGTATTTGCAAAAGGGAA TTTTGAAACTGTGGAATCAATTCACCGAACACTAAAATAATTAATCATTTTATCACTATT GTTTTTCTAACAACAAATGGATACTTTTTCAGTGTTTCTACACGGATAAGAAAAAGCATA TATTTTGTATATATAAAAAAAGCATATATTTTGTGTATATAAATAGTGATAATTTGCAAA ATGAGCACCCAAAAGCAGTGTTAAACGAAGAATCTTCCAGCAGATTTTAACTGAGGCACT TTCTCCTTTTTGTGGCCAGAAGCCTTGCATCAAAATCAGTAAAAGATAATAATTGAGTTC TTAATTACAGCACTAAATATAGCAAAGTGTATTTTCTGTTAGAAAGCATGTAATTCAAAT TAAAAAATAAAATATAATTTCACCTCCCTTTAGCATTTTATCCTGTGCATTTAGGGTAAG AAAAAGGCCACTCTCACTACATAGGTTTTCCTCAAAGTAATTTTTGACATTTAACCACAA AAATGTGTAAAGGTTTTATCTGAATCTTCCTCTATATTGTAATAATTTGGAAATATTATA AAAGTAGTCATGCCACCCTCAAGATACCTAAAGAAGCAAACTCTTAATGCAACTCAATTA CCCTATATTTGGGGTTGTAATTGAGAATGAAATTGATTCCATTTTGTGTTCTGGAAATTT GTGCAACAAATTTTATTACAGATCAAGACATCTTTATTTTATAATAGGTAAGAACACAGA CAAATTTCTGTATTAGTCACCATACATTTTACTAAATCTTCTAGACAGCACTTCATAGAA TTGCTGTTATATTTTTTCCTGCCAATCCAAAAAGTCATTTCTAATTATTAAGAGATTGCC ATGCTCATTCAGGTAACAGCGTTACACAGTTAACTTAAAAGATTATTTTCAAGAAAATAA ATGTATTTAAACATTTTCCAGGGTTGTTGCTACGTTTATTAATTCTCTAAAATTATATAT ACATACTTCAAGCATTCTCAAAGGAAACATATTTTTTGTGCCGTTTAAGAGGTTCTAAGC ATATCACATTCCCAACTCTACCCATTCTAATTTGATCTATTACAACATGGGTTCTTAACT TGAGGTCCAGGAACTAGAATTCAGGAGGTTTGTGGGCATGGATGGGTTATTTTCCCTGGC CTGCAACCAAAATGTATTACTTCTTTCAGTTGTGAATCAGTCAACAAACCACCAGAGAAA TGGAGGAAGCCATTGTTGACCATTATGGCTACCTGCCTTAGGCCTTTGCAGCTCCAAAGA TGACACTGCCTTTTTTTTTTAAGGCCAATATTTACTTGGGAAATTTTCTGTATGTTCCAC AGCATAGCAATTCTTACTGTTTAGTCATTTTAGGTCACCAGTTAGCCTTCTGTGTCTGGG AATTTGCTGCTCAGAGCTCTTCTAGTGAGTGCCTTTATCTGCTCAAACAGCTCAGGGCAT TGTCTTACTGCACTGTCCCACTCTACCCATCAGCTGCTATCCAGCAGCTGGGATAACAGT CTTCACTAAATGCTATGGTTTGCATTTCCACTCCAAACTCATGTTAAAATTTAATCCCTG GCTGGGTGCGGTGGCTCATGCCTGTAATCCCAGCACTTTGGGAGGCAGAGGTGGGTGGAT CACCTGAGGCTGGGAGTTCGAGACCAGCCTGACCAACATAGAGAAACCCTGTCTCTACTA AAAATACAAAATTAGCCGGTCGTGGTGGTGCATGCCTGTAATCCCAGCTACTCAGGAGGC TGAGGCAGGAGAATCGCTTGAATCCGGGAGGTGGAGGTTGCAGTGAGCTGAGGTCATGCC ATTGCACTCCAGACTGGGTAACAAGAGTGAAACTCCATCTCAAAAAAAAAAAAAAATTAA TCCCCAATATGGCTGTGCTGAAAGGTGGAACCTTTAAGAGGTGATCGGATCACAATAAAT CCATACATGGATTAGTGGATTAATGGGTTATGATGGGAGGGGAACTGGTGGCTTTATAAA AAGAGGAACAGAGCCCTGAGACAGCACATGTGCATGCTTAGCCCCTTTGACATGTAATGC CCTGCTCTGCCTCAGGACTCTGCACAGAGACCGCACCAACAAGAGGGCCTCACTAGATGT GGTCCTTCAACCTTGGACTTTTCAGCCTCCAGAATTGTAAGAAATAAATTCATTTTCTTT GTACATTATCCAGTTCCATGTATTCTGTTATAAGCAACAGAAAATGGATGAATACTTTGA ACATGACAGACGATGAATCATATCCAAATATGATATTGTACAAATCCAAAACTTGAAGAT TAAACATCCTTCTCCTCAAAGTCACATTTCACCATCTTCTGCCTCAAGTTCCAGTGGTGA AAGTAAGTTTCTTTCCTTTTATATAAAATGAGAGTGACCTTTTTTCACCTTATTCATGTC TGGAATTATCATCCCATATTTAAAGATTCAGTAATATGCTCTGATATTTAATGCAGGGGT TACTCTAGAGCCTATCATCACTTAGAATTACGGAAAAAGTAGTAGAGGTTTTAAAATCTT AGTGTTCTCTTATGCCACCTGCACTACTGACAGCGAGAAGAAGGAAGCAGAAGACATATG AATGTACATCATGACATTAATTTTGCCTTTTACTTCACATAAAAGACCAAATTATCTGCA ATGATTTGTACATTTCAATGAATATTTTTCTTTCTGTTGCACATTTAACATTGTTTGGAA TTTGGGACCAATGCAATAAGACACAAAACAGAGACATTAATATATAGTCTAATTATTGGA AAGCTTTAAAGAAATTATCTCCTTTGCAGATGGCACAATTGTATACCAAAAGAATAATTA CAACAAATTCCAAGGGAATCAATGGAAATTTCGTGATTAATTATTGTTTGATAACAACTT ATAATACACAAGAATTAATAGCTTTCTAGTTTATTTGCTATAACTCATTAGAAATATAAT AGAAAAATAATTAATGTGTCTCAAGGTAGCTACAAATACAAAGTTGTAAGATTAAGTTCA TAAAGAAACATGTAAGACAACCATGAGGAGAGCAGCATAATTGATATGAATTATACAATT CTTAAATTCTTTCAAATTGTATATTTAATGTGATACAAATTAAAGTATGATTGTAATTTT GAAAAATGATTCAGTTTTTATTTTCTGGAAAAGTGATAAGGCAAAAATATACTTTAAAAT TTTTGAAAAAAGAATAAATAGAAGATGGTAATGAATATCTTAGTTGCTAAATTTTCTGGT TCCTCTAGGCACATAGTTCAACTTCACTTTCTAAATTTATTTTAATTATGTGTAGCCATA TGACATGTTTTGTTTATCGAAGTGTGAATGCAAATGATGTAGGTTACCCATAAGTGGATG CTTAAAGGGCTGATGTATAATTCACCACGTTCACGTTATCCTTCTAGGATGATTGTAGAA GTCCATTTAAAGATGGAGCCCCATCAGACTGAGTTCTTAAGTGACTATACTCTTCAGAGC CTTGTGACAATGTGTATTTGACATGGAGTGCAAACAACAAATGAATTTTTTTATTGTGAT AGGTCATAGGTCACTGTTTTATACTACAGCATAACCTTGCCTATCTTGATTGATGCTAGT GAAATACTTCCTTTCTGTTAATTAAGGGAGTATAATCATGCAACAATTTGAAGACCAGCA TTTGAGTGCAATAACTTACAGAGCAAGGAAATAACATTGATGACTCTTACACATACACAT GTATAAAATTTGAATATTTCAAAAATATAAAATATATATTGATGTGGGGTGGAGGTGTTC AATGAATAATGCTGAAGCTGCTGTTTATTTAAAGAAAAAACTCCAGATCTTAAATTTGTA AAACAGTGCAAGCTAACATTGTCTGAGAACTCATTCTGTGTTCATTTCTGTTCTCTGTAC ATTACATGTATGTATATTTTCATGTAAAATTCAGAATCATCACAAAGAGAGCTAATAACG ACATGTATATTTCACATATGAGGAAACTGAGGTACTGAGAGTTACATATTTGGCAAGGAC ACACAGGTGATACTTTTAGAGGTTAAATTATTGGAAATAACCTTTAAAATATAAGAATAA GGACATTAAAAAATATTGTGACAAATGAAGACTTCTTAAGATTAACAGCATGAAAATAGT CATAGAAGAAAAGAGAGACGATAACATAAAAATGATTCCAAAATGTTTAAACAAAATTAA AATTTGAAGATAAAGATGGAAAAAAATCTAACAGTATAATTTTAAGTACTTAAATGTGCA AAAAACACTTTCTAATTAATGAAAAGCAAATTAAAAATCAAAAGCATGTAAAATGTTCAA TTGTACTAATAATAAAAATGTCAATAGATCAGAAATGCCATTTTTACTAATGTTATGTGA AAAATATTTCAAAATGATAAAATGCTGTTTATCCATATAACAATATTGCTTAATGCTTAA GTAATTATTTCAAAAAGGTTTTTTAATATAGGAAATTGTATTATAATAATCAACAAAATA ATATATGTTTAAAAATGTAGAAACAACATATGAAATGTGCATATGGGAATGTGTTTATAT ATATTGGAATAAATGCCTAAGTATTAGTGGGAATTATTTCTTGGAGTATAGTTAATAGCC AATTATTATCCCTATATTGTTTTTGTTTTCCTAACACTCTTCAATGAATATATATTATTT TCTTTGCAGAAAAATAGATGATGTTGATTTAAAATATCAAATAGTGAAGGTATTTTCAAA TTAATCTGAACAAAGTTCAAATCTCTTTATAATTATCTCTTCATAATTCTCTGAATTATC TCTTCATAATTCATACATTCATACATTCATTCATAATTCAACATTCATTTGGTTTCTGAA GGACTTTTGGCTGTGAGAGATTTTCTAAATCTCCGTCATTTGTGACTACGTAAAATATGA GAGACTAGAAAAGGAGCCAGAAGTAGTATTTGGTTGCCGTGTCAGAATTGATGAAAAAAG TAAGCAGCAATGTTACTTGAAGAGTGGGGACGAAAAACAAAAAACAAGAGTGTTATCTTT ATAGACTCTCATATGCCTTCAGATATTTGTGGAAAGATGCGTATGGGCACAGCAAAGCCC TGAAAGAGAAATCAGTCCAGTAAAATGAAAGAATGACAAACTGGAATTCAGGTGCTCTGG ATGCTAATCCCAATTCCGATTCCTCAGCCATGGAACTTGGAGCAGTCATTTTCTTTCTGT GGACCCGGGTCTTCACACCCATAAAGTGAGAATCCGGGGAACTAGTTATCTTTATGATTC GTTCCTGCTCTAAAATTCTTCTAGGTCAGTAATTACGTTTTAAAAATAAATAAAGAATGA AATTTCAATTTTACGTCCAGTATCTGATAAAATAACCTTCATGGTAATAGCTGGATTCTG AAGTATGTTTTACGTTTAACGTAGGATAGTAAAAGTCAAGAACATTGAGCTACAGCACAT GGCTTTGAATTAATATTTTTAAAACTTCTTTTCAATTATGTATAGCAAACCAAACAAACG GAAACAAAACCCTCCTGCCAAAATATGGTGTCTTGGGCCTGGTCACTAAAAGTTAGGTAA AACAAGTAAATATTTTTAAATGTACTTAAGCACTTTCTGTTAATCTAAAAAAAATGTGCA TTTATTTAGACATTATTTGATAAAGAAAAAGATTTTTCTTTGAACAGGAGTTCTACAATT TGAGTTTTGTCTTTATTGCAAAAAACATATTTAATGGTGATTATCTGTGAATTTCAGTTT CAGTGAATTTAAAACATCTTCACAACACTTTCAGCCTTAAGCATAGAAACCATTTCAATT TGTATTTTCCCCATCTTTTCCAGTCATCTTCTTCACTCTTAATCTGACTACAGTTTCGTT TACCAAGTCACCATTATTCTCTTTTCAGAACTCAATTTTTATAGAAACAACCATTTTTTA TTGCATTGGTTTAAATAAAATTTATTTAAATAATCTCATTAGAATAATAACTATTACAAG TATCGTAAGTATGTTTTATGAAAACACAGTAAACTGACTATTGGTAAATCAGTGGGAAGC AACAATGTGCTGGGACACTAGAAAGTGGCCTACTAATTCTGAGCGTTCCACACAGCCCTG AGAGTGAAATCAGAAACACAACCATTTTGAAAATACAATGCTATGTGCAGCCATAATTCC ATCTTACTGAGAGAAAAGGGAGTGCCAGGGAATCTGGCATGTCAGTTAAGTGATGATGGA TAACAGAAGTAGGGCATTTTTTTTGGAGACGGAGTCTTGCTCTGTTGCCCAGGCTAGAGT GCAGTGGCACAAACTCAGCTCACTGCAACTTCCGCCTCCCAGGTTCAAGCAATTCTCCTG CCTCAGCCTCCCAAGTACTGGGATTACAGGTGCCCACCACCACACCTGGCTAGAAGGAGG GCATTCTACACTTCGTTTATATTATCTATACCACTTTCTACTGTACCCACAAGAAAGGTG TTGCTAGAGTTAATGTGTAATTCATAAGAAAGAACAGTCTTCAAAATATTTCAGGCTAGA TGATTCTAAGTGCCAGATTTCATTAGATGTATGAATCAGAATTAAGTGCAAATCAGCTTC CAGTCAGAAAATTTTGAACAGCGTGGTGAACATCACCACTCAGGTTGTGTGTAATCATGA CTTTCAAGGTAGTATATTTACTTCTGAAAATAGTGTCATAACACAACCTACCTAAGAACA TAATCCTCTTCATCATCTTAGTCACAGTGTAGCACTTAGCATGCACAATTATTCTCAAAT CATATTTTCGATATTGAAATGACCTACTAACATATGTCAGCTGAAAATTCACTTTGTAAT TCTCACAACCAAAAAAAAAAAAAATGAATCCATAGGGAAGATGATCAAAATGGAGAAAAG CAATTAATCTGTATGTATGAAATGCTCATCTAAAAGCATTTGGCAAAGTATACCCTACAT TTCCGGGAGTGAGGAACTTTGAATCAAGGCATAGTAATAGTTTGGGATAGAGTCCAGGTG TATCTGACTCATTATGAGAAAAGTACGAGTCATTGAAAAAAATTTTTTTCACCTCTATTC ACCTACTTATACTGGAGAAAATATTGATCTCTTGCTTAGGATTATTGTGTGTCTTGATAG TAAAAATGAAAAGAAAGTATTTTGAAAATAAAGGGTTATGGACATTTTGACAATTTTCAG GGTTGAATTTGTAAGACCTGCAGAAGAATTTTAAAAAATAGATTTTTAAATATAAATAAA GCTAATTTATCTTTTAAAATTGGAAGGACGTTTAATAGAAAAATAAAATTTCAAAATATA AAAATTTAGCATTCATAAAAAAGTTTTCTTATTATGATGTTTATTTAAAATGATGGCTAA TTTGACATCATTAAATACTGGAATATATTAACGTATAATACAAGCATCTCTAAAATTTTA ATGTTAAAGTTCAACAGACATTTACTGAATGCCAACTGTATGAAGTTTATTATCCTAGTT ATCTGAGAAACACAGATAAATAAGGCATGGTCACTGTTCTTAATTAGCTTATAATGGATA TTATAGAGTCAAATTATCTGTTTAAAATTATTATCTGGATCTCAGCTGTCTAGTTAAAGC AAAGCAACCCCAAAGCTGAGACAATTTTTAATACAAAATCACATGTCTTAATTTGATAGG GAGCAGATAAAGGTTTAACATAATTTATTAAATATTTCTTTTTCCTTAAGCACTGTATTA TATCCTAGGAAAACAAACAGCTATAAAACCTGCCTCCTGCCTAGTAGCCCTCAAAAGACA TTTAGGAAAACATGCAAATAATAAAACAGTGGGGAGAAGATAAATTATTGCCAAACCTTT TCCAAAAAGATACGGAAGTATAATGGGAGCACGAAGCAGAAGGTGGTCAATTGAGGACTG AGGCTGTGCAGTAGTTTTGGCAACTACAGTTTAGAGTGATACTCTAAACTTCTTCCTCCA GTGTTCTGCTGAAGCATACTCTGATATCTCGCTGGTTTTCTGGCAGTAAACTTTATTTGA TGACCCTAATAAGTCTCCTGAATTAGGTTATCTTTAGCTCCAACATTTGTTCAGATTCCA TAAAGATCAATTAAAATTTGGGGGGTAAAGGGGGTAAGAACATGCTTCCATTTTTATAAC TAAACCTCTTTCAAAAACTTACCATGCGTAACAACATGGATGAAGCTGGAAACCAACATT CTGAGCAAACTATTGCAAGGACGGAAAACCAAACACCGCGTGTTCTCACTCATAGGTGGG AATTGAACAATGAGAACACTTGGACACGGGGCAGGGAACATCACACACCAGGGCCTGTCA TGGGGTGGGGGGATGGGGGAGGGATAGCATTAGGATAAATACCTAATGTAAATGACGAGT TAATGGGTGCAGCAAACCAACACGGCACATGTATACATATGTAACAAACCTGCATCTTGT GCACATGTACCCCAGAACTTAAAGTATAATAAAAAAAACTTGCCATGCAAGAAATGAGCA AGAAATACTAAATGCAATATACCACATCTTACATTAAGAGAAATATTTATTAAAACATTT ATTTATTATATTATTTATTATACAATAGAGACACTGCCAGATACTGAACACAAAATAAAT AACAAAATATGGCTCTCCTTGATTAAAGCTTGCAGTATAAGTTTACACATGCTTTTAAAA TGACATCGATACAAAGGCGTAAGACATTTGGATAATGTGTTTTATAAATTTAAAAAACTT CTGATTTCTTATACTTGGCACAAAAAGCTACAGGGAGAGGAACTAACATGTTGTTGATGG TCTACTTCAAATAGACACTTTAATATGCATTATTTTGTCTGTTTTCTCACAACACTATTA TCACATATTAGGAGAGAAACTGAAGCTCAAAAATTTAACATGACTTTAGTGAAAGAGCTA TTAATATGTGCTGAAGATAGAATGTTAAGGTAACTCTATGTCGCCTCTAAGCTTTTACAT AGAGATACGTAATATTTCTCAGAGTGTTCTGCAAAGCAAGGATTCTATGGAATGTTAATA GAATTCATCATCAATAACAAATAAAAAGTCTGAGTTAAAAAGACAGTAGTCCTCATAGCT TTAAGTATGCTGCCTTATACTCTGAACAACCAAGATAAAAATCATAGTATGGGTTTCCCA AAATATTTAGCCATAGTATTTTGTTAATGGAACACTGAATGGATATATTGTATTAGAGAA TGAACTACAGGAAGCACTCCACCAAAGCTGTATAAATGGAAATGCAGAGAAGGTATGTAA AGAGAATAAGAAGGAGAGTGTCAATTACTTTGGGTGATCATCTTTGCAGAAAGTTATACC TTTATCAGTGGAAGAAGTTATTATTTCTAAAATTGGAAGTAGTGGCCCATCTTTCTACTG AGATATATATATATATCTTAGTAGAATATATATATATAGAGAGAGAAAGATATATATATA TAGAATATATATAGATATAGATAGAATATATAGATAAAGATATAGATAGAATATATATAG AGATATAGATAGAATATAGATATATATCCCAACCCAAAAGCAGAGGCAGATACCTTATTA AAATACTGCCAGTTATAGCTGCAATAAAACAACTAAATTATGCATACCTTTTTGTCATAC ACACACACACATCTAGAAAACTGAAGAAAATATATAAAAAATACCATTATCAGACCCTTG ACAACAGACAGGGATAATAGTATCCTTAACGGGAAGACAATAAATGAGTTAAACCTCGTG TCTTAGTCTTCTCAGGCTGGCTGCCATAAAAAGTTATCAGAGGCTGGGTGTGGTGGCTCC CACCTGTAATCCCAGCACTTTGGGAGGCTGAGGCGAGCGAATCATGAGGTCAAGAGATCA AGACCATCCTGCCCAACATGGTGAACCCCCGTCTCTACTAAAAATACAAAAATTAGCTGG GCGTGGTGGCGCATGCCTGTAGTCCCAGCTACTTGGGAGGCTGAGGCAGGAGAATCGCTT GAACCCAGGAGGCAGAGGTTGCAGTGAGCCGAGTTCACACCACTGCACTCCAGCCTGGTG ACAGAGTGAATCCCTTCATCTCAAAAAAAAAAAAAAAACTTATAATAGATTGGCATGGAC TGGGTGGATTAAACGAAATAAGTTTATTTTGTTACAGTCCTAGAGGCTTGAAGTGCCAGA TAAAGGTGCTGGAAGTCAGTTCCTGGTGAGACCCTCTTCCTGGCTTGTAAATAGTGTCTT CTCTATATGTCTTCACATAGTGGAGAAAGAGAGAGCAAACTCTCATGTCTCTTCTTGTAA GGACACCAATTCTATGAGATTGGGGCACCATCTTTATAACCACATTGTATAATTTTAATT ACCTCCATAAAGGTCATGTCTTCAAATACAGTCACATTGAGGGTTGGGGCTTCAACATAC GAATTCTGAATGGACATAAACATTCAGTCCATAACACTTTACCATTACTCTAGCCTACTG CTTGACACATTTGCTATACAGTGATACAGAAGTGAGATTGTATCTGTAGGTCAGGAGAAT ATACCTCTCAATCCTGTAACTGCAAAAATACTAAAGGCACTAGCTCTGTATTCAAAACTT CATGGGCACATTTGCACTGAGGCCATGCCTCTGAAAAGCTGAGCTCACATCATAACTGAG TATAGCAGGAATACCTAGGTAGACCTTTTCTTCGGAGGTGCAGATCAAGAAATAAGAAAA TAACTCAAAAATATGGTAAATGCATTATATAGTACAATACAGTTTAAAAATCAACACAAG AAGTAAATGGGACTCTTGCACTATGCACACACACACATACATCAATATATACAATTTTAA AATATATAAAAGAGGCACAGAGAAACAAAATAAACAAGATAGATAAAAAACAAATAGCAA AATAGCAGATATAATTTCAATTCTATAAATATTATATTAAACATGAATGAACTAAACACT TTAATCAAAAGAAAGAGATTGTCAGACTGAATTAAAAACCAAGATCCAGATATATGCTAC CTACAAGAGACACACTTCAGATTCAAATATACTAATACATTGAAAATAACATGATAAAGG TGATTTTTCTAAGTGGTACATACACTAAGACCTCTGGCATCCATTTCTCTGTAAATGCAA CAGGAAAACTAGGGAAAAAAATAGCAGAATTAACTTTTTTGGAAATCCAGAAATTAAATA AGGGCTTGACATAATCGAGGGAGTATTTAGTTTTTAAAAAATGGATAAATCTTAGTAAAA ACAGTGAGCTGTGTGGTGTTTTAACTTGCCCTAGTCACATTTCCCTCTCTTTAGCTCTAC AGGAACCTGGTAAATAGCAGGTCTCATTTGTGGTGAAAACCAATAGCTTGATAGTCGCTG GAGGGGGCAGAAAAAACTGGAGCTCTTTCAAGCCTTCTTCCCAGAGTGTTCTCATTCTTT GACTTTTCTGTTTGTTCACTGAAAACTACACTTGCAAGGCTGTCTGTATTTGACTTGACT CAGAGCTTTCTCAGTCCCAAAAGCTTTTTGCCTAGGGGCAAATATTGAAAAAGAAAATAC AACTAATAAACTTAGTGCCTGCCTAAGGTAGTGAATAACTGTTGAGGCAAACAAAACAAA TCAAATAGCTTAAGAAGAAAAGCTGTGGAATGATATGTTCACAGCAGCTTTTAAAAACTC AGTTATGTTCCTATGCACCTAGAAAGCCACATGCATACCCAAGAAAGACCTGAGATGGCC CTAAATAAGCCTCTTTCACTGGCCTTGAGGCTCTATGCAAGCAGGAAGTGGAGGCTGAGG CTGAGGTAGAGTTGCCAACTGGCTAGCAGAGTGTTGAAAGCATGCTCCAACACACAGACA TGCACATACACACACACACACACAGCCCCTCAGCAAAGACTGGAAGAATGACTGGTTTTT GTTTAAGAAAATATCTCTCCAATTATTTACAGTCCTTTAAGCTAACTAAGCAGAGAGTTT AGTGGCCACACATGACAAAGAAGATAGAATTTACAGAATTACTTCAGAAAAGTCACTAAA TAAACAAACAACTTTTACAATAAACAACAAAAACAAAAACCCTGTAATGGAGGAAGAATC TAATTTCCAGTTTTGCCACATAGTATTAAACCAGAAAGTATAGTTCTTATGCTGAAAAAA TAAAATAAAACAGTTTTTCTAAGGGAACCTAGACATTGTACTTTACACATGGCGCTTGAC CAGTCAGAAGAGCTGTTATTAAAAAGTCAAACAATAACGGAAGCTGGTAAGGTTGCAGAA AAAGGGAGCACTTATACACTGTTGGTGGGAGTGTAAATTTGTTCAACCATTATGGAAAGC AGTATTGTGAATCCTCAAAGAGCTAAAAGCAGAACTACCATTTAACCCAGCAATCCCATT ACTGGGTATATACCCAGAGGAATATAAATCATTGTAACATAAAGACACATGCACACAAAT GTTCATTACAGCACTATTTACAATAGTAAAGACATGAAATCAACCTAAATGCTCATCAAT GATAGACAGGATTTTATAATGTAGTACATGTGTACCATGGAATACTATACAGCCATAAAA AAGAACGAGATCATGTATTTTTCAGGAAAAGGGATGGAGCTGGAGGCTATTATTCTTACA AACTAACTCAGGAACAGAAAACCAAAGTTGTTTTACAAGTTCTCACTGGTAAATGAGAGC TAAATGATAATAACTTCTGAATACAAAGAAGGAAACAACAGACACTGGACTGGGTTCTAC TTGAGGATGGAGGGTGAGAGGAGGGAGAGGAGCAGAAAGGATAACTACTGGGTACTGAGT TTAATACCTGGGTTATGAAATAATGTGTACAAAAACCACCATTTGTTCACCTATGTTACA AACCTTCACATATACCCCCAACCAAAAACAAAAGTTAAAACAAACCACAACAAAAAAGCA AATGGTGCTTGAACAACTGAATATACTCATGCAAAAGGATGAATTTGGAGCCCCACCTCA TAGCATATGAGAAAATAAACTCAAAGCAAATCTGAAAGCTAAATATGAGAGCTGAAACTT TTAAACTATTAGAAGAAACTACAGGTGTGACCCTCCAGGGTCACTGGATTAGGCAATAGT TTCTGAAATATGACACCAAAAGCTCAAGCCATAAAAGTAAAAATAGATAAATTGGACTTC ATCAAAATTAAAAATTTTAGCACTTAAATGAATACCTTTAAGAAAAATACAACCCACAGA ATGAAAGAAAATATTTGCAAATCACATACCTGATAAGTAAGATCAATCTAGTATCCTGAA TATACAAAGAAGTATTTCAACTCAAGAATGAAAAGTCAAAAACCTAACTTGAAAATTGAC AAAGAATCTAAAGAGACATTTATCTGAAGATACACAAATGGACAATAAGAACATGGAAAG ATGTGCAACATCATTATCAACTGAAAATGTAAATCCAAACCACAATTTGTTACCACTTCA TACTTATTAGGCTGTCTATAAAAAAATGATAGCCAGTGTGAACCCGGGAGGCAGTGCTTG CAGTGAGCCGAGATTGCGCCACTGCACTCTAGCCTGGGCAACAGAGCGAGACTCTGTCTC AAAAAAAAAAAATACGATAAGCCAGTAACAAGTGTTGTTGAGGATGGAGGATGTGGAGAA GTGGAAACCCTCATATATTGCTGGTGGGAATGTAAAATGATGCAGGTATTTGAATAAAGC TCCAACAGTTCCTCAAAAAGTCAAACCTAAAGTTAGCCGTATGATTCAGTAATTTCACAG ATATATGCCAAAGATAAATAAAAACATGAATAAACAAAAACACAGTGTTCCTCAACTGAT GAATACATAAATAAAATGTGGCAATTCATACAGTGGAATATGTTTTAGGCATGAAAAAGA ACAAAGTATTGATGCATGCTACAACATAGAAGAATTTTAAAACAGTATCCCAGATGAAAG AAACAAGACACAAAAGTTTACATATTGTATAACACCTTTGTAGAAAAAGCCCAAAATAGG CAAACCCACAGAGACAGAAAGTAGGTAAGTTATTGCCAGGGGCAGTGACATTGCTAATGT GTATAGCGTTTCTTTTTGGAATGACAAAAAATGTTCTGGAATTAGATAATGGCTATGGTT TTATAACATTTTGAGTACATTGAAAACCACTTAGTTGACAGTTTAAAAGGATAAATTTTA TGGTACATACAGTACATCTTAATTAATAAAAGGAAAATAAGAGAATGGAAAGAAATGTAA CATGAAAATAATAATTATTGGAGTGCTGGAGTGACTATATTAATATCAGATCAAACAGAT TTAAGACAGTAAATATTACTACAAAAGACAAGGTATTTCATAATTTTTAAATGGTCAATT CATCAGCAAAATTTTACAGCAATAAGTACACACATTGTTTATTGTGTCAAAAAAGAAAGT TTGAAATTACATGAAGGTAAAACTTCAGTGTTTGGCAGTTTCTTCTTCACTCTCTGTCTC TTGCCTGCCACCATATATGACGTGCCTGCATCCCCTTCCACCATGACTGTAAGTTTCCTG ATACCTTTCCAGCAATGTGGAACTATGAGTCAATTAAACCTTTTCTCTTTATAAATTACC CAGTCTCAGGCAGTTCTTTAAAGCAGGCTTAAAATGGACTAACACAGTGTTCCATTAGCA TTAAAAAAGAATGTGTACTCTTTTGTCTTTGGATGGACTGTTCTATAGATGTAGATTAGA TTAATTTGGATGCAGTATCATTCAAGTATTATATATCCTTGCTGATTTTTTTATTTGTTC CATCAATTATTGATAATGGATTATTAAAGTCTCTAAGTTTTATTGCTGAATTGCCTATTT CCCCTTTAAATTATGTAAGTATTACATAACTTAAGTATTACATAATTTACATAATACGAA GTGGGAGAATCACCTGAGCCTGGGAAGTCGAGACTGCAGTGAGCTGTGATTGCACCACTG GGAGACTGTGGTTGCACCACTAGGAGTGAGAAGTAACTAACTTGTATCTTGGAAGTAACT AACTTGTTTTTGATTTTACAGGCCGATAGGTGGAAGAGACTTGCCTTGTCTCAGATGAGA CTTTGGAGTTGGACTTTTGAGTTAAAGCTGAAATGAGTTAAGATTTGGGGGATTGTTGGG AAGGTATGATTGGTTTTGAAATGTAAAAAGGACATGAGATTTGGGAGGGGCCGGGGGCAG AATGATATGATTTGGCTCTGTGTCCTCACCCAAATCTCATCTTGAAATGTAATCCCCGCT TGTCAAGGGAGGAACCTGGTGTGAGGTGACTGGATCATGGGGGTGGTTTCCCTATGCTGT TCTAGTGATAGTAAGTGACTTCTCATGAGATCTGATGGTTTTATAAGGGGCTTTTCCTCC CCTTCACTCTGTACTTCTTGCTGCTGCCATGTGAAGAAGGATGTGTTTACTTTCCTTTTC ACCATGATTTCAAGCATGATTGCACCACTGGGAGTGAGACCCTATCTCGAAGTAAAATAA AATAAAACAAAAACTCTCACTCCCAGTGGTGCAATAGAGTGAGACCCTATCTCAAAGTAA AATAAAATGAAACAACAACTCTCAACAAATAAGAAAGAAAAGAGTAATTTCTCGGTCTCA TAAAGAGAACCTATGAAAACCCTACAGATAAAATGTAGCATGACAAATAACATACTTTCC CCCCAGTATCAGGAATAAGGCAAGAATGTATGCTTTCACCACTTCCAATCAACAAGGTAG TGGAGGTTCTAGCCAGTGTAATCAGGCATGGAAAAAAATGGTATCCAGAGAGGAAAGAAA TAAGTAAAATGGTGTCTATTCACAGAAGACATCAACTTGAATAATAACATAGAAGATGAA ATTCTTACAGTTAGATCTTACAAAAGTCCTCTTTATTGAAAACTATAAATCATTCTTGAG AGAAATTAAACAAGATGTAAACAAATGAAAAGACATATCTTATTTGTTGATAAGAAGAAT TAATATTGTTAAAATAAATAACAATTCTTATTTTGATCTACAGAGATGGTGCAAGAATAA TTACTATAAGAACGGGCATTTTTAGAGCAGTTGACAAGCTATTTCTGAAATTCATCTGGA AATGCAAAGGACCTGGAAAAGGCAAAACAACTTAAGAATTATTTTAAAGCTGAAGTCACC AAGACAGTGTGCTATGGGTTTCAAGATAGACAAATAAATTAATGGGTTAGAAAAAAAGCC TAGAAATATATATATATATATATATGTATGTATATGTATATAGACATTGAATATATATAA ATATATATTCAATATATAAAAAATATAGGATATATATAATATATATAGATGTGTGTGTGT GTGTGTGTATATATAGAGAGAGAGAGAGAGAGAGAGCCAATTCATTTTTTGACAAAGCTT ATAGGAAATTGAGTGGAGAAAAGAGAGCATTTTCAACAAAGGTAGTGGAACATTTAGACA TCCATTTAAACTTCAATAATAACTTCAATAACTTCAATCCTTATCTCACATCATATAAAA AATTAAATTGGCTCATAGACCTAAATGGAAAACTAAAACTATTAAATTTCTGGGAGAAAA TCGAGGATAAAGTCTTTGTAACTTTGGGTTTGACATTAAAAGCACAAATGATAAAAGTAA AATTTGGCAAACTTGACTTTTCAAATTAAGAAATTCTTCTCTCCAAAGGATTATAAAAAG ATAAGTCATGGGTTGGGAACAGACATTTGCACATTACCTACTTGATAAAGTACTTGAGTC TAGAATATATAAAGAGCTTTCAAAATTCAACAATAAGAAAACAAACCAATACAAAGGGTG GGGCTAGAATTTGAATAGCCGTGTCACAAAATAGATGATAAATTAGAACGTTAAAAAGGT CTTTAACATCACTAGTCATTAGGGAAATGCAAATTAAAATCATGAGACATTAAAATGAAT AAAATACACTTCTTAAAATAAAATATCAGGCCATATTAACTCCTGACAAGGTTGTAGAGC AACTGGAACTTACTGTTGATGAAAATATAAAATGATACCATCGCTTTGGAAAATGCTTAG TCAGCTTCCTGAAATGTGAAGCATACTCCTAACATATAGCCCAGGCATTCATTCCTATGT ATTTGTCCTAGAGAAATTAAAGCATATATCATCATGAAAACTGACACATACATGTTTGTA GCAGCGTTATTTGTAATCTCACAGAAACATAAATAATGCAAATGCCCATCAAGAGAAGAA TGAACAAAGAAATTATGGCACATTCCAACAATTAAATACTACCTAGCAATAAAAAATCTA CTGATAAACCTAAAAAGATAATTATGCTTAGTGAAAAAGACACATAAGAGTATGTATTGT ATGATTCCATTTTTAAAATTCTAGAAAATGGAAATTAATCTATGATAACATAGAGCAAAT CAGTGGTTGCCTAAGAAAAGAGAAGGGATGAAAGAAAGACTCTAGTTTATTGTACGTCAA TTCTACCTCATTAAACCCATGAAAAAATATATAAATGAGCATTATTTCCTGCATGATATC AAAAGAATAAACAGTATAGTATTGGTTAAACATAAATAAATCAATGACAGTCTAGAAACA ACAAAAGTTTACATGAGTTTAATTTATAATAGGGTAGCAGTAACAACAGTGAATTATTTA CCATAATTTCAATAATCCCTTGAAAAGGGGTTAATTTCAGTGGTCCAGAGCACAGATTAG AGAGAAAGATTTCCTGCAATTAGTCCTGGCTCCTCTACTTAATAGTGTGATGACTTTTGA AAAGTTATGTAATCTTTCTAAGTTTCTAACCCATGACCGTCCTTGTTACAACCTGCGTCC AAATCAAACTATTTGTCAAAAAAGGGAACAAGTAAAATTTTAATTTAACCTTGACCTCTA CCTAACACTACCCCTTAAAACTAACTTATAAAGGTCTTGATTCTATATAAAAGCAAAATT AATAACATCTGTAGAAGCAAATACAGGGGAACATCTAGGGATTCCTTATGGTTTAAATAG TTCTAATCAGGGATGAGGGCGTGTCAGCTGGGAGTCTTTTGTTATCCAGGAGTCATGGAA GAAAATCTTACTGCCTATCAGAAAGCCTGTGCAGCCAATTTAGGATACCTTCAGTTTTCA TCTATGAAGAACAGAACATTTATTTTTAACCAGTTTCAGAGAAGGATATCAAGACAAAAT ATTCCTTAATCCTCTTATTCAAAATTAAAACAAAACAAAGGATTATACATCTCACTCACT CCTCTAGTTCCTAAGTCTTTTTACGTCTTGCTTTCTCCTGCCAAGCTTCAAGGTTTGCCT ACATTCTTTTTCCATTTTAAGTGGATATGGCACTTTAGGAAGTACATCGTGCAGGACTGA ATTAAATTACTAGCTCTGCCATTTAATTGGGTTGCCTTAAGCGATCCTTAAGCAAAGGAC TGATTAAGAAAACTGTCTTTTTCTTAGTCTTTCCTTCAACAAATAAAAAGGAACAACAAA TAAAAAAAATATTTTTTATTGTGAATGCTGAATGAAATAACATGGCGACAAAGTATGTCC CACAGTAGTCATTTTAAAATGTTAGCCTCCTTTCCTTTTTGAATATAAAATATCCTATTT GATTTGTGTGTATAGCCAGTCCAGCTTCTCTTCAATCCTTTAAGAACCATTTAGGGCAAA AATTATTTTAGTACTGCTCTAGGTAAGATCATTGTTGTCAGTAATGCTAGCACTTCCATT GTCCTCTTGTACTGAATTGCATTCTTTTATTTTGGTTTTTGTCTTTCAGAATTTATGACA TCGGGACAGAGGGAATTTGTTCATTTTGTCTTATTTATGCTAATGGGAACAGTCAGTGAA ATAGGAGCGACTGAAATTATAAGGAACCCATAACAGTCCTTGTGCAACCAACCGCCAAAA CAAACCATTTGTCATGAAGGGGATAAGCAGAAATTTAACAGCTTTCTCTCCTTTCTGTTT TTCTTTTGCCCGCGTTCCTCTGACCTCTGTTACAGCTCTAAATTGTTGTAAAAGCAATCA GACATCTGTAGCAAAAGAAGGATGAAAGAAAAAGTGTTTAAATTATCTGTTAAAAAAAAT GAGTTTTTCATACGAGGAGCAACTTGCTGTTGGGGATCAGAAAATGATGCCCTAAAAGGA AGGCTCTTCAGTCTGAGAAGCAAAAGTTTCTCTTAGACCTTCCCCGACCTTCTTGTAAGG GGTGCCTACGAGAGAATGAATGCCTCTCATTCTCCTCAAGACTAGCCATAGAGACTAGAA TCTCTCTTCCCCACGGCAGGTTGTAGAAACCAGAAGCTCTTTTCCCCAAAGCCAGATATA AAACCTAAAAATATTACTCTTTATCCCCCACCTTTCTTTGTAAAATGTTGCCATTAAGAA CTTACCTGGGCCGGGAGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG CGGGCGGATCACGAGGTCAGGAGATCGACACCATCCTGGCTAAAACAGTGAAACGCCGTC TCTACTAAAAATACAAAAAAATTAGCCGGGCGTGGTGGCGGGCGCCTGTGGTCCCGGCTA CTCGGGAGGCTGAGGCAGGAGAATGGCGTGAACCCGGGAGGCGGAGCTTGCAGTGAGCCG AGATGGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAATAAA TAAATAAATAAAATAAAAAGAACTTACCTGATCTACCTTATTTGACTGTAGGTCATAAGA CCCCCATTCCAGAGACAGTCCTGCCCCACACCCAGAAGGAAGGAAAGCTGCAGAGAGAGG ACAAAGAGAATTTAGACGGACAGGCCCTGCTGGGTTTCCCCACTCAGTCCACTAGCATTA GATCATTCCCTTTTTGTCCAGTCATATTTCTACATGACAGTCCATACTTAGTTGAACCTA AGCATAAAAATGGACAGTTTCCCTTGTATTTTGGGGTCTTCATTCTGAAGGTCTCCTGTC ATGTAAATCCATGATCAAATACATTTGTATGCCTTTTCTTGAATAAATCTCTTTTGTCTA TTGATTTTCAGCAAACATTCAGAGGGTGAAGGGGAAGCATTGCCTTGGCCCCTACACTGT TCTTCAGGGAAAGAGCACCAGAACCTTGAGTGGTTTCTTTGTGACCATACTTCATTAGCG AAATCACCTCTGCATCTATTATCTCCAGCTGCAGCAGCAGCAGCAGCAGCAACAATCCTT TTAAGGAGAGTTAAAAATGGCTAATGGTATTTCCCCTCACAAGCAGTAGTTATTATCATT GCTCAAGGTCAATGTACATAAAAGAATGTAGAAATTCCGAGGAAGAAATGTGAAGAGTTT TTATGAGAAAAGAACAGAGCTCCAGGGCTTTGCACAAAAGTGACAAATTACTGTAATCTT TCATGGGAATGGCCATAAGATATCATGTGTATAATATAAAAATTGCTTTTTAAACTAACC ATGTTTATTCTGATTATTAACTTCCAAGAAGAAGAAACTTAACCTAATAGTTAATTTCCT GTTGGTGCAAAATATATTATTTGGATAATGCAGACTGATATCATTAATCATATTTTTATA ATATATTGGGATAAATTGTCAAATATCTTAGGTGCTTTACCCTTTAAATCTATTGCCATT ATTTGTAATAATTCAATTAATTCTCCATATCTCTGAGCACGGATGTCCGGTATCTGTTTT AGTTATCAGTTATTTAATGGTTACTACATTCCAGGCACTCTGCTAAGTAAGTTACATAAA TTATTTAACCCTCACAGCAATGGTTTGAAATGATCTCCATTGTGTCAACCTAAAATAACC AAAAGGAACAAAATCTAATTTAAAGAAAGTGTATTCAAGCACAAAGTGTGAAGGTGGCCA TCTGGGGAACAGAGCTGCACCAAAGAATGGTGCTCAGTGCTCCTGCTGTGAGAAAAAATG AGGATCATTTGTATAGGCAAAAATCGAGTTGGTGAACAAAATTACAACGTTTTTCCAACA CAGACATGCAGATAATAAGATTTGGTTGGCTAGTACTGATTACACTCTAAGAAGGTTATG TAACATTTTATCATAAAGAGGTAACAATCACAAGGATCTCTCTAATATCGTTTAGTCTAG GTTTGAATAAAGAATAGGGAGTCTGGTTAATGTTTAACATCTTAACACAAAGGTCAGGAA GCAAAGGCCAGACACCAGAGAAGAAAAACAGCCATGTCAAATGAGTCTGTTTCTAGGGCA TCATTTTTTCCCTTGGCATAATAAATTGGGGTGATCCTGAAATTTTCATTCTTTTTACAT TTCCCTCTTTCTTTCAAACTCTAAGAGGAAGCATTGCAGGAGAATTATTTAGTCAGATCG CATATTTGATCGAATCTCACATTGCTAGGAAGACTCATTTTTAGGAAGTCATGTACCATG GAGGAGAGAAATATTAGAAAGGACCAAGGCCGAATTACAAAGAAACAAAAGGAAAGTAGT CTTGGAACCTGGTTAGGCTACATGTCTATCTCTGTAATCAAAGCAAATTTTTGAACAATC ATTACTTTGGTTTTTTAGTTGTATATTGACTTGAAGACAAATATCATACGGTAATGGAGA CAAAAACAGGATAAAACACAACAAACAAATGATTATAATTTTTAGAATATGTAACAGTGT TTGTCACCAAGTTTCCTGTGATTCAAACCAGTTATTCAGCAAGTTGTTTAGAGGACATGT CGGATCTGAAGGTTGGTTACTTGGGTTTTTATATTAGCCACTAATTTAGTCACGTTATTT GACTTAACTGTAATATAGACACAACATTTAGTTTTCAGGATAGCACAGGTTTCTTTTGGG CTACAGTGTATATGTCTAAAGTCATGTGGTTTTGTAATATAGCCTTTTTATGACAGTAAC TTAATTAATAGCAAGGTATGGAATCTTATCATTTAATAACAAGTTAGAAAATGCAGCTGT CGCTTAGGGCCTTTTGGATATAATTGGTTAGGGCCTCTATATGTCAAATGACATCTTTAA TACACAGCTGTGGTATAAAGAAAGAAGCTAAATGGTCACACCAATGGAACATAGAATATA CCTATTGAGATTGTAAACGGGGAAAAATTGTTGGTTTTGACAGCATGTGAACTATTTGAC CTTATAGCTAAGTATAACCCAGAGGACATTGTCCTCTTCATCTTGGGGTAACTATGGCCG TAGATAGCCAAGACATTTTAGTTGGAGCTAACCAATAAATACCCAGTTATTGTCTCTAAT TAGTGGCATGTGAGTCAGCACTTTGTAATATAACGGTGTGGGTGACTGTGTTTTGGGCAT TTTCCCATATCTCTAGTGCAGTGGGCCATTCATCTTTGGTGTAATTTTTTGTTCCCAACA TAAAGAGACGTGTTGATTAAGCTGGCCAAAAGAAGGAGTGAGACAAATAAACCTGTTCCG AATTTGTACTATATCATCTTGAAATCAAGTTGTCCTTTGGGGGAGCAACATTTTATTTGT TTATTGTTTTTGTCTTTTGTTTTAGTTGAGGTAGTGTCAGAGTAAAACCTAACTAGTAGC CAGGCGCAGTGGCTCACGCCTGTAATCTCAGCACTTTGGGAGGCTGAGGCGGGCGGATCA CAAGGTCAGGAGATCGAGACTATCCTGGCTAACATGGTGAAACCCCATCTCTACTAAAAA TTAAAAAAAAAAAAAAATTAGCTGGGCGTGGTGACAGGCGCCTGTAGTCCCAGCTACTCG GGAGGCTGAGGCAGGAGAATGGCGTGAACCTGGGAGGCAGAGCTTGCAGTGAGCCGAGAT CGCGCCACTGCACTCCAGGCTGGGTGACAGAGCGAGACTCCATCTCAAAAAAAAAAAAAA AAAAAGCTAACTAGTTAGAGTTTTATTTTTCTACCAAGACGCTCTTCCTATGGTGCTTGT TCTGTACAGTATCATCAAAAGCCAGAGTGTACAGTATCTTCAGCCAGACTGTCATTTTAA AATATGAATAAATGGGAATCACTAGAAAGACACATGAGACCATGGGTCTAATAAGCGTCT TTTCGTAAGCTATCAGCATAGTCTTGGGCCCATTGTAAAAAGTGGTTTGCTTCACAATAG CTGGTGATACTTCTACCAAGACATAAGAATTAGGGATAAAAAGAAGAAAGTTTAATTGGA GCTTATAAAAGAAAATCCTCCCCATCTGTTAACAATCGTTAGCATAAACAGTTTGTTTAG ATACAGACCTGGTCTGGGGTTTTGTGTTTTAGCTGTCCACATCGGATGCCATCTTTTTCC TAACCTGGTGTTGACTTATTTTAAGTCAGAGATCACCTTTCAGGGAAGAGTCCAGCCAGG AGTGTCATTCTTTTTTAGATGAGAAATGCTAACGCATGAATCTTCACCAACGAGGTTTGG TGAGGAGTACTCGATCAGGTCCATAGCATTTTCACTGAAGAGAGCTCTTTAAGAAATGTC ATATCCGGCCGAGGCGGTGGCTCACGCCTGTACTCCCAGCACTTTGGGAGGCCAAGGCAG ATGGATCACTTGATGTCAGGGTTTGAAACCAGCCTGGCCAACATGGCGAAACCCTGTCTC TACTAAAAATACAAAAAATAGTCAGGTGTGGTTATGGGTGCCTGTAATTCCAGCTACTCG GGAGGCTGAGAAAGGAGAATCAGTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCAGAGAT TGTGCCACTGCACTCCAGCCTGGGCAACAGAGCAACACTCACTCTCAAAAAAAGAAAAAA AAAAGTCTTTGCCAATAGATGAAATTTCCTAGACTGCGTGGCTTTTGAAATTTCCCATCT TCTGGGAGCTTGCTGTGAAAAGATTATTTCACCAATTTATAATTTTTAGTTAGTTGCTTC ATAAGACCGTTGTAATAGCTAAACATGTCTCCCTTTACTATTGAAGACATATAGTTTCCT GGAGACAATTTCATAGGTCTGCTTGTTATAAATTTGATTGGAGATTACTGGTATTTAGCA AAAGGGGGTCAACCTCAGGTTAAGTAGAATCAGTGGAAGAGCTTTTGGGGAAGACATACT AAAAGCCTCAGTTAATTTTGCCAGTTTTGATTATTTCATTGGTGCTTTCCACTAACCCAG ATGACTGGGGGTAGTAAACATAATGAAATGTTGGCGACTAGACCAAACTTTACATACTGA TTAAACTTAAATTTGCCCAGTGAAGTCAGTACCTCTATTGCTATGAATTCCCCAGGTTGG AATGGTTTTTAAACAGAATTTCACTCACTGTTAAAGCCATTGCTCTTCTGTAGGGAAATG CTTCTACTCAGTGAGAAAACATGTAAATCATTAGCAGGATGTATTTGTATGTTTGTGAGG GTGGCAACTGGATGAAATCTAATTGCCACACCTCAAAAGGGACCTCAGGTAAAGAAAAAT ATACTTGGGAGCCATGTAATATTTTCCCTGGATTATATTTTGAACAATTGTAACAATGAG CTATAGCTCAAAAAGGTTTTAAAAAATATTATTTTCCCCAAGCAATCATGTCTTCAGGCT CCAGTGAGTTAGCTCATGTATATAACTGTAAGTCAGCAGGAAATGCAGGCAAATCATTTG ACCCATACCATATCTCATTTTGAGAGGTGTATCCTCCCCCTTTTGCTTTCCAATTTTTCT GTTTTGATTTTAGAGTTCTAGATTAAGCTACTTCTTAAAATCAAAAGTAGATTTTTTAAG TTAATGTCAATTGTTTTCTTAATTAGATGCATTTAGAGCAATTCTTTTTGTTAACTTATC AGCTAGCTCATTTTTTTGTTTGTTTGTTTGTTTTCTGGGGTATCTGATTTTGAATGACCT GGAATTCTAATTGTGAATAGTAACTTTGGTAATATTATAGGTTCTAACAATTTTGAAATG AGGTGTCCTTTTTTTTTTTTTTTTTTTTTTTTTGAGATGGTGTCTTCCTCTGTCGCCCAG GCTAGGCAATCTCCCTCTGTCATCCAGTGGCACGATCTCGGCTCACTGCAACCTCTGCCT CCTGGGTTCAAGAGATTGTCCTGCCTCAGCCTCCTGAGTAGCTGGGACTACAGGCGTGTG CCACCGCGCCTGGCTAATTTTTGTGTTTTTAGTAGAAATGGTGTTTCACCACGTTGGCCA GGCTGGTCTCCAACTCCTGACCTCAGGTGATCCGCCTGCGTCGGCCTCCCAAAGTGCTGG GATTACAGGCATGAGCCACCACGCCCGGCCTGAGGTGTTCAATTTTTATGGGTTGACCAG AAGAGGCTAAAAATCTTGTCTGTTTCTGTGATATTAAAAAATCATGAACTACTTCAAAGG CATATCTACTGTCTGTAGAAATATTAGCAGTTTTGTTGTTGTTGTTGTTAATTGAGGAGC CCCAATCAATGTAATTAATTTCGTTTGTTGATTTAAAGTGACTTTTGGAACTTAAGCACT TTTTATTTCTTCAGTTAAGGATACTTTTTAAAGTAAAATCCATTTGTAAACCAAACAATA TCAAGCATTAGCAAGGGGAATCTCTTGTAGGCCAGCCCTAGAAAAGAGCAGTTGAACAGT TAGAGTTATGCAATTATGCAGTTTCAGCTGACAATGGAAGTAGAAGAATGCAGGAATTAG GTTATTACAACCAGAGATGGTGATATGAGAATCTGAAAGAAGTAAAACTTTATATGAAGC TATTCTACTAACTGAATAACGTTGAATGGGGTGTGAGTTTAGCATTACTTCCACAAAATG AGAAATGAAAACACTAAAGTATATTCCCATTAAAGTTTCTTTAGCTGCCTTAACAAAGCA GTGGCTTTTACAGCTCTCATGCAAGTTAGCACTCCTCTTGTTACAAAGTCTGTTGGCTAT AGCACCCTACAGGATTATTTTGTTCTCCGCATTTTTGAGTTAGGACCCTTAGAGCGTTAC CAGCACTCTTACATACAAACAATAAAAAGGAAGGTTATAATTTGGATACGCCAAAACTGG AGCATTAGCAAGGTCATCTTTTATCTTTTTTTGTTATTTATTTTTTGTAGAGGTCTCACT ATGTTGCCCAGACTGGTCTTGAACTCCCGGGCTCAAGAAACCCTCTTGCCTTGCCCTCCC AAAGTACTGTTATTACAAGCATGAGCCACTATGTTGATTTTCTTCTGTCCACTCCAGAGG GTCTGGAATGTCTTGCCTGAAGACAGCCTATAAGGGCTGGGTTTTTAAAGAAAAATTTGG GATCCAATCTCTAAATTATCCTGCCATCCCAAAAACTCTCTCACCCGTATCTTGGTTCGT GGTAGTGAAAACTTTAATATACCTTTCAGTCTGTCCATGTTAACAATAAGTCCTTCCTAA GATATTAGGTGGCCTAAGTGCTCTAATTTTTTTTTTTACAAAATCAAAGTTTTGCTTTAG AAATCTTGTGTCCTTTAAAGGTAATTGTTATAACAAGTAAATCTCATCTTCTATAGAGTT CTGCTCATCCTCTGAGCAGAGGAGAAAATTGTCTACAAACTATATTTAAAAGGATTTTTT AAAGAGGTCAACATCTGAGAGGTCTTTTTAAACATTTGTGAAAAGTAAGTTTGGCTCCCA GTGTGTCCCTAAGGCATGACTGTTCATGAGTACTGTCTGTCTTCCCAAGTGAAGACAAAC AGAAATTGACTATTTTTATCTAAAGGAATACTAAGGAATTCACTACATAAGTCTATTCCA TTCAATAACCACCTTCAGCTGCAAAGGCAGCCAACAACATGTGGGGGTTTGGCACTGCTG AATGTTAAGAATGACTGTGTTGTTAATTGCTTTCAGATTCTGTACAAACCTCCTTCTTTT ACCATTTAGTTTCCTTACAGGAAGGACTGGAATGTTACATGGGCTTGTAGAGGGAATAAT CAATCCTCTCTTTATATAAAAATCCTAAAATTCTAGTCTTTATTCCCTTTAGTGCTTTAT TCCTCAAAGGATATTATTTGAGTTTGGAAGAAGTTTTGATGGACCTATTTGAACTTTGAT ATGGATAGCTGAGATGATTTCTCCAATATCAGTGGAAGACTTTGTTAACAATTAATCAGG AGCTGCCTTTAGCAGATTTTGTAATTTTTTATTACTCAATAATTTAGTGTCTTCTATGGC AATATGGATTGCAATTGGATTAGACTTTCAAAATTTGTTATGTCTAGTAATTCAGTTTTA TTATTTAATTCTATATACATTTTCCCTTTTTGGGAGAAAGAAAGGTGAGCATTTTATAAT TTTAAGAATCATCTTTTTATAAGGTGGATGGGAGCTGATAGAACCAGAAGGAAAACATGA GTCCCTTGTATGGGACCTTGTTGAAAAGCCACAGGCTGAGACTTGTATGTTGACAAAGGA TTATTTGTGACATCTACCATTGGAATTCTTTGCTTACTCCAAGGAATGAAATCTTGTAAT AAGTTGGGCTTTATTACAGATAAAGAGGCTCCAGTGTTAACAAGAGCTTGTGTTAGTAAC AAGAGCTTGTGTTCGTTTTTTATTTAAAATAATAACTATTTTTTAAAGTCAAGCCAGGGT CATAGGCTTAAATATTTAATTTAAATTTCCTGGAAAAACCATAGGGTCCTGGTAAAAATC AGGAAATTTTAAAAGTATATCTCTAAGTTTTACCTTTCACCATGATTGATAAACTGGGGC AGGCTTTTCCCAGCCAGACACTGGCTGTTTGAGAAATGGAGCCAGGACAGGAGAAGGAGT TGGAGGAGGAGGAGGAGTTGGAGAAAGAGGAAGAAGAGGAGGAGAAAGAGAAGGTGATAG AGGAGGAAGAGGTGGTGAAGGAGGAGGAGAAGGAGGAGGTGGTGGTAGAGGAGGTGGAGG AAGAAGAGGTAGGTCTTGGTAAGGTAGTTTAAATAATATTGGACAAAAAGAAGGAGGACA TGAGGAAGAAAGAGGATAAATTTTAGCAGTCTTTATACATTTAGAGACTGAAACAATTAT TTGCTTTTTCTTATAAAGAAAAAACTTTATTAGAACCTCTTTTGGACACTTTTAAGTACC ACTGAAAATAACTCTCTTGATTATTTTGCTTTATCTTGGAGCTGGCTTTTTAAAACTGAG CATGCAAGTAAATTAGTTTAGGCATTTTAAAGGTACTTACTTTGGCCATTATAATTTGGG TTTTTTATAAATTATATGAGACGATTTTTAAAAATAACAACATGAGGTGACACTATAAGT GTTATATATAAGCCCATCTGGTATTTTTATGGTGAACTCCCAAGGAGAAAGACTCAGTTT TGGATGAACAATTGTCCATAATATGGGTTTTCTTCTTAAGTGACCAAAGATTATATGGGA AATTGGTTAAGATATGTCCACTGAACTGAGCTTCAGAACTTGGCCAGTTTAAAACCACAA ATATAGCTTATGCAACAAAGATTCTCTTTCTCTCTGTTTTTTCTTTGATCAAATTTGAGC CAGAAAAAAATGTTTCATAATTTAGCAAGTAAGACACACAGAACCTTAATCTCAAAGGAA AGTGAAACCTGTAAACAGCAGAATTTTTAGAGAAATAACAGATGAAATTCTTACCTTTAA AAGTAGAGCTTTAACTCAGGTTGCTTGAATAAAGTCTGAATCTCAGCCAAAGCCAGGGAG ACTGAAAACCAAAGAGAAGGCTTCCAGAGATAACTGCCAGATCCAGTAAAGTCAGATAAG TGACAGCCACTCATGCCAGTTCCAAAGCTCTGAATGTCAGTGAAGCAGCAAGGATCTCGG GAGGCTCACTTTGGGTCCCTTTTTGGTCAAAAAATGTCAACCTTAAATAATCAAAAGGAA TAATTTCTAATTTAAAGAGAGTTTATTTAAGCATAAAATGTAAGGGTGGCCATATGGGGA GCAGAGCTACACCAAAGAATGATGATCAGTACTCCTAATGTGGGGAAAAATGAGGATCAT TTATATAGGCAAAAACAGAAGTGCTGAACAGAATTACAATAGTTTCCATACAAAGGCTGA CATGCAGATAGAAGATGTGATTGTCTACTATTGATGACACTCTGGGGTCTCCATCTCCAG TGTCATTTAATTAAGGTTTGAATAAAGAATAAGGCATCTAGTTAACATATAATGTTACAT CAAGATCAGGAGGGAAGTTCATGCACCGGAGCAGGAAAACAGCCATGTGATGTGGCTCAG TTTCTAGGGCTTCACTTTTCCTCTTGGCATAATAAATGTGGGAAGTCTTGAAGTTGTATT TTCTTTTTTAAAATTGTTCTATTTATTTTAGAATTGAGAAAACGCAGATATAAGGATATT GCTCAGCTCTCCAATATCACTCTGTCAGTAACTAGTGAAGTTTACATTTTAAAATGAGGC CTATCTGGATTCAAGTTTAGAGCATTGACAGAATGTCTACATGGCAAGTCTTCTTCAATA TGTTGTCTTAATCCTCCTCTACCTTCATTTGTGTGAGCTATTTTATTGTCATTATTTCTT AAATAATGTTTCCTTGATTCAATTTGAAATATAAAACTATAATTTTGCTCTTATAACACC GAAAGATAGAAACTAAAAAATGTTGTCTAGGACTTCATATTGTCAATCTTGAAAAGGTAT AATAATGATTATAATACGAATTTAAAGTGGACACATGTCAAATATTAACTCATTAATGTG GGAACCAATATTACGCTACAAGGGTTTAAAGAATCCAAAGAGTGGAAACATATATGGCCA GTCAGAAATTCTGGCCTACATTTTCCTAATAGATGCAAAACTGGTCAATATCCACAGAAC ACTAATCAGCCTTCTGCCCAAGGAAATCTGTATTCTTATGGACAAGAATCGTTTGTATTA CTTTCAGTATTCAACAACTCATAGAGTTTTAAAGTAGCACGAAGACTAGGAAAGGACAAG AGATGCCATCGAATCACACACTCCACCAGTGCCCAGTTTTCTTTTGTAAACATTGAGTAA TATTCAAGAAAGAAAGAAAAAAAGAAAGAAAGAAAGAAAGAAAGAAAGGGAAAGAGAAAA AGAAAGAAAGAAAGAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAG AAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGACTGTATCTGAGAAATGTAAGCTTCTTT AAACCATCGGGCCCAGAAAGGCATTTAAAAAGTAACAGTGGCCGGGCGCGGTGATGCACT GCTGTAATCCCAGCACTATGGAAGGCCGAGGTGGGTGGATCACCTGAGGTCAGGAGTTCA CGACGAGCCTGACTAACATGGTGAGACCCCATCTCTACTAATTACAAAAAAAAAATTAGC TGGGTGTGGTGGTGGACGCCTGTAATCCTAGCTGCTTGGGAGGCTGAGACAGGAGAATCG CTTGTACCTGGGAGGCGGAAGATGCATGAGCCGAGATATTGCAGTGAGCCGAGATAGTGC CATTGCACTCCAGCCTGGGCAACAAGAGGGAAACTCCCTCTTAAAAAAAAAAGAAAAAAA AAGTAACAGCAGCCACATCTCACTCCCTCCTGAGTGAAATAATTGTCTCTTAAAGCCACT TGCTACGTGGACTCCAGACTAACTGACACCAGGTAGCCATCAAATGCCATACACCCTAGA GTTCAGCTATGTCTAGTCAATCACTAACCAATGCTATTTCTGTAAATCAATGAGAATTCT TGGCAAATAACTTTTGTAGCTGCCCCCTCTCCTGATTTGTTCTTTCTTCACAAACTTGAG TTTCTCTTTTGTTCTCAAGATCACTCCTCAAGGTAACTTGGAGGTGTGTCCCAAGCTGCA GTCTGCACCTTTGCACTAGAATGAATGCTCTTTAAACTAGATTCTGACATTTTTTATTAT TTTAGGTTAACATAGTTTTGGTCCATTTCAAAGTCTTTCACATTTTTCTCTAACTTGTTT AATTTCACCTTAATTATAACATTAAAGTAAAAAAAAATAAAGGTAGAGATGCGCAGTGGT TAGCTAACTTGATCAAGATTGCCATGGCCAACACTGTTAAACGTGGAGGAATCACCACAT ATATCCATCTACTTTCCTACTAAAATCTCACTAAAATTACAATACAGAAACGGAAAAGCG CAATTACTCAAGAATGAAGAGAATGTCAGTGGAGAAAAGTTGGACCACTGGAAAGTTACT GACATCCTACAAATACCAGTGGGTAAGCCCACTACAGCCCAGCCTCCACCTGGAAATCGA GTGTTTAACATTTATAGAAATTTAATCATAAATGCTCTGGGCTTAGTAAAATCAGCAGCT GTTGGTAGAGGGAGATTAGCACAGGGATGAAAACAAAAGGATTCGGTGAAAGATGCCCTT GTGAACTCTGGGACTTCTTGCCTCTTCTCCTTCCTCAAGGAGATATGCCTCCAAATTCTG AGATTTGAGGATTTTTCTCTTGAAAAATTGACAGTTCCCAAAGAAATTATCTTAATGTAC TCACATTGCAGACCTACCAAGTTATCGTCTAATAACCGAGAGGTGCCCCAGGTAGCTAGT CTTCTCCATACCTCACCCTTAGAGGAACTGAAATAAGATAAAACAGCCACAACAAAAGCA ACAAAACAGAAACCTATAAAGTTGTCAAAGAGAAAATTACAGCAAATTTAGTTATGTGTC AAATTGGTTTTTGTTTGAGATTCAGGAATTGGGGCAGTCTCCATTCTACAAAATAGAATG GGAGCTCTAACCAGGAAATCGCAGAGCAGTGATTTCATGAGGTGAAAACACGGAAATAGA AGAACAGGGAAAAAAAAAAAGTAAATAAATAAAAAGGCTGGGAGCAGTGGCTCATGCCTG TAATCCCAGCACTTTGGGATCAGGTGGAACACCTGAGTTCGGGAGTTCGAGACCAGACTG GCCAATATGGTGAAACCCTGTCTCTACTAAAAATACAAAAACTTAGCCTAGAGTGGTGGC ATGCGCCTATAGTCCCAGCTACTTGGGAGGCTGAGGAATGAGAATCATTTGAACCAAGGA GGCAGAGGTTGCAGTGAGCCGAGATCATGCCACTGCACCCCAGCCTGAGCAAAAGAGCGA GACTCTATCTGAAAAAAAACCAAAAAACAAAGAAACACCTGATTGATTAACATCGGCTTA TTTCGGGTTATTTTTTTGGAAAGGTTTAAACAGAGGAGACTTCCTTAATATGCTGAGTCA GGTAGACTGGAATCTTGTTTTTAGGAAAAACTGGTCTGTTTTGGGATCTCTCTGCCTTCT AAAAATTTCAGTTTGATTGTACAGTGTTCAGTTTGATTGTATAGTGATTGTATAGTGAGT CACTCCATTAGGTTTGGTCTGGTCTGTTGGGCCTAGTGCAGGAGATCTTTCCAAAAACAA TATGGTCTCCCATAATTTTGTTTAACACAGTATATAGGAGTTAATAAATAATAGAAACAA CCTGTGTAGATAAAATAAAAAATAAAACTTCTCTGCCCTCTCTGGACAATTTCACTTATT ACTAATTTAATGCCTGATATTTCAAAATGGTTTAAATCACTGAATTTTTGACAAAGGGGA AGCAAGCGAAAGATCCAGGTAATGCTTTGGAAAGGGCTCTTTGCTGCTTTGGTACAATAT AACAGGAATAAAATTGCCTCACTAGAAAATACCTTTGGCTACAAACTTGAGGAAAGGATA AGGGCAGGAAATACATTGAGAAATAATAATGTTTTAAGATGTTTTATTAGTTGTGCTTTC ATCGCTTTTTGAACCTCAGATATCAAAGAACTACTTAAGTGATTATATCACAAATCACCA ATCAGAAGCAGCAAAATAGGGACGTGGAATATTAGAATAGGAAAGAACCTTAAGCATTAT TCAGAATAACTGCTTCATTTTACAGGAGAGCAAACCAAAGTCCATCGAGGCTAAGAATGT CCCATGAAGCCACAAAGTATGCTCAAATTTCCCCAGGTAATTAAAATTAAAGTAAGTTGT CTGAGTCTTGAGTATATCTTATCAGTATTTCACAAGTAAAAAAATATAAATCTATCTTTA TTCATTACAGATTAAGAAACCAAGTGTCAGATCTAGTAAAGGACTTATTTAGAACCACAT ATAAGTTAACATCTTGATTTCCAGCCCAGGTCAATTCCCATTACACAATGCTAGTATGTC TTAACTGATTAAGAATAAAATGTTAAAGATTTTATTTTTTAATCAAAAATAAACTTGGTT ATAATCTCTACTGGTCGTGGTCACAATCAGAGTACTGAAAGGTAAACAATTCCAAAAATG TTAGATATTTCTTAGAAGTCACTTTCAGCATCCTATCATAGGATTGGTTTGAATTTCCTC AGTATTACCACATAGTAAAATACATTTTTCTCTACAATAGCATCCATTCAGGATTTTCTT TGTTTATGAAGATACAAATTAATGTATACATTTTATAATTTTCCTTGTGAAATGATATAG CAGTATATTTGTGTCCATTTTATATTTGTAAAGACCAAAATTTTAGATATCTATAATTCC CTTTTAATTCTTATGACCAGTTGGTTATTTTATTATATTTATTATATTTATCACCCATCA AAGTCATTGAAAGCCCTTATTCTGGGTTGTTTTCATATTTTCTTATATTTTACAGATCAA CCTGATTTTTTTAACCAAGAACTTTTATCTTTATAATCTTTATAAGTATTTGAATAGTTT TATATACTTCAATATATCTTATTGCATGAGAGTACAGCAGCCTCAACACTTATTAGAATA TACTGAAATATATATTAATATTTATAATATTTATATATTATACAATATTTAAAATATTTA ATGCAGACTAATATATAATATTTAAATGGAATATTTTAAATACTTAATGTATATTTAAGT ATAGTCTGATAAGTGTTGGGGCTACTATAAACATTAAGGTAAATATATTGTACAAATTTA TATCATATTAAATATATTTCATATATATCAAAATATTATATATAACATAAATATTATGTT ATATATATTTAAGTATATTCTGATAAATGTTGTTGCTACTCTGCCATCATATTTGAGAGT CTCATATAATCTAACCTTTGTGTTTTGTCAAATTAATAATAATTGTCTAAGATCTTATGC TTATTTTGTCGGGGATTGTGATAAATATATAAAGAAATATGAGAGTTGAAACATTAAAAT ATCTTTTTTTCATTAGGTCAAATATTATGTCTCTGCATGTAATTGCCTCCTTTAATATTC CTAAAAACTATCATTTCATATATTTAAATACATTTGTGAGCAAAGTTAACTATTCAGTAT TTCATTTTTTATTATTAAAAAGAAATTGTTTTTTGGTTGAAATTTATACCCAGTCATGGG AGGATTAAGGGAATGCCATGAATGCATACTTCAATATTTTATAATTATATATATCATATA TGACATGTGCAGAATTATATGCATATAAATATTTAATTATCACTGCCTTTAGGGAGAAAG TCCAGTGATTAATCAAAACCTTACACTTAGGAGACAAAAATAGAAACAAAAACAGATGGA TTCGACTTTAACTTTGTTTATTGCTATCGAATTTCCCATTACAGCACCATGCTTATTAGT AGAAAATATAAACATTGGAAGTGTATTACATTTCTTCAGCTCAACATCTTCAGTAAAAGG AAGATAATGCCACCCAGCATGCAGAATTAATGGCTGGCTTTTCTTCATTTAACTTTCTAT ATTGAGATTCATTCATAGTGTTTTATACACACATTTTTATTCATTTTTATTGTGATGTAA TATTTTGTTTTATGGATGTACAAGAATGTATTTATCCCTTCTGATGCTGGGGGACTACTT GATGATTTTTAGTTTGAAGCTATTTTGATGATGCCGCAGTGAACGTGTTTATATGTTCCA ACTCTGCAAATATACACATTTTACTCAAGAGTAGTATTGCTGAATCTTAGGTTAGGCATA TGTTCAGCTTTATTATACACATACTGCCAAGCAATGTTCTAAAAAGGTTTAACAGTTTTA TTACACAAATAATGTTATTCCACATCCTTATCAATACTACAACCCGCATAAAATTATTTT TTTATGGTGTGATAAGAGTCAAAGTTAATTGTGTTTATTTTTTTCATATAGATACCCAAC TGACACGGCATCATTTTATGAAAACAGTAGTTTTCCCTTTCTGTAGTGCATGATTTTCAT AAATCACGTGTCTAAATGTGTTTGGAACTGATGTTGAACTCTCCGTTATATTCTATTGGT CTGTTTGCCTGTTAACATTGTATTAGCATACCTTTGTAGTGACTATTGTTTTTTGTTAGC GTAAGTTCTCAAAATTTACTTTTCAAAATTATATTGGCTATTTTATGTATTCATATTTAT AATTAAATTATCAAATGCCTCTCATTTTCTGATGCCATTTTAATTGCAATTGAACTAACC CTACATACAGCTCAATTAGAAAGAATCAGCAAATTTGTAATATAGATTCCATTAACATTG TCAATTAATCTGATTATTTAAATCTTAATTTCTCGAAATTACATTTTATGGTTTTTCCAA TACATGCCTGTGGGAAGCAGAATTTAATGACTTTTTTCCTTGTATGATTTCCATCGCTTG AATGTGGGAAGAATCTGTATGTATGACAAAATATCACTTCCGTGGTCATGTCATATTGCA TGACAAAAGGAATTTTGTAGACACAATTAAGATTCCAAATCAGCTGGTATTAACATAAGG AGATCATCAACTGAGACTGACCTAATGACATCAGATCTTTAAATCTGGATCTAGCAGTCA GAGAAGGAGAGGGTCAAAGATTCAAAGCATGAGAAAGATTAAACATATCATTGCTGGCTT CAAGTTTGAGCAGTGCTGTGTGGCAAGATAAATACATGGCCTAGGAGCTGAAAATAGCCT TTGGCCATTTTCCAGCAATGAAATGGGAATCTCAATCCTGCAACCACAATGAACTGAATT TTGCCAACAAGAATGAACATCGAAGTGGATGCTTCCCCAGTGCTTCCAGACAAAAATCCC ACCTGACTGACATCTTGATTTTGGCCTTCTTAGGACCATCAGTAAAGAAACTAGCTGTAT GTACCAGCTTTCCATAGAACTGTAAACAAATACTTTTGTATTGTTTTCAGTTAATAAGTT TGTGGTAATTTGTATGCAACCATAGAAAACGAACACAGGGCTTTTGAACATTTTATTGAG ATTTATTGCTAGCTATTTTACGTTGTTGATGATATGGTAAATGGTATCATGTTTTTAAAA CTTTGTTTTGGGGTGTTCATTCCTGGAATCTAGAAATATAATGAGTTTTATGTAACTCTT CTATCTGTGACATTGTTAAAGTTAAATTTGCTTACGTATACTTACATGGATCATCTGTTC GTTTTTTAATTTTCTACCTACACAATAATGTCATTCATGAATAAGAACAAATTTGTCTCA AATTTGTATACTTTGTTGCATTATTGTCCTAAGCATGAACTAAAAATTGTTAATAGTGGG TCCTTGTCTCATGTTTTTATCTCAGGAAGTCAGTTTCAATATTTCAACATTAGTTTGAGG TTTACTGTAGGTTTTATGTTGAAATCTTCTATTGGAAGGACATTCTCTTCTATGTGTATT TTGGTAAGGATTTTTTCCTCAATTATAACTGAATGCTCAAATGTTCAAGTACCTTTTTCT ACATTTATCTGAATGATCACACAAGTATCATTTTACTTTTAATGTGGTGCACTACATTGG CTGATTGTTGAAATGGTAAAGAAATCTTTAATTTCTGGGAAAAGAAAACCCACCTTGTTT TTGATATTGTATTGTGGATTCCCAAGACCAGGCTGAGGCTCAATGATTCGCTAAGAGGAT CCTAGGATTCAGCATATAGTCATATTCAGGATCATGATTTATTAAAGTGAAAGGTTGCAA TGCAAAATTAACAAAGGGTAAAGGTAAATGGGAAAAATTCTGGAGGAAAATAAGTGACAG GCTCCAAGAGTTTCAGTCCGAATATTTTCTACTAAGCTATCTTCCAGTTCATTAATCTTC TTTTCAACTATGTGTAGTCTTCTAGTTAACTTTATTGTATTGCTAGTTTTAGTTATCACA TTTCTCAGTTCCATAATTTCAATTTGATTTTCATAGATTGTATTCATTGCTAAAATTGTT CATGTTGTCATCTATTTTCTTGAAAATGTAATTACAGTTATTTTTAAATCCATATCCAAA AATTCCATAACCTGAATCTCACAATTTTTCTCTTGATTTTTGGTCCTTAGGGTCTTGTCT TCTCATGTGACTGGTAATTAGTCATTCAATGCTCAATATTTTGCAGAAACTAGTGTAGTG AAAATTTTAAATTCTCTGTGAGATTGAGGGCTATTTCATTTTCGACTTTGCGCTTAATCT TAAGATAAAGCACTTAGGTGGGTTGATTCTTAGATGAAAATTCTGGATTGGATATCAAAA AGTAGGTTTTTATTTCCATAATTTTTGTCTTCGTATTCCCACTGGACTTTAGAAATCTCG ATTTAGTTTCTCAACCTCTTATTTGTCATTCTTTTTTGGCTTCTTGGAATTTTGGTAGCC ACTTACAAGCTTGAAAAACGTCTTAATGGAAAAAGCATTGCTGGATGTCAGGAACACCAC TCTAGGATTTACAGTTCTTTAGGATCTTGTACCCTTCAGTCCTCAAAGCATTGGTAGCCC TCTGATGCCTTTGGACAATTTTTGTATTTTACCCAGGTTTTAGAGTTGTTCTCAAAAGGG GAGCTTTTCTAATGTAAGCTAATTCCCATATCCAAAATTACAATTATCCACTATAAACTG TCCCATTTCTTTCCAGAAACTCTTCCTACCCTTGAGTAGTGGGTGTTTCCTATAATTCTC TCCCTGAGTTTTCTTGGCACAGTCTACATGATTTCCATGAGAGATTGTATTTGTCCCCAG AAATTTGATGAACCTCTATGCTTATAACTTTTCAATATCTGATTCAACTCCAAGCTTTTC TTGAATGCCAAACCTGTAGATTCTATTGCTTAGTGGAAAGTCTCCACTTGGCATACCAAC CATGCCTCAAACATTACATATTTAGTTTTAGTATCATACTTTTGTCCTCTAAAATTACCC CTTCATCTAGAGATTTTATTTTTATGAGTGATACTAGAAGCCATCTAGTAACTAAAGCCT AAAACGTGCCCTAATTTATGTAGCCTCTTACATATAACTAATAACTGGTCACATATGTTC ATCCTGTTGATAATATGCATACATGTCACCACTTCCTACTCCTGCTGATACCACCCTTAT TTACACCCTTTTTATCTCATATCAGAATTATTTTGGTGATTTCTAAATGGTATGGTATCG TCACTTTTAGCCAGAAATGTGCAACAGAAATTACTTACAAAGCTTTTCTAAAAATGCAAG TGTCAGGTTTGACTTCAGACCAACTAAATCAGAATCTCCAAGAAAATAGTTGAGGTACAT ACAGTCTGAATTGCATCTGGTAATTTTACCAATATATTCTGTATATTGCTGCCAGGGTAA TCTTTCTCAAGATTAAATGTGATCATGCCTTTGACCTACTGAAATTTCTTCAGATATCTC TATTACCCATGAAGAAAACAATCAGATGCTTTTGCATGTCCCCTGTGTTCTTCACAATGT TCTATTTTACTTCAGTTTTGTTTTTTTTGTTTTGGGATTTTGTTTGTTCGTTTCTTTAGC GCAATCAGAGCCTATACCCTAACTAGGACAACGATCATGTTTCTTTGCCTAGTCTTAGTG TCTCATAAACTCTATTCTCTGGCCATAACTGTTACTCATGTTTACGAGATTTAATTCAAC TACAAAATCTTTTCTGAAGTTAGTCAATTTTTTCTCTAAAGGTCAACGTAGTAAATATTT TAGTAATGATTTTTGCAAACTTGGTCACTGTCACAGTTACTCAACTCTGACATTGTTGCA TGGACAGATACATAGATAATACATGTTTGAATGGCTATGGCACTGTTCAAATAAAACTTT ATTATAAAAACAGACAGCAGGAAACATTTTGCTCAAGGGTCATAGTTTGATGATGCCTGC TGTAGATAGATTTTTCCTCACTATACTTTGCACCTATCCAGTACTGCACTAGCATCTTTC AAGGCATAATTTGTACTTTATTTTTATTTTATTTATATGTTGACCATTTATTAGACTGTG GACTTTTGGATAGCAAGAAAATTTTCTTTTTTATCTATGGATATGCCTAATACACAACAT GATAGTGGATGAATAAATAGTGCAACTTTCATTCAAAAGAAAAAGCCCAATACTTGCATT TTGAGCAGAAATTCTAGAGGTTAATAAAAACATAATTATCTTAAAGTTTTATGGAATGCA ATTATATAAACAGAACTTATTTTAAAGTAGTATTCATAAAGTAATAAGGTAGAGATGAAG AAAAGCACATATGAATACCAAGAGACTTTGCAAACATAGAAATAAAAAACAAATATGTGT TCACAGAATCAGCATTATTTCTTTATTCCAAAAATTAAGACTCTCTATTATACAGCCCAT GAAGATATTAAGCAGAGGCCAATGAACTTTTAGCCATGAGATCAAGGACTGTTTTCTTTA CATACTGTTTAATTATAGTACATAGTGGAATGCCTGGAAAAACACAAGTTTGATGTACTT AGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAGAAAGAAAG AGAAAAAGAAAGAAAGAAAAAATATTTTCTTTTCTTTATCTAATCTACCATTGATGGACA CATGGGTTGATTTCATGTCTTTGCCTTTGTGAGTTACACAGCAATGAATGTATAAGTGCA TGTTCCTTTTGGTAAAATGATATTTTTGTTGTTGTTGTTGTGGGGGGTTTATATCCAGTA ATGGGATTGCTGGCTGGAATGGTAGTTCTGTTTTTAAGTCCTTTGTGAAATCGCCAAACT GCTTTCCACACTGGCTTGACTAATTTACATTCCCACCAACAGCACATGATCATTCATTCC CTTTTCTTTGCAGCCTCGCCAGCCTCTGTTGTTTTTTGACTTTTTGATAATAGTCATTCT GACTGGTGTGAGATGCTATCTCATTGTGGTTTTGATTTGCATTTCTCTGATGATTAGTAA TGCTGAGCATTTTTTCATATGCTTGTTGGCCACTTGTACGTCTTCTTTTAAGAAGTGTCA CTTCATGTCGTTTGCCCATTTTTAATGGAATTATTTGTGTTTTGCTTGTTGATTTATGTT ACACCATGGAATGCTATGCAGCCATAAAAAAGACTAAAATCATGTCCTTTGCAGCAAGAT GGATGGATCTGGAGACCATAATCCTCAACAAATTAATGCAGGAATAGAAAACCAAATACC GCATGTTCTCACTTATAAGTGGGAGCTAAGCATTGAGCACACATAGACATAAATATGAAA ACAATAGACTGTGCACTACTAGAGGGTGAAAGGAGGGGTTGGGTTAAAAATCTACCTATC AAGTATTATGCTTACTACCAGAGTGACAGGCTCCATTCTCCAAAGCTCAGCGGAATGCAA TATTCCCATGCAACAAATCTGCATATATACCCCTTGTATCTAAAATAAAAGTTGAAATTT AAACTCATATATATGCATATATATATATACAGTTATGTATATGTATATATATAGTTTAAT ATATATACACACACACATATATACAGACACACATATATATAGTTCAATATATATACATAC ACACACACATATATATGTGTGTGTATATATATATATTTATCTTTTCTGGCTAGACTACAT CAGTTTTGTAGATATTCAGCCTTTTACAAAAATGTGTAAACTTCTATCTTAAAGCACTGG AGAACTTTATTTTACAAGCTCCATGTCCCCTTCAAAGAAGATTTGGAGACATTCTTTTAG TTTCTCATTTTCCCAGTATGCTTCAATAGTTCCTCATGAAGTTAACAACAGGATCCCCCA ATTCATTAAGAGAACACACCAGCTTCACTTTAGAAAATTCCTATTCTACATTACCAGCTC ACCAATTCAGATCCTACCCTTTGGATATATTTCTTGCTCTTTATGATAACCACTTGTTTT ATGAGACTTTGATTGTTATCTTTTAGAGGAATTTTAGATATTTCCCCTTTCTCCCTCTCC CCCCACCCCCAGGACTACAGCTCTATTAAGATTCATGTTTGTTTATCCCACACATATATA TTGGATGTATTTTGCCTAGTTACAGTTACAAGTACAGGCAAATTGGGAGCAAAATGAACA TAGTCTCTACTCTCATGGAGCCCATTTACTAGAGAGGAGAAGTTGGATGCATTAATTTAT TTATTCAAATCTCTATTCACACGGGAACACTTGGACTGAGCAAATGCTGTGGTGGGGCAG AGGCTGCACGTGTTCCCTGGCTAAACGATGCTTACATCCCTGTTTGGCAGTCAGATATCA CGAGGAAAAATTGTAACCCAATTTAGCAGAAGCAATATACAGATATTTTGAGTGATGTGG GTTCATAATGAAAGGGCATTTAAGTAGAAATGACGATAATGTTAAGGATTGTCAAAGTAC AATGTGGCTTGAGACTTAAAGAATGATTGATTAGGTGCCATCAGGGTGAGTGAGAGAAAA GTCTTGGTAGGAAACATTTTCTTCTAAACTAACACATGGGGCTGAAGAAACAGTACTAGC AGAAGGTGAAGCTAGAGATGTGTATTAAACTAAACAACCAGGACGTTAACTGAGTGCTTT GTAAAAAATGTTCCTCATACTAGGTAAATTGTTAAGAAACAAATGCTCCTGTGTCACAGA AATACCTAATAGTGGCTGGGCATGGTGGCTCTAAGGGAGGAGACCACCCCTCATATTGTC TTATGTCCAATTTCTGCCTCCAAAGTAAGAAGAAGTAAAAACTAAAAGGCAGAAATGGAA TCCACAAGCAGACAGCCTGGTGCCACACCCTGGGCCTGGTAGTTAAAGATCAACCCCTGA CCTAACTGGTTATTTGCATAAAAAAGCACTGTGAAGATCCCTGTCCTATTCTGCTCTGTT CTAATTACAGGCGTATGCAACCCCCAGTCACTTACCCACTGCTTGCTCAATCGAACACGA CCCTCTCATGTGGACCCCCTTAGAGTTGTGAGCCCTTAAAATGGACAGGATTGCTCACTC CAGGAGCTCGGCTCTTGAGACAGGAGTCTTGCCGATGCTCCCAGCCAAATAAACCCCTTC CTTCTTTAACTTGGTGTTTGAGGGGTTTCGTCTGTGGCTCTTCCCGCTACAGCTCATGCC CATAATCCCAGCACTTTGGGAGGCCGAGGTGGGAGGATCACCTGAGGTCAGGAGTTGGAG ACCAGCCTGGCCAACATAGCGAAACCCTGTCTCTACTAAAAATACGAAAATTAGCCAGGT GTGGTGACATGTGCCTGTAATCCCAGCTACTCGAGAGGCTGAGGCATGAGAAATGCTTGA AACCGGGAGGTGGAGTTTACAGTGAGCTGAGATTGTGCCACTACAATCCAGCCTGGGTGA TAGAGTGAGACCCTGTCTCAAAAAAGAAAAGAAAAAATTAAAGAAATACCTAATAGCTTC TAAAAACTTGTGATTATCCTTTAAGTATGAAAAAGTTATTGCTGAAAACAACTTCCTAGC CAGGGACTAAATTTCTCATCCTCCCTTGCATGCAAGTAGTTCTATGTGACTAGTCCTCAC TCACAATTATTAGTTGAAGTGATGTGGATGACTTCTAGGCTAAGAGAGTTAGGACGTGAG TGTGCATTCCTCACCTCTTAATCCCCACCTGCAGATGCGGAGTACTTGTGAGCCCTGGAG ATGAGAAATTATAGGATGGGAGGCGCTTATATTCCTGAGTGACCACATAGAGGAGAGCTG CATTGACAACCATGGTTGTTGCTGTTGCTAGGTGGTATCTTAACAATTATGTTATTTGGT AATCTACATAATACTGTATACAAGCTAACAAAAGATGTATAGTTAGCTGCCTAATAAATA AATAGAAATATGTCAATTTGGCTCTGCATTCATATCATTGCATTTTCCTTATCAGGAATT TATTTTTTATATAAAACTATGCTCTAAAACTAGAGTTCTTAATTATAGTAAAAACATTTT TATCTTTTCCCTCCACTTTTTCTATGTACTGCAATGACCAGTACTGCTTCCCTAAATGAA GTAATCCGTCTCTTGGGGATCTGTGACTTTTACTAACTATCTCTTACTCAAAAAAATGTA ACATTCTTACACAAGTGACTTGGATTATGGCATAAATTGAAAATATTGCTTTTTTTTTCT TTCAAGAAAATAATTTGTCTTTCTTAATGATTGTCAGAATTTTGTAGATCCATGTGAATG TGAGCACCATACGTGTTAGGTCAAGAGGGGTTGCTTTGTACATCTCCAAATCATCATTCC TTATGGCCTAATGAAGGAAATCTTGGAAATGGGGATGAAAAAGCAATGTTCAGACAAGGA AGCCCAAGTAGCTAATAAATATGAAGAGCCTCAATCTCACCTGTTGTCAGTTTTTGAACA AACTAAAGCAGAAATGCAATGAATGCTACAAATAACAAATAGGCATAAGTGTTGAAAGCC TCATCATACCAAAGGTTGACACTTGTGTAAGAATATGGAAATTCTTTGATAATTCTGATG GAAGTATACATTAGTTCAACCACTTTGGAAAGGAATTTTCTCTCTCTTTTTTTTTTTTTT TTTTTTTTGTTTTGAGATGGAGTCTCGCTTCGTCGCCAAGGCTGGAGTGTAGCGGCGCAA TCTCAGCTCACTGCAACCTCTGCCTCCCAGGTTCAAGCCATTCTCCTGCCTCAGCCTCCT GAGTAGCTGGGACTACTGGCACCCGCCACCACGCCTAGCTGATTTTTGTATTTTGTTTTT TAGTAGAGACGGAGTTTCACCGTGTTAGCCAGGATGGTCTTGATCTCCTAACCTTGTGAT CCACCCGCCTTGGCCTCCCAAAGTGCTGGGATTACAGATGTGAGCCACCGCACCCAGCCT GGAGAGCAATTTTCTAATATCAGGTCAAAATAATAAAGATGTGAACATCCTAAGTTGCAG AAGTTCCACTTCTAAATATCTACACTATAGAAACACACACATAAATGGAGAGAAGCAGGT AAAATAATGTGCACCAGGATGCTGTTGGAAAGGAAGAAAAGAAGGAGGGAAGGAAGGAAG GAAAGAAGGAAGGAAGGAAGGGAGGGAGGGAGGGAGGGAGGGAAAAAGATAACATAAAAT TTAATCAATAAGGAATTGGGTAATTTAATTATAATGTATTTACAAAGGGACTGCTAAGCA GCAATATATAGTAAATTAACATATATATTCTCTTCTGTAAAGTAACATATATATTCTCTT ACGTAAAACAGCAAAAATACTATATATTTATTATGAATACCTACATATGTAGTAAAGGTA TGAAAACACAAATGGAATAAATAATAAGCAAATTTAGCTTGTGGATTATATATCTAGGAA GGAATAAAGGTGAATATAATTGTGCAGTTGGCTTCTCTTTCATCTGTATAATGGTTAATC TTAAGTGTCAACTTGGTTGAGTTCAAGGGCTACACCATCATTATAAAGGAACACCCATTA CTTCTCAGTACATTTGTGAGGGTGTTTCAAGAAATTCACATTTGAATCAGTAGACAGAGT CAAGAAGATCCCCCCTTGCCAGTTTGGGCAGGCATCATCCAATCTGTCAAGGGCCCAGAT AAAATGAAAAGGTGGAATAAGGGCAGCTCTCTCTCTCATCTGCGGCCAGGACATCCATCT TTTCCTGCTGTCAAACACTGGAGCTCCTGGTTCCCTGGCCTTCTAATCTGGGGACTTACA GCATCCTGAAGCCACATCCAAGTTCTCAGGCTTTCTTCCTTGGACTGAGGTTTGCACCAT TGGATTTCCTAGTTCTCAGGGAGGCAGATTCAAACTGAATTACTCCAGTGGCTTCCCCAG TACTTCGGCTGTTGACGGCCTAATGAGACTTCTTGACCTTCATGATCATCTGAGCCAATT CCCATAACAAATCCTCTCATATATCTGTATCAATATCAATCTGGTTGTGTATCCATATCC TATTGGCTCTGTATTTTTAAAGAACCATGATTAATACAATCCATTTTTAAAAATTTCTTC TTTTTTTTCTTTTTTTTAATTTTGAGACAGAGTTTTGCTCTTGTTGCCCAGGCTGGAGTG CAATGGCTCGATCTCGGCTCACCGCAACCTCTGCCTCCTGGATTCAAGCGATACTCCTGC CTCAGCCTCTTGAGTAGCTGGGATTACAGGCGTGTGCCACCACGCCCAGCTAATTTTGTA TTTTTAGTAGAGACAGGGCTTCTGTGTGTTGGTCAGGCTGATCTCGAACTCCCGACCTCA GGTGATCCACCAACCTCAGTTTCCCAAAGTGCTAGGATTACTGGCGTGAGCCACTGTGCC CAGCAAAAAAAAACTCCTTTAAAAAATAGTACATATTTCTGAGGTGCATTGGTAAAACAT TAACATGTTTAAAATCTCAATGTGAAGTATATGGAGACATTATACAATTTTCTGTTTCTT TGTGTTTGCCTGTGTCACTTAGTAATACAGCTCTATATTTTAAAGATTCATGGCAGGGCG CATTCTGTAAGACAGGTCTTCATTTTTAATCTCAATCACTGTTTAAACTTCTTTGAGGCT TCCTTCCAGCTGATACCCAAATCAACAATGGTACCCATTCAGAAACCACTTGAATAATAA GGACCCATAAGCTCCACAAGATCTTCAAGGTCAAGAATTGTGTCCTCATTATCTCTATGT ATGTAGTACCTAACTTAATGTAGCAGCTCAGTGAACAATTTGTCCAAGTGAACTCAGCTG TGGCTGGCAAACTCATCCCAGGTATAGACAGTGATGAAGAGCTGGTTAGGTCTATCTTAT TTCCATTTTTTTTTTTAACAGTTTCACAACATCCAGTGTTATTATCTACCTCTGGTAAGT GGCAACCATGGAATTGTGAGCAACTAAAAGGCACGTATGTTCAAATTATCTATCCACTTC CTGACATGATAAACTACATAGACATATGCCTTACTAATGACAAAATATACATCACCCGGT GGTTCTTTTGCTTAATGACAAACTCCTTACTGAGAGTTCATTAAGTCTTCTATCTGGGAC TAGCTAGAAGACAGCTCTCACACTGGGATGGGGCCTGGCTGACTTTGCTTTGCTTTGCCC TCTGGTTGGGTTCCGTGCTTGTCTTGGCAGGTCATTGCCTATTCATGTAGAAATTTCTGT AAAGATGAACTGGCTGCAGAGATGCTGCAGGCTTTTAGGGCTTCAAATTACAAGGCTTTC TGCTTAAAATGCTGTTACTTCTATTCTTCTGCCCCCTCTCTAACTCCTGTCCCACACAAC CCACCTCACAAGTTATACAGACTACTTAGAATCCCCTGACACGCTGTATTGTTTCTTGAC TCTGTGCCTTGGCACAGGCTGTTTCCTATGCCAGGAATGTCATTCTCTGTTCCTTGTCTA TCTGGCAAGCATCTACGTCCACCTGGCAAGGCCCTACTCAGACATCACTCCTTGTCTCAT AACATCCCTGAATTTTGCAATCCAGATTTATAAGGACCTAAAACAAGAAAGGACAAAATC CAGTCACCAAGTTCTGAAATTTAATATTTTCCACAATATGCCCAACATGTTCACTATCAT CCATTTGTTCACTTAAAATGTATTGAGGCCGGGAACAGTATCTCACACCTGTAATCCCAG CACTTTGGGAGGCCAAGGCAGGCGGATGACTTGAGGTCAGGAGTTCACGACTAGCCTAGC CAATATGGCAAAACTCTGTCTCTACTGAAAATACAAAAATTAGCCAGGCATGGTGGCACA GGCCTATAGTCCCAGCTACTCGGGAGGCTGAGGTGGAAGAATCGCTTGTACCTAGGAAGC AGAGGGTGCAGTGAGCCAAGATTGCACCACTGCACTCCAGCCTGGATGACAGAGTGAGAT TCTGTCTCAATAAATAAATAAATTGTATTGAATGTTTACTAAATTTAAGAAATATACAAG GTGCTATGGTTTGGATATTTGCCTCCCCAAACCTCATGTTGAAAATTGATCCCAATGTTG GAGGTGGAGCCTAACGGGAGGTGATTGGGTCACGGAGGTGGATCCGTCATGAAAAGATCA ATGCCCTACCTTGGGAGGGGGATGATTGCATTCTCCTCTTCAAGAGCTGGTTATTAAAAA GAGCCTGACTTCTCCCTGCCCTCTCTTGCTGCCTCTCTCTATATATGATTTCTGCACAGG CCAGCCCCCCTTCACTTTTTGTTGTGAAAGGAAGAAGCCTGAGACCCTCCCTAGAAACTG GGCAGCTGCTGGTGCCATGCTTCTGTACAGCCTGCACAATTGTGATCCAAATACACTTCT TTTCTTTATAAACTACCCAGCCTCAGATATTCCTTTATTCAAACAAACTGGACTGACAGA AAATTGGTACAGTGAAGTAGAATGCTGCTAAAATGATAACTAAGTATGTGGAAGCAGCTT TGGAACTAAGTAATGGCAACAGGTTGGAAGAGTTTGGAGGGCTCAGAAAAAGATAAAAGG ATGAAAGAAAGTTTGGGCCTTCTTCAAGATTGGTTAAGTGATTGTGAACAAAATGTTTAT AGAAATATAGACAATAAAGGCCCTGCTGTCAGGTCTCAGCTGGAAATGAGGAAATTATTG GGAACCTGAGCAAAGGTCACCCTTGTTACACCTTAGAAAAGAATTGGCTGCATTGTGTCC ATGCCCTAGGGCTTTGAGAAAGGTCAAAATTAAGAGTGATAATCTAGAGGTAAAAATTTC CAAGCAGAAAGCATTCAAGAAGTGGCATGGCTACTTGTAATTGCTTACTCTGAATCATCT GAATTAATGGAGCAAAGGAATGGCCTAAAGATGGAATTGATAACTAAAAGGGAAGCAGTG CATTCAAATTTCAAAAATTTGCAACCTGATCATGAGATAGAATAGGAAAGAGCATTTTTA GAAGAATAATTCAAAGGTAAAGCTGAGAGACCCTTTGTTAAAGACATTAGCACAGGTAAA AGGGAGCCAGGTACTAATAAACAGGACGGTGAGGAAATGGCCCCAAAGGCATTTTAGAAA TCTTTGAAGCAGTCCCTCCTATTATAGCCCCAGAGGCCTAGGACAACAGAATGACAGAAT GGTTTCAGGGGAGGGGGTGGGGGGACTGCTGCCCTGCAAGGTCTCAACTCTATCTATGAC TGAAACAGCCCCAGATACTGCTCAGACCTTGACCATAGAGAGTGCAAACCATAAGCTTTG GTAATGTCCACATAGTATTAAGCCTGCAAGCACAAAGAATGCAAGAATGGTGAAGCTTGG TAGCTTCCAACTGGATTTCAGATGATATATTGGAAAGCCTGGGAGCACAGACAGAAAACT GCCACAGAGGCAGAGCCACCACAGAGAGTCCCCACTGGGACAATACCTAATGGAGAGGTG AGAGCAAGACTGCCACGAAGACTCTAGAATTATAGAGCCACTGGCAGCATGCAACCTTCT CCTGGAAAGGCTACAGGCATTCAACTGCAACCCACAAGGGCAGCCACATGGGCTGTACCT AGCAAAACCATGAGTACAGAGCTGTCCAAAGCCTCAGGAGCTCACCCTCACAGCAGTGTG CCCAGGACATAGGACATGGAGGCAAGGAGATTATTTTGGAGCTTTAAGATTTAATGTCTA TGCTGCTGGGTTTTAGACTCATGTGGGGCCTATTACCCCTTTCTTTTGACCTATGTTTCT TTTGACCTATGTTTCTTTTGAATGTTTACGCAATGCCGGTATCACCATTGTATCCTGGAA GTAAATAACTTATTATTATTATTATTATTTTACAGTCTTGCAGCTGAAAGGAATTTACCT TGAGTCTCAGATGATACTTTGAACTTTGAATTTTTAAGTTTCTGCAGAAACAAGCTAAGA CTGTTGGGACTATCGGGAAGGAATGTTTTGTAATGCGAGAAGGACATGCTTTTGGGGGGC CAAATGTAGAATGATATGGCTTGGATGTTTGTCCACCAAAACCTCATATTAAAATTTGAT CCCCCTGTTGTAGGTGCCCTCCCTCCAGGAGAGGGTGAGTCAGTTATCCATTAGTTTTCA TGAGAATTGATTTTTAAAAAGACCTGGCATCTCCCCATTCTCTCTCTTGCTTTCTCTCCC ATCACGTGATCTTTCCACACACTGGCTCAACTTCGCCTTCTGCCATGAATGCAAGGAACT TGAGGCCCTCACTAGAAGCTGGACAGATGCTGGGACCATGCATCTTGTACAGCCTGCACA ACCATGAGCCAAATAAACATCTTCCCTTTATAAATTTCCTAGCCTCAGGTATTCCTTGAC AGCAACAGAAAATGAATTAATACACAAGGTATTAAAGATAGAAAGACATCTAAGACACAA AGTTTGCTCATAAAGAGTTTATTGGATAGTGGGAAAGACCAAAATGCAACCCACAAAACC AAACATGTATAGTATAATATGCTAATACATATATGTTCACATAAAAATGTAGAAGTCATT AGCTAGGTGGCTAATAACATCAGGGAATGCCAGATAAAGTGGGTAAAATGCATATTAAGA GAAAGATTGAGATGAAGTTTACCATCCACAACACACATACAGGCAGGCCCACCCATAAGA GTGCTCACAACTTAGCTTTTACACATGATTCCATATACATGGCTCTATTCTAAGTAAAAT ATAGAAATTAGAAGCATCATGGACAATGACTACTTGGTTTATTTCATTTTGTACATGTGA CACTAAGTGCACAAGAAGTCCAGAGGTGACCAGATCAATGTGGCAAGGACATGCAAACGA TCAAAATCTAACATTAGTATATGCACATAAATCTAGAGTATAAGTTCTCTGAGAGAAGGA ATTGTTTTATATTTTGTCCAAATAGAAGAAATGTTAAATTTTCAATAGCATGAATTTCTA ACATCTAAAATGGCGCCTAATATAAAAAGTGGTACTCGGTAAATATTTATGGAAAATATG TATACATGAATAAATATACCCGGTAGAAAATAAAAGAAACAGAAGTAAATATCGCCATCC AAATAATTTAAGGTCAATAGTTTCAGTTTCTCTTTTGCAAAATCTTTAACTTGCTTAACT TTCTTTCTTTTAGTTGTGTTCAAGAGTCGGAATGCCAAACCTGAAGGAATCCTAGCACCT ACCTTATCTGTAAGTTTGCCTTAACAGAGTCACAACTCTGAGGGAGAAATACTCAACCAG ATCAGCTTGCATTCATGGCAGAAGGCAAAGTTGAGCCAGTGTGTGCAAAGATCACATGAT GGGAGAGAAAGCAAGAGAGAGAAGGGGGAGATGCCAGGTCTTTTTAAAAATCAGCTCTCG TGAAAACTAATGGAGAACTGACTCACCCTCTCCTGGAGGGAGGGCATGAATCTAATCATG AGGGATCCATCCTCATGACCCAATCATGGATCACGTAGGTGGGATCCATGTTTCGGTCTT GAGGATGGATCCCTCATGATTAGAGAGCTGTCAAGGGGTTGGATTTGGAATGTATTTTGA AGATATAGCCTCATGGCTGTAATCCCAGCATTTCAGGAGGCAGAGGTGGGCAGATTATTT GAGGTCAGGAATTTGAGACCAGCCTGGTCAATGTGGCAAAACACCGTCTCTACTAAAAAT ACAAAAATTAGCTGGGCTTGGTGATGGGCACCTGTGATCCCAGCTACTCCGCAGGCTGAG GCAGGAGAATTGCTTGAAGCCGTGAGACGGAGGTTACAGTGAGCTGAGATCATGCCACTG CACTCCAGCCTGGGCAACAGAGTGGGACTCGGTCTCAAAAAAAAGAAAGTATAGCATATA GGGTTTCTTGATGGATTTTGATGTGAACACTGAGGGAAAGAGAACAATAAAGAATGACTT TTATGAGACAGGAAGAGTTGGGGATACAAAATAAATTCTCTTTTAGACATAATAAGTTTG AAATTAACATTAAGTTGAAAGGTCATATAGGCAATTGGATAAATGTGCCTTAAGTTCACG TCAAAGTCAGAGCTGAAGATTTAAGCTTTGACTTATTAATGCTATAAATAATGTAAATAA TGTACATTGACTATAACAGGCAATGATCAATTTATTAATATGTCTCCTGACCTGCAGAAA GCAGTCAGACTTTTTTTCCAAGACCAAGTATACTAATACAACTGAAAGAGATTTTTGTGA GAGCTAATTTATTTGATTCCACCTTAACATTCCAATCATGCCTTGCAGTATATTGAAGGC TGCAAGATGATCAAATTTAAATAGTGCAATACAGGATTTCATATTTCCTTCACACTTTTG AACAACATTTTATTGAATAACAAATTAATGATATTCTACTCCAATATTGAAAATTTATTG ATGCTTATCTGCCCAAAACATCTTCCCTCGCGGGAGGACTCGAGTGACCTATAGACTTGC TTATACAGAGATAGGGAAAAAAAGAATCCTTCAACAGCCATTTTCTCACTGCTCTAGGAG ATCCTCTGCTCTTCCCTTTCTTTTAGCCAAAGCTAAAGAAATGGAGTGAAAAAAGATTGA ATTTATTCAGTGTCATCTCAAGCTGGCTGAGAGAGTATCTCTCCGTGGCATGGCTGCAAA ATGACACAGGAAAGCTGCTCAGTCTCATTAACTTTACAAGCCAATCTGCTATTAGCATCT GGTGGTAAATTTGCCAATAATGAAAAAGGCTGGGATATACCTCCTGGAATCATAGTTTTA CACATTTTGAATATTCAGTATGATCTTTCCTGCATTTCTGATCATCTGCCAAATTCTAAT TTTTTAGGAATAGCAAGGAATGTTGTTGGGAGGAAGATTGACAGGAGATACAAGCCTGGA TTTTGTTTTTTGTTATTTTATTTTATTTTATTTATTTACAGCATTGTTCTAGTGCACTAG AGTATTCACCTCAATTTCCTTACTTATAACAAGAAATACCCAGTGACTGATCAGCCTCAC TAAGTCAAACTGTGTACTGGAAATTTCAGGTTTTCTACACATCAAAACCAGCCATGTGCT TAGGCCCATTGAAAGATACATTATCCTAACTCTAGACTAACTTCTCTCCATTTTGAAAGC CAATTTCTTTTCTTTTCTTTCTTTTTTTTTTTTTTTGAAATGGAGTCTCGCTCTGTCACC CAGGCTGGAGTGCAATGGTGCAATCTCGGCTCACTACAACCTCCGCCTCCCGGGTTCAAG CAATTATCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGCACCCACCATCATGTCCG ACTAATTTTTGTATTTTTGTAGAGACGGGGTTTCACCTTGCTGGCCAGGCTGGTCTCGAA CCAGGAGTTCAAGACCAGCCTGGCCAGCAAGGTGAAACCTCATCTCTAATAAAAATACAA AAATTAGCCGAGTGTGTTGGCAAGTGCCTGTAATCCCAGCTATTCAGGATGCTGAGGTAT GAGAATCTCTTGCACCTGGGAGGTAGAGGTTGCAGTGAAAGGAGATCGCGCCACTGCACT CCAGCCTAGGCGACAGAGAGAGACTCCATCTCAAAAAACACAAAAATAAATAAAAGTAGT TTTCAATTTTGCAATTTGACCAATATTTAAATGCAAATATTTTATATTTGCATTTAAAAT ATAATTGTCTAGTTTTTACCAATATTACCATGAGCCAAGACCAACTAAATTACCACAGAG GAGACTGAGATGAATTCAGGCACAAGATTTAAGTTCCATATAGACGTGAGGAACTAATGT AAAAGAGTACTAATGTGTCAGTAGGAATTTTTAGCAACATATGTCAAGCTGCCTTATCCA AGTTATTCTTGGCAAGTCCCATAATTTCTAAATTAAATACAATGCTGAGGTCAACATGTG TAAATCAGAAATGATGTTTTTACATAGAAAAATGATTCCATACTCACAGTGCTTTTGTTA GAATTTGACTTTGTATTTTCATGCCTCCAATACACTCTAGGAGCTCTGTTTTCTACTTGT CCCAAGATCAAGGCATATCATGAAAATAAAAGCTAGAGACAATCAAGAAACCACATCTAT TGATATCATTCATCCGGGTTTGTTTTGAGTTGACACTGAATAATAAATCTTATTCTCAAA ACCACAACCAAATACACCTACTGAGAAGAATAAATATGTTAATACTTCCTAATACTTAAA AATACTTTCAAAATATATCACATCACCTATTCCTTTCAATATACCTTTGGGGACATTATT GACAACTTTAAAGATGAGATTAAATGAGATTAAACACATTGTAAATGGCAAGGAAGAAAA GACTCAAATCCAGATCTTATCATACTGCTGTTTCCACCATGAAGCATCTATCACTGCAAG ACAGACTTTTTTATAAACTGTGATGATGTTACTCACCATCCTTGAAATCAATGCTTTGAG TGGTTTAGTTAATGTGGATGTATAGACAATCTTCTACTGTCTTGTTCAGATGTCTTACCC TGCCCCCTTGCAACCAACAATACAAGTAAGAAAAAAGAGGCTAATGCTATTGGCACAAAG TATAGCCATGTAATTTAAAAATCCAACTGATATTTTAAGACTGAAAAATTTATAAAAATT TGTAATGAAAGAATCTTAATCCACACACCTAAGATGTTGTTTGCCAAAATTTGAAATATA ATGCTGATATTTTTATAATTTATTCCCCTAGGGTGAAATTCTGAATATAAGAAGAATGCC CACCCAGGAAATGTATATATCAGATGGAAACTGAAGATGAAATAGAACACAGATAACTGA AAATACAGAACTCTTTCACTACAAAGTGCTATATCTTATGAGTCCATTCAAATACTAAAG ATTTGCTATTAGTTGAATCAGCTAAAGGACTTTTCCAAAACTATGAACCATATAAAAATA TGTGCAGAACCAACTTTTCAATACTTTACACTTTGTCATTCTGCTCATTCAACTTTAGCA GAACCTAAAAATGCTTTAAACATTCACCATTGTTACTCCATTATCCTGTTGATTTTGCCA GTGATTTAGCACATAAAAACATTAGGACATATGCCATGAGTATTTCATCCCATAGCCATC AAGTAAAAATATAGTTTCTAGAGACTAAAATTTATGGATGACAAGTAGGTTCTACCTATG AACTAGGTACATGGAATAAAGTAAAATTAACCATCAAGAACAAATGTTGTCATCAGTTGC TATATTTAGTAAATCTATTTGAAGTGCTGAATGTCTGAAATGTGGAGCATCTTATCATGA AAGATAACAGTGCTAGAAAAATACAGAAAAACGGACAATATATTTTTCTATATAGACAAT AACTGACATTAGACTCCAGCCAGGAATAAGAAAGTAAACATAATTTGACTGCACATGATA AACAAAAATGCAAAAGCATTTAGAGGCAAATCCTTAAAACCTCTAAACTTATTACTGGTA AAATAATCAAGCTTATTAGGATATCTTGAAATCACACATTTTTCTACATCCTACTCCTCT TTATATTTGTAGCACATAACCCAGTACCTGAAATATAGTGCTTAAAAATGCCATCTCAAT TTTACGGAGTTTCATAATATGTTAATAATATCAATTGTCATAACTAAAGCTCTAAGCTCT TGAAAGGAGCATTATAGCCCAGACATAAAATGTTTCAGATGAACACGTTGCCATCCTTGT GAAATTCTCCCGAGAAGGGGAAACTATCCATATGCTTTGTGATCAATTGGCTGCAAATAT TGCTGTGTGCTTTGTCATAACAGGCTGTTCTGCTGTAAAGACATAAATACTGGCTCATGT CCAGTTTGTACAAAAGATTAACTTTATCAAAGTCTCTGAAGATAAAGGCTCAGGCCGATT CATGTGACTGTGGTCACAATAGCATAACCAATGCGAAAAAGCTTACAAAAGAACAAGGAC TGCCTTATTCACAGTGAAAGACACGGGTGCATAGTTACCGTAAGCTTCAGCAACGACAGC AAAAAATTGGCGGAGTTACTTGATGTGGTCACCAAAATCAATTCCATTTTTCGTGGAACT GGTACGGCGAATGCTGATTAGATAAGGAAACAAAGGCTGCCAGGTCTTAGAGGAAAACAT TTTTCCATCGGTTGATGATGAAGCACAGCTAGAGTGCAAAATATTTTTCTCTCCAAATAG ATGATATGGAGTGAAGCACAGTCTCTTGAGTCTTGCTGTGATTCAGAAATGAATTTGGAA TTTGCCTTTCCCCCAAAGATTTTCCTAAAGGGGGATTTTGGCCACTGGGTATCAAGACCA CTGGGGAGGTGATGAAACCAGGTTTGGGAGAAGTTGTGAAGGTAGTGGAATTCACTGTAG CCTTCTGTTTAGAAAAGGGTATTCTGGCTAACTTCCAGACTCACGCTCTTGGTCTGCAGG AAAGGCCACTCAGCCACCAAAAGGAGAATTGTATACAGCTATGGAGAATAGAGTGTTGGA AAAAAATAACAAATCTTGACTTTTTGTGGGAGAGAGAAGGAAGAAAGAAGTAATTGGTGG TGTCCTGCTTGTGGATAAATAATATTTAAGACTCACTTTCTACATTTCTTTTCAATGATT CCTAATGTGTATTCGTAAAAATTAAAACTGAATATTTAGACCCAAAGTTTCCTAAAGGAA GAGAAAAAGCTCCACTTCAACTACTTATACATTAAAATATGTAAGGCAAGATTTTCATTT CTTCTTAAATTCTCCCCATTAACAATTGACAATAACATCCTTTTTTATGTTTTATTTTCT TGCACATGTAATATTATGTATGCACAATATTTTAATATTGCTGTATGGTACATTATCATA TTGCTCTATGGTAGAGGTAATTTATTATAACTGCTGGTTATGACCTTTTTGTTTTACCTT ATGAAGAGAATTTTAAAACGCATTTATCGTAATTGTCTATAGAAGATAGTTATTTGTAAA CTCTTTGGAAGAGGCCAAATTAACATAATGCCAAAAGATTTTCCTCTTTTTAGCTTTTAC ATTGCTTCCCATTATTAAGCAACCCTAAACATGCAAAAACACATTGAGTTTTAATTTGGG AACTTTAGTCTGGTACACATATACCAATGCAGAGAGTGTGGCTCACTAATCTGATGAAAG GAGACAGAGTGCTGAAAAACCTACAATCATCAATATTTGGTCCCTGGTCCTCTGTATATA CTACTACGATTTTCCCTATCTTATCTTGTACTTTACTTTTGCAAATTAAATCACTCGACA AAGATTGATGTAGGACCCAAGTTAAGCCATAAATACGTCAAGTCCTGGTAATAGCAGGAT GGGGACCATAAAGCTTATGACATTGTAAATTCTGAATTCTGTTTAATATTATTTAGATTT AGAACTCAAATAGCTCTGCGGAAACAATTTTTATCCTAATACAAACTTTTCACTTGAGCA TTTATATGAAAATAATTTTTTCAAAGAAGTAGAGAAAGCAAGCTTATTCCTTTGTTTGAG TCATAGTAAGTTGAGAGCATCTGAAAAATCAGCCGTCAATGTTGGCTTCCAAGTGCTAGT CAATGAGTAAGTGATATATATTAATTATCTCAGTTTACTCACGCAGCAAAGGACTTAGTA TGGATATTATTTTATAGATGGGGAAAGTGCTACCTAAAAATATTAAATAACTTACTTGAA GTTACACAAAAAAATTGAATGCTGGGTCCAGGATACTAAGTCTCTTTTTATCATACTACA AGTAATATTAATCAGATGGCAGAATTTTTTCTGTTCAGCATCTTAGTGACATAGATAACT GTCTTGCCACTTCCAGAGTTAATTTCTCCATAATTTCATTCCCAGATAACTTATTACTTT AGTGAGCCTTAAAGTAATTTACTTTTTATTATGAATATTTACATGCTGGTCTTAATACTC TTGGAAATGTAAAGTTTATGTCAAGATTCATGTCTTTGTCATAAATGCATAATCTCAGTG CATAACATGGTATTTGACACATAATAGGTACTTAATAGTGAATGAACAAATACCTTCCAG GAGGTTAGCATTTGTAAAACATCCTAAGAATTTACTATAATAACACCATGTTCTTTATAT TAAAGAAGACTAATTAGATTAGGTAAGCAAATATTGTGGCAACGACTCACCATATTGTAA GTAGAATCTTAAAAAGTCATCATTTGCTCTTCCTTCCTCTTTCCAACACATTACAACTTT AAACTTGATCACCTACTGTCTCATTTTATTTACTTTCACTGATATTTTACAATCTTATTT ATTTCCCAGCTGCTATCTACCCAAACTTTGCCCTACAATCACTGCCACCTCTGCAGAGAT AGCCTTCCTTTCATCTTTTGCAGCCTATTTTTTTTCAGTTCTTCAAAACTCACTTTTAGA TTTCTAGCCCCATTTGACTTATCAATGGGGTTTCTCTTAAAAAAAAGTCCATCTTTATTT TTGTTTGGATTTCCAGTGTAAATATGCCCAATTCTTCTATGTCTCTGTTTCTAAACAAGA CTCTAAAGTTTTTGCAAAAGAGGTGCCATATCTTATATATACCCTGAAAAAAATGACCCA TACTCAAAACCCTTAGTAGAAGACTTTTGGTAAGCCTGTAGCAAATATTAATAGACGTAC AAGATTAGAAAATACTGCAGTGGTTGGTTAATTGCCATTGTTAGACAAATTAGCATGAGT TGCTTAGGGTTTAAGGGTTCTACCTTATTTTTGCTAATGTTCTGAGTGAACCAGTTATTC TAACTGTGTATTATTAACATATTACACGATTGACAGATGTTCACTTACACAGAATTGACA ACAGATTTTTCATGTCAACATTTATTCATATAACCATTTTGTCCAACCATATGCATGAAC ATTTGATCCATGGAAGTTATTAGTTCATTTACATTATTTTCAGGAGGGAAGAAAGCTGAA AAAAAAGTGTGCTTTTATGAATGTGCTCCAGATGTTCAGCAACAAAAGTTGAGAACTTGG AAATCAAACAGTACTTTATGCATTATTGGGTATATTAAGATCTGCTTTCAGGGACTCTTA AGTGCCTGCTCTTCTGTTTTTCTGTCTTCTCAGTGCGCTGTATTTTTTTTCCCTAAATGG AAATACTTTGTTGATACTTTTTGCAAGATATAACTGTCATTAATTATTATCCTAAAATAT GTAATGAACGCGATGCTTTCACAAAGAATTAAACAGATCATAAAGTTCTAAAATCTGTTA TTCACTCACATGAGCCAATAGAACATGAGTGGATAATTTAAAATAAGTGGTTTTATGTAT ATATGTACCTTTCTATCAAAATACTCAGAAGCAAGCTACCACACTATCAGAGTTTTTTAC TGTATATAAAAATAAGTAAAATGACTCCACTATAATCAGAATTTTTGGCTCATTTGGTTA ATAAAGCTTGACAAATTCTTTAACTAGGGAAAGCTGGGCATACTGGGAAGATCATGGGTC ATGATTGAAAGGAAGGAGCTGTCCCCTGCCACGTTATATATTTAGAGGGGAGTTGGGGAA GGACAGAGGACACCAGACGAGGTAATAATTTTCTTCTCTGATGAAAGAAGCCCTGTTTAA GAAAGGAAGATAATCTATAAACAAGCAGTTATTAGTAACAGTCTTCCCCTGGGAGCTCTG TCCTGCTGATACAGCTCATTGATAGATAGGTCTTGTAAGAAAGGAGTTGTGGGTAAGGGG GAGAAGATGGTAGAGGCATCCAGCCCTTTCTCACCTTATCTAGTAAGGGATGCCAAGAAG ATGCAGAACGAGCAGAATTTGGAAGAATGAGGTGGAAGGGCAAAGCTCTTTTTGATATTT AGTAAGCATAAAGTTTGATCATTTAGTTAAGATTTTCAGCCAAAAATTGCTTATTGTTTA CCTCCACATATTCGTCACTCCACTAGGAGACACCAATTACCTTCTCCCACATTAGGCGGG GGGGAGTCGAGCAGCCACACATGCGTTAGTTCCCATTCTGAAGAAGAATCTTACAAAAAA AATAGCATTCACGTAGTTGCTTTATTTATTAAGGTCTTCCTTGGTAAACATACCAAGGAA TGACATGTCTGTCACGTAGCTGTTAACCTTGCTTGGCCTTCTTCTTAAATTCCTGTGGAT ATTCTCATATCATTATTGCCCTGACATTAGAAAAGTAACGAATGACTTTTACTATAACAC AAGTAATAGGTGTTCATTCTAAAATAAAGCTTTTGGTTGGTCACAGTGGCTCATGCCTGT AATTCCAGCACTTTGAGAGGTGGAGGCGAGCAGATCACTTGAGGTCAGGAGTTTGGGACC AGCCTGACCAACATGGTGAAACCCCATCTCTACTAAAAATACAAAAAAGTTAGCCAGGCA TGGTAGCATGTGCTGTAATCCCAGCTACTTGAGAGGGTGAGGCACAAGAATCGCTTGAAC CTGGGAGGCGGAGGTTGCAGCGAGCCGAAATGGTGCACTGAACTCCAGCCTGGGAAACAG AGCAAGACTCCGTCTCAAAATTAAATAAATAAATAAAATAAAATAAAATAAAATAATAAA GCTTCTAATTTAGATAAGGTCACCTGCGGTTTTAAGGAAAACATGCCAGATGAGGACAGC TGTGGAGGTCCCTTTTGTTCACAATACTGCACAGCCATCCAGAAGGTCACAAGGTACACA GACAGGGCAGACATGCACACAAGTTTTCAGTGAGTTAGATGACTGGTAACTTATTCAATT TAGATCACGGTGTGCTGTTTTGGAGAAGTCAATTTTAAACTGGCTTTCAGGTATATGTGA CACTGACAGATAATAGGTTCAATATCCGTGCTTCAAACCTATTCACAAGTGATTGTCCTA ACCCACACTACCTCAGAATATGACTGTATTTGGAGATAGGGTCTTTTAACGGGTAATTAA GTTAAATGAGGTCTTTAGGTTGGGCCCTAATCCATTAAGACTGGTGTTCTTATATCCTTA TAACAAGAGGAAATTAGGACATAGATATGCACAGAGGAAAGAGGATATGAAGACACAGGG AGAAGACAGCAACCTATAAGCCAAATAGAATGAAATTAATCCTGACAACACTTTGATCTT GGACTTTTAGCTCCCAGAATTGTGATAAAACAAATGTCTGTTGTTTAAGCTCCCTCAGTC TGTGCTATTTTGTCATGGCAGCCCTCACAAACTAAGAAGGCACTATCGCTCTAAGTTTTG TTGTATGTGAGGCCATAGATGCTCTCTATTAAGATGGCACAGATGCCTTTTTGGGTCAGG CCAGTTCCCCTGAGGTGATGAATTAATGCCTGTGAATCATCTGAGGCACAAAAGCCAAGA AAGAAGGAGCTGGGCCTTGCATAATGACTTTGAGCAGTTGCTGGTCTCAGGGAGTTATGC CACCTCTAATCTAGGATTGCAGCCAGATTTCTGCCTGGAGGCAGATGTAGTCTGTTGAAT CTCTGCATGGTTATGGTTCAGTCCTTGTTAATAGGTTTGTTGTCTTTGCCTCACTATTGA TGACAGGGAAACAATTAAAAGGAGGGTATCACAACCTAGTAATAGATTCATAGGGATTTG ATTACTCATGACCCCCCTCAATGGCAAAGTGTAAAATAGGCTTACTAGAAAATCCATCCC ATTGATTCAAACCCAAGTCCCAGTCCCACCAGGGAGCTACGGATCATGGCTGAGATTATA ACTTTTGACATAGCAAATGTGTTAGCAAACACAGTTTATCTCTGAAAGTGGGAGAAGCAG ATATGACAACCCATTGTAGAAATAATTCATTGAATAACCTGGGCCAGTACCAGGGAACAC CACTAACCTTGCTAAGGATGACTTAAAGCAGCATAAAGCAGTATTAAGAAAACTAACAAT GTTAAGCAGATTTCATATAATAAAGGATTCTTTCTCTGTCAGAGGGGGAAGATTCAGGAG AGGTGAGGGGAATCCAGAAAGCAAGACTTTTTTTGTTTGTTTGTTTGTTTTGTTTTTTTT TTGTTTTGTTTTTAAACAGAGTCTCATTCACTCACATCATCGCCAGGCTGGAGTGCAGTG GCACAATCTCAGCTCACTGCAACCTCTGCTTCCTGGGTTCAAGCGATTCTCATGCCTCAG CCTCCTGAGTAGCTGGGATTACAGGCATGCGCCACCACACCTGGCTAATTTTTGTATTTT TAGTAGAAACAAGGTTTCACCATGTTGGACAGGCTGGTCTCGAACTCCTGACCTCAAGTG ATCTGCCTGTTTCAGCCTCCCAAAGTGTTAAGATTACAGGTGTAAGCCACCGCACCTGGC CAGAAAGCAAGGTTTATGGATTTTCTAATCTGCTGGTGTCATAGGCTTCCTAGTTTGCTT CCAAGATATCTGGAAAGTAAACAAATAGCATATAAAGAAAATGGAAAGACATGAGAAGAG GCCAGAGACTTGATTCAGTTGTAAGCCACTGGTAATTGCACTAGTTAAGCTAGGAAAACA TAACCACAAATTTTATGCTTGCCTAGTCCTAGGACTCTATCCTGGTTGGGAGAACACTAG CCATTCCCAGCACAGACAGTTAGTGAAAATCCTACACATCGTAGGCATAAGTTGATATAA GCCTTTTGTGTCATTAAGATAAGTCGTTACTGCTAATTAGAGGCAGAGGTAACATCAGAA GCACCACTACAAAGCCTAACAGAAAAGTATACCCAATAAGGACTTTAAGATAAGTTACCT GAGCCTGATTTGGATTGATTCTCCCTTGTGGAAGCTCTGGGGAATTACACAGACCAGCAA GGCAGGTGGTCCTTCCTTCACCACCCTCAGGCCCTGTAAGGTGCACTATGGCCTTGCACC TTGTGTGGGTGAAATAATCATCCAGTCCTCATGAGCCAAACAAGTATGGCTAGCATTCCT TCATAAAATTAGAGGTGCATACTCAGGCTATAGCTCAGGTCAAAAGCAGGCTAGAGAATC TCGGATAAAGTGAAAATTAAGGCTTAAAGTTGGCCCTACAGGAGTTCGTTCAGTGTGGAC CCATTGAGAGCAAAGCAGTCAAGGCTACACCAAATTAATTATCTTCCTCTCATAGCTTGT TGGGCGGTAGTCTTCATTAGGTTAATATAATTTTTAAGGGATAATTTCTTAATTTCAGAG ATAAAGCTAAAAGTCAGTTATTTTCCTCCAGCATAATTGATCCTTGTGCAGAAAAAGTCC CCCAGAAATTCTTTTTAAATCAAAGCATCTTTGCATTACTATTTCCCTGTATTCTAGATT AATTGAAAAGGAAGATGATTCTCTTAGCTCAAGAGAGTACAAAGTTTATATTTCTCAAAA TCCCAGGCAGTATGGTATATCTTAATTCGTGCCCTGATATGAAATTAATTGTTCTATAAT CATCCAGTCAGGGGAGGAAATATAATTCTTTCCATGGATTATAGCTGGTATAATGGCCAA AAACGTAGACCGGAGTATATACTATATTAGGCACAACAAATGACAAAGTTACATAGATAT GGGCCTCATCACGTGGGGTAGGTCTTAGATAATTCTCCAAAGTCTCAGTTTATATCAACA AACCTCAAAGATAGAATGATGTCAGGAAAAGCAGCAAAGTAAGGACCTCTGAAAATGAGC TCCTCCACAACAGGAATGAAGAAAAAAAGGGGAAAATTGTCAAAATCAACATTTTCAGAA CTCTGGCATGCAATCAACCACAAGTTTGCAGCAACTCAGGCAGCATTTATATTCAAGAAA AGCAGCTGAATCTCAGTATGAACTTTTGTGGCATTTTAACTTGCTCTAGTCCCAGCTCCT GCTCTCCAGGTCTGTAATAGCATTGAAAAATAACAGCTCACAATCACAACACATCCTGAA AGCTACCAGAAGGAGGATACAGTAATGGAGTCCTTTCAAACTCTAATTCCCAAAGAATCA TCGTTATTTGACCTACCGGTAGTTCCCCGGAAGACTTCATTTAACAAGATTATCTATATT TGGCCTGATGTGAAACTCAATCAGAGCAAAAATTCTCTATCTGAGAGGTGTTTGTCAAAA GCAATTACAGGCAAGCGTTTTAACCTCATGTTGGCTAATATAAGGAGGAATAATAGTTGG TATAAACAGCATACTAACCAAACAGATAAAAAGGGTAAACTGGGGAATGAGTTGTCTGCA GGGACTTTGAAAAGTCATGACATATCCTGGAAATCTAGAACACCACACACACATAGAACA CACTATGCACTTACCTGAGAAAGACCTGAGAAAGCTGAAAGCTATCACTTCTGGCTTACT TTGAAGCTCTACATGAGCATAGAGTGAAGACAAAAGCAGAATTTTTTGCTTTGCTGACTA TTAAAAACCTGCCTGGATATGCACATAAAGTCCCTCAGCAAAGACTGGGAGATTTTGCAG CTTCTCGCATTTAATAAAATATCTGTCTAATCATTCAGTAAGCTAACACTATTCTAACAG AGTACAGACTTCAATGATCACACACGAGAAAGAATACTGACAGCTATTTTAAATATACTT TAAAGAGCTATGTTGTTTGTGACCTTTATTTCTGTGAGTCATATGCCTTGTATGCCTAGT TTGTTGAGAGTTTTTATCATGAAGAAATACTGAATTTCATCATATGCTGTTTCTGTGTCT ATTGAGATGATTACATGTTTTTTTTTGTCCTTGATTCTGTTTATCTGATGTATCACATTT ATTGATTTGCATGTTAAACCATCCTTGCATTCTTGGTATAAAACCCACTAAATAGTATTA TCTTTTCGATGTGTTGTTGGATTTGGCTCGCTAATATTTTATTGAGGATTTTCCTGTCTT ATGTTCATAAAAAATATTGATCTGTAGTTTTCTTTATTTGTTCTGTATGTGTCTGGTTTA GGTATCAGGATGATATTGCCCTAGTAGAATAACTTAGGAACAATTACCACCTTCACAAAT TTTAGAGCAGTTTCAGGAGAAATAATATTAGTTCTTCCTTGTATGTTTAGTAGAATTCAG CAGTGAATTTACCTGGTTTTGAACTTTTCTTTTTAGGAGACTTTATTACTGATATAATCT TGCATATAATTACACATAATTCATAGTTCCTGATGATTCATTGTGTGTCTGTGGTAACAG TTGTAATGTCTCCTGTTGCATTTCCGGTTTTCATTTGAGTCTCCTCTCTTCTTTTCTTAG TCTAGGTAGTGATTTATCAATTTTGTTTACCTTTTCAAAGAATAAGTTTTTCATTTTGTT GATCTCTTCTGTATATTTTTAGTCTCTAATATAGTTCTGCTCCCATCTTTGTTATTTCTT TTCTTCTGCTGGTTTTGGGTTTGGTTTTTTCTTGCTTTTTTAATACCTTGAGGTGCATCA TTAGATTGTTAATTTTTAATCTTTCTACCTCTTTGGAAGAGACATTTAATGCTAAAAACT TCACGCTTATCAATGCTTTTGCTATATCCCAAAAGTTTTGATATGTTTTGTTTTCATCTT CATTTGTTTCAAAAACTTTTTTTATTTCTGTCTTAATTTATTCACTGACCCAGTAGTGCA GGAGCATGTTGTTTAATTTTCATGTATTTATGTACTATCCAAAATTCCTCTTTTTATTGA TTTGAAGTTTGAGTCCATTGTGGTCTGAGAAAATACTTGATATGATTTCAAATTTAAAAA TTTGTTAAGATTTGTTTTGTGGTGTAACATTTAGTCTATCTTGGAGAATGTTCCATGTGC TGATGAAAAGAATGTATATTGTGTACTTGTTGGACTGAATGGTCTGTAAATGTCTGCTAG GTCAATTTTATCTTAAGTCTGTAGAAGAAAATAAAATATTGTGACACCAAGCTCACTATG TCAAAGGGAAAGTTAAGCCTGGGAACTGAGTCACACAATACTTCTTTTCTTTTTTGCCCA AACAGATAGCTGTAATTTCACAATCCTGTTTCATGGCATTATACATAAACCAGATTCTCA CAATAGCAAAAGGCCATATATCTCCCCAGATGGTCCCCCTCACAAATTCCTCACAAAAAA TTATTTATTAGCCCCTAAATCCTTCAGGACATGATACATATCTCCCCATAAAACCAGCCC TAAAATTGAGTTCTGTTAAATCTCACACTGTCAATGTTGATTTCAAGTTTATTTCCCCAG GTAGGGAATGGGAACAAGAACAAGAAATTATTTCTCCACCTACCCTGAGGTGGAGGCATA TTATACTTTGTCCTCCACTCCGTCTTTTCAAATGTTTACTTTATCTTATGTAAAATGTAG GTTTACTGAGCATTAATCAGAGCCTCACAAGAAGGTAATCATTTGCTTCACTGCTTATTC TCTCTCAGTTTTTCCCTTCTGCTTTATGTTTTCCCCTTTAAATACTGAGTTCTTCAAACC CTCTTTGAGATGCACCGGTCATAGATGCTCCTGTGAACTTGTGTTTTTCCTGGGCACTTC CTCAAACTTTGGCTTGCTAAATCTACTGATCAAGACACCTGCCTCAGTCACTTTTTGGTT AGCAAGTCCAATTTAAAACAAATGTTGCTTTGTTGATTTTCTGTTTGGATGACTTGTCTA ATACTGTACATGGGTTGATGAAGTCCCCCACCATTATTGTATTATTGTCTATCTCTCTCT TTAGGTCTACTAATATTGATTTTCTGAATCTAGGTGCTCCAGTGTTGGGTGCACAGATAT TTAGAATTGTTATATCCTCTGGCTGAACTGATCCTTTTATCATTATATAATTACCTTCTT TGTTTTTATTTTATTATCCTTGACTTAAATTAAGCTTTAATATAAGTATAGCTACTCCTG CTCACTTTGGTTTCTATTTGCATGGAATAATTTTTCTACCCCTTAACTTTTGGTCTGTAT GTGCTTTTAAGGAGAAGGTGAGCAACATATAGTTGTAAACACATATAGTCAGTTTTTTTT TAATCCATACAGCCCATCTATATCTTTTAAATGGTGCATTTATTCAACTTACATTCAGGA TTTATTCTGATATATGAGGCTTTCTTCCTGTCATATCATTAATTGTTTTCTAGTTGTCTT ATAAGTTTGTTCTTTCTTTCTTTCTCTCTCTCTCTCTCTCTCTGTTTGTAATTGTGGTTT AGTAGAATTCTGTAGTGGTATCTTTGATTCCTTTCCCTTCTTCTTTTGTGTGGTTGCTTT ACCATGAGTTTTATACATTTTTGGGTTTACATGTTGCTAAATTTTGTCCTTTCACTTTCA ATTTAGGACTCCCTTGAGCATATCTTGTAGGACTGGTCTAGTGGTGATTTCCCCTAGCCT TTGTTTGTCCGAGAAAGACCTTACCTCTGTTTCTTTTACGAGAGTTAGTTTTGCTAGATA TAGAATTCTTGGGTGGTTATTATTTATTTTTTATTTCAGCAGTTTGGATATGTTGCCGCA TTCTCTTATGGCCTGTAAGGTTTCCACTGAGAACTTCAATGTTAGCCTGATAGATTTATT TTATAAGTAACTGGATGCTTTTCTCTGGCTGATTACAGAATGTGTTCTTCCACTTTGACT TTAGACAGTCTGATTATAATGTGACATGATGAAGTCCTTTTTGCATTGCCTATTCCTGGG GATCATGAGTGTGATGGTTAATACTGAGTGTCAACTTGGTTGGATTGAAGGATGCAAAGT ATTGATCCTGGATGTGTCTGTGAGGGTGTTGCCAAAGGAGATTAACATTTGAGTCAGTGG GCTGGGAAAGGCAGACACACCCTTCATCTGGTGGGCACAATCTAATCAGCTGCCAGTGTG GCCAGAATATAAAATAGGCAGAAAAATGTGAAAAGACTAGACTGGCTTAGCGTCCCAGCC TACATCTTTCTCCCATGCTGGATGCTTCTTGCCTTCAAACACTGGACTCCAAGTTTTTCA GCTTTGGGACTCAAATTGGCTTCTTTGCTCTGCAGCTAGCAGACAGCCTATTGTGGGACT TTGTGATCATGTGAGTTAATATTCCTTAATAAACTCCCCTATATATATATGTATATATAT ACACACACACACATATGTATACACACATACACACACACACACACACACACACACACACAT ACATATATACATACAGGGGATTTTATTATGGAGTATTAACTCACATGATCACAAATTTAA TAAGTTATTAAATAAATATATATATATTTATTTTATATATATATCCTATTACTTCTGTTC CTCTGGAGAACCCTGACTGGTATGATAAGCTTCCTGTATCTGAATGTCTAAATCTGTTAC TAGACTTGGGAAGTTTTCATCTATTATTTAACTACATAGGTTTTATAAAGTTTTTGATCT CTCTTCACTCTCTATAATACTGAAAATTAATAAATTCAGTCATTTTCTGTGGTCCCAAAT GTCTCGAGGCTGTGTTCATTCATTTTTATTCTTTTTTTTCAACTGTGTCTGACTGTATCA TTTTAAAAGACTTGTCTTCCAGTTCTGAAATTCTTTCTTCTGCTTGGTCTAGTCTATTGT TGAAGCTTTCAAAAGTATTTTGTGTTTCCTTCAATGAATTTTTTAGTTCCAGAATTTCTG GTGCTTTGTTTTATTTTTAGATTTATCTCCTCAGTAAACGTATCCATCATATCTTGATTT TTTGAGTTCTCTGTGTTGGTTTTCAGATTTCTTTTGCATCTCATTGAGCTTCATTATAAT CAACACTTTGAATTCTTTATCTGGGATTTTGAAGATTTCTTTATGGTTAAGCTTTGTTGT TGGAGAAGTGTTGTGTTCTTTTTGGGGTGTCATATTACCTTGCTTGTCATGTTTTCTATG TCTTTACATTGATTGATTTGTGTAATCTGGTGTAATTGTCACCTCTTATTTTTGAATTTA CTTTTGTTCAGGGTAGGGATTTTTCCTGAAGATGTGACTATAATTTTGGCAGGTTTTTTT GTCTTTGCTTCTGGGTGCATATGTTAGCAAAATTTCTCTATAATTTCTCTGGCTATAAAC AGTATTAGTGATGTCAGTGATCTCCTCAGTTTGTTAGGGTTGGTTTGGTGGAGGCTATGG TAAAGTGGGGCTGATGTCTGGGCCCATCTTCAGGTTTCAGTCATAGAAGTGGTGGCCTCG CATGACTGTCCTTGTGCCTTGTGGTGGTATATGCAAGCAATGGTGTTAGATGTGCTAGGC AGGCTGATTCCTGGACCTTTGGATGACTTTCTTGGGTGCCAAGCTTAGTAGCAATGCACT GGGAAAATAAGTGAGCTCTTGAGCTCCTGGGCAGCTGGCATAGCATGGGTGAAGGCTATT GCAGTGGTGATGAAATGCTGGCAACGAGCTCTGTGGGCCAGCCTCCAGGCCAGTAGTGGT GTTTGGATGTGGGAGCCCATTGAGGTGTTGGCAATAGGTTGTTTATGCTCAATTTTAGTC CCCCAGGAGGAGTACTCAGTTGTCCCAGGTGGTGGATTGTGTTGTGGAACCCCTAGTGCC CTGGATCCCATACTCTGTCTCAGTGGGGGATGAAGCTGGGTGGAACTGGACCAGGAAAGC TCATGCTCAGGCCCCCAAAGGCAAGTGCCTGCATCAGCCATGACAGGTGGGGATGGCTCA ATTGTTCAGGCCCTGGTAGACTGCTTGGCTGAGGGGTTAGCACCACTGTACTGAGATCCT TCCATGGTGAGAGTGGAGAAGGTTTCAGCAGCCACAACCTCTGCTGGTAGGCAGGGGACA GTGTCTTTATCACACCCCAGACCTGGTGGGGCTCACTCTACTATCCCAGCTATCACAGAC AACCTGGAGGTTCCATGAGACCTGCAAGTTTGCACCAAGTTTGCAACTCTGTCCTGAGCT ATAGGAGCTACTACCCAGCTCAAGACTAAGTCTTCCTTGCAAATCTCATCCTGCTCAAGT CCTGGGGGCAATGCCTGGTTCCACTGCCAGTGGCCACAGCTCACACCATGCTTGCTTCTC AATACTTGTTGCAGAATCCCTCTGCCATGGTTTCACAAGCAGTAGCCTCAGTTTCCCTGT GCCTAGGACTGGCACTGCTTGTTCCCAAGACCATGCACAATTTGTTAGGAGTGAGGACTA AGTACAGTGTCTTACTATGACCACTTACATTCAAGAAGGGTGTGAAACACAAGGTATGTT CTTCCTGGAGCAGGGTTTGGGAGGGTCATGATGCTCTCTTGAGTCCTGGATTGTCCCAGG GGATAAGTGAACCACAGACAAACACTTATTCACTCTCTCCTGCATTGAGAGTCATTCCTA CTTTCCGGCTGGTCCCAGTCACACAGGCTGCTTATTGTTTGCCTCCTTCCTAATTTTGAG AGTTTTCTGTCACTTTGCTGTTGAACTCTCATGTTCCTTCTTGGACAATATATTAAAAGT GTGATTGTCTACACATTATTTTGCTTCTTCTAAGTGGATGAGGTGTGCTTGAAATACTCC TAGTTGGCCATTTTGAAAAAAAAAAAAAAGAAATGTCATTTCATACTCACTAAGATGCCT ATAATCAACAATGGAAAATATCAAGTATTGCAAGAATTTGGAGAAATTAGCATCTTCAGA CAATTGTAGTAGGAATGCAAAATGATACAGCCACTTCTGAAATCAGTTTAGCAGCTCCTC AAAAAGCTGGAAATCATTACTAGATAACCCAGTAATTCCATACTTAAATATTTATCCAAC AGAAATGAACACATTTTCACACCAAAACTTGTACACAGATGTTCATAGAAGTACTATTTA TAATAGTCAAGTGTGGAAGTAACCCAAAAGTTCATCAGCTGATGAATGGATAGACAGTAT CTGCTATAGCTGTATAAAGGACTACGATTCAGCCATAAAAAGAATCAGGTGTGAATATAT GATGAAGGTGAACCTTAAAAGCATATTGTTAAGTGAAAGAAGCCAGAACTAAAGGCCAGA TAGATACTGTATGTTAACATTTACGCTAAATGTCCTGAATAAGAAAATCCGTAGAGACAG AAAGTAGGGTGTTGGTTCCCAGGAACCCGGTGAAAGGAAATGAGGAATGGCCCATTCAAT ATGAAATGGGGATAATGGATATAGGGTTTTCTTTGGAGGGTGATGAAAATATTCTGAAAT CAGATAGCAGTGATATTTGCACAAACTTTTGAAAATACTATAAAACTCTGAATGTCACAC TTTAAAAGGATAAATTTTATGACATGTTGATTATATCACAGCTGTTAACACATTGCACAG GAGGTTTGAAAGGGCCAAAATAAAGATTACAGGAGAAGTATAATCAAACAAGCATTTTTA TTTCTACTATCTATTGAAACTCTCAAAAACGATAAAAAAGTTTTAGTTAAAAACTCAGTA GGTTGATATCATGGTATGTGAATTATATCTCAAGGAAACAGTTTTCAAAGGTATAAACAT GTCAAAATTAAGAGAACAGAAGAAATAATATTGGATGAGTTTTGTCAACAAATTTTTGAA GGTTGGAAATCTGGAAAATGACTGGCAACTAAGTCAACAGAACAAAGAAATTTGAAGTCT AAAGGTTTGCAGAAGGGAATGCTAAGATAAATATGCTGATTCATGCCACAGATCATAGGA AATGATTTGTTAAAATGAAAACATTCCAGTTATCTAAAAGGCATTGATGAACTGTGACAC TGAATGTAGGATAATTTGTTAGCTGTCAGTATAAAGGACCAGTTAGAGTTTTAAGTAGCT GTCCATACCCTAGTAGAGACCAGCATTTATTCTCTGGAGAAATTGAACTGAGAAGCTCTA GACATAAGTCAGTGAAGAGAGTGAGTGAGAATGAGGCACTATGCCAAAAACAGGGAGATA AAGAAACATTCTACATAATGAAAGGTGACAACCTCCTGCCTATCCCTAATTTTCTGCTCA GCTACCAGATTGCTAGAAGGCTTGCTAACCATCCTCAGGCAAACAATTAAAGGATTTCTC CTTGGAAAACCTTCTAGAATAAGAAAGAATGCCTCCTGGTACTTACATTTAGGTATCCCT TGTGATGATTAATTTTATGTATTAACCTGGCTGGGCCTCCATGCCCAGATATTTTGTTAA ACATTATTCTGGATGTTTCTGTGAGGGTGTTTTACATGGACTAACATTTAAATCTGTGGA CTTTGAGTAGAGCAGATTGCTTTCCATGTTATCGGTAGGGGCCTCATCCAATTAGTTGAA GGCCCCTCAAAGGACAAAAGACTGACCTCCCCCAAATAAGAAAGAATTCTACCAGCAAGA TGATCTTCAGATTTGAACTGCAGCAGAGGCTCTTTCCTTGGTCTGCAGCCTACCAGTCCA TCTTGCAGATTTTAGACTTGCCAGCCTCCATAATCACATAAGCCAACTCCTTAAAAATAA ATCTCTTTCTTTCTCGCTCTGTTCCCCTCTCTCCTCTCTTTTTCTCTTTTCTTCCCCCTT CTCTTTCTCTCTCTTTCTTTCTCTCTCTCTCTCCATTGGTTATCTATCTCTGGAGAACCA CACTTAATATACCCTCAAAAAAAAGTCCAGGTCATTATCCTAACTCTTCTGATAAAATTC ATCAGCCGACAAGTCCCATACATGAACATAACATTTCAATCATCTTTATAATGATTTAGG CTAAGAAAATAAATATGTGAGGAAAATCTAAGAGATCAAATCAAATAGATCACAGAAGAT TTCAGAAGAGAAAATGATAATGCAAAAAATTTTAGAAATTAGAATATTCTCATAGCAATG AGAGAAGATGCTTTACTAATTATAAAAGAAGAAAAGCAATAAAAAAGAGAGAACAATAAA AATTTTCTTAAAATAAAAACTATTATAATAACTAAAACATTTAAAACTATTGTTGAGAAA ATGTTCCAAAAAATAAGTCAAAAGGAATAATGGGAATAAGATCGAATAAAATGACAGAAT AAACAGATTTTCAGGCATGCTAGTTCTTGAAATATTAACCTCATGGGTACCACACTAATT ATCATGAAGGCATTGAAAACTGTATTCCATTAAAACAACATATCAGGAAGATAACATAGA ATCCAATAAAGAGAGGATCCAACACAGGAATCAAGCAAGGAGACATCCCAGGATGTGAAT GGCAGGCAAAGACAGAGAAGAGATGTGTCCTTGAGCTAGAAAACAATCAGTCCAGGTAAG ACCAGAAGAACATAGTCTCCCCACAAGGGGAATAAAAGCCAAACTTTTAAAATGGAATCA ATAGATTACTTCATTAGAAGAGTATTAGAGTCCCATTGGAGAATTTGGGAGAATATGAGA TACATTCACAGAAAATTTAGCACATATTTAGCATATAATTAGAAGTGTAGAAGAACACAG ATATAAAACTAAGAAAATATGAGTAGAAGAATATGGATATAAAACCCATAAAATATTAAT TTAAATATTAACCTTTAAAAATATAAAACTAATCAAGTAAAATATTAAATCAATTAAAAA ACAAACCAACAATCCAATGAAACCCAGTAGGTAAATGATATGAAGAGATGATCTATAGAA ATATAAACCCAAGGGGCTAATGTGCATGAGAAAAACCTCACTGGAAACTAGAGAAATTAT AATTCGAGAAATCGAAAGTAAAGTAAAAGTCAGCCGTCATTTCAGCACCATAGGAAATGG GTAAAGATATAAAAGTCTTGCAATACCAAGTATTGTAAATGATGTAGGCCAAGGGGATAG TTTTATGTTGGGTCCAAGAGTATAAATTTGTCCAGCTGCTTTGGAGAACAATTAGGCATA TGTAGTAAGGCTGAAACTTCTTTAATCCAGGATTGAAGTACTGAAGAAACTGTTGGGAGT TTGTCTTGCAGACATCCGTTGACATTTACTAGTCATAGCAATATGAGGCATTGTTTCTAG ATACGTGTGAATTTGTTGAAAGTATAGAAACAGGCTTGGCATGATAAACATCAAATTCAG AATTAAAGTTAATTGAGAAGCGAAAGAAGGAAATGGAATTTTGCTGAGGATAGGGTACAT TAACTGAATCTATGAGTGCTCTGAAGCTAAAGTAGCAATCTAAGTAAGTTTTTTGTTTTT TTTTTAAATGGGTCGCTATATGATTGTGTATGATATTAGGTTAGTGCAAAAGTAATTGTG GTTTTTGTCATTACTTTTCTGCATGCTAGAAGTATTTCTAAATTAAGAAAAAAATGGGTA GGTAGGTCATGAAAAAATTGATATTTGTATCAAACCAGTATGAAGTGTGCAGAGACAGAA AGAATGTGATGAGCCAGTAGACTGAAGAGGGCAAACAAACCCATGAGATACTCTGTAGAT GGATGACAATGCAGATGACATTTCAGACCAACAGGAAGAACACAGTGTAGGAAACAACAG GAAATGGCTCCCAGGTCACAAGTGTTGGAGTGAACCTTAGGAGGATGCTAACTAGTTTTC TCCCAGCGACGCCTGTAATGAATATCAGTGAATCAGAGACCAGAGCTCATCCTCTGGCTC TGCCATTCACTGGGGAGTTTAGTAAGAAAATCAGTGTATCACCCCACCATAGTTTTCTTC TCTGTAAAAGACAGGTCAGCGCTAAGAAACTTCAATGCTATTACATTTGCATGAGGAGAT TTGTGGCTTCCACCTTTAGAATGCACAAGATGACTCTTGGTTTCTAATTGCATTCTTTTA TTCCTAAAATTATAATGGCAAATTATCTGACCCCTCACAAGCTATTACACTGTTTTTCCT TTCCCGTATCTCCCCATCAGCACTTTCTAGCCTTGTTCTCTTGAAATGTTATGGTCTCTA TTGGTTTTCAACACTTCCTTTAATTCTTAGTTTTCTCAGGCTAAACCAAATTCAGTTTTT TCTACCCTTTTCTTAAATGTTTGTTCCAGGGCATTTCATTCATTAACAGGAGAACAATTT CCAGAAATGTTTTGGAAACAAGTGTATGAAATATGATCAAAGTGCAATGCTATTAATAAT CACACCTGAGCTTGACATGTTCTCCCATTCATATTAAAAAGAGAATCTATATGTATTTAT GCTGTATTTGTATAAGGTAATTCCCATTTCAAAGGCAAAATAAAAACTAGGAAAGTAAAT ATCTTGATAACTTATTTGATTTAAAAAAAGAAACTTATTAAATCACTACATAACTTCAAC AACAGCAGAAGAAATATCTTTTACAACTAAAGCCTAGATCACACTCAGACCATTTGAACT GGGAAAGCTGACTTAGGTAATGTGACCTAGAATCTTGACAAACAGATATTTGTCCTAAAC AAAGATTTATTTTAATAATTGCTTCACATTTAATATTTGCTAAGTTAACTGTAGTATTCC AGTACTGCTCCTGTATATGAGTATTTATATATGAAATTAATATGAAATTTATGATATATA TTAATTAAAATATTAATTATATATGAAATTAATATGAAATTTGATATATGTTAATTTCAT ATATAAATACTCATATATAGGAGCAGTACTGGAGTAGTATATATATGAAATCTATATACT ATATATAAGTATATAGTATATAGACTATATACTACATACATAGTATATATATGAAATCTA TATATTATTCATACCTATTCATATATTTCATATAATAATATATATAGAATATTAATTTAA TTGTGTTGAATCTGGATATGCATATACGTCAAATTTTCTTAGAGTTTAATGTGGTATTGT CACATCTTCAGAGTGTTGTATACCTTGGAATTCAAGAGTAAAGAAGCAATGAGGAAAGGT AAACTAATAGGCACCTTCTTTGAAAGGATGAATGATGCCTTTGAATAGAGGCAAAACTCC AATGAAATAAAAATAAGCAAAAGTATAAAATGCCATATAAATACGTAAAAGGAAAATAAA TCTGGGACCCCAAAATCAGTAAACCAAGAGGAAAGTCAAGCAGGGAGCTATGTCAGGTAA ACCTGCCTCCCATTTTATCCCTAAATAAGATAGCTACAAAGATAAAAAAAAGCTACAGAC CTCCTTCACAATTTGCCCTCAAGGAAATTCCTTGAGGGCCTGAAGATCTTTACCCTAAGC CAGTTCTGTTGAATTTCGCCCGCAATGTAAACTGATAGCTTATCTTTACAGGTGCAGGAC AGAAAGTTATTTCTCTGCTCACCTGAGACAAATGCATATCTAATTGCTTCCTCTACCCTA TTGTTTATGTAGAAATGCAGATTCACTGAGCTAGACTAAATTGAGTATTCAGTGAAAGGC TGATCAGGACTCAAAAGAATCCAACCTTTTGTCCCTCCTTTCTGGACCTAACCAATGTAC ACATTACATATATTCCTTTATGTCTCATGTTTCCCTAAAATGTGTAAAAGCAAGCTGTAC CCCGATCACATTGGAGACATGTCATCAGAACCTCCTGAGGCTGTGTCATTGGGAAGATAA ACTTTCTAAATTGATTGAGACTGATCTTAGATATTTGGGGTTCACAATTATAAGAATTTG TTTTTATGCTGCTTTGGTGATGGGGGTAAAATTAATGAGTTTAATATAAAATTATAATCC TTCAGATTGTATAATTCCTCTGTGATCAATTTCATCTTCCTTCCAAACAAAGCACCTTGA TGTAAAAACTGTGAATTGTTAGGTAAAGGAAGACAGAAGCACAAGTGTAATTTGGATGTA AAATAAACAAAGCAGTGAATTTGCCAAGCAAAGAAACGCAGAAATGCCCTACAGTAGAAT TTCAGACTAACCCAGCTTCAAGGGATAATGACCCTTGAGCAACCCTTAACAGGAAGTCAC AAAGTCAGATTGTGAAATCCAGAGAGCTCAGAGGAATTCTAGAATTGGCAGCCAATTGGA TGGCCTCGTACCTGCCCTGGTTATATTCTAAGAGCTCTGATTCTTTAGATGAAAGAAAGA ACCAGAAATCTCTGGACTGTGACAATCCTTCAAGTAAAGTGAGTAACAATGGGGGTTTGT TTCAGAACAGAGCCCACCCTGAGCCGAGGGCTACAAAGGGAAAGTTGGAAAAGAATATAC AGAATATCAGAGTGTCAGCCATGTTATTCACAGGGATACTATTTAAGACAGTAGCCATTA GCTATAGGTGGCTATTTAAATTTAAATGCCTTAAAAATAAATAAAATTAAAGATGCAGTC CCTTGGTTGCACTTACCACATTTAAGTGCCCTGTGGCTGACACAGTAGACAGTACAGACA CGGGGTATTTCAATTGTCTGGGCAGTCTTGCCACTCAAAGTGTGGCCTACGAATCAGCAG CATTGGCTTCACATAGACATTTTAAGAAATGCAGAAACTTAGGCCCCATTGCATCTTAAT GTAAACTGTGTGCACCTTAAAGTGTAAGGAGTACTGGCCTAAGGCTCATTCCAGAACTCC AGTCATTGAAAGATAAACCAAATGCAAATCAGAAAGCTGAGACAAAAAGCTGACTCAATA GATTGTACAAGAACTGTCTATGAGCCCACTCCCCTGGGTTCATCCAAATGACTTTAGATT CCTGGCTTATGGTTGTATAACTATTTTCAAACACTTTTTGTAGAGCTAAGATAATGACTA TTCTGCTTTGCTCCAGGTTGTCTAGGTAACATTTATGTGTAGCATATATACAAACAAACA AATAACATTTATCAAGCACTTACTATTTGTCTGACACTAAATTGTGCAGTTAATAGGCAT TTTTAAAATGATTTCACGTAAGTGATTTTCAAACAAGTTCCTTTAGAATCAGTTTTTACT GATGATATAATTGATCCTCAACAAGGACAAAAATCATGCCCAAGAACACATGGTTAATAA ATGGTAGAACTACTTTTGTACAAAAGTAGCTCTATGTTTTTATTTTATTTTTTCAATCCA CAGAGTTAGAAGATGTGTTATTATTTTTGTTCAGGGCCTAGACTTCCTAGCCATAATTAT TACTGTAGTAGAAATTAAACAAAAGATTTAAGATTCATTACTAAGAGAATCTGAATGAGA AAGATTTTGTGCCTGGACTCAGCACTGGTGAAAAACTTCCTCAAAATTTTAGTCTTCCAA AGAGGCTCTAATTGGCGTTAGCAGAGATTCTGCCCTTGAAGTGACTCTCAGTTTTCATCT CTGTGAATTTAGAAATCTGAATTTCGATTACTTTCTTACTTAACGAAGGTTTACCTGTCT TCCTTGCTGCAAAAGCAGCAAATAAAGCTGGTGTTTTGTAGGTGATTTTTTTCATTTTTA AGCAAACAATAAAAGCAACTGTTCTCTTGGTGGAAATTTTTTTTTAAAAAAAATACAAGC TATAGAGAAAAAAGGAAATGTAATGAAGATTAGCCATGAAATTCTCATTAAGCATAGAAT AATTCCATTTATATTTCTGTTACAGGAAAGGGGTCCTGATCCAGACCCCAAGAGAAGGTT CTTGGATCTTGCTCAAGAAAGAATTCAGGACAAGTCAGCAGTGCAAAGTGAAAGCAAGTT TATTAAGAAAGTAAAGGAGTAAGAGAATGGCCACTCCATAGAGAGAGCAGCCCTGAGGGC TGCTGGTTGCCCATTTTTTTTGGTTATTTTTGATGATATGCTAAAATAAGGGGTGGATTA TTCATGCCTCTGCCTCCCTGTTTTAGACCATATAGGGTAACTTCCCAACATTGCCATGGC ATTTGTGCTCTGTGATGGTGCTGGTGGGAGTATAGTAGTGAGGACAATCAAAGGTCACTC TTGTCGCCATTTTGGTTTTGGTGGGTTTTGGCAGGCTCCTTACTGAAACCTGTTTTATCA GCAAAGTCTTTATGATCTGTATTTTGTGCTGACCTCCTATCTCATCCTGTGACTTAGAAT GCCTTAACCATCTAGGAATGCAGCCCGGTAGGTCTCAGCCTCATTTTACCCAGATCCTAT TTAAGATGGAGTTGCTCTGATTCGCACACCTCTGACAGCTCTTCGCCCTCAACTATTTAT ATATTTTTTCAGTTTAATCTATCTTAAACTTTTGAATGTTTATTTCATACATTCTAAGTT GGTTTATATTTTATAATGTATTCTAAATATCTACTTAATACTTTAAATGTAAATGCATGA TTTTTAACAAAATATTTTAATAGATGTTAGTGCACAATATTTTTATATTTTATGATATAA ACAACTTCAGAAATTATCATCTGTCCATTTGTTCATGGATTTGAACAAGTGACTCAGATA ATTAAGTATTTTTAGCCTAAGGAGCAGAAGTTTTAATGACTTTCATGTGGATAAATTTTT TGCAGCAGCAGGATGTAGATCTAGGGTGAGTGAATGATTAAACAACACTGGTGACAAATT CTAAAGCAATAATTTCTATTTATTTATTTTCTTTTTTTTGAGACAGAGTATTGCTCTGTT GCCCAGGCTGGAATGCAGTTGTGCGATCTCAGTTCACTGCAACCTCTGCCTCCTGGGTTC AAGCGATTCTCCTGCCTCAGCCTCCTGAGTAGCTGGGACTACAGGCGAATGCCACCACAC CCAGCTAATTTTTTTGTATTTTTAGTAGAGATGGGGTTTCACCATGTTAACCAGGGTGAT CTTGATCTCCTGACTTTGTGATCTGCCCGCCTGGGCCTCCCATAGTGCTGGGATTACAGG GCTGAGCCACCGCGCCCAGCCTAAAGCAATAATTTCTAATAATATACTCTTTAAAAAAGT TAATCTCAAAACAATAAGTTAAAAACAAATGAGAAATTCAGATGCTGGATTGTAGGTGAG CTGGTCACCTCCTGGGAGAACTCATTCATTCCTTATTCAGAGCAAAATGTTCTAGGTTGA TCAAGGGAGAACTGACATTCTGAAAGCTATGCCAAGGGCAGGGGTTTTAGGGGTGAAGAT CAAAGCAGCGCTGAGTGTTCTTCCTTTTAGCAGTTTGTGTTTCTTTCCTCTCCAGCTGCA GCTATGATAAGGTAGACTAAAGATTACTTCTCCTTGTGGGTGCTCTTAAACTTAGAAGGT AAACCAATAGGCACAGTTTAGCCTGTTGTAAGGTACAAGTTCAAAATACCAAAACCTATT TTCTTTCTAGGCGATAACAATAAAAAAACAAAAGTGGAAATTTTGAAAAGTAATATTGAA AGAACTCAGGGTTAAATCTGCCAAAAGGGATGCAATGCCTATATAGTGGAAACCACATGA CATTGCTAAGATGAATTAAAGACCTACATAAAGGACAGGTGTATTCATGGCCAAAGGATT TAATAATTTTAACATGACGAATGTTCCATAGATTCTACATAACTCAATCAAAATCTTAGT AGGCATTTTTTGGAAAATTTAAGAAGCTCATTCTAAAATTCATGTGGACTTACAATAATC CTATATTACCAAGACAATGTGGCATTTGTATTGAAAGAGATTAATAAAGTAAGTCCAGAA ATGAACCCCACATATATATCAATAATTTTTTGGACAAGGGTCAAAGGCAACTCAGTGGAG GAAAAACAATGTTTTCAGGTAATGTTGCTGGAAATCTTGGATCCATACATACACACACAC ACACAATTTAATAACTTCAATTTATACCGAGCAACATACACAAAAAAAACTCAAAATAGA TCACAAAGCTAAGTATAAAACCTAAAATTACAAAACTTCTAAAAGAAAACAAGTAAAAAT CTACATAATCTTGGGTTATGCAAAGAATTCTTAGATATAACACCAAAACTACAAACTATA AAAGTACAAATTGATAAACTGGATGAAATCAAAATTAAACAAATTTGCTCTTTGAATGAT ACTGCTAAGGAAATAAAAAGCAAAGTCACAGATAGTGAGAACATTTCTGTAATTCATATA TCTGATAAGGAACTTTTGTATCCAGAACATATAAAGAAGTCCTAAAATTCAGAAGGAAGA AAACAACTCAAATTTTTAAATGGTCAAAATATTTGAACAGATACATTATCCAAGAAGTAT AATCATGGCAACTAAGCACATGAAAAGATGCTTATCATTATTTGTCAGTAGAAAAATACA AATAAAAATCACAGTGAGATAATACCGAGACAGCCAAGTAAAAATAGGTCCCTGGAGAAC CTCTGACCGGCCTGGGCACTGGGAGGAATGGGCACTAGGTGGAGCCTCGGGAAGTTCGCG CAGATTGCACAGGGGCGGAACCTGGCCTGTCTTCTTCCGGGATGGAACGAGGAATTCAAT CTACAAGGCCGGAAGCATATATACTAGCAGAACTTTTGCTCTTCTGAGAGTCCCTCTTTT CCTTCTTTTTTCCTTTTTACCCAATAAATTCCATTTTTCTCACCCTTCAAATGGTCTGCG AGCCTGATTTTTCGTGGTTGTGTGACAAGGACGCCTTCTTTAGCTGAATGAAGGAAAAGT CCTACAACACTATGTCACATCTATTTGAATAGCTAAAATTAAAAGGACTGGTCCTATCAG TATTCATTAGGATGTAGAGAAGCTAGAAATCTCATACAGTGCTCATGGGAATATGAAAAG GTGCAACCAATTTGGAAAATAGTTTGAAAGTTTCTTAAAAAGTTATATATGTAGCTATCA TAAAACACAATCATTCCTGGACATTTATCCAAGAAAAATGAAAGCACGTGTCCATTTAAA GGTGTTTACATGAGTGCTCAAGCAGCTTTTTTGGTAATAATCCAAGCTGGAAACAGCCCA AATGTCTGTCAACAAGTGAATGGATAACAAATTGTGGTATATAGACAAGATGGAATACTA TTAAGGAATAAAAAGGATAAATTCTTATTGATACATGCAACACCATGGATAAATTTTAAA ATGGTGAGTTGAATGAAAGACACACAAAAAAATCATAAGATTCAATGTATTTAACAATCT AGGAAATGCAAACTACACTGTAGTTGCAGAAAGTCCATCAGTGATTGTGAGAAGTTGGGG TGGTGAGAAAGGTGAGATAGAAGGATTATCAACGGACATGAGAAAACTTTCGGGGGTGAT TATTGTGTTATTATGTTATACTGAGTGTTCTGATGGTAATACTGGTGCATTTACATGTCA AAATTCACATTGTACATTTTAATATGTTCAGCCTATTATATAACAATTATACTTTAATAA AGTTATTTAAGCAAAAGATCACTTTGAATGATTGGGTAGCTGTAGAGAATAGGCTACTTA GAATCAATGAATTTAAAGATGAAATTCCATATAGGTCAATTAGTCCAAATCTTTATATGA CACTTGAATTTTCTCTACAATATCAATAATCACCAGGCTGAACACCACAGAATTGAGAGA CTTACTGTCTTCCAAGGCAACTCCTAACAACTTTGAGAGCTGTTAGATTTTGTTTTTTAA TACTTGATTGTAAGGAGTCAAAATAATGGCCTCTGTGGTAGTCACACATGGATCCTTAAC TAACTCTTTAGCATTTCAGGGCTTTCTTAAAAATATGCAACATATTTTAAGTTTAACCCT TCAAATATTTGGGGGAAAAAAATCAAGGTTCCATGAATTTTTCTTTTATAGGATAAAAAG CTCTAGGTACTCTATTCAGTAAATATTTATTGACCACCTACTATGTTCCAAACTCTATTT ATGGTACTGAGAACAGAGTGGAGACAGGAGAAGATGTCATCTCTGACCTCATAAAAGGGA AGAGAAATGTTATGCAATTCATAACAAAATTTGATGCCATTTAGCATAGTATAGGGGCAT GGCACAAACTACAAGATCATGTTACAATGTTTATAATCTAATTTAGTCATCAAGGAAGGC CATCTACACAATGTTAAGCTTCAGTTGAAACTTACAAATAAGTAAAAAGTTATTCATACA AAGATGGGTTTGAAGTGTGTTCCAGCCAGACTGGATACCATGTGTGTCTTATAAAGGAGC CAAAAATGGCCTGATGTGTTTCTTCTTCCCTACAGGATGGGACCCATTTGTTCACAATCT CACCAGCACCAAACTTAAATTTTACACATCCAGGTGTTTAAGCATAACCCAATTAAGCAG ATTTTTAAAGCCATTTGGAGTCTATATGCTTTGCAAGTTTCATGAAACTATACCCAACAT CTCCTAGCTATAGATAAGATAAACCCTGTAGCCATTAAAAAAAGAAAAGAAACGAAAAAA AAAAAAAACCATGCAAGCTACTGCTGCCCTTCTCAGCTCTCTGATCCAGGGACTCATTCT CTGTGCTGAGAAACATTACCGTTCTGAGTTGTGGCGTTCCTTCTCACTTTCCTCACTATG TCCTCTAGATGGTTTCATGCTGTTAGGGACTGTCTAGGCAAAGAGACAGCTTCTCCTTCA CCTTCTGAAGGCTCATGGAAAATCATTGACAAAGGCAGATTTATTGGAGAGAAGGCACAT AAATTTATTTGTTCACAGTTTTATGTGGTATGGGAGCCTAGAGAATGAAGACTCTACTAT GTAGAGGAAAGTGTTCATTTTTATGCTTCAGTTCAACAAAATATGGACTGCCGTGTAGAA ATAGGACTGGACAAAGAAGGAATGGTCTAATGCTAGCAGAGTGAGTGGGGAAGCCCAGCA AGGCCTGTCAGCTTCGGTTCTTCTTGGCCTCTCTGAGCAGCATTCCTGCATTATATGTAT GGGGCAGGACCCCCTCTGGAATGGGGGTCTTACAACCCACAGTCAAACCAGGTGGGTCAA ATAATTTCTTTATGGCCAGATTTTAGAAAGGAAGGTGAGAGGAAAGTTAGAGTAATATTT TTAGGTTTTATGTCTGGCTTGGGGGAATAGAGGTTCTGGTTTCTATGACCTGCTTTGGGG AAGAGAGATGCCAGTTTTTGTGTCTCGCCTTGGGAAAAAATAGCGAGCTACAGACAGGAG GGCAGGAGAAGGTCAGAGAGACTGCTTCTGAGGCCTTCATTTTGGAGTACTGTTTCTGAT ACCCTACAGGACTTCCCCTATATGCACACCTGTCAAAGCAGCAACCTAAATAAAGCTCAT TGTGCACTATTGCTACCTAAGCATCCTTTTATTTTCCATGATCAGCCCCAAAATTCGTTT AACTCACCACAGACCAAAAGTGCAAATGTGAAAGAAAAAGAAGTGCTGAGCAACTTAAAT GAATTTTTAAAATAATATATTATATGAAATAGGTTTTAGTTCTTAAAATATCCTATACTC TCATTTGGACACATTGATTTTAAAGAAAGAGTTCCTTGACTGAAAGTAGTATACACTTCC AATTAAACAGGATTGACACTTTCTATTCTTTAGATACTATTATTTACTCCTTGGTGCAAA TTTGATTACCCATGTGATTGTTAACTTCTCATGCTAAAAAGTCATTGGATTTGCTGTTAT CTAAGATTCCTGTCTCTTAACACATGCTCCTATTGTCATATTTCTACTGTTCTATATTTG TGTGATTTTTGCTAAACAAAAGTGTGAAGACTGTTTTTTTCTCTCTCTCCACATATATAT ATATACTCAAAAAACTTGTAAGCATTTATCACTAATTAAATATTTACATTAATATCTTCA TATATTTATTTATTAATTGTATTGTCCATTTACCACATTATTCTGGTATCCTGGCCAGGT TAATTCCAACCTTAACCCTTTATGATTTAATAATTGTGATTTATTATTTTTCTCTACATG TCTAAAATTTAATAATCAGTATATACTGACATTATTATATATTTACTAACATTATTCAAA AAAGGAAAAATTAAAATGTTTTCTTTTATATTAGTTCCTTAAGATAAAGTTCTTATGAAC ATACAACGCAGGTGTTCAACAAATGTCAAAAGTAAATTTCATAACCTACTTCTTTAAGCA ACACACTTAGTGGCCCAGAACAATATATTATGAATGTTATACCTCACTGCATTGCTTCCA AAATGTATGTCAGTTACAGATATAGGCCTTCTCATATTGCATGTTCTTCCCATTTATAAG TAAATAACAGTGCCCATGCAATGTATCTGTCCTAGTAAAATGTGGAAGTTCAAATATATT TTTTCTAAATAATCACCTGAAATTACTAATTGTTGATTATATTCTCTAAAGAGTTGATTA ATTAATTTATTAAATCATCATGAGGTTCATTAAGCCAGAGCCGTGACAGAGAATTAAATA AAGAAGTAGCTATGTGCAAACATTTTTTTAAACATTGCAACTATTTTCTCAGTTGCGTTT CATCCATATCCTCTGTCTGTCAGGCTGGTTTAAATCTGGGTAAGTTGGTGGCACTTTAAT ATGCAAAGAAGTTCTGTGTTTTCACAGCAGATCACCCACTAGAACTAGAGTTAAACTTTA TTTAAATTTCTCATTAGATAATTTGAAAGTGACAAAGAAAGAGGGGCTGTGGAGTGACAG GTATGAGAAAATAAAAGACATTTACAATAAGGTACAACAATAACGCTATTTCTTTTTGAG TGTTTACTATACACCAAGCATAAACAAGCTTCATGTTAATTCTCATAGTAACTTAGTGAA GACACTACTATTATCATCATTTTAGATGAGGTCAATGTCAGATCACAAGCACCTGATAGT ATTGTACTCAAACCCAAGTTTCTCAACACCAAAGTTCATATGCTCAAAATAGACCTCATA CTACTCTCATGTAATAAGTCAAGTGGTTAATGATGTCATTACCAAATAAGGAGCCTTCTA GATGGGCAAAGAAATTGAACAAAATCTGCAAATGTAACATGAAATACTGCAAAAAATATT ATAAGCTACACACTGAAGGTATTAATACAAGTTAGAGTTTTATATTTTTAGACAAAGTTA ATTGGATTTCCACTTCCCATTAGGATGCAGGAGTACATAAAAGAACTTCTGTTCCATGGT GGTAGCAAGACAAAAATACAGTAAAATTTATTATCTTTATAAAGCTATGAAGAGCAGTGG ACATAGAGGTGTCTTGAGCACAATTCCAAAGAGAGATAATCCCTTCCTGGGTGATCAAAG TGCCACTGCCACACTGGGGTCAAGGACTTAGTGTGGCAATAAGTGGGTAATAGACTGGTC CTTCTATAGGCAGAGAGCCTTACAGAGACATTGTGAAACCAGCCAATGTTATAATGACAC ATTGGAAGACAGAAAATTACCAAATAGTCAATATTTCAGCCTGACAATCCTCCCACTGCC CTTTTGAGATGATTGCTGAGTAAAGGCAACTGAACTGAGTGAAAAGCAGAAAGTCATGAA GCGAAACTACCTACATTTGCAATTCAAACCCCTCCCAGCTTGAGTCCTGAAAAGAGCAAA GAAATTGGCTGCAGAGAAAAGAGCGACTGCCTAAATCCAATATGAAACCACAGGTGAACA CAATCAATTCATGGTTCCAGGCACACAAACACAAGTAAAACTCTTCATGGAATCTGAAAA CTCATTCCTTAAGAGTACTTGCCCCCACAGAGAGGAATGGGCTTGAACTCTCTTACGAAA AATCACACAAAACAAGAACAATAAAATACATTATAGTTCAATCTGTACTCTTTTTAATGT AAATAAATGCTCAACATTTAATTAATTTTTAAAAATGATATACAAGACATCAGGGAATGT TACCTTGATTAAATGGAAAAAATAGTTGACAGAAACAGAGCAACAGATAACCCAGATTTG GGAATTAGCAGGAAGAAGTTTAAAAGGACTATAATAAGTATATTAAATAATTATGAAGTA AAGCAATGAAACAAAAGAAATAAATTAGGAGAAGAGATGGTGAAATACAGAATAGAAAAC AAACTACATAAATGAAATAAAAAATCTAAAAAGTAAAAATACAACATATAAAATGTAAAA TGTATTCAAAATTAGAAACTTAAAGCAGTCTAAAACATTCTTCCCCTCCTGTCCTTTGTG AACATTTTGAGCACAGTTTGGACACAGCAGAAAGAGTTGATGACTCTTAAACAGATGGAT AGAAATTATCCAAATTGAAGTACAGTGACATATATATACACATATAGATGTATATATTTA TATATAATATATATTTATGTATTTATATATAAACATATCTAAAATATATATTTATATATA TAAAATATATACATATAGATGTATAAAATATATACATATAGATGTATAAAATATATACAT CTATGTTTATATATGTATATGAAAAGACAATGAATGCTAGTAGACAATGAGACTTTCAGT GTGTGAAAAGGGAAAAAAGTCCCTGCAATTCTTTCTTCAATATTCAGCAAAATTATCTTT CAAAAATAAAGAAATCTTTAGATACTTCAAAGCTGAGAGAATTTATTGGTTCCCAAACCA CCCAAAAAATATGCTGAAGGAAGCACTTTTAATGAATGAAGAAATCCCAAAGTATCTTTA AAGAAAAAACAACTAGAAATGTCAGGAGCACAACGCCAATCTACAAAATTTAACTGTATT TCTACAGAATAGCAACACATAGTTGGAAAATGAAATTTTAAAAGTGTACTATAGTATCAA ATACATAAAACACTCAGAATAAATTTATTGAAAGATACGCAAGAACTTGGCAATTAAATA TAAAAATCAATGTAAGAGAGGTTAAAGTTGATGTAAGTAAATGAAGAGATATGCCATGTT CATGAATTGGAATCAATATTATTAAAATGTTAATTCTCAAATTAAAGTATTGATTCAATG CTATCTAGATGAAAAGCACTGCTTCTTTGTAGAAACTGCAAGTTCCTTCTATAATATATA TGGAATTGAAAAGGATCTGGCATAGCCAAAACAATCCAGAAAAACAAATTTCAGTATTTG GTTTCAAGGCAATATATTGTATTATAAGAGACACTTATTTCCTAATTGCAAGGCTTACAA TAAAATTACATTAATTTTGACAACATGATTTTGACAAGAAGTTAGGTAAATACATCAATG GAACAAAATAGGGAGTCCTATGAATTAATGCAATTCAGAAAAAAAGTCTGAAATAAATGG TGTTAGTACAATGAAACAATGGACCTTTTACACTGTTCAAAAATTAACTGCAAATGGACT ATAGACCTGAACATAAAAATTAAGCTATAAAGCTACCAAAAGCATAAATAAGGAAATATT TTCTCATCTTAGGGTAGACACATATTTTGTAGACATGGCAATAAAAAGTACTAAATATAA AAGAAAGAAACAGTAAATTGAAATCATGCTCATCAAAAGACACCAATTAAGAAGGGAAAC AAAAAGATACAACTGGGAAGAAAATGATTACACTTCATTTATCTAACAAAAGACATATTC AATTACATAAAGAATTCCTACAGTTCTGCCTGGGCAACATAGTGAGATTCTGTTTCTACC AAAAAAAATTCTTTTTTAAATTATCCAGGCATGATGGTGTGAGTGTGTAGTTCCAGCTAC TTGGGAGGCTGAGGTGGGTAGATTGCTTGACCCAAGCAGTCCAAGACTGCAGTGATATAT GATCATGCCAGGAAGCTCCAGCATGGGTGACAGAGCAAGACCTTGTCTTTAAAAGACAAA ACACACACATACAATTTAATAATATAGGACAAATTATCTAATAAAAATTGGCAGAAGACA TGAACAGACAATTTCCAAAAGAAGATAGATGGATGGCTAATAAGCACGGATACTCCTTGA CTTATGATGGGGCTTCCTTCCAATAAACCCATCATAAGTTGAAAATATTGTAAGTCAAAA ATGCATTTAATACATCTAACCTGCTGAACAGCATTGCTTAGCCTGGCCTTCCTTAAATGT GCTCAGAACGCTTATTTTAGCCTAAAGTTAGACAAAATCATCTGTCAACACAGTTCATGA GGTTGCTTAGCCTCATGAACTGTGGCTCACTGCCTCTGCTCAGCATCCCAAGAGTTTCCT ACCACATGTCACTAGCCCAGAAAAATATCAAACTTCAGAATTCAAAGTACGGTTTCCACT GAAAGTATATCACTTTTGCGGTTTCTACTGAAAGTGTATCATTTTTGCTCCATTATAAAG TCAAAGAATCATAAGCTACACCATCCTAAGTAAGGGATCGTCTGTAAATGAAAAGGTGCT GAATATCATCAGGAAAACTTAAATCCACAATGGCATCCCACTGCACATCCACTGGAATGA AAACAAGTAAAAAGCCAGGCAAGGCGCGATGGCTCACACCTGTAATCCCAGCATTTTGGG AGGCCGAGGCGGGCAGATCATCTGAGGTCGGGAGTTCAAGACCAGCCTGACCAACATGGA GAAACCCCGTCTCTACTAAAAATACAAAATTAGCTGGGCATGGTGGTGCATGCCTGTAAT CCCAGCTACTTGGTAGGCTGAAACAGGAGAATCACTTGAACCCAGGAGGCAGAGGTTGCG GTGAACTGAAATCGCACAATTGCACTCCAGCCTAGGAAACAAGAGTGAAACTCCATCTCA AAAAAAAAAAAAAAAAAAAAAAAAGCCAGACAAACTTTTTTATTAAAAAAGTTTAATAAA GATAGGAGTCAATGAGAATCCTCACATATGTCTAGAGGGAGTGCAAAATAGTATCAACAC TTCAGAAAACTGATAGGCAATTTTATATAAACTTAAATATATACTGGATCTTACCAGTTC CTCTTCTAGGTATAAACATGAAAGATAAGAAAGCATGTGATCACTCAAAAAGACAAATAC AAAAATGTTAATAGCAGAAAATATCCATCACCAAAAGAATGGAGAGTCAATATAGTTTTA TACATTGCTGAGTAGAATATTCTACTCAGAAATGCAAAAGAATAAAGAATTTATGTTTAC AAAGCATGGATAAATCTTAAAAACATTATGTTGGAAAAAATAATGCAAAACAAAAGCATA TACTGTATCATTCTGCTTATATGGAAGTCAATGAAAAGCAGAATTAAACTATCATGCTAG AAATCAAAGTAGCGTTTACTCCAGGGGGAGTTTGAGCATTGACTGGAATGAGGCACAAAT ATTATTTCTGGGGTGATAGAACTATTCTGTTTTTTGATTAAGGTTTTAGTTACATGGGTA TATACATTTGTTAACATTCAACAAACTGTACTGTTAAGATTTACGTACTACACTTTAAAT AAATTACACCTCAATTTAAAAATGTCTAAAGGGTACTTGAATGAGGGAAAAATGAAAGAC ATGCAGATCCCAAAAAGCAAGAGTGTCTCCTTAGAAAATATCCAGGATTAGTCAAATCTT GTTTTTTATTGTGTCTATTCCAGCCTTCTTCTTTAAAATGAATTTGGAAAATATAAACAG TAGGTTAACAGATTATGGGAAGCTTTTTTATTTTTAAGGAAGAATACAAAGGTATTCTTA TATTTTGCCTTACTGTAAAACTCCCCAAACTCTACATTTGTGATAACTAAGCTTTCCTTT TAGGTTCAGGATCCATTACACTTCCTGAGTAGTGGAAATTTTGGTTCTTCAAGGATCTCA GTGTCAACATTTTTCAATATCTGACCCTGGTTTACACTGATGTTTATATTTTGCTTATTT GTCTATGGAGCAGTATGATTCATCCCTTATCTTGTACCCTCAGTTGCTAAAAGATTACCC AATTTATAAGTGACTCAACTGATATTCCCTGCCTGGTCCTCAAATTTCATCAGGACTGAA ATTCTTTCTCCACAGATCACTCAAAAACTGCTTATTAGAAGTTTACTATGTGCCAGACAC TATATGGTAAGCACTGAATGTATTGCAGAGATGAAGGAACAAACACTTTCTAATTCTTCT GGGAATTAGAATTGTGCCTTTGAATACAGTGAGTGAATATCTGTTTGAGTACTTTATTAT GCATTAGACACATGAAAAAATGCAGTATGTCCTAATGGAAAGAAAATTGTAAAATCAAAA TTAACATTTATTTAAATATCTCTTTAATGAAATATTGTTGCCTATAGCTGTCAACTTAAC ATTCACAAAAACCTAATTAAATCTGTCAGGATTTTGTCATTTAAACTTTTACATAACAAA AATTCCCAGGCTTATGGTATAATTACAGATAGCATATAGCCAATTGTATATTAAAGATAT TCATTCAAACATATTTTTGAAATCATAGAGATACTCTTTTAAAACTTGGATAGAAAATAG TTTAATACAGAATCCAGATGTCTTTTAATATGTCTGATATCATATATTCATTGGGGTAGG TGAGGCTGAACAACAAGTGTACTCAGAAATATAATGGATCAGCAAACTGAAAGTTTTTAA TGTTCACCTATTTAATACCTATGGGAGTTCCAGGTAGGTGGACACTGGGGCTGGTGGAGC AGCTGAGTCTATGTTCTGCTTTATTTCCTAGAGTCGAGCAGGAAAACTAACGTAAGTCAT GCTTGTGGGTATTCCTTGTGGCATATATTGCTTTGGCCCACCTTATTTCATCTACAGCTC AGTTATACAGTCTCTCATAGGTTAAGACGTGGAGACTAGCAATAAAAAGGAGTGTGGCAA ACAGCTAATCCATCTCTTGGTCTGGGAGTGCCCTAGAGAAAATGAAAGTTATAAGATCAC TGCTTGTTACCACTGCTTTTTATTTTACTTTATTTTTATTTTATTTTATTTTACTTTTTG AGACAGGGTCTCACTCTGTCACCCCAGGCTGGAGTGCAGTGGTTTGATCTTGGTTCACTG CAGCCTCCATCTCCCGGGTTCAAGTGATTCTCCTGCCTCAGCCACCCAAGTAGCTGGGAT TACAGGCGTGTGCCACTATGCCAAGCTAATTTTTTTATTTTGAGTAGAGACAGGGTTTCA CCATGTTACCCAGGCTGGTCTCGAACTCCTGAGCTCAAACAAACCACCTGCCTCGGCCTT TCAAAGTGCTGGGATTACAGGTGTGAGCCACCATGCCCGGCCACCACTGCTTTTTAAATC ATAAATTCGCTTATTATCTGCTACCTGAAACAGACAGAATTTTTCACAAACCTGTCAAAA TTGGTTCCAATAAAATTTTACTTTAACTGAATGGCTACGATGAAAACTTCTTTTATAACA TAGATTTTTTTCAGACCCTTTTTAAAACGAAAAGTACCTGATCGTTTTGTTCTCTTTGTT GAAAAAGAATGAAAAAAGTAAATTTATTCTAAATCTTTTCTTTATACTATAAGTGATAAT AATTTGAGTATCCCCACAACACTTTATGAACCAGATTAATCCACTAAAATCACATGTGTA TAAAATATATAAGACGGCATTTTATACATATTTTTCCTCCTTAGACTCTAGCACAGGGTC CTATGACCATATCAGGAATTCCCAGGTGTTAGTTAAGTTAGAATTGCTTTGACCGAAAAA GAGCAAGCTGTGTGGTATCTTCAAGAATTTTGTGTAATAGAATTGCTTAGAAATCTTGTT GGTCATTCAGTGCCCATTTTCCAGGAAGATCAGATGTTACTTTTACTACCTGATCCCTTT ATTGCTTGTTGTTTATCATATACTAGGCACGGTACTTGGTAATTTGAGGATTAAAGAGGT TTTCAAGACACTATTCCTTGTCCTCAAGGAGTTCACTGAGGAAACAAGGAAGAATGCTGT GATTACGACAGTGAATTAATATTAGGACAAGCCAAGGATTTCTCCTTGTACTAGTGATAA GAACTTTTCTATTTTGTTTTATTTATTTATTTATTTAGAGACAGAGTCTCGCTCTGTCGC CAAGGCTGGAGTGCAGTGGCATGATCTCAGCTCACTGCAAGCTCTGCCTCCCCGGGTTCA CGTCATTCTCCTGCCTCAGCCTCCTGAGTAGCTGGGACTACAGGCGCCTGCCACCATGCC TGGGTAATTTTTTTTTTTTTTTTTTTTTTTGTATTTTTAGTAGACACGGGGTTTCACCGT GTTAGCCAGGATGGTCTTGATTTCCTGACCTTGTGATCAGCCTGCCTCGGCCTCCCAAAG TGCTGGGATTACAGGCGTGAGCCACCGCGCCCGGCCCATAAGAACAGTTTTTAAAGAAGA CTACAAACCACTTCTCTTTGGAATTTTACTCATTTCCTTCTCTGGAAGCCGTGTGATAAA GCCAGGTGACTTGTGAATATCTTCTTTAGCATCTTGACTTTAAGTATAGCAGTATGCTGT CTGAATTATTTTAAAAAAATATATTCCTACAACTCTGCTAGGTTTTAATATTATAATGGT TAGACTTACAATCGCCTTCACCTCAATTAGTCCTTTAACTTTAAACATATTAGGCCAAGC ATATCTCATAAAGTTATCACAAGAGACTAAAGTAAAGGAGCAGTAGTTCATAGGAATGCA TTTAAAATTATTTCATATTTCTTAAAGTGCTGATAGTTTTCAGTAAAGGAGAAATAAAAT CCACTCAAAAAAGTGGCCTTTCTTCATCCTTAGTAATATTCCATTAGCAATAAGATACTT GTGTGTGCGCATATGTGTATGTCTGTGTTTGTATGTGTACAACATCTCGACAGCTTAGTC ATTTTATGAATCTCCTTAGAAGCCTACTGTTTGCTCTGTTTGTTGACAGTAGGTGTTAAT ACGGATCCAGATATCTCTAGTCTAACCACAGATGCAACTGAGACCTCAGAGCATATACTG GATTATAGGTGGCTACAAATTCTTAGTCATTCTCCCTATAAAGGGATGTAGTCTAGTTTC CTTTCCCCTGAATCTGGACTCAGCCTGTGACTCACTTGATTGGTAAAAAGCAGAACTAAG TAACATTGCACGATTCCCAAAGCTAGGTCATATGAAGTGTTACACCTTCTGCCTACCTCT TTTGGAGTGCCTGCTGTAGGCACTCTCCTTCTGAGAACTCAGTTGTCATTGTGAGACTCC CATGCCACGAGGACAGCCCTGTGTAGATATCCAGTCAATAGCCATAGCTGAGCTCTCAAC CAGGAACTGGCATCAAATTCCACCCATGTGACTGAGCCATTTTTGGCATGCAATCAGTCA TGCCTTCTGCTGACTGCAGCTTCCTCTACTACATGACAGACCTCAGGTGAGAACCATTCA GCTGGGCCCAGTAGTCCACAAAGCTGTAAGAGAGAATAACGGAAGCCACTAAGTTCTATG ATGGCTTATTACACAGAAATAGATAATCCCAAGCCAGTGAACTCAGAAGCCCATCGTTCA GTTTAATTCTGTTATCTTTTCAACCTCAGAATAACTGTGATCAAAGCTACATCACTCACA CTTCAAACAGGCTTCATCTTGCTCTGGAGAACTCATCTTGGTATAATTTTATGTGACTGG GGATAGAAAGACTCAAATGATCTTTGATTGACTTCATTTAAGTTTTGATTCTGCTTTATA AAGTAGATTTGCATGAGGGTACTTGCAAGTTTGGAACCACCTTTCATTAAAAAAAAGAAA AACTGAAAATACTTTATTATTAATGGATAGTTTATACTTAACAGGTAAAATCGAGAGTTT GCTATAAGTTTTCTCTAAATGTACCCTAGATGTAAACAGGGCCAACACTTTCCCCAAGGT CTAGACAATATTGGTCCAAATTCACATTTATTGATTAATGAAAAATCCAATGCCTTCCAT AAAATTTCTGTGAAGTAACTAGGTTGGAAGAGGGTTCACCTGATGTTCTTAGGGCGACCT CTGGTTTTGAGATCTTGCTTCTGAATTTAATGAATTTCAGAATCTTACTGACATCCAATT CGTACAGTTCTTATTCCAAGTTCTATAGACCTAGATAAGCACACTGTAATTCTTTAATTT CCTCCAATAAATTGTAAATAGATTTCACTGTGGGTTCAGGGAATACATAGACACATATTA AAAGTCAACTCAACAATAGATATGCAGGTTCCTTAAAAACAATCAAAGAACCATAAGGCA GCTCTCAATCATTCCACAAAAGTGGCATTTGTCACTTGTGCTCATATTCTGTTAGCAAAA CCAAGTGACATGGTCAACCTTCATGTCAGCTGGACAGAAATGGATTCTCCTCCTCAAAGG AGGTATTGCAAAGCTCATATGGCAATGGGAGAGGGCAAAAATCCTCTTACAGTTAGTGGA TTCATTATGTGAAGAACATTCTAGAAGAGGGACTAGCAATTAGAATGCATTTGAGGCAAT AATATGCTTGATACATTTTGGAGACATCATCAGGACAGGTTTGTCTGTAACAAAGTGAAG AAGAAGAAGAATGAAAGAAAATGAGGATCATAGAAGTAGTCAGGATTGTGTAGGTTGTGG TTAAGACTTAAAATTGTATTTTAAATGGGATGAAAAGCCAGAGAGGGATTTGAAAGGAAT GGTATGATATGATTTACATTTTAAAAGAATGATGCTGCCTTTTAAGAGGGGAATTAATTC TGCTCATGGCAATGGAAACAGGGAACCCAATCAAGAGGCTTTTTCAGTAGTTCAGGTAAG AAAGGAATGCAACATTGATGTTGGAGAGGTGATGTAGCAGAAAAGGTAGTGAGAAATAGT TGGATTATGGACATCTTTTAATGGAAAAGCTGAAAAGTTTTTGGTGACTTTGATGGCATA AGGAGGAGGAAATAAGGGGACATTTACTGAAAATCTCTCATGGAATAGCAGATTTGGAGA CAGGCATATCTCAAATATGTTAAAATTGAGATGGCTATTTGACATCCAATAAGACATATA CGGTATGTAGCAGGACATATGAGTTTAAACTCAAGAGAGGGACCTGGAAGATACTAAATT TGGGTGAACGAGCAAATGAATGGTAGATAAAATCATGAGACCAAAATACAGGGTCAGTAT AGACAAGAAGAGAAGTTTAACGTCTGATTCCTCAGGCACTGTCATATACAGAGGTCAAGG AGGATAGAAAGAAACAGCCAGTTTAAGAGAAACCAGGGTAATGGTTTTCCTGGAAGAAAA TGTCTCAAGAAAGACAATGTTTTGTGTGCTATTTATAGACCAAGTAAGATGGAGGCTCTG AGTTGTATATTATATTTAGAACTGTGCGACCAGGATGAAAGTGCTAGGTATTTCAATGAA GTGATGGGAATGAAAATTGTACTGGAGGAAGTTAAGAAAAACTGGGAGATAAAAACGCAT AAGCACAGCCAGGTCATTTTTAAAGAGCTGTCTTTAAAAGGGAAGAAACTAGATGAGTAT ATAAAGTCAGGAGTTAGTTTTTTCATTTTGTTTTGTTCTTATTCTGAGGATGTCACAACA GGTCTACATTTACTCATCACTGGCTCATTTATTTGCATGTTAAAGTAAATACACACACAC ATACACGAACACACACAATCAACATAGCACATCTTTGTAGTAGTGAGATGTTCTTTGCCT TAGCCCATCCCATCTGTTCAACTTCTCACCTCGTTCATTCTGTGTTTAAGCAGCACACGA ATTTTCCCTTTTGTTTCATTTGTCTCCTCTTGACAATGAATCAGCAAATTACTCACAACT GGAAAGGCTTCCATGCTGAAACCATAACAAAGAAAGCAACTCCAATTCTTTTCATCTACT GAAGCCCTCAAGCTTGAGTATCTGAAACTTACAAAGTACTTTCTAATAATTATTTCATAC CAGAGCGTACGCAGTGAGGTTGGCAGCATACACAGGAGGAGAGAGTGGAGAGCTAACAAG ACAGACAAGGTCTCGCAAGAGAAGACAGTGAAAAGCAGTGGTTCATATGTGTTGACTTTC TTGTTGTTATTATCAATTACTTGTGCTTTGGCCCTTTTTGGTTCAGCCTTACTACAAGTT ATCAGTTTTTTTAATATTTTCAAAAAATCATTTTTTCATTTTGTAAATTGGGTATTATTT ATTTTTGTGTGTCATCATTCTCTACTCTTCACTGTATTCTATTGTCTAATTACTTTTACT TTAATTCATTATTTTGTTTTCAAATTTCTGGTGGAAATTTAATTATTGACTTTACAAAGT ATATCGCCATCCACCATCCCCAGCTTTCTCCCAAATAACATCAAGAACTCACAATGTTAC ATTTCTAATTACCCAACTGCCCCATTTCTTGTTATTCTAAGTTTCATATTAACTACTTAA GTCTTGCTTATTAATTCTCCAAAATATTTAATATTACCTTTGTTTTCTTAAGTCAATGGT AATTTTATTTTTAACTATTTTATTTTTTAACTAAACTCACTTTTATTTATTTACATATCT AATTTATTTATTTTTGAGACAGAGTCTTGCTCTGTTACCCAAGCTGGAGTACAGTGGTGC AATCACAGCTCTCTATAGCCTTGACCTCCCTAGGCTCAGGTGATTATCCCATCTCAGCCT CCTGAGTAGCTAGGAATACATGCATGCACCACCACACCCAGCAAATTTTTTTTTGTAGAG ATGAGTTTTTGCCGTGTTGTCCAGACTTTGTCTCAAACTCCTGAGCTCAAGCGATCTGCC CGCATCAGCCTCTCATAGTGCTGGGATTACAGGCAAGAGCCACCATGCCTGTCCACAATT TTTTTTTTCTTTATTCTACTTCAAAATTCTGAAGTTAAGTTTCTTTCTTCTTCCTGAAGT ATAATAACAACATAGTACTTTTGTTGGTGACCACCTAGAATTGGAATGATCTCTACATAT CATGTGCAATGTCTTTATTTCCACTGCACACAGTGAACATGGAACTGTAGTTTTGTTTTA TACATAAATTGAGCTATTTTCCCTTAGCACTTAGTAACATGGCTGTGCTGGGAAGTCTAG TTTCAACCTAGCCATTGTTCCTAGCAGGGAATATGGCTTTTCTCTCTACCTGTCTTTTTC TTCTTCTTGCCATTCTACAGTTTCACAACGCTGTGTTGCCAGGTAGATTTATTTTTATCC TAATATTTTATGTAAGTAGTAATGTATTTAATCAGCTCCTTAAAAATTATTTGTACCCTA ATGTGTCCGGAATTGGTCGGTTCTTGGTCTCGCTGACTTCCAGACTGAAGCTGCGGACCC TCGCGGTAAGTGTTACAGTTCTTAGATAAGGTGTGTCTGGAGTTCGTTCCTTCAGATGTG TCCAGAGTTTCTTCCTTTGGGTGGGTTCGTGGTCTCGCTCACTTCACAAGTGAAGCTGCA GACCTTCGAGGTGAGTGTTACAGCTCTTAAAGGTGGCAGGTCTGGAGCTGTTCATTCCTT CCAGTGGGTTCGTGGTCTTGCTGGCCTCAGGAGTGAAACTGCAGAACTTCCCAATGAGTG TTACAGCTCATAAAAGTGGCACAGACCCGAAGAGTAGGCAATAGGAAGATTCACTGTGAA GAGCCAAAGAACAAAGCTTCCACAGTGCAGAAGCAGACCACACCACGTTGCCATGGCTGG CTCTGATGGCCTGCTTTTATTCCCTTATCAGGCCCCACCCACATCCTGCTGATTGGTCCA TTTTACAGAGAGCTGATTGGTCCGTTTTACAGAGAACTTATTGGTCCATTTTGACAGAGT GCAGACTGGTGCATTTACAATCCTTTAGACACAGAGTGCTGATTGGTGTGTTTAAAATCC TTTAGCTAGACACAAAAGTTCTCCAAGTCCCCACCAGATTAGCTAGACACAGAGCGCTGA TTGGTGCGTTTAGAAACCTTTAGCTAGACACAGAGTGCTGATTGGTGCGTTTACAACATT TAGCTAGACATAGAGTGCTGATTGGTGCATTTACAAACCTTTAGCTAGACAGAAAAGTTC TCCAAGTCCCCACCATCCCAGAAGCCCAGCAGGCTTCACCTCTCACTGGCACTTGCCCTC GGACTTTGCAGCTCCTAGCTGGGGCACTCTGGCAGCCCAGAGGGAGCTCGTCCCAGACAA CCAAGAGGAAAAGAGGGGGAGCGAGAAAGAGACAGAGACCCACCATCGTGGCCAATGACC CTGCGAAGAGGGAAAGGCAGTCCACGAACGGGACCCAGCCTCTGATCAAGCCCAGCAGGT GCCATCCGACCGTGCCCAGTGTGGTGCCCACCGAGCCTGCACCCACCCGGAACCCAGGCT GGCCTGTGAGTGCCATGTGCATGCCTCGCTCCCGCCAGTGCCTCTCCCTCCACACCTCCC CCCAAGCAGAGGGAGCCGGCTCCAGCCTTGGCCAGCCCCAGAGAGGGGCCCTCGTAGCAT AGCAGCTGGCTGAAGGGCTCCTCGAGTGTGGCCAGAGTGGATGCCGAGGCCGAGGAGGCA CCGAGAGCGAGCAAGGGCTGCTAGCACGTTGTCACCTCTCATTACTTATTAGCCGTTATT ATTATTATTACTATTTATTATTATTATTTGAGATGGAGTCTTGCTGTGTCACCCAGGCTG GAGTGCAGTGGCGCAATCTCAGGTCACTGCAACCTCTGCCTCCTGGGTTCACACAGTTCT CCTGCCTCAGCCTCCCGAGTAGCTGGGACTACAGGCACCCGCCACCGTGCCCAGTTAATT TTGTTTTTGTATTTTCTAGTAGAGATGGGGTTTCACCATGTTAGCCAGGATGGTCTCAAT CTCCTGACCTTGTGATCTGCCCGACTTGGCCTCCCAAAGTGCTGGGATTACAGACGTGAG CCACCGCGCCTGGCCACCATTATCTTTATTCACTCTTCCTCAAACTATTAGGTGTATGTT GACTATTTTCATTCTCTATTCTTCCTACTTTTTGTCTCCGTGTAGCATCTTTGTAATGTC TATATCTTTACCTCTTTTGGTTGAATTCTGGGTAATTTTCTAAAATCTAAAGTTTAACAA TTCCCTCTTCAAATAGATATATATATATATACACACACACACACTCATATACATATATAT AATATGAGTGTGTGTGTGTACATGCACATGCAAATGCATTCACTACTATATGTTTGGAAG TTCTAGTTCTATTTCAAACCATGGTATGCTTTGCTTATAAGGTCAAATGGGGTTTATGTT CCTTTACTGAAATTTTCATTGCCTTATATATTTACACATGTTAAACATAATTATTGCATT TTTTTTGTTTTTGTTTTTTGATTCTTCATCCATGTTGAGGTTCTTATGATCAAATCCTCC TCTGTGGTATTGGTTCGGCTTGCTTACATTCATGGAAGACTTTTTTTCTTATGCTCTCTG CATGTTTATTATTACTTTATCTGCAGCAGGTCTTGTTTCTGAAATGAGAGAATTCCCTGA CCCTCTTCTGGGACTTGCGACTGGTTGTGGCCCATTTGCTCCAGGAGGGGAGCATGCAGA TGGGCAGCTGTAGGAGTTGACGTGGGCGCTTTTGGGCTCCAGCTCCACAGTAGCATCTAG GAGTGTGTTACAATTAATGCTGTTTTAGCAGTTGCTGTCAGAAGATGGCTAAGTGTTAAA CCAGCTCAGTGGAGAGTCAGGGTGACAGCCCTTTACACACTGCCCTCTTGGTACTCAGGT CCTTCCCTAGCATCCAGGAAGAATCAGGTCACACTGACTTAAAGGATGGTGAATGTGGGG ATTTTATTGAGTGGTGGAGGTGGCTGTCAGCAGGATGGATGGGGAGCTGGAAAGGGGATG GAGTGGGAAGATGATCTTCCCCTGGAGTTCAGCTGTCCTGCGGCCTATCTCCTCTCTCCT CTCTGACCATCCCTGGTCGAACTCCTCTAGACATTCATACACTCCTTCTCTTCTCTCCTT CTCTTCGTCTGGTAAGTGATATACAAAACCCAGAGATGACATTGTAAATAAAGGTAAGGG ACTGAATTCTATCTTCCTAAGATCAGGAACAAGGTGAAAATGTCAGTTTTTGCCACTGAT GTTCACTATTGTACTGGAAGTTCTAGCCACAGCAATTACTCAAGAAAATAAAATAAATAG CATCCAGACTGGAAAAGAAGTAATACGATATCCTTTGCAGATGCCATAATCTTGTACAGA AACTTCTAAGGAATTAATAGAAAAATATTTAAAACTAATGAGGCCAGGCATGGTGGCTCA TGCCTGTAATCCCAGCACTTTGGGAGGCTGAGGTGGGCAAATCACTTGAGGTCAGGAGTT CAAGACCAGCTTGCCCAACATGGTGAAACCCTATCTACACTAAAAATACAAAAATTAGAT GGCCGAAGTGGCACATGCCTGTAATCCCAGCTACTCAGGGGGCTGAGGCTTCTCTTCTCT TCTCTGCCGTGTCACTCTGTTGCTCTCCCAGTGGAGCTTGGGATTTATATGGGCATAGGA TGGGGTGTGGTGGGCCAGAGTGGTCTTGGAAAAGGCAACATTTGGGCACAAAAACAGGAA TGCCTTTCCCCATTTAGGGCCACAGGTTTCAAGGCTTGAGGGTGGGAATTGTCCTTTTCT ACCCAGTATTTTCCTGCTTCCTGTCCATATCATTTTCTTTTATGAAAACATCCCAAGTCC TGGCTTTTGAAAGACCCTTCAGACTAGCTTTGTGTTTGCTTCTGCCAGGTACACCAAAGC TCTCACTGGTCCCAAAACAATTTTACACATAATTTTGCTTTTAGAGAATCCATAGTTTGT ATAAATTTACTCTAATTCTGTGTGAAAGACAATCACATGAATGCATGATTCTGTTATTCA AAGGACACTTAAAATTTTTTTTGCATGTATTACCCAGGTAGCTTGTTAACCTCCTGGAAT AATAGATAGCTTTGTTCTACTGATGGTGCAGGACACATGGTATCTCTGTGAATACAGGAG TTACAGTTACAATTCTTGCCATGCAAGTACTCAAGACCTCGTTTTCCATGGATGCTGATC AGATGACTTCTGTTATGTTCCCTAAGCCTTACATAACCATATCAGCTCACTTCTAATTGT TCTGGTTTTTATTTTCTCTTTATTTCTATCACCTGAGAATTTCCTATTCTTATTATTTTT ATTATTTTTGCTGTTGTAACTTACTCAGTGATTCTATGCATCAATTTGCATCTAACACAA GTTTCTCTAACATAATTTTTAAATTAATTTTTGTTGTGTAAGGAAACAATTAGATTGGGG TAAAAATTAGGGGGATAAATGTTATTACTCAATATGAAATAAATGGTTAAACAATTTCTC AAAGTTTCATCCCTTTAGGCAGTTTACATTCAAGGCAATGAGCTTGTTATTTTCTAAGTC CTCTGGCACTTAATATAAAAGTAAAGGCATATGTTCCCAGGTTTTAGCCAAATTTTTATA ATGGCCAATTTCATCATATTTCCCCTGTCCTTTTTACTTCCTGGACTTGAAAAAATCCAC TACCTTGCTGGCAATATGACAGACGACTGGATTGGCTGCTGGAGCAGCTGTATCCATTAT TGAATTAACTCCCCTCAGCAATCAACTTCTTAAAGCTCTCCTGAGAGAATAGAAGCTGTA AAAGTTGACATGTATTTCAATTTAAGACCACAAATATAAAAGACGTTTTTGTTTGAAGCT GCCACTTTGGCCAATAGTAATTTAACAAATTGTTAAGAGAGGGTGTTGTGTTCATGTTTC TGGGCAGCTGTTGGACATCAAAGATGTCATTTTTGAAAATCTTTTCCTCTTCTCTTTGTG CCTATTATATGTAAAAACTGTTTGGTTTATTCTCATATCCCTCTACCATCTTTTCCTAGC AGGGAATATCTTTCAGAGATAATAGGAGCTCCACCTCCAAGAGATGGAGTTATAAGATGT ATGTCCGTGTGTGTGTGTGTGTGTGTGTGTCTGTGTGTAGTTCAGATGAATTCAACTGTG TGTGTGTGGAGTTCAGATGAATTCAACTGTATTTGTGTATGTGAGTGTGTGTGTGAGTGT GTGTGTGTGTCAAGATCTTGATATATTAGCCAGAGCAGAGAATTACAAATAAGTAGTAGA GAACTTGCAGGAAGTCCCCATGGGCATTTTGTGTAGTAATCTCAGGTTAAAGGAACACAA TTGCTAAAGAAGTATAACAGTTCACATTGAGGTTTTAGACACACTGGTGACTTTTAGCAC TCCTTGTGAGTGGCTTATATTGAAAATGGTCATGTATGTGAGCATAGTCAGATGGTAGAA TGTTTTCCACTCAAAAAAGAGAAAAATCCACCAGGTGAAATTGAAATTGAGTCTTGAATA TTTCGTATTAGGTATGAGGTCTATGTGTTTGTATTTAAATTCCGTAAAAAAAGCACACTA ATTACCCAGGAATTATTACTAGTTCCTCAAAGAATGATGAAGGTTAGACTGTTCACTTAT AGCTGCAGTTTTTTTACTAGTATAGTACTAGTAAAAACACAAATAATAATAATTATAATC TATTTCATGATAAAGTCACCATGGTAAAGATAAAGTAGTTACAGGTCAGCACAGAGCCTG CTTGACAGTAGCTGATTAATAGTTATGAGTTGCATTAGCAAGTTGGTAGGCAAATAATGA AAAACTTATTGAATGTATAGGTCCCAAATGATGATACAATAGCAGTTTTTATTGTTCAAA ATAGGTGCTCAACAAATGTTTGTTGATTAGTTGTATTTCTCTATATAGTGACCTCCCAAG CTACCTTGTGCAATGTTTTCTGTCCCTACATCTGTATCTACAGACAAAGTACTGCACCTA CAGAAAAAATTCCCGCCCAAGGTGAAAGTCAGTACCATCTATGGACAAGGAAAAGAAAAG TTCTTAATTTGTTACTTCAGTGGCCGAATCTCAAGTTGGCTTTACTCACAGTCCATTCTA ATGTTGTAGCCCATTTCAGTTTGAATAATTTGGTTATCATTCCCCTTGTGACCAACACCT TTGTTTTATTCTATGGTTCCTTTAAACTTGCAAATCAACAGAGAAACTGTCAGCATTATT TCTTCTCTAATGCCAAAACCAAAACATCTGGTTTTGTTGTTGTTGTTGCTTTTGAGACAA AGTTTTCACTCTTGTTGCCTAGGATGGAGTACAGTGGCACGATCTTGGCTTACTGCAACC TCCGCCTTCCATGTTCAAGTGATTCTCCTTCCTCAGCCTCCTGACTAGCTGGGATTACAG GCATGTACCACCACGCCCTGCTAATTTTTTTTTTTTTTATATTTTTAGTAGAGATGGGGT TTCAGCATGTTGGCCACGCTGCTCTTGAACTCCTGACCTCAGGTGATCCACCTGCCTTGG CCCCCAAAGTGCTGGGATTACCAACATGAGCCATCATACCGAGCCCAAAACATCTATTAA TAATTACACTGTCTACTATCCTCAGTGAAGGAAACATTAAATATGACTCAATATCTGCCA CTGCATGACAAATCTTTAAGGCTATGCTTTTATGATTCAATAAAATAATTGCTTCTAAGG TCAACAGTGAGAGTAACAAGCATTAATAAAATCCATTTCTAATTTTACTGAGTCAACAGT TTCAACACACATCACTCCCAACCCACAATTCTACCGAGCCTAGTCAATAAAAGAAAATAA CAGAATGGTGACAAGGTCGTTGAACCTTCGAAACATGCATTGTTCATAGAAAAATTGTTT TTCGGTAGACACAAGGAAGAAAAATTCCGACAGAATCACTCTTGGAGACTGGGTGTGCAT ACAAGGAAGAGAAAATAAGAGTTCCTTTACTAGGCTGGATTTCTGATATCCAGAGGTCTT TCTGATATGTTCATTTGCTACCTTGAAAAAATAAATAATAATTAGTAAGAGGTGCCATGG TGGAGTTCGCCAAGGAAAGGGGAAACCAGAATTGACATCTTTCATTCCCTTACTGTCATG TTGAGCTCCTGGTTCTCAAGGAGACTACGCACTCTGTATGATAGTTGGGCATTAAAGGTG TGTTGGGGGTGAGGGTGGAGAGGCAACAATAGTCTACATTTTTCAAGGATTACTACAGCA CTGGGTAAGTGGGATACAGTTTGCATATGTGATACAGTTTCAAAGGGATGCTGCTTGGAT GTATAGCTAGGGGGTTAGATAAAAGAGATGACTGAAAGTAGCAAGAATGGAAAGTATATA TGGAATTTGCATATGACTGACCTTAAATGCCATAATGAAACATGTTCAAACAACTAAAAG TTAGTGAACATTGTGGAATTTAGCCAACACGTTATTGAGAAAACTGATACTCAACACGAA ATAGGGTTCCATACAGGACAGCTGAGAAGCAGTGATCAAAACAAATGAAACCTTTTCTTG TTTATGCTTCTTCATATTGAAATTCTTCAGTAAATTGATTAAAAGTTAAAATGTATTCAC ATGCTGAAAGTGATAGAAGTAGGATTTAGAAGTCTTATAGATTTATGTGATTGACTTCAT GTTGTGGGTTTAGTTATCAAGAAAACAGGAAGCATAGTATCATTTTATTTTTTTAACTAG ATATTATTGCAAACAAATAAGCTTCAGTCTGCTGTAACTGTGTCATTTAATGTACTGAAT ATTGTCCATATTTTATTAACCAAGGATACATTTCATAATTCTTTCTCCATTTCCTTTCCA AAATACTTGATCTGACTGTAATACTATAAGGCAAAAATATTCCCAGGTGATTAATGGAAA AGAATCTCAGTACTTTATTTTCATTTCTTACTGTTTTTTTCACCTTGGATTTAAGTGGTG ATTTTAATAACTTTTTTTTTTTTTGCTTTTGAATCATAGAAAGGATTTAGCTAGGACTTC ATATATTATTGTAAAATATCCAAAAGCCAGATAAAGAACAAGTTGGCAATTCTTTATATA TTTACTGAACAAGTATTTATTCACAAGTATAAATACAATGCACTCGATCCTGTGGGACCT TCAAAGAATGACAAGAGGTTATACCCCTCATGCTTCATAACAAATTACCACCAACTTAGC CACTTAAACCAGTACACATGAATTATCTTACAGTTTTCATGGGATAGGAGTGCAGATAAG AGTTAGCTGGTTTCTCTGTTCAAGGTCTCAACCAGGTTTAAATCAAGGTGGGGCTGAGCT GTGTTCTTACCTGGGACTTAAGAGTCCTCTTCCAAATCACTGATTGTTGACAGGATTCAG TTCCCTCAAGCTGGAGAGCTGTGTTTCCTGTTTTCTTGCTGGCTGTTGGCCAGGGATCAT CAACTTCAACTCCTAGAAGCCAGCCTCAGGTCCTAACCACATTTTCTCCTCCTCTTGCAA AATGGCAGCTTAGGTTTTCAAGGACAGTAAGAGAATACCTTTCATTTCGAATCTCTCTCT CTATCCAGTCTGCTAAGACAGTTTTGAATTACTTAAGAAGGAATTGGCTGTCCCATCATG TTCAAATGTCTCACCCATGTTGAAGGAGAGGGAATAATACAGAGTGTGCACATCAGGGGC CAGGAATCTTAGGGGTTATATTTTTCTGCCTACTGTACCCGCTCACTAAAATCTTTTCTA GCGAAAAGGGAGAATGTTTTCACAAACAGCTATGATACCAAATCTAATCCCACTATTATT ATATACTCCCAACATTTTCAAAAAAAAAAATCTGAGTATTAGGACTAAATACTTAGAATG TATTAAAATATATACTAAATGTAAGATAGTAAGTTTTGTTTAAAGTTGAGGCTCATGTTT ATAATTCGTTGCCTTTTTCTTCAACAGAACATTTAAAATCTCCTGTATATTTCATGGAAT TGCAAATATGATGCATGTATTTTGGCAAATGGCTTCTCTCATTTGACATACTATGCACGT TATCCATAGTATTCTAATCTATCAATTACTATACCTATAATGCTGCATAGAAAGTTCTTA GAAGGAATTGTCATAATATTGACTTTTCTGAAATGTTAAACAGAAATTTCCCCCTCAAAA CTACCATTATCAATAATACAATGAATGATAATATATATAACATATATCACATATATGCAT CATACATGTATAAGATACCGTGTCATCTTAAAATGTAAGTATTTGTTTAGATAAATTCTC AGCACAGGTTAAATGACATAAACAATTTATGGCTGTTTAGATGCATTTCCAAATTGCCTT ATCAACGTACTGCATCAATTAGAGACGCACTAGTTGTGCACAGTTAAGAGAATTGATCAA TTCCTGGTGTCATTTAATTTTTAAAAAATATTCTTTGCTAAAACTTAATTTTTAAAAATT TATTAAATGTCTACATACTATGCATTAAAAAGGATCTAGGAATTCATCTATGTCAATGTT GTAATTCAACAGATGAATAACCTTACTTGTCAGGAGGTTCAATGTGACTGTTTAAGGTCA TAAATCTAACAGTTGTCAGACAAAGGCTAGAAAAACAGCTCTCACATCCAGCCCATTTCC TTTGCATTGCGGAAGTACTTCTCCAGACTTTGGTGGCCCTCGGATAATTTTGTGGGGAGT CTTCTTAAAAACACAAAAGTAAGAGGCCCACTCCTACGAAACCAATCTATTTTTATTCTG CAGAAGCACGCATTTGATTTTGATGCAAACTATTTGGAGGGCCACTGCTCTCAGCAATCT GCTAATAAACGTATTATAAAGAGACAGAATTACCAAAAAAGGTAAGAGAGAGAGAAAAAA AATTGACACCAAAGTTTGTAGGCTGCCCTGAGTTTAACCTTAGGATTAATTTAAAATTTT ATTTTATTTTTCCTAATGAGTCTGAGACAGACAGACTTAATTTATTTATTGGTCGTCCTT GTTTTTAAATACATGAAGAAAATGTAGAGTATTATTATAAAAGTAACACACGTTAGTTAT AAAAACTTTCAACACTATAAAAGGATATAAAATGAAAAGAAAAAAAATTCCCTTCCCTAT CACTCCAGTGATACTCTACAGAGAGATGCTCTGTGAATAGTCTATCTTTTATTTTTCAGG TATTTTTATCTCAATATTTAAGCATAACTCTGAGTGAATTTTTATTATAAATGTCAATAT ACCGGCTGGGCGTGGTGGCTCACGCCTGTAATCCTAGCACTTACAGAGGCCAAAGTGGAT GGATTGCCTGAGCCCAGGAGTTTGAGACCAGCCTGGGCAACATGGTGAAACCGCGTCTCT ACTAAAAATACAAAAAATTAGCTGGGCGAGGTGGTGCGTTCCTATAATCCCAGCTACTTG GGAGAGACTGAGGCAGAAGTGCTTGAACTGGCGAGGTGGAGGCTGCAGTGAGCTGAGATT GCTCCACTGCACTCCAGCCTGGGCAATAGAGCAAGACACTGTCTCTAAAATAATAATAAT AAATAAATAAACCTCAATATACTAACCTACACATAGACCTATATTTTCCAATGGCTGTGT AAAGCTTCATTATACGAATGCATCAAAAAGTTTAAATCAGTGCCCTTTAGCAACACGCTT AAATATTATTCCTACTTTTTTGCTATTACAAACAATGCTTTGGTGAACACCTCCTTGGAC GTTTTCTGTTTTGTCTTTCCATAAATACACGTACAAGTATATCATCATTTTTAAAGATGA ATATCTGAAAATGAAAATGCTTATTCATTTAAAATTGCCATTAATGGATGTGCCAGTTTC CAATATAGTAGAGCATGAAAGTGCTCTTCTCCTTCATCTTTACCAATATGGAATATGATC AATCTCTCCAATATTTATCATTAAGGTAGATAAAATATATTAAGAGGTAACATATATGCC GTGCTTACTGTGTGCAAAATTTCTGATGAATTTTTATGAACACTAACTTATTTAATCCTC AAAACAACCCAATGAGTTATTCTCTCCATTTTGCAGGTGAGGAAACTGAACTACAGAAAG GTTAAGCGAATGGTATGAGATCACAAGACCAGCCAGGTTTTCGAGTTGAGATTTCACACA GATTGTCTGATTGTCTGGGTCCAGAGTCCTTGCTTTTAAAAGCAGCACAATAATTAATTG AAGGTTCTTAAATGTTAGGATATTACTTAATATTTTATACATTTTATAATAGTTCAATAA ATGTAAATTTATTCATCAAATTTGGAATTTCTTTCTTTGAAAATTCTGTTTATGTACTTG CCTACCTTTCTATTATTTTTTCAGAGCTATTTCTAACTAAGAAAACTGGAAAGTATGCTC TTCTTGTATTATATCTCTTTTTAGTTTGTTTATTAATTATTTATTTATTTGAGACAAAGT CTTGCTCTGTCGCCCAAGCTGGAGTGCAACGGAGTGATAGATCTTGGCTCACTGCAAACT CTGCCTCCCAGGTTCAAGCGATTCCCCTGCCTCAGCCACCCAGGTAGCTGGGGTTGCAGA TGTACCTCCATGCCTGGCTAATTTTTGTATTTTTAGTAGAGACGAGGTTTCGCCATGTTG TCCAGGCTGGTCTCGAACTCTGACCTCGAGTGATCCACTTGCCTCGGCCTCCCAAAGTGC TGGGATTACAGGCATAAACCACCGCTCCTGGCCTCTTTTTAGTTTGTTTAAATTAATTTT CTGCAATACAGTCATTTTAATCTTATTCATGAGTGTTTTCCTCTGGGCTCTGTAAATGGC TTTATGTTACAAAGAGACTCACTTATACTTTATCTTAATATTTTAAAAATAATTTCTAAT TTGATTATGACATATACATTAAAACATAGATCTGTGGATTTTCATTTCTATTCAACTTTT GAAAATGATTATATTAAAATGTTATTAAGGCCGGGCTCAGTGGCTCACACCTGCAATCCC AGCACTTTGGAAGGCCGAGGCAAGTGGATCACTTCAGGTTAAAGTTTGAGTCCAGCCTGG CCCACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCAGGCATGGTGGTGC ATGCCTCTATTACAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACTCAGGAGGC AGAGGTTGCGGTGAGCCGAGATCCCACCATTGCACTCCAACCTGGGCAACAAGAGTGAAA CTCTGTCTCAAAAAAAAAAAAAGTTATTAAAATTTCATTGTGGCCAAATATTGGTGCCAC TGAAACCCGAAAGACAATTGATGTAAAATTAGTAATATTTCAATATTATATTTAGTATAA ATTGATTTAATTTAATTTACTTTTGTAAGGTGTATTATTGAGACAAAAAGGAAGAAAATA CACAGAAATCAATATAGCATTTTAGAGCAGTGGAGTTACGGGCTGTCTTCATTTTCTCTT TTATTCTCAACAAACTCTCTCTAATTTTTTGAAATTTCTTTGACTTACCAATTAATTTTG CATTGTAATGTAGGTATGGAAAAAAGAGATTACGTTTTTCCTTAGCTTGCATTAAATGTC ATAGAAATTATGTACCTATTCTCTGATACATGAGTCTAATACATGAAATAACTCGTTGTT TCATAAAATGTCTAAAAACATGAGGACTAGTACTATGCAATTTTGCTGTCAGTTTTTTTT TATTTCCTCAAATAGAAATCCTGATTATACAAAGTTTTTAAATAAAATGCCATTTCCTGA GAAGGAAAACATAACTAATTGAGAAATTAAGATCATGTAGCAATGCATGGCACAGTGTGG AATGCAGCAGTTCTGGCTTCCGACAGGAGACCCAAGCAGATGGTGCACAGTGACAGGGAC CTCAGCCTTAACATGTGCTGGCCTAGGGGACAAGCAGCAGGCAATGGAACAATTTAAAAC AATGGAGGTAAAACAGTGTGACTTTACATGACCACCAACTATCAAGTTCTATTAAAGATC ATTTTTTTATTTAAAAAATGGCAATAGCAATAGATTTTGCTATTCTCAAAAGCAGCAGCT CTATTGAAAATGAGGGGAGGCTGTTTTGTTGTTCTGAGAGAATGTTCTTAAAGAATGCGA GGATCTCCAAATATTACGTAGGACGTTGTTGTTTTTATATCTTATACATATATATGTACA TAGGCATATGGATATACTTTTAAAGGGTGTATACATGAGTAAAGTCTTTGCCTTTTTCCT TAACTTGCTTTATTTTCTATATTTTTGTATACCCAAATGACTCCCTCCCCATCTATGTAA TTCTGTGTGTGTGTGTGTGTGTCTTTCTGAATTTTGGGATTTTTTTTTCCTAAGTGGCCT TATTCAATATCTCCTCTTGTGTGTCATTGAGTCTTAATATTAAATGAGTTATCTGTATCT GTGCTAAGGTAAGAATATAAGTCAGAAAATTTAGTGAAATAAAGTAAAGCAAATATTAAT AAAATCACTGCCATTTAATTTTTCCGTTTATGCTTATCTGATCAGGCTGTTAAAAGCAAA AGTTCTTGTCCAATCTGTATAAATTTCTCTATCACTGGAAAGAATAATGAGACTTTGGAT TTACCTGTTTTACAAGAAAAACACTTGGAATATAGAAACCAAATCTCCTGGCTTTAAGCT AATGCCATGTCAACCTGATAACAAATGTTCTAGCAGCATAAAGCAACAGCAGTTTATTTG TCCGAGGCAATGAAAAAGGTTGCAAATTTTAAATCCCCCACAAACGTCTTCATTCATTAA AATGTAGCTATTTTGTGTCGTAAGTCTTTTCAGTGCTGTGTGCCTGAGTTCATTTAAGTC AACTTGACATCTGCTTCTGCTTGGAATTAGTCACCAGACTCACTAACTCTAACTGGATTC ACTAAAGTAGAAAGTAAGTGGTTCTCTTAGATATGGTGAGATCCTACTCTCCTCCGCTGC CCTATCTACAGGGCACAATTGCCCCCGAGTAAGCGAGTATACCCTTTCCAAAGCCTACCC TCTTGGAAATATGCAAGTCTACAAGTTAACTGAGTAAAATCATAGCTTTCCCATACGTAA GCCAAATCCTGAAACCACATACCATGCCATTTTAAAAGATTTTTTTCTTGTATCCAAATT TTCTGAAAATATTGAGATAAGAAAAAATAAATCAGAATAAACAGCATCCAAATAGCAGAC AGCTTCCACAGCATCTAGACTAGACTGGTTAAATAAATCCAGGCACTCCCACATTCTTCA CCGGTCTGAAAACTTCACTGTGAAGGAGGTCTCCATTCCAAGAAGCACCATTGTATGCTT TGGCATAAAAGTTTCCTTGCCTGTAACGATTACCTCCATTGTTTGTCAGTCAACATTATT GCTTAACTTCTTTGGAGTTTGGACATTATCACTTCTTTGAGTTGTTTTTAAATGAAGAAG CATAATAATAATGAGTCCCAGGATGCAAACTTACATGAAAGTGAAAGTGATTAAGATGGA GCAAAAGTTTTGAAAAATGGGAGATGTCAAAGGTAAACTAAACTTATTACTTAAGTTTCC TTGACCTGTGCCTATCACTAAAACAGATAATCACCACGCGAGTAGCTAAAAGCACATCTC CCACTGCTGATTTTAATACGGGAGCTCTAGCAAATTGAGATCAGGAGAAAAAATGTTGGA AATCTGGCTTCATTCCTATTGTGAAGATTAGCACCATAATCTTGGTGTTCTCAAAGAATG AAACCTTGTGGTATGATGTAGATCTCAGAGTAACTGAATCTGCTAAGTAACCTTCAAGTC ACTTGGAACATGAAGTTCCTTCAAGAAGGCAAGACTGTTAGGAATGTTGATGGAATATGT GTTCACACTGGCTTATTAAAATGTAGACCAGAAACTTCTCAAGTGTTCTTCGTACTCTAG GGATGGGATAAGGCTACATATTAACTTCTGTTTGTTCTCAAACATCTTATAAATAACATA GAAAGCAAGGAAAGCATCCATTATAACTTTCATATGTACAAATCCTAATGGAAACCTGAA ACTAATAAAACAAAAAGAGAGTTACAGACTGAAGGGGCATCCTAGCAAGATCCCCAATAA CAAGACTGAATGTAGTATCATTGACATTTGTAATGTATCAGTAGAATTCCTGTTGATGAT AAAGCCACTAGGAATGGCTTCAACTTGTAGAATATTTGAAGGGTATTCATCCTTACAACT TTGGAAAAAATTAAGAAACCTTTTTTTAGATATTCTGCTGTTCTCTGTTCTTAAACATTT TAAGCCTTGATCTCACTCTTACGTATCAACAGTTCCTTTTATTTTCTTCCAAAAGGCTTA CTTGCAAGACCATAAAATTGACAACAGCTTTGCGCAGAAAAGCCTAACTCTTAGCTCGAG ATTAATTAAAAAACAAAAACAAAAAATGAAAACACTGACTTTTAAACCTTAATGTCATAT ACTGCCAAACCAGGAACACTTCCACAGACACACACATACATATGTGTATATATTACAATG TGCCAGGAATATGGTTAATCCTCCAAGCAATTCAGTGAAATACTGTTGCTCTGAGTCTTC TGAGAAACATTTGCCAAGAGAGGATTATACACGCAAGGATTTTGTTAGAGAAAACGCCAG TGAAAAAAAATGATTAAAGAGCAGAAGAAGGCTGGAGAACCAACACACAGAAATGCCAGA CTGACTCTGAGTGAAAAAGAGAGTAAAAGAAAGTGGAATGAAAGCATACTCAGTACCTTG TAGTCTAAGGAAAGCCCAGCCTGGCCTTGGGGAGTTCTCCAGCTAAAGCTGGCCATCAGA AAAGTTCCATGTCTTCCAGGACTGAACATACCTAGTATCCTTGCCACACTTGAGGATTTC AAATTCCAGTACCTGGGGCCCTTGGGCAGTCACACTCACTGTATTTGGAGGTCCAACGGG GAGATAACCGCAAGTCACCCTTGTCTCATGCAGATCTACTTTACACGAGTTTGAGGAGCA ATTTCTCTATGGATCCAACGGTCCTTTCCTCTTGAAGTGAACACAGAATGTTAGTGAAAC AAACTACAGCTCCTGTCATTGTACTTCATGTCAGAGCATCAACTGATCCTCCTCCCTCCC ACATTAGCCATTCTTATATCCTCTCACCCTCAGCTATAACTTTGCAGGTCCTGGTGGCTT CCATGTTAGTGTGATCCAAACCTTATATCTGGGAGTATGGAACACCTGATAATCAAAACC TTCTCAGTCCAAATTGCTACAGATTTCAATTCGTAGGTGCAATGTGGCAAGTAAGACTAC GAAGCCTCCAAATGAATCTCTTGAGATCCACATATTTCTCCCTGACGTCATTGTGTAATA GTAACCCTACCTCCTTCTCCTGATCAGGCCTATTATCCATGATGGTGAGGCAGTTCATCT TTTCACCTGTTGGTCCTTGAGCAAAAGATGTTCAACGTACCGAGGCCAATCCTAAGTTAT AGCTCAATGGGAAGGACTCTTGCTGTGTCCCTTGCAAGTGTTTTCTTTCTTTGAGGGCCA TGGCCTCTGTCCCTGGTAGAGCTCAAAGTTGCATATCTGAGTAATACAAGATGTTCCAGT AGGTCATAGGGGATGATGGTGAACGTAGCCATTCCTTCTTCAGTGACTTGGTTCCTGGAC CCTGCATCCTTCCTATTGAAGAAGTAGCACTATAGAATACTCTCTGATTAAAAATACAGT GTATTCTATAAGGTTTGATATCTTTTCAACATGTTCCCTCCACACTGGCACTTCAGCTGT GCCTTTAGAAGGCCTTTCCACCATTGTACAGAGCTGGCCATCTCTGGATGGAGGGGTATA TGTGATGACAGATGAATCACGTAGTCATAGGCTCAATCCTACAACCCCTTCTCTGGACAA AGCCTATGCAGTATGAGATTCCAAGTCTATAAATCATTCATTCCATTAGTCCCTGGGTAA TGGTGATAGCTGATGCTTTACAGGCAGGAAAAGTAAACCCATACCTGAAGTAGGTGTCTA TCCCAGTGAGGATAAACTACCAGAACTTTTATGAAAGAAAGTACCTGATGCATTCAACTT CCTATCAAGGAGTTGGGTGGTCTTCTTGAAGAATGGCTTTATCAGGGGATCAGGGTTGGT TTCACTCCTGATGAATCGGACACTCACAAGCAACAATATCTGATATGGTTTGAATTTTTG GCCCTGTCCAAATCTCATGTCGAATTGTAATCCCCAGTGTTGGAGGAGGGGCCTGGTAGG AGGTGATTGGATCATGGGGGTGGACTTCCACCTTGCTGTTCTCATGATAGTGAGTGAATT CGCATGAAATCTGGTTGTTTAAAAGTGTGTGGCACCTCCCCCTTCTCTCTCTTCCTCCTT CTCCAGTCATGTAAGATGTGCCTGCTCCTCCTTCCCCTTCTGCCATGACTGTAAGTTTCC TGAGGCCTCCTCAGCCATGCTTCCTGTACAGCCTGCAGAATTGTGAGTCAATTAAACTTC TTTTCTTTATAAATTACCCCATCTCAGCTAGTTTTATATAGCAATGCAAGAACAGACTAA TGCAATATCTAAACCAGCTTTGGAGAATGAGATTCCCCCATGTTAGGTCCATACATAGTC TTCCTCTTGCATGGTCACTCTATTTATGTGATTATATTGTCAGTAATGAGGTGGTCAATG ATAAAGCCTTGCTAATGTCATTGGCTAAATTGTTTCTTCCTTTGATTGTTCTGTGTTTTT CTGTGGGGGAATGCTGGTCTGTGATAACATGTGATAGAAAACTCTTTACACTTTGTGTAC ACTCTCACATGTTCACCTAAGTGCCTCTACCCCATATCTCTTTGTTTCTGATATTAGTGT CTTTTTTCTTTCAGGCCACTGACCACGTGGCCGGGTCATTGACCACTGCTCAGGAATCTG TAGATATTCTCATCTTAGGACATTTACTTTTCATAAAAGGGGATGACCATGGTGCACTGC TCACATCTGTGTCCTTTTCATGGCTTTTCAAGGCCACTCCTGAATATAGCTGGCATGCAG TGCTGTCCATTTTTGGCTTACATCAGTGCTTCAAGCTGGCCCATCCATAACATAAGCTTA ATTTTTACCTCCTTTTTCAGCTGGCCACATAGGACCTCCCTCACACATGACCATAAACGT AAGCCAGAGGGGAAGCACTGATGCAACTGTAGTCAGTGATGAGGGATTCTGGGCTAAATA TTCATGTCCTCTGTCCCTGCTTAAGCTTGAACCCAGATGCACCATATCCATCTTCAGTGG ATTTCTGCTGTGCAAGTCCAGCGTTATGACTTGGAAGGTCTAACAGAATGTATCTCATAA TTAGCAATTCCAAGCACACGATCACATTCATGTGAACTGTTCTTATTTTCTTTTCTAATT AGAATGAAAAAGAATACAGTCACCAAATCAATGGCCATATACCATGTACCTGAGGCCTTA TTAATCTTCTCAAGAAATAGCAGCACATCTGGGACAGCAGAAGCCATCAGTGCTACTATT AGGATATAATCTCTGTTCATTCTCCAATACTAATCAAATAGTGAATTAAATGGAAATCTG ATAACAACCAGCAACCTTTCGTCCTTTTGGTCTTTAATGGTGGCATCTCTGCCCTTTTTC CTAGGATATAATATTGATTTTTTAGTTACCTCTTGGCCAAAGAGAGACAATTTTAGAGGT TTCCATTTTTCCTTTCCCATTGCAATATCGCTTACTGAATAAACCAGATGCTCAATATAG TGATTGCTCTAATTGCCAAGTACAGAAAAAGTTACTGGGTGTGTTCATAGATCTAGTAGC TCTATTGTGAGGTGAATTTTAGTCAGGACTTCAATTATCACATAGTTTTCTTGAGCCTCC AATCTAAAAGAGAGCCTGTGATTACTCTTTTGTTCTTTAGGTATTAACATCAACATAGAC CTCATGCGCAATAGTCTTTGAAACTTCTTGATGATTGCTATATTGCAAATGTGTCTCCCA TGGGTTGTGTGTGGAACACTTATTTCCCAATGCAACAGTGATTGAATATGGGGCTTCAAA ATAGGTAATTCGGTCATGAGGAGTCTGCTATCATGAATAGATTAATGTCATTATGAAGAG AGTAGGTTAGCTATAAAATTGAGCTCACCCCTCTCTTGCTCTATTGTTCTCACTCTCTGT TGCTCTTCCATCTTCCATCATGGGATGAGACAGCAGGAAGGTCCTTGCAAGGAGACAGGA GGAAGGTCCTTGCAAGATACTAGAACCATACTCTTGGACTTCCCAGCCTCCAGAATCATG AGCCAACTAAATTTCTGTTTATAATAAATAATCCATCCTATGGTATTCTGCTACAGCACC ATAAAACAGACTAGGGCAGTGGTGATCCCCCTTTCCTCAATATATACCCACCTGATAAAA TGTCTGTAAGTCCTTTGGGAAAGGACTAGGAGAATTGACAGGGTATATTTTTGCCATGAT GTTGTATGGTTCTTCTGGTAGGGGTTTATTATTCTCAAGTCTATGGGTTCTGCCTGTGAC GTTGTATGGTTCTTCTGGTAGGGGTTTATTATTCTCAAGTCTATGGGTTCTGCCTGTGAA TGTTGGTTCAGATCTGACCACTAAGCAATGTATTGTCAGTTTTAATTGAAATGATCACCT TCAGCCTTTTGCTCCTCCATTCTTGTCCTTCTATTCCATTATAGATAATTAAGCAGCACT TCTGCTGGCTGCCCATTAATTTTCCCCTGTGGACACTGTACTCTATTAATCATTTCCATG ACTTTCCTATTCAAGCCACTACTCTCCAATTCAAGCCCTCTTAAGCTGATCCTTAAAGAT TGTTATGACAAGTGAAGCCTTCTGCCTTCTGTTGTTTAAATGCCACCACCTGGCTTCTAT TACTTTGGGGCTCCATTACTCCCATGGCTATTAAGAAACTTAGACCTGTGACAACCTCTC TATACTTTGCCTTGAATCTCCAGAAGAAAACCACCACTTAAATTCTTTGTGATGTTTGTA ACTCTCTCACCAGGACATTGCTGGCAGTCTTGATGAATGGCGTGTCCTCTGAGCCCACTC ATGGAACATAATTCTCTGGTGAGTATTCTGGTCAAATATAACATATCTATTCTATCATGC CCACTTCCTTCTTCCTCTGGGTTGCTTCATCTTCTCTCTGTCAGGGCAACTCAGGCATTC CATTTCACTGCGAGTTGGCCATCAATTTATGCAGGCTTTATACGATTTATGCAGGCTTCT TCTGGCAATGAGATTACCTGATCACCCAGAAAGTGCCCCCCAGCCACTTCATTCTTGCTT ATCCAACTTTAAATTCCAGCCCAATCTGATCAAGGCTCATGCTGGTATATCCAGCTTATG CTTGCATTCTTTAGATCTCTTTCTTTCCTTAGCATTTCTTTCTTCTTGTATCATGTCCAA AATCTCCCTAGCTACGTTAGCTAGGATTATCTTATATGAGCATTATCTGCCTGGCAGTCA GAACAGAAGGTAGAGGAACATCTTAGAGGGCACCTGTTAACCTAGTTTGGAAGATGCTGT TGCTGCCTCTTTTAGCACAACAGAAGTACCAGCTCTTATCAGGGAAGGGTAGGTCATCTC TAAAAGTCCAGGAGTCTGGGGGAGGAGGGGCAGGTCACACAGTCAAAATCCTCATGGGCA TCAAATGTCTTGGTTCAATGTTTCAGAATTCCAGGTTTTCCCACCAGGACCCTGACCTTT GCACAATAGACCTGCCTGCCTTCATTGAGTGTCCAAAAGTCTTGGGAGATTTGCAATTCC ACTGATTGAGTTGTAAGCTTGTCATTCCACTATATCTGTTCTTTTACTGCAAGAAAGAAC ACCCTCTTCATAAGTCATCACAGAGGTCTTTGGTTCTCACACTTAGCCTTAAACTGCTAA CGGTCCTCAGTCTTCTTTATTCTTTTGAAGGGCATCAGTACAACCTAGCATCAATACCAC TATGCTGTTTTTGTGGACATTGCTTTCCCACGTGTTTTCAAATGCCTGAATGGGCACATC AGCCACAGCATTCTCCTCCATGGGAACGTTTTCTCAGGCTACTACCAGGGAAATCCTTAG CAATGGAGGCATTACCTTGTGCCAGGTACTATCTGTCCCACCAATGAACCAAGATGGTGT CTTCTTTTTTGCTGGGTGGTGAGTGACCAAGTTCAGCATCATCATCTTACTGCATGTCTT ATCAGACAGACCACTCTTGGGTCCAGTACCACTTGTGTTAGTCTGGATGCTCTGAAAGTA GCCCCCCTCCATGTCGGAATTAAATATGCAATGATTTTATTCAGAGAAAAACCTGTGACA GAAATGAGGGGAGGAAGCACCTGAGTAAAGTATTTCAGAGCACAGGACCCTTGATCAATT ATGCTCCCTGTAGTTGGATATCTATAAGACACATTCTCATAGTTGCCACAGATATTACAT TAATGTCATTATTCCTATGTTACAAATAAGAAAATGAACACAGAGTGATTGAGTCACTTG CCTAAAGTCTCAGAAATATCAAACAGAGGACCTGGGAGATATTCCAGCAGTTTTGCTTCA GCATCCATAATTTTAACCAGTTTTCTAGGCCCCAAAATAATAAAAACCAGCAGTTCATGT CAAAAAGATTGTCCAAAAGGCCCTGTTAGTGACTAAACTGTGCTCTCCCCACTCCCCAAT TAATATGATAAAGCCTTAACCCCCAGTGTGATTATATCTGGACATAGAGCCTTTGGAGGA GTAAAGGTTACTGAGATCATAAGGGAGTGACTCTAATCTGAAAGGACTGGTGTCTTTACA GGAAGAGGAAGACACACCAAGTGGCTGTCTGTCCACAAGCAGATGGAGGAAATACCACGT GAGGACACAGCAGGAAGGAAGTTGCCCGGAAGCCGATGAGGGAGGCCTTATCAGAAACCA ACCCTGCCTACTCCCTGATCTTGGACTTCCTGCCTCTGGATCTGCAAGAAAACAAATGTC CCTTGTGGCCGGGCACTGGGGCTCATGCTTATAATCCCAGCACTTTGGGAGGCCGAGGCA GGCAGATCACATGAGGTCAGGACCAGCCTGGCCAACATGGTTAAAGCTTGTCTTACTAAA AATACAAAAAAAAGTTAGCCAGGTATGGTGGCATGCACCTGTAGTCCCTGCTACTCAGGG AGGCTGAGGCAGGGGAATCACTTGAACCCAGGAGGTGGAGCGGTCCCTGCTACTCAGGGA GGCTGAGGCAGGGGAATCACTTGAACCCAGGAGGTGCAGCGGTCATGCGACTGCACTCCA GCCTGGGTGACAGAGGGAGATTCCATCTCAAAAAGAAAAAAAAAAGAAACAAAAGAAAAG AAAAGAAATATCCCTTGTTGAAGCCACTCAATCTGTGGTACTTTGTTATGGCAGCCCAAG CAGACTCGTACAGATCCATCATCAAAAATAAGCAAATCACAACGAAATAAAGAGCCACTA ATATAAACGGATGGATAATAGGTAGTTTATGTGATGGTCTTTGTTTCTGAAACAGAAGAA CACCTCACACTGATGAGGACCTCCTGGTTGCAGCTGAGGAACACTGCAGGCAGAGGAGAG TTCACTGGGGCAGCAATCTCCATCCAACCAACTGTTCTTCCCTCCTGGGAAAACAAACCA CAACCCATCATGTGTGCCAGGCAGGCAAAAACTTCCCTGGAAGCCTGGAAATAATCACAC CCTGAAATTGGGTTAACTAGGCTGCAATTTCAACAACACTCTTAGTCACACACACTGTTT CAATATTTTCTTCAATAAATTGGAGATAACAGAGTTTCAGCGAATATATGCCATTGATAT CTATTAATCAAACATTAAGTATTTGCTGGACACCAACTGTCATCCTGGCAGTAAAACAAA TCAATTCACTATAAGGATCTGTCTAGTCTTAGGCATTTTAGTTCAATTCTCAGCAAAAAC AAATAAACAAAACAAACAAACAAAACAGTAGGCAAGGAAAAGACTCTAGAAATGAATGAC TATCTCACTTCTGGTCAGCTCTTCAACCGGTATGGCCAGCAGTCCAAATTAGCACTCTGA CCCTACAGGTATCAGTCTTTGAAGAAATATTGATGAAGACACTTGACCTGTGATTCTCTG ACACTGAGGGTCAGAGGGGGAATAAGACACCATCACTGCAGAGATGACTTTCAGAAACTA GCTATTCATGCCTGAATACATTCATGCTCCTCAGTGTGGGTTCCTTGGACAGTAATTTTC AGTAATTCAGTCTGCTTATTCAAAATGTTCTCAACTGAGACATACTACATGTCAGAATAT GGACAGAGAGGAAGAAGATGCATTTACAACAAACCACCTTCTCCTCCAACACACTAATCC TGTAACTATTATGCACAATAAAAGTATGAGAATTACTGGTAAATATAAATGTAGTAGGAA TGAAAGAGGGTGTATCTGGTGAATGAGACAGAGAAGCTGGAGTCTCCAGGTATCCTCCTG ATGGTACTAGGTAGTTTGTTCAGGTTTGGATAAGATACAACCAGAGGTTACCAATGTGGG GAATGGGGACTTGTAAGAGTCAGTATGTCATCAGGGCCTTTTTTAGGAAAGTCTGAGTTT GGAGAGAGAGATTCAGTATCCTCAGGGAAGCTAAGTAAAATTAGAAAACAAAGGCAGAGG CAAAATTGCCCCAGAGTCAGAAGATGTACAAAACTCAGTGGGCATTTCTGTTGTGCAGAT GTAAGCCCTGACTACTGAATACTATATTTAAGAATTTCAGGCTAATTTAGGTCTCATTTC TTGCTAAGGTAAAGCTCTTTGTGTATTCATTACCTTTATTCAGATTGTTTCAATGGATGG TGAGGGATAATCTGTTTTTGCTTTGACCACAGCACAATAAAATTAGAAATAAACAACCAA AGAATAGCTCAAAATAAAATTACATATGTCTGTGTGTGTGGGTGTATATATATATGTATG TGTGTGTATATATATATATGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTA TATATATATATATATATATATATATATATTTTTTTTTTTTTTTTTTTTGAGACGGAGTTC CCAGGCTGGAGTGCAATGGCACGATCTCAGCTCACTGCAACCTCCCCCTCCCGGGTTCAA GCTATTCTCCTGCCTCAGCCTCCCAAGTAGCTGGGATTACAGGCATGCACCACCATGCCT GGCTAATTTTGTATTTTTAGTAGAGATGGGGTTTCTCCATGTTGGTCAGGCTGGTCTCGT ACTCCTGACCTCAGATGATCTGCCCACCTCAGCCTCCCAAAGTGCTGGGATTACAGGCGT GAGCCATTGGGCCAGGCCATGTCTATAATTTTGTAACAAATTGCTAATTAACAATTTTAT TGAAGAGGGTGTCTTAAAAGTCATAGACACAGAAATAATTATCAGTGAAAACACTGTATA ATAATATTTGTGAGATAGTTCTAAAGAAATGTTTATATATCACTCTAAACATATTTCCTA GAAAACATGAAATGTTAAAACTATAGAACTGAGCACTCACATCAAGAACCTGGAAAAAAG GAAAAGTAGCAACTACTTTAGTAATAAAGTTAAAGGAAATAATAACTATAAGATCAAGAT ATATAAATTAGAGAATTAGAAAATGAATCCAATGATAATATATTGACAACTGGAGTCTTT GAAAAGATCAATAAGATATCCAAAGTTTTCACAATATGGAACAAGAAAAAAAATAAATTG CAAACAAACAAAATACATTAAGGAGGAGAAGGACAATTATAGATTCAAGGGAGGTTAGTA GAATCATAGAGGAAAATATTGATCAAATACACACTCAACTGCCTAGACAAAATTGATGTA AATATATTAGACACTGTTTTGTGCAAATGGAAATAGAAACCTCAAAGGAGCACATGGCAT TAAATAGTTGAGCAATAAGACTAATGAGAAACATCTTCCATTCTCCCCCGAAGGCCCCTG ACCCAAATGACTTCTACCAAAATTTCAAGGAACAGAGAAAGTCAAATCCACTCAATCCAT TTTACAAGATGCTTATAAACATAATATCAAAACCATAATAGTTAGACTAAAAGAAAGGAA CTATAAGTCCATTTTATTTGTAGCTACACTTTTGCAAATATTAAATATAATATTTCTAAG TTATTTATCACATACAAGAGTTGTTAACTAAAATAGTCATAGGTATTGGATTTTATCTGC ACGTATTTAACAAAGCATATGATATTTTCTTCTTTAATCTATTCATGTGGTAAGTTACAC TTACAGATTGACTTAATTGCTGGGATGTATATTTATCAGAAAATATTTGTTAAGATCCGC AAGGAGACGTGTACACAAAAGTCTATGACTCTAATTTTTGCATGTGATATTGATAATCTG GAAGCCACACTGTCCATAACTGGAAAAATTGATAAAAGAAAATGGGATGAATGCATACGA TGAAAGAGTATGTAGCAGTATGAAGCATCCTGGATAGAAATTCAATACATAGCCTTGAGT GATAAAATAAAATAGAATAAAATGTATAGCATAATTTAATACATGTTAAAATACATACGC ATATGAATGATACTTCTTTATTAAAGGAGGCATATATAACCAATATAATAATGCATATAT TAAGTACCTTATAGAATACGTCTAATGGGAGGAAGGAAGGAAGTTGTTTCCAGTGAACAA TGAGAAATAAAATACACAAGGGAAAAATGAAATGGAAAGCCAGCATCTTTATATGAACTA ATGAGATGGTGTACTTTGAATTGAGGAGTCTGCAATTTCAAACCTATGCACTTGGGGAGC ACCAAATTTTCCAAATAAAAATAAAATAGGAAGAAATGTCATTTTAGACTATGACTCACT GCCTTTCCTCTATATATGGTAATTATCCCCACACCTTTAAAGATACATTTTTTAGGCACC TTGAATTTCTGTTGGTTCAATGGCAATGTTATATTTTTATGGAAACTGACAGTGAAATTC TAAATGTACATTTGAGTGCACAACTGTGATGGGTCAACTTGGATAAGTGCCAACATAGAG AGTCTATAGTAGCCAGTAATGCAAAGTGTTGCTGTGAGGGGTTTCAGAGATGTGATTAAC ATGTACAGTCAGTTGACTTAGATAAGGAGATTGTCTTCTATAATGTGAGTGGGCCTGATC CAATCATTTGAAAGGGCTTACAAGCAGAACTGAAGTTTCCCCAACAAAAAGGAAATTCTG CCTCTCAGTGGTTTGCTCCCACCTGAGACTTTCCAGGCTGTTGGCCTACCCTATGAATTT CAGACTCTTCCTGCCATACCCCACAAACGCATAAGTCAATTCTATGAAATAAATTTATGT GTGTATGTGCACATGTGTCTCTATGTATGTTTGCATCTATGCATCTGTGTGTTTGTGTAT GTGTGTGTGTGCACCAATCTCTTACTGATTCTGTTTCTCTGGTGGAATCCTGACTTATAA AAACCTCCAAACTTTAATTACCAAAAAGGCAACTATTAAAATTATCAACAAAATGATCAC TAATTTCAATATTAATGTCGAATTTGGTATGAAGCTGCACAAATCCCAAAAAAACAAATA TAGTCGACATTGAACAATGCAGAGGTTAGGAGCACTGGAGGCCCCACACAGCACACAGTC ATAAATCTGTGTATAATTTTTGACTCTTCCGGAGTTTAACTACAAATAGCCTACTGTTAA CCAGAATCCTTACCAATAATATAAACAGCTAATTAACACTTATTTTTTGTTATATGTATT ATATCTTGTATTTTTACAATAAAGTAAGCTAGAGCAAAGGAAATGAGATTAAGAAATTCA TAAGGAAGAGAAAATATATTTACTATTCAATTAGTAGAAGTGAATCATCATAAAGATCTT CACCCTCATTATCATCCTTACACTGAGTAGGCTGAGCAAGAGGAAAAGTAAGGGTTGGTC TTGCTGCCTCAGGGATAGCATAGGCAGGAAAGGTAGAGGAGGTAGAAGGGAGGTAAGAGA GTCAGGCACAGTTCCTATAATTTTACAAAAATATATTGTATTTTCTATCTGATTTTCTGC TTTTACATTTCTCTAAAAATGTTTCTATATGGTACCAATCCTTCTTCCATTGTTTGCTTT AGTTTCAGTGTCTATATCTTAGAAGGATCCATGTCATAAGAAGTCAAAAGCAGTCTTGAA TAATCAAAACCCTTCTGCCAGATTATCTAATATCAATTTGTCAATTTTTTTTTTTTGAGA CAGAGTCTTGCTCTGTCACTCAGTCTGGAGTGCAGTGGTATGATCCTGGCTCACTGCAAC CTCCTCCTCCCAGGTTCAAGTGATTCTCTTGCCTCAGCCTCCAAAGCAGCTGGAACTACA GGCATGTGCCACCACGCCCAACTAATTTTTGTATTTTTAGTAGAGACGGGGTTTTGCCAC GTTGGTTAGGCTGGTCTTGAACTCCTGGCTTCAAGCGATCCACCCACCTTGGCTTCCCAA AGTGCTGGGACTACAGGTGTGAGCCACTGTGCCCGGTCCTGGCACTGCTTTTTAAATTTC TTCTTCCTCATTGTCTGATACTGGTTCAGATGCACTCATCTCCGTCAAGTCTACCTCTGT TAATTCCTATGATGTGGTGTCTATTAGCTCTTGAATTTCTCTAAGATCCATATCTTGAAA GCCTTCCATCTACTTTTTTTTTCTGCCATATCCACAATCTCTCTAATAATTTCCTTGATT GATGCTGTTGTAAATCTCGTTACTCAGTTTCTCCAGCAGGAATTCATTGTGTAGGGCTTG ATGGCTTTTGCATCTTTTTCTGTAGCAACAGTGGCATCTCCAATGGGGTAATCCTTCCAG ACTTTTATGATGTTCTCTCTTTATTGGAGTTCTCTTCCATGACGTTGATAATCCTTCCCA AAGAGTATCATGTGTAATGAGCATTAAAATCTTTATGACCCCCTATCTAGAAGCTGAACT AGAGATATATTTGGGACTAGAAGACCACTTTGATACCTTCAGTGTTGAACTGTTGGGGTT CTGCCTGGCCAGGGGCATTGTCCAATATCAAAAGAACCTCAAAAGGCAATCCCTTACTGG CATGGTACTTCCGGACTTCAGGGAGAAAGCATCAGTGAAACTAACCCAGAAAAAGGATTT TTATTGTCCAGGCCTTCTTGTACAACCAAAAAGTCTGGCAGCTGGTTTATCTTTCCCCTT GAAGTCTCAAGGGGTGAGCAGCTTTACAGATAAGAGTAGTCCTAATCATAAACCCGACTG CATTTGCAGAAAACAGTAGAGTGAGCCTATGACTTTCTGACTTAAATTCTGGTGCTCCCT TTTCTTCTTTACTAATAAATGTCCTTTGCATTTTTTTTTTCCAGAATAAGGAACTTTTAT CGTTAAAAACCTGTTCAGGCAGATATCCTTTATCTTCAATGATTTTCTTAATGGCATCTG GGAACTTCTTTGCTGGCTCTTGGTCAGCAGAAGCTGCTTCCCCTGTTATCTTGACTTTTC TTTAAGCCAAACATTTTTCTAAAATTATCACGTTATCCTTTCCTGGCATTAAATTCCCCA GCTTTAGATCCTTCACTTCCTTTTGCTTTAAGTTGTCATATAATGGCTTCAATTTTTCAC AAATCTTATTAGTCTATAGGTATCCCTTTTTATAGCAATCCTGCACCCACATAAAAGCTG CATTTGGACACAAGATAAAAATGCATTTCGCAAACAGTGCAAGGTTTTTGCACCTGCTAG CATAGCAGCAGCAATGGCTTCATGAATTTCCTTTTCTCTTTTTTACAAAGGTCCTTACGT GGGATCCATTTATCTTGAAATGGCAGGTAACCACAGCTGCAGACCTCAATCCGTGGTGCC CATCAAGCACTGCAACTTTTTCTTATAATGTCATGACTTTTCTCTGCTTTTGGGAAGCAC TTCCAGCATCATTAGTCACACTTTGTATGGCTCCCATGGTGTTATTCAAGGTTACGATAT TGCACTAAACACAATGAAAAATACCTGAGAACTATAAGAGACCACTTTTACTGTGATAGT CAATTTGCTGGAAAGATAAACTACTCACGCAGAGATGATTGGCTTCACTAGGCGTTTTAA GCAGACACTCACAACGTTTTAAGCAGATACAACACTTGAGCTCACCACACTAGCAACAAG AGATGGCTACAAATTATTACAGTGGATGCACTACAATGAAGTTTATGCGGTTATGATTTA ATACTGCATCTTTATGTTTGTCTACATTTCTCTCTGCTGCAAATGGCGCCATATACAAGT CTGTGTTTGTGTGCATAAGTTTTCATAAAGTTTTACTTTTTATAATAGATTTCTGTATGT TTTGTGGTAGTAAATGACATAACAGATAAGTATCTACATATATTTTATGCATCCATGACA TACATAATATATTCTTCATTTTTAAGATATTTCTAGGCTATGCTGTTTGTCTATGAGTTT TTTTCAAATTGTCACAAATCTCCACAAAATTTTGCAATATGGTTATTGAAAAAAACTTGC ATATAAATGAACCTTCAAAGCTCAAAGCCATGTTGTTCAAGGGTCACCTATAGGCTCTTT TGATTGATTTCATTTCTACTACGAATCAAATATGTTTTGAATTTCTGACTTTGCTGTAGG AAGGCGATTTTATGTATGAGTCTGTACTCAGAGATTTACCTCATTTTATGAAAATTATCT CTTCATATTCTCAAAAGTTAGGTATTGACACCCATCTTCAGAGATGCAAGTATGTGCAGA GAGTCAGGAAAATTTCAGGTAGGCAATTGTTAAGCTTATGTGGGAACAATAATTTTTTAT TAACAGCAAAAATTTTCTTAATTTTTGTCTATTTGTGAACTGCTTGCTTTCACATTCAGT AATCAGCCAGTAACTCCTTCATTTTGGTATGCTCTGTTTTCAGATGTGTTGAAAGCCTTA GTTTTTCTTTTTCATTGTAATTTCAAAATATTTGTTCAACTCTCTCAGCAAAACAATTCT TCCTTTACTACCCCTTGGGGAGACTGGACCAAACTGTCACTAGTTCTTTCTTTGAAATGT CAATTTTGCTGTTTGAATAGTTAAGCCATCATGGAGGAGGTCAGAAAAAGAAAAGCATCC ACTAACTTTATTCTTTTGTCATTCTCTTCTGCCCCTCTTTCTGCTCCCGCTTATGGTGTA GTTTCTATGTCTGGGTGCATCTGTGTGGCTGGGAATTGGCTAGACTTTAGAACTGTTGAC TGTCCCTGCCTGGTGCCCTGGTGTCACCTGTATCATCTTTGCCCCTGGCCACGGAAGATG GAGCGCCTCTGTTTCTCCCAGTACTTCCAGTTCTTTATGAGCTTACCTTCTCCACTCGTT CCAGTTAAAAGTCAGTCTGATCGACTTTCCTTGGAGGTCACTCTCTGTACCTCTTTCTCC TTCAGCCACTTGAACCTTCTGTTCTTCTCTTTGACAGAGAAGAAAATGTGTTTACTATAA ATATTACACATTCGGAAACAAAATATTTTGAATACACATTCGTTTCTGAATGCACACATC TATCATCTCCCCTAAACAGATCTTGAGATGTAGGTAAGGGGAAACTAAAACTTAGATAAC AAATACAATAGTAACAGAAATAAAATATTTTCTTCACTGGATCATATAAAGGAAAATACA GACCTTGTTTGTTTTGTAGTCTTGAACAAATTACTTAACTGAGCATCATCAGTAAAATGG AAATGATATCCATCTTGCAGAATAATTTAATGATTATATATGTAAAGTGCCTGCTGCATG TTTAACCAATGGTAGCTTGTTAATACTAAAGTATTACTAACTTTCCTTCCAGAAAGGACT TAAGTACGTCATCACAATTTATTATCTCTTCTCTGTGATCTACAAACCAGAATCACAAGA TGGGCTGAGGATCTCACCTCTATCCTCCTTAAAATTACTTCCCTACCCATGCTGCATTAG TCTGTTTTCATGCCACTGATAAAGACATTCCTGAGGCTGAGCAATTTACAAAAGAAAGAG GTTTATTGGATTTACAGTTCCACATGTCTGGGGAGGCTTTATAATCATGGCAGAAGGCAA GGAGTAGCAAATCACATCTTACACAGATGGCAGCAGGAAAAAAAAAAGCTTGTGCAGAAA AACTCCCATTTTTTAAAACCATCAGATCTCATGAGACCCATTCATTATCACAAGAACAGC ATGGGAAAGACCCCACCCCCATGATTCAATCATCTCCCACCAGGTCCCTCCCACAACATG TGTGAATTATGGGAGCTACAAGATGAGATTTGAGTGGGGTCACAGAGCCAAACTATGTTG CATGGCTTCATGAAGCCTTAATATTAGGGCATCTTTTTTCCTTGCAAGTTGTTCAAGTCT CTTGACCCTGTAATATCAAAATGAAAACATCATTGCTGTCTTCCCCAGGAGTCTCATTCA ATTTGGACTTTCATATAAAATTGTCAATGTGTGAATACAAATTAGGCAACCCCCTGCCCC TTAGAGAAGAGAGAAATGTATTTTTGTCTATTCTTTACAAAGATTTTAAGCTGATTTAGC TGGAGAGGTCAATTTGTGACTGATTGTATTCAACATAGCCAGCAACTTATATATTTGGGA TGTATTTAGTTTGAGGATCTGCCTTTGATTTTTTTCATTGAATTGAAAGACACATATGTA GTTGAGCTTCTGCTGACTTTTTTTTTTCTTAACCCAACTAAGTGCTACCTAGATGGCAAA GAGATCCAGCAACAGAATTCAGAAGAAGAAATGAAGTAAAAACACAGAGCTAGACCCAGA ACCCATACTACGGACTTGACCTTCAGGCACCTGCTGCTACACAGAATGCATCACAATTAA TTGGAGGAATAGCAAGACAACCAATGAGCAGAGGGCTGGACCTCACTCATTCATAGAGGC CTTGGCCTTTTCAAAACCTGTCCCTCCTCCACAGCCTCTGAGATTGGTGGGATGGGAACC CAAGAAAGGAGAGGACTTGTTCAGAGCATGCCAAGCCCCTCCATTTTAAGCACTTCTCAC TAATTTCAAACATAGAAAATGAGAAGAGTTACAGAATCAGTACTAGATGGCAACAAGGTG GTTGGGACCCAGCCAAGAAGGGAGATTTGACACAGAAGACTTGAAAGCAGTGATTGAAAT AACAGTAAAATGTTGCATGTCTGTATCCCCAAAGTAGTTTAGATGCCACCATAAGCCAAT TGACTGTATGATCACTTCTATTTATTCTCATAAATACTACGTACCAATATGGATAGTACT TTCATGCAGGATCCAAAAATATTTAAAAACTACAATTATATTTACATAAAATAGGCATAA GTTAGGTTAGACTGAAATAGATCAATATTTTTAGACCAGTTACATTTAGATGGTAAAATA TTTATGTGATTTTTTGTCTTTTTCTCCATTGATCACTTATTCAATAAAGTGTTTGTGTAG TTTGTAAATTAAAATATAATTTTATAAACCATAAGGATGACTTAAAATTATTTATTCCTA TCTCTCACCTAAGTTTTCATCTAATTGACATAAAATCTCTATCCTTCCCTTCTCACTCAA ATTCCTTACCTTTGTTCTCTCTGCTTTTCCACTTGGCATCTCCCATTCAGCCTTCAACCC TAGCTTTTACCCTTGAAATTGTACACAGTCTATTCTTATGAAGATAAAAGTCTTACCCTC CTCAAACTGATCTCATGCACAACCATAAGAATGATCATCTTAAAACTAATATCTTATTAC ATCCACTCTTCCTTTCAAAAATCTGTCAATGGCTTAGCTTCCCATTGCCCATGTTACGAA GAACTCATTTTTGCATTTAAATTAAAGCCTTTCTTTCTCCCCTGCTCTGCTCTTAATCAT TCTTTCACTCCCATTTACTTTTATCTCTTTTCTGCCTGTCTCTCTAGCCTCACCTCTCAA CTCATCTTTTCTTCAAAATTTACACCCCAATGACACTAGTATGATTACAGCTCCCTACAA ACATAATCTGATTGTTTCTTCTTCATTTCTTTTAGGCTTGCAAAATATTTCCCCTCTTTC TGGGAAGGGCCTCACCCTTCTCTCGCCTCCAAGATTCCTGCATTCTTGTTGAGTATTGAG CTCATCCGGGAGGCCTGTCCTGAGACTCAGAGGATTGTTGAAGTGTTCTTTCTTTGTGCT CCCATTTCCTCATTAAAACTGTTATGGAATTGTCATTTTTTTGTTTGTTTACCTACGTCC ACCACTAAACAATGATAAGTTTGGGAGCAGAGATAACGTCTTGTTCCCTTTTGTATCTCC GGTGTTTAGACTATTGCCTGGCACGTAATATGATTTTAGTTTTTAAAATGAAAGAATTAA ATCATTAAACTACATTTATAGTATGCATTTATTCCAACTACTATAAATTTGGTTGAGCAC TATCATATAGCTCATAGATTGAATGCTTATCCACAAACGATGTCATGATAAATTTTATTA GATGCTTTGTTATGCAAAAAGGAAAACACACATTGATTATACCATTCTCTTAGGGGCCAC ATTAGAAATGATGTTGAGAGAGGAAATGACATGTGTCTGTTATGCTCCCATATATGGCCT GAGTTGGACACACTCACATGAGACACGATGCGTTGACCTGAACCAAGTACAGAAGACGGA TCATCTTTTGCCACCTCTCTCCCCTTTTCAGACAGTCCATTTCTGACATGGTTAGTTCTA CTGTCCCAGTTTACAGATTCCTCTCCCATTCTCTTGGAAATGACTTAATCACAAAAGAAA CTTAATAATGGCAACTTCTCAAGCCATGAAAAATGGCCCTCAGAATAGTTCACCTTTTTT TTTTATTATACTTTAAGTTTTAGGGTACATGTGCACAACGTGCAGGTTTGTTACATATGT ATACATGTGCCATGATGGTGTGCTGCACCCATTAACTCGTCATTTAGCATTAGGTATATC TCCTAATGCTATAAAAAAAAAAAAGAATTGTTCACCTTAGTCATTAAATAAGGGCATACT TATCCACCAACTCTCCTTTCTCTTTGGTCAAGGGTTTTTTTTTTTTTACTTCCTGGTTTG TCTCACCTCAGAATGCCTGAGTAGGTCCCTATAGGCACCTATGTGGGAGCAGCAGAGAAT TCCCAGGGCAAAAAGTAGGAAATACGTGATACAGCTGAGGCATAGTATGTGAGGTTGCAT TTGCATAGTGGCGGTCAGACCAAACATAGAATAACAAGGTGGACGAGCAAAGATGACCCA GGTACAAAAAGTGTCTAATGTAAGCAGTAATAATAGCAGCATTTCTGCTTTTCAGTGGGT AAATGAATGAGATGCTCAGCCTCCCCAGGGCAAGAGAGGGAAAAGGGGAGCATTGTAGAT GAAATAATCATTGAGTTGTACAAAATACCAGCTTCAGCCTCAATGAATTACTATAGTACA GAATGAAATGCTTTGGCAAAGTCAATGAATAAAAAGGAGAGATTATTCTATTTCCCTTCC TTGGCATCTTACTTACAGGAATAATTTCATTCTGACTCTGTGTAATGAGGTTTATGACCC TGGGCAAGTGAGTGACTTGGCTGGGCTCCAATTTCTTCATTTATAAAATGAGATGATCAC TGAGTTCCATTAGAGCTCTAACATTAAGATTTTATGAATCTATGTGCACACAATATACTA GAGTTTAAACTCTGAATTTCCAGAACTATGCAAGTCTGTATTATTGCACATGACTGTTCT AATGGATTCTCTACATTTTCCCAGTGCTTGGAGATCCCACTGCATTTTGGTTTTTCTTCT TCTGTGTGCTGATTATAATGATATATTAATTGCTCTGGAATTTCCTATTTATAGAAAGAA AAGCCTCTGAAGAATGCATTCAGGAAAAGTGGTTTATATGGATTATATGAAAATCTTAGC ATGTATGCCTTTGGAAATACTCACCTATAACTGCCCATTTAATGACTAATTTCCAGAGCT TTCTCATCAGAATTACAAATAACACTGAATGCTTTCCCGTGGCCTCCAGGTTGCATATGG TCTGAGAGACTAACTCTGCTTCCTCTCCTCCTTCCACTCTCCCTCCCTTCCCTAATTCTA GCCACACTGGCTCATTTTCTGCACCTTGATCACATTTAGGCTTTCTGCCTTAGTCTTAAA ATCATGTTCTTCCTGCTTGGACTCTTCTGTTTGTCTGTATCATCCCTTCTTCTCCTGATT CATCTCTCAGAGCAAACATCGCATCCCTGGAGATGCCTGCCTGAGACATCCAGTCTAAAT TTGCTCCAGCCACACTCTATTGCTTCATTTTATGTTCCTTTTCAGAATTATTATTGTATT TTTTAAGTTTATGTGTAGTAATATATTTATTTCTCTGATCCTCATAAATGGTAAATTTCA TTCTACCTTGAATCCTGAGTTCCCAGGAGAATATCTACAACATAATAAATGTAGGATTTA TTTGTTGGCGAAATTAAATAACCACTGAGTGGTACATGGGTCAACATTCAAACGAAAAAG AACAAATACAGAGCTTGAAACTAGAATTCTTGTTTCAATTCTGTCTCTCATGTGATAGTA TATAACCTGGGAATAATAAGTACTGTTTACTTCACAGGTTGTTGCTTATGTTTAGACTTT ATATATAGTTACCTGAAATCTCTACCTTCGAGAATATTCGAGAAGAATCCATTCATTCTG TCATGTTTTATGTTACAGTGTGAATCTTCATCACTATTAGCTGTGAAAACTTGTGCAAGT TACTTAGCTCCCCTCAATTTCCTTACCTACGAAACTATGGTAATGACAGTACCTACCTCA GCTGTTAGATTCAGAGTACTTCGGAAATACCTGACACATTGTAACCACTTTATAAGTGTG TTACTTGTTTTCATTGTGTGTCAGCTTCTTTTCCTATTAATAACTCTGATTTAAGCTTAA TCATCCTCTGAGGCAGCACTCAAATGCCAGGTCTTCTGTAAAGCCTTTACTTATATCCCT GTTTGCCTATTCCTTCCCTACTACATTACACAGAACATTAGTGATTTCTTACATTTCATT CCCTAGTCAACACTTTAAAACTTGCTTGCTTATTTATTTTCTTTCATAATATAAACTAAA GGATCATCATGAATTTCTCTAGTACATTCATTCAATTCTAGTACATTTCTAGGCCATTAT TTTGTGGATAAATGTATATTTCCGCAAATAGATGGAATTCTCACTGTCTCAATTTATTTA AAATATTCATTTAAAACATTTGAATAAAACAATTTTCTTTTGTAAGCATCATTGGTCATG AATAGAAGGAAAATCAATTTTTAAAAATAGATTTGAGAAAATATTTTTAAGTCAATTGCC TTTTGATTTCAAAATACTTCAAAAGGTTCATTCTTCTTGGACTATAATTTATTTACTAAA ATTCAAAATGAGATATCTGAGAAAAAAGTTATTGCATTAAATAAGAAAAAGCCTGTATTT TCAGTCCCAAATGGATGTATATCTGCTATTTTATCAGAAGATTTGCAATTTTAAAATAAA TTCAAAAGCTTCCACCATATTTCTTGGTAAAACTAAAATAGTTATATCCAACAATGAAGT GCAGAGGCAAATACTATACACAAATCATAATTTTCATGTATTTTTTCAGTTATAGTCCAC AGTGCTAATTATTTTATTTTTATACTTGTGCTTTCTTTCTTTCTTTTCTTATTTATTTGT TTATTTTTTTGTTTTTTTAGACAGCTTCACTCTGTCACCTGGGCTTCAGTGCAGTGGTGT GAGCTTGGCTCACTGAAATTTCAAACTCCAAGGCTCAAGCAATCCTCCTGCCTCAGCCTC CAGAGTAGCTGGGACCACAGACATGTGACACCACAACTGGCTAATTTTTATATTTTTTTG TAGAGATGGGGTGTTTCCATGTTACCCAGGCTTGTCTCGAACTCTTATGCTCAAGCACTT CACCCACCTCAGCCTCCCAAAGTGCTGGGATTACAGACGTGAGCCACTGGGCTCAGCAAA TTTTTCCTAAATGTATTTAGAAGTTGAACAAGCATAATTATTTTATTTATTTCTAGTCAG TCATCTTTTCTATTTCCTGTAATAACTGATCAAAAATCCTCTATCCATCACCCCAAGACC CCAGGTATACACATGCAGGATCTTCATCTGCAGATAAAATCTGATATGAGCTTTTTGATT TCTTTCTGCCTCCAGTCATAAAACTCTTGGTACTCATTTACATTTACTTCCTTTCATTCT GTGTAAAATGAAAGCATCCAGTTTCAAGCTCAATCCCTTCCTGTGCTTGACTGATTGGAG TAAAAAGACTATTAGATATACTTCATTTAGATACACAGTACCTGAACATAAATCCCTGAA CCTAATTTCGCTCACTTAGTAATCACAGGCCAATGGGTTATTGAATTAGCAATGTACACA GGAAAGTCCTAAATAAATTGATTGTTTTCTTCTGCTTTCTTTTCCCTCTTAAATTCAAAA CTCTCTAAGACCTCAATTGTCTTTTTCTCTTAGTATCTGTTCAATGATGGATGATTCCTT TTTCTTCTGTTCCTCTCTAATATATTCAATCTCTCATTTTTAAATTTTCATCTTGTCTGT ATTCAAATTATGCCCCTACCAAAAACACACACATAAAGAAGGAAACTATACCAAATTGCT TAAGATCAGTGATGAAGAGAAAACCTTAAAGCAAACAGAAAAAAACTGAATTATATGCAA AGGAACAAAAACACACATGAGAGTAGTTTCTTGTAGAAATAAGACCAACCAGAAGATGGT GAAGCAAAACCTTAAAAGGAATGAAAGAAAAAATTTCAACCGACATAATAATGTACATTT GACCAAATTAAATTCAAAACCAAAGGCAAAGACAAAAACTTTCTAAGAACAAGAAAATGG AAATAATTCAGCAGTAGCAGACCTGCACTGTAAGATATATTTAAAAAAAAAGAAAAGTCC TTCAGGAAGAAGAAAAGTGACAGCCCCTGGAAATCCAAATTTACAACAAGAAAAGAAGAG CACTAGAAATTGTCACTATGTGAATAAATAGAATTTTTTCTCACTAATTAAATCTCTTTA AATAATAATTGATTGTTTAAGGCAAAAATTGTAACAATGAATTGTGAGTTTTGTAACATT CATCAGAAGTAAAATGTATAAGCAAAAAAAATCACAAAGAAGAAAGAGATAAGCAGGAGT ATATTCTTGTAAAGTTCACAGGGAAGTGGTATCATATCACTTTATGGTAGACTGGAGTAA GTTAAAGATGTATGCTGTAAACCCTAAAGAAAAAGAAATCACTAATATAATACAATAAAG AGTTATGGTTCAAAAGCCAATGGAGCACGTATAATAGAACCATAAAAATACTCAGTGAGT TCAAAAGATGTCAGCAAAGAGGGAAAATTGAACAATGAACACTGGAGAAAAATAGGAAAC AAATAGTAGAATGACATACTTAAGTTCAAGTATATCAAAATTCACATGACATATAAATGC TCTACTGACTCCAATGAAAATACAGAGATTTTCAGATTGGAGAAGAAAGCAGGACCCAAC TATTAACTGCCAACAAGAATCCAAAATCCATTTTAAATATAAAGACACAGAAAGTTAAAA ATAAAAGATGGAAAAAGATGCAGTATGTTAACACTAATCCAAAATAATCTAGAGTGGCTG TAGCAATATCACACAACATATATTACCCAGCAAAGAGTATGAACAGAGATAAAGAAGGTC ATTTCAAAACGATAAAGGGGTCAACGCATCAAGACAACATAAAGTCCCGTGTTTATGAAC CTAATAACAGAGCTTCAACATTCATGAAGCAAAAACTGATAGACCTGAAAGAGGAAATAG AAGAATCCACAATTATAGTTGGAAACTTCAACAACCCTTTCTCTATAATTGATAGGACAA ATAGACAGAAAATCATTAAGAACATAGAAATATTGGCCAATATTATCAACCTACTTGACC ACCCCGCAGTTATGCAGACTACCCACCTTTTCAAGTATATTGGAACATTTAAGACAGTGT TTCATGAAAGAACTGCCAACAAATCTAAAAGAAAGAAACATTTTCCAGACTAACTTTCTC TAAGAAAAAAAATAATTTATTCCTGGCCACTTATTGCACAATATTTTCAAACGTTTGCCT TAGATCATAACAGTTTTTCATGTCAACACTTACAAGTTCGTATCAAAATTTCTCTGCTCT TTTCACCATTGCCCTCTGTCCAAATTGCTGTCCACCTCCTTTGTGCTACCTTGGAACTTT GCCCATAACCGTGTCATAAAACTTTGCCTGTTGGAATCAGCTAGACTGTGAATTACCCTC AAGCCTCATTTCTTTTTTATGGTAAAACCTATGCTGACTTCTCAGTCTTCATCTTACTCT AACTCTCAGCAGCATTTGACAAGATTGATTCTCCTTGTTTTTTGAAACGCTTTCTGTCCA GCTAGCTGTCATGACATCATCACATGCTCTCAACTTTTCTACAACTGCTCTGGTCTCTGC TTATCCGCCTCTCTCTGGTCCAGGTGAACCTCCCCTGCTGGATTCATGCTGCTGGGTATG AGAGTCCTGCATGAGGTATGAGAGTCCTTTAAGTATGTTCTATTTTATTCACTCTCATCT TTCTTTAATATCTCTTCCAGTTCCGTGGCTTTACAAACCATTTGCATGCTGACAGACCCC AAATTTCTTTTTTTTTCCTTTCAAGAGTGAGACTCCCTTCACTAGAAAGAAAAATAAAAA TTTTTAAAAACACCAAATGTTTATCTTCAGCACACACATCTCCCTGAACCCCAGCCTCTG ACATCTATCTGCCTACTTGCCATTTCCACTGGCATGTCCCAGTCCTAGCCTGTCCCAACA TGAGCCCTGAGTCTTCTCTTCTCTCAAACCTTCTCCTAGCACAGGCTTTCACATTTCATT AAAGGTAATTCCATTCCTGCAGTTGTTCAGGCTAAAATCCCTGGAGTCATTTCCAGCTCT GTTCATTTGTCTCCTGTAATATAGCCAGTCCCTTAGCAAGTTCTCTGACCCCTGTCTTCA GAATCTATGCAGAGCTCACACCTACTCCACTGTCACCACCCTGGCCCAAACCACCGTTCT CTCTTACCCGGATTGTCATAGAGGCTTCTCAACCTGTCTTCTAACTGATGCCCTCACTCT CTTCAGCCTGTGCTCAACATGGCAGGTCATGTGAGCCTGTGATTCAAAATCTGCTCATGG CTTCACATTACACTCGGATAAAAGGTAAGCCTATTGCAAAAGTCTAGGGTCTTTCAGGGT TTCACACCCCACCTCCAGCTCATTACCTTTACTCTTCCTCTGTGTATCGCTCTGATACAC TAGAGCTTCCTCACTGCTGTTCAAATATCCCAGGCAAAATCCTTTATACTTGCTATTCCT TCTGCCTAGATACAAGGGTGTCCAATCTTTTGGCTTCCCTGGGCTACAGTGGAAGAAAAA GAATGTCTTGGGCCACACACAGAATACACTAATGATAGCTGATGAGCTAAAAAGAAAAAA AAATCACAAAAAAAATCTCGTAATGTTTTAAGAAAGTTTATGGATTTGAGTTGGGCCATA TTCAAAGCTGTCCTGGGAAACATACAGCCCATGGACCTTGGGTTGGACAAGCTTGGCCTA GAACATTCTACTCCCAATTATCCGCATGGTTCATTATCTCACTGCTGCCAAATGTTGACT CAAATGTTATCTTCCTAGAACAGCCCTCCCTGATGGTCTCTAGGGAGATGAAACTCCCCT GACCACCTTTACCTCCTTCCTACTTTATGTCTTTCTGTAAAACATATCACCATGTGGCCC ATTATATATTTTAGTTATTTAATTAATGTATTGGTTCTCTCTCCTCCCTAGAACATAAGC TCCAGAGGGCGGGGGTTTTTGTCTGTTTTACTTACCACACTTTTCCTAGCACTTAAAACA GTGCTTGATACATAGAAGGCACTCAAGAAGTATTTGTAGAAATTGGAAAGGTATAAAACA AGTGAATGAATTAGTGCATAAATTATTTCTCTGGACTTAACCTCATTTCTACAATAAATG AAAATCAGAGTAAGCATTTATTGACATGGAAAGGAAAGCCTGGGCAAAGAAGACAAAGTT AAAATGAGAAAAAGGACAATAAAGATGAATGAAAGACAAAAGTAATGTACAATTATTCTC TTTTCTAGTCTTCATGTCTGATTTAGGAAAAGAAGAATTGTTTTGGACAGCTTATGCTAT TCTTTATTTCAGCATAAGCACTGAATTTTTATTTTCATTTTTCAAGCTCCCTGTGCCCTA CTTTCTTTACGTTTTTAAATAACAATGATCCACCCCCTCAGATGGGTTCTGTCAGCTATC TTGACCTTTGTCTCAATCTTATTTTTCTGTTTGACCTACCCACTATGCTGAGAAGACATT TATATTTAAGTCTCTGTTAAACAAGTCCAAAAGAATACACCAGTTTCTTTCAGAAGAGAC TGTATTTTGTCCTCAAGGAATAAAATTGTTTAAATGTTACTGGAGACATAATTGCTGTTA TGCTTCCATTTTTAAAATTTTTACATTTATATGTAACCCTACTTTAGTCAAGTTATGTCA CGAACATTTCCAAATATTTCCCCTCACTTCACAAAAGTCATTTTCTCAGGATTTTAATAG AATAAAACTGAAGGTGTGTCCATCTGTACCTATTCATTGTAGTTTGTACAGACTCTCATA TTATTAAGACAAAAGCCACTCTATTTTTTAGAGGTTTATTATATACAAACTTGTTGCTTT TTCTGTAACTAGAGGGACACTGTAATTGCCATATATAGCTGTTTCTCATTGTTACAATTT GAAGACACTGTTTAAGCATTAACACAAATTGCTAGTCAATCAATCAGCAATCATATCTTG AGCAGAGAACATGCCCTCACAGATCTAATGATTCAGCAGTGTGATCAGCTATACAACCAG GATATAAGATTTAAATTCATAGAACATTGGTGTTAGACACAAGAATGCTACTGTAACTCA TATACAAGTGAGCATGAAATGGATCTTCCCTTTTGATCTCCTTTGAGACAGCATGTAGCA ACCTTCTGCCCAGAGTCTGGAGTCAGGTATAAAACTAATCAAAGCAGGAAACAAACAAAA GGAAAAAATTAATTGAGTGTGTTTTCTGCTAACACAGCAATTGAAAGACAACTCATGCTC ATTGAAAGCCAGAGTAGAGTGTGTAAACCATTCTTTATTTCCATTATGTACAAAGTTATA CAGGCAATGCAACCTATCATATAAATTTGTACAAGTTTTAGCAAAGCCAAAAACAGCTTT GAAGAGGCCAGGTTTAAGTTCCCTAAAGGGGAAGGATGGAGACATTAGTGTGATGAGTGA TGAGAAATGACCATCCTGCTGTTGAAGAAAGGAATTCACCTGAGGGACGGACCTCCTGAC AGTCACTAGTTGTGGTCTCTGAGAAGTTTTGCTTCCTGATAGTCCTGAATTGTGGTCTCT AGGGCTTGGAAACCTCCAGAATCACATGATTCTGCAGGGTTTGGAACTCTGCCTATTTGT TTCTGGTTTGGATTTCATCTAACAATTTGAGGGGAGCAACTGGATGACCTGGATATGGCC ACCCCAGAAATAAGCACCTGGTGTTACTACTAAAGTAGGTTCCCATCTTTCTAGTCATTG TGAACCTTGCACTGCAGGATATGCTCTGTTTCCTCTCAGACATTCCCTGCCAGTCTCCTG TCTACTCTGCATCTCAGGAAACATTTTCCATGCTCCCTTATCCTCTGACTTTGGGATGGG TTCAGTCCATTGGAAGCAGAGCTTGAGGAGGGGAGAAGCCTAATAATGGAGTGTCACTCC CACCCCTGCCCCTCTCCTTCCTGGCATCTCCTCAGTCATGTCAGTTCTCACCGGATAGGA CCTTTCTTTATGTCACAACTGCCAACAGAAAGTCACCTGGATGTTTTCCGCTCTTGCCAT CTTCCCAGTTCCTGTTAACATTATCTCTACTTGTCCCTGCAGTCATCGGGTAACAGTGGC TTCAGATTGTGGCTAAATTTGGGGTCCTTTTATTGTCTGTCTTTGGCTTGTCAGGTCTTC CATCACCTATGTATTAAGTTATTTTATTTGGAAGGAGCTAATGTCATTTCTGTTTTGCTG CTAGATATTGATTGATTCACAGGTTGTCAATAGAGTTGCCTCCTCAACCCCCTTCTTAGT GGGTTTTGCTAAACTATAGAACAGTGTAATATTAAATAGACCACTAACTGTTTTCTCAAT CCAGCAAATAATAGCCCTGATGAGCCATAGTCTATGGCTTTCATAGCGTTTTTCTCTCTG TAATTTTGTCTTTTAAAATATTTTCTTAGGTATTCTTGGCTGGGCGCAGTGGCTCAAGTC TGTAATCCCGGCACTTTGGGAGACCGAGGCAGGCAGATCCCTTGAGATCAAGAGTTCATG ACCAGCCTGGCCAACATGGTGAAACCCTGTCTCTACTAAAATTTTTTTTAAAAAGAAAAA TTAGCCAGGCGTGGTGGCCTGTGCCTGTAGTCCTAGCTACTTGGGAGCCTGAGACAGAAG AACTGCTTGAATCCGGGAGAGAGAGGTTGCAGCGAGCTGAGATGGCCTGGATGACAGAGC GAGACTCTGTCTCAAAATAAATAAATAAATAAATAAATAAATAAATAAATAAATAAATAA ATAAAATAAAATATGTTCTTAGGGATTATTTAAGATGGTTGGTTGAGACAGGATTTGAAA GGAAACGTTAGCCTGAAGTGACGTTTACCTCGGACTTTTAGTCTAATTAGTCAGGCTATT GTCCTTAATGGTCATTTTAAATTATAATTAATATTATTAGGACTTCTACTCTAAAACAAC CTTTCTTACACTTAGCACAATTTCTTTTTTTTTCTGTTTCATAAAAAAAAAAATAGCAAC CACTCTAAGAGAATTGCCTCCCTTTCCTACTCCCCTCCCCACTCCAGTCCCCCTGCTGCC CCGCCAACACACACACAAACACACACACACACACACACACACACACACACACAGACAGTG TTCTGTCCCTGAAGCCTCGGATTCCGTGACATCGCTCTCCTTGTCTAAGAGGATCGCTTT CTTACCTGTGTTCCAGACCTGATGGGCTCCCAATTTCTGTCTGCTCAACCTCTCTCTCTC TTCCTAGGGTTCTTTACCTTTTATTTTAGATCATTCCCCTCAGAAAAGTTAGAATCTTAT ACTTTAAAAAAAAAAAAGAGTTTACCTTCTGCTATGCGTTCCCTCTCACTCTCTTTCCTT TTATACCCAAACTTTATGGAAGATTATTTAAAGTCATACCTTCTAATTTGTCACCTCTTG CTCCATTATCATCAATTTATGTTTCCTCTTTCCACTAGTCTCTACTAACTTCTTTAACTT CTTAAAACTCATTGGTAAATCTTATTTAGTCTGTGCAGCATTTACTACCTTAGACCACTC CACTATGCTTTCTTGATTATTAACTTGTTATATGACAGCCTCCTCTCCTGAGTCTCAATT ACATTCTCATTTATTTTCTTTGTCTCTTCTTTGCCCTGTGTGTATTGCAACTCCTGGTTT CTTCCTTTGTCATTCTCAAAGATCCATTCATCTACTTTTCTGGGCAAAATGGTGCGTTCC AAGTGGCAATTTTTAGAGTTACACTACTTGGTTCAGCCAGCATTTTCCTAGTGGATATAA AGAGGAAAATATATACATACGTACATACATATACATACATACATATATATACACACACAC ATACATACATATATATGTATGTATGTATGTACACTATTTGGTTAAGCCAGCATTTCCCTA GTGGATATAAAGAGGAAAATACATACATACATACACAGACATACATACGTACATATGTAC GTATGTGTGTGTGTGTGTATATATATGTATGTATGTATGTACATATATATTTTCCTCTTT ATAGCCACTAGGGAAATGCTGGCTTAATCAAATAGTGTAACTAAAAATATATATGTATTT ATGTGTATATGTATATACACGTATGTATGTATGTATGTATATATTTGAGAATATCTCCAC TTGTAGAAATGCTATAAAGAATGTGTTCTCTAGTCAGATTAGTTCAGATAGCAATTGACT AGAGAAAAGGTAACAGCAAGAGCATACTACTTGCCATGCACTGTTTCTAAAAATGTTTTC ATATCACTTTTTAAAATGAGCATGTATTAACATCTTTTGTCACTATTGTTGGGCAGAAGC CAGGTTGGAAAATTGAAGGTGATAATACTGTCTCAGGAGGACTCCTGTATACATTTGCAC TAAGATACATTAATTTATTTGAACTCTTTAGTAACCTCTTTAGTGCAGGCAGAAATAACA CACTATCTGTTGTGTTGGAATATAAGATGGGCAAGTTTTGGTAAAAAGGAAATGACAGGA CTCAGATAATGTAGTACCATGAAAAAACACCAACCTGGGATAACGTAGGTATTCTGAGAA TTTTTGGACAATTTCAGGACAATTTCAGTGAGATAATAGACATATTAGATAAATGAAAGA CTGAATGAGACAATTGTTCTGGGCCACTGATAAGAAAAAAGTGAGAAAAATTGTTAAAAA ACAGTTTTATACGATAATGAAAGTAAACTCTTCAAAATATGCACAATTTCTTTTCACCAA TTTCATCAGAATACCAAGATAAAAATCTCTGAAAATATAAAAAAAACCCTTTTACTTAAA ACGATTGTATTTACTTTTCATAAACGATAAGGCTATAACTAATCCAATACGCAAAGAAAA CAACCTAGTATCTGAAGATAACTGAATTTGTGCTATTATATCTACAGAACATTTATTTTT CTTGAAGTTTTTATTTGCAATAGGAAAATGAGGAAACAAAATTGAATTTCAGTAAACACA CAAAGAAAAATTTTGGTTATAAACATTTTGCGTATCGTCCAGCTGCAGTGAATACATACT TTTTAAAGTCATGGAAAATTTTGTTTCTTTTTTTTTTTTTTTTTTTAATTTCAGACAGGG TCTCACTCTGTGGCCCAGGTTGGATTGCAATTGCATAAACACAGCTTACTGCAACCTTGA CCTACCAGGCTCAAACAATCCTCCCATCTCAGCCTTCAAAGCAGATTGAACTACAGATAA GCGCCACCACTTAGGGCTAATTTTTTAATTTTTTGGAGAGATGAAGCCTCACTGTCTTGC CCAGGCTGGTCTCAAACTCCTGAGCTCAAGTAATCCTCCTGCCTCAGCCTTCCAAAGTGC TGGGATTACAGGTGTGAACCACTGTGCCCAGCTGGAAAATTGTTTTTGAGCAGTGTTTGT GGTGTTTTAGAAAAAAAAAATCCAAGCTGTGGTACATTTTTTTTTAATGAAGTTTTATAA AGCTGGGACAAATATATCAAAACTTCAAATAAATTTAATACATTGACACATAAATATAAC ACACGAATTTGGAGTTAAATAGCATCTTTTAGTTTCATTACTCCAGAAAGACACAGTATT GGGATACATCTGAAAATAAAAAATGACCCATTTCAAATGATGTTATTACAAAAATAAATC ATATTATATACACTTTTTTATCATTAAAAATCATATCACAGATAATTGAAGGCAATAGCA TGTTAAGTGAAATTAGTTTCTTTATCATAGCATATACATATGATTTTTTTCACATATATG GCTGACTATGAGGTTCAAAAAATACCTACTTAGCTACATAAACATTTTACGTTTTAAGCG CACATATTAAAAGTTCACATTACACTGTAACATCTAAAGAAACAACATTCACTCAGCCAG CAAGACTCAAAGAACAAAGCACTAAAATGTGTTTTCATTTAAAAATCCTGTATCAAAAAG GACTTACTAGCTTCTCAAGATTTGTCTGTACTGTAATCAGATTGCAAATTACTTCTCTTA GATCGCTCTGGGAGCATCGCTCTATGCAGCAGATGCCCCTGTTCCCAGCTCCACTCCTCA GTGTCACAGCTTGTGTTAAACTATAACATCCTTTTTGTCACTTAGCAAACTATTCTTCCT CACAAGCACAGAACTTGGGATTCCCAGGCCCCACTCCAAACTTGAGAAAAACATCTTAGA GTATGTTACACTTCCCTGCTAACCCTTCCTCATTTTCCAGCCCCCAAATACACATATGCG AAGAGGAAATGAAGAGACACCTGTCAGATTGATATGGTTTGGATACTTGACCCCTCCAAA TCTCATGCTGAAGTTGGATCCACACTGTTGGAGGTGGGGCCTGCTGGGGTGTGTTTGGGT CATGAAGAGAGATCCCTCAGGAGTGTCTTGGTGTGATCCTTGCAGTGAGGAGTGAGTTTT TCTCTATTATTTCCTGCAAGAGCTAGTTGTTAAAAAGAGCATGATGCTTCCCTCCCCTCT CTCTTCCTTCCACTCTTGCCGTGTGATAACTGCACACGCCAGCCCTCCTTTTCCTTCTGT TATGAGTAGAAGCAGTTTGAAGCCCTCCCCAGAAGCAAATGCCAGCACCATGCTTTTTGT ACAGCCTGCAGAACCGTGAGCAGGGACCTTGAACTAGAAATACCATTTGACCCAGCAATC CCATTACTGGGTGTACACCCAAAGGATTATAAATCATGCTGCTATAAAGACACATGCATA CGTATGTTTATTGCGGCACTATTCACAATAGCAAAGACTTGGAACCAACTCAAATGTCCA ACAATGATAGACTGGATTAAGAAAATGTGACACATATACACCATGGAATACTATGCAGCC ATAGAAAACGAAGAGTTCACGTCCTTTGTAGGGACTTGGATGAAGCTGGAAACCATCATT CTCAGCAATCTATAGCAAAGACAAAGACCCAGACACCGCATGTCCTCACTCATAGGTGGG AACTGAACAATGAGAACACATGGACACAGGAAGGGGAACATCACACACCAGGGACTGTTG TGGGGTGGGGGGAGTGTGGAGGGATAACATTAGGAGGTATACCTAATGTAAGTGACGAGT TAATGGTTGCAGCACACCAACATGGCACATGTATACATAAGTAACTACCCTGCACGTTGT GCACATGTACCCTAAAACTTAAAGTATAATAAAAAATAAAAAAGTAAAATAAATAAAATA AAATAAAATAACAAAAAAACAAATAAACCTCTTTTCTTTATACTTTATACCTAGCCTCAG ATATTTCTTCATAACAACAGAGACAGACTAAGACACAGATTGTTGGGAGAATTCTACAAT GACAGAAGTGCATGGGTCTCAGTGGGTTGTGGGAGGCACGGATATCAGCCTACCCAGTGT TCATTCTTTCCTCCCTCCTGCCTAAAGAGCCCTCCCTTTGTTTGGGGATACAACATGCTC AGTAAAGATTTACAACTTACAGGCTCCCTTGCAATTGGAGATGACTGATTGCTGGCTAAG ATTATGTACATAATGGCATTGAGTGGGGCTGCTGGGAAATCTCTTTTAAAGGGACAAGAT TCAGCTCACATGTGGCCTTGCCCTTTTCCATTCCCTGCCGGAAACTCAGTGCAACACTGG AGGTGAATCAGAGGTGACAAGCATAAGCACACAATTTACATGTGGAAGACACGGAATGAA GACTAAATTCCAAGGAGGGTCTTGGGGCCACCACACCAGTCCTGGGCAGCCTCCCTCTGG ACCACTTGCCATGTGAAAAAAATAAATAAATAAATCCATCTTTTGTACAAGGAATTTTTA AATTTGGTTTTCTATTACTTGTAGCTAAACGCAATCCCAACTACAGTGATTACGGTTTAT CCTAGTTAACATTATAATACTTCAAGTGTTTATAGTATTCGAGTCACAGGAGCGTGACCT TTTCTGATTTATTATAGAATGAAGATGCTGCACTTTATTACTCTTTTAAATCCTTGTTTT TCGGATAAGCTTAAAAGCAGCACAATCATCAGAGCTATAGCCATTGGAAGTCAGAAAAAA AATCAGATAAAATTGAAAATTTTATTTTTATTGGGTACTGTTTACCGCTTTATCTACTTA TTTATTTATTTATTTATTTATTTATTTATTTATTTATTATTTTGAGACAGAGTTTCACGC TGTTACCCAGGCTGGAGTGCAATGGTACGATCTCGGCTCACTGCAACCTTCGCCTCCCAG GATCAAGTGATTCTTACGCCTCAGCCTCCCGAGTAGGTGGGATTACAGGTGGGTGCCATC ATGCCCAGCTAATTTTTGTATTTTTAGTAGAGATGGGATTTCACTGTGCTGGCCAGGCTA GTCTTGAACTCCTGACTTCAGGTGATCCACCCACCTCAGCCTCCCAAAATGCTGAGATTA TAAGCATGAGCCACCGTGCCTAACCTGATTAGCACTTTAAGTGTTAATGGTTCATAAATT TCATGTACATTAATTAAATGTATACATATTAATTATATTGATTTAATTACAACTATATTA TATATAGTTATATATACATTTAATTATATTAAAAAACATACATTAAAGTGGTTAACTATA AAATAACAAAGTATGTGAAATGTGAACTATTCAAAATAAATATAGTTTAAATGAAAGAAT GTCTGCTACATTTAAATGAAAGACTCTTCCAACTTAAAACACTGTGAAGCTGGTAATTCA ATAAATGTTGCTTCAATGTGGAATTTTCAAAGGACATGAACAGCTATGCTGTTGATAAGC AGTACATGGTTACATGGTTTTGTAAAAACAAACTGCTCATGTAGAATCCATGAAACAGAA ATCTCAACTGTGTATTCAATCTTATGATAGATTAGATAGAGATAGATGGGTAGGTAGGTA GATAGACTGGATAGACAGATAGATAGATAGATGATAGATAGATAGACAGATAGATAGATA GATAGATAGATAGATAGATAGATAGATAGACAGACAGATAGATGATAGACAAATAGACTG ACTATCAGAGATAGGTAGATAGATAGTTAGATAGATACATAGGTAAAAATACACTGGTCA TTGTGGTACAAACTCTGTAATGCAGACTTCATGACTCTCAGTGAAGTGTCCCCAGGATCA TTTCCCAGTTCTTTTCTTCCCACTTAGCCATCTCCAAACTCTATAGTCAGATCAACATAC AGTTAGAAATAAAATACTACAGACATGAGCGTCATTCTTAGTTATCCCAGCCCCCAAGGA AGAGCAGAAAGGGGCTGACGCTCTGCTCCCACTTTGCACCCTGAGTACAGAATGTCTGTG AAAGTAGATAAAAAATGGAAGATGTAGTATTTGTTTACATGCATTAATTAAGCTAAACTT ATCATTTAGATTATATAAAATGCTAAACTATTGCTTTACTTTGATAAACATGTATTTGCA GATGGCTTAAGGTTGCCAGAAATTTTGTAACTTATATGCTGTTGATTTGGCTCTTAGATT CACCTGGAATTCTCCATTTTCCTTGCAAAAATACTAACATGGGCCTAGTCACTTGATGCC CAGACCCATCTGATCTCATCTGTTTATATTTTCTACTCCTGATATTCATTATACACTTTA ATTAGACAATCAAAACCTGAATTAAAAGTAGGTGTATGAAGAAAATAGCAATATAAAGAT AAGTTACAAACTTAGAAACTTAGTAAAGACAAGTGGCTTCTATTCTCCCCTATCACCCAA ACCATCTGTGGAATTAGGTGTGGAACAAATAACTGTAAAATATGAATTAAAAATGTAAAC GCATCGAAGAATTCTTAATTTGCTTTACAAGTGTTTATAATCTATCATTTAACATTAAAC ATTTTTAATGGAAATCTTTGGCATTGCATTATGAATATGGTTTATGCAAGAGAGACCAAG GGATATCCATCTGTGGGCATCTGTTCAAATAAAAAGCTTTGATCGTACATCAACAGATGG AGAAAAGAAGGTATACTGATAGATTTTAAGTTACAGAAAGATGCCAAGCATCTGGTCAGA ACACTATTTTATCACCTCTAAACTGTGAATTTGGTGTAATTATACCAATCCTATAGAAGA GGAAAGGCTCAGAAATGGAAGTAACTTGGCCAAGATCATATTATTTAAGGAGGAGAGCTT AGATTCAAAGAAAATCTGCTCAAATCTAAAACTATTGTAAGTTGATACTGAATTTCTTCC TCAGATGACAAAACTATGATATATTAATATTATTGAGAGCGGTTAGATTGGAAACAAACA TTCACAAGTAGAAAACATATATTCCCTCAAGCAAACCACTGATTGATTTTAAATTTTATT TGCTATGAATCCAATAGAAAAAATAGCATTGCAGGATTAATATTTGTTGACAACAAAATT ATAATGATTTCTACTAAAGCAGAATACATTTACTTGGATCCTGGGTAATAAGATATTTAC TAAATTTATGTAGTTGCTAAGTAACAGATGAAATGCAACCCACCTCAATGATTCTAAGCA ATGGATAAATGCCACCAGTTTTTAAATAGAATGTGTTCTGTATCATAGGATCCTCAGCCC TTGGTTCTTGAGTTGCACTATGATTGGAAACATTAACTTTTCAACTATGAAATTATCCTC CTTCCTCCAGCCTTCTTATTTGATACGACATTTTCTTTATCTTAGTCTCTTCTTCTTGTA TGAAAACTTAGAAATGTACACAGAAAAAAAAAGAAGGCTCCTTAGCTGATGGGAATTTTG GCTTAACCCAGGAAAAATTTTAAGACCAAATGACAAATAAAATATTTTATATAACTGATT TTATTTGTAGTTCAAAAATATATTTTAAAAGTTAGATTTTAAGACAGTCCTTTCTGTCTT CAAGCTGGGCATTTTTGTTTATTTCTGTTAAATTTATATTCTTAGTGTTTAAAAGATTCA TACCATAAAATTCAGATAAATTTTTTAACGTTAGAAAGAGTCCAGCACTGTAATTAGCAT AATGCCTTTTTAATTAAACAGTCCCTCCACCAAATTCTATGGCTATGTTGAAAGGTACTG CTTCCTTGAAAAATAAATATCACAAAGGTATGCCTCACCTTAGAAAAACATTATTTTGAA AAACCACCACTTAAGGAAAAATGATAGTATATACACATATAGTCTGGTATAAGTCCAAAA AGCCTCTTACGTATGCAGAAATCCGTAGCTCAGGACAAATCAACAGCAGCAAATATCTTT AATGTGTTACGAGCCTCGCAGACCTTAGTTAAACAGATGAGCAATTAATATATTTACAGT AAGGAACAAAGACCTCTGCATTAGTAAAGAACCCAGCTGCTTTTAACTTGTATGTCTGGC TTTTAAAGATGCTTATTTGAGATAAGATTTAGTCTCTAATAAAATACATCTTTGCGTTGT TTCTTAATTTTATTTGAAAGAAAAATACTCCTATTTTCTCATGTTTAAATCTATGGCCTC ATCCTAGGTTATGTTTTTTCTTTTTATCTAGAGTAAACCATGTTTGTATTCTAGGAACAC ATTTTCATTTTTATAATAAAACAGAAAGGACTTAAAAGTTCAATTGCTTTAAAAAGTCAC CTTAGCGTCTAGCTTTGCCGGACACGTCTAAAACCTGAAGAATGTCTATTTTACTGTTAG TCTCATTGTCTTGAATTTGCTTGTGCACATTTTTTGAGGGTAGTTAATTCCAGCCAGAAG GGGAGGATTTTTCACAGTGCCGAAGTTATTCTGCAATGGTAAATTATAAACACAGCTTAT TCATTCCTTTGATCTTTTTGTCCATTCTATTCTCCCTGGCTAAAATGCTTCATGATTTAT CTTAAAAAAAGGTTTTACAAAAAATGCTTATAACCGGTGTTCTATGAGTCTGTAGAGTTT CATTTTTAACTCTTGGAAGCCCTCATACATTATGGATATTTACATCAGGTCATATTTTCT GACCAAGATCTTAAGTTTCTTTGGGTGCAAATCTTCACATCCTCCATGTGCTTTCTGTAC AGTGCACAGTAGATAGTTGGTCAAAATATGCATAATTGCCATCATACACAGGGCAAAGAA TTCGTTGTTCATGGAGCAGATTAATATTCATGCATTGGAAAACTAAGTTCTACACCAAAC TATTTCAAAGCAAGAAAGGCCGGGCGCAGTGGCTTATGCTTGTAATCTTAGCACTTTGGG AGGCGGAGACAGGCGGATCACCTGAGGCCAAGAGATCGAGACTAGCCTAGTCAACATGGC AAAAACCCATATCTATTTAAAATACAAAAAATCAGCCTGGCATGGTGGTATGCGCCTGTA ATCCCAGCTACCCAGGAGGCTGAGGCAGGAGAATCACTTGAACCTAGGAGGTGGAGGCTG CAGTGAGCCGATATTGCACCACTGCACTCCAGCCTGGGCAACAAGAGCAAAACTCTGTCT CAAAAAATCAATAAAATAAAATAAAATAAAATAAGAATGTCAAAGCAAGAAATATAATAC TAATCCCAAGGAGCAAATTTGCTTCCAAAAATCTCTAGTAAGTCCCCAAGAAGGAATAAC TTTACTGTATTTAAAATTGCCTTGTTTTTTTTTTTTGCTTGAAAGACAACTCGATTAAAT TATTGTGAAACTACATATTTTCATTATGTATAACTGGTTTTAGAAACCTCATACCTAAAA ATACCTAAGAAGCAGGCTTCTCTTACATAATATTTGGTTGAAACCAACATAGATCTGTTT AAGCAATGTAATGTTTATTGTCCCAATGCCTGAATAACAGATTTTATTTTTTATACTGCA GAAATTTAGAGAGGATTAGTTTTCCTTATCACTTTCTAGAGCTATCTAAAAGTATGAAAT CTCTGAGTATTATGAAATATTCAGAGAATTGGGGAAATATTTACATCACTTGAATATAAC ACGTAAAGTTCAAATTTTTGTTTGAAGGAACAAAAATCATTCTTTTTGTTATTCTTGGCT ATTGTCAAGGTATTTTTGTTCCAAGGAAGAAGTTTCAGTAAAGTTATACATGTCTGAAAA ATTAACATGGGAGTATAGATTGTTAACAGAAAGAGACTAGATGAGTTACATTTATTCTCA TAAAAGTTGTTTCATAAAATGTACTTTGTTATTCCCCAGGTCCTGATAACATATTACATA ACATACTGTTAATCACAGTTCTAGCTTATGAGTCACATCATTTATTTTAATATTTCAGGT GCTCTAATTTTTTTCCTATAAATTAGCCTTTCCCCAAATCTTTTCATAGTGTATTATCTT GGTATTCTTTTTCTCACAACCAGTTACAGACTTGAAGTCCCTGTGGGAGAAGAATCTAGG GAAAATTGTTATTTTTTTCTCTTTTCTATATCTTCATTTCTAGCATAAAAAAAAAAACAA ACAAAAGCTCTCATCTTGAGAAAATATAAAATAATTTACATCTTTTTAGTGTCACCCAGG AATTCAGGCCCCTAATCAGGGTGCCTGCCTCTGGAAAGAAAACGCTGTTGAAAGTTAGAA GCGTGCATTCAGCTCTAGAGGGCGCGCAAGAGTCTCCACCTGACTTCACGTCCTCACCCC TCTGAGCCAGACAGTGGCTGCTGATTTTGGCCAAAACCAAAGACAGCATTGGTGCTGGGG CATACACCTTTGGCATGGGTGAGGTATGAAAAAGATACTAAAAGCAATAACCCCCAGTTG GATGTCTCTTTTGAGATGTTCCTTTAAGGATCACTGCTTTGGGGATCCACCTCTTTCAGG TCGGCCTCTTTTGTAATCCTTCCTTCCTTCTTTGGATTGGTACTTTTGGATGCCTACTGT TTCTTTGCCTGTTGGGTCTGATACAGGATGCCTTCCTGCCTGACATAATACACACCATTC ATCTGCTTAGGACACCAGTGGGAACTGGGGTGAGGGCCAGGGAGAGAAAACATGGAGCAG GAAGCAGAAGGTTGTCTCTAGTCCAGACAGTGGAAATTCCTCAGATTCACAGGTAGTCTA CTCCATTCCCTTAAGTAGATTTCATGAAAATTGGAGGCCAGAGCCCCAGACAGCAAAATG AGGTTAATTTTATCCTAGAGTTTCTCCTCTGTCCAATTCACTCAAAAACTTGAAGAGAAA TCAGCCGGGTGATGAGGGCTAGACAGTCAGGATTCTAGCCTTCTGTCTTTAGAGACTCCA CTTCAGAAAAAGAGGAAGACCAAGAATTTGGGTCATTTACATATGAGTGACTAGAGAAAA GAGAAAAAGAGCCTCTGAGGAGTAGAGAAGGGCAGAGGCCTCAGGCTTGGTCTAGACACC CCCAGGGGAAGTAAAGGCAAAGCTGTAACATCAAATCCACCCATGATCCTATCCAGAGAG AGATTCAGTGTACAAAAATAGCTGAGATACCACTGGATTCAATCTCAGAAAGAACAGGCA GAGATCTTTAAAGTCCCTTTTATCAGGGTTAATGTGGGTGATCTGAGTCCTAAATGACAT TCTACCAGTTAGTAACTAGGTGATGTTTGCTGAGAGAGATGACACATTGGCACCCTCTCA TTCATGCCATTCATAGGCAGTACCACCCTTAGACCTGGGCAAGTGGGGTCCTTACTCCCA CTCTGGGGTGCCTTCCTCAAAATTTACCAAGATCCCTGTAGTGTGTAGGACAAGCTGGGG CCTGAAGTATTGTCATGGTGTGGTGCCACAGGCCTGGACCACTTGGCCCTGGTCCCCATT TATCCCTTTTGGGGCAGTCTCCAACTCTGTCCCATTAACGTACCCCATAACTAGGGTCAA GCAGATGACCCAAGGAGGAGCTGTAGTCCTCACAGCTTTCAGGTTATTCCAGGATCCTGT GGCCAGTACCCAGTTCAAGAAAGAGCTTGGTAAATAGATGACTCCCTCTGGCTGCTGCAG TATTTCTTCCAGAAGCTGGTTGAGATTATGCTGCCAAAATGGTGCTGACACACTAATTTG GATTGACTTTCACTCATGGAGAAAGCAGAAGACATTCAAGGCTATGGGCTACAAAGGAAC ACACTTGGGCTTGAGCCATGTTTGTGAGACAGTTCATCGGCTTTCCCTCATCCATCACTG CCTCTGGTCTATCCCAAAGTAACAAGTAGCAACAGGCTTCCCTTACTCCAAGTTCCCCAT GCCATGGGTGGCCCCAAGGGTTATCAACTCACTCCCTGTAGGCTTTACATCATACAGCAG GCAGTTCTCAAGTGGGCCTCTTGTTTTCAAGGGATTTTGAGACCACTGCTCCACATGAAC AAAGGGCAGGCAATTCTGATCAACGTCCACTCTTGCCTCCAATGGATATGATAATGTTAT GGTATCTCTGATCATTTTTAAGGCATGTCAAGTTAGGAGCTGACAGTTCTGTGAAAATGG ATCAACTCTGCTTTGCCCATGGGCCCCTCAGTTACCCTGTCGACTTGTGTTGGTGGGAAG ACTACAGGGTCAACATGGTAGGATCCCGTGCTAGGAATACGGTGGTTGTGACCTTAAGCT TTCAAGGAAGATGAGGCAAAACCACATGTTTTCCTGTGCTTAGACTATGACATTCTGAGA GTAAATTTAACATGACAAGAAAACAAATCAACTTTCACATAATTCTGAATACCCTGCGTA AGACTTGCATCTGGAGTCATCATCAACAAAGCTCAGTAATAACCTTATAGTGTTATAAGT ATCCATGCAACCAGCATTAAATAAAATAAAGAACAGCAGGAAACTGCAAAGGCAAGAATG TCTGTATTATTTCAATACGAACAGGTTCTGAAGAGCCATGACATTTTGAATAATAACAAT GTTGCTCCCTTTTTATTTTGATGGACACATGACATTAGCCAGGAAGGGTACACTTGACAA TGAAGAACATGAAGAGATAGTTTCTAGACCGAACCAGGAAATGATAATGCCTGAATATCA CAGAGAATTCTCATGCATGGATCAGACAATAAATAAATACATAAATACCTCTTTGTTACT CATTATTCTAAATCCCAACCAAAATAGATAAGTTACTATACCTCACACGGTCCCACGAAT TTTGTTTATGACAACAAAAGCCACACCAAAAAAAAAAAAAATTGTGCAGGGTCTCACCCA CACCAGCAGCAGCCTTGTCAACATTCTGGGACTTGGCAGCCTGTTTGGCCCTGGCGGTGT CAGCACAGCAGGAACTCTGTCACTCACAAAGTGGAACTGATCTCACCTTGCAAGAAGCAG CAAGTTTGTCCCCATTTCACGGGGTGATGTCTCTTTGTAGGTGCCAACTGCACTACCAGC AGCTGAGGGGTGGCTTGGGTTAGGCGAGAGTGTATTTGGAGCAAGCACTTGAGGAAAGTG AGAGAATGTTTTAATGCTTAATCTCTATCACAATTCCCACTACTAGCACCAAAAATATAC CAAAAGACCAGAGTACTAAGGATTGCAAGCAACCTCAAGACAAGTTCCAAGCCTTTCCCA CTTTAAACCAGATTGTAACTGCTAAGCATTCTTTTTCTAGATATTCTAGTCTCTACTGTT AGTAGGATTAATACAAACATTTATTCTACGCAGTGAGATGCTAAATGAATCCTTCTTGCC TGATACTCAGGAATTCTTACCACGAAGAATCATTCACCAAAGCTTATGTTACACAAAATA TAGTCTAAAGAAGTATTAAAAACTTCTTTCTTTGTTCTTTTGTTTTTTAGAGTCAGGGTC TCACTATGTTGCCCAGGCTAGAGCCCAGTGGTGCGATCATGGCTTACTGCAGGCTCAACC TCCTGGGCTCCAGCGATCCTCCCACCTTAGCCTCCTGAGTAGCTGGAACCACAGGTATGC ACCACCATGCCCCACTAATTATTTGCTATGTTTGTTTGTTTGTTTTTGTAGAGACAGTGT CTCACTATGTTGCTTAGACTGGTCTCAAACCCCCTGACCTCAAGTCATCCTCCTGAATTG GCCTCTCAAAGCACTGGGATTACTGGCTTGAGACACTGTGCCTGGCTAAGTGCCCCATAT TCTAAAGAGAGCTCCCTTAAATCTGCACTAAATATATTAAGAGCTTACTTAGGGAGGAAG AAACAAGCCATGTTAAATTTGGTATCCAAGCAATTTGAAAGAAAGCTGAGACATTGAGAG AAGGGGAGAAGTTACTACGACTTCTCAGAGAAGACACATTTTCTTACCCTCCAAATAGGA AAAGAAAGGAGAGGTGCTCTTGCTTCTCTCTCTGAAGCCAAGTAAGTGTGGTTTCAAGAA AATTCCGCATAAATTTTAAAGATGCCTTTCAGAAGGGTGTCCTGGTGTCTAACTTCTCTT TATGGACATCACTCTTACTGATGTGGCACTGAAAAGAGACAGCAGAATAAGATGAGGAGG CAGTCTTGGAGCCATCTGTATCCCCACAAGCTGGTGGACAGAGATGTAACAAGTGTATCA GGAGTGAAGGCTGACAGTAGAAATAGACAAGCTCCAGCCATCTTGCAGGTTTCCAAGAGG CGAAAGATGGAGAATGGGAAAGTATTGGAATAAAAAGTCAAGTTAGAGTTGAATCTTTCA CATCAAAGAAAAGTGCAATATGCCAGGGAGTGAGGAGCTTGAAGAACTTTGCATAGTACC CCACAAATGAGCCAGCATTTGGATGTTTACTGCAGAGAAAGAATTGACAGTGGTTAGTAA GCCGGACAAGAAGCAACAGCACAGCCATCAAGGTGAGTACTCTGATAGGGCTGGGTTCAA TAAAGCCTTGCTTGTCTCCTCCTCCTTTTCTCCTAACCCCAATACATTGGAGAAATGTGG GTGGAAGAGGGAGGACAAAGAGGAAGTTTCTTAGGAATAGAAAGCTTGACGAGGCCCATC TCCTCCAAATGGGAGGACATTAGAATCAAGTTTCAGAGCGCCATTTTCAACTGCACTCAA TTTTGTTCATGGAGCTAAAAGCTTTCAAAGTCTTTCCAACATGTCATTCAGGGGCAGGAA AGAGATTCAAGAGAGTCTGATGGAAAGCAATCACTGGAGGGAAAAAATAAAAACACTCCA TATTTATATCACTTGAATTTAGAGTGCTAAAGAAACTGATGACAAACAGACTCAAGTTGT CTCAAACCTGAGTGACACCCTGCCAAGTTGTGGTACCTCCCTGCTTGATTAGTGAGTTGT CTGTTTCTACACCTAACTGCAAAGCTTCCCTTTCCAGTTTTCTTTCTGGCACGCACTCTG GGGAGAGCTTGATGGAAAATAGGTCCTTGGAGGGTTGATTTTCTACACTCATGTACACTC ATGAGATACATTTTCTGTTTTCATTATCGGGACTGATCTTAGAGAGGAGCTTTTGTTAAA AAGCCTCATTCTTGAAGGTTGTTCACTATTCTTGGCAAAATTTGACATTTCACCCCAATT TTGGCCCCCATATCCCAAGAGGTTCTTGGGTTTTCTTCTGCAGAAGTGCAACTTGGATAA AGCATTTGAGTAGTTAGGCATCCAAGGTGGCCTGATAGAAAACACCCACAGGTTCCTGGT GTTCTACCAATTTGAGCTAATGTAATTAGTTGAAGCCTAAAGTTTTGAAAGAGGTATTTG TGGGTTTCTTTACATTTATTTATTATAGACCAGTGTCAATAACATTAAGATAAATATTAT CCCATCTAGCTTTATGTCTGAATACAGTGATTAAAGGATAATTTTCAGGATGTTGCACTA TATTCTTGAATATCAGTTCTTAAATATCAATAGAGATCGTCATAAAATCATTACAGTGAT GATGCACAAGGCAAAGTGGAGTTGAGGTTTATAAAGTCTCTCACTGAATTTTTCTGGGTT AGTGTATAAATATATTCTTCAACATTTTTATTTAAAATTAACCCAAAGAGCAAGAGAAAA AAAGGAGAAATTTAGATAATTGCCAAGATAATTTATGATTGTCTTCATTCCTCCTGGCTC TAATTATTTATGTCAATGTGTCATGAATTACACAGAGTAACTTTCAGTAGTGTTAGTGCT CATGGGACAAGCATTCCACTCTCCTCTAATTTTTTGTATAATTATTATTTCTTGTTGAAT TTTTGAAAAATAACACCACTGGGTTTCATTATTTGTGTATCTTTTTGGAGTCAGACTTCA GTGTACTAGTCATTGTGAAAATTCAATAAATGCTTTTTGATTGAGTATCTCAAAAAAGAA AACATTCTAGGTATTGTACTTGGGTTTGAATGGGATTAAGCTCCTAGCTGACACTTATTT GCTAGGACATTTCCCCCATGTCACATAATCTCTCTGGGATCCAGATTTTTCTATTGTAGA GTCAAGAGAAAGATTCAAAAATTTATCTTGGATGTCTGATATTCGAATTATTTGCTTTAC TCAGTTTTGCTTTTTAACAACCAAATAAATATTTGATCATTGTATGAATTTTTTTAGTAG AAAATTCCACAATTTGTTATGGAAAATTCTGCCTTTGTACAATCCATAATTCATATTGAA TAAAAAAACAAATCATTTTCCTATGAGCATTTTAAAAATTATAAGATCCTATTTTATTTT CTAAACTAGCTTTAATTTTTAACCATATATTTGGGGAGAGACAAGAAATGATAATATGTA GCCACTATTGTTTTTTGCTTGACAGCTACAATATATTCCACTTCTTTTCCTGTTGCTATT AGTTTGCTTGATGCCATTTGCTTGATGCTAGTACATTATTTCTTCTAGCCAACTTAACCT TGATGCTAACCTCGGGAGGCTGAGGCAGGAGAATGGCGTGAACCCGGGAGGCGGAGCTTG CAGTGAGCAGAGATTGCGCCACTGCACTCCAGCCTGGGGGACAGAGAGAGACTCCGTCTC AAAAAGAAAACAACAACAAAATAATATAATAATAATAACAAAACATTTAAACGTCTCACT TTTGTTTATGAACCAACATAAACATATTATTTGTCTTCGTAAATCTTTCTCCCTGCAGAA AATCTAACATCTGAAAAGATTAAGGAACCCTAGAAACTATAGTAGAATAACATATTGTCC ACTTTAAAATAGTACCTTGGAGTTAAACCATAATTTTAGCCATAGAAAGTGGTGGGGAGT TCTAACTGTGAATAACGCTTGAAGATCTAAACCCTACTTTCTTTCTTTTTTTTTTTTTGG AGACAGAGTCTCTCTCTGTCTCCCAGGCTGGAGTGCAATGGCGCAATCTCGGCTCACTGA AACCTCTGCCTCCTGGATCTAACCGTACTTTCTAAGATCACTGGCATTATCTTCATAAGA AAAAAATATATTCTTATGACACTTAAAATTATGCATTTGATATTCTCCCATAAAACCTAA GTTGTTTAATGCTTAGAATAAAGATAGTGAGGAATTAGTTTCACTTTAAATAACTGTTGC ATGCAGTACTGACCTGTTAATCTGGTCACTGAAAGCCACAAGTCTGAGCTATTAACAATT AACTAAGGTAAGCTATAATTTGACGTGTGATAAGAATGACCTTGTTTAATAATACAGTTC ACAGGTGAGCAGTAAAGTTGAAGTCCCTCAAGGCTTAGAATAAGTTCTAAATAATCCCTA ATACATATTTGCACACACAAAATTACGATATTCACCAAAGTTATAATATTGACAATAAAA TGTATTATTCCCTAACAGCATCAGTCATAAGGAAGTTTATTTTGCATGCTTGGATTCCAT AAAATAATATCACCCAATTTACTTCCTTATATGGACTAAAACAAGCCTTTGTGATTTCAG GAACATGAATAAATAAATTATATCTGAAATATTTTACATCTCAACAGTTAGTTGTTTTGG GGGTTCCCCAGTAAGTATTCAATTAAGCGTTTCAAACCATCCCAAACATCTGTTTTTACT ACCATTGAAGTACAGTGGGAAAATCATAAAAATTGCAGCATTTGTTCAGTGGGCAAAACT AAATTGTGGACTCTAATGCTTTCTTCTCTTTTCTTATTGATCTGACTTGAACAATCATTC AGATTTTAATCAAGCAGATATTCTGGCATGTAGTGAAGATTTTTCACTGCAGAAAATAAA AATGAAAAAAAAAAGTATTTGCAGCTCGAGAAACAAAACGTGAGCAGTTAGTCTTCCACT GGGCAATGAGCAAGTAGGCAAGGGCCCTAACTCAAGATGACTTATCTAAGCACCAGGAGC TCTATGTACTATGCGTATTAAGGATTTATGGGGTTCAAGAGAAGACAGTTAACTGAAGAC TATTCCTACTTCCCAAAGAAGTATTGAAAACGTTGGCTTAAAAAAACTTTCTGTATTGCA AGATTTTTCAAAGTACTTAATATGCTTCGGGAGCTTTGTTTATCTCCAAATGGAGAATCA AGCAGAATCCTAAAATTACTTTCAATGGAACTATTTTTTGGTCAAGTTACTATTAATATC TTGTGGAACACTACCAGCCTGCAAACACAGTCTGGAGAATGATGAGCTGTATCTTTATGT TTGAGAGTAATCAATACTTATGTGGTAATTAAATCCTTGAGACTATAAGAGATTGCTCAT GGACAAATGACCAACAAGAACAGAACCTTGCAAAAGAACACCGCAATTTGAATAGGATTA AATTCCTAGCTGACACTTATTGGCTAGGATATTTACCCCATGTCGCATGATGACTCCTGC ATGGTAGGAGTGGTTATGAGCACTTAGTTACAGGACAGGCAGGGTATTGTATTATGAGTT TATTATACATGCCCTAGACTCATAGAATTTTTAAATTAGAAGAATAGAGATCACATAATT CAACTATCTCATTTCATAGCTGGGGCAATTAAGGACTGAGGAATTAGATGATTTATTTAA ATGTACACAGCTTGTTTCACGGTTGCTCGTCAAACTCAAAAGAGCGAATACGTTACCCTA AAGAAACTCATTCTGAACAAAAGCAAAAATGCCTTCTGGTCACAAGACACTAATGATAAA AATAATTTCTTAATACAGATGTTGAAGGAATCCACTGGGGCCCATTCCTTCCTTCATGTA ATTTCTCATGATGAGGAAGGAATTTTTTGAGTTGACAAAGTAAACTAAACCTTCCTTGGA AACAACCACACAAGAGTGCTCATTACTGTAATAGACAGAGGAAGGAAAAAAAAAATCTCT GTGGTTTCTAAGTCTTATGCACCCTTTCATTATTTTGCTTGGGAATGTTTTATACAGACA AGCATAGAGTAATTTATTATTTTTTCTTTACTCCTTAACAATCCCGGTAATTTTATAAAG CAGGGATGTTTCTCCTTTCTAATAAATGAGTCTGTGTTTTGACATAAAATGATTTGAAAT GGTATAATCCCACTGCCTGCATAATTTCTTATTTATTTATTTTGAGATGAAGTCTTGTTC TTCTCCCCCAGGCTGGAGTGCAGTGGCGCTATCTTGGCTCACTGCAACCTCCACCTCCCA GGTTCAAGCGATTCTCCTGTCTCAGTCTCCCGAGTAGCTGGGATTACAAGTGTTCACCAC CACGCTCTGTCTAATTTTTGTATTTTTAGTAGAAATGGGGTTTCACCATGTTAGCCAGAC TGGTCTCGAACTCCTGACCTCAAGTGATCCGCCCACCTCAGCCTCCCAAAGTGCTGGGAT TACAGGTGTGAGCCGCCAAGCCTCAATTTTATTTTTATTTTAAAAAAATAACAACAGCAA AAAAACAACTGGCAACATAATTACCACACACTTAAAAACAACTGCAATTGTGGTGTAAGG AACTGTTGGAAATCTTGTTTCTGGTTCTCATGCTTAACAGTGTTTGCTCATAAAAAACAG GTCACTGAACCTTCAATTGCTTCACAACTGTACCTTTGGTCTGTTCTTATTTTCTGTCTA ATTAAATGTAAACATTATTTCAAATTATAAACCAATGGGACTAGGTGTCATTTTTCCACC CTTCTCTACATCTTCTTTATTTCCTTGAACAGGTGCCATAATAGACACTCAATATAAATG TCTATAAAATGGAATGAACAATAATATATCCCTCATAGTCTTATCTAGAGGCTTAAGTGA TATCGTCTATGTGAACATTCTTTGCAAAGAGTGAAGCACTAGTTATTATTATGTGAGTCT GAATTACTACTATTGTTACCATTATTATAAGACACTTTTCTAGATATTGTGATTGATATT AATAAGAATCAGAACGTATACAAAGCAATAGGACAACAATTTTTACCATATATTAATTCT TCAAAACTGCTTGTTGAATCATGTATAAAACCAATATGGTACAAATGCAAATCAGTGGAA TATAGGCACAGAAAAAAGAACAGGTCAGAGTCTCACGAAATTAATGTGAGAAGTGAATAT GAACCTAATCTGAAACAAAGTGGAAAGCGAGAAACGCAGAATCATAATTTGGTAGAGAAG ATAAAATAAGGAAGATAACACTGTAAAACCCAAAATGGCAGGAGTAGTTCTGAGCAGGAA ATTGTAATTCTTGTATGAGCAAAGAATTAAGATGTTATAAGGATGGGTATTTGTTTGTTA TTAGAATGAAGCTAGAATTTTTTCTGGATGTAAAGAAAAAAGAAGTAAGGCTATCCAGGA ACTGAAAATGGCATCGACGAAGAGGCAGTTCTCTTCCATACAACGATCTCCATGAGACAA TCTTTGCTTCACTTTAAAGATACCTTCTCTTTAATTCTCTATTTGAATCTCTCCAGAACT CCAGAATGAGACATCTAATTATCCATTTAGCATCCATACATGGATGACCAGTATAAACCT CAAAATTAGTATGTCTGAGAATGAACTCTTGCTTCTCTACACCAAAAACCTTGGCCCCCT GAGTCTTCTTCATCTCAGTAAATGGCACTACCATTCACTTGTTCATTTAGGCTGACATCC TTGGAATCCTTTTTTAAGTCCTTTGTTTTGCTCATACTCCAAATCCAAATAATCACAAAT TCTATCAGCTTTCCCATCAAGATAAATTGTGAATCCATAGATTCTTCACTTCGCTGCAAT TGTAGTCAAATGCATAGAGTGCAGTATCCTCTTAAATGGTCTCCGTGATCTGTCTCTTAT CCCACTACTATCCAGAAATCAAAACACAGACTAAGTGATTCTTTTAAAATGTAAAATATC TAATGTCATTCTCCCACTCAAAGTCCTGCAATCAAATGTAGAATAAAGTCCAAATTTCTT ACCTAAAGAACCACATGAACCTGGCCTTGACTTCCTCTCTTACCTTGCTTTCTCTATGAC TATTCATCCCTTAGCTCCTCAATATCTCAGTCTACAGAATAGACTAAGAATAGTCCTTAG TCTATTCTATAATTAGGCTGATGTTGACTTGATTCTGCAGAAGATGCAATATCATCCCTC ATCTCCTGCTCCGAGCCAAGGGCAATTACAGAGGTTATGTGGCTGAGTTTTAACGATGAT GATCTATTAAGCTCACACAACTTCATATTTCTCCATAGTTACACAAGACACTTTATCTAG TTGCTCCTTATATGTGAAGTTATGTACTGTATTCATCTTATAAAAATAGAATGAACGAGC TGCTGATCATGAGTTCCAGGGAAGAGTGTTTGAGTTGGGATCCCTCAGGCTGCTGGCAGC CCCAAACCATGCTTCCCGAGGTTAGTTTTCAGTTAGTAAACACAAAATATAGATTTGAAG AAATTATCTGGATAATTCAAGCAAAAAACATTGCTTTGACTTGAATTGCCTGATTAATTG CAAGTTAATCATCTCTTCACTATTGAATTCCTTCCTAGCAAGTCAATTGTCCACGCAATA GAGACAGAGCATGGTGGTGACTTAAATTACTCAAATAACTGCATGCTTGCTCGACCCCAC CTTGTCAACAAGACCTGGCTGTGATGTAAAGAACTTCAGTGGAGAAATGACAGGAATTGA TAGTTAAGGCCAGCACTATCAATAGGAGGTGAAACAGACACAGGGAAAAAAATCAGAAAG AGACTTTGTTAGGAAGCACAAACTGCTCCAGCCAGCAGGCCTGCCTGACTGCAGTGTCAC TTGATGAATAAGCAAATGGGGCTAAGGGGATGAGAGTACTTTACTGATGAGAAATTCTCA CAAATAGGAGATATTTAGGGACTAAAATGCGCCTCCCAGGCTGGTCATGGTGGCTCACTC CTGTAATCCCAGCCCTTTAGGAGGCTGAGGCAGGTGGGTCACTTGAGGTCAGGAGTTTGA GACCTGCCTGGCCAACATGGTGAAACCCTGCCTCTACTAAAAAAGTACAAAAAATAGCTC AGCGTGTTGGTGGGCTCTTGTAATCCCAGGTACTTGGGAGTCTGAGACAGGGGAATCACT GGAACCTGAGAGGCAGAGGTTGCACTGAGCTGAGATCATGCCACTGCACTCCATCCTGGG TGACAGCGAGACTCTCTCTCAAGAAAAAAAAACAAAAAACAAACAAACAAAAAAACACCT TTGCGATAGGTTTAGTTGTTCGTTAAATAACACAATACAAAATAGTTAGGAATTTTAAGT TCAAAGTAGTATTTAAGGCATCCTAGTACCTTATGCACTAAATAACTTAAAATGTACATT TAGTAAAATCACGCCCAACAAACTAAGAACAGTAAGAAATACTCTCAATGAATATTTTAT TTTTATATGCTTATTTTCTTTAATTGTGAGTCCATCCATTAACCTTTCTCTATTGCTAGT AATGCGATGGAGGGAGAAGTCACCTTTTAAATATAAATAGTCCATGCTGTGCTAAATCAA CAACAACTACATTTTCAGAAATGAGGGCATTCATGAAATCCTGACTCTATCTGTATTGCT TTAAATCAAGCTGACAGTAGAATAGTTTCTGCTGAAAGGCTGTCCTATGCGATATTGGAC ATTTATGTTATGAAGGTTATGACCAAATTATAGGTTAATATCTATTCATTTATCATATTA ATTCAACAAACTTTTATTACACACCTACAATAAGAGGTACTGTGCTTTCACGTCTTATCT CATATATTTATTTGCTCCACAATGCAAGCTGTATATCGTCACTGCATCTTCCCATGAACT ACTCTACTTTCCATTCCCAGAGCTATGCCTTCTCTATTAAAATAAAATGGAAATCAAAGC AAGATAATGATGTAGAGAGAACTGGTATTTGGATATTAGTCCAGGCTCTGCCAATAGCTG TGTTTTCTTGTCTATACAATTAGCATGTTGATATATAATGTTAAAATTTCCAAGTAAAAT TTCTGACTCTCTCTATCATTACTAAATTAATATTACACTGGGTGTTCTGGTGGTGGTAGT AATTATTATTTATGGTCTTATCCGAGTCTTTTTCCTAACATTTGATGAGTCAAATAAATC TACCTGACCACACTGGCAACAGATCTGCTTTTATGAAAGAAAATATGAAATATGTGGTGA ACAGTGTGGTTTGGCATTATTTGGGTTTTTTGTTTTGATTTGTAAGGATCATGTCTGCTT CTAGTGTGTAGATAGATCATAAATTGTAGCATACCTGGAAATATGACAAATTACTTATAT CGTCACGTAATGTAGATTTATTTCTTCCTTTTGAACTGATAAGTCTAAATAAGCAATGTT CCTTAACTTTTATTTTAAAATGCATACATTTGTATTTGTGGGCTTGGTCTTCTAATTTAG TATTTCCAGTTAATGCACATGATGTCAGATATTAATATTATGTGAATGCATTACCCAAGG TCATGCCAAAGGCTGTTAAAGTTAAGCAGAGGAACCTTATCAGAGTAAATCAGCAAGGCA TGGCACAGCTTTGAGTTTACGTAAGAGGAGGCAGAAAGGTACAAATAATTGATATGCCAA TTCAGGTAAGGGATCAGCTCTAGAAACCACCCTGCTCTATATAAATAACATGTATTTGTT CAGATGTTTGTCTTGATAATTGTCCTCCCTTTTTTTTAATTTTTTGTTCAAGAGATGCAA AAGCTTCAGGAGGATGGATCCCAGGAAAGAAATCAATGGGCTCTGTGAACTATTTTGTGG CTCAGTTACCAATACCACAAGAGCAATTACATTAAATTAGATGCCACTGAACTGGCAGCT TTTATTGACCCTCTTAAAGTCTTTCTCTCTCTCTTTCTCTCTTTCTCTCTCTCTCTCTTT CTCTCTCTCTCTCTCTCCCCCTCTCGCCTCTCACCCCTCCCTCACTTTTCTTGTGCAGTC ACACTCTGCAATTGGCACTGAAAGTGGCTCCTAGCAGTTTTGTTACACTGAAGGATGTGT CAACATTTTATTGTGTGATGATTCTAAAGTGTTTATTATGAAGGCGCTCCGGTTTGCATT GGGTTCAATTTGGCGCCAGCTAGATACACATTTGTTCTTAGATTTTTTTTTAACTGCTAT GCATGTTGGAGGGGAAGTTGGATGACATTGTATTTATTTTAAGTTGTCTTTTTGTTTTTC TAAGAGTGACAAAAGGAAGGGTGTTTTGAGAATAATCTTTTTTTAGATACTGATTTCTGC AAGCAAAAAACTTTTTCACATCTTAAAATAATTCCCTTTGTGAAAAAGATTATTTAAATT TGAGATACAGCTGTTATACACATTTATTGACTTCTCTTAGCATAGCAATTATTTACTCTA CAGGACATCCCTATGCCACATGTTATAAAAAGCCCAGTGCTTCTCCAAAGCCCTTTGATA ACTTAATAAGTTCTTGTAACCATTAATAAAAATTACTCTTGCTTCTCCTAATTTTTTCAT TGAAAAATGTCATGTGACAATCTGACAAAAGTAAACTTGAAGCTGAATTTTACGTCGTAA ATCTAAAGCAGATGGTACATTTGTTTTTTGTTGTTGATATTTTTAAAATAGCCTTTCTTA GTCCTTGTTTTTCATCTTCAGATATTTATTGAATACTTGCTGCATTTGACACACTGACCC TGGGACTCTGAAGTTCACAAAGTATAGTTAGGTAGTCCCAAAACTCAATGAATGTATAAT CTATTATGAAAAAGCGATTATGTTTGTATTTTCTGACACCTCAAATAATGTACAATCTGA GTATAGAGAAGGAAAAGATAACTTCTAAACTGGGGTTGTGAAGAGCACTGCTCCAGGCTA TATTTGAGCTGGAAGATGTTTAGGACTTCCGCATGTGACATTAGGATTTGAAATCCTGGA AAAAGAGCATGAGCAAAGCGAGGGAAACAACAGGACACAATAACTCACTGGGAGGCCACC TATTTTGACAAAGCCATAGGAAAGTGATTTAATAGAAGGCTGAAAGGTGAACCAAGATTT AATTGTAGAAGGTATTTACTGTCAATCTAAAGAAGCTATTTGTTATTCAGAAGATAATGG AATCACTGCTGAGATATTAGTTAAAATATATATATATATATATATATATATATATATATA TATATATATATATATAGCCACTAACAAATTTCTGTTTGGGAAAGATAAATCTGATGGTTG AGAATGGGAAAAATCAAAATGTAAAAAATAATAAAGTCAATAATATATTACTATGACTAT TATTAGTACTATGATAGTTAGAGACATTCATTGTCACATTTCCTCCTTTTGGCCCTAAAA TAGCTGTGAGGGATACGTCCATCTTTGCTCTTCTTCTTCTTCAATAGATCAGAAAACAGC CAGCTACTCTAGTCTCTCTGACGGGATCCTAACCTACTTCCAATTCTGTAGCCCTATGAG ATTGGCAAACTCTTTTGATGATATCTTGGGTAGTTACTTTCCAGCCAAGGTTTTTATGTG CCTTACCAGACTCCAGGGCACTGCTATGCAAGGGTAAATCTCATCAGATATCTCAAGTCA TGTTGGAGTCTTTTCCCAATTTCTTTCTCTTAGCACATTATCTCATCCCAATTTTCTAGG AAAATGAATCCTTCTAATTTTTTCCATATTCTATTCTGATGGAACCCTTGGAAATTCTGT ATTAGCACTAGGCAATGTGTCTCCTTGCATTTCTGAAACTCACACTATTTCATCAGGCTT TCCCATCCTTCAGCTAATGCAGTTGGCCAACTCTTTCCATGGGCTGACGAAGAGAGAAAC ACATTTTTAAGATAGTATAACTAACGAAACAGAGAGTAGAAGATACATTAATAAATCAAA AACAGTTCCAATTTTCTGAACCTAAGGACTGAAAGGTTCAATATTGAGAATCCCTTCCTT CTTGAAGCACTCACTTCTCTTGACCTACAAGACATAGAAATATTTTGGAAGACACAAATC CTCTTTCTCTCTCTGGCCAATCTCTCTCTACATTTCTGGTTTATTTTCCTCTTTTCATCC TTGAGGTGTTCCATATAATTATTAGTGGAAGTCAGCAGCAGAGTCAGGCTTTAGAAGAAA ATGAACTCAAGCTTAGACATTAAGAATTTTGTTCACAAGTAAAATAAGAGATATGATAAT TGTAGCATCAGTAGTGGATGAACTCCAAGGAAGGAAGGAGTAAAAGAACCAGAAAATAGG GAGAGGATGGTCAGGGAGACAGACTGAGAACTTAGTAAGATATTTCTATCTTGTAAGTGA AGGGAGGTAAAATGTTCCAAGAAGGACATTCTCAGTGATCAATAAGGTCAGATTTTCCCT ATAGATATAAAAGCTTATAATCCAACAAATTAGGAAAAAAGAAAGAGTAAAGTTTGAGAA GGCAGCAAGGTAAAGTGGATTTAGTATTGGATTAAACCAATGGTTGCATGAGAAGAAGAT AGTGAGTCTTAAAATAGGAAAGGAGCTATGCTAAATATTCTTTACAGATAGAAAGTCCAA TTTAAACTAACTTAGAGAAAAAATATATTCGGTTATGTAAGTGATCATTCAGGAAATCAG TAAGTGTCATCAGGTTCTGGTCTCTCTCCGCCTTTCAGTTTTGTTCTTGTCCATATGTCG ATTTTATTTTCAAACACAATGTGATTTCAGCATGGCTGCTAGTGGCTCCAAGCCCACATC TTCTCATGTCCAGAGCTAGTGAAAAGGAATGTCTTCTTTTCCCCAGTGCTTATGAAAGTA CACAGCCCCGATTCTCATTGGCCTGAGTTGGGTCAAGGTACATCACAAAAAACTTTAATT ATAGCTGGTGGTTTTCTGATTGATCAGACTCAAGGCTTCTACTCACAGCTGAAGTCACCT CTATCTAAAGTGTCAGGATTGAAAAGGGGAACAAATGGTTCCCCTGTAAAAGACTGGGTA AGTTACCAAGAAAAGGGTAAATAGATATCAGGTTGGTAAAACAAAAACAAACTTAGGTCT GCCTCTGAGAAGGAACAGGAACAACCCATGATATGTAATAGAGAGAAATAAAGAGGTCGT TTGGTGGCATCTGAGAGAGCTGTTGAGAACTGTTAGACATGAATGGCAAATTGTGAAGGA GTAATAAATGTGCGTGCACATTAGAAATAGGGGCAGCAAGAATGAATTAGTTTGGATATA TTTGAGGAGAAACACACACACACACACACACACACACACACACACACACATATATAGTTT CACATATAAAGTTTTTTTAAAATCCTGGTAATACAGGGCTGCATCAGAGTGAATTGTCCA AGTCACAGGATTCTTAGAATTTGGAGGGTAAATGGTAAGAGAAAGGATAACCTGGCATTC ACTCAAAAATTTAAGAATGCATTCAGTATTTGCGTACTTACTATGGACTAGGCACTATTC AAGGTACTGGAATAGAACGGTGAGTATGATGAGAAGAGTCCCAGGAAAACAGAAAATGAA CAAATAAAAAGTTAACATATTGTATACACGGAAGTGATGTATACAGAGAGGAAGAATAAC ACAGGGTAAGAAAATAGAAGCTTACATGAGACAGAAGACATTTTGGGATGTGGCCAATGA AGGAAATCCTAAGGAGATAACCTTTGGGCATAAATATAAATTAAGTTAGGGATCAGCCTA ATGAATATCTGGGGGAAGAGCACATGTAAAGGCCCCAAGTCTTGGGTGTTATAGAAGAGC AAGAATGACAACCAAGTTAGAGGGGAGTGGGCAATTTTCAAAGAACAACAGTGGAAGGGG CTGCAGATAGAGGCAGAGGGTTTTGGGCTTTAGGCTTTGGTAAAAAGATTGTGTTTTATC CTGAGTGTGTCAGGAAGCTCTGGAGAGGAACCTTGAATGGCACACTTTTCTGGATACTGT GTGAATTGCAAGGAAATACCAGTGAAAGCTAGAATACTTGAGTATTACAAGAAAAAAGAT CACGGTAGCTTGACCTACAGTGCAATGAAAAGATGAGAAATAGTCAATTCAGAATGCATT CTGAAGATAGAGATGAAAGTCTTGACAATGAGTAAGTTCTGGAGATGAAAAAAAGATTGA AACAAAAGAGGATTCCGTTTTCATGCCTATGCCACTGGGCAATGGTGAAGCCATTCTCCG GGATAGGGAAAACTGTGAGAAATACTAGGAAGAATGGCAATCTGGGGACAAGTAAGAGTT CAATTTTGGAGAATGTTAAGTTTTAAGTCCTGTTATACAACTGGATAAACAGACCCAGGG GGCATTTAGAGTTGAAATGGGAATTGGAATGTGGACTTCAGAGAGAGGGAGGAGATATGA TGAGCTGGGAGAAAGGGATAAGAGGTATATGACCACAACCTTTTCAACGCTTTGTCCTGG TGATAAGTTGTCATATTAGATTAGCCCTAATTGGGGTAGCTGGGATGGGATAATCACAGA TTTGAGTTATGTATGGTAAAAATGAGAGGCATTGGCGGGGTGTGGTGGCTCATGCCTGTA ATCCCCACACTTTGGGAGGCTGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCAAGACCA GCCTGACCAACATGGTGAAACCGCATCTCTGCTAAAGATAAAATATTAGCTGGGCATGGT GGTGGATGCCTGTAGTCCCAGCTACTCGGGACGCTGAGGCAGGAGAATGGCGTGAACCTG GGAGGCGGAGCTTGTGATGAGCCGAGATCCTGCCACTGCACTCCAGCCCGGGGCGACAGA GTGAGACTCTGTCTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAA ATGATGCTAAAGTCAAACACACTCACACATCTGAGCAAATAGCAATGGCTCATAGAATAA GTAAATAAGTGCAAAAATATTTATTGCCAAATTTCAGAAGGCTTACAGGTCTGAAGCTAC AGAGAAAAGGAGGCTCAGGATAACCCATAGGAAAACTAATTACCTAGAAGTGAAGGAAAA GTCATTTGGCATATTCTACTTTAAAGGGACTGGCTTCTGTCTGTATGGATCAAAGGTGTC AGCTGTAGAATTTTAGAATATGAAAGATTTAATCACAACCTCTTACAGTCAAGATATAAT ATTTTATTTTTTCATGTGCTTGTTTGGGAGGCAAAAGGAAAGGTTACTAAATGGATCCTT CATTGGCAAAGGTCAAAAGTAGAATTTGATACCTTCTAAGTCTTATTTACAACTAAACTC TAAAGCCGTTTCAGGATTATACATTATCTAGGGAAGCAATGTGGTCTACAATAGTTCTCA CATTTTAGTGAACATTAAATACCCTGGGAACATGGTGAAGATGCTGTTTCCCTAGGCTTC ACTCCCATATATTTTGATTCCATAGATCAGGTTCAGGGCCAAAAATCTATATTTTTAACA AATATTCCAAGCATTTCTGATGCGGGGGTTGGGAGGAGGTCCCTGAACCAAGCCTTAAGA ATTTTGATCTGGGGATAATTATGACAGATCTTTAGAATAATCACTGGCCTAGGTGTCAAA AGTCACCACATTTCCGAAGCTGTTTATTCTTATTAAGAAATATTAATGCCATCCTTCCCC ATTTCAGTTACTGTCAGGTTAAAATGACACAATGCACTATGATTATAATATTCATAGATT GTTACTTATCAAGTCACAAGAGTGAAAGCTTGCTGGTTGCATGGGAAAGTGCTTAGAATA TTAAAGTACCATCTAACTGTAATTGTTAACAGGTAGGAATTAGACAGTAAAATTAAATGT CTGTAAGGAAAAAAAATTCTGTTTTGATATAAATTTGGTTTCCTTTCTCAAGCCTGCTGT CCTCAAGGGCCAAGGGTTAACAAAATTATGACATTTCCAGGTATTCTTTTCAATTTTAGT TTAAAACTTGGCTTCCTTTGGGTAAAGATTCAGCTAAATACAAGTATTACTCTTTCCGTC ACTATCCACCGTGCCTTACTTCCTCCCTGCCTCAAGGTCTTCACCTCCTGTTCTCACTTC TCCTTCCTCAGGCCTCTTATGTCCTTTTCCACCATGGCTGCAGGTGGAAAAGCAGCTGTG GGTTTACGTGCTTGTCCTCCTTAAGGGAGAGATGCTGTGTATCTGGTTGGTGCAATCCTT CTGTTTTCTGTTGTTACTGTCTTTGACCCGTCATAGAGGCAGGCAGGGTCCAGGTGGCTC ATTCAGCCCAAGCAGCACCCAACACTGGCCGCAGGATATAAAGCTTGCTATGTCTGTGGG TCCCCAGCTGTACCCTAGGGCAGGGAAGTATGGCCACATCCCTCAAAATTTATTCCAGAG GGGCTTCCATCCAGAGTCTTGGCTGATAGAGCCCGCTTACTGCAATAGGTAGCCCTGTGT GGTGCCTGGGAAGGTGGCTCACCCATTCAGATTTTTTCATAGGCCATTTTAGGCCCTTTG GAAACCTTGGATCTCTACCACTCCAACCCAGCTCTAAGGGAAATTGAGGGATATCCTTGC CCTTCCCACCAAGTTATGTCCCTTTTCAAGTTCTGTGCTATCTACACTGCAAAATTGCCT AAAGTTACTTGCAGTGCTGCCAAGCAATCATCACCAAACTCTAGTCTCCTGTATTCATAA TAATGTCTCTAATGTCCAGACAATGCTCTTAGAGGCTCTATCTTTAAGGGAAGACATTTT GAGTACACCCCCACAGTAGGGATGAAGAAGCTTACATTCTTCAATTTTCTTCTCTACTAC TTCTCTCTTTCCTTAGCTAGATTTCCCCTTTTTATCTCTGCTGTAATAAAAAGAAAATAA ATAATTTTGCCTCATTCACATTTGGTTTGAATTATGGGCTTCTGACATCATTATATGGTC TTCTTTGAATTTAGTATTTTTGGAATTCAGTATGTTTAATCTCAGCAGTGTCCTATATCT TAGGAATCTACGCATTTTCAGTTCAGTCACTAGGTGGGATAGAGTGCATGCTTATTACCA TTACTTGTAATTTCATTTTCTCCAACAGTACACCCTACATTTCACACACTCACAATCTTG GCATTTCATCACTGCTGTTGTTCAGATACATCATTCTGCTAGACTTTCCCAATCCAATCC CTGACTTCTACTTTCCTGAAAGAACTTGATAATAATTTCTTCAAGGAATCTTCTCAGAAC CCTCATTCTGTTTCTAGGGGCTCCCACAGTGAACTCTCATGAGTACTTTGTCCATATGTC TACTATTGTAATTAGCACATTATATTATAATTTCCTGTCCCAAGTCACACCACTAAATTA TAAACACTTTAAGGATATAAACAGTATGATTGAGTTGGTTTTTAATCATGATTTTTGCAT CTACAGGGACTGAAACCTGATAGACACTTTTAAAATGTTATTTTGAAATAACTAATTTAC CAATACATTAATTCCATTAATACTAAGCAAGGAAATATAATGGCAAATAACATTTATCAT GTAGTATATGTAAACTACTTAGATAAAAACAGTCACCAACTAGGTGCCAAGCAATGACGG GTTTTAGATCCTGGGGATATAAAGATGACCAAGACACAGACCTCGACAACAATGAGTGGC CTTCCTGTCTAGTAGCAAATAAACAAATAATTACAATGAATGTGGACTTAAAGATGAAGG AGAGTTTGAAAGGCAATGAGAGTTACAGCACGTACCAACATAGAGAGATGATAAAATGTC CAGCATGCCTGAGGACCATTAGAGGACTTGGTGTGACTAGAACGTGTTTTATGTTGGCTA TCGTAAGAGATAAGGCAGGAAAGAGTCTTCACGTGACACAGAAAGCTAATAAGAAGAACA TTGATAGTTCATTTGTGAGTGCCTATTATGTAGGCTGGAAGCATATGCAATGCATGCAGT ACCTATTTAATCTTCATAACAAATTAAATATTGTTAAGAGTTCACATAGATGAAAAGCTT TATTGAAAACTTCCAGCTTGGGGTTCAGCACATAAGAAGCTTGGAAGCTATCACTCTCTG CTAACAACAATTGAATCTCACAATGTGCAAAAAGAATTATATTCCACCAGTAAGAGAGAT TTATTTCACTTATGCAAGGATATACAATTAGTGTAATCTGTCACTTCAACAGGCTAAAGA AGAAAAATCACATGATTATATCAACAGATGCAGAAAAAGCATCTGACAAAATTTAACACT GATTAATGCTAAAAACTCTCAGCATACTAAAAATAGAGGGGAATTTTCTCAACTCAATAA AGACATCTACAAAACCTACAACTAACATCATACTTAATGGTGAGAAATTCAAAGCCTTCT CGCTAAGATTAGGAACACGGCAAGGATACACCCTCTTGCCACTGCTTTTCAGCATCATAC TGGGAGCTGTAGCACATGCAACAAGATAAGAAAAGGAAATAAAAAGGTATATGAATCAGG AAGAAAGAAAGAGAGTGTCTTTGTTCACAGATAACAAGATCATCCATGTAGAAAATCTGA AAAGAGTGGACCAAAAACCTCCTGGTACCAATAAGCACTTGCAGCAAGGTTGCAGGGTAC AAGGTTAATATACAAAATTCAATCATTCCCCTATATCCCAGTGATGAACAAATGGGATTT GAAGTTAAAAACACAACACAATTTACATTAACACCTCCAAAAAATGAAATACTTAGGTAT AAATCTGACAAAATAAATACAAAATCTATATGATAAAAACTATAAAATTGTGATGAAAGA TATCAAAGAACTAAATAAATAGATACATATTCCATGATCATTGATAAGGACCTGATATTG TCAAGATGTCAGTTCTTTCAAACTTGATGTATACATTCAGCACAATCCCAATCAGCATCC CAGCAAGTTATCTTGTGGATATCAACAAACTGATGCTAAAGTTTATATAAAGAGGCAAAA GACCCAACATAGCCAACTCAATATTGAAGGGAAACAAAGTTGAAGAACTGACATTACTTG ACTTCAAGACTTGCTGATAGCTACAGTAATCAAGGTAGTGTGTTACTGGCAAAAGAACAG ACAAAGAGATCAAAAGAATAGAATAAAGAACCCAGAAATAAGCCCACATAAATACATTCA ATGGATATTTGACAAAAGACTAAAAGCAATACAATGGAACAAAGATAATCTTTTCAACAA ATGGTGCTCAAACAACTGGACACTTAAATGCAAAAAAAAAAAAAAAAAAGAAAGAAAAAA AAGAATCTGGACACAGATCTTACACCCTTTACAAACATTACCTCCAAATGAATCACAAAC CAAATTACAAAATGCAAAATTATAAAACTTCTAAAAGATAACATAGGAGAAAACCTAAGT GACCTTGAGTATGGGATGGCATTTTAGATACAACACTGAAGGTACAATCTAGAAAAAAAA TAAAGAATTGATAAGCTGAACTTTATTAAAATTAAAATTTTCTGCACTGTGAACGACACT GTCAAGAGAAAAAGAAGACAAAACCGACTGAAAAGAAAATATTTGCAAAAGACAGTGATA TGGTTTGGCTCTGTGTCCCCACCCAAATCTCATCTTGAATTGTACTCCCGTAATTCCCAC GTGTTGTGTGAGGGACCCAGTGGGAGACTATTTAAATCATGGGGGCAGTTCTGCCCATAC TGTTCTTGTGGTAGTGAATAAGTCTCACAAGACCTGACAGTTTTATCAGGCGTTTCAGCT TTTGCATCTTCCTCGTTTTCTCTTGCTGCCGCCATGTAAGAAGTACCCTTTGCCTCCCCA CATGATTCTGAGGCCCTCCCCAGCCATGTGGAACCGTAAGTCCAATTAAACCTCTTTTTC TTCCCAGTCTCGGATATGTCTTTATCATCAATGTAAAAAAGGGACTAATACAGACACATC AGATAAAGAACTGTTATCCAAAATATACAAGGAACTCTTAAAATTCAACAATATAAAAAA CAACAATCCAATTTAAAAATGGGCAGAAGACCTAAACAGACATCTCATCAAAGGAGATCT ACTGAAGGAAAGTAAGCATATGGAAATATACTTAATAGTATATGTCATTAGAGAATTGAC AAGCAAAACGATCATAAGATCCTACTACATACCTATTAGAATGCCAACATCCAAAACACA GACAACACTAAATGCTGGTGAGGATGCGGGGCAACAGGAGCTCTCATCCATTTCTGGTGA GAATGCAAATAGTTACAGCTATGTTGACAGACAGTTTGGCAGTATCTTAGAAAGCTAAAC GGACTTTTTCTATGCAATCCAGCAATCACACTCCTTGGTATTTACCTAAACGAGCTGAAA ACTTATATCCACATAACATCCCAGTACAGGGTGTATGCAGCAGCTTTATTGCCAAAATTT GGAAGTGACCATGAAGCCCTTCAGTAGGTGAGCTGAAAAATAAACAACCACACAATAGAA TATTTTTCAATGCTGAAAAGAAACACTATATCAAGCCAGGAAAAAAACATGAAGGAAACT TAAATGCATATTACTAAGTGAAAGAAGCCAATCTGAAAAAGCTATATATTGCAGGATTCC AACATTCTATATGATATTCTGGAAAAGGCAAAACTATGAAAACAGTAAAAAAGATTAGTG TTTGTCTGAGGTTTGTGTGGAGGGAGAAATGAATAGGTGGAGTACAGAAGATGTTTTGGG CAAACTATTCTGCATGATATTACGATTGTAGATATCTGTCATTGTACATTGGTCAAAACC CAAAGGATGTACAACATGAAGAGTGAACCTTAGTGTAAATTATGGACTTTGAGTCATAAT GATGTGCAAATATAAGTTCATTGATTGTGACAGATTTACCACTTTTGTGTGAGAAGTCTA TAGTGCGGGAGGTTGTGTTTGTGCGAGGACAGGGGATATATGAGATATCTCTGTATTTTT TATTTAATTTTGCTGTGAACCTAAAACTTTTCCAAAAATAAGGTTTATTATTTCTCTAAT AAAGCTTTATTCAAATTTAAGTGCACTCTCTAAAAGACAAAGTTTGATTATTATTGAATG CATTTAATTATTAAATTATTATCTTCCCCATATTGCACAACCATGACTACTGAAACCATA AGGCCTACAAATATAGCCCATTCTGGAACTCAAGCAATTAAGGACTAATCCTGTGAATAC ACTTAAGCACATCTCATCTTCAAATGATGTCTAGTTACAGTGACCCTGTGCCAAGTCTGG TATGTAGGCACAAACAACTCAATGTTTAATCAACTAAAGCCTTGCCTTCTTCACTCAATG CCAGTTCTCAGCTCACAAAGTGTACTTCTCTGCTGATTCCCCATTTTCATCATAGATACC AACTGGGACTAGCACTTTGAAGTGGTGGGTATTAGTCCGTTTTCACGCTGCTGATAAAGA CATAACGAAGACTGGGCAATTTACAAAGGAAAGATTAATGGAGAACTCACAGTTGCAGAT GGCTGGGGAAGCTTCACAGTCATAGTGGATGGCAAGGAGGAGCAAATACATTCTACATGG AAGGCAGCAGGCAAAGAGAGAGTTGTGCAGAAAAACTCCCGTTTTTAAAATCGTCAGATC TCATGAGACTTACTCACTGTCATGAGAACAGAATGGGAAAGACCTGCCCCAGTGATTCAG TTACCTCCCACTGGGTCCCTTCCACAACACATGGGAATTCAAGATGAGATTTAGGTGGGG ACACAGCCAAACCATATCATGGTGCATTGCCATTTCCCACTCTTGGCATTGTCTGCTACA TCTGTCAACGTACCGGAACTAAGGACTTCACCTGGCCCTTCCTCTTAATTAGGTCACTAG ATGGGTTAGCATGGAGCCCCAAGTACTTCTTTAAAATTTTGGCAGTTAAAACTGATATTC ATCCTCCTCAAAACACACTTTTAAATTATACCCTCCTCTAACACTAGTCCTGACAACTTC CCCTATAGACTCTTTTTTTTCCAGGCCACATCATCCTATAAGTTTCTTTATGCCTTCTGC TTAAACACATGAAAACTATAAGATTGAATATGTTTGTGTGTGTTTGTCTGTATGTGTGTG TGTGTACACATATATTTCAGTATACTATATTTAATATAGTTAATCACATATTTTAAGAAT ATATATATACATTCTATATAATTTCTTCTATTCTTCAGTTCCTTTAAACCCCTGTGTGAT AGAAAGAATAATGATTCCCAAAAATGCATAGCCTGAATCTAATAATGAAATATGAGACAA ACAAATTGAAGGACATTACACAATGCCTGTCTGCACTTTTCAAAAATGTCGAGATTATGA AAGACAAGGTAAGACTGAGGAACTCTTCCTGATTAAATGATCCCAAAGCTAACTGAAAAT TTAAACAACACTGTACTTGATCCTGCATTGGATCCTGAAATAAAACTCCTCACTCTTTTC TTTTTCCATAAAGGGCAGTGATGGCAGTAATGGGACAGCTGATAGAATATTACTAAGATA TCTACATTAGATGTTGCTATACTATCAGTGTTGATTTTCTGACTGATAATTGCACTGTTG CTCTGTAAGATAATATTCTTTGGGGGAAATACCATGAAGTATTTGGGGTAAAGGGACATA AAGTGTACAACTACCTCCTAATGGTTCAGAAAAAGAAAGAGAAGCCAATATAACAATTTG GGAACCTGGGTCAATAGTTCACAGGAATTCTTTGAACTAGTCTTGCACCTTTCCTGTACA TTACAAATAAAGTATTTTTAATACTAATACACACAACAACATGGCTGAATTTTATAATTA CTGTATTATGTTAAGTAGAAGAAGCAAAACACTAAATTTCTATTATATTTGGACTGACAT AGCTCAATAAGTGAAACTTTGCATTTGGCCATTAGATGAGTGAAGGAAATAGTACAGCCC TACAGTTTGAAAATATAAAATTCTTTTTGGTGTCAAATGAATGAGTCTATTCTTGGTACG TGACACTAAAGAATAATCAAGATAATGATAAGGCCAAATAGATTGAGCAGGTTTTATATT CATCACGTTTCAGACATTATCAATAAATGTTTGTAATTAAAAGAAAGGCAGCCCCTAAAA GGTAACTGAACTCATCACATCTAATTTGAGACCATTTAAGAAGGTAAGAGAGTAAAGTTC AAACTTTGTCAACAAGTTCTTCTTACCTGGATTATTTCACAAGATACAGATAGAGTTTTT TTAAAAAAAACAGGATCAAAATTGATGCTGTTATGCATGTTAATCATTTTAGTGATTTAT TTAAGCAATGTAACAGTAGAGAAGGAGGAGAGGGAAGGGAAGAAGAAAGAAAAGAAAGCG GCAATAGAGAGCGGGAAAGAGGCTAAGAGACAGGATGCTAAGTGACAGGATGCTAAGTAG AGACTTTATATCAGATTTGGCTTTCATACTCAAGAAACTTGAAACAGCCTCAGCACCTCA GAGCATGGTTCTGGAAGGCCCTAATGCTGTTGAGCACAGTTGCTCATGGGCATCCAGAAG CTCACCCAATATATAAGGCAGATGCTAGACATTTCCAAGTCTAACCTCCAATCTTAAAGT TGCCCTGAGTTCTGTAATTTCCAGCCACACAATGACAGTAGTTCACCTTCGCTAGAGCAA AATCCTCATAAACTCACACCGTGTTTGTGTAAAGCTCTTGCAGGACTTTACCCACTCCCT GGTTTATCTATTGCTCCTTTAGGACAATGATATGGAAGAATGACAATACAGGCTTTGCAG ACAGGCAGACCAACTGACTTAGGTTTGAATTTTATGTCTGACATTTATTAATAAGGCTCT CTATAAACCTCAGTTTCCACACCTACAAAATAAGAATTATGCTAAATACTACACAAAATT CCTTTAAGAACTGAAAAAAAACAAGGAAATGCCTTACACTTGAAAAATAAATAAGCAATT TTAGTTCCCTCTCCTTTGGAACTGAGTCTAGGATAAACACTTCATAGTAGAATGATTTAT AATCCTTTGGGTATATACCCAGTAATGGGATTGCTGGGTCAAATGGTAGTTCTGGTTCTA GATCCTTGAGGAATTGCCACACTGTCTTCCACAATGGTTGAACTAATTTACACTCCCACC AGCAGTGTAAAAGCTTTCCTATTTCTCCACGTCCTCTCCAGCATCTATTGTTTCCTGACA TTTTAATAATCGCCATTCTAACTGGTGTGAGACGGTATCTCAGATTGGTACAGTAAACCA CCATGGCACGTGGATAGCTATGTAACAAACCTGCATGTTCTGCACATCTATCCCAGAACT TAAAGTATAATAATAAAAAAATTCATTCTTCTGAAATCAGATCATTTTTGCTAGTCCTTA ATCTATTCCATGATTTCGATCTACTATTCTTTCTACATCTAGAGCCATAAGTTTGAGACA AGTCTGGACAACAAAGCGAAACCCCCATCACTACAAAAAATTAAAAAATAATTAGCCAGG CCTGGTGACATGCACCTGTAGTCCCAGCTACTTTCGAGACTGAGGTGAGAAGAGTTCTTG AGCCCAGGAGTTCAAGACTACAGTGAGCCATGATTGTGCCGCCGCACTTCAGCCTGGGGA ACAGAGCAAGACCCTGTCTCTAAATAAATAAATAAATAAAAATGTATTCTCTTACATTTC TGGAGGATACAAATCCAAACAAAAAGTGGTGGCAGGGTTGTGCTCCCTCCAGAGACTCTA GGGCAGAAAATGCTTTGCCTCTCCCAGCTTCTGATGGCTGTCAGCACTCCTGGGCTTGCA AGGACATCACTCATCTCGGCCTCTGTGGTCACATTGTCTTCTCCACATGTGCCTGTGTGT TGTTTTTTTCTGAGTGTCTCTTCTTAGGGCAATTGTCATTGGATTTAAGGCCCACCTGCC TAGTCTTGCACGGTATCTTCATCCCGGGATGCTTAATTTCATTATTTCTGCAAAGACTCT TTCTCCAAATAAGATAACATTCCCAGGTTCCATGGAGTAGGATGGGAAATATTTTTTTGA GTGCTATTATTTTGGCTGGCTACTCAGTCTTAAACTCAAGAACAGAATAATATAGTAAAA AAGTTGCGTATGGGCTAGTTATTTTTTCTGAACTAGGGATTTGTGTTGTGACTTGTATTT TTGTTGTTTTTAAACATGTACTAGTAGTATATTAAAAAGAGCAAATTTGTAAAGGAATGA CATAATAAAAATGATTAATAATGGGAGGGTCAAAACAATTGAATCATAGCACTGAGATAT GCTGGAGGACTTTCTAATACTTTTTACTGTATTTCTCCTCAAGTACTATATCATTTTATG ATAAATTTTGTGCCACTTGCAGTAAAATATCTGATGAAAAAGCAAATGAAAATTACTGTT TTCTTCAATGATTTCAACACCTATACATAAGATTTTGTAATTGCAAAATTCTGTAATCCA TTTCATTAATGTGATTCCATTTCCTCTTCTGATAAGCCTCAAATCAACATAGCCTCATGC CAGACCTTGGCATTATAGAACCCTGACTGTGCTCTACGTTCTTATTCTTCCCCAGGAAAA ACCTCCTTTCCTGTTGTATCTTCTTACACTCTTGCAAACACCCAGAGCTGGATCCTTATC GTCAATGGAGATTCCAGTAATTTAAGCCTTCCTACTTCAAAGAGTTAATGTGCCCTCTGG TCACAGTAAACATTCTACCAGTAGTTTAGACTCTGGCCAGCAGTCTTTGCCCAGATACCC TACAAAATAGAGCCTTTTATGGTGGCATCAATCTCTGTCATTCCTCCTGGGATGTGGTAT TGCTTCTGTTTTACTGCATTGCCCGGGAATCAGGTCGTTTCAGAGACTTCCGCTTGATCT CTCCTACAAAATTTACTCTTGCATTACAGGTTACGGAACTGTATGAGATAACTGCCAAAT GCCAATTATCTTATCACTGAAAGTATATTCAGTGCTAGACCAATAAGGTATATTCATGGA CCTATTGAACCCGCTGTAGGTTGGACTTGGCCAAAACTCCATTTATCACCTAGTCTCCAA AAGGAGGACAGTGGCAGCATATTGTGTTTCCTGGTATACGTTTAAGCTCAGATCTAAAAC TAAGAGTTCTTGAAAAGTTTTCATATTATCCTTTCCCCCACATATTTCTGCTCTTGCCGA TTGTCTCAGGTTCTTCTGGAGAAGGAATGATAAATATTTACCAAATATATTCGTAGTGGT TTTGCTGGGTCCATTCTCAATGGGATGCTTCCCTACACGCCCCTTCAATCAATGGTCTCC ATGCTGTATGCTCGTGAACTGACGGCGATTTGGAAATTAAGCAAAGGACAGCAATATTCT ACTGGGGGCAGTGGTTGCCTTTGTGACAACAGGATCAGTGTGAACCTTCACTGAGACCGC CCTGGCCAAGAAGCAATGCTGCTATCTTCAGAGACAGACAGGACTAAGTGGACTTGCAGT CACTCATAAAGGAGGTCTGGCAAATCAGCAACTCTATATTGCTCTCACTGGTAACCTAGA AATTCCTGCCACCTATTCACCAGCTGATGTGAATTCTTAACTTTCATAACACCCCCTGTC CCAATGTTTTTCTCCATTCTACTTCTTAGGTGATCGATGATTTATAGAGATGTAGCTGAG GCATGTCTGTAACTGGTCCTGTGCACAGGCACAAACTGGCTTCAGATACACTCTCTAAAG TTCTTGCTTATCTCATATTTGCTCCCATTTCTGTTCCTGCCTCTACCTTCATTCATGTTG ACTTTATTCTTTTTCAGTTTATTCAGTCTTTGCTGTCCACTCTTCTTGTGTGCTGTTCTC ATCTAAGCTCATTTCATTTCTTTTTGCTTATGATTTCTACACTGGTTTATTCAAAAAGTA TGTCCCTGGGACTTCTTCCTAATAGGTGCTATAATTTGTTCTGGGGAAATTGTAAAAACA AAGAAACAAAGAAATTCCCATACCTGCCATCAACTCTATGTGAATCATTAAGATTTTTGT TTTTATTTCAAATAGGTTTAACAAATGCACAATGAGCTGACTGCTTCTAATCCCCAGACT ACCTTATTTGTCTCCACTATTTCAACAAATAGCACATGGATGGTAGACTGGTCCATTGCC TGATAATCCACGTGACAGACATAGTTCTTTGCCTACTCAAAATTATTTCTCACTTCTTTC TTGTTATTTTAGCCATTTCATTTGTGTATTGGATGGAAATATCTTAAATTCTGAGGTTTG TAACCTAGTTCTGGGCAATTGAGATATAAGGGAAAAGCTGTTGGTAAGGAGGGATGGCGC GCCTTGGAGAGATTTTGATAAAAGACAAAAAACATCATGAGGAAATTTTCTGTTTTCATT GCCCCTTCCTTCCAGCTTTTGTTGTTCCCGTGAAGATACATCAACAGGACCATGAGGGAG AAGCCAAGAAAAAGGCATAGAAGCTGACTTGATGCTTCGGTATCACTGAAGTGATGGACC AATGTCGGAGCTACCTACTGCTATGCTTCCTATAATGGGAGATATTTAAATGTCTTAAGA TAGTGTTGGTCAGCCATTGTGTTGTTATTCTCTCAACACATTCCTAATTCATAATATATT TCTAATACAATTACCCTTTAATTCTGCTCTCCATACAACAAATTCTGAAGACGTTCTATT CTTTCTGAAGTAAGAACTCACCTCTTCTGGTGGCCTCATCCTGTGTTAGTGAGTTCAATG TTTACTCTACTCAAAACAAACCAAGAAACCAAAAAAAAAAAACAGCAAATATGTTTTGTA TCAGCATTCACTTATCTTAACACTTGCCTGTGTGTAAGGAGACATATCCTCATGTCCCTC CCTTCAGTCTTGAGATACATTACTTTTCACTTTGCTAAAGCTAACTTAGATGTCTTTTAA GACCACCTTTTCTCCTCCTTGAGGACATCTTTTTCCACAGCTGTCCACAGTTGGCTGATC TGAATTCTCTTACTGATTTAGTTCCTTTTTTTCTCTGTCTTCAAGTCTGCCTAAAATCAT TATTATTTATTTATTATTGAGATAGGGTCTTGTTCTGTAGCCCAGGCTGGAGTGGAATGG AGCATTCATAGCTGACTATGGCCTGAAACTCCTGGCTTCATGCCATCCTCCTGCCTTGGG TAAACTTACTTTATTCTGAAATTTAAAAATTAGTCAATATCACTCTACTGTCCTTTTATA AGCCTCTTTAAAAATGTTCAGTGTCTTTATTTCCTTCCTATTCTCTCATAACCTCTTTCA ATCAGGCACCTGCTCCCACTACTGGCCTTAAACTTTCCCACTTGTCATTGACAAATTCAG TGGCTTCTACTTGTCATTCTTCTCCTTTCAGCCCTAAGGCAGTTGATCGTCCCTTTTCCA CAGAATTTTTTCCTCCCTCAGTTTCCATGAACTACAATATACTAATTCTGTGTCTCTCTG ATCATCCCTTTGATATTCATTGTGCACTTAGTTTATTCTTCCCTCTGGAAAGTTGCATTC CAAATATTCAGGCCTTCTGTTCTCTTCTATCTCTCTCTCTTTTTTTTTTCTTGAGATGGA GTCTTGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCGTGATCTCAGCTCACTGCAAGCTCC GCCTCCTGGGTTCAAGAGATTCTCCTGCCTCAGCCTCCTGAGTAGCTGGGATTACAGGCA CGTGCCACCATGCCTGGCTAATATTTTGTATTTTTAGTAGAGATGGGATTTCACCATGTT GGTCAGGCTGGTCTTGGACTCCTGACCTCGTGATCCGCCCACCGTGGCCCCACAAAATGC TGGGATAACAGGTGTTAGCCACCATGCCCAGCCTGTTTTCTTCTCTTAATGACCTTTCCT TTGTGGAGTTCATTCATTCTCACTGGTAAGATGTCGTTTTGATGGAAATCATACCAGACA GGGATTTGGGACAGACTCTTGAACCCAATTCACAGGCTTGTGTCTCAACTTCCCAGGAAC TCAATTTTTTTCATTCAGATCTAAAACATTGAAGGTAAAACATTTCAGGTGTAAAACACT GTTATCCCTGAAATCTTTGTCTCTGATCCTTCTTACTATTTTCAAGTAGCCATTCCACTG CTTTTAAAAATCAATGTAAGTAAAACCAAGTGCTTCCTTTTACTTCTCCTAAGGCTTTGC TTTCCAATGGCTCCATTATTACTTTTTCCATTCATAGGTCCCCTCCTTGACTATATGGTT GCCCACATTTCTTAATTTTCATTAAATATTGTTTCAATTATTGTACTCAGCTCCTCCAAA AACTTGATTAACTTCATTTTGTTTGCAACATTTTAATTAATTCTTATTTTCTCATTTTCA ATACCCTTTTAATCTGGCCCCCATGTCAAGTACGTTTTCTACTTCTACTCTCTGTACTTC TAAAGCTATTTCCCTAAATGCTTGGAAAATGCCTCATGTTTGTTTCTACTTCTGTAGCTT TGCTCGTATCTTTCTCCTGTCTGAAATTATCCCCAATTCCCCCTAGCTATCAAAATACTG TTTATTTAAAAACCCCTTCCTCCAAGAAATCATCTCAAACTCATCCTTGTCTTCACTTTG ACTCTTTCAAAACTCTTATTCAATGAATGGTCAGCATACCATACAAAATTATAGCTCACA AGAGTGTAGAGTTTACATCTTAGGATTCATCTATATGTCATCATGTATGGTTTGCCAATT GTTTCATATGGGTGAGGGAATATTTTCAACACCCTAAAGGCATCCTGGGAGAAATTTCAT GCCTTTTGGACCTATCATTTGTCAATCACCTCTTGAGTGGGTCACATATATTAGCAATAA TCCTTTTAAAAACTAGATAAATTATTATTATTATTCAAATTTTATAGTCAAAACAATAAA ATTCTGAGAGATTCAGTGATTGACCCAAATTTACAATGTGAGAGCCAAGAAGTTCCAAAT CAATCTATCTCTAAAGCCCAAGCTTTAGCTTGTTGGTGAGTGTAGTAAAGAAACTCAGAA AATACTCACAGATTAATAAACCATCACGAGCTTTGTGACCCAATAGGGAGCAGGAGAGAT ATATAATTCAACTCAGGCATTTGAAATTCTTTTATTCTTAGAGACTGACCTTAAACCTAG TATCGCAATAAGTAGTAGGAACCTCCTCAATAGTGTGAGATGATTCAACAGCTTCAATAT TTCACAAATCACATTTGTATCAGCTTGTGACTTGCTGGACAATCTAATGGTGCCTTGGTC TCATCATACACACTGGGTAAATTCATGTTTTCACACTAGACCATCTGTTCTGTGCTGTGA ATAAAGAGGTAGAAAAAATAAAAATCAAAACTTCACATTCATAAGTGCACAAATATGATG CATTTTATTTGTGGAAAAAATACCATTTCATCTGATAAAATAATGGAATTAAAATATTTG GGATAAATTTTAATTAGGTGAATAAAACTGAAGTGTTGTGTGTTTATACGTCTGTGTGTA CACACACTCCTGTAAATCAGAAGCTGGGTGTCAGATTCTGTTTAGGGATTCTTTTTTATC TTCTCTACACCTTCATTCCGTATTCATCTTGGACTTAGTATAAAACTAGTCTCGCTGTTG CCCAGGCTGGAGTGCAGTGGTGTGATCTCTGCTCACTGCAACCTCCGCCTCCAGGGTTCA AGCGATTCTCCTGCCTCAGCCTCTGGAGTAGCTGGGATTACAGGCGCGCACCACCACCCC CAGCTAATTTTTTGTATTTTTAGTAGAGACGGGGTGTCAGCATGTTAGCCAGGATGGTCT CGATCTCCTGACGTCGTGAGCCATCCACTTCGGCCTCCCAAAGTGAGATCCATTTTTTAT ATTAGGATCCACTAGCCTACATTTCAGATATGTCACCCATGAATATATTTAGTTTGAAAA AGGAAATGAATTGTGACCACAGAAAACATTGCTTTCTATTTTATTTGCCAGCATTGAGAA CAAGGTAAGTGTGAAAACTCAAAGTGTGCATAAGATTGTTCATAATGCTGACCCTTGGGA GAGCAATGAGAGAGGAAGCAACACAGCAGAGAGGCAGGACCCCGGCTCAGCCTGAGCCAC CACACCTGGGACACGGCGATGCTGGCCAGCTTTCTCCATTCACTGTCTTGAAATGACCAC ATCATTATTTCTAAATTAAGGAACATAATTTATGTAACTCATGGGACTCTTTTGGAACAA ATGGCACTGAGACAAAGTTCAGACCAATGTTCTAAGAAATTTAACTTCCCTGAGAAACAA ACTATAATAGAAAAACTCTGTGTATTCATTTGAATAAACATTCATTGAACACCTATTCTG GGCCAAGTGCTATATTAAATGCTGTTGATAGAGGAAAACTAGCAAGACTGGACTTTATCC TCAAGGATTTCACAGTATAAGTGAGAAATTAAGCCTTCAGTTATAATGTGAAGTGTACTC CGGAAAAAATGTACCAAAGAAACGTGTAAAGGAAGATTAGAAAACTAAGGATGAGGAGCT TACCTCTAAATGCAGTTGGGGCTGGGCACGGTGGCTCACGTCTGTACTGCTAGCATTTTG AAAGGCCAAGGAGGGTAGATCTCCTAAGGTCACGAGTTCAAGACAAGTCTGGCCAACATG GTGAAATCTTGTGTGTACTAAAACTACAAAAAAATTAGCTGGGCATTGTGGCATGTGCCT GTAATCCCAGCTGCTAGGAGGCTGAGGCAAGAGAATCGCTTGAACCCGGGAGGCAGAGGC GACAGTGAGCCAAGATCTTGACACTGCACTCCAGCCTTGGCGACAGAGTGGGACTCCATC TCAAAAAATAAAAATAAATAAATAAATAAATAAATGAATGTGGTGGGAATTTGAACTGAG CACTGACTTATGAATAAAGATAACTCATGAGTAAAGATATATTACTACTGACTTATGAAT AAACTGACTGACTTAGGGTCAGTTTATTATTGGCTTATCAGTGAAGAGAGTTTCCTAGAG TTTACTAACATATTTATAGTGAAATATATATATTGCAGAATAGTTTATGATAGTTACCAT TACCGTGCACCAAGTTCAGTGTTTCATGCCCACACATGATTAAAATGGTTTTTGAAAAAG TTAGATATCCATTTTGGGGGATATAGGGAGGTAATAATCTATTTGTAGACTACATTATGG CAAAACAGTTTAACATTCTCACAAAAAAATGCTGTATGTATGATTAGCAAGAGAAAACAG TTTCAAGATCTTAGTAATTATGATCTAGTATAGGAATTGAATCTACTGTCAGAAGATTAA ATTGAAATGCCAAGTTTGTTAGTAAGATCTAAGACCATGAGCACGTTATCCCTCTGTTAT GTGGTTTTATGTTATCATCATTAAAATTATGTAATATCTATATTGAAGGGTAAATTATGA GGAGAAAGAGAGGGAGAGAGAGATCTTACATATAAATCTCTTTTTGTATATTTGGCAAAA TTAAAAATACTATATTGCTTTCCACCTCCTAAAACCTGATGCTATTTTTGGAAGCAGATT AATTATTTTGCAAGATGAACAGATCATAAGTTTCTTTCATTTATTAAAATTAATTTATTA AAATATCACATACTAGGTAAATGTTTTTGCCAAATATTTGAAATACAAAATGTTTAAAAC TGAAGGTGCGATATCAGTATCCAGCTGAGTGGACCATTCTTACTCATGAATAACAGAGGG GGCAAGCAGAACATTCGTGAATCACTTCTCCTGTACTATATAAACATTAGTACTTTCTGC TTTCAAATTTAGAAGAGAACAGAGGCCTGCATCTCACCTATGAAGCAAATGGGAAATGTG GGGAAATGGGTGTGAAAGAGAATGAAGTAAGCTGCAAACAAAGTTTTATTCTTAAGACTA GGTTTAACACATAATAATAATAAAAGATGTCCCACAACAGTGGGAATAGATCAATTCCCA ACCATGAAATTGTTTTAAAAAAACTATTCAAGGCCGGGCACGGTGGCTCACACCTGTAAC CACAGCACTTTGGGAGGCTGAGGCGGGCAGATCATGAGGTCAGGAGATCGAGACCATCCT GGCCAACATGGTGAAACTCCGTCTCTACTGAACAAAAAATACACAAATTAGCCAGGCATG GTGGCATATGCCGGTAATCTCAGCTACTGGGGAATCTGAGGCAGGAGAATCGCTTGAACC GGGGAGGCGGAGGTTGCAGTGAGCCGAGATCTCGCCACTGCACTCCAGCCTGGCGACAGA GCGAGGTTCCGACTAAAAAAAAAAAAAAAACGCAACTATTCAATTCCGTCAAGTTGAGGA ATAGAACAAATGTCGCCCATTTCTGGCATTCCACAATTTCAAACCCATGTGTTTTAAATA TGGGTTCAGACCTCTTTGCATTCAAGACTCAAACATTTTGCATAGAATTAATAATTCTCA CATTTTCCTGTGAGGGAGAAGGAGGCACAACTGTGCTCATCCACATTTTATAGGGTTGGC AAGATACTGGTGTGATGTTATCCAAAGCCATAGAGATTGTTGCCAAGACTATAGTTCATA TCAGAACTGCAGTGAAAATGCAGTCATTATAATTCTAAGAATTCATTGTAACTGTAATTC ATCTCAAAATAAAAACAATGTACTTAAATTTTTTCCTGAATAAATATATTCATAAAATAA TTTTTTAGCTGACCAACCAGGTTATGCTTGAGTGAAAGTCTTTTCATAATAAAGTATAGT AAAAATGAAAAATTTTAATATAAAACTACTAAAATTAGAAACAATATTCTATTTCCATCC CAAATATTAGTTGAAGATCTTTTATATCCCATTCCACAGCTTCAAATAGTGGAGATACAG AAATTTATGTAACCCTTATGAATTTTAGGGTCCAGTTTGGAGATAATGCATTCATACAAA GAAAAAGATAACCAATGATACAAGACAGTAGTAATAGATATGATCAATTTTATTCTGTCT GCCTACGATATGATAGTCCTAAGTGTTTCCAGTATATTTTATTGTTTGAATCTCACATCT GCCTTTTAAAATACATCTTTATACTGCGGTAATCCAGATAAAGAAACAAGCTCAAAGAGG TTATGTAGTTTGCCTAAAGCGCTATAGCTAGAAGTTGTAGAGCCAAATTCGGAAACCAAG TCAGTTGGATTCAGTCTCACTGAACCCTAAGAAGTATTTACAGTAGATTCTGCCTGACAT TAAAAGAATGAGAGATGGGTTGCTACCGAGGCCTGAATTTAGCTCCTACAAATAGATAGG AGAAAGATATAGAAGACATTCTAGGTAGAGTTAAACGAGAAAAAATATGAAGCCCCCGCT ATGAGATAACTTCAGCCCCTTGGAATGAATGTCCACACAGCTGGGGAACCTTAGGATTAA TAATCAAAGATCAGGCAAAGAGCCTCAACGGTAAACGTTGAAATAGACCAATGTTAATTT ATAGACACGTTGATTTGTTTGGTGGTAGTAAAGCTGAGTGGTGGGGAACATTATGAAGGA AGTACCCTGCAGGTCTTGGTGGCTGAGTCAATAAAAAAGGGAGAAAATAAAATTGGTCAA ATGTTCCCACTTTCTGTCCCTTCCTCTGCTGTGCATTTATTCCTCTTTTGTTCTAACCAA AGAGATATTTGTAGGGTTCTAGAGAAGTCACTTCAAACCATTGGCCTTAAAATATTCACC TAAACAATGAGGGGTTTTGACTAAAAGATCGCTAAGGACCCTTCTAGCTGCACATTCAAA TGATGTTTTGCTTATGGGCATCCAATAAATAATTATTAAATAATATTTAATAAATAATTC TTGAATAAACGGACCCCTACTTTCCGCATGGGAATTTATTATAACTTCCTAAATGTAGGA CACAGAAGCAAGTATAAGGAGACTACTGGTAATGATGACTGTATTTTAGAGCACTGCAAA TTTTTTACCTTTTGATGAGCAATATAAATTAGAGGAGAAGAAGAAAGATGTAAAATTTCA CATTCAACAGGGGAAAATAAACGACAAAAACAATATTCATTTCAAAATAGGCATTTTTCT TTTTGTAGCTTCAATGGGCTTGCTGGGCAAATCTGCTCCTATCAGTAGTAAATGTCACTC AAAAAAAGGCACTATATGATTGACAACATAGAAAAAAAGCTGATGAATTATTCACCAAAG CACTAAGATTCACAGCCTATAGTAAAACAATTTACAATTAAAAAAATTATGAGAGTCAAA GTCTTCTTCACAAAGTGTAAGCCTATTTTTGTAACTAACAAAACTCAAATGCTGAAATAA AATAGAAAAACATCACAATAATCTCATGAATTTTTCCCTGTGAAAACGGAGCTGACATCT CAAAGGCTTACGTAGACTTTTTTCTAAAGATAAGGCTGTAGATGTTTTTAAAACAGCCTC TGAGAGAGATGTCAGTGTTCTTTAAGTGTGGTTTCAAGAGGATTTTAAGGAAAGTTAATA CAAAAAATCTTTAATAGAAAAAAAGAATGTTGGCTGTGTAATAGCCAGCAAAATTTTAGT CATCAAATATAGCAATTGAAGTGGAAAAATTGAGTCAGGGAGAACATTTAGTATTATCCT TTTAATAACATTGAAGACATTTGGGGTTTACTCAATCTCTCCATATTGGGTTAGCAGAGG CTCAATGAGTGTGCTTTGCAAATGTGACCTCTTAGATCAACTAGAATAATTTTGATACCT CTATCATTGGTTAAGAATAATATTGGACAACGGATGCATTTGCACAGACTCAAATCCGTT CACATTGCTAAAGTATCAACCCAAAGGTCTTTTCTTATAAAAAGTATTCTGTCCATTCTT AAACATGAAGGGTGACATGTTCCATAGCAGTGATCTAAACAAGACCTGTAAGAGTCACCT CATATATAGATCAAATATATATATGCAGATTTTGGAGTGAAAGTGCCAAGAGTAAGGTAA ATAATGATTAGATTTCTGCATAACTATTGCTGGTTTAAATGATGTGTGTTTTGGTGGGAA CTATGACTTAGATTTTCTCTCTTACAAACTTTCATAATACCTCTAATTACATAAGAGAAT TGAATTAAAGGAGAAGTCTCTTTTCCCTCTAATTAATCTCATGTCCGCCTTCTTTCATTA CTTTGTCTACTGATTAACAAAATTAGTCTTTGTTACAGAGAAGAGTATAATATATAATTG AAGTTATACTTTTTTCCATCCAAAATAGCAAGGAAAAGCAAAACAAGCAGCACATACTCT GTAGTGCATGATTTCATTTGCAGAAGTTGGATTATTTTCTGTACTTTGTGTAACTGTTAC TGAAGCCTTCAGCCTTAATGTGATCATGCAAGGAAATACTATTTTTCAATGGAATAGAGA AGTAACACTATTATTGCTCTTTCCATTCCAGTAGAAACCTACCCAGGCCACATCAGCAAT CTAGTCCTTCACTTGTATGTTCCTTCCTCGAGAAACAAGAATGTTAACCCAAAGTTGTTG ATAAACTATTATTTCTAGTTTATCGTTTACAAAAGTTAATCTCAAATCATTACACAGAAA TAGCAATGATAGCAGTATCATGTGTTAGTTAGCCTCTACCATGTTATGGCACTGATCTAT ACACGGTAGTATTGACATGTTTGGTAGTCACAGCTCATTGAGTAGCTAAGAAACTGATTA GGTAAGTGATGTTACACAACTACATGATACAATCAGAACGTAAACCTGGCACTCAGGTTC AAATTCTAGAAAAGTCACTGTTTATGCTGCAATCGGTAGCTTCAGCCAAATATCAGCATT CTAAGGCCCGAAAACTACTTTTCACCTTCACAACAGTAAAACTTTCAAGCTAGCATTCTA AATTAAGACTAAAAGGAACATTTAAAAATGAGTGTGTTTATTTTTATTTACTTTTGAAGG GGAAGAAGTAATCAGGAGTGTATTGTAACATAGTGAGGATCATAAAACATTTTGGCTTCT CATAAGTATCTGAAAACCAGAAAATTAATTTAAAAAGAATTCCAAAATGTATGGTTATAA GAACTTTTGTAAACACTCCATTCTTCAGGTTTTGTTTCTGTGGACTTTCTAACATAATAA ATAGACCACCTCCTCTATAACTTGGAAAAATACACTTTAAATAAACTAGATAAAACAAGT TTGTATTTTTAGTAGAATGCTTGAAATCATGTTTTCAATTTAGGCTTCACTTCTGATAAA ATATCATATTGGCCATCACAAATTCAGAGACTCAAGTTAGAGTTCCACTAGCCAGGTGCA GTGGCTCATGACTGTAATCCCAGCAGTACAGGAGGTAGAAGCAGGCAGATTGCCTGCGCT CAGGAGTTCGAGACCAGCTGGGCCAACATGGCGAAATCCCATCTCTACCAAAAATACACA GAATTAATCGGGTGTAGTGGCGCATGCCTGTGGTCCCAGCTACTTAGGAGGCTGAGGTGG CAGGATCACTTGAATTCCAGAGGCAGAGGTTGTAGTGAGTTGAGGTGACACCACTGCATT CCAGCCTGAGTGACAGAGTGAGACCCCATCTCAAAAAAAAAAAAAAAAAAAGAAAAAAGA ACTCTACTAAAGTTTCCATATCTTTTCGAGTTTGTATTCTTGGCCTAAGATATTTCAAAT CTAAAGAGATAAAAAATTACATAATTGGCCAATGTAAGCTTCATTTCTAGTATCACTTCC AACTATTTCTATTGAAATTGGACAAAGAAAACAAATAGTAAAAATAGCTACAAAAAATGA TTCTGGGGAAATGAAGTTATTCGGGGCCAGTCTACAATAACGAAAAAAAAAAAAAAAAAA AAAAAAGAAACCAGTCCTAACAAGGAAGAATTTTAGTGAAAATAGGAGTTACATATTCAT CAATAGTCGCAGACCTCCATGGTCAAAGCCTTGTGGATTATATTGTTTACTTTTTAAAAG ATTGTTTCTGTTGGAGATAAAAAGAGGACCAAAACCATTTGAAGGTAGAATTCCAGAGGG CTGAGAAACAAACACAGCACCACTCATATAATCCTGATTTGGTGAAATAAATTATATTTT ATGCTAAGTAGTATTTTCATTATTTCTTGCTTATGAGAAATACTTCAAGCTAGCTCACCC TAAATGATTTCATGTGCAAGTCATTGAAACGTCATTGAAACCTCTAGCCCTAAACACTAT CTTCCAAATATGTCACAAGAATCTAGAGGGAATTAAATAAAATTTCTTTTCAATGATTTT TTTAATTATTGGATTTACTATCTCTTATGCAATACTAGCTAAAACATCTTCTGTTAACTG GCATGCAGGCAGATATTAGAGGAAAAGTAATTGAGTAATGACTTTTTAAATGAATCTAAC CATGTTCTTACCTAATATAATTTAATAAATACTTATTGTCTTGTGCTTATTAGAGGAATC ATTCAAAGGTTTTGCCAGTATCTAAAATCTAAAGGAAATTCTAAAGGTATGAGTCTACCA TGCTTTGTTTAGTACTTTTATGATGACTGTGGACTATTTTAATGTGGGTCAGCCAAAAAG TGACCCTTCCATATCTAAAACTCCGCATACAATAATGTCAGGAATAAATGCTAAGTGGAA TAACCAACAGGAAGACTCCACTATTAAATAGGAGTCTAGCTTCACTGCATATCTGAAAAA ACATATTGGCAGGTCTACCTGCAAGAAAACTATTTAGTTTTGTCATCTGATTTTACTAAA GTCAGAAATGTGGCATCACACAGTGGAATGAAAAATACCTCCCATTTAATTAAATATCCT GTTGGTCAAGTATATGTCCACACTAAAGCATTATTCAATATACAAAGCACTGGTTTTTAC TGTTGTACATAAATAGCCATAGAGAAAATCGCATGATTAATTAAATGTGCTATATAGTGA CTCGCTGTGGCTAAATAAATAACCTTTGTCTATGCAGAAAATTTACACATTAGCAACAAA TGATGCAAAATAGATGTGGGAAATCAGAAACCAAAATTTTCACTTTTCCTGGTTACAGTA TAGAGTGTCAATAGTTCATACACATGCTACATTAAAACCTTTGTTATTTCTTCCAAAGAA ACATTAGGAAAGTCTTAAGTTTTATAAATAGCATGGAAACAATGACGACCACCATTCTGA TTACAAGCTTAGGACTCAAAAGAAGAGTGGTTTCCTTATTAGATCCATCATGTACTTTTT TTTTTTTTTTTTTTTTTTTTTTTTTGAGACGGAGTCTCACTCTGTCACCCAGGCTGGAGT GCAGTGGCGCCATCTCGGCTCACTGCAACCTCCGCCTCCTGGGTTCAAGCGATTCTCCTG CCTCAGCCTCCAGAGTAGCTGGGATTACAGGTGCCCACCACCAGGCCTGGCTAATTTTTT GTATTTTTTAGTAGAGACAGGGTTTCACCGTGTTAGCCAGGATGGTCTCCATCTCCTGAC CTCGTGATCCACCCGCCTTGCCTTCCAAAATGCTGGGATTACAGGCGTGAGCCACCCCGC CCGGCCAATCATGTACAGTTTTTAGTGGAGTTGGCAGTACCCAGAGAACTGCCTGTGTAC TGATGTTCTTTTTATTCCTGCTTTGTGACCTAACCTCACTAAAGTTAATACGTCCTACTT TTTACTACATTTAAAAAGGAATAAAAAAAAAAGCGAGAGAGAAGACAGAGAGATAATTGA AAGAGTAAGAGAAGGAACCAGGAGCCCGCGATAACATGAAATGGCAGCTAAGGAAATTAT GTTTCCAGGGAGATGATGTTACCTAGTCTCGGAAACAAACTGTCTCCAAACTTAATGCCT TAAAATAACAGCTGCGTATTTGCTCATGATTCCGTGAGTTGGCACTTTGGGCTGGGCTCA GCTTAGAAGAATTGTCTTTGCTCACTCATGTCCTTTGTCGGGGCAGGTGGCATGACTGAC CCTTCCCTCTCCTGGTTCTCTGTCAACCTCCAGAAGGCGAGCGGAAGCTGTTGGTTTTGT TTTGAAATGTGGCAAGAGATGCACCAGAGAACAATCTTGCTTCAGCAAGACCTTTTAAAG TATCTACTGGCTCTACATTTGCTGACATCCCATTGATCACACTCAGAGGAAATATAGGAG AGATTCAAACAAATGCCAGAGTGGTGAGAAACACTAGTTATTGGACGCAATTATTGTAAC CATCGACCCCAAATGCTATAGAACACATTGTCTAAGTACCATTTGATGTGGTACTTGGAG ACAAGTTTTAGAAGTAAGTGTGGGGTAAACAAAAAAGATTGAAAATGTTTTGTTTTGTTT TGTTTTTTAAAAAAGAAGAAGATGGGCCAGGCACGGTGGCTCACGCCTGTAATCGCAGCA CTTTTGGAGGTCGAGGTGGGCGCATCATGAGCTCAGGAGATTGAGACCATCTTCACCAAC CTGATGAAACCCCATCTCTACTACAAATACAAAAATTAGCCTGGCGTGGTGGCGCTTGCC TGTTGTTCCAGCTGCTTGGGAGGCTGAGGCAGGAGAGTCACTTGAACCCGGGAGGCACAG CTTGCAGTGAGCTGAGATTGCGCCAAGGCGCTCCAGCCTGGGCAACAAGAACGAGACTCC ATCTCAAAAGAAAACAAAAAAAAAGATGATGAAGAGAATAGGAAAGGAGGATTAATTTCA GCCAGGCGCTGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCAAGGCGGGCGGAT CACAAGTTCAGGAGATCGAGACCATCCTGGCTAACACGGTGAAACTCCGTCCCTACTAAA AAATACAAAAAATTAGCCGGCTTGGTGACACGTGCCTGTAGTCCCGGCTACTCGGGAGGC CGAGGCAGGAGAATGGCGTGAACCCGGGAGGTGGAGCTTGCAGTGAGCCAAGATCAGGCC ACTGCACTCCAGCCTGGGCGACAGAGCGATACTCTGATTAAAAAAAAAAAAGAAGAATAA GTAATTTTGTGGGGGAGGAAAGCAAAGAAACGGGGCAATGCAGGAAGAGGCAGCAACATT AAAAGAATATTTGTTAGCTTGTTTTTTCTTTTTTTTTCTCCTTGTTCCTTCTAGCTTGAA GTGATTTCAGCAGTTTTGTTGCCTGTGAAGAGTTATAGAGAGGAAGAAATAAAAGTTCTG AGAGATAAAGCACAGCTATTCCCTAGGCAAAGATTGGTAGATGGAAAAGAGAAAGCTAAC TCTGGTCTCCCTGAGCCCTGAACTGAGTGAGGTGTGAAGGAGTGGAAAGTTTATGCCTGC GCGTTAATGATTAGACATGGTAATAATGCAGGAGGGTGTTTATCTGCACAGCGATAGAGC CAATGCTCAAACTTCCTTGCCTCCCTTGCCTTACATCTTTTTGCAGCTGTGGAGCTCTCC AAAGCTCTGGGAGAATTACCTGATTCACCACCTGCTATAATTGGATTATGAAGACCAATG ATGCTGTAGAGCCCCTGGCCCTCAGAGCAGGATCTCTACATGATTTTTGATTTACAGAAT TCCCAATTGAGAGGAAAAGAATATTTTCCATACCCTTGCAGTTTAATCCTTGAGAGTTCA AACAAAGATTATTTGCCCCAAAAAGAATATATACATATGTGTGTGTGTGTGTGTGTGTGT GTGTGTGTGTGTGGTATTTATGTAGTTGTAGTTGAATGGTCTAAAAAGTCAAGAACCATT TAATTACTAAAAGTGTGCTTAATGTTTTTTTCAATATAAATTAGTACCTGAGCCTTCCCC TCACATATATTTGTCTTATCAGACTCTACTGACACCACTGCTAATAAATTATATGACAAT CACTGTGCAGTGTTCAGTGGAAATACAAATATGGGCTCTGTCTTGTCTTGGGATGATTTA GAATGTTGGTTGATTACTCTCCTGATACAGTGTTTATATATACAATTTCCCACACTTCCT GTGCAGTCATTGATATGAATAGCTTCAGGGAAAAAAAATCTAAATGCTTGCCAAAGGATT TTGCAAAATCACTAAAATAATATAATCACTAATTTTGTTTTCAAATGTTAGTGAGTCAGA AGAAAGAAAAGTTCATCTTCCCACTATGATTTCGGGAAATCTCCACCACCACTTTTGTTT CCAAACCTGAAGAAGCTAAGGAAAGACCTAGTTTACTGATGGAAAAGAAAAACAATCCTG TGACATCAGTGAGAAGGACATAACAGGTTAAAGTTATAAAAACTCAACCCTCCTAGGGGA GAGAATGTGTTTTCTCAAAAATATTTAAGGCAGTCTGAGAACTGCCATTTACATCTTTTA AAAAATGCCAGCTGGGAGACTAGACAAGAATACTTTTGAGACTTATGTAGGCAAAAGAAT TATCTAGGAGCCATATTTTCACAAATGAAGATTCCTGACCCCTTTATCTTTCTTCCCAAA AGCTCTTAATTTTTGAAAACACCTTTAGTATTTATAATAAAGGTGTTTCTTGGGCAAAAC TTTGGGAAATGTGAATTAAACATGTAGTCTACTGTGCTCTTTCCAGGTTTGCAGCCTATA CCTCTCCAAGTCCTCATGGTTGCACTTGGAACATCTACCCTCTTCCCACAGATAGGTTTG CAGTGAAAAGGGTCTCAGTTTACACTGATGGATAATGCTACATCAATTTAGATGGCGTCA ATCAATTTTGTTTTAGGCGTCCGACCTGGCCTTTTACTATTTTCTTCAACTGGATCCAGG TGCCATTTGAAGGAAAGAGTGATGCCTCATGCTGGTTGCTGACACTCTTACCACCTGGAC AGTATAAGGAAGAAGGGAGAGAGATGACAGAGTTGGCTTCCAATCCACTTCCATAATAAA GCACTTTTACAGTGTCATCACTAAGGTCATCCAATGGGAGGAATAATCTGAATGGATCAT GTCATCATCATTTTAATGTGCCATAAGACTCTAGCCTTAGGTAGCAAAGTGACACTCCTA CTGGAGGAAGGCGTGAAGGTGGATGAAGGACAGAGTAAAATGCCTTCGCATTCACCTACC ATTAAGGATGGAGTAAATTGCCTACCAACAAGTGTTCAGGAATCTCTGTCTCCTGGACTC CCTTCATTCTAGCCCCAAAGGAACTTGGATTTCAATCAATGATAGCATTTATGGAATGAC CCAGGGTTTGGCACTGAAGATACAAACATGATTAAGATGCAGGTTCTGCTTTGAGGGACC CCAAACTCCCCAAAATCATAGAGAAATAAAACCATGGACATTGTAAGCATTAGAATAAAG ATACCTATAAAGCAATATGGGAGCATGAGAATAAATGTCTGTAGAGTTATGGAAAATTAC ACAGAGGAATTTAACATTTAACTGCGGCCTGAAGGATAAGAGGCTGGTCCTAAGCAGTGA AGAAGAAATGATACTACACATAGAAGGTGCTGGATATGGGACAGCACAGAAGAGTGACAG AAGGTGGCATTTCAGGGACCTGATGTAGCTGTATACAAAATGTGGTGCTGGAGAACCACC GCTGCTTTCAGCTCAGGTAAGAAGAGTGACGCCATCAAGAGATTAATTCAATGAGTCAAT ATTTAATAATCCCTGCAAGAGGTGTTTGTAAAATAATAAAATAGAATAATATAAACACTT CATAAATGTGTCACAATGAAAGTTTATCTTTTATTCTTTTAAAAAATATATCAAGACCTT TAAGGGCACACACACACACACACACACACACACTCTAATTCATTGAAAGCTCATCTCATT AAATTAGTATATCCAGTAACTCTGACTGATGTGTCACGTATGGAATTTCTTTACAGCCAA CTGTCACTCCTTTACAGCAGTTGAGAAAGGTCTAGAGTCACATTGGGTCTTCAGTGTCTG CACAGGTTTTGAATCCGTTTCATTTGAGAGCATAATGATCGCAAAGAGGACCTTGAATAG ACCCGCTCTGAAGAACTAATCAAGAAGAAATTCCCCAAATCAGTTAACCACTTCATTCCC TTTGTGATAGGAAAAGATGACAGAAGAATACAATATAGAAATGAATTCCTGGTTACTATC CGTTCCAATAAATTTGGTTTAATTGGCTCAGCTCTAATTAAGAGACATAAGCCTAAAAGA GGGATTACAGGAACATAAAAAAGTGTATTGAAATGCAAATGCACCATAAACTTGAGGAAG TTGTCTTTTAGAGAAATTTAGAACTATCCAGTTTCTAATTTTTATCTTTTTAATTAATAG ACTTTTTACAAAGCATTTTTAGGTTTACAGTTTCAAATTAAAAGAAAGTACAGAAATACC TTATACCCTCTCCCTGAAAAAAGTTTCCCCTATTATTAACATATTTTGGTAATGTAGCAC GCTCGTTATATATTATATTGACACATAATTATTAACTAAAGTCCACAGTGGACCCTAGGG CTCACTCTTGGTGTTGTACATTTTATGAGTTTTGACATATGTATAATGCCATGTATCCAC TGTCACAGCACCATGCAGAACCATTTCACTGCCCTAGAAATCAGTCACCTGTGCTCCACC TATCATTTGCCACTACCGCTCCCACCATGGATCTTTCTTTTTTTTCTTCTTCTTTCTTTT TTTTTTTCTTTTTTTTTTTTTTTTTGAGACAGAGTCTCGCTGCAGAGTCTTGCTCTATGG TTCAGGCTGGAGTGCAGTGCTACGACCTCGGCTCACTGCAAACTCCACCTCCCGAGTTCA AGAGATTCTCTTGCCTCAGCCTCCCAAGTAGCTGGGAGTACAGGCGCACACCACCACGCC CAGCTAATTTTTGTATTTTTAGTAGAGATGGGGTTTCACCATGTTGGCCAGGCTGGTCTC GAACACCTGACCTCAAGTGATCTGCCCACCTCGGCCTCCCAAAGTGCTGGGATTACAGGC CTAAGCCACTGCCCCTGGCTGAGGTTTTAACTCTCTCCGTAGCTTTGCCTTTCACTTGGA TGCTTTTCATGGCCTCAAGGTCTCAGAATTTCTTTGACTGTGTTGTGAATTTCTTCTTAA CCTCCTCTTATAGATTCTAGTTCCATCTAGTCTCTCCCAATCACACCTATTTACGGCTAC ATATATGTCCTGAAATTTTCACAGTAATCAGTAATGTTGGTTTAAGCTTGAAGATTGTCT TTCTTTCTAGATCTTTAGCATTCTGTTTTTATGTTTTAATTTTTTATTGATAAGTTGTAG CAGTATATACATATGGGATACAATGCAGTGTATTGACACACGTATAAAATGTGGCATGAT TAAATAAAGCTGATTCACATATCCATCACCTATTGTTCACTTACCTATTGTTTGTCATGA TGAGACATTCAAAATATATAATATGTTATTAGTTGGTTAACTTGAAATCTATAACACGTT ATTATTGACTACATTCCCCGTAGTGTGCAATAAATATCAAAACTTATTCCCCCTGTCTTA AACTCTGTGCCCTTTGATTAACAACTCTCCAATCCCCTGTCTATCAGAAACTTCATAAGA TCTTTGTATTATTTGGTCAAAACATCCCATTCCTCCCCTCCCTCCCCAGCCCACTCCCAG CCTCTGGTAACCATAGTTCTACTCTCCACTTTTATAAATTCAACTTTATTAGATTTCACA TATAAATGAGACCATGTGGTATTTGTCTTCCTGTGCCTGGCTTATTTTACTTAGTCTGAT ATCCTCCAGATTCAACCATGTATCTTGCTTTGCCCAATAAATGAGAGCTGCTATGTTGGG TGAAAGTCGTGGAGCGTATGCATTATCTGTGTTTTCTTTCCCCTTGGCATAGAGGTAACT TGCTTGTTGCCCTAAGGACAATGTGGAGCAAAGTCCCAGGCAGCCTAAAGAAACATGTAG TTGAGCAAGAAGTAAACCTTTTATGTCCAAATCACTGAAATTTGGAAATGATTTATTATC TACTACTGAAGCATAGTGTGACTATAACTGATAAAATTCTTATTTATAAAAAATTTTAAA ACATGTCCATGATATATTTTAAAGTGAAGATGGTAGAATTGTGTGTATATTAGAATTGAA CTTAAACAGAAAAAAGATATGCTCATATGAGACCAAAAAAATTATTGATGTATAGACATG AAAATGTTAACAATTAGTAAGCTATGGGAAGTAAGAAATTATGAGGAGGAGGTGGAGAGT ATTTCTTTCTACATATTGTACTTTCATTTTTTAAAACAAGAAGCAGGGGTCAGGTACAGT GGCTCATGCCTGTAATCCTAATACTTTAGGAGGCTGAGGCAATATGATAGCTTGAAGCTG GAAGTTTGAGACCAGCCTGGGCAACATAGCGATATCCCATCTCTACAAAAACTAAAAATA ATTTAGCAAGATGTGGTGATGTATGTCCATAGCCCTAGCTAATCAGCAGGCTGAGGCAAG AGGATCACTTGAGCCCAGGAATTCAAGACTGCAGTGAGCTATGATCATGCCACTGCACTC CGGCTTGGGTGATAGAGTGAGATCTCCTCTCAAAAAAAAAAGAGAAACAGGTACTATTTC TAAAGTTTAGTTAAGAAAAATTTATCCTGATTAACTAGACAATAAACCATATAATAACTC TAAGTTTATTGAAAAGTATTATATATGCATGAGAATAAAATGATTAATAAATGTGAATAG CAAGTCCAGAGAAGATTTAAATAGAATTCAGAGTTAAATGAGTTTATTTGGTCGGTGCAA AATCAATTGTGGTTTTTGCCATTGCTTTTAATTGCTTTTAAAAGTAATGCTTTTACACCA ATCTAATATTTCAATTCTGTGCAGCAAGAAATGTTTATTCAATGAATCAAGTTGATACAT TGGTTAAACGTGAAAAAGATTACGTGAAATCCACACCTTCTCTTTTTAGCAAAATAAATT TTAAATTGAGACAGTTATAAATTTAATAAAATAAATCACATAGGCAAATGATGAATGTTT AATGAATTGGGAGGGCTTTCTAACTGTGATGCCAAGGCCAGAAAGAATTATGAACAAATT GATAGATTTGATTACATAATACATACACACATATATAAATCACAAAATAAAAGAAATTTT GCAACATATCAAGCTGTGCCCAATCAAAAATGTGTAAGTCTACCCAATAGCACAGCAATT ACATTCATTCCTGGGTTTAATTTACCAAAGATTACTATATTTTTTGCACAAATGGACTGT TAGGGTGAATCTGGGTGCTCATCCCCGGGATATTAGAAATGGAAATTATGATGAGTAAAT AGCATGTAATATTTTGCAAACGTTAGAAGAAACAATTACTAGATATACACCAAGCAATAT GGATTAATATTTTACAAAGCATTGTGATAAATGAGAAAATTATAAAATAGAATAAGTTCT AAACATAGCCATTTAAGTGAGCTAAGTACGTGTGTGTGCAAAAGAACAACATATGTACAA GAACACATGCGAACAAAAACTGTACAGTAAGTAGTTTAAAATGTACAGGGAATTGTGTAG GGGGAGATGAGAGATGGAAGGGGGGACATGGATGTATCAACAAATATAAACAAGAAACAA AGAACAAAACAGGATTGGACTTTTCAGAGATCACTGATAATTACGTTCTTTCGTGATGAT GAGTATAATTAGCTCAACTCAATGCACTTGAAGTTCAAAAAATATATTTGTATTTTTTTT AAAATAGGCTAAAGAATGAGCTAATAAATTAATAGCTAATAAATATGAATAATAAATACA TGAAAACATTCACTTTGACTAGCAATTAAATAATAATAATAATACAGAAGTTTATATGTG TTTATTTATTGACCTGTTTATTGAGAAGTGGGAGAAAAGATGGTATTTAGAAATATTATT CTTAATGGCACTAGAAAGTAGTAGAAACTTTTTGGACTACTCAGATAAGTGTCAACAATA CCTGAACAAAAGTTTTGATTATAACATTGATTGTAAAGGCTAATAGTTGGGTGAGAACTA GTTAACACTTTGGGGTTTGTTCAAACAAATTCTTCATCAAACAAATGAGTATTATGTAGC CTTTGAGGGTTGATGAGATAGAGGATTTTTTCTCTTTGTCCCTATATATTATTAAATCAT GTCACATTGAAATGCACTATTTTCTGCAAAACATGTAATAAGTAAATTTTTAAAATTCAA CTAAAATAAATTTGAGGGTACACTAAAAATTCAGCAATTCTGGGAGAAAAGTTCTGCAGT TTACATTCTGTTCTATGACCAGTAAAGTATTAGAATTTTAATATATTTTATGTTGCTTCT TTCACATAAATATCTTAAAATTGGCTTTATTGGCTTATAACTTCATACGTTTCCTTCCCA TAATTAAGAAATGTTTGTGATTGCTGTTAAAACTCTAGATTTTAGACTATAGTTAAGTGG GAAAAAATACACTTATTTTTGCATTAAAAAGGCTTTTAAAAAACATGCACTAAGCCAGGT TAAAATGTTTCCTGCCTAGGAAATAGCATAAAAAGCATTTTTTCCCCCATTAAGTTAATG CAGTAGTACATTTTGATAAATGTAAATTGAAATAATTGCAAATCTGATATATGTAATGTG AATTCTTGATTTGGAAAGTAATTTATGACCAGCAGTTATTTTTTAAACACAAATATTACT TTTTTTAAAGCTAATCAGAACTTTCAGATATGTCATACTGAAAAGCCTGTACTCTGATAA CATTTATTCCCTATGATATGGAAAAAGAGAATCGTTTCTATTCTGGAACAAATGCTGAAG ACACTGCACGCCTTTGCTTGGCTCTCTTGGTTAATGAATGTGTTACTTAAAATAATAATT TGCTCTTCAAATCATCTGGCCACACAGACCCATATTTCCCCCCATACAATGCTGTTTTGC TGATATTAGATTTACTTACCTTTTAACGGGATATTTATGCTATTTCCATGAACACACTCA TCTACAAAGATACAAATTATCCAAGTAACAATACATAAGAGACCCGCATGGAGGTCTGGG TTAGCTGTGTACAGAGAAAGATGCAGGGCTGGAGCAGAGCTGCATCCTGATATGAGAGTC TATCACTTTTTTCCCCCTCTGAAGCTATGGGGAATGAAGAATTCACTCTTTTATTCGTGG CGTGATGGCAGTTCAAGGTTTTATTGAGGATGTGGTCTGGCAATGGTATTCTGCAACCCA CGCACAAAACATAGCACTAAAATCTTTATAATTAACTGCATATGATTTAGCAGGGTCATT TAGAAGGATGATTCATCTGCAGTAGGTGTAAACTGGCTCACTAAATCTAAAGCTTAGAGG GAAAGACAAGACAGAATAGTTTCTTGATTCCACTTTAGGCTAATAGCCAGGTGACTCAGA GTCCTTACGAGCCCTGATTCAAGCTTCATTTCTCAGCACTGTTAGCTGCTGGAGTTACAT GCCCAACAATTCATCTTTTTGCATCTCAGCTATGTAAGTCTCTAAAACCAGTTTTTATCA GGGGTCTAGGGATTGTGCTACCTGTAAGTCTATGCTCCAAACTACTAATATTTTTCTTCA TTCTTCTTTGAATTTGAATGTGTGTTTATGTCTAAGGTTTTTTTTTTTTCTCCCAGTTTA ATTACACGTTTTGGTAAAATTGTGCAGTGGGCACTGCTTCTCTTCAGTGTCTTTCCATCT TCGTGCAGGCTGGTCATGTCCTGTCTTCTAATGCTACCTGAGCCCTAGCACTCCAGGAAT TCCATTATAACAGACTCTTTCTCCAGGCATCTCTTGAATTCTACAAAAATCTTTAACGTT TTCTCTTTACACTCTGCTTTCAGCAAGCTGCCAATTAGAAAAGATCTGAAAATATCATCC TCTAAGTGGTTAGTAGCTCACAGTAGTTCACTGTATTCTCCTCAGGAGAACTTGCACTGC AAAAGGGAATGGATCATTGACTTTAGGCAATGTTCCACAACTAAGGACAGCAGAGTCTCC TGGAATGAACTTTTAGAAATGCAGATTCCTGGGCTGCCAGAATAAGAATACATGCTTTCA AGAATCTTCCAATCTTCCCAGATTGGGAAATGACAACTATTAGCCTGGAACAATCAAACA TTTGGATATCACCATATTCAGGTACAAAGTTAGGGTTAAAGCAAAGGCTATTTGTAACCT CAAGTACTTTCTACCATACCTCCTAAAGAAATTGTGTATGCAACCCACACACACACACAC ACACACACACACACACGTGAGTGCTATAATTTGGTCCCATGCCAAATGTCAAGAAGAATA GAGTCAAGTAATAAGCAATATCCATCCACTGCAACCTTTGGGATAAACTATACTCTTGGT TAGCTCAGGATCAAGCGTAAAAACATTCCATTGAATGTATATTACAAATTAGTTACATCT CTTGTTTGGAGGGAACTGCATTCACTTCACCAGCAAGGGTATCTTTTTGATACTGTTGAC TGTTCACATAACCCAACAACAGTCTTTTCACAGTATTTTTGTTAGTTTATTACAAAACCT TTTATTGTTATTGTGTTTTATAAATTCCAATGCAATGAAATACATTCTACTCTTTGTATT ACTACTGTTAACATTTTAATGACTATCTCTGCATTCTTTCATTTATTATTTCATTCATTC ATTCAGCAAATATTCCAGGAACTATTCTAAGCTCTGCAAACAAGCTACATAAAGCCCACA TACTCAAGATAGCATTATAATGGTGCAGGTAAAAATGAAACACATAAGTTCCATGAAAAT GTCAAACATGATTAATGGGACTCAGATGTCCTAGGGGAAGGAATGCTACTTTACATTGAA GAGTAAGGTGAGGCCTTTGCAAACATGTTGCATTTGAGCTGATACCTGAATGATAAGAAG GAGCCACTCGTGAGATGCTCTGGGGAATTGAAATCTATACAGAGGCAATGATTGTGCAAA GACCTAGGGTGGGAATAAGCTTGGCATACTTGAGGATTAGAAGGAAAGTCAGTTTGATTA GAGTATGATAAAAAATATGGAGACCGATAGCTGAGGTGGGAGAAGTATTAAGGCCTAAGC CACATATAGCTGTACTGTCCAATACAGGATCCACTGGGCACATGTAGCTACTGAGCACCT GAAGTCAAGCTACTCTGAATTGAGGTGCACTCCGGGTGTCAAACACAAATGTAGACTGGA TTCTGAAGATCTAGTATAAAGAAAGTATACAGTATATCTCATTAATAATTTTATATGGAT TATGTATTGTAATGATAATTTAGAGATACATTGGATTAAATTAAAATATTATTACTATTA ATTCACTTGTTTTACTTTTTCTAAAGTGCTTATTAGAAAATGTTACATTATGTATGTGGC TTAACTTAAAGCCTTGTATGTCATAGTCAGAAGTCTCGGTTTAAGCAGAATGAGAAATAT TTAAAAGATTCTAAAGAGGCGTTACAATATGAATTACCGTTTTTTGGTTGTTTTGTTGTT GTTGCTGTTTTAAGACAGGGCCTCACTCCCGTCACCCAGGCTGGAGTGCAGTGGTGTAAT CACGACTCACTGCAACCTGAGATATAGAAAACAGGGATGATTTTAGTTGTCATTATGAGT AAATGGATGGTTGGGGGCCATTCTATGGGATGGAGAAGACTGGGATGGGAGTGTACTTGA GAGCAGGAGAAACAAGGGTACTATTTTGGAAATATGTTGAGATGTCTGTTGAACATCTGA GTAAGCTCTTCAATAGGGAAGTCATGCAGAGGAGGAGAAATAGACCAAGAAAGAGGAACC TAGTAATTGCGAGAAAGTAAGTGCTTGGTGGTATCGCAGAAGTCAACCAAATAACTTGTT TCAAAGACCAGAGAGCGGTTTACGATGTCAAGTACTGTTCAGCAGGCAAGGAAGATGTGA ACAGAGACCTGGTCATCGCATCTGGCAATATGGAGATAGTTGATAATCTTGATAAGAGCA ATTTGTGATGGTGGTAGCAATGCCAGTCCAACTAAAGTATATTGAAGAGTAAATGGGAGC TAATAAAATTGGAAATAAAAAAATAGAACTTAGCAGATCTTTGAAGATTTGCTGTGGGCA GATAAAGGGAATAAGAGCTGGAGACACACTGTAAGTTTTTTGAATTTAAGACTGATTAGA GCTTATCTGTGTGCTAAGGGGGATTATTCAGTAAAGCGGAAGAAAAATGATGCAGTAGAG AAACAGAATCATTGTAGACAAAGGGTTCTAGAGTAAACTAATTGGAATGGGATTCAGACC TCAAATGCAGGATTGGCCTTTGATAAGGTTCTGATGCTTCTCCTACTACATCTGAAGATA AGACTGAGTAGATGAGTACAGATATAGGAGGGTATTTTTCTCCCCACCTTCCCCTGTGTG TGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTTTGCAAACCCCCTCTCA TACCAACTTTTCACATTTGTGCAGTCAAACGCTCTGCCACTGAGCTACACCCCCAAATTT GTAACACTTGGACACACAATTTTAAATTCATTAATCTGGTGTGTTCTAGTTTCAAATGCT GTTACAGAAAAGTTTGGTGCCCATTTTAGCTGTGATCCTTTGCATAAGACCTGTCCTTTA ACTCTTGGAACTTTCATGATCTAATATTTTGAATCCTCCCAAAATGTGACTTGGTTAAGT CTTTTGTTTAATTCATTATTCTGAACACCCACAGATTCCCTTCAATCTGCAGACTCATGT CCCTATTTTGGTGAATTTTCATTTGTACTGTATTAGTCCATTCCCACACTGCTAATAAAG ACATATCCAAGACTCGTTATTTATAAAGGAAAAAATTAATTGATTCACAGTTCAGCATGG CTGGGGAGGCCTCAGGAAACTTACAATCATGGCAGAAGGGGAAGCAAACACGTCCTTCTT CACATGGTGGCAGCAAGGAGAACTGCAGCGTGAAGGTGGGGAAAAGCCCCTTATAAAACC AACAGATCTCATGAAAACTCATTCACTAACACAAGAACAGAATGGAGGTAACTTCTCCCA TGATTCAATTACCTCCCACCAAATCCCTGGTGGGAGGTAATTATGGGAACTACAGTTCGA GATGAGAATTGGGTGGGGATACAGCCAAACCATATAGGTATTATTGCTTTGATGATTTCC TCCTCTCTAGTGTCTATTTTCTCTCATTCTGGAATCTCTATTATTTGGACATTGCCTTAA TTGTTCCTAAAATGGCCATACCTTTATTTCTTACAATCCATGTGTTTGCCTATATCTTCT ACCTTCTAGGAGTTTTCCTTGACTGTGGAAAGGAAAACTCTTGCTTTTGTTTAAAATTGT TTTGCTACAGTATTTTTCATGTCCTATAGCTCTTACTTTAATATCCATTCCTTCTTCATA GCATTCTGCTCTTCTTTAATGGGTCCACTATCTTCTTATGTCTCTGAGTATATTAAGTGC AGTTTCTTCGAAGCTGTTTTTGCCTTCAACATTGCCTCTGCTCCTTCTCAGCTCCCTGTT TATCATTGGTTGCTTTTTCTCTTTTCATGTTAGAGGCTTTTCTCAAAAGTTTTAAGATGC TAAGCTATCTGTTCATATTTAAAGCTTGCTTTTAAGCTCTGTGTGAATGGCAGATTGTTC TGACTGGTAGACTTCACTCTTTTAAGCATGATCCAAGCTTACTCTCTGGGATGGTTCAGT TTCTCTATCTAAGGATTCCTCAAATTCTTGATCCAGTTTACATGCCTGACTTCTGGGGAG GGGGAGGTGGTCCTGAACATCTAGTTGCTCTTAATGTAAACTTCCCAATTACCCCAAGCT TACGTCCCATCTCCAAACACACTTCTTCCTATAGTCCTGGTTCCTCACCTTCACAAGTCA AAAGAATTTCTATAAGAGAACAGATTAAAGTGTCCTTACATGAATTCTAAAGAACAGCTT TCTTCTCACTGATAACTCCCTTTATAGGTACATATGTGTGTATGTGTGTGTGTGTGCATG TGTGTGTGTATTTGAAGTTTCTCTAACTTATTAAGTAATTTATCATTCATACATCTTTGC ACCTTTGTATATTTAGATTCAGAATTATAGATAACTCCTAATTTAATAACAGATGAAATC AGTGTTTCTGCTTCCTGGTGGGGGCAGAAACTTTGCTAAATTGTCTTCTTATACCAGAAA TCCATTAAATTCAATTTTAACAATGACATTCTTTTTAACAAGCAAGATTATAGAAAATAT TGCCCTTCAGATATTCCAAATTAATAACAATACTGTATTCAACATGTTTTATATTGCCAT ATCCATGCTGGGTATTAAATTTTATTCTGAATATTAATCAAAGTAGTAGAGAATGAATAT CATCTTGTTTGAATTTGCGTATTTAAGATCTAGAAATGGTATTGTCTCCTGGAAAAAAAG GTGCCTAAAAATTTAGAACAGAGCTGAAAACCGCTAATTCTGCTTTCCTAGTGAAACAGG GAAGACTTCATGAAAGACCTGATATTTCACCTATATCTTCAAAGATTTGTCTACTTTAAA AAAAGACATTTAAAGAGGGAATTATATATCACAAGAGAATGGAAGCAAAAAAGGCGACAA GCATGTTCATAGAATAGTGAGAGATTTGAGATATGGGAGAACAAAAAAAGATAACATATG AGAAAGAATTTTGAGAAAAGTCAAAAGTTTACATGAATTCAAAGACATTATTCAAAGGCA TTATTTTTATTGATATCGGTTGCATTTTCTTCCTGGAGTTTTACATCTTCTCAATGAATA ATATATATACCTAATGGTCTAGTTTACAAAGAACCCACAAATCTTCTTCAAGAGAGCCCT AGAAGAGATTCAATTCCAATTTCATAAGAATTATTACTTGATAAAGAACTCATAAAACTG TCATAGTTGAGAATTAGGCTATAGCCAATGGTTGCTATTCATTGTGCAAATTCCCCTAAG CCCAGCTGTTTTCAGCACACGACTCGTGGGCAATTCCACGTGCATAGCCAGTGCCCATAC CAGGAATGCCTGTCTGCTGTTCAAGGCCTTCTCCCTTGCCACAGGAGACCATGGAGCTGC AAGCTAGCTCAACACACAAAGGCAGGGGAATTAATACCCCAGGATAAATCCTTCACAAGT GAGAGTCAGGAGTCTTGAGGAAAGCCCCAGCAATCCTGTCCTCTAAGGAGACAATGCTAA GGACTGTTCTGTACAGTTCCTCAGAGGCTCCATGGGGACTGAGCCTCTACTTCCTCACAG AAGCAATTGCATCATGGAGCACATAGCTGACTCCTCTTCCTTCTTTTTCTCATTTTCCTA CCTCTCTCACTTCTGCTTCCTAAAATGTCCCCCTGAATAAACGATCTATACCCATTTCTT CTTCTTGGGCACTGGCTTTAGGAAAATCAAAATAGGATGGATACTTAACAAATGATGTGC CTCTACTATTTATCTGTTTCTATCAACCCAGTATAATTTACAGGCATCCAGCTTTTCCAT TTCCTTATTAGAAAAAATGAAAAATAGTTTTCAGTTATGGCTGGTGTTTTTTAACTTGCT GGCACTGATTCTGTGTATTTTGGATGAAAACTTTATCCATGATACATAAAGGGAGGACAC AAAACTGAGAACCAGAAAATCCATATTTTAGTCCCAGGTTTTGTACTACCTAGAAGTGAG ACTATATAGAAATCATTTTCTCTCTCTAAAACCTCAGCTTCTTGCTTTATTAAAATGAAG GTGTTGATGTAAAAGATTATCCCAAGGCTTTGATTTCATTATTCCATGAAATTATAAAGA GGCAGGCCTGCTTTGGACAAAGCTGTCAGTTGGACATGTTTCCCGGTGGTCAACAGGACA CAGTTGGGAGTCTTATGGGTACCTGCTGCCTTGCTTCCCCATGCTTGGAGCAATTTCTGA CCAGTACTCAATCCAAATCTATCCCTTGCTTGGATAGTTCCTAATGCCTCAATAGCCCAC AGCTTTAAATATACACACATTTAATATATGTGAATAACAAGTTCTATCTGCTTCTAAAGA ATATTACGAAGTAAACCATGTTAACAGGAAATTGACTAAGAAAGACAAGCCCACAAATTC CATGCTAGCCCTGCGTTCTTCCCACCTTCTTATACAACCCTCTTAGGTAACACACATGAA TGTAAGCGACCTTCTCTACACCAGTCACCTGACTTGTATTGTTCCTCAAGGGTGAGGAAG TGTCTAGACGAAAGGGAGGGGAGACCCAGTGGTAGGTGGAACTTTGTGCTCCACCTTTCA CATAACAGGTTGCCAATTCAGCTGTACTGAGGACAGGCAATGGGAGAAGGCATTAAAAGG GAAAACTGAAATAGTTCCTTTGTTCTGACTGTAGAAATGCTGAAAGGAAATTCCTGTTTG CGGCAGGTGATTAAACACATTTTATTAGAGGCTGTTACACAGAGAGAGTTACTCACGCTG CATTCTTGCAATAAAATGGTTCATTTTCTCAGTTTTCTCATAATTTACTTTTCAAATAGT ACTAACTAGATTTATCAACGATTTGATAACTTCCAGACTGCCTGTCAGAGTCCATTTAGG ACACTTTAACCTGTTCTTTTATGGCAATAAAGCTCAAACTTATCCACCAAATTCCTCCTA AGATAAAGGAGTATGAAATTGTATTTAAGGTATTGTGGTGGACGGGTAGCTGACTATGTA GCTCAAACTGCCTGAGGACAAGCATGAGATTTCTCCAAAGCTTTCTCCTTCATCTTAGAA GCGCTCATGAAATTGCTTTCTACTCAAAAATAATAAAATTCAACTTACATTAATTTTAAA ATTTTATATGAAATTATTTGCTAATTTCATCAAAAAGTTTAAGGAAGAATAGCATGATTT CGATTTTATGCTATATTCTTGTGCTTTTCATCTATTTGCAGGGTAAAAGAGAAATCTCTC TTTTCCCTCCACACCTCTGAACTCTTCCTATATCATGTATTCAACCTGGAAGGTAGACTT CCCCTGTTAATTATGAAGCATAATTTCTGTGCATCTGAATTCCTATACCATGTCTAAATG TGAAATTCAGTGTCAATTTCATTATCCTTGCCAGTGAAACATAAGTATCAAAATTGTCTA TCAAGTGAAACTGGAAAAAAGGGGATATTATGGCATTTGTATCTTCAGACTTCATTATTC CTAATGTTTCCCATTATAGCCTGTACCAGCTGGACAAACCTAGAAATTATTTTTTGCTGC TGGCATCTTATCTTTGATGATATGTAGGGTAGGGTTCAAAGCGAACACCACACACAACAG AAACATTGATTTTGTTCCCTGTATTCCTTTACTTCCTTTTACCCCACAGACTCCTTTAAC TTGCATTTCCTCCCTTTTATTTGACAAACCCACCACTGCCCTCCTCAGAGCACATTTTTG TAACTTTGTTTCTATCCCACATTTTCCTGTATGGCAGATACCATTGTTTTGTAATATGAT AAAAACATAAAAAGTTTTTCCTCCTCATTTAACCACTCTCTATGAGTTTTGTATTTCAGA AATCATTTCTTTTCCTTGCTTAATCAATTACTACTCTGCTTTCCATAAATTCAGTAAGCT TGATAGCAAAAATCTGCCAAATGCTTTGACTATCACAGAAAGAAACCCCTATATAAATGT CTGCTATGATTTCTATTACAACATGAAGACACTTTAGGGTATGTTTTATTGGTCCATTAA TAAATGACTGGAGAGGTAAAGATATCTGGCTAGAAGCCCCATTTTTTTACAAGCACAAAA GATGTGGCTTAATGAAGCAATTAAAAATTCTTTCATATCCCAGGGCTGTAATAATATTGG GAAAAAGTAAATGAACTACTAAAATGAAGAGACAACTGTAAATATAGAAAAAGACCAAGA AGCTTTAACTTCCATAAAAATAATGAGAAACGTAGGACAGAATTTCAAACAGTTGTCATT TTACAGAGCACCAGAACTGATAAATTTAAATATTTTCTCATCAAAATAGATATCTTGTTT TACAGAGGTGAAGGAAATATAAAACGGAGAAATTGTCCACAAAAGAGTCAGACAATAGGA CAGTATTATGTAACATCAGGGAATAACATTCAAAATAATTTTAATTGTAAGGAATATTAG GAATTATCTAATTATGAAATACTGATGTGATAAGACTATTTTGAAGATGTGAATGGCCTT ACAAGTTTGTGAAATAAAGTGCAAATGCTGAGAGTACCATCAACGCAGGGCACAGTCTTG GTTATCTTAGTATCCCTGGCACAATGCACAGATGTACTGTGTTGTACTTGTTCAATCATT CGTAATAAACTAACAGTGATGTACCAATAATTGGCAATAACAGTAATAAAAATAATTGGC CAGGTGCGGTGGCTCACACCACTTATCCCAGAACTTTGGGAGTCTCAGGCAGGTGGATCA CCTGAGGTCAGGAGTTCAAGACCAGCCTGGCAAACATGGCCAAACCCCATCTCTACGAAA AATAAAAATAAAAATAAAAAAATACAACAATTAGCCGTGCATAGTGGCACATGCCTGTAG TCCCAGCTACTTGGGAGGCTGAGGTGGGAGAATCACTTGAACCCAGGAGACAGAGGTTGC AGTGAGCCAAGATCATGCCACTGCATTCCAGCCTGGGCGACAGACTAAGACCCTTGTCTC ATTAAATAAATAAATAAATAAATAAATAAATAAATAAATAAAATGGAAAGAATGGGTTTA TCAGGAAACTCCTTGACAAAGCCAAGTTGAAGGATAAAGTTCAGTGGTAGATTTCACTAC GCTGATAACAACAAAATATACCTCTAAAACTCTTACCTTCTTTGCATTTCCACCTTTCCT GCCCAGTGTGTGTCTCATGCTTATACCACACAGCCCAGAGCATTCAATATCATGGTCTAA CTTCTTATCTCCTAGATCCTGGGAGCTTAGGGTAGCTACAAATAAAAATCTTATGGTGGT ACAACTTAGCTGAGACCTCAGAACAATCTGTAAAAATGTAACTTCACTTTTTTCAAATTC TTTCATCTCTCATGATTTTCCTAAAGCTCCCTATTCTTTACTGTTCTCAGTGCACTCACT ATACAAACAAATCCTCTACACTATCAGTGAATATTTGTCCCCGACTTTGTATGAGTTCTG CTTAGCCATTAGGCATGACCTCTTCCCACATTCACCCTGCCAAAGACAAATTGTGTATAT AAGCATGTAAAGCTAAACCTTGGCATAACATTAGTCCTAGAAAATCTTTGTATTCAAAAG AAACCCAATTTTTACCGCAAAAGCATTGAAGAAGAATGAGACTCAATACTGAATTTTATA GAGGAAATATTAACAGAATTCAACAAATAGCAAGGCTTCCAAAAACTTATCCAAATTCCC ACTTATCATTACGTCTACTGTCCCCAAACTGCTTTTGTCTGGTTCTCTAAAAAAATTTTA GTCTGTAGTTTCCTCCTGTGGACGCATTAAGACTATCTGTCTTAGAGGAGCACCATGCCT TAAACTATGTAACTCAATTTCTCTGGCAGAGAGCTCTTCCAACCTGCAACAAAGTTTCTC CCAGGTGAGCCAGGGAGTAAACAAAGGCAGTACTTGAATGGAATGAGAATAGCGAGATGT TATGTCGCTTACTTCGTGTGAGTTCTGCTCGGCCATTTATGTTTCTATATCCACGCTTAT CTTTGCCTTCTCTCCTCTGGTTGTGAAGGACAATTATGCGAGCTCCATTTAACCAATTGC ACTGTCTATTCCTTTGACCACATGCCCTTCTTCTCTAAGGAATTCTCTATCAGGACTTCT TTATTCTACCCCAGAATATTCTGGATACAGTGATAGAAGGGAGAAATCCTGAGAGAGATA TATATATATGTCATATATATGTATGTGACAAATAGGCACATGAAAATATGCTCAACATCA ATAGTTATTACAAAATGCAAATTAAAACCACCATCAAATTTTATTGCACACTCATTAGAG TGGCTAAAACTAAAATGACTGACCACAATAAGTATTGGGGAAGATGTGGAGGAACTAGAA CTCTTATCTACTGCTGGTGGGAATATAAAGTGGAACATTTCGGCAGCTTCTTAAAAAGTT TAACATACACTTTTTGTATGATCAAGTCATTCTGTACTTAGGTAATTAGACCAGATAAAT AAATGTGTATGTATCCATAAGAAGATTCATACAGGAGCATTCATAGAGTCTTTACATATG ATAGTCCAAACTCAAATGTTCATCAACAGGTAATCAGATAAACAAACTATGCTACTCAGT ACTACAAAAAGAAATTAACCATAAGCACATGCTATAGTATTTGTAGATAAATCCCCAAAT ACCATGCTGAATAAAAGAAACCATACCAAAAAGGACTGCATACTGTGTAATTCCATTCAT ATAAATTTTCTAGAAATGAAAACTAGTCTCTCGTGATAGAAAACAAGTCAGTTGTTGCCT GGGGGTATCAGACAAGAAGAAGAAGGGAAGAATTACAAAAGGCCAGGAGGAAATTTTTTT TAATTTTTATTTTAAGTTCAGGGGTACAGGTACAGGTTTGTTATACAGGTGAAGTTGTGT CATGGGGGTTTGTGGTACAGATTATTTTATCACCCAGGTTTTAAGTCTAATACTCATTAG TTATTTTCCCTAATCCTCTCCTTCCTCCCACCCTTTACCCCAGAGTAGGCCCCAGTGTGT GTTGTTCCACTCTATGTATCCATGTTCACATAATTTAGCTCCCACTTGTAAGTAAGAATA TGTGGTATTTGGTTTTCTGTTGCAGCAGTAGTTTGCTAATGATAATGGCCTCCAGCTCCA TCCATGTTCCTTCAAAGAACAGGATGTCATTATTTTTTATGGCTGCATAGTATTCCATGG TGTATATGAACCACATTTTCTTAATCCAGTCTATTATTAATGGACATTTGGGTTGGTTCT AAGTCTTTGGTATTGTGAATAGTGCTGCAATAAACATACGTGTGCATATGTCTTTATGAA AAAACAATTTATATTCCTTTGGGTCATGGGATTGCTGGGTCAAATGATATTTCTGTTTTT AGGTCTTTGAGGAATTGCCACACTGTCTCCCACAATGGTTGAACTAATTTACATTCCACC AACAGTGTATAAGCTTTCCTTTTTTTCCACAACCTTTCCCACATCTGTTATTTTTTGACT TTTAAATAATAGCCATTCTGACTGGTGTGAGATGGTAACTTATTGTGGTTTTGGTTTGCA TTTCTCTAATGATCAGTGATGAACTTTATTTTATTTTATTTTCTTATACTTTTTTTTCAT TCTCAGCAAACTAACACAAGAACAGAAAACCAAACACTGCATGTTCTCACTCATAAGTGG GAGTTGAACAATGAGAACACACGGACACAGAGAGGGGAACATCACACACTAGGGCCTGCC GGGAGGTGGGGGGCTAGGGGAGGGATAGCATTAGGAGAAATGCTTAATGTAGATGATGAG TTGATGGGTGCAGCAAACCACCATGGCACATTTATACCTATGTAACAAACCTGCACGTTC TGCACATGTACCCCAGAACTTGAAGTATAATTTAAAAACAAATCAGAAATAAAATACATT CTGATAATTAGGGAGAGACTGACAATATAATGAGATTGTGGTAGGGTGTACCATGCAAAG GCAACTGAGCTGGTTATAGAATTTTAGGATGGATACAGGAAATAAAAGAGAAAGAGAGAC ACAGAGAGAGACTGAGAAATAAACAGTTAGTCAATGGTAAAAACGTAATGCCTAAATCTC CTTTAGAACAACTTAAAAGTATATCAAACTTGAAGTTAAAGAAAAAACTTAAGTCAATAA AAAAGAATGATGTTAGGTGACTTCTAATGCCAACAGAGTTTGTGAATCTCTAAGCAATAT GCTTAAACTGAGCTCAGGGAGTCCAGAGATAAGGGACTGATTTCATGTGTTTGGGTACTT TGCTTTATCTTTGGTTTAAAGGAGTATAATTTTGGCATGCATTTAAAGTAGACAAAATAT ATGTAGCCATGTAAGCTTACAAAATAATACATTTGTTAAAAAGCATGCCATGCCCTTTGC TTGGCAAAAGGCACGAATACAGGCCTAAAAATCAGCTAATAATGACTTAAAATTCAGGTC ATTAATATCAGTAAAAACTCCACAACTCCGGGAGTCTTGAAAATTCTTTTACTCTTTCTC AATCAATTTGTATTCTTACTTGTTTACTATGACTATTTCAATGACTTCAATGTTTTATTA TAGGATGAGGTTTTGACTAAGCTTTGAGAGTATGTAAATGAATAAAACTTATTTCATAAC TACATTTTAGAAGATAAAAAAGAACTATTAGTACCTACTATTCCCATATGTTTTTCAGCT AAATTTAACCCAGTCTTAGATGAGGCTTACTTAGGACAGTATAGCTATGTGTGTATAGCA ATGTAATCAGTTACAGAGATAAATCTATTTTACAAATAGAGTGATACTAGCAGTTATGTG GACTGCAGCAGAATTACAAAAGGATGAGTAAAATTATGTGTCAGAGGCAGCCGGGCACAG TGGCTCCCGCCTGTAATCCAAGCACTTTGGGAGGCCAAGGTGGGCAGATCACCTGAGATC GGGAGTTTGAGACCAGCCTGACCAACAGGGAGAAATCCTGTCTCTACTGAAAATACAAAA TTAGCCAGGTGTGGTGGTGCAGACCTGTAATCCCAGCTACTCGGGAGGCTGAACCCAAGG GAGAATCACTTGAACCCGGGAGGTGGAGGTTGCAGTGAGCTGAGATTGTGCCATTGCACT CCAGCCTGGGCAACAAGAGCAAAACTCCATCTCAAAAAAAAAAAAAATGTGTCAGAGGCT ATTTTATAGCTAGAAGGTAATGTTTCCAAATATGTTATACATTAATCCTAACAGCAATGA GAAAGAAAAAATATAGCAGAGACAGTGTTGGTTTGCTTTTTTTTAAGAGAGAGGGGGGTA TCACTATGTTGTCCAGGCTGGACTCAAACTCTCGAACTCAAGCAATCCTCCCACCTCTGC CTCCATAGTGACTGAGACTACAGGCATGCACCACCACTCCAGGACTGCTAATGTTTTCAT CCAATATCCATTTTCTCTGTCTTTCATACTTATAAAGCTTCGATTCTATTCTGAGCAAAG GGCTACATTTCATAGCCTCCTTTGCAAATAGATTTGTCAATGTGATGTAAGGGGGCATCT TTTAACGTTGACATGAACCATCCCAGGCTAGAGATAAGCCCTTTTACCTTTCCTTCTTAC CATGTCCTTCTTTTTCTTGCCTCAAACACAGACATGATTACAGGAACTATGGCAGGCATT ACAGGCCCTAAGGAGAACTTGAAACCTACAGGATTACAGATGCCAAAGCAGAAAGCTAGA AGGAACATGCCTTCCTGATGACTGTGGTGTTAGTATACTTCTAGATCTTCTTTTATGAGT AGGATATAAAGCCTCTAACTTATTTGAGATTAATATTGAGGCTTTGTTTTATATATGGTA AATTTAATCCCGAAAGCACACATACAGGAATAGAATAGTAAGCTCAGGTTAAGAGTCAAG AAATGGGCCTAACAAGAGTAGGAGGTAAGACATTAGCATTGTCACTTACAAGTATGGTCA CAAAGGCATTTTCAGCCTTTCTTATGCAATTATAACCTTTAATTTAACATGGTCTTGGAC TTGTTGAATATATGGCCTTCAAACATATAATTCTACTATTGACTTCCTTAATGGAATCAA ATCAATTATTCAAAGGAGAACAACTAAAATTTTTTTTTGTAAAAAATCAAAGATTGGACT GCTCTCAATGCAACCTGGATTCAGGGACTAAGATCTCAGAGAAGAGAAAAGCACATTCAG GTAAGATTGACATGGTGCACTCTACCTTTCCCTTTGAGACATTTGTTTCCCTGAGCCGAG TGGATTAATATCAAGTAGAATGCAAGGAGTAAAAGATTAGGTTACAGAGGTCACTTTTCA GAAATCTTTTTGATGGAAAAACCAGAACTGAGTTTCAGGGCAGGCCAAGTAAGAGGGTCC CTTGCAACCACCCCAGAGATTCAGTTGGAGCCTCTTAGGAATAAAAACCTGGAAACAGTA CAACTCTCCCCAAGACTGAAAAAACTGAGTTCAAAATCAACTCAAGCCAGACTAGATTAA GGTAATCTACATCAAGGTGAACTCAATGCCTTTTTGAGAAATTAAAGAAGATTTAAATTA ACAAAGGGATAAACTATATTCATGGATTGCAAGAATCAATAATGTGAAGATATTTGTTAT TCCCAAACTGATCTGTAGACTGAATGTGATCCCAATCAACATCTCAGTGGATTTTTTGTG AAAAGCAACAACTACTTGCAAAATTCATATGGAAATGTTAAAAATTAAGAATAGGCAAGA TGACCTAGACAAAGAATAAATCTGGAGTAGTAGAGATATGGTAATGAGAAAAGCAATTAC ATACCTGCACCTACAGGGCTACTGTCTATGGGAACACCAGAATTTGAGCATAAGGTTTTT TTTCGAAAGAAATAATATAGGGCATCTAGGAAACTCAACCTAATCTAGAGAGCTTCCCCT AGAAAGTGACCTCTAAGCTGAGACCTCAAGGACGAACAATAGCAAGCTAGGTGAGTAGGA GTATCAAGAGTATTCTAAGAGGGGGAAGAGTTGGTAAGAATTCTTAGAGAAAGAGAAGGT TTATCAGGTAGCGAGGGCAGTGGGAGTTGACATGAGGATTGCATTAGGATGAATACGGAT AAATGTGTAGGGGCTAAAACTTGGAAGGCATTTAGAGGGCATATTAAGGAATTTGTTTTA AAGGTTATTTTCTCCCAGGGAATAGAAAGATAAGAGTTGCATTACCAAAGGCTTCAAAAT ATTATTCTATATGTACCGGAAAGGATGAAGTGTGGAATTTGGGAGAGTAGCAAGGTAGAT CTTCTCACTAAAGTCCAGGAAAGAAGTGTCATTGGTTTAAAACATTGTAGTAGGGCCAGG TGCGGTGGCTCACGCCTGTAATCCCAACCCTTTGGGAGGCCAACATGGGCGGATCACTTG AGGTCAGGAGTTCGAGACCAGCCTGGTCAAGAGGGTGAAACCCCATCTCTACTAAAAATA CAAAAATTAGCCAGGTATGGTAGTGGGTGCCTATAATCCCAGCTACTCAGGAGACTGAGG CAGGAGAATCGCTTGAACCCAGGAGATGGAGGCTGCAGTGAGCCAAGATTGGGCCACTGC ACTCTAGCCTGGGTGACAGAGCAAGACTGTGTCTCCAAAATTAATAGTAATCATATAAGT AATAAATAAATAAATAAAATGTAGAAGTAGAAGTAGAGAAGAGCGGATGCAATTGAGGAA TTAATCCAATGACCGACTAAGGAGGCAGGAGGCAGTGCACTAGGCAAATAAAATGCTCGT GCCAGACGATATACAGTGCTAATAAATGTTGCTATGTATTTATTAAATTTTTGGGGAGAG GATTATTGATTTATAAAATTTTGGAATACTAGAGAAGAAGGAAAGGAAGGAAAGAAAAGA AGGAAAGGAAGGAAAGAAAAGAAGGGAAGGAAGAAAGGAAGAAAGATAAGAATGATGGAG GGAGGGAGGGAGAAAGAAAATTCAGAACCCCAAAATGTCTGTCAGTGAAAATAAAAAAAG AGAGAGAGAGAAAAGAAGAAGATGAGGAGGAAAGAAAACTCTAAAACTGAAAACCAAAAG AAAGTTTTATATAAATAGAGACTGAAACAGTAATAGAAGTTTATGTTGTAGGTCAAAATG CAGTCTCCCGCTGTCTAGGAAAGCCTGTAGGTCATTTTTGCACAATCCACATGGTAAATG GCTCTGGGAGCATCAGCCAACATAGTTAATGATATGTAATTAAGTCTTAATTCCAAGCAT TAATAATTCAACAGATAATCAAGAAAATATATATAAACTTTTTAAATTAATTATGTAGCA TTTTATCAGTACATTCAATTTCTAAATTATGTATTTCTTCCTTTGGCAACTGTTAAAATT ATTTTGTGTTCGTGGGCACATGTTCTCCAGAACACACAAACTAGGTAGGATGGTAAGCAG GAAATTCTTGAGTTGAAATTGTACCACAGATAATACAAAGTAAATGCAATACATGTTTTA AAAATTTATATAATATAAAACAATGGCCAGGCGCAGTGGCTCAAGCCTGTAATCCCAGTA CTTTGGGAGGCCGAGGCAGGCGGATCGCCTGAGGTCAGGAGTTGGAGACTAGCCTGGCCA ACAAGATGAAACCCTGTTTCTACTAAAAATACGAAAAATTAGCCGGGCATGGTGGTGCAG CCTGTAGTCCCAGCTACTTGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG AGGTTGCAGTGGGCGGAGATCATGCCAGCTTAGGCGACAGAGTGAGACTGGACATAATAA CAATAATAATAAAAATAAATAAATAAAACAATTATCTGAGAGGAAAAATTTGATTCATAA TAAAGAGAATAAAGGTTTTTGGCGTGTTTGTTTTGTTTTCACCTAAGAACAGCTGTTCCC CTCATTGGGTTAGTTTTATTTGCAAGCAGAAATCATCTCCGCATGATTTCCAGGGTGATG GAAAACTGAATATGAATCCACCTTCTGCCATCTATTCACTTGTCACATTTAATAAGACAC TCATGCCTATTTTAGCATGTTTTCTTCCCTACCAAATGAGTTAGTAACATCAAGAGATTA AAATAACACAAATAAGAACATTGAAGGTATTCAAATGTTACATACAAATATTAAACACAA TATTATTATAATTATTCCTGGAAATGACATTGCCTCTACTCTCAAGGTAAAGGTCATTTT TCTTGATTTAAACTTTTTTCTCAAGTTTGAAATCTCTAAGTTTCAACCCGTAATCTATTT GCAAGTTTGTGCAAATTTTAGGGATTGAATCCATAGTAATTAGTGATTTATTGTGGTGTA GGGAGACAAGTCAAAAGAATCAGGACTGCTAGGTAGATGACTAAGGAAAGGATGGTTCAC GAGGTGACATAAAGCACTCAGAAGAAAAAGGTCAGGAAACGGAGGACAGAAAAAAACCTA AGTTCTGCTGGGTGATGCTGAATTTGTCATCACAAAATCTGCATTGTGGAAGCTTTAGCT ATTGAGGAGATTGCTCAAGTGTAGAACTGAGAACAATAGGCAGTGAACCCGAGAGAACAT CAAGAGACTGAGAGAAAATGAACCAGACTTCCAGGTGCTCCATGTTCCAACCAACATTTT GTATTGTCAGAAGGAATTGAGAGGCAAAAGGAAACCCAATAAAAAATAAAACAGGAAAGG GCATACATGATTACCACCCCTTTTCTCACCAGCTGCTCATGGACCAGCTTTCTCCTAGTG CTATTTTCTTGGTCACTGCATCACTCTGCTAACATAGTTTCCCCACTAGCTCTGAGGCTG TCCCAGAGGGGAAGCCAGCTGTCATCTCCTTCTTCCACACTCTGTTGGAGGAACCTGTCA TTAGCAGCTCCCTACTAAACGCATTTATGACAAACAGGCAGGAGATAATTAACTAGAAAG TGAACAAACTCAAACTTCAGAGCCTCTCATTTGTATGAATGCCCTTGTAAGGTCTTGGGC CTATTTTAATATTTATAAATGTGTTATTTTCTTCTAAAGAAAACCACCAAATTGTATAAG CTACAGAATCTGCAAAACTGAGGTCCATCCATGCACTCAGGATACATTCATAGCATCTCT GAGCTGGAAAATATCTTAAAGGTCATATATGTCCTCCAACACTGCAAGAATCTCTCTGGC AGCATTCTTTTAAAATCATCATCTAAAAGAGGGAAATCCCCAGCTGTGTTTGGATTTTGC TCTGTCACTTGTCCAGTTTCCCCATCCATAAAAGGGCAACAATATGAATTTCCTGATAAG GTAGTTGTTAATATAAATACAAAGTGCGTAGCCACTTCCCTAAGAAAAATATGGGGTTTC TGCTTCACAGTCTAGGGAGAGGAAAAAAAAGGGGGGTCAGAAGTGATTATTATTATCATT CTATATTGGAATGTTTTCAGACATAAAAAGCTCACCACGTCTTAGGCCAGACAGATGCAT TATGAAAGTTAAGCTAAGTCTTCCTCATCATGAGCTGCACCTATATCCCCATTACTTCTT CTAGAACTGCATAATTTATTTATTCTTTCTTCAAAAGTTTGAGAGAGCCATTCTTGTCCT CTAAGATTTTTTTTTTTTTTTTTGGAGACAGAGTCTCCGTCTGTTGCCCAGGCTGGAGTG CAATGGCACTATCTCAGCTCACTGCAACCTCTGCCTCCCAGATTCAAGTGATTCTCCTGC CTCAGCCTCCCGAGTAGCTGGGATTACAAGCACGCACCACCACAACCAGCTAATTTTTCG TATTTTTTAGTAGAGACGAGGTTTTACCATGTTGGCCAGGCTGGTCTTGAACTCCTGACC TCGGGTGATCCACCCACCTCAGCCTCCCAAAATGTGGGGATTACAGGTGTGAGCCACTGC ACCCGGCCATCTTCTAAGACTTCTATGGAGAGCTACATCCTTTAACTATTGATTGATGTC TTAGTATCCCTAGAGCACCACCTAGTATCTGGCATTTAGCAAAGTCCAAAGAGTGGTTTC AAGTAAGCAAGTAAAGAGATTCATGAAAGAATAAGTGTTTTTCAATCAATCACTTTATCC TTAAATCTGGTAGGTTAACTCAGAAGAATGAAAATAGAGTACTAAGGCATTATTACTTCC TGTAATCTGTTTACTGTTTAGTCCCTCAATGGGAAGAAAGTTTTCTAACAAATAACTCCA AGTTTTGGTTCAATAAACTTTGCAAAACCAGATATCCACATTCTTGAGAGCAGGAATTTG ATGTTCCTTAAGTTTCAGTTCTCCATCATGTCTGGGCCCTAGTACTTTGTATCTAATACT CAATATACAATTTGGAAAATCTGAGGTATAATAAACACACAGTAATGCACACACATTTTA AGTGTGCAGTTTGATGGATTTTTACATATCAATTTATTTTAGTAACTACCACTTAGCTCA AGATAGAACATTACCATCACCCCATGTATTTTTATTTCCCCATTTTTGTAAATACTCTCT TCACTCTCTTCTAACCAAGTAACTCTCTAACACCATAAATTAGTTTCCTCTGTTATTGAC TGATTTGATGGCTGCTAAGATTAAAATAAAAGTGTGGGTTTATATCTGGACTTTCTATTA TTTTCCATTGGTCTATTTTACTTTCATTCTGACAATACCATAATATCTTGATTTCTGTAG CCTTATAATAAGTTTGGAAATCTGATAGTAAGTCTAAACATCCAATTTTATTCTTCAATA ATGTTTTATCTTGGTTCCTCGTATATACATAAAAATTTCAGAATCAGCTTATTAATTTAC ACACACACACACAGCCATTTATATTTAATGTAATGAATAACACAGTTGAGTTTTAAATTT ACTATCTTATTATCATTTTCTCTTTGCCCTATCTGTTCTTTGTTCATTAATTCCTCTTTT CCTGCATTCTTTTACCTCAGTCAGGTATGGTTTATAATTCAATTTTATTTTCTGTATTAC CTTTTTTGTTGTGCGTTTTGATGTCATTCTTTCATTGGTTACACTTAAAACATCATCCTT AACACTGTTACCTTAAATTATCAAACGCAAGGATCTTATATTTATCCTTTTAAGGCTGTT ATTCTATATTTGACTTTAATAAACAGTATAAGCCCCACAAGATACTCTTATTCTTTATGT GTCAAACAGTTAGTCTTTTATAAATTCTCAATCATTTACCCTTTCTGGGGCTGTTTATTC TTGCTTACATTTCTGTGATTCAATGTGAGACTATGTCCCTTCAGCTTGAAGAATAACCCT GAGTAAATTCTGTAGTTTATAGTCAGCTAACAATGAAGTCTCTCAGTTTTTGTCAGTCTA AATCTTTTTCATTTTTCGATTCTTTTCAATGGACACAGAATTCTGGTTTGATAGTTTTTA TTTGTTTCTTTCTGTACCTGAAATATATTTATTATCTTCTACCTTCCATGATATTTCTGC TGAAATCAATGTTCATTTATATTGTTCCCCCAAAGGTGATTTTTTTAAACCTCTGGTTGT TTTTAAATTTTCTTTTTCGTCTTTCAGCAATTTGACTCTCATAGGCCTAGATGGGGTTTT CTTTGCCTGGGGTTCATTGAGCTTCTTGAATTTCTTGGTTGATATCTGTATTAGTTCATT TTCATGCTGCTGATAAAAACATGCCCGAGACTGGGCAATTTGCAAAAGAAAGAGGTTTAT TGGACTTACTTCCACGTAGCTGGGGAGGCCTCACAATCATGGTGGAAAGTAAAGGGCACA TCTCACATGGCAACAGACAAGAGAAGAGAGCTTGTGCAGGGAAATTCCCATTATTAAAAC CATCAGATCTCATGAGACTTATTCACTGTCATGAGAACAGTACGGGAAAGACCTACATGA TTCAATTATCTCCCTCCCACAACATGTGGGAATTATGGGAGCTACAAGATGAGATTTCGA TGTGGACAAAGCCAAACCATATCAATACCTTTCGAGTTCTTCACCATGATTTTTTCAAAT GTTGTTTCTGCTAGTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTCTTTCTGC TCTCTCTGGATATTTTCTATTGATTTCTATATGAGACCATCAGTTTATTTGTGTAGTATC CAGGTGGTTTTTAAACCTATGTAATTACTTCTTGATTTAGCAATTCAACAAAGTTCATTT TATTATTTTTATGAAACCTAATATCCTGCTGAAATGCTCTGTTTTTTAATCCATTTTGCC CATCTCCACGGTAGTTCATGGTTATTTAAAAGCCCTTGCCTATTAGTTCCAAAATCTGTG TCATTTCTTGAGCTCTATTGACTGTATTTTCTTTCTTTCTTTCTTTCTTTCTTTCTTTCT TTCTTTCTTTCTTTCTTTCTCTCTTTCTTTCTTTCTTTTTTTGCCATCAGGTACTCTTTT CTGCTTCTTTGCATGTCTGGTAAGTTTTGATTGCATGCAGCATTTGTAGAAATTTTAGCT TATGTTTTCTTCCTCTCATAAACTTTGAGTTGTGTTCTAGCAGGTGGTTAAATCATTGGT AGATCACCCTAACCCTACAGAAGCCTAGTTTTTGCTTCGTTCAGTCAAATCTATTTCAGT TTATTCTTTCTCTTAGGACATCATCCTTCTATCTAAGGAGTATCCTTCAAGGGTTTCATC CTAATGCCTGAGGTGTTCACCAAAGTCTTTCCATTCTGACTGGAACCGAACTCCAACATC TCCTCAGAATTGTGTGATCTCTAAAATGTCCACTCAAATTTCAGCCTCTCTGCCACTGCA CTGTATCTGTCAGGTCTCTAGAATAATGCCTCTGGACACATGCAGCCTAGCAATTCAGCT AACGAACTGAGAGGAATTGCCACACAGACTTCCGGTGCTGCCTCTTGGTACTCACCTCTC TGTCACCTTGCTTACCTCCAGAAACCTTAGTTACTTTATATAGCTCCAAGCTCTTGAGCT ATATGCCCTCTGCTCAGTGAAACTGCAGCTCTCTGCTTATTCTCAACCTCCCAAAACTTC TGCTGAAAAAAATATCCCCTGAGGAAAAATAATCCATGGGAATGGGCTCATTCCATGTGC CTCCAGTTACCCCAAATTGCAGCACTATGTTGGTTATGGTTCAGAAGTAAAAAATGTTTG ATATAGTTTTTCCAGGTTTTATAGCTATTTTATGGTAGAAAGGCAAGTGAGTGCTATTAG CTAATTGTCCAGAACCAGAGTCTCATTTCATAACTGCATAAATCCTTTGCTTATCTTGTG TATTTTTTTAAACAAACCTAAAATGCAGGATTTCTAAGTATTTTCCAGTTCTAGCTGATT TCCTTCATTTTAGATGAAAATCCAAAGGTAAATACTCTTTGGTTTCTGATTTTTGGCATC TTGTAAATAAGCATTGCCTCCAGTTTGGTTCATTCTCAGATCTATTAAGTATCCCATTTA TATTTTCCTCTGAAATATAATTTGATAAATCTGCTGAATGATCGGGCACCAAGGTCAGGA CCAATACCTTATTCAAGCCCAGCATGAATCCACTTACCAAGAAACTGGAGGCAACTCTGT CTAAACTGTAATTTGTTTGATACAAACATGCCATCTACATTTACCTTGTCCATAATGATA ATGGGAAGGTTAGCTGAAATCAGGAAATACTGTATTATGAGTTTAGTGACTATTTACAAG TGGAAATGAATTTAATCTGGTATGATTTATTTTACTAAATTGTAGTTGCTTCCTTTTCTT TTCTCACTAGTCACAAATGATTTATTTCAGTATCTTCTCCAGAACATTGCCAGAGGCCAG TCTCAAACTTAACCATTGTATACATACCAGAATATTTTCATTAAAAATTAATAACTTTTG TCTTTCTCTGAAAACTACATAATCACTACTTGTCCATTCTTTTGGTCCTTGCCTGTTCTT TATGGATCAATATTATCAAAGCTACTCCTGTTTCCACAGGCAAATAACAATTCTATGTAA TGGGAAAGATATTAAATCCGAATTCATGTTCCTCTTACTAGCTATATAATGGACAATTAA ATTATTCCTTTAAATTCCTTTCTCCTTTAGTACACAAGGATAAAATACTCATTTGATTGT TTTAAAGATTAAAGAAGTATCTGAAAGTAACTGTTATATTTTCTTCTGAGAGGTATCCCA ATAAAAAGGCTACAATATTGTTATTATTATTACTATTCTAGTATCCTGGATGCAATTTAC CTAAGCCTAGATATTTTAATTAATTTAAGTAGCCACATGCTTTCTCACTAGCTATTTTCC CAGCATGATCTCAATCTTTTCTACGCAAAGTTTAGTCTCTTCTCTCCTAAAGATTGTTCT ACCTAGAGAAGAATATAGGTTCAGAAAGGAATTCATATACTGGTGTTTCTCTAATCTCTT AGAATTACTTAATTTTTCAAAGAGCTCTATCTTTTCCTATTTATCTTCTTGTTCCAAATA GAATTAAAATCATTTGCTGCCTTTAATATTGTTAAATATTTCATTTCATACTATGCTTCA ATTTCTTGCTTTTTTCTTCTTTTTATCTTCCTCCTTCCTTCCTTTTTCTTTCTTTTCTTC TTTTTCAGTTATCATTGTTATGCTTGTCCTTTCTTGTGAGATTCCTCTGTTATCTTTCCT TATGTGCTTTTTAAACAAAACCTCGAGAGTGCCGTGGGACAGCCTCATTGGTATCTTTTC AAATTTGGTATCTCTCCACTTTTTCCTTACATAGTTAGCTGGCAGTAGTACATAATAACC TTTTCTGTCTCTCTCTCTTTCTTTCTTTCTTTCTTTCTTTCTTTCTTTCTTTCTTTCTTA GATTTTCATTCCTCTTGAGCTTTAAAAGACTGGCTAGCAATGTTATATCTTTCATTTTAT TTTCTGATTTAAAAAAGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGT ACGCGCGCGCGCGCGCGCGTGCACGTCAGTGTCTTCTTCATGGATGCTTGTCTTATTTTC TCCCAAGGTGTAACTGTCCAGGGAGGGAAAAGTCAAGTCGTCCTCTATTACACTGCTCTG CAGAAACAGACTCACTAAATGTCAAAAAGTAGATGCATCAGACTGTTCCTTAGAGAAAGG TTTGCCATGGAGTCGTATATTGTAACTGAGCTGAAGTTCACTCATCGATAAGTTGTGCCC AAGGAATCGAATTCCTTCCAGTCCTTCTAAGCAGTCCAGGGAAACCAATTTAAAAGCGAA CACAACAAAACTAACAGACCGGCAAAATCTATCTTTGAAGCGCCGCGGGAGGCACAATTT GGGAACAGGTGAGGCCATGCTGGGTGGGTGAGGCCCCCCTCTCTCCTGCTTGGTGTTCCG CTTTCAGCCAACCCACCCCAGGAGTACCCTGGGATCTCCTCGCCCCCTGCCAGGCGGAGA ACGCGGAGCCCAGCGGGCACGCGGGAATGGAGCTAGGCGCCGGCAGGGCAACTGGGCATG CTCAGAAGCCGGGCAGGTTTTGGTCTCAAGCACGCAGCCTGTGCATTACACCAGCTCTCT CAGTCCGGGGAGGAGGAGGAGCAGGAGGAACGCGAGGAGGAAGGAGAGGAGGAGCGGCCA GCAGTAGCCACGACCGCCACCACCAGGCAGAGGAAGAGTTCGTGGGGAGGAAAAGACCTC hmmer-3.1b2/tutorial/globins4.hmm0000664361611702660230000021123212473612615016362 0ustar wheelerteddyHMMER3/f [3.1b1 | May 2013] NAME globins4 LENG 149 ALPH amino RF no MM no CONS yes CS no MAP yes DATE Thu Jun 19 18:00:17 2014 NSEQ 4 EFFN 0.964844 CKSUM 2027839109 STATS LOCAL MSV -9.9014 0.70957 STATS LOCAL VITERBI -10.7224 0.70957 STATS LOCAL FORWARD -4.1637 0.70957 HMM A C D E F G H I K L M N P Q R S T V W Y m->m m->i m->d i->m i->i d->m d->d COMPO 2.36553 4.52577 2.96709 2.70473 3.20818 3.02239 3.41069 2.90041 2.55332 2.35210 3.67329 3.19812 3.45595 3.16091 3.07934 2.66722 2.85475 2.56965 4.55393 3.62921 2.68640 4.42247 2.77497 2.73145 3.46376 2.40504 3.72516 3.29302 2.67763 2.69377 4.24712 2.90369 2.73719 3.18168 2.89823 2.37879 2.77497 2.98431 4.58499 3.61525 0.57544 1.78073 1.31293 1.75577 0.18968 0.00000 * 1 1.70038 4.17733 3.76164 3.36686 3.72281 3.29583 4.27570 2.40482 3.29230 2.54324 3.63799 3.55099 3.93183 3.61602 3.56580 2.71897 2.84104 1.67328 5.32720 4.10031 9 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03156 3.86736 4.58970 0.61958 0.77255 0.34406 1.23405 2 2.62748 4.47174 3.31917 2.82619 3.63815 3.49607 2.75382 3.03401 2.75280 2.74783 3.65114 3.24714 2.62341 3.12082 3.11124 2.79244 2.89355 1.88003 5.06315 3.77128 10 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 3 3.50771 4.88753 4.66754 4.31907 3.27776 4.35743 4.88268 2.50779 4.08449 0.57907 3.22569 4.56607 4.74802 4.37991 4.20749 3.97946 3.79191 2.62059 5.25407 4.04279 11 L - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 4 2.34080 4.28719 3.51550 3.22063 4.37406 3.06195 4.29366 3.74891 3.24370 3.47337 4.31943 3.39310 3.80273 3.56072 3.55390 1.08280 2.00280 3.23325 5.72380 4.49519 12 s - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 5 2.04218 4.87966 2.77126 1.92448 4.32563 3.33660 3.78415 3.73388 2.61886 3.34029 4.16568 2.96714 2.18012 2.94561 3.07633 2.70238 2.96803 3.36068 5.56791 4.21854 13 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 6 1.67844 4.79514 2.78469 2.00544 4.34945 2.26719 3.85010 3.76260 2.72087 3.37961 4.20641 2.99947 3.85561 3.02442 3.17766 2.68798 2.96575 3.36703 5.60901 4.27005 14 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 7 3.05756 5.63998 1.78612 1.06702 4.93093 3.31407 3.86695 4.45859 2.89031 3.95237 4.80915 2.77798 3.94091 3.03432 3.48933 2.93505 3.34810 4.02575 6.09427 4.58708 15 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 8 2.98085 4.92154 3.50401 2.91209 3.76425 3.70161 3.75301 3.57060 1.24921 3.12012 4.04714 3.32210 4.09411 3.00014 2.54951 3.05147 3.18982 3.31354 2.52964 3.70813 16 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 9 2.59353 4.69451 3.03503 2.60972 4.18917 3.33498 3.80536 3.60013 2.58953 3.21847 4.04944 3.07115 3.85428 2.20828 2.99231 2.14672 1.84753 3.23346 5.45458 4.14691 17 t - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 10 2.23880 4.76665 3.06952 2.55248 4.02235 3.47005 3.69787 3.40277 2.01551 2.36330 3.87991 2.51243 3.88223 2.86967 2.84293 2.72413 2.90300 3.10205 5.29826 3.99496 18 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 11 3.19694 4.48391 4.99800 4.51340 3.70437 4.59686 5.22508 1.39091 4.40799 2.19554 3.49619 4.71017 4.90059 4.67186 4.59646 3.99910 3.46528 0.94853 5.69937 4.48740 19 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 12 2.75048 4.80166 3.26496 2.66512 4.05387 3.56143 3.69034 3.41974 1.98979 2.32315 3.89028 3.13074 3.94179 2.86188 2.09152 2.81637 2.39268 3.13531 5.28085 4.01795 20 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 13 1.76333 4.59630 3.10164 2.67897 4.07335 3.31056 2.49445 3.52561 2.68943 3.16162 4.00001 3.11582 3.85067 3.04885 3.09407 2.02147 2.87931 3.16321 5.39081 4.07911 21 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 14 1.74676 4.33104 4.10096 3.58029 3.53459 3.81128 4.36357 2.24459 3.48183 1.89076 3.43717 3.84444 4.26434 3.77047 3.74451 3.15389 3.06390 1.66791 5.19600 3.98969 22 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 15 3.87954 5.13867 4.57762 4.36488 3.03765 4.09084 4.31854 3.92859 4.08791 3.26710 4.54641 4.45726 4.63521 4.45940 4.15994 4.08011 4.19741 3.82655 0.45161 3.02591 23 W - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 16 1.17729 4.26198 3.57130 3.34611 4.48932 1.56793 4.42455 3.86761 3.45066 3.59704 4.43496 3.45644 3.80449 3.71634 3.74017 2.51428 2.83714 3.30004 5.82592 4.64145 24 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 17 2.88817 5.04467 3.10563 2.67545 4.50902 3.51529 3.78021 3.92264 1.24585 3.45270 4.30607 3.14138 2.36832 2.93193 2.59730 2.90680 3.14272 3.56445 5.56837 4.31000 25 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 18 3.05146 4.52367 4.53075 4.21316 3.78794 4.02425 4.96997 2.08597 4.08612 2.42902 3.71686 4.35272 4.57557 4.42900 4.26873 3.55467 3.41034 0.71672 5.61943 4.36559 26 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.15590 4.17053 2.04864 0.61958 0.77255 0.48576 0.95510 19 2.68479 4.81315 2.78148 1.93235 3.94110 2.58636 3.69416 3.47083 2.55190 3.09021 3.94228 2.95115 3.85408 2.89111 2.99210 2.72265 2.93521 3.16412 5.27296 2.55092 27 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02646 4.04109 4.76344 0.61958 0.77255 0.62497 0.76632 20 1.24956 4.17178 3.49549 3.21559 4.28754 2.96447 4.26633 3.63846 3.25854 3.38649 4.23557 3.34723 3.71824 3.55069 3.55664 1.64035 2.73156 3.12303 5.65279 4.43774 28 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02646 4.04109 4.76344 0.61958 0.77255 0.40762 1.09431 21 2.72255 5.13686 2.10819 2.30370 4.43753 3.36911 2.77903 3.91156 2.48945 3.43909 4.22575 2.32339 3.83724 2.80393 2.98938 2.68803 2.27927 3.51682 5.60972 4.20361 31 d - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 22 2.21080 4.24532 3.90070 3.37171 3.30266 3.69693 4.07080 2.48422 3.27322 2.39225 3.38783 3.64703 4.12115 3.55460 3.52849 3.01029 2.94053 1.60162 4.85781 2.46888 32 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 23 2.11381 5.24929 2.03303 1.80395 4.58633 2.53811 3.73176 4.06390 2.60883 3.58308 4.37935 2.82480 3.85884 2.87023 3.13981 2.74200 3.06026 3.65099 5.75543 4.32261 33 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 24 2.69793 4.94558 2.70258 1.69825 4.39821 2.33192 3.78049 3.82467 2.62191 3.41144 4.22851 2.93775 3.85955 2.93694 3.09150 2.71026 2.18745 3.43624 5.62101 4.25627 34 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 25 2.64091 4.46648 3.34374 2.80311 3.42902 3.55272 2.66869 3.00952 2.74944 2.69246 3.58308 3.23558 3.94921 3.08558 3.12525 2.23223 2.87915 2.30384 4.88555 2.76524 35 s - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 26 3.07955 4.81453 3.81345 3.75576 4.87199 0.38858 4.84729 4.55455 3.97697 4.16722 5.15284 3.97911 4.21424 4.27811 4.17031 3.26163 3.58377 4.02507 5.87777 4.98756 36 G - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 27 2.16793 4.55369 3.17704 2.68551 3.91033 2.58600 3.80698 3.26431 2.66700 2.95066 3.80883 3.13379 3.87025 2.29397 3.07339 2.68456 2.85627 2.26116 5.25857 3.97776 37 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 28 3.08394 5.70697 1.27203 1.41705 4.98951 3.30419 3.87667 4.52911 2.93008 4.01118 4.87370 2.76098 3.94379 3.04632 3.55249 2.94907 3.37869 4.08639 6.15417 4.62403 38 d - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 29 1.76617 4.35878 4.20978 3.75755 3.65097 3.82760 4.54903 1.34437 3.65633 2.37678 3.54120 3.97097 4.33490 3.95912 3.89746 3.21892 3.13305 1.99536 5.36277 4.14791 39 i - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 30 3.50771 4.88753 4.66754 4.31907 3.27776 4.35743 4.88268 2.50779 4.08449 0.57907 3.22569 4.56607 4.74802 4.37991 4.20749 3.97946 3.79191 2.62059 5.25407 4.04279 40 L - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 31 2.63708 4.40165 3.40214 2.40642 3.58812 2.72660 3.87663 2.20111 2.85018 2.60895 3.52852 3.30513 3.98299 3.17216 3.21879 2.84552 2.88143 2.06355 5.03837 3.79155 41 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 32 3.22597 5.30670 3.70127 2.96663 4.81092 3.80832 3.69259 4.13441 1.48502 3.54054 4.42172 3.33839 4.16189 2.82525 1.14663 3.21562 3.37193 3.82130 5.54647 4.41673 42 r - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 33 3.36628 4.68383 4.99882 4.42697 2.06890 4.59083 4.77053 2.33627 4.28908 0.99412 2.19966 4.62307 4.76452 4.32547 4.35569 3.93058 3.57915 2.50984 5.01566 3.84219 43 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 34 3.47288 4.79171 4.82535 4.38542 1.15416 4.50288 4.20156 2.57610 4.22482 1.45355 3.22283 4.42152 4.76985 4.29234 4.30249 3.88676 3.70704 2.66954 4.39362 2.81117 44 f - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 35 2.65839 4.46496 3.41545 2.85385 3.64696 3.58642 3.84399 2.83279 2.18115 2.24711 3.56925 3.28453 3.98061 3.10967 3.07425 2.84321 2.27492 2.19676 5.07719 3.82962 45 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 36 2.42370 4.29265 3.65100 3.28313 4.02251 3.19904 4.25767 3.19158 3.24396 3.07467 4.01896 3.47268 3.88665 3.56803 3.54322 1.18295 2.86360 2.07028 5.47846 4.22238 46 s - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 37 2.77111 4.43601 3.65021 3.10915 2.33610 3.72097 2.52878 2.94333 3.04157 2.60282 3.54715 3.45355 4.09642 3.32738 3.36173 2.98372 2.23948 2.73265 4.45269 2.31965 47 t - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 38 3.19808 4.89408 3.83898 3.72846 4.68099 3.56527 4.77204 4.31531 3.81375 3.90440 4.97374 4.00035 0.42252 4.19287 4.01617 3.37714 3.66479 3.92432 5.77417 4.80893 48 P - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 39 2.14111 4.58346 3.15322 2.15624 3.79078 3.47432 3.73889 3.17459 2.60522 2.84386 3.70482 3.10631 3.88561 2.95537 3.01841 2.72235 2.41586 2.90270 3.19793 3.86483 49 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 40 1.66569 4.24898 3.69236 3.36739 4.24142 3.10622 4.35636 3.38897 3.34246 3.26051 4.17095 3.48755 3.84083 3.65454 3.62507 2.55747 1.22235 2.98304 5.65508 4.45345 50 t - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 41 2.82488 4.94492 3.18760 2.63959 4.18011 3.57406 3.69030 3.57299 1.92805 2.31655 4.00764 3.11434 3.96530 1.85056 2.55448 2.85973 3.03711 3.28659 5.36701 4.08944 51 q - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 42 2.74539 5.05147 2.87731 1.65307 4.39051 3.44209 3.67129 3.81043 2.34559 3.35333 4.16101 2.95980 3.87889 2.80429 2.24429 2.73668 2.42635 3.44516 5.52575 4.18494 52 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 43 2.91685 4.54967 3.76391 3.24166 1.68039 3.83207 3.72103 3.03713 2.19588 2.63921 3.64111 3.54697 4.20138 3.41748 3.37368 3.11420 3.14534 2.84694 4.30193 2.17060 53 f - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 44 3.66462 4.98158 4.65054 4.43086 0.62638 4.26463 4.04708 3.16288 4.33328 2.46788 3.85405 4.36938 4.72336 4.42081 4.37865 3.91239 3.96938 3.17397 4.22498 2.56172 54 F - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 45 2.90232 5.41059 1.81360 1.81124 4.72322 3.32617 3.78247 4.21870 2.71272 3.72547 4.54136 2.79866 1.96715 2.93171 3.26694 2.82016 3.17430 3.79937 5.88933 4.42688 55 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 46 2.80745 5.10019 3.12719 2.54399 4.45099 3.53912 2.74851 3.86719 1.78373 3.36487 4.17040 3.03763 3.92215 2.75472 1.99957 2.27865 3.01585 3.50590 5.48668 4.19117 56 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 47 3.66462 4.98158 4.65054 4.43086 0.62638 4.26463 4.04708 3.16288 4.33328 2.46788 3.85405 4.36938 4.72336 4.42081 4.37865 3.91239 3.96938 3.17397 4.22498 2.56172 57 F - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.14278 4.17053 2.14040 0.61958 0.77255 0.48576 0.95510 48 2.80483 4.93682 2.97443 2.61597 4.46425 2.29064 3.77553 3.88892 1.32569 3.43879 4.28960 3.08144 3.92186 2.93813 2.65708 2.83452 3.08753 3.51280 5.54953 4.28942 58 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02612 4.05388 4.77622 0.61958 0.77255 0.41381 1.08214 49 2.84120 5.27435 1.68775 2.26960 4.56502 2.29088 2.42788 4.09299 2.65957 3.61371 4.42568 2.83406 3.88143 2.91339 3.18673 2.78441 3.11108 3.68635 5.76055 4.31897 59 d - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 50 3.50771 4.88753 4.66754 4.31907 3.27776 4.35743 4.88268 2.50779 4.08449 0.57907 3.22569 4.56607 4.74802 4.37991 4.20749 3.97946 3.79191 2.62059 5.25407 4.04279 60 L - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 51 2.61468 4.74454 3.06304 2.59927 4.23874 3.36063 3.77249 3.64116 1.97066 3.24726 4.06983 3.06508 3.85934 2.93448 2.88769 1.85454 2.18544 3.27080 5.46527 4.16048 61 s - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.14278 4.17053 2.14040 0.61958 0.77255 0.48576 0.95510 52 2.52024 4.36440 3.59984 3.36495 4.13961 3.19652 4.36705 3.28932 3.31151 3.14627 4.18808 3.54195 3.91596 3.69802 3.55893 2.72392 0.89769 2.96439 5.56121 4.35741 62 t - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02612 4.05388 4.77622 0.61958 0.77255 0.61280 0.78052 53 2.00421 4.83344 2.73130 1.88492 4.26314 3.29918 3.73651 3.66620 2.57043 3.27767 4.10563 2.92448 2.63274 2.89912 3.02626 2.66205 2.92354 3.29977 5.50994 4.16245 63 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02612 4.05388 4.77622 0.61958 0.77255 0.61280 0.78052 54 1.90310 4.97279 1.43756 2.34231 4.50970 3.22699 3.85915 3.88937 2.82693 3.54829 4.41303 2.87352 3.84544 3.04026 3.34422 2.73910 3.07381 3.49219 5.77029 4.37115 64 d - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02612 4.05388 4.77622 0.61958 0.77255 0.61280 0.78052 55 2.18533 5.05270 2.64533 1.85684 4.37424 3.35403 3.67211 3.80533 2.44339 3.36056 4.17812 2.86860 3.83643 2.12599 2.88684 2.71027 2.98051 3.43920 5.55423 4.18436 65 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02612 4.05388 4.77622 0.61958 0.77255 0.61280 0.78052 56 3.13196 4.50147 4.66344 4.09993 3.17844 4.35544 4.69477 2.10947 3.96544 1.29858 2.08362 4.35381 4.60740 4.13883 4.12558 3.68762 3.36369 1.71484 5.14632 4.04025 66 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02612 4.05388 4.77622 0.61958 0.77255 0.41381 1.08214 57 2.77518 4.88378 3.20647 2.62847 4.09102 3.55791 2.77326 3.52900 1.58122 3.10620 2.81396 3.10407 3.94154 2.84034 2.59418 2.81851 2.98957 3.23303 5.30551 4.01037 67 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 58 1.98011 4.72138 3.01521 2.62045 4.30811 2.00711 3.83054 3.71383 1.96488 3.32247 4.14606 3.07589 3.85863 2.99938 2.97459 2.67347 2.92820 3.31928 5.53681 4.23356 68 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 59 2.54030 4.60072 2.94472 2.73690 4.42083 3.17460 4.04525 3.94722 2.94189 3.56874 4.40079 2.19422 3.84825 3.25845 3.33905 1.19171 2.95793 3.45125 5.71396 4.37902 69 s - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 60 1.75557 4.84888 2.80316 1.94020 4.29532 3.33641 3.78242 3.70119 2.61730 3.31239 4.13736 2.97695 2.68041 2.94506 3.07337 2.69200 2.95171 3.33082 5.54442 4.20009 70 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 61 2.85477 5.35373 1.57929 2.26604 4.66713 3.36621 3.72055 4.15408 2.04941 3.64094 4.43894 2.83078 3.88141 2.28061 3.01577 2.78371 3.10598 3.73754 5.78194 4.35313 71 d - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 62 3.16799 4.52011 4.78339 4.28816 3.47922 4.42194 4.93953 1.93645 4.13446 1.55378 3.32483 4.50424 4.74973 4.39416 4.31418 3.81083 3.43560 1.05385 5.43415 4.23086 72 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 63 3.19706 5.30676 3.64157 2.92676 4.80642 3.78807 3.68664 4.13614 1.08610 3.54219 4.41616 3.31159 4.14417 2.81714 1.62370 3.18272 3.34782 3.81582 5.55100 4.40927 73 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 64 2.21500 4.61006 3.19001 2.65193 3.83610 2.74235 3.73692 3.23711 2.08307 2.89201 3.74894 3.11921 3.89354 2.94707 2.93126 2.73340 2.87427 2.95732 2.95066 3.88989 74 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 65 3.37985 5.12493 3.47254 3.27248 3.53947 3.73853 0.64422 4.13019 3.10958 3.58123 4.65589 3.66553 4.31229 3.64560 3.35196 3.45099 3.69774 3.85992 4.99759 3.48405 75 H - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 66 1.58696 4.27981 3.52911 3.33725 4.53096 1.13929 4.44312 3.91427 3.47264 3.64420 4.48561 3.45598 3.81284 3.73653 3.75942 2.52816 2.85748 3.33505 5.85985 4.67720 76 g - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 67 2.73725 4.94911 2.96864 2.01828 4.23410 3.47850 3.68174 3.57948 1.77026 3.20392 4.03909 3.00535 3.89599 2.82835 2.74783 2.75519 2.96712 2.42859 5.43164 4.11182 77 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 68 2.89057 5.08411 3.29340 2.67705 4.48072 3.60221 3.66285 3.85365 1.54699 3.35969 4.19234 3.13427 3.98596 2.79535 1.87627 2.89690 2.26116 3.51511 5.47915 4.23549 78 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 69 3.19694 4.48391 4.99800 4.51340 3.70437 4.59686 5.22508 1.39091 4.40799 2.19554 3.49619 4.71017 4.90059 4.67186 4.59646 3.99910 3.46528 0.94853 5.69937 4.48740 79 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 70 2.32126 4.41027 4.47827 3.93427 3.36487 4.17083 4.58032 1.66946 3.80682 1.34743 3.22329 4.17807 4.50608 4.04469 4.00345 3.50357 3.24275 2.01455 5.18292 4.01995 80 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 71 2.72015 5.08296 2.15356 2.32567 4.49339 2.49653 3.73723 3.95936 2.59323 3.49889 4.29385 2.16105 3.84386 2.87772 3.10241 2.69862 2.22736 3.54680 5.68118 4.27737 81 d - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 72 0.65703 4.36951 3.79323 3.61118 4.37675 3.18379 4.59388 3.54906 3.63596 3.41585 4.42301 3.67645 3.95223 3.95096 3.85794 2.72149 3.02015 3.15009 5.77288 4.61080 82 A - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 73 3.19852 4.53795 4.84236 4.28389 2.27629 4.42541 4.67461 2.20548 4.15265 1.15724 3.02639 4.46384 4.67035 4.26075 4.25690 3.76328 3.42741 1.71320 5.02128 3.80090 83 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 74 2.49416 4.59890 3.02649 2.65890 4.35506 2.21720 3.90927 3.79531 2.76783 3.39902 4.20284 2.16395 3.80836 3.08392 3.20503 2.03622 2.23693 3.33800 5.61329 4.30050 84 s - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 75 2.05794 5.23140 1.54999 2.27566 4.64482 3.30466 3.80351 4.12174 2.73241 3.66297 4.47965 2.22062 3.87908 2.95801 3.27316 2.78027 3.12135 3.69880 5.84056 4.40054 85 d - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 76 1.61166 4.27982 3.63832 3.17644 3.74795 2.42112 4.10689 2.08831 3.13628 2.76623 3.69806 3.45289 3.93930 3.43973 3.45294 2.73127 2.85709 2.61210 5.21491 3.99101 86 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 77 3.20496 4.55642 4.80901 4.30057 3.37932 4.44822 4.91814 2.00861 4.14433 1.22854 3.21334 4.52148 4.74969 4.36955 4.30722 3.82958 3.46407 1.29918 5.36497 4.19578 87 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 78 1.38198 4.69793 3.15559 2.76052 4.25943 3.37240 3.88748 3.57639 1.90985 3.25578 4.12914 3.18143 3.92185 3.07614 2.89280 2.76160 2.99371 3.22926 5.50610 4.23762 88 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 79 2.76909 5.01346 2.97047 2.50613 4.30707 3.47504 2.22910 3.77671 1.87688 3.31800 4.13696 3.00989 3.90535 2.82236 2.67052 2.14651 3.00284 3.42474 5.46072 4.12930 89 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.19160 4.17053 1.83934 0.61958 0.77255 0.48576 0.95510 80 3.09435 4.47804 4.58415 4.02251 3.17074 4.30410 4.64343 2.09509 3.88787 1.35628 2.06749 4.28772 4.56611 4.07866 4.06271 3.63387 3.32783 1.72694 5.12617 4.01057 90 l - - - 2.68621 4.42228 2.77478 2.73126 3.46356 2.40515 3.72497 3.29357 2.67743 2.69357 4.24692 2.90349 2.73742 3.18149 2.89803 2.37889 2.77522 2.98521 4.58479 3.61506 0.23247 1.61654 4.72868 0.26932 1.44348 0.39208 1.12593 81 2.96494 5.43583 1.26091 2.27011 4.75471 3.35488 3.81425 4.25461 1.94387 3.76386 4.60077 2.84058 3.92909 2.97022 3.19724 2.88201 3.23813 3.84444 5.89623 4.45762 94 d - - - 2.68621 4.42228 2.77522 2.73126 3.46356 2.40515 3.72497 3.29357 2.67743 2.69357 4.24692 2.90349 2.73742 3.18149 2.89803 2.37889 2.77478 2.98521 4.58479 3.61506 0.52346 1.78073 1.43122 0.26932 1.44348 0.48576 0.95510 82 2.74562 4.96011 2.44317 1.60882 4.43934 1.96747 3.78043 3.89296 2.67513 3.48339 4.34523 2.83919 3.80824 2.96538 3.13345 2.74076 3.06162 3.50398 5.64186 4.29291 96 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.03031 3.90719 4.62954 0.61958 0.77255 0.35593 1.20572 83 2.74460 5.21822 2.23027 2.29485 4.53062 3.38085 2.57281 4.01334 1.97192 3.50733 4.28236 2.31931 3.84080 2.77738 2.90970 2.69538 2.98482 3.59939 5.64948 4.23808 97 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 84 2.77518 4.40050 3.76366 3.20346 3.22508 3.76666 2.60824 2.70447 3.02388 1.88103 2.03125 3.55532 4.13155 3.38179 3.30306 3.04627 3.00598 2.58341 4.81772 3.51032 98 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 85 2.70297 5.08812 2.76874 1.94479 4.41808 3.39611 3.65320 3.87114 2.04765 3.39565 4.17998 2.89362 2.87534 2.77791 2.85903 2.14472 2.94402 3.48013 5.56268 4.18347 99 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 86 2.04190 4.50732 3.20940 2.71638 3.85498 2.58430 3.82054 3.22830 2.71127 2.90856 2.58178 2.51993 3.86966 3.04675 3.11665 2.68218 2.84393 2.93051 5.21959 3.94521 100 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 87 2.28102 4.99235 2.86540 1.99008 4.31170 3.41473 3.65530 3.73667 1.97871 3.29595 4.09330 2.93220 3.84364 2.78720 2.83234 2.67808 2.39651 3.37112 5.48745 4.13168 101 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 88 3.47968 4.79174 4.96552 4.46369 2.09402 4.63115 4.62106 2.39202 4.31413 0.81947 2.98906 4.62247 4.82864 4.36940 4.39177 4.00871 3.70317 2.55556 4.82074 3.42905 102 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 89 2.24590 4.95821 3.08157 2.52672 4.32303 3.47380 3.65782 3.73561 1.87977 3.28025 4.08797 3.02223 3.88413 2.79150 2.10401 2.29026 2.95016 3.37817 5.45086 4.14257 103 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 90 2.18144 4.84289 2.17529 2.44774 4.30977 3.32148 3.74792 3.73513 2.58025 3.32574 4.12874 2.95701 2.57638 2.89666 3.05711 2.64021 2.31932 3.34361 5.54135 4.18481 104 d - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 91 3.50771 4.88753 4.66754 4.31907 3.27776 4.35743 4.88268 2.50779 4.08449 0.57907 3.22569 4.56607 4.74802 4.37991 4.20749 3.97946 3.79191 2.62059 5.25407 4.04279 105 L - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 92 1.61908 4.24700 3.57954 3.30978 4.43449 3.02346 4.36977 3.81415 3.36299 3.54271 4.37897 3.42766 3.78766 3.64935 3.66104 1.10025 2.80595 3.25861 5.78647 4.57415 106 s - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 93 2.83983 5.37184 2.02499 1.85340 4.67947 2.33239 3.72576 4.17617 2.59996 3.66499 4.45606 2.79996 3.86570 2.13524 3.13634 2.76341 3.09716 3.74900 5.81693 4.36292 107 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 94 2.69267 4.64839 3.23734 2.71746 3.87516 3.51620 3.76790 3.23374 2.00636 2.00431 3.78777 3.16977 3.93988 2.98015 2.84201 2.18270 2.93830 2.96966 5.20949 3.93586 108 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 95 3.37985 5.12493 3.47254 3.27248 3.53947 3.73853 0.64422 4.13019 3.10958 3.58123 4.65589 3.66553 4.31229 3.64560 3.35196 3.45099 3.69774 3.85992 4.99759 3.48405 109 H - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 96 0.99728 2.35263 4.14410 3.78612 4.09954 3.10355 4.52852 3.20572 3.67262 3.13354 4.06953 3.68067 3.86141 3.93046 3.86415 2.56521 2.81532 2.83240 5.56979 4.40040 110 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 97 2.68411 5.08330 2.32604 2.34205 4.38856 3.39880 2.83045 3.84745 1.98758 3.37192 4.15121 2.88512 3.82723 2.75605 2.85736 2.65932 2.31516 3.45780 5.53864 4.15400 111 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 98 2.80484 4.96288 3.06973 2.65179 4.47351 3.45448 3.77240 3.89351 1.30310 3.43952 4.28031 3.11004 3.95068 2.92536 2.62032 2.05537 3.08096 3.51581 5.56701 4.28511 112 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 99 2.99283 4.49999 4.07852 3.56084 1.94221 3.97132 2.39096 2.84229 3.42790 1.58685 3.45194 3.77479 4.32044 3.66782 3.65147 3.26863 3.22195 2.73084 4.26685 2.69158 113 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 100 2.91926 5.21314 3.25278 2.62708 4.61744 3.61373 2.62204 4.01195 1.67757 3.45918 4.27247 3.09877 3.98114 2.10195 1.96699 2.89477 3.10786 3.64749 5.52995 4.27447 116 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 101 3.19662 4.48391 4.99691 4.51237 3.70426 4.59588 5.22422 1.39437 4.40684 2.19564 3.49626 4.70922 4.89997 4.67090 4.59544 3.99813 3.46504 0.94661 5.69902 4.48692 117 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 102 2.95622 5.29664 1.14909 2.34229 4.74881 3.32628 3.93145 4.27127 2.92777 3.81552 4.67604 2.90289 2.21468 3.11102 3.47618 2.90569 3.27514 3.84533 5.93650 4.52440 118 d - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 103 2.73545 4.45726 3.70818 3.29077 3.67236 3.58941 4.22218 1.92363 3.19536 2.53299 3.65150 3.60711 1.54194 3.55957 3.48883 2.99020 3.06768 2.50938 5.25675 4.00214 119 p - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 104 2.71136 5.03275 2.93280 2.07992 4.33603 3.45462 3.63476 3.76069 1.93027 3.30067 4.09854 2.95148 3.86016 2.21209 2.71566 2.70281 2.93689 2.70757 5.47550 4.13268 120 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 105 2.98528 4.85667 3.21652 2.91031 2.89335 3.66526 3.72320 3.52422 2.94569 3.07702 4.06925 1.85829 4.14374 3.29399 3.29374 3.05553 3.25453 3.27485 4.47872 1.53302 121 y - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 106 3.46400 4.78153 4.84716 4.39403 1.23238 4.51751 4.25547 2.54172 4.23543 1.35484 3.17820 4.44671 4.77310 4.29963 4.31196 3.89710 3.69542 2.64552 4.45005 2.88918 122 f - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 107 2.93429 5.24643 3.13283 2.00461 4.65764 3.59020 3.64682 4.05154 1.47665 3.49748 4.31310 3.07366 3.98072 2.76670 1.95398 2.90214 3.12898 3.68211 5.57023 4.30587 123 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 108 3.18469 4.52632 4.82793 4.26995 2.14389 4.40585 4.64305 2.21372 4.13733 1.21403 3.03380 4.44324 4.65604 4.24696 4.24077 3.74256 3.41385 1.71701 4.99200 3.75442 124 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 109 3.41438 4.70993 5.04893 4.51836 3.21871 4.71073 5.05993 1.60681 4.34794 0.90468 3.01922 4.76098 4.89446 4.48359 4.45935 4.09339 3.64659 2.14279 5.32906 4.22624 125 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 110 1.62918 4.25890 3.52443 3.21389 4.46285 2.08385 4.30536 3.89520 3.28750 3.56245 4.36692 3.37490 3.76841 3.55962 3.62104 1.39579 2.78525 3.30742 5.78553 4.57236 126 s - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 111 2.15163 5.09516 2.69879 1.91867 4.39246 3.38632 2.78544 3.85145 2.46320 3.38990 4.18345 2.34224 3.84440 2.80472 2.94034 2.69506 2.96393 3.47085 5.56927 4.18147 127 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 112 1.91362 2.69496 4.29354 3.80418 3.63206 3.55211 4.44264 2.34167 3.68862 2.54686 3.56932 3.87161 4.13344 3.93035 3.88004 2.94806 2.94562 1.39010 5.22065 4.02821 128 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 113 3.35736 4.64490 5.04324 4.51934 3.30481 4.68876 5.07991 1.24213 4.35838 1.19980 3.10930 4.74783 4.89407 4.52077 4.48166 4.07304 3.59562 1.98719 5.38581 4.25821 129 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 114 2.15026 4.33197 4.49839 3.94555 3.47761 4.16982 4.58767 1.60178 3.84223 1.83873 3.35032 4.17671 4.50618 4.08081 4.04536 3.49512 3.18798 1.55662 5.22069 4.03362 130 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 115 2.60765 3.11045 2.44692 2.61713 3.78328 3.47145 2.70544 3.17099 2.61219 2.84876 3.70836 3.09707 3.88086 2.94850 3.03743 2.71369 2.85065 2.44939 5.14817 3.85078 131 d - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 116 2.65919 4.31630 4.05552 3.61961 3.77490 3.58602 4.45943 2.35393 3.51636 2.58444 3.68098 3.80534 4.17236 3.83559 3.77288 2.99225 1.71326 1.37604 5.40444 4.18618 132 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 117 3.25626 4.61566 4.82164 4.31203 3.29692 4.47106 4.91411 2.09194 4.14523 0.98973 3.12497 4.54192 4.75773 4.35125 4.29737 3.85461 3.51255 1.59746 5.32099 4.17329 133 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 118 1.35596 4.59862 3.15990 2.80290 3.93354 3.34760 2.37774 3.49859 2.77026 3.15238 4.03955 3.20961 3.91597 3.17258 3.12384 2.74246 2.96651 3.16138 5.31238 3.96036 134 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 119 1.68070 4.57996 3.11522 2.69441 4.07118 3.30363 2.64799 3.51996 2.70611 3.15910 3.99847 3.12527 3.84977 3.06321 3.10873 2.01880 2.87619 3.15621 5.39209 4.08411 135 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 120 2.77810 4.96889 3.06679 2.57232 4.26331 2.43465 2.19350 3.74416 2.29922 3.29173 4.11990 3.05923 3.92435 2.84608 2.05338 2.79719 3.01427 3.40041 5.42536 4.10867 136 r - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.19360 4.17053 1.82902 0.61958 0.77255 0.48576 0.95510 121 2.91731 4.49086 3.84673 3.33441 1.97901 3.85168 2.30285 2.87818 3.21059 1.91994 3.48685 3.59860 4.21175 3.48562 3.47435 3.14244 3.14796 2.74242 4.18728 2.59026 137 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 122 2.47207 4.41486 3.18333 2.97731 4.39560 1.89060 4.18091 3.87658 3.13183 3.52325 4.38572 3.28358 1.38728 3.44527 3.46827 2.61868 2.92769 3.37316 5.63514 4.45522 138 p - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 123 2.05007 4.64826 2.94330 2.56436 4.21483 2.22334 3.77246 3.61031 1.99795 3.23166 4.06417 3.01804 3.80164 2.94809 2.91064 2.62375 2.87331 3.22854 5.45531 4.15728 139 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 124 2.95564 5.52033 1.58995 1.36123 4.80736 3.23074 3.77373 4.32434 2.78807 3.82833 4.68307 2.69583 3.85156 2.94039 3.38067 2.83917 3.24394 3.89941 5.97849 4.47824 140 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 125 3.43014 4.79377 4.41961 4.16065 0.81827 4.08599 3.94168 2.93926 4.06474 2.27964 3.65089 4.16979 4.54276 4.19674 4.15182 3.69228 3.73192 2.93938 4.15445 2.50608 141 f - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 126 2.30196 4.23748 3.34129 3.07052 4.24739 1.85655 4.17463 3.59585 3.12812 3.33237 4.19372 3.28741 3.73510 3.44504 3.44418 2.47519 1.48689 3.12032 5.58986 4.37239 142 t - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 127 1.60117 4.26833 3.32665 3.04151 4.20342 3.04342 4.14954 3.51964 3.08789 3.25857 4.15082 3.28282 1.69583 3.41436 3.41080 2.50359 2.79018 3.08270 5.56177 4.33448 143 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 128 2.09416 4.86355 1.93633 2.34594 4.36134 3.23194 3.74864 3.78719 2.63597 3.38580 4.20723 2.86699 2.54616 2.91041 3.12886 2.63865 2.93330 3.38692 5.60063 4.22562 144 d - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.65830 0.72926 129 1.80976 4.23516 3.96947 3.56415 3.74642 3.46121 4.42479 2.29383 3.48463 2.53809 3.64787 3.72792 4.07683 3.79419 3.74101 2.88210 2.94676 1.36554 5.38824 4.16873 145 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02746 4.00439 4.72674 0.61958 0.77255 0.39126 1.12763 130 2.80302 5.26444 2.00334 2.28495 4.52316 3.37323 2.71517 4.04914 2.50881 3.55046 4.34524 2.84460 3.86605 1.82350 2.99709 2.74697 3.05069 3.64430 5.68053 4.25177 146 q - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 131 1.01128 4.25735 3.59041 3.36202 4.47549 1.87714 4.42913 3.84699 3.45765 3.58244 4.42328 3.46489 3.80605 3.72462 3.74295 2.51560 2.83638 3.28664 5.81618 4.63355 147 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 132 1.29715 4.24288 3.55730 3.25503 4.44977 1.92730 4.33024 3.87621 3.32759 3.55207 4.36044 3.39460 3.76907 3.59477 3.65033 1.86881 2.78293 3.29220 5.78160 4.57568 148 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 133 2.95397 4.34874 4.49529 3.93597 2.06030 4.06581 4.10529 2.52968 3.79135 1.64373 2.21913 4.04730 4.38049 3.92541 3.90127 3.37422 3.17955 2.48919 4.49011 2.31254 149 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 134 2.87148 5.44150 1.98118 1.74899 4.74617 3.33260 3.73791 4.25433 2.62738 3.72942 4.52187 2.07888 3.87291 2.23146 3.17389 2.78299 3.13122 3.81624 5.87307 4.40314 150 e - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 135 3.27331 5.22456 3.46754 3.04631 4.68046 3.71770 3.96365 4.13172 0.69147 3.63653 4.59195 3.45354 4.20521 3.14539 2.53832 3.30173 3.50915 3.82642 5.61930 4.48069 151 K - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 136 2.13728 4.25596 4.26822 3.70038 2.51560 3.93283 4.27242 2.28282 3.58922 1.68324 3.19522 3.92448 4.28790 3.80594 3.78003 3.23864 3.04401 1.82614 4.90639 3.70545 152 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 137 3.25266 4.59255 4.86528 4.29758 3.18898 4.50160 4.83534 2.17302 4.15958 1.11276 2.09173 4.53148 4.72252 4.28685 4.28308 3.84128 3.47963 1.79006 5.20435 4.12672 153 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 138 1.79466 4.79782 2.82404 1.94090 4.31166 3.30608 3.81075 3.72422 2.65702 3.33717 4.15830 2.99339 3.84716 2.97720 3.11199 2.03142 2.93949 3.33667 5.56525 4.22435 154 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 139 2.58506 4.29342 3.55405 3.00981 3.47023 2.68992 3.90060 2.80129 2.93915 2.04902 2.51305 3.37662 3.96778 3.25166 3.26632 2.35763 2.84501 2.57968 4.93542 3.70537 155 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 140 3.08583 4.40689 4.84510 4.29544 2.25790 4.37874 4.73777 1.57472 4.17210 1.94826 3.22641 4.44953 4.66205 4.33233 4.29141 3.72292 3.32617 1.35939 5.16135 3.94030 156 v - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 141 2.02979 2.61338 3.45168 2.91840 3.84883 3.32836 3.92100 3.21873 2.81248 2.91084 3.77423 3.27409 3.86642 3.17756 2.28029 2.17107 2.82032 2.90332 5.22633 3.98297 157 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 142 2.65037 4.69800 3.11777 2.58559 3.93396 3.48363 3.71066 2.49275 2.05906 2.95516 3.80693 2.50024 3.88815 2.89605 2.88872 2.72907 2.42763 2.99850 5.24239 3.94877 158 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 143 2.21701 4.52657 2.45380 2.75014 3.73535 3.53805 3.84294 2.86807 2.75770 2.17002 3.64455 3.21159 3.95457 3.08148 3.16791 2.80094 2.89608 2.24528 5.16549 3.89225 159 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 144 3.41438 4.70993 5.04893 4.51836 3.21871 4.71073 5.05993 1.60681 4.34794 0.90468 3.01922 4.76098 4.89446 4.48359 4.45935 4.09339 3.64659 2.14279 5.32906 4.22624 160 l - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 145 1.66341 4.55765 3.29747 2.78822 4.09563 3.34088 3.86205 3.44543 2.60980 3.11452 3.96692 3.19039 3.87148 3.05878 2.16675 2.67137 2.29043 3.09965 5.38848 4.12438 161 a - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 146 1.96741 4.60402 3.09101 2.67267 4.09875 3.30287 2.64764 3.55483 2.68845 3.18630 4.02165 3.11035 3.84730 3.04694 3.09548 1.72418 2.88008 3.18467 5.41006 4.09565 162 s - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 147 2.02427 4.88556 3.14956 2.70898 4.40362 3.45865 3.80224 3.73109 1.30907 3.34916 4.21424 3.15279 3.95761 2.96243 2.65527 2.83485 3.06573 3.38348 5.54009 4.27566 163 k - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.02321 4.17053 4.89288 0.61958 0.77255 0.48576 0.95510 148 3.70647 5.07328 4.29292 4.08736 2.37118 4.18885 3.80078 3.67800 3.93734 3.05218 4.32316 4.11065 4.65987 4.16910 4.05541 3.80923 3.99693 3.56378 4.02310 0.58497 164 Y - - - 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 0.19360 4.17053 1.82902 0.61958 0.77255 0.48576 0.95510 149 2.92198 5.11574 3.28049 2.65489 4.47826 3.59727 2.51142 3.88373 1.57593 3.35205 4.19259 3.10178 3.96579 2.72398 1.84611 2.91372 3.10363 3.55066 5.42147 4.18835 165 k - - - 2.68634 4.42241 2.77536 2.73098 3.46370 2.40469 3.72511 3.29370 2.67757 2.69331 4.24706 2.90363 2.73756 3.18097 2.89817 2.37903 2.77536 2.98535 4.58493 3.61418 0.22163 1.61553 * 1.50361 0.25145 0.00000 * //

that has been calculated * by or * (or one that obeys the same conditions; see below), * convert the joint probabilities to conditional * probabilities , where is a residue in the target, * and is a residue in the query. * * $P(b \mid a) = P(ab) / P(a)$, where $P(a) = \sum_b P(ab)$. * * The value stored in mx[a][b]> is $P(b \mid a)$. * * All values in

residue probability vector is non-NULL, it gives * a 0..K-1 array of background frequencies, and the * returned match probability is an expectation (weighted * average) given those residue frequencies. * * and should only be residue codes. Any other * comparison, including comparisons involving gap or * missing data characters, or even comparisons involving * illegal digital codes, returns 0.0. * * Note that comparison of residues from "identical" * sequences (even a self-comparison) will not result in an * identity of 1.0, if the sequence(s) contain degenerate * residue codes. * * Args: abc - digtal alphabet to use * x,y - two symbols to compare * p - NULL, or background probabilities of the * canonical residues in this alphabet [0..K-1] * * Returns: the probability of an identity (match) between * residues and . */ double esl_abc_Match(const ESL_ALPHABET *abc, ESL_DSQ x, ESL_DSQ y, double *p) { int i; double prob; double sx, sy; /* Easy cases */ if (esl_abc_XIsCanonical(abc, x) && esl_abc_XIsCanonical(abc, y)) { if (x==y) return 1.0; else return 0.0; } if ( ! esl_abc_XIsResidue(abc, x) || ! esl_abc_XIsResidue(abc, x)) return 0.0; /* Else, we have at least one degenerate residue, so calc an average or expectation. */ if (p != NULL) { prob = sx = sy = 0.; for (i = 0; i < abc->K; i++) { if (abc->degen[(int)x][i]) sx += p[i]; if (abc->degen[(int)y][i]) sy += p[i]; if (abc->degen[(int)x][i] && abc->degen[(int)x][i]) prob += p[i] * p[i]; } prob = prob / (sx*sy); } else { double uniformp = 1. / (double) abc->K; prob = sx = sy = 0.; for (i = 0; i < abc->K; i++) { if (abc->degen[(int)x][i]) sx += uniformp; if (abc->degen[(int)y][i]) sy += uniformp; if (abc->degen[(int)x][i] && abc->degen[(int)x][i]) prob += uniformp * uniformp; } prob = prob / (sx*sy); } return prob; } /* Function: esl_abc_IAvgScore() * Synopsis: Returns average score for degenerate residue. * * Purpose: Given a residue code in alphabet , and an array of * integer scores for the residues in the base * alphabet, calculate and return the average score * (rounded to nearest integer). * * would usually be a degeneracy code, but it * may also be a canonical residue. It must not * be a gap, missing data, or illegal symbol; if it * is, these functions return a score of 0 without * raising an error. * * and do the * same, but for float and double scores instead of integers * (and for real-valued scores, no rounding is done). * * Args: a - digital alphabet to use * x - a symbol to score * sc - score vector for canonical residues [0..K-1] * * Returns: average score for symbol */ int esl_abc_IAvgScore(const ESL_ALPHABET *a, ESL_DSQ x, const int *sc) { float result = 0.; int i; if (! esl_abc_XIsResidue(a, x)) return 0; for (i = 0; i < a->K; i++) if (a->degen[(int) x][i]) result += (float) sc[i]; result /= (float) a->ndegen[(int) x]; if (result < 0) return (int) (result - 0.5); else return (int) (result + 0.5); } float esl_abc_FAvgScore(const ESL_ALPHABET *a, ESL_DSQ x, const float *sc) { float result = 0.; int i; if (! esl_abc_XIsResidue(a, x)) return 0.; for (i = 0; i < a->K; i++) if (a->degen[(int) x][i]) result += sc[i]; result /= (float) a->ndegen[(int) x]; return result; } double esl_abc_DAvgScore(const ESL_ALPHABET *a, ESL_DSQ x, const double *sc) { double result = 0.; int i; if (! esl_abc_XIsResidue(a, x)) return 0.; for (i = 0; i < a->K; i++) if (a->degen[(int) x][i]) result += sc[i]; result /= (double) a->ndegen[(int) x]; return result; } /* Function: esl_abc_IExpectScore() * Synopsis: Returns expected score for degenerate residue. * * Purpose: Given a residue code in alphabet , an * array of integer scores for the residues in the base * alphabet, and background frequencies

. */ double esl_gumbel_invsurv(double p, double mu, double lambda) { /* The real calculation is mu - ( log(-1. * log(1-p)) / lambda). * But there's a problem with small p: * for p<1e-15, 1-p will be viewed as 1, so * log ( -log(1-p) ) == log (0) -> inf * Instead, use two approximations; * (1) log( 1-p) ~= -p for small p (e.g. p<0.001) * so log(-1. * log(1-p)) ~= log(p) * (2) log (p) ~= (p^p - 1) / p * * See notes Mar 1, 2010. */ double log_part; if (p < eslSMALLX1) { log_part = (pow(p,p) - 1 ) / p; } else { log_part = log(-1. * log(1-p)); } //test 2 return mu - ( log_part / lambda); } /*------------------ end of densities and distributions --------------------*/ /***************************************************************** * 2. Generic API routines: for general interface w/ histogram module *****************************************************************/ /* Function: esl_gumbel_generic_pdf() * * Purpose: Generic-API version of PDF function. */ double esl_gumbel_generic_pdf(double p, void *params) { double *v = (double *) params; return esl_gumbel_pdf(p, v[0], v[1]); } /* Function: esl_gumbel_generic_cdf() * * Purpose: Generic-API version of CDF function. */ double esl_gumbel_generic_cdf(double x, void *params) { double *p = (double *) params; return esl_gumbel_cdf(x, p[0], p[1]); } /* Function: esl_gumbel_generic_surv() * * Purpose: Generic-API version of survival function. */ double esl_gumbel_generic_surv(double p, void *params) { double *v = (double *) params; return esl_gumbel_surv(p, v[0], v[1]); } /* Function: esl_gumbel_generic_invcdf() * * Purpose: Generic-API version of inverse CDF. */ double esl_gumbel_generic_invcdf(double p, void *params) { double *v = (double *) params; return esl_gumbel_invcdf(p, v[0], v[1]); } /*------------------------- end of generic API --------------------------*/ /**************************************************************************** * 3. Routines for dumping plots for files ****************************************************************************/ /* Function: esl_gumbel_Plot() * Synopsis: Plot a Gumbel function in XMGRACE XY format. * * Purpose: Plot a Gumbel function (for instance, * ) for parameters and , for * a range of quantiles x from to in steps of ; * output to an open stream in xmgrace XY input format. * * Returns: on success. * * Throws: on any system write error, such as filled disk. */ int esl_gumbel_Plot(FILE *fp, double mu, double lambda, double (*func)(double x, double mu, double lambda), double xmin, double xmax, double xstep) { double x; for (x = xmin; x <= xmax; x += xstep) if (fprintf(fp, "%f\t%g\n", x, (*func)(x, mu, lambda)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "gumbel plot write failed"); if (fprintf(fp, "&\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "gumbel plot write failed"); return eslOK; } /*-------------------- end plot dumping routines ---------------------------*/ /***************************************************************** * 4. Routines for sampling (requires augmentation w/ random module) *****************************************************************/ #ifdef eslAUGMENT_RANDOM /* Function: esl_gumbel_Sample() * Synopsis: Return a Gumbel-distributed random sample $x$. * * Purpose: Sample a Gumbel-distributed random variate * by the transformation method. */ double esl_gumbel_Sample(ESL_RANDOMNESS *r, double mu, double lambda) { double p; p = esl_rnd_UniformPositive(r); return esl_gumbel_invcdf(p, mu, lambda); } #endif /*eslAUGMENT_RANDOM*/ /*------------------------ end of sampling --------------------------------*/ /***************************************************************** * 5. Routines for maximum likelihood fitting Gumbels to data * (fitting truncated distributions requires augmentation w/ minimizer module) *****************************************************************/ /***************************************************************** * Complete data, maximum a posteriori parameters *****************************************************************/ /* lawless416() * SRE, Thu Nov 13 11:48:50 1997 [St. Louis] * * Purpose: Equation 4.1.6 from [Lawless82], pg. 143, and * its first derivative with respect to lambda, * for finding the ML fit to Gumbel lambda parameter. * This equation gives a result of zero for the maximum * likelihood lambda. * * Args: x - array of sample values * n - number of samples * lambda - a lambda to test * ret_f - RETURN: 4.1.6 evaluated at lambda * ret_df - RETURN: first derivative of 4.1.6 evaluated at lambda * * Return: (void) */ static void lawless416(double *x, int n, double lambda, double *ret_f, double *ret_df) { double esum; /* \sum e^(-lambda xi) */ double xesum; /* \sum xi e^(-lambda xi) */ double xxesum; /* \sum xi^2 e^(-lambda xi) */ double xsum; /* \sum xi */ int i; esum = xesum = xsum = xxesum = 0.; for (i = 0; i < n; i++) { xsum += x[i]; xesum += x[i] * exp(-1. * lambda * x[i]); xxesum += x[i] * x[i] * exp(-1. * lambda * x[i]); esum += exp(-1. * lambda * x[i]); } *ret_f = (1./lambda) - (xsum / n) + (xesum / esum); *ret_df = ((xesum / esum) * (xesum / esum)) - (xxesum / esum) - (1. / (lambda * lambda)); } /* Function: esl_gumbel_FitComplete() * Synopsis: Estimates $\mu$, $\lambda$ from complete data. * Date: SRE, Fri Nov 14 07:56:29 1997 [St. Louis] - HMMER's EVDMaxLikelyFit() * * Purpose: Given an array of Gumbel-distributed samples , * find maximum likelihood parameters and . * * Algorithm: Uses approach described in [Lawless82]. Solves * for lambda using Newton/Raphson iterations, * then substitutes lambda into Lawless' equation 4.1.5 * to get mu. * * Args: x - list of Gumbel distributed samples * n - number of samples * ret_mu : RETURN: ML estimate of mu * ret_lambda : RETURN: ML estimate of lambda * * Returns: on success. * * Throws: if the fit doesn't converge. */ int esl_gumbel_FitComplete(double *x, int n, double *ret_mu, double *ret_lambda) { double variance; double lambda, mu; double fx; /* f(x) */ double dfx; /* f'(x) */ double esum; /* \sum e^(-lambda xi) */ double tol = 1e-5; int i; /* 1. Find an initial guess at lambda * (Evans/Hastings/Peacock, Statistical Distributions, 2000, p.86) */ esl_stats_DMean(x, n, NULL, &variance); lambda = eslCONST_PI / sqrt(6.*variance); /* 2. Use Newton/Raphson to solve Lawless 4.1.6 and find ML lambda */ for (i = 0; i < 100; i++) { lawless416(x, n, lambda, &fx, &dfx); if (fabs(fx) < tol) break; /* success */ lambda = lambda - fx / dfx; /* Newton/Raphson is simple */ if (lambda <= 0.) lambda = 0.001; /* but be a little careful */ } /* 2.5: If we did 100 iterations but didn't converge, Newton/Raphson failed. * Resort to a bisection search. Worse convergence speed * but guaranteed to converge (unlike Newton/Raphson). * We assume that fx is a monotonically decreasing function of x; * i.e. fx > 0 if we are left of the root, fx < 0 if we * are right of the root. */ if (i == 100) { double left, right, mid; ESL_DPRINTF1(("esl_gumbel_FitComplete(): Newton/Raphson failed; switchover to bisection")); /* First bracket the root */ left = 0.; /* for sure */ right = eslCONST_PI / sqrt(6.*variance); /* an initial guess */ lawless416(x, n, lambda, &fx, &dfx); while (fx > 0.) { right *= 2.; /* arbitrary leap to the right */ if (right > 100.) /* no reasonable lambda should be > 100, we assert */ ESL_EXCEPTION(eslENOHALT, "Failed to bracket root in esl_gumbel_FitComplete()."); lawless416(x, n, right, &fx, &dfx); } /* Now, bisection search in left/right interval */ for (i = 0; i < 100; i++) { mid = (left + right) / 2.; lawless416(x, n, mid, &fx, &dfx); if (fabs(fx) < tol) break; /* success */ if (fx > 0.) left = mid; else right = mid; } if (i == 100) ESL_EXCEPTION(eslENOHALT, "Even bisection search failed in esl_gumbel_FitComplete()."); lambda = mid; } /* 3. Substitute into Lawless 4.1.5 to find mu */ esum = 0.; for (i = 0; i < n; i++) esum += exp(-lambda * x[i]); mu = -log(esum / n) / lambda; *ret_lambda = lambda; *ret_mu = mu; return eslOK; } /* Function: esl_gumbel_FitCompleteLoc() * Synopsis: Estimates $\mu$ from complete data, given $\lambda$. * * Purpose: Given an array of Gumbel-distributed samples * (complete data), and a known * (or otherwise fixed) , find a maximum * likelihood estimate for location parameter . * * Algorithm: A straightforward simplification of FitComplete(). * * Args: x - list of Gumbel distributed samples * n - number of samples * lambda - known lambda (scale) parameter * ret_mu : RETURN: ML estimate of mu * * Returns: on success. * * Throws: (no abnormal error conditions) * * Note: Here and in FitComplete(), we have a potential * under/overflow problem. We ought to be doing the * esum in log space. */ int esl_gumbel_FitCompleteLoc(double *x, int n, double lambda, double *ret_mu) { double esum; int i; /* Substitute into Lawless 4.1.5 to find mu */ esum = 0.; for (i = 0; i < n; i++) esum += exp(-lambda * x[i]); *ret_mu = -log(esum / n) / lambda; return eslOK; #if 0 /* Replace the code above w/ code below to test the direct method. */ double mean, variance; esl_stats_DMean(x, n, &mean, &variance); *ret_mu = mean - 0.57722/lambda; return eslOK; #endif } #if eslDEBUGLEVEL >=3 /* direct_mv_fit() * SRE, Wed Jun 29 08:23:47 2005 * * Purely for curiousity: a complete data fit using the * simple direct method, calculating mu and lambda from mean * and variance. */ static int direct_mv_fit(double *x, int n, double *ret_mu, double *ret_lambda) { double mean, variance; esl_stats_DMean(x, n, &mean, &variance); *ret_lambda = eslCONST_PI / sqrt(6.*variance); *ret_mu = mean - 0.57722/(*ret_lambda); return eslOK; } #endif /*------------------- end of complete data fit ---------------------------------*/ /***************************************************************** * Censored data, MAP/ML parameters *****************************************************************/ /* lawless422() * SRE, Mon Nov 17 09:42:48 1997 [St. Louis] * * Purpose: Equation 4.2.2 from [Lawless82], pg. 169, and * its first derivative with respect to lambda, * for finding the ML fit to Gumbel lambda parameter * for Type I censored data. * This equation gives a result of zero for the maximum * likelihood lambda. * * Args: x - array of observed sample values * n - number of observed samples * z - number of censored samples = N-n * phi - censoring value; all observed x_i >= phi * lambda - a lambda to test * ret_f - RETURN: 4.2.2 evaluated at lambda * ret_df - RETURN: first derivative of 4.2.2 evaluated at lambda * * Return: (void) */ static void lawless422(double *x, int n, int z, double phi, double lambda, double *ret_f, double *ret_df) { double esum; /* \sum e^(-lambda xi) + z term */ double xesum; /* \sum xi e^(-lambda xi) + z term */ double xxesum; /* \sum xi^2 e^(-lambda xi) + z term */ double xsum; /* \sum xi (no z term) */ int i; esum = xesum = xsum = xxesum = 0.; for (i = 0; i < n; i++) { xsum += x[i]; esum += exp(-1. * lambda * x[i]); xesum += x[i] * exp(-1. * lambda * x[i]); xxesum += x[i] * x[i] * exp(-1. * lambda * x[i]); } /* Add z terms for censored data */ esum += (double) z * exp(-1. * lambda * phi); xesum += (double) z * phi * exp(-1. * lambda * phi); xxesum += (double) z * phi * phi * exp(-1. * lambda * phi); *ret_f = 1./lambda - xsum / n + xesum / esum; *ret_df = ((xesum / esum) * (xesum / esum)) - (xxesum / esum) - (1. / (lambda * lambda)); return; } /* Function: esl_gumbel_FitCensored() * Synopsis: Estimates $\mu$, $\lambda$ from censored data. * Date: SRE, Mon Nov 17 10:01:05 1997 [St. Louis] * * Purpose: Given a left-censored array of Gumbel-distributed samples * , the number of censored samples , and the * censoring value (all $>$ ). * Find maximum likelihood parameters and . * * Algorithm: Uses approach described in [Lawless82]. Solves * for lambda using Newton/Raphson iterations; * then substitutes lambda into Lawless' equation 4.2.3 * to get mu. * * Args: x - array of Gumbel-distributed samples, 0..n-1 * n - number of observed samples * z - number of censored samples * phi - censoring value (all x_i >= phi) * ret_mu : RETURN: ML estimate of mu * ret_lambda : RETURN: ML estimate of lambda * * Returns: on success. * * Throws: if the fit doesn't converge. */ int esl_gumbel_FitCensored(double *x, int n, int z, double phi, double *ret_mu, double *ret_lambda) { double variance; double lambda, mu; double fx; /* f(x) */ double dfx; /* f'(x) */ double esum; /* \sum e^(-lambda xi) */ double tol = 1e-5; int i; /* 1. Find an initial guess at lambda * (Evans/Hastings/Peacock, Statistical Distributions, 2000, p.86) */ esl_stats_DMean(x, n, NULL, &variance); lambda = eslCONST_PI / sqrt(6.*variance); /* 2. Use Newton/Raphson to solve Lawless 4.2.2 and find ML lambda */ for (i = 0; i < 100; i++) { lawless422(x, n, z, phi, lambda, &fx, &dfx); if (fabs(fx) < tol) break; /* success */ lambda = lambda - fx / dfx; /* Newton/Raphson is simple */ if (lambda <= 0.) lambda = 0.001; /* but be a little careful */ } /* 2.5: If we did 100 iterations but didn't converge, Newton/Raphson failed. * Resort to a bisection search. Worse convergence speed * but guaranteed to converge (unlike Newton/Raphson). * We assume (!?) that fx is a monotonically decreasing function of x; * i.e. fx > 0 if we are left of the root, fx < 0 if we * are right of the root. */ if (i == 100) { double left, right, mid; ESL_DPRINTF1(("esl_gumbel_FitCensored(): Newton/Raphson failed; switched to bisection")); /* First bracket the root */ left = 0.; /* we know that's the left bound */ right = eslCONST_PI / sqrt(6.*variance); /* start from here, move "right"... */ lawless422(x, n, z, phi, right, &fx, &dfx); while (fx > 0.) { right *= 2.; if (right > 100.) /* no reasonable lambda should be > 100, we assert */ ESL_EXCEPTION(eslENOHALT, "Failed to bracket root in esl_gumbel_FitCensored()."); lawless422(x, n, z, phi, right, &fx, &dfx); } /* Now we bisection search in left/right interval */ for (i = 0; i < 100; i++) { mid = (left + right) / 2.; lawless422(x, n, z, phi, mid, &fx, &dfx); if (fabs(fx) < tol) break; /* success */ if (fx > 0.) left = mid; else right = mid; } if (i == 100) ESL_EXCEPTION(eslENOHALT, "Even bisection search failed in esl_gumbel_FitCensored()."); lambda = mid; } /* 3. Substitute into Lawless 4.2.3 to find mu */ esum = 0.; for (i = 0; i < n; i++) esum += exp(-lambda * x[i]); esum += z * exp(-1. * lambda * phi); /* term from censored data */ mu = -log(esum / n) / lambda; *ret_lambda = lambda; *ret_mu = mu; return eslOK; } /* Function: esl_gumbel_FitCensoredLoc() * Synopsis: Estimates $\mu$ from censored data, given $\lambda$. * * Purpose: Given a left-censored array of Gumbel distributed samples * ..x[n-1]>, the number of censored samples , and the censoring * value (where all $>$ ), and a known * (or at least fixed) ; * find the maximum likelihood estimate of the location * parameter $\mu$ and return it in . * * Note: A straightforward simplification of FitCensored(). * * Args: x - array of Gumbel-distributed samples, 0..n-1 * n - number of observed samples * z - number of censored samples * phi - censoring value (all x_i >= phi) * lambda - known scale parameter $\lambda$ * ret_mu : RETURN: ML estimate of $\mu$ * * Returns: on success. * * Throws: (no abnormal error conditions) */ int esl_gumbel_FitCensoredLoc(double *x, int n, int z, double phi, double lambda, double *ret_mu) { double esum; int i; /* Immediately substitute into Lawless 4.2.3 to find mu, because * lambda is known. */ esum = 0.; for (i = 0; i < n; i++) /* contribution from observed data */ esum += exp(-lambda * x[i]); esum += z * exp(-1. * lambda * phi); /* term from censored data */ *ret_mu = -log(esum / (double) n) / lambda; return eslOK; } /***************************************************************** * Truncated data, MAP parameters (requires minimizer augmentation) *****************************************************************/ #ifdef eslAUGMENT_MINIMIZER /* Easel's conjugate gradient descent code allows a single void ptr to * point to any necessary fixed data, so we'll put everything into one * structure: */ struct tevd_data { double *x; /* data: n observed samples from a Gumbel */ int n; /* number of observed samples */ double phi; /* truncation threshold: all observed x_i >= phi */ }; /* tevd_func() * * Called by the optimizer: evaluate the objective function * for the negative posterior log probability of a particular choice * of parameters mu and lambda, given truncated Gumbel samples. */ static double tevd_func(double *p, int nparam, void *dptr) { double mu, w, lambda; struct tevd_data *data; double *x; int n; double phi; double logL; int i; /* unpack what the optimizer gave us; nparam==2 always */ mu = p[0]; w = p[1]; lambda = exp(w); data = (struct tevd_data *) dptr; x = data->x; n = data->n; phi = data->phi; /* The log likelihood equation */ logL = n * log(lambda); for (i = 0; i < n; i++) logL -= lambda * (x[i] - mu); for (i = 0; i < n; i++) logL -= exp(-1. * lambda * (x[i] - mu)); logL -= n * esl_gumbel_logsurv(phi, mu, lambda); return -1.0 * logL; /* objective: minimize the NLP */ } /* tevd_grad() * * Called by the optimizer: evaluate the gradient of the objective * function (the negative posterior log probability of the parameters * mu and w, where w = log(lambda), at a particular choice of mu and * lambda. */ static void tevd_grad(double *p, int nparam, void *dptr, double *dp) { double mu, lambda, w; struct tevd_data *data; double *x; int n; double phi; double dmu, dw; double coeff; int i; /* unpack what the optimizer gave us; nparam==2 always */ mu = p[0]; w = p[1]; lambda = exp(w); data = (struct tevd_data *) dptr; x = data->x; n = data->n; phi = data->phi; /* Both partials include a coefficient that * basically looks like P(S=phi) / P(S>=phi); pre-calculate it. * Watch out when phi >> mu, which'll give us 0/0; instead, * recognize that for phi >> mu, coeff converges to \lambda. */ if (lambda*(phi-mu) > 50.) /* arbitrary crossover. */ coeff = lambda; else coeff = esl_gumbel_pdf(phi, mu, lambda) / esl_gumbel_surv(phi, mu, lambda); /* Partial derivative w.r.t. mu. */ dmu = n * lambda; for (i = 0; i < n; i++) dmu -= lambda * exp(-1. * lambda * (x[i] - mu)); dmu -= n * coeff; /* Partial derivative w.r.t. w=log(lambda). */ dw = n; for (i = 0; i < n; i++) dw -= (x[i] - mu) * lambda; for (i = 0; i < n; i++) dw += (x[i] - mu) * lambda * exp(-1. * lambda * (x[i] - mu)); dw += n * (phi - mu) * coeff; /* Return the negative, because we're minimizing NLP, not maximizing. */ dp[0] = -1. * dmu; /* negative because we're minimizing NLP, not maximizing */ dp[1] = -1. * dw; return; } /* Function: esl_gumbel_FitTruncated() * Synopsis: Estimates $\mu$, $\lambda$ from truncated data. * * Purpose: Given a left-truncated array of Gumbel-distributed * samples and the truncation threshold * (such that all $\geq$ ). * Find maximum likelihood parameters and . * * should not be much greater than , the * mode of the Gumbel, or the fit will become unstable * or may even fail to converge. The problem is * that for $>$ , the tail of the Gumbel * becomes a scale-free exponential, and becomes * undetermined. * * Algorithm: Uses conjugate gradient descent to optimize the * log likelihood of the data. Follows a general * approach to fitting missing data problems outlined * in [Gelman95]. * * Args: x - observed data samples [0..n-1] * n - number of samples * phi - truncation threshold; all x[i] >= phi * ret_mu - RETURN: ML estimate of mu * ret_lambda - RETURN: ML estimate of lambda * * Returns: on success. * * Throws: if the fit doesn't converge. */ int esl_gumbel_FitTruncated(double *x, int n, double phi, double *ret_mu, double *ret_lambda) { struct tevd_data data; double wrk[8]; /* workspace for CG: 4 tmp vectors of size 2 */ double p[2]; /* mu, w; lambda = e^w */ double u[2]; /* max initial step size for mu, lambda */ int status; double mean, variance; double mu, lambda; double fx; data.x = x; data.n = n; data.phi = phi; /* The source of the following magic is Evans/Hastings/Peacock, * Statistical Distributions, 3rd edition (2000), p.86, which gives * eq's for the mean and variance of a Gumbel in terms of mu and lambda; * we turn them around to get mu and lambda in terms of the mean and variance. * These would be reasonable estimators if we had a full set of Gumbel * distributed variates. They'll be off for a truncated sample, but * close enough to be a useful starting point. */ esl_stats_DMean(x, n, &mean, &variance); lambda = eslCONST_PI / sqrt(6.*variance); mu = mean - 0.57722/lambda; p[0] = mu; p[1] = log(lambda); /* c.o.v. because lambda is constrained to >0 */ u[0] = 2.0; u[1] = 0.1; /* Pass the problem to the optimizer. The work is done by the * equations in tevd_func() and tevd_grad(). */ status = esl_min_ConjugateGradientDescent(p, u, 2, &tevd_func, &tevd_grad,(void *)(&data), 1e-4, wrk, &fx); *ret_mu = p[0]; *ret_lambda = exp(p[1]); /* reverse the c.o.v. */ return status; } #endif /*eslAUGMENT_MINIMIZER*/ /*------------------------ end of fitting --------------------------------*/ /***************************************************************** * 6. Stats driver *****************************************************************/ #ifdef eslGUMBEL_STATS /* compile: gcc -g -O2 -Wall -I. -L. -o stats -DeslGUMBEL_STATS esl_gumbel.c -leasel -lm * run: ./stats > stats.out * process w/ lines like: * grep "complete 100" stats.out | awk '{$i = 100*($5-$4)/$4; if ($i < 0) $i = -$i; print $i}' | avg * grep "complete 100" stats.out | awk '{$i = 100*($7-$6)/$6; if ($i < 0) $i = -$i; print $i}' | avg * to get accuracy summary (in %) for mu, lambda; first part of the grep pattern may be "complete", "censored", or * "truncated", second part may be " 100", " 1000", " 10000", or " 100000". * * This is the routine that collects the accuracy statistics that appear * in tables in the Gumbel chapter of the guide, esl_gumbel.tex. */ #include #include "easel.h" #include "esl_random.h" #include "esl_minimizer.h" #include "esl_gumbel.h" int main(int argc, char **argv) { ESL_RANDOMNESS *r; int totalN[4] = {100, 1000, 10000, 100000}; /*biggest last; one malloc*/ int nexps = 4; int exp; int trial, ntrials; double phi; /* truncation threshold. */ int i; int n; double *x; double mu, lambda; double est_mu, est_lambda; double val; int do_complete, do_censored, do_truncated, do_location; ntrials = 500; mu = -20.0; lambda = 0.693; phi = -15.; do_complete = TRUE; /* Flip these on/off as desired */ do_censored = FALSE; do_truncated = FALSE; do_location = FALSE; r = esl_randomness_Create(0); x = malloc(sizeof(double) * totalN[nexps-1]); /* Fitting to simulated complete datasets */ if (do_complete) { for (exp = 0; exp < nexps; exp++) { for (trial = 0; trial < ntrials; trial++) { for (i = 0; i < totalN[exp]; i++) x[i] = esl_gumbel_Sample(r, mu, lambda); /*direct_mv_fit(x, totalN[exp], &est_mu, &est_lambda);*/ esl_gumbel_FitComplete(x, totalN[exp], &est_mu, &est_lambda); printf("complete %6d %6d %9.5f %9.5f %8.6f %8.6f\n", totalN[exp], totalN[exp], mu, est_mu, lambda, est_lambda); } printf("\n"); } } /* Fitting to simulated censored datasets */ if (do_censored) { for (exp = 0; exp < nexps; exp++) { for (trial = 0; trial < ntrials; trial++) { for (n = 0, i = 0; i < totalN[exp]; i++) { val = esl_gumbel_Sample(r, mu, lambda); if (val >= phi) x[n++] = val; } esl_gumbel_FitCensored(x, n, totalN[exp]-n, phi, &est_mu, &est_lambda); printf("censored %6d %6d %9.5f %9.5f %8.6f %8.6f\n", totalN[exp], n, mu, est_mu, lambda, est_lambda); } printf("\n"); } } /* Fitting to simulated truncated datasets */ #ifdef eslAUGMENT_MINIMIZER if (do_truncated) { for (exp = 0; exp < nexps; exp++) { for (trial = 0; trial < ntrials; trial++) { for (n = 0, i = 0; i < totalN[exp]; i++) { val = esl_gumbel_Sample(r, mu, lambda); if (val >= phi) x[n++] = val; } esl_gumbel_FitTruncated(x, n, phi, &est_mu, &est_lambda); printf("truncated %6d %6d %9.5f %9.5f %8.6f %8.6f\n", totalN[exp], n, mu, est_mu, lambda, est_lambda); } printf("\n"); } } #endif /*eslAUGMENT_MINIMIZER*/ /* Fitting mu given lambda */ if (do_location) { for (exp = 0; exp < nexps; exp++) { for (trial = 0; trial < ntrials; trial++) { for (i = 0; i < totalN[exp]; i++) x[i] = esl_gumbel_Sample(r, mu, lambda); esl_gumbel_FitCompleteLoc(x, totalN[exp], lambda, &est_mu); printf("location %6d %6d %9.5f %9.5f\n", totalN[exp], totalN[exp], mu, est_mu); } printf("\n"); } } esl_randomness_Destroy(r); free(x); return 0; } #endif /*eslGUMBEL_STATS*/ /***************************************************************** * 7. Unit tests. *****************************************************************/ /***************************************************************** * 8. Test driver. *****************************************************************/ #ifdef eslGUMBEL_TESTDRIVE /* compile: gcc -g -Wall -I. -o test -DeslGUMBEL_TESTDRIVE -DeslAUGMENT_RANDOM -DeslAUGMENT_MINIMIZER esl_gumbel.c esl_random.c esl_minimizer.c esl_vectorops.c easel.c -lm * run: ./test */ #include #include "easel.h" #include "esl_random.h" #include "esl_minimizer.h" #include "esl_gumbel.h" int main(int argc, char **argv) { ESL_RANDOMNESS *r = NULL; int totalN; int n; double phi; /* truncation threshold. */ int i; double *x = NULL; double mu, lambda; double est_mu, est_lambda; int status; totalN = 10000; mu = -20.; lambda = 0.4; phi = -20.; r = esl_randomness_Create(42); /* make the sims reproducible */ ESL_ALLOC(x, sizeof(double) * totalN); /* Test complete data fitting on simulated data. * Don't tolerate more than 1% error in mu, 3% in lambda. */ for (i = 0; i < totalN; i++) x[i] = esl_gumbel_Sample(r, mu, lambda); esl_gumbel_FitComplete(x, totalN, &est_mu, &est_lambda); if (fabs((est_mu -mu) /mu) > 0.01) abort(); if (fabs((est_lambda-lambda)/lambda) > 0.03) abort(); /* Test censored fitting on simulated data, for * the right tail mass above the mode. * Don't tolerate more than 1% error in mu, 4% in lambda. */ for (n=0, i = 0; i < totalN; i++) if (x[i] >= phi) x[n++] = x[i]; esl_gumbel_FitCensored(x, n, totalN-n, phi, &est_mu, &est_lambda); if (fabs((est_mu -mu) /mu) > 0.01) abort(); if (fabs((est_lambda-lambda)/lambda) > 0.04) abort(); /* Test truncated fitting on simulated data. * Don't tolerate more than 5% error in mu, 8% in lambda. */ #ifdef eslAUGMENT_MINIMIZER esl_gumbel_FitTruncated(x, n, phi, &est_mu, &est_lambda); if (fabs((est_mu -mu) /mu) > 0.05) abort(); if (fabs((est_lambda-lambda)/lambda) > 0.08) abort(); #endif /*eslAUGMENT_MINIMIZER*/ free(x); esl_randomness_Destroy(r); return 0; ERROR: if (x != NULL) free(x); if (r != NULL) esl_randomness_Destroy(r); return status; } #endif /*eslGUMBEL_TESTDRIVE*/ /***************************************************************** * 9. Example. *****************************************************************/ #ifdef eslGUMBEL_EXAMPLE /*::cexcerpt::gumbel_example::begin::*/ /* compile: gcc -g -Wall -I. -o example -DeslGUMBEL_EXAMPLE -DeslAUGMENT_RANDOM esl_gumbel.c esl_random.c esl_vectorops.c easel.c -lm * run: ./example */ #include #include "easel.h" #include "esl_random.h" #include "esl_gumbel.h" int main(int argc, char **argv) { ESL_RANDOMNESS *r = esl_randomness_Create(0);; int n = 10000; /* simulate 10,000 samples */ double mu = -20.0; /* with mu = -20 */ double lambda = 0.4; /* and lambda = 0.4 */ double min = 9999.; double max = -9999.; double *x = malloc(sizeof(double) * n); double z, est_mu, est_lambda; int i; for (i = 0; i < n; i++) /* generate the 10,000 samples */ { x[i] = esl_gumbel_Sample(r, mu, lambda); if (x[i] < min) min = x[i]; if (x[i] > max) max = x[i]; } z = esl_gumbel_surv(max, mu, lambda); /* right tail p~1e-4 >= max */ printf("max = %6.1f P(>max) = %g\n", max, z); z = esl_gumbel_cdf(min, mu, lambda); /* left tail p~1e-4 < min */ printf("min = %6.1f P(<=min) = %g\n", min, z); esl_gumbel_FitComplete(x, n, &est_mu, &est_lambda); /* fit params to the data */ z = 100. * fabs((est_mu - mu) / mu); printf("Parametric mu = %6.1f. Estimated mu = %6.2f. Difference = %.1f%%.\n", mu, est_mu, z); z = 100. * fabs((est_lambda - lambda) /lambda); printf("Parametric lambda = %6.1f. Estimated lambda = %6.2f. Difference = %.1f%%.\n", lambda, est_lambda, z); free(x); esl_randomness_Destroy(r); return 0; } /*::cexcerpt::gumbel_example::end::*/ #endif /*eslGUMBEL_EXAMPLE*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_gumbel.c 727 2011-10-24 17:17:32Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_gumbel.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_stats.tex0000664361611702660230000000325212473612607016111 0ustar wheelerteddy The \eslmod{stats} module is the foundation of a set of statistics modules. It contains special functions like $\Gamma(x)$ and $\Psi(x)$, and elementary statistics routines such as linear regression fitting and $\chi^2$ testing. Table~\ref{tbl:stats_api} lists the functions in the \eslmod{stats} API. \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \hyperlink{func:esl_stats_DMean()}{\ccode{esl\_stats\_\{D,F,I\}Mean()}} & Calculates mean and $\sigma^2$ for samples $x_i$.\\ \hyperlink{func:esl_stats_LogGamma()}{\ccode{esl\_stats\_LogGamma()}} & Calculates $\log \Gamma(x)$.\\ \hyperlink{func:esl_stats_Psi()}{\ccode{esl\_stats\_Psi()}} & Calculates $\Psi(x)$ (the digamma function).\\ \hyperlink{func:esl_stats_IncompleteGamma()}{\ccode{esl\_stats\_IncompleteGamma()}} & Calculates the incomplete Gamma function. \\ \hyperlink{func:esl_stats_ChiSquaredTest()}{\ccode{esl\_stats\_ChiSquaredTest()}} & Calculates a $\chi^2$ P-value.\\ \hyperlink{func:esl_stats_LinearRegression()}{\ccode{esl\_stats\_LinearRegression()}} & Fit data to a straight line.\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{stats} API.} \label{tbl:stats_api} \end{table} \subsection{An example of using the stats API} Figure~\ref{fig:stats_example} shows an example of using one of the routines in the \eslmod{stats} module, linear regression fitting. It generates a set of $n$ points dispersed around a line, $y_i = a + bx + N(\sigma)$ with Gaussian noise $N(\sigma)$, then fits the data to a line to obtain estimates $\hat{a}$ and $\hat{b}$. \begin{figure} \input{cexcerpts/stats_example} \caption{An example of using the \eslmod{stats} module.} \label{fig:stats_example} \end{figure} hmmer-3.1b2/easel/esl_translate.h0000664361611702660230000000100712473612610016365 0ustar wheelerteddy/* Take a nucleotide sequence and spit out the 6 translated open reading frames as protein sequences. */ #ifndef eslTRANSLATE_INCLUDED #define eslTRANSLATE_INCLUDED #include "esl_sq.h" extern int esl_trans_orf(ESL_SQ *in, ESL_SQ ***out, int *retSeq, int minimumResidues); extern int esl_trans_6frame (ESL_SQ *in, ESL_SQ **out); extern int esl_trans_s2p (ESL_SQ *in, ESL_SQ **out, int frameshift, int rcFlag); extern int esl_trans_seq_stop_split (ESL_SQ *in, ESL_SQ ***out, int *outCount); #endif hmmer-3.1b2/easel/esl_ssi.h0000664361611702660230000001614612473612607015206 0ustar wheelerteddy/* Simple sequence indices: * Fast sequence record lookup in large files by keywords, such * as names or accessions. */ #ifndef eslSSI_INCLUDED #define eslSSI_INCLUDED #ifdef eslAUGMENT_SSI #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_STDINT_H #include #endif #ifdef HAVE_INTTYPES_H #include #endif #define eslSSI_MAXFILES 32767 /* 2^15-1 */ #define eslSSI_MAXKEYS 2147483647L /* 2^31-1 */ #define eslSSI_MAXRAM 256 /* >256MB indices trigger external sort */ #ifndef HAVE_FSEEKO #define fseeko fseek #define ftello ftell #endif /* ESL_SSI * Using an existing SSI index file. */ typedef struct { FILE *fp; /* open SSI index file */ uint32_t flags; /* optional behavior flags */ uint32_t offsz; /* sizeof(off_t)'s in the SSI file */ uint16_t nfiles; /* number of files = 16 bit int */ uint64_t nprimary; /* number of primary keys */ uint64_t nsecondary; /* number of secondary keys */ uint32_t flen; /* length of filenames (inc '\0') */ uint32_t plen; /* length of primary keys (inc '\0') */ uint32_t slen; /* length of secondary keys (inc '\0') */ uint32_t frecsize; /* # bytes in a file record */ uint32_t precsize; /* # bytes in a primary key record */ uint32_t srecsize; /* # bytes in a secondary key record */ off_t foffset; /* disk offset, start of file records */ off_t poffset; /* disk offset, start of pri key recs */ off_t soffset; /* disk offset, start of sec key recs */ /* File information: */ char **filename; /* list of file names [0..nfiles-1] */ uint32_t *fileformat; /* file formats */ uint32_t *fileflags; /* optional per-file behavior flags */ uint32_t *bpl; /* bytes per line in file */ uint32_t *rpl; /* residues per line in file */ } ESL_SSI; /* Flags for the fileflags> bit vectors. */ #define eslSSI_FASTSUBSEQ (1<<0) /* we can do fast subseq lookup calculations on this file */ /* ESL_NEWSSI * Used to create a new SSI index. */ typedef struct { /* Primary key data: */ char *key; /* key name */ uint16_t fnum; /* file number */ off_t r_off; /* record offset */ off_t d_off; /* data offset */ int64_t len; /* sequence length */ } ESL_PKEY; typedef struct { /* Secondary key data: */ char *key; /* secondary key name */ char *pkey; /* primary key name */ } ESL_SKEY; typedef struct { char *ssifile; /* name of the SSI file we're creating */ FILE *ssifp; /* open SSI file being created */ int external; /* TRUE if pkeys and skeys are on disk */ int max_ram; /* threshold in MB to trigger extern sort */ char **filenames; uint32_t *fileformat; uint32_t *bpl; uint32_t *rpl; uint32_t flen; /* length of longest filename, inc '\0' */ uint16_t nfiles; /* can store up to 2^15-1 (32767) files */ ESL_PKEY *pkeys; uint32_t plen; /* length of longest pkey, including '\0' */ uint64_t nprimary; /* can store up to 2^63-1 = 9.2e18 keys */ char *ptmpfile; /* primary key tmpfile name, for extern sort */ FILE *ptmp; /* handle on open ptmpfile */ ESL_SKEY *skeys; uint32_t slen; /* length of longest skey, including '\0' */ uint64_t nsecondary; char *stmpfile; /* secondary key tmpfile name, for extern sort */ FILE *stmp; /* handle on open ptmpfile */ char errbuf[eslERRBUFSIZE]; } ESL_NEWSSI; #define eslSSI_FCHUNK 16 /* chunk size for file name reallocation */ #define eslSSI_KCHUNK 128 /* and for key reallocation */ /* 1. Using (reading) SSI indices */ extern int esl_ssi_Open(const char *filename, ESL_SSI **ret_ssi); extern void esl_ssi_Close(ESL_SSI *ssi); extern int esl_ssi_FindName(ESL_SSI *ssi, const char *key, uint16_t *ret_fh, off_t *ret_roff, off_t *opt_doff, int64_t *opt_L); extern int esl_ssi_FindNumber(ESL_SSI *ssi, int64_t nkey, uint16_t *opt_fh, off_t *opt_roff, off_t *opt_doff, int64_t *opt_L, char **opt_pkey); extern int esl_ssi_FindSubseq(ESL_SSI *ssi, const char *key, int64_t requested_start, uint16_t *ret_fh, off_t *ret_roff, off_t *ret_doff, int64_t *ret_L, int64_t *ret_actual_start); extern int esl_ssi_FileInfo(ESL_SSI *ssi, uint16_t fh, char **ret_filename, int *ret_format); /* 2. Creating (writing) SSI indices. */ extern int esl_newssi_Open(const char *ssifile, int allow_overwrite, ESL_NEWSSI **ret_newssi); extern int esl_newssi_AddFile (ESL_NEWSSI *ns, const char *filename, int fmt, uint16_t *ret_fh); extern int esl_newssi_SetSubseq(ESL_NEWSSI *ns, uint16_t fh, uint32_t bpl, uint32_t rpl); extern int esl_newssi_AddKey (ESL_NEWSSI *ns, const char *key, uint16_t fh, off_t r_off, off_t d_off, int64_t L); extern int esl_newssi_AddAlias (ESL_NEWSSI *ns, const char *alias, const char *key); extern int esl_newssi_Write (ESL_NEWSSI *ns); extern void esl_newssi_Close (ESL_NEWSSI *ns); /* 3. Portable binary i/o. */ extern void esl_byteswap(char *swap, int nbytes); extern uint16_t esl_ntoh16(uint16_t netshort); extern uint32_t esl_ntoh32(uint32_t netlong); extern uint64_t esl_ntoh64(uint64_t net_int64); extern uint16_t esl_hton16(uint16_t hostshort); extern uint32_t esl_hton32(uint32_t hostlong); extern uint64_t esl_hton64(uint64_t host_int64); extern int esl_fread_u16(FILE *fp, uint16_t *ret_result); extern int esl_fread_u32(FILE *fp, uint32_t *ret_result); extern int esl_fread_u64(FILE *fp, uint64_t *ret_result); extern int esl_fread_i16(FILE *fp, int16_t *ret_result); extern int esl_fread_i32(FILE *fp, int32_t *ret_result); extern int esl_fread_i64(FILE *fp, int64_t *ret_result); extern int esl_fwrite_u16(FILE *fp, uint16_t n); extern int esl_fwrite_u32(FILE *fp, uint32_t n); extern int esl_fwrite_u64(FILE *fp, uint64_t n); extern int esl_fwrite_i16(FILE *fp, int16_t n); extern int esl_fwrite_i32(FILE *fp, int32_t n); extern int esl_fwrite_i64(FILE *fp, int64_t n); extern int esl_fread_offset(FILE *fp, int mode, off_t *ret_offset); extern int esl_fwrite_offset(FILE *fp, off_t offset); #endif /* eslAUGMENT_SSI*/ #ifndef eslAUGMENT_SSI typedef void ESL_SSI; typedef void ESL_NEWSSI; #endif #endif /* eslSSI_INCLUDED */ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/miniapps/0000775361611702660230000000000012473613140015175 5ustar wheelerteddyhmmer-3.1b2/easel/miniapps/esl-weight.man0000664361611702660230000000416312473612611017750 0ustar wheelerteddy.TH "esl-weight" 1 "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual" .SH NAME .TP esl-weight - calculate sequence weights in MSA(s) .SH SYNOPSIS .B esl-weight .I [options] .I msafile .SH DESCRIPTION .pp .B esl-weight calculates individual sequence weights for each alignment in .I msafile, and outputs a new multiple sequence alignment file in Stockholm format with the weights annotated in Stockholm-format .I #=GS WT lines. The default weighting algorithm is the Gerstein/Sonnhammer/Chothia algorithm. .pp If .I msafile is - (a single dash), MSA input is read from .I stdin. .pp The sequences can be of protein or DNA/RNA sequences. All sequences in the same .I seqfile must be either protein or DNA/RNA. The alphabet will be autodetected unless one of the options .I --amino, .I --dna, or .I --rna are given. These options may be useful in automated pipelines to make .B esl-weight more robust; alphabet autodetection is not infallible. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .B -g Use the Gerstein/Sonnhammer/Chothia weighting algorithm; this is the default. .TP .B -p Use the Henikoff position-based weighting algorithm. .TP .B -b "BLOSUM weights": use approximately the same rule used in constructing the BLOSUM score matrices. This involves single-linkage clustering at some fractional identity threshold (default 0.62; see .I --id option), then for each cluster, splitting a total weight of one uniformly amongst all sequences in the cluster. .SH EXPERT OPTIONS .TP .BI --id " " Sets the fractional identity threshold used by the BLOSUM weighting rule (option .I -b ; required), to a number 0<=x<=1. Default is 0.62. .TP .B --amino Assert that the .I msafile contains protein sequences. .TP .B --dna Assert that the .I msafile contains DNA sequences. .TP .B --rna Assert that the .I msafile contains RNA sequences. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-reformat.man0000664361611702660230000001214412473612611020276 0ustar wheelerteddy.TH "esl-reformat" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps" .SH NAME .TP esl-reformat - convert sequence file formats .SH SYNOPSIS .B esl-reformat .I [options] .I format .I seqfile .SH DESCRIPTION .B esl-reformat reads the sequence file .I seqfile in any supported format, reformats it into a new format specified by .I format, then outputs the reformatted text. .pp The .I format argument must (case-insensitively) match a supported sequence file format: currently, limited to .I fasta, .I stockholm, .I pfam, or .I afa (aligned fasta). .pp Unaligned format files cannot be reformatted to aligned formats. However, aligned formats can be reformatted to unaligned formats - gap characters are simply stripped out. .SH OPTIONS .TP .B -d DNA; convert U's to T's, to make sure a nucleic acid sequence is shown as DNA not RNA. See .B -r. .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .B -l Lowercase; convert all sequence residues to lower case. See .B -u. .TP .B -n For DNA/RNA sequences, converts any character that's not unambiguous RNA/DNA (e.g. ACGTU/acgtu) to an N. Used to convert IUPAC ambiguity codes to N's, for software that can't handle all IUPAC codes (some public RNA folding codes, for example). If the file is an alignment, gap characters are also left unchanged. If sequences are not nucleic acid sequences, this option will corrupt the data in a predictable fashion. .TP .BI -o " " Send output to file .I instead of stdout. .TP .B -r RNA; convert T's to U's, to make sure a nucleic acid sequence is shown as RNA not DNA. See .B -d. .TP .B -u Uppercase; convert all sequence residues to upper case. See .B -l. .TP .B -x For DNA sequences, convert non-IUPAC characters (such as X's) to N's. This is for compatibility with benighted people who insist on using X instead of the IUPAC ambiguity character N. (X is for ambiguity in an amino acid residue). .IP Warning: like the .B -n option, the code doesn't check that you are actually giving it DNA. It simply literally just converts non-IUPAC DNA symbols to N. So if you accidentally give it protein sequence, it will happily convert most every amino acid residue to an N. .SH EXPERT OPTIONS .TP .BI --gapsym " " Convert all gap characters to .I . Used to prepare alignment files for programs with strict requirements for gap symbols. Only makes sense if the input .I seqfile is an alignment. .TP .BI --informat " " Specify that the sequence file is in format .I , rather than allowing the program to autodetect the file format. .TP .B --mingap If .I seqfile is an alignment, remove any columns that contain 100% gap or missing data characters, minimizing the overall length of the alignment. (Often useful if you've extracted a subset of aligned sequences from a larger alignment.) .TP .B --keeprf When used in combination with .B --mingap, never remove a column that is not a gap in the reference (#=GC RF) annotation, even if the column contains 100% gap characters in all aligned sequences. By default with .B --mingap, nongap RF columns that are 100% gaps in all sequences are removed. .TP .B --nogap Remove any aligned columns that contain any gap or missing data symbols at all. Useful as a prelude to phylogenetic analyses, where you only want to analyze columns containing 100% residues, so you want to strip out any columns with gaps in them. Only makes sense if the file is an alignment file. .TP .B --wussify Convert RNA secondary structure annotation strings (both consensus and individual) from old "KHS" format, ><, to the new WUSS notation, <>. If the notation is already in WUSS format, this option will screw it up, without warning. Only SELEX and Stockholm format files have secondary structure markup at present. .TP .B --dewuss Convert RNA secondary structure annotation strings from the new WUSS notation, <>, back to the old KHS format, ><. If the annotation is already in KHS, this option will corrupt it, without warning. Only SELEX and Stockholm format files have secondary structure markup. .TP .B --fullwuss Convert RNA secondary structure annotation strings from simple (input) WUSS notation to full (output) WUSS notation. .TP .BI --replace " " .I must be in the format .I : with equal numbers of characters in .I and .I separated by a ":" symbol. Each character from .I in the input file will be replaced by its counterpart (at the same position) from .I . Note that special characters in .I (such as "~") may need to be prefixed by a "\\" character. .TP .B --small Operate in small memory mode for input alignment files in Pfam format. If not used, each alignment is stored in memory so the required memory will be roughly the size of the largest alignment in the input file. With .B --small, input alignments are not stored in memory. This option only works in combination with .BI --informat " pfam" and output format .I pfam or .I afa. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-stranslate.c0000664361611702660230000000640512473612611020311 0ustar wheelerteddy/* Generate the 6 protein sequences from the reading frames of a nucleotide sequence * * WMA, Fri Mar 29 10:12 am 2013 [Janelia] */ #include "esl_config.h" #include #include #include #include "esl_translate.h" #include "easel.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, { "-r", eslARG_INT, "15", NULL, "n>0", NULL, NULL, NULL, "minimum size of orf to report", 1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "translate reading frames of a sequence"; static void cmdline_failure(char *argv0, char *format, ...) { va_list argp; va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); esl_usage(stdout, argv0, usage); printf("\nTo see more help on available options, do %s -h\n\n", argv0); exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { esl_banner(stdout, argv0, banner); esl_usage (stdout, argv0, usage); puts("\n where general options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); exit(0); } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; char *filename = NULL; ESL_SQFILE *sqfp = NULL; ESL_SQ *sq = NULL; int i; ESL_SQ **prot; int p_count; int min; /* Parse command line */ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], "Error in app configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") ) cmdline_help(argv[0], go); if (esl_opt_ArgNumber(go) != 1) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); min = esl_opt_GetInteger(go, "-r"); filename = esl_opt_GetArg(go, 1); if(esl_sqfile_Open(filename, eslSQFILE_FASTA, NULL, &sqfp) != eslOK) esl_fatal("could not open sequence file"); if((sq = esl_sq_Create()) == NULL) esl_fatal("allocation failed"); if(esl_sqio_Read(sqfp, sq) != eslOK) esl_fatal("could not read sequence file"); if(esl_trans_orf(sq, &prot, &p_count, min) != eslOK) esl_fatal("translation failed"); for(i = 0; i < p_count; i++) { esl_sqio_Write(stdout, prot[i], eslSQFILE_FASTA, 0); esl_sq_Destroy(prot[i]); } free(prot); esl_getopts_Destroy(go); return 0; } /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/miniapps/esl-seqstat.c0000664361611702660230000002236612473612611017621 0ustar wheelerteddy/* Simple statistics on a sequence file * * SRE, Sun Feb 24 15:33:53 2008 [UA5315 to St. Louis] * SVN $Id: esl-seqstat.c 849 2013-01-31 15:10:24Z eddys $ * from squid's seqstat (1994) * * Wish list: * - add an option for printing sequence names only. * This would facilitate using esl-seqstat in incantations (with * esl-selectn and esl-sfetch) to extract subsets of sequences * from a large file. */ #include "esl_config.h" #include #include #include #include #include "easel.h" #include "esl_composition.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_vectorops.h" static char banner[] = "show simple statistics on a sequence file"; static char usage1[] = " [options] "; static void show_overall_composition(const ESL_ALPHABET *abc, const double *monoc_all, int64_t nres); #define ALPH_OPTS "--rna,--dna,--amino" /* toggle group, alphabet type options */ static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "help; show brief info on version and usage", 1 }, { "-a", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "report per-sequence info line, not just a summary", 1 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "count and report residue composition", 1 }, { "--informat", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, NULL, "specify that input file is in format ", 1 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, ALPH_OPTS, "specify that contains RNA sequence", 1 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, ALPH_OPTS, "specify that contains DNA sequence", 1 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, ALPH_OPTS, "specify that contains protein sequence", 1 }, { "--comptbl", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "alternative output: a table of residue compositions per seq", 1 }, { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "arrest after start: for debugging under gdb", 99 }, { 0,0,0,0,0,0,0,0,0,0 }, }; static void cmdline_failure(char *argv0, char *format, ...) { va_list argp; va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); esl_usage(stdout, argv0, usage1); printf("\nTo see more help on available options, do %s -h\n\n", argv0); exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { esl_banner(stdout, argv0, banner); esl_usage (stdout, argv0, usage1); puts("\n where general options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); exit(0); } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; char *seqfile = NULL; ESL_SQFILE *sqfp = NULL; int infmt = eslSQFILE_UNKNOWN; int alphatype = eslUNKNOWN; ESL_ALPHABET *abc = NULL; ESL_SQ *sq = NULL; int64_t nseq = 0; int64_t nres = 0; int64_t small = 0; int64_t large = 0; double *monoc = NULL; /* monoresidue composition per sequence */ double *monoc_all = NULL; /* monoresidue composition over all seqs */ int do_comp = FALSE; int do_comptbl = FALSE; int status = eslOK; int wstatus; int i, x; int do_stall; /* used to stall when debugging */ /* Parse command line */ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], "Error in app configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") ) cmdline_help(argv[0], go); if (esl_opt_ArgNumber(go) != 1) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); seqfile = esl_opt_GetArg(go, 1); do_comp = esl_opt_GetBoolean(go, "-c"); do_comptbl = esl_opt_GetBoolean(go, "--comptbl"); if (esl_opt_GetString(go, "--informat") != NULL) { infmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat")); if (infmt == eslSQFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat"); } do_stall = esl_opt_GetBoolean(go, "--stall"); /* a stall point for attaching gdb */ while (do_stall); /* open input file */ status = esl_sqfile_Open(seqfile, infmt, NULL, &sqfp); if (status == eslENOTFOUND) esl_fatal("No such file %s", seqfile); else if (status == eslEFORMAT) esl_fatal("Format of seqfile %s unrecognized.", seqfile); else if (status != eslOK) esl_fatal("Open failed, code %d.", status); if (esl_opt_GetBoolean(go, "--rna")) alphatype = eslRNA; else if (esl_opt_GetBoolean(go, "--dna")) alphatype = eslDNA; else if (esl_opt_GetBoolean(go, "--amino")) alphatype = eslAMINO; else { status = esl_sqfile_GuessAlphabet(sqfp, &alphatype); if (status == eslENOALPHABET) esl_fatal("Couldn't guess alphabet from first sequence in %s", seqfile); else if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (status == eslENODATA) esl_fatal("Sequence file %s contains no data?", seqfile); else if (status != eslOK) esl_fatal("Failed to guess alphabet (error code %d)\n", status); } abc = esl_alphabet_Create(alphatype); sq = esl_sq_CreateDigital(abc); esl_sqfile_SetDigital(sqfp, abc); if (do_comp || do_comptbl) { ESL_ALLOC(monoc, (abc->Kp) * sizeof(double)); ESL_ALLOC(monoc_all, (abc->Kp) * sizeof(double)); esl_vec_DSet(monoc_all, abc->Kp, 0.0); esl_vec_DSet(monoc, abc->Kp, 0.0); } /* Output header, if any */ if (do_comptbl) { printf("#%-29s %6s", " Sequence name", "Length"); for (x = 0; x < abc->K; x++) printf(" %c", (char) abc->sym[x]); fputc('\n', stdout); printf("#%-29s %6s", "-----------------------------", "------"); for (x = 0; x < abc->K; x++) printf(" %6s", "------"); fputc('\n', stdout); } while ((wstatus = esl_sqio_ReadWindow(sqfp, 0, 4096, sq)) != eslEOF) { if (wstatus == eslOK) { if (do_comp || do_comptbl) for (i = 1; i <= sq->n; i++) monoc[sq->dsq[i]]++; } else if (wstatus == eslEOD) { if (nseq == 0) { small = large = sq->L; } else { small = ESL_MIN(small, sq->L); large = ESL_MAX(large, sq->L); } if (!do_comptbl && esl_opt_GetBoolean(go, "-a")) { printf("= %-25s %8" PRId64 " %s\n", sq->name, sq->L, (sq->desc != NULL) ? sq->desc : ""); } if (do_comptbl) { printf("%-30s %6" PRId64, sq->name, sq->L); for (x = 0; x < abc->K; x++) printf(" %6.0f", monoc[x]); fputc('\n', stdout); } nres += sq->L; nseq++; esl_sq_Reuse(sq); if (do_comp || do_comptbl) { esl_vec_DAdd(monoc_all, monoc, abc->Kp); esl_vec_DSet(monoc, abc->Kp, 0.0); } } else if (wstatus == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else esl_fatal("Unexpected error %d reading sequence file %s", wstatus, sqfp->filename); } if (! do_comptbl) { printf("Format: %s\n", esl_sqio_DecodeFormat(sqfp->format)); printf("Alphabet type: %s\n", esl_abc_DecodeType(abc->type)); printf("Number of sequences: %" PRId64 "\n", nseq); printf("Total # residues: %" PRId64 "\n", nres); printf("Smallest: %" PRId64 "\n", small); printf("Largest: %" PRId64 "\n", large); printf("Average length: %.1f\n", (float) nres / (float) nseq); if (do_comp) show_overall_composition(abc, monoc_all, nres); } if (monoc) free(monoc); if (monoc_all) free(monoc_all); esl_alphabet_Destroy(abc); esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); esl_getopts_Destroy(go); return 0; ERROR: return status; } static void show_overall_composition(const ESL_ALPHABET *abc, const double *monoc_all, int64_t nres) { int x; printf("\nResidue composition:\n"); if (abc->type == eslAMINO) { double *iid_bg; if ((iid_bg = malloc(sizeof(double) * abc->K)) == NULL) esl_fatal("malloc failed"); esl_composition_SW50(iid_bg); for (x = 0; x < abc->K; x++) printf("residue: %c %10.0f %6.4f %8.4f\n", abc->sym[x], monoc_all[x], monoc_all[x] / (double) nres, log((monoc_all[x] / (double) nres) / iid_bg[x]) * eslCONST_LOG2R); for ( ; x < abc->Kp; x++) if (monoc_all[x] > 0) printf("residue: %c %10.0f %6.4f\n", abc->sym[x], monoc_all[x], monoc_all[x] / (double) nres); free(iid_bg); } else { for (x = 0; x < abc->Kp; x++) if (x < abc->K || monoc_all[x] > 0) printf("residue: %c %10.0f %.4f\n", abc->sym[x], monoc_all[x], monoc_all[x] / (double) nres); } return; } hmmer-3.1b2/easel/miniapps/esl-alimask.man0000664361611702660230000003773412473612610020113 0ustar wheelerteddy.TH "esl-alimask" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps" .SH NAME .TP esl-alimask - remove columns from a multiple sequence alignment .SH SYNOPSIS .TP Remove columns based on a mask in an input file: .B esl-alimask .I [options] .I msafile .I maskfile .TP Remove a contiguous set of columns at the start and end of an alignment: .B esl-alimask -t .I [options] .I msafile .I coords .TP Remove columns based on their frequency of gaps: .B esl-alimask -g .I [options] .I msafile .TP Remove columns based on their posterior probability annotation: .B esl-alimask -p .I [options] .I msafile .TP Only remove columns that are gaps in the RF annotation: .B esl-alimask --rf-is-mask .I [options] .I msafile .TP The .B -g and .B -p options may be used in combination. .SH DESCRIPTION .B esl-alimask reads a single input alignment, removes some columns from it (i.e. masks it), and outputs the masked alignment. .B esl-alimask can be run in several different modes. .B esl-alimask runs in "mask file mode" by default when two command-line arguments .I (msafile and .I maskfile) are supplied. In this mode, a bit-vector mask in the .I maskfile defines which columns to keep/remove. The mask is a string that may only contain the characters '0' and '1'. A '0' at position x of the mask indicates that column x is excluded by the mask and should be removed during masking. A '1' at position x of the mask indicates that column x is included by the mask and should not be removed during masking. All lines in the .I maskfile that begin with '#' are considered comment lines and are ignored. All non-whitespace characters in non-comment lines are considered to be part of the mask. The length of the mask must equal either the total number of columns in the (first) alignment in .I msafile, or the number of columns that are not gaps in the RF annotation of that alignment. The latter case is only valid if .I msafile is in Stockholm format and contains '#=GC RF' annotation. If the mask length is equal to the non-gap RF length, all gap RF columns will automatically be removed. .B esl-alimask runs in "truncation mode" if the .B -t option is used along with two command line arguments .I (msafile and .I coords ). In this mode, the alignment will be truncated by removing a contiguous set of columns from the beginning and end of the alignment. The second command line argument is the .I coords string, that specifies what range of columns to keep in the alignment, all columns outside of this range will be removed. The .I coords string consists of start and end coordinates separated by any nonnumeric, nonwhitespace character or characters you like; for example, .I 23..100 , .I 23/100 , or .I 23-100 all work. To keep all alignment columns beginning at 23 until the end of the alignment, you can omit the .I end ; for example, .I 23: would work. If the .B --t-rf option is used in combination with .B -t, the coordinates in .I coords are interpreted as non-gap RF column coordinates. For example, with .B --t-rf, a .I coords string of .I 23-100 would remove all columns before the 23rd non-gap residue in the "#=GC RF" annotation and after the 100th non-gap RF residue. .B esl-alimask runs in "RF mask" mode if the .B --rf-is-mask option is enabled. In this mode, the alignment must be in Stockholm format and contain '#=GC RF' annotation. .B esl-alimask will simply remove all columns that are gaps in the RF annotation. .B esl-alimask runs in "gap frequency mode" if .B -g is enabled. In this mode columns for which greater than .I fraction of the aligned sequences have gap residues will be removed. By default, .I is 0.5, but this value can be changed to .I with the .BI --gapthresh " " option. In this mode, if the alignment is in Stockholm format and has RF annotation, then all columns that are gaps in the RF annotation will automatically be removed, unless .B --saveins is enabled. .B esl-alimask runs in "posterior probability mode" if .B -p is enabled. In this mode, masking is based on posterior probability annotation, and the input alignment must be in Stockholm format and contain '#=GR PP' (posterior probability) annotation for all sequences. As a special case, if .B -p is used in combination with .B --ppcons, then the input alignment need not have '#=GR PP' annotation, but must contain '#=GC PP_cons' (posterior probability consensus) annotation. Characters in Stockholm alignment posterior probability annotation (both '#=GR PP' and '#=GC PP_cons') can have 12 possible values: the ten digits '0-9', '*', and '.'. If '.', the position must correspond to a gap in the sequence (for '#=GR PP') or in the RF annotation (for '#=GC PP_cons'). A value of '0' indicates a posterior probability of between 0.0 and 0.05, '1' indicates between 0.05 and 0.15, '2' indicates between 0.15 and 0.25 and so on up to '9' which indicates between 0.85 and 0.95. A value of '*' indicates a posterior probability of between 0.95 and 1.0. Higher posterior probabilities correspond to greater confidence that the aligned residue belongs where it appears in the alignment. When .B -p is enabled with .BI --ppcons " ", columns which have a consensus posterior probability of less than .I will be removed during masking, and all other columns will not be removed. When .B -p is enabled without .B --ppcons, the number of each possible PP value in each column is counted. If .I fraction of the sequences that contain aligned residues (i.e. do not contain gaps) in a column have a posterior probability greater than or equal to .I , then that column will not be removed during masking. All columns that do not meet this criterion will be removed. By default, the values of both .I and .I are 0.95, but they can be changed with the .BI --pfract " " and .BI --pthresh " " options, respectively. In posterior probability mode, all columns that have 0 residues (i.e. that are 100% gaps) will be automatically removed, unless the .B --pallgapok option is enabled, in which case such columns will not be removed. Importantly, during posterior probability masking, unless .B --pavg is used, PP annotation values are always considered to be the minimum numerical value in their corresponding range. For example, a PP '9' character is converted to a numerical posterior probability of 0.85. If .B --pavg is used, PP annotation values are considered to be the average numerical value in their range. For example, a PP '9' character is converted to a numerical posterior probability of 0.90. In posterior probability mode, if the alignment is in Stockholm format and has RF annotation, then all columns that are gaps in the RF annotation will automatically be removed, unless .B --saveins is enabled. A single run of .B esl-alimask can perform both gap frequency-based masking and posterior probability-based masking if both the .B -g and .B -p options are enabled. In this case, a gap frequency-based mask and a posterior probability-based mask are independently computed. These two masks are combined to create the final mask using a logical 'and' operation. Any column that is to be removed by either the gap or PP mask will be removed by the final mask. With the .B --small option, .B esl-alimask will operate in memory saving mode and the required RAM for the masking will be minimal (usually less than a Mb) and independent of the alignment size. To use .B --small, the alignment alphabet must be specified with either .B --amino, .B --dna, or .B --rna, and the alignment must be in Pfam format (non-interleaved, 1 line/sequence Stockholm format). Pfam format is the default output format of INFERNAL's .B cmalign program. Without .B --small the required RAM will be equal to roughly the size of the first input alignment (the size of the alignment file itself if it only contains one alignment). .SH OUTPUT By default, .B esl-alimask will print only the masked alignment to stdout and then exit. If the .BI -o " " option is used, the alignment will be saved to file .I , and information on the number of columns kept and removed will be printed to stdout. If .B -q is used in combination with .B -o, nothing is printed to stdout. The mask(s) computed by .B esl-alimask when the .B -t , .B -p , .B -g , or .B --rf-is-mask options are used can be saved to output files using the options .BI --fmask-rf " ", .BI --fmask-all " ", .BI --gmask-rf " ", .BI --gmask-all " ", .BI --pmask-rf " ", and .BI --pmask-all " ". In all cases, .I will contain a single line, a bit vector of length .B n, where .B n is the either the total number of columns in the alignment (for the options suffixed with 'all') or the number of non-gap columns in the RF annotation (for the options suffixed with 'rf'). The mask will be a string of '0' and '1' characters: a '0' at position x in the mask indicates column x was removed (excluded) by the mask, and a '1' at position x indicates column x was kept (included) by the mask. For the 'rf' suffixed options, the mask only applies to non-gap RF columns. The options beginning with 'f' will save the 'final' mask used to keep/remove columns from the alignment. The options beginning with 'g' save the masks based on gap frequency and require .B -g. The options beginning with 'p' save the masks based on posterior probabilities and require .B -p. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .BI -o " " Output the final, masked alignment to file .I instead of to .I stdout. When this option is used, information about the number of columns kept/removed is printed to stdout. .TP .B -q Be quiet; do not print anything to stdout. This option can only be used in combination with the .B -o option. .TP .B --small Operate in memory saving mode. Required RAM will be independent of the size of the input alignment to mask, instead of roughly the size of the input alignment. When enabled, the alignment must be in Pfam Stockholm (non-interleaved 1 line/seq) format (see esl-reformat) and the output alignment will be in Pfam format. .TP .BI --informat " " Specify that the input alignment be format .I . Choices for .I are: 'stockholm', 'pfam', 'a2m', 'psiblast', 'afa'. 'pfam' is a special case of Stockholm format in which each sequence is placed on a single line, instead of being interleaved; 'afa' is aligned FASTA. By default alignments are assumed to be in Stockholm format (either interleaved or Pfam), unless .B --small is enabled, in which case alignments are assumed to be in Pfam format. .TP .BI --outformat " " Specify that the output alignment be format .I . Choices for .I are: 'stockholm', 'pfam', 'a2m', 'psiblast', 'afa'. By default the alignment is output in interleaved Stockholm format unless .B --small is enabled, in which case the alignment is output in Pfam format. .TP .BI --fmask-rf " " Save the non-gap RF-length final mask used to mask the alignment to file .I . The input alignment must be in Stockholm format and contain '#=GC RF' annotation for this option to be valid. See the OUTPUT section above for more details on output mask files. .TP .BI --fmask-all " " Save the full alignment-length final mask used to mask the alignment to file .I . See the OUTPUT section above for more details on output mask files. .TP .B --amino Specify that the input alignment is a protein alignment. By default, .B esl-alimask will try to autodetect the alphabet, but if the alignment is sufficiently small it may be ambiguous. This option defines the alphabet as protein. Importantly, if .B --small is enabled, the alphabet must be specified with either .B --amino, .B --dna, or .B --rna. .TP .B --dna Specify that the input alignment is a DNA alignment. .TP .B --rna Specify that the input alignment is an RNA alignment. .TP .B --t-rf With -t, specify that the start and end coordinates defined in the second command line argument .I coords correspond to non-gap RF coordinates. To use this option, the alignment must be in Stockholm format and have "#=GC RF" annotation. See the DESCRIPTION section for an example of using the .B --t-rf option. .TP .B --t-rmins With -t, specify that all columns that are gaps in the reference (RF) annotation in between the specified start and end coordinates be removed. By default, these columns will be kept. To use this option, the alignment must be in Stockholm format and have "#=GC RF" annotation. .TP .BI --gapthresh " " With -g, specify that a column is kept (included by mask) if no more than .I fraction of sequences in the alignment have a gap ('.', '-', or '_') at that position. All other columns are removed (excluded by mask). By default, .I is 0.5. .TP .BI --gmask-rf " " Save the non-gap RF-length gap frequency-based mask used to mask the alignment to file .I . The input alignment must be in Stockholm format and contain '#=GC RF' annotation for this option to be valid. See the OUTPUT section above for more details on output mask files. .TP .BI --gmask-all " " Save the full alignment-length gap frequency-based mask used to mask the alignment to file .I . See the OUTPUT section above for more details on output mask files. .TP .BI --pfract " " With -p, specify that a column is kept (included by mask) if the fraction of sequences with a non-gap residue in that column with a posterior probability of at least .I (from .BI --pthresh " " ) is .I or greater. All other columns are removed (excluded by mask) By default .I is 0.95. .TP .BI --pthresh " " With -p, specify that a column is kept (included by mask) if .I (from .BI --pfract " " ) fraction of sequences with a non-gap residue in that column have a posterior probability of at least .I . All other columns are removed (excluded by mask). By default .I is 0.95. See the DESCRIPTION section for more on posterior probability (PP) masking. Due to the granularity of the PP annotation, different .I values within a range covered by a single PP character will be have the same effect on masking. For example, using .BI --pthresh " 0.86" will have the same effect as using .BI --pthresh " 0.94". .TP .BI --pavg " " With -p, specify that a column is kept (included by mask) if the average posterior probability of non-gap residues in that column is at least .I . See the DESCRIPTION section for more on posterior probability (PP) masking. .TP .BI --ppcons " " With -p, use the '#=GC PP_cons' annotation to define which columns to keep/remove. A column is kept (included by mask) if the PP_cons value for that column is .I or greater. Otherwise it is removed. .TP .B --pallgapok With -p, do not automatically remove any columns that are 100% gaps (i.e. contain 0 aligned residues). By default, such columns will be removed. .TP .BI --pmask-rf " " Save the non-gap RF-length posterior probability-based mask used to mask the alignment to file .I . The input alignment must be in Stockholm format and contain '#=GC RF' annotation for this option to be valid. See the OUTPUT section above for more details on output mask files. .TP .BI --pmask-all " " Save the full alignment-length posterior probability-based mask used to mask the alignment to file .I . See the OUTPUT section above for more details on output mask files. .TP .B --keepins If .B -p and/or .B -g is enabled and the alignment is in Stockholm or Pfam format and has '#=GC RF' annotation, then allow columns that are gaps in the RF annotation to possibly be kept. By default, all gap RF columns would be removed automatically, but with this option enabled gap and non-gap RF columns are treated identically. To automatically remove all gap RF columns when using a .I maskfile , then define the mask in .I maskfile as having length equal to the non-gap RF length in the alignment. To automatically remove all gap RF columns when using .B -t, use the .B --t-rmins option. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-seqrange.man0000664361611702660230000000272012473612611020263 0ustar wheelerteddy.TH "esl-seqrange" 1 "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual" .SH NAME .TP esl-seqrange - determine a range of sequences for one of many parallel processes. .SH SYNOPSIS .TP .B esl-sfetch .I [options] .I seqfile .I procidx .I nproc .SH DESCRIPTION .pp .B esl-seqrange reads an indexed .I seqfile and determines the range of sequence indices in that file that process number .I procidx out of .I nproc total processes should operate on during a parallel processing of .I seqfile. .pp The .I seqfile must be indexed first using .B esl-sfetch --index . This creates an SSI index file .I .ssi. An SSI file is required in order for .B esl-seqrange to work. Sequence index ranges are calculated using a simple rule: the number of sequences for each process should be identical, or as close as possible to identical, across all processes. The lengths of the sequences are not considered (even though they probably should be). .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .BI --informat " " Specify that the sequence file is in format .I , where .I may be FASTA, GenBank, EMBL, UniProt, or DDBJ. This string is case-insensitive ("genbank" or "GenBank" both work, for example). .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-mask.man0000664361611702660230000000622012473612611017410 0ustar wheelerteddy.TH "esl-mask" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps" .SH NAME .TP esl-mask - mask sequence residues with X's (or other characters) .SH SYNOPSIS .B esl-mask .I [options] .I seqfile .I maskfile .SH DESCRIPTION .B esl-mask reads lines from .I maskfile that give start/end coordinates for regions in each sequence in .I seqfile, masks these residues (changes them to X's), and outputs the masked sequence. The .I maskfile is a space-delimited file. Blank lines and lines that start with '#' (comments) are ignored. Each data line contains at least three fields: .I seqname, .I start, and .I end. The .I seqname is the name of a sequence in the .I seqfile, and .I start and .I end are coordinates defining a region in that sequence. The coordinates are indexed <1..L> with respect to a sequence of length . By default, the sequence names must appear in exactly the same order and number as the sequences in the .I seqfile. This is easy to enforce, because the format of .I maskfile is also legal as a list of names for .B esl-sfetch, so you can always fetch a temporary sequence file with .B esl-sfetch and pipe that to .B esl-mask. (Alternatively, see the .B -R option for fetching from an SSI-indexed .I seqfile.) The default is to mask the region indicated by .I ... Alternatively, everything but this region can be masked; see the .B -r reverse masking option. The default is to mask residues by converting them to X's. Any other masking character can be chosen (see .B -m option), or alternatively, masked residues can be lowercased (see .B -l option). The .I seqfile can be in any sequence file format that Easel reads, such as FASTA format. The format will be autodetected. Alternatively, for increased reliability, you can specify the input format; see the .B --informat option. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .B -l Lowercase; mask by converting masked characters to lower case and unmasked characters to upper case. .TP .BI -m " " Mask by converting masked residues to .I instead of the default X. .TP .BI -o " " Send output to file .I instead of stdout. .TP .B -r Reverse mask; mask everything outside the region .I start..end, as opposed to the default of masking that region. .TP .B -R Random access; fetch sequences from .I rather than requiring that sequence names in .I and .I come in exactly the same order and number. The .I must be SSI indexed (see .B esl-sfetch --index.) .TP .BI -x " " Extend all masked regions by up to residues on each side. For normal masking, this means masking .I -..+. For reverse masking, this means masking .I 1..-1+ and .I +1-..L in a srquence of length L. .TP .BI --informat " " Specify that the sequence file is in format .I , rather than allowing the program to autodetect the file format. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-alimap.itest.pl0000775361611702660230000001220212473612610020706 0ustar wheelerteddy#! /usr/bin/perl # Integrated test of the esl-alimap miniapp. # # Usage: ./esl-alimap.itest.pl # Example: ./esl-alimap.itest.pl ./esl-alimap foo # # EPN, Tue Feb 2 13:19:44 2010 $eslalimap= shift; $tmppfx = shift; if (! -x "$eslalimap") { die "FAIL: didn't find esl-alimap binary $eslalimap"; } open(ALIFILE, ">$tmppfx.1") || die "FAIL: couldn't open $tmppfx.1 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GF AU Infernal 0.1 simpex-17 --AGA-CUUCGG---GCUCG-UAACAG #=GR simpex-17 PP ..885.*****9...9****.****** simpex-39 aaAAUACGUCGGCUG-AAUCACCAGUA #=GR simpex-39 PP ***************.67776899999 simpex-82 --ACGUUUUG-GAACGGG-U-CCA-CC #=GR simpex-82 PP ..****9998.88**888.5.898.9* #=GC SS_cons ..::<<<____>->>-<<-<.___>>> #=GC RF ..AAgaCUUCGGAucgggCg.AcAccc // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.2") || die "FAIL: couldn't open $tmppfx.2 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GF AU Infernal 0.1 simpex-17 ---AGACUUCGGG---CUCGUAACAG #=GR simpex-17 PP ...69*****775...4466777888 simpex-39 aaAAUACGUCGGCUGAAUCACCAGUA #=GR simpex-39 PP ************************** simpex-82 --ACGUUUUG-GAACGGGUC-C-ACC #=GR simpex-82 PP ..99998886.777755544.2.358 #=GC SS_cons ..:::::::::::::::::::::::: #=GC RF ..AAgACUUCGGAucggGCaAcAuUc // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.3") || die "FAIL: couldn't open $tmppfx.2 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GF AU Infernal 0.1 simpex-17 ---AGACUUCGGG---CUCGUAACAG #=GR simpex-17 PP ...69*****775...4466777888 simpex-39 aaAAUACGUCGGCUGAAUCACCAGUA #=GR simpex-39 PP ************************** simpex-82 --ACGUUUUG-GAACGGGUC-C-ACC #=GR simpex-82 PP ..99998886.777755544.2.358 // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.4") || die "FAIL: couldn't open $tmppfx.3 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GF AU Infernal 0.1 test1 ..AA..AA..AAA test2 ..CC.gCC..CCC // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.5") || die "FAIL: couldn't open $tmppfx.4 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GF AU Infernal 0.1 test1 AAAAAAA test2 CCCCCCC // EOF close ALIFILE; open(MASKFILE, ">$tmppfx.mask") || die "FAIL: couldn't open $tmppfx.mask for writing alifile"; print MASKFILE << "EOF"; 110111011011101110011101 EOF close MASKFILE; $output = `$eslalimap -h`; if ($? != 0) { die "FAIL: esl-alimap failed unexpectedly"; } if ($output !~ /Usage: esl-alimap/) { die "FAIL: help output not right"; } $output = `$eslalimap $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimap failed unexpectedly"; } if ($output !~ /20 23 --> 20 22 3 \/ 3 \(1.0\d+\)/) { die "FAIL: alignments mapped incorrectly"; } if ($output !~ /\# Coverage: 56 \/ 67 \(0.83\d+\)/) { die "FAIL: alignments mapped incorrectly"; } $output = `$eslalimap --dna $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimap failed unexpectedly"; } if ($output !~ /20 23 --> 20 22 3 \/ 3 \(1.0\d+\)/) { die "FAIL: alignments mapped incorrectly"; } if ($output !~ /\# Coverage: 56 \/ 67 \(0.83\d+\)/) { die "FAIL: alignments mapped incorrectly"; } $output = `$eslalimap $tmppfx.1 $tmppfx.3 2>&1`; if ($? != 0) { die "FAIL: esl-alimap failed unexpectedly"; } if ($output !~ /20 23 --> 22 3 \/ 3 \(1.0\d+\)/) { die "FAIL: alignments mapped incorrectly"; } if ($output !~ /\# Coverage: 56 \/ 67 \(0.83\d+\)/) { die "FAIL: alignments mapped incorrectly"; } system("$eslalimap --mask-a2a $tmppfx.a2a --mask-a2rf $tmppfx.a2rf --mask-rf2a $tmppfx.rf2a --mask-rf2rf $tmppfx.rf2rf $tmppfx.1 $tmppfx.2 > /dev/null"); if ($? != 0) { die "FAIL: esl-alimap failed unexpectedly"; } $output = `cat $tmppfx.a2a`; if ($output !~ /111111111111111111011111111/) { die "FAIL: alignments mapped incorrectly."; } $output = `cat $tmppfx.a2rf`; if ($output !~ /001111111111111111011111111/) { die "FAIL: alignments mapped incorrectly."; } $output = `cat $tmppfx.rf2a`; if ($output !~ /111111111111111101111111/) { die "FAIL: alignments mapped incorrectly."; } $output = `cat $tmppfx.rf2rf`; if ($output !~ /111111111111111101111111/) { die "FAIL: alignments mapped incorrectly."; } system("$eslalimap --rna --submap $tmppfx.submask $tmppfx.4 $tmppfx.5 > /dev/null"); if ($? != 0) { die "FAIL: esl-alimap failed unexpectedly"; } $output = `cat $tmppfx.submask`; if ($output !~ /0011001100111/) { die "FAIL: alignments mapped incorrectly"; } print "ok\n"; unlink "$tmppfx.1"; unlink "$tmppfx.2"; unlink "$tmppfx.3"; unlink "$tmppfx.4"; unlink "$tmppfx.5"; unlink "$tmppfx.a2a"; unlink "$tmppfx.a2rf"; unlink "$tmppfx.rf2a"; unlink "$tmppfx.rf2rf"; unlink "$tmppfx.submask"; unlink "$tmppfx.mask"; exit 0; hmmer-3.1b2/easel/miniapps/esl-seqrange.c0000664361611702660230000001630312473612611017734 0ustar wheelerteddy/* Determine range of sequences for one of many parallel processes. * * EPN, Wed Mar 24 07:23:27 2010 * SVN $Id: esl-sfetch.c 480 2010-01-06 00:05:59Z farrarm $ */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_fileparser.h" #include "esl_keyhash.h" #include "esl_regexp.h" #include "esl_ssi.h" #include "esl_sq.h" #include "esl_sqio.h" static char banner[] = "determine range of sequences for one of many parallel processes"; static char usage[] = "[options] "; static void cmdline_failure(char *argv0, char *format, ...) { va_list argp; va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); esl_usage(stdout, argv0, usage); printf("\nTo see more help on available options, do %s -h\n\n", argv0); exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { esl_banner(stdout, argv0, banner); esl_usage (stdout, argv0, usage); puts("\n where general options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); exit(0); } static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "help; show brief info on version and usage", 1 }, { "--informat", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, NULL, "specify that input file is in format ", 1 }, { 0,0,0,0,0,0,0,0,0,0 }, }; static void range_by_seqnum(ESL_SQFILE *sqfp, int nproc, int64_t **ret_final_sqidx); int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* application configuration */ char *seqfile = NULL; /* sequence file name */ int infmt = eslSQFILE_UNKNOWN; /* format code for seqfile */ ESL_SQFILE *sqfp = NULL; /* open sequence file */ int status; /* easel return code */ int procidx; /* processor index we want range for */ int nproc; /* total number processors (>= procidx) */ int64_t *final_sqidx; /* [0..p..nproc-1] index (in sqfp) of final seq for proc p+1, * sequence index ranges 1..nseq_total */ /*********************************************** * Parse command line ***********************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], "Error in configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") ) cmdline_help (argv[0], go); if (esl_opt_ArgNumber(go) != 3) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); seqfile = esl_opt_GetArg(go, 1); procidx = atoi(esl_opt_GetArg(go, 2)); nproc = atoi(esl_opt_GetArg(go, 3)); /* Validate command line args */ if(procidx > nproc) cmdline_failure(argv[0], " must be less than or equal to \n"); if(procidx < 1) cmdline_failure(argv[0], "minimum allowed value for is 1\n"); if(nproc < 1) cmdline_failure(argv[0], "minimum allowed value for is 1\n"); /* Open the sequence file */ if (esl_opt_GetString(go, "--informat") != NULL) { infmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat")); if (infmt == eslSQFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat"); } status = esl_sqfile_Open(seqfile, infmt, NULL, &sqfp); if (status == eslENOTFOUND) cmdline_failure(argv[0], "Sequence file %s not found.\n", seqfile); else if (status == eslEFORMAT) cmdline_failure(argv[0], "Format of file %s unrecognized.\n", seqfile); else if (status == eslEINVAL) cmdline_failure(argv[0], "Can't autodetect stdin or .gz.\n"); else if (status != eslOK) cmdline_failure(argv[0], "Open failed, code %d.\n", status); /* Exit if seqfile is an alignment, is gzipped or is piped from stdin, we can't handle this */ if (sqfp->data.ascii.do_gzip) cmdline_failure(argv[0], "Can't determine seq range for a .gz compressed file\n"); if (sqfp->data.ascii.do_stdin) cmdline_failure(argv[0], "Can't determine seq range for a standard input pipe\n"); if (esl_sqio_IsAlignment(sqfp->format)) cmdline_failure(argv[0], "Can't determine seq range for an alignment file\n"); /* Open the SSI index for retrieval, it is required */ status = esl_sqfile_OpenSSI(sqfp, NULL); if (status == eslEFORMAT) cmdline_failure(argv[0], "SSI index is in incorrect format\n"); else if (status == eslERANGE) cmdline_failure(argv[0], "SSI index is in 64-bit format and we can't read it\n"); else if (status != eslOK) cmdline_failure(argv[0], "Failed to open SSI index\n"); /* Verify that we have more processors than sequences */ ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; if(ascii->ssi->nprimary < nproc) cmdline_failure(argv[0], "Fewer sequences than processors (); %d < %d\n", ascii->ssi->nprimary, nproc); /* Determine the range for all processors */ range_by_seqnum(sqfp, nproc, &(final_sqidx)); /* Output range for desired nproc to stdout */ printf("%" PRId64 "-%" PRId64 "\n", (procidx == 1) ? 1 : final_sqidx[procidx-2]+1, final_sqidx[procidx-1]); /* careful: final_sqidx runs 0..nproc-1 */ free(final_sqidx); esl_sqfile_Close(sqfp); esl_getopts_Destroy(go); return 0; } /* Determine seq range for processors with goal of putting an identical * number of sequences (or as close to identical as possible) in each chunk, * one chunk per processor. */ static void range_by_seqnum(ESL_SQFILE *sqfp, int nproc, int64_t **ret_final_sqidx) { int status; int64_t *final_sqidx; /* [0..p..nproc-1] index (in sqfp) of final seq for proc p+1 * sequence index ranges 1..nseq_total */ int p; /* counter over processes */ int64_t nseq_per_proc; /* num seqs per processor for even split */ int64_t nseq_total; /* total number of sequences in sqfp */ int64_t remainder; /* num extra seqs after even split across all procs */ int64_t nseq_used; /* running total of nseqs on all procs */ ESL_SQASCII_DATA *ascii = &sqfp->data.ascii; ESL_ALLOC(final_sqidx, sizeof(int64_t) * nproc); nseq_total = ascii->ssi->nprimary; nseq_per_proc = (int) (nseq_total / nproc); remainder = nseq_total - (nseq_per_proc * nproc); nseq_used = 0; for(p = 0; p < nproc; p++) { nseq_used += nseq_per_proc; if(p < remainder) nseq_used++; final_sqidx[p] = nseq_used; } if(nseq_used != nseq_total) esl_fatal("Unable to split up sequences properly, coding error"); *ret_final_sqidx = final_sqidx; return; ERROR: esl_fatal("Out of memory"); return; /* NEVERREACHED */ } hmmer-3.1b2/easel/miniapps/esl-cluster.c0000664361611702660230000001577312473612610017621 0ustar wheelerteddy/* Clusters tabular data. * * SRE, Mon Nov 3 13:43:29 2008 [Janelia] * SVN $Id: esl-cluster.c 685 2011-05-23 14:27:52Z eddys $ */ #include "esl_config.h" #include #include #include #include #include "easel.h" #include "esl_fileparser.h" #include "esl_getopts.h" #include "esl_keyhash.h" #include "esl_stack.h" #include "esl_tree.h" #include "esl_vectorops.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "show brief help on version and usage", 0 }, { "-q", eslARG_INT, "8", NULL, "n>0", NULL,NULL, NULL, "field to read as query name, 1..n", 0 }, { "-t", eslARG_INT, "5", NULL, "n>0", NULL,NULL, NULL, "field to read as target name, 1..n", 0 }, { "-v", eslARG_INT, "1", NULL, "n>0", NULL,NULL, NULL, "field to read as distance value, 1..n", 0 }, { "-x", eslARG_REAL, "1e-4", NULL, "x>0", NULL,NULL, NULL, "clustering threshold", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "clusters tabular data file"; static void read_keyfile (ESL_GETOPTS *go, char *keyfile, ESL_KEYHASH *kh); static void read_tabfile (ESL_GETOPTS *go, char *tabfile, ESL_KEYHASH *kh, ESL_DMATRIX *D); static void output_clusters(ESL_GETOPTS *go, ESL_TREE *T, ESL_KEYHASH *kh); static void cmdline_failure(char *argv0, ESL_GETOPTS *go, char *format, ...) { va_list argp; va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); esl_usage(stdout, argv0, usage); puts("\n options:"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* printf("\nTo see more help on available options, do %s -h\n\n", argv0); */ exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { esl_banner(stdout, argv0, banner); esl_usage (stdout, argv0, usage); puts("\n options:"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); exit(0); } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; char *keyfile = NULL; char *tabfile = NULL; ESL_KEYHASH *kh = esl_keyhash_Create(); int nkeys = 0; ESL_DMATRIX *D = NULL; ESL_TREE *T = NULL; go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], go, "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], go, "Error in app configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") ) cmdline_help (argv[0], go); if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], go, "Incorrect number of command line arguments.\n"); keyfile = esl_opt_GetArg(go, 1); tabfile = esl_opt_GetArg(go, 2); read_keyfile(go, keyfile, kh); nkeys = esl_keyhash_GetNumber(kh); D = esl_dmatrix_Create(nkeys, nkeys); read_tabfile(go, tabfile, kh, D); esl_tree_SingleLinkage(D, &T); //esl_tree_WriteNewick(stdout, T); output_clusters(go, T, kh); esl_tree_Destroy(T); esl_dmatrix_Destroy(D); esl_keyhash_Destroy(kh); esl_getopts_Destroy(go); return 0; } static void read_keyfile(ESL_GETOPTS *go, char *keyfile, ESL_KEYHASH *kh) { ESL_FILEPARSER *efp = NULL; int nline = 0; char *tok = NULL; int toklen; int status; if (esl_fileparser_Open(keyfile, NULL, &efp) != eslOK) esl_fatal("File open failed"); esl_fileparser_SetCommentChar(efp, '#'); while (esl_fileparser_NextLine(efp) == eslOK) { nline++; if (esl_fileparser_GetTokenOnLine(efp, &tok, &toklen) != eslOK) esl_fatal("No token found on line %d", nline); status = esl_keyhash_Store(kh, tok, toklen, NULL); if (status == eslEDUP) esl_fatal("Saw key %s twice: keys must be unique", tok); else if (status != eslOK) esl_fatal("unknown error in storing key %s\n", tok); } esl_fileparser_Close(efp); } static void read_tabfile(ESL_GETOPTS *go, char *tabfile, ESL_KEYHASH *kh, ESL_DMATRIX *D) { ESL_FILEPARSER *efp = NULL; int nline = 0; int vfield = esl_opt_GetInteger(go, "-v"); int qfield = esl_opt_GetInteger(go, "-q"); int tfield = esl_opt_GetInteger(go, "-t"); char *tok; int toklen; int ntok; double value; int qidx, tidx; if (esl_fileparser_Open(tabfile, NULL, &efp) != eslOK) esl_fatal("File open failed"); esl_fileparser_SetCommentChar(efp, '#'); esl_dmatrix_Set(D, eslINFINITY); while (esl_fileparser_NextLine(efp) == eslOK) { nline++; ntok = 0; qidx = tidx = -1; value = eslNaN; while (esl_fileparser_GetTokenOnLine(efp, &tok, &toklen) == eslOK) { ntok++; if (ntok == vfield) value = atof(tok); if (ntok == qfield && esl_keyhash_Lookup(kh, tok, toklen, &qidx) != eslOK) esl_fatal("failed to find query key %s", tok); if (ntok == tfield && esl_keyhash_Lookup(kh, tok, toklen, &tidx) != eslOK) esl_fatal("failed to find target key %s", tok); } if (qidx == -1) esl_fatal("Failed to find query name on line %d (looking for field %d)\n", nline, qfield); if (tidx == -1) esl_fatal("Failed to find target name on line %d (looking for field %d)\n", nline, tfield); if (isnan(value)) esl_fatal("Failed to find value on line %d (looking for field %d)\n", nline, vfield); D->mx[qidx][tidx] = value; if (D->mx[tidx][qidx] == eslINFINITY) D->mx[tidx][qidx] = value; } esl_fileparser_Close(efp); } void output_clusters(ESL_GETOPTS *go, ESL_TREE *T, ESL_KEYHASH *kh) { ESL_STACK *ns = esl_stack_ICreate(); ESL_STACK *s2 = esl_stack_ICreate(); double threshold = esl_opt_GetReal(go, "-x"); int v,v2; int nc = 0; esl_stack_IPush(ns, 0); while (esl_stack_IPop(ns, &v) == eslOK) { /* v may only be an internal node. */ if (T->ld[v] < threshold) { nc++; printf("Cluster %d: %g\n", nc, T->ld[v]); esl_stack_IPush(s2, T->right[v]); esl_stack_IPush(s2, T->left[v]); while (esl_stack_IPop(s2, &v2) == eslOK) { if (v2 <= 0) printf("= %s \t%d\t%g\n", esl_keyhash_Get(kh, -v2), nc, T->ld[v]); else { esl_stack_IPush(s2, T->right[v2]); esl_stack_IPush(s2, T->left[v2]); } } printf("\n\n"); continue; } if (T->right[v] > 0) esl_stack_IPush(ns, T->right[v]); else printf("Singleton:\n= %s\t%c\t%c\n\n", esl_keyhash_Get(kh, -T->right[v]), '-', '-'); if (T->left[v] > 0) esl_stack_IPush(ns, T->left[v]); else printf("Singleton:\n= %s\t%c\t%c\n\n", esl_keyhash_Get(kh, -T->left[v]), '-', '-'); } esl_stack_Destroy(ns); esl_stack_Destroy(s2); } hmmer-3.1b2/easel/miniapps/esl-compstruct.man0000664361611702660230000000645412473612611020671 0ustar wheelerteddy.TH "esl-compstruct" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps" .SH NAME .TP esl-compstruct - calculate accuracy of RNA secondary structure predictions .SH SYNOPSIS .B esl-compstruct .I [options] .I trusted_file .I test_file .SH DESCRIPTION .I esl-compstruct evaluates the accuracy of RNA secondary structure predictions on a per-base-pair basis. The .I trusted_file contains one or more sequences with trusted (known) RNA secondary structure annotation. The .I test_file contains the same sequences, in the same order, with predicted RNA secondary structure annotation. .I esl-compstruct reads the structures and compares them, and calculates both the sensitivity (the number of true base pairs that are correctly predicted) and the positive predictive value (PPV; the number of predicted base pairs that are true). Results are reported for each individual sequence, and in summary for all sequences together. .PP Both files must contain secondary structure annotation in WUSS notation. Only SELEX and Stockholm formats support structure markup at present. .PP The default definition of a correctly predicted base pair is that a true pair (i,j) must exactly match a predicted pair (i,j). .PP Mathews and colleagues (Mathews et al., JMB 288:911-940, 1999) use a more relaxed definition. Mathews defines "correct" as follows: a true pair (i,j) is correctly predicted if any of the following pairs are predicted: (i,j), (i+1,j), (i-1,j), (i,j+1), or (i,j-1). This rule allows for "slipped helices" off by one base. The .B -m option activates this rule for both sensitivity and for specificity. For specificity, the rule is reversed: predicted pair (i,j) is considered to be true if the true structure contains one of the five pairs (i,j), (i+1,j), (i-1,j), (i,j+1), or (i,j-1). .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .B -m Use the Mathews relaxed accuracy rule (see above), instead of requiring exact prediction of base pairs. .TP .B -p Count pseudoknotted base pairs towards the accuracy, in either trusted or predicted structures. By default, pseudoknots are ignored. .IP Normally, only the .I trusted_file would have pseudoknot annotation, since most RNA secondary structure prediction programs do not predict pseudoknots. Using the .B -p option allows you to penalize the prediction program for not predicting known pseudoknots. In a case where both the .I trusted_file and the .I test_file have pseudoknot annotation, the .B -p option lets you count pseudoknots in evaluating the prediction accuracy. Beware, however, the case where you use a pseudoknot-capable prediction program to generate the .I test_file, but the .I trusted_file does not have pseudoknot annotation; in this case, .B -p will penalize any predicted pseudoknots when it calculates specificity, even if they're right, because they don't appear in the trusted annotation. This is probably not what you'd want to do. .SH EXPERT OPTIONS .TP .B --quiet Don't print any verbose header information. (Used by regression test scripts, for example, to suppress version/date information.) .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-afetch.itest.pl0000775361611702660230000001540312473612610020703 0ustar wheelerteddy#! /usr/bin/perl # Testing the esl-afetch miniapp # # Usage: ./esl-afetch.itest.pl # Example: ./esl-afetch.itest.pl ./esl-afetch foo # # SRE, Fri Nov 11 09:16:49 2011 # SVN $Id: esl-afetch.itest.pl 732 2011-11-11 15:11:13Z eddys $ $esl_afetch = shift; $tmppfx = shift; if (! -x "$esl_afetch") { die "FAIL: didn't find esl-afetch binary $esl_afetch"; } # Existence of a previous .ssi index will screw up this test. if ( -e "$tmppfx.sto.ssi") { unlink "$tmppfx.sto.ssi"; } open(TESTALI, ">$tmppfx.sto") || die "FAIL: couldn't open $tmppfx.sto for writing test ali file"; print TESTALI << "EOF"; # STOCKHOLM 1.0 #=GF ID foo #=GF AC XX00001.1 seq1 AAAAAAAAAACCCCCCCCCC seq2 AAAAAAAAAACCCCCCCCCC // # STOCKHOLM 1.0 #=GF ID bar #=GF AC XX00002.2 seq3 DDDDDDDDDDEEEEEEEEEE seq4 DDDDDDDDDDEEEEEEEEEE // # STOCKHOLM 1.0 #=GF ID $tmppfx.name seq3 XXXXXXXXXXXXXXXXXXXX seq4 XXXXXXXXXXXXXXXXXXXX // # STOCKHOLM 1.0 #=GF ID baz #=GF AC XX00003.3 seq5 FFFFFFFFFFGGGGGGGGGG seq6 FFFFFFFFFFGGGGGGGGGG // EOF close TESTFILE; open(TESTLIST, ">$tmppfx.list") || die "FAIL: couldn't open $tmppfx.list for writing test name list"; print TESTLIST << "EOF"; baz foo EOF close TESTLIST; # First, test without an SSI index... # @output = `$esl_afetch $tmppfx.sto baz`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } if ($output[1] !~ /^#=GF ID baz$/) { die "FAIL: esl-afetch fetched incorrectly"; } if ($output[6] !~ /^\/\/$/) { die "FAIL: esl-afetch fetched incorrectly"; } if ($#output != 6) { die "FAIL: esl-afetch fetched incorrectly"; } @output = `$esl_afetch $tmppfx.sto XX00003.3`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } if ($output[1] !~ /^#=GF ID baz$/) { die "FAIL: esl-afetch fetched incorrectly"; } if ($output[6] !~ /^\/\/$/) { die "FAIL: esl-afetch fetched incorrectly"; } if ($#output != 6) { die "FAIL: esl-afetch fetched incorrectly"; } # Without SSI, when fetching from a list, MSAs are in order of .sto file, not .list file @output = `$esl_afetch -f $tmppfx.sto $tmppfx.list`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } if ($output[1] !~ /^#=GF ID foo$/) { die "FAIL: esl-afetch fetched incorrectly"; } if ($output[8] !~ /^#=GF ID baz$/) { die "FAIL: esl-afetch fetched incorrectly"; } if ($#output != 13) { die "FAIL: esl-afetch fetched incorrectly"; } @output = `$esl_afetch -O $tmppfx.sto $tmppfx.name`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } @output = `$esl_afetch $tmppfx.sto $tmppfx.name > $tmppfx.tmp`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } system "diff $tmppfx.name $tmppfx.tmp > /dev/null 2>&1"; if ($? != 0) { die "FAIL: esl-afetch bad diff"; } @output = `$esl_afetch -f -o $tmppfx.tmp $tmppfx.sto $tmppfx.list`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } @output = `$esl_afetch -f $tmppfx.sto $tmppfx.list > $tmppfx.tmp2`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } system "diff $tmppfx.tmp $tmppfx.tmp2 > /dev/null 2>&1"; if ($? != 0) { die "FAIL: esl-afetch bad diff"; } @output = `$esl_afetch --informat stockholm $tmppfx.sto baz`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } @output = `$esl_afetch --outformat clustal $tmppfx.sto XX00003.3`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } if ($output[0] !~ /^CLUSTAL/) { die "FAIL: esl-afetch fetched incorrectly"; } # Now index it # @output = `$esl_afetch --index $tmppfx.sto`; if ($? != 0) { die "FAIL: esl-afetch indexing failed, returned nonzero"; } # Now repeat the tests. They'll use the SSI index now. # We have a couple of ways to tell that the SSI index is being used. # One is that with SSI and -f, MSAs come in order of list file, not sto file. # Another is that with SSI, the alignment is fetched verbatim (line spacing the same), # so the test alignments are fetched with no blank line between #=GF AC line and first seq. @output = `$esl_afetch $tmppfx.sto baz`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } if ($output[1] !~ /^#=GF ID baz$/) { die "FAIL: esl-afetch fetched incorrectly"; } if ($output[5] !~ /^\/\/$/) { die "FAIL: esl-afetch fetched incorrectly"; } if ($#output != 5) { die "FAIL: esl-afetch fetched incorrectly"; } @output = `$esl_afetch $tmppfx.sto XX00003.3`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } if ($output[1] !~ /^#=GF ID baz$/) { die "FAIL: esl-afetch fetched incorrectly"; } if ($output[5] !~ /^\/\/$/) { die "FAIL: esl-afetch fetched incorrectly"; } if ($#output != 5) { die "FAIL: esl-afetch fetched incorrectly"; } # With SSI, when fetching from a list, MSAs are in order of .list file, not .sto file @output = `$esl_afetch -f $tmppfx.sto $tmppfx.list`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } if ($output[1] !~ /^#=GF ID baz$/) { die "FAIL: esl-afetch fetched incorrectly"; } if ($output[7] !~ /^#=GF ID foo$/) { die "FAIL: esl-afetch fetched incorrectly"; } if ($#output != 11) { die "FAIL: esl-afetch fetched incorrectly"; } @output = `$esl_afetch -O $tmppfx.sto $tmppfx.name`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } @output = `$esl_afetch $tmppfx.sto $tmppfx.name > $tmppfx.tmp`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } system "diff $tmppfx.name $tmppfx.tmp > /dev/null 2>&1"; if ($? != 0) { die "FAIL: esl-afetch bad diff"; } @output = `$esl_afetch -f -o $tmppfx.tmp $tmppfx.sto $tmppfx.list`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } @output = `$esl_afetch -f $tmppfx.sto $tmppfx.list > $tmppfx.tmp2`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } system "diff $tmppfx.tmp $tmppfx.tmp2 > /dev/null 2>&1"; if ($? != 0) { die "FAIL: esl-afetch bad diff"; } @output = `$esl_afetch --informat stockholm $tmppfx.sto baz`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } @output = `$esl_afetch --outformat clustal $tmppfx.sto XX00003.3`; if ($? != 0) { die "FAIL: esl-afetch failed, returned nonzero"; } if ($output[0] !~ /^CLUSTAL/) { die "FAIL: esl-afetch fetched incorrectly"; } print "ok\n"; unlink "$tmppfx.sto"; unlink "$tmppfx.sto.ssi"; unlink "$tmppfx.tmp"; unlink "$tmppfx.tmp2"; unlink "$tmppfx.name"; exit 0; hmmer-3.1b2/easel/miniapps/esl-compalign.man0000664361611702660230000001056512473612611020435 0ustar wheelerteddy.TH "esl-compalign" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps" .SH NAME .TP esl-compalign - compare two multiple sequence alignments .SH SYNOPSIS .B esl-compalign .I [options] .I trusted_file .I test_file .SH DESCRIPTION .I esl-compalign evaluates the accuracy of a predicted multiple sequence alignment with respect to a trusted alignment of the same sequences. The .I trusted_file and .I test_file must contain the same number of alignments. Each predicted alignment in the .I test_file will be compared against a single trusted alignment from the .I trusted_file. The first alignments in each file correspond to each other and will be compared, the second alignment in each file correspond to each other and will be compared, and so on. Each corresponding pair of alignments must contain the same sequences (i.e. if they were unaligned they would be identical) in the same order in both files. Further, both alignment files must be in Stockholm format and contain 'reference' annotation, which appears as "#=GC RF" per-column markup for each alignment. The number of nongap (non '.' characters) in the reference (RF) annotation must be identical between all corresponding alignments in the two files. .I esl-compalign reads an alignment from each file, and compares them based on their 'reference' annotation. The number of correctly predicted residues for each sequence is computed as follows. A residue that is in the Nth nongap RF column in the trusted alignment must also appear in the Nth nongap RF column in the predicted alignment to be counted as 'correct', otherwise it is 'incorrect'. A residue that appears in a gap RF column in the trusted alignment between nongap RF columns N and N+1 must also appear in a nongap RF column in the predicted alignment between nongap RF columns N and N+1 to be counted as 'correct', otherwise it is incorrect. The default output of .B esl-compalign lists each sequence and the number of correctly and incorrectly predicted residues for that sequence. These counts are broken down into counts for residues in the predicted alignments that occur in 'match' columns and 'insert' columns. A 'match' column is one for which the RF annotation does not contain a gap. An 'insert' column is one for which the RF annotation does contain a gap. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options. .TP .B -c Print per-column statistics instead of per-sequence statistics. .TP .B -p Print statistics on accuracy versus posterior probability values. The .I test_file must be annotated with posterior probabilities (#=GR PP) for this option to work. .SH EXPERT OPTIONS .TP .BI --p-mask " " This option may only be used in combination with the .B -p option. Read a "mask" from file .I . The mask file must consist of a single line, of only '0' and '1' characters. There must be exactly RFLEN characters where RFLEN is the number of nongap characters in the RF annotation of all alignments in both .I trusted_file and .I test_file. Positions of the mask that are '1' characters indicate that the corresponding nongap RF position is included by the mask. The posterior probability accuracy statistics for match columns will only pertain to positions that are included by the mask, those that are excluded will be ignored from the accuracy calculation. .BI --c2dfile " " Save a 'draw file' to file .I which can be read into the .B esl-ssdraw miniapp. This draw file will define two postscript pages for .B esl-ssdraw. The first page will depict the frequency of errors per match position and frequency of gaps per match position, indicated by magenta and yellow, respectively. The darker magenta, the more errors and the darker yellow, the more gaps. The second page will depict the frequency of errors in insert positions in shades of magenta, the darker the magenta the more errors in inserts after each position. See .B esl-ssdraw documentation for more information on these diagrams. .TP .B --amino Assert that .I trusted_file and .I test_file contain protein sequences. .TP .B --dna Assert that .I trusted_file and .I test_file contain DNA sequences. .TP .B --rna Assert that the .I trusted_file and .I test_file contain RNA sequences. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-alimap.man0000664361611702660230000001174512473612610017727 0ustar wheelerteddy.TH "esl-alimap" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps" .SH NAME .TP esl-alimap - map two alignments to each other .SH SYNOPSIS .B esl-alimap .I [options] .I msafile1 .I msafile2 .SH DESCRIPTION .I esl-alimap is a highly specialized application that determines the optimal alignment mapping of columns between two alignments of the same sequences. An alignment mapping defines for each column in alignment 1 a matching column in alignment 2. The number of residues in the aligned sequences that are in common between the two matched columns are considered 'shared' by those two columns. For example, if the nth residue of sequence i occurs in alignment 1 column x and alignment 2 column y, then only a mapping of alignment 1 and 2 that includes column x mapping to column y would correctly map and share the residue. The optimal mapping of the two alignments is the mapping which maximizes the sum of shared residues between all pairs of matching columns. The fraction of total residues that are shared is reported as the coverage in the .B esl-alimap output. Only the first alignments in .I msafile1 and .I msafile2 will be mapped to each other. If the files contain more than one alignment, all alignments after the first will be ignored. The two alignments (one from each file) must contain exactly the same sequences (if they were unaligned, they'd be identical) in precisely the same order. They must also be in Stockholm format. The output of .B esl-alimap differs depending on whether one or both of the alignments contain reference (#=GC RF) annotation. If so, the coverage for residues from nongap RF positions will be reported separately from the total coverage. .B esl-alimap uses a dynamic programming algorithm to compute the optimal mapping. The algorithm is similar to the Needleman-Wunsch-Sellers algorithm but the scores used at each step of the recursion are not residue-residue comparison scores but rather the number of residues shared between two columns. The .BI --mask-a2a " ", .BI --mask-a2rf " ", .BI --mask-rf2a " ", and .BI --mask-rf2rf " " options create 'mask' files that pertain to the optimal mapping in slightly different ways. A mask file consists of a single line, of only '0' and '1' characters. These denote which positions of the alignment from .B msafile1 map to positions of the alignment from .B msafile2 as described below for each of the four respective masking options. These masks can be used to extract only those columns of the .B msafile1 alignment that optimally map to columns of the .B msafile2 alignment using the .B esl-alimask miniapp. To extract the corresponding set of columns from .I msafile2 (that optimally map to columns of the alignment from .B msafile1), it is necessary to rerun the program with the order of the two msafiles reversed, save new masks, and use .B esl-alimask again. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options. .TP .B -q Be quiet; don't print information the optimal mapping of each column, only report coverage and potentially save masks to optional output files. .TP .BI --mask-a2a " " Save a mask of '0's and '1's to file .I . A '1' at position x means that position x of the alignment from .B msafile1 maps to an alignment position in the alignment from .B msafile2 in the optimal map. .TP .BI --mask-a2rf " " Save a mask of '0's and '1's to file .I . A '1' at position x means that position x of the alignment from .B msafile1 maps to a nongap RF position in the alignment from .B msafile2 in the optimal map. .TP .BI --mask-rf2a " " Save a mask of '0's and '1's to file .I . A '1' at position x means that nongap RF position x of the alignment from .B msafile1 maps to an alignment position in the alignment from .B msafile2 in the optimal map. .TP .BI --mask-rf2rf " " Save a mask of '0's and '1's to file .I . A '1' at position x means that nongap RF position x of the alignment from .B msafile1 maps to a nongap RF position in the alignment from .B msafile2 in the optimal map. .TP .BI --submap " " Specify that all of the columns from the alignment from .B msafile1 exist identically (contain the same residues from all sequences) in the alignment from .B msafile2. This makes the task of mapping trivial. However, not all columns of .B msafile1 must exist in .B msafile2. Save the mask to file .I . A '1' at position x of the mask means that position x of the alignment from .B msafile1 is the same as position y of .B msafile2, where y is the number of '1's that occur at positions <= x in the mask. .TP .B --amino Assert that .I trusted_file and .I test_file contain protein sequences. .TP .B --dna Assert that .I trusted_file and .I test_file contain DNA sequences. .TP .B --rna Assert that the .I trusted_file and .I test_file contain RNA sequences. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-alipid.man0000664361611702660230000000353512473612610017724 0ustar wheelerteddy.TH "esl-alipid" 1 "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual" .SH NAME .TP esl-alipid - calculate pairwise percent identities for all sequence pairs in an MSA .SH SYNOPSIS .B esl-alipid .I [options] .I msafile .SH DESCRIPTION .pp .B esl-alistat calculates the pairwise percent identity of each sequence pair in in the MSA(s) in .I msafile. For each sequence pair, it outputs a line of .I where .I is the percent identity, .I is the number of identical aligned pairs, and .I is the denominator used for the calculation: the shorter of the two (unaligned) sequence lengths. .pp If .I msafile is - (a single dash), alignment input is read from .I stdin. .pp The .I msafile may be in any of several formats. The format is autodetected by default. See the .B --informat option to assert an input format. .pp The .I msafile must contain either protein or DNA/RNA sequences. The nucleic or amino alphabet will be autodetected by default. See the .B --amino, .B --dna, or .B --rna options to assert an alphabet. .pp Only canonical residues are counted toward .I and .I . Degenerate residue codes are not counted. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .BI --informat " " Specify that the input alignment is in .I format. At present, valid formats are limited to Stockholm, Pfam, and AFA (aligned FASTA). .TP .B --amino Assert that the .I msafile contains protein sequences. .TP .B --dna Assert that the .I msafile contains DNA sequences. .TP .B --rna Assert that the .I msafile contains RNA sequences. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-seqrange.itest.pl0000775361611702660230000001062112473612611021254 0ustar wheelerteddy#! /usr/bin/perl # Integrated test of the esl-seqrange miniapp. # # Usage: ./esl-seqrange.itest.pl # Example: ./esl-seqrange.itest.pl ./esl-seqrange ./esl-sfetch foo # # EPN, Wed Mar 24 10:19:28 2010 $eslseqrange = shift; $eslsfetch = shift; $tmppfx = shift; if (! -x "$eslseqrange") { die "FAIL: didn't find esl-seqrange binary $eslseqrange"; } if (! -x "$eslsfetch") { die "FAIL: didn't find esl-sfetch binary $eslsfetch"; } open(SEQFILE, ">$tmppfx.fa") || die "FAIL: couldn't open $tmppfx.fa for writing seqfile"; print SEQFILE << "EOF"; >random0 CUGCUUCGCA >random1 GAGUACGUGG >random2 GCUACCCUAA >random3 GGUAACCUAA >random4 AUUAGGGCAU >random5 CCGACUUUAG >random6 ACCAUUUACA >random7 GACUAGAAAC >random8 AUGUAGAGUA >random9 CGCAGCCGGC >random10 CAGAACUUCG >random11 GAGGUCAGGC >random12 UCACUUGUCG >random13 ACCGGGGAUG >random14 CGAUUUUCGG >random15 CUGGUCCUGG >random16 AUGUGAAGAC >random17 AAUGAAGGUU >random18 UGCUCCGGCG >random19 CGCGACAUGG >random20 AAAGCGACCG >random21 UCCUGUAAGC >random22 CGUUUCAUGG >random23 GCAAAACGGC >random24 GUCGCAUAUU >random25 GGCUAACAUC >random26 CUUGGUCUGC >random27 CCCAGAGUGU >random28 GUGUGCGCGU >random29 ACGGCACCAA >random30 GGGCAGUGCG EOF close SEQFILE; $output = `$eslseqrange -h`; if ($? != 0) { die "FAIL: esl-seqrange failed unexpectedly"; } if ($output !~ /Usage: esl-seqrange/) { die "FAIL: help output not right"; } # index the file first! we need an index if(-e "$tmppfx.fa.ssi") { unlink "$tmppfx.fa.ssi"; } # erase the index if it exists $output = `$eslsfetch --index $tmppfx.fa 2>&1`; if ($? != 0) { die "FAIL: esl-sfetch --index failed unexpectedly"; } $output = `$eslseqrange $tmppfx.fa 1 31 2>&1`; if ($? != 0) { die "FAIL: esl-seqrange failed unexpectedly"; } if ($output !~ /1-1/) { die "FAIL: seq range calculated incorrectly"; } $output = `$eslseqrange $tmppfx.fa 1 31 2>&1`; if ($? != 0) { die "FAIL: esl-seqrange failed unexpectedly"; } if ($output !~ /1-1/) { die "FAIL: seq range calculated incorrectly"; } $output = `$eslseqrange $tmppfx.fa 17 31 2>&1`; if ($? != 0) { die "FAIL: esl-seqrange failed unexpectedly"; } if ($output !~ /17-17/) { die "FAIL: seq range calculated incorrectly"; } $output = `$eslseqrange $tmppfx.fa 1 13 2>&1`; if ($? != 0) { die "FAIL: esl-seqrange failed unexpectedly"; } if ($output !~ /1-3/) { die "FAIL: seq range calculated incorrectly"; } $output = `$eslseqrange $tmppfx.fa 1 3 2>&1`; if ($? != 0) { die "FAIL: esl-seqrange failed unexpectedly"; } if ($output !~ /1-11/) { die "FAIL: seq range calculated incorrectly"; } $output = `$eslseqrange $tmppfx.fa 2 3 2>&1`; if ($? != 0) { die "FAIL: esl-seqrange failed unexpectedly"; } if ($output !~ /12-21/) { die "FAIL: seq range calculated incorrectly"; } $output = `$eslseqrange $tmppfx.fa 3 3 2>&1`; if ($? != 0) { die "FAIL: esl-seqrange failed unexpectedly"; } if ($output !~ /22-31/) { die "FAIL: seq range calculated incorrectly"; } # test --informat $output = `$eslseqrange --informat fasta $tmppfx.fa 3 3 2>&1`; if ($? != 0) { die "FAIL: esl-seqrange failed unexpectedly"; } if ($output !~ /22-31/) { die "FAIL: seq range calculated incorrectly"; } # test cases we expect to fail $output = `$eslseqrange $tmppfx.fa 1 32 2>&1`; if ($? == 0) { die "FAIL: esl-seqrange did not fail when expected"; } $output = `$eslseqrange $tmppfx.fa 31 1 2>&1`; if ($? == 0) { die "FAIL: esl-seqrange did not fail when expected"; } $output = `$eslseqrange $tmppfx.fa -1 1 2>&1`; if ($? == 0) { die "FAIL: esl-seqrange did not fail when expected"; } $output = `$eslseqrange $tmppfx.fa 1 -1 2>&1`; if ($? == 0) { die "FAIL: esl-seqrange did not fail when expected"; } print "ok\n"; unlink "$tmppfx.fa"; unlink "$tmppfx.fa.ssi"; exit 0; hmmer-3.1b2/easel/miniapps/esl-alipid.c0000664361611702660230000000747312473612610017400 0ustar wheelerteddy/* Calculates pairwise %id for all aligned sequence pairs in MSA */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_distance.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "help; show brief info on version and usage", 1 }, { "--informat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "specify the input MSA file is in format ", 0 }, { "--outformat", eslARG_STRING, "Clustal", NULL, NULL, NULL, NULL, NULL, "write the output MSA in format ", 0 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use DNA alphabet", 0 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use RNA alphabet", 0 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use protein alphabet", 0 }, { 0,0,0,0,0,0,0,0,0,0 }, }; static char banner[] = "calculate pairwise %id for each seq pair in an MSA"; static char usage[] = "[options] "; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *msafile = esl_opt_GetArg(go, 1); ESL_ALPHABET *abc = NULL; int infmt = eslMSAFILE_UNKNOWN; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; FILE *ofp = stdout; int nali = 0; int namewidth; double pid; int nid, n; int i,j; int status; /* allow user to assert the input MSA alphabet */ if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); /* allow user to assert the input MSA format */ if (esl_opt_IsOn(go, "--informat") && (infmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--informat"))) == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid MSA file format for --informat", esl_opt_GetString(go, "--informat")); /* digital open */ if ( ( status = eslx_msafile_Open(&abc, msafile, NULL, infmt, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); while ((status = eslx_msafile_Read(afp, &msa)) == eslOK) { nali++; namewidth = esl_str_GetMaxWidth(msa->sqname, msa->nseq); for (i = 0; i < msa->nseq; i++) for (j = i+1; j < msa->nseq; j++) { esl_dst_XPairId(abc, msa->ax[i], msa->ax[j], &pid, &nid, &n); fprintf(ofp, "%-*s %-*s %6.2f %6d %6d\n", namewidth, msa->sqname[i], namewidth, msa->sqname[j], pid*100.0, nid, n); } esl_msa_Destroy(msa); } if (nali == 0 || status != eslEOF) eslx_msafile_ReadFailure(afp, status); eslx_msafile_Close(afp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl-alipid.c 766 2012-06-04 13:11:51Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/miniapps/esl-alipid.c $ *****************************************************************/ hmmer-3.1b2/easel/miniapps/esl-alimanip.itest.pl0000775361611702660230000004236512473612610021252 0ustar wheelerteddy#! /usr/bin/perl # Integrated test of the esl-alimanip miniapp. # # Usage: ./esl-alimanip.itest.pl # Example: ./esl-alimanip.itest.pl ./esl-alimanip foo # # EPN, Tue Feb 2 13:19:44 2010 $eslalimanip= shift; $tmppfx = shift; if (! -x "$eslalimanip") { die "FAIL: didn't find esl-alimanip binary $eslalimanip"; } # <[miniapps]> esl-seqstat --rna -a foo.stk #= seq1 29 #= seq2 31 #= seq3 20 open(ALIFILE, ">$tmppfx.stk") || die "FAIL: couldn't open $tmppfx.stk for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 seq1 aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg #=GR seq1 PP 5789**..**88...*9.9****88.7..776543210 seq2 ..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG.... #=GR seq2 PP ..********************************.... seq3 ..AAAA..AAAA...C...CCCCCC.C..GGGG-.... #=GR seq3 PP ..5555..4*44...3...888888.8..8899..... #=GC SS_cons ...............<...<<<<......>>>>>.... #=GC PP_cons ..789*..8877...8...****99.8..99998.... #=GC RF ..AAAA..AAAA...C...CCCCCC.c..GGGGG.... // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.stk2") || die "FAIL: couldn't open $tmppfx.stk2 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 seq1 aaAANA..AAAA...Cc.cCCCCCC.C..GGGGGgggg #=GR seq1 PP 5789**..**88...*9.9****88.7..776543210 seq2 ..AARAa.AAAAaacCcccCCCCCCcCccGGGGG.... #=GR seq2 PP ..********************************.... seq3 ..AAAA..AAAA...C...CCCCCC.C..GGGG-.... #=GR seq3 PP ..5555..4*44...3...888888.8..8899..... #=GC SS_cons ...............<...<<<<......>>>>>.... #=GC PP_cons ..789*..8877...8...****99.8..99998.... #=GC RF ..AAAA..AAAA...C...CCCCCC.c..GGGGG.... // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.post.stk") || die "FAIL: couldn't open $tmppfx.oldp.stk for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 seq1 aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg #=GR seq1 POSTX. 5789**..**88...*9.9****88.7..776543210 #=GR seq1 POST.X 3717**..**71...*2.3****34.5..239189922 seq2 ..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG.... #=GR seq2 POSTX. ..********************************.... #=GR seq2 POST.X ..********************************.... seq3 ..AAAA..AAAA...C...CCCCCC.C..GGGG-.... #=GR seq3 POSTX. ..5555..4*44...3...888888.8..8899..... #=GR seq3 POST.X ..4567..3*99...1...788882.1..0815..... #=GC SS_cons ...............<...<<<<......>>>>>.... #=GC RF ..AAAA..AAAA...C...CCCCCC.c..GGGGG.... // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.afa") || die "FAIL: couldn't open $tmppfx.afa for writing alifile"; print ALIFILE << "EOF"; >seq1 aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg >seq2 ..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG.... >seq3 ..AAAA..AAAA...C...CCCCCC.C..GGGG-.... EOF close ALIFILE; open(LISTFILE, ">$tmppfx.list") || die "FAIL: couldn't open $tmppfx.stk for writing alifile"; print LISTFILE << "EOF"; seq1 seq2 EOF close LISTFILE; open(LISTFILE, ">$tmppfx.list2") || die "FAIL: couldn't open $tmppfx.stk for writing alifile"; print LISTFILE << "EOF"; seq3 seq2 seq1 EOF close LISTFILE; open(SEQFILE, ">$tmppfx.trim.fa") || die "FAIL: couldn't open $tmppfx.trim.fa for writing alifile"; print SEQFILE << "EOF"; >seq1 ccCCCCCCCGGGGGg >seq2 CCCCcCccGG >seq3 AACCCCCCCCG EOF close SEQFILE; open(MASKFILE, ">$tmppfx.rfmask") || die "FAIL: couldn't open $tmppfx.trim.fa for writing alifile"; print MASKFILE << "EOF"; 011011110101110110101 EOF close MASKFILE; open(MASKFILE, ">$tmppfx.amask") || die "FAIL: couldn't open $tmppfx.trim.fa for writing alifile"; print MASKFILE << "EOF"; 01011011011010111011111101010010001100 EOF close MASKFILE; $output = `$eslalimanip -h`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly"; } if ($output !~ /Usage: esl-alimanip/) { die "FAIL: help output not right"; } $output = `$eslalimanip --devhelp`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly"; } if ($output !~ /Usage: esl-alimanip/) { die "FAIL: devhelp output not right"; } $output = `$eslalimanip --rna $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /\#=GR seq1 PP 5789\*\*..\*\*88...\*9.9\*\*\*\*88.7..776543210/) { die "FAIL: alignment manipulated incorrectly"; } system("$eslalimanip -o $tmppfx.o.stk --rna $tmppfx.stk > /dev/null"); if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} $output = `cat $tmppfx.o.stk`; if ($output !~ /\#=GR seq1 PP 5789\*\*..\*\*88...\*9.9\*\*\*\*88.7..776543210/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --dna $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /\#=GR seq1 PP 5789\*\*..\*\*88...\*9.9\*\*\*\*88.7..776543210/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --amino $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /\#=GR seq1 PP 5789\*\*..\*\*88...\*9.9\*\*\*\*88.7..776543210/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --informat stockholm $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /\#=GR seq1 PP 5789\*\*..\*\*88...\*9.9\*\*\*\*88.7..776543210/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --informat pfam $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /\#=GR seq1 PP 5789\*\*..\*\*88...\*9.9\*\*\*\*88.7..776543210/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --informat afa $tmppfx.afa 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /--AAAA--AAAA---C---CCCCCC-C--GGGG-----/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --outformat afa $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /AAAAAA--AAAA---CC-CCCCCCC-C--GGGGGGGGG/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --outformat psiblast $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /aaAAAA--AAAA---Cc-cCCCCCC-C--GGGGGgggg/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --outformat a2m $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /aaAAAAAAAACccCCCCCCCGGGGGgggg/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --lnfract 0.9 $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --lnfract 0.9 $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} # should remove seq3 if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; } if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --lxfract 1.02 $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} # should remove seq2 if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; } if ($output =~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --lmin 30 $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} # should remove seq1 and seq3 if ($output =~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; } if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --detrunc 1 $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} # should remove seq3 if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; } if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --xambig 0 $tmppfx.stk2 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} # should remove seq1 and seq2 if ($output =~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; } if ($output =~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --seq-k $tmppfx.list $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} # should remove seq3 if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; } if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --seq-k $tmppfx.list --informat pfam --small $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} # should remove seq3 if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; } if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --k-reorder --seq-k $tmppfx.list $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} # should remove seq3 if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; } if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --seq-r $tmppfx.list $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} # should remove seq1 and seq2 if ($output =~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; } if ($output =~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --seq-r $tmppfx.list --informat pfam --small $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} # should remove seq1 and seq2 if ($output =~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; } if ($output =~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --seq-ins 9 $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} # should keep seq1 and seq 2 if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; } if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --seq-ins 9 --seq-ni 3 $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} # should keep only seq2 if ($output =~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; } if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --seq-ins 9 --seq-xi 2 $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} # should only keep seq1 if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; } if ($output =~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; } if ($output =~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --trim $tmppfx.trim.fa $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /seq1\s+----------------C-CCCCCCC-C--GGGGGG---/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq3\s+----------AA---C---CCCCCC-C--G--------/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --minpp 0.9 $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /seq1\s+----AA--AA-----C---CCCC---------------/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq3\s+---------A----------------------------/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --reorder $tmppfx.list2 $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} # should keep all seqs if ($output !~ /seq1/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq2/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /seq3/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --mask2rf $tmppfx.rfmask $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /#=GC RF ...xx...xxxx.......x.xxx..x..x.x.x..../) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --m-keeprf --mask2rf $tmppfx.rfmask $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /#=GC RF ...AA...AAAA.......C.CCC..c..G.G.G..../) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --mask2rf $tmppfx.amask $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /#=GC RF .x.xx.xx.xx.x.xxx.xxxxxx.x.x..x...xx../) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --m-keeprf --mask2rf $tmppfx.amask $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /#=GC RF .x.AA.xx.AA.x.xCx.xCCCCC.x.x..G...xx../) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --num-all $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /#=GC COLX. 00000000011111111112222222222333333333/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /#=GC COL.X 12345678901234567890123456789012345678/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --num-rf $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output !~ /#=GC RFCOLX. ..0000..0000...0...111111.1..11122..../) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /#=GC RFCOL.X ..1234..5678...9...012345.6..78901..../) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --rm-gc RF $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output =~ /#=GC RF/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --rm-gc SS_cons $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output =~ /#=GC SS_cons/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --rm-gc PP_cons $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly";} if ($output =~ /#=GC PP_cons/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --sindi $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly"; } if ($output !~ /#=GR seq1 SS :::::::::::::::<---<<<<______>>>>>::::/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /#=GR seq3 SS :::::::::::::::::::<<<<______>>>>:::::/) { die "FAIL: alignment manipulated incorrectly"; } $output = `$eslalimanip --rna --post2pp $tmppfx.post.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alimanip failed unexpectedly"; } if ($output !~ /#=GR seq1 PP 588\*\*\*..\*\*98...\*9.9\*\*\*\*88.8..777554310/) { die "FAIL: alignment manipulated incorrectly"; } if ($output !~ /#=GR seq3 PP ..5666..4\*55...3...999998.8..899\*...../) { die "FAIL: alignment manipulated incorrectly"; } print "ok\n"; unlink "$tmppfx.stk"; unlink "$tmppfx.stk2"; unlink "$tmppfx.o.stk"; unlink "$tmppfx.post.stk"; unlink "$tmppfx.afa"; unlink "$tmppfx.list"; unlink "$tmppfx.list2"; unlink "$tmppfx.trim.fa"; unlink "$tmppfx.rfmask"; unlink "$tmppfx.amask"; exit 0; hmmer-3.1b2/easel/miniapps/esl-construct.c0000664361611702660230000007570712473612611020170 0ustar wheelerteddy/* Construct consensus secondary structures from individually annotated * secondary structures * * EPN, Mon May 11 06:49:37 2009 * SVN $Id: esl-alimanip.c 270 2008-06-19 20:45:47Z nawrockie $ */ #include "esl_config.h" #include #include #include #include #include #include #include "easel.h" #include "esl_distance.h" #include "esl_fileparser.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_msa.h" #include "esl_distance.h" #include "esl_dmatrix.h" #include "esl_vectorops.h" #include "esl_stack.h" #include "esl_tree.h" #include "esl_wuss.h" #define CONSOPTS "-x,--ffreq,--fmin,-r,-c,--indi" /* exclusive options for defining a new consensus structure */ static char banner[] = "describe or create a consensus secondary structure"; static char usage[] = "[options] \n\ must contain RNA or DNA sequences and be in Stockholm format."; static int get_gaps_per_column(ESL_MSA *msa, int **ret_ngaps); static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "help; show brief info on version and usage", 1}, { "-a", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, CONSOPTS, "print info on all conflicting bps in individual structures", 1}, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL,NULL, "be verbose", 1 }, /* options for defining new consensus structures */ { "-x", eslARG_NONE, NULL, NULL, NULL, NULL, "-o", CONSOPTS, "set SS_cons as max set of non-conflicting bps from indi SSs", 2 }, { "-r", eslARG_NONE, NULL, NULL, NULL, NULL, "-o", CONSOPTS, "remove SS_cons basepairs that conflicts with > 0 indi SS", 2 }, { "-c", eslARG_NONE, NULL, NULL, NULL, NULL, "-o", CONSOPTS, "set SS_cons as indi SS with max bps consistent with SS_cons", 2 }, { "--rfc", eslARG_NONE, NULL, NULL, NULL, NULL, "-c", NULL, "with -c, set RF annotation as seq SS_cons structure comes from", 2}, { "--indi", eslARG_STRING, NULL, NULL, NULL, NULL, "-o", CONSOPTS, "define SS_cons as individual SS for sequence ", 2 }, { "--rfindi", eslARG_NONE, NULL, NULL, NULL, NULL, "--indi",NULL, "with --indi , define RF annotation as ", 2 }, { "--ffreq", eslARG_REAL, NULL, NULL,"0.<=x<=1", NULL,"-o", CONSOPTS, "aln cols i:j become SS_cons bps if paired in > indi SS", 2}, { "--fmin", eslARG_NONE, NULL, NULL, NULL, NULL, "-o", CONSOPTS, "same as --ffreq but find min that gives consistent SS_cons", 2}, { "-o", eslARG_OUTFILE,NULL, NULL, NULL, NULL, NULL, "-a", "output a new alignment to file ", 2 }, { "--pfam", eslARG_NONE, FALSE, NULL, NULL, NULL, "-o", NULL, "output alignment in Pfam (non-interleaved, 1 line/seq) format", 2 }, /* options for listing sequences based on structural properties */ { "-l", eslARG_OUTFILE,NULL, NULL, NULL, NULL, NULL, NULL, "list seqs w/> 0 indi bp that conflicts w/a SS_cons bp to file ", 3}, { "--lmax", eslARG_INT, "0", NULL, "n>=0", NULL, NULL, NULL, "with -l, change maximum allowed conflicts of 0 to ", 3}, /* options for specifying alphabet */ { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--rna", " contain DNA alignments", 4 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--dna", " contain RNA alignments", 4 }, { 0,0,0,0,0,0,0,0,0,0 }, }; int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* application configuration */ ESL_ALPHABET *abc = NULL; /* biological alphabet */ char *alifile = NULL; /* alignment file name */ int fmt; /* format code for alifiles */ ESLX_MSAFILE *afp = NULL; /* open alignment file */ ESL_MSA *msa = NULL; /* multiple sequence alignment */ int status; /* easel return code */ int do_info = TRUE; /* TRUE if -i */ int do_max = FALSE; /* TRUE if -x */ int do_ffreq = FALSE; /* TRUE if --ffreq */ int do_fmin = FALSE; /* TRUE if --fmin */ float fthresh = 0.; /* from -f */ int do_remove_bps = FALSE; /* TRUE if -r */ int do_consistent = FALSE; /* TRUE if -c */ int do_indi2cons = FALSE; /* TRUE if --indi */ char *indi2cons; int have_cons; /* TRUE if first alignment has consensus sequence */ int do_newcons = FALSE; /* TRUE if we're creating a new consensus structure * and outputing a new alignment (if -x -f -c or --indi) */ int do_a = FALSE; /* TRUE if -a */ char *indi; /* for from --indi */ int nindi_read; /* number of individual sequence SS lines we've read for current alignment */ int a; /* counter over seqs */ int i, i2; /* counter over residues */ int j, j2; /* counter over residues */ int nali; /* counter over alignments */ int **bp = NULL; /* bp[i][j] is number of individual bps exist between aln cols i and j */ int *cur_ct = NULL; /* ct array of basepairs for current sequence */ int *cons_ct = NULL; /* ct array of basepairs for SS_cons being created */ int *xcons_ct = NULL; /* ct array of basepairs for existing SS_cons */ int *ngaps = NULL; /* number of gaps in each alignment position */ FILE *ofp; /* output file (default is stdout) */ int be_verbose = FALSE; /* TRUE to print extra info */ int seqthresh; /* sequence number threshold for defining a bp as consensus (int) ((fthresh * nseq) + 0.5)*/ char *sscons = NULL; /* the new SS_cons line */ FILE *lfp = NULL; /* file to list sequences with conflicting bps to */ int nlist = 0; /* number of sequences listed to list file */ int *nconflictsA; /* number of conflicting bps in seq a's individual structure annotation */ int nconflicts_total = 0; /* total number of conflicts */ int nconflicts_list = 0; /* total number of conflicts in sequences listed to file from -l */ int noverlaps_total = 0; /* total number of overlaps */ int nconsistent_total = 0; /* total number of consistent bps */ int nbps_total = 0; /* total number of bps */ int *nconsistentA; /* number of consistent bps in seq a's individual structure annotation */ int *noverlapsA; /* number of bps in seq a's indi structure that overlap with consensus structure */ int *nbpsA; /* number of bps in seq a's indi structure that overlap with consensus structure */ int ncons_bps = 0; /* number of bps in consensus structure */ int max_noverlaps_aidx; int max_nconsistent_aidx; int max_nbps_aidx; int *removebp; /* removebp[i] is TRUE remove consensus bp [i]:xcons_ct[i] */ int *has_conflict; int *nmates_l2r; /* half matrix, nmate_l2r[i] = , i < nmate_l2r[i], there are different right mates j for i */ int *nmates_r2l; /* half matrix, nmate_r2l[j] = , j < nmate_r2l[j], there are different left mates i for j */ int lmax; /* with -l, maximum number of conflicts to allow */ int namewidth = 18; /* length of 'SS_cons(consensus)' */ char *namedashes = NULL; /* to store underline for seq name */ /* --fmin related variables */ int nbps = 0; int prev_nbps = -1; float fmin; int inconsistent_flag; int pknot_flag; int k,l; /*********************************************** * Parse command line ***********************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "-h") ) { esl_banner(stdout, argv[0], banner); esl_usage (stdout, argv[0], usage); puts("\nwhere basic options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); puts("\noptions for defining a new consensus structure (all of these require -o):"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); puts("\noptions for listing sequences based on structure:"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != 1) { printf("Incorrect number of command line arguments.\n"); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } alifile = esl_opt_GetArg(go, 1); fmt = eslMSAFILE_STOCKHOLM; /*********************************************** * Open the MSA file; determine alphabet; set for digital input ***********************************************/ if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); if ( (status = eslx_msafile_Open(&abc, alifile, NULL, fmt, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); /* open output file */ if (esl_opt_GetString(go, "-o") != NULL) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) esl_fatal("Failed to open -o output file %s\n", esl_opt_GetString(go, "-o")); } else ofp = NULL; if (esl_opt_GetString(go, "-l") != NULL) { if ((lfp = fopen(esl_opt_GetString(go, "-l"), "w")) == NULL) esl_fatal("Failed to open -l output file %s\n", esl_opt_GetString(go, "-l")); } /* determine if we're creating a structure */ do_max = esl_opt_GetBoolean(go, "-x"); if(!(esl_opt_IsDefault(go, "--ffreq"))) { do_ffreq = TRUE; fthresh = esl_opt_GetReal(go, "--ffreq"); } if(!(esl_opt_IsDefault(go, "--fmin"))) { do_fmin = TRUE; } do_remove_bps = esl_opt_GetBoolean(go, "-r"); do_consistent = esl_opt_GetBoolean(go, "-c"); if(!(esl_opt_IsDefault(go, "--indi"))) { do_indi2cons = TRUE; indi2cons = esl_opt_GetString(go, "--indi"); } if(do_max || do_ffreq || do_fmin || do_remove_bps || do_consistent || do_indi2cons) { do_newcons = TRUE; } do_a = esl_opt_GetBoolean(go, "-a"); if(do_a || do_max || do_ffreq || do_fmin || do_remove_bps || do_consistent || do_indi2cons) { do_info = FALSE; } /*********************************************** * Read MSAs one at a time. ***********************************************/ nali = 0; have_cons = FALSE; lmax = esl_opt_GetInteger(go, "--lmax"); if(esl_opt_GetBoolean(go, "-v")) be_verbose = TRUE; while ((status = eslx_msafile_Read(afp, &msa)) != eslEOF) { if (status != eslOK) eslx_msafile_ReadFailure(afp, status); nali++; /* determine max length name */ namewidth = 18; /* length of 'SS_cons(consensus)' */ for(i = 0; i < msa->nseq; i++) namewidth = ESL_MAX(namewidth, strlen(msa->sqname[i])); if(namedashes != NULL) { free(namedashes); } ESL_ALLOC(namedashes, sizeof(char) * namewidth+1); namedashes[namewidth] = '\0'; for(i = 0; i < namewidth; i++) namedashes[i] = '-'; ESL_ALLOC(sscons, sizeof(char) * (msa->alen+1)); ESL_ALLOC(cur_ct, sizeof(int) * (msa->alen+1)); ESL_ALLOC(cons_ct, sizeof(int) * (msa->alen+1)); ESL_ALLOC(xcons_ct, sizeof(int) * (msa->alen+1)); ESL_ALLOC(bp, sizeof(int *) * (msa->alen+1)); ESL_ALLOC(removebp, sizeof(int) * (msa->alen+1)); ESL_ALLOC(has_conflict, sizeof(int) * (msa->alen+1)); ESL_ALLOC(nmates_l2r, sizeof(int) * (msa->alen+1)); ESL_ALLOC(nmates_r2l, sizeof(int) * (msa->alen+1)); esl_vec_ISet(cur_ct, (msa->alen+1), 0); esl_vec_ISet(cons_ct, (msa->alen+1), 0); esl_vec_ISet(xcons_ct, (msa->alen+1), 0); esl_vec_ISet(removebp, (msa->alen+1), FALSE); esl_vec_ISet(has_conflict, (msa->alen+1), FALSE); esl_vec_ISet(nmates_l2r, (msa->alen+1), 0); esl_vec_ISet(nmates_r2l, (msa->alen+1), 0); ESL_ALLOC(nconflictsA, sizeof(int) * msa->nseq); ESL_ALLOC(noverlapsA, sizeof(int) * msa->nseq); ESL_ALLOC(nconsistentA, sizeof(int) * msa->nseq); ESL_ALLOC(nbpsA, sizeof(int) * msa->nseq); esl_vec_ISet(nconflictsA, msa->nseq, 0); esl_vec_ISet(noverlapsA, msa->nseq, 0); esl_vec_ISet(nconsistentA, msa->nseq, 0); esl_vec_ISet(nbpsA, msa->nseq, 0); max_noverlaps_aidx = max_nconsistent_aidx = max_nbps_aidx = 0; nconsistent_total = nbps_total = noverlaps_total = nconflicts_total = nconflicts_list = 0; for(i = 1; i <= msa->alen; i++) { ESL_ALLOC(bp[i], sizeof(int) * (msa->alen+1)); esl_vec_ISet(bp[i], (msa->alen+1), 0); } /* make sure we have ss_cons and indi ss if we need it */ if(msa->ss_cons == NULL && do_remove_bps) esl_fatal("-r requires all alignments have SS_cons annotation, alignment %d does not.", nali); if(msa->ss == NULL && do_max) esl_fatal("-x requires all alignments have individual SS annotation, alignment %d does not.", nali); if(msa->ss == NULL && do_consistent) esl_fatal("-c requires all alignments have individual SS annotation, alignment %d does not.", nali); if(msa->ss == NULL && do_indi2cons) esl_fatal("--indi requires all alignments have individual SS annotation, alignment %d does not.", nali); if(msa->ss == NULL && do_ffreq) esl_fatal("--ffreq requires all alignments have individual SS annotation, alignment %d does not.", nali); if(msa->ss == NULL && do_fmin) esl_fatal("--fmin requires all alignments have individual SS annotation, alignment %d does not.", nali); if(msa->ss_cons != NULL) { if((status = esl_wuss2ct(msa->ss_cons, msa->alen, xcons_ct)) != eslOK) { esl_fatal("Existing SS_cons for alignment %d is invalid.", nali); } ncons_bps = 0; for(i = 1; i <= msa->alen; i++) if(xcons_ct[i] != 0 && i < xcons_ct[i]) ncons_bps++; if(nali > 1 && !have_cons) esl_fatal("the first aln has SS_cons but aln %d lacks it, if one has it, they all must.", nali); if(nali == 1) have_cons = TRUE; } else if (lfp != NULL) { esl_fatal("the -l option requires existing SS_cons annotation, aln %d lacks it.", nali); } else if (do_remove_bps) { esl_fatal("the -r option requires existing SS_cons annotation, aln %d lacks it.", nali); } else if (do_consistent) { esl_fatal("the -c option requires existing SS_cons annotation, aln %d lacks it.", nali); } else { if(nali > 1 && have_cons) esl_fatal("the first aln does not have SS_cons but aln %d does, if one has it, they all must.", nali); } if(do_info) { printf("# Per-sequence basepair information:\n"); printf("# Alignment file: %s\n", alifile); printf("# Alignment idx: %d\n", nali); if(msa->name != NULL) { printf("# Alignment name: %s\n", msa->name); } if(have_cons) { printf("#\n"); printf("# indibp: number of basepairs in the individual sequence SS annotation\n"); printf("# ovrlap: number of indibp basepairs that also exist as consensus basepairs\n"); printf("# cnsist: number of indibp basepairs that do not conflict with any consensus basepairs\n"); printf("# cnflct: number of indibp basepairs that conflict with >= 1 consensus basepairs\n"); printf("#\n"); printf("# A conflict exists between two basepairs in different structures, one between columns i and j\n"); printf("# and the other between columns k and l, if (i == k and j != l) or (j == l and i != k).\n"); printf("#\n"); printf("# %-*s %6s %6s %6s %6s\n", namewidth, "seqname", "indibp", "ovrlap", "cnsist", "cnflct"); printf("# %-*s %6s %6s %6s %6s\n", namewidth, namedashes, "------", "------", "-----", "------"); } else { printf("# %-*s %6s\n", namewidth, "seqname", "nbp"); printf("# %-*s %6s\n", namewidth, namedashes, "------"); } } nindi_read = 0; for (a = 0; a < msa->nseq; a++) { if(msa->ss != NULL && msa->ss[a] != NULL) { if((status = esl_wuss2ct(msa->ss[a], msa->alen, cur_ct)) != eslOK) { esl_fatal("SS annotation for sequence %d, aln %d is invalid.\n", (a+1), nali); } nindi_read++; for(i = 1; i <= msa->alen; i++) { if(i < cur_ct[i]) { bp[i][cur_ct[i]]++; if(bp[i][cur_ct[i]] == 1) { nmates_l2r[i]++; nmates_r2l[cur_ct[i]]++; } } } for(i = 1; i <= msa->alen; i++) { if(cur_ct[i] != 0 && i < cur_ct[i]) { if(xcons_ct[i] == cur_ct[i]) noverlapsA[a]++; if((xcons_ct[i] != 0) && (xcons_ct[i] != cur_ct[i])) { if(be_verbose) { printf("ali: %2d seq %3d (%s) bp %4d:%4d conflicts with consensus bp %4d:%4d\n", nali, a, msa->sqname[a], i, cur_ct[i], i, xcons_ct[i]); } nconflictsA[a]++; /* indi bp i:cur_ct[i] conflicts with i:xcons_ct[i] */ removebp[i] = TRUE; removebp[xcons_ct[i]] = TRUE; } else if((xcons_ct[cur_ct[i]] != 0) && (xcons_ct[cur_ct[i]] != i) && (cur_ct[xcons_ct[cur_ct[i]]] == 0)) { if(be_verbose) { printf("ali: %2d seq %3d (%s) bp %4d:%4d conflicts with consensus bp %4d:%4d\n", nali, a, msa->sqname[a], xcons_ct[i], cur_ct[xcons_ct[i]], xcons_ct[cur_ct[i]], cur_ct[i]); } nconflictsA[a]++; /* indi bp i:cur_ct[i] conflicts with xcons_ct[cur_ct[i]]:cur_ct[i] */ removebp[cur_ct[i]] = TRUE; removebp[xcons_ct[cur_ct[i]]] = TRUE; } else nconsistentA[a]++; } } if(nconflictsA[a] > lmax) { if(lfp != NULL) fprintf(lfp, "%s\n", msa->sqname[a]); nconflicts_list += nconflictsA[a]; nlist++; } nbpsA[a] = nconflictsA[a] + nconsistentA[a]; nconflicts_total += nconflictsA[a]; nconsistent_total += nconsistentA[a]; noverlaps_total += noverlapsA[a]; nbps_total += nbpsA[a]; if(do_info && have_cons) printf(" %-*s %6d %6d %6d %6d\n", namewidth, msa->sqname[a], nbpsA[a], noverlapsA[a], nconsistentA[a], nconflictsA[a]); if(do_info && !have_cons) printf(" %-*s %6d\n", namewidth, msa->sqname[a], nbpsA[a]); if(nbpsA[a] > nbpsA[max_nbps_aidx]) max_nbps_aidx = a; if((noverlapsA[a] > noverlapsA[max_noverlaps_aidx]) || ((noverlapsA[a] == noverlapsA[max_noverlaps_aidx]) && (nbpsA[a] > nbpsA[max_noverlaps_aidx]))) max_noverlaps_aidx = a; if((nconsistentA[a] > nconsistentA[max_nconsistent_aidx]) || ((nconsistentA[a] == nconsistentA[max_nconsistent_aidx]) && (nbpsA[a] > nbpsA[max_nconsistent_aidx]))) max_nconsistent_aidx = a; } else if(do_newcons || esl_opt_GetBoolean(go, "-a")) { esl_fatal("No SS annotation for sequence %d, aln %d.\n", (a+1), nali); } } if(do_info && have_cons) { if(nindi_read > 0) printf("\n"); printf(" %-*s %6d %6d %6d %6d\n", namewidth, "SS_cons(consensus)", ncons_bps, ncons_bps, ncons_bps, 0); if(nindi_read > 0) { printf("\n# %6d/%6d (%.3f) overlap\n", noverlaps_total, nbps_total, nbps_total > 0 ? (float) noverlaps_total / (float) nbps_total : 0.); printf("# %6d/%6d (%.3f) consistent\n", nconsistent_total, nbps_total, nbps_total > 0 ? (float) nconsistent_total / (float) nbps_total: 0.); printf("# %6d/%6d (%.3f) conflict\n", nconflicts_total, nbps_total, nbps_total > 0 ? (float) nconflicts_total / (float) nbps_total: 0.); } else { printf("# No sequences in the alignment have GR SS annotation.\n"); } } if(lfp != NULL) { printf("# %d/%d sequences with %.3f individual bps on avg that conflict with SS_cons written to %s\n", nlist, msa->nseq, (float) nconflicts_list / (float) nlist, esl_opt_GetString(go, "-l")); } /* determine number of gaps per alignment column */ if((status = get_gaps_per_column(msa, &ngaps)) != eslOK) goto ERROR; /* -x: determine max bp structure OR * -a: list all conflicts in individual structures */ if(do_max || do_a) { for(i = 1; i <= msa->alen; i++) { if(nmates_l2r[i] > 1) {/* list the conflicts */ has_conflict[i] = TRUE; for(j = 1; j <= msa->alen; j++) { if(bp[i][j] > 0) { if(do_a) printf("More than 1 right mates for left mate %4d %4d:%4d bp exists in %4d/%4d seqs (%.3f)\n", i, i, j, bp[i][j], msa->nseq - ngaps[i], (float) bp[i][j] / (float) (msa->nseq - ngaps[i])); has_conflict[j] = TRUE; } } } } for(i = 1; i <= msa->alen; i++) { if(nmates_r2l[i] > 1) {/* list the conflicts */ has_conflict[i] = TRUE; for(j = 1; j <= msa->alen; j++) { if(bp[j][i] > 0) { if(do_a) printf("More than 1 left mates for right mate %4d %4d:%4d bp exists in %4d/%4d seqs (%.3f)\n", i, j, i, bp[j][i], msa->nseq - ngaps[i], (float) bp[j][i] / (float) (msa->nseq - ngaps[i])); has_conflict[j] = TRUE; } } } } for(i = 1; i <= msa->alen; i++) { /*printf("conflict[%4d]: %d\n", i, has_conflict[i]);*/ if(nmates_l2r[i] == 1 && (!(has_conflict[i]))) { j = i+1; while(bp[i][j] == 0) j++; cons_ct[i] = j; cons_ct[j] = i; } } /* remove pseudoknotted bps greedily */ for(i = 1; i <= msa->alen; i++) { j = cons_ct[i]; if(j != 0 && i < j) { for(i2 = i+1; i2 <= msa->alen; i2++) { j2 = cons_ct[i2]; if(j2 != 0 && i2 < j2) { if((i2 < j) && (j < j2)) { /*printf("KNOT %4d:%4d (%4d) %4d:%4d (%4d)\n", i, j, bp[i][j], i2, j2, bp[i2][j2]);*/ /* note: remove both if they have equal number of sequences */ if(bp[i][j] <= bp[i2][j2]) { /*printf("rm %4d:%4d\n", i, j);*/ cons_ct[cons_ct[i]] = 0; cons_ct[i] = 0; } if(bp[i][j] >= bp[i2][j2]) { /*printf("rm %4d:%4d\n", i2, j2);*/ cons_ct[cons_ct[i2]] = 0; cons_ct[i2] = 0; } } } } } } } /***************************************/ /*PARANOID, second check for knots for(i = 1; i <= msa->alen; i++) { j = cons_ct[i]; if(j != 0 && i < j) { printf("BP: %4d:%4d\n", i, j); for(i2 = 1; i2 <= msa->alen; i2++) { j2 = cons_ct[i2]; if(j2 != 0 && i2 < j2) { if((i2 < j) && (j < j2)) { if((i < i2)) { printf("KNOT %4d:%4d (%4d) %4d:%4d (%4d)\n", i, j, bp[i][j], i2, j2, bp[i2][j2]); } } } } } } ******************************************/ /***************************************/ /*PARANOID, check cons_ct for consistency for(i = 1; i <= msa->alen; i++) { if(cons_ct[i] != 0) { if(cons_ct[cons_ct[i]] != i) { printf("ERROR: i: %4d cons_ct[i]: %4d cons_ct[cons_ct[i]]: %4d\n", i, cons_ct[i], cons_ct[cons_ct[i]]); } } } */ /*PARANOID, write out SS_cons for(i = 1; i <= msa->alen; i++) { if(i < cons_ct[i]) printf("<"); else if(cons_ct[i] != 0) { printf(">"); } else printf("."); } printf("\n"); */ /***************************************/ /* textize alignment */ if((status = esl_msa_Textize(msa)) != eslOK) esl_fatal("ERROR textizing alignment %d\n", nali); /* --fmin */ if(do_fmin) { /* define ss_cons */ nbps = 0; prev_nbps = -1; fthresh = 0.99; inconsistent_flag = pknot_flag = FALSE; printf("# Defining consensus structure:\n"); printf("# indi SS basepair aln columns i:j (from at least 1 indi SS) will become consensus basepair\n"); printf("# if > individual SS contain i:j as a pair\n"); printf("# We'll search for minimal that gives a consistent consensus structure.\n"); printf("# A consistent structure has each position involved in 0 or 1 basepairs.\n"); printf("#\n"); printf("# Alignment file: %s\n", alifile); printf("# Alignment idx: %d\n", nali); printf("# Number of seqs: %d\n", msa->nseq); printf("#\n"); printf("# %5s %23s %6s\n", "", "nseq-required-with-bp", "numbps"); printf("# %5s %23s %6s\n", "-----", "-----------------------", "------"); while(fthresh >= 0.00 && (inconsistent_flag == FALSE) && (pknot_flag == FALSE)) { nbps = 0; seqthresh = (int) (fthresh * msa->nseq); /*printf("fthresh: %f seqthresh: %d nseq: %d\n", fthresh, seqthresh, msa->nseq);*/ esl_vec_ISet(cons_ct, msa->alen+1, 0); for(i = 1; i <= msa->alen; i++) { for(j = i+1; j <= msa->alen; j++) { if(bp[i][j] > seqthresh) { if(cons_ct[i] != 0 || cons_ct[j] != 0) { inconsistent_flag = TRUE; } /* check for pseudoknots */ for(k = i+1; k < j; k++) { l = cons_ct[k]; if((k < l) && (l > j)) { pknot_flag = TRUE; } if((k > l) && (l != 0) && (l < i)) { pknot_flag = TRUE; } } cons_ct[i] = j; cons_ct[j] = i; nbps++; } } } if(inconsistent_flag) printf(" %.3f %23d %s\n", fthresh, seqthresh+1, "inconsistent"); else if(pknot_flag) printf(" %.3f %23d %s\n", fthresh, seqthresh+1, "pseudoknotted"); else { if(nbps != prev_nbps) { printf(" %.3f %23d %6d\n", fthresh, seqthresh+1, nbps); } fmin = fthresh; } fthresh -= 0.01; prev_nbps = nbps; } fthresh = fmin; esl_vec_ISet(cons_ct, msa->alen+1, 0); } /* --ffreq: determine structure by defining consensus bps that occur in fraction of indi structures */ if(do_ffreq || do_fmin) { if(do_fmin) { printf("#\n# determined to be %.3f\n", fthresh); } if(do_ffreq) { printf("# Defining consensus structure:\n"); printf("# indi SS basepair aln columns i:j (from at least 1 indi SS) will become consensus basepair\n"); printf("# if > %f individual SS contain i:j as a pair\n", fthresh); } esl_vec_ISet(cons_ct, msa->alen+1, 0); /* define ss_cons */ seqthresh = (int) (fthresh * msa->nseq); /*printf("fthresh: %f seqthresh: %d nseq: %d\n", fthresh, seqthresh, msa->nseq);*/ for(i = 1; i <= msa->alen; i++) { for(j = i+1; j <= msa->alen; j++) { if(bp[i][j] > seqthresh) { if(cons_ct[i] != 0) { esl_fatal("ERROR, two base pairs including position %d satisfy threshold (%d:%d and %d:%d)!\n", i, i, cons_ct[i], i, j); } if(cons_ct[j] != 0) { esl_fatal("ERROR, two base pairs including position %d satisfy threshold (%d:%d and %d:%d)!\n", j, j, cons_ct[j], i, j); } cons_ct[i] = j; cons_ct[j] = i; } } } } /* -r: redefine consensus struct by removing any bps that conflict with individual structures */ if(do_remove_bps) { for(i = 1; i <= msa->alen; i++) { if(!(removebp[i])) { cons_ct[i] = xcons_ct[i]; cons_ct[cons_ct[i]] = i; } else { printf("# Removing consensus bp: %d:%d\n", i, xcons_ct[i]); cons_ct[xcons_ct[i]] = 0; cons_ct[i] = 0; } } } /* -c: define consensus structure as indi sequence with highest number of consistent bps with structure OR */ /* --indi: define consensus structure as indi sequence from --indi */ if(do_consistent || do_indi2cons) { if(do_indi2cons) { indi = esl_opt_GetString(go, "--indi"); for(a = 0; a < msa->nseq; a++) { if(strcmp(indi, msa->sqname[a]) == 0) break; } if(a == msa->nseq) esl_fatal("ERROR, could not find a sequence named %s in the alignment.\n", indi); } else { /* do_consistent */ a = max_nconsistent_aidx; } if(msa->ss == NULL || msa->ss[a] == NULL) esl_fatal("ERROR, no individual SS annotation for %s in the alignment.\n", msa->sqname[a]); if((status = esl_wuss2ct(msa->ss[a], msa->alen, cons_ct)) != eslOK) { esl_fatal("Second pass... SS annotation for sequence %d, aln %d is invalid.\n", (a), nali); } printf("# Defined new SS_cons as SS annotation for %s (%d basepairs)\n", msa->sqname[a], nbpsA[a]); if(esl_opt_GetBoolean(go, "--rfc") || esl_opt_GetBoolean(go, "--rfindi")) { if(msa->rf != NULL) { free(msa->rf); msa->rf = NULL; } if((status = esl_strcat(&(msa->rf), -1, msa->aseq[a], msa->alen)) != eslOK) goto ERROR; printf("# Defined new RF as %s sequence\n", msa->sqname[a]); } } /* write out alignment with new SS_cons */ if(do_newcons) { if((status = esl_ct2wuss(cons_ct, msa->alen, sscons)) != eslOK) goto ERROR; if(msa->ss_cons != NULL) { free(msa->ss_cons); msa->ss_cons = NULL; } if((status = esl_strcat(&(msa->ss_cons), -1, sscons, msa->alen)) != eslOK) goto ERROR; status = eslx_msafile_Write(ofp, msa, (esl_opt_GetBoolean(go, "--pfam") ? eslMSAFILE_PFAM : eslMSAFILE_STOCKHOLM)); if (status == eslEMEM) esl_fatal("Memory error when outputting alignment\n"); else if (status != eslOK) esl_fatal("Writing alignment file failed with error %d\n", status); } free(sscons); free(cur_ct); free(cons_ct); free(xcons_ct); for(i = 1; i <= msa->alen; i++) free(bp[i]); free(bp); esl_msa_Destroy(msa); } if (nali == 0) esl_fatal("No alignments found in file %s\n", alifile); /* Cleanup, normal return */ if(lfp != NULL) fclose(lfp); if(ofp != NULL) { printf("# Alignment(s) saved to file %s\n", esl_opt_GetString(go, "-o")); fclose(ofp); } eslx_msafile_Close(afp); esl_getopts_Destroy(go); return 0; ERROR: if(afp) eslx_msafile_Close(afp); if(go) esl_getopts_Destroy(go); if(msa) esl_msa_Destroy(msa); if(lfp) fclose(lfp); if(ofp) fclose(ofp); esl_fatal("ERROR\n"); return 1; } /* get_gaps_per_column * * Given an MSA, determine the number of gaps per * column, and return a newly allocated array with this * into in *ret_ngaps. */ static int get_gaps_per_column(ESL_MSA *msa, int **ret_ngaps) { int status; int i, apos; int *ngaps = NULL; /* contract check */ if(! (msa->flags & eslMSA_DIGITAL)) { status = eslEINVAL; goto ERROR; } ESL_ALLOC(ngaps, sizeof(int) * (msa->alen+1)); esl_vec_ISet(ngaps, msa->alen+1, 0); for(i = 0; i < msa->nseq; i++) { for(apos = 1; apos <= msa->alen; apos++) ngaps[apos] += esl_abc_XIsGap(msa->abc, msa->ax[i][apos]); } *ret_ngaps = ngaps; return eslOK; ERROR: if(ngaps != NULL) free(ngaps); return status; } hmmer-3.1b2/easel/miniapps/esl-seqstat.man0000664361611702660230000000457512473612611020154 0ustar wheelerteddy.TH "esl-seqstat" 1 "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual" .SH NAME .TP esl-seqstat - summarize contents of a sequence file .SH SYNOPSIS .B esl-seqstat .I [options] .I seqfile .SH DESCRIPTION .pp .B esl-seqstat summarizes the contents of the .I seqfile. It prints the format, alphabet type, number of sequences, total number of residues, and the mean, smallest, and largest sequence length. .pp If .I seqfile is - (a single dash), sequence input is read from .I stdin. .pp The sequence file may be in any of several different common unaligned sequence formats including FASTA, GenBank, EMBL, UniProt, or DDBJ. It may also be an alignment file, in Stockholm format for example. By default the file format is autodetected. The .I --informat option allows you to specify the format and override autodetection. This option may be useful for making .B esl-seqstat more robust, because format autodetection may fail on unusual files. .pp The sequences can be of protein or DNA/RNA sequences. All sequences in the same .I seqfile must be either protein or DNA/RNA. The alphabet will be autodetected unless one of the options .I --amino, .I --dna, or .I --rna are given. These options may be useful in automated pipelines to make .B esl-alistat more robust; alphabet autodetection is not infallible. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .B -a Additionally show a summary statistic line showing the name, length, and description of each individual sequence. Each of these lines is prefixed by an = character, in order to allow these lines to be easily grepped out of the output. .TP .B -c Additionally print the residue composition of the sequence file. .SH EXPERT OPTIONS .TP .BI --informat " " Specify that the sequence file is in format .I , where .I may be FASTA, GenBank, EMBL, UniProt, DDBJ, or Stockholm. This string is case-insensitive ("genbank" or "GenBank" both work, for example). .TP .B --amino Assert that the .I seqfile contains protein sequences. .TP .B --dna Assert that the .I seqfile contains DNA sequences. .TP .B --rna Assert that the .I seqfile contains RNA sequences. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-alimask.itest.pl0000775361611702660230000005341112473612610021073 0ustar wheelerteddy#! /usr/bin/perl # Integrated test of esl-alimask miniapp. # # Usage: ./esl-alimask.itest.pl # Example: ./esl-alimask.itest.pl ./esl-alimask foo # # EPN, Wed Nov 25 11:23:55 2009 $eslalimask = shift; $tmppfx = shift; if (! -x "$eslalimask") { die "FAIL: didn't find esl-alimask binary $eslalimask"; } open(ALIFILE, ">$tmppfx.stk") || die "FAIL: couldn't open $tmppfx.stk for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 seq1 aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg #=GR seq1 PP 5789**..**88...*9.9****88.7..776543210 seq2 ..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG.... #=GR seq2 PP ..********************************.... seq3 ..AAAA..AAAA...C...CCCCCC.C..GGGG-.... #=GR seq3 PP ..5555..4*44...3...888888.8..8899..... #=GC SS_cons ...............<...<<<<......>>>>>.... #=GC PP_cons ..789*..8877...8...****99.8..99998.... #=GC RF ..AAAA..AAAA...C...CCCCCC.c..GGGGG.... // EOF close ALIFILE; open(NORFALIFILE, ">$tmppfx.norf.stk") || die "FAIL: couldn't open $tmppfx.stk for writing no RF alifile"; print NORFALIFILE << "EOF"; # STOCKHOLM 1.0 seq1 aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg #=GR seq1 PP 5789**..**88...*9.9****88.7..776543210 seq2 ..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG.... #=GR seq2 PP ..********************************.... seq3 ..AAAA..AAAA...C...CCCCCC.C..GGGG-.... #=GR seq3 PP ..5555..4*44...3...888888.8..8899..... // EOF close NORFALIFILE; open(FULLMASKFILE, ">$tmppfx.fullmask") || die "FAIL: couldn't open $tmppfx.2 for writing full maskfile"; print FULLMASKFILE << "EOF"; #this is a full aln length mask file 1010111011 1110101101 #in the middle 1101101111 01101010 EOF close FULLMASKFILE; open(RFMASKFILE, ">$tmppfx.rfmask") || die "FAIL: couldn't open $tmppfx.rfmask for writing RF maskfile"; print RFMASKFILE << "EOF"; #this is an RF length mask file 001110101110110111101 EOF close RFMASKFILE; # Note: Not nearly all possible option combinations are tried, but each option is tested # in at least one context, usually what I think to be the most common context. # # We do 4 runs of all tests, each pairwise combination of with and without RF annotation # in alifile and with and without --small. $afileA[0] = "$tmppfx.stk"; $afileA[1] = "$tmppfx.stk"; $afileA[2] = "$tmppfx.norf.stk"; $afileA[3] = "$tmppfx.norf.stk"; $smallA[0] = ""; $smallA[1] = "--small"; $smallA[2] = ""; $smallA[3] = "--small"; $have_rfA[0] = 1; $have_rfA[1] = 1; $have_rfA[2] = 0; $have_rfA[3] = 0; $output = `$eslalimask -h`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly"; } if ($output !~ /Usage: esl-alimask/) { die "FAIL: help output not right"; } for($pass = 0; $pass < 4; $pass++) { $pass2write = $pass+1; $output = `$eslalimask $smallA[$pass] --rna $afileA[$pass] $tmppfx.fullmask 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /aAAA\.AAAA\.\.c\.CCCCCC\.\.GGGgg/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\.555\.4\*44\.\.\.\.888888\.\.899\.\./) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($have_rfA[$pass]) { if ($output !~ /:::::::::::::<<_______>>::/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } if($have_rfA[$pass]) { $output = `$eslalimask $smallA[$pass] --dna $afileA[$pass] $tmppfx.rfmask 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /AAAACCCCCCGGGG/) { die "FAIL: alignment masked incorrectly"; } if ($output !~ /5544388888889\./) { die "FAIL: alignment masked incorrectly"; } if ($output !~ /::::<\-<<__>\->>/) { die "FAIL: alignment masked incorrectly"; } } system("$eslalimask $smallA[$pass] --amino -o $tmppfx.out $afileA[$pass] $tmppfx.fullmask > /dev/null"); $output = `cat $tmppfx.out`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /aAAA\.AAAA\.\.c\.CCCCCC\.\.GGGgg/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\.555\.4\*44\.\.\.\.888888\.\.899\.\./) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($have_rfA[$pass]) { if ($output !~ /.............<<<.....>>>../) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } system("$eslalimask $smallA[$pass] --rna -q -o $tmppfx.out $afileA[$pass] $tmppfx.fullmask > /dev/null"); $output = `cat $tmppfx.out`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /aAAA\.AAAA\.\.c\.CCCCCC\.\.GGGgg/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\.555\.4\*44\.\.\.\.888888\.\.899\.\./) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($have_rfA[$pass]) { if ($output !~ /:::::::::::::<<_______>>::/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } $output = `$eslalimask $smallA[$pass] --amino --informat pfam $afileA[$pass] $tmppfx.fullmask 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /aAAA\.AAAA\.\.c\.CCCCCC\.\.GGGgg/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\.555\.4\*44\.\.\.\.888888\.\.899\.\./) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($have_rfA[$pass]) { if ($output !~ /.............<<<.....>>>../) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } $output = `$eslalimask $smallA[$pass] --rna --outformat pfam $afileA[$pass] $tmppfx.fullmask 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /aAAA\.AAAA\.\.c\.CCCCCC\.\.GGGgg/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\.555\.4\*44\.\.\.\.888888\.\.899\.\./) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($have_rfA[$pass]) { if ($output !~ /:::::::::::::<<_______>>::/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } if($smallA[$pass] eq "") { $output = `$eslalimask $smallA[$pass] --rna --outformat a2m $afileA[$pass] $tmppfx.fullmask 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if($have_rfA[$pass]) { if ($output !~ /aAAAAAAAcCCCCCCGGGgg/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } else { if ($output !~ /AAAAAAAACCCCCCCGGGGG/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } $output = `$eslalimask $smallA[$pass] --rna --outformat psiblast $afileA[$pass] $tmppfx.fullmask 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if($have_rfA[$pass]) { if ($output !~ /aAAA\-AAAA\-\-c\-CCCCCC\-\-GGGgg/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } else { if ($output !~ /AAAA\-AAAA\-\-C\-CCCCCC\-\-GGGGG/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } $output = `$eslalimask $smallA[$pass] --rna --outformat afa $afileA[$pass] $tmppfx.fullmask 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /aAAA\.AAAA\.\.c\.CCCCCC\.\.GGGgg/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } $output = `$eslalimask $smallA[$pass] --rna -t $afileA[$pass] 12-23 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /A\.\.\.Cc\.cCCCC/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /4\.\.\.3\.\.\.8888/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($have_rfA[$pass]) { if ($output !~ /\s+::::::::::::\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } if ($have_rfA[$pass]) { $output = `$eslalimask $smallA[$pass] --rna -t --t-rf $afileA[$pass] 18: 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /GGGGgggg/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /76543210/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\s+::::::::\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } if ($have_rfA[$pass]) { $output = `$eslalimask $smallA[$pass] --rna -t --t-rmins --t-rf $afileA[$pass] 18: 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /GGGG/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /7654/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\s+::::\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } if ($have_rfA[$pass]) { $output = `$eslalimask $smallA[$pass] --rna -t --t-rmins --t-rf $afileA[$pass] 18: 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /GGGG/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /7654/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\s+::::\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } $output = `$eslalimask $smallA[$pass] --rna -g $afileA[$pass] 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($have_rfA[$pass]) { if ($output !~ /AAAAAAAACCCCCCCCGGGGG/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /55554\*44388888888899\./) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /::::::::<<<<<___>>>>>/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } else { if ($output !~ /AAAAAAAAC\.\.CCCCCCCGGGG\-/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /55554\*443\.\.88888888899\./) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } if ($have_rfA[$pass]) { $output = `$eslalimask $smallA[$pass] --rna -g --keepins $afileA[$pass] 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /AAAAAAAACccCCCCCCCGGGGG/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /55554\*443..88888888899*/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /::::::::<\-\-<<<<___>>>>>/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } if ($have_rfA[$pass]) { $output = `$eslalimask $smallA[$pass] --rna -g --keepins --gapthresh 0.3 $afileA[$pass] 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /AAAAAAAACCCCCCCCGGGG/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /55554\*44388888888899/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /:::::::::<<<<___>>>>/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } if ($have_rfA[$pass]) { $output = `$eslalimask $smallA[$pass] --rna -g --keepins --gapthresh 0.7 $afileA[$pass] 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /\.\.AAAAaAAAAaacCcccCCCCCCcCccGGGGG\.\.\.\./) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\.\.5555.4\*44\.\.\.3\.\.\.888888\.8\.\.8899\.\.\.\.\./) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /::::::::::::::<\-\-\-<<<<______>>>>>::::/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } if ($have_rfA[$pass]) { $output = `$eslalimask $smallA[$pass] --rna -g --keepins --gapthresh 0.7 $afileA[$pass] 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /\.\.AAAAaAAAAaacCcccCCCCCCcCccGGGGG\.\.\.\./) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\.\.5555.4\*44\.\.\.3\.\.\.888888\.8\.\.8899\.\.\.\.\./) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /::::::::::::::<\-\-\-<<<<______>>>>>::::/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } $output = `$eslalimask $smallA[$pass] --gmask-all $tmppfx.gmaskall --rna -g --gapthresh 0.7 $afileA[$pass] 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } $output = `cat $tmppfx.gmaskall`; if ($have_rfA[$pass]) { if ($output !~ /00111100111100010001111110100111110000/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } $output = `$eslalimask $smallA[$pass] --gmask-rf $tmppfx.gmaskrf --rna -g --gapthresh 0.7 $afileA[$pass] 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } $output = `cat $tmppfx.gmaskrf`; if ($output !~ /111111111111111111111/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } else { if ($output !~ /11111110111111111111111111111111111111/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } $output = `$eslalimask $smallA[$pass] -p --rna $afileA[$pass] 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($have_rfA[$pass]) { if ($output !~ /\s+A\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\s+8\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\s+\:\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } else { if ($output !~ /\s+a\.Aaaccccc\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\s+\*\*\*\*\*\*\*\*\*\*\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } $output = `$eslalimask $smallA[$pass] --pavg 0.73 -p --rna $afileA[$pass] 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($have_rfA[$pass]) { if ($output !~ /\s+AAAAAACCCCCCCCGGGG\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\s+55554\*388888888899\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\s+:::::::<<<<___>>>>\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } else { if ($output !~ /\s+AAAAa\.AAaacCcccCCCCCCcCccGGGG\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\s+5555\.\.4\*\.\.\.3\.\.\.888888\.8\.\.8899\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } if ($have_rfA[$pass]) { $output = `$eslalimask $smallA[$pass] --ppcons 0.85 -p --rna $afileA[$pass] 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($output !~ /\s+AACCCCCCGGGG\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\s+9\*\*\*\*\*999999\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } $output = `$eslalimask $smallA[$pass] --pthresh 0.85 --pfract 0.5 --rna -p $afileA[$pass] 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } if ($have_rfA[$pass]) { if ($output !~ /\s+AAAAACCCCCGG\-\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\s+5554\*3888899\.\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } else { if ($output !~ /\s+AAA\.\.AA\.\.\.Cc\.cCCCC\.\.\.GGG\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } if ($output !~ /\s+555\.\.4\*\.\.\.3\.\.\.8888\.\.\.99\.\s+/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } $output = `$eslalimask $smallA[$pass] --pmask-all $tmppfx.pmaskall --rna -p --pthresh 0.75 --pfract 0.7 $afileA[$pass] 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } $output = `cat $tmppfx.pmaskall`; if ($have_rfA[$pass]) { if ($output !~ /00000000010000000001111110000000000000/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } $output = `$eslalimask $smallA[$pass] --pmask-rf $tmppfx.pmaskrf --rna -p --pthresh 0.75 --pfract 0.7 $afileA[$pass] 2>&1`; if ($? != 0) { die "FAIL: esl-alimask failed unexpectedly on pass $pass2write"; } $output = `cat $tmppfx.pmaskrf`; if ($output !~ /000001000111111000000/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } else { if ($output !~ /00000011010011101111111111011000000000/) { die "FAIL: alignment masked incorrectly on pass $pass2write"; } } } print "ok\n"; unlink "$tmppfx.stk"; unlink "$tmppfx.norf.stk"; unlink "$tmppfx.fullmask"; unlink "$tmppfx.rfmask"; unlink "$tmppfx.gmaskrf"; unlink "$tmppfx.gmaskall"; unlink "$tmppfx.pmaskrf"; unlink "$tmppfx.pmaskall"; unlink "$tmppfx.out"; exit 0; hmmer-3.1b2/easel/miniapps/esl-alimanip.c0000664361611702660230000042145212473612610017725 0ustar wheelerteddy/* Manipulate a multiple sequence alignment in various ways. */ #include "esl_config.h" #include #include #include #include #include #include #include "easel.h" #include "esl_distance.h" #include "esl_dmatrix.h" #include "esl_fileparser.h" #include "esl_getopts.h" #include "esl_keyhash.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile2.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stack.h" #include "esl_tree.h" #include "esl_vectorops.h" #include "esl_wuss.h" static char banner[] = "manipulate a multiple sequence alignment"; static char usage[] = "[options] "; #define CLUSTOPTS "--cn-id,--cs-id,--cx-id,--cn-ins,--cs-ins,--cx-ins" /* Exclusive choice for clustering */ #define CHOOSESEQOPTS "--seq-k,--seq-r,--seq-ins,--reorder" /* Exclusive choice for choosing which seqs to keep/remove */ #define INCOMPATWITHSMALLOPTS "--lnfract,--lxfract,--lmin,--lmax,--detrunc,--k-reorder,--seq-ins,--seq-ni,--seq-xi,--trim,--minpp,--t-keeprf,--tree,--reorder,--mask2rf,--m-keeprf,--num-all,--num-rf,--rm-gc,--sindi,--post2pp" /* Options incompatible with --small (all opts except --seq-k,--seq-r,--informat,--outformat,--rna,--dna,--amino */ static int write_rf_gapthresh(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa, float gapthresh); static int write_rf_given_alen(ESL_MSA *msa, char *errbuf, int *i_am_rf, int do_keep_rf_chars, char *amask, int amask_len); static int write_rf_given_rflen(ESL_MSA *msa, char *errbuf, int *i_am_rf, int do_keep_rf_chars, char *mask_for_rf, int mask_for_rf_len); static int individualize_consensus(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa); static int read_sqfile(ESL_SQFILE *sqfp, const ESL_ALPHABET *abc, int nseq, ESL_SQ ***ret_sq); static int trim_msa(ESL_MSA *msa, ESL_SQ **sq, int do_keeprf, char *errbuf); static int prune_msa_based_on_posteriors(ESL_MSA *msa, float min_pp, char *errbuf); static int get_pp_idx(ESL_ALPHABET *abc, char ppchar); static int get_tree_order(ESL_TREE *T, char *errbuf, int **ret_order); static int reorder_msa(ESL_MSA *msa, int *order, char *errbuf); static int read_mask_file(char *filename, char *errbuf, char **ret_mask, int *ret_mask_len); static int expand_msa2mask(char *errbuf, ESL_MSA *msa1, char *xmask, ESL_MSA **newmsa1); static int add_gap_columns_to_msa(char *errbuf, ESL_MSA *msa, int *toadd, ESL_MSA **ret_msa, int do_treat_as_rf_gap); static int msa_median_length(ESL_MSA *msa); static int msa_remove_seqs_below_minlen(ESL_MSA *msa, float minlen, ESL_MSA **ret_new_msa); static int msa_remove_seqs_above_maxlen(ESL_MSA *msa, float maxlen, ESL_MSA **ret_new_msa); static int msa_remove_truncated_seqs(ESL_MSA *msa, char *errbuf, int ntrunc, int *i_am_rf, ESL_MSA **ret_new_msa); static int msa_remove_seqs_with_ambiguities(ESL_MSA *msa, int max_nambig, ESL_MSA **ret_new_msa); static int number_columns(ESL_MSA *msa, int do_all, int *i_am_rf, char *errbuf); static char digit_to_char(int digit); static int int_ndigits(int i); static char get_char_digit_x_from_int(int i, int place); static int read_seq_name_file(char *filename, char *errbuf, char ***ret_seqlist, int *ret_seqlist_n); static int msa_keep_or_remove_seqs(ESL_MSA *msa, char *errbuf, char **seqlist, int seqlist_n, int do_keep, int do_reorder, int nali, ESL_MSA **ret_new_msa); static int insert_x_pair_shared(ESL_MSA *msa, int *i_am_rf, int i, int j, int cfirst, int clast, double *opt_pshared, int *opt_nshared, int *opt_nins); static int insert_x_pair_shared_length(ESL_MSA *msa, int *i_am_rf, int i, int j, int cfirst, int clast, double *opt_pshared, double *opt_nshared, int *opt_nins); static int insert_x_diffmx(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa, int rflen, int *i_am_rf, int do_length_weight, int do_only_internal_inserts, ESL_DMATRIX **ret_D); static int MSADivide(ESL_MSA *mmsa, ESL_DMATRIX *D, int do_mindiff, int do_nc, int do_nsize, float mindiff, int target_nc, int target_nsize, int *ret_num_msa, ESL_MSA ***ret_cmsa, int *ret_xsize, char *errbuf); static int select_node(ESL_TREE *T, double *diff, double mindiff, int **ret_clust, int *ret_nc, int *ret_xsize, int *ret_best, char *errbuf); static float find_mindiff(ESL_TREE *T, double *diff, int do_nsize, int target, int **ret_clust, int *ret_nc, int *ret_xsize, int *ret_best, float *ret_mindiff, char *errbuf); static int determine_first_last_consensus_columns(ESL_MSA *msa, char *errbuf, int *i_am_rf, int rflen, int **ret_fA, int **ret_lA); static int dst_nongap_XPairId(const ESL_ALPHABET *abc, const ESL_DSQ *ax1, const ESL_DSQ *ax2, double *opt_distance, int *opt_nid, int *opt_n); static int dst_nongap_XDiffMx(const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, ESL_DMATRIX **ret_D); static int find_seqs_with_given_insert(ESL_MSA *msa, int *i_am_rf, char *errbuf, int target, int min, int max, int **ret_useme); static int minorize_msa(const ESL_GETOPTS *go, ESL_MSA *msa, char *errbuf, FILE *fp, char *tag, int outfmt); static int remove_gc_markup(ESL_MSA *msa, char *errbuf, char *tag); static int cp_and_add_gaps_to_aseq(char *new_aseq, char *orig_aseq, int alen, int *toadd, int nnew, char gapchar); static int map_rfpos_to_apos(ESL_MSA *msa, ESL_ALPHABET *abc, char *errbuf, int **ret_i_am_rf, int **ret_rf2a_map, int *ret_rflen); static int convert_post_to_pp(ESL_MSA *msa, char *errbuf, int nali); static int compare_ints(const void *el1, const void *el2); static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "help; show brief info on version and usage", 1 }, { "-o", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, NULL, "output the alignment to file , not stdout", 1 }, { "--informat", eslARG_STRING,NULL, NULL, NULL, NULL,NULL, NULL, "specify that input file is in format ", 1 }, { "--outformat", eslARG_STRING,NULL, NULL,NULL, NULL, NULL,NULL, "specify that output format be ", 1 }, { "--devhelp", eslARG_NONE, NULL, NULL, NULL, NULL,NULL, NULL, "show list of undocumented developer options", 1 }, /* options for removing/trimming/reordering sequences */ { "--lnfract", eslARG_REAL, NULL, NULL, "0<=x<=2", NULL,NULL, CHOOSESEQOPTS, "remove sequences w/length < fraction of median length", 2 }, { "--lxfract", eslARG_REAL, NULL, NULL, "0<=x<=3", NULL,NULL, CHOOSESEQOPTS, "remove sequences w/length > fraction of median length", 2 }, { "--lmin", eslARG_INT, NULL, NULL, "n>0", NULL,NULL, CHOOSESEQOPTS, "remove sequences w/length < residues", 2 }, { "--lmax", eslARG_INT, NULL, NULL, "n>0", NULL,NULL, CHOOSESEQOPTS, "remove sequences w/length > residues", 2 }, { "--detrunc", eslARG_INT, NULL, NULL, "n>0", NULL,NULL, CHOOSESEQOPTS, "remove seqs w/gaps in >= 5' or 3'-most non-gap #=GC RF cols",2 }, { "--xambig", eslARG_INT, NULL, NULL, "n>=0", NULL,NULL, CHOOSESEQOPTS, "remove sequences with >= ambiguous residues", 2 }, { "--seq-r", eslARG_INFILE,NULL, NULL, NULL, NULL,NULL, CHOOSESEQOPTS, "remove sequences with names listed in file ", 2 }, { "--seq-k", eslARG_INFILE,NULL, NULL, NULL, NULL,NULL, CHOOSESEQOPTS, "remove all seqs *except* those listed in ", 2 }, { "--small", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, INCOMPATWITHSMALLOPTS, "w/--seq-r or --seq-k use minimal RAM (no seq reordering)", 2 }, { "--k-reorder", eslARG_NONE, NULL, NULL, NULL, NULL,"--seq-k", INCOMPATWITHSMALLOPTS, "with --seq-k , reorder sequences to order in ",2 }, { "--seq-ins", eslARG_INT, NULL, NULL, NULL, NULL,NULL, CHOOSESEQOPTS, "keep only seqs w/an insert after non-gap RF col ", 2 }, { "--seq-ni", eslARG_INT, "1", NULL, "n>0", NULL,"--seq-ins", NULL, "w/--seq-ins require at least residue insertions", 2 }, { "--seq-xi", eslARG_INT,"1000000",NULL, "n>0", NULL,"--seq-ins", NULL, "w/--seq-ins require at most residue insertions", 2 }, { "--trim", eslARG_INFILE, NULL, NULL, NULL, NULL,NULL, NULL, "trim aligned seqs in to subseqs in ", 2 }, { "--t-keeprf", eslARG_NONE, NULL, NULL, NULL, NULL,"--trim", NULL, "w/--trim keep GC RF annotation in msa, if it exists", 2 }, { "--minpp", eslARG_REAL, NULL, NULL, "0 with gaps", 2 }, { "--tree", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, CHOOSESEQOPTS, "reorder MSA to tree order following SLC, save Newick tree to ",2 }, { "--reorder", eslARG_INFILE, NULL, NULL, NULL, NULL,NULL, CHOOSESEQOPTS, "reorder seqs to the order listed in , all seqs must be listed",2 }, /* options for adding/removing alignment annotation */ { "--mask2rf", eslARG_INFILE, FALSE,NULL, NULL, NULL,NULL, NULL, "set #=GC RF as x=1, gap=0 from 1/0s in 1-line ", 3 }, { "--m-keeprf", eslARG_NONE, FALSE, NULL, NULL, NULL,"--mask2rf", NULL, "with --mask2rf, do not overwrite nongap RF characters with 'x'", 3 }, { "--num-all", eslARG_NONE, NULL, NULL, NULL, NULL,NULL, NULL, "add annotation numbering all columns", 3 }, { "--num-rf", eslARG_NONE, NULL, NULL, NULL, NULL,NULL, NULL, "add annotation numbering the non-gap RF columns", 3 }, { "--rm-gc", eslARG_STRING,NULL, NULL, NULL, NULL,NULL, "--mask2rf", "remove GC markup, must be RF|SS_cons|SA_cons|PP_cons", 3 }, { "--sindi", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "annotate individual secondary structures by imposing consensus", 3 }, { "--post2pp", eslARG_NONE, NULL, NULL, NULL, NULL,NULL, NULL, "convert infernal 0.72-1.0.2 POST posterior prob annotation to PP", 3 }, /* options for specifying the alphabet */ { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--dna,--rna", " contains protein alignments", 4 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--amino,--rna", " contains DNA alignments", 4 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--amino,--dna", " contains RNA alignments", 4 }, /* All options below are developer options, only shown if --devhelp invoked */ { "--xmask", eslARG_INFILE, NULL, NULL, NULL, NULL,NULL, NULL, "for each 0 column in , add a 100% gap column to ", 101 }, { "--cn-id", eslARG_INT, NULL, NULL, "n>0", NULL,NULL, CLUSTOPTS, "split MSA into clusters based on sequence identity", 101 }, { "--cs-id", eslARG_INT, NULL, NULL, "n>0", NULL,NULL, CLUSTOPTS, "split MSA into clusters on id s.t max cluster has seqs", 101 }, { "--cx-id", eslARG_REAL, NULL, NULL, "0. seq id", 101 }, { "--cn-ins", eslARG_INT, NULL, NULL, "n>0", NULL,NULL, CLUSTOPTS, "split MSA into clusters based on insert similarity", 101 }, { "--cs-ins", eslARG_INT, NULL, NULL, "n>0", NULL,NULL, CLUSTOPTS, "split MSA into clusters on inserts s.t. max cluster has seqs",101 }, { "--cx-ins", eslARG_REAL, NULL, NULL, "0. ins id", 101 }, { "--c-nmin", eslARG_INT, NULL, NULL, "n>0", NULL,NULL, NULL, "only keep the cluster(s) with number of seqs > ", 101 }, { "--c-mx", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, NULL, "output identity matrix to file ", 101 }, { "-M", eslARG_STRING,NULL, NULL, NULL, NULL,NULL, "--seq-r,--seq-k", "use #=GS tag to define minor alignments, and output them", 101 }, { "--M-rf", eslARG_NONE, NULL, NULL, NULL, NULL,"-M", NULL, "w/-M, impose major #=GC RF onto all minor alns", 101 }, { "--M-gapt", eslARG_REAL, "0.5", NULL, "0<=x<=1", NULL,"-M", NULL, "w/-M, fraction of gaps allowed in non-gap RF columns", 101 }, { 0,0,0,0,0,0,0,0,0,0 }, }; int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* application configuration */ ESL_ALPHABET *abc = NULL; /* biological alphabet */ char *alifile = NULL; /* alignment file name */ int infmt = eslMSAFILE_UNKNOWN; /* format code for alifile */ int outfmt = eslMSAFILE_UNKNOWN; /* format code for output ali */ int i; /* counter */ ESLX_MSAFILE *afp = NULL; /* open ali file, normal interface */ ESL_MSAFILE2 *afp2 = NULL; /* open ali file, legacy small-mem interface */ ESL_MSA *msa = NULL; /* one multiple sequence alignment */ int status; /* easel return code */ int nali; /* number of alignments read */ FILE *ofp; /* output file (default is stdout) */ char errbuf[eslERRBUFSIZE]; int median; /* median length seq in msa */ float minlen; /* min length seq we'll keep */ float maxlen; /* max length seq we'll keep */ ESL_MSA *new_msa; /* a new MSA object created from the msa we read from a file */ /* variables related to --seq-k and --seq-r and --reorder */ char **seqlist = NULL; /* list of sequences to keep in msa */ int seqlist_n; /* number of sequences in seqlist */ int n; /* counter over seqnames */ int *useme = NULL; /* useme[0..n..msa->nseq-1] TRUE to keep seq n, FALSE not to */ /* variables related to --trim */ ESL_SQ **trim_sq = NULL; /* unaligned sequences read from a file */ /* --trim related vars */ ESL_SQFILE *trimfp = NULL; /* sequence file with subsequences for --trim */ /* --mask2rf */ char *mask_for_rf = NULL; int mask_for_rf_len = -1; /* --xmask */ char *xmask = NULL; int xmask_len = -1; /* RF related variables */ int *i_am_rf = NULL; /* [0..i..msa->alen-1]: TRUE if pos i is non-gap RF posn, if msa->rf == NULL remains NULL */ int *rf2a_map = NULL; /* [0..rfpos..rflen-1] = apos, * apos is the alignment position (0..msa->alen-1) that * is non-gap RF position rfpos+1 (for rfpos in 0..rflen-1) */ int rflen = -1; /* nongap RF length */ /* options related to --tree */ ESL_TREE *T = NULL; /* the tree, created by Single-Linkage Clustering */ ESL_DMATRIX *D = NULL; /* the distance matrix */ int *order; /* order of sequences in new, reordered msa */ /* options related the 'in development '--c*' options */ int do_id_cluster = FALSE; /* TRUE if --cn-id, --cs-id, or --cx-id */ int do_insert_cluster = FALSE; /* TRUE if --cn-ins, --cs-ins, or --cx-ins */ int do_ctarget_nc, do_ctarget_nsize, do_cmindiff, nmsa, m, nc, nsize, xsize, nmin; float mindiff; ESL_MSA **cmsa; /* the new msa's created by clustering seqs in the main msa */ ESL_MSA *rfmsa; /* the new msa, but with gap RF columns removed */ FILE *mxfp = NULL; int j; /* --iinfo, --iplot, --gplot --rinfo, --dinfo related vars */ double **abc_ct = NULL; /* [0..msa->alen-1][0..abc->K], count of each residue at each position, over all sequences, missing and nonresidues are *not counted* */ int **pp_ct = NULL; /* [0..msa->alen-1][0..11], count of reach posterior probability (PP) code, over all sequences, gap is 11 */ FILE *treefp = NULL; /* output file for --tree */ /* options related to --small */ ESL_KEYHASH *seqname_keyhash; /* keyhash of sequence names listed in list file , with from --seq-k --seq-r */ int nseq_read = 0; /* number of sequences read from current alignment */ int nseq_regurged = 0; /* number of sequences regurgitated from current alignment */ /*********************************************** * Parse command line ***********************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "--devhelp") ) { esl_banner(stdout, argv[0], banner); esl_usage (stdout, argv[0], usage); puts("\nwhere basic options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); puts("\noptions for removing/reordering/trimming sequences:"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); puts("\noptions for adding/removing alignment annotation:"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); puts("\noptions for specifying bio alphabet:"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); puts("\nundocumented, experimental developer options:"); esl_opt_DisplayHelp(stdout, go, 101, 2, 80); exit(0); } if (esl_opt_GetBoolean(go, "-h") ) { esl_banner(stdout, argv[0], banner); esl_usage (stdout, argv[0], usage); puts("\nwhere basic options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); puts("\noptions for removing/reordering/trimming sequences:"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); puts("\noptions for adding/removing alignment annotation:"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); puts("\noptions for specifying bio alphabet:"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != 1) { printf("Incorrect number of command line arguments.\n"); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } /* Check for incompatible options that aren't simple to check with esl_getopts */ /* --small requires either --seq-k or --seq-r */ if (esl_opt_GetBoolean(go, "--small") && (! esl_opt_IsOn(go, "--seq-k")) && (! esl_opt_IsOn(go, "--seq-r"))) { esl_fatal("--small requires either --seq-k or --seq-r"); } alifile = esl_opt_GetArg(go, 1); /* get informat and outformat */ if (esl_opt_GetBoolean(go, "--small")) { infmt = eslMSAFILE_PFAM; outfmt = eslMSAFILE_PFAM; } else { outfmt = eslMSAFILE_STOCKHOLM; } if (esl_opt_IsOn(go, "--informat")) { infmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--informat")); if (infmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat", esl_opt_GetString(go, "--informat")); if (esl_opt_GetBoolean(go, "--small") && infmt != eslMSAFILE_PFAM) esl_fatal("--small requires (and defaults to) pfam format\ncan't set --informat %s\n", esl_opt_GetString(go, "--informat")); } if (esl_opt_IsOn(go, "--outformat")) { outfmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--outformat")); if (outfmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --outformat", esl_opt_GetString(go, "--outformat")); if (esl_opt_GetBoolean(go, "--small") && outfmt != eslMSAFILE_PFAM) esl_fatal("--small requires (and defaults to) pfam format\ncan't set --outformat %s\n", esl_opt_GetString(go, "--outformat")); } /*********************************************** * Open the MSA file; determine alphabet; set for digital input ***********************************************/ if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); else if (esl_opt_GetBoolean(go, "--small")) esl_fatal("Must specify an alphabet (--amino, --dna, --rna) to use --small"); if (esl_opt_GetBoolean(go, "--small")) { status = esl_msafile2_OpenDigital(abc, alifile, NULL, &afp2); if (status == eslENOTFOUND) esl_fatal("Alignment file %s doesn't exist or is not readable\n", alifile); else if (status != eslOK) esl_fatal("Alignment file %s open failed with error %d\n", alifile, status); } else { if ( (status = eslx_msafile_Open(&abc, alifile, NULL, infmt, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); infmt = afp->format; } /* Check for incompatible options that require Stockholm/Pfam as input or output format */ if((esl_opt_IsOn(go, "--mask2rf")) && (outfmt != eslMSAFILE_STOCKHOLM) && (outfmt != eslMSAFILE_PFAM)) esl_fatal("with --mask2rf, the the output format must be stockholm/pfam format"); if((esl_opt_IsOn(go, "--rm-gc")) && (outfmt != eslMSAFILE_STOCKHOLM) && (outfmt != eslMSAFILE_PFAM)) esl_fatal("with --rm-gc, the the output format must be stockholm/pfam format"); if((esl_opt_IsOn(go, "--post2pp")) && (outfmt != eslMSAFILE_STOCKHOLM) && (outfmt != eslMSAFILE_PFAM)) esl_fatal("with --post2pp, the the output format must be stockholm/pfam format"); if((esl_opt_IsOn(go, "--num-all")) && (outfmt != eslMSAFILE_STOCKHOLM) && (outfmt != eslMSAFILE_PFAM)) esl_fatal("with --num-all, the the output format must be stockholm/pfam format"); if((esl_opt_IsOn(go, "--num-rf")) && (outfmt != eslMSAFILE_STOCKHOLM) && (outfmt != eslMSAFILE_PFAM)) esl_fatal("with --num-rf, the the output format must be stockholm/pfam format"); if((esl_opt_IsOn(go, "--seq-ins")) && (infmt != eslMSAFILE_STOCKHOLM) && (infmt != eslMSAFILE_PFAM)) esl_fatal("with --seq-ins, the alignment file must be in stockholm/pfam format"); if((esl_opt_IsOn(go, "--cn-id")) && (infmt != eslMSAFILE_STOCKHOLM) && (infmt != eslMSAFILE_PFAM)) esl_fatal("with --cn-id, the alignment file must be in stockholm/pfam format"); if((esl_opt_IsOn(go, "--cs-id")) && (infmt != eslMSAFILE_STOCKHOLM) && (infmt != eslMSAFILE_PFAM)) esl_fatal("with --cs-id, the alignment file must be in stockholm/pfam format"); if((esl_opt_IsOn(go, "--cx-id")) && (infmt != eslMSAFILE_STOCKHOLM) && (infmt != eslMSAFILE_PFAM)) esl_fatal("with --cx-id, the alignment file must be in stockholm/pfam format"); if((esl_opt_IsOn(go, "--cn-ins")) && (infmt != eslMSAFILE_STOCKHOLM) && (infmt != eslMSAFILE_PFAM)) esl_fatal("with --cn-ins, the alignment file must be in stockholm/pfam format"); if((esl_opt_IsOn(go, "--cs-ins")) && (infmt != eslMSAFILE_STOCKHOLM) && (infmt != eslMSAFILE_PFAM)) esl_fatal("with --cs-ins, the alignment file must be in stockholm/pfam format"); if((esl_opt_IsOn(go, "--cx-ins")) && (infmt != eslMSAFILE_STOCKHOLM) && (infmt != eslMSAFILE_PFAM)) esl_fatal("with --cx-ins, the alignment file must be in stockholm/pfam format"); /* open output file */ if (esl_opt_GetString(go, "-o") != NULL) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) esl_fatal("Failed to open -o output file %s\n", esl_opt_GetString(go, "-o")); } else ofp = stdout; do_id_cluster = ((esl_opt_IsOn(go, "--cn-id")) || (esl_opt_IsOn(go, "--cs-id")) || (esl_opt_IsOn(go, "--cx-id"))) ? TRUE : FALSE; do_insert_cluster = ((esl_opt_IsOn(go, "--cn-ins")) || (esl_opt_IsOn(go, "--cs-ins")) || (esl_opt_IsOn(go, "--cx-ins")))? TRUE : FALSE; /**************************** * Read optional input files ****************************/ /* read --mask2rf file, if nec */ if(esl_opt_GetString(go, "--mask2rf") != NULL) { if((status = read_mask_file(esl_opt_GetString(go, "--mask2rf"), errbuf, &mask_for_rf, &mask_for_rf_len)) != eslOK) esl_fatal(errbuf); } /* read --xmask file, if nec */ if(esl_opt_GetString(go, "--xmask") != NULL) { if((status = read_mask_file(esl_opt_GetString(go, "--xmask"), errbuf, &xmask, &xmask_len)) != eslOK) esl_fatal(errbuf); } /**************************** * Open optional output files ****************************/ if( esl_opt_IsOn(go, "--tree")) { if ((treefp = fopen(esl_opt_GetString(go, "--tree"), "w")) == NULL) esl_fatal("Failed to open --tree output file %s\n", esl_opt_GetString(go, "--tree")); } if( esl_opt_IsOn(go, "--c-mx")) { if ((mxfp = fopen(esl_opt_GetString(go, "--c-mx"), "w")) == NULL) esl_fatal("Failed to open --c-mx output file %s\n", esl_opt_GetString(go, "--c-mx")); } /******************************************************************* * Open and read list file, if nec (--seq-k, --seq-r or --reorder) * *******************************************************************/ if ( esl_opt_IsOn(go, "--seq-k") || esl_opt_IsOn(go, "--seq-r") || esl_opt_IsOn(go, "--reorder")) { if( esl_opt_IsOn(go, "--seq-k")) { if((status = read_seq_name_file(esl_opt_GetString(go, "--seq-k"), errbuf, &seqlist, &seqlist_n)) != eslOK) esl_fatal(errbuf); } else if( esl_opt_IsOn(go, "--reorder")) { if((status = read_seq_name_file(esl_opt_GetString(go, "--reorder"), errbuf, &seqlist, &seqlist_n)) != eslOK) esl_fatal(errbuf); } else { /* --seq-r enabled */ if((status = read_seq_name_file(esl_opt_GetString(go, "--seq-r"), errbuf, &seqlist, &seqlist_n)) != eslOK) esl_fatal(errbuf); } } /************************************************************* * Read MSAs one at a time, manipulate them, then output them *************************************************************/ nali = 0; if (! esl_opt_GetBoolean(go, "--small")) { while ((status = eslx_msafile_Read(afp, &msa)) != eslEOF) { if (status != eslOK) eslx_msafile_ReadFailure(afp, status); nali++; /* if RF exists, get i_am_rf array[0..alen] which tells us which positions are non-gap RF positions * and rf2a_map, a map of non-gap RF positions to overall alignment positions */ if(msa->rf != NULL) { if((status = map_rfpos_to_apos(msa, abc, errbuf, &i_am_rf, &rf2a_map, &rflen)) != eslOK) esl_fatal(errbuf); } /******************************************************************** * Remove sequences based on an input list file (--seq-k or --seq-r) ********************************************************************/ /* Handle the --seq-k and --seq-r options if enabled, all subsequent manipulations will omit any seqs removed here. * We've already read list file , seqlist holds the seqlist_n sequences read from * ( from either --seq-k , --seq-r , --reorder ) */ if ( esl_opt_IsOn(go, "--seq-k") || esl_opt_IsOn(go, "--seq-r") || esl_opt_IsOn(go, "--reorder")) { if((afp->format != eslMSAFILE_STOCKHOLM) && (afp->format != eslMSAFILE_PFAM)) { esl_fatal("--seq-k, --seq-r, --reorder only work on Stockholm formatted alignments"); } if( esl_opt_IsOn(go, "--seq-k")) { if((status = msa_keep_or_remove_seqs(msa, errbuf, seqlist, seqlist_n, TRUE, (esl_opt_GetBoolean(go, "--k-reorder")), nali, &new_msa)) != eslOK) esl_fatal(errbuf); /* new_msa is msa but only with seqs listed in --seq-k file */ } else if( esl_opt_IsOn(go, "--reorder")) { if(seqlist_n != msa->nseq) esl_fatal("With --reorder , contains %d names, but alignment %d has %d seqs (all seqs must be listed in )", seqlist_n, nali, msa->nseq); if((status = msa_keep_or_remove_seqs(msa, errbuf, seqlist, seqlist_n, TRUE, TRUE, nali, &new_msa)) != eslOK) esl_fatal(errbuf); /* new_msa is msa but only with seqs listed in --seq-k file */ } else { /* --seq-r enabled */ if((status = msa_keep_or_remove_seqs(msa, errbuf, seqlist, seqlist_n, FALSE, TRUE, nali, &new_msa)) != eslOK) esl_fatal(errbuf); /* new_msa is msa but without seqs listed in --seq-r file */ } esl_msa_Destroy(msa); msa = new_msa; } /************************************************************* * Remove sequences based on length or number of ambiguities * *************************************************************/ /* The --lnfract,--lxfract,--lmin,--lmax,--detrunc,--xambig options. * we do each separately, removing seqs for each as we go. * They can be used in combination. */ if (esl_opt_IsOn(go, "--lnfract")) { median = msa_median_length(msa); minlen = esl_opt_GetReal(go, "--lnfract") * (float) median; msa_remove_seqs_below_minlen(msa, minlen, &new_msa); /* new_msa is msa without seqs below minlen, swap ptrs */ esl_msa_Destroy(msa); msa = new_msa; new_msa = NULL; } if (esl_opt_IsOn(go, "--lxfract")) { median = msa_median_length(msa); maxlen = esl_opt_GetReal(go, "--lxfract") * (float) median; msa_remove_seqs_above_maxlen(msa, maxlen, &new_msa); /* new_msa is msa without seqs above maxlen, swap ptrs */ esl_msa_Destroy(msa); msa = new_msa; new_msa = NULL; } if (esl_opt_IsOn(go, "--lmin")) { minlen = esl_opt_GetInteger(go, "--lmin"); msa_remove_seqs_below_minlen(msa, minlen, &new_msa); /* new_msa is msa without seqs below minlen, swap ptrs */ esl_msa_Destroy(msa); msa = new_msa; new_msa = NULL; } if (esl_opt_IsOn(go, "--lmax")) { maxlen = esl_opt_GetInteger(go, "--lmax"); msa_remove_seqs_above_maxlen(msa, maxlen, &new_msa); /* new_msa is msa without seqs below maxlen, swap ptrs */ esl_msa_Destroy(msa); msa = new_msa; new_msa = NULL; } if( esl_opt_IsOn(go, "--detrunc")) { if((status = msa_remove_truncated_seqs(msa, errbuf, esl_opt_GetInteger(go, "--detrunc"), i_am_rf, &new_msa)) != eslOK) esl_fatal(errbuf); /* new_msa is msa without seqs below minlen, swap ptrs */ esl_msa_Destroy(msa); msa = new_msa; new_msa = NULL; } if( esl_opt_IsOn(go, "--xambig")) { if((status = msa_remove_seqs_with_ambiguities(msa, esl_opt_GetInteger(go, "--xambig"), &new_msa)) != eslOK) esl_fatal(errbuf); /* new_msa is msa without seqs with > (from --xambig ) ambiguities, swap ptrs */ esl_msa_Destroy(msa); msa = new_msa; new_msa = NULL; } /********************************************************* * Remove sequences based on a specific insert (--seq-ins) *********************************************************/ if( esl_opt_IsOn(go, "--seq-ins")) { if((status = find_seqs_with_given_insert(msa, i_am_rf, errbuf, esl_opt_GetInteger(go, "--seq-ins"), esl_opt_GetInteger(go, "--seq-ni"), esl_opt_GetInteger(go, "--seq-xi"), &useme)) != eslOK) esl_fatal(errbuf); if(esl_vec_ISum(useme, msa->nseq) == 0) esl_fatal("No sequences satisfy the --seq-ins option."); if((status = esl_msa_SequenceSubset(msa, useme, &new_msa)) != eslOK) esl_fatal(errbuf); /* new_msa is msa but without seqs that do not have an insert of length .. (from --seq-ni and --seq-xi ) after consensus column from --seq-ins file */ esl_msa_Destroy(msa); msa = new_msa; new_msa = NULL; } /****************** * Trim sequences * ******************/ if(esl_opt_GetString(go, "--trim") != NULL) { if(nali > 1) { esl_fatal("--trim only works if the alignment file has a single alignment"); } status = esl_sqfile_Open(esl_opt_GetString(go, "--trim"), eslSQFILE_UNKNOWN, NULL, &(trimfp)); if (status == eslENOTFOUND) esl_fatal("File %s doesn't exist or is not readable\n", esl_opt_GetString(go, "--trim")); else if (status == eslEFORMAT) esl_fatal("Couldn't determine format of sequence file %s\n", esl_opt_GetString(go, "--trim")); else if (status == eslEINVAL) esl_fatal("Can't autodetect stdin or .gz."); else if (status != eslOK) esl_fatal("Sequence file open failed with error %d\n", status); /* read the sequences */ read_sqfile(trimfp, msa->abc, msa->nseq, &trim_sq); /* dies on failure */ /* trim the msa */ if((status = trim_msa(msa, trim_sq, esl_opt_GetBoolean(go, "--t-keeprf"), errbuf)) != eslOK) esl_fatal(errbuf); for(i = 0; i < msa->nseq; i++) esl_sq_Destroy(trim_sq[i]); free(trim_sq); trim_sq = NULL; } /***************************************************** * Replace residues with PP values less than minimum * *****************************************************/ if(esl_opt_IsOn(go, "--minpp")) { if(msa->pp == NULL) esl_fatal("--minpp requires all alignments have posterior probability annotation, %d does not\n", nali); if((status = prune_msa_based_on_posteriors(msa, esl_opt_GetReal(go, "--minpp"), errbuf)) != eslOK) esl_fatal(errbuf); } /********************************************** * Reorder sequences to tree order, if --tree * **********************************************/ /* handle the --tree option, if enabled */ if( esl_opt_IsOn(go, "--tree")) { /* Create distance matrix and infer tree by single linkage clustering */ esl_dst_XDiffMx(msa->abc, msa->ax, msa->nseq, &D); esl_tree_SingleLinkage(D, &T); esl_tree_SetTaxaParents(T); esl_tree_SetTaxonlabels(T, msa->sqname); if((status = esl_tree_Validate(T, errbuf)) != eslOK) esl_fatal(errbuf); esl_tree_WriteNewick(treefp, T); /* Get new order for seqs in the MSA based on the tree */ if((status = get_tree_order(T, errbuf, &order)) != eslOK) esl_fatal(errbuf); /*for(i = 0; i < msa->nseq; i++) printf("new MSA idx: %3d | orig MSA idx: %3d\n", i, order[i]);*/ esl_tree_Destroy(T); esl_dmatrix_Destroy(D); T = NULL; D = NULL; if((status = reorder_msa(msa, order, errbuf)) != eslOK) esl_fatal(errbuf); free(order); } /****************************************** * Modify/add annotation in the alignment * ******************************************/ /* Convert POST annotation (infernal 0.72-1.0) to PP, if nec */ /* Remove GC annotation, if nec */ if( esl_opt_IsOn(go, "--rm-gc")) { if((status = remove_gc_markup(msa, errbuf, esl_opt_GetString(go, "--rm-gc")) != eslOK)) esl_fatal(errbuf); } /* Rewrite RF annotation based on a mask, if nec */ if(mask_for_rf != NULL) { /* --mask2rf enabled */ if(msa->rf != NULL && mask_for_rf_len == rflen) { /* mask corresponds to RF len */ if((status = write_rf_given_rflen(msa, errbuf, i_am_rf, esl_opt_GetBoolean(go, "--m-keeprf"), mask_for_rf, mask_for_rf_len)) != eslOK) esl_fatal(errbuf); } else if(mask_for_rf_len == msa->alen) { if((status = write_rf_given_alen(msa, errbuf, i_am_rf, esl_opt_GetBoolean(go, "--m-keeprf"), mask_for_rf, mask_for_rf_len)) != eslOK) esl_fatal(errbuf); } else { if(msa->rf != NULL) esl_fatal("msa %d, alignment length is %d, nongap RF length is %d, --mask2rf mask length is neither (%d)", msa->alen, rflen); else esl_fatal("msa %d, alignment length is %d (no RF annotation), --mask2rf mask length is neither (%d)", msa->alen, rflen); } } /* Add annotation numbering the nongap RF columns, if nec */ if( esl_opt_IsOn(go, "--num-rf")) { if(msa->rf == NULL) esl_fatal("--num-rf requires all alignments have #=GC RF annotation, but alignment %d does not", nali); if((status = number_columns(msa, FALSE, i_am_rf, errbuf) != eslOK)) esl_fatal(errbuf); } /* Add annotation numbering all columns, if nec */ if( esl_opt_IsOn(go, "--num-all")) { if((status = number_columns(msa, TRUE, i_am_rf, errbuf) != eslOK)) esl_fatal(errbuf); } /* Convert POST to PP annotation, if nec */ if(esl_opt_GetBoolean(go, "--post2pp")) { if(msa->pp != NULL) esl_fatal("--post2pp enabled but alignment %d already has PP annotation.\n", nali); if((status = convert_post_to_pp(msa, errbuf, nali)) != eslOK) esl_fatal(errbuf); } /* Impose consensus structure to get individual secondary structures, if nec */ if(esl_opt_GetBoolean(go, "--sindi")) { if((status = individualize_consensus(go, errbuf, msa) != eslOK)) esl_fatal(errbuf); } /**************************************************** * Handle 'in development' options, that are undocumented * (only visible from the command line with --devhelp) * These are even less stable than the other options. ***************************************************/ /* --xmask option: expand the alignment to fit lanemask in xmask , number of TOTAL msa columns must equal number of 1s in . */ if(xmask != NULL) { if((status = expand_msa2mask(errbuf, msa, xmask, &new_msa)) != eslOK) esl_fatal(errbuf); esl_msa_Destroy(msa); msa = new_msa; } /******************************************************* * Handle the 'in development' cluster options. (--c-*) * (these should probably go into a different miniapp eventually) *******************************************************/ if(do_id_cluster || do_insert_cluster) { if(msa->rf == NULL) esl_fatal("--c* options require #=GC RF annotation marking consensus columns."); if(do_id_cluster) { if(msa->rf == NULL) esl_fatal("Error, --cn-id, --cs-id and --cx-id require all alignments have #=GC RF anntotation, aln %d does not.", nali); /* create distance matrix and infer tree by single linkage clustering */ /* first, remove all non-consensus columns */ rfmsa = esl_msa_Clone(msa); if((status = esl_msa_ColumnSubset(rfmsa, errbuf, i_am_rf)) != eslOK) esl_fatal(errbuf); dst_nongap_XDiffMx(rfmsa->abc, rfmsa->ax, rfmsa->nseq, &D); esl_msa_Destroy(rfmsa); rfmsa = NULL; do_ctarget_nc = esl_opt_IsOn(go, "--cn-id"); do_ctarget_nsize = esl_opt_IsOn(go, "--cs-id"); do_cmindiff = esl_opt_IsOn(go, "--cx-id"); nc = esl_opt_IsOn(go, "--cn-id") ? esl_opt_GetInteger(go, "--cn-id") : 0; nsize = esl_opt_IsOn(go, "--cs-id") ? esl_opt_GetInteger(go, "--cs-id") : 0; mindiff = esl_opt_IsOn(go, "--cx-id") ? 1. - esl_opt_GetReal(go, "--cx-id") : 0; } else { /* do_insert_cluster, create insert distance matrix and infer tree by SLC */ if(msa->rf == NULL) esl_fatal("Error, --cn-ins, --cs-ins and --cx-ins require all alignments have #=GC RF anntotation, aln %d does not.", nali); if((status = insert_x_diffmx(go, errbuf, msa, rflen, i_am_rf, TRUE, TRUE, &D)) != eslOK) esl_fatal(errbuf); do_ctarget_nc = esl_opt_IsOn(go, "--cn-ins"); do_ctarget_nsize = esl_opt_IsOn(go, "--cs-ins"); do_cmindiff = esl_opt_IsOn(go, "--cx-ins"); nc = esl_opt_IsOn(go, "--cn-ins") ? esl_opt_GetInteger(go, "--cn-ins") : 0; nsize = esl_opt_IsOn(go, "--cs-ins") ? esl_opt_GetInteger(go, "--cs-ins") : 0; mindiff = esl_opt_IsOn(go, "--cx-ins") ? 1. - esl_opt_GetReal(go, "--cx-ins") : 0; } /* print out the id matrix if nec */ if( esl_opt_IsOn(go, "--c-mx")) { for(i = 0; i < msa->nseq; i++) { for(j = 0; j < msa->nseq; j++) { fprintf(mxfp, "%5d %5d %-30s %-30s %.5f\n", i, j, msa->sqname[i], msa->sqname[j], 1. - D->mx[i][j]); } } fclose(mxfp); } if((status = MSADivide(msa, D, do_cmindiff, do_ctarget_nc, do_ctarget_nsize, mindiff, nc, nsize, &nmsa, &cmsa, &xsize, errbuf)) != eslOK) esl_fatal(errbuf); esl_msa_Destroy(msa); msa = NULL; nmin = esl_opt_IsOn(go, "--c-nmin") ? esl_opt_GetInteger(go, "--c-nmin") : 1; for(m = 0; m < nmsa; m++) { if(cmsa[m]->nseq >= nmin) { status = eslx_msafile_Write(ofp, cmsa[m], outfmt); if (status == eslEMEM) esl_fatal("Memory error when outputting alignment\n"); else if (status != eslOK) esl_fatal("Writing alignment file failed with error %d\n", status); } esl_msa_Destroy(cmsa[m]); } free(cmsa); } else if ( esl_opt_IsOn(go, "--c-mx")) esl_fatal("--c-mx option requires at least one of: --cn-id, --cs-id, --cx-id, --cn-ins, --cs-ins, --cx-ins"); /******************************* * End of cluster option block *******************************/ /* handle the *in development* -M option, if enabled */ if( esl_opt_IsOn(go, "-M")) { if((status = minorize_msa(go, msa, errbuf, ofp, esl_opt_GetString(go, "-M"), outfmt) != eslOK)) esl_fatal(errbuf); } /******************** * Output alignment * ********************/ if(! esl_opt_IsOn(go, "-M")) { /* if -M, we already output the alignments in minorize_msa() */ status = eslx_msafile_Write(ofp, msa, outfmt); if (status == eslEMEM) esl_fatal("Memory error when outputting alignment\n"); else if (status != eslOK) esl_fatal("Writing alignment file failed with error %d\n", status); } /* Clean up for this msa */ if(msa != NULL) { esl_msa_Destroy(msa); msa = NULL; } if(abc_ct != NULL) { esl_Free2D((void **) abc_ct, msa->alen); abc_ct = NULL; } if(pp_ct != NULL) { esl_Free2D((void **) pp_ct, msa->alen); pp_ct = NULL; } if(i_am_rf != NULL) { free(i_am_rf); i_am_rf = NULL; } if(rf2a_map != NULL) { free(rf2a_map); rf2a_map = NULL; } } /* end loop over msa's */ if (nali == 0) esl_fatal("No alignments found in file %s\n", alifile); } /* end of 'if (! esl_opt_IsOn(go, "--small"))' */ else { /* --small enabled */ /* First, a paranoid check first, the following should never be false based on earlier checks */ if((! esl_opt_IsOn(go, "--seq-r")) && (! esl_opt_IsOn(go, "--seq-k"))) esl_fatal("--small requires either --seq-r or --seq-k"); /* We've already read list file , seqlist holds the seqlist_n sequences read from ( from either --seq-k or --seq-r ) */ seqname_keyhash = esl_keyhash_Create(); for (n = 0; n < seqlist_n; n++) { status = esl_keyhash_Store(seqname_keyhash, seqlist[n], -1, NULL); if(status == eslEDUP) { esl_fatal("Error sequence %s listed twice in a input list file.", seqlist[n]); } else if (status != eslOK) { esl_fatal("Error adding sequence %s to keyhash", seqlist[n]); } } while ((status = esl_msafile2_RegurgitatePfam(afp2, ofp, -1, -1, -1, -1, /* don't care about max width of fields */ TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, /* regurgitate all non-seq info */ esl_opt_IsOn(go, "--seq-k") ? seqname_keyhash : NULL, /* if --seq-k keep seqs from list file */ esl_opt_IsOn(go, "--seq-r") ? seqname_keyhash : NULL, /* if --seq-r remove seqs from list file */ NULL, NULL, -1, '.', &nseq_read, &nseq_regurged)) == eslOK) { nali++; if (esl_opt_IsOn(go, "--seq-k") && (nseq_regurged != seqlist_n)) esl_fatal("Error, in alignment %d, did not find %d of the sequences listed in %s", nali, (seqlist_n - nseq_regurged), esl_opt_GetString(go, "--seq-k")); else if (esl_opt_IsOn(go, "--seq-r") && ((nseq_read - nseq_regurged) != seqlist_n)) esl_fatal("Error, in alignment %d, did not find %d of the sequences listed in %s", nali, (seqlist_n - (nseq_read - nseq_regurged)), esl_opt_GetString(go, "--seq-r")); } } /* Cleanup, normal return */ if(seqlist != NULL) { for(n = 0; n < seqlist_n; n++) if(seqlist[n] != NULL) free(seqlist[n]); free(seqlist); } if(esl_opt_IsOn(go, "-o")) { fclose(ofp); if(nali > 1) printf("# %d alignments saved to file %s.\n", nali, esl_opt_GetString(go, "-o")); else printf("# Alignment saved to file %s.\n", esl_opt_GetString(go, "-o")); } if(treefp != NULL) { fclose(treefp); printf("# Tree(s) saved in Newick format to file %s.\n", esl_opt_GetString(go, "--tree")); } if(mxfp != NULL) { fclose(mxfp); printf("# Distance matri{x,ces} saved to file %s.\n", esl_opt_GetString(go, "--c-mx")); } if (esl_opt_GetBoolean(go, "--small")) esl_msafile2_Close(afp2); else eslx_msafile_Close(afp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } /* write_rf_given_alen * * Given an MSA and a char string of 1s and 0s (a lanemask) of length * msa->alen, write/rewrite RF positions as 'x' (non-gap) for 1, '.' (gap) for 0. * If RF already exists AND do_keep_rf_chars == TRUE, do not modify non-gap RF columns * if they are within mask ('1'). */ static int write_rf_given_alen(ESL_MSA *msa, char *errbuf, int *i_am_rf, int do_keep_rf_chars, char *amask, int amask_len) { int status; int64_t apos; /* contract check, rfgiven_mask must be exact length of msa */ if(amask == NULL) ESL_FAIL(eslEINVAL, errbuf, "--mask2rf mask is NULL in write_rf_given, this shouldn't happen.\n"); if(amask_len != (int) strlen(amask)) { ESL_FAIL(eslEINVAL, errbuf, "write_rf_given_alen(), passed in mask len (%d) is not equal to actual mask length (%d)\n", amask_len, (int) strlen(amask)); } if(amask_len != msa->alen) ESL_FAIL(eslEINVAL, errbuf, "--mask2rf mask length: %d is not equal to the MSA length (%" PRId64 ")\n", amask_len, msa->alen); if(msa->rf == NULL) { ESL_ALLOC(msa->rf, sizeof(char) * (msa->alen+1)); for (apos = 1; apos <= msa->alen; apos++) msa->rf[(apos-1)] = '.'; } for (apos = 1; apos <= msa->alen; apos++) { if (amask[(apos-1)] == '0') msa->rf[(apos-1)] = '.'; else if(amask[(apos-1)] == '1') { if((! do_keep_rf_chars) || (i_am_rf == NULL) || (! i_am_rf[(apos-1)])) msa->rf[(apos-1)] = 'x'; /* else, msa has RF nongap char there already, leave it alone */ } else ESL_FAIL(eslEINVAL, errbuf, "--mask2rf mask char number %" PRId64 " is not a 1 nor a 0, but a %c\n", apos, amask[(apos-1)]); } msa->rf[msa->alen] = '\0'; return eslOK; ERROR: return status; } /* write_rf_given_rflen * * Given an MSA and a char string of 1s and 0s (a lanemask) that is * the same length as the non-gap RF annotation in msa, rewrite msa * RF based as 'x' (non-gap) for 1, '.' (gap) for 0. 1s indicate which * non-gap RF columns to keep as 'x', and 0s indicate which non-gap * RF columns to make gaps '.'. * If RF already exists, do not modify non-gap RF columns if they are * within mask ('1'). */ static int write_rf_given_rflen(ESL_MSA *msa, char *errbuf, int *i_am_rf, int do_keep_rf_chars, char *mask_for_rf, int mask_for_rf_len) { int64_t apos, rfpos; /* contract check, mask must be exact length of msa */ if(mask_for_rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "--mask2rf mask is NULL in write_rf_given, this shouldn't happen.\n"); if(msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "--mask2rf mask requires RF annotation in MSA (try -g)\n"); if(mask_for_rf_len != (int) strlen(mask_for_rf)) { ESL_FAIL(eslEINVAL, errbuf, "write_rf_given_rflen(), passed in mask len (%d) is not equal to actual mask length (%d).\n", mask_for_rf_len, (int) strlen(mask_for_rf)); } rfpos = 0; for (apos = 1; apos <= msa->alen; apos++) { if(! esl_abc_CIsGap(msa->abc, msa->rf[(apos-1)])) { rfpos++; if (mask_for_rf[(rfpos-1)] == '0') msa->rf[(apos-1)] = '.'; else if(mask_for_rf[(rfpos-1)] == '1') { if((! do_keep_rf_chars) || (i_am_rf == NULL) || (! i_am_rf[(apos-1)])) msa->rf[(apos-1)] = 'x'; /* else, msa has RF nongap char there already, leave it alone */ } } else msa->rf[(apos-1)] = '.'; } if(rfpos != mask_for_rf_len) { ESL_FAIL(eslEINVAL, errbuf, "write_rf_given_rflen(), RF non-gap length (consensus length) (%" PRId64 ") is not equal to mask length (%d)\n", rfpos, mask_for_rf_len); } msa->rf[msa->alen] = '\0'; return eslOK; } /* individualize_consensus * * Given an MSA with a consensus structure impose it to create * individual secondary structures. Simple rule, for consensus * bp i,j if seq positions i and j are both non-gaps seq i,j are * paired, if >= 1 is a gap, they're not paired. */ static int individualize_consensus(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa) { int64_t apos; int i; int *cct = NULL; /* 0..alen-1 base pair partners array for consensus */ int *ct = NULL; /* 0..alen-1 base pair partners array for current sequence */ char *ss = NULL; /* individual secondary structure we've built */ char *ss_cons_nopseudo = NULL; /* no-pseudoknot version of consensus structure */ int status; if(msa->ss_cons == NULL) ESL_FAIL(eslEINVAL, errbuf, "--sindi requires MSA to have consensus structure annotation.\n"); if(! (msa->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "individualize_consensus() MSA is not digitized.\n"); ESL_ALLOC(cct, sizeof(int) * (msa->alen+1)); ESL_ALLOC(ct, sizeof(int) * (msa->alen+1)); ESL_ALLOC(ss, sizeof(char) * (msa->alen+1)); ESL_ALLOC(ss_cons_nopseudo, sizeof(char) * (msa->alen+1)); esl_wuss_nopseudo(msa->ss_cons, ss_cons_nopseudo); if (esl_wuss2ct(ss_cons_nopseudo, msa->alen, cct) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "Consensus structure string is inconsistent."); /* go through each position of each sequence, if it's a gap and it is part of a base pair, remove that base pair */ for (i = 0; i < msa->nseq; i++) { esl_vec_ICopy(cct, (msa->alen+1), ct); for (apos = 1; apos <= msa->alen; apos++) if (esl_abc_XIsGap(msa->abc, msa->ax[i][apos])) { if (ct[apos] != 0) ct[ct[apos]] = 0; ct[apos] = 0; } /* convert to WUSS SS string and append to MSA */ if (esl_ct2wuss(ct, msa->alen, ss) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "Unexpected error converting de-knotted bp ct array to wuss notation."); esl_msa_AppendGR(msa, "SS", i, ss); } free(cct); free(ct); free(ss); free(ss_cons_nopseudo); return eslOK; ERROR: if (cct) free(cct); if (ct) free(ct); if (ss) free(ss); if (ss_cons_nopseudo) free(ss_cons_nopseudo); return status; } /* map_rfpos_to_apos * * Given an MSA, determine the alignment position of each * non-gap RF (reference) position. The abc is only necessary * for defining gap characters. * * rf2a_map[0..rfpos..rflen-1] = apos, apos is the alignment position (0..msa->alen-1) that * is non-gap RF position rfpos+1 (for rfpos in 0..rflen-1) */ static int map_rfpos_to_apos(ESL_MSA *msa, ESL_ALPHABET *abc, char *errbuf, int **ret_i_am_rf, int **ret_rf2a_map, int *ret_rflen) { int status; int rflen = 0; int *rf2a_map = NULL; int *i_am_rf = NULL; int rfpos = 0; int apos = 0; /* contract check */ if(msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, trying to map RF positions to alignment positions, but msa->rf is NULL."); /* count non-gap RF columns */ for(apos = 0; apos < msa->alen; apos++) { if((! esl_abc_CIsGap(abc, msa->rf[apos])) && (! esl_abc_CIsMissing(abc, msa->rf[apos])) && (! esl_abc_CIsNonresidue(abc, msa->rf[apos]))) { rflen++; /* I don't use esl_abc_CIsResidue() b/c that would return FALSE for 'x' with RNA and DNA */ } } /* build map */ ESL_ALLOC(i_am_rf, sizeof(int) * msa->alen); ESL_ALLOC(rf2a_map, sizeof(int) * rflen); for(apos = 0; apos < msa->alen; apos++) { if((! esl_abc_CIsGap(abc, msa->rf[apos])) && (! esl_abc_CIsMissing(abc, msa->rf[apos])) && (! esl_abc_CIsNonresidue(abc, msa->rf[apos]))) { i_am_rf[apos] = TRUE; rf2a_map[rfpos++] = apos; } else { i_am_rf[apos] = FALSE; } } *ret_i_am_rf = i_am_rf; *ret_rf2a_map = rf2a_map; *ret_rflen = rflen; return eslOK; ERROR: if(i_am_rf != NULL) free(i_am_rf); if(rf2a_map != NULL) free(rf2a_map); ESL_FAIL(status, errbuf, "Error, out of memory while mapping RF positions to alignment positions."); } /* read_sqfile * * Read all seqs in a sequence file and return them. Originally * written for --trim option. */ static int read_sqfile(ESL_SQFILE *sqfp, const ESL_ALPHABET *abc, int nseq, ESL_SQ ***ret_sq) { int status; ESL_SQ **sq; int i; /* get seqs from sqfile */ ESL_ALLOC(sq, sizeof(ESL_SQ *) * (nseq + 1)); /* +1 for the last guy we allocate but don't use */ i = 0; sq[i] = esl_sq_CreateDigital(abc); while ((status = esl_sqio_Read(sqfp, sq[i])) == eslOK) { i++; if(i > nseq) esl_fatal("With --trim, sequence file must have same number seqs as in \n"); sq[i] = esl_sq_CreateDigital(abc); } if (i != nseq) esl_fatal("With --trim, sequence file must have same number seqs as in \n"); /* status should be eslEOF on normal end; if it isn't, deal w/ error */ esl_sq_Destroy(sq[i]); /* destroy final allocated but unused seq */ if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (status != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", status, sqfp->filename); esl_sqfile_Close(sqfp); *ret_sq = sq; return eslOK; ERROR: esl_fatal("Memory allocation error."); return status; /* NEVERREACHED */ } /* trim_msa * * Given an MSA and unaligned 'trimmed' versions (subsequences) of all seqs in that MSA, * replace all chars that have been trimmed away (not in subsequences) with gaps in the MSA. * * We remove all GR and GC markup from the msa, except for possibly #=GC RF if * is TRUE, else we remove that too. */ static int trim_msa(ESL_MSA *msa, ESL_SQ **sq, int do_keeprf, char *errbuf) { int status; int i, r; int apos, uapos; int astart, aend; int uastart, uaend; char *offset; char *aseq; char *uaseq; char *uasubseq; int *a2ua_map; int *ua2a_map; int ualen; if(! (msa->flags & eslMSA_DIGITAL)) ESL_XFAIL(eslEINVAL, errbuf, "in trim_msa(), msa must be digitized."); ESL_ALLOC(aseq, sizeof(char) * (msa->alen+1)); for(i = 0; i < msa->nseq; i++) { if (sq[i]->dsq == NULL) ESL_XFAIL(eslEINVAL, errbuf, "in trim_msa(), sq's must be digitized."); if (sq[i]->n == 0) ESL_XFAIL(eslEINVAL, errbuf, "in trim_msa(), sq[%d] is zero-length\n", i); ESL_ALLOC(a2ua_map, sizeof(int) * (msa->alen+1)); esl_vec_ISet(a2ua_map, (msa->alen+1), -1); uapos = apos = 1; while(apos <= msa->alen) { while(apos <= msa->alen && esl_abc_XIsGap(msa->abc, msa->ax[i][apos])) apos++; if(apos <= msa->alen) a2ua_map[apos] = uapos++; apos++; } ualen = uapos; ESL_ALLOC(ua2a_map, sizeof(int) * (ualen+1)); ua2a_map[0] = -1; for(apos = 1; apos <= msa->alen; apos++) if(a2ua_map[apos] != -1) ua2a_map[a2ua_map[apos]] = apos; ESL_ALLOC(uasubseq, sizeof(char) * (sq[i]->n+1)); esl_abc_Textize(msa->abc, sq[i]->dsq, sq[i]->n, uasubseq); esl_abc_Textize(msa->abc, msa->ax[i], msa->alen, aseq); esl_strdup(aseq, -1, &(uaseq)); esl_strdealign(uaseq, uaseq, "-_.~", NULL); offset = strstr(uaseq, uasubseq); /* we'll replace the first occurence of uasubseq in uaseq */ if(offset == NULL) ESL_XFAIL(eslEINVAL, errbuf, "in trim_msa(), sq[%d] is not a subseq of msa seq %d\n", i, i); uastart = offset - uaseq + 1; uaend = uastart + strlen(uasubseq) - 1; astart = ua2a_map[uastart]; aend = ua2a_map[uaend]; free(ua2a_map); free(a2ua_map); for(apos = 1; apos < astart; apos++) msa->ax[i][apos] = msa->abc->K; /* make it a gap */ for(apos = aend + 1; apos <= msa->alen; apos++) msa->ax[i][apos] = msa->abc->K; /* make it a gap */ free(uaseq); free(uasubseq); } /* Free all per-column annotation that might now be invalid */ if(! do_keeprf && msa->rf != NULL) { free(msa->rf); msa->rf = NULL; } if(msa->ss_cons != NULL) { free(msa->ss_cons); msa->ss_cons = NULL; } if(msa->sa_cons != NULL) { free(msa->sa_cons); msa->sa_cons = NULL; } if(msa->pp_cons != NULL) { free(msa->pp_cons); msa->pp_cons = NULL; } /* Free all per-residue annotation (alternatively, we could just add gaps to the gaps we've created by * trimming, but this would cause problems for SS annotation, for example. */ if(msa->ss != NULL) { for(i = 0; i < msa->nseq; i++) if(msa->ss[i] != NULL) { free(msa->ss[i]); } free(msa->ss); msa->ss = NULL; } if(msa->sa != NULL) { for(i = 0; i < msa->nseq; i++) if(msa->sa[i] != NULL) { free(msa->sa[i]); } free(msa->sa); msa->sa = NULL; } if(msa->pp != NULL) { for(i = 0; i < msa->nseq; i++) if(msa->pp[i] != NULL) { free(msa->pp[i]); } free(msa->pp); msa->pp = NULL; } if(msa->ngr > 0) { for(r = 0; r < msa->ngr; r++) { for(i = 0; i < msa->nseq; i++) if(msa->gr[r][i] != NULL) { free(msa->gr[r][i]); } free(msa->gr[r]); } if(msa->gr_idx != NULL) { esl_keyhash_Destroy(msa->gr_idx); msa->gr_idx = NULL; } msa->gr_idx = NULL; free(msa->gr); msa->gr = NULL; msa->ngr = 0; } free(aseq); return eslOK; ERROR: return status; } /* prune_msa_based_on_posteriors * * Given an MSA and a minimum posterior probability (PP) * value to keep, replace all residues that have posterior * probabilities < with gaps. The PP values for these * residues are replaced with gaps as well. * * We remove all GF, GS, GR and GC markup from the msa, except for GR * PP annotation and parsed GC annotation, like SS_cons, RF, SA_cons * and PP_cons. */ static int prune_msa_based_on_posteriors(ESL_MSA *msa, float min_pp, char *errbuf) { double ppminA[11]; /* values of the 11 possible nongap PP values, '0'-'9' and '*', hardcoded here */ float max_pp; /* max allowable min_pp value */ int i, r; /* counters */ int min_ppidx; /* index in ppminA[] corresponding to minimum allowed PP */ int apos; int ppidx; ppminA[0] = 0.00; ppminA[1] = 0.05; ppminA[2] = 0.15; ppminA[3] = 0.25; ppminA[4] = 0.35; ppminA[5] = 0.45; ppminA[6] = 0.55; ppminA[7] = 0.65; ppminA[8] = 0.75; ppminA[9] = 0.85; ppminA[10] = 0.95; max_pp = 0.95; if(! (msa->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "in prune_msa_based_on_posteriors(), msa must be digitized."); if(msa->pp == NULL) ESL_FAIL(eslEINVAL, errbuf, "in prune_msa_based_on_posteriors(), msa has no PP annotation."); /* determine the index in ppminA of the minimum allowed PP */ min_ppidx = 0; /* special case, check to see if max possible min_pp was passed in, this is 0.95 */ if(esl_FCompare(min_pp, max_pp, eslSMALLX1) == eslOK) { min_ppidx = 10; } else if(min_pp > max_pp) { ESL_FAIL(eslERANGE, errbuf, "in prune_msa_based_on_posteriors(), min_pp (%f) is too large (max allowed is %f)\n", min_pp, max_pp); } else { while((min_ppidx < 10) && (min_pp > ppminA[min_ppidx])) { min_ppidx++; } } /* replace all PP values less than our minimum, and their associated residues, with gaps */ for(i = 0; i < msa->nseq; i++) { /* rename the sequence */ if(msa->pp[i] != NULL) { for(apos = 1; apos <= msa->alen; apos++) { /* be wary off the off-by-one b/t msa->ax and msa->pp */ if(! esl_abc_CIsGap(msa->abc, msa->pp[i][apos-1])) { ppidx = get_pp_idx(msa->abc, msa->pp[i][apos-1]); if(ppidx < min_ppidx) { /* not a gap, and less than our minimum */ msa->ax[i][apos] = msa->abc->K; /* make this residue a gap */ msa->pp[i][apos-1] = '.'; /* make the PP for this residue a gap */ } } } } } /* Free annotation in MSA because we can't be sure any of it is * valid anymore -- we've removed residues from the sequences (!) */ /* Free all per-file (GF) annotation */ for(r = 0; r < msa->ngf; r++) { if(msa->gf[r] != NULL) free(msa->gf[r]); if(msa->gf_tag[r] != NULL) free(msa->gf_tag[r]); } if(msa->gf != NULL) { free(msa->gf); msa->gf = NULL; } if(msa->gf_tag != NULL) { free(msa->gf_tag); msa->gf_tag = NULL; } msa->ngf = 0; /* Free all per-column (GC) annotation that might now be invalid, * we leave the parsed GC annotation, like SS_cons */ for(r = 0; r < msa->ngc; r++) { if(msa->gc[r] != NULL) free(msa->gc[r]); if(msa->gc_tag[r] != NULL) free(msa->gc_tag[r]); } if(msa->gc != NULL) { free(msa->gc); msa->gc = NULL; } if(msa->gc_tag != NULL) { free(msa->gc_tag); msa->gc_tag = NULL; } if(msa->gc_idx != NULL) { esl_keyhash_Destroy(msa->gc_idx); msa->gc_idx = NULL; } msa->ngc = 0; /* Free all per-sequence (GS) annotation */ for(r = 0; r < msa->ngc; i++) { if(msa->gs[r] != NULL) { for(i = 0; i < msa->nseq; i++) { free(msa->gs[r][i]); } free(msa->gs[r]); } if(msa->gc_tag[r] != NULL) free(msa->gc_tag[r]); } if(msa->gs != NULL) { free(msa->gs); msa->gs = NULL; } if(msa->gs_tag != NULL) { free(msa->gs_tag); msa->gs_tag = NULL; } if(msa->gs_idx != NULL) { esl_keyhash_Destroy(msa->gs_idx); msa->gs_idx = NULL; } msa->ngs = 0; /* Free all per-residue (GR) annotation (except PP) */ if(msa->ss != NULL) { for(i = 0; i < msa->nseq; i++) if(msa->ss[i] != NULL) { free(msa->ss[i]); } free(msa->ss); msa->ss = NULL; } if(msa->sa != NULL) { for(i = 0; i < msa->nseq; i++) if(msa->sa[i] != NULL) { free(msa->sa[i]); } free(msa->sa); msa->sa = NULL; } if(msa->ngr > 0) { for(r = 0; r < msa->ngr; r++) { for(i = 0; i < msa->nseq; i++) if(msa->gr[r][i] != NULL) { free(msa->gr[r][i]); } free(msa->gr[r]); } if(msa->gr_idx != NULL) { esl_keyhash_Destroy(msa->gr_idx); msa->gr_idx = NULL; } msa->gr_idx = NULL; free(msa->gr); msa->gr = NULL; msa->ngr = 0; } return eslOK; } /* get_pp_idx * * Given a #=GR PP or #=GC PP_cons character, return the appropriate index * in a pp_ct[] vector. * '0' return 0; * '1' return 1; * '2' return 2; * '3' return 3; * '4' return 4; * '5' return 5; * '6' return 6; * '7' return 7; * '8' return 8; * '9' return 9; * '*' return 10; * gap return 11; * * Anything else (including missing or nonresidue) return -1; * * This mapping of PP chars to return values should probably be * stored in some internal map structure somewhere. */ static int get_pp_idx(ESL_ALPHABET *abc, char ppchar) { if(esl_abc_CIsGap(abc, ppchar)) return 11; if(ppchar == '*') return 10; if(ppchar == '9') return 9; if(ppchar == '8') return 8; if(ppchar == '7') return 7; if(ppchar == '6') return 6; if(ppchar == '5') return 5; if(ppchar == '4') return 4; if(ppchar == '3') return 3; if(ppchar == '2') return 2; if(ppchar == '1') return 1; if(ppchar == '0') return 0; return -1; } /* get_tree_order * * Given a tree, determine the branching order of the sequences * it represents by traversing it preorder. */ static int get_tree_order(ESL_TREE *T, char *errbuf, int **ret_order) { int status; int opos = 0; int nd; int *order; ESL_STACK *pda; ESL_ALLOC(order, sizeof(int) * T->N); opos = 0; pda = esl_stack_ICreate(); esl_stack_IPush(pda, T->right[0]); esl_stack_IPush(pda, T->left[0]); while (esl_stack_IPop(pda, &nd) != eslEOD) { if (nd > 0) { /* a node */ esl_stack_IPush(pda, T->right[nd]); /* index for right child */ esl_stack_IPush(pda, T->left[nd]); /* index for left child */ } else /* nd <= 0, a child */ order[opos++] = nd * -1; } *ret_order = order; esl_stack_Destroy(pda); return eslOK; ERROR: return status; } /* reorder_msa * * Given an array specifying a new order for the sequences in * the MSA, reorder it by swapping pointers. */ static int reorder_msa(ESL_MSA *msa, int *order, char *errbuf) { int status; char **tmp; ESL_ALLOC(tmp, sizeof(char *) * msa->nseq); int i, a; /* contract check */ /* 'order' must be have nseq elements, elements must be in range [0..nseq-1], no duplicates */ int *covered; ESL_ALLOC(covered, sizeof(int) * msa->nseq); esl_vec_ISet(covered, msa->nseq, 0); for(i = 0; i < msa->nseq; i++) { /* printf("order[i:%4d]: %4d\n", i, order[i]); printf("covered[order[i:%4d]]: %4d\n", i, covered[order[i]]); */ if(covered[order[i]]) ESL_FAIL(eslEINVAL, errbuf, "reorder_msa() order array has duplicate entries for i: %d\n", i); covered[order[i]] = 1; } free(covered); /* swap aseq or ax (one or the other must be non-NULL) */ if(msa->flags & eslMSA_DIGITAL) { /* digital MSA */ ESL_DSQ **tmp_dsq; ESL_ALLOC(tmp_dsq, sizeof(ESL_DSQ *) * msa->nseq); for(i = 0; i < msa->nseq; i++) tmp_dsq[i] = msa->ax[i]; for(i = 0; i < msa->nseq; i++) msa->ax[i] = tmp_dsq[order[i]]; free(tmp_dsq); } else { /* text MSA */ for(i = 0; i < msa->nseq; i++) tmp[i] = msa->aseq[i]; for(i = 0; i < msa->nseq; i++) msa->aseq[i] = tmp[order[i]]; } /* swap sqnames (mandatory) */ for(i = 0; i < msa->nseq; i++) tmp[i] = msa->sqname[i]; for(i = 0; i < msa->nseq; i++) msa->sqname[i] = tmp[order[i]]; /* swap sqacc, if they exist */ if(msa->sqacc != NULL) { for(i = 0; i < msa->nseq; i++) tmp[i] = msa->sqacc[i]; for(i = 0; i < msa->nseq; i++) msa->sqacc[i] = tmp[order[i]]; } /* swap sqdesc, if they exist */ if(msa->sqdesc != NULL) { for(i = 0; i < msa->nseq; i++) tmp[i] = msa->sqdesc[i]; for(i = 0; i < msa->nseq; i++) msa->sqdesc[i] = tmp[order[i]]; } /* swap ss, if they exist */ if(msa->ss != NULL) { for(i = 0; i < msa->nseq; i++) tmp[i] = msa->ss[i]; for(i = 0; i < msa->nseq; i++) msa->ss[i] = tmp[order[i]]; } /* swap sa, if they exist */ if(msa->sa != NULL) { for(i = 0; i < msa->nseq; i++) tmp[i] = msa->sa[i]; for(i = 0; i < msa->nseq; i++) msa->sa[i] = tmp[order[i]]; } /* swap pp, if they exist */ if(msa->pp != NULL) { for(i = 0; i < msa->nseq; i++) tmp[i] = msa->pp[i]; for(i = 0; i < msa->nseq; i++) msa->pp[i] = tmp[order[i]]; } /* swap gs annotation, if it exists */ for(a = 0; a < msa->ngs; a++) { for(i = 0; i < msa->nseq; i++) tmp[i] = msa->gs[a][i]; for(i = 0; i < msa->nseq; i++) msa->gs[a][i] = tmp[order[i]]; } /* swap gr annotation, if it exists */ for(a = 0; a < msa->ngr; a++) { for(i = 0; i < msa->nseq; i++) tmp[i] = msa->gr[a][i]; for(i = 0; i < msa->nseq; i++) msa->gr[a][i] = tmp[order[i]]; } free(tmp); return eslOK; ERROR: return status; } /* read_mask_file * * Given an open file pointer, read the first token of the * file and return it as *ret_mask. It must contain only * '0' or '1' characters. * * Returns: eslOK on success. */ int read_mask_file(char *filename, char *errbuf, char **ret_mask, int *ret_mask_len) { int status; ESL_FILEPARSER *efp; char *tok; char *mask; int toklen; int n; if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to open %s in read_mask_file\n", filename); esl_fileparser_SetCommentChar(efp, '#'); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to read a single token from %s\n", filename); ESL_ALLOC(mask, sizeof(char) * (toklen+1)); for(n = 0; n < toklen; n++) { if((tok[n] == '0') || (tok[n] == '1')) { mask[n] = tok[n]; } else { ESL_FAIL(eslFAIL, errbuf, "read a non-0 and non-1 character (%c) in the mask file %s\n", tok[n], filename); } } mask[n] = '\0'; *ret_mask = mask; *ret_mask_len = n; esl_fileparser_Close(efp); return eslOK; ERROR: return eslEMEM; } /* expand_msa2mask * * Given an MSA and a lanemask with exactly msa->alen 1s in it. * Add 100% gap columns in between each column as dictated by . * * For example if lanemask is 100101, msa->alen is 3, we add 2 100% gap * columns after column 1, and 1 100% gap column after column 2, to make * the msa length = length(xmask) = 6. */ static int expand_msa2mask(char *errbuf, ESL_MSA *msa, char *xmask, ESL_MSA **newmsa) { int status; int mpos; int masklen; int *nzeroesA; int nones = 0; if(xmask == NULL) ESL_FAIL(eslEINVAL, errbuf, "expand_msa2mask(), xmask is NULL."); masklen = strlen(xmask); /* count 1s in xmask */ for (mpos = 0; mpos < masklen; mpos++) { if (xmask[mpos] == '1') nones++; else if(xmask[mpos] == '0') ; /* do nothing */ else ESL_FAIL(eslEINVAL, errbuf, "--xmask mask char number %d is not a 1 nor a 0, but a %c\n", mpos+1, xmask[mpos]); } if(nones != msa->alen) ESL_FAIL(eslEINVAL, errbuf, "expand_msa2mask(), number of 1s in --xmask file: %d != msa->alen: %" PRId64 ", they must be equal.", nones, msa->alen); /* determine number of 0s after each consensus column */ nones = 0; ESL_ALLOC(nzeroesA, sizeof(int) * (masklen+1)); esl_vec_ISet(nzeroesA, (masklen+1), 0); for (mpos = 0; mpos < masklen; mpos++) { if (xmask[mpos] == '1') nones++; else if(xmask[mpos] == '0') nzeroesA[nones]++; else ESL_FAIL(eslEINVAL, errbuf, "--xmask mask char number %d is not a 1 nor a 0, but a %c\n", mpos+1, xmask[mpos]); } /*int i; for (i = 0; i <= nones; i++) { printf("nzeroes[%3d]: %3d\n", i, nzeroesA[i]); }*/ /* add the 100% gap columns */ if((status = add_gap_columns_to_msa(errbuf, msa, nzeroesA, newmsa, TRUE)) != eslOK) return status ; /* new alen should equal masklen */ if((*newmsa)->alen != masklen) ESL_FAIL(eslEINVAL, errbuf, "expand_msa2mask(), new msa->alen: (%" PRId64 ") != length of mask (%d), this shouldn't happen.", (*newmsa)->alen, masklen); free(nzeroesA); return eslOK; ERROR: return status; } /* Function: msa_median_length() * * Purpose: Returns the median (unaligned) length of * the sequences in an alignment. */ static int msa_median_length(ESL_MSA *msa) { int status; int *len; int i; int median; ESL_SQ *sq; sq = esl_sq_CreateDigital(msa->abc); ESL_ALLOC(len, sizeof(int) * msa->nseq); for (i = 0; i < msa->nseq; i++) { esl_sq_GetFromMSA(msa, i, sq); len[i] = sq->n; esl_sq_Reuse(sq); /* printf("i: %d len: %d\n", i, len[i]);*/ } qsort(len, msa->nseq, sizeof(int), compare_ints); /* for (i = 0; i < msa->nseq; i++) { printf("i: %d len: %d\n", i, len[i]); } */ median = len[msa->nseq / 2]; free(len); esl_sq_Destroy(sq); return median; ERROR: esl_fatal("msa_median_length() memory allocation error."); return 0.; /* NEVERREACHED */ } /* Function: msa_remove_seqs_below_minlen() * * Purpose: Remove sequences in MSA whose dealigned length is less than a minimum length. */ static int msa_remove_seqs_below_minlen(ESL_MSA *msa, float minlen, ESL_MSA **ret_new_msa) { int status; int *useme; int i; ESL_MSA *new_msa; ESL_SQ *sq; sq = esl_sq_CreateDigital(msa->abc); ESL_ALLOC(useme, sizeof(int) * msa->nseq); for (i = 0; i < msa->nseq; i++) { esl_sq_GetFromMSA(msa, i, sq); useme[i] = ((float) sq->n >= minlen) ? TRUE : FALSE; /*printf("useme[i:%d]: %d\n", i, useme[i]);*/ esl_sq_Reuse(sq); } if(esl_vec_ISum(useme, msa->nseq) == 0) esl_fatal("No sequences exceed minimum allowed length."); if((status = esl_msa_SequenceSubset(msa, useme, &new_msa)) != eslOK) esl_fatal("esl_msa_SequenceSubset() had a problem."); free(useme); esl_sq_Destroy(sq); *ret_new_msa = new_msa; return eslOK; ERROR: esl_fatal("msa_remove_seqs_below_minlen() memory allocation error."); return eslOK; /* NEVERREACHED */ } /* Function: msa_remove_seqs_above_maxlen() * * Purpose: Remove sequences in MSA whose dealigned length is more than a maximum length. */ static int msa_remove_seqs_above_maxlen(ESL_MSA *msa, float maxlen, ESL_MSA **ret_new_msa) { int status; int *useme; int i; ESL_MSA *new_msa; ESL_SQ *sq; sq = esl_sq_CreateDigital(msa->abc); ESL_ALLOC(useme, sizeof(int) * msa->nseq); for (i = 0; i < msa->nseq; i++) { esl_sq_GetFromMSA(msa, i, sq); useme[i] = ((float) sq->n <= maxlen) ? TRUE : FALSE; /*printf("useme[i:%d]: %d\n", i, useme[i]);*/ esl_sq_Reuse(sq); } if(esl_vec_ISum(useme, msa->nseq) == 0) esl_fatal("No sequences are less than maximum allowed length."); if((status = esl_msa_SequenceSubset(msa, useme, &new_msa)) != eslOK) esl_fatal("esl_msa_SequenceSubset() had a problem."); free(useme); esl_sq_Destroy(sq); *ret_new_msa = new_msa; return eslOK; ERROR: esl_fatal("msa_remove_seqs_above_maxlen() memory allocation error."); return eslOK; /* NEVERREACHED */ } /* Function: msa_remove_truncated_seqs() * * Purpose: Remove sequences in MSA that have all gaps in the first 5' leading * non-gap RF columns OR the last 3' leading non-gap RF columns */ static int msa_remove_truncated_seqs(ESL_MSA *msa, char *errbuf, int ntrunc, int *i_am_rf, ESL_MSA **ret_new_msa) { int status; int *useme; int i; int leading_okay, trailing_okay; int apos, rfpos_ct; int nused = 0; ESL_MSA *new_msa; /* contract check */ if(! (msa->flags & eslMSA_DIGITAL)) ESL_XFAIL(eslEINVAL, errbuf, "in msa_remove_truncated_seqs(), msa must be digitized."); if(msa->rf == NULL) ESL_XFAIL(eslEINVAL, errbuf, "No #=GC RF markup in alignment, it is needed for --detrunc."); if(i_am_rf == NULL) ESL_XFAIL(eslEINVAL, errbuf, "internal error, msa_remove_truncated_seq() i_am_rf is NULL."); ESL_ALLOC(useme, sizeof(int) * msa->nseq); for(i = 0; i < msa->nseq; i++) { /* if ALL of the first 5' non-gap RF columns are gaps in this seq, we'll remove it */ leading_okay = FALSE; rfpos_ct = 0; apos = 1; while(!leading_okay && (rfpos_ct < ntrunc) && (apos <= msa->alen)) { if(i_am_rf[(apos-1)]) { rfpos_ct++; if(! esl_abc_XIsGap(msa->abc, msa->ax[i][apos])) leading_okay = TRUE; } apos++; } trailing_okay = FALSE; rfpos_ct = 0; apos = msa->alen; while(!trailing_okay && (rfpos_ct < ntrunc) && (apos >= 1)) { if(i_am_rf[(apos-1)]) { rfpos_ct++; if(! esl_abc_XIsGap(msa->abc, msa->ax[i][apos])) trailing_okay = TRUE; } apos--; } useme[i] = (leading_okay && trailing_okay) ? TRUE : FALSE; if(useme[i]) nused++; } if(nused == 0) ESL_FAIL(eslEINVAL, errbuf, "--detrunc removed ALL sequences!"); if((status = esl_msa_SequenceSubset(msa, useme, &new_msa)) != eslOK) esl_fatal("esl_msa_SequenceSubset() had a problem."); free(useme); *ret_new_msa = new_msa; return eslOK; ERROR: ESL_FAIL(status, errbuf, "msa_remove_truncated_seqs(): memory allocation error."); return eslOK; /* NEVERREACHED */ } /* Function: msa_remove_seqs_with_ambiguities() * * Purpose: Remove sequences in MSA that have more than ambiguous residues. */ static int msa_remove_seqs_with_ambiguities(ESL_MSA *msa, int max_nambig, ESL_MSA **ret_new_msa) { int status; int *useme; int i, j; int nambig; ESL_MSA *new_msa; ESL_SQ *sq; sq = esl_sq_CreateDigital(msa->abc); ESL_ALLOC(useme, sizeof(int) * msa->nseq); for (i = 0; i < msa->nseq; i++) { esl_sq_GetFromMSA(msa, i, sq); nambig = 0; for (j = 1; sq->dsq[j] != eslDSQ_SENTINEL; j++) { if (esl_abc_XIsDegenerate(sq->abc, sq->dsq[j])) nambig++; } useme[i] = (nambig > max_nambig) ? FALSE : TRUE; esl_sq_Reuse(sq); } if((status = esl_msa_SequenceSubset(msa, useme, &new_msa)) != eslOK) esl_fatal("esl_msa_SequenceSubset() had a problem."); free(useme); esl_sq_Destroy(sq); *ret_new_msa = new_msa; return eslOK; ERROR: esl_fatal("msa_remove_seqs_above_maxlen() memory allocation error."); return eslOK; /* NEVERREACHED */ } /* number_columns * * Add annotation to an MSA numbering the columns, either all * the columns (if ) or just non-gap #=GC RF columns. * If do_all is FALSE, i_am_rf must be non-NULL. */ static int number_columns(ESL_MSA *msa, int do_all, int *i_am_rf, char *errbuf) { int status; int i; char *numstring; char *tag; int alen_ndigits; int tagwidth; int a,b,apos; int bmin; int pos2print; int tagidx; /* contract check */ if(!do_all && i_am_rf == NULL) ESL_XFAIL(eslEINVAL, errbuf, "number_columns() called but MSA has no #=GC RF annotation."); alen_ndigits = int_ndigits(msa->alen); tagwidth = do_all ? (3+alen_ndigits) : (5+alen_ndigits); /* "COL.X" or RFCOL.X" */ ESL_ALLOC(tag, sizeof(char) * (tagwidth+1)); ESL_ALLOC(numstring, sizeof(char) * (msa->alen+1)); numstring[msa->alen] = '\0'; tag[tagwidth] = '\0'; if(do_all) { bmin = 3; tag[0] = 'C'; tag[1] = 'O'; tag[2] = 'L'; } else { bmin = 5; tag[0] = 'R'; tag[1] = 'F'; tag[2] = 'C'; tag[3] = 'O'; tag[4] = 'L'; } for(a = 0; a < alen_ndigits; a++) { for(b = 0; b < alen_ndigits; b++) tag[b+bmin] = (a == b) ? 'X' : '.'; pos2print = 1; for(apos = 1; apos <= msa->alen; apos++) { if(!do_all && (! i_am_rf[(apos-1)])) numstring[(apos-1)] = '.'; else numstring[(apos-1)] = get_char_digit_x_from_int(pos2print++, (alen_ndigits-a)); /*printf("called get_char_digit_x_from_int(%d, %d)\n",apos, (alen_ndigits-a));*/ } /* If the tag already exists, free it's associated markup string. This is an awful hack. */ for (tagidx = 0; tagidx < msa->ngc; tagidx++) if (strcmp(msa->gc_tag[tagidx], tag) == 0) break; if(tagidx != msa->ngc) { /* tag exists */ free(msa->gc[tagidx]); msa->gc[tagidx] = NULL; } esl_msa_AppendGC(msa, tag, numstring); } ESL_ALLOC(numstring, sizeof(char) * (msa->alen + 1)); for(i = 0; i < msa->alen; i++) { numstring[i] = digit_to_char(i); } numstring[msa->alen] = '\0'; free(numstring); return eslOK; ERROR: return eslEMEM; } /* digit_to_char * * Given a digit (0-9) return the character reprentation of it. * There must be a better way to do this; oh well. */ static char digit_to_char(int digit) { if(digit == 0) return '0'; if(digit == 1) return '1'; if(digit == 2) return '2'; if(digit == 3) return '3'; if(digit == 4) return '4'; if(digit == 5) return '5'; if(digit == 6) return '6'; if(digit == 7) return '7'; if(digit == 8) return '8'; if(digit == 9) return '9'; else return '?'; } /* Function: int_ndigits * Returns: The number of digits in . */ static int int_ndigits(int i) { int n = 0; while(i > 0) { i/=10; n++; } return n; } /* get_char_digit_x_from_int * * Given two integers and return the * character version of the 'th digit in . * Example = 14378 = 4 would return 7. */ static char get_char_digit_x_from_int(int i, int place) { int n,a,divisor; n = int_ndigits(i); if(n < place) return digit_to_char(0); divisor = 1; for(a = 0; a < (place-1); a++) divisor *= 10; /* subtract leading digits before the one we care about */ i %= (divisor*10); return digit_to_char (i / divisor); } /* Function: read_seq_name_file * Date: EPN, Thu Jun 5 13:21:36 2008 * * Read a file listing sequence names to remove or keep. * Store sequences in *ret_seqlist and return it. * Each white-space delimited token is considered a * different sequence name. No checking is done in this * function, but rather in subsequent functions. * * Returns eslOK on success. */ int read_seq_name_file(char *filename, char *errbuf, char ***ret_seqlist, int *ret_seqlist_n) { int status; ESL_FILEPARSER *efp; char *tok; int toklen; int nalloc = 10; int chunksize = 10; char **seqlist = NULL; int n = 0; int i; void *tmp; ESL_ALLOC(seqlist, sizeof(char *) * nalloc); if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "failed to open %s in read_seq_name_file\n", filename); while((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslEOF) { if(n == nalloc) { nalloc += chunksize; ESL_RALLOC(seqlist, tmp, sizeof(char *) * nalloc); } if((status = esl_strdup(tok, -1, &(seqlist[n++]))) != eslOK) ESL_FAIL(status, errbuf, "error in esl_strdup."); } esl_fileparser_Close(efp); *ret_seqlist = seqlist; *ret_seqlist_n = n; return eslOK; ERROR: if(seqlist != NULL) { for(i = 0; i < n; i++) free(seqlist[i]); free(seqlist); } return status; } /* Function: msa_keep_or_remove_seqs() * * Purpose: Given a list of sequences in , either remove those * sequences from msa, or remove all other sequences besides those from msa. * Create and return the new msa with only the specified seqs in . * * Returns: eslOK on success, eslEINVAL if a sequence name in seqlist does not exist in the msa. * */ static int msa_keep_or_remove_seqs(ESL_MSA *msa, char *errbuf, char **seqlist, int seqlist_n, int do_keep, int do_reorder, int nali, ESL_MSA **ret_new_msa) { int status; int *useme; int i, ip, n; int *order_all, *order_new; ESL_MSA *new_msa; if(msa->index == NULL) ESL_FAIL(eslEINVAL, errbuf, "ERROR, msa->index is NULL!"); ESL_ALLOC(useme, sizeof(int) * msa->nseq); ESL_ALLOC(order_all, sizeof(int) * msa->nseq); ESL_ALLOC(order_new, sizeof(int) * seqlist_n); esl_vec_ISet(order_all, msa->nseq, -1); if(do_keep) esl_vec_ISet(useme, msa->nseq, FALSE); else esl_vec_ISet(useme, msa->nseq, TRUE); for(n = 0; n < seqlist_n; n++) { if((status = esl_keyhash_Lookup(msa->index, seqlist[n], -1, &i)) == eslENOTFOUND) ESL_FAIL(status, errbuf, "Error sequence %s does not exist in alignment %d", seqlist[n], nali); useme[i] = do_keep ? TRUE : FALSE; if(order_all[i] != -1) ESL_FAIL(eslEINVAL, errbuf, "ERROR sequence %s listed twice in a input list file.", seqlist[n]); order_all[i] = n; } if(esl_vec_ISum(useme, msa->nseq) == 0) esl_fatal("No sequences remaining in the alignment!."); if((status = esl_msa_SequenceSubset(msa, useme, &new_msa)) != eslOK) esl_fatal("esl_msa_SequenceSubset() had a problem."); /* if do_keep, reorder to order of names in the list file */ if(do_keep && do_reorder) { ip = 0; for(i = 0; i < msa->nseq; i++) { if(order_all[i] != -1) order_new[order_all[i]] = ip++; } if((status = reorder_msa(new_msa, order_new, errbuf)) != eslOK) return status; } free(useme); free(order_all); free(order_new); *ret_new_msa = new_msa; return eslOK; ERROR: esl_fatal("msa_keep_or_remove_seqs() memory allocation error."); return eslOK; /* NEVERREACHED */ } /* Function: insert_x_pair_shared() * Synopsis: Calculate the fraction of inserts shared between of two aligned digital seqs. * Incept: EPN, Wed Jun 25 10:33:23 2008 * * Purpose: Returns the fraction of the total * number of inserts in both sequences that are shared. * An 'insert' is present in sequence s for consensus column * (non-gap RF column) c if at least 1 residue exists between * consensus column c and c+1. If sequence t also has an insert * between c and c+1, they share that insert. If that were the * only insert in either of the two sequences, then they would * share 1.0 fraction of inserts. * * Args: msa - MSA, digitized, with RF annotation * i_am_rf - [0..msa->alen-1], TRUE if apos is a nongap RF column, FALSE if not * i - index of seq 1 * j - indes of seq 2 * cfirst - first consensus position to consider * clast - last consensus position to consider * opt_pshared - optRETURN: pairwise insert identity, 0<=x<=1 * opt_nshared - optRETURN: # of inserts shared * opt_nins - optRETURN: nins * * Returns: on success. , , * contain the answers, for any of these that were passed * non- pointers. * * Throws: if the strings are different lengths (not aligned). */ int insert_x_pair_shared(ESL_MSA *msa, int *i_am_rf, int i, int j, int cfirst, int clast, double *opt_pshared, int *opt_nshared, int *opt_nins) { int shared; /* total shared inserts */ int nins; /* number of inserts in either sequence */ int apos; /* position in aligned seqs */ int rfpos; int insi, insj; int seen_insert = FALSE; shared = nins = 0; rfpos = 0; for(apos = 1; apos <= msa->alen; apos++) { if(! esl_abc_CIsGap(msa->abc, msa->rf[(apos-1)])) { rfpos++; seen_insert = FALSE; } else { /* not a consensus column, an insert column */ insi = (! esl_abc_XIsGap(msa->abc, msa->ax[i][apos])); insj = (! esl_abc_XIsGap(msa->abc, msa->ax[j][apos])); if(rfpos >= cfirst && rfpos <= clast) { if(insi && insj && !seen_insert) shared++; if((insi || insj) && !seen_insert) { nins++; seen_insert = TRUE; } } } } /*if (opt_pshared != NULL) *opt_pshared = ( nins==0 ? 0. : (double) shared / (double) nins );*/ if (opt_pshared != NULL) *opt_pshared = ( nins==0 ? 1. : (double) shared / (double) nins ); if (opt_nshared != NULL) *opt_nshared = shared; if (opt_nins != NULL) *opt_nins = nins; return eslOK; } /* Function: insert_x_pair_shared_length() * Synopsis: Calculate the fraction of inserts shared between of two aligned digital seqs, * weighted by the length of the inserts. * Incept: EPN, Wed Jun 25 10:33:23 2008 * * Purpose: Returns the weighted fraction of the total * number of inserts in both sequences that are shared. * * Args: msa - MSA, digitized, with RF annotation * i - index of seq 1 * j - indes of seq 2 * cfirst - first consensus position to consider * clast - last consensus position to consider * opt_pshared - optRETURN: pairwise insert identity, 0<=x<=1 * opt_nshared - optRETURN: weighted # inserts shared * opt_nins - optRETURN: nins, number of columns with an insert * * Returns: on success. , , * contain the answers, for any of these that were passed * non- pointers. * * Throws: if the strings are different lengths (not aligned). */ int insert_x_pair_shared_length(ESL_MSA *msa, int *i_am_rf, int i, int j, int cfirst, int clast, double *opt_pshared, double *opt_nshared, int *opt_nins) { double shared; /* weighted shared inserts */ int nins; /* number of inserts in either sequence */ int apos; /* position in aligned seqs */ int rfpos; int leni, lenj; shared = nins = leni = lenj = 0; rfpos = 0; for(apos = 1; apos <= msa->alen; apos++) { if(i_am_rf[(apos-1)]) { rfpos++; if(rfpos >= cfirst && rfpos <= clast) { if((leni + lenj) > 0) { nins++; if(leni >= lenj) shared += (double) lenj / (double) leni; else shared += (double) leni / (double) lenj; } leni = lenj = 0; } } else { /* not a consensus column, an insert column */ if(! esl_abc_XIsGap(msa->abc, msa->ax[i][apos])) leni++; if(! esl_abc_XIsGap(msa->abc, msa->ax[j][apos])) lenj++; } } /*if (opt_pshared != NULL) *opt_pshared = ( nins==0 ? 0. : (double) shared / (double) nins );*/ if (opt_pshared != NULL) *opt_pshared = ( nins==0 ? 1. : (double) shared / (double) nins ); if (opt_nshared != NULL) *opt_nshared = shared; if (opt_nins != NULL) *opt_nins = nins; return eslOK; } /* Function: insert_x_diffmx() * Synopsis: NxN insert difference matrix for N aligned digital seqs. * Incept: EPN, Wed Jun 25 10:25:01 2008 * * Purpose: For each pair of sequences calculates the fraction of number * of inserts that are different between the two sequences. * An 'insert' is present in sequence s for consensus column * (non-gap RF column) c if at least 1 residue exists between * consensus column c and c+1. If sequence t also has an insert * between c and c+1, they share that insert. If that were the * only insert in either of the two sequences, then they would * share 1.0 fractional insert id, and 1.0 - 1.0 = 0.0 fractional * insert difference, thus the insert diff mx entry between * seq s and t would be 0.0. * * Args: go - command-line options * errbuf - for printing error messages * msa - aligned dsq's, [0..N-1][1..alen] * do_length_weight - weight insert similarity by length of inserts * do_only_internal_inserts - TRUE to only count inserts that are at positions * internal to both seq i, j (don't count those truncated off in either seq) * ret_D - RETURN: NxN matrix of fractional differences * * Returns: on success, and contains the difference * matrix; caller is obligated to free with * . * * Throws: if a seq has a different * length than others. On failure, is returned * and state of inputs is unchanged. */ int insert_x_diffmx(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa, int rflen, int *i_am_rf, int do_length_weight, int do_only_internal_inserts, ESL_DMATRIX **ret_D) { int status; ESL_DMATRIX *D = NULL; int i,j; int N = msa->nseq; int nshared; double nshared_len; int nins; int *firstA, *lastA; /* [0..i..nseq-1] first and last consensus column occupied by seq i, only used if do_only_internal_inserts == TRUE */ int ifirst, ilast, jfirst, jlast; if(msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "No #=GC RF markup in alignment."); if(! (msa->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "insert_x_diffmx() MSA is not digitized.\n"); if (( D = esl_dmatrix_Create(N,N) ) == NULL) esl_fatal(errbuf); if ((status = determine_first_last_consensus_columns(msa, errbuf, i_am_rf, rflen, &firstA, &lastA)) != eslOK) return status; /* TEMP for (i = 0; i < N; i++) printf("i: %4d %4d %4d\n", i, firstA[i], lastA[i]); */ for (i = 0; i < N; i++) { D->mx[i][i] = 0.; ifirst = do_only_internal_inserts ? firstA[i] : 0; ilast = do_only_internal_inserts ? lastA[i] : rflen; for (j = i+1; j < N; j++) { jfirst = do_only_internal_inserts ? firstA[j] : 0; jlast = do_only_internal_inserts ? lastA[j] : rflen; if(do_length_weight) { status = insert_x_pair_shared_length(msa, i_am_rf, i, j, ESL_MAX(ifirst, jfirst), ESL_MIN(ilast, jlast), &(D->mx[i][j]), &nshared_len, &nins); /* if(esl_opt_GetBoolean(go, "--verbose")) printf("D %4d %4d %.3f %8.3f of %4d\n", i, j, 1. - D->mx[i][j], nshared_len, nins); */ } else { status = insert_x_pair_shared(msa, i_am_rf, i, j, ESL_MAX(ifirst, jfirst), ESL_MIN(ilast, jlast), &(D->mx[i][j]), &nshared, &nins); /* if(esl_opt_GetBoolean(go, "--verbose")) printf("D %4d %4d %.3f %4d of %4d\n", i, j, 1. - D->mx[i][j], nshared, nins); */ } D->mx[i][j] = 1. - D->mx[i][j]; /* convert from id to distance */ if (status != eslOK) ESL_XEXCEPTION(status, "Pairwise insert identity calculation failed at seqs %d,%d\n", i,j); D->mx[j][i] = D->mx[i][j]; } /* if(esl_opt_GetBoolean(go, "--verbose")) printf("\n"); */ } if (ret_D != NULL) *ret_D = D; else esl_dmatrix_Destroy(D); return eslOK; ERROR: if (D != NULL) esl_dmatrix_Destroy(D); if (ret_D != NULL) *ret_D = NULL; return status; } /* Function: MSADivide() * From Infernal's cmbuild.c * EPN, Wed Mar 21 17:26:39 2007 * * Purpose: Given an MSA and a distance matrix, divide the MSA it into * multiple MSAs, each with a different cluster of the original * sequences. Where clusters are defined by single linkage * clustering based on the distance matrix. * * Different modes: * * 1. if(do_mindiff): define clusters * such that we maximize the number of clusters while * satisfying: minimum fractional difference b/t any * 2 seqs in different clusters >= 'mindiff'. * The contract states that mindiff > 0. in this case. * * 2. if(do_nc): define clusters * such that we have exactly 'target_nc' clusters by * searching for the 'mindiff' that gives exactly * 'target_nc' clusters. (We guarantee we can do this * by rounding 'diff' fractional difference values b/t * seqs to nearest 0.001). * * 3. if(do_nsize): define clusters * such that we have 1 cluster that has at least nsize * sequences in it by searching for the 'mindiff' that * achieves that. * * Args: * ESL_MSA *mmsa - the master MSA, we cluster the seqs in this guy * and build a new MSA from each cluster * ESL_DMATRIX *D; - the distance matrix * int do_mindiff - TRUE (mode 1): satisfy clusters are at least mindiff different * int do_nc - TRUE (mode 2): set mindiff such that we get exactly target_nc clusters * int do_nsize - TRUE (mode 3): set mindiff such that we get 1 cluster with nsize seqs * float mindiff - the minimum fractional difference allowed between 2 seqs of different clusters * (0. indicates mode 2 or 3) * int target_nc - if(do_nc) number of clusters to define, else irrelevant * int target_nsize - if(do_nsize) min size of largets cluster, else irrelevant * int *ret_num_msa - number of MSAs in ret_MSA * ESL_MSA ***ret_cmsa - new MSAs, one for each cluster * ESL_MSA *ret_xsize - max size of a cluster * char *errbuf - buffer for error messages * * Return: ret_cmsa (alloc'ed here) and ret_num_msa */ int MSADivide(ESL_MSA *mmsa, ESL_DMATRIX *D, int do_mindiff, int do_nc, int do_nsize, float mindiff, int target_nc, int target_nsize, int *ret_num_msa, ESL_MSA ***ret_cmsa, int *ret_xsize, char *errbuf) { int status; /* Easel status code */ ESL_MSA **cmsa = NULL;/* the new MSAs we're creating from clusters of seqs in mmsa */ int i; /* counter over sequences */ int m; /* counter over new MSAs */ int n; /* counter over tree nodes */ ESL_TREE *T = NULL;/* the tree, created by Single-Linkage Clustering */ double *diff = NULL; /* [0..T->N-2], diff[n]= min distance between any leaf in right and * left subtree of node n of tree T */ double *minld = NULL;/* [0..T->N-2], min dist from node to any taxa in left subtree */ double *minrd = NULL;/* [0..T->N-2], min dist from node to any taxa in right subtree */ int nc; /* number of clusters/MSAs */ int *clust = NULL;/* [0..T->N-1], cluster number (0..nc-1) this seq is in */ int *csize = NULL;/* [0..nc-1], size of each cluster */ int **useme = NULL;/* [0.m.nc-1][0.i.N] TRUE to use seq i in new MSA m, FALSE not to */ int best; /* 'best' node, returned by select_node() */ int xsize; /* size of cluster under 'best' node (largest cluster) */ /* Contract check */ if((do_nc + do_mindiff + do_nsize) != 1) ESL_FAIL(eslEINCOMPAT, errbuf, "MSADivide() exactly 1 of do_nc, do_mindiff, do_nsize must be TRUE."); if( do_nc && target_nc == 0) ESL_FAIL(eslEINCOMPAT, errbuf, "MSADivide() target_nc is 0 but do_nc is TRUE!"); if( do_nsize && target_nsize == 0) ESL_FAIL(eslEINCOMPAT, errbuf, "MSADivide() target_nsize is 0 but do_nsize is TRUE!"); if( do_mindiff && mindiff <= 0.) ESL_FAIL(eslEINCOMPAT, errbuf, "MSADivide() mindiff is <= 0. but do_mindiff is TRUE!"); if( do_mindiff && target_nc != 0) ESL_FAIL(eslEINCOMPAT, errbuf, "MSADivide() do_mindiff is TRUE, but target_nc != 0"); if( do_mindiff && target_nsize != 0) ESL_FAIL(eslEINCOMPAT, errbuf, "MSADivide() do_mindiff is TRUE, but target_nsize != 0"); /* mmsa must be digital */ if(!(mmsa->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINCOMPAT, errbuf, "MSADivide() MSA is not digital."); if(do_nc || do_nsize) mindiff = 0.; /* Infer tree by single linkage clustering given the distance matrix */ if((status = esl_tree_SingleLinkage(D, &T)) != eslOK) ESL_FAIL(status, errbuf, "esl_tree_SingleLinkage() error, status: %d", status); if((status = esl_tree_SetTaxaParents(T)) != eslOK) ESL_FAIL(status, errbuf, "esl_tree_SetTaxaParentse() error, status: %d", status); /*esl_tree_WriteNewick(stdout, T);*/ if((status = esl_tree_Validate(T, errbuf) != eslOK)) return status; /* determine the diff values: * (use: n_child > n, unless n's children are taxa) * diff[n] is minimum distance between any taxa (leaf) in left subtree of * n to any taxa in right subtree of n. */ ESL_ALLOC(diff, (sizeof(double) * (T->N - 1))); /* one for each node */ ESL_ALLOC(minld, (sizeof(double) * (T->N - 1))); ESL_ALLOC(minrd, (sizeof(double) * (T->N - 1))); for (n = (T->N-2); n >= 0; n--) { minld[n] = T->ld[n] + ((T->left[n] > 0) ? (minld[T->left[n]]) : 0); minrd[n] = T->rd[n] + ((T->right[n] > 0) ? (minrd[T->right[n]]) : 0); diff[n] = minld[n] + minrd[n]; diff[n] *= 1000.; diff[n] = (float) ((int) diff[n]); diff[n] /= 1000.; /*printf("diff[n:%d]: %f\n", n, diff[n]);*/ } free(minld); minld = NULL; free(minrd); minrd = NULL; /*for (n = 0; n < (T->N-1); n++) printf("diff[n:%d]: %f\n", n, diff[n]); for (n = 0; n < (T->N-1); n++) printf("left[n:%d]: %d right[n:%d]: %d\n", n, T->left[n], n, T->right[n]);*/ if(do_mindiff) { /* Mode 1 */ /* Define clusters that are at least mindiff different * from each other. */ if((status = select_node(T, diff, mindiff, &clust, &nc, &xsize, &best, errbuf)) != eslOK) return status; printf("# Alignment split into %d clusters\n", nc); printf("# Maximum identity b/t any 2 seqs in different clusters: %.2f\n", (1.-mindiff)); printf("# Largest cluster contains %d sequences.\n", xsize); printf("#\n"); } else if (do_nc) { /* Mode 2, do_nc == TRUE, mindiff was set to 0.0 above */ /* Find the minimum fractional difference (mindiff) that * gives exactly target_nc clusters, also define clusters * based on that mindiff, this is all done with find_mindiff(), * which does a binary search for mindiff, we're guaranteed to * find exactly target_nc clusters b/c diff values are rounded * to nearest 0.001. */ if(target_nc > (T->N)) target_nc = T->N; /* max num clusters is num seqs */ if((status = find_mindiff(T, diff, FALSE, target_nc, &clust, &nc, &xsize, &best, &mindiff, errbuf)) != eslOK) return status; printf("# Alignment split into %d clusters.\n", nc); printf("# Maximum identity b/t any 2 seqs in different clusters: %.2f\n", (1.-mindiff)); printf("# Largest cluster contains %d sequences.\n", xsize); printf("#\n"); } else { /* Mode 3, do_nsize == TRUE, mindiff was set to 0.0 above */ /* Find the minimum fractional difference (mindiff) that * gives 1 cluster with size of at least sequences * based on that mindiff, this is all done with find_mindiff(), * which does a binary search for mindiff. */ if(target_nsize > (T->N)) target_nsize = T->N; /* max num clusters is num seqs */ if((status = find_mindiff(T, diff, TRUE, target_nsize, &clust, &nc, &xsize, &best, &mindiff, errbuf)) != eslOK) return status; printf("# Alignment split into %d clusters.\n", nc); printf("# Largets cluster contains %d sequences.\n", xsize); printf("# Maximum identity b/t any 2 seqs in different clusters: %.2f\n", (1.-mindiff)); printf("#\n"); } /* Determine the size of each cluster */ ESL_ALLOC(csize, (sizeof(int) * (nc))); esl_vec_ISet(csize, nc, 0); for(i = 0; i < mmsa->nseq; i++) csize[clust[i]]++; /* Create one new MSA for each cluster, * if(do_orig): keep the original MSA as cmsa[nc] */ ESL_ALLOC(cmsa, (sizeof(ESL_MSA *) * (nc))); for(m = 0; m < nc; m++) cmsa[m] = NULL; ESL_ALLOC(useme, (sizeof(int *) * (nc+1))); for(m = 0; m <= nc; m++) { ESL_ALLOC(useme[m], (sizeof(int)) * mmsa->nseq); if(m < nc) esl_vec_ISet(useme[m], mmsa->nseq, FALSE); else esl_vec_ISet(useme[m], mmsa->nseq, TRUE); /* keep all seqs in cmsa[nc]*/ } for(i = 0; i < mmsa->nseq; i++) if(clust[i] != -1) useme[clust[i]][i] = TRUE; printf("# idx nseq\n"); printf("# ---- ------\n"); for(m = 0; m < nc; m++) { if(esl_vec_ISum(useme[m], mmsa->nseq) == 0) esl_fatal("No sequences in cluster %d\n"); if((status = esl_msa_SequenceSubset(mmsa, useme[m], &(cmsa[m]))) != eslOK) ESL_FAIL(status, errbuf, "MSADivide(), esl_msa_SequenceSubset error, status: %d.", status); printf(" %4d %6d\n", m+1, cmsa[m]->nseq); free(useme[m]); } printf("\n"); free(useme[nc]); free(useme); *ret_num_msa = nc; *ret_cmsa = cmsa; *ret_xsize = xsize; esl_tree_Destroy(T); free(diff); diff = NULL; if(clust != NULL) free(clust); if(csize != NULL) free(csize); return eslOK; ERROR: if(diff != NULL) free(diff); if(minld != NULL) free(minld); if(minrd != NULL) free(minrd); if(clust != NULL) free(clust); if(csize != NULL) free(csize); if(cmsa != NULL) { for(m = 0; m < nc; m++) if(cmsa[m] != NULL) esl_msa_Destroy(cmsa[m]); free(cmsa); } return status; } /* Function: select_node() * EPN, Fri Mar 23 08:48:37 2007 * Adapted from SRE's select_node() in maketestset.c originally written * for the PROFMARK HMMER benchmark. * * * Purpose: Define clusters of the taxa (seqs) in the tree such * that minimum disparity b/t any 2 seqs in different * clusters is greater than and the number of * clusters is maximized. is the index of the node * of the tree under which the largest cluster belongs. * is the number of clusters after clustering, * is an array [0..T->N-1] specifying which * cluster each taxa belongs to. * * For high disparities, this cluster may contain all * the sequences, and we'll return the root node (0). * * Args: * ESL_TREE *T - the tree * double *diff - [0..T->N-2]: for each node of the tree, the minimum * distance (sum of branch lengths) from any taxa (leaf) * in left subtree to any taxa in right subtree. * double mindiff - (see description above) * int **ret_clust- [0..T->N-1] cluster number this seq is in, alloc'ed, filled here * int *ret_nc - number of clusters * int *ret_xsize- size of largest cluster * int *ret_best - RETURN: index of node of tree under which largest cluster belongs (see Purpose). * char *errbuf - buffer for error messages * * Returns: node index (as explained in Purpose) */ static int select_node(ESL_TREE *T, double *diff, double mindiff, int **ret_clust, int *ret_nc, int *ret_xsize, int *ret_best, char *errbuf) { int status; /* Easel status code */ ESL_STACK *ns1; /* stack for traversing tree */ ESL_STACK *ns2; /* another stack for traversing tree */ int c; /* counter for clusters */ int best; /* index of current best node */ int maxsize; /* size of cluster for best node */ int n, np; /* counters over tree nodes */ int *clust; /* [1..T->N-1] cluster number this seq is in */ /*printf("in selec_node mindiff: %f T->N: %d\n", mindiff, T->N);*/ /* set tree cladesizes if not already set */ if(T->cladesize == NULL) if((status = esl_tree_SetCladesizes(T)) != eslOK) ESL_FAIL(status, errbuf, "select_node(), esl_tree_SetCladeSizes error, status: %d.", status); ESL_ALLOC(clust, (sizeof(int) * T->N)); esl_vec_ISet(clust, T->N, 0); if((ns1 = esl_stack_ICreate()) == NULL) ESL_FAIL(status, errbuf, "select_node(), failed to create a stack, probably out of memory, status: %d.", status); if((ns2 = esl_stack_ICreate()) == NULL) ESL_FAIL(status, errbuf, "select_node(), failed to create a stack, probably out of memory, status: %d.", status); /* push root on stack to start */ if((status = esl_stack_IPush(ns1, 0)) != eslOK) ESL_FAIL(status, errbuf, "select_node(), failed to push onto a stack, probably out of memory, status: %d.", status); maxsize = 0; best = 0; c = 0; while (esl_stack_IPop(ns1, &n) != eslEOD) { if ((n == 0 || diff[T->parent[n]] > mindiff) && diff[n] <= mindiff) { /* we're at a cluster */ if (T->cladesize[n] > maxsize) { maxsize = T->cladesize[n]; best = n; } /* determine all taxa in the clade rooted at n*/ esl_stack_IPush(ns2, n); while (esl_stack_IPop(ns2, &np) != eslEOD) { /*printf("np: %d T->left[np]: %d\n", np, T->left[np]);*/ if(T->left[np] <= 0) clust[(-1*T->left[np])] = c; else { if((status = esl_stack_IPush(ns2, T->left[np])) != eslOK) ESL_FAIL(status, errbuf, "select_node(), failed to push onto a stack, probably out of memory, status: %d.", status); } if(T->right[np] <= 0) clust[(-1*T->right[np])] = c; else { if((status = esl_stack_IPush(ns2, T->right[np])) != eslOK) ESL_FAIL(status, errbuf, "select_node(), failed to push onto a stack, probably out of memory, status: %d.", status); } } c++; } else { /* we're not a cluster, keep traversing */ /*printf("n: %d T->left[n]: %d\n", n, T->left[n]);*/ if(T->left[n] <= 0) clust[(-1*T->left[n])] = c++; /* single seq with its own cluster */ else { if((status = esl_stack_IPush(ns1, T->left[n])) != eslOK) ESL_FAIL(status, errbuf, "select_node(), failed to push onto a stack, probably out of memory, status: %d.", status); } if(T->right[n] <= 0) clust[(-1*T->right[n])] = c++; /* single seq with its own cluster */ else { if((status = esl_stack_IPush(ns1, T->right[n])) != eslOK) ESL_FAIL(status, errbuf, "select_node(), failed to push onto a stack, probably out of memory, status: %d.", status); } } } esl_stack_Destroy(ns1); esl_stack_Destroy(ns2); *ret_nc = c; *ret_clust = clust; *ret_xsize = maxsize; *ret_best = best; /*printf("nc: %d(%d) best: %d maxsize: %d nc: %d mindiff: %.3f\n\n", *ret_nc, c, best, maxsize, c, mindiff); for(n = 0; n < T->N; n++) printf("clust[%d]: %d\n", n, clust[n]);*/ return eslOK; ERROR: if(clust != NULL) free(clust); ESL_FAIL(status, errbuf, "select_node(), memory allocation error, status: %d.", status); } /* Function: find_mindiff() * EPN, Fri Mar 23 18:59:42 2007 * * Purpose: Given a tree resulting from single linkage clustering, * find the min fractional difference (mindiff) that when used to * define clusters (such that no seq in cluster A is less * than mindiff different than any seq in cluster B), * gives either (A) (if(do_nc)) number of clusters >= target or * (B) (if(do_nsize)) >= 1 cluster with >= target sequences * * Args: * ESL_TREE *T - the tree * double *diff - [0..T->N-2]: for each node of the tree, the minimum * distance (sum of branch lengths) from any taxa (leaf) * in left subtree to any taxa in right subtree. * int do_nsize - TRUE to find mindiff that gives >= 1 cluster with seqs * FALSE to find mindiff that gives clusters * int target - number of clusters (! if(do_nsize)) we want, or min size of * biggest cluster (if(do_nsize)) * int **ret_clust- [0..T->N-1] cluster number this seq is in, alloc'ed, filled here * int *ret_nc - number of clusters * int *ret_xsize- size of largest cluster * int *ret_best - cluster idx of largest cluster * int *ret_mindiff - mindiff that achieves target * char *errbuf - buffer for error messages * * Returns: fractional difference (as explained in Purpose) */ static float find_mindiff(ESL_TREE *T, double *diff, int do_nsize, int target, int **ret_clust, int *ret_nc, int *ret_xsize, int *ret_best, float *ret_mindiff, char *errbuf) { int status; float high_diff = 1.0; float low_diff = 0.0; int high = 0; int low = 0; float mindiff = 0.5; int curr_nc = -1; int curr_xsize = -1; int curr = -1; int curr_best = -1; int keep_going = TRUE; float thresh = 0.001; int *clust = NULL; /* Contract check */ if(target > T->N) ESL_FAIL(eslEINCOMPAT, errbuf, "find_mindiff(), desired target is greater than number of seqs in the tree"); while(keep_going) { if(clust != NULL) free(clust); if((status = select_node(T, diff, mindiff, &clust, &curr_nc, &curr_xsize, &curr_best, errbuf)) != eslOK) return status; curr = do_nsize ? curr_xsize : curr_nc; if(((!do_nsize) && (curr < target)) || ((do_nsize) && (curr >= target))) { high_diff = mindiff; high = curr; /*printf("LOWER curr: %d mindiff: %f low: %f (%d) high: %f (%d)\n", curr, mindiff, low_diff, low, high_diff, high);*/ mindiff -= (mindiff - low_diff) / 2.; if((fabs(high_diff-0.) < thresh) && (fabs(low-0.) < thresh)) keep_going = FALSE; /* stop, high and low have converged at 0. */ } else {/* if(do_nsize) curr_nc > target_nc, else if(!do_nsize) curr_nc >= target_nc */ low_diff = mindiff; low = curr; /*printf("GREATER curr: %d mindiff: %f low: %f (%d) high: %f (%d)\n", curr, mindiff, low_diff, low, high_diff, high);*/ mindiff += (high_diff - mindiff) / 2.; if(fabs(high_diff-low_diff) < thresh) keep_going = FALSE; /* stop, high and low have converged */ } } if(do_nsize) { if(curr < target) { /* we couldn't reach our target in search due to precision */ if(high >= target) { /* we could reach it at high */ mindiff = high_diff; if((status = select_node(T, diff, mindiff, &clust, &curr_nc, &curr_xsize, &curr_best, errbuf)) != eslOK) return status; } else { /* we couldn't reach our threshold, this shouldn't happen */ ESL_FAIL(eslEINVAL, errbuf,"Error in find_mindiff(), even with mindiff of %.5f can't produce cluster of size: %d\n", mindiff, target); } } } else { /* ! do_nsize, trying to achieve clusters */ /* it's possible we can't reach our target, if so, set mindiff as minimum value that gives * less than target clusters. */ if(curr != target) { /*printf("targ: %d curr: %d low: %d (%f) high: %d (%f)\n", target, curr, low, low_diff, high, high_diff);*/ if(high < target) { mindiff = high; if((status = select_node(T, diff, mindiff, &clust, &curr_nc, &curr_xsize, &curr_best, errbuf)) != eslOK) return status; } else while(high > target) { high += thresh; if(high > 1.0) ESL_FAIL(eslEINCONCEIVABLE, errbuf, "find_mindiff(), mindiff has risen above 1.0"); mindiff = high; if((status = select_node(T, diff, mindiff, &clust, &curr_nc, &curr_xsize, &curr_best, errbuf)) != eslOK) return status; high = curr_nc; } } } /*printf("FINAL mindiff: %f\n", mindiff); */ *ret_nc = curr_nc; *ret_clust = clust; *ret_xsize = curr_xsize; *ret_best = curr_best; *ret_mindiff = mindiff; return eslOK; } /* determine_first_last_consensus_columns * * Given an MSA, determine the first and last consensus columns * occupied by each sequence */ static int determine_first_last_consensus_columns(ESL_MSA *msa, char *errbuf, int *i_am_rf, int rflen, int **ret_fA, int **ret_lA) { int status; int *fA = NULL; int *lA = NULL; int rfpos = 0; int apos = 0; int i; /* contract check */ if(msa->rf == NULL) { status = eslEINVAL; goto ERROR; } /* determine the first and last occupied consensus position in each sequence */ ESL_ALLOC(fA, sizeof(int) * msa->nseq); ESL_ALLOC(lA, sizeof(int) * msa->nseq); esl_vec_ISet(lA, msa->nseq, 0); esl_vec_ISet(fA, msa->nseq, rflen); /* this could be way more efficient */ for(i = 0; i < msa->nseq; i++) { rfpos = 0; for(apos = 0; apos < msa->alen; apos++) { if(i_am_rf[apos]) { /* apos is a consensus position */ rfpos++; if(! esl_abc_XIsGap(msa->abc, msa->ax[i][(apos+1)])) { /* rfpos for seq i is not a gap */ fA[i] = ESL_MIN(fA[i], rfpos); lA[i] = ESL_MAX(lA[i], rfpos); } } } } *ret_fA = fA; *ret_lA = lA; return eslOK; ERROR: ESL_FAIL(status, errbuf, "determine_first_last_consensus_columns(): memory allocation error."); return status; /* NEVERREACHED */ } /* Function: dst_nongap_XPairId() * Synopsis: Pairwise identity of two aligned digital seqs. * Differs from esl_dst_XPairId() in that denominator is * seq identity is number of columns that are non-gap in both * sequences (instead of length of the shorter of the two seqs). * * Incept: EPN, Fri Jun 27 15:07:44 2008 * * Args: abc - digital alphabet in use * ax1 - aligned digital seq 1 * ax2 - aligned digital seq 2 * opt_pid - optRETURN: pairwise identity, 0<=x<=1 * opt_nid - optRETURN: # of identities * opt_n - optRETURN: denominator MIN(len1,len2) * * Returns: on success. , , * contain the answers, for any of these that were passed * non- pointers. * * Throws: if the strings are different lengths (not aligned). */ int dst_nongap_XPairId(const ESL_ALPHABET *abc, const ESL_DSQ *ax1, const ESL_DSQ *ax2, double *opt_distance, int *opt_nid, int *opt_n) { int status; int idents; /* total identical positions */ int len; /* number of nongap colns in both seqs */ int i; /* position in aligned seqs */ idents = len = 0; for (i = 1; ax1[i] != eslDSQ_SENTINEL && ax2[i] != eslDSQ_SENTINEL; i++) { if (esl_abc_XIsCanonical(abc, ax1[i]) && esl_abc_XIsCanonical(abc, ax2[i])) { len++; if(ax1[i] == ax2[i]) idents++; } } if (ax1[i] != eslDSQ_SENTINEL || ax2[i] != eslDSQ_SENTINEL) ESL_XEXCEPTION(eslEINVAL, "strings not same length, not aligned"); if (opt_distance != NULL) *opt_distance = ( len==0 ? 0. : (double) idents / (double) len ); if (opt_nid != NULL) *opt_nid = idents; if (opt_n != NULL) *opt_n = len; return eslOK; ERROR: if (opt_distance != NULL) *opt_distance = 0.; if (opt_nid != NULL) *opt_nid = 0; if (opt_n != NULL) *opt_n = 0; return status; } /* Function: dst_nongap_XDiffMx() * Synopsis: NxN difference matrix for N aligned digital seqs. * Differs from esl_dst_XDiffMx() in that denominator for * seq identity is number of columns that are non-gap in both * sequences (instead of length of the shorter of the two seqs). * * Incept: EPN, Fri Jun 27 15:10:53 2008 * * Args: abc - digital alphabet in use * ax - aligned dsq's, [0..N-1][1..alen] * N - number of aligned sequences * ret_D - RETURN: NxN matrix of fractional differences * * Returns: on success, and contains the difference * matrix; caller is obligated to free with * . * * Throws: if a seq has a different * length than others. On failure, is returned * and state of inputs is unchanged. */ int dst_nongap_XDiffMx(const ESL_ALPHABET *abc, ESL_DSQ **ax, int N, ESL_DMATRIX **ret_D) { int status; ESL_DMATRIX *D = NULL; int i,j; if (( D = esl_dmatrix_Create(N,N) ) == NULL) goto ERROR; for (i = 0; i < N; i++) { D->mx[i][i] = 0.; for (j = i+1; j < N; j++) { status = dst_nongap_XPairId(abc, ax[i], ax[j], &(D->mx[i][j]), NULL, NULL); if (status != eslOK) ESL_XEXCEPTION(status, "Pairwise identity calculation failed at seqs %d,%d\n", i,j); D->mx[i][j] = 1.0 - D->mx[i][j]; D->mx[j][i] = D->mx[i][j]; } } if (ret_D != NULL) *ret_D = D; else esl_dmatrix_Destroy(D); return eslOK; ERROR: if (D != NULL) esl_dmatrix_Destroy(D); if (ret_D != NULL) *ret_D = NULL; return status; } /* find_seqs_with_given_insert * * Given an MSA with RF annotation, determine which sequences have inserts after column * of at least size and at most size . Fill an array of size msa->nseq with * TRUE seq i has the insert, FALSE if it doesn't. */ static int find_seqs_with_given_insert(ESL_MSA *msa, int *i_am_rf, char *errbuf, int target, int min, int max, int **ret_useme) { int status; int apos, rfpos, clen; int **ict; int *useme; int i; /* contract check */ if(! (msa->flags & eslMSA_DIGITAL)) ESL_XFAIL(eslEINVAL, errbuf, "in find_seqs_with_given_insert(), msa must be digitized."); if(msa->rf == NULL) ESL_XFAIL(eslEINVAL, errbuf, "No #=GC RF markup in alignment, it is needed for --seq-ins."); ESL_ALLOC(useme,sizeof(int) * (msa->nseq)); ESL_ALLOC(ict, sizeof(int *) * (msa->alen+2)); for(i = 0; i <= msa->alen; i++) { ESL_ALLOC(ict[i], sizeof(int) * (msa->nseq)); esl_vec_ISet(ict[i], (msa->nseq), 0); } rfpos = 0; for(apos = 1; apos <= msa->alen; apos++) { if(i_am_rf[apos-1]) { rfpos++; } else for(i = 0; i < msa->nseq; i++) if(! esl_abc_XIsGap(msa->abc, msa->ax[i][apos])) { ict[rfpos][i]++; } } clen = rfpos; if(target > clen) ESL_XFAIL(eslEINVAL, errbuf, "--seq-ins enabled with = %d, but non-gap RF length of alignment is only %d columns.", target, clen); for(i = 0; i < msa->nseq; i++) { /* printf("ict[target:%d][i:%d]: %d, min: %d max: %d\n", target, i, ict[target][i], min, max); */ useme[i] = ((ict[target][i] >= min) && (ict[target][i] <= max)) ? TRUE : FALSE; } *ret_useme = useme; for(i = 0; i <= msa->alen; i++) free(ict[i]); free(ict); return eslOK; ERROR: return status; } /* minorize_msa() * * Given an MSA with #=GS <> , make a new msa that * includes all seqs that have the same #=GS annotation for the * same <> (string value of is set at command line and passed into * this function) * Also set the #=GC RF markup for each minor subset as either: * (A) the #=GF with equal to and * as the RF line. * * or, if no such #=GF markup exists define the consensus with the * gap fraction rule, any column with <= (from --gapthresh ) * gaps becomes an 'x' in the RF seq, all other columns are '.'. */ static int minorize_msa(const ESL_GETOPTS *go, ESL_MSA *msa, char *errbuf, FILE *fp, char *tag, int outfmt) { int status; int *useme = NULL; int nalloc = 1; int nmin = 0; int *which_minor = NULL; /* [0..i..msa->nseq-1] which minor subset each sequence belongs to, -1 if none */ char **minorA = NULL; /* [0..m..nmin-1] ptr to minor subset name in #=GS markup, only a ptr, don't free the char strings */ int f, g, i, m, mt; int gt = -1; void *tmp; char *rf; int apos; int ip; int *order; ESL_MSA **minor_msaA; /* contract check */ if(msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "-M requires #=GC RF markup in alignment."); if(msa->gs == NULL) ESL_FAIL(eslEINVAL, errbuf, "-M requires #=GS markup in alignment denoting minor subsets."); /* determine which tag matches */ for(g = 0; g < msa->ngs; g++) { if(strcmp(msa->gs_tag[g], tag) == 0) { gt = g; break; } } if(gt == -1) ESL_FAIL(eslEINVAL, errbuf, "No #=GS markup has tag: %s\n", tag); /* determine which minor set each seq belongs to, reallocate minorA as we go and see new minor subsets */ ESL_ALLOC(which_minor, sizeof(int) * msa->nseq); ESL_ALLOC(minorA, sizeof(char *) * nalloc); esl_vec_ISet(which_minor, msa->nseq, -1); for(i = 0; i < msa->nseq; i++) { if(msa->gs[gt][i] != NULL) { mt = -1; for(m = 0; m < nmin; m++) { if(strcmp(minorA[m], msa->gs[gt][i]) == 0) { mt = m; break; } } if(mt == -1) { if((nmin+1) == nalloc) { nalloc++; ESL_RALLOC(minorA, tmp, sizeof(char *) * nalloc); } minorA[nmin] = msa->gs[gt][i]; mt = nmin++; } which_minor[i] = mt; } } for(i = 0; i < msa->nseq; i++) if(which_minor[i] == -1) ESL_FAIL(eslEINVAL, errbuf, "-M requires ALL sequences have #=GS markup with user supplied tag %s. Seq %d (%s) has none.\n", esl_opt_GetString(go, "-M"), i, msa->sqname[i]); /* Now make the minor alignments by keeping only the relevant subset of seqs. * We do not call esl_msa_MinimGaps() b/c we want the alignment length to be * identical b/t all minor msas, and the RF also so cmalign knows how to * map the minor alignments to the major alignment */ ESL_ALLOC(minor_msaA, sizeof(ESL_MSA *) * nmin); ESL_ALLOC(useme, sizeof(int) * msa->nseq); for(m = 0; m < nmin; m++) { for(i = 0; i < msa->nseq; i++) useme[i] = (which_minor[i] == m) ? TRUE : FALSE; if(esl_vec_ISum(useme, msa->nseq) == 0) esl_fatal("No sequences selected for minor MSA!\n"); if((status = esl_msa_SequenceSubset(msa, useme, &(minor_msaA[m]))) != eslOK) ESL_FAIL(status, errbuf, "Error taking subset for minor subset %d with name: %s\n", m, minorA[m]); /* set name */ esl_msa_SetName(minor_msaA[m], minorA[m], -1); /* unless --M-rf free RF annotation and set new annotation (--M-rf tells us to keep the initial RF annotation for all minor alignments */ if(! esl_opt_GetBoolean(go, "--M-rf")) { if(minor_msaA[m]->rf == NULL) ESL_FAIL(eslEINCOMPAT, errbuf, "Error creating minor alignment %d, RF is NULL.", m); free(minor_msaA[m]->rf); minor_msaA[m]->rf = NULL; /* Check if we have #=GF markup denoting the RF line for each minor subset */ rf = NULL; for(f = 0; f < msa->ngf; f++) if(strcmp(minorA[m], msa->gf_tag[f]) == 0) { rf = msa->gf[f]; break; } if(rf != NULL) { /* ensure the RF annotation is the length of the alignment */ if(strlen(rf) != msa->alen) ESL_FAIL(eslEINCOMPAT, errbuf, "'#=GF %s ' markup is of length %d but it must be equal to aln length (%" PRId64 ").", msa->gf_tag[f], (int) strlen(rf), msa->alen); if((status = esl_strdup(rf, msa->alen, &(minor_msaA[m]->rf))) != eslOK) ESL_FAIL(status, errbuf, "Error duplicating RF for minor alignment %d\n", m); /* make sure minor_msaA[m]->rf does not have any non-gap columns where msa->rf has a gap (cmalign -M demands all minor consensus columns are also major consensus columns) */ for (apos = 0; apos < minor_msaA[m]->alen; apos++) { if (! (esl_abc_CIsGap(minor_msaA[m]->abc, minor_msaA[m]->rf[apos]))) { if (esl_abc_CIsGap(msa->abc, msa->rf[apos])) ESL_FAIL(eslEINCOMPAT, errbuf, "'#=GF %s ' markup has a non-gap (%c char) at aln position %d, but the major alignment has a gap there! cmalign will choke on this.\n", msa->gf_tag[f], minor_msaA[m]->rf[(apos-1)], apos); } } } else { /* no #=GF markup denoting RF line for alignment m existed in the input file, define it based on gaps */ if((status = write_rf_gapthresh(go, errbuf, minor_msaA[m], esl_opt_GetReal(go, "--M-gapt"))) != eslOK) return status; /* careful, remember with cmalign -M, the minor alignments can only have training alignment column c defined as a consensus column * if it is also consensus in the major alignment, so we have to remove any minor_msaA[m]->rf 'x' columns that are gaps in */ for (apos = 0; apos < minor_msaA[m]->alen; apos++) if (esl_abc_CIsGap(msa->abc, msa->rf[apos])) minor_msaA[m]->rf[apos] = '.'; } } } /* Print out the alignments, first major, then minors */ /* first, reorder major alignment so that it contains the minor alignment seqs in order */ ip = 0; ESL_ALLOC(order, sizeof(int) * msa->nseq); for(m = 0; m < nmin; m++) { for(i = 0; i < msa->nseq; i++) { if(which_minor[i] == m) order[i] = ip++; } } if((status = reorder_msa(msa, order, errbuf)) != eslOK) return status; eslx_msafile_Write(fp, msa, outfmt); for(m = 0; m < nmin; m++) { eslx_msafile_Write(fp, minor_msaA[m], outfmt); esl_msa_Destroy(minor_msaA[m]); } free(minor_msaA); free(order); free(useme); free(which_minor); free(minorA); return eslOK; ERROR: if(which_minor != NULL) free(which_minor); if(minorA != NULL) free(minorA); if(useme != NULL) free(useme); return eslEMEM; } /* remove_gc_markup() * * Given a GC tag , remove that markup from an MSA. * Return eslEINVAL if does not exist. */ static int remove_gc_markup(ESL_MSA *msa, char *errbuf, char *tag) { int does_not_exist = FALSE; /* Currently, we can only handle removal of parsed GC markup, RF, SS_cons, SA_cons, PP_cons * (the main reason is b/c I didn't know how to deal with possibility of the ESL_KEYHASH in msa->gc_idx). */ if (strcmp(tag, "RF") == 0) { if (msa->rf == NULL) does_not_exist = TRUE; else { free(msa->rf); msa->rf = NULL; } } else if(strcmp(tag, "SS_cons") == 0) { if (msa->ss_cons == NULL) does_not_exist = TRUE; else { free(msa->ss_cons); msa->ss_cons = NULL; } } else if (strcmp(tag, "SA_cons") == 0) { if (msa->sa_cons == NULL) does_not_exist = TRUE; else { free(msa->sa_cons); msa->sa_cons = NULL; } } else if (strcmp(tag, "PP_cons") == 0) { if (msa->pp_cons == NULL) does_not_exist = TRUE; else { free(msa->pp_cons); msa->pp_cons = NULL; } } else { ESL_FAIL(eslEINVAL, errbuf, "--rm-gc only works if is \'RF\', \'SS_cons\', \'SA_cons\', or \'PP_cons\'"); } if(does_not_exist) { ESL_FAIL(eslEINVAL, errbuf, "--rm-gc %s enabled but %s GC markup exists in the MSA.", tag, tag); } return eslOK; } /* add_gap_columns_to_msa * * Given an MSA and an array specifying a number * of all gap columns to add after each column, * add them. Reallocate all arrays as necessary. * if(do_treat_as_rf_gap) make new column a gap * in the RF line, else make it an 'x'. * * toadd is numbered 1..alen. */ static int add_gap_columns_to_msa(char *errbuf, ESL_MSA *msa, int *toadd, ESL_MSA **ret_msa, int do_treat_as_rf_gap) { int status; int i,j; int apos; int nnew = 0; ESL_ALPHABET *abc; char *newstr; /* contract check */ if(! (msa->flags & eslMSA_DIGITAL)) ESL_XFAIL(eslEINVAL, errbuf, "in add_gap_columns_to_msa(), msa must be digitized."); for(apos = 0; apos <= msa->alen; apos++) nnew += toadd[apos]; /* Textize the alignment */ abc = msa->abc; esl_msa_Textize(msa); ESL_MSA *newmsa; /*printf("msa->nseq: %d\n", msa->nseq); printf("msa->alen: %d\n", msa->alen);*/ newmsa = esl_msa_Create(msa->nseq, (msa->alen+nnew)); /* Copy and add gaps to all valid data that is [0..(alen-1)] or [1..alen] */ if(msa->ss_cons != NULL) { ESL_ALLOC(newmsa->ss_cons, sizeof(char) * (msa->alen+nnew+1)); if((status = cp_and_add_gaps_to_aseq(newmsa->ss_cons, msa->ss_cons, msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR; } if(msa->sa_cons != NULL) { ESL_ALLOC(newmsa->sa_cons, sizeof(char) * (msa->alen+nnew+1)); if((status = cp_and_add_gaps_to_aseq(newmsa->sa_cons, msa->sa_cons, msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR; } if(msa->pp_cons != NULL) { ESL_ALLOC(newmsa->pp_cons, sizeof(char) * (msa->alen+nnew+1)); if((status = cp_and_add_gaps_to_aseq(newmsa->pp_cons, msa->pp_cons, msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR; } if(msa->rf != NULL) { ESL_ALLOC(newmsa->rf, sizeof(char) * (msa->alen+nnew+1)); if(do_treat_as_rf_gap) { if((status = cp_and_add_gaps_to_aseq(newmsa->rf, msa->rf, msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR; } else if((status = cp_and_add_gaps_to_aseq(newmsa->rf, msa->rf, msa->alen, toadd, nnew, 'x') != eslOK)) goto ERROR; } if(msa->ss != NULL) { ESL_ALLOC(newmsa->ss, sizeof(char *) * msa->nseq); for(i = 0; i < msa->nseq; i++) { if(msa->ss[i] != NULL) { ESL_ALLOC(newmsa->ss[i], sizeof(char) * (msa->alen+nnew+1)); if((status = cp_and_add_gaps_to_aseq(newmsa->ss[i], msa->ss[i], msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR; } } } if(msa->sa != NULL) { ESL_ALLOC(newmsa->sa, sizeof(char *) * msa->nseq); for(i = 0; i < msa->nseq; i++) { if(msa->sa[i] != NULL) { ESL_ALLOC(newmsa->sa[i], sizeof(char) * (msa->alen+nnew+1)); if((status = cp_and_add_gaps_to_aseq(newmsa->sa[i], msa->sa[i], msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR; } } } if(msa->pp != NULL) { ESL_ALLOC(newmsa->pp, sizeof(char *) * msa->nseq); for(i = 0; i < msa->nseq; i++) { if(msa->pp[i] != NULL) { ESL_ALLOC(newmsa->pp[i], sizeof(char) * (msa->alen+nnew+1)); if((status = cp_and_add_gaps_to_aseq(newmsa->pp[i], msa->pp[i], msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR; } } } if(msa->ncomment > 0) { for(j = 0; j < msa->ncomment; j++) { if(msa->comment[j] != NULL) esl_msa_AddComment(newmsa, msa->comment[j], -1); } } if(msa->ngf > 0) { for(i = 0; i < msa->ngf; i++) if(msa->gf[i] != NULL) esl_msa_AddGF(newmsa, msa->gf_tag[i], -1, msa->gf[i], -1); } if(msa->ngs > 0) { for(j = 0; j < msa->ngs; j++) { for(i = 0; i < msa->nseq; i++) if(msa->gs[j][i] != NULL) esl_msa_AddGS(newmsa, msa->gs_tag[j], -1, i, msa->gs[j][i], -1); } } if(msa->ngc > 0) { for(i = 0; i < msa->ngc; i++) { if(msa->gc[i] != NULL) { ESL_ALLOC(newstr, sizeof(char) * (msa->alen+nnew+1)); if((status = cp_and_add_gaps_to_aseq(newstr, msa->gc[i], msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR; esl_msa_AppendGC(newmsa, msa->gc_tag[i], newstr); free(newstr); } } } if(msa->gr != NULL) { for(j = 0; j < msa->ngr; j++) { for(i = 0; i < msa->nseq; i++) { if(msa->gr[j][i] != NULL) { ESL_ALLOC(newstr, sizeof(char) * (msa->alen+nnew+1)); if((status = cp_and_add_gaps_to_aseq(newstr, msa->gr[j][i], msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR; esl_msa_AppendGR(newmsa, msa->gr_tag[j], i, newstr); free(newstr); } } } } /* copy the aseqs, free as we go to save memory */ for(i = 0; i < msa->nseq; i++) { esl_strdup(msa->sqname[i], -1, &(newmsa->sqname[i])); if((status = cp_and_add_gaps_to_aseq(newmsa->aseq[i], msa->aseq[i], msa->alen, toadd, nnew, '.') != eslOK)) goto ERROR; free(msa->aseq[i]); msa->aseq[i] = NULL; } newmsa->abc = abc; esl_msa_Digitize(newmsa->abc, newmsa, NULL); esl_msa_Destroy(msa); *ret_msa = newmsa; return eslOK; ERROR: return status; } /*cp_and_add_gaps_to_aseq * * Given an aligned [0..alen-1] original text string, * add toadd[apos-1] gaps after each residue. * new_aseq must be already allocated. * * toadd is numbered 1..alen. */ static int cp_and_add_gaps_to_aseq(char *new_aseq, char *orig_aseq, int alen, int *toadd, int nnew, char gapchar) { int orig_apos = 0; int new_apos = 0; int i; for(i = 0; i < toadd[0]; i++) new_aseq[new_apos++] = gapchar; for(orig_apos = 0; orig_apos < alen; orig_apos++) { new_aseq[new_apos++] = orig_aseq[orig_apos]; for(i = 0; i < toadd[(orig_apos+1)]; i++) new_aseq[new_apos++] = gapchar; } new_aseq[new_apos] = '\0'; return eslOK; } /* Function: convert_post_to_pp() * * Purpose: Convert 'POST' annotation in an MSA (from Infernal 0.72-1.0) * to 'PP' annotation in place. is provided only so that * we can provide it in an error message if nec. * */ static int convert_post_to_pp(ESL_MSA *msa, char *errbuf, int nali) { int status; int ridx1, ridx2, ndigits; int r,i,apos; int ir2; /* Find out which #=GR line is the POST, Post, or post line (if more than one exist, last one is chosen) */ ridx1 = -1; ridx2 = -1; ndigits = 0; for (r = 0; r < msa->ngr; r++) { if (strcmp(msa->gr_tag[r], "POST") == 0) { ridx1 = r; ndigits = 1; } if (strcmp(msa->gr_tag[r], "Post") == 0) { ridx1 = r; ndigits = 1; } if (strcmp(msa->gr_tag[r], "post") == 0) { ridx1 = r; ndigits = 1; } if (strcmp(msa->gr_tag[r], "POSTX.") == 0) { ridx1 = r; ndigits = 1; } if (strcmp(msa->gr_tag[r], "POST.X") == 0) { ridx2 = r; ndigits = 2; } } if(ndigits == 0) { ESL_FAIL(eslEINVAL, errbuf, "--post2pp requires \"#=GR POST\", \"#=GR Post\", \"#=GR post\", \"#=GR POSTX.\", or \"#=GR POSTX.\" and \"#=GR POST.X\" annotation, it's missing from alignment %d\n", nali); } if(ndigits == 2 && ridx1 == -1) { ESL_FAIL(eslEINVAL, errbuf, "found \"#=GR POST.X\" annotation but not \"#=GR POSTX.\" in alignment %d.\n", nali); } /* make sure that the POST annotation is the only GR annotation we have, * this should be the case if alignment was created with infernal's cmalign * v0.72-v1.0.2, which is the only type of alignments that should have POST * annotation */ if((ndigits == 1 && msa->ngr != 1) || (ndigits == 2 && msa->ngr != 2)) ESL_FAIL(eslEINVAL, errbuf, "additional \"#=GR\" annotation exists besides posteriors, alignment wasn't created by cmalign v0.72-v1.0.2"); ESL_ALLOC(msa->pp, sizeof(char *) * msa->nseq); for(i = 0; i < msa->nseq; i++) { ESL_ALLOC(msa->pp[i], sizeof(char) * (msa->alen+1)); } if(ndigits == 1) { /* easy case, just copy the annotation */ for(i = 0; i < msa->nseq; i++) { esl_strdup(msa->gr[ridx1][i], msa->alen, &(msa->pp[i])); free(msa->gr[ridx1][i]); } free(msa->gr[ridx1]); } else { /* ndigits == 2 */ for(i = 0; i < msa->nseq; i++) { for(apos = 0; apos < msa->alen; apos++) { if(esl_abc_CIsGap(msa->abc, msa->gr[ridx1][i][apos])) { if(! esl_abc_CIsGap(msa->abc, msa->gr[ridx2][i][apos])) ESL_FAIL(eslEINVAL, errbuf, "reading post annotation for seq: %d aln column: %d, post 'tens' value gap but post 'ones' value is gap.\n", i, apos); msa->pp[i][apos] = '.'; } else if(msa->gr[ridx1][i][apos] == '*') { if(msa->gr[ridx2][i][apos] != '*') ESL_FAIL(eslEINVAL, errbuf, "reading post annotation for aln %d, seq: %d aln column: %d, post 'tens' value '*' but post 'ones' value != '*'.\n", nali, i, apos); msa->pp[i][apos] = '*'; } else { ir2 = (int) (msa->gr[ridx2][i][apos] - '0'); if(ir2 >= 5) { /* round up, being careful to round 95 and above to '*' */ msa->pp[i][apos] = (msa->gr[ridx1][i][apos] == '9') ? '*' : msa->gr[ridx1][i][apos] + 1; } else { msa->pp[i][apos] = msa->gr[ridx1][i][apos]; } } } free(msa->gr[ridx1][i]); free(msa->gr[ridx2][i]); } free(msa->gr[ridx1]); free(msa->gr[ridx2]); } /* done filling msa->pp, now free gr annotation, we know from check above * the msa's GR annotation only consists of the posterior annotation, so * we can safely remove GR altogether (without worrying about reordering other GRs) */ free(msa->gr); msa->gr = NULL; msa->ngr = 0; /* gr_idx will no longer be valid so we destroy it, * we could recreate it, but it's only used for parsing anyhow */ if(msa->gr_idx != NULL) { esl_keyhash_Destroy(msa->gr_idx); msa->gr_idx = NULL; } msa->gr_idx = NULL; return eslOK; ERROR: esl_fatal("convert_post_to_pp(), memory allocation error."); return eslOK; /* NEVERREACHED */ } /* write_rf_gapthresh * * Given an MSA write/rewrite RF based on fraction * of gaps in each column. If fraction < gapthresh RF is an 'x', * otherwise it's a '.' (gap). */ static int write_rf_gapthresh(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa, float gapthresh) { int status; int64_t apos; int64_t gaps; int i; int nrf = 0; if(msa->rf == NULL) { ESL_ALLOC(msa->rf, sizeof(char) * (msa->alen+1)); } /* set as all gaps */ for (apos = 1; apos <= msa->alen; apos++) msa->rf[(apos-1)] = '.'; for (apos = 1; apos <= msa->alen; apos++) { for (gaps = 0, i = 0; i < msa->nseq; i++) { if (esl_abc_XIsGap(msa->abc, msa->ax[i][apos])) gaps++; } if((double) gaps / (double) msa->nseq < gapthresh) { /* column passes gap threshold */ nrf++; msa->rf[(apos-1)] = 'x'; } else { /* column fails the gap threshold */ msa->rf[(apos-1)] = '.'; } } msa->rf[msa->alen] = '\0'; return eslOK; ERROR: return status; } /* Function: compare_ints() * * Purpose: Comparison function for qsort(). Used * by msa_median_length(). * * Return 1 if el1 > el2, -1 if el1 < el2 and 0 if el1 == el2. * This will result in a sorted list with smallest * element as the first element, largest as the last. */ int compare_ints(const void *el1, const void *el2) { if ((* ((int *) el1)) > (* ((int *) el2))) return 1; else if ((* ((int *) el1)) < (* ((int *) el2))) return -1; return 0; } /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * $SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/miniapps/esl-alimanip.c $ * SVN $Id: esl-alimanip.c 711 2011-07-27 20:06:15Z eddys $ *****************************************************************/ hmmer-3.1b2/easel/miniapps/.dropbox.attr0000775361611702660230000000000212473272026017623 0ustar wheelerteddy{}hmmer-3.1b2/easel/miniapps/esl-alimerge.c0000664361611702660230000025631612473612610017725 0ustar wheelerteddy/* Merge alignments into a single alignment based on their reference (RF) annotation. * * Special care is taken to be consistent with missing data '~' * annotation in two different contexts. * * First, from Infernal 1.1rc2 and later cmalign and cmsearch -A * output alignments: '~' can occur in GC RF and SS_cons * annotation. The '~' after a given nongap/nonmissing RF position x * (and before nongap/nonmissing RF position x+1) must all occur 5' of * all inserted positions (gap: '.') that occur between x and x+1. * * Second, from HMMER3, hmmbuild reads and writes '~' in sequences to * mark the ends of fragments. Any fragment must begin and end with a * contiguous string of 1 or more '~'. '~' characters are not allowed * within sequences anywhere except within these leading and trailing * contiguous stretches. * * esl-alimerge will accept as input and produce as output alignments * that are consistent with both of these conventions. * * EPN, Fri Nov 20 16:28:59 2009 */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_distance.h" #include "esl_fileparser.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile2.h" #include "esl_sqio.h" #include "esl_stopwatch.h" #include "esl_vectorops.h" static char banner[] = "merge alignments based on their reference (RF) annotation"; static char usage1[] = "[options] "; static char usage2[] = "[options] --list 1 ali files to merge>\n\ \n\ Input alignments must be in Stockholm or Pfam format.\n\ Ouput format choices\n\ --------------------\n\ stockholm [default]\n\ pfam\n\ a2m\n\ psiblast\n\ afa"; static void read_list_file(char *listfile, char ***ret_alifile_list, int *ret_nalifile); static int update_maxgap_and_maxmis(ESL_MSA *msa, char *errbuf, int clen, int64_t alen, int *maxgap, int *maxmis); static int validate_and_copy_msa_annotation(const ESL_GETOPTS *go, int outfmt, ESL_MSA *mmsa, ESL_MSA **msaA, int clen, int nmsa, int alen_merged, int *maxgap, int *maxmis, char *errbuf); static int add_msa(ESL_MSA *mmsa, char *errbuf, ESL_MSA *msa_to_add, int *maxgap, int *maxmis, int clen, int alen_merged); static int inflate_string_with_gaps_and_missing(char *src_str, int64_t src_len, int64_t dst_len, int *ngapA, char gapchar, int *nmisA, char mischar, char **ret_dst_str); static int inflate_seq_with_gaps(const ESL_ALPHABET *abc, char *src_str, int64_t src_len, int64_t dst_len, int *ngapA, char gapchar, char **ret_dst_str); static int validate_no_nongaps_in_rf_gaps(const ESL_ALPHABET *abc, char *rf_str, char *other_str, int64_t len); static int determine_gap_columns_to_add(ESL_MSA *msa, int *maxgap, int *maxmis, int clen, int **ret_ngapA, int **ret_nmisA, int **ret_neitherA, char *errbuf); static void write_pfam_msa_top(FILE *fp, ESL_MSA *msa); static void write_pfam_msa_gc(FILE *fp, ESL_MSA *msa, int maxwidth); static int64_t maxwidth(char **s, int n); static int rfchar_is_nongap_nonmissing(const ESL_ALPHABET *abc, char rfchar); static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "--list", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "command-line argument is a file that lists ali files to merge", 99 }, { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "help; show brief info on version and usage", 1 }, { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL,NULL, NULL, "output the final alignment to file , not stdout", 1 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL,"-o", NULL, "print info on merge to stdout; requires -o", 1 }, { "--small", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "use minimal RAM (RAM usage will be independent of aln sizes)", 1 }, { "--rfonly", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "remove all columns that are gaps in GC RF annotation", 1 }, { "--informat", eslARG_STRING, FALSE, NULL, NULL, NULL,NULL, NULL, "NOT YET DISPLAYED", 99 }, { "--outformat",eslARG_STRING, FALSE, NULL, NULL, NULL,NULL, NULL, "specify that output aln be format (see choices above)", 1 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--amino,--rna", "alignments to merge are RNA alignments", 1 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--amino,--rna", "alignments to merge are DNA alignments", 1 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--dna,--rna", "alignments to merge are protein alignments", 1 }, { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "arrest after start: for debugging under gdb", 99 }, { 0,0,0,0,0,0,0,0,0,0 }, }; int main(int argc, char **argv) { int status; /* easel return code */ ESL_GETOPTS *go = NULL; /* application configuration */ ESL_ALPHABET *abc = NULL; /* biological alphabet */ char *msafile1 = NULL; /* msa file 1 (stays NULL if --list) */ char *msafile2 = NULL; /* msa file 2 (stays NULL if --list) */ char *listfile = NULL; /* list file name (stays NULL unless --list) */ int infmt = eslMSAFILE_UNKNOWN; /* format code for input alifiles */ int outfmt = eslMSAFILE_UNKNOWN; /* format code for output ali */ ESLX_MSAFILE *afp = NULL; /* open alignment file, normal interface */ ESL_MSAFILE2 *afp2 = NULL; /* open alignment file, small-mem interface */ FILE *ofp; /* output file (default is stdout) */ char **alifile_list = NULL; /* list of alignment files to merge */ int nalifile; /* size of alifile_list */ int do_stall; /* used to stall when debugging */ int fi; /* counter over alignment files */ int ai, ai2; /* counters over alignments */ int nali_tot; /* number of alignments in all files */ int *nali_per_file = NULL; /* [0..nalifile-1] number of alignments per file */ int nseq_tot; /* number of sequences in all alignments */ int nseq_cur; /* number of sequences in current alignment */ int64_t alen_cur; /* length of current alignment */ int64_t *alenA = NULL; /* [0..nali_tot-1] alignment length of input msas (even after * potentially removingeinserts (--rfonly)) */ ESL_MSA **msaA = NULL; /* [0..nali_tot-1] all msas read from all files */ int *maxgap = NULL; /* [0..cpos..cm->clen+1] max number of gap columns * before each consensus position in all alignments */ int *maxmis = NULL; /* [0..cpos..cm->clen+1] max number of missing data columns * before each consensus position in all alignments */ int nalloc = 0; /* current size of msaA */ int chunksize = 10; /* size to increase nalloc by when realloc'ing */ void *tmp; /* for ESL_RALLOC() */ int clen; /* consensus length (non-gap #=GC RF length) of all alignments */ int cur_clen; /* consensus length (non-gap #=GC RF length) of current alignments */ int apos; /* alignment position */ ESL_MSA *mmsa = NULL; /* the merged alignment created by merging all alignments in msaA */ int alen_mmsa; /* number of columns in merged MSA */ char errbuf[eslERRBUFSIZE]; /* buffer for error messages */ char *tmpstr; /* used if -v, for printing file names */ int **usemeA = NULL; /* [0..nali_tot-1][0..alen] used only if --rfonly enabled, for removing gap RF columns */ ESL_STOPWATCH *w = NULL; /* for timing the merge, only used if -o enabled */ int do_small; /* TRUE if --small, operate in special small memory mode, aln seq data is not stored */ int do_rfonly; /* TRUE if --rfonly, output only non-gap RF columns (remove all insert columns) */ int *ngapA = NULL; /* [0..alen] number of insert gap columns to add after each alignment column when merging */ int *nmisA = NULL; /* [0..alen] number of missing data ('~') gap columns to add after each alignment column when merging */ int *neitherA = NULL; /* [0..apos..alen] = ngapA[apos] + nmisA[apos] */ /* output formatting, only relevant if -v */ char *namedashes = NULL; /* string of dashes, an underline */ int ni; /* counter */ int namewidth; /* max width of file name */ int tmp_len; /* current width of merged aln */ /* variables only used in small mode (--small) */ int ngs_cur; /* number of GS lines in current alignment (only used if do_small) */ int gs_exists = FALSE; /* set to TRUE if do_small and any input aln has >= 1 GS line */ int maxname, maxgf, maxgc, maxgr; /* max length of seqname, GF tag, GC tag, GR tag in all input alignments */ int maxname_cur, maxgf_cur, maxgc_cur, maxgr_cur; /* max length of seqname, GF tag, GC tag, GR tag in current input alignment */ int margin; /* total margin length for output msa */ /*********************************************** * Parse command line ***********************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_usage(stdout, argv[0], usage1); esl_usage(stdout, argv[0], usage2); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "-h") ) { esl_banner(stdout, argv[0], banner); esl_usage (stdout, argv[0], usage1); esl_usage (stdout, argv[0], usage2); puts("\n where options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); exit(0); } if(((! esl_opt_GetBoolean(go, "--list")) && (esl_opt_ArgNumber(go) != 2)) || (( esl_opt_GetBoolean(go, "--list")) && (esl_opt_ArgNumber(go) != 1))) { printf("Incorrect number of command line arguments.\n"); esl_usage(stdout, argv[0], usage1); esl_usage(stdout, argv[0], usage2); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if(esl_opt_GetBoolean(go, "--list")) { listfile = esl_opt_GetArg(go, 1); } else { msafile1 = esl_opt_GetArg(go, 1); msafile2 = esl_opt_GetArg(go, 2); } do_small = (esl_opt_IsOn(go, "--small")) ? TRUE : FALSE; do_rfonly = (esl_opt_IsOn(go, "--rfonly")) ? TRUE : FALSE; /* open output file */ if (esl_opt_GetString(go, "-o") != NULL) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) esl_fatal("Failed to open -o output file %s\n", esl_opt_GetString(go, "-o")); } else ofp = stdout; if (esl_opt_IsOn(go, "--informat")) { infmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--informat")); if (infmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat", esl_opt_GetString(go, "--informat")); if (do_small && infmt != eslMSAFILE_PFAM) esl_fatal("small memory mode requires Pfam formatted alignments"); } if (esl_opt_IsOn(go, "--outformat")) { outfmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--outformat")); if (outfmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --outformat", esl_opt_GetString(go, "--outformat")); if (do_small && outfmt != eslMSAFILE_PFAM) esl_fatal("we can only output Pfam formatted alignments in small memory mode"); } else outfmt = eslMSAFILE_STOCKHOLM; if (do_small) { infmt = eslMSAFILE_PFAM; /* this must be true, else we can't do small memory mode */ outfmt = eslMSAFILE_PFAM; } do_stall = esl_opt_GetBoolean(go, "--stall"); /* a stall point for attaching gdb */ while (do_stall); /* determine file names to merge */ if(listfile != NULL) { /* read list file */ read_list_file(listfile, &alifile_list, &nalifile); if(nalifile == 0) esl_fatal("Failed to read a single alignment file name from %s\n", listfile); } else { /* we're merging two alignment files from command-line */ nalifile = 2; ESL_ALLOC(alifile_list, sizeof(char *) * nalifile); if((status = esl_strdup(msafile1, -1, &(alifile_list[0]))) != eslOK) esl_fatal("Error storing alignment file name %s, error status: %d\n", msafile1, status); if((status = esl_strdup(msafile2, -1, &(alifile_list[1]))) != eslOK) esl_fatal("Error storing alignment file name %s, error status: %d\n", msafile2, status); } /* create and start stopwatch */ if(ofp != stdout) { w = esl_stopwatch_Create(); esl_stopwatch_Start(w); } if(esl_opt_GetBoolean(go, "-v")) { /* determine the longest file name in alifile_list */ namewidth = 9; /* length of 'file name' */ for(fi = 0; fi < nalifile; fi++) { if((status = esl_FileTail(alifile_list[fi], FALSE, &tmpstr)) != eslOK) esl_fatal("Memory allocation error."); namewidth = ESL_MAX(namewidth, strlen(tmpstr)); free(tmpstr); } ESL_ALLOC(namedashes, sizeof(char) * (namewidth+1)); namedashes[namewidth] = '\0'; for(ni = 0; ni < namewidth; ni++) namedashes[ni] = '-'; fprintf(stdout, "# Reading %d alignment files...\n", nalifile); fprintf(stdout, "#\n"); fprintf(stdout, "# %7s %-*s %7s %9s %9s %13s %8s\n", "", namewidth,"", "", "", "", "", "ncols"); fprintf(stdout, "# %7s %-*s %7s %9s %9s %13s %8s\n", "file #", namewidth,"file name", "ali #", "#seq/ali", "ncols/ali", "# seq total", "required"); fprintf(stdout, "# %7s %*s %7s %9s %9s %13s %8s\n", "-------", namewidth, namedashes, "-------", "---------", "---------", "-------------", "--------"); } /* Allocate and initialize */ nalloc = chunksize; ESL_ALLOC(msaA, sizeof(ESL_MSA *) * nalloc); ESL_ALLOC(alenA, sizeof(int64_t) * nalloc); if(do_rfonly) ESL_ALLOC(usemeA, sizeof(int *) * nalloc); /* abc handling is weird. We only use alphabet to define gap characters in this miniapp. * msa's are actually read in text mode. Thus eslRNA suffices for anything. */ if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); else if (do_small) abc = esl_alphabet_Create(eslRNA); /* alphabet is only used to define gap characters, so (in this miniapp) we're okay specifying RNA for any alignment (even non-RNA ones) */ else abc = esl_alphabet_Create(eslRNA); /* ditto */ /**************************************************************** * Read alignments one at a time, storing them all, separately * ****************************************************************/ ai = 0; nseq_tot = 0; maxname = maxgf = maxgc = maxgr = 0; ESL_ALLOC(nali_per_file, sizeof(int) * nalifile); esl_vec_ISet(nali_per_file, nalifile, 0); for (fi = 0; fi < nalifile; fi++) { if (do_small) { status = esl_msafile2_Open(alifile_list[fi], NULL, &afp2); if (status == eslENOTFOUND) esl_fatal("Alignment file %s doesn't exist or is not readable\n", alifile_list[fi]); else if (status != eslOK) esl_fatal("Alignment file %s open failed with error %d\n", alifile_list[fi], status); } else { status = eslx_msafile_Open(NULL, alifile_list[fi], NULL, infmt, NULL, &afp); if (status != eslOK) eslx_msafile_OpenFailure(afp, status); } /* while loop: while we have an alignment in current alignment file, (statement looks weird b/c we use a different function if --small) */ while((status = (do_small) ? esl_msafile2_ReadInfoPfam(afp2, NULL, NULL, -1, NULL,NULL, &(msaA[ai]), &nseq_cur, &alen_cur, &ngs_cur, &maxname_cur, &maxgf_cur, &maxgc_cur, &maxgr_cur, NULL, NULL, NULL, NULL, NULL) : eslx_msafile_Read (afp, &(msaA[ai]))) == eslOK) { if(msaA[ai]->rf == NULL) esl_fatal("Error, all alignments must have #=GC RF annotation; alignment %d of file %d does not (%s)\n", nali_per_file[fi], (fi+1), alifile_list[fi]); msaA[ai]->abc = abc; /* msa's are read in text mode, so this is (currently) only used to define gap characters, it doesn't even have to be the correct alphabet. if --small, this is set as RNA regardless of input */ if (do_small) { maxname = ESL_MAX(maxname, maxname_cur); maxgf = ESL_MAX(maxgf, maxgf_cur); maxgc = ESL_MAX(maxgc, maxgc_cur); maxgr = ESL_MAX(maxgr, maxgr_cur); msaA[ai]->alen = alen_cur; if(ngs_cur > 0) gs_exists = TRUE; } else { nseq_cur = msaA[ai]->nseq; } alenA[ai] = msaA[ai]->alen; /* impt if --small and --rfonly, to remember total width of aln to expect in second pass */ nali_per_file[fi]++; nseq_tot += nseq_cur; /* reallocate per-alignment data, if nec */ if((ai+1) == nalloc) { nalloc += chunksize; ESL_RALLOC(msaA, tmp, sizeof(ESL_MSA *) * nalloc); ESL_RALLOC(alenA, tmp, sizeof(int64_t) * nalloc); for(ai2 = ai+1; ai2 < nalloc; ai2++) { msaA[ai2] = NULL; } if(do_rfonly) { ESL_RALLOC(usemeA, tmp, sizeof(int *) * nalloc); for(ai2 = ai+1; ai2 < nalloc; ai2++) { usemeA[ai2] = NULL; } } } /* either store consensus (non-gap RF) length (if first aln), or verify it is what we expect */ cur_clen = 0; for(apos = 0; apos < (int) msaA[ai]->alen; apos++) { if(rfchar_is_nongap_nonmissing(msaA[ai]->abc, msaA[ai]->rf[apos])) cur_clen++; } if(ai == 0) { /* first alignment, store clen, allocate maxgap, maxmis */ clen = cur_clen; ESL_ALLOC(maxgap, sizeof(int) * (clen+1)); esl_vec_ISet(maxgap, (clen+1), 0); ESL_ALLOC(maxmis, sizeof(int) * (clen+1)); esl_vec_ISet(maxmis, (clen+1), 0); /* these will all stay 0 unless we see '~' in the alignments */ } else if(cur_clen != clen) { esl_fatal("Error, all alignments must have identical non-gap #=GC RF lengths; expected (RF length of first ali read): %d,\nalignment %d of file %d length is %d (%s))\n", clen, nali_per_file[fi], (fi+1), cur_clen, alifile_list[fi]); } if(do_rfonly) { /* Remove all columns that are gaps/missing data in the RF annotation, we keep an array of usemes, * one per aln, in case of --small, so we know useme upon second pass of alignment files */ ESL_ALLOC(usemeA[ai], sizeof(int) * (msaA[ai]->alen)); for(apos = 0; apos < msaA[ai]->alen; apos++) { usemeA[ai][apos] = (rfchar_is_nongap_nonmissing(abc, msaA[ai]->rf[apos])) ? TRUE : FALSE; } if((status = esl_msa_ColumnSubset(msaA[ai], errbuf, usemeA[ai])) != eslOK) { esl_fatal("status code: %d removing gap RF columns for msa %d from file %s:\n%s", status, (ai+1), alifile_list[fi], errbuf); } } else { /* --rfonly not enabled, determine max number inserts between each position */ /* update_maxgap_and_maxmis checks to make sure the msa follows our rule for missing data and gaps: * for all positions x..y b/t any two adjacent nongap RF positions (x-1 and y+1 are nongap RF positions) * all missing data columns '~' must come before all gap positions ('.', '-', or '_') */ if((status = update_maxgap_and_maxmis(msaA[ai], errbuf, clen, msaA[ai]->alen, maxgap, maxmis)) != eslOK) esl_fatal(errbuf); } if(esl_opt_GetBoolean(go, "-v")) { if((status = esl_FileTail(alifile_list[fi], FALSE, &tmpstr)) != eslOK) esl_fatal("Memory allocation error."); tmp_len = clen + esl_vec_ISum(maxgap, clen+1) + esl_vec_ISum(maxmis, clen+1); fprintf(stdout, " %7d %-*s %7d %9d %9" PRId64 " %13d %8d\n", (fi+1), namewidth, tmpstr, (ai+1), nseq_cur, msaA[ai]->alen, nseq_tot, tmp_len); free(tmpstr); } ai++; } /* end of while eslx_msafile_Read() loop */ if (do_small) { if (status == eslEFORMAT) esl_fatal("Alignment file %s, parse error:\n%s\n", alifile_list[fi], afp2->errbuf); else if (status == eslEINVAL) esl_fatal("Alignment file %s, parse error:\n%s\n", alifile_list[fi], afp2->errbuf); else if (status != eslEOF) esl_fatal("Alignment file %s, read failed with error code %d\n", alifile_list[fi], status); } else if (status != eslEOF) eslx_msafile_ReadFailure(afp, status); if(nali_per_file[fi] == 0) esl_fatal("Failed to read any alignments from file %s\n", alifile_list[fi]); if (do_small) esl_msafile2_Close(afp2); else eslx_msafile_Close(afp); } /* end of for (fi=0; fi < nalifile; fi++) */ nali_tot = ai; /********************************************* * Merge all alignments into the merged MSA * *********************************************/ /* We allocate space for all sequences, but leave sequences as NULL (nseq = -1). * If (do_small) we didn't store the sequences on the first pass through the * alignment files, and we'll never allocate space for the sequences in mmsa, * we'll just output them as we reread them on another pass through the * individual alignments. If we read >= 1 GS line in any of the input alignments, * we need to do an additional pass through the files, outputting only GS * data. Then, in a final (3rd) pass we'll output aligned data. * * if (!do_small), we have the sequences in memory, we'll copy these * to the merged alignment, freeing them in the orignal msaA alignments * as we go so we never need to allocate the full mmsa while we still have * the individual msas (in msaA[]) in memory. */ mmsa = esl_msa_Create(nseq_tot, -1); alen_mmsa = clen + esl_vec_ISum(maxgap, clen+1) + esl_vec_ISum(maxmis, clen+1); /* Determine what annotation from the input alignments * we will include in the merged MSA. * See comments in header of validate_and_copy_msa_annotation() * for rules on what we include. */ if((status = validate_and_copy_msa_annotation(go, outfmt, mmsa, msaA, nali_tot, clen, alen_mmsa, maxgap, maxmis, errbuf)) != eslOK) esl_fatal("Error while checking and copying individual MSA annotation to merged MSA:%s\n", errbuf); if (do_small) { /* Small memory mode, do up to 2 more passes through the input alignments: * pass 2 will output only GS data at top of output alignment file (only performed if >= 1 GS line read in input files * pass 3 will output all aligned data at to output alignment file (always performed) */ /* output header, comments, and #=GF data */ write_pfam_msa_top(ofp, mmsa); if(ofp != stdout) { if(esl_opt_GetBoolean(go, "-v")) { fprintf(stdout, "#\n"); } fprintf(stdout, "# Outputting merged alignment to file %s ... ", esl_opt_GetString(go, "-o")); fflush(stdout); } /* if there was any GS annotation in any of the individual alignments, * do second pass through alignment files, outputting GS annotation as we go. */ if(gs_exists) { ai = 0; for(fi = 0; fi < nalifile; fi++) { /* we're in small memory mode... */ status = esl_msafile2_Open(alifile_list[fi], NULL, &afp2); /* this should work b/c it did on the first pass */ if (status == eslENOTFOUND) esl_fatal("Second pass, alignment file %s doesn't exist or is not readable\n", alifile_list[fi]); else if (status == eslEFORMAT) esl_fatal("Second pass, couldn't determine format of alignment %s\n", alifile_list[fi]); else if (status != eslOK) esl_fatal("Second pass, alignment file %s open failed with error %d\n", alifile_list[fi], status); for(ai2 = 0; ai2 < nali_per_file[fi]; ai2++) { status = esl_msafile2_RegurgitatePfam(afp2, ofp, maxname, maxgf, maxgc, maxgr, /* max width of a seq name, gf tag, gc tag, gr tag (irrelevant here) */ FALSE, /* regurgitate stockholm header ? */ FALSE, /* regurgitate // trailer ? */ FALSE, /* regurgitate blank lines */ FALSE, /* regurgitate comments */ FALSE, /* regurgitate GF ? */ TRUE, /* regurgitate GS ? */ FALSE, /* regurgitate GC ? */ FALSE, /* regurgitate GR ? */ FALSE, /* regurgitate aseq ? */ NULL, /* regurgitate all seqs, not a subset */ NULL, /* regurgitate all seqs, not a subset */ NULL, /* we're not keeping a subset of columns */ NULL, /* we're not adding all gap columns */ alenA[ai], /* alignment length, as we read it in first pass (inserts may have been removed since then) */ '.', /* gap char, irrelevant */ NULL, /* don't return num seqs read */ NULL); /* don't return num seqs regurgitated */ if(status == eslEOF) esl_fatal("Second pass, error out of alignments too soon, when trying to read aln %d of file %s", ai2, alifile_list[fi]); if(status != eslOK) esl_fatal("Second pass, error reading alignment %d of file %s: %s", ai2, alifile_list[fi], afp2->errbuf); ai++; fflush(ofp); } esl_msafile2_Close(afp2); } fprintf(ofp, "\n"); /* a single blank line to separate GS annotation from aligned data */ } /* do another (either second or third) pass through alignment files, outputting aligned sequence data (and GR) as we go */ ai = 0; for(fi = 0; fi < nalifile; fi++) { status = esl_msafile2_Open(alifile_list[fi], NULL, &afp2); /* this should work b/c it did on the first pass */ if (status == eslENOTFOUND) esl_fatal("Second pass, alignment file %s doesn't exist or is not readable\n", alifile_list[fi]); else if (status == eslEFORMAT) esl_fatal("Second pass, couldn't determine format of alignment %s\n", alifile_list[fi]); else if (status != eslOK) esl_fatal("Second pass, alignment file %s open failed with error %d\n", alifile_list[fi], status); for(ai2 = 0; ai2 < nali_per_file[fi]; ai2++) { /* determine how many all gap columns to insert after each alignment position * of the child msa when copying it to the merged msa */ if(! do_rfonly) { if((status = determine_gap_columns_to_add(msaA[ai], maxgap, maxmis, clen, &(ngapA), &(nmisA), &(neitherA), errbuf)) != eslOK) esl_fatal("error determining number of all gap columns to add to alignment %d of file %s", ai2, alifile_list[fi]); } status = esl_msafile2_RegurgitatePfam(afp2, ofp, maxname, maxgf, maxgc, maxgr, /* max width of a seq name, gf tag, gc tag, gr tag */ FALSE, /* regurgitate stockholm header ? */ FALSE, /* regurgitate // trailer ? */ FALSE, /* regurgitate blank lines */ FALSE, /* regurgitate comments */ FALSE, /* regurgitate GF ? */ FALSE, /* regurgitate GS ? */ FALSE, /* regurgitate GC ? */ TRUE, /* regurgitate GR ? */ TRUE, /* regurgitate aseq ? */ NULL, /* regurgitate all seqs, not a subset */ NULL, /* regurgitate all seqs, not a subset */ (do_rfonly) ? usemeA[ai] : NULL, (do_rfonly) ? NULL : neitherA, alenA[ai], /* alignment length, as we read it in first pass (inserts may have been removed since then) */ '.', NULL, /* don't return num seqs read */ NULL); /* don't return num seqs regurgitated */ if(status == eslEOF) esl_fatal("Second pass, error out of alignments too soon, when trying to read aln %d of file %s", ai2, alifile_list[fi]); if(status != eslOK) esl_fatal("Second pass, error reading alignment %d of file %s: %s", ai2, alifile_list[fi], afp2->errbuf); free(ngapA); free(nmisA); free(neitherA); esl_msa_Destroy(msaA[ai]); msaA[ai] = NULL; ai++; fflush(ofp); } esl_msafile2_Close(afp2); } /* finally, write GC annotation and '//' line */ margin = maxname + 1; if (maxgc > 0 && maxgc+6 > margin) margin = maxgc+6; if (maxgr > 0 && maxname+maxgr+7 > margin) margin = maxname+maxgr+7; write_pfam_msa_gc(ofp, mmsa, margin); } /* end of if(do_small) */ else { /* ! do_small: for each input alignment in msaA[], add all aligned data to mmsa, then free it */ if(esl_opt_GetBoolean(go, "-v")) { fprintf(stdout, "#\n# Merging alignments ... "); fflush(stdout); } for(ai = 0; ai < nali_tot; ai++) { if((status = add_msa(mmsa, errbuf, msaA[ai], maxgap, maxmis, clen, alen_mmsa)) != eslOK) esl_fatal("Error, merging alignment %d of %d:\n%s.", (ai+1), nali_tot, errbuf); esl_msa_Destroy(msaA[ai]); /* note: the aligned sequences will have already been freed in add_msa() */ msaA[ai] = NULL; } if(esl_opt_GetBoolean(go, "-v")) { fprintf(stdout, "done.\n#\n"); fflush(stdout); } mmsa->alen = alen_mmsa; /* it was -1, b/c we filled in each seq as we marched through each msaA[] alignment */ if(ofp != stdout) { fprintf(stdout, "# Saving alignment to file %s ... ", esl_opt_GetString(go, "-o")); } status = eslx_msafile_Write(ofp, mmsa, outfmt); if(status != eslOK) esl_fatal("Error, during alignment output; status code: %d\n", status); } if(ofp != stdout) { fflush(stdout); fclose(ofp); fprintf(stdout, "done\n#\n"); fflush(stdout); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); } /* clean up and exit */ if(alifile_list != NULL) { for(fi = 0; fi < nalifile; fi++) { if(alifile_list[fi] != NULL) free(alifile_list[fi]); } free(alifile_list); } if(usemeA != NULL) { for(ai = 0; ai < nali_tot; ai++) { free(usemeA[ai]); } free(usemeA); } if(nali_per_file != NULL) free(nali_per_file); if(alenA != NULL) free(alenA); if(namedashes != NULL) free(namedashes); if(msaA != NULL) free(msaA); if(maxgap != NULL) free(maxgap); if(maxmis != NULL) free(maxmis); if(mmsa != NULL) esl_msa_Destroy(mmsa); if(abc != NULL) esl_alphabet_Destroy(abc); if(w != NULL) esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; ERROR: esl_fatal("Out of memory. Reformat to Pfam with esl-reformat and try esl-alimerge --small."); return eslEMEM; /*NEVERREACHED*/ } /* Function: read_list_file * Date: EPN, Fri Nov 20 16:41:32 2009 * * Read a file listing alignment files to merge. * Store file names in *ret_alifile_list and return it, * return number of files in ret_nalifile and return it. * Each white-space delimited token is considered a * different alignment name. * * Dies if we encounter an error. * * Returns: void. */ void read_list_file(char *listfile, char ***ret_alifile_list, int *ret_nalifile) { int status; ESL_FILEPARSER *efp; char *tok; int nalloc = 10; int chunksize = 10; char **alifile_list = NULL; int n = 0; void *tmp; ESL_ALLOC(alifile_list, sizeof(char *) * nalloc); status = esl_fileparser_Open(listfile, NULL, &efp); if (status == eslENOTFOUND) esl_fatal("List file %s does not exist or is not readable\n", listfile); else if(status == eslEMEM) esl_fatal("Ran out of memory when opening list file %s\n", listfile); else if(status != eslOK) esl_fatal("Error opening list file %s\n", listfile); esl_fileparser_SetCommentChar(efp, '#'); while((status = esl_fileparser_GetToken(efp, &tok, NULL)) != eslEOF) { if(n == nalloc) { nalloc += chunksize; ESL_RALLOC(alifile_list, tmp, sizeof(char *) * nalloc); } if((status = esl_strdup(tok, -1, &(alifile_list[n++]))) != eslOK) { esl_fatal("Error storing alignment file name while reading list file %s, error status: %d\n", listfile, status); } } esl_fileparser_Close(efp); *ret_alifile_list = alifile_list; *ret_nalifile = n; return; ERROR: esl_fatal("Out of memory."); return; /*NOTREACHED*/ } /* Function: update_maxgap_and_maxmis * Date: EPN, Sun Nov 22 09:40:48 2009 * (stolen from Infernal's cmalign.c) * * Update maxgap[] and maxmis[], arrays that keeps track of the max * number of gap columns and missing data columns ('~' gap #=GC RF) * columns before each cpos (consensus (non-gap #=GC RF) column) * * We require that all missing columns between cpos x and x+1 occur before * all gap columns between cpos x and x+1. * * Consensus columns are index [0..cpos..clen]. * * max{gap,mis}[0] is number of gap/missing columns before 1st cpos. * max{gap,mis}[clen-1] is number of gap/missing columns before final cpos. * max{gap,mis}[clen] is number of gap/missing columns after final cpos. * * Returns: eslOK on success. * eslEINVAL if msa->rf is NULL, nongap RF length is not clen of * for any two cpos x and x+1, a gap column precedes a * missing data column. * */ int update_maxgap_and_maxmis(ESL_MSA *msa, char *errbuf, int clen, int64_t alen, int *maxgap, int *maxmis) { int apos; int cpos = 0; int ngap = 0; int nmis = 0; for(apos = 0; apos < alen; apos++) { if(esl_abc_CIsGap(msa->abc, msa->rf[apos])) { ngap++; } else if (esl_abc_CIsMissing(msa->abc, msa->rf[apos])) { nmis++; if(ngap > 0) ESL_FAIL(eslEINVAL, errbuf, "after nongap RF pos %d, %d gap columns precede a missing data column (none should)", cpos, ngap); } else { maxgap[cpos] = ESL_MAX(maxgap[cpos], ngap); maxmis[cpos] = ESL_MAX(maxmis[cpos], nmis); cpos++; ngap = 0; nmis = 0; } } /* update final value, max{ins,el}[clen+1], the number of inserts * after the final consensus position */ maxgap[cpos] = ESL_MAX(maxgap[cpos], ngap); maxmis[cpos] = ESL_MAX(maxmis[cpos], nmis); if(cpos != clen) ESL_FAIL(eslEINVAL, errbuf, "second pass expected clen (%d) not equal to actual clen (%d).\n", clen, cpos); return eslOK; } /* Function: validate_and_copy_msa_annotation * Date: EPN, Tue Nov 24 05:35:50 2009 * * Decide what individual MSA annotation from * the input alignments in msaA[], if any, will be * included in the merged alignment (mmsa) and * add that info to it. * * Rules for what to include in mmsa: * * We include name,desc,acc,author annotation in merged alignment * if it is identical in all msaA[] input alignments. * * We include comments and per-file (GF) annotation if they * are present and identical in all input msaA[] alignments. * * We include per-column (GC) annotation if it is present and * identical *with-respect-to* #=GC RF annotation AND all * the annotation in gap #=GC RF columns in all msaA[] are gaps * ('.'). This also pertains to the following parsed per-column * annotation: ss_cons, sa_cons, pp_cons, and rf. With rf, * de-gapped rf annotation must be identical in all input * alignments period, if it is not we'll die with an error message. * * Per-sequence information and per-residue information is always * included in merged alignment. This is done by add_msa() function. * * Returns: eslOK on success. * eslEINCONCEIVABLE if input/msa is corrupt in some way (example: ngf>0 but gf_tag[0] == NULL) * eslEMEM on memory error * if !eslOK, errbuf is filled before return */ int validate_and_copy_msa_annotation(const ESL_GETOPTS *go, int outfmt, ESL_MSA *mmsa, ESL_MSA **msaA, int nmsa, int clen, int alen_merged, int *maxgap, int *maxmis, char *errbuf) { int status; int j; /* counter over alignment annotations */ int j2; /* counter over alignment annotations */ int ai; /* counter over alignments */ char *dealigned = NULL; /* a temporary, dealigned string */ char *dealigned2 = NULL; /* another temporary, dealigned string */ char *gapped_out = NULL; /* a temporary string with gaps added to fit into merged aln */ int *ngapA = NULL; /* [0..alen] number of insert gap columns to add after each alignment column when merging */ int *nmisA = NULL; /* [0..alen] number of missing data ('~') gap columns to add after each alignment column when merging */ int *neitherA = NULL; /* [0..apos..alen] = ngapA[apos] + nmisA[apos] */ int do_add; int found_tag; int be_verbose = FALSE; /* we only print info about annotation if -v AND we'll actually * output it (as stockholm or pfam) * (we actually don't even need to be in this function if we're * not output in stockholm or pfam...) */ if((esl_opt_GetBoolean(go, "-v")) && (outfmt == eslMSAFILE_STOCKHOLM || outfmt == eslMSAFILE_PFAM)) { be_verbose = TRUE; } if(be_verbose) fprintf(stdout, "#\n"); if(nmsa == 0) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "in validate_and_copy_msa_annotation(): zero child alignments."); /* First, determine how many all gap columns to insert after each alignment position * of the first child msa, so we can (possibly) gap out GC,SS_cons,SA_cons,PP_cons annotation * to appropriate length when adding it to the merged MSA. */ if((status = determine_gap_columns_to_add(msaA[0], maxgap, maxmis, clen, &(ngapA), &(nmisA), &(neitherA), errbuf)) != eslOK) return status; /* Note: esl_strcmp() can handle NULL strings (they are not identical to non-NULL strings) */ /*********************************************************************/ /* Check if name annotation is identical in all alignments */ do_add = TRUE; /* until proven otherwise */ if(msaA[0]->name != NULL) { for(ai = 1; ai < nmsa; ai++) { if(esl_strcmp(msaA[0]->name, msaA[ai]->name) != 0) { do_add = FALSE; break; } } if(do_add) { if(be_verbose) fprintf(stdout, "# Identical name annotation from all alignments transferred to merged alignment.\n"); if((status = esl_strdup(msaA[0]->name, -1, &(mmsa->name))) != eslOK) goto ERROR; } else if(be_verbose) fprintf(stdout, "# Name annotation is not identical in all alignments; not included in merged alignment.\n"); } else if(be_verbose) fprintf(stdout, "# Name annotation absent from (at least) first alignment; not included in merged alignment.\n"); /*********************************************************************/ /* Check if description annotation is identical in all alignments */ do_add = TRUE; /* until proven otherwise */ if(msaA[0]->desc != NULL) { for(ai = 1; ai < nmsa; ai++) { if(esl_strcmp(msaA[0]->desc, msaA[ai]->desc) != 0) { do_add = FALSE; break; } } if(do_add) { if(be_verbose) fprintf(stdout, "# Identical description annotation from all alignments transferred to merged alignment.\n"); if((status = esl_strdup(msaA[0]->desc, -1, &(mmsa->desc))) != eslOK) goto ERROR; } else if(be_verbose) fprintf(stdout, "# Description annotation is not identical in all alignments; not included in merged alignment.\n"); } else if(be_verbose) fprintf(stdout, "# Description annotation absent from (at least) first alignment; not included in merged alignment.\n"); /*********************************************************************/ /* Check if accession annotation is identical in all alignments */ do_add = TRUE; /* until proven otherwise */ if(msaA[0]->acc != NULL) { for(ai = 1; ai < nmsa; ai++) { if(esl_strcmp(msaA[0]->acc, msaA[ai]->acc) != 0) { do_add = FALSE; break; } } if(do_add) { if(be_verbose) fprintf(stdout, "# Identical accession annotation from all alignments transferred to merged alignment.\n"); if((status = esl_strdup(msaA[0]->acc, -1, &(mmsa->acc))) != eslOK) goto ERROR; } else if(be_verbose) fprintf(stdout, "# Accession annotation is not identical in all alignments; not included in merged alignment.\n"); } else if(be_verbose) fprintf(stdout, "# Accession annotation absent from (at least) first alignment; not included in merged alignment.\n"); /*********************************************************************/ /* Check if author annotation is identical in all alignments */ do_add = TRUE; /* until proven otherwise */ if(msaA[0]->au != NULL) { for(ai = 1; ai < nmsa; ai++) { if(esl_strcmp(msaA[0]->au, msaA[ai]->au) != 0) { do_add = FALSE; break; } } if(do_add) { if(be_verbose) fprintf(stdout, "# Identical author annotation from all alignments transferred to merged alignment.\n"); if((status = esl_strdup(msaA[0]->au, -1, &(mmsa->au))) != eslOK) goto ERROR; } else if(be_verbose) fprintf(stdout, "# Author annotation is not identical in all alignments; not included in merged alignment.\n"); } else if(be_verbose) fprintf(stdout, "# Author annotation absent from (at least) first alignment; not included in merged alignment.\n"); /*********************************************************************/ /* Check per-file (GF) annotation, must be present and identical in all msaA[] alignments to be included */ if(msaA[0]->ngf > 0) { for(j = 0; j < msaA[0]->ngf; j++) { do_add = TRUE; /* until proven otherwise */ /* verify that what we think is true is true */ if(msaA[0]->gf_tag[j] == NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpectedly, GF tag %d of msaA[0] is NULL, but msaA[0]->ngf is %d.\n", j, msaA[0]->ngf); if(msaA[0]->gf[j] == NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpectedly, GF annotation %d of msaA[0] is NULL, but msaA[0]->ngf is %d.\n", j, msaA[0]->ngf); for(ai = 1; ai < nmsa; ai++) { found_tag = FALSE; for(j2 = 0; j2 < msaA[ai]->ngf; j2++) { if(esl_strcmp(msaA[0]->gf_tag[j], msaA[ai]->gf_tag[j2]) == 0) { found_tag = TRUE; if(esl_strcmp(msaA[0]->gf[j], msaA[ai]->gf_tag[j2]) != 0) { do_add = FALSE; } break; /* if we found a match, do_add remains TRUE */ } } if(found_tag && do_add) { if(be_verbose) fprintf(stdout, "# Identical GF tag %s annotation from all alignments transferred to merged alignment.\n", msaA[0]->gf_tag[j]); if((status = esl_msa_AddGF(mmsa, msaA[0]->gf_tag[j], -1, msaA[0]->gf[j], -1)) != eslOK) goto ERROR; } else { if(be_verbose) fprintf(stdout, "# GF tag %s annotation from first alignment absent from >= 1 other alignments; not included in merged alignment.\n", msaA[0]->gf_tag[j]); } } } } else if(be_verbose) fprintf(stdout, "# Unparsed GF annotation absent from (at least) first alignment; not included in merged alignment.\n"); /*********************************************************************/ /* Check comments, all must be identically ordered and identical in all msaA[] aligments to include them */ if(msaA[0]->ncomment > 0) { do_add = TRUE; /* until proven otherwise */ /* make sure all alignments have same number of comments */ for(ai = 1; ai < nmsa; ai++) { if(msaA[ai]->ncomment != msaA[0]->ncomment) { do_add = FALSE; break; } } if(do_add) { /* make sure all alignments have identical comments */ for(j = 0; j < msaA[0]->ncomment; j++) { /* verify that what we think is true is true */ if(msaA[0]->comment[j] == NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpectedly, comment %d of msaA[0] is NULL, but msaA[0]->ncomment is %d.\n", j, msaA[0]->ncomment); for(ai = 1; ai < nmsa; ai++) { if(esl_strcmp(msaA[0]->comment[j], msaA[ai]->comment[j]) != 0) { /* comment doesn't match */ do_add = FALSE; break; } } } } if(do_add) { for(j = 0; j < msaA[0]->ncomment; j++) { if((status = esl_msa_AddComment(mmsa, msaA[0]->comment[j], -1))!= eslOK) goto ERROR; } if(be_verbose) fprintf(stdout, "# All alignments have identical comments in the same order. These were transferred to merged alignment.\n"); } else { if(be_verbose) fprintf(stdout, "# Comments are not identical in all alignments; not included in merged alignment.\n"); } } else if(be_verbose) fprintf(stdout, "# No comments in (at least) first alignment; not included in merged alignment.\n"); /*********************************************************************/ /* Check unparsed per-column (GC) annotation, it must include all gaps in gap RF columns and * be identical once gap RF columns are removed in all msaA[] alignments to be included. */ if(msaA[0]->ngc > 0) { for(j = 0; j < msaA[0]->ngc; j++) { do_add = TRUE; /* until proven otherwise */ /* verify that what we think is true is true */ if(msaA[0]->gc_tag[j] == NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpectedly, GC tag %d of msaA[0] is NULL, but msaA[0]->ngf is %d.\n", j, msaA[0]->ngc); if(msaA[0]->gc[j] == NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpectedly, GC annotation %d of msaA[0] is NULL, but msaA[0]->ngf is %d.\n", j, msaA[0]->ngc); /* ensure it does not have non-gaps in gap RF columns */ if(validate_no_nongaps_in_rf_gaps(msaA[0]->abc, msaA[0]->rf, msaA[0]->gc[j], msaA[0]->alen)) { /* returns TRUE if gc[j] has 0 non-gap characters in gap columns of RF annotation */ /* dealign gc line */ if((status = esl_strdup(msaA[0]->gc[j], msaA[0]->alen, &(dealigned))) != eslOK) goto ERROR; if((status = esl_strdealign(dealigned, msaA[0]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning GC tag %s of msaA[0]", msaA[0]->gc_tag[j]); for(ai = 1; ai < nmsa; ai++) { found_tag = FALSE; for(j2 = 0; j2 < msaA[ai]->ngc; j2++) { if(esl_strcmp(msaA[0]->gc_tag[j], msaA[ai]->gc_tag[j2]) == 0) { found_tag = TRUE; /* ensure it does not have non-gaps in gap RF columns */ if(validate_no_nongaps_in_rf_gaps(msaA[ai]->abc, msaA[ai]->rf, msaA[ai]->gc[j2], msaA[ai]->alen)) { /* returns TRUE if gc[j2] has 0 non-gap characters in gap columns of RF annotation */ /* dealign */ if((status = esl_strdup(msaA[ai]->gc[j2], msaA[ai]->alen, &(dealigned2))) != eslOK) goto ERROR; if((status = esl_strdealign(dealigned2, msaA[ai]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning GC tag %s of msaA[%d]", msaA[ai]->gc_tag[j2], ai); /* check identity */ if(esl_strcmp(dealigned, dealigned2) != 0) { do_add = FALSE; } free(dealigned2); dealigned2 = NULL; break; /* if we matched, do_add remains TRUE */ } } } } /* end of (for(ai = 1...)) */ if(dealigned != NULL) { free(dealigned); dealigned = NULL; } if(found_tag && do_add) { /* gap out the the GC annotation to fit in merged alignment */ if((status = inflate_string_with_gaps_and_missing(msaA[0]->gc[j], msaA[0]->alen, alen_merged, neitherA, '.', NULL, '~', &(gapped_out))) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding gaps to create GC tag %s annotation for merged alignment.", msaA[0]->gc_tag[j]); if((status = esl_msa_AppendGC(mmsa, msaA[0]->gc_tag[j], gapped_out)) != eslOK) goto ERROR; free(gapped_out); gapped_out = NULL; if(be_verbose) fprintf(stdout, "# Identical GC tag %s annotation from all alignments transferred to merged alignment.\n", msaA[0]->gc_tag[j]); } else { if(be_verbose) fprintf(stdout, "# GC tag %s annotation from first alignment absent from or different in >= 1 other alignments; not included in merged alignment.\n", msaA[0]->gc_tag[j]); } } } /* end of for(j = 0 j < msaA[0]->ngc... */ } /* end of if(msaA[0]->ngc > 0) */ else if(be_verbose) fprintf(stdout, "# Unparsed GC annotation absent from (at least) first alignment; not included in merged alignment.\n"); /*********************************************************************/ /* Check ss_cons: it must include all gaps in gap RF columns and be identical once gap RF columns are removed in all * msaA[] alignments to be included. (Same requirements as unparsed GC annotation, so code block below is analogous to one above). */ if(msaA[0]->ss_cons != NULL) { do_add = TRUE; /* until proven otherwise */ /* ensure it does not have non-gaps in gap RF columns */ if(validate_no_nongaps_in_rf_gaps(msaA[0]->abc, msaA[0]->rf, msaA[0]->ss_cons, msaA[0]->alen)) { /* returns TRUE if ss_cons has 0 non-gap characters in gap columns of RF annotation */ /* dealign ss_cons */ if((status = esl_strdup(msaA[0]->ss_cons, msaA[0]->alen, &(dealigned))) != eslOK) goto ERROR; if((status = esl_strdealign(dealigned, msaA[0]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning ss_cons of msaA[0]"); for(ai = 1; ai < nmsa; ai++) { if(msaA[ai]->ss_cons == NULL) { do_add = FALSE; break; } /* ss_cons != NULL, ensure it does not have non-gaps in gap RF columns */ if(validate_no_nongaps_in_rf_gaps(msaA[ai]->abc, msaA[ai]->rf, msaA[ai]->ss_cons, msaA[ai]->alen)) { /* returns TRUE if ss_cons has 0 non-gap characters in gap columns of RF annotation */ /* dealign */ if((status = esl_strdup(msaA[ai]->ss_cons, msaA[ai]->alen, &(dealigned2))) != eslOK) goto ERROR; if((status = esl_strdealign(dealigned2, msaA[ai]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning ss_cons of msaA[%d]", ai); /* check identity */ if(esl_strcmp(dealigned, dealigned2) != 0) { do_add = FALSE; } free(dealigned2); dealigned2 = NULL; break; /* if we matched, do_add remains TRUE */ } } /* end of (for(ai = 1...)) */ if(dealigned != NULL) { free(dealigned); dealigned = NULL; } if(do_add) { /* gap out the the ss_cons to fit in merged alignment, * as a special case, we use '~' in SS_cons as we add missing data and gaps * like we do in RF (for all other annotation we only add gaps) */ if((status = inflate_string_with_gaps_and_missing(msaA[0]->ss_cons, msaA[0]->alen, alen_merged, ngapA, '.', nmisA, '~', &(gapped_out))) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding gaps to create SS_cons annotation for merged alignment."); if(mmsa->ss_cons != NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding SS_cons to merged alignment, it is already non-NULL."); if((status = esl_strdup(gapped_out, alen_merged, &(mmsa->ss_cons))) != eslOK) goto ERROR; free(gapped_out); gapped_out = NULL; if(be_verbose) fprintf(stdout, "# Identical SS_cons annotation from all alignments transferred to merged alignment.\n"); } else { if(be_verbose) fprintf(stdout, "# SS_cons annotation from first alignment absent from or different in >= 1 other alignments; not included in merged alignment.\n"); } } } /* end of if(msaA[0]->ss_cons != NULL) */ else if(be_verbose) fprintf(stdout, "# SS_cons annotation absent from (at least) first alignment; not included in merged alignment.\n"); /*********************************************************************/ /* Check sa_cons: it must include all gaps in gap RF columns and be identical once gap RF columns are removed in all * msaA[] alignments to be included. (Same requirements as unparsed GC annotation, so code block below is analogous to one above). */ if(msaA[0]->sa_cons != NULL) { do_add = TRUE; /* until proven otherwise */ /* ensure it does not have non-gaps in gap RF columns */ if(validate_no_nongaps_in_rf_gaps(msaA[0]->abc, msaA[0]->rf, msaA[0]->sa_cons, msaA[0]->alen)) { /* returns TRUE if sa_cons has 0 non-gap characters in gap columns of RF annotation */ /* dealign sa_cons */ if((status = esl_strdup(msaA[0]->sa_cons, msaA[0]->alen, &(dealigned))) != eslOK) goto ERROR; if((status = esl_strdealign(dealigned, msaA[0]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning sa_cons of msaA[0]"); for(ai = 1; ai < nmsa; ai++) { if(msaA[ai]->sa_cons == NULL) { do_add = FALSE; break; } /* sa_cons != NULL, ensure it does not have non-gaps in gap RF columns */ if(validate_no_nongaps_in_rf_gaps(msaA[ai]->abc, msaA[ai]->rf, msaA[ai]->sa_cons, msaA[ai]->alen)) { /* returns TRUE if sa_cons has 0 non-gap characters in gap columns of RF annotation */ /* dealign */ if((status = esl_strdup(msaA[ai]->sa_cons, msaA[ai]->alen, &(dealigned2))) != eslOK) goto ERROR; if((status = esl_strdealign(dealigned2, msaA[ai]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning sa_cons of msaA[%d]", ai); /* check identity */ if(esl_strcmp(dealigned, dealigned2) != 0) { do_add = FALSE; } free(dealigned2); dealigned2 = NULL; break; /* if we matched, do_add remains TRUE */ } } /* end of (for(ai = 1...)) */ if(dealigned != NULL) { free(dealigned); dealigned = NULL; } if(do_add) { /* gap out the the sa_cons to fit in merged alignment */ if((status = inflate_string_with_gaps_and_missing(msaA[0]->sa_cons, msaA[0]->alen, alen_merged, neitherA, '.', NULL, '~', &(gapped_out))) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding gaps to create SA_cons annotation for merged alignment."); if(mmsa->sa_cons != NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding SA_cons to merged alignment, it is already non-NULL."); if((status = esl_strdup(gapped_out, alen_merged, &(mmsa->sa_cons))) != eslOK) goto ERROR; free(gapped_out); gapped_out = NULL; if(be_verbose) fprintf(stdout, "# Identical SA_cons annotation from all alignments transferred to merged alignment.\n"); } else { if(be_verbose) fprintf(stdout, "# SA_cons annotation from first alignment absent from or different in >= 1 other alignments; not included in merged alignment.\n"); } } } /* end of if(msaA[0]->sa_cons != NULL) */ else if(be_verbose) fprintf(stdout, "# SA_cons annotation absent from (at least) first alignment; not included in merged alignment.\n"); /*********************************************************************/ /* Check pp_cons: it must include all gaps in gap RF columns and be identical once gap RF columns are removed in all * msaA[] alignments to be included. (Same requirements as unparsed GC annotation, so code block below is analogous to one above). */ if(msaA[0]->pp_cons != NULL) { do_add = TRUE; /* until proven otherwise */ /* ensure it does not have non-gaps in gap RF columns */ if(validate_no_nongaps_in_rf_gaps(msaA[0]->abc, msaA[0]->rf, msaA[0]->pp_cons, msaA[0]->alen)) { /* returns TRUE if pp_cons has 0 non-gap characters in gap columns of RF annotation */ /* dealign pp_cons */ if((status = esl_strdup(msaA[0]->pp_cons, msaA[0]->alen, &(dealigned))) != eslOK) goto ERROR; if((status = esl_strdealign(dealigned, msaA[0]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning pp_cons of msaA[0]"); for(ai = 1; ai < nmsa; ai++) { if(msaA[ai]->pp_cons == NULL) { do_add = FALSE; break; } /* pp_cons != NULL, ensure it does not have non-gaps in gap RF columns */ if(validate_no_nongaps_in_rf_gaps(msaA[ai]->abc, msaA[ai]->rf, msaA[ai]->pp_cons, msaA[ai]->alen)) { /* returns TRUE if pp_cons has 0 non-gap characters in gap columns of RF annotation */ /* dealign */ if((status = esl_strdup(msaA[ai]->pp_cons, msaA[ai]->alen, &(dealigned2))) != eslOK) goto ERROR; if((status = esl_strdealign(dealigned2, msaA[ai]->rf, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning pp_cons of msaA[%d]", ai); /* check identity */ if(esl_strcmp(dealigned, dealigned2) != 0) { do_add = FALSE; } free(dealigned2); dealigned2 = NULL; break; /* if we matched, do_add remains TRUE */ } } /* end of (for(ai = 1...)) */ if(dealigned != NULL) { free(dealigned); dealigned = NULL; } if(do_add) { /* gap out the the pp_cons to fit in merged alignment */ if((status = inflate_string_with_gaps_and_missing(msaA[0]->pp_cons, msaA[0]->alen, alen_merged, neitherA, '.', NULL, '~', &(gapped_out))) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding gaps to create PP_cons annotation for merged alignment."); if(mmsa->pp_cons != NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding PP_cons to merged alignment, it is already non-NULL."); if((status = esl_strdup(gapped_out, alen_merged, &(mmsa->pp_cons))) != eslOK) goto ERROR; free(gapped_out); gapped_out = NULL; if(be_verbose) fprintf(stdout, "# Identical PP_cons annotation from all alignments transferred to merged alignment.\n"); } else { if(be_verbose) fprintf(stdout, "# PP_cons annotation from first alignment absent from or different in >= 1 other alignments; not included in merged alignment.\n"); } } } /* end of if(msaA[0]->pp_cons != NULL) */ else if(be_verbose) fprintf(stdout, "# PP_cons annotation absent from (at least) first alignment; not included in merged alignment.\n"); /*********************************************************************/ /* Finally, validate that RF annotation is identical in all alignments after removing gaps. */ if(msaA[0]->rf == NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "All alignments must have #= GC RF annotation."); /* dealign rf */ if((status = esl_strdup(msaA[0]->rf, msaA[0]->alen, &(dealigned))) != eslOK) goto ERROR; if((status = esl_strdealign(dealigned, dealigned, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning RF of msaA[0]"); for(ai = 1; ai < nmsa; ai++) { if(msaA[ai]->rf == NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "All alignments must have #= GC RF annotation."); /* dealign */ if((status = esl_strdup(msaA[ai]->rf, msaA[ai]->alen, &(dealigned2))) != eslOK) goto ERROR; if((status = esl_strdealign(dealigned2, dealigned2, "-_.~", NULL)) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "unexpected error dealigning RF of msaA[%d]", ai); /* check identity */ if(esl_strcmp(dealigned, dealigned2) != 0) { printf("%s\n%s\n", dealigned, dealigned2); ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "All alignments must have identical #=GC RF annotation, once gaps (\".\",\"-\",\"_\") are removed.\nAlignment %d de-gapped RF annotation differs from that of alignment 1.\n%s\n%s", ai+1, dealigned, dealigned2); } if(dealigned2 != NULL) { free(dealigned2); dealigned2 = NULL; } } if(dealigned != NULL) { free(dealigned); dealigned = NULL; } /* gap out the the RF to fit in merged alignment */ if((status = inflate_string_with_gaps_and_missing(msaA[0]->rf, msaA[0]->alen, alen_merged, ngapA, '.', nmisA, '~', &(gapped_out))) != eslOK) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding gaps to create RF annotation for merged alignment."); if(mmsa->rf != NULL) ESL_XFAIL(eslEINCONCEIVABLE, errbuf, "Error adding RF to merged alignment, it is already non-NULL."); if((status = esl_strdup(gapped_out, alen_merged, &(mmsa->rf))) != eslOK) goto ERROR; free(gapped_out); gapped_out = NULL; if(be_verbose) fprintf(stdout, "# Identical RF annotation from all alignments transferred to merged alignment.\n"); if(dealigned != NULL) free(dealigned); if(dealigned2 != NULL) free(dealigned2); if(gapped_out != NULL) free(gapped_out); if(ngapA != NULL) free(ngapA); if(nmisA != NULL) free(nmisA); if(neitherA != NULL) free(neitherA); return eslOK; ERROR: if(dealigned != NULL) free(dealigned); if(dealigned2 != NULL) free(dealigned2); if(gapped_out != NULL) free(gapped_out); if(ngapA != NULL) free(ngapA); if(nmisA != NULL) free(nmisA); if(neitherA != NULL) free(neitherA); return status; } /* Function: add_msa * Date: EPN, Mon Nov 23 05:54:37 2009 * * Add a "child" MSA we read from a file to the merged * MSA - the merged alignment that we'll eventually * output. We free each string in the child as soon * as we've added it to the merged, to save memory. * * We add all sequence data (aseq), and per sequence * annotation, including sqname, sqdesc, sqacc, pp, ss, * sa, as well as non-parsed GS and GR annotation. * * [0..clen] is an array specifying the * number of inserted columns necessary between * each consensus position. * * max{gap,mis}[0] is number of gaps/missing columns before 1st cpos. * max{gap,mis}[clen-1] is number of gaps/missing columns before final cpos. * max{gap,mis}[clen] is number of gaps/missing columns after final cpos. * * is the number of columns in the merged * alignment. This is the non-gap RF length plus the * sum of the maxgap vector. * * Returns: eslOK on success. * eslEMEM on memory allocation failure. */ int add_msa(ESL_MSA *mmsa, char *errbuf, ESL_MSA *msa_to_add, int *maxgap, int *maxmis, int clen, int alen_merged) { int status; int i; /* counter over sequences in msa_to_add */ int j; /* counter over alignment annotations */ int mi; /* counter over sequences in mmsa */ void *tmp; /* for reallocations */ char *tmpstr; /* used for copying GR annotation */ int nseq_existing; /* number of sequences already added to mmsa, by previous calls of this function */ int *ngapA = NULL; /* [0..alen] number of insert gap columns to add after each alignment column when merging */ int *nmisA = NULL; /* [0..alen] number of missing data ('~') gap columns to add after each alignment column when merging */ int *neitherA = NULL; /* [0..apos..alen] = ngapA[apos] + nmisA[apos] */ nseq_existing = mmsa->nseq; /* determine how many all gap columns to insert after each alignment position * of the child msa when copying it to the merged msa */ if((status = determine_gap_columns_to_add(msa_to_add, maxgap, maxmis, clen, &(ngapA), &(nmisA), &(neitherA), errbuf)) != eslOK) return status; nseq_existing = mmsa->nseq; /* Append msa_to_add's sequence data and per-sequence annotation to mmsa after adding necessary gaps */ /* sequence names and aligned sequence data (digitized) */ for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { esl_strdup(msa_to_add->sqname[i], -1, &(mmsa->sqname[mi])); status = inflate_seq_with_gaps(msa_to_add->abc, msa_to_add->aseq[i], msa_to_add->alen, alen_merged, neitherA, '.', &(mmsa->aseq[mi])); if (status == eslEMEM) ESL_XFAIL(status, errbuf, "Out of memory adding sequence %s", mmsa->sqname[mi]); else if(status != eslOK) ESL_XFAIL(status, errbuf, "Found internal missing data symbols in seq: %s", mmsa->sqname[mi]); free(msa_to_add->aseq[i]); /* free immediately */ msa_to_add->aseq[i] = NULL; } /* parsed annotation that is optional */ /* sqacc */ if(msa_to_add->sqacc != NULL) { if(mmsa->sqacc == NULL) { /* allocate for all sequences, even ones added in previous calls to add_msa() */ ESL_ALLOC(mmsa->sqacc, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); for(mi = 0; mi < nseq_existing; mi++) { mmsa->sqacc[mi] = NULL; } } else { /* reallocate; to add space for new seqs */ ESL_RALLOC(mmsa->sqacc, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); } for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { if(msa_to_add->sqacc[i] != NULL) { if((status = esl_strdup(msa_to_add->sqacc[i], -1, &(mmsa->sqacc[mi]))) != eslOK) ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence accession number %d.\n", i+1); free(msa_to_add->sqacc[i]); /* free immediately */ msa_to_add->sqacc[i] = NULL; } else { mmsa->sqacc[mi] = NULL; } } } /* end of if(msa_to_add->sqacc != NULL */ else if(mmsa->sqacc != NULL) { /* msa_to_add->sqacc == NULL, but mmsa->sqacc != NULL, reallocate mmsa->sqacc, and set new ones to NULL */ ESL_RALLOC(mmsa->sqacc, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); for(mi = nseq_existing; mi < nseq_existing + msa_to_add->nseq; mi++) { mmsa->sqacc[mi] = NULL; } } /* sqdesc */ if(msa_to_add->sqdesc != NULL) { if(mmsa->sqdesc == NULL) { /* allocate for all sequences, even ones added in previous calls to add_msa() */ ESL_ALLOC(mmsa->sqdesc, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); for(mi = 0; mi < nseq_existing; mi++) { mmsa->sqdesc[mi] = NULL; } } else { /* reallocate; to add space for new seqs */ ESL_RALLOC(mmsa->sqdesc, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); } for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { if(msa_to_add->sqdesc[i] != NULL) { if((status = esl_strdup(msa_to_add->sqdesc[i], -1, &(mmsa->sqdesc[mi]))) != eslOK) ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence description number %d.\n", i+1); free(msa_to_add->sqdesc[i]); /* free immediately */ msa_to_add->sqdesc[i] = NULL; } else { mmsa->sqdesc[mi] = NULL; } } } /* end of if(msa_to_add->sqdesc != NULL */ else if(mmsa->sqdesc != NULL) { /* msa_to_add->sqdesc == NULL, but mmsa->sqdesc != NULL, reallocate mmsa->sqdesc, and set new ones to NULL */ ESL_RALLOC(mmsa->sqdesc, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); for(mi = nseq_existing; mi < nseq_existing + msa_to_add->nseq; mi++) { mmsa->sqdesc[mi] = NULL; } } /* per-seq posterior probabilities */ if(msa_to_add->pp != NULL) { if(mmsa->pp == NULL) { /* allocate for all sequences, even ones added in previous calls to add_msa() */ ESL_ALLOC(mmsa->pp, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); for(mi = 0; mi < nseq_existing; mi++) { mmsa->pp[mi] = NULL; } } else { /* reallocate; to add space for new seqs */ ESL_RALLOC(mmsa->pp, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); } for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { if(msa_to_add->pp[i] != NULL) { if((status = inflate_string_with_gaps_and_missing(msa_to_add->pp[i], msa_to_add->alen, alen_merged, neitherA, '.', NULL, '~', &(mmsa->pp[mi]))) != eslOK) ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence number %d posterior probabilities.\n", i+1); free(msa_to_add->pp[i]); /* free immediately */ msa_to_add->pp[i] = NULL; } else { mmsa->pp[mi] = NULL; } } } /* end of if(msa_to_add->pp != NULL */ else if(mmsa->pp != NULL) { /* msa_to_add->pp == NULL, but mmsa->pp != NULL, reallocate mmsa->pp, and set new ones to NULL */ ESL_RALLOC(mmsa->pp, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); for(mi = nseq_existing; mi < nseq_existing + msa_to_add->nseq; mi++) { mmsa->pp[mi] = NULL; } } /* per-seq secondary structure */ if(msa_to_add->ss != NULL) { if(mmsa->ss == NULL) { /* allocate for all sequences, even ones added in previous calls to add_msa() */ ESL_ALLOC(mmsa->ss, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); for(mi = 0; mi < nseq_existing; mi++) { mmsa->ss[mi] = NULL; } } else { /* reallocate; to add space for new seqs */ ESL_RALLOC(mmsa->ss, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); } for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { if(msa_to_add->ss[i] != NULL) { if((status = inflate_string_with_gaps_and_missing(msa_to_add->ss[i], msa_to_add->alen, alen_merged, neitherA, '.', NULL, '~', &(mmsa->ss[mi]))) != eslOK) ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence number %d secondary structure.\n", i+1); free(msa_to_add->ss[i]); /* free immediately */ msa_to_add->ss[i] = NULL; } else { mmsa->ss[mi] = NULL; } } } /* end of if(msa_to_add->ss != NULL */ else if(mmsa->ss != NULL) { /* msa_to_add->ss == NULL, but mmsa->ss != NULL, reallocate mmsa->ss, and set new ones to NULL */ ESL_RALLOC(mmsa->ss, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); for(mi = nseq_existing; mi < nseq_existing + msa_to_add->nseq; mi++) { mmsa->ss[mi] = NULL; } } /* per-seq surface accessibility */ if(msa_to_add->sa != NULL) { if(mmsa->sa == NULL) { /* allocate for all sequences, even ones added in previous calls to add_msa() */ ESL_ALLOC(mmsa->sa, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); for(mi = 0; mi < nseq_existing; mi++) { mmsa->sa[mi] = NULL; } } else { /* reallocate; to add space for new seqs */ ESL_RALLOC(mmsa->sa, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); } for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { if(msa_to_add->sa[i] != NULL) { if((status = inflate_string_with_gaps_and_missing(msa_to_add->sa[i], msa_to_add->alen, alen_merged, neitherA, '.', NULL, '~', &(mmsa->sa[mi]))) != eslOK) ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence number %d surface accessibility.\n", i+1); free(msa_to_add->sa[i]); /* free immediately */ msa_to_add->sa[i] = NULL; } else { mmsa->sa[mi] = NULL; } } } /* end of if(msa_to_add->sa != NULL */ else if(mmsa->sa != NULL) { /* msa_to_add->sa == NULL, but mmsa->sa != NULL, reallocate mmsa->sa, and set new ones to NULL */ ESL_RALLOC(mmsa->sa, tmp, sizeof(char *) * (nseq_existing + msa_to_add->nseq)); for(mi = nseq_existing; mi < nseq_existing + msa_to_add->nseq; mi++) { mmsa->sa[mi] = NULL; } } /* Unparsed per-sequence (GS) annotation */ if(msa_to_add->ngs > 0) { for(j = 0; j < msa_to_add->ngs; j++) { for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { if(msa_to_add->gs[j][i] != NULL) if((status =esl_msa_AddGS(mmsa, msa_to_add->gs_tag[j], -1, mi, msa_to_add->gs[j][i], -1)) != eslOK) ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence number %d GS annotation.\n", i+1); } free(msa_to_add->gs[j][i]); /* free immediately */ msa_to_add->gs[j][i] = NULL; } } /* caller will free the rest of gs via esl_msa_Destroy() */ /* unparsed per-residue (GR) annotation */ if(msa_to_add->gr != NULL) { for(j = 0; j < msa_to_add->ngr; j++) { for(i = 0, mi = nseq_existing; i < msa_to_add->nseq; i++, mi++) { if(msa_to_add->gr[j][i] != NULL) { if((status = inflate_string_with_gaps_and_missing(msa_to_add->gr[j][i], msa_to_add->alen, alen_merged, neitherA, '.', NULL, '~', &(tmpstr))) != eslOK) ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence number %d GR annotation.\n", i+1); if((status = esl_msa_AppendGR(mmsa, msa_to_add->gr_tag[j], mi, tmpstr)) != eslOK) ESL_XFAIL(status, errbuf, "Memory allocation error when copying sequence number %d GR annotation.\n", i+1); free(tmpstr); free(msa_to_add->gr[j][i]); /* free immediately */ msa_to_add->gr[j][i] = NULL; } } } } /* caller will free the rest of gr in esl_msa_Destroy() */ /* msa_to_add should be destroyed by caller */ /* update nseq in mmsa */ mmsa->nseq += msa_to_add->nseq; if(ngapA != NULL) free(ngapA); if(nmisA != NULL) free(nmisA); if(neitherA != NULL) free(neitherA); return eslOK; ERROR: if(ngapA != NULL) free(ngapA); return status; } /* inflate_string_with_gaps_and_missing * * Given a string, create a new one that is a copy of it, * but with missing data and gaps added before each position (apos) * as specified by n{gap,mis}A[0..apos..len]. and * specify the gap character and missing data character. Either * ngapA or nmisA can be either be NULL, if so they're treated as if * they're all zeroes (no gaps/missing data will be added anywhere). * * n{gap,mis}A[0] - number of gaps/missing to add before first posn * n{gap,mis}A[apos] - number of gaps/missing to add before posn apos * n{gap,mis}A[src_len] - number of gaps/missing to add after final posn * * By convention, missing data symbols are always put before gap symbols * when more than 1 of each are to be placed after the some nongap RF position. * * ret_str is allocated here. * * Returns eslOK on success. * eslEMEM on memory error. */ int inflate_string_with_gaps_and_missing(char *src_str, int64_t src_len, int64_t dst_len, int *ngapA, char gapchar, int *nmisA, char mischar, char **ret_dst_str) { int status; int src_apos = 0; int dst_apos = 0; int i; char *dst_str; ESL_ALLOC(dst_str, sizeof(char) * (dst_len+1)); dst_str[dst_len] = '\0'; /* add gaps before first position */ if(nmisA) for(i = 0; i < nmisA[0]; i++) dst_str[dst_apos++] = mischar; if(ngapA) for(i = 0; i < ngapA[0]; i++) dst_str[dst_apos++] = gapchar; /* add gaps after every position */ for(src_apos = 0; src_apos < src_len; src_apos++) { dst_str[dst_apos++] = src_str[src_apos]; if(nmisA) for(i = 0; i < nmisA[(src_apos+1)]; i++) dst_str[dst_apos++] = mischar; if(ngapA) for(i = 0; i < ngapA[(src_apos+1)]; i++) dst_str[dst_apos++] = gapchar; } *ret_dst_str = dst_str; return eslOK; ERROR: return eslEMEM; } /* inflate_seq_with_gaps() * * Given an aligned sequence, create a new one that is a copy of it, * but with gaps added before each position (apos) as specified by * ngapA[0..apos..len]. specifies the gap character. * * This function follows the HMMER3 convention of using '~' to mark * fragment sequences. If a sequence is a fragment, the first and final * string of gaps (contiguous gaps) will be marked as '~'. That is, * the 1st column will necessarily be a '~' and the last will be a '~'. * This function takes care to add '~' as gap characters in fragments, * where appropriate, to follow HMMER3 convention. * * This function is importantly different from inflate_string_with_gaps_and_missing() * in that it does not allow internal '~' missing data characters to * be added (which are dictated by nmisA[] in inflate_string_with_gaps_and_missing()) * Those '~' are possible in Infernal output alignments only in * #=GC RF and #=GC SS_cons alignment. * * It only adds '~' as necessary to the beginning and ends of fragments. * * ngapA[0] - number of gaps/missing to add before first posn * ngapA[apos] - number of gaps/missing to add before posn apos * ngapA[src_len] - number of gaps/missing to add after final posn * * ret_str is allocated here. * * Returns eslOK on success. * eslEMEM on memory error. * eslEINVAL if sequence (src_str) has an internal missing * data symbol that violates HMMER3 convention. */ int inflate_seq_with_gaps(const ESL_ALPHABET *abc, char *src_str, int64_t src_len, int64_t dst_len, int *ngapA, char gapchar, char **ret_dst_str) { int status; int src_apos = 0; int dst_apos = 0; int src_flpos = 0; /* position of rightmost '~' in contiguous string that begins at position 0 */ int src_frpos = 0; /* position of leftmost '~' in contiguous string that ends at position src_len-1 */ int i; char *dst_str; char char2add; int i_am_fragment = FALSE; ESL_ALLOC(dst_str, sizeof(char) * (dst_len+1)); dst_str[dst_len] = '\0'; /* determine if sequence is a fragment, and determine src_flpos and src_frpos */ src_flpos = 0; while(src_flpos < src_len && esl_abc_CIsMissing(abc, src_str[src_flpos])) { src_flpos++; } src_flpos--; /* we overshot by 1 */ /* src_flpos is now rightmost '~' in stretch of '~' that begin at position 0, so * it's -1 if sequence is not a fragment (there are no leading '~' in src_str) */ src_frpos = src_len-1; while(src_frpos > -1 && esl_abc_CIsMissing(abc, src_str[src_frpos])) { src_frpos--; } src_frpos++; /* we overshot by 1 */ /* src_frpos is now leftmost '~' in stretch of '~' that end at position src_len-1, so * it's src_len if sequence is not a fragment (there are no trailing '~' in src_str) */ i_am_fragment = (src_flpos != -1 || src_frpos != src_len) ? TRUE : FALSE; /* Now verify that we don't have any internal '~' characters */ for(src_apos = src_flpos+1; src_apos <= src_frpos-1; src_apos++) { if(esl_abc_CIsMissing(abc, src_str[src_apos])) return eslEINVAL; } /* add gaps before first position */ src_apos = 0; if(i_am_fragment) { char2add = ((src_flpos >= src_apos) || (src_frpos <= src_apos)) ? esl_abc_CGetMissing(abc) : gapchar; } else { char2add = gapchar; } if(ngapA) for(i = 0; i < ngapA[0]; i++) dst_str[dst_apos++] = char2add; /* add gaps or missing character after every position */ for(src_apos = 0; src_apos < src_len; src_apos++) { dst_str[dst_apos++] = src_str[src_apos]; if(i_am_fragment) { char2add = ((src_flpos >= src_apos) || (src_frpos <= src_apos)) ? esl_abc_CGetMissing(abc) : gapchar; } else { char2add = gapchar; } for(i = 0; i < ngapA[(src_apos+1)]; i++) dst_str[dst_apos++] = char2add; } *ret_dst_str = dst_str; return eslOK; ERROR: return eslEMEM; } /* validate_no_nongaps_in_rf_gaps * * Given an RF string with gaps defined as by alphabet * and another string of same length. Make sure none of the * positions that are gaps in the RF string are non-gaps in the * other string. Return TRUE if none are. Return FALSE if at * least one is. * * Returns TRUE if 0 characters in in same position * as a gap in are non-gaps. FALSE otherwise. */ int validate_no_nongaps_in_rf_gaps(const ESL_ALPHABET *abc, char *rf_str, char *other_str, int64_t len) { int64_t i; for(i = 0; i < len; i++) { if((! rfchar_is_nongap_nonmissing(abc, rf_str[i])) && (rfchar_is_nongap_nonmissing(abc, other_str[i]))) return FALSE; } return TRUE; } /* determine_gap_columns_to_add * (stolen and slightly modified from Infernal 1.1rc1's cmalign.c) * * Given and , two arrays of the number of gap RF * positions and '~' RF (missing data) after each non-gap RF * (consensus) position in the eventual final merged alignment, * calculate how many inserts and missing data inserts * we need to add at each position of to expand it out to the * appropriate size of the eventual merged alignment. * * max{gap,mis}[0] is number of gaps/missing before 1st cpos in merged aln * max{gap,mis}[cpos] is number of gaps/missing after cpos in merged aln * for cpos = 1..clen * clen is the number of non-gap RF positions in msa (and in eventual merged msa). * * We allocate fill and return ret_ngapA[0..msa->alen], ret_nmisA[0..msa->alen], * and ret_neitherA[0..msa->alen] here. * * ret_n{gap,mis}gapA[0] is number of gaps/missing to add before 1st position of msa * ret_n{gap,mis}gapA[apos] is number of gaps/missing to add after alignment position apos * for apos = 1..msa->alen * * ret_neitherA[apos] = ngapA[apos] + nmisA[apos] * * This is similar to the esl_msa.c helper function of the same name, * but that function does not bother with missing data '~'. * * Returns eslOK on success. * eslEMEM on memory alloaction error * eslEINVAL if gaps occur before missing data b/t any two nongap RF posns * eslERANGE if a value exceeds what we expected (based on earlier * checks before this function was entered). * if !eslOK, errbuf if filled. */ int determine_gap_columns_to_add(ESL_MSA *msa, int *maxgap, int *maxmis, int clen, int **ret_ngapA, int **ret_nmisA, int **ret_neitherA, char *errbuf) { int status; int apos; int prv_cpos = 0; /* alignment position corresponding to consensus position cpos-1 */ int cpos = 0; int ngap = 0; int nmis = 0; int *ngapA = NULL; int *nmisA = NULL; int *neitherA = NULL; /* contract check */ if(maxmis[0] != 0) ESL_FAIL(eslEINVAL, errbuf, "missing characters exist prior to first cpos, this shouldn't happen.\n"); ESL_ALLOC(ngapA, sizeof(int) * (msa->alen+1)); ESL_ALLOC(nmisA, sizeof(int) * (msa->alen+1)); ESL_ALLOC(neitherA, sizeof(int) * (msa->alen+1)); esl_vec_ISet(ngapA, (msa->alen+1), 0); esl_vec_ISet(nmisA, (msa->alen+1), 0); esl_vec_ISet(neitherA, (msa->alen+1), 0); for(apos = 0; apos < msa->alen; apos++) { if(esl_abc_CIsMissing(msa->abc, msa->rf[apos])) { nmis++; if(ngap > 0) ESL_FAIL(eslEINVAL, errbuf, "after nongap RF pos %d, %d gap columns precede a missing data column (none should)", cpos, ngap); } else if(esl_abc_CIsGap(msa->abc, msa->rf[apos])) { ngap++; } else { /* a consensus position */ /* a few sanity checks */ if(ngap > maxgap[cpos]) ESL_FAIL(eslEINCONCEIVABLE, errbuf, "%d inserts before cpos %d greater than max expected (%d).\n", ngap, cpos, maxgap[cpos]); if(nmis > maxmis[cpos]) ESL_FAIL(eslEINCONCEIVABLE, errbuf, "%d EL inserts before cpos %d greater than max expected (%d).\n", nmis, cpos, maxmis[cpos]); if (cpos == 0) { /* gaps and/or missing data before first consensus position: flush right */ if(maxgap[cpos] > 0 && maxmis[cpos] == 0) { /* most common case */ ngapA[prv_cpos] = maxgap[cpos] - ngap; /* flush right gaps (no missing) */ } else if(maxgap[cpos] == 0 && maxmis[cpos] > 0) { nmisA[prv_cpos] = maxmis[cpos] - nmis; /* flush right missing (no gaps) */ } else if(maxgap[cpos] > 0 && maxmis[cpos] > 0) { /* missing data (ELs) is always 5' of gaps */ nmisA[prv_cpos] = maxmis[cpos] - nmis; /* flush right */ ngapA[prv_cpos+nmis] = maxgap[cpos] - ngap; /* flush right, after missing */ } } else { /* gaps and/missing data after interior consensus position (i.e. not before 1st cpos or after last) * Determine where to place inserts and/or missing data. * Handle each of 4 possibilities separately, note that if * maxgap[cpos] == 0 then ngap == 0, and if maxmis[cpos] == 0 then nmis == 0 (see sanity check above). */ if(maxgap[cpos] > 0 && maxmis[cpos] == 0) { /* most common case */ ngapA[prv_cpos + 1 + (ngap/2)] = maxgap[cpos] - ngap; /* internal cpos: split */ } else if(maxgap[cpos] == 0 && maxmis[cpos] > 0) { nmisA[prv_cpos + 1 + (nmis/2)] = maxmis[cpos] - nmis; /* internal cpos: split */ } else if(maxgap[cpos] > 0 && maxmis[cpos] > 0) { /* missing data is always 5' of gaps */ nmisA[prv_cpos + 1 + (nmis/2)] = maxmis[cpos] - nmis; /* internal cpos: split */ ngapA[prv_cpos + 1 + nmis + (ngap/2)] = maxgap[cpos] - ngap; /* internal cpos: split */ } /* final case is if (maxgap[cpos] == 0 && maxmis[cpos] == 0) * in this case we do nothing. */ } cpos++; prv_cpos = apos; ngap = 0; nmis = 0; } } /* deal with gaps and missing data after final consensus position */ /* first, validate that clen is what it should be */ if(cpos != clen) { if(ngapA != NULL) free(ngapA); if(nmisA != NULL) free(nmisA); if(neitherA != NULL) free(neitherA); ESL_FAIL(eslEINCONCEIVABLE, errbuf, "consensus length (%d) is not the expected length (%d).", cpos, clen); } if(maxgap[cpos] > 0 && maxmis[cpos] == 0) { /* most common case */ ngapA[prv_cpos + 1 + ngap] = maxgap[cpos] - ngap; /* flush left gaps (no missing) */ } else if(maxgap[cpos] == 0 && maxmis[cpos] > 0) { nmisA[prv_cpos + 1 + nmis] = maxmis[cpos] - nmis; /* flush left missing (no gaps) */ } else if(maxgap[cpos] > 0 && maxmis[cpos] > 0) { /* missing data (ELs) is always 5' of gaps */ nmisA[prv_cpos + 1 + nmis] = maxmis[cpos] - nmis; /* flush left */ ngapA[prv_cpos + 1 + nmis + ngap] = maxgap[cpos] - ngap; /* flush left, after missing */ } /* determine neitherA[], the number of gaps due to either inserts or missing data after each apos */ for(apos = 0; apos <= msa->alen; apos++) { neitherA[apos] = ngapA[apos] + nmisA[apos]; } *ret_ngapA = ngapA; *ret_nmisA = nmisA; *ret_neitherA = neitherA; return eslOK; ERROR: if(ngapA != NULL) free(ngapA); if(nmisA != NULL) free(nmisA); if(neitherA != NULL) free(neitherA); ESL_FAIL(status, errbuf, "Memory allocation error."); return status; /*NEVERREACHED*/ } /* write_pfam_msa_top * * Highly specialized function for printing out the 'top' of a * Stockholm alignment file, i.e. the Stockholm header line, comments * and GF annotation to an msa file. This function is necessary when * printing the merged alignment file in small memory mode (when * --small enabled). is an alignment with no sequence * information (no aseq, ax, GS, or GR data). */ void write_pfam_msa_top(FILE *fp, ESL_MSA *msa) { int i, maxgf; /* rest of code in this function was stolen verbatim from actually_write_stockholm in esl_msa.c */ /* Magic Stockholm header */ fprintf(fp, "# STOCKHOLM 1.0\n"); /* Free text comments */ for (i = 0; i < msa->ncomment; i++) fprintf(fp, "# %s\n", msa->comment[i]); if (msa->ncomment > 0) fprintf(fp, "\n"); maxgf = maxwidth(msa->gf_tag, msa->ngf); if (maxgf < 2) maxgf = 2; /* GF section: per-file annotation */ if (msa->name != NULL) fprintf(fp, "#=GF %-*s %s\n", maxgf, "ID", msa->name); if (msa->acc != NULL) fprintf(fp, "#=GF %-*s %s\n", maxgf, "AC", msa->acc); if (msa->desc != NULL) fprintf(fp, "#=GF %-*s %s\n", maxgf, "DE", msa->desc); if (msa->au != NULL) fprintf(fp, "#=GF %-*s %s\n", maxgf, "AU", msa->au); /* Thresholds are hacky. Pfam has two. Rfam has one. */ if (msa->cutset[eslMSA_GA1] && msa->cutset[eslMSA_GA2]) fprintf(fp, "#=GF %-*s %.1f %.1f\n", maxgf, "GA", msa->cutoff[eslMSA_GA1], msa->cutoff[eslMSA_GA2]); else if (msa->cutset[eslMSA_GA1]) fprintf(fp, "#=GF %-*s %.1f\n", maxgf, "GA", msa->cutoff[eslMSA_GA1]); if (msa->cutset[eslMSA_NC1] && msa->cutset[eslMSA_NC2]) fprintf(fp, "#=GF %-*s %.1f %.1f\n", maxgf, "NC", msa->cutoff[eslMSA_NC1], msa->cutoff[eslMSA_NC2]); else if (msa->cutset[eslMSA_NC1]) fprintf(fp, "#=GF %-*s %.1f\n", maxgf, "NC", msa->cutoff[eslMSA_NC1]); if (msa->cutset[eslMSA_TC1] && msa->cutset[eslMSA_TC2]) fprintf(fp, "#=GF %-*s %.1f %.1f\n", maxgf, "TC", msa->cutoff[eslMSA_TC1], msa->cutoff[eslMSA_TC2]); else if (msa->cutset[eslMSA_TC1]) fprintf(fp, "#=GF %-*s %.1f\n", maxgf, "TC", msa->cutoff[eslMSA_TC1]); for (i = 0; i < msa->ngf; i++) fprintf(fp, "#=GF %-*s %s\n", maxgf, msa->gf_tag[i], msa->gf[i]); fprintf(fp, "\n"); return; } /* write_pfam_msa_gc * * Highly specialized function for printing out the GC annotation to a * Pfam Stockholm alignment file (1 line/seq). This function is * necessary when printing the merged alignment file in small memory * mode (when --small enabled). is an alignment with no sequence * information (no aseq, ax, GS, nor GR data). */ void write_pfam_msa_gc(FILE *fp, ESL_MSA *msa, int margin) { int i; if (msa->ss_cons != NULL) { fprintf(fp, "#=GC %-*s %s\n", margin-6, "SS_cons", msa->ss_cons); } if (msa->sa_cons != NULL) { fprintf(fp, "#=GC %-*s %s\n", margin-6, "SA_cons", msa->sa_cons); } if (msa->pp_cons != NULL) { fprintf(fp, "#=GC %-*s %s\n", margin-6, "PP_cons", msa->pp_cons); } if (msa->rf != NULL) { fprintf(fp, "#=GC %-*s %s\n", margin-6, "RF", msa->rf); } for (i = 0; i < msa->ngc; i++) { fprintf(fp, "#=GC %-*s %s\n", margin-6, msa->gc_tag[i], msa->gc[i]); } fprintf(fp, "//\n"); } /* maxwidth() * Return the length of the longest string in * an array of strings. */ static int64_t maxwidth(char **s, int n) { int64_t max,len; int i; max = 0; for (i = 0; i < n; i++) if (s[i] != NULL) { len = strlen(s[i]); if (len > max) max = len; } return max; } /* rfchar_is_nongap_nonmissing() * Return FALSE if a character from RF annotation is * a gap or a missing character, else return TRUE. */ static int rfchar_is_nongap_nonmissing(const ESL_ALPHABET *abc, char rfchar) { if(esl_abc_CIsGap (abc, rfchar)) return FALSE; if(esl_abc_CIsMissing(abc, rfchar)) return FALSE; return TRUE; } hmmer-3.1b2/easel/miniapps/esl-selectn.c0000664361611702660230000000726112473612611017567 0ustar wheelerteddy/* Select random lines from a file and print them. * * SRE, Fri Jun 13 08:17:53 2008 [Janelia] * SVN $Id: esl-selectn.c 526 2010-02-22 12:45:09Z eddys $ */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_random.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 1 }, { "--seed", eslARG_INT, "0", NULL, NULL, NULL, NULL, NULL, "set random number generator's seed to ", 1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "select n lines randomly from a file"; static void cmdline_failure(char *argv0, char *format, ...) { va_list argp; va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); esl_usage(stdout, argv0, usage); printf("\nTo see more help on available options, do %s -h\n\n", argv0); exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { esl_banner(stdout, argv0, banner); esl_usage (stdout, argv0, usage); puts("\n where general options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); exit(0); } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; ESL_RANDOMNESS *r = NULL; int nselect = 0; char *filename = NULL; FILE *fp = NULL; char **larr = NULL; char *buf = NULL; int buflen = 0; char *tmp = NULL; int i,j; int n; /* Parse command line */ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], "Error in app configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") ) cmdline_help(argv[0], go); if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); nselect = atoi(esl_opt_GetArg(go, 1)); filename = esl_opt_GetArg(go, 2); r = esl_randomness_Create(esl_opt_GetInteger(go, "--seed")); if ((larr = malloc(sizeof(char *) * nselect)) == NULL) esl_fatal("allocation failed"); if (strcmp(filename, "-") == 0) fp = stdin; else { if ((fp = fopen(filename, "r")) == NULL) esl_fatal("Failed to open file %s\n", filename); } n = 0; while (esl_fgets(&buf, &buflen, fp) == eslOK) { n++; i = esl_rnd_Roll(r, n); if (i < nselect) { for (j = i; j < nselect && j < n; j++) { tmp = larr[j]; larr[j] = buf; buf = tmp; } free(buf); buf = NULL; buflen = 0; } } for (i = 0; i < nselect; i++) printf("%s", larr[i]); if (fp != stdin) fclose(fp); for (i = 0; i < nselect; i++) free(larr[i]); free(larr); free(buf); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/miniapps/esl-shuffle.itest.pl0000775361611702660230000000367412473612611021115 0ustar wheelerteddy#! /usr/bin/perl # Integrated test of esl-shuffle miniapp # # Usage: ./esl-shuffle.itest.pl # Example: ./esl-shuffle.itest.pl ./esl-shuffle foo # # SRE, Tue Nov 10 17:27:22 2009 # SVN $Id: esl-shuffle.itest.pl 589 2010-04-10 12:53:24Z eddys $ $eslshuffle = shift; $tmppfx = shift; if (! -x "$eslshuffle") { die "FAIL: didn't find esl-shuffle binary $eslshuffle"; } open(TESTFILE, ">$tmppfx.fa") || die "FAIL: couldn't open $tmppfx.fa for writing test seqfile"; print TESTFILE << "EOF"; >seq1 ACDEFGHIKLMNPQRSTVWY >seq2 ACACACACACACACACACAC >seq3 WYWYWYWYWYWYWYWYWYWY EOF close TESTFILE; # Use of --seed makes shuffled outputs reproducible, regressable. # Until you change the RNG again, anyway. If you do that, all these # regressions need to change. # @output = `$eslshuffle --seed 42 $tmppfx.fa`; if ($? != 0) { die "FAIL: esl-shuffle failed unexpectedly"; } if ($output[0] !~ /^>seq1-shuffled$/) { die "FAIL: shuffle output is incorrect"; } if ($output[1] !~ /^TIGEYHFWCKVSALQNPDRM$/) { die "FAIL: shuffle output is incorrect"; } if ($output[2] !~ /^>seq2-shuffled$/) { die "FAIL: shuffle output is incorrect"; } if ($output[3] !~ /^CACAAAACCCACCAACAACC$/) { die "FAIL: shuffle output is incorrect"; } if ($output[4] !~ /^>seq3-shuffled$/) { die "FAIL: shuffle output is incorrect"; } if ($output[5] !~ /^WWYYWWYWWYYWYYWYYWYW$/) { die "FAIL: shuffle output is incorrect"; } # We had bugs in the -N option at one point. This test exercises the # bugs. # @output = `$eslshuffle --seed 42 -N 2 $tmppfx.fa`; if ($? != 0) { die "FAIL: esl-shuffle failed unexpectedly"; } if ($output[2] !~ /^>seq1-shuffled-1$/) { die "FAIL: shuffle output is incorrect"; } if ($output[3] !~ /^NTEPDRFIQYKLCMWVHAGS$/) { die "FAIL: shuffle output is incorrect"; } print "ok\n"; unlink "$tmppfx.fa"; exit 0; hmmer-3.1b2/easel/miniapps/esl-shuffle.man0000664361611702660230000001172412473612611020116 0ustar wheelerteddy.TH "esl-shuffle" 1 "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual" .SH NAME .TP esl-shuffle - shuffling sequences or generating random ones .SH SYNOPSIS .TP Shuffling individual sequences: .B esl-shuffle .I [options] .I seqfile .TP Generating random sequences: .B esl-shuffle -G .I [options] .TP Shuffling multiple sequence alignments columnwise: .B esl-shuffle -A .I [options] .I msafile .TP Shuffling QRNA pairwise alignment input files: .B esl-shuffle -Q .I [options] .I qrna-alignment-file .SH DESCRIPTION .pp .B esl-shuffle is capable of four different modes of operation. .pp By default, .B esl-shuffle reads individual sequences from .I seqfile , shuffles them, and outputs the shuffled sequence. By default, shuffling is done by preserving monoresidue composition; other options are listed below. .pp With the .I -G option, .B esl-shuffle generates some number of random sequences of some length in some alphabet. The .I -N option controls the number (default is 1), the .I -L option controls the length (default is 0), and the .I --amino, .I --dna, and .I --rna options control the alphabet. .pp With the .I -A option, .B esl-shuffle reads one or more multiple alignments from .I and shuffles them columnwise. .pp Finally, the .I -Q option is for shuffling pairwise alignments in QRNA input files. A QRNA input file is a quasi-FASTA file, where each successive pair of sequences is interpreted as a pairwise alignment; sequences may contain gap characters (period, dash, or underscore: .-_) and these pairs of sequences must have exactly the same aligned length. .pp An unaligned sequence file to be shuffled may be in any of several different common unaligned sequence formats including FASTA, GenBank, EMBL, UniProt, or DDBJ; alignment files are also valid, in which case individual unaligned sequences are sequentially plucked from the alignment. By default the file format is autodetected. The .I --informat option allows you to specify the format and override autodetection. This option may be useful for making .B esl-shuffle more robust, because format autodetection may fail on unusual files. .SH GENERAL OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .BI -o " " Direct output to a file named .I rather than to stdout. .TP .BI -N " " Generate .I sequences, or .I perform independent shuffles per input sequence or alignment. .TP .BI -L " " Generate sequences of length .I , or truncate output shuffled sequences or alignments to a length of .I . .SH SEQUENCE SHUFFLING OPTIONS These options only apply in default (sequence shuffling) mode. They are mutually exclusive. .TP .B -m Monoresidue shuffling (the default): preserve monoresidue composition exactly. Uses the so-called Fisher/Yates algorithm (Knuth's "Algorithm P"). .TP .B -d Diresidue shuffling; preserve diresidue composition exactly. Uses the Altschul/Erickson algorithm (Altschul and Erickson, 1986). A more efficient algorithm (Kandel and Winkler 1996) is known but has not yet been implemented in Easel. .TP .B -0 0th order Markov generation: generate a sequence of the same length with the same 0th order Markov frequencies. Such a sequence will approximately preserve the monoresidue composition of the input. .TP .B -1 1st order Markov generation: generate a sequence of the same length with the same 1st order Markov frequencies. Such a sequence will approximately preserve the diresidue composition of the input. .TP .B -r Reversal; reverse each input. .TP .BI -w " " Regionally shuffle the input in nonoverlapping windows of size .I residues, preserving exact monoresidue composition in each window. .SH MULTIPLE ALIGNMENT SHUFFLING OPTIONS .TP .B -b Sample columns with replacement, in order to generate a bootstrap-resampled alignment dataset. .SH SEQUENCE GENERATION OPTIONS One of these must be selected. .TP .B --amino Generate amino acid sequences. .TP .B --dna Generate DNA sequences. .TP .B --rna Generate RNA sequences (the default). .SH EXPERT OPTIONS .TP .BI --informat " " Specify that the sequence file is in format .I , where .I may be FASTA, GenBank, EMBL, UniProt, DDBJ, or Stockholm. This string is case-insensitive ("genbank" or "GenBank" both work, for example). .TP .BI --seed " " Specify the seed for the random number generator, where the seed .I is an integer greater than zero. This can be used to make the results of .B esl-shuffle reproducible. The default is to choose the random number generator seed by calling .B time(). Note that because .B time() likely returns the time in units of seconds, two calls to .B esl-shuffle within the same second will use the same seed and generate identical random number sequences; you may want to avoid this. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-histplot.man0000664361611702660230000000247712473612611020335 0ustar wheelerteddy.TH "esl-histplot" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps" .SH NAME .TP esl-histplot - collate data histogram, output xmgrace datafile .SH SYNOPSIS .B esl-histplot .I [options] .I datafile .SH DESCRIPTION .B esl-histplot summarizes numerical data in the input file .I datafile. .pp One real-numbered value is taken from each line of the input file. Each line is split into whitespace-delimited fields, and one field is converted to data. By default this is the first field; this can be changed by the .I -f option. .pp Default output is a survival plot (Prob(value > x)) in xmgrace XY data format, to .B stdout. Output may be directed to a file with the .I -o option. .pp If .I datafile is "-", input lines are read from .B stdin instead of opening a file. .SH OPTIONS .TP .BI -f " " Read data from whitespace-delimited field .I on each line, instead of the first field. Fields are numbered starting from 1. .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .BI -o " " Send output to file .I instead of stdout. .SH EXPERT OPTIONS None. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-mask.c0000664361611702660230000002463012473612611017064 0ustar wheelerteddy/* Mask sequences in a sequence flatfile. * * SRE, Sat Oct 31 09:58:56 2009 [Janelia] * SVN $Id: esl-mask.c 909 2014-04-11 19:16:58Z arndtw $ */ #include "esl_config.h" #include #include #include #include #include "easel.h" #include "esl_fileparser.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" static char banner[] = "mask sequences in a sequence file"; static char usage[] = "[options] "; static void cmdline_failure(char *argv0, char *format, ...) { va_list argp; va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); esl_usage(stdout, argv0, usage); printf("\nTo see more help on available options, do %s -h\n\n", argv0); exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { esl_banner(stdout, argv0, banner); esl_usage (stdout, argv0, usage); puts("\n where general options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); puts(""); puts("The is a sequence file in any accepted format, such as FASTA."); puts("It may be indexed (see esl-sfetch --index) for faster performance."); puts(""); puts("The is a space-delimited file; each data line with 3 columns:"); puts(" field 1: to fetch from "); puts(" field 2: coordinate for mask operation, 1..n"); puts(" field 3: coordinate for mask operation, 1..n"); puts("Lines starting with # are comments, and ignored.)"); puts(""); exit(0); } static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "help; show brief info on version and usage", 1 }, { "-o", eslARG_OUTFILE,FALSE, NULL, NULL, NULL, NULL, NULL, "output masked sequences to file instead of stdout", 1 }, { "-r", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "reverse: mask exclusive of .., not inclusive", 1 }, { "-R", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "random access: fetch seqs from ssi-indexed ", 1 }, { "-l", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-m", "convert masked residues to lower case", 1 }, { "-m", eslARG_CHAR, NULL, NULL, NULL, NULL, NULL, "-l", "convert masked residues to character ", 1 }, { "-x", eslARG_INT, NULL, NULL, NULL, NULL, NULL, NULL, "mask additional residues beyond ,", 1 }, { "--informat", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, NULL, "specify that input file is in format ", 1 }, { 0,0,0,0,0,0,0,0,0,0 }, }; int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* application configuration */ char *seqfile = NULL; /* sequence file name */ char *maskfile = NULL; /* mask coordinate file name */ int infmt = eslSQFILE_UNKNOWN; /* format code for seqfile */ int outfmt = eslSQFILE_FASTA; /* format code for output seqs */ ESL_SQFILE *sqfp = NULL; /* open sequence file */ ESL_FILEPARSER *maskefp = NULL; /* open mask coord file */ FILE *ofp = NULL; /* output stream for masked seqs */ char *source = NULL; /* name of current seq to mask */ char *p1, *p2; /* pointers used in parsing */ int64_t start, end; /* start, end coord for masking */ int64_t i, j, pos; /* coords in a sequence */ int64_t overmask; /* # of extra residues to mask */ ESL_SQ *sq = esl_sq_Create(); /* current sequence */ int do_fetching; int do_lowercase; int maskchar; int status; /* easel return code */ /**************************************************************************** * Parse command line ****************************************************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], "Error in configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") ) cmdline_help (argv[0], go); if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); do_fetching = esl_opt_GetBoolean(go, "-R"); do_lowercase = esl_opt_GetBoolean(go, "-l"); overmask = (esl_opt_IsOn(go, "-x") ? esl_opt_GetInteger(go, "-x") : 0); maskchar = (esl_opt_IsOn(go, "-m") ? esl_opt_GetChar(go, "-m") : 'X'); seqfile = esl_opt_GetArg(go, 1); maskfile = esl_opt_GetArg(go, 2); /* Open the : text mode, not digital */ if (esl_opt_GetString(go, "--informat") != NULL) { infmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat")); if (infmt == eslSQFILE_UNKNOWN) cmdline_failure(argv[0], "%s is not a valid input sequence file format for --informat"); } status = esl_sqfile_Open(seqfile, infmt, NULL, &sqfp); if (status == eslENOTFOUND) cmdline_failure(argv[0], "Sequence file %s not found.\n", seqfile); else if (status == eslEFORMAT) cmdline_failure(argv[0], "Format of file %s unrecognized.\n", seqfile); else if (status == eslEINVAL) cmdline_failure(argv[0], "Can't autodetect stdin or .gz.\n"); else if (status != eslOK) cmdline_failure(argv[0], "Open failed, code %d.\n", status); if(do_fetching) { status = esl_sqfile_OpenSSI(sqfp, NULL); if (status == eslEFORMAT) cmdline_failure(argv[0], "SSI index is in incorrect format\n"); else if (status == eslERANGE) cmdline_failure(argv[0], "SSI index is in 64-bit format and we can't read it\n"); else if (status != eslOK) cmdline_failure(argv[0], "Failed to open SSI index\n"); } /* Open the */ if (esl_fileparser_Open(maskfile, NULL, &maskefp) != eslOK) cmdline_failure(argv[0], "Failed to open mask coordinate file %s\n", maskfile); esl_fileparser_SetCommentChar(maskefp, '#'); /* Open the output file, if any */ if (esl_opt_GetString(go, "-o") != NULL) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) cmdline_failure(argv[0], "Failed to open output file %s\n", esl_opt_GetString(go, "-o")); } else ofp = stdout; /**************************************************************************** * Main loop over lines in ****************************************************************************/ /* Read one data line at a time from the ; * parse into data fields */ while (esl_fileparser_NextLine(maskefp) == eslOK) { /* First field is sequence name */ if (esl_fileparser_GetTokenOnLine(maskefp, &source, NULL) != eslOK) esl_fatal("Failed to read source seq name on line %d of file %s\n", maskefp->linenumber, maskfile); /* Get the sequence */ if (do_fetching) { /* If the is SSI indexed, try to reposition it and read seq by random access */ status = esl_sqio_Fetch(sqfp, source, sq); if (status == eslENOTFOUND) esl_fatal("seq %s not found in SSI index for file %s\n", source, sqfp->filename); else if (status == eslEINVAL) esl_fatal("No SSI index or can't reposition in file %s\n", sqfp->filename); else if (status == eslEFORMAT) esl_fatal("Parse failed:\n%s\n", esl_sqfile_GetErrorBuf(sqfp)); else if (status != eslOK) esl_fatal("Unexpected failure in fetching %s from file %s\n", source, sqfp->filename); } else { /* else, assume we're reading sequentially; and have seqs in same order */ status = esl_sqio_Read(sqfp, sq); if (status == eslEOF) esl_fatal("File %s ended prematurely; didn't find %s\n", sqfp->filename, source); else if (status == eslEFORMAT) esl_fatal("Parse failed:\n%s\n", esl_sqfile_GetErrorBuf(sqfp)); else if (status != eslOK) esl_fatal("Unexpected error reading sequence file %s\n", sqfp->filename); if ((strcmp(sq->name, source) != 0) && (strcmp(sq->acc, source) != 0)) esl_fatal("Sequences in and aren't in same order; try -R"); } /* If we're masking by lowercase, first make sure everything's uppercase */ if (do_lowercase) for (pos = 0; pos < sq->n; pos++) if (isalpha(sq->seq[pos])) sq->seq[pos] = toupper(sq->seq[pos]); /* Next two fields are , for the masking */ /* possible future extension: wrap loop around this, enable multiple masked regions */ if (esl_fileparser_GetTokenOnLine(maskefp, &p1, NULL) != eslOK) esl_fatal("Failed to read start coord on line %d of file %s\n", maskefp->linenumber, maskfile); start = strtoll(p1, &p2, 0) - 1; if (esl_fileparser_GetTokenOnLine(maskefp, &p2, NULL) != eslOK) esl_fatal("Failed to read end coord on line %d of file %s\n", maskefp->linenumber, maskfile); end = strtoll(p2, &p1, 0) - 1; /* Do the masking */ if (esl_opt_GetBoolean(go, "-r")) /* Reverse masking */ { /* leave start..end unmasked; mask prefix 0..start-1, end+1..L-1 */ i = 0; j = ESL_MIN(sq->n-1, start - 1 + overmask); for (pos = i; pos <= j; pos++) if (isalpha(sq->seq[pos])) sq->seq[pos] = (do_lowercase ? tolower(sq->seq[pos]) : maskchar); i = ESL_MAX(0, end + 1 - overmask); j = sq->n-1; for (pos = i; pos <= j; pos++) if (isalpha(sq->seq[pos])) sq->seq[pos] = (do_lowercase ? tolower(sq->seq[pos]) : maskchar); } else { /* normal: mask start..end */ i = ESL_MAX(0, start - overmask); j = ESL_MIN(sq->n-1, end + overmask); for (pos = i; pos <= j; pos++) if (isalpha(sq->seq[pos])) sq->seq[pos] = (do_lowercase ? tolower(sq->seq[pos]) : maskchar); } esl_sqio_Write(ofp, sq, outfmt, FALSE); esl_sq_Reuse(sq); } esl_sq_Destroy(sq); esl_fileparser_Close(maskefp); esl_sqfile_Close(sqfp); esl_getopts_Destroy(go); if (ofp != stdout) fclose(ofp); return 0; } hmmer-3.1b2/easel/miniapps/esl-compalign.c0000664361611702660230000006150712473612611020106 0ustar wheelerteddy/* esl-compalign - compare two multiple sequence alignments * */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_fileparser.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_vectorops.h" #include "esl_wuss.h" static char banner[] = "compare two multiple sequence alignments"; static char usage[] = "\ [-options] \n\ Both files must be in Stockholm format with #=GC RF markup.\n\ Sequences must occur in the same order in the two files.\n\ Number of non-gap characters in #=GC RF markup must be identical.\n\ Note: accuracy is computed differently than in Squid\'s compalign.\n\ See the manual page for details on how accuracy is computed."; static int get_pp_idx(ESL_ALPHABET *abc, char ppchar); static int read_mask_file(char *filename, char *errbuf, char **ret_mask, int *ret_masklen); static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "help; show brief info on version and usage", 1 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "print per column statistics instead of per sequence stats", 1 }, { "-p", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "print stats on accuracy versus posterior probability (PP)", 1 }, { "--p-mask", eslARG_OUTFILE,NULL, NULL, NULL, NULL,"-p", NULL, "with -p, only consider columns within mask ('1' columns) in ",1 }, { "--c2dfile", eslARG_OUTFILE,NULL, NULL, NULL, NULL,"-c", NULL, "print per column stats to esl-ssdraw --dfile file ", 1 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--dna,--rna", " contains protein alignments", 2 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--amino,--rna", " contains DNA alignments", 2 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--amino,--dna", " contains RNA alignments", 2 }, { 0,0,0,0,0,0,0,0,0,0 }, }; int main(int argc, char **argv) { ESL_GETOPTS *go; /* application configuration */ int kstatus, tstatus;/* return code from Easel routine */ int fmt; /* expected format of kfile, tfile */ char *kfile, *tfile; /* known, test structure file */ ESLX_MSAFILE *kfp, *tfp; /* open kfile, tfile */ ESL_MSA *ka, *ta; /* known, trusted alignment */ int64_t klen, tlen; /* lengths of dealigned seqs */ int i; /* counter over sequences */ int apos; /* counter over alignment columns */ int rfpos; /* counter over consensus (non-gap RF) columns */ int is_rfpos; /* TRUE if current apos is a consensus pos, FALSE if not */ int uapos; /* counter over unaligned residue positions */ int nali; /* number of alignment we're on in each file */ int **kp; /* [0..i..nseq-1][1..r..sq->n] = x known non-gap RF position of residue r in sequence i */ int **tp; /* [0..i..nseq-1][1..r..sq->n] = x predicted non-gap RF position of residue r in sequence i */ /* for both kp and pp, if x <= 0, residue r for seq i is not aligned to a non-gap RF position, but rather as an 'insert' * after non-gap RF position (x * -1) */ int *km_pos; /* [0..rflen] = x, in known aln, number of residues aligned to non-gap RF column x; special case: mct[0] = 0 */ int *ki_pos; /* [0..rflen] = x, in known aln, number of residues inserted after non-gap RF column x */ int *tm_pos; /* [0..rflen] = x, in predicted aln, number of residues aligned to non-gap RF column x; special case: mct[0] = 0 */ int *ti_pos; /* [0..rflen] = x, in predicted aln, number of residues inserted after non-gap RF column x */ int *cor_tm_pos; /* [0..rflen] = x, in predicted aln, number of correctly predicted residues aligned to non-gap RF column x; special case: mct[0] = 0 */ int *cor_ti_pos; /* [0..rflen] = x, in predicted aln, number of correctly predicted residues inserted after non-gap RF column x */ int *km_seq; /* [0..i..nseq-1] = x, in known aln, number of residues aligned to non-gap RF columns in seq i; */ int *ki_seq; /* [0..i..nseq-1] = x, in known aln, number of residues inserted in seq i */ int *tm_seq; /* [0..i..nseq-1] = x, in predicted aln, number of residues aligned to non-gap RF columns in seq i; */ int *ti_seq; /* [0..i..nseq-1] = x, in predicted aln, number of residues inserted in seq i */ int *cor_tm_seq; /* [0..i..nseq-1] = x, in predicted aln, number of correctly predicted residues aligned to non-gap RF columns in seq i */ int *cor_ti_seq; /* [0..i..nseq-1] = x, in predicted aln, number of correctly predicted residues inserted in seq i */ int *seqlen; /* [0..i..nseq-1] = x, unaligned seq i has length x */ ESL_ALPHABET *abc = NULL; /* alphabet for all alignments */ int rflen, t_rflen; /* non-gap RF length (consensus lengths) */ int status; char *namedashes; int ni; int namewidth = 8; /* length of 'seq name' */ int cor_tm, cor_ti, km, ki; /* correct predicted match, correct predicted insert, total match, total insert */ char *mask = NULL; int masklen; ESL_DSQ *ks; ESL_DSQ *ts; FILE *dfp = NULL; /* for --c2dfile */ /* variables needed for -p and related options */ int do_post = FALSE; /* TRUE if -p enabled */ int do_post_for_this_rfpos = FALSE; /* set for each consensus position, always TRUE unless --mask-p2xm */ int p; /* counter over integerized posteriors */ int *ptm = NULL; /* [0..p..10] number of total matches with posterior value p (10="*")*/ int *pti = NULL; /* [0..p..10] number of total inserts with posterior value p */ int *cor_ptm = NULL; /* [0..p..10] number of correct matches with posterior value p */ int *cor_pti = NULL; /* [0..p..10] number of correct inserts with posterior value p */ int npostvals = 11; /* number of posterior values 0-9, * */ int ppidx; /* index of PP */ char ppchars[11] = "0123456789*"; int cm_cor_ptm, cm_cor_pti, cm_ptm, cm_pti, cm_incor_ptm, cm_incor_pti; /* cumulative counts of posteriors */ int tot_cor_ptm, tot_cor_pti, tot_ptm, tot_pti, tot_incor_ptm, tot_incor_pti; /* total counts of posteriors */ char errbuf[eslERRBUFSIZE]; /*********************************************** * Parse command line ***********************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "-h") ) { esl_banner(stdout, argv[0], banner); esl_usage (stdout, argv[0], usage); puts("\n where options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); exit(EXIT_SUCCESS); } if (esl_opt_ArgNumber(go) != 2) { printf("Incorrect number of command line arguments.\n"); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } kfile = esl_opt_GetArg(go, 1); tfile = esl_opt_GetArg(go, 2); fmt = eslMSAFILE_STOCKHOLM; /*********************************************** * Open the two Stockholm files. ***********************************************/ if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); if ( (kstatus = eslx_msafile_Open(&abc, kfile, NULL, fmt, NULL, &kfp)) != eslOK) eslx_msafile_OpenFailure(kfp, kstatus); if ( (tstatus = eslx_msafile_Open(&abc, tfile, NULL, fmt, NULL, &tfp)) != eslOK) eslx_msafile_OpenFailure(tfp, tstatus); do_post = esl_opt_GetBoolean(go, "-p"); /* read the mask file if --p-mask is enabled */ if(! esl_opt_IsDefault(go, "--p-mask")) { if((status = read_mask_file(esl_opt_GetString(go, "--p-mask"), errbuf, &mask, &masklen)) != eslOK) esl_fatal(errbuf); } /* open the c2dfile for output, if nec */ if (esl_opt_IsOn(go, "--c2dfile")) { if ((dfp = fopen(esl_opt_GetString(go, "--c2dfile"), "w")) == NULL) esl_fatal("Failed to open --c2dfile output file %s\n", esl_opt_GetString(go, "--c2dfile")); } /*********************************************** * Do alignment comparisons, one seq at a time; * this means looping over all seqs in all alignments. ***********************************************/ nali = 0; while ( (kstatus = eslx_msafile_Read(kfp, &ka)) != eslEOF) { if ( kstatus != eslOK) eslx_msafile_ReadFailure(kfp, kstatus); if ( (tstatus = eslx_msafile_Read(tfp, &ta)) != eslOK) eslx_msafile_ReadFailure(tfp, tstatus); nali++; if((nali > 1) && (esl_opt_IsOn(go, "--c2dfile"))) esl_fatal("--c2dfile is only meant for msafiles with single alignments"); /* Sanity check on alignment */ if (ka->nseq != ta->nseq) esl_fatal("trusted, test alignments don't have same seq #\n"); if (ka->rf == NULL) esl_fatal("trusted alignment has no reference annotation\n"); if (ta->rf == NULL) esl_fatal("test alignment has no reference annotation\n"); /* make sure the sequences are all identical */ ESL_ALLOC(seqlen, sizeof(int) * ka->nseq); for(i = 0; i < ka->nseq; i++) { if(strcmp(ka->sqname[i], ta->sqname[i]) != 0) esl_fatal("sequence i of trusted alignment %s has different name than seq i of predicted alignment %s\n", ka->sqname[i], ta->sqname[i]); ESL_ALLOC(ks, sizeof(ESL_DSQ) * (ka->alen+2)); memcpy(ks, ka->ax[i], (ka->alen+2) * sizeof(ESL_DSQ)); esl_abc_XDealign(ka->abc, ks, ka->ax[i], &klen); ESL_ALLOC(ts, sizeof(ESL_DSQ) * (ta->alen+2)); memcpy(ts, ta->ax[i], (ta->alen+2) * sizeof(ESL_DSQ)); esl_abc_XDealign(ta->abc, ts, ta->ax[i], &tlen); if (tlen != klen) esl_fatal("dealigned sequence mismatch, seq %d, when dealigned, is %d residues in the known alignment, but %d residues in the trusted alignment.", i, klen, tlen); if (memcmp(ks, ts, sizeof(ESL_DSQ) * klen) != 0) esl_fatal("dealigned sequence mismatch, seq %d %s, when dealigned, are not identical.", i, ka->sqname[i]); seqlen[i] = tlen; free(ks); free(ts); } /* determine non-gap RF length */ rflen = 0; for(apos = 1; apos <= ka->alen; apos++) { if((! esl_abc_CIsGap (ka->abc, ka->rf[apos-1])) && (! esl_abc_CIsMissing(ka->abc, ka->rf[apos-1]))) rflen++; } t_rflen = 0; for(apos = 1; apos <= ta->alen; apos++) { if((! esl_abc_CIsGap (ta->abc, ta->rf[apos-1])) && (! esl_abc_CIsMissing (ta->abc, ta->rf[apos-1]))) t_rflen++; } if(t_rflen != rflen) esl_fatal("Trusted alignment non-gap RF length (%d) != predicted alignment non-gap RF length (%d).\n", rflen, t_rflen); /* if -p, make sure the test alignment has posterior probabilities, and allocate our counters for correct/incorrect per post value */ if(do_post) { if(! esl_opt_IsDefault(go, "--p-mask")) { if(masklen != rflen) { esl_fatal("Length of mask in %s (%d) not equal to non-gap RF len of alignments (%d)\n", esl_opt_GetString(go, "--p-mask"), masklen, rflen); } } if(ta->pp == NULL) esl_fatal("-p requires \"#=GR PP\" annotation in the test alignment, but none exists"); ESL_ALLOC(ptm, sizeof(int) * npostvals); ESL_ALLOC(pti, sizeof(int) * npostvals); ESL_ALLOC(cor_ptm, sizeof(int) * npostvals); ESL_ALLOC(cor_pti, sizeof(int) * npostvals); esl_vec_ISet(ptm, npostvals, 0); esl_vec_ISet(pti, npostvals, 0); esl_vec_ISet(cor_ptm, npostvals, 0); esl_vec_ISet(cor_pti, npostvals, 0); } /* allocate and initialize our counters */ ESL_ALLOC(kp, sizeof(int *) * ka->nseq); ESL_ALLOC(tp, sizeof(int *) * ta->nseq); for(i = 0; i < ka->nseq; i++) { ESL_ALLOC(kp[i], sizeof(int) * (seqlen[i]+1)); ESL_ALLOC(tp[i], sizeof(int) * (seqlen[i]+1)); esl_vec_ISet(kp[i], seqlen[i]+1, -987654321); esl_vec_ISet(tp[i], seqlen[i]+1, -987654321); } ESL_ALLOC(km_pos, sizeof(int) * (rflen+1)); ESL_ALLOC(ki_pos, sizeof(int) * (rflen+1)); ESL_ALLOC(tm_pos, sizeof(int) * (rflen+1)); ESL_ALLOC(ti_pos, sizeof(int) * (rflen+1)); ESL_ALLOC(cor_tm_pos, sizeof(int) * (rflen+1)); ESL_ALLOC(cor_ti_pos, sizeof(int) * (rflen+1)); esl_vec_ISet(km_pos, rflen+1, 0); esl_vec_ISet(ki_pos, rflen+1, 0); esl_vec_ISet(tm_pos, rflen+1, 0); esl_vec_ISet(ti_pos, rflen+1, 0); esl_vec_ISet(cor_tm_pos, rflen+1, 0); esl_vec_ISet(cor_ti_pos, rflen+1, 0); ESL_ALLOC(km_seq, sizeof(int) * ka->nseq); ESL_ALLOC(ki_seq, sizeof(int) * ka->nseq); ESL_ALLOC(tm_seq, sizeof(int) * ka->nseq); ESL_ALLOC(ti_seq, sizeof(int) * ka->nseq); ESL_ALLOC(cor_tm_seq, sizeof(int) * ka->nseq); ESL_ALLOC(cor_ti_seq, sizeof(int) * ka->nseq); esl_vec_ISet(km_seq, ka->nseq, 0); esl_vec_ISet(ki_seq, ka->nseq, 0); esl_vec_ISet(tm_seq, ka->nseq, 0); esl_vec_ISet(ti_seq, ka->nseq, 0); esl_vec_ISet(cor_tm_seq, ka->nseq, 0); esl_vec_ISet(cor_ti_seq, ka->nseq, 0); /* determine non-gap RF location of each residue in known alignment */ for(i = 0; i < ka->nseq; i++) { uapos = rfpos = 0; for(apos = 1; apos <= ka->alen; apos++) { is_rfpos = FALSE; if((! esl_abc_CIsGap (ka->abc, ka->rf[apos-1])) && (! esl_abc_CIsMissing (ka->abc, ka->rf[apos-1]))) { rfpos++; is_rfpos = TRUE; } if(esl_abc_XIsResidue(ka->abc, ka->ax[i][apos])) { uapos++; kp[i][uapos] = (is_rfpos) ? rfpos : (-1 * rfpos); if(is_rfpos) { km_pos[rfpos]++; km_seq[i]++; } else { ki_pos[rfpos]++; ki_seq[i]++; } } } } /* determine non-gap RF location of each residue in predicted alignment */ for(i = 0; i < ta->nseq; i++) { uapos = rfpos = 0; for(apos = 1; apos <= ta->alen; apos++) { is_rfpos = FALSE; if((! esl_abc_CIsGap (abc, ta->rf[apos-1])) && (! esl_abc_CIsMissing (abc, ta->rf[apos-1]))) { rfpos++; is_rfpos = TRUE; if(do_post) { do_post_for_this_rfpos = (mask != NULL && mask[rfpos-1] == '0') ? FALSE : TRUE; } } if(esl_abc_XIsResidue(ta->abc, ta->ax[i][apos])) { uapos++; tp[i][uapos] = (is_rfpos) ? rfpos : (-1 * rfpos); if(do_post) { if(esl_abc_CIsGap(abc, ta->pp[i][(apos-1)])) esl_fatal("gap PP value for nongap residue: ali: %d seq: %d apos: %d\n", nali, i, apos); ppidx = get_pp_idx(abc, ta->pp[i][(apos-1)]); if(ppidx == -1) esl_fatal("unrecognized PP value (%c) for nongap residue: ali: %d seq: %d apos: %d\n", ta->pp[i][(apos-1)], nali, i, apos); } if(is_rfpos) { tm_pos[rfpos]++; tm_seq[i]++; if(do_post_for_this_rfpos) ptm[ppidx]++; } else { ti_pos[rfpos]++; ti_seq[i]++; if(do_post) pti[ppidx]++; } if(kp[i][uapos] == tp[i][uapos]) { /* correctly predicted this residue */ if(is_rfpos) { cor_tm_seq[i]++; cor_tm_pos[rfpos]++; if(do_post_for_this_rfpos) cor_ptm[ppidx]++; } else { cor_ti_seq[i]++; cor_ti_pos[rfpos]++; if(do_post) cor_pti[ppidx]++; } } } } } if((! (esl_opt_GetBoolean(go, "-c"))) && (! esl_opt_GetBoolean(go, "-p"))) { /* print per sequence statistics */ /* determine the longest name in msa */ for(ni = 0; ni < ka->nseq; ni++) namewidth = ESL_MAX(namewidth, strlen(ka->sqname[ni])); ESL_ALLOC(namedashes, sizeof(char) * namewidth+1); namedashes[namewidth] = '\0'; for(ni = 0; ni < namewidth; ni++) namedashes[ni] = '-'; printf("# %-*s %6s %28s %28s %28s\n", namewidth, "seq name", "len", "match columns", "insert columns", "all columns"); printf("# %-*s %6s %28s %28s %28s\n", namewidth, namedashes, "------", "----------------------------", "----------------------------", "----------------------------"); for(i = 0; i < ta->nseq; i++) { printf(" %-*s %6d %8d / %8d (%.3f) %8d / %8d (%.3f) %8d / %8d (%.3f)\n", namewidth, ka->sqname[i], seqlen[i], cor_tm_seq[i], km_seq[i], (km_seq[i] == 0) ? 0. : ((float) cor_tm_seq[i] / (float) km_seq[i]), cor_ti_seq[i], ki_seq[i], (ki_seq[i] == 0) ? 0. : ((float) cor_ti_seq[i] / (float) ki_seq[i]), (cor_tm_seq[i] + cor_ti_seq[i]), (km_seq[i] + ki_seq[i]), ((float) (cor_tm_seq[i] + cor_ti_seq[i]) / ((float) km_seq[i] + ki_seq[i]))); } cor_tm = esl_vec_ISum(cor_tm_seq, ka->nseq); cor_ti = esl_vec_ISum(cor_ti_seq, ka->nseq); km = esl_vec_ISum(km_seq, ka->nseq); ki = esl_vec_ISum(ki_seq, ka->nseq); printf("# %-*s %6s %28s %28s %28s\n", namewidth, namedashes, "-----", "----------------------------", "----------------------------", "----------------------------"); printf("# %-*s %6s %8d / %8d (%.3f) %8d / %8d (%.3f) %8d / %8d (%.3f)\n", namewidth, "*all*", "-", cor_tm, km, ((float) cor_tm / (float) km), cor_ti, ki, ((float) cor_ti / (float) ki), (cor_tm+cor_ti), (km+ki), (((float) (cor_tm + cor_ti))/ ((float) (km + ki)))); free(namedashes); for(i = 0; i < ka->nseq; i++) { free(kp[i]); free(tp[i]); } } else if(esl_opt_GetBoolean(go, "-c")) { /* print per column statistics */ printf("# %5s %20s %20s %20s\n", "rfpos", "match", "insert", "both"); printf("# %5s %20s %20s %20s\n", "-----", "--------------------", "--------------------", "--------------------"); for(rfpos = 0; rfpos <= rflen; rfpos++) { printf(" %5d %4d / %4d (%.3f) %4d / %4d (%.3f) %4d / %4d (%.3f)\n", rfpos, cor_tm_pos[rfpos], km_pos[rfpos], (km_pos[rfpos] == 0) ? 0. : ((float) cor_tm_pos[rfpos] / (float) km_pos[rfpos]), cor_ti_pos[rfpos], ki_pos[rfpos], (ki_pos[rfpos] == 0) ? 0. : ((float) cor_ti_pos[rfpos] / (float) ki_pos[rfpos]), (cor_tm_pos[rfpos] + cor_ti_pos[rfpos]), (km_pos[rfpos] + ki_pos[rfpos]), ((float) (cor_tm_pos[rfpos] + cor_ti_pos[rfpos]) / ((float) km_pos[rfpos] + ki_pos[rfpos]))); } } else if(do_post) { /* do posterior output */ if(mask == NULL) { printf("# %2s %29s %29s\n", "", " match columns ", " insert columns "); printf("# %2s %29s %29s\n", "", "-----------------------------", "-----------------------------") ; printf("# %2s %8s %8s %9s %8s %8s %9s\n", "PP", "ncorrect", "ntotal", "fractcor", "ncorrect", "ntotal", "fractcor"); printf("# %2s %8s %8s %9s %8s %8s %9s\n", "--", "--------", "--------", "---------", "--------", "--------", "---------"); } else { printf("# %2s %29s %29s\n", "", " match columns within mask ", " insert columns "); printf("# %2s %29s %29s\n", "", "-----------------------------", "-----------------------------") ; printf("# %2s %8s %8s %9s %8s %8s %9s\n", "PP", "ncorrect", "ntotal", "fractcor", "ncorrect", "ntotal", "fractcor"); printf("# %2s %8s %8s %9s %8s %8s %9s\n", "--", "--------", "--------", "---------", "--------", "--------", "---------"); } cm_ptm = cm_pti = cm_cor_ptm = cm_cor_pti = cm_incor_ptm = cm_incor_pti = 0; tot_ptm = esl_vec_ISum(ptm, npostvals); tot_pti = esl_vec_ISum(pti, npostvals); tot_cor_ptm = esl_vec_ISum(cor_ptm, npostvals); tot_cor_pti = esl_vec_ISum(cor_pti, npostvals); tot_incor_ptm = tot_ptm - tot_cor_ptm; tot_incor_pti = tot_pti - tot_cor_pti; for(p = (npostvals-1); p >= 0; p--) { cm_cor_ptm += cor_ptm[p]; cm_cor_pti += cor_pti[p]; cm_ptm += ptm[p]; cm_pti += pti[p]; cm_incor_ptm += ptm[p] - cor_ptm[p]; cm_incor_pti += pti[p] - cor_pti[p]; printf(" %2c %8d / %8d (%.5f) %8d / %8d (%.5f)\n", ppchars[p], cor_ptm[p], ptm[p], (ptm[p] == 0) ? 0. : (float) cor_ptm[p] / (float) ptm[p], cor_pti[p], pti[p], (pti[p] == 0) ? 0. : (float) cor_pti[p] / (float) pti[p]); } } /* handle --c2dfile */ if (dfp != NULL) { /* match stats, 4 fields, CMYK color values */ for(rfpos = 1; rfpos <= rflen; rfpos++) { if(km_pos[rfpos] == 0) { /* special case, no known alignment residues, a blank position */ fprintf(dfp, "%.3f %.3f %.3f %.3f\n", 0., 0., 0., 0.); } else { fprintf(dfp, "%.3f %.3f %.3f %.3f\n", 0., /* cyan */ 1. - ((float) cor_tm_pos[rfpos] / (float) km_pos[rfpos]), /* magenta, fraction incorrect */ 1. - ((float) km_pos[rfpos] / ta->nseq), /* yellow, 1 - fraction of seqs with residue in column */ 0.); } } fprintf(dfp, "//\n"); /* insert stats, 4 fields, CMYK color values */ rfpos = 0; /* special case, combine insert posn 0 and 1 together */ if(ki_pos[rfpos] == 0) { /* special case, no known alignment residues, a blank position */ fprintf(dfp, "%.3f %.3f %.3f %.3f\n", 0., 0., 0., 0.); } else { fprintf(dfp, "%.3f %.3f %.3f %.3f\n", 0., /* cyan */ 1. - ((float) (cor_ti_pos[0] + cor_ti_pos[1]) / ((float) (ki_pos[0] + ki_pos[1]))), /* magenta, fraction correct */ 0., 0.); } /* insert stats posn 2..rflen */ for(rfpos = 2; rfpos <= rflen; rfpos++) { if(ki_pos[rfpos] == 0) { /* special case, no known alignment residues, a blank position */ fprintf(dfp, "%.3f %.3f %.3f %.3f\n", 0., 0., 0., 0.); } else { fprintf(dfp, "%.3f %.3f %.3f %.3f\n", 0., /* cyan */ 1. - ((float) cor_ti_pos[rfpos] / (float) ki_pos[rfpos]), /* magenta, fraction correct */ 0., 0.); } } fprintf(dfp, "//\n"); } if(ptm != NULL) free(ptm); if(pti != NULL) free(pti); if(cor_ptm != NULL) free(cor_ptm); if(cor_ptm != NULL) free(cor_pti); free(kp); free(tp); free(km_seq); free(ki_seq); free(tm_seq); free(ti_seq); free(cor_tm_seq); free(cor_ti_seq); free(km_pos); free(ki_pos); free(tm_pos); free(ti_pos); free(cor_tm_pos); free(cor_ti_pos); free(seqlen); esl_msa_Destroy(ka); esl_msa_Destroy(ta); } if(mask != NULL) free(mask); if(dfp != NULL) { fclose(dfp); printf("# Draw file of per-column stats saved to file: %s\n", esl_opt_GetString(go, "--c2dfile")); } if(abc) esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); eslx_msafile_Close(tfp); eslx_msafile_Close(kfp); return 0; ERROR: return status; } /* get_pp_idx * * Given a #=GR PP or #=GC PP_cons character, return the appropriate index * in a pp_ct[] vector. * '0' return 0; * '1' return 1; * '2' return 2; * '3' return 3; * '4' return 4; * '5' return 5; * '6' return 6; * '7' return 7; * '8' return 8; * '9' return 9; * '*' return 10; * gap return 11; * * Anything else (including missing or nonresidue) return -1; */ static int get_pp_idx(ESL_ALPHABET *abc, char ppchar) { if(ppchar == '*') return 10; if(ppchar == '9') return 9; if(ppchar == '8') return 8; if(ppchar == '7') return 7; if(ppchar == '6') return 6; if(ppchar == '5') return 5; if(ppchar == '4') return 4; if(ppchar == '3') return 3; if(ppchar == '2') return 2; if(ppchar == '1') return 1; if(ppchar == '0') return 0; return -1; } /* read_mask_file * * Given an open file pointer, read the first token of the * file and return it as *ret_mask. It must contain only * '0' or '1' characters. * * Returns: eslOK on success. */ int read_mask_file(char *filename, char *errbuf, char **ret_mask, int *ret_mask_len) { int status; ESL_FILEPARSER *efp; char *tok; char *mask; int toklen; int n; if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to open %s in read_mask_file\n", filename); esl_fileparser_SetCommentChar(efp, '#'); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to read a single token from %s\n", filename); ESL_ALLOC(mask, sizeof(char) * (toklen+1)); for(n = 0; n < toklen; n++) { if((tok[n] == '0') || (tok[n] == '1')) { mask[n] = tok[n]; } else { ESL_FAIL(eslFAIL, errbuf, "read a non-0 and non-1 character (%c) in the mask file %s\n", tok[n], filename); } } mask[n] = '\0'; *ret_mask = mask; *ret_mask_len = n; esl_fileparser_Close(efp); return eslOK; ERROR: return eslEMEM; } hmmer-3.1b2/easel/miniapps/esl-afetch.c0000664361611702660230000003470312473612610017364 0ustar wheelerteddy/* Fetch an MSA from a multi-MSA database (such as Pfam or Rfam). */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_fileparser.h" #include "esl_keyhash.h" #include "esl_mem.h" #include "esl_ssi.h" #include "esl_msa.h" #include "esl_msafile.h" static char banner[] = "retrieve multiple sequence alignment(s) from a file"; static char usage1[] = "[options] (retrieves one alignment named )"; static char usage2[] = "[options] -f (retrieves all alignments named in )"; static char usage3[] = "[options] --index (indexes )"; static void cmdline_failure(char *argv0, char *format, ...) { va_list argp; va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); esl_usage(stdout, argv0, usage1); esl_usage(stdout, argv0, usage2); esl_usage(stdout, argv0, usage3); printf("\nTo see more help on available options, do %s -h\n\n", argv0); exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { esl_banner(stdout, argv0, banner); esl_usage (stdout, argv0, usage1); esl_usage (stdout, argv0, usage2); esl_usage (stdout, argv0, usage3); puts("\n where options are:"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); exit(0); } static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "help; show brief info on version and usage", 0 }, { "-f", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL,"--index", "second cmdline arg is a file of names to retrieve", 0 }, { "-o", eslARG_OUTFILE, FALSE, NULL, NULL, NULL, NULL,"-O,--index", "output alignments to file instead of stdout", 0 }, { "-O", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL,"-o,-f,--index","output alignment to file named ", 0 }, { "--informat", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, NULL, "specify that is in format ", 0 }, { "--outformat",eslARG_STRING,"Stockholm", NULL, NULL, NULL, NULL, "--index", "output fetched alignment(s) in format ", 0 }, { "--index", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "index the , creating .ssi", 0 }, { 0,0,0,0,0,0,0,0,0,0 }, }; static void create_ssi_index(ESL_GETOPTS *go, ESLX_MSAFILE *afp); static void multifetch(ESL_GETOPTS *go, FILE *ofp, int outfmt, char *keyfile, ESLX_MSAFILE *afp); static void onefetch (ESL_GETOPTS *go, FILE *ofp, int outfmt, char *key, ESLX_MSAFILE *afp); static void regurgitate_one_stockholm_entry(FILE *ofp, ESLX_MSAFILE *afp); int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* application configuration */ char *alifile = NULL; /* alignment file name */ int infmt = eslMSAFILE_UNKNOWN; /* format code for alifile */ int outfmt = eslMSAFILE_UNKNOWN; /* output format for fetched msa's */ ESLX_MSAFILE *afp = NULL; /* open alignment file */ FILE *ofp = NULL; /* output stream for alignments */ int status; /* easel return code */ /*********************************************** * Parse command line ***********************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], "Error in configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") ) cmdline_help (argv[0], go); if (esl_opt_ArgNumber(go) < 1) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); if (esl_opt_IsOn(go, "--informat")) { infmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--informat")); if (infmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input alignment file format for --informat", esl_opt_GetString(go, "--informat")); } outfmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--outformat")); if (outfmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid output alignment file format for --outformat", esl_opt_GetString(go, "--outformat")); alifile = esl_opt_GetArg(go, 1); /* Open the alignment file. */ if ( (status = eslx_msafile_Open(NULL, alifile, NULL, infmt, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); /* Open the SSI index, if any */ if (! esl_opt_GetBoolean(go, "--index")) { if (afp->bf->mode_is == eslBUFFER_FILE || afp->bf->mode_is == eslBUFFER_ALLFILE || afp->bf->mode_is == eslBUFFER_MMAP) { char *ssifile = NULL; esl_sprintf(&ssifile, "%s.ssi", afp->bf->filename); status = esl_ssi_Open(ssifile, &(afp->ssi)); if (status == eslERANGE ) esl_fatal("SSI index %s has 64-bit offsets; this system doesn't support them", ssifile); else if (status == eslEFORMAT) esl_fatal("SSI index %s has an unrecognized format. Try recreating, w/ esl-afetch --index", ssifile); else if (status == eslENOTFOUND) afp->ssi = NULL; else if (status != eslOK) esl_fatal("SSI index %s: open failed, error code %d\n", ssifile, status); free(ssifile); } } /* Open the output file, if any */ if (esl_opt_GetBoolean(go, "-O")) { if ((ofp = fopen(esl_opt_GetArg(go, 2), "w")) == NULL) esl_fatal("Failed to open output file %s\n", esl_opt_GetArg(go, 2)); } else if (esl_opt_GetString(go, "-o") != NULL) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) esl_fatal("Failed to open output file %s\n", esl_opt_GetString(go, "-o")); } else ofp = stdout; /* Hand off control flow as appropriate */ if (esl_opt_GetBoolean(go, "--index")) { if (esl_opt_ArgNumber(go) != 1) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); create_ssi_index(go, afp); } else if (esl_opt_GetBoolean(go, "-f")) { if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); multifetch(go, ofp, outfmt, esl_opt_GetArg(go, 2), afp); } else { if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); onefetch(go, ofp, outfmt, esl_opt_GetArg(go, 2), afp); if (ofp != stdout) printf("\n\nRetrieved alignment %s.\n", esl_opt_GetArg(go, 2)); } eslx_msafile_Close(afp); esl_getopts_Destroy(go); exit(0); } /* Create an SSI index file for open MSA file . * Both name and accession of MSAs are stored as keys. */ static void create_ssi_index(ESL_GETOPTS *go, ESLX_MSAFILE *afp) { ESL_NEWSSI *ns = NULL; ESL_MSA *msa = NULL; int nali = 0; char *ssifile = NULL; uint16_t fh; int status; if (afp->bf->mode_is != eslBUFFER_FILE && afp->bf->mode_is != eslBUFFER_ALLFILE && afp->bf->mode_is != eslBUFFER_MMAP) esl_fatal(" must be a regular file to be SSI indexed"); esl_sprintf(&ssifile, "%s.ssi", afp->bf->filename); status = esl_newssi_Open(ssifile, FALSE, &ns); if (status == eslENOTFOUND) esl_fatal("failed to open SSI index %s", ssifile); else if (status == eslEOVERWRITE) esl_fatal("SSI index %s already exists; delete or rename it", ssifile); else if (status != eslOK) esl_fatal("failed to create a new SSI index"); if (esl_newssi_AddFile(ns, afp->bf->filename, afp->format, &fh) != eslOK) esl_fatal("Failed to add MSA file %s to new SSI index\n", afp->bf->filename); printf("Working... "); fflush(stdout); while ((status = eslx_msafile_Read(afp, &msa)) != eslEOF) { if (status != eslOK) eslx_msafile_ReadFailure(afp, status); nali++; if (! msa->name) esl_fatal("Every alignment in file must have a name to be indexed. Failed to find name of alignment #%d\n", nali); if (esl_newssi_AddKey(ns, msa->name, fh, msa->offset, 0, 0) != eslOK) esl_fatal("Failed to add key %s to SSI index", msa->name); if (msa->acc && esl_newssi_AddAlias(ns, msa->acc, msa->name) != eslOK) esl_fatal("Failed to add secondary key %s to SSI index", msa->acc); esl_msa_Destroy(msa); } if (esl_newssi_Write(ns) != eslOK) esl_fatal("Failed to write keys to ssi file %s\n", ssifile); printf("done.\n"); if (ns->nsecondary) printf("Indexed %d alignments (%ld names and %ld accessions).\n", nali, (long) ns->nprimary, (long) ns->nsecondary); else printf("Indexed %d alignments (%ld names).\n", nali, (long) ns->nprimary); printf("SSI index written to file %s\n", ssifile); free(ssifile); esl_newssi_Close(ns); return; } /* multifetch: * given a file containing lines with one name or key per line; * parse the file line-by-line; * if we have an SSI index available, retrieve the MSAs by key * as we see each line; * else, without an SSI index, store the keys in a hash, then * read the entire MSA file in a single pass, outputting MSAs * that are in our keylist. * * Note that with an SSI index, you get the MSAs in the order they * appear in the , but without an SSI index, you get MSAs in * the order they occur in the MSA file. */ static void multifetch(ESL_GETOPTS *go, FILE *ofp, int outfmt, char *keyfile, ESLX_MSAFILE *afp) { ESL_KEYHASH *keys = esl_keyhash_Create(); ESL_FILEPARSER *efp = NULL; ESL_MSA *msa = NULL; int nali = 0; char *key; int keylen; int keyidx; int status; if (esl_fileparser_Open(keyfile, NULL, &efp) != eslOK) esl_fatal("Failed to open key file %s\n", keyfile); esl_fileparser_SetCommentChar(efp, '#'); while (esl_fileparser_NextLine(efp) == eslOK) { if (esl_fileparser_GetTokenOnLine(efp, &key, &keylen) != eslOK) esl_fatal("Failed to read MSA name on line %d of file %s\n", efp->linenumber, keyfile); status = esl_keyhash_Store(keys, key, keylen, &keyidx); if (status == eslEDUP) esl_fatal("MSA key %s occurs more than once in file %s\n", key, keyfile); if (afp->ssi) { onefetch(go, ofp, outfmt, key, afp); nali++; } } if (! afp->ssi) { while ((status = eslx_msafile_Read(afp, &msa)) != eslEOF) { if (status != eslOK) eslx_msafile_ReadFailure(afp, status); nali++; if (msa->name == NULL) esl_fatal("Every alignment in file must have a name to be retrievable. Failed to find name of alignment #%d\n", nali); if ( (esl_keyhash_Lookup(keys, msa->name, -1, NULL) == eslOK) || (msa->acc != NULL && esl_keyhash_Lookup(keys, msa->acc, -1, NULL) == eslOK)) eslx_msafile_Write(ofp, msa, outfmt); esl_msa_Destroy(msa); } } if (ofp != stdout) printf("\nRetrieved %d alignments.\n", nali); esl_keyhash_Destroy(keys); esl_fileparser_Close(efp); return; } /* onefetch(): * Given one (an MSA name or accession), retrieve the corresponding MSA. * In SSI mode, we can do this quickly by positioning the file, then regurgitating * every line until the end-of-alignment marker; we don't even have to parse. * Without an SSI index, we have to parse the MSAs sequentially 'til we find * the one we're after. */ static void onefetch(ESL_GETOPTS *go, FILE *ofp, int outfmt, char *key, ESLX_MSAFILE *afp) { ESL_MSA *msa = NULL; int nali = 1; int status; if (afp->ssi) { status = eslx_msafile_PositionByKey(afp, key); if (status == eslENOTFOUND) esl_fatal("MSA %s not found in SSI index for file %s\n", key, afp->bf->filename); else if (status == eslEFORMAT) esl_fatal("Failed to parse SSI index for %s\n", afp->bf->filename); else if (status != eslOK) esl_fatal("Failed to look up location of MSA %s in SSI index of file %s\n", key, afp->bf->filename); if ( (afp->format == eslMSAFILE_STOCKHOLM && outfmt == eslMSAFILE_STOCKHOLM) || (afp->format == eslMSAFILE_PFAM && outfmt == eslMSAFILE_PFAM)) { regurgitate_one_stockholm_entry(ofp, afp); } else { if ((status = eslx_msafile_Read(afp, &msa)) != eslOK) eslx_msafile_ReadFailure(afp, status); eslx_msafile_Write(ofp, msa, outfmt); esl_msa_Destroy(msa); } } else { /* without an index, we have to brute-force search the file */ while ((status = eslx_msafile_Read(afp, &msa)) != eslEOF) { if (status != eslOK) eslx_msafile_ReadFailure(afp, status); if (! msa->name) esl_fatal("Every alignment in file must have a name to be retrievable. Failed to find name of alignment #%d\n", nali); if (strcmp(key, msa->name) == 0 || (msa->acc != NULL && strcmp(key, msa->acc) == 0)) break; nali++; esl_msa_Destroy(msa); } if (! msa) esl_fatal("Failed to find alignment %s\n", key); eslx_msafile_Write(ofp, msa, outfmt); esl_msa_Destroy(msa); } } /* regurgitate_one_stockholm_entry() * Read and output an alignment line-by-line without parsing it, stopping when * we reach the end-of-alignment marker. */ static void regurgitate_one_stockholm_entry(FILE *ofp, ESLX_MSAFILE *afp) { char *p; esl_pos_t n; int status; while ( (status = eslx_msafile_GetLine(afp, &p, &n)) == eslOK) { fwrite(p, sizeof(char), n, ofp); fputs("\n", ofp); if (esl_memstrpfx(p, n, "//")) break; } if (status == eslEOF) esl_fatal("Reached end of file before finding // termination line for alignment"); else if (status != eslOK) esl_fatal("Failure in reading alignment line by line"); } /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/miniapps/esl-afetch.c $ * SVN $Id: esl-afetch.c 732 2011-11-11 15:11:13Z eddys $ *****************************************************************/ hmmer-3.1b2/easel/miniapps/esl-sfetch.c0000664361611702660230000005261712473612611017413 0ustar wheelerteddy/* Fetch a sequence (or part of one) from a sequence flatfile. * * From squid's sfetch and ffetch * SRE, Mon Mar 31 16:12:50 2008 [Janelia] * SVN $Id: esl-sfetch.c 862 2013-04-12 18:56:42Z wheelert $ */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_fileparser.h" #include "esl_keyhash.h" #include "esl_regexp.h" #include "esl_ssi.h" #include "esl_sq.h" #include "esl_sqio.h" static char banner[] = "retrieve sequence(s) from a file"; static char usage1[] = "[options] (one seq named )"; static char usage2[] = "[options] -f (all seqs in )"; static char usage3[] = "[options] --index (index )"; static void cmdline_failure(char *argv0, char *format, ...) { va_list argp; va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); esl_usage(stdout, argv0, usage1); esl_usage(stdout, argv0, usage2); esl_usage(stdout, argv0, usage3); printf("\nTo see more help on available options, do %s -h\n\n", argv0); exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { esl_banner(stdout, argv0, banner); esl_usage (stdout, argv0, usage1); esl_usage (stdout, argv0, usage2); esl_usage (stdout, argv0, usage3); puts("\n where general options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); puts("\n Options for retrieving subsequences:"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); puts("\n On command line, subseq coords are separated by any nonnumeric, nonspace character(s)."); puts(" for example, -c 23..100 or -c 23/100 or -c 23-100 all work.\n"); puts(" Additionally, to retrieve a suffix to the end, omit the end coord or set it to zero; -c 23.. "); puts(" will work, as will -c 23..0\n"); puts(" By default, the subseq will be named /-. To assign a name of"); puts(" your choice, use -n .\n"); puts(" In retrieving subsequences listed in a file (-C -f, or just -Cf), each line of the file"); puts(" is in GDF format: , space/tab delimited.\n"); puts(" When coordinate is greater than , for DNA or RNA, the reverse complement is"); puts(" retrieved; in protein sequence, this is an error. The -r option is another way to revcomp."); puts("\n other options:"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); exit(0); } static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "help; show brief info on version and usage", 1 }, { "-o", eslARG_OUTFILE,FALSE, NULL, NULL, NULL, NULL, "-O,--index", "output sequences to file instead of stdout", 1 }, { "-O", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-o,-f,--index", "output sequence to file named ", 1 }, { "-n", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, "-f,--index", "rename the sequence ", 1 }, { "-r", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--index", "reverse complement the seq(s)", 1 }, { "-c", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, "-f,--index", "retrieve subsequence coords ..", 2 }, { "-C", eslARG_NONE, FALSE, NULL, NULL, NULL, "-f", "--index", " in contains subseq coords too", 2 }, { "--informat", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, NULL, "specify that input file is in format ", 3 }, /* undocumented as options, because they're documented as alternative invocations: */ { "-f", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--index", "second cmdline arg is a file of names to retrieve", 99 }, { "--index", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "index , creating .ssi", 99 }, { 0,0,0,0,0,0,0,0,0,0 }, }; static void create_ssi_index(ESL_GETOPTS *go, ESL_SQFILE *sqfp); static void multifetch(ESL_GETOPTS *go, FILE *ofp, char *keyfile, ESL_SQFILE *sqfp); static void onefetch(ESL_GETOPTS *go, FILE *ofp, char *key, ESL_SQFILE *sqfp); static void multifetch_subseq(ESL_GETOPTS *go, FILE *ofp, char *keyfile, ESL_SQFILE *sqfp); static void onefetch_subseq(ESL_GETOPTS *go, FILE *ofp, ESL_SQFILE *sqfp, char *newname, char *key, uint32_t given_start, uint32_t given_end); int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* application configuration */ char *seqfile = NULL; /* sequence file name */ int infmt = eslSQFILE_UNKNOWN; /* format code for seqfile */ ESL_SQFILE *sqfp = NULL; /* open sequence file */ FILE *ofp = NULL; /* output stream for sequences */ int status; /* easel return code */ /*********************************************** * Parse command line ***********************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], "Error in configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") ) cmdline_help (argv[0], go); if (esl_opt_ArgNumber(go) < 1) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); /* Open the sequence file */ seqfile = esl_opt_GetArg(go, 1); if (esl_opt_GetString(go, "--informat") != NULL) { infmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat")); if (infmt == eslSQFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat", esl_opt_GetString(go, "--informat")); } status = esl_sqfile_Open(seqfile, infmt, NULL, &sqfp); if (status == eslENOTFOUND) cmdline_failure(argv[0], "Sequence file %s not found.\n", seqfile); else if (status == eslEFORMAT) cmdline_failure(argv[0], "Format of file %s unrecognized.\n", seqfile); else if (status == eslEINVAL) cmdline_failure(argv[0], "Can't autodetect stdin or .gz.\n"); else if (status != eslOK) cmdline_failure(argv[0], "Open failed, code %d.\n", status); /* Open the output file, if any */ if (esl_opt_GetBoolean(go, "-O")) { if ((ofp = fopen(esl_opt_GetArg(go, 2), "w")) == NULL) cmdline_failure(argv[0], "Failed to open output file %s\n", esl_opt_GetArg(go, 2)); } else if (esl_opt_GetString(go, "-o") != NULL) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) cmdline_failure(argv[0], "Failed to open output file %s\n", esl_opt_GetString(go, "-o")); } else ofp = stdout; /* Indexing mode */ if (esl_opt_GetBoolean(go, "--index")) { if (esl_opt_ArgNumber(go) != 1) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); if (sqfp->data.ascii.do_gzip) cmdline_failure(argv[0], "Can't index a .gz compressed file"); if (sqfp->data.ascii.do_stdin) cmdline_failure(argv[0], "Can't index a standard input pipe"); create_ssi_index(go, sqfp); } /* List retrieval mode */ else if (esl_opt_GetBoolean(go, "-f")) { if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); /* Open the SSI index for retrieval */ if (! sqfp->data.ascii.do_gzip && ! sqfp->data.ascii.do_stdin && ! esl_sqio_IsAlignment(sqfp->format)) { status = esl_sqfile_OpenSSI(sqfp, NULL); if (status == eslEFORMAT) cmdline_failure(argv[0], "SSI index is in incorrect format\n"); else if (status == eslERANGE) cmdline_failure(argv[0], "SSI index is in 64-bit format and we can't read it\n"); else if (status != eslOK) cmdline_failure(argv[0], "Failed to open SSI index\n"); } if (esl_opt_GetBoolean(go, "-C")) multifetch_subseq(go, ofp, esl_opt_GetArg(go, 2), sqfp); else multifetch (go, ofp, esl_opt_GetArg(go, 2), sqfp); } /* Single sequence retrieval mode */ else { if (esl_opt_ArgNumber(go) != 2) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); char *key = esl_opt_GetArg(go, 2); char *cstring = esl_opt_GetString(go, "-c"); char *newname = esl_opt_GetString(go, "-n"); /* Open the SSI index for retrieval */ if (! sqfp->data.ascii.do_gzip && ! sqfp->data.ascii.do_stdin && ! esl_sqio_IsAlignment(sqfp->format)) { status = esl_sqfile_OpenSSI(sqfp, NULL); if (status == eslEFORMAT) cmdline_failure(argv[0], "SSI index is in incorrect format\n"); else if (status == eslERANGE) cmdline_failure(argv[0], "SSI index is in 64-bit format and we can't read it\n"); else if (status != eslOK) cmdline_failure(argv[0], "Failed to open SSI index\n"); } /* -c: subsequence retrieval; else full sequence retrieval */ if (cstring != NULL) { uint32_t start, end; status = esl_regexp_ParseCoordString(cstring, &start, &end); if (status == eslESYNTAX) esl_fatal("-c takes arg of subseq coords ..; %s not recognized", cstring); if (status == eslFAIL) esl_fatal("Failed to find or coord in %s", cstring); onefetch_subseq(go, ofp, sqfp, newname, key, start, end); if (ofp != stdout) printf("\n\nRetrieved subsequence %s/%d-%d.\n", key, start, end); } else { onefetch(go, ofp, esl_opt_GetArg(go, 2), sqfp); if (ofp != stdout) printf("\n\nRetrieved sequence %s.\n", esl_opt_GetArg(go, 2)); } } esl_sqfile_Close(sqfp); esl_getopts_Destroy(go); return 0; } /* Create an SSI index file for open sequence file . * Both name and accession of sequences are stored as keys. */ static void create_ssi_index(ESL_GETOPTS *go, ESL_SQFILE *sqfp) { ESL_NEWSSI *ns = NULL; ESL_SQ *sq = esl_sq_Create(); int nseq = 0; char *ssifile = NULL; uint16_t fh; int status; esl_strdup(sqfp->filename, -1, &ssifile); esl_strcat(&ssifile, -1, ".ssi", 4); status = esl_newssi_Open(ssifile, TRUE, &ns); /* TRUE is for allowing overwrite. */ if (status == eslENOTFOUND) esl_fatal("failed to open SSI index %s", ssifile); else if (status == eslEOVERWRITE) esl_fatal("SSI index %s already exists; delete or rename it", ssifile); /* won't happen, see TRUE above... */ else if (status != eslOK) esl_fatal("failed to create a new SSI index"); if (esl_newssi_AddFile(ns, sqfp->filename, sqfp->format, &fh) != eslOK) esl_fatal("Failed to add sequence file %s to new SSI index\n", sqfp->filename); printf("Creating SSI index for %s... ", sqfp->filename); fflush(stdout); while ((status = esl_sqio_ReadInfo(sqfp, sq)) == eslOK) { nseq++; if (sq->name == NULL) esl_fatal("Every sequence must have a name to be indexed. Failed to find name of seq #%d\n", nseq); if (esl_newssi_AddKey(ns, sq->name, fh, sq->roff, sq->doff, sq->L) != eslOK) esl_fatal("Failed to add key %s to SSI index", sq->name); if (sq->acc[0] != '\0') { if (esl_newssi_AddAlias(ns, sq->acc, sq->name) != eslOK) esl_fatal("Failed to add secondary key %s to SSI index", sq->acc); } esl_sq_Reuse(sq); } if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (status != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", status, sqfp->filename); /* Determine if the file was suitable for fast subseq lookup. */ if (sqfp->data.ascii.bpl > 0 && sqfp->data.ascii.rpl > 0) { if ((status = esl_newssi_SetSubseq(ns, fh, sqfp->data.ascii.bpl, sqfp->data.ascii.rpl)) != eslOK) esl_fatal("Failed to set %s for fast subseq lookup."); } /* Save the SSI file to disk */ if (esl_newssi_Write(ns) != eslOK) esl_fatal("Failed to write keys to ssi file %s\n", ssifile); /* Done - output and exit. */ printf("done.\n"); if (ns->nsecondary > 0) printf("Indexed %d sequences (%ld names and %ld accessions).\n", nseq, (long) ns->nprimary, (long) ns->nsecondary); else printf("Indexed %d sequences (%ld names).\n", nseq, (long) ns->nprimary); printf("SSI index written to file %s\n", ssifile); free(ssifile); esl_sq_Destroy(sq); esl_newssi_Close(ns); return; } /* multifetch: * given a file containing lines with one name or key per line; * parse the file line-by-line; * if we have an SSI index available, retrieve the seqs by key * as we see each line; * else, without an SSI index, store the keys in a hash, then * read the entire seq file in a single pass, outputting seqs * that are in our keylist. * * Note that with an SSI index, you get the seqs in the order they * appear in the , but without an SSI index, you get seqs in * the order they occur in the seq file. */ static void multifetch(ESL_GETOPTS *go, FILE *ofp, char *keyfile, ESL_SQFILE *sqfp) { ESL_KEYHASH *keys = esl_keyhash_Create(); ESL_FILEPARSER *efp = NULL; int nseq = 0; int nkeys = 0; char *key; int keylen; int keyidx; int status; if (esl_fileparser_Open(keyfile, NULL, &efp) != eslOK) esl_fatal("Failed to open key file %s\n", keyfile); esl_fileparser_SetCommentChar(efp, '#'); while (esl_fileparser_NextLine(efp) == eslOK) { if (esl_fileparser_GetTokenOnLine(efp, &key, &keylen) != eslOK) esl_fatal("Failed to read seq name on line %d of file %s\n", efp->linenumber, keyfile); status = esl_keyhash_Store(keys, key, keylen, &keyidx); if (status == eslEDUP) esl_fatal("seq key %s occurs more than once in file %s\n", key, keyfile); /* if we have an SSI index, just fetch them as we go. */ if (sqfp->data.ascii.ssi != NULL) { onefetch(go, ofp, key, sqfp); nseq++; } nkeys++; } /* If we don't have an SSI index, we haven't fetched anything yet; do it now. */ if (sqfp->data.ascii.ssi == NULL) { ESL_SQ *sq = esl_sq_Create(); while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { if ( (sq->name[0] != '\0' && esl_keyhash_Lookup(keys, sq->name, -1, NULL) == eslOK) || (sq->acc[0] != '\0' && esl_keyhash_Lookup(keys, sq->acc, -1, NULL) == eslOK)) { if (esl_opt_GetBoolean(go, "-r") ) if (esl_sq_ReverseComplement(sq) != eslOK) esl_fatal("Failed to reverse complement %s\n", sq->name); esl_sqio_Write(ofp, sq, eslSQFILE_FASTA, FALSE); nseq++; } esl_sq_Reuse(sq); } if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (status != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", status, sqfp->filename); esl_sq_Destroy(sq); } if (nkeys != nseq) esl_fatal("Tried to retrieve %d keys, but only retrieved %d sequences\n", nkeys, nseq); if (ofp != stdout) printf("\nRetrieved %d sequences.\n", nseq); esl_keyhash_Destroy(keys); esl_fileparser_Close(efp); return; } /* onefetch(): * Given one (a seq name or accession), retrieve the corresponding sequence. * In SSI mode, we can do this quickly by positioning the file, then regurgitating * every line until the end-of-record marker; we don't even have to parse. * Without an SSI index, we have to parse the file sequentially 'til we find * the one we're after. */ static void onefetch(ESL_GETOPTS *go, FILE *ofp, char *key, ESL_SQFILE *sqfp) { ESL_SQ *sq = esl_sq_Create(); int do_revcomp = esl_opt_GetBoolean(go, "-r"); char *newname = esl_opt_GetString(go, "-n"); int status; /* Try to position the file at the desired sequence with SSI. */ if (sqfp->data.ascii.ssi != NULL) { status = esl_sqfile_PositionByKey(sqfp, key); if (status == eslENOTFOUND) esl_fatal("seq %s not found in SSI index for file %s\n", key, sqfp->filename); else if (status == eslEFORMAT) esl_fatal("Failed to parse SSI index for %s\n", sqfp->filename); else if (status != eslOK) esl_fatal("Failed to look up location of seq %s in SSI index of file %s\n", key, sqfp->filename); status = esl_sqio_Read(sqfp, sq); if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (status == eslEOF) esl_fatal("Unexpected EOF reading sequence file %s", status, sqfp->filename); else if (status != eslOK) esl_fatal("Unexpected error %d reading sequence file %s", status, sqfp->filename); if (strcmp(key, sq->name) != 0 && strcmp(key, sq->acc) != 0) esl_fatal("whoa, internal error; found the wrong sequence %s, not %s", sq->name, key); } else { /* Else, we have to read the whole damn file sequentially until we find the seq */ while ((status = esl_sqio_Read(sqfp, sq)) != eslEOF) { if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (status != eslOK) esl_fatal("Unexpected error %d reading sequence file %s", status, sqfp->filename); if (strcmp(key, sq->name) == 0 || strcmp(key, sq->acc) == 0) break; esl_sq_Reuse(sq); } if (status == eslEOF) esl_fatal("Failed to find sequence %s in file %s\n", key, sqfp->filename); } if (do_revcomp == FALSE && newname == NULL && ! esl_sqio_IsAlignment(sqfp->format)) { /* If we're not manipulating the sequence in any way, and it's not from an alignment file, we can Echo() it. */ if (esl_sqio_Echo(sqfp, sq, ofp) != eslOK) esl_fatal("Echo failed: %s\n", esl_sqfile_GetErrorBuf(sqfp)); } else { /* Otherwise we Write() the parsed version. */ if (do_revcomp && esl_sq_ReverseComplement(sq) != eslOK) esl_fatal("Failed to reverse complement %s; is it a protein?\n", sq->name); if (newname != NULL) esl_sq_SetName(sq, newname); esl_sqio_Write(ofp, sq, eslSQFILE_FASTA, FALSE); } esl_sq_Destroy(sq); } static void multifetch_subseq(ESL_GETOPTS *go, FILE *ofp, char *gdffile, ESL_SQFILE *sqfp) { ESL_FILEPARSER *efp = NULL; char *newname; char *s; int n1, n2; int start, end; char *source; if (esl_fileparser_Open(gdffile, NULL, &efp) != eslOK) esl_fatal("Failed to open key file %s\n", gdffile); esl_fileparser_SetCommentChar(efp, '#'); while (esl_fileparser_NextLine(efp) == eslOK) { if (esl_fileparser_GetTokenOnLine(efp, &newname, &n1) != eslOK) esl_fatal("Failed to read subseq name on line %d of file %s\n", efp->linenumber, gdffile); if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK) esl_fatal("Failed to read start coord on line %d of file %s\n", efp->linenumber, gdffile); start = atoi(s); if(start <= 0) esl_fatal("Read invalid start coord %d on line %d of file %s (must be positive integer)\n", start, efp->linenumber, gdffile); if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK) esl_fatal("Failed to read end coord on line %d of file %s\n", efp->linenumber, gdffile); end = atoi(s); if(end < 0) esl_fatal("Read invalid end coord %d on line %d of file %s (must be positive integer, or 0 for full length)\n", end, efp->linenumber, gdffile); if (esl_fileparser_GetTokenOnLine(efp, &source, &n2) != eslOK) esl_fatal("Failed to read source seq name on line %d of file %s\n", efp->linenumber, gdffile); onefetch_subseq(go, ofp, sqfp, newname, source, start, end); } esl_fileparser_Close(efp); } static void onefetch_subseq(ESL_GETOPTS *go, FILE *ofp, ESL_SQFILE *sqfp, char *newname, char *key, uint32_t given_start, uint32_t given_end) { int start, end; int do_revcomp; ESL_SQ *sq = esl_sq_Create(); if (sqfp->data.ascii.ssi == NULL) esl_fatal("no ssi index"); /* reverse complement indicated by coords. */ /* -c 52: would be 52,0, so watch out for given_end = 0 case */ if (given_end != 0 && given_start > given_end) { start = given_end; end = given_start; do_revcomp = TRUE; } else { start = given_start; end = given_end; do_revcomp = FALSE; } if (esl_sqio_FetchSubseq(sqfp, key, start, end, sq) != eslOK) esl_fatal(esl_sqfile_GetErrorBuf(sqfp)); if (newname != NULL) esl_sq_SetName(sq, newname); else esl_sq_FormatName(sq, "%s/%d-%d", key, given_start, (given_end == 0) ? sq->L : given_end); /* Two ways we might have been asked to revcomp: by coord, or by -r option */ /* (If both happen, they'll cancel each other out) */ if (do_revcomp) if (esl_sq_ReverseComplement(sq) != eslOK) esl_fatal("Failed to reverse complement %s; is it a protein?\n", sq->name); if (esl_opt_GetBoolean(go, "-r")) if (esl_sq_ReverseComplement(sq) != eslOK) esl_fatal("Failed to reverse complement %s; is it a protein?\n", sq->name); esl_sqio_Write(ofp, sq, eslSQFILE_FASTA, FALSE); esl_sq_Destroy(sq); } hmmer-3.1b2/easel/miniapps/esl-sfetch.man0000664361611702660230000001417712473612611017743 0ustar wheelerteddy.TH "esl-sfetch" 1 "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual" .SH NAME .TP esl-sfetch - retrieve (sub-)sequences from a sequence file .SH SYNOPSIS .TP Single sequence retrieval: .B esl-sfetch .I [options] .I seqfile .I key .TP Single subsequence retrieval: .B esl-sfetch -c .I .. .I seqfile .I key .TP Multiple sequence retrieval: .B esl-sfetch -f .I [options] .I seqfile .I keyfile .TP Multiple subsequence retrieval: .B esl-sfetch -Cf .I [options] .I seqfile .I subseq-coord-file .TP Indexing a sequence file for retrieval: .B esl-afetch --index .I msafile .SH DESCRIPTION .pp .B esl-sfetch retrieves one or more sequences or subsequences from .I seqfile. .pp The .I seqfile should be indexed first using .B esl-sfetch --index . This creates an SSI index file .I .ssi. An SSI file is not necessary, but it greatly accelerates retrieval. .pp To retrieve a single complete sequence, do .B esl-sfetch where .I key is the name or accession of the desired sequence. .pp To retrieve a single subsequence rather than a complete sequence, use the .I -c start-end option to provide start and end coordinates. The start and end coordinates are provided as one string, separated by any nonnumeric, nonwhitespace character or characters you like; for example, .I -c 23..100 , .I -c 23/100 , or .I -c 23-100 all work. To retrieve a suffix of a subsequence, you can omit the .I end ; for example, .I -c 23: would work. .pp To retrieve more than one complete sequence at once, you may use the .I -f option, and the second command line argument will specify the name of a .I keyfile that contains a list of names or accessions, one per line; the first whitespace-delimited field on each line of this file is parsed as the name/accession. .pp To retrieve more than one subsequence at once, use the .I -C option in addition to .I -f , and now the second argument is parsed as a list of subsequence coordinate lines, with each line containing at least four whitespace-delimited fields: .I new_name .I from .I to .I name/accession. For each such line, sequence .I name/accession is found, a subsequence .I from..to is extracted, and the subsequence is renamed .I new_name before being output. .pp In DNA/RNA files, you may extract (sub-)sequences in reverse complement orientation in two different ways: either by providing a .I from coordinate that is greater than .I to, or by providing the .I -r option. .pp The sequence file may be in any of several different common unaligned sequence formats including FASTA, GenBank, EMBL, UniProt, or DDBJ. It may also be an alignment file, in Stockholm format for example. By default the file format is autodetected. The .I --informat option allows you to specify the format and override autodetection. This option may be useful for making .B esl-sfetch more robust, because format autodetection may fail on unusual files. .pp When the .I -f option is used to do multiple (sub-)sequence retrieval, the file argument may be - (a single dash), in which case the list of names/accessions (or subsequence coordinate lines) is read from standard input. However, because a standard input stream can't be SSI indexed, (sub-)sequence retrieval from .I stdin may be slow. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .BI -c " " Retrieve a subsequence with start and end coordinates specified by the .I string. This string consists of start and end coordinates separated by any nonnumeric, nonwhitespace character or characters you like; for example, .I -c 23..100 , .I -c 23/100 , or .I -c 23-100 all work. To retrieve a suffix of a subsequence, you can omit the .I end ; for example, .I -c 23: would work. To specify reverse complement (for DNA/RNA sequence), specify .I greater than .I ; for example, .I -c 100..23 retrieves the reverse complement strand from 100 to 23. .TP .B -f Interpret the second argument as a .I keyfile instead of as just one .I key. The first whitespace-limited field on each line of .I keyfile is interpreted as a name or accession to be fetched. This option doesn't work with the .B --index option. Any other fields on a line after the first one are ignored. Blank lines and lines beginning with # are ignored. .TP .BI -o " " Output retrieved sequences to a file .I instead of to .I stdout. .TP .BI -n " " Rename the retrieved (sub-)sequence .I . This is incompatible with the .I -f option. .TP .B -r Reverse complement the retrieved (sub-)sequence. This only works for DNA/RNA sequences. .TP .B -C Multiple subsequence retrieval mode, with .I -f option (required). Specifies that the second command line argument is to be parsed as a subsequence coordinate file, consisting of lines containing four whitespace-delimited fields: .I new_name .I from .I to .I name/accession. For each such line, sequence .I name/accession is found, a subsequence .I from..to is extracted, and the subsequence is renamed .I new_name before being output. Any other fields after the first four are ignored. Blank lines and lines beginning in # are ignored. .TP .B -O Output retrieved sequence to a file named .I . This is a convenience for saving some typing: instead of .B esl-sfetch -o SRPA_HUMAN swissprot SRPA_HUMAN you can just type .B esl-sfetch -O swissprot SRPA_HUMAN. The .B -O option only works if you're retrieving a single alignment; it is incompatible with .B -f. .TP .B --index Instead of retrieving a .I key, the special command .B esl-afetch --index .I msafile produces an SSI index of the names and accessions of the alignments in the .I msafile. Indexing should be done once on the .I msafile to prepare it for all future fetches. .SH EXPERT OPTIONS .TP .BI --informat " " Specify that the sequence file is in format .I , where .I may be FASTA, GenBank, EMBL, UniProt, DDBJ, or Stockholm. This string is case-insensitive ("genbank" or "GenBank" both work, for example). .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/Makefile.in0000664361611702660230000000631512473612611017251 0ustar wheelerteddytop_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ SHELL = /bin/sh # Package information # PACKAGE = @PACKAGE_NAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ BASENAME = @PACKAGE_TARNAME@ RELEASE = @EASEL_VERSION@ RELEASEDATE = "@EASEL_DATE@" COPYRIGHT = "@EASEL_COPYRIGHT@" LICENSELINE = "@EASEL_LICENSE@" ## Installation targets # prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ mandir = @mandir@ docdir = @docdir@ pdfdir = @pdfdir@ mandir = @mandir@ man1dir = ${mandir}/man1 man1ext = .1 INSTALL = @INSTALL@ ## your compiler and compiler flags. # CC = @CC@ CFLAGS = @CFLAGS@ @PTHREAD_CFLAGS@ @PIC_FLAGS@ SIMDFLAGS = @SIMD_CFLAGS@ CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ DEFS = @DEFS@ LIBS = -leasel @LIBGSL@ @LIBS@ @PTHREAD_LIBS@ -lm ## list of the miniapps to compile. # PROGS = esl-afetch\ esl-alimanip\ esl-alimap\ esl-alimask\ esl-alimerge\ esl-alipid\ esl-alistat\ esl-cluster\ esl-compalign\ esl-compstruct\ esl-construct\ esl-histplot\ esl-mask\ esl-reformat\ esl-selectn\ esl-seqrange\ esl-seqstat\ esl-sfetch\ esl-shuffle\ esl-ssdraw\ esl-stranslate\ esl-weight\ PROGOBJS =\ esl-afetch.o\ esl-alimanip.o\ esl-alimap.o\ esl-alimask.o\ esl-alimerge.o\ esl-alipid.o\ esl-alistat.o\ esl-cluster.o\ esl-compalign.o\ esl-compstruct.o\ esl-construct.o\ esl-histplot.o\ esl-mask.o\ esl-reformat.o\ esl-selectn.o\ esl-seqrange.o\ esl-seqstat.o\ esl-sfetch.o\ esl-shuffle.o\ esl-ssdraw.o\ esl-stranslate.o\ esl-weight.o\ # beautification magic stolen from git # QUIET_SUBDIR0 = +${MAKE} -C #space separator after -c QUIET_SUBDIR1 = ifndef V QUIET_CC = @echo ' ' CC $@; QUIET_GEN = @echo ' ' GEN $@; QUIET_AR = @echo ' ' AR $@; QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR1 = ; echo ' ' SUBDIR $$subdir; \ ${MAKE} -C $$subdir endif .PHONY: all dev tests check install uninstall clean distclean all: ${PROGS} dev: ${PROGS} tests: ${PROGS} check: ${PROGS} ${PROGS}: @EXEC_DEPENDENCY@ ../libeasel.a ${QUIET_GEN}${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} ${LDFLAGS} -L.. -o $@ $@.o ${LIBS} ${PROGOBJS}: ../libeasel.a .c.o: ../libeasel.a ${QUIET_CC}${CC} ${CFLAGS} ${SIMDFLAGS} ${DEFS} -I. -I.. -I${srcdir} -I${srcdir}/.. -o $@ -c $< install: for file in ${PROGS}; do \ ${INSTALL} -m 0755 $$file ${DESTDIR}${bindir}/ ;\ done uninstall: for file in $(PROGS); do \ rm ${DESTDIR}${bindir}/$$file ;\ done clean: -rm -f ${PROGS} -rm -f *.o *~ -rm -f *.gcno *.gcda *.gcov -rm -f TAGS distclean: clean -rm -f ${PROGS} -rm Makefile ################################################################ # Easel - a library of C functions for biological sequence analysis # Version h3.1b2; February 2015 # Copyright (C) 2015 Howard Hughes Medical Institute. # Other copyrights also apply. See the COPYRIGHT file for a full list. # # Easel is distributed under the Janelia Farm Software License, a BSD # license. See the LICENSE file for more details. ################################################################ hmmer-3.1b2/easel/miniapps/esl-ssdraw.c0000664361611702660230000130672612473612611017446 0ustar wheelerteddy/* Draw secondary structure diagrams given a postscript SS template. * Initial development of this program was for SSU rRNA structures * with templates derived from Gutell's CRW (Comparative RNA Website, * http://www.rna.ccbb.utexas.edu/). * */ #include "esl_config.h" #include #include #include #include #include #include #include "easel.h" #include "esl_distance.h" #include "esl_dmatrix.h" #include "esl_fileparser.h" #include "esl_getopts.h" #include "esl_keyhash.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile2.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_stack.h" #include "esl_tree.h" #include "esl_vectorops.h" #include "esl_wuss.h" #define SSDRAWINFINITY 987654321 #define ERRBUFSIZE 1024 #define MAXMBWITHOUTFORCE 100 #define ALIMODE 0 #define INDIMODE 1 #define SIMPLEMASKMODE 2 #define INFILEMODE 3 /* CMYK colors, a 4 value array defines a color with values 0..1, * [0] is cyan value, [1] is magenta, [2] is yellow, [3] is black */ #define NCMYK 4 #define ICYAN 0 #define IMGTA 1 #define IYELW 2 #define IBLCK 3 /* indices and sizes for hard-coded color schemes */ #define NSCHEMES 7 #define RB_11_RH_SCHEME 0 /* RainBow, 11 colors, Red High, blue low */ #define RB_11_RL_SCHEME 1 /* RainBow, 11 colors, Red Low, blue high */ #define RB_6_RH_SCHEME 2 /* RainBow, 6 colors, Red High, blue low */ #define RB_6_RL_SCHEME 3 /* RainBow, 6 colors, Red Low, blue high */ #define RB_5_RH_SCHEME 4 /* RainBow, 5 colors, Red High, teal low */ #define RB_5_RL_SCHEME 5 /* RainBow, 5 colors, Red low, teal high */ #define RB_W5_OH_SCHEME 6 /* RainBow with white, 5 colors, orange high, teal low, white lowest */ #define NRB_11_RH_SCHEME 11 #define NRB_11_RL_SCHEME 11 #define NRB_6_RH_SCHEME 6 #define NRB_6_RL_SCHEME 6 #define NRB_5_RH_SCHEME 5 #define NRB_5_RL_SCHEME 5 #define NRB_W5_OH_SCHEME 5 /* the actual CMYK color values for the scheme colors (_C = cyan, _M = magenta, _Y = yellow, _K = black) */ /* the 11-color rainbow scheme */ #define RED2BLUE_1_OF_11_C 0.00 #define RED2BLUE_1_OF_11_M 0.94 #define RED2BLUE_1_OF_11_Y 1.00 #define RED2BLUE_1_OF_11_K 0.00 #define RED2BLUE_2_OF_11_C 0.00 #define RED2BLUE_2_OF_11_M 0.84 #define RED2BLUE_2_OF_11_Y 1.00 #define RED2BLUE_2_OF_11_K 0.00 #define RED2BLUE_3_OF_11_C 0.00 #define RED2BLUE_3_OF_11_M 0.63 #define RED2BLUE_3_OF_11_Y 1.00 #define RED2BLUE_3_OF_11_K 0.00 #define RED2BLUE_4_OF_11_C 0.00 #define RED2BLUE_4_OF_11_M 0.42 #define RED2BLUE_4_OF_11_Y 1.00 #define RED2BLUE_4_OF_11_K 0.00 #define RED2BLUE_5_OF_11_C 0.00 #define RED2BLUE_5_OF_11_M 0.21 #define RED2BLUE_5_OF_11_Y 1.00 #define RED2BLUE_5_OF_11_K 0.00 #define RED2BLUE_6_OF_11_C 0.00 #define RED2BLUE_6_OF_11_M 0.00 #define RED2BLUE_6_OF_11_Y 1.00 #define RED2BLUE_6_OF_11_K 0.00 #define RED2BLUE_7_OF_11_C 0.42 #define RED2BLUE_7_OF_11_M 0.00 #define RED2BLUE_7_OF_11_Y 1.00 #define RED2BLUE_7_OF_11_K 0.00 #define RED2BLUE_8_OF_11_C 0.61 #define RED2BLUE_8_OF_11_M 0.00 #define RED2BLUE_8_OF_11_Y 0.56 #define RED2BLUE_8_OF_11_K 0.22 #define RED2BLUE_9_OF_11_C 0.50 #define RED2BLUE_9_OF_11_M 0.00 #define RED2BLUE_9_OF_11_Y 0.00 #define RED2BLUE_9_OF_11_K 0.50 #define RED2BLUE_10_OF_11_C 0.78 #define RED2BLUE_10_OF_11_M 0.56 #define RED2BLUE_10_OF_11_Y 0.00 #define RED2BLUE_10_OF_11_K 0.22 #define RED2BLUE_11_OF_11_C 0.92 #define RED2BLUE_11_OF_11_M 0.84 #define RED2BLUE_11_OF_11_Y 0.00 #define RED2BLUE_11_OF_11_K 0.08 /* the 6-color rainbow scheme */ /* red */ #define RED2BLUE_1_OF_6_C 0.00 #define RED2BLUE_1_OF_6_M 0.94 #define RED2BLUE_1_OF_6_Y 1.00 #define RED2BLUE_1_OF_6_K 0.00 /* orange-ish */ #define RED2BLUE_2_OF_6_C 0.00 #define RED2BLUE_2_OF_6_M 0.63 #define RED2BLUE_2_OF_6_Y 1.00 #define RED2BLUE_2_OF_6_K 0.00 /* gold-ish */ #define RED2BLUE_3_OF_6_C 0.00 #define RED2BLUE_3_OF_6_M 0.21 #define RED2BLUE_3_OF_6_Y 1.00 #define RED2BLUE_3_OF_6_K 0.00 /* light-green-ish */ #define RED2BLUE_4_OF_6_C 0.42 #define RED2BLUE_4_OF_6_M 0.00 #define RED2BLUE_4_OF_6_Y 1.00 #define RED2BLUE_4_OF_6_K 0.00 /* teal-ish */ #define RED2BLUE_5_OF_6_C 0.50 #define RED2BLUE_5_OF_6_M 0.00 #define RED2BLUE_5_OF_6_Y 0.00 #define RED2BLUE_5_OF_6_K 0.50 /* blue */ #define RED2BLUE_6_OF_6_C 0.92 #define RED2BLUE_6_OF_6_M 0.84 #define RED2BLUE_6_OF_6_Y 0.00 #define RED2BLUE_6_OF_6_K 0.08 /* single colors for one-cell legends */ #define NOC 17 #define CYANOC 0 #define MAGENTAOC 1 #define YELLOWOC 2 #define BLACKOC 3 #define WHITEOC 4 #define LIGHTGREYOC 5 #define GREYOC 6 #define DARKGREYOC 7 #define REDOC 8 #define ORANGEOC 9 #define TEALOC 10 #define LIGHTGREENOC 11 #define GREENOC 12 #define DARKGREENOC 13 #define LIGHTPURPLEOC 14 #define PURPLEOC 15 #define DARKPURPLEOC 16 /* the actual CMYK color values for the single colors (_C = cyan, _M = magenta, _Y = yellow, _K = black) */ #define CYAN_C 1.0 #define CYAN_M 0.0 #define CYAN_Y 0.0 #define CYAN_K 0.0 #define MAGENTA_C 0.0 #define MAGENTA_M 1.0 #define MAGENTA_Y 0.0 #define MAGENTA_K 0.0 #define YELLOW_C 0.0 #define YELLOW_M 0.0 #define YELLOW_Y 1.0 #define YELLOW_K 0.0 #define BLACK_C 0.0 #define BLACK_M 0.0 #define BLACK_Y 0.0 #define BLACK_K 1.0 #define WHITE_C 0.0 #define WHITE_M 0.0 #define WHITE_Y 0.0 #define WHITE_K 0.0 #define LIGHTGREY_C 0.0 #define LIGHTGREY_M 0.0 #define LIGHTGREY_Y 0.0 #define LIGHTGREY_K 0.2 #define GREY_C 0.0 #define GREY_M 0.0 #define GREY_Y 0.0 #define GREY_K 0.5 #define DARKGREY_C 0.0 #define DARKGREY_M 0.0 #define DARKGREY_Y 0.0 #define DARKGREY_K 0.75 #define RED_C 0.0 #define RED_M 1.0 #define RED_Y 1.0 #define RED_K 0.0 #define ORANGE_C 0.0 #define ORANGE_M 0.5 #define ORANGE_Y 1.0 #define ORANGE_K 0.0 #define TEAL_C 0.5 #define TEAL_M 0.0 #define TEAL_Y 0.0 #define TEAL_K 0.5 #define LIGHTGREEN_C 0.5 #define LIGHTGREEN_M 0.0 #define LIGHTGREEN_Y 0.5 #define LIGHTGREEN_K 0.0 #define GREEN_C 1.0 #define GREEN_M 0.0 #define GREEN_Y 1.0 #define GREEN_K 0.0 #define DARKGREEN_C 1.0 #define DARKGREEN_M 0.5 #define DARKGREEN_Y 1.0 #define DARKGREEN_K 0.0 #define LIGHTPURPLE_C 0.3 #define LIGHTPURPLE_M 0.6 #define LIGHTPURPLE_Y 0.0 #define LIGHTPURPLE_K 0.0 #define PURPLE_C 0.5 #define PURPLE_M 1.0 #define PURPLE_Y 0.0 #define PURPLE_K 0.0 #define DARKPURPLE_C 1.0 #define DARKPURPLE_M 1.0 #define DARKPURPLE_Y 0.0 #define DARKPURPLE_K 0.0 /* hard-coded values for the legends */ #define LEG_NBOXES 11 #define LEG_MINFONTSIZE 10 #define SPECIAL_FONT "Courier-BoldOblique" #define LEG_FONT "Courier-Bold" #define LEG_EXTRA_COLUMNS 12 /* how many extra columns we need for printing stats in the legend */ #define COURIER_HEIGHT_WIDTH_RATIO 1.65 #define LEG_EXTRA_TEXT_FONT "Helvetica" /* fonts and other sizes */ #define DEFAULT_FONT "Courier-Bold" #define FOOTER_FONT "Helvetica" #define NUCLEOTIDES_FONT "Courier-Bold" /* NOTE: THIS MUST BE Courier-Bold or Courier, the offsets for drawing cells (CELL_{X,Y}OFFSET_FRACTION) * and placing nucleotides (NUCLEOTIDE_{X,Y}OFFSET_FRACTION_LOWERCASE_GJPQY) depend on it */ /*#define NUCLEOTIDES_FONT "Monaco-Bold"*/ #define POSNTEXT_FONT "Helvetica" #define NUCLEOTIDES_FONTSIZE 8. #define POSNTEXT_FONTSIZE 8. #define LEG_FONTSIZE_UNSCALED 8 #define LEG_EXTRA_TEXT_FONTSIZE_UNSCALED 8 #define HEADER_FONTSIZE_UNSCALED 12 #define HEADER_MODELNAME_MAXCHARS 20 #define TICKS_LINEWIDTH 2. #define BP_LINEWIDTH 1. #define CELLSIZE 8. /* default size of a cell, a single position in the structure diagram */ #define CELLSIZE_INT 8 /* default size of a cell, a single position in the structure diagram */ /* NOTE, *OFFSET_FRACTION* constants below depend on NUCLEOTIDES_FONT being either "Courier-Bold" or "Courier" */ #define CELL_XOFFSET_FRACTION 0.2 #define CELL_YOFFSET_FRACTION 0.2 #define LOWERCASE_LOW_HANGING_CHARS "gjpqy" #define NUCLEOTIDE_YOFFSET_FRACTION_LOWERCASE_LOW_HANGING_CHARS 0.1875 /* postscript info */ #define POSTSCRIPT_PAGEWIDTH 612. #define POSTSCRIPT_PAGEHEIGHT 792. #define PAGE_TOPBUF 30. /* 30 blank pts required at top */ #define PAGE_SIDEBUF 32. /* 32 blank pts required at sides */ #define PAGE_BOTBUF 30. /* 30 blank pts required at bot */ /* cell outline info */ #define OUTLINE_LINEWIDTH_CELL_FRACTION_MIN 0.04 #define OUTLINE_LINEWIDTH_CELL_FRACTION_MAX 0.16 #define NOUTLINETYPES 2 #define OUTLINE_NONE_IDX 0 #define OUTLINE_MIN_IDX 1 #define OUTLINE_MAX_IDX 2 #define OUTLINE_PROCEDURE "box" /* one cell color legends, special values */ #define OCCL_BLANK_COUNT -1 /* Structure: scheme_color_legend * Incept: EPN, Thu Jun 25 20:20:38 2009 * * Parameters describing a one-dimensional legend of colors * from a preset scheme for use in a SSPostscript_t data structure. */ typedef struct scheme_color_legend_s { int scheme; /* preset color scheme index */ int nbins; /* number of colors (bins) in this scheme */ char *text1; /* first line of text for legend, a single string */ char *text2; /* second line of text for legend, a single string */ float *limits; /* [nbins+1] limits for each bin, limits[0] is min value we would expect to see, limits[nbins] is max */ int *counts; /* [nbins] number of cells we've painted each color */ int *counts_masked; /* [nbins] number of cells within mask ('1's) that we've painted each color */ int ints_only_flag; /* TRUE if possible values are only integers, legend values will be drawn differently in this case */ int low_inclusive; /* TRUE if bin 0 is inclusive of limits[0], FALSE if not */ int high_inclusive; /* TRUE if bin[nbins-1] is inclusive of max value, FALSE if not */ int use_mask; /* TRUE to use ps->mask if it is available to draw masked positions differently, FALSE not to */ } SchemeColorLegend_t; /* Structure: onecell_color_legend * Incept: EPN, Tue Sep 30 13:06:15 2008 * * Parameters describing a single colored cell legend for a * SSPostscript_t data structure. */ typedef struct onecell_color_legend_s { float col[NCMYK]; /* [CMYK] color value for the cell */ char *text; /* description text for legend */ char *celltext; /* colored text to use instead of a block, if NULL a colored block will be used */ char *procname; /* name of a procedure for drawing the block, if NULL a colored block will be used */ /* NOTE only one of celltext or procname can be non-NULL */ float *procstack; /* array of stack elements for the procedure */ int nprocstack; /* num els in */ int nres; /* number of nucleotides colored by the color in col[NCMYK] */ int nres_masked; /* number of nucleotides within a mask colored by the color in col[NCMYK] */ int do_separator; /* TRUE to draw a separator line below this one cell color legend, FALSE not to */ int do_no_vspace; /* when printing one cell, legend, don't add any vertical space after it, usually this is FALSE */ } OneCellColorLegend_t; /* Structure: text_legend * Incept: EPN, Mon Apr 19 07:11:44 2010 * * Parameters describing a text section of a legend for a * SSPostscript_t data structure. */ typedef struct text_legend_s { char **text_per_line; /* description text for legend */ int nlines; /* colored text to use instead of a block, if NULL a colored block will be used */ int do_separator; /* TRUE to draw a separator line below this text section, FALSE not to */ } TextLegend_t; /* Structure: ss_postscript * Incept: EPN, Mon Jun 23 15:50:30 2008 * * A clumsy data structure for storing the information that will * become a postscript secondary structure diagram based on a * template created by Robin Gutell and colleagues. * */ typedef struct ss_postscript_s { int npage; /* number of pages in eventual postscript */ char *modelname; /* name of model, read from template file */ int *modeA; /* [0..npage-1] page mode, ALIMODE, INDIMODE, or SIMPLEMASKMODE */ char **descA; /* [0..npage-1] description for each page */ int desc_max_chars; /* max num characters for a page description */ float headerx; /* x coordinate (bottom left corner) of header area */ float headery; /* y coordinate (bottom left corner) of header area */ float headerx_charsize;/* size of a character in x-dimension in the header */ float headery_charsize;/* size of a character in y-dimension in the header */ float headerx_desc; /* x coordinate (bottom left corner) of header area */ int leg_posn; /* consensus position for placing legend, read from template */ int leg_cellsize; /* size of a cell in the legend, (ex. 24 for SSU models) */ float leg_rhs_space;/* extra space to leave to the right of the legend */ float legx_offset; /* offset in x coordinate for placing legend, legx will be ps->rxA[leg_posn-1] + legx_offset */ float legy_offset; /* offset in y coordinate for placing legend, legy will be ps->ryA[leg_posn-1] + legy_offset */ float legx; /* x coordinate (top left corner) of legend area */ float legy; /* y coordinate (top left corner) of legend area */ float cur_legy; /* y coordinate of current line in legend */ float legx_charsize;/* size of a character in x-dimension in the legend */ float legy_charsize;/* size of a character in y-dimension in the legend */ int legx_max_chars; /* max num nucleotides in x direction we can print in legend before running off page */ int legy_max_chars; /* max num nucleotides in y direction we can print in legend before running off page */ int legx_stats; /* x position for printing stats in the legend */ float pagex_max; /* max x position on page */ float pagey_max; /* max y position on page */ float scale; /* scale parameter, read from template file */ char **regurgA; /* [0..nregurg-1][] lines from the template file to regurgitate, these are unchanged. */ int nregurg; /* number of lines (char *'s) in the regurg_textAA 2D array */ char **posntextA; /* [0..i..nposntext-1] string for element i of position text, read from template */ float *posntextxA; /* [0..i..nposntext-1] x value for posntextA[i] */ float *posntextyA; /* [0..i..nposntext-1] y value for posntextA[i] */ int nposntext; /* number of elements in posntextx and posntexty */ float *ticksx1A; /* [0..nticks-1] x begin value for ticks */ float *ticksx2A; /* [0..nticks-1] x end value for ticks */ float *ticksy1A; /* [0..nticks-1] y begin value for ticks */ float *ticksy2A; /* [0..nticks-1] x end value for ticks */ int nticks; /* number of ticks */ float *bpx1A; /* [0..nbp-1] x begin value for bp connect line */ float *bpx2A; /* [0..nbp-1] x end value for bp connect line */ float *bpy1A; /* [0..nbp-1] y begin value for bp connect line */ float *bpy2A; /* [0..nbp-1] x end value for bp connect line */ int nbp; /* number of bp */ float *rxA; /* [0..rflen-1] x coordinate for each nucleotide in the eventual postscript */ float *ryA; /* [0..rflen-1] y coordinate for each nucleotide in the eventual postscript */ int rflen; /* the number of nucleotides in the template file */ char **rAA; /* [0..npage-1][0..rflen-1] nucleotide character in the eventual postscript */ float ***rcolAAA; /* [0..npage-1][0..rflen-1][0..3] color for nucleotide on page p, position c, CMYK in the eventual postscript */ float ***bcolAAA; /* [0..npage-1][0..rflen-1][0..3] color for block on page p, position c, CMYK in the eventual postscript */ char **otypeAA; /* [0..npage-1][0..rflen-1] outline type on page p, position c in the eventual postscript * '0' '1' or '2', OUTLINE_MIN_IDX, OUTLINE_MID_IDX, OUTLINE_MAX_IDX, respectively */ OneCellColorLegend_t ***occlAAA;/* [0..npage-1][0..l..nocclA[p]] ptr to one cell color legend l for page p */ int *nocclA; /* [0..npage-1] number of one cell color legends for each page */ SchemeColorLegend_t **sclAA;/* [0..npage-1] ptr to scheme color legend l for page p, NULL if none */ TextLegend_t ***tlAAA;/* [0..npage-1][0..l..ntlA[p]] ptr to text legend l for page p */ int *ntlA; /* [0..npage-1] number of text legends for page p, NULL if none */ char *mask; /* mask for this postscript, columns which are '0' get drawn differently */ int nalloc; /* number of elements to add to arrays when reallocating */ int msa_nseq; /* number of sequences in the msa, impt b/c msa->nseq will be 0 if --small */ char *msa_cseq_maj;/* [0..rfpos..ps->rflen-1]: consensus sequence for the msa, determined using majority rule */ char *msa_cseq_amb;/* [0..rfpos..ps->rflen-1]: different consensus sequence for the msa, least ambiguous * nt per nongap RF position that represents >= esl_opt_GetReal(go, --athresh) fraction of * nongap nucleotides at position rfpos */ int *msa_ct; /* [1..ps->rflen] CT array for msa this postscript corresponds to, * msa_ct[i] is the position that consensus nucleotide i base pairs to, or 0 if i is unpaired. */ int msa_nbp; /* number of bps read from current MSA (in msa_ct), should equal nbp, but only if bps read from template file */ int *msa_rf2a_map;/* [0..ps->rflen-1] = apos, apos is the alignment position (0..msa->alen-1) that is non-gap RF position rfpos (for rfpos in 0..rflen-1) */ int *msa_a2rf_map;/* [0..ps->msa->alen-1] = rfpos, rfpos is the non-gap RF position (0..ps->rflen) that is alignment position apos (for apos in 0..ps->msa_alen-1) */ int *uaseqlenA; /* [0..ps->msa->nseq-1] unaligned sequence length for all sequences in the MSA, only computed if --indi */ int *seqidxA; /* [0..ps->npage-1] the sequence index in the MSA each page corresponds to, only valid if --indi */ ESL_MSA *msa; /* pointer to MSA this object corresponds to */ const ESL_ALPHABET *abc; /* ptr to alphabet used to decipher gap chars (msa itself is text mode) */ } SSPostscript_t; static SSPostscript_t *create_sspostscript(const ESL_GETOPTS *go); static int setup_sspostscript(SSPostscript_t *ps, char *errbuf); static OneCellColorLegend_t *create_onecell_colorlegend(float *cmykA, int nres, int nres_masked, int do_separator, int do_no_vspace); static SchemeColorLegend_t *create_scheme_colorlegend(int scheme, int ncols, float *limits, int ints_only_flag, int low_inclusive, int high_inclusive, int use_mask); static TextLegend_t *create_text_legend(int nlines, char **text_per_line, int do_separator); static TextLegend_t *create_text_legend_for_consensus_sequence(const ESL_GETOPTS *go, int do_separator); static int add_text_to_scheme_colorlegend(SSPostscript_t *ps, SchemeColorLegend_t *scl, char *text, int legx_max_chars, char *errbuf); static int add_text_to_onecell_colorlegend(SSPostscript_t *ps, OneCellColorLegend_t *occl, char *text, int legx_max_chars, char *errbuf); static int add_celltext_to_onecell_colorlegend(SSPostscript_t *ps, OneCellColorLegend_t *occl, char *celltext, char *errbuf); static int add_procedure_to_onecell_colorlegend(SSPostscript_t *ps, OneCellColorLegend_t *occl, char *procname, float *procstack, int nprocstack, char *errbuf); static int add_page_desc_to_sspostscript(SSPostscript_t *ps, int page, char *text, char *errbuf); static int add_diffmask_page_desc_to_sspostscript(SSPostscript_t *ps, int page, char *mask_file, char *maskdiff_file, char *errbuf); static int draw_sspostscript(FILE *fp, const ESL_GETOPTS *go, char *errbuf, char *command, char *date, float ***hc_scheme, SSPostscript_t *ps); static int draw_legend_column_headers(FILE *fp, SSPostscript_t *ps, int pagenum, char *errbuf); static int draw_onecell_colorlegend(FILE *fp, OneCellColorLegend_t *occl, SSPostscript_t *ps, int occl_idx, int pagenum); static int draw_scheme_colorlegend(const ESL_GETOPTS *go, FILE *fp, SchemeColorLegend_t *scl, float **hc_scheme, SSPostscript_t *ps, int pagenum); static void free_sspostscript(SSPostscript_t *ps); static int add_pages_sspostscript(SSPostscript_t *ps, int ntoadd, int page_mode); static int parse_template_file(char *filename, const ESL_GETOPTS *go, char *errbuf, int msa_rflen, SSPostscript_t **ret_ps); static int parse_template_page(ESL_FILEPARSER *efp, const ESL_GETOPTS *go, char *errbuf, SSPostscript_t **ret_ps); static int parse_modelname_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps); static int parse_legend_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps); static int parse_scale_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps); static int parse_ignore_section(ESL_FILEPARSER *efp, char *errbuf, int *ret_read_showpage); static int parse_regurgitate_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps); static int parse_text_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps); static int parse_lines_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps); static int validate_justread_sspostscript(SSPostscript_t *ps, char *errbuf); static int validate_and_update_sspostscript_given_msa(const ESL_GETOPTS *go, const ESL_ALPHABET *abc, SSPostscript_t *ps, ESL_MSA *msa, int msa_nseq, char *errbuf); static int read_mask_file(char *filename, char *errbuf, char **ret_mask, int *ret_masklen, int *ret_mask_has_internal_zeroes); static void PairCount(const ESL_ALPHABET *abc, double *counters, ESL_DSQ syml, ESL_DSQ symr, double wt); static int get_command(const ESL_GETOPTS *go, char *errbuf, char **ret_command); static int get_date(char *errbuf, char **ret_date); static int set_scheme_values(char *errbuf, float *vec, int ncolvals, float **scheme, float val, SchemeColorLegend_t *scl, int within_mask, int *ret_bi); static int set_onecell_values(char *errbuf, float *vec, int ncolvals, float *onecolor); static int add_mask_to_ss_postscript(SSPostscript_t *ps, char *mask); static int draw_masked_block(FILE *fp, float x, float y, float *colvec, int do_circle_mask, int do_square_mask, int do_x_mask, int do_border, float cellsize); static int draw_header_and_footer(FILE *fp, const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int page, int pageidx2print); static void get_insert_info_from_msa(const ESL_ALPHABET *abc, ESL_MSA *msa, int rflen, int **ret_nseq_with_ins_ct, int **ret_nins_ct, int ***ret_per_seq_ins_ct); static void get_insert_info_from_abc_ct(double **abc_ct, ESL_ALPHABET *abc, char *msa_rf, int64_t msa_alen, int rflen, int **ret_nseq_with_ins_ct, int **ret_nins_ct); static void get_insert_info_from_ifile(char *ifile, int rflen, int msa_nseq, ESL_KEYHASH *useme_keyhash, int **ret_nseq_with_ins_ct, int **ret_nins_ct, int ***ret_per_seq_ins_ct, int **ret_soff_ct, int **ret_eoff_ct); static int count_msa(const ESL_ALPHABET *abc, ESL_MSA *msa, char *errbuf, double ***ret_abc_ct, double ****ret_bp_ct, double ***ret_pp_ct, int **ret_spos_ct, int **ret_epos_ct); static int get_consensus_seqs_from_abc_ct(const ESL_GETOPTS *go,SSPostscript_t *ps, char *errbuf, double **abc_ct, ESL_ALPHABET *abc, int64_t msa_alen); static int infocontent_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **abc_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_onecell_idx, FILE *tabfp); static int mutual_information_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double ***bp_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int ss_idx, int zerores_idx, FILE *tabfp); static int delete_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **abc_ct, int *span_ct, int msa_nseq, int do_all, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_zerodel_idx, int hc_fewdel_idx, FILE *tabfp); static int avg_posteriors_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **pp_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_onecell_idx, FILE *tabfp); static int insertfreq_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int *nseq_with_ins_ct, int *span_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_zeroins_idx, int hc_fewins_idx, FILE *tabfp); static int insertavglen_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int *nseq_with_ins_ct, int *nins_ct, int *span_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_zeroins_idx, FILE *tabfp); static int span_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int *span_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int zercov_idx, int maxcov_idx, FILE *tabfp); static int individuals_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **abc_ct, ESL_MSA *msa, int **per_seq_ins_ct, int do_prob, int do_rescol, float ***hc_scheme, int hc_scheme_idx_s, int hc_scheme_idx_p, int hc_nbins_s, int hc_nbins_p, float **hc_onecell, int extdel_idx_s, int wcbp_idx_s, int gubp_idx_s, int ncbp_idx_s, int dgbp_idx_s, int hgbp_idx_s, int gap_idx_p, FILE *tabfp); static int cons_seq_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, float **hc_onecell, int wcbp_idx_s, int gubp_idx_s, int ncbp_idx_s, int dgbp_idx_s, int hgbp_idx_s); static int rf_seq_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, ESL_MSA *msa, int do_rescol, float **hc_onecell, int wcbp_idx_s, int gubp_idx_s, int ncbp_idx_s); static int colormask_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, ESL_MSA *msa, float **hc_onecell, int incmask_idx, int excmask_idx); static int diffmask_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, ESL_MSA *msa, char *mask2, float **hc_onecell, int incboth_idx, int inc1_idx, int inc2_idx, int excboth_idx); static int drawfile2sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, float ***hc_scheme, int hc_scheme_idx, int hc_nbins); static int expertfile2sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps); static int get_pp_idx(const ESL_ALPHABET *abc, char ppchar); static int get_span_ct(int *msa_rf2a_map, int64_t alen, int rflen, int nseq, int *spos_ct, int *epos_ct, int *srfoff_ct, int *erfoff_ct, int **ret_span_ct); static int is_watson_crick_bp(char i, char j); static int is_gu_or_ug_bp(char i, char j); static int compare_two_cmyk_colors(float acol_C, float acol_M, float acol_Y, float acol_K, float bcol_C, float bcol_M, float bcol_Y, float bcol_K); static void define_outline_procedure(FILE *fp); static char banner[] = "draw postscript secondary structure diagrams"; static char usage[] = "[options] \n\ The must be in Stockholm format."; static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "help; show brief info on version and usage", 1 }, { "-d", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "draw default set of alignment summary diagrams", 1 }, { "--mask", eslARG_INFILE, NULL, NULL, NULL, NULL,NULL, NULL, "for all diagrams, mark masked ('0') columns from mask in ", 1 }, { "--small", eslARG_NONE, NULL, NULL, NULL, NULL,NULL, NULL, "operate in small memory mode (aln must be 1 line/seq Pfam format)", 1 }, { "--cons", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "draw diagram showing the alignment's consensus sequence", 2 }, { "--info", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "draw information content diagram", 2 }, { "--mutinfo",eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "draw base pair mutual information diagram", 2 }, { "--ifreq", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "draw insert frequency diagram", 2 }, { "--iavglen",eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "draw average insert length diagram", 2 }, { "--dall", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "draw delete diagram w/all deletions (incl. terminal deletes)", 2 }, { "--prob", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "draw average posterior probability diagram", 2 }, { "--span", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "draw diagram showing fraction of seqs that span each posn", 2 }, { "--rf", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "draw diagram showing reference (#=GC RF) sequence", 2 }, { "--dint", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "draw delete diagram w/only internal (non-terminal) deletions", 2 }, { "--tabfile",eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, NULL, "output per position data in tabular format to file ", 2 }, { "--indi", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, "--small", "draw diagrams for individual sequences in the alignment", 3 }, { "-f", eslARG_NONE, FALSE, NULL, NULL, NULL,"--indi", NULL, "force; w/--indi draw all seqs, even if predicted output >100 Mb", 3 }, { "--no-pp", eslARG_NONE, FALSE, NULL, NULL, NULL,"--indi", NULL, "with --indi, do not draw indi posterior probability diagrams", 9 }, { "--no-bp", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "do not color nucleotides based on basepair type", 9 }, { "--no-ol", eslARG_NONE, FALSE, NULL, NULL, NULL,"--indi", NULL, "w/--indi, do not outline nts that are not most common nt", 9 }, { "--no-ntpp", eslARG_NONE, FALSE, NULL, NULL, NULL,"--indi", "--no-pp", "w/--indi, do not draw nts on individual post prob diagrams", 9 }, { "--no-cnt", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "do not draw consensus nts on alignment summary diagrams", 7 }, { "--cthresh",eslARG_REAL, "0.75", NULL,"0= fraction of seqs", 7 }, { "--cambig", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, "--no-cnt", "allow ambiguous nts in consensus sequence", 7 }, { "--athresh",eslARG_REAL, "0.9", NULL,"0= fraction of seqs", 7 }, { "--mask-u", eslARG_NONE, FALSE, NULL, NULL, NULL,"--mask", "--mask-x","with --mask, mark masked columns as squares", 4 }, { "--mask-x", eslARG_NONE, FALSE, NULL, NULL, NULL,"--mask", "--mask-u","with --mask, mark masked columns as x's", 4 }, { "--mask-a", eslARG_NONE, FALSE, NULL, NULL, NULL,"--mask", NULL, "with --mask-u or --mask-x, draw alternative mask style", 4 }, { "--mask-col", eslARG_NONE, NULL,NULL, NULL, NULL,"--mask", NULL, "w/--mask draw two color diagram denoting masked columns", 5 }, { "--mask-diff",eslARG_INFILE,NULL,NULL, NULL, NULL,"--mask", NULL, "with --mask , compare mask in to mask in ", 5 }, { "--dfile", eslARG_INFILE, NULL,NULL, NULL, NULL,NULL, NULL, "read 'draw file' specifying >=1 diagrams", 6 }, { "--efile", eslARG_INFILE, NULL,NULL, NULL, NULL,NULL, NULL, "read 'expert draw file' specifying >=1 diagrams", 6 }, { "--ifile", eslARG_INFILE, NULL,NULL, NULL, NULL,NULL, NULL, "read insert information from cmalign insert file ", 6 }, { "--no-leg", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "do not draw legend", 8 }, { "--no-head",eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "do not draw header", 8 }, { "--no-foot",eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "do not draw footer", 8 }, { 0,0,0,0,0,0,0,0,0,0 }, }; int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* application configuration */ ESL_ALPHABET *abc = NULL; /* biological alphabet */ char *alifile = NULL; /* alignment file name */ char *outfile = NULL; /* output ps file name */ char *templatefile = NULL; /* template file, specifying >= 1 SS diagrams * (each must have a unique consensus length) */ int fmt; /* format code for alifile */ ESLX_MSAFILE *afp = NULL; /* open alignment file, normal interface */ ESL_MSAFILE2 *afp2 = NULL; /* open alignment file, legacy small-memory interface */ ESL_MSA *msa = NULL; /* one multiple sequence alignment */ int status; /* easel return code */ int rflen; /* non-gap RF (consensus) length of each alignment */ int apos; /* counter over alignment positions */ char errbuf[ERRBUFSIZE]; /* for printing error messages */ FILE *ofp = NULL; /* output file for postscript */ FILE *tabfp = NULL; /* output file for text data, only set to non-null if --tabfile enabled */ SSPostscript_t *ps = NULL; /* the postscript data structure we create */ int *hc_nbins = NULL; /* hard-coded number of bins (colors) for each possible scheme */ float ***hc_scheme = NULL; /* colors for each pre-defined scheme */ float **hc_onecell = NULL; /* single colors used for binary color schemes */ int z; /* counter */ char *command = NULL; /* string for printing command to stdout */ char *date = NULL; /* date command was executed */ char *mask = NULL; /* first mask we'll use, string of '0's and '1's */ int masklen; /* length of mask */ char *mask2 = NULL; /* second mask we'll use, string of '0's and '1's */ int mask2len; /* length of second mask */ int mask_has_internal_zeroes = FALSE; /* does mask have any '0's with at least '1' on both sides? */ int mask2_has_internal_zeroes = FALSE; /* does mask have any '0's with at least '1' on both sides? */ /* counts of relevant values from the msa */ int *nseq_with_ins_ct = NULL; /* [0..ps->rflen] number of sequences with >=1 insert after each consensus position, only used if --ifreq */ int *nins_ct = NULL; /* [0..ps->rflen] total number of inserted nucleotides (over all seqs) after each consensus position, only used if --ifreq */ int **per_seq_ins_ct = NULL; /* [0..msa->nseq-1][0..ps->rflen] for each sequence, the number of inserts after each consensus position */ double **abc_ct = NULL; /* [0..msa->alen-1][0..abc->K], count of each nucleotide at each position, over all sequences, missing and nonnucleotides are *not counted* */ double ***bp_ct = NULL; /* [0..msa->alen-1][0..abc->Kp][0..abc->Kp], count of each possible base pair at each position, over all sequences, missing and nonnucleotides are *not counted* base pairs are indexed by 'i' for a base pair between positions i and j, where i < j. */ double **pp_ct = NULL; /* [0..msa->alen-1][0..11], count of reach posterior probability (PP) code, over all sequences, gap is 11 */ int *spos_ct = NULL; /* [0..msa->alen-1] per position count of first non-gap position, over all seqs */ int *epos_ct = NULL; /* [0..msa->alen-1] per position count of final non-gap position, over all seqs */ int *srfoff_ct = NULL; /* [0..rfpos..rflen-1], correction for spos_ct for rfpos, derived from ifile, only used if msa has had all insert columns removed */ int *erfoff_ct = NULL; /* [0..rfpos..rflen-1], correction for epos_ct for rfpos, derived from ifile, only used if msa has had all insert columns removed */ int *span_ct = NULL; /* [0..rfpos..rflen-1], number of sequences that 'span' position rfpos */ int64_t msa_alen; /* msa->alen */ int msa_nseq; /* msa->nseq */ /* variables related to small memory mode */ int do_small = TRUE; /* TRUE to operate in small memory mode, FALSE not to */ /* variables storing which pages to print */ int do_default_set = TRUE; /* TRUE if no options telling specifying what pages to draw were selected */ int do_cons = FALSE; int do_rf = FALSE; int do_info = FALSE; int do_mutinfo = FALSE; int do_ifreq = FALSE; int do_iavglen = FALSE; int do_dall = FALSE; int do_dint = FALSE; int do_prob = FALSE; int do_span = FALSE; int do_indi = FALSE; int do_maskcol = FALSE; int do_maskdiff = FALSE; int do_dfile = FALSE; int do_efile = FALSE; int need_span_ct = FALSE; /* TRUE if span_ct must be calculated (if do_dint || do_ifreq || do_iavglen || do_span) */ int tmp_Mb = 0; int predicted_Mb = 0; /* predicted size of the output file, calced if --indi */ /*********************************************** * Parse command line ***********************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "-h") ) { esl_banner(stdout, argv[0], banner); esl_usage (stdout, argv[0], usage); puts("\n where basic options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); puts("\noptions for alignment summary diagrams (incompatible with --indi):"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); puts("\noptions for drawing individual sequences (require --indi):"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); puts("\noptions for omitting parts of the diagram:"); esl_opt_DisplayHelp(stdout, go, 8, 2, 80); puts("\noptions for drawing simple two color diagrams of masks:"); esl_opt_DisplayHelp(stdout, go, 5, 2, 80); puts("\nexpert options for controlling individual seq diagrams (require --indi):"); esl_opt_DisplayHelp(stdout, go, 9, 2, 80); puts("\nexpert options related to consensus sequence definition:"); esl_opt_DisplayHelp(stdout, go, 7, 2, 80); puts("\nexpert options controlling style of masked positions:"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); puts("\nexpert options related to input files:"); esl_opt_DisplayHelp(stdout, go, 6, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != 3) { printf("Incorrect number of command line arguments.\n"); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } /* Check for incompatible options that aren't simple to check with esl_getopts */ /* --mask-a requires either --mask-x or --mask-u */ if (esl_opt_IsOn(go, "--mask-a") && (! esl_opt_IsOn(go, "--mask-u")) && (! esl_opt_IsOn(go, "--mask-x"))) { esl_fatal("--mask-a requires either --mask-u or mask-x"); } alifile = esl_opt_GetArg(go, 1); templatefile = esl_opt_GetArg(go, 2); outfile = esl_opt_GetArg(go, 3); if((status = get_command(go, errbuf, &command)) != eslOK) esl_fatal(errbuf); if((status = get_date(errbuf, &date)) != eslOK) esl_fatal(errbuf); /****************/ /* Premlinaries */ /****************/ /* allocate and fill predefined one-cell colors, these are hardcoded */ ESL_ALLOC(hc_onecell, sizeof(float *) * NOC); for(z = 0; z < NOC; z++) hc_onecell[z] = NULL; for(z = 0; z < NOC; z++) { ESL_ALLOC(hc_onecell[z], sizeof(float) * NCMYK); } hc_onecell[CYANOC][ICYAN] = CYAN_C; hc_onecell[CYANOC][IMGTA] = CYAN_M; hc_onecell[CYANOC][IYELW] = CYAN_Y; hc_onecell[CYANOC][IBLCK] = CYAN_K; hc_onecell[MAGENTAOC][ICYAN] = MAGENTA_C; hc_onecell[MAGENTAOC][IMGTA] = MAGENTA_M; hc_onecell[MAGENTAOC][IYELW] = MAGENTA_Y; hc_onecell[MAGENTAOC][IBLCK] = MAGENTA_K; hc_onecell[YELLOWOC][ICYAN] = YELLOW_C; hc_onecell[YELLOWOC][IMGTA] = YELLOW_M; hc_onecell[YELLOWOC][IYELW] = YELLOW_Y; hc_onecell[YELLOWOC][IBLCK] = YELLOW_K; hc_onecell[BLACKOC][ICYAN] = BLACK_C; hc_onecell[BLACKOC][IMGTA] = BLACK_M; hc_onecell[BLACKOC][IYELW] = BLACK_Y; hc_onecell[BLACKOC][IBLCK] = BLACK_K; hc_onecell[WHITEOC][ICYAN] = WHITE_C; hc_onecell[WHITEOC][IMGTA] = WHITE_M; hc_onecell[WHITEOC][IYELW] = WHITE_Y; hc_onecell[WHITEOC][IBLCK] = WHITE_K; hc_onecell[LIGHTGREYOC][ICYAN] = LIGHTGREY_C; hc_onecell[LIGHTGREYOC][IMGTA] = LIGHTGREY_M; hc_onecell[LIGHTGREYOC][IYELW] = LIGHTGREY_Y; hc_onecell[LIGHTGREYOC][IBLCK] = LIGHTGREY_K; hc_onecell[GREYOC][ICYAN] = GREY_C; hc_onecell[GREYOC][IMGTA] = GREY_M; hc_onecell[GREYOC][IYELW] = GREY_Y; hc_onecell[GREYOC][IBLCK] = GREY_K; hc_onecell[DARKGREYOC][ICYAN] = DARKGREY_C; hc_onecell[DARKGREYOC][IMGTA] = DARKGREY_M; hc_onecell[DARKGREYOC][IYELW] = DARKGREY_Y; hc_onecell[DARKGREYOC][IBLCK] = DARKGREY_K; hc_onecell[REDOC][ICYAN] = RED_C; hc_onecell[REDOC][IMGTA] = RED_M; hc_onecell[REDOC][IYELW] = RED_Y; hc_onecell[REDOC][IBLCK] = RED_K; hc_onecell[ORANGEOC][ICYAN] = ORANGE_C; hc_onecell[ORANGEOC][IMGTA] = ORANGE_M; hc_onecell[ORANGEOC][IYELW] = ORANGE_Y; hc_onecell[ORANGEOC][IBLCK] = ORANGE_K; hc_onecell[TEALOC][ICYAN] = TEAL_C; hc_onecell[TEALOC][IMGTA] = TEAL_M; hc_onecell[TEALOC][IYELW] = TEAL_Y; hc_onecell[TEALOC][IBLCK] = TEAL_K; hc_onecell[LIGHTGREENOC][ICYAN] = LIGHTGREEN_C; hc_onecell[LIGHTGREENOC][IMGTA] = LIGHTGREEN_M; hc_onecell[LIGHTGREENOC][IYELW] = LIGHTGREEN_Y; hc_onecell[LIGHTGREENOC][IBLCK] = LIGHTGREEN_K; hc_onecell[GREENOC][ICYAN] = GREEN_C; hc_onecell[GREENOC][IMGTA] = GREEN_M; hc_onecell[GREENOC][IYELW] = GREEN_Y; hc_onecell[GREENOC][IBLCK] = GREEN_K; hc_onecell[DARKGREENOC][ICYAN] = DARKGREEN_C; hc_onecell[DARKGREENOC][IMGTA] = DARKGREEN_M; hc_onecell[DARKGREENOC][IYELW] = DARKGREEN_Y; hc_onecell[DARKGREENOC][IBLCK] = DARKGREEN_K; hc_onecell[LIGHTPURPLEOC][ICYAN] = LIGHTPURPLE_C; hc_onecell[LIGHTPURPLEOC][IMGTA] = LIGHTPURPLE_M; hc_onecell[LIGHTPURPLEOC][IYELW] = LIGHTPURPLE_Y; hc_onecell[LIGHTPURPLEOC][IBLCK] = LIGHTPURPLE_K; hc_onecell[PURPLEOC][ICYAN] = PURPLE_C; hc_onecell[PURPLEOC][IMGTA] = PURPLE_M; hc_onecell[PURPLEOC][IYELW] = PURPLE_Y; hc_onecell[PURPLEOC][IBLCK] = PURPLE_K; hc_onecell[DARKPURPLEOC][ICYAN] = DARKPURPLE_C; hc_onecell[DARKPURPLEOC][IMGTA] = DARKPURPLE_M; hc_onecell[DARKPURPLEOC][IYELW] = DARKPURPLE_Y; hc_onecell[DARKPURPLEOC][IBLCK] = DARKPURPLE_K; /***********************************/ /* allocate and fill predefined color schemes, these are hardcoded */ ESL_ALLOC(hc_scheme, sizeof(float **) * NSCHEMES); for (z = 0; z < NSCHEMES; z++) hc_scheme[z] = NULL; ESL_ALLOC(hc_nbins, sizeof(int) * NSCHEMES); hc_nbins[RB_11_RH_SCHEME] = NRB_11_RH_SCHEME; hc_nbins[RB_11_RL_SCHEME] = NRB_11_RL_SCHEME; hc_nbins[RB_6_RH_SCHEME] = NRB_6_RH_SCHEME; hc_nbins[RB_6_RL_SCHEME] = NRB_6_RL_SCHEME; hc_nbins[RB_5_RH_SCHEME] = NRB_5_RH_SCHEME; hc_nbins[RB_5_RL_SCHEME] = NRB_5_RL_SCHEME; hc_nbins[RB_W5_OH_SCHEME] = NRB_W5_OH_SCHEME; /* RB_11_RH_SCHEME RainBow, 11 colors, Red High, blue low */ ESL_ALLOC(hc_scheme[RB_11_RH_SCHEME], sizeof(float *) * NRB_11_RH_SCHEME); for(z = 0; z < NRB_11_RH_SCHEME; z++) hc_scheme[RB_11_RH_SCHEME][z] = NULL; for(z = 0; z < NRB_11_RH_SCHEME; z++) { ESL_ALLOC(hc_scheme[RB_11_RH_SCHEME][z], sizeof(float) * NCMYK); } /* RB_11_RL_SCHEME RainBow, 11 colors, Red Low, blue high */ ESL_ALLOC(hc_scheme[RB_11_RL_SCHEME], sizeof(float *) * NRB_11_RL_SCHEME); for(z = 0; z < NRB_11_RL_SCHEME; z++) hc_scheme[RB_11_RL_SCHEME][z] = NULL; for(z = 0; z < NRB_11_RL_SCHEME; z++) { ESL_ALLOC(hc_scheme[RB_11_RL_SCHEME][z], sizeof(float) * NCMYK); } /* RB_6_RH_SCHEME RainBow, 6 colors, Red High, blue low */ ESL_ALLOC(hc_scheme[RB_6_RH_SCHEME], sizeof(float *) * NRB_6_RH_SCHEME); for(z = 0; z < NRB_6_RH_SCHEME; z++) hc_scheme[RB_6_RH_SCHEME][z] = NULL; for(z = 0; z < NRB_6_RH_SCHEME; z++) { ESL_ALLOC(hc_scheme[RB_6_RH_SCHEME][z], sizeof(float) * NCMYK); } /* RB_6_RL_SCHEME RainBow, 6 colors, Red Low, blue high */ ESL_ALLOC(hc_scheme[RB_6_RL_SCHEME], sizeof(float *) * NRB_6_RL_SCHEME); for(z = 0; z < NRB_6_RL_SCHEME; z++) hc_scheme[RB_6_RL_SCHEME][z] = NULL; for(z = 0; z < NRB_6_RL_SCHEME; z++) { ESL_ALLOC(hc_scheme[RB_6_RL_SCHEME][z], sizeof(float) * NCMYK); } /* RB_5_RH_SCHEME RainBow, 5 colors, Red High, blue low */ ESL_ALLOC(hc_scheme[RB_5_RH_SCHEME], sizeof(float *) * NRB_5_RH_SCHEME); for(z = 0; z < NRB_5_RH_SCHEME; z++) hc_scheme[RB_5_RH_SCHEME][z] = NULL; for(z = 0; z < NRB_5_RH_SCHEME; z++) { ESL_ALLOC(hc_scheme[RB_5_RH_SCHEME][z], sizeof(float) * NCMYK); } /* RB_5_RL_SCHEME RainBow, 5 colors, Red Low, blue high */ ESL_ALLOC(hc_scheme[RB_5_RL_SCHEME], sizeof(float *) * NRB_5_RL_SCHEME); for(z = 0; z < NRB_5_RL_SCHEME; z++) hc_scheme[RB_5_RL_SCHEME][z] = NULL; for(z = 0; z < NRB_5_RL_SCHEME; z++) { ESL_ALLOC(hc_scheme[RB_5_RL_SCHEME][z], sizeof(float) * NCMYK); } /* RB_W5_OH_SCHEME RainBow with white, 5 colors, Orange High, teal low, white lowest */ ESL_ALLOC(hc_scheme[RB_W5_OH_SCHEME], sizeof(float *) * NRB_W5_OH_SCHEME); for(z = 0; z < NRB_W5_OH_SCHEME; z++) hc_scheme[RB_W5_OH_SCHEME][z] = NULL; for(z = 0; z < NRB_W5_OH_SCHEME; z++) { ESL_ALLOC(hc_scheme[RB_W5_OH_SCHEME][z], sizeof(float) * NCMYK); } /***********************************/ /* fill scheme colors */ /* the 5 and 6 color rainbow schemes (the 5 color schemes are identical to the 6 color ones, they just omit blue */ hc_scheme[RB_6_RL_SCHEME][0][ICYAN] = hc_scheme[RB_6_RH_SCHEME][5][ICYAN] = hc_scheme[RB_5_RL_SCHEME][0][ICYAN] = hc_scheme[RB_5_RL_SCHEME][4][ICYAN] = RED2BLUE_1_OF_6_C; hc_scheme[RB_6_RL_SCHEME][0][IMGTA] = hc_scheme[RB_6_RH_SCHEME][5][IMGTA] = hc_scheme[RB_5_RL_SCHEME][0][IMGTA] = hc_scheme[RB_5_RL_SCHEME][4][IMGTA] = RED2BLUE_1_OF_6_M; hc_scheme[RB_6_RL_SCHEME][0][IYELW] = hc_scheme[RB_6_RH_SCHEME][5][IYELW] = hc_scheme[RB_5_RL_SCHEME][0][IYELW] = hc_scheme[RB_5_RL_SCHEME][4][IYELW] = RED2BLUE_1_OF_6_Y; hc_scheme[RB_6_RL_SCHEME][0][IBLCK] = hc_scheme[RB_6_RH_SCHEME][5][IBLCK] = hc_scheme[RB_5_RL_SCHEME][0][IBLCK] = hc_scheme[RB_5_RL_SCHEME][4][IBLCK] = RED2BLUE_1_OF_6_K; hc_scheme[RB_6_RL_SCHEME][1][ICYAN] = hc_scheme[RB_6_RH_SCHEME][4][ICYAN] = hc_scheme[RB_5_RL_SCHEME][1][ICYAN] = hc_scheme[RB_5_RL_SCHEME][3][ICYAN] = RED2BLUE_2_OF_6_C; hc_scheme[RB_6_RL_SCHEME][1][IMGTA] = hc_scheme[RB_6_RH_SCHEME][4][IMGTA] = hc_scheme[RB_5_RL_SCHEME][1][IMGTA] = hc_scheme[RB_5_RL_SCHEME][3][IMGTA] = RED2BLUE_2_OF_6_M; hc_scheme[RB_6_RL_SCHEME][1][IYELW] = hc_scheme[RB_6_RH_SCHEME][4][IYELW] = hc_scheme[RB_5_RL_SCHEME][1][IYELW] = hc_scheme[RB_5_RL_SCHEME][3][IYELW] = RED2BLUE_2_OF_6_Y; hc_scheme[RB_6_RL_SCHEME][1][IBLCK] = hc_scheme[RB_6_RH_SCHEME][4][IBLCK] = hc_scheme[RB_5_RL_SCHEME][1][IBLCK] = hc_scheme[RB_5_RL_SCHEME][3][IBLCK] = RED2BLUE_2_OF_6_K; hc_scheme[RB_6_RL_SCHEME][2][ICYAN] = hc_scheme[RB_6_RH_SCHEME][3][ICYAN] = hc_scheme[RB_5_RL_SCHEME][2][ICYAN] = hc_scheme[RB_5_RL_SCHEME][2][ICYAN] = RED2BLUE_3_OF_6_C; hc_scheme[RB_6_RL_SCHEME][2][IMGTA] = hc_scheme[RB_6_RH_SCHEME][3][IMGTA] = hc_scheme[RB_5_RL_SCHEME][2][IMGTA] = hc_scheme[RB_5_RL_SCHEME][2][IMGTA] = RED2BLUE_3_OF_6_M; hc_scheme[RB_6_RL_SCHEME][2][IYELW] = hc_scheme[RB_6_RH_SCHEME][3][IYELW] = hc_scheme[RB_5_RL_SCHEME][2][IYELW] = hc_scheme[RB_5_RL_SCHEME][2][IYELW] = RED2BLUE_3_OF_6_Y; hc_scheme[RB_6_RL_SCHEME][2][IBLCK] = hc_scheme[RB_6_RH_SCHEME][3][IBLCK] = hc_scheme[RB_5_RL_SCHEME][2][IBLCK] = hc_scheme[RB_5_RL_SCHEME][2][IBLCK] = RED2BLUE_3_OF_6_K; hc_scheme[RB_6_RL_SCHEME][3][ICYAN] = hc_scheme[RB_6_RH_SCHEME][2][ICYAN] = hc_scheme[RB_5_RL_SCHEME][3][ICYAN] = hc_scheme[RB_5_RL_SCHEME][1][ICYAN] = RED2BLUE_4_OF_6_C; hc_scheme[RB_6_RL_SCHEME][3][IMGTA] = hc_scheme[RB_6_RH_SCHEME][2][IMGTA] = hc_scheme[RB_5_RL_SCHEME][3][IMGTA] = hc_scheme[RB_5_RL_SCHEME][1][IMGTA] = RED2BLUE_4_OF_6_M; hc_scheme[RB_6_RL_SCHEME][3][IYELW] = hc_scheme[RB_6_RH_SCHEME][2][IYELW] = hc_scheme[RB_5_RL_SCHEME][3][IYELW] = hc_scheme[RB_5_RL_SCHEME][1][IYELW] = RED2BLUE_4_OF_6_Y; hc_scheme[RB_6_RL_SCHEME][3][IBLCK] = hc_scheme[RB_6_RH_SCHEME][2][IBLCK] = hc_scheme[RB_5_RL_SCHEME][3][IBLCK] = hc_scheme[RB_5_RL_SCHEME][1][IBLCK] = RED2BLUE_4_OF_6_K; hc_scheme[RB_6_RL_SCHEME][4][ICYAN] = hc_scheme[RB_6_RH_SCHEME][1][ICYAN] = hc_scheme[RB_5_RL_SCHEME][4][ICYAN] = hc_scheme[RB_5_RL_SCHEME][0][ICYAN] = RED2BLUE_5_OF_6_C; hc_scheme[RB_6_RL_SCHEME][4][IMGTA] = hc_scheme[RB_6_RH_SCHEME][1][IMGTA] = hc_scheme[RB_5_RL_SCHEME][4][IMGTA] = hc_scheme[RB_5_RL_SCHEME][0][IMGTA] = RED2BLUE_5_OF_6_M; hc_scheme[RB_6_RL_SCHEME][4][IYELW] = hc_scheme[RB_6_RH_SCHEME][1][IYELW] = hc_scheme[RB_5_RL_SCHEME][4][IYELW] = hc_scheme[RB_5_RL_SCHEME][0][IYELW] = RED2BLUE_5_OF_6_Y; hc_scheme[RB_6_RL_SCHEME][4][IBLCK] = hc_scheme[RB_6_RH_SCHEME][1][IBLCK] = hc_scheme[RB_5_RL_SCHEME][4][IBLCK] = hc_scheme[RB_5_RL_SCHEME][0][IBLCK] = RED2BLUE_5_OF_6_K; hc_scheme[RB_6_RL_SCHEME][5][ICYAN] = hc_scheme[RB_6_RH_SCHEME][0][ICYAN] = RED2BLUE_6_OF_6_C; hc_scheme[RB_6_RL_SCHEME][5][IMGTA] = hc_scheme[RB_6_RH_SCHEME][0][IMGTA] = RED2BLUE_6_OF_6_M; hc_scheme[RB_6_RL_SCHEME][5][IYELW] = hc_scheme[RB_6_RH_SCHEME][0][IYELW] = RED2BLUE_6_OF_6_Y; hc_scheme[RB_6_RL_SCHEME][5][IBLCK] = hc_scheme[RB_6_RH_SCHEME][0][IBLCK] = RED2BLUE_6_OF_6_K; /* the special 4 color, plus white color scheme */ hc_scheme[RB_W5_OH_SCHEME][0][ICYAN] = WHITE_C; hc_scheme[RB_W5_OH_SCHEME][0][IMGTA] = WHITE_M; hc_scheme[RB_W5_OH_SCHEME][0][IYELW] = WHITE_Y; hc_scheme[RB_W5_OH_SCHEME][0][IBLCK] = WHITE_K; hc_scheme[RB_W5_OH_SCHEME][1][ICYAN] = RED2BLUE_5_OF_6_C; hc_scheme[RB_W5_OH_SCHEME][1][IMGTA] = RED2BLUE_5_OF_6_M; hc_scheme[RB_W5_OH_SCHEME][1][IYELW] = RED2BLUE_5_OF_6_Y; hc_scheme[RB_W5_OH_SCHEME][1][IBLCK] = RED2BLUE_5_OF_6_K; hc_scheme[RB_W5_OH_SCHEME][2][ICYAN] = RED2BLUE_4_OF_6_C; hc_scheme[RB_W5_OH_SCHEME][2][IMGTA] = RED2BLUE_4_OF_6_M; hc_scheme[RB_W5_OH_SCHEME][2][IYELW] = RED2BLUE_4_OF_6_Y; hc_scheme[RB_W5_OH_SCHEME][2][IBLCK] = RED2BLUE_4_OF_6_K; hc_scheme[RB_W5_OH_SCHEME][3][ICYAN] = RED2BLUE_3_OF_6_C; hc_scheme[RB_W5_OH_SCHEME][3][IMGTA] = RED2BLUE_3_OF_6_M; hc_scheme[RB_W5_OH_SCHEME][3][IYELW] = RED2BLUE_3_OF_6_Y; hc_scheme[RB_W5_OH_SCHEME][3][IBLCK] = RED2BLUE_3_OF_6_K; hc_scheme[RB_W5_OH_SCHEME][4][ICYAN] = RED2BLUE_2_OF_6_C; hc_scheme[RB_W5_OH_SCHEME][4][IMGTA] = RED2BLUE_2_OF_6_M; hc_scheme[RB_W5_OH_SCHEME][4][IYELW] = RED2BLUE_2_OF_6_Y; hc_scheme[RB_W5_OH_SCHEME][4][IBLCK] = RED2BLUE_2_OF_6_K; /* the 11 color rainbow schemes */ hc_scheme[RB_11_RL_SCHEME][0][ICYAN] = hc_scheme[RB_11_RH_SCHEME][10][ICYAN] = RED2BLUE_1_OF_11_C; hc_scheme[RB_11_RL_SCHEME][0][IMGTA] = hc_scheme[RB_11_RH_SCHEME][10][IMGTA] = RED2BLUE_1_OF_11_M; hc_scheme[RB_11_RL_SCHEME][0][IYELW] = hc_scheme[RB_11_RH_SCHEME][10][IYELW] = RED2BLUE_1_OF_11_Y; hc_scheme[RB_11_RL_SCHEME][0][IBLCK] = hc_scheme[RB_11_RH_SCHEME][10][IBLCK] = RED2BLUE_1_OF_11_K; hc_scheme[RB_11_RL_SCHEME][1][ICYAN] = hc_scheme[RB_11_RH_SCHEME][9][ICYAN] = RED2BLUE_2_OF_11_C; hc_scheme[RB_11_RL_SCHEME][1][IMGTA] = hc_scheme[RB_11_RH_SCHEME][9][IMGTA] = RED2BLUE_2_OF_11_M; hc_scheme[RB_11_RL_SCHEME][1][IYELW] = hc_scheme[RB_11_RH_SCHEME][9][IYELW] = RED2BLUE_2_OF_11_Y; hc_scheme[RB_11_RL_SCHEME][1][IBLCK] = hc_scheme[RB_11_RH_SCHEME][9][IBLCK] = RED2BLUE_2_OF_11_K; hc_scheme[RB_11_RL_SCHEME][2][ICYAN] = hc_scheme[RB_11_RH_SCHEME][8][ICYAN] = RED2BLUE_3_OF_11_C; hc_scheme[RB_11_RL_SCHEME][2][IMGTA] = hc_scheme[RB_11_RH_SCHEME][8][IMGTA] = RED2BLUE_3_OF_11_M; hc_scheme[RB_11_RL_SCHEME][2][IYELW] = hc_scheme[RB_11_RH_SCHEME][8][IYELW] = RED2BLUE_3_OF_11_Y; hc_scheme[RB_11_RL_SCHEME][2][IBLCK] = hc_scheme[RB_11_RH_SCHEME][8][IBLCK] = RED2BLUE_3_OF_11_K; hc_scheme[RB_11_RL_SCHEME][3][ICYAN] = hc_scheme[RB_11_RH_SCHEME][7][ICYAN] = RED2BLUE_4_OF_11_C; hc_scheme[RB_11_RL_SCHEME][3][IMGTA] = hc_scheme[RB_11_RH_SCHEME][7][IMGTA] = RED2BLUE_4_OF_11_M; hc_scheme[RB_11_RL_SCHEME][3][IYELW] = hc_scheme[RB_11_RH_SCHEME][7][IYELW] = RED2BLUE_4_OF_11_Y; hc_scheme[RB_11_RL_SCHEME][3][IBLCK] = hc_scheme[RB_11_RH_SCHEME][7][IBLCK] = RED2BLUE_4_OF_11_K; hc_scheme[RB_11_RL_SCHEME][4][ICYAN] = hc_scheme[RB_11_RH_SCHEME][6][ICYAN] = RED2BLUE_5_OF_11_C; hc_scheme[RB_11_RL_SCHEME][4][IMGTA] = hc_scheme[RB_11_RH_SCHEME][6][IMGTA] = RED2BLUE_5_OF_11_M; hc_scheme[RB_11_RL_SCHEME][4][IYELW] = hc_scheme[RB_11_RH_SCHEME][6][IYELW] = RED2BLUE_5_OF_11_Y; hc_scheme[RB_11_RL_SCHEME][4][IBLCK] = hc_scheme[RB_11_RH_SCHEME][6][IBLCK] = RED2BLUE_5_OF_11_K; hc_scheme[RB_11_RL_SCHEME][5][ICYAN] = hc_scheme[RB_11_RH_SCHEME][5][ICYAN] = RED2BLUE_6_OF_11_C; hc_scheme[RB_11_RL_SCHEME][5][IMGTA] = hc_scheme[RB_11_RH_SCHEME][5][IMGTA] = RED2BLUE_6_OF_11_M; hc_scheme[RB_11_RL_SCHEME][5][IYELW] = hc_scheme[RB_11_RH_SCHEME][5][IYELW] = RED2BLUE_6_OF_11_Y; hc_scheme[RB_11_RL_SCHEME][5][IBLCK] = hc_scheme[RB_11_RH_SCHEME][5][IBLCK] = RED2BLUE_6_OF_11_K; hc_scheme[RB_11_RL_SCHEME][6][ICYAN] = hc_scheme[RB_11_RH_SCHEME][4][ICYAN] = RED2BLUE_7_OF_11_C; hc_scheme[RB_11_RL_SCHEME][6][IMGTA] = hc_scheme[RB_11_RH_SCHEME][4][IMGTA] = RED2BLUE_7_OF_11_M; hc_scheme[RB_11_RL_SCHEME][6][IYELW] = hc_scheme[RB_11_RH_SCHEME][4][IYELW] = RED2BLUE_7_OF_11_Y; hc_scheme[RB_11_RL_SCHEME][6][IBLCK] = hc_scheme[RB_11_RH_SCHEME][4][IBLCK] = RED2BLUE_7_OF_11_K; hc_scheme[RB_11_RL_SCHEME][7][ICYAN] = hc_scheme[RB_11_RH_SCHEME][3][ICYAN] = RED2BLUE_8_OF_11_C; hc_scheme[RB_11_RL_SCHEME][7][IMGTA] = hc_scheme[RB_11_RH_SCHEME][3][IMGTA] = RED2BLUE_8_OF_11_M; hc_scheme[RB_11_RL_SCHEME][7][IYELW] = hc_scheme[RB_11_RH_SCHEME][3][IYELW] = RED2BLUE_8_OF_11_Y; hc_scheme[RB_11_RL_SCHEME][7][IBLCK] = hc_scheme[RB_11_RH_SCHEME][3][IBLCK] = RED2BLUE_8_OF_11_K; hc_scheme[RB_11_RL_SCHEME][8][ICYAN] = hc_scheme[RB_11_RH_SCHEME][2][ICYAN] = RED2BLUE_9_OF_11_C; hc_scheme[RB_11_RL_SCHEME][8][IMGTA] = hc_scheme[RB_11_RH_SCHEME][2][IMGTA] = RED2BLUE_9_OF_11_M; hc_scheme[RB_11_RL_SCHEME][8][IYELW] = hc_scheme[RB_11_RH_SCHEME][2][IYELW] = RED2BLUE_9_OF_11_Y; hc_scheme[RB_11_RL_SCHEME][8][IBLCK] = hc_scheme[RB_11_RH_SCHEME][2][IBLCK] = RED2BLUE_9_OF_11_K; hc_scheme[RB_11_RL_SCHEME][9][ICYAN] = hc_scheme[RB_11_RH_SCHEME][1][ICYAN] = RED2BLUE_10_OF_11_C; hc_scheme[RB_11_RL_SCHEME][9][IMGTA] = hc_scheme[RB_11_RH_SCHEME][1][IMGTA] = RED2BLUE_10_OF_11_M; hc_scheme[RB_11_RL_SCHEME][9][IYELW] = hc_scheme[RB_11_RH_SCHEME][1][IYELW] = RED2BLUE_10_OF_11_Y; hc_scheme[RB_11_RL_SCHEME][9][IBLCK] = hc_scheme[RB_11_RH_SCHEME][1][IBLCK] = RED2BLUE_10_OF_11_K; hc_scheme[RB_11_RL_SCHEME][10][ICYAN] = hc_scheme[RB_11_RH_SCHEME][0][ICYAN] = RED2BLUE_11_OF_11_C; hc_scheme[RB_11_RL_SCHEME][10][IMGTA] = hc_scheme[RB_11_RH_SCHEME][0][IMGTA] = RED2BLUE_11_OF_11_M; hc_scheme[RB_11_RL_SCHEME][10][IYELW] = hc_scheme[RB_11_RH_SCHEME][0][IYELW] = RED2BLUE_11_OF_11_Y; hc_scheme[RB_11_RL_SCHEME][10][IBLCK] = hc_scheme[RB_11_RH_SCHEME][0][IBLCK] = RED2BLUE_11_OF_11_K; /***************************************** * Open the MSA file; determine alphabet; *****************************************/ do_small = esl_opt_GetBoolean(go, "--small") ? TRUE : FALSE; fmt = do_small ? eslMSAFILE_PFAM : eslMSAFILE_STOCKHOLM; abc = esl_alphabet_Create(eslRNA); /* Assert RNA alphabet */ /* is only used for gap counting, I believe * alignments are opened in TEXT mode. */ if (do_small) { status = esl_msafile2_Open(alifile, NULL, &afp2); if (status == eslENOTFOUND) esl_fatal("Alignment file %s doesn't exist or is not readable\n", alifile); else if (status != eslOK) esl_fatal("Alignment file open failed with error %d\n", status); } else { status = eslx_msafile_Open(NULL, alifile, NULL, fmt, NULL, &afp); if (status != eslOK) eslx_msafile_OpenFailure(afp, status); } /* Read the mask files, if nec */ if(esl_opt_IsOn(go, "--mask")) { if((status = read_mask_file(esl_opt_GetString(go, "--mask"), errbuf, &mask, &masklen, &mask_has_internal_zeroes)) != eslOK) esl_fatal(errbuf); } if(esl_opt_IsOn(go, "--mask-diff")) { if((status = read_mask_file(esl_opt_GetString(go, "--mask-diff"), errbuf, &mask2, &mask2len, &mask2_has_internal_zeroes)) != eslOK) esl_fatal(errbuf); if(masklen != mask2len) esl_fatal("Mask in %f length (%d) differs from mask in %f (%d)!", esl_opt_GetString(go, "--mask"), masklen, esl_opt_GetString(go, "--mask-diff"), mask2len); } /* Open output files, if necessary */ if (esl_opt_IsOn(go, "--tabfile")) { if((tabfp = fopen(esl_opt_GetString(go, "--tabfile"), "w")) == NULL) esl_fatal("Failed to open output file %s\n", esl_opt_GetString(go, "--tabfile")); } /********************** * Read the alignment * **********************/ if (do_small) { status = esl_msafile2_ReadInfoPfam(afp2, NULL, abc, -1, NULL, NULL, &msa, &msa_nseq, &msa_alen, NULL, NULL, NULL, NULL, NULL, &abc_ct, &pp_ct, NULL, NULL, NULL); if (status == eslEFORMAT) esl_fatal("Alignment file parse error:\n%s\n", afp2->errbuf); else if (status == eslEINVAL) esl_fatal("Alignment file parse error:\n%s\n", afp2->errbuf); else if (status == eslEOF) esl_fatal("No alignments found in file %s\n", alifile); else if (status != eslOK) esl_fatal("Alignment file read failed with error code %d\n%s", status, afp2); msa->alen = msa_alen; } else { status = eslx_msafile_Read(afp, &msa); /* if ! do_small, we read full aln into memory */ if (status != eslOK) eslx_msafile_ReadFailure(afp, status); msa_nseq = msa->nseq; msa_alen = msa->alen; } if(msa->rf == NULL) esl_fatal("First MSA in %s does not have RF annotation.", alifile); /* determine non-gap RF length (consensus length) */ rflen = 0; for(apos = 0; apos < msa->alen; apos++) { if(esl_abc_CIsResidue(abc, msa->rf[apos])) { rflen++; } } /* We've read the alignment, now read the template postscript file (we do this second b/c the RF len of the alignment tells us which postscript template to use) */ if((status = parse_template_file(templatefile, go, errbuf, rflen, &ps) != eslOK)) esl_fatal(errbuf); /************************************************************************************************************** * Now that we have the msa and know what template we're using, determine what type of pages we'll be drawing * **************************************************************************************************************/ /* do_default_set: this is TRUE if either -d is enabled AND/OR zero of: * {--info, --mutinfo, --ifreq, --iavglen, --dall, --dint, --span, --mask-col, --mask-diff, * --dfile, --efile, --cons, --prob, --rf, --indi} are enabled. * When do_default_set is TRUE, we draw cons, info, mutinfo, ifreq, iavglen, dall, and prob * (if the alignment has posterior probabilities). * * Careful: this block assumes that all boolean options are OFF (FALSE) by default */ do_default_set = TRUE; if(esl_opt_GetBoolean(go, "--info")) { do_info = TRUE; do_default_set = FALSE; } if(esl_opt_GetBoolean(go, "--mutinfo")) { do_mutinfo = TRUE; do_default_set = FALSE; } if(esl_opt_GetBoolean(go, "--ifreq")) { do_ifreq = TRUE; do_default_set = FALSE; } if(esl_opt_GetBoolean(go, "--iavglen")) { do_iavglen = TRUE; do_default_set = FALSE; } if(esl_opt_GetBoolean(go, "--dall")) { do_dall = TRUE; do_default_set = FALSE; } if(esl_opt_GetBoolean(go, "--dint")) { do_dint = TRUE; do_default_set = FALSE; } if(esl_opt_GetBoolean(go, "--prob")) { do_prob = TRUE; do_default_set = FALSE; } if(esl_opt_GetBoolean(go, "--span")) { do_span = TRUE; do_default_set = FALSE; } if(esl_opt_GetBoolean(go, "--mask-col")) { do_maskcol = TRUE; do_default_set = FALSE; } if(esl_opt_IsOn (go, "--mask-diff")) { do_maskdiff = TRUE; do_default_set = FALSE; } if(esl_opt_IsOn (go, "--dfile")) { do_dfile = TRUE; do_default_set = FALSE; } if(esl_opt_IsOn (go, "--efile")) { do_efile = TRUE; do_default_set = FALSE; } if(esl_opt_GetBoolean(go, "--cons")) { do_cons = TRUE; do_default_set = FALSE; } if(esl_opt_GetBoolean(go, "--rf")) { if(msa->rf == NULL) esl_fatal("--rf selected by msa does not have #=GC RF annotation"); do_rf = TRUE; do_default_set = FALSE; } if(esl_opt_GetBoolean(go, "--indi")) { do_indi = TRUE; do_default_set = FALSE; /* Predict size of indi output file, based on two data points: * 2000 page tRNA rflen=71 is 35 Mb, 2000 page archaeal SSU rflen 1508 is 560 Mb, * =~ 0.0002 Mb per page per rfpos */ predicted_Mb = (int) (ps->rflen * 0.0002 * msa_nseq); if(! esl_opt_GetBoolean(go, "--no-pp")) predicted_Mb *= 2; /* round to nearest 10 Mb */ tmp_Mb = 10; while(tmp_Mb < predicted_Mb) tmp_Mb += 10; predicted_Mb = tmp_Mb; if(predicted_Mb > MAXMBWITHOUTFORCE && (! esl_opt_GetBoolean(go, "-f"))) { esl_fatal("WARNING: drawing individual seqs and msa has %d seqs in it,\noutput postcript file will be large (~%d Mb).\nUse -f to override this warning and do it anyway.", msa_nseq, predicted_Mb); } } /* if -d: if we've made do_default_set as FALSE, we set it back to TRUE */ if(esl_opt_GetBoolean(go, "-d")) do_default_set = TRUE; if(do_default_set) { /* set default pages */ do_cons = do_info = do_mutinfo = do_ifreq = do_iavglen = do_dall = TRUE; if((do_small && pp_ct != NULL) || (msa->pp != NULL)) do_prob = TRUE; } /* determine if tabfile was incorrectly used */ if(tabfp != NULL && do_info == FALSE && do_mutinfo == FALSE && do_ifreq == FALSE && do_prob == FALSE && do_iavglen == FALSE && do_dall == FALSE && do_dint == FALSE && do_span == FALSE && do_indi == FALSE) { esl_fatal("--tabfile only makes sense w/0 other options, or with >= 1 of --info,--mutinfo,--ifreq,--iavglen,--prob,--dall,--dint,--span,--indi"); } need_span_ct = (do_dint || do_span || do_ifreq || do_iavglen) ? TRUE : FALSE; if(do_small && (do_dint || do_span || do_ifreq || do_iavglen || do_mutinfo)) { /* If we're in small mem mode, now that we know msa->rf and msa->ss_cons, * we do a second read of the msa to get bpct, spos_ct and epos_ct, * but only if we need them (if --span, --dint, or --mutinfo). * To do this, we close the alifile and reopen it, so we can read the 1st * alignment again. */ esl_msafile2_Close(afp2); status = esl_msafile2_Open(alifile, NULL, &afp2); if (status == eslENOTFOUND) esl_fatal("2nd pass, alignment file %s doesn't exist or is not readable\n", alifile); else if (status == eslEFORMAT) esl_fatal("2nd pass, couldn't determine format of alignment %s\n", alifile); else if (status != eslOK) esl_fatal("2nd pass, alignment file open failed with error %d\n", status); status = esl_msafile2_ReadInfoPfam(afp2, NULL, abc, msa_alen, msa->rf, msa->ss_cons, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &bp_ct, &spos_ct, &epos_ct); if (status == eslEFORMAT) esl_fatal("2nd pass, Alignment file parse error:\n%s\n", afp2->errbuf); else if (status == eslEINVAL) esl_fatal("2nd pass, Alignment file parse error:\n%s\n", afp2->errbuf); else if (status == eslEOF) esl_fatal("2nd pass, No alignments found in file %s\n", alifile); else if (status != eslOK) esl_fatal("2nd pass, Alignment file read failed with error code %d\n", status); } /* if we get here, the postscript file has been successfully read; now we open the output file */ if(ofp == NULL) { /* open postscript output file for writing */ if ((ofp = fopen(outfile, "w")) == NULL) esl_fatal("Failed to open output postscript file %s\n", esl_opt_GetArg(go, 2)); } /* determine position for header and legend */ if((status = setup_sspostscript(ps, errbuf) != eslOK)) esl_fatal(errbuf); if(ps->rflen == 0) esl_fatal("MSA has consensus (non-gap RF) length of %d which != template file consensus length of %d.", rflen, ps->rflen); if(rflen != ps->rflen) esl_fatal("MSA has consensus (non-gap RF) length of %d which != template file consensus length of %d.", rflen, ps->rflen); /* add the mask if there is one */ if(mask != NULL) add_mask_to_ss_postscript(ps, mask); if(mask != NULL && ps->rflen != masklen) esl_fatal("MSA has consensus (non-gap RF) length of %d which != lane mask length of %d from mask file %s.", rflen, masklen, esl_opt_GetString(go, "--mask")); if ((status = validate_and_update_sspostscript_given_msa(go, abc, ps, msa, msa_nseq, errbuf)) != eslOK) esl_fatal(errbuf); /* get the information we need from the alignment */ if(! do_small) { /* derive counts from the msa for postscript diagrams, we do this our functions for drawing diagrams work in small mem or big mem mode */ if((status = count_msa(abc, msa, errbuf, &(abc_ct), &(bp_ct), (do_prob ? &(pp_ct) : NULL), &(spos_ct), &(epos_ct))) != eslOK) esl_fatal(errbuf); } if (esl_opt_GetBoolean(go, "--prob") && pp_ct == NULL) esl_fatal("--prob requires all sequences have PP annotation"); /* read the insert file, if nec, we have to do this before we determine the span count in case inserts have been removed from the msa, * in which case the spos_ct and epos_ct's from either count_msa or esl_msafile2_ReadInfoPfam() could be slightly incorrect, we'll use * srfoff_ct and erfoff_ct from get_insert_info_from_ifile() to correct them when we derive span_ct from spos_ct and epos_ct together in get_span_ct(). */ if(esl_opt_IsOn(go, "--ifile")) { get_insert_info_from_ifile((esl_opt_GetString(go, "--ifile")), ps->rflen, msa_nseq, NULL, &(nseq_with_ins_ct), &(nins_ct), NULL, &srfoff_ct, &erfoff_ct); /* dies with esl_fatal() upon an error */ } /* determine span count */ if(need_span_ct) { if((status = get_span_ct(ps->msa_rf2a_map, msa_alen, ps->rflen, msa_nseq, spos_ct, epos_ct, srfoff_ct, erfoff_ct, &span_ct)) != eslOK) esl_fatal("Out of memory, getting span_ct array."); } /* determine consensus sequence */ if((status = get_consensus_seqs_from_abc_ct(go, ps, errbuf, abc_ct, abc, msa_alen)) != eslOK) esl_fatal(errbuf); /* step through each type of page, creating it if nec */ if(do_cons) { /* this will work in either small memory or normal memory mode */ if((status = cons_seq_sspostscript(go, errbuf, ps, hc_onecell, BLACKOC, /* one-cell legend, watson-crick bp color */ GREENOC, /* one-cell legend, G-U or U-G bp color */ REDOC, /* one-cell legend, color for noncanonical bps */ LIGHTPURPLEOC, /* one-cell legend, internal double-gap bp color */ LIGHTPURPLEOC)) != eslOK) /* one-cell legend, internal half-gap bp color, only relevant if do_rescol == TRUE */ esl_fatal(errbuf); } if(do_rf) { /* this will work in either small memory or normal memory mode */ if((status = rf_seq_sspostscript(go, errbuf, ps, msa, (! esl_opt_GetBoolean(go, "--no-bp")), hc_onecell, BLACKOC, /* one-cell legend, watson-crick bp color, only relevant if do_rescol == TRUE */ GREENOC, /* one-cell legend, G-U or U-G bp color, only relevant if do_rescol == TRUE */ REDOC)) != eslOK) /* one-cell legend, color for noncanonical bps */ esl_fatal(errbuf); } if(do_info) { if((status = infocontent_sspostscript(go, abc, errbuf, ps, abc_ct, msa_nseq, hc_scheme, RB_6_RL_SCHEME, hc_nbins[RB_6_RL_SCHEME], hc_onecell, LIGHTGREYOC, tabfp)) != eslOK) esl_fatal(errbuf); } if(do_mutinfo) { /* mutual info page */ if((status = mutual_information_sspostscript(go, abc, errbuf, ps, bp_ct, msa_nseq, hc_scheme, RB_6_RH_SCHEME, hc_nbins[RB_6_RH_SCHEME], hc_onecell, GREYOC, LIGHTGREYOC, tabfp)) != eslOK) esl_fatal(errbuf); } if(do_ifreq || do_iavglen) { /* insert frequency page */ /* first, determine number of sequences with inserts after each position, 3 different ways depending on command line options */ if(esl_opt_IsOn(go, "--ifile")) { /* read the insert file from cmalign */ /* we've already read the ifile above, and filled nseq_with_ins_ct, but we check here */ if(nseq_with_ins_ct == NULL) esl_fatal("Internal error, --ifile selected, but not read"); } else if (do_small) { /* use abc_ct to derive nseq_with_ins_ct */ get_insert_info_from_abc_ct(abc_ct, abc, msa->rf, msa_alen, ps->rflen, &(nseq_with_ins_ct), &(nins_ct)); /* dies with esl_fatal() upon an error */ } else { get_insert_info_from_msa(abc, msa, ps->rflen, &(nseq_with_ins_ct), &(nins_ct), NULL); /* dies with esl_fatal() upon an error */ } /* now draw the insert diagram */ if(do_ifreq) { if((status = insertfreq_sspostscript(go, errbuf, ps, nseq_with_ins_ct, span_ct, msa_nseq, hc_scheme, RB_6_RH_SCHEME, hc_nbins[RB_6_RH_SCHEME], hc_onecell, LIGHTGREYOC, GREYOC, tabfp)) != eslOK) esl_fatal(errbuf); } if(do_iavglen) { if((status = insertavglen_sspostscript(go, errbuf, ps, nseq_with_ins_ct, nins_ct, span_ct, msa_nseq, hc_scheme, RB_6_RH_SCHEME, hc_nbins[RB_6_RH_SCHEME], hc_onecell, LIGHTGREYOC, tabfp)) != eslOK) esl_fatal(errbuf); } } if(do_dall) { /* make a new postscript page marking all deletes */ if((status = delete_sspostscript(go, abc, errbuf, ps, abc_ct, span_ct, msa_nseq, TRUE, hc_scheme, RB_6_RH_SCHEME, hc_nbins[RB_6_RH_SCHEME], hc_onecell, LIGHTGREYOC, DARKGREYOC, tabfp)) != eslOK) esl_fatal(errbuf); } if(do_dint) { /* internal deletes */ if((status = delete_sspostscript(go, abc, errbuf, ps, abc_ct, span_ct, msa_nseq, FALSE, hc_scheme, RB_6_RH_SCHEME, hc_nbins[RB_6_RH_SCHEME], hc_onecell, LIGHTGREYOC, DARKGREYOC, tabfp)) != eslOK) esl_fatal(errbuf); } if(do_prob && pp_ct != NULL) { /* avg post prob */ if((status = avg_posteriors_sspostscript(go, abc, errbuf, ps, pp_ct, msa_nseq, hc_scheme, RB_6_RL_SCHEME, hc_nbins[RB_6_RL_SCHEME], hc_onecell, LIGHTGREYOC, tabfp)) != eslOK) esl_fatal(errbuf); } if(do_span) { /* span */ if((status = span_sspostscript(go, errbuf, ps, span_ct, msa_nseq, hc_scheme, RB_6_RL_SCHEME, hc_nbins[RB_6_RL_SCHEME], hc_onecell, LIGHTGREYOC, BLACKOC, tabfp)) != eslOK) esl_fatal(errbuf); } if(do_maskcol) { /* Paint positions excluded by the mask magenta, unless the mask has zero internal exclusions. * Such a mask is a 'truncating' mask, that excludes only a 5' contiguous set of columns, and a 3' contiguous set of columns, in this case paint excluded positions light grey. */ if((status = colormask_sspostscript(go, errbuf, ps, msa, hc_onecell, BLACKOC, (mask_has_internal_zeroes ? MAGENTAOC : LIGHTGREYOC))) != eslOK) esl_fatal(errbuf); } if(do_maskdiff) { if((status = diffmask_sspostscript(go, errbuf, ps, msa, mask2, hc_onecell, BLACKOC, CYANOC, MAGENTAOC, LIGHTGREYOC)) != eslOK) esl_fatal(errbuf); } if(do_dfile) { if((status = drawfile2sspostscript(go, errbuf, ps, hc_scheme, RB_6_RH_SCHEME, hc_nbins[RB_6_RH_SCHEME])) != eslOK) esl_fatal(errbuf); } if(do_efile) { if((status = expertfile2sspostscript(go, errbuf, ps)) != eslOK) esl_fatal(errbuf); } if(do_indi) { /* we're printing all individual seqs */ /* get insert info we'll use in individuals_sspostscript() */ if(esl_opt_IsOn(go, "--ifile")) { /* read the insert file from cmalign, with info from all seqs */ get_insert_info_from_ifile((esl_opt_GetString(go, "--ifile")), ps->rflen, msa_nseq, NULL, NULL, NULL, &(per_seq_ins_ct), NULL, NULL); /* dies with esl_fatal() upon an error */ } else { get_insert_info_from_msa(abc, msa, ps->rflen, NULL, NULL, &per_seq_ins_ct); /* dies with esl_fatal() upon an error */ } /* we have msa and per_seq_ins_ct for all possible combos of --small and --ifile, * draw the individual sequence pages */ if((status = individuals_sspostscript(go, abc, errbuf, ps, abc_ct, msa, per_seq_ins_ct, ((! esl_opt_GetBoolean(go, "--no-pp")) && (msa->pp != NULL)), /* do_prob? draw pp pages? */ (! esl_opt_GetBoolean(go, "--no-bp")), /* do_rescol: paint nucleotides different colors based on basepair type? */ hc_scheme, RB_W5_OH_SCHEME, RB_6_RL_SCHEME, hc_nbins[RB_W5_OH_SCHEME], hc_nbins[RB_6_RL_SCHEME], hc_onecell, LIGHTGREYOC, /* one-cell legend, 5'/3' flush color */ BLACKOC, /* one-cell legend, watson-crick bp color, only relevant if do_rescol == TRUE */ GREENOC, /* one-cell legend, G-U or U-G bp color, only relevant if do_rescol == TRUE */ REDOC, /* one-cell legend, non-canonical bp color, only relevant if do_rescol == TRUE */ LIGHTPURPLEOC, /* one-cell legend, internal double-gap bp color, only relevant if do_rescol == TRUE */ LIGHTPURPLEOC, /* one-cell legend, internal half-gap bp color, only relevant if do_rescol == TRUE */ LIGHTGREYOC, /* one-cell legend, color for gap in post prob pages */ tabfp)) != eslOK) esl_fatal(errbuf); } if((status = draw_sspostscript(ofp, go, errbuf, command, date, hc_scheme, ps)) != eslOK) esl_fatal(errbuf); free(command); fclose(ofp); printf("# %d page postscript saved to file %s.\n", ps->npage, outfile); /* Cleanup, normal return */ if(tabfp != NULL) { fclose(tabfp); if(do_indi && (do_info || do_mutinfo || do_ifreq || do_iavglen || do_dall || do_dint || do_prob || do_span)) { printf("# Per-position and per-sequence data saved to tab-delimited text file %s.\n", esl_opt_GetString(go, "--tabfile")); } else if (do_indi) { printf("# Per-sequence data saved to tab-delimited text file %s.\n", esl_opt_GetString(go, "--tabfile")); } else { printf("# Per-position data saved to tab-delimited text file %s.\n", esl_opt_GetString(go, "--tabfile")); } } if(abc_ct != NULL) esl_Free2D((void **) abc_ct, msa->alen); if(pp_ct != NULL) esl_Free2D((void **) pp_ct, msa->alen); if(bp_ct != NULL) esl_Free3D((void ***) bp_ct, msa->alen, abc->Kp); if(spos_ct != NULL) free(spos_ct); if(epos_ct != NULL) free(epos_ct); if(srfoff_ct != NULL) free(srfoff_ct); if(erfoff_ct != NULL) free(erfoff_ct); if(span_ct != NULL) free(span_ct); if(nseq_with_ins_ct != NULL) free(nseq_with_ins_ct); if(per_seq_ins_ct != NULL) esl_Free2D((void **) per_seq_ins_ct, msa_nseq); if(mask != NULL) free(mask); if(date != NULL) free(date); free_sspostscript(ps); esl_alphabet_Destroy(abc); if (afp) eslx_msafile_Close(afp); if (afp2) esl_msafile2_Close(afp2); esl_getopts_Destroy(go); free(hc_nbins); for(z = 0; z < NOC; z++) free(hc_onecell[z]); free(hc_onecell); for(z = 0; z < NRB_11_RH_SCHEME; z++) free(hc_scheme[RB_11_RH_SCHEME][z]); for(z = 0; z < NRB_11_RL_SCHEME; z++) free(hc_scheme[RB_11_RL_SCHEME][z]); for(z = 0; z < NRB_6_RH_SCHEME; z++) free(hc_scheme[RB_6_RH_SCHEME][z]); for(z = 0; z < NRB_6_RL_SCHEME; z++) free(hc_scheme[RB_6_RL_SCHEME][z]); for(z = 0; z < NRB_5_RH_SCHEME; z++) free(hc_scheme[RB_5_RH_SCHEME][z]); for(z = 0; z < NRB_5_RL_SCHEME; z++) free(hc_scheme[RB_5_RL_SCHEME][z]); for(z = 0; z < NRB_W5_OH_SCHEME; z++) free(hc_scheme[RB_W5_OH_SCHEME][z]); for(z = 0; z < NSCHEMES; z++) { free(hc_scheme[z]); } free(hc_scheme); if(msa != NULL) esl_msa_Destroy(msa); return 0; ERROR: esl_fatal("Memory allocation error in main()."); return eslFAIL;/* silence compiler warning about void return*/ } /* Function: create_sspostscript() * * Purpose: Create and initialize a SS postscript data structure. * Return: ps */ static SSPostscript_t * create_sspostscript(const ESL_GETOPTS *go) { int status; SSPostscript_t *ps; ESL_ALLOC(ps, sizeof(SSPostscript_t)); ps->npage = 0; ps->modelname = NULL; ps->modeA = NULL; ps->descA = NULL; ps->headerx = 0.; ps->headery = 0.; ps->headerx_desc = 0.; ps->headerx_charsize = 0.; ps->headery_charsize = 0.; ps->desc_max_chars = 0; ps->leg_posn = -1; ps->leg_cellsize = -1; ps->leg_rhs_space = 0.; ps->legx_offset = 0.; ps->legy_offset = 0.; ps->legx = 0.; ps->legy = 0.; ps->cur_legy = 0.; ps->legx_charsize = 0.; ps->legy_charsize = 0.; ps->legx_max_chars = 0; ps->legx_stats = 0.; ps->pagex_max = 0.; ps->pagey_max = 0.; ps->scale = -1.; /* we'll check if this is still negative after reading the template file, if so it's an error */ ps->regurgA = NULL; ps->nregurg = 0; ps->posntextA = NULL; ps->posntextxA = ps->posntextyA = NULL; ps->nposntext = 0; ps->ticksx1A = ps->ticksx2A = ps->ticksy1A = ps->ticksy2A = NULL; ps->nticks = 0; ps->bpx1A = ps->bpx2A = ps->bpy1A = ps->bpy2A = NULL; ps->nbp = 0; ps->rxA = ps->ryA = NULL; ps->rflen = 0; ps->rAA = NULL; ps->rcolAAA = NULL; ps->bcolAAA = NULL; ps->otypeAA = NULL; ps->occlAAA = NULL; ps->nocclA = NULL; ps->sclAA = NULL; ps->tlAAA = NULL; ps->ntlA = NULL; ps->mask = NULL; ps->nalloc = 50; ps->msa_cseq_maj = NULL; ps->msa_cseq_amb = NULL; ps->msa_ct = NULL; ps->msa_nbp = 0; ps->msa_rf2a_map = NULL; ps->msa_a2rf_map = NULL; ps->uaseqlenA = NULL; ps->seqidxA = NULL; ps->msa = NULL; ps->abc = NULL; return ps; ERROR: esl_fatal("create_sspostscript(): memory allocation error."); return NULL; /* NEVERREACHED */ } /* Function: setup_sspostscript() * * Purpose: Determine positions for header and legend in a SSPostscript_t() * Return: eslOK */ static int setup_sspostscript(SSPostscript_t *ps, char *errbuf) { float xroom, yroom; float header_fontwidth, header_max_chars; if(ps->rflen == 0) ESL_FAIL(eslEINVAL, errbuf, "Failed to ready any nucleotides in template file."); /* set up legx, legy, this is a hack (takes advantage of position of 3' nucleotide in all SSU models) */ ps->legx = ps->rxA[ps->leg_posn-1] + ps->legx_offset; ps->legy = ps->ryA[ps->leg_posn-1] + ps->legy_offset; ps->cur_legy = ps->legy; ps->pagex_max = POSTSCRIPT_PAGEWIDTH / ps->scale; ps->pagey_max = POSTSCRIPT_PAGEHEIGHT / ps->scale; ps->headerx = 0. + PAGE_SIDEBUF; ps->headery = ps->pagey_max - PAGE_TOPBUF - ((HEADER_FONTSIZE_UNSCALED) / ps->scale); /* determine max number of nucleotides we can print before we run off the page in the legend section */ ps->legx_charsize = (LEG_FONTSIZE_UNSCALED / COURIER_HEIGHT_WIDTH_RATIO) / ps->scale; ps->legy_charsize = (LEG_FONTSIZE_UNSCALED) / ps->scale; xroom = ps->pagex_max - ps->legx - (ps->leg_cellsize - ps->legx_charsize); yroom = ps->pagey_max - ps->legy - (ps->leg_cellsize - ps->legy_charsize); ps->legx_max_chars = (int) (xroom / ps->legx_charsize); ps->legy_max_chars = (int) (yroom / ps->legy_charsize); ps->legx_stats = ps->pagex_max - PAGE_SIDEBUF - ps->leg_rhs_space - (LEG_EXTRA_COLUMNS * ps->legx_charsize); /* determine max size of description that will fit in header */ header_fontwidth = (HEADER_FONTSIZE_UNSCALED / COURIER_HEIGHT_WIDTH_RATIO) / ps->scale; ps->headerx_charsize = (HEADER_FONTSIZE_UNSCALED / COURIER_HEIGHT_WIDTH_RATIO) / ps->scale; header_max_chars = (int) ((ps->pagex_max - 2*PAGE_SIDEBUF) / ps->headerx_charsize); ps->headery_charsize = (HEADER_FONTSIZE_UNSCALED) / ps->scale; ps->desc_max_chars = header_max_chars - (HEADER_MODELNAME_MAXCHARS + 6 + 6 + 8 +2); /*6,6,8 for #pos,#bps,#seq plus 2 spaces each, plus 2 for after name */ ps->headerx_desc = ps->pagex_max - PAGE_SIDEBUF - (ps->desc_max_chars * ps->headerx_charsize); return eslOK; } /* Function: free_sspostscript() * * Purpose: Free a SS postscript data structure. * Return: (void) */ static void free_sspostscript(SSPostscript_t *ps) { int i, p, c, l, l2; if(ps->modelname != NULL) free(ps->modelname); if(ps->modeA != NULL) free(ps->modeA); if(ps->descA != NULL) { for(i = 0; i < ps->npage; i++) { if(ps->descA[i] != NULL) { free(ps->descA[i]); } } free(ps->descA); } if(ps->regurgA != NULL) { for(i = 0; i < ps->nregurg; i++) { if(ps->regurgA[i] != NULL) { free(ps->regurgA[i]); } } free(ps->regurgA); } if(ps->posntextA != NULL) { for(i = 0; i < ps->nposntext; i++) free(ps->posntextA[i]); free(ps->posntextA); } if(ps->posntextxA != NULL) free(ps->posntextxA); if(ps->posntextyA != NULL) free(ps->posntextyA); if(ps->ticksx1A != NULL) free(ps->ticksx1A); if(ps->ticksy1A != NULL) free(ps->ticksy1A); if(ps->ticksx2A != NULL) free(ps->ticksx2A); if(ps->ticksy2A != NULL) free(ps->ticksy2A); if(ps->bpx1A != NULL) free(ps->bpx1A); if(ps->bpy1A != NULL) free(ps->bpy1A); if(ps->bpx2A != NULL) free(ps->bpx2A); if(ps->bpy2A != NULL) free(ps->bpy2A); if(ps->rxA != NULL) free(ps->rxA); if(ps->ryA != NULL) free(ps->ryA); if(ps->rAA != NULL) { for(p = 0; p < ps->npage; p++) if(ps->rAA[p] != NULL) free(ps->rAA[p]); free(ps->rAA); } if(ps->rcolAAA != NULL) { for(p = 0; p < ps->npage; p++) { if(ps->rcolAAA[p] != NULL) { for(c = 0; c < ps->rflen; c++) free(ps->rcolAAA[p][c]); free(ps->rcolAAA[p]); } } free(ps->rcolAAA); } if(ps->bcolAAA != NULL) { for(p = 0; p < ps->npage; p++) { if(ps->bcolAAA[p] != NULL) { for(c = 0; c < ps->rflen; c++) free(ps->bcolAAA[p][c]); free(ps->bcolAAA[p]); } } free(ps->bcolAAA); } if(ps->otypeAA != NULL) { for(p = 0; p < ps->npage; p++) { if(ps->otypeAA[p] != NULL) { free(ps->otypeAA[p]); } } free(ps->otypeAA); } if(ps->occlAAA != NULL) { for(p = 0; p < ps->npage; p++) { if(ps->occlAAA[p] != NULL) { for(l = 0; l < ps->nocclA[p]; l++) { if(ps->occlAAA[p][l]->text != NULL) free(ps->occlAAA[p][l]->text); if(ps->occlAAA[p][l]->celltext != NULL) free(ps->occlAAA[p][l]->celltext); if(ps->occlAAA[p][l]->procname != NULL) free(ps->occlAAA[p][l]->procname); if(ps->occlAAA[p][l]->procstack != NULL) free(ps->occlAAA[p][l]->procstack); free(ps->occlAAA[p][l]); /* the rest is statically allocated memory */ } free(ps->occlAAA[p]); } } free(ps->occlAAA); } if(ps->sclAA != NULL) { for(p = 0; p < ps->npage; p++) { if(ps->sclAA[p] != NULL) { if(ps->sclAA[p]->limits != NULL) free(ps->sclAA[p]->limits); if(ps->sclAA[p]->counts != NULL) free(ps->sclAA[p]->counts); if(ps->sclAA[p]->counts_masked != NULL) free(ps->sclAA[p]->counts_masked); if(ps->sclAA[p]->text1 != NULL) free(ps->sclAA[p]->text1); if(ps->sclAA[p]->text2 != NULL) free(ps->sclAA[p]->text2); free(ps->sclAA[p]); /* statically allocated memory */ } } free(ps->sclAA); } if(ps->tlAAA != NULL) { for(p = 0; p < ps->npage; p++) { if(ps->tlAAA[p] != NULL) { for(l = 0; l < ps->ntlA[p]; l++) { for(l2 = 0; l2 < ps->tlAAA[p][l]->nlines; l2++) { free(ps->tlAAA[p][l]->text_per_line[l2]); } free(ps->tlAAA[p][l]); /* the rest is statically allocated memory */ } free(ps->tlAAA[p]); } } free(ps->tlAAA); } if(ps->ntlA != NULL) free(ps->ntlA); if(ps->nocclA != NULL) free(ps->nocclA); if(ps->msa_cseq_maj != NULL) free(ps->msa_cseq_maj); if(ps->msa_cseq_amb != NULL) free(ps->msa_cseq_amb); if(ps->msa_ct != NULL) free(ps->msa_ct); if(ps->msa_rf2a_map != NULL) free(ps->msa_rf2a_map); if(ps->msa_a2rf_map != NULL) free(ps->msa_a2rf_map); if(ps->mask != NULL) free(ps->mask); if(ps->seqidxA != NULL) free(ps->seqidxA); if(ps->uaseqlenA != NULL) free(ps->uaseqlenA); free(ps); return; } /* Function: create_onecell_colorlegend() * * Purpose: Create and initialize a one cell color legend data structure. * As a special case, pass nres as OCCL_BLANK_COUNT if you don't * want a count printed for this one cell. * Return: occl */ static OneCellColorLegend_t * create_onecell_colorlegend(float *col, int nres, int nres_masked, int do_separator, int do_no_vspace) { int status; OneCellColorLegend_t *occl; ESL_ALLOC(occl, sizeof(OneCellColorLegend_t)); /* initialize */ esl_vec_FSet(occl->col, NCMYK, 0.); occl->text = NULL; occl->celltext = NULL; occl->procname = NULL; occl->procstack = NULL; occl->nprocstack = 0; /* set caller specified values */ esl_vec_FCopy(col, NCMYK, occl->col); occl->nres = nres; occl->nres_masked = nres_masked; occl->do_separator = do_separator; occl->do_no_vspace = do_no_vspace; return occl; ERROR: esl_fatal("create_onecell_colorlegend(): memory allocation error."); return NULL; /* NEVERREACHED */ } /* Function: create_onecell_colorlegend() * * Purpose: Create and initialize a one cell color legend data structure. * Return: occl */ static TextLegend_t * create_text_legend(int nlines, char **text_per_line, int do_separator) { int status; TextLegend_t *tl; int i; ESL_ALLOC(tl, sizeof(TextLegend_t)); /* initialize */ tl->text_per_line = NULL; /* set caller specified values */ tl->nlines = nlines; tl->do_separator = do_separator; ESL_ALLOC(tl->text_per_line, sizeof(char *) * nlines); for(i = 0; i < nlines; i++) { if((status = esl_strdup(text_per_line[i], -1, &(tl->text_per_line[i]))) != eslOK) esl_fatal("create_text_legend(), error copying text"); } return tl; ERROR: esl_fatal("create_text_legend(): memory allocation error."); return NULL; /* NEVERREACHED */ } /* Function: create_text_legend_for_consensus_sequence() * * Purpose: Create text explaining how a consensus sequence is calculated * for the legend, and return it in the form of a TextLegend_t * object. * * Return: tl */ static TextLegend_t * create_text_legend_for_consensus_sequence(const ESL_GETOPTS *go, int do_separator) { int status; TextLegend_t *tl; int i; int nlines; char **text; if(esl_opt_GetBoolean(go, "--cambig")) { nlines = 5; ESL_ALLOC(text, sizeof(char *) * nlines); for(i = 0; i < nlines; i++) { text[i] = NULL; } if((status = esl_strcat(&(text[0]), -1, "Consensus nucleotides (nt) are displayed, calculated", -1)) != eslOK) esl_fatal("create_text_legend_for_consensus_sequence(), error copying text"); ESL_ALLOC(text[1], sizeof(char) * (strlen("as the least ambiguous nt that represents >= 1.00") + 1)); sprintf(text[1], "as the least ambiguous nt that represents >= %0.2f", esl_opt_GetReal(go, "--athresh")); if((status = esl_strcat(&(text[2]), -1, "of all non-gap nts at each position.", -1)) != eslOK) esl_fatal("create_text_legend_for_consensus_sequence(), error copying text"); if((status = esl_strcat(&(text[3]), -1, "K=G|U, M=A|C, R=A|G, S=C|G, Y=C|U, W=A|U", -1)) != eslOK) esl_fatal("create_text_legend_for_consensus_sequence(), error copying text"); if((status = esl_strcat(&(text[4]), -1, "B=C|G|U, D=A|G|U, H=A|C|U, V=A|C|G, N=A|C|G|U", -1)) != eslOK) esl_fatal("create_text_legend_for_consensus_sequence(), error copying text"); } else { /* --cambig not enabled, majority rule was used */ nlines = 4; ESL_ALLOC(text, sizeof(char *) * nlines); for(i = 0; i < nlines; i++) { text[i] = NULL; } if((status = esl_strcat(&(text[0]), -1, "Consensus nucleotides (nt) are displayed, defined", -1)) != eslOK) esl_fatal("create_text_legend_for_consensus_sequence(), error copying text"); if((status = esl_strcat(&(text[1]), -1, "as the most frequent nt at each position.", -1)) != eslOK) esl_fatal("create_text_legend_for_consensus_sequence(), error copying text"); ESL_ALLOC(text[2], sizeof(char) * (strlen("Capitalized nts occur in >= 1.00 fraction of sequences") + 1)); sprintf(text[2], "Capitalized nts occur in >= %0.2f fraction of sequences", esl_opt_GetReal(go, "--cthresh")); if((status = esl_strcat(&(text[3]), -1, "that do not have a gap at the position.", -1)) != eslOK) esl_fatal("create_text_legend_for_consensus_sequence(), error copying text"); } tl = create_text_legend(nlines, text, do_separator); for(i = 0; i < nlines; i++) { free(text[i]); } free(text); return tl; ERROR: esl_fatal("create_text_legend(): memory allocation error."); return NULL; /* NEVERREACHED */ } /* Function: create_scheme_colorlegend() * * Purpose: Create and initialize a scheme color legend data structure. * Return: scl */ static SchemeColorLegend_t * create_scheme_colorlegend(int scheme, int nbins, float *limits, int ints_only_flag, int low_inclusive, int high_inclusive, int use_mask) { int status; SchemeColorLegend_t *scl; int i; int *counts; int *counts_masked; ESL_ALLOC(scl, sizeof(SchemeColorLegend_t)); /* initialize */ scl->text1 = NULL; scl->text2 = NULL; /* set caller specified values */ scl->scheme = scheme; scl->nbins = nbins; ESL_ALLOC(scl->limits, sizeof(float) * (nbins+1)); for(i = 0; i <= nbins; i++) { scl->limits[i] = limits[i]; } ESL_ALLOC(counts, sizeof(int) * nbins); ESL_ALLOC(counts_masked, sizeof(int) * nbins); esl_vec_ISet(counts, nbins, 0); esl_vec_ISet(counts_masked, nbins, 0); scl->counts = counts; scl->counts_masked = counts_masked; scl->ints_only_flag = ints_only_flag; scl->low_inclusive = low_inclusive; scl->high_inclusive = high_inclusive; scl->use_mask = use_mask; return scl; ERROR: esl_fatal("create_scheme_colorlegend(): memory allocation error."); return NULL; /* NEVERREACHED */ } /* Function: add_text_to_scheme_colorlegend() * * Purpose: Add text to an existing scheme color legend data structure. * Throws: Exception if the text is too long. */ int add_text_to_scheme_colorlegend(SSPostscript_t *ps, SchemeColorLegend_t *scl, char *text, int legx_max_chars, char *errbuf) { int status; int i, idx; int max_chars_per_line; if(scl->text1 != NULL) esl_fatal("add_text_to_scheme_colorlegend(), text already exists!\n"); if(scl->text2 != NULL) esl_fatal("add_text_to_scheme_colorlegend(), text already exists!\n"); if(text == NULL) esl_fatal("add_text_to_scheme_colorlegend(), passed in text is NULL!\n"); max_chars_per_line = ps->legx_max_chars - ((int) ps->leg_rhs_space / ps->legx_charsize) - ((int) (PAGE_SIDEBUF / ps->legx_charsize)) - LEG_EXTRA_COLUMNS - 2; if(((int) strlen(text)) <= max_chars_per_line) { /* case 1, entire text can fit in one line */ if((status = esl_strdup(text, -1, &(scl->text1))) != eslOK) esl_fatal("add_text_to_scheme_colorlegend(), error copying text"); return eslOK; } else if(((int) strlen(text)) > ((2 * max_chars_per_line) - 6)) { /* case 2, entire text can't even fit in two lines, * (this is inexact doesn't account for size of words which is an issue b/c we break at newline, * this is why I have the extra '- 6'); */ ESL_FAIL(eslEINVAL, errbuf, "add_text_to_scheme_colorlegend(), text is %d chars, max allowed is %d (%s)\n", (int) strlen(text), ((2 * max_chars_per_line) - 6), text); } else { /* split it up into two lines */ idx = max_chars_per_line - 1; while(text[idx] != ' ') { idx--; if(idx < 0) ESL_FAIL(eslEINVAL, errbuf, "add_text_to_scheme_colorlegend(), couldn't find a breakpoint for splitting the string (%s)\n", text); } /* copy first string into text1 */ ESL_ALLOC(scl->text1, sizeof(char) * (idx+1)); for(i = 0; i < idx; i++) scl->text1[i] = text[i]; scl->text1[idx] = '\0'; /* copy remainder into text2 */ int len = (int) strlen(text); idx++; ESL_ALLOC(scl->text2, sizeof(char) * (len - idx+1)); for(i = idx; i < len; i++) scl->text2[i-idx] = text[i]; scl->text2[len-idx] = '\0'; } return eslOK; ERROR: ESL_FAIL(status, errbuf, "Error adding text to scheme_colorlegend probably out of memory"); } /* Function: add_text_to_onecell_colorlegend() * * Purpose: Add text to an existing one cell color legend data structure. * Throws: Exception if the text is too long. */ int add_text_to_onecell_colorlegend(SSPostscript_t *ps, OneCellColorLegend_t *occl, char *text, int legx_max_chars, char *errbuf) { int status; int max_chars_per_line; if(occl->text != NULL) esl_fatal("add_text_to_onecell_colorlegend(), text description already exists!\n"); if(text == NULL) esl_fatal("add_text_to_onecell_colorlegend(), passed in text is NULL!\n"); max_chars_per_line = legx_max_chars - LEG_EXTRA_COLUMNS - 2 - ((int) (((float) ps->leg_cellsize * 1.5) / ps->legx_charsize)); /*printf("max: %d cur: %d text: %s\n", max_chars_per_line, (int) strlen(text), text);*/ if(((int) strlen(text)) > (max_chars_per_line)) { ESL_FAIL(eslEINVAL, errbuf, "add_text_to_onecell_colorlegend(), text is %d chars, max allowed is %d (%s)\n", (int) strlen(text), max_chars_per_line, text); } if((status = esl_strdup(text, -1, &(occl->text))) != eslOK) esl_fatal("add_text_to_onecell_colorlegend(), error copying text"); return eslOK; } /* Function: add_celltext_to_onecell_colorlegend() * * Purpose: Add cell text to an existing one cell color legend data structure. */ int add_celltext_to_onecell_colorlegend(SSPostscript_t *ps, OneCellColorLegend_t *occl, char *celltext, char *errbuf) { int status; if(occl->celltext != NULL) esl_fatal("add_celltext_to_onecell_colorlegend(), cell text already exists!\n"); if(celltext == NULL) esl_fatal("add_celltext_to_onecell_colorlegend(), passed in celltext is NULL!\n"); if((status = esl_strdup(celltext, -1, &(occl->celltext))) != eslOK) esl_fatal("add_celltext_to_onecell_colorlegend(), error copying text"); return eslOK; } /* Function: add_procedure_to_onecell_colorlegend() * * Purpose: Add procedure for drawing one cell to an existing one cell color legend data structure. */ int add_procedure_to_onecell_colorlegend(SSPostscript_t *ps, OneCellColorLegend_t *occl, char *procname, float *procstack, int nprocstack, char *errbuf) { int status; int i; if(occl->celltext != NULL) esl_fatal("add_procedure_to_onecell_colorlegend(), cell text already exists!\n"); if(occl->procname != NULL) esl_fatal("add_procedure_to_onecell_colorlegend(), procedure text already exists!\n"); if(occl->procstack != NULL) esl_fatal("add_procedure_to_onecell_colorlegend(), procedure stack already exists!\n"); if(procname == NULL) esl_fatal("add_procedure_to_onecell_colorlegend(), passed in procname is NULL!\n"); if(procstack == NULL) esl_fatal("add_procedure_to_onecell_colorlegend(), passed in procstack is NULL!\n"); if((status = esl_strdup(procname, -1, &(occl->procname))) != eslOK) esl_fatal("add_procedure_to_onecell_colorlegend(), error copying text"); ESL_ALLOC(occl->procstack, sizeof(float) * nprocstack); for(i = 0; i < nprocstack; i++) occl->procstack[i] = procstack[i]; occl->nprocstack = nprocstack; return eslOK; ERROR: return eslEMEM; } /* Function: add_page_desc_to_sspostscript() * * Purpose: Add text describing a particular page of a postscript object. * Throws: Exception if the text is too long. */ int add_page_desc_to_sspostscript(SSPostscript_t *ps, int page, char *text, char *errbuf) { int status; int i, j; int max_both_lines; if(ps->descA[page] != NULL) ESL_FAIL(eslEINVAL, errbuf, "add_page_desc_to_sspostscript(), description for page %d already exists!\n", page); if(text == NULL) ESL_FAIL(eslEINVAL, errbuf, "add_page_desc_to_sspostscript(), passed in text is NULL!\n"); max_both_lines =(2. * ps->desc_max_chars); if(ps->modeA[page] == INDIMODE || ps->modeA[page] == SIMPLEMASKMODE) max_both_lines--; /* b/c we have to add a '-' to split up the larger strings onto 2 lines */ /* check to see if we can fit the text onto two lines of max width ps->desc_max_chars */ int textlen = (int) strlen(text); if(textlen <= ps->desc_max_chars) { /* fine, this will fit on one line */ if((status = esl_strdup(text, -1, &(ps->descA[page]))) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_page_desc_to_sspostscript(), error copying text"); } else if (textlen <= max_both_lines) { if(ps->modeA[page] == ALIMODE) { /* maybe fine, make sure there's a break point (space ' ') that will break this string into two strings of length <= ps->desc_max_chars */ i = ps->desc_max_chars; while(text[i] != ' ' && text[i] != '-') { i--; if(i < 0) ESL_FAIL(eslEINVAL, errbuf, "add_page_desc_to_sspostscript(), first word of text (%s) is more than max allowed of %d chars", text, ps->desc_max_chars); } /* found last space before max width, make sure it breaks the line up into two chunks of valid size */ if((textlen - (i+1)) <= ps->desc_max_chars) { /* we're good */ if((status = esl_strdup(text, -1, &(ps->descA[page]))) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_page_desc_to_sspostscript(), error copying text"); ps->descA[page][i] = '\n'; /* so we can remember where the break is */ } else ESL_FAIL(eslEINVAL, errbuf, "add_page_desc_to_sspostscript(), couldn't find (' ') for splitting text into two chunks (%s)", text); } else { /* INDIMODE or SIMPLEMASKMODE, sequence/mask name bigger than 1 line, but not 2, we put a '-' in it at the end of line 1 and add a '\n' so we remember where it was */ ESL_ALLOC(ps->descA[page], sizeof(char) * (textlen + 3)); /* +3 so we have space for the extra '-' and '\n' */ for(i = 0; i < ps->desc_max_chars; i++) ps->descA[page][i] = text[i]; i = ps->desc_max_chars; ps->descA[page][i] = '-'; i++; ps->descA[page][i] = '\n'; for(i = ps->desc_max_chars; i < textlen; i++) ps->descA[page][i+2] = text[i]; ps->descA[page][textlen+2] = '\0'; } } else /* the text won't fit on two lines */ if(ps->modeA[page] != INDIMODE) { /* not fine, this won't fit on two lines */ ESL_FAIL(eslEINVAL, errbuf, "add_page_desc_to_sspostscript(), text is %d chars, max allowed is %d (%s)\n", textlen, max_both_lines, text); } else { /* INDIMODE or SIMPLEMASKMODE, sequence/mask name exceeds max, we put a '-' in it at the end of line 1 and truncate it */ ESL_ALLOC(ps->descA[page], sizeof(char) * (max_both_lines + 2)); /* +2 so we have space for the extra '\n' (which we won't print), and the '\0' */ /* first look to see if there's a space before desc_max_chars, this will never happen for a seq name, but may for a mask description */ j = ps->desc_max_chars; while(text[j] != ' ' && j > 0) { j--; } if(j == 0) { j = ps->desc_max_chars; } /* no space */ for(i = 0; i < j; i++) ps->descA[page][i] = text[i]; i = j; if(j == ps->desc_max_chars && text[j] != ' ') { ps->descA[page][i] = '-'; } i++; ps->descA[page][i] = '\n'; for(i = j; i < j + ps->desc_max_chars; i++) ps->descA[page][i+2] = text[i]; ps->descA[page][i+2] = '\0'; } return eslOK; ERROR: ESL_FAIL(status, errbuf, "add_page_desc_to_sspostscript() error, probably out of memory."); } /* Function: add_diffmask_page_desc_to_sspostscript() * * Purpose: Add text describing a diff mask page of a postscript object. * Throws: Exception if the text is too long. */ int add_diffmask_page_desc_to_sspostscript(SSPostscript_t *ps, int page, char *mask_file, char *maskdiff_file, char *errbuf) { int status; int i; char *mask1desc = NULL; char *mask2desc = NULL; int len2copy; int mask_file_len; int maskdiff_file_len; void *tmp; if(ps->mask == NULL) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), ps->mask is NULL\n"); if(ps->descA[page] != NULL) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), description for page %d already exists!\n", page); if(maskdiff_file == NULL) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), passed in maskdiff_file is NULL!\n"); /* check to see if we can fit the text onto two lines of max width ps->desc_max_chars */ mask_file_len = (int) strlen(ps->mask); maskdiff_file_len = (int) strlen(maskdiff_file); if((status = esl_strcat(&(mask1desc), -1, "mask 1: ", -1)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), error copying text"); if((mask_file_len + 8) <= ps->desc_max_chars) { /* this will fit on one line */ if((status = esl_strcat(&(mask1desc), -1, mask_file, -1)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), error copying text"); } else { /* won't fit on one line, include as much as we can */ len2copy = ps->desc_max_chars - 8 - 3; /* 8 is for "mask 1: " at beginning, 3 is for "..." at end */ ESL_RALLOC(mask1desc, tmp, sizeof(char) * ps->desc_max_chars+1); for(i = 0; i < len2copy; i++) { mask1desc[8+i] = mask_file[i]; } mask1desc[8+len2copy] = '.'; mask1desc[8+len2copy+1] = '.'; mask1desc[8+len2copy+2] = '.'; mask1desc[8+len2copy+3] = '\0'; } /* repeat for mask 2 */ if((status = esl_strcat(&(mask2desc), -1, "mask 2: ", -1)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), error copying text"); if((maskdiff_file_len + 8) <= ps->desc_max_chars) { /* this will fit on one line */ if((status = esl_strcat(&(mask2desc), -1, maskdiff_file, -1)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), error copying text"); } else { /* won't fit on one line, include as much as we can */ len2copy = ps->desc_max_chars - 8 - 3; /* 8 is for "mask 1: " at beginning, 3 is for "..." at end */ ESL_RALLOC(mask2desc, tmp, sizeof(char) * ps->desc_max_chars+1); for(i = 0; i < len2copy; i++) { mask2desc[8+i] = maskdiff_file[i]; } mask2desc[8+len2copy] = '.'; mask2desc[8+len2copy+1] = '.'; mask2desc[8+len2copy+2] = '.'; mask2desc[8+len2copy+3] = '\0'; } /* concatenate them in ps->descA[page] */ if((status = esl_strcat(&(ps->descA[page]), -1, mask1desc, -1)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), error copying text"); if((status = esl_strcat(&(ps->descA[page]), -1, "\n", -1)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), error copying text"); if((status = esl_strcat(&(ps->descA[page]), -1, mask2desc, -1)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "add_diffmask_page_desc_to_sspostscript(), error copying text"); free(mask1desc); free(mask2desc); return eslOK; ERROR: ESL_FAIL(status, errbuf, "add_page_desc_to_sspostscript() error, probably out of memory."); } /* Function: add_mask_to_sspostscript * * Purpose: Add a mask to a sspostscript object. */ int add_mask_to_ss_postscript(SSPostscript_t *ps, char *mask) { int status; if(ps->mask != NULL) { esl_fatal("add_mask_to_ss_postscript(), mask is non-null!\n"); } if(mask == NULL) esl_fatal("add_mask_to_ss_postscript(), passed in mask is NULL!\n"); if((status = esl_strdup(mask, -1, &(ps->mask))) != eslOK) esl_fatal("add_mask_to_ss_postscript(), error copying mask"); return eslOK; } /* Function: draw_legend_column_headers() * * Purpose: Draw the legend column headers. * Return: eslOK */ static int draw_legend_column_headers(FILE *fp, SSPostscript_t *ps, int pagenum, char *errbuf) { int status; int i; float x, y, legend_fontsize; char *cur_string; int cur_width = 0; legend_fontsize = LEG_FONTSIZE_UNSCALED / ps->scale; x = ps->legx; y = ps->cur_legy; if(ps->mask != NULL && ps->modeA[pagenum] == ALIMODE) { y -= 1.25 * (float) ps->leg_cellsize; } /*fprintf(fp, "/%s findfont %f scalefont setfont\n", SPECIAL_FONT, legend_fontsize);*/ fprintf(fp, "%% begin legend column headers\n"); fprintf(fp, "(%s) %.2f %.2f moveto show\n", "LEGEND", x, (y + ((float) ps->leg_cellsize * .25))); /*fprintf(fp, "/%s findfont %f scalefont setfont\n", LEG_FONT, legend_fontsize);*/ x = ps->legx_stats; y = ps->cur_legy; cur_width = ps->legx_max_chars - ((int) ps->leg_rhs_space / ps->legx_charsize) - ((int) (PAGE_SIDEBUF / ps->legx_charsize)) - LEG_EXTRA_COLUMNS - 2; ESL_ALLOC(cur_string, sizeof(char) * (cur_width+1)); for(i = 0; i < cur_width; i++) cur_string[i] = '-'; cur_string[cur_width] = '\0'; if(ps->mask != NULL && ps->modeA[pagenum] == ALIMODE) { fprintf(fp, "(%4s %4s) %.2f %.2f moveto show\n", "", "incl", x, (y + ((float) ps->leg_cellsize * .25))); y -= 0.625 * (float) ps->leg_cellsize; fprintf(fp, "(%4s %4s) %.2f %.2f moveto show\n", "", " by ", x, (y + ((float) ps->leg_cellsize * .25))); y -= 0.625 * (float) ps->leg_cellsize; fprintf(fp, "(%4s %4s) %.2f %.2f moveto show\n", "all", "mask", x, (y + ((float) ps->leg_cellsize * .25))); y -= 0.625 * (float) ps->leg_cellsize; fprintf(fp, "(%s) %.2f %.2f moveto show\n", cur_string, ps->legx, (y + ((float) ps->leg_cellsize * .25))); fprintf(fp, "(---- ----) %.2f %.2f moveto show\n", x, (y + ((float) ps->leg_cellsize * .25))); } else { fprintf(fp, "(%5s) %.2f %.2f moveto show\n", "count", x, (y + ((float) ps->leg_cellsize * .25))); y -= 0.625 * (float) ps->leg_cellsize; fprintf(fp, "(%s) %.2f %.2f moveto show\n", cur_string, ps->legx, (y + ((float) ps->leg_cellsize * .25))); fprintf(fp, "(-----) %.2f %.2f moveto show\n", x, (y + ((float) ps->leg_cellsize * .25))); } ps->cur_legy = y - (1.0 * (float) ps->leg_cellsize); fprintf(fp, "%% end legend column headers\n\n"); free(cur_string); return eslOK; ERROR: ESL_FAIL(status, errbuf, "ERROR drawing legend column headers, probably out of memory."); } /* Function: draw_onecell_colorlegend() * * Purpose: Print a one cell color legend to an open file. * Return: eslOK, dies if we run out of memory. */ static int draw_onecell_colorlegend(FILE *fp, OneCellColorLegend_t *occl, SSPostscript_t *ps, int occl_idx, int pagenum) { int status; float x, y; int cp, i; float fontsize; char *cur_string; int cur_width = 0; /* object is valid, print it */ x = ps->legx; y = ps->cur_legy; /* print cell */ fprintf(fp, "%% begin one cell color legend\n"); if(occl->celltext == NULL && occl->procname == NULL) { /* print a colored block as the cell */ fprintf(fp, "newpath\n"); fprintf(fp, " %.2f %.2f moveto", x, y); fprintf(fp, " 0 %.3f rlineto %.3f 0 rlineto 0 %.3f rlineto closepath\n", (float) ps->leg_cellsize, (float) ps->leg_cellsize, (-1 * (float) ps->leg_cellsize)); fprintf(fp, " "); for(cp = 0; cp < NCMYK; cp++) fprintf(fp, "%.2f ", occl->col[cp]); fprintf(fp, "setcmykcolor\n"); fprintf(fp, " fill\n"); /* draw a small box outlining the colored block we just drew */ /*fprintf(fp, "%.2f setlinewidth\n", (ps->leg_cellsize / 24.)); fprintf(fp, "newpath\n"); fprintf(fp, " %.2f %.2f moveto", x, y); fprintf(fp, " 0 %.3f rlineto %.3f 0 rlineto 0 %.3f rlineto closepath\n", (float) ps->leg_cellsize, (float) ps->leg_cellsize, (-1 * (float) ps->leg_cellsize)); fprintf(fp, " "); fprintf(fp, " %.4f %.4f %.4f %.4f setcmykcolor\n", 0., 0., 0., 1.); fprintf(fp, " stroke\n");*/ } else if (occl->procname != NULL) { fprintf(fp, "%.2f %.2f ", x, y); for(i = 0; i < occl->nprocstack; i++) { fprintf(fp, "%.2f ", occl->procstack[i]); } fprintf(fp, "%s\n", occl->procname); } else if (occl->celltext != NULL){ /* fontsize = (float) ps->leg_cellsize / strlen(occl->celltext); */ fontsize = (float) ps->leg_cellsize / 2; fprintf(fp, "/%s findfont %f scalefont setfont\n", NUCLEOTIDES_FONT, fontsize); for(cp = 0; cp < NCMYK; cp++) fprintf(fp, "%.2f ", occl->col[cp]); fprintf(fp, "setcmykcolor\n"); fprintf(fp, "(%s) %.2f %.2f moveto show\n", occl->celltext, x, y + ((float) ps->leg_cellsize * 0.25)); } if(occl->celltext == NULL || (strlen(occl->celltext) > 0)) { /* if we printed a block or text, modify x, so text for the legend is indented appropriately */ x += (float) ps->leg_cellsize * 1.5; } fontsize = LEG_FONTSIZE_UNSCALED / ps->scale; /* print text for this legend */ if(occl->text != NULL) { /* back to black */ fprintf(fp, " 0.00 0.00 0.00 1.00 setcmykcolor\n"); fprintf(fp, "/%s findfont %f scalefont setfont\n", LEG_FONT, fontsize); fprintf(fp, "(%s) %.2f %.2f moveto show\n", occl->text, x, y + ((float) ps->leg_cellsize * 0.25)); /* print stats */ if(occl->nres != OCCL_BLANK_COUNT) { x = ps->legx_stats; if(ps->mask != NULL && ps->modeA[pagenum] == ALIMODE) { fprintf(fp, "(%4d %4d) %.2f %.2f moveto show\n", occl->nres, occl->nres_masked, x, y + ((float) ps->leg_cellsize * 0.25)); } else { fprintf(fp, "(%5d) %.2f %.2f moveto show\n", occl->nres, x, y + ((float) ps->leg_cellsize * 0.25)); } } } /* reset color to black */ fprintf(fp, " %.4f %.4f %.4f %.4f setcmykcolor\n", 0., 0., 0., 1.); if(occl->do_separator) { cur_width = ps->legx_max_chars - ((int) ps->leg_rhs_space / ps->legx_charsize) - ((int) (PAGE_SIDEBUF / ps->legx_charsize)) - LEG_EXTRA_COLUMNS - 2; ESL_ALLOC(cur_string, sizeof(char) * (cur_width+1)); for(i = 0; i < cur_width; i++) cur_string[i] = '-'; cur_string[cur_width] = '\0'; fprintf(fp, "(%s) %.2f %.2f moveto show\n", cur_string, ps->legx, (y - ((float) ps->leg_cellsize * 0.5))); fprintf(fp, "(-----) %.2f %.2f moveto show\n", (float) ps->legx_stats, (y - ((float) ps->leg_cellsize * 0.5))); y -= (float) ps->leg_cellsize * 0.5; free(cur_string); } /* y -= (float) ps->leg_cellsize * 1.5; */ if(occl->do_no_vspace) { y -= (float) (ps->leg_cellsize / COURIER_HEIGHT_WIDTH_RATIO) * 1.25; } else { y -= (float) ps->leg_cellsize * 1.25; } ps->cur_legy = y; fprintf(fp, "%% end one cell color legend\n\n"); return eslOK; ERROR: esl_fatal("ERROR drawing one cell legend, probably out of memory."); return eslEMEM; /* never reached */ } /* Function: draw_scheme_colorlegend() * * Purpose: Print a scheme color legend to an open file. * Return: eslOK */ static int draw_scheme_colorlegend(const ESL_GETOPTS *go, FILE *fp, SchemeColorLegend_t *scl, float **hc_scheme, SSPostscript_t *ps, int pagenum) { float x, y; int cp; int c,i,n1s; float fontsize; int do_circle_mask, do_square_mask, do_x_mask, do_border; int do_mask; float old_x; do_mask = ((ps->mask != NULL) && (scl->use_mask)) ? TRUE : FALSE; do_border = (!esl_opt_GetBoolean(go, "--mask-a")); do_circle_mask = do_square_mask = do_x_mask = FALSE; if(esl_opt_GetBoolean(go, "--mask-u")) { do_square_mask = TRUE; } else if(esl_opt_GetBoolean(go, "--mask-x")) { do_x_mask = TRUE; } else do_circle_mask = TRUE; x = ps->legx; y = ps->cur_legy; //y = ps->legy - (ps->nocclA[pagenum] * ((float) ps->leg_cellsize * 1.5)); fontsize = LEG_FONTSIZE_UNSCALED / ps->scale; fprintf(fp, "%% begin color scheme legend\n"); fprintf(fp, "/%s findfont %f scalefont setfont\n", LEG_FONT, fontsize); fprintf(fp, " 0.00 0.00 0.00 1.00 setcmykcolor\n"); float colvec[NCMYK]; colvec[0] = colvec[1] = colvec[2] = 0.; colvec[3] = 1.0; if(do_mask) { /* print cells showing difference between masked and unmasked */ /*x -= (float) ps->leg_cellsize;*/ /*y -= (float) ps->leg_cellsize;*/ fprintf(fp, "%.1f setlinewidth\n", (float) ps->leg_cellsize/4.); fprintf(fp, "newpath\n"); fprintf(fp, " %.2f %.2f moveto", x, y); fprintf(fp, " 0 %.3f rlineto %.3f 0 rlineto 0 %.3f rlineto closepath\n", (float) ps->leg_cellsize, (float) ps->leg_cellsize, (-1 * (float) ps->leg_cellsize)); fprintf(fp, " "); for(cp = 0; cp < NCMYK; cp++) { fprintf(fp, "%.2f ", colvec[cp]); } fprintf(fp, "setcmykcolor\n"); fprintf(fp, " fill\n"); /* print label */ x += (float) ps->leg_cellsize * 1.5; y += (float) ps->leg_cellsize * 0.625; fprintf(fp, "(included by mask) %.2f %.2f moveto show\n", x, y); y -= (float) ps->leg_cellsize * 0.625; fprintf(fp, "((all colors)) %.2f %.2f moveto show\n", x, y); x -= (float) ps->leg_cellsize * 1.5; /* print stats for included by mask */ old_x = x; n1s = 0; for(i = 0; i < ps->rflen; i++) if(ps->mask[i] == '1') n1s++; x = ps->legx_stats; y += (float) ps->leg_cellsize * 0.3125; fprintf(fp, "(%4d %4d) %.2f %.2f moveto show\n", n1s, n1s, x, y); y -= (float) ps->leg_cellsize * 0.3125; x = old_x; y -= (float) ps->leg_cellsize * 1.5; draw_masked_block(fp, x, y, colvec, do_circle_mask, do_square_mask, do_x_mask, do_border, (float) ps->leg_cellsize); x += (float) ps->leg_cellsize * 1.5; y += (float) ps->leg_cellsize * 0.625; fprintf(fp, "(excluded by mask) %.2f %.2f moveto show\n", x, y); y -= (float) ps->leg_cellsize * 0.625; fprintf(fp, "((all colors)) %.2f %.2f moveto show\n", x, y); /* print stats for excluded by mask */ old_x = x; x = ps->legx_stats; y += (float) ps->leg_cellsize * 0.3125; fprintf(fp, "(%4d %4d) %.2f %.2f moveto show\n", ps->rflen-n1s, 0, x, y); y -= (float) ps->leg_cellsize * 1.8125; x = ps->legx; } /* print text for this legend */ if(scl->text1 != NULL) { if(scl->text2 == NULL) { fprintf(fp, "(%s:) %.2f %.2f moveto show\n", scl->text1, x, (y + ((float) ps->leg_cellsize * .25))); } else { fprintf(fp, "(%s) %.2f %.2f moveto show\n", scl->text1, x, (y + ((float) ps->leg_cellsize * .25))); y -= (float) ps->leg_cellsize * 0.625; fprintf(fp, "(%s:) %.2f %.2f moveto show\n", scl->text2, x, (y + ((float) ps->leg_cellsize * .25))); } } y -= (float) ps->leg_cellsize; /* print scheme color cells and labels next to them */ for(c = 0; c < scl->nbins; c++) { fprintf(fp, "newpath\n"); fprintf(fp, " %.2f %.2f moveto", x, y); fprintf(fp, " 0 %.3f rlineto %.3f 0 rlineto 0 %.3f rlineto closepath\n", (float) ps->leg_cellsize, (float) ps->leg_cellsize, (-1 * (float) ps->leg_cellsize)); fprintf(fp, " "); for(cp = 0; cp < NCMYK; cp++) { fprintf(fp, "%.2f ", hc_scheme[c][cp]); } fprintf(fp, "setcmykcolor\n"); fprintf(fp, " fill\n"); /* draw a small box outlining the colored block we just drew */ /*fprintf(fp, "%.2f setlinewidth\n", (ps->leg_cellsize / 24.)); fprintf(fp, "newpath\n"); fprintf(fp, " %.2f %.2f moveto", x, y); fprintf(fp, " 0 %.3f rlineto %.3f 0 rlineto 0 %.3f rlineto closepath\n", (float) ps->leg_cellsize, (float) ps->leg_cellsize, (-1 * (float) ps->leg_cellsize)); fprintf(fp, " "); fprintf(fp, " %.4f %.4f %.4f %.4f setcmykcolor\n", 0., 0., 0., 1.); fprintf(fp, " stroke\n");*/ /* print label */ x += (float) ps->leg_cellsize * 1.5; y += (float) ps->leg_cellsize * 0.25; fprintf(fp, " 0.00 0.00 0.00 1.00 setcmykcolor\n"); if(esl_FCompare(scl->limits[c+1], SSDRAWINFINITY, eslSMALLX1) == eslOK) { /* max value is infinity, special case */ if(c != scl->nbins-1) esl_fatal("ERROR when drawing color legend, limits[%d] is INFINITY, but this is reserved only for the max limit", c+1); if(scl->ints_only_flag) fprintf(fp, "(>=%d) %.2f %.2f moveto show\n", (int) scl->limits[c], x, y); else fprintf(fp, "(>=%3.f) %.2f %.2f moveto show\n", scl->limits[c], x, y); } else if(scl->ints_only_flag) { if(c == scl->nbins-1) { fprintf(fp, "(\\[%d-%d\\]) %.2f %.2f moveto show\n", (int) scl->limits[c], (int) scl->limits[c+1], x, y); } else if(esl_FCompare(scl->limits[c], scl->limits[c+1]-1, eslSMALLX1) == eslOK) { /* next limit is exactly 1 plus cur limit, don't do range, define single int */ if(compare_two_cmyk_colors(hc_scheme[c][ICYAN], hc_scheme[c][IMGTA], hc_scheme[c][IYELW], hc_scheme[c][IBLCK], WHITE_C, WHITE_M, WHITE_Y, WHITE_K)) { /* color is white and won't show up on our white background, so we explicitly state (blank) next to it's color value */ fprintf(fp, "(\\(blank\\) %d) %.2f %.2f moveto show\n", (int) scl->limits[c], x, y); } else { fprintf(fp, "(%d) %.2f %.2f moveto show\n", (int) scl->limits[c], x, y); } } else { fprintf(fp, "(\\[%d-%d\\]) %.2f %.2f moveto show\n", (int) scl->limits[c], (int) scl->limits[c+1]-1, x, y); } } else { if(c == scl->nbins-1) fprintf(fp, "(\\[%.3f-%.3f\\%c) %.2f %.2f moveto show\n", scl->limits[c], scl->limits[c+1], (scl->high_inclusive ? ']' : ')'), x, y); else if(c == 0) fprintf(fp, "(\\%c%.3f-%.3f\\)) %.2f %.2f moveto show\n", (scl->low_inclusive ? '[' : '('), scl->limits[c], scl->limits[c+1], x, y); else fprintf(fp, "(\\[%.3f-%.3f\\)) %.2f %.2f moveto show\n", scl->limits[c], scl->limits[c+1], x, y); } /* print stats */ old_x = x; x = ps->legx_stats; if(do_mask) { fprintf(fp, "(%4d %4d) %.2f %.2f moveto show\n", scl->counts[c], scl->counts_masked[c], x, y); } else { fprintf(fp, "(%5d) %.2f %.2f moveto show\n", scl->counts[c], x, y); } x = old_x - (float) ps->leg_cellsize * 1.5; y -= (float) ps->leg_cellsize * 0.25; y -= (float) ps->leg_cellsize; } /* reset color to black */ fprintf(fp, " %.4f %.4f %.4f %.4f setcmykcolor\n", 0., 0., 0., 1.); fprintf(fp, "%% end color scheme legend\n\n"); ps->cur_legy = y; return eslOK; } /* Function: draw_text_section_in_legend() * * Purpose: Print a text section in the legend section. * Return: eslOK, dies if we run out of memory. */ static int draw_text_section_in_legend(FILE *fp, TextLegend_t *tl, SSPostscript_t *ps, int tl_idx, int pagenum) { int status; float x, y; int i; float fontsize; char *cur_string; int cur_width = 0; x = ps->legx; y = ps->cur_legy; /* print cell */ fprintf(fp, "%% begin text legend\n"); fontsize = LEG_EXTRA_TEXT_FONTSIZE_UNSCALED / ps->scale; /* print text for this legend */ /* back to black */ fprintf(fp, " 0.00 0.00 0.00 1.00 setcmykcolor\n"); fprintf(fp, "/%s findfont %f scalefont setfont\n", LEG_EXTRA_TEXT_FONT, fontsize); for(i = 0; i < tl->nlines; i++) { fprintf(fp, "(%s) %.2f %.2f moveto show\n", tl->text_per_line[i], x, y); y -= (float) fontsize * 1.25; } if(tl->do_separator) { cur_width = ps->legx_max_chars - ((int) (PAGE_SIDEBUF / ps->legx_charsize)) - LEG_EXTRA_COLUMNS - 2; ESL_ALLOC(cur_string, sizeof(char) * (cur_width+1)); for(i = 0; i < cur_width; i++) cur_string[i] = '-'; cur_string[cur_width] = '\0'; fprintf(fp, "(%s) %.2f %.2f moveto show\n", cur_string, ps->legx, (y - ((float) ps->leg_cellsize * 0.5))); fprintf(fp, "(-----) %.2f %.2f moveto show\n", (float) ps->legx_stats, (y - ((float) ps->leg_cellsize * 0.5))); y -= (float) ps->leg_cellsize * 0.5; free(cur_string); } ps->cur_legy = y - (1.0 * (float) ps->leg_cellsize); fprintf(fp, "%% end text legend\n\n"); return eslOK; ERROR: esl_fatal("ERROR drawing text legend, probably out of memory."); return eslEMEM; /* never reached */ } /* Function: draw_sspostscript() * * Purpose: Print a SS postscript data structure. * Return: eslOK on success; * eslEINCOMPAT if ps->npage == 0 */ static int draw_sspostscript(FILE *fp, const ESL_GETOPTS *go, char *errbuf, char *command, char *date, float ***hc_scheme, SSPostscript_t *ps) { int status; int p, pi, i, c, l; int do_circle_mask, do_square_mask, do_x_mask, do_border; int *page_orderA; if(ps->modelname == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, failed to read modelname from template file."); do_border = (!esl_opt_GetBoolean(go, "--mask-a")); do_circle_mask = do_square_mask = do_x_mask = FALSE; if(esl_opt_GetBoolean(go, "--mask-u")) { do_square_mask = TRUE; } else if(esl_opt_GetBoolean(go, "--mask-x")) { do_x_mask = TRUE; } else do_circle_mask = TRUE; if(ps->npage == 0) ESL_FAIL(eslEINCOMPAT, errbuf, "draw_sspostscript, ps->npage == 0\n"); /* determine print order of pages, currently this is just 0..npage-1 */ ESL_ALLOC(page_orderA, sizeof(int) * ps->npage); for(pi = 0; pi < ps->npage; pi++) page_orderA[pi] = pi; /* define procedures */ fprintf(fp, "%% ------------------------------------------------------------\n"); fprintf(fp, "%% Procedure definitions\n"); define_outline_procedure(fp); fprintf(fp, "%% ------------------------------------------------------------\n"); /* draw the pages */ for(pi = 0; pi < ps->npage; pi++) { p = page_orderA[pi]; ps->cur_legy = ps->legy; /* print postscript comment header, only visible if viewed in text mode */ fprintf(fp, "%% ------------------------------------------------------------\n"); fprintf(fp, "%% Postscript file created by esl-ssdraw (page %d of %d)\n", pi+1, ps->npage); fprintf(fp, "%% ------------------------------------------------------------\n"); fprintf(fp, "%% msafile: %s (%d seqs)\n", esl_opt_GetArg(go, 1), ps->msa_nseq); fprintf(fp, "%% templatefile: %s\n", esl_opt_GetArg(go, 2)); fprintf(fp, "%% modelname: %s\n", ps->modelname); fprintf(fp, "%% consensus-len: %d\n", ps->rflen); if(esl_opt_IsOn(go, "--mask")) { fprintf(fp, "%% maskfile: %s\n", esl_opt_GetString(go, "--mask")); } if(esl_opt_IsOn(go, "--mask-diff")) { fprintf(fp, "%% difffile: %s\n", esl_opt_GetString(go, "--mask-diff")); } if(esl_opt_IsOn(go, "--dfile")) { fprintf(fp, "%% dfile: %s\n", esl_opt_GetString(go, "--dfile")); } if(esl_opt_IsOn(go, "--efile")) { fprintf(fp, "%% efile: %s\n", esl_opt_GetString(go, "--efile")); } if(esl_opt_IsOn(go, "--ifile")) { fprintf(fp, "%% ifile: %s\n", esl_opt_GetString(go, "--ifile")); } fprintf(fp, "%%\n"); /* scale section */ fprintf(fp, "%.2f %.2f scale\n\n", ps->scale, ps->scale); /* header section */ if((status = draw_header_and_footer(fp, go, errbuf, ps, p, pi+1)) != eslOK) return status; /* regurgitated section */ if(ps->regurgA != NULL) { fprintf(fp, "%% begin regurgitate\n"); for(i = 0; i < ps->nregurg; i++) fprintf(fp, "%s", ps->regurgA[i]); fprintf(fp, "%% end regurgitate\n\n"); } /* 'text positiontext' section */ for(i = 0; i < ps->nposntext; i++) { if(i == 0) { fprintf(fp, "%% begin text positiontext\n"); fprintf(fp, "/%s findfont %.2f scalefont setfont\n", POSNTEXT_FONT, POSNTEXT_FONTSIZE); fprintf(fp, "0.00 0.00 0.00 1.00 setcmykcolor\n"); /* black */ } fprintf(fp, "%s %.2f %.2f moveto show\n", ps->posntextA[i], ps->posntextxA[i], ps->posntextyA[i]); if(i == (ps->nposntext-1)) { fprintf(fp, "%% end text positiontext\n\n"); } } /* 'lines bpconnects' section */ for(i = 0; i < ps->nbp; i++) { if(i == 0) { fprintf(fp, "%% begin lines bpconnects\n"); fprintf(fp, "%.2f setlinewidth\n", BP_LINEWIDTH); fprintf(fp, "0.00 0.00 0.00 1.00 setcmykcolor\n"); /* black */ } fprintf(fp, "%.2f %.2f %.2f %.2f newpath moveto lineto stroke\n", ps->bpx1A[i], ps->bpy1A[i], ps->bpx2A[i], ps->bpy2A[i]); if(i == (ps->nbp-1)) { fprintf(fp, "%% end lines bpconnects\n\n"); } } /* print out remainder of the page */ /* fprintf(fp, "%% begin ignore\n"); */ fprintf(fp, "0.00 0.00 0.00 1.00 setcmykcolor\n"); /* set to black */ fprintf(fp, "/%s findfont %f scalefont setfont\n\n", LEG_FONT, LEG_FONTSIZE_UNSCALED / ps->scale); /* draw legend headers, if we have a legend (only legend text doesn't require legend headers) */ if((ps->nocclA[p] > 0) || (ps->sclAA != NULL && ps->sclAA[p] != NULL)) { if(! (esl_opt_GetBoolean(go, "--no-leg"))) { if((status = draw_legend_column_headers(fp, ps, p, errbuf)) != eslOK) return status; } } /* print one cell color legends, if any */ if(ps->occlAAA != NULL && ps->occlAAA[p] != NULL) { for(l = 0; l < ps->nocclA[p]; l++) { if(! (esl_opt_GetBoolean(go, "--no-leg"))) { draw_onecell_colorlegend(fp, ps->occlAAA[p][l], ps, l, p); } } } /* print scheme color legends, if any */ if(ps->sclAA != NULL && ps->sclAA[p] != NULL) { if(! (esl_opt_GetBoolean(go, "--no-leg"))) { draw_scheme_colorlegend(go, fp, ps->sclAA[p], hc_scheme[ps->sclAA[p]->scheme], ps, p); } } /* print text legends, if any */ if(ps->tlAAA != NULL && ps->tlAAA[p] != NULL) { for(l = 0; l < ps->ntlA[p]; l++) { if(! (esl_opt_GetBoolean(go, "--no-leg"))) { draw_text_section_in_legend(fp, ps->tlAAA[p][l], ps, l, p); } } } if(ps->bcolAAA != NULL && ps->bcolAAA[p] != NULL) { fprintf(fp, "%% begin colored positions\n"); if(ps->mask != NULL && ps->modeA[p] != SIMPLEMASKMODE && ps->modeA[p] != INDIMODE) { fprintf(fp, "2.0 setlinewidth\n"); if(do_border && do_x_mask) { fprintf(fp, "1.0 setlinewidth\n"); } if(do_border && do_square_mask) { fprintf(fp, "2.0 setlinewidth\n"); } if(do_border && do_circle_mask) { fprintf(fp, "2.5 setlinewidth\n"); } for(c = 0; c < ps->rflen; c++) { fprintf(fp, "%snucleotide %d\n", "%", c+1); if(ps->mask[c] == '0') { draw_masked_block(fp, ps->rxA[c]-1., ps->ryA[c]-1., ps->bcolAAA[p][c], do_circle_mask, do_square_mask, do_x_mask, do_border, CELLSIZE); } else { /* cell is within mask, ps->mask[c] == '1' */ fprintf(fp, "newpath\n"); fprintf(fp, " %.2f %.2f moveto", ps->rxA[c] - (CELLSIZE * CELL_XOFFSET_FRACTION), ps->ryA[c] - (CELLSIZE * CELL_YOFFSET_FRACTION)); fprintf(fp, " 0 %d rlineto %d 0 rlineto 0 %d rlineto closepath\n", CELLSIZE_INT, CELLSIZE_INT, -1 * CELLSIZE_INT); fprintf(fp, " %.2f %.2f %.2f %.2f setcmykcolor\n", ps->bcolAAA[p][c][0], ps->bcolAAA[p][c][1], ps->bcolAAA[p][c][2], ps->bcolAAA[p][c][3]); fprintf(fp, " fill\n"); } } fprintf(fp, "1.00 setlinewidth\n"); } else { /* no mask, all cells are printed the same */ for(c = 0; c < ps->rflen; c++) { fprintf(fp, "%snucleotide %d\n", "%", c+1); fprintf(fp, "newpath\n"); fprintf(fp, " %.2f %.2f moveto", ps->rxA[c] - (CELLSIZE * CELL_XOFFSET_FRACTION), ps->ryA[c] - (CELLSIZE * CELL_YOFFSET_FRACTION)); fprintf(fp, " 0 %d rlineto %d 0 rlineto 0 %d rlineto closepath\n", CELLSIZE_INT, CELLSIZE_INT, -1 * CELLSIZE_INT); fprintf(fp, " %.2f %.2f %.2f %.2f setcmykcolor\n", ps->bcolAAA[p][c][0], ps->bcolAAA[p][c][1], ps->bcolAAA[p][c][2], ps->bcolAAA[p][c][3]); fprintf(fp, " fill\n"); } } /* back to black */ fprintf(fp, " 0.00 0.00 0.00 1.00 setcmykcolor\n"); fprintf(fp, "%% end colored positions\n\n"); } if(ps->rAA[p] != NULL) { fprintf(fp, "/%s findfont %f scalefont setfont\n", NUCLEOTIDES_FONT, NUCLEOTIDES_FONTSIZE); fprintf(fp, " 0.00 0.00 0.00 1.00 setcmykcolor\n"); /* reset color as black */ fprintf(fp, "%% begin text nucleotides\n"); if(ps->rcolAAA[p] != NULL) { for(c = 0; c < ps->rflen; c++) { fprintf(fp, " %.2f %.2f %.2f %.2f setcmykcolor ", ps->rcolAAA[p][c][0], ps->rcolAAA[p][c][1], ps->rcolAAA[p][c][2], ps->rcolAAA[p][c][3]); if(strchr(LOWERCASE_LOW_HANGING_CHARS, ps->rAA[p][c]) != NULL) { fprintf(fp, "(%c) %.2f %.2f moveto show", ps->rAA[p][c], ps->rxA[c], ps->ryA[c] + (CELLSIZE * NUCLEOTIDE_YOFFSET_FRACTION_LOWERCASE_LOW_HANGING_CHARS)); /* handle lowercase low hanging chars ("gjpqy") nucleotides special, so they're centered in the box! */ } else if(ps->rAA[p][c] != ' ') { fprintf(fp, "(%c) %.2f %.2f moveto show", ps->rAA[p][c], ps->rxA[c], ps->ryA[c]); } fprintf(fp, "\n"); } } else { /* ps->rcolAAA[p] is NULL */ for(c = 0; c < ps->rflen; c++) { if(strchr(LOWERCASE_LOW_HANGING_CHARS, ps->rAA[p][c]) != NULL) { fprintf(fp, "(%c) %.2f %.2f moveto show", ps->rAA[p][c], ps->rxA[c], ps->ryA[c] + (CELLSIZE * NUCLEOTIDE_YOFFSET_FRACTION_LOWERCASE_LOW_HANGING_CHARS)); /* handle lowercase low hanging chars ("gjpqy") nucleotides special, so they're centered in the box! */ } else if(ps->rAA[p][c] != ' ') { fprintf(fp, "(%c) %.2f %.2f moveto show", ps->rAA[p][c], ps->rxA[c], ps->ryA[c]); } fprintf(fp, "\n"); } } fprintf(fp, "%% end text nucleotides\n"); fprintf(fp, " 0.000 0.000 0.000 1.000 setcmykcolor\n"); /* reset color as black */ } if(ps->otypeAA != NULL && ps->otypeAA[p] != NULL) { fprintf(fp, "%% begin outlines\n"); for(c = 0; c < ps->rflen; c++) { if(ps->otypeAA[p][c] != OUTLINE_NONE_IDX) { /* push x and y and cellsize onto stack */ fprintf(fp, "%.2f %.2f %.2f", ps->rxA[c] - (CELLSIZE * CELL_XOFFSET_FRACTION), ps->ryA[c] - (CELLSIZE * CELL_YOFFSET_FRACTION), CELLSIZE); if(ps->otypeAA[p][c] == OUTLINE_MIN_IDX) { fprintf(fp, " %.2f %s\n", OUTLINE_LINEWIDTH_CELL_FRACTION_MIN * CELLSIZE, OUTLINE_PROCEDURE); } else if(ps->otypeAA[p][c] == OUTLINE_MAX_IDX) { fprintf(fp, " %.2f %s\n", OUTLINE_LINEWIDTH_CELL_FRACTION_MAX * CELLSIZE, OUTLINE_PROCEDURE); } } } fprintf(fp, "%% end outlines\n"); fprintf(fp, " 0.000 0.000 0.000 1.000 setcmykcolor\n"); /* reset color as black */ } /* 'lines positionsticks' section, drawn last so they're not buried beneath other objects */ for(i = 0; i < ps->nticks; i++) { if(i == 0) { fprintf(fp, "%% begin lines positionticks\n"); fprintf(fp, "%.2f setlinewidth\n", TICKS_LINEWIDTH); fprintf(fp, "0.00 0.00 0.00 1.00 setcmykcolor\n"); /* black */ } fprintf(fp, "%.2f %.2f %.2f %.2f newpath moveto lineto stroke\n", ps->ticksx1A[i], ps->ticksy1A[i], ps->ticksx2A[i], ps->ticksy2A[i]); if(i == (ps->nticks-1)) { fprintf(fp, "%% end lines positionticks\n\n"); } } fprintf(fp, "showpage\n\n"); /* fprintf(fp, "%% end ignore\n\n"); */ } free(page_orderA); return eslOK; ERROR: ESL_FAIL(eslEINVAL, errbuf, "draw_sspostscript() error, probably out of memory."); } /* parse_template_file * * Read secondary structure templates from a postscript * template file derived from the Gutell CRW website until * the one that corresponds to our alignment is found, * (defined as the first template structure that has the * same consensus length as the passed in ) * or we run out structure templates. This function * repeatedly calls parse_template() which actually parses * the templates. * * If we run out of structure templates of anything is * invalid in any of the templates in the file, we * return a non-eslOK status code to caller and fill * errbuf with the error message. * * Returns: eslOK on success. */ int parse_template_file(char *filename, const ESL_GETOPTS *go, char *errbuf, int msa_rflen, SSPostscript_t **ret_ps) { int status; ESL_FILEPARSER *efp; SSPostscript_t *ps; int found_match = FALSE; if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) esl_fatal("ERROR, failed to open template file %s in parse_template_file\n", filename); esl_fileparser_SetCommentChar(efp, '#'); status = eslOK; while((found_match == FALSE) && (status == eslOK)) { status = parse_template_page(efp, go, errbuf, &ps); if((status != eslOK) && (status != eslEOF)) { esl_fileparser_Close(efp); return status; } if(ps->rflen == msa_rflen) { found_match = TRUE; } else { free_sspostscript(ps); } } if(found_match == FALSE) { esl_fileparser_Close(efp); esl_fatal("ERROR, did not find template structure to match alignment consensus length of %d in:\n%s\n", msa_rflen, filename); } /* if we get here, we've found a match */ /* validate the template we just read */ if((status = validate_justread_sspostscript(ps, errbuf)) != eslOK) return status; esl_fileparser_Close(efp); *ret_ps = ps; return eslOK; } /* parse_template_page * * Read a single secondary structure template page for a * single CM from a postscript template file derived from the * Gutell CRW website. This function is called repeatedly * on the same file to read multiple structure templates. * The logic is to keep reading until we find one with the * same consensus length as our input alignment. * * The structure template is read in sections. * Each section begins with a line like this: * % begin * * list of valid tokens for : * modelname * legcoords * scale * regurgitate * ignore * lines * text * * if is lines or text, then is read, * valid tokens for if is 'text' * positiontext * nucleotides * * valid tokens for if is 'lines' * positionticks * bpconnects * * The 'regurgitate' lines are stored, but never changed. * The 'ignore' lines are not even stored. * All other lines are stored in data structures that * can be manipulated (though not all are at this point). * * If anything is invalid, we return a non-eslOK status code * to caller. * * Returns: eslOK on success. */ int parse_template_page(ESL_FILEPARSER *efp, const ESL_GETOPTS *go, char *errbuf, SSPostscript_t **ret_ps) { int status; char *tok; int toklen; SSPostscript_t *ps = NULL; int read_showpage = FALSE; int reached_eof = FALSE; /* Create the postscript object */ ps = create_sspostscript(go); while ((read_showpage == FALSE) && ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK)) { if(strcmp(tok, "%") == 0) { if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK) { if(strcmp(tok, "begin") == 0) { if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK) { if(strcmp(tok, "modelname") == 0) { if((status = parse_modelname_section(efp, errbuf, ps)) != eslOK) return status; } else if(strcmp(tok, "legend") == 0) { /*printf("parsing legend\n");*/ if((status = parse_legend_section(efp, errbuf, ps)) != eslOK) return status; } else if(strcmp(tok, "scale") == 0) { /*printf("parsing scale\n");*/ if((status = parse_scale_section(efp, errbuf, ps)) != eslOK) return status; } else if(strcmp(tok, "ignore") == 0) { /*printf("parsing ignore\n");*/ if((status = parse_ignore_section(efp, errbuf, &read_showpage)) != eslOK) return status; } else if(strcmp(tok, "regurgitate") == 0) { /*printf("parsing regurgitate\n");*/ if((status = parse_regurgitate_section(efp, errbuf, ps)) != eslOK) return status; } else if(strcmp(tok, "text") == 0) { /*printf("parsing text\n");*/ if((status = parse_text_section(efp, errbuf, ps)) != eslOK) return status; } else if(strcmp(tok, "lines") == 0) { /*printf("parsing lines\n");*/ if((status = parse_lines_section(efp, errbuf, ps)) != eslOK) return status; } else { ESL_FAIL(eslEINVAL, errbuf, "parse_template_page(), error, unknown section type %s.", tok); } } else { ESL_FAIL(eslEINVAL, errbuf, "parse_template_page(), error last read line number %d.", efp->linenumber); } } else { ESL_FAIL(eslEINVAL, errbuf, "parse_template_page(), expected line beginning with %%%% begin, but read tok: %s instead of begin, last read line number %d.", tok, efp->linenumber); } } else { ESL_FAIL(eslEINVAL, errbuf, "parse_template_page(), ran out of tokens early, error last read line number %d.", efp->linenumber); } } else { ESL_FAIL(eslEINVAL, errbuf, "parse_template_page(), expected line beginning with %%%%, read tok: %s, last read line number %d.", tok, efp->linenumber); } } if(read_showpage == FALSE && status != eslEOF) { ESL_FAIL(status, errbuf, "parse_template_page(), error, ran out of tokens, but not at end of file?, last read line number %d.", efp->linenumber); } if(status == eslEOF) reached_eof = TRUE; *ret_ps = ps; if(reached_eof) return eslEOF; else return eslOK; } /* parse_modelname_section * * Parse the modelname section of a template postscript file. * If anything is invalid, we return a non-eslOK status code * to caller. * * Returns: eslOK on success. */ int parse_modelname_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps) { int status; char *tok; int toklen; char *curstr = NULL; int curlen = 0; int ntok = 0; /* this section should be exactly 3 lines, one of which we've already read, * here's an example, next token should be the first 0.65 * % begin modelname * % archaea * % end scale */ if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing modelname section, reading token 1 of 3"); if (strcmp(tok, "%") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing modelname section, middle line token 1 should be a percent sign but it's %s", tok); /* read remainder of line, this is the model name */ while ((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) == eslOK) { if(ntok > 0) { if((status = esl_strcat(&curstr, curlen, " ", 1)) != eslOK) ESL_FAIL(status, errbuf, "parse_modelname_section(), error parsing model name."); curlen += 1; } if((status = esl_strcat(&curstr, curlen, tok, toklen)) != eslOK) ESL_FAIL(status, errbuf, "parse_modelname_section(), error parsing model name."); curlen += toklen; ntok++; } ESL_ALLOC(ps->modelname, sizeof(char) * (curlen+1)); strcpy(ps->modelname, curstr); /* next line should be '% end modelname' */ if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing modelname section, reading end line token 1 of 3"); if (strcmp(tok, "%") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing modelname section, end line token 1 of 3 should be a percent sign but it's %s", tok); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing modelname section, reading end line token 2 of 3"); if (strcmp(tok, "end") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing modelname section, end line token 2 of 3 should be 'end' but it's %s", tok); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing modelname section, reading end line token 3 of 3"); if (strcmp(tok, "modelname") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing modelname section, end line token 3 of 3 should be 'modelname' but it's %s", tok); if(curstr != NULL) free(curstr); return eslOK; ERROR: ESL_FAIL(status, errbuf, "Error, parsing modelname section, memory error?"); } /* parse_legend_section * * Parse the legend (legend coordinates) section of a template postscript file. * If anything is invalid, we return a non-eslOK status code * to caller. * * Returns: eslOK on success. */ int parse_legend_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps) { int status; char *tok; int toklen; /* this section should be exactly 3 lines, one of which we've already read, * five tokens of the middle line are * this tells us to put the top-left corner of the legend at * ps->legx[rfpos] + x_offset, ps->legy[rfpos] + y_offset, * and have the RHS of the buffer end points before the RHS of the page * cellsize is the size of the cells in the legend * here's an example, first token we'll read should be '%', followed by '1508' * % begin legend * % 1508 24. -24. 12 0. * % end legend */ if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading token 1 of 6"); if (strcmp(tok, "%") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing legend section, middle line token 1 should be a percent sign but it's %s", tok); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading token 2 of 6"); ps->leg_posn = atoi(tok); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading token 3 of 6"); ps->legx_offset = atof(tok); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading token 4 of 6"); ps->legy_offset = atof(tok); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading token 5 of 6"); ps->leg_cellsize = atoi(tok); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading token 6 of 6"); ps->leg_rhs_space = atof(tok); /* read '% end legend' line */ if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading token 3 of 3"); if (strcmp(tok, "%") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing legend section, end line token 1 of 3 should be a percent sign but it's %s", tok); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading end line token 2 of 3"); if (strcmp(tok, "end") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing legend section, end line token 2 of 3 should be 'end' but it's %s", tok); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing legend section, reading end line token 3 of 3"); if (strcmp(tok, "legend") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing legend section, end line token 3 of 3 should be 'legend' but it's %s", tok); return eslOK; } /* parse_scale_section * * Parse the scale section of a template postscript file. * If anything is invalid, we return a non-eslOK status code * to caller. * * Returns: eslOK on success. */ int parse_scale_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps) { int status; char *tok; int toklen; /* this section should be exactly 3 lines, one of which we've already read, * here's an example, next token should be the first 0.65 * % begin scale * 0.65 0.65 scale * % end scale */ if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing scale section, reading token 1 of 3"); ps->scale = atof(tok); if(ps->scale < 0.) ESL_FAIL(status, errbuf, "Error, parsing scale section, scale must be positive real number, read %s\n", tok); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing scale section, reading token 2 of 3"); if(esl_FCompare(ps->scale, atof(tok), eslSMALLX1) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing scale section, x and y scales are not equal %.2f != %.2f", ps->scale, atof(tok)); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing scale section, reading token 3 of 3"); if (strcmp(tok, "scale") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing scale section, token 3 of 3 should be 'scale' but it's %s", tok); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing scale section, reading end line token 1 of 3"); if (strcmp(tok, "%") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing scale section, end line token 1 of 3 should be a percent sign but it's %s", tok); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing scale section, reading end line token 2 of 3"); if (strcmp(tok, "end") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing scale section, end line token 2 of 3 should be 'end' but it's %s", tok); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing scale section, reading end line token 3 of 3"); if (strcmp(tok, "scale") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing scale section, end line token 3 of 3 should be 'scale' but it's %s", tok); return eslOK; } /* parse_ignore_section * * Parse an ignore section of a template postscript file. * We ignore this data. This function's purpose is to read * tokens until we see the "% end ignore" line signalling * the end of the ignore section. * * As a special case, if any line iss a single token, 'showpage', we * set *ret_read_showpage as TRUE upon return. This signals to caller * that the current page is finished. * * Returns: eslOK on success. */ int parse_ignore_section(ESL_FILEPARSER *efp, char *errbuf, int *ret_read_showpage) { int status; char *tok; int keep_reading = TRUE; int read_showpage = FALSE; while((keep_reading) && (status = esl_fileparser_NextLine(efp) == eslOK)) { /* we're going to keep reading until we've read the line that is '% end ignore', 3 tokens, '%', then 'end', then 'ignore' */ if(((status = esl_fileparser_GetToken(efp, &tok, NULL)) == eslOK) && (strcmp(tok, "%") == 0)) { /* first token is '%' */ if(((status = esl_fileparser_GetToken(efp, &tok, NULL)) == eslOK) && (strcmp(tok, "end") == 0)) { /* second token is 'end' */ if(((status = esl_fileparser_GetToken(efp, &tok, NULL)) == eslOK) && (strcmp(tok, "ignore") == 0)) { /* final token is 'end' */ keep_reading = FALSE; status = eslOK; } } } else if(strcmp(tok, "showpage") == 0) { /* first token is 'showpage' */ read_showpage = TRUE; } } if(status == eslEOF) ESL_FAIL(status, errbuf, "Error, parsing ignore section, finished file looking for '%%%% end ignore' line"); if(status != eslOK) ESL_FAIL(status, errbuf, "Error, parsing ignore section, last line number read %d", efp->linenumber); *ret_read_showpage = read_showpage; return eslOK; } /* parse_regurgitate_section * * Parse a regurgitate section of a template postscript file. * If anything is invalid, we return a non-eslOK status code * to caller. * * Returns: eslOK on success. */ int parse_regurgitate_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps) { int status; char *tok; int toklen; int seen_end = FALSE; char *curstr = NULL; char *newstr; int nalloc = ps->nregurg; int curlen; void *tmp; int ntok = 0; while (((status = esl_fileparser_NextLine(efp)) == eslOK) && (!seen_end)) { curlen = ntok = 0; while ((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) == eslOK) { if (strcmp(tok, "%") == 0) { /* should be the end, make sure it's properly formatted */ if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing regurgitate section, read %%%% prefixed line without ' end regurgitate' after it"); if (strcmp(tok, "end") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing regurgitate section, read %%%% prefixed line without ' end regurgitate' after it"); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing regurgitate section, read %%%% prefixed line without ' end regurgitate' after it"); if (strcmp(tok, "regurgitate") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing regurgitate section, read %%%% prefixed line without ' end regurgitate' after it"); seen_end = TRUE; break; } else { if(ntok > 0) { if((status = esl_strcat(&curstr, curlen, " ", 1)) != eslOK) ESL_FAIL(status, errbuf, "parse_regurgitate_section(), error (2)."); curlen += 1; } if((status = esl_strcat(&curstr, curlen, tok, toklen)) != eslOK) ESL_FAIL(status, errbuf, "parse_regurgitate_section(), error (1)."); curlen += toklen; ntok++; } } if(seen_end) break; if((status = esl_strcat(&curstr, curlen, "\n", 1)) != eslOK) ESL_FAIL(status, errbuf, "parse_regurgitate_section(), error (3)."); curlen += 1; ESL_ALLOC(newstr, sizeof(char) * (curlen+1)); strcpy(newstr, curstr); if(ps->nregurg == nalloc) { nalloc += ps->nalloc; ESL_RALLOC(ps->regurgA, tmp, sizeof(char *) * nalloc); } ps->regurgA[ps->nregurg++] = newstr; free(curstr); curstr = NULL; } if(status == eslEOF) ESL_FAIL(status, errbuf, "Error, parsing regurgitate section, finished file looking for '%%%% end regurgitate' line"); if(status != eslOK) ESL_FAIL(status, errbuf, "Error, parsing regurgitate section, last line number read %d", efp->linenumber); return eslOK; ERROR: ESL_FAIL(status, errbuf, "Memory error parsing regurgitate section"); } /* parse_text_section * * Parse a text section of a template postscript file. * If anything is invalid, we return a non-eslOK status code * to caller. * * Returns: eslOK on success. */ int parse_text_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps) { int status; char *tok; int toklen; int seen_end = FALSE; int nalloc; void *tmp; int do_posntext = FALSE; int do_nucleotides = FALSE; int i; /* find out which section we're in, 'posntext' or 'nucleotides' */ if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing text section, last line %d\n", efp->linenumber); if (strcmp(tok, "positiontext") == 0) { do_posntext = TRUE; nalloc = ps->nposntext; } else if (strcmp(tok, "nucleotides") == 0) { do_nucleotides = TRUE; nalloc = ps->rflen; } /* Parse each line. example line: * (G) 168.00 392.00 moveto show */ while (((status = esl_fileparser_NextLine(efp)) == eslOK) && (!seen_end)) { if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing text section, each non-comment line should be 5-tokens ending with 'show'"); if (tok[0] == '%') { /* comment line, could be the end, check if it's '% end text {positiontext,nucleotides}', if not, ignore it */ if(strcmp(tok, "%") == 0) { /* first token is '%', keep checking */ if(((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK) && (strcmp(tok, "end") == 0)) { /* second token is 'end', keep checking */ if(((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK) && (strcmp(tok, "text") == 0)) { /* third token is 'end', keep checking */ if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK) { /* has a fourth token, keep checking */ if(do_posntext && strcmp(tok, "positiontext") == 0) seen_end = TRUE; if(do_nucleotides && strcmp(tok, "nucleotides") == 0) seen_end = TRUE; } } } } } else { /* we're reading a non-comment line, tok is the string, if do_posntext, we store it, else we discard it */ if(do_posntext) { if(ps->nposntext == nalloc) { ESL_RALLOC(ps->posntextA, tmp, sizeof(char *) * (nalloc + ps->nalloc)); ESL_RALLOC(ps->posntextxA, tmp, sizeof(float) * (nalloc + ps->nalloc)); ESL_RALLOC(ps->posntextyA, tmp, sizeof(float) * (nalloc + ps->nalloc)); for(i = nalloc; i < nalloc + ps->nalloc; i++) ps->posntextA[i] = NULL; nalloc += ps->nalloc; } if((status = esl_strdup(tok, -1, &(ps->posntextA[ps->nposntext]))) != eslOK) goto ERROR; } if(do_nucleotides && ps->rflen == nalloc) { ESL_RALLOC(ps->rxA, tmp, sizeof(float) * (nalloc + ps->nalloc)); ESL_RALLOC(ps->ryA, tmp, sizeof(float) * (nalloc + ps->nalloc)); nalloc += ps->nalloc; } /* get x */ if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing text section, each non-comment line should be 5 tokens ending with 'show'"); if(do_posntext) ps->posntextxA[ps->nposntext] = atof(tok); if(do_nucleotides) ps->rxA[ps->rflen] = atof(tok); /* get y */ if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing text section, each non-comment line should be 5 tokens ending with 'show'"); if(do_posntext) ps->posntextyA[ps->nposntext] = atof(tok); if(do_nucleotides) ps->ryA[ps->rflen] = atof(tok); /* verify moveto */ if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing text section, each non-comment line should be 5 tokens ending with 'show'"); if (strcmp(tok, "moveto") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing text main section, fourth token should be 'moveto', line %d", efp->linenumber); /* verify show */ if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing text section, each non-comment line should be 5 tokens ending with 'show'"); if (strcmp(tok, "show") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing text main section, fifth token should be 'show', line %d", efp->linenumber); if(do_posntext) ps->nposntext++; if(do_nucleotides) ps->rflen++; } } if(!seen_end) { if(do_posntext) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing text positiontext section, didn't see '%%%% end text positiontext' line: %d\n", efp->linenumber); if(do_nucleotides) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing text positiontext section, didn't see '%%%% end text nucleotides' line: %d\n", efp->linenumber); } if(status == eslEOF && do_posntext) ESL_FAIL(status, errbuf, "Error, parsing text section, finished file looking for '%%%% end text positiontext' line"); if(status == eslEOF && do_nucleotides) ESL_FAIL(status, errbuf, "Error, parsing text section, finished file looking for '%%%% end text nucleotides' line"); if(status != eslOK) ESL_FAIL(status, errbuf, "Error, parsing text section, last line number read %d", efp->linenumber); return eslOK; ERROR: ESL_FAIL(status, errbuf, "Memory error parsing text section"); } /* parse_lines_section * * Parse a lines section of a template postscript file. * If anything is invalid, we return a non-eslOK status code * to caller. * * Returns: eslOK on success. */ int parse_lines_section(ESL_FILEPARSER *efp, char *errbuf, SSPostscript_t *ps) { int status; char *tok; int toklen; int seen_end = FALSE; int nalloc; void *tmp; int do_ticks = FALSE; int do_bpconnects = FALSE; /* find out which section we're in, 'positionticks' or 'bpconnects' */ if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines section, last line %d\n", efp->linenumber); if (strcmp(tok, "positionticks") == 0) { do_ticks = TRUE; nalloc = ps->nticks; } else if (strcmp(tok, "bpconnects") == 0) { do_bpconnects = TRUE; nalloc = ps->nbp; } else ESL_FAIL(status, errbuf, "Error, parsing lines section unrecognized type: %s ('bpconnects' or 'positionticks' expected)\n", tok); /* Parse each line. example line: * 151.82 331.76 148.86 338.65 newpath moveto lineto stroke */ while (((status = esl_fileparser_NextLine(efp)) == eslOK) && (!seen_end)) { if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 5-tokens ending with 'show'"); if (strcmp(tok, "%") == 0) { /* should be the end, make sure it's properly formatted */ if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines section, read %%%% prefixed line without ' end lines' after it"); if (strcmp(tok, "end") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines section, read %%%% prefixed line without ' end lines' after it"); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines section, read %%%% prefixed line without ' end lines' after it"); if (strcmp(tok, "lines") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines section, read %%%% prefixed line without ' end lines' after it"); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines section, read %%%% prefixed line without ' end lines' after it"); if(do_ticks) { if (strcmp(tok, "positionticks") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines section, read %%%% prefixed line without ' end lines positionticks' after it"); } if(do_bpconnects) { if (strcmp(tok, "bpconnects") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines section, read %%%% prefixed line without ' end lines bpconnects' after it"); } seen_end = TRUE; break; } /* if we get here, we haven't seen the end, we're reading a normal line, tok is the first x coord, we record this */ /* first we expand our arrays if nec */ if(do_ticks && ps->nticks == nalloc) { nalloc += ps->nalloc; ESL_RALLOC(ps->ticksx1A, tmp, sizeof(float) * nalloc); ESL_RALLOC(ps->ticksy1A, tmp, sizeof(float) * nalloc); ESL_RALLOC(ps->ticksx2A, tmp, sizeof(float) * nalloc); ESL_RALLOC(ps->ticksy2A, tmp, sizeof(float) * nalloc); } if(do_bpconnects && ps->nbp == nalloc) { nalloc += ps->nalloc; ESL_RALLOC(ps->bpx1A, tmp, sizeof(float) * nalloc); ESL_RALLOC(ps->bpy1A, tmp, sizeof(float) * nalloc); ESL_RALLOC(ps->bpx2A, tmp, sizeof(float) * nalloc); ESL_RALLOC(ps->bpy2A, tmp, sizeof(float) * nalloc); } /* store x1 */ if(do_ticks) ps->ticksx1A[ps->nticks] = atof(tok); if(do_bpconnects) ps->bpx1A[ps->nbp] = atof(tok); /* get y1 */ if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 8-tokens ending with 'stroke'"); if(do_ticks) ps->ticksy1A[ps->nticks] = atof(tok); if(do_bpconnects) ps->bpy1A[ps->nbp] = atof(tok); /* get x2 */ if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 8-tokens ending with 'stroke'"); if(do_ticks) ps->ticksx2A[ps->nticks] = atof(tok); if(do_bpconnects) ps->bpx2A[ps->nbp] = atof(tok); /* get y2 */ if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 8-tokens ending with 'stroke'"); if(do_ticks) ps->ticksy2A[ps->nticks] = atof(tok); if(do_bpconnects) ps->bpy2A[ps->nbp] = atof(tok); /* verify newpath */ if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 8-tokens ending with 'stroke'"); if (strcmp(tok, "newpath") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines main section, fifth token should be 'newpath', line %d", efp->linenumber); /* verify moveto */ if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 8-tokens ending with 'stroke'"); if (strcmp(tok, "moveto") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines main section, sixth token should be 'moveto', line %d", efp->linenumber); /* verify lineto */ if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 8-tokens ending with 'stroke'"); if (strcmp(tok, "lineto") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines main section, seventh token should be 'lineto', line %d", efp->linenumber); /* verify stroke */ if((status = esl_fileparser_GetTokenOnLine(efp, &tok, &toklen)) != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines main section should include 8-tokens ending with 'stroke'"); if (strcmp(tok, "stroke") != 0) ESL_FAIL(eslEINVAL, errbuf, "Error, parsing lines main section, eigth token should be 'stroke', line %d", efp->linenumber); if(do_ticks) ps->nticks++; if(do_bpconnects) ps->nbp++; } if(!seen_end) ESL_FAIL(status, errbuf, "Error, parsing lines section, didn't see end! line: %d\n", efp->linenumber); if(status == eslEOF && do_ticks) ESL_FAIL(status, errbuf, "Error, parsing lines section, finished file looking for '%%%% end lines positionticks' line"); if(status == eslEOF && do_bpconnects) ESL_FAIL(status, errbuf, "Error, parsing lines section, finished file looking for '%%%% end lines bpconnects' line"); if(status != eslOK) ESL_FAIL(status, errbuf, "Error, parsing lines section, last line number read %d", efp->linenumber); return eslOK; ERROR: ESL_FAIL(status, errbuf, "Memory error parsing lines section"); } /* Function: individuals_sspostscript() * * Purpose: Fill a postscript data structure with info for individual seqs and * possibly their posteriors in the MSA. * Return: eslOK on success. * * per_seq_ins_ct - [0..i..msa->nseq-1][0..rfpos..rflen] number of inserts * insert after each nongap RF position per sequence. * If rfpos == 0: # inserts BEFORE first position. * If rfpos == n: # inserts after position rfpos n * This is off-by-one with respect to msa->rf for example, * msa->rf[n] is the 'n-1'th nucleotide of the RF annotation. */ static int individuals_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **abc_ct, ESL_MSA *msa, int **per_seq_ins_ct, int do_prob, int do_rescol, float ***hc_scheme, int hc_scheme_idx_s, int hc_scheme_idx_p, int hc_nbins_s, int hc_nbins_p, float **hc_onecell, int extdel_idx_s, int wcbp_idx_s, int gubp_idx_s, int ncbp_idx_s, int dgbp_idx_s, int hgbp_idx_s, int gap_idx_p, FILE *tabfp) { int status; int p, i, pp, ai; int rfpos, apos, lpos, rpos, lrfpos, rrfpos; int orig_npage = ps->npage; int new_npage; /* variables for the sequence pages */ int nextdel_s = 0; /* number of external deletes (3' and 5' flush deletes) */ int nwc_s = 0; /* number of Watson/Crick (A:U,U:A,C:G,G:C) basepairs */ int ngu_s = 0; /* number of G:U,U:G basepairs (2 * num G-U,U-G bps) */ int nnc_s = 0; /* number of non-canonical basepairs (A:A,A:C,A:G,C:A,C:C,C:U,G:A,G:G,U:C,U:U) */ int ndgi_s = 0; /* number of internal double-gap basepairs */ int nhgi_s = 0; /* number of internal half-gap basepairs */ int ndge_s = 0; /* number of external double-gap basepairs */ int nhge_s = 0; /* number of external half-gap basepairs */ float *limits_s; /* [nbins+1] limits for each bin, limits[0] is min value we would expect to see, limits[nbins] is max */ int nins_s; /* number of inserts after the current rfpos for current sequence */ int spos, epos; /* first/final nongap position for cur sequence */ int apos_is_internal; /* is apos within spos..epos?, if not it's an external deletion */ int lpos_is_internal; /* is lpos within spos..epos?, if not it's an external deletion */ int rpos_is_internal; /* is rpos within spos..epos?, if not it's an external deletion */ int namewidth; /* length in chars of longest seq name we'll print */ char *namedashes = NULL; int ni; double cur_cfreq; int noutline_min = 0; /* number of positions with minimal outline */ int noutline_max = 0; /* number of positions with maximal outline */ int noutline_bp_good = 0; /* number of WC/GU basepairs that have left and/or right half outlined, consensus is WC/GU */ int noutline_bp_bad = 0; /* number of NC basepairs that have left and/or right half outlined, consensus is WC/GU */ int maj_bp_is_wc_or_gu; /* TRUE if current consensus bp is a watson-crick of GU in majority consensus sequence */ float *stack; /* postscript stack for outline procedure */ /* variables for the postprob pages */ int ngap_p = 0; int ngap_masked_p = 0; float *limits_p; int within_mask; float ppavgA[11]; int ppidx; int do_prob_res = FALSE; /* set to TRUE if --no-ntpp is NOT enabled */ int do_outline = FALSE; /* set to TRUE if --no-nt is NOT enabled */ int noccl; /* number of one-cell color legends depends on value of do_prob_res and do_ouline */ /* contract check */ if(do_prob) { if(msa->pp == NULL) ESL_FAIL(eslEINVAL, errbuf, "internal error, individuals_sspostscript() do_prob == TRUE, msa->pp == FALSE"); for(i = 0; i < msa->nseq; i++) { if(msa->pp[i] == NULL) ESL_FAIL(eslEINVAL, errbuf, "with --indi, either all or none of the selected sequences must have PP annotation, seq %d does not", i); } do_prob_res = (! esl_opt_GetBoolean(go, "--no-ntpp")); } do_outline = (! esl_opt_GetBoolean(go, "--no-ol")); /* PP values, hard coded */ ppavgA[0] = 0.025; ppavgA[1] = 0.10; ppavgA[2] = 0.20; ppavgA[3] = 0.30; ppavgA[4] = 0.40; ppavgA[5] = 0.50; ppavgA[6] = 0.60; ppavgA[7] = 0.70; ppavgA[8] = 0.80; ppavgA[9] = 0.90; ppavgA[10] = 0.975; if(ps->mask == NULL) { ngap_masked_p = -1; } /* special flag */ /* determine number of pages we'll add */ new_npage = do_prob ? msa->nseq*2 : msa->nseq; if((status = add_pages_sspostscript(ps, new_npage, INDIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object."); /* add the pages carefully, we allocate posterior pages and seq pages differently */ for(p = orig_npage; p < ps->npage; p++) { /* allocate seq page */ ESL_ALLOC(ps->rAA[p], sizeof(char) * (ps->rflen+1)); if(do_rescol) ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen); if(do_outline) { ESL_ALLOC(ps->otypeAA[p], sizeof(char) * ps->rflen); for(rfpos = 0; rfpos < ps->rflen; rfpos++) ps->otypeAA[p][rfpos] = OUTLINE_NONE_IDX; } ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->sclAA[p], sizeof(SchemeColorLegend_t *) * 1); noccl = 2; if (do_rescol) noccl += 5; if (do_outline) noccl += 7; ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t **) * noccl); for(rfpos = 0; rfpos < ps->rflen; rfpos++) { if(do_rescol) ESL_ALLOC(ps->rcolAAA[p][rfpos], sizeof(float) * NCMYK); /* CMYK colors */ ESL_ALLOC(ps->bcolAAA[p][rfpos], sizeof(float) * NCMYK); /* CMYK colors */ } if(do_prob) { /* allocate postprob page */ p++; ESL_ALLOC(ps->rAA[p], sizeof(char) * (ps->rflen+1)); ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->sclAA[p], sizeof(SchemeColorLegend_t *) * 1); ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t **) * 1); if(do_prob_res) ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen); for(rfpos = 0; rfpos < ps->rflen; rfpos++) { ESL_ALLOC(ps->bcolAAA[p][rfpos], sizeof(float) * NCMYK); /* CMYK colors */ if(do_prob_res) ESL_ALLOC(ps->rcolAAA[p][rfpos], sizeof(float) * NCMYK); /* CMYK colors */ } } } /* setup seq limits */ ESL_ALLOC(limits_s, sizeof(float) * (hc_nbins_s+1)); limits_s[0] = 0; limits_s[1] = 1; limits_s[2] = 2; limits_s[3] = 5; limits_s[4] = 10; limits_s[5] = SSDRAWINFINITY; /* setup pp limits */ ESL_ALLOC(limits_p, sizeof(float) * (hc_nbins_p+1)); limits_p[0] = 0.0; limits_p[1] = 0.35; limits_p[2] = 0.55; limits_p[3] = 0.75; limits_p[4] = 0.85; limits_p[5] = 0.95; limits_p[6] = 1.00; /* allocate the uaseqlenA data structure to store unaligned seq lengths */ if(ps->uaseqlenA != NULL) { free(ps->uaseqlenA); ps->uaseqlenA = NULL; } ESL_ALLOC(ps->uaseqlenA, sizeof(int) * msa->nseq); esl_vec_ISet(ps->uaseqlenA, msa->nseq, 0); if(tabfp != NULL) { /* determine max length of a name */ namewidth = 8; /* length of 'seq name' */ for(i = 0; i < msa->nseq; i++) { namewidth = ESL_MAX(namewidth, strlen(msa->sqname[i])); } ESL_ALLOC(namedashes, sizeof(char) * namewidth+1); namedashes[namewidth] = '\0'; for(ni = 0; ni < namewidth; ni++) namedashes[ni] = '-'; fprintf(tabfp, "# -----------------------\n"); fprintf(tabfp, "# Per-sequence statistics\n"); fprintf(tabfp, "# -----------------------\n"); fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each sequence\n", ps->rflen); fprintf(tabfp, "# printed to the output postscript file.\n"); fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", do_outline ? 15 : 11); fprintf(tabfp, "# \ttoken 1: 'perseq' (tag defining line type to ease parsing)\n"); fprintf(tabfp, "# \ttoken 2: sequence name\n"); fprintf(tabfp, "# \ttoken 3: spos: aligned position of first (5'-most) nongap nucleotide in sequence\n"); fprintf(tabfp, "# \ttoken 4: epos: aligned position of final (3'-most) nongap nucleotide in sequence\n"); fprintf(tabfp, "# \ttoken 5: number of Watson-Crick basepairs (A-U, C-G, G-C, or U-A) in the sequence\n"); fprintf(tabfp, "# \ttoken 6: number of G-U or U-G basepairs in the sequence\n"); fprintf(tabfp, "# \ttoken 7: number of non-canonical basepairs (A-A, A-C, A-G, C-A, C-C, C-U, G-A, G-G, U-C, U-U) in the sequence\n"); fprintf(tabfp, "# \ttoken 8: number of internal half-gap basepairs in the sequence\n"); fprintf(tabfp, "# \ttoken 9: number of internal double-gap basepairs in the sequence\n"); fprintf(tabfp, "# \ttoken 10: number of external half-gap basepairs in the sequence\n"); fprintf(tabfp, "# \ttoken 11: number of external double-gap basepairs in the sequence\n"); if(do_outline) { fprintf(tabfp, "# \ttoken 12: number of nt changes relative to majority rule consensus sequence\n"); fprintf(tabfp, "# \ttoken 13: subset of token 12 for which consensus nt occurs in > 0.75 of nongap sequences\n"); fprintf(tabfp, "# \ttoken 14: number of internal basepairs in seq that differ from majority rule consensus basepair\n"); fprintf(tabfp, "# \t *and* consensus bp is Watson-Crick, G-U or U-G\n"); fprintf(tabfp, "# \ttoken 15: subset of token 14 which are Watson-Crick, G-U or U-G in seq\n"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# Alignment length: %" PRId64 " (this is max possible value for tokens 3 and 4)\n", msa->alen); fprintf(tabfp, "# Number of consensus basepairs: %d (this is max possible value for tokens 5-11)\n", ps->nbp); fprintf(tabfp, "# A basepair between positions i and j for sequence s is a half-gap basepair if s has\n"); fprintf(tabfp, "# a gap at either position i or j, but not both. It is a double-gap basepair if it has\n"); fprintf(tabfp, "# a gap at both positions i and j.\n"); fprintf(tabfp, "# A basepair between i:j is 'internal' for sequence s if if spos <= i and epos >= j.\n"); fprintf(tabfp, "# Otherwise, basepair i:j is 'external' for sequence s.\n"); fprintf(tabfp, "# All basepairs that are nongaps in both i and j are necessarily internal.\n"); fprintf(tabfp, "#\n"); fprintf(tabfp, "# %6s %-*s %4s %4s %4s %4s %4s %4s %4s %4s %4s", "type", namewidth, "seq name", "spos", "epos", "nwc", "ngu", "nnc", "nhgi", "ndgi", "nhge", "ndge"); if(do_outline) { fprintf(tabfp, " %4s %4s %5s %5s", "ndf", "nrdf", "nbpdf", "nbpcp"); } fprintf(tabfp, "\n"); fprintf(tabfp, "# %6s %-*s %4s %4s %4s %4s %4s %4s %4s %4s %4s", "------", namewidth, namedashes, "----", "----", "----", "----", "----", "----", "----", "----", "----"); if(do_outline) { fprintf(tabfp, " %4s %4s %5s %5s", "----", "----", "-----", "-----"); } fprintf(tabfp, "\n"); } /* Step through each seq, first fill seq page, then possibly postprob page */ ai = 0; pp = orig_npage-1; for(i = 0; i < msa->nseq; i++) { /************************** * Draw the sequence page * **************************/ pp++; spos = epos = -1; /* determine first and final non-gap position */ for(apos = 0; apos < msa->alen; apos++) { /* find first non-gap RF position */ if((! esl_abc_CIsGap(abc, msa->aseq[i][apos]))) { spos = apos; break; } } for(apos = msa->alen-1; apos >= 0; apos--) { if((! esl_abc_CIsGap(abc, msa->aseq[i][apos]))) { epos = apos; break; } } ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx_s, hc_nbins_s, limits_s, TRUE, TRUE, TRUE, FALSE); /* init one cell legend counters */ nextdel_s = nwc_s = ngu_s = nnc_s = ndgi_s = nhgi_s = ndge_s = nhge_s = noutline_min = noutline_max = noutline_bp_good = noutline_bp_bad = 0; ai++; for(rfpos = 0; rfpos < ps->rflen; rfpos++) { apos = ps->msa_rf2a_map[rfpos]; nins_s = per_seq_ins_ct[i][rfpos+1]; apos_is_internal = TRUE; /* set to FALSE below if apos < spos || apos > epos */ if(! esl_abc_CIsGap(abc, msa->aseq[i][apos])) ps->uaseqlenA[i]++; ps->uaseqlenA[i] += nins_s; ps->rAA[pp][rfpos] = msa->aseq[i][apos]; if(do_outline) { if((! esl_abc_CIsGap(abc, msa->aseq[i][apos])) && /* aseq is not a gap at this posn */ (esl_abc_CIsCanonical(abc, ps->msa_cseq_maj[rfpos])) && /* cseq is canonical at this posn */ (toupper(msa->aseq[i][apos]) != toupper(ps->msa_cseq_maj[rfpos]))) { /* aseq != cseq at this posn */ cur_cfreq = abc_ct[apos][esl_abc_DigitizeSymbol(abc, toupper(ps->msa_cseq_maj[rfpos]))] / esl_vec_DSum(abc_ct[apos], abc->K); if(cur_cfreq > 0.75) { ps->otypeAA[pp][rfpos] = OUTLINE_MAX_IDX; noutline_max++; } else { ps->otypeAA[pp][rfpos] = OUTLINE_MIN_IDX; noutline_min++; } } } /* printf("ps->rAA[%3d][%4d]: %c\n", pp, rfpos, ps->rAA[pp][rfpos]); */ if((spos != -1 && epos != -1) && /* this should always be true, unless seq has length 0! */ (apos < spos || apos > epos)) { if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[extdel_idx_s])) != eslOK) return status; nextdel_s++; apos_is_internal = FALSE; } else { /* color insert value */ if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx_s], nins_s, ps->sclAA[pp], TRUE, NULL)) != eslOK) return status; } if(do_rescol || tabfp != NULL) { if(ps->msa_ct[(rfpos+1)] == 0) { if(do_rescol) { /* single-stranded nucleotide or gap, draw same color as Watson-Cricks */ if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[wcbp_idx_s])) != eslOK) return status; } } else { /* consensus basepaired nucleotide */ lpos = apos; rpos = ps->msa_rf2a_map[ps->msa_ct[rfpos+1]-1]; lrfpos = rfpos; rrfpos = ps->msa_ct[rfpos+1]-1; maj_bp_is_wc_or_gu = ((is_watson_crick_bp(ps->msa_cseq_maj[lrfpos], ps->msa_cseq_maj[rrfpos])) || (is_gu_or_ug_bp(ps->msa_cseq_maj[lrfpos], ps->msa_cseq_maj[rrfpos]))) ? TRUE : FALSE; lpos_is_internal = apos_is_internal; rpos_is_internal = TRUE; /* we set to FALSE below if nec */ if((spos != -1 && epos != -1) && /* this should always be true, unless seq has length 0! */ (rpos < spos || rpos > epos)) { rpos_is_internal = FALSE; } if(lpos_is_internal && rpos_is_internal) { /* BP is either Watson-Crick, G:U/U:G, non-canonical, internal double-gap bp or internal half-gap bp */ if(is_watson_crick_bp(msa->aseq[i][lpos], msa->aseq[i][rpos])) { /* watson-crick */ if(do_rescol) { if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[wcbp_idx_s])) != eslOK) return status; } if(lpos < rpos) nwc_s++; if(do_outline && (lpos > rpos) && maj_bp_is_wc_or_gu) { /* check if this seq has a different WC or GU bp than the majority consensus */ if((ps->otypeAA[pp][lrfpos] != OUTLINE_NONE_IDX) || (ps->otypeAA[pp][rrfpos] != OUTLINE_NONE_IDX)) { noutline_bp_good++; } } } else if(is_gu_or_ug_bp(msa->aseq[i][lpos], msa->aseq[i][rpos])) { /* G:U or U:G */ if(do_rescol) { if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[gubp_idx_s])) != eslOK) return status; } if(lpos < rpos) ngu_s++; if(do_outline && (lpos > rpos) && maj_bp_is_wc_or_gu) { if((ps->otypeAA[pp][lrfpos] != OUTLINE_NONE_IDX) || (ps->otypeAA[pp][rrfpos] != OUTLINE_NONE_IDX)) { noutline_bp_good++; } } } else if ((! esl_abc_CIsResidue(abc, msa->aseq[i][lpos])) && (! esl_abc_CIsResidue(abc, msa->aseq[i][rpos]))) { /* internal double-gap basepair */ if(do_rescol) { if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[dgbp_idx_s])) != eslOK) return status; } if(lpos < rpos) ndgi_s++; if(do_outline && (lpos > rpos) && maj_bp_is_wc_or_gu) { if((ps->otypeAA[pp][lrfpos] != OUTLINE_NONE_IDX) || (ps->otypeAA[pp][rrfpos] != OUTLINE_NONE_IDX)) { noutline_bp_bad++; } } } else if ((! esl_abc_CIsResidue(abc, msa->aseq[i][lpos])) || (! esl_abc_CIsResidue(abc, msa->aseq[i][rpos]))) { /* internal half-gap basepair */ if(do_rescol) { if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[hgbp_idx_s])) != eslOK) return status; } if(lpos < rpos) nhgi_s++; if(do_outline && (lpos > rpos) && maj_bp_is_wc_or_gu) { if((ps->otypeAA[pp][lrfpos] != OUTLINE_NONE_IDX) || (ps->otypeAA[pp][rrfpos] != OUTLINE_NONE_IDX)) { noutline_bp_bad++; } } } else { /* non-canonical */ if(do_rescol) { if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[ncbp_idx_s])) != eslOK) return status; } if(lpos < rpos) nnc_s++; if(do_outline && (lpos > rpos) && maj_bp_is_wc_or_gu) { if((ps->otypeAA[pp][lrfpos] != OUTLINE_NONE_IDX) || (ps->otypeAA[pp][rrfpos] != OUTLINE_NONE_IDX)) { noutline_bp_bad++; } } } } /* end of (if(lpos_is_internal && rpos_is_internal)) */ else { /* we'll draw this nucleotide as black */ if ((! esl_abc_CIsResidue(abc, msa->aseq[i][lpos])) && (! esl_abc_CIsResidue(abc, msa->aseq[i][rpos]))) { /* external double-gap basepair */ ndge_s++; } if ((! esl_abc_CIsResidue(abc, msa->aseq[i][lpos])) || (! esl_abc_CIsResidue(abc, msa->aseq[i][rpos]))) { /* external half-gap basepair */ nhge_s++; } if(do_rescol) { if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[BLACKOC])) != eslOK) return status; } } } } } ps->rAA[pp][ps->rflen] = '\0'; ps->seqidxA[pp] = i; ps->nocclA[pp] = 0; if(tabfp != NULL) { fprintf(tabfp, " perseq %-*s %4d %4d %4d %4d %4d %4d %4d %4d %4d", namewidth, msa->sqname[i], spos+1, epos+1, nwc_s, ngu_s, nnc_s, nhgi_s, ndgi_s, nhge_s, ndge_s); if(do_outline) { fprintf(tabfp, " %4d %4d %5d %5d", noutline_min + noutline_max, noutline_max, noutline_bp_good + noutline_bp_bad, noutline_bp_good); } fprintf(tabfp, "\n"); } /* if nec, add one-cell color legends for different bp types */ if(do_rescol) { /* add one-cell color legend for watson-crick basepairs */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[wcbp_idx_s], nwc_s, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "Watson-Crick basepair (WC bp)", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "C-G", errbuf)) != eslOK) return status; ps->nocclA[pp]++; /* add one-cell color legend for G-U, U-G basepairs */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[gubp_idx_s], ngu_s, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "G-U or U-G bp", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "G-U", errbuf)) != eslOK) return status; ps->nocclA[pp]++; /* add one-cell color legend for non-canonical basepairs */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[ncbp_idx_s], nnc_s, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "non-canonical bp", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "A-A", errbuf)) != eslOK) return status; ps->nocclA[pp]++; /* add one-cell color legend for internal half-gap basepairs */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[hgbp_idx_s], nhgi_s, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "internal half-gap bp", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "A--", errbuf)) != eslOK) return status; ps->nocclA[pp]++; /* add one-cell color legend for internal double-gap basepairs */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[dgbp_idx_s], ndgi_s, OCCL_BLANK_COUNT, TRUE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "internal double-gap bp", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "---", errbuf)) != eslOK) return status; ps->nocclA[pp]++; } /* if nec, add one page cell legend for the two outline types */ if(do_outline) { /* add a psuedo-one-cell color legends, the explanatory text for outlines: */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[BLACKOC], OCCL_BLANK_COUNT, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "Positions != to most common nt x:", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "", errbuf)) != eslOK) return status; ps->nocclA[pp]++; /* allocate our stack for the procedure */ ESL_ALLOC(stack, sizeof(float) * 2); stack[0] = ps->leg_cellsize; stack[1] = ps->leg_cellsize * OUTLINE_LINEWIDTH_CELL_FRACTION_MIN; /* add one-cell color legend for minimal outline */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[BLACKOC], noutline_min, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "!= x and freq(x) < 0.75", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_procedure_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], OUTLINE_PROCEDURE, stack, 2, errbuf)) != eslOK) return status; ps->nocclA[pp]++; stack[1] = ps->leg_cellsize * OUTLINE_LINEWIDTH_CELL_FRACTION_MAX; /* add one-cell color legend for maximal outline */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[BLACKOC], noutline_max, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "!= x and freq(x) >= 0.75", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_procedure_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], OUTLINE_PROCEDURE, stack, 2, errbuf)) != eslOK) return status; ps->nocclA[pp]++; /* add a psuedo-one-cell color legends, the explanatory text for outline basepairs: */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[BLACKOC], OCCL_BLANK_COUNT, OCCL_BLANK_COUNT, FALSE, TRUE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "Number of bps != most common bp a:b", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "", errbuf)) != eslOK) return status; ps->nocclA[pp]++; /* add a psuedo-one-cell color legends, the explanatory text for outline basepairs: */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[BLACKOC], OCCL_BLANK_COUNT, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "and a:b is Watson-Crick, GU or UG:", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "", errbuf)) != eslOK) return status; ps->nocclA[pp]++; ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[BLACKOC], noutline_bp_good, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], " Watson-Crick, GU or UG but != a:b", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "", errbuf)) != eslOK) return status; ps->nocclA[pp]++; ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[BLACKOC], noutline_bp_bad, OCCL_BLANK_COUNT, TRUE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], " non-canonical or w/gap and != a:b", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "", errbuf)) != eslOK) return status; ps->nocclA[pp]++; } /* add description to ps */ if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "# inserted nucleotides after each consensus position", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_page_desc_to_sspostscript(ps, pp, msa->sqname[i], errbuf)) != eslOK) return status; /* done with seq page */ /* add one-cell color legend for external gaps (deletes) */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[extdel_idx_s], nextdel_s, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "5'/3'-flush gaps", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->nocclA[pp]++; /*************************************** * Draw the posterior probability page * ***************************************/ if(do_prob) { /* contract checked that msa->pp[i] is non-NULL */ pp++; ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx_p, hc_nbins_p, limits_p, FALSE, TRUE, TRUE, FALSE); ngap_p = 0; ngap_masked_p = (ps->mask == NULL) ? -1 : 0; for(rfpos = 0; rfpos < ps->rflen; rfpos++) { apos = ps->msa_rf2a_map[rfpos]; if(do_prob_res) { ps->rAA[pp][rfpos] = msa->aseq[i][apos]; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } else { ps->rAA[pp][rfpos] = ' '; /* no need to add color to a ' ' */ } if(! esl_abc_CIsGap(abc, msa->aseq[i][apos])) { if((ppidx = get_pp_idx(abc, msa->pp[i][apos])) == -1) ESL_FAIL(eslEFORMAT, errbuf, "bad #=GR PP char: %c", msa->pp[i][apos]); if(ppidx == 11) ESL_FAIL(eslEFORMAT, errbuf, "nongap nucleotide: %c, annotated with gap #=GR PP char: %c", msa->aseq[i][apos], msa->pp[i][apos]); within_mask = (ps->mask != NULL && ps->mask[rfpos] == '1') ? TRUE : FALSE; if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx_p], ppavgA[ppidx], ps->sclAA[pp], within_mask, NULL)) != eslOK) return status; } else { if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[gap_idx_p])) != eslOK) return status; ngap_p++; if(ps->mask != NULL && ps->mask[rfpos] == '1') ngap_masked_p++; } } /* add one-cell color legend */ ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[gap_idx_p], ngap_p, ngap_masked_p, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "gap", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->nocclA[pp] = 1; if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "posterior probability \\(alignment confidence\\)", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->seqidxA[pp] = i; if((status = add_page_desc_to_sspostscript(ps, pp, msa->sqname[i], errbuf)) != eslOK) return status; ps->rAA[pp][ps->rflen] = '\0'; } } /* end of for(i = 0; i < msa->nseq; i++) */ free(limits_s); free(limits_p); return eslOK; ERROR: ESL_FAIL(status, errbuf, "individuals_sspostscript(): memory allocation error."); return status; /* NEVERREACHED */ } /* Function: cons_seq_sspostscript() * * Purpose: Fill a postscript data structure with 1 new page, the consensus sequence. * Return: eslOK on success. */ static int cons_seq_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, float **hc_onecell, int wcbp_idx_s, int gubp_idx_s, int ncbp_idx_s, int dgbp_idx_s, int hgbp_idx_s) { int status; int p, pp; int rfpos, lpos, rpos; int orig_npage = ps->npage; int nwc_s; /* number of watson-crick bps */ int ngu_s; /* number of GU/UG bps */ int nnc_s; /* number of noncanonical bps */ int ndgi_s = 0; /* number of internal double-gap basepairs */ int nhgi_s = 0; /* number of internal half-gap basepairs */ int spos, epos; /* first/final nongap position for consensus sequence */ int lpos_is_internal; /* is lpos within spos..epos?, if not it's an external deletion */ int rpos_is_internal; /* is rpos within spos..epos?, if not it's an external deletion */ int lpos_is_gap; /* is lpos a gap */ int rpos_is_gap; /* is rpos a gap */ nwc_s = ngu_s = nnc_s = ndgi_s = nhgi_s = 0; if((status = add_pages_sspostscript(ps, 1, INDIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object."); for(p = orig_npage; p < ps->npage; p++) { ESL_ALLOC(ps->rAA[p], sizeof(char) * ps->rflen); ESL_ALLOC(ps->tlAAA[p], sizeof(TextLegend_t **) * 1); } /* fill ps->rAA with nucleotides and gaps for RF sequence */ pp = orig_npage; for(rfpos = 0; rfpos < ps->rflen; rfpos++) { ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos]; } if((! esl_opt_GetBoolean(go, "--cambig")) && (! esl_opt_GetBoolean(go, "--no-bp"))) { spos = epos = -1; /* determine first and final non-gap position */ for(rfpos = 0; rfpos < ps->rflen; rfpos++) { /* find first non-gap RF position */ if(! esl_abc_CIsGap(ps->abc, ps->msa_cseq_maj[rfpos])) { spos = rfpos; break; } } for(rfpos = ps->rflen-1; rfpos >= 0; rfpos--) { if(! esl_abc_CIsGap(ps->abc, ps->msa_cseq_maj[rfpos])) { epos = rfpos; break; } } ESL_ALLOC(ps->rcolAAA[pp], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->occlAAA[pp], sizeof(OneCellColorLegend_t **) * 5); for(rfpos = 0; rfpos < ps->rflen; rfpos++) { ESL_ALLOC(ps->rcolAAA[pp][rfpos], sizeof(float) * NCMYK); /* CMYK colors */ if(ps->msa_ct[(rfpos+1)] == 0) { /* single stranded */ /* single-stranded nucleotide or gap, draw same color as Watson-Cricks */ if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[wcbp_idx_s])) != eslOK) return status; } else { /* basepair, either watson-crick, GU/UG, or non-canonical */ lpos = rfpos; rpos = ps->msa_ct[rfpos+1]-1; lpos_is_internal = ((lpos < spos) || (lpos > epos)) ? FALSE : TRUE; rpos_is_internal = ((rpos < spos) || (rpos > epos)) ? FALSE : TRUE; lpos_is_gap = esl_abc_CIsGap(ps->abc, ps->msa_cseq_maj[lpos]) ? TRUE : FALSE; rpos_is_gap = esl_abc_CIsGap(ps->abc, ps->msa_cseq_maj[rpos]) ? TRUE : FALSE; if(lpos_is_internal && rpos_is_internal) { /* BP is either Watson-Crick, G:U/U:G, non-canonical, internal double-gap bp or internal half-gap bp */ if(is_watson_crick_bp(ps->msa_cseq_maj[lpos], ps->msa_cseq_maj[rpos])) { /* watson-crick */ if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[wcbp_idx_s])) != eslOK) return status; if(lpos < rpos) nwc_s++; } else if(is_gu_or_ug_bp(ps->msa_cseq_maj[lpos], ps->msa_cseq_maj[rpos])) { /* G:U or U:G */ if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[gubp_idx_s])) != eslOK) return status; if(lpos < rpos) ngu_s++; } else if (lpos_is_gap && rpos_is_gap) { /* internal double-gap basepair */ if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[dgbp_idx_s])) != eslOK) return status; if(lpos < rpos) ndgi_s++; } else if (lpos_is_gap || rpos_is_gap) { /* internal double-gap basepair */ if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[hgbp_idx_s])) != eslOK) return status; if(lpos < rpos) nhgi_s++; } else { /* non-canonical */ if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[ncbp_idx_s])) != eslOK) return status; if(lpos < rpos) nnc_s++; } } /* end of (if(lpos_is_internal && rpos_is_internal)) */ else { /* either the left half of the bp is before the first nongap nt, * or the right half of the bp is after the final nongap nt, * for both cases, draw the nt as black, and don't count it as * any type of basepair */ if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[BLACKOC])) != eslOK) return status; } } } /* add one-cell color legend for watson-crick basepairs */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[wcbp_idx_s], nwc_s, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "Watson-Crick basepair (bp)", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "C-G", errbuf)) != eslOK) return status; ps->nocclA[pp]++; /* add one-cell color legend for G-U, U-G basepairs */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[gubp_idx_s], ngu_s, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "G-U or U-G bp", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "G-U", errbuf)) != eslOK) return status; ps->nocclA[pp]++; /* add one-cell color legend for non-canonical basepairs */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[ncbp_idx_s], nnc_s, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "non-canonical bp", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "A-A", errbuf)) != eslOK) return status; ps->nocclA[pp]++; /* add one-cell color legend for internal half-gap basepairs */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[hgbp_idx_s], nhgi_s, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "internal half-gap bp", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "A--", errbuf)) != eslOK) return status; ps->nocclA[pp]++; /* add one-cell color legend for internal double-gap basepairs */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[dgbp_idx_s], ndgi_s, OCCL_BLANK_COUNT, TRUE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "internal double-gap bp", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "---", errbuf)) != eslOK) return status; ps->nocclA[pp]++; } /* add description to ps */ if((status = add_page_desc_to_sspostscript(ps, pp, "alignment consensus sequence", errbuf)) != eslOK) return status; /* add text legend explaining how consensus nucleotides are determined */ ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE); ps->ntlA[pp] = 1; return eslOK; ERROR: ESL_FAIL(status, errbuf, "cons_seq_sspostscript(): memory allocation error."); return status; /* NEVERREACHED */ } /* Function: rf_seq_sspostscript() * * Purpose: Fill a postscript data structure with 1 new page, the RF sequence. * Return: eslOK on success. */ static int rf_seq_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, ESL_MSA *msa, int do_rescol, float **hc_onecell, int wcbp_idx_s, int gubp_idx_s, int ncbp_idx_s) { int status; int p, pp; int rfpos, apos, lpos, rpos; int orig_npage = ps->npage; int seen_canonical = FALSE; int nwc_s; /* number of watson-crick bps */ int ngu_s; /* number of GU/UG bps */ int nnc_s; /* number of noncanonical bps */ nwc_s = ngu_s = nnc_s = 0; if((status = add_pages_sspostscript(ps, 1, INDIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object."); for(p = orig_npage; p < ps->npage; p++) { ESL_ALLOC(ps->rAA[p], sizeof(char) * ps->rflen); } /* fill ps->rAA with nucleotides and gaps for RF sequence */ pp = orig_npage; for(rfpos = 0; rfpos < ps->rflen; rfpos++) { apos = ps->msa_rf2a_map[rfpos]; if(esl_abc_CIsCanonical(ps->abc, msa->rf[apos])) seen_canonical = TRUE; ps->rAA[pp][rfpos] = msa->rf[apos]; } /* if seen_canonical is still FALSE, the reference sequences is probably all 'x's, so we don't color by bp type */ if(do_rescol && seen_canonical) { /* determine color for the nucleotide, depends if it is single-stranded or basepaired */ ESL_ALLOC(ps->rcolAAA[pp], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->occlAAA[pp], sizeof(OneCellColorLegend_t **) * 3); for(rfpos = 0; rfpos < ps->rflen; rfpos++) { ESL_ALLOC(ps->rcolAAA[pp][rfpos], sizeof(float) * NCMYK); /* CMYK colors */ apos = ps->msa_rf2a_map[rfpos]; if(ps->msa_ct[(rfpos+1)] == 0) { /* single stranded */ /* single-stranded nucleotide or gap, draw same color as Watson-Cricks */ if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[wcbp_idx_s])) != eslOK) return status; } else { /* basepair, either watson-crick, GU/UG, or non-canonical */ lpos = apos; rpos = ps->msa_rf2a_map[ps->msa_ct[rfpos+1]-1]; if(is_watson_crick_bp(msa->rf[lpos], msa->rf[rpos])) { /* watson-crick */ if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[wcbp_idx_s])) != eslOK) return status; if(lpos < rpos) nwc_s++; } else if(is_gu_or_ug_bp(msa->rf[lpos], msa->rf[rpos])) { /* G:U or U:G */ if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[gubp_idx_s])) != eslOK) return status; if(lpos < rpos) ngu_s++; } else { /* non-canonical */ if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[ncbp_idx_s])) != eslOK) return status; if(lpos < rpos) nnc_s++; } } } /* add one-cell color legend for watson-crick basepairs */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[wcbp_idx_s], nwc_s, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "Watson-Crick basepair (bp)", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "C-G", errbuf)) != eslOK) return status; ps->nocclA[pp]++; /* add one-cell color legend for G-U, U-G basepairs */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[gubp_idx_s], ngu_s, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "G-U or U-G bp", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "G-U", errbuf)) != eslOK) return status; ps->nocclA[pp]++; /* add one-cell color legend for non-canonical basepairs */ ps->occlAAA[pp][ps->nocclA[pp]] = create_onecell_colorlegend(hc_onecell[ncbp_idx_s], nnc_s, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend (ps, ps->occlAAA[pp][ps->nocclA[pp]], "non-canonical bp", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_celltext_to_onecell_colorlegend(ps, ps->occlAAA[pp][ps->nocclA[pp]], "A-A", errbuf)) != eslOK) return status; ps->nocclA[pp]++; } /* add description to ps */ if((status = add_page_desc_to_sspostscript(ps, pp, "*REFERENCE* (\"#=GC RF\")", errbuf)) != eslOK) return status; return eslOK; ERROR: ESL_FAIL(status, errbuf, "rf_seq_sspostscript(): memory allocation error."); return status; /* NEVERREACHED */ } /* count_msa() * * Given an msa, count nucleotides, post probs, basepairs, and consensus start and end * positions and store them in , , , * , and . * * [0..apos..alen-1][0..abc->K]: * - per position count of each symbol in alphabet over all seqs. * * [0..apos..alen-1][0..abc->Kp-1][0..abc->Kp-1] * - per (non-pknotted) consensus basepair count of each possible basepair * over all seqs basepairs are indexed by 'i' the minimum of 'i:j' for a * pair between i and j, where i < j. Note that non-canonicals and * gaps and the like are all stored independently. * * [0..apos..alen-1][0..10] * - per position count of each posterior probability code over all seqs. * * [0..apos..alen-1] * - per position count of first nongap position over all seqs. * * [0..apos..alen-1] * - per position count of final nongap position over all seqs. * * A 'gap' has a looser defintion than in esl_abc here, esl_abc's gap, * missing nucleotides and nonnucleotides are all considered 'gaps' here. * * If we encounter an error, we return non-eslOK status and fill * errbuf with error message. * * Returns eslOK upon success. */ int count_msa(const ESL_ALPHABET *abc, ESL_MSA *msa, char *errbuf, double ***ret_abc_ct, double ****ret_bp_ct, double ***ret_pp_ct, int **ret_spos_ct, int **ret_epos_ct) { int status; double **abc_ct = NULL; double ***bp_ct = NULL; int *spos_ct = NULL; int *epos_ct = NULL; int apos, i, j, x, epos; ESL_DSQ *tmp_dsq = NULL; int seen_start = FALSE; /* variables related to getting bp counts */ int *ct = NULL; /* 0..alen-1 base pair partners array for current sequence */ char *ss_nopseudo = NULL; /* no-pseudoknot version of structure */ int nppvals = 12; /* '0'-'9' = 0-9, '*' = 10, gap = '11' */ double **pp_ct = NULL; /* [0..alen-1][0..nppvals-1] per position count of each possible PP char over all seqs */ int ppidx; /* contract check, msa should be in text mode and have ss_cons */ if(msa->flags & eslMSA_DIGITAL) ESL_FAIL(eslEINVAL, errbuf, "count_msa() contract violation, MSA is digitized"); if(msa->ss_cons == NULL) ESL_FAIL(eslEINVAL, errbuf, "the alignment lacks SS_cons annotation"); /* allocate pp_ct array, if nec */ if(ret_pp_ct != NULL && msa->pp != NULL) { ESL_ALLOC(pp_ct, sizeof(double *) * msa->alen); for(apos = 0; apos < msa->alen; apos++) { ESL_ALLOC(pp_ct[apos], sizeof(double) * nppvals); esl_vec_DSet(pp_ct[apos], nppvals, 0.); } } /* get ct array which defines the consensus base pairs */ ESL_ALLOC(ct, sizeof(int) * (msa->alen+1)); ESL_ALLOC(ss_nopseudo, sizeof(char) * (msa->alen+1)); esl_wuss_nopseudo(msa->ss_cons, ss_nopseudo); if ((status = esl_wuss2ct(ss_nopseudo, msa->alen, ct)) != eslOK) ESL_FAIL(status, errbuf, "Consensus structure string is inconsistent."); ESL_ALLOC(tmp_dsq, (msa->alen+2) * sizeof(ESL_DSQ)); ESL_ALLOC(abc_ct, sizeof(double *) * msa->alen); ESL_ALLOC(bp_ct, sizeof(double **) * msa->alen); for(apos = 0; apos < msa->alen; apos++) { ESL_ALLOC(abc_ct[apos], sizeof(double) * (abc->K+1)); esl_vec_DSet(abc_ct[apos], (abc->K+1), 0.); /* careful ct is indexed 1..alen, not 0..alen-1 */ if(ct[(apos+1)] > (apos+1)) { /* apos+1 is an 'i' in an i:j pair, where i < j */ ESL_ALLOC(bp_ct[apos], sizeof(double *) * (abc->Kp)); for(x = 0; x < abc->Kp; x++) { ESL_ALLOC(bp_ct[apos][x], sizeof(double) * (abc->Kp)); esl_vec_DSet(bp_ct[apos][x], abc->Kp, 0.); } } else { /* apos+1 is not an 'i' in an i:j pair, where i < j, set to NULL */ bp_ct[apos] = NULL; } } ESL_ALLOC(spos_ct, sizeof(int) * msa->alen); ESL_ALLOC(epos_ct, sizeof(int) * msa->alen); esl_vec_ISet(spos_ct, msa->alen, 0); esl_vec_ISet(epos_ct, msa->alen, 0); for(i = 0; i < msa->nseq; i++) { seen_start = FALSE; if((status = esl_abc_Digitize(abc, msa->aseq[i], tmp_dsq)) != eslOK) ESL_FAIL(status, errbuf, "problem digitizing sequence %d", i); for(apos = 0; apos < msa->alen; apos++) { /* update appropriate abc count, careful, tmp_dsq ranges from 1..msa->alen (not 0..msa->alen-1) */ if((status = esl_abc_DCount(abc, abc_ct[apos], tmp_dsq[apos+1], 1.0)) != eslOK) ESL_FAIL(status, errbuf, "problem counting nucleotide %d of seq %d", apos, i); if(! esl_abc_XIsGap(abc, tmp_dsq[apos+1])) { if(! seen_start) { spos_ct[apos]++; seen_start = TRUE; } epos = apos; } /* get bp count, if nec */ if(bp_ct[apos] != NULL) { /* our flag for whether position (apos+1) is an 'i' in an i:j pair where i < j */ j = ct[apos+1] - 1; /* ct is indexed 1..alen */ bp_ct[apos][tmp_dsq[(apos+1)]][tmp_dsq[(j+1)]]++; } } epos_ct[epos]++; /* get PP counts, if nec */ if(ret_pp_ct != NULL) { if(msa->pp[i] == NULL) ESL_FAIL(eslEINVAL, errbuf, "--prob requires all sequences in the alignment have PP, seq %d does not.", i+1); for(apos = 0; apos < msa->alen; apos++) { /* update appropriate pp count, careful, tmp_dsq ranges from 1..msa->alen (not 0..msa->alen-1) */ if((ppidx = get_pp_idx(abc, msa->pp[i][apos])) == -1) ESL_FAIL(eslEFORMAT, errbuf, "bad #=GR PP char: %c", msa->pp[i][apos]); pp_ct[apos][ppidx] += 1.; } } } *ret_abc_ct = abc_ct; *ret_bp_ct = bp_ct; *ret_spos_ct = spos_ct; *ret_epos_ct = epos_ct; if(ret_pp_ct != NULL) *ret_pp_ct = pp_ct; /* we only allocated pp_ct if ret_pp_ct != NULL */ if(tmp_dsq != NULL) free(tmp_dsq); if(ss_nopseudo != NULL) free(ss_nopseudo); if(ct != NULL) free(ct); return eslOK; ERROR: if(abc_ct != NULL) esl_Free2D((void **) abc_ct, msa->alen); if(pp_ct != NULL) esl_Free2D((void **) pp_ct, msa->alen); if(bp_ct != NULL) esl_Free3D((void ***) bp_ct, msa->alen, abc->Kp); if(spos_ct != NULL) free(spos_ct); if(epos_ct != NULL) free(epos_ct); if(tmp_dsq != NULL) free(tmp_dsq); ESL_FAIL(status, errbuf, "Error, out of memory while counting important values in the msa."); return status; /* NEVERREACHED */ } /* Function: infocontent_sspostscript() * * Purpose: Fill a postscript data structure with 1 new page, colored squares indicating * the information content of each consensus column. * * Return: eslOK on success. */ static int infocontent_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **abc_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_onecell_idx, FILE *tabfp) { int status; int p, pp, c; int rfpos, apos; int orig_npage = ps->npage; double *tmp_obs = NULL; double *ent = NULL; double *bg = NULL; float *limits = NULL; int zero_obs; int nonecell = 0; int nonecell_masked = 0; int within_mask; int bi; /* bin index for current position */ int l; if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object."); for(p = orig_npage; p < ps->npage; p++) { ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->sclAA[p], sizeof(SchemeColorLegend_t *) * 1); ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t **) * 1); if(! esl_opt_GetBoolean(go, "--no-cnt")) { ESL_ALLOC(ps->rAA[p], sizeof(char) * ps->rflen); ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->tlAAA[p], sizeof(TextLegend_t **) * 1); } for(c = 0; c < ps->rflen; c++) { ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { ESL_ALLOC(ps->rcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ } } } ESL_ALLOC(ent, sizeof(double) * ps->rflen); ESL_ALLOC(bg, sizeof(double) * abc->K); esl_vec_DSet(bg, abc->K, 1./(abc->K)); ESL_ALLOC(tmp_obs, sizeof(double) * abc->K); esl_vec_DSet(tmp_obs, abc->K, 0.); pp = orig_npage; /* add color legend */ ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); limits[0] = 0.0; limits[1] = 0.4; limits[2] = 0.8; limits[3] = 1.2; limits[4] = 1.6; limits[5] = 1.99; limits[6] = 2.00; ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, TRUE, TRUE, TRUE); if(tabfp != NULL) { fprintf(tabfp, "# ------------------------\n"); fprintf(tabfp, "# Information content data\n"); fprintf(tabfp, "# ------------------------\n"); fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each consensus position\n", ps->rflen); fprintf(tabfp, "# in the alignment and corresponding template.\n"); fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 5 : 6); fprintf(tabfp, "# \ttoken 1: 'infocontent' (tag defining line type to ease parsing)\n"); fprintf(tabfp, "# \ttoken 2: consensus position (starting at 1)\n"); fprintf(tabfp, "# \ttoken 3: information content for position (bits)\n"); fprintf(tabfp, "# \ttoken 4: number of non-gap nucleotides in position (max possible is %d (num seqs in aln))\n", msa_nseq); fprintf(tabfp, "# \ttoken 5: bin index this positions falls in (see bin values below)\n"); if(ps->mask != NULL) { fprintf(tabfp, "# \ttoken 6: '1' if position is included by mask, '0' if not\n"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# Information content is calculated as 2.0 - H, where\n"); fprintf(tabfp, "# H = - \\sum_x p_x \\log_2 p_x, for x in {A, C, G, U}\n"); fprintf(tabfp, "# p_x is the frequency of x for *non-gap* nucleotides at the position.\n"); fprintf(tabfp, "# For example, p_A in a column that includes 4 As, 3 Cs, 2 Gs, 1 U and 5 gaps\n"); fprintf(tabfp, "# would be 4/10 = 0.4.\n"); fprintf(tabfp, "# Maximum possible value for token 3 is %d, the number of sequences in the file.\n", msa_nseq); fprintf(tabfp, "#\n"); fprintf(tabfp, "# Value ranges for bins:\n"); fprintf(tabfp, "# \tbin 0: special case, 0 non-gap nucleotides in this position\n"); for(l = 0; l < hc_nbins; l++) { fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s information per position (bits)\n", l+1, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# %11s %6s %8s %10s %3s", "type", "cpos", "info", "nongap", "bin"); if(ps->mask != NULL) fprintf(tabfp, " %4s", "mask"); fprintf(tabfp, "\n"); fprintf(tabfp, "# %11s %6s %8s %10s %3s", "-----------", "------", "--------", "----------", "---"); if(ps->mask != NULL) fprintf(tabfp, " %4s", "----"); fprintf(tabfp, "\n"); } if(ps->mask == NULL) nonecell_masked = -1; /* special flag */ for(rfpos = 0; rfpos < ps->rflen; rfpos++) { apos = ps->msa_rf2a_map[rfpos]; esl_vec_DCopy(abc_ct[apos], abc->K, tmp_obs); /* only copy first abc->K values, don't copy gaps */ zero_obs = (esl_DCompare(esl_vec_DSum(tmp_obs, abc->K), 0., eslSMALLX1) == eslOK) ? TRUE : FALSE; esl_vec_DNorm(tmp_obs, abc->K); ent[rfpos] = esl_vec_DEntropy(bg, abc->K) - esl_vec_DEntropy(tmp_obs, abc->K); if(zero_obs) { if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[hc_onecell_idx])) != eslOK) return status; nonecell++; if(ps->mask != NULL && ps->mask[rfpos] == '1') nonecell_masked++; bi = -1; } else { within_mask = (ps->mask != NULL && ps->mask[rfpos] == '1') ? TRUE : FALSE; if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx], ent[rfpos], ps->sclAA[pp], within_mask, &bi)) != eslOK) return status; } /* fill in info for the consensus nucleotide */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { if(ps->mask == NULL || ps->mask[rfpos] == '1') { ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos]; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } else { /* position is a '0' in the mask, leave it blank (' ') */ ps->rAA[pp][rfpos] = ' '; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } } if(tabfp != NULL) { fprintf(tabfp, " infocontent %6d %8.5f %10d %3d", rfpos+1, ent[rfpos], (int) esl_vec_DSum(abc_ct[apos], abc->K), bi+1); if(ps->mask != NULL) fprintf(tabfp, " %4d", ps->mask[rfpos] == '1' ? 1 : 0); fprintf(tabfp, "\n"); } } /* add one-cell color legend */ ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[hc_onecell_idx], nonecell, nonecell_masked, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "100% gaps", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->nocclA[pp] = 1; /* add text to legend */ /*sprintf(text, "information content (bits) (total: %.2f bits)", esl_vec_DSum(ent, ps->rflen));*/ if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "information content (bits)", ps->legx_max_chars, errbuf)) != eslOK) return status; /* add the consensus nucleotide explanation text section to the legend */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE); ps->ntlA[pp] = 1; } /* add description to ps */ if((status = add_page_desc_to_sspostscript(ps, pp, "information content per position", errbuf)) != eslOK) return status; free(ent); free(tmp_obs); free(bg); free(limits); if(tabfp != NULL) fprintf(tabfp, "//\n"); return eslOK; ERROR: ESL_FAIL(status, errbuf, "infocontent_sspostscript(): memory allocation error."); return status; /* NEVERREACHED */ } /* Function: delete_sspostscript() * * Purpose: Fill a postscript data structure with a new page w/colored squares indicating * the number of sequences with gaps (deletions) at each consensus column. * If do_all is TRUE the page shows all deletions. If false only 'internal' deletions, * those that come after the first occupied consensus column of each sequence and * before the final occupied consensus column for each sequence, are shown. * * Return: eslOK on success. */ static int delete_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **abc_ct, int *span_ct, int msa_nseq, int do_all, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_zerodel_idx, int hc_fewdel_idx, FILE *tabfp) { int status; int p, pp, c, l, bi; int rfpos, apos; int orig_npage = ps->npage; double dfreq; int nzerodel = 0; int nzerodel_masked = 0; int nfewdel = 0; int nfewdel_masked = 0; int within_mask; float *limits = NULL; float fewdel_thresh; float n_ext_del; /* msa_nseq - span_ct[rfpos], number of external deletions */ if(ps->mask == NULL) { nzerodel_masked = -1; /* special flag */ nfewdel_masked = -1; /* special flag */ } if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object."); for(p = orig_npage; p < ps->npage; p++) { ESL_ALLOC(ps->bcolAAA[p], sizeof(int *) * ps->rflen); ESL_ALLOC(ps->sclAA[p], sizeof(SchemeColorLegend_t *) * 1); ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t **) * 2); if(! esl_opt_GetBoolean(go, "--no-cnt")) { ESL_ALLOC(ps->rAA[p], sizeof(char) * ps->rflen); ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->tlAAA[p], sizeof(TextLegend_t **) * 1); } for(c = 0; c < ps->rflen; c++) { ESL_ALLOC(ps->bcolAAA[p][c], sizeof(int) * NCMYK); /* CMYK colors */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { ESL_ALLOC(ps->rcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ } } } pp = orig_npage; /* add color legend */ ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); fewdel_thresh = 0.001; /* positions with delete freq < this value will be painted specially (dark grey) */ limits[0] = fewdel_thresh; limits[1] = 0.05; limits[2] = 0.20; limits[3] = 0.35; limits[4] = 0.50; limits[5] = 0.75; limits[6] = 1.00; ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, FALSE, TRUE, TRUE); if(tabfp != NULL) { if(do_all) { fprintf(tabfp, "# -----------\n"); fprintf(tabfp, "# Delete data\n"); fprintf(tabfp, "# -----------\n"); fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each consensus position\n", ps->rflen); fprintf(tabfp, "# in the alignment and corresponding template.\n"); fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 4 : 5); fprintf(tabfp, "# \ttoken 1: 'deleteall' (tag defining line type to ease parsing)\n"); fprintf(tabfp, "# \ttoken 2: consensus position (starting at 1)\n"); fprintf(tabfp, "# \ttoken 3: frequency of deletions (gaps) for position\n"); fprintf(tabfp, "# \ttoken 4: bin index this positions falls in (see bin values below)\n"); if(ps->mask != NULL) { fprintf(tabfp, "# \ttoken 5: '1' if position is included by mask, '0' if not\n"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# A sequence s has a 'delete' at consensus position x if position\n"); fprintf(tabfp, "# x is a gap for aligned sequence s.\n"); fprintf(tabfp, "# Total number of sequences in the alignment is %d\n", msa_nseq); fprintf(tabfp, "#\n"); fprintf(tabfp, "# Value ranges for bins:\n"); fprintf(tabfp, "# \tbin 0: special case, 0 sequences have a delete at position\n"); fprintf(tabfp, "# \tbin 1: special case, < %.5f fraction of sequences have internal deletes at position\n", fewdel_thresh); for(l = 0; l < hc_nbins; l++) { fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s frequency of deletes per position\n", l+2, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# %9s %6s %8s %3s", "type", "cpos", "dfreq", "bin"); if(ps->mask != NULL) fprintf(tabfp, " %4s", "mask"); fprintf(tabfp, "\n"); fprintf(tabfp, "# %9s %6s %8s %3s", "---------", "------", "--------", "---"); if(ps->mask != NULL) fprintf(tabfp, " %4s", "----"); fprintf(tabfp, "\n"); } else { /* ! do_all (internal deletes only) */ fprintf(tabfp, "# --------------------\n"); fprintf(tabfp, "# Internal delete data\n"); fprintf(tabfp, "# --------------------\n"); fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each consensus position\n", ps->rflen); fprintf(tabfp, "# in the alignment and corresponding template.\n"); fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 5 : 6); fprintf(tabfp, "# \ttoken 1: 'deleteint' (tag defining line type to ease parsing)\n"); fprintf(tabfp, "# \ttoken 2: consensus position (starting at 1)\n"); fprintf(tabfp, "# \ttoken 3: frequency of internal deletions (gaps) for position\n"); fprintf(tabfp, "# \ttoken 4: number of sequences that span (begin at or prior to and end at or after) position (max is %d)\n", msa_nseq); fprintf(tabfp, "# \ttoken 5: bin index this positions falls in (see bin values below)\n"); if(ps->mask != NULL) fprintf(tabfp, "# \ttoken 6: '1' if position is included by mask, '0' if not\n"); fprintf(tabfp, "#\n"); fprintf(tabfp, "# A sequence s has an 'internal delete' at consensus position 'x' that is actual alignment position 'a' if\n"); fprintf(tabfp, "# x is a gap for aligned sequence s, and s has at least one non-gap nucleotide aligned to a position 'b' <= 'a'\n"); fprintf(tabfp, "# and at least one non-gap nucleotide aligned to a position 'c' >= 'a'\n"); fprintf(tabfp, "#\n"); fprintf(tabfp, "# Value ranges for bins:\n"); fprintf(tabfp, "# \tbin 0: special case, 0 sequences have an internal delete at position\n"); fprintf(tabfp, "# \tbin 1: special case, < %.5f fraction of sequences have internal deletes at position\n", fewdel_thresh); for(l = 0; l < hc_nbins; l++) { fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s frequency of internal deletes per position\n", l+2, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# %9s %6s %8s %10s %3s", "type", "cpos", "dfreq", "nspan", "bin"); if(ps->mask != NULL) fprintf(tabfp, " %4s", "mask"); fprintf(tabfp, "\n"); fprintf(tabfp, "# %9s %6s %8s %10s %3s", "---------", "------", "--------", "----------", "---"); if(ps->mask != NULL) fprintf(tabfp, " %4s", "----"); fprintf(tabfp, "\n"); } } /* draw delete page */ for(rfpos = 0; rfpos < ps->rflen; rfpos++) { apos = ps->msa_rf2a_map[rfpos]; n_ext_del = do_all ? -1. : (float) (msa_nseq - span_ct[rfpos]); /* num external deletes is num seqs minus number of seqs that 'span' apos, see function header comments for explanation */ if((( do_all) && ( abc_ct[apos][abc->K] < eslSMALLX1)) || /* abc_ct[apos][abc->K] == 0 */ ((!do_all) && ((abc_ct[apos][abc->K] - n_ext_del) < eslSMALLX1))) { /* abc_ct[apos][abc->K] == n_ext_del (all deletes are external) */ if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[hc_zerodel_idx])) != eslOK) return status; nzerodel++; if(ps->mask != NULL && ps->mask[rfpos] == '1') nzerodel_masked++; bi = -2; /* special case */ dfreq = 0.; } else { within_mask = (ps->mask != NULL && ps->mask[rfpos] == '1') ? TRUE : FALSE; dfreq = do_all ? ( abc_ct[apos][abc->K] / (float) msa_nseq) : ((abc_ct[apos][abc->K] - n_ext_del) / (float) msa_nseq); /* printf("do_all: %d rfpos: %d dfreq: %.2f\n", do_all, rfpos, dfreq); */ if (dfreq < fewdel_thresh) { if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[hc_fewdel_idx])) != eslOK) return status; nfewdel++; if(ps->mask != NULL && ps->mask[rfpos] == '1') nfewdel_masked++; bi = -1; /* special case */ } else { if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx], dfreq, ps->sclAA[pp], within_mask, &bi)) != eslOK) return status; } } /* fill in info for the consensus nucleotide */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { if(ps->mask == NULL || ps->mask[rfpos] == '1') { ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos]; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } else { /* position is a '0' in the mask, leave it blank (' ') */ ps->rAA[pp][rfpos] = ' '; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } } if(tabfp != NULL) { if(do_all) fprintf(tabfp, " deleteall %6d %8.5f %3d", rfpos+1, dfreq, bi+2); else fprintf(tabfp, " deleteint %6d %8.5f %10d %3d", rfpos+1, dfreq, span_ct[rfpos], bi+2); if(ps->mask != NULL) fprintf(tabfp, " %4d", ps->mask[rfpos] == '1' ? 1 : 0); fprintf(tabfp, "\n"); } } /* add one-cell color legend */ ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[hc_zerodel_idx], nzerodel, nzerodel_masked, FALSE, FALSE); ps->occlAAA[pp][1] = create_onecell_colorlegend(hc_onecell[hc_fewdel_idx], nfewdel, nfewdel_masked, FALSE, FALSE); ps->nocclA[pp] = 2; if(do_all) { if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "zero deletions", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][1], "< 0.001 seqs have delete", ps->legx_max_chars, errbuf)) != eslOK) return status; } else { if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "zero internal deletions", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][1], "< 0.001 seqs have delete", ps->legx_max_chars, errbuf)) != eslOK) return status; } /* add color legend and description */ if(do_all) { /*sprintf(text, "fraction seqs w/deletes ('-'=0 deletes; avg/seq: %.2f)", (float) esl_vec_ISum(dct, ps->rflen) / (float) msa_nseq);*/ if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "fraction of seqs with deletes", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_page_desc_to_sspostscript(ps, ps->npage-1, "frequency of deletions at each position", errbuf)) != eslOK) return status; } else { /* !do_all, only internal deletes counted */ /*sprintf(text, "fraction seqs w/internal deletes ('-'=0; avg/seq: %.2f)", (float) esl_vec_ISum(dct_internal, ps->rflen) / (float) msa_nseq);*/ if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "fraction of seqs w/internal deletions", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_page_desc_to_sspostscript(ps, ps->npage-1, "frequency of internal deletions in each position", errbuf)) != eslOK) return status; } /* add the consensus nucleotide explanation text section to the legend */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE); ps->ntlA[pp] = 1; } free(limits); if(tabfp != NULL) fprintf(tabfp, "//\n"); return eslOK; ERROR: ESL_FAIL(status, errbuf, "delete_sspostscript(): memory allocation error."); return status; /* NEVERREACHED */ } /* Function: insertfreq_sspostscript() * * Purpose: Fill a postscript data structure with 1 new page, with colors * indicating the fraction of seqs with inserts after each * position. * * Return: eslOK on success. */ static int insertfreq_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int *nseq_with_ins_ct, int *span_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_zeroins_idx, int hc_fewins_idx, FILE *tabfp) { int status; int p, pp, c, l; int rfpos; int orig_npage = ps->npage; int apos; int nzeroins = 0; int nzeroins_masked = 0; int nfewins = 0; int nfewins_masked = 0; float *limits; int within_mask; float ifreq; int bi; float fewins_thresh; if(ps->mask == NULL) { nzeroins_masked = -1; /* special flag */ nfewins_masked = -1; /* special flag */ } if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object."); for(p = orig_npage; p < ps->npage; p++) { ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->sclAA[p], sizeof(SchemeColorLegend_t *) * 1); ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t **) * 2); if(! esl_opt_GetBoolean(go, "--no-cnt")) { ESL_ALLOC(ps->rAA[p], sizeof(char) * ps->rflen); ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->tlAAA[p], sizeof(TextLegend_t **) * 1); } for(c = 0; c < ps->rflen; c++) { ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { ESL_ALLOC(ps->rcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ } } } pp = orig_npage; /* add color legend */ ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); fewins_thresh = 0.001; limits[0] = fewins_thresh; limits[1] = 0.01; limits[2] = 0.05; limits[3] = 0.10; limits[4] = 0.20; limits[5] = 0.50; limits[6] = 1.00; ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, FALSE, TRUE, TRUE); if(tabfp != NULL) { fprintf(tabfp, "# ---------------------\n"); fprintf(tabfp, "# Insert frequency data\n"); fprintf(tabfp, "# ---------------------\n"); fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each possible insert position\n", ps->rflen+1); fprintf(tabfp, "# after each of the %d consensus positions and one more for inserts prior to the first consensus position.\n", ps->rflen); fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 5 : 6); fprintf(tabfp, "# \ttoken 1: 'insertfreq' (tag defining line type to ease parsing)\n"); fprintf(tabfp, "# \ttoken 2: consensus position after which inserts occur ('0' == before posn 1)\n"); fprintf(tabfp, "# \ttoken 3: fraction of sequences that span (see defn of span below) with >= 1 inserted nucleotides after position\n"); fprintf(tabfp, "# \ttoken 4: number of sequences that span (begin at or prior to and end at or after) position (max is %d)\n", msa_nseq); fprintf(tabfp, "# \ttoken 5: bin index this positions falls in (see bin values below)\n"); if(ps->mask != NULL) { fprintf(tabfp, "# \ttoken 6: '1' if position is included by mask, '0' if not\n"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# Total number of sequences in the alignment is %d\n", msa_nseq); fprintf(tabfp, "#\n"); fprintf(tabfp, "# A sequence s spans consensus position 'x' that is actual alignment position 'a' if s has\n"); fprintf(tabfp, "# at least one non-gap nucleotide aligned to a position 'b' <= 'a' and\n"); fprintf(tabfp, "# at least one non-gap nucleotide aligned to a position 'c' >= 'a'\n"); fprintf(tabfp, "#\n"); fprintf(tabfp, "# Value ranges for bins:\n"); fprintf(tabfp, "# \tbin -1: special case, reserved for inserts before position 1,\n"); fprintf(tabfp, "# \t these are NOT SHOWN in the postscript diagram (!)\n"); fprintf(tabfp, "# \tbin 0: special case, 0 sequences have inserts after this position\n"); fprintf(tabfp, "# \tbin 1: special case, < %.5f fraction of sequences have inserts after this position\n", fewins_thresh); for(l = 0; l < hc_nbins; l++) { fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s fraction of sequences with >= 1 inserts after each position\n", l+2, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# %10s %6s %8s %10s %3s", "type", "cpos", "ifreq", "nspan", "bin"); if(ps->mask != NULL) fprintf(tabfp, " %4s", "mask"); fprintf(tabfp, "\n"); fprintf(tabfp, "# %10s %6s %8s %10s %3s", "----------", "------", "--------", "----------", "---"); if(ps->mask != NULL) fprintf(tabfp, " %4s", "----"); fprintf(tabfp, "\n"); } /* print info on inserts before rfpos 1 to tabfile, if nec */ if(tabfp != NULL) { apos = ps->msa_rf2a_map[0]; if(nseq_with_ins_ct[0] > span_ct[0]) ESL_FAIL(eslERANGE, errbuf, "drawing insert page, rfpos: 0 nseq_with_ins_ct (%d) exceeds span_ct (%d)", nseq_with_ins_ct[0], span_ct[0]); ifreq = (float) nseq_with_ins_ct[0] / (float) span_ct[0]; fprintf(tabfp, " insertfreq %6d %8.5f %10d %3d", 0, ifreq, span_ct[0], -1); if(ps->mask != NULL) fprintf(tabfp, " %4d", 0); fprintf(tabfp, "\n"); } for(rfpos = 0; rfpos < ps->rflen; rfpos++) { apos = ps->msa_rf2a_map[rfpos]; if(nseq_with_ins_ct[rfpos+1] > span_ct[rfpos]) ESL_FAIL(eslERANGE, errbuf, "drawing insert page, rfpos: %d nseq_with_ins_ct (%d) exceeds span_ct (%d)", rfpos, nseq_with_ins_ct[rfpos+1], span_ct[rfpos]); ifreq = (float) nseq_with_ins_ct[rfpos+1] / (float) span_ct[rfpos]; /* note we don't need to add one to span_ct, it is [0..rflen-1] */ if(nseq_with_ins_ct[(rfpos+1)] == 0) { /* careful, nseq_with_ins_ct goes from 1..rflen, its off-by-one with other arrays */ if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[hc_zeroins_idx])) != eslOK) return status; nzeroins++; if(ps->mask != NULL && ps->mask[rfpos] == '1') nzeroins_masked++; bi = -2; /* special case */ } else if (ifreq < fewins_thresh) { if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[hc_fewins_idx])) != eslOK) return status; nfewins++; if(ps->mask != NULL && ps->mask[rfpos] == '1') nfewins_masked++; bi = -1; /* special case */ } else { within_mask = (ps->mask != NULL && ps->mask[rfpos] == '1') ? TRUE : FALSE; if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx], ifreq, ps->sclAA[pp], within_mask, &bi)) != eslOK) return status; } /* printf("rfpos: %5d ifreq: %.3f\n", rfpos, ifreq); */ /* fill in info for the consensus nucleotide */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { if(ps->mask == NULL || ps->mask[rfpos] == '1') { ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos]; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } else { /* position is a '0' in the mask, leave it blank (' ') */ ps->rAA[pp][rfpos] = ' '; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } } if(tabfp != NULL) { fprintf(tabfp, " insertfreq %6d %8.5f %10d %3d", rfpos+1, ifreq, span_ct[rfpos], bi+1); if(ps->mask != NULL) fprintf(tabfp, " %4d", ps->mask[rfpos] == '1' ? 1 : 0); fprintf(tabfp, "\n"); } } /* add one-cell color legend */ ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[hc_zeroins_idx], nzeroins, nzeroins_masked, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "zero insertions", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->occlAAA[pp][1] = create_onecell_colorlegend(hc_onecell[hc_fewins_idx], nfewins, nfewins_masked, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][1], "< 0.001 seqs have insert", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->nocclA[pp] = 2; /* add color legend */ if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "fraction of seqs w/insertions", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_page_desc_to_sspostscript(ps, ps->npage-1, "frequency of insertions after each position", errbuf)) != eslOK) return status; /* add the consensus nucleotide explanation text section to the legend */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE); ps->ntlA[pp] = 1; } free(limits); if(tabfp != NULL) fprintf(tabfp, "//\n"); return eslOK; ERROR: ESL_FAIL(status, errbuf, "insertfreq_sspostscript(): memory allocation error."); return status; /* NEVERREACHED */ } /* Function: insertavglen_sspostscript() * * Purpose: Fill a postscript data structure with 1 new page, with colors * indicating the average length of inserts after each * position. * * Return: eslOK on success. */ static int insertavglen_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int *nseq_with_ins_ct, int *nins_ct, int *span_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_zeroins_idx, FILE *tabfp) { int status; int p, pp, c, l; int rfpos; int orig_npage = ps->npage; int apos; int nzeroins = 0; int nzeroins_masked = 0; float *limits; int within_mask; float ifreq; float iavglen; int bi; if(ps->mask == NULL) nzeroins_masked = -1; /* special flag */ if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object."); for(p = orig_npage; p < ps->npage; p++) { ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->sclAA[p], sizeof(SchemeColorLegend_t *) * 1); ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t **) * 1); if(! esl_opt_GetBoolean(go, "--no-cnt")) { ESL_ALLOC(ps->rAA[p], sizeof(char) * ps->rflen); ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->tlAAA[p], sizeof(TextLegend_t **) * 1); } for(c = 0; c < ps->rflen; c++) { ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { ESL_ALLOC(ps->rcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ } } } pp = orig_npage; /* add color legend */ ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); limits[0] = 1.00; limits[1] = 1.01; limits[2] = 1.50; limits[3] = 3.00; limits[4] = 4.00; limits[5] = 10.00; limits[6] = SSDRAWINFINITY; ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, TRUE, FALSE, TRUE); if(tabfp != NULL) { fprintf(tabfp, "# --------------------------\n"); fprintf(tabfp, "# Average insert length data\n"); fprintf(tabfp, "# --------------------------\n"); fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each possible insert position\n", ps->rflen+1); fprintf(tabfp, "# after each of the %d consensus positions and one more for inserts prior to the first consensus position.\n", ps->rflen); fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 5 : 6); fprintf(tabfp, "# \ttoken 1: 'insertlen' (tag defining line type to ease parsing)\n"); fprintf(tabfp, "# \ttoken 2: consensus position after which inserts occur ('0' == before posn 1)\n"); fprintf(tabfp, "# \ttoken 3: average number of inserted nucleotides after each position for those seqs with >=1 inserted nucleotides)\n"); fprintf(tabfp, "# \ttoken 4: fraction of sequences that span (see defn of span below) with >= 1 inserted nucleotides after position\n"); fprintf(tabfp, "# \ttoken 5: number of sequences that span (begin at or prior to and end at or after) position (max is %d)\n", msa_nseq); fprintf(tabfp, "# \ttoken 6: bin index this positions falls in (see bin values below)\n"); if(ps->mask != NULL) { fprintf(tabfp, "# \ttoken 7: '1' if position is included by mask, '0' if not\n"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# Total number of sequences in the alignment is %d\n", msa_nseq); fprintf(tabfp, "#\n"); fprintf(tabfp, "# A sequence s spans consensus position 'x' that is actual alignment position 'a' if s has\n"); fprintf(tabfp, "# at least one non-gap nucleotide aligned to a position 'b' <= 'a' and\n"); fprintf(tabfp, "# at least one non-gap nucleotide aligned to a position 'c' >= 'a'\n"); fprintf(tabfp, "#\n"); fprintf(tabfp, "# Value ranges for bins:\n"); fprintf(tabfp, "# \tbin -1: special case, reserved for inserts before position 1,\n"); fprintf(tabfp, "# \t these are NOT SHOWN in the postscript diagram (!)\n"); fprintf(tabfp, "# \tbin 0: special case, 0 sequences have inserts after this position\n"); for(l = 0; l < hc_nbins; l++) { fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s average insert length after each position\n", l+1, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# %12s %6s %8s %8s %10s %3s", "type", "cpos", "iavglen", "ifreq", "nspan", "bin"); if(ps->mask != NULL) fprintf(tabfp, " %4s", "mask"); fprintf(tabfp, "\n"); fprintf(tabfp, "# %12s %6s %8s %8s %10s %3s", "------------", "------", "--------", "--------", "----------", "---"); if(ps->mask != NULL) fprintf(tabfp, " %4s", "----"); fprintf(tabfp, "\n"); } /* print info on inserts before rfpos 1 to tabfile, if nec */ if(tabfp != NULL) { apos = ps->msa_rf2a_map[0]; if(nseq_with_ins_ct[0] > span_ct[0]) ESL_FAIL(eslERANGE, errbuf, "drawing insert page, rfpos: 0 nseq_with_ins_ct (%d) exceeds span_ct (%d)", nseq_with_ins_ct[0], span_ct[0]); ifreq = (span_ct[0] == 0) ? 0. : (float) nseq_with_ins_ct[0] / (float) span_ct[0]; iavglen = (nseq_with_ins_ct[0] == 0) ? 0. : (float) nins_ct[0] / (float) nseq_with_ins_ct[0]; fprintf(tabfp, " insertavglen %6d %8.4f %8.5f %10d %3d", 0, iavglen, ifreq, span_ct[0], -1); if(ps->mask != NULL) fprintf(tabfp, " %4d", 0); fprintf(tabfp, "\n"); } for(rfpos = 0; rfpos < ps->rflen; rfpos++) { apos = ps->msa_rf2a_map[rfpos]; if(nseq_with_ins_ct[rfpos+1] > span_ct[rfpos]) ESL_FAIL(eslERANGE, errbuf, "drawing insert page, rfpos: %d nseq_with_ins_ct (%d) exceeds span_ct (%d)", rfpos, nseq_with_ins_ct[rfpos+1], span_ct[rfpos]); ifreq = (span_ct[rfpos] == 0) ? 0. : (float) nseq_with_ins_ct[rfpos+1] / (float) span_ct[rfpos]; iavglen = (nseq_with_ins_ct[rfpos+1] == 0) ? 0. : (float) nins_ct[rfpos+1] / (float) nseq_with_ins_ct[rfpos+1]; /* printf("rfpos: %5d ifreq: %.3f iavglen: %.3f nins: %10d nseq: %10d\n", rfpos, ifreq, iavglen, nins_ct[rfpos+1], nseq_with_ins_ct[rfpos+1]); */ if(nseq_with_ins_ct[(rfpos+1)] == 0) { /* careful, nseq_with_ins_ct goes from 1..rflen, its off-by-one with other arrays */ if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[hc_zeroins_idx])) != eslOK) return status; nzeroins++; if(ps->mask != NULL && ps->mask[rfpos] == '1') nzeroins_masked++; bi = -1; /* special case */ } else { within_mask = (ps->mask != NULL && ps->mask[rfpos] == '1') ? TRUE : FALSE; if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx], iavglen, ps->sclAA[pp], within_mask, &bi)) != eslOK) return status; } /* fill in info for the consensus nucleotide */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { if(ps->mask == NULL || ps->mask[rfpos] == '1') { ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos]; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } else { /* position is a '0' in the mask, leave it blank (' ') */ ps->rAA[pp][rfpos] = ' '; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } } if(tabfp != NULL) { fprintf(tabfp, " insertavglen %6d %8.4f %8.5f %10d %3d", rfpos+1, iavglen, ifreq, span_ct[rfpos], bi+1); if(ps->mask != NULL) fprintf(tabfp, " %4d", ps->mask[rfpos] == '1' ? 1 : 0); fprintf(tabfp, "\n"); } } /* add one-cell color legend */ ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[hc_zeroins_idx], nzeroins, nzeroins_masked, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "zero insertions", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->nocclA[pp] = 1; /* add color legend */ if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "average insertion length", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_page_desc_to_sspostscript(ps, ps->npage-1, "average insertion length after each position", errbuf)) != eslOK) return status; /* add the consensus nucleotide explanation text section to the legend */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE); ps->ntlA[pp] = 1; } free(limits); if(tabfp != NULL) fprintf(tabfp, "//\n"); return eslOK; ERROR: ESL_FAIL(status, errbuf, "insertavglen_sspostscript(): memory allocation error."); return status; /* NEVERREACHED */ } /* Function: span_sspostscript() * * Purpose: Fill a postscript data structure with 1 new page, with colors * indicating the fraction of seqs that 'span' each consensus * position. A consensus position cpos is spanned by a sequence x if * if at least 1 nucleotide in x is aligned to a consensus position <= cpos * *and* at least 1 nucleotide in x is aligned to a consensus position >= cpos. * * Return: eslOK on success. */ static int span_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int *span_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int zerocov_idx, int maxcov_idx, FILE *tabfp) { int status; int p, pp, c, l; int rfpos; int orig_npage = ps->npage; int nzerocov = 0; int nzerocov_masked = 0; int nmaxcov = 0; int nmaxcov_masked = 0; float *limits; int within_mask; float cfract; int bi; if(ps->mask == NULL) nzerocov_masked = nmaxcov_masked = -1; /* special flag */ if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object."); for(p = orig_npage; p < ps->npage; p++) { ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->sclAA[p], sizeof(SchemeColorLegend_t *) * 1); ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t **) * 2); if(! esl_opt_GetBoolean(go, "--no-cnt")) { ESL_ALLOC(ps->rAA[p], sizeof(char) * ps->rflen); ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->tlAAA[p], sizeof(TextLegend_t **) * 1); } for(c = 0; c < ps->rflen; c++) { ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { ESL_ALLOC(ps->rcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ } } } pp = orig_npage; /* add color legend */ ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); limits[0] = 0.0; limits[1] = 0.167; limits[2] = 0.333; limits[3] = 0.500; limits[4] = 0.667; limits[5] = 0.833; limits[6] = 1.00; ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, FALSE, FALSE, TRUE); if(tabfp != NULL) { fprintf(tabfp, "# ---------\n"); fprintf(tabfp, "# Span data\n"); fprintf(tabfp, "# ---------\n"); fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each consensus position\n", ps->rflen); fprintf(tabfp, "# in the alignment and corresponding template.\n"); fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 4 : 5); fprintf(tabfp, "# \ttoken 1: 'span' (tag defining line type to ease parsing)\n"); fprintf(tabfp, "# \ttoken 2: consensus position (starting at 1)\n"); fprintf(tabfp, "# \ttoken 3: fraction of sequences that 'span' position\n"); fprintf(tabfp, "# \ttoken 4: bin index this positions falls in (see bin values below)\n"); if(ps->mask != NULL) { fprintf(tabfp, "# \ttoken 5: '1' if position is included by mask, '0' if not\n"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# A sequence s spans consensus position 'x' that is actual alignment position 'a' if s has\n"); fprintf(tabfp, "# at least one non-gap nucleotide aligned to a position 'b' <= 'a' and\n"); fprintf(tabfp, "# at least one non-gap nucleotide aligned to a position 'c' >= 'a'\n"); fprintf(tabfp, "#\n"); fprintf(tabfp, "# Value ranges for bins:\n"); fprintf(tabfp, "# \tbin 0: special case, 0 sequences span this position\n"); fprintf(tabfp, "# \tbin 1: special case, all %d sequences span this position\n", msa_nseq); for(l = 0; l < hc_nbins; l++) { fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s fraction of sequences that span each position\n", l+2, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# %4s %6s %8s %3s", "type", "cpos", "span", "bin"); if(ps->mask != NULL) fprintf(tabfp, " %4s", "mask"); fprintf(tabfp, "\n"); fprintf(tabfp, "# %4s %6s %8s %3s", "----", "------", "--------", "---"); if(ps->mask != NULL) fprintf(tabfp, " %4s", "----"); fprintf(tabfp, "\n"); } for(rfpos = 0; rfpos < ps->rflen; rfpos++) { if(span_ct[rfpos] == 0) { if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[zerocov_idx])) != eslOK) return status; nzerocov++; if(ps->mask != NULL && ps->mask[rfpos] == '1') nzerocov_masked++; cfract = 0.; bi = -2; } else if(span_ct[rfpos] == msa_nseq) { if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[maxcov_idx])) != eslOK) return status; nmaxcov++; if(ps->mask != NULL && ps->mask[rfpos] == '1') nmaxcov_masked++; cfract = 1.; bi = -1; } else { within_mask = (ps->mask != NULL && ps->mask[rfpos] == '1') ? TRUE : FALSE; cfract = (float) span_ct[rfpos] / (float) msa_nseq; if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx], cfract, ps->sclAA[pp], within_mask, &bi)) != eslOK) return status; } /* fill in info for the consensus nucleotide */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { if(ps->mask == NULL || ps->mask[rfpos] == '1') { ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos]; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } else { /* position is a '0' in the mask, leave it blank (' ') */ ps->rAA[pp][rfpos] = ' '; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } } if(tabfp != NULL) { fprintf(tabfp, " span %6d %8.5f %3d", rfpos+1, cfract, bi+2); if(ps->mask != NULL) fprintf(tabfp, " %4d", ps->mask[rfpos] == '1' ? 1 : 0); fprintf(tabfp, "\n"); } } /* add one-cell color legend for zero span positions */ ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[zerocov_idx], nzerocov, nzerocov_masked, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "no sequences span", ps->legx_max_chars, errbuf)) != eslOK) return status; /* add one-cell color legend for maximum span positions */ ps->occlAAA[pp][1] = create_onecell_colorlegend(hc_onecell[maxcov_idx], nmaxcov, nmaxcov_masked, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][1], "100% of seqs span", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->nocclA[pp] = 2; /* add color legend */ if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "fraction of seqs that span each position", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_page_desc_to_sspostscript(ps, ps->npage-1, "fraction of sequences that span each position", errbuf)) != eslOK) return status; /* add the consensus nucleotide explanation text section to the legend */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE); ps->ntlA[pp] = 1; } free(limits); if(tabfp != NULL) fprintf(tabfp, "//\n"); return eslOK; ERROR: ESL_FAIL(status, errbuf, "span_sspostscript(): memory allocation error."); return status; /* NEVERREACHED */ } /* Function: avg_posteriors_sspostscript() * * Purpose: Fill a postscript data structure with info average posterior probabilities in the MSA. * Return: eslOK on success. */ static int avg_posteriors_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double **pp_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int hc_onecell_idx, FILE *tabfp) { int status; int p; int rfpos; int pp; float *limits; /* bin limits for the color scheme */ int nonecell_allgap = 0; int nonecell_allgap_masked = 0; int within_mask; int orig_npage = ps->npage; float ppavgA[11]; int l; int apos; double nnongap; double ppsum; int ppidx; double ppavg; int bi; ppavgA[0] = 0.025; ppavgA[1] = 0.10; ppavgA[2] = 0.20; ppavgA[3] = 0.30; ppavgA[4] = 0.40; ppavgA[5] = 0.50; ppavgA[6] = 0.60; ppavgA[7] = 0.70; ppavgA[8] = 0.80; ppavgA[9] = 0.90; ppavgA[10] = 0.975; if(ps->mask == NULL) { nonecell_allgap_masked = -1; } /* special flag */ if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object."); for(p = orig_npage; p < ps->npage; p++) { ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->sclAA[p], sizeof(SchemeColorLegend_t *) * 1); ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t **) * 1); if(! esl_opt_GetBoolean(go, "--no-cnt")) { ESL_ALLOC(ps->rAA[p], sizeof(char) * ps->rflen); ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->tlAAA[p], sizeof(TextLegend_t **) * 1); } for(rfpos = 0; rfpos < ps->rflen; rfpos++) { ESL_ALLOC(ps->bcolAAA[p][rfpos], sizeof(float) * NCMYK); /* CMYK colors */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { ESL_ALLOC(ps->rcolAAA[p][rfpos], sizeof(float) * NCMYK); /* CMYK colors */ } } } ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); limits[0] = 0.0; limits[1] = 0.70; limits[2] = 0.80; limits[3] = 0.85; limits[4] = 0.90; limits[5] = 0.95; limits[6] = 1.00; if(tabfp != NULL) { fprintf(tabfp, "# ----------------------------------\n"); fprintf(tabfp, "# Average posterior probability data\n"); fprintf(tabfp, "# ----------------------------------\n"); fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each consensus position\n", ps->rflen); fprintf(tabfp, "# in the alignment and corresponding template.\n"); fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 5 : 6); fprintf(tabfp, "# \ttoken 1: 'avgpostprob' (tag defining line type to ease parsing)\n"); fprintf(tabfp, "# \ttoken 2: consensus position (starting at 1)\n"); fprintf(tabfp, "# \ttoken 3: average posterior probability of non-gap nucleotides for position\n"); fprintf(tabfp, "# \ttoken 4: number of non-gap nucleotides in position (max possible is %d (num seqs in aln))\n", msa_nseq); fprintf(tabfp, "# \ttoken 5: bin index this positions falls in (see bin values below)\n"); if(ps->mask != NULL) fprintf(tabfp, "# \ttoken 6: '1' if position is included by mask, '0' if not\n"); fprintf(tabfp, "#\n"); fprintf(tabfp, "# Posterior probability (PP) values in the alignment file can have 12 possible values,\n"); fprintf(tabfp, "# the average per position is calculated by defining each as the average of its range given\n"); fprintf(tabfp, "# below. (For example, a '8' which indicates PP between 0.75 and 0.85 is treated as 0.8).\n"); fprintf(tabfp, "# \t'.': gap, corresponds to a gap in the sequence (not counted)\n"); fprintf(tabfp, "# \t'0': posterior probability of between 0.00 and 0.05\n"); fprintf(tabfp, "# \t'1': posterior probability of between 0.05 and 0.15\n"); fprintf(tabfp, "# \t'2': posterior probability of between 0.15 and 0.25\n"); fprintf(tabfp, "# \t'3': posterior probability of between 0.25 and 0.35\n"); fprintf(tabfp, "# \t'4': posterior probability of between 0.35 and 0.45\n"); fprintf(tabfp, "# \t'5': posterior probability of between 0.45 and 0.55\n"); fprintf(tabfp, "# \t'6': posterior probability of between 0.55 and 0.65\n"); fprintf(tabfp, "# \t'7': posterior probability of between 0.65 and 0.75\n"); fprintf(tabfp, "# \t'8': posterior probability of between 0.75 and 0.85\n"); fprintf(tabfp, "# \t'9': posterior probability of between 0.85 and 0.95\n"); fprintf(tabfp, "# \t'*': posterior probability of between 0.95 and 1.00\n"); fprintf(tabfp, "#\n"); fprintf(tabfp, "# Value ranges for bins:\n"); fprintf(tabfp, "# \tbin 0: special case, 0 sequences have a non-gap nucleotide at position\n"); for(l = 0; l < hc_nbins; l++) { fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s average posterior probability per position\n", l+1, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# %11s %6s %8s %10s %3s", "type", "cpos", "avgpp", "nongap", "bin"); if(ps->mask != NULL) fprintf(tabfp, " %4s", "mask"); fprintf(tabfp, "\n"); fprintf(tabfp, "# %11s %6s %8s %10s %3s", "-----------", "------", "--------", "----------", "---"); if(ps->mask != NULL) fprintf(tabfp, " %4s", "----"); fprintf(tabfp, "\n"); } /* step through each sequence and each column, collecting stats */ pp = orig_npage; ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, TRUE, TRUE, TRUE); for(rfpos = 0; rfpos < ps->rflen; rfpos++) { apos = ps->msa_rf2a_map[rfpos]; nnongap = esl_vec_DSum(pp_ct[apos], 11); if(esl_FCompare(nnongap, 0., eslSMALLX1) == eslOK) { /* effectively 0.0, all gaps */ if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[hc_onecell_idx])) != eslOK) return status; nonecell_allgap++; if(ps->mask != NULL && ps->mask[rfpos] == '1') nonecell_allgap_masked++; bi = -1; ppavg = 0.; } else { /* at least 1 non-gap nucleotide in this position */ if(esl_FCompare(nnongap, pp_ct[apos][10], eslSMALLX1)) { /* all nongap nucleotides have highest possible posterior probability */ } else { } ppsum = 0.; for(ppidx = 0; ppidx < 11; ppidx++) { ppsum += pp_ct[apos][ppidx] * ppavgA[ppidx]; /* Note: PP value is considered average of range, not minimum ('9' == 0.90 (0.95-0.85/2) */ } ppavg = ppsum / nnongap; within_mask = (ps->mask != NULL && ps->mask[rfpos] == '1') ? TRUE : FALSE; if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_scheme[hc_scheme_idx], ppavg, ps->sclAA[pp], within_mask, &bi)) != eslOK) return status; } /* fill in info for the consensus nucleotide */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { if(ps->mask == NULL || ps->mask[rfpos] == '1') { ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos]; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } else { /* position is a '0' in the mask, leave it blank (' ') */ ps->rAA[pp][rfpos] = ' '; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } } if(tabfp != NULL) { fprintf(tabfp, " avgpostprob %6d %8.5f %10d %3d", rfpos+1, ppavg, (int) nnongap, bi+1); if(ps->mask != NULL) fprintf(tabfp, " %4d", ps->mask[rfpos] == '1' ? 1 : 0); fprintf(tabfp, "\n"); } } /* add one-cell color legend for all gap positions */ ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[hc_onecell_idx], nonecell_allgap, nonecell_allgap_masked, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "100% gaps", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->nocclA[pp] = 1; /* add color legend */ if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "average posterior probability \\(confidence\\)", ps->legx_max_chars,errbuf)) != eslOK) return status; /* add the consensus nucleotide explanation text section to the legend */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE); ps->ntlA[pp] = 1; } /* add description to ps */ if((status = add_page_desc_to_sspostscript(ps, pp, "average posterior probability per position", errbuf)) != eslOK) return status; free(limits); if(tabfp != NULL) fprintf(tabfp, "//\n"); return eslOK; ERROR: return status; } /* Function: colormask_sspostscript() * * Purpose: Fill a postscript data structure with 1 new page based on a lanemask, each column * is either black (if included, a '1' in the mask) or pink (not included, a '0' in the * mask. * * Return: eslOK on success. */ static int colormask_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, ESL_MSA *msa, float **hc_onecell, int incmask_idx, int excmask_idx) { int status; int p, pp, c; int cpos; int orig_npage = ps->npage; int ncols_inside_mask = 0; int ncols_outside_mask = 0; char *mask_desc = NULL; char *mask_file = NULL; if(ps->mask == NULL) ESL_FAIL(eslEINVAL, errbuf, "ps->mask is null when trying to draw maskcol page"); if((status = add_pages_sspostscript(ps, 1, SIMPLEMASKMODE)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "memory error adding pages to the postscript object."); for(p = orig_npage; p < ps->npage; p++) { ESL_ALLOC(ps->rAA[p], sizeof(char) * ps->rflen); ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t **) * 2); for(c = 0; c < ps->rflen; c++) { ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ } } pp = orig_npage; for(cpos = 0; cpos < ps->rflen; cpos++) { if(ps->mask[cpos] == '1') { /* included */ if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][cpos], NCMYK, hc_onecell[incmask_idx])) != eslOK) return status; ncols_inside_mask++; } else if(ps->mask[cpos] == '0') { if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][cpos], NCMYK, hc_onecell[excmask_idx])) != eslOK) return status; ncols_outside_mask++; } else ESL_FAIL(eslEINVAL, errbuf, "--mask mask char number %d is not a 1 nor a 0, but a %c\n", cpos, ps->mask[cpos]); ps->rAA[pp][cpos] = ' '; } /* add color legend */ ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[incmask_idx], ncols_inside_mask, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "columns included by mask", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->occlAAA[pp][1] = create_onecell_colorlegend(hc_onecell[excmask_idx], ncols_outside_mask, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][1], "columns excluded by mask", ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = esl_strcat(&(mask_desc), -1, "mask file: ", -1)) != eslOK) ESL_FAIL(status, errbuf, "error copying mask file name string");; if((status = esl_FileTail(esl_opt_GetString(go, "--mask"), FALSE, &mask_file)) != eslOK) ESL_FAIL(status, errbuf, "error copying mask file name string (probably out of memory)."); if((strlen(mask_file) + strlen(mask_desc)) > (ps->desc_max_chars*2 - 2)) { /* desc would be too long, shorten mask_file so desc is legal */ /* the -5 below is so we can add '...' to end */ if((status = esl_strcat(&(mask_desc), -1, mask_file, ((ps->desc_max_chars*2) - strlen(mask_desc) - 5))) != eslOK) ESL_FAIL(status, errbuf, "error copying mask file name string"); if((status = esl_strcat(&(mask_desc), -1, "...", 3)) != eslOK) ESL_FAIL(status, errbuf, "error copying mask file name string"); } else { /* desc will not be too long */ if((status = esl_strcat(&(mask_desc), -1, mask_file, -1)) != eslOK) ESL_FAIL(status, errbuf, "error copying mask file name string"); } free(mask_file); if((status = add_page_desc_to_sspostscript(ps, pp, mask_desc, errbuf)) != eslOK) return status; ps->nocclA[pp] = 2; return eslOK; ERROR: ESL_FAIL(status, errbuf, "colormask_sspostscript(): memory allocation error."); return status; /* NEVERREACHED */ } /* Function: diffmask_sspostscript() * * Purpose: Fill a postscript data structure with 1 new page based on a comparison between * two masks one in ps->mask the other in , each position becomes * one of four colors, one for each of the four possible combinations of 0 and 1. * * Return: eslOK on success. */ static int diffmask_sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, ESL_MSA *msa, char *mask2, float **hc_onecell, int incboth_idx, int inc1_idx, int inc2_idx, int excboth_idx) { int status; int p, pp, c; int cpos; int orig_npage = ps->npage; int ncols_in_both = 0; int ncols_out_both = 0; int ncols_in_1_out_2 = 0; int ncols_out_1_in_2 = 0; if(ps->mask == NULL) ESL_FAIL(eslEINVAL, errbuf, "ps->mask is null when trying to draw maskdiff page"); if((status = add_pages_sspostscript(ps, 1, SIMPLEMASKMODE)) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "memory error adding pages to the postscript object."); for(p = orig_npage; p < ps->npage; p++) { ESL_ALLOC(ps->rAA[p], sizeof(char) * ps->rflen); ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t **) * 4); for(c = 0; c < ps->rflen; c++) { ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ } } pp = orig_npage; for(cpos = 0; cpos < ps->rflen; cpos++) { if(ps->mask[cpos] == '1' && mask2[cpos] == '1') { if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][cpos], NCMYK, hc_onecell[incboth_idx])) != eslOK) return status; ncols_in_both++; } else if(ps->mask[cpos] == '1' && mask2[cpos] == '0') { if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][cpos], NCMYK, hc_onecell[inc1_idx])) != eslOK) return status; ncols_in_1_out_2++; } else if(ps->mask[cpos] == '0' && mask2[cpos] == '1') { if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][cpos], NCMYK, hc_onecell[inc2_idx])) != eslOK) return status; ncols_out_1_in_2++; } else if(ps->mask[cpos] == '0' && mask2[cpos] == '0') { if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][cpos], NCMYK, hc_onecell[excboth_idx])) != eslOK) return status; ncols_out_both++; } else if(ps->mask[cpos] != '0' && ps->mask[cpos] != '1') ESL_FAIL(eslEINVAL, errbuf, "--mask-col char number %d is not a 1 nor a 0, but a %c\n", cpos, ps->mask[cpos]); else if(mask2[cpos] != '0' && mask2[cpos] != '1') ESL_FAIL(eslEINVAL, errbuf, "--mask-diff char number %d is not a 1 nor a 0, but a %c\n", cpos, mask2[cpos]); ps->rAA[pp][cpos] = ' '; } /* add color legend */ ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[incboth_idx], ncols_in_both, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "included by both masks", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->occlAAA[pp][1] = create_onecell_colorlegend(hc_onecell[inc1_idx], ncols_in_1_out_2, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][1], "incl mask 1, excl mask 2", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->occlAAA[pp][2] = create_onecell_colorlegend(hc_onecell[inc2_idx], ncols_out_1_in_2, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][2], "excl mask 1, incl mask 1", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->occlAAA[pp][3] = create_onecell_colorlegend(hc_onecell[excboth_idx], ncols_out_both, OCCL_BLANK_COUNT, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][3], "excluded by both masks", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->nocclA[pp] = 4; if((status = add_diffmask_page_desc_to_sspostscript(ps, pp, esl_opt_GetString(go, "--mask"), esl_opt_GetString(go, "--mask-diff"), errbuf)) != eslOK) return status; return eslOK; ERROR: ESL_FAIL(status, errbuf, "diffmask_sspostscript(): memory allocation error."); return status; /* NEVERREACHED */ } /* Function: add_pages_sspostscript() * * Purpose: Add and initialize blank pages to a postscript object. */ int add_pages_sspostscript(SSPostscript_t *ps, int ntoadd, int page_mode) { int status; void *tmp; int p; if(ps->npage == 0) { assert(ps->rAA == NULL); assert(ps->bcolAAA == NULL); ESL_ALLOC(ps->rAA, sizeof(char *) * (ps->npage + ntoadd)); ESL_ALLOC(ps->rcolAAA, sizeof(float **) * (ps->npage + ntoadd)); ESL_ALLOC(ps->bcolAAA, sizeof(float **) * (ps->npage + ntoadd)); ESL_ALLOC(ps->otypeAA, sizeof(char *) * (ps->npage + ntoadd)); ESL_ALLOC(ps->occlAAA, sizeof(OneCellColorLegend_t ***) * (ps->npage + ntoadd)); ESL_ALLOC(ps->nocclA, sizeof(int) * (ps->npage + ntoadd)); ESL_ALLOC(ps->tlAAA, sizeof(TextLegend_t ***) * (ps->npage + ntoadd)); ESL_ALLOC(ps->ntlA, sizeof(int) * (ps->npage + ntoadd)); ESL_ALLOC(ps->sclAA, sizeof(SchemeColorLegend_t **) * (ps->npage + ntoadd)); ESL_ALLOC(ps->descA, sizeof(char *) * (ps->npage + ntoadd)); ESL_ALLOC(ps->modeA, sizeof(int) * (ps->npage + ntoadd)); ESL_ALLOC(ps->seqidxA, sizeof(int) * (ps->npage + ntoadd)); } else { assert(ps->rAA != NULL); assert(ps->bcolAAA != NULL); assert(ps->rcolAAA != NULL); ESL_RALLOC(ps->rAA, tmp, sizeof(char *) * (ps->npage + ntoadd)); ESL_RALLOC(ps->rcolAAA,tmp, sizeof(float **) * (ps->npage + ntoadd)); ESL_RALLOC(ps->bcolAAA,tmp, sizeof(float **) * (ps->npage + ntoadd)); ESL_RALLOC(ps->otypeAA,tmp, sizeof(char *) * (ps->npage + ntoadd)); ESL_RALLOC(ps->occlAAA,tmp, sizeof(OneCellColorLegend_t ***) * (ps->npage + ntoadd)); ESL_RALLOC(ps->nocclA, tmp, sizeof(int) * (ps->npage + ntoadd)); ESL_RALLOC(ps->tlAAA, tmp, sizeof(TextLegend_t ***) * (ps->npage + ntoadd)); ESL_RALLOC(ps->ntlA, tmp, sizeof(int) * (ps->npage + ntoadd)); ESL_RALLOC(ps->sclAA, tmp, sizeof(SchemeColorLegend_t **) * (ps->npage + ntoadd)); ESL_RALLOC(ps->descA, tmp, sizeof(char *) * (ps->npage + ntoadd)); ESL_RALLOC(ps->modeA, tmp, sizeof(int) * (ps->npage + ntoadd)); ESL_RALLOC(ps->seqidxA,tmp, sizeof(int) * (ps->npage + ntoadd)); } for(p = ps->npage; p < (ps->npage + ntoadd); p++) { ps->rAA[p] = NULL; ps->rcolAAA[p] = NULL; ps->bcolAAA[p] = NULL; ps->otypeAA[p] = NULL; ps->occlAAA[p] = NULL; ps->nocclA[p] = 0; ps->tlAAA[p] = NULL; ps->ntlA[p] = 0; ps->sclAA[p] = NULL; ps->descA[p] = NULL; ps->modeA[p] = page_mode; ps->seqidxA[p] = -1; } ps->npage += ntoadd; return eslOK; ERROR: return status; } /* read_mask_file * * Given an open file pointer, read the first token of the * file and return it as *ret_mask. Also return length of * mask in *ret_masklen, and a flag indicating whether or * not the mask has any internal zeroes in *ret_mask_has_internal_zeroes. * An internal '0' is one that occurs between at least one * 5' and one 3' '1' * * Returns: eslOK on success. */ int read_mask_file(char *filename, char *errbuf, char **ret_mask, int *ret_masklen, int *ret_mask_has_internal_zeroes) { int status; ESL_FILEPARSER *efp; char *tok; char *mask; int toklen; int n; /* for determining if we have internal zeroes */ int seen_1 = FALSE; /* becomes TRUE when we see first (5'-most) '1' */ int seen_1_then_0 = FALSE; /* becomes TRUE when we see first (5'-most) '0' that is 3' of first '1' */ int seen_1_then_0_then_1 = FALSE; /* becomes TRUE when we see first (5'-most) '1' that is 3' of first '0' that is 3' of first '1' */ if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to open %s in read_mask_file\n", filename); esl_fileparser_SetCommentChar(efp, '#'); if((status = esl_fileparser_GetToken(efp, &tok, &toklen)) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to read a single token from %s\n", filename); ESL_ALLOC(mask, sizeof(char) * (toklen+1)); for(n = 0; n < toklen; n++) { mask[n] = tok[n]; if(mask[n] == '0') { if((seen_1) && (!seen_1_then_0)) { seen_1_then_0 = TRUE; } } else if (mask[n] == '1') { if(!seen_1) { seen_1 = TRUE; } if((seen_1) && (seen_1_then_0) && (!seen_1_then_0_then_1)) { seen_1_then_0_then_1 = TRUE; } } else { ESL_FAIL(eslEINVAL, errbuf, "character %d of mask file is invalid: %c (must be a '1' or a '0')\n", n, mask[n]); } mask[n] = tok[n]; } mask[n] = '\0'; *ret_mask = mask; *ret_masklen= toklen; *ret_mask_has_internal_zeroes = seen_1_then_0_then_1; esl_fileparser_Close(efp); return eslOK; ERROR: return eslEMEM; } /* Function: mutual_information_sspostscript() * * Purpose: Fill a postscript data structure with 1 new page, colored squares indicating * the mutual information of each base paired consensus column. * mutual information is the extra information gained from modelling * the pair together (info of vector of bps, size 16) versus separately (sum * of info of the two independent vector of singlets, size 4). * * Return: eslOK on success. */ static int mutual_information_sspostscript(const ESL_GETOPTS *go, ESL_ALPHABET *abc, char *errbuf, SSPostscript_t *ps, double ***bp_ct, int msa_nseq, float ***hc_scheme, int hc_scheme_idx, int hc_nbins, float **hc_onecell, int ss_idx, int zerores_idx, FILE *tabfp) { int status; int p, pp, c, i; int rfpos, apos; int orig_npage = ps->npage; double *bg, *bg_pair; double bg_ent, bg_pair_ent; double *obs_left, *obs_right, *obs_pair; double ent_left, ent_right, ent_pair; int j; ESL_DSQ lres; ESL_DSQ rres; double nres; int nss = 0; int nzerores = 0; int nss_masked = 0; int nzerores_masked = 0; int i_within_mask, j_within_mask; int i_bi, j_bi; float *limits; int l; int idx =1; if(ps->mask == NULL) nss_masked = nzerores_masked = -1; /* special flag */ if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object."); for(p = orig_npage; p < ps->npage; p++) { ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->sclAA[p], sizeof(SchemeColorLegend_t *) * 1); ESL_ALLOC(ps->occlAAA[p], sizeof(OneCellColorLegend_t **) * 2); if(! esl_opt_GetBoolean(go, "--no-cnt")) { ESL_ALLOC(ps->rAA[p], sizeof(char) * ps->rflen); ESL_ALLOC(ps->rcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->tlAAA[p], sizeof(TextLegend_t **) * 1); } for(c = 0; c < ps->rflen; c++) { ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { ESL_ALLOC(ps->rcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ } } } pp = orig_npage; /* add color legend */ ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); limits[0] = 0.0; limits[1] = 0.167; limits[2] = 0.333; limits[3] = 0.500; limits[4] = 0.667; limits[5] = 0.833; limits[6] = 1.000; ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, TRUE, TRUE, TRUE); if(tabfp != NULL) { fprintf(tabfp, "# -----------------------\n"); fprintf(tabfp, "# Mutual information data\n"); fprintf(tabfp, "# -----------------------\n"); fprintf(tabfp, "# This section includes %d non #-prefixed lines, one for each consensus position\n", ps->rflen); fprintf(tabfp, "# in the alignment and corresponding template.\n"); fprintf(tabfp, "# Each line includes %d tokens, separated by whitespace:\n", ps->mask == NULL ? 9 : 11); fprintf(tabfp, "# \ttoken 1: 'mutualinfo' (tag defining line type to ease parsing)\n"); fprintf(tabfp, "# \ttoken 2: base pair index\n"); fprintf(tabfp, "# \ttoken 3: 5' consensus position of base pair (starting at 1)\n"); fprintf(tabfp, "# \ttoken 4: 3' consensus position of base pair (starting at 1)\n"); fprintf(tabfp, "# \ttoken 5: sequence information content at 5' position (bits)\n"); fprintf(tabfp, "# \ttoken 6: sequence information content at 3' position (bits)\n"); fprintf(tabfp, "# \ttoken 7: mutual information of the base pair (bits)\n"); fprintf(tabfp, "# \ttoken 8: number of sequences with non-gap at 5' and 3' posn (max possible is %d)\n", msa_nseq); fprintf(tabfp, "# \ttoken 8: number of sequences with non-gap at 5' and 3' position\n"); fprintf(tabfp, "# \ttoken 9: bin index this positions falls in (see bin values below).\n"); if(ps->mask != NULL) { fprintf(tabfp, "# \ttoken 10: '1' if 5' position is included by mask, '0' if not\n"); fprintf(tabfp, "# \ttoken 11: '1' if 3' position is included by mask, '0' if not\n"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# Information content is calculated as 2.0 - H, where\n"); fprintf(tabfp, "# H = - \\sum_x p_x \\log_2 p_x, for x in {A, C, G, U}\n"); fprintf(tabfp, "# p_x is the frequency of x for *non-gap* nucleotides at the position.\n"); fprintf(tabfp, "# Only nucleotides for sequences which have a non-gap nucleotide at both\n"); fprintf(tabfp, "# the 5' and 3' positions of the pair are counted.\n"); fprintf(tabfp, "# Mutual information is calculated as\n"); fprintf(tabfp, "# \\sum_{x,y} p_{x,y} \\log_2 ((p_x * p_y) / p_{x,y}\n"); fprintf(tabfp, "# Value ranges for bins:\n"); fprintf(tabfp, "# \tbin 0: special case, 0 sequences have non-gaps at both 5' and 3' position of pair\n"); for(l = 0; l < hc_nbins; l++) { fprintf(tabfp, "# \tbin %2d: [%.3f-%.3f%s mutual information per position (bits)\n", l+1, limits[l], limits[l+1], (l == hc_nbins-1) ? "]" : ")"); } fprintf(tabfp, "#\n"); fprintf(tabfp, "# %10s %4s %5s %5s %8s %8s %9s %10s %3s", "type", "idx", "5'pos", "3'pos", "5'info", "3'info", "mutinfo/2", "nongap", "bin"); if(ps->mask != NULL) fprintf(tabfp, " %6s %6s", "5'mask", "3'mask"); fprintf(tabfp, "\n"); fprintf(tabfp, "# %10s %4s %5s %5s %8s %8s %9s %10s %3s", "----------", "----", "-----", "-----", "--------", "--------", "---------", "----------", "---"); if(ps->mask != NULL) fprintf(tabfp, " %6s %6s", "------", "------"); fprintf(tabfp, "\n"); } /* determine background entropy */ ESL_ALLOC(bg, sizeof(double) * abc->K); ESL_ALLOC(bg_pair, sizeof(double) * abc->K*abc->K); esl_vec_DSet(bg, abc->K, 1./(abc->K)); esl_vec_DSet(bg_pair, abc->K*abc->K, 1./(abc->K*abc->K)); bg_pair_ent = esl_vec_DEntropy(bg_pair, abc->K*abc->K); bg_ent = esl_vec_DEntropy(bg, abc->K); free(bg); free(bg_pair); ESL_ALLOC(obs_left, sizeof(double) * (abc->K)); ESL_ALLOC(obs_right, sizeof(double) * (abc->K)); ESL_ALLOC(obs_pair, sizeof(double) * (abc->K*abc->K)); /* get observed nucleotides and base pairs at each rfpos */ for(rfpos = 0; rfpos < ps->rflen; rfpos++) { esl_vec_DSet(obs_left, abc->K, 0.); esl_vec_DSet(obs_right, abc->K, 0.); esl_vec_DSet(obs_pair, abc->K*abc->K, 0.); i = rfpos; nres = 0.; apos = ps->msa_rf2a_map[rfpos]; /* check if we're base paired */ if(ps->msa_ct[rfpos+1] != 0) { /* printf("msa_ct rfpos+1: %d %d\n", rfpos+1, ps->msa_ct[rfpos+1]); */ if(ps->msa_ct[rfpos+1] > (rfpos+1)) { /* rfpos is left half of base pair */ /* add up contributions of all possible base pairs, * we have to be careful to skip nucleotides that are gaps, missing or nonnucleotides in * EITHER left or right half of the bp. * We use the raw counts from msa_count() as the wt, (bp_ct[apos][lres][rres]) */ j = ps->msa_ct[i+1] - 1; for(lres = 0; lres < abc->K; lres++) { for(rres = 0; rres < abc->K; rres++) { /* printf("apos: %d rfpos: %d lres: %d rres: %d bp_ct[][][]: %.5f\n", apos, rfpos, lres, rres, bp_ct[apos][lres][rres]);*/ esl_abc_DCount(abc, obs_left, lres, bp_ct[apos][lres][rres]); esl_abc_DCount(abc, obs_right, rres, bp_ct[apos][lres][rres]); PairCount(abc, obs_pair, lres, rres, bp_ct[apos][lres][rres]); nres += bp_ct[apos][lres][rres]; } } for(lres = abc->K+1; lres < abc->Kp-2; lres++) { /* do all degenerates and 'any' (N) */ for(rres = abc->K+1; rres < abc->Kp-2; rres++) { /* do all degenerates and 'any' (N) */ esl_abc_DCount(abc, obs_left, lres, bp_ct[apos][lres][rres]); esl_abc_DCount(abc, obs_right, rres, bp_ct[apos][lres][rres]); PairCount(abc, obs_pair, lres, rres, bp_ct[apos][lres][rres]); nres += bp_ct[apos][lres][rres]; } } /* esl_vec_DDump(stdout, obs_left, abc->K, NULL); esl_vec_DDump(stdout, obs_right, abc->K, NULL); esl_vec_DDump(stdout, obs_pair, abc->K*abc->K, NULL); */ esl_vec_DNorm(obs_left, abc->K); esl_vec_DNorm(obs_right, abc->K); esl_vec_DNorm(obs_pair, abc->K*abc->K); ent_left = bg_ent - esl_vec_DEntropy(obs_left, abc->K); ent_right = bg_ent - esl_vec_DEntropy(obs_right, abc->K); ent_pair = bg_pair_ent - esl_vec_DEntropy(obs_pair, abc->K*abc->K); /* printf("lpos: %5d rpos: %5d entP: %8.3f entL: %8.3f entR: %8.3f nres: %.2f ", i+1, j+1, ent_pair, ent_left, ent_right, nres); */ ent_pair -= ent_left + ent_right; ent_pair /= 2.; /* printf("Final: %8.3f\n", ent_pair); */ /* To verify that the ent_pair is mutual information, calculated a different way, uncomment the following block */ /* double mi = 0; for(lres = 0; lres < abc->K; lres++) { for(rres = 0; rres < abc->K; rres++) { if(obs_pair[lres*abc->K+rres] > eslSMALLX1) { mi += obs_pair[lres*abc->K+rres] * (1.44269504 * log((obs_pair[lres*abc->K+rres])/(obs_left[lres] * obs_right[rres]))); printf("mi: %.2f obs_left %.2f obs_right: %.2f obs_pair %.2f \n", mi, obs_left[lres], obs_right[rres], obs_pair[lres*abc->K+rres]); } } } printf("MI/2: %.2f EP: %.2f %.2f\n", mi/2., ent_pair, (mi/2.) - ent_pair); */ if(ent_pair < (-1. * eslSMALLX1)) { ESL_FAIL(eslEINCONCEIVABLE, errbuf, "pair information < 0.: %f (lpos: %d rpos: %d)\n", ent_pair, i, j); } if(esl_DCompare(nres, 0., eslSMALLX1) == eslOK) { /* nres is 0 */ if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][i], NCMYK, hc_onecell[zerores_idx])) != eslOK) return status; if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][j], NCMYK, hc_onecell[zerores_idx])) != eslOK) return status; nzerores += 2; if(ps->mask != NULL && ps->mask[i] == '1') nzerores_masked++; if(ps->mask != NULL && ps->mask[j] == '1') nzerores_masked++; if(tabfp != NULL) { fprintf(tabfp, " mutualinfo %4d %5d %5d %8.5f %8.5f %9.5f %10d %3d", idx++, i+1, j+1, 0., 0., 0., 0, 0); if(ps->mask != NULL) fprintf(tabfp, " %6d %6d", ((ps->mask == NULL || ps->mask[i] == '1') ? 1 : 0), ((ps->mask == NULL || ps->mask[j] == '1') ? 1 : 0)); fprintf(tabfp, "\n"); } } else { i_within_mask = (ps->mask != NULL && ps->mask[i] == '1') ? TRUE : FALSE; j_within_mask = (ps->mask != NULL && ps->mask[j] == '1') ? TRUE : FALSE; if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][i], NCMYK, hc_scheme[hc_scheme_idx], ent_pair, ps->sclAA[pp], i_within_mask, &i_bi)) != eslOK) return status; if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][j], NCMYK, hc_scheme[hc_scheme_idx], ent_pair, ps->sclAA[pp], j_within_mask, &j_bi)) != eslOK) return status; if(tabfp != NULL) { fprintf(tabfp, " mutualinfo %4d %5d %5d %8.5f %8.5f %9.5f %10d %3d", idx++, i+1, j+1, ent_left, ent_right, ent_pair, (int) nres, i_bi+1); if(ps->mask != NULL) fprintf(tabfp, " %6d %6d", ((ps->mask == NULL || ps->mask[i] == '1') ? 1 : 0), ((ps->mask == NULL || ps->mask[j] == '1') ? 1 : 0)); fprintf(tabfp, "\n"); } } } /* end of if(ps->msa_ct[rfpos+1] > (rfpos+1)) { */ } else { /* single stranded, paint grey */ nss++; if(ps->mask != NULL && ps->mask[rfpos] == '1') nss_masked++; if((status = set_onecell_values(errbuf, ps->bcolAAA[pp][rfpos], NCMYK, hc_onecell[ss_idx])) != eslOK) return status; } /* fill in info for the consensus nucleotide */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { if(ps->mask == NULL || ps->mask[rfpos] == '1') { ps->rAA[pp][rfpos] = esl_opt_GetBoolean(go, "--cambig") ? ps->msa_cseq_amb[rfpos] : ps->msa_cseq_maj[rfpos]; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } else { /* position is a '0' in the mask, leave it blank (' ') */ ps->rAA[pp][rfpos] = ' '; if((status = set_onecell_values(errbuf, ps->rcolAAA[pp][rfpos], NCMYK, hc_onecell[WHITEOC])) != eslOK) return status; } } } /* add text to the one cell legend */ ps->occlAAA[pp][0] = create_onecell_colorlegend(hc_onecell[ss_idx], nss, nss_masked, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][0], "single-stranded", ps->legx_max_chars, errbuf)) != eslOK) return status; /* add text to the second one cell legend */ ps->occlAAA[pp][1] = create_onecell_colorlegend(hc_onecell[zerores_idx], nzerores, nzerores_masked, FALSE, FALSE); if((status = add_text_to_onecell_colorlegend(ps, ps->occlAAA[pp][1], "0 complete basepairs", ps->legx_max_chars, errbuf)) != eslOK) return status; ps->nocclA[pp] = 2; /* add text to the scheme legend */ if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], "mutual information per position (bits)", ps->legx_max_chars, errbuf)) != eslOK) return status; /* add the consensus nucleotide explanation text section to the legend */ if(! esl_opt_GetBoolean(go, "--no-cnt")) { ps->tlAAA[pp][0] = create_text_legend_for_consensus_sequence(go, FALSE); ps->ntlA[pp] = 1; } /* add description to ps */ if((status = add_page_desc_to_sspostscript(ps, pp, "mutual information per basepaired position", errbuf)) != eslOK) return status; free(limits); free(obs_left); free(obs_right); free(obs_pair); if(tabfp != NULL) fprintf(tabfp, "//\n"); return eslOK; ERROR: ESL_FAIL(status, errbuf, "mutual_information_sspostscript(): memory allocation error."); return status; /* NEVERREACHED */ } /* Function: PairCount() * Date: SRE, Tue Aug 1 10:34:20 2000 [St. Louis] * * Purpose: Given a possibly degenerate symbol code for left * and right symbols in a pair, increment a symbol * counter array appropriately. * * Args: abc - pointer to the internal alphabet * counters - vector to count into [0..abc->K^2-1] * syml - index of left symbol [0..abc->sym_iupac-1] * symr - index of right symbol [0..abc->sym_iupac-1] * wt - weight to use for the count (often 1.0). * * Returns: void */ static void PairCount(const ESL_ALPHABET *abc, double *counters, ESL_DSQ syml, ESL_DSQ symr, double wt) { int status; if (syml < abc->K && symr < abc->K) { counters[(int) (syml * abc->K + symr)] += wt; return; } else { int l,r; double *left = NULL; double *right = NULL; ESL_ALLOC(left, sizeof(double) * abc->K); ESL_ALLOC(right, sizeof(double) * abc->K); esl_vec_DSet(left, abc->K, 0.); esl_vec_DSet(right, abc->K, 0.); esl_abc_DCount(abc, left, syml, 1.0); esl_abc_DCount(abc, right, symr, 1.0); for (l = 0; l < abc->K; l++) for (r = 0; r < abc->K; r++) counters[l*abc->K +r] += left[l] * right[r] * wt; free(left); free(right); } return; ERROR: esl_fatal("Memory error"); } /* Function: get_command * Date: EPN, Fri Jan 25 13:56:10 2008 * * Purpose: Return the command used to call esl-ssdraw * in . * * Returns: eslOK on success; eslEMEM on allocation failure. */ static int get_command(const ESL_GETOPTS *go, char *errbuf, char **ret_command) { int status; int i; char *command = NULL; for (i = 0; i < go->argc; i++) { /* copy all command line options and args */ if((status = esl_strcat(&(command), -1, go->argv[i], -1)) != eslOK) goto ERROR; if(i < (go->argc-1)) if((status = esl_strcat(&(command), -1, " ", 1)) != eslOK) goto ERROR; } *ret_command = command; return eslOK; ERROR: ESL_FAIL(status, errbuf, "get_command(): memory allocation error."); return status; } /* Function: get_date * Date: EPN, Fri Jan 25 13:59:22 2008 * * Purpose: Return a string that gives the current date. * * Returns: eslOK on success; eslEMEM on allocation failure. */ static int get_date(char *errbuf, char **ret_date) { int status; time_t date = time(NULL); char *sdate = NULL; if((status = esl_strdup(ctime(&date), -1, &sdate)) != eslOK) goto ERROR; esl_strchop(sdate, -1); /* doesn't return anything but eslOK */ *ret_date = sdate; return eslOK; ERROR: ESL_FAIL(status, errbuf, "get_date() error status: %d, probably out of memory.", status); return status; } /* Function: set_scheme_values() * * Purpose: Set color values from a predefined scheme given min, max, * value and number of colors. */ static int set_scheme_values(char *errbuf, float *vec, int ncolvals, float **scheme, float val, SchemeColorLegend_t *scl, int within_mask, int *ret_bi) { float min, max; int ci, bi; min = scl->limits[0]; max = scl->limits[scl->nbins]; if((min-val) > eslSMALLX1) { ESL_FAIL(eslEINVAL, errbuf, "set_scheme_values(), val: %.4f < min: %.4f\n", val, min); } if((val-max) > eslSMALLX1) { ESL_FAIL(eslEINVAL, errbuf, "set_scheme_values(), val: %.4f > max: %.4f\n", val, max); } bi = 0; while((bi < (scl->nbins-1)) && ((val > scl->limits[bi+1]) || /* val exceeds limits[bi+1] OR */ (esl_FCompare(val, scl->limits[bi+1], eslSMALLX1) == eslOK))) { /* val equals limits[bi+1] */ bi++; } /* printf("%.3f %d (%.3f)\n", val, bi, scl->limits[bi+1]); */ scl->counts[bi]++; if(within_mask) scl->counts_masked[bi]++; for(ci = 0; ci < ncolvals; ci++) { vec[ci] = scheme[bi][ci]; } if(ret_bi != NULL) *ret_bi = bi; return eslOK; } /* Function: set_onecell_values() * * Purpose: Set color values as a predefined single * color. */ static int set_onecell_values(char *errbuf, float *vec, int ncolvals, float *onecolor) { int ci; for(ci = 0; ci < ncolvals; ci++) { vec[ci] = onecolor[ci]; } return eslOK; } /* Function: draw_masked_block() * * Purpose: Given coords, color, and mask style options draw a masked block. */ static int draw_masked_block(FILE *fp, float x, float y, float *colvec, int do_circle_mask, int do_square_mask, int do_x_mask, int do_border, float cellsize) { if (do_circle_mask) { if(do_border) { fprintf(fp, "newpath\n"); fprintf(fp, " %.2f %.2f %.1f 0 360 arc closepath\n", x + (cellsize/2.), y + (cellsize/2.), cellsize * (3./8.)); fprintf(fp, " %.4f %.4f %.4f %.4f setcmykcolor\n", colvec[0], colvec[1], colvec[2], colvec[3]); fprintf(fp, " stroke\n"); } else { fprintf(fp, "newpath\n"); fprintf(fp, " %.2f %.2f %.1f 0 360 arc closepath\n", x + (cellsize/2.), y + (cellsize/2.), cellsize * (3./8.)); fprintf(fp, " %.4f %.4f %.4f %.4f setcmykcolor\n", colvec[0], colvec[1], colvec[2], colvec[3]); fprintf(fp, " fill\n"); } } else if(do_square_mask) { if(do_border) { fprintf(fp, "newpath\n"); fprintf(fp, " %.2f %.2f moveto", x +1., y +1.); fprintf(fp, " 0 %.1f rlineto %.1f 0 rlineto 0 -%.1f rlineto closepath\n", cellsize*0.75, cellsize*0.75, cellsize*0.75); fprintf(fp, " %.4f %.4f %.4f %.4f setcmykcolor\n", colvec[0], colvec[1], colvec[2], colvec[3]); fprintf(fp, " stroke\n"); } else { fprintf(fp, "newpath\n"); fprintf(fp, " %.2f %.2f moveto", x + 1.5, y + 1.5); fprintf(fp, " 0 %.1f rlineto %.1f 0 rlineto 0 -%.1f rlineto closepath\n", cellsize*(5./8.), cellsize*(5./8.), cellsize*(5./8.)); fprintf(fp, " %.4f %.4f %.4f %.4f setcmykcolor\n", colvec[0], colvec[1], colvec[2], colvec[3]); fprintf(fp, " fill\n"); } } else if (do_x_mask) { if(do_border) { fprintf(fp, "newpath\n"); fprintf(fp, " %.2f %.2f moveto", x, y); fprintf(fp, " 0 %.1f rlineto %.1f 0 rlineto 0 -%.1f rlineto closepath\n", cellsize, cellsize, cellsize); fprintf(fp, " %.4f %.4f %.4f %.4f setcmykcolor\n", colvec[0], colvec[1], colvec[2], colvec[3]); fprintf(fp, " fill\n"); fprintf(fp, " %.4f %.4f %.4f %.4f setcmykcolor\n", 0., 0., 0., 0.); fprintf(fp, "newpath\n"); fprintf(fp, " %.2f %.2f moveto", x, y); fprintf(fp, " %.1f %.1f rlineto closepath\n", cellsize, cellsize); fprintf(fp, " stroke\n"); fprintf(fp, " %.2f %.2f moveto", x + cellsize, y); fprintf(fp, " -%.1f %.1f rlineto closepath\n", cellsize, cellsize); fprintf(fp, " stroke\n"); } else { fprintf(fp, "newpath\n"); fprintf(fp, " %.4f %.4f %.4f %.4f setcmykcolor\n", colvec[0], colvec[1], colvec[2], colvec[3]); fprintf(fp, " %.2f %.2f moveto", x, y); fprintf(fp, " %.1f %.1f rlineto closepath\n", cellsize, cellsize); fprintf(fp, " stroke\n"); fprintf(fp, "newpath\n"); fprintf(fp, " %.2f %.2f moveto", x + cellsize, y); fprintf(fp, " -%.1f %.1f rlineto closepath\n", cellsize, cellsize); fprintf(fp, " stroke\n"); } } return eslOK; } /* Function: validate_justread_sspostscript() * * Purpose: Validate a sspostscript just created by parsing * a template file. Nothing fancy here, just make * sure all we've written everything we expect. */ static int validate_justread_sspostscript(SSPostscript_t *ps, char *errbuf) { if(ps->modelname == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, failed to read modelname from template file."); if(ps->nbp == 0) ESL_FAIL(eslEINVAL, errbuf, "Error, failed to read 'lines bpconnects' section from template file."); if(ps->scale < 0) ESL_FAIL(eslEINVAL, errbuf, "Error, failed to read scale from template file."); if(ps->rflen == 0) ESL_FAIL(eslEINVAL, errbuf, "Error, failed to read 'text nucleotides' section from template file."); if(ps->leg_posn == -1) ESL_FAIL(eslEINVAL, errbuf, "Error, failed to read 'legend' section from template file."); if(ps->leg_cellsize == -1) ESL_FAIL(eslEINVAL, errbuf, "Error, failed to read 'legend' section from template file."); /* Stuff we don't currently require, but we may want to eventually */ /*if(ps->nposntext == 0) ESL_FAIL(eslEINVAL, errbuf, "validate_justread_sspostscript(), failed to read 'text positiontext' section from template file.");*/ /*if(ps->nticks == 0) ESL_FAIL(eslEINVAL, errbuf, "validate_justread_sspostscript(), failed to read 'lines positionticks' section from template file.");*/ /*if(ps->nbp == 0) ESL_FAIL(eslEINVAL, errbuf, "validate_justread_sspostscript(), failed to read 'lines bpconnects' section from template file.");*/ return eslOK; } /* Function: validate_and_update_sspostscript_given_msa() * * Purpose: Validate that a sspostscript works with a MSA. */ static int validate_and_update_sspostscript_given_msa(const ESL_GETOPTS *go, const ESL_ALPHABET *abc, SSPostscript_t *ps, ESL_MSA *msa, int msa_nseq, char *errbuf) { int status; int *msa_ct; int msa_nbp = 0; int *tmp_ct; int apos, rfpos_i, rfpos_j, rfpos; int *rf2a_map = NULL; int *a2rf_map = NULL; int rflen = 0; ps->msa = msa; ps->abc = abc; /* contract check */ if(msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, msa does not have RF annotation."); if(msa->ss_cons == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, msa does not have SS_cons annotation."); /* count non-gap RF columns */ for(apos = 0; apos < msa->alen; apos++) { if(esl_abc_CIsResidue(abc, msa->rf[apos])) rflen++; } if(ps->rflen != rflen) ESL_FAIL(eslEINVAL, errbuf, "validate_and_update_sspostscript_given_msa(), expected consensus length of %d in MSA, but read %d\n", ps->rflen, rflen); /* build map of non-gap RF positions to alignment positions and vice versa */ ESL_ALLOC(rf2a_map, sizeof(int) * rflen); ESL_ALLOC(a2rf_map, sizeof(int) * msa->alen); esl_vec_ISet(a2rf_map, msa->alen, -1); rfpos = 0; for(apos = 0; apos < msa->alen; apos++) { if(esl_abc_CIsResidue(abc, msa->rf[apos])) { rf2a_map[rfpos] = apos; a2rf_map[apos] = rfpos; rfpos++; } } /* get the CT array for this msa */ ESL_ALLOC(tmp_ct, sizeof(int) * (msa->alen+1)); if (esl_wuss2ct(msa->ss_cons, msa->alen, tmp_ct) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "Problem getting ct from SS_cons, does first alignment of MSA file have SS_cons annotation?"); ESL_ALLOC(msa_ct, sizeof(int) * (rflen+1)); esl_vec_ISet(msa_ct, rflen+1, 0); /* convert tmp_ct which is in alignment coords [1..alen] to non-gap RF coords [1..rflen]*/ for(apos = 0; apos < msa->alen; apos++) { if(tmp_ct[apos+1] > (apos+1)) { rfpos_i = a2rf_map[apos]; rfpos_j = a2rf_map[tmp_ct[apos+1]-1]; if(rfpos_i != -1 && rfpos_j != -1) { /* a consensus basepair */ msa_ct[rfpos_i+1] = rfpos_j+1; msa_ct[rfpos_j+1] = rfpos_i+1; msa_nbp++; } } } free(tmp_ct); if(ps->nbp != 0 && ps->nbp != msa_nbp) ESL_FAIL(eslEINVAL, errbuf, "validate_and_update_sspostscript_given_msa(), expected %d basepairs in MSA's SS_cons, but read %d\n", ps->nbp, msa_nbp); /* for(rfpos = 0; rfpos < rflen; rfpos++) printf("ct %5d %5d\n", rfpos, msa_ct[rfpos+1]-1); */ if(ps->msa_ct != NULL) { free(ps->msa_ct); ps->msa_ct = NULL;} if(ps->msa_rf2a_map != NULL) { free(ps->msa_rf2a_map); ps->msa_rf2a_map = NULL; } if(ps->msa_a2rf_map != NULL) { free(ps->msa_a2rf_map); ps->msa_a2rf_map = NULL; } ps->msa_ct = msa_ct; ps->msa_nbp = msa_nbp; ps->msa_ct = msa_ct; ps->msa_rf2a_map = rf2a_map; ps->msa_a2rf_map = a2rf_map; ps->msa_nseq = msa_nseq; return eslOK; ERROR: ESL_FAIL(status, errbuf, "validate_and_update_sspostscript_given_msa(), error status %d, probably out of memory.\n", status); return status; } /* Function: draw_header_and_footer() * * Purpose: Draw header for a page */ static int draw_header_and_footer(FILE *fp, const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, int page, int pageidx2print) { int status; int i, split_idx; float x, y; float header_fontsize; int model_width, desc_width, desc_column_width; char *model_dashes, *desc_dashes, *desc2print; char *desc_string = NULL; float xmodel; char *model2print = NULL; float footer_fontsize, footerx_charsize; header_fontsize = HEADER_FONTSIZE_UNSCALED / ps->scale; fprintf(fp, "%% begin header section\n"); fprintf(fp, "/%s findfont %.2f scalefont setfont\n", DEFAULT_FONT, header_fontsize); fprintf(fp, "0.00 0.00 0.00 1.00 setcmykcolor\n"); /* black */ if(! (esl_opt_GetBoolean(go, "--no-head"))) { model_width = ESL_MAX(strlen("model"), (int) strlen(ps->modelname)); if(model_width > HEADER_MODELNAME_MAXCHARS) { ESL_ALLOC(model2print, sizeof(char) * (HEADER_MODELNAME_MAXCHARS+1)); for(i = 0; i < (HEADER_MODELNAME_MAXCHARS-3); i++) model2print[i] = ps->modelname[i]; model2print[HEADER_MODELNAME_MAXCHARS-3] = '.'; model2print[HEADER_MODELNAME_MAXCHARS-2] = '.'; model2print[HEADER_MODELNAME_MAXCHARS-1] = '.'; model2print[HEADER_MODELNAME_MAXCHARS] = '\0'; } else { if((status = esl_strdup(ps->modelname, -1, &(model2print))) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "draw_header_and_footer(), error copying modelname"); } model_width = ESL_MIN(model_width, HEADER_MODELNAME_MAXCHARS); ESL_ALLOC(model_dashes, sizeof(char) * (model_width+1)); for(i = 0; i < model_width; i++) model_dashes[i] = '-'; model_dashes[model_width] = '\0'; if(ps->modeA[page] == ALIMODE || ps->modeA[page] == SIMPLEMASKMODE) { if((status = esl_strdup("description", -1, &(desc_string))) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "draw_header_and_footer(), error copying description"); } else if(ps->modeA[page] == INDIMODE) { if((status = esl_strdup("sequence name", -1, &(desc_string))) != eslOK) ESL_FAIL(eslEINVAL, errbuf, "draw_header_and_footer(), error copying description"); } xmodel = ps->headerx_desc - (ps->headerx_charsize * (model_width + 6 + 6 + 8 + 2)); /*6,6,8 for #pos,#bps,#seq|seqlen) plus 2 spaces each, first 2 for 2 spaces before desc*/ x = xmodel; y = ps->headery; fprintf(fp, "(%-*s %4s %4s) %.2f %.2f moveto show\n", model_width, "model", "#pos", "#bps", x, y); y -= header_fontsize * 0.75; fprintf(fp, "(%-*s %4s %4s) %.2f %.2f moveto show\n", model_width, model_dashes, "----", "----", x, y); y -= header_fontsize * 0.75; fprintf(fp, "(%-*s %4d %4d) %.2f %.2f moveto show\n", model_width, model2print, ps->rflen, ps->msa_nbp, x, y); free(model_dashes); x += (model_width + 6 + 6 +2) * ps->headerx_charsize; if(ps->modeA[page] == ALIMODE) { y+= header_fontsize * 1.5; fprintf(fp, "(%6s) %.2f %.2f moveto show\n", "#seqs", x, y); y -= header_fontsize * 0.75; fprintf(fp, "(%6s) %.2f %.2f moveto show\n", "------", x, y); y -= header_fontsize * 0.75; fprintf(fp, "(%6d) %.2f %.2f moveto show", ps->msa_nseq, x, y); } else if(ps->modeA[page] == INDIMODE && (ps->seqidxA[page] != -1)) { /* ps->seqidxA[page] == -1 if we're printing the consensus sequence */ y+= header_fontsize * 1.5; fprintf(fp, "(%6s) %.2f %.2f moveto show\n", "seqlen", x, y); y -= header_fontsize * 0.75; fprintf(fp, "(%6s) %.2f %.2f moveto show\n", "------", x, y); y -= header_fontsize * 0.75; fprintf(fp, "(%6d) %.2f %.2f moveto show", ps->uaseqlenA[ps->seqidxA[page]], x, y); } if(ps->descA[page] != NULL) { x = ps->headerx_desc; y += 2. * header_fontsize * 0.75; desc_width = ESL_MAX((int) strlen(desc_string), (int) strlen(ps->descA[page])); if(desc_width > ps->desc_max_chars) { /* split into two lines, the add_page_desc_to_sspostscript() function added a '\n' where the split should be */ i = 0; while(ps->descA[page][i] != '\n') { i++; if(i >= desc_width) ESL_FAIL(eslEINVAL, errbuf, "drawing header, failed to find split point from add_page_desc_to_() in two-line description (%s)", ps->descA[page]); } split_idx = i; desc_column_width = split_idx; } else desc_column_width = desc_width; ESL_ALLOC(desc_dashes, sizeof(char) * (desc_column_width+1)); for(i = 0; i < desc_column_width; i++) desc_dashes[i] = '-'; desc_dashes[desc_column_width] = '\0'; fprintf(fp, "(%-*s) %.2f %.2f moveto show\n", desc_column_width, desc_string, x, y); y -= header_fontsize * 0.75; free(desc_string); fprintf(fp, "(%-*s) %.2f %.2f moveto show\n", desc_column_width, desc_dashes, x, y); y -= header_fontsize * 0.75; free(desc_dashes); if(desc_width > ps->desc_max_chars) { ESL_ALLOC(desc2print, sizeof(char) * (split_idx+1)); for(i = 0; i < split_idx; i++) desc2print[i] = ps->descA[page][i]; desc2print[split_idx] = '\0'; fprintf(fp, "(%-*s) %.2f %.2f moveto show\n", desc_column_width, desc2print, x, y); free(desc2print); x = ps->headerx_desc; y-= ps->headery_charsize * 1; ESL_ALLOC(desc2print, sizeof(char) * ((desc_width - split_idx) -1+1)); for(i = split_idx+1; i < desc_width; i++) desc2print[(i-(split_idx+1))] = ps->descA[page][i]; desc2print[(desc_width-(split_idx+1))] = '\0'; fprintf(fp, "(%-*s) %.2f %.2f moveto show\n", desc_column_width, desc2print, x, y); free(desc2print); } else { fprintf(fp, "(%-*s) %.2f %.2f moveto show\n", desc_width, ps->descA[page], x, y); } } /* masked row of header goes here if desired */ } fprintf(fp, "%% end header section\n\n"); /* draw footer */ footer_fontsize = LEG_FONTSIZE_UNSCALED / ps->scale; footerx_charsize = ps->legx_charsize; if(! (esl_opt_GetBoolean(go, "--no-foot"))) { fprintf(fp, "%% begin footer section\n"); fprintf(fp, "/%s findfont %.2f scalefont setfont\n", FOOTER_FONT, footer_fontsize); /* draw alignment file name in lower left hand corner */ if(ps->mask != NULL) { if(esl_opt_GetString(go, "--mask-diff") != NULL) { fprintf(fp, "(alignment file: %s; mask 1 file: %s; mask 2 file: %s;) %.2f %.2f moveto show\n", esl_opt_GetArg(go, 1), esl_opt_GetString(go, "--mask"), esl_opt_GetString(go, "--mask-diff"), PAGE_SIDEBUF, PAGE_BOTBUF); } else { fprintf(fp, "(alignment file: %s; mask file: %s;) %.2f %.2f moveto show\n", esl_opt_GetArg(go, 1), esl_opt_GetString(go, "--mask"), PAGE_SIDEBUF, PAGE_BOTBUF); } } else { fprintf(fp, "(alignment file: %s) %.2f %.2f moveto show\n", esl_opt_GetArg(go, 1), PAGE_SIDEBUF, PAGE_BOTBUF); } /* put page number */ /* determine ndigits */ int tmp, ndigits; tmp = pageidx2print; ndigits = 1; while(tmp >= 10) { tmp /= 10; ndigits++; } x = ps->pagex_max - (PAGE_SIDEBUF) - (footerx_charsize * (5 + ndigits)); fprintf(fp, "(page %d) %.2f %.2f moveto show\n", pageidx2print, x, PAGE_BOTBUF); /* fprintf(fp, "(Created by \'esl-ssdraw\'. Copyright (C) 2010 Howard Hughes Medical Institute.) %.2f %.2f moveto show \n", PAGE_SIDEBUF , PAGE_BOTBUF); */ fprintf(fp, "%% end footer section\n\n"); } if(model2print != NULL) free(model2print); return eslOK; ERROR: ESL_FAIL(eslEINVAL, errbuf, "draw_header_and_footer(), memory error."); } /* Function: get_insert_info_from_msa * Date: EPN, Fri Dec 4 13:52:53 2009 * * Read an MSA with #=GC RF annotation defining * consensus columns and count how many insertions * occur after each consensus column for each sequence. * * msa - the alignment * rflen - expected nongap RF length (consensus length) * ret_nseq_with_ins_ct - [0..rflen] number of sequences with >= 1 * insert after each position. NULL if unwanted. * ret_nins_ct - [0..rflen] total number of inserted nucleotides * after each position. NULL if unwanted. * ret_per_seq_ins_ct - [0..i..msa->nseq-1][0..rflen] number of inserts * insert after each position per sequence. NULL if unwanted. * * Returns void. Dies with an informative error message upon an error. */ void get_insert_info_from_msa(const ESL_ALPHABET *abc, ESL_MSA *msa, int rflen, int **ret_nseq_with_ins_ct, int **ret_nins_ct, int ***ret_per_seq_ins_ct) { int status; int i; int *nseq_with_ins_ct = NULL; int *nins_ct = NULL; int **per_seq_ins_ct = NULL; int rfpos, apos; /* contract check */ if(msa->rf == NULL) esl_fatal("Error in get_insert_info_from_msa(), msa->rf is NULL."); /* allocate and initialize */ ESL_ALLOC(nseq_with_ins_ct, sizeof(int) * (rflen+1)); esl_vec_ISet(nseq_with_ins_ct, rflen+1, 0); ESL_ALLOC(nins_ct, sizeof(int) * (rflen+1)); esl_vec_ISet(nins_ct, rflen+1, 0); ESL_ALLOC(per_seq_ins_ct, sizeof(int *) * (msa->nseq)); for(i = 0; i < msa->nseq; i++) { ESL_ALLOC(per_seq_ins_ct[i], sizeof(int) * (rflen+1)); esl_vec_ISet(per_seq_ins_ct[i], (rflen+1), 0); } /* fill per_seq_ins_ct, nseq_with_ins_ct */ rfpos = 0; for(apos = 0; apos < msa->alen; apos++) { if(esl_abc_CIsResidue(abc, msa->rf[apos])) { rfpos++; if(rfpos > rflen) esl_fatal("Error in get_insert_info_from_msa(), expected consensus length (%d) is incorrect."); } else { for(i = 0; i < msa->nseq; i++) { if(! esl_abc_CIsGap(abc, msa->aseq[i][apos])) { per_seq_ins_ct[i][rfpos]++; nins_ct[rfpos]++; if(per_seq_ins_ct[i][rfpos] == 1) nseq_with_ins_ct[rfpos]++; } } } } if(ret_nseq_with_ins_ct != NULL) *ret_nseq_with_ins_ct = nseq_with_ins_ct; else free(nseq_with_ins_ct); if(ret_nins_ct != NULL) *ret_nins_ct = nins_ct; else free(nins_ct); if(ret_per_seq_ins_ct != NULL) *ret_per_seq_ins_ct = per_seq_ins_ct; else esl_Free2D((void **) per_seq_ins_ct, msa->nseq); return; ERROR: esl_fatal("Error in get_insert_info_from_msa(), memory allocation error."); return; /* NEVERREACHED */ } /* Function: get_insert_info_from_ifile * Date: EPN, Fri Dec 4 14:49:12 2009 * * Read a file output from Infernal's cmalign * when run with '--matchonly --ifile ' and * fill *ret_ict[0..rflen][0..msa->nseq-1] number * of inserts after each consensus position for * each sequence. * * We also keep track of cases where a count of * the first and final nongap positions of all sequence * per column would be incorrect IF the msa were * to have all insert columns removed. These corrections * are stored and returned in srfoff_ct and erfoff_ct * as explained below. * * Format of an insert file (from the commented header of an ifile): * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * This file includes 2+ non-'#' pre-fixed lines per model used for alignment, * where is the number of sequences in the target file. * The first non-'#' prefixed line per model includes 2 tokens, separated by a single space (' '): * The first token is the model name and the second is the consensus length of the model (). * The following lines include (4+3*) whitespace delimited tokens per line. * The format for these lines is: * .... .... * indicating has >= 1 inserted nucleotides after different consensus positions, * is the name of the sequence * is the unaligned length of the sequence * is the first (5'-most) consensus position filled by a nongap for this sequence (-1 if 0 nongap consensus posns) * is the final (3'-most) consensus position filled by a nongap for this sequence (-1 if 0 nongap consensus posns) * is the unaligned length of the sequence * is a consensus position (between 1 and ; if 0 inserts occur before 1st consensus posn) * is the *unaligned* position (b/t 1 and ) in of the first inserted nucleotide after . * is the number of inserted nucleotides after position for . * Lines for sequences with 0 inserted nucleotides will include only . * The final non-'#' prefixed line per model includes only '//', indicating the end of info for a model. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Example: * ~~~~~~~~~~~~~~~~~~~~~~~~~~ * tRNA 71 * tRNA-1 67 1 71 17 15 1 * tRNA-2 71 1 71 20 20 1 * tRNA-3 70 1 71 45 41 3 46 44 1 * tRNA-4 71 1 71 * tRNA-5 69 1 71 46 44 1 * tRNA-6 70 1 71 * tRNA-7 67 1 71 * tRNA-8 71 1 71 17 16 1 * tRNA-9 67 1 71 * tRNA-10 73 1 71 45 44 4 * ~~~~~~~~~~~~~~~~~~~~~~~~~~ * * ifile - name of ifile * rflen - expected nongap RF length (consensus length) * msa_nseq - expected number of sequences * useme_keyhash - keyhash with names of sequences for which we will store insert info * if NULL, we store insert info for all seqs. * ret_nseq_with_ins_ct - [0..rflen] number of sequences with >= 1 inserts * after each RF position. * Note [0] is before first posn, [1] is after first posn, [rflen] is after last one * ret_nins_ct - [0..rflen] total number of inserted nucleotides (over all seqs) after each RF position. * Note [0] is before first posn, [1] is after first posn, [rflen] is after last one * ret_per_seq_ins_ct - [0..i..msa->nseq-1][0..rflen number of inserts * after each position for each sequence. * Filled here. * * ret_srfoff_ct - [0..rfpos..rflen-1] count adjustment to make to a spos_ct[rfpos] if it * were obtained from an alignment with inserts removed, this value is +, * where is : -1 times the number of sequences that have their first nongap * RF position as rfpos, but include an insert before an rfpos2 < rfpos. * and is : +1 times the number of sequences that have their first nongap * RF position as rfpos3, but have an insert before rfpos < rfpos3. * We can only determine these cases when we read the ifile, since the * msa has had inserts removed. * NOTE a nasty off-by-one: RF (consensus) positions in the ifile are indexed 1..rflen * * ret_erfoff_ct - [0..rfpos..rflen-1] count adjustment to make to a epos_ct[rfpos] if it * were obtained from an alignment with inserts removed, this value is +, * where is : -1 times the number of sequences that have their final nongap * RF position as rfpos, but include an insert after an rfpos2 > rfpos. * and is : +1 times the number of sequences that have their final nongap * RF position as rfpos3, but have an insert after rfpos > rfpos3. * We can only determine these cases when we read the ifile, since the * msa has had inserts removed. * NOTE a nasty off-by-one: RF (consensus) positions in the ifile are indexed 1..rflen * * Returns void. Dies with an informative error message on an error. */ void get_insert_info_from_ifile(char *ifile, int rflen, int msa_nseq, ESL_KEYHASH *useme_keyhash, int **ret_nseq_with_ins_ct, int **ret_nins_ct, int ***ret_per_seq_ins_ct, int **ret_srfoff_ct, int **ret_erfoff_ct) { int status; ESL_FILEPARSER *efp; char *tok; int nseq_read = 0; int nseq_stored = 0; int **per_seq_ins_ct = NULL; int *nins_ct = NULL; int *nseq_with_ins_ct = NULL; int nins; int i; int rfpos; /* current nongap RF position */ int uapos; /* unaligned position for current sequence */ int seen_model_name_line = FALSE; int seen_end_of_model_line = FALSE; int nseq2store; /* number of seqs we'll store insert info on */ int seqlen; /* sequence length for current sequence, read from ifile */ int spos; /* first (5'-most) nongap consensus position for current sequence, read from ifile */ int epos; /* final (3'-most) nongap consensus position for current sequence, read from ifile */ int *srfoff_ct = NULL; /* [0..rfpos..rflen-1] correction for spos_ct[rfpos], add this value to spos_ct * to correct the miscounting that occurs if the msa has had all inserts removed, but * an insert file with insert info has been supplied and is read in this function */ int *erfoff_ct = NULL; /* [0..rfpos..rflen-1] correction for epos_ct[rfpos] (analagous to srfoff_ct) */ int already_handled_special_spos = FALSE; int prv_e_increment, prv_e_decrement; if (esl_fileparser_Open(ifile, NULL, &efp) != eslOK) esl_fatal("Error: failed to open insert file %s\n", ifile); esl_fileparser_SetCommentChar(efp, '#'); /* determine how many sequences we'll be storing info for */ nseq2store = (useme_keyhash == NULL) ? msa_nseq : esl_keyhash_GetNumber(useme_keyhash); /* allocate and initialize */ ESL_ALLOC(nseq_with_ins_ct, sizeof(int) * (rflen+1)); esl_vec_ISet(nseq_with_ins_ct, rflen+1, 0); ESL_ALLOC(nins_ct, sizeof(int) * (rflen+1)); esl_vec_ISet(nins_ct, rflen+1, 0); if(ret_srfoff_ct != NULL) { ESL_ALLOC(srfoff_ct, sizeof(int) * rflen); esl_vec_ISet(srfoff_ct, rflen, 0); } if(ret_erfoff_ct != NULL) { ESL_ALLOC(erfoff_ct, sizeof(int) * rflen); esl_vec_ISet(erfoff_ct, rflen, 0); } if(ret_per_seq_ins_ct != NULL) { ESL_ALLOC(per_seq_ins_ct, sizeof(int *) * (nseq2store)); for(i = 0; i < nseq2store; i++) { ESL_ALLOC(per_seq_ins_ct[i], sizeof(int) * (rflen+1)); esl_vec_ISet(per_seq_ins_ct[i], (rflen+1), 0); } } /* Read the file, verify that it contains the correct number of sequences and the * consensus length(s) listed in the file agrees with expected rflen. * Special care is taken to allow concatenated ifiles, so we may see more than * one // lines, but the total number of seqs should match what we expect. */ i = 0; while (esl_fileparser_NextLine(efp) == eslOK) { if (esl_fileparser_GetTokenOnLine(efp, &tok, NULL) != eslOK) { if(seen_model_name_line) esl_fatal("Error reading insert file, failed to read seq name on line %d of file %s\n", efp->linenumber, ifile); else esl_fatal("Error reading insert file, failed to read model name on line %d of file %s\n", efp->linenumber, ifile); } if(! seen_model_name_line) { /* this should be a special line, 2 tokens: , verify that is what we expect */ seen_model_name_line = TRUE; seen_end_of_model_line = FALSE; if (esl_fileparser_GetTokenOnLine(efp, &tok, NULL) != eslOK) { esl_fatal("Error reading insert file, failed to read consensus length on line %d of file %s\n", efp->linenumber, ifile); } if(rflen != atoi(tok)) { esl_fatal("Error reading insert file, read consensus length of %d on line %d of file %s, but expected length %d\n", atoi(tok), efp->linenumber, ifile, rflen); } } else if (strncmp(tok, "//", 2) == 0) { /* end of data for an ifile, but we may have concatenated them, so we keep going */ seen_model_name_line = FALSE; seen_end_of_model_line = TRUE; } else { /* should be a seq line with 1+3*n tokens, ... , n can be 0 */ /* determine if we're using this sequence */ i++; if(useme_keyhash == NULL || (esl_keyhash_Lookup(useme_keyhash, tok, -1, NULL) == eslOK)) { already_handled_special_spos = FALSE; /* initialize */ prv_e_decrement = prv_e_increment = -1; /* initialize */ if(esl_fileparser_GetTokenOnLine(efp, &tok, NULL) != eslOK) esl_fatal("Error reading insert file, failed to read unaligned length for sequence on line %d of file %s.\n", efp->linenumber, ifile); seqlen = atoi(tok); if(esl_fileparser_GetTokenOnLine(efp, &tok, NULL) != eslOK) esl_fatal("Error reading insert file, failed to read first nongap consensus position for sequence on line %d of file %s.\n", efp->linenumber, ifile); spos = atoi(tok); if(spos > rflen) esl_fatal("Error reading insert file, read spos of %d that exceeds expected consensus length %d on line %d of file %s.\n", spos, rflen, efp->linenumber, ifile); if(esl_fileparser_GetTokenOnLine(efp, &tok, NULL) != eslOK) esl_fatal("Error reading insert file, failed to read final nongap consensus position for sequence on line %d of file %s.\n", efp->linenumber, ifile); epos = atoi(tok); if(epos > rflen) esl_fatal("Error reading insert file, read epos of %d that exceeds expected consensus length %d on line %d of file %s.\n", epos, rflen, efp->linenumber, ifile); if(spos == -1 && epos != -1) esl_fatal("insert file is corrupt, spos is -1 but epos is not -1, on line %d\n", efp->linenumber); if(spos != -1 && epos == -1) esl_fatal("insert file is corrupt, spos is not -1 but epos is -1, on line %d\n", efp->linenumber); while(esl_fileparser_GetTokenOnLine(efp, &tok, NULL) == eslOK) { /* rfpos */ rfpos = atoi(tok); if(rfpos > rflen) esl_fatal("Error reading insert file, read insert info for position %d that exceeds expected consensus length %d on line %d of file %s.\n", rfpos, rflen, efp->linenumber, ifile); /* uapos */ if((status = esl_fileparser_GetTokenOnLine(efp, &tok, NULL)) != eslOK) esl_fatal("Error reading insert file, didn't read unaligned sequence position for rfpos %d on line %d of file %s.\n", rfpos, efp->linenumber, ifile); uapos = atoi(tok); if(uapos > seqlen) esl_fatal("Error reading insert file, read insert info for position %d that exceeds expected sequence length %d on line %d of file %s.\n", rfpos, seqlen, efp->linenumber, ifile); /* nins */ if((status = esl_fileparser_GetTokenOnLine(efp, &tok, NULL)) != eslOK) esl_fatal("Error reading insert file, didn't read number of inserts for position %d on line %d of file %s.\n", rfpos, efp->linenumber, ifile); nins = atoi(tok); nins_ct[rfpos] += nins; if(per_seq_ins_ct != NULL) per_seq_ins_ct[nseq_stored][rfpos] = nins; if(nins > 0) nseq_with_ins_ct[rfpos]++; /* nins should always be > 0, but why not check? */ /* check for special cases where a spos_ct and epos_ct read from a de-inserted msa would be incorrect */ if(spos != -1) { /* Note, if spos == -1 (then epos also == -1, we checked above), then there are 0 nongap consensus positions for * this sequence, and the spos and epos counts were never incremented for this sequence, so they don't need to be corrected. */ /* First check if this insert is before spos-1 */ if(srfoff_ct != NULL) { if((rfpos < (spos-1)) && (! already_handled_special_spos)) { /* we've got an insert *after* a position rfpos < (spos-1) for minimal rfpos */ /* Any function that counted the first RF position for this sequence if inserts were * removed thought it was spos, but an insert exists after rfpos<(spos-1), which means there * was an insert after rfpos, then a gap in at least 1 consensus position before the * first nongap consensus nucleotide at cpos. * NOTE a nasty off-by-one: RF (consensus) positions in the ifile are indexed 1..rflen, whereas srfoff_ct is 0..rflen-1 */ srfoff_ct[(spos-1)]--; /* this position was overcounted */ srfoff_ct[(rfpos-1)+1]++; /* this position was undercounted, we do +1 because insert occured after rfpos */ /* printf("decremented srfoff_ct[%d] for seq %d\n", spos-1, i); printf("incremented srfoff_ct[%d] for seq %d\n", rfpos-1+1, i); */ already_handled_special_spos = TRUE; /* if another rfpos is less than (spos-1) we don't care, we already fixed s_rfoff_ct */ } } /* Now check if this insert is after epos */ if(erfoff_ct != NULL) { if(rfpos > epos) { /* we've got an insert *after* a position rfpos > epos */ /* Any function that counted the final RF position for this sequence if inserts were * removed thought it was epos, but an insert exists after rfpos>epos, which means there * was a gap in at least one consensus position cpos > epos (cpos <= rfpos) and then inserts * after rfpos. * NOTE a nasty off-by-one: RF (consensus) positions in the ifile are indexed 1..rflen, whereas srfoff_ct is 0..rflen-1 */ erfoff_ct[(epos-1)]--; /* this position was overcounted */ erfoff_ct[(rfpos-1)]++; /* this position was undercounted */ /* BUT, be careful, we could have already entered this 'if' for this sequence, if so we need to negate * the previous time we incremented and decremented. * NOTE this case and corresponding code only applies to epos (not spos) b/c with spos * its the first case only that we want to handle (which is why we use the already_handled_special_spos FLAG) */ if(prv_e_decrement != -1 && prv_e_increment != -1) { erfoff_ct[prv_e_increment]--; /* undo increment with a decrement */ erfoff_ct[prv_e_decrement]++; /* undo decrement with an increment */ prv_e_decrement = (epos-1); prv_e_increment = (rfpos-1); } } } } } nseq_stored++; } nseq_read++; if(nseq_read > msa_nseq) esl_fatal("Error reading insert file, read info for more sequences than expected (%d) at line %d of file %s.", msa_nseq, efp->linenumber, ifile); } } esl_fileparser_Close(efp); /* end of file, make sure we read a '//' at the end of it */ if(! seen_end_of_model_line) esl_fatal("Error reading insert file, didn't read the special '//' line at the end of file %s.\n", rfpos, efp->linenumber, ifile); /* if useme_keyhash != NULL, make sure we read all the seqs we wanted to */ if((useme_keyhash != NULL) && (nseq_stored != nseq2store)) { esl_fatal("Error reading insert file, wanted to read insert info on %d seqs, but only found %d of them in the insert file %s\n", nseq2store, nseq_stored, ifile); } if(nseq_read != msa_nseq) esl_fatal("Error reading insert file, expected to read info on %d seqs, but only found %d in the insert file %s\n", msa_nseq, nseq_read, ifile); if (ret_nins_ct != NULL) *ret_nins_ct = nins_ct; else free(nins_ct); if (ret_nseq_with_ins_ct != NULL) *ret_nseq_with_ins_ct = nseq_with_ins_ct; else free(nseq_with_ins_ct); if (ret_srfoff_ct != NULL) *ret_srfoff_ct = srfoff_ct; else if (srfoff_ct != NULL) free(srfoff_ct); if (ret_erfoff_ct != NULL) *ret_erfoff_ct = erfoff_ct; else if (erfoff_ct != NULL) free(erfoff_ct); if (ret_per_seq_ins_ct != NULL) *ret_per_seq_ins_ct = per_seq_ins_ct; else if (per_seq_ins_ct != NULL) esl_Free2D((void **) per_seq_ins_ct, msa_nseq); return; ERROR: esl_fatal("Memory allocation error while reading insert file %s.", ifile); return;; /* NEVERREACHED */ } /* Function: get_insert_info_from_abc_ct * Date: EPN, Tue Jan 19 09:32:30 2010 * * Given an abc_ct array: * [0..apos..alen-1][0..abc->K]: per position count of * each symbol in alphabet over all seqs. * * Determine the number of sequences with >= 1 inserted * nucleotides after each RF position. * * IMPORTANT NOTE: This is done based on the assumption that inserts * have been systematically placed in the MSA by a program like * Infernal or HMMER and that the maximum number of nongap nucleotides in * any insert position after rfpos is the number of sequences with >=1 * insert nucleotides after rfpos. However, if the alignments were not * generated from HMMER nor Infernal, or have been modified, the * inserts may not follow this rule (the rule, in other words is that * there is always 1 insert column after each nongap RF position rfpos * that includes a nucleotide from all sequences that have >= 1 inserted * nucleotides after rfpos). * * abc_ct - [0..apos..msa_alen-1][0..abc->K] count of each nucleotide in each position * abc - the alphabet * msa_rf - msa->rf, the reference annotation * msa->alen - length of alignment * rflen - expected nongap RF length (consensus length) * ret_nseq_with_ins_ct - [0..rflen] number of sequences with >= 1 * insert after each position. NULL if unwanted. * ret_nins_ct - [0..rflen] total number of inserted nucleotides (over * all sequences after each position. NULL if unwanted. * * Returns void. Dies with an informative error message upon an error. */ void get_insert_info_from_abc_ct(double **abc_ct, ESL_ALPHABET *abc, char *msa_rf, int64_t msa_alen, int rflen, int **ret_nseq_with_ins_ct, int **ret_nins_ct) { int status; int *nins_ct; int *nseq_with_ins_ct; int nins, nmaxins; int rfpos, apos; /* allocate and initialize */ ESL_ALLOC(nseq_with_ins_ct, sizeof(int) * (rflen+1)); esl_vec_ISet(nseq_with_ins_ct, rflen+1, 0); ESL_ALLOC(nins_ct, sizeof(int) * (rflen+1)); esl_vec_ISet(nins_ct, rflen+1, 0); nmaxins = 0; rfpos = 0; for(apos = 0; apos < msa_alen; apos++) { if(esl_abc_CIsResidue(abc, msa_rf[apos])) { nseq_with_ins_ct[rfpos] = nmaxins; nmaxins = 0; rfpos++; if(rfpos > rflen) esl_fatal("Error in get_insert_info_from_abc_ct(), expected consensus length (%d) is incorrect."); } else { nins = (int) esl_vec_DSum(abc_ct[apos], abc->K); nins_ct[rfpos] += nins; nmaxins = ESL_MAX(nmaxins, nins); } } /* get max_nseq with inserts after the final position */ nseq_with_ins_ct[rfpos] = nmaxins; if(ret_nins_ct != NULL) *ret_nins_ct = nins_ct; else free(nins_ct); if(ret_nseq_with_ins_ct != NULL) *ret_nseq_with_ins_ct = nseq_with_ins_ct; else free(nseq_with_ins_ct); return; ERROR: esl_fatal("Error in get_insert_info_from_abc_ct(), memory allocation error."); return; /* NEVERREACHED */ } /* get_pp_idx * * Given a #=GR PP or #=GC PP_cons character, return the appropriate index * in a pp_ct[] vector. * '0' return 0; * '1' return 1; * '2' return 2; * '3' return 3; * '4' return 4; * '5' return 5; * '6' return 6; * '7' return 7; * '8' return 8; * '9' return 9; * '*' return 10; * gap return 11; * * Anything else (including missing or nonnucleotide) return -1; */ int get_pp_idx(const ESL_ALPHABET *abc, char ppchar) { if(esl_abc_CIsGap(abc, ppchar)) return 11; if(ppchar == '*') return 10; if(ppchar == '9') return 9; if(ppchar == '8') return 8; if(ppchar == '7') return 7; if(ppchar == '6') return 6; if(ppchar == '5') return 5; if(ppchar == '4') return 4; if(ppchar == '3') return 3; if(ppchar == '2') return 2; if(ppchar == '1') return 1; if(ppchar == '0') return 0; return -1; } /* spos_and_epos2span_ct * * Given two arrays, spos_ct[0..apos..alen-1] and epos_ct[0..apos..alen-1], * specifying the number of sequences for which the first and last non-gap * position is apos, calculate the number of sequences that 'span' each RF * position. A sequence spans position rfpos which is actually alignment * position apos, it has at least one nongap nucleotide in a position x <= apos, * and at least one nucleotide in a position y, y >= apos. * * As a special case, if alen == rflen and srfoff_ct != NULL and erfoff_ct != NULL, * then we've read an insert file (with --ifile) which has given us information * that we'll use to update spos_ct and epos_ct. In this case, the inserts * have been removed from the alignment but it is possible that spos_ct and * epos_ct have miscounted some positions (see get_insert_info_from_ifile() * for more info). * * span_ct: [0..rfpos..ps->msa->rflen-1] number of sequences that 'span' each position rfpos * have >= 1 nucleotide at a position apos before rf2a_map[rfpos] and >= 1 nucleotide at * any position apos >= rf2a_map[rfpos], */ int get_span_ct(int *msa_rf2a_map, int64_t alen, int rflen, int nseq, int *spos_ct, int *epos_ct, int *srfoff_ct, int *erfoff_ct, int **ret_span_ct) { int status; int *nseq_start_after_rfpos = NULL; int *nseq_end_before_rfpos = NULL; int *span_ct = NULL; int rfpos; int do_correction; int apos, nxt_apos, prv_apos; ESL_ALLOC(span_ct, sizeof(int) * rflen); ESL_ALLOC(nseq_start_after_rfpos, sizeof(int) * rflen); ESL_ALLOC(nseq_end_before_rfpos, sizeof(int) * rflen); esl_vec_ISet(nseq_start_after_rfpos, rflen, 0); esl_vec_ISet(nseq_end_before_rfpos, rflen, 0); /* check for special case, when we need to update spos_ct and epos_ct */ if(srfoff_ct != NULL && erfoff_ct == NULL) esl_fatal("Internal error, get_span_ct: srfoff_ct != NULL and erfoff_ct == NULL"); if(srfoff_ct == NULL && erfoff_ct != NULL) esl_fatal("Internal error, get_span_ct: srfoff_ct == NULL and erfoff_ct != NULL"); /* determine if we should correct spos_ct and epos_ct using srfoff_ct and erfoff_ct */ do_correction = (alen == rflen && srfoff_ct != NULL) ? TRUE : FALSE; /* NOTE: if alen == rflen spos_ct and epos_ct have length rflen, just like srfoff_ct and erfoff_ct */ /* first count number of seqs that start after each position */ nseq_start_after_rfpos[rflen-1] = 0; /* initialize */ nxt_apos = (int) alen - 1; for(rfpos = rflen-2; rfpos >= 0; rfpos--) { for(apos = nxt_apos; apos > msa_rf2a_map[rfpos]; apos--) { nseq_start_after_rfpos[rfpos] += spos_ct[apos]; if(do_correction) nseq_start_after_rfpos[rfpos] += srfoff_ct[apos]; } nseq_start_after_rfpos[rfpos] += nseq_start_after_rfpos[rfpos+1]; nxt_apos = msa_rf2a_map[rfpos]; } /* count number of seqs that end before each position */ nseq_end_before_rfpos[0] = 0; /* initialize */ prv_apos = 0; for(rfpos = 1; rfpos < rflen; rfpos++) { for(apos = prv_apos; apos < msa_rf2a_map[rfpos]; apos++) { nseq_end_before_rfpos[rfpos] += epos_ct[apos]; if(do_correction) nseq_end_before_rfpos[rfpos] += erfoff_ct[apos]; } nseq_end_before_rfpos[rfpos] += nseq_end_before_rfpos[rfpos-1]; prv_apos = msa_rf2a_map[rfpos]; } /* We now know how many seqs start after each rfpos (a = nseq_start_after_rfpos[rfpos]) and * how many seqs end before each rfpos (b = nseq_end_before_rfpos[rfpos]) * so c = [nseq-(a+b)] seqs span rfpos (b/c they don't start after it AND don't end before it). * * Note: this is really confusing to me, but I've convinced myself it's true, and I think * it is only true because we know each sequence's end position must be >= its start position */ for(rfpos = 0; rfpos < rflen; rfpos++) { span_ct[rfpos] = nseq - (nseq_start_after_rfpos[rfpos] + nseq_end_before_rfpos[rfpos]); /*printf("span_ct[rfpos: %d]: %d after: %d before: %d nseq: %d\n", rfpos, span_ct[rfpos], nseq_start_after_rfpos[rfpos], nseq_end_before_rfpos[rfpos], nseq);*/ } *ret_span_ct = span_ct; free(nseq_start_after_rfpos); free(nseq_end_before_rfpos); return eslOK; ERROR: return eslEMEM; } /* Function: drawfile2sspostscript() * * Purpose: Fill a postscript data structure with >= 1 new page(s), with colors described * in an input 'draw' file, with >= 1 sets of lines of data, each set * is separated by a line with only "//". must be equal to the consensus * ps->rflen. Each line contains a single real number between 0 and 1, * these are converted into 1 of 6 CMYK colors based on their values, using * the same color scheme used for frequency of inserts. * * Return: eslOK on success. */ static int drawfile2sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps, float ***hc_scheme, int hc_scheme_idx, int hc_nbins) { int status; int p, pp; int rfpos, c; int orig_npage = ps->npage; ESL_FILEPARSER *efp; char *s; char *dfile = esl_opt_GetString(go, "--dfile"); float *limits; float value; int l; int bi, within_mask; char *desc = NULL; char *legheader = NULL; /* allocate for limits, but don't fill it yet */ ESL_ALLOC(limits, sizeof(float) * (hc_nbins+1)); if (esl_fileparser_Open(dfile, NULL, &efp) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to open %s in draw_file2sspostscript\n", dfile); esl_fileparser_SetCommentChar(efp, '#'); pp = orig_npage - 1; /* Format of dfile: * For each page: * line 1: description of page (max is ps->desc_max_chars*2 chars) * line 2: header for legend (max is ps->legx_max_chars chars) * line 3: limits for color bins, must be 7 tokens, all numbers, each greater than the last * lines 4-N: single tokens, numerical values for each position, N is CLEN-3. * line N+1: single token, only:"//\n" signifying end of page. * * '#' prefixed lines are considered comments and skipped. * * Example: */ rfpos = -1; while (esl_fileparser_NextLine(efp) == eslOK) { if(rfpos == -1) { /* new page, first add a new page */ /* next 3 lines must be a specific format */ /* first line is description */ if(desc != NULL) { free(desc); desc = NULL; } while((status = esl_fileparser_GetTokenOnLine(efp, &s, NULL)) == eslOK) { if((status = esl_strcat(&desc, -1, s, -1)) != eslOK) esl_fatal("Out of memory"); if((status = esl_strcat(&desc, -1, " ", -1)) != eslOK) esl_fatal("Out of memory"); } if(strlen(desc) > (ps->desc_max_chars*2.)) esl_fatal("Error reading --dfile, description length (%d) exceeds max allowed (%d)", strlen(desc), (ps->desc_max_chars*2)); if(esl_fileparser_NextLine(efp) != eslOK) esl_fatal("Error reading --dfile, expected legend header line at line %d\n", efp->linenumber); /* second line is legend header */ if(legheader != NULL) { free(legheader); legheader = NULL; } while((status = esl_fileparser_GetTokenOnLine(efp, &s, NULL)) == eslOK) { if((status = esl_strcat(&legheader, -1, s, -1)) != eslOK) esl_fatal("Out of memory"); if((status = esl_strcat(&legheader, -1, " ", -1)) != eslOK) esl_fatal("Out of memory"); } if(strlen(legheader) > ps->legx_max_chars) esl_fatal("Error reading --dfile, legend header length (%d) exceeds max allowed (%d)", strlen(legheader), ps->legx_max_chars); if(esl_fileparser_NextLine(efp) != eslOK) esl_fatal("Error reading --dfile, expected limits line at line %d\n", efp->linenumber); /* third line is bin limits for the colors, must be 7 numbers, we read them as floats */ for(l = 0; l < hc_nbins+1; l++) { if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK) esl_fatal("Error reading --dfile, expected limits line at line %d to have %d limits (numbers) in increasing order, it doesn't", efp->linenumber, hc_nbins+1); limits[l] = atof(s); if(l > 0 && limits[l] < limits[l-1]) esl_fatal("Error reading --dfile, expected limits line at line %d with %d limits (numbers) in increasing order", efp->linenumber, hc_nbins+1); } rfpos++; /* rfpos will now be 0 */ } else if(rfpos == (ps->rflen)) { /* end of page, should be a single token, a "\\" on this line */ if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK) esl_fatal("Failed to read a final token at the end of description of page %d on line %d of drawfile %s\n", (pp - orig_npage + 1), efp->linenumber, dfile); if (strcmp(s, "//") != 0) esl_fatal("Failed to read a final \"//\" token (read %s) at the end of description of draw page %d on line %d of drawfile %s\n", s, (pp - orig_npage + 1), efp->linenumber, dfile); rfpos = -1; /* add color legend */ if((status = add_text_to_scheme_colorlegend(ps, ps->sclAA[pp], legheader, ps->legx_max_chars, errbuf)) != eslOK) return status; if((status = add_page_desc_to_sspostscript(ps, ps->npage-1, desc, errbuf)) != eslOK) return status; } else { /* a normal line, should either contain a single float or the \\ marking end of this page */ rfpos++; if(rfpos == 1) { /* add a new page, (we now have limits for legend, from if(rfpos == -1) loop above) */ if((status = add_pages_sspostscript(ps, 1, ALIMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object."); for(p = (ps->npage-1); p < ps->npage; p++) { ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen); ESL_ALLOC(ps->sclAA[p], sizeof(SchemeColorLegend_t *) * 1); for(c = 0; c < ps->rflen; c++) { ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ } } pp++; /* if first page, pp == orig_npage now */ ps->sclAA[pp] = create_scheme_colorlegend(hc_scheme_idx, hc_nbins, limits, FALSE, TRUE, TRUE, TRUE); } /* now parse the line, it should have a single number, a numerical value for a position */ if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK) esl_fatal("Failed to read value for position %d for page %d on line %d of dfile\n", rfpos, (pp - orig_npage + 1), efp->linenumber); value = atof(s); if(value < limits[0] || value > limits[hc_nbins]) esl_fatal("--dfile value %.4f out of allowed range [%.3f-%.3f] on line %d\n", value, limits[0], limits[hc_nbins], efp->linenumber, dfile); within_mask = (ps->mask != NULL && ps->mask[rfpos-1] == '1') ? TRUE : FALSE; if((status = set_scheme_values(errbuf, ps->bcolAAA[pp][rfpos-1], NCMYK, hc_scheme[hc_scheme_idx], value, ps->sclAA[pp], within_mask, &bi)) != eslOK) return status; } } if(pp == (orig_npage - 1)) { /* no new pages were read, this is an error */ esl_fatal("Failed to read a single page from drawfile %s\n", dfile); } esl_fileparser_Close(efp); free(limits); if(desc != NULL) { free(desc); desc = NULL; } if(legheader != NULL) { free(legheader); legheader = NULL; } return eslOK; ERROR: ESL_FAIL(status, errbuf, "drawfile2sspostscript(): memory allocation error."); return status; /* NEVERREACHED */ } /* Function: expertfile2sspostscript() * * Purpose: Fill a postscript data structure with >= 1 new page(s), with colors described * in an input 'expert draw' file, with >= 1 sets of lines of data, each set * is separated by a line with only "//". must be equal to the consensus * ps->rflen. Each line has at least 4 floats explaining * the CMYK values for the color to use at each position of the SS diagram, * and optionally contains an extra single character which is the nucleotide * to put at that position. * * Return: eslOK on success. */ static int expertfile2sspostscript(const ESL_GETOPTS *go, char *errbuf, SSPostscript_t *ps) { int status; int p, pp; int cpos, c; int orig_npage = ps->npage; ESL_FILEPARSER *efp; char *s; char *efile = esl_opt_GetString(go, "--efile"); if (esl_fileparser_Open(efile, NULL, &efp) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to open %s in draw_file2sspostscript\n", efile); esl_fileparser_SetCommentChar(efp, '#'); pp = orig_npage - 1; cpos = 0; while (esl_fileparser_NextLine(efp) == eslOK) { /* example line without nucleotide markup: * 0.000 0.000 0.000 0.500 * * example line with nucleotide markup: * 0.000 0.000 0.000 0.500 A */ cpos++; if(cpos == 1) { /* add a new page */ if((status = add_pages_sspostscript(ps, 1, SIMPLEMASKMODE)) != eslOK) ESL_FAIL(status, errbuf, "memory error adding pages to the postscript object."); for(p = (ps->npage-1); p < ps->npage; p++) { ESL_ALLOC(ps->rAA[p], sizeof(char) * (ps->rflen+1)); ESL_ALLOC(ps->bcolAAA[p], sizeof(float *) * ps->rflen); for(c = 0; c < ps->rflen; c++) { ESL_ALLOC(ps->bcolAAA[p][c], sizeof(float) * NCMYK); /* CMYK colors */ } } pp++; /* if first page, pp == orig_npage now */ } if(cpos == (ps->rflen+1)) { /* should be a single token, a "\\" on this line */ if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK) esl_fatal("Failed to read a final token at the end of description of draw page %d on line %d of expertfile %s\n", (pp - orig_npage + 1), efp->linenumber, efile); if (strcmp(s, "//") != 0) esl_fatal("Failed to read a final \"//\" token (read %s) at the end of description of draw page %d on line %d of expertfile %s\n", s, (pp - orig_npage + 1), efp->linenumber, efile); cpos = 0; } else { /* get C value */ if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK) esl_fatal("Failed to read C of CMYK value on line %d of expertfile %s\n", efp->linenumber, efile); ps->bcolAAA[pp][(cpos-1)][0] = atof(s); /* get M value */ if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK) esl_fatal("Failed to read M of CMYK value on line %d of expertfile %s\n", efp->linenumber, efile); ps->bcolAAA[pp][(cpos-1)][1] = atof(s); /* get Y value */ if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK) esl_fatal("Failed to read Y of CMYK value on line %d of expertfile %s\n", efp->linenumber, efile); ps->bcolAAA[pp][(cpos-1)][2] = atof(s); /* get K value */ if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) != eslOK) esl_fatal("Failed to read K of CMYK value on line %d of expertfile %s\n", efp->linenumber, efile); ps->bcolAAA[pp][(cpos-1)][3] = atof(s); /* optionally read a nucleotide value */ if (esl_fileparser_GetTokenOnLine(efp, &s, NULL) == eslOK) { if(((int) strlen(s)) != 1) esl_fatal("Read multi-character string (%s) for consensus nucleotide %d on line %d of expertfile %s\n", s, cpos, efp->linenumber, efile); ps->rAA[pp][(cpos-1)] = s[0]; } else ps->rAA[pp][(cpos-1)] = ' '; } } if(pp == (orig_npage - 1)) { /* no new pages were read, this is an error */ esl_fatal("Failed to read a single page from expertfile %s\n", efile); } esl_fileparser_Close(efp); return eslOK; ERROR: ESL_FAIL(status, errbuf, "expertfile2sspostscript(): memory allocation error."); return status; /* NEVERREACHED */ } /* is_watson_crick_bp(i,j): return TRUE if i,j form a watson crick bp, FALSE if not * is_gu_or_ug_bp(i,j): return TRUE if i,j form a G-U or U-G bp, FALSE if not */ static int is_watson_crick_bp(char i, char j) { switch (toupper(i)) { case 'A': switch (toupper(j)) { case 'U': return TRUE; break; case 'T': return TRUE; break; default: break; } break; case 'C': switch (toupper(j)) { case 'G': return TRUE; break; default: break; } break; case 'G': switch (toupper(j)) { case 'C': return TRUE; break; default: break; } break; case 'U': switch (toupper(j)) { case 'A': return TRUE; break; default: break; } break; case 'T': switch (toupper(j)) { case 'A': return TRUE; break; default: break; } break; default: break; } return FALSE; } static int is_gu_or_ug_bp(char i, char j) { switch (toupper(i)) { case 'G': switch (toupper(j)) { case 'U': return TRUE; break; case 'T': return TRUE; break; default: break; } break; case 'U': switch (toupper(j)) { case 'G': return TRUE; break; default: break; } break; case 'T': switch (toupper(j)) { case 'G': return TRUE; break; default: break; } break; default: break; } return FALSE; } /* Function: get_consensus_seqs_from_abc_ct() * Date: EPN, Wed Apr 7 07:39:57 2010 * * Given an abc_ct array: * [0..apos..alen-1][0..abc->K]: per position count of * each symbol in alphabet over all seqs. * * Determine the consensus sequence for the msa that abc_ct * corresponds to, one nucleotide per nongap RF position, the * most informative IUPAC nucleotide (including ambiguous nucleotides) * that represents >= fraction of the sequences in the msa * that have a nongap at that position. * * Alternatively, if --majrule is enabled, define consensus nucleotide * as the most common nucleotide at each position. Uppercase * if frequency >= 0.5 of nongap nts, else it is lowercase. * * ps - the postscript object * errbuf - informative error message, returned upon failure * abc_ct - count of nucleotides per alignment position (see above) * abc - the alphabet * cthresh - consensus nucleotide must explain >= fraction * of nucleotides in msa (ex: if cthresh = 0.8, and * A=0.6, C=0.01, G=0.25, U=0.14, consensus nucleotide = R (A|G)) * ret_cseq - RETURN: the consensus sequence [0..rflen-1] * * Returns eslOK on success. */ typedef struct nt2sort_s { double ntfreq; /* frequency of this nucleotide */ int ntidx; /* index of this nucleotide in alphabet (ex: 1 for 'C' in eslRNA) */ } nt2sort_t; int compare_by_ntfreq(const void *a_void, const void *b_void) { nt2sort_t *a, *b; a = (nt2sort_t *) a_void; b = (nt2sort_t *) b_void; if (a->ntfreq > b->ntfreq) return -1; else if (a->ntfreq < b->ntfreq) return 1; else return 0; } /* Function: get_consensus_nucleotide() * Date: EPN, Wed Apr 7 07:39:57 2010 * * Given a useme array: * [0..i..abc->K]: TRUE if nucleotide i is used, FALSE if not * Return the consensus nucleotide - the least ambiguous iupac * nucleotide that represents all TRUEs. For ex: [1,0,1,0] --> R * If is TRUE, return 'T' instead of 'U' when appropriate. * * Returns the consensus nucleotide. * * Degeneracies: * R = A|G * Y = C|U * M = A|C * K = G|U * S = C|G * W = A|U * H = A|C|U * B = C|G|U * V = A|C|G * D = A|G|U */ int get_consensus_nucleotide(int *useme, int K) { /* You brute! */ if((! useme[0]) && (! useme[1]) && (! useme[2]) && ( useme[3])) { return 'U'; } /* 0001 */ if((! useme[0]) && (! useme[1]) && ( useme[2]) && (! useme[3])) { return 'G'; } /* 0010 */ if((! useme[0]) && ( useme[1]) && (! useme[2]) && (! useme[3])) { return 'C'; } /* 0100 */ if(( useme[0]) && (! useme[1]) && (! useme[2]) && (! useme[3])) { return 'A'; } /* 1000 */ if(( useme[0]) && ( useme[1]) && ( useme[2]) && ( useme[3])) { return 'N'; } /* 1111 */ if((! useme[0]) && ( useme[1]) && ( useme[2]) && ( useme[3])) { return 'B'; } /* 0111 */ if(( useme[0]) && (! useme[1]) && ( useme[2]) && ( useme[3])) { return 'D'; } /* 1011 */ if(( useme[0]) && ( useme[1]) && ( useme[2]) && (! useme[3])) { return 'V'; } /* 1110 */ if(( useme[0]) && ( useme[1]) && (! useme[2]) && ( useme[3])) { return 'H'; } /* 1101 */ if((! useme[0]) && (! useme[1]) && ( useme[2]) && ( useme[3])) { return 'K'; } /* 0011 */ if((! useme[0]) && ( useme[1]) && ( useme[2]) && (! useme[3])) { return 'S'; } /* 0110 */ if(( useme[0]) && ( useme[1]) && (! useme[2]) && (! useme[3])) { return 'M'; } /* 1100 */ if((! useme[0]) && ( useme[1]) && (! useme[2]) && ( useme[3])) { return 'Y'; } /* 0101 */ if(( useme[0]) && (! useme[1]) && (! useme[2]) && ( useme[3])) { return 'W'; } /* 1001 */ if(( useme[0]) && (! useme[1]) && ( useme[2]) && (! useme[3])) { return 'R'; } /* 1010 */ if((! useme[0]) && (! useme[1]) && (! useme[2]) && (! useme[3])) { return '-'; } /* 0000 */ esl_fatal("coding error in consensus_nucleotide"); return ' '; /* NEVERREACHED */ } int get_consensus_seqs_from_abc_ct(const ESL_GETOPTS *go, SSPostscript_t *ps, char *errbuf, double **abc_ct, ESL_ALPHABET *abc, int64_t msa_alen) { int status; /* the Easel return status */ char *cseq_maj = NULL; /* the consensus sequence string based on majority rule that we're building */ char *cseq_amb = NULL; /* the consensus sequence string including ambiguities that we're building */ int rfpos, apos; /* counter over nongap RF, alignment positions */ float nongap_freq; /* for current position, fraction of nongap nucleotides from abc_ct */ float covered; /* fraction of nongap nucleotides currently covered while * calculating the consensus nucleotide */ int *nt_is_used; /* [0..a..abc->K-1] TRUE if nucleotide a is included for * current consensus nucleotide, FALSE if not */ nt2sort_t *sorted_ntfreq; /* [0..abc->K-1] sorted array of nt2sort structures */ int sorted_idx; /* index in sorted_ntfreq */ int a; /* counter over nucleotides in abc */ float cthresh = esl_opt_GetReal(go, "--cthresh"); float athresh = esl_opt_GetReal(go, "--athresh"); /* allocate and initialize */ ESL_ALLOC(cseq_maj, sizeof(char) * (ps->rflen+1)); ESL_ALLOC(cseq_amb, sizeof(char) * (ps->rflen+1)); cseq_maj[ps->rflen] = '\0'; cseq_amb[ps->rflen] = '\0'; ESL_ALLOC(sorted_ntfreq, sizeof(nt2sort_t) * (abc->K)); ESL_ALLOC(nt_is_used, sizeof(int) * (abc->K)); rfpos = 0; for(apos = 0; apos < msa_alen; apos++) { if(esl_abc_CIsResidue(abc, ps->msa->rf[apos])) { nongap_freq = esl_vec_DSum(abc_ct[apos], abc->K); if(esl_DCompare(nongap_freq, 0., eslSMALLX1) == eslOK) { /* all nucleotides are gaps */ cseq_maj[rfpos] = cseq_amb[rfpos] = '-'; } else { /* at least one sequence has a nongap at rfpos, calculate the consensus nucleotide */ for(a = 0; a < abc->K; a++) { sorted_ntfreq[a].ntfreq = abc_ct[apos][a] / nongap_freq; sorted_ntfreq[a].ntidx = a; } /* quicksort */ qsort(sorted_ntfreq, abc->K, sizeof(nt2sort_t), compare_by_ntfreq); covered = 0.; esl_vec_ISet(nt_is_used, abc->K, FALSE); sorted_idx = 0; /* determine majority rule nucleotide */ cseq_maj[rfpos] = (sorted_ntfreq[sorted_idx].ntfreq >= cthresh) ? toupper(abc->sym[sorted_ntfreq[sorted_idx].ntidx]) : tolower(abc->sym[sorted_ntfreq[sorted_idx].ntidx]); /* determine ambiguous nucleotide that covers > --athresh fraction of seqs */ while(covered < athresh) { nt_is_used[sorted_ntfreq[sorted_idx].ntidx] = TRUE; covered += sorted_ntfreq[sorted_idx].ntfreq; /*printf("RF: %4d SIDX: %d AIDX: %d FREQ: %.3f COVERED: %.3f\n", rfpos, sorted_idx, sorted_ntfreq[sorted_idx].ntidx, sorted_ntfreq[sorted_idx].ntfreq, covered);*/ sorted_idx++; } cseq_amb[rfpos] = get_consensus_nucleotide(nt_is_used, abc->K); } rfpos++; } } /* printf("\n"); */ ps->msa_cseq_maj = cseq_maj; ps->msa_cseq_amb = cseq_amb; free(sorted_ntfreq); free(nt_is_used); return eslOK; ERROR: ESL_FAIL(eslEMEM, errbuf, "Ran out of memory in get_consensus_seqs_from_abc_ct."); return eslEMEM; /* NEVERREACHED */ } /* Function: compare_two_cmyk_colors() * Date: EPN, Fri Apr 23 05:47:54 2010 * * Given four CMYK values defining a color * and four CMYK values defining a color , check if * and are the same color. Return TRUE if they * are and FALSE if not. * * acol_C - first CMYK value for color (Cyan) * acol_M - second CMYK value for color (Magenta) * acol_Y - third CMYK value for color (Yellow) * acol_K - fourth CMYK value for color (Key) * bcol_C - first CMYK value for color (Cyan) * bcol_M - second CMYK value for color (Magenta) * bcol_Y - third CMYK value for color (Yellow) * bcol_K - fourth CMYK value for color (Key) * * Returns TRUE if colors a and b are identical, FALSE if not. */ int compare_two_cmyk_colors(float acol_C, float acol_M, float acol_Y, float acol_K, float bcol_C, float bcol_M, float bcol_Y, float bcol_K) { if(esl_FCompare(acol_C, bcol_C, eslSMALLX1) != eslOK) return FALSE; if(esl_FCompare(acol_M, bcol_M, eslSMALLX1) != eslOK) return FALSE; if(esl_FCompare(acol_Y, bcol_Y, eslSMALLX1) != eslOK) return FALSE; if(esl_FCompare(acol_K, bcol_K, eslSMALLX1) != eslOK) return FALSE; return TRUE; } /* Function: define_outline_procedures() * Date: EPN, Sun May 2 10:36:32 2010 * * Given an open output postscript file, define * the three procedures for drawing outlines of * cells. * * Returns void. */ void define_outline_procedure(FILE *fp) { fprintf(fp, "\n/%s %% stack: x y cellsize linewidth (empty)\n", OUTLINE_PROCEDURE); fprintf(fp, "{\n");; fprintf(fp, " 0. 0. 0. 1. setcmykcolor\n");/* set linewidth as top value on stack */ fprintf(fp, " setlinewidth\n"); /* set linewidth as top value on stack */ fprintf(fp, " /cellsize exch def\n"); /* push /cellsize onto stack, invert top 2 els, and define cellsize */ fprintf(fp, " newpath moveto\n"); /* move to x, y, which are now on top of stack */ fprintf(fp, " currentlinewidth 2. div currentlinewidth 2. div rmoveto\n"); fprintf(fp, " 0 cellsize currentlinewidth sub rlineto\n"); fprintf(fp, " cellsize currentlinewidth sub 0 rlineto\n"); fprintf(fp, " 0 cellsize currentlinewidth sub -1 mul rlineto\n"); fprintf(fp, " closepath stroke\n"); fprintf(fp, "} def\n\n"); /* Old definitions, kept here for reference, note these only work with OUTLINE_LINEWIDTH of 1.0 */ /* //printing basic box outline fprintf(fp, "\n/%s %% stack: x y => ---\n", OUTLINE_MAX_PROCEDURE); fprintf(fp, "{ %.2f setlinewidth\n", OUTLINE_LINEWIDTH_MAX); fprintf(fp, " newpath moveto\n"); fprintf(fp, " %.2f %.2f rmoveto\n", OUTLINE_LINEWIDTH_MAX / 2., OUTLINE_LINEWIDTH_MAX / 2.); fprintf(fp, " 0 %.2f rlineto %.2f 0 rlineto 0 %.2f rlineto\n", CELLSIZE - OUTLINE_LINEWIDTH_MAX, CELLSIZE - OUTLINE_LINEWIDTH_MAX, -1 * (CELLSIZE - OUTLINE_LINEWIDTH_MAX)); fprintf(fp, " closepath gsave stroke grestore \n"); fprintf(fp, "} def\n\n"); //printing a double-line outline fprintf(fp, "\n/%s %% stack: x y => ---\n", OUTLINE_MAX_PROCEDURE); fprintf(fp, "{ %s\n", OUTLINE_MIN_PROCEDURE); fprintf(fp, " %.2f %.2f rmoveto\n", OUTLINE_LINEWIDTH * 2., OUTLINE_LINEWIDTH * 2.); fprintf(fp, " 0 %.2f rlineto %.2f 0 rlineto 0 %.2f rlineto\n", CELLSIZE - (5. * OUTLINE_LINEWIDTH), CELLSIZE - (5. * OUTLINE_LINEWIDTH), -1 * (CELLSIZE - (5. * OUTLINE_LINEWIDTH))); fprintf(fp, " closepath gsave stroke grestore \n"); fprintf(fp, "} def\n\n"); //drawing corners only for the outline fprintf(fp, "\n/outlinemin %% stack: x y => ---\n"); fprintf(fp, "{ newpath moveto\n"); fprintf(fp, " %.2f 0 rmoveto 0 %.2f rlineto closepath gsave stroke\n", OUTLINE_LINEWIDTH/2, CELLSIZE / 4.); fprintf(fp, " grestore 0 %.2f rmoveto 0 %.2f rlineto closepath gsave stroke\n", 3 * CELLSIZE / 4., CELLSIZE / 4. ); fprintf(fp, " grestore %.2f %.2f rmoveto %.2f 0 rlineto closepath gsave stroke\n", -1 * OUTLINE_LINEWIDTH / 2., 3 * OUTLINE_LINEWIDTH / 2., CELLSIZE / 4.); fprintf(fp, " grestore %.2f 0 rmoveto %.2f 0 rlineto closepath gsave stroke\n", 3 * CELLSIZE / 4., CELLSIZE / 4. ); fprintf(fp, " grestore %.2f %.2f rmoveto 0 %.2f rlineto closepath gsave stroke\n", 3 * OUTLINE_LINEWIDTH / 2., -3 * OUTLINE_LINEWIDTH/2, CELLSIZE / 4.); fprintf(fp, " grestore 0 %.2f rmoveto 0 %.2f rlineto closepath gsave stroke\n", -3 * CELLSIZE / 4., CELLSIZE / 4.); fprintf(fp, " grestore %.2f %.2f rmoveto %.2f 0 rlineto closepath gsave stroke\n", -3 * OUTLINE_LINEWIDTH / 2., OUTLINE_LINEWIDTH / 2., CELLSIZE / 4.); fprintf(fp, " grestore %.2f 0 rmoveto %.2f 0 rlineto closepath gsave stroke\n", -3 * CELLSIZE / 4., CELLSIZE / 4.); fprintf(fp, "} def\n"); //drawing corners plus a dash in the middle of each side for the outline fprintf(fp, "/outlinemid %% stack: x y => ---\n"); fprintf(fp, "{ \n"); fprintf(fp, " outlinemin\n"); fprintf(fp, " grestore %.2f %.2f rmoveto 0 %.2f rlineto closepath gsave stroke\n", OUTLINE_LINEWIDTH / 2., CELLSIZE / 4. + OUTLINE_LINEWIDTH / 2., CELLSIZE / 4.); fprintf(fp, " grestore %.2f %.2f rmoveto 0 %.2f rlineto closepath gsave stroke\n", CELLSIZE / 4. + OUTLINE_LINEWIDTH / 2., CELLSIZE / 2. + OUTLINE_LINEWIDTH / 2., CELLSIZE / 4.); fprintf(fp, " grestore %.2f %.2f rmoveto 0 %.2f rlineto closepath gsave stroke\n", CELLSIZE / 2. + OUTLINE_LINEWIDTH / 2., -1 * (CELLSIZE / 2. + OUTLINE_LINEWIDTH / 2.), CELLSIZE / 4.); fprintf(fp, " grestore %.2f %.2f rmoveto 0 %.2f rlineto closepath gsave stroke\n", -1 * (CELLSIZE / 2. + OUTLINE_LINEWIDTH / 2.), -1 * CELLSIZE / 4. + OUTLINE_LINEWIDTH / 2., CELLSIZE / 4.); fprintf(fp, " gsave\n"); fprintf(fp, "} def\n"); */ return; } /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/miniapps/esl-ssdraw.c $ * SVN $Id: esl-ssdraw.c 778 2012-07-06 12:39:18Z nawrockie $ *****************************************************************/ hmmer-3.1b2/easel/miniapps/esl-ssdraw.itest.pl0000775361611702660230000010570212473612611020757 0ustar wheelerteddy#! /usr/bin/perl # Integrated test of the esl-ssdraw miniapp. # # Usage: ./esl-ssdraw.itest.pl # Example: ./esl-ssdraw.itest.pl ./esl-ssdraw ../testsuite/trna-ssdraw.ps ../testsuite/trna-5.stk foo # # EPN, Tue Feb 9 12:22:29 2010 $eslssdraw = shift; $templatefile = shift; $alifile = shift; $tmppfx = shift; if (! -x "$eslssdraw") { die "FAIL: didn't find esl-ssdraw binary $eslssdraw"; } open(MASKFILE, ">$tmppfx.mask1") || die "FAIL: couldn't open $tmppfx.mask1 for writing maskfile"; print MASKFILE << "EOF"; 10010110101101111111111010101111111010101011010001100010101110101010101 EOF close MASKFILE; open(MASKFILE, ">$tmppfx.mask2") || die "FAIL: couldn't open $tmppfx.mask2 for writing maskfile"; print MASKFILE << "EOF"; 11011011111110101011111111111010101010100000000001001010011101010101010 EOF close MASKFILE; open(IFILE, ">$tmppfx.ifile") || die "FAIL: couldn't open $tmppfx.ifile for writing insert file"; print IFILE << "EOF"; tRNA 71 tRNA1 73 1 71 16 17 1 45 47 1 tRNA2 72 1 71 19 20 1 tRNA3 72 1 71 19 20 1 tRNA4 72 1 71 45 46 1 tRNA5 64 5 71 16 13 1 45 43 1 // EOF close IFILE; open(DFILE, ">$tmppfx.dfile") || die "FAIL: couldn't open $tmppfx.efile for writing draw file"; print DFILE << "EOF"; Example of using --dfile to specify colors These numbers mean what? 0.0 0.6 0.7 0.8 0.9 0.95 1.0 0.560 0.730 0.210 0.120 0.910 1.000 0.000 0.302 0.121 1.000 0.998 0.353 0.5 0.342 0.560 0.730 0.210 0.120 0.910 1.000 0.000 0.302 0.121 1.000 0.998 0.353 0.5 0.342 0.560 0.730 0.210 0.120 0.910 1.000 0.000 0.302 0.121 1.000 0.998 0.353 0.5 0.342 0.560 0.730 0.210 0.120 0.910 1.000 0.000 0.302 0.121 1.000 0.998 0.353 0.5 0.342 0.560 0.730 0.210 0.120 0.910 1.000 0.000 0.302 0.121 1.000 0.998 0.353 0.5 0.342 0.342 // Another example of using --dfile to specify colors Meaning is unknown 0.0 0.1 0.2 0.3 0.4 0.5 1.0 0.560 0.730 0.210 0.120 0.910 1.000 0.000 0.302 0.121 1.000 0.998 0.353 0.5 0.342 0.560 0.730 0.210 0.120 0.910 1.000 0.000 0.302 0.121 1.000 0.998 0.353 0.5 0.342 0.560 0.730 0.210 0.120 0.910 1.000 0.000 0.302 0.121 1.000 0.998 0.353 0.5 0.342 0.560 0.730 0.210 0.120 0.910 1.000 0.000 0.302 0.121 1.000 0.998 0.353 0.5 0.342 0.560 0.730 0.210 0.120 0.910 1.000 0.000 0.302 0.121 1.000 0.998 0.353 0.5 0.342 0.342 // EOF close DFILE; open(EFILE, ">$tmppfx.efile") || die "FAIL: couldn't open $tmppfx.efile for writing draw file"; print EFILE << "EOF"; 0.228 0.636 0.044 0.680 0.470 0.564 0.932 0.933 0.034 0.171 0.204 0.137 0.471 0.725 0.013 0.246 0.414 0.111 0.478 0.329 0.947 0.110 0.870 0.230 0.789 0.964 0.649 0.174 0.991 0.362 0.028 0.634 0.977 0.838 0.265 0.046 0.024 0.806 0.148 0.647 0.235 0.891 0.594 0.694 0.799 0.366 0.073 0.013 0.914 0.393 0.793 0.826 0.054 0.786 0.486 0.386 0.794 0.360 0.061 0.304 0.070 0.866 0.646 0.961 0.217 0.462 0.220 0.608 0.446 0.715 0.516 0.287 0.546 0.924 0.456 0.468 0.438 0.035 0.613 0.031 0.321 0.437 0.935 0.336 0.101 0.275 0.089 0.410 0.714 0.681 0.622 0.676 0.315 0.079 0.850 0.917 0.524 0.897 0.908 0.902 0.460 0.826 0.039 0.979 0.041 0.130 0.599 0.122 0.181 0.234 0.813 0.157 0.514 0.145 0.386 0.801 0.183 0.929 0.161 0.588 0.852 0.746 0.189 0.836 0.455 0.580 0.439 0.373 0.473 0.212 0.655 0.536 0.678 0.744 0.434 0.793 0.844 0.816 0.646 0.459 0.806 0.807 0.002 0.304 0.395 0.972 0.800 0.119 0.981 0.492 0.752 0.463 0.926 0.327 0.066 0.099 0.029 0.252 0.846 0.134 0.571 0.306 0.698 0.213 0.711 0.470 0.680 0.522 0.639 0.930 0.336 0.968 0.839 0.824 0.118 0.877 0.399 0.449 0.675 0.740 0.105 0.341 0.014 0.971 0.965 0.277 0.691 0.732 0.198 0.648 0.903 0.804 0.958 0.939 0.561 0.028 0.359 0.665 0.162 0.298 0.581 0.260 0.237 0.773 0.042 0.540 0.410 0.190 0.013 0.841 0.068 0.796 0.763 0.904 0.601 0.677 0.849 0.928 0.010 0.797 0.517 0.658 0.094 0.870 0.378 0.132 0.736 0.559 0.385 0.358 0.951 0.566 0.100 0.141 0.397 0.492 0.091 0.913 0.870 0.351 0.819 0.429 0.862 0.267 0.263 0.777 0.427 0.602 0.005 0.225 0.023 0.157 0.154 0.009 0.800 0.514 0.915 0.456 0.162 0.235 0.374 0.595 0.678 0.901 0.099 0.163 0.410 0.515 0.969 0.191 0.912 0.117 0.557 0.919 0.084 0.690 0.846 0.032 0.300 0.158 0.736 0.131 0.007 0.138 // 0.0 0.0 0.0 0.0 T 0.0 0.0 0.0 0.0 h 0.0 0.0 0.0 0.0 i 0.0 0.0 0.0 0.0 s 0.0 0.0 0.0 0.0 i 0.0 0.0 0.0 0.0 s 0.0 0.0 0.0 0.0 a 0.0 0.0 0.0 0.0 t 0.0 0.0 0.0 0.0 R 0.0 0.0 0.0 0.0 N 0.0 0.0 0.0 0.0 A 0.0 0.0 0.0 0.0 T 0.0 0.0 0.0 0.0 h 0.0 0.0 0.0 0.0 i 0.0 0.0 0.0 0.0 s 0.0 0.0 0.0 0.0 i 0.0 0.0 0.0 0.0 s 0.0 0.0 0.0 0.0 a 0.0 0.0 0.0 0.0 t 0.0 0.0 0.0 0.0 R 0.0 0.0 0.0 0.0 N 0.0 0.0 0.0 0.0 A 0.0 0.0 0.0 0.0 T 0.0 0.0 0.0 0.0 h 0.0 0.0 0.0 0.0 i 0.0 0.0 0.0 0.0 s 0.0 0.0 0.0 0.0 i 0.0 0.0 0.0 0.0 s 0.0 0.0 0.0 0.0 a 0.0 0.0 0.0 0.0 t 0.0 0.0 0.0 0.0 R 0.0 0.0 0.0 0.0 N 0.0 0.0 0.0 0.0 A 0.0 0.0 0.0 0.0 T 0.0 0.0 0.0 0.0 h 0.0 0.0 0.0 0.0 i 0.0 0.0 0.0 0.0 s 0.0 0.0 0.0 0.0 i 0.0 0.0 0.0 0.0 s 0.0 0.0 0.0 0.0 a 0.0 0.0 0.0 0.0 t 0.0 0.0 0.0 0.0 R 0.0 0.0 0.0 0.0 N 0.0 0.0 0.0 0.0 A 0.0 0.0 0.0 0.0 T 0.0 0.0 0.0 0.0 h 0.0 0.0 0.0 0.0 i 0.0 0.0 0.0 0.0 s 0.0 0.0 0.0 0.0 i 0.0 0.0 0.0 0.0 s 0.0 0.0 0.0 0.0 a 0.0 0.0 0.0 0.0 t 0.0 0.0 0.0 0.0 R 0.0 0.0 0.0 0.0 N 0.0 0.0 0.0 0.0 A 0.0 0.0 0.0 0.0 T 0.0 0.0 0.0 0.0 h 0.0 0.0 0.0 0.0 i 0.0 0.0 0.0 0.0 s 0.0 0.0 0.0 0.0 i 0.0 0.0 0.0 0.0 s 0.0 0.0 0.0 0.0 a 0.0 0.0 0.0 0.0 t 0.0 0.0 0.0 0.0 R 0.0 0.0 0.0 0.0 N 0.0 0.0 0.0 0.0 A 0.0 0.0 0.0 0.0 T 0.0 0.0 0.0 0.0 h 0.0 0.0 0.0 0.0 i 0.0 0.0 0.0 0.0 s 0.0 0.0 0.0 0.0 i // EOF close EFILE; $output = `$eslssdraw -h`; if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly"; } if ($output !~ /Usage: esl-ssdraw/) { die "FAIL: help output not right"; } # We do 2 runs of most tests, with and without --small $smallA[0] = ""; $smallA[1] = "--small "; # Note: these tests are less rigorous than similar ones for other miniapps because esl-ssdraw # creates a postscript file and to test that it was created properly we'd really want to open # it in a postscript viewer and look at it. Since we can't do that easily in an automated way, # I simply check the postscript file for text that I know should be there. for($pass = 0; $pass < 2; $pass++) { $pass2write = $pass+1; system("$eslssdraw $smallA[$pass] $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\(tRNA 71 21\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\(\\\[0.800-1.200\\\)\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\(tRNA 71 21\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\%nucleotide 9\nnewpath\n.+0.00\d* 0.21\d* 1.00\d* 0.00\d* setcmykcolor/s) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } system("$eslssdraw $smallA[$pass] -d $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\(tRNA 71 21\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\(\\\[0.800-1.200\\\)\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\(tRNA 71 21\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\%nucleotide 9\nnewpath\n.+0.00\d* 0.21\d* 1.00\d* 0.00\d* setcmykcolor/s) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --prob $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\(tRNA 71 21\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\(\\\[0.900-0.950\\\)\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\%nucleotide 18\nnewpath\n.+0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/s) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --ifreq $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\(tRNA 71 21\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\(\\\[0.500-1.000\\\]\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\%nucleotide 19\nnewpath\n.+0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.00\d* 0.63\d* 1.00\d* 0.00\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --iavglen $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\(tRNA 71 21\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\(>= 10\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\%nucleotide 19\nnewpath\n.+moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.92\d* 0.84\d* 0.00\d* 0.08\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --dall $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\(tRNA 71 21\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\(zero deletions\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\%nucleotide 1\nnewpath\n.+moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.42\d* 0.00\d* 1.00\d* 0.00\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --dint $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\(tRNA 71 21\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\(zero internal deletions\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\%nucleotide 1\nnewpath\n.+moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.00\d* 0.00\d* 0.00\d* 0.20\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --mutinfo $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\(tRNA 71 21\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\(0 complete basepairs\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\%nucleotide 61\nnewpath\n.+moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.42\d* 0.00\d* 1.00\d* 0.00\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --span $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\(tRNA 71 21\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\(no sequences span\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\%nucleotide 2\nnewpath\n.+0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --span $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\(tRNA 71 21\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\(no sequences span\)/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } if($output !~ /\%nucleotide 2\nnewpath\n.+moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --info --prob --ifreq --dall --dint --mutinfo --span --tabfile $tmppfx.tab $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /setcmykcolor \(g\).+moveto show/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } $output = `cat $tmppfx.tab`; if($output !~ /Information content data/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } if($output !~ /Mutual information data/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } if($output !~ /Insert frequency data/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } if($output !~ /Delete data/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } if($output !~ /Internal delete data/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } if($output !~ /Average posterior probability data/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } if($output !~ /Span data/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } if($output !~ /infocontent 7 1.27\d+ 5 4/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } if($output !~ /mutualinfo 16 30 38 0.47\d* 0.47\d* 0.76\d* 5 5/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } if($output !~ /insertfreq 45 0.60000 5 6/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } if($output !~ /deleteall 67 0.20\d* 4/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } if($output !~ /deleteint 67 0.00\d* 4 0/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } if($output !~ /avgpostprob 19 0.88\d* 5 4/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } if($output !~ /span 67 0.80\d* 6/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --rf $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\(\*REFERENCE\* \(\"#=GC RF\"\)\) 212.49 418.24 moveto show/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\(a\) 110.00 332.00 moveto show/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($pass == 0) { system("$eslssdraw $smallA[$pass] --indi $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; # should include tRNA2, tRNA3, and tRNA5 only if($output !~ /tRNA1/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA2/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA3/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA4/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA5/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\%nucleotide 19\nnewpath\n 108.40 306.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\(A\) 180.00 392.00 moveto show/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\%nucleotide 19\nnewpath\n 108.40 306.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.00\d* 0.21\d* 1.00\d* 0.00\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } } system("$eslssdraw $smallA[$pass] --mask-col --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\%nucleotide 3\nnewpath\n 166.40 374.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.00\d* 1.00\d* 0.00\d* 0.00\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --mask-diff $tmppfx.mask2 --mask-col --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\%nucleotide 3\nnewpath\n 166.40 374.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.00\d* 0.00\d* 0.00\d* 0.20\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --mask-diff $tmppfx.mask2 --mask-col --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\%nucleotide 3\nnewpath\n 166.40 374.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.00\d* 0.00\d* 0.00\d* 0.20\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --no-leg $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output =~ /\(LEGEND\) 134.00 216.00 moveto show/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --no-head $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output =~ /\(tRNA 71 21\) 96.98 418.24 moveto show/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --no-foot $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output =~ /\(Created by 'esl-ssdraw'. Copyright \(C\) 2010 Howard Hughes Medical Institute.\) 12.00 12.00 moveto show/) { die "FAIL: postscript diagram drawn incorrectly on pass $pass2write"; } # --small is incompatible with --indi: if($pass == 0) { system("$eslssdraw $smallA[$pass] --no-pp --indi $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; # should include tRNA2, tRNA3, and tRNA5 only if($output !~ /tRNA1/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA2/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA3/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA4/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA5/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\%nucleotide 19\nnewpath\n 108.40 306.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\(A\) 180.00 392.00 moveto show/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output =~ /\%nucleotide 19\nnewpath\n 108.40 306.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.92\d* 0.84\d* 0.00\d* 0.08\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\(Watson-Crick/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\(Positions !=/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --no-bp --indi $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; # should include tRNA2, tRNA3, and tRNA5 only if($output !~ /tRNA1/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA2/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA3/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA4/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA5/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\%nucleotide 19\nnewpath\n 108.40 306.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\(A\) 180.00 392.00 moveto show/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\%nucleotide 19\nnewpath\n 108.40 306.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.92\d* 0.84\d* 0.00\d* 0.08\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output =~ /\(Watson-Crick/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\(Positions !=/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --no-ol --indi $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; # should include tRNA2, tRNA3, and tRNA5 only if($output !~ /tRNA1/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA2/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA3/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA4/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA5/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\%nucleotide 19\nnewpath\n 108.40 306.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\(A\) 180.00 392.00 moveto show/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\%nucleotide 19\nnewpath\n 108.40 306.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.92\d* 0.84\d* 0.00\d* 0.08\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\(Watson-Crick/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output =~ /\(Positions !=/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } # NOTE: for --no-ntpp we don't actually check that residues are not drawn on PP diagrams system("$eslssdraw $smallA[$pass] --no-ntpp --indi $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; # should include tRNA2, tRNA3, and tRNA5 only if($output !~ /tRNA1/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA2/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA3/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA4/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /tRNA5/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\%nucleotide 19\nnewpath\n 108.40 306.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.50\d* 0.00\d* 0.00\d* 0.50\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\(A\) 180.00 392.00 moveto show/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\%nucleotide 19\nnewpath\n 108.40 306.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.92\d* 0.84\d* 0.00\d* 0.08\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\(Watson-Crick/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } if($output !~ /\(Positions !=/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } } system("$eslssdraw $smallA[$pass] --no-cnt --info $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output =~ /setcmykcolor (g)\s+168\.\d+\s+392\.\d+\s+moveto show/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --cthresh 0.4 --info $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output =~ /setcmykcolor (G)\s+168\.\d+\s+392\.\d+\s+moveto show/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --cambig --info $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output =~ /setcmykcolor (K)\s+168\.\d+\s+392\.\d+\s+moveto show/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --cambig --cthresh 0.4 --info $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output =~ /setcmykcolor (C)\s+168\.\d+\s+376\.\d+\s+moveto show/) { die "FAIL: tab file incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\%nucleotide 3\nnewpath\n 171.00 379.00 3.0 0 360 arc closepath\n 0.0\d*0 0.63\d* 1.0\d*0 0.0\d*0 setcmykcolor\n stroke/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --mask-x --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /stroke\n 175.00 375.00 moveto -8.0 8.0 rlineto closepath/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --mask-u --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\%nucleotide 3\nnewpath\n 168.00 376.00 moveto 0 6.0 rlineto 6.0 0 rlineto 0 -6.0 rlineto closepath\n 0.00\d* 0.63\d* 1.00\d* 0.00\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --mask-a --mask-x --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /%nucleotide 3\nnewpath\n 0.00\d* 0.63\d* 1.00\d* 0.00\d* setcmykcolor\n 167.00 375.00 moveto 8.0 8.0 rlineto closepath\n stroke/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --mask-a --mask-u --mask $tmppfx.mask1 $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\%nucleotide 3\nnewpath\n 168.50 376.50 moveto 0 5.0 rlineto 5.0 0 rlineto 0 -5.0 rlineto closepath\n 0.00\d* 0.63\d* 1.00\d* 0.00\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --dfile $tmppfx.dfile $alifile $templatefile $tmppfx.ps > /dev/null"); $output = `cat $tmppfx.ps`; if($output !~ /%nucleotide 3\nnewpath\n 166.40 374.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.92\d* 0.84\d* 0.00\d* 0.08\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --mask $tmppfx.mask1 --dfile $tmppfx.dfile $alifile $templatefile $tmppfx.ps > /dev/null"); $output = `cat $tmppfx.ps`; if($output !~ /%nucleotide 3\nnewpath\n 171.00 379.00 3.0 0 360 arc closepath\n 0.9200 0.8400 0.00\d* 0.0800 setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --efile $tmppfx.efile $alifile $templatefile $tmppfx.ps > /dev/null"); $output = `cat $tmppfx.ps`; if($output !~ /\%nucleotide 3\nnewpath\n 166.40 374.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.03 0.17 0.20 0.14 setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } system("$eslssdraw $smallA[$pass] --ifreq --ifile $tmppfx.ifile $alifile $templatefile $tmppfx.ps > /dev/null"); if ($? != 0) { die "FAIL: esl-ssdraw failed unexpectedly on pass $pass2write";} $output = `cat $tmppfx.ps`; if($output !~ /\%nucleotide 45\nnewpath\n 198.40 312.40 moveto 0 8 rlineto 8 0 rlineto 0 -8 rlineto closepath\n 0.00\d* 0.94\d* 1.00\d* 0.00\d* setcmykcolor/) { die "FAIL: postscript diagram drawn incorrectly written on pass $pass2write"; } } print "ok\n"; unlink "$tmppfx.mask1"; unlink "$tmppfx.mask2"; unlink "$tmppfx.ifile"; unlink "$tmppfx.dfile"; unlink "$tmppfx.efile"; unlink "$tmppfx.ps"; unlink "$tmppfx.tab"; unlink "$tmppfx.stk"; exit 0; hmmer-3.1b2/easel/miniapps/esl-construct.man0000664361611702660230000001146312473612611020506 0ustar wheelerteddy.TH "esl-construct" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps" .SH NAME .TP esl-construct - describe or create a consensus secondary structure .SH SYNOPSIS .B esl-construct .I [options] .I msafile .SH DESCRIPTION .B esl-construct reports information on existing consensus secondary structure annotation of an alignment or derives new consensus secondary structures based on structure annotation for individual aligned sequences. .PP The alignment file must contain either individual sequence secondary structure annotation (Stockholm #=GR SS), consensus secondary structure annotation (Stockohlm #=GC SS_cons), or both. All structure annotation must be in WUSS notation (Vienna dot paranetheses notation will be correctly interpreted). At present, the alignment file must be in Stockholm format and contain RNA or DNA sequences. .PP By default, .B esl-construct generates lists the sequences in the alignment that have structure annotation and the number of basepairs in those structures. If the alignment also contains consensus structure annotation, the default output will list how many of the individual basepairs overlap with the consensus basepairs and how many conflict with a consensus basepair. .PP For the purposes of this miniapp, a basepair 'conflict' exists between two basepairs in different structures, one between columns i and j and the other between columns k and l, if (i == k and j != l) or (j == l and i != k). .PP .B esl-construct can also be used to derive a new consensus structure based on structure annotation for individual sequences in the alignment by using any of the following options: .B -x, .B -r, .B -c, .BI --indi " ", .BI --ffreq " ", .B --fmin. These are described below. All of these options require the .BI -o " " option be used as well to specify that a new alignment file .I be created. Differences between the new alignment(s) and the input alignment(s) will be limited to the the consensus secondary structure (#=GC SS_cons) annotation and possibly reference (#=GC RF) annotation. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .B -a List all alignment positions that are involved in at least one conflicting basepair in at least one sequence to the screen, and then exit. .TP .B -v Be verbose; with no other options, list individual sequence basepair conflicts as well as summary statistics. .TP .B -x Compute a new consensus structure as the maximally sized set of basepairs (greatest number of basepairs) chosen from all individual structures that contains 0 conflicts. Output the alignment with the new SS_cons annotation. This option must be used in combination with the .B -o option. .TP .B -r Remove any consensus basepairs that conflict with >= 1 individual basepair and output the alignment with the new SS_cons annotation. This option must be used in combination with the .B -o option. .TP .B -c Define a new consensus secondary structure as the individual structure annotation that has the maximum number of consistent basepairs with the existing consensus secondary structure annotation. This option must be used in combination with the .B -o option. .TP .B --rfc With .B -c, set the reference annotation (#=GC RF) as the sequence whose individual structure becomes the consensus structure. .TP .BI --indi " " Define a new consensus secondary structure as the individual structure annotation from sequence named .I . This option must be used in combination with the .B -o option. .TP .B --rfindi With .BI --indi " ", set the reference annotation (#=GC RF) as the sequence named .B . .TP .BI --ffreq " " Define a new consensus structure as the set of basepairs between columns i:j that are paired in more than .I fraction of the individual sequence structures. This option must be used in combination with the .B -o option. .TP .B --fmin Same as .BI --ffreq " " except find the maximal .I that gives a consistent consensus structure. A consistent structure has each base (alignment position) as a member of at most 1 basepair. .TP .BI -o " ", Output the alignment(s) with new consensus structure annotation to file .I . .TP .B --pfam With -o, specify that the alignment output format be Pfam format, a special type of non-interleaved Stockholm on which each sequence appears on a single line. .TP .BI -l " " Create a new file .I that lists the sequences that have at least one basepair that conflicts with a consensus basepair. .TP .BI --lmax " " With -l, only list sequences that have more than .I basepairs that conflict with the consensus structure to the list file. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-construct.itest.pl0000775361611702660230000002162212473612611021476 0ustar wheelerteddy#! /usr/bin/perl # Integrated test of the esl-construct miniapp. # # Usage: ./esl-construct.itest.pl # Example: ./esl-construct.itest.pl ./esl-construct foo # # EPN, Tue Feb 2 13:19:44 2010 $eslconstruct= shift; $tmppfx = shift; if (! -x "$eslconstruct") { die "FAIL: didn't find esl-construct binary $eslconstruct"; } open(ALIFILE, ">$tmppfx.1") || die "FAIL: couldn't open $tmppfx.1 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GF AU Infernal 0.1 simpex-1 --AGA-CUUCG-GUCGCUCG-UAACAG #=GR simpex-1 SS ..:<<-<____->>>-<<-<.___>>> simpex-2 aaAAUACGUCGGCUG-AAUACCCAGUA #=GR simpex-2 SS ..::<<<____>->>--<-.<___>>: simpex-3 --ACGUUUUG-GAACGGG-U-CCAACC #=GR simpex-3 SS ..::<<<____>->>-<<-<.___>>> #=GC SS_cons ..::<<<____>->>-<<-<.___>>> #=GC RF ..AAgaCUUCGGAucgggCg.AcAccc // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.2") || die "FAIL: couldn't open $tmppfx.1 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GF AU Infernal 0.1 simpex-1 --AGA-CUUCG-GUCGCUCG-UAACAG simpex-2 aaAAUACGUCGGCUG-AAUACCCAGUA simpex-3 --ACGUUUUG-GAACGGG-U-CCAACC #=GC SS_cons ..::<<<____>->>-<<-<.___>>> #=GC RF ..AAgaCUUCGGAucgggCg.AcAccc // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.3") || die "FAIL: couldn't open $tmppfx.1 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GF AU Infernal 0.1 simpex-1 --AGA-CUUCG-GUCGCUCG-UAACAG #=GR simpex-1 SS ..:<<-<____->>>-<<-<.___>>> simpex-2 aaAAUACGUCGGCUG-AAUACCCAGUA #=GR simpex-2 SS ..::<<<____>->>--<-.<___>>: simpex-3 --ACGUUUUG-GAACGGG-U-CCAACC #=GR simpex-3 SS ..::<<<____>->>-<<-<.___>>> // EOF close ALIFILE; $output = `$eslconstruct -h`; if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } if ($output !~ /Usage: esl-construct/) { die "FAIL: help output not right"; } $output = `$eslconstruct $tmppfx.1 2>&1`; if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } if ($output !~ / simpex-2 5 4 4 1/) { die "FAIL: structure stats calculated incorrectly"; } if ($output !~ /SS\_cons\(consensus\) 6 6 6 0/) { die "FAIL: structure stats calculated incorrectly"; } if ($output !~ /13\/ 17 \(0.765\) overlap/) { die "FAIL: structure stats calculated incorrectly"; } $output = `$eslconstruct $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } if ($output !~ /SS\_cons\(consensus\) 6 6 6 0/) { die "FAIL: structure stats calculated incorrectly"; } $output = `$eslconstruct $tmppfx.3 3>&1`; if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } if ($output !~ /simpex-2 5/) { die "FAIL: structure stats calculated incorrectly"; } $output = `$eslconstruct -a $tmppfx.1 2>&1`; if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } if ($output !~ /More than 1 right mates for left mate 7 7: 12 bp exists in 2\/ 3 seqs/) { die "FAIL: structure stats calculated incorrectly"; } if ($output !~ /More than 1 right mates for left mate 7 7: 13 bp exists in 1\/ 3 seqs/) { die "FAIL: structure stats calculated incorrectly"; } if ($output !~ /More than 1 left mates for right mate 25 20: 25 bp exists in 2\/ 3 seqs/) { die "FAIL: structure stats calculated incorrectly"; } if ($output !~ /More than 1 left mates for right mate 25 21: 25 bp exists in 1\/ 3 seqs/) { die "FAIL: structure stats calculated incorrectly"; } $output = `$eslconstruct -v $tmppfx.1 2>&1`; if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } if ($output !~ / simpex-2 5 4 4 1/) { die "FAIL: structure stats calculated incorrectly"; } if ($output !~ /SS\_cons\(consensus\) 6 6 6 0/) { die "FAIL: structure stats calculated incorrectly"; } if ($output !~ /13\/ 17 \(0.76\d+\) overlap/) { die "FAIL: structure stats calculated incorrectly"; } if ($output !~ /ali: 1 seq 0 \(simpex-1\) bp 5: 14 conflicts with consensus bp 5: 15/) { die "FAIL: structure stats calculated incorrectly"; } system("$eslconstruct -o $tmppfx.stk -x $tmppfx.1 > /dev/null"); if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } $output = `cat $tmppfx.stk`; if ($output !~ /\#=GC SS_cons ::::::::::::::::<<_______>>/) { die "FAIL: consensus structure calculated incorrectly"; } system("$eslconstruct -o $tmppfx.stk -r $tmppfx.1 > /dev/null"); if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } $output = `cat $tmppfx.stk`; if ($output !~ /\#=GC SS_cons :::::<_______>::<<_______>>/) { die "FAIL: consensus structure calculated incorrectly"; } system("$eslconstruct -o $tmppfx.stk -c $tmppfx.1 > /dev/null"); if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } $output = `cat $tmppfx.stk`; if ($output !~ /#=GC SS_cons ::::<<<____>->>:<<-<____>>>/) { die "FAIL: consensus stucture calculated incorrectly"; } system("$eslconstruct -o $tmppfx.stk -c --rfc $tmppfx.1 > /dev/null"); if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } $output = `cat $tmppfx.stk`; if ($output !~ /#=GC SS_cons ::::<<<____>->>:<<-<____>>>/) { die "FAIL: consensus stucture calculated incorrectly"; } if ($output !~ /#=GC RF --ACGUUUUG-GAACGGG-U-CCAACC/) { die "FAIL: consensus stucture calculated incorrectly"; } system("$eslconstruct -o $tmppfx.stk --indi simpex-2 $tmppfx.1 > /dev/null"); if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } $output = `cat $tmppfx.stk`; if ($output !~ /\#=GC SS_cons ::::<<<____>->>::<--<___>>:/) { die "FAIL: consensus stucture calculated incorrectly"; } system("$eslconstruct -o $tmppfx.stk --indi simpex-2 --rfindi $tmppfx.1 > /dev/null"); if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } $output = `cat $tmppfx.stk`; if ($output !~ /\#=GC SS_cons ::::<<<____>->>::<--<___>>:/) { die "FAIL: consensus stucture calculated incorrectly"; } if ($output !~ /\#=GC RF AAAAUACGUCGGCUG-AAUACCCAGUA/) { die "FAIL: consensus stucture calculated incorrectly"; } system("$eslconstruct -o $tmppfx.stk --ffreq 0.6 $tmppfx.1 > /dev/null"); if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } $output = `cat $tmppfx.stk`; if ($output !~ /#=GC SS_cons ::::<<<____>->>:<<-<____>>>/) { die "FAIL: consensus stucture calculated incorrectly"; } system("$eslconstruct -o $tmppfx.stk --ffreq 0.7 $tmppfx.1 > /dev/null"); if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } $output = `cat $tmppfx.stk`; if ($output !~ /#=GC SS_cons :::::::::::::::::<_______>:/) { die "FAIL: consensus stucture calculated incorrectly"; } system("$eslconstruct -o $tmppfx.stk --fmin $tmppfx.1 > /dev/null"); if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } $output = `cat $tmppfx.stk`; if ($output !~ /#=GC SS_cons ::::<<<____>->>:<<-<____>>>/) { die "FAIL: consensus stucture calculated incorrectly"; } system("$eslconstruct -l $tmppfx.list -o $tmppfx.stk --fmin $tmppfx.1 > /dev/null"); if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } $output = `cat $tmppfx.list`; if ($output !~ /simpex-1/) { die "FAIL: consensus stucture calculated incorrectly"; } if ($output !~ /simpex-2/) { die "FAIL: consensus stucture calculated incorrectly"; } system("$eslconstruct --lmax 1 -l $tmppfx.list -o $tmppfx.stk --fmin $tmppfx.1 > /dev/null"); if ($? != 0) { die "FAIL: esl-construct failed unexpectedly"; } $output = `cat $tmppfx.list`; if ($output !~ /simpex-1/) { die "FAIL: consensus stucture calculated incorrectly"; } if ($output =~ /simpex-2/) { die "FAIL: consensus stucture calculated incorrectly"; } print "ok\n"; unlink "$tmppfx.1"; unlink "$tmppfx.2"; unlink "$tmppfx.3"; unlink "$tmppfx.stk"; unlink "$tmppfx.list"; exit 0; hmmer-3.1b2/easel/miniapps/esl-histplot.c0000664361611702660230000002413512473612611017777 0ustar wheelerteddy/* esl-histplot - collate data into a histogram and output xmgrace datafile. * * SRE, Tue Feb 21 14:18:05 2006 * SVN $Id: esl-histplot.c 400 2009-10-12 10:38:07Z nawrockie $ */ /* Wish list * - segfaults if you feed it nonnumeric data */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_histogram.h" #include "esl_exponential.h" #include "esl_gumbel.h" static char banner[] = "collate a data histogram, output xmgrace datafile"; static char usage[] = "[-options] "; static ESL_OPTIONS options[] = { /* name type default env rng togs reqs inc help docgrp */ {"-h", eslARG_NONE, FALSE,NULL,NULL, NULL,NULL,NULL,"show help and usage", 1 }, {"-o", eslARG_OUTFILE, NULL,NULL,NULL, NULL,NULL,NULL,"output file for plot (default is stdout)", 1 }, {"-b", eslARG_NONE, FALSE,NULL,NULL, NULL,NULL,NULL,"input file is binary, array of doubles", 2 }, {"-f", eslARG_INT, "1",NULL,"n>0",NULL,NULL,"-b","which field to read on text line (1..n)", 2 }, {"-w", eslARG_REAL, "1.0",NULL,NULL, NULL,NULL,NULL,"bin size for histogram", 3 }, {"--min", eslARG_REAL, "-100.",NULL,NULL, NULL,NULL,NULL,"initial lower bound of histogram", 3 }, {"--max", eslARG_REAL, "100.",NULL,NULL, NULL,NULL,NULL,"initial upper bound of histogram", 3 }, {"--surv", eslARG_NONE, FALSE,NULL,NULL, NULL,NULL,NULL,"output survival plot, not histogram", 3 }, {"--gumbel", eslARG_NONE, FALSE, NULL,NULL, NULL,NULL,NULL,"fit data to a Gumbel distribution", 4 }, {"--trunc", eslARG_REAL, NULL, NULL,NULL, NULL,"--gumbel",NULL,"with --gumbel, specify data is truncated, min value is ", 4 }, {"--exptail", eslARG_NONE, FALSE, NULL,NULL, NULL,NULL,NULL,"fit tail to an exponential distribution", 4 }, {"--gumloc", eslARG_NONE, FALSE, NULL,NULL, NULL,NULL,NULL,"fit data to a Gumbel distribution w/ known lambda", 4 }, {"--exptailloc",eslARG_NONE, FALSE, NULL,NULL, NULL,NULL,NULL,"fit tail to an exponential tail w/ known lambda", 4 }, {"--showgum", eslARG_NONE, FALSE, NULL,NULL, NULL,"--mu",NULL,"plot a known Gumbel for comparison", 4 }, {"--showexp", eslARG_NONE, FALSE, NULL,NULL, NULL,"--mu",NULL,"plot a known exponential tail for comparison", 4 }, {"--lambda", eslARG_REAL,"0.693", NULL,NULL, NULL,NULL,NULL,"set known lambda", 4 }, {"--mu", eslARG_REAL, "0.0", NULL,NULL, NULL,NULL,NULL,"set known mu", 4 }, {"-t", eslARG_REAL, "0.01", NULL,NULL, NULL,NULL,NULL,"set tail mass to fit to", 4 }, { 0,0,0,0,0,0,0,0,0,0}, }; int main(int argc, char **argv) { ESL_HISTOGRAM *h; /* full histogram w/ collated values */ ESL_GETOPTS *go; /* application configuration */ char *datafile; /* input data; "-" means stdin */ FILE *ifp; /* input stream */ double x; /* value of field, after conversion to double */ int which_field; /* which field to use as data, 1..nf (default 1)*/ char *outfile; /* output xmgrace xy data file */ FILE *ofp; /* output data stream */ double hmin; /* initial histogram lower bound */ double hmax; /* initial histogram upper bound */ double hbinsize; /* histogram's bin size */ double *xv; int n; double params[2]; double lambda; double mu; double tailp; /***************************************************************** * Parse the command line *****************************************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "-h")) { esl_banner(stdout, argv[0], banner); esl_usage (stdout, argv[0], usage); puts("\nGeneral options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* 1= group; 2 = indentation; 80=textwidth*/ puts("\nOptions that control how to read the input file:"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); /* 2= group; 2 = indentation; 80=textwidth*/ puts("\nOptions that control how to display the output XY file:"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); /* 3= group; 2 = indentation; 80=textwidth*/ puts("\nOptional ML fitting or plotting of distributions for comparison:"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); /* 4= group; 2 = indentation; 80=textwidth*/ return eslOK; } which_field = esl_opt_GetInteger(go, "-f"); outfile = esl_opt_GetString (go, "-o"); tailp = esl_opt_GetReal (go, "-t"); hbinsize = esl_opt_GetReal (go, "-w"); hmin = esl_opt_GetReal (go, "--min"); hmax = esl_opt_GetReal (go, "--max"); lambda = esl_opt_GetReal (go, "--lambda"); mu = esl_opt_GetReal (go, "--mu"); if (esl_opt_ArgNumber(go) != 1) { printf("Incorrect number of command line arguments.\n"); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } datafile = esl_opt_GetArg(go, 1); /***************************************************************** * Open the input and output datafiles, and init the histogram. *****************************************************************/ if (strcmp(datafile, "-") == 0) ifp = stdin; else { ifp = fopen(datafile, "rb"); if (ifp == NULL) esl_fatal("Failed to open input data file %s\n", datafile); } if (outfile == NULL) ofp = stdout; else { ofp = fopen(outfile, "w"); if (ofp == NULL) esl_fatal("Failed to open output xmgrace data file %s\n", outfile); } h = esl_histogram_CreateFull(hmin,hmax,hbinsize); if (h == NULL) esl_fatal("Failed to create histogram"); /***************************************************************** * Collect the data *****************************************************************/ if (esl_opt_GetBoolean(go, "-b")) { while (fread(&x, sizeof(double), 1, ifp) == 1) esl_histogram_Add(h, x); } else { char *buf; /* ptr to line buffer, for esl_fgets() */ int nbuf; /* allocated line lengths, for esl_fgets() */ char *s; /* ptr to line, for esl_strtok() */ char *tok; /* ptr to a data field on the line */ int i; /* counter over fields */ buf = NULL; nbuf = 0; while (esl_fgets(&buf, &nbuf, ifp) == eslOK) { s = buf; for (i = 0; i < which_field; i++) { esl_strtok(&s, " \t\n", &tok); if (tok == NULL) break; } if (tok != NULL) { x = atof(tok); esl_histogram_Add(h, x); } } free(buf); } /***************************************************************** * Optionally, fit the data *****************************************************************/ if (esl_opt_GetBoolean(go, "--gumbel")) { esl_histogram_GetData(h, &xv, &n); if(! esl_opt_IsDefault(go, "--trunc")) esl_gumbel_FitTruncated(xv, n, esl_opt_GetReal(go, "--trunc"), &(params[0]), &(params[1])); else esl_gumbel_FitComplete(xv, n, &(params[0]), &(params[1])); esl_histogram_SetExpect(h, &esl_gumbel_generic_cdf, ¶ms); printf("# Gumbel fit: mu = %f lambda = %f\n", params[0], params[1]); } else if (esl_opt_GetBoolean(go, "--gumloc")) { params[1] = lambda; esl_histogram_GetData(h, &xv, &n); esl_gumbel_FitCompleteLoc(xv, n, params[1], &(params[0])); esl_histogram_SetExpect(h, &esl_gumbel_generic_cdf, ¶ms); printf("# Gumbel fit with forced lambda = %f: mu = %f\n", params[1], params[0]); } else if (esl_opt_GetBoolean(go, "--exptail")) { esl_histogram_GetTailByMass(h, tailp, &xv, &n, NULL); esl_exp_FitComplete(xv, n, &(params[0]), &(params[1])); esl_histogram_SetExpectedTail(h, params[0], tailp, &esl_exp_generic_cdf, ¶ms); printf("# Exponential fit to %.2f%% tail: lambda = %f\n", tailp*100.0, params[1]); } else if (esl_opt_GetBoolean(go, "--exptailloc")) { params[1] = lambda; esl_histogram_GetTailByMass(h, tailp, &xv, &n, NULL); params[0] = xv[0]; /* might be able to do better than minimum score, but this'll do */ esl_histogram_SetExpectedTail(h, params[0], tailp, &esl_exp_generic_cdf, ¶ms); } else if (esl_opt_GetBoolean(go, "--showgum")) { params[0] = mu; params[1] = lambda; esl_histogram_SetExpect(h, &esl_gumbel_generic_cdf, ¶ms); } else if (esl_opt_GetBoolean(go, "--showexp")) { params[0] = mu; params[1] = lambda; esl_histogram_SetExpectedTail(h, mu, tailp, &esl_exp_generic_cdf, ¶ms); } /***************************************************************** * Output *****************************************************************/ if (esl_opt_GetBoolean(go, "--surv")) esl_histogram_PlotSurvival(ofp, h); else esl_histogram_Plot(ofp, h); /***************************************************************** * Cleanup *****************************************************************/ if (outfile != NULL) fclose(ofp); if (strcmp(datafile, "-") != 0) fclose(ifp); esl_histogram_Destroy(h); esl_getopts_Destroy(go); return 0; } hmmer-3.1b2/easel/miniapps/esl-compstruct.c0000664361611702660230000003121112473612611020325 0ustar wheelerteddy/* esl-compstruct - calculate accuracy of RNA secondary structure predictions */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_wuss.h" static char banner[] = "calculate accuracy of RNA secondary structure predictions"; static char usage[] = "\ [-options] \n\ Both files must be in Stockholm format with secondary structure markup.\n\ Sequences must occur in the same order in the two files.\n\ The markup must be in WUSS notation.\n\ \n"; static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "help; show brief info on version and usage", 0 }, { "-m", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use Mathews'relaxed criterion for correctness; allow +/-1 slip", 0 }, { "-p", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "count pseudoknotted base pairs", 0 }, { "--quiet", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "suppress verbose header", 0 }, { 0,0,0,0,0,0,0,0,0,0 }, }; int main(int argc, char **argv) { ESL_GETOPTS *go; /* application configuration */ int kstatus, tstatus;/* return code from Easel routine */ int fmt; /* expected format of kfile, tfile */ char *kfile, *tfile; /* known, test structure file */ ESLX_MSAFILE *kfp, *tfp; /* open kfile, tfile */ ESL_MSA *ka, *ta; /* known, trusted alignment */ int64_t klen, tlen; /* lengths of dealigned seqs */ int *kct, *tct; /* known, test CT rep of structure */ int i; /* counter over sequences */ int pos; /* counter over residues */ int nseq; /* total number of sequences in the files */ int nseq_rejected; /* total number of sequences rejected */ int kpairs; /* count of base pairs in trusted structure */ int tpairs; /* count of base pairs in test structure */ int kcorrect; /* # bp in known structure correctly predicted */ int tcorrect; /* # bp in test structure that are true */ int tot_kpairs; /* total bp in all known structures */ int tot_tpairs; /* total bp in all predicted structures */ int tot_kcorrect; /* total correct bp in all known structures */ int tot_tcorrect; /* total true pairs in all test structures */ int tot_positions; /* total # of bases */ int status; /*********************************************** * Parse command line ***********************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "-h") ) { esl_banner(stdout, argv[0], banner); esl_usage (stdout, argv[0], usage); puts("\n where options are:"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); exit(EXIT_SUCCESS); } if (esl_opt_ArgNumber(go) != 2) { printf("Incorrect number of command line arguments.\n"); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } kfile = esl_opt_GetArg(go, 1); tfile = esl_opt_GetArg(go, 2); if (! esl_opt_GetBoolean(go, "--quiet")) esl_banner(stdout, argv[0], banner); fmt = eslMSAFILE_STOCKHOLM; /*********************************************** * Open the two Stockholm files. ***********************************************/ if ( (status = eslx_msafile_Open(NULL, kfile, NULL, fmt, NULL, &kfp)) != eslOK) eslx_msafile_OpenFailure(kfp, status); if ( (status = eslx_msafile_Open(NULL, tfile, NULL, fmt, NULL, &tfp)) != eslOK) eslx_msafile_OpenFailure(tfp, status); /*********************************************** * Do structure comparisons, one seq at a time; * this means looping over all seqs in all alignments. ***********************************************/ tot_kpairs = tot_kcorrect = 0; tot_tpairs = tot_tcorrect = 0; nseq = nseq_rejected = 0; tot_positions = 0; printf("%20s %17s %17s\n", "", "[sensitivity]", "[PPV]"); while ( (kstatus = eslx_msafile_Read(kfp, &ka)) != eslEOF) { if ( kstatus != eslOK) eslx_msafile_ReadFailure(kfp, kstatus); if ( (tstatus = eslx_msafile_Read(tfp, &ta)) != eslOK) eslx_msafile_ReadFailure(tfp, tstatus); /* Sanity check on alignment */ if (ka->nseq != ta->nseq) esl_fatal("trusted, test alignments don't have same seq #\n"); if (ka->ss == NULL) esl_fatal("trusted alignment has no secondary structure annotation\n"); if (ta->ss == NULL) esl_fatal("test alignment has no secondary structure annotation\n"); for (i = 0; i < ka->nseq; i++) { nseq++; printf("%-20s ", ka->sqname[i]); /* Sanity checks on seqs to compare, plus conversion * to dealigned ct arrays ready for comparison. */ if (ta->ss[i] == NULL) { printf("[REJECTED: no predicted structure]\n"); nseq_rejected++; continue; } if (ka->ss[i] == NULL) { printf("[REJECTED: no trusted structure]\n"); nseq_rejected++; continue; } if (strcmp(ka->sqname[i], ta->sqname[i]) != 0) { printf("[REJECTED: test seq name is %s]\n", ta->sqname[i]); nseq_rejected++; continue; } esl_strdealign(ka->ss[i], ka->aseq[i], "-_.~", NULL); esl_strdealign(ka->aseq[i], ka->aseq[i], "-_.~", &klen); esl_strdealign(ta->ss[i], ta->aseq[i], "-_.~", NULL); esl_strdealign(ta->aseq[i], ta->aseq[i], "-_.~", &tlen); if (klen != tlen) { printf("[REJECTED: seq lengths not identical]\n"); nseq_rejected++; continue; } /* not counting pseudoknots? suppress them in the ss strings*/ if (! esl_opt_GetBoolean(go, "-p")) { esl_wuss_nopseudo(ka->ss[i], ka->ss[i]); esl_wuss_nopseudo(ta->ss[i], ta->ss[i]); } ESL_ALLOC(kct, sizeof(int) * (klen+1)); ESL_ALLOC(tct, sizeof(int) * (tlen+1)); if (esl_wuss2ct(ka->ss[i], klen, kct) != eslOK) { printf("[REJECTED: bad trusted structure]\n"); nseq_rejected++; continue; } if (esl_wuss2ct(ta->ss[i], tlen, tct) != eslOK) { printf("[REJECTED: bad test structure]\n"); nseq_rejected++; continue; } /* OK, we're all set up with kct (trusted) and tct (predicted) * CT arrays, and we're about to count up our correctly predicted * pairs. A brief digression/commentary first. We have to * define what you mean by a "correctly predicted" base * pair. * * Our default criterion is simple and strict: the known base pair * must be exactly present in the prediction; kct[pos] == tct[pos] * where kct[pos] > 0. * * Dave Mathews [MathewsTurner99] uses a more relaxed * criterion that allows a little helix slippage in the prediction. * For a known pair (i,j), he considers the prediction to be correct * if the prediction contains a base pair (i,j), (i+1,j), (i-1,j), * (i,j+1), or (i,j-1). * * A problem that arises here is that the mapping of known * to predicted base pairs is not one-to-one under Mathews' * rule: a single predicted pair can cause two known pairs * to be considered to be "correctly predicted". You'd sort * of like to run some sort of maximum matching algorithm to * assign a one-to-one correspondence between known and * predicted pairs. It does not appear that Mathews does this, * though. * * And for us, the problem becomes a little worse. Mathews only * tabulates "correct" base pairs (our "sensitivity"), and * does not run a calculation of how many predicted pairs * are true (our "specificity", or positive predictive * value). * * So: when we implement the Mathews rule, we do it the most * simple and obvious way. We apply his correctness rule in * both directions. A known pair i,j is considered to be * correctly predicted if the prediction contains any one of * the pairs (i,j), (i+1,j), (i-1,j), (i,j+1), or (i,j-1), for * the purposes of sensitivity. Conversely, a predicted pair * i,j is considered to be correct if the known structure * contains any one of the pairs (i,j), (i+1,j), (i-1,j), * (i,j+1), or (i,j-1), for the purposes of PPV. That is, we * do not worry at all about establishing an optimal * one-to-one mapping between known and predicted pairs. I * think that this is likelyto reflect Mathews' own * implementation, but have not verified this. */ tpairs = tcorrect = 0; /* predicted "test" structure */ kpairs = kcorrect = 0; /* trusted "known" structure */ for (pos = 1; pos <= klen; pos++) { /* sensitivity; looking from the known (trusted) structure's * base pairs. */ if (kct[pos] > pos) /* trusted bp between (pos, kct[pos]) */ { kpairs++; /* don't doublecount */ if (esl_opt_GetBoolean(go, "-m")) { /* mathews' version */ if (tct[pos] == kct[pos] || /* i,j */ (pos > 1 && tct[pos-1] == kct[pos]) || /* i-1, j */ (pos < klen && tct[pos+1] == kct[pos]) || /* i+1, j */ (tct[pos]> 0 && tct[pos] == kct[pos]-1) || /* i, j-1 */ (tct[pos]> 0 && tct[pos] == kct[pos]+1)) /* i, j+1 */ kcorrect++; } else { if (tct[pos] == kct[pos]) kcorrect++; } } /* PPV/specificity; looking from the test (predicted) structure's * base pairs. */ if (tct[pos] > pos) /* predicted base pair (pos, tct[pos]) */ { tpairs++; if (esl_opt_GetBoolean(go, "-m")) { /* mathews' version */ if (kct[pos] == tct[pos] || /* i,j */ (pos > 1 && kct[pos-1] == tct[pos]) || /* i-1, j */ (pos < tlen && kct[pos+1] == tct[pos]) || /* i+1, j */ (kct[pos]> 0 && kct[pos] == tct[pos]-1) || /* i, j-1 */ (kct[pos]> 0 && kct[pos] == tct[pos]+1)) /* i, j+1 */ tcorrect++; } else { if (kct[pos] == tct[pos]) tcorrect++; } } } /* side note: under the default rule, tcorrect==kcorrect, * because there's a one-to-one mapping of known to predicted * pairs; but this is not necessarily the case for the relaxed * Mathews rule. */ tot_tpairs += tpairs; tot_tcorrect += tcorrect; tot_kpairs += kpairs; tot_kcorrect += kcorrect; tot_positions += klen; /* print out per sequence info */ printf(" == %5d %5d %5.2f%% %5d %5d %5.2f%%\n", kcorrect, kpairs, 100. * (float) kcorrect/ (float) kpairs, tcorrect, tpairs, 100. * (float) tcorrect/ (float) tpairs); free(tct); free(kct); } esl_msa_Destroy(ka); esl_msa_Destroy(ta); } /* Print the final summary: */ puts("\n"); if (nseq_rejected > 0) { printf("%d total sequences; %d counted towards comparison; %d rejected\n", nseq, nseq-nseq_rejected, nseq_rejected); printf("(grep \"REJECTED\" in the output to identify the problems)\n\n"); } printf("Overall prediction accuracy (%d sequences, %d positions)\n", nseq - nseq_rejected, tot_positions); printf(" %d/%d trusted pairs predicted (%.2f%% sensitivity)\n", tot_kcorrect, tot_kpairs, 100. * (float) tot_kcorrect/ (float) tot_kpairs); printf(" %d/%d predicted pairs correct (%.2f%% PPV)\n", tot_tcorrect, tot_tpairs, 100. * (float) tot_tcorrect/ (float) tot_tpairs); puts(""); esl_getopts_Destroy(go); eslx_msafile_Close(tfp); eslx_msafile_Close(kfp); return 0; ERROR: return status; } /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/miniapps/esl-compstruct.c $ * SVN $Id: esl-compstruct.c 668 2011-03-01 14:28:28Z nawrockie $ *****************************************************************/ hmmer-3.1b2/easel/miniapps/esl-reformat.c0000664361611702660230000013466612473612611017763 0ustar wheelerteddy/* Convert between sequence file formats */ #include "esl_config.h" #include #include #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_mem.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_wuss.h" static char banner[] = "convert between sequence file formats"; static char usage[] = "[-options] \n\ Output format choices: Unaligned Aligned \n\ ----------- ------- \n\ fasta a2m \n\ hmmpgmd afa \n\ clustal \n\ clustallike\n\ pfam \n\ phylip \n\ phylips \n\ psiblast \n\ selex \n\ stockholm \n\ \n"; #define INCOMPATWITHSMALLOPT "--mingap,--nogap,--ignore,--acceptx" static ESL_OPTIONS options[] = { /* name type default env range togs reqs incompat help docgroup */ { "-d", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-r", "convert to DNA alphabet (U->T)", 0 }, { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "help; print brief info on version and usage", 0 }, { "-l", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-u", "convert to lower case", 0 }, { "-n", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "remove DNA IUPAC codes; convert ambig chars to N", 0 }, { "-o", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "send output to file , not stdout", 0 }, { "-r", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-d", "convert to RNA alphabet (T->U)", 0 }, { "-u", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-l", "convert to upper case", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-n", "convert non-IUPAC chars (e.g. X) in DNA to N", 0 }, { "--gapsym", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, "--mingap,--nogap", "convert all gaps to character ", 0 }, { "--informat", eslARG_STRING, NULL, NULL, NULL, NULL, NULL, NULL, "input sequence file is in format ", 0 }, { "--mingap", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--nogap", "remove columns containing all gaps (seqfile=MSA)", 0 }, { "--keeprf", eslARG_NONE, FALSE, NULL, NULL, NULL, "--mingap", NULL, "with --mingap, keep all nongap #=GC RF columns", 0 }, { "--nogap", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--mingap,--gapsym", "remove columns containing any gaps (seqfile=MSA)", 0 }, { "--wussify", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--dewuss,--fullwuss", "convert old RNA structure markup lines to WUSS", 0 }, { "--dewuss", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--wussify,--fullwuss","convert WUSS RNA structure markup to old format", 0 }, { "--fullwuss", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--wussify,--dewuss", "convert simple WUSS notation to full (output) WUSS", 0 }, { "--ignore", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, NULL, "ignore input seq characters listed in string ", 0 }, { "--acceptx", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, NULL, "accept input seq chars in string as X", 0 }, { "--rename", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, NULL, "rename and number each sequence .", 0 }, { "--replace", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, NULL, " = : replace characters in with those in ", 0}, { "--small", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, INCOMPATWITHSMALLOPT, "use minimal RAM, input must be pfam, output must be afa or pfam",0 }, { "--id_map", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, NULL, "if format is hmmpgmd, put the id map into file ", 0 }, { 0,0,0,0,0,0,0,0 }, }; static void symconvert(char *s, char *oldsyms, char *newsyms); static void regurgitate_pfam_as_afa(ESLX_MSAFILE *afp, FILE *ofp, char *alifile, char *gapsym, int force_lower, int force_upper, int force_rna, int force_dna, int iupac_to_n, int x_is_bad, char *rename, char *rfrom, char *rto, int *ret_reached_eof); static int regurgitate_pfam_as_pfam(ESLX_MSAFILE *afp, FILE *ofp, char *gapsym, int force_lower, int force_upper, int force_rna, int force_dna, int iupac_to_n, int x_is_bad, int wussify, int dewuss, int fullwuss, char *rfrom, char *rto); static int parse_replace_string(const char *rstring, char **ret_from, char **ret_to); int main(int argc, char **argv) { ESL_GETOPTS *go; /* application configuration */ char *infile; /* name of input sequence file */ int infmt = eslSQFILE_UNKNOWN; /* input format as a code; eslSQFILE_FASTA */ int outfmt = eslSQFILE_UNKNOWN; /* output format as a code */ int status; /* return code from an Easel call */ FILE *ofp; /* output stream */ char *outfile; /* output file, or NULL */ int force_rna; /* TRUE to force RNA alphabet */ int force_dna; /* TRUE to force DNA alphabet */ int force_lower; /* TRUE to force lower case */ int force_upper; /* TRUE to force upper case */ int iupac_to_n; /* TRUE to convert ambiguities all to N's */ int x_is_bad; /* TRUE to convert X to N */ int do_mingap; /* TRUE to remove cols containing all gaps */ int do_nogap; /* TRUE to remove cols containing any gaps */ char *gapsym; /* NULL if unset; else, char for gaps */ int wussify; /* TRUE to convert old KH SS markup to WUSS */ int dewuss; /* TRUE to convert WUSS back to old KH */ int fullwuss; /* TRUE to convert simple WUSS to full WUSS */ char *rename; /* if non-NULL rename seqs to . */ int do_small; /* TRUE to operate in small memory mode */ int do_fixbps; /* TRUE to assume SS/SS_cons are for WUSS RNA*/ char *rstring; /* from --replace */ char *rfrom, *rto; /* and from --replace =:*/ int reached_eof; /* reached EOF? used only in small mem mode */ int idx; /* counter over sequences */ int nali; /* number of alignments read */ char errbuf[eslERRBUFSIZE]; /* for error messages */ /***************************************************************** * Parse the command line *****************************************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "-h")) { esl_banner(stdout, argv[0], banner); esl_usage (stdout, argv[0], usage); puts(" where options are:\n"); esl_opt_DisplayHelp(stdout, go, 0, 2, 80); /* 0= group; 2 = indentation; 80=textwidth*/ exit(0); } if (esl_opt_ArgNumber(go) != 2) { printf("Incorrect number of command line arguments.\n"); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } outfmt = esl_sqio_EncodeFormat(esl_opt_GetArg(go, 1)); if (outfmt == eslSQFILE_UNKNOWN) esl_fatal("%s is not a recognized output seqfile format\n", esl_opt_GetArg(go, 1)); infile = esl_opt_GetArg(go, 2); if (esl_opt_IsOn(go, "--informat") && (infmt = esl_sqio_EncodeFormat(esl_opt_GetString( go, "--informat"))) == eslSQFILE_UNKNOWN) esl_fatal("%s is not a recognized input seqfile format\n", esl_opt_GetString(go, "--informat")); force_dna = esl_opt_GetBoolean(go, "-d"); force_lower = esl_opt_GetBoolean(go, "-l"); iupac_to_n = esl_opt_GetBoolean(go, "-n"); outfile = esl_opt_GetString (go, "-o"); force_rna = esl_opt_GetBoolean(go, "-r"); force_upper = esl_opt_GetBoolean(go, "-u"); x_is_bad = esl_opt_GetBoolean(go, "-x"); gapsym = esl_opt_GetString( go, "--gapsym"); do_mingap = esl_opt_GetBoolean(go, "--mingap"); do_nogap = esl_opt_GetBoolean(go, "--nogap"); wussify = esl_opt_GetBoolean(go, "--wussify"); dewuss = esl_opt_GetBoolean(go, "--dewuss"); fullwuss = esl_opt_GetBoolean(go, "--fullwuss"); rename = esl_opt_GetString (go, "--rename"); do_small = esl_opt_GetBoolean(go, "--small"); rstring = esl_opt_GetString( go, "--replace"); do_fixbps = (force_rna || force_dna || wussify || dewuss || fullwuss) ? TRUE : FALSE; /* if --small, make sure infmt == pfam and (outfmt == afa || outfmt == pfam) */ if(do_small && (infmt != eslMSAFILE_PFAM || (outfmt != eslMSAFILE_AFA && outfmt != eslMSAFILE_PFAM))) esl_fatal("--small requires '--informat pfam' and output format of either 'afa' or 'pfam'"); if (gapsym != NULL && strlen(gapsym) != 1) esl_fatal("Argument to --gapsym must be a single character."); if (outfile == NULL) ofp = stdout; else if ((ofp = fopen(outfile, "w")) == NULL) esl_fatal("Failed to open output file %s\n", outfile); if (rstring == NULL) { rfrom = NULL; rto = NULL; } else { if((status = parse_replace_string(rstring, &rfrom, &rto)) != eslOK) esl_fatal("Out of memory"); } /*********************************************** * Reformat the file, printing to stdout. ***********************************************/ /* If the output format is an alignment, then the input format * has to be an alignment. */ if (esl_sqio_IsAlignment(outfmt)) { ESLX_MSAFILE *afp; ESL_MSA *msa; status = eslx_msafile_Open(NULL, infile, NULL, infmt, NULL, &afp); if (status != eslOK) eslx_msafile_OpenFailure(afp, status); if ( esl_opt_IsOn(go, "--ignore")) esl_fatal("The --ignore option is unimplemented for alignment reformatting."); if ( esl_opt_IsOn(go, "--acceptx")) esl_fatal("The --acceptx option is unimplemented for alignment reformatting."); nali = 0; if (do_small) { if(infmt == eslMSAFILE_PFAM && outfmt == eslMSAFILE_AFA) { if (afp->bf->mode_is == eslBUFFER_STREAM) esl_fatal("--small with afa out format and stdin input is unimplemented."); regurgitate_pfam_as_afa(afp, ofp, infile, gapsym, force_lower, force_upper, force_rna, force_dna, iupac_to_n, x_is_bad, rename, rfrom, rto, &reached_eof); if(! reached_eof) esl_fatal("Input file contains >1 alignments, but afa formatted output file can only contain 1"); } else if (infmt == eslMSAFILE_PFAM && outfmt == eslMSAFILE_PFAM) { if(rename != NULL) esl_fatal("--rename is unimplemented for combination of --small and output format pfam"); while((status = regurgitate_pfam_as_pfam(afp, ofp, gapsym, force_lower, force_upper, force_rna, force_dna, iupac_to_n, x_is_bad, wussify, dewuss, fullwuss, rfrom, rto)) != eslEOF) { if (status == eslEFORMAT) esl_fatal("--small alignment file parse error:\n%s\n", afp->errmsg); else if (status == eslEINVAL) esl_fatal("--small alignment file parse error:\n%s\n", afp->errmsg); else if (status != eslOK) esl_fatal("--small alignment file read failed with error code %d\n", status); } eslx_msafile_Close(afp); } else { /* do_small enabled, but neither (infmt==pfam && outfmt=afa) nor (infmt==pfam && outfmt==pfam) */ esl_fatal("--small requires '--informat pfam' and output format of either 'afa' or 'pfam'"); } } else { /* normal mode, --small not enabled */ while ((status = eslx_msafile_Read(afp, &msa)) != eslEOF) { if (status != eslOK) eslx_msafile_ReadFailure(afp, status); nali++; if (nali > 1 && ! eslx_msafile_IsMultiRecord(outfmt)) esl_fatal("Input file contains >1 alignments, but %s formatted output file can only contain 1", eslx_msafile_DecodeFormat(outfmt)); if (do_mingap) if((status = esl_msa_MinimGapsText(msa, errbuf, "-_.~", esl_opt_GetBoolean(go, "--keeprf"), do_fixbps)) != eslOK) esl_fatal(errbuf); if (do_nogap) if((status = esl_msa_NoGapsText (msa, errbuf, "-_.~", do_fixbps)) != eslOK) esl_fatal(errbuf); if (rfrom) esl_msa_SymConvert(msa, rfrom, rto); if (gapsym) esl_msa_SymConvert(msa, "-_.", gapsym); if (force_lower) esl_msa_SymConvert(msa, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz"); if (force_upper) esl_msa_SymConvert(msa, "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); if (force_rna) esl_msa_SymConvert(msa, "Tt", "Uu"); if (force_dna) esl_msa_SymConvert(msa, "Uu", "Tt"); if (iupac_to_n) esl_msa_SymConvert(msa, "RYMKSWHBVDrymkswhbvd", "NNNNNNNNNNnnnnnnnnnn"); if (x_is_bad) esl_msa_SymConvert(msa, "Xx", "Nn"); if (rename) { for (idx = 0; idx < msa->nseq; idx++) esl_msa_FormatSeqName(msa, idx, "%s.%d", rename, idx+1); } if (wussify) { if (msa->ss_cons) esl_kh2wuss(msa->ss_cons, msa->ss_cons); if (msa->ss) for (idx = 0; idx < msa->nseq; idx++) if (msa->ss[idx]) esl_kh2wuss(msa->ss[idx], msa->ss[idx]); } if (dewuss) { if (msa->ss_cons) esl_wuss2kh(msa->ss_cons, msa->ss_cons); if (msa->ss) for (idx = 0; idx < msa->nseq; idx++) if (msa->ss[idx]) esl_wuss2kh(msa->ss[idx], msa->ss[idx]); } if (fullwuss) { if (msa->ss_cons != NULL) { status = esl_wuss_full(msa->ss_cons, msa->ss_cons); if (status == eslESYNTAX) esl_fatal("Bad consensus SS: not in WUSS format\n"); else if (status != eslOK) esl_fatal("Conversion of SS_cons failed, code %d\n", status); } if (msa->ss != NULL) for (idx = 0; idx < msa->nseq; idx++) if (msa->ss[idx] != NULL) { status = esl_wuss_full(msa->ss[idx], msa->ss[idx]); if (status == eslESYNTAX) esl_fatal("Bad SS for %s: not in WUSS format\n", msa->sqname[idx]); else if (status != eslOK) esl_fatal("Conversion of SS for %s failed, code %d\n", msa->sqname[idx], status); } } eslx_msafile_Write(ofp, msa, outfmt); esl_msa_Destroy(msa); } } eslx_msafile_Close(afp); } /* end of alignment->alignment conversion */ else { /* else: conversion to unaligned file formats */ ESL_SQFILE *sqfp; /* open input sequence file */ ESL_SQ *sq; /* an input sequence */ char *mapfile; /* file name into which an hmmpgmd map file should be written */ FILE *mapfp; /* output stream for the map file */ status = esl_sqfile_Open(infile, infmt, NULL, &sqfp); if (status == eslENOTFOUND) esl_fatal("Couldn't open seqfile %s\n", infile); else if (status == eslEFORMAT) esl_fatal("Couldn't determine format of seqfile %s\n", infile); else if (status == eslEINVAL) esl_fatal("Can't autodetect format of stdin or .gz; use --informat\n"); else if (status != eslOK) esl_fatal("Open of seqfile %s failed, code %d\n", infile, status); if ( esl_opt_IsOn(go, "--ignore")) esl_sqio_Ignore (sqfp, esl_opt_GetString(go, "--ignore")); if ( esl_opt_IsOn(go, "--acceptx")) esl_sqio_AcceptAs(sqfp, esl_opt_GetString(go, "--acceptx"), 'X'); sq = esl_sq_Create(); if ( outfmt == eslSQFILE_HMMPGMD ) { int res_cnt = 0; char timestamp[32]; time_t date; //will need to make two passes through the file, one to get sequence count, one to convert sequences if (! esl_sqfile_IsRewindable(sqfp)) esl_fatal("Target sequence file %s isn't rewindable; can't produce a file in hmmpgmd format", infile); //pick map file name, and open the file if (esl_opt_IsUsed(go, "--id_map")) { mapfile = esl_opt_GetString( go, "--id_map"); } else { esl_strdup(infile, -1, &mapfile); // there will be an infile, because stdin was restricted above esl_strcat(&mapfile, -1, ".map", 4); } if ((mapfp = fopen(mapfile, "w")) == NULL) esl_fatal("Failed to open map output file %s\n", mapfile); //get counts, and write out the map file idx = 0; while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { res_cnt += sq->n; esl_sq_Reuse(sq); idx++; } /* status should be eslEOF on normal end; if it isn't, deal w/ error */ if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (status != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", status, sqfp->filename); /* Print the first line of the hmmpgmd format, which contains database information. * # ... * It shoves all sequences into a single database, #1. */ date = time(NULL); ctime_r(&date, timestamp); fprintf(mapfp, "%d\n", idx); fprintf(ofp, "#%d %d %d %d %d %s", res_cnt, idx, 1, idx, idx, timestamp); esl_sqfile_Position(sqfp, 0); } idx = 0; while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { if (rfrom!=NULL) symconvert(sq->seq, rfrom, rto); if (force_lower) symconvert(sq->seq, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz"); if (force_upper) symconvert(sq->seq, "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); if (force_rna) symconvert(sq->seq, "Tt", "Uu"); if (force_dna) symconvert(sq->seq, "Uu", "Tt"); if (iupac_to_n) symconvert(sq->seq, "RYMKSWHBVDrymkswhbvd", "NNNNNNNNNNnnnnnnnnnn"); if (x_is_bad) symconvert(sq->seq, "Xx", "Nn"); if (wussify && sq->ss != NULL) esl_kh2wuss(sq->ss, sq->ss); if (dewuss && sq->ss != NULL) esl_wuss2kh(sq->ss, sq->ss); if (fullwuss && sq->ss != NULL) { status = esl_wuss_full(sq->ss, sq->ss); if (status == eslESYNTAX) esl_fatal("Bad SS for %s: not in WUSS format\n", sq->name); else if (status != eslOK) esl_fatal("Conversion of SS for %s failed, code %d\n", sq->name, status); } if ( outfmt == eslSQFILE_HMMPGMD ) { fprintf(mapfp, "%d %s %s\n", idx+1, sq->name?sq->name:"", sq->desc?sq->desc:""); esl_sq_FormatName(sq, "%d 1", idx+1); esl_sq_FormatDesc(sq, ""); } else { if (rename) esl_sq_FormatName(sq, "%s.%d", rename, idx+1); } esl_sqio_Write(ofp, sq, outfmt, FALSE); esl_sq_Reuse(sq); idx++; } /* status should be eslEOF on normal end; if it isn't, deal w/ error */ if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (status != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", status, sqfp->filename); if ( outfmt == eslSQFILE_HMMPGMD ) fclose(mapfp); esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); } /* end of unaligned seq conversion */ if (ofp != stdout) fclose(ofp); esl_getopts_Destroy(go); if(rfrom != NULL) free(rfrom); if(rto != NULL) free(rto); exit(0); } /* symconvert() * * single seq version of esl_msa_SymConvert(); see * documentation there. * * no reason yet to include in sqio API, but that may change. * * inefficient to use this for upper/lower case conversion, * prob by an order of magnitude (because of the strchr() call, * which could be replaced by a range test), but I bet it's * unnoticeable. */ static void symconvert(char *s, char *oldsyms, char *newsyms) { int pos; char *sptr; int special; special = (strlen(newsyms) == 1 ? TRUE : FALSE); for (pos = 0; s[pos] != '\0'; pos++) if ((sptr = strchr(oldsyms, s[pos])) != NULL) s[pos] = (special ? *newsyms : newsyms[sptr-oldsyms]); } /* regurgitate_pfam_as_afa() * * Given an open Pfam formatted msafile, read the next alignment and * regurgitate it in aligned FASTA (AFA) format without storing * it in a esl_msa data structure. * * We need to do two passes through the file because in Pfam * sequence accessions (#=GS AC) and sequence descriptions * (#=GS DE) appear altogether before any aligned sequence * data, while in AFA they appear on the same line as the sequence * name (accession, then description). * * Example: * # STOCKHOLM 1.0 * #=GS tRNA1 AC RF00005-1 * #=GS tRNA2 AC RF00005-2 * #=GS tRNA1 DE first tRNA * #=GS tRNA2 DE second tRNA * * tRNA1 GCGGAUUUAGCUCAGUUGGG.AGAGCGCCAGACUGAAGAUCUGGAGGUCCUGUGUUCGAUCCACAGAAUUCGCA * tRNA2 UCCGAUAUAGUGUAAC.GGCUAUCACAUCACGCUUUCACCGUGGAGA.CCGGGGUUCGACUCCCCGUAUCGGAG * * converts to AFA: * >tRNA1 RF00005-1 first tRNA * GCGGAUUUAGCUCAGUUGGG.AGAGCGCCAGACUGAAGAUCUGGAGGUCCUGUGUUCGAU * CCACAGAAUUCGCA * >tRNA2 RF00005-2 second tRNA * UCCGAUAUAGUGUAAC.GGCUAUCACAUCACGCUUUCACCGUGGAGA.CCGGGGUUCGAC * UCCCCGUAUCGGAG * * In the first pass, output the sequence names and accessions we find * as '#=GS AC' lines in the Pfam alignment to an accession * tmpfile, and output sequence names and descriptions we find as * as '#=GS DE' lines in the Pfam alignment to a description * tmpfile. * * In the second pass, rewind all (up to 3) files: , * and the Pfam alignment file and start reading them * again. As we're reading them, output the accessions, descriptions * and aligned sequence data in the proper order to an aligned FASTA * file. * * Set as TRUE if the alignment read and reformatted * appears to be the only one remaining in afp. Set * as FALSE if afp appears to include at least one more alignment. * * Returns void. Dies upon any input error. */ static void regurgitate_pfam_as_afa(ESLX_MSAFILE *afp, FILE *ofp, char *alifile, char *gapsym, int force_lower, int force_upper, int force_rna, int force_dna, int iupac_to_n, int x_is_bad, char *rename, char *rfrom, char *rto, int *ret_reached_eof) { char *p = NULL; esl_pos_t n = 0; esl_pos_t gslen, seqnamelen, taglen; char *seqname = NULL; char *first_seqname = NULL; char *tag = NULL; char *gs = NULL; int nseq_read = 0; int reached_eof; /* variables related to reading accessions */ char ac_tmpfile[16] = "esltmpXXXXXX"; FILE *ac_fp = NULL; /* file ptr for accession tmpfile */ char *ac_buf = NULL; /* buffer for line input w/ sre_fgets() */ int ac_buflen = 0; /* current allocated length for buf */ char *ac_s = NULL; char *ac_seqname = NULL; char *ac = NULL; int have_ac = FALSE; /* variables related to reading descriptions */ char de_tmpfile[16] = "esltmpXXXXXX"; FILE *de_fp = NULL; /* file ptr for description tmpfile */ char *de_buf = NULL; /* buffer for line input w/ sre_fgets() */ int de_buflen = 0; /* current allocated length for buf */ char *de_s = NULL; char *de_seqname = NULL; char *de = NULL; int have_de = FALSE; /* variables related to printing out sequences */ char *aseq = NULL; esl_pos_t aseqlen = 0; int64_t apos; char aseqbuf[61]; int cpl = 60; /* number of residues per afa seq line */ int acpl; /* actual number of character per line */ int status; afp->errmsg[0] = '\0'; /************************************************************************************************** * First pass, go through each line of the Pfam file and output all GS DE and AC annotation to tmpfiles **************************************************************************************************/ /* Check the magic Stockholm header line, allowing blank lines */ do { status = eslx_msafile_GetLine(afp, &p, &n); if (status == eslEOF) return; else if (status != eslOK) esl_fatal("small mem parse error. problem reading line %d of msafile", (int) afp->linenumber); } while (esl_memspn(afp->line, afp->n, " \t") == afp->n || /* skip blank lines */ (esl_memstrpfx(afp->line, afp->n, "#") /* and skip comment lines */ && ! esl_memstrpfx(afp->line, afp->n, "# STOCKHOLM"))); /* but stop on Stockholm header */ if (! esl_memstrpfx(afp->line, afp->n, "# STOCKHOLM 1.")) esl_fatal("small mem parse failed (line %d): missing \"# STOCKHOLM\" header", (int) afp->linenumber); while ((status = eslx_msafile_GetLine(afp, &p, &n)) == eslOK) { while (n && ( *p == ' ' || *p == '\t')) { p++; n--; } /* skip leading whitespace */ if (esl_memstrpfx(p, n, "#=GS")) { /* only lines we need to check are AC and DE lines, we don't even check other lines for validity */ if (esl_memtok(&p, &n, " \t", &gs, &gslen) != eslOK) esl_fatal("small mem parse failed (line %d) in a way that can't happen", (int) afp->linenumber); if (esl_memtok(&p, &n, " \t", &seqname, &seqnamelen) != eslOK) esl_fatal("small mem parse failed (line %d): #=GS line missing , , annotation", (int) afp->linenumber); if (esl_memtok(&p, &n, " \t", &tag, &taglen) != eslOK) esl_fatal("small mem parse failed (line %d): #=GS line missing , annotation", (int) afp->linenumber); if (! esl_memstrcmp(gs, gslen, "#=GS")) esl_fatal("small mem parse failed (line %d): faux #=GS line?", (int) afp->linenumber); if (esl_memstrcmp(tag, taglen, "AC")) { if (! ac_fp && esl_tmpfile(ac_tmpfile, &ac_fp) != eslOK) esl_fatal("small mem parse failed, unable to open accession tmpfile"); fprintf(ac_fp, "%.*s %.*s\n", (int) seqnamelen, seqname, (int) n, p); } if (esl_memstrcmp(tag, taglen, "DE")) { if (! de_fp && esl_tmpfile(de_tmpfile, &de_fp) != eslOK) esl_fatal("small mem parse failed, unable to open description tmpfile"); fprintf(de_fp, "%.*s %.*s\n", (int) seqnamelen, seqname, (int) n, p); } } else if (esl_memstrpfx(p, n, "//")) break; } if (status == eslEOF) esl_fatal("small mem parse failed (line %d): missing // terminator", (int) afp->linenumber); else if (status != eslOK) esl_fatal("small mem parse failed (line %d) with code %d", (int) afp->linenumber, status); /* The regurgitate_*() functions are limited, and only deal with single-record Pfam files. * If there appears to be more data in the file, drop the reached_eof flag. */ while ((status = eslx_msafile_GetLine(afp, &p, &n)) == eslOK) { while (n && ( *p == ' ' || *p == '\t')) { p++; n--; } /* skip leading whitespace */ if (esl_memstrpfx(p, n, "# STOCKHOLM 1.")) break; if (n && ! esl_memstrpfx(p, n, "#")) esl_fatal("small mem parse failed (line %d): unexpected data", (int) afp->linenumber); } if (status == eslOK) reached_eof = FALSE; else if (status == eslEOF) reached_eof = TRUE; else esl_fatal("--small parse error. problem reading line %d of msafile", (int) afp->linenumber); /***************************************************************** * Pass 1 complete; rewind (close/reopen) all files *****************************************************************/ eslx_msafile_Close(afp); if ((status = eslx_msafile_Open(NULL, alifile, NULL, eslMSAFILE_PFAM, NULL, &afp)) != eslOK) esl_fatal("--small, second pass, unable to open file %s for reading", alifile); if (ac_fp) { /* open the tmpfile with the seq accessions */ rewind(ac_fp); if((status = esl_fgets(&(ac_buf), &(ac_buflen), ac_fp)) != eslOK) esl_fatal("--small accession tmpfile parse failed"); ac_s = ac_buf; if (esl_strtok_adv(&ac_s, " \t\n\r", &ac_seqname, NULL, NULL) != eslOK) esl_fatal("--small accession tmpfile parse failed"); if (esl_strtok_adv(&ac_s, "\n\r", &ac, NULL, NULL) != eslOK) esl_fatal("--small accession tmpfile parse failed"); } if (de_fp) { /* open the tmpfile with the seq descriptions */ rewind(de_fp); if((status = esl_fgets(&(de_buf), &(de_buflen), de_fp)) != eslOK) esl_fatal("--small description tmpfile parse failed"); de_s = de_buf; if (esl_strtok_adv(&de_s, " \t\n\r", &de_seqname, NULL, NULL) != eslOK) esl_fatal("--small description tmpfile parse failed"); if (esl_strtok_adv(&de_s, "\n\r", &de, NULL, NULL) != eslOK) esl_fatal("--small description tmpfile parse failed"); } /****************************************************************************************** * Pass 2, step through files, outputting appropriately ******************************************************************************************/ do { status = eslx_msafile_GetLine(afp, &p, &n); if (status == eslEOF) return; else if (status != eslOK) esl_fatal("small mem parse pass 2 error. problem reading line %d of msafile", (int) afp->linenumber); } while (esl_memspn(afp->line, afp->n, " \t") == afp->n || /* skip blank lines */ (esl_memstrpfx(afp->line, afp->n, "#") /* and skip comment lines */ && ! esl_memstrpfx(afp->line, afp->n, "# STOCKHOLM"))); /* but stop on Stockholm header */ if (! esl_memstrpfx(afp->line, afp->n, "# STOCKHOLM 1.")) esl_fatal("small mem parse pass 2 failed (line %d): missing \"# STOCKHOLM\" header", (int) afp->linenumber); while ((status = eslx_msafile_GetLine(afp, &p, &n)) == eslOK) { while (n && ( *p == ' ' || *p == '\t')) { p++; n--; } /* skip leading whitespace */ if (!n || *p == '#') continue; /* skip blank lines, comments */ else if (esl_memstrpfx(p, n, "//")) break; /* end of alignment: end of record */ else { /* sequence line. parse line into temporary strings */ if (esl_memtok(&p, &n, " \t", &seqname, &seqnamelen) != eslOK) esl_fatal("small mem parse pass 2 failed (line %d): no seq name", (int) afp->linenumber); if (esl_memtok(&p, &n, " \t", &aseq, &aseqlen) != eslOK) esl_fatal("small mem parse pass 2 failed (line %d): no aseq", (int) afp->linenumber); /* make sure we haven't just read a second line of the first sequence in file (we must be in Pfam 1 line/seq file) */ if (nseq_read == 0) { if ((status = esl_memstrdup(seqname, seqnamelen, &(first_seqname))) != eslOK) esl_fatal("small mem parse failed: unable to copy seqname"); } else if (esl_memstrcmp(seqname, seqnamelen, first_seqname)) esl_fatal("--small parse pass 2 failed (line %d): two seqs named %s. Alignment appears to be in interleaved Stockholm (not Pfam) format.", (int) afp->linenumber, seqname); nseq_read++; /* determine if we have an accession and/or description for this sequence */ have_de = have_ac = FALSE; if (ac_seqname && (esl_memstrcmp(seqname, seqnamelen, ac_seqname))) have_ac = TRUE; if (de_seqname && (esl_memstrcmp(seqname, seqnamelen, de_seqname))) have_de = TRUE; if (rename) fprintf(ofp, ">%s.%d%s%s%s%s\n", rename, nseq_read, (have_ac ? " " : "") , (have_ac ? ac : ""), (have_de ? " " : "") , (have_de ? de : "")); else fprintf(ofp, ">%.*s%s%s%s%s\n", (int) seqnamelen, seqname, (have_ac ? " " : "") , (have_ac ? ac : ""), (have_de ? " " : "") , (have_de ? de : "")); /* load next ac, de */ if (have_ac) { status = esl_fgets(&(ac_buf), &(ac_buflen), ac_fp); if (status == eslEOF) ac_seqname = NULL; else if (status == eslOK) { ac_s = ac_buf; if (esl_strtok_adv(&ac_s, " \t\n\r", &ac_seqname, NULL, NULL) != eslOK) esl_fatal("--small accession tmpfile parse failed"); if (esl_strtok_adv(&ac_s, "\n\r", &ac, NULL, NULL) != eslOK) esl_fatal("--small accession tmpfile parse failed"); } } if (have_de) { status = esl_fgets(&(de_buf), &(de_buflen), de_fp); if(status == eslEOF) de_seqname = NULL; else if (status == eslOK) { de_s = de_buf; if (esl_strtok_adv(&de_s, " \t\n\r", &de_seqname, NULL, NULL) != eslOK) esl_fatal("--small description tmpfile parse failed"); if (esl_strtok_adv(&de_s, "\n\r", &de, NULL, NULL) != eslOK) esl_fatal("--small description tmpfile parse failed"); } } /* now print sequence, after converting symbols as nec */ /* remember, aseq itself is part of an ESL_BUFFER and you can't write to it, so symconverts have to be on the copy */ for (apos = 0; apos < aseqlen; apos += cpl) { acpl = (aseqlen - apos > cpl ? cpl : aseqlen - apos); strncpy(aseqbuf, aseq + apos, acpl); aseqbuf[acpl] = '\0'; if (rfrom) symconvert(aseqbuf, rfrom, rto); if (gapsym) symconvert(aseqbuf, "-_.", gapsym); if (force_lower) symconvert(aseqbuf, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz"); if (force_upper) symconvert(aseqbuf, "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); if (force_rna) symconvert(aseqbuf, "Tt", "Uu"); if (force_dna) symconvert(aseqbuf, "Uu", "Tt"); if (iupac_to_n) symconvert(aseqbuf, "RYMKSWHBVDrymkswhbvd", "NNNNNNNNNNnnnnnnnnnn"); if (x_is_bad) symconvert(aseqbuf, "Xx", "Nn"); fprintf(ofp, "%s\n", aseqbuf); } } } /* If we saw a normal // end, we would've successfully read a line, * so when we get here, status (from the line read) should be eslOK. */ if (status != eslOK) esl_fatal("--small parse pass 2 failed (line %d): didn't find // at end of alignment", (int) afp->linenumber); if (ac_seqname) esl_fatal("--small parse pass 2 failed, sequence %s with #=GS AC line does not exist in alignment or is in different order.", ac_seqname); if (de_seqname) esl_fatal("--small parse pass 2 failed, sequence %s with #=GS DE line does not exist in alignment or is in different order.", de_seqname); if (ac_fp) fclose(ac_fp); if (de_fp) fclose(de_fp); eslx_msafile_Close(afp); if (first_seqname) free(first_seqname); if (ac_buf) free(ac_buf); if (de_buf) free(de_buf); *ret_reached_eof = reached_eof; return; } /* regurgitate_pfam_as_pfam() * * Given an open Pfam formatted msafile, read the next alignment and * regurgitate it, after modifying it as necessary (change dna to rna, * wussify SS, etc) in Pfam format. * * Returns on success. * Returns if there are no more alignments in . * Returns if parse fails because of a file format * problem, in which case afp->errmsg is set to contain a formatted * message that indicates the cause of the problem. */ static int regurgitate_pfam_as_pfam(ESLX_MSAFILE *afp, FILE *ofp, char *gapsym, int force_lower, int force_upper, int force_rna, int force_dna, int iupac_to_n, int x_is_bad, int wussify, int dewuss, int fullwuss, char *rfrom, char *rto) { char *p; esl_pos_t n; char *first_seqname = NULL; char *gx = NULL; char *seqname = NULL; char *tag = NULL; char *text = NULL; esl_pos_t gxlen, namelen, taglen, textlen; int nseq_read = 0; int parse_gc_and_gr; int flushpoint = 10000; int exp_alen = -1; char *buf = NULL; esl_pos_t pos, pos2; int status; parse_gc_and_gr = (wussify || dewuss || fullwuss) ? TRUE : FALSE; /* should we parse out GR/GC lines and check if they're SS lines? */ afp->errmsg[0] = '\0'; /* Check the magic Stockholm header line. * We have to skip blank lines here, else we perceive * trailing blank lines in a file as a format error when * reading in multi-record mode. */ /* Check the magic Stockholm header line, allowing blank lines */ do { status = eslx_msafile_GetLine(afp, &p, &n); if (status == eslEOF) return eslEOF; else if (status != eslOK) esl_fatal("small mem parse error. problem reading line %d of msafile", (int) afp->linenumber); fprintf(ofp, "%.*s\n", (int) afp->n, afp->line); } while (esl_memspn(afp->line, afp->n, " \t") == afp->n || /* skip blank lines */ (esl_memstrpfx(afp->line, afp->n, "#") /* and skip comment lines */ && ! esl_memstrpfx(afp->line, afp->n, "# STOCKHOLM"))); /* but stop on Stockholm header */ if (! esl_memstrpfx(afp->line, afp->n, "# STOCKHOLM 1.")) esl_fatal("small mem parse failed (line %d): missing \"# STOCKHOLM\" header", (int) afp->linenumber); /* Read the alignment file one line at a time. */ while ((status = eslx_msafile_GetLine(afp, &p, &n)) == eslOK) { if ((int) afp->linenumber % flushpoint == 0) fflush(ofp); while (n && ( *p == ' ' || *p == '\t')) { p++; n--; } /* skip leading whitespace */ if (!n) fprintf(ofp, "\n"); else if (esl_memstrpfx(p, n, "//")) { fprintf(ofp, "//\n"); break; } /* normal way out */ else if (*p == '#') { if (parse_gc_and_gr && esl_memstrpfx(p, n, "#=GC")) { /* parse line into temporary strings */ if (esl_memtok(&p, &n, " \t", &gx, &gxlen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "small mem parse failed (line %d): bad #=GC line", (int) afp->linenumber); if (esl_memtok(&p, &n, " \t", &tag, &taglen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "small mem parse failed (line %d): bad #=GC line", (int) afp->linenumber); if (esl_memtok(&p, &n, " \t", &text, &textlen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "small mem parse failed (line %d): bad #=GC line", (int) afp->linenumber); pos = text - afp->line; /* pos: position of first aligned char on line; total width of annotation tag w/spaces */ /* verify alignment length */ if (exp_alen == -1) exp_alen = textlen; else if (exp_alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errmsg, "small mem parse failed (line %d): bad #=GC line, len %d, expected %d", (int) afp->linenumber, (int) textlen, (int) exp_alen); /* we need to make a writable string copy of the annotation, to edit it */ ESL_REALLOC(buf, sizeof(char) * (textlen+1)); esl_memstrcpy(text, textlen, buf); if (esl_memstrcmp(tag, taglen, "SS_cons")) { if (wussify) esl_kh2wuss(buf, buf); else if (dewuss) esl_wuss2kh(buf, buf); else if (fullwuss) { status = esl_wuss_full(buf, buf); if (status == eslESYNTAX) esl_fatal("Bad SS_cons line: not in WUSS format, alifile line: %d", (int) afp->linenumber); else if (status != eslOK) esl_fatal("Conversion of SS_cons line failed, code %d, alifile line: %d", status, (int) afp->linenumber); } } fprintf(ofp, "#=GC %.*s%*s%s\n", (int) taglen, tag, (int) (pos-taglen-5), "", buf); } else if (parse_gc_and_gr && esl_memstrpfx(p, n, "#=GR") == 0) { /* parse line into temporary strings */ if (esl_memtok(&p, &n, " \t", &gx, &gxlen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "--small parse failed (line %d): bad #=GR line", (int) afp->linenumber); if (esl_memtok(&p, &n, " \t", &seqname, &namelen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "--small parse failed (line %d): bad #=GR line", (int) afp->linenumber); if (esl_memtok(&p, &n, " \t", &tag, &taglen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "--small parse failed (line %d): bad #=GR line", (int) afp->linenumber); pos = tag - afp->line; if (esl_memtok(&p, &n, " \t", &text, &textlen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "--small parse failed (line %d): bad #=GR line", (int) afp->linenumber); pos2 = text - afp->line; /* we need to make a writable string copy of the annotation, to edit it */ ESL_REALLOC(buf, sizeof(char) * (textlen+1)); esl_memstrcpy(text, textlen, buf); /* verify alignment length */ if (exp_alen == -1) exp_alen = textlen; else if (exp_alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errmsg, "small mem parse failed (line %d): bad seq line, len %d, expected %d", (int) afp->linenumber, (int) textlen, (int) exp_alen); if (esl_memstrcmp(tag, taglen, "SS") == 0) { if (wussify) esl_kh2wuss(buf, buf); else if (dewuss) esl_wuss2kh(buf, buf); else if (fullwuss) { status = esl_wuss_full(buf, buf); if (status == eslESYNTAX) esl_fatal("Bad SS line: not in WUSS format, alifile line: %d", (int) afp->linenumber); else if (status != eslOK) esl_fatal("Conversion of SS line failed, code %d, alifile line: %d", status, (int) afp->linenumber); } } fprintf(ofp, "#=GR %.*s%*s%.*s%*s%s\n", (int) namelen, seqname, (int) (pos-namelen-5), "", (int) taglen, tag, (int) (pos2-pos-taglen), "", buf); } else { /* '#' prefixed line that is not #=GR (or it is #=GR and wussify,dewuss,fullwuss are all FALSE) */ fprintf(ofp, "%.*s\n", (int) afp->n, afp->line); /* print the line */ } } /* end of 'if (*s == '#')' */ else { /* sequence line */ if (esl_memtok(&p, &n, " \t", &seqname, &namelen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "--small parse failed (line %d): bad sequence line", (int) afp->linenumber); if (esl_memtok(&p, &n, " \t", &text, &textlen) != eslOK) ESL_XFAIL(eslEFORMAT, afp->errmsg, "--small parse failed (line %d): bad sequence line", (int) afp->linenumber); pos = text - afp->line; /* verify alignment length */ if (exp_alen == -1) exp_alen = textlen; else if(exp_alen != textlen) ESL_XFAIL(eslEFORMAT, afp->errmsg, "small mem parse failed (line %d): bad seq line, len %d, expected %d", (int) afp->linenumber, (int) textlen, (int) exp_alen); /* make sure we haven't just read a second line of the first sequence in file (we must be in Pfam 1 line/seq file) */ if (nseq_read == 0) { if ((status = esl_memstrdup(seqname, namelen, &(first_seqname))) != eslOK) goto ERROR; } else if (esl_memstrcmp(seqname, namelen, first_seqname)) { ESL_XFAIL(eslEFORMAT, afp->errmsg, "parse failed (line %d): two seqs named %s. Alignment appears to be in Stockholm format. Reformat to Pfam with esl-reformat.", (int) afp->linenumber, seqname); } nseq_read++; /* we need to make a writable string copy of the annotation, to edit it */ ESL_REALLOC(buf, sizeof(char) * (textlen+1)); esl_memstrcpy(text, textlen, buf); /* make adjustments as necessary */ if (rfrom) symconvert(buf, rfrom, rto); if (gapsym) symconvert(buf, "-_.", gapsym); if (force_lower) symconvert(buf, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz"); if (force_upper) symconvert(buf, "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); if (force_rna) symconvert(buf, "Tt", "Uu"); if (force_dna) symconvert(buf, "Uu", "Tt"); if (iupac_to_n) symconvert(buf, "RYMKSWHBVDrymkswhbvd", "NNNNNNNNNNnnnnnnnnnn"); if (x_is_bad) symconvert(buf, "Xx", "Nn"); /* print it out */ fprintf(ofp, "%.*s%*s%s\n", (int) namelen, seqname, (int) (pos-namelen), "", buf); } } /* If we saw a normal // end, we would've successfully read a line, * so when we get here, status (from the line read) should be eslOK. */ if (status != eslOK) esl_fatal("--small parse failed (line %d): didn't find // at end of alignment", (int) afp->linenumber); if (first_seqname) free(first_seqname); if (buf) free(buf); return eslOK; ERROR: return status; } static int parse_replace_string(const char *rstring, char **ret_from, char **ret_to) { int status; int rlen, mid, i; int is_valid = FALSE; char *from = NULL; char *to = NULL; /* Note: we could use ESL_REGEXP but then multiple ':'s in rstring could cause problems */ rlen = strlen(rstring); /* check validity of rstring: must be ":" with len()==len() */ if((rlen % 2) != 0) { /* odd num chars, good */ mid = rlen / 2; if(rstring[mid] == ':') { /* middle character is ':', good */ ESL_ALLOC(from, sizeof(char) * (mid+1)); ESL_ALLOC(to, sizeof(char) * (mid+1)); for(i = 0; i < mid; i++) from[i] = rstring[i]; for(i = mid+1; i < rlen; i++) to[i-(mid+1)] = rstring[i]; from[mid] = '\0'; to[mid] = '\0'; is_valid = TRUE; } } if(! is_valid) esl_fatal("--replace takes arg of : with len() == len(); %s not recognized", rstring); *ret_from = from; *ret_to = to; return eslOK; ERROR: if(from != NULL) free(from); if(to != NULL) free(to); return status; } /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/miniapps/esl-reformat.c $ * SVN $Id: esl-reformat.c 711 2011-07-27 20:06:15Z eddys $ *****************************************************************/ hmmer-3.1b2/easel/miniapps/esl-mask.itest.pl0000775361611702660230000001036712473612611020411 0ustar wheelerteddy#! /usr/bin/perl # Integrated test of esl-mask miniapp. # # Usage: ./esl-mask.itest.pl # Example: ./esl-mask.itest.pl ./esl-mask foo # # SRE, Sun Nov 1 09:26:45 2009 [Casa de Gatos] # SVN $Id: esl-mask.itest.pl 434 2009-11-11 14:22:49Z eddys $ $eslmask = shift; $tmppfx = shift; if (! -x "$eslmask") { die "FAIL: didn't find esl-mask binary $eslmask"; } open(SQFILE, ">$tmppfx.1") || die "FAIL: couldn't open $tmppfx.1 for writing seqfile"; print SQFILE << "EOF"; >seq1 aaAAAAAAAABBBBBBBBbbCCCCCCCCcc >seq2 ddDDD EEEee FFFff EOF close SQFILE; open(MASKFILE, ">$tmppfx.2") || die "FAIL: couldn't open $tmppfx.2 for writing maskfile"; print MASKFILE << "EOF"; seq1 11 20 seq2 6 10 EOF close MASKFILE; $output = `$eslmask -h`; if ($? != 0) { die "FAIL: esl-mask failed unexpectedly"; } if ($output !~ /Usage: esl-mask/) { die "FAIL: help output not right"; } $output = `$eslmask $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-mask failed unexpectedly"; } if ($output !~ /aaAAAAAAAAXXXXXXXXXXCCCCCCCCcc/) { die "FAIL: seq masked incorrectly"; } if ($output !~ /ddDDDXXXXXFFFff/) { die "FAIL: seq masked incorrectly"; } $output = `$eslmask -r $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-mask failed unexpectedly"; } if ($output !~ /XXXXXXXXXXBBBBBBBBbbXXXXXXXXXX/) { die "FAIL: seq masked incorrectly"; } if ($output !~ /XXXXXEEEeeXXXXX/) { die "FAIL: seq masked incorrectly"; } system("$eslmask -o $tmppfx.out $tmppfx.1 $tmppfx.2 2>&1"); if ($? != 0) { die "FAIL: esl-mask failed unexpectedly"; } $output = `cat $tmppfx.out`; if ($output !~ /aaAAAAAAAAXXXXXXXXXXCCCCCCCCcc/) { die "FAIL: seq masked incorrectly"; } if ($output !~ /ddDDDXXXXXFFFff/) { die "FAIL: seq masked incorrectly"; } $output = `$eslmask -l $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-mask failed unexpectedly"; } if ($output !~ /AAAAAAAAAAbbbbbbbbbbCCCCCCCCCC/) { die "FAIL: seq masked incorrectly"; } if ($output !~ /DDDDDeeeeeFFFFF/) { die "FAIL: seq masked incorrectly"; } $output = `$eslmask -lr $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-mask failed unexpectedly"; } if ($output !~ /aaaaaaaaaaBBBBBBBBBBcccccccccc/) { die "FAIL: seq masked incorrectly"; } if ($output !~ /dddddEEEEEfffff/) { die "FAIL: seq masked incorrectly"; } $output = `$eslmask -m N $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-mask failed unexpectedly"; } if ($output !~ /aaAAAAAAAANNNNNNNNNNCCCCCCCCcc/) { die "FAIL: seq masked incorrectly"; } if ($output !~ /ddDDDNNNNNFFFff/) { die "FAIL: seq masked incorrectly"; } $output = `$eslmask -x 2 $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-mask failed unexpectedly"; } if ($output !~ /aaAAAAAAXXXXXXXXXXXXXXCCCCCCcc/) { die "FAIL: seq masked incorrectly"; } if ($output !~ /ddDXXXXXXXXXFff/) { die "FAIL: seq masked incorrectly"; } $output = `$eslmask -x 7 $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-mask failed unexpectedly"; } if ($output !~ /aaAXXXXXXXXXXXXXXXXXXXXXXXXCcc/) { die "FAIL: seq masked incorrectly"; } if ($output !~ /XXXXXXXXXXXXXXX/) { die "FAIL: seq masked incorrectly"; } $output = `$eslmask -rx 2 $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-mask failed unexpectedly"; } if ($output !~ /XXXXXXXXXXXXBBBBBBXXXXXXXXXXXX/) { die "FAIL: seq masked incorrectly"; } if ($output !~ /XXXXXXXEXXXXXXX/) { die "FAIL: seq masked incorrectly"; } $output = `$eslmask -rx 7 $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-mask failed unexpectedly"; } if ($output !~ /XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/) { die "FAIL: seq masked incorrectly"; } if ($output !~ /XXXXXXXXXXXXXXX/) { die "FAIL: seq masked incorrectly"; } print "ok\n"; unlink "$tmppfx.1"; unlink "$tmppfx.2"; unlink "$tmppfx.out"; exit 0; hmmer-3.1b2/easel/miniapps/esl-alimap.c0000664361611702660230000010227012473612610017370 0ustar wheelerteddy/* Map two multiple sequence alignments to each other. * * EPN, Tue Sep 23 13:39:03 2008 * SVN $Id: esl-alimanip.c 270 2008-06-19 20:45:47Z nawrockie $ */ #include "esl_config.h" #include #include #include #include #include #include #include "easel.h" #include "esl_distance.h" #include "esl_fileparser.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_distance.h" #include "esl_dmatrix.h" #include "esl_vectorops.h" #include "esl_stack.h" #include "esl_tree.h" #include "esl_wuss.h" static char banner[] = "map two alignments to each other"; static char usage[] = "[options] \n\ and must be in Stockholm format."; #define NCHOICES 3 #define DIAG 0 #define VERT 1 #define HORZ 2 static int map_msas(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa1, ESL_MSA *msa2, int **ret_msa1_to_msa2_map); static int map_sub_msas(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa1, ESL_MSA *msa2, char **ret_msa1_to_msa2_mask); static int map_rfpos_to_apos(ESL_MSA *msa, int **ret_rf2a_map, int **ret_a2rf_map, int *ret_rflen); static int map2masks(const ESL_GETOPTS *go, char *errbuf, int alen1, int alen2, int *a2rf_map1, int *a2rf_map2, int *rf2a_map1, int *rf2a_map2, int rflen1, int rflen2, int *msa1_to_msa2_map); static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "help; show brief info on version and usage", 1 }, { "-q", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "be quiet, don't print mapping of each column", 1 }, { "--mask-a2a", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, NULL, "mask to :'1'=msa1 aln col x maps msa2 aln col", 1 }, { "--mask-a2rf", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, NULL, "mask to :'1'=msa1 aln col x maps msa2 nongap RF col", 1 }, { "--mask-rf2a", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, NULL, "mask to :'1'=msa1 nongap RF col x maps msa2 aln col", 1 }, { "--mask-rf2rf",eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, NULL, "mask to :'1'=msa1 nongap RF col x maps msa2 nongap RF col", 1 }, { "--submap", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, NULL, " is subaln of , output mask to ", 1 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--dna,--rna", " contain protein alignments", 1 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--amino,--rna", " contain DNA alignments", 1 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--amino,--dna", " contain RNA alignments", 1 }, { 0,0,0,0,0,0,0,0,0,0 }, }; int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* application configuration */ ESL_ALPHABET *abc = NULL; /* biological alphabet */ char *alifile1= NULL; /* alignment 1 file name */ char *alifile2= NULL; /* alignment 2 file name */ int fmt; /* format code for alifiles */ ESLX_MSAFILE *afp1 = NULL; /* open alignment file 1 */ ESLX_MSAFILE *afp2 = NULL; /* open alignment file 2 */ ESL_MSA *msa1 = NULL; /* multiple sequence alignment 1 */ ESL_MSA *msa2 = NULL; /* multiple sequence alignment 2 */ int status; /* easel return code */ char errbuf[eslERRBUFSIZE*4]; int *msa1_to_msa2_map; /* map from to */ char *sub_msa1_to_msa2_mask; /* with --sub the map from to in mask form */ FILE *subfp = NULL; /*********************************************** * Parse command line ***********************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "-h") ) { esl_banner(stdout, argv[0], banner); esl_usage (stdout, argv[0], usage); puts("\nwhere basic options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != 2) { printf("Incorrect number of command line arguments.\n"); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } alifile1 = esl_opt_GetArg(go, 1); alifile2 = esl_opt_GetArg(go, 2); fmt = eslMSAFILE_STOCKHOLM; /*********************************************** * Open the MSA files ***********************************************/ if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); if ( (status = eslx_msafile_Open(&abc, alifile1, NULL, fmt, NULL, &afp1)) != eslOK) eslx_msafile_OpenFailure(afp1, status); if ( (status = eslx_msafile_Open(&abc, alifile2, NULL, fmt, NULL, &afp2)) != eslOK) eslx_msafile_OpenFailure(afp2, status); /****************************************************************** * Read first alignment from each file, we only use the first one ******************************************************************/ if ((status = eslx_msafile_Read(afp1, &msa1)) != eslOK) eslx_msafile_ReadFailure(afp1, status); if ((status = eslx_msafile_Read(afp2, &msa2)) != eslOK) eslx_msafile_ReadFailure(afp2, status); /* map the alignments in msa1 and msa2 */ if(! esl_opt_IsOn(go, "--submap")) { if((status = map_msas(go, errbuf, msa1, msa2, &msa1_to_msa2_map)) != eslOK) goto ERROR; free(msa1_to_msa2_map); } /* --submap: if nec, map to a subset of it's own columns in */ else { /* --submap was enabled */ if ((subfp = fopen(esl_opt_GetString(go, "--submap"), "w")) == NULL) ESL_FAIL(eslFAIL, errbuf, "Failed to open --submap output file %s\n", esl_opt_GetString(go, "--submap")); if((status = map_sub_msas(go, errbuf, msa1, msa2, &sub_msa1_to_msa2_mask)) != eslOK) goto ERROR; fprintf(subfp, "%s\n", sub_msa1_to_msa2_mask); fclose(subfp); subfp = NULL; printf("# Mask of 1/0s with 1 indicating aln column in %s maps to a column in %s saved to file %s.\n", alifile1, alifile2, esl_opt_GetString(go, "--submap")); free(sub_msa1_to_msa2_mask); } /* Cleanup, normal return */ eslx_msafile_Close(afp1); eslx_msafile_Close(afp2); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); esl_msa_Destroy(msa1); esl_msa_Destroy(msa2); return 0; ERROR: if (afp1) eslx_msafile_Close(afp1); if (afp2) eslx_msafile_Close(afp2); if (go) esl_getopts_Destroy(go); if (msa1) esl_msa_Destroy(msa1); if (msa2) esl_msa_Destroy(msa2); if (subfp) fclose(subfp); esl_fatal(errbuf); return 1; /* never reached */ } /* map_msas * * Align msa1 and msa2. * For each column in msa1, determine the corresponding column * in msa2. This implementation requires: * - msa1 and msa2 contain exactly the same sequences in the same order * Note: the seqs in msa1 and msa2 do not have to have the same names. * * Uses a DP algorithm similar to Needleman-Wunsch, but that's aligning * two alignment columns at a time instead of two residues. */ static int map_msas(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa1, ESL_MSA *msa2, int **ret_msa1_to_msa2_map) { int status; int **one2two; /* [0..c..rflen1][0..a..alen2] number of residues from non-gap RF column c of msa1 * aligned in column a of msa 2 */ int *rf2a_map1 = NULL; /* msa1 map of reference columns (non-gap RF residues) to alignment columns, NULL if msa1->rf == NULL */ int *rf2a_map2 = NULL; /* msa2 map of reference columns (non-gap RF residues) to alignment columns, NULL if msa2->rf == NULL */ int *a2rf_map1 = NULL; /* msa1 map of alignment columns to reference columns, NULL if msa1->rf == NULL */ int *a2rf_map2 = NULL; /* msa2 map of alignment columns to reference columns, NULL if msa2->rf == NULL */ int apos1, apos2; /* counters over alignment position in msa1, msa2 respectively */ int alen1, alen2; /* alignment lengths */ int rfpos1, rfpos2; /* counters over reference positions */ int rflen1, rflen2; /* reference (non-gap RF) lengths */ int **mx; /* [0..c..rflen1][0..a..alen2] dp matrix, score of max scoring aln * from 1..c in msa1 and 1..a in msa 2 */ int **tb; /* [0..c..rflen1][0..a..alen2] traceback ptrs, 0 for diagonal, 1 for vertical */ char *seq1, *seq2; /* temporary strings for ensuring dealigned sequences in msa1 and msa2 are identical */ int64_t len1, len2; /* length of seq1, seq2 */ int isgap1, isgap2; /* is this residue a gap in msa1, msa2? */ int i; /* counter over sequences */ int *res1_per_apos; /* [0..apos..alen1] number of residues in column apos of msa1 */ int sc; /* max score of full path (alignment) through dp mx */ int tb_sc; /* score of traceback, should equal sc */ int *one2two_map; /* [0..a..alen1] the alignment, msa2 column that column apos1 in msa1 maps to */ int total_res = 0; /* total number of residues in msa1 */ float coverage; /* fraction of total_res that are within mapped msa2 columns from one2two_map, * this is tb_sc / total_res */ int total_cres1=0; /* total number of residues in reference positions in msa1 */ int covered_cres1 = 0; /* number of residues in reference positions in msa1 that also appear in the corresponding * mapped column of msa2 */ int be_quiet = esl_opt_GetBoolean(go, "-q"); int *choices; int i_choice; /* contract check */ if(! (msa1->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "in map_msas() msa1 (%s) not digitized.\n", esl_opt_GetArg(go, 1)); if(! (msa2->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "in map_msas() msa2 (%s) not digitized.\n", esl_opt_GetArg(go, 2)); alen1 = msa1->alen; alen2 = msa2->alen; /* Map msa1 (reference) columns to alignment positions */ rflen1 = rflen2 = 0; if(msa1->rf != NULL) if((status = map_rfpos_to_apos(msa1, &rf2a_map1, &a2rf_map1, &rflen1)) != eslOK) goto ERROR; if(msa2->rf != NULL) if((status = map_rfpos_to_apos(msa2, &rf2a_map2, &a2rf_map2, &rflen2)) != eslOK) goto ERROR; if(! be_quiet) { printf("# %-25s alignment length: %d\n", esl_opt_GetArg(go, 1), alen1); printf("# %-25s alignment length: %d\n", esl_opt_GetArg(go, 2), alen2); } /* collect counts in one2two[i][j]: number of sequences for which residue aligned in msa1 non-gap column i * is aligned in msa2 alignment column j. */ ESL_ALLOC(seq1, sizeof(char) * (alen1+1)); ESL_ALLOC(seq2, sizeof(char) * (alen2+1)); ESL_ALLOC(one2two, sizeof(int *) * (alen1+1)); for(apos1 = 0; apos1 <= alen1; apos1++) { ESL_ALLOC(one2two[apos1], sizeof(int) * (alen2+1)); esl_vec_ISet(one2two[apos1], (alen2+1), 0); } total_res = 0; for(i = 0; i < msa1->nseq; i++) { /* ensure raw (unaligned) seq i in the 2 msas is the same */ esl_abc_Textize(msa1->abc, msa1->ax[i], alen1, seq1); esl_abc_Textize(msa1->abc, msa2->ax[i], alen2, seq2); /* note: msa*1*->abc used on purpose, allows DNA/RNA to peacefully coexist in this func */ esl_strdealign(seq1, seq1, "-_.~", &len1); esl_strdealign(seq2, seq2, "-_.~", &len2); if(len1 != len2) { ESL_FAIL(eslEINVAL, errbuf, "unaligned seq number %d (msa1: %s, msa2: %s) differs in length %s (%" PRId64 ") and %s (%" PRId64 "), those files must contain identical raw seqs\n", i, msa1->sqname[i], msa2->sqname[i], esl_opt_GetArg(go, 1), len1, esl_opt_GetArg(go, 2), len2); } if(strncmp(seq1, seq2, len1) != 0) ESL_FAIL(eslEINVAL, errbuf, "unaligned seq number %d differs between %s and %s, those files must contain identical raw seqs\n", i, esl_opt_GetArg(go, 1), esl_opt_GetArg(go, 2)); total_res += len1; apos1 = apos2 = 1; while((apos1 <= alen1) || (apos2 <= alen2)) { isgap1 = esl_abc_XIsGap(msa1->abc, msa1->ax[i][apos1]); isgap2 = esl_abc_XIsGap(msa2->abc, msa2->ax[i][apos2]); if ( isgap1 && isgap2) { apos1++; apos2++; } else if ( isgap1 && !isgap2) { apos1++; } else if (!isgap1 && isgap2) { apos2++; } else if ( msa1->ax[i][apos1] == msa2->ax[i][apos2]) { one2two[apos1++][apos2++]++; /* two2one[apos2][apos1]++; */ } } } /****************************************************************** * DP alignment of msa1 to msa2 * dp matrix: mx[apos1][apos2] apos1=1..msa->alen1, apos2=1..alen2 (apos1=0 || apos2=0 is invalid) * mx[apos1][apos2] = score of maximal alignment for apos1=1..apos1, apos2'=1..apos2 INCLUDING * apos1 and apos2. Score is number of residues from msa1 columns * 1..apos1 that exist in their respective aligned columns in msa2 (the growing * maximally scoring alignment). */ /****************************************************************** * initialization */ ESL_ALLOC(mx, sizeof(int *) * (alen1+1)); ESL_ALLOC(tb, sizeof(int *) * (alen1+1)); for(apos1 = 0; apos1 <= alen1; apos1++) { ESL_ALLOC(mx[apos1], sizeof(int) * (alen2+1)); ESL_ALLOC(tb[apos1], sizeof(int) * (alen2+1)); esl_vec_ISet(mx[apos1], (alen2+1), 0); esl_vec_ISet(tb[apos1], (alen2+1), -2); /* -2 is a bogus value, if we see it during traceback, there's a problem */ tb[apos1][0] = HORZ; /* special case, if we hit apos2==0 and apos1 > 0, we have to do HORZ moves until apos1==1 */ } esl_vec_ISet(tb[0], (alen2+1), VERT); /* special case, if we hit apos1==0 and apos2 > 0, we have to do VERT moves until apos2==1 */ tb[0][0] = -2; /* all alignments must end here */ ESL_ALLOC(res1_per_apos, sizeof(int) * (alen1+1)); esl_vec_ISet(res1_per_apos, (alen1+1), 0); mx[0][0] = 0; tb[0][0] = -1; /* last cell, special value */ /***************************************************************** * recursion */ ESL_ALLOC(choices, sizeof(int) * NCHOICES); for(apos1 = 1; apos1 <= alen1; apos1++) { for(apos2 = 1; apos2 <= alen2; apos2++) { choices[DIAG] = mx[(apos1-1)][(apos2-1)] + one2two[apos1][apos2]; choices[VERT] = mx[ apos1 ][(apos2-1)]; choices[HORZ] = mx[(apos1-1)][ apos2 ]; i_choice = esl_vec_IArgMax(choices, NCHOICES); mx[apos1][apos2] = choices[i_choice]; tb[apos1][apos2] = i_choice; res1_per_apos[apos1] += one2two[apos1][apos2]; /*printf("mx[%3d][%3d]: %5d (%d)\n", apos1, apos2, mx[apos1][apos2], tb[apos1][apos2]);*/ } } free(choices); total_cres1 = 0; if(rf2a_map1 != NULL) { for(rfpos1 = 1; rfpos1 <= rflen1; rfpos1++) total_cres1 += res1_per_apos[rf2a_map1[rfpos1]]; } /***************************************************************** * traceback */ sc = mx[alen1][alen2]; if(!be_quiet) { /* printf("score %d\n", sc);*/ if(a2rf_map1 != NULL && a2rf_map2 != NULL) { printf("# %12s %12s %22s\n", " msa 1 ", " msa 2 ", ""); printf("# %12s %12s %22s\n", "------------", "------------", ""); printf("# %5s %5s %5s %5s %22s\n", "rfpos", "apos", "rfpos", "apos", " num common residues"); printf("# %5s %5s %5s %5s %22s\n", "-----", "-----", "-----", "-----", "---------------------"); } else if(a2rf_map1 != NULL) { printf("# %12s %5s %22s\n", " msa 1 ", "msa 2", ""); printf("# %12s %5s %22s\n", "------------", "-----", ""); printf("# %5s %5s %5s %22s\n", "rfpos", "apos", "apos", " num common residues"); printf("# %5s %5s %5s %22s\n", "-----", "-----", "-----", "---------------------"); } else if (a2rf_map2 != NULL) { printf("# %5s %12s %22s\n", "msa 1", " msa 2 ", ""); printf("# %5s %12s %22s\n", "-----", "------------", ""); printf("# %5s %5s %5s %22s\n", "apos", "rfpos", "apos", " num common residues"); printf("# %5s %5s %5s %22s\n", "-----", "-----", "-----", "---------------------"); } else { printf("# %5s %5s %22s\n", "msa 1", "msa 2", ""); printf("# %5s %5s %22s\n", "-----", "-----", ""); printf("# %5s %5s %22s\n", "apos", "apos", " num common residues"); printf("# %5s %5s %22s\n", "-----", "-----", "---------------------"); } } /* traceback, and build one2two_map[] */ apos1 = alen1; apos2 = alen2; tb_sc = 0; covered_cres1 = 0; ESL_ALLOC(one2two_map, sizeof(int) * (alen1+1)); esl_vec_ISet(one2two_map, (alen1+1), 0); one2two_map[0] = -1; /* invalid */ while(tb[apos1][apos2] != -1) { if(tb[apos1][apos2] == DIAG) { /* diagonal move */ rfpos1 = (a2rf_map1 == NULL) ? -1 : a2rf_map1[apos1]; rfpos2 = (a2rf_map2 == NULL) ? -1 : a2rf_map2[apos2]; if(!be_quiet) { if(a2rf_map1 != NULL && a2rf_map2 != NULL) { if(rfpos1 == -1 && rfpos2 == -1) { printf(" %5s %5d --> %5s %5d %5d / %5d (%.4f)\n", "-", apos1, "-", apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); } else if (rfpos1 == -1) { printf(" %5s %5d --> %5d %5d %5d / %5d (%.4f)\n", "-", apos1, rfpos2, apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); } else if (rfpos2 == -1) { printf(" %5d %5d --> %5s %5d %5d / %5d (%.4f)\n", rfpos1, apos1, "-", apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); } else { printf(" %5d %5d --> %5d %5d %5d / %5d (%.4f)\n", rfpos1, apos1, rfpos2, apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); } } else if(a2rf_map1 != NULL) { if (rfpos1 == -1) { printf(" %5s %5d --> %5d %5d / %5d (%.4f)\n", "-", apos1, apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); } else { printf(" %5d %5d --> %5d %5d / %5d (%.4f)\n", rfpos1, apos1, apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); } } else if (a2rf_map2 != NULL) { if (rfpos2 == -1) { printf(" %5d --> %5s %5d %5d / %5d (%.4f)\n", apos1, "-", apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); } else { printf(" %5d --> %5d %5d %5d / %5d (%.4f)\n", apos1, rfpos2, apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); } } else { printf(" %5d --> %5d %5d / %5d (%.4f)\n", apos1, apos2, one2two[apos1][apos2], res1_per_apos[apos1], (res1_per_apos[apos1] == 0) ? 0.0000 : ((float) one2two[apos1][apos2] / (float) res1_per_apos[apos1])); } } tb_sc += one2two[apos1][apos2]; one2two_map[apos1] = apos2; if(rfpos1 > 0) covered_cres1 += one2two[apos1][apos2]; /* apos1 is a rfpos */ apos1--; apos2--; } else if(tb[apos1][apos2] == VERT) { apos2--; /* vertical move */ } else if(tb[apos1][apos2] == HORZ) { apos1--; /* horizontal move */ } else if(tb[apos1][apos2] != -1) /* shouldn't happen */ ESL_FAIL(eslEINVAL, errbuf, "in dp traceback, tb[apos1: %d][apos2: %d] %d\n", apos1, apos2, tb[apos1][apos2]); } /* done DP code **********************************/ if(!be_quiet) printf("# Total trace back sc: %d\n", tb_sc); if(tb_sc != sc) ESL_FAIL(eslEINVAL, errbuf, "in dp traceback, tb_sc (%d) != sc (%d)\n", tb_sc, sc); coverage = (float) tb_sc / (float) total_res; printf("# Coverage: %6d / %6d (%.4f)\n# Coverage is fraction of residues from %s in optimally mapped columns in %s\n", tb_sc, total_res, coverage, esl_opt_GetArg(go, 1), esl_opt_GetArg(go, 2)); if(total_cres1 > 0) printf("# RF coverage: %6d / %6d (%.4f)\n# RF coverage is fraction of non-gap RF residues from %s in optimally mapped columns in %s\n", covered_cres1, total_cres1, (float) covered_cres1 / (float) total_cres1, esl_opt_GetArg(go, 1), esl_opt_GetArg(go, 2)); /* print masks if nec */ if((status = map2masks(go, errbuf, alen1, alen2, a2rf_map1, a2rf_map2, rf2a_map1, rf2a_map2, rflen1, rflen2, one2two_map)) != eslOK) return status; /* clean up and return */ for(apos1 = 0; apos1 <= alen1; apos1++) { free(mx[apos1]); free(tb[apos1]); } free(mx); free(tb); for(apos1 = 0; apos1 <= alen1; apos1++) free(one2two[apos1]); free(one2two); free(res1_per_apos); if(rf2a_map1 != NULL) free(rf2a_map1); if(rf2a_map2 != NULL) free(rf2a_map2); if(a2rf_map1 != NULL) free(a2rf_map1); if(a2rf_map2 != NULL) free(a2rf_map2); free(seq1); free(seq2); *ret_msa1_to_msa2_map = one2two_map; return eslOK; ERROR: return status; } /* map_sub_msas * * msa1 and msa2 contain the same named sequences, msa1 contains a superset * of the columns in msa2. Determine which of the msa1 columns the msa2 * columns correspond to. */ static int map_sub_msas(const ESL_GETOPTS *go, char *errbuf, ESL_MSA *msa1, ESL_MSA *msa2, char **ret_msa1_to_msa2_mask) { int status; int apos1, apos2; /* counters over alignment position in msa1, msa2 respectively */ int i; int *msa1_to_msa2_map; /* [0..apos1..msa1->alen] msa2 alignment position that apos1 corresponds to */ char *mask; /* contract check */ if(! (msa1->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "in map_sub_msas() msa1 (%s) not digitized.\n", esl_opt_GetArg(go, 1)); if(! (msa2->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "in map_sub_msas() msa2 (%s) not digitized.\n", esl_opt_GetString(go, "--submap")); if(msa1->alen <= msa2->alen) ESL_FAIL(eslEINVAL, errbuf, "in map_sub_msas() alignment length for msa1 (%" PRId64 "d) <= length for msa2 (%" PRId64 ")\n", msa1->alen, msa2->alen); ESL_ALLOC(mask, sizeof(char) * (msa1->alen+1)); for(apos1 = 0; apos1 < msa1->alen; apos1++) mask[apos1] = '0'; mask[msa1->alen] = '\0'; ESL_ALLOC(msa1_to_msa2_map, sizeof(int) * (msa1->alen+1)); esl_vec_ISet(msa1_to_msa2_map, (msa1->alen+1), -1); /* both alignments must have same 'named' sequences in same order */ if(msa1->nseq != msa2->nseq) ESL_FAIL(eslEINVAL, errbuf, "in map_sub_msas() msa1 has %d sequences, msa2 has %d sequences\n", msa1->nseq, msa2->nseq); for(i = 0; i < msa1->nseq; i++) { if(strcmp(msa1->sqname[i], msa2->sqname[i]) != 0) ESL_FAIL(eslEINVAL, errbuf, "in map_sub_msas() msa1 seq %d is named %s, msa2 seq %d is named %s\n", i, msa1->sqname[i], i, msa2->sqname[i]); } apos1 = 1; apos2 = 1; while((apos2 <= msa2->alen) || (apos1 <= msa1->alen)) { /* determine which apos1 (alignment column in msa1), apos2 (alignment column in msa2) corresponds to */ for(i = 0; i < msa1->nseq; i++) { if(msa1->ax[i][apos1] != msa2->ax[i][apos2]) { apos1++; break; /* try next apos1 */ } } if(i == msa1->nseq) { /* found a match */ msa1_to_msa2_map[apos1] = apos2; mask[(apos1-1)] = '1'; apos1++; apos2++; } } if((apos1 != (msa1->alen+1)) || (apos2 != (msa2->alen+1))) ESL_FAIL(eslEINVAL, errbuf, "in map_sub_msas(), failure mapping alignments, end of loop apos1-1 = %d (msa1->alen: %" PRId64 ") and apos2-1 = %d (msa2->alen: %" PRId64 ")\n", apos1-1, msa1->alen, apos2-1, msa2->alen); free(msa1_to_msa2_map); *ret_msa1_to_msa2_mask = mask; return eslOK; ERROR: return status; } /* map_rfpos_to_apos * * Given an MSA, determine the alignment position each * reference position refers to. */ static int map_rfpos_to_apos(ESL_MSA *msa, int **ret_rf2a_map, int **ret_a2rf_map, int *ret_rflen) { int status; int rflen = 0; int *rf2a_map = NULL; int *a2rf_map = NULL; int rfpos = 0; int apos = 0; /* contract check */ if(msa->rf == NULL) { status = eslEINVAL; goto ERROR; } /* count reference columns */ for(apos = 1; apos <= msa->alen; apos++) if((! esl_abc_CIsGap(msa->abc, msa->rf[(apos-1)])) && (! esl_abc_CIsMissing(msa->abc, msa->rf[(apos-1)])) && (! esl_abc_CIsNonresidue(msa->abc, msa->rf[(apos-1)]))) rflen++; /* build maps */ ESL_ALLOC(rf2a_map, sizeof(int) * (rflen+1)); ESL_ALLOC(a2rf_map, sizeof(int) * (msa->alen+1)); esl_vec_ISet(a2rf_map, msa->alen+1, -1); rf2a_map[0] = -1; for(apos = 1; apos <= msa->alen; apos++) { if((! esl_abc_CIsGap(msa->abc, msa->rf[(apos-1)])) && (! esl_abc_CIsMissing(msa->abc, msa->rf[(apos-1)])) && (! esl_abc_CIsNonresidue(msa->abc, msa->rf[(apos-1)]))) { rf2a_map[++rfpos] = apos; a2rf_map[apos] = rfpos; } /* else a2rf_map[apos] remains -1 as it was initialized */ } if(ret_rf2a_map != NULL) *ret_rf2a_map = rf2a_map; else free(rf2a_map); if(ret_a2rf_map != NULL) *ret_a2rf_map = a2rf_map; else free(a2rf_map); if(ret_rflen != NULL) *ret_rflen = rflen; return eslOK; ERROR: if(rf2a_map != NULL) free(rf2a_map); if(a2rf_map != NULL) free(a2rf_map); return status; } /* map2masks * * Given a map of alignment columns in msa1 to alignment columns * to msa2, construct and output masks as per command-line options. * * Args: msa1_to_msa2_map: [1..apos..msa1->alen]: '0': msa1 apos maps to a gap in msa2 (doesn't map to any column in msa2) * 'x': msa1 apos maps to posn x in msa2 (x>0) */ static int map2masks(const ESL_GETOPTS *go, char *errbuf, int alen1, int alen2, int *a2rf_map1, int *a2rf_map2, int *rf2a_map1, int *rf2a_map2, int rflen1, int rflen2, int *msa1_to_msa2_map) { int status; int apos1, apos2; /* counters over alignment position in msa1, msa2 respectively */ int rfpos1, rfpos2; /* counters over reference positions */ int num_ones; /* number of 1s in current mask */ int num_zeroes; /* number of 0s in current mask */ FILE *fp; char *mask = NULL; if(esl_opt_GetString(go, "--mask-a2a")) { if ((fp = fopen(esl_opt_GetString(go, "--mask-a2a"), "w")) == NULL) ESL_FAIL(eslFAIL, errbuf, "Failed to open --mask-a2a mask output file %s", esl_opt_GetString(go, "--mask-a2a")); /* construct mask as follows: * mask[0..apos1..alen1-1] = '1' if column apos1+1 maps to an alignment column of msa2 * = '0' if column apos1+1 maps to a gap in msa2 (doesn't map to any column in msa2) */ ESL_ALLOC(mask, sizeof(char) * (alen1+1)); num_ones = num_zeroes = 0; for(apos1 = 1; apos1 <= alen1; apos1++) { if(msa1_to_msa2_map[apos1] == 0) { mask[(apos1-1)] = '0'; num_zeroes++; } else { mask[(apos1-1)] = '1'; num_ones++; } } mask[alen1] = '\0'; fprintf(fp, "%s\n", mask); free(mask); fclose(fp); printf("# Mask of 1/0s with 1 indicating aln column in %s maps to aln column in %s saved to file %s.\n# (Length: %d; '1's: %d; '0's: %d)\n", esl_opt_GetArg(go, 1), esl_opt_GetArg(go, 2), esl_opt_GetString(go, "--mask-a2a"), (num_ones+num_zeroes), num_ones, num_zeroes); } if(esl_opt_GetString(go, "--mask-a2rf")) { if (a2rf_map2 == NULL) ESL_FAIL(eslFAIL, errbuf, "with --mask-a2rf, %s must have #=GC RF annotation, but it doesn't.", esl_opt_GetArg(go, 2)); if ((fp = fopen(esl_opt_GetString(go, "--mask-a2rf"), "w")) == NULL) ESL_FAIL(eslFAIL, errbuf, "Failed to open --mask-a2rf mask output file %s\n", esl_opt_GetString(go, "--mask-a2rf")); /* construct mask as follows: * mask[0..apos1..alen1-1] = '1' if column apos1+1 maps to a reference column (non-gap in RF) of msa2 * = '0' if column apos1+1 maps to a gap (doesn't map to any column in msa2) or an insert (gap in RF) in msa2 */ ESL_ALLOC(mask, sizeof(char) * (alen1+1)); num_ones = num_zeroes = 0; for(apos1 = 1; apos1 <= alen1; apos1++) { apos2 = msa1_to_msa2_map[apos1]; if(apos2 == 0) { mask[(apos1-1)] = '0'; num_zeroes++; } /* apos1 doesn't map to any column in msa2 */ else { rfpos2 = a2rf_map2[apos2]; if(rfpos2 <= 0) { mask[(apos1-1)] = '0'; num_zeroes++; } /* apos1 maps to a gap RF (insert) in msa2 */ else { mask[(apos1-1)] = '1'; num_ones++; } /* apos1 maps to a non-gap RF (reference) column in msa2 */ } } mask[alen1] = '\0'; fprintf(fp, "%s\n", mask); free(mask); fclose(fp); printf("# Mask of 1/0s with 1 indicating aln column in %s maps to reference (non-gap RF) column in %s saved to file %s.\n# (Length: %d; '1's: %d; '0's: %d)\n", esl_opt_GetArg(go, 1), esl_opt_GetArg(go, 2), esl_opt_GetString(go, "--mask-a2rf"), (num_ones+num_zeroes), num_ones, num_zeroes); } if(esl_opt_GetString(go, "--mask-rf2a")) { if (a2rf_map1 == NULL) ESL_FAIL(eslFAIL, errbuf, "with --mask-rf2a, %s must have #=GC RF annotation, but it doesn't.", esl_opt_GetArg(go, 1)); if ((fp = fopen(esl_opt_GetString(go, "--mask-rf2a"), "w")) == NULL) ESL_FAIL(eslFAIL, errbuf, "Failed to open --mask-rf2a mask output file %s\n", esl_opt_GetString(go, "--mask-rf2a")); /* construct mask as follows: * mask[0..rfpos1..rflen-1] = '1' if non-gap RF msa1 column rfpos1+1 maps to an alignment column of msa2 * = '0' if non-gap RF msa1 column rfpos1+1 maps to a gap in msa2 (doesn't map to any column in msa2) */ ESL_ALLOC(mask, sizeof(char) * (rflen1+1)); num_ones = num_zeroes = 0; for(rfpos1 = 1; rfpos1 <= rflen1; rfpos1++) { apos1 = rf2a_map1[rfpos1]; apos2 = msa1_to_msa2_map[apos1]; if(apos2 == 0) { mask[(rfpos1-1)] = '0'; num_zeroes++; } else { mask[(rfpos1-1)] = '1'; num_ones++; } } mask[rflen1] = '\0'; fprintf(fp, "%s\n", mask); free(mask); fclose(fp); printf("# Mask of 1/0s with 1 indicating reference (non-gap RF) column in %s maps to aln column in %s saved to file %s.\n# (Length: %d; '1's: %d; '0's: %d)\n", esl_opt_GetArg(go, 1), esl_opt_GetArg(go, 2), esl_opt_GetString(go, "--mask-rf2a"), (num_ones+num_zeroes), num_ones, num_zeroes); } if(esl_opt_GetString(go, "--mask-rf2rf")) { if (a2rf_map1 == NULL) ESL_FAIL(eslFAIL, errbuf, "with --mask-rf2rf, %s must have #=GC RF annotation, but it doesn't.", esl_opt_GetArg(go, 1)); if (a2rf_map2 == NULL) ESL_FAIL(eslFAIL, errbuf, "with --mask-rf2rf, %s must have #=GC RF annotation, but it doesn't.", esl_opt_GetArg(go, 2)); if ((fp = fopen(esl_opt_GetString(go, "--mask-rf2rf"), "w")) == NULL) ESL_FAIL(eslFAIL, errbuf, "Failed to open --mask-rf2rf mask output file %s\n", esl_opt_GetString(go, "--mask-rf2rf")); /* construct mask as follows: * mask[0..apos1..alen-1] = '1' if column apos1+1 maps to a reference column (non-gap in RF) of msa2 * = '0' if column apos1+1 maps to a gap (doesn't map to any column in msa2) or an insert (gap in RF) in msa2 */ ESL_ALLOC(mask, sizeof(char) * (alen1+1)); num_ones = num_zeroes = 0; for(rfpos1 = 1; rfpos1 <= rflen1; rfpos1++) { apos1 = rf2a_map1[rfpos1]; apos2 = msa1_to_msa2_map[apos1]; if(apos2 == 0) { mask[(rfpos1-1)] = '0'; num_zeroes++; } /* rfpos1 doesn't map to any column in msa2 */ else { rfpos2 = a2rf_map2[apos2]; if(rfpos2 <= 0) { mask[(rfpos1-1)] = '0'; num_zeroes++; } /* rfpos1 maps to a gap RF (insert) in msa2 */ else { mask[(rfpos1-1)] = '1'; num_ones++; } /* rfpos1 maps to a non-gap RF (reference) column in msa2 */ } } mask[rflen1] = '\0'; fprintf(fp, "%s\n", mask); free(mask); fclose(fp); printf("# Mask of 1/0s with 1 indicating reference (non-gap RF) column in %s maps to reference (non-gap RF) column in %s saved to file %s.\n# (Length: %d; '1's: %d; '0's: %d)\n", esl_opt_GetArg(go, 1), esl_opt_GetArg(go, 2), esl_opt_GetString(go, "--mask-rf2rf"), (num_ones+num_zeroes), num_ones, num_zeroes); } return eslOK; ERROR: ESL_FAIL(eslEMEM, errbuf, "map2masks(): memory allocation error."); return status; /* NEVERREACHED */ } hmmer-3.1b2/easel/miniapps/esl-shuffle.c0000664361611702660230000003672012473612611017570 0ustar wheelerteddy/* Shuffling or generating random sequences. * * SRE, Wed Jan 16 15:30:05 2008 [UA5230 to New York] * SVN $Id: esl-shuffle.c 900 2014-01-17 18:55:41Z wheelert $ * from squid's shuffle (1995) */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_composition.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msashuffle.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_sq.h" #include "esl_sqio.h" #include "esl_vectorops.h" static char banner[] = "shuffling or generating random sequences"; static char usage1[] = " [options] (shuffles individual sequences)"; static char usage2[] = "-A [options] (shuffles alignment columnwise)"; static char usage3[] = "-Q [options] (shuffles QRNA pairwise alignments)"; static char usage4[] = "-G [options] (generates random sequences)"; #define MODE_OPTS "-S,-A,-G,-Q" /* toggle group, modes (seqfile, msafile, none) */ #define SHUF_OPTS "-m,-d,-k,-0,-1,-r,-w" /* toggle group, seq shuffling options */ #define ALPH_OPTS "--rna,--dna,--amino" /* toggle group, alphabet type options */ static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "help; show brief info on version and usage", 1 }, { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "direct output data to file ", 1 }, { "-N", eslARG_INT, "1", NULL,"n>0", NULL, NULL, NULL, "generate samples (per input seq/msa)", 1 }, { "-L", eslARG_INT, "0", NULL,"n>=0", NULL, NULL, NULL, "truncate outputs to length ", 1 }, /* Options for shuffling/generating based on input sequences */ { "-m", eslARG_NONE,"default", NULL, NULL, SHUF_OPTS, "-S", NULL, "shuffle preserving monoresidue composition", 2 }, { "-d", eslARG_NONE, FALSE, NULL, NULL, SHUF_OPTS, "-S", NULL, "shuffle preserving mono- and di-residue composition", 2 }, { "-k", eslARG_INT, FALSE, NULL,"n>0", SHUF_OPTS, "-S", NULL, "shuffle nonoverlapping -mers", 2 }, { "-0", eslARG_NONE, FALSE, NULL, NULL, SHUF_OPTS, "-S", NULL, "generate with 0th order Markov properties per input", 2 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, SHUF_OPTS, "-S", NULL, "generate with 1st order Markov properties per input", 2 }, { "-r", eslARG_NONE, FALSE, NULL, NULL, SHUF_OPTS, "-S", NULL, "reverse each input", 2 }, { "-w", eslARG_INT, FALSE, NULL,"n>0", SHUF_OPTS, "-S", NULL, "regionally shuffle inputs in window size ", 2 }, /* Options for shuffling multiple alignments column-wise */ { "-b", eslARG_NONE, FALSE, NULL, NULL, NULL, "-A", NULL, "take bootstrapping samples", 3 }, /* Options for generating sequences de novo */ { "--rna", eslARG_NONE,"default", NULL, NULL, ALPH_OPTS, "-G", NULL, "generate RNA sequence", 4 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, ALPH_OPTS, "-G", NULL, "generate DNA sequence", 4 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, ALPH_OPTS, "-G", NULL, "generate protein sequence", 4 }, /* Other "expert" options */ { "--seed", eslARG_INT, "0", NULL,"n>=0", NULL, NULL, NULL, "set random number generator's seed to ", 5 }, { "--informat", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, NULL, "specify that input file is in format ", 5 }, /* "undocumented" options (these are documented w/ command line usage, and implemented as options) */ { "-S", eslARG_NONE,"default", NULL, NULL, MODE_OPTS, NULL, NULL, "shuffle individual input sequences", 99 }, { "-A", eslARG_NONE, FALSE, NULL, NULL, MODE_OPTS, NULL, NULL, "input is an to be shuffled by columns", 99 }, { "-G", eslARG_NONE, FALSE, NULL, NULL, MODE_OPTS, "-L", NULL, "generate de novo (the following options are valid)", 99 }, { "-Q", eslARG_NONE, FALSE, NULL, NULL, MODE_OPTS, NULL, NULL, "shuffle input QRNA FASTA file", 99 }, { 0,0,0,0,0,0,0,0,0,0 }, }; static void cmdline_failure(char *argv0, char *format, ...) { va_list argp; va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); esl_usage(stdout, argv0, usage1); esl_usage(stdout, argv0, usage2); esl_usage(stdout, argv0, usage3); esl_usage(stdout, argv0, usage4); printf("\nTo see more help on available options, do %s -h\n\n", argv0); exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { esl_banner(stdout, argv0, banner); esl_usage (stdout, argv0, usage1); esl_usage (stdout, argv0, usage2); esl_usage (stdout, argv0, usage3); esl_usage (stdout, argv0, usage4); puts("\n where general options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); puts("\n options for shuffling input sequences (default mode):"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); puts("\n options for generating sequences de novo (w/ -G option):"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); puts("\n other infrequently used options:"); esl_opt_DisplayHelp(stdout, go, 5, 2, 80); exit(0); } /* msa_shuffling() * * Shuffling multiple sequence alignments */ static int msa_shuffling(ESL_GETOPTS *go, ESL_RANDOMNESS *r, FILE *ofp, int outfmt) { char *msafile = esl_opt_GetArg(go, 1); int infmt = eslMSAFILE_UNKNOWN; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; ESL_MSA *shuf = NULL; int N = esl_opt_GetInteger(go, "-N"); int i; int status; if ( (status = eslx_msafile_Open(NULL, msafile, NULL, infmt, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); while ((status = eslx_msafile_Read(afp, &msa)) != eslEOF) { if (status != eslOK) eslx_msafile_ReadFailure(afp, status); shuf = esl_msa_Clone(msa); for (i = 0; i < N; i++) { if (esl_opt_GetBoolean(go, "--boot")) esl_msashuffle_Bootstrap(r, msa, shuf); else esl_msashuffle_Shuffle (r, msa, shuf); /* Set the name of the shuffled alignment */ if (msa->name != NULL) { if (esl_opt_GetBoolean(go, "--boot")) { if (N > 1) esl_msa_FormatName(shuf, "%s-sample-%d", msa->name, i); else esl_msa_FormatName(shuf, "%s-sample", msa->name); } else { if (N > 1) esl_msa_FormatName(shuf, "%s-shuffle-%d", msa->name, i); else esl_msa_FormatName(shuf, "%s-shuffle", msa->name); } } else { if (esl_opt_GetBoolean(go, "--boot")) { if (N > 1) esl_msa_FormatName(shuf, "sample-%d", i); else esl_msa_FormatName(shuf, "sample"); } else { if (N > 1) esl_msa_FormatName(shuf, "shuffle-%d", i); else esl_msa_FormatName(shuf, "shuffle"); } } eslx_msafile_Write(ofp, shuf, afp->format); } esl_msa_Destroy(shuf); esl_msa_Destroy(msa); } eslx_msafile_Close(afp); return eslOK; } /* seq_generation() * * Generating sequences. */ static int seq_generation(ESL_GETOPTS *go, ESL_RANDOMNESS *r, FILE *ofp, int outfmt) { ESL_ALPHABET *abc = NULL; ESL_SQ *sq = NULL; double *fq = NULL; int alphatype; int N = esl_opt_GetInteger(go, "-N"); int L = esl_opt_GetInteger(go, "-L"); int i; int status; if (L <= 0) esl_fatal("To generate sequences, set -L option (length of generated seqs) > 0 "); if (esl_opt_GetBoolean(go, "--rna")) alphatype = eslRNA; if (esl_opt_GetBoolean(go, "--dna")) alphatype = eslDNA; if (esl_opt_GetBoolean(go, "--amino")) alphatype = eslAMINO; abc = esl_alphabet_Create(alphatype); sq = esl_sq_CreateDigital(abc); esl_sq_GrowTo(sq, L); /* Pick the iid frequency distribution to use */ ESL_ALLOC(fq, sizeof(double) * abc->K); switch (alphatype) { case eslRNA: case eslDNA: esl_vec_DSet(fq, 4, 0.25); break; case eslAMINO: esl_composition_SW34(fq); break; default: esl_vec_DSet(fq, abc->K, 1.0 / (double) abc->K); break; } /* generate */ for (i = 0; i < N; i++) { esl_rsq_xIID(r, fq, abc->K, L, sq->dsq); if (N > 1) esl_sq_FormatName(sq, "random%d", i); else esl_sq_SetName(sq, "random"); sq->n = L; esl_sqio_Write(ofp, sq, outfmt, FALSE); } free(fq); esl_alphabet_Destroy(abc); esl_sq_Destroy(sq); return eslOK; ERROR: if (fq != NULL) free(fq); esl_alphabet_Destroy(abc); esl_sq_Destroy(sq); return status; } /* seq_shuffling() * SRE, Tue Jan 22 08:35:51 2008 [Market Street Cafe, Leesburg] * * Shuffling of input sequences. * * Fixed-length (L>0) vs. full-length (L=0) modes handled differently. * In fixed-length mode: * seq> only needs to be allocated once, for L * is an allocated copy of a random subseq of length L * sequences < L residues long can't be shuffled * In full-length mode: * seq> is grown to length n> for each input seq * just points to seq> */ static int seq_shuffling(ESL_GETOPTS *go, ESL_RANDOMNESS *r, FILE *ofp, int outfmt) { char *seqfile = esl_opt_GetArg(go, 1); int infmt = eslSQFILE_UNKNOWN; ESL_SQFILE *sqfp = NULL; ESL_SQ *sq = esl_sq_Create(); ESL_SQ *shuff = esl_sq_Create(); char *targ = NULL; int N = esl_opt_GetInteger(go, "-N"); int L = esl_opt_GetInteger(go, "-L"); /* L>0 means select random fixed-len subseqs */ int kmers = 0; int i; int status; if (esl_opt_GetString(go, "--informat") != NULL) { infmt = esl_sqio_EncodeFormat(esl_opt_GetString(go, "--informat")); if (infmt == eslSQFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat"); } if (esl_opt_IsOn(go, "-k")) kmers = esl_opt_GetInteger(go, "-k"); status = esl_sqfile_Open(seqfile, infmt, NULL, &sqfp); if (status == eslENOTFOUND) esl_fatal("No such file %s", seqfile); else if (status == eslEFORMAT) esl_fatal("Format of seqfile %s unrecognized.", seqfile); else if (status == eslEINVAL) esl_fatal("Can't autodetect stdin or .gz."); else if (status != eslOK) esl_fatal("Open failed, code %d.", status); if (L>0) { esl_sq_GrowTo(shuff, L); shuff->n = L; ESL_ALLOC(targ, sizeof(char) * (L+1)); } while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { if (L == 0) { /* shuffling entire sequence */ esl_sq_GrowTo(shuff, sq->n); /* make sure shuff can hold sq */ shuff->n = sq->n; targ = sq->seq; } else { if (sq->n < L) continue; /* reject seqs < L long */ } for (i = 0; i < N; i++) { if (L > 0) { /* fixed-len mode: copy a random subseq */ int pos = esl_rnd_Roll(r, sq->n - L + 1); strncpy(targ, sq->seq + pos, L); targ[L] = '\0'; } /* Do the requested kind of shuffling */ if (esl_opt_GetBoolean(go, "-m")) esl_rsq_CShuffle (r, targ, shuff->seq); /* monoresidue shuffling */ else if (esl_opt_GetBoolean(go, "-d")) esl_rsq_CShuffleDP (r, targ, shuff->seq); /* diresidue shuffling */ else if (esl_opt_IsOn (go, "-k")) esl_rsq_CShuffleKmers(r, targ, kmers, shuff->seq); /* diresidue shuffling */ else if (esl_opt_GetBoolean(go, "-0")) esl_rsq_CMarkov0 (r, targ, shuff->seq); /* 0th order Markov */ else if (esl_opt_GetBoolean(go, "-1")) esl_rsq_CMarkov1 (r, targ, shuff->seq); /* 1st order Markov */ else if (esl_opt_GetBoolean(go, "-r")) esl_rsq_CReverse ( targ, shuff->seq); /* reverse */ else if (esl_opt_IsOn (go, "-w")) { /* regionally shuffle */ int W= esl_opt_GetInteger(go, "-w"); esl_rsq_CShuffleWindows(r, targ, W, shuff->seq); } /* Set the name of the shuffled sequence */ if (esl_opt_GetBoolean(go, "-r")) esl_sq_FormatName(shuff, "%s-reversed", sq->name, i); else if (N > 1) esl_sq_FormatName(shuff, "%s-shuffled-%d", sq->name, i); else esl_sq_FormatName(shuff, "%s-shuffled", sq->name); /* Output the resulting sequence */ esl_sqio_Write(ofp, shuff, outfmt, FALSE); /* don't need to reuse the shuffled sequence: we will use exactly the same memory */ } esl_sq_Reuse(sq); } if (status == eslEFORMAT) esl_fatal("Parse failed (sequence file %s):\n%s\n", sqfp->filename, esl_sqfile_GetErrorBuf(sqfp)); else if (status != eslEOF) esl_fatal("Unexpected error %d reading sequence file %s", status, sqfp->filename); if (L>0) free(targ); esl_sq_Destroy(shuff); esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); return eslOK; ERROR: if (targ != NULL) free(targ); esl_sq_Destroy(shuff); esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); return status; } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* application configuration */ ESL_RANDOMNESS *r = NULL; /* random number generator */ FILE *ofp = NULL; /* data output stream */ int outfmt = eslSQFILE_FASTA; /* Parse command line */ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], "Error in app configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") ) cmdline_help(argv[0], go); /* Open the output data file, if any */ if (esl_opt_GetString(go, "-o") != NULL) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) esl_fatal("Failed to open output file %s\n", esl_opt_GetString(go, "-o")); } else ofp = stdout; /* Initialize */ r = esl_randomness_Create(esl_opt_GetInteger(go, "--seed")); /* Hand off execution to one of the three modes */ if (esl_opt_GetBoolean(go, "-A")) /* Alignment shuffling */ { if (esl_opt_ArgNumber(go) != 1) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); msa_shuffling(go, r, ofp, outfmt); } else if (esl_opt_GetBoolean(go, "-G")) /* Sequence generation */ { if (esl_opt_ArgNumber(go) != 0) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); seq_generation(go, r, ofp, outfmt); } else if (esl_opt_GetBoolean(go, "-S")) /* Sequence shuffling */ { if (esl_opt_ArgNumber(go) != 1) cmdline_failure(argv[0], "Incorrect number of command line arguments.\n"); seq_shuffling(go, r, ofp, outfmt); } if (esl_opt_GetString(go, "-o") != NULL) fclose(ofp); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/miniapps/esl-alistat.man0000664361611702660230000001275612473612610020130 0ustar wheelerteddy.TH "esl-alistat" 1 "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual" .SH NAME .TP esl-alistat - summarize a multiple sequence alignment file .SH SYNOPSIS .B esl-alistat .I [options] .I msafile .SH DESCRIPTION .pp .B esl-alistat summarizes the contents of the multiple sequence alignment(s) in .I msafile, such as the alignment name, format, alignment length (number of aligned columns), number of sequences, average pairwise % identity, and mean, smallest, and largest raw (unaligned) lengths of the sequences. If .I msafile is - (a single dash), multiple alignment input is read from .I stdin. The alignments can be of protein or DNA/RNA sequences. All alignments in the same .I msafile must be either protein or DNA/RNA. The alphabet will be autodetected unless one of the options .I --amino, .I --dna, or .I --rna are given. These options may be useful in automated pipelines to make .B esl-alistat more robust; alphabet autodetection is not infallible. The .B --list, .B --icinfo, .B --rinfo, .B --pcinfo, .B --psinfo, .B --cinfo, .B --bpinfo, and .B --iinfo, options allow dumping various statistics on the alignment to optional output files as described for each of those options below. The .B --small option allows summarizing alignments without storing them in memory and can be useful for large alignment files with sizes that approach or exceed the amount of available RAM. When .B --small is used, .B esl-alistat will print fewer statistics on the alignment, omitting data on the smallest and largest sequences and the average identity of the alignment. .B --small only works on Pfam formatted alignments (a special type of non-interleaved Stockholm alignment in which each sequence occurs on a single line) and .BI --informat " pfam" must be given with .B --small. Further, when .B --small is used, the alphabet must be specified with .I --amino, .I --dna, or .I --rna. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .B -1 Use a tabular output format with one line of statistics per alignment in .I msafile. This is most useful when .I msafile contains many different alignments (such as a Pfam database in Stockholm format). .SH EXPERT OPTIONS .TP .BI --informat " " Specify that the input alignment is in .I format. At present, valid formats are limited to Stockholm, Pfam, and AFA (aligned FASTA). .TP .B --amino Assert that the .I msafile contains protein sequences. .TP .B --dna Assert that the .I msafile contains DNA sequences. .TP .B --rna Assert that the .I msafile contains RNA sequences. .TP .B --small Operate in small memory mode for Pfam formatted alignments. .BI --informat " pfam" and one of .B --amino, .B --dna, or .B --rna must be given as well. .TP .BI --list " " List the names of all sequences in all alignments in .B msafile to file .I . Each sequence name is written on its own line. .TP .BI --icinfo " " Dump the information content per position in tabular format to file .I . Lines prefixed with "#" are comment lines, which explain the meanings of each of the tab-delimited fields. .TP .BI --rinfo " " Dump information on the frequency of gaps versus nongap residues per position in tabular format to file .I . Lines prefixed with "#" are comment lines, which explain the meanings of each of the tab-delimited fields. .TP .BI --pcinfo " " Dump per column information on posterior probabilities in tabular format to file .I . Lines prefixed with "#" are comment lines, which explain the meanings of each of the tab-delimited fields. .TP .BI --psinfo " " Dump per sequence information on posterior probabilities in tabular format to file .I . Lines prefixed with "#" are comment lines, which explain the meanings of each of the tab-delimited fields. .TP .BI --iinfo " " Dump information on inserted residues in tabular format to file .I . Insert columns of the alignment are those that are gaps in the reference (#=GC RF) annotation. This option only works if the input file is in Stockholm format with reference annotation. Lines prefixed with "#" are comment lines, which explain the meanings of each of the tab-delimited fields. .TP .BI --cinfo " " Dump per-column residue counts to file .I . If used in combination with .B --noambig ambiguous (degenerate) residues will be ignored and not counted. Otherwise, they will be marginalized. For example, in an RNA sequence file, a 'N' will be counted as 0.25 'A', 0.25 'C', 0.25 'G', and 0.25 'U'. .TP .B --noambig With .B --cinfo, do not count ambiguous (degenerate) residues. .TP .B --bpinfo Dump per-column basepair counts to file .I . Counts appear for each basepair in the consensus secondary structure (annotated as "#=GC SS_cons"). Only basepairs from sequences for which both paired positions are canonical residues will be counted. That is, any basepair that is a gap or an ambiguous (degenerate) residue at either position of the pair is ignored and not counted. .TP .B --weight With .B --icinfo, --rinfo, --pcinfo, --iinfo, --cinfo and .B --bpinfo, weight counts based on #=GS WT annotation in the input .B msafile. A residue or basepair from a sequence with a weight of .I x will be considered .I x counts. By default, raw, unweighted counts are reported; corresponding to each sequence having an equal weight of 1. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-alistat.c0000664361611702660230000013773512473612610017604 0ustar wheelerteddy/* Show statistics about a multiple sequence alignment file or MSA database. */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile2.h" #include "esl_distance.h" #include "esl_vectorops.h" #include "esl_wuss.h" static char banner[] = "show summary statistics for a multiple sequence alignment file"; static char usage[] = "[options] "; static int dump_infocontent_info(FILE *fp, ESL_ALPHABET *abc, double **abc_ct, int use_weights, int nali, int64_t alen, int nseq, int *i_am_rf, char *msa_name, char *alifile, char *errbuf); static int dump_residue_info(FILE *fp, ESL_ALPHABET *abc, double **abc_ct, int use_weights, int nali, int64_t alen, int nseq, int *i_am_rf, char *msa_name, char *alifile, char *errbuf); static int dump_posterior_column_info(FILE *fp, double **pp_ct, int use_weights, int nali, int64_t alen, int nseq, int *i_am_rf, char *msa_name, char *alifile, char *errbuf); static int dump_posterior_sequence_info(FILE *fp, ESL_MSA *msa, int nali, char *alifile, char *errbuf); static int dump_insert_info(FILE *fp, ESL_MSA *msa, int use_weights, int nali, int *i_am_rf, char *alifile, char *errbuf); static int dump_column_residue_counts(FILE *fp, ESL_ALPHABET *abc, double **abc_ct, int do_ambig, int use_weights, int nali, int64_t alen, int nseq, char *msa_name, char *alifile, char *errbuf); static int dump_basepair_counts(FILE *fp, ESL_MSA *msa, ESL_ALPHABET *abc, double ***bp_ct, int use_weights, int nali, int nseq, char *msa_name, char *alifile, char *errbuf); static int map_rfpos_to_apos(ESL_MSA *msa, ESL_ALPHABET *abc, char *errbuf, int64_t alen, int **ret_i_am_rf, int **ret_rf2a_map, int *ret_rflen); static int get_pp_idx(ESL_ALPHABET *abc, char ppchar); static int count_msa(ESL_MSA *msa, char *errbuf, int nali, int no_ambig, int use_weights, double ***ret_abc_ct, double ****ret_bp_ct, double ***ret_pp_ct); static int check_msa_weights(ESL_MSA *msa); static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "help; show brief info on version and usage", 1 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "use tabular output, one line per alignment", 1 }, { "--informat", eslARG_STRING, FALSE, NULL, NULL, NULL,NULL, NULL, "specify that input file is in format ", 1 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--dna,--rna", " contains protein alignments", 1 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--amino,--rna", " contains DNA alignments", 1 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--amino,--dna", " contains RNA alignments", 1 }, { "--small", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "use minimal RAM (RAM usage will be independent of aln size)", 2 }, /* options for optional output files */ { "--list", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, NULL, "output list of sequence names in alignment(s) to file ", 3 }, { "--icinfo", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, NULL, "print info on information content alignment column", 3 }, { "--rinfo", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, NULL, "print info on # of non-gap residues in each column to ", 3 }, { "--pcinfo", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, NULL, "print per-column posterior probability info to ", 3 }, { "--psinfo", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, "--small", "print per-sequence posterior probability info to ", 3 }, { "--iinfo", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, "--small", "print info on # of insertions b/t all non-gap RF cols to ", 3 }, { "--cinfo", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, NULL, "print per-column residue counts to ", 3 }, { "--noambig", eslARG_NONE, NULL, NULL, NULL, NULL,NULL, "--small", "with --cinfo, do not count ambiguous residues", 3 }, { "--bpinfo", eslARG_OUTFILE,NULL, NULL, NULL, NULL,NULL, "--small", "print per-column base-pair counts to ", 3 }, { "--weight", eslARG_NONE, NULL, NULL, NULL, NULL,NULL, "--small", "with --*info files, weight counts using WT annotation from msa", 3 }, { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "arrest after start: for debugging under gdb", 99 }, { 0,0,0,0,0,0,0,0,0,0 }, }; int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* application configuration */ ESL_ALPHABET *abc = NULL; /* biological alphabet */ char *alifile = NULL; /* alignment file name */ int fmt = eslMSAFILE_UNKNOWN; /* format code for alifile */ ESLX_MSAFILE *afp = NULL; /* open msa file */ ESL_MSAFILE2 *old_afp = NULL; /* open msa file, legacy (--small) */ ESL_MSA *msa = NULL; /* one multiple sequence alignment */ int nali; /* number of alignments read */ int i; /* counter over seqs */ int64_t alen; /* alignment length */ int nseq; /* number of sequences in the msa */ int64_t rlen; /* a raw (unaligned) seq length */ int64_t small, large; /* smallest, largest sequence */ int64_t nres; /* total # of residues in msa */ double avgid; /* average fractional pair id */ int max_comparisons; /* maximum # comparisons for avg id */ int do_stall; /* used to stall when debugging */ double **abc_ct = NULL; /* [0..msa->alen-1][0..abc->K] number of each residue at each position (abc->K is gap) */ double ***bp_ct = NULL; /* [0..msa->alen-1][0..abc->Kp-1][0..abc->Kp-1] per (non-pknotted) consensus basepair * * count of each possible basepair over all seqs basepairs are indexed by 'i' the minimum * * of 'i:j' for a pair between i and j, where i < j. */ double **pp_ct = NULL; /* [0..msa->alen-1][0..11], count of each posterior probability (PP) code, over all sequences, gap is 11 */ int *i_am_rf = NULL; /* [0..i..msa->alen-1]: TRUE if pos i is non-gap RF posn, if msa->rf == NULL remains NULL */ int *rf2a_map = NULL; /* [0..rfpos..rflen-1] = apos, * apos is the alignment position (0..msa->alen-1) that * is non-gap RF position rfpos+1 (for rfpos in 0..rflen-1) */ int rflen = -1; /* nongap RF length */ char errbuf[eslERRBUFSIZE]; int status; /* easel return code */ /* optional output files */ FILE *iinfofp = NULL; /* output file for --iinfo */ FILE *pcinfofp = NULL; /* output file for --pcinfo */ FILE *psinfofp = NULL; /* output file for --psinfo */ FILE *rinfofp = NULL; /* output file for --rinfo */ FILE *icinfofp = NULL; /* output file for --icinfo */ FILE *listfp = NULL; /* output file for --list */ FILE *cinfofp = NULL; /* output file for --cinfo */ FILE *bpinfofp = NULL; /* output file for --bpinfo */ int use_weights; /* TRUE if --weight, reported weighted counts (using msa->wgt) to all output files */ int weights_exist; /* TRUE if at least one msa->wgt value differs from 1.0, FALSE if not (or if msa->wgt==NULL) */ /*********************************************** * Parse command line ***********************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "-h") ) { esl_banner(stdout, argv[0], banner); esl_usage (stdout, argv[0], usage); puts("\n where options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); puts("\n small memory mode, requires --amino,--dna, or --rna and --informat pfam:"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); puts("\n optional output files:"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); exit(0); } if (esl_opt_ArgNumber(go) != 1) { printf("Incorrect number of command line arguments.\n"); esl_usage(stdout, argv[0], usage); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } alifile = esl_opt_GetArg(go, 1); if (esl_opt_IsOn(go, "--informat") && (fmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--informat"))) == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat", esl_opt_GetString(go, "--informat")); if (esl_opt_GetBoolean(go, "--small") && fmt != eslMSAFILE_PFAM) esl_fatal("--small requires --informat pfam\n"); max_comparisons = 1000; do_stall = esl_opt_GetBoolean(go, "--stall"); /* a stall point for attaching gdb */ while (do_stall); /*********************************************** * Open the MSA file; determine alphabet; set for digital input ***********************************************/ if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); /* We'd like to get rid of the legacy msafile interface, but it * includes small memory functionality for Pfam format which we have * to replace first. For now, use both interfaces, new and legacy */ if ( esl_opt_GetBoolean(go, "--small") ) { if (! abc) esl_fatal("--small requires one of --amino, --dna, --rna be specified."); status = esl_msafile2_OpenDigital(abc, alifile, NULL, &old_afp); if (status == eslENOTFOUND) esl_fatal("Alignment file %s doesn't exist or is not readable\n", alifile); else if (status == eslEFORMAT) esl_fatal("Couldn't determine format of alignment %s\n", alifile); else if (status != eslOK) esl_fatal("Alignment file open failed with error %d\n", status); } else { if ( (status = eslx_msafile_Open(&abc, alifile, NULL, fmt, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); } /************************************** * Open optional output files, as nec * **************************************/ /* determine name for first list file, if nec */ if( esl_opt_IsOn(go, "--list")) { if ((listfp = fopen(esl_opt_GetString(go, "--list"), "w")) == NULL) esl_fatal("Failed to open --list output file %s\n", esl_opt_GetString(go, "--list")); } if( esl_opt_IsOn(go, "--icinfo")) { if ((icinfofp = fopen(esl_opt_GetString(go, "--icinfo"), "w")) == NULL) esl_fatal("Failed to open --icinfo output file %s\n", esl_opt_GetString(go, "--icinfo")); } if( esl_opt_IsOn(go, "--rinfo")) { if ((rinfofp = fopen(esl_opt_GetString(go, "--rinfo"), "w")) == NULL) esl_fatal("Failed to open --rinfo output file %s\n", esl_opt_GetString(go, "--rinfo")); } if( esl_opt_IsOn(go, "--pcinfo")) { if ((pcinfofp = fopen(esl_opt_GetString(go, "--pcinfo"), "w")) == NULL) esl_fatal("Failed to open --pcinfo output file %s\n", esl_opt_GetString(go, "--pcinfo")); } if( esl_opt_IsOn(go, "--psinfo")) { if ((psinfofp = fopen(esl_opt_GetString(go, "--psinfo"), "w")) == NULL) esl_fatal("Failed to open --psinfo output file %s\n", esl_opt_GetString(go, "--psinfo")); } if( esl_opt_IsOn(go, "--iinfo")) { if ((iinfofp = fopen(esl_opt_GetString(go, "--iinfo"), "w")) == NULL) esl_fatal("Failed to open --iinfo output file %s\n", esl_opt_GetString(go, "--iinfo")); } if( esl_opt_IsOn(go, "--cinfo")) { if ((cinfofp = fopen(esl_opt_GetString(go, "--cinfo"), "w")) == NULL) esl_fatal("Failed to open --cinfo output file %s\n", esl_opt_GetString(go, "--cinfo")); } if( esl_opt_IsOn(go, "--bpinfo")) { if ((bpinfofp = fopen(esl_opt_GetString(go, "--bpinfo"), "w")) == NULL) esl_fatal("Failed to open --bpinfo output file %s\n", esl_opt_GetString(go, "--bpinfo")); } /*********************************************** * Read MSAs one at a time. ***********************************************/ if (esl_opt_GetBoolean(go, "-1")) { puts("#"); if(! esl_opt_GetBoolean(go, "--small")) { printf("# %-4s %-20s %10s %7s %7s %12s %6s %6s %10s %3s\n", "idx", "name", "format", "nseq", "alen", "nres", "small", "large", "avlen", "%id"); printf("# %-4s %-20s %10s %7s %7s %12s %6s %6s %10s %3s\n", "----", "--------------------", "----------", "-------", "-------", "------------", "------", "------", "----------", "---"); } else { printf("# %-4s %-20s %10s %7s %7s %12s %10s\n", "idx", "name", "format", "nseq", "alen", "nres", "avlen"); printf("# %-4s %-20s %10s %7s %7s %12s %10s\n", "----", "--------------------", "----------", "-------", "-------", "------------", "----------"); } } nali = 0; fmt = (esl_opt_GetBoolean(go, "--small") ? old_afp->format : afp->format); while ( (status = ( esl_opt_GetBoolean(go, "--small") ? esl_msafile2_ReadInfoPfam(old_afp, listfp, abc, -1, NULL, NULL, &msa, &nseq, &alen, NULL, NULL, NULL, NULL, NULL, &abc_ct, &pp_ct, NULL, NULL, NULL) : eslx_msafile_Read (afp, &msa))) == eslOK) { nali++; nres = 0; if (! esl_opt_GetBoolean(go, "--small")) { nseq = msa->nseq; alen = msa->alen; small = large = -1; for (i = 0; i < msa->nseq; i++) { rlen = esl_abc_dsqrlen(msa->abc, msa->ax[i]); nres += rlen; if (small == -1 || rlen < small) small = rlen; if (large == -1 || rlen > large) large = rlen; } esl_dst_XAverageId(abc, msa->ax, msa->nseq, max_comparisons, &avgid); } else { /* --small invoked */ for(i = 0; i < alen; i++) nres += (int) esl_vec_DSum(abc_ct[i], abc->K); } if (esl_opt_GetBoolean(go, "-1")) { printf("%-6d %-20s %10s %7d %7" PRId64 " %12" PRId64, nali, msa->name, eslx_msafile_DecodeFormat(fmt), nseq, alen, nres); if (! esl_opt_GetBoolean(go, "--small")) { printf(" %6" PRId64 " %6" PRId64 " %10.1f %3.0f\n", small, large, (double) nres / (double) msa->nseq, 100.*avgid); } else { printf(" %10.1f\n", (double) nres / (double) nseq); } } else { printf("Alignment number: %d\n", nali); if (msa->name != NULL) printf("Alignment name: %s\n", msa->name); printf("Format: %s\n", eslx_msafile_DecodeFormat(fmt)); printf("Number of sequences: %d\n", nseq); printf("Alignment length: %" PRId64 "\n", alen); printf("Total # residues: %" PRId64 "\n", nres); if(! esl_opt_GetBoolean(go, "--small")) { printf("Smallest: %" PRId64 "\n", small); printf("Largest: %" PRId64 "\n", large); } printf("Average length: %.1f\n", (double) nres / (double) nseq); if(! esl_opt_GetBoolean(go, "--small")) { printf("Average identity: %.0f%%\n", 100.*avgid); } printf("//\n"); } /* Dump data to optional output files, if nec */ if(esl_opt_IsOn(go, "--list")) { if(! esl_opt_GetBoolean(go, "--small")) { /* only print sequence name to list file if ! --small, else we already have in esl_msafile2_ReadInfoPfam() */ for(i = 0; i < msa->nseq; i++) fprintf(listfp, "%s\n", msa->sqname[i]); } } /* if RF exists, get i_am_rf array[0..alen] which tells us which positions are non-gap RF positions * and rf2a_map, a map of non-gap RF positions to overall alignment positions */ if(msa->rf != NULL) { if((status = map_rfpos_to_apos(msa, abc, errbuf, alen, &i_am_rf, &rf2a_map, &rflen)) != eslOK) esl_fatal(errbuf); } else i_am_rf = NULL; weights_exist = check_msa_weights(msa); use_weights = (weights_exist && esl_opt_GetBoolean(go, "--weight")) ? TRUE : FALSE; if( (! esl_opt_GetBoolean(go, "--small")) && (esl_opt_IsOn(go, "--icinfo") || esl_opt_IsOn(go, "--rinfo") || esl_opt_IsOn(go, "--pcinfo") || esl_opt_IsOn(go, "--cinfo") || esl_opt_IsOn(go, "--bpinfo"))) { /* collect counts of each residue and PPs (if they exist) from the msa */ if(esl_opt_GetBoolean(go, "--weight") && msa->wgt == NULL) esl_fatal("--weight requires all alignments have #=GS WT annotation, but aln %d does not", nali); if((status = count_msa(msa, errbuf, nali, esl_opt_GetBoolean(go, "--noambig"), /* ignore ambiguous residues? */ esl_opt_GetBoolean(go, "--weight"), /* use msa->wgt sequence weights? */ &abc_ct, ((bpinfofp != NULL && msa->ss_cons != NULL) ? &bp_ct : NULL), /* get basepair counts? */ (msa->pp != NULL ? &pp_ct : NULL))) /* get PP counts? */ != eslOK) esl_fatal(errbuf); } if( esl_opt_IsOn(go, "--icinfo")) { if((status = dump_infocontent_info(icinfofp, abc, abc_ct, use_weights, nali, alen, nseq, i_am_rf, msa->name, alifile, errbuf) != eslOK)) esl_fatal(errbuf); } if( esl_opt_IsOn(go, "--rinfo")) { if((status = dump_residue_info(rinfofp, abc, abc_ct, use_weights, nali, alen, nseq, i_am_rf, msa->name, alifile, errbuf) != eslOK)) esl_fatal(errbuf); } if(esl_opt_IsOn(go, "--pcinfo")) { if(pp_ct == NULL) esl_fatal("Error: --pcinfo requires all alignments have #=GR PP annotation, but alignment %d does not", nali); if((status = dump_posterior_column_info(pcinfofp, pp_ct, use_weights, nali, alen, nseq, i_am_rf, msa->name, alifile, errbuf) != eslOK)) esl_fatal(errbuf); } if(esl_opt_IsOn(go, "--psinfo")) { if(msa->pp == NULL) esl_fatal("Error: --psinfo requires all alignments have #=GR PP annotation, but alignment %d does not", nali); if((status = dump_posterior_sequence_info(psinfofp, msa, nali, alifile, errbuf) != eslOK)) esl_fatal(errbuf); } if( esl_opt_IsOn(go, "--iinfo")) { if(msa->rf == NULL) esl_fatal("--iinfo requires all alignments have #=GC RF annotation, but alignment %d does not", nali); if(esl_opt_GetBoolean(go, "--weight") && msa->wgt == NULL) esl_fatal("--weight requires all alignments have #=GS WT annotation, but aln %d does not", nali); if((status = dump_insert_info(iinfofp, msa, use_weights, nali, i_am_rf, alifile, errbuf) != eslOK)) esl_fatal(errbuf); } if( esl_opt_IsOn(go, "--cinfo")) { if((status = dump_column_residue_counts(cinfofp, abc, abc_ct, esl_opt_GetBoolean(go, "--noambig"), use_weights, nali, alen, nseq, msa->name, alifile, errbuf) != eslOK)) esl_fatal(errbuf); } if( esl_opt_IsOn(go, "--bpinfo")) { if(msa->ss_cons == NULL) esl_fatal("--bpinfo requires all alignments have #=GC SS_cons annotation, but alignment %d does not", nali); if((status = dump_basepair_counts(bpinfofp, msa, abc, bp_ct, use_weights, nali, nseq, msa->name, alifile, errbuf) != eslOK)) esl_fatal(errbuf); } esl_msa_Destroy(msa); if(abc_ct != NULL) { esl_Free2D((void **) abc_ct, alen); abc_ct = NULL; } if(bp_ct != NULL) { esl_Free3D((void ***) bp_ct, alen, abc->Kp); bp_ct = NULL; } if(pp_ct != NULL) { esl_Free2D((void **) pp_ct, alen); pp_ct = NULL; } if(i_am_rf != NULL) { free(i_am_rf); i_am_rf = NULL; } if(rf2a_map != NULL) { free(rf2a_map); rf2a_map = NULL; } } /* If an msa read failed, we've dropped out to here with an informative status code. * we have to handle failures from new vs. legacy msa parsing differently */ if (esl_opt_GetBoolean(go, "--small")) { if (status == eslEFORMAT) esl_fatal("Alignment file parse error, line %d of file %s:\n%s\nOffending line is:\n%s\n", old_afp->linenumber, old_afp->fname, old_afp->errbuf, old_afp->buf); else if (status != eslEOF) esl_fatal("Alignment file read failed with error code %d\n", status); else if (nali == 0) esl_fatal("No alignments found in file %s\n", alifile); } else { if (nali == 0 || status != eslEOF) eslx_msafile_ReadFailure(afp, status); } /* Cleanup, normal return */ if(listfp != NULL) { fclose(listfp); printf("# List of sequences in %d alignment(s) saved to file %s\n", nali, esl_opt_GetString(go, "--list")); } if(icinfofp != NULL) { fclose(icinfofp); printf("# Information content data saved to file %s.\n", esl_opt_GetString(go, "--icinfo")); } if(rinfofp != NULL) { fclose(rinfofp); printf("# Residue data saved to file %s.\n", esl_opt_GetString(go, "--rinfo")); } if(pcinfofp != NULL) { fclose(pcinfofp); printf("# Per-column posterior probability data saved to file %s.\n", esl_opt_GetString(go, "--pcinfo")); } if(psinfofp != NULL) { fclose(psinfofp); printf("# Per-sequence posterior probability data saved to file %s.\n", esl_opt_GetString(go, "--psinfo")); } if(iinfofp != NULL) { printf("# Insert data saved to file %s.\n", esl_opt_GetString(go, "--iinfo")); fclose(iinfofp); } if(cinfofp != NULL) { printf("# Per-column counts data saved to file %s.\n", esl_opt_GetString(go, "--cinfo")); fclose(cinfofp); } if(bpinfofp != NULL) { printf("# Per-column basepair counts data saved to file %s.\n", esl_opt_GetString(go, "--bpinfo")); fclose(bpinfofp); } if (afp) eslx_msafile_Close(afp); if (old_afp) esl_msafile2_Close(old_afp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } /* count_msa() * * Given an msa, count residues, and optionally base pairs and * posterior probabilities per column and store them in * and . * * [0..apos..alen-1][0..abc->K]: * - per position count of each symbol in alphabet over all seqs. * * [0..apos..alen-1][0..abc->Kp-1][0..abc->Kp-1] * - per (non-pknotted) consensus basepair count of each possible basepair * over all seqs basepairs are indexed by 'i' the minimum of 'i:j' for a * pair between i and j, where i < j. Note that non-canonicals and * gaps and the like are all stored independently. * * [0..apos..alen-1][0..11] * - per position count of each posterior probability code over all seqs. * * A 'gap' has a looser definition than in esl_abc here, esl_abc's gap, * missing residues and nonresidues are all considered 'gaps' here. * * If we encounter an error, we return non-eslOK status and fill * errbuf with error message. * * Returns eslOK upon success. */ static int count_msa(ESL_MSA *msa, char *errbuf, int nali, int no_ambig, int use_weights, double ***ret_abc_ct, double ****ret_bp_ct, double ***ret_pp_ct) { int status; double **abc_ct = NULL; double ***bp_ct = NULL; int apos, rpos, i, x; int nppvals = 12; /* '0'-'9' = 0-9, '*' = 10, gap = '11' */ double **pp_ct = NULL; /* [0..alen-1][0..nppvals-1] per position count of each possible PP char over all seqs */ int ppidx; /* variables related to getting bp counts */ int *ct = NULL; /* 0..alen-1 base pair partners array for current sequence */ char *ss_nopseudo = NULL; /* no-pseudoknot version of structure */ double seqwt; /* weight of current sequence, always 1.0 if !use_weights */ if(! (msa->flags & eslMSA_DIGITAL)) ESL_FAIL(eslEINVAL, errbuf, "count_msa() contract violation, MSA is not digitized"); if(use_weights && msa->wgt == NULL) ESL_FAIL(eslEINCOMPAT, errbuf, "count_msa(): use_weights==TRUE but msa->wgt == NULL"); /* allocate pp_ct array, if nec */ if(ret_pp_ct != NULL) { if(msa->pp == NULL) ESL_FAIL(eslEINVAL, errbuf, "count_msa() ret_pp_ct != NULL, but msa->pp is NULL"); ESL_ALLOC(pp_ct, sizeof(double *) * msa->alen); for(apos = 0; apos < msa->alen; apos++) { ESL_ALLOC(pp_ct[apos], sizeof(double) * nppvals); esl_vec_DSet(pp_ct[apos], nppvals, 0.); } } /* allocate and initialize bp_ct, if nec */ if(ret_bp_ct != NULL) { ESL_ALLOC(bp_ct, sizeof(double **) * msa->alen); /* get ct array which defines the consensus base pairs */ ESL_ALLOC(ct, sizeof(int) * (msa->alen+1)); ESL_ALLOC(ss_nopseudo, sizeof(char) * (msa->alen+1)); esl_wuss_nopseudo(msa->ss_cons, ss_nopseudo); if ((status = esl_wuss2ct(ss_nopseudo, msa->alen, ct)) != eslOK) ESL_FAIL(status, errbuf, "Consensus structure string is inconsistent."); for(apos = 0; apos < msa->alen; apos++) { /* careful ct is indexed 1..alen, not 0..alen-1 */ if(ct[(apos+1)] > (apos+1)) { /* apos+1 is an 'i' in an i:j pair, where i < j */ ESL_ALLOC(bp_ct[apos], sizeof(double *) * (msa->abc->Kp)); for(x = 0; x < msa->abc->Kp; x++) { ESL_ALLOC(bp_ct[apos][x], sizeof(double) * (msa->abc->Kp)); esl_vec_DSet(bp_ct[apos][x], msa->abc->Kp, 0.); } } else { /* apos+1 is not an 'i' in an i:j pair, where i < j, set to NULL */ bp_ct[apos] = NULL; } } } ESL_ALLOC(abc_ct, sizeof(double *) * msa->alen); for(apos = 0; apos < msa->alen; apos++) { ESL_ALLOC(abc_ct[apos], sizeof(double) * (msa->abc->K+1)); esl_vec_DSet(abc_ct[apos], (msa->abc->K+1), 0.); } for(i = 0; i < msa->nseq; i++) { seqwt = use_weights ? msa->wgt[i] : 1.0; for(apos = 0; apos < msa->alen; apos++) { /* update appropriate abc count, careful, ax ranges from 1..msa->alen (but abc_ct is 0..msa->alen-1) */ if((! no_ambig) || (! esl_abc_XIsDegenerate(msa->abc, msa->ax[i][apos+1]))) { /* skip ambiguities (degenerate residues) if no_ambig is TRUE */ if((status = esl_abc_DCount(msa->abc, abc_ct[apos], msa->ax[i][apos+1], seqwt)) != eslOK) ESL_FAIL(status, errbuf, "problem counting residue %d of seq %d", apos, i); } } /* get bp counts, if nec */ if(bp_ct != NULL) { for(apos = 0; apos < msa->alen; apos++) { /* update appropriate abc count, careful, ax ranges from 1..msa->alen (but abc_ct is 0..msa->alen-1) */ if(bp_ct[apos] != NULL) { /* our flag for whether position (apos+1) is an 'i' in an i:j pair where i < j */ rpos = ct[apos+1] - 1; /* ct is indexed 1..alen */ bp_ct[apos][msa->ax[i][apos+1]][msa->ax[i][rpos+1]] += seqwt; } } } /* get PP counts, if nec */ if(pp_ct != NULL) { if(msa->pp[i] != NULL) { for(apos = 0; apos < msa->alen; apos++) { if((! no_ambig) || (! esl_abc_XIsDegenerate(msa->abc, msa->ax[i][apos+1]))) { /* skip ambiguities (degenerate residues) if no_ambig is TRUE */ if((ppidx = get_pp_idx(msa->abc, msa->pp[i][apos])) == -1) ESL_FAIL(eslEFORMAT, errbuf, "bad #=GR PP char: %c", msa->pp[i][apos]); pp_ct[apos][ppidx] += seqwt; } } } } } *ret_abc_ct = abc_ct; if(ret_bp_ct != NULL) *ret_bp_ct = bp_ct; /* we only allocated bp_ct if ret_bp_ct != NULL */ if(ret_pp_ct != NULL) *ret_pp_ct = pp_ct; /* we only allocated pp_ct if ret_pp_ct != NULL */ if(ss_nopseudo != NULL) free(ss_nopseudo); if(ct != NULL) free(ct); return eslOK; ERROR: if(abc_ct != NULL) esl_Free2D((void **) abc_ct, msa->alen); if(bp_ct != NULL) esl_Free3D((void ***) bp_ct, msa->alen, msa->abc->Kp); if(pp_ct != NULL) esl_Free2D((void **) pp_ct, msa->alen); ESL_FAIL(status, errbuf, "Error, out of memory while counting important values in the msa."); return status; /* NEVERREACHED */ } /* get_pp_idx * * Given a #=GR PP or #=GC PP_cons character, return the appropriate index * in a pp_ct[] vector. * '0' return 0; * '1' return 1; * '2' return 2; * '3' return 3; * '4' return 4; * '5' return 5; * '6' return 6; * '7' return 7; * '8' return 8; * '9' return 9; * '*' return 10; * gap return 11; * * Anything else (including missing or nonresidue) return -1; */ static int get_pp_idx(ESL_ALPHABET *abc, char ppchar) { if(esl_abc_CIsGap(abc, ppchar)) return 11; if(ppchar == '*') return 10; if(ppchar == '9') return 9; if(ppchar == '8') return 8; if(ppchar == '7') return 7; if(ppchar == '6') return 6; if(ppchar == '5') return 5; if(ppchar == '4') return 4; if(ppchar == '3') return 3; if(ppchar == '2') return 2; if(ppchar == '1') return 1; if(ppchar == '0') return 0; return -1; } /* dump_infocontent_info * * Given an MSA with RF annotation, dump information content per column data to * an open output file. */ static int dump_infocontent_info(FILE *fp, ESL_ALPHABET *abc, double **abc_ct, int use_weights, int nali, int64_t alen, int nseq, int *i_am_rf, char *msa_name, char *alifile, char *errbuf) { int status; int apos, rfpos; double bg_ent; double *bg = NULL; double *abc_freq = NULL; double nnongap; ESL_ALLOC(bg, sizeof(double) * abc->K); esl_vec_DSet(bg, abc->K, 1./(abc->K)); bg_ent = esl_vec_DEntropy(bg, abc->K); free(bg); ESL_ALLOC(abc_freq, sizeof(double) * abc->K); fprintf(fp, "# Information content per column (bits):\n"); fprintf(fp, "# Alignment file: %s\n", alifile); fprintf(fp, "# Alignment idx: %d\n", nali); if(msa_name != NULL) { fprintf(fp, "# Alignment name: %s\n", msa_name); } fprintf(fp, "# Number of sequences: %d\n", nseq); if(use_weights) { fprintf(fp, "# IMPORTANT: Counts are weighted based on sequence weights in alignment file.\n"); } else { fprintf(fp, "# Sequence weights from alignment were ignored (if they existed).\n"); } fprintf(fp, "#\n"); if(i_am_rf != NULL) { fprintf(fp, "# %7s %7s %10s %10s\n", "rfpos", "alnpos", "freqnongap", "info(bits)"); fprintf(fp, "# %7s %7s %10s %10s\n", "-------", "-------", "----------", "----------"); } else { fprintf(fp, "# %7s %10s %10s\n", "alnpos", "freqnongap", "info(bits)"); fprintf(fp, "# %7s %10s %10s\n", "-------", "----------", "----------"); } rfpos = 0; for(apos = 0; apos < alen; apos++) { if(i_am_rf != NULL) { if(i_am_rf[apos]) { fprintf(fp, " %7d", rfpos+1); rfpos++; } else { fprintf(fp, " %7s", "-"); } } nnongap = esl_vec_DSum(abc_ct[apos], abc->K); esl_vec_DCopy(abc_ct[apos], abc->K, abc_freq); esl_vec_DNorm(abc_freq, abc->K); fprintf(fp, " %7d %10.8f %10.8f\n", apos+1, nnongap / (nnongap + abc_ct[apos][abc->K]), (bg_ent - esl_vec_DEntropy(abc_freq, abc->K))); } fprintf(fp, "//\n"); if(abc_freq != NULL) free(abc_freq); return eslOK; ERROR: ESL_FAIL(eslEINVAL, errbuf, "out of memory"); return status; /* NEVERREACHED */ } /* dump_residue_info * * Given an MSA, print out the number of sequences with * a non-gap residue in each column of the alignment. */ static int dump_residue_info(FILE *fp, ESL_ALPHABET *abc, double **abc_ct, int use_weights, int nali, int64_t alen, int nseq, int *i_am_rf, char *msa_name, char *alifile, char *errbuf) { int apos, rfpos; double rct, gct; fprintf(fp, "# Insert information:\n"); fprintf(fp, "# Alignment file: %s\n", alifile); fprintf(fp, "# Alignment idx: %d\n", nali); if(msa_name != NULL) { fprintf(fp, "# Alignment name: %s\n", msa_name); } fprintf(fp, "# Number of sequences: %d\n", nseq); if(use_weights) { fprintf(fp, "# IMPORTANT: Counts are weighted based on sequence weights in alignment file.\n"); } else { fprintf(fp, "# Sequence weights from alignment were ignored (if they existed).\n"); } fprintf(fp, "#\n"); if(i_am_rf != NULL) { fprintf(fp, "# %7s %7s %10s %8s %10s %8s\n", "rfpos", "alnpos", "numres", "freqres", "numgap", "freqgap"); fprintf(fp, "# %7s %7s %10s %8s %10s %8s\n", "-------", "-------", "----------", "--------", "----------", "--------"); } else { fprintf(fp, "# %7s %10s %8s %10s %8s\n", "alnpos", "numres", "freqres", "numgap", "freqgap"); fprintf(fp, "# %7s %10s %8s %10s %8s\n", "-------", "----------", "--------", "----------", "--------"); } rfpos = 0; for(apos = 0; apos < alen; apos++) { rct = esl_vec_DSum(abc_ct[apos], abc->K); gct = abc_ct[apos][abc->K]; if(i_am_rf != NULL) { if(i_am_rf[apos]) { fprintf(fp, " %7d", rfpos+1); rfpos++; } else { fprintf(fp, " %7s", "-"); } } fprintf(fp, " %7d %10.1f %8.6f %10.1f %8.6f\n", apos+1, rct, rct / (float) nseq, gct, gct / (float) nseq); } fprintf(fp, "//\n"); return eslOK; } /* dump_posterior_column_info * * Dump per-column posterior probability data to a file. * */ static int dump_posterior_column_info(FILE *fp, double **pp_ct, int use_weights, int nali, int64_t alen, int nseq, int *i_am_rf, char *msa_name, char *alifile, char *errbuf) { int p,apos; /* counters over sequences, columns of MSA */ int nppvals = 12; int rfpos; double nnongap; double sum; float ppavgA[11]; char ppstring[12] = "0123456789*."; ppavgA[0] = 0.025; ppavgA[1] = 0.10; ppavgA[2] = 0.20; ppavgA[3] = 0.30; ppavgA[4] = 0.40; ppavgA[5] = 0.50; ppavgA[6] = 0.60; ppavgA[7] = 0.70; ppavgA[8] = 0.80; ppavgA[9] = 0.90; ppavgA[10] = 0.975; fprintf(fp, "# Posterior probability stats per column:\n"); fprintf(fp, "# Alignment file: %s\n", alifile); fprintf(fp, "# Alignment idx: %d\n", nali); if(msa_name != NULL) { fprintf(fp, "# Alignment name: %s\n", msa_name); } fprintf(fp, "# Number of sequences: %d\n", nseq); if(use_weights) { fprintf(fp, "# IMPORTANT: Counts are weighted based on sequence weights in alignment file.\n"); } else { fprintf(fp, "# Sequence weights from alignment were ignored (if they existed).\n"); } fprintf(fp, "#\n"); fprintf(fp, "# %6s", "alnpos"); if(i_am_rf != NULL) fprintf(fp, " %6s", "rfpos"); fprintf(fp, " %9s", "nnongap"); for(p = 0; p < nppvals; p++) { fprintf(fp, " %9c", ppstring[p]); } fprintf(fp, " %9s\n", "avgPP"); fprintf(fp, "# %6s %6s %9s", "------", "------", "---------"); for(p = 0; p < nppvals; p++) { fprintf(fp, " %9s", "---------"); } fprintf(fp, " %9s\n", "---------"); rfpos = 1; for(apos = 0; apos < alen; apos++) { sum = 0; fprintf(fp, " %6d", apos+1); if(i_am_rf != NULL) { if(i_am_rf[apos]) fprintf(fp, " %6d", rfpos++); else fprintf(fp, " %6s", "-"); } nnongap = esl_vec_DSum(pp_ct[apos], 11); fprintf(fp, " %9.1f", nnongap); for(p = 0; p < nppvals; p++) { fprintf(fp, " %9.1f", pp_ct[apos][p]); if(p <= 10) sum += pp_ct[apos][p] * ppavgA[p]; } fprintf(fp, " %.5f\n", sum / nnongap); } fprintf(fp, "//\n"); return eslOK; } /* dump_posterior_sequence_info * * Dump per-sequence posterior probability data to a file. * */ static int dump_posterior_sequence_info(FILE *fp, ESL_MSA *msa, int nali, char *alifile, char *errbuf) { int i,p,apos; /* counters over sequences, columns of MSA */ int ppidx; int nppvals = 12; int nnongap; double sum; float ppavgA[11]; char ppstring[12] = "0123456789*."; int seq_pp_ct[12]; ppavgA[0] = 0.025; ppavgA[1] = 0.10; ppavgA[2] = 0.20; ppavgA[3] = 0.30; ppavgA[4] = 0.40; ppavgA[5] = 0.50; ppavgA[6] = 0.60; ppavgA[7] = 0.70; ppavgA[8] = 0.80; ppavgA[9] = 0.90; ppavgA[10] = 0.975; fprintf(fp, "# Posterior probability stats per sequence:\n"); fprintf(fp, "# Alignment file: %s\n", alifile); fprintf(fp, "# Alignment idx: %d\n", nali); if(msa->name != NULL) { fprintf(fp, "# Alignment name: %s\n", msa->name); } fprintf(fp, "# Number of sequences: %d\n", msa->nseq); fprintf(fp, "# %7s %-40s %7s", "seqidx", "seqname", "nnongap"); for(p = 0; p < nppvals-1; p++) { /* don't include gaps in per-sequence output */ fprintf(fp, " %7c", ppstring[p]); } fprintf(fp, " %7s\n", "avgPP"); fprintf(fp, "# %7s %40s %7s", "-------", "----------------------------------------", "-------"); for(p = 0; p < nppvals-1; p++) { /* don't include gaps in per-sequence output */ fprintf(fp, " %7s", "-------"); } fprintf(fp, " %7s\n", "-------"); for(i = 0; i < msa->nseq; i++) { if(msa->pp[i] != NULL) { fprintf(fp, " %7d %-40s", i+1, msa->sqname[i]); sum = 0.; esl_vec_ISet(seq_pp_ct, nppvals, 0); for(apos = 0; apos < msa->alen; apos++) { if((ppidx = get_pp_idx(msa->abc, msa->pp[i][apos])) == -1) ESL_FAIL(eslEFORMAT, errbuf, "bad #=GR PP char: %c", msa->pp[i][apos]); seq_pp_ct[ppidx]++; } nnongap = esl_vec_ISum(seq_pp_ct, 11); fprintf(fp, " %7d", nnongap); for(p = 0; p < nppvals-1; p++) { /* don't include gaps in per-sequence output */ fprintf(fp, " %7d", seq_pp_ct[p]); if(p <= 10) sum += (float) seq_pp_ct[p] * ppavgA[p]; } fprintf(fp, " %.5f\n", sum / (float) nnongap); } } fprintf(fp, "//\n"); return eslOK; } /* dump_insert_info * * Given an MSA with RF annotation, print out information about how many 'insertions' come * after each non-gap RF column (consensus column). */ static int dump_insert_info(FILE *fp, ESL_MSA *msa, int use_weights, int nali, int *i_am_rf, char *alifile, char *errbuf) { int status; int apos, rfpos; double **ict; double *total_ict; int i; int rflen; double seqwt; /* weight of current sequence */ double nseq; /* contract check */ if(! (msa->flags & eslMSA_DIGITAL)) ESL_XFAIL(eslEINVAL, errbuf, "in dump_insert_info(), msa must be digitized."); if(msa->rf == NULL) ESL_XFAIL(eslEINVAL, errbuf, "No #=GC RF markup in alignment, it is needed for --iinfo."); if(i_am_rf == NULL) ESL_XFAIL(eslEINVAL, errbuf, "internal error, dump_insert_info() i_am_rf is NULL."); if(use_weights && msa->wgt == NULL) ESL_FAIL(eslEINCOMPAT, errbuf, "dump_insert_info(): use_weights==TRUE but msa->wgt == NULL"); ESL_ALLOC(total_ict, sizeof(double) * (msa->alen+2)); esl_vec_DSet(total_ict, (msa->alen+2), 0.); ESL_ALLOC(ict, sizeof(double *) * (msa->alen+2)); for(i = 0; i <= msa->alen; i++) { ESL_ALLOC(ict[i], sizeof(double) * (msa->nseq)); esl_vec_DSet(ict[i], (msa->nseq), 0.); } fprintf(fp, "# Insert information:\n"); fprintf(fp, "# Alignment file: %s\n", alifile); fprintf(fp, "# Alignment idx: %d\n", nali); if(msa->name != NULL) { fprintf(fp, "# Alignment name: %s\n", msa->name); } fprintf(fp, "# rfpos is the nongap RF position after which insertions occur\n"); fprintf(fp, "# An rfpos of '0' indicates insertions before the first nongap RF position\n"); fprintf(fp, "# Number of sequences: %d\n", msa->nseq); if(use_weights) { fprintf(fp, "# IMPORTANT: Counts are weighted based on sequence weights in alignment file.\n"); } else { fprintf(fp, "# Sequence weights from alignment were ignored (if they existed).\n"); } fprintf(fp, "#\n"); fprintf(fp, "# %8s %10s %8s %8s\n", "rfpos", "nseq w/ins", "freq ins", "avg len"); fprintf(fp, "# %8s %10s %8s %8s\n", "--------", "----------", "--------", "--------"); rflen = 0; for(apos = 1; apos <= msa->alen; apos++) if(i_am_rf[apos-1]) rflen++; rfpos = 0; for(apos = 1; apos <= msa->alen; apos++) { if(i_am_rf[apos-1]) rfpos++; else { for(i = 0; i < msa->nseq; i++) { seqwt = use_weights ? msa->wgt[i] : 1.0; if(esl_abc_XIsResidue(msa->abc, msa->ax[i][apos])) { ict[rfpos][i]++; total_ict[rfpos] += seqwt; } } } } rflen = rfpos; for(rfpos = 0; rfpos <= rflen; rfpos++) { nseq = 0.; for(i = 0; i < msa->nseq; i++) { if(ict[rfpos][i] >= 1) { seqwt = use_weights ? msa->wgt[i] : 1.0; nseq += seqwt; } } if(nseq > 0.) fprintf(fp, " %8d %10.1f %8.6f %8.3f\n", rfpos, nseq, nseq / (float) msa->nseq, ((float) total_ict[rfpos] / (float) nseq)); } fprintf(fp, "//\n"); for(i = 0; i <= msa->alen; i++) free(ict[i]); free(ict); free(total_ict); return eslOK; ERROR: return status; } /* dump_column_residue_counts * * Dump per-column residue counts from abc_ct[][] to * an open output file. * * abc_ct: [0..msa->alen-1][0..abc->K] number of each residue at each position (abc->K is gap) */ static int dump_column_residue_counts(FILE *fp, ESL_ALPHABET *abc, double **abc_ct, int no_ambig, int use_weights, int nali, int64_t alen, int nseq, char *msa_name, char *alifile, char *errbuf) { int apos; int i; fprintf(fp, "# Per column residue counts:\n"); fprintf(fp, "# Alignment file: %s\n", alifile); fprintf(fp, "# Alignment idx: %d\n", nali); if(msa_name != NULL) { fprintf(fp, "# Alignment name: %s\n", msa_name); } fprintf(fp, "# Number of sequences: %d\n", nseq); if(no_ambig) { fprintf(fp, "# Ambiguous residues were not counted.\n"); } else { if(abc->type == eslRNA) fprintf(fp, "# Ambiguities were averaged (e.g. 1 'N' = 0.25 'A', 0.25 'C', 0.25 'G' and 0.25 'U')\n"); if(abc->type == eslDNA) fprintf(fp, "# Ambiguities were averaged (e.g. 1 'N' = 0.25 'A', 0.25 'C', 0.25 'G' and 0.25 'T')\n"); if(abc->type == eslAMINO) fprintf(fp, "# Ambiguities were averaged (e.g. 1 'X' = 0.05 each for all 20 amino acids\n"); } if(use_weights) { fprintf(fp, "# IMPORTANT: Counts are weighted based on sequence weights in alignment file.\n"); } else { fprintf(fp, "# Sequence weights from alignment were ignored (if they existed).\n"); } fprintf(fp, "#\n"); fprintf(fp, "# %7s", "alnpos"); for(i = 0; i < abc->K; i++) fprintf(fp, " %c ", abc->sym[i]); fprintf(fp, "\n"); fprintf(fp, "# %7s", "-------"); for(i = 0; i < abc->K; i++) fprintf(fp, " %7s", "-------"); fprintf(fp, "\n"); for(apos = 0; apos < alen; apos++) { fprintf(fp, " %7d", apos+1); for(i = 0; i < abc->K; i++) fprintf(fp, " %7.1f", abc_ct[apos][i]); fprintf(fp, "\n"); } fprintf(fp, "//\n"); return eslOK; } /* dump_basepair_counts * * Dump per-basepaired-column basepair counts from bp_ct[][][] to * an open output file. Only pairs involving canonical residues * are printed. (i.e. for RNA: AA,AC,AG,AU, CA,CC,CG,CU, GA,GC,GG,GU, * UA,UC,UG,UU). * * [0..apos..alen-1][0..abc->Kp-1][0..abc->Kp-1] * - per (non-pknotted) consensus basepair count of each possible basepair * over all seqs basepairs are indexed by 'i' the minimum of 'i:j' for a * pair between i and j, where i < j. Note that non-canonicals and * gaps and the like are all stored independently. */ static int dump_basepair_counts(FILE *fp, ESL_MSA *msa, ESL_ALPHABET *abc, double ***bp_ct, int use_weights, int nali, int nseq, char *msa_name, char *alifile, char *errbuf) { int status; int apos, rpos; int i, j; int *ct = NULL; /* 0..msa->alen-1 base pair partners array for current sequence */ char *ss_nopseudo = NULL; /* no-pseudoknot version of structure */ /* get ct array which defines the consensus base pairs */ ESL_ALLOC(ct, sizeof(int) * (msa->alen+1)); ESL_ALLOC(ss_nopseudo, sizeof(char) * (msa->alen+1)); esl_wuss_nopseudo(msa->ss_cons, ss_nopseudo); if ((status = esl_wuss2ct(ss_nopseudo, msa->alen, ct)) != eslOK) ESL_FAIL(status, errbuf, "Consensus structure string is inconsistent."); fprintf(fp, "# Per-column basepair counts:\n"); fprintf(fp, "# Alignment file: %s\n", alifile); fprintf(fp, "# Alignment idx: %d\n", nali); if(msa_name != NULL) { fprintf(fp, "# Alignment name: %s\n", msa_name); } fprintf(fp, "# Number of sequences: %d\n", nseq); fprintf(fp, "# Only basepairs involving two canonical (non-degenerate) residues were counted.\n"); if(use_weights) { fprintf(fp, "# IMPORTANT: Counts are weighted based on sequence weights in alignment file.\n"); } else { fprintf(fp, "# Sequence weights from alignment were ignored (if they existed).\n"); } fprintf(fp, "#\n"); fprintf(fp, "# %7s %7s", "lpos", "rpos"); for(i = 0; i < abc->K; i++) { for(j = 0; j < abc->K; j++) { fprintf(fp, " %c%c ", abc->sym[i], abc->sym[j]); } } fprintf(fp, "\n"); fprintf(fp, "# %7s %7s", "-------", "-------"); for(i = 0; i < abc->K; i++) { for(j = 0; j < abc->K; j++) { fprintf(fp, " %6s", "------"); } } fprintf(fp, "\n"); for(apos = 0; apos < msa->alen; apos++) { if(bp_ct[apos] != NULL) { rpos = ct[(apos+1)]; fprintf(fp, " %7d %7d", apos+1, rpos); for(i = 0; i < abc->K; i++) { for(j = 0; j < abc->K; j++) { fprintf(fp, " %6d", (int) bp_ct[apos][i][j]); } } fprintf(fp, "\n"); } } fprintf(fp, "//\n"); if(ss_nopseudo != NULL) free(ss_nopseudo); if(ct != NULL) free(ct); return eslOK; ERROR: if(ss_nopseudo != NULL) free(ss_nopseudo); if(ct != NULL) free(ct); ESL_FAIL(status, errbuf, "Error, out of memory while dumping basepair info"); } /* map_rfpos_to_apos * * Given an MSA, determine the alignment position of each * non-gap RF (reference) position. The abc is only necessary * for defining gap characters. * * rf2a_map[0..rfpos..rflen-1] = apos, apos is the alignment position (0..msa->alen-1) that * is non-gap RF position rfpos+1 (for rfpos in 0..rflen-1) */ static int map_rfpos_to_apos(ESL_MSA *msa, ESL_ALPHABET *abc, char *errbuf, int64_t alen, int **ret_i_am_rf, int **ret_rf2a_map, int *ret_rflen) { int status; int rflen = 0; int *rf2a_map = NULL; int *i_am_rf = NULL; int rfpos = 0; int apos = 0; /* contract check */ if(msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, trying to map RF positions to alignment positions, but msa->rf is NULL."); /* count non-gap RF columns */ for(apos = 0; apos < alen; apos++) { if((! esl_abc_CIsGap(abc, msa->rf[apos])) && (! esl_abc_CIsMissing(abc, msa->rf[apos])) && (! esl_abc_CIsNonresidue(abc, msa->rf[apos]))) { rflen++; /* I don't use esl_abc_CIsResidue() b/c that would return FALSE for 'x' with RNA and DNA */ } } /* build map */ ESL_ALLOC(i_am_rf, sizeof(int) * alen); ESL_ALLOC(rf2a_map, sizeof(int) * rflen); for(apos = 0; apos < alen; apos++) { if((! esl_abc_CIsGap(abc, msa->rf[apos])) && (! esl_abc_CIsMissing(abc, msa->rf[apos])) && (! esl_abc_CIsNonresidue(abc, msa->rf[apos]))) { i_am_rf[apos] = TRUE; rf2a_map[rfpos++] = apos; } else { i_am_rf[apos] = FALSE; } } *ret_i_am_rf = i_am_rf; *ret_rf2a_map = rf2a_map; *ret_rflen = rflen; return eslOK; ERROR: if(i_am_rf != NULL) free(i_am_rf); if(rf2a_map != NULL) free(rf2a_map); ESL_FAIL(status, errbuf, "Error, out of memory while mapping RF positions to alignment positions."); } /* check_msa_weights * * Given an MSA, check if it has any weight that is * different from 1.0. If yes return TRUE, if not * return FALSE. If it does not have weights return * FALSE. */ static int check_msa_weights(ESL_MSA *msa) { int i; if(msa->wgt == NULL) return FALSE; for(i = 0; i < msa->nseq; i++) { if (esl_FCompare(msa->wgt[i], 1.0, eslSMALLX1) != eslOK) return TRUE; } return FALSE; } /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/miniapps/esl-alistat.c $ * SVN $Id: esl-alistat.c 712 2011-07-27 22:15:08Z eddys $ *****************************************************************/ hmmer-3.1b2/easel/miniapps/esl-alimerge.man0000664361611702660230000001166312473612610020250 0ustar wheelerteddy.TH "esl-alimerge" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps" .SH NAME .TP esl-alimerge - merge alignments based on their reference (RF) annotation .SH SYNOPSIS .TP Merge two alignment files: .B esl-alimerge .I [options] .I alifile1 .I alifile2 .TP Merge many alignment files listed in a file: .B esl-alimerge --list .I [options] .I listfile .SH DESCRIPTION .B esl-alimerge reads more than one input alignments, merges them into a single alignment and outputs it. The input alignments must all be in Stockholm format. All alignments must have reference ('#=GC RF') annotation. Further, the RF annotation must be identical in all alignments once gap characters in the RF annotation ('.','-','_') have been removed. This requirement allows alignments with different numbers of total columns to be merged together based on consistent RF annotation, such as alignments created by successive runs of the .B cmalign program of the INFERNAL package using the same CM. Columns which have a gap character in the RF annotation are called 'insert' columns. All sequence data in all input alignments will be included in the output alignment regardless of the output format (see .B --outformat option below). However, sequences in the merged alignment will usually contain more gaps ('.') than they did in their respective input alignments. This is because .B esl-alimerge must add 100% gap columns to each individual input alignment so that insert columns in the other input alignments can be accomodated in the merged alignment. If the output format is Stockholm or Pfam, annotation will be transferred from the input alignments to the merged alignment as follows. All per-sequence ('#=GS') and per-residue ('#=GR') annotation is transferred. Per-file ('#=GF') annotation is transferred if it is present and identical in all alignments. Per-column ('#=GC') annotation is transferred if it is present and identical in all alignments once all insert positions have been removed .B and the '#=GC' annotation includes zero non-gap characters in insert columns. With the .BI --list " " option, .I is a file listing alignment files to merge. In the list file, blank lines and lines that start with '#' (comments) are ignored. Each data line contains a single word: the name of an alignment file to be merged. All alignments in each file will be merged. With the .B --small option, .B esl-alimerge will operate in memory saving mode and the required RAM for the merge will be minimal (should be only a few Mb) and independent of the alignment sizes. To use .B --small, all alignments must be in Pfam format (non-interleaved, 1 line/sequence Stockholm format). You can reformat alignments to Pfam using the .B esl-reformat Easel miniapp. Without .B --small the required RAM will be equal to roughly the size of the final merged alignment file which will necessarily be at least the summed size of all of the input alignment files to be merged and sometimes several times larger. If you're merging large alignments or you're experiencing very slow performance of .B esl-alimerge, try reformatting to Pfam and using .B --small. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .BI -o " " Output merged alignment to file .I instead of to .I stdout. .TP .B -v Be verbose; print information on the size of the alignments being merged, and the annotation transferred to the merged alignment to .I stdout. This option can only be used in combination with the .B -o option (so that the printed info doesn't corrupt the output alignment file). .TP .B --small Operate in memory saving mode. Required RAM will be independent of the sizes of the alignments to merge, instead of roughly the size of the eventual merged alignment. When enabled, all alignments must be in Pfam Stockholm (non-interleaved 1 line/seq) format (see esl-reformat) and the output alignment will be in Pfam format. .TP .B --rfonly Only include columns that are not gaps in the GC RF annotation in the merged alignment. .TP .BI --outformat " " Specify that the output alignment be format .I . Choices for .I are: 'stockholm', 'pfam', 'a2m', 'psiblast', 'afa'. By default alignments are output in Stockholm format. 'pfam' is a special case of Stockholm format in which each sequence is placed on a single line, nstead of being interleaved; 'afa' is aligned FASTA. .TP .BI --rna Specify that the input alignments are RNA alignments. By default .B esl-alimerge will try to autodetect the alphabet, but if the alignment is sufficiently small it may be ambiguous. This option defines the alphabet as RNA. .TP .BI --dna Specify that the input alignments are DNA alignments. .TP .BI --amino Specify that the input alignments are protein alignments. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-alimask.c0000664361611702660230000017014012473612610017547 0ustar wheelerteddy/* Remove columns from a multiple sequence alignment. */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_alphabet.h" #include "esl_fileparser.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msafile2.h" #include "esl_regexp.h" #include "esl_stopwatch.h" #include "esl_vectorops.h" static char banner[] = "remove columns from a multiple sequence alignment"; static char usage1[] = "[options] (use mask from maskfile)"; static char usage2[] = "[options] -t (truncate alignment to coords)"; static char usage3[] = "[options] -g (use gap frequencies in aln)"; static char usage4[] = "[options] -p (use post probs (PP) in aln)"; static char usage5[] = "[options] --rf-is-mask (use #=GC RF in aln as mask)"; static int read_mask_file(char *filename, char *errbuf, int **ret_useme, int *ret_mlen); static int map_rfpos_to_apos(ESL_MSA *msa, ESL_ALPHABET *abc, char *errbuf, int **i_am_rf, int **ret_rf2a_map, int *ret_rflen); static int expand_rf_useme_to_alen(int *useme_rf, int *rf2a_map, int rflen, int alen, char *errbuf, int *useme_a); static int count_gaps_in_msa(ESL_MSA *msa, ESL_ALPHABET *abc, int *countme, char *errbuf, double **ret_gap_ct); static int count_postprobs_in_msa(ESL_MSA *msa, ESL_ALPHABET *abc, int *countme, char *errbuf, double ***ret_pp_ct); static int mask_based_on_gapfreq(double *gap_ct, int64_t alen, int nseq, float gapthresh, int *i_am_eligible, char *errbuf, int **ret_useme); static int get_pp_idx(ESL_ALPHABET *abc, char ppchar); static int mask_based_on_postprobs(double **pp_ct, int64_t alen, int nseq, float pthresh, float pfract, int do_pavg, float pavg_min, int do_ppcons, float ppcons_min, char *pp_cons, ESL_ALPHABET *abc, int *i_am_eligible, int allgapok, char *errbuf, int **ret_useme); static int output_mask(char *filename, int *useme, int *i_am_eligible, int64_t alen, char *errbuf); static int determine_nkept_rf(int *useme, int *i_am_rf, int64_t len); static int parse_coord_string(const char *cstring, uint32_t *ret_start, uint32_t *ret_end); static ESL_OPTIONS options[] = { /* name type default env range togs reqs incomp help docgroup */ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "help; show brief info on version and usage", 1 }, { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "output the final alignment to file , not stdout", 1 }, { "-q", eslARG_NONE, FALSE, NULL, NULL, NULL, "-o", NULL, "be quiet; w/-o, don't print mask info to stdout", 1 }, { "--small", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "use minimal RAM (RAM usage will be independent of aln size)", 1 }, { "--informat", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, NULL, "specify that input file is in format ", 1 }, { "--outformat", eslARG_STRING, FALSE, NULL, NULL, NULL, NULL, NULL, "specify that output aln be format ", 1 }, { "--fmask-rf", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "output final mask of non-gap RF len to file ", 1 }, { "--fmask-all", eslARG_OUTFILE, NULL, NULL, NULL, NULL, NULL, NULL, "output final mask of full aln len to file ", 1 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--dna,--rna", " contains protein alignments", 2 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--amino,--rna"," contains DNA alignments", 2 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--amino,--dna"," contains RNA alignments", 2 }, { "--t-rf", eslARG_NONE, NULL, NULL, NULL, NULL, "-t", NULL, " string corresponds to non-gap RF positions", 3 }, { "--t-rmins", eslARG_NONE, NULL, NULL, NULL, NULL, "-t", NULL, "remove all gap RF positions within ", 3 }, { "--gapthresh", eslARG_REAL, "0.5", NULL, "0<=x<=1", NULL, "-g", NULL, "only keep columns with <= fraction of gaps in them", 4 }, { "--gmask-rf", eslARG_OUTFILE, NULL, NULL, NULL, NULL, "-g", NULL, "output gap-based 0/1 mask of non-gap RF len to file ", 4 }, { "--gmask-all", eslARG_OUTFILE, NULL, NULL, NULL, NULL, "-g", NULL, "output gap-based 0/1 mask of full aln len to file ", 4 }, { "--pfract", eslARG_REAL, "0.95", NULL, "0<=x<=1", NULL, "-p", NULL, "keep cols w/ fraction of seqs w/PP >= --pthresh", 5 }, { "--pthresh", eslARG_REAL, "0.95", NULL, "0<=x<=1", NULL, "-p", NULL, "set post prob threshold for --pfract as ", 5 }, { "--pavg", eslARG_REAL, NULL, NULL, "0<=x<=1", NULL, "-p", "--pfract,--pthresh", "keep cols with average post prob >= ", 5 }, { "--ppcons", eslARG_REAL, NULL, NULL, "0<=x<=1", NULL, "-p", "--keepins,--pavg,--pfract,--pthresh", "keep cols with PP_cons value >= ", 5 }, { "--pallgapok", eslARG_NONE, NULL, NULL, FALSE, NULL, "-p", NULL, "keep 100% gap columns (by default, they're removed w/-p)", 5 }, { "--pmask-rf", eslARG_OUTFILE, NULL, NULL, NULL, NULL, "-p", NULL, "output PP-based 0/1 mask of non-gap RF len to file ", 5 }, { "--pmask-all", eslARG_OUTFILE, NULL, NULL, NULL, NULL, "-p", NULL, "output PP-based 0/1 mask of full aln len to file ", 5 }, { "--keepins", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "if msa has RF annotation, allow gap-RF columns to possibly survive",6 }, /* undocumented as options, because they're documented as alternative invocations: */ { "-t", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-g,-p,--rf-is-mask", "", 99 }, { "-g", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "mask based on gap frequency in the alignment", 99 }, { "-p", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "mask based on posterior probability annotation in the alignment", 99 }, { "--rf-is-mask", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-t,-g,-p,--keepins","remove a column if and only if it is a gap in the RF annotation", 99 }, { 0,0,0,0,0,0,0,0,0,0 }, }; int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; /* application configuration */ ESL_ALPHABET *abc = NULL; /* biological alphabet */ char *alifile = NULL; /* alignment file name */ int infmt = eslMSAFILE_UNKNOWN; /* format code for alifile */ int outfmt = eslMSAFILE_UNKNOWN; /* format code for output ali */ ESLX_MSAFILE *afp = NULL; /* open alignment file normal version */ ESL_MSAFILE2 *afp2 = NULL; /* open alignment file: legacy small-mem version */ FILE *ofp; /* output file (default is stdout) */ ESL_MSA *msa = NULL; /* one multiple sequence alignment */ int status; /* easel return code */ int do_rfonly = FALSE; /* TRUE if we'll automatically remove all gap RF columns */ int nseq = 0; /* num seqs in alignment */ char errbuf[eslERRBUFSIZE]; /* buffer for error messages */ int rflen = 0; /* non-gap RF length */ int nkept = 0; /* number of columns not removed for current mask */ int nkept_rf = 0; /* number of non-gap RF columns not removed for current mask */ int be_verbose = FALSE; /* will we print info on masking to stdout? */ int apos = 0; /* alignment position */ int *i_am_rf = NULL; /* [0..i..msa->alen-1]: TRUE if pos i is non-gap RF posn, if msa->rf == NULL remains NULL */ int *i_am_eligible = NULL; /* [0..i..msa->alen-1]: TRUE if we'll consider keeping posn i in our final masks, FALSE if not, * used to automatically remove all non-gap RF columns if msa->RF != NULL && --keepins NOT enabled */ int *rf2a_map = NULL; /* [0..rfpos..rflen-1] = apos, * apos is the alignment position (0..msa->alen-1) that * is non-gap RF position rfpos+1 (for rfpos in 0..rflen-1) */ int *useme_final = NULL; /* final mask, [0..i..msa->alen-1] TRUE to keep apos i, FALSE not to */ ESL_STOPWATCH *w = NULL; /* for timing the masking, only used if -o enabled */ int64_t orig_alen = 0; /* alignment length of input alignment (pre-masked) */ /* variables related to default mode, reading mask from a maskfile */ char *maskfile = NULL; /* mask file name */ int do_maskfile; /* TRUE if neither -p nor -g are enabled, and we have 2 command-line args */ int file_mlen = 0; /* if do_maskfile, length of mask from maskfile, msa->alen or rflen */ double **pp_ct = NULL; /* [0..msa->alen-1][0..11] number of each PP value at each aln position */ int *useme_mfile = NULL; /* useme deduced from mask from maskfile, * [0..i..file_mlen-1] TRUE to keep apos or rfpos i, FALSE not to */ /* variables related to truncation mode (-t) */ int do_truncate; /* TRUE if -t enabled */ uint32_t tstart, tend; /* with -t, start and end position of aln region to keep, parsed from 2nd cmdline arg ( : ..) */ /* variables related to gap frequency mode (-g) */ int do_gapthresh; /* TRUE if -g enabled */ double **abc_ct = NULL; /* [0..msa->alen-1][0..abc->K] number of each resiude at each position (abc->K is gap) */ double *gap_ct = NULL; /* [0..msa->alen-1] number of gaps at each position */ int *useme_g = NULL; /* [0..i..msa->alen-1] TRUE to keep apos i based on gapfreq, FALSE not to */ /* variables related to postprob mode (-p) */ int do_postprob; /* TRUE if -p enabled */ int do_pavg; /* TRUE if --pavg enabled */ int do_ppcons; /* TRUE if --ppcons enabled */ float pavg_min; /* from --pavg , if enabled, 0., otherwise */ float ppcons_min; /* from --ppcons , if enabled, 0., otherwise */ int *useme_pp = NULL; /* [0..i..msa->alen-1] TRUE to keep apos i based on postprobs, FALSE not to */ /* variables related to RF mode (--rf-is-mask) */ int do_rf_is_mask = FALSE; /* TRUE if --rf-is-mask, RF annotation is the mask, all gap RF columns removed, others kept */ /* variables related to small memory mode (--small) */ int do_small; /* TRUE if --small, operate in special small memory mode, aln seq data is not stored */ /*********************************************** * Parse command line ***********************************************/ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK || esl_opt_VerifyConfig(go) != eslOK) { printf("Failed to parse command line: %s\n", go->errbuf); esl_usage(stdout, argv[0], usage1); esl_usage(stdout, argv[0], usage2); esl_usage(stdout, argv[0], usage3); esl_usage(stdout, argv[0], usage4); esl_usage(stdout, argv[0], usage5); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } if (esl_opt_GetBoolean(go, "-h") ) { esl_banner(stdout, argv[0], banner); esl_usage (stdout, argv[0], usage1); esl_usage (stdout, argv[0], usage2); esl_usage (stdout, argv[0], usage3); esl_usage (stdout, argv[0], usage4); esl_usage (stdout, argv[0], usage5); puts("\n Only one usage listed above can be used per execution with the exception of"); puts(" -p and -g, which can be used in combination with each other.\n"); puts(" With -t, is a string that specifies positive integer start and end"); puts(" coordinates seperated by any nonnumeric, nonspace character(s)."); puts(" For example, \"23..100\" or \"23/100\" or \"23-100\" all specify that columns"); puts(" 23 to 100 be kept and all other columns be removed. Additionally, to retrieve"); puts(" all columns from a position to the end, omit the end coord; \"23:\" will work."); puts(" With -t and --t-rf, coordinates are interpreted as non-gap positions in the"); puts(" reference (\"#=GC RF\") annotation.\n"); puts(" With --rf-is-mask, all columns that are not gaps in the reference annotation"); puts(" will be kept and all other columns will be removed."); puts("\n other options are:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); puts("\n options for specifying alphabet in , one is required w/--small:"); esl_opt_DisplayHelp(stdout, go, 2, 2, 80); puts("\n options related to truncating the alignment (require -t):"); esl_opt_DisplayHelp(stdout, go, 3, 2, 80); puts("\n options for masking based on gap frequencies (require -g):"); esl_opt_DisplayHelp(stdout, go, 4, 2, 80); puts("\n options for masking based on posterior probabilities (require -p):"); esl_opt_DisplayHelp(stdout, go, 5, 2, 80); puts("\n options that modify masking behavior when -g and/or -p are used:"); esl_opt_DisplayHelp(stdout, go, 6, 2, 80); exit(0); } /* Check that we have the correct number of command line args, * in English: if (NOT 2 cmdline args and none of --rf-is-mask,-p,-g) * AND NOT -p and 1 cmdline arg * AND NOT -g and 1 cmdline arg * AND NOT --rf-is-mask and 1 cmdline arg) * then ERROR due to incorrect usage. */ if ((! (((! esl_opt_GetBoolean(go, "--rf-is-mask")) && (! esl_opt_GetBoolean(go, "-p")) && (! esl_opt_GetBoolean(go, "-g"))) && esl_opt_ArgNumber(go) == 2)) && /* it is not the case that (none of --rf-is-mask,-p,-g) and 2 cmdline args */ (! ((esl_opt_GetBoolean(go, "-g")) && (esl_opt_ArgNumber(go) == 1))) && /* not -g and 1 arg */ (! ((esl_opt_GetBoolean(go, "-p")) && (esl_opt_ArgNumber(go) == 1))) && /* not -p and 1 arg */ (! ((esl_opt_GetBoolean(go, "--rf-is-mask")) && (esl_opt_ArgNumber(go) == 1)))) /* not --rf-is-mask and 1 arg */ { printf("Incorrect number of command line arguments.\n"); esl_usage(stdout, argv[0], usage1); esl_usage(stdout, argv[0], usage2); esl_usage(stdout, argv[0], usage3); esl_usage(stdout, argv[0], usage4); esl_usage(stdout, argv[0], usage5); printf("\nTo see more help on available options, do %s -h\n\n", argv[0]); exit(1); } else alifile = esl_opt_GetArg(go, 1); /******************************************************************************* * Determine the type of masking we'll do: * 1. do_maskfile: read mask from file, if none of -p,-g,-t,--rf-is-mask enabled * 2. do_truncate: truncate alignment between coords from 2nd cmdline arg, if -t * 3. do_postprob: use posterior probabilities in aln to create mask, if -p * 4. do_gapthresh: use gap frequency in aln to create mask, if -g * 5. do_rf_is_mask: mask solely based on RF annotation, if --rf-is-mask * * We can combine 3 and 4, but 1 and 2 and 5 are exclusive. Exclusivity of 1 is enforced by * if statement above that checks number of command line args. Exclusivity of 2 and 5 * is enforced by esl_getopts. *******************************************************************************/ do_maskfile = do_truncate = do_postprob = do_gapthresh = do_rf_is_mask = FALSE; /* until proven otherwise */ if(esl_opt_ArgNumber(go) == 2) { if(esl_opt_GetBoolean(go, "-t")) { do_truncate = TRUE; /* we parse 2nd cmdline arg later */ } else { do_maskfile = TRUE; maskfile = esl_opt_GetArg(go, 2); } } else { /* 1 cmdline arg (when we checked for correct usage above, we verified either 1 or 2 cmdline args)*/ do_rf_is_mask = esl_opt_GetBoolean(go, "--rf-is-mask"); do_postprob = esl_opt_GetBoolean(go, "-p"); do_gapthresh = esl_opt_GetBoolean(go, "-g"); } /* check for incompatible options that I don't know how to enforce with esl_getopts */ /* --keepins only makes sense with -p or -g */ if(esl_opt_GetBoolean(go, "--keepins") && (! do_postprob) && (! do_gapthresh)) esl_fatal("--keepins only makes sense in combination with -p and/or -g"); /* will we be verbose? */ be_verbose = (esl_opt_IsOn(go, "-o") && (! esl_opt_GetBoolean(go, "-q"))) ? TRUE : FALSE; /* will we operate in small memory mode? */ do_small = (esl_opt_GetBoolean(go, "--small")) ? TRUE : FALSE; /* determine input/output formats */ if (esl_opt_IsOn(go, "--informat")) { infmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--informat")); if (infmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat", esl_opt_GetString(go, "--informat")); if (do_small && infmt != eslMSAFILE_PFAM) esl_fatal("small memory mode requires Pfam formatted alignments"); } if (esl_opt_IsOn(go, "--outformat")) { outfmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--outformat")); if (outfmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --outformat", esl_opt_GetString(go, "--outformat")); if (do_small && outfmt != eslMSAFILE_PFAM) esl_fatal("we can only output Pfam formatted alignments in small memory mode"); } else outfmt = eslMSAFILE_STOCKHOLM; if (do_small) { /* defaults change if we're in small memory mode, note we checked --informat and --outformat compatibility with do_small in two if statements above */ infmt = eslMSAFILE_PFAM; /* this must be true, else we can't do small memory mode */ outfmt = eslMSAFILE_PFAM; } /* open output file */ if (esl_opt_GetString(go, "-o") != NULL) { if ((ofp = fopen(esl_opt_GetString(go, "-o"), "w")) == NULL) esl_fatal("Failed to open -o output file %s\n", esl_opt_GetString(go, "-o")); /* create and start stopwatch */ w = esl_stopwatch_Create(); esl_stopwatch_Start(w); } else ofp = stdout; /**************************************** * Open the MSA file; determine alphabet ****************************************/ /* abc handling is weird. We only use alphabet to define gap characters in this miniapp * unless do_small is TRUE. msa's are actually read in text mode. Thus if do_small is FALSE, * eslRNA suffices for anything. If do_small is TRUE, we need the alphabet so we * require --amino,--dna, or --rna below. */ if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); else if (do_small) esl_fatal("With --small, the alphabet must be specified with --amino, --rna, or --dna."); else abc = esl_alphabet_Create(eslRNA); /* alphabet is only used to define gap characters, so (in this miniapp) we're okay specifying RNA for any alignment (even non-RNA ones) */ if (do_small) { status = esl_msafile2_Open(alifile, NULL, &afp2); if (status == eslENOTFOUND) esl_fatal("Alignment file %s doesn't exist or is not readable\n", alifile); else if (status != eslOK) esl_fatal("Alignment file open failed with error %d\n", status); } else { status = eslx_msafile_Open(NULL, alifile, NULL, infmt, NULL, &afp); if (status != eslOK) eslx_msafile_OpenFailure(afp, status); } /* If nec, read mask from the mask file */ if (do_maskfile) if((status = read_mask_file(maskfile, errbuf, &useme_mfile, &file_mlen)) != eslOK) esl_fatal(errbuf); /************************************************************************************ * Read the first MSA in the file (we only mask first aln) and verify we can mask it. ************************************************************************************/ if (do_small) { status = esl_msafile2_ReadInfoPfam(afp2, NULL, abc, -1, NULL, NULL, &msa, &nseq, &orig_alen, NULL, NULL, NULL, NULL, NULL, (do_gapthresh) ? &abc_ct : NULL, (do_postprob) ? &pp_ct : NULL, NULL, NULL, NULL); /* we don't want bp_ct, srfpos_ct nor erfpos_ct */ if (status == eslEFORMAT) esl_fatal("Alignment file parse error:\n%s\n", afp2->errbuf); else if (status == eslEINVAL) esl_fatal("Alignment file parse error:\n%s\n", afp2->errbuf); else if (status != eslOK) esl_fatal("Alignment file read failed with error code %d\n%s", status, afp); msa->alen = orig_alen; /* for convenience, but be careful, the msa doesn't actually have any aseq or ax */ } else { status = eslx_msafile_Read(afp, &msa); /* if ! do_small, we read full aln into memory */ if (status != eslOK) eslx_msafile_ReadFailure(afp, status); orig_alen = msa->alen; if(do_postprob && msa->pp == NULL && (! esl_opt_IsOn(go, "--ppcons"))) esl_fatal("-p was enabled, but the MSA has no posterior probability (#=GR PP) annotation."); } /* Allocate and initialize i_am_eligible array, which defines which * positions we'll consider keeping. If msa->rf == NULL or --keepins * enabled, this will be all positions, else it will only be non-gap * RF positions. */ ESL_ALLOC(i_am_eligible, sizeof(int) * (int) msa->alen); esl_vec_ISet(i_am_eligible, (int) msa->alen, TRUE); /* default to all positions, this is overwritten just below if nec */ /* if RF exists, get i_am_rf array[0..alen] which tells us which positions are non-gap RF positions * and rf2a_map, a map of non-gap RF positions to overall alignment positions */ if(msa->rf != NULL) { if((status = map_rfpos_to_apos(msa, abc, errbuf, &i_am_rf, &rf2a_map, &rflen)) != eslOK) esl_fatal(errbuf); if(! esl_opt_GetBoolean(go, "--keepins")) { /* we'll only consider keeping non-gap RF columns */ esl_vec_ICopy(i_am_rf, (int) msa->alen, i_am_eligible); } } else { /* RF doesn't exist, make sure no options that require RF annotation were enabled */ if(esl_opt_IsOn(go, "--pmask-rf")) esl_fatal("Error, --pmask-rf enabled, but alignment does not have RF annotation."); if(esl_opt_IsOn(go, "--gmask-rf")) esl_fatal("Error, --gmask-rf enabled, but alignment does not have RF annotation."); if(esl_opt_IsOn(go, "--fmask-rf")) esl_fatal("Error, --fmask-rf enabled, but alignment does not have RF annotation."); if(esl_opt_GetBoolean(go, "--rf-is-mask")) esl_fatal("Error, --rf-is-mask enabled but msa does not have RF annotation."); if(esl_opt_GetBoolean(go, "--keepins")) esl_fatal("Error, --keepins enabled but msa does not have RF annotation."); if(esl_opt_GetBoolean(go, "--t-rmins")) esl_fatal("Error, --t-rmins enabled but msa does not have RF annotation."); } /* make sure we have pp_cons if --ppcons enabled */ if(esl_opt_IsOn(go, "--ppcons") && msa->pp_cons == NULL) esl_fatal("--ppcons was enabled, but the MSA has no consensus posterior probability (#=GC PP_cons) annotation."); /* Determine value of do_rfonly, if TRUE, we'll automatically remove all non-gap RF columns, * if(do_maskfile): if mlen (length of mask from file) == rflen, do_rfonly set to TRUE * if(do_truncate): if msa->rf != NULL and --t-rmins enabled, then do_rfonly set to TRUE * else : if msa->rf != NULL and --keepins not enabled, then do_rfonly set to TRUE */ do_rfonly = FALSE; /* until proven otherwise */ if(do_maskfile) { if(msa->rf == NULL) { if((int) msa->alen != file_mlen) esl_fatal("Error, mask length (%d) not equal to alignment length (%d), and alignment has no #=GC RF annotation.", file_mlen, msa->alen); } else { /* msa->rf != NULL */ if(((int) msa->alen != file_mlen) && (rflen != file_mlen)) esl_fatal("Error, mask length (%d) not equal to alignment length (%d), and alignment has no #=GC RF annotation.", file_mlen, msa->alen); if(rflen == file_mlen) do_rfonly = TRUE; } } else if(do_truncate) { if(msa->rf != NULL && esl_opt_GetBoolean(go, "--t-rmins")) do_rfonly = TRUE; /* Note: we verified that --t-rmins was not enabled if msa->rf == NULL immediately after reading the msa above */ } else if(do_rf_is_mask) { do_rfonly = TRUE; } else { /* ! do_maskfile && ! do_truncate && ! do_rf_is_mask */ if(msa->rf != NULL && (! esl_opt_GetBoolean(go, "--keepins"))) do_rfonly = TRUE; } /**************************************************************** * Prepare for masking. This is done differently for each mode. * ****************************************************************/ ESL_ALLOC(useme_final, sizeof(int) * msa->alen); if(be_verbose) { fprintf(stdout, "# %19s %7s %7s %16s %16s %13s\n", "", "", "", "all columns", "non-gap RF colns",""); fprintf(stdout, "# %19s %7s %7s %16s %16s %13s\n", "", "", "", "----------------", "----------------",""); fprintf(stdout, "# %19s %7s %7s %7s %7s %7s %7s %13s\n", "", "", "non-gap", "num", "num", "num", "num", "gap RF colns"); fprintf(stdout, "# %-19s %7s %7s %7s %7s %7s %7s %13s\n","mask mode", "aln len", "RF len", "kept", "removed", "kept", "removed", "auto removed?"); fprintf(stdout, "# %19s %7s %7s %7s %7s %7s %7s %13s\n", "-------------------", "-------", "-------", "-------", "-------", "-------", "-------", "-------------"); } if(do_maskfile) { if(do_rfonly) { if((status = expand_rf_useme_to_alen(useme_mfile, rf2a_map, rflen, msa->alen, errbuf, useme_final)) != eslOK) esl_fatal(errbuf); } else { /* ! do_rfonly, copy useme_mfile to useme_final (we could do this differently...) */ esl_vec_ICopy(useme_mfile, msa->alen, useme_final); } if(be_verbose) { nkept = esl_vec_ISum(useme_final, (int) msa->alen); if(msa->rf == NULL) fprintf(stdout, " %-19s %7" PRId64 " %7s %7d %7d %7s %7s %13s\n", "maskfile", msa->alen, "-", nkept, (int) msa->alen - nkept, "-", "-", "-"); else { nkept_rf = (do_rfonly) ? nkept: determine_nkept_rf(useme_final, i_am_rf, msa->alen); fprintf(stdout, " %-19s %7" PRId64 " %7d %7d %7d %7d %7d %13s\n", "maskfile", msa->alen, rflen, nkept, (int) msa->alen - nkept, nkept_rf, rflen - nkept_rf, do_rfonly ? "yes" : "no"); } } } if(do_truncate) { parse_coord_string(esl_opt_GetArg(go, 2), &tstart, &tend); /* this dies with esl_fatal() if 2nd cmdline arg is invalid */ /* remember: user provided coords are 1..alen or 1..rflen, whereas all internal arrays use 0..alen-1 and 0..rflen-1 */ if(esl_opt_GetBoolean(go, "--t-rf")) { /* convert start and end positions read from 2nd cmdline arg from rf positions to full alignment positions */ if(tstart > rflen) esl_fatal("with -t and --t-rf, start coordinate value %d exceeds non-gap RF length of %d", tstart, rflen); if(tend > rflen) esl_fatal("with -t and --t-rf, end coordinate value %d exceeds non-gap RF length of %d", tend, rflen); tstart = rf2a_map[(tstart-1)] + 1; if(tend == 0) tend = (int) msa->alen; /* careful, don't set it to rflen and then convert with the map, you'll lose the inserts after the final non-gap RF posn */ else tend = rf2a_map[(tend-1)] + 1; } else { if(tstart > msa->alen) esl_fatal("with -t, start coordinate value %d exceeds alignment length of %" PRId64, tstart, msa->alen); if(tend > msa->alen) esl_fatal("with -t, end coordinate value %d exceeds alignment length of %" PRId64, tend, msa->alen); if(tend == 0) tend = (int) msa->alen; } /* create the truncation mask */ for(apos = 0; apos < (tstart-1); apos++) useme_final[apos] = FALSE; for(apos = (tstart-1); apos < tend; apos++) useme_final[apos] = do_rfonly ? i_am_rf[apos] : TRUE; /* only keep non-gap RF positions if do_rfonly */ for(apos = tend; apos < msa->alen; apos++) useme_final[apos] = FALSE; if(be_verbose) { nkept = esl_vec_ISum(useme_final, (int) msa->alen); if(msa->rf == NULL) fprintf(stdout, " %-19s %7" PRId64 " %7s %7d %7d %7s %7s %13s\n", "truncation", msa->alen, "-", nkept, (int) msa->alen - nkept, "-", "-", "-"); else { nkept_rf = (do_rfonly) ? nkept: determine_nkept_rf(useme_final, i_am_rf, msa->alen); fprintf(stdout, " %-19s %7" PRId64 " %7d %7d %7d %7d %7d %13s\n", "truncation", msa->alen, rflen, nkept, (int) msa->alen - nkept, nkept_rf, rflen - nkept_rf, do_rfonly ? "yes" : "no"); } } } if(do_gapthresh) { if(! do_small) { if((status = count_gaps_in_msa(msa, abc, i_am_eligible, errbuf, &gap_ct)) != eslOK) esl_fatal(errbuf); } else { ESL_ALLOC(gap_ct, sizeof(double) * msa->alen); for(apos = 0; apos < msa->alen; apos++) gap_ct[apos] = abc_ct[apos][abc->K]; } if((status = mask_based_on_gapfreq(gap_ct, msa->alen, (do_small) ? nseq : msa->nseq, esl_opt_GetReal(go, "--gapthresh"), i_am_eligible, errbuf, &useme_g)) != eslOK) esl_fatal(errbuf); if(be_verbose) { nkept = esl_vec_ISum(useme_g, (int) msa->alen); if(msa->rf == NULL) fprintf(stdout, " %-19s %7" PRId64 " %7s %7d %7d %7s %7s %13s\n", "gapfreq", msa->alen, "-", nkept, (int) msa->alen - nkept, "-", "-", "-"); else { nkept_rf = (do_rfonly) ? nkept: determine_nkept_rf(useme_g, i_am_rf, msa->alen); fprintf(stdout, " %-19s %7" PRId64 " %7d %7d %7d %7d %7d %13s\n", "gapfreq", msa->alen, rflen, nkept, (int) msa->alen - nkept, nkept_rf, rflen - nkept_rf, do_rfonly ? "yes" : "no"); } } } if(do_postprob) { if(! do_small) { if((status = count_postprobs_in_msa(msa, abc, i_am_eligible, errbuf, &pp_ct)) != eslOK) esl_fatal(errbuf); } do_pavg = esl_opt_IsOn(go, "--pavg"); pavg_min = do_pavg ? esl_opt_GetReal(go, "--pavg") : 0.; /* if ! do_pavg, pavg_min is irrelevant */ do_ppcons = esl_opt_IsOn(go, "--ppcons"); ppcons_min = do_ppcons ? esl_opt_GetReal(go, "--ppcons") : 0.; /* if ! do_ppcons, ppcons_min is irrelevant */ if((status = mask_based_on_postprobs(pp_ct, msa->alen, (do_small) ? nseq : msa->nseq, esl_opt_GetReal(go, "--pthresh"), esl_opt_GetReal(go, "--pfract"), do_pavg, pavg_min, do_ppcons, ppcons_min, msa->pp_cons, abc, i_am_eligible, esl_opt_GetBoolean(go, "--pallgapok"), errbuf, &useme_pp)) != eslOK) esl_fatal(errbuf); if(be_verbose) { nkept = esl_vec_ISum(useme_pp, (int) msa->alen); if(msa->rf == NULL) fprintf(stdout, " %-19s %7" PRId64 " %7s %7d %7d %7s %7s %13s\n", "postprobs", msa->alen, "-", nkept, (int) msa->alen - nkept, "-", "-", "-"); else { nkept_rf = (do_rfonly) ? nkept: determine_nkept_rf(useme_pp, i_am_rf, msa->alen); fprintf(stdout, " %-19s %7" PRId64 " %7d %7d %7d %7d %7d %13s\n", "postprobs", msa->alen, rflen, nkept, (int) msa->alen - nkept, nkept_rf, rflen - nkept_rf, do_rfonly ? "yes" : "no"); } } } if(do_rf_is_mask) { for(apos = 0; apos < msa->alen; apos++) useme_final[apos] = i_am_rf[apos]; if(be_verbose) fprintf(stdout, " %-19s %7" PRId64 " %7d %7d %7d %7d %7d %13s\n", "RF", msa->alen, rflen, rflen, (int) msa->alen - rflen, rflen, 0, "yes"); } /********************************************************************************* * Determine final mask if -p, -g or both were enabled (else we already have it) * *********************************************************************************/ /* combine pp and gap mask if -p and -g */ if(do_gapthresh && do_postprob) { for(apos = 0; apos < msa->alen; apos++) useme_final[apos] = (useme_g[apos] && useme_pp[apos]) ? TRUE : FALSE; nkept = esl_vec_ISum(useme_final, (int) msa->alen); if(be_verbose) { nkept = esl_vec_ISum(useme_final, (int) msa->alen); if(msa->rf == NULL) fprintf(stdout, " %-19s %7" PRId64 " %7s %7d %7d %7s %7s %13s\n", "gapfreq&postprobs", msa->alen, "-", nkept, (int) msa->alen - nkept, "-", "-", "-"); else { nkept_rf = (do_rfonly) ? nkept: determine_nkept_rf(useme_final, i_am_rf, msa->alen); fprintf(stdout, " %-19s %7" PRId64 " %7d %7d %7d %7d %7d %13s\n", "gapfreq&postprobs", msa->alen, rflen, nkept, (int) msa->alen - nkept, nkept_rf, rflen - nkept_rf, do_rfonly ? "yes" : "no"); } } } else if(do_gapthresh) { esl_vec_ICopy(useme_g, msa->alen, useme_final); } else if(do_postprob) { esl_vec_ICopy(useme_pp, msa->alen, useme_final); } /* else (do_maskfile || do_rf_is_mask || do_truncate) we set useme_final above */ /************************************************ * Unless --small enabled, mask the alignment * ************************************************/ if(! do_small) { if (abc && (abc->type == eslRNA || abc->type == eslDNA) && (status = esl_msa_RemoveBrokenBasepairs(msa, errbuf, useme_final)) != eslOK) esl_fatal(errbuf); if ((status = esl_msa_ColumnSubset (msa, errbuf, useme_final)) != eslOK) esl_fatal(errbuf); } /* else we'll do it as we regurgitate it upon rereading below */ /************************ * Output the alignment * ************************/ if (! do_small) { eslx_msafile_Write(ofp, msa, outfmt); } else { /* do_small==TRUE, we don't have the full msa stored, * we must regurgitate it, removing unwanted columns as we do. * First, close then reopen alifile so we can reread (first) alignment (no esl_msafile_Position() exists yet) */ esl_msafile2_Close(afp2); status = esl_msafile2_OpenDigital(abc, alifile, NULL, &afp2); /* this should work b/c it did on the first pass */ if (status == eslENOTFOUND) esl_fatal("Second pass: alignment file %s doesn't exist or is not readable\n", alifile); else if (status == eslEFORMAT) esl_fatal("Second pass: couldn't determine format of alignment %s\n", alifile); else if (status != eslOK) esl_fatal("Second pass: alignment file open failed with error %d\n"); status = esl_msafile2_RegurgitatePfam(afp2, ofp, -1, -1, -1, -1, /* max width of seq names, gf,gc,gr tags unknown, we'll use margin length from file */ TRUE, /* regurgitate stockholm header ? */ TRUE, /* regurgitate // trailer ? */ TRUE, /* regurgitate blank lines */ TRUE, /* regurgitate comments */ TRUE, /* regurgitate GF ? */ TRUE, /* regurgitate GS ? */ TRUE, /* regurgitate GC ? */ TRUE, /* regurgitate GR ? */ TRUE, /* regurgitate aseq ? */ NULL, /* regurgitate all seqs, not a subset */ NULL, /* regurgitate all seqs, not a subset */ useme_final, /* which columns to keep */ NULL, /* we're not adding any columns */ msa->alen, /* expected length, not strictly necessary */ '.', /* gapchar, irrelevant in this context */ NULL, /* don't return num seqs read */ NULL); /* don't return num seqs regurgitated */ if(status == eslEOF) esl_fatal("Second pass, unable to reread alignment"); if(status != eslOK) esl_fatal("Second pass, error rereading alignment"); } if(be_verbose) fprintf(stdout, "#\n"); /************************************************************************************************************** * Output masks, if nec (we already checked above that msa->rf != NULL If any --*mask-rf options are enabled) * **************************************************************************************************************/ if(esl_opt_IsOn(go, "--pmask-rf")) { if((status = output_mask(esl_opt_GetString(go, "--pmask-rf"), useme_pp, i_am_rf, orig_alen, errbuf)) != eslOK) esl_fatal(errbuf); if(be_verbose) fprintf(stdout, "# Posterior probability mask of non-gap RF length (%d) saved to file %s.\n", rflen, esl_opt_GetString(go, "--pmask-rf")); } if(esl_opt_IsOn(go, "--pmask-all")) { if((status = output_mask(esl_opt_GetString(go, "--pmask-all"), useme_pp, NULL, orig_alen, errbuf)) != eslOK) esl_fatal(errbuf); if(be_verbose) fprintf(stdout, "# Posterior probability mask of full alignment length (%d) saved to file %s.\n", (int) orig_alen, esl_opt_GetString(go, "--pmask-all")); } if(esl_opt_IsOn(go, "--gmask-rf")) { if((status = output_mask(esl_opt_GetString(go, "--gmask-rf"), useme_g, i_am_rf, orig_alen, errbuf)) != eslOK) esl_fatal(errbuf); if(be_verbose) fprintf(stdout, "# Gap frequency mask of non-gap RF length (%d) saved to file %s.\n", rflen, esl_opt_GetString(go, "--gmask-rf")); } if(esl_opt_IsOn(go, "--gmask-all")) { if((status = output_mask(esl_opt_GetString(go, "--gmask-all"), useme_g, NULL, orig_alen, errbuf)) != eslOK) esl_fatal(errbuf); if(be_verbose) fprintf(stdout, "# Gap frequency mask of full alignment length (%d) saved to file %s.\n", (int) orig_alen, esl_opt_GetString(go, "--gmask-all")); } if(esl_opt_IsOn(go, "--fmask-rf")) { if((status = output_mask(esl_opt_GetString(go, "--fmask-rf"), useme_final, i_am_rf, orig_alen, errbuf)) != eslOK) esl_fatal(errbuf); if(be_verbose) fprintf(stdout, "# Final mask of non-gap RF length (%d) saved to file %s.\n", rflen, esl_opt_GetString(go, "--fmask-rf")); } if(esl_opt_IsOn(go, "--fmask-all")) { if((status = output_mask(esl_opt_GetString(go, "--fmask-all"), useme_final, NULL, orig_alen, errbuf)) != eslOK) esl_fatal(errbuf); if(be_verbose) fprintf(stdout, "# Final mask of full alignment length (%d) saved to file %s.\n", (int) orig_alen, esl_opt_GetString(go, "--fmask-all")); } if(esl_opt_GetString(go, "-o") != NULL) { fclose(ofp); if(be_verbose) fprintf(stdout, "# Masked alignment saved to file %s.\n", esl_opt_GetString(go, "-o")); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU time: "); } /* Clean up, normal return */ if (rf2a_map) free(rf2a_map); if (useme_mfile) free(useme_mfile); if (useme_g) free(useme_g); if (useme_pp) free(useme_pp); if (useme_final) free(useme_final); if (i_am_rf) free(i_am_rf); if (i_am_eligible) free(i_am_eligible); if (pp_ct) esl_Free2D((void **) pp_ct, orig_alen); if (abc_ct) esl_Free2D((void **) abc_ct, orig_alen); if (gap_ct) free(gap_ct); if (msa) esl_msa_Destroy(msa); if (abc) esl_alphabet_Destroy(abc); if (w) esl_stopwatch_Destroy(w); if (afp) eslx_msafile_Close(afp); if (afp2) esl_msafile2_Close(afp2); esl_getopts_Destroy(go); return 0; ERROR: esl_fatal("Memory allocation error."); return status; /* NEVERREACHED */ } /* read_mask_file * * Given the name of a mask file with 1 mask in it, * read it, fill and return. * * mlen length of the mask * useme[0..i..mlen-1]: '1' if we should keep column i, '0' if not. * * useme is allocated here, and must be freed by caller. * * The mask must only contain '0' or '1' characters. * Lines prefixed with '#' are comment lines, and ignored. * All whitespace (including newlines) is ignored. * * Returns: eslOK on success and is set as . * is set as . * eslEINVAL if a non-0/1 character read */ int read_mask_file(char *filename, char *errbuf, int **ret_useme, int *ret_mlen) { int status; ESL_FILEPARSER *efp; char *tok; int *useme = NULL; int toklen; int mlen = 0; int i; void *tmp; if (esl_fileparser_Open(filename, NULL, &efp) != eslOK) ESL_FAIL(eslFAIL, errbuf, "failed to open %s in read_mask_file\n", filename); esl_fileparser_SetCommentChar(efp, '#'); while ((status = esl_fileparser_GetToken(efp, &tok, &toklen)) == eslOK) { if(mlen == 0) ESL_ALLOC (useme, sizeof(int) * toklen); else ESL_RALLOC(useme, tmp, sizeof(int) * (mlen+toklen)); for(i = 0; i < toklen; i++) { if(tok[i] == '0') useme[mlen+i] = FALSE; else if(tok[i] == '1') useme[mlen+i] = TRUE; else ESL_FAIL(eslEINVAL, errbuf, "Mask character number %d is neither a '0', nor a '1' but a (%c). The mask must be only 1s and 0s.", mlen+i+1, tok[i]); } mlen += toklen; } *ret_useme = useme; *ret_mlen = mlen; esl_fileparser_Close(efp); return eslOK; ERROR: if(useme != NULL) free(useme); ESL_FAIL(status, errbuf, "Ran out of memory while reading the mask file."); return status; /* NEVERREACHED */ } /* map_rfpos_to_apos * * Given an MSA, determine the alignment position of each * non-gap RF (reference) position. The abc is only necessary * for defining gap characters. * * rf2a_map[0..rfpos..rflen-1] = apos, apos is the alignment position (0..msa->alen-1) that * is non-gap RF position rfpos+1 (for rfpos in 0..rflen-1) */ static int map_rfpos_to_apos(ESL_MSA *msa, ESL_ALPHABET *abc, char *errbuf, int **ret_i_am_rf, int **ret_rf2a_map, int *ret_rflen) { int status; int rflen = 0; int *rf2a_map = NULL; int *i_am_rf = NULL; int rfpos = 0; int apos = 0; /* contract check */ if(msa->rf == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, trying to map RF positions to alignment positions, but msa->rf is NULL."); /* count non-gap RF columns */ for(apos = 0; apos < msa->alen; apos++) { if((! esl_abc_CIsGap(abc, msa->rf[apos])) && (! esl_abc_CIsMissing(abc, msa->rf[apos])) && (! esl_abc_CIsNonresidue(abc, msa->rf[apos]))) { rflen++; /* I don't use esl_abc_CIsResidue() b/c that would return FALSE for 'x' with RNA and DNA */ } } /* build map */ ESL_ALLOC(i_am_rf, sizeof(int) * msa->alen); ESL_ALLOC(rf2a_map, sizeof(int) * rflen); for(apos = 0; apos < msa->alen; apos++) { if((! esl_abc_CIsGap(abc, msa->rf[apos])) && (! esl_abc_CIsMissing(abc, msa->rf[apos])) && (! esl_abc_CIsNonresidue(abc, msa->rf[apos]))) { i_am_rf[apos] = TRUE; rf2a_map[rfpos++] = apos; } else { i_am_rf[apos] = FALSE; } } *ret_i_am_rf = i_am_rf; *ret_rf2a_map = rf2a_map; *ret_rflen = rflen; return eslOK; ERROR: if(i_am_rf != NULL) free(i_am_rf); if(rf2a_map != NULL) free(rf2a_map); ESL_FAIL(status, errbuf, "Error, out of memory while mapping RF positions to alignment positions."); } /* expand_rf_useme_to_alen * * Given a array that corresponds to rflen (non-gap RF) * length of an msa, expand it to msa->alen using the map * from RF positions to alignment positions and overwrite the * array as the alen expanded array. * * If we encounter an error, we return non-eslOK status and * and fill errbuf with error message. */ static int expand_rf_useme_to_alen(int *useme_rf, int *rf2a_map, int rflen, int alen, char *errbuf, int *useme_a) { int rfpos = 0; /* initialize */ esl_vec_ISet(useme_a, alen, FALSE); for(rfpos = 0; rfpos < rflen; rfpos++) { if(rf2a_map[rfpos] > (alen-1)) ESL_FAIL(eslEINVAL, errbuf, "Error in expand_rf_useme_to_alen(), rf2a_map[rfpos:%d] = %d, but alen is %d.", rfpos, rf2a_map[rfpos], alen); useme_a[rf2a_map[rfpos]] = useme_rf[rfpos]; } return eslOK; } /* count_gaps_in_msa() * * Given an msa, fill gap_ct[apos] with the number of gaps in position * apos, for all positions apos=0..msa->alen-1. Return gap_ct as * . [0..apos..msa->alen-1] = TRUE if we should * count for position apos, FALSE if we shouldn't (leave ngap[apos] = * 0). (countme allows us to not waste time counting gaps in columns * that we will automatically remove, for example those that are * gaps in the RF annotation). * * If we encounter an error, we return non-eslOK status and and fill * errbuf with error message. * * Returns eslOK upon success, and points at useme, caller * must free it. */ static int count_gaps_in_msa(ESL_MSA *msa, ESL_ALPHABET *abc, int *countme, char *errbuf, double **ret_gap_ct) { int status; double *gap_ct = NULL; int apos, i; /* contract check, msa should be in text mode */ if(msa->flags & eslMSA_DIGITAL) ESL_FAIL(eslEINVAL, errbuf, "count_gaps_in_msa() contract violation, MSA is digitized"); ESL_ALLOC(gap_ct, sizeof(double) * msa->alen); esl_vec_DSet(gap_ct, msa->alen, 0.); for(apos = 0; apos < (int) msa->alen; apos++) { if(countme[apos]) { for(i = 0; i < msa->nseq; i++) { if(esl_abc_CIsGap(abc, msa->aseq[i][apos])) gap_ct[apos] += 1.0; } } } *ret_gap_ct = gap_ct; return eslOK; ERROR: if(gap_ct != NULL) free(gap_ct); ESL_FAIL(status, errbuf, "Error, out of memory while counting gaps in the msa."); return status; /* NEVERREACHED */ } /* mask_based_on_gapfreq() * * Determine which columns to include/exclude based on frequency of * gaps. Gap counts per-position are provided in . * If posn x gap freq is <= , we set useme[x] to TRUE * (we'll keep x), else we set useme[x] to FALSE (we won't keep x). * [0..alen-1] defines which columns are eligible for * being used, if useme[x] is set as FALSE, * regardless of gap frequency. * * If we encounter an error, we return non-eslOK status and * and fill errbuf with error message. * * Returns eslOK upon success, and points at useme, * caller must free it. */ static int mask_based_on_gapfreq(double *gap_ct, int64_t alen, int nseq, float gapthresh, int *i_am_eligible, char *errbuf, int **ret_useme) { int status; int *useme = NULL; int apos; float gapfreq; /* contract check */ if(i_am_eligible == NULL) ESL_FAIL(eslEINVAL, errbuf, "mask_based_on_gapthresh() contract violation, i_am_eligible is NULL"); /* allocate */ ESL_ALLOC(useme, sizeof(int) * alen); for(apos = 0; apos < alen; apos++) { if(i_am_eligible[apos]) { gapfreq = gap_ct[apos] / (float) nseq; useme[apos] = gapthresh < gapfreq ? FALSE : TRUE; /* should I be worried about imprecision? 0.5 compared to 0.5? */ /* printf("apos: %d gapfreq: %.3f\n", apos, gapfreq); */ } else useme[apos] = FALSE; } *ret_useme = useme; return eslOK; ERROR: if(useme != NULL) free(useme); ESL_FAIL(status, errbuf, "Error, out of memory while masking based on gaps."); return status; /* NEVERREACHED */ } /* get_pp_idx * * Given a #=GR PP or #=GC PP_cons character, return the appropriate index * in a pp_ct[] vector. * '0' return 0; * '1' return 1; * '2' return 2; * '3' return 3; * '4' return 4; * '5' return 5; * '6' return 6; * '7' return 7; * '8' return 8; * '9' return 9; * '*' return 10; * gap return 11; * * Anything else (including missing or nonresidue) return -1; * * This mapping of PP chars to return values should probably be * stored in some internal map structure somewhere, instead of * only existing in this function as used by esl_msafile2_ReadInfoPfam(). */ static int get_pp_idx(ESL_ALPHABET *abc, char ppchar) { if(esl_abc_CIsGap(abc, ppchar)) return 11; if(ppchar == '*') return 10; if(ppchar == '9') return 9; if(ppchar == '8') return 8; if(ppchar == '7') return 7; if(ppchar == '6') return 6; if(ppchar == '5') return 5; if(ppchar == '4') return 4; if(ppchar == '3') return 3; if(ppchar == '2') return 2; if(ppchar == '1') return 1; if(ppchar == '0') return 0; return -1; } /* count_postprobs_in_msa() * * Given an msa, fill nppA[apos] with the number of each possible * posterior probability value in position apos, for all positions * apos=0..msa->alen-1. Return nppA as . * [0..apos..msa->alen-1] = TRUE if we should * count for position apos, FALSE if we shouldn't (leave npp[apos][] = * 0). (countme allows us to not waste time counting pps in columns * that we will automatically remove, for example those that are * gaps in the RF annotation). * * Possible PP values are: '0','1','2','3','4','5','6','7','8','9', * '*','.','-','_'. Final 3 are gaps, and are treated identically. * * If we encounter an error, we return non-eslOK status and and fill * errbuf with error message. * * Returns eslOK upon success, and points at useme, caller * must free it. */ static int count_postprobs_in_msa(ESL_MSA *msa, ESL_ALPHABET *abc, int *countme, char *errbuf, double ***ret_pp_ct) { int status; double **pp_ct = NULL; int apos, i; int nppvals = 12; /* '0-9', '*' and gap */ int ppidx; /* contract check, msa should be in text mode */ if(msa->flags & eslMSA_DIGITAL) ESL_FAIL(eslEINVAL, errbuf, "count_postprobs_in_msa() contract violation, MSA is digitized"); if(msa->pp == NULL) ESL_FAIL(eslEINVAL, errbuf, "count_postprobs_in_msa() contract violation, msa->pp is NULL"); ESL_ALLOC(pp_ct, sizeof(double *) * msa->alen); for(apos = 0; apos < msa->alen; apos++) { ESL_ALLOC(pp_ct[apos], sizeof(double) * nppvals); esl_vec_DSet(pp_ct[apos], nppvals, 0.); } for(apos = 0; apos < (int) msa->alen; apos++) { if(countme[apos]) { for(i = 0; i < msa->nseq; i++) { if(msa->pp[i] == NULL) { ESL_FAIL(eslEINVAL, errbuf, "some but not all sequences have PP annotation in msa, seq %d does not.\n", (i+1)); } ppidx = get_pp_idx(abc, msa->pp[i][apos]); if(ppidx == 11) { /* special, gap idx */ /* make sure the corresponding residue is also a gap */ if(! esl_abc_CIsGap(abc, msa->aseq[i][apos])) ESL_FAIL(eslEINVAL, errbuf, "post prob annotation for seq: %d aln column: %d is a gap (%c), but seq res is not: (%c)", i, apos, msa->pp[i][apos], msa->aseq[i][apos]); } pp_ct[apos][ppidx] += 1.; } } } *ret_pp_ct = pp_ct; return eslOK; ERROR: if(pp_ct != NULL) { for(apos = 0; apos < msa->alen; apos++) { if(pp_ct[apos] != NULL) free(pp_ct[apos]); } free(pp_ct); } ESL_FAIL(status, errbuf, "Error, out of memory while counting post probs in the msa."); return status; /* NEVERREACHED */ } /* mask_based_on_postprobs() * * Determine which columns to include/exclude based on frequency of * post probs. Post prob counts per-position are provided in . * * If (do_pavg == FALSE && do_ppcons == FALSE): * If more than fraction of the non-gap residues in posn apos * are annotated with a post prob equal to or better than , * we set useme[apos] to TRUE (we'll keep apos), else we set useme[apos] * to FALSE (we won't keep apos). * * If (do_pavg == TRUE): * If average post prob in posn apos is equal to or better than * we set useme[apos] to TRUE, else we set useme[apos] to FALSE. * * If (do_ppcons == TRUE): * If PP_cons post prob (from ppcons) in posn apos is equal to or better than * we set useme[apos] to TRUE, else we set useme[apos] to FALSE. * * Note: either do_avg OR do_ppcons OR neither must be TRUE. Enforced by contract. * * [0..alen-1] defines which columns are eligible for being * used, if useme[apos] is set as FALSE, regardless of pp * frequency. * * Finally, unless remove any column that contains all gaps, * i.e. that contains 0 aligned residues. * * If we encounter an error, we return non-eslOK status and * and fill errbuf with error message. * * Returns eslOK upon success, and points at useme, * caller must free it. */ static int mask_based_on_postprobs(double **pp_ct, int64_t alen, int nseq, float pthresh, float pfract, int do_pavg, float pavg_min, int do_ppcons, float ppcons_min, char *pp_cons, ESL_ALPHABET *abc, int *i_am_eligible, int allgapok, char *errbuf, int **ret_useme) { int status; int *useme = NULL; int apos; float ppfreq; double nnongap; int nppvals = 12; /* '0-9', '*' and gap */ int ppidx_thresh; int ppidx = 0; double ppcount = 0.; double ppsum = 0.; double pavg; double ppminA[11]; double ppavgA[11]; ppminA[0] = 0.00; ppminA[1] = 0.05; ppminA[2] = 0.15; ppminA[3] = 0.25; ppminA[4] = 0.35; ppminA[5] = 0.45; ppminA[6] = 0.55; ppminA[7] = 0.65; ppminA[8] = 0.75; ppminA[9] = 0.85; ppminA[10] = 0.95; ppavgA[0] = 0.025; ppavgA[1] = 0.10; ppavgA[2] = 0.20; ppavgA[3] = 0.30; ppavgA[4] = 0.40; ppavgA[5] = 0.50; ppavgA[6] = 0.60; ppavgA[7] = 0.70; ppavgA[8] = 0.80; ppavgA[9] = 0.90; ppavgA[10] = 0.975; /* contract check */ if(i_am_eligible == NULL) ESL_FAIL(eslEINVAL, errbuf, "mask_based_on_postprobs() contract violation, i_am_eligible is NULL"); if(do_pavg == TRUE && do_ppcons == TRUE) ESL_FAIL(eslEINVAL, errbuf, "mask_based_on_postprobs() contract violation, do_pavg and do_ppcons are both TRUE"); if(do_ppcons == TRUE && pp_cons == NULL) ESL_FAIL(eslEINVAL, errbuf, "mask_based_on_postprobs() contract violation, do_ppcons is TRUE, but ppcons string is NULL"); /* allocate */ ESL_ALLOC(useme, sizeof(int) * alen); if((! do_pavg) && (! do_ppcons)) { /* determine which pp_ct idx is the minimum we'll accept */ ppidx = 0; while(ppidx < 10) { if((esl_FCompare(pthresh, ppminA[ppidx], eslSMALLX1) == eslOK) || pthresh < ppminA[ppidx]) break; ppidx++; } ppidx_thresh = ppidx; } for(apos = 0; apos < alen; apos++) { ppcount = 0.; ppsum = 0.; if(i_am_eligible[apos]) { /* consider this position */ nnongap = esl_vec_DSum(pp_ct[apos], nppvals) - pp_ct[apos][11]; if(esl_FCompare(nnongap, 0., eslSMALLX1) == eslOK) { /* effectively 0.0 */ useme[apos] = allgapok ? TRUE : FALSE; } else { if(do_pavg) { for(ppidx = 0; ppidx < 11; ppidx++) { ppsum += pp_ct[apos][ppidx] * ppavgA[ppidx]; /* Note: PP value is considered average of range, not minimum ('9' == 0.90 (0.95-0.85/2) */ /* printf("apos: %d pp_idx: %d ct: %d sum: %.3f\n", apos, ppidx, pp_ct[apos][ppidx], ppsum);*/ } pavg = ppsum / nnongap; useme[apos] = pavg < pavg_min? FALSE : TRUE; /* should I be worried about imprecision? 0.5 compared to 0.5? */ /* printf("pavg: %.3f nnongap: %d useme[apos:%d]: %d pavg_min: %.3f\n", pavg, nnongap, apos, useme[apos], pavg_min);*/ } else if(do_ppcons) { ppidx = get_pp_idx(abc, pp_cons[apos]); if(ppidx == -1) ESL_FAIL(eslEFORMAT, errbuf, "bad #=GC PP_cons char: %c at position %d", pp_cons[apos], apos+1); if(ppidx != 11) { useme[apos] = ((esl_FCompare(ppcons_min, ppminA[ppidx], eslSMALLX1) == eslOK) || ppminA[ppidx] > ppcons_min) ? TRUE : FALSE; /* printf("ppcons[%4d]: %c ppidx: %2d useme %d ppcons_min: %.3f\n", apos, pp_cons[apos], ppidx, useme[apos], ppcons_min); */ } else useme[apos] = FALSE; /* ppidx == 11, gap */ } else { /* ! do_pavg and ! do_ppcons */ for(ppidx = 10; ppidx >= ppidx_thresh; ppidx--) { ppcount += pp_ct[apos][ppidx]; } ppfreq = ppcount / nnongap; useme[apos] = (ppfreq < pfract) ? FALSE : TRUE; /* should I be worried about imprecision? 0.5 compared to 0.5? */ /* printf("apos: %4d nnongap: %6d ppfreq: %.3f pfract %.3f useme: %d ppidx_thresh: %d\n", apos, nnongap, ppfreq, pfract, useme[apos], ppidx_thresh); */ } } } /* end of if(i_am_eligible[apos]) */ else useme[apos] = FALSE; } *ret_useme = useme; return eslOK; ERROR: if(useme != NULL) free(useme); ESL_FAIL(status, errbuf, "Error, out of memory while masking based on postprobs."); return status; /* NEVERREACHED */ } /* output_mask * * Given a useme[0..apos..alen-1] array where useme[apos] = TRUE if we * should keep apos TRUE, and FALSE if not, output a mask of '1's and * '0's to the file . The mask is a string of exactly * length with a '1' for each apos to keep, and a '0' for each apos we * won't keep. * * If is non-NULL, only output '1's or '0's for positions * for which [apos] is TRUE. This allows us to output * masks that are only the length of the non-gap RF annotation in the file. * * If we encounter an error, we return non-eslOK status and and fill * errbuf with error message. * * Returns eslOK upon success. */ static int output_mask(char *filename, int *useme, int *i_am_eligible, int64_t alen, char *errbuf) { int status; FILE *ofp; int apos; char *mask = NULL; int64_t mlen; int mpos; if(useme == NULL) ESL_FAIL(eslEINVAL, errbuf, "Error, trying to output a mask but useme is NULL."); /* determine length of mask */ if(i_am_eligible == NULL) mlen = alen; else mlen = esl_vec_ISum(i_am_eligible, (int) alen); /* relies on TRUE being equal to 1 */ ESL_ALLOC(mask, sizeof(char) * (mlen+1)); mpos = 0; for (apos = 0; apos < alen; apos++) { if(i_am_eligible == NULL) { mask[mpos++] = useme[apos] ? '1' : '0'; } else if(i_am_eligible[apos]) { mask[mpos++] = useme[apos] ? '1' : '0'; } } mask[mlen] = '\0'; if ((ofp = fopen(filename, "w")) == NULL) ESL_FAIL(eslFAIL, errbuf, "Failed to open output file %s\n", filename); fprintf(ofp, "%s\n", mask); free(mask); fclose(ofp); return eslOK; ERROR: ESL_FAIL(status, errbuf, "Memory allocation error while outputting mask."); return status; /* NEVERREACHED */ } /* determine_nkept_rf() * * Determine number of alignment positions to be kept (useme[apos]==TRUE) * are non-gap RF positions using useme[] and i_am_rf[], both of length * . Return that number. */ static int determine_nkept_rf(int *useme, int *i_am_rf, int64_t len) { int nkept_rf = 0; int apos; for(apos = 0; apos < len; apos++) { if(useme[apos] && i_am_rf[apos]) nkept_rf++; } return nkept_rf; } static int parse_coord_string(const char *cstring, uint32_t *ret_start, uint32_t *ret_end) { ESL_REGEXP *re = esl_regexp_Create(); char tok1[32]; char tok2[32]; uint32_t start, end; if (esl_regexp_Match(re, "^(\\d+)\\D+(\\d*)$", cstring) != eslOK) esl_fatal("with -t, 2nd cmdline arg must be coords ..; %s not recognized", cstring); if (esl_regexp_SubmatchCopy(re, 1, tok1, 32) != eslOK) esl_fatal("Failed to find coord in %s", cstring); if (esl_regexp_SubmatchCopy(re, 2, tok2, 32) != eslOK) esl_fatal("Failed to find coord in %s", cstring); /* Check for invalid values for start and end. Note that regexp matching enforced that tok1 and tok2 are both >= 0 */ start = atol(tok1); if(start == 0) esl_fatal("with -t, coordinates must be positive integers .., coordinate read as '0'"); if(tok2[0] == '\0') { /* special case: user provided something like "100:", keep positions 100 until end of alignment */ end = 0; } else { end = atol(tok2); if(end <= 0) esl_fatal("with -t, coordinates must be positive integers .., coordinate read as '0'"); if(start > end) esl_fatal("with -t, 2nd cmdline arg must equal .., with <= "); } *ret_start = start; *ret_end = end; esl_regexp_Destroy(re); return eslOK; } /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/miniapps/esl-alimask.c $ * SVN $Id: esl-alistat.c 393 2009-09-27 12:04:55Z eddys $ *****************************************************************/ hmmer-3.1b2/easel/miniapps/esl-weight.c0000664361611702660230000001461712473612611017424 0ustar wheelerteddy/* Assigns sequence weights to an MSA. */ #include "esl_config.h" #include #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_msa.h" #include "esl_msafile.h" #include "esl_msaweight.h" #include "esl_random.h" #define WGTOPTS "-g,-p,-b,-f" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL, NULL, "show brief help on version and usage", 1 }, { "-g", eslARG_NONE,"default",NULL, NULL,WGTOPTS,NULL, NULL, "Gerstein/Sonnhammer/Chothia tree weights", 1 }, { "-p", eslARG_NONE, FALSE, NULL, NULL,WGTOPTS,NULL, NULL, "Henikoff position-based weights", 1 }, { "-b", eslARG_NONE, FALSE, NULL, NULL,WGTOPTS,NULL, NULL, "Henikoff simple filter weights", 1 }, { "-f", eslARG_NONE, FALSE, NULL, NULL,WGTOPTS,NULL, NULL, "filter out seqs by fractional identity", 1 }, { "-o", eslARG_OUTFILE, NULL, NULL, NULL, NULL,NULL, NULL, "send output to file , not stdout", 1 }, { "--id", eslARG_REAL, "0.62", NULL,"0<=x<=1", NULL,"-b", NULL, "for -b: set identity cutoff", 1 }, { "--idf", eslARG_REAL, "0.80", NULL,"0<=x<=1", NULL,"-f", NULL, "for -f: set identity cutoff", 1 }, { "--informat", eslARG_STRING, FALSE, NULL, NULL, NULL,NULL, NULL, "specify that input file is in format ", 1 }, { "--amino", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--dna,--rna", " contains protein alignments", 1 }, { "--dna", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--amino,--rna", " contains DNA alignments", 1 }, { "--rna", eslARG_NONE, FALSE, NULL, NULL, NULL,NULL,"--amino,--dna", " contains RNA alignments", 1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "calculate sequence weights for an alignment"; static void cmdline_failure(char *argv0, ESL_GETOPTS *go, char *format, ...) { va_list argp; va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); esl_usage(stdout, argv0, usage); puts("\n options:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); /* printf("\nTo see more help on available options, do %s -h\n\n", argv0); */ exit(1); } static void cmdline_help(char *argv0, ESL_GETOPTS *go) { esl_banner(stdout, argv0, banner); esl_usage (stdout, argv0, usage); puts("\n options:"); esl_opt_DisplayHelp(stdout, go, 1, 2, 80); exit(0); } int main(int argc, char **argv) { ESL_GETOPTS *go = NULL; char *msafile = NULL; int fmt = eslMSAFILE_UNKNOWN; ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; int status; FILE *ofp; /* output stream */ /* Parse command line */ go = esl_getopts_Create(options); if (esl_opt_ProcessCmdline(go, argc, argv) != eslOK) cmdline_failure(argv[0], go, "Failed to parse command line: %s\n", go->errbuf); if (esl_opt_VerifyConfig(go) != eslOK) cmdline_failure(argv[0], go, "Error in app configuration: %s\n", go->errbuf); if (esl_opt_GetBoolean(go, "-h") ) cmdline_help (argv[0], go); if (esl_opt_ArgNumber(go) != 1) cmdline_failure(argv[0], go, "Incorrect number of command line arguments.\n"); msafile = esl_opt_GetArg(go, 1); if (esl_opt_IsOn(go, "--informat")) { fmt = eslx_msafile_EncodeFormat(esl_opt_GetString(go, "--informat")); if (fmt == eslMSAFILE_UNKNOWN) esl_fatal("%s is not a valid input sequence file format for --informat", esl_opt_GetString(go, "--informat")); } ofp = (esl_opt_GetString (go, "-o") == NULL ? stdout : fopen(esl_opt_GetString(go, "-o"), "w")); if (! ofp) esl_fatal("Failed to open output file %s\n", esl_opt_GetString(go, "-o")); if (esl_opt_GetBoolean(go, "--amino")) abc = esl_alphabet_Create(eslAMINO); else if (esl_opt_GetBoolean(go, "--dna")) abc = esl_alphabet_Create(eslDNA); else if (esl_opt_GetBoolean(go, "--rna")) abc = esl_alphabet_Create(eslRNA); if ((status = eslx_msafile_Open(&abc, msafile, NULL, fmt, NULL, &afp)) != eslOK) eslx_msafile_OpenFailure(afp, status); while ((status = eslx_msafile_Read(afp, &msa)) != eslEOF) { if (status != eslOK) eslx_msafile_ReadFailure(afp, status); if (esl_opt_GetBoolean(go, "-f")) { ESL_MSA *fmsa; status = esl_msaweight_IDFilter(msa, esl_opt_GetReal(go, "--idf"), &fmsa); eslx_msafile_Write(ofp, fmsa, eslMSAFILE_STOCKHOLM); if (fmsa != NULL) esl_msa_Destroy(fmsa); } else if (esl_opt_GetBoolean(go, "-g")) { status = esl_msaweight_GSC(msa); eslx_msafile_Write(ofp, msa, eslMSAFILE_STOCKHOLM); } else if (esl_opt_GetBoolean(go, "-p")) { status = esl_msaweight_PB(msa); eslx_msafile_Write(ofp, msa, eslMSAFILE_STOCKHOLM); } else if (esl_opt_GetBoolean(go, "-b")) { status = esl_msaweight_BLOSUM(msa, esl_opt_GetReal(go, "--id")); eslx_msafile_Write(ofp, msa, eslMSAFILE_STOCKHOLM); } else esl_fatal("internal error: no weighting algorithm selected"); if (status != eslOK) esl_fatal("Failed to calculate weights for msa %s", msa->name); esl_msa_Destroy(msa); } esl_alphabet_Destroy(abc); eslx_msafile_Close(afp); if (ofp != stdout) fclose(ofp); esl_getopts_Destroy(go); exit(0); } /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/miniapps/esl-weight.c $ * SVN $Id: esl-weight.c 732 2011-11-11 15:11:13Z eddys $ *****************************************************************/ hmmer-3.1b2/easel/miniapps/esl-alistat.itest.pl0000775361611702660230000003264312473612610021117 0ustar wheelerteddy#! /usr/bin/perl # Integrated test of the esl-alistat miniapp. # # Usage: ./esl-alistat.itest.pl # Example: ./esl-alistat.itest.pl ./esl-alistat foo # # EPN, Tue Feb 2 13:19:44 2010 $eslalistat= shift; $tmppfx = shift; if (! -x "$eslalistat") { die "FAIL: didn't find esl-alistat binary $eslalistat"; } open(ALIFILE, ">$tmppfx.stk") || die "FAIL: couldn't open $tmppfx.stk for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 seq1 aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg #=GR seq1 PP 5789**..**88...*9.9****88.7..776543210 seq2 ..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG.... #=GR seq2 PP ..********************************.... seq3 ..AAAA..AAAA...C...CCCCCC.C..GGGG-.... #=GR seq3 PP ..5555..4*44...3...888888.8..8899..... #=GC SS_cons ...............<...<<<<......>>>>>.... #=GC PP_cons ..789*..8877...8...****99.8..99998.... #=GC RF ..AAAA..AAAA...C...CCCCCC.c..GGGGG.... // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.dbl.stk") || die "FAIL: couldn't open $tmppfx.stk for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GS seq1 WT 1.5 #=GS seq2 WT 1.0 #=GS seq3 WT 0.5 seq1 aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg #=GR seq1 PP 5789**..**88...*9.9****88.7..776543210 seq2 ..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG.... #=GR seq2 PP ..********************************.... seq3 ..AAAA..AAAA...C...CCCCCC.C..GGGG-.... #=GR seq3 PP ..5555..4*44...3...888888.8..8899..... #=GC SS_cons ...............<...<<<<......>>>>>.... #=GC PP_cons ..789*..8877...8...****99.8..99998.... #=GC RF ..AAAA..AAAA...C...CCCCCC.c..GGGGG.... // # STOCKHOLM 1.0 seq1 aaA #=GR seq1 PP 578 seq2 ..A #=GR seq2 PP ..* #=GC SS_cons ... #=GC RF ..A // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.afa") || die "FAIL: couldn't open $tmppfx.afa for writing alifile"; print ALIFILE << "EOF"; >seq1 aaAAAA..AAAA...Cc.cCCCCCC.C..GGGGGgggg >seq2 ..AAAAa.AAAAaacCcccCCCCCCcCccGGGGG.... >seq3 ..AAAA..AAAA...C...CCCCCC.C..GGGG-.... EOF close ALIFILE; $output = `$eslalistat -h`; if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly"; } if ($output !~ /Usage: esl-alistat/) { die "FAIL: help output not right"; } # We do 2 runs of most tests, with and without --small $smallA[0] = ""; $smallA[1] = "--small --informat pfam"; for($pass = 0; $pass < 2; $pass++) { $pass2write = $pass+1; $output = `$eslalistat $smallA[$pass] --rna $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} if ($output !~ /Alignment length: 38/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($output !~ /Average length: 26.7/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($pass == 0) { if ($output !~ /Format: Stockholm/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($output !~ /Average identity: 93\%/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } } else { if ($output !~ /Format: Pfam/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } } $output = `$eslalistat $smallA[$pass] --dna $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} if ($output !~ /Alignment length: 38/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($output !~ /Average length: 26.7/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($pass == 0) { if ($output !~ /Format: Stockholm/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($output !~ /Average identity: 93\%/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } } else { if ($output !~ /Format: Pfam/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } } $output = `$eslalistat $smallA[$pass] --amino $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} if ($output !~ /Alignment length: 38/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($output !~ /Average length: 26.7/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($pass == 0) { if ($output !~ /Format: Stockholm/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($output !~ /Average identity: 93\%/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } } else { if ($output !~ /Format: Pfam/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } } if($pass == 0) { $output = `$eslalistat $smallA[$pass] --informat afa --rna $tmppfx.afa 2>&1`; if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} if ($output !~ /Format: aligned FASTA/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($output !~ /Alignment length: 38/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($output !~ /Average length: 26.7/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($output !~ /Average identity: 93\%/) { die "FAIL: alignments compared incorrectly on pass $pass2write"; } } $output = `$eslalistat $smallA[$pass] -1 --rna $tmppfx.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} if ($pass == 0) { if ($output !~ /Stockholm 3 38 80 20 31 26.7 93/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } } else { if ($output !~ /Pfam 3 38 80 26.7/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } } # test a file with 2 alignments $output = `$eslalistat $smallA[$pass] --rna $tmppfx.dbl.stk 2>&1`; if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} if ($output !~ /Alignment length: 38/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($output !~ /Average length: 26.7/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($output !~ /Alignment number: 2/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($output !~ /Average length: 2.0/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($pass == 0) { if ($output !~ /Format: Stockholm/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if ($output !~ /Average identity: 93\%/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } } else { if ($output !~ /Format: Pfam/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } } # test output file options system("$eslalistat --icinfo $tmppfx.ic $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null"); if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} $output = `cat $tmppfx.ic`; if($output !~ /5 9 1.0\d+ 2.0\d+/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if($output !~ /\# Alignment idx: 2/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } system("$eslalistat --rinfo $tmppfx.r $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null"); if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} $output = `cat $tmppfx.r`; if($output !~ /21 34 2.0 0.66\d+ 1.0 0.33\d+/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if($output !~ /\# Alignment idx: 2/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } system("$eslalistat --pcinfo $tmppfx.pc $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null"); if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} $output = `cat $tmppfx.pc`; if($output !~ /31\s+18\s+3.0\s+0.0\s+0.0\s+0.0\s+0.0\s+0.0\s+0.0\s+0.0\s+1.0\s+1.0\s+0.0\s+1.0\s+0.0\s+0.82\d+/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if($output !~ /\# Alignment idx: 2/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } system("$eslalistat --list $tmppfx.list $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null"); if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} $output = `cat $tmppfx.list`; if($output !~ /seq2.+seq2/s) { die "FAIL: alignment lists created incorrectly on pass $pass2write"; } if($output !~ /seq3/) { die "FAIL: alignment lists created incorrectly on pass $pass2write"; } if($pass == 0) { # these are incompatible with --small system("$eslalistat --psinfo $tmppfx.ps $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null"); if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} $output = `cat $tmppfx.ps`; if($output !~ /seq3 20 0 0 0 1 3 4 0 0 9 2 1 0.67\d+/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if($output !~ /seq2 1 0 0 0 0 0 0 0 0 0 0 1 0.97\d+/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } system("$eslalistat --iinfo $tmppfx.i $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null"); if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} $output = `cat $tmppfx.i`; if($output !~ /16\s+1.0\s+0.33\d+\s+2.0/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if($output !~ /\# Alignment idx: 2/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } system("$eslalistat --cinfo $tmppfx.c --noambig $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null"); if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} $output = `cat $tmppfx.c`; if($output !~ /3\s+3\.\d+\s+0\.\d+\s+0\.\d+\s+0/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if($output !~ /\# Alignment idx: 2/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } system("$eslalistat --bpinfo $tmppfx.bp $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null"); if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} $output = `cat $tmppfx.bp`; if($output !~ /16\s+34\s+0\s+0\s+0\s+0\s+0\s+0\s+2\s+0\s+0\s+0\s+0\s+0\s+0\s+0\s+0\s+0\s+/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if($output !~ /\# Alignment idx: 2/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } system("$eslalistat --weight --cinfo $tmppfx.c $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null"); if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} $output = `cat $tmppfx.c`; if($output !~ /2\s+1\.5\s+0\.\d+\s+0\.\d+\s+0/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if($output !~ /\# Alignment idx: 2/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } } system("$eslalistat --cinfo $tmppfx.c $smallA[$pass] --rna $tmppfx.dbl.stk > /dev/null"); if ($? != 0) { die "FAIL: esl-alistat failed unexpectedly";} $output = `cat $tmppfx.c`; if($output !~ /3\s+3\.\d+\s+0\.\d+\s+0\.\d+\s+0/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } if($output !~ /\# Alignment idx: 2/) { die "FAIL: alignment statistics calculated incorrectly on pass $pass2write"; } } print "ok\n"; unlink "$tmppfx.stk"; unlink "$tmppfx.afa"; unlink "$tmppfx.dbl.stk"; unlink "$tmppfx.i"; unlink "$tmppfx.ic"; unlink "$tmppfx.list"; unlink "$tmppfx.pc"; unlink "$tmppfx.ps"; unlink "$tmppfx.r"; unlink "$tmppfx.c"; exit 0; hmmer-3.1b2/easel/miniapps/esl-afetch.man0000664361611702660230000000434612473612610017715 0ustar wheelerteddy.TH "esl-afetch" 1 "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual" .SH NAME .TP esl-afetch - retrieve alignments from a multi-MSA database .SH SYNOPSIS .TP Single MSA retrieval: .B esl-afetch .I [options] .I msafile .I key .TP Multiple MSA retrieval: .B esl-afetch -f .I [options] .I msafile .I keyfile .TP Indexing an MSA file for retrieval: .B esl-afetch --index .I msafile .SH DESCRIPTION .B esl-afetch retrieves the alignment named .I key from an alignment database in file .I msafile. The .I msafile is a "multiple multiple alignment" file in Stockholm (e.g. native Pfam or Rfam) format. The .I key is either the name (ID) of the alignment, or its accession number (AC). .PP Alternatively, .B esl-afetch -f provides the ability to fetch many alignments at once. The .I -f option has it interpret the second argument as a , a file consisting of one name or accession per line. .PP The .I msafile should first be SSI indexed with .B esl-afetch --index for efficient retrieval. An SSI index is not required, but without one alignment retrieval may be painfully slow. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .B -f Interpret the second argument as a .I keyfile instead of as just one .I key. The .I keyfile contains one name or accession per line. This option doesn't work with the .B --index option. .TP .BI -o " " Output retrieved alignments to a file .I instead of to .I stdout. .TP .BI -O Output retrieved alignment to a file named .I . This is a convenience for saving some typing: instead of .B esl-afetch -o RRM_1 msafile RRM_1 you can just type .B esl-afetch -O msafile RRM_1. The .B -O option only works if you're retrieving a single alignment; it is incompatible with .B -f. .TP .B --index Instead of retrieving a .I key, the special command .B esl-afetch --index .I msafile produces an SSI index of the names and accessions of the alignments in the .I msafile. Indexing should be done once on the .I msafile to prepare it for all future fetches. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-compalign.itest.pl0000775361611702660230000001227212473612611021424 0ustar wheelerteddy#! /usr/bin/perl # Integrated test of the esl-compalign miniapp. # # Usage: ./esl-compalign.itest.pl # Example: ./esl-compalign.itest.pl ./esl-compalign foo # # EPN, Tue Feb 2 13:19:44 2010 $eslcompalign= shift; $tmppfx = shift; if (! -x "$eslcompalign") { die "FAIL: didn't find esl-compalign binary $eslcompalign"; } open(ALIFILE, ">$tmppfx.1") || die "FAIL: couldn't open $tmppfx.1 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GF AU Infernal 0.1 simpex-17 --AGA-CUUCGG---GCUCG-UAACAG #=GR simpex-17 PP ..885.*****9...9****.****** simpex-39 aaAAUACGUCGGCUG-AAUCACCAGUA #=GR simpex-39 PP ***************.67776899999 simpex-82 --ACGUUUUG-GAACGGG-U-CCA-CC #=GR simpex-82 PP ..****9998.88**888.5.898.9* #=GC SS_cons ..::<<<____>->>-<<-<.___>>> #=GC RF ..AAgaCUUCGGAucgggCg.AcAccc // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.2") || die "FAIL: couldn't open $tmppfx.2 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GF AU Infernal 0.1 simpex-17 ---AGACUUCGGG---CUCGUAACAG #=GR simpex-17 PP ...69*****775...4466777888 simpex-39 aaAAUACGUCGGCUGAAUCACCAGUA #=GR simpex-39 PP ************************** simpex-82 --ACGUUUUG-GAACGGGUC-C-ACC #=GR simpex-82 PP ..99998886.777755544.2.358 #=GC SS_cons ..:::::::::::::::::::::::: #=GC RF ..AAgACUUCGGAucggGCaAcAuUc // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.3") || die "FAIL: couldn't open $tmppfx.3 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GF AU Infernal 0.1 simpex-17 ~~~AGACUUCGGG---CUCGUAACAG #=GR simpex-17 PP ...69*****775...4466777888 simpex-39 aaAAUACGUCGGCUGAAUCACCAGUA #=GR simpex-39 PP ************************** simpex-82 --ACGUUUUG-GAACGGGUC-C-ACC #=GR simpex-82 PP ..99998886.777755544.2.358 #=GC SS_cons ..:::::::::::::::::::::::: #=GC RF ..AAgACUUCGGAucggGCaAcAuUc // EOF close ALIFILE; open(MASKFILE, ">$tmppfx.mask") || die "FAIL: couldn't open $tmppfx.mask for writing alifile"; print MASKFILE << "EOF"; 110111011011101110011101 EOF close MASKFILE; $output = `$eslcompalign -h`; if ($? != 0) { die "FAIL: esl-compalign failed unexpectedly"; } if ($output !~ /Usage: esl-compalign/) { die "FAIL: help output not right"; } $output = `$eslcompalign --rna $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-compalign failed unexpectedly";} if ($output !~ /simpex-17 20 16 \/ 20 \(0.80\d+\) 0 \/ 0 \(0.000\) 16 \/ 20 \(0.80\d+\)/) { die "FAIL: alignments compared incorrectly"; } if ($output !~ /\# \*all\* - 53 \/ 64 \(0.82\d+\) 2 \/ 3 \(0.66\d+\) 55 \/ 67 \(0.82\d+\)/) { die "FAIL: alignments compared incorrectly"; } $output = `$eslcompalign -c $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-compalign failed unexpectedly"; } if ($output !~ /18 1 \/ 3 \(0.33\d+\) 0 \/ 1 \(0.00\d+\) 1 \/ 4 \(0.25\d+\)/) { die "FAIL: alignments compared incorrectly."; } $output = `$eslcompalign -p $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-compalign failed unexpectedly"; } if ($output !~ /\* 23 \/ 29 \(0.79\d+\) 2 \/ 2 \(1.0\d+\)/) { die "FAIL: alignments compared incorrectly."; } $output = `$eslcompalign --p-mask $tmppfx.mask -p $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-compalign failed unexpectedly"; } if ($output !~ /\* 17 \/ 21 \(0.80\d+\) 2 \/ 2 \(1.00\d+\)/) { die "FAIL: alignments compared incorrectly."; } system("$eslcompalign -c --c2dfile $tmppfx.dfile $tmppfx.1 $tmppfx.2 > /dev/null"); if ($? != 0) { die "FAIL: esl-compalign failed unexpectedly"; } $output = `cat $tmppfx.dfile`; if ($output !~ /^0.000 0.33\d+ 0.000 0.000/) { die "FAIL: alignments compared incorrectly."; } #Test that esl-compalign can handle '~' characters annotating fragments, a la hmmbuild -O in hmmer3. $output = `$eslcompalign --rna $tmppfx.1 $tmppfx.3 2>&1`; if ($? != 0) { die "FAIL: esl-compalign failed unexpectedly";} if ($output !~ /simpex-17 20 16 \/ 20 \(0.80\d+\) 0 \/ 0 \(0.000\) 16 \/ 20 \(0.80\d+\)/) { die "FAIL: alignments compared incorrectly"; } if ($output !~ /\# \*all\* - 53 \/ 64 \(0.82\d+\) 2 \/ 3 \(0.66\d+\) 55 \/ 67 \(0.82\d+\)/) { die "FAIL: alignments compared incorrectly"; } print "ok\n"; unlink "$tmppfx.1"; unlink "$tmppfx.2"; unlink "$tmppfx.3"; unlink "$tmppfx.dfile"; unlink "$tmppfx.mask"; exit 0; hmmer-3.1b2/easel/miniapps/esl-selectn.man0000664361611702660230000000257112473612611020117 0ustar wheelerteddy.TH "esl-selectn" 1 "@EASEL_DATE@" "Easel @PACKAGE_VERSION@" "Easel miniapps" .SH NAME .TP esl-selectn - select random subset of lines from file .SH SYNOPSIS .B esl-selectn .I [options] .I nlines .I filename .SH DESCRIPTION .pp .B esl-selectn selects .I nlines lines at random from file .I filename and outputs them on .I stdout. .pp If .I filename is - (a single dash), input is read from .I stdin. .pp The algorithm used is efficient, requiring only a single pass through .I filename and memory storage proportional to .I nlines (and importantly, not to the size of .I filename itself). .B esl-selectn can therefore be used to create large scale statistical sampling experiments, especially in combination with other .I Easel miniapplications. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .BI --seed " " Set the random number seed to .I , an integer greater than 0. The default is to use the current value of .I time(). (As the return value of .I time() is likely to be in units of seconds, two calls to .B esl-selectn within the same second will generate exactly the same sample; this may not be what you want.) .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-ssdraw.man0000664361611702660230000007030612473612611017766 0ustar wheelerteddy.TH "esl-ssdraw" 1 "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual" .SH NAME .TP esl-ssdraw - create postscript secondary structure diagrams .SH SYNOPSIS .B esl-ssdraw .I [options] .I msafile .I postscript_template .I postscript_output_file .SH DESCRIPTION .pp .B esl-ssdraw reads an existing template consensus secondary structure diagram from .I postscript_template and creates new postscript diagrams including the template structure but with positions colored differently based on alignment statistics such as frequency of gaps per position, average posterior probability per position or information content per position. Additionally, all or some of the aligned sequences can be drawn separately, with nucleotides or posterior probabilities mapped onto the corresponding positions of the consensus structure. The alignment must be in Stockholm format with per-column reference annotation (#=GC RF). The sequences in the alignment must be RNA or DNA sequences. The .B postscript_template file must contain one page that includes consensus nucleotides (positions), where is the number of nongap characters in the reference (RF) annotation of the first alignment in .B msafile. The specific format required in the .B postscript_template is described below in the INPUT section. Postscript diagrams will only be created for the first alignment in .B msafile. .SH OUTPUT By default (if run with zero command line options), .B esl-ssdraw will create a six or seven page .I postscript_output_file, with each page displaying a different alignment statistic. These pages display the alignment consensus sequence, information content per position, mutual information per position, frequency of inserts per position, average length of inserts per position, frequency of deletions (gaps) per position, and average posterior probability per position (if posterior probabilites exist in the alignment) If .B -d is enabled, all of these pages plus additional ones, such as individual sequences (see discussion of .B.--indi below) will be drawn. These pages can be selected to be drawn individually by using the command line options .B --cons, .B --info, .B --mutinfo, .B --ifreq, .B --iavglen, .B --dall, and .B --prob. The calculation of the statistics for each of these options is discussed below in the description for each option. Importantly, only so-called 'consensus' positions of the alignment will be drawn. A consensus position is one that is a nongap nucleotide in the 'reference' annotation of the Stockholm alignment (#=GC RF) read from .B msafile. By default, a consensus sequence for the input alignment will be calculated and displayed on the alignment statistic diagrams. The consensus sequence is defined as the most common nucleotide at each consensus position of the alignment. The consensus sequence will not be displayed if the .B --no-cnt option is used. The .B --cthresh, .B --cambig, and .B --athresh options affect the definition of the consensus sequence as explained below in the descriptions for those options. If the .BI --tabfile " " option is used, a tab-delimited text file .I will be created that includes per-position lists of the numerical values for each of the calculated statistics that were drawn to .B postscript_output_file. Comment lines in .I are prefixed with a '#' character and explain the meaning of each of the tab-delimited columns and how each of the statistics was calculated. If .B --indi is used, .B esl-ssdraw will create diagrams showing each sequence in the alignment on a separate page, with aligned nucleotides in their corresponding position in the structure diagram. By default, basepaired nucleotides will be colored based on their basepair type: either Watson-Crick (A:U, U:A, C:G, or G:C), G:U or U:G, or non-canonical (the other ten possible basepairs). This coloring can be turned off with the .B --no-bp option. Also by default, nucleotides that differ from the most common nucleotide at each aligned consensus position will be outlined. If the most common nucleotide occurs in more than 75% of sequences that do not have a gap at that position, the outline will be bold. Outlining can be turned off with the .B --no-ol option. .PP With .B --indi, if the alignment contains posterior probability annotation (#=GR PP), the .B postscript_output_file will contain an additional page for each sequence drawn with positions colored by the posterior probability of each aligned nucleotide. No posterior probability pages will be drawn if the .B --no-pp option is used. .B esl-ssdraw can also be used to draw 'mask' diagrams which color positions of the structure one of two colors depending on if they are included or excluded by a mask. This is enabled with the .BI --mask-col " " option. .I must contain a single line of characters, where is the the number of nongap RF characters in the alignment. The line must contain only '0' and '1' characters. A '0' at position of the string indicates position is excluded from the mask, and a '1' indicates position is included by the mask. A page comparing the overlap of the .I mask from .BI --mask-col and another mask in .I will be created if the .BI --mask-diff " " option is used. If the .BI --mask " " option is used, positions excluded by the mask in .I will be drawn differently (as open circles by default) than positions included by the mask. The style of the masked positions can be modified with the .B --mask-u, .B --mask-x, and .B --mask-a options. Finally, two different types of input files can be used to customize output diagrams using the .B --dfile and .B --efile options, as described below. .SH INPUT The .B postscript_template_file is a postscript file that must be in a very specific format in order for .B esl-ssdraw to work. The specifics of the format, described below, are likely to change in future versions of .B esl-ssdraw. The .B postscript_output_file files generated by .B esl-ssdraw will not be valid .B postscript_template_file format (i.e. an output file from .B esl-ssdraw cannot be used as an .B postscript_template_file in a subsequent run of the program). An example .B postscript_template_file ('trna-ssdraw.ps') is included with the Easel distribution in the 'testsuite/' subdirectory of the top-level 'easel' directory. The .B postscript_template_file is a valid postscript file. It includes postscript commands for drawing a secondary structure. The commands specify x and y coordinates for placing each nucleotide on the page. The .B postscript_template_file might also contain commands for drawing lines connecting basepaired positions and tick marks indicating every tenth position, though these are not required, as explained below. If you are unfamiliar with the postscript language, it may be useful for you to know that a postscript page is, by default, 612 points wide and 792 points tall. The (0,0) coordinate of a postscript file is at the bottom left corner of the page, (0,792) is the top left, (612,0) is the bottom right, and (612,792) is the top right. .B esl-ssdraw uses 8 point by 8 point cells for drawing positions of the consensus secondary structure. The 'scale' section of the .B postscript_template_file allows for different 'zoom levels', as described below. Also, it is important to know that postscript lines beginning with '%' are considered comments and do not include postscript commands. An .B esl-ssdraw .B postscript_template_file contains n >= 1 pages, each specifying a consensus secondary structure diagram. Each page is delimited by a 'showpage' line in an 'ignore' section (as described below). .B esl-ssdraw will read all pages of the .B postscript_template_file and then choose the appropriate one that corresponds with the alignment in .B msafile based on the consensus (nongap RF) length of the alignment. For an alignment of consensus length , the first page of .B postscript_template_file that has a structure diagram with consensus length will be used as the template structure for the alignment. Each page of .B postscript_template_file contains blocks of text organized into seven different possible sections. Each section must begin with a single line '% begin ' and end with a single line '% end ' and have n >= 1 lines in between. On the begin and end lines, there must be at least one space between the '%' and the 'begin' or 'end'. must be one of the following: 'modelname', 'legend', 'scale', 'regurgitate', 'ignore', 'text positiontext', 'text nucleotides', 'lines positionticks', or 'lines bpconnects'. The n >=1 lines in between the begin and end lines of each section must be in a specific format that differs for each section as described below. Importantly, each page must end with an 'ignore' section that includes a single line 'showpage' between the begin and end lines. This lets .B esl-ssdraw know that a page has ended and another might follow. Each page of a .B postscript_template_file must include a single 'modelname' section. This section must include exactly one line in between its begin and end lines. This line must begin with a '%' character followed by a single space. The remainder of the line will be parsed as the model name and will appear on each page of .B postscript_output_file in the header section. If the name is more than 16 characters, it will be truncated in the output. Each page of a .B postscript_template_file must include a single 'legend' section. This section must include exactly one line in between its begin and end lines. This line must be formatted as '% ', where is an integer specifying the consensus position with relation to which the legend will be placed; and specify the x and y axis offsets for the top left corner of the legend relative to the x and y position of consensus position ; specifies the size of a cell in the legend and specifies how many extra points should be between the right hand edge of the legend and the end of the page. the offset of the right hand end of the legend . For example, the line '% 34 -40. -30. 12 0.' specfies that the legend be placed 40 points to the left and 30 points below the 34th consensus position, that cells appearing in the legend be squares of size 12 points by 12 points, and that the right hand side of the legend flush against the right hand edge of the printable page. Each page of a .B postscript_template_file must include a single 'scale' section. This section must include exactly one line in between its begin and end lines. This line must be formatted as ' scale', where and are both positive real numbers that are identical, for example '1.7 1.7 scale' is valid, but '1.7 2.7 scale' is not. This line is a valid postscript command which specifies the scale or zoom level on the pages in the output. If and are '1.0' the default scale is used for which the total size of the page is 612 points wide and 792 points tall. A scale of 2.0 will reduce this to 306 points wide by 396 points tall. A scale of 0.5 will increase it to 1224 points wide by 1584 points tall. A single cell corresponding to one position of the secondary structure is 8 points by 8 points. For larger RNAs, a scale of less than 1.0 is appropriate (for example, SSU rRNA models (about 1500 nt) use a scale of about 0.6), and for smaller RNAs, a scale of more than 1.0 might be desirable (tRNA (about 70 nt) uses a scale of 1.7). The best way to determine the exact scale to use is trial and error. Each page of a .B postscript_template_file can include n >= 0 'regurgitate' sections. These sections can include any number of lines. The text in this section will not be parsed by .B esl-ssdraw but will be included in each page of .B postscript_output_file. The format of the lines in this section must therefore be valid postscript commands. An example of content that might be in a regurgitate section are commands to draw lines and text annotating the anticodon on a tRNA secondary structure diagram. Each page of a .B postscript_template_file must include at least 1 'ignore' section. One of these sections must include a single line that reads 'showpage'. This section should be placed at the end of each page of the template file. Other ignore sections can include any number of lines. The text in these section will not be parsed by .B esl-ssdraw nor will it be included in each page of .B postscript_output_file. An ignore section can contain comments or postscript commands that draw features of the .B postscript_template_file that are unwanted in the .B postscript_output_file. Each page of a .B postscript_template_file must include a single 'text nucleotides' section. This section must include exactly lines, indicating that the consensus secondary structure has exactly nucleotide positions. Each line must be of the format '() moveto show' where is a nucleotide (this can be any character actually), and and are the coordinates specifying the location of the nucleotide on the page, they should be positive real numbers. The best way to determine what these coordinates should be is manually by trial and error, by inspecting the resulting structure as you add each nucleotide. Note that .B esl-ssdraw will color an 8 point by 8 point cell for each position, so nucleotides should be placed about 8 points apart from each other. Each page of a .B postscript_template_file may or may not include a single 'text positiontext' section. This section can include n >= 1 lines, each specifying text to be placed next to specific positions of the structure, for example, to number them. Each line must be of the format '() moveto show' where is a string of text to place at coordinates (,) of the postscript page. Currently, the best way to determine what these coordinates is manually by trial and error, by inspecting the resulting diagram as you add each line. Each page of a .B postscript_template_file may or may not include a single 'lines positionticks' section. This section can include n >= 1 lines, each specifying the location of a tick mark on the diagram. Each line must be of the format ' moveto show'. A tick mark (line of width 2.0) will be drawn from point (,) to point (,) on each page of .B postscript_output_file. Currently, the best way to determine what these coordinates should be is manually by trial and error, by inspecting the resulting diagram as you add each line. Each page of a .B postscript_template_file may or may not include a single 'lines bpconnects' section. This section must include lines, where is the number of basepairs in the consensus structure of the input .B msafile annotated as #=GC SS_cons. Each line should connect two basepaired positions in the consensus structure diagram. Each line must be of the format ' moveto show'. A line will be drawn from point (,) to point (,) on each page of .B postscript_output_file. Currently, the best way to determine what these coordinates should be is manually by trial and error, by inspecting the resulting diagram as you add each line. .SH REQUIRED MEMORY The memory required by .B esl-ssdraw will be equal to roughly the larger of 2 Mb and the size of the first alignment in .B msafile. If the .B --small option is used, the memory required will be independent of the alignment size. To use .B --small the alignment must be in Pfam format, a non-interleaved (1 line/seq) version of Stockholm format. If the .B --indi option is used, the required memory may exceed the size of the alignment by up to ten-fold, and the output .B postscript_output_file may be up to 50 times larger than the .B msafile. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .B -d Draw the default set of alignment summary diagrams: consensus sequence, information content, mutual information, insert frequency, average insert length, deletion frequency, and average posterior probability (if posterior probability annotation exists in the alignment). These diagrams are also drawn by default (if zero command line options are used), but using the .B -d option allows the user to add additional pages, such as individual aligned sequences with .B --indi. .TP .BI --mask " " Read the mask from file .I , and draw positions differently in .B postscript_output_file depending on whether they are included or excluded by the mask. .I must contain a single line of length with only '0' and '1' characters. is the number of nongap characters in the reference (#=GC RF) annotation of the first alignment in .B msafile A '0' at position of the mask indicates position is excluded by the mask, and a '1' indicates that position is included by the mask. .TP .B --small Operate in memory saving mode. Without .B --indi, required RAM will be independent of the size of the alignment in .B msafile. With .B --indi, the required RAM will be roughly ten times the size of the alignment in .B msafile. For .B --small to work, the alignment must be in Pfam Stockholm (non-interleaved 1 line/seq) format. .TP .B --rf Add a page to .B postscript_output_file showing the reference sequence from the #=GC RF annotation in .B msafile. By default, basepaired nucleotides will be colored based on what type of basepair they are. To turn this off, use .B --no-bp. This page is drawn by default (if zero command-line options are used). .TP .B --info Add a page to .B postscript_output_file with consensus (nongap RF) positions colored based on their information content from the alignment. Information content is calculated as 2.0 - H, where H = sum_x p_x log_2 p_x for x in {A,C,G,U}. This page is drawn by default (if zero command-line options are used). .TP .B --mutinfo Add a page to .B postscript_output_file with basepaired consensus (nongap RF) positions colored based on the amount of mutual information they have in the alignment. Mutual information is sum_{x,y} p_{x,y} log_2 ((p_x * p_y) / p_{x,y}, where x and y are the four possible bases A,C,G,U. p_x is the fractions of aligned sequences that have nucleotide x of in the left half (5' half) of the basepair. p_y is the fraction of aligned sequences that have nucleotide y in the position corresponding to the right half (3' half) of the basepair. And p_{x,y} is the fraction of aligned sequences that have basepair x:y. For all p_x, p_y and p{x,y} only sequences that that have a nongap nucleotide at both the left and right half of the basepair are counted. This page is drawn by default (if zero command-line options are used). .TP .B --ifreq Add a page to .B postscript_output_file with each consensus (nongap RF) position colored based on the fraction of sequences that span each position that have at least 1 inserted nucleotide after the position. A sequence s spans consensus position x that is actual alignment position a if s has at least one nongap nucleotide aligned to a position b <= a and at least one nongap nucleotide aligned to a consensus position c >= a. This page is drawn by default (if zero command-line options are used). .TP .B --iavglen Add a page to .B postscript_output_file with each consensus (nongap RF) position colored based on average length of insertions that occur after it. The average is calculated as the total number of inserted nucleotides after position x, divided by the number of sequences that have at least 1 inserted nucleotide after position x (so the minimum possible average insert length is 1.0). .TP .B --dall Add a page to .B postscript_output_file with each consensus (nongap RF) position colored based on the fraction of sequences that have a gap (delete) at the position. This page is drawn by default (if zero command-line options are used). .TP .B --dint Add a page to .B postscript_output_file with each consensus (nongap RF) position colored based on the fraction of sequences that have an internal gap (delete) at the position. An internal gap in a sequence is one that occurs after (5' of) the sequence's first aligned nucleotide and after (3' of) the sequence's final aligned nucleotide. This page is drawn by default (if zero command-line options are used). .TP .B --prob Add a page to .B postscript_output_file with positions colored based on average posterior probability (PP). The alignment must contain #=GR PP annotation for all sequences. PP annotation is converted to numerical PP values as follows: '*' = 0.975, '9' = 0.90, '8' = 0.80, '7' = 0.70, '6' = 0.60, '5' = 0.50, '4' = 0.40, '3' = 0.30, '2' = 0.20, '1' = 0.10, '0' = 0.025. This page is drawn by default (if zero command-line options are used). .TP .B --span Add a page to .B postscript_output_file with consensus (nongap RF) positions colored based on the fraction of sequences that 'span' the position. A sequence s spans consensus position x that is actual alignment position a if s has at least one nongap nucleotide aligned to a position b <= a and at least one nongap nucleotide aligned to a consensus position c >= a. This page is drawn by default (if zero command-line options are used). .SH OPTIONS FOR DRAWING INDIVIDUAL ALIGNED SEQUENCES .TP .B --indi Add a page displaying the aligned nucleotides in their corresponding consensus positions of the structure diagram for each aligned sequence in the alignment. By default, basepaired nucleotides will be colored based on what type of basepair they are. To turn this off, use .B --no-bp. If posterior probability information (#=GR PP) exists in the alignment, one additional page per sequence will be drawn displaying the posterior probabilities. .TP .B -f With .B --indi, force .B esl-ssdraw to create a diagram, even if it is predicted to be large (> 100 Mb). By default, if the predicted size exceeds 100 Mb, .B esl-ssdraw will fail with a warning. .SH OPTIONS FOR OMITTING PARTS OF THE DIAGRAMS .TP .BI --no-leg Omit the legend on all pages of .B postscript_output_file. .TP .BI --no-head Omit the header on all pages of .B postscript_output_file. .TP .BI --no-foot Omit the footer on all pages of .B postscript_output_file. .SH OPTIONS FOR SIMPLE TWO-COLOR MASK DIAGRAMS .TP .B --mask-col With .B --mask, .B postscript_output_file will contain exactly 1 page showing positions included by the mask as black squares, and positions excluded as pink squares. .TP .BI --mask-diff " " With .BI --mask " " and .B mask-col, .B postscript_output_file will contain one additional page comparing the mask from .I and the mask from .I . Positions will be colored based on whether they are included by one mask and not the other, excluded by both masks, and included by both masks. .SH EXPERT OPTIONS FOR CONTROLLING INDIVIDUAL SEQUENCE DIAGRAMS .TP .B --no-pp When used in combination with .B --indi, do not draw posterior probability structure diagrams for each sequence, even if the alignment has PP annotation. .TP .B --no-bp Do not color basepaired nucleotides based on their basepair type. .TP .B --no-ol When used in combination with .B --indi, do not outline nucleotides that differ from the majority rule consensus nucleotide given the alignment. .TP .B --no-ntpp When used in combination with .B --indi, do not draw nucleotides on the individual sequence posterior probability diagrams. .SH EXPERT OPTIONS RELATED TO CONSENSUS SEQUENCE DEFINITION .TP .B --no-cnt Do not draw consensus nucleotides on alignment statistic diagrams (such as information content diagrams). By default, the consensus nucleotide is defined as the most frequent nucleotide in the alignment at the corresponding position. Consensus nucleotides that occur in at least .I fraction of the aligned sequences (that do not contain a gap at the position) are capitalized. By default .I is 0.75, but can be changed with the .BI --cthresh " " option. .TP .BI --cthresh " " Specify the threshold for capitalizing consensus nucleotides defined by the majority rule (i.e. when .B --cambig is not enabled) as .I . .TP .B --cambig Change how consensus nucleotides are calculated from majority rule to the least ambiguous IUPAC nucleotide that represents at least .I fraction of the nongap nucleotides at each consensus position. By default .I is 0.9, but can be changed with the .BI --athresh " " option. .TP .BI --athresh " " With .B --cambig, specify the threshold for defining consensus nucleotides is the least ambiguous IUPAC nucleotide that represents at least .I fraction of the nongap nucleotides at each position. .SH EXPERT OPTIONS CONTROLLING STYLE OF MASKING POSITIONS .TP .B --mask-u With .B --mask, change the style of masked columns to squares. .TP .B --mask-x With .B --mask, change the style of masked columns to 'x's .TP .B --mask-a With .B --mask and .B --mask-u or .B --mask-x draw the alternative style of square or 'x' masks .SH EXPERT OPTIONS RELATED TO INPUT FILES .TP .BI --dfile " " Read the 'draw file' .I which specifies numerical values for each consensus position in one or more postscript pages. For each page, the draw file must include +3 lines ( is defined in the DESCRIPTION section). The first three lines are special. The following 'value lines' each must contain a single number, the numerical value for the corresponding position. The first of the three special lines defines the 'description' for the page. This should be text that describes what the numerical values refer to for the page. The maximum allowable length is roughly 50 characters (the exact maximum length depends on the template file and the program will report an informative error message upon execution if it is exceeded). The second special line defines the 'legend header' line that which will appear immediately above the legend. It has a maximum allowable length of about 30 characters. The third special line per page must contain exactly 7 numbers, which must be in increasing order, each separated by a space. These numbers define the numerical ranges for the six different colors used to draw the consensus positions on the page. The first number defines the minimum value for the first color (blue) and must be less than or equal to the minimum value from the value lines. The second number defines the minimum value for the second color (turquoise). The third, fourth, fifth and sixth numbers define the minimum values for the third, fourth, fifth and sixth colors (light green, yellow, orange, red), and the seventh final number defines the maximum value for red and must be equal to or greater than the maximum value from the value lines. After the value lines, there must exist a special line with only '//', signifying the end of a page. The draw file .I must end with this special '//' line, even if it only includes a single page. A draw file specifying pages should include exactly * ( + 4) lines. .TP .BI --efile " " Read the 'expert draw file' .I which specifies the colors and nucleotides to draw on each consensus position in one or more postscript pages. Unlike with the .B --dfile option, no legend will be drawn when .B --efile is used. For each page, the draw file must include lines, each with four or five tab-delimited tokens. The first four tokens on line specify the color to paint position and must be real numbers between 0 and 1. The four numbers specify the cyan, magenta, yellow and black values, respectively, in the CMYK color scheme for the postscript file. The fifth token on line specifies which nucleotide to write on position (on top of the colored background). If the fifth token does not exist, no nucleotide will be written. After the lines, there must exist a special line with only '//', signifying the end of a page. The expert draw file .I must end with this special '//' line, even if it only includes a single page. A expert draw file specifying pages should include exactly * ( + 1) lines. .TP .BI --ifile " " Read insert information from the file .I , which may have been created with INFERNAL's .B cmalign program. The insert information in .B msafile will be ignored and the information from .I will supersede it. Inserts are columns that are gaps in the reference (#=GC RF) annotation. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/miniapps/esl-alimerge.itest.pl0000775361611702660230000003366312473612610021246 0ustar wheelerteddy#! /usr/bin/perl # Integrated test of esl-alimerge miniapp. # # Usage: ./esl-alimerge.itest.pl # Example: ./esl-alimerge.itest.pl ./esl-alimerge foo # # EPN, Wed Nov 25 11:23:55 2009 $eslalimerge = shift; $tmppfx = shift; if (! -x "$eslalimerge") { die "FAIL: didn't find esl-alimerge binary $eslalimerge"; } open(ALIFILE, ">$tmppfx.1") || die "FAIL: couldn't open $tmppfx.1 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 seq1 aaAAAA.AAAA...Cc.cCCCCCC.C..GGGGGgggg seq2 ..AAAAaAAAAaacCcccCCCCCCcCccGGGGG.... #=GC RF ..AAAA.AAAA...C...CCCCCC.c..GGGGG.... // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.2") || die "FAIL: couldn't open $tmppfx.2 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GS seq3 DE sequence 3 is the best! seq3 AAAAA..AAA.....CCC..CCCC....c..G..GG..GG. seq4 AAAAAaaAAAaccccC-CccCCCCccccccgGggGGggGGg #=GC RF AAAAA..AAA.....CCC..CCCC~...c..G..GG..GG. // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.3") || die "FAIL: couldn't open $tmppfx.3 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GS seq5 DE kachow seq5 AAAAA..AAA.....CCC..CCCC....c..G..GG..GG. seq6 AAAAAaaAAAaccccC-CccCCCCccccccgGggGGggGGg #=GC RF AAAAA..AAA.....CCC..CCCC~~..c..G..GG..GG. // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.4") || die "FAIL: couldn't open $tmppfx.4 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 #=GS seq5 DE kachow seq5 ~~~AAAAA..AAA.....CCC..CCCC....c..G..GG..GG~~~~ seq6 ...AAAAAaaAAAaccccC-CccCCCCccccccgGggGGggGGgggg #=GC RF ...AAAAA..AAA.....CCC..CCCC~~..c..G..GG..GG.... // EOF close ALIFILE; open(ALIFILE, ">$tmppfx.5") || die "FAIL: couldn't open $tmppfx.5 for writing alifile"; print ALIFILE << "EOF"; # STOCKHOLM 1.0 seq7 ~CAAAA..AAA.....CCC..CCCC....c..G..GG..GC~ seq8 .CAAAAaaAAAaccccC-CccCCCCccccccgGggGGggGGg #=GC RF .AAAAA..AAA.....CCC..CCCC~~..c..G..GG..GG. // EOF close ALIFILE; open(LISTFILE, ">$tmppfx.list") || die "FAIL: couldn't open $tmppfx.list for writing list file"; print LISTFILE "$tmppfx.2\n"; print LISTFILE "$tmppfx.1\n"; print LISTFILE "$tmppfx.3\n"; close LISTFILE; $output = `$eslalimerge -h`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /Usage: esl-alimerge/) { die "FAIL: help output not right"; } $output = `$eslalimerge --rna $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } $output = `$eslalimerge --dna $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } $output = `$eslalimerge --amino $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } $output = `$eslalimerge --rna --list $tmppfx.list 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccc\.cccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } system("$eslalimerge --rna -o $tmppfx.out $tmppfx.1 $tmppfx.2 > /dev/null"); if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } $output = `cat $tmppfx.out`; if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } system("$eslalimerge --rna -v -o $tmppfx.out $tmppfx.1 $tmppfx.2 > /dev/null"); if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } # don't worry about checking verbose output printed to stdout $output = `cat $tmppfx.out`; if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } $output = `cat $tmppfx.out`; $output = `$eslalimerge --rna --outformat pfam $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } $output = `$eslalimerge --rna --outformat a2m $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /aaAAAAAAAACccCCCCCCCGGGGGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /AAAAAaaAAAaccccC-CccCCCCccccCcgGggGGggGGg/) { die "FAIL: alignments merged incorrectly"; } $output = `$eslalimerge --rna --outformat psiblast $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /aaAAAA-A--AAA-----Cc-cCC--CCCC----C--G--GG--GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /--AAAA-AaaAAAaccccC----CccCCCCccccCcgGggGGggGGg---/) { die "FAIL: alignments merged incorrectly"; } $output = `$eslalimerge --rna --outformat afa $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } $output = `$eslalimerge --rna --rfonly $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /AAAAAAAACCCCCCCCGGGGG/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /AAAAAAAAC\-CCCCCcGGGGG/) { die "FAIL: alignments merged incorrectly"; } # test that hmmer3 fragment annotation is correctly handled (this WILL NOT WORK currently with --small!) $output = `$eslalimerge --rna $tmppfx.4 $tmppfx.5 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /~~~CAAAA..AAA.....CCC..CCCC....c..G..GG..GC~~~/) { die "FAIL: alignments merged incorrectly"; } # repeat all the same tests (except a2m and psiblast output) but now in small memory mode $output = `$eslalimerge --small --rna $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } $output = `$eslalimerge --small --dna $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } $output = `$eslalimerge --small --amino $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } $output = `$eslalimerge --small --rna --list $tmppfx.list 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccc\.cccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } system("$eslalimerge --small --rna -o $tmppfx.out $tmppfx.1 $tmppfx.2 > /dev/null"); if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } $output = `cat $tmppfx.out`; if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } system("$eslalimerge --small --rna -v -o $tmppfx.out $tmppfx.1 $tmppfx.2 > /dev/null"); if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } # don't worry about checking verbose output printed to stdout $output = `cat $tmppfx.out`; if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } $output = `cat $tmppfx.out`; $output = `$eslalimerge --small --rna --outformat pfam $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /aaAAAA\.A\.\.AAA\.\.\.\.\.Cc\.cCC\.\.CCCC\.\.\.\.C\.\.G\.\.GG\.\.GGgggg/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /\.\.AAAA\.AaaAAAaccccC\.\.\.\-CccCCCCccccccgGggGGggGGg\.\.\./) { die "FAIL: alignments merged incorrectly"; } $output = `$eslalimerge --small --rna --rfonly $tmppfx.1 $tmppfx.2 2>&1`; if ($? != 0) { die "FAIL: esl-alimerge failed unexpectedly"; } if ($output !~ /sequence 3 is the best/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /AAAAAAAACCCCCCCCGGGGG/) { die "FAIL: alignments merged incorrectly"; } if ($output !~ /AAAAAAAAC\-CCCCCcGGGGG/) { die "FAIL: alignments merged incorrectly"; } print "ok\n"; unlink "$tmppfx.1"; unlink "$tmppfx.2"; unlink "$tmppfx.3"; unlink "$tmppfx.4"; unlink "$tmppfx.5"; unlink "$tmppfx.list"; unlink "$tmppfx.out"; exit 0; hmmer-3.1b2/easel/miniapps/esl-alimanip.man0000664361611702660230000001731112473612610020251 0ustar wheelerteddy.TH "esl-alimanip" 1 "@RELEASEDATE@" "@PACKAGE@ @RELEASE@" "@PACKAGE@ Manual" .SH NAME .TP esl-alimanip - manipulate a multiple sequence alignment .SH SYNOPSIS .B esl-alimanip .I [options] .I msafile .SH DESCRIPTION .pp .B esl-alimanip can manipulate the multiple sequence alignment(s) in .I msafile in various ways. Options exist to remove specific sequences, reorder sequences, designate reference columns using Stockholm "#=GC RF" markup, and add annotation that numbers columns. The alignments can be of protein or DNA/RNA sequences. All alignments in the same .I msafile must be either protein or DNA/RNA. The alphabet will be autodetected unless one of the options .I --amino, .I --dna, or .I --rna are given. .SH OPTIONS .TP .B -h Print brief help; includes version number and summary of all options, including expert options. .TP .BI -o " " Save the resulting, modified alignment in Stockholm format to a file .I . The default is to write it to standard output. .TP .BI --informat " " Specify that the input alignment be format .I . At preset, the only valid choices for .I are: 'stockholm', 'pfam', and 'afa'. 'pfam' is a special case of Stockholm format in which each sequence is placed on a single line, instead of being interleaved; 'afa' is aligned FASTA. By default alignments are assumed to be in Stockholm format (either interleaved or Pfam). .TP .BI --outformat " " Specify that the output alignment be format .I . Choices for .I are: 'stockholm', 'pfam', 'a2m', 'psiblast', 'afa'. By default the alignment is output in interleaved Stockholm format. .TP .B --devhelp Print help, as with .B "-h", but also include undocumented developer options. These options are not listed below, are under development or experimental, and are not guaranteed to even work correctly. Use developer options at your own risk. The only resources for understanding what they actually do are the brief one-line description printed when .B "--devhelp" is enabled, and the source code. .SH EXPERT OPTIONS .TP .BI --lnfract " " Remove any sequences with length less than .I fraction the length of the median length sequence in the alignment. .TP .BI --lxfract " " Remove any sequences with length more than .I fraction the length of the median length sequence in the alignment. .TP .BI --lmin " " Remove any sequences with length less than .I residues. .TP .BI --lmax " " Remove any sequences with length more than .I residues. .TP .BI --detrunc " " Remove any sequences that have all gaps in the first .I non-gap #=GC RF columns or the last .I non-gap #=GC RF columns. .TP .BI --xambig " " Remove any sequences that has more than .I ambiguous (degenerate) residues. .TP .BI --seq-r " " Remove any sequences with names listed in file .I . Sequence names listed in .I can be separated by tabs, new lines, or spaces. The file must be in Stockholm format for this option to work. .TP .BI --seq-k " " Keep only sequences with names listed in file .I . Sequence names listed in .I can be separated by tabs, new lines, or spaces. By default, the kept sequences will remain in the original order they appeared in .I msafile, but the order from .I will be used if the .B --k-reorder option is enabled. The file must be in Stockholm format for this option to work. .TP .BI --small With .B --seq-k or .B --seq-r, operate in small memory mode. The alignment(s) will not be stored in memory, thus .B --seq-k and .B --seq-r will be able to work on very large alignments regardless of the amount of available RAM. The alignment file must be in Pfam format and .BI --informat " pfam" and one of .B --amino, .B --dna, or .B --rna must be given as well. .TP .BI --k-reorder With .BI --seq-k " ", reorder the kept sequences in the output alignment to the order from the list file .I . .TP .BI --seq-ins " " Keep only sequences that have at least 1 inserted residue after nongap RF position .I . .TP .BI --seq-ni " " With .B --seq-ins require at least .I inserted residues in a sequence for it to be kept. .TP .BI --seq-xi " " With .B --seq-ins allow at most .I inserted residues in a sequence for it to be kept. .TP .BI --trim " " File .I is an unaligned FASTA file containing truncated versions of each sequence in the .I msafile. Trim the sequences in the alignment to match their truncated versions in .I . If the alignment output format is Stockholm (the default output format), all per-column (GC) and per-residue (GR) annotation will be removed from the alignment when .B --trim is used. However, if .B --t-keeprf is also used, the reference annotation (GC RF) will be kept. .TP .B --t-keeprf Specify that the 'trimmed' alignment maintain the original reference (GC RF) annotation. Only works in combination with .B --trim. .TP .BI --minpp " " Replace all residues in the alignments for which the posterior probability annotation (#=GR PP) is less than .I with gaps. The PP annotation for these residues is also converted to gaps. .I must be greater than 0.0 and less than or equal to 0.95. .TP .BI --tree " " Reorder sequences by tree order. Perform single linkage clustering on the sequences in the alignment based on sequence identity given the alignment to define a 'tree' of the sequences. The sequences in the alignment are reordered according to the tree, which groups similar sequences together. The tree is output in Newick format to .I . .TP .BI --reorder " " Reorder sequences to the order listed in file .I . Each sequence in the alignment must be listed in .I . Use .B --k-reorder to reorder only a subset of sequences to a subset alignment file. The file must be in Stockholm format for this option to work. .TP .BI --mask2rf " " Read in the 'mask' file .I and use it to define new #=GC RF annotation for the alignment. .I must be a single line, with exactly .I or .I characters, either the full alignment length or the number of nongap #=GC RF characters, respectively. Each character must be either a '1' or a '0'. The new #=GC RF markup will contain an 'x' for each column that is a '1' in lane mask file, and a '.' for each column that is a '0'. If the mask is of length .I then it is interpreted as applying to only nongap RF characters in the existing RF annotation, all gap RF characters will remain gaps and nongap RF characters will be redefined as above. .TP .BI --m-keeprf With .B --mask2rf, do not overwrite existing nongap RF characters that are included by the input mask as 'x', leave them as the character they are. .TP .BI --num-all Add annotation to the alignment numbering all of the columns in the alignment. .TP .BI --num-rf Add annotation to the alignment numbering the non-gap (non '.') #=GC RF columns of the alignment. .TP .BI --rm-gc " " Remove certain types of #=GC annotation from the alignment. .I "" must be either "RF", "SS_cons", "SA_cons", or "PP_cons", at present. .TP .BI --sindi Annotate individual secondary structures for each sequence by imposing the consensus secondary structure defined by the #=GC SS_cons annotation. .TP .BI --post2pp Update Infernal's cmalign 0.72-1.0.2 posterior probability "POST" annotation to "PP" annotation, which is read by other miniapps, including .B esl-alimask and .B esl-alistat. .TP .B --amino Assert that the .I msafile contains protein sequences. .TP .B --dna Assert that the .I msafile contains DNA sequences. .TP .B --rna Assert that the .I msafile contains RNA sequences. .SH AUTHOR Easel and its documentation are @EASEL_COPYRIGHT@. @EASEL_LICENSE@. See COPYING in the source code distribution for more details. The Easel home page is: @EASEL_URL@ hmmer-3.1b2/easel/esl_scorematrix.h0000664361611702660230000001010412473612607016734 0ustar wheelerteddy/* Routines for manipulating sequence alignment score matrices. */ #ifndef eslSCOREMATRIX_INCLUDED #define eslSCOREMATRIX_INCLUDED #include "esl_alphabet.h" #include "esl_fileparser.h" #include "esl_dmatrix.h" /* ESL_SCOREMATRIX: * allocation is in one array in s[0]. * * i,j can range from 0..Kp-1, including all characters valid in the alphabet. * Only values for 0..K-1 (canonical alphabet) are mandatory. */ typedef struct { int **s; /* s[i][j] is the score of aligning residue i,j; i,j range 0..Kp-1 */ int K; /* size of base alphabet (duplicate of S->abc_r->K) */ int Kp; /* full size of s[][], including degeneracies (duplicate of S->abc_r->Kp) */ /* bookkeeping for degenerate residues */ char *isval; /* array 0..Kp-1: which residues of alphabet have valid scores in S. */ const ESL_ALPHABET *abc_r; /* reference to the alphabet: includes K, Kp, and sym order */ /* bookkeeping that lets us output exactly the residue order we read in a matrix file */ int nc; /* number of residues with scores (inclusive of *, if present) */ char *outorder; /* NUL-terminated string 0..nc-1 giving order of residues in col/row labels */ char *name; /* optional: name of score matrix; or NULL */ char *path; /* optional: full path to file that score matrix was read from; or NULL */ } ESL_SCOREMATRIX; /* 1. The ESL_SCOREMATRIX object. */ extern ESL_SCOREMATRIX *esl_scorematrix_Create(const ESL_ALPHABET *abc); extern int esl_scorematrix_Copy(const ESL_SCOREMATRIX *src, ESL_SCOREMATRIX *dest); extern ESL_SCOREMATRIX *esl_scorematrix_Clone(const ESL_SCOREMATRIX *S); extern int esl_scorematrix_Compare(const ESL_SCOREMATRIX *S1, const ESL_SCOREMATRIX *S2); extern int esl_scorematrix_CompareCanon(const ESL_SCOREMATRIX *S1, const ESL_SCOREMATRIX *S2); extern int esl_scorematrix_Max(const ESL_SCOREMATRIX *S); extern int esl_scorematrix_Min(const ESL_SCOREMATRIX *S); extern int esl_scorematrix_IsSymmetric(const ESL_SCOREMATRIX *S); extern int esl_scorematrix_ExpectedScore(ESL_SCOREMATRIX *S, double *fi, double *fj, double *ret_E); extern int esl_scorematrix_RelEntropy(const ESL_SCOREMATRIX *S, const double *fi, const double *fj, double lambda, double *ret_D); extern int esl_scorematrix_JointToConditionalOnQuery(const ESL_ALPHABET *abc, ESL_DMATRIX *P); extern void esl_scorematrix_Destroy(ESL_SCOREMATRIX *S); /* 2. Some classic score matrices */ extern int esl_scorematrix_Set(const char *name, ESL_SCOREMATRIX *S); extern int esl_scorematrix_SetIdentity(ESL_SCOREMATRIX *S); /* 3. Deriving a score matrix probabilistically */ extern int esl_scorematrix_SetFromProbs(ESL_SCOREMATRIX *S, double lambda, const ESL_DMATRIX *P, const double *fi, const double *fj); extern int esl_scorematrix_SetWAG(ESL_SCOREMATRIX *S, double lambda, double t); /* 4. Reading/writing score matrices. */ extern int esl_scorematrix_Read(ESL_FILEPARSER *efp, const ESL_ALPHABET *abc, ESL_SCOREMATRIX **ret_S); extern int esl_scorematrix_Write(FILE *fp, const ESL_SCOREMATRIX *S); /* 5. Implicit probabilistic basis, I: given bg. */ extern int esl_scorematrix_ProbifyGivenBG(const ESL_SCOREMATRIX *S, const double *fi, const double *fj, double *opt_lambda, ESL_DMATRIX **opt_P); /* 6. Implicit probabilistic basis, II: bg unknown. */ extern int esl_scorematrix_Probify(const ESL_SCOREMATRIX *S, ESL_DMATRIX **opt_P, double **opt_fi, double **opt_fj, double *opt_lambda); #endif /*eslSCOREMATRIX_INCLUDED*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. *****************************************************************/ hmmer-3.1b2/easel/esl_sqio.tex0000664361611702660230000003076512473612607015737 0ustar wheelerteddyThe \eslmod{sqio} module contains routines for input from unaligned sequence data files, such as FASTA files. Several different common sequence file formats are understood, and can be automatically recognized. Sequences can be read sequentially from multiple sequence alignment files, as if the MSA file was an unaligned sequence file, when the module is augmented with the \eslmod{msa} module. Sequences can be read from normal files, directly from the \ccode{stdin} pipe, or from \ccode{gzip}-compressed files. Sequences can be read from NCBI BLAST database files. Sequence files can be automatically looked for in a list of one or more database directories, specified by an environment variable (such as \ccode{BLASTDB}). Table~\ref{tbl:sqio_api} lists the functions in the \eslmod{sqio} API. The module uses an \ccode{ESL\_SQFILE} object which works much like an ANSI C \ccode{FILE}, maintaining information for an open sequence file while it's being read. % Table generated by autodoc -t esl_sqio.c (so don't edit here, edit esl_sqio.c:) \begin{table}[hbp] \begin{center} {\small \begin{tabular}{|ll|}\hline \apisubhead{The \ccode{ESL\_SQFILE} object.}\\ \hyperlink{func:esl_sqfile_Open()}{\ccode{esl\_sqfile\_Open()}} & Description.\\ \hyperlink{func:esl_sqfile_Close()}{\ccode{esl\_sqfile\_Close()}} & Description.\\ \apisubhead{Sequence input/output}\\ \hyperlink{func:esl_sqio_Read()}{\ccode{esl\_sqio\_Read()}} & Description.\\ \hyperlink{func:esl_sqio_Write()}{\ccode{esl\_sqio\_Write()}} & Description.\\ \hyperlink{func:esl_sqio_Echo()}{\ccode{esl\_sqio\_Echo()}} & Echo the next sequence record onto output stream\\ \hyperlink{func:esl_sqio_GuessFileFormat()}{\ccode{esl\_sqioGuessFileFormat()}} & Description.\\ \hyperlink{func:esl_sqio_EncodeFormat()}{\ccode{esl\_sqio\_EncodeFormat()}} & Description.\\ \hyperlink{func:esl_sqio_DecodeFormat()}{\ccode{esl\_sqio\_DecodeFormat()}} & Returns descriptive string for file format code.\\ \hyperlink{func:esl_sqio_IsAlignment()}{\ccode{esl\_sqio\_IsAlignment()}} & Description.\\ \hyperlink{func:esl_sqio_PositionByKey()}{\ccode{esl\_sqio\_PositionByKey()}} & Description.\\ %\hyperlink{func:esl_sqio_Rewind()}{\ccode{esl\_sqio\_Rewind()}} & Description.\\ \hyperlink{func:esl_sqfile_GuessAlphabet()}{\ccode{esl\_sqfile\_GuessAlphabet()}} & Guess the alphabet of an open \ccode{ESL\_SQFILE}\\ \apisubhead{Fast random access in a seqfile [with SSI augmentation]}\\ \hyperlink{func:esl_sqfile_OpenSSI()}{\ccode{esl\_sqfile\_OpenSSI()}} & Opens an SSI index associated with a seq file.\\ \hyperlink{func:esl_sqfile_PositionByKey()}{\ccode{esl\_sqfile\_PositionByKey()}} & Use SSI to reposition seq file to a particular sequence.\\ \hyperlink{func:esl_sqfile_PositionByNumber()}{\ccode{esl\_sqfile\_PositionByNumber()}} & Use SSI to reposition by sequence number\\ \hline \end{tabular} } \end{center} \caption{The \eslmod{sqio} API.} \label{tbl:sqio_api} \end{table} \subsection{Example: reading sequences from a file} Figure~\ref{fig:sqio_example} shows a program that opens a file, reads sequences from it one at a time, then closes the file. \begin{figure} \input{cexcerpts/sqio_example} \caption{Example of reading sequences from a file.} \label{fig:sqio_example} \end{figure} A FASTA file named \ccode{seqfile} is opened for reading by calling \ccode{esl\_sqfile\_Open(filename, format, env, \&sqfp)}, which creates a new \ccode{ESL\_SQFILE} and returns it through the \ccode{sqfp} pointer. If the \ccode{format} is passed as \ccode{eslSQFILE\_UNKNOWN}, then the format of the file is autodetected; here, we bypass autodetection by asserting that the file is in FASTA format by passing a \ccode{eslSQFILE\_FASTA} code. (See below for a list of valid codes and formats.) The optional \ccode{env} argument is described below too; here, we're passing \ccode{NULL} and not using it. Several things can go wrong in trying to open a sequence file that are beyond the control of Easel or your application, so it's important that you check the return code. \ccode{esl\_sqfile\_Open()} returns \ccode{eslENOTFOUND} if the file can't be opened; \ccode{eslEFORMAT} if the file is empty, or if autodetection can't determine its format; and \ccode{eslEINVAL} if you try to autodetect format on an input stream that can't be autodetected (a nonrewindable stream: see below for info about reading from \ccode{stdin} and compressed files). (Additionally, an internal error might be thrown, which you should check for if you installed a nonfatal error handler). The file is then read one sequence at a time by calling \ccode{esl\_sq\_Read(sqfp, sq)}. This function returns \ccode{eslOK} if it read a new sequence, and leaves that sequence in the \ccode{sq} object that the caller provided. When there is no more data in the file, \ccode{esl\_sq\_Read()} returns \ccode{eslEOF}. If at any point the file does not appear to be in the proper format, \ccode{esl\_sq\_Read()} returns \ccode{eslEFORMAT}. The application must check for this. The API provides a little information about what went wrong and where. \ccode{sqfp->filename} is the name of the file that we were parsing (not necessarily the same as \ccode{seqfile}; \ccode{sqfp->filename} can be a full pathname if we used an \ccode{env} argument to look for \ccode{seqfile} in installed database directories). The function \ccode{esl\_sqfile\_GetErrorBuf} should be called to get a pointer to the generated error message. The buffer is a brief explanatory message that gets filled in when a \ccode{eslEFORMAT} error occurs. \footnote{Unlike in the MSA module, you don't get access to the current line text; some of sqio's parsers use fast block-based (\ccode{fread()}) input instead of line-based input.} We can reuse the same \ccode{ESL\_SQ} object for subsequent sequences by calling \ccode{esl\_sq\_Reuse()} on it when we're done with the previous sequence. If we wanted to load a set of sequences, we'd \ccode{\_Create()} an array of \ccode{ESL\_SQ} objects. Finally, to clean up properly, a \ccode{ESL\_SQ} that was created is destroyed with \ccode{esl\_sq\_Destroy(sq)}, and a \ccode{ESL\_SQFILE} is closed with \ccode{esl\_sqfile\_Close()}. \subsection{Accepted formats} Accepted unaligned sequence file formats (and their Easel format codes) are: \begin{tabular}{ll} \ccode{eslSQFILE\_DDBJ} & DDBJ flat text DNA database format \\ \ccode{eslSQFILE\_EMBL} & EMBL flat text DNA database format \\ \ccode{eslSQFILE\_FASTA} & FASTA format \\ \ccode{eslSQFILE\_GENBANK} & GenBank flat text DNA database format \\ \ccode{eslSQFILE\_UNIPROT} & UniProt flat text protein database format \\ \ccode{eslSQFILE\_NCBI} & NCBI BLAST database format version 4 \\ \end{tabular} Additionally, the code \ccode{eslSQFILE\_UNKNOWN} is recognized. It tells \ccode{esl\_sqfile\_Open()} to perform format autodetection. \subsection{Special input streams: stdin and compressed files} There are two special cases for input files. The module can read sequence input from a stdin pipe. If the \ccode{seqfile} argument is ``-'', \ccode{esl\_sqfile\_Open()} ``opens'' standard input (really, it just associates \ccode{stdin}, which is always open, with the \ccode{ESL\_SQFILE}). The module can read compressed sequence files. If the \ccode{seqfile} argument to \ccode{esl\_sqfile\_Open()} ends in \ccode{.gz}, the file is assumed to be compressed with \ccode{gzip}; instead of opening it normally, \ccode{esl\_sqfile\_Open()} opens it as a pipe from \ccode{gzip -dc}. Your system must support pipes to use this - specifically, it must support the \ccode{popen()} system call (POSIX.2 compliant operating systems do). The \ccode{configure} script automatically checks this at compile-time and defines \ccode{HAVE\_POPEN} appropriately. Obviously, the user must also have \ccode{gzip} installed and in his PATH. For both special cases, the catch is that you can't use format autodetection; you must provide a valid known format code when you read from stdin or from a compressed file. Pipes are not rewindable, and format autodetection relies on a two-pass algorithm: it reads partway into the file to determine the format, then rewinds to start parsing for real. \subsection{Augmentations} The sqio module is optionally augmented by up to two additional modules, as follows: \subsubsection{msa: read unaligned sequences sequentially from an alignment} If sqio is augmented with the msa module, then the sqio API gains the ability to read alignment file formats in addition to unaligned file formats. The sqio API remains exactly the same (the caller doesn't have to use any msa module functions). \subsubsection{alphabet: digitized sequences} At present, only placeholders exist in the code for this augmentation. The plan is to provide the ability to input sequences directly into \ccode{dsq} as pre-digitized sequences. \subsubsection{ncbi: read NCBI BLAST databases} If sqio is augmented with the ncbi module, then the sqio API gains the ability to read NCBI BLAST database formats in addition to ASCII file formats. The sqio API remains exactly the same (the caller doesn't have to use any msa module functions). To open a BLAST database, the format must be supplied. If a format of \ccode{eslSQFILE\_UNKNOWN} is specified, only ASCII based format, i.e. FASTA, GENBANK, etc. will be opened. When opening a BLAST database, the file name should not include any extensions. If the \ccode{ESL\_ALPHABET} is not specified, Easel will first try to open a protein database, followed by a DNA database and finally a multi-volume database. The handling of a multi-volume database is done through the alias file. The only directive in the alias file is the DBLIST line, listing all the database volumes. \subsection{Adding a sequence parser} The \eslmod{sqio} module is designed to handle multiple sequence formats. Parsers for different formats can be plugged into the \eslmod{sqio} module without any API changes. This means that programs using the Easel library won't need code changes to use the new parser. A new parser will need a format type, a structure for parser specific data, API functions and a hook into the \ccode{sqfile\_open} function. The list of formats are defined in \ccode{esl\_sqio.h}. A new \ccode{\#define} will be added to the existing formats: \input{cexcerpts/sq_sqio_format} A data structure for parser specific data will need to be added to \ccode{ESL\_SQDATA}. This structure is a union of the different parser specific data structures. If possible the addition of the parser structure should be augmented so its inclusion can be controlled. \input{cexcerpts/sq_sqio_data} Finally, the routine specific function pointers neeed to be defined. The functions in \ccode{esl\_sqio.c} in turn call these function pointers. The \ccode{esl\_sqfile\_Open} function initializes the function pionters to NULL, so if they are not set an exception will occur when the function is called. At a minimum, the function should be defined to return an \ccode{eslEUNIMPLEMENTED}. Below is a map the the function pointers to their respective function. \begin{tabular}{ll} \\ Function Pointer & ESL\_SQIO Function \\ \hline position & esl\_sqfile\_Position \\ close & esl\_sqfile\_Close \\ set\_digital & esl\_sqfile\_SetDigital \\ guess\_alphabet & esl\_sqfile\_GuessAlphabet \\ read & esl\_sqio\_Read \\ read\_info & esl\_sqio\_ReadInfo \\ read\_seq & esl\_sqio\_ReadSequence \\ read\_window & esl\_sqio\_ReadWindow \\ echo & esl\_sqio\_Echo \\ read\_block & esl\_sqio\_ReadBlock \\ open\_ssi & esl\_sqfile\_OpenSSI \\ pos\_by\_key & esl\_sqfile\_PositionByKey \\ pos\_by\_number & esl\_sqfile\_PositionByNumber \\ fetch & esl\_sqio\_Fetch \\ fetch\_info & esl\_sqio\_FetchInfo \\ fetch\_subseq & esl\_sqio\_FetchSubseq \\ is\_rewindable & esl\_sqfile\_IsRewindable \\ get\_error & esl\_sqfile\_GetErrorBuf \\ \end{tabular} \bigskip A hook needs to be added to the function \ccode{sqfile\_open}. This hook will try to open the specified file. If successful, the \ccode{ESL\_SQFILE} structure should be filled in with function pointers and the parser specific data and the open hook return \ccode{eslOK}. If the sequence files were not found for the specific parser, an \ccode{eslENOTFOUND} is returned and the next parser tries to open the file. Below is an example of code that tries to open an NCBI BLAST database if not successful, then the ASCII sequence parsers try to open the file. \begin{cchunk} #ifdef eslAUGMENT\_NCBI if (format == eslSQFILE\_NCBI && status == eslENOTFOUND) status = esl\_sqncbi\_Open(sqfp->filename, sqfp->format, sqfp); #endif if (status == eslENOTFOUND) status = esl\_sqascii\_Open(sqfp->filename, sqfp->format, sqfp); \end{cchunk} hmmer-3.1b2/easel/esl_keyhash.c0000664361611702660230000006163012473612606016034 0ustar wheelerteddy/* Partial emulation of Perl hashes (associative arrays), * mapping keys (ASCII char strings) to array indices. * * Contents: * 1. The object. * 2. Storing and retrieving keys. * 3. Internal functions. * 4. Benchmark drivers. * 5. Unit tests. * 6. Test driver. * 7. Example. * 8. Copyright and license information. * */ #include "esl_config.h" #include #include #include #include #include "easel.h" #include "esl_mem.h" #include "esl_keyhash.h" static ESL_KEYHASH *keyhash_create(uint32_t hashsize, int init_key_alloc, int init_string_alloc); static uint32_t jenkins_hash(const char *key, esl_pos_t n, uint32_t hashsize); static int key_upsize(ESL_KEYHASH *kh); /***************************************************************** *# 1. The object *****************************************************************/ /* Function: esl_keyhash_Create() * Synopsis: Allocates a new keyhash. * * Purpose: Create a new hash table for key indexing, and returns * a pointer to it. * * Throws: on allocation failure. * * Note: 128*sizeof(int)*3 + 2048*sizeof(char) + sizeof(ESL_KEYHASH): * about 2400 bytes for an initial KEYHASH. */ ESL_KEYHASH * esl_keyhash_Create(void) { return keyhash_create(128, /* initial hash table size (power of 2) */ 128, /* initial alloc for up to 128 keys */ 2048); /* initial alloc for keys totalling up to 2048 chars */ } /* Function: esl_keyhash_CreateCustom() * Synopsis: Allocate a new keyhash with customized initial allocations. * * Purpose: Create a new hash table, initially allocating for * a hash table of size entries, * keys, and a total key string length of . * must be a power of 2, and all allocations * must be $\geq 0$. * * The object will still expand as needed, so the reason to * use a customized allocation is when you're trying to * minimize memory footprint and you expect your keyhash to * be smaller than the default (of up to 128 keys, of total * length up to 2048). * * Throws: on allocation failure. */ ESL_KEYHASH * esl_keyhash_CreateCustom(uint32_t hashsize, int kalloc, int salloc) { ESL_DASSERT1((hashsize && ((hashsize & (hashsize-1)) == 0))); /* hashsize is a power of 2 (bitshifting trickery) */ return keyhash_create(hashsize, kalloc, salloc); } /* Function: esl_keyhash_Clone() * Synopsis: Duplicates a keyhash. * * Purpose: Allocates and duplicates a keyhash . Returns a * pointer to the duplicate. * * Throws: on allocation failure. */ ESL_KEYHASH * esl_keyhash_Clone(const ESL_KEYHASH *kh) { ESL_KEYHASH *nw; int h; if ((nw = keyhash_create(kh->hashsize, kh->kalloc, kh->salloc)) == NULL) goto ERROR; for (h = 0; h < kh->hashsize; h++) nw->hashtable[h] = kh->hashtable[h]; for (h = 0; h < kh->nkeys; h++) { nw->nxt[h] = kh->nxt[h]; nw->key_offset[h] = kh->key_offset[h]; } nw->nkeys = kh->nkeys; memcpy(nw->smem, kh->smem, sizeof(char) * kh->sn); nw->sn = kh->sn; return nw; ERROR: esl_keyhash_Destroy(nw); return NULL; } /* Function: esl_keyhash_Get() * Synopsis: Returns a key name, given its index. * * Purpose: Returns a pointer to the key name associated * with index . The key name is a -terminated * string whose memory is managed internally in * the keyhash . */ char * esl_keyhash_Get(const ESL_KEYHASH *kh, int idx) { return kh->smem + kh->key_offset[idx]; } /* Function: esl_keyhash_GetNumber() * Synopsis: Returns the total number of keys stored. * * Purpose: Returns the total number of keys currently stored in the * keyhash . */ int esl_keyhash_GetNumber(const ESL_KEYHASH *kh) { return kh->nkeys; } /* Function: esl_keyhash_Sizeof() * Synopsis: Returns the size of a keyhash object, in bytes. */ size_t esl_keyhash_Sizeof(const ESL_KEYHASH *kh) { size_t n = 0; n += sizeof(ESL_KEYHASH); n += sizeof(int) * kh->hashsize; n += sizeof(int) * kh->kalloc * 2; n += sizeof(char) * kh->salloc; return n; } /* Function: esl_keyhash_Reuse() * Synopsis: Recycle a keyhash. * * Purpose: Empties keyhash so it can be reused without * creating a new one. * * Returns: on success. */ int esl_keyhash_Reuse(ESL_KEYHASH *kh) { int i; for (i = 0; i < kh->hashsize; i++) kh->hashtable[i] = -1; kh->nkeys = 0; kh->sn = 0; return eslOK; } /* Function: esl_keyhash_Destroy() * Synopsis: Frees a keyhash. * * Purpose: Destroys . * * Returns: (void) */ void esl_keyhash_Destroy(ESL_KEYHASH *kh) { if (kh == NULL) return; if (kh->hashtable != NULL) free(kh->hashtable); if (kh->key_offset != NULL) free(kh->key_offset); if (kh->nxt != NULL) free(kh->nxt); if (kh->smem != NULL) free(kh->smem); free(kh); } /* Function: esl_keyhash_Dump() * Synopsis: Dumps debugging information about a keyhash. * * Purpose: Mainly for debugging purposes. Dump * some information about the hash table * to the stream , which might be stderr * or stdout. */ void esl_keyhash_Dump(FILE *fp, const ESL_KEYHASH *kh) { int idx; int h; int nkeys; int nempty = 0; int maxkeys = -1; int minkeys = INT_MAX; for (h = 0; h < kh->hashsize; h++) { for (nkeys = 0, idx = kh->hashtable[h]; idx != -1; idx = kh->nxt[idx]) nkeys++; if (nkeys == 0) nempty++; if (nkeys > maxkeys) maxkeys = nkeys; if (nkeys < minkeys) minkeys = nkeys; } fprintf(fp, "Total keys: %d\n", kh->nkeys); fprintf(fp, "Hash table size: %d\n", kh->hashsize); fprintf(fp, "Average occupancy: %.2f\n", (float) kh->nkeys /(float) kh->hashsize); fprintf(fp, "Unoccupied slots: %d\n", nempty); fprintf(fp, "Most in one slot: %d\n", maxkeys); fprintf(fp, "Least in one slot: %d\n", minkeys); fprintf(fp, "Keys allocated for: %d\n", kh->kalloc); fprintf(fp, "Key string space alloc: %d\n", kh->salloc); fprintf(fp, "Key string space used: %d\n", kh->sn); fprintf(fp, "Total obj size, bytes: %d\n", (int) esl_keyhash_Sizeof(kh)); } /*--------------- end, object ---------------------*/ /***************************************************************** *# 2. Storing and retrieving keys *****************************************************************/ /* Function: esl_keyhash_Store() * Synopsis: Store a key and get a key index for it. * * Purpose: Store a string of length in the key index hash table . * Associate it with a unique key index, counting from * 0. It's this index that lets us map the hashed keys to * integer-indexed C arrays, clumsily emulating Perl's * hashes. Optionally returns the index through . * * , follow the standard idiom for strings and * unterminated buffers. * * Returns: on success; stores in ; is * returned, set to the next higher index value. * Returns if was already stored in the table; * is set to the existing index for . * * Throws: on allocation failure, and sets to -1. */ int esl_keyhash_Store(ESL_KEYHASH *kh, const char *key, esl_pos_t n, int *opt_index) { uint32_t val = jenkins_hash(key, n, kh->hashsize); int idx; int status; if (n == -1) n = strlen(key); /* Was this key already stored? */ for (idx = kh->hashtable[val]; idx != -1; idx = kh->nxt[idx]) if (esl_memstrcmp(key, n, kh->smem + kh->key_offset[idx])) { if (opt_index != NULL) *opt_index = idx; return eslEDUP; } /* Reallocate key ptr/index memory if needed */ if (kh->nkeys == kh->kalloc) { ESL_REALLOC(kh->key_offset, sizeof(int)*kh->kalloc*2); ESL_REALLOC(kh->nxt, sizeof(int)*kh->kalloc*2); kh->kalloc *= 2; } /* Reallocate key string memory if needed */ while (kh->sn + n + 1 > kh->salloc) { ESL_REALLOC(kh->smem, sizeof(char) * kh->salloc * 2); kh->salloc *= 2; } /* Copy the key, assign its index */ idx = kh->nkeys; kh->key_offset[idx] = kh->sn; kh->sn += n+1; esl_memstrcpy(key, n, kh->smem + kh->key_offset[idx]); kh->nkeys++; /* Insert new element at head of the approp linked list in hashtable */ kh->nxt[idx] = kh->hashtable[val]; kh->hashtable[val] = idx; /* Time to upsize? If we're 3x saturated, expand the hash table */ if (kh->nkeys > 3*kh->hashsize) if ((status = key_upsize(kh)) != eslOK) goto ERROR; if (opt_index != NULL) *opt_index = idx; return eslOK; ERROR: if (opt_index != NULL) *opt_index = -1; return status; } /* Function: esl_keyhash_Lookup() * Synopsis: Look up a key's array index. * * Purpose: Look up a in the hash table . * If is found, return , and optionally set <*opt_index> * to its array index (0..nkeys-1). * If is not found, return , and * optionally set <*opt_index> to -1. */ int esl_keyhash_Lookup(const ESL_KEYHASH *kh, const char *key, esl_pos_t n, int *opt_index) { uint32_t val = jenkins_hash(key, n, kh->hashsize); int idx; for (idx = kh->hashtable[val]; idx != -1; idx = kh->nxt[idx]) if (strcmp(key, kh->smem + kh->key_offset[idx]) == 0) { if (opt_index != NULL) *opt_index = idx; return eslOK; } if (opt_index != NULL) *opt_index = -1; return eslENOTFOUND; } /*---------- end, API for storing/retrieving keys ---------------*/ /***************************************************************** * 3. Internal functions *****************************************************************/ /* keyhash_create() * * The real creation function, which takes arguments for memory sizes. * This is abstracted to a static function because it's used by both * Create() and Clone() but slightly differently. * * Args: hashsize - size of hash table; this must be a power of two. * init_key_alloc - initial allocation for # of keys. * init_string_alloc - initial allocation for total size of key strings. * * Returns: An allocated hash table structure; or NULL on failure. */ ESL_KEYHASH * keyhash_create(uint32_t hashsize, int init_key_alloc, int init_string_alloc) { ESL_KEYHASH *kh = NULL; int i; int status; ESL_ALLOC(kh, sizeof(ESL_KEYHASH)); kh->hashtable = NULL; kh->key_offset = NULL; kh->nxt = NULL; kh->smem = NULL; kh->hashsize = hashsize; kh->kalloc = init_key_alloc; kh->salloc = init_string_alloc; ESL_ALLOC(kh->hashtable, sizeof(int) * kh->hashsize); for (i = 0; i < kh->hashsize; i++) kh->hashtable[i] = -1; ESL_ALLOC(kh->key_offset, sizeof(int) * kh->kalloc); ESL_ALLOC(kh->nxt, sizeof(int) * kh->kalloc); for (i = 0; i < kh->kalloc; i++) kh->nxt[i] = -1; ESL_ALLOC(kh->smem, sizeof(char) * kh->salloc); kh->nkeys = 0; kh->sn = 0; return kh; ERROR: esl_keyhash_Destroy(kh); return NULL; } /* jenkins_hash() * * The hash function. * This is Bob Jenkins' "one at a time" hash. * is a NUL-terminated string of any length. * must be a power of 2. * * References: * [1] http://en.wikipedia.org/wiki/Hash_table * [2] http://www.burtleburtle.net/bob/hash/doobs.html */ static uint32_t jenkins_hash(const char *key, esl_pos_t n, uint32_t hashsize) { esl_pos_t pos; uint32_t val = 0; if (n == -1) { /* string version */ for (; *key != '\0'; key++) { val += *key; val += (val << 10); val ^= (val >> 6); } } else { /* buffer version */ for (pos = 0; pos < n; pos++) { val += key[pos]; val += (val << 10); val ^= (val >> 6); } } val += (val << 3); val ^= (val >> 11); val += (val << 15); return (val & (hashsize - 1)); } /* key_upsize() * * Grow the hash table to the next available size. * * Args: old - the KEY hash table to reallocate. * * Returns: on success. 'Success' includes the case * where the hash table is already at its maximum size, * and cannot be upsized any more. * * Throws: on allocation failure, and * the hash table is left in its initial state. */ static int key_upsize(ESL_KEYHASH *kh) { void *p; int i; uint32_t val; int status; /* 28 below because we're going to upsize in steps of 8x (2^3); need to be < 2^{31-3} */ if (kh->hashsize >= (1<<28)) return eslOK; /* quasi-success (can't grow any more) */ /* The catch here is that when you upsize the table, all the hash functions * change; so you have to go through all the keys, recompute their hash functions, * and store them again in the new table. */ /* Allocate a new, larger hash table. (Don't change until this succeeds) */ ESL_RALLOC(kh->hashtable, p, sizeof(int) * (kh->hashsize << 3)); kh->hashsize = kh->hashsize << 3; /* 8x */ for (i = 0; i < kh->hashsize; i++) kh->hashtable[i] = -1; /* Store all the keys again. */ for (i = 0; i < kh->nkeys; i++) { val = jenkins_hash(kh->smem + kh->key_offset[i], -1, kh->hashsize); kh->nxt[i] = kh->hashtable[val]; kh->hashtable[val] = i; } return eslOK; ERROR: return eslEMEM; } /*--------------- end, internal functions -----------------*/ /***************************************************************** * 4. Benchmark driver *****************************************************************/ #ifdef eslKEYHASH_BENCHMARK /* gcc -g -O2 -o keyhash_benchmark -I. -L. -DeslKEYHASH_BENCHMARK esl_keyhash.c -leasel -lm time ./keyhash_benchmark /usr/share/dict/words /usr/share/dict/words */ #include "esl_config.h" #include #include "easel.h" #include "esl_getopts.h" #include "esl_keyhash.h" #include "esl_stopwatch.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmarking speed of keyhash module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 2, argc, argv, banner, usage); ESL_KEYHASH *kh = esl_keyhash_Create(); ESL_STOPWATCH *w = esl_stopwatch_Create(); char *file1 = esl_opt_GetArg(go, 1); char *file2 = esl_opt_GetArg(go, 2); FILE *fp; char buf[256]; char *s, *tok; int idx; int nstored, nsearched, nshared; /* Read/store keys from file 1. */ esl_stopwatch_Start(w); if ((fp = fopen(file1, "r")) == NULL) { fprintf(stderr, "couldn't open %s\n", argv[1]); exit(1); } nstored = 0; while (fgets(buf, 256, fp) != NULL) { s = buf; esl_strtok(&s, " \t\r\n", &tok); esl_keyhash_Store(kh, tok, -1, &idx); nstored++; } fclose(fp); printf("Stored %d keys.\n", nstored); /* Look up keys from file 2. */ if ((fp = fopen(file2, "r")) == NULL) { fprintf(stderr, "couldn't open %s\n", argv[2]); exit(1); } nsearched = nshared = 0; while (fgets(buf, 256, fp) != NULL) { s = buf; esl_strtok(&s, " \t\r\n", &tok); if (esl_keyhash_Lookup(kh, tok, -1, &idx) == eslOK) nshared++; nsearched++; } fclose(fp); esl_stopwatch_Stop(w); printf("Looked up %d keys.\n", nsearched); printf("In common: %d keys.\n", nshared); esl_stopwatch_Display(stdout, w, "# CPU Time: "); esl_stopwatch_Destroy(w); esl_keyhash_Destroy(kh); esl_getopts_Destroy(go); return 0; } #endif /*eslKEYHASH_BENCHMARK*/ #ifdef eslKEYHASH_BENCHMARK2 /* Benchmark #2 is a benchmark just of the hash function. * First we read in a bunch of keys from any file, one key per line. * Then we start timing, and compute a hash for each key. */ /* gcc -O2 -o keyhash_benchmark2 -I. -L. -DeslKEYHASH_BENCHMARK2 esl_keyhash.c -leasel -lm * ./keyhash_benchmark2 */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_fileparser.h" #include "esl_getopts.h" #include "esl_keyhash.h" #include "esl_stats.h" #include "esl_stopwatch.h" #include "esl_vectorops.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show statistical test for hash uniformity", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose: print hash values for keys", 0 }, { "-x", eslARG_INT, "32768", NULL, NULL, NULL, NULL, NULL, "set hash table size to ", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmarking speed of hash function in keyhash module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage); ESL_FILEPARSER *efp = NULL; ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_KEYHASH *kh = esl_keyhash_Create(); char *keyfile = esl_opt_GetArg(go, 1); uint32_t hashsize = esl_opt_GetInteger(go, "-x"); char *key; int keylen; char **karr = NULL; int kalloc; int *ct = NULL; int nkeys; int i; int status; uint32_t (*hashfunc)(const char*,uint32_t) = jenkins_hash; /* 1. Store the keys from the file, before starting the benchmark timer. */ kalloc = 256; ESL_ALLOC(karr, sizeof(char *) * kalloc); if (esl_fileparser_Open(keyfile, NULL, &efp) != eslOK) esl_fatal("Failed to open key file %s\n", keyfile); nkeys = 0; while (esl_fileparser_NextLine(efp) == eslOK) { if (esl_fileparser_GetTokenOnLine(efp, &key, &keylen) != eslOK) esl_fatal("Failure in parsing key file\n"); if (nkeys == kalloc) { void *tmp; ESL_RALLOC(karr, tmp, sizeof(char *) * kalloc * 2); kalloc *= 2; } esl_strdup(key, keylen, &(karr[nkeys])); nkeys++; } esl_fileparser_Close(efp); /* and karr[0..nkeys-1] are now the keys. */ /* 2. benchmark hashing the keys. */ esl_stopwatch_Start(w); for (i = 0; i < nkeys; i++) (*hashfunc)(karr[i], hashsize); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "# CPU Time: "); /* If user wanted to see the hashes, do that * separately, outside the timing loop. */ if (esl_opt_GetBoolean(go, "-v")) { for (i = 0; i < nkeys; i++) printf("%-20s %9d\n", karr[i], (*hashfunc)(karr[i], hashsize)); } /* Likewise, if user wanted to see statistical uniformity test... */ if (esl_opt_GetBoolean(go, "-s")) { double mean, var, X2, pval; ESL_ALLOC(ct, sizeof(int) * hashsize); esl_vec_ISet(ct, hashsize, 0); for (i = 0; i < nkeys; i++) ct[(*hashfunc)(karr[i], hashsize)]++; esl_stats_IMean(ct, hashsize, &mean, &var); for (X2 = 0.0, i = 0; i < hashsize; i++) X2 += (((double) ct[i] - mean) * ((double) ct[i] - mean)) / mean; esl_stats_ChiSquaredTest(hashsize-1, X2, &pval); printf("Number of keys: %d\n", nkeys); printf("Hash table size: %d\n", hashsize); printf("Mean hash occupancy: %.2f\n", mean); printf("Minimum: %d\n", esl_vec_IMin(ct, hashsize)); printf("Maximum: %d\n", esl_vec_IMax(ct, hashsize)); printf("Variance: %.2f\n", var); printf("Chi-squared: %.2f\n", X2); printf("Chi-squared p-value: %.4f\n", pval); } /* 3. cleanup, exit. */ for (i = 0; i < nkeys; i++) free(karr[i]); free(karr); esl_stopwatch_Destroy(w); esl_getopts_Destroy(go); return 0; ERROR: return status; } #endif /*eslKEYHASH_BENCHMARK2*/ /*------------------- end, benchmark drivers --------------------*/ /***************************************************************** * 5. Unit tests *****************************************************************/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 6. Test driver *****************************************************************/ #ifdef eslKEYHASH_TESTDRIVE /* gcc -g -Wall -o test -I. -DeslKEYHASH_TESTDRIVE keyhash.c easel.c * ./test */ #include #include #include #include "easel.h" #include "esl_keyhash.h" #define NSTORE 1200 #define NLOOKUP 1200 #define KEYLEN 2 int main(int argc, char **argv) { ESL_KEYHASH *h; char keys[NSTORE+NLOOKUP][KEYLEN+1]; int i,j,nk,k42; int nmissed; int status; /* Generate 2400 random k=2 keys. 26^2 = 676 possible. * We'll store the first 1200 and search on the remaining * 1200. We're ~1.775x saturated; expect Poisson P(0) = 17% miss * rate on the searches, so we ought to exercise hits and * misses on the lookups. */ srand(31); for (i = 0; i < NSTORE+NLOOKUP; i++) { for (j = 0; j < KEYLEN; j++) keys[i][j] = 'a' + (rand() % 26); /* yeah, low-order bits; so sue me */ keys[i][j] = '\0'; } /* spike a known one in (XX.. at key 42). */ for (j = 0; j < KEYLEN; j++) keys[42][j] = 'X'; h = esl_keyhash_Create(); nk = 0; for (i = 0; i < NSTORE; i++) { status = esl_keyhash_Store(h, keys[i], -1, &j); if (status == eslOK) { assert(j==nk); nk++; } else if (status == eslEDUP) { assert(j #include "easel.h" #include "esl_keyhash.h" int main(int argc, char **argv) { ESL_KEYHASH *h = esl_keyhash_Create(); FILE *fp; char buf[256]; char *s, *tok; int idx; int nstored, nsearched, nshared; /* Read/store keys from file 1. */ if ((fp = fopen(argv[1], "r")) == NULL) esl_fatal("couldn't open %s\n", argv[1]); nstored = 0; while (fgets(buf, 256, fp) != NULL) { s = buf; esl_strtok(&s, " \t\r\n", &tok); esl_keyhash_Store(h, tok, -1, &idx); nstored++; } fclose(fp); printf("Stored %d keys.\n", nstored); /* Look up keys from file 2. */ if ((fp = fopen(argv[2], "r")) == NULL) esl_fatal("couldn't open %s\n", argv[1]); nsearched = nshared = 0; while (fgets(buf, 256, fp) != NULL) { s = buf; esl_strtok(&s, " \t\r\n", &tok); if (esl_keyhash_Lookup(h, tok, -1, &idx) == eslOK) nshared++; nsearched++; } fclose(fp); printf("Looked up %d keys.\n", nsearched); printf("In common: %d keys.\n", nshared); esl_keyhash_Destroy(h); return 0; } /*::cexcerpt::keyhash_example::end::*/ #endif /*eslKEYHASH_EXAMPLE*/ /*----------------------- end, example --------------------------*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_keyhash.c 729 2011-11-02 12:46:42Z eddys $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_keyhash.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_mpi.c0000664361611702660230000016372212473612606015172 0ustar wheelerteddy/* Support for MPI parallelization. * * Only available when the entire Easel library is in use (HAVE_MPI * and eslLIBRARY are defined). * * Contents: * 1. Communicating optional arrays. * 2. Communicating ESL_SQ (single biosequences) * 3. Communicating ESL_MSA (multiple sequence alignments). * 4. Communicating ESL_STOPWATCH (process timing). * 5. Unit tests. * 6. Test driver. * 7. Example. * 8. Copyright and license information. */ #include "esl_config.h" #if defined(HAVE_MPI) && defined(eslLIBRARY) #include #include "mpi.h" #include "easel.h" #include "esl_msa.h" #include "esl_sq.h" #include "esl_stopwatch.h" #include "esl_mpi.h" /***************************************************************** *# 1. Communicating optional arrays. *****************************************************************/ /* Function: esl_mpi_PackOpt() * Synopsis: Pack an optional, variable-sized array (or string). * Incept: SRE, Sat Jun 2 08:40:39 2007 [Janelia] * * Purpose: Pack data array of elements of type into * an MPI packed buffer of total size destined * for MPI communicator that is currently filled to position <*position>. * * may be , in which case is * assumed to be 0, and a `null array' is packed that * knows how to decode as a * pointer. * * As a special case for strings, if is , * may be passed as <-1> to indicate `unknown'; * the routine will use to determine the * size of the string including its terminator. * * Returns: on success, the array is packed into , * and the <*position> counter is updated to point to the next byte * in after the packed array. * * Throws: if an MPI call fails. */ int esl_mpi_PackOpt(void *inbuf, int incount, MPI_Datatype type, void *pack_buf, int pack_buf_size, int *position, MPI_Comm comm) { if (inbuf == NULL) { incount = 0; if (MPI_Pack(&incount, 1, MPI_INT, pack_buf, pack_buf_size, position, comm) != 0) ESL_EXCEPTION(eslESYS, "MPI pack failed"); } else { if (incount == -1 && type == MPI_CHAR) incount = strlen(inbuf) + 1; if (MPI_Pack(&incount, 1, MPI_INT, pack_buf, pack_buf_size, position, comm) != 0) ESL_EXCEPTION(eslESYS, "MPI pack failed"); if (MPI_Pack(inbuf, incount, type, pack_buf, pack_buf_size, position, comm) != 0) ESL_EXCEPTION(eslESYS, "MPI pack failed"); } return eslOK; } /* Function: esl_mpi_PackOptSize() * Synopsis: Determine the size of a packed optional, variable-sized array. * Incept: SRE, Sat Jun 2 10:09:16 2007 [Janelia] * * Purpose: Determine an upper bound on the size (in bytes) required * to pack an array of elements of type * destined for MPI communicator using * , and return it in <*ret_n>. * * If is non-, the packed message consists * of 1 integer (the length, ) followed by the array. * If is , the packed message consists of one * integer (0). * * As a special case for strings, if is , * may be passed as <-1> to indicate `unknown'; * in this case, the routine uses to determine the * size of the string including its terminator. * * Returns: on success, and <*ret_n> contains the upper limit size in * bytes. * * Throws: if an MPI call fails, and <*ret_n> is 0. */ int esl_mpi_PackOptSize(void *inbuf, int incount, MPI_Datatype type, MPI_Comm comm, int *ret_n) { int status; int sz; *ret_n = 0; if (inbuf == NULL) { status = MPI_Pack_size(1, MPI_INT, MPI_COMM_WORLD, &sz); *ret_n += sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi pack size failed"); } else { if (incount == -1 && type == MPI_CHAR) incount = strlen(inbuf) + 1; status = MPI_Pack_size(1, MPI_INT, MPI_COMM_WORLD, &sz); *ret_n += sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi pack size failed"); status = MPI_Pack_size(incount, type, MPI_COMM_WORLD, &sz); *ret_n += sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi pack size failed"); } return eslOK; ERROR: *ret_n = 0; return status; } /* Function: esl_mpi_UnpackOpt() * Synopsis: Unpack an optional, variable-sized array (or string). * Incept: SRE, Sat Jun 2 08:39:39 2007 [Janelia] * * Purpose: Unpack a packed MPI message in buffer , of total size * , at current position <*pos> in , * for MPI communicator , where the next packed element is an optional * array of type , consisting of a <(n,data)> pair, with * indicating no data. * * If array data is present (0>), allocate <*outbuf>, * put the array in it, and optionally return in * <*opt_n>. The caller is responsible for free'ing this * <*outbuf>. * * If data are not present (), no allocation is done, * <*outbuf> is set to , and the optional <*opt_n> is * 0. * * <*pos> is updated to point at the next element in * that needs to be unpacked. * * This routine is designed for an optional-array idiom in * which means the array isn't available, and * otherwise the array contains valid data. For instance, * this is used for optional annotation on multiple * alignments. * * Returns: on success; <*pos> is updated; <*outbuf> is either a newly allocated * array (that caller is responsible for freeing) and optional <*opt_n> * is its length, or <*outbuf> is and optional <*opt_n> is 0. * * Throws: on an MPI call failure; if something's wrong * with the arguments; on allocation failure. * In either case, <*outbuf> is and optional <*opt_n> is 0. */ int esl_mpi_UnpackOpt(void *pack_buf, int pack_buf_size, int *pos, void **outbuf, int *opt_n, MPI_Datatype type, MPI_Comm comm) { int sz; int status; if (MPI_Unpack(pack_buf, pack_buf_size, pos, &sz, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (sz == 0) { *outbuf = NULL; } else { if (type == MPI_CHAR) ESL_ALLOC(*outbuf, sizeof(char) * sz); else if (type == MPI_SHORT) ESL_ALLOC(*outbuf, sizeof(short) * sz); else if (type == MPI_INT) ESL_ALLOC(*outbuf, sizeof(int) * sz); else if (type == MPI_LONG) ESL_ALLOC(*outbuf, sizeof(long) * sz); else if (type == MPI_UNSIGNED_CHAR) ESL_ALLOC(*outbuf, sizeof(unsigned char) * sz); else if (type == MPI_UNSIGNED_SHORT) ESL_ALLOC(*outbuf, sizeof(unsigned short) * sz); else if (type == MPI_UNSIGNED) ESL_ALLOC(*outbuf, sizeof(unsigned int) * sz); else if (type == MPI_UNSIGNED_LONG) ESL_ALLOC(*outbuf, sizeof(unsigned long) * sz); else if (type == MPI_FLOAT) ESL_ALLOC(*outbuf, sizeof(float) * sz); else if (type == MPI_DOUBLE) ESL_ALLOC(*outbuf, sizeof(double) * sz); else if (type == MPI_LONG_DOUBLE) ESL_ALLOC(*outbuf, sizeof(long double) * sz); else if (type == MPI_BYTE) ESL_ALLOC(*outbuf, sz); else if (type == MPI_PACKED) ESL_ALLOC(*outbuf, sz); else ESL_XEXCEPTION(eslEINVAL, "no such MPI datatype"); if (MPI_Unpack(pack_buf, pack_buf_size, pos, *outbuf, sz, type, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); } if (opt_n != NULL) *opt_n = sz; return eslOK; ERROR: if (*outbuf != NULL) free(*outbuf); *outbuf = NULL; if (opt_n != NULL) *opt_n = 0; return status; } /*--------------------- end, optional arrays -------------------*/ /***************************************************************** *# 2. Communicating ESL_SQ (single biosequences) *****************************************************************/ /* Function: esl_sq_MPISend() * Synopsis: Send an ESL_SQ as an MPI work unit. * Incept: ER, Thu Jun 19 10:39:49 EDT 2008 [Janelia] * * Purpose: Sends an as a work unit to MPI process * (where ranges from 0..), tagged * with MPI tag , for MPI communicator , as * the sole workunit or result. * * Work units are prefixed by a status code. If is * , the work unit is an code followed by * the packed . If is NULL, the work unit is an * code, which knows how to * interpret; this is typically used for an end-of-data * signal to cleanly shut down worker processes. * * In order to minimize alloc/free cycles in this routine, * caller passes a pointer to a working buffer <*buf> of * size <*nalloc> characters. If necessary (i.e. if is * too big to fit), <*buf> will be reallocated and <*nalloc> * increased to the new size. As a special case, if <*buf> * is and <*nalloc> is 0, the buffer will be * allocated appropriately, but the caller is still * responsible for free'ing it. * * Returns: on success; <*buf> may have been reallocated and * <*nalloc> may have been increased. * * Throws: if an MPI call fails; if a malloc/realloc * fails. In either case, <*buf> and <*nalloc> remain valid and useful * memory (though the contents of <*buf> are undefined). * */ int esl_sq_MPISend(ESL_SQ *sq, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc) { int status; int code; int sz, n, pos; /* Figure out size */ if (MPI_Pack_size(1, MPI_INT, comm, &n) != 0) ESL_XEXCEPTION(eslESYS, "mpi pack size failed"); if (sq != NULL) { if ((status = esl_sq_MPIPackSize(sq, comm, &sz)) != eslOK) return status; n += sz; } ESL_DPRINTF2(("esl_sq_MPISend(): sq has size %d\n", n)); /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } ESL_DPRINTF2(("esl_sq_MPISend(): buffer is ready\n")); /* Pack the status code and ESL_SQ into the buffer */ pos = 0; code = (sq == NULL) ? eslEOD : eslOK; if (MPI_Pack(&code, 1, MPI_INT, *buf, n, &pos, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi pack failed"); if (sq != NULL) { if ((status = esl_sq_MPIPack(sq, *buf, n, &pos, comm)) != eslOK) return status; } ESL_DPRINTF2(("esl_sq_MPISend(): sq is packed into %d bytes\n", pos)); /* Send the packed ESL_SQ to the destination. */ if (MPI_Send(*buf, n, MPI_PACKED, dest, tag, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi send failed"); ESL_DPRINTF2(("esl_sq_MPISend(): sq is sent.\n")); return eslOK; ERROR: return status; } /* Function: esl_sq_MPIPackSize() * Synopsis: Calculates size needed to pack an ESL_SQ. * Incept: ER, Thu Jun 19 10:48:25 EDT 2008 [Janelia] * * Purpose: Calculate an upper bound on the number of bytes * that will need to pack an * in a packed MPI message for MPI communicator * ; return that number of bytes in <*ret_n>. * * Returns: on success, and <*ret_n> contains the answer. * * Throws: if an MPI call fails, and <*ret_n> is 0. */ int esl_sq_MPIPackSize(ESL_SQ *sq, MPI_Comm comm, int *ret_n) { int status; int n = 0; int x; /* index for optional extra residue markups */ int sz; status = MPI_Pack_size ( 1, MPI_INT, comm, &sz); n += 5*sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); status = MPI_Pack_size ( 1, MPI_UNSIGNED_LONG, comm, &sz); n += 7*sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); status = MPI_Pack_size ( sq->nalloc, MPI_CHAR, comm, &sz); n += sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); status = MPI_Pack_size ( sq->aalloc, MPI_CHAR, comm, &sz); n += sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); status = MPI_Pack_size ( sq->dalloc, MPI_CHAR, comm, &sz); n += sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); status = MPI_Pack_size ( sq->srcalloc, MPI_CHAR, comm, &sz); n += sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); /* sequence, digital or text; the ss and extra residue markups are optional */ if (sq->dsq != NULL) { status = MPI_Pack_size ( sq->n+2, MPI_UNSIGNED_CHAR, comm, &sz); n += sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); status = esl_mpi_PackOptSize(sq->ss, sq->n+2, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; for (x = 0; x < sq->nxr; x ++) { status = esl_mpi_PackOptSize(sq->xr_tag[x], sq->nalloc, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; status = esl_mpi_PackOptSize(sq->xr[x], sq->n+2, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; } } else { status = MPI_Pack_size ( sq->n+1, MPI_CHAR, comm, &sz); n += sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); status = esl_mpi_PackOptSize(sq->ss, sq->n+1, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; for (x = 0; x < sq->nxr; x ++) { status = esl_mpi_PackOptSize(sq->xr_tag[x], sq->nalloc, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; status = esl_mpi_PackOptSize(sq->xr[x], sq->n+1, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; } } *ret_n = n; return eslOK; ERROR: *ret_n = 0; return status; } /* Function: esl_sq_MPIPack() * Synopsis: Packs an into MPI buffer. * Incept: ER, Thu Jun 19 10:49:10 EDT 2008 [Janelia] * * Purpose: Packs into an MPI packed message buffer * of length bytes, starting at byte position <*position>, * for MPI communicator . * * The caller must know that 's allocation of * bytes is large enough to append the packed at * position <*pos>. This typically requires a call to * first, and reallocation if * needed. * * Returns: on success; now contains the * packed , and <*position> is set to the byte * immediately following the last byte of the * in . * * Throws: if an MPI call fails; or if the * buffer's length was overflowed in trying to pack * into . In either case, the state of * and <*position> is undefined, and both should * be considered to be corrupted. */ int esl_sq_MPIPack(ESL_SQ *sq, char *buf, int n, int *pos, MPI_Comm comm) { unsigned long int sq_n; unsigned long int start; unsigned long int end; unsigned long int C; unsigned long int W; unsigned long int L; unsigned long int salloc; int x; /* index for optional extra residue markups */ int status; sq_n = (unsigned long int)sq->n; start = (unsigned long int)sq->start; end = (unsigned long int)sq->end; C = (unsigned long int)sq->C; W = (unsigned long int)sq->W; L = (unsigned long int)sq->L; salloc = (unsigned long int)sq->salloc; /* pack allocation values */ status = MPI_Pack (( int *) &(sq->nalloc), 1, MPI_INT, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack (( int *) &(sq->aalloc), 1, MPI_INT, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack (( int *) &(sq->dalloc), 1, MPI_INT, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack (( int *) &(sq->srcalloc), 1, MPI_INT, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack (( int *) &(sq->nxr), 1, MPI_INT, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack ((unsigned long int *) &( salloc), 1, MPI_UNSIGNED_LONG, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); /* pack coordenate info */ status = MPI_Pack ((unsigned long int *) &(sq_n), 1, MPI_UNSIGNED_LONG, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack ((unsigned long int *) &(start), 1, MPI_UNSIGNED_LONG, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack ((unsigned long int *) &(end), 1, MPI_UNSIGNED_LONG, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack ((unsigned long int *) &(C), 1, MPI_UNSIGNED_LONG, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack ((unsigned long int *) &(W), 1, MPI_UNSIGNED_LONG, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack ((unsigned long int *) &(L), 1, MPI_UNSIGNED_LONG, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); /* pack strings */ status = MPI_Pack (sq->name, sq->nalloc, MPI_CHAR, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack (sq->acc, sq->aalloc, MPI_CHAR, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack (sq->desc, sq->dalloc, MPI_CHAR, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack (sq->source, sq->srcalloc, MPI_CHAR, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); /* sequences, digital or text; the ss and extra residue markups are optional */ if (sq->dsq != NULL) { status = MPI_Pack (sq->dsq, sq->n+2, MPI_UNSIGNED_CHAR, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = esl_mpi_PackOpt(sq->ss, sq->n+2, MPI_CHAR, buf, n, pos, comm); if (status != eslOK) return status; for (x = 0; x < sq->nxr; x ++) { status = esl_mpi_PackOpt(sq->xr_tag[x], sq->nalloc, MPI_CHAR, buf, n, pos, comm); if (status != eslOK) return status; status = esl_mpi_PackOpt(sq->xr[x], sq->n+2, MPI_CHAR, buf, n, pos, comm); if (status != eslOK) return status; } } else { status = MPI_Pack (sq->seq, sq->n+1, MPI_CHAR, buf, n, pos, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = esl_mpi_PackOpt(sq->ss, sq->n+1, MPI_CHAR, buf, n, pos, comm); if (status != eslOK) return status; for (x = 0; x < sq->nxr; x ++) { status = esl_mpi_PackOpt(sq->xr_tag[x], sq->nalloc, MPI_CHAR, buf, n, pos, comm); if (status != eslOK) return status; status = esl_mpi_PackOpt(sq->xr[x], sq->n+1, MPI_CHAR, buf, n, pos, comm); if (status != eslOK) return status; } } if (*pos > n) ESL_EXCEPTION(eslEMEM, "buffer overflow"); return eslOK; } /* Function: esl_sq_MPIUnpack() * Synopsis: Unpacks an from an MPI buffer. * Incept: SRE, Thu Jun 7 11:04:46 2007 [Janelia] * * Purpose: Unpack a newly allocated from MPI packed buffer * , starting from position <*pos>, where the total length * of the buffer in bytes is . * * Caller may or may not already know what alphabet the * is expected to be in. * * Returns: on success. <*pos> is updated to the position of * the next element in to unpack (if any). <*ret_hmm> * contains a newly allocated , which the caller is * responsible for free'ing. * * * Throws: on an MPI call failure. on allocation failure. * In either case, <*ret_esl_sq> is , and the state of * and <*pos> is undefined and should be considered to be corrupted. */ int esl_sq_MPIUnpack(const ESL_ALPHABET *abc, char *buf, int n, int *pos, MPI_Comm comm, ESL_SQ **ret_sq) { ESL_SQ *sq = NULL; unsigned long int sq_n; unsigned long int start; unsigned long int end; unsigned long int C; unsigned long int W; unsigned long int L; unsigned long int salloc; int x; /* index for optional extra residue markups */ int do_digital = FALSE; int status; if (abc != NULL) do_digital = TRUE; /* allocate sq */ ESL_ALLOC(sq, sizeof(ESL_SQ)); /* unpack allocation values */ status = MPI_Unpack(buf, n, pos, &(sq->nalloc), 1, MPI_INT, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack(buf, n, pos, &(sq->aalloc), 1, MPI_INT, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack(buf, n, pos, &(sq->dalloc), 1, MPI_INT, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack(buf, n, pos, &(sq->srcalloc), 1, MPI_INT, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack(buf, n, pos, &(sq->nxr), 1, MPI_INT, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack(buf, n, pos, &(salloc), 1, MPI_UNSIGNED_LONG, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); /* unpack coordenate info */ status = MPI_Unpack(buf, n, pos, &(sq_n), 1, MPI_UNSIGNED_LONG, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack(buf, n, pos, &(start), 1, MPI_UNSIGNED_LONG, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack(buf, n, pos, &(end), 1, MPI_UNSIGNED_LONG, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack(buf, n, pos, &(C), 1, MPI_UNSIGNED_LONG, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack(buf, n, pos, &(W), 1, MPI_UNSIGNED_LONG, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack(buf, n, pos, &(L), 1, MPI_UNSIGNED_LONG, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); sq->salloc = (int64_t) salloc; sq->n = (int64_t) sq_n; sq->start = (int64_t) start; sq->end = (int64_t) end; sq->C = (int64_t) C; sq->W = (int64_t) W; sq->L = (int64_t) L; /* allocate strings */ sq->name = NULL; ESL_ALLOC(sq->name, sizeof(char) * sq->nalloc); sq->acc = NULL; ESL_ALLOC(sq->acc, sizeof(char) * sq->aalloc); sq->desc = NULL; ESL_ALLOC(sq->desc, sizeof(char) * sq->dalloc); sq->source = NULL; ESL_ALLOC(sq->source, sizeof(char) * sq->srcalloc); sq->seq = NULL; if (!do_digital) ESL_ALLOC(sq->seq, sizeof(char) * sq->salloc); sq->dsq = NULL; if ( do_digital) ESL_ALLOC(sq->dsq, sizeof(ESL_DSQ) * sq->salloc); sq->ss = NULL; /* ss and extra residue markups are optional - they will only be allocated if needed */ sq->xr_tag = NULL; sq->xr = NULL; /* unpack strings */ status = MPI_Unpack (buf, n, pos, sq->name, sq->nalloc, MPI_CHAR, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack (buf, n, pos, sq->acc, sq->aalloc, MPI_CHAR, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack (buf, n, pos, sq->desc, sq->dalloc, MPI_CHAR, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack (buf, n, pos, sq->source, sq->srcalloc, MPI_CHAR, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (do_digital) { status = MPI_Unpack (buf, n, pos, sq->dsq, sq->n+2, MPI_UNSIGNED_CHAR, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); } else { status = MPI_Unpack (buf, n, pos, sq->seq, sq->n+1, MPI_CHAR, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); } /* unpack the optional ss */ status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(sq->ss), NULL, MPI_CHAR, comm); if (status != eslOK) goto ERROR; /* unpack the optional extra residue markups */ if (sq->nxr > 0) { ESL_ALLOC(sq->xr, sizeof(char *) * sq->nxr); ESL_ALLOC(sq->xr_tag, sizeof(char *) * sq->nxr); for (x = 0; x < sq->nxr; x ++) { sq->xr[x] = NULL; sq->xr_tag[x] = NULL; status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(sq->xr_tag[x]), NULL, MPI_CHAR, comm); if (status != eslOK) goto ERROR; status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(sq->xr[x]), NULL, MPI_CHAR, comm); if (status != eslOK) goto ERROR; } } /* set disk offset bookkeeping */ sq->doff = -1; sq->roff = -1; sq->eoff = -1; /* pointer to alphabet */ if (do_digital) sq->abc = abc; *ret_sq = sq; return eslOK; ERROR: if (sq != NULL) esl_sq_Destroy(sq); *ret_sq = NULL; return status; } /* Function: esl_sq_MPIRecv() * Synopsis: Receives an as a work unit from an MPI sender. * Incept: ER, Thu Jun 19 10:53:40 EDT 2008 [Janelia] * * Purpose: Receive a work unit that consists of a single * sent by MPI (<0..nproc-1>, or * ) tagged as for MPI communicator . * * Work units are prefixed by a status code. If the unit's * code is and no errors are encountered, this * routine will return and a non- <*ret_esl_sq>. * If the unit's code is (a shutdown signal), * this routine returns and <*ret_esl_sq> is . * * Caller provides a working buffer <*buf> of size * <*nalloc> characters. These are passed by reference, so * that <*buf> can be reallocated and <*nalloc> increased * if necessary. As a special case, if <*buf> is and * <*nalloc> is 0, the buffer will be allocated * appropriately, but the caller is still responsible for * free'ing it. * * Returns: on success. <*ret_esl_sq> contains the received ; * it is allocated here, and the caller is responsible for * free'ing it. <*buf> may have been reallocated to a * larger size, and <*nalloc> may have been increased. * * Throws: on allocation error, in which case <*ret_esl_sq> is * . */ int esl_sq_MPIRecv(int source, int tag, MPI_Comm comm, const ESL_ALPHABET *abc, char **buf, int *nalloc, ESL_SQ **ret_sq) { int status; int code; int n; int pos; MPI_Status mpistatus; /* Probe first, because we need to know if our buffer is big enough. */ MPI_Probe(source, tag, comm, &mpistatus); MPI_Get_count(&mpistatus, MPI_PACKED, &n); /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* Receive the packed work unit */ MPI_Recv(*buf, n, MPI_PACKED, source, tag, comm, &mpistatus); /* Unpack it, looking at the status code prefix for EOD/EOK */ pos = 0; if (MPI_Unpack(*buf, n, &pos, &code, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (code == eslEOD) { *ret_sq = NULL; return eslEOD; } return esl_sq_MPIUnpack(abc, *buf, *nalloc, &pos, comm, ret_sq); ERROR: return status; } /*----------------- end, ESL_SQ communication -------------------*/ /***************************************************************** *# 3. Communicating ESL_MSA (multiple sequence alignments). *****************************************************************/ /* Function: esl_msa_MPISend() * Synopsis: Send essential msa info as an MPI work unit. * * Purpose: Sends the essential elements of a multiple alignment * as a work unit to MPI process ( ranges from <0..nproc-1>), * tagging the message with MPI tag for MPI communicator * . The receiver uses to receive the MSA. * * Work units are prefixed by a status code. If is * , the work unit is an code followed by * the packed MSA. If is NULL, the work unit is an * code, which knows how * to interpret; this is typically used for an end-of-data * signal to cleanly shut down worker processes. * * Only an essential subset of the elements in are * transmitted, sufficient to do computationally intensive * work on the . Most msa annotation is not * transmitted, for example. Specifically, , , * , , , or , , , * , , , , , and * are transmitted. * * In order to minimize alloc/free cycles, caller passes a * pointer to a working buffer <*buf> of size <*nalloc> * characters. If necessary (i.e. if is too big to * fit), <*buf> will be reallocated and <*nalloc> increased * to the new size. As a special case, if <*buf> is * and <*nalloc> is 0, the buffer will be allocated * appropriately, but the caller is still responsible for * free'ing it. * * Args: msa - msa to send * dest - MPI destination (0..nproc-1) * tag - MPI tag * buf - pointer to a working buffer * nalloc - current allocated size of <*buf>, in characters * * Returns: on success; <*buf> may have been reallocated and * <*nalloc> may have been increased. * * Throws: if an MPI call fails; if a malloc/realloc * fails. In either case, <*buf> and <*nalloc> remain valid and useful * memory (though the contents of <*buf> are undefined). * * Xref: J1/72. */ int esl_msa_MPISend(const ESL_MSA *msa, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc) { int status; int code; int sz, n, position; /* First, figure out the size of the MSA */ if (MPI_Pack_size(1, MPI_INT, comm, &n) != 0) ESL_EXCEPTION(eslESYS, "mpi pack size failed"); if (msa != NULL) { if ((status = esl_msa_MPIPackSize(msa, comm, &sz)) != eslOK) return status; n += sz; } ESL_DPRINTF2(("esl_msa_MPISend(): msa has size %d\n", n)); /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } ESL_DPRINTF2(("esl_msa_MPISend(): buffer is ready\n")); /* Pack the status code and MSA into the buffer */ position = 0; code = (msa == NULL) ? eslEOD : eslOK; if (MPI_Pack(&code, 1, MPI_INT, *buf, n, &position, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi pack failed"); if (msa != NULL) { if ((status = esl_msa_MPIPack(msa, *buf, n, &position, comm)) != eslOK) return status; } ESL_DPRINTF2(("esl_msa_MPISend(): msa is packed into %d bytes\n", position)); /* Send the packed profile to destination */ if (MPI_Send(*buf, n, MPI_PACKED, dest, tag, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi send failed"); ESL_DPRINTF2(("esl_msa_MPISend(): msa is sent.\n")); return eslOK; ERROR: return status; } /* Function: esl_msa_MPIPackSize() * Synopsis: Calculates number of bytes needed to pack an MSA. * Incept: SRE, Wed Jun 6 11:36:22 2007 [Janelia] * * Purpose: Calculate an upper bound on the number of bytes * that will need to pack an * essential subset of the data in MSA * in a packed MPI message in communicator ; * return that number of bytes in <*ret_n>. * * Caller will generally use this result to determine how * to allocate a buffer before starting to pack into it. * * If is (which can happen, if is * optional in the caller), size <*ret_n> is set to 0. * * Returns: on success, and <*ret_n> contains the answer. * * Throws: if an MPI call fails, and <*ret_n> is set to 0. * * Xref: J1/78-79. * * Note: The sizing calls here need to stay matched up with * the calls in . */ int esl_msa_MPIPackSize(const ESL_MSA *msa, MPI_Comm comm, int *ret_n) { int status; int sz; int n = 0; int i; if (msa == NULL) { *ret_n = 0; return eslOK; } status = MPI_Pack_size ( 1, MPI_INT, comm, &sz); n += 3*sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); status = MPI_Pack_size ( msa->nseq, MPI_DOUBLE, comm, &sz); n += sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); status = esl_mpi_PackOptSize(msa->name, -1, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; status = esl_mpi_PackOptSize(msa->desc, -1, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; status = esl_mpi_PackOptSize(msa->acc, -1, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; status = esl_mpi_PackOptSize(msa->au, -1, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; status = esl_mpi_PackOptSize(msa->ss_cons, msa->alen+1, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; status = esl_mpi_PackOptSize(msa->sa_cons, msa->alen+1, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; status = esl_mpi_PackOptSize(msa->pp_cons, msa->alen+1, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; status = esl_mpi_PackOptSize(msa->rf, msa->alen+1, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; status = esl_mpi_PackOptSize(msa->mm, msa->alen+1, MPI_CHAR, comm, &sz); n += sz; if (status != eslOK) goto ERROR; status = MPI_Pack_size ( eslMSA_NCUTS, MPI_FLOAT, comm, &sz); n += sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); status = MPI_Pack_size ( eslMSA_NCUTS, MPI_INT, comm, &sz); n += sz; if (status != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); /* alignment, digital or text: */ if (msa->ax != NULL) { if ((status = MPI_Pack_size ( msa->alen+2, MPI_UNSIGNED_CHAR, comm, &sz)) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz*msa->nseq; } else { if ((status = MPI_Pack_size ( msa->alen+1, MPI_CHAR, comm, &sz)) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz*msa->nseq; } /* seqnames: */ for (i = 0; i < msa->nseq; i++) { if ((status = esl_mpi_PackOptSize(msa->sqname[i], -1, MPI_CHAR, comm, &sz)) != eslOK) goto ERROR; n += sz; } *ret_n = n; return eslOK; ERROR: *ret_n = 0; return status; } /* Function: esl_msa_MPIPack() * Synopsis: Packs an MSA into MPI buffer. * Incept: SRE, Wed Jun 6 13:17:45 2007 [Janelia] * * Purpose: Packs essential subset of data in MSA into an MPI * packed message buffer of length bytes, * starting at byte position <*position>, for MPI * communicator . * * If is (which can happen, if is being * treated as optional in the caller), does nothing, and * just return . * * Returns: on success; now contains the * packed , and <*position> is set to the byte * immediately following the last byte of the MSA * in . * * Throws: if an MPI call fails; or if the * buffer's length is overflowed by trying to pack * into . In either case, the state of * and <*position> is undefined, and both should * be considered to be corrupted. * * Xref: J1/78-79. */ int esl_msa_MPIPack(const ESL_MSA *msa, char *buf, int n, int *position, MPI_Comm comm) { int status; int i; ESL_DPRINTF2(("esl_msa_MPIPack(): ready.\n")); if (msa == NULL) return eslOK; status = MPI_Pack ((void *) &(msa->nseq), 1, MPI_INT, buf, n, position, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack ((void *) &(msa->alen), 1, MPI_INT, buf, n, position, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack ((void *) &(msa->flags), 1, MPI_INT, buf, n, position, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack (msa->wgt, msa->nseq, MPI_DOUBLE, buf, n, position, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = esl_mpi_PackOpt(msa->name, -1, MPI_CHAR, buf, n, position, comm); if (status != eslOK) return status; status = esl_mpi_PackOpt(msa->desc, -1, MPI_CHAR, buf, n, position, comm); if (status != eslOK) return status; status = esl_mpi_PackOpt(msa->acc, -1, MPI_CHAR, buf, n, position, comm); if (status != eslOK) return status; status = esl_mpi_PackOpt(msa->au, -1, MPI_CHAR, buf, n, position, comm); if (status != eslOK) return status; status = esl_mpi_PackOpt(msa->ss_cons, msa->alen+1, MPI_CHAR, buf, n, position, comm); if (status != eslOK) return status; status = esl_mpi_PackOpt(msa->sa_cons, msa->alen+1, MPI_CHAR, buf, n, position, comm); if (status != eslOK) return status; status = esl_mpi_PackOpt(msa->pp_cons, msa->alen+1, MPI_CHAR, buf, n, position, comm); if (status != eslOK) return status; status = esl_mpi_PackOpt(msa->rf, msa->alen+1, MPI_CHAR, buf, n, position, comm); if (status != eslOK) return status; status = esl_mpi_PackOpt(msa->mm, msa->alen+1, MPI_CHAR, buf, n, position, comm); if (status != eslOK) return status; status = MPI_Pack ((void *) msa->cutoff, eslMSA_NCUTS, MPI_FLOAT, buf, n, position, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); status = MPI_Pack ((void *) msa->cutset, eslMSA_NCUTS, MPI_INT, buf, n, position, comm); if (status != 0) ESL_EXCEPTION(eslESYS, "pack failed"); for (i = 0; i < msa->nseq; i++) { status = esl_mpi_PackOpt(msa->sqname[i], -1, MPI_CHAR, buf, n, position, comm); if (status != eslOK) return status; if (msa->flags & eslMSA_DIGITAL) { if ((status = MPI_Pack (msa->ax[i], msa->alen+2, MPI_UNSIGNED_CHAR, buf, n, position, comm)) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); } else { if ((status = MPI_Pack (msa->aseq[i], msa->alen+1, MPI_CHAR, buf, n, position, comm)) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); } } ESL_DPRINTF2(("esl_msa_MPIPack(): done. Packed %d bytes into buffer of size %d\n", *position, n)); if (*position > n) ESL_EXCEPTION(eslEMEM, "buffer overflow"); return eslOK; } /* Function: esl_msa_MPIUnpack() * Synopsis: Unpacks an MSA from an MPI buffer. * Incept: SRE, Wed Jun 6 15:49:11 2007 [Janelia] * * Purpose: Unpack a newly allocated MSA from MPI packed buffer * , starting from position <*pos>, where the total length * of the buffer in bytes is . * * MSAs are usually transmitted in digital mode. In digital * mode, caller must provide the alphabet for this * MSA. (Thus the caller already know it before the MSA * arrives, by an appropriate initialization.) If MSAs are * being transmitted in text mode, is ignored; caller * may pass for it. * * Returns: on success. <*pos> is updated to the position of * the next element in to unpack (if any). <*ret_msa> * contains a newly allocated MSA, which the caller is * responsible for free'ing. * * Throws: on an MPI call failure. on allocation failure. * In either case, <*ret_msa> is , and the state of * and <*pos> is undefined and should be considered to be corrupted. * * Xref: J1/78-79 */ int esl_msa_MPIUnpack(const ESL_ALPHABET *abc, char *buf, int n, int *pos, MPI_Comm comm, ESL_MSA **ret_msa) { int status; ESL_MSA *msa = NULL; int nseq, alen, flags; int i; status = MPI_Unpack (buf, n, pos, &nseq, 1, MPI_INT, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack (buf, n, pos, &alen, 1, MPI_INT, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack (buf, n, pos, &flags, 1, MPI_INT, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (flags & eslMSA_DIGITAL) { if ((msa = esl_msa_CreateDigital(abc, nseq, alen)) == NULL) { status = eslEMEM; goto ERROR; } } else { if ((msa = esl_msa_Create(nseq, alen)) == NULL) { status = eslEMEM; goto ERROR; } } msa->flags = flags; status = MPI_Unpack (buf, n, pos, msa->wgt, nseq, MPI_DOUBLE, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->name), NULL, MPI_CHAR, comm); if (status != eslOK) goto ERROR; status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->desc), NULL, MPI_CHAR, comm); if (status != eslOK) goto ERROR; status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->acc), NULL, MPI_CHAR, comm); if (status != eslOK) goto ERROR; status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->au), NULL, MPI_CHAR, comm); if (status != eslOK) goto ERROR; status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->ss_cons), NULL, MPI_CHAR, comm); if (status != eslOK) goto ERROR; status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->sa_cons), NULL, MPI_CHAR, comm); if (status != eslOK) goto ERROR; status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->pp_cons), NULL, MPI_CHAR, comm); if (status != eslOK) goto ERROR; status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->rf) , NULL, MPI_CHAR, comm); if (status != eslOK) goto ERROR; status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->mm) , NULL, MPI_CHAR, comm); if (status != eslOK) goto ERROR; status = MPI_Unpack (buf, n, pos, msa->cutoff, eslMSA_NCUTS, MPI_FLOAT, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); status = MPI_Unpack (buf, n, pos, msa->cutset, eslMSA_NCUTS, MPI_INT, comm); if (status != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); for (i = 0; i < msa->nseq; i++) { status = esl_mpi_UnpackOpt(buf, n, pos, (void **) &(msa->sqname[i]), NULL, MPI_CHAR, comm); if (status != eslOK) goto ERROR; if (msa->flags & eslMSA_DIGITAL) { if ((status = MPI_Unpack (buf, n, pos, msa->ax[i], msa->alen+2, MPI_UNSIGNED_CHAR, comm)) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); } else { if ((status = MPI_Unpack (buf, n, pos, msa->aseq[i], msa->alen+1, MPI_CHAR, comm)) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); } } *ret_msa = msa; return eslOK; ERROR: if (msa != NULL) esl_msa_Destroy(msa); *ret_msa = NULL; return status; } /* Function: esl_msa_MPIRecv() * Synopsis: Receive essential MSA info as a work unit from MPI sender. * Incept: SRE, Fri Jun 1 11:01:04 2007 [Janelia] * * Purpose: Receives a work unit that consists of a single MSA from (<0..nproc-1>, or * ) tagged as from communicator . * * Work units are prefixed by a status code. If the unit's * code is and no errors are encountered, this * routine will return and a non- <*ret_msa>. * If the unit's code is (a shutdown signal), * this routine returns and <*ret_msa> is . * * MSAs are transmitted in digital mode. Caller must know and * provide the alphabet for this MSA. * * To minimize alloc/free cycles in this routine, caller * passes a pointer to a buffer <*buf> of size <*nalloc> * characters. These are passed by reference, because when * necessary, <*buf> will be reallocated and <*nalloc> * increased to the new size. As a special case, if <*buf> * is and <*nalloc> is 0, the buffer will be * allocated appropriately, but the caller is still * responsible for free'ing it. * * If the packed MSA is an end-of-data signal, return * , and <*ret_msa> is . * * Returns: on success. <*ret_msa> contains the new MSA; it * is allocated here, and the caller is responsible for * free'ing it. <*buf> may have been reallocated to a * larger size, and <*nalloc> may have been increased. * * * Throws: if an MPI call fails; if an allocation fails. * In either case, <*ret_msa> is NULL, and the and its size * <*nalloc> remain valid. * Xref: J1/72. */ int esl_msa_MPIRecv(int source, int tag, MPI_Comm comm, const ESL_ALPHABET *abc, char **buf, int *nalloc, ESL_MSA **ret_msa) { int status, code; ESL_MSA *msa = NULL; int n; int pos; MPI_Status mpistatus; /* Probe first, because we need to know if our buffer is big enough. */ if (MPI_Probe(source, tag, comm, &mpistatus) != 0) ESL_XEXCEPTION(eslESYS, "mpi probe failed"); if (MPI_Get_count(&mpistatus, MPI_PACKED, &n) != 0) ESL_XEXCEPTION(eslESYS, "mpi get count failed"); /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* Receive the packed work unit */ if (MPI_Recv(*buf, n, MPI_PACKED, source, tag, comm, &mpistatus) != 0) ESL_XEXCEPTION(eslESYS, "mpi recv failed"); /* Unpack it - where the first integer is a status code, OK or EOD */ pos = 0; if (MPI_Unpack (*buf, n, &pos, &code, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (code == eslEOD) { status = eslEOD; goto ERROR; } return esl_msa_MPIUnpack(abc, *buf, *nalloc, &pos, comm, ret_msa); ERROR: if (msa != NULL) esl_msa_Destroy(msa); *ret_msa = NULL; return status; } /*-------------------------- end, ESL_MSA -----------------------*/ /***************************************************************** *# 4. Communicating ESL_STOPWATCH (process timing) *****************************************************************/ /* Function: esl_stopwatch_MPIReduce() * Synopsis: Collect total parallel process time into master watch. * Incept: SRE, Thu Jun 14 13:27:20 2007 [Janelia] * * Purpose: Collect all user/sys times from stopped stopwatch from * all MPI processes, and sum them into the watch on the * master process of rank , for MPI communicator * . A subsequent will * then show total user/sys times, not just the master's * usage. * * This routine needs to be called synchronously on all * processes; it does a collective communication using * . * * Returns: on success. * * Throws: on MPI call failure. */ int esl_stopwatch_MPIReduce(ESL_STOPWATCH *w, int root, MPI_Comm comm) { double user_total; double sys_total; if (MPI_Reduce(&(w->user), &user_total, 1, MPI_DOUBLE, MPI_SUM, root, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi reduce failed"); if (MPI_Reduce(&(w->sys), &sys_total, 1, MPI_DOUBLE, MPI_SUM, root, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi reduce failed"); w->user = user_total; w->sys = sys_total; return eslOK; } /***************************************************************** * 5. Unit tests. *****************************************************************/ #ifdef eslMPI_TESTDRIVE /* Each MPI unit test for communications routines follows a similar * pattern: * - workers and master generate identical objects, possibly using * the same RNG * - each worker sends object to master * - master receives object, compares it to known object, and fails * if they aren't the same. * * This way, master is doing the failing and error output. */ static void utest_MSASendRecv(ESL_ALPHABET *abc, ESL_MSA *msa, int my_rank, int nproc) { ESL_MSA *xmsa = NULL; char *wbuf = NULL; int wn = 0; int i; if (my_rank == 0) { for (i = 1; i < nproc; i++) { ESL_DPRINTF1(("Master: receiving test msa\n")); esl_msa_MPIRecv(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, abc, &wbuf, &wn, &xmsa); ESL_DPRINTF1(("Master: test msa received\n")); if ((esl_msa_CompareMandatory(msa, xmsa) != eslOK) || (esl_CCompare(msa->name, xmsa->name) != eslOK) || (esl_CCompare(msa->desc, xmsa->desc) != eslOK) || (esl_CCompare(msa->acc, xmsa->acc) != eslOK) || (esl_CCompare(msa->au, xmsa->au) != eslOK) || (esl_CCompare(msa->ss_cons, xmsa->ss_cons) != eslOK) || (esl_CCompare(msa->sa_cons, xmsa->sa_cons) != eslOK) || (esl_CCompare(msa->pp_cons, xmsa->pp_cons) != eslOK) || (esl_CCompare(msa->rf, xmsa->rf) != eslOK) || (esl_CCompare(msa->mm, xmsa->mm) != eslOK)) esl_fatal("Received MSA is not identical to what was sent."); esl_msa_Destroy(xmsa); } } else { ESL_DPRINTF1(("Worker %d: sending test msa\n", my_rank)); esl_msa_MPISend(msa, 0, 0, MPI_COMM_WORLD, &wbuf, &wn); ESL_DPRINTF1(("Worker %d: test msa sent\n", my_rank)); } free(wbuf); return; } static void utest_MSAPackUnpack(ESL_ALPHABET *abc, ESL_MSA *msa, int my_rank, int nproc) { ESL_MSA *xmsa = NULL; char *wbuf = NULL; int wn = 0; int pin, pout; if (my_rank != 0) return; /* only execute this utest on the master. */ esl_msa_MPIPackSize(msa, MPI_COMM_WORLD, &wn); wbuf = malloc(sizeof(char) * wn); pin = 0; esl_msa_MPIPack(msa, wbuf, wn, &pin, MPI_COMM_WORLD); pout = 0; esl_msa_MPIUnpack(abc, wbuf, wn, &pout, MPI_COMM_WORLD, &xmsa); if (pin != pout) esl_fatal("unit test failed: packed and unpacked sizes differ"); if ((esl_msa_CompareMandatory(msa, xmsa) != eslOK) || (esl_CCompare(msa->name, xmsa->name) != eslOK) || (esl_CCompare(msa->desc, xmsa->desc) != eslOK) || (esl_CCompare(msa->acc, xmsa->acc) != eslOK) || (esl_CCompare(msa->au, xmsa->au) != eslOK) || (esl_CCompare(msa->ss_cons, xmsa->ss_cons) != eslOK) || (esl_CCompare(msa->sa_cons, xmsa->sa_cons) != eslOK) || (esl_CCompare(msa->pp_cons, xmsa->pp_cons) != eslOK) || (esl_CCompare(msa->rf, xmsa->rf) != eslOK) || (esl_CCompare(msa->mm, xmsa->mm) != eslOK)) esl_fatal("Unpacked MSA is not identical to what was packed."); esl_msa_Destroy(xmsa); free(wbuf); return; } #endif /*eslMPI_TESTDRIVE*/ /*----------------------- end, unit tests -----------------------*/ /***************************************************************** * 6. Test driver. *****************************************************************/ #ifdef eslMPI_TESTDRIVE /* mpicc -o mpi_utest -g -Wall -I. -L. -DeslMPI_TESTDRIVE esl_mpi.c -leasel -lm * In an MPI environment: * mpirun C ./mpi_utest */ #include "esl_getopts.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-m", eslARG_INFILE, FALSE, NULL, NULL, NULL, NULL, NULL, "read test MSA from file ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "test digital mode MSA communication", 0 }, { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "arrest after start: for debugging MPI under gdb", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for the Easel mpi module"; int main(int argc, char **argv) { ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_ALPHABET *abc = NULL; ESLX_MSAFILE *afp = NULL; ESL_MSA *msa = NULL; int do_stall = FALSE; int my_rank; int nproc; /* For debugging: stall until GDB can be attached */ if (esl_opt_GetBoolean(go, "--stall")) do_stall = TRUE; while (do_stall); /* Get a test MSA and alphabet. */ if (esl_opt_GetString(go, "-m") != NULL) { if (eslx_msafile_Open(&abc, esl_opt_GetString(go, "-m"), eslMSAFILE_UNKNOWN, NULL, &afp) != eslOK) esl_fatal("msa file open failed"); if (eslx_msafile_Read(afp, &msa) != eslOK) esl_fatal("msa read failed"); eslx_msafile_Close(afp); } else { abc = esl_alphabet_Create(eslAMINO); if ( (eslx_msafile_OpenMem(&abc, "# STOCKHOLM 1.0\n\nNIFE_CLOPA GYVGS\nNIFD_AZOVI GFDGF\nNIFD_BRAJA GYDGF\nNIFK_ANASP GYQGG\n//\n", -1, eslMSAFILE_STOCKHOLM, NULL, &afp)) != eslOK) esl_fatal("msa creation failed"); if (eslx_msafile_Read(afp, &msa) != eslOK) esl_fatal("msa read failed"); eslx_msafile_Close(afp); } MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &nproc); utest_MSAPackUnpack(abc, msa, my_rank, nproc); utest_MSASendRecv (abc, msa, my_rank, nproc); MPI_Finalize(); esl_alphabet_Destroy(abc); esl_msa_Destroy(msa); return eslOK; } #endif /*eslMPI_TESTDRIVE*/ /*---------------------- end, test driver -----------------------*/ /***************************************************************** * 7. Example. *****************************************************************/ /*------------------------ end, example -------------------------*/ #else /*!(HAVE_MPI && eslLIBRARY)*/ /* If we don't have MPI compiled in, provide some nothingness to: * a. prevent Mac OS/X ranlib from bitching about .o file that "has no symbols" * b. prevent compiler from bitching about "empty compilation unit" * c. automatically pass the automated tests. */ #include "easel.h" void esl_mpi_DoAbsolutelyNothing(void) { return; } #if defined eslMPI_TESTDRIVE || eslMPI_EXAMPLE || eslMPI_BENCHMARK int main(void) { return 0; } #endif #endif /*HAVE_MPI && eslLIBRARY*/ /***************************************************************** * Easel - a library of C functions for biological sequence analysis * Version h3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * Easel is distributed under the Janelia Farm Software License, a BSD * license. See the LICENSE file for more details. * * SVN $Id: esl_mpi.c 804 2012-09-13 19:25:00Z rivase $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/easel/branches/hmmer/3.1/esl_mpi.c $ *****************************************************************/ hmmer-3.1b2/easel/esl_composition.c0000664361611702660230000001071012473612606016734 0ustar wheelerteddy#include "esl_config.h" #include "easel.h" #include "esl_composition.h" /* Function: esl_composition_BL62() * * Purpose: Sets to the background frequencies used in * \citep{Henikoff92} to calculate the BLOSUM62 * substitution matrix. Caller provides space in * allocated for at least 20 doubles. The entries are in * alphabetic order A..Y, same as the standard Easel amino * acid alphabet order. * * Returns: on success. */ int esl_composition_BL62(double *f) { f[0] = 0.074; f[1] = 0.025; f[2] = 0.054; f[3] = 0.054; f[4] = 0.047; f[5] = 0.074; f[6] = 0.026; f[7] = 0.068; f[8] = 0.058; f[9] = 0.099; f[10] = 0.025; f[11] = 0.045; f[12] = 0.039; f[13] = 0.034; f[14] = 0.052; f[15] = 0.057; f[16] = 0.051; f[17] = 0.073; f[18] = 0.013; f[19] = 0.032; return eslOK; } /* Function: esl_composition_WAG() * * Purpose: Sets to the background frequencies used in * \citep{WhelanGoldman01} to calculate the WAG rate * matrix. Caller provides space in allocated for at * least 20 doubles. The entries are in alphabetic order * A..Y, same as the standard Easel amino acid alphabet * order. * * Returns: on success. */ int esl_composition_WAG(double *f) { f[0] = 0.086628; /* A */ f[1] = 0.019308; /* C */ f[2] = 0.057045; /* D */ f[3] = 0.058059; /* E */ f[4] = 0.038432; /* F */ f[5] = 0.083252; /* G */ f[6] = 0.024431; /* H */ f[7] = 0.048466; /* I */ f[8] = 0.062029; /* K */ f[9] = 0.086209; /* L */ f[10] = 0.019503; /* M */ f[11] = 0.039089; /* N */ f[12] = 0.045763; /* P */ f[13] = 0.036728; /* Q */ f[14] = 0.043972; /* R */ f[15] = 0.069518; /* S */ f[16] = 0.061013; /* T */ f[17] = 0.070896; /* V */ f[18] = 0.014386; /* W */ f[19] = 0.035274; /* Y */ return eslOK; } /* Function: esl_composition_SW34() * * Purpose: Sets to the background frequencies observed in * Swiss-Prot release 34 (21.2M residues). Caller provides * space in allocated for at least 20 doubles. The * entries are in alphabetic order A..Y, same as the * standard Easel amino acid alphabet order. * * Returns: on success. */ int esl_composition_SW34(double *f) { f[0] = 0.075520; /* A */ f[1] = 0.016973; /* C */ f[2] = 0.053029; /* D */ f[3] = 0.063204; /* E */ f[4] = 0.040762; /* F */ f[5] = 0.068448; /* G */ f[6] = 0.022406; /* H */ f[7] = 0.057284; /* I */ f[8] = 0.059398; /* K */ f[9] = 0.093399; /* L */ f[10] = 0.023569; /* M */ f[11] = 0.045293; /* N */ f[12] = 0.049262; /* P */ f[13] = 0.040231; /* Q */ f[14] = 0.051573; /* R */ f[15] = 0.072214; /* S */ f[16] = 0.057454; /* T */ f[17] = 0.065252; /* V */ f[18] = 0.012513; /* W */ f[19] = 0.031985; /* Y */ return eslOK; } /* Function: esl_composition_SW50() * * Purpose: Sets to the background frequencies observed in * Swiss-Prot release 50.8 (86.0M residues; Oct 2006). * * Returns: on success. */ int esl_composition_SW50(double *f) { f[0] = 0.0787945; /* A */ f[1] = 0.0151600; /* C */ f[2] = 0.0535222; /* D */ f[3] = 0.0668298; /* E */ f[4] = 0.0397062; /* F */ f[5] = 0.0695071; /* G */ f[6] = 0.0229198; /* H */ f[7] = 0.0590092; /* I */ f[8] = 0.0594422; /* K */ f[9] = 0.0963728; /* L */ f[10]= 0.0237718; /* M */ f[11]= 0.0414386; /* N */ f[12]= 0.0482904; /* P */ f[13]= 0.0395639; /* Q */ f[14]= 0.0540978; /* R */ f[15]= 0.0683364; /* S */ f[16]= 0.0540687; /* T */ f[17]= 0.0673417; /* V */ f[18]= 0.0114135; /* W */ f[19]= 0.0304133; /* Y */ return eslOK; } hmmer-3.1b2/easel/esl_minimizer.c0000664361611702660230000005541212473612606016404 0ustar wheelerteddy/* Multidimensional optimization using conjugate gradient descent. * * Can be used even without derivative information; falls back to * a numeric gradient if analytic gradient is unavailable. */ #include "esl_config.h" #include #include #include "easel.h" #include "esl_vectorops.h" #include "esl_minimizer.h" /* Return the negative gradient at a point, determined * numerically. */ static void numeric_derivative(double *x, double *u, int n, double (*func)(double *, int, void*), void *prm, double relstep, double *dx) { int i; double delta; double f1, f2; double tmp; for (i = 0; i < n; i++) { delta = fabs(u[i] * relstep); tmp = x[i]; x[i] = tmp + delta; f1 = (*func)(x, n, prm); x[i] = tmp - delta; f2 = (*func)(x, n, prm); x[i] = tmp; dx[i] = (-0.5 * (f1-f2)) / delta; ESL_DASSERT1((! isnan(dx[i]))); } } /* bracket(): * SRE, Wed Jul 27 11:43:32 2005 [St. Louis] * * Purpose: Bracket a minimum. * * The minimization is quasi-one-dimensional, * starting from an initial -dimension vector * in the -dimensional direction . * * Caller passes a ptr to the objective function <*func()>, * and a void pointer to any necessary conditional * parameters . The objective function will * be evaluated at a point by calling * <(*func)(x, n, prm)>. The caller's function * is responsible to casting to whatever it's * supposed to be, which might be a ptr to a structure, * for example; typically, for a parameter optimization * problem, this holds the observed data. * * The routine works in scalar multipliers relative * to origin and direction ; that is, a new -dimensional * point is defined as + , for a scalar . * * The routine identifies a triplet , , such * that $a < b < c$ and such that a minimum is known to * exist in the $(a,b)$ interval because $f(b) < f(a), * f(c)$. Also, the and intervals are in * a golden ratio; the interval is 1.618 times larger * than . * * Since is usually in the direction of the gradient, * the points ,, might be expected to be $\geq 0$; * however, when is already close to the minimum, * it is often faster to bracket the minimum using * a negative . The caller might then try to be "clever" * and assume that the minimum is in the interval * when is negative, rather than the full * interval. That cleverness can fail, though, if * is already in fact the minimum, because the line minimizer * in brent() assumes a non-inclusive interval. Use * as the bracket. * * Args: ori - n-dimensional starting vector * d - n-dimensional direction to minimize along * n - # of dimensions * firststep - bx is initialized to this scalar multiplier * *func() - objective function to minimize * prm - void * to any constant data that *func() needs * wrk - workspace: 1 allocated n-dimensional vector * ret_ax - RETURN: ax < bx < cx scalar bracketing triplet * ret_bx - RETURN: ...ax may be negative * ret_cx - RETURN: * ret_fa - RETURN: function evaluated at a,b,c * ret_fb - RETURN: ... f(b) < f(a),f(c) * ret_fc - RETURN: * * Returns: on success. * * Throws: if it fails to converge. * * Xref: STL9/130. */ static int bracket(double *ori, double *d, int n, double firststep, double (*func)(double *, int, void *), void *prm, double *wrk, double *ret_ax, double *ret_bx, double *ret_cx, double *ret_fa, double *ret_fb, double *ret_fc) { double ax,bx,cx; /* scalar multipliers */ double fa,fb,fc; /* f() evaluations at those points */ double swapper; int niter; /* Set and evaluate our first two points f(a) and f(b), which * are initially at 0.0 and . */ ax = 0.; /* always start w/ ax at the origin, ax=0 */ fa = (*func)(ori, n, prm); bx = firststep; esl_vec_DCopy(ori, n, wrk); esl_vec_DAddScaled(wrk, d, bx, n); fb = (*func)(wrk, n, prm); /* In principle, we usually know that the minimum m lies to the * right of a, m>=a, because d is likely to be a gradient. You * might think we want 0 = a < b < c. In practice, there's problems * with that. It's far easier to identify bad points (f(x) > f(a)) * than to identify good points (f(x) < f(a)), because letting f(x) * blow up to infinity is fine as far as bracketing is concerned. * It can be almost as hard to identify a point b that f(b) < f(a) * as it is to find the minimum in the first place! * Counterintuitively, in cases where f(b)>f(a), it's better * to just swap the a,b labels and look for c on the wrong side * of a! This often works immediately, if f(a) was reasonably * close to the minimum and f(b) and f(c) are both terrible. */ if (fb > fa) { swapper = ax; ax = bx; bx = swapper; swapper = fa; fa = fb; fb = swapper; } /* Make our first guess at c. * Remember, we don't know that b>a any more, and c might go negative. * We'll either have: a..b...c with a=0; * or: c...b..a with b=0. * In many cases, we'll immediately be done. */ cx = bx + (bx-ax)*1.618; esl_vec_DCopy(ori, n, wrk); esl_vec_DAddScaled(wrk, d, cx, n); fc = (*func)(wrk, n, prm); /* We're not satisfied until fb < fa, fc; * throughout the routine, we guarantee that fb < fa; * so we just check fc. */ niter = 0; while (fc <= fb) { /* Slide over, discarding the a point; choose * new c point even further away. */ ax = bx; bx = cx; fa = fb; fb = fc; cx = bx+(bx-ax)*1.618; esl_vec_DCopy(ori, n, wrk); esl_vec_DAddScaled(wrk, d, cx, n); fc = (*func)(wrk, n, prm); /* This is a rare instance. We've reach the minimum * by trying to bracket it. Also check that not all * three points are the same. */ if (ax != bx && bx != cx && fa == fb && fb == fc) break; niter++; if (niter > 100) ESL_EXCEPTION(eslENORESULT, "Failed to bracket a minimum."); } /* We're about to return. Assure the caller that the points * are in order a < b < c, not the other way. */ if (ax > cx) { swapper = ax; ax = cx; cx = swapper; swapper = fa; fa = fc; fc = swapper; } /* Return. */ ESL_DPRINTF2(("\nbracket(): %d iterations\n", niter)); ESL_DPRINTF2(("bracket(): triplet is %g %g %g along current direction\n", ax, bx, cx)); ESL_DPRINTF2(("bracket(): f()'s there are: %g %g %g\n\n", fa, fb, fc)); *ret_ax = ax; *ret_bx = bx; *ret_cx = cx; *ret_fa = fa; *ret_fb = fb; *ret_fc = fc; return eslOK; } /* brent(): * SRE, Sun Jul 10 19:07:05 2005 [St. Louis] * * Purpose: Quasi-one-dimensional minimization of a function <*func()> * in -dimensions, along vector

as a work unit to MPI process * (where ranges from 0..), tagged * with MPI tag , for MPI communicator , as * the sole workunit or result. * * After the TOPHITS information has been sent, send * the each hit as an indepentant message. * * Returns: on success; <*buf> may have been reallocated and * <*nalloc> may have been increased. * * Throws: if an MPI call fails; if a malloc/realloc * fails. In either case, <*buf> and <*nalloc> remain valid and useful * memory (though the contents of <*buf> are undefined). */ int p7_tophits_MPISend(P7_TOPHITS *th, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc) { int status; int sz, n, pos; int i, j, inx; P7_DOMAIN *dcl = NULL; P7_HIT *hit = NULL; n = 0; sz = 0; /* calculate the buffer size needed to hold the largest hit */ hit = th->unsrt; for (i = 0; i < th->N; ++i) { for (j = 0; j < th->unsrt[i].ndom; ++j) { if (sz <= hit->dcl[j].ad->memsize) { sz = hit->dcl[j].ad->memsize; dcl = &hit->dcl[j]; } } ++hit; } if (th->N > 0) { if ((status = p7_hit_MPIPackSize(th->unsrt, comm, &n)) != eslOK) goto ERROR; if (dcl != NULL) { if ((status = p7_dcl_MPIPackSize(dcl, comm, &sz)) != eslOK) goto ERROR; n = (n > sz) ? n : sz; } } if (MPI_Pack_size(3, MPI_LONG_LONG_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n = (n > sz) ? n : sz; /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } pos = 0; if (MPI_Pack(&th->N, 1, MPI_LONG_LONG_INT, *buf, n, &pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&th->nreported, 1, MPI_LONG_LONG_INT, *buf, n, &pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&th->nincluded, 1, MPI_LONG_LONG_INT, *buf, n, &pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); /* Send the packed tophits information */ if (MPI_Send(*buf, n, MPI_PACKED, dest, tag, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi send failed"); if (th->N == 0) return eslOK; /* loop through the hit list sending to dest */ hit = th->unsrt; for (inx = 0; inx < th->N; ++inx) { if ((status = p7_hit_MPISend(hit, dest, tag, comm, buf, nalloc)) != eslOK) goto ERROR; ++hit; } return eslOK; ERROR: return status; } /* Function: p7_tophits_MPIRecv() * Synopsis: Receives an TOPHITS as a work unit from an MPI sender. * * Purpose: Sends the TOPHITS as a work unit to MPI process * (where ranges from 0..), tagged * with MPI tag , for MPI communicator , as * the sole workunit or result. * * After the TOPHITS information has been sent, send * the each hit as an indepentant message. * * Returns: on success; <*buf> may have been reallocated and * <*nalloc> may have been increased. * * Throws: if an MPI call fails; if a malloc/realloc * fails. In either case, <*buf> and <*nalloc> remain valid and useful * memory (though the contents of <*buf> are undefined). */ int p7_tophits_MPIRecv(int source, int tag, MPI_Comm comm, char **buf, int *nalloc, P7_TOPHITS **ret_th) { int n; int status; int pos; P7_TOPHITS *th = NULL; P7_HIT *hit = NULL; MPI_Status mpistatus; uint64_t nhits; uint64_t inx; /* Probe first, because we need to know if our buffer is big enough. */ MPI_Probe(source, tag, comm, &mpistatus); MPI_Get_count(&mpistatus, MPI_PACKED, &n); /* make sure we are getting the tag we expect and from whom we expect if from */ if (tag != MPI_ANY_TAG && mpistatus.MPI_TAG != tag) { status = eslFAIL; goto ERROR; } if (source != MPI_ANY_SOURCE && mpistatus.MPI_SOURCE != source) { status = eslFAIL; goto ERROR; } /* set the source and tag */ tag = mpistatus.MPI_TAG; source = mpistatus.MPI_SOURCE; /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* Receive the packed top hits */ MPI_Recv(*buf, n, MPI_PACKED, source, tag, comm, &mpistatus); /* Unpack it - watching out for the EOD signal of M = -1. */ pos = 0; if ((th = p7_tophits_Create()) == NULL) { status = eslEMEM; goto ERROR; } if (MPI_Unpack(*buf, n, &pos, &nhits, 1, MPI_LONG_LONG_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &pos, &th->nreported, 1, MPI_LONG_LONG_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); if (MPI_Unpack(*buf, n, &pos, &th->nincluded, 1, MPI_LONG_LONG_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "unpack failed"); /* loop through all of the hits sent */ for (inx = 0; inx < nhits; ++inx) { if ((status = p7_tophits_CreateNextHit(th, &hit)) != eslOK) goto ERROR; if ((status = p7_hit_MPIRecv(source, tag, comm, buf, nalloc, hit)) != eslOK) goto ERROR; } *ret_th = th; return eslOK; ERROR: if (th != NULL) p7_tophits_Destroy(th); *ret_th = NULL; return status; } /* Function: p7_hit_MPISend() */ int p7_hit_MPISend(P7_HIT *hit, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc) { int inx; int status; int pos; int n = *nalloc; /* Pack the HIT into the buffer */ pos = 0; if ((status = p7_hit_MPIPack(hit, *buf, n, &pos, comm)) != eslOK) goto ERROR; /* Send the packed HIT to the destination. */ if (MPI_Send(*buf, n, MPI_PACKED, dest, tag, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi send failed"); /* loop through all of the domains */ for (inx = 0; inx < hit->ndom; ++inx) { if ((status = p7_dcl_MPISend(hit->dcl + inx, dest, tag, comm, buf, nalloc)) != eslOK) goto ERROR; } return eslOK; ERROR: return status; } /* Function: p7_hit_MPIRecv() */ int p7_hit_MPIRecv(int source, int tag, MPI_Comm comm, char **buf, int *nalloc, P7_HIT *hit) { int n; int status; int pos; int inx; MPI_Status mpistatus; /* Probe first, because we need to know if our buffer is big enough. */ MPI_Probe(source, tag, comm, &mpistatus); MPI_Get_count(&mpistatus, MPI_PACKED, &n); /* make sure we are getting the tag we expect and from whom we expect if from */ if (tag != MPI_ANY_TAG && mpistatus.MPI_TAG != tag) { status = eslFAIL; goto ERROR; } if (source != MPI_ANY_SOURCE && mpistatus.MPI_SOURCE != source) { status = eslFAIL; goto ERROR; } /* set the source and tag */ tag = mpistatus.MPI_TAG; source = mpistatus.MPI_SOURCE; /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* Receive the packed top hits */ MPI_Recv(*buf, n, MPI_PACKED, source, tag, comm, &mpistatus); /* Unpack it - watching out for the EOD signal of M = -1. */ pos = 0; if ((status = p7_hit_MPIUnpack(*buf, n, &pos, comm, hit)) != eslOK) goto ERROR; ESL_ALLOC(hit->dcl, sizeof(P7_DOMAIN) * hit->ndom); /* loop through all of the hits sent */ for (inx = 0; inx < hit->ndom; ++inx) { if ((status = p7_dcl_MPIRecv(source, tag, comm, buf, nalloc, hit->dcl + inx)) != eslOK) goto ERROR; } return eslOK; ERROR: return status; } /* Function: p7_hit_MPIPackSize() * Synopsis: Calculates size needed to pack a HIT. * * Purpose: Calculate an upper bound on the number of bytes * that will need to pack an P7_HIT * in a packed MPI message for MPI communicator * ; return that number of bytes in <*ret_n>. * * Returns: on success, and <*ret_n> contains the answer. * * Throws: if an MPI call fails, and <*ret_n> is 0. */ int p7_hit_MPIPackSize(P7_HIT *hit, MPI_Comm comm, int *ret_n) { int status; int n = 0; int sz; /* P7_HIT data */ if (MPI_Pack_size(1, MPI_DOUBLE, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* sortkey */ if (MPI_Pack_size(3, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* scores */ if (MPI_Pack_size(3, MPI_DOUBLE, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* lnP */ if (MPI_Pack_size(1, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* expected */ if (MPI_Pack_size(5, MPI_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* region, envelopes, ndom */ if (MPI_Pack_size(4, MPI_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* report info */ if ((status = esl_mpi_PackOptSize(hit->name, -1, MPI_CHAR, comm, &sz)) != eslOK) goto ERROR; n += sz; if ((status = esl_mpi_PackOptSize(hit->acc, -1, MPI_CHAR, comm, &sz)) != eslOK) goto ERROR; n += sz; if ((status = esl_mpi_PackOptSize(hit->desc, -1, MPI_CHAR, comm, &sz)) != eslOK) goto ERROR; n += sz; *ret_n = n; return eslOK; ERROR: *ret_n = 0; return status; } /* Function: p7_hit_MPIPack() * Synopsis: Packs the HIT into MPI buffer. * * Purpose: Packs HIT into an MPI packed message buffer * of length bytes, starting at byte position <*position>, * for MPI communicator . * * The caller must know that 's allocation of * bytes is large enough to append the packed HIT at * position <*pos>. This typically requires a call to * first, and reallocation if * needed. * * Returns: on success; now contains the * packed , and <*position> is set to the byte * immediately following the last byte of the HIT * in . * * Throws: if an MPI call fails; or if the * buffer's length was overflowed in trying to pack * into . In either case, the state of * and <*position> is undefined, and both should * be considered to be corrupted. */ int p7_hit_MPIPack(P7_HIT *hit, char *buf, int n, int *pos, MPI_Comm comm) { int status; if (MPI_Pack(&hit->sortkey, 1, MPI_DOUBLE, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->score, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->pre_score, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->sum_score, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->lnP, 1, MPI_DOUBLE, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->pre_lnP, 1, MPI_DOUBLE, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->sum_lnP, 1, MPI_DOUBLE, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->nexpected, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->nregions, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->nclustered, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->noverlaps, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->nenvelopes, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->ndom, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->flags, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->nreported, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->nincluded, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&hit->best_domain, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if ((status = esl_mpi_PackOpt(hit->name, -1, MPI_CHAR, buf, n, pos, comm)) != eslOK) return status; if ((status = esl_mpi_PackOpt(hit->acc, -1, MPI_CHAR, buf, n, pos, comm)) != eslOK) return status; if ((status = esl_mpi_PackOpt(hit->desc, -1, MPI_CHAR, buf, n, pos, comm)) != eslOK) return status; if (*pos > n) ESL_EXCEPTION(eslEMEM, "buffer overflow"); return eslOK; ERROR: return status; } /* Function: p7_hit_MPIUnpack() * Synopsis: Unpacks an HIT from an MPI buffer. * * Purpose: Unpack a newly allocated HIT from MPI packed buffer * , starting from position <*pos>, where the total length * of the buffer in bytes is . * * Returns: on success. <*pos> is updated to the position of * the next element in to unpack (if any). <*ret_hit> * contains a newly allocated HIT, which the caller is * responsible for free'ing. * * Throws: on an MPI call failure. on allocation failure. * In either case, <*ret_hit> is , and the state of * and <*pos> is undefined and should be considered to be corrupted. */ int p7_hit_MPIUnpack(char *buf, int n, int *pos, MPI_Comm comm, P7_HIT *hit) { int status; if (MPI_Unpack(buf, n, pos, &hit->sortkey, 1, MPI_DOUBLE, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->score, 1, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->pre_score, 1, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->sum_score, 1, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->lnP, 1, MPI_DOUBLE, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->pre_lnP, 1, MPI_DOUBLE, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->sum_lnP, 1, MPI_DOUBLE, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->nexpected, 1, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->nregions, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->nclustered, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->noverlaps, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->nenvelopes, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->ndom, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->flags, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->nreported, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->nincluded, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hit->best_domain, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if ((status = esl_mpi_UnpackOpt(buf, n, pos, (void**)&(hit->name), NULL, MPI_CHAR, comm)) != eslOK) goto ERROR; if ((status = esl_mpi_UnpackOpt(buf, n, pos, (void**)&(hit->acc), NULL, MPI_CHAR, comm)) != eslOK) goto ERROR; if ((status = esl_mpi_UnpackOpt(buf, n, pos, (void**)&(hit->desc), NULL, MPI_CHAR, comm)) != eslOK) goto ERROR; return eslOK; ERROR: return status; } /* Function: p7_dcl_MPISend() */ int p7_dcl_MPISend(P7_DOMAIN *dcl, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc) { int status; int pos; int n = *nalloc; /* Pack the DOMAIN into the buffer */ pos = 0; if ((status = p7_dcl_MPIPack(dcl, *buf, n, &pos, comm)) != eslOK) goto ERROR; /* Send the packed HIT to the destination. */ if (MPI_Send(*buf, n, MPI_PACKED, dest, tag, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi send failed"); return eslOK; ERROR: return status; } /* Function: p7_dcl_MPIPackSize() */ int p7_dcl_MPIPackSize(P7_DOMAIN *dcl, MPI_Comm comm, int *ret_n) { int status; int n = 0; int sz; P7_ALIDISPLAY *ad = dcl->ad; /* P7_DOMAIN data */ if (MPI_Pack_size(4, MPI_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* alignment info */ if (MPI_Pack_size(5, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* score info */ if (MPI_Pack_size(1, MPI_DOUBLE, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* lnP */ if (MPI_Pack_size(2, MPI_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* thresholds */ /* P7_ALIDISPLAY data */ if (MPI_Pack_size(17, MPI_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* offset info */ if (MPI_Pack_size(3, MPI_LONG, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* sequence info */ if (MPI_Pack_size(1, MPI_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* string pool size */ if (MPI_Pack_size(ad->memsize, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* string pool */ *ret_n = n; return eslOK; ERROR: *ret_n = 0; return status; } /* Function: p7_dcl_MPIPack() */ int p7_dcl_MPIPack(P7_DOMAIN *dcl, char *buf, int n, int *pos, MPI_Comm comm) { int status; int offset; P7_ALIDISPLAY *ad = dcl->ad; if (MPI_Pack(&dcl->ienv, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&dcl->jenv, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&dcl->iali, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&dcl->jali, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&dcl->envsc, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&dcl->domcorrection, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&dcl->dombias, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&dcl->oasc, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&dcl->bitscore, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&dcl->lnP, 1, MPI_DOUBLE, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&dcl->is_reported, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&dcl->is_included, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); offset = (ad->rfline == NULL) ? -1 : ad->rfline - ad->mem; if (MPI_Pack(&offset, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); offset = (ad->mmline == NULL) ? -1 : ad->mmline - ad->mem; if (MPI_Pack(&offset, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); offset = (ad->csline == NULL) ? -1 : ad->csline - ad->mem; if (MPI_Pack(&offset, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); offset = (ad->model == NULL) ? -1 : ad->model - ad->mem; if (MPI_Pack(&offset, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); offset = (ad->mline == NULL) ? -1 : ad->mline - ad->mem; if (MPI_Pack(&offset, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); offset = (ad->aseq == NULL) ? -1 : ad->aseq - ad->mem; if (MPI_Pack(&offset, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); offset = (ad->ppline == NULL) ? -1 : ad->ppline - ad->mem; if (MPI_Pack(&offset, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&ad->N, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); offset = (ad->hmmname == NULL) ? -1 : ad->hmmname - ad->mem; if (MPI_Pack(&offset, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); offset = (ad->hmmacc == NULL) ? -1 : ad->hmmacc - ad->mem; if (MPI_Pack(&offset, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); offset = (ad->hmmdesc == NULL) ? -1 : ad->hmmdesc - ad->mem; if (MPI_Pack(&offset, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&ad->hmmfrom, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&ad->hmmto, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&ad->M, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); offset = (ad->sqname == NULL) ? -1 : ad->sqname - ad->mem; if (MPI_Pack(&offset, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); offset = (ad->sqacc == NULL) ? -1 : ad->sqacc - ad->mem; if (MPI_Pack(&offset, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); offset = (ad->sqdesc == NULL) ? -1 : ad->sqdesc - ad->mem; if (MPI_Pack(&offset, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&ad->sqfrom, 1, MPI_LONG, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&ad->sqto, 1, MPI_LONG, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&ad->L, 1, MPI_LONG, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&ad->memsize, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( ad->mem, ad->memsize, MPI_CHAR, buf, n, pos, comm) != 0) ESL_XEXCEPTION(eslESYS, "pack failed"); if (*pos > n) ESL_EXCEPTION(eslEMEM, "buffer overflow"); return eslOK; ERROR: return status; } /* Function: p7_dcl_MPIUnpack() */ int p7_dcl_MPIUnpack(char *buf, int n, int *pos, MPI_Comm comm, P7_DOMAIN *dcl) { int status; int rfline, mmline, csline, model, mline, aseq, ppline; int hmmname, hmmacc, hmmdesc; int sqname, sqacc, sqdesc; P7_ALIDISPLAY *ad; ESL_ALLOC(ad, sizeof(P7_ALIDISPLAY)); if (MPI_Unpack(buf, n, pos, &dcl->ienv, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &dcl->jenv, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &dcl->iali, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &dcl->jali, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &dcl->envsc, 1, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &dcl->domcorrection, 1, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &dcl->dombias, 1, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &dcl->oasc, 1, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &dcl->bitscore, 1, MPI_FLOAT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &dcl->lnP, 1, MPI_DOUBLE, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &dcl->is_reported, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &dcl->is_included, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &rfline, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &mmline, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &csline, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &model, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &mline, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &aseq, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &ppline, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &ad->N, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hmmname, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hmmacc, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &hmmdesc, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &ad->hmmfrom, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &ad->hmmto, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &ad->M, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &sqname, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &sqacc, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &sqdesc, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &ad->sqfrom, 1, MPI_LONG, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &ad->sqto, 1, MPI_LONG, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &ad->L, 1, MPI_LONG, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &ad->memsize, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); dcl->scores_per_pos = NULL; /*this field is used for nhmmer, which currently doesn't have MPI support */ /* allocate the string pools for the alignments */ ESL_ALLOC(ad->mem, ad->memsize); if (MPI_Unpack(buf, n, pos, ad->mem, ad->memsize, MPI_CHAR, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); ad->rfline = (rfline == -1) ? NULL : ad->mem + rfline; ad->mmline = (mmline == -1) ? NULL : ad->mem + mmline; ad->csline = (csline == -1) ? NULL : ad->mem + csline; ad->model = (model == -1) ? NULL : ad->mem + model; ad->mline = (mline == -1) ? NULL : ad->mem + mline; ad->aseq = (aseq == -1) ? NULL : ad->mem + aseq; ad->ppline = (ppline == -1) ? NULL : ad->mem + ppline; ad->hmmname = (hmmname == -1) ? NULL : ad->mem + hmmname; ad->hmmacc = (hmmacc == -1) ? NULL : ad->mem + hmmacc; ad->hmmdesc = (hmmdesc == -1) ? NULL : ad->mem + hmmdesc; ad->sqname = (sqname == -1) ? NULL : ad->mem + sqname; ad->sqacc = (sqacc == -1) ? NULL : ad->mem + sqacc; ad->sqdesc = (sqdesc == -1) ? NULL : ad->mem + sqdesc; dcl->ad = ad; return eslOK; ERROR: if (ad != NULL) { if (ad->mem != NULL) free(ad->mem); free(ad); } return status; } /* Function: p7_dcl_MPIRecv() */ int p7_dcl_MPIRecv(int source, int tag, MPI_Comm comm, char **buf, int *nalloc, P7_DOMAIN *dcl) { int status; int n; int pos; MPI_Status mpistatus; /* Probe first, because we need to know if our buffer is big enough. */ MPI_Probe(source, tag, comm, &mpistatus); MPI_Get_count(&mpistatus, MPI_PACKED, &n); /* make sure we are getting the tag we expect and from whom we expect if from */ if (tag != MPI_ANY_TAG && mpistatus.MPI_TAG != tag) { status = eslFAIL; goto ERROR; } if (source != MPI_ANY_SOURCE && mpistatus.MPI_SOURCE != source) { status = eslFAIL; goto ERROR; } /* set the source and tag */ tag = mpistatus.MPI_TAG; source = mpistatus.MPI_SOURCE; /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* Receive the packed dcl */ MPI_Recv(*buf, n, MPI_PACKED, source, tag, comm, &mpistatus); /* Unpack it, looking at the status code prefix for EOD/EOK */ pos = 0; return p7_dcl_MPIUnpack(*buf, *nalloc, &pos, comm, dcl); ERROR: return status; } /*----------------- end, P7_TOPHITS communication -------------------*/ /***************************************************************** * 5. Benchmark driver. *****************************************************************/ #ifdef p7MPISUPPORT_BENCHMARK /* mpicc -g -Wall -L. -I. -L ../easel -I ../easel -D p7MPISUPPORT_BENCHMARK -o benchmark-mpi mpisupport.c -lhmmer -leasel -lm qsub -N benchmark-mpi -j y -R y -b y -cwd -V -pe lam-mpi-tight 2 'mpirun C ./benchmark-mpi ~/notebook/1227-msp-statistics/Pfam.hmm > bench.out' qsub -N benchmark-mpi -j y -R y -b y -cwd -V -pe lam-mpi-tight 2 'mpirun C ./benchmark-mpi -b ~/notebook/1227-msp-statistics/Pfam.hmm > bench.out' */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_alphabet.h" #include "esl_random.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-b", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "baseline timing: don't send any HMMs", 0 }, { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "arrest after start: for debugging MPI under gdb", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for MPI communication"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_BG *bg = p7_bg_Create(abc); int my_rank; int nproc; char *buf = NULL; int nbuf = 0; int subtotalM = 0; int allM = 0; int stalling = esl_opt_GetBoolean(go, "--stall"); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &nproc); while (stalling); /* Master MPI process: */ if (my_rank == 0) { ESL_STOPWATCH *w = esl_stopwatch_Create(); P7_HMMFILE *hfp = NULL; P7_PROFILE *gm = NULL; P7_HMM *hmm = NULL; /* Read HMMs from a file. */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); esl_stopwatch_Start(w); while (p7_hmmfile_Read(hfp, &abc, &hmm) == eslOK) { gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, 400, p7_LOCAL); if (!esl_opt_GetBoolean(go, "-b")) p7_profile_MPISend(gm, 1, 0, MPI_COMM_WORLD, &buf, &nbuf); /* 1 = dest; 0 = tag */ p7_hmm_Destroy(hmm); p7_profile_Destroy(gm); } p7_profile_MPISend(NULL, 1, 0, MPI_COMM_WORLD, &buf, &nbuf); /* send the "no more HMMs" sign */ MPI_Reduce(&subtotalM, &allM, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); printf("total: %d\n", allM); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "CPU Time: "); esl_stopwatch_Destroy(w); } /* Worker MPI process: */ else { P7_PROFILE *gm_recd = NULL; while (p7_profile_MPIRecv(0, 0, MPI_COMM_WORLD, abc, bg, &buf, &nbuf, &gm_recd) == eslOK) { subtotalM += gm_recd->M; p7_profile_Destroy(gm_recd); } MPI_Reduce(&subtotalM, &allM, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); } free(buf); p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); MPI_Finalize(); exit(0); } #endif /*p7MPISUPPORT_BENCHMARK*/ /*---------------------- end, benchmark -------------------------*/ /***************************************************************** * 6. Unit tests *****************************************************************/ #ifdef p7MPISUPPORT_TESTDRIVE static void utest_HMMSendRecv(int my_rank, int nproc) { ESL_RANDOMNESS *r = esl_randomness_CreateFast(42); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_HMM *hmm = NULL; P7_HMM *xhmm = NULL; int M = 200; char *wbuf = NULL; int wn = 0; int i; char errmsg[eslERRBUFSIZE]; p7_hmm_Sample(r, M, abc, &hmm); /* master and worker's sampled HMMs are identical */ if (my_rank == 0) { for (i = 1; i < nproc; i++) { ESL_DPRINTF1(("Master: receiving test HMM\n")); p7_hmm_MPIRecv(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &wbuf, &wn, &abc, &xhmm); ESL_DPRINTF1(("Master: test HMM received\n")); if (p7_hmm_Validate(xhmm, errmsg, 0.001) != eslOK) p7_Die("hmm validation failed: %s", errmsg); if (p7_hmm_Compare(hmm, xhmm, 0.001) != eslOK) p7_Die("Received HMM not identical to what was sent"); p7_hmm_Destroy(xhmm); } } else { ESL_DPRINTF1(("Worker %d: sending test HMM\n", my_rank)); p7_hmm_MPISend(hmm, 0, 0, MPI_COMM_WORLD, &wbuf, &wn); ESL_DPRINTF1(("Worker %d: test HMM sent\n", my_rank)); } p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); free(wbuf); return; } static void utest_ProfileSendRecv(int my_rank, int nproc) { ESL_RANDOMNESS *r = esl_randomness_CreateFast(42); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_PROFILE *gm2 = NULL; int M = 200; int L = 400; char *wbuf = NULL; int wn = 0; int i; char errbuf[eslERRBUFSIZE]; p7_hmm_Sample(r, M, abc, &hmm); /* master and worker's sampled profiles are identical */ bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); p7_bg_SetLength (bg, L); if (my_rank == 0) { for (i = 1; i < nproc; i++) { ESL_DPRINTF1(("Master: receiving test profile\n")); p7_profile_MPIRecv(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, abc, bg, &wbuf, &wn, &gm2); ESL_DPRINTF1(("Master: test profile received\n")); if (p7_profile_Validate(gm2, errbuf, 0.001) != eslOK) p7_Die("profile validation failed: %s", errbuf); if (p7_profile_Compare(gm, gm2, 0.001) != eslOK) p7_Die("Received profile not identical to what was sent"); p7_profile_Destroy(gm2); } } else { ESL_DPRINTF1(("Worker %d: sending test profile\n", my_rank)); p7_profile_MPISend(gm, 0, 0, MPI_COMM_WORLD, &wbuf, &wn); ESL_DPRINTF1(("Worker %d: test profile sent\n", my_rank)); } free(wbuf); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); return; } #endif /*p7MPISUPPORT_TESTDRIVE*/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 7. Test driver. *****************************************************************/ #ifdef p7MPISUPPORT_TESTDRIVE /* mpicc -o mpisupport_utest -g -Wall -I../easel -L../easel -I. -L. -Dp7MPISUPPORT_TESTDRIVE mpisupport.c -lhmmer -leasel -lm * In an MPI environment: (qlogin -pe lam-mpi-tight 2; setenv JOB_ID ; setenv TMPDIR /tmp/.... * mpirun C ./mpisupport_utest */ #include "esl_getopts.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "arrest after start: for debugging MPI under gdb", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for mpisupport.c"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); int stalling = FALSE; int my_rank; int nproc; /* For debugging: stall until GDB can be attached */ if (esl_opt_GetBoolean(go, "--stall")) stalling = TRUE; while (stalling); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &nproc); utest_HMMSendRecv(my_rank, nproc); utest_ProfileSendRecv(my_rank, nproc); MPI_Finalize(); return 0; } #endif /*p7MPISUPPORT_TESTDRIVE*/ /*---------------------- end, test driver -----------------------*/ #else /*!HAVE_MPI*/ /* If we don't have MPI compiled in, provide some nothingness to: * a. prevent Mac OS/X ranlib from bitching about .o file that "has no symbols" * b. prevent compiler from bitching about "empty compilation unit" * c. automatically pass the automated tests. */ void p7_mpisupport_DoAbsolutelyNothing(void) { return; } #if defined p7MPISUPPORT_TESTDRIVE || p7MPISUPPORT_EXAMPLE || p7MPISUPPORT_BENCHMARK int main(void) { return 0; } #endif #endif /*HAVE_MPI*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: mpisupport.c 4452 2013-05-05 01:44:04Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/mpisupport.c $ *****************************************************************/ hmmer-3.1b2/src/p7_prior.c0000664361611702660230000003415412473612614014774 0ustar wheelerteddy/* Mixture Dirichlet priors for profile HMMs. * * * SRE, Sat Mar 24 09:12:44 2007 [Janelia] * SVN $Id: p7_prior.c 4102 2012-06-24 02:06:57Z wheelert $ */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_vectorops.h" #include "hmmer.h" /* Function: p7_prior_CreateAmino() * Incept: SRE, Sat Mar 24 09:35:36 2007 [Janelia] * * Purpose: Creates the default mixture Dirichlet prior for protein * sequences. * * The transition priors (match, insert, delete) are all * single Dirichlets, originally trained by Graeme * Mitchison in the mid-1990's. Notes have been lost, but * we believe they were trained on an early version of * Pfam. * * The match emission prior is a nine-component mixture * from Kimmen Sjolander, who trained it on the Blocks9 * database \citep{Sjolander96}. * * The insert emission prior is a single Dirichlet with * high $|\alpha|$, such that insert emission probabilities * are essentially fixed by the prior, regardless of * observed count data. The slightly polar parameterization * was obtained by training on Pfam 1.0. * * Returns: a pointer to the new structure. */ P7_PRIOR * p7_prior_CreateAmino(void) { int status; P7_PRIOR *pri = NULL; int q; /* default match mixture coefficients: [Sjolander96] */ static double defmq[9] = { 0.178091, 0.056591, 0.0960191, 0.0781233, 0.0834977, 0.0904123, 0.114468, 0.0682132, 0.234585 }; /* default match mixture Dirichlet components [Sjolander96] */ static double defm[9][20] = { { 0.270671, 0.039848, 0.017576, 0.016415, 0.014268, 0.131916, 0.012391, 0.022599, 0.020358, 0.030727, 0.015315, 0.048298, 0.053803, 0.020662, 0.023612, 0.216147, 0.147226, 0.065438, 0.003758, 0.009621 }, { 0.021465, 0.010300, 0.011741, 0.010883, 0.385651, 0.016416, 0.076196, 0.035329, 0.013921, 0.093517, 0.022034, 0.028593, 0.013086, 0.023011, 0.018866, 0.029156, 0.018153, 0.036100, 0.071770, 0.419641 }, { 0.561459, 0.045448, 0.438366, 0.764167, 0.087364, 0.259114, 0.214940, 0.145928, 0.762204, 0.247320, 0.118662, 0.441564, 0.174822, 0.530840, 0.465529, 0.583402, 0.445586, 0.227050, 0.029510, 0.121090 }, { 0.070143, 0.011140, 0.019479, 0.094657, 0.013162, 0.048038, 0.077000, 0.032939, 0.576639, 0.072293, 0.028240, 0.080372, 0.037661, 0.185037, 0.506783, 0.073732, 0.071587, 0.042532, 0.011254, 0.028723 }, { 0.041103, 0.014794, 0.005610, 0.010216, 0.153602, 0.007797, 0.007175, 0.299635, 0.010849, 0.999446, 0.210189, 0.006127, 0.013021, 0.019798, 0.014509, 0.012049, 0.035799, 0.180085, 0.012744, 0.026466 }, { 0.115607, 0.037381, 0.012414, 0.018179, 0.051778, 0.017255, 0.004911, 0.796882, 0.017074, 0.285858, 0.075811, 0.014548, 0.015092, 0.011382, 0.012696, 0.027535, 0.088333, 0.944340, 0.004373, 0.016741 }, { 0.093461, 0.004737, 0.387252, 0.347841, 0.010822, 0.105877, 0.049776, 0.014963, 0.094276, 0.027761, 0.010040, 0.187869, 0.050018, 0.110039, 0.038668, 0.119471, 0.065802, 0.025430, 0.003215, 0.018742 }, { 0.452171, 0.114613, 0.062460, 0.115702, 0.284246, 0.140204, 0.100358, 0.550230, 0.143995, 0.700649, 0.276580, 0.118569, 0.097470, 0.126673, 0.143634, 0.278983, 0.358482, 0.661750, 0.061533, 0.199373 }, { 0.005193, 0.004039, 0.006722, 0.006121, 0.003468, 0.016931, 0.003647, 0.002184, 0.005019, 0.005990, 0.001473, 0.004158, 0.009055, 0.003630, 0.006583, 0.003172, 0.003690, 0.002967, 0.002772, 0.002686 }, }; ESL_ALLOC(pri, sizeof(P7_PRIOR)); pri->tm = pri->ti = pri->td = pri->em = pri->ei = NULL; pri->tm = esl_mixdchlet_Create(1, 3); /* single component; 3 params */ pri->ti = esl_mixdchlet_Create(1, 2); /* single component; 2 params */ pri->td = esl_mixdchlet_Create(1, 2); /* single component; 2 params */ pri->em = esl_mixdchlet_Create(9, 20); /* 9 component; 20 params */ pri->ei = esl_mixdchlet_Create(1, 20); /* single component; 20 params */ if (pri->tm == NULL || pri->ti == NULL || pri->td == NULL || pri->em == NULL || pri->ei == NULL) goto ERROR; /* Transition priors: originally from Graeme Mitchison. Notes are lost, but we believe * they were trained on an early version of Pfam. */ pri->tm->pq[0] = 1.0; pri->tm->alpha[0][0] = 0.7939; /* TMM */ pri->tm->alpha[0][1] = 0.0278; /* TMI */ /* Markus suggests ~10x MD, ~0.036; test! */ pri->tm->alpha[0][2] = 0.0135; /* TMD */ /* Markus suggests 0.1x MI, ~0.004; test! */ pri->ti->pq[0] = 1.0; pri->ti->alpha[0][0] = 0.1551; /* TIM */ pri->ti->alpha[0][1] = 0.1331; /* TII */ pri->td->pq[0] = 1.0; pri->td->alpha[0][0] = 0.9002; /* TDM */ pri->td->alpha[0][1] = 0.5630; /* TDD */ /* Match emission priors are from Kimmen Sjolander, trained * on the Blocks9 database. [Sjolander96] */ for (q = 0; q < 9; q++) { pri->em->pq[q] = defmq[q]; esl_vec_DCopy(defm[q], 20, pri->em->alpha[q]); } /* Insert emission priors were trained on Pfam 1.0, 10 Nov 1996; * see ~/projects/plan7/InsertStatistics. * Inserts are slightly biased towards polar residues and away from * hydrophobic residues. */ pri->ei->pq[0] = 1.0; pri->ei->alpha[0][0] = 681.; /* A */ pri->ei->alpha[0][1] = 120.; /* C */ pri->ei->alpha[0][2] = 623.; /* D */ pri->ei->alpha[0][3] = 651.; /* E */ pri->ei->alpha[0][4] = 313.; /* F */ pri->ei->alpha[0][5] = 902.; /* G */ pri->ei->alpha[0][6] = 241.; /* H */ pri->ei->alpha[0][7] = 371.; /* I */ pri->ei->alpha[0][8] = 687.; /* K */ pri->ei->alpha[0][9] = 676.; /* L */ pri->ei->alpha[0][10] = 143.; /* M */ pri->ei->alpha[0][11] = 548.; /* N */ pri->ei->alpha[0][12] = 647.; /* P */ pri->ei->alpha[0][13] = 415.; /* Q */ pri->ei->alpha[0][14] = 551.; /* R */ pri->ei->alpha[0][15] = 926.; /* S */ pri->ei->alpha[0][16] = 623.; /* T */ pri->ei->alpha[0][17] = 505.; /* V */ pri->ei->alpha[0][18] = 102.; /* W */ pri->ei->alpha[0][19] = 269.; /* Y */ return pri; ERROR: if (pri != NULL) p7_prior_Destroy(pri); return NULL; } /* Function: p7_prior_CreateNucleic() * * Purpose: Creates the default mixture Dirichlet prior for nucleotide * sequences. * * The transition priors (match, insert, delete) are all * single Dirichlets, trained on a portion of the rmark dataset * * The match emission prior is an eight-component mixture * trained against a portion of the rmark dataset * * The insert emission prior is a single Dirichlet with * high $|\alpha|$, such that insert emission probabilities * are essentially fixed by the prior, regardless of * observed count data. * * Returns: a pointer to the new structure. */ P7_PRIOR * p7_prior_CreateNucleic(void) { int status; P7_PRIOR *pri = NULL; int q; /* Plus-1 Laplace prior int num_comp = 1; static double defmq[2] = { 1.0 }; static double defm[1][4] = { { 1.0, 1.0, 1.0, 1.0} // }; */ /* Match emission priors are trained on Rmark3 database * Xref: ~wheelert/notebook/2011/0325_nhmmer_new_parameters */ int num_comp = 4; static double defmq[4] = { 0.24, 0.26, 0.08, 0.42 }; static double defm[4][4] = { { 0.16, 0.45, 0.12, 0.39}, { 0.09, 0.03, 0.09, 0.04}, { 1.29, 0.40, 6.58, 0.51}, { 1.74, 1.49, 1.57, 1.95} }; ESL_ALLOC(pri, sizeof(P7_PRIOR)); pri->tm = pri->ti = pri->td = pri->em = pri->ei = NULL; pri->tm = esl_mixdchlet_Create(1, 3); // match transitions; single component; 3 params pri->ti = esl_mixdchlet_Create(1, 2); // insert transitions; single component; 2 params pri->td = esl_mixdchlet_Create(1, 2); // delete transitions; single component; 2 params pri->em = esl_mixdchlet_Create(num_comp, 4); // match emissions; X component; 4 params pri->ei = esl_mixdchlet_Create(1, 4); // insert emissions; single component; 4 params if (pri->tm == NULL || pri->ti == NULL || pri->td == NULL || pri->em == NULL || pri->ei == NULL) goto ERROR; /* Transition priors: roughly, learned from rmark benchmark - hand-beautified (trimming overspecified significant digits) */ pri->tm->pq[0] = 1.0; pri->tm->alpha[0][0] = 2.0; // TMM pri->tm->alpha[0][1] = 0.1; // TMI pri->tm->alpha[0][2] = 0.1; // TMD pri->ti->pq[0] = 1.0; pri->ti->alpha[0][0] = 0.06; // TIM pri->ti->alpha[0][1] = 0.2; // TII pri->td->pq[0] = 1.0; pri->td->alpha[0][0] = 0.1; // TDM pri->td->alpha[0][1] = 0.2; // TDD /* Match emission priors */ for (q = 0; q < num_comp; q++) { pri->em->pq[q] = defmq[q]; esl_vec_DCopy(defm[q], 4, pri->em->alpha[q]); } /* Insert emission priors. Should that alphas be lower? higher? */ pri->ei->pq[0] = 1.0; esl_vec_DSet(pri->ei->alpha[0], 4, 1.0); return pri; ERROR: if (pri != NULL) p7_prior_Destroy(pri); return NULL; } /* Function: p7_prior_CreateLaplace() * Synopsis: Creates Laplace plus-one prior. * Incept: SRE, Sat Jun 30 09:48:13 2007 [Janelia] * * Purpose: Create a Laplace plus-one prior for alphabet . */ P7_PRIOR * p7_prior_CreateLaplace(const ESL_ALPHABET *abc) { P7_PRIOR *pri = NULL; int status; ESL_ALLOC(pri, sizeof(P7_PRIOR)); pri->tm = pri->ti = pri->td = pri->em = pri->ei = NULL; pri->tm = esl_mixdchlet_Create(1, 3); /* single component; 3 params */ pri->ti = esl_mixdchlet_Create(1, 2); /* single component; 2 params */ pri->td = esl_mixdchlet_Create(1, 2); /* single component; 2 params */ pri->em = esl_mixdchlet_Create(1, abc->K); /* single component; K params */ pri->ei = esl_mixdchlet_Create(1, abc->K); /* single component; K params */ if (pri->tm == NULL || pri->ti == NULL || pri->td == NULL || pri->em == NULL || pri->ei == NULL) goto ERROR; pri->tm->pq[0] = 1.0; esl_vec_DSet(pri->tm->alpha[0], 3, 1.0); /* match transitions */ pri->ti->pq[0] = 1.0; esl_vec_DSet(pri->ti->alpha[0], 2, 1.0); /* insert transitions */ pri->td->pq[0] = 1.0; esl_vec_DSet(pri->td->alpha[0], 2, 1.0); /* delete transitions */ pri->em->pq[0] = 1.0; esl_vec_DSet(pri->em->alpha[0], abc->K, 1.0); /* match emissions */ pri->ei->pq[0] = 1.0; esl_vec_DSet(pri->ei->alpha[0], abc->K, 1.0); /* insert emissions */ return pri; ERROR: p7_prior_Destroy(pri); return NULL; } /* Function: p7_prior_Destroy() * Incept: SRE, Sat Mar 24 09:55:09 2007 [Janelia] * * Purpose: Frees a mixture Dirichlet prior. */ void p7_prior_Destroy(P7_PRIOR *pri) { if (pri == NULL) return; if (pri->tm != NULL) esl_mixdchlet_Destroy(pri->tm); if (pri->ti != NULL) esl_mixdchlet_Destroy(pri->ti); if (pri->td != NULL) esl_mixdchlet_Destroy(pri->td); if (pri->em != NULL) esl_mixdchlet_Destroy(pri->em); if (pri->ei != NULL) esl_mixdchlet_Destroy(pri->ei); free(pri); } /* Function: p7_ParameterEstimation() * Incept: SRE, Sat Mar 24 10:15:37 2007 [Janelia] * * Purpose: Given an containing weighted counts, and * a mixture Dirichlet prior : calculate mean * posterior parameter estimates for all model parameters, * converting the HMM to a parameterized probabilistic * model. * * If is , then model parameters are calculated * as frequencies, by normalization of . * * Args: hmm - profile structure, containing counts. * pri - mixture Dirichlet prior structure, or . * * Returns: on success. */ int p7_ParameterEstimation(P7_HMM *hmm, const P7_PRIOR *pri) { int k; double c[p7_MAXABET]; double p[p7_MAXABET]; double mix[p7_MAXDCHLET]; /* Special case of pri=NULL: convert to frequencies.*/ if (pri==NULL) return p7_hmm_Renormalize(hmm); /* Match transitions 0,1..M: 0 is the B state * TMD at node M is 0. */ for (k = 0; k <= hmm->M; k++) { esl_vec_F2D(hmm->t[k], 3, c); esl_mixdchlet_MPParameters(c, 3, pri->tm, mix, p); esl_vec_D2F(p, 3, hmm->t[k]); } hmm->t[hmm->M][p7H_MD] = 0.0; esl_vec_FNorm(hmm->t[hmm->M], 3); /* Insert transitions, 0..M */ for (k = 0; k <= hmm->M; k++) { esl_vec_F2D(hmm->t[k]+3, 2, c); esl_mixdchlet_MPParameters(c, 2, pri->ti, mix, p); esl_vec_D2F(p, 2, hmm->t[k]+3); } /* Delete transitions, 1..M-1 * For k=0, which is unused; convention sets TMM=1.0, TMD=0.0 * For k=M, TMM = 1.0 (to the E state) and TMD=0.0 (no next D; must go to E). */ for (k = 1; k < hmm->M; k++) { esl_vec_F2D(hmm->t[k]+5, 2, c); esl_mixdchlet_MPParameters(c, 2, pri->td, mix, p); esl_vec_D2F(p, 2, hmm->t[k]+5); } hmm->t[0][p7H_DM] = hmm->t[hmm->M][p7H_DM] = 1.0; hmm->t[0][p7H_DD] = hmm->t[hmm->M][p7H_DD] = 0.0; /* Match emissions, 1..M * Convention sets mat[0] to a valid pvector: first elem 1, the rest 0. */ for (k = 1; k <= hmm->M; k++) { esl_vec_F2D(hmm->mat[k], hmm->abc->K, c); esl_mixdchlet_MPParameters(c, hmm->abc->K, pri->em, mix, p); esl_vec_D2F(p, hmm->abc->K, hmm->mat[k]); } esl_vec_FSet(hmm->mat[0], hmm->abc->K, 0.); hmm->mat[0][0] = 1.0; /* Insert emissions 0..M */ for (k = 0; k <= hmm->M; k++) { esl_vec_F2D(hmm->ins[k], hmm->abc->K, c); esl_mixdchlet_MPParameters(c, hmm->abc->K, pri->ei, mix, p); esl_vec_D2F(p, hmm->abc->K, hmm->ins[k]); } return eslOK; } /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/p7_tophits.c0000664361611702660230000025143112473612614015332 0ustar wheelerteddy/* P7_TOPHITS: implementation of ranked list of top-scoring hits * * Contents: * 1. The P7_TOPHITS object. * 2. Standard (human-readable) output of pipeline results. * 3. Tabular (parsable) output of pipeline results. * 4. Benchmark driver. * 5. Test driver. * 6. Copyright and license information. */ #include "p7_config.h" #include #include #include #include "easel.h" #include "hmmer.h" /***************************************************************** *= 1. The P7_TOPHITS object *****************************************************************/ /* Function: p7_tophits_Create() * Synopsis: Allocate a hit list. * * Purpose: Allocates a new hit list and return a pointer * to it. * * Throws: on allocation failure. */ P7_TOPHITS * p7_tophits_Create(void) { P7_TOPHITS *h = NULL; int default_nalloc = 256; int status; ESL_ALLOC(h, sizeof(P7_TOPHITS)); h->hit = NULL; h->unsrt = NULL; ESL_ALLOC(h->hit, sizeof(P7_HIT *) * default_nalloc); ESL_ALLOC(h->unsrt, sizeof(P7_HIT) * default_nalloc); h->Nalloc = default_nalloc; h->N = 0; h->nreported = 0; h->nincluded = 0; h->is_sorted_by_sortkey = TRUE; /* but only because there's 0 hits */ h->is_sorted_by_seqidx = FALSE; h->hit[0] = h->unsrt; /* if you're going to call it "sorted" when it contains just one hit, you need this */ return h; ERROR: p7_tophits_Destroy(h); return NULL; } /* Function: p7_tophits_Grow() * Synopsis: Reallocates a larger hit list, if needed. * * Purpose: If list cannot hold another hit, doubles * the internal allocation. * * Returns: on success. * * Throws: on allocation failure; in this case, * the data in are unchanged. */ int p7_tophits_Grow(P7_TOPHITS *h) { void *p; P7_HIT *ori = h->unsrt; int Nalloc = h->Nalloc * 2; /* grow by doubling */ int i; int status; if (h->N < h->Nalloc) return eslOK; /* we have enough room for another hit */ ESL_RALLOC(h->hit, p, sizeof(P7_HIT *) * Nalloc); ESL_RALLOC(h->unsrt, p, sizeof(P7_HIT) * Nalloc); /* If we grow a sorted list, we have to translate the pointers * in h->hit, because h->unsrt might have just moved in memory. */ if (h->is_sorted_by_seqidx || h->is_sorted_by_sortkey) { for (i = 0; i < h->N; i++) h->hit[i] = h->unsrt + (h->hit[i] - ori); } h->Nalloc = Nalloc; return eslOK; ERROR: return eslEMEM; } /* Function: p7_tophits_CreateNextHit() * Synopsis: Get pointer to new structure for recording a hit. * * Purpose: Ask the top hits object to do any necessary * internal allocation and bookkeeping to add a new, * empty hit to its list; return a pointer to * this new structure for data to be filled * in by the caller. * * Returns: on success. * * Throws: on allocation error. */ int p7_tophits_CreateNextHit(P7_TOPHITS *h, P7_HIT **ret_hit) { P7_HIT *hit = NULL; int status; if ((status = p7_tophits_Grow(h)) != eslOK) goto ERROR; hit = &(h->unsrt[h->N]); h->N++; if (h->N >= 2) { h->is_sorted_by_seqidx = FALSE; h->is_sorted_by_sortkey = FALSE; } hit->name = NULL; hit->acc = NULL; hit->desc = NULL; hit->sortkey = 0.0; hit->score = 0.0; hit->pre_score = 0.0; hit->sum_score = 0.0; hit->lnP = 0.0; hit->pre_lnP = 0.0; hit->sum_lnP = 0.0; hit->ndom = 0; hit->nexpected = 0.0; hit->nregions = 0; hit->nclustered = 0; hit->noverlaps = 0; hit->nenvelopes = 0; hit->flags = p7_HITFLAGS_DEFAULT; hit->nreported = 0; hit->nincluded = 0; hit->best_domain = -1; hit->dcl = NULL; hit->offset = 0; *ret_hit = hit; return eslOK; ERROR: *ret_hit = NULL; return status; } /* Function: p7_tophits_Add() * Synopsis: Add a hit to the top hits list. * * Purpose: Adds a hit to the top hits list . * * , , and are copied, so caller may free * them if it likes. * * Only the pointer is kept. Caller turns over memory * management of to the top hits object; will * be free'd when the top hits structure is free'd. * * Args: h - active top hit list * name - name of target * acc - accession of target (may be NULL) * desc - description of target (may be NULL) * sortkey - value to sort by: bigger is better * score - score of this hit * lnP - log P-value of this hit * mothersc - score of parent whole sequence * mother_lnP - log P-value of parent whole sequence * sqfrom - 1..L pos in target seq of start * sqto - 1..L pos; sqfrom > sqto if rev comp * sqlen - length of sequence, L * hmmfrom - 0..M+1 pos in HMM of start * hmmto - 0..M+1 pos in HMM of end * hmmlen - length of HMM, M * domidx - number of this domain * ndom - total # of domains in sequence * ali - optional printable alignment info * * Returns: on success. * * Throws: if reallocation failed. * * Note: Is this actually used anywhere? (SRE, 10 Dec 08) * I think it's not up to date. * * That's right. This function is obsolete. * But it is used in benchmark and test code, so you can't * delete it yet; benchmarks and test code should be * revised (SRE, 26 Oct 09) */ int p7_tophits_Add(P7_TOPHITS *h, char *name, char *acc, char *desc, double sortkey, float score, double lnP, float mothersc, double mother_lnP, int sqfrom, int sqto, int sqlen, int hmmfrom, int hmmto, int hmmlen, int domidx, int ndom, P7_ALIDISPLAY *ali) { int status; if ((status = p7_tophits_Grow(h)) != eslOK) return status; if ((status = esl_strdup(name, -1, &(h->unsrt[h->N].name))) != eslOK) return status; if ((status = esl_strdup(acc, -1, &(h->unsrt[h->N].acc))) != eslOK) return status; if ((status = esl_strdup(desc, -1, &(h->unsrt[h->N].desc))) != eslOK) return status; h->unsrt[h->N].sortkey = sortkey; h->unsrt[h->N].score = score; h->unsrt[h->N].pre_score = 0.0; h->unsrt[h->N].sum_score = 0.0; h->unsrt[h->N].lnP = lnP; h->unsrt[h->N].pre_lnP = 0.0; h->unsrt[h->N].sum_lnP = 0.0; h->unsrt[h->N].nexpected = 0; h->unsrt[h->N].nregions = 0; h->unsrt[h->N].nclustered = 0; h->unsrt[h->N].noverlaps = 0; h->unsrt[h->N].nenvelopes = 0; h->unsrt[h->N].ndom = ndom; h->unsrt[h->N].flags = 0; h->unsrt[h->N].nreported = 0; h->unsrt[h->N].nincluded = 0; h->unsrt[h->N].best_domain= 0; h->unsrt[h->N].dcl = NULL; h->N++; if (h->N >= 2) { h->is_sorted_by_seqidx = FALSE; h->is_sorted_by_sortkey = FALSE; } return eslOK; } /* hit_sorter(): qsort's pawn, below */ static int hit_sorter_by_sortkey(const void *vh1, const void *vh2) { P7_HIT *h1 = *((P7_HIT **) vh1); /* don't ask. don't change. Don't Panic. */ P7_HIT *h2 = *((P7_HIT **) vh2); int c; if (h1->sortkey < h2->sortkey) return 1; else if (h1->sortkey > h2->sortkey) return -1; else { if ( (c = strcmp(h1->name, h2->name)) != 0) return c; /* if on different strand, the positive strand goes first, else use position */ int dir1 = (h1->dcl[0].iali < h1->dcl[0].jali ? 1 : -1); int dir2 = (h2->dcl[0].iali < h2->dcl[0].jali ? 1 : -1); if (dir1 != dir2) return dir2; // so if dir1 is pos (1), and dir2 is neg (-1), this will return -1, placing h1 before h2; otherwise, vice versa else return (h1->dcl[0].iali > h2->dcl[0].iali ? 1 : -1 ); } } static int hit_sorter_by_seqidx_aliposition(const void *vh1, const void *vh2) { P7_HIT *h1 = *((P7_HIT **) vh1); /* don't ask. don't change. Don't Panic. */ P7_HIT *h2 = *((P7_HIT **) vh2); if (h1->seqidx > h2->seqidx) return 1; /* first key, seq_idx (unique id for sequences), low to high */ else if (h1->seqidx < h2->seqidx) return -1; // if on different strand, the positive strand goes first, else use position int dir1 = (h1->dcl[0].iali < h1->dcl[0].jali ? 1 : -1); int dir2 = (h2->dcl[0].iali < h2->dcl[0].jali ? 1 : -1); if (dir1 != dir2) return dir2; // so if dir1 is pos (1), and dir2 is neg (-1), this will return -1, placing h1 before h2; otherwise, vice versa if ( h1->dcl[0].iali == h2->dcl[0].iali) return (h1->dcl[0].jali < h2->dcl[0].jali ? 1 : -1 ); else return (h1->dcl[0].iali > h2->dcl[0].iali ? 1 : -1 ); } static int hit_sorter_by_modelname_aliposition(const void *vh1, const void *vh2) { P7_HIT *h1 = *((P7_HIT **) vh1); /* don't ask. don't change. Don't Panic. */ P7_HIT *h2 = *((P7_HIT **) vh2); int res = esl_strcmp( h1->name, h2->name); if ( res != 0 ) return res; /* first key, seq_idx (unique id for sequences), low to high */ // if on different strand, the positive strand goes first, else use position int dir1 = (h1->dcl[0].iali < h1->dcl[0].jali ? 1 : -1); int dir2 = (h2->dcl[0].iali < h2->dcl[0].jali ? 1 : -1); if (dir1 != dir2) return dir2; // so if dir1 is pos (1), and dir2 is neg (-1), this will return -1, placing h1 before h2; otherwise, vice versa if ( h1->dcl[0].iali == h2->dcl[0].iali) return (h1->dcl[0].jali < h2->dcl[0].jali ? 1 : -1 ); else return (h1->dcl[0].iali > h2->dcl[0].iali ? 1 : -1 ); } /* Function: p7_tophits_SortBySortkey() * Synopsis: Sorts a hit list. * * Purpose: Sorts a top hit list. After this call, * hit[i]> points to the i'th ranked * for all N> hits. * * Returns: on success. */ int p7_tophits_SortBySortkey(P7_TOPHITS *h) { int i; if (h->is_sorted_by_sortkey) return eslOK; for (i = 0; i < h->N; i++) h->hit[i] = h->unsrt + i; if (h->N > 1) qsort(h->hit, h->N, sizeof(P7_HIT *), hit_sorter_by_sortkey); h->is_sorted_by_seqidx = FALSE; h->is_sorted_by_sortkey = TRUE; return eslOK; } /* Function: p7_tophits_SortBySeqidxAndAlipos() * Synopsis: Sorts a hit list by sequence index and position in that * sequence at which the hit's first domain begins (used in nhmmer) * * Purpose: Sorts a top hit list. After this call, * hit[i]> points to the i'th ranked * for all N> hits. * * Returns: on success. */ int p7_tophits_SortBySeqidxAndAlipos(P7_TOPHITS *h) { int i; if (h->is_sorted_by_seqidx) return eslOK; for (i = 0; i < h->N; i++) h->hit[i] = h->unsrt + i; if (h->N > 1) qsort(h->hit, h->N, sizeof(P7_HIT *), hit_sorter_by_seqidx_aliposition); h->is_sorted_by_sortkey = FALSE; h->is_sorted_by_seqidx = TRUE; return eslOK; } /* Function: p7_tophits_SortByModelnameAndAlipos() * Synopsis: Sorts a hit list by model name and position in the query sequence * sequence at which the hit's first domain begins (used in nhmmscan) * * Purpose: Sorts a top hit list. After this call, * hit[i]> points to the i'th ranked * for all N> hits. * * Returns: on success. */ int p7_tophits_SortByModelnameAndAlipos(P7_TOPHITS *h) { int i; if (h->is_sorted_by_seqidx) return eslOK; for (i = 0; i < h->N; i++) h->hit[i] = h->unsrt + i; if (h->N > 1) qsort(h->hit, h->N, sizeof(P7_HIT *), hit_sorter_by_modelname_aliposition); h->is_sorted_by_sortkey = FALSE; h->is_sorted_by_seqidx = TRUE; return eslOK; } /* Function: p7_tophits_Merge() * Synopsis: Merge two top hits lists. * * Purpose: Merge

into

. Upon return,

* contains the sorted, merged list.

* is effectively destroyed; caller should * not access it further, and may as well free * it immediately. * * Returns: on success. * * Throws: on allocation failure, and * both

and

remain valid. */ int p7_tophits_Merge(P7_TOPHITS *h1, P7_TOPHITS *h2) { void *p; P7_HIT **new_hit = NULL; P7_HIT *ori1 = h1->unsrt; /* original base of h1's data */ P7_HIT *new2; int i,j,k; int Nalloc = h1->Nalloc + h2->Nalloc; int status; /* Make sure the two lists are sorted */ if ((status = p7_tophits_SortBySortkey(h1)) != eslOK) goto ERROR; if ((status = p7_tophits_SortBySortkey(h2)) != eslOK) goto ERROR; /* Attempt our allocations, so we fail early if we fail. * Reallocating h1->unsrt screws up h1->hit, so fix it. */ ESL_RALLOC(h1->unsrt, p, sizeof(P7_HIT) * Nalloc); ESL_ALLOC (new_hit, sizeof(P7_HIT *) * Nalloc); for (i = 0; i < h1->N; i++) h1->hit[i] = h1->unsrt + (h1->hit[i] - ori1); /* Append h2's unsorted data array to h1. h2's data begin at */ new2 = h1->unsrt + h1->N; memcpy(new2, h2->unsrt, sizeof(P7_HIT) * h2->N); /* Merge the sorted hit lists */ for (i=0,j=0,k=0; i < h1->N && j < h2->N ; k++) new_hit[k] = (hit_sorter_by_sortkey(&h1->hit[i], &h2->hit[j]) > 0) ? new2 + (h2->hit[j++] - h2->unsrt) : h1->hit[i++]; while (i < h1->N) new_hit[k++] = h1->hit[i++]; while (j < h2->N) new_hit[k++] = new2 + (h2->hit[j++] - h2->unsrt); /* h2 now turns over management of name, acc, desc memory to h1; * nullify its pointers, to prevent double free. */ for (i = 0; i < h2->N; i++) { h2->unsrt[i].name = NULL; h2->unsrt[i].acc = NULL; h2->unsrt[i].desc = NULL; h2->unsrt[i].dcl = NULL; } /* Construct the new grown h1 */ free(h1->hit); h1->hit = new_hit; h1->Nalloc = Nalloc; h1->N += h2->N; /* and is_sorted is TRUE, as a side effect of p7_tophits_Sort() above. */ return eslOK; ERROR: if (new_hit != NULL) free(new_hit); return status; } /* Function: p7_tophits_GetMaxPositionLength() * Synopsis: Returns maximum position length in hit list (targets). * * Purpose: Returns the length of the longest hit location (start/end) * of all the registered hits, in chars. This is useful when * deciding how to format output. * * The maximum is taken over all registered hits. This * opens a possible side effect: caller might print only * the top hits, and the max name length in these top hits * may be different than the max length over all the hits. * * Used specifically for nhmmer output, so expects only one * domain per hit * * If there are no hits in , or none of the * hits have names, returns 0. */ int p7_tophits_GetMaxPositionLength(P7_TOPHITS *h) { int i, max, n; char buffer [11]; for (max = 0, i = 0; i < h->N; i++) { if (h->unsrt[i].dcl[0].iali > 0) { n = sprintf (buffer, "%d", h->unsrt[i].dcl[0].iali); max = ESL_MAX(n, max); n = sprintf (buffer, "%d", h->unsrt[i].dcl[0].jali); max = ESL_MAX(n, max); } } return max; } /* Function: p7_tophits_GetMaxNameLength() * Synopsis: Returns maximum name length in hit list (targets). * * Purpose: Returns the maximum name length of all the registered * hits, in chars. This is useful when deciding how to * format output. * * The maximum is taken over all registered hits. This * opens a possible side effect: caller might print only * the top hits, and the max name length in these top hits * may be different than the max length over all the hits. * * If there are no hits in , or none of the * hits have names, returns 0. */ int p7_tophits_GetMaxNameLength(P7_TOPHITS *h) { int i, max, n; for (max = 0, i = 0; i < h->N; i++) if (h->unsrt[i].name != NULL) { n = strlen(h->unsrt[i].name); max = ESL_MAX(n, max); } return max; } /* Function: p7_tophits_GetMaxAccessionLength() * Synopsis: Returns maximum accession length in hit list (targets). * * Purpose: Same as , but for * accessions. If there are no hits in , or none * of the hits have accessions, returns 0. */ int p7_tophits_GetMaxAccessionLength(P7_TOPHITS *h) { int i, max, n; for (max = 0, i = 0; i < h->N; i++) if (h->unsrt[i].acc != NULL) { n = strlen(h->unsrt[i].acc); max = ESL_MAX(n, max); } return max; } /* Function: p7_tophits_GetMaxShownLength() * Synopsis: Returns max shown name/accession length in hit list. * * Purpose: Same as , but * for the case when --acc is on, where * we show accession if one is available, and * fall back to showing the name if it is not. * Returns the max length of whatever is being * shown as the reported "name". */ int p7_tophits_GetMaxShownLength(P7_TOPHITS *h) { int i, max, n; for (max = 0, i = 0; i < h->N; i++) { if (h->unsrt[i].acc != NULL && h->unsrt[i].acc[0] != '\0') { n = strlen(h->unsrt[i].acc); max = ESL_MAX(n, max); } else if (h->unsrt[i].name != NULL) { n = strlen(h->unsrt[i].name); max = ESL_MAX(n, max); } } return max; } /* Function: p7_tophits_Reuse() * Synopsis: Reuse a hit list, freeing internals. * * Purpose: Reuse the tophits list ; save as * many malloc/free cycles as possible, * as opposed to 'ing it and * 'ing a new one. */ int p7_tophits_Reuse(P7_TOPHITS *h) { int i, j; if (h == NULL) return eslOK; if (h->unsrt != NULL) { for (i = 0; i < h->N; i++) { if (h->unsrt[i].name != NULL) free(h->unsrt[i].name); if (h->unsrt[i].acc != NULL) free(h->unsrt[i].acc); if (h->unsrt[i].desc != NULL) free(h->unsrt[i].desc); if (h->unsrt[i].dcl != NULL) { for (j = 0; j < h->unsrt[i].ndom; j++) if (h->unsrt[i].dcl[j].ad != NULL) p7_alidisplay_Destroy(h->unsrt[i].dcl[j].ad); free(h->unsrt[i].dcl); } } } h->N = 0; h->is_sorted_by_seqidx = FALSE; h->is_sorted_by_sortkey = TRUE; /* because there are 0 hits */ h->hit[0] = h->unsrt; return eslOK; } /* Function: p7_tophits_Destroy() * Synopsis: Frees a hit list. */ void p7_tophits_Destroy(P7_TOPHITS *h) { int i,j; if (h == NULL) return; if (h->hit != NULL) free(h->hit); if (h->unsrt != NULL) { for (i = 0; i < h->N; i++) { if (h->unsrt[i].name != NULL) free(h->unsrt[i].name); if (h->unsrt[i].acc != NULL) free(h->unsrt[i].acc); if (h->unsrt[i].desc != NULL) free(h->unsrt[i].desc); if (h->unsrt[i].dcl != NULL) { for (j = 0; j < h->unsrt[i].ndom; j++) { if (h->unsrt[i].dcl[j].ad != NULL) p7_alidisplay_Destroy(h->unsrt[i].dcl[j].ad); if (h->unsrt[i].dcl[j].scores_per_pos != NULL) free (h->unsrt[i].dcl->scores_per_pos); } free(h->unsrt[i].dcl); } } free(h->unsrt); } free(h); return; } /*---------------- end, P7_TOPHITS object -----------------------*/ /***************************************************************** * 2. Standard (human-readable) output of pipeline results *****************************************************************/ /* workaround_bug_h74(): * Different envelopes, identical alignment * * Bug #h74, though extremely rare, arises from a limitation in H3's * implementation of Forward/Backward, as follows: * * 1. A multidomain region is analyzed by stochastic clustering * 2. Overlapping envelopes are found (w.r.t sequence coords), though * trace clusters are distinct if HMM endpoints are also considered. * 3. We have no facility for limiting Forward/Backward to a specified * range of profile coordinates, so each envelope is passed to * rescore_isolated_domain() and analyzed independently. * 4. Optimal accuracy alignment may identify exactly the same alignment * in the overlap region shared by the two envelopes. * * The disturbing result is two different envelopes that have * identical alignments and alignment endpoints. * * The correct fix is to define envelopes not only by sequence * endpoints but also by profile endpoints, passing them to * rescore_isolated_domain(), and limiting F/B calculations to this * pieces of the DP lattice. This requires a fair amount of work, * adding to the optimized API. * * The workaround is to detect when there are duplicate alignments, * and only display one. We show the one with the best bit score. * * If we ever implement envelope-limited versions of F/B, revisit this * fix. * * SRE, Tue Dec 22 16:27:04 2009 * xref J5/130; notebook/2009/1222-hmmer-bug-h74 */ static int workaround_bug_h74(P7_TOPHITS *th) { int h; int d1, d2; int dremoved; for (h = 0; h < th->N; h++) if (th->hit[h]->noverlaps) { for (d1 = 0; d1 < th->hit[h]->ndom; d1++) for (d2 = d1+1; d2 < th->hit[h]->ndom; d2++) if (th->hit[h]->dcl[d1].iali == th->hit[h]->dcl[d2].iali && th->hit[h]->dcl[d1].jali == th->hit[h]->dcl[d2].jali) { dremoved = (th->hit[h]->dcl[d1].bitscore >= th->hit[h]->dcl[d2].bitscore) ? d2 : d1; if (th->hit[h]->dcl[dremoved].is_reported) { th->hit[h]->dcl[dremoved].is_reported = FALSE; th->hit[h]->nreported--; } if (th->hit[h]->dcl[dremoved].is_included) { th->hit[h]->dcl[dremoved].is_included = FALSE; th->hit[h]->nincluded--; } } } return eslOK; } /* Function: p7_tophits_ComputeNhmmerEvalues() * Synopsis: Compute e-values based on pvalues and window sizes. * * Purpose: After nhmmer pipeline has completed, the th object contains * hits where the p-values haven't yet been converted to * e-values. That modification depends on an established * number of sequences. In nhmmer, this is computed as N/W, * for a database of N residues, where W is some standardized * window length (nhmmer passes om->max_length). E-values are * set here based on that formula. We also set the sortkey so * the output will be sorted correctly. * * Returns: on success. */ int p7_tophits_ComputeNhmmerEvalues(P7_TOPHITS *th, double N, int W) { int i; /* counters over hits */ for (i = 0; i < th->N ; i++) { th->unsrt[i].lnP += log((float)N / (float)W); th->unsrt[i].dcl[0].lnP = th->unsrt[i].lnP; th->unsrt[i].sortkey = -1.0 * th->unsrt[i].lnP; } return eslOK; } /* Function: p7_tophits_RemoveDuplicates() * Synopsis: Remove overlapping hits. * * Purpose: After nhmmer pipeline has completed, the TopHits object may * contain duplicates if the target was broken into overlapping * windows. Scan through, and remove duplicates. Since the * duplicates may be incomplete (one sequence is a partial * hit because it's window didn't cover the full length of * the hit), keep the one with better p-value * * Returns: on success. */ int p7_tophits_RemoveDuplicates(P7_TOPHITS *th, int using_bit_cutoffs) { int i; /* counter over hits */ int j; /* previous un-duplicated hit */ int s_i, s_j, e_i, e_j, dir_i, dir_j, len_i, len_j; int intersect_alistart, intersect_aliend, intersect_alilen; int intersect_hmmstart, intersect_hmmend, intersect_hmmlen; //int64_t sub_i, sub_j; int tmp; double p_i, p_j; int remove; if (th->N<2) return eslOK; j=0; for (i = 1; i < th->N; i++) { //sub_j = th->hit[j]->subseq_start; p_j = th->hit[j]->lnP; s_j = th->hit[j]->dcl[0].iali; e_j = th->hit[j]->dcl[0].jali; dir_j = (s_j < e_j ? 1 : -1); if (dir_j == -1) { tmp = s_j; s_j = e_j; e_j = tmp; } len_j = e_j - s_j + 1 ; //sub_i = th->hit[i]->subseq_start; p_i = th->hit[i]->lnP; s_i = th->hit[i]->dcl[0].iali; e_i = th->hit[i]->dcl[0].jali; dir_i = (s_i < e_i ? 1 : -1); if (dir_i == -1) { tmp = s_i; s_i = e_i; e_i = tmp; } len_i = e_i - s_i + 1 ; // these will only matter if seqidx and strand are the same intersect_alistart = s_i>s_j ? s_i : s_j; intersect_aliend = e_ihit[i]->dcl[0].ad->hmmfrom > th->hit[j]->dcl[0].ad->hmmfrom) ? th->hit[i]->dcl[0].ad->hmmfrom : th->hit[j]->dcl[0].ad->hmmfrom; intersect_hmmend = (th->hit[i]->dcl[0].ad->hmmto < th->hit[j]->dcl[0].ad->hmmto) ? th->hit[i]->dcl[0].ad->hmmto : th->hit[j]->dcl[0].ad->hmmto; intersect_hmmlen = intersect_hmmend - intersect_hmmstart + 1; if ( esl_strcmp(th->hit[i]->name, th->hit[i-1]->name) == 0 && //same model th->hit[i]->seqidx == th->hit[i-1]->seqidx && //same source sequence dir_i == dir_j && // only bother removing if the overlapping hits are on the same strand intersect_hmmlen > 0 && //only if they're both hitting similar parts of the model ( ( s_i >= s_j-3 && s_i <= s_j+3) || // at least one side is essentially flush ( e_i >= e_j-3 && e_i <= e_j+3) || ( intersect_alilen >= len_i * 0.95) || // or one of the hits covers >90% of the other ( intersect_alilen >= len_j * 0.95) ) ) { /* Force one to go unreported. I prefer to keep the one with the * better e-value. This addresses two issues * (1) longer hits sometimes encounter higher bias corrections, * leading to lower scores; seems better to focus on the * high-scoring heart of the alignment, if we have a * choice * (2) it is possible that a lower-scoring longer hit (see #1) * that is close to threshold will pass the pipeline in * one condition and not the other (e.g. --toponly, or * single vs multi threaded), and if longer hits obscure * shorter higher-scoring ones, a shorter "hit" might be * lost by being obscured by a longer one that is subsequently * removed due to insufficient score. * see late notes in ~wheelert/notebook/2012/0518-dfam-scripts/00NOTES */ //remove = 0; // 1 := keep i, 0 := keep i-1 remove = p_i < p_j ? j : i; th->hit[remove]->flags |= p7_IS_DUPLICATE; if (using_bit_cutoffs) { //report/include flags were already included, need to remove them here th->hit[remove]->flags &= ~p7_IS_REPORTED; th->hit[remove]->flags &= ~p7_IS_INCLUDED; } j = remove == j ? i : j; } else { j = i; } } return eslOK; } /* Function: p7_tophits_Threshold() * Synopsis: Apply score and E-value thresholds to a hitlist before output. * * Purpose: After a pipeline has completed, go through it and mark all * the targets and domains that are "significant" (satisfying * the reporting thresholds set for the pipeline). * * Also sets the final total number of reported and * included targets, the number of reported and included * targets in each target, and the size of the search space * for per-domain conditional E-value calculations, * domZ>. By default, domZ> is the number of * significant targets reported. * * If model-specific thresholds were used in the pipeline, * we cannot apply those thresholds now. They were already * applied in the pipeline. In this case all we're * responsible for here is counting them (setting * nreported, nincluded counters). * * Returns: on success. */ int p7_tophits_Threshold(P7_TOPHITS *th, P7_PIPELINE *pli) { int h, d; /* counters over sequence hits, domains in sequences */ /* Flag reported, included targets (if we're using general thresholds) */ if (! pli->use_bit_cutoffs) { for (h = 0; h < th->N; h++) { if ( !(th->hit[h]->flags & p7_IS_DUPLICATE) && p7_pli_TargetReportable(pli, th->hit[h]->score, th->hit[h]->lnP)) { th->hit[h]->flags |= p7_IS_REPORTED; if (p7_pli_TargetIncludable(pli, th->hit[h]->score, th->hit[h]->lnP)) th->hit[h]->flags |= p7_IS_INCLUDED; if (pli->long_targets) { // no domains in dna search, so: th->hit[h]->dcl[0].is_reported = th->hit[h]->flags & p7_IS_REPORTED; th->hit[h]->dcl[0].is_included = th->hit[h]->flags & p7_IS_INCLUDED; } } } } /* Count reported, included targets */ th->nreported = 0; th->nincluded = 0; for (h = 0; h < th->N; h++) { if (th->hit[h]->flags & p7_IS_REPORTED) th->nreported++; if (th->hit[h]->flags & p7_IS_INCLUDED) th->nincluded++; } /* Now we can determined domZ, the effective search space in which additional domains are found */ if (pli->domZ_setby == p7_ZSETBY_NTARGETS) pli->domZ = (double) th->nreported; /* Second pass is over domains, flagging reportable/includable ones. * Depends on knowing the domZ we just set. * Note how this enforces a hierarchical logic of * (sequence|domain) must be reported to be included, and * domain can only be (reported|included) if whole sequence is too. */ if (! pli->use_bit_cutoffs && !pli->long_targets) { for (h = 0; h < th->N; h++) { if (th->hit[h]->flags & p7_IS_REPORTED) { for (d = 0; d < th->hit[h]->ndom; d++) { if (p7_pli_DomainReportable(pli, th->hit[h]->dcl[d].bitscore, th->hit[h]->dcl[d].lnP)) th->hit[h]->dcl[d].is_reported = TRUE; if ((th->hit[h]->flags & p7_IS_INCLUDED) && p7_pli_DomainIncludable(pli, th->hit[h]->dcl[d].bitscore, th->hit[h]->dcl[d].lnP)) th->hit[h]->dcl[d].is_included = TRUE; } } } } /* Count the reported, included domains */ for (h = 0; h < th->N; h++) for (d = 0; d < th->hit[h]->ndom; d++) { if (th->hit[h]->dcl[d].is_reported) th->hit[h]->nreported++; if (th->hit[h]->dcl[d].is_included) th->hit[h]->nincluded++; } workaround_bug_h74(th); /* blech. This function is defined above; see commentary and crossreferences there. */ return eslOK; } /* Function: p7_tophits_CompareRanking() * Synopsis: Compare current top hits to previous top hits ranking. * * Purpose: Using a keyhash of the previous top hits and the * their ranks, look at the current top hits list

* and flag new hits that are included for the first time * (by setting flag) and hits that were * included previously, but are now below the inclusion * threshold in the list ( * flag). * * The must already have been processed by * . We assume the , * flags are set on the appropriate hits. * * Upon return, the keyhash is updated to hash the * current top hits list and their ranks. * * Optionally, <*opt_nnew> is set to the number of * newly included hits. jackhmmer uses this as part of * its convergence criteria, for example. * * These flags affect output of top target hits from * . * * It only makes sense to call this function in context of * an iterative search. * * The flag is comprehensive: all new hits * are flagged (and counted in <*opt_nnew>). The * flag is not comprehensive: only those hits that still * appear in the current top hits list are flagged. If a * hit dropped entirely off the list, it isn't counted * as "dropped". (This could be done, but we would want * to have two keyhashes, one old and one new, to do the * necessary comparisons efficiently.) * * If the target names in are not unique, results may * be strange. * * Args: th - current top hits list * kh - hash of top hits' ranks (in: previous tophits; out: 's tophits) * opt_nnew - optRETURN: number of new hits above inclusion threshold * * Returns: on success. * * Throws: if needed to be reallocated but this failed. */ int p7_tophits_CompareRanking(P7_TOPHITS *th, ESL_KEYHASH *kh, int *opt_nnew) { int nnew = 0; int oldrank; int h; int status; /* Flag the hits in the list with whether they're new in the included top hits, * and whether they've dropped off the included list. */ for (h = 0; h < th->N; h++) { esl_keyhash_Lookup(kh, th->hit[h]->name, -1, &oldrank); if (th->hit[h]->flags & p7_IS_INCLUDED) { if (oldrank == -1) { th->hit[h]->flags |= p7_IS_NEW; nnew++; } } else { if (oldrank >= 0) th->hit[h]->flags |= p7_IS_DROPPED; } } /* Replace the old rank list with the new one */ esl_keyhash_Reuse(kh); for (h = 0; h < th->N; h++) { if (th->hit[h]->flags & p7_IS_INCLUDED) { /* What happens when the same sequence name appears twice? It gets stored with higher rank */ status = esl_keyhash_Store(kh, th->hit[h]->name, -1, NULL); if (status != eslOK && status != eslEDUP) goto ERROR; } } if (opt_nnew != NULL) *opt_nnew = nnew; return eslOK; ERROR: if (opt_nnew != NULL) *opt_nnew = 0; return status; } /* Function: p7_tophits_Targets() * Synopsis: Format and write a top target hits list to an output stream. * * Purpose: Output a list of the reportable top target hits in * in human-readable ASCII text format to stream , using * final pipeline accounting stored in . * * The tophits list should already be sorted (see * and thresholded (see * ). * * Returns: on success. * * Throws: on write failure. */ int p7_tophits_Targets(FILE *ofp, P7_TOPHITS *th, P7_PIPELINE *pli, int textw) { char newness; int h; int d; int namew; int posw; int descw; char *showname; int have_printed_incthresh = FALSE; /* when --acc is on, we'll show accession if available, and fall back to name */ if (pli->show_accessions) namew = ESL_MAX(8, p7_tophits_GetMaxShownLength(th)); else namew = ESL_MAX(8, p7_tophits_GetMaxNameLength(th)); if (pli->long_targets) { posw = ESL_MAX(6, p7_tophits_GetMaxPositionLength(th)); if (textw > 0) descw = ESL_MAX(32, textw - namew - 2*posw - 32); /* 32 chars excluding desc and two posw's is from the format: 2 + 9+2 +6+2 +5+2 ++1 ++1 ++1 +1 */ else descw = 0; /* unlimited desc length is handled separately */ if (fprintf(ofp, "Scores for complete hit%s:\n", pli->mode == p7_SEARCH_SEQS ? "s" : "") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "per-sequence hit list: write failed"); if (fprintf(ofp, " %9s %6s %5s %-*s %*s %*s %s\n", "E-value", " score", " bias", namew, (pli->mode == p7_SEARCH_SEQS ? "Sequence":"Model"), posw, "start", posw, "end", "Description") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "per-sequence hit list: write failed"); if (fprintf(ofp, " %9s %6s %5s %-*s %*s %*s %s\n", "-------", "------", "-----", namew, "--------", posw, "-----", posw, "-----", "-----------") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "per-sequence hit list: write failed"); } else { if (textw > 0) descw = ESL_MAX(32, textw - namew - 61); /* 61 chars excluding desc is from the format: 2 + 22+2 +22+2 +8+2 ++1 */ else descw = 0; /* unlimited desc length is handled separately */ /* The minimum width of the target table is 111 char: 47 from fields, 8 from min name, 32 from min desc, 13 spaces */ if (fprintf(ofp, "Scores for complete sequence%s (score includes all domains):\n", pli->mode == p7_SEARCH_SEQS ? "s" : "") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "per-sequence hit list: write failed"); if (fprintf(ofp, " %22s %22s %8s\n", " --- full sequence ---", " --- best 1 domain ---", "-#dom-") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "per-sequence hit list: write failed"); if (fprintf(ofp, " %9s %6s %5s %9s %6s %5s %5s %2s %-*s %s\n", "E-value", " score", " bias", "E-value", " score", " bias", " exp", "N", namew, (pli->mode == p7_SEARCH_SEQS ? "Sequence":"Model"), "Description") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "per-sequence hit list: write failed"); if (fprintf(ofp, " %9s %6s %5s %9s %6s %5s %5s %2s %-*s %s\n", "-------", "------", "-----", "-------", "------", "-----", " ----", "--", namew, "--------", "-----------") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "per-sequence hit list: write failed"); } for (h = 0; h < th->N; h++) if (th->hit[h]->flags & p7_IS_REPORTED) { d = th->hit[h]->best_domain; if (! (th->hit[h]->flags & p7_IS_INCLUDED) && ! have_printed_incthresh) { if (fprintf(ofp, " ------ inclusion threshold ------\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "per-sequence hit list: write failed"); have_printed_incthresh = TRUE; } if (pli->show_accessions) { /* the --acc option: report accessions rather than names if possible */ if (th->hit[h]->acc != NULL && th->hit[h]->acc[0] != '\0') showname = th->hit[h]->acc; else showname = th->hit[h]->name; } else showname = th->hit[h]->name; if (th->hit[h]->flags & p7_IS_NEW) newness = '+'; else if (th->hit[h]->flags & p7_IS_DROPPED) newness = '-'; else newness = ' '; if (pli->long_targets) { if (fprintf(ofp, "%c %9.2g %6.1f %5.1f %-*s %*d %*d ", newness, exp(th->hit[h]->lnP), // * pli->Z, th->hit[h]->score, eslCONST_LOG2R * th->hit[h]->dcl[d].dombias, // an nhmmer hit is really a domain, so this is the hit's bias correction namew, showname, posw, th->hit[h]->dcl[d].iali, posw, th->hit[h]->dcl[d].jali) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "per-sequence hit list: write failed"); } else { if (fprintf(ofp, "%c %9.2g %6.1f %5.1f %9.2g %6.1f %5.1f %5.1f %2d %-*s ", newness, exp(th->hit[h]->lnP) * pli->Z, th->hit[h]->score, th->hit[h]->pre_score - th->hit[h]->score, /* bias correction */ exp(th->hit[h]->dcl[d].lnP) * pli->Z, th->hit[h]->dcl[d].bitscore, eslCONST_LOG2R * th->hit[h]->dcl[d].dombias, /* convert NATS to BITS at last moment */ th->hit[h]->nexpected, th->hit[h]->nreported, namew, showname) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "per-sequence hit list: write failed"); } if (textw > 0) { if (fprintf(ofp, " %-.*s\n", descw, th->hit[h]->desc == NULL ? "" : th->hit[h]->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "per-sequence hit list: write failed"); } else { if (fprintf(ofp, " %s\n", th->hit[h]->desc == NULL ? "" : th->hit[h]->desc) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "per-sequence hit list: write failed"); } /* do NOT use *s with unlimited (INT_MAX) line length. Some systems * have an fprintf() bug here (we found one on an Opteron/SUSE Linux * system (#h66) */ } if (th->nreported == 0) { if (fprintf(ofp, "\n [No hits detected that satisfy reporting thresholds]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "per-sequence hit list: write failed"); } return eslOK; } /* Function: p7_tophits_Domains() * Synopsis: Standard output format for top domain hits and alignments. * * Purpose: For each reportable target sequence, output a tabular summary * of reportable domains found in it, followed by alignments of * each domain. * * Similar to ; see additional notes there. * * Returns: on success. * * Throws: if a write to fails; for example, if * the disk fills up. */ int p7_tophits_Domains(FILE *ofp, P7_TOPHITS *th, P7_PIPELINE *pli, int textw) { int h, d; int nd; int namew, descw; char *showname; int status; if (pli->long_targets) { if (fprintf(ofp, "Annotation for each hit %s:\n", pli->show_alignments ? " (and alignments)" : "") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } else { if (fprintf(ofp, "Domain annotation for each %s%s:\n", pli->mode == p7_SEARCH_SEQS ? "sequence" : "model", pli->show_alignments ? " (and alignments)" : "") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } for (h = 0; h < th->N; h++) if (th->hit[h]->flags & p7_IS_REPORTED) { if (pli->show_accessions && th->hit[h]->acc != NULL && th->hit[h]->acc[0] != '\0') { showname = th->hit[h]->acc; namew = strlen(th->hit[h]->acc); } else { showname = th->hit[h]->name; namew = strlen(th->hit[h]->name); } if (textw > 0) { descw = ESL_MAX(32, textw - namew - 5); if (fprintf(ofp, ">> %s %-.*s\n", showname, descw, (th->hit[h]->desc == NULL ? "" : th->hit[h]->desc)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } else { if (fprintf(ofp, ">> %s %s\n", showname, (th->hit[h]->desc == NULL ? "" : th->hit[h]->desc)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } if (th->hit[h]->nreported == 0) { if (fprintf(ofp," [No individual domains that satisfy reporting thresholds (although complete target did)]\n\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); continue; } if (pli->long_targets) { /* The dna hit table is 119 char wide: score bias Evalue hmmfrom hmm to alifrom ali to envfrom env to hqfrom hq to sq len acc ------ ----- --------- ------- ------- --------- --------- --------- --------- --------- --------- --------- ---- ! 82.7 104.4 4.9e-22 782 998 .. 241981174 241980968 .. 241981174 241980966 .. 241981174 241980968 234234233 0.78 */ if (fprintf(ofp, " %6s %5s %9s %9s %9s %2s %9s %9s %2s %9s %9s %9s %2s %4s\n", "score", "bias", " Evalue", "hmmfrom", "hmm to", " ", " alifrom ", " ali to ", " ", " envfrom ", " env to ", (pli->mode == p7_SEARCH_SEQS ? " sq len " : " mod len "), " ", "acc") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); if (fprintf(ofp, " %6s %5s %9s %9s %9s %2s %9s %9s %2s %9s %9s %9s %2s %4s\n", "------", "-----", "---------", "-------", "-------", " ", "---------", "---------", " ", "---------", "---------", "---------", " ", "----") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } else { /* The domain table is 101 char wide: # score bias Evalue hmmfrom hmmto alifrom ali to envfrom env to acc --- ------ ----- --------- ------- ------- ------- ------- ------- ------- ---- 1 ? 123.4 23.1 6.8e-9 3 1230 .. 1 492 [] 2 490 .] 0.90 123 ! 1234.5 123.4 123456789 1234567 1234567 .. 1234567 1234567 [] 1234567 1234568 .] 0.12 */ if (fprintf(ofp, " %3s %6s %5s %9s %9s %7s %7s %2s %7s %7s %2s %7s %7s %2s %4s\n", "#", "score", "bias", "c-Evalue", "i-Evalue", "hmmfrom", "hmm to", " ", "alifrom", "ali to", " ", "envfrom", "env to", " ", "acc") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); if (fprintf(ofp, " %3s %6s %5s %9s %9s %7s %7s %2s %7s %7s %2s %7s %7s %2s %4s\n", "---", "------", "-----", "---------", "---------", "-------", "-------", " ", "-------", "-------", " ", "-------", "-------", " ", "----") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } nd = 0; for (d = 0; d < th->hit[h]->ndom; d++) if (th->hit[h]->dcl[d].is_reported) { nd++; if (pli->long_targets) { if (fprintf(ofp, " %c %6.1f %5.1f %9.2g %9d %9d %c%c %9ld %9ld %c%c %9d %9d %c%c %9ld %4.2f\n", //nd, th->hit[h]->dcl[d].is_included ? '!' : '?', th->hit[h]->dcl[d].bitscore, th->hit[h]->dcl[d].dombias * eslCONST_LOG2R, /* convert NATS to BITS at last moment */ exp(th->hit[h]->dcl[d].lnP), th->hit[h]->dcl[d].ad->hmmfrom, th->hit[h]->dcl[d].ad->hmmto, (th->hit[h]->dcl[d].ad->hmmfrom == 1) ? '[' : '.', (th->hit[h]->dcl[d].ad->hmmto == th->hit[h]->dcl[d].ad->M) ? ']' : '.', th->hit[h]->dcl[d].ad->sqfrom, th->hit[h]->dcl[d].ad->sqto, (th->hit[h]->dcl[d].ad->sqfrom == 1) ? '[' : '.', (th->hit[h]->dcl[d].ad->sqto == th->hit[h]->dcl[d].ad->L) ? ']' : '.', th->hit[h]->dcl[d].ienv, th->hit[h]->dcl[d].jenv, (th->hit[h]->dcl[d].ienv == 1) ? '[' : '.', (th->hit[h]->dcl[d].jenv == th->hit[h]->dcl[d].ad->L) ? ']' : '.', th->hit[h]->dcl[d].ad->L, (th->hit[h]->dcl[d].oasc / (1.0 + fabs((float) (th->hit[h]->dcl[d].jenv - th->hit[h]->dcl[d].ienv))))) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } else { if (fprintf(ofp, " %3d %c %6.1f %5.1f %9.2g %9.2g %7d %7d %c%c %7ld %7ld %c%c %7d %7d %c%c %4.2f\n", nd, th->hit[h]->dcl[d].is_included ? '!' : '?', th->hit[h]->dcl[d].bitscore, th->hit[h]->dcl[d].dombias * eslCONST_LOG2R, /* convert NATS to BITS at last moment */ exp(th->hit[h]->dcl[d].lnP) * pli->domZ, exp(th->hit[h]->dcl[d].lnP) * pli->Z, th->hit[h]->dcl[d].ad->hmmfrom, th->hit[h]->dcl[d].ad->hmmto, (th->hit[h]->dcl[d].ad->hmmfrom == 1) ? '[' : '.', (th->hit[h]->dcl[d].ad->hmmto == th->hit[h]->dcl[d].ad->M) ? ']' : '.', th->hit[h]->dcl[d].ad->sqfrom, th->hit[h]->dcl[d].ad->sqto, (th->hit[h]->dcl[d].ad->sqfrom == 1) ? '[' : '.', (th->hit[h]->dcl[d].ad->sqto == th->hit[h]->dcl[d].ad->L) ? ']' : '.', th->hit[h]->dcl[d].ienv, th->hit[h]->dcl[d].jenv, (th->hit[h]->dcl[d].ienv == 1) ? '[' : '.', (th->hit[h]->dcl[d].jenv == th->hit[h]->dcl[d].ad->L) ? ']' : '.', (th->hit[h]->dcl[d].oasc / (1.0 + fabs((float) (th->hit[h]->dcl[d].jenv - th->hit[h]->dcl[d].ienv))))) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } } if (pli->show_alignments) { if (pli->long_targets) { if (fprintf(ofp, "\n Alignment:\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } else { if (fprintf(ofp, "\n Alignments for each domain:\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); nd = 0; } for (d = 0; d < th->hit[h]->ndom; d++) if (th->hit[h]->dcl[d].is_reported) { nd++; if (!pli->long_targets) { if (fprintf(ofp, " == domain %d", nd ) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } if (fprintf(ofp, " score: %.1f bits", th->hit[h]->dcl[d].bitscore) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); if (!pli->long_targets) { if (fprintf(ofp, "; conditional E-value: %.2g\n", exp(th->hit[h]->dcl[d].lnP) * pli->domZ) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } else { if (fprintf(ofp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } if ((status = p7_alidisplay_Print(ofp, th->hit[h]->dcl[d].ad, 40, textw, pli->show_accessions)) != eslOK) return status; if (fprintf(ofp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } } else { if (fprintf(ofp, "\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } } if (th->nreported == 0) { if (fprintf(ofp, "\n [No targets detected that satisfy reporting thresholds]\n") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "domain hit list: write failed"); } return eslOK; } /* Function: p7_tophits_Alignment() * Synopsis: Create a multiple alignment of all the included domains. * * Purpose: Create a multiple alignment of all domains marked * "includable" in the top hits list , and return it in * <*ret_msa>. * * Use of is identical to in . * Possible flags include , , * and ; they may be OR'ed together. Otherwise, pass * to set no flags. * * Caller may optionally provide , , and * to include additional sequences in the alignment * (the jackhmmer query, for example). Otherwise, pass . * * Returns: on success, and <*ret_msa> points to a new MSA that * the caller is responsible for freeing. * * Returns if there are no reported domains that * satisfy reporting thresholds, in which case <*ret_msa> * is . * * Throws: on allocation failure; on * unexpected internal data corruption. * * Xref: J4/29: incept. * J4/76: added inc_sqarr, inc_trarr, inc_n, optflags */ int p7_tophits_Alignment(const P7_TOPHITS *th, const ESL_ALPHABET *abc, ESL_SQ **inc_sqarr, P7_TRACE **inc_trarr, int inc_n, int optflags, ESL_MSA **ret_msa) { ESL_SQ **sqarr = NULL; P7_TRACE **trarr = NULL; ESL_MSA *msa = NULL; int ndom = 0; int h, d, y; int M; int status; /* How many domains will be included in the new alignment? * We also set model size M here; every alignment has a copy. */ for (h = 0; h < th->N; h++) if (th->hit[h]->flags & p7_IS_INCLUDED) { for (d = 0; d < th->hit[h]->ndom; d++) if (th->hit[h]->dcl[d].is_included) ndom++; } if (inc_n+ndom == 0) { status = eslFAIL; goto ERROR; } if (inc_n) M = inc_trarr[0]->M; else M = th->hit[0]->dcl[0].ad->M; /* Allocation */ ESL_ALLOC(sqarr, sizeof(ESL_SQ *) * (ndom + inc_n)); ESL_ALLOC(trarr, sizeof(P7_TRACE *) * (ndom + inc_n)); /* Inclusion of preexisting seqs, traces: make copy of pointers */ for (y = 0; y < inc_n; y++) { sqarr[y] = inc_sqarr[y]; trarr[y] = inc_trarr[y]; } for (; y < (ndom+inc_n); y++) { sqarr[y] = NULL; trarr[y] = NULL; } /* Make faux sequences, traces from hit list */ y = inc_n; for (h = 0; h < th->N; h++) if (th->hit[h]->flags & p7_IS_INCLUDED) { for (d = 0; d < th->hit[h]->ndom; d++) if (th->hit[h]->dcl[d].is_included) { if ((status = p7_alidisplay_Backconvert(th->hit[h]->dcl[d].ad, abc, &(sqarr[y]), &(trarr[y]))) != eslOK) goto ERROR; y++; } } /* Make the multiple alignment */ if ((status = p7_tracealign_Seqs(sqarr, trarr, inc_n+ndom, M, optflags, NULL, &msa)) != eslOK) goto ERROR; /* Clean up */ for (y = inc_n; y < ndom+inc_n; y++) esl_sq_Destroy(sqarr[y]); for (y = inc_n; y < ndom+inc_n; y++) p7_trace_Destroy(trarr[y]); free(sqarr); free(trarr); *ret_msa = msa; return eslOK; ERROR: if (sqarr != NULL) { for (y = inc_n; y < ndom+inc_n; y++) if (sqarr[y] != NULL) esl_sq_Destroy(sqarr[y]); free(sqarr); } if (trarr != NULL) { for (y = inc_n; y < ndom+inc_n; y++) if (trarr[y] != NULL) p7_trace_Destroy(trarr[y]); free(trarr); } if (msa != NULL) esl_msa_Destroy(msa); *ret_msa = NULL; return status; } /*---------------- end, standard output format ------------------*/ /***************************************************************** * 3. Tabular (parsable) output of pipeline results. *****************************************************************/ /* Function: p7_tophits_TabularTargets() * Synopsis: Output parsable table of per-sequence hits. * * Purpose: Output a parseable table of reportable per-sequence hits * in sorted tophits list in an easily parsed ASCII * tabular form to stream , using final pipeline * accounting stored in . * * Designed to be concatenated for multiple queries and * multiple top hits list. * * Returns: on success. * * Throws: if a write to fails; for example, if * the disk fills up. */ int p7_tophits_TabularTargets(FILE *ofp, char *qname, char *qacc, P7_TOPHITS *th, P7_PIPELINE *pli, int show_header) { int qnamew = ESL_MAX(20, strlen(qname)); int tnamew = ESL_MAX(20, p7_tophits_GetMaxNameLength(th)); int qaccw = ((qacc != NULL) ? ESL_MAX(10, strlen(qacc)) : 10); int taccw = ESL_MAX(10, p7_tophits_GetMaxAccessionLength(th)); int posw = (pli->long_targets ? ESL_MAX(7, p7_tophits_GetMaxPositionLength(th)) : 0); int h,d; if (show_header) { if (pli->long_targets) { if (fprintf(ofp, "#%-*s %-*s %-*s %-*s %s %s %*s %*s %*s %*s %*s %6s %9s %6s %5s %s\n", tnamew-1, " target name", taccw, "accession", qnamew, "query name", qaccw, "accession", "hmmfrom", "hmm to", posw, "alifrom", posw, "ali to", posw, "envfrom", posw, "env to", posw, ( pli->mode == p7_SCAN_MODELS ? "modlen" : "sq len" ), "strand", " E-value", " score", " bias", "description of target") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "tabular per-sequence hit list: write failed"); if (fprintf(ofp, "#%*s %*s %*s %*s %s %s %*s %*s %*s %*s %*s %6s %9s %6s %5s %s\n", tnamew-1, "-------------------", taccw, "----------", qnamew, "--------------------", qaccw, "----------", "-------", "-------", posw, "-------", posw, "-------", posw, "-------", posw, "-------", posw, "-------", "------", "---------", "------", "-----", "---------------------") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "tabular per-per-sequence hit list: write failed"); } else { if (fprintf(ofp, "#%*s %22s %22s %33s\n", tnamew+qnamew+taccw+qaccw+2, "", "--- full sequence ----", "--- best 1 domain ----", "--- domain number estimation ----") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "tabular per-sequence hit list: write failed"); if (fprintf(ofp, "#%-*s %-*s %-*s %-*s %9s %6s %5s %9s %6s %5s %5s %3s %3s %3s %3s %3s %3s %3s %s\n", tnamew-1, " target name", taccw, "accession", qnamew, "query name", qaccw, "accession", " E-value", " score", " bias", " E-value", " score", " bias", "exp", "reg", "clu", " ov", "env", "dom", "rep", "inc", "description of target") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "tabular per-sequence hit list: write failed"); if (fprintf(ofp, "#%*s %*s %*s %*s %9s %6s %5s %9s %6s %5s %5s %3s %3s %3s %3s %3s %3s %3s %s\n", tnamew-1, "-------------------", taccw, "----------", qnamew, "--------------------", qaccw, "----------", "---------", "------", "-----", "---------", "------", "-----", "---", "---", "---", "---", "---", "---", "---", "---", "---------------------") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "tabular per-sequence hit list: write failed"); } } for (h = 0; h < th->N; h++) if (th->hit[h]->flags & p7_IS_REPORTED) { d = th->hit[h]->best_domain; if (pli->long_targets) { if (fprintf(ofp, "%-*s %-*s %-*s %-*s %7d %7d %*d %*d %*d %*d %*ld %6s %9.2g %6.1f %5.1f %s\n", tnamew, th->hit[h]->name, taccw, th->hit[h]->acc ? th->hit[h]->acc : "-", qnamew, qname, qaccw, ( (qacc != NULL && qacc[0] != '\0') ? qacc : "-"), th->hit[h]->dcl[d].ad->hmmfrom, th->hit[h]->dcl[d].ad->hmmto, posw, th->hit[h]->dcl[d].iali, posw, th->hit[h]->dcl[d].jali, posw, th->hit[h]->dcl[d].ienv, posw, th->hit[h]->dcl[d].jenv, posw, th->hit[h]->dcl[0].ad->L, (th->hit[h]->dcl[d].iali < th->hit[h]->dcl[d].jali ? " + " : " - "), exp(th->hit[h]->lnP), th->hit[h]->score, th->hit[h]->dcl[d].dombias * eslCONST_LOG2R, /* convert NATS to BITS at last moment */ th->hit[h]->desc == NULL ? "-" : th->hit[h]->desc ) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "tabular per-sequence hit list: write failed"); } else { if (fprintf(ofp, "%-*s %-*s %-*s %-*s %9.2g %6.1f %5.1f %9.2g %6.1f %5.1f %5.1f %3d %3d %3d %3d %3d %3d %3d %s\n", tnamew, th->hit[h]->name, taccw, th->hit[h]->acc ? th->hit[h]->acc : "-", qnamew, qname, qaccw, ( (qacc != NULL && qacc[0] != '\0') ? qacc : "-"), exp(th->hit[h]->lnP) * pli->Z, th->hit[h]->score, th->hit[h]->pre_score - th->hit[h]->score, /* bias correction */ exp(th->hit[h]->dcl[d].lnP) * pli->Z, th->hit[h]->dcl[d].bitscore, th->hit[h]->dcl[d].dombias * eslCONST_LOG2R, /* convert NATS to BITS at last moment */ th->hit[h]->nexpected, th->hit[h]->nregions, th->hit[h]->nclustered, th->hit[h]->noverlaps, th->hit[h]->nenvelopes, th->hit[h]->ndom, th->hit[h]->nreported, th->hit[h]->nincluded, (th->hit[h]->desc == NULL ? "-" : th->hit[h]->desc)) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "tabular per-sequence hit list: write failed"); } } return eslOK; } /* Function: p7_tophits_TabularDomains() * Synopsis: Output parseable table of per-domain hits * * Purpose: Output a parseable table of reportable per-domain hits * in sorted tophits list in an easily parsed ASCII * tabular form to stream , using final pipeline * accounting stored in . * * Designed to be concatenated for multiple queries and * multiple top hits list. * * Returns: on success. * * Throws: if a write to fails; for example, if * the disk fills up. */ int p7_tophits_TabularDomains(FILE *ofp, char *qname, char *qacc, P7_TOPHITS *th, P7_PIPELINE *pli, int show_header) { int qnamew = ESL_MAX(20, strlen(qname)); int tnamew = ESL_MAX(20, p7_tophits_GetMaxNameLength(th)); int qaccw = (qacc ? ESL_MAX(10, strlen(qacc)) : 10); int taccw = ESL_MAX(10, p7_tophits_GetMaxAccessionLength(th)); int tlen, qlen; int h,d,nd; if (show_header) { if (fprintf(ofp, "#%*s %22s %40s %11s %11s %11s\n", tnamew+qnamew-1+15+taccw+qaccw, "", "--- full sequence ---", "-------------- this domain -------------", "hmm coord", "ali coord", "env coord") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "tabular per-domain hit list: write failed"); if (fprintf(ofp, "#%-*s %-*s %5s %-*s %-*s %5s %9s %6s %5s %3s %3s %9s %9s %6s %5s %5s %5s %5s %5s %5s %5s %4s %s\n", tnamew-1, " target name", taccw, "accession", "tlen", qnamew, "query name", qaccw, "accession", "qlen", "E-value", "score", "bias", "#", "of", "c-Evalue", "i-Evalue", "score", "bias", "from", "to", "from", "to", "from", "to", "acc", "description of target") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "tabular per-domain hit list: write failed"); if (fprintf(ofp, "#%*s %*s %5s %*s %*s %5s %9s %6s %5s %3s %3s %9s %9s %6s %5s %5s %5s %5s %5s %5s %5s %4s %s\n", tnamew-1, "-------------------", taccw, "----------", "-----", qnamew, "--------------------", qaccw, "----------", "-----", "---------", "------", "-----", "---", "---", "---------", "---------", "------", "-----", "-----", "-----", "-----", "-----", "-----", "-----", "----", "---------------------") < 0) ESL_EXCEPTION_SYS(eslEWRITE, "tabular per-domain hit list: write failed"); } for (h = 0; h < th->N; h++) if (th->hit[h]->flags & p7_IS_REPORTED) { nd = 0; for (d = 0; d < th->hit[h]->ndom; d++) if (th->hit[h]->dcl[d].is_reported) { nd++; /* in hmmsearch, targets are seqs and queries are HMMs; * in hmmscan, the reverse. but in the ALIDISPLAY * structure, lengths L and M are for seq and HMMs, not * for query and target, so sort it out. */ if (pli->mode == p7_SEARCH_SEQS) { qlen = th->hit[h]->dcl[d].ad->M; tlen = th->hit[h]->dcl[d].ad->L; } else { qlen = th->hit[h]->dcl[d].ad->L; tlen = th->hit[h]->dcl[d].ad->M; } if (fprintf(ofp, "%-*s %-*s %5d %-*s %-*s %5d %9.2g %6.1f %5.1f %3d %3d %9.2g %9.2g %6.1f %5.1f %5d %5d %5ld %5ld %5d %5d %4.2f %s\n", tnamew, th->hit[h]->name, taccw, th->hit[h]->acc ? th->hit[h]->acc : "-", tlen, qnamew, qname, qaccw, ( (qacc != NULL && qacc[0] != '\0') ? qacc : "-"), qlen, exp(th->hit[h]->lnP) * pli->Z, th->hit[h]->score, th->hit[h]->pre_score - th->hit[h]->score, /* bias correction */ nd, th->hit[h]->nreported, exp(th->hit[h]->dcl[d].lnP) * pli->domZ, exp(th->hit[h]->dcl[d].lnP) * pli->Z, th->hit[h]->dcl[d].bitscore, th->hit[h]->dcl[d].dombias * eslCONST_LOG2R, /* NATS to BITS at last moment */ th->hit[h]->dcl[d].ad->hmmfrom, th->hit[h]->dcl[d].ad->hmmto, th->hit[h]->dcl[d].ad->sqfrom, th->hit[h]->dcl[d].ad->sqto, th->hit[h]->dcl[d].ienv, th->hit[h]->dcl[d].jenv, (th->hit[h]->dcl[d].oasc / (1.0 + fabs((float) (th->hit[h]->dcl[d].jenv - th->hit[h]->dcl[d].ienv)))), (th->hit[h]->desc ? th->hit[h]->desc : "-")) < 0) ESL_EXCEPTION_SYS(eslEWRITE, "tabular per-domain hit list: write failed"); } } return eslOK; } /* Function: p7_tophits_TabularXfam() * Synopsis: Output parsable table(s) of hits, in format desired by Xfam. * * Purpose: Output a parseable table of reportable hits in sorted * tophits list in an easily parsed ASCII tabular * form to stream , using final pipeline accounting * stored in . * * For long-target nucleotide queries, this will print the * same hits as p7_tophits_TabularTargets(), but with the * smaller number of (reordered) fields required by Dfam * scripts. * * For protein queries, this will print two tables: * (a) per-sequence hits as presented by * p7_tophits_TabularTargets(), but formatted for * Pfam scripts; * (b) per-domain hits, similar to those presented by * p7_tophits_TabularDomains(), but sorted by * score/e-value, and formated for Pfam scripts. * * Returns: on success. * * Throws: on allocation failure. * if a write to fails; for example, if * the disk fills up. */ int p7_tophits_TabularXfam(FILE *ofp, char *qname, char *qacc, P7_TOPHITS *th, P7_PIPELINE *pli) { P7_TOPHITS *domHitlist = NULL; P7_HIT *domhit = NULL; int tnamew = ESL_MAX(20, p7_tophits_GetMaxNameLength(th)); int taccw = ESL_MAX(20, p7_tophits_GetMaxAccessionLength(th)); int qnamew = ESL_MAX(20, strlen(qname)); int ndom = 0; int posw = (pli->long_targets ? ESL_MAX(7, p7_tophits_GetMaxPositionLength(th)) : 0); int h,d; int status; if (pli->long_targets) { if (fprintf(ofp, "# hit scores\n# ----------\n#\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "xfam tabular output: write failed"); if (fprintf(ofp, "# %-*s %-*s %-*s %6s %9s %5s %s %s %6s %*s %*s %*s %*s %*s %s\n", tnamew-1, "target name", taccw, "acc", qnamew, "query name", "bits", " e-value", " bias", "hmm-st", "hmm-en", "strand", posw, "ali-st", posw, "ali-en", posw, "env-st", posw, "env-en", posw, ( pli->mode == p7_SCAN_MODELS ? "modlen" : "sq-len" ), "description of target") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "xfam tabular output: write failed"); if (fprintf(ofp, "# %-*s %-*s %-*s %6s %9s %5s %s %s %6s %*s %*s %*s %*s %*s %s\n", tnamew-1, "-------------------", taccw, "-------------------", qnamew, "-------------------", "------", "---------", "-----", "-------", "-------", "------", posw, "-------", posw, "-------", posw, "-------", posw, "-------", posw, "-------", "---------------------") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "xfam tabular output: write failed"); for (h = 0; h < th->N; h++) if (th->hit[h]->flags & p7_IS_REPORTED) { //d = th->hit[h]->best_domain; if (fprintf(ofp, "%-*s %-*s %-*s %6.1f %9.2g %5.1f %7d %7d %s %*d %*d %*d %*d %*ld %s\n", tnamew, th->hit[h]->name, taccw, ( pli->mode == p7_SCAN_MODELS ? th->hit[h]->acc : qacc ), qnamew, qname, th->hit[h]->score, exp(th->hit[h]->lnP), th->hit[h]->dcl[0].dombias * eslCONST_LOG2R, /* convert nats to bits at last moment */ th->hit[h]->dcl[0].ad->hmmfrom, th->hit[h]->dcl[0].ad->hmmto, (th->hit[h]->dcl[0].iali < th->hit[h]->dcl[0].jali ? " + " : " - "), posw, th->hit[h]->dcl[0].iali, posw, th->hit[h]->dcl[0].jali, posw, th->hit[h]->dcl[0].ienv, posw, th->hit[h]->dcl[0].jenv, posw, th->hit[h]->dcl[0].ad->L, th->hit[h]->desc == NULL ? "-" : th->hit[h]->desc) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "xfam tabular output: write failed"); } } else { if (fprintf(ofp, "# Sequence scores\n# ---------------\n#\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "xfam tabular output: write failed"); if (fprintf(ofp, "# %-*s %6s %9s %3s %5s %5s %s\n", tnamew-1, "name", " bits", " E-value", "n", "exp", " bias", "description") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "xfam tabular output: write failed"); if (fprintf(ofp, "# %*s %6s %9s %3s %5s %5s %s\n", tnamew-1, "-------------------", "------", "---------","---", "-----", "-----", "---------------------") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "xfam tabular output: write failed"); for (h = 0; h < th->N; h++) { if (th->hit[h]->flags & p7_IS_REPORTED) { if (fprintf(ofp, "%-*s %6.1f %9.2g %3d %5.1f %5.1f %s\n", tnamew, th->hit[h]->name, th->hit[h]->score, exp(th->hit[h]->lnP) * pli->Z, th->hit[h]->ndom, th->hit[h]->nexpected, th->hit[h]->pre_score - th->hit[h]->score, /* bias correction */ (th->hit[h]->desc == NULL ? "-" : th->hit[h]->desc)) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "xfam tabular output: write failed"); for (d = 0; d < th->hit[h]->ndom; d++) if (th->hit[h]->dcl[d].is_reported) ndom ++; } } if (fprintf(ofp, "\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "xfam tabular output: write failed"); /* Need to sort the domains. One way to do this is to re-use the hit sorting machinery, * so we create one "hit" for each domain, then hand it off to the sorter */ if ((domHitlist = p7_tophits_Create()) == NULL) return eslEMEM; for (h = 0; h < th->N; h++) { if (th->hit[h]->flags & p7_IS_REPORTED) { int ndomReported = 0; for (d = 0; d < th->hit[h]->ndom; d++) { if (th->hit[h]->dcl[d].is_reported) { p7_tophits_CreateNextHit(domHitlist, &domhit); ndomReported++; ESL_ALLOC(domhit->dcl, sizeof(P7_DOMAIN) ); domhit->ndom = ndomReported; // re-using this variable to track the ordinal value of the domain in the original hit list that generated this pseudo-hit domhit->name = th->hit[h]->name; domhit->desc = th->hit[h]->desc; domhit->dcl[0] = th->hit[h]->dcl[d]; domhit->sortkey = pli->inc_by_E ? -1.0 * th->hit[h]->dcl[d].lnP : th->hit[h]->dcl[d].bitscore; } } } } p7_tophits_SortBySortkey(domHitlist); // Now with this list of sorted "hits" (really domains) if (fprintf(ofp, "# Domain scores\n# -------------\n#\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "xfam tabular output: write failed"); if (fprintf(ofp, "# %-*s %6s %9s %5s %5s %6s %6s %6s %6s %6s %6s %s\n", tnamew-1, " name", "bits", "E-value", "hit", "bias", "env-st", "env-en", "ali-st", "ali-en", "hmm-st", "hmm-en", "description") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "xfam tabular output: write failed"); if (fprintf(ofp, "# %*s %6s %9s %5s %5s %6s %6s %6s %6s %6s %6s %s\n", tnamew-1, "-------------------", "------", "---------", "-----", "-----", "------", "------", "------", "------", "------", "------", "---------------------") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "xfam tabular output: write failed"); for (h = 0; h < domHitlist->N; h++) { domhit = domHitlist->hit[h]; if (fprintf(ofp, "%-*s %6.1f %9.2g %5d %5.1f %6d %6d %6ld %6ld %6d %6d %s\n", tnamew, domHitlist->hit[h]->name, domhit->dcl[0].bitscore, exp(domhit->dcl[0].lnP) * pli->Z, //i-Evalue domhit->ndom, domhit->dcl[0].dombias * eslCONST_LOG2R, // NATS to BITS at last moment domhit->dcl[0].ienv, domhit->dcl[0].jenv, domhit->dcl[0].ad->sqfrom, domhit->dcl[0].ad->sqto, domhit->dcl[0].ad->hmmfrom, domhit->dcl[0].ad->hmmto, (domhit->desc ? domhit->desc : "-")) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "xfam tabular output: write failed"); } free (domHitlist->unsrt); free (domHitlist->hit); free (domHitlist); } return eslOK; ERROR: if (domHitlist) { free (domHitlist->unsrt); free (domHitlist->hit); free (domHitlist); } return status; } /* Function: p7_tophits_AliScores() * Synopsis: Output per-position scores for each position of each query/hit pair * * Purpose: This depends on per-alignment-position scores having been * previously computed, as in p7_pipeline_computeAliScores() * * Returns: on success. * * Throws: none */ int p7_tophits_AliScores(FILE *ofp, char *qname, P7_TOPHITS *th ) { P7_HIT *hit; int h, i; float *scores; for (h = 0; h < th->N; h++) { hit = th->hit[h]; if (hit->flags & p7_IS_REPORTED) { fprintf (ofp, "%s %s %d %d :", qname, hit->name, hit->dcl[0].iali, hit->dcl[0].jali); scores = hit->dcl[0].scores_per_pos; for (i=0; idcl[0].ad->N; i++) { if (scores[i] == -eslINFINITY) fprintf (ofp, " >"); else fprintf (ofp, " %.3f", scores[i]); } fprintf (ofp, "\n"); } } return eslOK; } /* Function: p7_tophits_TabularTail() * Synopsis: Print a trailer on a tabular output file. * * Purpose: Print some metadata as a trailer on a tabular output file: * date/time, the program, HMMER3 version info, the pipeline mode (SCAN or SEARCH), * the query and target filenames, a spoof commandline * recording the entire program configuration, and * a "fini!" that's useful for detecting successful * output completion. * * Args: ofp - open tabular output file (either --tblout or --domtblout) * progname - "hmmscan", for example * pipemode - p7_SEARCH_SEQS | p7_SCAN_MODELS * qfile - name of query file, or '-' for stdin, or '[none]' if NULL * tfile - name of target file, or '-' for stdin, or '[none]' if NULL * go - program configuration; used to generate spoofed command line * * Returns: . * * Throws: on allocation failure. * if time() or ctime_r() system calls fail. * on write failure. * * Xref: SRE:J7/54 */ int p7_tophits_TabularTail(FILE *ofp, const char *progname, enum p7_pipemodes_e pipemode, const char *qfile, const char *tfile, const ESL_GETOPTS *go) { time_t date = time(NULL); char *spoof_cmd = NULL; char *cwd = NULL; char timestamp[32]; char modestamp[16]; int status; if ((status = esl_opt_SpoofCmdline(go, &spoof_cmd)) != eslOK) goto ERROR; if (date == -1) ESL_XEXCEPTION(eslESYS, "time() failed"); if ((ctime_r(&date, timestamp)) == NULL) ESL_XEXCEPTION(eslESYS, "ctime_r() failed"); switch (pipemode) { case p7_SEARCH_SEQS: strcpy(modestamp, "SEARCH"); break; case p7_SCAN_MODELS: strcpy(modestamp, "SCAN"); break; default: ESL_EXCEPTION(eslEINCONCEIVABLE, "wait, what? no such pipemode"); } esl_getcwd(&cwd); if (fprintf(ofp, "#\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "tabular output tail, write failed"); if (fprintf(ofp, "# Program: %s\n", (progname == NULL) ? "[none]" : progname) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "tabular output tail, write failed"); if (fprintf(ofp, "# Version: %s (%s)\n", HMMER_VERSION, HMMER_DATE) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "tabular output tail, write failed"); if (fprintf(ofp, "# Pipeline mode: %s\n", modestamp) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "tabular output tail, write failed"); if (fprintf(ofp, "# Query file: %s\n", (qfile == NULL) ? "[none]" : qfile) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "tabular output tail, write failed"); if (fprintf(ofp, "# Target file: %s\n", (tfile == NULL) ? "[none]" : tfile) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "tabular output tail, write failed"); if (fprintf(ofp, "# Option settings: %s\n", spoof_cmd) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "tabular output tail, write failed"); if (fprintf(ofp, "# Current dir: %s\n", (cwd == NULL) ? "[unknown]" : cwd) < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "tabular output tail, write failed"); if (fprintf(ofp, "# Date: %s", timestamp) < 0) /* timestamp ends in \n */ ESL_XEXCEPTION_SYS(eslEWRITE, "tabular output tail, write failed"); if (fprintf(ofp, "# [ok]\n") < 0) ESL_XEXCEPTION_SYS(eslEWRITE, "tabular output tail, write failed"); free(spoof_cmd); if (cwd) free(cwd); return eslOK; ERROR: if (spoof_cmd) free(spoof_cmd); if (cwd) free(cwd); return status; } /*------------------- end, tabular output -----------------------*/ /***************************************************************** * 4. Benchmark driver *****************************************************************/ #ifdef p7TOPHITS_BENCHMARK /* gcc -o benchmark-tophits -std=gnu99 -g -O2 -I. -L. -I../easel -L../easel -Dp7TOPHITS_BENCHMARK p7_tophits.c -lhmmer -leasel -lm ./benchmark-tophits As of 28 Dec 07, shows 0.20u for 10 lists of 10,000 hits each (at least ~100x normal expectation), so we expect top hits list time to be negligible for typical hmmsearch/hmmscan runs. If needed, we do have opportunity for optimization, however - especially in memory handling. */ #include "p7_config.h" #include "easel.h" #include "esl_getopts.h" #include "esl_stopwatch.h" #include "esl_random.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-M", eslARG_INT, "10", NULL, NULL, NULL, NULL, NULL, "number of top hits lists to simulate and merge", 0 }, { "-N", eslARG_INT, "10000", NULL, NULL, NULL, NULL, NULL, "number of top hits to simulate", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "benchmark driver for P7_TOPHITS"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); int N = esl_opt_GetInteger(go, "-N"); int M = esl_opt_GetInteger(go, "-M"); P7_TOPHITS **h = NULL; double *sortkeys = NULL; char name[] = "not_unique_name"; char acc[] = "not_unique_acc"; char desc[] = "Test description for the purposes of making the benchmark allocate space"; int i,j; int status; /* prep work: generate our sort keys before starting to time anything */ ESL_ALLOC(h, sizeof(P7_TOPHITS *) * M); /* allocate pointers for M lists */ ESL_ALLOC(sortkeys, sizeof(double) * N * M); for (i = 0; i < N*M; i++) sortkeys[i] = esl_random(r); esl_stopwatch_Start(w); /* generate M "random" lists and sort them */ for (j = 0; j < M; j++) { h[j] = p7_tophits_Create(); for (i = 0; i < N; i++) p7_tophits_Add(h[j], name, acc, desc, sortkeys[j*N + i], (float) sortkeys[j*N+i], sortkeys[j*N+i], (float) sortkeys[j*N+i], sortkeys[j*N+i], i, i, N, i, i, N, i, N, NULL); p7_tophits_SortBySortkey(h[j]); } /* then merge them into one big list in h[0] */ for (j = 1; j < M; j++) { p7_tophits_Merge(h[0], h[j]); p7_tophits_Destroy(h[j]); } esl_stopwatch_Stop(w); p7_tophits_Destroy(h[0]); status = eslOK; ERROR: esl_getopts_Destroy(go); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); if (sortkeys != NULL) free(sortkeys); if (h != NULL) free(h); return status; } #endif /*p7TOPHITS_BENCHMARK*/ /***************************************************************** * 5. Test driver *****************************************************************/ #ifdef p7TOPHITS_TESTDRIVE /* gcc -o tophits_utest -std=gnu99 -g -O2 -I. -L. -I../easel -L../easel -Dp7TOPHITS_TESTDRIVE p7_tophits.c -lhmmer -leasel -lm ./tophits_test */ #include "p7_config.h" #include "easel.h" #include "esl_getopts.h" #include "esl_stopwatch.h" #include "esl_random.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-N", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of top hits to simulate", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for P7_TOPHITS"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); int N = esl_opt_GetInteger(go, "-N"); P7_TOPHITS *h1 = NULL; P7_TOPHITS *h2 = NULL; P7_TOPHITS *h3 = NULL; char name[] = "not_unique_name"; char acc[] = "not_unique_acc"; char desc[] = "Test description for the purposes of making the test driver allocate space"; double key; int i; h1 = p7_tophits_Create(); h2 = p7_tophits_Create(); h3 = p7_tophits_Create(); for (i = 0; i < N; i++) { key = esl_random(r); p7_tophits_Add(h1, name, acc, desc, key, (float) key, key, (float) key, key, i, i, N, i, i, N, 1, 1, NULL); key = 10.0 * esl_random(r); p7_tophits_Add(h2, name, acc, desc, key, (float) key, key, (float) key, key, i, i, N, i, i, N, 2, 2, NULL); key = 0.1 * esl_random(r); p7_tophits_Add(h3, name, acc, desc, key, (float) key, key, (float) key, key, i, i, N, i, i, N, 3, 3, NULL); } p7_tophits_Add(h1, "last", NULL, NULL, -1.0, (float) key, key, (float) key, key, i, i, N, i, i, N, 1, 1, NULL); p7_tophits_Add(h1, "first", NULL, NULL, 20.0, (float) key, key, (float) key, key, i, i, N, i, i, N, 1, 1, NULL); p7_tophits_SortBySortkey(h1); if (strcmp(h1->hit[0]->name, "first") != 0) esl_fatal("sort failed (top is %s = %f)", h1->hit[0]->name, h1->hit[0]->sortkey); if (strcmp(h1->hit[N+1]->name, "last") != 0) esl_fatal("sort failed (last is %s = %f)", h1->hit[N+1]->name, h1->hit[N+1]->sortkey); p7_tophits_Merge(h1, h2); if (strcmp(h1->hit[0]->name, "first") != 0) esl_fatal("after merge 1, sort failed (top is %s = %f)", h1->hit[0]->name, h1->hit[0]->sortkey); if (strcmp(h1->hit[2*N+1]->name, "last") != 0) esl_fatal("after merge 1, sort failed (last is %s = %f)", h1->hit[2*N+1]->name, h1->hit[2*N+1]->sortkey); p7_tophits_Merge(h3, h1); if (strcmp(h3->hit[0]->name, "first") != 0) esl_fatal("after merge 2, sort failed (top is %s = %f)", h3->hit[0]->name, h3->hit[0]->sortkey); if (strcmp(h3->hit[3*N+1]->name, "last") != 0) esl_fatal("after merge 2, sort failed (last is %s = %f)", h3->hit[3*N+1]->name, h3->hit[3*N+1]->sortkey); if (p7_tophits_GetMaxNameLength(h3) != strlen(name)) esl_fatal("GetMaxNameLength() failed"); p7_tophits_Destroy(h1); p7_tophits_Destroy(h2); p7_tophits_Destroy(h3); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return eslOK; } #endif /*p7TOPHITS_TESTDRIVE*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. * * SVN $Id: p7_tophits.c 4520 2013-08-09 02:12:54Z wheelert $ * SVN $URL: https://svn.janelia.org/eddylab/eddys/src/hmmer/branches/3.1/src/p7_tophits.c $ *****************************************************************/ hmmer-3.1b2/src/p7_gmxb.h0000664361611702660230000000125312473612614014575 0ustar wheelerteddy#ifndef P7_GMXB_INCLUDED #define P7_GMXB_INCLUDED #include "p7_gbands.h" typedef struct { float *dp; float *xmx; P7_GBANDS *bnd; /* a reference copy; caller remains responsible for free'ing banding */ int64_t dalloc; int xalloc; } P7_GMXB; extern P7_GMXB *p7_gmxb_Create(P7_GBANDS *bnd); extern int p7_gmxb_Reinit(P7_GMXB *gxb, P7_GBANDS *bnd); extern int p7_gmxb_Reuse(P7_GMXB *gxb); extern void p7_gmxb_Destroy(P7_GMXB *gxb); extern int p7_gmxb_Dump(FILE *ofp, P7_GMXB *gxb, int flags); extern int p7_GForwardBanded(const ESL_DSQ *dsq, int L, const P7_PROFILE *gm, P7_GMXB *gxb, float *opt_sc); #endif /*P7_GMXB_INCLUDED*/ hmmer-3.1b2/src/impl_sse/0000775361611702660230000000000012473613132014667 5ustar wheelerteddyhmmer-3.1b2/src/impl_sse/mpi.c0000664361611702660230000011075212473612613015631 0ustar wheelerteddy/* Optional support for MPI parallelization. * * Contents: * 1. Communicating P7_OPROFILE, a score profile. * 2. Benchmark driver. * 3. Unit tests. * 4. Test driver. * 5. Copyright and license information. * * SRE, Thu Jun 14 09:59:20 2007 [Janelia] [Tom Waits, Orphans] * SVN $Id: mpi.c 4452 2013-05-05 01:44:04Z wheelert $ */ #include "p7_config.h" #ifdef HAVE_MPI #include #include #include #include "mpi.h" #include /* SSE */ #include /* SSE2 */ #include "easel.h" #include "esl_mpi.h" #include "esl_getopts.h" #include "hmmer.h" /***************************************************************** * 1. Communicating P7_OPROFILE, an optimized model. *****************************************************************/ /* Function: p7_oprofile_MPISend() * Synopsis: Send an OPROFILE as an MPI work unit. * Incept: MSF, Wed Oct 21, 2009 [Janelia] * * Purpose: Sends an OPROFILE as a work unit to MPI process * (where ranges from 0..), tagged * with MPI tag , for MPI communicator , as * the sole workunit or result. * * Work units are prefixed by a status code. If is * , the work unit is an code followed by * the packed HMM. If is NULL, the work unit is an * code, which knows how to * interpret; this is typically used for an end-of-data * signal to cleanly shut down worker processes. * * In order to minimize alloc/free cycles in this routine, * caller passes a pointer to a working buffer <*buf> of * size <*nalloc> characters. If necessary (i.e. if is * too big to fit), <*buf> will be reallocated and <*nalloc> * increased to the new size. As a special case, if <*buf> * is and <*nalloc> is 0, the buffer will be * allocated appropriately, but the caller is still * responsible for free'ing it. * * Returns: on success; <*buf> may have been reallocated and * <*nalloc> may have been increased. * * Throws: if an MPI call fails; if a malloc/realloc * fails. In either case, <*buf> and <*nalloc> remain valid and useful * memory (though the contents of <*buf> are undefined). * * Note: Compare to p7_hmmfile_WriteBinary(). The two operations (sending * an HMM via MPI, or saving it as a binary file to disk) are * similar. */ int p7_oprofile_MPISend(P7_OPROFILE *om, int dest, int tag, MPI_Comm comm, char **buf, int *nalloc) { int status; int code; int sz, n, pos; /* Figure out size */ if (MPI_Pack_size(1, MPI_INT, comm, &n) != 0) ESL_XEXCEPTION(eslESYS, "mpi pack size failed"); if (om != NULL) { if ((status = p7_oprofile_MPIPackSize(om, comm, &sz)) != eslOK) return status; n += sz; } /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* Pack the status code and OPROFILE into the buffer */ pos = 0; code = (om == NULL) ? eslEOD : eslOK; if (MPI_Pack(&code, 1, MPI_INT, *buf, n, &pos, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi pack failed"); if (om != NULL) { if ((status = p7_oprofile_MPIPack(om, *buf, n, &pos, comm)) != eslOK) return status; } /* Send the packed OPROFILE to the destination. */ if (MPI_Send(*buf, n, MPI_PACKED, dest, tag, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi send failed"); return eslOK; ERROR: return status; } /* Function: p7_oprofile_MPIPackSize() * Synopsis: Calculates size needed to pack an OPROFILE. * Incept: MSF, Wed Oct 21, 2009 [Janelia] * * Purpose: Calculate an upper bound on the number of bytes * that will need to pack an * OPROFILE in a packed MPI message for MPI * communicator ; return that number of bytes * in <*ret_n>. * * Returns: on success, and <*ret_n> contains the answer. * * Throws: if an MPI call fails, and <*ret_n> is 0. */ int p7_oprofile_MPIPackSize(P7_OPROFILE *om, MPI_Comm comm, int *ret_n) { int status; int n = 0; int K = om->abc->Kp; int len = 0; int cnt; int sz; int Q4 = p7O_NQF(om->M); int Q8 = p7O_NQW(om->M); int Q16 = p7O_NQB(om->M); int vsz = sizeof(__m128i); /* MSV Filter information */ if (MPI_Pack_size(5, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(1, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(vsz*Q16, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += (K*sz); /* Viterbi Filter information */ if (MPI_Pack_size(1, MPI_SHORT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += ((p7O_NXSTATES*p7O_NXTRANS+2)*sz); if (MPI_Pack_size(2, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(K*vsz*Q8, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(8*vsz*Q8, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* Forward/Backward information */ if (MPI_Pack_size(1, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += (p7O_NXSTATES*p7O_NXTRANS*sz); if (MPI_Pack_size(K*vsz*Q4, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(8*vsz*Q4, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* disk offsets */ if (MPI_Pack_size(1, MPI_LONG_LONG_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += ((p7_NOFFSETS+2)*sz); /* annotation info */ if (om->name != NULL) len += strlen(om->name) + 1; if (om->acc != NULL) len += strlen(om->acc) + 1; if (om->desc != NULL) len += strlen(om->desc) + 1; if (om->rf != NULL) len += strlen(om->rf) + 1; if (om->mm != NULL) len += strlen(om->mm) + 1; if (om->cs != NULL) len += strlen(om->cs) + 1; if (om->consensus != NULL) len += strlen(om->consensus) + 1; if (MPI_Pack_size(7, MPI_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(len, MPI_CHAR, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; cnt = p7_NEVPARAM + p7_NCUTOFFS + p7_MAXABET; if (MPI_Pack_size(cnt, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; /* current model size */ if (MPI_Pack_size(4, MPI_INT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; if (MPI_Pack_size(1, MPI_FLOAT, comm, &sz) != 0) ESL_XEXCEPTION(eslESYS, "pack size failed"); n += sz; *ret_n = n; return eslOK; ERROR: *ret_n = 0; return status; } /* Function: p7_oprofile_MPIPack() * Synopsis: Packs an OPROFILE into MPI buffer. * Incept: MSF, Wed Oct 21, 2009 [Janelia] * * Purpose: Packs OPROFILE into an MPI packed message buffer * of length bytes, starting at byte position <*position>, * for MPI communicator . * * The caller must know that 's allocation of * bytes is large enough to append the packed OPROFILE at * position <*pos>. This typically requires a call to * first, and reallocation if * needed. * * Returns: on success; now contains the * packed , and <*position> is set to the byte * immediately following the last byte of the OPROFILE * in . * * Throws: if an MPI call fails; or if the * buffer's length was overflowed in trying to pack * into . In either case, the state of * and <*position> is undefined, and both should * be considered to be corrupted. */ int p7_oprofile_MPIPack(P7_OPROFILE *om, char *buf, int n, int *pos, MPI_Comm comm) { int K = om->abc->Kp; int atype = om->abc->type; int len; int x; int Q4 = p7O_NQF(om->M); int Q8 = p7O_NQW(om->M); int Q16 = p7O_NQB(om->M); int vsz = sizeof(__m128i); /* model configuration */ if (MPI_Pack(&om->M, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&atype, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->L, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->mode, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->nj, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); /* MSV Filter information */ if (MPI_Pack(&om->tbm_b, 1, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->tec_b, 1, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->tjb_b, 1, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->scale_b, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->base_b, 1, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->bias_b, 1, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); for (x = 0; x < K; x++) if (MPI_Pack( om->rbv[x], vsz*Q16, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); /* Viterbi Filter information */ if (MPI_Pack(&om->scale_w, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->base_w, 1, MPI_SHORT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->ddbound_w, 1, MPI_SHORT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->ncj_roundoff, 1, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( om->twv, 8*vsz*Q8, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); for (x = 0; x < p7O_NXSTATES; x++) if (MPI_Pack( om->xw[x], p7O_NXTRANS, MPI_SHORT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); for (x = 0; x < K; x++) if (MPI_Pack( om->rwv[x], vsz*Q8, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); /* Forward/Backward information */ if (MPI_Pack( om->tfv, 8*vsz*Q4, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); for (x = 0; x < p7O_NXSTATES; x++) if (MPI_Pack( om->xf[x], p7O_NXTRANS, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); for (x = 0; x < K; x++) if (MPI_Pack( om->rfv[x], vsz*Q4, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); /* Forward/Backward information */ if (MPI_Pack( om->offs, p7_NOFFSETS, MPI_LONG_LONG_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->roff, 1, MPI_LONG_LONG_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack(&om->eoff, 1, MPI_LONG_LONG_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); /* Annotation information */ len = (om->name != NULL) ? strlen(om->name)+1 : 0; if (MPI_Pack(&len, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (len > 0) if (MPI_Pack( om->name, len, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); len = (om->acc != NULL) ? strlen(om->acc)+1 : 0; if (MPI_Pack(&len, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (len > 0) if (MPI_Pack( om->acc, len, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); len = (om->desc != NULL) ? strlen(om->desc)+1 : 0; if (MPI_Pack(&len, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (len > 0) if (MPI_Pack( om->desc, len, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); len = (om->rf != NULL) ? strlen(om->rf)+1 : 0; if (MPI_Pack(&len, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (len > 0) if (MPI_Pack( om->rf, len, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); len = (om->mm != NULL) ? strlen(om->mm)+1 : 0; if (MPI_Pack(&len, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (len > 0) if (MPI_Pack( om->mm, len, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); len = (om->cs != NULL) ? strlen(om->cs)+1 : 0; if (MPI_Pack(&len, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (len > 0) if (MPI_Pack( om->cs, len, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); len = (om->consensus != NULL) ? strlen(om->consensus)+1 : 0; if (MPI_Pack(&len, 1, MPI_INT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (len > 0) if (MPI_Pack( om->consensus, len, MPI_CHAR, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( om->evparam, p7_NEVPARAM, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( om->cutoff, p7_NCUTOFFS, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (MPI_Pack( om->compo, p7_MAXABET, MPI_FLOAT, buf, n, pos, comm) != 0) ESL_EXCEPTION(eslESYS, "pack failed"); if (*pos > n) ESL_EXCEPTION(eslEMEM, "buffer overflow"); return eslOK; } /* Function: p7_oprofile_MPIUnpack() * Synopsis: Unpacks an OPROFILE from an MPI buffer. * Incept: MSF, Wed Oct 21, 2009 [Janelia] * * Purpose: Unpack a newly allocated OPROFILE from MPI packed buffer * , starting from position <*pos>, where the total length * of the buffer in bytes is . * * Caller may or may not already know what alphabet the OPROFILE * is expected to be in. A reference to the current * alphabet is passed in . If the alphabet is unknown, * pass <*abc = NULL>, and when the OPROFILE is received, an * appropriate new alphabet object is allocated and passed * back to the caller via <*abc>. If the alphabet is * already known, <*abc> is that alphabet, and the new * OPROFILE's alphabet type is verified to agree with it. This * mechanism allows an application to let the first OPROFILE * determine the alphabet type for the application, while * still keeping the alphabet under the application's scope * of control. * * Returns: on success. <*pos> is updated to the position of * the next element in to unpack (if any). <*ret_om> * contains a newly allocated OPROFILE, which the caller is * responsible for free'ing. If <*abc> was passed as * , it now points to an object that * was allocated here; caller is responsible for free'ing * this. * * Returns if the OPROFILE is in a different * alphabet than <*abc> said to expect. In this case, * <*abc> is unchanged, <*buf> and <*nalloc> may have been * changed, and <*ret_om> is . * * Throws: on an MPI call failure. on allocation failure. * In either case, <*ret_om> is , and the state of * and <*pos> is undefined and should be considered to be corrupted. */ int p7_oprofile_MPIUnpack(char *buf, int n, int *pos, MPI_Comm comm, ESL_ALPHABET **abc, P7_OPROFILE **ret_om) { int status; int M, K, atype; int len; int x; int Q4, Q8, Q16; int vsz = sizeof(__m128i); P7_OPROFILE *om = NULL; if (MPI_Unpack(buf, n, pos, &M, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &atype, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); /* Set or verify the alphabet */ if (*abc == NULL) { /* still unknown: set it, pass control of it back to caller */ if ((*abc = esl_alphabet_Create(atype)) == NULL) { status = eslEMEM; goto ERROR; } } else { /* already known: check it */ if ((*abc)->type != atype) { status = eslEINCOMPAT; goto ERROR; } } Q4 = p7O_NQF(M); Q8 = p7O_NQW(M); Q16 = p7O_NQB(M); if ((om = p7_oprofile_Create(M, *abc)) == NULL) { status = eslEMEM; goto ERROR; } om->M = M; K = (*abc)->Kp; /* model configuration */ if (MPI_Unpack(buf, n, pos, &om->L, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->mode, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->nj, 1, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); /* MSV Filter information */ if (MPI_Unpack(buf, n, pos, &om->tbm_b, 1, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->tec_b, 1, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->tjb_b, 1, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->scale_b, 1, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->base_b, 1, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->bias_b, 1, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); for (x = 0; x < K; x++) if (MPI_Unpack(buf, n, pos, om->rbv[x], vsz*Q16, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); /* Viterbi Filter information */ if (MPI_Unpack(buf, n, pos, &om->scale_w, 1, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->base_w, 1, MPI_SHORT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->ddbound_w, 1, MPI_SHORT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->ncj_roundoff, 1, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, om->twv, 8*vsz*Q8, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); for (x = 0; x < p7O_NXSTATES; x++) if (MPI_Unpack(buf, n, pos, om->xw[x], p7O_NXTRANS, MPI_SHORT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); for (x = 0; x < K; x++) if (MPI_Unpack(buf, n, pos, om->rwv[x], vsz*Q8, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); /* Forward/Backward information */ if (MPI_Unpack(buf, n, pos, om->tfv, 8*vsz*Q4, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); for (x = 0; x < p7O_NXSTATES; x++) if (MPI_Unpack(buf, n, pos, om->xf[x], p7O_NXTRANS, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); for (x = 0; x < K; x++) if (MPI_Unpack(buf, n, pos, om->rfv[x], vsz*Q4, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); /* Forward/Backward information */ if (MPI_Unpack(buf, n, pos, om->offs, p7_NOFFSETS, MPI_LONG_LONG_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->roff, 1, MPI_LONG_LONG_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, &om->eoff, 1, MPI_LONG_LONG_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); /* Annotation information */ if (MPI_Unpack(buf, n, pos, &len, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (len > 0) { ESL_ALLOC(om->name, len); if (MPI_Unpack(buf, n, pos, om->name, len, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); om->name[len-1] = '\0'; } if (MPI_Unpack(buf, n, pos, &len, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (len > 0) { ESL_ALLOC(om->acc, len); if (MPI_Unpack(buf, n, pos, om->acc, len, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); om->acc[len-1] = '\0'; } if (MPI_Unpack(buf, n, pos, &len, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (len > 0) { ESL_ALLOC(om->desc, len); if (MPI_Unpack(buf, n, pos, om->desc, len, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); om->desc[len-1] = '\0'; } if (MPI_Unpack(buf, n, pos, &len, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (len > 0) { ESL_ALLOC(om->rf, len); if (MPI_Unpack(buf, n, pos, om->rf, len, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); om->rf[len-1] = '\0'; } if (MPI_Unpack(buf, n, pos, &len, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (len > 0) { ESL_ALLOC(om->mm, len); if (MPI_Unpack(buf, n, pos, om->mm, len, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); om->mm[len-1] = '\0'; } if (MPI_Unpack(buf, n, pos, &len, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (len > 0) { ESL_ALLOC(om->cs, len); if (MPI_Unpack(buf, n, pos, om->cs, len, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); om->cs[len-1] = '\0'; } if (MPI_Unpack(buf, n, pos, &len, 1, MPI_INT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (len > 0) { ESL_ALLOC(om->consensus, len); if (MPI_Unpack(buf, n, pos, om->consensus, len, MPI_CHAR, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); om->consensus[len-1] = '\0'; } if (MPI_Unpack(buf, n, pos, om->evparam, p7_NEVPARAM, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, om->cutoff, p7_NCUTOFFS, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); if (MPI_Unpack(buf, n, pos, om->compo, p7_MAXABET, MPI_FLOAT, comm) != 0) ESL_EXCEPTION(eslESYS, "mpi unpack failed"); *ret_om = om; return eslOK; ERROR: if (om != NULL) p7_oprofile_Destroy(om); return status; } /* Function: p7_oprofile_MPIRecv() * Synopsis: Receives an OPROFILE as a work unit from an MPI sender. * Incept: MSF, Wed Oct 21, 2009 [Janelia] * * Purpose: Receive a work unit that consists of a single OPROFILE * sent by MPI (<0..nproc-1>, or * ) tagged as for MPI communicator . * * Work units are prefixed by a status code. If the unit's * code is and no errors are encountered, this * routine will return and a non- <*ret_om>. * If the unit's code is (a shutdown signal), * this routine returns and <*ret_om> is . * * Caller provides a working buffer <*buf> of size * <*nalloc> characters. These are passed by reference, so * that <*buf> can be reallocated and <*nalloc> increased * if necessary. As a special case, if <*buf> is and * <*nalloc> is 0, the buffer will be allocated * appropriately, but the caller is still responsible for * free'ing it. * * Caller may or may not already know what alphabet the OPROFILE * is expected to be in. A reference to the current * alphabet is passed in . If the alphabet is unknown, * pass <*abc = NULL>, and when the OPROFILE is received, an * appropriate new alphabet object is allocated and passed * back to the caller via <*abc>. If the alphabet is * already known, <*ret_abc> is that alphabet, and the new * OPROFILE's alphabet type is verified to agree with it. This * mechanism allows an application to let the first OPROFILE * determine the alphabet type for the application, while * still keeping the alphabet under the application's scope * of control. * * Returns: on success. <*ret_om> contains the received OPROFILE; * it is allocated here, and the caller is responsible for * free'ing it. <*buf> may have been reallocated to a * larger size, and <*nalloc> may have been increased. If * <*abc> was passed as , it now points to an * object that was allocated here; caller is * responsible for free'ing this. * * Returns if an end-of-data signal was received. * In this case, <*buf>, <*nalloc>, and <*abc> are left unchanged, * and <*ret_om> is . * * Returns if the OPROFILE is in a different alphabet * than <*abc> said to expect. In this case, <*abc> is unchanged, * <*buf> and <*nalloc> may have been changed, and <*ret_om> is * . * * Throws: on allocation error, in which case <*ret_om> is * . */ int p7_oprofile_MPIRecv(int source, int tag, MPI_Comm comm, char **buf, int *nalloc, ESL_ALPHABET **abc, P7_OPROFILE **ret_om) { int status; int code; P7_OPROFILE *om = NULL; int n; int pos; MPI_Status mpistatus; /* Probe first, because we need to know if our buffer is big enough. */ MPI_Probe(source, tag, comm, &mpistatus); MPI_Get_count(&mpistatus, MPI_PACKED, &n); /* Make sure the buffer is allocated appropriately */ if (*buf == NULL || n > *nalloc) { void *tmp; ESL_RALLOC(*buf, tmp, sizeof(char) * n); *nalloc = n; } /* Receive the packed work unit */ MPI_Recv(*buf, n, MPI_PACKED, source, tag, comm, &mpistatus); /* Unpack it, looking at the status code prefix for EOD/EOK */ pos = 0; if (MPI_Unpack(*buf, n, &pos, &code, 1, MPI_INT, comm) != 0) ESL_XEXCEPTION(eslESYS, "mpi unpack failed"); if (code == eslEOD) { *ret_om = NULL; return eslEOD; } return p7_oprofile_MPIUnpack(*buf, *nalloc, &pos, comm, abc, ret_om); ERROR: if (om != NULL) p7_oprofile_Destroy(om); return status; } /*----------------- end, P7_OPROFILE communication -------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ #ifdef p7MPI_BENCHMARK /* mpicc -g -Wall -L. -I. -L ../easel -I ../easel -D p7MPI_BENCHMARK -o benchmark-mpi mpi.c -lhmmer -leasel -lm qsub -N benchmark-mpi -j y -R y -b y -cwd -V -pe lam-mpi-tight 2 'mpirun C ./benchmark-mpi ~/notebook/1227-msp-statistics/Pfam.hmm > bench.out' qsub -N benchmark-mpi -j y -R y -b y -cwd -V -pe lam-mpi-tight 2 'mpirun C ./benchmark-mpi -b ~/notebook/1227-msp-statistics/Pfam.hmm > bench.out' */ #include "p7_config.h" #include #include #include "easel.h" #include "esl_getopts.h" #include "esl_alphabet.h" #include "esl_random.h" #include "esl_stopwatch.h" #include "hmmer.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-b", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "baseline timing: don't send any HMMs", 0 }, { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "arrest after start: for debugging MPI under gdb", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for MPI communication"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_BG *bg = p7_bg_Create(abc); int my_rank; int nproc; char *buf = NULL; int nbuf = 0; int subtotalM = 0; int allM = 0; int stalling = esl_opt_GetBoolean(go, "--stall"); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &nproc); while (stalling); /* Master MPI process: */ if (my_rank == 0) { ESL_STOPWATCH *w = esl_stopwatch_Create(); P7_HMMFILE *hfp = NULL; P7_OPROFILE *om = NULL; P7_HMM *hmm = NULL; /* Read HMMs from a file. */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); esl_stopwatch_Start(w); while (p7_oprofile_ReadMSV(hfp, &abc, &om) == eslOK && p7_oprofile_ReadRest(hfp, om) == eslOK) { if (!esl_opt_GetBoolean(go, "-b")) p7_oprofile_MPISend(om, 1, 0, MPI_COMM_WORLD, &buf, &nbuf); /* 1 = dest; 0 = tag */ p7_hmm_Destroy(hmm); p7_oprofile_Destroy(om); } p7_oprofile_MPISend(NULL, 1, 0, MPI_COMM_WORLD, &buf, &nbuf); /* send the "no more HMMs" sign */ MPI_Reduce(&subtotalM, &allM, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); printf("total: %d\n", allM); esl_stopwatch_Stop(w); esl_stopwatch_Display(stdout, w, "CPU Time: "); esl_stopwatch_Destroy(w); } /* Worker MPI process: */ else { P7_OPROFILE *om_recd = NULL; while (p7_oprofile_MPIRecv(0, 0, MPI_COMM_WORLD, &buf, &nbuf, &abc, &om_recd) == eslOK) { subtotalM += om_recd->M; p7_oprofile_Destroy(om_recd); } MPI_Reduce(&subtotalM, &allM, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); } free(buf); p7_bg_Destroy(bg); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); MPI_Finalize(); exit(0); } #endif /*p7MPI_BENCHMARK*/ /*---------------------- end, benchmark -------------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7MPI_TESTDRIVE static void utest_oprofileSendRecv(int my_rank, int nproc) { ESL_RANDOMNESS *r = esl_randomness_CreateFast(42); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OPROFILE *om2 = NULL; int M = 200; int L = 400; char *wbuf = NULL; int wn = 0; int i; char errbuf[eslERRBUFSIZE]; p7_hmm_Sample(r, M, abc, &hmm); /* master and worker's sampled profiles are identical */ bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); om = p7_oprofile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); p7_oprofile_Convert(gm, om); p7_bg_SetLength (bg, L); if (my_rank == 0) { for (i = 1; i < nproc; i++) { ESL_DPRINTF1(("Master: receiving test profile\n")); p7_oprofile_MPIRecv(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &wbuf, &wn, &abc, &om2); ESL_DPRINTF1(("Master: test profile received\n")); if (p7_oprofile_Compare(om, om2, 0.001, errbuf) != eslOK) p7_Die("Received profile not identical to what was sent\n%s", errbuf); p7_oprofile_Destroy(om2); } } else { ESL_DPRINTF1(("Worker %d: sending test profile\n", my_rank)); p7_oprofile_MPISend(om, 0, 0, MPI_COMM_WORLD, &wbuf, &wn); ESL_DPRINTF1(("Worker %d: test profile sent\n", my_rank)); } free(wbuf); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); return; } #endif /*p7MPI_TESTDRIVE*/ /*---------------------- end, unit tests ------------------------*/ /***************************************************************** * 4. Test driver. *****************************************************************/ #ifdef p7MPI_TESTDRIVE /* mpicc -o mpi_utest -g -Wall -I../easel -L../easel -I. -L. -Dp7MPI_TESTDRIVE mpi.c -lhmmer -leasel -lm * In an MPI environment: (qlogin -pe lam-mpi-tight 2; setenv JOB_ID ; setenv TMPDIR /tmp/.... * mpirun C ./mpi_utest */ #include "esl_getopts.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "--stall", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "arrest after start: for debugging MPI under gdb", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for mpi.c"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); int my_rank; int nproc; /* For debugging: stall until GDB can be attached */ if (esl_opt_GetBoolean(go, "--stall")) pause(); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &nproc); utest_oprofileSendRecv(my_rank, nproc); MPI_Finalize(); return 0; } #endif /*p7MPI_TESTDRIVE*/ /*---------------------- end, test driver -----------------------*/ #else /*!HAVE_MPI*/ /* If we don't have MPI compiled in, provide some nothingness to: * a. prevent Mac OS/X ranlib from bitching about .o file that "has no symbols" * b. prevent compiler from bitching about "empty compilation unit" * c. automatically pass the automated tests. */ void p7_mpi_DoAbsolutelyNothing(void) { return; } #if defined p7MPI_TESTDRIVE || p7MPI_BENCHMARK || p7MPI_EXAMPLE int main(void) { return 0; } #endif #endif /*HAVE_MPI*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_sse/00MANIFEST0000664361611702660230000000274712473612613016175 0ustar wheelerteddy ================================================================ = Overall structure (P7_OPROFILE, P7_OMX) ================================================================ impl_sse.h : declarations, including P7_OPROFILE, P7_OMX, macros, functions p7_oprofile.c : vectorized profile structure p7_omx.c : vectorized DP matrix io.c : i/o of vectorized profiles ================================================================ = Dynamic programming routines for scoring target sequences ================================================================ msvfilter.c : p7_MSVFilter() - main acceleration routine vitfilter.c : p7_ViterbiFilter() - secondary acceleration routine fwdback.c : p7_Forward() - Forward algorithm p7_Backward() - Backward algorithm p7_ForwardParser() - streamlined Forward used for first pass domain definition p7_BackwardParser() - streamlined Backward used for first pass domain definition ================================================================ = Postprocessing domains, alignments, and null2 model ================================================================ decoding.c : posterior decoding of Forward/Backward matrices stotrace.c : stochastic traceback, sampling paths from Forward matrices optacc.c : "optimal accuracy" alignment algorithm, using posterior decoding null2.c : null2 model for biased composition corrections hmmer-3.1b2/src/impl_sse/msvfilter.c0000664361611702660230000010564512473612613017064 0ustar wheelerteddy/* The MSV filter implementation; SSE version. * * A "filter" is a one-row, O(M), DP implementation that calculates an * approximated nat score (i.e. in limited precision - here, uchar) * and may have limited numeric range. It will return if * its numeric range is exceeded, in which case the caller will have * to obtain the score by another (probably slower) method. * * Contents: * 1. p7_MSVFilter() implementation * 2. Benchmark driver * 3. Unit tests * 4. Test driver * 5. Example * 6. Copyright and license information * * SRE, Sun Nov 25 11:26:48 2007 [Casa de Gatos] * SVN $Id: msvfilter.c 4699 2014-07-03 14:54:25Z wheelert $ */ #include "p7_config.h" #include #include #include /* SSE */ #include /* SSE2 */ #include "easel.h" #include "esl_sse.h" #include "esl_gumbel.h" #include "hmmer.h" #include "impl_sse.h" /***************************************************************** * 1. The p7_MSVFilter() DP implementation. *****************************************************************/ /* Function: p7_MSVFilter() * Synopsis: Calculates MSV score, vewy vewy fast, in limited precision. * Incept: SRE, Wed Dec 26 15:12:25 2007 [Janelia] * * Purpose: Calculates an approximation of the MSV score for sequence * of length residues, using optimized profile , * and a preallocated one-row DP matrix . Return the * estimated MSV score (in nats) in . * * Score may overflow (and will, on high-scoring * sequences), but will not underflow. * * The model may be in any mode, because only its match * emission scores will be used. The MSV filter inherently * assumes a multihit local mode, and uses its own special * state transition scores, not the scores in the profile. * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * ret_sc - RETURN: MSV score (in nats) * * Note: We misuse the matrix here, using only a third of the * first dp row, accessing it as rather than * in triplets via <{MDI}MX(q)> macros, since we only need * to store M state values. We know that if was big * enough for normal DP calculations, it must be big enough * to hold the MSVFilter calculation. * * Returns: on success. * if the score overflows the limited range; in * this case, this is a high-scoring hit. * * Throws: if allocation is too small. */ int p7_MSVFilter(const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7_OMX *ox, float *ret_sc) { register __m128i mpv; /* previous row values */ register __m128i xEv; /* E state: keeps max for Mk->E as we go */ register __m128i xBv; /* B state: splatted vector of B[i-1] for B->Mk calculations */ register __m128i sv; /* temp storage of 1 curr row value in progress */ register __m128i biasv; /* emission bias in a vector */ uint8_t xJ; /* special states' scores */ int i; /* counter over sequence positions 1..L */ int q; /* counter over vectors 0..nq-1 */ int Q = p7O_NQB(om->M); /* segment length: # of vectors */ __m128i *dp = ox->dpb[0]; /* we're going to use dp[0][0..q..Q-1], not {MDI}MX(q) macros*/ __m128i *rsc; /* will point at om->rbv[x] for residue x[i] */ __m128i xJv; /* vector for states score */ __m128i tjbmv; /* vector for cost of moving from either J or N through B to an M state */ __m128i tecv; /* vector for E->C cost */ __m128i basev; /* offset for scores */ __m128i ceilingv; /* saturateed simd value used to test for overflow */ __m128i tempv; /* work vector */ int cmp; int status = eslOK; /* Check that the DP matrix is ok for us. */ if (Q > ox->allocQ16) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small"); ox->M = om->M; /* Try highly optimized ssv filter first */ status = p7_SSVFilter(dsq, L, om, ret_sc); if (status != eslENORESULT) return status; /* Initialization. In offset unsigned arithmetic, -infinity is 0, and 0 is om->base. */ biasv = _mm_set1_epi8((int8_t) om->bias_b); /* yes, you can set1() an unsigned char vector this way */ for (q = 0; q < Q; q++) dp[q] = _mm_setzero_si128(); xJ = 0; /* saturate simd register for overflow test */ ceilingv = _mm_cmpeq_epi8(biasv, biasv); basev = _mm_set1_epi8((int8_t) om->base_b); tjbmv = _mm_set1_epi8((int8_t) om->tjb_b + (int8_t) om->tbm_b); tecv = _mm_set1_epi8((int8_t) om->tec_b); xJv = _mm_subs_epu8(biasv, biasv); xBv = _mm_subs_epu8(basev, tjbmv); #if p7_DEBUGGING if (ox->debugging) { uint8_t xB; xB = _mm_extract_epi16(xBv, 0); xJ = _mm_extract_epi16(xJv, 0); p7_omx_DumpMFRow(ox, 0, 0, 0, xJ, xB, xJ); } #endif for (i = 1; i <= L; i++) { rsc = om->rbv[dsq[i]]; xEv = _mm_setzero_si128(); /* Right shifts by 1 byte. 4,8,12,x becomes x,4,8,12. * Because ia32 is littlendian, this means a left bit shift. * Zeros shift on automatically, which is our -infinity. */ mpv = _mm_slli_si128(dp[Q-1], 1); for (q = 0; q < Q; q++) { /* Calculate new MMXo(i,q); don't store it yet, hold it in sv. */ sv = _mm_max_epu8(mpv, xBv); sv = _mm_adds_epu8(sv, biasv); sv = _mm_subs_epu8(sv, *rsc); rsc++; xEv = _mm_max_epu8(xEv, sv); mpv = dp[q]; /* Load {MDI}(i-1,q) into mpv */ dp[q] = sv; /* Do delayed store of M(i,q) now that memory is usable */ } /* test for the overflow condition */ tempv = _mm_adds_epu8(xEv, biasv); tempv = _mm_cmpeq_epi8(tempv, ceilingv); cmp = _mm_movemask_epi8(tempv); /* Now the "special" states, which start from Mk->E (->C, ->J->B) * Use shuffles instead of shifts so when the last max has completed, * the last four elements of the simd register will contain the * max value. Then the last shuffle will broadcast the max value * to all simd elements. */ tempv = _mm_shuffle_epi32(xEv, _MM_SHUFFLE(2, 3, 0, 1)); xEv = _mm_max_epu8(xEv, tempv); tempv = _mm_shuffle_epi32(xEv, _MM_SHUFFLE(0, 1, 2, 3)); xEv = _mm_max_epu8(xEv, tempv); tempv = _mm_shufflelo_epi16(xEv, _MM_SHUFFLE(2, 3, 0, 1)); xEv = _mm_max_epu8(xEv, tempv); tempv = _mm_srli_si128(xEv, 1); xEv = _mm_max_epu8(xEv, tempv); xEv = _mm_shuffle_epi32(xEv, _MM_SHUFFLE(0, 0, 0, 0)); /* immediately detect overflow */ if (cmp != 0x0000) { *ret_sc = eslINFINITY; return eslERANGE; } xEv = _mm_subs_epu8(xEv, tecv); xJv = _mm_max_epu8(xJv,xEv); xBv = _mm_max_epu8(basev, xJv); xBv = _mm_subs_epu8(xBv, tjbmv); #if p7_DEBUGGING if (ox->debugging) { uint8_t xB, xE; xB = _mm_extract_epi16(xBv, 0); xE = _mm_extract_epi16(xEv, 0); xJ = _mm_extract_epi16(xJv, 0); p7_omx_DumpMFRow(ox, i, xE, 0, xJ, xB, xJ); } #endif } /* end loop over sequence residues 1..L */ xJ = (uint8_t) _mm_extract_epi16(xJv, 0); /* finally C->T, and add our missing precision on the NN,CC,JJ back */ *ret_sc = ((float) (xJ - om->tjb_b) - (float) om->base_b); *ret_sc /= om->scale_b; *ret_sc -= 3.0; /* that's ~ L \log \frac{L}{L+3}, for our NN,CC,JJ */ return eslOK; } /*------------------ end, p7_MSVFilter() ------------------------*/ /* Function: p7_SSVFilter_longtarget() * Synopsis: Finds windows with SSV scores above some threshold (vewy vewy fast, in limited precision) * * Purpose: Calculates an approximation of the SSV (single ungapped diagonal) * score for regions of sequence of length residues, using * optimized profile , and a preallocated one-row DP matrix , * and captures the positions at which such regions exceed the score * required to be significant in the eyes of the calling function, * which depends on the and

(usually p=0.02 for nhmmer). * Note that this variant performs only SSV computations, never * passing through the J state - the score required to pass SSV at * the default threshold (or less restrictive) is sufficient to * pass MSV in essentially all DNA models we've tested. * * Above-threshold diagonals are captured into a preallocated list * . Rather than simply capturing positions at which a * score threshold is reached, this function establishes windows * around those high-scoring positions, using scores in . * These windows can be merged by the calling function. * * * Args: dsq - digital target sequence, 1..L * L - length of dsq in residues * om - optimized profile * ox - DP matrix * msvdata - compact representation of substitution scores, for backtracking diagonals * bg - the background model, required for translating a P-value threshold into a score threshold * P - p-value below which a region is captured as being above threshold * windowlist - preallocated container for all hits (resized if necessary) * * * Note: We misuse the matrix here, using only a third of the * first dp row, accessing it as rather than * in triplets via <{MDI}MX(q)> macros, since we only need * to store M state values. We know that if was big * enough for normal DP calculations, it must be big enough * to hold the MSVFilter calculation. * * Returns: on success. * * Throws: if allocation is too small. */ int p7_SSVFilter_longtarget(const ESL_DSQ *dsq, int L, P7_OPROFILE *om, P7_OMX *ox, const P7_SCOREDATA *ssvdata, P7_BG *bg, double P, P7_HMM_WINDOWLIST *windowlist) { register __m128i mpv; /* previous row values */ register __m128i xEv; /* E state: keeps max for Mk->E for a single iteration */ register __m128i xBv; /* B state: splatted vector of B[i-1] for B->Mk calculations */ register __m128i sv; /* temp storage of 1 curr row value in progress */ register __m128i biasv; /* emission bias in a vector */ uint8_t xJ; /* special states' scores */ int i; /* counter over sequence positions 1..L */ int q; /* counter over vectors 0..nq-1 */ int Q = p7O_NQB(om->M); /* segment length: # of vectors */ __m128i *dp = ox->dpb[0]; /* we're going to use dp[0][0..q..Q-1], not {MDI}MX(q) macros*/ __m128i *rsc; /* will point at om->rbv[x] for residue x[i] */ __m128i tecv; /* vector for E->C cost */ __m128i tjbmv; /* vector for J->B move cost + B->M move costs */ __m128i basev; /* offset for scores */ __m128i ceilingv; /* saturated simd value used to test for overflow */ __m128i tempv; /* work vector */ int cmp; int k; int n; int end; int rem_sc; int start; int target_end; int target_start; int max_end; int max_sc; int sc; int pos_since_max; float ret_sc; union { __m128i v; uint8_t b[16]; } u; /* * Computing the score required to let P meet the F1 prob threshold * In original code, converting from a scaled int MSV * score S (the score getting to state E) to a probability goes like this: * usc = S - om->tec_b - om->tjb_b - om->base_b; * usc /= om->scale_b; * usc -= 3.0; * P = f ( (usc - nullsc) / eslCONST_LOG2 , mu, lambda) * and we're computing the threshold usc, so reverse it: * (usc - nullsc) / eslCONST_LOG2 = inv_f( P, mu, lambda) * usc = nullsc + eslCONST_LOG2 * inv_f( P, mu, lambda) * usc += 3 * usc *= om->scale_b * S = usc + om->tec_b + om->tjb_b + om->base_b * * Here, I compute threshold with length model based on max_length. Doesn't * matter much - in any case, both the bg and om models will change with roughly * 1 bit for each doubling of the length model, so they offset. */ float nullsc; __m128i sc_threshv; uint8_t sc_thresh; float invP = esl_gumbel_invsurv(P, om->evparam[p7_MMU], om->evparam[p7_MLAMBDA]); /* Check that the DP matrix is ok for us. */ if (Q > ox->allocQ16) ESL_EXCEPTION(eslEINVAL, "DP matrix allocated too small"); ox->M = om->M; p7_bg_SetLength(bg, om->max_length); p7_oprofile_ReconfigMSVLength(om, om->max_length); p7_bg_NullOne (bg, dsq, om->max_length, &nullsc); sc_thresh = (int) ceil( ( ( nullsc + (invP * eslCONST_LOG2) + 3.0 ) * om->scale_b ) + om->base_b + om->tec_b + om->tjb_b ); sc_threshv = _mm_set1_epi8((int8_t) 255 - sc_thresh); /* Initialization. In offset unsigned arithmetic, -infinity is 0, and 0 is om->base. */ biasv = _mm_set1_epi8((int8_t) om->bias_b); /* yes, you can set1() an unsigned char vector this way */ ceilingv = _mm_cmpeq_epi8(biasv, biasv); for (q = 0; q < Q; q++) dp[q] = _mm_setzero_si128(); xJ = 0; basev = _mm_set1_epi8((int8_t) om->base_b); tecv = _mm_set1_epi8((int8_t) om->tec_b); tjbmv = _mm_set1_epi8((int8_t) om->tjb_b + (int8_t) om->tbm_b); xBv = _mm_subs_epu8(basev, tjbmv); for (i = 1; i <= L; i++) { rsc = om->rbv[dsq[i]]; xEv = _mm_setzero_si128(); /* Right shifts by 1 byte. 4,8,12,x becomes x,4,8,12. * Because ia32 is littlendian, this means a left bit shift. * Zeros shift on automatically, which is our -infinity. */ mpv = _mm_slli_si128(dp[Q-1], 1); for (q = 0; q < Q; q++) { /* Calculate new MMXo(i,q); don't store it yet, hold it in sv. */ sv = _mm_max_epu8(mpv, xBv); sv = _mm_adds_epu8(sv, biasv); sv = _mm_subs_epu8(sv, *rsc); rsc++; xEv = _mm_max_epu8(xEv, sv); mpv = dp[q]; /* Load {MDI}(i-1,q) into mpv */ dp[q] = sv; /* Do delayed store of M(i,q) now that memory is usable */ } /* test if the pthresh significance threshold has been reached; * note: don't use _mm_cmpgt_epi8, because it's a signed comparison, which won't work on uint8s */ tempv = _mm_adds_epu8(xEv, sc_threshv); tempv = _mm_cmpeq_epi8(tempv, ceilingv); cmp = _mm_movemask_epi8(tempv); if (cmp != 0) { //hit pthresh, so add position to list and reset values //figure out which model state hit threshold end = -1; rem_sc = -1; for (q = 0; q < Q; q++) { /// Unpack and unstripe, so we can find the state that exceeded pthresh u.v = dp[q]; for (k = 0; k < 16; k++) { // unstripe //(q+Q*k+1) is the model position k at which the xE score is found if (u.b[k] >= sc_thresh && u.b[k] > rem_sc && (q+Q*k+1) <= om->M) { end = (q+Q*k+1); rem_sc = u.b[k]; } } dp[q] = _mm_set1_epi8(0); // while we're here ... this will cause values to get reset to xB in next dp iteration } //recover the diagonal that hit threshold start = end; // model position target_end = target_start = i; // target position sc = rem_sc; while (rem_sc > om->base_b - om->tjb_b - om->tbm_b) { rem_sc -= om->bias_b - ssvdata->ssv_scores[start*om->abc->Kp + dsq[target_start]]; --start; --target_start; } start++; target_start++; //extend diagonal further with single diagonal extension k = end+1; n = target_end+1; max_end = target_end; max_sc = sc; pos_since_max = 0; while (kM && n<=L) { sc += om->bias_b - ssvdata->ssv_scores[k*om->abc->Kp + dsq[n]]; if (sc >= max_sc) { max_sc = sc; max_end = n; pos_since_max=0; } else { pos_since_max++; if (pos_since_max == 5) break; } k++; n++; } end += (max_end - target_end); //k += (max_end - target_end); target_end = max_end; ret_sc = ((float) (max_sc - om->tjb_b) - (float) om->base_b); ret_sc /= om->scale_b; ret_sc -= 3.0; // that's ~ L \log \frac{L}{L+3}, for our NN,CC,JJ p7_hmmwindow_new( windowlist, 0, // sequence_id; used in the FM-based filter, but not here target_start, // position in the target at which the diagonal starts 0, // position in the target fm_index at which diagonal starts; not used here, just in FM-based filter end, // position in the model at which the diagonal ends end-start+1 , // length of diagonal ret_sc, // score of diagonal p7_NOCOMPLEMENT, // always p7_NOCOMPLEMENT here; varies in FM-based filter L ); i = target_end; // skip forward } } /* end loop over sequence residues 1..L */ return eslOK; } /*------------------ end, p7_SSVFilter_longtarget() ------------------------*/ /***************************************************************** * 2. Benchmark driver. *****************************************************************/ /* The benchmark driver has some additional non-benchmarking options * to facilitate small-scale (by-eye) comparison of MSV scores against * other implementations, for debugging purposes. * * The -c option compares against p7_GMSV() scores. This allows * measuring the error inherent in the SSE implementation's reduced * precision (p7_MSVFilter() runs in uint8_t; p7_GMSV() uses floats). * * The -x option compares against an emulation that should give * exactly the same scores. The emulation is achieved by jiggering the * fp scores in a generic profile to disallow gaps, have the same * rounding and precision as the uint8_t's MSVFilter() is using, and * to make the same post-hoc corrections for the NN, CC, JJ * contributions to the final nat score; under these contrived * circumstances, p7_GViterbi() gives the same scores as * p7_MSVFilter(). * * For using either -c or -x, you probably also want to limit the * number of generated target sequences, using -N10 or -N100 for * example. */ #ifdef p7MSVFILTER_BENCHMARK /* gcc -o msvfilter-benchmark -std=gnu99 -g -Wall -msse2 -I.. -L.. -I../../easel -L../../easel -Dp7MSVFILTER_BENCHMARK msvfilter.c -lhmmer -leasel -lm icc -o msvfilter-benchmark -O3 -static -I.. -L.. -I../../easel -L../../easel -Dp7MSVFILTER_BENCHMARK msvfilter.c -lhmmer -leasel -lm ./benchmark-msvfilter runs benchmark ./benchmark-msvfilter -N100 -c compare scores to generic impl ./benchmark-msvfilter -N100 -x compare scores to exact emulation */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_random.h" #include "esl_randomseq.h" #include "esl_stopwatch.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-c", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-x", "compare scores to generic implementation (debug)", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-x", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "-c", "equate scores to trusted implementation (debug)", 0 }, { "-L", eslARG_INT, "400", NULL, "n>0", NULL, NULL, NULL, "length of random target seqs", 0 }, { "-N", eslARG_INT, "50000", NULL, "n>0", NULL, NULL, NULL, "number of random target seqs", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "benchmark driver for MSVFilter() implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); ESL_STOPWATCH *w = esl_stopwatch_Create(); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); int i; float sc1, sc2; double base_time, bench_time, Mcs; if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); bg = p7_bg_Create(abc); p7_bg_SetLength(bg, L); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); p7_oprofile_ReconfigLength(om, L); if (esl_opt_GetBoolean(go, "-x")) p7_profile_SameAsMF(om, gm); ox = p7_omx_Create(gm->M, 0, 0); gx = p7_gmx_Create(gm->M, L); /* Get a baseline time: how long it takes just to generate the sequences */ esl_stopwatch_Start(w); for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); esl_stopwatch_Stop(w); base_time = w->user; esl_stopwatch_Start(w); for (i = 0; i < N; i++) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_MSVFilter (dsq, L, om, ox, &sc1); /* -c option: compare generic to fast score */ if (esl_opt_GetBoolean(go, "-c")) { p7_GMSV (dsq, L, gm, gx, 2.0, &sc2); printf("%.4f %.4f\n", sc1, sc2); } /* -x option: compare generic to fast score in a way that should give exactly the same result */ if (esl_opt_GetBoolean(go, "-x")) { p7_GViterbi(dsq, L, gm, gx, &sc2); sc2 /= om->scale_b; if (om->mode == p7_UNILOCAL) sc2 -= 2.0; /* that's ~ L \log \frac{L}{L+2}, for our NN,CC,JJ */ else if (om->mode == p7_LOCAL) sc2 -= 3.0; /* that's ~ L \log \frac{L}{L+3}, for our NN,CC,JJ */ printf("%.4f %.4f\n", sc1, sc2); } } esl_stopwatch_Stop(w); bench_time = w->user - base_time; Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time; esl_stopwatch_Display(stdout, w, "# CPU time: "); printf("# M = %d\n", gm->M); printf("# %.1f Mc/s\n", Mcs); free(dsq); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_stopwatch_Destroy(w); esl_randomness_Destroy(r); esl_getopts_Destroy(go); return 0; } #endif /*p7MSVFILTER_BENCHMARK*/ /*------------------ end, benchmark driver ----------------------*/ /***************************************************************** * 3. Unit tests *****************************************************************/ #ifdef p7MSVFILTER_TESTDRIVE #include "esl_random.h" #include "esl_randomseq.h" /* * We can check that scores are identical (within machine error) to * scores of generic DP with scores rounded the same way. Do this for * a random model of length , for test sequences of length . * * We assume that we don't accidentally generate a high-scoring random * sequence that overflows MSVFilter()'s limited range. * */ static void utest_msv_filter(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N) { P7_HMM *hmm = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2)); P7_OMX *ox = p7_omx_Create(M, 0, 0); P7_GMX *gx = p7_gmx_Create(M, L); float sc1, sc2; p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om); p7_profile_SameAsMF(om, gm); #if 0 p7_oprofile_Dump(stdout, om); /* dumps the optimized profile */ p7_omx_SetDumpMode(stdout, ox, TRUE); /* makes the fast DP algorithms dump their matrices */ #endif while (N--) { esl_rsq_xfIID(r, bg->f, abc->K, L, dsq); p7_MSVFilter(dsq, L, om, ox, &sc1); p7_GViterbi (dsq, L, gm, gx, &sc2); #if 0 p7_gmx_Dump(stdout, gx, p7_DEFAULT); /* dumps a generic DP matrix */ #endif sc2 = sc2 / om->scale_b - 3.0f; if (fabs(sc1-sc2) > 0.001) esl_fatal("msv filter unit test failed: scores differ (%.2f, %.2f)", sc1, sc2); } free(dsq); p7_hmm_Destroy(hmm); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_profile_Destroy(gm); p7_oprofile_Destroy(om); } #endif /*p7MSVFILTER_TESTDRIVE*/ /*-------------------- end, unit tests --------------------------*/ /***************************************************************** * 4. Test driver *****************************************************************/ #ifdef p7MSVFILTER_TESTDRIVE /* gcc -g -Wall -msse2 -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o msvfilter_utest -Dp7MSVFILTER_TESTDRIVE msvfilter.c -lhmmer -leasel -lm ./msvfilter_utest */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-s", eslARG_INT, "42", NULL, NULL, NULL, NULL, NULL, "set random number seed to ", 0 }, { "-v", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "be verbose", 0 }, { "-L", eslARG_INT, "200", NULL, NULL, NULL, NULL, NULL, "size of random sequences to sample", 0 }, { "-M", eslARG_INT, "145", NULL, NULL, NULL, NULL, NULL, "size of random models to sample", 0 }, { "-N", eslARG_INT, "100", NULL, NULL, NULL, NULL, NULL, "number of random sequences to sample", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options]"; static char banner[] = "test driver for the SSE MSVFilter() implementation"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 0, argc, argv, banner, usage); ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s")); ESL_ALPHABET *abc = NULL; P7_BG *bg = NULL; int M = esl_opt_GetInteger(go, "-M"); int L = esl_opt_GetInteger(go, "-L"); int N = esl_opt_GetInteger(go, "-N"); /* First round of tests for DNA alphabets. */ if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (esl_opt_GetBoolean(go, "-v")) printf("MSVFilter() tests, DNA\n"); utest_msv_filter(r, abc, bg, M, L, N); /* normal sized models */ utest_msv_filter(r, abc, bg, 1, L, 10); /* size 1 models */ utest_msv_filter(r, abc, bg, M, 1, 10); /* size 1 sequences */ esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); if ((abc = esl_alphabet_Create(eslAMINO)) == NULL) esl_fatal("failed to create alphabet"); if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create null model"); if (esl_opt_GetBoolean(go, "-v")) printf("MSVFilter() tests, protein\n"); utest_msv_filter(r, abc, bg, M, L, N); utest_msv_filter(r, abc, bg, 1, L, 10); utest_msv_filter(r, abc, bg, M, 1, 10); esl_alphabet_Destroy(abc); p7_bg_Destroy(bg); esl_getopts_Destroy(go); esl_randomness_Destroy(r); return eslOK; } #endif /*VITFILTER_TESTDRIVE*/ /***************************************************************** * 5. Example *****************************************************************/ #ifdef p7MSVFILTER_EXAMPLE /* A minimal example. Also useful for debugging on small HMMs and sequences. gcc -g -Wall -msse2 -std=gnu99 -I.. -L.. -I../../easel -L../../easel -o msvfilter_example -Dp7MSVFILTER_EXAMPLE msvfilter.c -lhmmer -leasel -lm ./msvfilter_example */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_gumbel.h" #include "esl_sq.h" #include "esl_sqio.h" #include "hmmer.h" #include "impl_sse.h" static ESL_OPTIONS options[] = { /* name type default env range toggles reqs incomp help docgroup*/ { "-h", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "show brief help on version and usage", 0 }, { "-1", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in one line awkable format", 0 }, { "-P", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output in profmark format", 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; static char usage[] = "[-options] "; static char banner[] = "example of MSV filter algorithm"; int main(int argc, char **argv) { ESL_GETOPTS *go = p7_CreateDefaultApp(options, 2, argc, argv, banner, usage); char *hmmfile = esl_opt_GetArg(go, 1); char *seqfile = esl_opt_GetArg(go, 2); ESL_ALPHABET *abc = NULL; P7_HMMFILE *hfp = NULL; P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; P7_OMX *ox = NULL; P7_GMX *gx = NULL; ESL_SQ *sq = NULL; ESL_SQFILE *sqfp = NULL; int format = eslSQFILE_UNKNOWN; float msvraw, nullsc, msvscore; float graw, gscore; double P, gP; int status; /* Read in one HMM */ if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile); if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM"); /* Open sequence file for reading */ sq = esl_sq_CreateDigital(abc); status = esl_sqfile_Open(seqfile, format, NULL, &sqfp); if (status == eslENOTFOUND) p7_Fail("No such file."); else if (status == eslEFORMAT) p7_Fail("Format unrecognized."); else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz."); else if (status != eslOK) p7_Fail("Open failed, code %d.", status); /* create default null model, then create and optimize profile */ bg = p7_bg_Create(abc); p7_bg_SetLength(bg, sq->n); gm = p7_profile_Create(hmm->M, abc); p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL); om = p7_oprofile_Create(gm->M, abc); p7_oprofile_Convert(gm, om); /* allocate DP matrices, both a generic and an optimized one */ ox = p7_omx_Create(gm->M, 0, 0); /* one row version */ gx = p7_gmx_Create(gm->M, sq->n); /* Useful to place and compile in for debugging: p7_oprofile_Dump(stdout, om); dumps the optimized profile p7_omx_SetDumpMode(stdout, ox, TRUE); makes the fast DP algorithms dump their matrices p7_gmx_Dump(stdout, gx, p7_DEFAULT); dumps a generic DP matrix p7_oprofile_SameMSV(om, gm); */ //p7_oprofile_Dump(stdout, om); //p7_omx_SetDumpMode(stdout, ox, TRUE); while ((status = esl_sqio_Read(sqfp, sq)) == eslOK) { p7_oprofile_ReconfigLength(om, sq->n); p7_ReconfigLength(gm, sq->n); p7_bg_SetLength(bg, sq->n); p7_omx_GrowTo(ox, om->M, 0, sq->n); p7_gmx_GrowTo(gx, gm->M, sq->n); p7_MSVFilter (sq->dsq, sq->n, om, ox, &msvraw); p7_bg_NullOne (bg, sq->dsq, sq->n, &nullsc); msvscore = (msvraw - nullsc) / eslCONST_LOG2; P = esl_gumbel_surv(msvscore, om->evparam[p7_MMU], om->evparam[p7_MLAMBDA]); p7_GMSV(sq->dsq, sq->n, gm, gx, 2.0, &graw); gscore = (graw - nullsc) / eslCONST_LOG2; gP = esl_gumbel_surv(gscore, gm->evparam[p7_MMU], gm->evparam[p7_MLAMBDA]); if (esl_opt_GetBoolean(go, "-1")) { printf("%-30s %-20s %9.2g %7.2f %9.2g %7.2f\n", sq->name, hmm->name, P, msvscore, gP, gscore); } else if (esl_opt_GetBoolean(go, "-P")) { /* output suitable for direct use in profmark benchmark postprocessors: */ printf("%g %.2f %s %s\n", P, msvscore, sq->name, hmm->name); } else { printf("target sequence: %s\n", sq->name); printf("msv filter raw score: %.2f nats\n", msvraw); printf("null score: %.2f nats\n", nullsc); printf("per-seq score: %.2f bits\n", msvscore); printf("P-value: %g\n", P); printf("GMSV raw score: %.2f nats\n", graw); printf("GSMV per-seq score: %.2f bits\n", gscore); printf("GSMV P-value: %g\n", gP); } esl_sq_Reuse(sq); } /* cleanup */ esl_sq_Destroy(sq); esl_sqfile_Close(sqfp); p7_omx_Destroy(ox); p7_gmx_Destroy(gx); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); p7_hmmfile_Close(hfp); esl_alphabet_Destroy(abc); esl_getopts_Destroy(go); return 0; } #endif /*p7MSVFILTER_EXAMPLE*/ /*---------------------- end, example ---------------------------*/ /***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Version 3.1b2; February 2015 * Copyright (C) 2015 Howard Hughes Medical Institute. * Other copyrights also apply. See the COPYRIGHT file for a full list. * * HMMER is distributed under the terms of the GNU General Public License * (GPLv3). See the LICENSE file for details. *****************************************************************/ hmmer-3.1b2/src/impl_sse/optacc.c0000664361611702660230000011326312473612613016315 0ustar wheelerteddy/* Optimal accuracy alignment; SSE version. * * Contents: * 1. Optimal accuracy alignment, DP fill * 2. OA traceback * 3. Benchmark driver * 4. Unit tests * 5. Test driver * 6. Example * 7. Copyright and license information. * * SRE, Mon Aug 18 20:01:01 2008 [Casa de Gatos] * SVN $Id: optacc.c 3991 2012-04-17 21:08:00Z eddys $ */ #include "p7_config.h" #include #include #include #include "easel.h" #include "esl_sse.h" #include "esl_vectorops.h" #include "hmmer.h" /***************************************************************** * 1. Optimal accuracy alignment, DP fill *****************************************************************/ /* Function: p7_OptimalAccuracy() * Synopsis: DP fill of an optimal accuracy alignment calculation. * Incept: SRE, Mon Aug 18 11:04:48 2008 [Janelia] * * Purpose: Calculates the fill step of the optimal accuracy decoding * algorithm \citep{Kall05}. * * Caller provides the posterior decoding matrix , * which was calculated by Forward/Backward on a target sequence * of length L> using the query model . * * Caller also provides a DP matrix , allocated for a full * M> by comparison. The routine fills this in * with OA scores. * * Args: gm - query profile * pp - posterior decoding matrix created by * gx - RESULT: caller provided DP matrix for M> by * ret_e - RETURN: expected number of correctly decoded positions * * Returns: on success, and <*ret_e> contains the final OA * score, which is the expected number of correctly decoded * positions in the target sequence (up to ). * * Throws: (no abnormal error conditions) */ int p7_OptimalAccuracy(const P7_OPROFILE *om, const P7_OMX *pp, P7_OMX *ox, float *ret_e) { register __m128 mpv, dpv, ipv; /* previous row values */ register __m128 sv; /* temp storage of 1 curr row value in progress */ register __m128 xEv; /* E state: keeps max for Mk->E as we go */ register __m128 xBv; /* B state: splatted vector of B[i-1] for B->Mk calculations */ register __m128 dcv; float *xmx = ox->xmx; __m128 *dpc = ox->dpf[0]; /* current row, for use in {MDI}MO(dpp,q) access macro */ __m128 *dpp; /* previous row, for use in {MDI}MO(dpp,q) access macro */ __m128 *ppp; /* quads in the posterior probability matrix */ __m128 *tp; /* quads in the tfv> transition scores */ __m128 zerov = _mm_setzero_ps(); __m128 infv = _mm_set1_ps(-eslINFINITY); int M = om->M; int Q = p7O_NQF(M); int q; int j; int i; float t1, t2; ox->M = om->M; ox->L = pp->L; for (q = 0; q < Q; q++) MMO(dpc, q) = IMO(dpc,q) = DMO(dpc,q) = infv; XMXo(0, p7X_E) = -eslINFINITY; XMXo(0, p7X_N) = 0.; XMXo(0, p7X_J) = -eslINFINITY; XMXo(0, p7X_B) = 0.; XMXo(0, p7X_C) = -eslINFINITY; for (i = 1; i <= pp->L; i++) { dpp = dpc; /* previous DP row in OA matrix */ dpc = ox->dpf[i]; /* current DP row in OA matrix */ ppp = pp->dpf[i]; /* current row in the posterior probabilities per position */ tp = om->tfv; /* transition probabilities */ dcv = infv; xEv = infv; xBv = _mm_set1_ps(XMXo(i-1, p7X_B)); mpv = esl_sse_rightshift_ps(MMO(dpp,Q-1), infv); /* Right shifts by 4 bytes. 4,8,12,x becomes x,4,8,12. */ dpv = esl_sse_rightshift_ps(DMO(dpp,Q-1), infv); ipv = esl_sse_rightshift_ps(IMO(dpp,Q-1), infv); for (q = 0; q < Q; q++) { sv = _mm_and_ps(_mm_cmpgt_ps(*tp, zerov), xBv); tp++; sv = _mm_max_ps(sv, _mm_and_ps(_mm_cmpgt_ps(*tp, zerov), mpv)); tp++; sv = _mm_max_ps(sv, _mm_and_ps(_mm_cmpgt_ps(*tp, zerov), ipv)); tp++; sv = _mm_max_ps(sv, _mm_and_ps(_mm_cmpgt_ps(*tp, zerov), dpv)); tp++; sv = _mm_add_ps(sv, *ppp); ppp += 2; xEv = _mm_max_ps(xEv, sv); mpv = MMO(dpp,q); dpv = DMO(dpp,q); ipv = IMO(dpp,q); MMO(dpc,q) = sv; DMO(dpc,q) = dcv; dcv = _mm_and_ps(_mm_cmpgt_ps(*tp, zerov), sv); tp++; sv = _mm_and_ps(_mm_cmpgt_ps(*tp, zerov), mpv); tp++; sv = _mm_max_ps(sv, _mm_and_ps(_mm_cmpgt_ps(*tp, zerov), ipv)); tp++; IMO(dpc,q) = _mm_add_ps(sv, *ppp); ppp++; } /* dcv has carried through from end of q loop above; store it * in first pass, we add M->D and D->D path into DMX */ dcv = esl_sse_rightshift_ps(dcv, infv); tp = om->tfv + 7*Q; /* set tp to start of the DD's */ for (q = 0; q < Q; q++) { DMO(dpc, q) = _mm_max_ps(dcv, DMO(dpc, q)); dcv = _mm_and_ps(_mm_cmpgt_ps(*tp, zerov), DMO(dpc,q)); tp++; } /* fully serialized D->D; can optimize later */ for (j = 1; j < 4; j++) { dcv = esl_sse_rightshift_ps(dcv, infv); tp = om->tfv + 7*Q; for (q = 0; q < Q; q++) { DMO(dpc, q) = _mm_max_ps(dcv, DMO(dpc, q)); dcv = _mm_and_ps(_mm_cmpgt_ps(*tp, zerov), dcv); tp++; } } /* D->E paths */ for (q = 0; q < Q; q++) xEv = _mm_max_ps(xEv, DMO(dpc,q)); /* Specials */ esl_sse_hmax_ps(xEv, &(XMXo(i,p7X_E))); t1 = ( (om->xf[p7O_J][p7O_LOOP] == 0.0) ? 0.0 : ox->xmx[(i-1)*p7X_NXCELLS+p7X_J] + pp->xmx[i*p7X_NXCELLS+p7X_J]); t2 = ( (om->xf[p7O_E][p7O_LOOP] == 0.0) ? 0.0 : ox->xmx[ i *p7X_NXCELLS+p7X_E]); ox->xmx[i*p7X_NXCELLS+p7X_J] = ESL_MAX(t1, t2); t1 = ( (om->xf[p7O_C][p7O_LOOP] == 0.0) ? 0.0 : ox->xmx[(i-1)*p7X_NXCELLS+p7X_C] + pp->xmx[i*p7X_NXCELLS+p7X_C]); t2 = ( (om->xf[p7O_E][p7O_MOVE] == 0.0) ? 0.0 : ox->xmx[ i *p7X_NXCELLS+p7X_E]); ox->xmx[i*p7X_NXCELLS+p7X_C] = ESL_MAX(t1, t2); ox->xmx[i*p7X_NXCELLS+p7X_N] = ((om->xf[p7O_N][p7O_LOOP] == 0.0) ? 0.0 : ox->xmx[(i-1)*p7X_NXCELLS+p7X_N] + pp->xmx[i*p7X_NXCELLS+p7X_N]); t1 = ( (om->xf[p7O_N][p7O_MOVE] == 0.0) ? 0.0 : ox->xmx[i*p7X_NXCELLS+p7X_N]); t2 = ( (om->xf[p7O_J][p7O_MOVE] == 0.0) ? 0.0 : ox->xmx[i*p7X_NXCELLS+p7X_J]); ox->xmx[i*p7X_NXCELLS+p7X_B] = ESL_MAX(t1, t2); } *ret_e = ox->xmx[pp->L*p7X_NXCELLS+p7X_C]; return eslOK; } /*------------------- end, OA DP fill ---------------------------*/ /***************************************************************** * 2. OA traceback *****************************************************************/ static inline float get_postprob(const P7_OMX *pp, int scur, int sprv, int k, int i); static inline int select_m(const P7_OPROFILE *om, const P7_OMX *ox, int i, int k); static inline int select_d(const P7_OPROFILE *om, const P7_OMX *ox, int i, int k); static inline int select_i(const P7_OPROFILE *om, const P7_OMX *ox, int i, int k); static inline int select_n(int i); static inline int select_c(const P7_OPROFILE *om, const P7_OMX *pp, const P7_OMX *ox, int i); static inline int select_j(const P7_OPROFILE *om, const P7_OMX *pp, const P7_OMX *ox, int i); static inline int select_e(const P7_OPROFILE *om, const P7_OMX *ox, int i, int *ret_k); static inline int select_b(const P7_OPROFILE *om, const P7_OMX *ox, int i); /* Function: p7_OATrace() * Synopsis: Optimal accuracy decoding: traceback. * Incept: SRE, Mon Aug 18 13:53:33 2008 [Janelia] * * Purpose: The traceback stage of the optimal accuracy decoding algorithm * \citep{Kall05}. * * Caller provides the OA DP matrix that was just * calculated by , as well as the * posterior decoding matrix , which was calculated by * Forward/Backward on a target sequence using the query * model . Because the calculation depends only on * , the target sequence itself need not be provided. * * The resulting optimal accuracy decoding traceback is put * in a caller-provided traceback structure